From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: David Cantrell To: git-commits@fedoraproject.org Subject: [rpms/ckermit] epel8: Add '-ansi -D_DEFAULT_SOURCE' to KFLAG variable to fix FTBFS (#2339971) Date: Fri, 18 Sep 2026 13:57:54 GMT Message-ID: <178973987425.1.8110661979300203674.rpms-ckermit-2a4818dae7fd@fedoraproject.org> List-ID: X-Git-Repo: rpms/ckermit X-Git-Branch: epel8 X-Git-Rev: 2a4818dae7fdaa057fe668f2b3bef750093fdc92 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvY2tlcm1pdAogICAgICAgICAgICBCcmFuY2ggOiBlcGVsOAogICAgICAgICAg ICBDb21taXQgOiAyYTQ4MThkYWU3ZmRhYTA1N2ZlNjY4ZjJiM2JlZjc1MDA5M2ZkYzkyCiAgICAg ICAgICAgIEF1dGhvciA6IERhdmlkIENhbnRyZWxsIDxkY2FudHJlbGxAYnVyZGVsbC5vcmc+CiAg ICAgICAgICAgIERhdGUgICA6IDIwMjUtMDEtMjJUMTQ6MjU6MjYtMDU6MDAKICAgICAgICAgICAg U3RhdHMgIDogKzQxMDY0MC8tMiBpbiA4MyBmaWxlKHMpCiAgICAgICAgICAgIFVSTCAgICA6IGh0 dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvY2tlcm1pdC9jLzJhNDgxOGRhZTdmZGFh MDU3ZmU2NjhmMmIzYmVmNzUwMDkzZmRjOTI/YnJhbmNoPWVwZWw4CgogICAgICAgICAgICBMb2c6 CiAgICAgICAgICAgIEFkZCAnLWFuc2kgLURfREVGQVVMVF9TT1VSQ0UnIHRvIEtGTEFHIHZhcmlh YmxlIHRvIGZpeCBGVEJGUyAoIzIzMzk5NzEpCgpTaWduZWQtb2ZmLWJ5OiBEYXZpZCBDYW50cmVs bCA8ZGNhbnRyZWxsQGJ1cmRlbGwub3JnPgoKLS0tCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL0NPUFlJTkcuVFhUIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9DT1BZSU5HLlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4yMDBmMjM2Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9DT1BZSU5HLlRYVApAQCAtMCwwICsxLDMxIEBACitUSEUgQy1L RVJNSVQgOS4wIExJQ0VOU0UKKworRnJpIEp1biAyNCAxNDo0MzozNSAyMDExCisKK1JlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCithcmUgbWV0OgorIAorICsgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyArIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKyAKKyArIE5laXRoZXIgdGhl IG5hbWUgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGFueQorICAgY29u dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkCisgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uCisgCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP UFlSSUdIVAorSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCmRpZmYgLS1naXQgYS9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL1JFQURNRS5mZWRvcmEgYi9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL1JFQURNRS5mZWRvcmEKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhNDFhYwotLS0gL2Rldi9udWxsCisrKyBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvUkVBRE1FLmZlZG9yYQpAQCAtMCww ICsxLDIyIEBACitJZiB1bnByaXZpbGVnZWQgdXNlcnMgYXR0ZW1wdCB0byBhY2Nlc3MgYSBzZXJp YWwgcG9ydCwgZS5nLgorL2Rldi90dHlTPG4+IG9yIC9kZXYvdHR5VVNCPG4+LCB0aGV5IHdpbGwg bm9ybWFsbHkgZ2V0IGFuIGVycm9yCittZXNzYWdlIHN1Y2ggYXM6CisKKyAgICBTb3JyeSwgd3Jp dGUgYWNjZXNzIHRvIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5IGRlbmllZC4KKworVGhpcyBtZXNz YWdlIGlzIGFjdHVhbGx5IGR1ZSB0byBwZXJtaXNzaW9ucyBvbiB0aGUgZGV2aWNlLCBub3QgdGhl Citsb2NrZmlsZSBkaXJlY3RvcnkuCisKK0lmIGl0IGlzIGRlc2lyZWQgdG8gYWxsb3cgc3BlY2lm aWMgdW5wcml2aWxlZ2VkIHVzZXJzIHRvIHVzZSBja2VybWl0Cit0byBhY2Nlc3Mgc2VyaWFsIHBv cnRzLCBhZGQgdGhvc2UgdXNlcnMgdG8gdGhlICJkaWFsb3V0IiBncm91cC4gIE9uZQord2F5IHRv IGFjY29tcGxpc2ggdGhpcyBpcyB1c2luZyBhIGNvbW1hbmQgbGluZSBzdWNoIGFzOgorCisgICAg c3VkbyB1c2VybW9kIC1hIC1HIGRpYWxvdXQgPHVzZXJuYW1lPgorCitUaGlzIHdpbGwgYXBwbHkg dG8gZnV0dXJlIGxvZ2lucyBieSB0aGF0IHVzZXIuCisKK0lmIHlvdSB3YW50IHRvIG1ha2UgdGhl IHNlcmlhbCBwb3J0cyBhY2Nlc3NpYmxlIHRvIGFsbCB1c2VycyB3aXRob3V0CithZGRpbmcgdGhl bSB0byB0aGUgZGlhbG91dCBncm91cCAobm90IHJlY29tbWVuZGVkKSwgeW91IGNhbiBjaGFuZ2Ug dGhlCitwZXJtaXNzaW9ucyBvZiB0aGUgc2VyaWFsIGRldmljZSB0byA2NjYsIGUuZy4sCisKKyAg ICBzdWRvIGNobW9kIDY2NiAvZGV2L3R0eVM8bj4KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrX2NycC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja19jcnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi41OTNkMGI0Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja19jcnAuYwpAQCAtMCwwICsxLDU2MjIgQEAKK2NoYXIgKmNrY3JwdiA9 ICJFbmNyeXB0aW9uIEVuZ2luZSwgOS4wLjExNywgMTkgTWFyIDIwMTAiOworLyoKKyAgQyBLIF8g QyBSIFAgLiBDICAtICBDcnlwdG9ncmFwaHkgZm9yIEMtS2VybWl0IgorCisgIENvcHlyaWdodCAo QykgMTk5OCwgMjAxMCwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRo ZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMt S2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhl IGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisKKyAgQXV0 aG9yOgorICBKZWZmcmV5IEUgQWx0bWFuIChqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tKQor ICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKyovCisKKyNkZWZpbmUgQ0tf Q1JQX0MKKyNpZmRlZiBDS19ERVMKKyNpZmRlZiBDS19TU0wKKyNpZm5kZWYgTElCREVTCisjZGVm aW5lIExJQkRFUworI2VuZGlmIC8qIExJQkRFUyAqLworI2VuZGlmIC8qIENLX1NTTCAqLworI2Vu ZGlmIC8qIENLX0RFUyAqLworCisjaWZkZWYgQ1JZUFRfRExMCisjZGVmaW5lIENLX0FVVEhFTlRJ Q0FUSU9OCisjZGVmaW5lIENLX0VOQ1JZUFRJT04KKyNkZWZpbmUgQ0tfREVTCisjZGVmaW5lIENL X0NBU1QKKyNpZm5kZWYgTElCREVTCisjZGVmaW5lIExJQkRFUworI2VuZGlmIC8qIExJQkRFUyAq LworCisjZGVmaW5lIFRFTENNRFMgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gZGVmaW5l IG5hbWUgYXJyYXkgKi8KKyNkZWZpbmUgVEVMT1BUUyAgICAgICAgICAgICAgICAgICAgICAgICAv KiB0byBkZWZpbmUgbmFtZSBhcnJheSAqLworI2RlZmluZSBFTkNSWVBUX05BTUVTCisjZW5kaWYg LyogQ1JZUFRfRExMICovCisKKyNpbmNsdWRlICJja2NzeW0uaCIKKyNpbmNsdWRlICJja2NkZWIu aCIKKyNpbmNsdWRlICJja2NuZXQuaCIKKworI2lmZGVmIERFQlVHCisjdW5kZWYgREVCVUcKKyNl bmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyNpZmRlZiBDS19F TkNSWVBUSU9OCisjZGVmaW5lIEVOQ1JZUFRJT04KKyNpZmRlZiBDS19ERVMKKyNkZWZpbmUgREVT X0VOQ1JZUFRJT04KKyNlbmRpZiAvKiBDS19ERVMgKi8KKyNpZmRlZiAgQ0tfQ0FTVAorI2RlZmlu ZSBDQVNUX0VOQ1JZUFRJT04KKyNlbmRpZiAvKiBDS19DQVNUICovCisjaWZkZWYgQ09NTUVOVAor I2RlZmluZSBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLwor CisjaWZkZWYgQ0tfRU5DUllQVElPTgorCisjaW5jbHVkZSAiY2t1Y21kLmgiICAgICAgICAgICAg ICAgICAgICAgLyogRm9yIHN0cnVjdCBrZXl0YWIgZGVmaW5pdGlvbiAqLworI2luY2x1ZGUgImNr dWF0aC5oIgorI2luY2x1ZGUgImNrdWF0Mi5oIgorI2lmZGVmIE1JVF9DVVJSRU5UCisjaW5jbHVk ZSA8a3JiNS5oPgorI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisKKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBPUzIKKyNpbmNsdWRlIDxzdGRhcmcuaD4K KyNpZmRlZiBPUzJPTkxZCisjaW5jbHVkZSA8b3MyLmg+CisjZW5kaWYgLyogT1MyT05MWSAqLwor I2luY2x1ZGUgImNrb3N5bi5oIgorI2Vsc2UgLyogT1MyICovCitzdGF0aWMgY2hhciAqIHRtcHN0 cmluZyA9IE5VTEw7CisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgQ0FTVF9PUl9FWFBPUlQK KyNpZmRlZiBDQVNUX0VOQ1JZUFRJT04KKyNkZWZpbmUgQ0FTVF9PUl9FWFBPUlQKKyNlbmRpZiAv KiBDQVNUX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCisjZGVm aW5lIENBU1RfT1JfRVhQT1JUCisjZW5kaWYgLyogQ0FTVF9FWFBPUlRfRU5DUllQVElPTiAqLwor I2VuZGlmIC8qIENBU1RfT1JfRVhQT1JUICovCisKKyNpZmRlZiBNQUNPU1gKKyN1bmRlZiBMSUJE RVMKKyNlbmRpZiAvKiBNQUNPU1ggKi8KKworI2lmZGVmIENSWVBUX0RMTAoraW50IGNtZF9xdW90 aW5nID0gMDsKKworI2lmbmRlZiBURUxPUFRfTUFDUk8KK2ludAordGVsb3B0X2luZGV4KG9wdCkg aW50IG9wdDsgeworICAgIGlmICggb3B0ID49IDAgJiYgb3B0IDw9IFRFTE9QVF9TRU5EX1VSTCAp CisgICAgICAgIHJldHVybihvcHQpOworICAgIGVsc2UgaWYgKCBvcHQgPj0gVEVMT1BUX1BSQUdN QV9MT0dPTiAmJiBvcHQgPD0gVEVMT1BUX1BSQUdNQV9IRUFSVEJFQVQgKQorICAgICAgICByZXR1 cm4ob3B0LTg5KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybihOVEVMT1BUUyk7Cit9CisKK2lu dAordGVsb3B0X29rKG9wdCkgaW50IG9wdDsgeworICAgIHJldHVybigob3B0ID49IFRFTE9QVF9C SU5BUlkgJiYgb3B0IDw9IFRFTE9QVF9TRU5EX1VSTCkgfHwKKyAgICAgICAgKG9wdCA+PSBURUxP UFRfUFJBR01BX0xPR09OICYmIG9wdCA8PSBURUxPUFRfUFJBR01BX0hFQVJUQkVBVCkpOworfQor CitDSEFSICoKK3RlbG9wdChvcHQpIGludCBvcHQ7IHsKKyAgICBpZiAoIHRlbG9wdF9vayhvcHQp ICkKKyAgICAgICAgcmV0dXJuKHRlbG9wdHNbdGVsb3B0X2luZGV4KG9wdCldKTsKKyAgICBlbHNl CisgICAgICAgIHJldHVybigiVU5LTk9XTiIpOworfQorI2VuZGlmIC8qIFRFTE9QVF9NQUNSTyAq LworCitzdGF0aWMgaW50ICgqcF90dG9sKShjaGFyICosaW50KT1OVUxMOworc3RhdGljIGludCAo KnBfZG9kZWJ1ZykoaW50LGNoYXIgKixjaGFyICosQ0tfT0ZGX1QpPU5VTEw7CitzdGF0aWMgaW50 ICgqcF9kb2hleGR1bXApKGNoYXIgKixjaGFyICosaW50KT1OVUxMOworc3RhdGljIHZvaWQgKCpw X3RuX2RlYnVnKShjaGFyICopPU5VTEw7CitzdGF0aWMgaW50ICgqcF92c2NybnByaW50ZikoY2hh ciAqLCAuLi4pPU5VTEw7CitzdGF0aWMgdm9pZCAqIHBfazVfY29udGV4dD1OVUxMOworc3RhdGlj IHVuc2lnbmVkIGxvbmcgKCpwX3JlcXRlbG11dGV4KSh1bnNpZ25lZCBsb25nKT1OVUxMOworc3Rh dGljIHVuc2lnbmVkIGxvbmcgKCpwX3JlbHRlbG11dGV4KSh2b2lkKT1OVUxMOworCit1bnNpZ25l ZCBsb25nCitSZXF1ZXN0VGVsbmV0TXV0ZXgodW5zaWduZWQgbG9uZyB4KQoreworICAgIGlmICgg cF9yZXF0ZWxtdXRleCApCisgICAgICAgIHJldHVybiBwX3JlcXRlbG11dGV4KHgpOworICAgIHJl dHVybiAwOworfQorCit1bnNpZ25lZCBsb25nCitSZWxlYXNlVGVsbmV0TXV0ZXgodm9pZCkKK3sK KyAgICBpZiAoIHBfcmVsdGVsbXV0ZXggKQorICAgICAgICByZXR1cm4gcF9yZWx0ZWxtdXRleCgp OworICAgIHJldHVybiAwOworfQorCitpbnQKK3R0b2woY2hhciAqIHMsIGludCBuKQoreworICAg IGlmICggcF90dG9sICkKKyAgICAgICAgcmV0dXJuKHBfdHRvbChzLG4pKTsKKyAgICBlbHNlCisg ICAgICAgIHJldHVybigtMSk7Cit9CisKK2ludAorZG9kZWJ1ZyhpbnQgZmxhZywgY2hhciAqIHMx LCBjaGFyICogczIsIENLX09GRl9UIG4pCit7CisgICAgaWYgKCBwX2RvZGVidWcgKQorICAgICAg ICByZXR1cm4ocF9kb2RlYnVnKGZsYWcsczEsczIsbikpOworICAgIGVsc2UKKyAgICAgICAgcmV0 dXJuKC0xKTsKK30KKworaW50Citkb2hleGR1bXAoIGNoYXIgKiBzMSwgY2hhciAqIHMyLCBpbnQg biApCit7CisgICAgaWYgKCBwX2RvaGV4ZHVtcCApCisgICAgICAgIHBfZG9oZXhkdW1wKHMxLHMy LG4pOworICAgIHJldHVybigwKTsKK30KKwordm9pZAordG5fZGVidWcoIGNoYXIgKiBzICkKK3sK KyAgICBpZiAoIHBfdG5fZGVidWcgKQorICAgICAgICBwX3RuX2RlYnVnKHMpOworfQorCitzdGF0 aWMgY2hhciBteXBydGZzdHJbNDA5Nl07CitpbnQKK1ZzY3JucHJpbnRmKGNvbnN0IGNoYXIgKiBm b3JtYXQsIC4uLikgeworICAgIGludCBpLCBsZW4sIHJjPTA7CisgICAgY2hhciAqY3A7CisgICAg dmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworI2lmZGVmIE5UCisgICAg cmMgPSBfdnNucHJpbnRmKG15cHJ0ZnN0ciwgc2l6ZW9mKG15cHJ0ZnN0ciktMSwgZm9ybWF0LCBh cCk7CisjZWxzZSAvKiBOVCAqLworICAgIHJjID0gdnNwcmludGYobXlwcnRmc3RyLCBmb3JtYXQs IGFwKTsKKyNlbmRpZiAvKiBOVCAqLworICAgIHZhX2VuZChhcCk7CisKKyAgICBpZiAoIHBfdnNj cm5wcmludGYgKQorICAgICAgICByZXR1cm4ocF92c2NybnByaW50ZihteXBydGZzdHIpKTsKKyAg ICBlbHNlCisgICAgICAgIHJldHVybigtMSk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0 bl9oZXgoQ0hBUiAqIGJ1ZiwgaW50IGJ1ZmxlbiwgQ0hBUiAqIGRhdGEsIGludCBkYXRhbGVuKQor I2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuX2hleChidWYsIGJ1ZmxlbiwgZGF0YSwgZGF0YWxlbikK KyAgICBDSEFSICogYnVmOworICAgIGludCBidWZsZW47CisgICAgQ0hBUiAqIGRhdGE7CisgICAg aW50IGRhdGFsZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpbnQgaSA9IDAsIGog PSAwLCBrID0gMDsKKyAgICBDSEFSIHRtcFs4XTsKKyNpZmRlZiBDT01NRU5UCisgICAgaW50IHdh c19oZXggPSAxOworCisgICAgZm9yIChrPTA7IGsgPCBkYXRhbGVuOyBrKyspIHsKKyAgICAgICAg aWYgKGRhdGFba10gPCAzMiB8fCBkYXRhW2tdID49IDEyNykgeworICAgICAgICAgICAgc3ByaW50 Zih0bXAsIiVzJTAyWCAiLHdhc19oZXg/IiI6IlwiICIsZGF0YVtrXSk7CisgICAgICAgICAgICB3 YXNfaGV4ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwcmludGYodG1wLCIl cyVjIix3YXNfaGV4PyJcIiI6IiIsZGF0YVtrXSk7CisgICAgICAgICAgICB3YXNfaGV4ID0gMDsK KyAgICAgICAgfQorICAgICAgICBja3N0cm5jYXQoYnVmLHRtcCxidWZsZW4pOworICAgIH0KKyAg ICBpZiAoIXdhc19oZXgpCisgICAgICAgIGNrc3RybmNhdChidWYsIlwiICIsYnVmbGVuKTsKKyNl bHNlIC8qIENPTU1FTlQgKi8KKyAgICBpZiAoZGF0YWxlbiA8PSAwIHx8IGRhdGEgPT0gTlVMTCkK KyAgICAgICAgcmV0dXJuKDApOworCisgICAgZm9yIChpID0gMDsgaSA8IGRhdGFsZW47IGkrKykg eworICAgICAgICBja3N0cm5jYXQoYnVmLCJcclxuICAiLGJ1Zmxlbik7CisgICAgICAgIGZvciAo aiA9IDAgOyAoaiA8IDE2KTsgaisrKSB7CisgICAgICAgICAgICBpZiAoKGkgKyBqKSA8IGRhdGFs ZW4pCisgICAgICAgICAgICAgIHNwcmludGYodG1wLAorICAgICAgICAgICAgICAgICAgICAgICIl cyUwMnggIiwKKyAgICAgICAgICAgICAgICAgICAgICAoaiA9PSA4ID8gInwgIiA6ICIiKSwKKyAg ICAgICAgICAgICAgICAgICAgICAoQ0hBUikgZGF0YVtpICsgal0KKyAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzcHJpbnRmKHRtcCwKKyAg ICAgICAgICAgICAgICAgICAgICAiJXMgICAiLAorICAgICAgICAgICAgICAgICAgICAgIChqID09 IDggPyAifCAiIDogIiIpCisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNr c3RybmNhdChidWYsdG1wLGJ1Zmxlbik7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY2F0KGJ1 ZiwiICIsYnVmbGVuKTsKKyAgICAgICAgZm9yIChrID0gMDsgKGsgPCAxNikgJiYgKChpICsgaykg PCBkYXRhbGVuKTsgaysrKSB7CisgICAgICAgICAgICBzcHJpbnRmKHRtcCwKKyAgICAgICAgICAg ICAgICAgICAgICIlcyVjIiwKKyAgICAgICAgICAgICAgICAgICAgIChrID09IDggPyAiICIgOiAi IiksCisgICAgICAgICAgICAgICAgICAgICBpc3ByaW50KGRhdGFbaSArIGtdKSA/IGRhdGFbaSAr IGtdIDogJy4nCisgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY2tzdHJuY2F0 KGJ1Zix0bXAsYnVmbGVuKTsKKyAgICAgICAgfQorICAgICAgICBpICs9IGogLSAxOworICAgIH0g LyogZW5kIGZvciAqLworICAgIGNrc3RybmNhdChidWYsIlxyXG4gICIsYnVmbGVuKTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgcmV0dXJuKHN0cmxlbihidWYpKTsKK30KKworI2lmZGVmIENP TU1FTlQKKyNkZWZpbmUgdHRvbCAgICAgICAgZGxsX3R0b2wKKyNkZWZpbmUgZG9kZWJ1ZyAgICAg ZGxsX2RvZGVidWcKKyNkZWZpbmUgZG9oZXhkdW1wICAgZGxsX2RvaGV4ZHVtcAorI2RlZmluZSB0 bl9kZWJ1ZyAgICBkbGxfdG5fZGVidWcKKyNkZWZpbmUgVnNjcm5wcmludGYgZGxsX3ZzY3JucHJp bnRmCisjZW5kaWYgLyogQ09NTUVOVCAqLworCitjaGFyIHRuX21zZ1tUTl9NU0dfTEVOXSwgaGV4 YnVmW1ROX01TR19MRU5dOyAgIC8qIGZyb20gY2tjbmV0LmMgKi8KK2ludCBkZWJsb2c9MSwgZGVi c2VzPTEsIHRuX2RlYj0xOworI2Vsc2UgLyogQ1JZUFRfRExMICovCitleHRlcm4gY2hhciB0bl9t c2dbXSwgaGV4YnVmW107ICAgICAgICAgLyogZnJvbSBja2NuZXQuYyAqLworZXh0ZXJuIGludCBk ZWJsb2csIGRlYnNlcywgdG5fZGViOworI2lmZGVmIE1JVF9DVVJSRU5UCitleHRlcm4ga3JiNV9j b250ZXh0IGs1X2NvbnRleHQ7CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KKyNlbmRpZiAvKiBD UllQVF9ETEwgKi8KKworI2lmZGVmIExJQkRFUworI2lmZGVmIE1BQ09TWAorI2RlZmluZSBkZXNf bmV3X3JhbmRvbV9rZXkgICAgICAgICAgICBja19kZXNfbmV3X3JhbmRvbV9rZXkKKyNkZWZpbmUg ZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQgY2tfZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9y X3NlZWQKKyNkZWZpbmUgZGVzX2tleV9zY2hlZCAgICAgICAgICAgICAgICAgY2tfZGVzX2tleV9z Y2hlZAorI2RlZmluZSBkZXNfZWNiX2VuY3J5cHQgICAgICAgICAgICAgICBja19kZXNfZWNiX2Vu Y3J5cHQKKyNkZWZpbmUgZGVzX3N0cmluZ190b19rZXkgICAgICAgICAgICAgY2tfZGVzX3N0cmlu Z190b19rZXkKKyNkZWZpbmUgZGVzX2ZpeHVwX2tleV9wYXJpdHkgICAgICAgICAgY2tfZGVzX2Zp eHVwX2tleV9wYXJpdHkKKyNlbmRpZiAvKiBNQUNPU1ggKi8KKyNpZm5kZWYgVU5JWAorI2RlZmlu ZSBkZXNfbmV3X3JhbmRvbV9rZXkgICAgICAgICAgICBkZXNfcmFuZG9tX2tleQorI2RlZmluZSBk ZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZCBkZXNfcmFuZG9tX3NlZWQKKyNlbmRpZiAvKiBV TklYICovCisjZGVmaW5lIGRlc19maXh1cF9rZXlfcGFyaXR5ICAgICAgICAgIGRlc19zZXRfb2Rk X3Bhcml0eQorI2lmZGVmIE9QRU5TU0xfMDk3CisjZGVmaW5lIE9QRU5TU0xfRU5BQkxFX09MRF9E RVNfU1VQUE9SVAorI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisjZW5kaWYgLyogT1BFTlNTTF8w OTcgKi8KKyNlbHNlIC8qIExJQkRFUyAqLworI2lmZGVmIFVOSVgKKyNkZWZpbmUgZGVzX3NldF9y YW5kb21fZ2VuZXJhdG9yX3NlZWQoeCkgZGVzX2luaXRfcmFuZG9tX251bWJlcl9nZW5lcmF0b3Io eCkKKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgT1MyCisjZGVmaW5lIGRlc19uZXdfcmFuZG9t X2tleSAgICAgICAgICAgIGNrX2Rlc19uZXdfcmFuZG9tX2tleQorI2RlZmluZSBkZXNfc2V0X3Jh bmRvbV9nZW5lcmF0b3Jfc2VlZCBja19kZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZAorI2Rl ZmluZSBkZXNfa2V5X3NjaGVkICAgICAgICAgICAgICAgICBja19kZXNfa2V5X3NjaGVkCisjZGVm aW5lIGRlc19lY2JfZW5jcnlwdCAgICAgICAgICAgICAgIGNrX2Rlc19lY2JfZW5jcnlwdAorI2Rl ZmluZSBkZXNfc3RyaW5nX3RvX2tleSAgICAgICAgICAgICBja19kZXNfc3RyaW5nX3RvX2tleQor I2RlZmluZSBkZXNfZml4dXBfa2V5X3Bhcml0eSAgICAgICAgICBja19kZXNfZml4dXBfa2V5X3Bh cml0eQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIExJQkRFUyAqLworCisjaWZkZWYgQ0tf REVTCisvKiBUaGlzIGNvZGUgY29tZXMgZnJvbSBFcmljIFlvdW5nJ3MgbGliZGVzIHBhY2thZ2Ug YW5kIGlzIG5vdCBwYXJ0ICAgKi8KKy8qIG9mIHRoZSBzdGFuZGFyZCBNSVQgREVTIGxpYnJhcnkg dGhhdCBpcyBwYXJ0IG9mIEtlcmJlcm9zLiBIb3dldmVyLCAqLworLyogaXQgaXMgZXh0cmVtZWx5 IHVzZWZ1bC4gIFNvIHdlIGFkZCBpdCBoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICovCisK KworLyogV2VhayBhbmQgc2VtaSB3ZWVrIGtleXMgYXMgdGFrZSBmcm9tCisgKiAlQSBELlcuIERh dmllcworICogJUEgVy5MLiBQcmljZQorICogJVQgU2VjdXJpdHkgZm9yIENvbXB1dGVyIE5ldHdv cmtzCisgKiAlSSBKb2huIFdpbGV5ICYgU29ucworICogJUQgMTk4NAorICogTWFueSB0aGFua3Mg dG8gc21iQHVseXNzZXMuYXR0LmNvbSAoU3RldmVuIEJlbGxvdmluKSBmb3IgdGhlIHJlZmVyZW5j ZQorICogKGFuZCBhY3R1YWwgY2Jsb2NrIHZhbHVlcykuCisgKi8KKyNkZWZpbmUgTlVNX1dFQUtf S0VZICAgIDE2CitzdGF0aWMgQmxvY2sgd2Vha19rZXlzW05VTV9XRUFLX0tFWV09eworICAgICAg ICAvKiB3ZWFrIGtleXMgKi8KKyAgICAgICAgezB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAx LDB4MDEsMHgwMX0sCisgICAgICAgIHsweEZFLDB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRSwweEZF LDB4RkV9LAorICAgICAgICB7MHgxRiwweDFGLDB4MUYsMHgxRiwweDFGLDB4MUYsMHgxRiwweDFG fSwKKyAgICAgICAgezB4RTAsMHhFMCwweEUwLDB4RTAsMHhFMCwweEUwLDB4RTAsMHhFMH0sCisg ICAgICAgIC8qIHNlbWktd2VhayBrZXlzICovCisgICAgICAgIHsweDAxLDB4RkUsMHgwMSwweEZF LDB4MDEsMHhGRSwweDAxLDB4RkV9LAorICAgICAgICB7MHhGRSwweDAxLDB4RkUsMHgwMSwweEZF LDB4MDEsMHhGRSwweDAxfSwKKyAgICAgICAgezB4MUYsMHhFMCwweDFGLDB4RTAsMHgwRSwweEYx LDB4MEUsMHhGMX0sCisgICAgICAgIHsweEUwLDB4MUYsMHhFMCwweDFGLDB4RjEsMHgwRSwweEYx LDB4MEV9LAorICAgICAgICB7MHgwMSwweEUwLDB4MDEsMHhFMCwweDAxLDB4RjEsMHgwMSwweEYx fSwKKyAgICAgICAgezB4RTAsMHgwMSwweEUwLDB4MDEsMHhGMSwweDAxLDB4RjEsMHgwMX0sCisg ICAgICAgIHsweDFGLDB4RkUsMHgxRiwweEZFLDB4MEUsMHhGRSwweDBFLDB4RkV9LAorICAgICAg ICB7MHhGRSwweDFGLDB4RkUsMHgxRiwweEZFLDB4MEUsMHhGRSwweDBFfSwKKyAgICAgICAgezB4 MDEsMHgxRiwweDAxLDB4MUYsMHgwMSwweDBFLDB4MDEsMHgwRX0sCisgICAgICAgIHsweDFGLDB4 MDEsMHgxRiwweDAxLDB4MEUsMHgwMSwweDBFLDB4MDF9LAorICAgICAgICB7MHhFMCwweEZFLDB4 RTAsMHhGRSwweEYxLDB4RkUsMHhGMSwweEZFfSwKKyAgICAgICAgezB4RkUsMHhFMCwweEZFLDB4 RTAsMHhGRSwweEYxLDB4RkUsMHhGMX19OworCitpbnQKK2NrX2Rlc19pc193ZWFrX2tleShrZXkp CitCbG9jayBrZXk7Cit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGk9MDsgaTxOVU1fV0VBS19L RVk7IGkrKykgeworICAgICAgICAvKiBBZGRlZCA9PSAwIHRvIGNvbXBhcmlzaW9uLCBJIG9idmlv dXNseSBkb24ndCBydW4KKyAgICAgICAgKiB0aGlzIHNlY3Rpb24gdmVyeSBvZnRlbiA6LSgsIHRo YW5rcyB0bworICAgICAgICAqIGVuZ2luZWVyaW5nQE1vcm5pbmdTdGFyLkNvbSBmb3IgdGhlIGZp eAorICAgICAgICAqIGVheSA5My8wNi8yOQorICAgICAgICAqIEFub3RoZXIgcHJvYmxlbSwgSSB3 YXMgY29tcGFyaW5nIG9ubHkgdGhlIGZpcnN0IDQKKyAgICAgICAgKiBieXRlcywgOTcvMDMvMTgg Ki8KKyAgICAgICAgaWYgKG1lbWNtcCh3ZWFrX2tleXNbaV0sa2V5LHNpemVvZihCbG9jaykpID09 IDApCisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKwor I2lmZGVmIFVOSVgKKyNpZmRlZiBMSUJERVMKKyNpZm5kZWYgTUFDT1NYCisvKiBUaGVzZSBmdW5j dGlvbnMgYXJlIG5vdCBwYXJ0IG9mIEVyaWMgWW91bmcncyBERVMgbGlicmFyeSAqLworLyogX3Vu aXhfdGltZV9nbXRfdW5peHNlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwor LyogX2Rlc19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVkICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworLyogX2Rlc19maXh1cF9rZXlfcGFyaXR5ICAgKGFkZGVkIGluIDAuOS41KSAgICAgICAg ICAgICAgICAqLworLyogX2Rlc19uZXdfcmFuZG9tX2tleSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKK3Vuc2lnbmVkIGxvbmcK K3VuaXhfdGltZV9nbXRfdW5peHNlYyAodXNlY3B0cikKKyAgICB1bnNpZ25lZCBsb25nICAqdXNl Y3B0cjsKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OworCisgICAgKHZvaWQpIGdldHRpbWVv ZmRheSAoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKTApOworICAgIGlmICh1c2VjcHRyKQorICAg ICAgICAqdXNlY3B0ciA9IG5vdy50dl91c2VjOworICAgIHJldHVybiBub3cudHZfc2VjOworfQor Cit2b2lkCitkZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jfc2VlZChCbG9jayBCKQoreworICAgIGRl c19yYW5kb21fc2VlZChCKTsKKyAgICByZXR1cm47Cit9CisKKyNpZmRlZiBDT01NRU5UCisvKiBh ZGRlZCB0byBvcGVuc3NsIGluIDAuOS41ICovCit2b2lkCitkZXNfZml4dXBfa2V5X3Bhcml0eShC bG9jayBCKQoreworICAgIGRlc19zZXRfb2RkX3Bhcml0eShCKTsKKyAgICByZXR1cm47Cit9Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworaW50CitkZXNfbmV3X3JhbmRvbV9rZXkoQmxvY2sgQikKK3sK KyAgICBpbnQgcmM9MDsKKyAgICAvKiBXQVJOSU5HOgorICAgICAgIFRoaXMgbWlnaHQgbmVlZCB0 byBoYXZlIHRoZSAicmMgPSAiIHJlbW92ZWQgYmVjYXVzZSB0aGlzCisgICAgICAgaXMgVk9JRCBp biBsYXRlciwgYW5kIG1heWJlIGV2ZW4gYWxsLCB2ZXJzaW9ucy4KKyAgICAqLyAgICAgICAKKyAg ICByYyA9IGRlc19yYW5kb21fa2V5KEIpOworICAgIHJldHVybihyYyk7Cit9CisKKyNlbmRpZiAv KiBNQUNPU1ggKi8KKyNlbmRpZiAvKiBMSUJERVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5k aWYgLyogQ0tfREVTICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqICAg ICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6 CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogICAg ICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRo ZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp YnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VD SCBEQU1BR0UuCisgKi8KKworLyogYmFzZWQgb24gQCgjKWVuY3J5cHQuYyAgICAgICA4LjEgKEJl cmtlbGV5KSA2LzQvOTMgKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMTk5MCBieSB0aGUgTWFz c2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorICoKKyAqIEV4cG9ydCBvZiB0aGlz IHNvZnR3YXJlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSBtYXkKKyAqIHJlcXVp cmUgYSBzcGVjaWZpYyBsaWNlbnNlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4K KyAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlv biBjb250ZW1wbGF0aW5nCisgKiBleHBvcnQgdG8gb2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9y ZSBleHBvcnRpbmcuCisgKgorICogV0lUSElOIFRIQVQgQ09OU1RSQUlOVCwgcGVybWlzc2lvbiB0 byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kCisgKiBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5k IGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQKKyAqIHdpdGhvdXQgZmVlIGlz IGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v dGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5v dGljZSBhbmQKKyAqIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcg ZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNl ZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZworICogdG8gZGlzdHJpYnV0 aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBw ZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3Vp dGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJv dmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3MKKyAqIG9yIGltcGxpZWQgd2FycmFudHkuCisg Ki8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBUaGVzZSBmdW5jdGlvbiBwb2ludGVy cyBwb2ludCB0byB0aGUgY3VycmVudCByb3V0aW5lcworICogZm9yIGVuY3J5cHRpbmcgYW5kIGRl Y3J5cHRpbmcgZGF0YS4KKyAqLworLyogTk9URTogVGhlc2UgbmV4dCB0d28gbWlnaHQgbmVlZCB0 byBoYXZlIHRoZSAic3RhdGljICIgcmVtb3ZlZCAqLworCitzdGF0aWMgVk9JRCAgICAgKCplbmNy eXB0X291dHB1dCkgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK3N0YXRpYyBpbnQgICAgICAo KmRlY3J5cHRfaW5wdXQpIFAoKGludCkpOworCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQgZW5j cnlwdF9kZWJ1Z19tb2RlID0gMTsKK3N0YXRpYyBpbnQgZW5jcnlwdF92ZXJib3NlID0gMTsKKyNl bHNlCitzdGF0aWMgaW50IGVuY3J5cHRfdmVyYm9zZSA9IDE7CitzdGF0aWMgaW50IGVuY3J5cHRf ZGVidWdfbW9kZSA9IDA7CisjZW5kaWYKKworc3RhdGljIGNoYXIgZGJnYnVmIFsxNjM4NF07CisK K3N0YXRpYyBpbnQgZGVjcnlwdF9tb2RlID0gMDsKK3N0YXRpYyBpbnQgZW5jcnlwdF9tb2RlID0g MDsKK3N0YXRpYyBpbnQgYXV0b2VuY3J5cHQgPSAxOworc3RhdGljIGludCBhdXRvZGVjcnlwdCA9 IDE7CitzdGF0aWMgaW50IGhhdmVzZXNzaW9ua2V5ID0gMDsKKworc3RhdGljIGtzdHJlYW0gRW5j cnlwdEtTR2xvYmFsSGFjayA9IE5VTEw7CitzdGF0aWMgaW50ICAgICBFbmNyeXB0VHlwZSA9IEVO Q1RZUEVfQU5ZOworCisjZGVmaW5lIHR5cGVtYXNrKHgpICAgICAoKHgpID4gMCA/IDEgPDwgKCh4 KS0xKSA6IDApCisKK3N0YXRpYyBsb25nIGlfc3VwcG9ydF9lbmNyeXB0ID0KKyAgICAgICAgdHlw ZW1hc2soRU5DVFlQRV9ERVNfQ0ZCNjQpIHwgdHlwZW1hc2soRU5DVFlQRV9ERVNfT0ZCNjQpOwor c3RhdGljIGxvbmcgaV9zdXBwb3J0X2RlY3J5cHQgPQorICAgICAgICB0eXBlbWFzayhFTkNUWVBF X0RFU19DRkI2NCkgfCB0eXBlbWFzayhFTkNUWVBFX0RFU19PRkI2NCk7CitzdGF0aWMgbG9uZyBp X3dvbnRfc3VwcG9ydF9lbmNyeXB0ID0gMDsKK3N0YXRpYyBsb25nIGlfd29udF9zdXBwb3J0X2Rl Y3J5cHQgPSAwOworI2RlZmluZSBJX1NVUFBPUlRfRU5DUllQVCAgICAgICAoaV9zdXBwb3J0X2Vu Y3J5cHQgJiB+aV93b250X3N1cHBvcnRfZW5jcnlwdCkKKyNkZWZpbmUgSV9TVVBQT1JUX0RFQ1JZ UFQgICAgICAgKGlfc3VwcG9ydF9kZWNyeXB0ICYgfmlfd29udF9zdXBwb3J0X2RlY3J5cHQpCisK K3N0YXRpYyBsb25nIHJlbW90ZV9zdXBwb3J0c19lbmNyeXB0ID0gMDsKK3N0YXRpYyBsb25nIHJl bW90ZV9zdXBwb3J0c19kZWNyeXB0ID0gMDsKKworLyogTWFrZSBzdXJlIHRoYXQgdGhpcyBsaXN0 IGlzIGluIG9yZGVyIG9mIGFsZ29yaXRobSBzdHJlbmd0aCAgICAgKi8KKy8qIGFzIGl0IGRldGVy bWluZXMgdGhlIHNlYXJjaCBvcmRlciBmb3Igc2VsZWN0aW5nIHNwZWNpZmljICAgICAgICovCisv KiBlbmNyeXB0aW9uIGNob2ljZXMuICBBbGwgQ0ZCIG1vZGVzIG11c3QgY29tZSBiZWZvcmUgT0ZC IG1vZGVzLiAqLworc3RhdGljIEVuY3J5cHRpb25zIGVuY3J5cHRpb25zW10gPSB7CisjaWZkZWYg REVTX0VOQ1JZUFRJT04KKyAgICB7ICJERVMzX0NGQjY0IiwKKyAgICAgICAgICBFTkNUWVBFX0RF UzNfQ0ZCNjQsCisgICAgICAgICAgZGVzM19jZmI2NF9lbmNyeXB0LAorICAgICAgICAgIGRlczNf Y2ZiNjRfZGVjcnlwdCwKKyAgICAgICAgICBkZXMzX2NmYjY0X2luaXQsCisgICAgICAgICAgZGVz M19jZmI2NF9zdGFydCwKKyAgICAgICAgICBkZXMzX2NmYjY0X2lzLAorICAgICAgICAgIGRlczNf Y2ZiNjRfcmVwbHksCisgICAgICAgICAgZGVzM19jZmI2NF9zZXNzaW9uLAorICAgICAgICAgIGRl czNfY2ZiNjRfa2V5aWQsCisgICAgICAgICAgTlVMTCB9LAorI2VuZGlmIC8qIERFU19FTkNSWVBU SU9OICovCisjaWZkZWYgQ0FTVF9FTkNSWVBUSU9OCisjaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZ UFRJT04KKyAgICB7ICJDQVNUMTI4X0NGQjY0IiwgIEVOQ1RZUEVfQ0FTVDEyOF9DRkI2NCwKKyAg ICAgICAgICBjYXN0X2NmYjY0X2VuY3J5cHQsCisgICAgICAgICAgY2FzdF9jZmI2NF9kZWNyeXB0 LAorICAgICAgICAgIGNhc3RfY2ZiNjRfaW5pdCwKKyAgICAgICAgICBjYXN0X2NmYjY0X3N0YXJ0 LAorICAgICAgICAgIGNhc3RfY2ZiNjRfaXMsCisgICAgICAgICAgY2FzdF9jZmI2NF9yZXBseSwK KyAgICAgICAgICBjYXN0X2NmYjY0X3Nlc3Npb24sCisgICAgICAgICAgY2FzdF9jZmI2NF9rZXlp ZCwKKyAgICAgICAgICBOVUxMIH0sCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIERFU19FTkNSWVBU SU9OCisgICAgeyAiREVTX0NGQjY0IiwKKyAgICAgICAgICBFTkNUWVBFX0RFU19DRkI2NCwKKyAg ICAgICAgICBjZmI2NF9lbmNyeXB0LAorICAgICAgICAgIGNmYjY0X2RlY3J5cHQsCisgICAgICAg ICAgY2ZiNjRfaW5pdCwKKyAgICAgICAgICBjZmI2NF9zdGFydCwKKyAgICAgICAgICBjZmI2NF9p cywKKyAgICAgICAgICBjZmI2NF9yZXBseSwKKyAgICAgICAgICBjZmI2NF9zZXNzaW9uLAorICAg ICAgICAgIGNmYjY0X2tleWlkLAorICAgICAgICAgIE5VTEwgfSwKKyNlbmRpZiAgLyogREVTX0VO Q1JZUFRJT04gKi8KKyNpZiBkZWZpbmVkIChDQVNUX0VYUE9SVF9FTkNSWVBUSU9OKSB8fCBkZWZp bmVkKENBU1RfRU5DUllQVElPTikKKyAgICB7ICJDQVNUNV80MF9DRkI2NCIsIEVOQ1RZUEVfQ0FT VDVfNDBfQ0ZCNjQsCisgICAgICAgICAgY2FzdGV4cF9jZmI2NF9lbmNyeXB0LAorICAgICAgICAg IGNhc3RleHBfY2ZiNjRfZGVjcnlwdCwKKyAgICAgICAgICBjYXN0ZXhwX2NmYjY0X2luaXQsCisg ICAgICAgICAgY2FzdGV4cF9jZmI2NF9zdGFydCwKKyAgICAgICAgICBjYXN0ZXhwX2NmYjY0X2lz LAorICAgICAgICAgIGNhc3RleHBfY2ZiNjRfcmVwbHksCisgICAgICAgICAgY2FzdGV4cF9jZmI2 NF9zZXNzaW9uLAorICAgICAgICAgIGNhc3RleHBfY2ZiNjRfa2V5aWQsCisgICAgICAgICAgTlVM TCB9LAorI2VuZGlmIC8qIENBU1RfRU5DUllQVElPTiAqLworI2lmZGVmIERFU19FTkNSWVBUSU9O CisgICAgeyAiREVTM19PRkI2NCIsCisgICAgICAgICAgRU5DVFlQRV9ERVMzX09GQjY0LAorICAg ICAgICAgIGRlczNfb2ZiNjRfZW5jcnlwdCwKKyAgICAgICAgICBkZXMzX29mYjY0X2RlY3J5cHQs CisgICAgICAgICAgZGVzM19vZmI2NF9pbml0LAorICAgICAgICAgIGRlczNfb2ZiNjRfc3RhcnQs CisgICAgICAgICAgZGVzM19vZmI2NF9pcywKKyAgICAgICAgICBkZXMzX29mYjY0X3JlcGx5LAor ICAgICAgICAgIGRlczNfb2ZiNjRfc2Vzc2lvbiwKKyAgICAgICAgICBkZXMzX29mYjY0X2tleWlk LAorICAgICAgICAgIE5VTEwgfSwKKyNlbmRpZiAvKiBERVNfRU5DUllQVElPTiAqLworI2lmZGVm IENBU1RfRU5DUllQVElPTgorI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCisgICAgeyAi Q0FTVDEyOF9PRkI2NCIsICBFTkNUWVBFX0NBU1QxMjhfT0ZCNjQsCisgICAgICAgICAgY2FzdF9v ZmI2NF9lbmNyeXB0LAorICAgICAgICAgIGNhc3Rfb2ZiNjRfZGVjcnlwdCwKKyAgICAgICAgICBj YXN0X29mYjY0X2luaXQsCisgICAgICAgICAgY2FzdF9vZmI2NF9zdGFydCwKKyAgICAgICAgICBj YXN0X29mYjY0X2lzLAorICAgICAgICAgIGNhc3Rfb2ZiNjRfcmVwbHksCisgICAgICAgICAgY2Fz dF9vZmI2NF9zZXNzaW9uLAorICAgICAgICAgIGNhc3Rfb2ZiNjRfa2V5aWQsCisgICAgICAgICAg TlVMTCB9LAorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBERVNfRU5DUllQVElPTgorICAgIHsgIkRF U19PRkI2NCIsCisgICAgICAgICAgRU5DVFlQRV9ERVNfT0ZCNjQsCisgICAgICAgICAgb2ZiNjRf ZW5jcnlwdCwKKyAgICAgICAgICBvZmI2NF9kZWNyeXB0LAorICAgICAgICAgIG9mYjY0X2luaXQs CisgICAgICAgICAgb2ZiNjRfc3RhcnQsCisgICAgICAgICAgb2ZiNjRfaXMsCisgICAgICAgICAg b2ZiNjRfcmVwbHksCisgICAgICAgICAgb2ZiNjRfc2Vzc2lvbiwKKyAgICAgICAgICBvZmI2NF9r ZXlpZCwKKyAgICAgICAgICBOVUxMIH0sCisjZW5kaWYgIC8qIERFU19FTkNSWVBUSU9OICovCisj aWYgZGVmaW5lZCAoQ0FTVF9FWFBPUlRfRU5DUllQVElPTikgfHwgZGVmaW5lZChDQVNUX0VOQ1JZ UFRJT04pCisgICAgeyAiQ0FTVDVfNDBfT0ZCNjQiLCBFTkNUWVBFX0NBU1Q1XzQwX09GQjY0LAor ICAgICAgICAgIGNhc3RleHBfb2ZiNjRfZW5jcnlwdCwKKyAgICAgICAgICBjYXN0ZXhwX29mYjY0 X2RlY3J5cHQsCisgICAgICAgICAgY2FzdGV4cF9vZmI2NF9pbml0LAorICAgICAgICAgIGNhc3Rl eHBfb2ZiNjRfc3RhcnQsCisgICAgICAgICAgY2FzdGV4cF9vZmI2NF9pcywKKyAgICAgICAgICBj YXN0ZXhwX29mYjY0X3JlcGx5LAorICAgICAgICAgIGNhc3RleHBfb2ZiNjRfc2Vzc2lvbiwKKyAg ICAgICAgICBjYXN0ZXhwX29mYjY0X2tleWlkLAorICAgICAgICAgIE5VTEwgfSwKKyNlbmRpZiAv KiBDQVNUX0VOQ1JZUFRJT04gKi8KKyAgICB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCAgfQorfTsK KworaW50CitnZXRfY3J5cHRfdGFibGUoIHN0cnVjdCBrZXl0YWIgKiogcFRhYmxlLCBpbnQgKiBw TiApCit7CisgICAgaW50IGk9MCxuPTA7CisKKyAgICBpZiAoICpwVGFibGUgKQorICAgIHsKKyAg ICAgICAgZm9yICggaT0wIDsgaSA8ICpwTiA7IGkrKyApCisgICAgICAgICAgICBmcmVlKCAoKnBU YWJsZSlbaV0ua3dkICkgOworICAgICAgICBmcmVlICggKnBUYWJsZSApICA7CisgICAgfQorICAg ICpwVGFibGUgPSBOVUxMOworICAgICpwTiA9IDA7CisKKyAgICAvKiBIb3cgbWFueSBlbmNyeXB0 aW9uIHR5cGVzIGRvIHdlIGhhdmU/ICovCisgICAgd2hpbGUgKCBlbmNyeXB0aW9uc1tuXS5uYW1l ICkKKyAgICAgICAgbisrOworCisgICAgaWYgKCBuICkKKyAgICB7CisgICAgICAgICpwVGFibGUg PSBtYWxsb2MoIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAqIChuKzIpICkgOworICAgICAgICBpZiAo ICEoKnBUYWJsZSkgKQorICAgICAgICAgICAgcmV0dXJuKDApOworCisjaWZkZWYgT1MyCisgICAg ICAgICgqcFRhYmxlKVswXS5rd2QgPXN0cmR1cCgiYXV0b21hdGljIik7CisjZWxzZSAvKiBPUzIg Ki8KKyAgICAgICAgbWFrZXN0cigmdG1wc3RyaW5nLCJhdXRvbWF0aWMiKTsKKyAgICAgICAgKCpw VGFibGUpWzBdLmt3ZCA9IHRtcHN0cmluZzsKKyAgICAgICAgdG1wc3RyaW5nID0gTlVMTDsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgKCpwVGFibGUpWzBdLmt3dmFsID0gRU5DVFlQRV9BTlk7 CisgICAgICAgICgqcFRhYmxlKVswXS5mbGdzID0gMDsKKyNpZmRlZiBPUzIKKyAgICAgICAgKCpw VGFibGUpWzFdLmt3ZCA9c3RyZHVwKCJub25lIik7CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAg bWFrZXN0cigmdG1wc3RyaW5nLCJub25lIik7CisgICAgICAgICgqcFRhYmxlKVsxXS5rd2QgPSB0 bXBzdHJpbmc7CisgICAgICAgIHRtcHN0cmluZyA9IE5VTEw7CisjZW5kaWYgLyogT1MyICovCisg ICAgICAgICgqcFRhYmxlKVsxXS5rd3ZhbCA9IDk5OTsKKyAgICAgICAgKCpwVGFibGUpWzFdLmZs Z3MgPSAwOworICAgICAgICAoKnBOKSA9IDI7CisKKyAgICAgICAgZm9yICggaT0wIDsgaSA8IG4g OyBpKysgKSB7CisgICAgICAgICAgICBjaGFyICogbmV3c3RyID0gTlVMTCwgKiBwOworICAgICAg ICAgICAgaW50IG5ld3ZhbCA9IGVuY3J5cHRpb25zW2ldLnR5cGU7CisgICAgICAgICAgICBpbnQg aiA9IDAsIGxlbiA9IDA7CisKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIG5ld3N0ciA9IHN0cmR1 cChlbmNyeXB0aW9uc1tpXS5uYW1lKTsKKyAgICAgICAgICAgIHN0cmx3cihuZXdzdHIpOworI2Vs c2UgLyogT1MyICovCisgICAgICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsZW5jcnlwdGlvbnNb aV0ubmFtZSk7CisgICAgICAgICAgICBuZXdzdHIgPSB0bXBzdHJpbmc7CisgICAgICAgICAgICB0 bXBzdHJpbmcgPSBOVUxMOworICAgICAgICAgICAgZm9yIChwID0gbmV3c3RyOyAqcDsgcCsrKSBp ZiAoaXN1cHBlcigqcCkpICpwID0gdG9sb3dlcigqcCk7CisjZW5kaWYgLyogT1MyICovCisKKyAg ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAoKnBOKTsgaisrKSB7CisgICAgICAgICAgICAgICAg aW50IHRlbXB2YWwgPSAwOworICAgICAgICAgICAgICAgIGNoYXIgKiB0ZW1wc3RyID0gTlVMTDsK KworICAgICAgICAgICAgICAgIGlmICggc3RyY21wKCAoKnBUYWJsZSlbal0ua3dkLCBuZXdzdHIg KSA+IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcHZhbCA9 ICgqcFRhYmxlKVtqXS5rd3ZhbDsKKyAgICAgICAgICAgICAgICAgICAgdGVtcHN0ciA9ICgqcFRh YmxlKVtqXS5rd2Q7CisgICAgICAgICAgICAgICAgICAgICgqcFRhYmxlKVtqXS5rd2QgPSBuZXdz dHIgOworICAgICAgICAgICAgICAgICAgICAoKnBUYWJsZSlbal0ua3d2YWwgPSBuZXd2YWw7Cisg ICAgICAgICAgICAgICAgICAgIG5ld3ZhbCA9IHRlbXB2YWw7CisgICAgICAgICAgICAgICAgICAg IG5ld3N0ciA9IHRlbXBzdHI7CisgICAgICAgICAgICAgICAgICAgICgqcFRhYmxlKVtqXS5mbGdz ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoKnBU YWJsZSlbKnBOXS5rd2QgPSBuZXdzdHIgOworICAgICAgICAgICAgKCpwVGFibGUpWypwTl0ua3d2 YWwgPSBuZXd2YWw7CisgICAgICAgICAgICAoKnBUYWJsZSlbKnBOXS5mbGdzID0gMCA7CisgICAg ICAgICAgICAoKnBOKSsrIDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgICpwVGFi bGUgPSBtYWxsb2MoIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAqIDIgKSA7CisgICAgICAgIGlmICgg ISgqcFRhYmxlKSApCisgICAgICAgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBPUzIKKyAgICAg ICAgKCpwVGFibGUpWzBdLmt3ZCA9c3RyZHVwKCJhdXRvbWF0aWMiKTsKKyNlbHNlIC8qIE9TMiAq LworICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsImF1dG9tYXRpYyIpOworICAgICAgICAoKnBU YWJsZSlbMF0ua3dkID0gdG1wc3RyaW5nOworICAgICAgICB0bXBzdHJpbmcgPSBOVUxMOworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICAoKnBUYWJsZSlbMF0ua3d2YWwgPSBFTkNUWVBFX0FOWTsK KyAgICAgICAgKCpwVGFibGUpWzBdLmZsZ3MgPSAwOworI2lmZGVmIE9TMgorICAgICAgICAoKnBU YWJsZSlbMV0ua3dkID1zdHJkdXAoIm5vbmUiKTsKKyNlbHNlIC8qIE9TMiAqLworICAgICAgICBt YWtlc3RyKCZ0bXBzdHJpbmcsIm5vbmUiKTsKKyAgICAgICAgKCpwVGFibGUpWzFdLmt3ZCA9IHRt cHN0cmluZzsKKyAgICAgICAgdG1wc3RyaW5nID0gTlVMTDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgICAgKCpwVGFibGUpWzFdLmt3dmFsID0gOTk5OworICAgICAgICAoKnBUYWJsZSlbMV0uZmxn cyA9IDA7CisgICAgICAgICgqcE4pID0gMjsKKyAgICB9CisgICAgcmV0dXJuKCpwTik7Cit9CisK K3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN0cl9zZW5kWzY0XSA9IHsgSUFDLCBTQiwgVEVMT1BUX0VO Q1JZUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ1JZUFRf U1VQUE9SVCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RyX3N1cGxlbiA9IDA7CitzdGF0aWMg dW5zaWduZWQgY2hhciBzdHJfc3RhcnRbNzJdID0geyBJQUMsIFNCLCBURUxPUFRfRU5DUllQVElP TiB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RyX2VuZFtdID0geyBJQUMsIFNCLCBURUxPUFRf RU5DUllQVElPTiwgMCwgSUFDLCBTRSB9OworCitfUFJPVE9UWVAoaW50ICBlbmNyeXB0X3JlcXVl c3RfZW5kLCAoVk9JRCkpOworX1BST1RPVFlQKGludCAgZW5jcnlwdF9yZXF1ZXN0X3N0YXJ0LCAo Vk9JRCkpOworX1BST1RPVFlQKGludCAgZW5jcnlwdF9lbmNfa2V5aWQsICh1bnNpZ25lZCBjaGFy ICosIGludCkpOworX1BST1RPVFlQKGludCAgZW5jcnlwdF9kZWNfa2V5aWQsICh1bnNpZ25lZCBj aGFyICosIGludCkpOworX1BST1RPVFlQKGludCAgZW5jcnlwdF9zdXBwb3J0LCAodW5zaWduZWQg Y2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChpbnQgIGVuY3J5cHRfc3RhcnQsICh1bnNpZ25lZCBj aGFyICosIGludCkpOworX1BST1RPVFlQKGludCAgZW5jcnlwdF9lbmQsIChWT0lEKSk7CisKK19Q Uk9UT1RZUChpbnQgZW5jcnlwdF9rc19zdHJlYW0sKHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sg KiwgLyogb3V0cHV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBrc3RyZWFtX2RhdGFfYmxvY2sgKikpOyAvKiBpbnB1dCAqLworCitfUFJPVE9UWVAoaW50IGRl Y3J5cHRfa3Nfc3RyZWFtLChzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICosIC8qIG91dHB1dCAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3N0cmVhbV9kYXRh X2Jsb2NrICopKTsgLyogaW5wdXQgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRf a3Nfc3RyZWFtKHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKmksCisgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICpvKQorI2Vsc2UKK2VuY3J5cHRfa3Nfc3RyZWFt KGksbykKKyAgICBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICppOyBzdHJ1Y3Qga3N0cmVhbV9k YXRhX2Jsb2NrICpvOworI2VuZGlmCit7CisgICAgLyoKKyAgICAqIHRoaXMgaXMgcmVhbGx5IHF1 aXRlIGJvZ3VzLCBzaW5jZSBpdCBkb2VzIGFuIGluLXBsYWNlIGVuY3J5cHRpb24uLi4KKyAgICAq LworICAgIGlmIChlbmNyeXB0X291dHB1dCkgeworICAgICAgICBlbmNyeXB0X291dHB1dChpLT5w dHIsIGktPmxlbmd0aCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsK K30KKworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZGVjcnlwdF9rc19zdHJlYW0oc3RydWN0IGtz dHJlYW1fZGF0YV9ibG9jayAqaSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBrc3RyZWFtX2Rh dGFfYmxvY2sgKm8pCisjZWxzZQorZGVjcnlwdF9rc19zdHJlYW0oaSxvKQorICAgIHN0cnVjdCBr c3RyZWFtX2RhdGFfYmxvY2sgKmk7IHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKm87CisjZW5k aWYKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGVuOworICAvKgorICAgKiB0aGlzIGlzIHJlYWxseSBx dWl0ZSBib2d1cywgc2luY2UgaXQgZG9lcyBhbiBpbi1wbGFjZSBkZWNyeXB0aW9uLi4uCisgICAq LworICAgIGlmIChkZWNyeXB0X2lucHV0KSB7CisgICAgICAgIGZvciAobGVuID0gMCA7IGxlbiA8 IGktPmxlbmd0aCA7IGxlbisrKQorICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopaS0+cHRy KVtsZW5dCisgICAgICAgICAgICAgICAgPSBkZWNyeXB0X2lucHV0KCgodW5zaWduZWQgY2hhciAq KWktPnB0cilbbGVuXSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsK K30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2RlY3J5cHRfa3NfaGFjayh1bnNpZ25lZCBjaGFy ICpidWYsIGludCBjbnQpCisjZWxzZQorZGVjcnlwdF9rc19oYWNrKGJ1ZixjbnQpIHVuc2lnbmVk IGNoYXIgKmJ1ZjsgaW50IGNudDsKKyNlbmRpZgoreworICAgIGludCBsZW47CisgIC8qCisgICAq IHRoaXMgaXMgcmVhbGx5IHF1aXRlIGJvZ3VzLCBzaW5jZSBpdCBkb2VzIGFuIGluLXBsYWNlIGRl Y3J5cHRpb24uLi4KKyAgICovCisgICAgZm9yIChsZW4gPSAwIDsgbGVuIDwgY250IDsgbGVuKysp CisgICAgICAgIGJ1ZltsZW5dID0gZGVjcnlwdF9pbnB1dChidWZbbGVuXSk7CisKKyNpZmRlZiBE RUJVRworICAgIGNraGV4ZHVtcCgiZGVjcnlwdCBrcyBoYWNrIiwgYnVmLCBjbnQpOworI2VuZGlm CisgICAgcmV0dXJuIDE7Cit9CisKKworLyoKKyAqIHBhcnNlZGF0WzBdID09IHRoZSBzdWJvcHRp b24gd2UgbWlnaHQgYmUgbmVnb3RpYXRpbmcsCisgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitl bmNyeXB0X3BhcnNlKHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0LCBpbnQgZW5kX3N1YikKKyNlbHNl CitlbmNyeXB0X3BhcnNlKHBhcnNlZGF0LGVuZF9zdWIpIHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0 OyBpbnQgZW5kX3N1YjsKKyNlbmRpZgoreworICAgIGludCByYyA9IDA7CisKKyAgICBzd2l0Y2go cGFyc2VkYXRbMV0pIHsKKyAgICBjYXNlIEVOQ1JZUFRfU1RBUlQ6CisgICAgICAgIHJjID0gZW5j cnlwdF9zdGFydChwYXJzZWRhdCArIDIsIGVuZF9zdWIgLSAyKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBFTkNSWVBUX0VORDoKKyAgICAgICAgcmMgPSBlbmNyeXB0X2VuZCgpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEVOQ1JZUFRfU1VQUE9SVDoKKyAgICAgICAgcmMgPSBlbmNyeXB0 X3N1cHBvcnQocGFyc2VkYXQgKyAyLCBlbmRfc3ViIC0gMik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgRU5DUllQVF9SRVFTVEFSVDoKKyAgICAgICAgcmMgPSBlbmNyeXB0X3JlcXVlc3Rfc3Rh cnQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFTkNSWVBUX1JFUUVORDoKKyAgICAgICAg LyoKKyAgICAgICAgKiBXZSBjYW4gYWx3YXlzIHNlbmQgYW4gUkVRRU5EIHNvIHRoYXQgd2UgY2Fu bm90CisgICAgICAgICogZ2V0IHN0dWNrIGVuY3J5cHRpbmcuICBXZSBzaG91bGQgb25seSBnZXQg dGhpcworICAgICAgICAqIGlmIHdlIGhhdmUgYmVlbiBhYmxlIHRvIGdldCBpbiB0aGUgY29ycmVj dCBtb2RlCisgICAgICAgICogYW55aG93LgorICAgICAgICAqLworICAgICAgICByYyA9IGVuY3J5 cHRfcmVxdWVzdF9lbmQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFTkNSWVBUX0lTOgor ICAgICAgICByYyA9IGVuY3J5cHRfaXMocGFyc2VkYXQgKyAyLCBlbmRfc3ViIC0gMik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgRU5DUllQVF9SRVBMWToKKyAgICAgICAgcmMgPSBlbmNyeXB0 X3JlcGx5KHBhcnNlZGF0ICsgMiwgZW5kX3N1YiAtIDIpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIEVOQ1JZUFRfRU5DX0tFWUlEOgorICAgICAgICByYyA9IGVuY3J5cHRfZW5jX2tleWlkKHBh cnNlZGF0ICsgMiwgZW5kX3N1YiAtIDIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVOQ1JZ UFRfREVDX0tFWUlEOgorICAgICAgICByYyA9IGVuY3J5cHRfZGVjX2tleWlkKHBhcnNlZGF0ICsg MiwgZW5kX3N1YiAtIDIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy YyA9IC0xOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworLyog WFhYICovCitFbmNyeXB0aW9ucyAqCisjaWZkZWYgQ0tfQU5TSUMKK2ZpbmRlbmNyeXB0aW9uKGlu dCB0eXBlKQorI2Vsc2UKK2ZpbmRlbmNyeXB0aW9uKHR5cGUpIGludCB0eXBlOworI2VuZGlmCit7 CisgICAgRW5jcnlwdGlvbnMgKmVwID0gZW5jcnlwdGlvbnM7CisKKyAgICBpZiAoIShJX1NVUFBP UlRfRU5DUllQVCAmIHJlbW90ZV9zdXBwb3J0c19kZWNyeXB0ICYgdHlwZW1hc2sodHlwZSkpKQor ICAgICAgICByZXR1cm4oMCk7CisgICAgd2hpbGUgKGVwLT50eXBlICYmIGVwLT50eXBlICE9IHR5 cGUpCisgICAgICAgICsrZXA7CisgICAgcmV0dXJuKGVwLT50eXBlID8gZXAgOiAwKTsKK30KKwor RW5jcnlwdGlvbnMgKgorI2lmZGVmIENLX0FOU0lDCitmaW5kZGVjcnlwdGlvbihpbnQgdHlwZSkK KyNlbHNlCitmaW5kZGVjcnlwdGlvbih0eXBlKSBpbnQgdHlwZTsKKyNlbmRpZgoreworICAgIEVu Y3J5cHRpb25zICplcCA9IGVuY3J5cHRpb25zOworCisgICAgaWYgKCEoSV9TVVBQT1JUX0RFQ1JZ UFQgJiByZW1vdGVfc3VwcG9ydHNfZW5jcnlwdCAmIHR5cGVtYXNrKHR5cGUpKSkKKyAgICAgICAg cmV0dXJuKDApOworICAgIHdoaWxlIChlcC0+dHlwZSAmJiBlcC0+dHlwZSAhPSB0eXBlKQorICAg ICAgICArK2VwOworICAgIHJldHVybihlcC0+dHlwZSA/IGVwIDogMCk7Cit9CisKKyNkZWZpbmUg TUFYS0VZTEVOIDY0CisKK3N0YXRpYyBzdHJ1Y3Qga2V5X2luZm8geworICAgIHVuc2lnbmVkIGNo YXIga2V5aWRbTUFYS0VZTEVOXTsKKyAgICBpbnQga2V5bGVuOworICAgIGludCBkaXI7CisgICAg aW50ICptb2RlcDsKKyAgICBFbmNyeXB0aW9ucyAqKCpnZXRjcnlwdCkoKTsKK30ga2lbMl0gPSB7 CisgICAgeyB7IDAgfSwgMCwgRElSX0VOQ1JZUFQsICZlbmNyeXB0X21vZGUsIGZpbmRlbmNyeXB0 aW9uIH0sCisgICAgeyB7IDAgfSwgMCwgRElSX0RFQ1JZUFQsICZkZWNyeXB0X21vZGUsIGZpbmRk ZWNyeXB0aW9uIH0sCit9OworCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfaW5pdChr c3RyZWFtIGlrcywgaW50IHR5cGUpCisjZWxzZQorZW5jcnlwdF9pbml0KGlrcywgdHlwZSkga3N0 cmVhbSBpa3M7IGludCB0eXBlOworI2VuZGlmCit7CisgICAgRW5jcnlwdGlvbnMgKmVwID0gZW5j cnlwdGlvbnM7CisKKyAgICBpX3N1cHBvcnRfZW5jcnlwdCA9IGlfc3VwcG9ydF9kZWNyeXB0ID0g MDsKKyAgICByZW1vdGVfc3VwcG9ydHNfZW5jcnlwdCA9IHJlbW90ZV9zdXBwb3J0c19kZWNyeXB0 ID0gMDsKKyAgICBpX3dvbnRfc3VwcG9ydF9lbmNyeXB0ID0gaV93b250X3N1cHBvcnRfZGVjcnlw dCA9IDA7CisgICAgZW5jcnlwdF9tb2RlID0gMDsKKyAgICBkZWNyeXB0X21vZGUgPSAwOworICAg IGVuY3J5cHRfb3V0cHV0ID0gTlVMTDsKKyAgICBkZWNyeXB0X2lucHV0ID0gTlVMTDsKKyAgICBr aVswXS5rZXlsZW4gPSAwOworICAgIG1lbXNldChraVswXS5rZXlpZCwwLE1BWEtFWUxFTik7Cisg ICAga2lbMV0ua2V5bGVuID0gMDsKKyAgICBtZW1zZXQoa2lbMV0ua2V5aWQsMCxNQVhLRVlMRU4p OworICAgIGhhdmVzZXNzaW9ua2V5ID0gMDsKKyAgICBhdXRvZW5jcnlwdCA9IDE7CisgICAgYXV0 b2RlY3J5cHQgPSAxOworCisgICAgRW5jcnlwdEtTR2xvYmFsSGFjayA9IGlrczsKKyAgICBFbmNy eXB0VHlwZSA9IHR5cGU7CisKKyAgICBzdHJfc2VuZFswXSA9IElBQzsKKyAgICBzdHJfc2VuZFsx XSA9IFNCOworICAgIHN0cl9zZW5kWzJdID0gVEVMT1BUX0VOQ1JZUFRJT047CisgICAgc3RyX3Nl bmRbM10gPSBFTkNSWVBUX1NVUFBPUlQ7CisgICAgc3RyX3N1cGxlbiA9IDQ7CisKKyAgICB3aGls ZSAoZXAtPnR5cGUpIHsKKyAgICAgICAgaWYgKCBFbmNyeXB0VHlwZSA9PSBFTkNUWVBFX0FOWSB8 fAorICAgICAgICAgICAgIEVuY3J5cHRUeXBlID09IGVwLT50eXBlICkgeworI2lmZGVmIERFQlVH CisgICAgICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAgICAgICAgICAgICAg c3ByaW50ZihkYmdidWYsICI+Pj5JIHdpbGwgc3VwcG9ydCAlc1xuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBFTkNUWVBFX05BTUUoZXAtPnR5cGUpKTsgICAgICAgLyogc2FmZSAqLworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfaW5pdCIsZGJnYnVmLDApOworICAgICAg ICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBpX3N1cHBvcnRfZW5jcnlwdCB8PSB0eXBlbWFz ayhlcC0+dHlwZSk7CisgICAgICAgICAgICBpX3N1cHBvcnRfZGVjcnlwdCB8PSB0eXBlbWFzayhl cC0+dHlwZSk7CisgICAgICAgICAgICBpZiAoKGlfd29udF9zdXBwb3J0X2RlY3J5cHQgJiB0eXBl bWFzayhlcC0+dHlwZSkpID09IDApCisgICAgICAgICAgICAgICAgaWYgKChzdHJfc2VuZFtzdHJf c3VwbGVuKytdID0gZXAtPnR5cGUpID09IElBQykKKyAgICAgICAgICAgICAgICAgICAgc3RyX3Nl bmRbc3RyX3N1cGxlbisrXSA9IElBQzsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXAtPmluaXQp CisgICAgICAgICAgICAoKmVwLT5pbml0KSgwKTsKKyAgICAgICAgKytlcDsKKyAgICB9CisgICAg c3RyX3NlbmRbc3RyX3N1cGxlbisrXSA9IElBQzsKKyAgICBzdHJfc2VuZFtzdHJfc3VwbGVuKytd ID0gU0U7Cit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9zZW5kX3N1cHBvcnQo Vk9JRCkKKyNlbHNlCitlbmNyeXB0X3NlbmRfc3VwcG9ydCgpCisjZW5kaWYKK3sKKyAgICBFbmNy eXB0aW9ucyAqZXAgPSBlbmNyeXB0aW9uczsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxP UFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpCisgICAgICAgIHJl dHVybjsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIHN0cl9zZW5kWzBdID0gSUFDOworICAg IHN0cl9zZW5kWzFdID0gU0I7CisgICAgc3RyX3NlbmRbMl0gPSBURUxPUFRfRU5DUllQVElPTjsK KyAgICBzdHJfc2VuZFszXSA9IEVOQ1JZUFRfU1VQUE9SVDsKKyAgICBzdHJfc3VwbGVuID0gNDsK KworICAgIHdoaWxlIChlcC0+dHlwZSkgeworICAgICAgICBpZiAoIEVuY3J5cHRUeXBlID09IEVO Q1RZUEVfQU5ZIHx8CisgICAgICAgICAgICAgRW5jcnlwdFR5cGUgPT0gZXAtPnR5cGUgKSB7Cisj aWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAg ICAgICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+Pkkgd2lsbCBzdXBwb3J0ICVzXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRShlcC0+dHlwZSkpOyAgICAgICAgICAg ICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3NlbmRf c3VwcG9ydCIsZGJnYnVmLDApOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBp ZiAoKGlfd29udF9zdXBwb3J0X2RlY3J5cHQgJiB0eXBlbWFzayhlcC0+dHlwZSkpID09IDApCisg ICAgICAgICAgICAgICAgaWYgKChzdHJfc2VuZFtzdHJfc3VwbGVuKytdID0gZXAtPnR5cGUpID09 IElBQykKKyAgICAgICAgICAgICAgICAgICAgc3RyX3NlbmRbc3RyX3N1cGxlbisrXSA9IElBQzsK KyAgICAgICAgfQorICAgICAgICArK2VwOworICAgIH0KKyAgICBzdHJfc2VuZFtzdHJfc3VwbGVu KytdID0gSUFDOworICAgIHN0cl9zZW5kW3N0cl9zdXBsZW4rK10gPSBTRTsKKworICAgIC8qCisg ICAgKiBJZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIHRoYXQgZGVjcnlwdGlvbiBzdGFydAorICAg ICogaW1tZWRpYXRseSwgdGhlbiBzZW5kIGEgIlJFUVVFU1QgU1RBUlQiIGJlZm9yZQorICAgICog d2UgbmVnb3RpYXRlIHRoZSB0eXBlLgorICAgICovCisgICAgaWYgKGF1dG9kZWNyeXB0KQorICAg ICAgICBlbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydCgpOworCisgICAgaWYgKGRlYmxvZyB8fCB0 bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGludCBpOworICAgICAgICBzcHJpbnRmKHRuX21z ZywiVEVMTkVUIFNFTlQgU0IgJXMgU1VQUE9SVCAiLAorICAgICAgICAgICAgICAgICBURUxPUFQo VEVMT1BUX0VOQ1JZUFRJT04pKTsgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAg ICAgZm9yICggaT00O2k8c3RyX3N1cGxlbi0yO2krKyApIHsKKyAgICAgICAgICAgIGlmICggc3Ry X3NlbmRbaV0gPT0gSUFDICkgeworICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklB QyAiLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csRU5DVFlQRV9OQU1FKHN0cl9zZW5kW2ldKSxUTl9N U0dfTEVOKTsKKyAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIiAiLFROX01TR19MRU4pOwor ICAgICAgICB9CisgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7 CisgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICBpZiAodG5fZGViIHx8 IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICB9CisjaWZkZWYgT1MyCisgICAgUmVxdWVz dFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICB0dG9sKHN0 cl9zZW5kLCBzdHJfc3VwbGVuKTsKKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgo KTsKKyNlbmRpZgorCisgICAgc3RyX3N1cGxlbiA9IDA7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hl biBFTkNSWVBUIFNVUFBPUlQgaXMgcmVjZWl2ZWQuCisgKi8KK2ludAorI2lmZGVmIENLX0FOU0lD CitlbmNyeXB0X3N1cHBvcnQodW5zaWduZWQgY2hhciAqX3R5cGVsaXN0LCBpbnQgX2NudCkKKyNl bHNlCitlbmNyeXB0X3N1cHBvcnQoX3R5cGVsaXN0LCBfY250KSB1bnNpZ25lZCBjaGFyICogX3R5 cGVsaXN0OyBpbnQgX2NudDsKKyNlbmRpZgoreworICAgIHJlZ2lzdGVyIGludCB0eXBlLCB1c2Vf dHlwZSA9IDA7CisgICAgdW5zaWduZWQgY2hhciAqIHR5cGVsaXN0ID0gX3R5cGVsaXN0OworICAg IGludCBjbnQgPSBfY250OworICAgIEVuY3J5cHRpb25zICplcDsKKworICAgIGRlYnVnKEYxMTEs ImVuY3J5cHRfc3VwcG9ydCIsImNudCIsY250KTsKKworICAvKgorICAgKiBGb3JnZXQgYW55dGhp bmcgdGhlIG90aGVyIHNpZGUgaGFzIHByZXZpb3VzbHkgdG9sZCB1cy4KKyAgICovCisgICAgcmVt b3RlX3N1cHBvcnRzX2RlY3J5cHQgPSAwOworCisgICAgd2hpbGUgKGNudC0tID4gMCkgeworCWRl YnVnKEYxMDEsIlhYWCBjbnQiLCIiLGNudCk7CisgICAgICAgIHR5cGUgPSAqdHlwZWxpc3QrKzsK KwlkZWJ1ZyhGMTAxLCJYWFggdHlwZSIsIiIsdHlwZSk7CisJZGVidWcoRjEwMSwiWFhYIEVOQ1RZ UEVfQU5ZIiwiIixFTkNUWVBFX0FOWSk7CisgICAgICAgIGlmICggRW5jcnlwdFR5cGUgPT0gRU5D VFlQRV9BTlkgfHwKKyAgICAgICAgICAgICBFbmNyeXB0VHlwZSA9PSB0eXBlICkgeworI2lmZGVm IERFQlVHCisgICAgICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAgICAgICAg ICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5SZW1vdGUgc3VwcG9ydHMgJXMgKCVkKVxuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUUodHlwZSksIHR5cGUpOyAgICAgICAg ICAgICAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9zdXBw b3J0IixkYmdidWYsMCk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGlmICgo dHlwZSA8IEVOQ1RZUEVfQ05UKSAmJgorICAgICAgICAgICAgICAgICAoSV9TVVBQT1JUX0VOQ1JZ UFQgJiB0eXBlbWFzayh0eXBlKSkpIHsKKyAgICAgICAgICAgICAgICByZW1vdGVfc3VwcG9ydHNf ZGVjcnlwdCB8PSB0eXBlbWFzayh0eXBlKTsKKyAgICAgICAgICAgICAgICBpZiAodXNlX3R5cGUg PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgdXNlX3R5cGUgPSB0eXBlOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlhYWCB1c2VfdHlwZSIsIiIsdXNl X3R5cGUpOworICAgIGlmICh1c2VfdHlwZSkgeworICAgICAgICBlcCA9IGZpbmRlbmNyeXB0aW9u KHVzZV90eXBlKTsKKyAgICAgICAgaWYgKCFlcCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwi ZW5jcnlwdF9zdXBwb3J0IiwiZmluZGVuY3J5cHRpb24gPT0gTlVMTCIsdXNlX3R5cGUpOworICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorCWRlYnVnKEYxMDAsIlhYWCBlcCBub3Qg TlVMTCIsIiIsMCk7CisgICAgICAgIHR5cGUgPSBlcC0+c3RhcnQgPyAoKmVwLT5zdGFydCkoRElS X0VOQ1JZUFQsIDApIDogMDsKKwlkZWJ1ZyhGMTAxLCJYWFggbmV3IHR5cGUiLCIiLHR5cGUpOwor I2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAg ICAgIHNwcmludGYoZGJnYnVmLCAiPj4+KCplcC0+c3RhcnQpKCkgJXMgcmV0dXJuZWQgJWQgKCVz KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRSh1c2VfdHlwZSksIHR5cGUs CisgICAgICAgICAgICAgICAgICAgICBFTkNSWVBUX05BTUUodHlwZSkpOyAgICAgICAgICAgICAg ICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9zdXBw b3J0IixkYmdidWYsMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAodHlwZSA8IDAp IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImVuY3J5cHRfc3VwcG9ydCIsInR5cGUgPCAwIix0 eXBlKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgZW5jcnlw dF9tb2RlID0gdXNlX3R5cGU7CisgICAgICAgIGlmICh0eXBlID09IDApCisgICAgICAgICAgICBl bmNyeXB0X3N0YXJ0X291dHB1dCh1c2VfdHlwZSk7CisgICAgICAgIGRlYnVnKEYxMTEsImVuY3J5 cHRfc3VwcG9ydCIsInN1Y2Nlc3MiLHR5cGUpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQor ICAgIGRlYnVnKEYxMTEsImVuY3J5cHRfc3VwcG9ydCIsImZhaWxlZCIsdXNlX3R5cGUpOworICAg IHJldHVybigtMSk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X2lzKHVuc2ln bmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCisjZWxzZQorZW5jcnlwdF9pcyhkYXRhLCBjbnQpIHVu c2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBFbmNyeXB0aW9ucyAqZXA7CisgICAgcmVnaXN0ZXIgaW50IHR5cGUsIHJldDsKKworICAgIGlm ICgtLWNudCA8IDApCisgICAgICAgIHJldHVybigtMSk7CisgICAgdHlwZSA9ICpkYXRhKys7Cisg ICAgaWYgKHR5cGUgPCBFTkNUWVBFX0NOVCkKKyAgICAgICAgcmVtb3RlX3N1cHBvcnRzX2VuY3J5 cHQgfD0gdHlwZW1hc2sodHlwZSk7CisgICAgaWYgKCEoZXAgPSBmaW5kZGVjcnlwdGlvbih0eXBl KSkpIHsKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7Cisg ICAgICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PmVuY3J5cHRfaXM6ICAiCisgICAgICAgICAg ICAgICAgICAgICAiQ2FuJ3QgZmluZCB0eXBlICVzICglZCkgZm9yIGluaXRpYWwgbmVnb3RpYXRp b25cbiIsCisgICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUVfT0sodHlwZSkKKyAgICAg ICAgICAgICAgICAgICAgID8gRU5DVFlQRV9OQU1FKHR5cGUpIDogIih1bmtub3duKSIsCisgICAg ICAgICAgICAgICAgICAgICB0eXBlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogc2FmZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9pcyIsZGJnYnVm LDApOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAg aWYgKCFlcC0+aXMpIHsKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19t b2RlKSB7CisgICAgICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PmVuY3J5cHRfaXM6ICAiCisg ICAgICAgICAgICAgICAgICAgICAiTm8gaW5pdGlhbCBuZWdvdGlhdGlvbiBuZWVkZWQgZm9yIHR5 cGUgJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRV9PSyh0eXBl KQorICAgICAgICAgICAgICAgICAgICAgPyBFTkNUWVBFX05BTUUodHlwZSkgOiAiKHVua25vd24p IiwKKyAgICAgICAgICAgICAgICAgICAgIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X2lz IixkYmdidWYsMCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICByZXQgPSAwOworICAgIH0g ZWxzZSB7CisgICAgICAgIHJldCA9ICgqZXAtPmlzKShkYXRhLCBjbnQpOworI2lmZGVmIERFQlVH CisgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgICAgIHNwcmludGYo ZGJnYnVmLCAiZW5jcnlwdF9pczogICIKKyAgICAgICAgICAgICAgICAgICAgICIoKmVwLT5pcyko JXgsICVkKSByZXR1cm5lZCAlcyglZClcbiIsIGRhdGEsIGNudCwKKyAgICAgICAgICAgICAgICAg ICAgIChyZXQgPCAwKSA/ICJGQUlMICIgOgorICAgICAgICAgICAgICAgICAgICAgKHJldCA9PSAw KSA/ICJTVUNDRVNTICIgOiAiTU9SRV9UT19ETyAiLCByZXQpOyAvKiBzYWZlICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X2lzIixkYmdidWYsMCk7CisgICAgICAgIH0KKyNlbmRp ZgorICAgIH0KKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBhdXRvZGVjcnlwdCA9IDA7Cisg ICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVjcnlwdF9tb2RlID0g dHlwZTsKKyAgICAgICAgaWYgKHJldCA9PSAwICYmIGF1dG9kZWNyeXB0KSB7CisgICAgICAgICAg ICBlbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydCgpOworICAgICAgICB9CisgICAgfQorICAgIHJl dHVybigwKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfcmVwbHkodW5zaWdu ZWQgY2hhciAqZGF0YSwgaW50IGNudCkKKyNlbHNlCitlbmNyeXB0X3JlcGx5KGRhdGEsIGNudCkg dW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNlbmRpZgoreworICAgIEVuY3J5cHRpb25z ICplcDsKKyAgICByZWdpc3RlciBpbnQgcmV0LCB0eXBlOworCisgICAgaWYgKC0tY250IDwgMCkK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB0eXBlID0gKmRhdGErKzsKKyAgICBpZiAoIShlcCA9 IGZpbmRlbmNyeXB0aW9uKHR5cGUpKSkgeworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNy eXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgICAgIHNwcmludGYoZGJnYnVmLAorICAgICAgICAg ICAgICAgICAgICAiPj4+Q2FuJ3QgZmluZCB0eXBlICVzICglZCkgZm9yIGluaXRpYWwgbmVnb3Rp YXRpb25cbiIsCisgICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUVfT0sodHlwZSkKKyAg ICAgICAgICAgICAgICAgICAgID8gRU5DVFlQRV9OQU1FKHR5cGUpIDogIih1bmtub3duKSIsCisg ICAgICAgICAgICAgICAgICAgICB0eXBlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9yZXBseSIs ZGJnYnVmLDApOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9 CisgICAgaWYgKCFlcC0+cmVwbHkpIHsKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZW5jcnlw dF9kZWJ1Z19tb2RlKSB7CisgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+Pk5vIGluaXRpYWwgbmVn b3RpYXRpb24gbmVlZGVkIGZvciB0eXBlICVzICglZClcbiIsCisgICAgICAgICAgICAgICBFTkNU WVBFX05BTUVfT0sodHlwZSkKKyAgICAgICAgICAgICAgID8gRU5DVFlQRV9OQU1FKHR5cGUpIDog Iih1bmtub3duKSIsCisgICAgICAgICAgICAgICB0eXBlKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwi ZW5jcnlwdF9yZXBseSIsZGJnYnVmLDApOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0 ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXQgPSAoKmVwLT5yZXBseSkoZGF0YSwgY250 KTsKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAg ICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIigqZXAtPnJlcGx5KSgleCwgJWQpIHJldHVybmVkICVz KCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGRhdGEsIGNudCwKKyAgICAgICAgICAgICAg ICAgICAgIChyZXQgPCAwKSA/ICJGQUlMICIgOgorICAgICAgICAgICAgICAgICAgICAgKHJldCA9 PSAwKSA/ICJTVUNDRVNTICIgOiAiTU9SRV9UT19ETyAiLCByZXQpOyAvKiBzYWZlICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJlbmNyeXB0X3JlcGx5IixkYmdidWYsMCk7CisgICAgICAgIH0K KyNlbmRpZgorICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUp IHsKKyAgICAgICAgc3ByaW50ZihkYmdidWYsICI+Pj5lbmNyeXB0X3JlcGx5IHJldHVybmVkICVk XG4iLCByZXQpOyAvKiBzYWZlICovCisgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfcmVwbHki LGRiZ2J1ZiwwKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBh dXRvZW5jcnlwdCA9IDA7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgZW5jcnlwdF9tb2RlID0gdHlwZTsKKyAgICAgICAgaWYgKHJldCA9PSAwICYmIGF1dG9lbmNy eXB0KQorICAgICAgICAgICAgZW5jcnlwdF9zdGFydF9vdXRwdXQodHlwZSk7CisgICAgfQorICAg IHJldHVybigwKTsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIGEgRU5DUllQVCBTVEFSVCBjb21t YW5kIGlzIHJlY2VpdmVkLgorICovCitpbnQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9zdGFy dCh1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK2VuY3J5cHRfc3RhcnQoZGF0 YSwgY250KSB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OworI2VuZGlmCit7CisgICAgRW5j cnlwdGlvbnMgKmVwOworCisgICAgaWYgKCFkZWNyeXB0X21vZGUpIHsKKyAgICAgICAgLyoKKyAg ICAgICAgKiBTb21ldGhpbmcgaXMgd3JvbmcuICBXZSBzaG91bGQgbm90IGdldCBhIFNUQVJUCisg ICAgICAgICogY29tbWFuZCB3aXRob3V0IGhhdmluZyBhbHJlYWR5IHBpY2tlZCBvdXIKKyAgICAg ICAgKiBkZWNyeXB0aW9uIHNjaGVtZS4gIFNlbmQgYSBSRVFVRVNULUVORCB0bworICAgICAgICAq IGF0dGVtcHQgdG8gY2xlYXIgdGhlIGNoYW5uZWwuLi4KKyAgICAgICAgKi8KKyAgICAgICAgZW5j cnlwdF9zZW5kX3JlcXVlc3RfZW5kKCk7CisgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRpb24g ZXJyb3IhXG4lc1xuIiwKKyAgICAgICAgICAgICAgICAiV2FybmluZywgQ2Fubm90IGRlY3J5cHQg aW5wdXQgc3RyZWFtISEhIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYg KGVwID0gZmluZGRlY3J5cHRpb24oZGVjcnlwdF9tb2RlKSkgeworICAgICAgICBpZiAoIGRlY3J5 cHRfaW5wdXQgIT0gZXAtPmlucHV0ICkgeworICAgICAgICAgICAgZGVjcnlwdF9pbnB1dCA9IGVw LT5pbnB1dDsKKyAgICAgICAgICAgIEVuY3J5cHRLU0dsb2JhbEhhY2stPmRlY3J5cHQgPSBkZWNy eXB0X2tzX3N0cmVhbTsKKyAgICAgICAgICAgIEVuY3J5cHRLU0dsb2JhbEhhY2stPmRlY3J5cHRf dHlwZSA9IGVwLT50eXBlOworCisgICAgICAgICAgICBpZiAoZW5jcnlwdF92ZXJib3NlKSB7Cisg ICAgICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICJJbnB1dCBpcyBub3cgZGVjcnlwdGVkIHdp dGggdHlwZSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRU5DVFlQRV9OQU1FKGRlY3J5 cHRfbW9kZSkpOyAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsImVuY3J5cHRfc3RhcnQiLGRiZ2J1ZiwwKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVz XG4iLGRiZ2J1Zik7CisgICAgICAgICAgICB9CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlm IChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGRiZ2J1Ziwg Ij4+PlN0YXJ0IHRvIGRlY3J5cHQgaW5wdXQgd2l0aCB0eXBlICVzIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBFTkNUWVBFX05BTUUoZGVjcnlwdF9tb2RlKSk7ICAgICAgICAgICAvKiBzYWZl ICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfY3JwIixkYmdidWYsMCk7CisgICAg ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXIg YnVmWzEwMjRdOworICAgICAgICBzcHJpbnRmKGJ1ZiwgIldhcm5pbmcsIENhbm5vdCBkZWNyeXB0 IHR5cGUgJXMgKCVkKSEhISIsCisgICAgICAgICAgICAgICAgICBFTkNUWVBFX05BTUVfT0soZGVj cnlwdF9tb2RlKQorICAgICAgICAgICAgICAgICAgPyBFTkNUWVBFX05BTUUoZGVjcnlwdF9tb2Rl KSA6ICIodW5rbm93bikiLAorICAgICAgICAgICAgICAgICAgZGVjcnlwdF9tb2RlKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgcHJpbnRmKCJBdXRo ZW50aWNhdGlvbiBlcnJvciFcbiVzXG4iLGJ1Zik7CisgICAgICAgIGVuY3J5cHRfc2VuZF9yZXF1 ZXN0X2VuZCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9 CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X2RvbnRfc3VwcG9ydChpbnQgdHlwZSkK KyNlbHNlCitlbmNyeXB0X2RvbnRfc3VwcG9ydCh0eXBlKSBpbnQgdHlwZTsKKyNlbmRpZgorewor ICAgIGlfd29udF9zdXBwb3J0X2VuY3J5cHQgfD0gdHlwZW1hc2sodHlwZSk7CisgICAgaV93b250 X3N1cHBvcnRfZGVjcnlwdCB8PSB0eXBlbWFzayh0eXBlKTsKKyAgICByZXR1cm4oMCk7Cit9CisK K2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X3Nlc3Npb25fa2V5KFNlc3Npb25fS2V5ICpr ZXksIGludCBzZXJ2ZXIpCisjZWxzZQorZW5jcnlwdF9zZXNzaW9uX2tleShrZXksIHNlcnZlcikg U2Vzc2lvbl9LZXkgKmtleTsgaW50IHNlcnZlcjsKKyNlbmRpZgoreworICAgIEVuY3J5cHRpb25z ICplcCA9IGVuY3J5cHRpb25zOworCisgICAgaWYgKGhhdmVzZXNzaW9ua2V5KQorICAgICAgICBy ZXR1cm4oMCk7CisKKyAgICBoYXZlc2Vzc2lvbmtleSA9IDE7CisKKyAgICB3aGlsZSAoZXAtPnR5 cGUpIHsKKyAgICAgICAgZGVidWcoRjExMSwiZW5jcnlwdF9zZXNzaW9uX2tleSIsZXAtPm5hbWUs ZXAtPnR5cGUpOworICAgICAgICBpZiAoZXAtPnNlc3Npb24pIHsKKyAgICAgICAgICAgIGlmICgo KmVwLT5zZXNzaW9uKShrZXksIHNlcnZlcikgPCAwKSB7CisgICAgICAgICAgICAgICAgaV93b250 X3N1cHBvcnRfZW5jcnlwdCB8PSB0eXBlbWFzayhlcC0+dHlwZSk7CisgICAgICAgICAgICAgICAg aV93b250X3N1cHBvcnRfZGVjcnlwdCB8PSB0eXBlbWFzayhlcC0+dHlwZSk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgKytlcDsKKyAgICB9CisgICAgZGVidWcoRjExMSwiZW5j cnlwdF9zZXNzaW9uX2tleSAoZG9uZSkiLGVwLT5uYW1lLGVwLT50eXBlKTsKKyAgICByZXR1cm4o MCk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBFTkNSWVBUIEVORCBpcyByZWNlaXZlZC4KKyAq LworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfZW5kKFZPSUQpCisjZWxzZQorZW5jcnlw dF9lbmQoKQorI2VuZGlmCit7CisgICAgZGVjcnlwdF9pbnB1dCA9IE5VTEw7CisgICAgRW5jcnlw dEtTR2xvYmFsSGFjay0+ZGVjcnlwdCA9IE5VTEw7CisgICAgRW5jcnlwdEtTR2xvYmFsSGFjay0+ ZGVjcnlwdF90eXBlID0gRU5DVFlQRV9BTlk7CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZW5jcnlw dF9kZWJ1Z19tb2RlKSB7CisgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+SW5wdXQgaXMgYmFj ayB0byBjbGVhciB0ZXh0Iik7ICAgICAgLyogc2FmZSAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJl bmNyeXB0X2VuZCIsZGJnYnVmLDApOworICAgIH0KKyNlbmRpZgorICAgIGlmIChlbmNyeXB0X3Zl cmJvc2UpIHsKKyAgICAgICAgc3ByaW50ZihkYmdidWYsICJJbnB1dCBpcyBub3cgY2xlYXIgdGV4 dCIpOyAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRf ZW5kIixkYmdidWYsMCk7CisgICAgICAgIHByaW50ZigiJXNcbiIsZGJnYnVmKTsKKyAgICB9Cisg ICAgcmV0dXJuKDApOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gRU5DUllQVCBSRVFVRVNULUVO RCBpcyByZWNlaXZlZC4KKyAqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfcmVxdWVz dF9lbmQoVk9JRCkKKyNlbHNlCitlbmNyeXB0X3JlcXVlc3RfZW5kKCkKKyNlbmRpZgoreworICAg IGVuY3J5cHRfc2VuZF9lbmQoKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qCisgKiBDYWxsZWQg d2hlbiBFTkNSWVBUIFJFUVVFU1QtU1RBUlQgaXMgcmVjZWl2ZWQuICBJZiB3ZSByZWNlaXZlCisg KiB0aGlzIGJlZm9yZSBhIHR5cGUgaXMgcGlja2VkLCB0aGVuIHRoYXQgaW5kaWNhdGVzIHRoYXQg dGhlCisgKiBvdGhlciBzaWRlIHdhbnRzIHVzIHRvIHN0YXJ0IGVuY3J5cHRpbmcgZGF0YSBhcyBz b29uIGFzIHdlCisgKiBjYW4uCisgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X3Jl cXVlc3Rfc3RhcnQoVk9JRCkKKyNlbHNlCitlbmNyeXB0X3JlcXVlc3Rfc3RhcnQoKQorI2VuZGlm Cit7CisgICAgaWYgKGVuY3J5cHRfbW9kZSAhPSAwKQorICAgICAgICBlbmNyeXB0X3N0YXJ0X291 dHB1dChlbmNyeXB0X21vZGUpOworICAgIHJldHVybigwKTsKK30KKworc3RhdGljIHVuc2lnbmVk IGNoYXIgc3RyX2tleWlkWyhNQVhLRVlMRU4qMikrNV0gPSB7CisgICAgSUFDLCBTQiwgVEVMT1BU X0VOQ1JZUFRJT04KK307CitfUFJPVE9UWVAoaW50IGVuY3J5cHRfa2V5aWQsKHN0cnVjdCBrZXlf aW5mbyAqLHVuc2lnbmVkIGNoYXIgKixpbnQpKTsKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Vu Y3J5cHRfZW5jX2tleWlkKHVuc2lnbmVkIGNoYXIgKmtleWlkLCBpbnQgbGVuKQorI2Vsc2UKK2Vu Y3J5cHRfZW5jX2tleWlkKGtleWlkLCBsZW4pIHVuc2lnbmVkIGNoYXIgKmtleWlkOyBpbnQgbGVu OworI2VuZGlmCit7CisgICAgcmV0dXJuKGVuY3J5cHRfa2V5aWQoJmtpWzFdLCBrZXlpZCwgbGVu KSk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNyeXB0X2RlY19rZXlpZCh1bnNpZ25l ZCBjaGFyICprZXlpZCwgaW50IGxlbikKKyNlbHNlCitlbmNyeXB0X2RlY19rZXlpZChrZXlpZCwg bGVuKSB1bnNpZ25lZCBjaGFyICprZXlpZDsgaW50IGxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeworICAgIHJldHVybihlbmNyeXB0X2tleWlkKCZraVswXSwga2V5aWQsIGxlbikpOworfQor CitpbnQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9rZXlpZChzdHJ1Y3Qga2V5X2luZm8gKmtw LCB1bnNpZ25lZCBjaGFyICprZXlpZCwgaW50IGxlbikKKyNlbHNlCitlbmNyeXB0X2tleWlkKGtw LCBrZXlpZCwgbGVuKQorICAgIHN0cnVjdCBrZXlfaW5mbyAqa3A7IHVuc2lnbmVkIGNoYXIgKmtl eWlkOyBpbnQgbGVuOworI2VuZGlmCit7CisgICAgRW5jcnlwdGlvbnMgKmVwOworICAgIGludCBk aXIgPSBrcC0+ZGlyOworICAgIHJlZ2lzdGVyIGludCByZXQgPSAwOworCisgICAgaWYgKCEoZXAg PSAoKmtwLT5nZXRjcnlwdCkoKmtwLT5tb2RlcCkpKSB7CisgICAgICAgIGlmIChsZW4gPT0gMCkK KyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIGtwLT5rZXlsZW4gPSAwOworICAgIH0g ZWxzZSBpZiAobGVuID09IDAgfHwgbGVuID4gTUFYS0VZTEVOKSB7CisgICAgICAgIC8qCisgICAg ICAgICogRW1wdHkgb3B0aW9uIG9yIEtleSB0b28gbG9uZywgaW5kaWNhdGVzIGEgZmFpbHVyZS4K KyAgICAgICAgKi8KKyAgICAgICAgaWYgKGtwLT5rZXlsZW4gPT0gMCkKKyAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgIGtwLT5rZXlsZW4gPSAwOworICAgICAgICBpZiAoZXAtPmtleWlk KQorICAgICAgICAgICAgKHZvaWQpKCplcC0+a2V5aWQpKGRpciwga3AtPmtleWlkLCAma3AtPmtl eWxlbik7CisKKyAgICB9IGVsc2UgaWYgKChsZW4gIT0ga3AtPmtleWxlbikgfHwgKG1lbWNtcChr ZXlpZCwga3AtPmtleWlkLCBsZW4pICE9IDApKSB7CisgICAgICAgIC8qCisgICAgICAgICogTGVu Z3RoIG9yIGNvbnRlbnRzIGFyZSBkaWZmZXJlbnQKKyAgICAgICAgKi8KKyAgICAgICAga3AtPmtl eWxlbiA9IGxlbjsKKyAgICAgICAgbWVtY3B5KGtwLT5rZXlpZCwga2V5aWQsIGxlbik7ICAgICAg ICAgIC8qIGxlbmd0aCA8IE1BWEtFWUxFTiAqLworICAgICAgICBpZiAoZXAtPmtleWlkKQorICAg ICAgICAgICAgKHZvaWQpKCplcC0+a2V5aWQpKGRpciwga3AtPmtleWlkLCAma3AtPmtleWxlbik7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGVwLT5rZXlpZCkKKyAgICAgICAgICAgIHJldCA9 ICgqZXAtPmtleWlkKShkaXIsIGtwLT5rZXlpZCwgJmtwLT5rZXlsZW4pOworICAgICAgICBpZiAo KHJldCA9PSAwKSAmJiAoZGlyID09IERJUl9FTkNSWVBUKSAmJiBhdXRvZW5jcnlwdCkKKyAgICAg ICAgICAgIGVuY3J5cHRfc3RhcnRfb3V0cHV0KCprcC0+bW9kZXApOworICAgICAgICByZXR1cm4o MCk7CisgICAgfQorCisgICAgZW5jcnlwdF9zZW5kX2tleWlkKGRpciwga3AtPmtleWlkLCBrcC0+ a2V5bGVuLCAwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitl bmNyeXB0X3NlbmRfa2V5aWQoaW50IGRpciwgdW5zaWduZWQgY2hhciAqa2V5aWQsIGludCBrZXls ZW4sIGludCBzYXZlaXQpCisjZWxzZQorZW5jcnlwdF9zZW5kX2tleWlkKGRpciwga2V5aWQsIGtl eWxlbiwgc2F2ZWl0KQorICAgICBpbnQgZGlyOyB1bnNpZ25lZCBjaGFyICprZXlpZDsgaW50IGtl eWxlbjsgaW50IHNhdmVpdDsKKyNlbmRpZgoreworICAgIHVuc2lnbmVkIGNoYXIgKnN0cnA7CisK KyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0 X3Rscy5tZV9mb2xsb3dzKQorICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ0tfU1NMICov CisKKyAgICBzdHJfa2V5aWRbM10gPSAoZGlyID09IERJUl9FTkNSWVBUKQorICAgICAgICA/IEVO Q1JZUFRfRU5DX0tFWUlEIDogRU5DUllQVF9ERUNfS0VZSUQ7CisgICAgaWYgKHNhdmVpdCAmJiBr ZXlsZW4gPD0gTUFYS0VZTEVOKSB7CisgICAgICAgIHN0cnVjdCBrZXlfaW5mbyAqa3AgPSAma2lb KGRpciA9PSBESVJfRU5DUllQVCkgPyAwIDogMV07CisgICAgICAgIG1lbWNweShrcC0+a2V5aWQs IGtleWlkLCBrZXlsZW4pOworICAgICAgICBrcC0+a2V5bGVuID0ga2V5bGVuOworICAgIH0KKwor ICAgIGZvciAoc3RycCA9ICZzdHJfa2V5aWRbNF07IGtleWxlbiA+IDA7IC0ta2V5bGVuKSB7Cisg ICAgICAgIGlmICgoKnN0cnArKyA9ICprZXlpZCsrKSA9PSBJQUMpCisgICAgICAgICAgICAqc3Ry cCsrID0gSUFDOworICAgIH0KKyAgICAqc3RycCsrID0gSUFDOworICAgICpzdHJwKysgPSBTRTsK KworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBpbnQgaTsK KyAgICAgICAgc3ByaW50Zih0bl9tc2csIlRFTE5FVCBTRU5UIFNCICVzICVzICIsCisgICAgICAg ICAgICAgICAgIFRFTE9QVChURUxPUFRfRU5DUllQVElPTiksCisgICAgICAgICAgICAgICAgIChk aXIgPT0gRElSX0VOQ1JZUFQpID8gIkVOQy1LRVlJRCIgOiAiREVDLUtFWUlEIik7IC8qIHNhZmUg Ki8KKyAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01TR19MRU4sJnN0cl9rZXlpZFs0 XSxzdHJwLXN0cl9rZXlpZC0yLTQpOworICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0Ui LFROX01TR19MRU4pOworICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgfQorI2lmZGVmIE9T MgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlm CisgICAgdHRvbChzdHJfa2V5aWQsIHN0cnAgLSBzdHJfa2V5aWQpOworI2lmZGVmIE9TMgorICAg IFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgcmV0dXJuKDApOworfQorCitWT0lE CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfYXV0byhpbnQgb24pCisjZWxzZQorZW5jcnlwdF9h dXRvKG9uKSBpbnQgb247CisjZW5kaWYKK3sKKyAgICBpZiAob24gPCAwKQorICAgICAgICBhdXRv ZW5jcnlwdCBePSAxOworICAgIGVsc2UKKyAgICAgICAgYXV0b2VuY3J5cHQgPSBvbiA/IDEgOiAw OworfQorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2RlY3J5cHRfYXV0byhpbnQgb24pCisjZWxz ZQorZGVjcnlwdF9hdXRvKG9uKSBpbnQgb247CisjZW5kaWYKK3sKKyAgICBpZiAob24gPCAwKQor ICAgICAgICBhdXRvZGVjcnlwdCBePSAxOworICAgIGVsc2UKKyAgICAgICAgYXV0b2RlY3J5cHQg PSBvbiA/IDEgOiAwOworfQorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfc3RhcnRf b3V0cHV0KGludCB0eXBlKQorI2Vsc2UKK2VuY3J5cHRfc3RhcnRfb3V0cHV0KHR5cGUpIGludCB0 eXBlOworI2VuZGlmCit7CisgICAgRW5jcnlwdGlvbnMgKmVwOworICAgIHJlZ2lzdGVyIHVuc2ln bmVkIGNoYXIgKnA7CisgICAgcmVnaXN0ZXIgaW50IGk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBp ZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQorICAg ICAgICByZXR1cm47CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoIShlcCA9IGZpbmRl bmNyeXB0aW9uKHR5cGUpKSkgeworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNyeXB0X2Rl YnVnX21vZGUpIHsKKyAgICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+Q2FuJ3QgZW5jcnlw dCB3aXRoIHR5cGUgJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFN RV9PSyh0eXBlKQorICAgICAgICAgICAgICAgICAgICAgPyBFTkNUWVBFX05BTUUodHlwZSkgOiAi KHVua25vd24pIiwKKyAgICAgICAgICAgICAgICAgICAgIHR5cGUpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJl bmNyeXB0X3N0YXJ0X291dHB1dCIsZGJnYnVmLDApOworICAgICAgICB9CisjZW5kaWYKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZXAtPnN0YXJ0KSB7CisgICAgICAgIGkgPSAoKmVw LT5zdGFydCkoRElSX0VOQ1JZUFQsIDApOworI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChlbmNy eXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgICAgIHNwcmludGYoZGJnYnVmLCAiPj4+RW5jcnlw dCBzdGFydDogJXMgKCVkKSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIChpIDwgMCkgPyAi ZmFpbGVkIiA6CisgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbCBuZWdvdGlhdGlvbiBpbiBw cm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICBpLCBFTkNUWVBFX05BTUUodHlwZSkpOyAg ICAgICAgICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiZW5j cnlwdF9zdGFydF9vdXRwdXQiLGRiZ2J1ZiwwKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAg IGlmIChpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICggZW5jcnlwdF9v dXRwdXQgIT0gZXAtPm91dHB1dCApIHsKKyAgICAgICAgcCA9IHN0cl9zdGFydDsKKyAgICAgICAg KnArKyA9IElBQzsKKyAgICAgICAgKnArKyA9IFNCOworICAgICAgICAqcCsrID0gVEVMT1BUX0VO Q1JZUFRJT047CisgICAgICAgICpwKysgPSBFTkNSWVBUX1NUQVJUOworICAgICAgICBmb3IgKGkg PSAwOyBpIDwga2lbMF0ua2V5bGVuOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoICpwKysgPSBr aVswXS5rZXlpZFtpXSkgPT0gSUFDKQorICAgICAgICAgICAgICAgICpwKysgPSBJQUM7CisgICAg ICAgIH0KKyAgICAgICAgKnArKyA9IElBQzsKKyAgICAgICAgKnArKyA9IFNFOworCisgICAgICAg IGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICAgICAgaW50IGk7Cisg ICAgICAgICAgICBzcHJpbnRmKHRuX21zZywiVEVMTkVUIFNFTlQgU0IgJXMgU1RBUlQgIiwKKyAg ICAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfRU5DUllQVElPTikpOyAgICAgICAgICAg ICAgICAvKiBzYWZlICovCisgICAgICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNH X0xFTiwmc3RyX3N0YXJ0WzRdLHAtc3RyX3N0YXJ0LTItNCk7CisgICAgICAgICAgICBja3N0cm5j YXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICAgICAgZGVidWcoRjEwMCx0 bl9tc2csIiIsMCk7CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWco dG5fbXNnKTsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0 ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgICAgICB0dG9sKHN0cl9zdGFy dCwgcCAtIHN0cl9zdGFydCk7CisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRl eCgpOworI2VuZGlmCisKKyAgLyoKKyAgICogSWYgd2UgYXJlIGFscmVhZHkgZW5jcnlwdGluZyBp biBzb21lIG1vZGUsIHRoZW4KKyAgICogZW5jcnlwdCB0aGUgcmluZyAod2hpY2ggaW5jbHVkZXMg b3VyIHJlcXVlc3QpIGluCisgICAqIHRoZSBvbGQgbW9kZSwgbWFyayBpdCBhbGwgYXMgImNsZWFy IHRleHQiIGFuZCB0aGVuCisgICAqIHN3aXRjaCB0byB0aGUgbmV3IG1vZGUuCisgICAqLworICAg ICAgICBlbmNyeXB0X291dHB1dCA9IGVwLT5vdXRwdXQ7CisgICAgICAgIEVuY3J5cHRLU0dsb2Jh bEhhY2stPmVuY3J5cHQgPSBlbmNyeXB0X2tzX3N0cmVhbTsKKyAgICAgICAgRW5jcnlwdEtTR2xv YmFsSGFjay0+ZW5jcnlwdF90eXBlID0gdHlwZTsKKyAgICAgICAgZW5jcnlwdF9tb2RlID0gdHlw ZTsKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAg ICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PlN0YXJ0ZWQgdG8gZW5jcnlwdCBvdXRwdXQgd2l0 aCB0eXBlICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVfTkFNRSh0eXBlKSk7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJl bmNyeXB0X3N0YXJ0X291dHB1dCIsZGJnYnVmLDApOworICAgICAgICB9CisjZW5kaWYKKyAgICAg ICAgaWYgKGVuY3J5cHRfdmVyYm9zZSkgeworICAgICAgICAgICAgc3ByaW50ZihkYmdidWYsICJP dXRwdXQgaXMgbm93IGVuY3J5cHRlZCB3aXRoIHR5cGUgJXMiLAorICAgICAgICAgICAgICAgICAg ICAgRU5DVFlQRV9OQU1FKHR5cGUpKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHNhZmUgKi8K KyAgICAgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc3RhcnRfb3V0cHV0IixkYmdidWYsMCk7 CisgICAgICAgICAgICBwcmludGYoIiVzXG4iLGRiZ2J1Zik7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9zZW5kX2VuZChWT0lEKQorI2Vsc2UK K2VuY3J5cHRfc2VuZF9lbmQoKQorI2VuZGlmCit7CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRF TE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykKKyAgICAgICAg cmV0dXJuOworI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaWYgKCFlbmNyeXB0X291dHB1dCkK KyAgICAgICAgcmV0dXJuOworCisgICAgc3RyX2VuZFswXSA9IElBQzsKKyAgICBzdHJfZW5kWzFd ID0gU0I7CisgICAgc3RyX2VuZFsyXSA9IFRFTE9QVF9FTkNSWVBUSU9OOworICAgIHN0cl9lbmRb M10gPSBFTkNSWVBUX0VORDsKKyAgICBzdHJfZW5kWzRdID0gSUFDOworICAgIHN0cl9lbmRbNV0g PSBTRTsKKworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBp bnQgaTsKKyAgICAgICAgc3ByaW50Zih0bl9tc2csIlRFTE5FVCBTRU5UIFNCICVzIEVORCBJQUMg U0UiLAorICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0VOQ1JZUFRJT04pKTsgICAgICAg ICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7 CisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgIH0K KyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQg KTsKKyNlbmRpZgorICAgIHR0b2woc3RyX2VuZCwgc2l6ZW9mKHN0cl9lbmQpKTsKKyNpZmRlZiBP UzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorCisgICAgZW5jcnlwdF9vdXRw dXQgPSAwOworICAgIEVuY3J5cHRLU0dsb2JhbEhhY2stPmVuY3J5cHQgPSBOVUxMOworICAgIEVu Y3J5cHRLU0dsb2JhbEhhY2stPmVuY3J5cHRfdHlwZSA9IEVOQ1RZUEVfQU5ZOworI2lmZGVmIERF QlVHCisgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICBzcHJpbnRmKGRiZ2J1 ZiwgIj4+Pk91dHB1dCBpcyBiYWNrIHRvIGNsZWFyIHRleHQiKTsgICAgIC8qIHNhZmUgKi8KKyAg ICAgICAgZGVidWcoRjExMCwiZW5jcnlwdF9zZW5kX2VuZCIsZGJnYnVmLDApOworICAgIH0KKyNl bmRpZgorICAgIGlmIChlbmNyeXB0X3ZlcmJvc2UpIHsKKyAgICAgICAgc3ByaW50ZihkYmdidWYs ICJPdXRwdXQgaXMgbm93IGNsZWFyIHRleHQiKTsgICAgICAgICAgICAvKiBzYWZlICovCisgICAg ICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc2VuZF9lbmQiLGRiZ2J1ZiwwKTsKKyAgICAgICAgcHJp bnRmKCIlc1xuIixkYmdidWYpOworICAgIH0KK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitl bmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydChWT0lEKQorI2Vsc2UKK2VuY3J5cHRfc2VuZF9yZXF1 ZXN0X3N0YXJ0KCkKKyNlbmRpZgoreworICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnA7Cisg ICAgcmVnaXN0ZXIgaW50IGk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQorICAgICAgICByZXR1cm47Cisj ZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBwID0gc3RyX3N0YXJ0OworICAgICpwKysgPSBJQUM7 CisgICAgKnArKyA9IFNCOworICAgICpwKysgPSBURUxPUFRfRU5DUllQVElPTjsKKyAgICAqcCsr ID0gRU5DUllQVF9SRVFTVEFSVDsKKyAgICBmb3IgKGkgPSAwOyBpIDwga2lbMV0ua2V5bGVuOyAr K2kpIHsKKyAgICAgICAgaWYgKCggKnArKyA9IGtpWzFdLmtleWlkW2ldKSA9PSBJQUMpCisgICAg ICAgICAgICAqcCsrID0gSUFDOworICAgIH0KKyAgICAqcCsrID0gSUFDOworICAgICpwKysgPSBT RTsKKworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBpbnQg aTsKKyAgICAgICAgc3ByaW50Zih0bl9tc2csIlRFTE5FVCBTRU5UIFNCICVzIFJFUVVFU1QtU1RB UlQgIiwKKyAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9FTkNSWVBUSU9OKSk7ICAgICAg ICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxU Tl9NU0dfTEVOLCZzdHJfc3RhcnRbNF0scC1zdHJfc3RhcnQtMi00KTsKKyAgICAgICAgY2tzdHJu Y2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAgICAgZGVidWcoRjEwMCx0bl9t c2csIiIsMCk7CisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cp OworICAgIH0KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklO SVRFX1dBSVQgKTsKKyNlbmRpZgorICAgIHR0b2woc3RyX3N0YXJ0LCBwIC0gc3RyX3N0YXJ0KTsK KyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorCisgICAgaWYg KGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICBzcHJpbnRmKGRiZ2J1ZiwgIj4+PlJlcXVl c3QgaW5wdXQgdG8gYmUgZW5jcnlwdGVkXG4iKTsgIC8qIHNhZmUgKi8KKyAgICAgICAgZGVidWco RjExMCwiZW5jcnlwdF9zZW5kX3JlcXVlc3Rfc3RhcnQiLGRiZ2J1ZiwwKTsKKyAgICB9Cit9CisK K1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kKFZPSUQpCisj ZWxzZQorZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kKCkKKyNlbmRpZgoreworI2lmZGVmIENLX1NT TAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpCisgICAgICAgIHJldHVybjsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIHN0cl9lbmRb MF0gPSBJQUM7CisgICAgc3RyX2VuZFsxXSA9IFNCOworICAgIHN0cl9lbmRbMl0gPSBURUxPUFRf RU5DUllQVElPTjsKKyAgICBzdHJfZW5kWzNdID0gRU5DUllQVF9SRVFFTkQ7CisgICAgc3RyX2Vu ZFs0XSA9IElBQzsKKyAgICBzdHJfZW5kWzVdID0gU0U7CisKKyAgICBpZiAoZGVibG9nIHx8IHRu X2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHNwcmludGYodG5fbXNn LCJURUxORVQgU0VOVCBTQiAlcyBSRVFFTkQgSUFDIFNFIiwKKyAgICAgICAgICAgICAgICAgVEVM T1BUKFRFTE9QVF9FTkNSWVBUSU9OKSk7ICAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisg ICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICBpZiAodG5fZGViIHx8IGRl YnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICB9CisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRl bG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICB0dG9sKHN0cl9l bmQsIHNpemVvZihzdHJfZW5kKSk7CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4 KCk7CisjZW5kaWYKKworICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgc3By aW50ZihkYmdidWYsICI+Pj5SZXF1ZXN0IGlucHV0IHRvIGJlIGNsZWFyIHRleHRcbiIpOyAvKiBz YWZlICovCisgICAgICAgIGRlYnVnKEYxMTAsImVuY3J5cHRfc2VuZF9yZXF1ZXN0X2VuZCIsZGJn YnVmLDApOworICAgIH0KK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VuY3J5cHRfaXNfZW5j cnlwdGluZyhWT0lEKQorI2Vsc2UKK2VuY3J5cHRfaXNfZW5jcnlwdGluZygpCisjZW5kaWYKK3sK KyAgICBpZiAoZW5jcnlwdF9vdXRwdXQpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAw OworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworZW5jcnlwdF9pc19kZWNyeXB0aW5nKFZPSUQp CisjZWxzZQorZW5jcnlwdF9pc19kZWNyeXB0aW5nKCkKKyNlbmRpZgoreworICAgIGlmIChkZWNy eXB0X2lucHV0KQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKworI2lmZGVm IERFQlVHCit2b2lkCitlbmNyeXB0X2RlYnVnKG1vZGUpCisgICAgIGludCBtb2RlOworeworICAg IGVuY3J5cHRfZGVidWdfbW9kZSA9IG1vZGU7Cit9CisjZW5kaWYKKworI2lmZGVmIENLX0RFUwor LyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqICAgICAgVGhlIFJlZ2VudHMgb2Yg dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogICAgICBDYWxpZm9ybmlhLCBCZXJr ZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl IFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENP TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRT IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor LyogYmFzZWQgb24gQCgjKWVuY19kZXMuYyAgICAgICA4LjEgKEJlcmtlbGV5KSA2LzQvOTMgKi8K KworI2RlZmluZSBDRkIgICAgIDAKKyNkZWZpbmUgT0ZCICAgICAxCisKKyNkZWZpbmUgTk9fU0VO RF9JViAgICAgIDEKKyNkZWZpbmUgTk9fUkVDVl9JViAgICAgIDIKKyNkZWZpbmUgTk9fS0VZSUQg ICAgICAgIDQKKyNkZWZpbmUgSU5fUFJPR1JFU1MgICAgIChOT19TRU5EX0lWfE5PX1JFQ1ZfSVZ8 Tk9fS0VZSUQpCisjZGVmaW5lIFNVQ0NFU1MgICAgICAgICAwCisjZGVmaW5lIHhGQUlMRUQgICAg ICAgICAtMQorCitTY2hlZHVsZSB0ZXN0X3NjaGVkOworCitzdHJ1Y3QgZGVzX3N0aW5mbyB7Cisg ICAgQmxvY2sgICAgICAgICAgICAgICBzdHJfb3V0cHV0OworICAgIEJsb2NrICAgICAgICAgICAg ICAgc3RyX2ZlZWQ7CisgICAgQmxvY2sgICAgICAgICAgICAgICBzdHJfaXY7CisgICAgQmxvY2sg ICAgICAgICAgICAgICBzdHJfaWtleTsKKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAgIHVuc2lnbmVk IGNoYXIgICAgICAgc3RyX2tleWJ5dGVzWzhdOworICAgIGtyYjVfa2V5YmxvY2sgICAgICAgc3Ry X2tleTsKKyNlbHNlIC8qIE1JVF9DVVJSRU5UICovCisgICAgU2NoZWR1bGUgICAgICAgICAgICBz dHJfc2NoZWQ7CisgICAgaW50ICAgICAgICAgICAgICAgICBzdHJfaW5kZXg7CisjZW5kaWYgLyog TUlUX0NVUlJFTlQgKi8KKyAgICBpbnQgICAgICAgICAgICAgICAgIHN0cl9mbGFnc2hpZnQ7Cit9 OworCitzdHJ1Y3QgZGVzX2ZiIHsKKyNpZm5kZWYgTUlUX0NVUlJFTlQKKyAgICBCbG9jayBrcmJk ZXNfa2V5OworICAgIFNjaGVkdWxlIGtyYmRlc19zY2hlZDsKKyNlbmRpZiAvKiBNSVRfQ1VSUkVO VCAqLworICAgIEJsb2NrIHRlbXBfZmVlZDsKKyAgICB1bnNpZ25lZCBjaGFyIGZiX2ZlZWRbNjRd OworICAgIGludCBuZWVkX3N0YXJ0OworICAgIGludCBzdGF0ZVsyXTsKKyAgICBpbnQga2V5aWRb Ml07CisgICAgaW50IG9uY2U7CisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICBpbnQgdmFsaWRrZXk7 CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KKyAgICBzdHJ1Y3QgZGVzX3N0aW5mbyAgc3RyZWFt c1syXTsKK307CitzdGF0aWMgc3RydWN0IGRlc19mYiBkZXNfZmJbMl07CisKK3N0cnVjdCBkZXMz X3N0aW5mbyB7CisgICAgQmxvY2sgICAgICAgICAgICAgICBzdHJfb3V0cHV0OworICAgIEJsb2Nr ICAgICAgICAgICAgICAgc3RyX2ZlZWQ7CisgICAgQmxvY2sgICAgICAgICAgICAgICBzdHJfaXY7 CisgICAgQmxvY2sgICAgICAgICAgICAgICBzdHJfaWtleVszXTsKKyAgICBTY2hlZHVsZSAgICAg ICAgICAgIHN0cl9zY2hlZFszXTsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHN0cl9pbmRleDsK KyAgICBpbnQgICAgICAgICAgICAgICAgIHN0cl9mbGFnc2hpZnQ7Cit9OworCitzdHJ1Y3QgZGVz M19mYiB7CisjaWZuZGVmIE1JVF9DVVJSRU5UCisgICAgQmxvY2sga3JiZGVzX2tleVszXTsKKyAg ICBTY2hlZHVsZSBrcmJkZXNfc2NoZWRbM107CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KKyAg ICBCbG9jayB0ZW1wX2ZlZWQ7CisgICAgdW5zaWduZWQgY2hhciBmYl9mZWVkWzY0XTsKKyAgICBp bnQgbmVlZF9zdGFydDsKKyAgICBpbnQgc3RhdGVbMl07CisgICAgaW50IGtleWlkWzJdOworICAg IGludCBvbmNlOworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAgaW50IHZhbGlka2V5OworI2VuZGlm IC8qIE1JVF9DVVJSRU5UICovCisgICAgc3RydWN0IGRlczNfc3RpbmZvIHN0cmVhbXNbMl07Cit9 Oworc3RhdGljIHN0cnVjdCBkZXMzX2ZiIGRlczNfZmJbMl07CisKK3N0cnVjdCBrZXlpZGxpc3Qg eworICAgIGNoYXIgICAgICAgICprZXlpZDsKKyAgICBpbnQga2V5aWRsZW47CisgICAgY2hhciAg ICAgICAgKmtleTsKKyAgICBpbnQga2V5bGVuOworICAgIGludCBmbGFnczsKK30ga2V5aWRsaXN0 IFtdID0geworICAgIHsgIlwwIiwgMSwgMCwgMCwgMCB9LCAgICAgICAgICAgICAgIC8qIGRlZmF1 bHQga2V5IG9mIHplcm8gKi8KKyAgICB7IDAsIDAsIDAsIDAsIDAgfQorfTsKKworI2RlZmluZSBL RVlGTEFHX01BU0sgICAgMDMKKworI2RlZmluZSBLRVlGTEFHX05PSU5JVCAgMDAKKyNkZWZpbmUg S0VZRkxBR19JTklUICAgIDAxCisjZGVmaW5lIEtFWUZMQUdfT0sgICAgICAwMgorI2RlZmluZSBL RVlGTEFHX0JBRCAgICAgMDMKKworI2RlZmluZSBLRVlGTEFHX1NISUZUICAgMgorCisjZGVmaW5l IFNISUZUX1ZBTChhLGIpICAoS0VZRkxBR19TSElGVCooKGEpKygoYikqMikpKQorCisjZGVmaW5l IEZCNjRfSVYgICAgICAgICAxCisjZGVmaW5lIEZCNjRfSVZfT0sgICAgICAyCisjZGVmaW5lIEZC NjRfSVZfQkFEICAgICAzCisjZGVmaW5lIEZCNjRfQ0hBTExFTkdFICA0CisjZGVmaW5lIEZCNjRf UkVTUE9OU0UgICA1CisKK3ZvaWQgZmI2NF9zdHJlYW1faXYgUCgoQmxvY2ssIHN0cnVjdCBkZXNf c3RpbmZvICopKTsKK3ZvaWQgZmI2NF9pbml0IFAoKHN0cnVjdCBkZXNfZmIgKikpOworc3RhdGlj IGludCBmYjY0X3N0YXJ0IFAoKHN0cnVjdCBkZXNfZmIgKiwgaW50LCBpbnQpKTsKK2ludCBmYjY0 X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50LCBzdHJ1Y3QgZGVzX2ZiICopKTsKK2ludCBmYjY0 X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50LCBzdHJ1Y3QgZGVzX2ZiICopKTsKK3N0YXRp YyBpbnQgZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICosIGludCwgc3RydWN0IGRlc19mYiAq KSk7Cit2b2lkIGZiNjRfc3RyZWFtX2tleSBQKChCbG9jaywgc3RydWN0IGRlc19zdGluZm8gKikp OworaW50IGZiNjRfa2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAqLCBzdHJ1Y3Qg ZGVzX2ZiICopKTsKKworI2lmZGVmIE1JVF9DVVJSRU5UCitzdGF0aWMgdm9pZAorI2lmZGVmIENL X0FOU0lDCitlY2JfZW5jcnlwdChzdHJ1Y3QgZGVzX3N0aW5mbyAqc3RwLCBCbG9jayBpbiwgQmxv Y2sgb3V0KQorI2Vsc2UgLyogQ0tBTlNJQyAqLworZWNiX2VuY3J5cHQoc3RwLCBpbiwgb3V0KQor ICAgIHN0cnVjdCBkZXNfc3RpbmZvICpzdHA7CisgICAgQmxvY2sgaW47CisgICAgQmxvY2sgb3V0 OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAga3JiNV9lcnJvcl9jb2RlIGNvZGU7Cisg ICAga3JiNV9kYXRhIGRpbjsKKyAgICBrcmI1X2VuY19kYXRhIGRvdXQ7CisKKyAgICBkaW4ubGVu Z3RoID0gODsKKyAgICBkaW4uZGF0YSA9IGluOworCisgICAgZG91dC5jaXBoZXJ0ZXh0Lmxlbmd0 aCA9IDg7CisgICAgZG91dC5jaXBoZXJ0ZXh0LmRhdGEgPSBvdXQ7CisgICAgZG91dC5lbmN0eXBl ID0gRU5DVFlQRV9VTktOT1dOOworCisjaWZkZWYgQ1JZUFRfRExMCisgICAgY29kZSA9IGtyYjVf Y19lbmNyeXB0KCpwX2s1X2NvbnRleHQsICZzdHAtPnN0cl9rZXksIDAsIDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAmZGluLCAmZG91dCk7CisjZWxzZSAvKiBDUllQVF9ETEwgKi8KKyAg ICBjb2RlID0ga3JiNV9jX2VuY3J5cHQoazVfY29udGV4dCwgJnN0cC0+c3RyX2tleSwgMCwgMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICZkaW4sICZkb3V0KTsKKyNlbmRpZiAvKiBDUllQ VF9ETEwgKi8KKyAgICAvKiBYWFggSSdtIG5vdCBzdXJlIHdoYXQgdG8gZG8gaWYgdGhpcyBmYWls cyAqLworICAgIGlmIChjb2RlKQorICAgICAgICBjb21fZXJyKCJsaWJ0ZWxuZXQiLCBjb2RlLCAi ZW5jcnlwdGluZyBzdHJlYW0gZGF0YSIpOworfQorI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisK K3ZvaWQKK2NmYjY0X2luaXQoc2VydmVyKQorICAgIGludCBzZXJ2ZXI7Cit7CisgICAgZmI2NF9p bml0KCZkZXNfZmJbQ0ZCXSk7CisgICAgZGVzX2ZiW0NGQl0uZmJfZmVlZFs0XSA9IEVOQ1RZUEVf REVTX0NGQjY0OworICAgIGRlc19mYltDRkJdLnN0cmVhbXNbMF0uc3RyX2ZsYWdzaGlmdCA9IFNI SUZUX1ZBTCgwLCBDRkIpOworICAgIGRlc19mYltDRkJdLnN0cmVhbXNbMV0uc3RyX2ZsYWdzaGlm dCA9IFNISUZUX1ZBTCgxLCBDRkIpOworfQorCit2b2lkCitvZmI2NF9pbml0KHNlcnZlcikKKyAg ICBpbnQgc2VydmVyOworeworICAgIGZiNjRfaW5pdCgmZGVzX2ZiW09GQl0pOworICAgIGRlc19m YltPRkJdLmZiX2ZlZWRbNF0gPSBFTkNUWVBFX0RFU19PRkI2NDsKKyAgICBkZXNfZmJbQ0ZCXS5z dHJlYW1zWzBdLnN0cl9mbGFnc2hpZnQgPSBTSElGVF9WQUwoMCwgT0ZCKTsKKyAgICBkZXNfZmJb Q0ZCXS5zdHJlYW1zWzFdLnN0cl9mbGFnc2hpZnQgPSBTSElGVF9WQUwoMSwgT0ZCKTsKK30KKwor dm9pZAorZmI2NF9pbml0KGZicCkKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzX2ZiICpmYnA7Cit7 CisgICAgbWVtc2V0KCh2b2lkICopZmJwLCAwLCBzaXplb2YoKmZicCkpOworICAgIGZicC0+c3Rh dGVbMF0gPSBmYnAtPnN0YXRlWzFdID0geEZBSUxFRDsKKyAgICBmYnAtPmZiX2ZlZWRbMF0gPSBJ QUM7CisgICAgZmJwLT5mYl9mZWVkWzFdID0gU0I7CisgICAgZmJwLT5mYl9mZWVkWzJdID0gVEVM T1BUX0VOQ1JZUFRJT047CisgICAgZmJwLT5mYl9mZWVkWzNdID0gRU5DUllQVF9JUzsKK30KKwor LyoKKyAqIFJldHVybnM6CisgKiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMg ZG9uZSwgZW5jcnlwdGlvbiBub3QgcmVhZHkuCisgKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0 aWFsIG5lZ290aWF0aW9uIGFsbCBkb25lLgorICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3Rp YXRpb24gbm90IGRvbmUgeWV0LgorICogICAgICAgMjogTm90IHlldC4gIE90aGVyIHRoaW5ncyAo bGlrZSBnZXR0aW5nIHRoZSBrZXkgZnJvbQorICogICAgICAgICAgS2VyYmVyb3MpIGhhdmUgdG8g aGFwcGVuIGJlZm9yZSB3ZSBjYW4gY29udGludWUuCisgKi8KK2ludAorY2ZiNjRfc3RhcnQoZGly LCBzZXJ2ZXIpCisgICAgaW50IGRpcjsKKyAgICBpbnQgc2VydmVyOworeworICAgIHJldHVybihm YjY0X3N0YXJ0KCZkZXNfZmJbQ0ZCXSwgZGlyLCBzZXJ2ZXIpKTsKK30KK2ludAorb2ZiNjRfc3Rh cnQoZGlyLCBzZXJ2ZXIpCisgICAgaW50IGRpcjsKKyAgICBpbnQgc2VydmVyOworeworICAgIHJl dHVybihmYjY0X3N0YXJ0KCZkZXNfZmJbT0ZCXSwgZGlyLCBzZXJ2ZXIpKTsKK30KKworc3RhdGlj IGludAorZmI2NF9zdGFydChmYnAsIGRpciwgc2VydmVyKQorICAgIHN0cnVjdCBkZXNfZmIgKmZi cDsKKyAgICBpbnQgZGlyOworICAgIGludCBzZXJ2ZXI7Cit7CisgICAgaW50IHg7CisgICAgdW5z aWduZWQgY2hhciAqcDsKKyAgICByZWdpc3RlciBpbnQgc3RhdGU7CisKKyAgICBzd2l0Y2ggKGRp cikgeworICAgIGNhc2UgRElSX0RFQ1JZUFQ6CisgICAgICAgIC8qCisgICAgICAgICogVGhpcyBp cyBzaW1wbHkgYSByZXF1ZXN0IHRvIGhhdmUgdGhlIG90aGVyIHNpZGUKKyAgICAgICAgKiBzdGFy dCBvdXRwdXQgKG91ciBpbnB1dCkuICBIZSB3aWxsIG5lZ290aWF0ZSBhbgorICAgICAgICAqIElW IHNvIHdlIG5lZWQgbm90IGxvb2sgZm9yIGl0LgorICAgICAgICAqLworICAgICAgICBzdGF0ZSA9 IGZicC0+c3RhdGVbZGlyLTFdOworICAgICAgICBpZiAoc3RhdGUgPT0geEZBSUxFRCkKKyAgICAg ICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBE SVJfRU5DUllQVDoKKyAgICAgICAgc3RhdGUgPSBmYnAtPnN0YXRlW2Rpci0xXTsKKyAgICAgICAg aWYgKHN0YXRlID09IHhGQUlMRUQpCisgICAgICAgICAgICBzdGF0ZSA9IElOX1BST0dSRVNTOwor ICAgICAgICBlbHNlIGlmICgoc3RhdGUgJiBOT19TRU5EX0lWKSA9PSAwKQorICAgICAgICAgICAg YnJlYWs7CisKKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAgICAgICBpZiAoIWZicC0+dmFsaWRrZXkp IHsKKyAgICAgICAgICAgIGZicC0+bmVlZF9zdGFydCA9IDE7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorI2Vsc2UgLyogTUlUX0NVUlJFTlQgKi8KKyAgICAgICAgaWYgKCFWQUxJREtF WShmYnAtPmtyYmRlc19rZXkpKSB7CisgICAgICAgICAgICBmYnAtPm5lZWRfc3RhcnQgPSAxOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLwor ICAgICAgICBzdGF0ZSAmPSB+Tk9fU0VORF9JVjsKKyAgICAgICAgc3RhdGUgfD0gTk9fUkVDVl9J VjsKKyAgICAgICAgLyoKKyAgICAgICAgKiBDcmVhdGUgYSByYW5kb20gZmVlZCBhbmQgc2VuZCBp dCBvdmVyLgorICAgICAgICAqLworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAgICAgIHsKKyAgICAg ICAgICAgIGtyYjVfZGF0YSBkOworICAgICAgICAgICAga3JiNV9lcnJvcl9jb2RlIGNvZGU7CisK KyAgICAgICAgICAgIGQuZGF0YSA9IGZicC0+dGVtcF9mZWVkOworICAgICAgICAgICAgZC5sZW5n dGggPSBzaXplb2YoZmJwLT50ZW1wX2ZlZWQpOworCisjaWZkZWYgQ1JZUFRfRExMCisgICAgICAg ICAgICBpZiAoY29kZSA9IGtyYjVfY19yYW5kb21fbWFrZV9vY3RldHMoKnBfazVfY29udGV4dCwm ZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuKHhGQUlMRUQpOworI2Vsc2UgLyogQ1JZUFRfRExM ICovCisgICAgICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19yYW5kb21fbWFrZV9vY3RldHMoazVf Y29udGV4dCwmZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuKHhGQUlMRUQpOworI2VuZGlmIC8q IENSWVBUX0RMTCAqLworICAgICAgICB9CisKKyNlbHNlIC8qIE1JVF9DVVJSRU5UICovCisgICAg ICAgIGRlc19uZXdfcmFuZG9tX2tleShmYnAtPnRlbXBfZmVlZCk7CisgICAgICAgIGRlc19lY2Jf ZW5jcnlwdChmYnAtPnRlbXBfZmVlZCwgZmJwLT50ZW1wX2ZlZWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgZmJwLT5rcmJkZXNfc2NoZWQsIDEpOworI2VuZGlmIC8qIE1JVF9DVVJSRU5UICov CisgICAgICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOworICAgICAgICAqcCsrID0gRU5DUllQVF9J UzsKKyAgICAgICAgcCsrOworICAgICAgICAqcCsrID0gRkI2NF9JVjsKKyAgICAgICAgZm9yICh4 ID0gMDsgeCA8IHNpemVvZihCbG9jayk7ICsreCkgeworICAgICAgICAgICAgaWYgKCggKnArKyA9 IGZicC0+dGVtcF9mZWVkW3hdKSA9PSBJQUMpCisgICAgICAgICAgICAgICAgKnArKyA9IElBQzsK KyAgICAgICAgfQorICAgICAgICAqcCsrID0gSUFDOworICAgICAgICAqcCsrID0gU0U7CisKKyAg ICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgICAgICBpbnQg aTsKKyAgICAgICAgICAgIHNwcmludGYodG5fbXNnLAorICAgICAgICAgICAgICAgICAgICAgIlRF TE5FVCBTRU5UIFNCICVzIElTICVzIEZCNjRfSVYgIiwKKyAgICAgICAgICAgICAgICAgICAgIFRF TE9QVChmYnAtPmZiX2ZlZWRbMl0pLAorICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZV9uYW1l c1tmYnAtPmZiX2ZlZWRbNF1dKTsgLyogc2FmZSAqLworICAgICAgICAgICAgdG5faGV4KChDSEFS ICopdG5fbXNnLFROX01TR19MRU4sJmZicC0+ZmJfZmVlZFs2XSwKKwkJKHAtZmJwLT5mYl9mZWVk KS0yLTYpOworICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVO KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgaWYg KHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNpZmRlZiBP UzIKKyAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Cisj ZW5kaWYKKyAgICAgICAgdHRvbChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOworI2lm ZGVmIE9TMgorICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICBi cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oeEZBSUxFRCk7CisgICAgfQorICAg IHJldHVybihmYnAtPnN0YXRlW2Rpci0xXSA9IHN0YXRlKTsKK30KKworLyoKKyAqIFJldHVybnM6 CisgKiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMgZG9uZSwgZW5jcnlwdGlv biBub3QgcmVhZHkuCisgKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0aWFsIG5lZ290aWF0aW9u IGFsbCBkb25lLgorICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3RpYXRpb24gbm90IGRvbmUg eWV0LgorICovCitpbnQKK2NmYjY0X2lzKGRhdGEsIGNudCkKKyAgICB1bnNpZ25lZCBjaGFyICpk YXRhOworICAgIGludCBjbnQ7Cit7CisgICAgcmV0dXJuKGZiNjRfaXMoZGF0YSwgY250LCAmZGVz X2ZiW0NGQl0pKTsKK30KKworaW50CitvZmI2NF9pcyhkYXRhLCBjbnQpCisgICAgdW5zaWduZWQg Y2hhciAqZGF0YTsKKyAgICBpbnQgY250OworeworICAgIHJldHVybihmYjY0X2lzKGRhdGEsIGNu dCwgJmRlc19mYltPRkJdKSk7Cit9CisKK2ludAorZmI2NF9pcyhkYXRhLCBjbnQsIGZicCkKKyAg ICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7CisgICAgc3RydWN0IGRlc19mYiAq ZmJwOworeworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgcmVnaXN0ZXIgaW50IHN0YXRlID0g ZmJwLT5zdGF0ZVtESVJfREVDUllQVC0xXTsKKworICAgIGlmIChjbnQtLSA8IDEpCisgICAgICAg IGdvdG8gZmFpbHVyZTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmICghVEVMT1BUX1NCKFRFTE9Q VF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQorI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgIHN3aXRjaCAoKmRhdGErKykgeworICAgIGNhc2UgRkI2NF9JVjoKKyAgICAgICAgaWYgKGNu dCAhPSBzaXplb2YoQmxvY2spKSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChlbmNy eXB0X2RlYnVnX21vZGUpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJDRkI2NDogaW5pdGlhbCB2 ZWN0b3IgZmFpbGVkIG9uIHNpemVcclxuIik7CisjZW5kaWYKKyAgICAgICAgICAgIHN0YXRlID0g eEZBSUxFRDsKKyAgICAgICAgICAgIGdvdG8gZmFpbHVyZTsKKyAgICAgICAgfQorCisjaWZkZWYg REVCVUcKKyAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICAgICAgcHJp bnRmKCJDRkI2NDogaW5pdGlhbCB2ZWN0b3IgcmVjZWl2ZWRcclxuIik7CisgICAgICAgICAgICBw cmludGYoIkluaXRpYWxpemluZyBEZWNyeXB0IHN0cmVhbVxyXG4iKTsKKyAgICAgICAgfQorI2Vu ZGlmCisgICAgICAgIGZiNjRfc3RyZWFtX2l2KCh2b2lkICopZGF0YSwgJmZicC0+c3RyZWFtc1tE SVJfREVDUllQVC0xXSk7CisKKyAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7CisgICAgICAg ICpwKysgPSBFTkNSWVBUX1JFUExZOworICAgICAgICBwKys7CisgICAgICAgICpwKysgPSBGQjY0 X0lWX09LOworICAgICAgICAqcCsrID0gSUFDOworICAgICAgICAqcCsrID0gU0U7CisKKyAgICAg ICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgICAgICBpbnQgaTsK KyAgICAgICAgICAgIHNwcmludGYodG5fbXNnLAorICAgICAgICAgICAgICAgICAgICAgIlRFTE5F VCBTRU5UIFNCICVzIFJFUExZICVzIEZCNjRfSVZfT0sgIiwKKyAgICAgICAgICAgICAgICAgICAg IFRFTE9QVChmYnAtPmZiX2ZlZWRbMl0pLAorICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZV9u YW1lc1tmYnAtPmZiX2ZlZWRbNF1dKTsgLyogc2FmZSAqLworICAgICAgICAgICAgdG5faGV4KChD SEFSICopdG5fbXNnLFROX01TR19MRU4sJmZicC0+ZmJfZmVlZFs2XSwKKwkJKHAtZmJwLT5mYl9m ZWVkKS0yLTYpOworICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0df TEVOKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNpZmRl ZiBPUzIKKyAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7 CisjZW5kaWYKKyAgICAgICAgdHRvbChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOwor I2lmZGVmIE9TMgorICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAg ICBzdGF0ZSA9IElOX1BST0dSRVNTOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6Cisj aWYgMAorICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAgICAgICAgICBwcmlu dGYoIlVua25vd24gb3B0aW9uIHR5cGU6ICVkXHJcbiIsICooZGF0YS0xKSk7CisgICAgICAgICAg ICBwcmludGYoIlxyXG4iKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIC8qIEZBTEwgVEhS T1VHSCAqLworICAgICAgZmFpbHVyZToKKyAgICAgICAgLyoKKyAgICAgICAgKiBXZSBmYWlsZWQu ICBTZW5kIGFuIEZCNjRfSVZfQkFEIG9wdGlvbgorICAgICAgICAqIHRvIHRoZSBvdGhlciBzaWRl IHNvIGl0IHdpbGwga25vdyB0aGF0CisgICAgICAgICogdGhpbmdzIGZhaWxlZC4KKyAgICAgICAg Ki8KKyAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7CisgICAgICAgICpwKysgPSBFTkNSWVBU X1JFUExZOworICAgICAgICBwKys7CisgICAgICAgICpwKysgPSBGQjY0X0lWX0JBRDsKKyAgICAg ICAgKnArKyA9IElBQzsKKyAgICAgICAgKnArKyA9IFNFOworCisgICAgICAgIGlmIChkZWJsb2cg fHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBz cHJpbnRmKHRuX21zZywKKyAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAlcyBS RVBMWSAlcyBGQjY0X0lWX0JBRCAiLAorICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKGZicC0+ ZmJfZmVlZFsyXSksCisgICAgICAgICAgICAgICAgICAgICBlbmN0eXBlX25hbWVzW2ZicC0+ZmJf ZmVlZFs0XV0pOyAvKiBzYWZlICovCisgICAgICAgICAgICB0bl9oZXgoKENIQVIgKil0bl9tc2cs VE5fTVNHX0xFTiwmZmJwLT5mYl9mZWVkWzZdLAorCQkocC1mYnAtPmZiX2ZlZWQpLTItNik7Cisg ICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0UiLFROX01TR19MRU4pOworICAgICAg ICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAgICBpZiAodG5fZGViIHx8 IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAg ICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAg ICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7CisjaWZkZWYgT1MyCisg ICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAg IH0KKyAgICByZXR1cm4oZmJwLT5zdGF0ZVtESVJfREVDUllQVC0xXSA9IHN0YXRlKTsKK30KKwor LyoKKyAqIFJldHVybnM6CisgKiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMg ZG9uZSwgZW5jcnlwdGlvbiBub3QgcmVhZHkuCisgKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0 aWFsIG5lZ290aWF0aW9uIGFsbCBkb25lLgorICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3Rp YXRpb24gbm90IGRvbmUgeWV0LgorICovCitpbnQKK2NmYjY0X3JlcGx5KGRhdGEsIGNudCkKKyAg ICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7Cit7CisgICAgcmV0dXJuKGZiNjRf cmVwbHkoZGF0YSwgY250LCAmZGVzX2ZiW0NGQl0pKTsKK30KK2ludAorb2ZiNjRfcmVwbHkoZGF0 YSwgY250KQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgaW50IGNudDsKK3sKKyAgICBy ZXR1cm4oZmI2NF9yZXBseShkYXRhLCBjbnQsICZkZXNfZmJbT0ZCXSkpOworfQorCisKK2ludAor ZmI2NF9yZXBseShkYXRhLCBjbnQsIGZicCkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAg IGludCBjbnQ7CisgICAgc3RydWN0IGRlc19mYiAqZmJwOworeworICAgIHJlZ2lzdGVyIGludCBz dGF0ZSA9IGZicC0+c3RhdGVbRElSX0VOQ1JZUFQtMV07CisKKyAgICBpZiAoY250LS0gPCAxKQor ICAgICAgICBnb3RvIGZhaWx1cmU7CisKKyAgICBzd2l0Y2ggKCpkYXRhKyspIHsKKyAgICBjYXNl IEZCNjRfSVZfT0s6CisgICAgICAgIGZiNjRfc3RyZWFtX2l2KGZicC0+dGVtcF9mZWVkLCAmZmJw LT5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKKyAgICAgICAgaWYgKHN0YXRlID09IHhGQUlMRUQp CisgICAgICAgICAgICBzdGF0ZSA9IElOX1BST0dSRVNTOworICAgICAgICBzdGF0ZSAmPSB+Tk9f UkVDVl9JVjsKKyAgICAgICAgZW5jcnlwdF9zZW5kX2tleWlkKERJUl9FTkNSWVBULCAodW5zaWdu ZWQgY2hhciAqKSJcMCIsIDEsIDEpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRkI2NF9J Vl9CQUQ6CisgICAgICAgIG1lbXNldChmYnAtPnRlbXBfZmVlZCwgMCwgc2l6ZW9mKEJsb2NrKSk7 CisgICAgICAgIGZiNjRfc3RyZWFtX2l2KGZicC0+dGVtcF9mZWVkLCAmZmJwLT5zdHJlYW1zW0RJ Ul9FTkNSWVBULTFdKTsKKyAgICAgICAgc3RhdGUgPSB4RkFJTEVEOworICAgICAgICBicmVhazsK KworICAgIGRlZmF1bHQ6CisjaWYgMAorICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7 CisgICAgICAgICAgICBwcmludGYoIlVua25vd24gb3B0aW9uIHR5cGU6ICVkXHJcbiIsIGRhdGFb LTFdKTsKKyAgICAgICAgICAgIHByaW50ZigiXHJcbiIpOworICAgICAgICB9CisjZW5kaWYKKyAg ICAgICAgLyogRkFMTCBUSFJPVUdIICovCisgICAgICBmYWlsdXJlOgorICAgICAgICBzdGF0ZSA9 IHhGQUlMRUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4oZmJwLT5zdGF0ZVtE SVJfRU5DUllQVC0xXSA9IHN0YXRlKTsKK30KKworaW50CitjZmI2NF9zZXNzaW9uKGtleSwgc2Vy dmVyKQorICAgIFNlc3Npb25fS2V5ICprZXk7CisgICAgaW50IHNlcnZlcjsKK3sKKyAgICByZXR1 cm4oZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyLCAmZGVzX2ZiW0NGQl0pKTsKK30KKworaW50Citv ZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyKQorICAgIFNlc3Npb25fS2V5ICprZXk7CisgICAgaW50 IHNlcnZlcjsKK3sKKyAgICByZXR1cm4oZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyLCAmZGVzX2Zi W09GQl0pKTsKK30KKworc3RhdGljIGludAorZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyLCBmYnAp CisgICAgU2Vzc2lvbl9LZXkgKmtleTsKKyAgICBpbnQgc2VydmVyOworICAgIHN0cnVjdCBkZXNf ZmIgKmZicDsKK3sKKyAgICBpbnQgcmM9MDsKKyAgICBpbnQgdXNlMmtleXM7CisgICAgc3RydWN0 IGRlc19zdGluZm8gKiBzX3N0cmVhbTsKKyAgICBzdHJ1Y3QgZGVzX3N0aW5mbyAqIGNfc3RyZWFt OworCisgICAgaWYoc2VydmVyKSB7CisgICAgICAgIHNfc3RyZWFtID0gJmZicC0+c3RyZWFtc1tE SVJfRU5DUllQVC0xXTsKKyAgICAgICAgY19zdHJlYW0gPSAmZmJwLT5zdHJlYW1zW0RJUl9ERUNS WVBULTFdOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc19zdHJlYW0gPSAmZmJwLT5zdHJl YW1zW0RJUl9ERUNSWVBULTFdOworICAgICAgICBjX3N0cmVhbSA9ICZmYnAtPnN0cmVhbXNbRElS X0VOQ1JZUFQtMV07CisgICAgfQorCisgICAgaWYgKCFrZXkgfHwga2V5LT5sZW5ndGggPCBzaXpl b2YoQmxvY2spKSB7CisgICAgICAgIENIQVIgYnVmWzgwXTsKKyAgICAgICAgc3ByaW50ZigoY2hh ciAqKWJ1ZiwiQ2FuJ3Qgc2V0IERFUyBzZXNzaW9uIGtleSAoJWQgPCAlZCkiLAorICAgICAgICAg ICAgICAgIGtleSA/IGtleS0+bGVuZ3RoIDogMCwgc2l6ZW9mKEJsb2NrKSk7ICAgICAgICAgIC8q IHNhZmUgKi8KKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKQor ICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLGJ1Zik7CisjZW5kaWYKKyAgICAgICAgZGVidWco RjExMCwiZmI2NF9zZXNzaW9uIixidWYsMCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQor ICAgIHVzZTJrZXlzID0gKGtleS0+dHlwZSA9PSBTS19ERVMgfHwKKyAgICAgICAgICAgICAgICAg a2V5LT5sZW5ndGggPCAyICogc2l6ZW9mKEJsb2NrKSkgPyAwIDogMTsKKyNpZmRlZiBNSVRfQ1VS UkVOVAorICAgIGlmKHVzZTJrZXlzKSB7CisgICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtl eWJ5dGVzLAorICAgICAgICAgICAgICAgICAodm9pZCAqKSAoa2V5LT5kYXRhICsgc2l6ZW9mKEJs b2NrKSksIHNpemVvZihCbG9jaykpOworICAgICAgICBkZXNfZml4dXBfa2V5X3Bhcml0eShmYnAt Pik7CisgICAgICAgIGZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRlc19rZXksIHNfc3RyZWFtKTsK KyAgICB9CisKKyAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXksICh2b2lkICopa2V5 LT5kYXRhLCBzaXplb2YoQmxvY2spKTsKKyAgICBpZiAoa2V5LT50eXBlICE9IFNLX0RFUykKKyAg ICAgICAgZGVzX2ZpeHVwX2tleV9wYXJpdHkoZmJwLT5rcmJkZXNfa2V5KTsKKworICAgIGlmKCF1 c2Uya2V5cykKKyAgICAgICAgZmI2NF9zdHJlYW1fa2V5KGZicC0+a3JiZGVzX2tleSwgc19zdHJl YW0pOworICAgIGZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRlc19rZXksIGNfc3RyZWFtKTsKKyAg ICBmYnAtPnZhbGlka2V5ID0gMTsKKworICAgIGZiNjRfc3RyZWFtX2tleShrZXktPmRhdGEsICZm YnAtPnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOworICAgIGZiNjRfc3RyZWFtX2tleShrZXktPmRh dGEsICZmYnAtPnN0cmVhbXNbRElSX0RFQ1JZUFQtMV0pOworI2Vsc2UgLyogTUlUX0NVUlJFTlQg Ki8KKyAgICBpZih1c2Uya2V5cykgeworICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJk ZXNfa2V5LAorICAgICAgICAgICAgICAgICAodm9pZCAqKSAoa2V5LT5kYXRhICsgc2l6ZW9mKEJs b2NrKSksIHNpemVvZihCbG9jaykpOworICAgICAgICBkZXNfZml4dXBfa2V5X3Bhcml0eShmYnAt PmtyYmRlc19rZXkpOworICAgICAgICBmYjY0X3N0cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBz X3N0cmVhbSk7CisgICAgfQorCisgICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5LCAo dm9pZCAqKWtleS0+ZGF0YSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgaWYgKGtleS0+dHlwZSAhPSBT S19ERVMpCisgICAgICAgIGRlc19maXh1cF9rZXlfcGFyaXR5KGZicC0+a3JiZGVzX2tleSk7CisK KyAgICBpZighdXNlMmtleXMpCisgICAgICAgIGZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRlc19r ZXksIHNfc3RyZWFtKTsKKyAgICBmYjY0X3N0cmVhbV9rZXkoZmJwLT5rcmJkZXNfa2V5LCBjX3N0 cmVhbSk7CisKKyAgICBpZiAoZmJwLT5vbmNlID09IDApIHsKKyAgICAgICAgZGVzX3NldF9yYW5k b21fZ2VuZXJhdG9yX3NlZWQoZmJwLT5rcmJkZXNfa2V5KTsKKyAgICAgICAgZmJwLT5vbmNlID0g MTsKKyAgICB9CisKKyAgICBtZW1zZXQoZmJwLT5rcmJkZXNfc2NoZWQsMCxzaXplb2YoU2NoZWR1 bGUpKTsKKyAgICBja2hleGR1bXAoImZiNjRfc2Vzc2lvbl9rZXkiLGZicC0+a3JiZGVzX2tleSw4 KTsKKworICAgIHJjID0gZGVzX2tleV9zY2hlZChmYnAtPmtyYmRlc19rZXksIGZicC0+a3JiZGVz X3NjaGVkKTsKKyAgICBpZiAoIHJjID09IC0xICkgeworICAgICAgICBwcmludGYoIj9JbnZhbGlk IERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uXG4iKTsKKyAgICAgICAgZGVidWcoRjEx MCwiZmI2NF9zZXNzaW9uX2tleSIsCisgICAgICAgICAgICAgICAiaW52YWxpZCBERVMgS2V5IHNw ZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7CisgICAgfSBlbHNlIGlmICggcmMgPT0gLTIgKSB7 CisgICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb25c biIpOworICAgICAgICBkZWJ1ZyhGMTEwLCJmYjY0X3Nlc3Npb25fa2V5IiwKKyAgICAgICAgICAg ICAgICJ3ZWFrIERFUyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKKyAgICB9IGVs c2UgaWYgKCByYyAhPSAwICkgeworICAgICAgICBwcmludGYoIj9LZXkgU2NoZWR1bGUgbm90IGNy ZWF0ZWQgYnkgZW5jcnlwdGlvblxuIik7CisgICAgICAgIGRlYnVnKEYxMTAsImZiNjRfc2Vzc2lv bl9rZXkiLAorICAgICAgICAgICAgICAgIktleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBlbmNy eXB0aW9uIiwwKTsKKyAgICB9CisKKyAgICBja2hleGR1bXAoImZiNjRfc2Vzc2lvbl9rZXkgc2No ZWR1bGUiLGZicC0+a3JiZGVzX3NjaGVkLDgqMTYpOworI2VuZGlmIC8qIE1JVF9DVVJSRU5UICov CisgICAgLyoKKyAgICAqIE5vdyBsb29rIHRvIHNlZSBpZiBrcmJkZXNfc3RhcnQoKSB3YXMgd2Fz IHdhaXRpbmcgZm9yCisgICAgKiB0aGUga2V5IHRvIHNob3cgdXAuICBJZiBzbywgZ28gYWhlYWQg YW4gY2FsbCBpdCBub3cKKyAgICAqIHRoYXQgd2UgaGF2ZSB0aGUga2V5LgorICAgICovCisgICAg aWYgKGZicC0+bmVlZF9zdGFydCkgeworICAgICAgICBmYnAtPm5lZWRfc3RhcnQgPSAwOworICAg ICAgICBmYjY0X3N0YXJ0KGZicCwgRElSX0VOQ1JZUFQsIHNlcnZlcik7CisgICAgfQorICAgIHJl dHVybigwKTsKK30KKworLyoKKyAqIFdlIG9ubHkgYWNjZXB0IGEga2V5aWQgb2YgMC4gIElmIHdl IGdldCBhIGtleWlkIG9mCisgKiAwLCB0aGVuIG1hcmsgdGhlIHN0YXRlIGFzIFNVQ0NFU1MuCisg Ki8KK2ludAorY2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCkKKyAgICBpbnQgZGlyLCAqbGVucDsK KyAgICB1bnNpZ25lZCBjaGFyICprcDsKK3sKKyAgICByZXR1cm4oZmI2NF9rZXlpZChkaXIsIGtw LCBsZW5wLCAmZGVzX2ZiW0NGQl0pKTsKK30KKworaW50CitvZmI2NF9rZXlpZChkaXIsIGtwLCBs ZW5wKQorICAgIGludCBkaXIsICpsZW5wOworICAgIHVuc2lnbmVkIGNoYXIgKmtwOworeworICAg IHJldHVybihmYjY0X2tleWlkKGRpciwga3AsIGxlbnAsICZkZXNfZmJbT0ZCXSkpOworfQorCitp bnQKK2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCwgZmJwKQorICAgIGludCBkaXIsICpsZW5wOwor ICAgIHVuc2lnbmVkIGNoYXIgKmtwOworICAgIHN0cnVjdCBkZXNfZmIgKmZicDsKK3sKKyAgICBy ZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0YXRlW2Rpci0xXTsKKworICAgIGlmICgqbGVucCAh PSAxIHx8ICgqa3AgIT0gJ1wwJykpIHsKKyAgICAgICAgKmxlbnAgPSAwOworICAgICAgICByZXR1 cm4oc3RhdGUpOworICAgIH0KKworICAgIGlmIChzdGF0ZSA9PSB4RkFJTEVEKQorICAgICAgICBz dGF0ZSA9IElOX1BST0dSRVNTOworCisgICAgc3RhdGUgJj0gfk5PX0tFWUlEOworCisgICAgcmV0 dXJuKGZicC0+c3RhdGVbZGlyLTFdID0gc3RhdGUpOworfQorCisjaWYgMAordm9pZAorZmI2NF9w cmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVuLCB0eXBlKQorICAgIHVuc2lnbmVkIGNoYXIg KmRhdGEsICpidWYsICp0eXBlOworICAgIGludCBjbnQsIGJ1ZmxlbjsKK3sKKyAgICBjaGFyIGxi dWZbNjRdOworICAgIHJlZ2lzdGVyIGludCBpOworICAgIGNoYXIgKmNwOworCisgICAgYnVmW2J1 Zmxlbi0xXSA9ICdcMCc7ICAgICAgICAgICAgICAgLyogbWFrZSBzdXJlIGl0J3MgTlVMTCB0ZXJt aW5hdGVkICovCisgICAgYnVmbGVuIC09IDE7CisKKyAgICBzd2l0Y2goZGF0YVsyXSkgeworICAg IGNhc2UgRkI2NF9JVjoKKyAgICAgICAgc3ByaW50ZihsYnVmLCAiJXNfSVYiLCB0eXBlKTsKKyAg ICAgICAgY3AgPSBsYnVmOworICAgICAgICBnb3RvIGNvbW1vbjsKKworICAgIGNhc2UgRkI2NF9J Vl9PSzoKKyAgICAgICAgc3ByaW50ZihsYnVmLCAiJXNfSVZfT0siLCB0eXBlKTsKKyAgICAgICAg Y3AgPSBsYnVmOworICAgICAgICBnb3RvIGNvbW1vbjsKKworICAgIGNhc2UgRkI2NF9JVl9CQUQ6 CisgICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX0lWX0JBRCIsIHR5cGUpOworICAgICAgICBjcCA9 IGxidWY7CisgICAgICAgIGdvdG8gY29tbW9uOworCisgICAgY2FzZSBGQjY0X0NIQUxMRU5HRToK KyAgICAgICAgc3ByaW50ZihsYnVmLCAiJXNfQ0hBTExFTkdFIiwgdHlwZSk7CisgICAgICAgIGNw ID0gbGJ1ZjsKKyAgICAgICAgZ290byBjb21tb247CisKKyAgICBjYXNlIEZCNjRfUkVTUE9OU0U6 CisgICAgICAgIHNwcmludGYobGJ1ZiwgIiVzX1JFU1BPTlNFIiwgdHlwZSk7CisgICAgICAgIGNw ID0gbGJ1ZjsKKyAgICAgICAgZ290byBjb21tb247CisKKyAgICBkZWZhdWx0OgorICAgICAgICBz cHJpbnRmKGxidWYsICIgJWQgKHVua25vd24pIiwgZGF0YVsyXSk7CisgICAgICAgIGNwID0gbGJ1 ZjsKKyAgICAgIGNvbW1vbjoKKyAgICAgICAgZm9yICg7IChidWZsZW4gPiAwKSAmJiAoKmJ1ZiA9 ICpjcCsrKTsgYnVmKyspCisgICAgICAgICAgICBidWZsZW4tLTsKKyAgICAgICAgZm9yIChpID0g MzsgaSA8IGNudDsgaSsrKSB7CisgICAgICAgICAgICBzcHJpbnRmKGxidWYsICIgJWQiLCBkYXRh W2ldKTsKKyAgICAgICAgICAgIGZvciAoY3AgPSBsYnVmOyAoYnVmbGVuID4gMCkgJiYgKCpidWYg PSAqY3ArKyk7IGJ1ZisrKQorICAgICAgICAgICAgICAgIGJ1Zmxlbi0tOworICAgICAgICB9Cisg ICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZAorY2ZiNjRfcHJpbnRzdWIoZGF0YSwgY250 LCBidWYsIGJ1ZmxlbikKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmOworICAgIGludCBj bnQsIGJ1ZmxlbjsKK3sKKyAgICBmYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4s ICJDRkI2NCIpOworfQorCit2b2lkCitvZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVm bGVuKQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpidWY7CisgICAgaW50IGNudCwgYnVmbGVu OworeworICAgIGZiNjRfcHJpbnRzdWIoZGF0YSwgY250LCBidWYsIGJ1ZmxlbiwgIk9GQjY0Iik7 Cit9CisjZW5kaWYKKwordm9pZAorZmI2NF9zdHJlYW1faXYoc2VlZCwgc3RwKQorICAgIEJsb2Nr IHNlZWQ7CisgICAgcmVnaXN0ZXIgc3RydWN0IGRlc19zdGluZm8gKnN0cDsKK3sKKyAgICBpbnQg cmM9MDsKKworICAgIG1lbWNweShzdHAtPnN0cl9pdiwgICAgIHNlZWQsIHNpemVvZihCbG9jaykp OworICAgIG1lbWNweShzdHAtPnN0cl9vdXRwdXQsIHNlZWQsIHNpemVvZihCbG9jaykpOworCisg ICAgbWVtc2V0KHN0cC0+c3RyX3NjaGVkLDAsc2l6ZW9mKFNjaGVkdWxlKSk7CisKKyAgICBja2hl eGR1bXAoImZiNjRfc3RyZWFtX2l2IixzdHAtPnN0cl9pa2V5LDgpOworCisjaWZuZGVmIE1JVF9D VVJSRU5UCisgICAgcmMgPSBkZXNfa2V5X3NjaGVkKHN0cC0+c3RyX2lrZXksIHN0cC0+c3RyX3Nj aGVkKTsKKyAgICBpZiAoIHJjID09IC0xICkgeworICAgICAgICBwcmludGYoIj9JbnZhbGlkIERF UyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uXHJcbiIpOworICAgICAgICBkZWJ1ZyhGMTEw LCJmYjY0X3N0cmVhbV9pdiIsCisgICAgICAgICAgICAgICAiaW52YWxpZCBERVMgS2V5IHNwZWNp ZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7CisgICAgfSBlbHNlIGlmICggcmMgPT0gLTIgKSB7Cisg ICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cclxu Iik7CisgICAgICAgIGRlYnVnKEYxMTAsImZiNjRfc3RyZWFtX2l2IiwKKyAgICAgICAgICAgICAg ICJ3ZWFrIERFUyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKKyAgICB9IGVsc2Ug aWYgKCByYyAhPSAwICkgeworICAgICAgICBwcmludGYoIj9LZXkgU2NoZWR1bGUgbm90IGNyZWF0 ZWQgYnkgZW5jcnlwdGlvblxyXG4iKTsKKyAgICAgICAgZGVidWcoRjExMCwiZmI2NF9zdHJlYW1f aXYiLAorICAgICAgICAgICAgICAgIktleSBTY2hlZHVsZSBub3QgY3JlYXRlZCBieSBlbmNyeXB0 aW9uIiwwKTsKKyAgICB9CisgICAgY2toZXhkdW1wKCJmYjY0X3N0cmVhbV9pdiBzY2hlZHVsZSIs c3RwLT5zdHJfc2NoZWQsOCoxNik7CisjZW5kaWYgLyogTUlUX0NVUlJFTlQgKi8KKworICAgIHN0 cC0+c3RyX2luZGV4ID0gc2l6ZW9mKEJsb2NrKTsKK30KKwordm9pZAorZmI2NF9zdHJlYW1fa2V5 KGtleSwgc3RwKQorICAgIEJsb2NrIGtleTsKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzX3N0aW5m byAqc3RwOworeworICAgIGludCByYyA9IDA7CisKKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAgIG1l bWNweShzdHAtPnN0cl9rZXlieXRlcywga2V5LCBzaXplb2YoQmxvY2spKTsKKyAgICBzdHAtPnN0 cl9rZXkubGVuZ3RoID0gODsKKyAgICBzdHAtPnN0cl9rZXkuY29udGVudHMgPSBzdHAtPnN0cl9r ZXlieXRlczsKKyAgICAvKiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIGNvZGUgdXNlcyBk ZXMgZWNiIG1vZGUsIGJ1dAorICAgIGl0IG9ubHkgZXZlciBkb2VzIG9uZSBibG9jayBhdCBhIHRp bWUuICBjYmMgd2l0aCBhIHplcm8gaXYKKyAgICBpcyBpZGVudGljYWwgKi8KKyAgICBzdHAtPnN0 cl9rZXkuZW5jdHlwZSA9IEVOQ1RZUEVfREVTX0NCQ19SQVc7CisjZWxzZSAvKiBNSVRfQ1VSUkVO VCAqLworICAgIG1lbWNweShzdHAtPnN0cl9pa2V5LCBrZXksIHNpemVvZihCbG9jaykpOworCisg ICAgbWVtc2V0KHN0cC0+c3RyX3NjaGVkLDAsc2l6ZW9mKFNjaGVkdWxlKSk7CisKKyAgICBja2hl eGR1bXAoImZiNjRfc3RyZWFtX2tleSIsa2V5LDgpOworCisgICAgcmMgPSBkZXNfa2V5X3NjaGVk KGtleSwgc3RwLT5zdHJfc2NoZWQpOworICAgIGlmICggcmMgPT0gLTEgKSB7CisgICAgICAgIHBy aW50ZigiP0ludmFsaWQgREVTIGtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cclxuIik7Cisg ICAgICAgIGRlYnVnKEYxMTAsImZiNjRfc3RyZWFtX2tleSIsCisgICAgICAgICAgICAgICAiaW52 YWxpZCBERVMgS2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7CisgICAgfSBlbHNlIGlm ICggcmMgPT0gLTIgKSB7CisgICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtleSBzcGVjaWZpZWQg Zm9yIGVuY3J5cHRpb25cclxuIik7CisgICAgICAgIGRlYnVnKEYxMTAsImZiNjRfc3RyZWFtX2tl eSIsCisgICAgICAgICAgICAgICAid2VhayBERVMgS2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlv biIsMCk7CisgICAgfSBlbHNlIGlmICggcmMgIT0gMCApIHsKKyAgICAgICAgcHJpbnRmKCI/S2V5 IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVuY3J5cHRpb25cclxuIik7CisgICAgICAgIGRlYnVn KEYxMTAsImZiNjRfc3RyZWFtX2tleSIsCisgICAgICAgICAgICAgICAiS2V5IFNjaGVkdWxlIG5v dCBjcmVhdGVkIGJ5IGVuY3J5cHRpb24iLDApOworICAgIH0KKyAgICBja2hleGR1bXAoImZiNjRf c3RyZWFtX2tleSBzY2hlZHVsZSIsc3RwLT5zdHJfc2NoZWQsOCoxNik7CisjZW5kaWYgLyogTUlU X0NVUlJFTlQgKi8KKworICAgIG1lbWNweShzdHAtPnN0cl9vdXRwdXQsIHN0cC0+c3RyX2l2LCBz aXplb2YoQmxvY2spKTsKKworICAgIHN0cC0+c3RyX2luZGV4ID0gc2l6ZW9mKEJsb2NrKTsKK30K KworLyoKKyAqIERFUyA2NCBiaXQgQ2lwaGVyIEZlZWRiYWNrCisgKgorICogICAgIGtleSAtLS0+ Ky0tLS0tKworICogICAgICAgICAgKy0+fCBERVMgfC0tKworICogICAgICAgICAgfCAgKy0tLS0t KyAgfAorICogICAgICAgICAgfCAgICAgICAgICAgdgorICogIElOUFVUIC0tKC0tLS0tLS0tLT4o KykrLS0tPiBEQVRBCisgKiAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICst LS0tLS0tLS0tLS0tKworICoKKyAqCisgKiBHaXZlbjoKKyAqICAgICAgaVY6IEluaXRpYWwgdmVj dG9yLCA2NCBiaXRzICg4IGJ5dGVzKSBsb25nLgorICogICAgICBEbjogdGhlIG50aCBjaHVuayBv ZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBkYXRhIHRvIGVuY3J5cHQgKGRlY3J5cHQpLgorICogICAg ICBPbjogdGhlIG50aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBlbmNyeXB0ZWQgKGRl Y3J5cHRlZCkgb3V0cHV0LgorICoKKyAqICAgICAgVjAgPSBERVMoaVYsIGtleSkKKyAqICAgICAg T24gPSBEbiBeIFZuCisgKiAgICAgIFYobisxKSA9IERFUyhPbiwga2V5KQorICovCisKK3ZvaWQK K2NmYjY0X2VuY3J5cHQocywgYykKKyAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpzOworICAg IGludCBjOworeworICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfc3RpbmZvICpzdHAgPSAmZGVzX2Zi W0NGQl0uc3RyZWFtc1tESVJfRU5DUllQVC0xXTsKKyAgICByZWdpc3RlciBpbnQgaW5kZXg7CisK KyAgICBpbmRleCA9IHN0cC0+c3RyX2luZGV4OworICAgIHdoaWxlIChjLS0gPiAwKSB7CisgICAg ICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxvY2spKSB7CisgICAgICAgICAgICBCbG9jayBiOwor I2lmZGVmIE1JVF9DVVJSRU5UCisgICAgICAgICAgICBlY2JfZW5jcnlwdChzdHAsIHN0cC0+c3Ry X291dHB1dCwgYik7CisjZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLworICAgICAgICAgICAgZGVzX2Vj Yl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwgc3RwLT5zdHJfc2NoZWQsIDEpOworI2VuZGlm IC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgICAgICBtZW1jcHkoc3RwLT5zdHJfZmVlZCxiLHNp emVvZihCbG9jaykpOworICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICB9CisKKyAgICAg ICAgLyogT24gZW5jcnlwdGlvbiwgd2Ugc3RvcmUgKGZlZWQgXiBkYXRhKSB3aGljaCBpcyBjeXBo ZXIgKi8KKyAgICAgICAgKnMgPSBzdHAtPnN0cl9vdXRwdXRbaW5kZXhdID0gKHN0cC0+c3RyX2Zl ZWRbaW5kZXhdIF4gKnMpOworICAgICAgICBzKys7CisgICAgICAgIGluZGV4Kys7CisgICAgfQor ICAgIHN0cC0+c3RyX2luZGV4ID0gaW5kZXg7Cit9CisKK2ludAorY2ZiNjRfZGVjcnlwdChkYXRh KQorICAgIGludCBkYXRhOworeworICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXNfc3RpbmZvICpzdHAg PSAmZGVzX2ZiW0NGQl0uc3RyZWFtc1tESVJfREVDUllQVC0xXTsKKyAgICBpbnQgaW5kZXg7CisK KyAgICBpZiAoZGF0YSA9PSAtMSkgeworICAgICAgICAvKgorICAgICAgICAqIEJhY2sgdXAgb25l IGJ5dGUuICBJdCBpcyBhc3N1bWVkIHRoYXQgd2Ugd2lsbAorICAgICAgICAqIG5ldmVyIGJhY2sg dXAgbW9yZSB0aGFuIG9uZSBieXRlLiAgSWYgd2UgZG8sIHRoaXMKKyAgICAgICAgKiBtYXkgb3Ig bWF5IG5vdCB3b3JrLgorICAgICAgICAqLworICAgICAgICBpZiAoc3RwLT5zdHJfaW5kZXgpCisg ICAgICAgICAgICAtLXN0cC0+c3RyX2luZGV4OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQor CisgICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleCsrOworICAgIGlmIChpbmRleCA9PSBzaXplb2Yo QmxvY2spKSB7CisgICAgICAgIEJsb2NrIGI7CisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICAgICAg ZWNiX2VuY3J5cHQoc3RwLCBzdHAtPnN0cl9vdXRwdXQsIGIpOworI2Vsc2UgLyogTUlUX0NVUlJF TlQgKi8KKyAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwgc3RwLT5z dHJfc2NoZWQsIDEpOworI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgIG1lbWNweShz dHAtPnN0cl9mZWVkLCBiLCBzaXplb2YoQmxvY2spKTsKKyAgICAgICAgc3RwLT5zdHJfaW5kZXgg PSAxOyAgICAgLyogTmV4dCB0aW1lIHdpbGwgYmUgMSAqLworICAgICAgICBpbmRleCA9IDA7ICAg ICAgICAgICAgICAvKiBCdXQgbm93IHVzZSAwICovCisgICAgfQorCisgICAgLyogT24gZGVjcnlw dGlvbiB3ZSBzdG9yZSAoZGF0YSkgd2hpY2ggaXMgY3lwaGVyLiAqLworICAgIHN0cC0+c3RyX291 dHB1dFtpbmRleF0gPSBkYXRhOworICAgIHJldHVybihkYXRhIF4gc3RwLT5zdHJfZmVlZFtpbmRl eF0pOworfQorCisvKgorICogREVTIDY0IGJpdCBPdXRwdXQgRmVlZGJhY2sKKyAqCisgKiBrZXkg LS0tPistLS0tLSsKKyAqICAgICAgKy0+fCBERVMgfC0tKworICogICAgICB8ICArLS0tLS0rICB8 CisgKiAgICAgICstLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgdgorICogIElOUFVU IC0tLS0tLS0tPigrKSAtLS0tPiBEQVRBCisgKgorICogR2l2ZW46CisgKiAgICAgIGlWOiBJbml0 aWFsIHZlY3RvciwgNjQgYml0cyAoOCBieXRlcykgbG9uZy4KKyAqICAgICAgRG46IHRoZSBudGgg Y2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZGF0YSB0byBlbmNyeXB0IChkZWNyeXB0KS4K KyAqICAgICAgT246IHRoZSBudGggY2h1bmsgb2YgNjQgYml0cyAoOCBieXRlcykgb2YgZW5jcnlw dGVkIChkZWNyeXB0ZWQpIG91dHB1dC4KKyAqCisgKiAgICAgIFYwID0gREVTKGlWLCBrZXkpCisg KiAgICAgIFYobisxKSA9IERFUyhWbiwga2V5KQorICogICAgICBPbiA9IERuIF4gVm4KKyAqLwor dm9pZAorb2ZiNjRfZW5jcnlwdChzLCBjKQorICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKnM7 CisgICAgaW50IGM7Cit7CisgICAgcmVnaXN0ZXIgc3RydWN0IGRlc19zdGluZm8gKnN0cCA9ICZk ZXNfZmJbT0ZCXS5zdHJlYW1zW0RJUl9FTkNSWVBULTFdOworICAgIHJlZ2lzdGVyIGludCBpbmRl eDsKKworICAgIGluZGV4ID0gc3RwLT5zdHJfaW5kZXg7CisgICAgd2hpbGUgKGMtLSA+IDApIHsK KyAgICAgICAgaWYgKGluZGV4ID09IHNpemVvZihCbG9jaykpIHsKKyAgICAgICAgICAgIEJsb2Nr IGI7CisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICAgICAgICAgIGVjYl9lbmNyeXB0KHN0cCwgc3Rw LT5zdHJfZmVlZCwgYik7CisjZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLworICAgICAgICAgICAgZGVz X2VjYl9lbmNyeXB0KHN0cC0+c3RyX2ZlZWQsIGIsIHN0cC0+c3RyX3NjaGVkLCAxKTsKKyNlbmRp ZiAvKiBNSVRfQ1VSUkVOVCAqLworICAgICAgICAgICAgbWVtY3B5KHN0cC0+c3RyX2ZlZWQsYixz aXplb2YoQmxvY2spKTsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAg ICAqcysrIF49IHN0cC0+c3RyX2ZlZWRbaW5kZXhdOworICAgICAgICBpbmRleCsrOworICAgIH0K KyAgICBzdHAtPnN0cl9pbmRleCA9IGluZGV4OworfQorCitpbnQKK29mYjY0X2RlY3J5cHQoZGF0 YSkKKyAgICBpbnQgZGF0YTsKK3sKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzX3N0aW5mbyAqc3Rw ID0gJmRlc19mYltPRkJdLnN0cmVhbXNbRElSX0RFQ1JZUFQtMV07CisgICAgaW50IGluZGV4Owor CisgICAgaWYgKGRhdGEgPT0gLTEpIHsKKyAgICAgICAgLyoKKyAgICAgICAgKiBCYWNrIHVwIG9u ZSBieXRlLiAgSXQgaXMgYXNzdW1lZCB0aGF0IHdlIHdpbGwKKyAgICAgICAgKiBuZXZlciBiYWNr IHVwIG1vcmUgdGhhbiBvbmUgYnl0ZS4gIElmIHdlIGRvLCB0aGlzCisgICAgICAgICogbWF5IG9y IG1heSBub3Qgd29yay4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKHN0cC0+c3RyX2luZGV4KQor ICAgICAgICAgICAgLS1zdHAtPnN0cl9pbmRleDsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0K KworICAgIGluZGV4ID0gc3RwLT5zdHJfaW5kZXgrKzsKKyAgICBpZiAoaW5kZXggPT0gc2l6ZW9m KEJsb2NrKSkgeworICAgICAgICBCbG9jayBiOworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAgICAg IGVjYl9lbmNyeXB0KHN0cCwgc3RwLT5zdHJfZmVlZCwgYik7CisjZWxzZSAvKiBNSVRfQ1VSUkVO VCAqLworICAgICAgICBkZXNfZWNiX2VuY3J5cHQoc3RwLT5zdHJfZmVlZCwgYiwgc3RwLT5zdHJf c2NoZWQsIDEpOworI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgIG1lbWNweShzdHAt PnN0cl9mZWVkLCBiLCBzaXplb2YoQmxvY2spKTsKKyAgICAgICAgc3RwLT5zdHJfaW5kZXggPSAx OyAgICAgLyogTmV4dCB0aW1lIHdpbGwgYmUgMSAqLworICAgICAgICBpbmRleCA9IDA7ICAgICAg ICAgICAgICAvKiBCdXQgbm93IHVzZSAwICovCisgICAgfQorCisgICAgcmV0dXJuKGRhdGEgXiBz dHAtPnN0cl9mZWVkW2luZGV4XSk7Cit9CisKKwordm9pZCBkZXMzX2ZiNjRfc3RyZWFtX2l2IFAo KEJsb2NrLCBzdHJ1Y3QgZGVzM19zdGluZm8gKikpOwordm9pZCBkZXMzX2ZiNjRfaW5pdCBQKChz dHJ1Y3QgZGVzM19mYiAqKSk7CitzdGF0aWMgaW50IGRlczNfZmI2NF9zdGFydCBQKChzdHJ1Y3Qg ZGVzM19mYiAqLCBpbnQsIGludCkpOworaW50IGRlczNfZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFy ICosIGludCwgc3RydWN0IGRlczNfZmIgKikpOworaW50IGRlczNfZmI2NF9yZXBseSBQKCh1bnNp Z25lZCBjaGFyICosIGludCwgc3RydWN0IGRlczNfZmIgKikpOworc3RhdGljIGludCBkZXMzX2Zi NjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQsIHN0cnVjdCBkZXMzX2ZiICopKTsKK3Zv aWQgZGVzM19mYjY0X3N0cmVhbV9rZXkgUCgoQmxvY2sgKiwgc3RydWN0IGRlczNfc3RpbmZvICop KTsKK2ludCBkZXMzX2ZiNjRfa2V5aWQgUCgoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCAqLCBz dHJ1Y3QgZGVzM19mYiAqKSk7CisKK3ZvaWQKK2RlczNfY2ZiNjRfaW5pdChzZXJ2ZXIpCisgICAg aW50IHNlcnZlcjsKK3sKKyAgICBkZXMzX2ZiNjRfaW5pdCgmZGVzM19mYltDRkJdKTsKKyAgICBk ZXMzX2ZiW0NGQl0uZmJfZmVlZFs0XSA9IEVOQ1RZUEVfREVTM19DRkI2NDsKKyAgICBkZXMzX2Zi W0NGQl0uc3RyZWFtc1swXS5zdHJfZmxhZ3NoaWZ0ID0gU0hJRlRfVkFMKDAsIENGQik7CisgICAg ZGVzM19mYltDRkJdLnN0cmVhbXNbMV0uc3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgxLCBDRkIp OworfQorCit2b2lkCitkZXMzX29mYjY0X2luaXQoc2VydmVyKQorICAgIGludCBzZXJ2ZXI7Cit7 CisgICAgZGVzM19mYjY0X2luaXQoJmRlczNfZmJbT0ZCXSk7CisgICAgZGVzM19mYltPRkJdLmZi X2ZlZWRbNF0gPSBFTkNUWVBFX0RFUzNfT0ZCNjQ7CisgICAgZGVzM19mYltDRkJdLnN0cmVhbXNb MF0uc3RyX2ZsYWdzaGlmdCA9IFNISUZUX1ZBTCgwLCBPRkIpOworICAgIGRlczNfZmJbQ0ZCXS5z dHJlYW1zWzFdLnN0cl9mbGFnc2hpZnQgPSBTSElGVF9WQUwoMSwgT0ZCKTsKK30KKwordm9pZAor ZGVzM19mYjY0X2luaXQoZmJwKQorICAgIHJlZ2lzdGVyIHN0cnVjdCBkZXMzX2ZiICpmYnA7Cit7 CisgICAgbWVtc2V0KCh2b2lkICopZmJwLCAwLCBzaXplb2YoKmZicCkpOworICAgIGZicC0+c3Rh dGVbMF0gPSBmYnAtPnN0YXRlWzFdID0geEZBSUxFRDsKKyAgICBmYnAtPmZiX2ZlZWRbMF0gPSBJ QUM7CisgICAgZmJwLT5mYl9mZWVkWzFdID0gU0I7CisgICAgZmJwLT5mYl9mZWVkWzJdID0gVEVM T1BUX0VOQ1JZUFRJT047CisgICAgZmJwLT5mYl9mZWVkWzNdID0gRU5DUllQVF9JUzsKK30KKwor LyoKKyAqIFJldHVybnM6CisgKiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMg ZG9uZSwgZW5jcnlwdGlvbiBub3QgcmVhZHkuCisgKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0 aWFsIG5lZ290aWF0aW9uIGFsbCBkb25lLgorICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3Rp YXRpb24gbm90IGRvbmUgeWV0LgorICogICAgICAgMjogTm90IHlldC4gIE90aGVyIHRoaW5ncyAo bGlrZSBnZXR0aW5nIHRoZSBrZXkgZnJvbQorICogICAgICAgICAgS2VyYmVyb3MpIGhhdmUgdG8g aGFwcGVuIGJlZm9yZSB3ZSBjYW4gY29udGludWUuCisgKi8KK2ludAorZGVzM19jZmI2NF9zdGFy dChkaXIsIHNlcnZlcikKKyAgICBpbnQgZGlyOworICAgIGludCBzZXJ2ZXI7Cit7CisgICAgcmV0 dXJuKGRlczNfZmI2NF9zdGFydCgmZGVzM19mYltDRkJdLCBkaXIsIHNlcnZlcikpOworfQoraW50 CitkZXMzX29mYjY0X3N0YXJ0KGRpciwgc2VydmVyKQorICAgIGludCBkaXI7CisgICAgaW50IHNl cnZlcjsKK3sKKyAgICByZXR1cm4oZGVzM19mYjY0X3N0YXJ0KCZkZXMzX2ZiW09GQl0sIGRpciwg c2VydmVyKSk7Cit9CisKK3N0YXRpYyBpbnQKK2RlczNfZmI2NF9zdGFydChmYnAsIGRpciwgc2Vy dmVyKQorICAgIHN0cnVjdCBkZXMzX2ZiICpmYnA7CisgICAgaW50IGRpcjsKKyAgICBpbnQgc2Vy dmVyOworeworICAgIGludCB4OworICAgIHVuc2lnbmVkIGNoYXIgKnA7CisgICAgcmVnaXN0ZXIg aW50IHN0YXRlOworCisgICAgc3dpdGNoIChkaXIpIHsKKyAgICBjYXNlIERJUl9ERUNSWVBUOgor ICAgICAgICAvKgorICAgICAgICAqIFRoaXMgaXMgc2ltcGx5IGEgcmVxdWVzdCB0byBoYXZlIHRo ZSBvdGhlciBzaWRlCisgICAgICAgICogc3RhcnQgb3V0cHV0IChvdXIgaW5wdXQpLiAgSGUgd2ls bCBuZWdvdGlhdGUgYW4KKyAgICAgICAgKiBJViBzbyB3ZSBuZWVkIG5vdCBsb29rIGZvciBpdC4K KyAgICAgICAgKi8KKyAgICAgICAgc3RhdGUgPSBmYnAtPnN0YXRlW2Rpci0xXTsKKyAgICAgICAg aWYgKHN0YXRlID09IHhGQUlMRUQpCisgICAgICAgICAgICBzdGF0ZSA9IElOX1BST0dSRVNTOwor ICAgICAgICBicmVhazsKKworICAgIGNhc2UgRElSX0VOQ1JZUFQ6CisgICAgICAgIHN0YXRlID0g ZmJwLT5zdGF0ZVtkaXItMV07CisgICAgICAgIGlmIChzdGF0ZSA9PSB4RkFJTEVEKQorICAgICAg ICAgICAgc3RhdGUgPSBJTl9QUk9HUkVTUzsKKyAgICAgICAgZWxzZSBpZiAoKHN0YXRlICYgTk9f U0VORF9JVikgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICghVkFMSURL RVkoZmJwLT5rcmJkZXNfa2V5WzBdKSB8fAorICAgICAgICAgICAgIVZBTElES0VZKGZicC0+a3Ji ZGVzX2tleVsxXSkgfHwKKyAgICAgICAgICAgICFWQUxJREtFWShmYnAtPmtyYmRlc19rZXlbMl0p ICkgeworICAgICAgICAgICAgZmJwLT5uZWVkX3N0YXJ0ID0gMTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIHN0YXRlICY9IH5OT19TRU5EX0lWOworICAgICAgICBzdGF0 ZSB8PSBOT19SRUNWX0lWOworICAgICAgICAvKgorICAgICAgICAqIENyZWF0ZSBhIHJhbmRvbSBm ZWVkIGFuZCBzZW5kIGl0IG92ZXIuCisgICAgICAgICovCisgICAgICAgIGRlc19uZXdfcmFuZG9t X2tleShmYnAtPnRlbXBfZmVlZCk7CisjaWZkZWYgTElCREVTCisgICAgICAgIGRlc19lY2IzX2Vu Y3J5cHQoZmJwLT50ZW1wX2ZlZWQsIGZicC0+dGVtcF9mZWVkLAorICAgICAgICAgICAgICAgICAg ICAgICAgIGZicC0+a3JiZGVzX3NjaGVkWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZi cC0+a3JiZGVzX3NjaGVkWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZicC0+a3JiZGVz X3NjaGVkWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworI2Vsc2UgLyogTElCREVT ICovCisgICAgICAgIGRlc19lY2JfZW5jcnlwdChmYnAtPnRlbXBfZmVlZCwgZmJwLT50ZW1wX2Zl ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmJwLT5rcmJkZXNfc2NoZWRbMF0sIDEpOwor ICAgICAgICBkZXNfZWNiX2VuY3J5cHQoZmJwLT50ZW1wX2ZlZWQsIGZicC0+dGVtcF9mZWVkLAor ICAgICAgICAgICAgICAgICAgICAgICAgIGZicC0+a3JiZGVzX3NjaGVkWzFdLCAwKTsKKyAgICAg ICAgZGVzX2VjYl9lbmNyeXB0KGZicC0+dGVtcF9mZWVkLCBmYnAtPnRlbXBfZmVlZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBmYnAtPmtyYmRlc19zY2hlZFsyXSwgMSk7CisjZW5kaWYgLyog TElCREVTICovCisKKyAgICAgICAgcCA9IGZicC0+ZmJfZmVlZCArIDM7CisgICAgICAgICpwKysg PSBFTkNSWVBUX0lTOworICAgICAgICBwKys7CisgICAgICAgICpwKysgPSBGQjY0X0lWOworICAg ICAgICBmb3IgKHggPSAwOyB4IDwgc2l6ZW9mKEJsb2NrKTsgKyt4KSB7CisgICAgICAgICAgICBp ZiAoKCAqcCsrID0gZmJwLT50ZW1wX2ZlZWRbeF0pID09IElBQykKKyAgICAgICAgICAgICAgICAq cCsrID0gSUFDOworICAgICAgICB9CisgICAgICAgICpwKysgPSBJQUM7CisgICAgICAgICpwKysg PSBTRTsKKworICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAg ICAgICAgIGludCBpOworICAgICAgICAgICAgc3ByaW50Zih0bl9tc2csCisgICAgICAgICAgICAg ICAgICAgICAiVEVMTkVUIFNFTlQgU0IgJXMgSVMgJXMgRkI2NF9JViAiLAorICAgICAgICAgICAg ICAgICAgICAgVEVMT1BUKGZicC0+ZmJfZmVlZFsyXSksCisgICAgICAgICAgICAgICAgICAgICBl bmN0eXBlX25hbWVzW2ZicC0+ZmJfZmVlZFs0XV0pOyAvKiBzYWZlICovCisgICAgICAgICAgICB0 bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmZmJwLT5mYl9mZWVkWzZdLAorCQkocC1m YnAtPmZiX2ZlZWQpLTItNik7CisgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJJQUMgU0Ui LFROX01TR19MRU4pOworICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAg ICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAg fQorI2lmZGVmIE9TMgorICAgICAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKKyNlbmRpZgorICAgICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJf ZmVlZCk7CisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlm CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybih4RkFJTEVEKTsK KyAgICB9CisgICAgcmV0dXJuKGZicC0+c3RhdGVbZGlyLTFdID0gc3RhdGUpOworfQorCisvKgor ICogUmV0dXJuczoKKyAqICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25l LCBlbmNyeXB0aW9uIG5vdCByZWFkeS4KKyAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwg bmVnb3RpYXRpb24gYWxsIGRvbmUuCisgKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlv biBub3QgZG9uZSB5ZXQuCisgKi8KK2ludAorZGVzM19jZmI2NF9pcyhkYXRhLCBjbnQpCisgICAg dW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250OworeworICAgIHJldHVybihkZXMzX2Zi NjRfaXMoZGF0YSwgY250LCAmZGVzM19mYltDRkJdKSk7Cit9CisKK2ludAorZGVzM19vZmI2NF9p cyhkYXRhLCBjbnQpCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250Oworewor ICAgIHJldHVybihkZXMzX2ZiNjRfaXMoZGF0YSwgY250LCAmZGVzM19mYltPRkJdKSk7Cit9CisK K2ludAorZGVzM19mYjY0X2lzKGRhdGEsIGNudCwgZmJwKQorICAgIHVuc2lnbmVkIGNoYXIgKmRh dGE7CisgICAgaW50IGNudDsKKyAgICBzdHJ1Y3QgZGVzM19mYiAqZmJwOworeworICAgIHVuc2ln bmVkIGNoYXIgKnA7CisgICAgcmVnaXN0ZXIgaW50IHN0YXRlID0gZmJwLT5zdGF0ZVtESVJfREVD UllQVC0xXTsKKworICAgIGlmIChjbnQtLSA8IDEpCisgICAgICAgIGdvdG8gZmFpbHVyZTsKKwor I2lmZGVmIENLX1NTTAorICAgIGlmICghVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0 X3Rscy5tZV9mb2xsb3dzKQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIHN3aXRjaCAoKmRhdGEr KykgeworICAgIGNhc2UgRkI2NF9JVjoKKyAgICAgICAgaWYgKGNudCAhPSBzaXplb2YoQmxvY2sp KSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpCisg ICAgICAgICAgICAgICAgcHJpbnRmKCJERVMzX0ZCNjQ6IGluaXRpYWwgdmVjdG9yIGZhaWxlZCBv biBzaXplXHJcbiIpOworI2VuZGlmCisgICAgICAgICAgICBzdGF0ZSA9IHhGQUlMRUQ7CisgICAg ICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgIH0KKworI2lmZGVmIERFQlVHCisgICAgICAg IGlmIChlbmNyeXB0X2RlYnVnX21vZGUpIHsKKyAgICAgICAgICAgIHByaW50ZigiREVTM19GQjY0 OiBpbml0aWFsIHZlY3RvciByZWNlaXZlZFxyXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiSW5p dGlhbGl6aW5nIERlY3J5cHQgc3RyZWFtXHJcbiIpOworICAgICAgICB9CisjZW5kaWYKKyAgICAg ICAgZGVzM19mYjY0X3N0cmVhbV9pdigodm9pZCAqKWRhdGEsICZmYnAtPnN0cmVhbXNbRElSX0RF Q1JZUFQtMV0pOworCisgICAgICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOworICAgICAgICAqcCsr ID0gRU5DUllQVF9SRVBMWTsKKyAgICAgICAgcCsrOworICAgICAgICAqcCsrID0gRkI2NF9JVl9P SzsKKyAgICAgICAgKnArKyA9IElBQzsKKyAgICAgICAgKnArKyA9IFNFOworCisgICAgICAgIGlm IChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICAgICAgaW50IGk7CisgICAg ICAgICAgICBzcHJpbnRmKHRuX21zZywKKyAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VO VCBTQiAlcyBSRVBMWSAlcyBGQjY0X0lWX09LICIsCisgICAgICAgICAgICAgICAgICAgICBURUxP UFQoZmJwLT5mYl9mZWVkWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgIGVuY3R5cGVfbmFtZXNb ZmJwLT5mYl9mZWVkWzRdXSk7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgIHRuX2hleCgoQ0hBUiAq KXRuX21zZyxUTl9NU0dfTEVOLCZmYnAtPmZiX2ZlZWRbNl0sCisJCShwLWZicC0+ZmJfZmVlZCkt Mi02KTsKKyAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7 CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICB9CisjaWZkZWYgT1My CisgICAgICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2Vu ZGlmCisgICAgICAgIHR0b2woZmJwLT5mYl9mZWVkLCBwIC0gZmJwLT5mYl9mZWVkKTsKKyNpZmRl ZiBPUzIKKyAgICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICAgICAgc3Rh dGUgPSBJTl9QUk9HUkVTUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorI2lmIDAK KyAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkgeworICAgICAgICAgICAgcHJpbnRmKCJV bmtub3duIG9wdGlvbiB0eXBlOiAlZFxyXG4iLCAqKGRhdGEtMSkpOworICAgICAgICAgICAgcHJp bnRmKCJcclxuIik7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAvKiBGQUxMIFRIUk9VR0gg Ki8KKyAgICAgIGZhaWx1cmU6CisgICAgICAgIC8qCisgICAgICAgICogV2UgZmFpbGVkLiAgU2Vu ZCBhbiBGQjY0X0lWX0JBRCBvcHRpb24KKyAgICAgICAgKiB0byB0aGUgb3RoZXIgc2lkZSBzbyBp dCB3aWxsIGtub3cgdGhhdAorICAgICAgICAqIHRoaW5ncyBmYWlsZWQuCisgICAgICAgICovCisg ICAgICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOworICAgICAgICAqcCsrID0gRU5DUllQVF9SRVBM WTsKKyAgICAgICAgcCsrOworICAgICAgICAqcCsrID0gRkI2NF9JVl9CQUQ7CisgICAgICAgICpw KysgPSBJQUM7CisgICAgICAgICpwKysgPSBTRTsKKworICAgICAgICBpZiAoZGVibG9nIHx8IHRu X2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgc3ByaW50 Zih0bl9tc2csCisgICAgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgJXMgUkVQTFkg JXMgRkI2NF9JVl9CQUQgIiwKKyAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChmYnAtPmZiX2Zl ZWRbMl0pLAorICAgICAgICAgICAgICAgICAgICAgZW5jdHlwZV9uYW1lc1tmYnAtPmZiX2ZlZWRb NF1dKTsgLyogc2FmZSAqLworICAgICAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01T R19MRU4sJmZicC0+ZmJfZmVlZFs2XSwKKwkJKHAtZmJwLT5mYl9mZWVkKS0yLTYpOworICAgICAg ICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAgICAgICAg IGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJz ZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgUmVx dWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICAgICAg dHRvbChmYnAtPmZiX2ZlZWQsIHAgLSBmYnAtPmZiX2ZlZWQpOworI2lmZGVmIE9TMgorICAgICAg ICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9Cisg ICAgcmV0dXJuKGZicC0+c3RhdGVbRElSX0RFQ1JZUFQtMV0gPSBzdGF0ZSk7Cit9CisKKy8qCisg KiBSZXR1cm5zOgorICogICAgICAtMTogc29tZSBlcnJvci4gIE5lZ290aWF0aW9uIGlzIGRvbmUs IGVuY3J5cHRpb24gbm90IHJlYWR5LgorICogICAgICAgMDogU3VjY2Vzc2Z1bCwgaW5pdGlhbCBu ZWdvdGlhdGlvbiBhbGwgZG9uZS4KKyAqICAgICAgIDE6IHN1Y2Nlc3NmdWwsIG5lZ290aWF0aW9u IG5vdCBkb25lIHlldC4KKyAqLworaW50CitkZXMzX2NmYjY0X3JlcGx5KGRhdGEsIGNudCkKKyAg ICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7Cit7CisgICAgcmV0dXJuKGRlczNf ZmI2NF9yZXBseShkYXRhLCBjbnQsICZkZXMzX2ZiW0NGQl0pKTsKK30KK2ludAorZGVzM19vZmI2 NF9yZXBseShkYXRhLCBjbnQpCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250 OworeworICAgIHJldHVybihkZXMzX2ZiNjRfcmVwbHkoZGF0YSwgY250LCAmZGVzM19mYltPRkJd KSk7Cit9CisKKworaW50CitkZXMzX2ZiNjRfcmVwbHkoZGF0YSwgY250LCBmYnApCisgICAgdW5z aWduZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250OworICAgIHN0cnVjdCBkZXMzX2ZiICpmYnA7 Cit7CisgICAgcmVnaXN0ZXIgaW50IHN0YXRlID0gZmJwLT5zdGF0ZVtESVJfRU5DUllQVC0xXTsK KworICAgIGlmIChjbnQtLSA8IDEpCisgICAgICAgIGdvdG8gZmFpbHVyZTsKKworICAgIHN3aXRj aCAoKmRhdGErKykgeworICAgIGNhc2UgRkI2NF9JVl9PSzoKKyAgICAgICAgZGVzM19mYjY0X3N0 cmVhbV9pdihmYnAtPnRlbXBfZmVlZCwgJmZicC0+c3RyZWFtc1tESVJfRU5DUllQVC0xXSk7Cisg ICAgICAgIGlmIChzdGF0ZSA9PSB4RkFJTEVEKQorICAgICAgICAgICAgc3RhdGUgPSBJTl9QUk9H UkVTUzsKKyAgICAgICAgc3RhdGUgJj0gfk5PX1JFQ1ZfSVY7CisgICAgICAgIGVuY3J5cHRfc2Vu ZF9rZXlpZChESVJfRU5DUllQVCwgKHVuc2lnbmVkIGNoYXIgKikiXDAiLCAxLCAxKTsKKyAgICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIEZCNjRfSVZfQkFEOgorICAgICAgICBtZW1zZXQoZmJwLT50 ZW1wX2ZlZWQsIDAsIHNpemVvZihCbG9jaykpOworICAgICAgICBkZXMzX2ZiNjRfc3RyZWFtX2l2 KGZicC0+dGVtcF9mZWVkLCAmZmJwLT5zdHJlYW1zW0RJUl9FTkNSWVBULTFdKTsKKyAgICAgICAg c3RhdGUgPSB4RkFJTEVEOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisjaWYgMAor ICAgICAgICBpZiAoZW5jcnlwdF9kZWJ1Z19tb2RlKSB7CisgICAgICAgICAgICBwcmludGYoIlVu a25vd24gb3B0aW9uIHR5cGU6ICVkXHJcbiIsIGRhdGFbLTFdKTsKKyAgICAgICAgICAgIHByaW50 ZigiXHJcbiIpOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgLyogRkFMTCBUSFJPVUdIICov CisgICAgICBmYWlsdXJlOgorICAgICAgICBzdGF0ZSA9IHhGQUlMRUQ7CisgICAgICAgIGJyZWFr OworICAgIH0KKyAgICByZXR1cm4oZmJwLT5zdGF0ZVtESVJfRU5DUllQVC0xXSA9IHN0YXRlKTsK K30KKworaW50CitkZXMzX2NmYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIpCisgICAgU2Vzc2lvbl9L ZXkgKmtleTsKKyAgICBpbnQgc2VydmVyOworeworICAgIHJldHVybihkZXMzX2ZiNjRfc2Vzc2lv bihrZXksIHNlcnZlciwgJmRlczNfZmJbQ0ZCXSkpOworfQorCitpbnQKK2RlczNfb2ZiNjRfc2Vz c2lvbihrZXksIHNlcnZlcikKKyAgICBTZXNzaW9uX0tleSAqa2V5OworICAgIGludCBzZXJ2ZXI7 Cit7CisgICAgcmV0dXJuKGRlczNfZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyLCAmZGVzM19mYltP RkJdKSk7Cit9CisKK3N0YXRpYyBpbnQKK2RlczNfZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyLCBm YnApCisgICAgU2Vzc2lvbl9LZXkgKmtleTsKKyAgICBpbnQgc2VydmVyOworICAgIHN0cnVjdCBk ZXMzX2ZiICpmYnA7Cit7CisgICAgaW50IHJjPTAsaT0wOworICAgIGludCBrZXlzMnVzZT0wOwor ICAgIHN0cnVjdCBkZXMzX3N0aW5mbyAqIHNfc3RyZWFtOworICAgIHN0cnVjdCBkZXMzX3N0aW5m byAqIGNfc3RyZWFtOworCisgICAgaWYoc2VydmVyKSB7CisgICAgICAgIHNfc3RyZWFtID0gJmZi cC0+c3RyZWFtc1tESVJfRU5DUllQVC0xXTsKKyAgICAgICAgY19zdHJlYW0gPSAmZmJwLT5zdHJl YW1zW0RJUl9ERUNSWVBULTFdOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc19zdHJlYW0g PSAmZmJwLT5zdHJlYW1zW0RJUl9ERUNSWVBULTFdOworICAgICAgICBjX3N0cmVhbSA9ICZmYnAt PnN0cmVhbXNbRElSX0VOQ1JZUFQtMV07CisgICAgfQorCisgICAga2V5czJ1c2UgPSBrZXktPmxl bmd0aCAvIHNpemVvZihCbG9jayk7CisgICAgaWYgKCFrZXkgfHwgKGtleS0+dHlwZSA9PSBTS19E RVMpIHx8IChrZXlzMnVzZSA8IDIpKSB7CisgICAgICAgIENIQVIgYnVmWzgwXTsKKyAgICAgICAg c3ByaW50ZigoY2hhciAqKWJ1ZiwiQ2FuJ3Qgc2V0IDNERVMgc2Vzc2lvbiBrZXkgKCVkIDwgJWQp IiwKKyAgICAgICAgICAgICAgICBrZXkgPyBrZXktPmxlbmd0aCA6IDAsIDIgKiAoaW50KXNpemVv ZihCbG9jaykpOwkvKiBzYWZlICovCisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGVuY3J5cHRf ZGVidWdfbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiJXNcclxuIixidWYpOworI2VuZGlmCisg ICAgICAgIGRlYnVnKEYxMTAsImRlczNfZmI2NF9zZXNzaW9uIixidWYsMCk7CisgICAgICAgIHJl dHVybigtMSk7CisgICAgfQorCisgICAgZGVidWcoRjExMSwiZGVzM19mYjY0X3Nlc3Npb24iLCJr ZXlzMnVzZSIsa2V5czJ1c2UpOworICAgIC8qIENvbXB1dGUgdGhlIGZpcnN0IHNldCBvZiBrZXlz IC8ga2V5IG9yZGVyICovCisgICAgc3dpdGNoICgga2V5czJ1c2UgKSB7CisgICAgY2FzZSAyOgor ICAgICAgICBtZW1jcHkoKHZvaWQgKilmYnAtPmtyYmRlc19rZXlbMF0sICh2b2lkICopa2V5LT5k YXRhLCBzaXplb2YoQmxvY2spKTsKKyAgICAgICAgbWVtY3B5KCh2b2lkICopIGZicC0+a3JiZGVz X2tleVsxXSwodm9pZCAqKShrZXktPmRhdGEgKyBzaXplb2YoQmxvY2spKSwKKyAgICAgICAgICAg ICAgICAgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVz X2tleVsyXSwgKHZvaWQgKilrZXktPmRhdGEsIHNpemVvZihCbG9jaykpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIDM6CisgICAgZGVmYXVsdDoKKyAgICAgICAgbWVtY3B5KCh2b2lkICopZmJw LT5rcmJkZXNfa2V5WzBdLCAodm9pZCAqKWtleS0+ZGF0YSwgc2l6ZW9mKEJsb2NrKSk7CisgICAg ICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMV0sKHZvaWQgKikoa2V5LT5kYXRh ICsgc2l6ZW9mKEJsb2NrKSksCisgICAgICAgICAgICAgICAgIHNpemVvZihCbG9jaykpOworICAg ICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzJdLAorICAgICAgICAgICAgICAg ICAodm9pZCAqKSAoa2V5LT5kYXRhICsgMipzaXplb2YoQmxvY2spKSwgc2l6ZW9mKEJsb2NrKSk7 CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBja2hleGR1bXAoImRlczNfc2Vzc2lvbl9rZXkg a2V5LT5kYXRhIixrZXktPmRhdGEsc2l6ZW9mKEJsb2NrKSk7CisgICAgY2toZXhkdW1wKCJkZXMz X3Nlc3Npb25fa2V5IGZicC0+a3JiZGVzX2tleVswXSIsCisgICAgICAgICAgICBmYnAtPmtyYmRl c19rZXlbMF0sCisgICAgICAgICAgICBzaXplb2YoQmxvY2spCisgICAgICAgICAgICApOworICAg IGlmIChmYnAtPm9uY2UgPT0gMCkgeworICAgICAgICBkZXNfc2V0X3JhbmRvbV9nZW5lcmF0b3Jf c2VlZChmYnAtPmtyYmRlc19rZXlbMF0pOworICAgICAgICBmYnAtPm9uY2UgPSAxOworICAgIH0K KworICAgIGZvciAoIGk9MDtpPDM7aSsrICkKKyAgICAgICAgZGVzX2ZpeHVwX2tleV9wYXJpdHko ZmJwLT5rcmJkZXNfa2V5W2ldKTsKKyAgICBkZXMzX2ZiNjRfc3RyZWFtX2tleShmYnAtPmtyYmRl c19rZXksIHNfc3RyZWFtKTsKKworCisgICAgLyogQ29tcHV0ZSB0aGUgc2Vjb25kIHNldCBvZiBr ZXlzIC8ga2V5IG9yZGVyICovCisgICAgc3dpdGNoICgga2V5czJ1c2UgKSB7CisgICAgY2FzZSAy OgorICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzBdLCh2b2lkICopKGtl eS0+ZGF0YSArIHNpemVvZihCbG9jaykpLAorICAgICAgICAgICAgICAgICBzaXplb2YoQmxvY2sp KTsKKyAgICAgICAgbWVtY3B5KCh2b2lkICopZmJwLT5rcmJkZXNfa2V5WzFdLCAodm9pZCAqKWtl eS0+ZGF0YSwgc2l6ZW9mKEJsb2NrKSk7CisgICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmty YmRlc19rZXlbMl0sKHZvaWQgKikoa2V5LT5kYXRhICsgc2l6ZW9mKEJsb2NrKSksCisgICAgICAg ICAgICAgICAgIHNpemVvZihCbG9jaykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6Cisg ICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMF0sKHZvaWQgKikoa2V5LT5k YXRhICsgc2l6ZW9mKEJsb2NrKSksCisgICAgICAgICAgICAgICAgIHNpemVvZihCbG9jaykpOwor ICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzFdLAorICAgICAgICAgICAg ICAgICAodm9pZCAqKSAoa2V5LT5kYXRhICsgMipzaXplb2YoQmxvY2spKSwgc2l6ZW9mKEJsb2Nr KSk7CisgICAgICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleVsyXSwgKHZvaWQgKilr ZXktPmRhdGEsIHNpemVvZihCbG9jaykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6Cisg ICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMF0sKHZvaWQgKikoa2V5LT5k YXRhICsgc2l6ZW9mKEJsb2NrKSksCisgICAgICAgICAgICAgICAgIHNpemVvZihCbG9jaykpOwor ICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzFdLAorICAgICAgICAgICAg ICAgICAodm9pZCAqKSAoa2V5LT5kYXRhICsgMypzaXplb2YoQmxvY2spKSwgc2l6ZW9mKEJsb2Nr KSk7CisgICAgICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleVsyXSwgKHZvaWQgKilr ZXktPmRhdGEsIHNpemVvZihCbG9jaykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDU6Cisg ICAgICAgIG1lbWNweSgodm9pZCAqKSBmYnAtPmtyYmRlc19rZXlbMF0sKHZvaWQgKikoa2V5LT5k YXRhICsgc2l6ZW9mKEJsb2NrKSksCisgICAgICAgICAgICAgICAgIHNpemVvZihCbG9jaykpOwor ICAgICAgICBtZW1jcHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzFdLAorICAgICAgICAgICAg ICAgICAodm9pZCAqKSAoa2V5LT5kYXRhICsgMypzaXplb2YoQmxvY2spKSwgc2l6ZW9mKEJsb2Nr KSk7CisgICAgICAgIG1lbWNweSgodm9pZCAqKWZicC0+a3JiZGVzX2tleVsyXSwKKyAgICAgICAg ICAgICAgICAgKHZvaWQgKikoa2V5LT5kYXRhICsgNCpzaXplb2YoQmxvY2spKSwgc2l6ZW9mKEJs b2NrKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNjoKKyAgICAgICAgbWVtY3B5KCh2b2lk ICopIGZicC0+a3JiZGVzX2tleVswXSwKKyAgICAgICAgICAgICAgICAgKHZvaWQgKikgKGtleS0+ ZGF0YSArIDMqc2l6ZW9mKEJsb2NrKSksIHNpemVvZihCbG9jaykpOworICAgICAgICBtZW1jcHko KHZvaWQgKilmYnAtPmtyYmRlc19rZXlbMV0sCisgICAgICAgICAgICAgICAgICh2b2lkICopKGtl eS0+ZGF0YSArIDQqc2l6ZW9mKEJsb2NrKSksIHNpemVvZihCbG9jaykpOworICAgICAgICBtZW1j cHkoKHZvaWQgKikgZmJwLT5rcmJkZXNfa2V5WzJdLAorICAgICAgICAgICAgICAgICAodm9pZCAq KSAoa2V5LT5kYXRhICsgNSAqc2l6ZW9mKEJsb2NrKSksICBzaXplb2YoQmxvY2spKTsKKyAgICAg ICAgYnJlYWs7CisgICAgfQorCisgICAgZm9yICggaT0wO2k8MztpKysgKQorICAgICAgICBkZXNf Zml4dXBfa2V5X3Bhcml0eShmYnAtPmtyYmRlc19rZXlbaV0pOworICAgIGRlczNfZmI2NF9zdHJl YW1fa2V5KGZicC0+a3JiZGVzX2tleSwgY19zdHJlYW0pOworCisgICAgLyogbm93IHVzZSB0aGUg c2Vjb25kIHNldCBvZiBrZXlzIHRvIGJ1aWxkIHRoZSBkZWZhdWx0IEtleSBTY2hlZHVsZSAqLwor ICAgIC8qIHdoaWNoIGlzIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIElWLiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KKyAgICBmb3IgKCBpPTA7aTwzO2krKyApIHsKKyAgICAgICAgbWVt c2V0KGZicC0+a3JiZGVzX3NjaGVkW2ldLDAsc2l6ZW9mKFNjaGVkdWxlKSk7CisKKyAgICAgICAg cmMgPSBkZXNfa2V5X3NjaGVkKGZicC0+a3JiZGVzX2tleVtpXSwgZmJwLT5rcmJkZXNfc2NoZWRb aV0pOworICAgICAgICBpZiAoIHJjID09IC0xICkgeworICAgICAgICAgICAgcHJpbnRmKCI/SW52 YWxpZCBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiBbREVTMywlc11cclxuIiwKKyAg ICAgICAgICAgICAgICAgICAgc2VydmVyPyJzZXJ2ZXIiOiJjbGllbnQiKTsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsImRlczNfZmI2NF9zdHJlYW1faXYiLAorICAgICAgICAgICAgICAgICAgICJp bnZhbGlkIERFUyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKKyAgICAgICAgfSBl bHNlIGlmICggcmMgPT0gLTIgKSB7CisgICAgICAgICAgICBwcmludGYoIj9XZWFrIERFUyBrZXkg c3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uXHJcbiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwi ZGVzM19mYjY0X3N0cmVhbV9pdiIsCisgICAgICAgICAgICAgICAgICAgIndlYWsgREVTIEtleSBz cGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOworICAgICAgICB9IGVsc2UgaWYgKCByYyAhPSAw ICkgeworICAgICAgICAgICAgcHJpbnRmKCI/S2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVu Y3J5cHRpb25cclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkZXMzX2ZiNjRfc3RyZWFt X2l2IiwKKyAgICAgICAgICAgICAgICAgICAiS2V5IFNjaGVkdWxlIG5vdCBjcmVhdGVkIGJ5IGVu Y3J5cHRpb24iLDApOworICAgICAgICB9CisgICAgICAgIGNraGV4ZHVtcCgiZGVzM19mYjY0X3Nl c3Npb25fa2V5IHNjaGVkdWxlIixmYnAtPmtyYmRlc19zY2hlZFtpXSw4KjE2KTsKKyAgICB9Cisg ICAgLyoKKyAgICAqIE5vdyBsb29rIHRvIHNlZSBpZiBrcmJkZXNfc3RhcnQoKSB3YXMgd2FzIHdh aXRpbmcgZm9yCisgICAgKiB0aGUga2V5IHRvIHNob3cgdXAuICBJZiBzbywgZ28gYWhlYWQgYW4g Y2FsbCBpdCBub3cKKyAgICAqIHRoYXQgd2UgaGF2ZSB0aGUga2V5LgorICAgICovCisgICAgaWYg KGZicC0+bmVlZF9zdGFydCkgeworICAgICAgICBmYnAtPm5lZWRfc3RhcnQgPSAwOworICAgICAg ICBkZXMzX2ZiNjRfc3RhcnQoZmJwLCBESVJfRU5DUllQVCwgc2VydmVyKTsKKyAgICB9CisgICAg cmV0dXJuKDApOworfQorCisvKgorICogV2Ugb25seSBhY2NlcHQgYSBrZXlpZCBvZiAwLiAgSWYg d2UgZ2V0IGEga2V5aWQgb2YKKyAqIDAsIHRoZW4gbWFyayB0aGUgc3RhdGUgYXMgU1VDQ0VTUy4K KyAqLworaW50CitkZXMzX2NmYjY0X2tleWlkKGRpciwga3AsIGxlbnApCisgICAgaW50IGRpciwg KmxlbnA7CisgICAgdW5zaWduZWQgY2hhciAqa3A7Cit7CisgICAgcmV0dXJuKGRlczNfZmI2NF9r ZXlpZChkaXIsIGtwLCBsZW5wLCAmZGVzM19mYltDRkJdKSk7Cit9CisKK2ludAorZGVzM19vZmI2 NF9rZXlpZChkaXIsIGtwLCBsZW5wKQorICAgIGludCBkaXIsICpsZW5wOworICAgIHVuc2lnbmVk IGNoYXIgKmtwOworeworICAgIHJldHVybihkZXMzX2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCwg JmRlczNfZmJbT0ZCXSkpOworfQorCitpbnQKK2RlczNfZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5w LCBmYnApCisgICAgaW50IGRpciwgKmxlbnA7CisgICAgdW5zaWduZWQgY2hhciAqa3A7CisgICAg c3RydWN0IGRlczNfZmIgKmZicDsKK3sKKyAgICByZWdpc3RlciBpbnQgc3RhdGUgPSBmYnAtPnN0 YXRlW2Rpci0xXTsKKworICAgIGlmICgqbGVucCAhPSAxIHx8ICgqa3AgIT0gJ1wwJykpIHsKKyAg ICAgICAgKmxlbnAgPSAwOworICAgICAgICByZXR1cm4oc3RhdGUpOworICAgIH0KKworICAgIGlm IChzdGF0ZSA9PSB4RkFJTEVEKQorICAgICAgICBzdGF0ZSA9IElOX1BST0dSRVNTOworCisgICAg c3RhdGUgJj0gfk5PX0tFWUlEOworCisgICAgcmV0dXJuKGZicC0+c3RhdGVbZGlyLTFdID0gc3Rh dGUpOworfQorCisjaWYgMAordm9pZAorZGVzM19mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVm LCBidWZsZW4sIHR5cGUpCisgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZiwgKnR5cGU7Cisg ICAgaW50IGNudCwgYnVmbGVuOworeworICAgIGNoYXIgbGJ1Zls2NF07CisgICAgcmVnaXN0ZXIg aW50IGk7CisgICAgY2hhciAqY3A7CisKKyAgICBidWZbYnVmbGVuLTFdID0gJ1wwJzsgICAgICAg ICAgICAgICAvKiBtYWtlIHN1cmUgaXQncyBOVUxMIHRlcm1pbmF0ZWQgKi8KKyAgICBidWZsZW4g LT0gMTsKKworICAgIHN3aXRjaChkYXRhWzJdKSB7CisgICAgY2FzZSBGQjY0X0lWOgorICAgICAg ICBzcHJpbnRmKGxidWYsICIlc19JViIsIHR5cGUpOworICAgICAgICBjcCA9IGxidWY7CisgICAg ICAgIGdvdG8gY29tbW9uOworCisgICAgY2FzZSBGQjY0X0lWX09LOgorICAgICAgICBzcHJpbnRm KGxidWYsICIlc19JVl9PSyIsIHR5cGUpOworICAgICAgICBjcCA9IGxidWY7CisgICAgICAgIGdv dG8gY29tbW9uOworCisgICAgY2FzZSBGQjY0X0lWX0JBRDoKKyAgICAgICAgc3ByaW50ZihsYnVm LCAiJXNfSVZfQkFEIiwgdHlwZSk7CisgICAgICAgIGNwID0gbGJ1ZjsKKyAgICAgICAgZ290byBj b21tb247CisKKyAgICBjYXNlIEZCNjRfQ0hBTExFTkdFOgorICAgICAgICBzcHJpbnRmKGxidWYs ICIlc19DSEFMTEVOR0UiLCB0eXBlKTsKKyAgICAgICAgY3AgPSBsYnVmOworICAgICAgICBnb3Rv IGNvbW1vbjsKKworICAgIGNhc2UgRkI2NF9SRVNQT05TRToKKyAgICAgICAgc3ByaW50ZihsYnVm LCAiJXNfUkVTUE9OU0UiLCB0eXBlKTsKKyAgICAgICAgY3AgPSBsYnVmOworICAgICAgICBnb3Rv IGNvbW1vbjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNwcmludGYobGJ1ZiwgIiAlZCAodW5r bm93bikiLCBkYXRhWzJdKTsKKyAgICAgICAgY3AgPSBsYnVmOworICAgICAgY29tbW9uOgorICAg ICAgICBmb3IgKDsgKGJ1ZmxlbiA+IDApICYmICgqYnVmID0gKmNwKyspOyBidWYrKykKKyAgICAg ICAgICAgIGJ1Zmxlbi0tOworICAgICAgICBmb3IgKGkgPSAzOyBpIDwgY250OyBpKyspIHsKKyAg ICAgICAgICAgIHNwcmludGYobGJ1ZiwgIiAlZCIsIGRhdGFbaV0pOworICAgICAgICAgICAgZm9y IChjcCA9IGxidWY7IChidWZsZW4gPiAwKSAmJiAoKmJ1ZiA9ICpjcCsrKTsgYnVmKyspCisgICAg ICAgICAgICAgICAgYnVmbGVuLS07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor fQorCit2b2lkCitkZXMzX2NmYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4pCisg ICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKKyAgICBpbnQgY250LCBidWZsZW47Cit7Cisg ICAgZGVzM19mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4sICJDRkI2NCIpOwor fQorCit2b2lkCitkZXMzX29mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4pCisg ICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKmJ1ZjsKKyAgICBpbnQgY250LCBidWZsZW47Cit7Cisg ICAgZGVzM19mYjY0X3ByaW50c3ViKGRhdGEsIGNudCwgYnVmLCBidWZsZW4sICJPRkI2NCIpOwor fQorI2VuZGlmCisKK3ZvaWQKK2RlczNfZmI2NF9zdHJlYW1faXYoc2VlZCwgc3RwKQorICAgIEJs b2NrIHNlZWQ7CisgICAgcmVnaXN0ZXIgc3RydWN0IGRlczNfc3RpbmZvICpzdHA7Cit7CisgICAg aW50IHJjPTAsIGkgPSAwOzsKKworICAgIG1lbWNweShzdHAtPnN0cl9pdiwgICAgIHNlZWQsIHNp emVvZihCbG9jaykpOworICAgIG1lbWNweShzdHAtPnN0cl9vdXRwdXQsIHNlZWQsIHNpemVvZihC bG9jaykpOworICAgIGZvciAoIGk9MDtpPDM7aSsrICkgeworICAgICAgICBtZW1zZXQoc3RwLT5z dHJfc2NoZWRbaV0sMCxzaXplb2YoU2NoZWR1bGUpKTsKKworICAgICAgICBja2hleGR1bXAoImRl czNfZmI2NF9zdHJlYW1faXYiLHN0cC0+c3RyX2lrZXlbaV0sOCk7CisKKyAgICAgICAgcmMgPSBk ZXNfa2V5X3NjaGVkKHN0cC0+c3RyX2lrZXlbaV0sIHN0cC0+c3RyX3NjaGVkW2ldKTsKKyAgICAg ICAgaWYgKCByYyA9PSAtMSApIHsKKyAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgREVTIGtl eSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24gW0RFUzMgaXZdXHJcbiIpOworICAgICAgICAgICAg ZGVidWcoRjExMCwiZGVzM19mYjY0X3N0cmVhbV9pdiIsCisgICAgICAgICAgICAgICAgICAgImlu dmFsaWQgREVTIEtleSBzcGVjaWZpZWQgZm9yIGVuY3J5cHRpb24iLDApOworICAgICAgICB9IGVs c2UgaWYgKCByYyA9PSAtMiApIHsKKyAgICAgICAgICAgIHByaW50ZigiP1dlYWsgREVTIGtleSBz cGVjaWZpZWQgZm9yIGVuY3J5cHRpb25cclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJk ZXMzX2ZiNjRfc3RyZWFtX2l2IiwKKyAgICAgICAgICAgICAgICAgICAid2VhayBERVMgS2V5IHNw ZWNpZmllZCBmb3IgZW5jcnlwdGlvbiIsMCk7CisgICAgICAgIH0gZWxzZSBpZiAoIHJjICE9IDAg KSB7CisgICAgICAgICAgICBwcmludGYoIj9LZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkgZW5j cnlwdGlvblxyXG4iKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImRlczNfZmI2NF9zdHJlYW1f aXYiLAorICAgICAgICAgICAgICAgICAgICJLZXkgU2NoZWR1bGUgbm90IGNyZWF0ZWQgYnkgZW5j cnlwdGlvbiIsMCk7CisgICAgICAgIH0KKyAgICAgICAgY2toZXhkdW1wKCJkZXMzX2ZiNjRfc3Ry ZWFtX2l2IHNjaGVkdWxlIixzdHAtPnN0cl9zY2hlZFtpXSw4KjE2KTsKKyAgICB9CisgICAgc3Rw LT5zdHJfaW5kZXggPSBzaXplb2YoQmxvY2spOworfQorCit2b2lkCitkZXMzX2ZiNjRfc3RyZWFt X2tleShrZXksIHN0cCkKKyAgICBCbG9jayAqIGtleTsKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVz M19zdGluZm8gKnN0cDsKK3sKKyAgICBpbnQgcmMgPSAwLCBpID0gMDsKKworICAgIGZvciAoIGk9 MDtpPDM7aSsrICkgeworICAgICAgICBtZW1jcHkoc3RwLT5zdHJfaWtleVtpXSwga2V5W2ldLCBz aXplb2YoQmxvY2spKTsKKworICAgICAgICBtZW1zZXQoc3RwLT5zdHJfc2NoZWRbaV0sMCxzaXpl b2YoU2NoZWR1bGUpKTsKKworICAgICAgICBja2hleGR1bXAoImRlczNfZmI2NF9zdHJlYW1fa2V5 IixrZXlbaV0sOCk7CisKKyAgICAgICAgcmMgPSBkZXNfa2V5X3NjaGVkKGtleVtpXSwgc3RwLT5z dHJfc2NoZWRbaV0pOworICAgICAgICBpZiAoIHJjID09IC0xICkgeworICAgICAgICAgICAgcHJp bnRmKCI/SW52YWxpZCBERVMga2V5IHNwZWNpZmllZCBmb3IgZW5jcnlwdGlvbiBbREVTMyBrZXld XHJcbiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwiZGVzM19mYjY0X3N0cmVhbV9rZXkiLAor ICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0 aW9uIiwwKTsKKyAgICAgICAgfSBlbHNlIGlmICggcmMgPT0gLTIgKSB7CisgICAgICAgICAgICBw cmludGYoIj9XZWFrIERFUyBrZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uXHJcbiIpOworICAg ICAgICAgICAgZGVidWcoRjExMCwiZGVzM19mYjY0X3N0cmVhbV9rZXkiLAorICAgICAgICAgICAg ICAgICAgICJ3ZWFrIERFUyBLZXkgc3BlY2lmaWVkIGZvciBlbmNyeXB0aW9uIiwwKTsKKyAgICAg ICAgfSBlbHNlIGlmICggcmMgIT0gMCApIHsKKyAgICAgICAgICAgIHByaW50ZigiP0tleSBTY2hl ZHVsZSBub3QgY3JlYXRlZCBieSBlbmNyeXB0aW9uXHJcbiIpOworICAgICAgICAgICAgZGVidWco RjExMCwiZGVzM19mYjY0X3N0cmVhbV9rZXkiLAorICAgICAgICAgICAgICAgICAgICJLZXkgU2No ZWR1bGUgbm90IGNyZWF0ZWQgYnkgZW5jcnlwdGlvbiIsMCk7CisgICAgICAgIH0KKyAgICAgICAg Y2toZXhkdW1wKCJkZXMzX2ZiNjRfc3RyZWFtX2tleSBzY2hlZHVsZSIsc3RwLT5zdHJfc2NoZWRb aV0sOCoxNik7CisgICAgfQorCisgICAgbWVtY3B5KHN0cC0+c3RyX291dHB1dCwgc3RwLT5zdHJf aXYsIHNpemVvZihCbG9jaykpOworICAgIHN0cC0+c3RyX2luZGV4ID0gc2l6ZW9mKEJsb2NrKTsK K30KKworLyoKKyAqIERFUzMgNjQgYml0IENpcGhlciBGZWVkYmFjaworICoKKyAqICAgICAgICAg ICAgICAgIGtleTEgICAgICAga2V5MiAgICAgICBrZXkzCisgKiAgICAgICAgICAgICAgICAgfCAg ICAgICAgICB8ICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICB2ICAgICAgICAgIHYgICAg ICAgICAgdgorICogICAgICAgICAgICAgKy0tLS0tLS0rICArLS0tLS0tLSsgICstLS0tLS0tKwor ICogICAgICAgICAgKy0+fCBERVMtZSB8LT58IERFUy1kIHwtPnwgREVTLWUgfC0tICsKKyAqICAg ICAgICAgIHwgICstLS0tLS0tKyAgKy0tLS0tLS0rICArLS0tLS0tLSsgICB8CisgKiAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICogIElOUFVUIC0tKC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPigrKSstLS0+IERBVEEKKyAqICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICAgICArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCisgKiBHaXZlbjoKKyAq ICAgICAgaVY6IEluaXRpYWwgdmVjdG9yLCA2NCBiaXRzICg4IGJ5dGVzKSBsb25nLgorICogICAg ICBEbjogdGhlIG50aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBkYXRhIHRvIGVuY3J5 cHQgKGRlY3J5cHQpLgorICogICAgICBPbjogdGhlIG50aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5 dGVzKSBvZiBlbmNyeXB0ZWQgKGRlY3J5cHRlZCkgb3V0cHV0LgorICoKKyAqICAgICAgVjAgPSBE RVMtZShERVMtZChERVMtZShpViwga2V5MSksa2V5Miksa2V5MykKKyAqICAgICAgT24gPSBEbiBe IFZuCisgKiAgICAgIFYobisxKSA9IERFUy1lKERFUy1kKERFUy1lKE9uLCBrZXkxKSxrZXkyKSxr ZXkzKQorICovCisKK3ZvaWQKK2RlczNfY2ZiNjRfZW5jcnlwdChzLCBjKQorICAgIHJlZ2lzdGVy IHVuc2lnbmVkIGNoYXIgKnM7CisgICAgaW50IGM7Cit7CisgICAgcmVnaXN0ZXIgc3RydWN0IGRl czNfc3RpbmZvICpzdHAgPSAmZGVzM19mYltDRkJdLnN0cmVhbXNbRElSX0VOQ1JZUFQtMV07Cisg ICAgcmVnaXN0ZXIgaW50IGluZGV4OworCisgICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleDsKKyAg ICB3aGlsZSAoYy0tID4gMCkgeworICAgICAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkg eworICAgICAgICAgICAgQmxvY2sgYjsKKyNpZmRlZiBMSUJERVMKKyAgICAgICAgICAgIGRlc19l Y2IzX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLCBzdHAtPnN0cl9zY2hlZFswXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzFdLCBzdHAtPnN0cl9zY2hl ZFsyXSwgMSk7CisjZWxzZSAvKiBMSUJERVMgKi8KKyAgICAgICAgICAgIGRlc19lY2JfZW5jcnlw dChzdHAtPnN0cl9vdXRwdXQsIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cC0+ c3RyX3NjaGVkWzBdLCAxKTsKKyAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9v dXRwdXQsIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzFd LCAwKTsKKyAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsKKyNlbmRp ZiAvKiBMSUJERVMgKi8KKyAgICAgICAgICAgIG1lbWNweShzdHAtPnN0cl9mZWVkLGIsc2l6ZW9m KEJsb2NrKSk7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAv KiBPbiBlbmNyeXB0aW9uLCB3ZSBzdG9yZSAoZmVlZCBeIGRhdGEpIHdoaWNoIGlzIGN5cGhlciAq LworICAgICAgICAqcyA9IHN0cC0+c3RyX291dHB1dFtpbmRleF0gPSAoc3RwLT5zdHJfZmVlZFtp bmRleF0gXiAqcyk7CisgICAgICAgIHMrKzsKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisgICAg c3RwLT5zdHJfaW5kZXggPSBpbmRleDsKK30KKworaW50CitkZXMzX2NmYjY0X2RlY3J5cHQoZGF0 YSkKKyAgICBpbnQgZGF0YTsKK3sKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzM19zdGluZm8gKnN0 cCA9ICZkZXMzX2ZiW0NGQl0uc3RyZWFtc1tESVJfREVDUllQVC0xXTsKKyAgICBpbnQgaW5kZXg7 CisKKyAgICBpZiAoZGF0YSA9PSAtMSkgeworICAgICAgICAvKgorICAgICAgICAqIEJhY2sgdXAg b25lIGJ5dGUuICBJdCBpcyBhc3N1bWVkIHRoYXQgd2Ugd2lsbAorICAgICAgICAqIG5ldmVyIGJh Y2sgdXAgbW9yZSB0aGFuIG9uZSBieXRlLiAgSWYgd2UgZG8sIHRoaXMKKyAgICAgICAgKiBtYXkg b3IgbWF5IG5vdCB3b3JrLgorICAgICAgICAqLworICAgICAgICBpZiAoc3RwLT5zdHJfaW5kZXgp CisgICAgICAgICAgICAtLXN0cC0+c3RyX2luZGV4OworICAgICAgICByZXR1cm4oMCk7CisgICAg fQorCisgICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleCsrOworICAgIGlmIChpbmRleCA9PSBzaXpl b2YoQmxvY2spKSB7CisgICAgICAgIEJsb2NrIGI7CisjaWZkZWYgTElCREVTCisgICAgICAgIGRl c19lY2IzX2VuY3J5cHQoc3RwLT5zdHJfb3V0cHV0LCBiLCBzdHAtPnN0cl9zY2hlZFswXSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0sIHN0cC0+c3RyX3NjaGVk WzJdLCAxKTsKKyNlbHNlIC8qIExJQkRFUyAqLworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0 KHN0cC0+c3RyX291dHB1dCwgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5z dHJfc2NoZWRbMF0sIDEpOworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291 dHB1dCwgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMV0s IDApOworICAgICAgICAgICAgZGVzX2VjYl9lbmNyeXB0KHN0cC0+c3RyX291dHB1dCwgYiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwLT5zdHJfc2NoZWRbMl0sIDEpOworI2VuZGlm IC8qIExJQkRFUyAqLworICAgICAgICBtZW1jcHkoc3RwLT5zdHJfZmVlZCwgYiwgc2l6ZW9mKEJs b2NrKSk7CisgICAgICAgIHN0cC0+c3RyX2luZGV4ID0gMTsgICAgIC8qIE5leHQgdGltZSB3aWxs IGJlIDEgKi8KKyAgICAgICAgaW5kZXggPSAwOyAgICAgICAgICAgICAgLyogQnV0IG5vdyB1c2Ug MCAqLworICAgIH0KKworICAgIC8qIE9uIGRlY3J5cHRpb24gd2Ugc3RvcmUgKGRhdGEpIHdoaWNo IGlzIGN5cGhlci4gKi8KKyAgICBzdHAtPnN0cl9vdXRwdXRbaW5kZXhdID0gZGF0YTsKKyAgICBy ZXR1cm4oZGF0YSBeIHN0cC0+c3RyX2ZlZWRbaW5kZXhdKTsKK30KKworLyoKKyAqIERFUzMgNjQg Yml0IE91dHB1dCBGZWVkYmFjaworICoKKyAqCisgKiAgICAgICAgICAgICAgICBrZXkxICAgICAg IGtleTIgICAgICAga2V5MworICogICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAg ICB8CisgKiAgICAgICAgICAgICAgICAgdiAgICAgICAgICB2ICAgICAgICAgIHYKKyAqICAgICAg ICAgICAgICstLS0tLS0tKyAgKy0tLS0tLS0rICArLS0tLS0tLSsKKyAqICAgICAgICAgICstPnwg REVTLWUgfC0+fCBERVMtZCB8LT58IERFUy1lIHwtLSArCisgKiAgICAgICAgICB8ICArLS0tLS0t LSsgICstLS0tLS0tKyAgKy0tLS0tLS0rICAgfAorICogICAgICAgICAgKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2CisgKiAgSU5QVVQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLT4oKykgLS0tLT4gREFUQQorICoKKyAqIEdpdmVuOgorICogICAgICBpVjogSW5p dGlhbCB2ZWN0b3IsIDY0IGJpdHMgKDggYnl0ZXMpIGxvbmcuCisgKiAgICAgIERuOiB0aGUgbnRo IGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGRhdGEgdG8gZW5jcnlwdCAoZGVjcnlwdCku CisgKiAgICAgIE9uOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGVuY3J5 cHRlZCAoZGVjcnlwdGVkKSBvdXRwdXQuCisgKgorICogICAgICBWMCA9IERFUy1lKERFUy1kKERF Uy1lKGlWLCBrZXkxKSxrZXkyKSxrZXkzKQorICogICAgICBWKG4rMSkgPSBERVMtZShERVMtZChE RVMtZShWbiwga2V5MSksa2V5Miksa2V5MykKKyAqICAgICAgT24gPSBEbiBeIFZuCisgKi8KK3Zv aWQKK2RlczNfb2ZiNjRfZW5jcnlwdChzLCBjKQorICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIg KnM7CisgICAgaW50IGM7Cit7CisgICAgcmVnaXN0ZXIgc3RydWN0IGRlczNfc3RpbmZvICpzdHAg PSAmZGVzM19mYltPRkJdLnN0cmVhbXNbRElSX0VOQ1JZUFQtMV07CisgICAgcmVnaXN0ZXIgaW50 IGluZGV4OworCisgICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleDsKKyAgICB3aGlsZSAoYy0tID4g MCkgeworICAgICAgICBpZiAoaW5kZXggPT0gc2l6ZW9mKEJsb2NrKSkgeworICAgICAgICAgICAg QmxvY2sgYjsKKyNpZmRlZiBMSUJERVMKKyAgICAgICAgICAgIGRlc19lY2IzX2VuY3J5cHQoc3Rw LT5zdHJfZmVlZCwgYiwgc3RwLT5zdHJfc2NoZWRbMF0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cC0+c3RyX3NjaGVkWzFdLCBzdHAtPnN0cl9zY2hlZFsyXSwgMSk7CisjZWxzZSAv KiBMSUJERVMgKi8KKyAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQs IGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzBdLCAxKTsK KyAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzFdLCAwKTsKKyAgICAgICAgICAg IGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsKKyNlbmRpZiAvKiBMSUJERVMgKi8KKyAg ICAgICAgICAgIG1lbWNweShzdHAtPnN0cl9mZWVkLGIsc2l6ZW9mKEJsb2NrKSk7CisgICAgICAg ICAgICBpbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgKnMrKyBePSBzdHAtPnN0cl9mZWVk W2luZGV4XTsKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisgICAgc3RwLT5zdHJfaW5kZXggPSBp bmRleDsKK30KKworaW50CitkZXMzX29mYjY0X2RlY3J5cHQoZGF0YSkKKyAgICBpbnQgZGF0YTsK K3sKKyAgICByZWdpc3RlciBzdHJ1Y3QgZGVzM19zdGluZm8gKnN0cCA9ICZkZXMzX2ZiW09GQl0u c3RyZWFtc1tESVJfREVDUllQVC0xXTsKKyAgICBpbnQgaW5kZXg7CisKKyAgICBpZiAoZGF0YSA9 PSAtMSkgeworICAgICAgICAvKgorICAgICAgICAqIEJhY2sgdXAgb25lIGJ5dGUuICBJdCBpcyBh c3N1bWVkIHRoYXQgd2Ugd2lsbAorICAgICAgICAqIG5ldmVyIGJhY2sgdXAgbW9yZSB0aGFuIG9u ZSBieXRlLiAgSWYgd2UgZG8sIHRoaXMKKyAgICAgICAgKiBtYXkgb3IgbWF5IG5vdCB3b3JrLgor ICAgICAgICAqLworICAgICAgICBpZiAoc3RwLT5zdHJfaW5kZXgpCisgICAgICAgICAgICAtLXN0 cC0+c3RyX2luZGV4OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgaW5kZXggPSBz dHAtPnN0cl9pbmRleCsrOworICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxvY2spKSB7CisgICAg ICAgIEJsb2NrIGI7CisjaWZkZWYgTElCREVTCisgICAgICAgIGRlc19lY2IzX2VuY3J5cHQoc3Rw LT5zdHJfZmVlZCwgYiwgc3RwLT5zdHJfc2NoZWRbMF0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cC0+c3RyX3NjaGVkWzFdLCBzdHAtPnN0cl9zY2hlZFsyXSwgMSk7CisjZWxzZSAvKiBM SUJERVMgKi8KKyAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzBdLCAxKTsKKyAg ICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cC0+c3RyX3NjaGVkWzFdLCAwKTsKKyAgICAgICAgICAgIGRl c19lY2JfZW5jcnlwdChzdHAtPnN0cl9vdXRwdXQsIGIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cC0+c3RyX3NjaGVkWzJdLCAxKTsKKyNlbmRpZiAvKiBMSUJERVMgKi8KKyAgICAg ICAgbWVtY3B5KHN0cC0+c3RyX2ZlZWQsIGIsIHNpemVvZihCbG9jaykpOworICAgICAgICBzdHAt PnN0cl9pbmRleCA9IDE7ICAgICAvKiBOZXh0IHRpbWUgd2lsbCBiZSAxICovCisgICAgICAgIGlu ZGV4ID0gMDsgICAgICAgICAgICAgIC8qIEJ1dCBub3cgdXNlIDAgKi8KKyAgICB9CisKKyAgICBy ZXR1cm4oZGF0YSBeIHN0cC0+c3RyX2ZlZWRbaW5kZXhdKTsKK30KKyNlbmRpZiAvKiBDS19ERVMg Ki8KKworI2lmZGVmIENLX0NBU1QKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCisg KiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAgIFRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAq ICAgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBO ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq IFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgU3RhbmZvcmQg VW5pdmVyc2l0eQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3Ry aWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBm b3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkCisg KiB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBhcHBlYXIgaW4KKyAqIGFsbCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCByZWxhdGVk IGRvY3VtZW50YXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUy1JUyIg QU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTLCBJTVBMSUVEIE9S IE9USEVSV0lTRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCisgKiBXQVJSQU5U WSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu CisgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgU1RBTkZPUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BF Q0lBTCwgSU5DSURFTlRBTCwKKyAqIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBP RiBBTlkgS0lORCwgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorICogUkVTVUxUSU5HIEZST00g TE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QgQURWSVNFRCBPRgor ICogVEhFIFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1Ig UEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4K KyNpZmRlZiAgX19TVERDX18KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisvKgorICog Y2FzdC5oCisgKiBBdXRob3I6IFRvbSBXdQorICoKKyAqIFR5cGUgYW5kIGZ1bmN0aW9uIGRlY2xh cmF0aW9ucyBmb3IgQ0FTVC4KKyAqLworCisjaWZuZGVmIF9DQVNUX0hfCisjZGVmaW5lIF9DQVNU X0hfCisKKyNpZm5kZWYgUAorI2lmZGVmIF9fU1REQ19fCisjZGVmaW5lIFAoeCkgeAorI2Vsc2UK KyNkZWZpbmUgUCh4KSAoKQorI2VuZGlmIC8qIF9fU1REQ19fICovCisjZW5kaWYgLyogUCAqLwor CisjaWZuZGVmIExJVFRMRV9FTkRJQU4KKyNpZm5kZWYgQklHX0VORElBTgorI2lmbmRlZiBXT1JE U19CSUdFTkRJQU4KKyNkZWZpbmUgTElUVExFX0VORElBTiAxCisjZW5kaWYgLyogV09SRFNfQklH RU5ESUFOICovCisjZW5kaWYgLyogQklHX0VORElBTiAqLworI2VuZGlmIC8qIExJVFRMRV9FTkRJ QU4gKi8KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyOyAgICAvKiBNdXN0IGJlIDMyIGJp dHMgKi8KK3R5cGVkZWYgdWludDMyICogdWludDMycDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1 aW50ODsKK3R5cGVkZWYgdWludDggKiB1aW50OHA7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3Ry dWN0IENhc3RTdWJrZXlQYWlyIHsKKyAgICB1aW50MzIgS207CisgICAgdWludDMyIEtyOworICB9 IEtbMTZdOworICBpbnQga3NpemU7Cit9IENhc3RLZXlTY2hlZDsKKworLyoKKyAqIGNhc3QqX2tl eV9zY2hlZChzY2hlZHVsZSwga2V5KQorICoKKyAqIEluaXRpYWxpemVzIHRoZSBDQVNUIGtleSBz Y2hlZHVsZSAic2NoZWR1bGUiIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4ga2V5LgorICogVGhlIGRp ZmZlcmVudCBzZXR1cCByb3V0aW5lcyBhY2NlcHQgZGlmZmVyZW50IGxlbmd0aCBrZXlzOgorICoK KyAqICAgY2tfY2FzdDVfNDBfa2V5X3NjaGVkOiA0MC1iaXQvNS1ieXRlICgxMiByb3VuZCkga2V5 cworICogICBja19jYXN0NV82NF9rZXlfc2NoZWQ6IDY0LWJpdC84LWJ5dGUgKDEyIHJvdW5kKSBr ZXlzCisgKiAgIGNrX2Nhc3Q1XzgwX2tleV9zY2hlZDogODAtYml0LzEwLWJ5dGUgKDEyIHJvdW5k KSBrZXlzCisgKiAgIGNrX2Nhc3QxMjhfa2V5X3NjaGVkOiAxMjgtYml0LzE2LWJ5dGUgKDE2IHJv dW5kKSBrZXlzCisgKi8KKworZXh0ZXJuIHZvaWQgY2tfY2FzdDVfNDBfa2V5X3NjaGVkIFAoKENh c3RLZXlTY2hlZCAqLCB1aW50OCAqKSk7CitleHRlcm4gdm9pZCBja19jYXN0NV82NF9rZXlfc2No ZWQgUCgoQ2FzdEtleVNjaGVkICosIHVpbnQ4ICopKTsKK2V4dGVybiB2b2lkIGNrX2Nhc3Q1Xzgw X2tleV9zY2hlZCBQKChDYXN0S2V5U2NoZWQgKiwgdWludDggKikpOworZXh0ZXJuIHZvaWQgIGNr X2Nhc3QxMjhfa2V5X3NjaGVkIFAoKENhc3RLZXlTY2hlZCAqLCB1aW50OCAqKSk7CisKKy8qCisg KiBja19jYXN0X2VjYl9lbmNyeXB0KG91dHB1dCwgaW5wdXQsIHNjaGVkdWxlLCBtb2RlKQorICog Y2tfY2FzdF9lY2JfY3J5cHQoZGF0YSwgc2NoZWR1bGUsIG1vZGUpCisgKgorICogRW5jcnlwdHMg dGhlIDY0LWJpdCAiaW5wdXQiIGFjY29yZGluZyB0byB0aGUgQ0FTVCBrZXkgc2NoZWR1bGUKKyAq ICJzY2hlZHVsZSIgYW5kIHBsYWNlcyB0aGUgcmVzdWx0IGluICJvdXRwdXQiLiAgSWYgIm1vZGUi IGlzIDAsCisgKiBja19jYXN0X2VjYl9lbmNyeXB0IHdpbGwgZW5jcnlwdCwgb3RoZXJ3aXNlIGl0 IHdpbGwgZGVjcnlwdC4KKyAqICJPdXRwdXQiIGFuZCAiaW5wdXQiIGNhbiBwb2ludCB0byB0aGUg c2FtZSBtZW1vcnksIGluIHdoaWNoIGNhc2UKKyAqIGVuL2RlY3J5cHRpb24gd2lsbCBiZSBwZXJm b3JtZWQgaW4gcGxhY2UuCisgKgorICogY2tfY2FzdF9lY2JfY3J5cHQgYWNjZXB0cyBpbnB1dCBp biB0aGUgZm9ybSBvZiBhbiBhcnJheSBvZiB0d28KKyAqIDMyLWJpdCB3b3JkcyBhbmQgcGVyZm9y bXMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIGluIHBsYWNlLgorICovCisKK2V4dGVybiB2b2lkIGNr X2Nhc3RfZWNiX2VuY3J5cHQgUCgodWludDggKiwgdWludDggKiwgQ2FzdEtleVNjaGVkICosIGlu dCkpOworZXh0ZXJuIHZvaWQgY2tfY2FzdF9lY2JfY3J5cHQgUCgodWludDMyICosIENhc3RLZXlT Y2hlZCAqLCBpbnQpKTsKKworI2VuZGlmIC8qIENBU1RfSCAqLworCitleHRlcm4gZW5jcnlwdF9k ZWJ1Z19tb2RlOworCisjZGVmaW5lIENGQl80MCAgMAorI2RlZmluZSBPRkJfNDAgIDEKKyNpZmRl ZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCisjZGVmaW5lIEZCX0NOVCAgMgorI2Vsc2UKKyNkZWZp bmUgQ0ZCXzEyOCAyCisjZGVmaW5lIE9GQl8xMjggMworI2RlZmluZSBGQl9DTlQgIDQKKyNlbmRp ZgorCisjZGVmaW5lIE5PX1NFTkRfSVYgICAgICAxCisjZGVmaW5lIE5PX1JFQ1ZfSVYgICAgICAy CisjZGVmaW5lIE5PX0tFWUlEICAgICAgICA0CisjZGVmaW5lIElOX1BST0dSRVNTICAgICAoTk9f U0VORF9JVnxOT19SRUNWX0lWfE5PX0tFWUlEKQorI2RlZmluZSBTVUNDRVNTICAgICAgICAgMAor I2RlZmluZSBjRkFJTEVEICAgICAgICAgLTEKKworCitzdHJ1Y3QgY2FzdF9mYiB7CisgICAgICAg IEJsb2NrIHRlbXBfZmVlZDsKKyAgICAgICAgdW5zaWduZWQgY2hhciBmYl9mZWVkWzY0XTsKKyAg ICAgICAgaW50IGtleV9pc3NldDsKKyAgICAgICAgaW50IG5lZWRfc3RhcnQ7CisgICAgICAgIGlu dCBzdGF0ZVsyXTsKKyAgICAgICAgc3RydWN0IGNhc3Rfc3RpbmZvIHsKKyAgICAgICAgICAgICAg ICBCbG9jayAgICAgICAgICAgc3RyX291dHB1dDsKKyAgICAgICAgICAgICAgICBCbG9jayAgICAg ICAgICAgc3RyX2ZlZWQ7CisgICAgICAgICAgICAgICAgQmxvY2sgICAgICAgICAgIHN0cl9pdjsK KyAgICAgICAgICAgICAgICBDYXN0S2V5U2NoZWQgICAgc3RyX3NjaGVkOworICAgICAgICAgICAg ICAgIGludCAgICAgICAgICAgICBzdHJfaW5kZXg7CisgICAgICAgIH0gc3RyZWFtc1syXTsKK307 CisKK3N0YXRpYyBzdHJ1Y3QgY2FzdF9mYiBjYXN0X2ZiW0ZCX0NOVF07CisKKyNkZWZpbmUgRkI2 NF9JViAgICAgICAgIDEKKyNkZWZpbmUgRkI2NF9JVl9PSyAgICAgIDIKKyNkZWZpbmUgRkI2NF9J Vl9CQUQgICAgIDMKKworCitzdGF0aWMgdm9pZCBjYXN0X2ZiNjRfc3RyZWFtX2l2IFAoKEJsb2Nr LCBzdHJ1Y3QgY2FzdF9zdGluZm8gKikpOworc3RhdGljIHZvaWQgY2FzdF9mYjY0X2luaXQgUCgo c3RydWN0IGNhc3RfZmIgKikpOworc3RhdGljIGludCBjYXN0X2ZiNjRfc3RhcnQgUCgoc3RydWN0 IGNhc3RfZmIgKiwgaW50LCBpbnQpKTsKK3N0YXRpYyBpbnQgY2FzdF9mYjY0X2lzIFAoKHVuc2ln bmVkIGNoYXIgKiwgaW50LCBzdHJ1Y3QgY2FzdF9mYiAqKSk7CitzdGF0aWMgaW50IGNhc3RfZmI2 NF9yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgc3RydWN0IGNhc3RfZmIgKikpOworc3Rh dGljIGludCBjYXN0X2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQsIHN0cnVjdCBj YXN0X2ZiICosIGludCkpOworc3RhdGljIHZvaWQgY2FzdF9mYjY0X3N0cmVhbV9rZXkgUCgoQmxv Y2ssIHN0cnVjdCBjYXN0X3N0aW5mbyAqLCBpbnQpKTsKK3N0YXRpYyBpbnQgY2FzdF9mYjY0X2tl eWlkIFAoKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQgKiwgc3RydWN0IGNhc3RfZmIgKikpOwor c3RhdGljIHZvaWQgX2Nhc3RfY2ZiNjRfZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosaW50LCBz dHJ1Y3QgY2FzdF9zdGluZm8gKikpOworc3RhdGljIGludCBfY2FzdF9jZmI2NF9kZWNyeXB0IFAo KGludCwgc3RydWN0IGNhc3Rfc3RpbmZvICopKTsKK3N0YXRpYyB2b2lkIF9jYXN0X29mYjY0X2Vu Y3J5cHQgUCgodW5zaWduZWQgY2hhciAqLGludCwgc3RydWN0IGNhc3Rfc3RpbmZvICopKTsKK3N0 YXRpYyBpbnQgX2Nhc3Rfb2ZiNjRfZGVjcnlwdCBQKChpbnQsIHN0cnVjdCBjYXN0X3N0aW5mbyAq KSk7CisKKyNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgordm9pZAorY2FzdF9jZmI2NF9p bml0KHNlcnZlcikKKyAgICAgICAgaW50IHNlcnZlcjsKK3sKKyAgICAgICAgY2FzdF9mYjY0X2lu aXQoJmNhc3RfZmJbQ0ZCXzEyOF0pOworICAgICAgICBjYXN0X2ZiW0NGQl8xMjhdLmZiX2ZlZWRb NF0gPSBFTkNUWVBFX0NBU1QxMjhfQ0ZCNjQ7Cit9CisKK3ZvaWQKK2Nhc3Rfb2ZiNjRfaW5pdChz ZXJ2ZXIpCisgICAgICAgIGludCBzZXJ2ZXI7Cit7CisgICAgICAgIGNhc3RfZmI2NF9pbml0KCZj YXN0X2ZiW09GQl8xMjhdKTsKKyAgICAgICAgY2FzdF9mYltPRkJfMTI4XS5mYl9mZWVkWzRdID0g RU5DVFlQRV9DQVNUMTI4X09GQjY0OworfQorI2VuZGlmCisKK3ZvaWQKK2Nhc3RleHBfY2ZiNjRf aW5pdChzZXJ2ZXIpCisgICAgICAgIGludCBzZXJ2ZXI7Cit7CisgICAgICAgIGNhc3RfZmI2NF9p bml0KCZjYXN0X2ZiW0NGQl80MF0pOworICAgICAgICBjYXN0X2ZiW0NGQl80MF0uZmJfZmVlZFs0 XSA9IEVOQ1RZUEVfQ0FTVDVfNDBfQ0ZCNjQ7Cit9CisKK3ZvaWQKK2Nhc3RleHBfb2ZiNjRfaW5p dChzZXJ2ZXIpCisgICAgICAgIGludCBzZXJ2ZXI7Cit7CisgICAgICAgIGNhc3RfZmI2NF9pbml0 KCZjYXN0X2ZiW09GQl80MF0pOworICAgICAgICBjYXN0X2ZiW09GQl80MF0uZmJfZmVlZFs0XSA9 IEVOQ1RZUEVfQ0FTVDVfNDBfT0ZCNjQ7Cit9CisKK3N0YXRpYyB2b2lkCitjYXN0X2ZiNjRfaW5p dChmYnApCisgICAgcmVnaXN0ZXIgc3RydWN0IGNhc3RfZmIgKmZicDsKK3sKKyAgICBtZW1zZXQo KHZvaWQgKilmYnAsIDAsIHNpemVvZigqZmJwKSk7CisgICAgZmJwLT5rZXlfaXNzZXQgPSAwOwor ICAgIGZicC0+c3RhdGVbMF0gPSBmYnAtPnN0YXRlWzFdID0gY0ZBSUxFRDsKKyAgICBmYnAtPmZi X2ZlZWRbMF0gPSBJQUM7CisgICAgZmJwLT5mYl9mZWVkWzFdID0gU0I7CisgICAgZmJwLT5mYl9m ZWVkWzJdID0gVEVMT1BUX0VOQ1JZUFRJT047CisgICAgZmJwLT5mYl9mZWVkWzNdID0gRU5DUllQ VF9JUzsKK30KKworLyoKKyAqIFJldHVybnM6CisgKiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVn b3RpYXRpb24gaXMgZG9uZSwgZW5jcnlwdGlvbiBub3QgcmVhZHkuCisgKiAgICAgICAwOiBTdWNj ZXNzZnVsLCBpbml0aWFsIG5lZ290aWF0aW9uIGFsbCBkb25lLgorICogICAgICAgMTogc3VjY2Vz c2Z1bCwgbmVnb3RpYXRpb24gbm90IGRvbmUgeWV0LgorICogICAgICAgMjogTm90IHlldC4gIE90 aGVyIHRoaW5ncyAobGlrZSBnZXR0aW5nIHRoZSBrZXkgZnJvbQorICogICAgICAgICAgS2VyYmVy b3MpIGhhdmUgdG8gaGFwcGVuIGJlZm9yZSB3ZSBjYW4gY29udGludWUuCisgKi8KKyNpZm5kZWYg Q0FTVF9FWFBPUlRfRU5DUllQVElPTgoraW50CitjYXN0X2NmYjY0X3N0YXJ0KGRpciwgc2VydmVy KQorICAgIGludCBkaXI7CisgICAgaW50IHNlcnZlcjsKK3sKKyAgICByZXR1cm4oY2FzdF9mYjY0 X3N0YXJ0KCZjYXN0X2ZiW0NGQl8xMjhdLCBkaXIsIHNlcnZlcikpOworfQorCitpbnQKK2Nhc3Rf b2ZiNjRfc3RhcnQoZGlyLCBzZXJ2ZXIpCisgICAgaW50IGRpcjsKKyAgICBpbnQgc2VydmVyOwor eworICAgIHJldHVybihjYXN0X2ZiNjRfc3RhcnQoJmNhc3RfZmJbT0ZCXzEyOF0sIGRpciwgc2Vy dmVyKSk7Cit9CisjZW5kaWYKKworaW50CitjYXN0ZXhwX2NmYjY0X3N0YXJ0KGRpciwgc2VydmVy KQorICAgIGludCBkaXI7CisgICAgaW50IHNlcnZlcjsKK3sKKyAgICByZXR1cm4oY2FzdF9mYjY0 X3N0YXJ0KCZjYXN0X2ZiW0NGQl80MF0sIGRpciwgc2VydmVyKSk7Cit9CisKK2ludAorY2FzdGV4 cF9vZmI2NF9zdGFydChkaXIsIHNlcnZlcikKKyAgICBpbnQgZGlyOworICAgIGludCBzZXJ2ZXI7 Cit7CisgICAgcmV0dXJuKGNhc3RfZmI2NF9zdGFydCgmY2FzdF9mYltPRkJfNDBdLCBkaXIsIHNl cnZlcikpOworfQorCitzdGF0aWMgaW50CitjYXN0X2ZiNjRfc3RhcnQoZmJwLCBkaXIsIHNlcnZl cikKKyAgICBzdHJ1Y3QgY2FzdF9mYiAqZmJwOworICAgIGludCBkaXI7CisgICAgaW50IHNlcnZl cjsKK3sKKyAgICBCbG9jayBiOworICAgIGludCB4OworICAgIHVuc2lnbmVkIGNoYXIgKnA7Cisg ICAgcmVnaXN0ZXIgaW50IHN0YXRlOworCisgICAgc3dpdGNoIChkaXIpIHsKKyAgICBjYXNlIERJ Ul9ERUNSWVBUOgorICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIHNpbXBseSBhIHJlcXVl c3QgdG8gaGF2ZSB0aGUgb3RoZXIgc2lkZQorICAgICAgICAgKiBzdGFydCBvdXRwdXQgKG91ciBp bnB1dCkuICBIZSB3aWxsIG5lZ290aWF0ZSBhbgorICAgICAgICAgKiBJViBzbyB3ZSBuZWVkIG5v dCBsb29rIGZvciBpdC4KKyAgICAgICAgICovCisgICAgICAgIHN0YXRlID0gZmJwLT5zdGF0ZVtk aXItMV07CisgICAgICAgIGlmIChzdGF0ZSA9PSBjRkFJTEVEKQorICAgICAgICAgICAgc3RhdGUg PSBJTl9QUk9HUkVTUzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERJUl9FTkNSWVBUOgor ICAgICAgICBzdGF0ZSA9IGZicC0+c3RhdGVbZGlyLTFdOworICAgICAgICBpZiAoc3RhdGUgPT0g Y0ZBSUxFRCkKKyAgICAgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7CisgICAgICAgIGVsc2Ug aWYgKChzdGF0ZSAmIE5PX1NFTkRfSVYpID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAg ICAgICBpZiAoIWZicC0+a2V5X2lzc2V0KSB7CisgICAgICAgICAgICBmYnAtPm5lZWRfc3RhcnQg PSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUgJj0gfk5P X1NFTkRfSVY7CisgICAgICAgIHN0YXRlIHw9IE5PX1JFQ1ZfSVY7CisjaWZkZWYgREVCVUcKKyAg ICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiQ3JlYXRp bmcgbmV3IGZlZWRcclxuIik7CisjZW5kaWYKKyAgICAgICAgLyoKKyAgICAgICAgICogQ3JlYXRl IGEgcmFuZG9tIGZlZWQgYW5kIHNlbmQgaXQgb3Zlci4KKyAgICAgICAgICovCisgICAgICAgIGNr X2Nhc3RfZWNiX2VuY3J5cHQoZmJwLT50ZW1wX2ZlZWQsIGZicC0+dGVtcF9mZWVkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAmZmJwLT5zdHJlYW1zW2Rpci0xXS5zdHJfc2NoZWQsIDApOwor CisgICAgICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOworICAgICAgICAqcCsrID0gRU5DUllQVF9J UzsKKyAgICAgICAgcCsrOworICAgICAgICAqcCsrID0gRkI2NF9JVjsKKyAgICAgICAgZm9yICh4 ID0gMDsgeCA8IHNpemVvZihCbG9jayk7ICsreCkgeworICAgICAgICAgICAgaWYgKCgqcCsrID0g ZmJwLT50ZW1wX2ZlZWRbeF0pID09IElBQykKKyAgICAgICAgICAgICAgICAqcCsrID0gSUFDOwor ICAgICAgICB9CisgICAgICAgICpwKysgPSBJQUM7CisgICAgICAgICpwKysgPSBTRTsKKworICAg ICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7CisgICAgICAgIGJyZWFr OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybihjRkFJTEVEKTsKKyAgICB9CisgICAgcmV0 dXJuKGZicC0+c3RhdGVbZGlyLTFdID0gc3RhdGUpOworfQorCisvKgorICogUmV0dXJuczoKKyAq ICAgICAgLTE6IHNvbWUgZXJyb3IuICBOZWdvdGlhdGlvbiBpcyBkb25lLCBlbmNyeXB0aW9uIG5v dCByZWFkeS4KKyAqICAgICAgIDA6IFN1Y2Nlc3NmdWwsIGluaXRpYWwgbmVnb3RpYXRpb24gYWxs IGRvbmUuCisgKiAgICAgICAxOiBzdWNjZXNzZnVsLCBuZWdvdGlhdGlvbiBub3QgZG9uZSB5ZXQu CisgKi8KKyNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgoraW50CitjYXN0X2NmYjY0X2lz KGRhdGEsIGNudCkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7Cit7Cisg ICAgcmV0dXJuKGNhc3RfZmI2NF9pcyhkYXRhLCBjbnQsICZjYXN0X2ZiW0NGQl8xMjhdKSk7Cit9 CisKK2ludAorY2FzdF9vZmI2NF9pcyhkYXRhLCBjbnQpCisgICAgdW5zaWduZWQgY2hhciAqZGF0 YTsKKyAgICBpbnQgY250OworeworICAgIHJldHVybihjYXN0X2ZiNjRfaXMoZGF0YSwgY250LCAm Y2FzdF9mYltPRkJfMTI4XSkpOworfQorI2VuZGlmCisKK2ludAorY2FzdGV4cF9jZmI2NF9pcyhk YXRhLCBjbnQpCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250OworeworICAg IHJldHVybihjYXN0X2ZiNjRfaXMoZGF0YSwgY250LCAmY2FzdF9mYltDRkJfNDBdKSk7Cit9CisK K2ludAorY2FzdGV4cF9vZmI2NF9pcyhkYXRhLCBjbnQpCisgICAgdW5zaWduZWQgY2hhciAqZGF0 YTsKKyAgICBpbnQgY250OworeworICAgIHJldHVybihjYXN0X2ZiNjRfaXMoZGF0YSwgY250LCAm Y2FzdF9mYltPRkJfNDBdKSk7Cit9CisKK3N0YXRpYyBpbnQKK2Nhc3RfZmI2NF9pcyhkYXRhLCBj bnQsIGZicCkKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIGludCBjbnQ7CisgICAgc3Ry dWN0IGNhc3RfZmIgKmZicDsKK3sKKyAgICBpbnQgeDsKKyAgICB1bnNpZ25lZCBjaGFyICpwOwor ICAgIEJsb2NrIGI7CisgICAgcmVnaXN0ZXIgaW50IHN0YXRlID0gZmJwLT5zdGF0ZVtESVJfREVD UllQVC0xXTsKKworICAgIGlmIChjbnQtLSA8IDEpCisgICAgICAgIGdvdG8gZmFpbHVyZTsKKwor I2lmZGVmIENLX1NTTAorICAgIGlmICghVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0 X3Rscy5tZV9mb2xsb3dzKQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIHN3aXRjaCAoKmRhdGEr KykgeworICAgIGNhc2UgRkI2NF9JVjoKKyAgICAgICAgaWYgKGNudCAhPSBzaXplb2YoQmxvY2sp KSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChlbmNyeXB0X2RlYnVnX21vZGUpCisg ICAgICAgICAgICAgICAgcHJpbnRmKCJGQjY0OiBpbml0aWFsIHZlY3RvciBmYWlsZWQgb24gc2l6 ZVxyXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgc3RhdGUgPSBjRkFJTEVEOworICAgICAgICAg ICAgZ290byBmYWlsdXJlOworICAgICAgICB9CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGVu Y3J5cHRfZGVidWdfbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiRkI2NDogaW5pdGlhbCB2ZWN0 b3IgcmVjZWl2ZWRcclxuIik7CisKKyAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkKKyAg ICAgICAgICAgIHByaW50ZigiSW5pdGlhbGl6aW5nIERlY3J5cHQgc3RyZWFtXHJcbiIpOworI2Vu ZGlmCisgICAgICAgIGNhc3RfZmI2NF9zdHJlYW1faXYoKHZvaWQgKilkYXRhLCAmZmJwLT5zdHJl YW1zW0RJUl9ERUNSWVBULTFdKTsKKworICAgICAgICBwID0gZmJwLT5mYl9mZWVkICsgMzsKKyAg ICAgICAgKnArKyA9IEVOQ1JZUFRfUkVQTFk7CisgICAgICAgIHArKzsKKyAgICAgICAgKnArKyA9 IEZCNjRfSVZfT0s7CisgICAgICAgICpwKysgPSBJQUM7CisgICAgICAgICpwKysgPSBTRTsKKwor ICAgICAgICB0dG9sKGZicC0+ZmJfZmVlZCwgcCAtIGZicC0+ZmJfZmVlZCk7CisgICAgICAgIHN0 YXRlID0gSU5fUFJPR1JFU1M7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg ICAgLyogdW5rbm93biBvcHRpb24gdHlwZSAqLworICAgICAgICAvKiBGQUxMIFRIUk9VR0ggKi8K KyAgICAgIGZhaWx1cmU6CisgICAgICAgIC8qCisgICAgICAgICogV2UgZmFpbGVkLiAgU2VuZCBh biBGQjY0X0lWX0JBRCBvcHRpb24KKyAgICAgICAgKiB0byB0aGUgb3RoZXIgc2lkZSBzbyBpdCB3 aWxsIGtub3cgdGhhdAorICAgICAgICAqIHRoaW5ncyBmYWlsZWQuCisgICAgICAgICovCisgICAg ICAgIHAgPSBmYnAtPmZiX2ZlZWQgKyAzOworICAgICAgICAqcCsrID0gRU5DUllQVF9SRVBMWTsK KyAgICAgICAgcCsrOworICAgICAgICAqcCsrID0gRkI2NF9JVl9CQUQ7CisgICAgICAgICpwKysg PSBJQUM7CisgICAgICAgICpwKysgPSBTRTsKKworICAgICAgICB0dG9sKGZicC0+ZmJfZmVlZCwg cCAtIGZicC0+ZmJfZmVlZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4oZmJw LT5zdGF0ZVtESVJfREVDUllQVC0xXSA9IHN0YXRlKTsKK30KKworLyoKKyAqIFJldHVybnM6Cisg KiAgICAgIC0xOiBzb21lIGVycm9yLiAgTmVnb3RpYXRpb24gaXMgZG9uZSwgZW5jcnlwdGlvbiBu b3QgcmVhZHkuCisgKiAgICAgICAwOiBTdWNjZXNzZnVsLCBpbml0aWFsIG5lZ290aWF0aW9uIGFs bCBkb25lLgorICogICAgICAgMTogc3VjY2Vzc2Z1bCwgbmVnb3RpYXRpb24gbm90IGRvbmUgeWV0 LgorICovCisjaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KK2ludAorY2FzdF9jZmI2NF9y ZXBseShkYXRhLCBjbnQpCisgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICBpbnQgY250Owor eworICAgIHJldHVybihjYXN0X2ZiNjRfcmVwbHkoZGF0YSwgY250LCAmY2FzdF9mYltDRkJfMTI4 XSkpOworfQorCitpbnQKK2Nhc3Rfb2ZiNjRfcmVwbHkoZGF0YSwgY250KQorICAgIHVuc2lnbmVk IGNoYXIgKmRhdGE7CisgICAgaW50IGNudDsKK3sKKyAgICByZXR1cm4oY2FzdF9mYjY0X3JlcGx5 KGRhdGEsIGNudCwgJmNhc3RfZmJbT0ZCXzEyOF0pKTsKK30KKyNlbmRpZgorCitpbnQKK2Nhc3Rl eHBfY2ZiNjRfcmVwbHkoZGF0YSwgY250KQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAg aW50IGNudDsKK3sKKyAgICByZXR1cm4oY2FzdF9mYjY0X3JlcGx5KGRhdGEsIGNudCwgJmNhc3Rf ZmJbQ0ZCXzQwXSkpOworfQorCitpbnQKK2Nhc3RleHBfb2ZiNjRfcmVwbHkoZGF0YSwgY250KQor ICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgaW50IGNudDsKK3sKKyAgICByZXR1cm4oY2Fz dF9mYjY0X3JlcGx5KGRhdGEsIGNudCwgJmNhc3RfZmJbT0ZCXzQwXSkpOworfQorCitzdGF0aWMg aW50CitjYXN0X2ZiNjRfcmVwbHkoZGF0YSwgY250LCBmYnApCisgICAgdW5zaWduZWQgY2hhciAq ZGF0YTsKKyAgICBpbnQgY250OworICAgIHN0cnVjdCBjYXN0X2ZiICpmYnA7Cit7CisgICAgaW50 IHg7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICBCbG9jayBiOworICAgIHJlZ2lzdGVyIGlu dCBzdGF0ZSA9IGZicC0+c3RhdGVbRElSX0VOQ1JZUFQtMV07CisKKyAgICBpZiAoY250LS0gPCAx KQorICAgICAgICBnb3RvIGZhaWx1cmU7CisKKyAgICBzd2l0Y2ggKCpkYXRhKyspIHsKKyAgICBj YXNlIEZCNjRfSVZfT0s6CisgICAgICAgIGNhc3RfZmI2NF9zdHJlYW1faXYoZmJwLT50ZW1wX2Zl ZWQsICZmYnAtPnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOworICAgICAgICBpZiAoc3RhdGUgPT0g Y0ZBSUxFRCkKKyAgICAgICAgICAgIHN0YXRlID0gSU5fUFJPR1JFU1M7CisgICAgICAgIHN0YXRl ICY9IH5OT19SRUNWX0lWOworICAgICAgICBlbmNyeXB0X3NlbmRfa2V5aWQoRElSX0VOQ1JZUFQs ICh1bnNpZ25lZCBjaGFyICopIlwwIiwgMSwgMSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz ZSBGQjY0X0lWX0JBRDoKKyAgICAgICAgbWVtc2V0KGZicC0+dGVtcF9mZWVkLCAwLCBzaXplb2Yo QmxvY2spKTsKKyAgICAgICAgY2FzdF9mYjY0X3N0cmVhbV9pdihmYnAtPnRlbXBfZmVlZCwgJmZi cC0+c3RyZWFtc1tESVJfRU5DUllQVC0xXSk7CisgICAgICAgIHN0YXRlID0gY0ZBSUxFRDsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorI2lmIDAKKyAgICAgICAgaWYgKGVuY3J5cHRf ZGVidWdfbW9kZSkgeworICAgICAgICAgICAgcHJpbnRmKCJVbmtub3duIG9wdGlvbiB0eXBlOiAl ZFxyXG4iLCBkYXRhWy0xXSk7CisgICAgICAgICAgICBwcmludGQoZGF0YSwgY250KTsKKyAgICAg ICAgICAgIHByaW50ZigiXHJcbiIpOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgLyogRkFM TCBUSFJPVUdIICovCisgICAgICBmYWlsdXJlOgorICAgICAgICBzdGF0ZSA9IGNGQUlMRUQ7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4oZmJwLT5zdGF0ZVtESVJfRU5DUllQVC0x XSA9IHN0YXRlKTsKK30KKworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCitpbnQKK2Nh c3RfY2ZiNjRfc2Vzc2lvbihrZXksIHNlcnZlcikKKyAgICBTZXNzaW9uX0tleSAqa2V5OworICAg IGludCBzZXJ2ZXI7Cit7CisgICAgcmV0dXJuKGNhc3RfZmI2NF9zZXNzaW9uKGtleSwgc2VydmVy LCAmY2FzdF9mYltDRkJfMTI4XSwgMSkpOworfQorCitpbnQKK2Nhc3Rfb2ZiNjRfc2Vzc2lvbihr ZXksIHNlcnZlcikKKyAgICBTZXNzaW9uX0tleSAqa2V5OworICAgIGludCBzZXJ2ZXI7Cit7Cisg ICAgcmV0dXJuKGNhc3RfZmI2NF9zZXNzaW9uKGtleSwgc2VydmVyLCAmY2FzdF9mYltPRkJfMTI4 XSwgMSkpOworfQorI2VuZGlmCisKK2ludAorY2FzdGV4cF9jZmI2NF9zZXNzaW9uKGtleSwgc2Vy dmVyKQorICAgIFNlc3Npb25fS2V5ICprZXk7CisgICAgaW50IHNlcnZlcjsKK3sKKyAgICByZXR1 cm4oY2FzdF9mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIsICZjYXN0X2ZiW0NGQl80MF0sIDApKTsK K30KKworaW50CitjYXN0ZXhwX29mYjY0X3Nlc3Npb24oa2V5LCBzZXJ2ZXIpCisgICAgU2Vzc2lv bl9LZXkgKmtleTsKKyAgICBpbnQgc2VydmVyOworeworICAgIHJldHVybihjYXN0X2ZiNjRfc2Vz c2lvbihrZXksIHNlcnZlciwgJmNhc3RfZmJbT0ZCXzQwXSwgMCkpOworfQorCisjZGVmaW5lIENB U1QxMjhfS0VZTEVOICAxNiAgICAgIC8qIDEyOCBiaXRzICovCisjZGVmaW5lIENBU1Q1XzQwX0tF WUxFTiAgNSAgICAgIC8qICA0MCBiaXRzICovCisKK3N0YXRpYyBpbnQKK2Nhc3RfZmI2NF9zZXNz aW9uKGtleSwgc2VydmVyLCBmYnAsIGZzKQorICAgIFNlc3Npb25fS2V5ICprZXk7CisgICAgaW50 IHNlcnZlcjsKKyAgICBzdHJ1Y3QgY2FzdF9mYiAqZmJwOworICAgIGludCBmczsKK3sKKyAgICBp bnQga2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyICoga3B0cjsKKworICAgIGlmKGZzKQorICAgICAg ICBrbGVuID0gQ0FTVDEyOF9LRVlMRU47CisgICAgZWxzZQorICAgICAgICBrbGVuID0gQ0FTVDVf NDBfS0VZTEVOOworCisgICAgaWYgKCFrZXkgfHwga2V5LT5sZW5ndGggPCBrbGVuKSB7CisgICAg ICAgIENIQVIgYnVmWzgwXTsKKyAgICAgICAgc3ByaW50ZigoY2hhciAqKWJ1ZiwiQ2FuJ3Qgc2V0 IENBU1Qgc2Vzc2lvbiBrZXkgKCVkIDwgJWQpIiwKKyAgICAgICAgICAgICAgICBrZXkgPyBrZXkt Pmxlbmd0aCA6IDAsIGtsZW4pOyAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisjaWZkZWYg REVCVUcKKyAgICAgICAgaWYgKGVuY3J5cHRfZGVidWdfbW9kZSkKKyAgICAgICAgICAgIHByaW50 ZigiJXNcclxuIixidWYpOworI2VuZGlmCisgICAgICAgIGRlYnVnKEYxMTAsImNhc3RfZmI2NF9z ZXNzaW9uIixidWYsMCk7CisgICAgICAgIHJldHVybihjRkFJTEVEKTsKKyAgICB9CisgICAgaWYo a2V5LT5sZW5ndGggPCAyICoga2xlbikKKyAgICAgICAga3B0ciA9IGtleS0+ZGF0YTsKKyAgICBl bHNlCisgICAgICAgIGtwdHIgPSBrZXktPmRhdGEgKyBrbGVuOworCisgICAgaWYoc2VydmVyKSB7 CisgICAgICAgIGNhc3RfZmI2NF9zdHJlYW1fa2V5KGtwdHIsICZmYnAtPnN0cmVhbXNbRElSX0VO Q1JZUFQtMV0sIGZzKTsKKyAgICAgICAgY2FzdF9mYjY0X3N0cmVhbV9rZXkoa2V5LT5kYXRhLCAm ZmJwLT5zdHJlYW1zW0RJUl9ERUNSWVBULTFdLCBmcyk7CisgICAgfQorICAgIGVsc2UgeworICAg ICAgICBjYXN0X2ZiNjRfc3RyZWFtX2tleShrcHRyLCAmZmJwLT5zdHJlYW1zW0RJUl9ERUNSWVBU LTFdLCBmcyk7CisgICAgICAgIGNhc3RfZmI2NF9zdHJlYW1fa2V5KGtleS0+ZGF0YSwgJmZicC0+ c3RyZWFtc1tESVJfRU5DUllQVC0xXSwgZnMpOworICAgIH0KKworICAgIC8qIFN0dWZmIGxlZnRv dmVycyBpbnRvIHRoZSBmZWVkICovCisgICAgaWYoa2V5LT5sZW5ndGggPj0gMiAqIGtsZW4gKyBz aXplb2YoQmxvY2spKQorICAgICAgICBtZW1jcHkoZmJwLT50ZW1wX2ZlZWQsIGtleS0+ZGF0YSAr IDIgKiBrbGVuLCBzaXplb2YoQmxvY2spKTsKKyAgICBlbHNlIHsKKyNpZmRlZiBDT01NRU5UCisg ICAgICAgIC8qIFRoaXMgaXMgYSBiZXR0ZXIgd2F5IG9mIGVyYXNpbmcgdGhlIHBhc3N3b3JkICov CisgICAgICAgIC8qIGJ1dCB3ZSBkbyBub3Qgd2FudCB0byBsaW5rIGluIGxpYnNycCAgICAgICAg ICovCisgICAgICAgIHRfcmFuZG9tKGZicC0+dGVtcF9mZWVkLCBzaXplb2YoQmxvY2spKTsKKyNl bHNlCisgICAgICAgIG1lbXNldChmYnAtPnRlbXBfZmVlZCwgMCwgc2l6ZW9mKEJsb2NrKSk7Cisj ZW5kaWYKKyAgICB9CisKKyAgICBmYnAtPmtleV9pc3NldCA9IDE7CisgICAgLyoKKyAgICAqIE5v dyBsb29rIHRvIHNlZSBpZiBjYXN0X2ZiNjRfc3RhcnQoKSB3YXMgd2FzIHdhaXRpbmcgZm9yCisg ICAgKiB0aGUga2V5IHRvIHNob3cgdXAuICBJZiBzbywgZ28gYWhlYWQgYW4gY2FsbCBpdCBub3cK KyAgICAqIHRoYXQgd2UgaGF2ZSB0aGUga2V5LgorICAgICovCisgICAgaWYgKGZicC0+bmVlZF9z dGFydCkgeworICAgICAgICBmYnAtPm5lZWRfc3RhcnQgPSAwOworICAgICAgICBjYXN0X2ZiNjRf c3RhcnQoZmJwLCBESVJfRU5DUllQVCwgc2VydmVyKTsKKyAgICB9CisgICAgcmV0dXJuKDApOwor fQorCisvKgorICogV2Ugb25seSBhY2NlcHQgYSBrZXlpZCBvZiAwLiAgSWYgd2UgZ2V0IGEga2V5 aWQgb2YKKyAqIDAsIHRoZW4gbWFyayB0aGUgc3RhdGUgYXMgU1VDQ0VTUy4KKyAqLworI2lmbmRl ZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCitpbnQKK2Nhc3RfY2ZiNjRfa2V5aWQoZGlyLCBrcCwg bGVucCkKKyAgICBpbnQgZGlyLCAqbGVucDsKKyAgICB1bnNpZ25lZCBjaGFyICprcDsKK3sKKyAg ICByZXR1cm4oY2FzdF9mYjY0X2tleWlkKGRpciwga3AsIGxlbnAsICZjYXN0X2ZiW0NGQl8xMjhd KSk7Cit9CisKK2ludAorY2FzdF9vZmI2NF9rZXlpZChkaXIsIGtwLCBsZW5wKQorICAgIGludCBk aXIsICpsZW5wOworICAgIHVuc2lnbmVkIGNoYXIgKmtwOworeworICAgIHJldHVybihjYXN0X2Zi NjRfa2V5aWQoZGlyLCBrcCwgbGVucCwgJmNhc3RfZmJbT0ZCXzEyOF0pKTsKK30KKyNlbmRpZgor CitpbnQKK2Nhc3RleHBfY2ZiNjRfa2V5aWQoZGlyLCBrcCwgbGVucCkKKyAgICBpbnQgZGlyLCAq bGVucDsKKyAgICB1bnNpZ25lZCBjaGFyICprcDsKK3sKKyAgICByZXR1cm4oY2FzdF9mYjY0X2tl eWlkKGRpciwga3AsIGxlbnAsICZjYXN0X2ZiW0NGQl80MF0pKTsKK30KKworaW50CitjYXN0ZXhw X29mYjY0X2tleWlkKGRpciwga3AsIGxlbnApCisgICAgaW50IGRpciwgKmxlbnA7CisgICAgdW5z aWduZWQgY2hhciAqa3A7Cit7CisgICAgcmV0dXJuKGNhc3RfZmI2NF9rZXlpZChkaXIsIGtwLCBs ZW5wLCAmY2FzdF9mYltPRkJfNDBdKSk7Cit9CisKK3N0YXRpYyBpbnQKK2Nhc3RfZmI2NF9rZXlp ZChkaXIsIGtwLCBsZW5wLCBmYnApCisgICAgaW50IGRpciwgKmxlbnA7CisgICAgdW5zaWduZWQg Y2hhciAqa3A7CisgICAgc3RydWN0IGNhc3RfZmIgKmZicDsKK3sKKyAgICByZWdpc3RlciBpbnQg c3RhdGUgPSBmYnAtPnN0YXRlW2Rpci0xXTsKKworICAgIGlmICgqbGVucCAhPSAxIHx8ICgqa3Ag IT0gJ1wwJykpIHsKKyAgICAgICAgKmxlbnAgPSAwOworICAgICAgICByZXR1cm4oc3RhdGUpOwor ICAgIH0KKworICAgIGlmIChzdGF0ZSA9PSBjRkFJTEVEKQorICAgICAgICBzdGF0ZSA9IElOX1BS T0dSRVNTOworCisgICAgc3RhdGUgJj0gfk5PX0tFWUlEOworCisgICAgcmV0dXJuKGZicC0+c3Rh dGVbZGlyLTFdID0gc3RhdGUpOworfQorCitzdGF0aWMgdm9pZAorY2FzdF9mYjY0X3ByaW50c3Vi KGRhdGEsIGNudCwgYnVmLCBidWZsZW4sIHR5cGUpCisgICAgdW5zaWduZWQgY2hhciAqZGF0YSwg KmJ1ZiwgKnR5cGU7CisgICAgaW50IGNudCwgYnVmbGVuOworeworICAgIGNoYXIgbGJ1Zls2NF07 CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgY2hhciAqY3A7CisKKyAgICBidWZbYnVmbGVuLTFd ID0gJ1wwJzsgICAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgaXQncyBOVUxMIHRlcm1pbmF0ZWQg Ki8KKyAgICBidWZsZW4gLT0gMTsKKworICAgIHN3aXRjaChkYXRhWzJdKSB7CisgICAgY2FzZSBG QjY0X0lWOgorICAgICAgICBzcHJpbnRmKGxidWYsICIlc19JViIsIHR5cGUpOworICAgICAgICBj cCA9IGxidWY7CisgICAgICAgIGdvdG8gY29tbW9uOworCisgICAgY2FzZSBGQjY0X0lWX09LOgor ICAgICAgICBzcHJpbnRmKGxidWYsICIlc19JVl9PSyIsIHR5cGUpOworICAgICAgICBjcCA9IGxi dWY7CisgICAgICAgIGdvdG8gY29tbW9uOworCisgICAgY2FzZSBGQjY0X0lWX0JBRDoKKyAgICAg ICAgc3ByaW50ZihsYnVmLCAiJXNfSVZfQkFEIiwgdHlwZSk7CisgICAgICAgIGNwID0gbGJ1ZjsK KyAgICAgICAgZ290byBjb21tb247CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzcHJpbnRmKGxi dWYsICIgJWQgKHVua25vd24pIiwgZGF0YVsyXSk7CisgICAgICAgIGNwID0gbGJ1ZjsKKyAgICAg IGNvbW1vbjoKKyAgICAgICAgZm9yICg7IChidWZsZW4gPiAwKSAmJiAoKmJ1ZiA9ICpjcCsrKTsg YnVmKyspCisgICAgICAgICAgICBidWZsZW4tLTsKKyAgICAgICAgZm9yIChpID0gMzsgaSA8IGNu dDsgaSsrKSB7CisgICAgICAgICAgICBzcHJpbnRmKGxidWYsICIgJWQiLCBkYXRhW2ldKTsKKyAg ICAgICAgICAgIGZvciAoY3AgPSBsYnVmOyAoYnVmbGVuID4gMCkgJiYgKCpidWYgPSAqY3ArKyk7 IGJ1ZisrKQorICAgICAgICAgICAgICAgIGJ1Zmxlbi0tOworICAgICAgICB9CisgICAgICAgIGJy ZWFrOworICAgIH0KK30KKwordm9pZAorY2FzdF9jZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1 ZiwgYnVmbGVuKQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpidWY7CisgICAgaW50IGNudCwg YnVmbGVuOworeworICAgIGNhc3RfZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVu LCAiQ0ZCNjQiKTsKK30KKwordm9pZAorY2FzdF9vZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1 ZiwgYnVmbGVuKQorICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpidWY7CisgICAgaW50IGNudCwg YnVmbGVuOworeworICAgIGNhc3RfZmI2NF9wcmludHN1YihkYXRhLCBjbnQsIGJ1ZiwgYnVmbGVu LCAiT0ZCNjQiKTsKK30KKworc3RhdGljIHZvaWQKK2Nhc3RfZmI2NF9zdHJlYW1faXYoc2VlZCwg c3RwKQorICAgIEJsb2NrIHNlZWQ7CisgICAgcmVnaXN0ZXIgc3RydWN0IGNhc3Rfc3RpbmZvICpz dHA7Cit7CisgICAgbWVtY3B5KCh2b2lkICopc3RwLT5zdHJfaXYsICh2b2lkICopc2VlZCwgc2l6 ZW9mKEJsb2NrKSk7CisgICAgbWVtY3B5KCh2b2lkICopc3RwLT5zdHJfb3V0cHV0LCAodm9pZCAq KXNlZWQsIHNpemVvZihCbG9jaykpOworCisgICAgc3RwLT5zdHJfaW5kZXggPSBzaXplb2YoQmxv Y2spOworfQorCitzdGF0aWMgdm9pZAorY2FzdF9mYjY0X3N0cmVhbV9rZXkoa2V5LCBzdHAsIGZz KQorICAgIHVuc2lnbmVkIGNoYXIgKiBrZXk7CisgICAgcmVnaXN0ZXIgc3RydWN0IGNhc3Rfc3Rp bmZvICpzdHA7CisgICAgaW50IGZzOworeworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9O CisgICAgaWYoZnMpCisgICAgICAgIGNrX2Nhc3QxMjhfa2V5X3NjaGVkKCZzdHAtPnN0cl9zY2hl ZCwga2V5KTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgY2tfY2FzdDVfNDBfa2V5X3NjaGVk KCZzdHAtPnN0cl9zY2hlZCwga2V5KTsKKworICAgIG1lbWNweSgodm9pZCAqKXN0cC0+c3RyX291 dHB1dCwgKHZvaWQgKilzdHAtPnN0cl9pdiwgc2l6ZW9mKEJsb2NrKSk7CisKKyAgICBzdHAtPnN0 cl9pbmRleCA9IHNpemVvZihCbG9jayk7Cit9CisKKy8qCisgKiBDQVNUIDY0IGJpdCBDaXBoZXIg RmVlZGJhY2sKKyAqCisgKiAgICAga2V5IC0tLT4rLS0tLS0tKworICogICAgICAgICAgKy0+fCBD QVNUIHwtLSsKKyAqICAgICAgICAgIHwgICstLS0tLS0rICB8CisgKiAgICAgICAgICB8ICAgICAg ICAgICAgdgorICogIElOUFVUIC0tKC0tLS0tLS0tLS0+KCspKy0tLT4gREFUQQorICogICAgICAg ICAgfCAgICAgICAgICAgICAgfAorICogICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworICoKKyAq CisgKiBHaXZlbjoKKyAqICAgICAgaVY6IEluaXRpYWwgdmVjdG9yLCA2NCBiaXRzICg4IGJ5dGVz KSBsb25nLgorICogICAgICBEbjogdGhlIG50aCBjaHVuayBvZiA2NCBiaXRzICg4IGJ5dGVzKSBv ZiBkYXRhIHRvIGVuY3J5cHQgKGRlY3J5cHQpLgorICogICAgICBPbjogdGhlIG50aCBjaHVuayBv ZiA2NCBiaXRzICg4IGJ5dGVzKSBvZiBlbmNyeXB0ZWQgKGRlY3J5cHRlZCkgb3V0cHV0LgorICoK KyAqICAgICAgVjAgPSBDQVNUKGlWLCBrZXkpCisgKiAgICAgIE9uID0gRG4gXiBWbgorICogICAg ICBWKG4rMSkgPSBDQVNUKE9uLCBrZXkpCisgKi8KKyNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQ VElPTgordm9pZAorY2FzdF9jZmI2NF9lbmNyeXB0KHMsIGMpCisgICAgICAgIHJlZ2lzdGVyIHVu c2lnbmVkIGNoYXIgKnM7CisgICAgICAgIGludCBjOworeworICAgIF9jYXN0X2NmYjY0X2VuY3J5 cHQocywgYywgJmNhc3RfZmJbQ0ZCXzEyOF0uc3RyZWFtc1tESVJfRU5DUllQVC0xXSk7Cit9Cisj ZW5kaWYKKwordm9pZAorY2FzdGV4cF9jZmI2NF9lbmNyeXB0KHMsIGMpCisgICAgcmVnaXN0ZXIg dW5zaWduZWQgY2hhciAqczsKKyAgICBpbnQgYzsKK3sKKyAgICBfY2FzdF9jZmI2NF9lbmNyeXB0 KHMsIGMsICZjYXN0X2ZiW0NGQl80MF0uc3RyZWFtc1tESVJfRU5DUllQVC0xXSk7Cit9CisKK3N0 YXRpYyB2b2lkCitfY2FzdF9jZmI2NF9lbmNyeXB0KHMsIGMsIHN0cCkKKyAgICByZWdpc3RlciB1 bnNpZ25lZCBjaGFyICpzOworICAgIGludCBjOworICAgIHJlZ2lzdGVyIHN0cnVjdCBjYXN0X3N0 aW5mbyAqc3RwOworeworICAgIHJlZ2lzdGVyIGludCBpbmRleDsKKworICAgIGluZGV4ID0gc3Rw LT5zdHJfaW5kZXg7CisgICAgd2hpbGUgKGMtLSA+IDApIHsKKyAgICAgICAgaWYgKGluZGV4ID09 IHNpemVvZihCbG9jaykpIHsKKyAgICAgICAgICAgIEJsb2NrIGI7CisgICAgICAgICAgICBja19j YXN0X2VjYl9lbmNyeXB0KGIsIHN0cC0+c3RyX291dHB1dCwgJnN0cC0+c3RyX3NjaGVkLCAwKTsK KyAgICAgICAgICAgIG1lbWNweSgodm9pZCAqKXN0cC0+c3RyX2ZlZWQsICh2b2lkICopYiwgc2l6 ZW9mKEJsb2NrKSk7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIH0KKworICAgICAg ICAvKiBPbiBlbmNyeXB0aW9uLCB3ZSBzdG9yZSAoZmVlZCBeIGRhdGEpIHdoaWNoIGlzIGN5cGhl ciAqLworICAgICAgICAqcyA9IHN0cC0+c3RyX291dHB1dFtpbmRleF0gPSAoc3RwLT5zdHJfZmVl ZFtpbmRleF0gXiAqcyk7CisgICAgICAgIHMrKzsKKyAgICAgICAgaW5kZXgrKzsKKyAgICB9Cisg ICAgc3RwLT5zdHJfaW5kZXggPSBpbmRleDsKK30KKworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNS WVBUSU9OCitpbnQKK2Nhc3RfY2ZiNjRfZGVjcnlwdChkYXRhKQorICAgIGludCBkYXRhOworewor ICAgIHJldHVybiBfY2FzdF9jZmI2NF9kZWNyeXB0KGRhdGEsICZjYXN0X2ZiW0NGQl8xMjhdLnN0 cmVhbXNbRElSX0RFQ1JZUFQtMV0pOworfQorI2VuZGlmCisKK2ludAorY2FzdGV4cF9jZmI2NF9k ZWNyeXB0KGRhdGEpCisgICAgaW50IGRhdGE7Cit7CisgICAgcmV0dXJuIF9jYXN0X2NmYjY0X2Rl Y3J5cHQoZGF0YSwgJmNhc3RfZmJbQ0ZCXzQwXS5zdHJlYW1zW0RJUl9ERUNSWVBULTFdKTsKK30K Kworc3RhdGljIGludAorX2Nhc3RfY2ZiNjRfZGVjcnlwdChkYXRhLCBzdHApCisgICAgaW50IGRh dGE7CisgICAgcmVnaXN0ZXIgc3RydWN0IGNhc3Rfc3RpbmZvICpzdHA7Cit7CisgICAgaW50IGlu ZGV4OworCisgICAgaWYgKGRhdGEgPT0gLTEpIHsKKyAgICAgICAgLyoKKyAgICAgICAgKiBCYWNr IHVwIG9uZSBieXRlLiAgSXQgaXMgYXNzdW1lZCB0aGF0IHdlIHdpbGwKKyAgICAgICAgKiBuZXZl ciBiYWNrIHVwIG1vcmUgdGhhbiBvbmUgYnl0ZS4gIElmIHdlIGRvLCB0aGlzCisgICAgICAgICog bWF5IG9yIG1heSBub3Qgd29yay4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKHN0cC0+c3RyX2lu ZGV4KQorICAgICAgICAgICAgLS1zdHAtPnN0cl9pbmRleDsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0KKworICAgIGluZGV4ID0gc3RwLT5zdHJfaW5kZXgrKzsKKyAgICBpZiAoaW5kZXggPT0g c2l6ZW9mKEJsb2NrKSkgeworICAgICAgICBCbG9jayBiOworICAgICAgICBja19jYXN0X2VjYl9l bmNyeXB0KGIsIHN0cC0+c3RyX291dHB1dCwgJnN0cC0+c3RyX3NjaGVkLCAwKTsKKyAgICAgICAg bWVtY3B5KCh2b2lkICopc3RwLT5zdHJfZmVlZCwgKHZvaWQgKiliLCBzaXplb2YoQmxvY2spKTsK KyAgICAgICAgc3RwLT5zdHJfaW5kZXggPSAxOyAgICAgLyogTmV4dCB0aW1lIHdpbGwgYmUgMSAq LworICAgICAgICBpbmRleCA9IDA7ICAgICAgICAgICAgICAvKiBCdXQgbm93IHVzZSAwICovCisg ICAgfQorCisgICAgLyogT24gZGVjcnlwdGlvbiB3ZSBzdG9yZSAoZGF0YSkgd2hpY2ggaXMgY3lw aGVyLiAqLworICAgIHN0cC0+c3RyX291dHB1dFtpbmRleF0gPSBkYXRhOworICAgIHJldHVybihk YXRhIF4gc3RwLT5zdHJfZmVlZFtpbmRleF0pOworfQorCisvKgorICogQ0FTVCA2NCBiaXQgT3V0 cHV0IEZlZWRiYWNrCisgKgorICoga2V5IC0tLT4rLS0tLS0tKworICogICAgICArLT58IENBU1Qg fC0tKworICogICAgICB8ICArLS0tLS0tKyAgfAorICogICAgICArLS0tLS0tLS0tLS0tKworICog ICAgICAgICAgICAgICAgICAgdgorICogIElOUFVUIC0tLS0tLS0tLT4oKykgLS0tLT4gREFUQQor ICoKKyAqIEdpdmVuOgorICogICAgICBpVjogSW5pdGlhbCB2ZWN0b3IsIDY0IGJpdHMgKDggYnl0 ZXMpIGxvbmcuCisgKiAgICAgIERuOiB0aGUgbnRoIGNodW5rIG9mIDY0IGJpdHMgKDggYnl0ZXMp IG9mIGRhdGEgdG8gZW5jcnlwdCAoZGVjcnlwdCkuCisgKiAgICAgIE9uOiB0aGUgbnRoIGNodW5r IG9mIDY0IGJpdHMgKDggYnl0ZXMpIG9mIGVuY3J5cHRlZCAoZGVjcnlwdGVkKSBvdXRwdXQuCisg KgorICogICAgICBWMCA9IENBU1QoaVYsIGtleSkKKyAqICAgICAgVihuKzEpID0gQ0FTVChWbiwg a2V5KQorICogICAgICBPbiA9IERuIF4gVm4KKyAqLworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNS WVBUSU9OCit2b2lkCitjYXN0X29mYjY0X2VuY3J5cHQocywgYykKKyAgICByZWdpc3RlciB1bnNp Z25lZCBjaGFyICpzOworICAgIGludCBjOworeworICAgIF9jYXN0X29mYjY0X2VuY3J5cHQocywg YywgJmNhc3RfZmJbT0ZCXzEyOF0uc3RyZWFtc1tESVJfRU5DUllQVC0xXSk7Cit9CisjZW5kaWYK Kwordm9pZAorY2FzdGV4cF9vZmI2NF9lbmNyeXB0KHMsIGMpCisgICAgcmVnaXN0ZXIgdW5zaWdu ZWQgY2hhciAqczsKKyAgICBpbnQgYzsKK3sKKyAgX2Nhc3Rfb2ZiNjRfZW5jcnlwdChzLCBjLCAm Y2FzdF9mYltPRkJfNDBdLnN0cmVhbXNbRElSX0VOQ1JZUFQtMV0pOworfQorCitzdGF0aWMgdm9p ZAorX2Nhc3Rfb2ZiNjRfZW5jcnlwdChzLCBjLCBzdHApCisgICAgcmVnaXN0ZXIgdW5zaWduZWQg Y2hhciAqczsKKyAgICBpbnQgYzsKKyAgICByZWdpc3RlciBzdHJ1Y3QgY2FzdF9zdGluZm8gKnN0 cDsKK3sKKyAgICByZWdpc3RlciBpbnQgaW5kZXg7CisKKyAgICBpbmRleCA9IHN0cC0+c3RyX2lu ZGV4OworICAgIHdoaWxlIChjLS0gPiAwKSB7CisgICAgICAgIGlmIChpbmRleCA9PSBzaXplb2Yo QmxvY2spKSB7CisgICAgICAgICAgICBCbG9jayBiOworICAgICAgICAgICAgY2tfY2FzdF9lY2Jf ZW5jcnlwdChiLCBzdHAtPnN0cl9mZWVkLCAmc3RwLT5zdHJfc2NoZWQsIDApOworICAgICAgICAg ICAgbWVtY3B5KCh2b2lkICopc3RwLT5zdHJfZmVlZCwgKHZvaWQgKiliLCBzaXplb2YoQmxvY2sp KTsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICAqcysrIF49IHN0 cC0+c3RyX2ZlZWRbaW5kZXhdOworICAgICAgICBpbmRleCsrOworICAgIH0KKyAgICBzdHAtPnN0 cl9pbmRleCA9IGluZGV4OworfQorCisjaWZuZGVmIENBU1RfRVhQT1JUX0VOQ1JZUFRJT04KK2lu dAorY2FzdF9vZmI2NF9kZWNyeXB0KGRhdGEpCisgICAgaW50IGRhdGE7Cit7CisgICAgcmV0dXJu IF9jYXN0X29mYjY0X2RlY3J5cHQoZGF0YSwgJmNhc3RfZmJbT0ZCXzEyOF0uc3RyZWFtc1tESVJf REVDUllQVC0xXSk7Cit9CisjZW5kaWYKKworaW50CitjYXN0ZXhwX29mYjY0X2RlY3J5cHQoZGF0 YSkKKyAgICBpbnQgZGF0YTsKK3sKKyAgICByZXR1cm4gX2Nhc3Rfb2ZiNjRfZGVjcnlwdChkYXRh LCAmY2FzdF9mYltPRkJfNDBdLnN0cmVhbXNbRElSX0RFQ1JZUFQtMV0pOworfQorCitzdGF0aWMg aW50CitfY2FzdF9vZmI2NF9kZWNyeXB0KGRhdGEsIHN0cCkKKyAgICBpbnQgZGF0YTsKKyAgICBy ZWdpc3RlciBzdHJ1Y3QgY2FzdF9zdGluZm8gKnN0cDsKK3sKKyAgICBpbnQgaW5kZXg7CisKKyAg ICBpZiAoZGF0YSA9PSAtMSkgeworICAgICAgICAvKgorICAgICAgICAqIEJhY2sgdXAgb25lIGJ5 dGUuICBJdCBpcyBhc3N1bWVkIHRoYXQgd2Ugd2lsbAorICAgICAgICAqIG5ldmVyIGJhY2sgdXAg bW9yZSB0aGFuIG9uZSBieXRlLiAgSWYgd2UgZG8sIHRoaXMKKyAgICAgICAgKiBtYXkgb3IgbWF5 IG5vdCB3b3JrLgorICAgICAgICAqLworICAgICAgICBpZiAoc3RwLT5zdHJfaW5kZXgpCisgICAg ICAgICAgICAtLXN0cC0+c3RyX2luZGV4OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisg ICAgaW5kZXggPSBzdHAtPnN0cl9pbmRleCsrOworICAgIGlmIChpbmRleCA9PSBzaXplb2YoQmxv Y2spKSB7CisgICAgICAgIEJsb2NrIGI7CisgICAgICAgIGNrX2Nhc3RfZWNiX2VuY3J5cHQoYiwg c3RwLT5zdHJfZmVlZCwgJnN0cC0+c3RyX3NjaGVkLCAwKTsKKyAgICAgICAgbWVtY3B5KCh2b2lk ICopc3RwLT5zdHJfZmVlZCwgKHZvaWQgKiliLCBzaXplb2YoQmxvY2spKTsKKyAgICAgICAgc3Rw LT5zdHJfaW5kZXggPSAxOyAgICAgLyogTmV4dCB0aW1lIHdpbGwgYmUgMSAqLworICAgICAgICBp bmRleCA9IDA7ICAgICAgICAgICAgICAvKiBCdXQgbm93IHVzZSAwICovCisgICAgfQorCisgICAg cmV0dXJuKGRhdGEgXiBzdHAtPnN0cl9mZWVkW2luZGV4XSk7Cit9CisKKy8qCisgKiBDb3B5cmln aHQgKGMpIDE5OTcgU3RhbmZvcmQgVW5pdmVyc2l0eQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNl LCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kCisg KiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0 aG91dCBmZWUsIHByb3ZpZGVkCisgKiB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KKyAqIGFsbCBjb3BpZXMgb2YgdGhl IHNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24uCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUy1JUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisg KiBFWFBSRVNTLCBJTVBMSUVEIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRB VElPTiwgQU5ZCisgKiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgU1RBTkZPUkQg QkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwKKyAqIElORElSRUNUIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCwgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZF UgorICogUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhF UiBPUiBOT1QgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLwor CisvKgorICogY2FzdC5jCisgKiBBdXRob3I6IFRvbSBXdQorICoKKyAqIEFuIGltcGxlbWVudGF0 aW9uIG9mIHRoZSBDQVNULTEyOCBlbmNyeXB0aW9uIGFsZ29yaXRobSwgYXMKKyAqIHNwZWNpZmll ZCBpbiBSRkMgMjE0NC4KKyAqLworCisvKiBUaGUgZmlyc3QgZm91ciBTLWJveGVzIGFyZSBmb3Ig ZW5jcnlwdGlvbi9kZWNyeXB0aW9uICovCisKK3N0YXRpYyB1aW50MzIgUzFbXSA9IHsKKyAgMHgz MGZiNDBkNCwgMHg5ZmEwZmYwYiwgMHg2YmVjY2QyZiwgMHgzZjI1OGM3YSwgMHgxZTIxM2YyZiwg MHg5YzAwNGRkMywKKyAgMHg2MDAzZTU0MCwgMHhjZjlmYzk0OSwgMHhiZmQ0YWYyNywgMHg4OGJi YmRiNSwgMHhlMjAzNDA5MCwgMHg5OGQwOTY3NSwKKyAgMHg2ZTYzYTBlMCwgMHgxNWMzNjFkMiwg MHhjMmU3NjYxZCwgMHgyMmQ0ZmY4ZSwgMHgyODY4M2I2ZiwgMHhjMDdmZDA1OSwKKyAgMHhmZjIz NzljOCwgMHg3NzVmNTBlMiwgMHg0M2MzNDBkMywgMHhkZjJmODY1NiwgMHg4ODdjYTQxYSwgMHhh MmQyYmQyZCwKKyAgMHhhMWM5ZTBkNiwgMHgzNDZjNDgxOSwgMHg2MWI3NmQ4NywgMHgyMjU0MGYy ZiwgMHgyYWJlMzJlMSwgMHhhYTU0MTY2YiwKKyAgMHgyMjU2OGUzYSwgMHhhMmQzNDFkMCwgMHg2 NmRiNDBjOCwgMHhhNzg0MzkyZiwgMHgwMDRkZmYyZiwgMHgyZGI5ZDJkZSwKKyAgMHg5Nzk0M2Zh YywgMHg0YTk3YzFkOCwgMHg1Mjc2NDRiNywgMHhiNWY0MzdhNywgMHhiODJjYmFlZiwgMHhkNzUx ZDE1OSwKKyAgMHg2ZmY3ZjBlZCwgMHg1YTA5N2ExZiwgMHg4MjdiNjhkMCwgMHg5MGVjZjUyZSwg MHgyMmIwYzA1NCwgMHhiYzhlNTkzNSwKKyAgMHg0YjZkMmY3ZiwgMHg1MGJiNjRhMiwgMHhkMjY2 NDkxMCwgMHhiZWU1ODEyZCwgMHhiNzMzMjI5MCwgMHhlOTNiMTU5ZiwKKyAgMHhiNDhlZTQxMSwg MHg0YmZmMzQ1ZCwgMHhmZDQ1YzI0MCwgMHhhZDMxOTczZiwgMHhjNGY2ZDAyZSwgMHg1NWZjODE2 NSwKKyAgMHhkNWIxY2FhZCwgMHhhMWFjMmRhZSwgMHhhMmQ0Yjc2ZCwgMHhjMTliMGM1MCwgMHg4 ODIyNDBmMiwgMHgwYzZlNGYzOCwKKyAgMHhhNGU0YmZkNywgMHg0ZjViYTI3MiwgMHg1NjRjMWQy ZiwgMHhjNTljNTMxOSwgMHhiOTQ5ZTM1NCwgMHhiMDQ2NjlmZSwKKyAgMHhiMWI2YWI4YSwgMHhj NzEzNThkZCwgMHg2Mzg1YzU0NSwgMHgxMTBmOTM1ZCwgMHg1NzUzOGFkNSwgMHg2YTM5MDQ5MywK KyAgMHhlNjNkMzdlMCwgMHgyYTU0ZjZiMywgMHgzYTc4N2Q1ZiwgMHg2Mjc2YTBiNSwgMHgxOWE2 ZmNkZiwgMHg3YTQyMjA2YSwKKyAgMHgyOWY5ZDRkNSwgMHhmNjFiMTg5MSwgMHhiYjcyMjc1ZSwg MHhhYTUwODE2NywgMHgzODkwMTA5MSwgMHhjNmI1MDVlYiwKKyAgMHg4NGM3Y2I4YywgMHgyYWQ3 NWEwZiwgMHg4NzRhMTQyNywgMHhhMmQxOTM2YiwgMHgyYWQyODZhZiwgMHhhYTU2ZDI5MSwKKyAg MHhkNzg5NDM2MCwgMHg0MjVjNzUwZCwgMHg5M2IzOWUyNiwgMHgxODcxODRjOSwgMHg2YzAwYjMy ZCwgMHg3M2UyYmIxNCwKKyAgMHhhMGJlYmMzYywgMHg1NDYyMzc3OSwgMHg2NDQ1OWVhYiwgMHgz ZjMyOGI4MiwgMHg3NzE4Y2Y4MiwgMHg1OWEyY2VhNiwKKyAgMHgwNGVlMDAyZSwgMHg4OWZlNzhl NiwgMHgzZmFiMDk1MCwgMHgzMjVmZjZjMiwgMHg4MTM4M2YwNSwgMHg2OTYzYzVjOCwKKyAgMHg3 NmNiNWFkNiwgMHhkNDk5NzRjOSwgMHhjYTE4MGRjZiwgMHgzODA3ODJkNSwgMHhjN2ZhNWNmNiwg MHg4YWMzMTUxMSwKKyAgMHgzNWU3OWUxMywgMHg0N2RhOTFkMCwgMHhmNDBmOTA4NiwgMHhhN2Uy NDE5ZSwgMHgzMTM2NjI0MSwgMHgwNTFlZjQ5NSwKKyAgMHhhYTU3M2IwNCwgMHg0YTgwNWQ4ZCwg MHg1NDgzMDBkMCwgMHgwMDMyMmEzYywgMHhiZjY0Y2RkZiwgMHhiYTU3YTY4ZSwKKyAgMHg3NWM2 MzcyYiwgMHg1MGFmZDM0MSwgMHhhN2MxMzI3NSwgMHg5MTVhMGJmNSwgMHg2YjU0YmZhYiwgMHgy YjBiMTQyNiwKKyAgMHhhYjRjYzlkNywgMHg0NDljY2Q4MiwgMHhmN2ZiZjI2NSwgMHhhYjg1YzVm MywgMHgxYjU1ZGI5NCwgMHhhYWQ0ZTMyNCwKKyAgMHhjZmE0YmQzZiwgMHgyZGVhYTNlMiwgMHg5 ZTIwNGQwMiwgMHhjOGJkMjVhYywgMHhlYWRmNTViMywgMHhkNWJkOWU5OCwKKyAgMHhlMzEyMzFi MiwgMHgyYWQ1YWQ2YywgMHg5NTQzMjlkZSwgMHhhZGJlNDUyOCwgMHhkODcxMGY2OSwgMHhhYTUx YzkwZiwKKyAgMHhhYTc4NmJmNiwgMHgyMjUxM2YxZSwgMHhhYTUxYTc5YiwgMHgyYWQzNDRjYyww eDdiNWE0MWYwLCAweGQzN2NmYmFkLAorICAweDFiMDY5NTA1LCAweDQxZWNlNDkxLCAweGI0YzMz MmU2LCAweDAzMjI2OGQ0LCAweGM5NjAwYWNjLCAweGNlMzg3ZTZkLAorICAweGJmNmJiMTZjLCAw eDZhNzBmYjc4LCAweDBkMDNkOWM5LCAweGQ0ZGYzOWRlLCAweGUwMTA2M2RhLCAweDQ3MzZmNDY0 LAorICAweDVhZDMyOGQ4LCAweGIzNDdjYzk2LCAweDc1YmIwZmMzLCAweDk4NTExYmZiLCAweDRm ZmJjYzM1LCAweGI1OGJjZjZhLAorICAweGUxMWYwYWJjLCAweGJmYzVmZTRhLCAweGE3MGFlYzEw LCAweGFjMzk1NzBhLDB4M2YwNDQ0MmYsIDB4NjE4OGIxNTMsCisgIDB4ZTAzOTdhMmUsIDB4NTcy N2NiNzksIDB4OWNlYjQxOGYsIDB4MWNhY2Q2OGQsIDB4MmFkMzdjOTYsIDB4MDE3NWNiOWQsCisg IDB4YzY5ZGZmMDksIDB4Yzc1YjY1ZjAsIDB4ZDlkYjQwZDgsIDB4ZWMwZTc3NzksIDB4NDc0NGVh ZDQsIDB4YjExYzMyNzQsCisgIDB4ZGQyNGNiOWUsIDB4N2UxYzU0YmQsIDB4ZjAxMTQ0ZjksIDB4 ZDIyNDBlYjEsIDB4OTY3NWIzZmQsIDB4YTNhYzM3NTUsCisgIDB4ZDQ3YzI3YWYsIDB4NTFjODVm NGQsIDB4NTY5MDc1OTYsIDB4YTViYjE1ZTYsMHg1ODAzMDRmMCwgMHhjYTA0MmNmMSwKKyAgMHgw MTFhMzdlYSwgMHg4ZGJmYWFkYiwgMHgzNWJhM2U0YSwgMHgzNTI2ZmZhMCwgMHhjMzdiNGQwOSwg MHhiYzMwNmVkOSwKKyAgMHg5OGE1MjY2NiwgMHg1NjQ4ZjcyNSwgMHhmZjVlNTY5ZCwgMHgwY2Vk NjNkMCwgMHg3YzYzYjJjZiwgMHg3MDBiNDVlMSwKKyAgMHhkNWVhNTBmMSwgMHg4NWE5Mjg3Miwg MHhhZjFmYmRhNywgMHhkNDIzNDg3MCwgMHhhNzg3MGJmMywgMHgyZDNiNGQ3OSwKKyAgMHg0MmUw NDE5OCwgMHgwY2QwZWRlNywgMHgyNjQ3MGRiOCwgMHhmODgxODE0YywweDQ3NGQ2YWQ3LCAweDdj MGM1ZTVjLAorICAweGQxMjMxOTU5LCAweDM4MWI3Mjk4LCAweGY1ZDJmNGRiLCAweGFiODM4NjUz LCAweDZlMmYxZTIzLCAweDgzNzE5YzllLAorICAweGJkOTFlMDQ2LCAweDlhNTY0NTZlLCAweGRj MzkyMDBjLCAweDIwYzhjNTcxLCAweDk2MmJkYTFjLCAweGUxZTY5NmZmLAorICAweGIxNDFhYjA4 LCAweDdjY2E4OWI5LCAweDFhNjllNzgzLCAweDAyY2M0ODQzLCAweGEyZjdjNTc5LCAweDQyOWVm NDdkLAorICAweDQyN2IxNjljLCAweDVhYzlmMDQ5LCAweGRkOGYwZjAwLCAweDVjODE2NWJmCit9 OworCitzdGF0aWMgdWludDMyIFMyW10gPSB7CisgIDB4MWYyMDEwOTQsIDB4ZWYwYmE3NWIsIDB4 NjllM2NmN2UsIDB4MzkzZjQzODAsIDB4ZmU2MWNmN2EsIDB4ZWVjNTIwN2EsCisgIDB4NTU4ODlj OTQsIDB4NzJmYzA2NTEsIDB4YWRhN2VmNzksIDB4NGUxZDcyMzUsIDB4ZDU1YTYzY2UsIDB4ZGUw NDM2YmEsCisgIDB4OTljNDMwZWYsIDB4NWYwYzA3OTQsIDB4MThkY2RiN2QsIDB4YTFkNmVmZjMs IDB4YTBiNTJmN2IsIDB4NTllODM2MDUsCisgIDB4ZWUxNWIwOTQsIDB4ZTlmZmQ5MDksIDB4ZGM0 NDAwODYsIDB4ZWY5NDQ0NTksIDB4YmE4M2NjYjMsIDB4ZTBjM2NkZmIsCisgIDB4ZDFkYTQxODEs IDB4M2IwOTJhYjEsIDB4Zjk5N2YxYzEsIDB4YTVlNmNmN2IsIDB4MDE0MjBkZGIsIDB4ZTRlN2Vm NWIsCisgIDB4MjVhMWZmNDEsIDB4ZTE4MGY4MDYsIDB4MWZjNDEwODAsIDB4MTc5YmVlN2EsIDB4 ZDM3YWM2YTksIDB4ZmU1ODMwYTQsCisgIDB4OThkZThiN2YsIDB4NzdlODNmNGUsIDB4Nzk5Mjky NjksIDB4MjRmYTlmN2IsIDB4ZTExM2M4NWIsIDB4YWNjNDAwODMsCisgIDB4ZDc1MDM1MjUsIDB4 ZjdlYTYxNWYsIDB4NjIxNDMxNTQsIDB4MGQ1NTRiNjMsIDB4NWQ2ODExMjEsIDB4Yzg2NmMzNTks CisgIDB4M2Q2M2NmNzMsIDB4Y2VlMjM0YzAsIDB4ZDRkODdlODcsIDB4NWM2NzJiMjEsIDB4MDcx ZjYxODEsIDB4MzlmNzYyN2YsCisgIDB4MzYxZTMwODQsIDB4ZTRlYjU3M2IsIDB4NjAyZjY0YTQs IDB4ZDYzYWNkOWMsIDB4MWJiYzQ2MzUsIDB4OWU4MTAzMmQsCisgIDB4MjcwMWY1MGMsIDB4OTk4 NDdhYjQsIDB4YTBlM2RmNzksIDB4YmE2Y2YzOGMsIDB4MTA4NDMwOTQsIDB4MjUzN2E5NWUsCisg IDB4ZjQ2ZjZmZmUsIDB4YTFmZjNiMWYsIDB4MjA4Y2ZiNmEsIDB4OGY0NThjNzQsIDB4ZDllMGEy MjcsIDB4NGVjNzNhMzQsCisgIDB4ZmM4ODRmNjksIDB4M2U0ZGU4ZGYsIDB4ZWYwZTAwODgsIDB4 MzU1OTY0OGQsIDB4OGE0NTM4OGMsIDB4MWQ4MDQzNjYsCisgIDB4NzIxZDliZmQsIDB4YTU4Njg0 YmIsIDB4ZTgyNTYzMzMsIDB4ODQ0ZTgyMTIsIDB4MTI4ZDgwOTgsIDB4ZmVkMzNmYjQsCisgIDB4 Y2UyODBhZTEsIDB4MjdlMTliYTUsIDB4ZDVhNmMyNTIsIDB4ZTQ5NzU0YmQsIDB4YzVkNjU1ZGQs IDB4ZWI2NjcwNjQsCisgIDB4Nzc4NDBiNGQsIDB4YTFiNmE4MDEsIDB4ODRkYjI2YTksIDB4ZTBi NTY3MTQsIDB4MjFmMDQzYjcsIDB4ZTVkMDU4NjAsCisgIDB4NTRmMDMwODQsIDB4MDY2ZmY0NzIs IDB4YTMxYWExNTMsIDB4ZGFkYzQ3NTUsIDB4YjU2MjVkYmYsIDB4Njg1NjFiZTYsCisgIDB4ODNj YTZiOTQsIDB4MmQ2ZWQyM2IsIDB4ZWNjZjAxZGIsIDB4YTZkM2QwYmEsIDB4YjY4MDNkNWMsIDB4 YWY3N2E3MDksCisgIDB4MzNiNGEzNGMsIDB4Mzk3YmM4ZDYsIDB4NWVlMjJiOTUsIDB4NWYwZTUz MDQsIDB4ODFlZDZmNjEsIDB4MjBlNzQzNjQsCisgIDB4YjQ1ZTEzNzgsIDB4ZGUxODYzOWIsIDB4 ODgxY2ExMjIsIDB4Yjk2NzI2ZDEsIDB4ODA0OWE3ZTgsIDB4MjJiN2RhN2IsCisgIDB4NWU1NTJk MjUsIDB4NTI3MmQyMzcsIDB4NzlkMjk1MWMsIDB4YzYwZDg5NGMsIDB4NDg4Y2I0MDIsIDB4MWJh NGZlNWIsCisgIDB4YTRiMDlmNmIsIDB4MWNhODE1Y2YsIDB4YTIwYzMwMDUsIDB4ODg3MWRmNjMs IDB4YjlkZTJmY2IsIDB4MGNjNmM5ZTksCisgIDB4MGJlZWZmNTMsIDB4ZTMyMTQ1MTcsIDB4YjQ1 NDI4MzUsIDB4OWY2MzI5M2MsIDB4ZWU0MWU3MjksIDB4NmUxZDJkN2MsCisgIDB4NTAwNDUyODYs IDB4MWU2Njg1ZjMsIDB4ZjMzNDAxYzYsIDB4MzBhMjJjOTUsIDB4MzFhNzA4NTAsIDB4NjA5MzBm MTMsCisgIDB4NzNmOTg0MTcsIDB4YTEyNjk4NTksIDB4ZWM2NDVjNDQsIDB4NTJjODc3YTksIDB4 Y2RmZjMzYTYsIDB4YTAyYjE3NDEsCisgIDB4N2NiYWQ5YTIsIDB4MjE4MDAzNmYsIDB4NTBkOTlj MDgsIDB4Y2IzZjQ4NjEsIDB4YzI2YmQ3NjUsIDB4NjRhM2Y2YWIsCisgIDB4ODAzNDI2NzYsIDB4 MjVhNzVlN2IsIDB4ZTRlNmQxZmMsIDB4MjBjNzEwZTYsIDB4Y2RmMGI2ODAsIDB4MTc4NDRkM2Is CisgIDB4MzFlZWY4NGQsIDB4N2UwODI0ZTQsIDB4MmNjYjQ5ZWIsIDB4ODQ2YTNiYWUsIDB4OGZm Nzc4ODgsIDB4ZWU1ZDYwZjYsCisgIDB4N2FmNzU2NzMsIDB4MmZkZDVjZGIsIDB4YTExNjMxYzEs IDB4MzBmNjZmNDMsIDB4YjNmYWVjNTQsIDB4MTU3ZmQ3ZmEsCisgIDB4ZWY4NTc5Y2MsIDB4ZDE1 MmRlNTgsIDB4ZGIyZmZkNWUsIDB4OGYzMmNlMTksIDB4MzA2YWY5N2EsIDB4MDJmMDNlZjgsCisg IDB4OTkzMTlhZDUsIDB4YzI0MmZhMGYsIDB4YTdlM2ViYjAsIDB4YzY4ZTQ5MDYsIDB4YjhkYTIz MGMsIDB4ODA4MjMwMjgsCisgIDB4ZGNkZWYzYzgsIDB4ZDM1ZmIxNzEsIDB4MDg4YTFiYzgsIDB4 YmVjMGM1NjAsIDB4NjFhM2M5ZTgsIDB4YmNhOGY1NGQsCisgIDB4YzcyZmVmZmEsIDB4MjI4MjJl OTksIDB4ODJjNTcwYjQsIDB4ZDhkOTRlODksIDB4OGIxYzM0YmMsIDB4MzAxZTE2ZTYsCisgIDB4 MjczYmU5NzksIDB4YjBmZmVhYTYsIDB4NjFkOWI4YzYsIDB4MDBiMjQ4NjksIDB4YjdmZmNlM2Ys IDB4MDhkYzI4M2IsCisgIDB4NDNkYWY2NWEsIDB4ZjdlMTk3OTgsIDB4NzYxOWI3MmYsIDB4OGYx YzliYTQsIDB4ZGM4NjM3YTAsIDB4MTZhN2QzYjEsCisgIDB4OWZjMzkzYjcsIDB4YTcxMzZlZWIs IDB4YzZiY2M2M2UsIDB4MWE1MTM3NDIsIDB4ZWY2ODI4YmMsIDB4NTIwMzY1ZDYsCisgIDB4MmQ2 YTc3YWIsIDB4MzUyN2VkNGIsIDB4ODIxZmQyMTYsIDB4MDk1YzZlMmUsIDB4ZGI5MmYyZmIsIDB4 NWVlYTI5Y2IsCisgIDB4MTQ1ODkyZjUsIDB4OTE1ODRmN2YsIDB4NTQ4MzY5N2IsIDB4MjY2N2E4 Y2MsIDB4ODUxOTYwNDgsIDB4OGM0YmFjZWEsCisgIDB4ODMzODYwZDQsIDB4MGQyM2UwZjksIDB4 NmMzODdlOGEsIDB4MGFlNmQyNDksIDB4YjI4NDYwMGMsIDB4ZDgzNTczMWQsCisgIDB4ZGNiMWM2 NDcsIDB4YWM0YzU2ZWEsIDB4M2ViZDgxYjMsIDB4MjMwZWFiYjAsIDB4NjQzOGJjODcsIDB4ZjBi NWIxZmEsCisgIDB4OGY1ZWEyYjMsIDB4ZmMxODQ2NDIsIDB4MGEwMzZiN2EsIDB4NGZiMDg5YmQs IDB4NjQ5ZGE1ODksIDB4YTM0NTQxNWUsCisgIDB4NWMwMzgzMjMsIDB4M2U1ZDNiYjksIDB4NDNk Nzk1NzIsIDB4N2U2ZGQwN2MsIDB4MDZkZmRmMWUsIDB4NmM2Y2M0ZWYsCisgIDB4NzE2MGE1Mzks IDB4NzNiZmJlNzAsIDB4ODM4Nzc2MDUsIDB4NDUyM2VjZjEKK307CisKK3N0YXRpYyB1aW50MzIg UzNbXSA9IHsKKyAgMHg4ZGVmYzI0MCwgMHgyNWZhNWQ5ZiwgMHhlYjkwM2RiZiwgMHhlODEwYzkw NywgMHg0NzYwN2ZmZiwgMHgzNjlmZTQ0YiwKKyAgMHg4YzFmYzY0NCwgMHhhZWNlY2E5MCwgMHhi ZWIxZjliZiwgMHhlZWZiY2FlYSwgMHhlOGNmMTk1MCwgMHg1MWRmMDdhZSwKKyAgMHg5MjBlODgw NiwgMHhmMGFkMDU0OCwgMHhlMTNjOGQ4MywgMHg5MjcwMTBkNSwgMHgxMTEwN2Q5ZiwgMHgwNzY0 N2RiOSwKKyAgMHhiMmUzZTRkNCwgMHgzZDRmMjg1ZSwgMHhiOWFmYTgyMCwgMHhmYWRlODJlMCwg MHhhMDY3MjY4YiwgMHg4MjcyNzkyZSwKKyAgMHg1NTNmYjJjMCwgMHg0ODlhZTIyYiwgMHhkNGVm OTc5NCwgMHgxMjVlM2ZiYywgMHgyMWZmZmNlZSwgMHg4MjViMWJmZCwKKyAgMHg5MjU1YzVlZCwg MHgxMjU3YTI0MCwgMHg0ZTFhODMwMiwgMHhiYWUwN2ZmZiwgMHg1MjgyNDZlNywgMHg4ZTU3MTQw ZSwKKyAgMHgzMzczZjdiZiwgMHg4YzlmODE4OCwgMHhhNmZjNGVlOCwgMHhjOTgyYjVhNSwgMHhh OGMwMWRiNywgMHg1NzlmYzI2NCwKKyAgMHg2NzA5NGYzMSwgMHhmMmJkM2Y1ZiwgMHg0MGZmZjdj MSwgMHgxZmI3OGRmYywgMHg4ZTZiZDJjMSwgMHg0MzdiZTU5YiwKKyAgMHg5OWIwM2RiZiwgMHhi NWRiYzY0YiwgMHg2MzhkYzBlNiwgMHg1NTgxOWQ5OSwgMHhhMTk3YzgxYywgMHg0YTAxMmQ2ZSwK KyAgMHhjNTg4NGEyOCwgMHhjY2MzNmY3MSwgMHhiODQzYzIxMywgMHg2YzA3NDNmMSwgMHg4MzA5 ODkzYywgMHgwZmVkZGQ1ZiwKKyAgMHgyZjdmZTg1MCwgMHhkN2MwN2Y3ZSwgMHgwMjUwN2ZiZiwg MHg1YWZiOWEwNCwgMHhhNzQ3ZDJkMCwgMHgxNjUxMTkyZSwKKyAgMHhhZjcwYmYzZSwgMHg1OGMz MTM4MCwgMHg1Zjk4MzAyZSwgMHg3MjdjYzNjNCwgMHgwYTBmYjQwMiwgMHgwZjdmZWY4MiwKKyAg MHg4Yzk2ZmRhZCwgMHg1ZDJjMmFhZSwgMHg4ZWU5OWE0OSwgMHg1MGRhODhiOCwgMHg4NDI3ZjRh MCwgMHgxZWFjNTc5MCwKKyAgMHg3OTZmYjQ0OSwgMHg4MjUyZGMxNSwgMHhlZmJkN2Q5YiwgMHhh NjcyNTk3ZCwgMHhhZGE4NDBkOCwgMHg0NWY1NDUwNCwKKyAgMHhmYTVkNzQwMywgMHhlODNlYzMw NSwgMHg0ZjkxNzUxYSwgMHg5MjU2NjljMiwgMHgyM2VmZTk0MSwgMHhhOTAzZjEyZSwKKyAgMHg2 MDI3MGRmMiwgMHgwMjc2ZTRiNiwgMHg5NGZkNjU3NCwgMHg5Mjc5ODViMiwgMHg4Mjc2ZGJjYiwg MHgwMjc3ODE3NiwKKyAgMHhmOGFmOTE4ZCwgMHg0ZTQ4Zjc5ZSwgMHg4ZjYxNmRkZiwgMHhlMjlk ODQwZSwgMHg4NDJmN2Q4MywgMHgzNDBjZTVjOCwKKyAgMHg5NmJiYjY4MiwgMHg5M2I0YjE0OCwg MHhlZjMwM2NhYiwgMHg5ODRmYWYyOCwgMHg3NzlmYWY5YiwgMHg5MmRjNTYwZCwKKyAgMHgyMjRk MWUyMCwgMHg4NDM3YWE4OCwgMHg3ZDI5ZGM5NiwgMHgyNzU2ZDNkYywgMHg4YjkwN2NlZSwgMHhi NTFmZDI0MCwKKyAgMHhlN2MwN2NlMywgMHhlNTY2YjRhMSwgMHhjM2U5NjE1ZSwgMHgzY2Y4MjA5 ZCwgMHg2MDk0ZDFlMywgMHhjZDljYTM0MSwKKyAgMHg1Yzc2NDYwZSwgMHgwMGVhOTgzYiwgMHhk NGQ2Nzg4MSwgMHhmZDQ3NTcyYywgMHhmNzZjZWRkOSwgMHhiZGE4MjI5YywKKyAgMHgxMjdkYWRh YSwgMHg0MzhhMDc0ZSwgMHgxZjk3YzA5MCwgMHgwODFiZGI4YSwgMHg5M2EwN2ViZSwgMHhiOTM4 Y2ExNSwKKyAgMHg5N2IwM2NmZiwgMHgzZGMyYzBmOCwgMHg4ZDFhYjJlYywgMHg2NDM4MGU1MSwg MHg2OGNjN2JmYiwgMHhkOTBmMjc4OCwKKyAgMHgxMjQ5MDE4MSwgMHg1ZGU1ZmZkNCwgMHhkZDdl Zjg2YSwgMHg3NmEyZTIxNCwgMHhiOWE0MDM2OCwgMHg5MjVkOTU4ZiwKKyAgMHg0YjM5ZmZmYSwg MHhiYTM5YWVlOSwgMHhhNGZmZDMwYiwgMHhmYWY3OTMzYiwgMHg2ZDQ5ODYyMywgMHgxOTNjYmNm YSwKKyAgMHgyNzYyNzU0NSwgMHg4MjVjZjQ3YSwgMHg2MWJkOGJhMCwgMHhkMTFlNDJkMSwgMHhj ZWFkMDRmNCwgMHgxMjdlYTM5MiwKKyAgMHgxMDQyOGRiNywgMHg4MjcyYTk3MiwgMHg5MjcwYzRh OCwgMHgxMjdkZTUwYiwgMHgyODViYTFjOCwgMHgzYzYyZjQ0ZiwKKyAgMHgzNWMwZWFhNSwgMHhl ODA1ZDIzMSwgMHg0Mjg5MjlmYiwgMHhiNGZjZGY4MiwgMHg0ZmI2NmE1MywgMHgwZTdkYzE1YiwK KyAgMHgxZjA4MWZhYiwgMHgxMDg2MThhZSwgMHhmY2ZkMDg2ZCwgMHhmOWZmMjg4OSwgMHg2OTRi Y2MxMSwgMHgyMzZhNWNhZSwKKyAgMHgxMmRlY2E0ZCwgMHgyYzNmOGNjNSwgMHhkMmQwMmRmZSwg MHhmOGVmNTg5NiwgMHhlNGNmNTJkYSwgMHg5NTE1NWI2NywKKyAgMHg0OTRhNDg4YywgMHhiOWI2 YTgwYywgMHg1YzhmODJiYywgMHg4OWQzNmI0NSwgMHgzYTYwOTQzNywgMHhlYzAwYzlhOSwKKyAg MHg0NDcxNTI1MywgMHgwYTg3NGI0OSwgMHhkNzczYmM0MCwgMHg3YzM0NjcxYywgMHgwMjcxN2Vm NiwgMHg0ZmViNTUzNiwKKyAgMHhhMmQwMmZmZiwgMHhkMmJmNjBjNCwgMHhkNDNmMDNjMCwgMHg1 MGI0ZWY2ZCwgMHgwNzQ3OGNkMSwgMHgwMDZlMTg4OCwKKyAgMHhhMmU1M2Y1NSwgMHhiOWU2ZDRi YywgMHhhMjA0ODAxNiwgMHg5NzU3MzgzMywgMHhkNzIwN2Q2NywgMHhkZTBmOGYzZCwKKyAgMHg3 MmY4N2IzMywgMHhhYmNjNGYzMywgMHg3Njg4YzU1ZCwgMHg3YjAwYTZiMCwgMHg5NDdiMDAwMSwg MHg1NzAwNzVkMiwKKyAgMHhmOWJiODhmOCwgMHg4OTQyMDE5ZSwgMHg0MjY0YTVmZiwgMHg4NTYz MDJlMCwgMHg3MmRiZDkyYiwgMHhlZTk3MWI2OSwKKyAgMHg2ZWEyMmZkZSwgMHg1ZjA4YWUyYiwg MHhhZjdhNjE2ZCwgMHhlNWM5ODc2NywgMHhjZjFmZWJkMiwgMHg2MWVmYzhjMiwKKyAgMHhmMWFj MjU3MSwgMHhjYzgyMzljMiwgMHg2NzIxNGNiOCwgMHhiMWU1ODNkMSwgMHhiN2RjM2U2MiwgMHg3 ZjEwYmRjZSwKKyAgMHhmOTBhNWMzOCwgMHgwZmYwNDQzZCwgMHg2MDZlNmRjNiwgMHg2MDU0M2E0 OSwgMHg1NzI3YzE0OCwgMHgyYmU5OGExZCwKKyAgMHg4YWI0MTczOCwgMHgyMGUxYmUyNCwgMHhh Zjk2ZGEwZiwgMHg2ODQ1ODQyNSwgMHg5OTgzM2JlNSwgMHg2MDBkNDU3ZCwKKyAgMHgyODJmOTM1 MCwgMHg4MzM0YjM2MiwgMHhkOTFkMTEyMCwgMHgyYjZkOGRhMCwgMHg2NDJiMWUzMSwgMHg5YzMw NWEwMCwKKyAgMHg1MmJjZTY4OCwgMHgxYjAzNTg4YSwgMHhmN2JhZWZkNSwgMHg0MTQyZWQ5Yywg MHhhNDMxNWMxMSwgMHg4MzMyM2VjNSwKKyAgMHhkZmVmNDYzNiwgMHhhMTMzYzUwMSwgMHhlOWQz NTMxYywgMHhlZTM1Mzc4MworfTsKKworc3RhdGljIHVpbnQzMiBTNFtdID0geworICAweDlkYjMw NDIwLCAweDFmYjZlOWRlLCAweGE3YmU3YmVmLCAweGQyNzNhMjk4LCAweDRhNGY3YmRiLCAweDY0 YWQ4YzU3LAorICAweDg1NTEwNDQzLCAweGZhMDIwZWQxLCAweDdlMjg3YWZmLCAweGU2MGZiNjYz LCAweDA5NWYzNWExLCAweDc5ZWJmMTIwLAorICAweGZkMDU5ZDQzLCAweDY0OTdiN2IxLCAweGYz NjQxZjYzLCAweDI0MWU0YWRmLCAweDI4MTQ3ZjVmLCAweDRmYTJiOGNkLAorICAweGM5NDMwMDQw LCAweDBjYzMyMjIwLCAweGZkZDMwYjMwLCAweGMwYTUzNzRmLCAweDFkMmQwMGQ5LCAweDI0MTQ3 YjE1LAorICAweGVlNGQxMTFhLCAweDBmY2E1MTY3LCAweDcxZmY5MDRjLCAweDJkMTk1ZmZlLCAw eDFhMDU2NDVmLCAweDBjMTNmZWZlLAorICAweDA4MWIwOGNhLCAweDA1MTcwMTIxLCAweDgwNTMw MTAwLCAweGU4M2U1ZWZlLCAweGFjOWFmNGY4LCAweDdmZTcyNzAxLAorICAweGQyYjhlZTVmLCAw eDA2ZGY0MjYxLCAweGJiOWU5YjhhLCAweDcyOTNlYTI1LCAweGNlODRmZmRmLCAweGY1NzE4ODAx LAorICAweDNkZDY0YjA0LCAweGEyNmYyNjNiLCAweDdlZDQ4NDAwLCAweDU0N2VlYmU2LCAweDQ0 NmQ0Y2EwLCAweDZjZjNkNmY1LAorICAweDI2NDlhYmRmLCAweGFlYTBjN2Y1LCAweDM2MzM4Y2Mx LCAweDUwM2Y3ZTkzLCAweGQzNzcyMDYxLCAweDExYjYzOGUxLAorICAweDcyNTAwZTAzLCAweGY4 MGViMmJiLCAweGFiZTA1MDJlLCAweGVjOGQ3N2RlLCAweDU3OTcxZTgxLCAweGUxNGY2NzQ2LAor ICAweGM5MzM1NDAwLCAweDY5MjAzMThmLCAweDA4MWRiYjk5LCAweGZmYzMwNGE1LCAweDRkMzUx ODA1LCAweDdmM2Q1Y2UzLAorICAweGE2Yzg2NmM2LCAweDVkNWJjY2E5LCAweGRhZWM2ZmVhLCAw eDlmOTI2ZjkxLCAweDlmNDYyMjJmLCAweDM5OTE0NjdkLAorICAweGE1YmY2ZDhlLCAweDExNDNj NDRmLCAweDQzOTU4MzAyLCAweGQwMjE0ZWViLCAweDAyMjA4M2I4LCAweDNmYjYxODBjLAorICAw eDE4Zjg5MzFlLCAweDI4MTY1OGU2LCAweDI2NDg2ZTNlLCAweDhiZDc4YTcwLCAweDc0NzdlNGMx LCAweGI1MDZlMDdjLAorICAweGYzMmQwYTI1LCAweDc5MDk4YjAyLCAweGU0ZWFiYjgxLCAweDI4 MTIzYjIzLCAweDY5ZGVhZDM4LCAweDE1NzRjYTE2LAorICAweGRmODcxYjYyLCAweDIxMWM0MGI3 LCAweGE1MWE5ZWY5LCAweDAwMTQzNzdiLCAweDA0MWU4YWM4LCAweDA5MTE0MDAzLAorICAweGJk NTllNGQyLCAweGUzZDE1NmQ1LCAweDRmZTg3NmQ1LCAweDJmOTFhMzQwLCAweDU1N2JlOGRlLCAw eDAwZWFlNGE3LAorICAweDBjZTVjMmVjLCAweDRkYjRiYmE2LCAweGU3NTZiZGZmLCAweGRkMzM2 OWFjLCAweGVjMTdiMDM1LCAweDA2NTcyMzI3LAorICAweDk5YWZjOGIwLCAweDU2YzhjMzkxLCAw eDZiNjU4MTFjLCAweDVlMTQ2MTE5LCAweDZlODVjYjc1LCAweGJlMDdjMDAyLAorICAweGMyMzI1 NTc3LCAweDg5M2ZmNGVjLCAweDViYmZjOTJkLCAweGQwZWMzYjI1LCAweGI3ODAxYWI3LCAweDhk NmQzYjI0LAorICAweDIwYzc2M2VmLCAweGMzNjZhNWZjLCAweDljMzgyODgwLCAweDBhY2UzMjA1 LCAweGFhYzk1NDhhLCAweGVjYTFkN2M3LAorICAweDA0MWFmYTMyLCAweDFkMTY2MjVhLCAweDY3 MDE5MDJjLCAweDliNzU3YTU0LCAweDMxZDQ3N2Y3LCAweDkxMjZiMDMxLAorICAweDM2Y2M2ZmRi LCAweGM3MGI4YjQ2LCAweGQ5ZTY2YTQ4LCAweDU2ZTU1YTc5LCAweDAyNmE0Y2ViLCAweDUyNDM3 ZWZmLAorICAweDJmOGY3NmI0LCAweDBkZjk4MGE1LCAweDg2NzRjZGUzLCAweGVkZGEwNGViLCAw eDE3YTliZTA0LCAweDJjMThmNGRmLAorICAweGI3NzQ3ZjlkLCAweGFiMmFmN2I0LCAweGVmYzM0 ZDIwLCAweDJlMDk2YjdjLCAweDE3NDFhMjU0LCAweGU1YjZhMDM1LAorICAweDIxM2Q0MmY2LCAw eDJjMWM3YzI2LCAweDYxYzJmNTBmLCAweDY1NTJkYWY5LCAweGQyYzIzMWY4LCAweDI1MTMwZjY5 LAorICAweGQ4MTY3ZmEyLCAweDA0MThmMmM4LCAweDAwMWE5NmE2LCAweDBkMTUyNmFiLCAweDYz MzE1YzIxLCAweDVlMGE3MmVjLAorICAweDQ5YmFmZWZkLCAweDE4NzkwOGQ5LCAweDhkMGRiZDg2 LCAweDMxMTE3MGE3LCAweDNlOWI2NDBjLCAweGNjM2UxMGQ3LAorICAweGQ1Y2FkM2I2LCAweDBj YWVjMzg4LCAweGY3MzAwMWUxLCAweDZjNzI4YWZmLCAweDcxZWFlMmExLCAweDFmOWFmMzZlLAor ICAweGNmY2JkMTJmLCAweGMxZGU4NDE3LCAweGFjMDdiZTZiLCAweGNiNDRhMWQ4LCAweDhiOWIw ZjU2LCAweDAxMzk4OGMzLAorICAweGIxYzUyZmNhLCAweGI0YmUzMWNkLCAweGQ4NzgyODA2LCAw eDEyYTNhNGUyLCAweDZmN2RlNTMyLCAweDU4ZmQ3ZWI2LAorICAweGQwMWVlOTAwLCAweDI0YWRm ZmMyLCAweGY0OTkwZmM1LCAweDk3MTFhYWM1LCAweDAwMWQ3Yjk1LCAweDgyZTVlN2QyLAorICAw eDEwOTg3M2Y2LCAweDAwNjEzMDk2LCAweGMzMmQ5NTIxLCAweGFkYTEyMWZmLCAweDI5OTA4NDE1 LCAweDdmYmI5NzdmLAorICAweGFmOWViM2RiLCAweDI5YzllZDJhLCAweDVjZTJhNDY1LCAweGE3 MzBmMzJjLCAweGQwYWEzZmU4LCAweDhhNWNjMDkxLAorICAweGQ0OWUyY2U3LCAweDBjZTQ1NGE5 LCAweGQ2MGFjZDg2LCAweDAxNWYxOTE5LCAweDc3MDc5MTAzLCAweGRlYTAzYWY2LAorICAweDc4 YTg1NjVlLCAweGRlZTM1NmRmLCAweDIxZjA1Y2JlLCAweDhiNzVlMzg3LCAweGIzYzUwNjUxLCAw eGI4YTVjM2VmLAorICAweGQ4ZWViNmQyLCAweGU1MjNiZTc3LCAweGMyMTU0NTI5LCAweDJmNjll ZmRmLCAweGFmZTY3YWZiLCAweGY0NzBjNGIyLAorICAweGYzZTBlYjViLCAweGQ2Y2M5ODc2LCAw eDM5ZTQ0NjBjLCAweDFmZGE4NTM4LCAweDE5ODc4MzJmLCAweGNhMDA3MzY3LAorICAweGE5OTE0 NGY4LCAweDI5NmIyOTllLCAweDQ5MmZjMjk1LCAweDkyNjZiZWFiLCAweGI1Njc2ZTY5LCAweDli ZDNkZGRhLAorICAweGRmN2UwNTJmLCAweGRiMjU3MDFjLCAweDFiNWU1MWVlLCAweGY2NTMyNGU2 LCAweDZhZmNlMzZjLCAweDAzMTZjYzA0LAorICAweDg2NDQyMTNlLCAweGI3ZGM1OWQwLCAweDc5 NjUyOTFmLCAweGNjZDZmZDQzLCAweDQxODIzOTc5LCAweDkzMmJjZGY2LAorICAweGI2NTdjMzRk LCAweDRlZGZkMjgyLCAweDdhZTUyOTBjLCAweDNjYjk1MzZiLCAweDg1MWUyMGZlLCAweDk4MzM1 NTdlLAorICAweDEzZWNmMGIwLCAweGQzZmZiMzcyLCAweDNmODVjNWMxLCAweDBhZWY3ZWQyCit9 OworCisvKiBFbmNyeXB0L2RlY3J5cHQgb25lIDY0LWJpdCBibG9jayBvZiBkYXRhICovCisKK3Zv aWQKK2NrX2Nhc3RfZWNiX2VuY3J5cHQob3V0LCBpbiwgc2NoZWQsIG1vZGUpCisgICAgdWludDhw IG91dDsKKyAgICB1aW50OHAgaW47CisgICAgQ2FzdEtleVNjaGVkICogc2NoZWQ7CisgICAgaW50 IG1vZGU7ICAgICAgICAgICAvKiB6ZXJvIG1lYW5zIGVuY3J5cHQgKi8KK3sKKyAgICB1aW50MzIg dFsyXTsKKworI2lmZGVmIExJVFRMRV9FTkRJQU4KKyAgICB0WzBdID0gKGluWzBdIDw8IDI0KSB8 IChpblsxXSA8PCAxNikgfCAoaW5bMl0gPDwgOCkgfCBpblszXTsKKyAgICB0WzFdID0gKGluWzRd IDw8IDI0KSB8IChpbls1XSA8PCAxNikgfCAoaW5bNl0gPDwgOCkgfCBpbls3XTsKKyNlbHNlCisg ICAgdFswXSA9ICoodWludDMycCkgaW47CisgICAgdFsxXSA9ICoodWludDMycCkgKGluICsgNCk7 CisjZW5kaWYKKworICAgIGNrX2Nhc3RfZWNiX2NyeXB0KHQsIHNjaGVkLCBtb2RlKTsKKworI2lm ZGVmIExJVFRMRV9FTkRJQU4KKyAgICBvdXRbMF0gPSAodFswXSA+PiAyNCkgJiAweGZmOworICAg IG91dFsxXSA9ICh0WzBdID4+IDE2KSAmIDB4ZmY7CisgICAgb3V0WzJdID0gKHRbMF0gPj4gOCkg JiAweGZmOworICAgIG91dFszXSA9IHRbMF0gJiAweGZmOworICAgIG91dFs0XSA9ICh0WzFdID4+ IDI0KSAmIDB4ZmY7CisgICAgb3V0WzVdID0gKHRbMV0gPj4gMTYpICYgMHhmZjsKKyAgICBvdXRb Nl0gPSAodFsxXSA+PiA4KSAmIDB4ZmY7CisgICAgb3V0WzddID0gdFsxXSAmIDB4ZmY7CisjZWxz ZQorICAgICoodWludDMycCkgb3V0ID0gdFswXTsKKyAgICAqKHVpbnQzMnApIChvdXQgKyA0KSA9 IHRbMV07CisjZW5kaWYKK30KKwordm9pZAorY2tfY2FzdF9lY2JfY3J5cHQoZGF0YSwgc2NoZWQs IG1vZGUpCisgICAgdWludDMycCBkYXRhOworICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOworICAg IGludCBtb2RlOworeworICAgIHJlZ2lzdGVyIHVpbnQzMiBMLCBSLCB0ZW1wOworICAgIHJlZ2lz dGVyIHN0cnVjdCBDYXN0U3Via2V5UGFpciAqIGtwOworICAgIHJlZ2lzdGVyIHVpbnQ4cCBJYSwg SWIsIEljLCBJZDsKKyAgICB1aW50MzIgSTsKKworI2lmZGVmIExJVFRMRV9FTkRJQU4KKyAgICBJ ZCA9ICh1aW50OHApICZJOworICAgIEljID0gSWQgKyAxOworICAgIEliID0gSWMgKyAxOworICAg IElhID0gSWIgKyAxOworI2Vsc2UKKyAgICBJYSA9ICh1aW50OHApICZJOworICAgIEliID0gSWEg KyAxOworICAgIEljID0gSWIgKyAxOworICAgIElkID0gSWMgKyAxOworI2VuZGlmCisKKyAgICBM ID0gZGF0YVswXTsKKyAgICBSID0gZGF0YVsxXTsKKworI2RlZmluZSB0eXBlMChsZWZ0LHJpZ2h0 KSAgICAgICBcCisgICAgICB0ZW1wID0ga3AtPkttICsgcmlnaHQ7XAorICAgICAgSSA9ICh0ZW1w IDw8IGtwLT5LcikgfCAodGVtcCA+PiAoMzIgLSBrcC0+S3IpKTtcCisgICAgICBsZWZ0IF49ICgo UzFbKklhXSBeIFMyWypJYl0pIC0gUzNbKkljXSkgKyBTNFsqSWRdOworCisjZGVmaW5lIHR5cGUx KGxlZnQscmlnaHQpICAgICAgIFwKKyAgICAgIHRlbXAgPSBrcC0+S20gXiByaWdodDtcCisgICAg ICBJID0gKHRlbXAgPDwga3AtPktyKSB8ICh0ZW1wID4+ICgzMiAtIGtwLT5LcikpO1wKKyAgICAg IGxlZnQgXj0gKChTMVsqSWFdIC0gUzJbKkliXSkgKyBTM1sqSWNdKSBeIFM0WypJZF07CisKKyNk ZWZpbmUgdHlwZTIobGVmdCxyaWdodCkgICAgICAgXAorICAgICAgdGVtcCA9IGtwLT5LbSAtIHJp Z2h0O1wKKyAgICAgIEkgPSAodGVtcCA8PCBrcC0+S3IpIHwgKHRlbXAgPj4gKDMyIC0ga3AtPkty KSk7XAorICAgICAgbGVmdCBePSAoKFMxWypJYV0gKyBTMlsqSWJdKSBeIFMzWypJY10pIC0gUzRb KklkXTsKKworICAgIGlmKG1vZGUpIHsKKyNpZm5kZWYgQ0FTVF9FWFBPUlRfRU5DUllQVElPTgor ICAgICAgICBpZihzY2hlZC0+a3NpemUgPiAxMCkgeworICAgICAgICAgICAga3AgPSAmc2NoZWQt PktbMTVdOworICAgICAgICAgICAgdHlwZTAoTCwgUik7IC0ta3A7CisgICAgICAgICAgICB0eXBl MihSLCBMKTsgLS1rcDsKKyAgICAgICAgICAgIHR5cGUxKEwsIFIpOyAtLWtwOworICAgICAgICAg ICAgdHlwZTAoUiwgTCk7IC0ta3A7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisg ICAgICAgIGtwID0gJnNjaGVkLT5LWzExXTsKKyAgICAgICAgdHlwZTIoTCwgUik7IC0ta3A7Cisg ICAgICAgIHR5cGUxKFIsIEwpOyAtLWtwOworICAgICAgICB0eXBlMChMLCBSKTsgLS1rcDsKKyAg ICAgICAgdHlwZTIoUiwgTCk7IC0ta3A7CisgICAgICAgIHR5cGUxKEwsIFIpOyAtLWtwOworICAg ICAgICB0eXBlMChSLCBMKTsgLS1rcDsKKyAgICAgICAgdHlwZTIoTCwgUik7IC0ta3A7CisgICAg ICAgIHR5cGUxKFIsIEwpOyAtLWtwOworICAgICAgICB0eXBlMChMLCBSKTsgLS1rcDsKKyAgICAg ICAgdHlwZTIoUiwgTCk7IC0ta3A7CisgICAgICAgIHR5cGUxKEwsIFIpOyAtLWtwOworICAgICAg ICB0eXBlMChSLCBMKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGtwID0gJnNjaGVkLT5L WzBdOworICAgICAgICB0eXBlMChMLCBSKTsgKytrcDsKKyAgICAgICAgdHlwZTEoUiwgTCk7ICsr a3A7CisgICAgICAgIHR5cGUyKEwsIFIpOyArK2twOworICAgICAgICB0eXBlMChSLCBMKTsgKytr cDsKKyAgICAgICAgdHlwZTEoTCwgUik7ICsra3A7CisgICAgICAgIHR5cGUyKFIsIEwpOyArK2tw OworICAgICAgICB0eXBlMChMLCBSKTsgKytrcDsKKyAgICAgICAgdHlwZTEoUiwgTCk7ICsra3A7 CisgICAgICAgIHR5cGUyKEwsIFIpOyArK2twOworICAgICAgICB0eXBlMChSLCBMKTsgKytrcDsK KyAgICAgICAgdHlwZTEoTCwgUik7ICsra3A7CisgICAgICAgIHR5cGUyKFIsIEwpOyArK2twOwor I2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCisgICAgICAgIGlmKHNjaGVkLT5rc2l6ZSA+ IDEwKSB7CisgICAgICAgICAgICB0eXBlMChMLCBSKTsgKytrcDsKKyAgICAgICAgICAgIHR5cGUx KFIsIEwpOyArK2twOworICAgICAgICAgICAgdHlwZTIoTCwgUik7ICsra3A7CisgICAgICAgICAg ICB0eXBlMChSLCBMKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgZGF0YVswXSA9 IFI7CisgICAgZGF0YVsxXSA9IEw7Cit9CisKKy8qIFRoZSBsYXN0IGZvdXIgUy1ib3hlcyBhcmUg Zm9yIGtleSBzY2hlZHVsZSBzZXR1cCAqLworCitzdGF0aWMgdWludDMyIFM1W10gPSB7CisgIDB4 N2VjOTBjMDQsIDB4MmM2ZTc0YjksIDB4OWIwZTY2ZGYsIDB4YTYzMzc5MTEsIDB4Yjg2YTdmZmYs IDB4MWRkMzU4ZjUsCisgIDB4NDRkZDlkNDQsIDB4MTczMTE2N2YsIDB4MDhmYmYxZmEsIDB4ZTdm NTExY2MsIDB4ZDIwNTFiMDAsIDB4NzM1YWJhMDAsCisgIDB4MmFiNzIyZDgsIDB4Mzg2MzgxY2Is IDB4YWNmNjI0M2EsIDB4NjliZWZkN2EsIDB4ZTZhMmU3N2YsIDB4ZjBjNzIwY2QsCisgIDB4YzQ0 OTQ4MTYsIDB4Y2NmNWMxODAsIDB4Mzg4NTE2NDAsIDB4MTViMGE4NDgsIDB4ZTY4YjE4Y2IsIDB4 NGNhYWRlZmYsCisgIDB4NWY0ODBhMDEsIDB4MDQxMmIyYWEsIDB4MjU5ODE0ZmMsIDB4NDFkMGVm ZTIsIDB4NGU0MGI0OGQsIDB4MjQ4ZWI2ZmIsCisgIDB4OGRiYTFjZmUsIDB4NDFhOTliMDIsIDB4 MWE1NTBhMDQsIDB4YmE4ZjY1Y2IsIDB4NzI1MWY0ZTcsIDB4OTVhNTE3MjUsCisgIDB4YzEwNmVj ZDcsIDB4OTdhNTk4MGEsIDB4YzUzOWI5YWEsIDB4NGQ3OWZlNmEsIDB4ZjJmM2Y3NjMsIDB4Njhh ZjgwNDAsCisgIDB4ZWQwYzllNTYsIDB4MTFiNDk1OGIsIDB4ZTFlYjVhODgsIDB4ODcwOWU2YjAs IDB4ZDdlMDcxNTYsIDB4NGUyOWZlYTcsCisgIDB4NjM2NmU1MmQsIDB4MDJkMWMwMDAsIDB4YzRh YzhlMDUsIDB4OTM3N2Y1NzEsIDB4MGMwNTM3MmEsIDB4NTc4NTM1ZjIsCisgIDB4MjI2MWJlMDIs IDB4ZDY0MmEwYzksIDB4ZGYxM2EyODAsIDB4NzRiNTViZDIsIDB4NjgyMTk5YzAsIDB4ZDQyMWU1 ZWMsCisgIDB4NTNmYjNjZTgsIDB4YzhhZGVkYjMsIDB4MjhhODdmYzksIDB4M2Q5NTk5ODEsIDB4 NWMxZmY5MDAsIDB4ZmUzOGQzOTksCisgIDB4MGM0ZWZmMGIsIDB4MDYyNDA3ZWEsIDB4YWEyZjRm YjEsIDB4NGZiOTY5NzYsIDB4OTBjNzk1MDUsIDB4YjBhOGE3NzQsCisgIDB4ZWY1NWExZmYsIDB4 ZTU5Y2EyYzIsIDB4YTZiNjJkMjcsIDB4ZTY2YTQyNjMsIDB4ZGY2NTAwMWYsIDB4MGVjNTA5NjYs CisgIDB4ZGZkZDU1YmMsIDB4MjlkZTA2NTUsIDB4OTExZTczOWEsIDB4MTdhZjg5NzUsIDB4MzJj NzkxMWMsIDB4ODlmODk0NjgsCisgIDB4MGQwMWU5ODAsIDB4NTI0NzU1ZjQsIDB4MDNiNjNjYzks IDB4MGNjODQ0YjIsIDB4YmNmM2YwYWEsIDB4ODdhYzM2ZTksCisgIDB4ZTUzYTc0MjYsIDB4MDFi M2Q4MmIsIDB4MWE5ZTc0NDksIDB4NjRlZTJkN2UsIDB4Y2RkYmIxZGEsIDB4MDFjOTQ5MTAsCisg IDB4Yjg2OGJmODAsIDB4MGQyNmYzZmQsIDB4OTM0MmVkZTcsIDB4MDRhNWMyODQsIDB4NjM2NzM3 YjYsIDB4NTBmNWI2MTYsCisgIDB4ZjI0NzY2ZTMsIDB4OGVjYTM2YzEsIDB4MTM2ZTA1ZGIsIDB4 ZmVmMTgzOTEsIDB4ZmI4ODdhMzcsIDB4ZDZlN2Y3ZDQsCisgIDB4YzdmYjdkYzksIDB4MzA2M2Zj ZGYsIDB4YjZmNTg5ZGUsIDB4ZWMyOTQxZGEsIDB4MjZlNDY2OTUsIDB4Yjc1NjY0MTksCisgIDB4 ZjY1NGVmYzUsIDB4ZDA4ZDU4YjcsIDB4NDg5MjU0MDEsIDB4YzFiYWNiN2YsIDB4ZTVmZjU1MGYs IDB4YjYwODMwNDksCisgIDB4NWJiNWQwZTgsIDB4ODdkNzJlNWEsIDB4YWI2YTZlZTEsIDB4MjIz YTY2Y2UsIDB4YzYyYmYzY2QsIDB4OWUwODg1ZjksCisgIDB4NjhjYjNlNDcsIDB4MDg2YzAxMGYs IDB4YTIxZGU4MjAsIDB4ZDE4YjY5ZGUsIDB4ZjNmNjU3NzcsIDB4ZmEwMmMzZjYsCisgIDB4NDA3 ZWRhYzMsIDB4Y2JiM2Q1NTAsIDB4MTc5MzA4NGQsIDB4YjBkNzBlYmEsIDB4MGFiMzc4ZDUsIDB4 ZDk1MWZiMGMsCisgIDB4ZGVkN2RhNTYsIDB4NDEyNGJiZTQsIDB4OTRjYTBiNTYsIDB4MGY1NzU1 ZDEsIDB4ZTBlMWU1NmUsIDB4NjE4NGI1YmUsCisgIDB4NTgwYTI0OWYsIDB4OTRmNzRiYzAsIDB4 ZTMyNzg4OGUsIDB4OWY3YjU1NjEsIDB4YzNkYzAyODAsIDB4MDU2ODc3MTUsCisgIDB4NjQ2YzZi ZDcsIDB4NDQ5MDRkYjMsIDB4NjZiNGYwYTMsIDB4YzBmMTY0OGEsIDB4Njk3ZWQ1YWYsIDB4NDll OTJmZjYsCisgIDB4MzA5ZTM3NGYsIDB4MmNiNjM1NmEsIDB4ODU4MDg1NzMsIDB4NDk5MWY4NDAs IDB4NzZmMGFlMDIsIDB4MDgzYmU4NGQsCisgIDB4Mjg0MjFjOWEsIDB4NDQ0ODk0MDYsIDB4NzM2 ZTRjYjgsIDB4YzEwOTI5MTAsIDB4OGJjOTVmYzYsIDB4N2Q4NjljZjQsCisgIDB4MTM0ZjYxNmYs IDB4MmU3NzExOGQsIDB4YjMxYjJiZTEsIDB4YWE5MGI0NzIsIDB4M2NhNWQ3MTcsIDB4N2QxNjFi YmEsCisgIDB4OWNhZDkwMTAsIDB4YWY0NjJiYTIsIDB4OWZlNDU5ZDIsIDB4NDVkMzQ1NTksIDB4 ZDlmMmRhMTMsIDB4ZGJjNjU0ODcsCisgIDB4ZjNlNGY5NGUsIDB4MTc2ZDQ4NmYsIDB4MDk3YzEz ZWEsIDB4NjMxZGE1YzcsIDB4NDQ1ZjczODIsIDB4MTc1NjgzZjQsCisgIDB4Y2RjNjZhOTcsIDB4 NzBiZTAyODgsIDB4YjNjZGNmNzIsIDB4NmU1ZGQyZjMsIDB4MjA5MzYwNzksIDB4NDU5YjgwYTUs CisgIDB4YmU2MGUyZGIsIDB4YTljMjMxMDEsIDB4ZWJhNTMxNWMsIDB4MjI0ZTQyZjIsIDB4MWM1 YzE1NzIsIDB4ZjY3MjFiMmMsCisgIDB4MWFkMmZmZjMsIDB4OGMyNTQwNGUsIDB4MzI0ZWQ3MmYs IDB4NDA2N2I3ZmQsIDB4MDUyMzEzOGUsIDB4NWNhM2JjNzgsCisgIDB4ZGMwZmQ2NmUsIDB4NzU5 MjIyODMsIDB4Nzg0ZDZiMTcsIDB4NThlYmIxNmUsIDB4NDQwOTRmODUsIDB4M2Y0ODFkODcsCisg IDB4ZmNmZWFlN2IsIDB4NzdiNWZmNzYsIDB4OGMyMzAyYmYsIDB4YWFmNDc1NTYsIDB4NWY0NmIw MmEsIDB4MmIwOTI4MDEsCisgIDB4M2QzOGY1ZjcsIDB4MGNhODFmMzYsIDB4NTJhZjRhOGEsIDB4 NjZkNWU3YzAsIDB4ZGYzYjA4NzQsIDB4OTUwNTUxMTAsCisgIDB4MWI1YWQ3YTgsIDB4ZjYxZWQ1 YWQsIDB4NmNmNmU0NzksIDB4MjA3NTgxODQsIDB4ZDBjZWZhNjUsIDB4ODhmN2JlNTgsCisgIDB4 NGEwNDY4MjYsIDB4MGZmNmY4ZjMsIDB4YTA5YzdmNzAsIDB4NTM0NmFiYTAsIDB4NWNlOTZjMjgs IDB4ZTE3NmVkYTMsCisgIDB4NmJhYzMwN2YsIDB4Mzc2ODI5ZDIsIDB4ODUzNjBmYTksIDB4MTdl M2ZlMmEsIDB4MjRiNzk3NjcsIDB4ZjVhOTZiMjAsCisgIDB4ZDZjZDI1OTUsIDB4NjhmZjFlYmYs IDB4NzU1NTQ0MmMsIDB4ZjE5ZjA2YmUsIDB4ZjllMDY1OWEsIDB4ZWViOTQ5MWQsCisgIDB4MzQw MTA3MTgsIDB4YmIzMGNhYjgsIDB4ZTgyMmZlMTUsIDB4ODg1NzA5ODMsIDB4NzUwZTYyNDksIDB4 ZGE2MjdlNTUsCisgIDB4NWU3NmZmYTgsIDB4YjE1MzQ1NDYsIDB4NmQ0N2RlMDgsIDB4ZWZlOWU3 ZDQKK307CisKK3N0YXRpYyB1aW50MzIgUzZbXSA9IHsKKyAgMHhmNmZhOGY5ZCwgMHgyY2FjNmNl MSwgMHg0Y2EzNDg2NywgMHhlMjMzN2Y3YywgMHg5NWRiMDhlNywgMHgwMTY4NDNiNCwKKyAgMHhl Y2VkNWNiYywgMHgzMjU1NTNhYywgMHhiZjlmMDk2MCwgMHhkZmExZTJlZCwgMHg4M2YwNTc5ZCwg MHg2M2VkODZiOSwKKyAgMHgxYWI2YTZiOCwgMHhkZTVlYmUzOSwgMHhmMzhmZjczMiwgMHg4OTg5 YjEzOCwgMHgzM2YxNDk2MSwgMHhjMDE5MzdiZCwKKyAgMHhmNTA2YzZkYSwgMHhlNDYyNWU3ZSwg MHhhMzA4ZWE5OSwgMHg0ZTIzZTMzYywgMHg3OWNiZDdjYywgMHg0OGExNDM2NywKKyAgMHhhMzE0 OTYxOSwgMHhmZWM5NGJkNSwgMHhhMTE0MTc0YSwgMHhlYWEwMTg2NiwgMHhhMDg0ZGIyZCwgMHgw OWE4NDg2ZiwKKyAgMHhhODg4NjE0YSwgMHgyOTAwYWY5OCwgMHgwMTY2NTk5MSwgMHhlMTk5Mjg2 MywgMHhjOGYzMGM2MCwgMHgyZTc4ZWYzYywKKyAgMHhkMGQ1MTkzMiwgMHhjZjBmZWMxNCwgMHhm N2NhMDdkMiwgMHhkMGE4MjA3MiwgMHhmZDQxMTk3ZSwgMHg5MzA1YTZiMCwKKyAgMHhlODZiZTNk YSwgMHg3NGJlZDNjZCwgMHgzNzJkYTUzYywgMHg0YzdmNDQ0OCwgMHhkYWI1ZDQ0MCwgMHg2ZGJh MGVjMywKKyAgMHgwODM5MTlhNywgMHg5ZmJhZWVkOSwgMHg0OWRiY2ZiMCwgMHg0ZTY3MGM1Mywg MHg1YzNkOWMwMSwgMHg2NGJkYjk0MSwKKyAgMHgyYzBlNjM2YSwgMHhiYTdkZDljZCwgMHhlYTZm NzM4OCwgMHhlNzBiYzc2MiwgMHgzNWYyOWFkYiwgMHg1YzRjZGQ4ZCwKKyAgMHhmMGQ0OGQ4Yywg MHhiODgxNTNlMiwgMHgwOGExOTg2NiwgMHgxYWUyZWFjOCwgMHgyODRjYWY4OSwgMHhhYTkyODIy MywKKyAgMHg5MzM0YmU1MywgMHgzYjNhMjFiZiwgMHgxNjQzNGJlMywgMHg5YWVhMzkwNiwgMHhl ZmU4YzM2ZSwgMHhmODkwY2RkOSwKKyAgMHg4MDIyNmRhZSwgMHhjMzQwYTRhMywgMHhkZjdlOWMw OSwgMHhhNjk0YTgwNywgMHg1YjdjNWVjYywgMHgyMjFkYjNhNiwKKyAgMHg5YTY5YTAyZiwgMHg2 ODgxOGE1NCwgMHhjZWIyMjk2ZiwgMHg1M2MwODQzYSwgMHhmZTg5MzY1NSwgMHgyNWJmZTY4YSwK KyAgMHhiNDYyOGFiYywgMHhjZjIyMmViZiwgMHgyNWFjNmY0OCwgMHhhOWE5OTM4NywgMHg1M2Jk ZGI2NSwgMHhlNzZmZmJlNywKKyAgMHhlOTY3ZmQ3OCwgMHgwYmE5MzU2MywgMHg4ZTM0MmJjMSwg MHhlOGExMWJlOSwgMHg0OTgwNzQwZCwgMHhjODA4N2RmYywKKyAgMHg4ZGU0YmY5OSwgMHhhMTEx MDFhMCwgMHg3ZmQzNzk3NSwgMHhkYTVhMjZjMCwgMHhlODFmOTk0ZiwgMHg5NTI4Y2Q4OSwKKyAg MHhmZDMzOWZlZCwgMHhiODc4MzRiZiwgMHg1ZjA0NDU2ZCwgMHgyMjI1ODY5OCwgMHhjOWM0Yzgz YiwgMHgyZGMxNTZiZSwKKyAgMHg0ZjYyOGRhYSwgMHg1N2Y1NWVjNSwgMHhlMjIyMGFiZSwgMHhk MjkxNmViZiwgMHg0ZWM3NWI5NSwgMHgyNGYyYzNjMCwKKyAgMHg0MmQxNWQ5OSwgMHhjZDBkN2Zh MCwgMHg3YjZlMjdmZiwgMHhhOGRjOGFmMCwgMHg3MzQ1YzEwNiwgMHhmNDFlMjMyZiwKKyAgMHgz NTE2MjM4NiwgMHhlNmVhODkyNiwgMHgzMzMzYjA5NCwgMHgxNTdlYzZmMiwgMHgzNzJiNzRhZiwg MHg2OTI1NzNlNCwKKyAgMHhlOWE5ZDg0OCwgMHhmMzE2MDI4OSwgMHgzYTYyZWYxZCwgMHhhNzg3 ZTIzOCwgMHhmM2E1ZjY3NiwgMHg3NDM2NDg1MywKKyAgMHgyMDk1MTA2MywgMHg0NTc2Njk4ZCwg MHhiNmZhZDQwNywgMHg1OTJhZjk1MCwgMHgzNmY3MzUyMywgMHg0Y2ZiNmU4NywKKyAgMHg3ZGE0 Y2VjMCwgMHg2YzE1MmRhYSwgMHhjYjAzOTZhOCwgMHhjNTBkZmU1ZCwgMHhmY2Q3MDdhYiwgMHgw OTIxYzQyZiwKKyAgMHg4OWRmZjBiYiwgMHg1ZmUyYmU3OCwgMHg0NDhmNGYzMywgMHg3NTQ2MTNj OSwgMHgyYjA1ZDA4ZCwgMHg0OGI5ZDU4NSwKKyAgMHhkYzA0OTQ0MSwgMHhjODA5OGY5YiwgMHg3 ZGVkZTc4NiwgMHhjMzlhMzM3MywgMHg0MjQxMDAwNSwgMHg2YTA5MTc1MSwKKyAgMHgwZWYzYzhh NiwgMHg4OTAwNzJkNiwgMHgyODIwNzY4MiwgMHhhOWE5ZjdiZSwgMHhiZjMyNjc5ZCwgMHhkNDVi NWI3NSwKKyAgMHhiMzUzZmQwMCwgMHhjYmIwZTM1OCwgMHg4MzBmMjIwYSwgMHgxZjhmYjIxNCwg MHhkMzcyY2YwOCwgMHhjYzNjNGExMywKKyAgMHg4Y2Y2MzE2NiwgMHgwNjFjODdiZSwgMHg4OGM5 OGY4OCwgMHg2MDYyZTM5NywgMHg0N2NmOGU3YSwgMHhiNmM4NTI4MywKKyAgMHgzY2MyYWNmYiwg MHgzZmMwNjk3NiwgMHg0ZThmMDI1MiwgMHg2NGQ4MzE0ZCwgMHhkYTM4NzBlMywgMHgxZTY2NTQ1 OSwKKyAgMHhjMTA5MDhmMCwgMHg1MTMwMjFhNSwgMHg2YzViNjhiNywgMHg4MjJmOGFhMCwgMHgz MDA3Y2QzZSwgMHg3NDcxOWVlZiwKKyAgMHhkYzg3MjY4MSwgMHgwNzMzNDBkNCwgMHg3ZTQzMmZk OSwgMHgwYzVlYzI0MSwgMHg4ODA5Mjg2YywgMHhmNTkyZDg5MSwKKyAgMHgwOGE5MzBmNiwgMHg5 NTdlZjMwNSwgMHhiN2ZiZmZiZCwgMHhjMjY2ZTk2ZiwgMHg2ZmU0YWM5OCwgMHhiMTczZWNjMCwK KyAgMHhiYzYwYjQyYSwgMHg5NTM0OThkYSwgMHhmYmExYWUxMiwgMHgyZDRiZDczNiwgMHgwZjI1 ZmFhYiwgMHhhNGYzZmNlYiwKKyAgMHhlMjk2OTEyMywgMHgyNTdmMGMzZCwgMHg5MzQ4YWY0OSwg MHgzNjE0MDBiYywgMHhlODgxNmY0YSwgMHgzODE0ZjIwMCwKKyAgMHhhM2Y5NDA0MywgMHg5Yzdh NTRjMiwgMHhiYzcwNGY1NywgMHhkYTQxZTdmOSwgMHhjMjVhZDMzYSwgMHg1NGY0YTA4NCwKKyAg MHhiMTdmNTUwNSwgMHg1OTM1N2NiZSwgMHhlZGJkMTVjOCwgMHg3Zjk3YzVhYiwgMHhiYTVhYzdi NSwgMHhiNmY2ZGVhZiwKKyAgMHgzYTQ3OWMzYSwgMHg1MzAyZGEyNSwgMHg2NTNkN2U2YSwgMHg1 NDI2OGQ0OSwgMHg1MWE0NzdlYSwgMHg1MDE3ZDU1YiwKKyAgMHhkN2QyNWQ4OCwgMHg0NDEzNmM3 NiwgMHgwNDA0YThjOCwgMHhiOGU1YTEyMSwgMHhiODFhOTI4YSwgMHg2MGVkNTg2OSwKKyAgMHg5 N2M1NWI5NiwgMHhlYWVjOTkxYiwgMHgyOTkzNTkxMywgMHgwMWZkYjdmMSwgMHgwODhlOGRmYSwg MHg5YWI2ZjZmNSwKKyAgMHgzYjRjYmY5ZiwgMHg0YTVkZTNhYiwgMHhlNjA1MWQzNSwgMHhhMGUx ZDg1NSwgMHhkMzZiNGNmMSwgMHhmNTQ0ZWRlYiwKKyAgMHhiMGU5MzUyNCwgMHhiZWJiOGZiZCwg MHhhMmQ3NjJjZiwgMHg0OWM5MmY1NCwgMHgzOGI1ZjMzMSwgMHg3MTI4YTQ1NCwKKyAgMHg0ODM5 MjkwNSwgMHhhNjViMWRiOCwgMHg4NTFjOTdiZCwgMHhkNjc1Y2YyZgorfTsKKworc3RhdGljIHVp bnQzMiBTN1tdID0geworICAweDg1ZTA0MDE5LCAweDMzMmJmNTY3LCAweDY2MmRiZmZmLCAweGNm YzY1NjkzLCAweDJhOGQ3ZjZmLCAweGFiOWJjOTEyLAorICAweGRlNjAwOGExLCAweDIwMjhkYTFm LCAweDAyMjdiY2U3LCAweDRkNjQyOTE2LCAweDE4ZmFjMzAwLCAweDUwZjE4YjgyLAorICAweDJj YjJjYjExLCAweGIyMzJlNzVjLCAweDRiMzY5NWYyLCAweGIyODcwN2RlLCAweGEwNWZiY2Y2LCAw eGNkNDE4MWU5LAorICAweGUxNTAyMTBjLCAweGUyNGVmMWJkLCAweGIxNjhjMzgxLCAweGZkZTRl Nzg5LCAweDVjNzliMGQ4LCAweDFlOGJmZDQzLAorICAweDRkNDk1MDAxLCAweDM4YmU0MzQxLCAw eDkxM2NlZTFkLCAweDkyYTc5YzNmLCAweDA4OTc2NmJlLCAweGJhZWVhZGY0LAorICAweDEyODZi ZWNmLCAweGI2ZWFjYjE5LCAweDI2NjBjMjAwLCAweDc1NjViZGU0LCAweDY0MjQxZjdhLCAweDgy NDhkY2E5LAorICAweGMzYjNhZDY2LCAweDI4MTM2MDg2LCAweDBiZDhkZmE4LCAweDM1NmQxY2Yy LCAweDEwNzc4OWJlLCAweGIzYjJlOWNlLAorICAweDA1MDJhYThmLCAweDBiYzAzNTFlLCAweDE2 NmJmNTJhLCAweGViMTJmZjgyLCAweGUzNDg2OTExLCAweGQzNGQ3NTE2LAorICAweDRlN2IzYWZm LCAweDVmNDM2NzFiLCAweDljZjZlMDM3LCAweDQ5ODFhYzgzLCAweDMzNDI2NmNlLCAweDhjOTM0 MWI3LAorICAweGQwZDg1NGMwLCAweGNiM2E2Yzg4LCAweDQ3YmMyODI5LCAweDQ3MjViYTM3LCAw eGE2NmFkMjJiLCAweDdhZDYxZjFlLAorICAweDBjNWNiYWZhLCAweDQ0MzdmMTA3LCAweGI2ZTc5 OTYyLCAweDQyZDJkODE2LCAweDBhOTYxMjg4LCAweGUxYTVjMDZlLAorICAweDEzNzQ5ZTY3LCAw eDcyZmMwODFhLCAweGIxZDEzOWY3LCAweGY5NTgzNzQ1LCAweGNmMTlkZjU4LCAweGJlYzNmNzU2 LAorICAweGMwNmViYTMwLCAweDA3MjExYjI0LCAweDQ1YzI4ODI5LCAweGM5NWUzMTdmLCAweGJj OGVjNTExLCAweDM4YmM0NmU5LAorICAweGM2ZTZmYTE0LCAweGJhZTg1ODRhLCAweGFkNGViYzQ2 LCAweDQ2OGY1MDhiLCAweDc4Mjk0MzVmLCAweGYxMjQxODNiLAorICAweDgyMWRiYTlmLCAweGFm ZjYwZmY0LCAweGVhMmM0ZTZkLCAweDE2ZTM5MjY0LCAweDkyNTQ0YThiLCAweDAwOWI0ZmMzLAor ICAweGFiYTY4Y2VkLCAweDlhYzk2Zjc4LCAweDA2YTViNzlhLCAweGIyODU2ZTZlLCAweDFhZWMz Y2E5LCAweGJlODM4Njg4LAorICAweDBlMDgwNGU5LCAweDU1ZjFiZTU2LCAweGU3ZTUzNjNiLCAw eGIzYTFmMjVkLCAweGY3ZGViYjg1LCAweDYxZmUwMzNjLAorICAweDE2NzQ2MjMzLCAweDNjMDM0 YzI4LCAweGRhNmQwYzc0LCAweDc5YWFjNTZjLCAweDNjZTRlMWFkLCAweDUxZjBjODAyLAorICAw eDk4ZjhmMzVhLCAweDE2MjZhNDlmLCAweGVlZDgyYjI5LCAweDFkMzgyZmUzLCAweDBjNGZiOTlh LCAweGJiMzI1Nzc4LAorICAweDNlYzZkOTdiLCAweDZlNzdhNmE5LCAweGNiNjU4YjVjLCAweGQ0 NTIzMGM3LCAweDJiZDE0MDhiLCAweDYwYzAzZWI3LAorICAweGI5MDY4ZDc4LCAweGEzMzc1NGY0 LCAweGY0MzBjODdkLCAweGM4YTcxMzAyLCAweGI5NmQ4YzMyLCAweGViZDRlN2JlLAorICAweGJl OGI5ZDJkLCAweDc5NzlmYjA2LCAweGU3MjI1MzA4LCAweDhiNzVjZjc3LCAweDExZWY4ZGE0LCAw eGUwODNjODU4LAorICAweDhkNmI3ODZmLCAweDVhNjMxN2E2LCAweGZhNWNmN2EwLCAweDVkZGEw MDMzLCAweGYyOGViZmIwLCAweGY1YjljMzEwLAorICAweGEwZWFjMjgwLCAweDA4Yjk3NjdhLCAw eGEzZDlkMmIwLCAweDc5ZDM0MjE3LCAweDAyMWE3MThkLCAweDlhYzYzMzZhLAorICAweDI3MTFm ZDYwLCAweDQzODA1MGUzLCAweDA2OTkwOGE4LCAweDNkN2ZlZGM0LCAweDgyNmQyYmVmLCAweDRl ZWI4NDc2LAorICAweDQ4OGRjZjI1LCAweDM2YzlkNTY2LCAweDI4ZTc0ZTQxLCAweGMyNjEwYWNh LCAweDNkNDlhOWNmLCAweGJhZTNiOWRmLAorICAweGI2NWY4ZGU2LCAweDkyYWVhZjY0LCAweDNh YzdkNWU2LCAweDllYTgwNTA5LCAweGYyMmIwMTdkLCAweGE0MTczZjcwLAorICAweGRkMWUxNmMz LCAweDE1ZTBkN2Y5LCAweDUwYjFiODg3LCAweDJiOWY0ZmQ1LCAweDYyNWFiYTgyLCAweDZhMDE3 OTYyLAorICAweDJlYzAxYjljLCAweDE1NDg4YWE5LCAweGQ3MTZlNzQwLCAweDQwMDU1YTJjLCAw eDkzZDI5YTIyLCAweGUzMmRiZjlhLAorICAweDA1ODc0NWI5LCAweDM0NTNkYzFlLCAweGQ2OTky OTZlLCAweDQ5NmNmZjZmLCAweDFjOWY0OTg2LCAweGRmZTJlZDA3LAorICAweGI4NzI0MmQxLCAw eDE5ZGU3ZWFlLCAweDA1M2U1NjFhLCAweDE1YWQ2ZjhjLCAweDY2NjI2YzFjLCAweDcxNTRjMjRj LAorICAweGVhMDgyYjJhLCAweDkzZWIyOTM5LCAweDE3ZGNiMGYwLCAweDU4ZDRmMmFlLCAweDll YTI5NGZiLCAweDUyY2Y1NjRjLAorICAweDk4ODNmZTY2LCAweDJlYzQwNTgxLCAweDc2Mzk1M2Mz LCAweDAxZDY2OTJlLCAweGQzYTBjMTA4LCAweGExZTcxNjBlLAorICAweGU0ZjJkZmE2LCAweDY5 M2VkMjg1LCAweDc0OTA0Njk4LCAweDRjMmIwZWRkLCAweDRmNzU3NjU2LCAweDVkMzkzMzc4LAor ICAweGExMzIyMzRmLCAweDNkMzIxYzVkLCAweGMzZjVlMTk0LCAweDRiMjY5MzAxLCAweGM3OWYw MjJmLCAweDNjOTk3ZTdlLAorICAweDVlNGY5NTA0LCAweDNmZmFmYmJkLCAweDc2ZjdhZDBlLCAw eDI5NjY5M2Y0LCAweDNkMWZjZTZmLCAweGM2MWU0NWJlLAorICAweGQzYjVhYjM0LCAweGY3MmJm OWI3LCAweDFiMDQzNGMwLCAweDRlNzJiNTY3LCAweDU1OTJhMzNkLCAweGI1MjI5MzAxLAorICAw eGNmZDJhODdmLCAweDYwYWViNzY3LCAweDE4MTQzODZiLCAweDMwYmNjMzNkLCAweDM4YTBjMDdk LCAweGZkMTYwNmYyLAorICAweGMzNjM1MTliLCAweDU4OWRkMzkwLCAweDU0NzlmOGU2LCAweDFj YjhkNjQ3LCAweDk3ZmQ2MWE5LCAweGVhNzc1OWY0LAorICAweDJkNTc1MzlkLCAweDU2OWE1OGNm LCAweGU4NGU2M2FkLCAweDQ2MmUxYjc4LCAweDY1ODBmODdlLCAweGYzODE3OTE0LAorICAweDkx ZGE1NWY0LCAweDQwYTIzMGYzLCAweGQxOTg4ZjM1LCAweGI2ZTMxOGQyLCAweDNmZmE1MGJjLCAw eDNkNDBmMDIxLAorICAweGMzYzBiZGFlLCAweDQ5NThjMjRjLCAweDUxOGYzNmIyLCAweDg0YjFk MzcwLCAweDBmZWRjZTgzLCAweDg3OGRkYWRhLAorICAweGYyYTI3OWM3LCAweDk0ZTAxYmU4LCAw eDkwNzE2ZjRiLCAweDk1NGI4YWEzCit9OworCitzdGF0aWMgdWludDMyIFM4W10gPSB7CisgIDB4 ZTIxNjMwMGQsIDB4YmJkZGZmZmMsIDB4YTdlYmRhYmQsIDB4MzU2NDgwOTUsIDB4Nzc4OWY4Yjcs IDB4ZTZjMTEyMWIsCisgIDB4MGUyNDE2MDAsIDB4MDUyY2U4YjUsIDB4MTFhOWNmYjAsIDB4ZTU5 NTJmMTEsIDB4ZWNlNzk5MGEsIDB4OTM4NmQxNzQsCisgIDB4MmE0MjkzMWMsIDB4NzZlMzgxMTEs IDB4YjEyZGVmM2EsIDB4MzdkZGRkZmMsIDB4ZGU5YWRlYjEsIDB4MGEwY2MzMmMsCisgIDB4YmUx OTcwMjksIDB4ODRhMDA5NDAsIDB4YmIyNDNhMGYsIDB4YjRkMTM3Y2YsIDB4YjQ0ZTc5ZjAsIDB4 MDQ5ZWVkZmQsCisgIDB4MGIxNWExNWQsIDB4NDgwZDMxNjgsIDB4OGJiYmRlNWEsIDB4NjY5ZGVk NDIsIDB4YzdlY2U4MzEsIDB4M2Y4Zjk1ZTcsCisgIDB4NzJkZjE5MWIsIDB4NzU4MDMzMGQsIDB4 OTQwNzQyNTEsIDB4NWM3ZGNkZmEsIDB4YWJiZTZkNjMsIDB4YWE0MDIxNjQsCisgIDB4YjMwMWQ0 MGEsIDB4MDJlN2QxY2EsIDB4NTM1NzFkYWUsIDB4N2EzMTgyYTIsIDB4MTJhOGRkZWMsIDB4ZmRh YTMzNWQsCisgIDB4MTc2ZjQzZTgsIDB4NzFmYjQ2ZDQsIDB4MzgxMjkwMjIsIDB4Y2U5NDlhZDQs IDB4Yjg0NzY5YWQsIDB4OTY1YmQ4NjIsCisgIDB4ODJmM2QwNTUsIDB4NjZmYjk3NjcsIDB4MTVi ODBiNGUsIDB4MWQ1YjQ3YTAsIDB4NGNmZGUwNmYsIDB4YzI4ZWM0YjgsCisgIDB4NTdlODcyNmUs IDB4NjQ3YTc4ZmMsIDB4OTk4NjVkNDQsIDB4NjA4YmQ1OTMsIDB4NmMyMDBlMDMsIDB4MzlkYzVm ZjYsCisgIDB4NWQwYjAwYTMsIDB4YWU2M2FmZjIsIDB4N2U4YmQ2MzIsIDB4NzAxMDhjMGMsIDB4 YmJkMzUwNDksIDB4Mjk5OGRmMDQsCisgIDB4OTgwY2Y0MmEsIDB4OWI2ZGY0OTEsIDB4OWU3ZWRk NTMsIDB4MDY5MTg1NDgsIDB4NThjYjdlMDcsIDB4M2I3NGVmMmUsCisgIDB4NTIyZmZmYjEsIDB4 ZDI0NzA4Y2MsIDB4MWM3ZTI3Y2QsIDB4YTRlYjIxNWIsIDB4M2NmMWQyZTIsIDB4MTliNDdhMzgs CisgIDB4NDI0Zjc2MTgsIDB4MzU4NTYwMzksIDB4OWQxN2RlZTcsIDB4MjdlYjM1ZTYsIDB4Yzlh ZmY2N2IsIDB4MzZiYWY1YjgsCisgIDB4MDljNDY3Y2QsIDB4YzE4OTEwYjEsIDB4ZTExZGJmN2Is IDB4MDZjZDFhZjgsIDB4NzE3MGM2MDgsIDB4MmQ1ZTMzNTQsCisgIDB4ZDRkZTQ5NWEsIDB4NjRj NmQwMDYsIDB4YmNjMGM2MmMsIDB4M2RkMDBkYjMsIDB4NzA4ZjhmMzQsIDB4NzdkNTFiNDIsCisg IDB4MjY0ZjYyMGYsIDB4MjRiOGQyYmYsIDB4MTVjMWI3OWUsIDB4NDZhNTI1NjQsIDB4ZjhkN2U1 NGUsIDB4M2UzNzgxNjAsCisgIDB4Nzg5NWNkYTUsIDB4ODU5YzE1YTUsIDB4ZTY0NTk3ODgsIDB4 YzM3YmM3NWYsIDB4ZGIwN2JhMGMsIDB4MDY3NmEzYWIsCisgIDB4N2YyMjliMWUsIDB4MzE4NDJl N2IsIDB4MjQyNTlmZDcsIDB4ZjhiZWY0NzIsIDB4ODM1ZmZjYjgsIDB4NmRmNGMxZjIsCisgIDB4 OTZmNWIxOTUsIDB4ZmQwYWYwZmMsIDB4YjBmZTEzNGMsIDB4ZTI1MDZkM2QsIDB4NGY5YjEyZWEs IDB4ZjIxNWYyMjUsCisgIDB4YTIyMzczNmYsIDB4OWZiNGM0MjgsIDB4MjVkMDQ5NzksIDB4MzRj NzEzZjgsIDB4YzQ2MTgxODcsIDB4ZWE3YTZlOTgsCisgIDB4N2NkMTZlZmMsIDB4MTQzNjg3NmMs IDB4ZjE1NDQxMDcsIDB4YmVkZWVlMTQsIDB4NTZlOWFmMjcsIDB4YTA0YWE0NDEsCisgIDB4M2Nm N2M4OTksIDB4OTJlY2JhZTYsIDB4ZGQ2NzAxNmQsIDB4MTUxNjgyZWIsIDB4YTg0MmVlZGYsIDB4 ZmRiYTYwYjQsCisgIDB4ZjE5MDdiNzUsIDB4MjBlMzAzMGYsIDB4MjRkOGMyOWUsIDB4ZTEzOTY3 M2IsIDB4ZWZhNjNmYjgsIDB4NzE4NzMwNTQsCisgIDB4YjZmMmNmM2IsIDB4OWYzMjY0NDIsIDB4 Y2IxNWE0Y2MsIDB4YjAxYTQ1MDQsIDB4ZjFlNDdkOGQsIDB4ODQ0YTFiZTUsCisgIDB4YmFlN2Rm ZGMsIDB4NDJjYmRhNzAsIDB4Y2Q3ZGFlMGEsIDB4NTdlODViN2EsIDB4ZDUzZjVhZjYsIDB4MjBj ZjRkOGMsCisgIDB4Y2VhNGQ0MjgsIDB4NzlkMTMwYTQsIDB4MzQ4NmViZmIsIDB4MzNkM2NkZGMs IDB4Nzc4NTNiNTMsIDB4MzdlZmZjYjUsCisgIDB4YzUwNjg3NzgsIDB4ZTU4MGIzZTYsIDB4NGU2 OGI4ZjQsIDB4YzVjOGIzN2UsIDB4MGQ4MDllYTIsIDB4Mzk4ZmViN2MsCisgIDB4MTMyYTRmOTQs IDB4NDNiNzk1MGUsIDB4MmZlZTdkMWMsIDB4MjIzNjEzYmQsIDB4ZGQwNmNhYTIsIDB4MzdkZjkz MmIsCisgIDB4YzQyNDgyODksIDB4YWNmM2ViYzMsIDB4NTcxNWY2YjcsIDB4ZWYzNDc4ZGQsIDB4 ZjI2NzYxNmYsIDB4YzE0OGNiZTQsCisgIDB4OTA1MjgxNWUsIDB4NWU0MTBmYWIsIDB4YjQ4YTI0 NjUsIDB4MmVkYTdmYTQsIDB4ZTg3YjQwZTQsIDB4ZTk4ZWEwODQsCisgIDB4NTg4OWU5ZTEsIDB4 ZWZkMzkwZmMsIDB4ZGQwN2QzNWIsIDB4ZGI0ODU2OTQsIDB4MzhkN2U1YjIsIDB4NTc3MjAxMDEs CisgIDB4NzMwZWRlYmMsIDB4NWI2NDMxMTMsIDB4OTQ5MTdlNGYsIDB4NTAzYzJmYmEsIDB4NjQ2 ZjEyODIsIDB4NzUyM2QyNGEsCisgIDB4ZTA3Nzk2OTUsIDB4ZjljMTdhOGYsIDB4N2E1YjIxMjEs IDB4ZDE4N2I4OTYsIDB4MjkyNjNhNGQsIDB4YmE1MTBjZGYsCisgIDB4ODFmNDdjOWYsIDB4YWQx MTYzZWQsIDB4ZWE3YjU5NjUsIDB4MWEwMDcyNmUsIDB4MTE0MDMwOTIsIDB4MDBkYTZkNzcsCisg IDB4NGEwY2RkNjEsIDB4YWQxZjQ2MDMsIDB4NjA1YmRmYjAsIDB4OWVlZGMzNjQsIDB4MjJlYmU2 YTgsIDB4Y2VlN2QyOGEsCisgIDB4YTBlNzM2YTAsIDB4NTU2NGE2YjksIDB4MTA4NTMyMDksIDB4 YzdlYjhmMzcsIDB4MmRlNzA1Y2EsIDB4ODk1MTU3MGYsCisgIDB4ZGYwOTgyMmIsIDB4YmQ2OTFh NmMsIDB4YWExMmU0ZjIsIDB4ODc0NTFjMGYsIDB4ZTBmNmEyN2EsIDB4M2FkYTQ4MTksCisgIDB4 NGNmMTc2NGYsIDB4MGQ3NzFjMmIsIDB4NjdjZGIxNTYsIDB4MzUwZDgzODQsIDB4NTkzOGZhMGYs IDB4NDIzOTllZjMsCisgIDB4MzY5OTdiMDcsIDB4MGU4NDA5M2QsIDB4NGFhOTNlNjEsIDB4ODM2 MGQ4N2IsIDB4MWZhOThiMGMsIDB4MTE0OTM4MmMsCisgIDB4ZTk3NjI1YTUsIDB4MDYxNGQxYjcs IDB4MGUyNTI0NGIsIDB4MGM3NjgzNDcsIDB4NTg5ZThkODIsIDB4MGQyMDU5ZDEsCisgIDB4YTQ2 NmJiMWUsIDB4ZjhkYTBhODIsIDB4MDRmMTkxMzAsIDB4YmE2ZTRlYzAsIDB4OTkyNjUxNjQsIDB4 MWVlNzIzMGQsCisgIDB4NTBiMmFkODAsIDB4ZWFlZTY4MDEsIDB4OGRiMmEyODMsIDB4ZWE4YmY1 OWUKK307CisKKy8qIEluaXRpYWxpemUgYSBrZXkgc2NoZWR1bGUgZnJvbSBhIDEyOC1iaXQga2V5 ICovCisKK3N0YXRpYyB2b2lkCitjYXN0X2tleV9zY2hlZChzY2hlZCwga2V5KQorICAgICBDYXN0 S2V5U2NoZWQgKiBzY2hlZDsKKyAgICAgdWludDhwIGtleTsKK3sKKyAgICB1aW50OHAgeDAsIHgx LCB4MiwgeDMsIHg0LCB4NSwgeDYsIHg3LCB4OCwgeDksIHhBLCB4QiwgeEMsIHhELCB4RSwgeEY7 CisgICAgdWludDhwIHowLCB6MSwgejIsIHozLCB6NCwgejUsIHo2LCB6NywgejgsIHo5LCB6QSwg ekIsIHpDLCB6RCwgekUsIHpGOworICAgIHVpbnQzMiBYMDMsIFg0NywgWDhCLCBYQ0YsIFowMywg WjQ3LCBaOEIsIFpDRjsKKworI2lmZGVmIExJVFRMRV9FTkRJQU4KKyAgICB4MyA9ICh1aW50OHAp ICZYMDM7ICB4MiA9IHgzICsgMTsgIHgxID0geDIgKyAxOyAgeDAgPSB4MSArIDE7CisgICAgeDcg PSAodWludDhwKSAmWDQ3OyAgeDYgPSB4NyArIDE7ICB4NSA9IHg2ICsgMTsgIHg0ID0geDUgKyAx OworICAgIHhCID0gKHVpbnQ4cCkgJlg4QjsgIHhBID0geEIgKyAxOyAgeDkgPSB4QSArIDE7ICB4 OCA9IHg5ICsgMTsKKyAgICB4RiA9ICh1aW50OHApICZYQ0Y7ICB4RSA9IHhGICsgMTsgIHhEID0g eEUgKyAxOyAgeEMgPSB4RCArIDE7CisgICAgejMgPSAodWludDhwKSAmWjAzOyAgejIgPSB6MyAr IDE7ICB6MSA9IHoyICsgMTsgIHowID0gejEgKyAxOworICAgIHo3ID0gKHVpbnQ4cCkgJlo0Nzsg IHo2ID0gejcgKyAxOyAgejUgPSB6NiArIDE7ICB6NCA9IHo1ICsgMTsKKyAgICB6QiA9ICh1aW50 OHApICZaOEI7ICB6QSA9IHpCICsgMTsgIHo5ID0gekEgKyAxOyAgejggPSB6OSArIDE7CisgICAg ekYgPSAodWludDhwKSAmWkNGOyAgekUgPSB6RiArIDE7ICB6RCA9IHpFICsgMTsgIHpDID0gekQg KyAxOworI2Vsc2UKKyAgICB4MCA9ICh1aW50OHApICZYMDM7ICB4MSA9IHgwICsgMTsgIHgyID0g eDEgKyAxOyAgeDMgPSB4MiArIDE7CisgICAgeDQgPSAodWludDhwKSAmWDQ3OyAgeDUgPSB4NCAr IDE7ICB4NiA9IHg1ICsgMTsgIHg3ID0geDYgKyAxOworICAgIHg4ID0gKHVpbnQ4cCkgJlg4Qjsg IHg5ID0geDggKyAxOyAgeEEgPSB4OSArIDE7ICB4QiA9IHhBICsgMTsKKyAgICB4QyA9ICh1aW50 OHApICZYQ0Y7ICB4RCA9IHhDICsgMTsgIHhFID0geEQgKyAxOyAgeEYgPSB4RSArIDE7CisgICAg ejAgPSAodWludDhwKSAmWjAzOyAgejEgPSB6MCArIDE7ICB6MiA9IHoxICsgMTsgIHozID0gejIg KyAxOworICAgIHo0ID0gKHVpbnQ4cCkgJlo0NzsgIHo1ID0gejQgKyAxOyAgejYgPSB6NSArIDE7 ICB6NyA9IHo2ICsgMTsKKyAgICB6OCA9ICh1aW50OHApICZaOEI7ICB6OSA9IHo4ICsgMTsgIHpB ID0gejkgKyAxOyAgekIgPSB6QSArIDE7CisgICAgekMgPSAodWludDhwKSAmWkNGOyAgekQgPSB6 QyArIDE7ICB6RSA9IHpEICsgMTsgIHpGID0gekUgKyAxOworI2VuZGlmCisKKyNpZmRlZiBMSVRU TEVfRU5ESUFOCisgICAgKngwID0ga2V5WzBdOworICAgICp4MSA9IGtleVsxXTsKKyAgICAqeDIg PSBrZXlbMl07CisgICAgKngzID0ga2V5WzNdOworICAgICp4NCA9IGtleVs0XTsKKyAgICAqeDUg PSBrZXlbNV07CisgICAgKng2ID0ga2V5WzZdOworICAgICp4NyA9IGtleVs3XTsKKyAgICAqeDgg PSBrZXlbOF07CisgICAgKng5ID0ga2V5WzldOworICAgICp4QSA9IGtleVsxMF07CisgICAgKnhC ID0ga2V5WzExXTsKKyAgICAqeEMgPSBrZXlbMTJdOworICAgICp4RCA9IGtleVsxM107CisgICAg KnhFID0ga2V5WzE0XTsKKyAgICAqeEYgPSBrZXlbMTVdOworI2Vsc2UKKyAgICBYMDMgPSAqKHVp bnQzMnApIGtleTsKKyAgICBYNDcgPSAqKHVpbnQzMnApIChrZXkgKyA0KTsKKyAgICBYOEIgPSAq KHVpbnQzMnApIChrZXkgKyA4KTsKKyAgICBYQ0YgPSAqKHVpbnQzMnApIChrZXkgKyAxMik7Cisj ZW5kaWYKKworICAvKiBGaXJzdCBoYWxmIG9mIGtleSBzY2hlZHVsZSAqLworCisgICAgWjAzID0g WDAzIF4gUzVbKnhEXSBeIFM2Wyp4Rl0gXiBTN1sqeENdIF4gUzhbKnhFXSBeIFM3Wyp4OF07Cisg ICAgWjQ3ID0gWDhCIF4gUzVbKnowXSBeIFM2Wyp6Ml0gXiBTN1sqejFdIF4gUzhbKnozXSBeIFM4 Wyp4QV07CisgICAgWjhCID0gWENGIF4gUzVbKno3XSBeIFM2Wyp6Nl0gXiBTN1sqejVdIF4gUzhb Kno0XSBeIFM1Wyp4OV07CisgICAgWkNGID0gWDQ3IF4gUzVbKnpBXSBeIFM2Wyp6OV0gXiBTN1sq ekJdIF4gUzhbKno4XSBeIFM2Wyp4Ql07CisKKyAgICBzY2hlZC0+S1swXS5LbSA9IFM1Wyp6OF0g XiBTNlsqejldIF4gUzdbKno3XSBeIFM4Wyp6Nl0gXiBTNVsqejJdOworICAgIHNjaGVkLT5LWzFd LkttID0gUzVbKnpBXSBeIFM2Wyp6Ql0gXiBTN1sqejVdIF4gUzhbKno0XSBeIFM2Wyp6Nl07Cisg ICAgc2NoZWQtPktbMl0uS20gPSBTNVsqekNdIF4gUzZbKnpEXSBeIFM3Wyp6M10gXiBTOFsqejJd IF4gUzdbKno5XTsKKyAgICBzY2hlZC0+S1szXS5LbSA9IFM1Wyp6RV0gXiBTNlsqekZdIF4gUzdb KnoxXSBeIFM4Wyp6MF0gXiBTOFsqekNdOworCisgICAgWDAzID0gWjhCIF4gUzVbKno1XSBeIFM2 Wyp6N10gXiBTN1sqejRdIF4gUzhbKno2XSBeIFM3Wyp6MF07CisgICAgWDQ3ID0gWjAzIF4gUzVb KngwXSBeIFM2Wyp4Ml0gXiBTN1sqeDFdIF4gUzhbKngzXSBeIFM4Wyp6Ml07CisgICAgWDhCID0g WjQ3IF4gUzVbKng3XSBeIFM2Wyp4Nl0gXiBTN1sqeDVdIF4gUzhbKng0XSBeIFM1Wyp6MV07Cisg ICAgWENGID0gWkNGIF4gUzVbKnhBXSBeIFM2Wyp4OV0gXiBTN1sqeEJdIF4gUzhbKng4XSBeIFM2 Wyp6M107CisKKyAgICBzY2hlZC0+S1s0XS5LbSA9IFM1Wyp4M10gXiBTNlsqeDJdIF4gUzdbKnhD XSBeIFM4Wyp4RF0gXiBTNVsqeDhdOworICAgIHNjaGVkLT5LWzVdLkttID0gUzVbKngxXSBeIFM2 Wyp4MF0gXiBTN1sqeEVdIF4gUzhbKnhGXSBeIFM2Wyp4RF07CisgICAgc2NoZWQtPktbNl0uS20g PSBTNVsqeDddIF4gUzZbKng2XSBeIFM3Wyp4OF0gXiBTOFsqeDldIF4gUzdbKngzXTsKKyAgICBz Y2hlZC0+S1s3XS5LbSA9IFM1Wyp4NV0gXiBTNlsqeDRdIF4gUzdbKnhBXSBeIFM4Wyp4Ql0gXiBT OFsqeDddOworCisgICAgWjAzID0gWDAzIF4gUzVbKnhEXSBeIFM2Wyp4Rl0gXiBTN1sqeENdIF4g UzhbKnhFXSBeIFM3Wyp4OF07CisgICAgWjQ3ID0gWDhCIF4gUzVbKnowXSBeIFM2Wyp6Ml0gXiBT N1sqejFdIF4gUzhbKnozXSBeIFM4Wyp4QV07CisgICAgWjhCID0gWENGIF4gUzVbKno3XSBeIFM2 Wyp6Nl0gXiBTN1sqejVdIF4gUzhbKno0XSBeIFM1Wyp4OV07CisgICAgWkNGID0gWDQ3IF4gUzVb KnpBXSBeIFM2Wyp6OV0gXiBTN1sqekJdIF4gUzhbKno4XSBeIFM2Wyp4Ql07CisKKyAgICBzY2hl ZC0+S1s4XS5LbSA9IFM1Wyp6M10gXiBTNlsqejJdIF4gUzdbKnpDXSBeIFM4Wyp6RF0gXiBTNVsq ejldOworICAgIHNjaGVkLT5LWzldLkttID0gUzVbKnoxXSBeIFM2Wyp6MF0gXiBTN1sqekVdIF4g UzhbKnpGXSBeIFM2Wyp6Q107CisgICAgc2NoZWQtPktbMTBdLkttID0gUzVbKno3XSBeIFM2Wyp6 Nl0gXiBTN1sqejhdIF4gUzhbKno5XSBeIFM3Wyp6Ml07CisgICAgc2NoZWQtPktbMTFdLkttID0g UzVbKno1XSBeIFM2Wyp6NF0gXiBTN1sqekFdIF4gUzhbKnpCXSBeIFM4Wyp6Nl07CisKKyAgICBY MDMgPSBaOEIgXiBTNVsqejVdIF4gUzZbKno3XSBeIFM3Wyp6NF0gXiBTOFsqejZdIF4gUzdbKnow XTsKKyAgICBYNDcgPSBaMDMgXiBTNVsqeDBdIF4gUzZbKngyXSBeIFM3Wyp4MV0gXiBTOFsqeDNd IF4gUzhbKnoyXTsKKyAgICBYOEIgPSBaNDcgXiBTNVsqeDddIF4gUzZbKng2XSBeIFM3Wyp4NV0g XiBTOFsqeDRdIF4gUzVbKnoxXTsKKyAgICBYQ0YgPSBaQ0YgXiBTNVsqeEFdIF4gUzZbKng5XSBe IFM3Wyp4Ql0gXiBTOFsqeDhdIF4gUzZbKnozXTsKKworICAgIHNjaGVkLT5LWzEyXS5LbSA9IFM1 Wyp4OF0gXiBTNlsqeDldIF4gUzdbKng3XSBeIFM4Wyp4Nl0gXiBTNVsqeDNdOworICAgIHNjaGVk LT5LWzEzXS5LbSA9IFM1Wyp4QV0gXiBTNlsqeEJdIF4gUzdbKng1XSBeIFM4Wyp4NF0gXiBTNlsq eDddOworICAgIHNjaGVkLT5LWzE0XS5LbSA9IFM1Wyp4Q10gXiBTNlsqeERdIF4gUzdbKngzXSBe IFM4Wyp4Ml0gXiBTN1sqeDhdOworICAgIHNjaGVkLT5LWzE1XS5LbSA9IFM1Wyp4RV0gXiBTNlsq eEZdIF4gUzdbKngxXSBeIFM4Wyp4MF0gXiBTOFsqeERdOworCisgIC8qIFNlY29uZCBoYWxmIG9m IGtleSBzY2hlZHVsZSAtIGp1c3QgbGlrZSBmaXJzdCBoYWxmICovCisKKyAgICBaMDMgPSBYMDMg XiBTNVsqeERdIF4gUzZbKnhGXSBeIFM3Wyp4Q10gXiBTOFsqeEVdIF4gUzdbKng4XTsKKyAgICBa NDcgPSBYOEIgXiBTNVsqejBdIF4gUzZbKnoyXSBeIFM3Wyp6MV0gXiBTOFsqejNdIF4gUzhbKnhB XTsKKyAgICBaOEIgPSBYQ0YgXiBTNVsqejddIF4gUzZbKno2XSBeIFM3Wyp6NV0gXiBTOFsqejRd IF4gUzVbKng5XTsKKyAgICBaQ0YgPSBYNDcgXiBTNVsqekFdIF4gUzZbKno5XSBeIFM3Wyp6Ql0g XiBTOFsqejhdIF4gUzZbKnhCXTsKKworICAgIHNjaGVkLT5LWzBdLktyID0gKFM1Wyp6OF0gXiBT NlsqejldIF4gUzdbKno3XSBeIFM4Wyp6Nl0gXiBTNVsqejJdKSAmIDB4MWY7CisgICAgc2NoZWQt PktbMV0uS3IgPSAoUzVbKnpBXSBeIFM2Wyp6Ql0gXiBTN1sqejVdIF4gUzhbKno0XSBeIFM2Wyp6 Nl0pICYgMHgxZjsKKyAgICBzY2hlZC0+S1syXS5LciA9IChTNVsqekNdIF4gUzZbKnpEXSBeIFM3 Wyp6M10gXiBTOFsqejJdIF4gUzdbKno5XSkgJiAweDFmOworICAgIHNjaGVkLT5LWzNdLktyID0g KFM1Wyp6RV0gXiBTNlsqekZdIF4gUzdbKnoxXSBeIFM4Wyp6MF0gXiBTOFsqekNdKSAmIDB4MWY7 CisKKyAgICBYMDMgPSBaOEIgXiBTNVsqejVdIF4gUzZbKno3XSBeIFM3Wyp6NF0gXiBTOFsqejZd IF4gUzdbKnowXTsKKyAgICBYNDcgPSBaMDMgXiBTNVsqeDBdIF4gUzZbKngyXSBeIFM3Wyp4MV0g XiBTOFsqeDNdIF4gUzhbKnoyXTsKKyAgICBYOEIgPSBaNDcgXiBTNVsqeDddIF4gUzZbKng2XSBe IFM3Wyp4NV0gXiBTOFsqeDRdIF4gUzVbKnoxXTsKKyAgICBYQ0YgPSBaQ0YgXiBTNVsqeEFdIF4g UzZbKng5XSBeIFM3Wyp4Ql0gXiBTOFsqeDhdIF4gUzZbKnozXTsKKworICAgIHNjaGVkLT5LWzRd LktyID0gKFM1Wyp4M10gXiBTNlsqeDJdIF4gUzdbKnhDXSBeIFM4Wyp4RF0gXiBTNVsqeDhdKSAm IDB4MWY7CisgICAgc2NoZWQtPktbNV0uS3IgPSAoUzVbKngxXSBeIFM2Wyp4MF0gXiBTN1sqeEVd IF4gUzhbKnhGXSBeIFM2Wyp4RF0pICYgMHgxZjsKKyAgICBzY2hlZC0+S1s2XS5LciA9IChTNVsq eDddIF4gUzZbKng2XSBeIFM3Wyp4OF0gXiBTOFsqeDldIF4gUzdbKngzXSkgJiAweDFmOworICAg IHNjaGVkLT5LWzddLktyID0gKFM1Wyp4NV0gXiBTNlsqeDRdIF4gUzdbKnhBXSBeIFM4Wyp4Ql0g XiBTOFsqeDddKSAmIDB4MWY7CisKKyAgICBaMDMgPSBYMDMgXiBTNVsqeERdIF4gUzZbKnhGXSBe IFM3Wyp4Q10gXiBTOFsqeEVdIF4gUzdbKng4XTsKKyAgICBaNDcgPSBYOEIgXiBTNVsqejBdIF4g UzZbKnoyXSBeIFM3Wyp6MV0gXiBTOFsqejNdIF4gUzhbKnhBXTsKKyAgICBaOEIgPSBYQ0YgXiBT NVsqejddIF4gUzZbKno2XSBeIFM3Wyp6NV0gXiBTOFsqejRdIF4gUzVbKng5XTsKKyAgICBaQ0Yg PSBYNDcgXiBTNVsqekFdIF4gUzZbKno5XSBeIFM3Wyp6Ql0gXiBTOFsqejhdIF4gUzZbKnhCXTsK KworICAgIHNjaGVkLT5LWzhdLktyID0gKFM1Wyp6M10gXiBTNlsqejJdIF4gUzdbKnpDXSBeIFM4 Wyp6RF0gXiBTNVsqejldKSAmIDB4MWY7CisgICAgc2NoZWQtPktbOV0uS3IgPSAoUzVbKnoxXSBe IFM2Wyp6MF0gXiBTN1sqekVdIF4gUzhbKnpGXSBeIFM2Wyp6Q10pICYgMHgxZjsKKyAgICBzY2hl ZC0+S1sxMF0uS3IgPSAoUzVbKno3XSBeIFM2Wyp6Nl0gXiBTN1sqejhdIF4gUzhbKno5XSBeIFM3 Wyp6Ml0pICYgMHgxZjsKKyAgICBzY2hlZC0+S1sxMV0uS3IgPSAoUzVbKno1XSBeIFM2Wyp6NF0g XiBTN1sqekFdIF4gUzhbKnpCXSBeIFM4Wyp6Nl0pICYgMHgxZjsKKworICAgIFgwMyA9IFo4QiBe IFM1Wyp6NV0gXiBTNlsqejddIF4gUzdbKno0XSBeIFM4Wyp6Nl0gXiBTN1sqejBdOworICAgIFg0 NyA9IFowMyBeIFM1Wyp4MF0gXiBTNlsqeDJdIF4gUzdbKngxXSBeIFM4Wyp4M10gXiBTOFsqejJd OworICAgIFg4QiA9IFo0NyBeIFM1Wyp4N10gXiBTNlsqeDZdIF4gUzdbKng1XSBeIFM4Wyp4NF0g XiBTNVsqejFdOworICAgIFhDRiA9IFpDRiBeIFM1Wyp4QV0gXiBTNlsqeDldIF4gUzdbKnhCXSBe IFM4Wyp4OF0gXiBTNlsqejNdOworCisgICAgc2NoZWQtPktbMTJdLktyID0gKFM1Wyp4OF0gXiBT NlsqeDldIF4gUzdbKng3XSBeIFM4Wyp4Nl0gXiBTNVsqeDNdKSAmIDB4MWY7CisgICAgc2NoZWQt PktbMTNdLktyID0gKFM1Wyp4QV0gXiBTNlsqeEJdIF4gUzdbKng1XSBeIFM4Wyp4NF0gXiBTNlsq eDddKSAmIDB4MWY7CisgICAgc2NoZWQtPktbMTRdLktyID0gKFM1Wyp4Q10gXiBTNlsqeERdIF4g UzdbKngzXSBeIFM4Wyp4Ml0gXiBTN1sqeDhdKSAmIDB4MWY7CisgICAgc2NoZWQtPktbMTVdLkty ID0gKFM1Wyp4RV0gXiBTNlsqeEZdIF4gUzdbKngxXSBeIFM4Wyp4MF0gXiBTOFsqeERdKSAmIDB4 MWY7Cit9CisKKy8qIEluaXRpYWxpemUgd2l0aCBhIGZ1bGwtc3RyZW5ndGggMTI4LWJpdCBrZXkg Ki8KKworI2lmbmRlZiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OCit2b2lkCitja19jYXN0MTI4X2tl eV9zY2hlZChzY2hlZCwga2V5KQorICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOworICAgIHVpbnQ4 ICoga2V5OworeworICAgIHNjaGVkLT5rc2l6ZSA9IDE2OworICAgIGNhc3Rfa2V5X3NjaGVkKHNj aGVkLCBrZXkpOworfQorI2VuZGlmCisKKy8qIEhhbmRsZSByZWR1Y2VkLWtleXNpemUgdmFyaWFu dHMgKi8KKworc3RhdGljIHZvaWQKK2Nhc3Q1X2tleV9zY2hlZChzY2hlZCwga2V5LCBzeikKKyAg ICBDYXN0S2V5U2NoZWQgKiBzY2hlZDsKKyAgICB1aW50OCAqIGtleTsKKyAgICBpbnQgc3o7Cit7 CisgICAgdWludDggYnVmWzE2XTsKKworICAgIHNjaGVkLT5rc2l6ZSA9IHN6OworICAgIG1lbXNl dChidWYsIDAsIHNpemVvZihidWYpKTsKKyAgICBtZW1jcHkoYnVmLCBrZXksIHN6KTsKKyAgICBj YXN0X2tleV9zY2hlZChzY2hlZCwgYnVmKTsKK30KKworLyogNDAsIDY0LCBhbmQgODAtYml0IGtl eXMgLSBhbGwgdXNlIDEyIHJvdW5kcyAqLworCit2b2lkCitja19jYXN0NV80MF9rZXlfc2NoZWQo c2NoZWQsIGtleSkKKyAgICBDYXN0S2V5U2NoZWQgKiBzY2hlZDsKKyAgICB1aW50OCAqIGtleTsK K3sKKyAgICBjYXN0NV9rZXlfc2NoZWQoc2NoZWQsIGtleSwgNSk7Cit9CisKKyNpZm5kZWYgQ0FT VF9FWFBPUlRfRU5DUllQVElPTgordm9pZAorY2tfY2FzdDVfNjRfa2V5X3NjaGVkKHNjaGVkLCBr ZXkpCisgICAgIENhc3RLZXlTY2hlZCAqIHNjaGVkOworICAgICB1aW50OCAqIGtleTsKK3sKKyAg ICBjYXN0NV9rZXlfc2NoZWQoc2NoZWQsIGtleSwgOCk7Cit9CisKK3ZvaWQKK2NrX2Nhc3Q1Xzgw X2tleV9zY2hlZChzY2hlZCwga2V5KQorICAgICBDYXN0S2V5U2NoZWQgKiBzY2hlZDsKKyAgICAg dWludDggKiBrZXk7Cit7CisgICAgY2FzdDVfa2V5X3NjaGVkKHNjaGVkLCBrZXksIDEwKTsKK30K KyNlbmRpZiAvKiBDQVNUX0VYUE9SVF9FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfQ0FTVCAq LworCisjaWZkZWYgQ1JZUFRfRExMCitzdGF0aWMgY2hhciAqCitja19jcnlwdF9kbGxfdmVyc2lv bigpCit7CisgICAgcmV0dXJuKGNrY3Jwdik7Cit9CisKK2ludAorY3J5cHRfZGxsX2luaXQoIHN0 cnVjdCBfY3J5cHRfZGxsX2luaXQgKiBpbml0ICkKK3sKKyNpZmRlZiBMSUJERVMKKyAgICBleHRl cm4gaW50IGRlc19jaGVja19rZXk7CisgICAgZXh0ZXJuIHZvaWQgbGliZGVzX2RsbF9pbml0KHN0 cnVjdCBfY3J5cHRfZGxsX2luaXQgKik7CisgICAgZGVzX2NoZWNrX2tleSA9IDE7CisjZW5kaWYg LyogTElCREVTICovCisKKyAgICBpZiAoIGluaXQtPnZlcnNpb24gPj0gMSApIHsKKyAgICAgICAg cF90dG9sID0gaW5pdC0+cF90dG9sOworICAgICAgICBwX2RvZGVidWcgPSBpbml0LT5wX2RvZGVi dWc7CisgICAgICAgIHBfZG9oZXhkdW1wID0gaW5pdC0+cF9kb2hleGR1bXA7CisgICAgICAgIHBf dG5fZGVidWcgPSBpbml0LT5wX3RuX2RlYnVnOworICAgICAgICBwX3ZzY3JucHJpbnRmID0gaW5p dC0+cF92c2NybnByaW50ZjsKKyAgICAgICAgaWYgKCBpbml0LT52ZXJzaW9uID09IDEgKQorICAg ICAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICBpZiAoIGluaXQtPnZlcnNpb24gPj0gMiAp IHsKKyAgICAgICAgLyogVGhpcyBpcyBhIGs1X2NvbnRleHQgYnV0IHdlIGRvbid0IHdhbnQgdG8g aW5jbHVkZSBrcmI1LmggKi8KKyAgICAgICAgcF9rNV9jb250ZXh0ID0gKHZvaWQgKikgaW5pdC0+ cF9rNV9jb250ZXh0OworICAgICAgICBpZiAoIGluaXQtPnZlcnNpb24gPT0gMiApCisgICAgICAg ICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIGlmICggaW5pdC0+dmVyc2lvbiA+PSAzICkgewor ICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfcGFyc2UiLGVuY3J5cHRfcGFy c2UpOworICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfaW5pdCIsZW5jcnlw dF9pbml0KTsKKyAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJlbmNyeXB0X3Nlc3Npb25f a2V5IixlbmNyeXB0X3Nlc3Npb25fa2V5KTsKKyAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNz KCJlbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbmNyeXB0X3NlbmRfcmVxdWVzdF9zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJlbmNyeXB0X3JlcXVlc3Rf c3RhcnQiLGVuY3J5cHRfcmVxdWVzdF9zdGFydCk7CisgICAgICAgIGluaXQtPnBfaW5zdGFsbF9m dW5jcygiZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVuY3J5cHRfc2VuZF9yZXF1ZXN0X2VuZAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJlbmNyeXB0X3JlcXVlc3Rf ZW5kIixlbmNyeXB0X3JlcXVlc3RfZW5kKTsKKyAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNz KCJlbmNyeXB0X3NlbmRfZW5kIixlbmNyeXB0X3NlbmRfZW5kKTsKKyAgICAgICAgaW5pdC0+cF9p bnN0YWxsX2Z1bmNzKCJlbmNyeXB0X3NlbmRfc3VwcG9ydCIsZW5jcnlwdF9zZW5kX3N1cHBvcnQp OworICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImVuY3J5cHRfaXNfZW5jcnlwdGluZyIs ZW5jcnlwdF9pc19lbmNyeXB0aW5nKTsKKyAgICAgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJl bmNyeXB0X2lzX2RlY3J5cHRpbmciLGVuY3J5cHRfaXNfZGVjcnlwdGluZyk7CisgICAgICAgIGlu aXQtPnBfaW5zdGFsbF9mdW5jcygiZ2V0X2NyeXB0X3RhYmxlIixnZXRfY3J5cHRfdGFibGUpOwor ICAgICAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImRlc19pc193ZWFrX2tleSIsY2tfZGVzX2lz X3dlYWtfa2V5KTsKKyAgICAgICAgbGliZGVzX2RsbF9pbml0KGluaXQpOworICAgICAgICBpZiAo aW5pdC0+dmVyc2lvbiA9PSAzKQorICAgICAgICAgIHJldHVybigxKTsKKyAgICB9CisgICAgaWYg KCBpbml0LT52ZXJzaW9uID49IDQgKSB7CisgICAgICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygi Y3J5cHRfZGxsX3ZlcnNpb24iLGNrX2NyeXB0X2RsbF92ZXJzaW9uKTsKKyAgICAgICAgaWYgKGlu aXQtPnZlcnNpb24gPT0gNCkKKyAgICAgICAgICByZXR1cm4oMSk7CisgICAgfQorCisgICAgaWYg KCBpbml0LT52ZXJzaW9uID49IDUgKSB7CisgICAgICAgIHBfcmVxdGVsbXV0ZXggPSBpbml0LT5w X3JlcXRlbG11dGV4OworICAgICAgICBwX3JlbHRlbG11dGV4ID0gaW5pdC0+cF9yZWx0ZWxtdXRl eDsKKyAgICAgICAgaWYgKGluaXQtPnZlcnNpb24gPT0gNSkKKyAgICAgICAgICByZXR1cm4oMSk7 CisgICAgfQorCisgICAgaWYgKCBpbml0LT52ZXJzaW9uID49IDYgKSB7CisgICAgICAgIGluaXQt PnBfaW5zdGFsbF9mdW5jcygiZW5jcnlwdF9kb250X3N1cHBvcnQiLGVuY3J5cHRfZG9udF9zdXBw b3J0KTsKKyAgICAgICAgaWYgKCBpbml0LT52ZXJzaW9uID09IDYgKQorICAgICAgICAgICAgcmV0 dXJuKDEpOworICAgICAgICAvKiB3aGVuIGFkZGluZyBuZXcgdmVyc2lvbnM7IG1pZ3JhdGUgdGhl IG5leHQgdHdvIGxpbmVzICovCisgICAgICAgIGluaXQtPnZlcnNpb24gPSA2OworICAgICAgICBy ZXR1cm4oMSk7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworI3VuZGVmIG1hbGxvYworI3Vu ZGVmIHJlYWxsb2MKKyN1bmRlZiBmcmVlCisjdW5kZWYgc3RyZHVwCisKK3N0YXRpYyB2b2lkCitm YXRhbChjaGFyICptc2cpIHsKKyAgICBpZiAoIW1zZykgbXNnID0gIiI7CisKKyAgICBwcmludGYo bXNnKTsKKyAgICBleGl0KDEpOyAgICAgICAgLyogRXhpdCBpbmRpY2F0aW5nIGZhaWx1cmUgKi8K K30KKwordm9pZCAqCitrbWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIHZvaWQgKnB0cjsKKwor ICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgZmF0YWwoImttYWxsb2M6IHplcm8gc2l6ZSIp OworICAgIH0KKyAgICBwdHIgPSBtYWxsb2Moc2l6ZSk7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7 CisgICAgICAgIGZhdGFsKCJrbWFsbG9jOiBvdXQgb2YgbWVtb3J5Iik7CisgICAgfQorICAgIHJl dHVybiBwdHI7Cit9CisKK3ZvaWQgKgora3JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3Np emUpCit7CisgICAgdm9pZCAqbmV3X3B0cjsKKworICAgIGlmIChuZXdfc2l6ZSA9PSAwKSB7Cisg ICAgICAgIGZhdGFsKCJrcmVhbGxvYzogemVybyBzaXplIik7CisgICAgfQorICAgIGlmIChwdHIg PT0gTlVMTCkKKyAgICAgICAgbmV3X3B0ciA9IG1hbGxvYyhuZXdfc2l6ZSk7CisgICAgZWxzZQor ICAgICAgICBuZXdfcHRyID0gcmVhbGxvYyhwdHIsIG5ld19zaXplKTsKKyAgICBpZiAobmV3X3B0 ciA9PSBOVUxMKSB7CisgICAgICAgIGZhdGFsKCJrcmVhbGxvYzogb3V0IG9mIG1lbW9yeSIpOwor ICAgIH0KKyAgICByZXR1cm4gbmV3X3B0cjsKK30KKwordm9pZAora2ZyZWUodm9pZCAqcHRyKQor eworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBwcmludGYoImtmcmVlOiBOVUxMIHBv aW50ZXIgZ2l2ZW4gYXMgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBm cmVlKHB0cik7Cit9CisKK2NoYXIgKgora3N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgICAg c2l6ZV90IGxlbjsKKyAgICBjaGFyICpjcDsKKworICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAg ICAgICBmYXRhbCgia3N0cmR1cDogTlVMTCBwb2ludGVyIGdpdmVuIGFzIGFyZ3VtZW50Iik7Cisg ICAgfQorICAgIGxlbiA9IHN0cmxlbihzdHIpICsgMTsKKyAgICBjcCA9IGttYWxsb2MobGVuKTsK KyAgICBpZiAoY3ApCisgICAgICAgIG1lbWNweShjcCwgc3RyLCBsZW4pOworICAgIHJldHVybiBj cDsKK30KKyNlbmRpZiAvKiBDUllQVF9ETEwgKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19k ZXMuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfZGVzLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzNDY1MgotLS0gL2Rldi9udWxsCisr KyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfZGVzLmMKQEAgLTAs MCArMSw5OCBAQAorLyoKKyAgQyBLIF8gRCBFIFMgLiBDICAtICBsaWJERVMgaW50ZXJmYWNlIGZv ciBLZXJtaXQgOTUiCisKKyAgQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAxLCBUcnVzdGVlcyBvZiBD b2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldworICBZb3JrLiAgVGhlIEMtS2Vy bWl0IHNvZnR3YXJlIG1heSBub3QgYmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGxpY2Vuc2VkIG9y CisgIHNvbGQgZm9yIHByb2ZpdCBhcyBhIHNvZnR3YXJlIHByb2R1Y3QgaXRzZWxmLCBub3IgbWF5 IGl0IGJlIGluY2x1ZGVkIGluIG9yCisgIGRpc3RyaWJ1dGVkIHdpdGggY29tbWVyY2lhbCBwcm9k dWN0cyBvciBvdGhlcndpc2UgZGlzdHJpYnV0ZWQgYnkgY29tbWVyY2lhbAorICBjb25jZXJucyB0 byB0aGVpciBjbGllbnRzIG9yIGN1c3RvbWVycyB3aXRob3V0IHdyaXR0ZW4gcGVybWlzc2lvbiBv ZiB0aGUKKyAgT2ZmaWNlIG9mIEtlcm1pdCBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uLCBD b2x1bWJpYSBVbml2ZXJzaXR5LiAgVGhpcworICBjb3B5cmlnaHQgbm90aWNlIG11c3Qgbm90IGJl IHJlbW92ZWQsIGFsdGVyZWQsIG9yIG9ic2N1cmVkLgorCisgIEF1dGhvcjoKKyAgSmVmZnJleSBF IEFsdG1hbiAoamFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbSkKKyovCisKKy8qCisgICBUaGlz IGZpbGUgY29udGFpbnMgd3JhcHBlcnMgc28gdGhhdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3 aWxsIGJlIGltcG9ydGVkCisgICBpbnRvIHRoZSBrOTVjcnlwdC5kbGwvazJjcnlwdC5kbGwgZmls ZXMgaW4gc3VjaCBhIGZvcm0gdGhhdCB0aGV5IGNhbiBiZQorICAgcmUtZXhwb3J0ZWQgdG8gazk1 LmV4ZS9rMi5leGUuICBUaGlzIHN1YnNldCBvZiB0aGUgREVTIGxpYnJhcnkgaXMgbmVlZGVkIHRv CisgICBwcm92aWRlIERFUyBiYXNlZCBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbi4KKyovCisKKwor I2lmZGVmIExJQkRFUworLyogVGhlIGZvbGxvd2luZyBpcyBzcGVjaWZpYyB0byBteSBpbnN0YWxs YXRpb24sIGJ1dCBzaW5jZSBJJ20gdGhlIG9ubHkgb25lICovCisvKiB0aGF0IHVzZXMgdGhpcyBm aWxlIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpbmNsdWRlICJja3VhdGguaCIKKyNkZWZpbmUgQ0tf REVTX0MKKyNpbmNsdWRlICJja3VhdDIuaCIKKyNpZmRlZiBOVAorI2lmZGVmIF9NX0FMUEhBCisj aW5jbHVkZSA8Yzpcc3JwXGRlc1xkZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8Yzpcc3JjXHNycFxk ZXNcZGVzLmg+CisjZW5kaWYKKyNlbHNlCisjaW5jbHVkZSA8Yzpcc3JwXGRlc1xkZXMuaD4KKyNl bmRpZgorCitpbnQKK2xpYmRlc19yYW5kb21fa2V5KGRlc19jYmxvY2sgQikKK3sKKyAgICBkZXNf cmFuZG9tX2tleShCKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK3ZvaWQKK2xpYmRlc19yYW5kb21f c2VlZChkZXNfY2Jsb2NrIEIpCit7CisgICAgZGVzX3JhbmRvbV9zZWVkKEIpOworfQorCit2b2lk CitsaWJkZXNfa2V5X3NjaGVkKGRlc19jYmxvY2sgKiBCLCBkZXNfa2V5X3NjaGVkdWxlIFMpCit7 CisgICAgZGVzX2tleV9zY2hlZChCLFMpOworfQorCit2b2lkCitsaWJkZXNfZWNiX2VuY3J5cHQo ZGVzX2NibG9jayAqIEIxLCBkZXNfY2Jsb2NrICogQjIsIGRlc19rZXlfc2NoZWR1bGUgUywgaW50 IG4pCit7CisgICAgZGVzX2VjYl9lbmNyeXB0KEIxLEIyLFMsbik7Cit9CisKK2ludAorbGliZGVz X3N0cmluZ190b19rZXkoY2hhciAqIHMsIGRlc19jYmxvY2sgKiBCKQoreworICAgIGRlc19zdHJp bmdfdG9fa2V5KHMsQik7CisgICAgcmV0dXJuKDApOworfQorCit2b2lkCitsaWJkZXNfZml4dXBf a2V5X3Bhcml0eShkZXNfY2Jsb2NrICogQikKK3sKKyAgICBkZXNfc2V0X29kZF9wYXJpdHkoQik7 Cit9CisKK3ZvaWQKK2xpYmRlc19wY2JjX2VuY3J5cHQoZGVzX2NibG9jayAqaW5wdXQsIGRlc19j YmxvY2sgKm91dHB1dCwgbG9uZyBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBkZXNfa2V5 X3NjaGVkdWxlIHNjaGVkdWxlLCBkZXNfY2Jsb2NrICppdmVjLCBpbnQgZW5jKQoreworICAgIGRl c19wY2JjX2VuY3J5cHQoaW5wdXQsb3V0cHV0LGxlbmd0aCxzY2hlZHVsZSxpdmVjLGVuYyk7Cit9 CisKK3ZvaWQKK2xpYmRlc19kbGxfaW5pdChzdHJ1Y3QgX2NyeXB0X2RsbF9pbml0ICogaW5pdCkK K3sKKyAgICBpbml0LT5wX2luc3RhbGxfZnVuY3MoImxpYmRlc19yYW5kb21fa2V5IixsaWJkZXNf cmFuZG9tX2tleSk7CisgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJsaWJkZXNfcmFuZG9tX3Nl ZWQiLGxpYmRlc19yYW5kb21fc2VlZCk7CisgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJsaWJk ZXNfa2V5X3NjaGVkIixsaWJkZXNfa2V5X3NjaGVkKTsKKyAgICBpbml0LT5wX2luc3RhbGxfZnVu Y3MoImxpYmRlc19lY2JfZW5jcnlwdCIsbGliZGVzX2VjYl9lbmNyeXB0KTsKKyAgICBpbml0LT5w X2luc3RhbGxfZnVuY3MoImxpYmRlc19zdHJpbmdfdG9fa2V5IixsaWJkZXNfc3RyaW5nX3RvX2tl eSk7CisgICAgaW5pdC0+cF9pbnN0YWxsX2Z1bmNzKCJsaWJkZXNfZml4dXBfa2V5X3Bhcml0eSIs bGliZGVzX2ZpeHVwX2tleV9wYXJpdHkpOworICAgIGluaXQtPnBfaW5zdGFsbF9mdW5jcygibGli ZGVzX3BjYmNfZW5jcnlwdCIsbGliZGVzX3BjYmNfZW5jcnlwdCk7CisKK30KKyNlbmRpZiAvKiBM SUJERVMgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrX3NzbC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19z c2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjhmYjdjCi0tLSAvZGV2 L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19zc2wu YwpAQCAtMCwwICsxLDQzNTggQEAKK2NoYXIgKmNrc3NsdiA9ICJTU0wvVExTIHN1cHBvcnQsIDku MC4yMjcsIDA0IEF1ZyAyMDEwIjsKKy8qCisgIEMgSyBfIFMgUyBMIC4gQyAtLSAgT3BlblNTTCBJ bnRlcmZhY2UgZm9yIEMtS2VybWl0CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDEwLAorICAg IFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsu CisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQg ZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZv ciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKworICAgIEF1dGhvcjogIEplZmZyZXkgRSBB bHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pCisgICAgICAgICAgICAgICBTZWN1 cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKworICBQcm92aWRlczoKKworICAuIFRl bG5ldCBBdXRoIFNTTCBvcHRpb24gY29tcGF0aWJsZSB3aXRoIFRpbSBIdWRzb24ncyBoYWNrLgor ICAuIFRlbG5ldCBTVEFSVF9UTFMgb3B0aW9uCisgIC4gQ29uZmlndXJhdGlvbiBvZiBjZXJ0aWZp Y2F0ZSBhbmQga2V5IGZpbGVzCisgIC4gQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGFuZCByZXZv Y2F0aW9uIGxpc3QgY2hlY2tzCisgIC4gQ2xpZW50IGNlcnRpZmljYXRlIHRvIHVzZXIgaWQgcm91 dGluZQorCisgIE5vdGU6IFRoaXMgY29kZSBpcyB3cml0dGVuIHRvIGJlIGNvbXBhdGlibGUgd2l0 aCBPcGVuU1NMIDAuOS42W2FiY2RlZmdoXQorICBhbmQgMC45LjcgYmV0YSA1IChhbmQsIHByZXN1 bWFibHksIGxhdGVyKS4KKyAgSXQgd2lsbCBhbHNvIGNvbXBpbGUgd2l0aCB2ZXJzaW9uIDAuOS41 IGFsdGhvdWdoIHRoYXQgaXMgZGlzY291cmFnZWQKKyAgZHVlIHRvIHNlY3VyaXR5IHdlYWtuZXNz ZXMgaW4gdGhhdCByZWxlYXNlLgorKi8KKworI2luY2x1ZGUgImNrY3N5bS5oIgorI2luY2x1ZGUg ImNrY2RlYi5oIgorCisjaWZkZWYgQ0tfU1NMCisjaW5jbHVkZSAiY2tjbmV0LmgiCisjaW5jbHVk ZSAiY2t1YXRoLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K KyNpZmRlZiBVTklYCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lmbmRlZiBGUkVFQlNENAor I2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmIC8qIEZSRUVCU0Q0ICovCisjZW5kaWYgLyog VU5JWCAqLworCisjaWZkZWYgREVDX1RDUElQCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUg PGluZXQuaD4KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKworI2lmZGVmIE9TMgorZXh0ZXJuIGNo YXIgZXhlZGlyW107CisjaWZkZWYgTlQKK2NoYXIgKiBHZXRBcHBEYXRhKGludCk7CisjZW5kaWYK KyNlbmRpZiAvKiBPUzIgKi8KKworZXh0ZXJuIGludCBxdWlldDsJCQkvKiBmZGMgLSBNb24gTm92 IDI4IDExOjQ0OjE1IDIwMDUgKi8KKworc3RhdGljIGludCBzc2xfaW5zdGFsbGVkID0gMTsKKyNl bmRpZiAvKiBDS19TU0wgKi8KK2ludAorY2tfc3NoX2lzX2luc3RhbGxlZCgpCit7CisjaWZkZWYg U1NIQlVJTFRJTgorI2lmZGVmIFNTTERMTAorI2lmZGVmIE5UCisgICAgZXh0ZXJuIEhJTlNUQU5D RSBoQ1JZUFRPOworI2Vsc2UgLyogTlQgKi8KKyAgICBleHRlcm4gSE1PRFVMRSBoQ1JZUFRPOwor I2VuZGlmIC8qIE5UICovCisgICAgZGVidWcoRjExMSwiY2tfc3NoX2lzX2luc3RhbGxlZCIsImhD UllQVE8iLGhDUllQVE8pOworICAgIHJldHVybihzc2xfaW5zdGFsbGVkICYmIChoQ1JZUFRPICE9 IE5VTEwpKTsKKyNlbHNlIC8qIFNTTERMTCAqLworICAgIHJldHVybihzc2xfaW5zdGFsbGVkKTsK KyNlbmRpZiAvKiBTU0xETEwgKi8KKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwor aW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX3NzbGVheV9pc19pbnN0YWxsZWQodm9pZCkKKyNlbHNl Citja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkKKyNlbmRpZgoreworI2lmZGVmIENLX1NTTAorI2lm ZGVmIFNTTERMTAorI2lmZGVmIE5UCisgICAgZXh0ZXJuIEhJTlNUQU5DRSBoU1NMLCBoQ1JZUFRP OworI2Vsc2UgLyogTlQgKi8KKyAgICBleHRlcm4gSE1PRFVMRSBoU1NMLCBoQ1JZUFRPOworI2Vu ZGlmIC8qIE5UICovCisgICAgZGVidWcoRjExMSwiY2tfc3NsZWF5X2lzX2luc3RhbGxlZCIsImhT U0wiLGhTU0wpOworICAgIGRlYnVnKEYxMTEsImNrX3NzbGVheV9pc19pbnN0YWxsZWQiLCJoQ1JZ UFRPIixoQ1JZUFRPKTsKKyAgICByZXR1cm4oc3NsX2luc3RhbGxlZCAmJiAoaFNTTCAhPSBOVUxM KSAmJiAoaENSWVBUTyAhPSBOVUxMKSk7CisjZWxzZSAvKiBTU0xETEwgKi8KKyAgICByZXR1cm4o c3NsX2luc3RhbGxlZCk7CisjZW5kaWYgLyogU1NMRExMICovCisjZWxzZSAvKiBDS19TU0wgKi8K KyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ0tfU1NMICovCit9CisKKyNpZmRlZiBDS19TU0wK KyNpbmNsdWRlICJja2NrZXIuaCIKKyNpbmNsdWRlICJja3VjbWQuaCIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZvciBzdHJ1Y3Qga2V5dGFiICovCisjaW5jbHVkZSAiY2tjdGVsLmgi CisjaW5jbHVkZSAiY2tfc3NsLmgiCisjaWZkZWYgVU5JWAorI2luY2x1ZGUgPHB3ZC5oPiAgICAg ICAgICAgICAgICAgICAgLyogUGFzc3dvcmQgZmlsZSBmb3IgaG9tZSBkaXJlY3RvcnkgKi8KKyNl bmRpZiAvKiBVTklYICovCisjaWZkZWYgT1MyCisjaW5jbHVkZSA8cHJvY2Vzcy5oPgorI2VuZGlm IC8qIE9TMiAqLworI2lmZGVmIE9TMk9OTFkKKyNpbmNsdWRlICJja290Y3AuaCIKKyNlbmRpZiAv KiBPUzJPTkxZICovCisKKyNpZmRlZiBTU0xETEwKK2ludCBzc2xfZmluaXNoZWRfbWVzc2FnZXMg PSAwOworI2Vsc2UgLyogU1NMRExMICovCisjaWZkZWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgor aW50IHNzbF9maW5pc2hlZF9tZXNzYWdlcyA9IChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4 MDA5MDU4MWZMKTsKKyNlbHNlCishRVJST1IgVGhpcyBtb2R1bGUgcmVxdWlyZXMgT3BlblNTTCAw LjkuNWEgb3IgaGlnaGVyCisjZW5kaWYgLyogT1BFTlNTTF9WRVJTSU9OX05VTUJFUiAqLworI2Vu ZGlmIC8qIFNTTERMTCAqLworCitzdGF0aWMgaW50IGF1dGhfc3NsX3ZhbGlkID0gMDsKK3N0YXRp YyBjaGFyICphdXRoX3NzbF9uYW1lID0gMDsgICAgLyogdGhpcyBob2xkcyB0aGUgb25lbGluZSBu YW1lICovCitjaGFyIHNzbF9lcnJbU1NMX0VSUl9CRlNaXT0iIjsKKworQklPICpiaW9fZXJyPU5V TEw7CitYNTA5X1NUT1JFICpjcmxfc3RvcmUgPSBOVUxMOworCisjaWZuZGVmIE5PRlRQCisjaWZu ZGVmIFNZU0ZUUAorU1NMICpzc2xfZnRwX2NvbiAgICAgICAgICAgICA9IE5VTEw7CitTU0xfQ1RY ICpzc2xfZnRwX2N0eCAgICAgICAgID0gTlVMTDsKK1NTTCAqc3NsX2Z0cF9kYXRhX2NvbiAgICAg ICAgPSBOVUxMOworaW50IHNzbF9mdHBfYWN0aXZlX2ZsYWcgICAgICA9IDA7CitpbnQgc3NsX2Z0 cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKKyNlbmRpZiAvKiBTWVNGVFAgKi8KKyNlbmRpZiAvKiBO T0ZUUCAqLworCisjaWZuZGVmIE5PSFRUUAorU1NMICp0bHNfaHR0cF9jb24gICAgICAgICAgICA9 IE5VTEw7CitTU0xfQ1RYICp0bHNfaHR0cF9jdHggICAgICAgID0gTlVMTDsKK2ludCB0bHNfaHR0 cF9hY3RpdmVfZmxhZyAgICAgPSAwOworaW50IHNzbF9odHRwX2luaXRpYWxpemVkID0gMDsKKyNl bmRpZiAvKiBOT0hUVFAgKi8KKworU1NMX0NUWCAqc3NsX2N0eCA9IE5VTEw7CitTU0wgKnNzbF9j b24gPSBOVUxMOworaW50IHNzbF9kZWJ1Z19mbGFnID0gMDsKK2ludCBzc2xfdmVyYm9zZV9mbGFn ID0gMDsKK2ludCBzc2xfb25seV9mbGFnID0gMDsKK2ludCBzc2xfcmF3X2ZsYWcgPSAwOworaW50 IHNzbF9hY3RpdmVfZmxhZyA9IDA7CitpbnQgc3NsX3ZlcmlmeV9mbGFnID0gU1NMX1ZFUklGWV9Q RUVSOworaW50IHNzbF9jZXJ0c29rX2ZsYWcgPSAwOworY2hhciAqc3NsX3JzYV9jZXJ0X2ZpbGUg PSBOVUxMOworY2hhciAqc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGUgPSBOVUxMOworY2hhciAqc3Ns X3JzYV9rZXlfZmlsZSA9IE5VTEw7CitjaGFyICpzc2xfZHNhX2NlcnRfZmlsZSA9IE5VTEw7Citj aGFyICpzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSA9IE5VTEw7CitjaGFyICpzc2xfZGhfa2V5X2Zp bGUgPSBOVUxMOworY2hhciAqc3NsX2NybF9maWxlID0gTlVMTDsKK2NoYXIgKnNzbF9jcmxfZGly ID0gTlVMTDsKK2NoYXIgKnNzbF92ZXJpZnlfZmlsZSA9IE5VTEw7CitjaGFyICpzc2xfdmVyaWZ5 X2RpciA9IE5VTEw7CitjaGFyICpzc2xfZGhfcGFyYW1fZmlsZSA9IE5VTEw7CitjaGFyICpzc2xf Y2lwaGVyX2xpc3QgPSBOVUxMOworY2hhciAqc3NsX3JuZF9maWxlID0gTlVMTDsKKworU1NMX0NU WCAqdGxzX2N0eCA9IE5VTEw7CitTU0wgKnRsc19jb24gPSBOVUxMOworaW50IHRsc19vbmx5X2Zs YWcgPSAwOworaW50IHRsc19yYXdfZmxhZyA9IDA7CitpbnQgdGxzX2FjdGl2ZV9mbGFnID0gMDsK KworaW50IHNzbF9pbml0aWFsaXplZCA9IDA7CitpbnQgc3NsX3ZlcmlmeV9kZXB0aCA9IC0xOyAv KiB1c2VkIHRvIHRyYWNrIGRlcHRoIGluIHZlcmlmeSByb3V0aW5lcyAqLworCisvKiBjb21waWxl IHRoaXMgc2V0IHRvIDEgdG8gbmVnb3RpYXRlIFNTTC9UTFMgYnV0IG5vdCBhY3R1YWxseSBzdGFy dCBpdCAqLworaW50IHNzbF9kdW1teV9mbGFnPTA7CisKK2V4dGVybiBpbnQgaW5zZXJ2ZXI7Citl eHRlcm4gaW50IGRlYnNlczsKK2V4dGVybiBpbnQgYWNjZXB0X2NvbXBsZXRlOworZXh0ZXJuIGNo YXIgc3pIb3N0TmFtZVtdLCBzelVzZXJOYW1lUmVxdWVzdGVkW10sIHN6VXNlck5hbWVBdXRoZW50 aWNhdGVkW107CisKK19QUk9UT1RZUChpbnQgWDUwOV90b191c2VyLChYNTA5ICosIGNoYXIgKiwg aW50KSk7CisKK3N0YXRpYyBpbnQgdmVyYm9zaXR5ID0gMDsJCS8qIE1lc3NhZ2UgY29udHJvbCAq Lworc3RhdGljIFZPSUQKK3NldHZlcmJvc2l0eSgpIHsKKyAgICB2ZXJib3NpdHkgPSBzc2xfdmVy Ym9zZV9mbGFnOworICAgIGlmIChxdWlldCkgdmVyYm9zaXR5ID0gMDsKK30KKworaW50CisjaWZk ZWYgQ0tfQU5TSUMKK3NzbF9zZXJ2ZXJfdmVyaWZ5X2NhbGxiYWNrKGludCBvaywgWDUwOV9TVE9S RV9DVFggKiBjdHgpCisjZWxzZSAvKiBDS19BTlNJQyAqLworc3NsX3NlcnZlcl92ZXJpZnlfY2Fs bGJhY2sob2ssIGN0eCkKK2ludCBvazsKK1g1MDlfU1RPUkVfQ1RYICpjdHg7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICBzdGF0aWMgY2hhciAqc2F2ZWRfc3ViamVjdD1OVUxMOworICAg IGNoYXIgKnN1YmplY3Q9TlVMTCwgKmlzc3Vlcj1OVUxMOworICAgIGludCBkZXB0aCxlcnJvcjsK KyAgICBYNTA5ICp4cyA9IE5VTEw7CisKKyAgICBpZiAoIHNzbF9jZXJ0c29rX2ZsYWcgKQorICAg ICAgICByZXR1cm4oMSk7CisKKyAgICBzZXR2ZXJib3NpdHkoKTsKKworICAgIGVycm9yPVg1MDlf U1RPUkVfQ1RYX2dldF9lcnJvcihjdHgpOworICAgIGRlcHRoPVg1MDlfU1RPUkVfQ1RYX2dldF9l cnJvcl9kZXB0aChjdHgpOworICAgIHhzPVg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQo Y3R4KTsKKworICAgIGlmIChkZXB0aD09MCkgeworICAgICAgICAvKiBjbGVhciB0aGluZ3MgKi8K KyAgICAgICAgaWYgKHNhdmVkX3N1YmplY3QhPU5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUoc2F2 ZWRfc3ViamVjdCk7CisgICAgICAgICAgICBzYXZlZF9zdWJqZWN0PU5VTEw7CisgICAgICAgIH0K KyAgICAgICAgaWYgKGF1dGhfc3NsX25hbWUhPU5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUoYXV0 aF9zc2xfbmFtZSk7CisgICAgICAgICAgICBhdXRoX3NzbF9uYW1lPU5VTEw7CisgICAgICAgIH0K KyAgICB9CisKKworICAgIGlmIChzc2xfZGVidWdfZmxhZyAmJiAhaW5zZXJ2ZXIpIHsKKyAgICAg ICAgcHJpbnRmKCJzc2w6c2VydmVyX3ZlcmlmeV9jYWxsYmFjazpkZXB0aD0lZCBvaz0lZCBlcnI9 JWQtJXNcclxuIiwKKyAgICAgICAgICAgIGRlcHRoLG9rLGVycm9yLFg1MDlfdmVyaWZ5X2NlcnRf ZXJyb3Jfc3RyaW5nKGVycm9yKSk7CisgICAgfQorCisgICAgLyogZmlyc3QgdGhpbmcgaXMgdG8g aGF2ZSBhIG1lYW5pbmdmdWwgbmFtZSBmb3IgdGhlIGN1cnJlbnQKKyAgICAgKiBjZXJ0aWZpY2F0 ZSB0aGF0IGlzIGJlaW5nIHZlcmlmaWVkIC4uLiBhbmQgaWYgd2UgY2Fubm90CisgICAgICogZGV0 ZXJtaW5lIHRoYXQgdGhlbiBzb21ldGhpbmcgaXMgc2VyaW91c2x5IHdyb25nIQorICAgICAqLwor ICAgIG1ha2VzdHIoJnN1YmplY3QsCisgICAgICAgICAgICAoY2hhciAqKVg1MDlfTkFNRV9vbmVs aW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4cyksTlVMTCwwKSk7CisgICAgbWFrZXN0cigmaXNz dWVyLAorICAgICAgICAgICAgKGNoYXIgKilYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9pc3N1 ZXJfbmFtZSh4cyksTlVMTCwwKSk7CisgICAgaWYgKCFzdWJqZWN0IHx8ICFzdWJqZWN0WzBdIHx8 ICFpc3N1ZXIgfHwgIWlzc3VlclswXSkgeworICAgICAgICBvayA9IDA7CisgICAgICAgIGdvdG8g cmV0dXJuX3RpbWU7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2l0eSAmJiAhaW5zZXJ2ZXIgJiYg ZGVwdGggIT0gc3NsX3ZlcmlmeV9kZXB0aCkgeworICAgICAgICBwcmludGYoIlslZF0gQ2VydGlm aWNhdGUgU3ViamVjdDpcclxuJXNcclxuIixkZXB0aCxzdWJqZWN0KTsKKyAgICAgICAgcHJpbnRm KCJbJWRdIENlcnRpZmljYXRlIElzc3VlcjpcclxuJXNcclxuIixkZXB0aCxpc3N1ZXIpOworICAg ICAgICBzc2xfdmVyaWZ5X2RlcHRoID0gZGVwdGg7CisgICAgfQorCisgICAgLyogbWFrZSBzdXJl IHRoYXQgdGhlIGNlcnRpZmljYXRlIHRoYXQgaGFzIGJlZW4gcHJlc2VudGVkICovCisgICAgLyog aGFzIG5vdCBiZWVuIHJldm9rZWQgKGlmIHdlIGhhdmUgYmVlbiBnaXZlbiBhIENSTC4gICAgICov CisgICAgb2sgPSAgc3NsX3ZlcmlmeV9jcmwob2ssIGN0eCk7CisKKyAgICAvKiBpZiB3ZSBoYXZl IGFueSBmb3JtIG9mIGVycm9yIGluIHNlY3VyZSBtb2RlIHdlIHJlamVjdCB0aGUgY29ubmVjdGlv biAqLworICAgIGlmIChlcnJvciE9WDUwOV9WX09LKSB7CisgICAgICAgIGlmIChpbnNlcnZlcikg eworI2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0xJ ICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlguNTA5IENlcnRpZmljYXRlIHZlcmlmeSBmYWls dXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgc3ViamVjdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmlu ZyhlcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBDS1NZU0xPRyAqLworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo IHNzbF92ZXJpZnlfZmxhZyAmCisgICAgICAgICAgICAgICAgIChTU0xfVkVSSUZZX1BFRVIgfCBT U0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSkKKyAgICAgICAgICAgICAgICBwcmludGYo IkVycm9yOiAiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIldh cm5pbmc6ICIpOworICAgICAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICAgICAgY2Fz ZSBYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVDoKKyAgICAgICAgICAgICAg ICBwcmludGYoIkNlcnRpZmljYXRlIGlzIHNlbGYgc2lnbmVkLlxyXG4iKTsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX0hBU19FWFBJUkVE OgorICAgICAgICAgICAgICAgIHByaW50ZigiQ2VydGlmaWNhdGUgaGFzIGV4cGlyZWQuXHJcbiIp OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX1VO QUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWToKKyAgICAgICAgICAgICAgICBwcmludGYo CisgICJDZXJ0aWZpY2F0ZSBpc3N1ZXIncyBjZXJ0aWZpY2F0ZSBpc24ndCBhdmFpbGFibGUgbG9j YWxseS5cclxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1 MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRToKKyAgICAgICAgICAgICAg ICBwcmludGYoIlVuYWJsZSB0byB2ZXJpZnkgbGVhZiBzaWduYXR1cmUuXHJcbiIpOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tF RDoKKyAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRpZmljYXRlIHJldm9rZWQuXHJcbiIpOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg ICAgICBwcmludGYoIkVycm9yICVkIHdoaWxlIHZlcmlmeWluZyBjZXJ0aWZpY2F0ZS5cclxuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5lcnJvcik7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgb2sgPSAhKHNzbF92ZXJpZnlf ZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpOworICAgIH0gZWxzZSB7Cisg ICAgICAgIC8qIGlmIHdlIGdvdCBhbGwgdGhlIHdheSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlIHRo ZW4KKyAgICAgICAgICogd2UgKmNhbiogdXNlIHRoaXMgY2VydGlmaWNhdGUgZm9yIGEgdXNlcm5h bWUgdG8KKyAgICAgICAgICogbWF0Y2ggLi4uIGluIGFsbCBvdGhlciBjYXNlcyB3ZSBtdXN0IG5v dCEKKyAgICAgICAgICovCisgICAgICAgIGF1dGhfc3NsX25hbWUgPSBzYXZlZF9zdWJqZWN0Owor ICAgICAgICBzYXZlZF9zdWJqZWN0ID0gTlVMTDsKKyAgICB9CisKKyAgcmV0dXJuX3RpbWU6CisK KyAgICAvKiBzYXZlIHRoZSBuYW1lIGlmIGF0IGxlYXN0IHRoZSBmaXJzdCBsZXZlbCBpcyBva2F5 ICovCisgICAgaWYgKGRlcHRoID09IDAgJiYgb2spCisgICAgICAgIG1ha2VzdHIoJnNhdmVkX3N1 YmplY3Qsc3ViamVjdCk7CisKKyAgICAvKiBjbGVhbiB1cCB0aGluZ3MgKi8KKyAgICBpZiAoc3Vi amVjdCE9TlVMTCkKKyAgICAgICAgZnJlZShzdWJqZWN0KTsKKyAgICBpZiAoaXNzdWVyIT1OVUxM KQorICAgICAgICBmcmVlKGlzc3Vlcik7CisKKyAgICByZXR1cm4gb2s7Cit9CisKK2ludAorI2lm ZGVmIENLX0FOU0lDCitzc2xfY2xpZW50X3ZlcmlmeV9jYWxsYmFjayhpbnQgb2ssIFg1MDlfU1RP UkVfQ1RYICogY3R4KQorI2Vsc2UKK3NzbF9jbGllbnRfdmVyaWZ5X2NhbGxiYWNrKG9rLCBjdHgp CitpbnQgb2s7CitYNTA5X1NUT1JFX0NUWCAqY3R4OworI2VuZGlmCit7CisgICAgY2hhciBzdWJq ZWN0WzI1Nl09IiIsIGlzc3VlclsyNTZdPSIiOworICAgIGludCBkZXB0aCwgZXJyb3IsIGxlbjsK KyAgICBYNTA5ICp4czsKKworICAgIHNldHZlcmJvc2l0eSgpOworCisgICAgeHM9WDUwOV9TVE9S RV9DVFhfZ2V0X2N1cnJlbnRfY2VydChjdHgpOworICAgIGVycm9yPVg1MDlfU1RPUkVfQ1RYX2dl dF9lcnJvcihjdHgpOworICAgIGRlcHRoPVg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcl9kZXB0aChj dHgpOworCisgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgIHByaW50Zigic3NsOmNs aWVudF92ZXJpZnlfY2FsbGJhY2s6ZGVwdGg9JWQgb2s9JWQgZXJyPSVkLSVzXHJcbiIsCisgICAg ICAgICAgICAgICAgZGVwdGgsb2ssZXJyb3IsWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmco ZXJyb3IpKTsKKworICAgIGlmICggc3NsX2NlcnRzb2tfZmxhZyApIHsKKyAgICAgICAgb2sgPSAx OworICAgIH0KKworICAgIC8qIGZpcnN0IHRoaW5nIGlzIHRvIGhhdmUgYSBtZWFuaW5nZnVsIG5h bWUgZm9yIHRoZSBjdXJyZW50CisgICAgICogY2VydGlmaWNhdGUgdGhhdCBpcyBiZWluZyB2ZXJp ZmllZCAuLi4gYW5kIGlmIHdlIGNhbm5vdAorICAgICAqIGRldGVybWluZSB0aGF0IHRoZW4gc29t ZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZyEKKyAgICAgKi8KKyNpZmRlZiBYTl9GTEFHX1NFUF9N VUxUSUxJTkUKKyAgICBYNTA5X05BTUVfcHJpbnRfZXgoYmlvX2VycixYNTA5X2dldF9zdWJqZWN0 X25hbWUoeHMpLDQsCisgICAgICAgICAgICAgICAgICAgICAgICBYTl9GTEFHX1NFUF9NVUxUSUxJ TkUpOworICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIsc3ViamVjdCwyNTYpOworICAgIHN1Ympl Y3RbbGVuIDwgMjU2ID8gbGVuIDogMjU1XSA9ICdcMCc7CisgICAgaWYgKCFzdWJqZWN0WzBdKSB7 CisgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisgICAgICAgIGxlbiA9IEJJT19y ZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOworICAgICAgICBzc2xfZXJyW2xlbiA8 IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOworICAgICAgICB1cV9v aygiWC41MDkgU3ViamVjdCBOYW1lIHVuYXZhaWxhYmxlIiwgc3NsX2VyciwgMSwgTlVMTCwgMCk7 CisgICAgICAgIG9rPTA7CisgICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7CisgICAgfQorCisgICAg WDUwOV9OQU1FX3ByaW50X2V4KGJpb19lcnIsWDUwOV9nZXRfaXNzdWVyX25hbWUoeHMpLDQsCisg ICAgICAgICAgICAgICAgICAgICAgICBYTl9GTEFHX1NFUF9NVUxUSUxJTkUpOworICAgIGxlbiA9 IEJJT19yZWFkKGJpb19lcnIsaXNzdWVyLDI1Nik7CisgICAgaXNzdWVyW2xlbiA8IDI1NiA/IGxl biA6IDI1NV0gPSAnXDAnOworICAgIGlmICghaXNzdWVyWzBdKSB7CisgICAgICAgIEVSUl9wcmlu dF9lcnJvcnMoYmlvX2Vycik7CisgICAgICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIsc3NsX2Vy cixTU0xfRVJSX0JGU1opOworICAgICAgICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxl biA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOworICAgICAgICB1cV9vaygiWC41MDkgSXNzdWVyIE5h bWUgdW5hdmFpbGFibGUiLCBzc2xfZXJyLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgb2s9MDsKKyAg ICAgICAgZ290byByZXR1cm5fdGltZTsKKyAgICB9CisjZWxzZSAvKiBYTl9GTEFHX1NFUF9NVUxU SUxJTkUgKi8KKyAgICBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUoeHMp LHN1YmplY3QsMjU2KTsKKyAgICBpZiAoIXN1YmplY3RbMF0pIHsKKyAgICAgICAgaW50IGxlbjsK KyAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgbGVuID0gQklPX3Jl YWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7CisgICAgICAgIHNzbF9lcnJbbGVuIDwg U1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAgICAgIHVxX29r KCJYLjUwOSBTdWJqZWN0IE5hbWUgdW5hdmFpbGFibGUiLCBzc2xfZXJyLCAxLCBOVUxMLCAwKTsK KyAgICAgICAgb2s9MDsKKyAgICAgICAgZ290byByZXR1cm5fdGltZTsKKyAgICB9CisKKyAgICBY NTA5X05BTUVfb25lbGluZShYNTA5X2dldF9pc3N1ZXJfbmFtZSh4cyksaXNzdWVyLDI1Nik7Cisg ICAgaWYgKCFpc3N1ZXJbMF0pIHsKKyAgICAgICAgaW50IGxlbjsKKyAgICAgICAgRVJSX3ByaW50 X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgbGVuID0gQklPX3JlYWQoYmlvX2Vycixzc2xfZXJy LFNTTF9FUlJfQkZTWik7CisgICAgICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVu IDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAgICAgIHVxX29rKCJYLjUwOSBJc3N1ZXIgTmFt ZSB1bmF2YWlsYWJsZSIsIHNzbF9lcnIsIDEsIE5VTEwsIDApOworICAgICAgICBvaz0wOworICAg ICAgICBnb3RvIHJldHVybl90aW1lOworICAgIH0KKyNlbmRpZiAvKiBYTl9GTEFHX1NFUF9NVUxU SUxJTkUgKi8KKworICAgIGlmICh2ZXJib3NpdHkgJiYgZGVwdGggIT0gc3NsX3ZlcmlmeV9kZXB0 aCkgeworICAgICAgICBwcmludGYoIlslZF0gQ2VydGlmaWNhdGUgU3ViamVjdDpcclxuJXNcclxu IixkZXB0aCxzdWJqZWN0KTsKKyAgICAgICAgcHJpbnRmKCJbJWRdIENlcnRpZmljYXRlIElzc3Vl cjpcclxuJXNcclxuIixkZXB0aCxpc3N1ZXIpOworICAgICAgICBzc2xfdmVyaWZ5X2RlcHRoID0g ZGVwdGg7CisgICAgfQorCisgICAgb2sgPSBzc2xfdmVyaWZ5X2NybChvaywgY3R4KTsKKworICAg IGlmICggIW9rICkgeworICAgICAgICBjaGFyIHByZWZpeFsxMDI0XTsKKyAgICAgICAgLyogaWYg dGhlIHNlcnZlciBpcyB1c2luZyBhIHNlbGYgc2lnbmVkIGNlcnRpZmljYXRlIHRoZW4KKyAgICAg ICAgICogd2UgbmVlZCB0byBkZWNpZGUgaWYgdGhhdCBpcyBnb29kIGVub3VnaCBmb3IgdXMgdG8K KyAgICAgICAgICogYWNjZXB0IC4uLgorICAgICAgICAgKi8KKworICAgICAgICBzd2l0Y2ggKCBl cnJvciApIHsKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURf Q0VSVDogeworICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJ TF9JRl9OT19QRUVSX0NFUlQpIHsKKyAgICAgICAgICAgICAgICAvKiBtYWtlIDEwMCUgc3VyZSB0 aGF0IGluIHNlY3VyZSBtb3JlIHdlIGRyb3AgdGhlCisgICAgICAgICAgICAgICAgICogY29ubmVj dGlvbiBpZiB0aGUgc2VydmVyIGRvZXMgbm90IGhhdmUgYQorICAgICAgICAgICAgICAgICAqIHJl YWwgY2VydGlmaWNhdGUhCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgY2tt YWt4bXNnKHByZWZpeCwxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBT ZXJ2ZXIgaGFzIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGVcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAiWyIsY2tpdG9hKGRlcHRoKSwiXSBDZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixz dWJqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuWyIsY2tpdG9hKGRlcHRoKSwi XSBDZXJ0aWZpY2F0ZSBJc3N1ZXI9XG4iLGlzc3VlciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsTlVMTCxOVUxMKTsKKworICAgICAgICAgICAgICAgIHVxX29rKHByZWZpeCwgIlJl amVjdGluZyBDb25uZWN0aW9uIiwgMSwgTlVMTCwgMCk7CisKKyAgICAgICAgICAgICAgICAvKiBz b21ldGltZXMgaXQgaXMgcmVhbGx5IGhhbmR5IHRvIGJlIGFibGUgdG8gZGVidWcgdGhpbmdzCisg ICAgICAgICAgICAgICAgKiBhbmQgc3RpbGwgZ2V0IGEgY29ubmVjdGlvbiEKKyAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykgeworICAgICAgICAg ICAgICAgICAgICBwcmludGYoIlNTTDogZGVidWcgLT4gaWdub3JpbmcgY2VydCByZXF1aXJlZCFc clxuIik7CisgICAgICAgICAgICAgICAgICAgIG9rPTE7CisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgb2s9MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgZ290byByZXR1cm5fdGltZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX3Zl cmlmeV9mbGFnICE9IFNTTF9WRVJJRllfTk9ORSkgeworICAgICAgICAgICAgICAgIGNrbWFreG1z ZyhwcmVmaXgsMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiBTZXJ2 ZXIgaGFzIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGVcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAiWyIsY2tpdG9hKGRlcHRoKSwiXSBDZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJq ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuWyIsY2tpdG9hKGRlcHRoKSwiXSBD ZXJ0aWZpY2F0ZSBJc3N1ZXI9XG4iLGlzc3VlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsTlVMTCxOVUxMKTsKKworICAgICAgICAgICAgICAgIG9rID0gdXFfb2socHJlZml4LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRpbnVlPyAoWS9OKSAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgMywgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgaWYgKCBvayA8 IDAgKQorICAgICAgICAgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICAgICAgZ290byBy ZXR1cm5fdGltZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXNlIFg1MDlf Vl9FUlJfVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVDoKKyAgICAgICAgICAgIGlmIChzc2xfdmVy aWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7CisgICAgICAgICAg ICAgICAgLyogbWFrZSAxMDAlIHN1cmUgdGhhdCBpbiBzZWN1cmUgbW9yZSB3ZSBkcm9wIHRoZQor ICAgICAgICAgICAgICAgICAqIGNvbm5lY3Rpb24gaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBoYXZl IGEKKyAgICAgICAgICAgICAgICAgKiByZWFsIGNlcnRpZmljYXRlIQorICAgICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICJFcnJvcjogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChj aGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUgSXNzdWVyPVxuIixpc3N1ZXIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwpOworICAgICAgICAgICAgICAgIHVxX29rKHByZWZpeCwgIlJlamVjdGluZyBDb25uZWN0aW9u IiwgMSwgTlVMTCwgMCk7CisKKyAgICAgICAgICAgICAgICAvKiBzb21ldGltZXMgaXQgaXMgcmVh bGx5IGhhbmR5IHRvIGJlIGFibGUgdG8gZGVidWcgdGhpbmdzCisgICAgICAgICAgICAgICAgKiBh bmQgc3RpbGwgZ2V0IGEgY29ubmVjdGlvbiEKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAg ICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYo IlNTTDogZGVidWcgLT4gaWdub3JpbmcgY2VydCByZXF1aXJlZCFcclxuIik7CisgICAgICAgICAg ICAgICAgICAgIG9rPTE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgICAgb2s9MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byByZXR1 cm5fdGltZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX3ZlcmlmeV9mbGFnICE9IFNTTF9W RVJJRllfTk9ORSkgeworICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiAiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKilYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5DZXJ0aWZpY2F0ZSBJc3N1ZXI9XG4iLGlzc3Vl ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgb2sgPSB1cV9vayhwcmVmaXgsICJDb250 aW51ZSAoWS9OKSIsIDMsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJuX3Rp bWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYNTA5 X1ZfRVJSX0NFUlRfTk9UX1lFVF9WQUxJRDoKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9S X0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRDoKKyAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2Zs YWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7CisgICAgICAgICAgICAgICAg aW50IGxlbjsKKyAgICAgICAgICAgICAgICAvKiBtYWtlIDEwMCUgc3VyZSB0aGF0IGluIHNlY3Vy ZSBtb3JlIHdlIGRyb3AgdGhlCisgICAgICAgICAgICAgICAgICogY29ubmVjdGlvbiBpZiB0aGUg c2VydmVyIGRvZXMgbm90IGhhdmUgYQorICAgICAgICAgICAgICAgICAqIHJlYWwgY2VydGlmaWNh dGUhCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgQVNOMV9USU1FX3ByaW50 KGJpb19lcnIsWDUwOV9nZXRfbm90QmVmb3JlKHhzKSk7CisgICAgICAgICAgICAgICAgbGVuID0g QklPX3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7CisgICAgICAgICAgICAgICAg c3NsX2VycltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsK KyAgICAgICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAiRXJyb3I6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAq KVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAiXG5ub3RCZWZvcmU9Iixzc2xfZXJyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAg ICAgIHVxX29rKHByZWZpeCwgIlJlamVjdGluZyBDb25uZWN0aW9uIiwgMSwgTlVMTCwgMCk7Cisg ICAgICAgICAgICAgICAgLyogc29tZXRpbWVzIGl0IGlzIHJlYWxseSBoYW5keSB0byBiZSBhYmxl IHRvIGRlYnVnIHRoaW5ncworICAgICAgICAgICAgICAgICogYW5kIHN0aWxsIGdldCBhIGNvbm5l Y3Rpb24hCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0w6IGRlYnVnIC0+IGlnbm9y aW5nIGNlcnQgcmVxdWlyZWQhXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBvaz0xOworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9rPTA7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7CisgICAgICAgICAg ICB9IGVsc2UgaWYgKHNzbF92ZXJpZnlfZmxhZyAhPSBTU0xfVkVSSUZZX05PTkUpIHsKKyAgICAg ICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgICAgIEFTTjFfVElNRV9wcmludChiaW9f ZXJyLFg1MDlfZ2V0X25vdEJlZm9yZSh4cykpOworICAgICAgICAgICAgICAgIGxlbiA9IEJJT19y ZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOworICAgICAgICAgICAgICAgIHNzbF9l cnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAg ICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIldhcm5pbmc6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKVg1 MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAiXG4gICAgbm90QmVmb3JlPSIsc3NsX2VyciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAg ICAgICBvayA9IHVxX29rKHByZWZpeCwgIkNvbnRpbnVlIChZL04pIiwgMywgTlVMTCwgMCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJS X0NFUlRfSEFTX0VYUElSRUQ6CisgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJU X05PVF9BRlRFUl9GSUVMRDoKKyAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xf VkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbjsK KyAgICAgICAgICAgICAgICAvKiBtYWtlIDEwMCUgc3VyZSB0aGF0IGluIHNlY3VyZSBtb3JlIHdl IGRyb3AgdGhlCisgICAgICAgICAgICAgICAgICogY29ubmVjdGlvbiBpZiB0aGUgc2VydmVyIGRv ZXMgbm90IGhhdmUgYQorICAgICAgICAgICAgICAgICAqIHJlYWwgY2VydGlmaWNhdGUhCisgICAg ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgQVNOMV9USU1FX3ByaW50KGJpb19lcnIs WDUwOV9nZXRfbm90QWZ0ZXIoeHMpKTsKKyAgICAgICAgICAgICAgICBsZW4gPSBCSU9fcmVhZChi aW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgICAgICAgICBzc2xfZXJyW2xl biA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOworCisgICAgICAg ICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkVycm9yOiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilYNTA5X3Zl cmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAiXG5DZXJ0aWZpY2F0ZSBTdWJqZWN0PVxuIixzdWJqZWN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlxuICAgIG5vdEFmdGVyPSIsc3NsX2VyciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICB1 cV9vayhwcmVmaXgsICJSZWplY3RpbmcgQ29ubmVjdGlvbiIsIDEsIE5VTEwsIDApOworICAgCisg ICAgICAgICAgICAgICAgLyogc29tZXRpbWVzIGl0IGlzIHJlYWxseSBoYW5keSB0byBiZSBhYmxl IHRvIGRlYnVnIHRoaW5ncworICAgICAgICAgICAgICAgICogYW5kIHN0aWxsIGdldCBhIGNvbm5l Y3Rpb24hCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTU0w6IGRlYnVnIC0+IGlnbm9y aW5nIGNlcnQgcmVxdWlyZWQhXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBvaz0xOworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG9rPTA7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7CisgICAgICAgICAg ICB9IGVsc2UgaWYgKHNzbF92ZXJpZnlfZmxhZyAhPSBTU0xfVkVSSUZZX05PTkUpIHsKKyAgICAg ICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgICAgIEFTTjFfVElNRV9wcmludChiaW9f ZXJyLFg1MDlfZ2V0X25vdEFmdGVyKHhzKSk7CisgICAgICAgICAgICAgICAgbGVuID0gQklPX3Jl YWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7CisgICAgICAgICAgICAgICAgc3NsX2Vy cltsZW4gPCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAgICAg ICAgICAgICAgICBja21ha3htc2cocHJlZml4LDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAiV2FybmluZzogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopWDUw OV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlxuQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVjdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICJcbiAgICBub3RBZnRlcj0iLHNzbF9lcnIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAg ICAgb2sgPSB1cV9vayhwcmVmaXgsICJDb250aW51ZSAoWS9OKSIsIDMsIE5VTEwsIDApOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9T RUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOOgorICAgICAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxF X1RPX0dFVF9JU1NVRVJfQ0VSVF9MT0NBTExZOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAg ICAqIFdoZW4gYW4gU1NMIHNlcnZlciBzZW5kcyBpdHMgY2VydGlmaWNhdGVzIHRvIHRoZSBjbGll bnQgdGhlcmUKKyAgICAgICAgICAgICAqIGFyZSB0d28iIGNvbnZlbnRpb25zIjogb25lIGlzIHRv IHNlbmQgdGhlIGNvbXBsZXRlIGNlcnRpZmljYXRlCisgICAgICAgICAgICAgKiBjaGFpbiBhbmQg dGhlIG90aGVyIGlzIHRvIHNlbmQgdGhlIHdob2xlIGNoYWluIGFwYXJ0IGZyb20gdGhlCisgICAg ICAgICAgICAgKiByb290LgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFlvdSBkb24n dCB1c3VhbGx5IG5lZWQgdGhlIHJvb3QgYmVjYXVzZSB0aGUgcm9vdCBpcyBub3JtYWxseQorICAg ICAgICAgICAgICogc3RvcmVkIGFuZCB0cnVzdGVkIGxvY2FsbHkuCisgICAgICAgICAgICAgKgor ICAgICAgICAgICAgICogU28gaWYgeW91IGdldCB0aGUgd2hvbGUgY2hhaW4gaXQgd2lsbCBjb21w bGFpbiBhYm91dCB0aGUgc2VsZgorICAgICAgICAgICAgICogc2lnbmVkIGNlcnRpZmljYXRlIHdo ZXJlYXMgaWYgdGhlIHJvb3QgaXMgbWlzc2luZyBpdCBzYXlzIGl0CisgICAgICAgICAgICAgKiBj YW4ndCBmaW5kIHRoZSBpc3N1ZXIgY2VydGlmaWNhdGUuCisgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9D RVJUKSB7CisgICAgICAgICAgICAgICAgLyogbWFrZSAxMDAlIHN1cmUgdGhhdCBpbiBzZWN1cmUg bW9yZSB3ZSBkcm9wIHRoZQorICAgICAgICAgICAgICAgICAqIGNvbm5lY3Rpb24gaWYgdGhlIHNl cnZlciBkb2VzIG5vdCBoYXZlIGEKKyAgICAgICAgICAgICAgICAgKiByZWFsIGNlcnRpZmljYXRl IQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgs MTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJy b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUgSXNzdWVyPVxu Iixpc3N1ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIHVxX29rKHByZWZpeCwgIlJl amVjdGluZyBDb25uZWN0aW9uIiwgMSwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgLyogc29t ZXRpbWVzIGl0IGlzIHJlYWxseSBoYW5keSB0byBiZSBhYmxlIHRvIGRlYnVnIHRoaW5ncworICAg ICAgICAgICAgICAgICogYW5kIHN0aWxsIGdldCBhIGNvbm5lY3Rpb24hCisgICAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKKyAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJTU0w6IGRlYnVnIC0+IGlnbm9yaW5nIGNlcnQgcmVxdWlyZWQhXHJc biIpOworICAgICAgICAgICAgICAgICAgICBvaz0xOworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIG9rPTA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGdvdG8gcmV0dXJuX3RpbWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF92ZXJp ZnlfZmxhZyAhPSBTU0xfVkVSSUZZX05PTkUpIHsKKyAgICAgICAgICAgICAgICBja21ha3htc2co cHJlZml4LDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9z dHJpbmcoZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuQ2VydGlmaWNhdGUg SXNzdWVyPVxuIixpc3N1ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIG9rID0gdXFf b2socHJlZml4LCAiQ29udGludWUgKFkvTikiLCAzLCBOVUxMLCAwKTsKKyNpZmRlZiBOVAorICAg ICAgICAgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgICAgICAgICAvKiBpZiB0aGUgdXNl ciBkZWNpZGVzIHRvIGFjY2VwdCB0aGUgY2VydGlmaWNhdGUKKyAgICAgICAgICAgICAgICAgICAg ICogb2ZmZXIgdG8gc3RvcmUgaXQgZm9yIGZ1dHVyZSBjb25uZWN0aW9ucyBpbiAKKyAgICAgICAg ICAgICAgICAgICAgICogdGhlIHVzZXIncyBwcml2YXRlIHN0b3JlCisgICAgICAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICAgICAgICBvayA9IHVxX29rKAorICAiRG8geW91IHdpc2gg dG8gc3RvcmUgdGhlIGNlcnRpZmljYXRlIHRvIHZlcmlmeSBmdXR1cmUgY29ubmVjdGlvbnM/IiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGludWUgKFkvTikiLCAzLCBOVUxM LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgICAgICAgICAg ICAgY2tfWDUwOV9zYXZlX2NlcnRfdG9fdXNlcl9zdG9yZSh4cyk7CisgICAgICAgICAgICAgICAg fQorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6Cisg ICAgICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0NSTDoKKyAgICAgICAgY2FzZSBY NTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NFUlRfU0lHTkFUVVJFOgorICAgICAgICBjYXNl IFg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ1JMX1NJR05BVFVSRToKKyAgICAgICAgY2Fz ZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNPREVfSVNTVUVSX1BVQkxJQ19LRVk6CisgICAgICAg IGNhc2UgWDUwOV9WX0VSUl9DRVJUX1NJR05BVFVSRV9GQUlMVVJFOgorICAgICAgICBjYXNlIFg1 MDlfVl9FUlJfQ1JMX1NJR05BVFVSRV9GQUlMVVJFOgorICAgICAgICBjYXNlIFg1MDlfVl9FUlJf Q1JMX05PVF9ZRVRfVkFMSUQ6CisgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9DUkxfSEFTX0VYUElS RUQ6CisgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTEFTVF9VUERBVEVfRklF TEQ6CisgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTkVYVF9VUERBVEVfRklF TEQ6CisgICAgICAgIGNhc2UgWDUwOV9WX0VSUl9PVVRfT0ZfTUVNOgorICAgICAgICBjYXNlIFg1 MDlfVl9FUlJfQ0VSVF9DSEFJTl9UT09fTE9ORzoKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0NF UlRfUkVWT0tFRDoKKyAgICAgICAgY2FzZSBYNTA5X1ZfRVJSX0FQUExJQ0FUSU9OX1ZFUklGSUNB VElPTjoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcg JiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7CisgICAgICAgICAgICAgICAgLyog bWFrZSAxMDAlIHN1cmUgdGhhdCBpbiBzZWN1cmUgbW9kZSB3ZSBkcm9wIHRoZQorICAgICAgICAg ICAgICAgICAqIGNvbm5lY3Rpb24gaWYgdGhlIHNlcnZlciBkb2VzIG5vdCBoYXZlIGEKKyAgICAg ICAgICAgICAgICAgKiByZWFsIGNlcnRpZmljYXRlIQorICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgIGNrbWFreG1zZyhwcmVmaXgsMTAyNCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJFcnJvcjogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopWDUw OV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlxuQ2VydGlmaWNhdGUgU3ViamVjdD1cbiIsc3ViamVjdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7Cisg ICAgICAgICAgICAgICAgdXFfb2socHJlZml4LCAiUmVqZWN0aW5nIENvbm5lY3Rpb24iLCAxLCBO VUxMLCAwKTsKKworICAgICAgICAgICAgICAgIC8qIHNvbWV0aW1lcyBpdCBpcyByZWFsbHkgaGFu ZHkgdG8gYmUgYWJsZSB0byBkZWJ1ZyB0aGluZ3MKKyAgICAgICAgICAgICAgICAqIGFuZCBzdGls bCBnZXQgYSBjb25uZWN0aW9uIQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAg aWYgKHNzbF9kZWJ1Z19mbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU1NMOiBk ZWJ1ZyAtPiBpZ25vcmluZyBjZXJ0IHJlcXVpcmVkIVxyXG4iKTsKKyAgICAgICAgICAgICAgICAg ICAgb2s9MTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBv az0wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHJldHVybl90aW1l OworICAgICAgICAgICAgfSBlbHNlIGlmIChzc2xfdmVyaWZ5X2ZsYWcgIT0gU1NMX1ZFUklGWV9O T05FKSB7CisgICAgICAgICAgICAgICAgY2ttYWt4bXNnKHByZWZpeCwxMDI0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIldhcm5pbmc6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKVg1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nKGVycm9yKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICJcbkNlcnRpZmljYXRlIFN1YmplY3Q9XG4iLHN1YmplY3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwpOworICAgICAgICAgICAgICAgIG9rID0gdXFfb2socHJlZml4LCAiQ29udGludWUg KFkvTikiLCAzLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgfQorCisgIHJldHVybl90aW1lOgorICAgIGlmICggc3NsX2RlYnVnX2Zs YWcgKQorICAgICAgICBwcmludGYoInNzbDpjbGllbnRfdmVyaWZ5X2NhbGxiYWNrID0+IG9rOiAl ZFxyXG4iLG9rKTsKKyAgICByZXR1cm4gb2s7Cit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQwor c3NsX2NsaWVudF9pbmZvX2NhbGxiYWNrKGNvbnN0IFNTTCAqcywgaW50IHdoZXJlLCBpbnQgcmV0 KQorI2Vsc2UKK3NzbF9jbGllbnRfaW5mb19jYWxsYmFjayhzLHdoZXJlLHJldCkKK2NvbnN0IFNT TCAqczsKK2ludCB3aGVyZTsKK2ludCByZXQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBpZiAoaW5zZXJ2ZXIgfHwgIXNzbF9kZWJ1Z19mbGFnKQorICAgICAgICByZXR1cm47CisKKyAg ICBzZXR2ZXJib3NpdHkoKTsKKworICAgIHN3aXRjaCAoIHdoZXJlICkgeworICAgIGNhc2UgU1NM X0NCX0NPTk5FQ1RfTE9PUDoKKyAgICAgICAgcHJpbnRmKCJTU0xfY29ubmVjdDolcyAlc1xyXG4i LAorICAgICAgICAgICAgICAgIFNTTF9zdGF0ZV9zdHJpbmcoKFNTTCAqKXMpLFNTTF9zdGF0ZV9z dHJpbmdfbG9uZygoU1NMICopcykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNTTF9DQl9D T05ORUNUX0VYSVQ6CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgcHJpbnRm KCJTU0xfY29ubmVjdDpmYWlsZWQgaW4gJXMgJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAg U1NMX3N0YXRlX3N0cmluZygoU1NMICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilz KSk7CisgICAgICAgIH0gZWxzZSBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgcHJpbnRmKCJT U0xfY29ubmVjdDplcnJvciBpbiAlcyAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICBTU0xf c3RhdGVfc3RyaW5nKChTU0wgKilzKSxTU0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAqKXMpKTsK KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNTTF9DQl9BQ0NFUFRfTE9PUDoK KyAgICAgICAgcHJpbnRmKCJTU0xfYWNjZXB0OiVzICVzXHJcbiIsCisgICAgICAgICAgICAgICAg U1NMX3N0YXRlX3N0cmluZygoU1NMICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilz KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1NMX0NCX0FDQ0VQVF9FWElUOgorICAgICAg ICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiU1NMX2FjY2VwdDpmYWlsZWQg aW4gJXMgJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgU1NMX3N0YXRlX3N0cmluZygoU1NM ICopcyksU1NMX3N0YXRlX3N0cmluZ19sb25nKChTU0wgKilzKSk7CisgICAgICAgIH0gZWxzZSBp ZiAocmV0IDwgMCkgeworICAgICAgICAgICAgcHJpbnRmKCJTU0xfYWNjZXB0OmVycm9yIGluICVz ICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgIFNTTF9zdGF0ZV9zdHJpbmcoKFNTTCAqKXMp LFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykpOworICAgICAgICB9CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgU1NMX0NCX1JFQURfQUxFUlQ6CisgICAgICAgIHByaW50ZigiU1NMX3Jl YWRfYWxlcnRcclxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1NMX0NCX1dSSVRFX0FM RVJUOgorICAgICAgICBwcmludGYoIlNTTF93cml0ZV9hbGVydFxyXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBTU0xfQ0JfSEFORFNIQUtFX1NUQVJUOgorICAgICAgICBwcmludGYoIlNT TF9oYW5kc2hha2U6JXMgJXNcclxuIiwKKyAgICAgICAgICAgICAgICBTU0xfc3RhdGVfc3RyaW5n KChTU0wgKilzKSxTU0xfc3RhdGVfc3RyaW5nX2xvbmcoKFNTTCAqKXMpKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBTU0xfQ0JfSEFORFNIQUtFX0RPTkU6CisgICAgICAgIHByaW50ZigiU1NM X2hhbmRzaGFrZTolcyAlc1xyXG4iLAorICAgICAgICAgICAgICAgIFNTTF9zdGF0ZV9zdHJpbmco KFNTTCAqKXMpLFNTTF9zdGF0ZV9zdHJpbmdfbG9uZygoU1NMICopcykpOworICAgICAgICBicmVh azsKKyAgICB9Cit9CisKKyNpZmRlZiBVU0VfQ0VSVF9DQgorLyogUmV0dXJuIDEsIGNsaWVudCBj ZXJ0IGlzIGF2YWlsYWJsZSAqLworLyogUmV0dXJuIDAsIG5vIGNsaWVudCBjZXJ0IGlzIGF2YWls YWJsZSAqLworLyogUmV0dXJuIC0xLCBjYWxsYmFjayBtdXN0IGJlIGNhbGxlZCBhZ2Fpbi4gU1NM X3dhbnRfeDUwOV9sb29rdXAoKSA9PSAxICovCitpbnQKKyNpZmRlZiBDS19BTlNJQworc3NsX2Ns aWVudF9jZXJ0X2NhbGxiYWNrKFNTTCAqIHMsIFg1MDkgKiogeDUwOSwgRVZQX1BLRVkgKiogcGtl eSkKKyNlbHNlIC8qIENLX0FOU0lDICovCitzc2xfY2xpZW50X2NlcnRfY2FsbGJhY2socywgeDUw OSwgcGtleSkKKyAgICBTU0wgKiBzOworICAgIFg1MDkgKiogeDUwOTsKKyAgICBFVlBfUEtFWSAq KiBwa2V5OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgc2V0dmVyYm9zaXR5KCk7CisK KyAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkgeworICAgICAgICBjb25zdCBjaGFyICogY2lwaGVy X2xpc3Q9U1NMX2dldF9jaXBoZXIocyk7CisgICAgICAgIHByaW50Zigic3NsX2NsaWVudF9jZXJ0 X2NhbGxiYWNrIGNhbGxlZCAoJXMpXHJcbiIsCisgICAgICAgICAgICAgICAgY2lwaGVyX2xpc3Q/ Y2lwaGVyX2xpc3Q6IlVOS05PV04iKTsKKyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIGlmICgg cyA9PSB0bHNfY29uICkgeworICAgICAgICBpZiAodGxzX2xvYWRfY2VydHModGxzX2N0cyx0bHNf Y29uLDApKSB7CisgICAgICAgICAgICAqeDUwOSA9IFNTTF9nZXRfY2VydGlmaWNhdGUocyk7Cisg ICAgICAgICAgICAqcGtleSA9IFNTTF9nZXRfcHJpdmF0ZWtleShzKTsKKyAgICAgICAgICAgIHJl dHVybigxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIHMgPT0gc3NsX2NvbiApIHsKKyAg ICAgICAgaWYgKHRsc19sb2FkX2NlcnRzKHNzbF9jdHgsc3NsX2NvbiwwKSkgeworICAgICAgICAg ICAgKng1MDkgPSBTU0xfZ2V0X2NlcnRpZmljYXRlKHMpOworICAgICAgICAgICAgKnBrZXkgPSBT U0xfZ2V0X3ByaXZhdGVrZXkocyk7CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0K KyAgICB9CisgICAgcmV0dXJuKDApOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAgIHJldHVybigw KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisjZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8KKwor I2lmbmRlZiBNU19DQUxMQkFDSworI2RlZmluZSBNU19DQUxMQkFDSworI2VuZGlmIC8qIE1TX0NB TExCQUNLICovCisKK3N0YXRpYyBSU0EgTVNfQ0FMTEJBQ0sgKgorI2lmZGVmIENLX0FOU0lDCit0 bXBfcnNhX2NiKFNTTCAqIHMsIGludCBleHBvcnQsIGludCBrZXlsZW5ndGgpCisjZWxzZSAvKiBD S19BTlNJQyAqLwordG1wX3JzYV9jYihzLGV4cG9ydCxrZXlsZW5ndGgpCitTU0wgKnM7CitpbnQg ZXhwb3J0OworaW50IGtleWxlbmd0aDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHN0 YXRpYyBSU0EgKnJzYV90bXA9TlVMTDsKKworI2lmbmRlZiBOT19SU0EKKyAgICBpZiAocnNhX3Rt cCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAg ICAgcHJpbnRmKCJHZW5lcmF0aW5nIHRlbXBvcmFyeSAoJWQgYml0KSBSU0Ega2V5Li4uXHJcbiIs a2V5bGVuZ3RoKTsKKworICAgICAgICByc2FfdG1wPVJTQV9nZW5lcmF0ZV9rZXkoa2V5bGVuZ3Ro LFJTQV9GNCxOVUxMLE5VTEwpOworCisgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAg ICAgICAgIHByaW50ZigiXHJcbiIpOworICAgIH0KKyNlbHNlIC8qIE5PX1JTQSAqLworICAgIGlm IChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gZ2VuZXJhdGUgdGVt cG9yYXJ5IFJTQSBrZXkuLi5cclxuIik7CisjZW5kaWYKKyAgICByZXR1cm4ocnNhX3RtcCk7Cit9 CisKKworI2lmbmRlZiBOT19ESAorc3RhdGljIHVuc2lnbmVkIGNoYXIgZGg1MTJfcFtdPXsKKyAg ICAweEU5LDB4NEUsMHgzQSwweDY0LDB4RkEsMHg2NSwweDVGLDB4QTYsMHg0NCwweEM3LDB4RkMs MHhGMSwKKyAgICAweDE2LDB4OEIsMHgxMSwweDExLDB4N0EsMHhGMCwweEIyLDB4NDksMHg4MCww eDU2LDB4QTMsMHhGOCwKKyAgICAweDBGLDB4N0QsMHgwMSwweDY4LDB4NUQsMHhGNiwweDhBLDB4 RUEsMHg4QywweERELDB4MDEsMHhEQywKKyAgICAweDQzLDB4MTgsMHhFMCwweEM0LDB4ODksMHg4 MCwweEU2LDB4MkQsMHg0NCwweDc3LDB4NDUsMHhGRCwKKyAgICAweEJBLDB4RkMsMHg0MywweDM1 LDB4MTIsMHhDMCwweEVELDB4MzIsMHhEMywweDE2LDB4RUYsMHg1MSwKKyAgICAweDA5LDB4NDQs MHhBMiwweERCLAorfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRoNTEyX2dbXT17CisgICAgMHgw NSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRoNzY4X3BbXT17CisgICAgMHg4QiwweDJB LDB4OEMsMHg2QywweDBGLDB4ODcsMHhDNywweDM0LDB4RUUsMHgyRSwweEZCLDB4NjAsCisgICAg MHg5NCwweEIzLDB4QkYsMHg5NSwweEJBLDB4ODQsMHg3NCwweDg2LDB4RUEsMHhFMCwweEE0LDB4 MzMsCisgICAgMHhFMCwweDhGLDB4N0MsMHg3OSwweDVDLDB4NjIsMHhFMiwweDkxLDB4QzUsMHg2 RCwweDY4LDB4QjksCisgICAgMHg2QywweDVFLDB4NEUsMHg5NCwweDBDLDB4OEUsMHg1NiwweDhF LDB4RUIsMHg5OCwweDdDLDB4NkUsCisgICAgMHgwRSwweEYyLDB4RDUsMHhBQSwweDIyLDB4Mjcs MHgzRiwweDBGLDB4QUYsMHgxMCwweEI1LDB4MEIsCisgICAgMHgxNiwweENDLDB4MDUsMHgyNyww eEJCLDB4NTgsMHg2RCwweDYxLDB4NEIsMHgyQiwweEFCLDB4REMsCisgICAgMHg2QSwweDE1LDB4 QkMsMHgzNiwweDc1LDB4NEQsMHhFQywweEFCLDB4RkEsMHhCNiwweEUxLDB4QjEsCisgICAgMHgx MywweDcwLDB4RDgsMHg3NywweENELDB4NUUsMHg1MSwweDc3LDB4ODEsMHgwRCwweDc3LDB4NDMs Cit9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGg3NjhfZ1tdPXsKKyAgICAweDA1LAorfTsKKwor c3RhdGljIHVuc2lnbmVkIGNoYXIgZGgxMDI0X3BbXT17CisgICAgMHhBNCwweDc1LDB4Q0YsMHgz NSwweDAwLDB4QUYsMHgzQywweDE3LDB4Q0UsMHhCMCwweEQwLDB4NTIsCisgICAgMHg0MywweEEw LDB4MEUsMHhGQSwweEEyLDB4QzksMHhCRSwweDBCLDB4NzYsMHg3QSwweEQ5LDB4MkUsCisgICAg MHhGNCwweDk3LDB4QUMsMHgwMiwweDI0LDB4NjksMHhGNiwweDM2LDB4NEYsMHhBQiwweENDLDB4 NDMsCisgICAgMHhDMSwweDc0LDB4RkYsMHhBMywweEQ0LDB4MDQsMHgwRiwweDExLDB4MkIsMHg2 RCwweDhDLDB4NDcsCisgICAgMHhDOSwweENGLDB4NDAsMHg5MywweDlCLDB4N0QsMHgxRSwweDUy LDB4ODUsMHhCMiwweDE3LDB4NTUsCisgICAgMHg5QywweEYyLDB4NDEsMHgwMiwweDJBLDB4OUQs MHg1RiwweDI0LDB4MjIsMHhDNiwweDA0LDB4QzQsCisgICAgMHhBQiwweDkyLDB4NkQsMHhDNyww eEM4LDB4RjMsMHg0MSwweDU4LDB4NkMsMHg4NiwweEZELDB4QjgsCisgICAgMHgwRiwweDJELDB4 REQsMHhCRiwweEE4LDB4NDAsMHgwQywweDU4LDB4QzgsMHhGMiwweDNGLDB4MTgsCisgICAgMHhF RiwweEYxLDB4OTMsMHgzRSwweEJBLDB4MTYsMHg0MSwweEJFLDB4MzIsMHg2QywweEM1LDB4NjMs CisgICAgMHhGRiwweDhBLDB4MDIsMHgzRCwweEFDLDB4RDUsMHg1QSwweDQ5LDB4NjQsMHgzNCww eDE0LDB4MkUsCisgICAgMHhGQiwweDJFLDB4RTcsMHgzOSwweDFBLDB4MEYsMHgzQywweDMzLAor fTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRoMTAyNF9nW109eworICAgIDB4MDUsCit9OworCitz dGF0aWMgdW5zaWduZWQgY2hhciBkaDE1MzZfcFtdPXsKKyAgICAweEEzLDB4MkIsMHg3NSwweDBF LDB4N0IsMHgzMSwweDgyLDB4Q0EsMHhGMiwweEZDLDB4RjMsMHgzRCwKKyAgICAweENFLDB4NUYs MHhDRCwweDVCLDB4OTUsMHhGNiwweDJGLDB4QTQsMHg1RCwweDA4LDB4MjYsMHhEMiwKKyAgICAw eDVGLDB4QzAsMHgzRiwweEM1LDB4RDgsMHhBMiwweEZFLDB4ODMsMHgyNiwweEJDLDB4RUIsMHg3 RCwKKyAgICAweEYwLDB4NEUsMHhEMiwweEE2LDB4QkIsMHgzQywweDg4LDB4NjMsMHhDRSwweDk4 LDB4REUsMHgwOCwKKyAgICAweEUyLDB4RTEsMHhBRiwweEUyLDB4MzgsMHhBOCwweEZBLDB4Njgs MHg3NiwweDhELDB4QkYsMHhERiwKKyAgICAweEJCLDB4MzAsMHgxNSwweEZFLDB4QkQsMHgyMiww eENDLDB4MDMsMHg0RSwweDVFLDB4MzMsMHhBMywKKyAgICAweDZELDB4RDYsMHg2OCwweDEyLDB4 OTcsMHgxNywweDRCLDB4QjUsMHg4NCwweDVGLDB4NUYsMHhBMywKKyAgICAweDVDLDB4MkYsMHhB NCwweDEwLDB4QzEsMHhBRCwweEJGLDB4QUMsMHgzMCwweENBLDB4NDcsMHg2NCwKKyAgICAweDYz LDB4RkUsMHhFRSwweEVFLDB4QTEsMHg2NCwweDczLDB4NzAsMHhBQSwweEY5LDB4RkUsMHhDNiwK KyAgICAweEFELDB4NUUsMHhGNiwweEYzLDB4OUMsMHhERiwweDM0LDB4NTMsMHgzNCwweDcyLDB4 QTYsMHhBNCwKKyAgICAweEJCLDB4ODEsMHg1QSwweDQzLDB4NDEsMHhGRCwweDQxLDB4MDUsMHg1 QiwweDc3LDB4N0IsMHg4NCwKKyAgICAweDAzLDB4RkEsMHg4QSwweEZBLDB4RjcsMHg4RSwweDBG LDB4Q0IsMHg1MSwweEEyLDB4QjgsMHg0NSwKKyAgICAweEZGLDB4NTksMHg0MiwweEVGLDB4Q0Ys MHhGNiwweDI1LDB4MzcsMHhFMiwweDZELDB4RkYsMHg2OSwKKyAgICAweDExLDB4RjUsMHg3Nyww eDU5LDB4NzksMHgxQywweDVGLDB4MDUsMHhGQywweDdBLDB4NjUsMHg4MSwKKyAgICAweDAzLDB4 NEEsMHg3OCwweEM2LDB4RTksMHg0OCwweDczLDB4RjYsMHgxMCwweEJDLDB4OTksMHgxQywKKyAg ICAweEVFLDB4NDQsMHgyRiwweDhCLDB4NzAsMHhDQSwweEE4LDB4QjYsMHgwMiwweDgzLDB4M0Us MHgwQiwKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBkaDE1MzZfZ1tdPXsKKyAgICAweDA1LAor fTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgZGgyMDQ4X3BbXT17CisgICAgMHhGQSwweDRFLDB4 RTQsMHgzQiwweEZBLDB4QzEsMHg4NywweERELDB4RTcsMHhDNiwweDhCLDB4RTYsCisgICAgMHgx MywweDg1LDB4QkMsMHg5QiwweDJCLDB4OEIsMHg1QiwweDQ2LDB4QkIsMHg4QiwweDg2LDB4NkQs CisgICAgMHhENywweEI2LDB4RDUsMHg0OSwweEM1LDB4NTQsMHhGMiwweDNFLDB4RDIsMHgzOSww eDY0LDB4OUIsCisgICAgMHgwRSwweDMzLDB4MzksMHg4RiwweEZBLDB4RkEsMHhEOSwweDc4LDB4 RUQsMHgzNCwweDgyLDB4MjksCisgICAgMHgzNywweDU4LDB4NEQsMHg1RCwweDQwLDB4Q0IsMHg2 OSwweEUzLDB4OEEsMHg5RiwweDE3LDB4MEMsCisgICAgMHgwMSwweDIzLDB4NkIsMHgwNSwweDAx LDB4QUYsMHgzMywweERFLDB4REYsMHgxQSwweEJCLDB4N0IsCisgICAgMHg2QSwweDlGLDB4RDgs MHhFRCwweDhELDB4NUUsMHg0NCwweDE5LDB4NUIsMHhFMCwweEI2LDB4MjMsCisgICAgMHhGOSww eDdBLDB4OTYsMHg2RSwweDk0LDB4MzMsMHgzMSwweDQ5LDB4QkEsMHg4NCwweEQ1LDB4MTIsCisg ICAgMHhENywweDZELDB4REMsMHgzNSwweDU0LDB4NjQsMHhBMywweEQ4LDB4MDQsMHgyNiwweEM1 LDB4QUYsCisgICAgMHg3RiwweEUzLDB4RkUsMHg2RiwweEJFLDB4RDUsMHgxNywweDcyLDB4NEIs MHhBNiwweEQwLDB4QTcsCisgICAgMHg1RiwweDE4LDB4RjUsMHhGMCwweDJELDB4MTEsMHg5QSww eEY2LDB4RDUsMHgzQiwweDZDLDB4NjEsCisgICAgMHgzQywweDZGLDB4OEUsMHgwOSwweDRGLDB4 MkMsMHhFMSwweDI2LDB4MDYsMHg1MSwweEIzLDB4MTksCisgICAgMHg4NSwweDg1LDB4MTMsMHhG OSwweEMyLDB4NkUsMHg4MCwweDI4LDB4OUUsMHg4QSwweEEwLDB4MDEsCisgICAgMHg0NiwweEQx LDB4ODUsMHg0NCwweDhDLDB4RTYsMHhFRSwweDdFLDB4MUUsMHgxNywweDNELDB4QkEsCisgICAg MHg1NCwweEZGLDB4RTgsMHgwRSwweERELDB4NTEsMHhGMywweDc0LDB4N0YsMHgwRCwweDBCLDB4 QUIsCisgICAgMHhDQSwweDg0LDB4OEQsMHgyNCwweDVELDB4NTYsMHhENCwweDQ3LDB4MDIsMHhG QywweDkzLDB4OUYsCisgICAgMHhBRSwweDlCLDB4NUMsMHhEQiwweDYzLDB4RUIsMHg2NSwweDAx LDB4MzgsMHhDMiwweDdCLDB4MzAsCisgICAgMHgxRSwweDE3LDB4MUMsMHg3NSwweEY1LDB4MTYs MHgzQiwweDRGLDB4NUYsMHg0MSwweDMyLDB4QjUsCisgICAgMHhGRiwweDlFLDB4NjEsMHhGRCww eEQyLDB4NjIsMHg2RSwweEZELDB4OEEsMHgyOCwweDkzLDB4NTksCisgICAgMHgyRCwweDcwLDB4 MTQsMHg0RCwweEUxLDB4ODYsMHhENSwweDkwLDB4QjQsMHhERiwweDcyLDB4NzEsCisgICAgMHhF MCwweEI0LDB4RDAsMHhENiwweDgyLDB4M0EsMHg0QSwweDA0LDB4NTgsMHgzMiwweDBCLDB4RDMs CisgICAgMHg1MSwweDEzLDB4MzIsMHg2MywKK307CitzdGF0aWMgdW5zaWduZWQgY2hhciBkaDIw NDhfZ1tdPXsKKyAgICAweDAyLAorfTsKKworc3RhdGljIERIICoKK2dldF9kaDUxMigpCit7Cisg ICAgREggKmRoPU5VTEw7CisKKyAgICBpZiAoKGRoPURIX25ldygpKSA9PSBOVUxMKQorICAgICAg ICByZXR1cm4oTlVMTCk7CisgICAgZGgtPnA9Qk5fYmluMmJuKGRoNTEyX3Asc2l6ZW9mKGRoNTEy X3ApLE5VTEwpOworICAgIGRoLT5nPUJOX2JpbjJibihkaDUxMl9nLHNpemVvZihkaDUxMl9nKSxO VUxMKTsKKyAgICBpZiAoKGRoLT5wID09IE5VTEwpIHx8IChkaC0+ZyA9PSBOVUxMKSkKKyAgICAg ICAgcmV0dXJuKE5VTEwpOworICAgIHJldHVybihkaCk7Cit9CisKK3N0YXRpYyBESCAqCitnZXRf ZGg3NjgoKQoreworICAgIERIICpkaD1OVUxMOworCisgICAgaWYgKChkaD1ESF9uZXcoKSkgPT0g TlVMTCkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIGRoLT5wPUJOX2JpbjJibihkaDc2OF9w LHNpemVvZihkaDc2OF9wKSxOVUxMKTsKKyAgICBkaC0+Zz1CTl9iaW4yYm4oZGg3NjhfZyxzaXpl b2YoZGg3NjhfZyksTlVMTCk7CisgICAgaWYgKChkaC0+cCA9PSBOVUxMKSB8fCAoZGgtPmcgPT0g TlVMTCkpCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICByZXR1cm4oZGgpOworfQorCitzdGF0 aWMgREggKgorZ2V0X2RoMTAyNCgpCit7CisgICAgREggKmRoPU5VTEw7CisKKyAgICBpZiAoKGRo PURIX25ldygpKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgZGgtPnA9Qk5f YmluMmJuKGRoMTAyNF9wLHNpemVvZihkaDEwMjRfcCksTlVMTCk7CisgICAgZGgtPmc9Qk5fYmlu MmJuKGRoMTAyNF9nLHNpemVvZihkaDEwMjRfZyksTlVMTCk7CisgICAgaWYgKChkaC0+cCA9PSBO VUxMKSB8fCAoZGgtPmcgPT0gTlVMTCkpCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICByZXR1 cm4oZGgpOworfQorCitzdGF0aWMgREggKgorZ2V0X2RoMTUzNigpCit7CisgICAgREggKmRoPU5V TEw7CisKKyAgICBpZiAoKGRoPURIX25ldygpKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4oTlVM TCk7CisgICAgZGgtPnA9Qk5fYmluMmJuKGRoMTUzNl9wLHNpemVvZihkaDE1MzZfcCksTlVMTCk7 CisgICAgZGgtPmc9Qk5fYmluMmJuKGRoMTUzNl9nLHNpemVvZihkaDE1MzZfZyksTlVMTCk7Cisg ICAgaWYgKChkaC0+cCA9PSBOVUxMKSB8fCAoZGgtPmcgPT0gTlVMTCkpCisgICAgICAgIHJldHVy bihOVUxMKTsKKyAgICByZXR1cm4oZGgpOworfQorCitzdGF0aWMgREggKgorZ2V0X2RoMjA0OCgp Cit7CisgICAgREggKmRoPU5VTEw7CisKKyAgICBpZiAoKGRoPURIX25ldygpKSA9PSBOVUxMKQor ICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgZGgtPnA9Qk5fYmluMmJuKGRoMjA0OF9wLHNpemVv ZihkaDIwNDhfcCksTlVMTCk7CisgICAgZGgtPmc9Qk5fYmluMmJuKGRoMjA0OF9nLHNpemVvZihk aDIwNDhfZyksTlVMTCk7CisgICAgaWYgKChkaC0+cCA9PSBOVUxMKSB8fCAoZGgtPmcgPT0gTlVM TCkpCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICByZXR1cm4oZGgpOworfQorI2VuZGlmIC8q IE5PX0RIICovCisKK3N0YXRpYyBESCBNU19DQUxMQkFDSyAqCisjaWZkZWYgQ0tfQU5TSUMKK3Rt cF9kaF9jYihTU0wgKiBzLCBpbnQgZXhwb3J0LCBpbnQga2V5bGVuZ3RoKQorI2Vsc2UgLyogQ0tf QU5TSUMgKi8KK3RtcF9kaF9jYihzLGV4cG9ydCxrZXlsZW5ndGgpCitTU0wgKnM7CitpbnQgZXhw b3J0OworaW50IGtleWxlbmd0aDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHN0YXRp YyBESCAqZGhfdG1wPU5VTEw7CisgICAgQklPICpiaW89TlVMTDsKKworI2lmbmRlZiBOT19ESAor ICAgIGlmIChkaF90bXAgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIGlmIChzc2xfZGhfcGFyYW1f ZmlsZSAgJiYKKyAgICAgICAgICAgICAoYmlvPUJJT19uZXdfZmlsZShzc2xfZGhfcGFyYW1fZmls ZSwiciIpKSAhPSBOVUxMKQorICAgICAgICAgICAgZGhfdG1wPVBFTV9yZWFkX2Jpb19ESHBhcmFt cyhiaW8sTlVMTCxOVUxMLE5VTEwpOworICAgICAgICBpZiAoYmlvICE9IE5VTEwpCisgICAgICAg ICAgICBCSU9fZnJlZShiaW8pOworCisgICAgICAgIGlmICggZGhfdG1wID09IE5VTEwgKSB7Cisg ICAgICAgICAgICBpZiAoIGtleWxlbmd0aCA8IDc2OCApCisgICAgICAgICAgICAgICAgZGhfdG1w ID0gZ2V0X2RoNTEyKCk7CisgICAgICAgICAgICBlbHNlIGlmICgga2V5bGVuZ3RoIDwgMTAyNCAp CisgICAgICAgICAgICAgICAgZGhfdG1wID0gZ2V0X2RoNzY4KCk7CisgICAgICAgICAgICBlbHNl IGlmICgga2V5bGVuZ3RoIDwgMTUzNiApCisgICAgICAgICAgICAgICAgZGhfdG1wID0gZ2V0X2Ro MTAyNCgpOworICAgICAgICAgICAgZWxzZSBpZiAoIGtleWxlbmd0aCA8IDIwNDggKQorICAgICAg ICAgICAgICAgIGRoX3RtcCA9IGdldF9kaDE1MzYoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICBkaF90bXAgPSBnZXRfZGgyMDQ4KCk7CisgICAgICAgIH0KKyAgICB9CisjZWxz ZSAvKiBOT19ESCAqLworICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgcHJpbnRmKCJE SCBub3Qgc3VwcG9ydGVkLi4uXHJcbiIpOworI2VuZGlmIC8qIE5PX0RIICovCisgICAgcmV0dXJu KGRoX3RtcCk7Cit9CisKK3N0YXRpYyB2b2lkCitzc2xfZGlzcGxheV9jb21wKFNTTCAqIHNzbCkK K3sKKyAgICBpZiAoIHF1aWV0ICkJCQkvKiBmZGMgLSBNb24gTm92IDI4IDExOjQ0OjE1IDIwMDUg Ki8KKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgp ICkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNzbCA9PSBOVUxMKQorICAgICAgICByZXR1 cm47CisKKyAgICBpZiAoc3NsLT5leHBhbmQgPT0gTlVMTCB8fCBzc2wtPmV4cGFuZC0+bWV0aCA9 PSBOVUxMKQorICAgICAgICBwcmludGYoIkNvbXByZXNzaW9uOiBOb25lXHJcbiIpOworICAgIGVs c2UgeworICAgICAgICBwcmludGYoIkNvbXByZXNzaW9uOiAlc1xyXG4iLHNzbC0+ZXhwYW5kLT5t ZXRoLT5uYW1lKTsKKyAgICB9Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitzc2xfZGlzcGxh eV9jb25uZWN0X2RldGFpbHMoU1NMICogc3NsX2NvbiwgaW50IHNlcnZlciwgaW50IHZlcmJvc2Up CisjZWxzZSAvKiBDS19BTlNJQyAqLworc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHNzbF9j b24sc2VydmVyLHZlcmJvc2UpCitTU0wgKnNzbF9jb247CitpbnQgc2VydmVyOworaW50IHZlcmJv c2U7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBYNTA5ICpwZWVyOworICAgIFNTTF9D SVBIRVIgKiBjaXBoZXI7CisgICAgY29uc3QgY2hhciAqY2lwaGVyX2xpc3Q7CisgICAgY2hhciBi dWZbNTEyXT0iIjsKKworICAgIGlmICggcXVpZXQgKQkJCS8qIGZkYyAtIE1vbiBOb3YgMjggMTE6 NDQ6MTUgMjAwNSAqLworICAgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoICFja19zc2xlYXlf aXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIGluc2VydmVy ICYmICF0bl9kZWIgKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICAvKiB0aGUgY2lwaGVyIGxp c3QgKmNhbiogYmUgTlVMTCAuLi4gdXNlbGVzcyBidXQgaXQgaGFwcGVucyEgKi8KKyAgICBjaXBo ZXIgPSBTU0xfZ2V0X2N1cnJlbnRfY2lwaGVyKHNzbF9jb24pOworICAgIGNpcGhlcl9saXN0ID0g U1NMX0NJUEhFUl9nZXRfbmFtZShjaXBoZXIpOworICAgIFNTTF9DSVBIRVJfZGVzY3JpcHRpb24o Y2lwaGVyLGJ1ZixzaXplb2YoYnVmKSk7CisgICAgaWYgKGNpcGhlcl9saXN0PT1OVUxMKQorICAg ICAgICBjaXBoZXJfbGlzdD0iPE5VTEw+IjsKKyAgICBwcmludGYoIltUTFMgLSAlcyIsYnVmKTsK KyAgICBzc2xfZGlzcGxheV9jb21wKHNzbF9jb24pOworCisgICAgaWYgKCBzZXJ2ZXIgKSB7Cisg ICAgICAgIGNpcGhlcl9saXN0PVNTTF9nZXRfc2hhcmVkX2NpcGhlcnMoc3NsX2NvbixidWYsNTEy KTsKKyAgICAgICAgaWYgKGNpcGhlcl9saXN0PT1OVUxMKQorICAgICAgICAgICAgY2lwaGVyX2xp c3Q9IjxOVUxMPiI7CisgICAgICAgIHByaW50ZigiW1RMUyAtIHNoYXJlZCBjaXBoZXJzPSVzXVxy XG4iLAorICAgICAgICAgICAgICAgIGNpcGhlcl9saXN0KTsKKyAgICAgICAgfSAgICAgICAKKyAg ICBpZiAoIHNlcnZlciB8fCB0bl9kZWIgKSB7CisgICAgICAgIHBlZXI9U1NMX2dldF9wZWVyX2Nl cnRpZmljYXRlKHNzbF9jb24pOworICAgICAgICBpZiAocGVlciAhPSBOVUxMKSB7CisgICAgICAg ICAgICBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlciksYnVmLDUx Mik7CisgICAgICAgICAgICBwcmludGYoIltUTFMgLSBzdWJqZWN0PSVzXVxyXG4iLGJ1Zik7Cisg ICAgICAgICAgICBYNTA5X05BTUVfb25lbGluZShYNTA5X2dldF9pc3N1ZXJfbmFtZShwZWVyKSxi dWYsNTEyKTsKKyAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIGlzc3Vlcj0lc11cclxuIixidWYp OworICAgICAgICAgICAgLyogWDUwOV9mcmVlKHBlZXIpOyAqLworICAgICAgICB9IGVsc2UgaWYg KCF0bHNfaXNfa3JiNSgwKSkgeworICAgICAgICAgICAgaWYgKCAhc3N0ZWxuZXQgJiYgIXRjcF9p bmNvbWluZyApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBObyBjZXJ0aWZpY2F0 ZSBwcm92aWRlZC5dXHJcbiIpOworICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgIltUTFMg LSBUaGUgaWRlbnRpdHkgb2YgdGhlIGhvc3QgY291bGQgbm90IGJlIHZlcmlmaWVkLl1cclxuIik7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisv KgorICogVXNlIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKFNTTF9DVFgg Kiwgdm9pZCAqIHVzZXJkYXRhKQorICogdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgdXNlcmRhdGEu ICBXZSBhcmUgZ29pbmcgdG8gdXNlIGl0IHRvIHN0b3JlIHRoZQorICogcHJvbXB0LgorICovCisK K2ludAorI2lmZGVmIENLX0FOU0lDCitzc2xfcGFzc3dkX2NhbGxiYWNrKGNoYXIgKmJ1ZiwgaW50 IGxlbiwgaW50IHJ3ZmxhZywgVk9JRCAqIHVzZXJkYXRhKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8K K3NzbF9wYXNzd2RfY2FsbGJhY2soYnVmLGxlbixyd2ZsYWcsdXNlcmRhdGEpCisgICAgY2hhciAq IGJ1ZjsgaW50IGxlbjsgaW50IHJ3ZmxhZzsgVk9JRCAqdXNlcmRhdGE7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBleHRlcm4gY2hhciBwd2J1ZltdOworICAgIGV4dGVybiBpbnQgIHB3 ZmxnLCBwd2NyeXB0OworICAgIGludCAgIG9rOworICAgIGNoYXIgKnByb21wdD1OVUxMOworCisg ICAgaWYgKCBwd2J1ZlswXSAmJiBwd2ZsZyApIHsKKyAgICAgICAgaW50IG47CisgICAgICAgIG4g PSBja3N0cm5jcHkoYnVmLHB3YnVmLGxlbik7CisjaWZkZWYgT1MyCisgICAgICAgIGlmICggcHdj cnlwdCApCisgICAgICAgICAgICBja19lbmNyeXB0KChjaGFyICopYnVmKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgcmV0dXJuKG4pOworICAgIH0KKworICAgIGlmICggdXNlcmRhdGEgPT0g TlVMTCApCisgICAgICAgIHByb21wdD0iRW50ZXIgY2VydGlmaWNhdGUgcGFzc3BocmFzZTogIjsK KyAgICBlbHNlCisgICAgICAgIHByb21wdD0oY2hhciopdXNlcmRhdGE7CisgICAgb2sgPSB1cV90 eHQoTlVMTCxwcm9tcHQsMixOVUxMLGJ1ZixsZW4sTlVMTCxERUZBVUxUX1VRX1RJTUVPVVQpOwor ICAgIHJldHVybihvayA+IDAgPyBzdHJsZW4oYnVmKSA6IDApOworfQorCisKKy8qIEF0dGVtcHRz IHRvIGxvYWQgY2VydGlmaWNhdGUgZGF0YSBpbnRvIHRoZSBUTFMgY29udGV4dCBzdHJ1Y3R1cmVz ICovCisvKiBSZXR1cm5zIDEgb24gc3VjY2VzczsgMCBvbiBmYWlsdXJlICovCitpbnQKK3Rsc19s b2FkX2NlcnRzKFNTTF9DVFggKiBjdHgsIFNTTCAqIGNvbiwgaW50IHNlcnZlcikKK3sKKyAgICBp bnQgcmMgPSAxOworCisgICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAg ICAgcmV0dXJuKDApOworCisgICAgZGVidWcoRjExMCwidGxzX2xvYWRfY2VydHMiLCJTU0xfQ1RY IiwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0bHNfbG9hZF9jZXJ0cyIsIlNTTCIsMCk7CisgICAgZGVi dWcoRjExMCwidGxzX2xvYWRfY2VydHMiLCJzZXJ2ZXIiLDApOworCisgICAgaWYgKCBjb24gKSB7 CisgICAgICAgIGlmIChzc2xfcnNhX2NlcnRfZmlsZSkgeworICAgICAgICAgICAgaWYgKCBzc2xf ZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgcHJpbnRmKCJMb2FkaW5nIFJTQSBjZXJ0aWZp Y2F0ZSBpbnRvIFNTTFxyXG4iKTsKKworICAgICAgICAgICAgcmMgPSBTU0xfdXNlX2NlcnRpZmlj YXRlX2ZpbGUoY29uLCBzc2xfcnNhX2NlcnRfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAg aWYgKCFyYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoICFxdWlldCB8fCBz c2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgbG9hZGlu ZyBjZXJ0aWZpY2F0ZSBmcm9tICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3NsX3JzYV9jZXJ0X2ZpbGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBpZiAoIXNzbF9yc2Ffa2V5X2ZpbGUgfHwgIXNzbF9yc2Ffa2V5X2ZpbGVbMF0pCisgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9yc2Ffa2V5X2ZpbGUsc3NsX3JzYV9jZXJ0X2ZpbGUp OworCisgICAgICAgICAgICAgICAgcmMgPSBTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZShjb24sIHNz bF9yc2Ffa2V5X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFg1MDlfRklMRVRZUEVfUEVNKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJjKQor ICAgICAgICAgICAgICAgICAgICByYyA9IFNTTF91c2VfUHJpdmF0ZUtleV9maWxlKGNvbiwgc3Ns X3JzYV9jZXJ0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAgICAgICAgaWYgKCFy YykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXF1aWV0IHx8 IHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Ig bG9hZGluZyBrZXkgZnJvbSAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzc2xfcnNhX2tleV9maWxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICByYyA9IFNTTF9jaGVja19wcml2YXRlX2tleShjb24pOworICAgICAgICAgICAg ICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoCisgICAgICAgICAgICAgICAgIlByaXZhdGUga2V5IGRvZXMgbm90IG1hdGNoIHRo ZSBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5XHJcbiIpOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg KHNzbF9kc2FfY2VydF9maWxlKSB7CisgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkK KyAgICAgICAgICAgICAgICBwcmludGYoIkxvYWRpbmcgRFNBIGNlcnRpZmljYXRlIGludG8gU1NM XHJcbiIpOworCisgICAgICAgICAgICByYyA9IFNTTF91c2VfY2VydGlmaWNhdGVfZmlsZShjb24s IHNzbF9kc2FfY2VydF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAgICBpZiAoIXJjKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKSB7CisgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgbG9hZGluZyBjZXJ0aWZpY2F0ZSBmcm9tICVz XHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2RzYV9jZXJ0X2ZpbGUpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg aWYgKCFzc2xfZGhfa2V5X2ZpbGUgfHwgIXNzbF9kaF9rZXlfZmlsZVswXSkKKyAgICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NsX2RoX2tleV9maWxlLHNzbF9kc2FfY2VydF9maWxlKTsKKyAg ICAgICAgICAgICAgICByYyA9IFNTTF91c2VfUHJpdmF0ZUtleV9maWxlKGNvbiwgc3NsX2RoX2tl eV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBYNTA5X0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAgICAgICAgaWYgKCFyYykKKyAgICAgICAg ICAgICAgICAgICAgcmMgPSBTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZShjb24sIHNzbF9kc2FfY2Vy dF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAgICAgIGlmICghcmMpCisgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoICFxdWlldCB8fCBzc2xfZGVi dWdfZmxhZyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgbG9hZGlu ZyBrZXkgZnJvbSAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xf ZGhfa2V5X2ZpbGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBTU0xfY2hlY2tfcHJpdmF0ZV9rZXkoY29u KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICJQcml2YXRlIGtl eSBkb2VzIG5vdCBtYXRjaCB0aGUgY2VydGlmaWNhdGUgcHVibGljIGtleVxuIik7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3NsX3JzYV9jZXJ0X2ZpbGUpIHsKKyAgICAg ICAgICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgIHByaW50ZigiTG9h ZGluZyBSU0EgY2VydGlmaWNhdGUgaW50byBTU0xcclxuIik7CisKKyAgICAgICAgICAgIHJjID0g U1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjdHgsIHNzbF9yc2FfY2VydF9maWxlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9GSUxFVFlQRV9QRU0pOwor ICAgICAgICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo ICFxdWlldCB8fCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi RXJyb3IgbG9hZGluZyBjZXJ0aWZpY2F0ZSBmcm9tICVzXHJcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3NsX3JzYV9jZXJ0X2ZpbGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBpZiAoIXNzbF9yc2Ffa2V5X2ZpbGUgfHwgIXNzbF9yc2Ffa2V5X2ZpbGVb MF0pCisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9yc2Ffa2V5X2ZpbGUsc3NsX3Jz YV9jZXJ0X2ZpbGUpOworCisgICAgICAgICAgICAgICAgcmMgPSBTU0xfQ1RYX3VzZV9Qcml2YXRl S2V5X2ZpbGUoY3R4LCBzc2xfcnNhX2tleV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAg ICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgICAgICAgIHJjID0gU1NMX0NUWF91c2VfUHJpdmF0 ZUtleV9maWxlKGN0eCwgc3NsX3JzYV9jZXJ0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7CisgICAgICAg ICAgICAgICAgaWYgKCFyYykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19m bGFnICkKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGxvYWRpbmcga2V5IGZy b20gJXNcclxuIixzc2xfcnNhX2tleV9maWxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICByYyA9IFNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXkoY3R4KTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCFyYykgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigK KyAgICAgICAgICAgICAgICAiUHJpdmF0ZSBrZXkgZG9lcyBub3QgbWF0Y2ggdGhlIGNlcnRpZmlj YXRlIHB1YmxpYyBrZXlcclxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNzbF9kc2FfY2Vy dF9maWxlKSB7CisgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAg ICAgcHJpbnRmKCJMb2FkaW5nIERTQSBjZXJ0aWZpY2F0ZSBpbnRvIFNTTFxyXG4iKTsKKworICAg ICAgICAgICAgcmMgPSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlKGN0eCwgc3NsX2RzYV9j ZXJ0X2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WDUwOV9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAgaWYgKCFyYykgeworICAgICAgICAgICAg ICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi RXJyb3IgbG9hZGluZyBjZXJ0aWZpY2F0ZSBmcm9tICVzXHJcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBzc2xfZHNhX2NlcnRfZmlsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNzbF9kaF9rZXlfZmlsZSB8fCAh c3NsX2RoX2tleV9maWxlWzBdKQorICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfZGhf a2V5X2ZpbGUsc3NsX2RzYV9jZXJ0X2ZpbGUpOworICAgICAgICAgICAgICAgIHJjID0gU1NMX0NU WF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwgc3NsX2RoX2tleV9maWxlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBFX1BFTSk7 CisgICAgICAgICAgICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgICAgICAgIHJjID0gU1NMX0NU WF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwgc3NsX2RzYV9jZXJ0X2ZpbGUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X0ZJTEVUWVBF X1BFTSk7CisgICAgICAgICAgICAgICAgaWYgKCFyYykgeworICAgICAgICAgICAgICAgICAgICBp ZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9y IGxvYWRpbmcga2V5IGZyb20gJXNcclxuIixzc2xfZGhfa2V5X2ZpbGUpOworICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJjID0gU1NMX0NUWF9jaGVja19wcml2 YXRlX2tleShjdHgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJjKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICJQcml2YXRlIGtleSBkb2VzIG5vdCBt YXRjaCB0aGUgY2VydGlmaWNhdGUgcHVibGljIGtleVxuIik7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK KyAgICBpZiAoc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGUgJiYgc2VydmVyKSB7CisgICAgICAgIGlu dCBza2lwMXN0ID0gMDsKKyAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAg cHJpbnRmKCJMb2FkaW5nIFJTQSBDZXJ0aWZpY2F0ZSBDaGFpbiBpbnRvIFNTTFxyXG4iKTsKKyAg ICAgICAgaWYgKCFja3N0cmNtcChzc2xfcnNhX2NlcnRfY2hhaW5fZmlsZSxzc2xfcnNhX2NlcnRf ZmlsZSwtMSwKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgMAorI2Vsc2UKKyAg ICAgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAg ICAgICAgICApKQorICAgICAgICAgICAgc2tpcDFzdCA9IDE7CisgICAgICAgIHJjID0gU1NMX0NU WF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShjdHgsc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGUp OworICAgICAgICBpZiAoIXJjICYmIHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHBy aW50ZigiRXJyb3IgbG9hZGluZyBSU0EgQ2VydGlmaWNhdGUgQ2hhaW4gaW50byBTU0xcclxuIik7 CisgICAgfQorICAgIGlmIChzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZSAmJiBzZXJ2ZXIpIHsKKyAg ICAgICAgaW50IHNraXAxc3QgPSAwOworICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAg ICAgICAgICBwcmludGYoIkxvYWRpbmcgRFNBIENlcnRpZmljYXRlIENoYWluIGludG8gU1NMXHJc biIpOworICAgICAgICBpZiAoIWNrc3RyY21wKHNzbF9kc2FfY2VydF9jaGFpbl9maWxlLHNzbF9k c2FfY2VydF9maWxlLC0xLAorI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICAwCisj ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAxCisjZW5kaWYgLyogT1MyICovCisgICAgICAg ICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICBza2lwMXN0ID0gMTsKKyAgICAgICAgcmMg PSBTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKGN0eCxzc2xfZHNhX2NlcnRfY2hh aW5fZmlsZSk7CisgICAgICAgIGlmICghcmMgJiYgc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAg ICAgICAgcHJpbnRmKCJFcnJvciBsb2FkaW5nIERTQSBDZXJ0aWZpY2F0ZSBDaGFpbiBpbnRvIFNT TFxyXG4iKTsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworVk9JRAorI2lmZGVmIENLX0FO U0lDCitzc2xfb25jZV9pbml0KHZvaWQpCisjZWxzZQorc3NsX29uY2VfaW5pdCgpCisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyAgICBDT01QX01FVEhPRCAqIGNtOworICAgIGNoYXIgKiBzOwor CisgICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuOwor LyoKKyAgT3BlblNTTCBkb2VzIG5vdCBwcm92aWRlIGZvciBBQkkgY29tcGF0aWJpbGl0eSBiZXR3 ZWVuIHJlbGVhc2VzIHByaW9yCisgIHRvIHZlcnNpb24gMS4wLjAuICBJZiB0aGUgdmVyc2lvbiBk b2VzIG5vdCBtYXRjaCwgaXQgaXMgbm90IHNhZmUgdG8KKyAgYXNzdW1lIHRoYXQgYW55IGZ1bmN0 aW9uIHlvdSBjYWxsIHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnMgb3IgZG9lcworICB0aGUgc2Ft ZSB0aGluZyB3aXRoIHRoZW0uICBSZW1vdmluZyB0aGlzIHRlc3QgcHJpb3IgdG8gdGhlIE9wZW5T U0wgMS4wLjAKKyAgcmVsZWFzZSB3aWxsIHJlc3VsdCBpbiBhbiBpbmNyZWFzZSBpbiB1bmV4cGxh aW5lZCBvciBpbmNvcnJlY3QgYmVoYXZpb3JzLgorICBUaGUgdGVzdCBzaG91bGQgYmUgcmV2aXNl ZCBvbmNlIE9wZW5TU0wgMS4wLjAgaXMgcmVsZWFzZWQgYW5kIHdlIHNlZSB3aGF0CisgIGl0cyBj bGFpbXMgYXJlIGFzIHRvIEFCSSBjb21wYXRpYmlsaXR5LgorKi8KKyAgICBkZWJ1ZyhGMTExLCJL ZXJtaXQgYnVpbHQgZm9yIE9wZW5TU0wiLE9QRU5TU0xfVkVSU0lPTl9URVhULFNTTEVBWV9WRVJT SU9OX05VTUJFUik7CisjaWZuZGVmIE9TMk9OTFkKKyAgICBkZWJ1ZyhGMTExLCJPcGVuU1NMIExp YnJhcnkiLFNTTGVheV92ZXJzaW9uKFNTTEVBWV9WRVJTSU9OKSwKKyAgICAgICAgICAgU1NMZWF5 KCkpOworICAgIGRlYnVnKEYxMTAsIk9wZW5TU0wgTGlicmFyeSIsU1NMZWF5X3ZlcnNpb24oU1NM RUFZX0JVSUxUX09OKSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJPcGVuU1NMIExpYnJhcnkiLFNTTGVh eV92ZXJzaW9uKFNTTEVBWV9DRkxBR1MpLDApOworICAgIGRlYnVnKEYxMTAsIk9wZW5TU0wgTGli cmFyeSIsU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1BMQVRGT1JNKSwwKTsKKworICAgIC8qIFRoZSBm b2xsb3dpbmcgdGVzdCBpcyBzdWdnZXN0ZWQgYnkgUmljaGFyZCBMZXZpdHRlICovCisgICAgaWYg KCgoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiBeIFNTTGVheSgpKSAmIDB4ZmZmZmZmMGYpIAorI2lm ZGVmIE9TMgorICAgICAgICAgfHwgY2tzdHJjbXAoT1BFTlNTTF9WRVJTSU9OX1RFWFQsKGNoYXIg KilTU0xlYXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTiksLTEsMSkKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgICkgeworICAgICAgICBzc2xfaW5zdGFsbGVkID0gMDsKKyAgICAgICAgZGVidWco RjExMSwiT3BlblNTTCBWZXJzaW9uIGRvZXMgbm90IG1hdGNoLiAgQnVpbHQgd2l0aCIsCisgICAg ICAgICAgICAgICBTU0xlYXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTiksU1NMRUFZX1ZFUlNJT05f TlVNQkVSKTsKKyAgICAgICAgcHJpbnRmKCI/T3BlblNTTCBsaWJyYXJpZXMgZG8gbm90IG1hdGNo IHJlcXVpcmVkIHZlcnNpb246XHJcbiIpOworICAgICAgICBwcmludGYoIiAgLiBDLUtlcm1pdCBi dWlsdCB3aXRoICVzXHJcbiIsT1BFTlNTTF9WRVJTSU9OX1RFWFQpOworICAgICAgICBwcmludGYo IiAgLiBWZXJzaW9uIGZvdW5kICAlc1xyXG4iLFNTTGVheV92ZXJzaW9uKFNTTEVBWV9WRVJTSU9O KSk7CisgICAgICAgIHByaW50ZigiICBPcGVuU1NMIHZlcnNpb25zIHByaW9yIHRvIDEuMC4wIG11 c3QgYmUgdGhlIHNhbWUuXHJcbiIpOyAgICAKKworCXMgPSAiUiI7CisjaWZkZWYgU09MQVJJUwor CXByaW50ZigiICBTZXQgQ0RfTElCUkFSWV9QQVRIIGZvciAlcy5cclxuIixPUEVOU1NMX1ZFUlNJ T05fVEVYVCk7CisJcyA9ICIgT3IgciI7CisjZW5kaWYJLyogU09MQVJJUyAqLworCisjaWZkZWYg SFBVWAorCXByaW50ZigiICBTZXQgU0hMSUJfUEFUSCBmb3IgJXMuXHJcbiIsT1BFTlNTTF9WRVJT SU9OX1RFWFQpOworCXMgPSAiIE9yIHIiOworI2VuZGlmCS8qIEhQVVggKi8KKworI2lmZGVmIEFJ WAorCXByaW50ZigiICBTZXQgTElCUEFUSCBmb3IgJXMuXHJcbiIsT1BFTlNTTF9WRVJTSU9OX1RF WFQpOworCXMgPSAiIE9yIHIiOworI2VuZGlmCS8qIEFJWCAqLworCisjaWZkZWYgTElOVVgKKwlw cmludGYoIiAgU2V0IExEX0xJQlJBUllfUEFUSCBmb3IgJXMuXHJcbiIsT1BFTlNTTF9WRVJTSU9O X1RFWFQpOworCXMgPSAiIE9yIHIiOworI2VuZGlmCS8qIExJTlVYICovCisKKyAgICAgICAgcHJp bnRmKCIgJXNlYnVpbGQgQy1LZXJtaXQgZnJvbSBzb3VyY2Ugb24gdGhpcyBjb21wdXRlciB0byBt YWtlIFwKK3ZlcnNpb25zIGFncmVlLlxyXG4iLHMpOworCisjaWZkZWYgS1RBUkdFVAorCXsKKwkg ICAgY2hhciAqIHM7CisJICAgIHMgPSBLVEFSR0VUOworCSAgICBpZiAoIXMpIHMgPSAiIjsKKwkg ICAgaWYgKCEqcykgcyA9ICIodW5rbm93bikiOworCSAgICBwcmludGYoIiAgQy1LZXJtaXQgbWFr ZWZpbGUgdGFyZ2V0OiAlc1xyXG4iLHMpOworCX0KKyNlbmRpZgkvKiBLVEFSR0VUICovCisgICAg ICAgIHByaW50ZigiICBPciBpZiB0aGF0IGlzIHdoYXQgeW91IGRpZCB0aGVuIHRyeSB0byBmaW5k IG91dCB3aHlcclxuIik7CisgICAgICAgIHByaW50ZigiICB0aGUgcHJvZ3JhbSBsb2FkZXIgKGlt YWdlIGFjdGl2YXRvcikgaXMgY2hvb3NpbmcgYVxyXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIGRp ZmZlcmVudCBPcGVuU1NMIGxpYnJhcnkgdGhhbiB0aGUgb25lIHNwZWNpZmllZCBpbiBcCit0aGUg YnVpbGQuXHJcblxyXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIEFsbCBTU0wvVExTIGZlYXR1cmVz IGRpc2FibGVkLlxyXG5cclxuIik7CisgICAgICAgIGJsZWVwKEJQX0ZBSUwpOworI2lmZGVmIFNT TERMTAorICAgICAgICBja19zc2xfdW5sb2FkZGxsKCk7CisgICAgICAgIGNrX2NyeXB0b191bmxv YWRkbGwoKTsKKyNlbmRpZiAvKiBTU0xETEwgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl bmRpZiAvKiBPUzJPTkxZICovCisKKyAgICAvKiBpbml0IHRoaW5ncyBzbyB3ZSB3aWxsIGdldCBt ZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VzCisgICAgICogcmF0aGVyIHRoYW4gbnVtYmVycworICAg ICAqLworICAgIFNTTF9sb2FkX2Vycm9yX3N0cmluZ3MoKTsKKworI2lmZGVmIFNTSEJVSUxUSU4K KyAgICBPUEVOU1NMX2FkZF9hbGxfYWxnb3JpdGhtc19ub2NvbmYoKTsKKyNlbHNlCisgICAgLyog U1NMX2xpYnJhcnlfaW5pdCgpIG9ubHkgbG9hZHMgdGhvc2UgY2lwaGVycyBuZWVkcyBmb3IgU1NM ICAqLworICAgIC8qIFRoZXNlIGhhcHBlbiB0byBiZSBhIHNpbWlsYXIgc2V0IHRvIHRob3NlIHJl cXVpcmVkIGZvciBTU0ggKi8KKyAgICAvKiBidXQgdGhleSBhcmUgbm90IGEgY29tcGxldGUgc2V0 IG9mIGNpcGhlcnMgcHJvdmlkZWQgYnkgdGhlICovCisgICAgLyogY3J5cHRvIGxpYnJhcnkuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFNTTF9saWJy YXJ5X2luaXQoKTsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyNpZmRlZiBaTElCCisgICAg Y20gPSBDT01QX3psaWIoKTsKKyAgICBpZiAoY20gIT0gTlVMTCAmJiBjbS0+dHlwZSAhPSBOSURf dW5kZWYpIHsKKyAgICAgICAgU1NMX0NPTVBfYWRkX2NvbXByZXNzaW9uX21ldGhvZCgweGUwLCBj bSk7IC8qIEVBWSdzIFpMSUIgSUQgKi8KKyAgICB9CisjZW5kaWYgLyogWkxJQiAqLworICAgIGNt ID0gQ09NUF9ybGUoKTsKKyAgICBpZiAoY20gIT0gTlVMTCAmJiBjbS0+dHlwZSAhPSBOSURfdW5k ZWYpCisgICAgICAgIFNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2QoMHhlMSwgY20pOyAv KiBFQVkncyBSTEUgSUQgKi8KKworICAgIC8qIEVuc3VyZSB0aGUgUmFuZG9tIG51bWJlciBnZW5l cmF0b3IgaGFzIGVub3VnaCBlbnRyb3B5ICovCisgICAgaWYgKCAhUkFORF9zdGF0dXMoKSApIHsK KyAgICAgICAgY2hhciBidWZmZXJbMjU2XT0iIjsKKyAgICAgICAgY2hhciByYW5kb21ieXRlc1sy NTZdOworICAgICAgICBpbnQgcmMxID0gLTEsIHJjMiA9IDE7ICAvKiBhc3N1bWUgZmFpbHVyZSBh bmQgc3VjY2VzcyAqLworCisgICAgICAgIGRlYnVnKEYxMTAsInNzbF9vbmNlX2luaXQiLCIhUkFO RF9zdGF0dXMoKSIsMCk7CisKKyAgICAgICAgaWYgKCBzc2xfcm5kX2ZpbGUgPT0gTlVMTCApIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9ybmRfZmlsZSIsInNzbF9ybmRfZmlsZSBpcyBO VUxMIiwwKTsKKyAgICAgICAgICAgIFJBTkRfZmlsZV9uYW1lKGJ1ZmZlciwyNTYpOworICAgICAg ICAgICAgaWYgKCBidWZmZXJbMF0gKQorICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9ybmRf ZmlsZSwgYnVmZmVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2xfcm5kX2ZpbGUsIi5ybmQiKTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJz c2xfcm5kX2ZpbGUiLHNzbF9ybmRfZmlsZSwwKTsKKworICAgICAgICByYzEgPSBSQU5EX2VnZChz c2xfcm5kX2ZpbGUpOworICAgICAgICBkZWJ1ZyhGMTExLCJzc2xfb25jZV9pbml0IiwiUkFORF9l Z2QoKSIscmMxKTsKKyAgICAgICAgaWYgKCByYzEgPD0gMCApIHsKKyAgICAgICAgICAgIHJjMiA9 IFJBTkRfbG9hZF9maWxlKHNzbF9ybmRfZmlsZSwgLTEpOworICAgICAgICAgICAgZGVidWcoRjEx MSwic3NsX29uY2VfaW5pdCIsIlJBTkRfbG9hZF9maWxlKCkiLHJjMSk7CisgICAgICAgIH0KKwor ICAgICAgICBpZiAoIHJjMSA8PSAwICYmICFyYzIgKQorICAgICAgICB7CisgICAgICAgICAgICB0 aW1lX3QgdCA9IHRpbWUoTlVMTCk7CisgICAgICAgICAgICBpbnQgdGxlbiA9IHNpemVvZih0aW1l X3QpOworICAgICAgICAgICAgaW50IHBpZCA9IGdldHBpZCgpOworICAgICAgICAgICAgaW50IHBs ZW4gPSBzaXplb2YoaW50KTsKKyAgICAgICAgICAgIGludCBuOworI2lmbmRlZiBSQU5EX01BWAor I2RlZmluZSBSQU5EX01BWCAweDdGRkYKKyNlbmRpZgorICAgICAgICAgICAgZGVidWcoRjExMCwi c3NsX29uY2VfaW5pdCIsImNhbGxpbmcgUkFORF9zZWVkKCkiLDApOworCisgICAgICAgICAgICBS QU5EX3NlZWQoKHVuc2lnbmVkIGNoYXIgKikmdCwgdGxlbik7CisgICAgICAgICAgICBSQU5EX3Nl ZWQoKHVuc2lnbmVkIGNoYXIgKikmcGlkLCBwbGVuKTsKKworICAgICAgICAgICAgc3JhbmQoKHVu c2lnbmVkIGludCl0KTsKKyAgICAgICAgICAgIHNwcmludGYoYnVmZmVyLCAiJS4wZiIsICgoKGRv dWJsZSkocmFuZCgpJVJBTkRfTUFYKS9SQU5EX01BWCkqCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChzaXplb2YocmFuZG9tYnl0ZXMpLTEyOC0xKSkpOworICAgICAgICAg ICAgbiA9IChhdG9pKGJ1ZmZlcikrMSklKHNpemVvZihyYW5kb21ieXRlcyktMTI4LTEpOworICAg ICAgICAgICAgUkFORF9zZWVkKHJhbmRvbWJ5dGVzLCAxMjgpOworICAgICAgICB9CisKKyAgICAg ICAgaWYgKCAhUkFORF9zdGF0dXMoKSApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9v bmNlX2luaXQiLCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBQUk5HIiwwKTsKKyAgICAgICAgICAgIHBy aW50ZigiIFVuYWJsZSB0byBsb2FkICdyYW5kb20gc3RhdGUnXG4iKTsKKyAgICAgICAgICAgIHBy aW50ZigiIFNTTCBhbmQgVExTIGFyZSB1bmF2YWlsYmxlLlxuIik7CisgICAgICAgICAgICBwcmlu dGYoIiBVc2UgU0VUIEFVVEggU1NMIFJBTkRPTS1GSUxFIDxmaWxlPiBjb21tYW5kIHRvIHByb3Zp ZGUgcmFuZG9tIGRhdGEuXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiIFNwZWNpZmllZCBmaWxl IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCBuZXcgcmFuZG9tIGRhdGEgYWZ0ZXIgdXNlLlxuIik7 CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHNzbF9ybmRf ZmlsZSApIHsKKyAgICAgICAgICAgIGludCByYyA9IFJBTkRfd3JpdGVfZmlsZShzc2xfcm5kX2Zp bGUpOworICAgICAgICAgICAgZGVidWcoRjExMSwic3NsX29uY2VfaW5pdCIsIlJBTkRfd3JpdGVf ZmlsZSgpIixyYyk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBOVAorICAgIC8vIEluaXRp YWxpemUgYWRkaXRpb25hbCBPSUQgdHlwZXMgZm9yIHVzZSB3aGVuIHNhdmluZyBjZXJ0cyB0byBh IGZpbGUKKyAgICBPQkpfY3JlYXRlKCIyLjk5OTk5LjMiLCJTRVQuZXgzIiwiU0VUIHg1MDl2MyBl eHRlbnNpb24gMyIpOworI2VuZGlmIC8qIE5UICovCisKKyAgICAvKiBtYWtlIHN1cmUgd2UgaGF2 ZSBzb21ld2hlcmUgd2UgY2FuIGxvZyBlcnJvcnMgdG8gKi8KKyAgICBiaW9fZXJyPUJJT19uZXco QklPX3NfbWVtKCkpOworCisgICAgZGVidWcoRjEwMCwic3NsX29uY2VfaW5pdCgpIGNvbXBsZXRl IiwiIiwwKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NzbF90bl9pbml0KGludCBtb2Rl KQorI2Vsc2UKK3NzbF90bl9pbml0KG1vZGUpIGludCBtb2RlOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisjaWZkZWYgS1JCNQorICAgIGV4dGVybiBjaGFyICogazVfa2V5dGFiOworICAgIGV4 dGVybiBjaGFyICoga3JiNV9kX3NydjsKKyNlbmRpZiAvKiBLUkI1ICovCisgICAgc3RhdGljIGlu dCBsYXN0X3NzbF9tb2RlID0gLTE7CisgICAgU1NMICogc3NsX2Nvbng9TlVMTCwgKiB0bHNfY29u eD1OVUxMOworCisgICAgc3NsX2luaXRpYWxpemVkID0gMDsKKworICAgIGlmICggIWNrX3NzbGVh eV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigwKTsKKworICAgIGRlYnVnKEYxMTEs InNzbF90bl9pbml0IiwibW9kZSIsbW9kZSk7CisKKyAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisg ICAgICAgIHByaW50ZigiU1NMX0RFQlVHX0ZMQUcgb25cclxuIik7CisKKyAgICBpZiAobGFzdF9z c2xfbW9kZSAhPSBtb2RlKSB7CisgICAgICAgIGlmIChzc2xfY3R4KSB7CisgICAgICAgICAgICBT U0xfQ1RYX2ZyZWUoc3NsX2N0eCk7CisgICAgICAgICAgICBzc2xfY3R4ID0gTlVMTDsKKyAgICAg ICAgfQorICAgICAgICBpZiAodGxzX2N0eCkgeworICAgICAgICAgICAgU1NMX0NUWF9mcmVlKHRs c19jdHgpOworICAgICAgICAgICAgdGxzX2N0eCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisK KyAgICBpZiAoIChsYXN0X3NzbF9tb2RlICE9IG1vZGUpIHx8ICFzc2xfY3R4IHx8ICF0bHNfY3R4 ICkgeworICAgICAgICBpZiAoIG1vZGUgPT0gU1NMX0NMSUVOVCApIHsKKyAgICAgICAgICAgIHNz bF9jdHg9KFNTTF9DVFggKilTU0xfQ1RYX25ldyhTU0x2MjNfY2xpZW50X21ldGhvZCgpKTsKKyAg ICAgICAgICAgIC8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSB3ZSBkbyBub3QgaGF2ZSBSU0EgYXZh aWxhYmxlICovCisgICAgICAgICAgICBpZiAoICFzc2xfY3R4ICkgeworICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMdjIzX2NsaWVudF9tZXRob2QgZmFpbGVkIiww KTsKKyAgICAgICAgICAgICAgICBzc2xfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjNf Y2xpZW50X21ldGhvZCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggIXNzbF9j dHggKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0x2M19j bGllbnRfbWV0aG9kIGZhaWxlZCIsMCk7CisgICAgICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9 IC0xOworICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0KKyNpZm5kZWYg Q09NTUVOVAorICAgICAgICAgICAgdGxzX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFRMU3Yx X2NsaWVudF9tZXRob2QoKSk7CisjZWxzZSAvKiBDT01NRU5UICovCisgICAgICAgICAgICB0bHNf Y3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7CisgICAg ICAgICAgICAvKiBUaGlzIGNhbiBmYWlsIGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgUlNBIGF2YWls YWJsZSAqLworICAgICAgICAgICAgaWYgKCAhdGxzX2N0eCApIHsKKyAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTHYyM19jbGllbnRfbWV0aG9kIGZhaWxlZCIsMCk7 CisgICAgICAgICAgICAgICAgdGxzX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYzX2Ns aWVudF9tZXRob2QoKSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg ICAgICAgICAgaWYgKCAhdGxzX2N0eCApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJz c2xfdG5faW5pdCIsIlRMU3YxX2NsaWVudF9tZXRob2QgZmFpbGVkIiwwKTsKKyAgICAgICAgICAg ICAgICBsYXN0X3NzbF9tb2RlID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAg ICAgICAgICAgfQorI2lmZGVmIFVTRV9DRVJUX0NCCisgICAgICAgICAgICBTU0xfQ1RYX3NldF9j bGllbnRfY2VydF9jYihzc2xfY3R4LHNzbF9jbGllbnRfY2VydF9jYWxsYmFjayk7CisgICAgICAg ICAgICBTU0xfQ1RYX3NldF9jbGllbnRfY2VydF9jYih0bHNfY3R4LHNzbF9jbGllbnRfY2VydF9j YWxsYmFjayk7CisjZW5kaWYgLyogVVNFX0NFUlRfQ0IgKi8KKyAgICAgICAgfSBlbHNlIGlmICht b2RlID09IFNTTF9TRVJWRVIpIHsKKyAgICAgICAgICAgIC8qIFdlIGFyZSBhIHNlcnZlciAqLwor ICAgICAgICAgICAgc3NsX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYyM19zZXJ2ZXJf bWV0aG9kKCkpOworICAgICAgICAgICAgLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGRvIG5v dCBoYXZlIFJTQSBhdmFpbGFibGUgKi8KKyAgICAgICAgICAgIGlmICggIXNzbF9jdHggKSB7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0x2MjNfc2VydmVyX21l dGhvZCBmYWlsZWQiLDApOworICAgICAgICAgICAgICAgIHNzbF9jdHg9KFNTTF9DVFggKilTU0xf Q1RYX25ldyhTU0x2M19zZXJ2ZXJfbWV0aG9kKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKCAhc3NsX2N0eCApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5f aW5pdCIsIlNTTHYzX3NlcnZlcl9tZXRob2QgZmFpbGVkIiwwKTsKKyAgICAgICAgICAgICAgICBs YXN0X3NzbF9tb2RlID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAg ICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHRsc19jdHg9KFNTTF9DVFggKilTU0xf Q1RYX25ldyhUTFN2MV9zZXJ2ZXJfbWV0aG9kKCkpOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAg ICAgICAgICAgdGxzX2N0eD0oU1NMX0NUWCAqKVNTTF9DVFhfbmV3KFNTTHYyM19zZXJ2ZXJfbWV0 aG9kKCkpOworICAgICAgICAgICAgLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIHdlIGRvIG5vdCBo YXZlIFJTQSBhdmFpbGFibGUgKi8KKyAgICAgICAgICAgIGlmICggIXRsc19jdHggKSB7CisgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJTU0x2MjNfc2VydmVyX21ldGhv ZCBmYWlsZWQiLDApOworICAgICAgICAgICAgICAgIHRsc19jdHg9KFNTTF9DVFggKilTU0xfQ1RY X25ldyhUTFN2MV9zZXJ2ZXJfbWV0aG9kKCkpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgICAgIGlmICggIXRsc19jdHggKSB7CisgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJUTFN2MV9zZXJ2ZXJfbWV0aG9kIGZhaWxlZCIsMCk7 CisgICAgICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0xOworICAgICAgICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIC8qIFVua25vd24gbW9kZSAq LworICAgICAgICAgICAgcmV0dXJuKDApOworCisgICAgICAgIGlmICggIWluc2VydmVyICkgewor ICAgICAgICAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Ioc3NsX2N0eCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlbV9wYXNzd29yZF9jYiAqKXNzbF9wYXNz d2RfY2FsbGJhY2spOworICAgICAgICAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Io dGxzX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBlbV9wYXNzd29y ZF9jYiAqKXNzbF9wYXNzd2RfY2FsbGJhY2spOworICAgICAgICB9CisKKyAgICAgICAgLyogZm9y IFNTTCBzd2l0Y2ggb24gYWxsIHRoZSBpbnRlcm9wZXJhYmlsaXR5IGFuZCBidWcKKyAgICAgICAg ICogd29ya2Fyb3VuZHMgc28gdGhhdCB3ZSB3aWxsIGNvbW11bmljYXRlIHdpdGggcGVvcGxlCisg ICAgICAgICAqIHRoYXQgY2Fubm90IHJlYWQgcG9vcmx5IHdyaXR0ZW4gc3BlY3MgOi0pCisgICAg ICAgICAqIGZvciBUTFMgYmUgc3VyZSB0byBwcmV2ZW50IHVzZSBvZiBTU0x2MgorICAgICAgICAg Ki8KKyAgICAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2xfY3R4LFNTTF9PUF9BTEx8U1NMX09Q X05PX1NTTHYyKTsKKyAgICAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyh0bHNfY3R4LAorICAgICAg ICAgICAgICAgICBTU0xfT1BfTk9fU1NMdjJ8U1NMX09QX1NJTkdMRV9ESF9VU0V8U1NMX09QX0VQ SEVNRVJBTF9SU0EpOworCisgICAgICAgIFNTTF9DVFhfc2V0X2luZm9fY2FsbGJhY2soc3NsX2N0 eCxzc2xfY2xpZW50X2luZm9fY2FsbGJhY2spOworICAgICAgICBTU0xfQ1RYX3NldF9pbmZvX2Nh bGxiYWNrKHRsc19jdHgsc3NsX2NsaWVudF9pbmZvX2NhbGxiYWNrKTsKKworI2lmbmRlZiBDT01N RU5UCisgICAgICAgIC8qIFNldCB0aGUgcHJvcGVyIGNhY2hpbmcgbW9kZSAqLworICAgICAgICBp ZiAoIG1vZGUgPT0gU1NMX1NFUlZFUiApIHsKKyAgICAgICAgICAgIFNTTF9DVFhfc2V0X3Nlc3Np b25fY2FjaGVfbW9kZShzc2xfY3R4LFNTTF9TRVNTX0NBQ0hFX1NFUlZFUik7CisgICAgICAgICAg ICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2N0eCxTU0xfU0VTU19DQUNIRV9T RVJWRVIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU1NMX0NUWF9zZXRfc2Vzc2lv bl9jYWNoZV9tb2RlKHNzbF9jdHgsU1NMX1NFU1NfQ0FDSEVfQ0xJRU5UKTsKKyAgICAgICAgICAg IFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZSh0bHNfY3R4LFNTTF9TRVNTX0NBQ0hFX0NM SUVOVCk7CisgICAgICAgIH0KKyAgICAgICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0 KHNzbF9jdHgsKENIQVIgKikiMSIsMSk7CisgICAgICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25faWRf Y29udGV4dCh0bHNfY3R4LChDSEFSICopIjIiLDEpOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAg ICAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUoc3NsX2N0eCxTU0xfU0VTU19DQUNI RV9PRkYpOworICAgICAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2N0eCxT U0xfU0VTU19DQUNIRV9PRkYpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisKKyAgICAv KiBUaGUgc2VydmVyIHVzZXMgZGVmYXVsdHMgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBmaWxlcy4gKi8K KyAgICAvKiBUaGUgY2xpZW50IGRvZXMgbm90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KKyAgICBpZiAobW9kZSA9PSBTU0xfU0VSVkVSKSB7CisgICAgICAgIGNoYXIgY2VydF9m aWxlcGF0aFsxMDI0XTsKKyAgICAgICAgY29uc3QgY2hhciAqIGRlZmRpciA9IE5VTEw7CisgICAg ICAgIERIICogZGggPSBOVUxMOworCisgICAgICAgIGRlZmRpciA9IGdldGVudigiU1NMX0NFUlRf RElSIik7CisgICAgICAgIGlmICggIWRlZmRpciApIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAg IGRlZmRpciA9IGV4ZWRpcjsKKyNlbHNlIC8qIE9TMiAqLworICAgICAgICAgICAgZGVmZGlyID0g WDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2RpcigpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAg ICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgLSBzZXR0aW5nIGRlZmF1bHQgZGlyZWN0b3J5IHRv IixkZWZkaXIsMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhZGVmZGlyICkKKyAgICAgICAg ICAgIGRlZmRpciA9ICIiOworCisgICAgICAgIGlmICghc3NsX3JzYV9jZXJ0X2ZpbGUpIHsKKyAg ICAgICAgICAgIC8qIHdlIG5lZWQgdG8ga25vdyB0aGUgZnVsbHBhdGggdG8gdGhlIGxvY2F0aW9u IG9mIHRoZQorICAgICAgICAgICAgKiBjZXJ0aWZpY2F0ZSB0aGF0IHdlIHdpbGwgYmUgcnVubmlu ZyB3aXRoIGFzIHdlIGNhbm5vdAorICAgICAgICAgICAgKiBiZSBzdXJlIG9mIHRoZSBjd2Qgd2hl biB3ZSBhcmUgbGF1bmNoZWQKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBzcHJpbnRmKGNl cnRfZmlsZXBhdGgsIiVzLyVzIixkZWZkaXIsInRlbG5ldGQtcnNhLnBlbSIpOworICAgICAgICAg ICAgaWYgKHpjaGtpKGNlcnRfZmlsZXBhdGgpID4gMCkKKyAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2xfcnNhX2NlcnRfZmlsZSxjZXJ0X2ZpbGVwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoc3NsX3JzYV9jZXJ0X2ZpbGUgJiYgIXNzbF9yc2Ffa2V5X2ZpbGUpIHsKKyAgICAgICAgICAg IC8qIHdlIG5lZWQgdG8ga25vdyB0aGUgZnVsbHBhdGggdG8gdGhlIGxvY2F0aW9uIG9mIHRoZQor ICAgICAgICAgICAgKiBjZXJ0aWZpY2F0ZSB0aGF0IHdlIHdpbGwgYmUgcnVubmluZyB3aXRoIGFz IHdlIGNhbm5vdAorICAgICAgICAgICAgKiBiZSBzdXJlIG9mIHRoZSBjd2Qgd2hlbiB3ZSBhcmUg bGF1bmNoZWQKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBzcHJpbnRmKGNlcnRfZmlsZXBh dGgsIiVzLyVzIixkZWZkaXIsInRlbG5ldGQtcnNhLWtleS5wZW0iKTsKKyAgICAgICAgICAgIGlm ICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCisgICAgICAgICAgICAgICAgbWFrZXN0cigmc3Ns X3JzYV9rZXlfZmlsZSxjZXJ0X2ZpbGVwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXNz bF9kc2FfY2VydF9maWxlKSB7CisgICAgICAgICAgICAvKiB3ZSBuZWVkIHRvIGtub3cgdGhlIGZ1 bGxwYXRoIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICogY2VydGlmaWNhdGUg dGhhdCB3ZSB3aWxsIGJlIHJ1bm5pbmcgd2l0aCBhcyB3ZSBjYW5ub3QKKyAgICAgICAgICAgICog YmUgc3VyZSBvZiB0aGUgY3dkIHdoZW4gd2UgYXJlIGxhdW5jaGVkCisgICAgICAgICAgICAqLwor ICAgICAgICAgICAgc3ByaW50ZihjZXJ0X2ZpbGVwYXRoLCIlcy8lcyIsZGVmZGlyLCJ0ZWxuZXRk LWRzYS5wZW0iKTsKKyAgICAgICAgICAgIGlmICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCisg ICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RzYV9jZXJ0X2ZpbGUsY2VydF9maWxlcGF0aCk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNzbF9kc2FfY2VydF9maWxlICYmICFzc2xfZGhfa2V5 X2ZpbGUpIHsKKyAgICAgICAgICAgIC8qIHdlIG5lZWQgdG8ga25vdyB0aGUgZnVsbHBhdGggdG8g dGhlIGxvY2F0aW9uIG9mIHRoZQorICAgICAgICAgICAgKiBjZXJ0aWZpY2F0ZSB0aGF0IHdlIHdp bGwgYmUgcnVubmluZyB3aXRoIGFzIHdlIGNhbm5vdAorICAgICAgICAgICAgKiBiZSBzdXJlIG9m IHRoZSBjd2Qgd2hlbiB3ZSBhcmUgbGF1bmNoZWQKKyAgICAgICAgICAgICovCisgICAgICAgICAg ICBzcHJpbnRmKGNlcnRfZmlsZXBhdGgsIiVzLyVzIixkZWZkaXIsInRlbG5ldGQtZHNhLWtleS5w ZW0iKTsKKyAgICAgICAgICAgIGlmICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCisgICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NsX2RoX2tleV9maWxlLGNlcnRfZmlsZXBhdGgpOworICAgICAg ICB9CisgICAgICAgIGlmICghc3NsX2NybF9kaXIpIHsKKyAgICAgICAgICAgIC8qIHdlIG5lZWQg dG8ga25vdyB0aGUgZnVsbHBhdGggdG8gdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgICAgICAgICAg KiBjZXJ0aWZpY2F0ZSB0aGF0IHdlIHdpbGwgYmUgcnVubmluZyB3aXRoIGFzIHdlIGNhbm5vdAor ICAgICAgICAgICAgKiBiZSBzdXJlIG9mIHRoZSBjd2Qgd2hlbiB3ZSBhcmUgbGF1bmNoZWQKKyAg ICAgICAgICAgICovCisgICAgICAgICAgICBzcHJpbnRmKGNlcnRfZmlsZXBhdGgsIiVzL2NybCIs ZGVmZGlyKTsKKyAgICAgICAgICAgIGlmICh6Y2hraShjZXJ0X2ZpbGVwYXRoKSA+IDApCisgICAg ICAgICAgICAgICAgbWFrZXN0cigmc3NsX2NybF9kaXIsY2VydF9maWxlcGF0aCk7CisgICAgICAg IH0KKworICAgICAgICBpZiAoc3NsX29ubHlfZmxhZyAmJiAhdGxzX2xvYWRfY2VydHMoc3NsX2N0 eCxzc2xfY29uLDEpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlVu YWJsZSB0byBsb2FkIFNTTCBjZXJ0cyIsMCk7CisgICAgICAgICAgICBsYXN0X3NzbF9tb2RlID0g LTE7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRsc19v bmx5X2ZsYWcgJiYgIXRsc19sb2FkX2NlcnRzKHRsc19jdHgsdGxzX2NvbiwxKSkgeworICAgICAg ICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQiLCJVbmFibGUgdG8gbG9hZCBUTFMgY2VydHMi LDApOworICAgICAgICAgICAgbGFzdF9zc2xfbW9kZSA9IC0xOworICAgICAgICAgICAgcmV0dXJu KDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAobGFzdF9zc2xfbW9kZSAhPSBtb2RlKSB8 fCAhc3NsX2N0eCB8fCAhdGxzX2N0eCApIHsKKyAgICAgICAgICAgIC8qIHdlIG1heSByZXF1aXJl IGEgdGVtcCA1MTIgYml0IFJTQSBrZXkgYmVjYXVzZSBvZiB0aGUKKyAgICAgICAgICAgICAqIHdv bmRlcmZ1bCB3YXkgZXhwb3J0IHRoaW5ncyB3b3JrIC4uLiBpZiBzbyB3ZSBnZW5lcmF0ZQorICAg ICAgICAgICAgICogb25lIG5vdyEKKyAgICAgICAgICAgICAqLworCisgICAgICAgICAgICBTU0xf Q1RYX3NldF90bXBfcnNhX2NhbGxiYWNrKHNzbF9jdHgsIHRtcF9yc2FfY2IpOworICAgICAgICAg ICAgU1NMX0NUWF9zZXRfdG1wX2RoX2NhbGxiYWNrKCBzc2xfY3R4LCB0bXBfZGhfY2IpOworICAg ICAgICAgICAgU1NMX0NUWF9zZXRfdG1wX3JzYV9jYWxsYmFjayh0bHNfY3R4LCB0bXBfcnNhX2Ni KTsKKyAgICAgICAgICAgIFNTTF9DVFhfc2V0X3RtcF9kaF9jYWxsYmFjayggdGxzX2N0eCwgdG1w X2RoX2NiKTsKKworICAgICAgICAgICAgZGggPSB0bXBfZGhfY2IoTlVMTCwwLDUxMik7CisgICAg ICAgICAgICBTU0xfQ1RYX3NldF90bXBfZGgoc3NsX2N0eCxkaCk7CisgICAgICAgICAgICBTU0xf Q1RYX3NldF90bXBfZGgodGxzX2N0eCxkaCk7CisKKyAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dp bmcgY29kZSBpcyBvbmx5IGNhbGxlZCBpZiB3ZSBhcmUgdXNpbmcgYQorICAgICAgICAgICAgICog Y2VydGlmaWNhdGUgd2l0aCBhbiBSU0EgcHVibGljIGtleSBhbmQgd2hlcmUgdGhlCisgICAgICAg ICAgICAgKiBjZXJ0aWZpY2F0ZSBoYXMgYSBrZXkgbGVuZ3RoIGxlc3MgdGhhbiA1MTIgYml0cyBv ciBpcworICAgICAgICAgICAgICogbWFya2VkIGZvciBzaWduaW5nIG9ubHkuICBUaGlzIGlzIHNv IHdlIGNhbiBzdXBwb3J0CisgICAgICAgICAgICAgKiB0aGUgZ3JlYXRlc3QgbGVnYWwgcHJpdmFj eSBsZXZlbCB3aXRoIGV4cG9ydGFibGUgY2xpZW50cy4KKyAgICAgICAgICAgICAqLworCisgICAg ICAgICAgICBpZiAoU1NMX0NUWF9uZWVkX3RtcF9SU0Eoc3NsX2N0eCkgfHwKKyAgICAgICAgICAg ICAgICAgU1NMX0NUWF9uZWVkX3RtcF9SU0EodGxzX2N0eCkpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgUlNBICpyc2E7CisKKyAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1Z19m bGFnICkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJHZW5lcmF0aW5nIHRlbXAgKDUxMiBi aXQpIFJTQSBrZXkgLi4uXHJcbiIpOworICAgICAgICAgICAgICAgIHJzYT1SU0FfZ2VuZXJhdGVf a2V5KDUxMixSU0FfRjQsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNzbF9kZWJ1 Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJHZW5lcmF0aW9uIG9mIHRlbXAg KDUxMiBiaXQpIFJTQSBrZXkgZG9uZVxyXG4iKTsKKworICAgICAgICAgICAgICAgIGlmIChTU0xf Q1RYX25lZWRfdG1wX1JTQShzc2xfY3R4KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVNT TF9DVFhfc2V0X3RtcF9yc2Eoc3NsX2N0eCxyc2EpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoCisgICJGYWlsZWQgdG8gYXNzaWduIGdlbmVyYXRlZCB0ZW1wIFJTQSBrZXkgdG8gU1NMIVxy XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBpZiAoU1NMX0NUWF9uZWVkX3RtcF9SU0EodGxzX2N0eCkpIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCFTU0xfQ1RYX3NldF90bXBfcnNhKHRsc19jdHgscnNhKSkgeworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKAorICAiRmFpbGVkIHRvIGFzc2lnbiBnZW5lcmF0ZWQgdGVtcCBS U0Ega2V5IHRvIFRMUyFcclxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgUlNBX2ZyZWUocnNhKTsKKyAgICAgICAgICAgICAgICBp ZiAoIHNzbF9kZWJ1Z19mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBc3NpZ25l ZCB0ZW1wICg1MTIgYml0KSBSU0Ega2V5XHJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfQorCisgICAgLyogbWFrZSBzdXJlIHdlIHdpbGwgZmluZCBjZXJ0aWZpY2F0ZXMgaW4g dGhlIHN0YW5kYXJkCisgICAgICogbG9jYXRpb24gLi4uIG90aGVyd2lzZSB3ZSBkb24ndCBsb29r IGFueXdoZXJlIGZvcgorICAgICAqIHRoZXNlIHRoaW5ncyB3aGljaCBpcyBnb2luZyB0byBtYWtl IGNsaWVudCBjZXJ0aWZpY2F0ZQorICAgICAqIGV4Y2hhbmdlIHJhdGhlciB1c2VsZXNzIDotKQor ICAgICAqIEluIE9TMiwgZGVmYXVsdCB2YWx1ZXMgZm9yIHNzbF92ZXJpZnlfZmlsZSBhbmQgc3Ns X3ZlcmlmeV9wYXRoLgorICAgICAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICB7Cisg ICAgICAgIC8qIFRoZSBkZWZhdWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5IGFyZSBub3Qg YXBwcm9wcmlhdGUgZm9yIE9TLzIgKi8KKyAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07CisK KyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjZXJ0cyIsTlVMTCxOVUxM KTsKKyAgICAgICAgaWYgKGlzZGlyKHBhdGgpICYmIAorICAgICAgICAgICAgU1NMX0NUWF9sb2Fk X3ZlcmlmeV9sb2NhdGlvbnModGxzX2N0eCxOVUxMLHBhdGgpID09IDEpICB7CisgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZGlyIixwYXRoLDAp OworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50 ZigiICBDZXJ0aWZpY2F0ZSBWZXJpZmljYXRpb24gRGlyZWN0b3J5OiAlc1xyXG4iLHBhdGgpOwor ICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0eCxOVUxMLHBh dGgpOworICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERh dGEoMSksImtlcm1pdCA5NS9jZXJ0cyIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKGlzZGlyKHBh dGgpICYmCisgICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4 LE5VTEwscGF0aCkgPT0gMSkgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0 IGNlcnRpZmljYXRlIHZlcmlmeSBkaXIiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2Rl YnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNh dGlvbiBEaXJlY3Rvcnk6ICVzXHJcbiIscGF0aCk7CisgICAgICAgICAgICBTU0xfQ1RYX2xvYWRf dmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LE5VTEwscGF0aCk7CisgICAgICAgIH0KKyAgICAgICAg Y2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NlcnRzIixO VUxMLE5VTEwpOworICAgICAgICBpZiAoaXNkaXIocGF0aCkgJiYKKyAgICAgICAgICAgIFNTTF9D VFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgsTlVMTCxwYXRoKSA9PSAxKSAgeworICAg ICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGRpciIs cGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAg ICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIERpcmVjdG9yeTogJXNcclxuIixw YXRoKTsKKyAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgs TlVMTCxwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxl eGVkaXIsImNhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKHpjaGtpKHBhdGgp ID4gMCAmJiAKKyAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19j dHgscGF0aCxOVUxMKSA9PSAxKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5p dCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xf ZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZp Y2F0aW9uIEZpbGU6ICVzXHJcbiIscGF0aCk7CisgICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVy aWZ5X2xvY2F0aW9ucyhzc2xfY3R4LHBhdGgsTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgY2tt YWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NhX2NlcnRzLnBl bSIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKKyAgICAgICAg ICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgscGF0aCxOVUxMKSA9PSAx KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJp ZnkgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAg ICAgICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIEZpbGU6ICVzXHJc biIscGF0aCk7CisgICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xf Y3R4LHBhdGgsTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBB VEgsR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKKyAg ICAgICAgaWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKKyAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92 ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgscGF0aCxOVUxMKSA9PSAxKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmlsZSIscGF0aCwwKTsK KyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYo IiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIEZpbGU6ICVzXHJcbiIscGF0aCk7CisgICAgICAg ICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LHBhdGgsTlVMTCk7Cisg ICAgICAgIH0KKyAgICB9CisjZWxzZSAvKiBOVCAqLworICAgIHsKKyAgICAgICAgLyogVGhlIGRl ZmF1bHRzIGluIHRoZSBTU0wgY3J5cHRvIGxpYnJhcnkgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3Ig T1MvMiAqLworICAgICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsKKworICAgICAgICBja21ha21z ZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRzIixOVUxMLE5VTEwpOworICAgICAgICBpZiAo aXNkaXIocGF0aCkgJiYgCisgICAgICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9u cyh0bHNfY3R4LE5VTEwscGF0aCkgPT0gMSkgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNz bF90bl9pbml0IGNlcnRpZmljYXRlIHZlcmlmeSBkaXIiLHBhdGgsMCk7CisgICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRl IFZlcmlmaWNhdGlvbiBEaXJlY3Rvcnk6ICVzXHJcbiIscGF0aCk7CisgICAgICAgICAgICBTU0xf Q1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfY3R4LE5VTEwscGF0aCk7CisgICAgICAgIH0K KyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jZXJ0cy5wZW0iLE5V TEwsTlVMTCk7CisgICAgICAgIGlmICh6Y2hraShwYXRoKSA+IDAgJiYgCisgICAgICAgICAgICBT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfY3R4LHBhdGgsTlVMTCkgPT0gMSkgewor ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGZp bGUiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAg ICAgICAgcHJpbnRmKCIgIENlcnRpZmljYXRlIFZlcmlmaWNhdGlvbiBGaWxlOiAlc1xyXG4iLHBh dGgpOworICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2N0eCxw YXRoLE5VTEwpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBP UzIgKi8KKyAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhzc2xfY3R4KTsKKyAg ICBTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyh0bHNfY3R4KTsKKyNlbmRpZiAvKiBP UzIgKi8KKworICAgIGlmIChzc2xfdmVyaWZ5X2ZpbGUpIHsKKyAgICAgICAgaWYgKHpjaGtpKHNz bF92ZXJpZnlfZmlsZSkgPiAwICYmIAorICAgICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9s b2NhdGlvbnModGxzX2N0eCxzc2xfdmVyaWZ5X2ZpbGUsTlVMTCkgPT0gMSkgeworICAgICAgICAg ICAgZGVidWcoRjExMCwic3NsX3RuX2luaXQgY2VydGlmaWNhdGUgdmVyaWZ5IGZpbGUiLHNzbF92 ZXJpZnlfZmlsZSwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAg ICAgICAgICBwcmludGYoIiAgQ2VydGlmaWNhdGUgVmVyaWZpY2F0aW9uIEZpbGU6ICVzXHJcbiIs c3NsX3ZlcmlmeV9maWxlKTsKKyAgICAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRp b25zKHNzbF9jdHgsc3NsX3ZlcmlmeV9maWxlLE5VTEwpOworICAgICAgICB9CisgICAgfQorICAg IGlmIChzc2xfdmVyaWZ5X2RpciAmJiBpc2Rpcihzc2xfdmVyaWZ5X2RpcikpIHsKKyAgICAgICAg aWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19jdHgsTlVMTCxzc2xfdmVyaWZ5 X2RpcikgPT0gMSkgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNlcnRp ZmljYXRlIHZlcmlmeSBkaXIiLHNzbF92ZXJpZnlfZGlyLDApOworICAgICAgICAgICAgaWYgKHNz bF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiICBDZXJ0aWZpY2F0ZSBWZXJp ZmljYXRpb24gRGlyZWN0b3J5OiAlc1xyXG4iLHNzbF92ZXJpZnlfZGlyKTsKKyAgICAgICAgICAg IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9jdHgsTlVMTCxzc2xfdmVyaWZ5X2Rp cik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1vZGUgPT0gU1NMX1NFUlZFUikgeworICAg ICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc3NsX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgIHNz bF92ZXJpZnlfZmxhZz9zc2xfdmVyaWZ5X2ZsYWd8U1NMX1ZFUklGWV9DTElFTlRfT05DRTowLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3NlcnZlcl92ZXJpZnlfY2FsbGJhY2spOwor ICAgICAgICBTU0xfQ1RYX3NldF92ZXJpZnkodGxzX2N0eCwKKyAgICAgICAgICAgICAgICAgICAg IHNzbF92ZXJpZnlfZmxhZz9zc2xfdmVyaWZ5X2ZsYWd8U1NMX1ZFUklGWV9DTElFTlRfT05DRTow LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3NlcnZlcl92ZXJpZnlfY2FsbGJhY2sp OworICAgIH0gZWxzZSB7CisgICAgICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzc2xfY3R4LHNzbF92 ZXJpZnlfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jbGllbnRfdmVyaWZ5 X2NhbGxiYWNrKTsKKyAgICAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHRsc19jdHgsc3NsX3Zlcmlm eV9mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NsaWVudF92ZXJpZnlfY2Fs bGJhY2spOworICAgIH0KKworICAgIC8qIEZyZWUgdGhlIGV4aXN0aW5nIENSTCBTdG9yZSAqLwor ICAgIGlmIChjcmxfc3RvcmUpIHsKKyAgICAgICAgWDUwOV9TVE9SRV9mcmVlKGNybF9zdG9yZSk7 CisgICAgICAgIGNybF9zdG9yZSA9IE5VTEw7CisgICAgfQorCisgICAgLyogc2V0IHVwIHRoZSBu ZXcgQ1JMIFN0b3JlICovCisgICAgY3JsX3N0b3JlID0gWDUwOV9TVE9SRV9uZXcoKTsKKyAgICBp ZiAoY3JsX3N0b3JlKSB7CisjaWZkZWYgT1MyCisgICAgICAgIGNoYXIgcGF0aFtDS01BWFBBVEhd OworCisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwiY3JscyIsTlVMTCxO VUxMKTsKKyAgICAgICAgaWYgKGlzZGlyKHBhdGgpICYmCisgICAgICAgICAgICBYNTA5X1NUT1JF X2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDEpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNybCBkaXIiLHBhdGgsMCk7CisgICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBEaXJlY3Rv cnk6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAgICBja21ha21z ZyhwYXRoLENLTUFYUEFUSCxHZXRBcHBEYXRhKDEpLCJrZXJtaXQgOTUvY3JscyIsTlVMTCxOVUxM KTsKKyAgICAgICAgaWYgKGlzZGlyKHBhdGgpICYmIAorICAgICAgICAgICAgWDUwOV9TVE9SRV9s b2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAxKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwgZGlyIixwYXRoLDApOworICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiICBDUkwgRGlyZWN0b3J5 OiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQ QVRILEdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jcmxzIixOVUxMLE5VTEwpOworICAgICAgICBp ZiAoaXNkaXIocGF0aCkgJiYgCisgICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25z KGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDEpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNz bF90bl9pbml0IGNybCBkaXIiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2Zs YWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBEaXJlY3Rvcnk6ICVzXHJcbiIscGF0 aCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAKKyAgICAgICAgY2ttYWtt c2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jcmxzLnBlbSIsTlVMTCxOVUxMKTsKKyAgICAg ICAgaWYgKHpjaGtpKHBhdGgpID4gMCAmJiAKKyAgICAgICAgICAgIFg1MDlfU1RPUkVfbG9hZF9s b2NhdGlvbnMoY3JsX3N0b3JlLHBhdGgsTlVMTCkgPT0gMSkgeworICAgICAgICAgICAgZGVidWco RjExMCwic3NsX3RuX2luaXQgY3JsIGZpbGUiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3Ns X2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBGaWxlOiAlc1xyXG4i LHBhdGgpOworICAgICAgICB9CisjaWZkZWYgTlQKKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01B WFBBVEgsR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwpOwor ICAgICAgICBpZiAoemNoa2kocGF0aCkgPiAwICYmIAorICAgICAgICAgICAgWDUwOV9TVE9SRV9s b2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxOVUxMKSA9PSAxKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlm IChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIEZpbGU6ICVz XHJcbiIscGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgs R2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwpOworICAgICAg ICBpZiAoemNoa2kocGF0aCkgPiAwICYmIAorICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xv Y2F0aW9ucyhjcmxfc3RvcmUscGF0aCxOVUxMKSA9PSAxKSB7CisgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJzc2xfdG5faW5pdCBjcmwgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xf ZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgQ1JMIEZpbGU6ICVzXHJcbiIs cGF0aCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisg ICAgICAgIGlmIChzc2xfY3JsX2ZpbGUgfHwgc3NsX2NybF9kaXIpIHsKKyAgICAgICAgICAgIGlm IChzc2xfY3JsX2ZpbGUgJiYgemNoa2koc3NsX2NybF9maWxlKSA+IDAgJiYgCisgICAgICAgICAg ICAgICAgWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsc3NsX2NybF9maWxlLE5V TEwpID09IDEpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCBjcmwg ZmlsZSIsc3NsX2NybF9maWxlLDApOworICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxh ZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgIENSTCBGaWxlOiAlc1xyXG4iLHNzbF9j cmxfZmlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3NsX2NybF9kaXIgJiYg aXNkaXIoc3NsX2NybF9kaXIpICYmCisgICAgICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xv Y2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxzc2xfY3JsX2RpcikgPT0gMSkgeworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IGNybCBkaXIiLHNzbF9jcmxfZGlyLDApOworICAg ICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIgIENSTCBEaXJlY3Rvcnk6ICVzXHJcbiIsc3NsX2NybF9kaXIpOworICAgICAgICAgICAg fQorICAgICAgICB9IAorI2lmbmRlZiBPUzIKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBY NTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzKGNybF9zdG9yZSk7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICB9CisKKyNpZm5kZWYgQ09NTUVOVAorICAgIHNzbF9jb254ID0gc3Ns X2NvbjsKKyAgICBzc2xfY29uPShTU0wgKilTU0xfbmV3KHNzbF9jdHgpOworICAgIGlmICggIXNz bF9jb24gKSB7CisgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMX25ldyhzc2xf Y29uKSBmYWlsZWQiLDApOworICAgICAgICBsYXN0X3NzbF9tb2RlID0gLTE7CisgICAgICAgIHNz bF9jb24gPSBzc2xfY29ueDsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoc3Ns X2NvbngpIHsKKyAgICAgICAgaWYgKCBtb2RlID09IFNTTF9DTElFTlQgKSB7CisgICAgICAgICAg ICBTU0xfc2V0X3Nlc3Npb24oc3NsX2NvbiwgU1NMX2dldF9zZXNzaW9uKHNzbF9jb254KSk7Cisg ICAgICAgIH0KKyNpZmRlZiBTU0xfS1JCNQorCQlpZiAoc3NsX2NvbngtPmtzc2xfY3R4KSB7CisJ CQlrc3NsX2N0eF9mcmVlKHNzbF9jb254LT5rc3NsX2N0eCk7CisJCQlzc2xfY29ueC0+a3NzbF9j dHggPSBOVUxMOworCQl9CisjZW5kaWYgLyogU1NMX0tSQjUgKi8KKyAgICAgICAgU1NMX2ZyZWUo c3NsX2NvbngpOworICAgICAgICBzc2xfY29ueCA9IE5VTEw7CisgICAgfQorICAgIHRsc19jb254 ID0gdGxzX2NvbjsKKyAgICB0bHNfY29uPShTU0wgKilTU0xfbmV3KHRsc19jdHgpOworICAgIGlm ICggIXRsc19jb24gKSB7CisgICAgICAgIGRlYnVnKEYxMTAsInNzbF90bl9pbml0IiwiU1NMX25l dyh0bHNfY29uKSBmYWlsZWQiLDApOworICAgICAgICBsYXN0X3NzbF9tb2RlID0gLTE7CisgICAg ICAgIHRsc19jb24gPSB0bHNfY29ueDsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBp ZiAodGxzX2NvbngpIHsKKyAgICAgICAgaWYgKCBtb2RlID09IFNTTF9DTElFTlQgKQorICAgICAg ICAgICAgU1NMX3NldF9zZXNzaW9uKHRsc19jb24sIFNTTF9nZXRfc2Vzc2lvbih0bHNfY29ueCkp OworI2lmZGVmIFNTTF9LUkI1CisJCWlmICh0bHNfY29ueC0+a3NzbF9jdHgpIHsKKwkJCWtzc2xf Y3R4X2ZyZWUodGxzX2NvbngtPmtzc2xfY3R4KTsKKwkJCXRsc19jb254LT5rc3NsX2N0eCA9IE5V TEw7CisJCX0KKyNlbmRpZiAvKiBTU0xfS1JCNSAqLworICAgICAgICBTU0xfZnJlZSh0bHNfY29u eCk7CisgICAgICAgIHRsc19jb254ID0gTlVMTDsKKyAgICB9CisjZWxzZSAvKiBDT01NRU5UICov CisgICAgLyogSSBkb24ndCBrbm93IHdoeSB0aGlzIGRvZXMgbm90IHdvcmsgdG8gcmV1c2UgdGhl IGNvbm5lY3Rpb24uICovCisgICAgaWYgKCBzc2xfY29uICkgeworICAgICAgICBTU0xfY2xlYXIo c3NsX2Nvbik7CisgICAgICAgIFNTTF9zZXRfc2Vzc2lvbihzc2xfY29uLE5VTEwpOworICAgICAg ICBTU0xfc2V0X2FjY2VwdF9zdGF0ZShzc2xfY29uKSA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg c3NsX2Nvbj0oU1NMICopU1NMX25ldyhzc2xfY3R4KTsKKyAgICAgICAgaWYgKCFzc2xfY29uKSB7 CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTF9uZXcoc3NsX2N0eCkg ZmFpbGVkIiwwKTsKKyAgICAgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKKyAgICAgICAgICAg IHNzbF9jb24gPSBzc2xfY29ueDsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQor ICAgIH0KKworICAgIGlmICggdGxzX2NvbiApIHsKKyAgICAgICAgU1NMX2NsZWFyKHRsc19jb24p OworICAgICAgICBTU0xfc2V0X3Nlc3Npb24odGxzX2NvbixOVUxMKTsKKyAgICAgICAgU1NMX3Nl dF9hY2NlcHRfc3RhdGUodGxzX2NvbikgOworICAgIH0gZWxzZSB7CisgICAgICAgIHRsc19jb249 KFNTTCAqKVNTTF9uZXcodGxzX2N0eCk7CisgICAgICAgIGlmICggIXRsc19jb24gKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfdG5faW5pdCIsIlNTTF9uZXcodGxzX2N0eCkgZmFpbGVk IiwwKTsKKyAgICAgICAgICAgIGxhc3Rfc3NsX21vZGUgPSAtMTsKKyAgICAgICAgICAgIHRsc19j b24gPSB0bHNfY29ueDsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgIH0K KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBTU0xfS1JCNQorI2lmbmRlZiBLUkI1X1NF UlZJQ0VfTkFNRQorI2RlZmluZSBLUkI1X1NFUlZJQ0VfTkFNRSAgICAiaG9zdCIKKyNlbmRpZgor CisgICAgaWYgKHNzbF9jb24tPmtzc2xfY3R4ID09IE5VTEwpCisgICAgICAgIHNzbF9jb24tPmtz c2xfY3R4ID0ga3NzbF9jdHhfbmV3KCk7CisgICAgaWYgKHRsc19jb24tPmtzc2xfY3R4ID09IE5V TEwpCisgICAgdGxzX2Nvbi0+a3NzbF9jdHggPSBrc3NsX2N0eF9uZXcoKTsKKyAgICBpZiAobW9k ZSA9PSBTU0xfU0VSVkVSKSB7CisgICAgICAgIGlmIChzc2xfY29uLT5rc3NsX2N0eCAhPSBOVUxM KQorICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHNzbF9jb24tPmtzc2xfY3R4LCBLU1NM X0tFWVRBQiwgazVfa2V5dGFiKTsKKyAgICAgICAgaWYgKHRsc19jb24tPmtzc2xfY3R4ICE9IE5V TEwpCisgICAgICAgICAgICBrc3NsX2N0eF9zZXRzdHJpbmcodGxzX2Nvbi0+a3NzbF9jdHgsIEtT U0xfS0VZVEFCLCBrNV9rZXl0YWIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzc2xfY29u LT5rc3NsX2N0eCAhPSBOVUxMKQorICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHNzbF9j b24tPmtzc2xfY3R4LCBLU1NMX1NFUlZFUiwgc3pIb3N0TmFtZSk7CisgICAgICAgIGlmICh0bHNf Y29uLT5rc3NsX2N0eCAhPSBOVUxMKQorICAgICAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHRs c19jb24tPmtzc2xfY3R4LCBLU1NMX1NFUlZFUiwgc3pIb3N0TmFtZSk7CisgICAgfQorICAgIGtz c2xfY3R4X3NldHN0cmluZyhzc2xfY29uLT5rc3NsX2N0eCwgS1NTTF9TRVJWSUNFLAorICAgICAg ICAgICAgICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0Vf TkFNRSk7CisgICAga3NzbF9jdHhfc2V0c3RyaW5nKHRsc19jb24tPmtzc2xfY3R4LCBLU1NMX1NF UlZJQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6 IEtSQjVfU0VSVklDRV9OQU1FKTsKKyNlbmRpZiAvKiBTU0xfS1JCNSAqLworCisgICAgaWYgKHNz bF9jaXBoZXJfbGlzdCkgeworICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHNzbF9jb24sc3Ns X2NpcGhlcl9saXN0KTsKKyAgICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdCh0bHNfY29uLHNzbF9j aXBoZXJfbGlzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciAqIHA7CisgICAgICAgIGlm IChwID0gZ2V0ZW52KCJTU0xfQ0lQSEVSIikpIHsKKyAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVy X2xpc3Qoc3NsX2NvbixwKTsKKyAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3QodGxzX2Nv bixwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3Qo c3NsX2NvbixERUZBVUxUX0NJUEhFUl9MSVNUKTsKKyAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVy X2xpc3QodGxzX2NvbixERUZBVUxUX0NJUEhFUl9MSVNUKTsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIHNzbF92ZXJpZnlfZGVwdGggPSAtMTsKKworICAgIGlmICggc3NsX2RlYnVnX2ZsYWcgKQor ICAgICAgICBwcmludGYoIlNTTC9UTFMgaW5pdCBkb25lIVxyXG4iKTsKKworICAgIHNzbF9pbml0 aWFsaXplZCA9IDE7CisgICAgbGFzdF9zc2xfbW9kZSA9IG1vZGU7CisgICAgZGVidWcoRjExMCwi c3NsX3RuX2luaXQiLCJkb25lIiwwKTsKKyAgICByZXR1cm4oMSk7Cit9CisKKyNpZm5kZWYgTk9I VFRQCitpbnQKKyNpZmRlZiBDS19BTlNJQworc3NsX2h0dHBfaW5pdChjaGFyICogaG9zdG5hbWUp CisjZWxzZQorc3NsX2h0dHBfaW5pdChob3N0bmFtZSkgY2hhciAqIGhvc3RuYW1lOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7CisjaWZkZWYgS1JCNQorICAgIGV4dGVybiBjaGFyICogazVfa2V5 dGFiOworICAgIGV4dGVybiBjaGFyICoga3JiNV9kX3NydjsKKyNlbmRpZiAvKiBLUkI1ICovCisg ICAgU1NMICogdGxzX2Nvbng9TlVMTDsKKworICAgIHNzbF9odHRwX2luaXRpYWxpemVkID0gMDsK KworICAgIGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigw KTsKKyAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0Iixob3N0bmFtZSwwKTsKKworICAgIGlm IChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgcHJpbnRmKCJTU0xfREVCVUdfRkxBRyBvblxyXG4i KTsKKworICAgIGlmICghdGxzX2h0dHBfY3R4ICkgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAg LyogdG9vIG1hbnkgd2ViIHNlcnZlcnMgc3RpbGwgZG8gbm90IHN1cHBvcnQgVExTdjEgKi8KKyAg ICAgICAgdGxzX2h0dHBfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoVExTdjFfY2xpZW50X21l dGhvZCgpKTsKKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAgICAgICAgdGxzX2h0dHBfY3R4PShTU0xf Q1RYICopU1NMX0NUWF9uZXcoU1NMdjIzX2NsaWVudF9tZXRob2QoKSk7CisgICAgICAgIC8qIFRo aXMgY2FuIGZhaWwgYmVjYXVzZSB3ZSBkbyBub3QgaGF2ZSBSU0EgYXZhaWxhYmxlICovCisgICAg ICAgIGlmICggIXRsc19odHRwX2N0eCApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9o dHRwX2luaXQiLCJTU0x2MjNfY2xpZW50X21ldGhvZCBmYWlsZWQiLDApOworICAgICAgICAgICAg dGxzX2h0dHBfY3R4PShTU0xfQ1RYICopU1NMX0NUWF9uZXcoU1NMdjNfY2xpZW50X21ldGhvZCgp KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKCAhdGxzX2h0 dHBfY3R4ICkgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCIsIlRMU3Yx X2NsaWVudF9tZXRob2QgZmFpbGVkIiwwKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAg ICAgfQorI2lmZGVmIFVTRV9DRVJUX0NCCisgICAgICAgIFNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0 X2NiKHRsc19odHRwX2N0eCxzc2xfY2xpZW50X2NlcnRfY2FsbGJhY2spOworI2VuZGlmIC8qIFVT RV9DRVJUX0NCICovCisgICAgfQorCisgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Io dGxzX2h0dHBfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwZW1fcGFz c3dvcmRfY2IgKilzc2xfcGFzc3dkX2NhbGxiYWNrKTsKKworICAgIC8qIGZvciBTU0wgc3dpdGNo IG9uIGFsbCB0aGUgaW50ZXJvcGVyYWJpbGl0eSBhbmQgYnVnCisgICAgICogd29ya2Fyb3VuZHMg c28gdGhhdCB3ZSB3aWxsIGNvbW11bmljYXRlIHdpdGggcGVvcGxlCisgICAgICogdGhhdCBjYW5u b3QgcmVhZCBwb29ybHkgd3JpdHRlbiBzcGVjcyA6LSkKKyAgICAgKiBmb3IgVExTIGJlIHN1cmUg dG8gcHJldmVudCB1c2Ugb2YgU1NMdjIKKyAgICAgKi8KKyAgICBTU0xfQ1RYX3NldF9vcHRpb25z KHRsc19odHRwX2N0eCwKKyAgICAgICAgICAgIFNTTF9PUF9OT19TU0x2MnxTU0xfT1BfU0lOR0xF X0RIX1VTRXxTU0xfT1BfRVBIRU1FUkFMX1JTQSk7CisKKyAgICBTU0xfQ1RYX3NldF9pbmZvX2Nh bGxiYWNrKHRsc19odHRwX2N0eCxzc2xfY2xpZW50X2luZm9fY2FsbGJhY2spOworCisjaWZuZGVm IENPTU1FTlQKKyAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2h0dHBfY3R4 LFNTTF9TRVNTX0NBQ0hFX0NMSUVOVCk7CisgICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250 ZXh0KHRsc19odHRwX2N0eCwoQ0hBUiAqKSIzIiwxKTsKKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAg ICBTU0xfQ1RYX3NldF9zZXNzaW9uX2NhY2hlX21vZGUodGxzX2h0dHBfY3R4LFNTTF9TRVNTX0NB Q0hFX09GRik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgLyogbWFrZSBzdXJlIHdlIHdp bGwgZmluZCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHN0YW5kYXJkCisgICAgICogbG9jYXRpb24gLi4u IG90aGVyd2lzZSB3ZSBkb24ndCBsb29rIGFueXdoZXJlIGZvcgorICAgICAqIHRoZXNlIHRoaW5n cyB3aGljaCBpcyBnb2luZyB0byBtYWtlIGNsaWVudCBjZXJ0aWZpY2F0ZQorICAgICAqIGV4Y2hh bmdlIHJhdGhlciB1c2VsZXNzIDotKQorICAgICAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgTlQK KyAgICB7CisgICAgICAgIC8qIFRoZSBkZWZhdWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5 IGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIE9TLzIgKi8KKyAgICAgICAgY2hhciBwYXRoW0NLTUFY UEFUSF07CisKKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjZXJ0cyIs TlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRs c19odHRwX2N0eCxOVUxMLHBhdGgpID09IDApICB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJz c2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAgICBp ZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxv YWQgdmVyaWZ5LWRpcjogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNrbWFr bXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jZXJ0cyIsTlVMTCxO VUxMKTsKKyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRw X2N0eCxOVUxMLHBhdGgpID09IDApICB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0 cF9pbml0IHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3Ns X2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVy aWZ5LWRpcjogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNrbWFrbXNnKHBh dGgsQ0tNQVhQQVRILEdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jZXJ0cyIsTlVMTCxOVUxMKTsK KyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxO VUxMLHBhdGgpID09IDApICB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0 IHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVn X2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWRp cjogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tN QVhQQVRILGV4ZWRpciwiY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoU1NM X0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkg eworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBw YXRoIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAg ICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBhdGgp OworICAgICAgICB9CisKKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0 YSgxKSwia2VybWl0IDk1L2NhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKFNT TF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHRsc19odHRwX2N0eCxwYXRoLE5VTEwpID09IDAp IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQg cGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZmlsZTogJXNcclxuIixwYXRo KTsKKyAgICAgICAgfQorCisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILEdldEFwcERh dGEoMCksImtlcm1pdCA5NS9jYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChT U0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgscGF0aCxOVUxMKSA9PSAw KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2Fk IHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0 aCk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZSAvKiBOVCAqLworICAgIHsKKyAgICAgICAgLyog VGhlIGRlZmF1bHRzIGluIHRoZSBTU0wgY3J5cHRvIGxpYnJhcnkgYXJlIG5vdCBhcHByb3ByaWF0 ZSBmb3IgT1MvMiAqLworICAgICAgICBjaGFyIHBhdGhbQ0tNQVhQQVRIXTsKKworICAgICAgICBj a21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRzIixOVUxMLE5VTEwpOworICAgICAg ICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LE5VTEwscGF0 aCkgPT0gMCkgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxl IHRvIGxvYWQgcGF0aCIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykK KyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCB2ZXJpZnktZGlyOiAlc1xy XG4iLHBhdGgpOworICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4 ZWRpciwiY2FfY2VydHMucGVtIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoU1NMX0NUWF9sb2Fk X3ZlcmlmeV9sb2NhdGlvbnModGxzX2h0dHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkgeworICAgICAg ICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRo LDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHBy aW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBhdGgpOworICAgICAg ICB9CisgICAgfQorI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBPUzIgKi8KKyAgICBTU0xfQ1RY X3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyh0bHNfaHR0cF9jdHgpOworI2VuZGlmIC8qIE9TMiAq LworCisgICAgaWYgKHNzbF92ZXJpZnlfZmlsZSAmJgorICAgICAgICBTU0xfQ1RYX2xvYWRfdmVy aWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgsc3NsX3ZlcmlmeV9maWxlLE5VTEwpID09IDApICB7 CisgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgc3NsX3Zl cmlmeV9maWxlIixzc2xfdmVyaWZ5X2ZpbGUsMCk7CisgICAgICAgIGlmIChzc2xfZGVidWdfZmxh ZykKKyAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xy XG4iLHNzbF92ZXJpZnlfZmlsZSk7CisgICAgfQorICAgIGlmIChzc2xfdmVyaWZ5X2RpciAmJgor ICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyh0bHNfaHR0cF9jdHgsTlVMTCxz c2xfdmVyaWZ5X2RpcikgPT0gMCkgIHsKKyAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5p dCB1bmFibGUgdG8gbG9hZCBzc2xfdmVyaWZ5X2RpciIsc3NsX3ZlcmlmeV9kaXIsMCk7CisgICAg ICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBs b2FkIHZlcmlmeS1kaXI6ICVzXHJcbiIsc3NsX3ZlcmlmeV9kaXIpOworICAgIH0KKworICAgIFNT TF9DVFhfc2V0X3ZlcmlmeSh0bHNfaHR0cF9jdHgsc3NsX3ZlcmlmeV9mbGFnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3NsX2NsaWVudF92ZXJpZnlfY2FsbGJhY2spOworCisgICAgLyog RnJlZSB0aGUgZXhpc3RpbmcgQ1JMIFN0b3JlICovCisgICAgaWYgKGNybF9zdG9yZSkgeworICAg ICAgICBYNTA5X1NUT1JFX2ZyZWUoY3JsX3N0b3JlKTsKKyAgICAgICAgY3JsX3N0b3JlID0gTlVM TDsKKyAgICB9CisKKyAgICAvKiBzZXQgdXAgdGhlIG5ldyBDUkwgU3RvcmUgKi8KKyAgICBjcmxf c3RvcmUgPSBYNTA5X1NUT1JFX25ldygpOworICAgIGlmIChjcmxfc3RvcmUpIHsKKyNpZmRlZiBP UzIKKyAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07CisKKyAgICAgICAgY2ttYWttc2cocGF0 aCxDS01BWFBBVEgsZXhlZGlyLCJjcmxzIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoWDUwOV9T VE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAwKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIGRpciIscGF0aCww KTsKKyAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmlu dGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZGlyOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9Cisj aWZkZWYgTlQKKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgxKSwi a2VybWl0IDk1L2NybHMiLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRf bG9jYXRpb25zKGNybF9zdG9yZSxOVUxMLHBhdGgpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVn KEYxMTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOworICAgICAg ICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJs ZSB0byBsb2FkIGNybC1kaXI6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY2tt YWttc2cocGF0aCxDS01BWFBBVEgsR2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NybHMiLE5VTEws TlVMTCk7CisgICAgICAgIGlmIChYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxO VUxMLHBhdGgpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRwX2luaXQg dW5hYmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19m bGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1kaXI6ICVz XHJcbiIscGF0aCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAKKyAgICAg ICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jcmxzLnBlbSIsTlVMTCxOVUxM KTsKKyAgICAgICAgaWYgKFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHBhdGgs TlVMTCkgPT0gMCkgeworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCB1bmFi bGUgdG8gbG9hZCBmaWxlIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFn KQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xy XG4iLHBhdGgpOworICAgICAgICB9CisjaWZkZWYgTlQKKyAgICAgICAgY2ttYWttc2cocGF0aCxD S01BWFBBVEgsR2V0QXBwRGF0YSgxKSwia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwp OworICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxO VUxMKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJs ZSB0byBsb2FkIGZpbGUiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcp CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVzXHJc biIscGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsR2V0 QXBwRGF0YSgwKSwia2VybWl0IDk1L2NhX2NybHMucGVtIixOVUxMLE5VTEwpOworICAgICAgICBp ZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUscGF0aCxOVUxMKSA9PSAwKSB7 CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9pbml0IHVuYWJsZSB0byBsb2FkIGZp bGUiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVzXHJcbiIscGF0aCk7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAgICAgIGlm IChzc2xfY3JsX2ZpbGUgfHwgc3NsX2NybF9kaXIpIHsKKyAgICAgICAgICAgIGlmIChzc2xfY3Js X2ZpbGUgJiYKKyAgICAgICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9z dG9yZSxzc2xfY3JsX2ZpbGUsTlVMTCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsInNzbF9odHRwX2luaXQgdW5hYmxlIHRvIGxvYWQgc3NsX2NybF9maWxlIixzc2xfY3JsX2Zp bGUsMCk7CisgICAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBjcmwtZmlsZTogJXNcclxuIixzc2xfY3Js X2ZpbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNzbF9jcmxfZGlyICYmCisg ICAgICAgICAgICAgICAgWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3RvcmUsTlVMTCxz c2xfY3JsX2RpcikgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9odHRw X2luaXQgdW5hYmxlIHRvIGxvYWQgc3NsX2NybF9kaXIiLHNzbF9jcmxfZGlyLDApOworICAgICAg ICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/VW5hYmxlIHRvIGxvYWQgY3JsLWRpcjogJXNcclxuIixzc2xfY3JsX2Rpcik7CisgICAgICAg ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBYNTA5X1NUT1JFX3NldF9kZWZh dWx0X3BhdGhzKGNybF9zdG9yZSk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZm5kZWYgQ09NTUVO VAorICAgIHRsc19jb254ID0gdGxzX2h0dHBfY29uOworICAgIHRsc19odHRwX2Nvbj0oU1NMICop U1NMX25ldyh0bHNfaHR0cF9jdHgpOworICAgIGlmICggIXRsc19odHRwX2NvbiApIHsKKyAgICAg ICAgZGVidWcoRjExMCwic3NsX2h0dHBfaW5pdCIsIlNTTF9uZXcodGxzX2h0dHBfY29uKSBmYWls ZWQiLDApOworICAgICAgICB0bHNfaHR0cF9jb24gPSB0bHNfY29ueDsKKyAgICAgICAgcmV0dXJu KDApOworICAgIH0KKyAgICBpZiAodGxzX2NvbngpIHsKKyAgICAgICAgU1NMX3NldF9zZXNzaW9u KHRsc19odHRwX2NvbiwgU1NMX2dldF9zZXNzaW9uKHRsc19jb254KSk7CisjaWZkZWYgU1NMX0tS QjUKKwkJaWYgKHRsc19jb254LT5rc3NsX2N0eCkgeworCQkJa3NzbF9jdHhfZnJlZSh0bHNfY29u eC0+a3NzbF9jdHgpOworCQkJdGxzX2NvbngtPmtzc2xfY3R4ID0gTlVMTDsKKwkJfQorI2VuZGlm IC8qIFNTTF9LUkI1ICovCisgICAgICAgIFNTTF9mcmVlKHRsc19jb254KTsKKyAgICAgICAgdGxz X2NvbnggPSBOVUxMOworICAgIH0KKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAgICAvKiBJIGRvbid0 IGtub3cgd2h5IHRoaXMgZG9lcyBub3Qgd29yayB0byByZXVzZSB0aGUgY29ubmVjdGlvbi4gKi8K KyAgICBpZiAoIHRsc19odHRwX2NvbiApIHsKKyAgICAgICAgU1NMX2NsZWFyKHRsc19odHRwX2Nv bik7CisgICAgICAgIFNTTF9zZXRfc2Vzc2lvbih0bHNfaHR0cF9jb24sTlVMTCk7CisgICAgICAg IFNTTF9zZXRfYWNjZXB0X3N0YXRlKHRsc19odHRwX2NvbikgOworICAgIH0gZWxzZSB7CisgICAg ICAgIHRsc19odHRwX2Nvbj0oU1NMICopU1NMX25ldyh0bHNfaHR0cF9jdHgpOworICAgICAgICBp ZiAoICF0bHNfaHR0cF9jb24gKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaHR0cF9p bml0IiwiU1NMX25ldyh0bHNfaHR0cF9jdHgpIGZhaWxlZCIsMCk7CisgICAgICAgICAgICB0bHNf aHR0cF9jb24gPSB0bHNfY29ueDsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQor ICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBTU0xfS1JCNQorI2lmbmRlZiBL UkI1X1NFUlZJQ0VfTkFNRQorI2RlZmluZSBLUkI1X1NFUlZJQ0VfTkFNRSAgICAiaG9zdCIKKyNl bmRpZgorCisgICAgaWYgKHRsc19odHRwX2Nvbi0+a3NzbF9jdHggPT0gTlVMTCkKKyAgICB0bHNf aHR0cF9jb24tPmtzc2xfY3R4ID0ga3NzbF9jdHhfbmV3KCk7CisgICAgaWYgKHRsc19odHRwX2Nv bi0+a3NzbF9jdHggIT0gTlVMTCkKKyAgICAgICAga3NzbF9jdHhfc2V0c3RyaW5nKHRsc19odHRw X2Nvbi0+a3NzbF9jdHgsIEtTU0xfU0VSVkVSLCBob3N0bmFtZSk7CisKKyAgICBrc3NsX2N0eF9z ZXRzdHJpbmcodGxzX2h0dHBfY29uLT5rc3NsX2N0eCwgS1NTTF9TRVJWSUNFLAorICAgICAgICAg ICAgICAgICAgICAgICAga3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0VfTkFN RSk7CisjZW5kaWYgLyogU1NMX0tSQjUgKi8KKworICAgIGlmIChzc2xfY2lwaGVyX2xpc3QpCisg ICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3QodGxzX2h0dHBfY29uLHNzbF9jaXBoZXJfbGlzdCk7 CisgICAgZWxzZSB7CisgICAgICAgIGNoYXIgKiBwOworICAgICAgICBpZiAocCA9IGdldGVudigi U1NMX0NJUEhFUiIpKSB7CisgICAgICAgICAgICBTU0xfc2V0X2NpcGhlcl9saXN0KHRsc19odHRw X2NvbixwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xp c3QodGxzX2h0dHBfY29uLERFRkFVTFRfQ0lQSEVSX0xJU1QpOworICAgICAgICB9CisgICAgfQor CisgICAgc3NsX3ZlcmlmeV9kZXB0aCA9IC0xOworCisgICAgaWYgKCBzc2xfZGVidWdfZmxhZyAp CisgICAgICAgIHByaW50ZigiU1NML1RMUyBpbml0IGRvbmUhXHJcbiIpOworCisgICAgc3NsX2h0 dHBfaW5pdGlhbGl6ZWQgPSAxOworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBOT0hUVFAg Ki8KKworY2hhciAqCitzc2xfZ2V0X2ROU05hbWUoc3NsKSBTU0wgKiBzc2w7Cit7CisgICAgc3Rh dGljIGNoYXIgKmRucyA9IE5VTEw7CisgICAgWDUwOSAqc2VydmVyX2NlcnQgPSBOVUxMOworICAg IGludCBpOworICAgIFg1MDlfRVhURU5TSU9OICpleHQgPSBOVUxMOworICAgIFNUQUNLX09GKEdF TkVSQUxfTkFNRSkgKmlhbHQgPSBOVUxMOworICAgIEdFTkVSQUxfTkFNRSAqZ2VuID0gTlVMTDsK KworICAgIGlmICggZG5zICkgeworICAgICAgICBmcmVlKGRucyk7CisgICAgICAgIGRucyA9IE5V TEw7CisgICAgfQorCisgICAgaWYgKHNlcnZlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmlj YXRlKHNzbCkpIHsKKyAgICAgICAgaWYgKChpID0gWDUwOV9nZXRfZXh0X2J5X05JRChzZXJ2ZXJf Y2VydCwgTklEX3N1YmplY3RfYWx0X25hbWUsIC0xKSk8MCkKKyAgICAgICAgICAgIHJldHVybiBO VUxMOworICAgICAgICBpZiAoIShleHQgPSBYNTA5X2dldF9leHQoc2VydmVyX2NlcnQsIGkpKSkK KyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBYNTA5VjNfYWRkX3N0YW5kYXJkX2V4 dGVuc2lvbnMoKTsKKyAgICAgICAgaWYgKCEoaWFsdCA9IFg1MDlWM19FWFRfZDJpKGV4dCkpKQor ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBza19HRU5F UkFMX05BTUVfbnVtKGlhbHQpOyBpKyspIHsKKyAgICAgICAgICAgIGdlbiA9IHNrX0dFTkVSQUxf TkFNRV92YWx1ZShpYWx0LCBpKTsKKyAgICAgICAgICAgIGlmIChnZW4tPnR5cGUgPT0gR0VOX0RO UykgeworICAgICAgICAgICAgICAgIGlmICghZ2VuLT5kLmlhNSB8fCAhZ2VuLT5kLmlhNS0+bGVu Z3RoKQorCQkgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oKGNoYXIgKilnZW4t PmQuaWE1LT5kYXRhKSAhPSBnZW4tPmQuaWE1LT5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAg ICAgLyogSWdub3JpbmcgSUE1U3RyaW5nIGNvbnRhaW5pbmcgbnVsbCBjaGFyYWN0ZXIgKi8KKyAg ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGRucyA9IG1hbGxvYyhnZW4tPmQuaWE1LT5sZW5ndGggKyAxKTsKKyAgICAgICAgICAg ICAgICBpZiAoZG5zKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShkbnMsIGdlbi0+ZC5p YTUtPmRhdGEsIGdlbi0+ZC5pYTUtPmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGRuc1tn ZW4tPmQuaWE1LT5sZW5ndGhdID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgWDUwOVYzX0VYVF9j bGVhbnVwKCk7CisgICAgfQorY2xlYW51cDoKKyAgICBpZiAoaWFsdCkgICAgICAgICAgIHNrX0dF TkVSQUxfTkFNRV9mcmVlKGlhbHQpOworICAgIGlmIChzZXJ2ZXJfY2VydCkgICAgWDUwOV9mcmVl KHNlcnZlcl9jZXJ0KTsKKyAgICByZXR1cm4gZG5zOworfQorCitjaGFyICoKK3NzbF9nZXRfY29t bW9uTmFtZShzc2wpIFNTTCAqIHNzbDsgeworICAgIHN0YXRpYyBjaGFyIG5hbWVbMjU2XTsKKyAg ICBpbnQgbmFtZV90ZXh0X2xlbjsKKyAgICBpbnQgZXJyOworICAgIFg1MDkgKnNlcnZlcl9jZXJ0 OworCisgICAgbmFtZV90ZXh0X2xlbiA9IDA7CisgICAgaWYgKHNlcnZlcl9jZXJ0ID0gU1NMX2dl dF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpIHsKKyAgICAgICAgbmFtZV90ZXh0X2xlbiA9CisJICAg IFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHNlcnZlcl9j ZXJ0KSwKKwkJCQkgICAgICBOSURfY29tbW9uTmFtZSwgbmFtZSwgc2l6ZW9mKG5hbWUpKTsKKyAg ICAgICAgWDUwOV9mcmVlKHNlcnZlcl9jZXJ0KTsKKyAgICB9CisgICAgaWYgKG5hbWVfdGV4dF9s ZW4gPD0gMCkgeworCS8qIENvbW1vbiBOYW1lIHdhcyBlbXB0eSBvciBub3QgcmV0cmlldmVkICov CisgICAgICAgIGVyciA9IDA7CisgICAgfSBlbHNlIGlmIChzdHJsZW4obmFtZSkgIT0gbmFtZV90 ZXh0X2xlbikgeworICAgICAgICAvKiBJZ25vcmluZyBDb21tb24gTmFtZSBjb250YWluaW5nIG51 bGwgY2hhcmFjdGVyICovCisJZXJyID0gMDsKKyAgICB9IGVsc2UgeworCWVyciA9IDE7CisgICAg fQorICAgIGlmIChlcnIgPiAwKQorICAgICAgcmV0dXJuIG5hbWU7CisgICAgZWxzZQorICAgICAg cmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorc3NsX2dldF9pc3N1ZXJfbmFtZShzc2wpIFNTTCAq IHNzbDsKK3sKKyAgICBzdGF0aWMgY2hhciBuYW1lWzI1Nl07CisgICAgWDUwOSAqc2VydmVyX2Nl cnQ7CisKKyAgICBuYW1lWzBdID0gJ1wwJzsKKyAgICBpZiAoc2VydmVyX2NlcnQgPSBTU0xfZ2V0 X3BlZXJfY2VydGlmaWNhdGUoc3NsKSkgeworICAgICAgICBYNTA5X05BTUVfb25lbGluZShYNTA5 X2dldF9pc3N1ZXJfbmFtZShzZXJ2ZXJfY2VydCksbmFtZSxzaXplb2YobmFtZSkpOworICAgICAg ICBYNTA5X2ZyZWUoc2VydmVyX2NlcnQpOworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9Cisg ICAgZWxzZSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5n OiBObyBjZXJ0aWZpY2F0ZSBmcm9tIHNlcnZlciFcclxuIik7CisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK2NoYXIgKgorc3NsX2dldF9zdWJq ZWN0X25hbWUoc3NsKSBTU0wgKiBzc2w7Cit7CisgICAgc3RhdGljIGNoYXIgbmFtZVsyNTZdOwor ICAgIFg1MDkgKnNlcnZlcl9jZXJ0OworCisgICAgbmFtZVswXSA9ICdcMCc7CisgICAgaWYgKHNl cnZlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpIHsKKyAgICAgICBYNTA5 X05BTUVfb25lbGluZShYNTA5X2dldF9zdWJqZWN0X25hbWUoc2VydmVyX2NlcnQpLG5hbWUsc2l6 ZW9mKG5hbWUpKTsKKyAgICAgICBYNTA5X2ZyZWUoc2VydmVyX2NlcnQpOworICAgICAgIHJldHVy biBuYW1lOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBOVUxMOworfQorCisjaWZk ZWYgQ09NTUVOVAorI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgJiYgIShja19zc2xlYXlfaXNf aW5zdGFsbGVkKCkgJiYKKyAgICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2Fj dGl2ZV9mbGFnKSAmJgorICAgICAgICAgICAgICAgc3NsX2Fub255bW91c19jaXBoZXIodGxzX2Fj dGl2ZV9mbGFnP3Rsc19jb246c3NsX2NvbikpCisjZW5kaWYgLyogQ0tfU1NMICovCisKK2ludAor c3NsX2Fub255bW91c19jaXBoZXIoc3NsKSBTU0wgKiBzc2w7Cit7CisgICAgWDUwOSAqIGNlcnQ7 CisKKyAgICBpZiAoc3N0ZWxuZXQpCisgICAgICAgIGNlcnQgPSBTU0xfZ2V0X2NlcnRpZmljYXRl KHNzbCk7CisgICAgZWxzZQorICAgICAgICBjZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRl KHNzbCk7CisKKyAgICBpZiAoIGNlcnQgKSB7CisgICAgICAgIFg1MDlfZnJlZShjZXJ0KTsKKyAg ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOworfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKworLyoKKyAgVGhpcyBvbmUgaXMgKHZlcnkgbXVjaCEpIGJhc2VkIG9uIHdvcmsgYnkK KyAgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4uCisgIENvbW1lbnRz IGJ5IFJhbGYuCisqLworaW50Citzc2xfdmVyaWZ5X2NybChpbnQgb2ssIFg1MDlfU1RPUkVfQ1RY ICpjdHgpCit7CisgICAgWDUwOV9PQkpFQ1Qgb2JqOworICAgIFg1MDlfTkFNRSAqc3ViamVjdCA9 IE5VTEw7CisgICAgWDUwOV9OQU1FICppc3N1ZXIgPSBOVUxMOworICAgIFg1MDkgKnhzID0gTlVM TDsKKyAgICBYNTA5X0NSTCAqY3JsID0gTlVMTDsKKyAgICBYNTA5X1JFVk9LRUQgKnJldm9rZWQg PSBOVUxMOworICAgIFg1MDlfU1RPUkVfQ1RYICogc3RvcmVfY3R4ID0gTlVMTDsKKyAgICBsb25n IHNlcmlhbDsKKyAgICBCSU8gKmJpbyA9IE5VTEw7CisgICAgaW50IGksIG4sIHJjOworICAgIGNo YXIgKmNwOworICAgIGNoYXIgKmNwMjsKKworICAgIC8qCisgICAgICogVW5sZXNzIGEgcmV2b2Nh dGlvbiBzdG9yZSBmb3IgQ1JMcyB3YXMgY3JlYXRlZCB3ZQorICAgICAqIGNhbm5vdCBkbyBhbnkg Q1JMLWJhc2VkIHZlcmlmaWNhdGlvbiwgb2YgY291cnNlLgorICAgICAqLworICAgIGlmICghY3Js X3N0b3JlKQorICAgICAgICByZXR1cm4gb2s7CisKKyAgICBzdG9yZV9jdHggPSBYNTA5X1NUT1JF X0NUWF9uZXcoKTsKKyAgICBpZiAoICFzdG9yZV9jdHggKQorICAgICAgICByZXR1cm4ob2spOwor CisgICAgLyoKKyAgICAgKiBEZXRlcm1pbmUgY2VydGlmaWNhdGUgaW5ncmVkaWVudHMgaW4gYWR2 YW5jZQorICAgICAqLworICAgIHhzICAgICAgPSBYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9j ZXJ0KGN0eCk7CisgICAgc3ViamVjdCA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4cyk7CisgICAg aXNzdWVyICA9IFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKHhzKTsKKworICAgIC8qCisgICAgICogT3Bl blNTTCBwcm92aWRlcyB0aGUgZ2VuZXJhbCBtZWNoYW5pc20gdG8gZGVhbCB3aXRoIENSTHMgYnV0 IGRvZXMgbm90CisgICAgICogdXNlIHRoZW0gYXV0b21hdGljYWxseSB3aGVuIHZlcmlmeWluZyBj ZXJ0aWZpY2F0ZXMsIHNvIHdlIGRvIGl0CisgICAgICogZXhwbGljaXRseSBoZXJlLiBXZSB3aWxs IGNoZWNrIHRoZSBDUkwgZm9yIHRoZSBjdXJyZW50bHkgY2hlY2tlZAorICAgICAqIGNlcnRpZmlj YXRlLCBpZiB0aGVyZSBpcyBzdWNoIGEgQ1JMIGluIHRoZSBzdG9yZS4KKyAgICAgKgorICAgICAq IFdlIGNvbWUgdGhyb3VnaCB0aGlzIHByb2NlZHVyZSBmb3IgZWFjaCBjZXJ0aWZpY2F0ZSBpbiB0 aGUgY2VydGlmaWNhdGUKKyAgICAgKiBjaGFpbiwgc3RhcnRpbmcgd2l0aCB0aGUgcm9vdC1DQSdz IGNlcnRpZmljYXRlLiBBdCBlYWNoIHN0ZXAgd2UndmUgdG8KKyAgICAgKiBib3RoIHZlcmlmeSB0 aGUgc2lnbmF0dXJlIG9uIHRoZSBDUkwgKHRvIG1ha2Ugc3VyZSBpdCdzIGEgdmFsaWQgQ1JMKQor ICAgICAqIGFuZCBpdCdzIHJldm9jYXRpb24gbGlzdCAodG8gbWFrZSBzdXJlIHRoZSBjdXJyZW50 IGNlcnRpZmljYXRlIGlzbid0CisgICAgICogcmV2b2tlZCkuICBCdXQgYmVjYXVzZSB0byBjaGVj ayB0aGUgc2lnbmF0dXJlIG9uIHRoZSBDUkwgd2UgbmVlZCB0aGUKKyAgICAgKiBwdWJsaWMga2V5 IG9mIHRoZSBpc3N1aW5nIENBIGNlcnRpZmljYXRlICh3aGljaCB3YXMgYWxyZWFkeSBwcm9jZXNz ZWQKKyAgICAgKiBvbmUgcm91bmQgYmVmb3JlKSwgd2UndmUgYSBsaXR0bGUgcHJvYmxlbS4gQnV0 IHdlIGNhbiBib3RoIHNvbHZlIGl0IGFuZAorICAgICAqIGF0IHRoZSBzYW1lIHRpbWUgb3B0aW1p emUgdGhlIHByb2Nlc3NpbmcgYnkgdXNpbmcgdGhlIGZvbGxvd2luZworICAgICAqIHZlcmlmaWNh dGlvbiBzY2hlbWUgKGlkZWEgYW5kIGNvZGUgc25pcHBldHMgYm9ycm93ZWQgZnJvbSB0aGUgR0xP QlVTCisgICAgICogcHJvamVjdCk6CisgICAgICoKKyAgICAgKiAxLiBXZSdsbCBjaGVjayB0aGUg c2lnbmF0dXJlIG9mIGEgQ1JMIGluIGVhY2ggc3RlcCB3aGVuIHdlIGZpbmQgYSBDUkwKKyAgICAg KiAgICB0aHJvdWdoIHRoZSBfc3ViamVjdF8gbmFtZSBvZiB0aGUgY3VycmVudCBjZXJ0aWZpY2F0 ZS4gVGhpcyBDUkwKKyAgICAgKiAgICBpdHNlbGYgd2lsbCBiZSBuZWVkZWQgdGhlIGZpcnN0IHRp bWUgaW4gdGhlIG5leHQgcm91bmQsIG9mIGNvdXJzZS4KKyAgICAgKiAgICBCdXQgd2UgZG8gdGhl IHNpZ25hdHVyZSBwcm9jZXNzaW5nIG9uZSByb3VuZCBiZWZvcmUgdGhpcyB3aGVyZSB0aGUKKyAg ICAgKiAgICBwdWJsaWMga2V5IG9mIHRoZSBDQSBpcyBhdmFpbGFibGUuCisgICAgICoKKyAgICAg KiAyLiBXZSdsbCBjaGVjayB0aGUgcmV2b2NhdGlvbiBsaXN0IG9mIGEgQ1JMIGluIGVhY2ggc3Rl cCB3aGVuCisgICAgICogICAgd2UgZmluZCBhIENSTCB0aHJvdWdoIHRoZSBfaXNzdWVyXyBuYW1l IG9mIHRoZSBjdXJyZW50IGNlcnRpZmljYXRlLgorICAgICAqICAgIFRoaXMgQ1JMcyBzaWduYXR1 cmUgd2FzIHRoZW4gYWxyZWFkeSB2ZXJpZmllZCBvbmUgcm91bmQgYmVmb3JlLgorICAgICAqCisg ICAgICogVGhpcyB2ZXJpZmljYXRpb24gc2NoZW1lIGFsbG93cyBhIENBIHRvIHJldm9rZSBpdHMg b3duIGNlcnRpZmljYXRlIGFzCisgICAgICogd2VsbCwgb2YgY291cnNlLgorICAgICAqLworCisg ICAgLyoKKyAgICAgKiBUcnkgdG8gcmV0cmlldmUgYSBDUkwgY29ycmVzcG9uZGluZyB0byB0aGUg X3N1YmplY3RfIG9mCisgICAgICogdGhlIGN1cnJlbnQgY2VydGlmaWNhdGUgaW4gb3JkZXIgdG8g dmVyaWZ5IGl0J3MgaW50ZWdyaXR5LgorICAgICAqLworICAgIG1lbXNldCgoY2hhciAqKSZvYmos IDAsIHNpemVvZihvYmopKTsKKyAgICBYNTA5X1NUT1JFX0NUWF9pbml0KHN0b3JlX2N0eCwgY3Js X3N0b3JlLCBOVUxMLCBOVUxMKTsKKyAgICByYyA9IFg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3Qo c3RvcmVfY3R4LCBYNTA5X0xVX0NSTCwgc3ViamVjdCwgJm9iaik7CisgICAgWDUwOV9TVE9SRV9D VFhfY2xlYW51cChzdG9yZV9jdHgpOworICAgIGNybCA9IG9iai5kYXRhLmNybDsKKyAgICBpZiAo cmMgPiAwICYmIGNybCAhPSBOVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFZlcmlmeSB0 aGUgc2lnbmF0dXJlIG9uIHRoaXMgQ1JMCisgICAgICAgICAqLworICAgICAgICBpZiAoWDUwOV9D UkxfdmVyaWZ5KGNybCwgWDUwOV9nZXRfcHVia2V5KHhzKSkgPD0gMCkgeworICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHNpZ25hdHVyZSBvbiBDUkwhXG4iKTsKKyAgICAgICAg ICAgIFg1MDlfU1RPUkVfQ1RYX3NldF9lcnJvcihjdHgsIFg1MDlfVl9FUlJfQ1JMX1NJR05BVFVS RV9GQUlMVVJFKTsKKyAgICAgICAgICAgIFg1MDlfT0JKRUNUX2ZyZWVfY29udGVudHMoJm9iaik7 CisgICAgICAgICAgICBYNTA5X1NUT1JFX0NUWF9mcmVlKHN0b3JlX2N0eCk7CisgICAgICAgICAg ICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIENoZWNrIGRh dGUgb2YgQ1JMIHRvIG1ha2Ugc3VyZSBpdCdzIG5vdCBleHBpcmVkCisgICAgICAgICAqLworICAg ICAgICBpID0gWDUwOV9jbXBfY3VycmVudF90aW1lKFg1MDlfQ1JMX2dldF9uZXh0VXBkYXRlKGNy bCkpOworICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IkZvdW5kIENSTCBoYXMgaW52YWxpZCBuZXh0VXBkYXRlIGZpZWxkLlxuIik7CisgICAgICAgICAg ICBYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IoY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTkVYVF9VUERBVEVfRklFTEQpOwor ICAgICAgICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygmb2JqKTsKKyAgICAgICAgICAg IFg1MDlfU1RPUkVfQ1RYX2ZyZWUoc3RvcmVfY3R4KTsKKyAgICAgICAgICAgIHJldHVybiAwOwor ICAgICAgICB9CisgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsCisiRm91bmQgQ1JMIGlzIGV4cGlyZWQgLSByZXZva2luZyBhbGwgY2VydGlmaWNhdGVzIHVu dGlsIHlvdSBnZXQgdXBkYXRlZCBDUkwuXG4iCisgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICBYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IoY3R4LCBYNTA5X1ZfRVJSX0NSTF9IQVNf RVhQSVJFRCk7CisgICAgICAgICAgICBYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzKCZvYmopOwor ICAgICAgICAgICAgWDUwOV9TVE9SRV9DVFhfZnJlZShzdG9yZV9jdHgpOworICAgICAgICAgICAg cmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygm b2JqKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRyeSB0byByZXRyaWV2ZSBhIENSTCBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBfaXNzdWVyXyBvZgorICAgICAqIHRoZSBjdXJyZW50IGNlcnRpZmlj YXRlIGluIG9yZGVyIHRvIGNoZWNrIGZvciByZXZvY2F0aW9uLgorICAgICAqLworICAgIG1lbXNl dCgoY2hhciAqKSZvYmosIDAsIHNpemVvZihvYmopKTsKKyAgICBYNTA5X1NUT1JFX0NUWF9pbml0 KHN0b3JlX2N0eCwgY3JsX3N0b3JlLCBOVUxMLCBOVUxMKTsKKyAgICByYyA9IFg1MDlfU1RPUkVf Z2V0X2J5X3N1YmplY3Qoc3RvcmVfY3R4LCBYNTA5X0xVX0NSTCwgaXNzdWVyLCAmb2JqKTsKKyAg ICBYNTA5X1NUT1JFX0NUWF9mcmVlKHN0b3JlX2N0eCk7CQkvKiBjYWxscyBYNTA5X1NUT1JFX0NU WF9jbGVhbnVwKCkgKi8KKyAgICBjcmwgPSBvYmouZGF0YS5jcmw7CisgICAgaWYgKHJjID4gMCAm JiBjcmwgIT0gTlVMTCkgeworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBpZiB0aGUgY3Vy cmVudCBjZXJ0aWZpY2F0ZSBpcyByZXZva2VkIGJ5IHRoaXMgQ1JMCisgICAgICAgICAqLworICAg ICAgICBuID0gc2tfWDUwOV9SRVZPS0VEX251bShYNTA5X0NSTF9nZXRfUkVWT0tFRChjcmwpKTsK KyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgcmV2b2tlZCA9 IHNrX1g1MDlfUkVWT0tFRF92YWx1ZShYNTA5X0NSTF9nZXRfUkVWT0tFRChjcmwpLCBpKTsKKyAg ICAgICAgICAgIGlmIChBU04xX0lOVEVHRVJfY21wKHJldm9rZWQtPnNlcmlhbE51bWJlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfZ2V0X3NlcmlhbE51bWJlcih4cykp ID09IDApIHsKKworICAgICAgICAgICAgICAgIHNlcmlhbCA9IEFTTjFfSU5URUdFUl9nZXQocmV2 b2tlZC0+c2VyaWFsTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBjcCA9IFg1MDlfTkFNRV9vbmVs aW5lKGlzc3VlciwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgZnJlZShjcCk7CisKKyAgICAg ICAgICAgICAgICBYNTA5X1NUT1JFX0NUWF9zZXRfZXJyb3IoY3R4LCBYNTA5X1ZfRVJSX0NFUlRf UkVWT0tFRCk7CisgICAgICAgICAgICAgICAgWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50cygmb2Jq KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBYNTA5X09CSkVDVF9mcmVlX2NvbnRlbnRzKCZvYmopOworICAgIH0KKyAgICByZXR1 cm4gb2s7Cit9CisKK2NoYXIgKgordGxzX3VzZXJpZF9mcm9tX2NsaWVudF9jZXJ0KHNzbCkgU1NM ICogc3NsOworeworICAgIHN0YXRpYyBjaGFyIGNuWzI1Nl07CisgICAgc3RhdGljIGNoYXIgKnIg PSBjbjsKKyAgICBpbnQgZXJyOworICAgIFg1MDkgKmNsaWVudF9jZXJ0OworCisgICAgaWYgKGNs aWVudF9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpIHsKKyAgICAgICAgLyog Y2FsbCB0aGUgY3VzdG9tIGZ1bmN0aW9uICovCisgICAgICAgIGVyciA9IFg1MDlfdG9fdXNlcihj bGllbnRfY2VydCwgY24sIHNpemVvZihjbikpOworICAgICAgICBYNTA5X2ZyZWUoY2xpZW50X2Nl cnQpOworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0dXJuIHIgPSBOVUxMOworICAg ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gcjsKKyAgICB9CisgICAgZWxzZQorICAgICAg ICByZXR1cm4gciA9IE5VTEw7Cit9CisKK3Vuc2lnbmVkIGNoYXIgKioKK3Rsc19nZXRfU0FOX29i anMoU1NMICogc3NsLCBpbnQgdHlwZSkKKy8qIHJldHVybnMgTlVMTCBvciBhbiBhcnJheSBvZiBt YWxsb2MnZWQgb2JqZWN0cyBvZiB0eXBlIGB0eXBlJyBmcm9tIHRoZSBzZXJ2ZXIncworICogc3Vi amVjdEFsdE5hbWUsIHJlbWVtYmVyIHRvIGZyZWUoKSB0aGVtIGFsbCEKKyAqLworeworI2RlZmlu ZSBOVU1fU0FOX09CSlMgNjQKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciAqb2Jqc1tOVU1fU0FO X09CSlNdOworICAgIHVuc2lnbmVkIGNoYXIgKipydiA9IE5VTEw7CisgICAgWDUwOSAqc2VydmVy X2NlcnQgPSBOVUxMOworICAgIGludCBpLCBqOworICAgIFg1MDlfRVhURU5TSU9OICpleHQgPSBO VUxMOworICAgIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmlhbHQgPSBOVUxMOworICAgIEdFTkVS QUxfTkFNRSAqZ2VuID0gTlVMTDsKKworICAgIG1lbXNldChvYmpzLCAwLCBzaXplb2Yob2Jqcykp OworICAgIGlmIChzZXJ2ZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSB7 CisgICAgICAgIGlmICgoaSA9IFg1MDlfZ2V0X2V4dF9ieV9OSUQoc2VydmVyX2NlcnQsIE5JRF9z dWJqZWN0X2FsdF9uYW1lLCAtMSkpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZWplY3Q7CisgICAg ICAgIGlmICghKGV4dCA9IFg1MDlfZ2V0X2V4dChzZXJ2ZXJfY2VydCwgaSkpKQorICAgICAgICAg ICAgZ290byBlamVjdDsKKyAgICAgICAgWDUwOVYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zKCk7 CisgICAgICAgIGlmICghKGlhbHQgPSBYNTA5VjNfRVhUX2QyaShleHQpKSkKKyAgICAgICAgICAg IGdvdG8gZWplY3Q7CisgICAgICAgIHJ2ID0gb2JqczsKKyAgICAgICAgZm9yIChpID0gMCwgaiA9 IDA7IGkgPCBza19HRU5FUkFMX05BTUVfbnVtKGlhbHQpICYmIGogPCBOVU1fU0FOX09CSlMgLSAy OyBpKyspIHsKKyAgICAgICAgICAgIGdlbiA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShpYWx0LCBp KTsKKyAgICAgICAgICAgIC8qIFRoZSB1c2Ugb2YgVl9BU04xX0NPTlRFWFRfU1BFQ0lGSUMgaXMg YmVjYXVzZSBPcGVuU1NMIDAuOS42IGRlZmluZWQgaXRzCisgICAgICAgICAgICAgKiB0eXBlcyB8 IFZfQVNOMV9DT05URVhUX1NQRUNJRklDLiAgMC45LjcgZG9lcyBub3QuICBJbiBjYXNlLCB3ZSBh cmUgYnVpbHQKKyAgICAgICAgICAgICAqIHdpdGggb25lIGFuZCBsaW5rZWQgdG8gdGhlIG90aGVy IHdlIHVzZSB0aGlzIGhhY2suCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgoZ2Vu LT50eXBlIHwgVl9BU04xX0NPTlRFWFRfU1BFQ0lGSUMpID09ICh0eXBlIHwgVl9BU04xX0NPTlRF WFRfU1BFQ0lGSUMpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFnZW4tPmQuaWE1IHx8ICFnZW4t PmQuaWE1LT5sZW5ndGgpCisJCSAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKHN0cmxlbigo Y2hhciAqKWdlbi0+ZC5pYTUtPmRhdGEpICE9IGdlbi0+ZC5pYTUtPmxlbmd0aCkgeworICAgICAg ICAgICAgICAgICAgICAvKiBJZ25vcmluZyBJQTVTdHJpbmcgY29udGFpbmluZyBudWxsIGNoYXJh Y3RlciAqLworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgb2Jqc1tqXSA9IG1hbGxvYyhnZW4tPmQuaWE1LT5sZW5ndGggKyAx KTsKKyAgICAgICAgICAgICAgICBpZiAob2Jqc1tqXSkgeworICAgICAgICAgICAgICAgICAgICBt ZW1jcHkob2Jqc1tqXSwgZ2VuLT5kLmlhNS0+ZGF0YSwgZ2VuLT5kLmlhNS0+bGVuZ3RoKTsKKyAg ICAgICAgICAgICAgICAgICAgb2Jqc1tqXVtnZW4tPmQuaWE1LT5sZW5ndGhdID0gMDsKKyAgICAg ICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBYNTA5VjNfRVhUX2NsZWFudXAoKTsKKyAgICB9CitlamVjdDoKKyAg ICBpZiAoaWFsdCkgICAgICAgICAgIHNrX0dFTkVSQUxfTkFNRV9mcmVlKGlhbHQpOworICAgIGlm IChzZXJ2ZXJfY2VydCkgICAgWDUwOV9mcmVlKHNlcnZlcl9jZXJ0KTsKKyAgICByZXR1cm4gcnY7 Cit9CisKKworc3RhdGljIGludAorZE5TTmFtZV9jbXAoY29uc3QgY2hhciAqaG9zdCwgY29uc3Qg Y2hhciAqZE5TTmFtZSkKK3sKKyAgICBpbnQgYzEgPSAxLCBjMiA9IDEsIG51bV9jb21wLCBydiA9 IC0xOworICAgIGNoYXIgKnAsICpwMSwgKnAyLCAqaG9zdF9jb3B5PU5VTEwsICpkTlNOYW1lX2Nv cHk9TlVMTDsKKworICAgIC8qIGZpcnN0IHdlIGNvdW50IHRoZSBudW1iZXIgb2YgZG9tYWluIG5h bWUgY29tcG9uZW50cyBpbiBib3RoIHBhcmFtZXRlcnMuCisgICAgICogdGhleSBzaG91bGQgYmUg ZXF1YWwgbWFueSwgb3IgaXQncyBub3QgYSBtYXRjaAorICAgICAqLworICAgIHAgPSAoY2hhciAq KSBob3N0OworICAgIHdoaWxlIChwID0gc3Ryc3RyKHAsICIuIikpIHsKKyAgICAgICAgYzErKzsK KyAgICAgICAgcCsrOworICAgIH0KKyAgICBwID0gKGNoYXIgKikgZE5TTmFtZTsKKyAgICB3aGls ZSAocCA9IHN0cnN0cihwLCAiLiIpKSB7CisgICAgICAgIGMyKys7CisgICAgICAgIHArKzsKKyAg ICB9CisgICAgaWYgKGMxICE9IGMyKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbnVtX2NvbXAg PSBjMTsKKworICAgIG1ha2VzdHIoJmhvc3RfY29weSxob3N0KTsKKyAgICBtYWtlc3RyKCZkTlNO YW1lX2NvcHksZE5TTmFtZSk7CisgICAgaWYgKGhvc3RfY29weSA9PSBOVUxMIHx8IGROU05hbWVf Y29weSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVqZWN0OworICAgIC8qIG1ha2Ugc3Vic3RyaW5n cyBieSByZXBsYWNpbmcgJy4nIHdpdGggJ1wwJyAqLworICAgIHAgPSBkTlNOYW1lX2NvcHk7Cisg ICAgd2hpbGUgKHAgPSBzdHJzdHIocCwgIi4iKSkgeworICAgICAgICAqcCA9ICdcMCc7CisgICAg ICAgIHArKzsKKyAgICB9CisgICAgcCA9IGhvc3RfY29weTsKKyAgICB3aGlsZSAocCA9IHN0cnN0 cihwLCAiLiIpKSB7CisgICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgcCsrOworICAgIH0KKwor ICAgIC8qIGNvbXBhcmUgZWFjaCBjb21wb25lbnQgKi8KKyAgICBwMSA9IGhvc3RfY29weTsKKyAg ICBwMiA9IGROU05hbWVfY29weTsKKyAgICBmb3IgKDsgbnVtX2NvbXA7IG51bV9jb21wLS0pIHsK KyAgICAgICAgaWYgKCFja21hdGNoKHAyLCBwMSwwLDEpKQorICAgICAgICAgICAgLyogZmFpbGVk IG1hdGNoICovCisgICAgICAgICAgICBnb3RvIGVqZWN0OworICAgICAgICBwMSArPSBzdHJsZW4o cDEpICsgMTsKKyAgICAgICAgcDIgKz0gc3RybGVuKHAyKSArIDE7CisgICAgfQorICAgIC8qIG1h dGNoIG9rICovCisgICAgcnYgPSAwOworCisgIGVqZWN0OgorICAgIGlmIChkTlNOYW1lX2NvcHkp ICAgZnJlZShkTlNOYW1lX2NvcHkpOworICAgIGlmIChob3N0X2NvcHkpICAgICAgZnJlZShob3N0 X2NvcHkpOworICAgIHJldHVybiBydjsKK30KKworCisKK3N0YXRpYyBpbnQKK3Nob3dfaG9zdG5h bWVfd2FybmluZyhjaGFyICpzMSwgY2hhciAqczIpCit7CisgICAgY2hhciBwcmVmaXhbMTAyNF07 CisgICAgaW50IG9rID0gMTsKKyAgICBzZXR2ZXJib3NpdHkoKTsKKyAgICBja21ha3htc2cocHJl Zml4LDEwMjQsCisgICAgICAgICAgICAgICJXYXJuaW5nOiBIb3N0bmFtZSAoXCIiLCBzMSwgCisg ICAgICAgICAgICAgICJcIikgZG9lcyBub3QgbWF0Y2ggc2VydmVyJ3MgY2VydGlmaWNhdGUgKFwi IiwgczIsICJcIikiLAorICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMKTsKKyAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnKQorICAgICAgICBvayA9IHVxX29rKHBy ZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgIkNvbnRpbnVlPyAoWS9OKSAiLAorICAgICAgICAg ICAgICAgICAgICAzLCBOVUxMLCAwKTsKKyAgICBlbHNlIGlmICh2ZXJib3NpdHkpCisgICAgICAg IHByaW50ZihwcmVmaXgpOworICAgIHJldHVybihvayk7Cit9CisKKyNpZm5kZWYgT1NGNTAKKyNp Zm5kZWYgSFBVWDEwCisjaWZuZGVmIEhQVVgxMTAwCisjaWZuZGVmIFNDT19PU1I1MDUKKyNpZm5k ZWYgT3BlbkJTRAorI2lmbmRlZiBGUkVFQlNENAorI2lmbmRlZiBORVRCU0QxNQorI2lmbmRlZiBM SU5VWAorI2lmbmRlZiBBSVg0MQorI2lmbmRlZiBVVzcKKyNpZm5kZWYgSVJJWDY1CisjaWZuZGVm IFNPTEFSSVM5CisjaWZuZGVmIFNPTEFSSVM4CisjaWZuZGVmIFNPTEFSSVM3CisjaWZuZGVmIE1B Q09TWAorI2lmZGVmIERFQ19UQ1BJUAorI2RlZmluZSBpbmV0X2F0b24gSU5FVF9BVE9OCisjZW5k aWYgLyogREVDX1RDUElQICovCisKKyNpZm5kZWYgTk9fRENMX0lORVRfQVRPTgorc3RhdGljIGlu dAoraW5ldF9hdG9uKGNoYXIgKiBpcGFkZHJlc3MsIHN0cnVjdCBpbl9hZGRyICogaWEpIHsKKyAg ICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOworICAgIHVuaW9uIHsKKyAgICAgICAgdW5zaWduZWQg bG9uZyBsOworICAgICAgICB1bnNpZ25lZCBjaGFyIGJbNF07CisgICAgfSBkdW1teTsKKworICAg IHEgPSBja3NwbGl0KDEsMCxpcGFkZHJlc3MsIi4iLCIwMTIzNDU2Nzg5YWJjZGVmQUNERUYiLDgs MCwwKTsKKyAgICBpZiAocS0+YV9zaXplID09IDQpIHsKKyAgICAgICAgZHVtbXkuYlswXSA9IGF0 b2kocS0+YV9oZWFkWzFdKTsKKyAgICAgICAgZHVtbXkuYlsxXSA9IGF0b2kocS0+YV9oZWFkWzJd KTsKKyAgICAgICAgZHVtbXkuYlsyXSA9IGF0b2kocS0+YV9oZWFkWzNdKTsKKyAgICAgICAgZHVt bXkuYlszXSA9IGF0b2kocS0+YV9oZWFkWzRdKTsKKyAgICAgICAgaWEtPnNfYWRkciA9IGR1bW15 Lmw7CisgICAgICAgIHJldHVybihpYS0+c19hZGRyICE9IDApOworICAgIH0KKyAgICByZXR1cm4o MCk7Cit9CisjZW5kaWYJLyogTk9fRENMX0lORVRfQVRPTiAqLworCisjZW5kaWYgLyogTUFDT1NY ICovCisjZW5kaWYgLyogU09MQVJJUzcgKi8KKyNlbmRpZiAvKiBTT0xBUklTOCAqLworI2VuZGlm IC8qIFNPTEFSSVM5ICovCisjZW5kaWYgLyogSVJJWDY1ICovCisjZW5kaWYgLyogVVc3ICovCisj ZW5kaWYgLyogQUlYNDEgKi8KKyNlbmRpZiAvKiBMSU5VWCAqLworI2VuZGlmIC8qIE5FVEJTRDE1 ICovCisjZW5kaWYgLyogRlJFRUJTRDQgKi8KKyNlbmRpZiAvKiBPcGVuQlNEICovCisjZW5kaWYg LyogU0NPX09TUjUwNSAqLworI2VuZGlmIC8qIEhQVVgxMTAwICovCisjZW5kaWYgLyogSFBVWDEw ICovCisjZW5kaWYgLyogT1NGNTAgKi8KKworaW50Citzc2xfY2hlY2tfc2VydmVyX25hbWUoU1NM ICogc3NsLCBjaGFyICogaG9zdG5hbWUpCisvKiByZXR1cm5zIDAgaWYgaG9zdG5hbWUgYW5kIHNl cnZlcidzIGNlcnQgbWF0Y2hlcywgZWxzZSAtMSAqLworeworICAgIGNoYXIgKiBjb21tb25OYW1l OworICAgIHVuc2lnbmVkIGNoYXIgKiogZE5TTmFtZTsKKyAgICB1bnNpZ25lZCBjaGFyICoqIGlw QWRkcmVzczsKKyAgICBzdHJ1Y3QgaW5fYWRkciBpYTsKKyAgICBpbnQgcnY7CisKKyAgICBzZXR2 ZXJib3NpdHkoKTsKKyAgICBpZiAodmVyYm9zaXR5ICYmICFpbnNlcnZlcikgeworICAgICAgICBp ZiAoZE5TTmFtZSA9IHRsc19nZXRfU0FOX29ianMoc3NsLEdFTl9ETlMpKSB7CisgICAgICAgICAg ICBpbnQgaSA9IDA7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBkTlNOYW1lW2ldOyBpKyspIHsK KyAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRpZmljYXRlWzBdIGFsdFN1YmplY3ROYW1lIERO Uz0lc1xyXG4iLGROU05hbWVbaV0pOworICAgICAgICAgICAgICAgIGZyZWUoZE5TTmFtZVtpXSk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlwQWRkcmVzcyA9IHRsc19n ZXRfU0FOX29ianMoc3NsLEdFTl9JUEFERCkpIHsKKyAgICAgICAgICAgIGludCBpID0gMDsKKyAg ICAgICAgICAgIGNoYXIgKnNlcnZlcl9pcDsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGlh OworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpcEFkZHJlc3NbaV07IGkrKykgeworICAgICAg ICAgICAgICAgIGlmIChpcEFkZHJlc3NbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWEuc19h ZGRyID0gKih1bnNpZ25lZCBsb25nICopaXBBZGRyZXNzW2ldOworICAgICAgICAgICAgICAgICAg ICBzZXJ2ZXJfaXAgPSBpbmV0X250b2EoaWEpOworICAgICAgICAgICAgICAgICAgICBwcmludGYo IkNlcnRpZmljYXRlWzBdIGFsdFN1YmplY3ROYW1lIElQQWRkcj0lc1xyXG4iLHNlcnZlcl9pcCk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZyZWUoaXBBZGRyZXNzW2ldKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIGlwQWRkcmVzcyBwb2ludHMgdG8gYSBzdGF0 aWMgLSBkb24ndCBmcmVlICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKGROU05hbWUgPSB0bHNf Z2V0X1NBTl9vYmpzKHNzbCxHRU5fRU1BSUwpKSB7CisgICAgICAgICAgICBpbnQgaSA9IDA7Cisg ICAgICAgICAgICBmb3IgKGkgPSAwOyBkTlNOYW1lW2ldOyBpKyspIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIkNlcnRpZmljYXRlWzBdIGFsdFN1YmplY3ROYW1lIEVtYWlsPSVzXHJcbiIsZE5T TmFtZVtpXSk7CisgICAgICAgICAgICAgICAgZnJlZShkTlNOYW1lW2ldKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZE5TTmFtZSA9IHRsc19nZXRfU0FOX29ianMoc3Ns LEdFTl9VUkkpKSB7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBmb3IgKGkg PSAwOyBkTlNOYW1lW2ldOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkNlcnRpZmlj YXRlWzBdIGFsdFN1YmplY3ROYW1lIFVSST0lc1xyXG4iLGROU05hbWVbaV0pOworICAgICAgICAg ICAgICAgIGZyZWUoZE5TTmFtZVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGROU05hbWUgPSB0bHNfZ2V0X1NBTl9vYmpzKHNzbCxHRU5fT1RIRVJOQU1FKSkgewor ICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgZm9yIChpID0gMDsgZE5TTmFtZVtp XTsgaSsrKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJDZXJ0aWZpY2F0ZVswXSBhbHRTdWJq ZWN0TmFtZSBPdGhlcj0lc1xyXG4iLGROU05hbWVbaV0pOworICAgICAgICAgICAgICAgIGZyZWUo ZE5TTmFtZVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBm aXJzdCB3ZSBjaGVjayBpZiBgaG9zdG5hbWUnIGlzIGluIGZhY3QgYW4gaXAgYWRkcmVzcyAqLwor ICAgIGlmIChpbmV0X2F0b24oaG9zdG5hbWUsICZpYSkpIHsKKyAgICAgICAgaXBBZGRyZXNzID0g dGxzX2dldF9TQU5fb2Jqcyhzc2wsR0VOX0lQQUREKTsKKyAgICAgICAgaWYgKGlwQWRkcmVzcykg eworICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgY2hhciAqc2VydmVyX2lwID0g IlVOS05PV04iOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpcEFkZHJlc3NbaV07IGkrKykK KyAgICAgICAgICAgICAgICBpZiAoKih1bnNpZ25lZCBsb25nICopaXBBZGRyZXNzW2ldID09IGlh LnNfYWRkcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGlm IChpcEFkZHJlc3NbaSAtIDFdKSB7CisgICAgICAgICAgICAgICAgaWEuc19hZGRyID0gKih1bnNp Z25lZCBsb25nICopaXBBZGRyZXNzW2kgLSAxXTsKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfaXAg PSBpbmV0X250b2EoaWEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcnYgPSBzaG93X2hv c3RuYW1lX3dhcm5pbmcoaG9zdG5hbWUsIHNlcnZlcl9pcCkgPyAwIDogLTE7CisgICAgICAgICAg ICBmb3IgKGkgPSAwOyBpcEFkZHJlc3NbaV07IGkrKykKKyAgICAgICAgICAgICAgICBmcmVlKGlw QWRkcmVzc1tpXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBydiA9IHNob3dfaG9z dG5hbWVfd2FybmluZyhob3N0bmFtZSwgIk5PIElQIElOIENFUlQiKSA/IDAgOiAtMTsKKyAgICAg ICAgfQorICAgICAgICByZXR1cm4ocnYpOworICAgIH0KKworICAgIC8qIGxvb2sgZm9yIGROU05h bWUocykgaW4gc3ViamVjdEFsdE5hbWUgaW4gdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlICovCisg ICAgZE5TTmFtZSA9IHRsc19nZXRfU0FOX29ianMoc3NsLEdFTl9ETlMpOworICAgIGlmIChkTlNO YW1lKSB7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgZE5TTmFtZVtp XTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWROU05hbWVfY21wKGhvc3RuYW1lLChjaGFyICop ZE5TTmFtZVtpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAg ICAgcnYgPSBzaG93X2hvc3RuYW1lX3dhcm5pbmcoaG9zdG5hbWUsCisJCQkJICAgKGNoYXIgKiko KGROU05hbWVbaSAtIDFdID09IE5VTEwpID8gCisJCQkgICAgICAgICAgIChjaGFyICopIlVOS05P V04iIDogKGNoYXIgKilkTlNOYW1lW2kgLSAxXSkpCisJICAgICA/IDAgOiAtMTsKKyAgICAgICAg Zm9yIChpID0gMDsgZE5TTmFtZVtpXTsgaSsrKQorICAgICAgICAgICAgZnJlZShkTlNOYW1lW2ld KTsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgIH0gZWxzZSBpZiAoKGNvbW1vbk5hbWUgPSBzc2xf Z2V0X2NvbW1vbk5hbWUoc3NsKSkpIHsKKyAgICAgICAvKiBzbyB0aGUgc2VydmVyIGRpZG4ndCBo YXZlIGFueSBkTlNOYW1lJ3MsIGNoZWNrIHRoZSBjb21tb25OYW1lICovCisgICAgICAgaWYgKCFk TlNOYW1lX2NtcChob3N0bmFtZSwgY29tbW9uTmFtZSkpCisgICAgICAgICAgIHJldHVybiAwOwor ICAgICAgIGVsc2UKKyAgICAgICAgICAgcmV0dXJuIChzaG93X2hvc3RuYW1lX3dhcm5pbmcoaG9z dG5hbWUsIGNvbW1vbk5hbWUpID8gMCA6IC0xKTsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQor CisvKiBJcyAndXNlcicgYXV0aG9yaXplZCB0byBhY2Nlc3MgdGhlIHN5c3RlbSB3aXRob3V0IGEg bG9naW4gKi8KK2ludAordGxzX2lzX3VzZXJfdmFsaWQoU1NMICogc3NsLCBjb25zdCBjaGFyICp1 c2VyKQoreworICAgIFg1MDkgKmNsaWVudF9jZXJ0OworICAgIGludCByID0gMDsKKworICAgIGlm ICggIXNzbCB8fCAhdXNlciB8fCAhdXNlclswXSApCisgICAgICAgIHJldHVybigwKTsKKworICAg IGlmICghKGNsaWVudF9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpKQorICAg ICAgICByZXR1cm4gMDsKKworICAgIC8qIFVzZSB1c2VyIHN1cHBsaWVkIGZ1bmN0aW9uICovCisg ICAgciA9IFg1MDlfdXNlcm9rKGNsaWVudF9jZXJ0LHVzZXIpOworCisgICAgWDUwOV9mcmVlKGNs aWVudF9jZXJ0KTsKKyAgICByZXR1cm4gcjsKK30KKworaW50Cit0bHNfaXNfYW5vbihpbnQgeCkK K3sKKyAgICBjaGFyIGJ1ZlsxMjhdOworICAgIFNTTF9DSVBIRVIgKiBjaXBoZXI7CisgICAgU1NM ICogc3NsID0gTlVMTDsKKworICAgIHN3aXRjaCAoIHggKSB7CisjaWZuZGVmIE5PRlRQCisjaWZu ZGVmIFNZU0ZUUAorICAgIGNhc2UgMTogICAgIC8qIGZ0cCBjb21tYW5kICovCisgICAgICAgIGlm ICggc3NsX2Z0cF9hY3RpdmVfZmxhZyApCisgICAgICAgICAgICBzc2wgPSBzc2xfZnRwX2NvbjsK KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIDI6ICAgICAvKiBmdHAgZGF0YSAqLworICAgICAgICBpZiAoIHNzbF9mdHBfZGF0YV9h Y3RpdmVfZmxhZyApCisgICAgICAgICAgICBzc2wgPSBzc2xfZnRwX2RhdGFfY29uOworICAgICAg ICBlbHNlCisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IFNZU0ZUUCAqLworI2VuZGlmIC8qIE5PRlRQICovCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYg KHRsc19hY3RpdmVfZmxhZykKKyAgICAgICAgICAgIHNzbCA9IHRsc19jb247CisgICAgICAgIGVs c2UgaWYgKHNzbF9hY3RpdmVfZmxhZykKKyAgICAgICAgICAgIHNzbCA9IHNzbF9jb247CisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICBjaXBoZXIgPSBT U0xfZ2V0X2N1cnJlbnRfY2lwaGVyKHNzbCk7CisgICAgaWYgKFNTTF9DSVBIRVJfZGVzY3JpcHRp b24oY2lwaGVyLGJ1ZixzaXplb2YoYnVmKSkpIHsKKyAgICAgICAgaWYgKGNraW5kZXgoIkF1PU5v bmUiLGJ1ZiwwLDAsMCkgIT0gMCkKKyAgICAgICAgICAgIHJldHVybigxKTsgICAgICAgICAgICAg ICAgICAvKiBhbm9ueW1vdXMgKi8KKyAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg IC8qIGtub3duICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogY291bGQgbm90IGdldCBjaXBo ZXIgZGVzY3JpcHRpb24uICBBc3N1bWUgYW5vbnltb3VzICovCisgICAgICAgIHJldHVybigxKTsK KyAgICB9Cit9CisKK2ludAordGxzX2lzX2tyYjUoaW50IHgpCit7CisgICAgY2hhciBidWZbMTI4 XTsKKyAgICBTU0xfQ0lQSEVSICogY2lwaGVyOworICAgIFNTTCAqIHNzbCA9IE5VTEw7CisKKyAg ICBzd2l0Y2ggKCB4ICkgeworI2lmbmRlZiBOT0ZUUAorI2lmbmRlZiBTWVNGVFAKKyAgICBjYXNl IDE6ICAgICAvKiBmdHAgY29tbWFuZCAqLworICAgICAgICBpZiAoIHNzbF9mdHBfYWN0aXZlX2Zs YWcgKQorICAgICAgICAgICAgc3NsID0gc3NsX2Z0cF9jb247CisgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHJldHVybigwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOiAgICAgLyogZnRw IGRhdGEgKi8KKyAgICAgICAgaWYgKCBzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcgKQorICAgICAg ICAgICAgc3NsID0gc3NsX2Z0cF9kYXRhX2NvbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg cmV0dXJuKDApOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBTWVNGVFAgKi8KKyNlbmRpZiAv KiBOT0ZUUCAqLworI2lmbmRlZiBOT0hUVFAKKyAgICBjYXNlIDM6CisgICAgICAgIGlmICggdGxz X2h0dHBfYWN0aXZlX2ZsYWcgKQorICAgICAgICAgICAgc3NsID0gdGxzX2h0dHBfY29uOworICAg ICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyAgICBkZWZhdWx0OgorICAgICAgICBp ZiAodGxzX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgc3NsID0gdGxzX2NvbjsKKyAgICAgICAg ZWxzZSBpZiAoc3NsX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgc3NsID0gc3NsX2NvbjsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIGNpcGhlciA9 IFNTTF9nZXRfY3VycmVudF9jaXBoZXIoc3NsKTsKKyAgICBpZiAoY2lwaGVyICYmIFNTTF9DSVBI RVJfZGVzY3JpcHRpb24oY2lwaGVyLGJ1ZixzaXplb2YoYnVmKSkpIHsKKyAgICAgICAgaWYgKGNr aW5kZXgoIkF1PUtSQjUiLGJ1ZiwwLDAsMCkgIT0gMCkKKyAgICAgICAgICAgIHJldHVybigxKTsg ICAgICAgICAgICAgICAgICAvKiBrcmI1ICovCisgICAgfQorICAgIHJldHVybigwKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIG5vdCAqLworfQorCitpbnQKK3NzbF9nZXRfY2xpZW50X2Zp bmlzaGVkKGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworI2lmZGVmIE5PX0dFVF9GSU5JU0hFRAor ICAgIHJldHVybigwKTsKKyNlbHNlCisgICAgaWYgKHNzdGVsbmV0IHx8IHRjcF9pbmNvbWluZykg eworICAgICAgICByZXR1cm4oU1NMX2dldF9wZWVyX2ZpbmlzaGVkKHNzbF9hY3RpdmVfZmxhZz9z c2xfY29uOnRsc19jb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 Zixjb3VudCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybihTU0xfZ2V0X2ZpbmlzaGVk KHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJ1Zixjb3VudCkpOworICAgIH0KKyNlbmRpZiAvKiBOT19HRVRfRklO SVNIRUQgKi8KK30KKworaW50Citzc2xfZ2V0X3NlcnZlcl9maW5pc2hlZChjaGFyICpidWYsIGlu dCBjb3VudCkKK3sKKyNpZmRlZiBOT19HRVRfRklOSVNIRUQKKyAgICByZXR1cm4oMCk7CisjZWxz ZQorICAgIGlmIChzc3RlbG5ldCB8fCB0Y3BfaW5jb21pbmcpIHsKKyAgICAgICAgcmV0dXJuKFNT TF9nZXRfZmluaXNoZWQoc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLGNvdW50KSk7CisgICAgfSBlbHNlIHsK KyAgICAgICAgcmV0dXJuKFNTTF9nZXRfcGVlcl9maW5pc2hlZChzc2xfYWN0aXZlX2ZsYWc/c3Ns X2Nvbjp0bHNfY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYs Y291bnQpKTsKKyAgICB9CisjZW5kaWYgLyogTk9fR0VUX0ZJTklTSEVEICovCit9CisKKworI2lm ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCitpbnQKKyNpZmRlZiBDS19BTlNJQworc3NsX3JlcGx5KGlu dCBob3csIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBjbnQpCisjZWxzZQorc3NsX3JlcGx5KGhv dyxkYXRhLGNudCkgaW50IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNlbmRp ZgoreworICAgIGNoYXIgKiBzdHI9TlVMTDsKKworICAgIHNldHZlcmJvc2l0eSgpOworICAgIGRh dGEgKz0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHN0YXR1cyBieXRl ICovCisgICAgY250ICAtPSA0OworCisgICAgaWYoY250LS0gPCAxKSB7CisgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAg IH0KKworICAgIHN3aXRjaCgqZGF0YSsrKSB7CisgICAgY2FzZSBTU0xfQUNDRVBUOgorICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gaGFu ZHNoYWtlIHN0YXJ0aW5nXSIpOworICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAg ICAgICAgIHByaW50ZigiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7CisgICAgICAg IGRlYnVnKEYxMTAsInNzbF9yZXBseSIsIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsK KworICAgICAgICAvKiByaWdodCAuLi4gbm93IHdlIGRyb3AgaW50byB0aGUgU1NMIGxpYnJhcnkg Ki8KKyAgICAgICAgaWYgKCFzc2xfb25seV9mbGFnKSB7CisgICAgICAgICAgICBpZiAoc3NsX2R1 bW15X2ZsYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAg ICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBEdW1teSBDb25uZWN0ZWRdIik7CisgICAg ICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJbU1NMIC0gRHVtbXkgQ29ubmVjdGVkXVxyXG4iKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX3JlcGx5IiwiW1NTTCAtIER1bW15IENv bm5lY3RlZF0iLDApOworICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VTktOT1dO KTsKKyAgICAgICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOworICAgICAgICAgICAgICAg IHJldHVybiBBVVRIX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChT U0xfY29ubmVjdChzc2xfY29uKSA8PSAwKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbjsKKyAg ICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICAgICAgICAgICAg ICB0bl9kZWJ1ZygiW1NTTCAtIEZBSUxFRF0iKTsKKyAgICAgICAgICAgICAgICAgICAgRVJSX3By aW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgbGVuID0gQklPX3JlYWQo YmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7CisgICAgICAgICAgICAgICAgICAgIHNzbF9l cnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAg ICAgICAgICAgICAgICAgIHByaW50Zihzc2xfZXJyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKCB2ZXJib3NpdHkgKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIEZB SUxFRF1cclxuIik7CisgICAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vy cik7CisgICAgICAgICAgICAgICAgICAgIGxlbiA9IEJJT19yZWFkKGJpb19lcnIsc3NsX2VycixT U0xfRVJSX0JGU1opOworICAgICAgICAgICAgICAgICAgICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJf QkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICBw cmludGYoc3NsX2Vycik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsInNzbF9yZXBseSIsIltTU0wgLSBGQUlMRURdIiwwKTsKKyAgICAgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgICAgICB0dGNsb3MoMCk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAg ICAgIHRuX2RlYnVnKCJbU1NMIC0gT0tdIik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZl cmJvc2l0eSApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbU1NMIC0gT0tdXHJcbiIp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfcmVw bHkiLCJbU1NMIC0gT0tdIiwwKTsKKworICAgICAgICAgICAgICAgIHNzbF9hY3RpdmVfZmxhZyA9 IDE7CisgICAgICAgICAgICAgICAgc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHNzbF9jb24s MCx2ZXJib3NpdHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGF1dGhfZmlu aXNoZWQoQVVUSF9VTktOT1dOKTsKKyAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKKyAgICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIFNTTF9SRUpFQ1Q6CisgICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKSB7CisgICAgICAgICAgICB0bl9kZWJ1ZygKKyAgICAgICAgICAgICAgICAgIltTU0wg LSBmYWlsZWQgdG8gc3dpdGNoIG9uIFNTTCAtIHRyeWluZyBwbGFpbnRleHQgbG9naW5dIik7Cisg ICAgICAgIH0gZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKKyAgICAgICAgICAgIHByaW50ZigiW1NT TCAtIGZhaWxlZCB0byBzd2l0Y2ggb24gU1NMXVxyXG4iKTsKKyAgICAgICAgICAgIHByaW50Zigi VHJ5aW5nIHBsYWludGV4dCBsb2dpbjpcclxuIik7CisgICAgICAgIH0KKyAgICAgICAgZGVidWco RjExMCwic3NsX3JlcGx5IiwiW1NTTCAtIGZhaWxlZCB0byBzd2l0Y2ggb24gU1NMXSIsMCk7Cisg ICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4gQVVUSF9G QUlMVVJFOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAg ICB9CisgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K3NzbF9pcyh1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK3NzbF9pcyhkYXRh LGNudCkgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNlbmRpZgoreworICAgIGlmICgo Y250IC09IDQpIDwgMSkKKyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKworICAgIHNldHZl cmJvc2l0eSgpOworICAgIGRhdGEgKz0gNDsKKyAgICBzd2l0Y2goKmRhdGErKykgeworICAgIGNh c2UgU1NMX1NUQVJUOgorICAgICAgICAvKiBzZXJ2ZXIgc3RhcnRzIHRoZSBTU0wgc3R1ZmYgbm93 IC4uLiAqLworICAgICAgICBpZiAoIXNzbF9vbmx5X2ZsYWcpIHsKKyAgICAgICAgICAgIGlmICgg IXRsc19sb2FkX2NlcnRzKHNzbF9jdHgsc3NsX2NvbiwxKSApIHsKKyAgICAgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVVUSF9G QUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykKKyAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ10i KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgICAgIHBy aW50ZigiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7CisgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJzc2xfaXMiLCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7CisKKyAgICAg ICAgICAgIFNlbmRTU0xBdXRoU0IoU1NMX0FDQ0VQVCwgKHZvaWQgKikwLCAwKTsKKworICAgICAg ICAgICAgYXV0aF9zc2xfdmFsaWQgPSAxOworCisgICAgICAgICAgICBpZiAoc3NsX2R1bW15X2Zs YWcpIHsKKyAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAg ICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBEdW1teSBDb25uZWN0ZWRdIik7CisgICAgICAgICAg ICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJbU1NMIC0gRHVtbXkgQ29ubmVjdGVkXVxyXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIiwiW1NTTCAtIER1bW15IENvbm5lY3RlZF0i LDApOworICAgICAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7CisgICAgICAgICAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1VOS05PV04pOworICAgICAgICAgICAgICAgIHJldHVybiBB VVRIX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChTU0xfYWNjZXB0 KHNzbF9jb24pIDw9IDApIHsKKyAgICAgICAgICAgICAgICBjaGFyIGVycmJ1ZlsxMDI0XTsKKwor ICAgICAgICAgICAgICAgIHNwcmludGYoZXJyYnVmLCJbU1NMIC0gU1NMX2FjY2VwdCBlcnJvcjog JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9l cnJvcigpLE5VTEwpKTsKKworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQor ICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZyhlcnJidWYpOworICAgICAgICAgICAgICAgIGVs c2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNc clxuIixlcnJidWYpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAg ICAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBTU0xfYWNjZXB0IGVycm9yXVxyXG4iKTsK KworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9pcyIsZXJyYnVmLDApOworCisgICAg ICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICAgICAg dHRjbG9zKDApOworICAgICAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAg ICAgIHRuX2RlYnVnKCJbU1NMIC0gT0tdIik7CisgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9z aXR5ICkgeworICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIE9LXVxyXG4iKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9pcyIsIltTU0wgLSBPS10iLDAp OworICAgICAgICAgICAgc3NsX2FjdGl2ZV9mbGFnID0gMTsKKyAgICAgICAgICAgIHNzbF9kaXNw bGF5X2Nvbm5lY3RfZGV0YWlscyhzc2xfY29uLDEsdmVyYm9zaXR5KTsKKworICAgICAgICAgICAg Lyogbm93IGNoZWNrIHRvIHNlZSB0aGF0IHdlIGdvdCBleGFjdGx5IHdoYXQgd2UKKyAgICAgICAg ICAgICogd2FudGVkIGZyb20gdGhlIGNhbGxlciAuLi4gaWYgYSBjZXJ0aWZpY2F0ZSBpcworICAg ICAgICAgICAgKiByZXF1aXJlZCB0aGVuIHdlIG1ha2UgMTAwJSBzdXJlIHRoYXQgd2Ugd2VyZQor ICAgICAgICAgICAgKiBnaXZlbiBvbmUgZHVyaW5nIHRoZSBoYW5kc2hha2UgKGFzIGl0IGlzIGFu IG9wdGlvbmFsCisgICAgICAgICAgICAqIHBhcnQgb2YgU1NMKQorICAgICAgICAgICAgKi8KKwor I2lmZGVmIFNTTF9LUkI1CisgICAgICAgICAgICBpZiAoIHRsc19pc19rcmI1KDApICkgeworICAg ICAgICAgICAgICAgIGlmIChzc2xfY29uLT5rc3NsX2N0eC0+Y2xpZW50X3ByaW5jKQorICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzc2xfaXMgS1JCNSIsc3NsX2Nvbi0+a3NzbF9jdHgt PmNsaWVudF9wcmluYywwKTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIFNTTF9LUkI1 ICovCisgICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lG X05PX1BFRVJfQ0VSVCkgeworICAgICAgICAgICAgICAgIFg1MDkgKiBwZWVyID0gU1NMX2dldF9w ZWVyX2NlcnRpZmljYXRlKHNzbF9jb24pOworICAgICAgICAgICAgICAgIGlmIChwZWVyID09IE5V TEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAg ICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIHBlZXIgY2hlY2sgZmFpbGVkXSIpOwor ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIHBlZXIgY2hlY2sgZmFpbGVkXVxyXG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIiwiW1NTTCAtIHBlZXIgY2hlY2sg ZmFpbGVkXSIsMCk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogTE9HR0lORyBSRVFVSVJFRCBI RVJFISAqLworICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVU5LTk9X Tik7CisgICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOworICAgICAgICB9CisgICAgICAg IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgU2VuZFNTTEF1dGhTQihTU0xfUkVKRUNU LCAodm9pZCAqKSAiVW5rbm93biBvcHRpb24gcmVjZWl2ZWQiLCAtMSk7CisgICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBVbmtub3duIG9w dGlvbiByZWNlaXZlZF0iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJVbmtu b3duIFNTTCBvcHRpb24gJWRcclxuIiwgZGF0YVstMV0pOworICAgICAgICBkZWJ1ZyhGMTExLCJz c2xfaXMiLCJbU1NMIC0gVW5rbm93biBvcHRpb24gcmVjZWl2ZWRdIixkYXRhWy0xXSk7CisgICAg ICAgIGF1dGhfc3NsX3ZhbGlkID0gMDsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7CisgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgIH0KKyAgICByZXR1cm4gQVVU SF9TVUNDRVNTOworfQorCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworaW50Citj a190bl90bHNfbmVnb3RpYXRlKFZPSUQpCit7CisgICAgWDUwOSAqIHBlZXIgPSBOVUxMOworICAg IGNoYXIgc3RyWzI1Nl0sICp1aWQ9TlVMTDsKKyAgICBleHRlcm4gaW50IHNzdGVsbmV0OworCisg ICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKC0xKTsK KworICAgIHNldHZlcmJvc2l0eSgpOworICAgIGlmIChzc3RlbG5ldCkgeworICAgICAgICAvKiBz ZXJ2ZXIgc3RhcnRzIHRoZSBUTFMgc3R1ZmYgbm93IC4uLiAqLworICAgICAgICBpZiAoIXRsc19v bmx5X2ZsYWcpIHsKKyAgICAgICAgICAgIGlmICggIXRsc19sb2FkX2NlcnRzKHRsc19jdHgsdGxz X2NvbiwxKSApIHsKKyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0g aGFuZHNoYWtlIHN0YXJ0aW5nXSIpOworICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSAp CisgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4i KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0g aGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7CisKKyAgICAgICAgICAgIGlmIChzc2xfZHVtbXlfZmxh ZykgeworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAg ICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIER1bW15IENvbm5lY3RlZF0iKTsKKyAgICAgICAgICAg ICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYo IltUTFMgLSBEdW1teSBDb25uZWN0ZWRdXHJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIER1bW15 IENvbm5lY3RlZF0iLDApOworICAgICAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7Cisg ICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICAg ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChTU0xfYWNjZXB0 KHRsc19jb24pIDw9IDApIHsKKyAgICAgICAgICAgICAgICBjaGFyIGVycmJ1ZlsxMDI0XTsKKwor ICAgICAgICAgICAgICAgIHNwcmludGYoZXJyYnVmLCJbVExTIC0gU1NMX2FjY2VwdCBlcnJvcjog JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9l cnJvcigpLE5VTEwpKTsKKworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQor ICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZyhlcnJidWYpOworICAgICAgICAgICAgICAgIGVs c2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNc clxuIixlcnJidWYpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAg ICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBTU0xfYWNjZXB0IGVycm9yXVxyXG4iKTsK KworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLGVycmJ1 ZiwwKTsKKyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gT0tdIik7 CisgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkgeworICAgICAgICAgICAgICAgIHBy aW50ZigiW1RMUyAtIE9LXVxyXG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVi dWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBPS10iLDApOworICAgICAgICAg ICAgdGxzX2FjdGl2ZV9mbGFnID0gMTsKKyAgICAgICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3Rf ZGV0YWlscyh0bHNfY29uLDEsdmVyYm9zaXR5KTsKKworCisjaWZkZWYgU1NMX0tSQjUKKyAgICAg ICAgICAgIGlmICggdGxzX2lzX2tyYjUoMCkgKSB7CisgICAgICAgICAgICAgICAgaWYgKHRsc19j b24tPmtzc2xfY3R4LT5jbGllbnRfcHJpbmMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAq cDsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVBdXRoZW50aWNhdGVk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsc19jb24tPmtzc2xfY3R4LT5jbGll bnRfcHJpbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlEQlVGTEVOKTsKKyAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVSZXF1ZXN0ZWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGxzX2Nvbi0+a3NzbF9jdHgtPmNsaWVudF9wcmluYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSURCVUZMRU4pOworICAgICAgICAgICAg ICAgICAgICBmb3IgKCBwID0gc3pVc2VyTmFtZVJlcXVlc3RlZDsgKnAgOyBwKysgKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoICpwID09ICdAJyB8fCAqcCA9PSAnLycgKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAnXDAnOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3pV c2VyTmFtZVJlcXVlc3RlZFswXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgIHN6VXNlck5h bWVBdXRoZW50aWNhdGVkWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgQ0tf TE9HSU4KKyAgICAgICAgICAgICAgICBpZiAoenZ1c2VyKHN6VXNlck5hbWVSZXF1ZXN0ZWQpKQor ICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQpOworICAgICAgICAg ICAgICAgIGVsc2UKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgICAgICAgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBT U0xfS1JCNSAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgLyogbm93IGNoZWNrIHRvIHNl ZSB0aGF0IHdlIGdvdCBleGFjdGx5IHdoYXQgd2UKKyAgICAgICAgICAgICogd2FudGVkIGZyb20g dGhlIGNhbGxlciAuLi4gaWYgYSBjZXJ0aWZpY2F0ZSBpcworICAgICAgICAgICAgKiByZXF1aXJl ZCB0aGVuIHdlIG1ha2UgMTAwJSBzdXJlIHRoYXQgd2Ugd2VyZQorICAgICAgICAgICAgKiBnaXZl biBvbmUgZHVyaW5nIHRoZSBoYW5kc2hha2UgKGFzIGl0IGlzIGFuIG9wdGlvbmFsCisgICAgICAg ICAgICAqIHBhcnQgb2YgVExTKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHBlZXI9U1NM X2dldF9wZWVyX2NlcnRpZmljYXRlKHRsc19jb24pOworICAgICAgICAgICAgaWYgKHBlZXIgPT0g TlVMTCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIlNTTF9nZXRfcGVlcl9jZXJ0aWZp Y2F0ZSgpID09IE5VTEwiLCIiLDApOworICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVU SF9SRUpFQ1QpOworICAgICAgICAgICAgICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVS SUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bl9k ZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBw ZWVyIGNoZWNrIGZhaWxlZF0iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3NsX2Rl YnVnX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIHBlZXIg Y2hlY2sgZmFpbGVkXVxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImNrX3RuX3Rs c19uZWdvdGlhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIltUTFMgLSBwZWVyIGNo ZWNrIGZhaWxlZF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgLyogTE9HR0lORyBSRVFVSVJF RCBIRVJFISAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJT U0xfZ2V0X3BlZXJfY2VydGlmaWNhdGUoKSAhPSBOVUxMIiwiIiwwKTsKKyAgICAgICAgICAgICAg ICBYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShwZWVyKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfY29tbW9uTmFt ZSxzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg ICAgICBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAt IGNvbW1vbk5hbWU9JXNdXHJcbiIsc3RyKTsKKworICAgICAgICAgICAgICAgIFg1MDlfTkFNRV9n ZXRfdGV4dF9ieV9OSUQoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXIpLAorI2lmbmRlZiBOSURf eDUwMFVuaXF1ZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOSURfdW5pcXVlSWRlbnRpZmllciwKKyNlbHNlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTklEX3g1MDBVbmlxdWVJZGVudGlmaWVyLAorI2VuZGlm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgaWYgKCB2ZXJi b3NpdHkgKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSB1bmlxdWVJZGVudGlm aWVyPSVzXVxyXG4iLHN0cik7CisKKyAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZGV0ZXJtaW5l IHVzZXIgbmFtZSAqLworICAgICAgICAgICAgICAgIHVpZCA9IHRsc191c2VyaWRfZnJvbV9jbGll bnRfY2VydCh0bHNfY29uKTsKKyAgICAgICAgICAgICAgICBpZiAoIHVpZCApIHsKKyAgICAgICAg ICAgICAgICAgICAgLyogVGhpcyBjb2RlIGlzIHZlcnkgcXVlc3Rpb25hYmxlLgorICAgICAgICAg ICAgICAgICAgICAgKiBIb3cgc2hvdWxkIGl0IGJlaGF2ZT8KKyAgICAgICAgICAgICAgICAgICAg ICogVGhlIGNsaWVudCBoYXMgcHJlc2VudGVkIGEgY2VydGlmaWNhdGUgdGhhdAorICAgICAgICAg ICAgICAgICAgICAgKiBjb250YWlucyBhIHVzZXJuYW1lLiAgV2UgaGF2ZSB2YWxpZGF0ZWQgdGhl CisgICAgICAgICAgICAgICAgICAgICAqIGNlcnRpZmljYXRlIGJ1dCB3ZSBkbyBub3QgYXV0b21h dGljYWxseQorICAgICAgICAgICAgICAgICAgICAgKiBsb2cgdGhlIHVzZXIgaW4gdW5sZXNzIHRo ZXJlIGlzIGEgLnRsc2xvZ2luCisgICAgICAgICAgICAgICAgICAgICAqIGZpbGUuCisgICAgICAg ICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzelVzZXJO YW1lUmVxdWVzdGVkLHVpZCxVSURCVUZMRU4pOworI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAg ICAgICAgICAgIGlmICh6dnVzZXIodWlkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9WQUxJRCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAv KiBDS19MT0dJTiAqLworICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1VTRVIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgc3pVc2VyTmFtZVJlcXVlc3RlZFswXSA9ICdcMCc7CisgICAgICAgICAg ICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg ICAgICAgIGNoYXIgKiBzdHI9TlVMTDsKKworICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykK KyAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIpOworICAg ICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIGhh bmRzaGFrZSBzdGFydGluZ11cclxuIik7CisgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19u ZWdvdGlhdGUiLCJbVExTIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7CisKKyAgICAgICAgLyog cmlnaHQgLi4uIG5vdyB3ZSBkcm9wIGludG8gdGhlIFNTTCBsaWJyYXJ5ICovCisgICAgICAgIGlm ICghdGxzX29ubHlfZmxhZykgeworICAgICAgICAgICAgY2hhciAqc3ViamVjdD1OVUxMLCAqaXNz dWVyPU5VTEwsICpjb21tb25OYW1lPU5VTEwsICpkTlNOYW1lPU5VTEw7CisKKyAgICAgICAgICAg IGlmIChzc2xfZHVtbXlfZmxhZykgeworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQorICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIER1bW15IENvbm5lY3Rl ZF0iKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkgeworICAgICAgICAg ICAgICAgICAgICBwcmludGYoIltUTFMgLSBEdW1teSBDb25uZWN0ZWRdXHJcbiIpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3Rp YXRlIiwiW1RMUyAtIER1bW15IENvbm5lY3RlZF0iLDApOworICAgICAgICAgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9 IDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisKKyNpZm5kZWYg VVNFX0NFUlRfQ0IKKyAgICAgICAgICAgIGlmICghdGxzX2xvYWRfY2VydHModGxzX2N0eCx0bHNf Y29uLDApKQorICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogVVNFX0NFUlRf Q0IgKi8KKyAgICAgICAgICAgIGlmIChTU0xfY29ubmVjdCh0bHNfY29uKSA8PSAwKSB7CisgICAg ICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykgeworICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKKyAg ICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAg ICAgICAgICAgbGVuID0gQklPX3JlYWQoYmlvX2Vycixzc2xfZXJyLFNTTF9FUlJfQkZTWik7Cisg ICAgICAgICAgICAgICAgICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NM X0VSUl9CRlNaXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zihzc2xfZXJyKTsK KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB2ZXJib3NpdHkgKSB7CisgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7CisgICAgICAgICAgICAgICAgICAg IEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisgICAgICAgICAgICAgICAgICAgIGxlbiA9IEJJ T19yZWFkKGJpb19lcnIsc3NsX2VycixTU0xfRVJSX0JGU1opOworICAgICAgICAgICAgICAgICAg ICBzc2xfZXJyW2xlbiA8IFNTTF9FUlJfQkZTWiA/IGxlbiA6IFNTTF9FUlJfQkZTWl0gPSAnXDAn OworICAgICAgICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExT IC0gRkFJTEVEXSIsMCk7CisgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAgICAg ICAgICB0bHNfYWN0aXZlX2ZsYWcgPSAxOworICAgICAgICAgICAgaWYgKCAhc3NsX2NlcnRzb2tf ZmxhZyAmJiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9QRUVSKQorICAgICAgICAgICAg ICAgICAmJiAhdGxzX2lzX2tyYjUoMCkpIHsKKyAgICAgICAgICAgICAgICBjaGFyIHBybXB0WzEw MjRdOworICAgICAgICAgICAgICAgIHN1YmplY3QgPSBzc2xfZ2V0X3N1YmplY3RfbmFtZSh0bHNf Y29uKTsKKworICAgICAgICAgICAgICAgIGlmICghc3ViamVjdCkgeworICAgICAgICAgICAgICAg ICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VS VCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltU TFMgLSBGQUlMRURdIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9z aXR5ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURd XHJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25l Z290aWF0ZSIsIltUTFMgLSBGQUlMRURdIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1 dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG9rOworICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSB1cV9vaygiV2FybmluZzog U2VydmVyIGRpZG4ndCBwcm92aWRlIGEgY2VydGlmaWNhdGUiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiQ29udGludWU/IChZL04pIiwgMywgTlVMTCwgMCk7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRu X2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJja190bl90bHNf bmVnb3RpYXRlIiwiW1RMUyAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX2NoZWNrX3NlcnZlcl9uYW1l KHRsc19jb24sIHN6SG9zdE5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIg fHwgZGVic2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlM RURdIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKKyAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJja190 bl90bHNfbmVnb3RpYXRlIiwiW1RMUyAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAgICAg ICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg KCBzc2xfZGVidWdfZmxhZyAmJiBzc2xfZmluaXNoZWRfbWVzc2FnZXMpIHsKKyAgICAgICAgICAg ICAgICBjaGFyIG1zZ1szMl07CisgICAgICAgICAgICAgICAgaW50IGksIGxlbj0zMjsKKyAgICAg ICAgICAgICAgICBleHRlcm4gY2hhciB0bl9tc2dbXSwgaGV4YnVmW107CisKKyAgICAgICAgICAg ICAgICB0bl9tc2dbMF0gPSAnXDAnOworICAgICAgICAgICAgICAgIGxlbiA9IHNzbF9nZXRfY2xp ZW50X2ZpbmlzaGVkKG1zZyxsZW4pOworICAgICAgICAgICAgICAgIGlmICggbGVuID4gMCApIHsK KyAgICAgICAgICAgICAgICAgICAgZm9yICggaT0wO2k8bGVuO2krKyApIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHNwcmludGYoaGV4YnVmLCIlMDJYICIsbXNnW2ldKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csaGV4YnVmLFROX01TR19MRU4pOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVExTIGNsaWVudCBm aW5pc2hlZDogJXNcclxuIix0bl9tc2cpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB0bl9tc2dbMF0gPSAnXDAnOworICAgICAgICAgICAgICAgIGxlbiA9IHNzbF9nZXRfc2Vy dmVyX2ZpbmlzaGVkKG1zZyxsZW4pOworICAgICAgICAgICAgICAgIGlmICggbGVuID4gMCApIHsK KyAgICAgICAgICAgICAgICAgICAgZm9yICggaT0wO2k8bGVuO2krKyApIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHNwcmludGYoaGV4YnVmLCIlMDJYICIsbXNnW2ldKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csaGV4YnVmLFROX01TR19MRU4pOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVExTIHNlcnZlciBm aW5pc2hlZDogJXNcclxuIix0bl9tc2cpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAg dG5fZGVidWcoIltUTFMgLSBPS10iKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkg KQorICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIE9LXVxyXG4iKTsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gT0tdIiwwKTsKKworICAg ICAgICAgICAgc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzKHRsc19jb24sMCx2ZXJib3NpdHkp OworICAgICAgICB9CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgIH0K KyAgICBhY2NlcHRfY29tcGxldGUgPSAxOworICAgIGF1dGhfc3NsX3ZhbGlkID0gMTsKKyAgICBy ZXR1cm4oMCk7Cit9CisKK2ludAorY2tfc3NsX2luY29taW5nKGZkKSBpbnQgZmQ7Cit7CisgICAg LyogaWYgd2UgYXJlIG5vdCBydW5uaW5nIGluIGRlYnVnIHRoZW4gYW55IGVycm9yCisgICAgKiBz dHVmZiBmcm9tIFNTTCBkZWJ1ZyAqbXVzdCogbm90IGdvIGRvd24KKyAgICAqIHRoZSBzb2NrZXQg KHdoaWNoIDAsMSwyIGFyZSBhbGwgcG9pbnRpbmcgdG8gYnkKKyAgICAqIGRlZmF1bHQpCisgICAg Ki8KKworICAgIGludCB0aW1vID0gMjAwMDsKKworICAgIHNldHZlcmJvc2l0eSgpOworICAgIGlm ICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigtMSk7CisKKyAg ICAvKiBkbyB0aGUgU1NMIHN0dWZmIG5vdyAuLi4gYmVmb3JlIHdlIHBsYXkgd2l0aCBwdHkncyAq LworICAgIFNTTF9zZXRfZmQoc3NsX2NvbixmZCk7CisgICAgU1NMX3NldF9mZCh0bHNfY29uLGZk KTsKKworICAgIGlmICh0bHNfb25seV9mbGFnKSB7CisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQorICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddIik7 CisgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgcHJpbnRmKCJbVExT IC0gaGFuZHNoYWtlIHN0YXJ0aW5nXVxyXG4iKTsKKyAgICAgICAgZGVidWcoRjExMCwiY2tfc3Ns X2luY29taW5nIiwiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ10iLDApOworCisgICAgICAgIC8q IGhtbSAuLi4gb25seSB3aGVuIHJ1bm5pbmcgdGFsa2luZyB0byB0aGluZ3MgbGlrZQorICAgICAg ICAqIGh0dHBzIHNlcnZlcnMgc2hvdWxkIHdlIGhpdCB0aGlzIGNvZGUgYW5kIHRoZW4KKyAgICAg ICAgKiB3ZSByZWFsbHkgZG9uJ3QgY2FyZSAqd2hvKiB3ZSB0YWxrIHRvIDotKQorICAgICAgICAq LworICAgICAgICBpZiAoU1NMX2FjY2VwdCh0bHNfY29uKSA8PSAwKSB7CisgICAgICAgICAgICBj aGFyIGVycmJ1ZlsxMDI0XTsKKworICAgICAgICAgICAgc3ByaW50ZihlcnJidWYsIltUTFMgLSBT U0xfYWNjZXB0IGVycm9yOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3Ry aW5nKEVSUl9nZXRfZXJyb3IoKSxOVUxMKSk7CisKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKQorICAgICAgICAgICAgICAgIHRuX2RlYnVnKGVycmJ1Zik7CisgICAgICAgICAgICBl bHNlIGlmICggc3NsX2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgIHByaW50ZigiJXNcclxu IixlcnJidWYpOworICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAg ICAgICAgcHJpbnRmKCJbVExTIC0gU1NMX2FjY2VwdCBlcnJvcl1cclxuIik7CisKKyAgICAgICAg ICAgIGRlYnVnKEYxMTAsImNrX3NzbF9pbmNvbWluZyIsZXJyYnVmLDApOworICAgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKQorICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gT0tdIik7CisgICAgICAg ICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAgICBwcmludGYoIltUTFMg LSBPS11cclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfaW5jb21pbmciLCJb VExTIC0gT0tdIiwwKTsKKyAgICAgICAgICAgIHRsc19hY3RpdmVfZmxhZyA9IDE7CisgICAgICAg IH0KKyAgICB9IGVsc2UgaWYgKHNzbF9vbmx5X2ZsYWcpIHsKKyAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpCisgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGlu Z10iKTsKKyAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICBwcmludGYo IltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddXHJcbiIpOworICAgICAgICBkZWJ1ZyhGMTEwLCJj a19zc2xfaW5jb21pbmciLCJbU1NMIC0gaGFuZHNoYWtlIHN0YXJ0aW5nXSIsMCk7CisKKyAgICAg ICAgLyogaG1tIC4uLiBvbmx5IHdoZW4gcnVubmluZyB0YWxraW5nIHRvIHRoaW5ncyBsaWtlCisg ICAgICAgICAqIGh0dHBzIHNlcnZlcnMgc2hvdWxkIHdlIGhpdCB0aGlzIGNvZGUgYW5kIHRoZW4K KyAgICAgICAgICogd2UgcmVhbGx5IGRvbid0IGNhcmUgKndobyogd2UgdGFsayB0byA6LSkKKyAg ICAgICAgICovCisgICAgICAgIGlmIChTU0xfYWNjZXB0KHNzbF9jb24pIDw9IDApIHsKKyAgICAg ICAgICAgIGNoYXIgZXJyYnVmWzEwMjRdOworCisgICAgICAgICAgICBzcHJpbnRmKGVycmJ1Ziwi W1NTTCAtIFNTTF9hY2NlcHQgZXJyb3I6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEVSUl9l cnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLE5VTEwpKTsKKworICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVidWcoZXJyYnVmKTsKKyAgICAg ICAgICAgIGVsc2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAgcHJpbnRm KCIlc1xyXG4iLGVycmJ1Zik7CisgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAg ICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBTU0xfYWNjZXB0IGVycm9yXVxyXG4iKTsKKwor ICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX2luY29taW5nIixlcnJidWYsMCk7CisgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBPS10iKTsK KyAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAgICAgcHJpbnRmKCJb U1NMIC0gT0tdXHJcbiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwic3NsX2lzIiwiW1NTTCAt IE9LXSIsMCk7CisgICAgICAgICAgICBzc2xfYWN0aXZlX2ZsYWcgPSAxOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisgICAg ICAgIFg1MDkgKnBlZXI7CisgICAgICAgIGNoYXIgc3RyWzI1Nl0sICp1aWQ9TlVMTDsKKworICAg ICAgICAvKiBub3cgY2hlY2sgdG8gc2VlIHRoYXQgd2UgZ290IGV4YWN0bHkgd2hhdCB3ZQorICAg ICAgICAgKiB3YW50ZWQgZnJvbSB0aGUgY2FsbGVyIC4uLiBpZiBhIGNlcnRpZmljYXRlIGlzCisg ICAgICAgICAqIHJlcXVpcmVkIHRoZW4gd2UgbWFrZSAxMDAlIHN1cmUgdGhhdCB3ZSB3ZXJlCisg ICAgICAgICAqIGdpdmVuIG9uIGR1cmluZyB0aGUgaGFuZHNoYWtlIChhcyBpdCBpcyBhbiBvcHRp b25hbAorICAgICAgICAgKiBwYXJ0IG9mIFNTTCBhbmQgVExTKQorICAgICAgICAgKi8KKworICAg ICAgICBpZiAoIHRsc19hY3RpdmVfZmxhZyApIHsKKyAgICAgICAgICAgIHBlZXI9U1NMX2dldF9w ZWVyX2NlcnRpZmljYXRlKHRsc19jb24pOworICAgICAgICB9IGVsc2UgaWYgKCBzc2xfYWN0aXZl X2ZsYWcgKSB7CisgICAgICAgICAgICBwZWVyPVNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2xf Y29uKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVyID09IE5VTEwpIHsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsIlNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZSgpID09IE5VTEwiLCIiLDAp OworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisKKyAgICAgICAgICAg IGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKSB7 CisgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAg ICAgIHRuX2RlYnVnKCJbU1NML1RMUyAtIHBlZXIgY2hlY2sgZmFpbGVkXSIpOworICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiW1NTTC9UTFMgLSBwZWVyIGNoZWNrIGZhaWxlZF1cclxuIik7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsCisgICAgICAgICAgICAgICAgICAgICAg ICJja190bl90bHNfbmVnb3RpYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIltTU0wvVExT IC0gcGVlciBjaGVjayBmYWlsZWRdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgMAorICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIC8qIExPR0dJTkcgUkVRVUlSRUQg SEVSRSEgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsIlNTTF9nZXRfcGVlcl9jZXJ0 aWZpY2F0ZSgpICE9IE5VTEwiLCIiLDApOworICAgICAgICAgICAgWDUwOV9OQU1FX2dldF90ZXh0 X2J5X05JRChYNTA5X2dldF9zdWJqZWN0X25hbWUocGVlciksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOSURfY29tbW9uTmFtZSxzdHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyNTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICBwcmludGYoIltUTFMgLSBjb21tb25OYW1lPSVzXVxy XG4iLHN0cik7CisKKyAgICAgICAgICAgIFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoWDUwOV9n ZXRfc3ViamVjdF9uYW1lKHBlZXIpLAorI2lmbmRlZiBOSURfeDUwMFVuaXF1ZUlkZW50aWZpZXIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JRF91bmlxdWVJZGVudGlm aWVyLAorI2Vsc2UgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5J RF94NTAwVW5pcXVlSWRlbnRpZmllciwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RyLDI1NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIHVuaXF1ZUlkZW50aWZpZXI9JXNd XHJcbiIsc3RyKTsKKworICAgICAgICAgICAgLyogVHJ5IHRvIGRldGVybWluZSB1c2VyIG5hbWUg Ki8KKyAgICAgICAgICAgIHVpZCA9IHRsc191c2VyaWRfZnJvbV9jbGllbnRfY2VydCh0bHNfY29u KTsKKyAgICAgICAgICAgIGlmICggdWlkICkgeworICAgICAgICAgICAgICAgIC8qIFRoaXMgY29k ZSBpcyB2ZXJ5IHF1ZXN0aW9uYWJsZS4KKyAgICAgICAgICAgICAgICAqIEhvdyBzaG91bGQgaXQg YmVoYXZlPworICAgICAgICAgICAgICAgICogVGhlIGNsaWVudCBoYXMgcHJlc2VudGVkIGEgY2Vy dGlmaWNhdGUgdGhhdAorICAgICAgICAgICAgICAgICogY29udGFpbnMgYSB1c2VybmFtZS4gIFdl IGhhdmUgdmFsaWRhdGVkIHRoZQorICAgICAgICAgICAgICAgICogY2VydGlmaWNhdGUgYnV0IHdl IGRvIG5vdCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgKiBsb2cgdGhlIHVzZXIgaW4g dW5sZXNzIHRoZXJlIGlzIGEgLnRsc2xvZ2luCisgICAgICAgICAgICAgICAgKiBmaWxlLgorICAg ICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZVJl cXVlc3RlZCx1aWQsVUlEQlVGTEVOKTsKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAgICAgICAg IGlmICh6dnVzZXIodWlkKSkKKyAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1ZBTElEKTsKKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAg ICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3pVc2VyTmFtZVJlcXVlc3Rl ZFswXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDApOyAgLyogc3Vj Y2VzcyAqLworfQorCitpbnQKK2NrX3NzbF9vdXRnb2luZyhmZCkgaW50IGZkOworeworICAgIGlu dCB0aW1vID0gMjAwMDsKKworICAgIHNldHZlcmJvc2l0eSgpOworICAgIGlmICggIWNrX3NzbGVh eV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICAvKiBiaW5kIGlu IHRoZSBuZXR3b3JrIGRlc2NyaXB0b3IgKi8KKyAgICBTU0xfc2V0X2ZkKHNzbF9jb24sZmQpOwor ICAgIFNTTF9zZXRfZmQodGxzX2NvbixmZCk7CisKKyAgICAvKiBJZiB3ZSBhcmUgZG9pbmcgcmF3 IFRMUyB0aGVuIHN0YXJ0IGl0IG5vdyAuLi4gKi8KKyAgICBpZiAodGxzX29ubHlfZmxhZykgewor I2lmbmRlZiBVU0VfQ0VSVF9DQgorICAgICAgICBpZiAoIXRsc19sb2FkX2NlcnRzKHRsc19jdHgs dGxzX2NvbiwwKSkgeworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwi dGxzX2xvYWRfY2VydHMoKSBmYWlsZWQiLDApOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIFVTRV9DRVJUX0NCICovCisgICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKQorICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmdd Iik7CisgICAgICAgIGVsc2UgaWYgKHZlcmJvc2l0eSkKKyAgICAgICAgICAgIHByaW50ZigiW1RM UyAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7CisgICAgICAgIGRlYnVnKEYxMTAsImNrX3Nz bF9vdXRnb2luZyIsIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsKKyAgICAgICAgaWYg KFNTTF9jb25uZWN0KHRsc19jb24pIDw9IDApIHsKKyAgICAgICAgICAgIGNoYXIgZXJyYnVmWzEw MjRdOworCisgICAgICAgICAgICBzcHJpbnRmKGVycmJ1ZiwiW1RMUyAtIFNTTF9jb25uZWN0IGVy cm9yOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRf ZXJyb3IoKSxOVUxMKSk7CisKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAg ICAgICAgICAgICAgIHRuX2RlYnVnKGVycmJ1Zik7CisgICAgICAgICAgICBlbHNlIGlmICggc3Ns X2RlYnVnX2ZsYWcgKQorICAgICAgICAgICAgICAgIHByaW50ZigiJXNcclxuIixlcnJidWYpOwor CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICB0bl9k ZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkg KQorICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7CisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmciLCJbVExTIC0gRkFJTEVEXSIsMCk7Cisg ICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgdGxzX2FjdGl2ZV9mbGFnID0gMTsKKyAgICAgICAgICAgIGlm ICggIXNzbF9jZXJ0c29rX2ZsYWcgJiYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfUEVF UikgJiYgCisgICAgICAgICAgICAgICAgICF0bHNfaXNfa3JiNSgwKSApIHsKKyAgICAgICAgICAg ICAgICBjaGFyICpzdWJqZWN0ID0gc3NsX2dldF9zdWJqZWN0X25hbWUodGxzX2Nvbik7CisKKyAg ICAgICAgICAgICAgICBpZiAoIXN1YmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNz bF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpCisgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVE XSIpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJb VExTIC0gRkFJTEVEXSIsMCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNo ZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBw cm1wdFsxMDI0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvazsKKyAgICAgICAgICAg ICAgICAgICAgICAgIG9rID0gdXFfb2soIldhcm5pbmc6IFNlcnZlciBkaWRuJ3QgcHJvdmlkZSBh IGNlcnRpZmljYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRp bnVlPyAoWS9OKSIsIDMsIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFv aykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0i KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExTIC0gRkFJTEVEXVxyXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBGQUlM RURdIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhf UkVKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKHNzbF9jaGVja19zZXJ2ZXJfbmFtZSh0bHNfY29uLCBzekhvc3ROYW1lKSkg eworICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAg ICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOworICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMg LSBGQUlMRURdIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JF SkVDVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAg ICAgICAgICAgICB0bl9kZWJ1ZygiW1RMUyAtIE9LXSIpOworICAgICAgICAgICAgZWxzZSBpZiAo IXF1aWV0KQorCQlwcmludGYoIltUTFMgLSBPS11cclxuIik7CisgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJja19zc2xfb3V0Z29pbmciLCJbVExTIC0gT0tdIiwwKTsKKyAgICAgICAgICAgIHNzbF9k aXNwbGF5X2Nvbm5lY3RfZGV0YWlscyh0bHNfY29uLDAsdmVyYm9zaXR5KTsKKyAgICAgICAgfQor ICAgIH0KKyAgICAvKiBpZiB3ZSBhcmUgZG9pbmcgcmF3IFNTTCB0aGVuIHN0YXJ0IGl0IG5vdyAu Li4gKi8KKyAgICBlbHNlIGlmIChzc2xfb25seV9mbGFnKSB7CisjaWZuZGVmIFVTRV9DRVJUX0NC CisgICAgICAgIGlmICghdGxzX2xvYWRfY2VydHMoc3NsX2N0eCxzc2xfY29uLDApKQorICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBVU0VfQ0VSVF9DQiAqLworICAgICAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgIHRuX2RlYnVnKCJbU1NMIC0gaGFuZHNoYWtl IHN0YXJ0aW5nXSIpOworICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAg IHByaW50ZigiW1NTTCAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7CisgICAgICAgIGRlYnVn KEYxMTAsImNrX3NzbF9vdXRnb2luZyIsIltTU0wgLSBoYW5kc2hha2Ugc3RhcnRpbmddIiwwKTsK KyAgICAgICAgaWYgKFNTTF9jb25uZWN0KHNzbF9jb24pIDw9IDApIHsKKyAgICAgICAgICAgIGlm ICggc3NsX2RlYnVnX2ZsYWcgKSB7CisgICAgICAgICAgICAgICAgY2hhciBlcnJidWZbMTAyNF07 CisKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGVycmJ1ZiwiW1NTTCAtIFNTTF9jb25uZWN0IGVy cm9yOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRVJSX2Vycm9yX3N0cmluZyhFUlJf Z2V0X2Vycm9yKCksTlVMTCkpOworICAgICAgICAgICAgICAgIHByaW50ZigiJXNcclxuIixlcnJi dWYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisg ICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBGQUlMRURdIik7CisgICAgICAgICAgICBl bHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAgICBwcmludGYoIltTU0wgLSBGQUlM RURdXHJcbiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfc3NsX291dGdvaW5nIiwiW1NT TCAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHNzbF9hY3RpdmVfZmxhZyA9IDE7CisKKyAgICAgICAgICAgIGlmICgg IXNzbF9jZXJ0c29rX2ZsYWcgJiYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfUEVFUikg JiYKKyAgICAgICAgICAgICAgICAgIXRsc19pc19rcmI1KDApKSB7CisgICAgICAgICAgICAgICAg Y2hhciAqc3ViamVjdCA9IHNzbF9nZXRfc3ViamVjdF9uYW1lKHNzbF9jb24pOworCisgICAgICAg ICAgICAgICAgaWYgKCFzdWJqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzc2xfdmVy aWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUKQorICAgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIEZBSUxFRF0iKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB2ZXJib3NpdHkgKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIEZBSUxFRF1cclxuIik7CisgICAgICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl90bHNfbmVnb3RpYXRlIiwiW1NTTCAt IEZBSUxFRF0iLDApOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFV VEhfUkVKRUNUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJtcHRb MTAyNF07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2s7CisgICAgICAgICAgICAgICAg ICAgICAgICBvayA9IHVxX29rKCJXYXJuaW5nOiBTZXJ2ZXIgZGlkbid0IHByb3ZpZGUgYSBjZXJ0 aWZpY2F0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250aW51ZT8g KFkvTikiLCAzLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2spIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltTU0wgLSBGQUlMRURdIik7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiW1NTTCAtIEZBSUxFRF1cclxuIik7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbU1NMIC0gRkFJTEVEXSIs MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl bHNlIGlmIChzc2xfY2hlY2tfc2VydmVyX25hbWUoc3NsX2Nvbiwgc3pIb3N0TmFtZSkpIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAg ICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIEZBSUxFRF0iKTsKKyAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltT U0wgLSBGQUlMRURdXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCAiY2tf dG5fdGxzX25lZ290aWF0ZSIsIltTU0wgLSBGQUlMRURdIiwwKTsKKyAgICAgICAgICAgICAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy biAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAgICB0bl9kZWJ1ZygiW1NTTCAtIE9LXSIp OworCSAgICBlbHNlIGlmICghcXVpZXQpCisJICAgICAgICBwcmludGYoIltTU0wgLSBPS11cclxu Iik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmciLCJbU1NMIC0gT0td IiwwKTsKKyAgICAgICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWlscyhzc2xfY29uLDAs dmVyYm9zaXR5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7ICAvKiBzdWNjZXNz ICovCit9CisKKyNpZm5kZWYgTk9IVFRQCitpbnQKK2NrX3NzbF9odHRwX2NsaWVudChmZCwgaG9z dG5hbWUpIGludCBmZDsgY2hhciAqIGhvc3RuYW1lOworeworICAgIGludCB0aW1vID0gMjAwMDsK KworICAgIGlmICggIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigt MSk7CisKKyAgICBzZXR2ZXJib3NpdHkoKTsKKworICAgIC8qIGJpbmQgaW4gdGhlIG5ldHdvcmsg ZGVzY3JpcHRvciAqLworICAgIFNTTF9zZXRfZmQodGxzX2h0dHBfY29uLGZkKTsKKworICAgIC8q IElmIHdlIGFyZSBkb2luZyByYXcgVExTIHRoZW4gc3RhcnQgaXQgbm93IC4uLiAqLworICAgIGlm ICgxKSB7CisjaWZuZGVmIFVTRV9DRVJUX0NCCisgICAgICAgIGlmICghdGxzX2xvYWRfY2VydHMo dGxzX2h0dHBfY3R4LHRsc19odHRwX2NvbiwwKSkgeworICAgICAgICAgICAgZGVidWcoRjExMCwi Y2tfc3NsX2h0dHBfY2xpZW50IiwidGxzX2xvYWRfY2VydHMoKSBmYWlsZWQiLDApOworICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFVTRV9DRVJUX0NCICovCisg ICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgdG5fZGVidWcoIltUTFMg LSBoYW5kc2hha2Ugc3RhcnRpbmddIik7CisgICAgICAgIGVsc2UgaWYgKHZlcmJvc2l0eSkKKyAg ICAgICAgICAgIHByaW50ZigiW1RMUyAtIGhhbmRzaGFrZSBzdGFydGluZ11cclxuIik7CisgICAg ICAgIGRlYnVnKEYxMTAsImNrX3NzbF9vdXRnb2luZyIsIltUTFMgLSBoYW5kc2hha2Ugc3RhcnRp bmddIiwwKTsKKyAgICAgICAgaWYgKFNTTF9jb25uZWN0KHRsc19odHRwX2NvbikgPD0gMCkgewor ICAgICAgICAgICAgY2hhciBlcnJidWZbMTAyNF07CisKKyAgICAgICAgICAgIHNwcmludGYoZXJy YnVmLCJbVExTIC0gU1NMX2Nvbm5lY3QgZXJyb3I6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAg IEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLE5VTEwpKTsKKworICAgICAgICAgICAg aWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgdG5fZGVidWcoZXJyYnVmKTsK KyAgICAgICAgICAgIGVsc2UgaWYgKCBzc2xfZGVidWdfZmxhZyApCisgICAgICAgICAgICAgICAg cHJpbnRmKCIlc1xyXG4iLGVycmJ1Zik7CisKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKQorICAgICAgICAgICAgICAgIHRuX2RlYnVnKCJbVExTIC0gRkFJTEVEXSIpOworICAgICAg ICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICAgICAgcHJpbnRmKCJbVExT IC0gRkFJTEVEXVxyXG4iKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3NzbF9odHRwX2Ns aWVudCIsIltUTFMgLSBGQUlMRURdIiwwKTsKKyAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0bHNf aHR0cF9hY3RpdmVfZmxhZyA9IDE7CisgICAgICAgICAgICBpZiAoICFzc2xfY2VydHNva19mbGFn ICYmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX1BFRVIpICYmCisgICAgICAgICAgICAg ICAgICF0bHNfaXNfa3JiNSgzKSApIHsKKyAgICAgICAgICAgICAgICBjaGFyICpzdWJqZWN0ID0g c3NsX2dldF9zdWJqZWN0X25hbWUodGxzX2h0dHBfY29uKTsKKworICAgICAgICAgICAgICAgIGlm ICghc3ViamVjdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX3ZlcmlmeV9mbGFnICYg U1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVCkKKyAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7CisgICAgICAgICAg ICAgICAgICAgICAgICBlbHNlIGlmICggdmVyYm9zaXR5ICkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIltUTFMgLSBGQUlMRURdXHJcbiIpOworICAgICAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwiY2tfdG5fdGxzX25lZ290aWF0ZSIsIltUTFMgLSBGQUlMRURdIiww KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJtcHRbMTAyNF07Cisg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2s7CisgICAgICAgICAgICAgICAgICAgICAgICBv ayA9IHVxX29rKCJXYXJuaW5nOiBTZXJ2ZXIgZGlkbid0IHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250aW51ZT8gKFkvTikiLCAz LCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2spIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG5fZGVidWcoIltUTFMgLSBGQUlMRURdIik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIEZBSUxFRF1cclxuIik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gRkFJTEVEXSIsMCk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz c2xfY2hlY2tfc2VydmVyX25hbWUodGxzX2h0dHBfY29uLCBob3N0bmFtZSkpIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgICAgICAg ICB0bl9kZWJ1ZygiW1RMUyAtIEZBSUxFRF0iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp ZiAoIHZlcmJvc2l0eSApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIltUTFMgLSBG QUlMRURdXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgImNrX3RuX3Rsc19uZWdvdGlhdGUiLCJbVExTIC0gRkFJTEVEXSIs MCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByaW50ZigiW1RMUyAtIE9LXVxyXG4iKTsKKyAg ICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgICAgIHRuX2RlYnVn KCJbVExTIC0gT0tdIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19zc2xfb3V0Z29pbmci LCJbVExTIC0gT0tdIiwwKTsKKyAgICAgICAgICAgIHNzbF9kaXNwbGF5X2Nvbm5lY3RfZGV0YWls cyh0bHNfaHR0cF9jb24sMCx2ZXJib3NpdHkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy bigwKTsgIC8qIHN1Y2Nlc3MgKi8KK30KKyNlbmRpZiAvKiBOT0hUVFAgKi8KK2ludAorY2tfc3Ns X3JlbmVnb3RpYXRlX2NpcGhlcnMoKQoreworCisgICAgaWYgKCAhY2tfc3NsZWF5X2lzX2luc3Rh bGxlZCgpICkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCAhc3N0ZWxuZXQgKQorICAg ICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIHNzbF9hY3RpdmVfZmxhZyApCisgICAgICAgIHJl dHVybiBTU0xfcmVuZWdvdGlhdGUoc3NsX2Nvbik7CisgICAgZWxzZSBpZiAoIHRsc19hY3RpdmVf ZmxhZyApCisgICAgICAgIHJldHVybiBTU0xfcmVuZWdvdGlhdGUodGxzX2Nvbik7CisgICAgcmV0 dXJuKDApOworfQorCisjaWZkZWYgTlQKK2ludCAKK2NrX1g1MDlfc2F2ZV9jZXJ0X3RvX3VzZXJf c3RvcmUoWDUwOSAqY2VydCkKK3sKKyNpZmRlZiBYNTA5VjNfRVhUX0RVTVBfVU5LTk9XTgorICAg IGNoYXIgcGF0aFtDS01BWFBBVEhdOworICAgIGNoYXIgaGFzaFsxNl07CisgICAgY2hhciAqIEdl dEFwcERhdGEoaW50KTsKKyAgICBCSU8gKiBvdXQ9TlVMTDsKKworICAgIGlmICggY2VydCA9PSBO VUxMICkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgc3ByaW50ZihoYXNoLCIlMDhseCIsWDUw OV9zdWJqZWN0X25hbWVfaGFzaChjZXJ0KSk7CisgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgs R2V0QXBwRGF0YSgwKSwia2VybWl0IDk1L2NlcnRzLyIsCisgICAgICAgICAgICAgaGFzaCwiLjAi KTsKKworICAgIAorICAgIG91dD1CSU9fbmV3KEJJT19zX2ZpbGUoKSk7CisgICAgaWYgKG91dCA9 PSBOVUxMKQorICAgIHsKKyAgICAgICAgRVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAg ICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoQklPX3dyaXRlX2ZpbGVuYW1lKG91dCxwYXRo KSA8PSAwKSB7CisgICAgICAgIHBlcnJvcihwYXRoKTsKKyAgICAgICAgcmV0dXJuKDApOworICAg IH0KKworICAgIFg1MDlfcHJpbnRfZXgob3V0LCBjZXJ0LCBYTl9GTEFHX1NFUF9NVUxUSUxJTkUs IFg1MDlWM19FWFRfRFVNUF9VTktOT1dOKTsKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fWDUwOShv dXQsY2VydCkpIHsKKyAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJ1bmFibGUgdG8gd3JpdGUg Y2VydGlmaWNhdGVcbiIpOworICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJpb19lcnIpOworICAg ICAgICBCSU9fZnJlZV9hbGwob3V0KTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBC SU9fZnJlZV9hbGwob3V0KTsKKyAgICByZXR1cm4oMSk7CisjZWxzZSAvKiBYNTA5VjNfRVhUX0RV TVBfVU5LTk9XTiAqLworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBYNTA5VjNfRVhUX0RVTVBf VU5LTk9XTiAqLworfQorI2VuZGlmIC8qIE5UICovCisKKyNpZm5kZWYgT1MyCisvKiBUaGUgZm9s bG93aW5nIGZ1bmN0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBpbnN0aXR1dGlvbiBzcGVjaWZp YyAqLworLyogY29kZSB0aGF0IHdpbGwgY29udmVydCBhbiBYNTA5IGNlcnQgc3RydWN0dXJlIHRv IGEgdXNlcmlkIGZvciB0aGUgKi8KKy8qIHB1cnBvc2VzIG9mIGNsaWVudCB0byBob3N0IGxvZ2lu LiAgVGhlIGV4YW1wbGUgY29kZSBpbmNsdWRlZCAgICAgICovCisvKiBzaW1wbHkgcmV0dXJucyB0 aGUgVUlEIGZpZWxkIG9mIHRoZSBTdWJqZWN0IGlmIGl0IGV4aXN0cy4gICAgICAgICAqLworCisv KiBYNTA5X3RvX3VzZXIoKSByZXR1cm5zIDAgaWYgdmFsaWQgdXNlcmlkIGluICd1c2VyaWQnLCBl bHNlIC0xICovCitpbnQKK1g1MDlfdG9fdXNlcihYNTA5ICpwZWVyX2NlcnQsIGNoYXIgKnVzZXJp ZCwgaW50IGxlbikKK3sKKyNpZmRlZiBYNTA5X1VJRF9UT19VU0VSCisgICAgLyogQkVHSU4gRVhB TVBMRSAqLworICAgIGludCBlcnI7CisKKyAgICBpZiAoIShwZWVyX2NlcnQgJiYgdXNlcmlkKSB8 fCBsZW4gPD0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgdXNlcmlkWzBdID0gJ1wwJzsK KyAgICBkZWJ1ZyhGMTEwLCJYNTA5X3RvX3VzZXIoKSBzdWJqZWN0IiwKKyAgICAgICAgICAgWDUw OV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXJfY2VydCksTlVMTCwwKSww KTsKKworICAgIC8qIHVzZXJpZCBpcyBpbiBjZXJ0IHN1YmplY3QgL1VJRCAqLworICAgIGVyciA9 IFg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXJfY2Vy dCksCisjaWZuZGVmIE5JRF94NTAwVW5pcXVlSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5JRF91bmlxdWVJZGVudGlmaWVyLAorI2Vsc2UKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSURfeDUwMFVuaXF1ZUlkZW50aWZpZXIsCisj ZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyaWQsIGxlbik7 CisKKyAgICBkZWJ1ZyhGMTExLCJYNTA5X3RvX3VzZXIoKSB1c2VyaWQiLHVzZXJpZCxlcnIpOwor ICAgIGlmIChlcnIgPiAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIEVORCBFWEFNUExF ICovCisjZWxzZSAvKiBYNTA5X1VJRF9UT19VU0VSICovCisjaWZkZWYgWDUwOV9TVUJKRUNUX0FM VF9OQU1FX1RPX1VTRVIKKyAgICAvKiBCRUdJTiBFWEFNUExFICovCisgICAgaW50IGk7CisgICAg WDUwOV9FWFRFTlNJT04gKmV4dCA9IE5VTEw7CisgICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSAq aWFsdCA9IE5VTEw7CisgICAgR0VORVJBTF9OQU1FICpnZW4gPSBOVUxMOworICAgIGNoYXIgZW1h aWxbMjU2XTsKKworICAgIGlmICghKHBlZXJfY2VydCAmJiB1c2VyaWQpIHx8IGxlbiA8PSAwKQor ICAgICAgICByZXR1cm4gLTE7CisKKyAgICB1c2VyaWRbMF0gPSAnXDAnOworICAgIGVtYWlsWzBd ID0gJ1wwJzsKKyAgICBkZWJ1ZyhGMTEwLCJYNTA5X3RvX3VzZXIoKSBzdWJqZWN0IiwKKyAgICAg ICAgICAgWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfc3ViamVjdF9uYW1lKHBlZXJfY2VydCks TlVMTCwwKSwwKTsKKworICAgIGlmICgoaSA9IFg1MDlfZ2V0X2V4dF9ieV9OSUQocGVlcl9jZXJ0 LCBOSURfc3ViamVjdF9hbHRfbmFtZSwgLTEpKTwwKQorICAgICAgICByZXR1cm4gLTE7CisgICAg aWYgKCEoZXh0ID0gWDUwOV9nZXRfZXh0KHBlZXJfY2VydCwgaSkpKQorICAgICAgICByZXR1cm4g LTE7CisgICAgWDUwOVYzX2FkZF9zdGFuZGFyZF9leHRlbnNpb25zKCk7CisgICAgaWYgKCEoaWFs dCA9IFg1MDlWM19FWFRfZDJpKGV4dCkpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZm9yIChp ID0gMDsgaSA8IHNrX0dFTkVSQUxfTkFNRV9udW0oaWFsdCk7IGkrKykgeworICAgICAgICBnZW4g PSBza19HRU5FUkFMX05BTUVfdmFsdWUoaWFsdCwgaSk7CisgICAgICAgIGlmIChnZW4tPnR5cGUg PT0gR0VOX0ROUykgeworICAgICAgICAgICAgaWYgKCFnZW4tPmQuaWE1IHx8ICFnZW4tPmQuaWE1 LT5sZW5ndGgpCisJICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RybGVuKGdlbi0+ZC5p YTUtPmRhdGEpICE9IGdlbi0+ZC5pYTUtPmxlbmd0aCkgeworICAgICAgICAgICAgICAgIC8qIEln bm9yaW5nIElBNVN0cmluZyBjb250YWluaW5nIG51bGwgY2hhcmFjdGVyICovCisgICAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGdlbi0+ZC5p YTUtPmxlbmd0aCArIDEgPiBzaXplb2YoZW1haWwpICkgeworICAgICAgICAgICAgICAgIGdvdG8g Y2xlYW51cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShlbWFpbCwgZ2VuLT5k LmlhNS0+ZGF0YSwgZ2VuLT5kLmlhNS0+bGVuZ3RoKTsKKyAgICAgICAgICAgIGVtYWlsW2dlbi0+ ZC5pYTUtPmxlbmd0aF0gPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9 CisgIGNsZWFudXA6CisgICAgWDUwOVYzX0VYVF9jbGVhbnVwKCk7CisgICAgaWYgKGlhbHQpCisg ICAgICAgIHNrX0dFTkVSQUxfTkFNRV9mcmVlKGlhbHQpOworCisgICAgZGVidWcoRjExMCwiWDUw OV90b191c2VyKCkgZW1haWwiLGVtYWlsLDApOworCisgICAgaWYgKCBlbWFpbFswXSApIHsKKyAg ICAgICAgY2hhciAqIGRvbWFpbiA9IE5VTEw7CisKKyAgICAgICAgLyogRmluZCBkb21haW4gKi8K KyAgICAgICAgZm9yICggaT0wIDsgZW1haWxbaV0gOyBpKysgKSB7CisgICAgICAgICAgICBpZiAo IGVtYWlsW2ldID09ICdAJyApIHsKKyAgICAgICAgICAgICAgICBlbWFpbFtpXSA9ICdcMCc7Cisg ICAgICAgICAgICAgICAgZG9tYWluID0gJmVtYWlsW2krMV07CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGRvbWFpbiApIHsK KyAgICAgICAgICAgIC8qIFhYWCAtIFB1dCBjb2RlIHRvIFZlcmlmeSBkb21haW4gaGVyZSAqLwor CisgICAgICAgICAgICBpZiAoIC8qIGRvbWFpbiBpcyBva2F5ICovIDEgKQorICAgICAgICAgICAg ICAgIGNrc3RybmNweSh1c2VyaWQsZW1haWwsbGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAg IHJldHVybih1c2VyaWRbMF0gPyAwIDogLTEpOworICAgIC8qIEVORCBFWEFNUExFICovCisjZW5k aWYgLyogWDUwOV9TVUJKRUNUX0FMVF9OQU1FX1RPX1VTRVIgKi8KKyNlbmRpZiAvKiBYNTA5X1VJ RF9UT19VU0VSICovCisgICAgcmV0dXJuIC0xOworfQorCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0 aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBpbnN0aXR1dGlvbiBzcGVjaWZpYyAqLworLyogY29k ZSB0aGF0IHdpbGwgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBjb21iaW5hdGlvbiBvZiB0 aGUgICAgKi8KKy8qIHByb3ZpZGVkIFg1MDkgY2VydGlmaWNhdGUgYW5kIHVzZXJuYW1lIGlzIHZh bGlkIGZvciBhdXRvbWF0aWMgICAgICovCisvKiBsb2dpbi4gICBXaGVyZWFzIFg1MDlfdG9fdXNl cigpIGlzIHVzZWQgdG8gcHJvdmlkZSBhdXRoZW50aWNhdGlvbiAqLworLyogb2YgdGhlIHVzZXIs IHRoZSBYNTA5X3VzZXJvaygpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSAgICAgICAgKi8K Ky8qIGF1dGhvcml6YXRpb24uICBUaGUgY2VydGlmaWNhdGUgcGFzc2VkIGludG8gWDUwOV91c2Vy b2soKSBkb2VzICAgICovCisvKiBuZWVkIHRvIG1hcCB0byBhIHVzZXJpZDsgbm9yIHdvdWxkIHRo ZSB1c2VyaWQgaXQgd291bGQgbWFwIHRvICAgICAqLworLyogbmVlZCB0byBtYXRjaCB0aGUgdXNl cmlkIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbi4gIFRoZXJlIGFyZSAgICAgKi8KKy8qIG51bWVy b3VzIGNpcmN1bXN0YW5jZXMgaW4gd2hpY2ggaXQgaXMgYmVuZWZpY2lhbCB0byBoYXZlIHRoZSBh YmlsaXR5ICovCisvKiBmb3IgbXVsdGlwbGUgdXNlcnMgdG8gZ2FpbiBhY2Nlc3MgdG8gYSBjb21t b24gYWNjb3VudCBzdWNoIGFzICAgICAqLworLyogJ3Jvb3QnIG9uIFVuaXg7IG9yIGEgY2xhc3Mg YWNjb3VudCBvbiBhIHdlYiBzZXJ2ZXIuICBJbiBVbml4IHdlICAgKi8KKy8qIGltcGxlbWVudCB0 aGlzIGNhcGFiaWxpdHkgd2l0aCB0aGUgfnVzZXJpZC8udGxzbG9naW4gZmlsZSB3aGljaCAgICov CisvKiBhIGxpc3Qgb2YgWDUwOSBjZXJ0aWZpY2F0ZXMgd2hpY2ggbWF5IGJlIHVzZWQgdG8gYWNj ZXNzIHRoZSAgICAgICAqLworLyogYWNjb3VudCAndXNlcmlkJy4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogWDUwOV90b191c2VyKCkgcmV0 dXJucyAwIGlmIGFjY2VzcyBpcyBkZW5pZWQ7IDEgaXMgYWNjZXNzIGlzIHBlcm1pdHRlZCAqLwor aW50CitYNTA5X3VzZXJvayhYNTA5ICogcGVlcl9jZXJ0LCBjb25zdCBjaGFyICogdXNlcmlkKQor eworI2lmbmRlZiBWTVMKKyAgICAvKiBjaGVjayBpZiBjbGllbnRzIGNlcnQgaXMgaW4gInVzZXIi J3Mgfi8udGxzbG9naW4gZmlsZSAqLworICAgIGNoYXIgYnVmWzUxMl07CisgICAgaW50IHIgPSAw OworICAgIEZJTEUgKmZwOworICAgIHN0cnVjdCBwYXNzd2QgKnB3ZDsKKyAgICBYNTA5ICpmaWxl X2NlcnQ7CisKKyAgICBpZiAoIHBlZXJfY2VydCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKDAp OworCisgICAgaWYgKCEocHdkID0gZ2V0cHduYW0odXNlcmlkKSkpCisgICAgICAgcmV0dXJuIDA7 CisgICAgaWYgKHN0cmxlbihwd2QtPnB3X2RpcikgPiA1MDApCisgICAgICAgcmV0dXJuKDApOwor ICAgIHNwcmludGYoYnVmLCAiJXMvLnRsc2xvZ2luIiwgcHdkLT5wd19kaXIpOworCisgICAgaWYg KCEoZnAgPSBmb3BlbihidWYsICJyIikpKQorICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAo IXIgJiYgKGZpbGVfY2VydCA9IFBFTV9yZWFkX1g1MDkoZnAsIE5VTEwsIE5VTEwsIE5VTEwpKSkg eworICAgICAgICBpZiAoIUFTTjFfU1RSSU5HX2NtcChwZWVyX2NlcnQtPnNpZ25hdHVyZSwgZmls ZV9jZXJ0LT5zaWduYXR1cmUpKQorICAgICAgICAgICAgciA9IDE7CisgICAgICAgIFg1MDlfZnJl ZShmaWxlX2NlcnQpOworICAgIH0KKyAgICBmY2xvc2UoZnApOworICAgIHJldHVybihyKTsKKyNl bHNlIC8qIFZNUyAqLworICAgIC8qIE5lZWQgdG8gaW1wbGVtZW50IGFuIGFwcHJvcHJpYXRlIGZ1 bmN0aW9uIGZvciBWTVMgKi8KKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogVk1TICovCit9Cisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfU1NMICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja19zc2wuaCBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfc3NsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uOTdiNjU0NAotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2tfc3NsLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgIEMg SyBfIFMgUyBMIC4gSCAtLSAgT3BlblNTTCBJbnRlcmZhY2UgSGVhZGVyIGZvciBDLUtlcm1pdAor CisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAwNSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBV bml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2 ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJp Z2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlz c2lvbnMuCisKKyAgICBBdXRob3I6ICBKZWZmcmV5IEUgQWx0bWFuIChqYWx0bWFuQHNlY3VyZS1l bmRwb2ludHMuY29tKQorICAgICAgICAgICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcg WW9yayBDaXR5CisqLworCisjaWZkZWYgQ0tfU1NMCisjaWZuZGVmIENLX0FOU0lDCisjZGVmaW5l IE5PUFJPVE8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworCisjaWZkZWYgQ09NTUVOVCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IGZvciBDLUtlcm1pdCA3LjEgKi8KKyNpZmRlZiBLUkI1 CisjaWZuZGVmIE5PU1NMSzUKKyNpZm5kZWYgU1NMX0tSQjUKKyNkZWZpbmUgU1NMX0tSQjUKKyNl bmRpZiAvKiBTU0xfS1JCNSAqLworI2VuZGlmIC8qIE5PU1NMSzUgKi8KKyNlbmRpZiAvKiBLUkI1 ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgT1MyCisjaWZuZGVmIFpMSUIKKyNk ZWZpbmUgWkxJQgorI2VuZGlmIC8qIFpMSUIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVm IFpMSUIKKyNpbmNsdWRlIDxvcGVuc3NsL2NvbXAuaD4KKyNlbmRpZiAvKiBaTElCICovCisvKiBX ZSBwbGFjZSB0aGUgZm9sbG93aW5nIHRvIGF2b2lkIGxvYWRpbmcgb3BlbnNzbC9tZGMyLmggc2lu Y2UgaXQgCisgKiByZWxpZXMgb24gdGhlIE9wZW5TU0wgZGVzLmguICBTaW5jZSB3ZSBkbyBub3Qg bmVlZCB0aGUgTURDMiAKKyAqIGRlZmluaXRpb25zIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBoYXZl IGl0IGluY2x1ZGVkIGJ5IG9wZW5zc2wvZXZwLmgKKyAqLworI2RlZmluZSBPUEVOU1NMX05PX01E QzIKKyNpZmRlZiBPUEVOU1NMXzEwMAorI2RlZmluZSBPUEVOU1NMXzA5OAorI2VuZGlmCS8qIE9Q RU5TU0xfMTAwICovCisjaWZkZWYgT1BFTlNTTF8wOTgKKyNkZWZpbmUgT1BFTlNTTF8wOTcKKyNl bmRpZiAvKiBPUEVOU1NMXzA5OCAqLworI2lmZGVmIENLX0RFUworI2luY2x1ZGUgPG9wZW5zc2wv ZGVzLmg+CisjZW5kaWYJLyogQ0tfREVTICovCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNp bmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorI2lu Y2x1ZGUgPG9wZW5zc2wveDUwOV92ZnkuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2lu Y2x1ZGUgPG9wZW5zc2wvcGVtLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorI2luY2x1ZGUg PG9wZW5zc2wvYmxvd2Zpc2guaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisjaW5jbHVkZSA8 b3BlbnNzbC9yYzQuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Nhc3QuaD4KKyNpbmNsdWRlIDxvcGVu c3NsL2RzYS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9t ZDUuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ CisjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisjaWZkZWYgU1NMX0tSQjUKKyNpbmNsdWRlIDxv cGVuc3NsL2tzc2wuaD4KKyNlbmRpZiAvKiBTU0xfS1JCNSAqLworCitleHRlcm4gQklPICpiaW9f ZXJyOworZXh0ZXJuIFNTTCAqc3NsX2NvbjsKK2V4dGVybiBTU0xfQ1RYICpzc2xfY3R4OworZXh0 ZXJuIGludCBzc2xfZGVidWdfZmxhZzsKK2V4dGVybiBpbnQgc3NsX29ubHlfZmxhZzsKK2V4dGVy biBpbnQgc3NsX2FjdGl2ZV9mbGFnOworZXh0ZXJuIGludCBzc2xfdmVyaWZ5X2ZsYWc7CitleHRl cm4gaW50IHNzbF92ZXJib3NlX2ZsYWc7CitleHRlcm4gaW50IHNzbF9jZXJ0c29rX2ZsYWc7Citl eHRlcm4gaW50IHNzbF9kdW1teV9mbGFnOworZXh0ZXJuIGludCBzc2xfdmVyaWZ5X2RlcHRoOwor CitleHRlcm4gY2hhciAqc3NsX3JzYV9jZXJ0X2ZpbGU7CitleHRlcm4gY2hhciAqc3NsX3JzYV9j ZXJ0X2NoYWluX2ZpbGU7CitleHRlcm4gY2hhciAqc3NsX3JzYV9rZXlfZmlsZTsKK2V4dGVybiBj aGFyICpzc2xfZHNhX2NlcnRfZmlsZTsKK2V4dGVybiBjaGFyICpzc2xfZHNhX2NlcnRfY2hhaW5f ZmlsZTsKK2V4dGVybiBjaGFyICpzc2xfZGhfa2V5X2ZpbGU7CitleHRlcm4gY2hhciAqc3NsX2Np cGhlcl9saXN0OworZXh0ZXJuIGNoYXIgKnNzbF9jcmxfZmlsZTsKK2V4dGVybiBjaGFyICpzc2xf Y3JsX2RpcjsKK2V4dGVybiBjaGFyICpzc2xfdmVyaWZ5X2ZpbGU7CitleHRlcm4gY2hhciAqc3Ns X3ZlcmlmeV9kaXI7CitleHRlcm4gY2hhciAqc3NsX2RoX3BhcmFtX2ZpbGU7CitleHRlcm4gY2hh ciAqc3NsX3JuZF9maWxlOworCitleHRlcm4gU1NMX0NUWCAqdGxzX2N0eDsKK2V4dGVybiBTU0wg KnRsc19jb247CitleHRlcm4gaW50IHRsc19vbmx5X2ZsYWc7CitleHRlcm4gaW50IHRsc19hY3Rp dmVfZmxhZzsKK2V4dGVybiBpbnQgeDUwOV9jZXJ0X3ZhbGlkOworZXh0ZXJuIFg1MDlfU1RPUkUg KmNybF9zdG9yZTsKKworZXh0ZXJuIGludCBzc2xfcmF3X2ZsYWc7CitleHRlcm4gaW50IHRsc19y YXdfZmxhZzsKKworI2lmbmRlZiBOT0hUVFAKK2V4dGVybiBTU0xfQ1RYICp0bHNfaHR0cF9jdHg7 CitleHRlcm4gU1NMICp0bHNfaHR0cF9jb247CitleHRlcm4gaW50IHRsc19odHRwX2FjdGl2ZV9m bGFnOworI2VuZGlmIC8qIE5PSFRUUCAqLworCitleHRlcm4gaW50IHNzbF9pbml0aWFsaXplZDsK KworX1BST1RPVFlQKFZPSUQgc3NsX29uY2VfaW5pdCwodm9pZCkpOworX1BST1RPVFlQKGludCBz c2xfdG5faW5pdCwoaW50KSk7CitfUFJPVE9UWVAoaW50IHNzbF9odHRwX2luaXQsKGNoYXIgKikp OworX1BST1RPVFlQKGludCBja19zc2xfaHR0cF9jbGllbnQsKGludCxjaGFyICopKTsKK19QUk9U T1RZUChpbnQgc3NsX2Rpc3BsYXlfY29ubmVjdF9kZXRhaWxzLChTU0wgKixpbnQsaW50KSk7Citf UFJPVE9UWVAoaW50IHNzbF9zZXJ2ZXJfdmVyaWZ5X2NhbGxiYWNrLChpbnQsIFg1MDlfU1RPUkVf Q1RYICopKTsKK19QUk9UT1RZUChpbnQgc3NsX2NsaWVudF92ZXJpZnlfY2FsbGJhY2ssKGludCwg WDUwOV9TVE9SRV9DVFggKikpOworX1BST1RPVFlQKGludCBzc2xfcmVwbHksKGludCwgdW5zaWdu ZWQgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChpbnQgc3NsX2lzLCh1bnNpZ25lZCBjaGFyICos IGludCkpOworX1BST1RPVFlQKGludCBja19zc2xfaW5jb21pbmcsKGludCkpOworX1BST1RPVFlQ KGludCBja19zc2xfb3V0Z29pbmcsKGludCkpOworX1BST1RPVFlQKGludCB0bHNfaXNfdXNlcl92 YWxpZCwoU1NMICosIGNvbnN0IGNoYXIgKikpOworX1BST1RPVFlQKGNoYXIgKiBzc2xfZ2V0X2Ru c05hbWUsKFNTTCAqKSk7CitfUFJPVE9UWVAoY2hhciAqIHNzbF9nZXRfY29tbW9uTmFtZSwoU1NM ICopKTsKK19QUk9UT1RZUChjaGFyICogc3NsX2dldF9pc3N1ZXJfbmFtZSwoU1NMICopKTsKK19Q Uk9UT1RZUChjaGFyICogc3NsX2dldF9zdWJqZWN0X25hbWUsKFNTTCAqKSk7CitfUFJPVE9UWVAo aW50IHNzbF9nZXRfY2xpZW50X2ZpbmlzaGVkLChjaGFyICosIGludCkpOworX1BST1RPVFlQKGlu dCBzc2xfZ2V0X3NlcnZlcl9maW5pc2hlZCwoY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChpbnQg c3NsX3Bhc3N3ZF9jYWxsYmFjaywoY2hhciAqLCBpbnQsIGludCwgVk9JRCAqKSk7CitfUFJPVE9U WVAoVk9JRCBzc2xfY2xpZW50X2luZm9fY2FsbGJhY2ssKGNvbnN0IFNTTCAqLGludCwgaW50KSk7 CitfUFJPVE9UWVAoaW50IHNzbF9hbm9ueW1vdXNfY2lwaGVyLChTU0wgKiBzc2wpKTsKK19QUk9U T1RZUChpbnQgdGxzX2xvYWRfY2VydHMsKFNTTF9DVFggKiBjdHgsIFNTTCAqIGNvbiwgaW50IHNl cnZlcikpOworX1BST1RPVFlQKGludCBzc2xfdmVyaWZ5X2NybCwoaW50LCBYNTA5X1NUT1JFX0NU WCAqKSk7CitfUFJPVE9UWVAoaW50IHRsc19pc19rcmI1LChpbnQpKTsKK19QUk9UT1RZUChpbnQg WDUwOV91c2Vyb2ssKFg1MDkgKixjb25zdCBjaGFyICopKTsKK19QUk9UT1RZUChpbnQgY2tfWDUw OV9zYXZlX2NlcnRfdG9fdXNlcl9zdG9yZSwoWDUwOSAqKSk7CisvKiBTTVMgMjAwNy8wMi8xNSAq LworX1BST1RPVFlQKGludCBzc2xfY2hlY2tfc2VydmVyX25hbWUsKFNTTCAqIHNzbCwgY2hhciAq IGhvc3RuYW1lKSk7CisjaWZkZWYgT1MyCisjaW5jbHVkZSAiY2tvc3NsYy5oIgorI2luY2x1ZGUg ImNrb3NzbC5oIgorI2VuZGlmIC8qIE9TMiAqLworCisjZGVmaW5lIFNTTF9DTElFTlQgMAorI2Rl ZmluZSBTU0xfU0VSVkVSIDEKKyNkZWZpbmUgU1NMX0hUVFAgICAyCisKKyNkZWZpbmUgU1NMX0VS Ul9CRlNaIDQwOTYKKworI2lmZGVmIFNTTF9LUkI1CisjZGVmaW5lIERFRkFVTFRfQ0lQSEVSX0xJ U1QgIkhJR0g6TUVESVVNOkxPVzorS1JCNTorQURIOitFWFAiCisjZWxzZQorI2RlZmluZSBERUZB VUxUX0NJUEhFUl9MSVNUICJISUdIOk1FRElVTTpMT1c6K0FESDorRVhQIgorI2VuZGlmIC8qIFNT TF9LUkI1ICovCisjZW5kaWYgLyogQ0tfU1NMICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2FhYWEudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2FhYWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjMzNWVjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrYWFhYS50eHQKQEAgLTAsMCArMSwzODAgQEAKK2NrYWFhYS50 eHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEp1bHkgMjAxMQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDLUtFUk1JVCBWRVJTSU9O IDkuMC4zMDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9WRVJWSUVXIE9GIEZJTEVT CisKKyAgICAgICAgICAgICAgIENvbW11bmljYXRpb25zIHNvZnR3YXJlIGZvciBVTklYIGFuZCAo T3BlbilWTVMuCisKKyAgICAgICAgICAgICAgICAgICAgICAgQW5kIGluIGZvcm1lciB2ZXJzaW9u cyBhbHNvIGZvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyYXR1cyBWT1MsIEFPUy9W UywgUU5YLAorICAgICAgICAgICAgIFBsYW4gOSwgT1MtOSwgQXBvbGxvIEFlZ2lzLCBhbmQgdGhl IENvbW1vZG9yZSBBbWlnYS4KKyAgICAgICAgICAgICAgICAgICAgICBUaGUgQXBwbGUgTWFjaW50 b3NoLCB0aGUgQXRhcmkgU1QuCisKKyAgICAgICAgICAgICAgICAgIFRoZSBLZXJtaXQgUHJvamVj dCAtIENvbHVtYmlhIFVuaXZlcnNpdHkKKworICAgICAgICAgICAgICBodHRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS8gLSBrZXJtaXRAY29sdW1iaWEuZWR1CisKKworICBDb3B5cmlnaHQgKEMpIDE5 ODUsIDIwMTEsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0 eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1p dCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2Nt YWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorICAgIEJSSUVGTFk6 IEMtS2VybWl0IDkuMCBoYXMgdGhlIE9QRU4gU09VUkNFIDMtY2xhdXNlIE1PRElGSUVEIEJTRCBM SUNFTlNFLgorCisKK0RPQ1VNRU5UQVRJT04KKworICBDLUtlcm1pdCBpcyBkb2N1bWVudGVkIGlu IHRoZSBib29rICJVc2luZyBDLUtlcm1pdCIsIFNlY29uZCBFZGl0aW9uLCBieQorICBGcmFuayBk YSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgRGlnaXRhbCBQcmVzcywgSVNCTiAxLTU1 NTU4LTE2NC0xLAorICBzdXBwbGVtZW50ZWQgYnkgV2ViLWJhc2VkIHVwZGF0ZXMgZm9yIEMtS2Vy bWl0IDcuMCwgOC4wLCBhbmQgOS4wLgorCitQTEFURk9STVMKKyAgICAgICAgICAgICAgICAgICBT ZWN1cml0eQorICAgTmFtZSAgICAgICAgICAgIEluY2x1ZGVkICAgTGFzdCBVcGRhdGVkCisKKyAg IFVuaXggICAgICAgICAgICAgICBZZXMgICAgIDkuMC4zMDAgIDMwIEp1biAyMDExCisgICAoT3Bl bilWTVMgICAgICAgICAgWWVzICAgICA5LjAuMzAwICAzMCBKdW4gMjAxMQorICAgV2luZG93cyAo Szk1KSAgICAgIFllcyAgICAgOC4wLjIwOCAgMTQgTWFyIDIwMDMgIChLOTUgMi4xKQorICAgT1Mv MiAoSzk1KSAgICAgICAgIFllcyAgICAgOC4wLjIwOCAgMTQgTWFyIDIwMDMgIChLOTUgMi4xKQor ICAgREcgQU9TL1ZTICAgICAgICAgIE5vICAgICAgNy4wLjE5NiAgIDEgSmFuIDIwMDAKKyAgIFN0 cmF0dXMgVk9TICAgICAgICBObyAgICAgIDcuMC4xOTYgICAxIEphbiAyMDAwCisgICBCZWxsIFBs YW4gOSAgICAgICAgTm8gICAgICA3LjAuMTk2ICAgMSBKYW4gMjAwMAorICAgTWljcm93YXJlIE9T LTkgICAgIE5vICAgICAgNy4wLjE5NiAgIDEgSmFuIDIwMDAKKyAgIENvbW1vZG9yZSBBbWlnYSAg ICBObyAgICAgIDcuMC4xOTYgICAxIEphbiAyMDAwCisgICBNYWNpbnRvc2ggICAgICAgICAgTm8g ICAgICA1QSgxOTApICAxNiBBdWcgMTk5NCAgKE1hYyBLZXJtaXQgMC45OTEpCisgICBBdGFyaSBT VCAgICAgICAgICAgTm8gICAgICA1QSgxODkpICAzMCBKdW4gMTk5MworCitRVUlDSyBTVEFSVCBG T1IgRlRQIFVTRVJTCisKKyAgSWYgeW91IGhhdmUgYSBXZWIgYnJvd3NlciwgZ28gdG86CisKKyAg ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisKKyAgQW5kIHRh a2UgaXQgZnJvbSB0aGVyZS4gIE90aGVyd2lzZS4uLgorCisgIFRoZSBkZWZpbml0aXZlIEZUUCBz b3VyY2UgZm9yIEtlcm1pdCBzb2Z0d2FyZSBpcyBrZXJtaXQuY29sdW1iaWEuZWR1LgorICBLZXJt aXQgc29mdHdhcmUgb2J0YWluZWQgZnJvbSBvdGhlciBGVFAgc2l0ZXMgaXMgbm90IG5lY2Vzc2Fy aWx5IGNvbXBsZXRlCisgIG9yIHVwIHRvIGRhdGUsIGFuZCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVk LgorCitDLUtlcm1pdCBmb3IgVU5JWCBjb21wdXRlcnMgdGhhdCBoYXZlIGEgQyBjb21waWxlciBh bmQgJ21ha2UnIHByb2dyYW06CisKKyAgRGlyZWN0b3J5IGtlcm1pdC9hcmNoaXZlcywgYmluYXJ5 IG1vZGUsIGZpbGUgY2t1MjExLnRhci5aIG9yIGNrdTIxMS50YXIuZ3oKKworICBUaGlzIGlzIGEg Y29tcHJlc3NlZCB0YXIgYXJjaGl2ZSBvZiBVTklYIEMtS2VybWl0IHNvdXJjZSBjb2RlLCBtYWtl ZmlsZSwgYW5kCisgIG90aGVyIGZpbGVzLiAgSXQgdW5wYWNrcyBpbnRvIGl0cyBjdXJyZW50IGRp cmVjdG9yeSwgc28gZG93bmxvYWQgaXQgaW50byBhCisgIGZyZXNoIGRpcmVjdG9yeS4gIFRyYW5z ZmVyIGluIGJpbmFyeSBtb2RlLCB1bmNvbXByZXNzIChvciBndW56aXApLCB1bnRhciAodGFyCisg IHh2ZiBja3UyMTEudGFyKSwgYW5kIHRoZW4gZ2l2ZSB0aGUgYXBwcm9wcmlhdGUgIm1ha2UiIGNv bW1hbmQgdG8gYnVpbGQgZm9yCisgIHlvdXIgVU5JWCBzeXN0ZW07IHJlYWQgdGhlIGNvbW1lbnRz IGluIHRoZSBtYWtlZmlsZSBhbmQgY2t1aW5zLnR4dCBmb3IKKyAgZnVydGhlciBpbmZvLgorCitD LUtlcm1pdCBmb3IgVk1TOgorCisgIElmIHlvdSBoYXZlIFZNUyBVTlpJUCwgZ2V0IHRoZSBmaWxl IGtlcm1pdC9hcmNoaXZlcy9ja3YyMTEuemlwIGluIGJpbmFyeQorICBtb2RlLCB1bnppcCAtYWEs IGFuZCBidWlsZCB3aXRoIENLVktFUi5DT00gKEBja3ZrZXIuY29tKS4gIFJlYWQgdGhlIGNvbW1l bnRzCisgIGF0IHRoZSB0b3Agb2YgQ0tWS0VSLkNPTSBmb3IgZGV0YWlscy4KKworT3RoZXJzOiAg SW4gdGhlIGtlcm1pdC9mIG9yIGtlcm1pdC90ZXN0IGRpcmVjdG9yaWVzIHVuZGVyIHRoZSBhcHBy b3ByaWF0ZQorcHJlZml4ZXMsIGV4cGxhaW5lZCBiZWxvdy4KKworCitJTlNUQUxMQVRJT04KKwor SW5zdGFsbGF0aW9uIHByb2NlZHVyZXMgZGVwZW5kIG9uIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAg UGxlYXNlIHJlYWQgdGhlCitDSz9JTlMuVFhULCBpZiBhbnksIGZpbGUgZm9yIHlvdXIgb3BlcmF0 aW5nIHN5c3RlbSAoPz1VIGZvciBVTklYLCBWIGZvciBWTVMsCitldGMpLiAgUGxlYXNlIG5vdGUg dGhlIG5hbWluZyBhbmQgcGxhY2VtZW50IGZvciB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZXM6CisK KyAgQ0tFUk1JVC5JTkkKKyAgICAua2VybXJjIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkg KFVOSVgpLgorICAgIENLRVJNSVQuSU5JIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgKG90 aGVyIE9TJ3MpLgorCisKKyAgQ0tFUk1PRC5JTkkKKyAgICAubXlrZXJtcmMgaW4gdGhlIHVzZXIn cyBob21lIGRpcmVjdG9yeSAoVU5JWCkuCisgICAgQ0tFUk1PRC5JTkkgZWxzZXdoZXJlLgorCisg IERJQUxJTkcgRElSRUNUT1JJRVMKKyAgICBEaWFsaW5nIGRpcmVjdG9yeSBmaWxlcyBjYW4gYmUg c3lzdGVtLXdpZGUsIHBlci1ncm91cCwgb3IgcGVyLXVzZXIsIG9yCisgICAgYW55IGNvbWJpbmF0 aW9uLiAgRm9yIGV4YW1wbGUsIHRoZXJlIGNhbiBiZSBhIGNvcnBvcmF0ZSB3aWRlIGRpcmVjdG9y eQorICAgIHNoYXJlZCBieSBhbGwgdXNlcnMsIGEgc3VwcGxlbWVudGFsIGRpcmVjdG9yeSBmb3Ig ZWFjaCBkaXZpc2lvbiBvcgorICAgIGRlcGFydG1lbnQsIGFuZCBhIHBlcnNvbmFsIGRpcmVjdG9y eSBmb3IgZWFjaCB1c2VyLiAgU2ltcGx5IGJlIHN1cmUgdGhlCisgICAgZGlhbGluZyBkaXJlY3Rv cnkgZmlsZXMgYXJlIGlkZW50aWZpZWQgYSBTRVQgRElBTCBESVJFQ1RPUlkgY29tbWFuZCBpbgor ICAgIHRoZSB1c2VyJ3MgKG9yIHRoZSBzeXN0ZW0td2lkZSkgQy1LZXJtaXQgaW5pdGlhbGl6YXRp b24gZmlsZSwgb3IgaW4gdGhlCisgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgKGxvZ2ljYWwgbmFt ZSwgc3ltYm9sKSBLX0RJQUxfRElSRUNUT1JZLiAgKFRoZQorICAgIHN0YW5kYXJkIGluaXRpYWxp emF0aW9uIGZpbGUgbG9va3MgYnkgZGVmYXVsdCBpbiB0aGUgdXNlcidzIGhvbWUgb3IgbG9naW4K KyAgICBkaXJlY3RvcnkuKSAgV2hlbiBpbnN0YWxsaW5nIEMtS2VybWl0IG9uIG11bHRpdXNlciBw bGF0Zm9ybXMgZnJvbSB3aGljaAorICAgIHVzZXJzIHdpbGwgZGlhbCBvdXQsIHlvdSBjYW4gYWxz byBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBhcmVhCisgICAgY29kZSwgY291bnRyeSBj b2RlLCBhbmQgdGhlIHZhcmlvdXMgZGlhbGluZyBwcmVmaXhlcyBhcyBkZXNjcmliZWQgb24gcGFn ZQorICAgIDQ3OCBvZiAiVXNpbmcgQy1LZXJtaXQiIChzZWNvbmQgZWRpdGlvbiksIHNvIHVzZXJz IGRvbid0IGhhdmUgdG8gd29ycnkKKyAgICBhYm91dCBkZWZpbmluZyB0aGVzZSBpdGVtcyB0aGVt c2VsdmVzLiAgIE5ldHdvcmsgZGlyZWN0b3JpZXMgYW5kIHNlcnZpY2UKKyAgICBkaXJlY3Rvcmll cyBjYW4gYWxzbyBiZSBzZXQgdXAgaW4gYSBzaW1pbGFyIG1hbm5lci4KKworICBET0NVTUVOVEFU SU9OCisgICAgSW4gVU5JWCwgdGhlIGdlbmVyYWwgQy1LZXJtaXQgbWFuIHBhZ2UgKG9yIG9uZSBv ZiB0aGUgdmVyc2lvbnMgdGFpbG9yZWQKKyAgICBmb3IgYSBzcGVjaWZpYyBwbGF0Zm9ybSwgbGlr ZSBIUC1VWCBvciBTb2xhcmlzKSBzaG91bGQgYmUgaW5zdGFsbGVkIGluCisgICAgdGhlIGFwcHJv cHJpYXRlIHBsYWNlLiAgSW4gVk1TLCB0aGUgVk1TIGhlbHAgdG9waWMgKENLVktFUi5ITFApIHNo b3VsZAorICAgIGJlIGluc3RhbGxlZCBhcyBkZXNjcmliZWQgaW4gQ0tWSU5TLlRYVC4gIFBsYWlu LXRleHQgZG9jdW1lbnRhdGlvbiBzdWNoCisgICAgYXMgQ0tFUk1JVDIuVFhUIHNob3VsZCBiZSBw dXQgaW4gd2hhdGV2ZXIgcGxhY2UgcGVvcGxlIGFyZSBhY2N1c3RvbWVkCisgICAgdG8gbG9va2lu Zy4KKworRklMRVMgQU5EIEZJTEUgTkFNSU5HIENPTlZFTlRJT05TCisKK0MtS2VybWl0IGlzIGEg ZmFtaWx5IG9mIEtlcm1pdCBwcm9ncmFtcyBmb3IgbWFueSBkaWZmZXJlbnQgY29tcHV0ZXIgc3lz dGVtcy4KK1RoZSBwcm9ncmFtIHNoYXJlcyBhIGNvbW1vbiBzZXQgb2Ygc3lzdGVtLWluZGVwZW5k ZW50IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wKK21vZHVsZXMsIHdyaXR0ZW4gaW4gdGhlIEMgbGFu Z3VhZ2UuICBTeXN0ZW0tZGVwZW5kZW50IG9wZXJhdGlvbnMgYXJlIGNvbGxlY3RlZAoraW50byBz eXN0ZW0tc3BlY2lmaWMgbW9kdWxlcyBmb3IgZWFjaCBzeXN0ZW0uCisKK0MtS2VybWl0IGZpbGUg bmFtZXMgYWxsIHN0YXJ0IHdpdGggdGhlIGxldHRlcnMgIkNLIiwgZm9sbG93ZWQgYnkgYSBzaW5n bGUKK2xldHRlciBpbmRpY2F0aW5nIHRoZSBzdWJncm91cC4gIFdoZW4gcmVmZXJyaW5nIHRvIHRo ZXNlIGZpbGVzIGluIHRoZSBVTklYLAorQU9TL1ZTLCBvciBWT1MgZW52aXJvbm1lbnRzLCB1c2Ug bG93ZXJjYXNlIGxldHRlcnMsIHJhdGhlciB0aGFuIHRoZSB1cHBlcmNhc2UKK2xldHRlcnMgc2hv d24gaGVyZS4gIFN1Ymdyb3VwczoKKworICBfOiBTZWN1cml0eS9BdXRoZW50aWNhdGlvbi9FbmNy eXB0aW9uIGNvZGUsIHBvc3NpYmx5IHJlZ3VsYXRlZCBieSBsYXcKKyAgYTogR2VuZXJhbCBkZXNj cmlwdGl2ZSBtYXRlcmlhbCBhbmQgZG9jdW1lbnRhdGlvbgorICBiOiBCT08gZmlsZSBlbmNvZGVy cyBhbmQgZGVjb2RlcnMgKG9ic29sZXRlKQorICBjOiBBbGwgcGxhdGZvcm1zIHdpdGggQyBjb21w aWxlcnMKKyAgZDogRGF0YSBHZW5lcmFsIEFPUy9WUworICBlOiBSZXNlcnZlZCBmb3IgImNrZXJt aXQiIGZpbGVzLCBsaWtlIENLRVJNSVQuSU5JLCBDS0VSTUlUODAuVFhUCisgIGY6IChyZXNlcnZl ZCkKKyAgZzogKHJlc2VydmVkKQorICBoOiAocmVzZXJ2ZWQpCisgIGk6IENvbW1vZG9yZSBBbWln YSAoSW50dWl0aW9uKQorICBqOiAodW51c2VkKQorICBrOiAodW51c2VkKQorICBsOiBTdHJhdHVz IFZPUworICBtOiBNYWNpbnRvc2ggd2l0aCBNYWMgT1MKKyAgbjogTWljcm9zb2Z0IFdpbmRvd3Mg TlQKKyAgbzogT1MvMiBhbmQvb3IgTWljcm9zb2Z0IFdpbmRvd3MgOTUvOTgvTUUvTlQvMjAwMC9Y UC8uLi4KKyAgcDogQmVsbCBMYWJzIFBsYW4gOQorICBxOiAocmVzZXJ2ZWQpCisgIHI6IERFQyBQ RFAtMTEgd2l0aCBSU1RTL0UgKHJlc2VydmVkKQorICBzOiBBdGFyaSBTVCBHRU1ET1MgKGxhc3Qg c3VwcG9ydGVkIGluIHZlcnNpb24gNUEoMTg5KSkKKyAgdDogREVDIFBEUC0xMSB3aXRoIFJULTEx IChyZXNlcnZlZCkKKyAgdTogVU5JWCBvciBlbnZpcm9ubWVudHMgd2l0aCBVTklYLWxpa2UgQyBs aWJyYXJpZXMKKyAgdjogVk1TIGFuZCBPcGVuVk1TCisgIHc6IFdhcnQgKExleC1saWtlIHByZXBy b2Nlc3NvciwgdXNlZCB3aXRoIGFsbCBzeXN0ZW1zKQorICB4OiAocmVzZXJ2ZWQpCisgIHk6IChy ZXNlcnZlZCkKKyAgejogKHJlc2VydmVkKQorICAwLTM6IChyZXNlcnZlZCkKKyAgNDogSUJNIEFT LzQwMCAocmVzZXJ2ZWQgYnV0IHByb2JhYmx5IG5ldmVyIHdpbGwgYmUgdXNlZCkKKyAgNS04OiAo cmVzZXJ2ZWQpCisgIDk6IE1pY3Jvd2FyZSBPUy05CisKK0V4YW1wbGVzOgorCisgIGNrYWFhYS50 eHQgLSBUaGlzIGZpbGUKKyAgY2t1ZmlvLmMgICAtIEZpbGUgaS9vIGZvciBVTklYCisgIGNrc3Rp by5jICAgLSBDb21tdW5pY2F0aW9ucyBpL28gZm9yIHRoZSBBdGFyaSBTVAorICBtYWtlZmlsZSAg IC0gbWFrZWZpbGUgZm9yIGJ1aWxkaW5nIFVOSVggQy1LZXJtaXQKKyAgY2twa2VyLm1rICAtIG1h a2VmaWxlIGZvciBidWlsZGluZyBQbGFuIDkgQy1LZXJtaXQKKyAgY2t2a2VyLmNvbSAtIGJ1aWxk IHByb2NlZHVyZSBmb3IgVk1TIEMtS2VybWl0CisKK0lNUE9SVEFOVCBGSUxFUyAodXNlIGxvd2Vy Y2FzZSBuYW1lcyBvbiBVTklYLCBWT1MsIG9yIEFPUy9WUyk6CisKKyAgY2thYWFhLnR4dCAgLSBU aGlzIGZpbGUgKG92ZXJ2aWV3IG9mIHRoZSBDLUtlcm1pdCBmaWxlcykuCisgICAgICAgICAgICAg ICAgRm9yIHN5c3RlbS1zcGVjaWZpYyBkaXN0cmlidXRpb25zLCB0aGlzIHdpbGwgbm9ybWFsbHkK KyAgICAgICAgICAgICAgICBiZSByZXBsYWNlZCBieSBhIHN5c3RlbS1zcGVjaWZpYyBSRUFELk1F IGZpbGUuCisKKyAgY2tlcm1pdDcwLnR4dCAtIFVwZGF0ZXM6IFN1cHBsZW1lbnQgdG8gIlVzaW5n IEMtS2VybWl0IiwgMm5kIEVkLCBmb3IgNy4wLgorICBja2VybWl0ODAudHh0IC0gVXBkYXRlczog U3VwcGxlbWVudCB0byAiVXNpbmcgQy1LZXJtaXQiLCAybmQgRWQsIGZvciA4LjAuCisgIGNrdXR1 dG9yLnR4dCAgLSBDLUtlcm1pdCBUdXRvcmlhbCBmb3IgVW5peCAocGxhaW4gdGV4dCkKKyAgY2tj YndyLnR4dCAgLSAiQmV3YXJlIGZpbGUiIChsaW1pdGF0aW9ucywga25vd24gYnVncywgaGludHMp LCBnZW5lcmFsLgorICBja2VybWl0LmluaSAtIFN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZpbGUg KHJlbmFtZSB0byAua2VybXJjIGluIFVOSVgsIE9TLTkpCisgIGNrZXJtb2QuaW5pIC0gU2FtcGxl IGN1c3RvbWl6YXRpb24gZmlsZSAocmVuYW1lIHRvIC5teWtlcm1yYyBpbiBVTklYLCBPUy05KQor CitUaGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZCBhdCB0aGUgS2VybWl0IEZUUCBzaXRlOgorCisg IGNrZXJtaXQua2RkIC0gU2FtcGxlIGRpYWxpbmcgZGlyZWN0b3J5IGZpbGUgKHJlbmFtZSB0byAu a2RkIGluIFVOSVgsIE9TLTkpCisgIGNrZXJtaXQua25kIC0gU2FtcGxlIGRpYWxpbmcgZGlyZWN0 b3J5IGZpbGUgKHJlbmFtZSB0byAua25kIGluIFVOSVgsIE9TLTkpCisgIGNrZXJtaXQua3NkIC0g U2FtcGxlIHNlcnZpY2VzIGRpcmVjdG9yeSBmaWxlIChyZW5hbWUgdG8gLmtzZCBpbiBVTklYLCBP Uy05KQorICBja2VkZW1vLmtzYyAtIERlbW9uc3RyYXRpb24gbWFjcm9zIGZyb20gIlVzaW5nIEMt S2VybWl0IgorICBja2VwYWdlLmtzYyAtIERpdHRvCisgIGNrZXZ0LmtzYyAgIC0gRGl0dG8KKwor VU5JWC1zcGVjaWZpYyBmaWxlczoKKworICBja3VpbnMudHh0IC0gVU5JWC1zcGVjaWZpYyBpbnN0 YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorICBja3Vid3IudHh0IC0gVU5JWC1zcGVjaWZpYyBiZXdh cmUgZmlsZS4KKyAgY2t1a2VyLm5yICAtICJtYW4gcGFnZSIgZm9yIFVOSVguCisKK1ZNUy1zcGVj aWZpYyBmaWxlczoKKworICBja3ZpbnMudHh0IC0gVk1TLXNwZWNpZmljIGluc3RhbGxhdGlvbiBp bnN0cnVjdGlvbnMuCisgIGNrdmJ3ci50eHQgLSBWTVMtc3BlY2lmaWMgYmV3YXJlIGZpbGUKKyAg Y2t2a2VyLmhscCAtIFZNUyBDLUtlcm1pdCBIRUxQIHRvcGljIChuZWVkcyB1cGRhdGluZykuCisK K0RHIEFPUy9WUy1zcGVjaWZpYyBmaWxlczoKKworICBja2RpbnMudHh0IC0gRGF0YSBHZW5lcmFs IEFPUy9WUyBDLUtlcm1pdCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zCisgIGNrZGJ3ci50eHQg LSBBT1MvVlMgImJld2FyZSIgZmlsZQorICBja2QqLmNsaSAgIC0gUHJvY2VkdXJlcyBmb3IgYnVp bGRpbmcgQU9TL1ZTIEMtS2VybWl0CisKK1RoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIG9mIGludGVy ZXN0IG1haW5seSB0byBwcm9ncmFtbWVycyBhbmQgaGlzdG9yaWFucworKGZpbmQgdGhlbSBhdCB0 aGUgS2VybWl0IGZ0cCBzaXRlIGluIHRoZSBrZXJtaXQvZiBkaXJlY3RvcnkpOgorCisgIGNrY2tl ci5hbm4gLSBSZWxlYXNlIGFubm91bmNlbWVudHMuCisgIGNrY2NmZy50eHQgLSBDb25maWd1cmF0 aW9uIGluZm9ybWF0aW9uIChmZWF0dXJlIHNlbGVjdGlvbiksIGdlbmVyYWwuCisgIGNrY3BsbS50 eHQgLSBQcm9ncmFtIGxvZ2ljIG1hbnVhbCAoZm9yIHByb2dyYW1tZXJzKS4KKyAgY2tjMzAwLnR4 dCAtIFByb2dyYW0gdXBkYXRlIGhpc3RvcnkgZm9yIGVkaXQgMjEyLTMwMCAoQy1LZXJtaXQgOS4w KS4KKyAgY2tjMjExLnR4dCAtIFByb2dyYW0gdXBkYXRlIGhpc3RvcnkgZm9yIGVkaXQgMjAxLTIx MS4KKyAgY2tjMjAwLnR4dCAtIFByb2dyYW0gdXBkYXRlIGhpc3RvcnkgZm9yIGVkaXQgMTk4LTIw MCAoYmlnKQorICBja2MxOTcudHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9yeSBmb3IgZWRpdCAx OTUtMTk3IChiaWcpCisgIGNrYzE5MC50eHQgLSBQcm9ncmFtIHVwZGF0ZSBoaXN0b3J5IGZvciBl ZGl0cyAxODktMTkwIChiaWcpLgorICBja2MxODgudHh0IC0gUHJvZ3JhbSB1cGRhdGUgaGlzdG9y eSwgZWRpdHMgMTc5LTE4OCAoYmlnKS4KKyAgY2tjMTc4LnR4dCAtIFByb2dyYW0gZWRpdCBoaXN0 b3J5LCA1QSBlZGl0cyB0aHJvdWdoIDE3OCAodmVyeSBiaWcpLgorICBja2N2NGYudHh0IC0gUHJv Z3JhbSBlZGl0IGhpc3RvcnksIHZlcnNpb24gNEYuCisgIGNrY3Y0ZS50eHQgLSBQcm9ncmFtIGVk aXQgaGlzdG9yeSwgdmVyc2lvbiA0RS4KKworQklOQVJJRVMKKworSWYgeW91IGhhdmUgRlRQIGFj Y2VzcyB0byBrZXJtaXQuY29sdW1iaWEuZWR1IChhbHNvIGtub3duIGFzCitrZXJtaXQuY2MuY29s dW1iaWEuZWR1LCBmdHAuY2MuY29sdW1iaWEuZWR1KSwgeW91IGNhbiBhbHNvIHJldHJpZXZlIHZh cmlvdXMKK0MtS2VybWl0IGJpbmFyaWVzIGZyb20gdGhlIGRpcmVjdG9yeSBrZXJtaXQvYmluL2Nr Ki4qLCBvciBtb3JlIGNvbnZlbmllbnRseQorZnJvbSB0aGUgd2ViIHBhZ2U6CisKKyAgaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrODBiaW5hcmllcy5odG1sCisKK1Rlc3QgdmVyc2lv bnMgd291bGQgYmUgaW4ga2VybWl0L3Rlc3QvYmluL2NrKi4qLiAgQmUgc3VyZSB0byB0cmFuc2Zl ciB0aGVzZQorZmlsZXMgaW4gYmluYXJ5IG1vZGUuICBUaGUgUkVBRC5NRSBmaWxlIGluIHRoYXQg ZGlyZWN0b3J5IGV4cGxhaW5zIHdoYXQncword2hhdC4KKworU09VUkNFIEZJTEVTCisKK1RoZSBz b3VyY2UgZmlsZXMgZm9yIHRoZSBVTklYIHZlcnNpb24gKGFsbCBVTklYIHZlcnNpb25zKSBhcmUg YXZhaWxhYmxlIGluCitrZXJtaXQvYXJjaGl2ZXMvY2t1Tk5OLnRhci5aLCBhcHByb3hpbWF0ZWx5 IDFNQiBpbiBzaXplLiAgVHJhbnNmZXIgdGhpcyBmaWxlCitpbiBiaW5hcnkgbW9kZS4gIFRoaXMg aXMgYSBjb21wcmVzc2VkIHRhciBhcmNoaXZlLiAgVGhlcmUgaXMgYWxzbyBhIGd6aXAnZAordmVy c2lvbiwgY2t1MjExLnRhci5nei4gIFRvIGdldCB0aGUgYmluYXJ5IHRhciBhcmNoaXZlOgorCisg IG1rZGlyIGtlcm1pdCAgICAgICAgICAgICAgICAgICAoYXQgc2hlbGwgcHJvbXB0LCBtYWtlIGEg S2VybWl0IGRpcmVjdG9yeSkKKyAgY2Qga2VybWl0ICAgICAgICAgICAgICAgICAgICAgIChtYWtl IGl0IHlvdXIgY3VycmVudCBkaXJlY3RvcnkpCisKKyAgZnRwIGtlcm1pdC5jb2x1bWJpYS5lZHUg ICAgICAgIChtYWtlIGFuIGZ0cCBjb25uZWN0aW9uKQorICB1c2VyOiBhbm9ueW1vdXMgICAgICAg ICAgICAgICAgKGxvZyBpbiBhcyB1c2VyICJhbm9ueW1vdXMiLCBsb3dlciBjYXNlISkKKyAgcGFz c3dvcmQ6ICAgICAgICAgICAgICAgICAgICAgICh1c2UgeW91ciBlbWFpbCBpZCBhcyBhIHBhc3N3 b3JkKQorICBjZCBrZXJtaXQvYXJjaGl2ZXMgICAgICAgICAgICAgKGdvIHRvIHRoZSBhcmNoaXZl cyBkaXJlY3RvcnkpCisgIHR5cGUgYmluYXJ5ICAgICAgICAgICAgICAgICAgICAoc3BlY2lmeSBi aW5hcnkgZmlsZSB0cmFuc2ZlcikKKyAgZ2V0IGNrdTMwMC50YXIuWiAgICAgICAgICAgICAgIChn ZXQgdGhlIHRhciBhcmNoaXZlKSAob3IgZ2V0IGNrdTE5Mi50YXIuZ3opCisgIGJ5ZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoZGlzY29ubmVjdCBhbmQgZXhpdCBmcm9tIGZ0cCkKKworICB1 bmNvbXByZXNzIGNrdTMwMC50YXIuWiAgICAgICAgKGF0IHRoZSBzaGVsbCBwcm9tcHQsIHVuY29t cHJlc3MgdGhlIGFyY2hpdmUpCisgIHRhciB4dmYgY2t1MzAwLnRhciAgICAgICAgICAgICAoZXh0 cmFjdCB0aGUgZmlsZXMgZnJvbSB0aGUgdGFyIGFyY2hpdmUpCisgIG1ha2UgeHh4ICAgICAgICAg ICAgICAgICAgICAgICAoYnVpbGQgQy1LZXJtaXQgZm9yIHlvdXIgc3lzdGVtKQorCisod2hlcmUg Inh4eCIgaXMgdGhlIG1ha2VmaWxlIGVudHJ5IGFwcHJvcHJpYXRlIGZvciB5b3VyIHN5c3RlbS4p CisKK0FsbCBDLUtlcm1pdCBzb3VyY2UgYW5kIG90aGVyIHRleHQgZmlsZXMgYXJlIGFsc28ga2Vw dCBzZXBhcmF0ZWx5IGluIHRoZQora2VybWl0L2YgZGlyZWN0b3J5LiAgVGhlIGZpbGVzIG5lY2Vz c2FyeSB0byBidWlsZCBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24KK29mIEMtS2VybWl0IGFy ZSBsaXN0ZWQgaW4gdGhlIGFwcHJvcHJpYXRlIG1ha2VmaWxlIG9yIGVxdWl2YWxlbnQ6CisKKyAg ICAgICBVTklYOiBtYWtlZmlsZSAob3IgcmVuYW1lIGNrdWtlci5tYWsgdG8gbWFrZWZpbGUpCisg ICAyLjExIEJTRDogY2t1YnMyLm1hayAocmVuYW1lIHRvIG1ha2VmaWxlKSwgY2t1c3RyLnNlZAor ICAgICBQbGFuIDk6IGNrcGtlci5tayAgKHJlbmFtZSB0byBta2ZpbGUpCisgIE1hY2ludG9zaDog Y2tta2VyLm1hayAocmVuYW1lIHRvIGtlcm1pdC5tYWtlLCB1c2UgTVBXIEMgMy4yKQorICAgICAg ICBWTVM6IENLVktFUi5DT00gKERDTCkgKGFuZCBvcHRpb25hbGx5IGFsc28gQ0tWS0VSLk1NUykK KyAgICAgICAgICAgICBvciBDS1ZPTEQuQ09NIChmb3IgVk1TIDQueCkKKyAgICAgIEFtaWdhOiBD S0lLRVIuTUFLIChBenRlYyBDKSBvciBDS0lTQVMuTUFLIChTQVMgQykKKyAgIEF0YXJpIFNUOiBD S1NLRVIuTUFLCisgICAgICAgT1MtOTogY2s5a2VyLm1hayBvciBjazlrZXIuZ2NjCisgICAgIEFP Uy9WUzogY2tkbWFrLmNsaSwgY2tkY2MuY2xpLCBja2RsbmsuY2xpCitTdHJhdHVzIFZPUzogY2ts bWFrLmNtCisKK01pbmltYWwgc291cmNlIGZpbGVzIGZvciBidWlsZGluZyBzZWxlY3RlZCB2ZXJz aW9ucyAodGhlc2UgcGF0dGVybnMgZ2V0IGFsbAordGhlIGZpbGVzIHlvdSBuZWVkLCBhbmQgaW4g c29tZSBjYXNlcyBtYXliZSBhIGZldyBleHRyYSk6CisKKyAgIFVOSVg6ICAgY2tbY3V3XSouW2N3 aF0gICAoaW5jbHVkaW5nIFFOWCwgUGxhbiA5LCBhbmQgQmVCb3gpCisgICBVTklYOiAgIGNrW2N1 d19dKi5bY3doXSAgKFVuaXggd2l0aCBzZWN1cml0eSBtb2R1bGVzKQorICAgVk1TOiAgICBja1tj dXd2XSouW2N3aF0gIFZNUworICAgVk1TOiAgICBja1tjdXd2X10qLltjd2hdIFZNUyB3aXRoIFNT TC9UTFMKKyAgIE1hYzogICAgY2tbY3V3bV0qLltjd2hyXSBPbGQgTWFjIE9TLCBub3QgTWFjIE9T IFgsIHdoaWNoIGlzIFVOSVguCisgICBBT1MvVlM6IGNrW2N1d2RdKi5bY3doXQorICAgVk9TOiAg ICBja1tjd2hsXSouW2N3aF0KKyAgIEFtaWdhOiAgY2tbY3V3aV0qLltjd2hdCisgICBBdGFyaTog IGNrW2N1d3NdKi5bY3doXQorICAgT1MtOTogICBja1tjdXc5XSouW2N3aGFdCisKK0ZpbmFsbHks IGhlcmUgaXMgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBDLUtlcm1pdCBmaWxl IG5hbWluZworY29udmVudGlvbnMuICBBIEMtS2VybWl0IGZpbGVuYW1lIGhhcyB0aGUgZm9ybToK KworICBDSzxzeXN0ZW0+PHdoYXQ+Ljx0eXBlPgorCit3aGVyZToKKworPHN5c3RlbT4gaXMgZGVz Y3JpYmVkIGVhcmxpZXIgaW4gdGhpcyBmaWxlOworCis8dHlwZT4gaXMgdGhlIGZpbGUgdHlwZSAo dXNlIGxvd2VyY2FzZSBvbiBVTklYLCBWT1MsIG9yIEFPUy9WUyk6CisKKyAgYzogICBDIGxhbmd1 YWdlIHNvdXJjZQorICBoOiAgIEhlYWRlciBmaWxlIGZvciBDIGxhbmd1YWdlIHNvdXJjZQorICB3 OiAgIFdhcnQgcHJlcHJvY2Vzc29yIHNvdXJjZSwgY29udmVydGVkIGJ5IFdhcnQgKG9yIExleCkg dG8gYSBDIHByb2dyYW0KKyAgcjogICBNYWNpbnRvc2ggcmVzb3VyY2UgZmlsZSAoOC1iaXQgdGV4 dCkKKyAgYTogICBBc3NlbWJsZXIgc291cmNlCisKKyAgdHh0OiBQbGFpbiB0ZXh0LgorICBucjog IE5yb2ZmL1Ryb2ZmIHRleHQgZm9ybWF0dGVyIHNvdXJjZSBmb3IgVU5JWCAibWFuIHBhZ2UiCisg IG1zczogU2NyaWJlIHRleHQgZm9ybWF0dGVyIHNvdXJjZQorICBwczogIFR5cGVzZXQgbWF0ZXJp YWwgdG8gYmUgcHJpbnRlZCBvbiBhIFBvc3RTY3JpcHQgcHJpbnRlcgorICBwZGY6IEFuIEFkb2Jl IFBERiBmaWxlCisgIGhscDogQSBWTVMgSGVscCB0b3BpYworCisgIGluaTogSW5pdGlhbGl6YXRp b24gZmlsZQorICBrc2M6IEEgS2VybWl0IFNjcmlwdCB0byBiZSBleGVjdXRlZCBieSB0aGUgVEFL RSBjb21tYW5kCisgIGtkZDogQSBLZXJtaXQgRGlhbGluZyBEaXJlY3RvcnkKKyAga25kOiBBIEtl cm1pdCBOZXR3b3JrIERpcmVjdG9yeQorICBrc2Q6IEEgS2VybWl0IFNlcnZpY2VzIERpcmVjdG9y eQorCisgIG1hazogQSBNYWtlZmlsZSBvciBvdGhlciBidWlsZCBwcm9jZWR1cmUgKG9mdGVuIG5l ZWRzIHJlbmFtaW5nKQorICBjb206IChWTVMgb25seSkgYSBEQ0wgY29tbWFuZCBwcm9jZWR1cmUK KyAgY2xpOiAoQU9TL1ZTIG9ubHkpIGEgY29tbWFuZCBwcm9jZWR1cmUKKyAgY21kOiAoT1MvMiBv bmx5KSBhIFJleHggY29tbWFuZCBwcm9jZWR1cmUKKworICBib286ICJib28iLWVuY29kZWQgZXhl Y3V0YWJsZSBwcm9ncmFtLCBkZWNvZGUgd2l0aCBDS0JVTkIgcHJvZ3JhbS4KKyAgaGV4OiAiaGV4 Ii1lbmNvZGVkIGV4ZWN1dGFibGUgcHJvZ3JhbSwgZGVjb2RlIHdpdGggQ0tWREVIIHByb2dyYW0g KFZNUyBvbmx5KS4KKyAgaHF4OiBCaW5IZXgnZCBNYWNpbnRvc2ggS2VybWl0IHByb2dyYW0sIGRl Y29kZSB3aXRoIEJpbkhleCB2ZXJzaW9uIDQuMC4KKyAgdXVlOiBBIHV1ZW5jb2RlZCBiaW5hcnkg ZmlsZSwgZGVjb2RlIHdpdGggdXVkZWNvZGUgb3IgKERHIG9ubHkpIENLREVDTy4KKworICBkZWY6 IEFuIE9TLzIgbGlua2VyIGRlZmluaXRpb25zIGZpbGUuCisgIHNoOiAgQSBVTklYIHNoZWxsIHNj cmlwdC4KKyAgc2VkOiBBIFVOSVggc2VkIChlZGl0b3IpIHNjcmlwdC4KKyAgc3RyOiBBIGZpbGUg b2YgY2hhcmFjdGVyIHN0cmluZ3MgZXh0cmFjdGVkIGZyb20gQy1LZXJtaXQgKEJTRCAyLjF4IG9u bHkpLgorCis8d2hhdD4gaXMgbW5lbW9uaWMgKHVwIHRvIDMgY2hhcmFjdGVycykgZm9yIHdoYXQn cyBpbiB0aGUgZmlsZToKKworTk9URTogQWZ0ZXIgQy1LZXJtaXQgNi4wLCB0ZXh0IGZpbGV0eXBl cyBzdWNoIGFzIC5ET0MgYW5kIC5ITFAgd2VyZSBjaGFuZ2VkCit0byAuVFhUIHRvIGF2b2lkIGNv bmZ1c2lvbiBpbiBXaW5kb3dzLWJhc2VkIFdlYiBicm93c2Vycywgd2hpY2ggd291bGQKK290aGVy d2lzZSBtaXN0YWtlIHRoZW0gZm9yIE1pY3Jvc29mdCBXb3JkIG9yIFdpbmRvd3MgSGVscCBkb2N1 bWVudHMuCisKKyAgYWFhOiBBICJyZWFkLW1lIiBmaWxlLCBsaWtlIHRoaXMgb25lCisgIGluczog SW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBvciBwcm9jZWR1cmVzCisgIGJ3cjogIkJld2FyZSIg ZmlsZSAtLSB0aGluZ3MgdG8gd2F0Y2ggb3V0IGZvciwgaGludHMgYW5kIHRpcHMKKyAgcGxtOiBQ cm9ncmFtIExvZ2ljIE1hbnVhbAorICBrZXI6IEdlbmVyYWwgQy1LZXJtaXQgZGVmaW5pdGlvbnMs IGluZm9ybWF0aW9uLCBkb2N1bWVudGF0aW9uCisKKyAgbm5uOiBEaWdpdHM6IEMtS2VybWl0IGVk aXQgbnVtYmVyIChlLmcuIGNrdTMwMC50YXIuZ3opCisgIGNtZDogQ29tbWFuZCBwYXJzaW5nCisg IGNvbjogQ09OTkVDVCBjb21tYW5kCisgIGNuczogQ09OTkVDVCBjb21tYW5kIChVTklYIG9ubHkg LSB2ZXJzaW9uIHRoYXQgdXNlcyBzZWxlY3QoKSwgbm90IGZvcmsoKSkKKyAgZGViOiBEZWJ1Zy9U cmFuc2FjdGlvbiBMb2cgZm9ybWF0cywgVHlwZWRlZnMKKyAgZGlhOiBNb2RlbS9EaWFsZXIgY29u dHJvbAorICBmaW86IFN5c3RlbS1kZXBlbmRlbnQgRmlsZSBJL08KKyAgZm5zOiBQcm90b2NvbCBz dXBwb3J0IGZ1bmN0aW9ucworICBmbjI6IE1vcmUgcHJvdG9jb2wgc3VwcG9ydCBmdW5jdGlvbnMg KGFuZCBGTjMsIC4uLikKKyAgbGliOiBDb21tb24gbGlicmFyeSByb3V0aW5lcyBtb2R1bGUKKyAg bWFpOiBNYWluIHByb2dyYW0KKyAgbmV0OiBOZXR3b3JrIGkvbyBtb2R1bGUKKyAgcHJvOiBQcm90 b2NvbAorICBzY3I6IFNDUklQVCBjb21tYW5kCisgIHRlbDogVGVsbmV0IHByb3RvY29sIG1vZHVs ZQorICB0aW86IFN5c3RlbS1kZXBlbmRlbnQgY29tbXVuaWNhdGlvbnMgaS9vICYgY29udHJvbCBh bmQgaW50ZXJydXB0IGhhbmRpbmcKKyAgc2lnOiBTaWduYWwgaGFuZGxpbmcgbW9kdWxlCisgIHVz cjogSW50ZXJhY3RpdmUvc2NyaXB0IHVzZXIgaW50ZXJmYWNlCisgIHVzMjogTW9yZSB1c2VyIGlu dGVyZmFjZSAobWFpbmx5IGhlbHAgdGV4dCkKKyAgdXMzOiBTdGlsbCBtb3JlIHVzZXIgaW50ZXJm YWNlIChhbmQgVVNSNCwgVVNSNSwgVVNSNiwgVVNSNykKKyAgdXN4OiBDb21tb24gdXNlciBpbnRl cmZhY2UgZnVuY3Rpb25zCisgIHVzeTogQ29tbWFuZC1saW5lIHBhcnNpbmcKKyAgeGxhOiBDaGFy YWN0ZXIgc2V0IHRyYW5zbGF0aW9uIG1vZHVsZQorICB1bmk6IFVuaWNvZGUgc3VwcG9ydAorICBw dHk6IFBzZXVkb3Rlcm1pbmFsIHN1cHBvcnQKKyAgbWRiOiBNYWxsb2MtZGVidWdnaW5nIG1vZHVs ZSAobm90IGluY2x1ZGVkIGluIHJlYWwgYnVpbGRzKQorICBzdHI6IFN0cmluZ3MgbW9kdWxlIChv bmx5IGZvciAyLnhCU0QpCisKKyhFbmQgb2YgY2thYWFhLnR4dCkKCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYzMwMi50eHQgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrYzMwMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMTNhNjYxYQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjMzAyLnR4dApAQCAtMCwwICsxLDc4ODEgQEAK K0MtS0VSTUlUIDkuMCBDSEFOR0UgTE9HIChDaGFuZ2VzIHNpbmNlIDguMC4yMDcgLyBLOTUgMi4x LjMgSmFudWFyeSAyMDAzKQorCisgIENocm9ub2xvZ2ljYWwgb3JkZXIuCisgIEdvIHRvIHRoZSBi b3R0b20gdG8gZmluZCB0aGUgbmV3ZXN0IGVkaXRzLgorCisgIEYuIGRhIENydXosIFRoZSBLZXJt aXQgUHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTllDLgorICBMYXN0IHVwZGF0ZTogMjgg SnVuZSAyMDExLgorCitGVFAgVVNFUiwgRlRQIEFDQ09VTlQsIHBsdXMgdGhlIHZhcmlvdXMgcHJv bXB0cyBhbmQgc3dpdGNoZXMgZm9yIEZUUCB1c2VybmFtZSwKK3Bhc3N3b3JkLCBhbmQgYWNjb3Vu dCBhbGwgbmVnbGVjdGVkIHRvIHN0cmlwIHF1b3RlcywgYW5kIGluIG1vc3QgY2FzZXMgcXVvdGVz CithcmUgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgYSB1c2VybmFtZSB0aGF0IGNvbnRhaW5zIHNwYWNl cy4gIGNrY2Z0cC5jLAorMTUgSmFuIDIwMDMuCisKK0ZUUCBNUFVUIGYxIGYyIGYzLi4uIGdldHMg YSBwYXJzZSBlcnJvciBpZiBhbnkgb2YgdGhlIGZuJ3MgZG8gbm90IG1hdGNoIGFuCitleGlzdGlu ZyBmaWxlLiAgVGhpcyBpcyBiYWQgZm9yIHNjcmlwdHMuICBJbiBkb2Z0cHB1dCgpLCBjbWZkYigp IGxvb2tzIGZvcgora2V5d29yZHMgKHN3aXRjaGVzKSBvciBDTUlGSS4gIFdoZW4gaXQgaGl0cyBD TUlGSSwgaXQgZXhpdHMgZnJvbSB0aGUgaW5pdGlhbAorcGFyc2UgbG9vcCBhbmQgdGhlbiBkb2Vz IGFkZGl0aW9uYWwgY21pZmkoKXMgaW4gYSBsb29wIHVudGlsIGRvbmUuICBUaGUgbW9zdAorb2J2 aW91cyBmaXggaXMgdG8gcGFyc2UgZWFjaCBmaWVsZCB3aXRoIGNtZmRiKENNSUZJLENNRkxEKSwg aS5lLiBmYWxsIGJhY2sgdG8KK0NNRkxEIGlmIENNSUZJIGRvZXNuJ3QgbWF0Y2ggYW55dGhpbmcu ICBUaGVuIGlmIENNRkxEIHdhcyB1c2VkLCB3ZSBkb24ndCBhZGQKK3RoZSBmaWxlc3BlYyB0byB0 aGUgbGlzdC4gIFRoaXMgaXMgYSByYXRoZXIgYmlnIGNoYW5nZSBidXQgaXQgc2VlbXMgdG8gd29y ay4KK05vIGVycm9yIG1lc3NhZ2VzIG9yIGZhaWx1cmVzIGhhcHBlbiBmb3Igbm9uLW1hdGNoaW5n IGZpZWxkcywgYnV0IGFuIGVycm9yCittZXNzYWdlIGlzIHByaW50ZWQgKGFuZCB0aGUgTVBVVCBj b21tYW5kIGZhaWxzKSBpZiBub25lIG9mIHRoZSBmaWVsZHMgbWF0Y2gKK2FueSBmaWxlcy4gIFRo aXMgZml4IGdvdCBpbiB0b28gbGF0ZSBmb3IgMi4xLjM7IHdvcmthcm91bmQ6IHVzZSBDLVNoZWxs CitsaWtlIHdpbGRjYXJkIGxpc3QgKGZ0cCBtcHV0ICJ7Ki5hYmMsZm9vLip9IikuICBja2NmdHAu YywgMTYgSmFuIDIwMDMuCisKK0dSRVAgZGlkIG5vdCBwYXNzIGl0cyBwYXR0ZXJuIHRocm91Z2gg dGhlIGV4cGFuZGVyLCB0aHVzIHZhcmlhYmxlcyBjb3VsZAorbm90IGJlIHVzZWQgZm9yIHBhdHRl cm5zLiAgVGhpcyBtdXN0IGhhdmUgYmVlbiBhbiBvdmVyc2lnaHQgLS0gSSBjYW4ndCBmaW5kCith bnl0aGluZyBpbiBteSBub3RlcyBhYm91dCBpdC4gIEZpeGVkIGluIGRvZ3JlcCgpOiBja3V1czYu YywgMjQgSmFuIDIwMDMuCisKK05ldyBtYWtlZmlsZSB0YXJnZXQgZm9yIEhQLVVYIDExLnh4IHdp dGggT3BlblNTTCBmcm9tIFRhcGFuaSBUYXJ2YWluZW4uCittYWtlZmlsZSwgMzEgSmFuIDIwMDMu CisKK0Zyb20gSmVmZjoKKyAuIEF2b2lkIGNvcmUgZHVtcCB3aGVuIGRlcmVmZXJlbmNpbmcgdG5j X2dldF9zaWduYXR1cmUoKTogY2t1dXM0LmMuCisgLiBCdW1wIHZlcnNpb24gbnVtYmVycyB0byA4 LjAuMjA4LCAyLjEuNDogY2tjbWFpLmMuCisKK0FkZGVkIC9OT0xPR0lOIHRvIEZUUCBbT1BFTl0u ICBja2NmdHAuYywgMTAgRmViIDIwMDMuCisKK0Rvbid0IGR1bXAgY29yZSBpZiBGVFAgREVCVUcg aXMgT04gYW5kIEZUUCBPUEVOIGRvZXMgbm90IGluY2x1ZGUgYSBzZXJ2aWNlLgorb3BlbmZ0cCgp OiBja2NmdHAuYywgMTAgRmViIDIwMDMuCisKK0hFTFAgUEFUVEVSTiB0ZXh0IGluY29ycmVjdGx5 IGlkZW50aWZpZWQgY29tbWFuZHMgYW5kIGZ1bmN0aW9ucyB3aXRoCitmbG9hdGluZyBhbmQgYW5j aG9yZWQgcGF0dGVybnMuICBUaGUgY29ycmVjdGVkIGxpc3RzIGFyZToKK0Zsb2F0aW5nOiBHUkVQ LCBUWVBFIC9NQVRDSDosIC9FWENFUFQ6IHBhdHRlcm5zLCBcZmFycmF5bG9vaygpLAorQW5jaG9y ZWQ6IElGIE1BVENILCBmaWxlLW1hdGNoaW5nIHdpbGRjYXJkcywgXGZzZWFyY2goKSwgXGZyc2Vh cmNoKCkKK2NrdXVzMi5jLCAxMCBGZWIgMjAwMy4gICAgIAorCitJTlBVVCBuIFxmcGF0dGVybih4 eHgpIGRpZCBub3Qgd29yayBmb3IgY2FzZS1pbmRlcGVuZGVudCBjb21wYXJpc29ucy4KK0ZpeGVk IGluIGRvaW5wdXQoKTogY2t1dXM0LmMsIDEwIEZlYiAyMDAzLgorCitJdCBzZWVtcyBcZnBhdHRl cm4oKSBkaWRuJ3Qgd29yayB3aXRoIE1JTlBVVCBhdCBhbGwuICBUaGVyZSB3YXMgbm8gY29kZSB0 bworaGFuZGxlIFxmcGF0dGVybigpIGluIHRoZSBNSU5QVVQgcGFyc2UgbG9vcCwgc28gaXQgbmV2 ZXIgd29ya2VkLiAgVGhlIGNvZGUKK2hhZCB0byBiZSB0b3RhbGx5IHJld3JpdHRlbiB0byB1c2Ug Y21mbGQoKSBpbiBhIGxvb3AsIHJhdGhlciB0aGFuIGNtdHh0KCkKK2FuZCB0aGVuIGNrc3BsaXQo KS4gIEZ1cnRoZXJtb3JlLCB3aGVuZXZlciBhbnkgb2YgdGhlIGZpZWxkcyB3YXMgYW4KK1xmam9p bigpLCB0aGlzIGhhZCB0byBiZSBzcGxpdC4gIGNrdXVzci5jLCAxMCBGZWIgMjAwMy4KKworTWFj cm8gcmVwbGFjZW1lbnQgdmlhIFxtKCkgYW5kIFxmZGVmaW5pdGlvbigpIGRvZXMgbm90IHdvcmsg YXMgYWR2ZXJ0aXNlZAorKGkuZS4gY2FzZSBzZW5zaXRpdmVseSkgZm9yIGFzc29jaWF0aXZlIGFy cmF5IGVsZW1lbnRzOyBlLmcuIFxtKHh4eDxhYmM+KSBpcwordHJlYXRlZCB0aGUgc2FtZSBhcyBc bSh4eHg8QUJDPiksIGNvbnRyYXJ5IHRvIHNlY3Rpb24gNy4xMC4xMCBvZiB0aGUgQy1LZXJtaXQK KzcuMCB1cGRhdGUgbm90ZXMsIGFuZCB0byB0aGUgZmFjdCB0aGF0IHRoZSB0d28gcmVhbGx5IGRv IGV4aXN0IHNlcGFyYXRlbHkuCitGaXhlZCBieSBhZGRpbmcgYSBzdGF0aWMgZnVuY3Rpb24gaXNh YXJyYXkocykgd2hpY2ggc3VjY2VlZHMgaWYgcyBpcyBhbgorYXNzb2NpYXRpdmUgYXJyYXkgcmVm ZXJlbmNlIGFuZCBmYWlscyBvdGhlcndpc2UsIGFuZCB0aGVuIGhhdmluZyBcbSgpCithbmQgXGZk ZWYoKSBjYWxsIG14eGxvb2soKSAoY2FzZS1zZW5zaXRpdmUgbG9va3VwKSBpZiBpc2FhcnJheSgp LCBvdGhlcndpc2UKKyhhcyBiZWZvcmUpIG14bG9vaygpKS4gIGNrdXVzNC5jLCAxMSBGZWIgMjAw My4KKworRml4ZWQgRlRQIE9QRU4gdG8gYWxsb3cgdGhlIC9VU0VSIHN3aXRjaCB0byBvdmVycmlk ZSBTRVQgRlRQIEFVVE9MT0dJTiBPRkYsCitqdXN0IGFzIC9OT0xPR0lOIG92ZXJyaWRlcyBTRVQg RlRQIEFVVE9MT0dJTiBPTi4gIGNrY2Z0cC5jLCAxMSBGZWIgMjAwMy4KKworSW4gSzk1LCAic2V0 IGtleSBcMTIzNCBcMjdIIiAoYW55IFNFVCBLRVkgY29tbWFuZCBpbiB3aGljaCB0aGUgZmlyc3Qg Y2hhciBvZgordGhlIGRlZmluaXRpb24gd2FzIGJhY2tzbGFzaCwgYW5kIHRoZSBPTkxZIGNoYXJh Y3RlciBhZnRlciB0aGUgYmFja3NsYXNoCitxdWFudGl0eSB3YXMgYW4gdXBwZXJjYXNlIGxldHRl ciwgdGhhdCBsZXR0ZXIgd291bGQgYmUgbG93ZXJjYXNlZCkuICBEaWFnbm9zaXM6Cit4bG9va3Vw KCkgcG9raW5nIGl0cyBhcmd1bWVudCAoc2VlIG5vdGVzIGZyb20gSnVseSAyMDAwKS4gIEplZmYg c2VudCBhIGZpeC4KK2NrdWNtZC5jLCAxNSBGZWIgMjAwMy4KKworUmFuIG15IFMtRXhwcmVzc2lv biB0b3J0dXJlIHRlc3QgdG8gbWFrZSBzdXJlIFNleHBzIHN0aWxsIHdvcmtlZC4gIFRoZXkgZG8s CitleGNlcHQgdGhlIGJpdHdpc2UgJiBhbmQgfCBvcGVyYXRvcnMgd2VyZSBicm9rZW4sIGUuZy4g KCYgNyAyKSBhbmQgKHwgMSAyIDQpCitnZXQgIkludmFsaWQgb3BlcmFuZCIgZXJyb3JzLiAgSmVm ZidzIGNvZGUgaGFkIGFkZGVkIGFuIGVhcmx5IGZhaWx1cmUgcmV0dXJuCitmcm9tIHRoZSBsb29r dXAgbG9vcCB3aGVuIHdoZW4gYSBzaW5nbGUtYnl0ZSBrZXl3b3JkIG1hdGNoZWQgYSBrZXl3b3Jk IHRoYXQKK3N0YXJ0ZWQgd2l0aCB0aGUgc2FtZSBieXRlIGJ1dCB3YXMgbW9yZSB0aGFuIG9uZSBi eXRlIGxvbmcuICBTbyAiJiIgd291bGQgaGl0CisiJiYiIGFuZCBmYWlsIGluc3RlYWQgb2YgY29u dGludWluZyBpdHMgc2VhcmNoICh4bG9va3VwIHRhYmxlcyBhcmVuJ3Qgc29ydGVkCitzbyB0aGVy ZSBjYW4gYmUgbm8gZWFybHkgcmV0dXJuKS4gIEZpeGVkIGluIHhsb29rdXAoKTogY2t1Y21kLmMs IDE2IEZlYiAyMDAzLgorCitHb3QgcmlkIG9mICJrcmJtaXQiIHRhcmdldCBmcm9tIG1ha2VmaWxl LiAgSXQncyBzdGlsbCB0aGVyZSwgYnV0IHdlIGRvbid0Cit1c2UgaXQgYW55IG1vcmUuICBBbGwg c2VjdXJlIHRhcmdldHMgbm93IHVzZSAieGVybWl0IiwgYW5kIHByb2R1Y2UgYSBiaW5hcnkKK2Nh bGxlZCB3ZXJtaXQsIGp1c3QgbGlrZSB0aGUgcmVndWxhciBvbmVzIGRvIChleGNlcHQgdGhlIG9s ZCBja3Vjb24uYyBvbmVzKS4KK05vbi1zZWN1cmUgdGFyZ2V0cywgc2luY2UgdGhleSBkb24ndCBk ZWZpbmUgYW55IG9mIHRoZSBzZWN1cml0eSBzeW1ib2xzLAord2luZCB1cCBjb21waWxpbmcgYW5k IGxpbmtpbmcgdG8gKG1vc3RseSkgZW1wdHkgc2VjdXJpdHkgbW9kdWxlcy4gIG1ha2VmaWxlLAor MTUgRmViIDIwMDMuCisKK0FkZGVkIFxmY3Z0ZGF0ZSh4eHgsMykgdG8gZm9ybWF0IGl0cyByZXN1 bHQgaW4gTURUTSBmb3JtYXQgKHl5eXltbWRkaGhtbXNzLAorYWxsIG51bWVyaWMsIG5vIHNwYWNl cyBvciBwdW5jdHVhdGlvbikuICBPZiBjb3Vyc2UgdGhlc2UgbnVtZXJpYyBzdHJpbmdzCithcmUg dG9vIGJpZyB0byBiZSAzMi1iaXQgbnVtYmVycyBhbmQgYXJlIHVzZWxlc3MgZm9yIGFyaXRobWV0 aWMsIGJ1dCB0aGV5J3JlCit1c2VmdWwgZm9yIGxleGljYWwgY29tcGFyaXNvbiwgZXRjLiAgY2t1 dXNbMjRdLmMsIDE2IEZlYiAyMDAzLgorCitUaGUgZm9sbG93aW5nIEZUUCBjb21tYW5kcyBkaWQg bm90IHNldCBGQUlMVVJFIHdoZW4gdGhleSBmYWlsZWQ6IFJNRElSLAorQ0QsIENEVVAsIEZpeGVk IGluIHRoZSBjb3JyZXNwb25kaW5nIGRvZnRwYmxhaCgpIHJvdXRpbmVzLiAgY2tjZnRwLmMsCisx NiBGZWIgMjAwMy4KKworUkVOQU1FIHdvdWxkIHNvbWV0aW1lcyBub3QgcHJpbnQgYW4gZXJyb3Ig bWVzc2FnZSB3aGVuIGl0IGZhaWxlZCwgZS5nLiBpbiBLOTUKK3doZW4gdGhlIGRlc3RpbmF0aW9u IGZpbGUgYWxyZWFkeSBleGlzdGVkLiAgY2t1dXM2LmMsIDE3IEZlYiAyMDAzLgorCitGaXhlZCBD T1BZIGVycm9yIG1lc3NhZ2VzLCB3aGljaCBkaWQgbm90IGNvbWUgb3V0IGluIHN0YW5kYXJkIGZv cm1hdCB3aGVuCisvTElTVCB3YXMgbm90IGluY2x1ZGVkLiAgY2t1dXM2LmMsIDE3IEZlYiAyMDAz LgorCitGaXhlZCAjaWZkZWZzIGluIGNrX2NycC5jIHRvIGFsbG93IG5vbnNlY3VyZSBidWlsZHMg b24gb2xkIHBsYXRmb3JtcyBsaWtlCitTeXN0ZW0gVi82OCBSMy4gIDE5IEZlYiAyMDAzLgorCitT aW1pbGFyIHRyZWF0bWVudCBmb3IgY2tfc3NsLmMuICAyMCBGZWIgMjAwMy4KKworRnJvbSBKZWZm LCAyMSBGZWIgMjAwMzoKKyAuIEFJWDUzIGFuZCBBSVg1MiBzeW1ib2xzIGZvciBja2NkZWIuaCwg bWFrZWZpbGUuCisgLiBOZXcgZ2NjIHRhcmdldHMgZm9yIHZhcmlvdXMgQUlYIDQueC81LnggdmVy c2lvbnM6IG1ha2VmaWxlLgorIC4gQ29weXJpZ2h0IGRhdGUgdXBkYXRlczogY2tfY3JwLmMsIGNr X3NzbC5jLgorIC4gRU5BQkxFL0RJU0FCTEUgUVVFUlkgYnJva2VuIGJlY2F1c2Uga2V5d29yZCB0 YWJsZSBvdXQgb2Ygb3JkZXI6IGNrdXVzci5jLgorIC4gRml4ZWQgdGhlIHVzZSBvZiBIVFRQIHBy b3hpZXMgZm9yIEhUVFAgW1JFXU9QRU4gZm9yIFVuaXg6IGNrY25ldC5jLgorCitBbHNvIGZvciBL OTUgb25seTogQWxsb3cgZmlsZSB0cmFuc2ZlciB3aGVuIEs5NSBpcyBpbnZva2VkIG9uIHRoZSBy ZW1vdGUgZW5kCitvZiBhIGNvbm5lY3Rpb24gdG8gYSBQcmFnbWEgU3lzdGVtcyBUZXJtaW5hbCBT ZXJ2ZXIgY29ubmVjdGlvbjsgYXV0b21hdGljYWxseQorU0VUIEVYSVQgSEFOR1VQIE9GRiB3aGVu IGludm9rZWQgd2l0aCBvcGVuIHBvcnQgaGFuZGxlICgiazk1IC1sIG5ubm4iKS4KKworImNkIGEq IiBmYWlsZWQgZXZlbiB3aGVuICJhKiIgbWF0Y2hlZCBvbmx5IG9uZSBkaXJlY3RvcnkuICBGaXhl ZCBpbiBjbWlmaSgpOgorY2t1Y21kLmMsIDIxIEZlYiAyMDAzLgorCitJbiB0aGUgVW5peCB2ZXJz aW9uLCByZXBsYWNlICJleHRlcm4gaW50IGVycm5vOyIgd2l0aCAiI2luY2x1ZGUgPGVycm5vLmg+ IgoraWYgX19HTElCQ19fIGlzIGRlZmluZWQsIHNpbmNlIGdsaWJjIG5vdyBkZWZpbmVzIGEgdGhy ZWFkLXNwZWNpZmljIGVycm5vLgorY2tjZGViLmgsIDI2IEZlYiAyMDAzLgorCitBZGRlZCAjaWZk ZWZzIHRvIHNraXAgY29tcGlsYXRpb24gb2YgY2t1YXRoLmMgaW4gbm9uc2VjdXJlIGJ1aWxkcy4g IFRlc3RlZAorYnkgYnVpbGRpbmcgYm90aCBzZWN1cmUgYW5kIHJlZ3VsYXIgdmVyc2lvbnMgaW4g TGludXguICBja3VhdGguYywgMjYgRmViIDIwMDMuCisKK1JhbiB0aGUgYnVpbGQtaW4tODQtZGlm ZmVyZW50LWNvbmZpZ3VyYXRpb25zIHNjcmlwdCBvbiBMaW51eCB0byBtYWtlIHN1cmUgaXQKK3N0 aWxsIGJ1aWxkcyB3aXRoIGFsbCBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIGZlYXR1cmUgc2Vs ZWN0aW9uIG9wdGlvbnMuCitBbGwgT0suICAyNiBGZWIgMjAwMy4KKworQnVpbHQgb24gVk1TLiAg TmVlZGVkIHRvIGFkZCBhIHByb3RvdHlwZSBmb3IgbXh4bG9vayooKSB0byBja3V1c3IuaDsgYnVp bHQKK09LIG90aGVyd2lzZS4gIDI2IEZlYiAyMDAzLgorCitGcm9tIEplZmY6IE1vcmUgI2lmZGVm IHNodWZmbGluZyBmb3Igbm9uc2VjdXJlIGJ1aWxkczogY2t1YXRoLmMsIGNrX3NzbC5jLAorMjcg RmViIDIwMDMuCisKK0FkZGVkIGNvZGUgdG8gZW5zdXJlIFx2KGRvd25sb2FkKSBlbmRzIGluIGEg ZGlyZWN0b3J5IHNlcGFyYXRvciBpbiBVbml4LAorV2luZG93cywgYW5kIE9TLzIuICBja3V1czcu YywgMjcgRmViIDIwMDMuCisKK0FkZGVkIGNvZGUgdG8gSzk1IHpmbnFmcCgpIHRvIHRhY2sgb24g ZGlyZWN0b3J5IHNlcGFyYXRvciB3aGVuIHJldHVybmluZworYSBkaXJlY3RvcnkgbmFtZS4gIGNr b2Zpby5jLCAyNyBGZWIgMjAwMy4KKworU29tZWhvdyBhbiBvbGQgY29weSBvZiBja3VhdGguYyBw b3BwZWQgdG8gcmVwbGFjZSB0aGUgbmV3IG9uZS4gIFB1dCB0aGUgbmV3CitvbmUgYmFjay4gIDI4 IEZlYiAyMDAzLgorCitGcm9tIEplZmY6IEZpeCB0eXBvIGluIG15IEs5NSB6Zm5xZnAoKSBjb2Rl IGZyb20geWVzdGVyZGF5OyBmaXhlcyBmb3IgaGFuZGxpbmcKK1VOQ3MgdW5pZm9ybWx5LCBubyBt YXR0ZXIgd2hpY2ggd2F5IHRoZWlyIHNsYXNoZXMgYXJlIGxlYW5pbmcuICBja29maW8uYywKKzI4 IEZlYiAyMDAzLgorCitBdCBKZWZmIE1lemVpJ3Mgc3VnZ2VzdGlvbiwgc2VwYXJhdGUgdGV4dCBh bmQgYmluYXJ5IG1vZGUgb3BlbiBzZXF1ZW5jZXMKK2ZvciBWTVMgc2Vzc2lvbiBsb2cuICBja3Zm aW8uYywgMjggRmViIDIwMDMuCisKK0FkZGVkIGZyZWVic2Q0OCB0YXJnZXQgZm9yIEZyZWVCU0Qg NC44LiAgbWFrZWZpbGUsIDEgTWFyIDIwMDMuCisKK0NoYW5nZWQgTWFjIE9TIFggZW50cmllcyB0 byBpbmNsdWRlIC1EVVNFX1NUUkVSUk9SLiAgbWFrZWZpbGUsIDIgTWFyIDIwMDMuCisKK0ZpeGVk IEdFVE9LIC9HVUkgdG8gZXZhbHVhdGUgaXRzIHRleHQgYXJndW1lbnQuICBja3V1czYuYywgMyBN YXIgMjAwMy4KKworSmVmZiBmaXhlZCB0aGUgSzk1IERpYWxlciBRVUlDSyBkaWFsb2cgdG8gKGEp IGFsbG93IHRlbXBsYXRlcywgYW5kIChiKSBoYXZlCithIFNhdmUtQXMgb3B0aW9uLiAgMyBNYXIg MjAwMy4KKworSmVmZiBmaXhlZCBhIHByb2JsZW0gd2l0aCB0aGUgWG1vZGVtLUNSQyBjaGVja3N1 bSBiZWluZyBjcnVuY2hlZCB3aGVuZXZlcgordGhlcmUgd2FzIGEgcmV0cmFuc21pc3Npb24uICA3 IE1hciAyMDAzLgorCitBZGRlZCB0YXJnZXQvYmFubmVyIGZvciBUcnU2NCA1LjFCLiAgbWFrZWZp bGUsIGNrdXZlci5oLCA1IE1hciAyMDAzLgorCitJbiBVbml4LCB0aGUgemNvcHkoKSByb3V0aW5l ICh1c2VkIGJ5IHRoZSBDT1BZIGNvbW1hbmQpIHJlc2V0IHRoZSB1c2VyJ3MgdW1hc2sKK3RvIDAg Zm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIEtlcm1pdCBwcm9jZXNzIGxpZmV0aW1lLiAgVGhlIGJ1 ZyB3YXMgaW4KK2NrdWZpby5jIDguMC4xOTQsIDI0IE9jdCAyMDAyLCBhbmQgaXMgZml4ZWQgaW4g Y2t1ZmlvLmMgOC4wLjE5NSwgNiBNYXIgMjAwMy4KK09mIGNvdXJzZSB0aGlzIGhhcHBlbmVkIGFm dGVyIGJ1aWxkaW5nIDE1NSBDLUtlcm1pdCA4LjAuMjA4IGJpbmFyaWVzLiAgKEJ1dAorYmVmb3Jl IG9mZmljaWFsbHkgcmVsZWFzaW5nIDguMC4yMDguKQorCitJbiB0aGUgVk1TIHZlcnNpb24sIGNo YW5nZWQ6CisKKyAgICAgICAgd2hpbGUgKChuLS0pICYmIHh4X2luYygyKSA+IC0xKSA7Cit0bzoK KyAgICAgICAgd2hpbGUgKChuLS0pICYmIHh4X2luYygyKSA+PSAwKSA7CisKK3RvIHN1cHByZXNz IHRoZSAiLi4uaXMgYmVpbmcgY29tcGFyZWQgd2l0aCBhIHJlbGF0aW9uYWwgb3BlcmF0b3IgdG8g YSBjb25zdGFudAord2hvc2UgdmFsdWUgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvIiB3YXJuaW5n LiAgY2t2dGlvLmMsIDcgTWFyIDIwMDIuCisKK0FkZGVkIGEgZGVidWcgY2FsbCB0byBkb2xvZ2Vu ZCBpbiBob3BlcyBvZiBjYXRjaGluZyBvdmVyemVhbG91cyBMb2N1cworc3dpdGNoaW5nLCB3aGlj aCBzZWVtcyB0byBoYXBwZW4gb25seSBpbiBLOTUuICBja3V1czMuYywgNyBNYXIgMjAwMi4KKwor UmVidWlsdCBiaW5hcmllcyBmb3Igc29tZSBvZiB0aGUgbW9yZSBjdXJyZW50IFVuaXggcmVsZWFz ZXM6IEFJWCA0LjMuMy01LjEsCitTb2xhcmlzIDctOSAsIFJlZCBIYXQgNy4wLTguMCwgU2xhY2t3 YXJlIDguMSwgRnJlZWJzZCA0LjctNC44LCBOZXRCU0QgMS42LAorT3BlbkJTRCAzLjIsIFVuaXh3 YXJlIDcuMS4zLCBPcGVuIFVuaXggOCwgT1NSNS4wLjZhLCBldGMuICBBIFVuaXggYmluYXJ5IHdp dGgKK0NPUFkgdW1hc2sgZml4IHNob3dzIGEgNiBNYXIgMjAwMyBkYXRlIGZvciAiVU5JWCBGaWxl IHN1cHBvcnQiIGluIFNIT1cKK1ZFUlNJT05TOyBhIGJpbmFyeSB3aXRob3V0IHRoZSBmaXggc2hv d3MgMjQgT2N0IDIwMDIuCisKK0MtS2VybWl0IDguMC4yMDggZGF0ZWQgMTQgTWFyY2ggMjAwMyBy ZWxlYXNlZCBvbiAxMCBNYXJjaCAyMDAzLgorCistLS04LjAuMjA4LS0tCisKK0Zyb20gSmVmZiAx MyBNYXIgMjAwMzoKKyAuIFVwZGF0ZWQgU1NMIG1vZHVsZSBhbGxvd3MgaW1wb3J0YXRpb24gb2Yg dGlja2V0cyBmcm9tIGhvc3QuCisgLiBmcmVlYnNkNTArb3BlbnNzbCB0YXJnZXQ6IG1ha2VmaWxl LgorIC4gRlRQIFBVVCAvUEVSTUlTU0lPTlMgZXJyb3IgbWVzc2FnZSBmb3IgSzk1OiBja2NmdHAu Yy4KKyAKK0ZpeGVkIE1JTlBVVCB0byBzdHJpcCBxdW90ZXMgb3IgYnJhY2VzIGZyb20gYXJvdW5k IHRhcmdldHMgKHRoaXMgd2FzIGJyb2tlbgorb24gRmViIDEwdGgpLiAgVGhhbmtzIHRvIEphc29u IEhlc2tldHQgZm9yIGRpc2NvdmVyaW5nIGFuZCByZXBvcnRpbmcgdGhpcworKGtpbGxlcikgYnVn LiAgY2t1dXNyLmMsIDE0IE1hciAyMDAzLgorCitDaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHRvIDIw OSBEZXYuMDAuICBja2NtYWkuYywgMTQgTWFyIDIwMDMuCisKK1doaWxlIGRlYnVnZ2luZyB0aGUg YWxwaGFwYWdlIHNjcmlwdCwgSSBmb3VuZCB0aGF0IHRoZSBjb21tYW5kICJtaW5wdXQgOCBcNlwx MworXDIxXDEzIFwxM1wyN1w0XDEzIFwzMFwxMyIgZ2V0cyAiP05vdCBjb25maXJtZWQiIGluIDgu MC4yMDggYW5kIDguMC4yMDksIGJ1dAorbm90IGluIDIwNiBhbmQgZWFybGllci4gIFRoaXMgcHJv YmxlbSB0b28gd2FzIGludHJvZHVjZWQgb24gRmViIDEwdGggYnkKK2NoYW5naW5nIE1JTlBVVCBw YXJzaW5nIGZyb20gY210eHQoKSBmb2xsb3dlZCBieSBja3NwbGl0KCkgdG8gY21mbGQoKSBpbiBh Citsb29wLiAgY21mbGQoKSB1c2VzIHNldGF0bSgpIHRvIHJldHVybiBpdHMgcmVzdWx0IGFuZCBv ZiBjb3Vyc2Ugc2V0YXRtKCkKK2JyZWFrcyBvbiBcMTMuICBDaGFuZ2luZyBzZXRhdG0oKSBub3Qg dG8gZG8gdGhpcyB3b3VsZCBicmVhayBldmVyeXRoaW5nIGVsc2UuCitCdXQgY21mbGQoKSBoYXMg bm8gYXJndW1lbnRzIHRoYXQgbGV0IHVzIHRlbGwgaXQgdG8gZG8gYW55dGhpbmcgZGlmZmVyZW50 IGluCit0aGlzIGNhc2UuICBDaGFuZ2luZyB0aGUgQVBJIHdvdWxkIGJlIGEgZGlzYXN0ZXIuICBU aGUgb25seSBzb2x1dGlvbiBpcyB0byBhZGQKK2FuICJNSU5QVVQgQUNUSVZFIiAobWlucHV0YWN0 aXZlKSBnbG9iYWwgdmFyaWFibGUgdGhhdCB0ZWxscyBjbWZsZCgpIHRvIHRlbGwKK3NldGF0bSgp IG5vdCB0byBicmVhayBvbiBDUi4gIE5vdyBNSU5QVVQgd2l0aCBicmFjZWQgdGFyZ2V0cyBjb250 YWluaW5nIENSCithbmQvb3IgTEYgd29ya3MgaW4gMjA5LCAyMDYsIGFuZCAyMDEgKGJ1dCBub3Qg MjA4KS4gIGNrdWNtZC5jLCBja3V1c3IuYywKK2NrdXVzNS5jLCAxNSBNYXIgMjAwMy4KKworTUlO UFVUIG4gXGZqb2luKCZhKSB3b3JrcyBPSyBpZiBhbGwgdGhlIG1lbWJlcnMgb2YgXCZhW10gYXJl IHRleHQgc3RyaW5ncywgYnV0CitpZiB0aGV5IGFyZSBzdHJpbmdzIG9mIGNvbnRyb2wgY2hhcnMg KGFzIGFib3ZlKSwgdGhleSBkb24ndCBnZXQgc2VwYXJhdGVkIGJ5Cit0aGUgc3BhY2VzLiAgRm9y IGV4YW1wbGUgaW46CisKKyAgZGNsIFwmYVtdID0gIlw0XDUiICJcNlw3IiB4eHgKKyAgbWlucHV0 IDEwIFxmam9pbigmYSkKKworTUlOUFVUIGdldHMgdHdvIHRhcmdldHM6ICJhYWEiIGFuZCAiXDRc NSBcNlw3IHh4eCIuICBUaGUgYnVnIHdhcyBpbiB0aGUKK2Nrc3BsaXQoKSBjYWxsIGluIHRoZSBc ZmpvaW4oKSBjYXNlIG9mIE1JTlBVVDogaXQgbmVlZGVkIHRvIHNwZWNpZnkgYW4KK2luY2x1ZGUg c2V0IGNvbnNpc3Rpbmcgb2YgYWxsIHRoZSBjb250cm9sIGNoYXJhY3RlcnMgZXhjZXB0IE5VTC4g IGNrdXVzci5jLAorMTYgTWFyIDIwMDMuCisKK0J1dCB0aGVyZSdzIHN0aWxsIGEgcHJvYmxlbToK KworICBkY2wgXCZhW10gPSAiXDRcNVwxM1wxMCIgIlw2XDciICJ4eHgiCisKK2NyZWF0ZXMgYW4g YXJyYXkgd2hvc2UgZmlyc3QgbWVtYmVyIGlzICJeRF5FIChvbmUgZG91YmxlcXVvdGUgaW5jbHVk ZWQpLiAgQnV0CitpZiBicmFjZXMgYXJlIHVzZWQgaW5zdGVhZCwgdGhlcmUncyBubyBwcm9ibGVt LiAgU2FtZSBkZWFsIGFzIE1JTlBVVDogY21mbGQoKQorYnJlYWtzIG9uIENSIG9yIExGLCB0aHVz IHRoZSBlbmQgcXVvdGUgaXMgbG9zdC4gIElmIEkgc2V0IG1pbnB1dGFjdGl2ZSBmb3IKK0RFQ0xB UkUgaW5pdGlhbGl6ZXJzIHRvbywgdGhhdCBmaXhlcyBpdC4gIElzIHRoZXJlIGFueSByZWFzb24g bm90IHRvIGRvIHRoaXM/CitDYW4ndCB0aGluayBvZiBhbnkgKGZhbW91cyBsYXN0IHdvcmRzKS4u LiAgY2t1dXNyLmMsIDE2IE1hciAyMDAzLgorCitTaW5jZSBpdCBoYXMgbXVsdGlwbGUgYXBwbGlj YXRpb25zLCBjaGFuZ2VkIHRoZSBmbGFnJ3MgbmFtZSBmcm9tIG1pbnB1dGFjdGl2ZQordG8ga2Vl cGFsbGNoYXJzLiAgY2t1Y21kLmMsIGNrdXVzW3I1XS5jLCAxNiBNYXIgMjAwMy4KKworXHYoZXhl ZGlyKSB3YXNuJ3QgYmVpbmcgc2V0IGNvcnJlY3RseSAoaXQgaW5jbHVkZWQgdGhlIHByb2dyYW0g bmFtZSBhcyB3ZWxsCithcyB0aGUgZGlyZWN0b3J5KS4gIEZpeGVkIGluIGdldGV4ZWRpcigpOiBj a3V1czQuYywgMTYgTWFyIDIwMDMuCisKK1NFVCBDQVJSSUVSLVdBVENIIDxFc2M+ICJhdXRvIG1h dGljIiAoc3B1cmlvdXMgc3BhY2UgaW4gc3VwcGxpZWQga2V5d29yZCkuCitDb3NtZXRpYyBvbmx5 OyBpdCBzdGlsbCB3b3JrZWQuICBGaXhlZCBpbiBzZXRkY2QoKTogY2t1dXMzLmMsIDE2IE1hciAy MDAzLgorCisiZGlyZWN0b3J5IGEgYiBjIiBsaXN0ZWQgdG9vIG1hbnkgZmlsZXMgLS0gYWxsIGZp bGVzIHdob3NlIG5hbWVzIEVORCBXSVRIIGEsCitiLCBvciBjLCByYXRoZXIgdGhhbiB0aGUgZmls ZXMgd2hvc2UgbmFtZXMgV0VSRSBhLCBiLCBvciBjLiAgRGlhZ25vc2lzOiBUaGUKK2ZpbGVzcGVj IGlzIGNoYW5nZWQgaW50byBhIHBhdHRlcm46IHthLGIsY30sIHdoaWNoIGlzIHRoZSBjb3JyZWN0 IGZvcm0uICBJdCBpcworcGFzc2VkIHRvIG56eHBhbmQoKSwgd2hpY2ggZ29lcyB0aHJvdWdoIHRo ZSBkaXJlY3RvcnkgZ2V0dGluZyBmaWxlbmFtZXMgYW5kCitzZW5kaW5nIGVhY2ggb25lIHRvIGNr bWF0Y2goKSB3aXRoIHRoZSBnaXZlbiBwYXR0ZXJuLiAgY2ttYXRjaCgpIHJlY2VpdmVzIHRoZQor Y29ycmVjdCBwYXR0ZXJuIGJ1dCB0aGVuIHByZXBlbmRzIGEgIioiIC0tIHRoYXQncyBub3Qgcmln aHQuICBJdCdzIG5vdCBqdXN0CitpbiBmaWxlbmFtZSBtYXRjaGluZyBlaXRoZXIuICBUaGUgZm9s bG93aW5nIHN1Y2NlZWRzIHdoZW4gaXQgc2hvdWxkbid0OgorCisgIGlmIG1hdGNoIHh4eHhjIHt7 YSxiLGN9fSA8Y29tbWFuZD4KKworQ2hhbmdpbmcgY2ttYXRjaCgpIHRvIG5vdCBwcmVwZW5kIHRo ZSAiKiIgdG8gZWFjaCBzZWdtZW50IGZpeGVzIHRoZSBjb21tYW5kCithYm92ZSBidXQgYnJlYWtz IGxvdHMgb2Ygb3RoZXJzLiAgUnVubmluZyB0aHJvdWdoIHRoZSAibWF0Y2giIHRvcnR1cmUtdGVz dAorc2NyaXB0IHNob3dzIHRoZSBwcm9ibGVtIG9jY3VycyBvbmx5IHdoZW4gdGhlIHthLGIsY30g bGlzdCBpcyB0aGUgZW50aXJlCitwYXR0ZXJuLCBhbmQgbm90IGVtYmVkZGVkIHdpdGhpbiBhIGxh cmdlciBwYXR0ZXJuLiAgVGVzdGluZyBmb3IgdGhpcyBjYXNlCitmaXhlZCB0aGUgcHJvYmxlbS4g IGNrbWF0Y2goKTogY2tjbGliLmMsIDE2IE1hciAyMDAzLgorCitGaXhlZCBGVFAgTU9EVElNRSB0 byBub3QgcHJpbnQgYW55dGhpbmcgaWYgUVVJRVQgT04uICBja2NmdHAuYywgMTYgTWFyIDIwMDMu CisKK1BpY2tlZCB1cCBhIG5ldyBja3VhdGguYyBmcm9tIEplZmYsIG5vdCBzdXJlIHdoYXQgdGhl IGNoYW5nZXMgYXJlLiAxNiBNYXIgMjAwMy4KKworRGlkIGEgZmV3IHJlZ3VsYXIgYW5kIHNlY3Vy ZSBidWlsZHMgdG8gbWFrZSBzdXJlIEkgZGlkbid0IHdyZWNrIGFueXRoaW5nLgorCitDaGFuZ2Vk IHZlcnNpb24gbnVtYmVyIHRvIDIwOSAoZmluYWwpLiAgY2tjbWFpLmMsIDE2IE1hciAyMDAzLgor CitKYXNvbiBIZXNrZXR0IGZvdW5kIGFub3RoZXIgYnVnOiBpZiB5b3UgZGVmaW5lIGEgbWFjcm8g Rk9PIGluc2lkZSB0aGUKK2RlZmluaXRpb24gb2YgYW5vdGhlciBtYWNybyBCQVIsIGFuZCBGT08n cyBkZWZpbml0aW9uIGluY2x1ZGVzIGFuIG9kZCBudW1iZXIKK29mIGRvdWJsZXF1b3RlcyAoc3Vj aCBhcyAxKSwgRk9PJ3MgZGVmaW5pdGlvbiBhYnNvcmJzIHRoZSByZXN0IG9mIEJBUidzCitkZWZp bml0aW9uLiAgRXhhbXBsZToKKworICBkZWYgVEVTVCB7CisgICAgLmZvbyA9IHtYIn0KKyAgICBz aG8gbWFjIGZvbworICB9CisgIGRvIHRlc3QKKyAgc2hvIG1hYyBmb28KKworUmVzdWx0cyBpbjoK KworICBmb28gPSB7WCJ9LCBzaG8gbWFjIGZvbworCitEaWFnbm9zaXM6IHRoZSBURVNUIGRlZmlu aXRpb24gYmVjb21lczoKKworICBkZWYgVEVTVCAuZm9vID0ge1gifSwgc2hvIG1hYyBmb28KKwor YW5kIHRoZSBtYWNybyByZWFkZXIgaXMgZXJyb25lb3VzbHkgdHJlYXRpbmcgdGhlIGRvdWJsZXF1 b3RlIGFzIGFuIG9wZW4KK3F1b3RlLCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IGNsb3NlcyB0aGUg cXVvdGUgYXQgdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbi4KK1RoZSBlcnJvciBpcyB0aGF0IGEg ZG91YmxlcXVvdGUgc2hvdWxkIGJlIHNpZ25pZmljYW50IG9ubHkgYXQgdGhlIGJlZ2lubmluZyBv ZgorYSBmaWVsZC4gIEJ1dCB0aGUgbWFjcm8gcmVhZGVyIGlzbid0IGEgY29tbWFuZCBwYXJzZXI7 IGl0IGRvZXNuJ3Qga25vdyB3aGF0CithIGZpZWxkIGlzIC0tIGl0J3MganVzdCBsb29raW5nIGZv ciBjb21tYXMgYW5kIHNraXBwaW5nIG92ZXIgcXVvdGVkIG9uZXMuCitGaXJzdCB3ZSBoYXZlIHRv IGZpeCBhbiBvdmVyc2lnaHQ6IFNFVCBDT01NQU5EIERPVUJMRVFVT1RJTkcgT0ZGIHNob3VsZCBo YXZlCit3b3JrZWQgaGVyZSwgYnV0IGl0IHdhc24ndCB0ZXN0ZWQgaW4gdGhpcyBjYXNlLiAgRml4 ZWQgaW4gZ2V0bmNtKCk6IGNrdXVzNS5jLAorMTcgTWFyIDIwMDMuCisKK1RoZXJlIGFyZSBvbmx5 IGNlcnRhaW4gY2FzZXMgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgZG91YmxlcXVvdGVz IGFzCitzaWduaWZpY2FudDoKKworIC4gQW4gb3BlbiBxdW90ZSBtdXN0IGJlIGF0IHRoZSBiZWdp bm5pbmcgb3IgcHJlY2VkZWQgYnkgYSBzcGFjZS4KKyAuIEEgY2xvc2UgcXVvdGUgaXMgb25seSBh dCB0aGUgZW5kIG9yIGVsc2UgZm9sbG93ZWQgYnkgYSBzcGFjZS4KKworVGhpcyB0b28gd2FzIGZp eGVkIGluIGdldG5jbSgpOiBja3V1czUuYywgMTcgTWFyIDIwMDMuCisKK0EgZml4IGZyb20gSmVm ZiBTU0wvVExTIEZUUCBkYXRhIGRlY29kaW5nLiAgY2tjZnRwLmMsIDE4IE1hciAyMDAzLgorCitU cmllZCBidWlsZGluZyBDLUtlcm1pdCBvbiBhIENyYXkgWS1NUCB3aXRoIFVOSUNPUyA5LjAuICAi aW50IHN1c3BlbmQiLAorZGVjbGFyZWQgaW4gY2tjbWFpLmMgYW5kIHVzZWQgaW4gbWFueSBtb2R1 bGVzLCBjb25mbGljdHMgd2l0aDoKKworICB1bmlzdGQuaDpleHRlcm4gaW50IHN1c3BlbmQgX18o KGludCBfQ2F0ZWdvcnksIGludCBfSWQpKTsKKworVGhlICI9RHN1c3BlbmQ9eHN1c3BlbmQiIHRy aWNrIGRvZXNuJ3Qgd29yayBmb3IgdGhpczsgdGhlcmUgaXMgbm8gd2F5IGFyb3VuZAordGhlIGNv bmZsaWN0IG90aGVyIHRoYW4gdG8gcmVuYW1lIHRoZSB2YXJpYWJsZTogY2tjbWFpLmMsIGNrdXRp by5jLAorY2t1dXNbMzV4eV0uYy4gIDI2IE1hciAyMDAzLiAgVk1TIGFuZCBLOTUgbm90IGFmZmVj dGVkLgorCitPSyB0aGF0IGdldHMgdXMgcGFzdCBja2NtYWkuYy4uLiAgVGhlbiBpbiBja3V0aW8u YyBJIGhhZCB0byBhZGQgYSBuZXcgI2lmZGVmCithcm91bmQgdGhlIExGREVWTk8gc2V0dGluZywg YmVjYXVzZSB0aGUgQ3JheSBkaWRuJ3QgaGF2ZSBta2Rldi5oLiAgQ291bGQgbm90CitmaW5kIGEg Q3JheS1zcGVjaWZpYyBtYW5pZmVzdCBzeW1ib2wsIHNvIEkgbWFkZSBhIG5ldyBtYWtlZmlsZSB0 YXJnZXQgKGNyYXk5KQordGhhdCBzZXRzIHRoaXMgc3ltYm9sLiAgSGF2aW5nIGRvbmUgdGhpcyBJ IGhhdmUgbm8gaWRlYSB3aGF0IGtpbmQgb2YgbG9ja2ZpbGUKK3dvdWxkIGJlIGNyZWF0ZWQsIGJ1 dCBJIGFsc28gZG91YnQgaWYgYW55Ym9keSBkaWFscyBvdXQgZnJvbSBhIENyYXkuICBUaGUKK2Jp bmFyeSBzaG91bGQgcnVuIGEgQzkwLCBKOTAsIG9yIFktTVAuICBtYWtlZmlsZSwgMjYgTWFyIDIw MDMuCisKK0FkZGVkIGEgdGFyZ2V0IGZvciBTQ08gT1NSNS4wLjcuICBtYWtlZmlsZSwgY2t1dmVy LmgsIDMwIE1hciAyMDAzLgorCitDaGFuZ2VkIHNpbmNlIDIwODoKK21ha2VmaWxlIGNrdXZlci5o IGNrY21haS5jIGNrY2xpYi5jIGNrY2Z0cC5jIGNrdWNtZC5jIGNrdXVzKi5jIGNrdXRpby5jLgor CistLS04LjAuMjA5LS0tCisKK0Zyb20gTWFyayBTYXBpcm8sIGEgZml4IGZvciB0aGUgTWFyY2gg MTd0aCBkb3VibGVxdW90ZSBmaXgsIGdldG5jbSgpOiBja3V1czUuYywKKzQgQXByIDIwMDMuCisK K0Zyb20gSmVmZiwgMjkgQXByIDIwMDM6CisgLiBDb3JyZWN0ZWQgdGFyZ2V0IGZvciBIUC1VWCAx MS4wMCArIE9wZW5TU0w6IG1ha2VmaWxlLCAKKyAuIERvIG5vdCBhbGxvdyBXSUxMIEFVVEggYmVm b3JlIFdPTlQgU1RBUlRfVExTOiBja2N0ZWwuaCBja2N0ZWwuYworIC4gQWRkIGhvb2tzIGZvciBT RlRQIGFuZCBTRVQvU0hPVyBTRlRQOiBja2NkZWIuaCBja3V1c3IuaCBja3V1c3IuYyBja3V1czMu YworIC4gQWRkIFNLRVJNSVQgY2t1dXNyLmggY2t1dXNyLmMKKyAuIEFkZCBBRE0tNSB0ZXJtaW5h bCBlbXVsYXRpb246IGNrdXVzNy5jLCBja3V1czUuYworIC4gVW5jb21tZW50IGFuZCB1cGRhdGUg SEVMUCBTRVQgU1NIIFYyIEFVVE8tUkVLRVk6IGNrdXVzMi5jCisgLiBFbmFibGUgSUYgVEVSTUlO QUwtTUFDUk8gYW5kIElGIFNUQVJURUQtRlJPTS1ESUFMRVIgZm9yIEMtS2VybWl0OiBja3V1czYu YworIC4gRml4IGNvbmZsaWN0aW5nIE5PU0NST0xMIGtleXdvcmQgZGVmaW5pdGlvbjogY2t1dXNy LmgKKyAuIFNldCB0dG5hbWUgd2hlbiBJX0FNX1NTSDogY2t1dXN5LmMKKyAuIEFkZCBleHRlbmRl ZCBhcmcgcGFyc2luZyBmb3IgU1NILCBSbG9naW4sIFRlbG5ldDogY2t1dXN5LmMsIGNrdXVzNC5j CisgLiBTZWN1cml0eSB1cGRhdGVzOiBja3VhdGguYywgY2tfc3NsLmMKKyAuIENoYW5nZSBLOTUg dmVyc2lvbiBudW1iZXIgdG8gMi4yLjA6IGNrY21haS5jCisgLiBTYXZlIEs5NSB0ZXJtIGkvbyBz dGF0ZSBiZWZvcmUgZXhlY3V0aW5nIGtleWJvYXJkIG1hY3JvOiBja3V1czQuYworIC4gQWRkIHRl c3RzIGZvciBTU0ggU3Vic3lzdGVtIGFjdGl2ZSBkdXJpbmcgSU5QVVQvT1VUUFVUL0NPTk5FQ1Q6 IGNrdXVzWzQ1XS5jCisgLiBFbmFibGUgSzk1IFNFVCBTU0ggVjIgQVVUTy1SRUtFWTogY2t1dXMz LmMKKworU0ZUUCBhbmQgU0VUIFNGVFAgc3ViY29tbWFuZHMgYXJlIGltcGxlbWVudGVkIHVwIHRv IHRoZSBjYXNlIHN0YXRlbWVudHMuCisKK0ZpbGVzIG9mIG1pbmUgdGhhdCBKZWZmIGhhZG4ndCBw aWNrZWQgdXA6CisgIGNrdXZlci5oIGNrY2Z0cC5jIGNrdXRpby5jIGNrdXVzeC5jIChqdXN0IG1p bm9yIGNoYW5nZXMgZm9yIGxhc3QgYnVpbGQtYWxsKQorCitPbiA0IEphbiAyMDAzLCBTRVQgUkVD RUlWRSBNT1ZFLVRPIHdhcyBjaGFuZ2VkIHRvIGNvbnZlcnQgaXMgYXJndW1lbnQgdG8gYW4KK2Fi c29sdXRlIHBhdGgsIHdoaWNoIG1hZGUgaXQgaW1wb3NzaWJsZSB0byBzcGVjaWZ5IGEgcmVsYXRp dmUgcGF0aCwgdGhlbgorbW92ZSB0byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgYW5kIGhhdmUgaXQg YXBwbHkgcmVsYXRpdmVseSB0byBlYWNoIGRpcmVjdG9yeS4KK0NoYW5nZWQgdGhpcyBhcyBmb2xs b3dzOgorCisgLiBQYXJzZXIgdXNlcyBjbXR4dCgpIHJhdGhlciB0aGFuIGNtZGlyKCkgc28gaXQg d29uJ3QgZmFpbCBhdCBwYXJzZSB0aW1lLgorIC4gSWYgcGF0aCBpcyBhYnNvbHV0ZSwgd2UgZmFp bCBhdCBwYXJzZSB0aW1lIGlmIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LgorIC4gSW4gcmVvZigp IHdlIHJ1biB0aGUgdGhlIHBhdGggdGhyb3VnaCB4eHN0cmluZyAoYWdhaW4sIGluIGNhc2UgZGVm ZXJyZWQKKyAgIGV2YWx1YXRpb24gb2YgdmFyaWFibGVzIGlzIGRlc2lyZWQpIGFuZCB0aGVuLCBp ZiBub3QgbnVsbCwgdXNlIGl0LgorIC4gSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBy ZW5hbWUoKSBmYWlscyBhbmQgcmVvZigpIHJldHVybnMgLTQsCisgICByZXN1bHRpbmcgaW4gYSBw cm90b2NvbCBlcnJvciAodGhpcyBpcyBub3QgYSBjaGFuZ2UpLiAgV2UgZG8gTk9UIGNyZWF0ZQor ICAgdGhlIGRpcmVjdG9yeSBvbiB0aGUgZmx5LiAKKworSSBhbHNvIGZpeGVkIFNFVCBTRU5EL1JF Q0VJVkUgUkVOQU1FLVRPIHRvIHBhcnNlIHdpdGggY210eHQoKSByYXRoZXIgdGhhbgorY21kaXIo KSwgc2luY2UgaXQncyBwYXJzaW5nIGEgdGV4dCB0ZW1wbGF0ZSwgbm90IGEgZGlyZWN0b3J5IG5h bWUsIGUuZy4KKyJzZXQgcmVjZWl2ZSByZW5hbWUtdG8gZmlsZS1cdih0aW1lKS12KGRhdGUpLVx2 KHBpZCkiLiAgVGhpcyB3YXMgdG90YWxseQorYnJva2VuLCBzaW5jZSB3aGVuIEkgZG9uJ3Qga25v dy4gIFdlIGRvbid0IGNhbGwgeHhzdHJpbmcoKSBpbiB0aGlzIHBhcnNlLCBzbworZXZhbHVhdGlv biBpcyBhbHdheXMgZGVmZXJyZWQgLS0gSSdkIGJldHRlciBub3QgY2hhbmdlIHRoaXMuICBja3V1 czcuYywKK2NrY2Zucy5jLCAxIE1heSAyMDAzLgorCitGcm9tIEplZmYsIFNhdCBNYXkgIDMgMTQ6 MTU6MjMgMjAwMzoKKyAuIFBpY2sgdXAgdGhlIHJpZ2h0IGlzYXNjaWkgZGVmaW5pdGlvbiBmb3Ig Szk1OiBja2N0ZWwuYworIC4gbWFsbG9jLi4uICBja3VhdGguYyAobmV3IHNhZmUgbWFsbG9jIHJv dXRpbmVzIGZvciBLOTUpCisgLiBBZGQgYXV0aG9yIGxpc3Rpbmc6IGNrdXVzNS5jCisgLiBTU0gg SGVhcnRiZWF0IHN1cHBvcnQgKEs5NSBvbmx5KTogY2t1dXNbMjNdLmMKKyAuIFByZXNjYW4gLS1o ZWlnaHQgYW5kIC0td2lkdGggdG8gYXZvaWQgd2luZG93IHJlc2l6aW5nIGF0IHN0YXJ0dXA6IGNr dXVzeS5jCisgLiBBZGQgY2hlY2tzIGZvciBmYXRhbCgpIG9yIGRvZXhpdCgpIGNhbGxlZCBmcm9t IHN5c2luaXQoKTogY2t1dXN4LmMKKyAuIE1vdmUgc29tZSBLOTUtc3BlY2lmaWMgZGVmaW5pdGlv bnMgdG8gY2tva2VyLmg6IGNrY2RlYi5oCisgLiBBZGQgc3VwcG9ydCBmb3IgT05fQ0QgbWFjcm8g aW4gemNoZGlyKCk6IGNrdWZpby5jCisgLiBBZGQgYSBjb21tYW5kIHRvIGxldCBGVFAgY2xpZW50 IGF1dGhlbnRpY2F0ZSB3aXRoIFNTTHYyOiBja2NmdHAuYworIC4gRml4IHBhcnNpbmcgb2YgRlRQ IGZpbGUgZmFjdHMgbGlrZSAiVU5JWC5tb2RlIjogY2tjZnRwLmMKKworT05fQ0Qgd2lsbCBuZWVk IHNvbWUgZXhwbGFpbmluZyAodG8gYmUgZG9uZSkuICBJdCdzIGltcGxlbWVudGVkIGZvciBVbml4 LAorVk1TLCBXSW5kb3dzLCBhbmQgT1MvMi4KKworVGhlIEZUUCBmaWxlIGZhY3RzIGZpeCBjYW1l IGZyb20gZmlyc3QgZXhwb3N1cmUgdG8gdGhlIG5ldyBPcGVuQlNEIEZUUAorc2VydmVyOiBmdHA6 Ly9mdHA3LnVzYS5vcGVuYnNkLm9yZy9wdWIvb3MvT3BlbkJTRC8zLjMvaTM4Ni8KK1RoZSBwZXJp b2QgaW4gIlVOSVgubW9kZSIgY2F1c2VkIGFuIGVycm9uZW91cyB3b3JkIGJyZWFrLCBhZGRpbmcg anVuayB0bwordGhlIGZpbGVuYW1lLgorCitBYm91dCB0aGUgbWFsbG9jIGNoYW5nZXMsIEplZmYg c2F5cyAiSzk1IGlzIG5vdCBiZWhhdmluZyB3ZWxsIGluIGxvdyBtZW1vcnkKK2Vudmlyb25tZW50 cy4gIEknbSBub3Qgc3VyZSB0aGF0IEMtS2VybWl0IGRvZXMgbXVjaCBiZXR0ZXIuICBUaGUgcHJv Z3JhbSBkb2VzCitub3QgY3Jhc2ggYnV0IGl0IGNlcnRhaW5seSBkb2VzIG5vdCBiZWhhdmUgdGhl IHdheSB0aGUgdXNlciBleHBlY3RzIGl0IHRvLgorSSdtIGJlZ2lubmluZyB0byB0aGluayB0aGF0 IGFueSBtYWxsb2MoKSBlcnJvciBzaG91bGQgYmUgdHJlYXRlZCBhcyBmYXRhbC4iCisKK05vdCB2 aXNpYmxlIGluIHRoZXNlIGNoYW5nZXMgYmVjYXVzZSBpdCdzIGluIEs5NS1zcGVjaWZpYyBtb2R1 bGVzOiBKZWZmIG1hZGUKK1NFVCBBVFRSSUJVVEVTIE9GRiBhbmQgU0VUIEFUVFJJQlVURVMgREFU RSBPRkYgYXBwbHkgdG8gWFlaTU9ERU0gdHJhbnNmZXJzLgorCitGcm9tIEplZmYsIDExIE1heSAy MDAzOgorIC4gQWRkIHN1cHBvcnQgZm9yIFNTSCBLZWVwYWxpdmUgdG8gcmVsZXZhbnQgU0VUIGNv bW1hbmQgKEs5NSk6IGNrdXVzMy5jCisgLiBSZWR1Y2UgbWF4IG92ZXJsYXBwZWQgaS9vIHJlcXVl c3RzIGZyb20gMzAgdG8gNyAoSzk1KTogY2t1dXM3LmMKKyAuIERvbid0IGNhbGwgc3lzaW5pdCgp IGluIGZhdGFsKCk6IGNrdXVzeC5jLgorIC4gU29tZSBuZXcgY29uZGl0aW9uYWxpemF0aW9ucyBm b3IgU1NMIG1vZHVsZTogY2tfc3NsLmMKKworVGhlIGRvdWJsZXF1b3RlLXBhcnNpbmcgZml4ZXMg ZnJvbSBNYXJjaCBhbmQgQXByaWwgYnJva2UgdGhlIFNXSVRDSCBzdGF0ZW1lbnQsCit3aGljaCBp cyBpbXBsZW1lbnRlZCBieSBpbnRlcm5hbGx5IGRlZmluaW5nLCB0aGVuIGV4ZWN1dGluZywgYSBt YWNyby4gIElmIEkKK2Ryb3AgYmFjayB0byB0aGUgb2xkIGR1bWIgaGFuZGxpbmcgb2YgZG91Ymxl cXVvdGVzLCBldmVyeXRoaW5nIGlzIGZpeGVkIGV4Y2VwdAordGhlIHByb2JsZW0gb2YgTWFyY2gg MTd0aC4gIEJ1dCBjYW4gd2UgcmVhbGx5IGV4cGVjdCBnZXRuY20oKSB0byBwcmUtZ3Vlc3MKK3do YXQgdGhlIHBhcnNlciBpcyBnb2luZyB0byBkbz8gIGdldG5jbSgpJ3Mgb25seSBqb2IgaXMgdG8g ZmluZCBjb21tYW5kCitib3VuZGFyaWVzLCB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYnkgY29tbWFz LiAgQ29tbWFzLCBob3dldmVyLCBpcyBuZWVkZWQgSU4KK2NvbW1hbmRzIHRvby4gIFdlIHRha2Ug YSBjb21tYSBsaXRlcmFsbHkgaWYgaXQgaXMgcXVvdGVkIHdpdGggXCwgb3IgaXMgaW5zaWRlCith IG1hdGNoZWQgcGFpciBvZiBicmFjZXMsIHBhcmVucywgb3IgZG91YmxlcXVvdGVzLiAgSXQgaXMg bm90IHVucmVhc29uYWJsZSB0bworcmVxdWlyZSBhIGRvdWJsZXF1b3RlIGluIGEgbWFjcm8gZGVm aW5pdGlvbiB0byBiZSBwcmVmaXhlZCBieSBcIHdoZW4gaXQgaXMgdG8KK2JlIHRha2VuIGxpdGVy YWxseS4gIFRoZSBwcm9wZXIgcmVzcG9uc2UgdG8gSmFzb24gSGVza2V0dCdzIGNvbXBsYWludCBv ZiBNYXJjaAorMTd0aCBzaG91bGQgaGF2ZSBiZWVuIHRvIGxlYXZlIHRoZSBjb2RlIGFsb25lIGFu ZCByZWNvbW1hbmQgYW4gYXBwcm9wcmlhdGUKK2Zvcm0gb2YgcXVvdGluZzoKKworICBkZWYgVEVT VCB7CisgICAgICAuZm9vID0ge1hcIn0KKyAgICAgIHNobyBtYWMgZm9vCisgIH0KKworQW5kIHRo aXMgaXMgd2hhdCBJIGhhdmUgZG9uZS4gIEFub3RoZXIgcmVhc29uIGZvciBzdGlja2luZyB3aXRo IHRoZSBvbGQgbWV0aG9kCitpcyB0aGF0IGl0J3MgZXhwbGFpbmFibGUuICBUaGUgImltcHJvdmVk IiBtZXRob2QsIGV2ZW4gaWYgaXQgd29ya2VkLCB3b3VsZCBiZQorYmUgaW1wb3NzaWJsZSB0byBl eHBsYWluLiAgQnR3LCBpbiB0ZXN0aW5nIHRoaXMgSSBub3RpY2VkIHRoYXQgdGhlIHN3aXRjaC10 ZXN0CitzY3JpcHQgbWFkZSA4LjAuMjAxIGR1bXAgY29yZS4gIFRvZGF5J3MgdmVyc2lvbiBpcyBm aW5lLiAgVGhlIHByb2JsZW0gd2l0aAorcXVvdGVkIHN0cmluZ3MgaW5zaWRlIG9mIElGIHsuLi59 IGNsYXVzZXMgYW5kIEZPUiBhbmQgV0hJTEUgbG9vcHMgaXMgZml4ZWQKK3Rvby4gIFBlcmhhcHMg InVuYnJva2VuIiB3b3VsZCBiZSBhIGJldHRlciB3b3JkLiAgY2t1dXM1LmMsIDExIE1heSAyMDAz LgorCitWYWNlIGRpc2NvdmVyZWQgdGhhdCBGVFAgTUdFVCAvRVhDRVBUOnsuLi4gKHdpdGggYW4g dW50ZXJtaW5hdGVkIC9FWENFUFQgbGlzdCkKK2NvdWxkIGNyYXNoIEtlcm1pdC4gIEZpeGVkIGlu IGNrY2Z0cC5jLCAxMSBNYXkgMjAwMy4KKworQ09OVElOVUUgc2hvdWxkIG5vdCBhZmZlY3QgU1VD Q0VTUy9GQUlMVVJFIHN0YXR1cy4gIGNrdXVzci5jLCAxMSBNYXkgMjAwMy4KKworRml4ZWQgYW4g b3ZlcnNpZ2h0IHRoYXQgZ29lcyBiYWNrIDE1IHllYXJzLiAgV2hpbGUgXHsxMjN9IGlzIGFsbG93 ZWQgZm9yCitkZWNpbWFsIGNvZGVzLCBceHsxMn0gYW5kIFxvezEyM30gd2VyZSBuZXZlciBoYW5k bGVkLiAgY2t1Y21kLmMsIDExIE1heSAyMDAzLgorCitBZGRlZCBzdXBwb3J0IGZvciBSZWQgSGF0 IDxiYXVkYm95Lmg+IGFuZCAvdXNyL3NiaW4vbG9ja2Rldi4gIFN1cHBvc2VkbHkgdGhpcworYWxs b3dzIEtlcm1pdCB0byBiZSBpbnN0YWxsZWQgd2l0aG91dCBzZXR1aWQgb3Igc2V0Z2lkIGJpdHMg YW5kIHN0aWxsIGJlIGFibGUKK3RvIGxvY2sgYW5kIHVzZSB0aGUgc2VyaWFsIGRldmljZS4gIENv bXBpbGVzIGFuZCBzdGFydHMsIGJ1dCBub3QgdGVzdGVkLgorY2tjZGViLmgsIG1ha2VmaWxlLCBj a3V0aW8uYywgY2t1dXM1LmMsIDE2IE1heSAyMDAzLgorCitGcm9tIEplZmY6IEZUUCBBU0NJSSBz ZW5kIGRhdGEgdG8gaG9zdCB3aGVuIEZUUCAvU1NMIHdhcyBpbiB1c2Ugd2FzIGJyb2tlbi4KK2Z0 cF9kcGwgaXMgc2V0IHRvIENsZWFyIHdoZW4gRlRQIC9TU0wgaXMgaW4gdXNlLiAgVGhpcyB3YXMg Y2F1c2luZyB0aGUgZGF0YSB0bworYmUgd3JpdHRlbiB0byB0aGUgc29ja2V0IHdpdGggc2VuZCgp IGluc3RlYWQgb2YgdGhlIE9wZW5TU0wgcm91dGluZXMuCitja2NmdHAuYywgY2t1YXRoLmMsIDIx IE1heSAyMDAzLgorCitGcm9tIEplZmY6IFN0dWZmIGZvciBLZXJiZXJvcyA1MjQ6IGNrY2RlYi5o LiAgRml4ZXMgZm9yIEZUUDsgIkZUUCBBU0NJSSBzZW5kCitkYXRhIGRpZCBub3QgcHJvcGVybHkg Y29tcHV0ZSB0aGUgZW5kIG9mIGxpbmUgdHJhbnNsYXRpb25zLiAgT24gVW5peCAoYW5kCitzaW1p bGFyIHBsYXRmb3JtcykgdGhlIGVuZCBvZiBsaW5lIHdhcyBjb3JyZWN0IGZvciBubyBjaGFyYWN0 ZXIgc2V0cyBidXQKK2luY29ycmVjdCB3aGVuIGNoYXJhY3RlciBzZXRzIHdlcmUgc3BlY2lmaWVk LiAgT24gV2luZG93cy9PUzIsIHRoZSBlbmQgb2YgbGluZQord2FzIGNvcnJlY3Qgd2hlbiBjaGFy YWN0ZXIgc2V0cyB3ZXJlIHNwZWNpZmllZCBhbmQgaW5jb3JyZWN0IHdoZW4gdGhleSB3ZXJlCitu b3QuICBPbiBNQUMsIGJvdGggd2VyZSBicm9rZW4uICBBbHNvLCBGVFAgU2VuZCBCeXRlIGNvdW50 cyB3ZXJlIGluY29ycmVjdAord2hlbiBjaGFyYWN0ZXIgc2V0cyB3ZXJlIHNwZWNpZmllZC4iICBj a2NmdHAuYy4gIDE3IEp1biAyMDAzLgorCitGcm9tIEplZmY6IGZpeGVzIHRvIEhUVFAgL0FHRU5U OiBhbmQgL1VTRVI6IHN3aXRjaCBhY3Rpb246IGNrY25ldC5jIGNrdXVzMy5jCitja19jcnAuYyBj a2NmdHAuYyBja3V1czIuYyBja3V1c3kuYyBja3V1c3IuYyBja2NuZXQuaCwgMjEgSnVuIDIwMDMu CisKK0Zyb20gSmVmZjogRml4IFNFVCBESUFMRVIgQkFDS1NQQUNFIHNvIGl0IGNhbiBvdmVycmlk ZSBhIHByZXZpb3VzIFNFVCBLRVkKKyhlLmcuIGZyb20gSU5JIGZpbGUpOiBja3V1czcuYy4gIFNv bWUgU1NML1RMUyB1cGRhdGVzOiBja19zc2wuYy4gIEhUVFAgc3VwcG9ydAorZm9yIFZNUyBhbmQg b3RoZXIgVk1TIGltcHJvdmVtZW50cyAoZS5nLiBhIHdheSB0byBub3QgaGF2ZSB0byBoYXJkd2ly ZSB0aGUKK0MtS2VybWl0IHZlcnNpb24gbnVtYmVyIGludG8gdGhlIGJ1aWxkIHNjcmlwdCkgZnJv bSBNYXJ0aW4gVm9ybGFlbmRlcjoKK2NrY25ldC5oLCBja3V1c1tyM10uYywgY2tjZGViLmgsIGNr dnRpby5jLCBja2NuZXQuYywgY2t2a2VyLmNvbS4gIEJ1aWx0IG9uCitTb2xhcmlzIChnY2MvYW5z aSkgYW5kIFN1bk9TIChjYy9rJnIpLiAgVGhlIG5ldyBWTVMgc2NyaXB0IHRlc3RzIHRoZSBWTVMK K3ZlcnNpb24gYW5kIGluY2x1ZGVzIEhUVFAgc3VwcG9ydCBvbmx5IGZvciBWTVMgNi4yIG9yIGxh dGVyLiAgMiBKdWwgMjAwMy4KKworVHJpZWQgdG8gYnVpbGQgb24gb3VyIGxhc3QgVk1TIHN5c3Rl bSBidXQgaXQgc2VlbXMgdG8gYmUgZGVhZC4gIExvb2tzIGxpa2UgYQoraGVhZCBjcmFzaCAobWFr ZXMgcmVhbGx5IGxvdWQgbm9pc2VzLCBib290IHNheXMgREtBMCBub3QgcmVjb2duaXplZCkgKGZv b2V5LCBJCitqdXN0IHBhaWQgZ29vZCBtb25leSB0byByZW5ldyB0aGUgVk1TIGxpY2Vuc2UpLiAg VHJpZWQgYnVpbGRpbmcgYXQgYW5vdGhlcgorc2l0ZSB3aXRoOgorCisgIFByb2Nlc3MgU29mdHdh cmUgTXVsdGlOZXQgVjQuMyBSZXYgQS1YLAorICBDb21wYXEgQWxwaGFTZXJ2ZXIgRVM0MCwgT3Bl blZNUyBBWFAgVjcuMworICBDb21wYXEgQyBWNi40LTAwOCBvbiBPcGVuVk1TIEFscGhhIFY3LjMK KworSGFkIHRvIG1ha2UgYSBmZXcgY29ycmVjdGlvbnMgdG8gY2t2a2VyLmNvbS4gIEJ1dCBzdGls bCwgY29tcGlsYXRpb24gb2YKK2NrY25ldC5jIGJvbWJzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIFNF TEVDVCBkZWZpbml0aW9uIHNvbWVob3cgZ290IGxvc3QKK3NvbWV3aGVyZSBzaW5jZSB0aGUgMjA5 IHJlbGVhc2UgKGkuZS4gbm8gU0VMRUNUIHR5cGUgaXMgZGVmaW5lZCBzbyBpdCBmYWxscwordGhy dSB0byAiU0VMRUNUIGlzIHJlcXVpcmVkIGZvciB0aGlzIGNvZGUiKS4gIEJ1dCBJIGRvbid0IHNl ZSBhbnl0aGluZyBpbgorY2tjZGViLmggb3IgY2tjbmV0LltjaF0gdGhhdCB3b3VsZCBleHBsYWlu IHRoaXMuICBOb3QgY2t2a2VyLmNvbSBlaXRoZXIKKyhwdXR0aW5nIHRoZSBvbGQgb25lIGJhY2sg Z2l2ZXMgdGhlIHNhbWUgcmVzdWx0KS4gIE9LLCBJIGdpdmUgdXAsIG1heWJlIGl0J3MKK2p1c3Qg dGhhdCBJIGhhdmVuJ3QgdHJpZWQgYnVpbGRpbmcgaXQgb24gTXVsdGlOZXQgcmVjZW50bHkuICBX aGF0IGFib3V0IFVDWD8KK0FoYSwgYnVpbGRzIGZpbmUgdGhlcmUgZXhjZXB0IGZvciB3YXJuaW5n cyBhYm91dCBtbG9vaywgZG9kbywgYW5kIHBhcnNlciBpbgorY2t2ZmlvLmMgKGJlY2F1c2Ugb2Yg T05fQ0QpIC0tIEkgc3VwcG9zZSBJIGhhdmUgI2luY2x1ZGUgPGNrdWNtZC5oPi4uLiAoZG9uZSkK K0FueWhvdyBpdCBidWlsZHMgT0sgYW5kIHRoZSBIVFRQIGNvZGUgaXMgYWN0aXZlIGFuZCBhbG1v c3Qgd29ya3MgKEhUVFAgT1BFTgord29ya3M7IEhUVFAgR0VUIHNlZW1zIHRvIHN1Y2NlZWQgYnV0 IGNyZWF0ZXMgYW4gZW1wdHkgZmlsZSBldmVyeSB0aW1lKS4gIFRyaWVkCitidWlsZGluZyB1bmRl ciBNdWx0aU5ldCBhdCBhbm90aGVyIGluc3RhbGxhdGlvbjsgc2FtZSBiYWQgcmVzdWx0LgorCitP SyBzbyB3aHkgd29uJ3QgaXQgYnVpbGQgZm9yIE11bHRpTmV0PyAgQ29tcGFyaW5nIGNrY25ldC5j IHdpdGggdGhlIDIwOQordmVyc2lvbiwgbm90IGEgc2luZ2xlICNpZmRlZiBvciAjaW5jbHVkZSBp cyBjaGFuZ2VkLiAgVHJpZWQgYnVpbGRpbmcgd2l0aAorcDM9Ik5PSFRUUCIgLS0gYnVpbGRzIE9L LCBhaGEuICBXaGVyZSdzIHRoZSBwcm9ibGVtPyAgTm90IGNrY25ldC5oLi4uCitOb3QgY2tjZGVi LmguLi4gIE9LIEkgZ2l2ZSB1cCwgd2lsbCByZXZpc2l0IHRoaXMgbmV4dCB0aW1lIEkgZ2V0IHRp bWUgdG8KK2RvIGFueXRoaW5nIHdpdGggdGhlIGNvZGUuCisKK0xhdGVyIEplZmYgc2FpZCAiTWFy dGluIGRpZCBub3QgaW1wbGVtZW50IFZNUyBuZXR3b3JraW5nIGZvciB0aGUgSFRUUCBjb2RlLgor QWxsIGhlIGRpZCB3YXMgYWN0aXZhdGUgdGhlICNkZWZpbmUgSFRUUCB3aGljaCBoYXBwZW5zIHRv IHdvcmsgYmVjYXVzZSBoaXMKK2Nvbm5lY3Rpb25zIGFyZSB1c2luZyBTU0wvVExTIGNvbm5lY3Rp b25zLiAgaHR0cF9pbmMoKSwgaHR0cF90b2woKSwgZXRjIGhhdmUKK25vIHN1cHBvcnQgZm9yIFZN UyBuZXR3b3JraW5nIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBVQ1ggb3IgTVVMVElORVQu CitUaGUgdmFzdCBtYWpvcml0eSBvZiBIVFRQIGNvbm5lY3Rpb25zIGFyZSBub3Qgc2VjdXJlZCBi eSBTU0wvVExTLiAgSXQgbWFrZXMgbm8KK3NlbnNlIHRvIHN1cHBvcnQgSFRUUCBvbiBWTVMgdW50 aWwgc29tZW9uZSBpcyB3aWxsaW5nIHRvIGVpdGhlciBkbyB0aGUgd29yayBvcgorcGF5IGhhdmUg dGhlIHdvcmsgZG9uZSB0byBpbXBsZW1lbnQgVk1TIG5ldHdvcmtpbmcgaW4gdGhhdCBjb2RlIGJh c2UuIiAgU28gdGhlCitmaXggaXMgdG8gbm90IGVuYWJsZSBIVFRQIGZvciBWTVMgYWZ0ZXIgYWxs LiAgUmVtb3ZlZCB0aGUgQ0tIVFRQIGRlZmluaXRpb24KK2ZvciBWTVMgZnJvbSBja2NkZWIuaCwg NiBKdWwgMjAwMy4KKworRml4ZWQgY2t2ZmlvLmMgdG8gI2luY2x1ZGUgPGNrdXVzci5oPiAoaW5z dGVhZCBvZiA8Y2t1Y21kLmg+KSB0byBwaWNrIHVwIAorbWlzc2luZyBwcm90b3R5cGVzLiAgNiBK dWwgMjAwMy4KKworRnJvbSBBcnRodXIgTWFyc2g6IHNvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3Ny cCtwYW0rc2hhZG93IGFuZCB0aGUgY29ycmVzcG9uZGluZworU29sYXJpcyA3IHRhcmdldC4gIG1h a2VmaWxlLCA2IEp1bCAyMDAzLgorCitSZW1vdmUgZHVwbGljYXRlICNpbmNsdWRlcyBmb3IgPHN5 cy9zdGF0Lmg+LCA8ZXJybm8uaD4sIGFuZCA8Y3R5cGUuaD4gZnJvbQorY2tjZnRwLmMuICA2IEp1 bCAyMDAzLgorCitBZGQgLURVU0VfTUVNQ1BZIHRvIE1vdG9yb2xhIFNWLzY4IHRhcmdldHMgYmVj YXVzZSBvZiBzaHVmZmxlZCAjaW5jbHVkZXMgaW4gCitja2NmdHAuYy4gIDggSnVsIDIwMDMuCisK K0Zyb20gSmVmZjogRml4IHByb2JsZW1zIG1peGluZyBTU0wgYW5kIFNSUCB3aXRob3V0IEtlcmJl cm9zLiAgUGx1cyBhIGZldyBtaW5vcgorI2RlZmluZSBjb21tZW50IGNoYW5nZXMgYW5kIGEgcmVz aHVmZmxpbmcgb2YgI2RlZmluZXMgaW4gY2tjZGViLmggdG8gYWxsb3cgbWUKK3RvIGJ1aWxkIG9u IFg4NiBXaW5kb3dzIHdpdGhvdXQgS2VyYmVyb3MuICBja2NkZWIuaCwgY2tfY3JwLmMsIGNrdWF0 aC5jLAorMTAgSnVsIDIwMDMuCisKK0Zyb20gSmVmZjogdXBkYXRlZCBja3VhdDIuaCBhbmQgY2t1 YXRoLmMsIDI5IEp1bCAyMDAzLgorCitNYXRzIFBldGVyc29uIG5vdGljZWQgdGhhdCBhIHZlcnkg c21hbGwgTGF0aW4tMSBmaWxlIHdvdWxkIGJlIGluY29ycmVjdGx5CitpZGVudGlmaWVkIGFzIFVD Uy0yIGJ5IHNjYW5maWxlKCkuICBGaXhlZCBpbiBja3V1c3guYywgMjkgSnVsIDIwMDMuCisKK0Zp eGVkIEFDQ0VTUyBtYWNybyBkZWZpbml0aW9uIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQg RklORCBpcyBub3cgYQorYnVpbHQtaW4gY29tbWFuZC4gIGNrZXJtaXQuaW5pLCAzMCBKdWwgMjAw My4KKworRnJvbSBKZWZmOiBGaXggZm9yIHR5cG8gaW4gdXJscGFyc2UoKSAoc3ZjL2hvcyk6IGNr dXVzeS5jLCAxOCBBdWcgMjAwMy4KKworRnJvbSBKZWZmOiBSZWRoYXQ5IG1ha2VmaWxlIHRhcmdl dHMgKG5lZWRlZCBmb3IgZm9yIE9wZW5TU0wgMC45LjcpOgorbWFrZWZpbGUsIDE5IEF1ZyAyMDAz LgorCitHUkVQIC9OT0xJU1QgYW5kIC9DT1VOVCBkaWQgdG9vIG11Y2ggbWFnaWMsIHdpdGggc29t ZSB1bmRlc2lyYWJsZSBmYWxsb3V0OgorIkdSRVAgL05PTElTVCAvQ09VTlQ6eCBhcmdzIiBwcmlu dGVkICJmaWxlOmNvdW50IiBmb3IgZWFjaCBmaWxlLiAgIkdSRVAKKy9DT1VOVDp4IC9OT0xJU1Qg YXJncyIgZGlkIG5vdCBwcmludCAiZmlsZTpjb3VudCIsIGJ1dCBuZWl0aGVyIGRpZCBpdCBzZXQg dGhlCitjb3VudCB2YXJpYWJsZS4gIFJlbW92ZWQgdGhlIG1hZ2ljLiAgQWxzbyBvbmUgb2YgdGhl IEdSRVAgc3dpdGNoZXMsCisvTElORU5VTUJFUlMsIHdhcyBvdXQgb2Ygb3JkZXIuICBGaXhlZCBp biBja3V1czYuYywgMjAgQXVnIDIwMDMuCisKK0Zyb20gSmVmZjogIlJlb3JnYW5pemluZyBjb2Rl IHRvIGVuYWJsZSBidWlsZGluZyB3aXRoIGRpZmZlcmVudCBzdWJzZXRzIG9mCitvcHRpb25zOyBh IGZldyB0eXBvcyBjb3JyZWN0ZWQgYXMgd2VsbC4iICBja2NkZWIuaCwgY2t1dmVyLmggKGZvciBS SDkpLAorY2tjbmV0LmMsIGNrdXVzNy5jLCBja3V1czMuYzogMjQgQXVnIDIwMDMuCisKK1NjYW5m aWxlIG1pc2lkZW50aWZpZWQgYSBiaWcgUERGIGZpbGUgYXMgdGV4dCBiZWNhdXNlIHRoZSBmaXJz dCA4MDBLIG9mIGl0Cisqd2FzKiB0ZXh0IChtb3N0IG90aGVyIFBERiBmaWxlcyB3ZXJlIGNvcnJl Y3RseSB0YWdnZWQgYXMgYmluYXJ5KS4gIEZpeGVkCitieSBhZGRpbmcgYSBjaGVjayBmb3IgdGhl IFBERiBzaWduYXR1cmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KK3NjYW5maWxlKCk6 IGNrdXVzeC5jLCAyNSBBdWcgMjAwMy4KKworRGl0dG8gZm9yIFBvc3RTY3JpcHQgZmlsZXMsIGJ1 dCBjb25zZXJ2YXRpdmVseS4gIFNpZ25hdHVyZSBhdCBiZWdpbm5pbmcgb2YKK2ZpbGUgbXVzdCBi ZWdpbiB3aXRoICIlIVBTLUFkbyIuICBJZiBpdCdzIGp1c3QgIiUhIiAob3Igc29tZXRoaW5nIG5v bnN0YW5kYXJkCitsaWtlICIlJUNyZWF0b3I6IFdpbmRvd3MgUFNDUklQVCIpIHdlIGRvIGEgcmVn dWxhciBzY2FuLiAgQWxzbyBhZGRlZCAiKi5wcyIKK3RvIGFsbCBiaW5hcnkgZmlsZW5hbWUgcGF0 dGVybnMuICBja3V1c3guYywgNCBTZXAgMjAwMy4KKworRGl0dG8gKGJ1dCB3aXRoaW4gI2lmbmRl ZiBOT1BDTFNDQU4pIGZvciBQQ0wgKDxFU0M+RSkgYW5kIFBKTCAoPEVTQz4lKSBmaWxlcywKK2J1 dCBubyBiaW5wYXR0ZXJucyAobm90ZTogIi5QQ0wiIGlzIHRoZSBleHRlbnNpb24gZm9yIFRPUFMt MjAgRVhFQyBzY3JpcHRzKS4KK2NrdXVzeC5jLCA0IFNlcCAyMDAzLgorCitBZGRlZCBjb21tZW50 cyBhYm91dCBPcGVuU1NMIDAuOS43IHRvIGFsbCBsaW51eCtvcGVuc3NsIHRhcmdldHMuCittYWtl ZmlsZSwgNCBTZXAgMjAwMy4KKworRnJvbSBKZWZmOiBBZGRlZCAtICNkZWZpbmUgQUxMT1dfS1JC XzNERVNfRU5DUllQVC4gIFdoZW4gdGhpcyBzeW1ib2wgaXMgZGVmaW5lZAorYXQgY29tcGlsYXRp b24gS2VybWl0IHdpbGwgYWxsb3cgbm9uLURFUyBzZXNzaW9uIGtleXMgdG8gYmUgdXNlZCBkdXJp bmcgVGVsbmV0CitBdXRoLiAgVGhlc2Ugc2Vzc2lvbiBrZXlzIGNhbiB0aGVuIGJlIHVzZWQgZm9y IFRlbG5ldCBFbmNyeXB0LiAgVGhlIHJlYXNvbgordGhpcyBpcyBub3QgY29tcGlsZWQgb24gYnkg ZGVmYXVsdCBpcyB0aGF0IHRoZSBNSVQgS2VyYmVyb3MgVGVsbmV0IGRvZXMgbm90Citmb2xsb3cg dGhlIFJGQyBmb3IgY29uc3RydWN0aW5nIGtleXMgZm9yIEVOQ1JZUFQgREVTIHdoZW4gdGhlIGtl eXMgYXJlIGxvbmdlcgordGhhbiA4IGJ5dGVzIGluIGxlbmd0aC4gIGNrdWF0aC5jLCBja3V1czUu YywgNCBTZXAgMjAwMy4KKworImZ0cCBtZ2V0IGEgYiBjIiBzdWNjZWVkZWQgaWYgb25lIG9yIG1v cmUgb2YgdGhlIGZpbGVzIGRpZCBub3QgZXhpc3QsIGV2ZW4KK3dpdGggInNldCBmdHAgZXJyb3It YWN0aW9uIHByb2NlZWQiLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBzZXJ2ZXIncyBOTFNUIGZpbGUK K2xpc3QgZG9lcyBub3QgaW5jbHVkZSBhbnkgZmlsZXMgdGhhdCBkb24ndCBleGlzdCwgc28gdGhl IGNsaWVudCBuZXZlciBldmVuCit0cmllcyB0byBnZXQgdGhlbS4gIEZvcnR1bmF0ZWx5LCB0aGUg d2F5IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQsIHRoaXMgb25lIHdhcworZWFzeSB0byBmaXguICBj a2NmdHAuYywgMTQgU2VwIDIwMDMuCisKK0Zyb20gSmVmZjogQ29ycmVjdGVkIGNvZGUgaW4gY2tj bmV0LmMgdG8gZW5zdXJlIHRoYXQgUmV2ZXJzZSBETlMgTG9va3VwcyBhcmUKK25vdCBwZXJmb3Jt ZWQgaWYgdGNwX3JkbnMgaXMgT0ZGLiAgRml4ZWQgY2tfa3JiNV9nZXRyZWFsbSgpIHRvIGFjdHVh bGx5IHJldHVybgordGhlIHJlYWxtIG9mIHRoZSBjcmVkZW50aWFscyBjYWNoZSBhbmQgbm90IHRo ZSBkZWZhdWx0IHJlYWxtIHNwZWNpZmllZCBpbiB0aGUKK2tyYjUuY29uZiBmaWxlLiAgUHJldmlv dXNseSBrcmI1X2NjX2dldF9wcmluY2lwYWwoKSB3YXMgbm90IGJlaW5nIGNhbGxlZC4KK0ZpeGVk IGNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgdG8gdGVzdCB0aGUgVEdUIGluIHRoZSBjdXJyZW50IGNj YWNoZSBhbmQgbm90IHRoZQorVEdUIGNvbnN0cnVjdGVkIGZyb20gdGhlIGRlZmF1bHQgcmVhbG0u ICBja2NuZXQuYywgY2t1YXRoLmMsIDE0IFNlcCAyMDAzLgorCitNYXJjbyBCZXJuYXJkaSBub3Rp Y2VkIHRoYXQgSUYgRElSRUNUT1JZIGNvdWxkIHByb2R1Y2UgYSBmYWxzZSBwb3NpdGl2ZSBpZgor dGhlIGFyZ3VtZW50IGRpcmVjdG9yeSBoYWQgcHJldmlvdXNseSBiZWVuIHJlZmVyZW5jZWQgYnV0 IHRoZW4gcmVtb3ZlZC4gIFRoaXMKK2lzIGJlY2F1c2Ugb2YgdGhlIGNsZXZlciBpc2RpcigpIGNh Y2hlIHRoYXQgd2FzIGFkZGVkIHRvIHNwZWVkIHVwIHJlY3Vyc2lvbgordGhyb3VnaCBiaWcgZGly ZWN0b3J5IHRyZWVzLiAgQ2hhbmdlZCBJRiBESVJFQ1RPUlkgdG8gbWFrZSBhIHNlY29uZCBjaGVj aworKGRlZmluaXRpdmUgYnV0IG1vcmUgZXhwZW5zaXZlKSBpZiBpc2RpcigpIHN1Y2NlZWRzLCBh bmQgY2hhbmdlZCB0aGUKK2RpcmVjdG9yeS1kZWxldGluZyByb3V0aW5lLCBja21rZGlyKCksIHRv IGZsdXNoIHRoZSBkaXJlY3RvcnkgY2FjaGUgKFVOSVgKK29ubHkgLS0gdGhpcyBhbHNvIHNob3Vs ZCBiZSBkb25lIGluIEs5NSBidXQgaXQncyBub3QgY3JpdGljYWwpLiAgVGhpcyB3YXMKK2RvbmUg YnkgYWRkaW5nIGEgcm91dGluZSwgY2xyZGlyY2FjaGUoKSB0byBja3VmaW8uYywgd2hpY2ggc2V0 cyBwcmV2c3RhdAordG8gLTEgYW5kIHByZXZwYXRoWzBdIHRvIE5VTC4gIGNrY2ZuMy5jLCBja3V1 czYuYywgY2t1ZmlvLmMsIDE4IFNlcCAyMDAzLgorCitNYXJjbyByZXBvcnRlZCB0aGUgc2Vjb25k IGZpeCBzdGlsbCBkaWRuJ3Qgd29yayBmb3IgaGltIChldmVuIHRob3VnaCBpdCBkaWQKK2ZvciBt ZSkuICBSYXRoZXIgdGhhbiB0cnkgdG8gZmlndXJlIG91dCB3aHksIEkgY29uY2x1ZGVkIHRoYXQg dGhlIGRpcmVjdG9yeQorY2FjaGUgaXMganVzdCBub3Qgc2FmZTogYSBkaXJlY3RvcnkgZm91bmQg YSBzZWNvbmQgYWdvIG1pZ2h0IGhhdmUgYmVlbiBkZWxldGVkCitvciByZW5hbWVkIG5vdCBvbmx5 IGJ5IEtlcm1pdCBidXQgYnkgc29tZSBvdGhlciBwcm9jZXNzLiAgV2h5IGRpZCBJIGFkZCB0aGlz CitpbiB0aGUgZmlyc3QgcGxhY2U/ICBUaGUgbG9nIHNheXM6CisKKyAgU29tZSBkZWJ1ZyBsb2dz IHNob3dlZCB0aGF0IGlzZGlyKCkgaXMgb2Z0ZW4gY2FsbGVkIHR3aWNlIGluIGEgcm93IG9uIHRo ZQorICBzYW1lIGZpbGUuICBSYXRoZXIgdGhhbiB0cnkgdG8gc29ydCBvdXQgY2xpZW50cywgSSBh ZGRlZCBhIDEtZWxlbWVudCBjYWNoZQorICB0byBVbml4IGlzZGlyKCkuICBja3VmaW8uYywgMjQg QXByIDIwMDAuCisKK0V4cGVyaW1lbnRhdGlvbiB3aXRoIERJUiBhbmQgRElSIC9SRUNVUlNJVkUg ZG9lcyBub3Qgc2hvdyB0aGlzIGhhcHBlbmluZyBhdAorYWxsLiAgU28gSSAjaWZkZWYnZCBvdXQg dGhlIGRpcmVjdG9yeSBjYWNoZSAoc2VlICNpZmRlZiBJU0RJUkNBQ0hFIGluIGNrdWZpby5jOwor SVNESVJDQUNIRSBpcyBub3QgZGVmaW5lZCkgYW5kIGJhY2tlZCBvZmYgdGhlIHByZXZpb3VzIGNo YW5nZXM6IGNrdWZpby5jLAorY2tjZm4zLmMsIGNrdXVzNi5jLCAyOCBTZXAgMjAwMy4KKworRnJv bSBKZWZmOiBSZXBsYWNlIHRoZSBjb21waWxlIHRpbWUgQUxMT1dfS1JCXzNERVNfRU5DUllQVCB3 aXRoIGEgcnVuLXRpbWUKK2NvbW1hbmQgU0VUIFRFTE5FVCBCVUcgQVVUSC1LUkI1LURFUyB3aGlj aCBkZWZhdWx0cyB0byBPTjogY2tjdGVsLltjaF0sCitja3V1c1syMzRdLmMsIGNrX2NycC5jLCBj a3VhdGguYy4gIDQgT2N0IDIwMDMuCisKK0FsbG93IERJQUwgUkVUUklFUyB0byBiZSBhbnkgcG9z aXRpdmUgbnVtYmVyLCBhbmQgY2F0Y2ggbmVnYXRpdmUgb25lcy4KK0Fsc28gYWRkZWQgY29kZSB0 byBjaGVjayBmb3IgYXRvaSgpIGVycm9ycyAoZS5nLiB0cnVuY2F0aW9uKS4gIEF0IGxlYXN0IG9u Citzb21lIHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBhdG9pKCkgaXMgc3VwcG9zZWQgdG8gc2V0 IGVycm5vLCBidXQgaXQKK2RvZXNuJ3QuICBja3V1czMuYywgY2t1Y21kLmMsIDQgT2N0IDIwMDMu CisKK0FkZGVkIC9ERUZBVUxUOiB0byBBU0stY2xhc3MgY29tbWFuZHMgKEFTSywgQVNLUSwgR0VU T0spOgorCisgLiBGb3IgcG9wdXBzOiBubyB3YXkgdG8gc2VuZCBkZWZhdWx0cyB0byBwb3B1cF9y ZWFkdGV4dCgpIG9yIHBvcHVwX3JlYWRwYXNzKCkuCisgLiBGb3IgR1VJIEFTS1tRXSwgcGFzcyBk ZWZhdWx0IHRvIGd1aV90eHRfZGlhbG9nKCkuCisgLiBGb3IgR1VJIEdFVE9LLCBjb252ZXJ0ICJ5 ZXMiICJvayIgb3IgIm5vIiBkZWZhdWx0IHRvIG51bWJlciBmb3IgdXFfb2soKS4KKyAuIEZvciBU ZXh0IEdFVE9LLCBhZGQgZGVmYXVsdCB0byBjbWtleSgpLgorIC4gRm9yIFRleHQgQVNLW1FdLCBh ZGQgZGVmYXVsdCB0byBjbXR4dCgpLgorIC4gRm9yIEdFVEMsIEdFVEtFWSwgYW5kIFJFQUQ6IG5v IGNoYW5nZXMuCisKK0dFVE9LLCBBU0ssIGFuZCBBU0tRIHdpdGggL1RJTUVPVVQ6IG5vIGxvbmdl ciBmYWlsIHdoZW4gdGhlIHRpbWVyIGdvZXMgb2ZmCitpZiBhIC9ERUZBVUxUIHdhcyBzdXBwbGll ZC4gIFRoZSBHVUkgZnVuY3Rpb25zICh1cV9ibGFoKSBkb24ndCBzZWVtIHRvCitzdXBwb3J0IHRp bWVvdXRzLiAgT25seSB0aGUgdGV4dCB2ZXJzaW9uIGhhcyBiZWVuIHRlc3RlZC4gIGNrdXVzWzI2 XS5jLAorNCBPY3QgMjAwMy4KKworRnJvbSBKZWZmOiBhZGQgL0RFRkFVTFQ6IGZvciBwb3B1cHMu ICBja3V1czYuYy4gNiBPY3QgMjAwMy4KKworQ2hhbmdlIFNFVCBESUFMIElOVEVSVkFMIHRvIGJl IGxpa2UgU0VUIERJQUwgUkVUUklFUy4gIGNrdXVzWzM0XS5jLCA2IE9jdCAyMDAzLgorCitBZGRl ZCB0YXJnZXQgZm9yIEhQLVVYIDEwLzExICsgT3BlblNTTCBidWlsdCB3aXRoIGdjYywgZnJvbSBD aHJpcyBDaGVuZXkuCitNYWtlZmlsZSwgMTIgT2N0IDIwMDMuCisKK0Zyb20gSmVmZiwgNiBOb3Yg MjAwMzoKKyAuICNpZmRlZiBhZGp1c3RtZW50czogY2tjZnRwLmMsIGNrY2RlYi5oCisgLiBGaXgg c3B1cmlvdXMgY29uc3VtcHRpb24gb2YgZmlyc3QgYnl0ZShzKSBvbiBUZWxuZXQgY29ubmVjdGlv bjogY2tjdGVsLmMKKyAuIEFub3RoZXIgSFAgUEpMIHRlc3QgZm9yIHNjYW5maWxlOiBja3V1c3gu Yy4KKyAuIEs5NTogUmVjb2duaXplIERHNHh4IHByb3RlY3RlZCBmaWVsZHMgaW4gREcyeHggZW11 bGF0aW9uOiBja3V1czcuYy4KKyAuIEFkZCBTU0xlYXkgdmVyc2lvbiBkaXNwbGF5IHRvIFNIT1cg QVVUSCBjb21tYW5kOiBja3V1czcuYworIC4gSW1wcm92ZWQgU0VUIE1PVVNFIENMRUFSIGhlbHAg dGV4dDogY2t1dXMyLmMuCisgLiBJbXByb3ZlZCBLdmVyYnMgaGVscCB0ZXh0OiBja3V1czIuYyAo KyBuZXcgSUJNLTMxNTEgS3ZlcmJzKS4KKyAuIFNvbWUgY2hhbmdlcyB0byBja19zc2wuYywgY2t1 YXRoLmMuCisKK0Zyb20gUGV0ZXJFLCAxMCBOb3YgMjAwMzoKKyAuIEltcHJvdmVkIEhQLVVYIDEw LzExIG1ha2VmaWxlIHRhcmdldHMgZm9yIE9wZW5TU0wuCisgLiAjaWZkZWYgZml4IGZvciBPcGVu U1NMIG9uIEhQLVVYOiBja19zc2wuYy4KKworQW5vdGhlciBuZXcgbWFrZWZpbGUgZnJvbSBQZXRl ckUgd2l0aCBpbXByb3ZlZCBhbmQgaW50ZWdyYXRlZCBIUC1VWCB0YXJnZXRzLgorMTIgTm92IDIw MDMuCisKK0EgY291cGxlIGZpeGVzIHRvIHRoZSBzb2xhcmlzOWcra3JiNStrcmI0K29wZW5zc2wr c2hhZG93K3BhbSt6bGliIHRhcmdldAorZnJvbSBKZWZmLiAgQWRkZWQgYSBzb2xhcmlzOWcrb3Bl bnNzbCtzaGFkb3crcGFtK3psaWIgdGFyZ2V0LiAgbWFrZWZpbGUsCisyMSBOb3YgMjAwMy4KKwor RnJvbSBKZWZmLCAzMCBOb3YgMjAwMzoKKyAuIEZpeCBTRU5EIC9NT1ZFLVRPOiBja3V1c3IuYy4K KyAuIEZpeCBLOTUgU0VUIFRJVExFIHRvIGFsbG93IHF1b3Rlcy9icmFjZXMgYXJvdW5kIHRleHQ6 IGNrdXVzNy5jLgorIC4gSW1wcm92ZWQgInNldCB0ZXJtIGF1dG9kb3dubG9hZCA/IiByZXNwb25z ZTogY2t1dXM1LmMuCisgLiBGaXggU0hPVyBGRUFUVVJFUyB0byBzcGVjaWZ5IHRoZSBwcm90b2Nv bCBmb3IgZW5jcnlwdGlvbjogY2t1dXM1LmMKKyAuIE1ha2Uge1NFTkQsIFJFQ0VJVkV9IHtNT1ZF LVRPLCBSRU5BTUUtVE99IHdvcmsgZm9yIFhZWk1PREVNIChLOTUgb25seSkuCisKK0Zyb20gSmVm ZjogNyBKYW4gMjAwNDoKKyAuIEF0IG9uZSBwb2ludCBGcmFuayBzdGFydGVkIHRvIGFkZCBhIHRp bWVyIHBhcmFtZXRlciB0byB0aGUKKyAgIHVxX3R4dCgpIGZ1bmN0aW9uIGJ1dCBoZSBvbmx5IGRp ZCBpdCBmb3IgdGhlIG5vbi1BTlNJCisgICBjb21waWxlcnMuICBJIGFkZGVkIGl0IGZvciB0aGUg QU5TSSBjb21waWxlcnMsIGZpeGVkIHRoZQorICAgcHJvdG90eXBlcyBhbmQgcHJvdmlkZWQgYSBk ZWZhdWx0IHZhbHVlIGVhc2lseSBjaGFuZ2VkCisgICBERUZBVUxUX1VRX1RJTUVPVVQ6IGNrY2tl ci5oLCBja3V1c1szNl0uYywgY2tfc3NsLmMsIGNrY2Z0cC5jLCBja3VhdGguYy4KKyAuIEZpeGVk IFNFVCBURVJNSU5BTCBERUJVRyBPTiAodHlwbyBpbiB2YXJpYWJsZSBuYW1lKTogY2t1dXM3LmMu CisgLiBGaXhlZCBCRUVQIElORk9STUFUSU9OOyBwcmV2aW91c2x5IGl0IG1hZGUgbm8gc291bmQs IG5vdyB1c2VzCisgICBNQl9JQ09OUVVFU1RJT04uICBja3V1c3guYy4KKworRnJvbSBJYW4gQmVj a3dpdGggPGlhbkBuZXNzaWUubWNjLmFjLnVrPiAoRGViaWFuaXphdGlvbiksIDcgSmFuIDIwMDQ6 CisgLiBTZWFyY2ggZGlyL2NrZXJtaXQgZm9yIGRvY3MsIGFzIHdlbGwgYXMgZGlyL2tlcm1pdCBp biBjbWRpbmkoKTogY2t1dXM1LmMuCisgLiBOZXcgbGludXgra3JiNStrcmI0K29wZW5zc2wrc2hh ZG93K3BhbSB0YXJnZXQgKGtpdGNoZW4gc2luayBtaW51cyBTUlAsCisgICB3aGljaCBEZWJpYW4g ZG9lcyBub3QgZGlzdHJpYnV0ZSk6IG1ha2VmaWxlLgorID8gTWFuZ2xlcyB0aGUgREVTVERJUiBz dXBwb3J0IGluIG1ha2VmaWxlIHRvIGluc3RhbGwgaW50byBhIHN0YWdpbmcgYXJlYToKKyAgIG1h a2VmaWxlIChJIGRpZG4ndCB0YWtlIHRoaXMgb25lIHlldCkuCisKK1VwZGF0ZWQgY29weXJpZ2h0 IG5vdGljZXMgZm9yIDIwMDQsIGFsbCBtb2R1bGVzLiAgNyBKYW4gMjAwNC4KKworQWRkZWQgSU5Q VVQgL05PTUFUQ0gsIGFsbG93aW5nIElOUFVUIHRvIGJlIHVzZWQgZm9yIGEgZml4ZWQgYW1vdW50 IG9mIHRpbWUKK3dpdGhvdXQgYXR0ZW1wdGluZyB0byBtYXRjaCBhbnkgdGV4dCBvciBwYXR0ZXJu cywgc28gaXQncyBubyBsb25nZXIKK25lY2Vzc2FyeSB0byAiaW5wdXQgNjAwIFNUUklOR19USEFU X1dJTExfTkVWRVJfQ09NRSIuICBJZiAvTk9NQVRDSCBpcworaW5jbHVkZWQsIElOUFVUIHN1Y2Nl ZWRzIGlmIHRoZSB0aW1lb3V0IGV4cGlyZXMsIHdpdGggXHYoaW5zdGF0dXMpID0gMQorKG1lYW5p bmcgInRpbWVkIG91dCIpOyBmYWlscyB1cG9uIGludGVycnVwdGlvbiBvciBpL28gZXJyb3IuICBj a3V1c3IuaCwKK2NrdXVzW3IyNF0uYywgNyBKYW4gMjAwNC4KKworQWRkZWQgU0VUIElOUFVUIFND QUxFLUZBQ1RPUiA8ZmxvYXQ+LiAgVGhpcyBzY2FsZXMgYWxsIElOUFVUIHRpbWVvdXRzIGJ5IHRo ZQorZ2l2ZW4gZmFjdG9yLCBhbGxvd2luZyB0aW1lLXNlbnNpdGl2ZSBzY3JpcHRzIHRvIGJlIGFk anVzdGVkIHRvIGNoYW5naW5nCitjb25kaXRpb25zIHN1Y2ggYXMgY29uZ2VzdGVkIG5ldHdvcmtz IG9yIGRpZmZlcmVudC1zcGVlZCBtb2RlbXMgd2l0aG91dAoraGF2aW5nIHRvIGNoYW5nZSBlYWNo IElOUFVULWNsYXNzIGNvbW1hbmQuICBUaGlzIGFmZmVjdHMgb25seSB0aG9zZSB0aW1lb3V0cwor dGhhdCBhcmUgZ2l2ZW4gaW4gc2Vjb25kcywgbm90IGFzIHdhbGwtY2xvY2sgdGltZXMuICBBbHRo b3VnaCB0aGUgc2NhbGUKK2ZhY3RvciBjYW4gaGF2ZSBhIGZyYWN0aW9uYWwgcGFydCwgdGhlIElO UFVUIHRpbWVvdXQgaXMgc3RpbGwgYW4gaW50ZWdlci4KK0FkZGVkIHRoaXMgdG8gU0hPVyBJTlBV VCwgYW5kIGFkZGVkIGEgXHYoaW5zY2FsZSkgdmFyaWFibGUgZm9yIGl0LgorY2t1dXNyLmgsIGNr dXVzW3IyNTddLmMsIDcgSmFuIDIwMDQuCisKK3VuZGVmIFwlYSwgXGZ2ZXJpZnkoYWJjLFwlYSkg cmV0dXJucyAwLCB3aGljaCBtYWtlcyBpdCBsb29rIGFzIGlmIFwlYSBpcyBhCitzdHJpbmcgY29t cG9zZWQgb2YgYSdzLCBiJ3MsIGFuZC9vciBjJ3MsIHdoZW4gaW4gZmFjdCBpdCBjb250YWlucyBu b3RoaW5nLgorQ2hhbmdlZCBcZnZlcmlmeSgpIHRvIHJldHVybiAtMSBpbiB0aGlzIGNhc2UuICBj a3V1czQuYywgMTIgSmFuIDIwMDQuCisKK1xmY29kZSh4eHgpIHJldHVybmVkIGFuIGVtcHR5IHN0 cmluZyBpZiBpdHMgYXJndW1lbnQgc3RyaW5nIHdhcyBlbXB0eS4gIFRoaXMKK21ha2VzIGl0IHVu c2FmZSB0byB1c2UgaW4gYXJpdGhtZXRpYyBvciBib29sZWFuIGV4cHJlc3Npb25zLiAgQ2hhbmdl ZCBpdCB0bworcmV0dXJuIDAgaWYgaXRzIGFyZ3VtZW50IHdhcyBtaXNzaW5nLCBudWxsLCBvciBl bXB0eS4gIGNrdXVzNC5jLCAxMiBKYW4gMjAwNC4KKworVXBkYXRlZCBcdmVyaWZ5KCkgYW5kIFxm Y29kZSgpIGhlbHAgdGV4dC4gIGNrdXVzMi5jLCAxMiBKYW4gMjAwNC4KKworV2hpbGUgc2V0dGlu ZyB1cCBJS1NELCBJYW4gQmVja3dpdGggbm90aWNlZCB0aGF0IGluY2x1ZGluZyB0aGUgLS1pbml0 ZmlsZToKK29wdGlvbiBjYXVzZWQgS2VybWl0IHRvIHN0YXJ0IHBhcnNpbmcgaXRzIG93biBDb3B5 cmlnaHQgc3RyaW5nIGFzIGlmIGl0IHdlcmUKK3RoZSBjb21tYW5kIGxpbmUsIGFuZCBldmVudHVh bGx5IGNyYXNoLiAgSSBjb3VsZG4ndCByZXByb2R1Y2Ugb24gU29sYXJpcyAvCitTcGFyYyBidXQg SSBjb3VsZCBpbiBMaW51eCAvIGkzODYgKHdoYXQgSWFuIGlzIHVzaW5nKSAtLSBhIGNoYW5nZSBm cm9tIEplZmYKK29uIDI4IEFwciAyMDAzIHNldCB0aGUgY29tbWFuZC1saW5lIGFyZyBwb2ludGVy IHRvIGEgbGl0ZXJhbCBlbXB0eSBzdHJpbmcgaW4KK3ByZXNjYW4oKSBhYm91dCBsaW5lIDE3NDAg b2Ygb2YgY2t1dXM0LmM7IHRoZSBwb2ludGVyIGlzIGluY3JlbWVudGVkIG5leHQKK3RpbWUgdGhy dSB0aGUgbG9vcCwgcmVzdWx0aW5nIGluIHJhbmRvbSBtZW1vcnkgYmVpbmcgcmVmZXJlbmNlZC4g IEZpeGVkIGJ5CitzZXR0aW5nIHRoZSBwb2ludGVyIHRvIE5VTEwgaW5zdGVhZCBvZiAiIi4gIGNr dXVzNC5jLCAxMiBKYW4gMjAwNC4KKworZGVjbGFyZSBcJmFbOTk5OTk5OTk5OTk5OTk5XSB3b3Vs ZCBkdW1wIGNvcmUgb24gc29tZSBwbGF0Zm9ybXMuICBhdG9pKCkKK29yIHdoYXRldmVyIHdvdWxk IHRydW5jYXRlIHRoZSBkaW1lbnNpb24gdG8gbWF4aW50LiAgV2hlbiB3ZSBhZGQgMSB0byB0aGUK K3Jlc3VsdCwgd2UgZ2V0IGEgbmVnYXRpdmUgbnVtYmVyLCB3aGljaCBpcyB1c2VkIGFzIGFuIGlu ZGV4LCBsb29wIHRlc3QsIGV0Yy4KK0ZpeGVkIGJvdGggZG9kY2woKSBhbmQgZGNsYXJyYXkoKSB0 byBjaGVjayBmb3IgKG4rMSA8IDApLiAgY2t1dXNbcjVdLmMsCisxMiBKYW4gMjAwNC4KKworVW5p eCB6Y2hraSgpIHdvdWxkIGZhaWwgb24gL2Rldi90dHksIHdoaWNoIGlzIHVucmVhc29uYWJsZS4g IFRoaXMgcHJldmVudGVkCitGT1BFTiAvUkVBRCBmcm9tIHJlYWRpbmcgZnJvbSB0aGUgdGVybWlu YWwuICB6Y2hraSgpIGFscmVhZHkgYWxsb3dlZCBmb3IKKy9kZXYvbnVsbCwgc28gSSBhZGRlZCAv ZGV2L3R0eSB0byB0aGUgbGlzdCBvZiBzcGVjaWFscy4gIERpdHRvIGZvciBGT1BFTgorL1dSSVRF IGFuZCB6Y2hrbygpLiAgY2t1ZmlvLmMgMTMgSmFuIDIwMDQuCisKK0FkZGVkIHVudGFiaWZ5KCkg cm91dGluZSB0byBja2NsaWIuW2NoXSwgMTMgSmFuIDIwMDQuCitBZGRlZCBGUkVBRCAvVFJJTSBh bmQgL1VOVEFCSUZZLiAgY2t1dXNbMjddLmMsIDEzIEphbiAyMDA0LgorQWRkZWQgXGZ1bnRhYmlm eSgpLiAgY2t1dXNyLmgsIGNrdXVzWzI0XS5jLCAxMyBKYW4gMjAwNC4KKworRGF0IE5ndXllbiBu b3RpY2VkIHRoYXQgKHNldHEgdSAncCcpIGZvbGxvd2VkIGJ5ICh1KSBkdW1wZWQgY29yZS4gIFRo aXMgd2FzCitjYXVzZWQgYnkgYW4gb3Zlci1jbGV2ZXIgb3B0aW1pemF0aW9uIHRoYXQgc2tpcHBl ZCBtYWxsb2NzIGZvciBzaG9ydAorbGl0ZXJhbHMsIGJ1dCB0aGVuIHdlbnQgb24gbGF0ZXIgdG8g dHJ5IHRvIGZyZWUgb25lIHRoYXQgaGFkbid0IGJlZW4KK21hbGxvYydkLiAgRml4ZWQgaW4gZG9z ZXhwKCk6IGNrdXVzMy5jLCAxNCBKYW4gMjAwNC4KKworQ2F0Y2ggYW5vdGhlciBjb3B5cmlnaHQg ZGF0ZS4gIGNrdXVzNS5jLCAxNCBKYW4gMjAwNC4KKworRml4ZWQgU1dJVENIIHRvIHdvcmsgZXZl biB3aGVuIFNFVCBDT01NQU5EIERPVUJMRVFVT1RFIE9GRiAoZnJvbSBNYXJrCitTYXBpcm8pLiAg Y2t1dXM1LmMsIDE1IEphbiAyMDA0LgorCitDaGFuZ2VkIHZlcnNpb24gdG8gOC4wLjIxMSBzbyBz Y3JpcHRzIGNhbiB0ZXN0IGZvciByZWNlbnRseSBhZGRlZCBmZWF0dXJlcy4KK2NrY21haS5jLCAx NSBKYW4gMjAwNC4KKworRml4ZWQgYSBnbGl0Y2ggaW4gSzk1ICJoZWxwIHNldCBwb3J0Ii4gIGNr dXVzMi5jLCAyMCBKYW4gMjAwNC4KKworRml4IGZyb20gSmVmZjogQ29ubmVjdGlvbnMgdG8gYSBU TFMtYXdhcmUgcHJvdG9jb2wgd2hpY2ggcmVxdWlyZSBhIHJlY29ubmVjdAordXBvbiBjZXJ0aWZp Y2F0ZSB2ZXJpZmljYXRpb24gZmFpbHVyZSBjb3VsZCBub3QgcmVjb25uZWN0IGlmIHRoZSBjb25u ZWN0aW9uCit3YXMgaW5pdGlhdGVkIGZyb20gdGhlIGNvbW1hbmQgbGluZSBvciB2aWEgYSBVUkwu ICBja2N0ZWwuYyBja2NtYWkuYworY2t1dXNyLmMgY2t1dXM3LmMgY2t1dXN5LmMsIDIwIEphbiAy MDA0LgorCitGcm9tIEFsZXggTGV3aW46IG1ha2VmaWxlIHRhcmdldCBhbmQgI2lmZGVmIGZvciBN YWMgT1MgWCAxMC4zIChQYW50aGVyKToKK21ha2VmaWxlLCBja2NuZXQuYywgNyBGZWIgMjAwNC4K KworQWRkZWQgS0ZMQUdTIHRvIHNjbzMydjUwNyB0YXJnZXRzIHRvIG1ha2UgUFRZIGFuZCBTU0gg Y29tbWFuZHMgd29yay4gIFRoZQorc2FtZSBmbGFncyBjb3VsZCBwcm9iYWJseSBhbHNvIGJlIGFk ZGVkIHRvIGVhcmxpZXIgT1NSNSB0YXJnZXRzIGJ1dCB0aGV5CitoYXZlIG5vdCBiZWVuIHRlc3Rl ZCB0aGVyZS4gIG1ha2VmaWxlLCA3IEZlYiAyMDA0LgorCitDaGVja2VkIGEgY29tcGxhaW50IHRo YXQgIkxPQ0FMICZhIiBkaWQgbm90IG1ha2UgYXJyYXkgXCZhW10gbG9jYWwuICBJbmRlZWQKK2l0 IGRpZCBub3QsIGFuZCBjYW4gbm90LiAgWW91IGhhdmUgdG8gdXNlIHRoZSBmdWxsIHN5bnRheCBp biB0aGUgTE9DQUwKK2NvbW1hbmQsICJMT0NBTCBcJmFbXSIsIG9yIGVsc2UgaXQgZG9lc24ndCBr bm93IGl0J3Mgbm90IGEgbWFjcm8gbmFtZWQgJmEuCis3IEZlYiAyMDA0LgorCitGaXhlZCBzb21l IGNvbmZ1c2lvbiBpbiBjcmVhdGluZyBJS1NEIGRhdGFiYXNlIGZpbGUgYW5kIHRlbXAtZmlsZSBu YW1lcy4KK0kgd2FzIGNhbGxpbmcgemZucWZwKCkgd2l0aG91dCByZW1lbWJlcmluZyB0aGF0IHRo ZSBwYXRoIG1lbWJlciBvZiB0aGUKK3JldHVybmVkIHN0cnVjdCBpbmNsdWRlZCB0aGUgZmlsZW5h bWUsIHNvIHRvIGdldCBqdXN0IHRoZSBkaXJlY3RvcnkgbmFtZSwKK0kgbmVlZGVkIHRvIHN0cmlw IHRoZSBmaWxlbmFtZSBmcm9tIHRoZSByaWdodC4gIGNrdXVzeS5jLCAyIE1hciAyMDA0LgorCitO ZXcgY2t1YXRoLmMsIGNrX3NzbC5jIGZyb20gSmVmZi4gIDIgTWFyIDIwMDQuCisKK1VwZGF0ZWQg SmVmZidzIGFmZmlsaWF0aW9uIGluIFZFUlNJT04gY29tbWFuZCB0ZXh0LiAgY2t1dXNyLmMsIDIg TWFyIDIwMDQuCisKK0Rlc2lnbmF0aW9uIGNoYW5nZWQgZnJvbSBEZXYuMDAgdG8gQmV0YS4wMS4g IGNrY21haS5jLCAyIE1hciAyMDA0LgorCitGaXhlZCB6cmVuYW1lKCkgc3lzbG9nZ2luZyAtLSBp dCBoYWQgc3VjY2VzcyBhbmQgZmFpbHVyZSByZXZlcnNlZC4KK0JldGEuMDI6IGNrdWZpby5jLCA0 IE1hciAyMDA0LgorCitQcm9ibGVtOiB3aGVuIGFjY2Vzc2luZyBJS1NEIHZpYSBhIGtlcm1pdDov LyBvciBpa3NkOi8vIFVSTCwgYW5kIGEgdXNlciBJRAoraXMgZ2l2ZW4gYnV0IG5vIHBhc3N3b3Jk LCBkb3hhcmcoKSBzZXQgdGhlIHBhc3N3b3JkIHRvICIiIGluc3RlYWQgb2YgbGVhdmluZworaXQg TlVMTCwgYnV0IGFsbCB0aGUgdGVzdHMgaW4gZG91cmwoKSBhcmUgZm9yIE5VTEwuICBGaXhlZCBp biBkb3hhcmcoKToKK2NrdXVzeS5jLCA1IE1hciAyMDA0LgorCitUaGUgbG9naWMgaW4gZG91cmwo KSBhYm91dCB3aGljaCBtYWNybyB0byBjb25zdHJ1Y3QgKGxvZ2luIGFuZCBjb25uZWN0LAorbG9n aW4gYW5kIGdldCBkaXJlY3RvcnkgbGlzdGluZywgb3IgbG9naW4gYW5kIGZldGNoIGEgZmlsZSkg d2FzIGEgYml0IG9mZiwKK3NvIGFsbCB0aHJlZSBjYXNlcyB3ZXJlIG5vdCBoYW5kbGVkLiAgY2tj bWFpLmMsIDUgTWFyIDIwMDQuCisKK1RyaWFsIEJldGEgYnVpbGRzOgorIC4gSFAtVVggQi4xMS4x MSBQQS1SSVNDCisgLiBIUC1VWCBCLjExLjIzIElBNjQKKyAuIFRydTY0IDQuMEcgQWxwaGEKKyAu IFRydTY0IDUuMUIgQWxwaGEKKyAuIERlYmlhbiAzLjAgaTM4NgorIC4gUmVkIEhhdCBFUyAyLjEg aTM4NgorIC4gU2xhY2t3YXJlIDkuMSBpMzg2CisgLiBWTVMgNy4zLTEgQWxwaGEgKyBVQ1ggNS4z CisgLiBWTVMgNy4zLTEgQWxwaGEgbm8gVENQL0lQCisgLiBWTVMgNy4zIEFscGhhIE11bHRpTmV0 IDQuMyBBLVgKKyAuIFNDTyBVbml4V2FyZSA3LjEuNCBpMzg2CisgLiBTQ08gT1NSNS4wLjcgaTM4 NgorIC4gU29sYXJpcyA5IFNwYXJjCisKK0ZpeGVkIGNvbXBpbGVyIHdhcm5pbmcgaW4gZG94YXJn KCkgY2F1c2VkIGJ5IHR5cG8gKE5VTEwgaW5zdGVhZCBvZiBOVUwpIGluCit0aGUgNSBNYXJjaCBk b3hhcmcoKSBlZGl0LiAgY2t1dXN5LmMsIDkgTWFyIDIwMDQuCisKK0lLU0QgKGtlcm1pdDovLykg Y29tbWFuZC1saW5lIFVSTHMgZGlkIG5vdCB3b3JrIHJpZ2h0IGlmIHRoZSBjbGllbnQgaGFkCith bHJlYWR5IHByZWF1dGhlbnRpY2F0ZWQgd2l0aCBLZXJiZXJvcyBvciBzb21lc3VjaCBiZWNhdXNl IHRoZXkgdHJpZWQgdG8gbG9nCitpbiBhZ2FpbiB3aXRoIFJFTU9URSBMT0dJTi4gIFRoZSBtYWNy b3MgY29uc3RydWN0ZWQgaW4gZG94YXJnKCkgbmVlZGVkIHRvCitjaGVjayBcdihhdXRoc3RhdGUp IGJlZm9yZSBhdHRlbXB0aW5nIFJFTU9URSBMT0dJTi4gIGNrY21haS5jLCAxMCBNYXIgMjAwNC4K KworQWRkZWQgY2t1a2VyLm5yIHRvIHguc2ggKGNrZGFpbHkgdXBsb2FkKSBhbmQgdXBkYXRlZCBj a3VrZXIubnIgd2l0aCBjdXJyZW50Cit2ZXJzaW9uIG51bWJlciBhbmQgZGF0ZXMuICAxMCBNYXIg MjAwNC4KKworUmVwbGFjZWQgaGFyZHdpcmVkIHJlZmVyZW5jZXMgdG8gL3Vzci9sb2NhbCBpbiBt YWtlZmlsZSB3aXRoICQocHJlZml4KQorKHdoaWNoIGRlZmF1bHRzIHRvIC91c3IvbG9jYWwsIGJ1 dCBjYW4gYmUgb3ZlcnJpZGRlbiBvbiB0aGUgY29tbWFuZCBsaW5lKSwKK3N1Z2dlc3RlZCBieSBO ZWxzb24gQmVlYmUgZm9yIHVzZSB3aXRoIENvbmZpZ3VyZS4gIDEwIE1hciAyMDA0LgorCitGcm9t IE5lbHNvbiBCZWViZTogSW4gdGhlIEtlcm1pdCBtYWtlZmlsZSBpbiB0aGUgaW5zdGFsbCB0YXJn ZXQgY29tbWFuZHMsCitsaW5lIDk4MSByZWFkczoKKworICAgICAgICBjcCAkKEJJTkFSWSkgJChE RVNURElSKSQoQklORElSKS9rZXJtaXQgfHwgZXhpdCAxO1wKKworQ291bGQgeW91IHBsZWFzZSBh ZGQgdGhpcyBsaW5lIGJlZm9yZSBpdDoKKworICAgICAgICBybSAtZiAkKERFU1RESVIpJChCSU5E SVIpL2tlcm1pdDtcCisKK1NvbWUgc2l0ZXMgKG1pbmUgaW5jbHVkZWQpIGtlZXAgbXVsdGlwbGUg dmVyc2lvbnMgb2Ygc29mdHdhcmUgYXJvdW5kLAord2l0aCBoYXJkIGxpbmtzIGJldHdlZW4gJChw cmVmaXgpL3Byb2duYW1lIGFuZCAkKHByZWZpeCkvcHJvZ25hbWUteC55LnouCitGYWlsdXJlIHRv IHJlbW92ZSB0aGUgJChwcmVmaXgpL3Byb2duYW1lIGF0ICJtYWtlIGluc3RhbGwiIHRpbWUgdGhl bgorcmVwbGFjZXMgdGhlIG9sZCAkKHByZWZpeCkvcHJvZ25hbWUteC55Lnogd2l0aCB0aGUgbmV3 IG9uZSwgZGVzdHJveWluZworYW4gb2xkIHZlcnNpb24gdGhhdCB0aGUgc2l0ZSB3YW50ZWQgdG8g YmUgcHJlc2VydmVkLiAgbWFrZWZpbGUsIDEwIE1hciAyMDA0LgorCitNaW5vciBzeW50YXggYW5k IHR5cG8gZml4ZXMgKG1vc3RseSBwcm90b3R5cGVzKTogY2tjZGViLmgsIGNrY2Zucy5jLAorY2tj bGliLmMsIGNrdWZpby5jLCBja3V1c3IuaCwgY2t1dXN4LmMsIDEwIE1hciAyMDA0LiAgKEkgc3Rp bGwgaGF2ZSBhIGZldworbW9yZSB0byBkby4pCisKK0FkZGVkIENDPSQoQ0MpIENDMj0kKENDMikg dG8gbWFueSAoYnV0IG5vdCBhbGwpIG1ha2VmaWxlIHRhcmdldHMgdGhhdAorcmVmZXJlbmNlIG90 aGVyIG1ha2VmaWxlIHRhcmdldHMuICBPbiBzb21lIHBsYXRmb3JtcyAobm90YWJseSBBSVgsIFNv bGFyaXMsCitTdW5PUykgdGhlcmUgYXJlIHNwZWNpZmljIHRhcmdldHMgZm9yIGRpZmZlcmVudCBj b21waWxlcnMsIHNvIEkgc2tpcHBlZAordGhvc2UuICBtYWtlZmlsZSwgMTAgTWFyIDIwMDQuCisK K0FkZGVkIGVycm9yIGNoZWNraW5nIHRvIGtlcm1pdDovLyBVUkwgbWFjcm9zLCBzbyB0aGV5IGRv bid0IHBsb3cgYWhlYWQKK2FmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4gIGNrY21haS5j LCAxMSBNYXIgMjAwNC4KKworQWRkZWQgRnJlZUJTRCA0LjkgYW5kIDUuMSB0YXJnZXRzIChvbmx5 IHRoZSBoZXJhbGQgaXMgYWZmZWN0ZWQpLgorbWFrZWZpbGUsIGNrdXZlci5oLCAxMSBNYXIgMjAw NC4KKworQWRkZWQgIkxJQlM9LWxjcnlwdCIgdG8gYnNkNDQgdGFyZ2V0cyBzaW5jZSBub3dhZGF5 cyBjcnlwdCBpcyBhbG1vc3QgYWx3YXlzCit1bmJ1bmRsZWQgZnJvbSBsaWJjLiAgQWxzbyBhZGRl ZCBleHBsYW5hdG9yeSBub3Rlcy4gIG1ha2VmaWxlLCAxMSBNYXIgMjAwNC4KKworQ2hhbmdlZCBN QU5ESVIgdG8gZGVmYXVsdCB0byAkKG1hbnJvb3QpL21hbi9tYW4xLCBhbmQgbWFucm9vdCB0byBk ZWZhdWx0Cit0byAkKHByZWZpeCkuICBNb3JlIGFkZGluZyBvZiBDQz0kKENDKSBjbGF1c2VzOiB7 RnJlZSxOZXQsT3Blbn1CU0QsIDQuNEJTRC4KK21ha2VmaWxlLCAxMSBNYXIgMjAwNC4KKworTWlz Y2VsbGFuZW91cyBjbGVhbnVwczogY2t1dXN4LmMsIGNrY25ldC5jLCBja3VmaW8uYywgMTEgTWFy IDIwMDQuCisKK0NvcnJlY3RlZCB0aGUgY2hlY2sgaW4gdGhlIGxpbnV4IHRhcmdldCB0byBzZWUg aWYgL3Vzci9pbmNsdWRlL2NyeXB0LmgKK2V4aXN0cywgYW5kIGlmIHNvIHRvIGRlZmluZSBIQVZF X0NSWVBUX0gsIHdoaWNoIGlzIHVzZWQgaW4gY2tjZGViLmggdG8KKyNpbmNsdWRlIDxjcnlwdC5o PiB0byBnZXQgdGhlIHByb3RvdHlwZSBmb3IgY3J5cHQoKSBhbmQgcHJldmVudCBib2d1cworY29u dmVyc2lvbnMgb24gaXRzIHJldHVybiB0eXBlIG9uIDY0LWJpdCBwbGF0Zm9ybXMgKHRoZSBwcmV2 aW91cyB0ZXN0IHdhc24ndAorcXVpdGUgcmlnaHQgYW5kIHRoZSByZXN1bHRpbmcgc3ltYm9sIHdh c24ndCBzcGVsbGVkIHJpZ2h0KS4gIG1ha2VmaWxlLAorMTIgTWFyIDIwMDQuCisKK0Zyb20gSmVm ZiwgMTQgTWFyIDIwMDQ6CisgLiBJbml0aWFsaXplIGxvY2FsdWlkYnVmW10gaW4gdG5fc25lbnYo KTogY2tjdGVsLmMuCisgLiBSZW1vdmUgcmVtb3RlLW1vZGUgY2hlY2tzIGluIGh1cG9rKCkgZm9y IEs5NUcgb25seSAod2h5Pyk6IGNrdXVzMy5jLgorIC4gQWRkIGhlbHAgdGV4dCBmb3IgbmV3IEs5 NS1vbmx5IFRZUEUgL0dVSSBzd2l0Y2hlczogY2t1dXMyLmMuCisgLiBUWVBFIC9HVUkgcGFyc2lu ZywgLi4uOiBja3V1c3IuYy4KKyAuIFRZUEUgL0dVSSBhY3Rpb24sIGRvdHlwZSgpOiBja3V1czYu YworIC4gQ2hhbmdlIEplZmYncyBhZmZpbGlhdGlvbjogbW9zdCBtb2R1bGVzLgorCisyMCBNYXIg MjAwNDogTG9va2VkIGludG8gYWRkaW5nIGxvbmcgZmlsZSBzdXBwb3J0LCBpLmUuIGhhbmRsaW5n IGZpbGVzIG1vcmUKK3RoYW4gMkdCIChvciA0R0IpIGxvbmcuICBEaXNjb3ZlcmVkIHZlcnkgcXVp Y2tseSB0aGlzIHdvdWxkIGJlIGEgbWFqb3IKK3Byb2plY3QuICBFYWNoIHBsYXRmb3JtIGhhcyBh IGRpZmZlcmVudCBBUEksIG9yIGVudmlyb25tZW50LCBvciB0cmFuc2l0aW9uCitwbGFuLCBvciB3 aGF0ZXZlciAtLSBhIG5pZ2h0bWFyZSB0byBoYW5kbGUgaW4gcG9ydGFibGUgY29kZS4gIEF0IHRo ZSB2ZXJ5CitsZWFzdCB3ZSdsbCBuZWVkIHRvIGNvbnZlcnQgYSBsb3Qgb2YgS2VybWl0IHZhcmlh YmxlcyBmcm9tIGxvbmcgb3IgdW5zaWduZWQKK2xvbmcgdG8gc29tZSBuZXcgS2VybWl0IHR5cGUs IHdoaWNoIGluIHR1cm4gaXMgI2RlZmluZWQgb3IgdHlwZWRlZidkCithcHByb3ByaWF0ZWx5IGZv ciBlYWNoIHBsYXRmb3JtICh0byBvZmZfdCBvciBzaXplX3Qgb3Igd2hhdGV2ZXIpLiAgVGhlbiB3 ZQoraGF2ZSB0byB3b3JyeSBhYm91dCB0aGUgZGV0YWlscyBvZiBvcGVuKCkgdnMgZm9wZW4oKTsg cHJpbnRmKCkgZm9ybWF0cyAoJWxsZAordnMgJUxkIHZzICUiUFJJZDY0Ii4uLiksIHBsYXRmb3Jt cyBsaWtlIEhQLVVYIHdoZXJlIHlvdSBtaWdodCBoYXZlIHRvIHVzZQorZGlmZmVyZW50IEFQSXMg Zm9yIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMgb24gdGhlIHNhbWUgY29tcHV0ZXIsIGV0Yy4gIFdl J2xsCituZWVkIHRvIGNvbmZyb250IHRoaXMgc29vbiwgYnV0IGxldCdzIGdldCBhIGdvb2Qgc3Rh YmxlIDguMC4yMTEgcmVsZWFzZSBvdXQKK2ZpcnN0ISAgTWVhbndoaWxlLCBmb3IgZnV0dXJlIHJl ZmVyZW5jZSwgaGVyZSBhcmUgYSBmZXcgYXJ0aWNsZXM6CisKK0dlbmVyYWw6IGh0dHA6Ly9mcmVz aG1lYXQubmV0L2FydGljbGVzL3ZpZXcvNzA5LworTGludXg6ICAgaHR0cDovL3d3dy5lY2UudXRl eGFzLmVkdS9+bHVvL2xpbnV4X2xmcy5odG1sCitIUC1VWDogICBodHRwOi8vZGV2cnNyYzEuZXh0 ZXJuYWwuaHAuY29tL1NUSy9wYXJ0bmVyL2xnX2ZpbGVzLnBkZgorU29sYXJpczogaHR0cDovL3d3 d3Muc3VuLmNvbS9zb2Z0d2FyZS93aGl0ZXBhcGVycy93cC1sYXJnZWZpbGVzL2xhcmdlZmlsZXMu cGRmCisKK0xvb2tlZCBpbnRvIEZUUCB0aW1lb3V0cy4gIEl0IGFwcGVhcnMgSSBjYW4ganVzdCBj YWxsIGVtcHR5KCkgKHdoaWNoIGlzCitub3RoaW5nIG1vcmUgdGhhbiBhIGZyb250IGVuZCBmb3Ig c2VsZWN0KCkpIHdpdGggdGhlIGRlc2lyZWQgdGltZW91dCBiZWZvcmUKK2FueSBraW5kIG9mIG5l dHdvcmsgcmVhZC4gIElmIGl0IHJldHVybnMgPD0gMCwgd2UgaGF2ZSBhIHRpbWVvdXQuICBUaGlz IGlzCitub3QgcXVpdGUgdGhlIHNhbWUgYXMgdXNpbmcgYWxhcm0oKSAvIHNpZ25hbCgpIGFyb3Vu ZCBhIHJlY3YoKSAod2hpY2ggY291bGQKK2dldCBzdHVjaykgYnV0IGFsYXJtKCkgLyBzaWduYWwo KSBhcmUgbm90IG5vdCB1c2VkIGluIHRoZSBGVFAgbW9kdWxlIGFuZCBhcmUKK25vdCBuYXR1cmFs bHkgcG9ydGFibGUgdG8gV2luZG93cywgYnV0IHNlbGVjdCgpIGlzIGFscmVhZHkgaW4gdXNlIGlu IHRoZSBGVFAKK21vZHVsZSBmb3IgYm90aCBVbml4IGFuZCBXaW5kb3dzLiAgVGhpcyBmb3JtIG9m IHRpbWVvdXQgY291bGQgYmUgdXNlZAorcG9ydGFibHkgZm9yIGJvdGggY29tbWFuZCByZXNwb25z ZSBhbmQgZGF0YSByZWFkcy4gIFdoYXQgYWJvdXQgd3JpdGVzIHRvIHRoZQorY29tbWFuZCBvciBk YXRhIHNvY2tldD8gIFRoZXkgY2FuIGdldCBzdHVjayBmb3IgaG91cnMgYW5kIGhvdXJzIHdpdGhv dXQKK3JldHVybmluZyB0b28sIGJ1dCB0aGUgc2VsZWN0KCkgYXBwcm9hY2ggd29uJ3QgaGVscCBo ZXJlIC0tIHdlIG5lZWQgdGhlCithY3R1YWwgc2VuZCgpIG9yIHJlY3YoKSB0byB0aW1lIG91dCwg b3IgYmUgd3JhcHBlZCBpbiBhbiBhbGFybSgpL3NpZ25hbCgpCitraW5kIG9mIG1lY2hhbmlzbS4g IEJ1dCBpZiB3ZSBjYW4gZG8gdGhhdCBmb3Igc2VuZHMsIHdlIGNhbiBhbHNvIGRvIGl0IGZvcgor cmVjZWl2ZXMuICBCZXR0ZXIgY2hlY2sgd2l0aCBKZWZmIGJlZm9yZSBJIHN0YXJ0IHByb2dyYW1t aW5nIGFueXRoaW5nLgorMjAgTWFyIDIwMDQuCisKK0xhdGVyOiBEZWNpZGVkIHRvIHBvc3Rwb25l IHRoZSBhYm92ZSB0d28gcHJvamVjdHMgKGRpdHRvIElQdjYpIHVudGlsIGFmdGVyCis4LjAuMjEx IGlzIHJlbGVhc2VkIGJlY2F1c2UgYm90aCB3aWxsIGhhdmUgbWFqb3IgaW1wYWN0cyBvbiBwb3J0 YWJpbGl0eS4KK0dydW1ibGU6IGFsbCBpL28gQVBJcyBzaG91bGQgaGF2ZSBiZWVuIGRlc2lnbmVk IGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEKK3RpbWVvdXQgcGFyYW1ldGVyLiAgVG8gdGhpcyBk YXksIGhhcmRseSBhbnkgaGF2ZSB0aGlzIGZlYXR1cmUuCisKKzMtNCBBcHIgMjAwNDogTW9yZSA4 LjAuMjExIEJldGEuMDIrIHRlc3QgYnVpbGRzOgorCisgLiBGcmVlQlNEIDMuMworIC4gRnJlZUJT RCA0LjQKKyAuIExpbnV4IERlYmlhbiAyLjEKKyAuIExpbnV4IFJIIDYuMQorIC4gTGludXggUkgg Ny4xCisgLiBMaW51eCBSSCA3LjIKKyAuIExpbnV4IFJIIDkgKHdpdGggODQgZGlmZmVyZW50IGNv bWJpbmF0aW9ucyBvZiBmZWF0dXJlIHNlbGVjdGlvbikKKyAuIExpbnV4IFN1U0UgNi40CisgLiBM aW51eCBTdVNFIDcuMAorIC4gTmV0QlNEIDEuNC4xCisgLiBOZXRCU0QgMS41LjIKKyAuIE9wZW5C U0QgMi41CisgLiBPcGVuQlNEIDMuMAorIC4gUU5YIDQuMjUKKyAuIFNDTyBVbml4V2FyZSAyLjEu MworIC4gU0NPIFVuaXhXYXJlIDcuMS40CisgLiBTQ08gT3BlblNlcnZlciA1LjAuNworIC4gU0NP IFhFTklYIDIuMy40IChubyBUQ1ApCisKK0NoYW5nZXMgbmVlZGVkOiBOb25lLgorCitQcm9ibGVt OiBTQ08gWEVOSVggMi4zLjQgbmV0d29yayBidWlsZCBmYWlsZWQgaW4gdGhlIEZUUCBtb2R1bGUg d2l0aAoraGVhZGVyLWZpbGUgc3ludGF4IGFuZCBjb25mbGljdGluZy1kZWZpbml0aW9ucyB0cm91 YmxlLiAgSSdtIG5vdCBnb2luZyB0bwordHJ5IHRvIGZpeCBpdDsgOC4wLjIwOSBidWlsdCBPSyB3 aXRoIEZUUCwgc28gd2UnbGwganVzdCBrZWVwIHRoYXQgb25lCithdmFpbGFibGUuCisKK0dvdCBh Y2Nlc3MgdG8gVk1TIDguMSBvbiBJQTY0LiAgQnVpbGRpbmcgdGhlIG5vbmV0IHZlcnNpb24gb2Yg Qy1LZXJtaXQKK3JlcXVpcmVkIG1pbm9yIG1vZGlmaWNhdGlvbnMgdG8gY2t2dm1zLmgsIGNrdltm dF1pby5jLCBhbmQgY2t2Y29uLmMsIHRvCithY2NvdW50IGZvciBhIHRoaXJkIGFyY2hpdGVjdHVy ZS4gIEFsc28gdG8gU0hPVyBGRUFUVVJFUyBpbiBja3V1czUuYy4gIE9uY2UKK3RoYXQgd2FzIGRv bmUsIHRoZSBVQ1ggNS41IHZlcnNpb24gYnVpbHQgT0sgdG9vLiAgU3RhcnRzIE9LLCBtYWtlcyBU ZWxuZXQKK2Nvbm5lY3Rpb24gT0ssIHNlbmRzIGZpbGVzLiAgSGFzIHNvbWUgb2J2aW91cyBnbGl0 Y2hlcyB0aG91Z2ggLS0gInN0YXQiCithZnRlciBhIGZpbGUgdHJhbnNmZXIgcmVwb3J0cyAwIGVs YXBzZWQgdGltZSAoaW4gZmFjdCBpdCB3YXMgMDA6MDk6NDgpIGFuZAorMTIxOTE3NDQwMCBjcHMg KHdoZW4gaW4gZmFjdCBpdCB3YXMgMTAzNjQpLiAgVGhpcyBkb2Vzbid0IGhhcHBlbiBvbiB0aGUK K0FscGhhLiAgQnR3LCB0aGUgSUE2NCBiaW5hcnkgaXMgdHdpY2UgYXMgYmlnIGFzIHRoZSBBbHBo YSBvbmUuICBDaGFuZ2VkCit0byBCZXRhLjAzLiAgNSBBcHIgMjAwNC4KKworRml4ZWQgdGhlIGNr ZGFpbHkgc2NyaXB0IHRvIGluY2x1ZGUgdGhlIG1ha2VmaWxlIGFuZCBtYW4gcGFnZSBpbiB0aGUg WmlwCitmaWxlICh0aGV5IHdlcmUgbm90IGluY2x1ZGVkIGJlY2F1c2UgdGhlIFppcCBmaWxlIHdh cyBpbnRlbmRlZCBtYWlubHkgZm9yCitWTVMgdXNlcnMsIGJ1dCBzb21lIFVuaXggdXNlcnMgcHJl ZmVyIFppcCB0byB0YXIuZ3opLiAgNiBBcHIgMjAwNC4KKworVHJhY2VkIHByb2JsZW1zIGluIFZN Uy9JQTY0IHN0YXRpc3RpY3MgcmVwb3J0IHRvIHJmdGltZXIoKS9nZnRpbWVyKCkgaW4KK2NrdnRp by5jLCB3aGljaCB1c2Ugc3lzJCBhbmQgbGliJCBjYWxscyB0byBmaWd1cmUgZWxhcHNlZCB0aW1l LiAgVGhlc2Ugd29yaworb24gVkFYIGFuZCBBbHBoYSBidXQgbm90IElBNjQuICBTZW50IGEgcmVw b3J0IHRvIHRoZSBjaGllZiBlbmdpbmVlciBvZiB0aGUKK0lBNjQgVk1TIHBvcnQ7IGhlIHNheXMg aXQncyBwcm9iYWJseSBhIGJ1ZyBpbiBWTVMgOC4xICh3aGljaCBpcyBub3QgYSByZWFsCityZWxl YXNlKTsgaGUnbGwgbWFrZSBzdXJlIGl0J3MgZml4ZWQgaW4gOC4yLiAgQXMgYW4gZXhwZXJpbWVu dCwgdHJpZWQKK3N3YXBwaW5nIGluIHRoZSBVbml4IHZlcnNpb25zIG9mIHRoZXNlIHJvdXRpbmVz ICh3aGljaCBjYWxsIGdldHRpbWVvZmRheSgpCitldGMpLiAgVGhleSBzZWVtIHdvcmsganVzdCBm aW5lIChpdCBodW5nIGEgY291cGxlIHRpbWVzIGJ1dCBJIHRoaW5rIHRoYXQncworYmVjYXVzZSB0 aGUgdW5kZXJseWluZyBzeXN0ZW0gaHVuZyB0b287IHRyeWluZyBpdCBsYXRlciBvbiBhIG5ldyBj b25uZWN0aW9uLAoraXQgd2FzIGZpbmU7IGhvd2V2ZXIgSSBub3RpY2VkIGEgQklHIGRpc2NyZXBh bmN5IGluIHRocm91Z2hwdXQgYmV0d2Vlbgorc2VuZGluZyBhbmQgcmVjZWl2aW5nKS4gIE1vdmVk IGRlZmluaXRpb25zIGZvciBWTVM2NEJJVCBhbmQgVk1TSTY0IHRvCitja2NkZWIuaCBzbyBhbGwg bW9kdWxlcyBjYW4gdXNlIHRoZW0gYW5kIGFkZGVkIHRoZW0gdG8gdGhlIFNIT1cgRkVBVFVSRVMK K2Rpc3BsYXkuICBBZGRlZCBWTVNWODAgZGVmaW5pdGlvbiB0byBidWlsZCBwcm9jZWR1cmUuICBC ZXRhLjAzKy4gIGNrY2RlYi5oLAorY2tjdXVzNS5jLCBja2N2dm1zLmgsIGNrdnRpby5jLCBja3Zr ZXIuY29tLCA2IEFwciAyMDA0LgorCitXaGlsZSBkb2luZyB0aGUgYnVpbGQtYWxsLCBJIG5vdGlj ZWQgdGhlIFZNUyB2ZXJzaW9uIGRpZCBub3QgYnVpbGQgd2l0aAorTXVsdGluZXQgb3Igb2xkZXIg VUNYIHZlcnNpb25zLCBhbHdheXMgd2l0aCB0aGUgc2FtZSBlcnJvcnMgLS0gdW5kZWNsYXJlZAor dmFyaWFibGVzLCB1bmRlZmluZWQgc3ltYm9scywgYWxsIFRDUC9JUCByZWxhdGVkLiAgVGhpcyBk aWRuJ3QgaGFwcGVuIGEKK2NvdXBsZSB3ZWVrcyBhZ28uLi4gIFNvbWVob3cgdGhlIG9yZGVyIG9m ICNpbmNsdWRlcyB3YXMgbWVzc2VkIHVwIC0tCitja3V1c3IuaCBkZXBlbmRlZCBvbiBzeW1ib2xz IHRoYXQgYXJlIGRlZmluZWQgaW4gY2tjbmV0LmgsIGJ1dCBja2NuZXQuaAord2FzIGJlaW5nIGlu Y2x1ZGVkIGFmdGVyIGNrdXVzci5oLi4uICB0aGlzIHdhcyBjb21wb3VuZGVkIGJ5IHR3byBtaXNz aW5nCitjb21tYXMgaW4gY2t2a2VyLmNvbS4gIDExIEFwciAyMDA0LgorCitSZW1vdmVkIEJldGEg ZGVzaWduYXRpb24sIHJlbGVhc2VkIGFzIDguMC4yMTEsIDEwIEFwciAyMDA0LgorCitJIGhhZCBz b21laG93IGxvc3QgdGhlIGVkaXQgdG8gY2t1dGlvLmMgdGhhdCBjaGFuZ2VkIHRoZSBVVUNQIGxv Y2tmaWxlIGZvcgorTWFjIE9TIFggZnJvbSAvdmFyL3Nwb29sL3V1Y3AgdG8gL3Zhci9zcG9vbC9s b2NrLiAgU28gSSBzbGlwcGVkIGl0IGluIGFuZAorcmUtdXBsb2FkZWQgdmVyc2lvbiA4LjAuMjEx LiAgWW91IGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgU0hPVworVkVSU0lPTlMgaGFz IDE3IEFwciAyMDA0IGZvciB0aGUgQ29tbXVuaWNhdGlvbnMgSS9PIG1vZHVsZS4gIEFsc28gdGhl IDEwLjMKK2V4ZWN1dGFibGUgbm93IGhhcyBhIGRlc2lnbmVyIGJhbm5lcjogIk1hYyBPUyBYIDEw LjMiLiAgbWFrZWZpbGUsIGNrdXZlci5oLAorY2t1dGlvLmMsIGNrdXVzWzQ1XS5jLCAxNyBBcHIg MjAwNC4KKworLS0tOC4wLjIxMS0tLQorCitSZW1vdmVkICJ3ZXJtaXQiIGZyb20gIm1ha2UgY2xl YW4iIChob3cgZGlkIGl0IGdldCB0aGVyZT8pLiAgbWFrZWZpbGUuCisKK0Zyb20gSmVmZiwgYXBw bGllZCAxMCBNYXkgMjAwNC4KKyAuIFJlYXJyYW5nZSAjaWZkZWZzIHRoYXQgZGVmaW5lIE9TLzIt b25seSBmZWF0dXJlcy4gY2tjZGViLmguCisgLiBGaXggdHdvIHN0cm5jYXQoKXMgdGhhdCBzaG91 bGQgaGF2ZSBiZWVuIGNrc3RybmNhdCgpcy4gIGNrdXVzNy5jLgorIC4gRml4IHR3byBzdHJuY2F0 KClzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBja3N0cm5jYXQoKXMuICBja3V1czQuYy4KKyAuIEZp eCBvbmUgc3RybmNhdCgpLiBja2NmbnMuYy4KKyAuIFNFVCBGVFAgQ0hBUiBPTiB1c2VkIGJhY2t3 YXJkcyBieXRlIG9yZGVyIHdoZW4gb3V0cHV0IHRvIHNjcmVlbi4gIGNrY2Zucy5jLgorIC4gRml4 IHR3byBzdHJuY2F0KClzLiAgY2t1dXMzLmMuCisgLiBBZGQgU0VUIE5FVFdPUksgVFlQRSBOQU1F RC1QSVBFIGZvciBLOTUuICBja3V1czMuYy4KKyAuIEFkZCAiTm8gYWN0aXZlIGNvbm5lY3Rpb25z IiBtZXNzYWdlIHRvIGh1cG9rKCkuICBja3V1czMuYy4KKyAuIEZpeCBtYW55IHN0cm5jYXQoKXMu ICBja2NuZXQuYy4KKyAuIEZpeCBzb21lIHN0cm5jYXQoKXMuICBja2NmdHAuYworIC4gTWFrZSBG VFAgcG9ydCB1bnNpZ25lZCBzaG9ydCBmb3IgMTYzODMgPCBwb3J0IDwgNjU1MzYuICBja2NmdHAu Yy4KKyAuIEltcHJvdmVtZW50cyB0byBGVFAgVVNFUiBjb21tYW5kLiAgY2tjZnRwLmMuCisgLiBG aXggRkVBVCBwYXJzaW5nIHRvIGFsbG93IGZvciB2YXJpb3VzIGZvcm1zIG9mIHdoaXRlc3BhY2Uu ICBja2NmdHAuYy4KKworUy1FeHByZXNzaW9uIChBTkQgRk9PIEJBUikgd291bGQgbm90IHNob3J0 LWNpcmN1aXQgaWYgRk9PJ3MgdmFsdWUgd2FzIDAsCitldmVuIHRob3VnaCBzaG9ydC1jaXJjdWl0 aW5nIGNvZGUgaGFzIGJlZW4gdGhlcmUgc2luY2UgRGF5IDEuICBTaW1pbGFybHkgZm9yCisoT1Ig QkFSIEZPTykuICBUdXJucyBvdXQgdGhlIGZpcnN0IG9wZXJhbmQgd2FzIGEgc3BlY2lhbCBjYXNl IHRoYXQgYnlwYXNzZWQKK3RoZSBzaG9ydC1jaXJjdWl0IGNoZWNrLiAgRml4ZWQgaW4gZG9zZXhw KCk6IGNrdXVzMy5jLCAxMCBNYXkgMjAwNC4KKworUmVkIEhhdCA3LjMgKGFuZCBtYXliZSBvdGhl cnMpIDxiYXVkYm95Lmg+IHJlZmVyZW5jZWQgb3BlbigpIHdpdGhvdXQgZmlyc3QKK2Vuc3VyaW5n IGl0IHdhcyBkZWNsYXJlZC4gIFRoZSBkZWNsYXJhdGlvbiBpcyBpbiA8ZmNudGwuaD4sIHdoaWNo IGlzIGFmdGVyCis8YmF1ZGJveS5oPiBpbiBja3V0aW8uYyBzZXJpZXMgb2YgI2luY2x1ZGVzLiAg TWFkZSBhIHNwZWNpYWwgY2FzZSBmb3IgdGhpcy4KK2NrdXRpby5jIChzZWUgY29tbWVudHMpLCAx MCBNYXkgMjAwNC4KKworSWYgdGhlIGxvY2FsIEtlcm1pdCdzIHBhcml0eSBpcyBzZXQgdG8gU1BB Q0UgYW5kIHRoZW4gYSBmaWxlIGFycml2ZXMgdmlhCithdXRvZG93bmxvYWQsIGF1dG9tYXRpYyBw YXJpdHkgZGV0ZWN0aW9uIGltcHJvcGVybHkgc3dpdGNoZXMgaXQgdG8gTk9ORS4KK0ZpeGVkIGlu IHJwYWNrKCkgYnkgc3dpdGNoaW5nIHBhcml0eSBhdXRvbWF0aWNhbGx5IG9ubHkgaWYgcGFyY2hr KCkgcmV0dXJucworPiAwIChyYXRoZXIgdGhhbiA+IC0xKSwgc2luY2UgTk9ORSBhbmQgU1BBQ0Ug YXJlIGluZGlzdGluZ3Vpc2hhYmxlLiAgQQorYmlnZ2VyIHByb2JsZW0gc3RpbGwgcmVtYWluczog YXV0b2Rvd25sb2FkIGRvZXMgbm90IHdvcmsgYXQgYWxsIGlmIHRoZQorc2VuZGVyIGlzIHVzaW5n IGFjdHVhbCBwYXJpdHkgYml0cyAoZXZlbiwgb2RkLCBvciBtYXJrKSBhbmQgdGhlIHJlY2VpdmVy J3MKK3Bhcml0eSBpcyBOT05FLiAgY2tjZm4yLmMsIDEwIE1heSAyMDA0LgorCitXaGVuIGEgRElB TCBNQUNSTyBpcyBkZWZpbmVkIGFuZCB0aGUgcGhvbmUgbnVtYmVyIGlzIGNvbXByaXNlZCBvZiBt b3JlIHRoYW4KK29uZSAid29yZCIgKGkuZS4gY29udGFpbnMgc3BhY2VzKSwgdGhlIGRpYWwgbWFj cm8gbG9zZXMgdGhlIHNlY29uZCBhbmQKK3N1YnNlcXVlbnQgd29yZHMgYWZ0ZXIgdGhlIGZpcnN0 IGNhbGwuIEZpeGVkIGluIHhkaWFsKCkgYnkgaW5zZXJ0aW5nIHF1b3RlcworYXJvdW5kIHBob25l IG51bWJlciBiZWZvcmUgcGFzc2luZyBpdCB0byB4ZGlhbCgpLiBja3V1czYuYywgMTAgTWF5IDIw MDQuCisKK0RJQUwgTUFDUk8gZml4IHdhcyBub3QgcmlnaHQ7IHRoZSBxdW90ZXMgd2VyZSBrZXB0 IGFzIHBhcnQgb2YgdGhlIHBob25lCitudW1iZXIgYW5kIHNlbnQgdG8gdGhlIG1vZGVtLiAgZG9k bygpIHBva2VzIGl0cyBhcmd1bWVudCB0byBzZXBhcmF0ZSB0aGUKK21hY3JvIGFyZ3VtZW50IHN0 cmluZyBpbnRvIGl0cyBjb21wb25lbnQgYXJndW1lbnRzLiAgeGRpYWwoKSBpcyBjYWxsZWQKK3Jl cGVhdGVkbHkgb24gdGhlIHNhbWUgc3RyaW5nLCBzbyBhZnRlciB0aGUgZmlyc3QgdGltZSwgYSBO VUwgaGFzIGJlZW4KK2RlcG9zaXRlZCBhZnRlciB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgdGVsZXBo b25lIG51bWJlci4gIFRoZSBmaXggaXMgdG8gaGF2ZQoreGRpYWwoKSBjcmVhdGUgYSBwb2tlYWJs ZSBjb3B5IG9mIGl0cyBhcmd1bWVudCBzdHJpbmcgYmVmb3JlIGNhbGxpbmcKK2RvZG8oZGlhbC1t YWNybyxhcmdzLi4uKS4gIEl0IG1pZ2h0IHNlZW0gb2RkIHRoYXQgZG9kbyBwb2tlcyBpdHMgYXJn dW1lbnQsCitidXQgbWFraW5nIGNvcGllcyB3b3VsZCBiZSB3b3VsZCBiZSBwcm9oaWJpdGl2ZSBp biBzcGFjZSBhbmQgdGltZS4KK2NrdXVzNi5jLCAyMyBNYXkgMjAwNC4KKworRlRQIENEIGRpZCBu b3Qgc3RyaXAgYnJhY2VzIG9yIHF1b3RlcyBmcm9tIGFyb3VuZCBpdHMgYXJndW1lbnQuICBGaXhl ZCBpbgorZG9mdHBybXQoKTogY2tjZnRwLmMsIDIzIE1heSAyMDA0LgorCitBZGRlZCBjbGllbnQg c2lkZSBvZiBSRU1PVEUgTUVTU0FHRS9STUVTU0FHRS9STVNHOiBja3V1c1tyMjddLmMsIDIzIE1h eSAyMDA0LgorCitTZXJ2ZXIgc2lkZSBvZiBSRU1PVEUgTUVTU0FHRTogY2tjcHJvLncsIDIzIE1h eSAyMDA0LgorCitGcm9tIERhdmUgU25lZGRvbjogYW4gdXBkYXRlZCBDS1ZLRVIuQ09NIGNvbnRh aW5pbmcgYSBmaXggd2hlcmUgdGhlCitDT01QQVFfU1NMIHN5bWJvbCB3YXMgbm90IGRlZmluZWQg YnV0IGxhdGVyIHJlZmVyZW5jZWQgd2hpY2ggZ2VuZXJhdGVkIGFuCit1bmRlZmluZWQgc3ltYm9s IGVycm9yLiAgY2t2a2VyLmNvbSwgNSBKYW4gMjAwNS4KKworRnJvbSBBbmR5IFRhbmVuYmF1bSAo MjggTWF5IDIwMDUpOgorIC4gRml4IGFuIGVycmFudCBwcm90b3R5cGUgaW4gY2tja2VyLmggYW5k IGNrdWNtZC5oIC0gKCkgaW5zdGVhZCBvZiAodm9pZCkuCisgLiBBZGQgc3VwcG9ydCBmb3IgTUlO SVggMy4wLiAgbWFrZWZpbGUsIGNrdXRpby5jLCBja3VmaW8uYywgY2t1dmVyLmguCisKK0ZpeGVk IG1lc3NlZC11cCBzbmRobHAoKSBjYWxsIHdoaWNoIGFwcGFyZW50bHkgaGFkIGJlZW4gamlnZ2Vy ZWQgdG8KK2NvbXBlbnNhdGUgZm9yIHRoZSBiYWQgcHJvdG90eXBlIHdoaWNoIGhhcyBub3cgYmVl biBmaXhlZCwgY2tjcHJvLncsCisxMiBKdW4gMjAwNS4KKworRnJvbSBKZWZmICgxMiBKdW5lIDIw MDUpOgorIC4gU2VjdXJpdHkgdXBkYXRlcy4gIGNrX3NzbC5jLCBja19jcnAuYywgY2t1YXRoLmMu CisgLiBGaXggYnVnIGluIEs5NSBTRVQgUFJJTlRFUiBDSEFSQUNURVItU0VULiBja3V1czMuYy4K KyAuIEFkZCBwcmludGVyIGNoYXJhY3Rlci1zZXQgdG8gSzk1IFNIT1cgUFJJTlRFUiBkaXNwbGF5 LiBja3V1czUsYworIC4gQWRkIFNFVCBNU0tFUk1JVCBGSUxFLVJFTkFNSU5HIHRvIEs5NS4gY2t1 dXM3LmMsIGNrdXVzci5oLgorIC4gQWRkIGhlbHAgZm9yIEs5NSBTRVQgTVNLRVJNSVQuICBja3V1 czIuYy4KKyAuIEFkZCBTRVQgR1VJIENMT1NFIHRvIEs5NS4gIGNrdXVzci5oLCBja3V1czIuYywg Y2t1dXMzLmMKKyAuIEFkZCBoZWxwIHRleHQgZm9yIEs5NSBTRVQgR1VJIE1FTlVCQVIgYW5kIFRP T0xCQVIuICBja3V1czIuYy4KKyAuIEFkZCAtLW5vY2xvc2UgY29tbWFuZC1saW5lIG9wdGlvbiBm b3IgSzk1LiAgY2t1dXN5LmMKKyAuIEFkZCBQQU0gc3VwcG9ydCBmb3IgTWFjIE9TIFguICBja3Vm aW8uYy4KKyAuIEFkZCBHU1NBUEkgc3VwcG9ydCBmb3IgTWFjIE9TIFguICBja2NmdHAuYy4KKyAu IFBpY2sgdXAgbW9yZSBVUkwgb3B0aW9ucy4gIGNrY2tlci5oLCBja3V1c3kuYy4KKyAuIEZpeCBi dWcgaW4gZGVsdGEtdGltZSBjYWxjdWxhdGlvbiBhY3Jvc3MgeWVhciBib3VuZGFyeS4gIGNrdWNt ZC5jLgorIC4gQWRkIFNlY3VyZSBFbmRwb2ludHMgdG8gY29weXJpZ2h0IG5vdGljZXMuICBja2Nt YWkuYy4KKyAuIEZpeCBGVFAgSEVMUCB0byBvdmVycmlkZSB1bnZlcmJvc2Ugc2V0dGluZy4gIGNr Y2Z0cC5jLgorIC4gRml4IGFzc29ydGVkIG1pbm9yIHR5cG9zLgorCitGcm9tIE1hdHRoaWFzIEt1 cno6IGF1dG9tYXRpYyBoZXJhbGQgZ2VuZXJhdGlvbiBmb3IgTmV0QlNEIDIuMCBhbmQgbGF0ZXIs CisibWFrZSBuZXRic2QyIi4gIGNrdXZlci5oLCBtYWtlZmlsZSwgMTIgSnVuIDIwMDUuCisKK0Fk ZGVkIFNFVCBURVJNSU5BTCBMRi1ESVNQTEFZLCBsaWtlIENSLURJU1BMQVkgYnV0IGZvciBsaW5l ZmVlZCByYXRoZXIgdGhhbgorY2FycmlhZ2UgcmV0dXJuLiAgY2t1dXNyLmgsIGNrdXVzWzI1N3hd LmMsIDEyIEp1biAyMDA1LgorCitNYWRlIGEgY29tbWFuZC1saW5lIG9wdGlvbiAtLXVuYnVmZmVy ZWQgdG8gZG8gd2hhdCB0aGUgLUROT05PU0VUQlVGCitjb21waWxlLXRpbWUgb3B0aW9uIGRvZXMs IGkuZS4gZm9yY2UgdW5idWZmZXJlZCBjb25zb2xlIGkvby4gIFVuaXggb25seS4KK2NrdXVzci5o LCBja3V1c3kuYywgY2t1dGlvLmMsIDEyIEp1biAyMDA1LgorCitGaXhlZCBnZXRpYWN0KCkgKHdo aWNoIGRpc3BsYXlzIFRFUk0gSURMRS1BQ1RJT04gc2V0dGluZykgdG8gZGlzcGxheQorc3BhY2Ug YXMgXHszMn0uICBja3V1czcuYywgMTIgSnVuIDIwMDUuCisKK0FkZGVkIExNViBhcyBhIHN5bm9u eW0gZm9yIExSRU5BTUUsIHdoaWNoIGlzIGl0c2VsZiBhIHN5bm9ueW0gZm9yIExPQ0FMCitSRU5B TUUuICBja3V1c3IuYywgMTIgSnVuIDIwMDUuCisKK1B1dCBIRUxQIFNFVCBURVJNSU5BTCBERy1V TklYLU1PREUgdGV4dCB3aGVyZSBpdCBiZWxvbmdlZC4gIGNrdXVzMi5jLAorMTIgSnVuIDIwMDUu CisKK0FkZGVkIElGIExJTksgKFVuaXggb25seSkgdG8gdGVzdCBpZiBhIGZpbGVuYW1lIGlzIGEg c3ltbGluay4gIFVzZXMgdGhlIG1vc3QKK3NpbXBsZW1pbmRlZCBwb3NzaWJsZSBtZXRob2QsIGNh bGxzIHJlYWRsaW5rKCkgdG8gc2VlIGlmIGl0IHN1Y2NlZWRzIG9yIGZhaWxzLgorTm8gb3RoZXIg bWV0aG9kIGlzIGRlcGVuZGFibGUgYWNyb3NzIGRpZmZlcmVudCBVbml4ZXMuICBUaGlzIGNvZGUg c2hvdWxkIGJlCitwb3J0YWJsZSBiZWNhdXNlIEkgYWxyZWFkeSB1c2UgcmVhZGxpbmsoKSBlbHNl d2hlcmUgd2l0aGluIGV4YWN0bHkgdGhlIHNhbWUKKyNpZmRlZnMuICBja3VmaW8uYywgY2t1dXMy LmMsIGNrdXVzNi5jLCAxMiBKdW4gMjAwNS4KKworRml4ZWQgYSBidWcgaW4gd2hpY2ggXGZkaXIo KSB3b3VsZG4ndCB3b3JrIHdoZW4gaXRzIGFyZ3VtZW50IHdhcyB0aGUgbm9ud2lsZAorbmFtZSBv ZiBhIGRpcmVjdG9yeSBmaWxlLiAgenhwYW5kKCk6IGNrdWZpby5jLCAxMiBKdW4gMjAwNS4KKwor TWFkZSBcZmRpcmVjdG9yeSgpIGEgc3lub255bSBmb3IgXGZkaXJlY3RvcmllcygpLiAgTWFkZSBc ZmRpcigpIGFuCithY2NlcHRhYmxlIGFiYnJldmlhdGlvbiBmb3IgdGhlc2UsIGV2ZW4gdGhvdWdo IGl0IGNsYXNoZXMgd2l0aCBcZmRpcm5hbWUoKSwKK3doaWNoIHN0aWxsIHdvcmtzIGFzIGJlZm9y ZS4gIGNrdXVzNC5jLCAxMiBKdW4gMjAwNS4KKworQWRkZWQgdGhlIGxvbmctbmVlZGVkIFxmbG9w eCgpIGZ1bmN0aW9uLCB0byByZXR1cm4gcmlnaHRtb3N0IHBpZWNlcyBvZgorc3RyaW5ncywgc3Vj aCBhcyBmaWxlIGV4dGVuc2lvbnMuICBcZnN0cmlweCgpIGFuZCBcZmxvcHgoKSBhcmUgdGhlCitv cnRob2dvbmFsIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHBpY2sgZmlsZW5hbWVzIGFwYXJ0IGZyb20g dGhlIHJpZ2h0OgorXHN0cmlweChmb28udGFyLmd6KSA9IGZvby50YXI7IGZsb3B4KGZvby50YXIu Z3opID0gZ3ouICBja3V1c3IuaCwgY2t1dXNyLmMsCitja3V1czIuYywgMTIgSnVuIDIwMDUuCisK K1JlbW92ZWQgcmVmZXJlbmNlIHRvIGRlZnVuY3QgZmF4IG51bWJlciwgY2tjbWFpLmMsIDEyIEp1 biAyMDA1LgorCitBZGRlZCAtREhBVkVfUFRNWCB0byBsaW51eCtrcmI1K29wZW5zc2wremxpYitz aGFkb3crcGFtLiAgRnJvbSBUaW1vdGh5IEZvbGtzLgorbWFrZWZpbGUsIDEyIEp1biAyMDA1Lgor CitCdWlsdCBvbiBTb2xhcmlzIDkgYW5kIE5ldEJTRCAyLjAuCisKK0Zyb20gSmVmZjogTmV3IGJ1 aWxkIHRhcmdldCBmb3IgTWFjIE9TIFggMTAuMyB3aXRoIEtlcmJlcm9zIDUgYW5kIFNTTC4KK21h a2VmaWxlLCAxNCBKdW4gMjAwNS4KKworRml4ZWQgZXJyb3IgaW4gY2t1dmVyLmggTmV0QlNEICNp ZmRlZnMuICAxNSBKdW4gMjAwNS4KKworRml4ZWQgU0VUIFRFUk1JTkFMIElETEUtQUNUSU9OIE9V VFBVVCB0byB3b3JrIGFzIGRvY3VtZW50ZWQsIG5hbWVseSBpZiB0aGUKK291dHB1dCBzdHJpbmcg aXMgZW1wdHksIHRvIHNlbmQgYSBOVUwuICBQcmV2aW91c2x5IHRoZXJlIHdhcyBubyB3YXkgdG8g bWFrZQoraXQgc2VuZCBhIE5VTC4gIGNrdXVzNy5jLCAxNSBKdW4gMjAwNS4KKworU3VwcG9zZSAo aW4gVW5peCwgZm9yIGV4YW1wbGUpIGEgZmlsZW5hbWUgY29udGFpbnMgd2lsZGNhcmQgY2hhcmFj dGVycywgc3VjaAorYXMge2FiY30udHh0LiAgV2hlbiByZWZlcnJpbmcgdG8gc3VjaCBhIGZpbGUg KGUuZy4gaW4gYSBTRU5EIGNvbW1hbmQpLCB0aGVzZQorY2hhcmFjdGVycyBjYW4gYmUgcXVvdGVk LCBlLmcuIFx7YWJjXH0udHh0LiAgQnV0IGlmIHRoZSBmaWxlIGxpc3QgaGFzIGJlZW4KK29idGFp bmVkIHByb2dyYW1tYXRpY2FsbHksIGUuZy4gc3RvcmVkIGluIGFuIGFycmF5LCB0aGVyZSBpcyBu byB3YXksIHNob3J0CitvZiB0ZWRpb3VzLCBjb21wbGljYXRlZCwgYW5kIGVycm9yLXByb25lIHN0 cmluZyBwcm9jZXNzaW5nLCB0byByZWZlcmVuY2UgdGhlCitmaWxlLiAgRm9yIHRoaXMgd2UgbmVl ZCBhIHdheSB0byBkaXNhYmxlIHdpbGRjYXJkIHByb2Nlc3NpbmcuICBJIGFkZGVkIHsgT04sCitP RkYgfSBjaG9pY2VzIGZvciB0aGUgU0VUIFdJTEQgYW5kIFNIT1cgRklMRSBjb21tYW5kczogY2t1 dXNyLmgsIGNrdXVzWzIzNF0uYy4KK3sgT04sIE9GRiB9IHR1cm5zIHdpbGRjYXJkaW5nIG9mZiBh bmQgb24gd2l0aG91dCBhZmZlY3RpbmcgdGhlIHsgS0VSTUlULAorU0hFTEwgfSBhZ2VudCBjaG9p Y2U7IGl0IGRvZXMgdGhpcyBieSBzZXR0aW5nIGEgbmV3IGFuZCBzZXBhcmF0ZSBnbG9iYWwKK3Zh cmlhYmxlLCB3aWxkZW5hLiAgQWRkZWQgc2VtYW50aWNzIHRvIGNrdWZpby5jLiAgQ3J1ZGUgYnV0 IGVmZmVjdGl2ZS4gIEl0CittaWdodCBoYXZlIGJlZW4gbW9yZSBVbml4bGlrZSB0byBhZGQgWWV0 IEFub3RoZXIgZm9ybSBvZiBxdW90aW5nIGJ1dCB3ZQoraGF2ZSBlbm91Z2ggb2YgdGhhdCBhbHJl YWR5IChsYXRlciBtYXliZSBJJ2xsIGFkZCBhIFxmdW5jdGlvbigpIGZvciB0aGlzKS4KK05lZWRz IHRvIGJlIHByb3BhZ2F0ZWQgdG8gV2luZG93cyBhbmQgVk1TLiAgMTUgSnVuIDIwMDUuCisKK0lt cHJvdmVkIGFuZCBmaXhlZCB0eXBvcyBpbiBIRUxQIFdJTERDQVJEIGFuZCBIRUxQIFBBVFRFUk4u ICBja3V1czIuYywKKzE1IEp1biAyMDA1LgorCitUaGUgR1JFUCBjb21tYW5kLCBhbmQgcHJvYmFi bHkgYW55dGhpbmcgZWxzZSB0aGF0IHVzZXMgY2ttYXRjaCgpIGZvciBwYXR0ZXJuCittYXRjaGlu ZywgZmFpbGVkIG9uIHBhdHRlcm5zIGxpa2UgKi9bMC0zXSouaHRtbC4gIFRoZSBbYS1iXSBoYW5k bGVyLCB3aGVuCitmYWlsaW5nIHRvIG1hdGNoIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBuZWds ZWN0ZWQgdG8gYmFjayB1cCB0aGUgcGF0dGVybgorYW5kIHRyeSBhZ2FpbiBvbiB0aGUgcmVtYWlu ZGVyIG9mIHRoZSBzdHJpbmcuICBJIGFsc28gZml4ZWQgYW5vdGhlciBjYXNlLCBpbgord2hpY2gg bWF0Y2hpbmcgYSBsaXRlcmFsIHN0cmluZyBhKmI/YyBhZ2FpbnN0IHRoZSBwYXR0ZXJuIGFbKj9d Kls/Kl1jIGNhdXNlZAorY2ttYXRjaCgpIHRvIHJlY3Vyc2UgdW50aWwgaXQgYmxldyB1cC4gIGNr Y2xpYi5jLCAxNiBKdW4gMjAwNS4KKworQWRkZWQgYnVpbGRzIGFuZCBkZXNpZ25lciBiYW5uZXIg Zm9yIFNvbGFyaXMgMTAuICBtYWtlZmlsZSwgY2t1dmVyLmgsCisyNyBKdW4gMjAwNS4KKworRGVm aW5lZCBDS0hUVFAgZm9yIE5ldEJTRCwgdGhlIEhUVFAgY29kZSBidWlsZHMgYW5kIHdvcmtzIGZp bmUgdGhlcmUuCitja2NkZWIuaCwgMiBKdWwgMjAwNS4KKworQWRkZWQgI2lmbmRlZiBPU0Y0MC4u I2VuZGlmIGFyb3VuZCBkZWZpbml0aW9uIG9mIGluZXRfYXRvbigpIGluIGNrX3NzbCgpCit0byBh bGxvdyBidWlsZGluZyBpbiBUcnU2NC4gIEFkZGVkIHRydTY0LTUxYitvcGVuc3NsIHRvIG1ha2Vm aWxlLgorMTUgSnVsIDIwMDUuCisKK0hUVFAgR0VUIHdvdWxkIGZhaWwgaWYgdGhlIFVSTCBjb250 YWluZWQgYW55IG1ldGFjaGFyYWN0ZXJzLCBubyBtYXR0ZXIgaG93CittdWNoIHlvdSBxdW90ZWQg dGhlbS4gIEFsdGhvdWdoIGl0IHVzZXMgY21mbGQoKSB0byBwYXJzZSB0aGUgKHBhcnRpYWwpIFVS TCwKK2l0IHRoZW4gdXNlcyBjbW9maSgpIHRvIGdldCB0aGUgb3V0cHV0IGZpbGVuYW1lLCB3aGlj aCBieSBkZWZhdWx0IGlzIHRoZQorImZpbGVuYW1lIiBmcm9tIHRoZSBVUkwsIHdoaWNoIG1pZ2h0 IGJlIHNvbWV0aGluZyBsaWtlICJyYW5rZW0uYXNwP2lkPTE2MzkiLgorY21vZmkoKSByZWZ1c2Vz IHRvIGFjY2VwdCB1bnF1b3RlZCBtZXRhY2hhcmFjdGVycyBpbiAiZmlsZW5hbWVzIiBhbmQgdGhh dCdzCit3aGF0IGhhcHBlbnMgaW4gdGhpcyBjYXNlIGlmIHRoZSBvdXRwdXQgZmlsZW5hbWUgaXMg bm90IHNwZWNpZmllZC4gIFdvcmtlZAorYXJvdW5kIHRoaXMgYnkgZGlzYWJsaW5nIHdpbGRjYXJk IHByb2Nlc3NpbmcgYXJvdW5kIEhUVFAgR0VUIHVzaW5nIHRoZSBuZXcKKyJ3aWxkZW5hIiB2YXJp YWJsZSBmcm9tIEp1bmUgMTV0aC4gIGNrdXVzci5jLCAxOCBKdWwgMjAwNS4KKworRml4ZWQgdGhl IEp1bmUgMTZ0aCBmaXggdG8gdGhlIHBhdHRlcm4gbWF0Y2hlci4gIEkgZml4ZWQgYSByZWFsIHBy b2JsZW0sIGJ1dAorSSBtYWRlIGFuIHVucmVsYXRlZCBvcHRpbWl6YXRpb24gdGhhdCBpbnRyb2R1 Y2VkIG5ldyBvbmVzLiAgY2tjbGliLmMsCisxOCBKdWwgMjAwNS4KKworQWRkZWQgbWlzc2luZyBo ZWxwIHRleHQgZm9yIFxmYjY0ZW5jb2RlKCkgYW5kIFxmYjY0ZGVjb2RlKCkuICBja3V1czIuYywK KzE4IEp1bCAyMDA1LgorCitDaGFuZ2VkIFNFVCBXSUxEIE9GRiBoZWxwIHRleHQgdG8gd2FybiB0 aGF0IHRoaXMgc2V0dGluZyBwcmV2ZW50cyB0aGUKK2NyZWF0aW9uIG9mIGJhY2t1cCBmaWxlcyAo bGF0ZXIgSSdsbCBoYXZlIHRvIHNlZSBpZiBzb21ldGhpbmcgbW9yZSB1c2VmdWwKK2NhbiBiZSBk b25lIGFib3V0IHRoaXMpLiAgY2t1dXMyLmMsIDE4IEp1bCAyMDA1LgorCitCdWlsdCBPSyBvbiBN YWMgT1MgWCAxMC40LjIgdXNpbmcgbWFjb3N4MTAzIHRhcmdldCAoYnV0IHdpdGggc29tZQorInNp Z25lZG5lc3MiIHdhcm5pbmdzIGluIGNrY25ldC5jIGFuZCBja2NmdHAuYykuICBCdWlsdCBvbiBV bml4d2FyZSA3LjEuNAord2l0aCB1dzcgdGFyZ2V0LiAgMjctMjggSnVsIDIwMDUuIAorCitBZGRl ZCAtRENLSFRUUCB0byBNYWMgT1MgWCAxMC4zLS40IEtGTEFHUy4gIE1ha2VmaWxlLCA0IEF1ZyAy MDA1LgorCitCdWlsdCBvbiBCU0RJIDQuMy4xLiAgQWRkZWQgLURDS0hUVFAuICAKKworQ29tcGFj dCBzdWJzdHJpbmcgbm90YXRpb24gZXh0ZW5kZWQgdG8gYWNjZXB0IG5vdCBvbmx5IHN0YXJ0Omxl bmd0aCBidXQgYWxzbworc3RhcnQtZW5kIG5vdGF0aW9uLiAgVGh1cyBccyhmb29bMTI6MThdKSBt ZWFucyB0aGUgc3Vic3RyaW5nIG9mIGZvbyBzdGFydGluZworYXQgcG9zaXRpb24gMTIgb2YgbGVu Z3RoIDE4LCBhbmQgdG5lIG5ldyBccyhmb29bMTItMThdKSBtZWFucyB0aGUgc3Vic3RyaW5nCitv ZiBmb28gc3RhcnRpbmcgYXQgcG9zaXRpb24gMTIgYW5kIGVuZGluZyB3aXRoIHBvc2l0aW9uIDE4 LiAgRGl0dG8gZm9yCitcOihcJWEpLCBldGMuICBja3V1czQuYywgOSBBdWcgMjAwNS4KKworU2Vl IGNvcnJlc3BvbmRlbmNlIHdpdGggTWFyayBTYXBpcm8sIE5vdiAyMDAzIGFuZCBTZXAgMjAwNCwg YWJvdXQgY2VydGFpbgordmFyaWF0aW9ucyBvbiBJRiBzeW50YXggaGF2aW5nIGJlZW4gYnJva2Vu IGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YgImltbWVkaWF0ZQorbWFjcm9zIiBjaXJjYSAxOTk5LiAg SXQgc2VlbXMgdGhlIHByb2JsZW0gLS0gdmFyaWFibGVzIG5vdCBiZWluZyBleHBhbmRlZCAtLQor YWx3YXlzIG9jY3VycyBpbiB0aGUgRUxTRSBwYXJ0IHdoZW4gKGEpIHRoZSBJRiBjb25kaXRpb24g aXMgZmFsc2U7IChiKSB0aGUKK0VMU0UgY29tbWFuZCBpcyAic3RhbmRhbG9uZSIsIGkuZS4gZXhw cmVzc2VkIGFzIGEgc2VwYXJhdGUgY29tbWFuZCBhZnRlciB0aGUKK0lGIGNvbW1hbmQgKG9yaWdp bmFsIEMtS2VybWl0IDVBIHN5bnRheCksIGFuZCAoYykgaXRzIGNvbW1hbmQgbGlzdCBpcyBhIGJs b2NrLgorVGhpcyB3b3VsZCBzdWdnZXN0IHRoZSBwcm9ibGVtIGlzIGluIHRoZSBYWEVMUyBwYXJz ZXIuCisKK0dvaW5nIGJhY2sgdG8gMTk5OSwgSSBmaW5kIHRoaXM6CisgIEZpeGVkIGEgcHJvYmxl bSBKaW0gV2hpdGJ5IG5vdGljZWQgd2l0aCBxdW90aW5nIGluIEVMU0Ugc3RhdGVtZW50cy4gIFRo aXMKKyAgcHJvYmxlbSB3YXMgaW50cm9kdWNlZCB3aGVuIEkgdW5pZmllZCBJRiBhbmQgWElGLCBh bmQgb2NjdXJzIG9ubHkgd2hlbgorICBFTFNFIGJlZ2lucyBvbiBhIGxpbmUsIGZvbGxvd2VkIGJ5 IGEgeyBjb21tYW5kIGxpc3QgfSByYXRoZXIgdGhhbiBhIHNpbmdsZQorICBjb21tYW5kLiAgVGhl IHNvbHV0aW9uIChncm9zcykgd2FzIHRvIG1ha2UgYSBzcGVjaWFsIHZlcnNpb24gb2YgcHVzaGNt ZCgpCisgIChjYWxsZWQgcHVzaHFjbWQoKSkgZm9yIHRoaXMgc2l0dWF0aW9uLCB3aGljaCBkb3Vi bGVzIGJhY2tzbGFzaGVzIHdoaWxlCisgIGNvcHlpbmcsIEJVVCBPTkxZIElGIGl0J3MgYSBjb21t YW5kIGxpc3QgKGkuZS4gc3RhcnRzIHdpdGggInsiKTsgb3RoZXJ3aXNlCisgIHdlIGJyZWFrIGxv dHMgb2Ygb3RoZXIgc3R1ZmYuICBSZXN1bHQgcGFzc2VzIEppbSdzIHRlc3QgYW5kIHN0aWxsIHBh c3NlcworICBja2VkZW1vLmtzYyBhbmQgaWZ0ZXN0LmtzYy4gIGNrdWNtZC5jLCBja3V1czYuYywg MjcgU2VwIDk5LgorCitJIHVuZGlkIHRoaXMgY2hhbmdlIGFuZCBpdCBtYWRlIG5vIGRpZmZlcmVu Y2UgdG8gYWxsIHRoZSBvdGhlciBJRgorY29uc3RydWN0aW9ucyAoaW4gZmFjdCwgaXQgZml4ZWQg YW4gdW5yZWxhdGVkIG9uZSB0aGF0IHdhcyBicm9rZW4sIHNvIG5vdworaWZ0ZXN0IHNjb3JlcyA1 NCBvdXQgb2YgNTQsIGluc3RlYWQgb2YgNTMpLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgZml4IHRo ZQorRUxTRSBwcm9ibGVtOyBpbiBmYWN0IGl0IHB1c2hlcyBpdCBhbGwgdGhlIHdheSBpbiB0aGUg b3RoZXIgZGlyZWN0aW9uOgorCisgIFRoZSBvcHBvc2l0ZSBvY2N1cnMgYW55IHRpbWUgeW91IHRy eSB0byBleGVjdXRlIGFuIGltbWVkaWF0ZSBtYWNybyBpbnNpZGUgYQorICBtYWNybyBvciBhbnkg b3RoZXIgeyBibG9jayB9OiBub3Qgb25seSBpcyB0aGUgdmFyaWFibGUgZXZhbHVhdGVkLCBpdCBp cworICBldmFsdWF0ZWQgaW50byBub3RoaW5nLiAgSXQgbG9va3MgbGlrZSB0aGlzIGhhcHBlbnMg b25seSBpbiBpbW1lZGlhdGUKKyAgbWFjcm9zLCBpLmUuICpjb21tYW5kcyogdGhhdCBzdGFydCB3 aXRoICd7Jy4gIFNvIG1heWJlIHdlIHJlYWxseSBoYXZlIHR3bworICBpc29sYXRlZCBwcm9ibGVt cywgdGhhdCBjYW4gZWFjaCBiZSBmaXhlZC4KKworVGhlIHNpdHVhdGlvbiBpcyBpbGx1c3RyYXRl ZCBieSB0aGlzIHNpbXBsZSBzY3JpcHQ6CisKKyAgZGVmIHh4IHsKKyAgICAgIGlmIGZhbHNlIHsg ZWNobyBcJTEsIGVjaG8gXCUyIH0KKyAgICAgIGVsc2UgeyBlY2hvIFwlMywgZWNobyBcJTQgfQor ICB9CisgIHh4IG9uZSB0d28gdGhyZWUgZm91cgorCitXaXRoIHB1c2hxY21kKCkgaXQgZWNob2Vz IHRoZSB2YXJpYWJsZSBuYW1lcyBsaXRlcmFsbHk7IHdpdGggcHVzaGNtZCgpIGl0IAorZWNob2Vz IGVtcHR5IGxpbmVzLiAgU2luY2UgRUxTRSwgd2hlbiBpdHMgYXJndW1lbnQgaXMgYSBibG9jaywg ZGlzcGF0Y2hlcwordG8gdGhlIGltbWVkaWF0ZS1tYWNybyBoYW5kbGVyLCBpdCBzZWVtcyB3ZSBo YXZlIHVuaWZpZWQgdGhlIHR3byBwcm9ibGVtcywKK3NvIGZpeGluZyBvbmUgc2hvdWxkIGZpeCB0 aGUgb3RoZXIuCisKK1RoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZGVmaW5lIGEgbmV3IHRlbXBvcmFy eSBtYWNybyBhbmQgdGhlbiBjYWxsIGRvZG8oKSB0bworZXhlY3V0ZSBpdC4gIEJ1dCBpZiB0aGUg ZGVmaW5pdGlvbiBjb250YWlucyBtYWNybyBhcmd1bWVudHMsIHdlIGhhdmUgYWRkZWQgYQorbmV3 IGxldmVsIG9mIG1hY3JvIGludm9jYXRpb24sIHRodXMgd2lwaW5nIG91dCB0aGUgY3VycmVudCBs ZXZlbCBvZiBhcmdzLgorVGhlIGN1cmUgaXMgdG8gZXhwYW5kIHRoZSB2YXJpYWJsZXMgaW4gdGhl IGltbWVkaWF0ZSBtYWNybyBpbiB0aGUgY3VycmVudAorY29udGV4dCwgYmVmb3JlIGV4ZWN1dGlu ZyBpdC4gIFRoaXMgbWVhbnMgc2ltcGx5IGNoYW5naW5nIHRoZSBjbXR4dCgpIGNhbGwKK3RoYXQg cmVhZHMgdGhlIGltbWVkaWF0ZSBtYWNybyB0byBzcGVjaWZ5IHh4c3RpbmcgYXMgaXRzIHByb2Nl c3NpbmcKK2Z1bmN0aW9uLCByYXRoZXIgdGhhbiBOVUxMLCB3aGljaCBpcyB1c2VkIGZvciByZWFs IG1hY3JvcyB0byBkZWZlciB0aGVpcgorYXJndW1lbnQgZXZhbHVhdGlvbiB1bnRpbCBhZnRlciB0 aGUgbWFjcm8gZW50ZXJlZC4gIGNrdXVzci5jLCAxMSBBdWcgMjAwNS4KKworQWRkZWQgYSBuZXcg bWFrZWZpbGUgdGFyZ2V0LCBtYWNvc3gxMC40LCBmb3IgTWFjIE9TIFggMTAuNC4gIFRoaXMgb25l IHVzZXMKK2FuIHVuZG9jdW1lbnRlZCB0cmljayB0byBnZXQgdGhlIG90aGVyd2lzZSB1bmF2YWls YWJsZS1leGNlcHQtYnktY2xpY2tpbmcKK01hYyBPUyBYIHZlcnNpb24gbnVtYmVyIChpbiB0aGlz IGNhc2UgMTAuNC4yKSBhbmQgc3R1ZmYgaXQgaW50byB0aGUgSEVSQUxECitzdHJpbmcuICBtYWtl ZmlsZSwgMTEgQXVnIDIwMDUuCisKK0J1aWx0IE9LIG9uIFNvbGFyaXMgOSwgU29sYXJpcyAxMCAo d2l0aCBhIGZldyBpbXBsaWNpdCBkZWNsYXJhdGlvbiB3YXJuaW5ncworaW4gY2t1dXN4LmMpLCBN YWMgT1MgWCAxMC40LjIgKHdpdGggc29tZSB3YXJuaW5ncyBpbiBja2NuZXQuYyBhbmQgY2tjZnRw LmMpLAorTWFjIE9TIFggMTAuMy45IChhbHNvIHVzaW5nIHRoZSBtYWNvczEwLjQgZW50cnksIHdo aWNoIGdldHMgdGhlIHJpZ2h0Cit2ZXJzaW9uIG51bWJlciwgYW5kIGdldHMgbm8gd2FybmluZ3Mg YXQgYWxsKSwgUkggRW50ZXJwcmlzZSBMaW51eCBBUzQgb24gQU1ECit4ODZfNjQsIFRydTY0IFVu aXggNC4wRiwgU0NPIFVuaXhXYXJlIDcuMS40CisKK0ZvciBkb2NzIGFuZC9vciBzY3JpcHRsaWI6 ICBVbml4IEMtS2VybWl0IGNhbiBiZSBhIHN0ZGluL291dCBmaWx0ZXIuICBUaGUKK3RyaWNrIGlz IHRvIHVzZSB0aGUgQVNLLCBBU0tRLCBvciBHRVRDIGNvbW1hbmQgZm9yIGlucHV0LCBzcGVjaWZ5 aW5nIG5vCitwcm9tcHQsIGFuZCBFQ0hPIG9yIFhFQ0hPIGZvciBvdXRwdXQsIGUuZy46CisKK3do aWxlIHRydWUgeworICAgIGFzayBsaW5lCisgICAgaWYgZmFpbCBleGl0IDAKKyAgICBlY2hvIFxm cmV2ZXJzZShcbShsaW5lKSkKK30KK2V4aXQgMAorCitGT1BFTiBkaWRuJ3QgZG8gYW55dGhpbmcg d2l0aCB0aGUgY2hhbm5lbCBudW1iZXIgaWYgdGhlIG9wZW4gZmFpbGVkLCBzbyBhbnkKK3N1YnNl cXVlbnQgY29tbWFuZCB0aGF0IHRyaWVkIHRvIHJlZmVyZW5jZSBpdCB3b3VsZCBnZXQgYSBwYXJz ZSBlcnJvciBpdCB3YXMKK3VuZGVmaW5lZCBvciBub24tbnVtZXJpYywgbm90IHZlcnkgaGVscGZ1 bC4gIENoYW5nZWQgRk9QRU4gdG8gc2V0IHRoZQorY2hhbm5lbCBudW1iZXIgdG8gLTEgaWYgdGhl IGZpbGUgY2FuJ3QgYmUgb3BlbmVkLiAgTm93IHN1YnNlcXVlbnQgb3BlcmF0aW9ucworb24gdGhl IGNoYW5uZWwgZmFpbCB3aXRoICJDaGFubmVsIC0xOiBGaWxlIG5vdCBvcGVuIi4gIEkgYWxzbyBh ZGRlZCB0d28KK21hZ2ljIGNoYW5uZWwgbnVtYmVyczogLTggbWVhbnMgdGhhdCBhbnkgRklMRSBj b21tYW5kIChiZXNpZGVzIE9QRU4gYW5kCitTVEFUVVMpIG9uIHRoYXQgY2hhbm5lbCBpcyBhIG5v b3AgdGhhdCBzdWNjZWVkcyBzaWxlbnRseTsgLTkgaXMgYSBub29wIHRoYXQKK2ZhaWxzIHNpbGVu dGx5LiAgU28gbm93IGl0J3MgcG9zc2libGUgdG8gc2ltcGx5IHNldCBhIGNoYW5uZWwgbnVtYmVy IHRvIG9uZQorb2YgdGhlc2UgdmFsdWVzIHRvIGRpc2FibGUgaS9vIHRvIGNlcnRhaW4gZmlsZSB3 aXRob3V0IGdldHRpbmcgbG90cyBvZiBlcnJvcgorbWVzc2FnZXMuICBkb2ZpbGUoKTogY2t1dXM3 LmMsIDEyIEF1ZyAyMDA1LgorCitBZGRlZCBhdXRvbWF0aWMgaGVyYWxkIGNvbnN0cnVjdGlvbiBm b3IgVW5peFdhcmUgNy4gIG1ha2VmaWxlLCAxMiBBdWcgMjAwNS4KKworVW5peCBpc2RpcigpIG5l dmVyIGFsbG93ZWQgZm9yIGFyZ3VtZW50cyB0aGF0IHN0YXJ0ZWQgd2l0aCB0aWxkZSwgc28gZ2F2 ZQoraW5jb3JyZWN0IHJlc3VsdHMgZm9yIH4vdG1wLyBvciB+ZmRjLiAgVGhlIHByb2JsZW0gd2Fz IG1haW5seSBpbnZpc2libGUKK3NpbmNlIG1vc3QgY29tbWFuZHMgdGhhdCBwYXJzZWQgZmlsZSBv ciBkaXJlY3RvcnkgbmFtZXMgdXNlZCBjbWlmaSgpLCBjbWRpcigpLAorZXRjLCB3aGljaCBkaWQg dGhlIGNvbnZlcnNpb25zIHRoZW1zZWx2ZXMuICBCdXQgSUYgRElSRUNUT1JZIHdhcyBhbiBleGNl cHRpb24sCitzaW5jZSBpdHMgb3BlcmFuZCBoYWQgdG8gYmUgdHJlYXRlZCBhcyBqdXN0IHRleHQs IGFuZCB0aGVuIHRlc3RlZCBhZnRlciBpdAord2FzIHBhcnNlZC4gIGNrdWZpby5jLCAxMyBBdWcg MjAwNS4KKworRml4ZWQgdGhlIGZvbGxvd2luZzoKKyJja3V1c3guYyIsIGxpbmUgODk1OTogd2Fy bmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IGNrZ2V0cGVlcgorImNrdWZpby5j IiwgbGluZSAxODY5OiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogdHR3 YWl0CisiY2t1ZmlvLmMiLCBsaW5lIDI5NDE6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRl Y2xhcmF0aW9uOiBtbG9vaworImNrdWZpby5jIiwgbGluZSAyOTQzOiB3YXJuaW5nOiBpbXBsaWNp dCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogZG9kbworImNrdWZpby5jIiwgbGluZSAyOTQ0OiB3YXJu aW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjogcGFyc2VyCisiY2tjZnRwLmMiLCBs aW5lIDI2MjU6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiBkZWx0YTJz ZWMKKyJja2NmdHAuYyIsIGxpbmUgNDA3MTogd2FybmluZzogbm8gZXhwbGljaXQgdHlwZSBnaXZl biBmb3IgcGFyYW1ldGVyOiBwcm0KKyJja2NmdHAuYyIsIGxpbmUgODM4OTogd2FybmluZzogbm8g ZXhwbGljaXQgdHlwZSBnaXZlbiBmb3IgcGFyYW1ldGVyOiBicmllZgorY2t1dXN4LmMsIGNrdWZp by5jLCBja2NmdHAuYywgY2t1Y21kLmguICAxMyBBdWcgMjAwNS4KKworVW5idWZmZXJlZCBzdGRv dXQgY29kZSBoYXMgbmV2ZXIgd29ya2VkIGJlY2F1c2UgdGhlIHNldGJ1ZihzdGRvdXQsTlVMTCkg Y2FsbAoraGFzIHRvIG9jY3VyIGJlZm9yZSB0aGUgc3Rkb3V0IGhhcyBiZWVuIHVzZWQuICBUaGUg cmVhc29uIGl0J3MgbmVlZGVkIGlzCit0aGF0IHNvbWUgS2VybWl0IGNvZGUgd3JpdGVzIHRvIHN0 ZGVyciAod2hpY2ggaXMgdW5idWZmZXJlZCkgYW5kIG90aGVyIGNvZGUKK3dyaXRlcyB0byBzdGRv dXQsIGFuZCB0aGVyZWZvcmUgdHlwZXNjcmlwdHMgY2FuIGNvbWUgb3V0IGp1bWJsZWQuICBSb2Jl cnQKK1NpbW1vbnMgPHJvYmVydGxzQG5vcnRlbC5jb20+IHByb3ZpZGVkIHRoZSBuZWVkZWQgY2x1 ZSB3aGVuIGhlIGluc2lzdGVkIGl0Cit3b3JrZWQgb25seSB3aGVuIGV4ZWN1dGVkIGF0IHRoZSB2 ZXJ5IGJlZ2lubmluZyBvZiBtYWluKCkuICBTbyBJIG1vdmVkIHRoZQorY29kZSB0byB0aGF0IHNw b3QuICBCdXQgc2luY2Ugbm93IHdlIGFsc28gd2FudCB0byBtYWtlIHVuYnVmZmVyZWQgYSBydW50 aW1lCisoY29tbWFuZC1saW5lKSBvcHRpb24sIEkgaGFkIHRvIGRvIGEgY2x1bmt5IGJ5LWhhbmQg cHJlLXByZXNjYW4gaW5saW5lIGluCittYWluKCkgdG8gbG9vayB0aHJ1IGFyZ3ZbXSwgZXZlbiBi ZWZvcmUgcHJlc2NhbigpIHdhcyBjYWxsZWQuICBja2NtYWkuYywKK2NrdXRpby5jLCBja3V1c3ku YywgMTMgQXVnIDIwMDUuICAoTm93IHRoYXQgdGhpcyB3b3JrcywgaXQgbWlnaHQgYmUgYSBnb29k CitpZGVhIHRvIHJlbW92ZSBhbGwgdXNlIG9mIHN0ZGVyciBmcm9tIEtlcm1pdC4pCisKK01hbmFn ZWQsIGFmdGVyIHNvbWUgZmluYWdsaW5nLCB0byBidWlsZCBhIDY0LWJpdCB2ZXJzaW9uIG9uIFNv bGFyaXMgMTAgYXQKK1V0YWggTWF0aCB3aXRoIFN1biBjYy4gIChDYW4ndCBtYWtlIGFueSBnY2Mg YnVpbGRzIGF0IGFsbCwgMzItIG9yIDY0LWJpdCwKK3RoZXkgYWxsIGJsb3cgdXAgaW4gPHN5cy9z aWdpbmZvLmg+LikgIE5ldyB0YXJnZXQ6IHNvbGFyaXMxMF82NC4gIG1ha2VmaWxlLAorMTUgQXVn IDIwMDUuCisKK1RoZSA2NC1iaXQgU29sYXJpcyAxMCB2ZXJzaW9uIGNvbXBpbGVzIGFuZCBsaW5r cyBPSyBhbmQgdHJhbnNmZXJzIGZpbGVzIGluCityZW1vdGUgbW9kZS4gIEl0IGNhbiBtYWtlIEZU UCBjb25uZWN0aW9ucyBhbmQgdXNlIHRoZW0sIGJ1dCBUZWxuZXQgY29ubmVjdGlvbnMKK2Fsd2F5 cyBmYWlsIHdpdGggIm5ldHdvcmsgdW5yZWFjaGFibGUiLiAgVGhpcyBpcyB3aXRoIGFsbCBkZWZh dWx0IGxpYnMgYW5kCitpbmNsdWRlIGZpbGVzLiAgTmVsc29uIGhhcyBhIHNlcGFyYXRlIHNldCBp biAvdXNyL2xvY2FsLCB3aGljaCBoZSByZWZlcmVuY2VzCitleHBsaWNpdGx5IGluIGFsbCBoaXMg NjQtYml0IGJ1aWxkcywgYnV0IHVzaW5nIHRoZXNlIG1ha2VzIG5vIGRpZmZlcmVuY2UuCitTb21l IGRhdGEgdHlwZSBpcyB3cm9uZyBpbiBja2NuZXQuYy4gIEJ1dCB0ZWxuZXQgd29ya3MgZmluZSBp biA2NC1iaXQgTGludXgKK2FuZCBUcnU2NCBidWlsZHMuICBEZWJ1ZyBsb2dzIHRyYWNlIHRoZSBk aWZmZXJlbmNlIHRvIG5ldG9wZW4oKSAob2YgY291cnNlKSwKK3RoZSBzcG90IHdoZXJlIHdlIHRl c3QgdGhlIHJlc3VsdHMgb2YgaW5ldF9hZGRyKCksIHdoaWNoIGlzIGFscmVhZHkgbWFya2VkCitz dXNwaWNpb3VzIGZvciA2NC1iaXQgYnVpbGRzLiAgSXQgc2VlbXMgdGhhdCBpbmV0X2FkZHIoKSBp cyBvZiB0eXBlIGluX2FkZHJfdCwKK3doaWNoIGluIHR1cm4gaXMgdV9pbnQzMiwgaS5lLiBhbiB1 bnNpZ25lZCAzMi1iaXQgaW50LiAgWWV0IHRoZSBtYW4gcGFnZSBzYXlzCit0aGF0IGZhaWx1cmUg aXMgaW5kaWNhdGVkIGJ5IHJldHVybmluZyAtMS4gIEkgZ3Vlc3MgdGhpcyBkb2Vzbid0IG1hdHRl ciBpbgorMzItYml0IGJ1aWxkcywgYnV0IGluIHRoZSA2NC1iaXQgd29ybGQsIHRoZSB0ZXN0IGZv ciBmYWlsdXJlIGRpZG4ndCB3b3JrCityaWdodC4gIEkgbWFkZSBhIFNvbGFyaXMtc3BlY2lmaWMg d29ya2Fyb3VuZCwgYW5kIGNoZWNrZWQgdGhhdCBpdCB3b3JrcyBpbgorYm90aCAzMi1iaXQgYW5k IDY0LWJ1aWxkcy4gIEkgcmVhbGx5IGhhdGUgdHlwZWRlZnMuICBja2NuZXQuYywgMTUgQXVnIDIw MDUuCisKK0NoYW5nZWQgdGhlIHBsYWluLXRleHQgdmVyc2lvbiAoYXMgb3Bwb3NlZCB0byB0aGUg cG9wdXAgb3IgR1VJIHZlcnNpb24gLSB0aGUKK0dVSSB2ZXJzaW9uLCBhdCBsZWFzdCwgYWxyZWFk eSBkb2VzIHRoaXMpIG9mIEFTS1EgdG8gZWNobyBrZXlzdHJva2VzCithc3Rlcmlza3MgcmF0aGVy IHRoYW4gc2ltcGx5IG5vdCBlY2hvIGFueXRoaW5nLCBzbyBpdCdzIGVhc2llciB0byBzZWUgd2hh dAoreW91J3JlIGRvaW5nLCB0aGUgZWZmZWN0cyBvZiBlZGl0aW5nLCBldGMuICBFeHBlcmltZW50 YWw7IGZvciBub3csIHRoZXJlJ3MKK25vIHdheSB0byBkaXNhYmxlIHRoaXMuICBOb3Qgc3VyZSBp ZiB0aGVyZSBuZWVkcyB0byBiZS4gIEFueXdheSwgdG8gZ2V0IHRoaXMKK3dvcmtpbmcgcmVxdWly ZWQgYSBmYWlyIGFtb3VudCBvZiBjbGVhbmluZyB1cCBvZiBndHdvcmQoKSwgd2hpY2ggd2FzIGVj aG9pbmcKK2RpZmZlcmVudCB3YXlzIGluIGRpZmZlcmVudCBwbGFjZXMuICBja3V1czYuYywgY2t1 Y21kLmMsIDE1IEF1ZyAyMDA1LgorCitBZGRlZCBhIHNvbGFyaXM5XzY0IHRhcmdldCBmb3IgYnVp bGRpbmcgYSA2NC1iaXQgdmVyc2lvbiBvbiBTb2xhcmlzIDkgd2l0aAorU3VuIGNjLiAgVmVyaWZp ZWQsIHVzaW5nIHRoZSBESVIgY29tbWFuZCBhbmQgXGZzaXplKCkgZnVuY3Rpb24gb24gYSA0LjRH QgorZmlsZSwgdGhhdCB0aGUgU29sYXJpcyA2NC1iaXQgdmVyc2lvbiBvZiBLZXJtaXQgZ2V0cyB0 aGUgc2l6ZSBjb3JyZWN0bHksIGFuZAordGhhdCBpdCBjYW4gY29weSBzdWNoIGEgZmlsZSAodGh1 cyBpdHMgZm9wZW4vZnJlYWQvZndyaXRlL2ZjbG9zZSBpbnRlcmZhY2UKK3dvcmtzIHJpZ2h0KS4g IEluaXRpYXRlZCBhIGxhcmdlLWZpbGUgdHJhbnNmZXIgYmV0d2VlbiBoZXJlIGFuZCBVdGFoIG92 ZXIKK1NTSCBhbmQgdmVyaWZpZWQgdGhhdCBpdCBwdXRzIHRoZSBjb3JyZWN0IGZpbGUgc2l6ZSBp biB0aGUgQSBwYWNrZXQgd2hlbgorc2VuZGluZzsgdGhlIHJpZ2h0IHF1YW50aXRpZXMgYXJlIHNo b3duIG9uIHRoZSBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgKGZpbGUKK3NpemUgQ1BTLCBwZXJjZW50 IGRvbmUsIGV0YykuICBCdXQgZXZlbiBhdCA1TWIvc2VjLCBpdCB0YWtlcyBhIGdvb2Qgd2hpbGUg dG8KK3RyYW5zZmVyIDQuNEdCLCBtb3JlIHRoYW4gMiBob3VycyAobm90IHN0cmVhbWluZzsgMzAg d2luZG93IHNsb3RzLCA0SworcGFja2V0cywgbWF5YmUgaXQgd291bGQgZ28gZmFzdGVyIHdpdGgg c3RyZWFtaW5nKS4uLiAgQWZ0ZXIgYW4gaG91ciBvciBzbywKK2l0IGZpbGxlZCB1cCB0aGUgcGFy dGl0aW9uIGFuZCBnYXZlIHVwIChncmFjZWZ1bGx5KSBiZWZvcmUgaXQgcmVhY2hlZCB0aGUKKzJH QiBmcm9udGllciAoZHJhaW5lZCBpdHMgcGVuZGluZyBwYWNrZXRzLCBjbG9zZWQgdGhlIHBhcnRp YWwgZmlsZSkuCitSZXN0YXJ0ZWQgYXQgMTI6NTQsIHRoaXMgdGltZSB3aXRoIHN0cmVhbWluZyBh bmQgOEsgcGFja2V0cyAodGhlIHNwZWVkCit3YXNuJ3Qgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQp LiAgVGhpcyB0aW1lIGl0IHRyYW5zZmVycmVkIDk1JSBvZiB0aGUgZmlsZQorKDQxODc2NjAyODgg Ynl0ZXMpIGJlZm9yZSBmYWlsaW5nIGJlY2F1c2UgdGhlIGRpc2sgZmlsbGVkIHVwLiAgV2VudCB0 byBVdGFoCithbmQgc3RhcnRlZCBhIHRyYW5zZmVyIGJldHdlZW4gdHdvIFNvbGFyaXMgMTAvU3Bh cmMgaG9zdHM7IHRoaXMgZ29lcyBhYm91dCA4Cit0aW1lcyBmYXN0ZXIuICBUaGUgdHJhbnNmZXIg Y29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAxN200MXMuICBBbGwgZmllbGRzCitpbiB0aGUg Zi50LiBkaXNwbGF5IGxvb2tlZCByaWdodCB0aGUgd2hvbGUgdGltZS4gIFRoZW4gSSB2ZXJpZmll ZCB2YXJpb3VzCitvdGhlciA2NC1iaXQgY29tYmluYXRpb25zIHRyYW5zZmVycmluZyB0aGUgc2Ft ZSA0LjRHQiBmaWxlOgorCisgICAgICAgIFRvLi4uLi4uLi4uLi4uLi4uLgorICBGcm9tICBTb2wg IEFtZCAgaTY0ICBUcnUgICAgICAKKyAgU29sICAgT0sgICBPSyAgIE9LICAgT0sgICAgICBTb2wg PSBTb2xhcmlzIDEwIC8gU3BhcmMKKyAgQW1kICAgT0sgICAgICAgICAgICAgICAgICAgICBBbWQg PSBBTUQgeDg2XzY0IFJIIEVudGVycHJpc2UgTGludXggQVM0CisgIGk2NCAgIE9LICAgICAgICAg ICAgICAgICAgICAgaTY0ID0gSW50ZWwgSUE2NCwgUkggMi4xQVMKKyAgVHJ1ICAgICAgICAgICAg ICAgICAgICAgICAgICBUcnUgPSBUcnU2NCBVbml4IDQuMEYgQWxwaGEKKworKFRoZSBvdGhlciBj b21iaW5hdGlvbnMgYXJlIGRpZmZpY3VsdCB0byB0ZXN0IGZvciBsb2dpc3RpY2FsIHJlYXNvbnMu KQorCitUcmllZCBzZW5kaW5nIHRoZSBzYW1lIGxvbmcgZmlsZSB3aXRoIEtlcm1pdCdzIEZUUCBj bGllbnQuICBJdCBjaHVnZ2VkIGFsb25nCitmb3IgYSB3aGlsZSB1bnRpbCBJIHN0b3BwZWQgaXQ7 IGl0IHdvdWxkIGhhdmUgdGFrZW4gaG91cnMgdG8gY29tcGxldGUuCitUaGVyZSBpcyBubyBpbmRp Y2F0aW9uIHRoYXQgaXQgd291bGRuJ3QgaGF2ZSB3b3JrZWQsIGFzc3VtaW5nIHRoZSBGVFAgc2Vy dmVyCitjb3VsZCBhbHNvIGhhbmRsZSBsb25nIGZpbGVzLCB3aGljaCB3aG8ga25vd3MuICBBbnl3 YXksIEtlcm1pdCBzaG93ZWQgYWxsCit0aGUgcmlnaHQgZGF0YSBvbiB0aGUgZGlzcGxheSBzY3Jl ZW4uICAxNyBBdWcgMjAwNS4KKworT24gQU1EIHg4Nl82NCBhbmQgSUE2NCBuYXRpdmUgNjQtYml0 IExpbnV4IGJ1aWxkcywgdGhlIHB0eSByb3V0aW5lcyBkaWQgbm90Cit3b3JrIGF0IGFsbC4gIHB0 c25hbWUoKSBkdW1wZWQgY29yZS4gIElmIEkgY29tbWVudGVkIG91dCBwdHNuYW1lKCksIHRoZW4g dGhlCituZXh0IHRoaW5nIGR1bXBlZCBjb3JlLiAgVGhlIHNhbWUgY29kZSB3b3JrcyBvbiB0aGUg b3RoZXIgNjQtYml0IGJ1aWxkcy4KK1Bva2luZyBhcm91bmQsIEkgc2VlIHRoYXQgdGhpcyB2ZXJz aW9uIG9mIExpbnV4IGhhcyBhbiBvcGVucHR5KCkgZnVuY3Rpb24sCit3aGljaCBJIGNvdWxkIHRy eSB1c2luZyBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IEFQSSAtLSBncmFudHB0eSgpLCBldGMuICBU aGVuCitJIHNlZSB0aGF0IG9wZW5wdHkoKSBpcyBhbHJlYWR5IGNvZGVkIGludG8gS2VybWl0J3Mg cHR5IG1vZHVsZSwKK2NvbmRpdGlvbmFsaXplZCB1bmRlciBIQVZFX09QRU5QVFksIHdoaWNoIGhh cyBuZXZlciBiZWZvcmUgYmVlbiBkZWZpbmVkIGZvcgorYW55IGJ1aWxkLiAgSSBhZGRlZCBhIHRl c3QgdG8gdGhlIG1ha2VmaWxlIGxpbnV4IHRhcmdldCAobG9vayBmb3IgdGhlCitvcGVucHR5KCkg cHJvdG90eXBlIGluIDxwdHkuaD4sIGlmIGZvdW5kIGRlZmluZSBIQVZFX09QRU5QVFkgYXMgYSBD RkxBRyBhbmQKK2Fsc28gYWRkIC1sdXRpbCB0byBMTktGTEFHUykuICBXb3JrcyBmaW5lIG9uIHRo ZSBwcm9ibGVtIGJ1aWxkcywgYW5kIGFsc28KK29uIHByZXZpb3VzbHkgd29ya2luZyAzMi1iaXQg YnVpbGRzLiAgbWFrZWZpbGUsIDE3IEF1ZyAyMDA1LgorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgQVNL USBlY2hvIGFzdGVyaXNrcyBjb2RlLCB3aGljaCBtYWRlIHRoZSBWTVMgdmVyc2lvbiBvZgorQy1L ZXJtaXQgYWx3YXlzIGVjaG8gYXN0ZXJpc2tzLiAgVHVybnMgb3V0IHRoYXQgc29tZSBjb2RlIGlu IHRoZSBtYWluIHBhcnNlCitsb29wIHRvIHJlc2V0IGNvbW1hbmQtc3BlY2lmaWMgZmxhZ3Mgd2Fz IGluIHRoZSB3cm9uZyBwbGFjZSwgd2hpY2ggaGFkIG90aGVyCitlZmZlY3RzIHRvbywgZm9yIGV4 YW1wbGUgQVNLUSB0ZW1wb3JhcmlseSB0dXJucyBvZmYgZGVidWcgbG9nZ2luZyBhcyBhCitzZWN1 cml0eSBtZWFzdXJlLCBidXQgdGhlIGNvZGUgdG8gdHVybiBpdCBiYWNrIG9uIHdhcyBza2lwcGVk IGluIG1vc3QgY2FzZXMuCitTb21lIG90aGVyIHNpZGUgZWZmZWN0cyByZWxhdGVkIHRvIHRoZSBE SVJFQ1RPUlkgYW5kIENEIGNvbW1hbmRzIG1pZ2h0IGhhdmUKK2JlZW4gcG9zc2libGUgYnV0IEkg aGF2ZW4ndCBzZWVuIHRoZW0uICBja3V1c1s1Nl0uYywgMjMgQXVnIDIwMDUuCisKK1Byb2JsZW0g cmVwb3J0ZWQgd2hlbiBzZW5kaW5nIGEgZmlsZSB0byBWTVMgd2hlbiB0aGUgbmFtZSBpbiB0aGUg RiBwYWNrZXQKK3N0YXJ0cyB3aXRoIGEgZGV2aWNlIHNwZWNpZmljYXRpb24gYW5kIGRvZXMgbm90 IGluY2x1ZGUgYSBkaXJlY3RvcnkgZmllbGQsCithbmQgUEFUSE5BTUVTIGFyZSBSRUxBVElWRS4g IEV4YW1wbGU6IGRzazpmb28uYmFyIGJlY29tZXMgZl9vby5iYXIuICBUaGUKK2NvZGUgYXNzdW1l cyB0aGF0IGlmIHRoZXJlIGlzIGEgZGV2aWNlIGZpZWxkLCBpdCBpcyBmb2xsb3dlZCBieSBhIGRp cmVjdG9yeQorZmllbGQsIGFuZCBpdCBpbnNlcnRzIGEgZG90IGFmdGVyIHRoZSAnWycsIHdoaWNo IGluIHRoaXMgY2FzZSBpcyBub3QgdGhlcmUuCitMYXRlciB0aGUgZG90IGJlY29tZXMgJ18nIGJl Y2F1c2Ugb2YgdGhlIG9ubHktb25lLWRvdCBydWxlLiAgU29sdXRpb246IG9ubHkKK2luc2VydCB0 aGUgZG90IGlmIHRoZXJlIHJlYWxseSBpcyBhbiBvcGVuaW5nIGJyYWNrZXQuICBuenJ0b2woKTog Y2t2ZmlvLmMsCisyMyBBdWcgMjAwNS4KKworQSByZXBvcnQgb24gdGhlIG5ld3Nncm91cCBjb21w bGFpbnMgdGhhdCBDLUtlcm1pdCBhbmQgSzk1IHNlcnZlcnMgd2VyZQorc2VuZGluZyBSRU1PVEUg RElSIGxpc3RpbmdzIHdpdGggb25seSAjSiBsaW5lIHRlcm1pbmF0b3JzLCByYXRoZXIgdGhhbiAj TSNKLgorWWV0IGFsbCB0aGUgb3RoZXIgUkVNT1RFIHh4eCByZXNwb25zZXMgYXJyaXZlZCB3aXRo ICNNI0ouICBzbmRkaXIoKSB3YXMKK25lZ2xlY3RpbmcgdG8gc3dpdGNoIHRvIHRleHQgbW9kZS4g IGNrY2Zucy5jLCAyNiBBdWcgMjAwNS4KKworQmFjayB0byBsb25nIGZpbGVzLiAgV2hhdCBoYXBw ZW5zIGlmIDMyLWJpdCBLZXJtaXQgaXMgc2VudCBhIGxvbmcgZmlsZT8KK0l0IGdldHMgYW4gQS1w YWNrZXQgdGhhdCBsb29rcyBsaWtlIHRoaXM6CisKKyAgXkFfIkEuIlUxIiJCOCMxMjAwNTA4MTUg MTg6Mjg6MDMhJzQyOTIwNjQxKjQzOTUwNzM1MzYsIzc3NS0hN0AgKUNQCisKK1RoZSAzMi1iaXQg cmVjZWl2ZXIgcmVhY3RzIGxpa2Ugc286CisKKyAgZ2F0dHIgbGVuZ3RoWzQzOTUwNzM1MzZdPTEw MDEwNjI0MAorCit0aGUgZmlyc3QgbnVtYmVyIGJlaW5nIHRoZSBzdHJpbmcgZnJvbSB0aGUgQS1w YWNrZXQsIHRoZSBzZWNvbmQgYmVpbmcgdGhlCit2YWx1ZSBvZiB0aGUgbG9uZyBpbnQgaXQgd2Fz IGNvbnZlcnRlZCB0byBieSBhdG9sKCkuICBDbGVhcmx5IG5vdCBlcXVhbCBpbgordGhpcyBjYXNl LiAgV2hlbiB0aGlzIGhhcHBlbnMgS2VybWl0IHNob3VsZCByZWplY3QgdGhlIGZpbGUgaW5zdGVh ZCBvZgorYWNjZXB0aW5nIGl0IGFuZCB0aGVuIGdldHRpbmcgYSBob3JyaWJsZSBlcnJvciBhIGxv bmcgdGltZSBsYXRlci4gIEFkZGVkCitjb2RlIHRvIGdhdHRyKCkgdG8gY29udmVydCB0aGUgcmVz dWx0IG9mIGF0b2woKSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBjb21wYXJlCitpdCB3aXRoIHRoZSBv cmlnaW5hbCBzdHJpbmc7IGlmIHRoZXkncmUgbm90IGVxdWFsLCByZWplY3QgdGhlIGZpbGUgb24g dGhlCithc3N1bXB0aW9uIHRoYXQgdGhlIG9ubHkgcmVhc29uIHRoaXMgY291bGQgaGFwcGVuIGlz IG92ZXJmbG93LiAgQWxzbyBzb21lCitvdGhlciBjb2RlIGluIGNhc2UgdGhlIHNlbmRlciBzZW5k cyB0aGUgb25seSBMRU5HVEhLIGF0dHJpYnV0ZS4gIE5vdyBmaWxlcword2hvc2UgbGVuZ3RocyBh cmUgdG9vIGJpZyBmb3IgYSBsb25nIGludCBhcmUgcmVqZWN0ZWQgcmlnaHQgYXdheSwgcHJvdmlk ZWQKK3RoZSBzZW5kZXIgc2VuZHMgdGhlIGxlbmd0aCBpbiBhbiBBIHBhY2tldCBhaGVhZCBvZiB0 aGUgZmlsZSBpdHNlbGYuICBJZgordGhpcyBuZXcgY29kZSBzaG91bGQgZXZlciBjYXVzZSBhIHBy b2JsZW0sIGl0IGNhbiBiZSBieXBhc3NlZCB3aXRoIFNFVAorQVRUUklCVVRFIExFTkdUSCBPRkYu ICBja2NmbjMuYywgMjYgQXVnIDIwMDUuCisKK0FzIEkgcmVjYWxsIGZyb20gd2hlbiBJIHdhcyB0 ZXN0aW5nIHRoaXMgYSBmZXcgd2Vla3MgYWdvLCB3aGVuIHRoZSB0b28tYmlnCitsZW5ndGggaXMg bm90IGNhdWdodCBhdCBBLXBhY2tldCB0aW1lLCB0aGUgdHJhbnNmZXIgZmFpbHMgbW9yZSBvciBs ZXNzCitncmFjZWZ1bGx5IHdoZW4gdGhlIGZpcnN0IGF0dGVtcHQgaXMgbWFkZSB0byB3cml0ZSBw YXN0IHRoZSBsaW1pdC4gIEkgd2VudAordG8gZG91YmxlY2hlY2sgdGhpcyBieSBzZW5kaW5nIGEg YmlnIGZpbGUgZnJvbSB0aGUgNjQtYml0IFNvbGFyaXMxMCB2ZXJzaW9uCit0byBhIDMyLWJpdCBN YWMgT1MgWCB2ZXJzaW9uIHRoYXQgZG9lcyBub3QgaGF2ZSB0b2RheSdzIGNvZGUuICBUaGUgTWFj Cit0aGlua3MgdGhlIGluY29taW5nIGZpbGUgaXMgMkdCIGxvbmcgd2hlbiBpdCdzIHJlYWxseSA0 R0IrLiAgQnV0IGluIHRoaXMKK2Nhc2UsIHNvbWV0aGluZyBuZXcgaGFwcGVucyEgIEFsdGhvdWdo IHRoZSBwZXJjZW50IGRvbmUgYW5kIHRyYW5zZmVyIHJhdGUgZ28KK25lZ2F0aXZlLCB0aGUgZmls ZSBrZWVwcyBjb21pbmcuICBJdCB3b3VsZCBzZWVtIHRoYXQgTWFjIE9TIFggbGV0cyB1cyBjcmVh dGUKK2xvbmcgZmlsZXMgd2l0aG91dCB1c2luZyBhbnkgc3BlY2lhbCBBUElzLiAgVGhlIHRyYW5z ZmVyIHJ1bnMgdG8gY29tcGxldGlvbi4KK01hYyBPUyBYIEtlcm1pdCBzYXlzIFNVQ0NFU1MgKGJ1 dCBnZXRzIHRoZSBieXRlIGNvdW50IGFuZCBjcHMgd3JvbmcsIG9mCitjb3Vyc2UpLiAgQnV0IHRo ZW4gYSBTVEFUVVMgY29tbWFuZCBzYXlzIEZBSUxVUkUuICBUaGUgZmlsZSB3YXMsIGhvd2V2ZXIs Cit0cmFuc2ZlcnJlZCBzdWNjZXNzZnVsbHk7IGl0IGlzIGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3Ro IGFuZCBjb21wYXJlcyBieXRlCitmb3IgYnl0ZSB3aXRoIHRoZSBvcmlnaW5hbC4gIFRoaXMgdGVs bHMgbWUgdGhhdCBpbiB0aGUgTWFjIE9TIFggdmVyc2lvbiAtLQorYW5kIGhvdyBtYW55IG90aGVy cyBsaWtlIGl0Pz8/IC0tIHRvZGF5J3MgcmVqZWN0aW9uIGNvZGUgc2hvdWxkIG5vdCBiZQorZW5h YmxlZC4gIE1lYW53aGlsZSBJIHB1dCB0b2RheSdzIG5ldyBjb2RlIGluICNpZm5kZWYgTk9DSEVD S09WRVJGTE9XLi4jZW5kaWYsCithbmQgZGVmaW5lZCB0aGlzIHN5bWJvbCBpbiB0aGUgTWFjIE9T IFggMTAuNCB0YXJnZXQuICBPdmVyIHRpbWUsIEknbGwgaGF2ZQordG8gZmluZCBvdXQgd2hhdCBv dGhlciBwbGF0Zm9ybXMgaGF2ZSB0aGlzIGNoYXJhY3RlcmlzdGljLiAgQW5kIG9mIGNvdXJzZQor SSdsbCBhbHNvIGhhdmUgdG8gZG8gc29tZXRoaW5nIGFib3V0IGZpbGUtdHJhbnNmZXIgZGlzcGxh eSwgc3RhdGlzdGljcywgYW5kCitzdGF0dXMuICBtYWtlZmlsZSwgY2tjZm4zLmMsIDI2IEF1ZyAy MDA1LgorCitGcm9tIG5vdyBvbiBJJ20gZ29pbmcgdG8gYnVtcCB0aGUgRGV2Lnh4IG51bWJlciBl YWNoIHRpbWUgSSB1cGxvYWQgYSBuZXcKK2NrZGFpbHkuICBUaGlzIG9uZSB3aWxsIGJlIERldi4w Mi4gIGNrY2ttYWkuYywgMjYgQXVnIDIwMDUuCisKK0dvdCByaWQgb2YgYWxsIHRoZSBleHRyYW5l b3VzIEZyZWVCU0QgNCBhbmQgNSBidWlsZCB0YXJnZXRzLiAgTm93IHRoZXJlJ3MKK29uZSAoZnJl ZWJzZCkgZm9yIGFsbCBGcmVlQlNEIDQuMSBhbmQgbGF0ZXIuICBtYWtlZmlsZSwgMjcgQXVnIDIw MDUuCisKK01hYyBPUyBYIDEwLjQgKFRpZ2VyKSBpcyBhIDY0LWJpdCBPUy4gIEJ1aWxkaW5nIEMt S2VybWl0IDBuIDEwLjQuMiB3aXRob3V0Cithbnkgc3BlY2lhbCBzd2l0Y2hlcyBzdGlsbGwgZ2l2 ZXMgYSAzMi1iaXQgZXhlY3V0YWJsZS4gIERpdHRvIGJ1aWxkaW5nIHdpdGgKKy1tcG93ZXJwYzY0 LiAgRnVydGhlciBpbnZlc3RpZ2F0aW9uIHR1cm5lZCB1cCBhIHRpcCBzaGVldCBvbiBNeVNRTCB0 aGF0IHNheXMKK3lvdSBoYXZlIHRvIGluY2x1ZGUgYWxsIG9mIHRoZXNlOiAtbXBvd2VycGM2NCAt bWNwdT1HNSAtbXR1bmU9RzUgLWFyY2gKK3BwYzY0LiAgVGhhdCBkaWQgdGhlIHRyaWNrLiAgTmV3 IG1ha2VmaWxlIHRhcmdldDogbWFjb3N4MTAuNF82NC4gIEJ1dCB0aGUKKzEwLjQuMiBzeXN0ZW0g SSB0cmllZCBkaWQgbm90IGhhdmUgNjQtYml0IFtuXWN1cnNlcyBvciByZXNvbHYgbGlicywgc28g dGhpcworYnVpbGQgaGFzIG5vIC1ETk9DVVJTRVMgLUROT19ETlNfU1JWLiAgbWFrZWZpbGUsIDI3 IEF1ZyAyMDA1LgorCitDcmVhdGVkIGEgc3ltYm9sIENLXzY0QklUIHRvIGluZGljYXRlIHRydWUg NjQtYml0IGJ1aWxkcyBhdCBjb21waWxlIHRpbWUuCitBZGRlZCA2NC1iaXQgYW5ub3VuY2VtZW50 IHRvIHRoZSBzdGFydHVwIGhlcmFsZCBhbmQgdGhlIFZFUlNJT04gdGV4dC4KK2NrY2RlYi5oLCBj a3V1c1tyNV0uYywgMjcgQXVnIDIwMDUuCisKK0FkZGVkIGEgYnVpbHQtaW4gdmFyaWFibGUgXHYo Yml0cykgdG8gaW5kaWNhdGUgdGhlIHNpemUgb2YgdGhlIGJ1aWxkCisoMTYsIDMyLCA2NCwgb3Ig d2hhdGV2ZXIgZWxzZSBzaXplb2YoKSBtaWdodCByZXBvcnQpLiAgY2t1dXNyLmgsIGNrdXVzNC5j LAorMjcgQXVnIDIwMDUuCisKK0dvdCByaWQgb2YgYWxsIHRoZSB3YXJuaW5ncyBpbiA2NC1iaXQg TWFjIE9TIFggYWJvdXQgYXJncyB0byBnZXRzb2Nrb3B0KCksCitnZXRzb2NrbmFtZSgpLCBhbmQg Z2V0cGVlcm5hbWUoKSwgYW5kIHRoZSBjb21wYXJpc29ucyBvbiB0aGUgcmV0dXJuIHZhbHVlCitv ZiBpbmV0X2FkZHIoKS4gIGNrY25ldC5bY2hdLCAyNyBBdWcgMjAwNS4KKworTm93IHRvIGNoZWNr IHRoZSBlZmZlY3RzIG9uIG90aGVyIGJ1aWxkcy4uLgorICBMaW51eCBvbiBBTUQ2NDogb2suCisg IExpbnV4IG9uIElBNjQ6IG9rLgorICBMaW51eCBvbiBpMzg2OiBvay4KKyAgTWFjIE9TIFggMTAu My45IDMyLWJpdDogb2suCisgIFNvbGFyaXMgMTAgNjQtYml0OiBvay4KKyAgU29sYXJpcyA5IDMy LWJpdDogb2suCisgIFRydTY0IDQuMEY6IG9rLgorICBGcmVlQlNEIDQuMTE6IG9rLgorICBGcmVl QlNEIDUuNCBpYTY0ICg2NC1iaXQpOiBvay4KKyAgRnJlZUJTRCA1LjQgaTM4NiAoMzItYml0KTog b2suCisKK1RoZSBUcnU2NCA1LjFCIGJ1aWxkIHRvdGFsbHkgYmxldyB1cCBiZWNhdXNlIHRoZXkg aGF2ZSB0aGVpciBvd24gdW5pcXVlCitzb2Nrb3B0L2V0YyBsZW5ndGgtYXJndW1lbnQgZGF0YSB0 eXBlIChpbnQhKSwgc28gSSBoYWQgdG8gcm9sbCBiYWNrIG9uIHVzaW5nCitzb2NrbGVuX3QgZm9y IHRoaXMgaW4gYWxsIDY0LWJpdCBidWlsZHMuICBDaGVja2VkIHRvIG1ha2Ugc3VyZSBpdCBzdGls bAorYnVpbGRzIG9uIFRydTY0IDQuMEYgYWZ0ZXIgdGhpcyBjaGFuZ2UgKGl0IGRvZXMpLiAgY2tj bmV0LmgsIDI3IEF1ZyAyMDA1LgorCitUaGUgSFAtVVggMTFpL2lhNjQgYnVpbGQgY29tZXMgb3V0 IHRvIGJlIDMyLWJpdCBidXQgdGhpbmtzIGl0J3MgNjQtYml0LgorQ0tfNjRCSVQgaXMgc2V0IGJl Y2F1c2UgX19pYTY0IGlzIGRlZmluZWQuICBTbyBob3cgZG8gSSBhY3R1YWxseSBtYWtlIGEKKzY0 LWJpdCBIUC1VWCBidWlsZD8gIEkgdHJpZWQgYWRkaW5nICtERDY0IHRvIENGTEFHUywgYW5kIHRo aXMgZ2VuZXJhdGVzCis2NC1iaXQgb2JqZWN0IGZpbGVzIGJ1dCBsaW5raW5nIGZhaWxzIHRvIGZp bmQgdGhlIG5lZWRlZCA2NC1iaXQgbGlicworKGUuZy4gLWxtKS4gIEZvciBub3cgSSBhZGRlZCBh biBleGNlcHRpb24gZm9yIEhQVVggdG8gdGhlIENLXzY0QklUCitkZWZpbml0aW9uIHNlY3Rpb24u ICBja2NkZWIuaCwgMjcgQXVnIDIwMDUuCisKK1Rvb2sgdGhlIHRpbWUgdG8gdmVyaWZ5IG15IHJl Y29sbGVjdGlvbiBhYm91dCB0aGUgImdyYWNlZnVsIGZhaWx1cmUiIG9uIGEKK3JlZ3VsYXIgUGVu dGl1bSBMaW51eCBzeXN0ZW0gd2hlbiByZWNlaXZpbmcgYSB0b28tYmlnIGZpbGUuLi4gIE9LLCBp dCdzIG5vdAorZXhhY3RseSBncmFjZWZ1bC4gIEl0IGdldHMgYSAiRmlsZSBzaXplIGxpbWl0IGV4 Y2VlZGVkIiBlcnJvcjsgdGhlIG1lc3NhZ2UKK2lzIHByaW50ZWQgaW4gdGhlIG1pZGRsZSBvZiB0 aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5LCBhcHBhcmVudGx5IG5vdCBieQorS2VybWl0LCBhbmQg S2VybWl0IGV4aXRzIGltbWVkaWF0ZWx5LiAgTG9va3MgbGlrZSBhIHRyYXAuLi4gIFl1cC4gICJG aWxlCitzaXplIGxpbWl0IGV4Y2VlZGVkIiBpcyBTSUdYRlNaICgyNSkuICBXaGF0IGhhcHBlbnMg aWYgd2Ugc2V0IGl0IHRvIFNJR19JR04/CitKdXN0IHRoZSByaWdodCB0aGluZzogVGhlIHJlY2Vp dmVyIGdldHMgIkVycm9yIHdyaXRpbmcgZGF0YSIgYXQgMjE0NzQ4MzY0NworYnl0ZXMsIHNlbmRz IEUtcGFja2V0IHRvIHNlbmRlciB3aXRoIHRoaXMgbWVzc2FnZSwgYW5kIHJlY292ZXJzIHdpdGgg dG90YWwKK2dyYWNlIChkcmFpbnMgcGFja2V0IGJ1ZmZlcnMsIHJldHVybnMgdG8gcHJvbXB0KS4g IGNrdXRpby5jLCAyNyBBdWcgMjAwNS4KKworQmFja2VkIG9mZiBmcm9tIHJlamVjdGluZyBhIGZp bGUgYmVjYXVzZSBpdHMgYW5ub3VuY2VkIHNpemUgb3ZlcmZsb3dzIGEKK2xvbmcuICBOb3cgaW5z dGVhZCwgSSBzZXQgdGhlIGZpbGUgc2l6ZSB0byAtMiAoYSBuZWdhdGl2ZSBzaXplIG1lYW5zIHRo ZQorc2l6ZSBpcyB1bmtub3duLCBidXQgd2UgaGF2ZSBhbHdheXMgdXNlZCAtMSBmb3IgdGhpczsg LTIgbWVhbnMgInVua25vd24gYW5kCitwcm9iYWJseSB0b28gYmlnIikuICBJbiB0aGlzIGNhc2Us IHRoZSBmLXQgZGlzcGxheSBzYXlzOgorCisgIEZpbGUgU2l6ZTogUE9TU0lCTFkgRVhDRUVEUyBM T0NBTCBGSUxFIFNJWkUgTElNSVQKKwordGhlbiB0aGUgdXNlciBjYW4gaW50ZXJydXB0IGl0IHdp dGggWCBvciB3aGF0ZXZlciwgb3IgY2FuIGxldCBpdCBydW4gYW5kCitzZWUgaWYgbWF5YmUgKGFz IGluIHRoZSBjYXNlIG9mIE1hYyBPUyBYKSBpdCB3aWxsIGJlIGFjY2VwdGVkIGFueXdheS4gIFRo aXMKK3dheSwgd2Ugc2tpcCBhbGwgdGhlIGJvZ3VzIGNhbGN1bGF0aW9ucyBvZiBwZXJjZW50IGRv bmUsIHRpbWUgcmVtYWluaW5nLCBldGMuCitja2NmbjMuYywgY2t1dXN4LmMsIDI3IEF1ZyAyMDA1 LgorCitEaXNjb3ZlcmVkIHRoYXQgVk1TIEMtS2VybWl0IG9uIEFscGhhIGFuZCBJQTY0IGlzIGEg MzItYml0IGFwcGxpY2F0aW9uOworc2l6ZW9mKGxvbmcpID09IHNpemVvZihjaGFyICopID09IDQu ICBUcmllZCBhZGRpbmcgL1BPSU5URVJfU0laRT02NCB0byBWTVMKK0RFQ0MgYnVpbGRzIG9uIEFs cGhhIGFuZCBJQTY0LCBidXQgdGhlIHJlc3VsdHMgYXJlbid0IGdyZWF0LiAgVG9ucyBvZgord2Fy bmluZ3MgYWJvdXQgcG9pbnRlciBzaXplIG1pc21hdGNoZXMgYmV0d2VlbiBLZXJtaXQgcG9pbnRl cnMgYW5kIFJNUyBvbmVzLAorYW5kIHRoZSBleGVjdXRhYmxlIGRvZXNuJ3QgcnVuLiAgSXQgYXBw ZWFycyB0aGF0IGFjY2VzcyB0byBsb25nIGZpbGVzCit3b3VsZCByZXF1aXJlIGEgbG90IG9mIGhh Y2tpbmcsIHNpbWlsYXIgdG8gd2hhdCdzIG5lZWRlZCBmb3IgMzItYml0IExpbnV4LgorCistLS0g RGV2LjAyOiAyNyBBdWcgMjAwNSAtLS0KKworRnJvbSBKZWZmLCAyOCBBdWcgMjAwNS4KKyAuIEZp eCBTU0ggR0xPQkFMLUtOT1dOLUhPU1RTLUZJTEUgLyBVU0VSLUtOT1dOLUhPU1RTLUZJTEUgcGFy c2luZywgY2t1dXMzLmMuCisgLiBQaWNrIHVwIEs5NVNUQVJURkxBR1MgZnJvbSBlbnZpcm9ubWVu dCwgY2t1dXM0LmMuCisgLiBGaXggc29tZSB0eXBvcyBpbiBjb21tYW5kLWxpbmUgcHJvY2Vzc2lu ZyAoLXEpLCBja3V1czQuYy4KKyAuIEJlIHN1cmUgdG8gc3VwcHJlc3MgaGVyYWxkIGlmIHN0YXJ0 ZWQgd2l0aCAtcSwgY2t1dXM3LmMuCisgLiBGaXggc3NoIGNvbW1hbmQtbGluZSBzd2l0Y2hlcywg Y2t1dXN5LmMuCisKK0VyaWMgU211dHogY29tcGxhaW5lZCB0aGF0IEhUVFAgUE9TVCB3YXMgYWRk aW5nIGFuIGV4dHJhbmVvdXMgYmxhbmsgbGluZSwKK3doaWNoIHByZXZlbnRlZCBoaXMgYXBwbGlj YXRpb24gZnJvbSBzdWNjZXNzZnVsbHkgcG9zdGluZy4gIFJGQyAyNjE2IHN0YXRlcworKGluIFNl Y3Rpb24gNC4xKToKKworICAgSW4gdGhlIGludGVyZXN0IG9mIHJvYnVzdG5lc3MsIHNlcnZlcnMg U0hPVUxEIGlnbm9yZSBhbnkgZW1wdHkKKyAgIGxpbmUocykgcmVjZWl2ZWQgd2hlcmUgYSBSZXF1 ZXN0LUxpbmUgaXMgZXhwZWN0ZWQuIEluIG90aGVyIHdvcmRzLCBpZgorICAgdGhlIHNlcnZlciBp cyByZWFkaW5nIHRoZSBwcm90b2NvbCBzdHJlYW0gYXQgdGhlIGJlZ2lubmluZyBvZiBhCisgICBt ZXNzYWdlIGFuZCByZWNlaXZlcyBhIENSTEYgZmlyc3QsIGl0IHNob3VsZCBpZ25vcmUgdGhlIENS TEYuCisKKyAgIENlcnRhaW4gYnVnZ3kgSFRUUC8xLjAgY2xpZW50IGltcGxlbWVudGF0aW9ucyBn ZW5lcmF0ZSBleHRyYSBDUkxGJ3MKKyAgIGFmdGVyIGEgUE9TVCByZXF1ZXN0LiBUbyByZXN0YXRl IHdoYXQgaXMgZXhwbGljaXRseSBmb3JiaWRkZW4gYnkgdGhlCisgICBCTkYsIGFuIEhUVFAvMS4x IGNsaWVudCBNVVNUIE5PVCBwcmVmYWNlIG9yIGZvbGxvdyBhIHJlcXVlc3Qgd2l0aCBhbgorICAg ZXh0cmEgQ1JMRi4KKworVGhpcyBzZWVtcyBwcmV0dHkgY2xlYXIuICBPbmUgc2VjdGlvbiBvZiBj b2RlIGluIGh0dHBfcG9zdCgpIChqdXN0IGFib3ZlIHRoZQorcG9zdG9wZW46IGxhYmVsKSB3YXMg YXBwZW5kaW5nIGEgQ1JMRiB0byBhIGJ1ZmZlciB3aG9zZSBsYXN0IGFscmVhZHkgd2FzCit0ZXJt aW5hdGVkIGJ5IENSTEYsIGFuZCB0aGVuIGFwcGVuZGVkIGEgc2Vjb25kIENSTEY7IHRodXMgdHdv IGVtcHR5IGxpbmVzLgorSSByZW1vdmVkIHRoZSBzZWNvbmQgb25lLiAgY2tjbmV0LmMsIDI4IEF1 ZyAyMDA1LgorCitJIGxvb2tlZCBpbnRvIHRoZSA2NC1iaXRuZXNzIG9mIE5ldEJTRCwgaXQgc2Vl bXMgdG8gYmUgbGlrZSBMaW51eCBhbmQKK0ZyZWVCU0Qgb24gNjQtYml0IGhhcmR3YXJlLCBpLmUu IHlvdSBqdXN0IGJ1aWxkIGl0IHRoZXJlIGFuZCBpdCB3b3JrcywgYXQKK2xlYXN0IG9uIEFscGhh IGFuZCBBTUQ2NCwgZ29pbmcgYmFjayB0byBOZXRCU0QgMS40IG9yIDEuNS4gIEJ1dCBJIGRvbid0 IGhhdmUKK2FjY2VzcyB0byBhbnkgb2YgdGhlc2UgZm9yIHZlcmlmaWNhdGlvbiBhbmQgZG9jdW1l bnRhdGlvbiBvbiB0aGUgV2ViIGlzCitzY2FudHkuCisKK0NoZWNrZWQgUGV0ZXJFJ3MgY29tcGxh aW50IGFnYWluIG9mIHdhcm5pbmdzIGluIGNrdXRpby5jIGFib3V0IHBhcmFtZXRlcgorbGlzdCBv ZiBnZXRbdWddaWQoKSBhbmQgZ2V0ZVt1Z11pZCgpLiAgV2hlbiBJICJtYWtlIGhwdXgxMTAwbyIg b24gSFAtVVgKKzExLjExIChQQS1SSVNDKSwgdGhlcmUgYXJlIGRlZmluaXRlbHkgbm8gd2Fybmlu Z3MuICBIZSBzYXlzIHRoZSBzYW1lIHRoaW5nCitoYXBwZW5zIG9uIDEwLnh4LCBidXQgSSBkb24n dCBoYXZlIGFjY2VzcyB0byB0aGF0IGFueSBtb3JlLiAgSSBhbHNvIGRpZAorIm1ha2UgaHB1eDEx MDBvIiBvbiBIUC1VWCAxMS4yMyAoMTFpIHYyKSAoUEEtUklTQyksIGFsc28gbm8gd2FybmluZ3Mu CisoRXhjZXB0IGluIGJvdGggY2FzZXMsIGEgd2FybmluZyBhYm91dCBhIGNvbW1lbnQgd2l0aGlu IGEgY29tbWVudCBpbgorL3Vzci9pbmNsdWRlL3N5cy9wdHlpby5oKS4gIE9uIEhQLVVYIDExaSB2 MiBvbiBJdGFuaXVtLCBob3dldmVyLCB0aGVyZSBhcmUKK1RPTlMgb2Ygd2FybmluZ3MsIG1vc3Rs eSBvZiB0aGUgInZhcmlhYmxlIHNldCBidXQgbmV2ZXIgdXNlZCIga2luZC4gIEFsc28KKyJkb2xs YXIgc2lnbiB1c2VkIGluIGlkZW50aWZpZXIiLiAgVHJhY2tpbmcgdGhpcyBsYXN0IG9uZSBkb3du LCBJIHNlZSBpdCdzCitjb21wbGFpbmluZyBhYm91dCBjb2RlIHRoYXQncyBpbiAjaWZkZWZzIGZv ciBvdGhlciBwbGF0Zm9ybXMsIHN1Y2ggYXMKK0Fwb2xsbyBBZWdpcy4gIElzICJhZWdpcyIgZGVm aW5lZCBpbiBIUC1VWCAxMWkgdjIvSUE2ND8gIE5vISAgKEl0IHdvdWxkIHNob3cKK3VwIGluIFNI T1cgRkVBVFVSRVMgaWYgaXQgd2FzLikgIFNvbWUgcGhhc2Ugb2YgdGhlIGNvbXBpbGVyIGlzIGNv bXBsYWluaW5nCithYm91dCBjb2RlIHRoYXQgaXQgc2hvdWxkIGJlIHNraXBwaW5nIChhbmQgdGhh dCwgaW4gZmFjdCwgaXQgKmlzKiBza2lwcGluZworaXQgYmVjYXVzZSB0aGUgYnVpbGQgaXMgc3Vj Y2Vzc2Z1bCkuICBJdCdzIGFzIGlmIGNjIGlzIHJ1bm5pbmcgbGludCBmb3IgbWUKK2J1dCBub3Qg dGVsbGluZyBsaW50IHdoaWNoIG1hY3JvcyBhcmUgZGVmaW5lZCBhbmQgd2hpY2ggYXJlIG5vdC4K KworVmVyaWZpZWQgdGhhdCA2NC1iaXQgbGlua2luZyBmYWlscyBpbiB0aGUgc2FtZSB3YXkgZm9y IEhQLVVYIDExaSB2MiBvbiBib3RoCitJQTY0IGFuZCBQQS1SSVNDLiAgU2VudCBhIHF1ZXJ5IHRv IEhQLgorCitDb21waWxpbmcgY2tjbmV0LmMgYW5kIGNrY2Z0cC5jIGdvdCB0aGUgZmFtaWxpYXIg c29ja29wdC1yZWxhdGVkIHdhcm5pbmdzIG9uCitIUC1VWCAxMWkgdjI7IHR1cm5zIG91dCBpdCBp cyBqdXN0IGxpa2UgVHJ1NjQgVW5peCBpbiB1c2luZyBhbiBpbnQgZm9yIHRoZQorbGVuZ3RoIGFy Z3VtZW50LiAgQWRkZWQgYW5vdGhlciBzcGVjaWFsIGNhc2UgYW5kIHRoZSB3YXJuaW5ncyB3ZW50 IGF3YXkuCitja2NuZXQuaCwgMjggQXVnIDIwMDUuCisKK0FkZGVkIHNvbWUgc3R1ZmYgdG8gU0hP VyBGRUFUVVJFUyB0byBzZWUgd2hhdCBraW5kcyBvZiBtYWNyb3MgYXJlIGV4cG9zZWQKKyhlLmcu IElOVF9NQVgsIExPTkdfTUFYLCBMTE9OR19NQVgsIGV0YykgYW5kIGFsc28gc2hvdyBzaXplb2Yo bG9uZyBsb25nKSBhbmQKK3NpemVvZihvZmZfdCkuICBCdWlsZGluZyB0aGlzIGNvZGUgYWxsIG92 ZXIgdGhlIHBsYWNlIHdpbGwgZ2l2ZSBtZSBhbiBpZGVhCitvZiBob3cgd2lkZXNwcmVhZCB0aGVz ZSBkYXRhIHR5cGVzIGFyZSwgYW5kIHRvIHdoYXQgZXh0ZW50IEkgY2FuIHRlbGwKK3doZXRoZXIg dGhleSBhcmUgYXZhaWxhYmxlIGZyb20gY2x1ZXMgaW4gdGhlIGhlYWRlciBmaWxlcy4gIChBdCBm aXJzdAorZ2xhbmNlLCBpdCBhcHBlYXJzIHRoYXQgSSdtIG5vdCBwaWNraW5nIHVwIDxsaW1pdHMu aD4sIGJ1dCBhZGRpbmcgYW4KKyNpbmNsdWRlIGZvciBpdCBpcyBqdXN0IGFza2luZyBmb3IgdHJv dWJsZS4pICBObyBjb21wbGFpbnRzIGFib3V0IGxvbmcgbG9uZworb3Igb2ZmX3QgZnJvbSBTb2xh cmlzIDkgb3IgcmVjZW50IExpbnV4ZXMuICBja3V1czUuYywgMjggQXVnIDIwMDUuCisKK0ZpeGVk IGEgd2FybmluZyBpbiBIUC1VWCAxMCBhbmQgMTEgc3RlbW1pbmcgZnJvbSBzb21lIG9sZC1zdHls ZSBwcm90b3R5cGVzCitpbiBja3V0aW8uYyBmb3IgZ2V0W3JlXVtndV1pZCgpLiAgY2t1dGlvLmMs IDI5IEF1ZyAyMDA1LgorCitVcGRhdGVkIG1pbml4MyB0YXJnZXQgZnJvbSBBbmR5IFRhbmVuYmF1 bS4gIG1ha2VmaWxlLCAyOSBBdWcgMjAwNS4KKworUGV0ZXJFIGNvbmZpcm1zIHRoYXQgImxvbmcg bG9uZyIgYW5kIG9mZl90IGFyZSBhdmFpbGFibGUgaW4gYWxsIEhQLVVYIDEwIGFuZAorMTEsIGFu ZCBpbiBIUC1VWCA5IG9uIFBBLVJJU0MgYnV0IG5vdCBNb3Rvcm9sYS4gIDMwIEF1ZyAyMDA1Lgor CitHb3QgNjQtYml0IGJ1aWxkcyB0byB3b3JrIG9uIEhQLVVYLiAgQWNjb3JkaW5nIHRvIG15IG5v dGVzLCBKb2huIEJpZ2cgb2YgSFAKK3NhaWQgKGluIDE5OTkpIHRoYXQgSFAtVVggMTAuMzAgYW5k IGxhdGVyIHJlcXVpcmUgUEEtUklTQyAxLjEsIGFuZCBkbyBub3QKK3dvcmsgb24gUEEtUklTQyAx LjAuICBCdXQgaXMgUEEgMS4wIDY0LWJpdCBvciB3aGF0PyAgVG9kYXksIEFsZXggTWNLYWxlIG9m CitIUCBzYWlkICJUaGUgNjQtYml0IGJpbmFyaWVzIHdpbGwgd29yayBvbiBhbGwgbWFjaGluZXMg dGhhdCBoYXZlIHRoZSBzYW1lIG9yCitsYXRlciByZWxlYXNlIG9mIEhQLVVYIChleGNsdWRpbmcg UEEtUklTQyAxLjEgbWFjaGluZXMpIi4gIFN0aWxsIG5lZWQKK2NsYXJpZmljYXRpb24uLi4gIE1h eWJlIGl0J3MgdGhhdCBhbGwgSUE2NCBidWlsZHMgY2FuIGJlIDY0LWJpdCBidXQgSSBuZWVkCitk dWFsIGJ1aWxkcyBmb3IgUEEtUklTQy4gIE1lYW53aGlsZSBJIHN0YXJ0ZWQgdHJhbnNmZXIgb2Yg YSA0R0IrIGZpbGUgZnJvbQorU29sYXJpcyB0byBIUC1VWCAxMWkgYnV0IGl0IGV4Y2VlZGVkIHNv bWUgcXVvdGEgb24gdGhlIEhQIGxvbmcgYmVmb3JlIGl0CithcHByb2FjaGVkIHRoZSAyRyBwb2lu dC4gIEl0IGZhaWxlZCBjbGVhbmx5IGFuZCB1cCB1bnRpbCB0aGVuIGl0IHdhcyB3b3JraW5nCitm aW5lIChudW1iZXJzLCBzdGF0cywgZXRjKS4gIDMwIEF1ZyAyMDA1LgorCitTdXBwb3J0IG9mIGxh cmdlIGZpbGVzIGluIDMyLWJpdCBidWlsZHMgYmVnYW4gaW4gMTAuMjAuICA2NC1iaXQgYXBwbGlj YXRpb24KK3N1cHBvcnQgYmVnYW4gaW4gMTEuMDAsIGJ1dCBub3QgYWxsIG1hY2hpbmVzIHRoYXQg cnVuIDExLjAwIHN1cHBvcnQgNjQgYml0cy4KK0Fib3V0IGxvbmcgZmlsZXMsIHNlZSBIUCAvdXNy L3NoYXJlL2RvYy9sZ19maWxlcy50eHQuCisKK1BldGVyRSBmb3VuZCB0aGF0IGNlcnRhaW4gcGF0 dGVybnMgY2FuIHN0aWxsIG1ha2UgS2VybWl0IGxvb3A7IGV4YW1wbGU6CisKKyAgaWYgbWF0Y2gg VDAxMDExLTAwODU2LTIxLTYzMi0wNzMgKlthYmNdIHsgZWNobyBHT09EIH0gZWxzZSB7IGVjaG8g QkFEIH0KKyAgaWYgbWF0Y2ggVDAxMDExLTAwODU2LTIxLTYzMi0wNzMgKlthLXpdIHsgZWNobyBH T09EIH0gZWxzZSB7IGVjaG8gQkFEIH0KKworVGhlIG1pbmltdW0gb2ZmZW5kaW5nIHBhdHRlcm4g aXMgKiBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBhbiBbeHh4XQorY29uc3RydWN0aW9uLCBmb2xs b3dlZCBieSBhbnl0aGluZyBlbHNlLCBpbmNsdWRpbmcgbm90aGluZy4gIFByZXZpb3VzCit2ZXJz aW9ucyBvZiBLZXJtaXQgaGFuZGxlZCB0aGlzIG9uZSBjb3JyZWN0bHksIHdpdGhvdXQgbG9vcGlu ZyAoYnV0IGZhaWxlZAorY2VydGFpbiBtYXRjaGVzIHRoYXQgc2hvdWxkIGhhdmUgc3VjY2VlZGVk KS4gIFRoZSBuZXcgc2VjdGlvbiBvZiBjb2RlIEkKK2FkZGVkIG9uIDE1IEp1bmUsIHVwb24gZmFp bHVyZSB0byBtYXRjaCwgYWR2YW5jZXMgdGhlIHN0cmluZyBwb2ludGVyIGFuZAorYmFja3MgdXAg dGhlIHBhdHRlcm4gdG8gdGhlIHByZXZpb3VzIHBhdHRlcm4sIGFuZCBzdGFydHMgYWdhaW4KKyhy ZWN1cnNpdmVseSkuICBIb3dldmVyLCB0aGVyZSBuZWVkZWQgdG8gYmUgYSBjb3JyZXNwb25kaW5n IGNoZWNrIGF0IGVudHJ5Citmb3IgYW4gZW1wdHkgdGFyZ2V0IHN0cmluZy4gIGNrbWF0Y2goKTog Y2tjbGliLmMsIDEyIFNlcCAyMDA1LgorCitQZXRlckUgZGlzY292ZXJlZCB0aGF0ICJrZXJtaXQg LXkgZmlsZXRoYXRkb2Vzbm90ZXhpdCIgZ2l2ZXMgYW4gZXJyb25lb3VzCitlcnJvciBtZXNzYWdl IHRoYXQgbmFtZXMgdGhlIHVzZXIncyBjdXN0b21pemF0aW9uLCByYXRoZXIgdGhhbiB0aGUgbmFt ZQorZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIGRvaW5pdCgpOiBja3V1czUuYywgMTIgU2Vw IDIwMDUuCisKK0ZSRUFEIGRvZXMgbm90IGdldCBhbiBlcnJvciBpZiBpdCB0cmllcyB0byByZWFk IGEgcmVjb3JkIG9yIGZpbGUgb3IgcGllY2Ugb2YKK2ZpbGUgdGhhdCBpcyB0b28gYmlnIGZvciBp dHMgYnVmZmVyLiAgSW4gcGFydGljdWxhciwgRlJFQUQgL1NJWkU6eHh4IHNlZW1zCit0byBzdWNj ZWVkIGV2ZW4gaWYgbGVzcyB0aGFuIHh4eCB3YXMgcmVhZC4gIEl0IHNob3VsZCBmYWlsIHVubGVz cywgcGVyaGFwcywKK2l0IHN1Y2Nlc3NmdWxseSByZWFkIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGZp bGUuICBGdXJ0aGVybW9yZSwgaWYgeHh4IGlzCitiaWdnZXIgdGhhbiB0aGUgZmlsZSBidWZmZXIg c2l6ZSwgaXQgc2hvdWxkIGNvbXBsYWluLiAgVGhlIGJ1ZmZlciBpcworbGluZVtMSU5CVUZTSVpd LCAzMksuICBUaGUgbGFjayBvZiBmYWlsdXJlIHdhcyBkdWUgdG8gY29kZSBpbiBkb2ZpbGUoKSB0 aGF0CithZGp1c3RlZCB0aGUgZ2l2ZW4gc2l6ZSBzaWxlbnRseSBpZiBpdCB3YXMgZ3JlYXRlciB0 aGFuIHRoZSBidWZmZXIgc2l6ZSwKK3doaWNoIEkgcmVtb3ZlZCwgYW5kIGFsc28gYWRkZWQgYSBj aGVjayB3aGVuIHBhcnNpbmcgdGhlIC9TSVpFOiBzd2l0Y2guCitkb2ZpbGUoKTogY2t1dXM3LmMs IDEyIFNlcCAyMDA1LgorCitUaGF0IHN0aWxsIGRpZG4ndCBoZWxwIHdpdGggRlJFQUQgL1NJWkU6 biByZXR1cm5pbmcgbGVzcyB0aGFuIG4gYnl0ZXMsIGV2ZW4KK3doZW4gdGhleSB3ZXJlIGF2YWls YWJsZS4gIFRoYXQncyBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHJvdXRpbmUsIHpfaW4oKSwKK2Rp ZG4ndCBjaGVjayBmcmVhZCgpJ3MgcmV0dXJuIGNvZGUsIHdoaWNoIGlzIHRoZSBudW1iZXIgb2Yg Ynl0ZXMgcmVhZC4KK0lmIGZyZWFkKCkgaGFzIHNtYWxsZXIgYnVmZmVycywgaXQgbmVlZHMgdG8g YmUgY2FsbGVkIGluIGEgbG9vcC4gIHpfaW4oKToKK2NrdXVzNy5jLCAxMiBTZXAgMjAwNS4KKwor RmxlbigpIGZhaWxzIG9uIHN0cmluZ3Mgb2YgbGVuZ3RoIDgxOTIgb3IgbW9yZS4gIFRoZSBsaW1p dGF0aW9uIGlzIGluIHRoZQorY2FsbGVycyBvZiB6enN0cmluZywgd2hpY2ggc2VlbSB0byBiZSBz cGVjaWZ5aW5nIGFuIDhLIGJ1ZmZlciwgaW4gdGhpcyBjYXNlCitmbmV2YWwoKS4gIFRoZSBvcGVy YWJsZSBzeW1ib2xzIGFyZSBGTlZBTEwgKG1heCBsZW5ndGggb2YgdmFsdWUgcmV0dXJuZWQgYnkK K2EgZnVuY3Rpb24pIGFuZCBNQVhBUkdMRU4gKG1heGltdW0gbGVuZ3RoIG9mIGFuIGFyZ3VtZW50 IHRvIGEgZnVuY3Rpb24pLiAgSQorY2hhbmdlZCBib3RoIG9mIHRoZXNlIGZvciBCSUdCVUZPSyBi dWlsZHMgdG8gYmUgQ01EQkwuICBCdWZmZXJzIGNhbiBuZXZlciBiZQoraW5maW5pdGUsIHRoZXJl IGhhcyB0byBiZSBhIGxpbWl0LiAgSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBldmVyeXRoaW5nIHdv cmsKK2NvbnNpc3RlbnRseSB3aXRoaW4gdGhhdCBsaW1pdCwgYW5kIHRvIG1ha2Ugc29tZXRoaW5n IHVzZWZ1bCBoYXBwZW4gd2hlbiB0aGUKK2xpbWl0IGlzIGV4Y2VlZGVkLiAgQXQgdGhpcyBwb2lu dCwgSSBjYW4gcHJvYmFibHkgYWxzbyBpbmNyZWFzZSB0aGUgbGltaXRzCitmb3IgbW9kZXJuIDMy LWJpdCBzeXN0ZW1zLCBhbmQgY2VydGFpbmx5IGZvciA2NC1iaXQgb25lcy4gIEFsc28gdGhlcmUn cyBubworcG9pbnQgaW4gd29ycnlpbmcgYWJvdXQgMTYtYml0IHBsYXRmb3JtcyBhbnkgbW9yZTsg ZWFybGllciBDLUtlcm1pdCB2ZXJzaW9ucworY2FuIHN0aWxsIGJlIHVzZWQgb24gdGhlbSBpZiBu ZWNlc3NhcnkuIGNrdXVzci5oLCAxMiBTZXAgMjAwNS4KKworU3BlY2lhbCAjaWZkZWZzIGZvciBm aW5kaW5nIHJlc29sdi5oIGFuZCBuYW1lc2VyLmggaW4gTUlOSVgzIGZyb20gQW5keQorVGFuZW5i YXVtLiAgY2tjbmV0LmMsIDIwIFNlcCAyMDA1LgorCitQZXRlckUgbm90aWNlZCB0aGF0IGNrbWF0 Y2goKSwgZXZlbiB0aG91Z2ggaXQgd29ya3MgcHJldHR5IHdlbGwgbm93LCBkb2VzIGEKK2xvdCBv ZiBleHRyYSBhbmQgdW5uZWNlc3NhcnkgcmVjdXJzaW9uIGFmdGVyIGRldGVybWluaW5nIHRoZSBz dHJpbmcgYW5kCitwYXR0ZXJuIGRvIG5vdCBtYXRjaCwgYXQgbGVhc3Qgd2hlbiB0aGUgcGF0dGVy biBpcyBvZiB0aGUgZm9ybSAqW2FiY10uCitBZnRlciBzZXZlcmFsIGZhbHNlIHN0YXJ0cyBJIHdh cyBhYmxlIHJlZHVjZSB0aGlzIGVmZmVjdCB0byBhIG1pbm9yIGxldmVsCisoYnV0IG5vdCBlbGlt aW5hdGUgaXQgYWxsIHRvZ2V0aGVyKSBieSBjaGFuZ2luZyBhIHdoaWxlIGxvb3AgaW50byBhIGRv IGxvb3AuCitja21hdGNoKCk6IGNrY2xpYi5jLCAxNSBPY3QgMjAwNS4KKworQWRkZWQgLUROT0xP TkdMT05HIHRvIEhQLVVYIDguMDAgYW5kIGVhcmxpZXIgYnVpbGRzLCBhbmQgdG8gTW90b3JvbGEt YmFzZWQKK0hQLVVYIDkuMDAgYnVpbGRzLiAgVGhpcyBpcyBzaW1wbHkgdG8gaW5oaWJpdCB0aGUg dGVzdCBmb3Igd2hldGhlciAibG9uZworbG9uZyIgaXMgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxl ciwgc2luY2Ugd2hlbiBpdCBpc24ndCwgdGhlIG1vZHVsZQorY29udGFpbmluZyB0aGUgdGVzdCB3 b24ndCBjb21waWxlLiAgbWFrZWZpbGUsIGNrdXVzNS5jLCAxNiBPY3QgMjAwNS4KKworTWFraW5n IEFTS1EgYWx3YXlzIGVjaG8gYXN0ZXJpc2tzIGlzIGEgYmFkIGlkZWEsIGJlY2F1c2Ugd2hlbiBp dCBkb2Vzbid0CitlY2hvLCBpdCdzIHRoZSBwZXJmZWN0IHdheSB0byByZWFkIHNpbGVudGx5IGZy b20gc3RkaW4sIGUuZy4gaW4gYSBDR0kgc2NyaXB0CisoSU5QVVQgY2FuIGFsc28gYmUgdXNlZCBm b3IgdGhpcyBidXQgaXQncyBub3QgYXMgc3RyYWlnaHRmb3J3YXJkKS4gIFNvIEkgcHV0Cit0aGUg ZGVmYXVsdCBmb3IgQVNLUSBiYWNrIHRvIG5vIGVjaG9pbmcsIHRoZW4gZ2F2ZSBBU0tRIGl0cyBv d24gc3dpdGNoCit0YWJsZSwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgZm9yIEFTSyB3aXRoIHRoZSBh ZGRpdGlvbiBvZiBhbiAvRUNITzp4IHN3aXRjaCwKK3doaWNoIHRlbGxzIHdoYXQgY2hhcmFjdGVy IHRvIGVjaG8uICBja3VjbWQuYywgY2t1dXNbMjZdLmMsIDE3IE9jdCAyMDA1LgorCitGaXhlZCBh IGJ1ZyBpbiBGVFAgR0VUIC9DT01NQU5EIGZpbGVuYW1lIGNvbW1hbmRuYW1lOyBpdCBhbHdheXMg ZHVtcGVkIGNvcmUKK2RlcmVmZXJlbmNpbmcgYSBudWxsIHN0cmluZyAodGhlIG5vbmV4aXN0ZW50 IGxvY2FsIGFzbmFtZSkuICBja2NmdHAuYywKKzE3IE9jdCAyMDA1LgorCitGb3IgZG9jczogaWYg eW91IGRvbid0IGxpa2UgdGhlIGZ1bm55IGJ1c2luZXNzIHRoYXQgaGFwcGVucyB3aGVuIHlvdSB0 eXBlCithbiBJRiBjb21tYW5kIGF0IHRoZSBwcm9tcHQsIHVzZSBYSUYgaW5zdGVhZCBhbmQgaXQg d29uJ3QgaGFwcGVuLiAgQWxzbyBub3RlCit0aGF0IGNvbW1hbmRzIGxpa2UgImlmIHh4eCB7IGVj aG8gYmxhaCB9IGVsc2UgeyBlY2hvIGJsYWggYmxhaCB9IiBkb24ndAord29yayB3aGVuIHR5cGVk IGF0IHRoZSBwcm9tcHQ7IHlvdSBoYXZlIHRvIHVzZSBYSUYgZm9yIHRoaXMuIAorCitCYWNrIHRv IGNrbWF0Y2goKS4uLiAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIChlLmcuIHBhdHRlcm5zIGxp a2UgKlthYmNdKQorZmFpbHVyZSB0byBtYXRjaCB3b3VsZCBub3Qgc3RvcCB0aGUgcmVjdXJzaW9u IGJlY2F1c2UgdGhlIHN0cmluZyBhbmQgcGF0dGVybgorYXJndW1lbnRzIGFyZSBvbiB0aGUgc3Rh Y2ssIGFzIHRoZXkgbXVzdCBiZSwgc28gdGhlcmUgd2FzIG5vIHdheSBmb3IgbGV2ZWwKK24tMSB0 byBrbm93IHRoYXQgbGV2ZWwgbiBoYWQgZGV0ZWN0ZWQgYSBkZWZpbml0aXZlIG5vbm1hdGNoIGFu ZCB0aGF0IG5vCitmdXJ0aGVyIGF0dGVtcHRzIGF0IG1hdGNoaW5nIHdlcmUgcmVxdWlyZWQuICBU aGUgcmlnaHQgd2F5IHRvIGhhbmRsZSB0aGlzIGlzCit0byByZWNvZGUgdGhlIHdob2xlIHRoaW5n IGFzIGNvcm91dGluZXMsIHRoZSBjaGVhcCB3YXkgb3V0IGlzIHdpdGggYSBnbG9iYWwKK3N0YXRp YyBmbGFnLiAgV29ya3MgcGVyZmVjdGx5LCBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgbWF0Y2gua3Nj IHRlc3QgcmVzdWx0cworYXJlIGlkZW50aWNhbCB0byB3aGF0IHRoZXkgd2VyZSBiZWZvcmUgYW5k IHRoZSBleHRyYSBiYWNraW5nIHVwIGFuZAorcmVjdXJzaW9uIGFyZSBlbGltaW5hdGVkLiAgKFRo ZSBPY3QgMTV0aCBmaXggd2Fzbid0IHJlYWxseSBhIGZpeCwgaXQgYnJva2UKK2EgY291cGxlIG9m IGNhc2VzLikgIGNrY2xpYi5jLCAyMCBPY3QgMjAwNS4KKworY2t1dXM3LmMoMjk4Nyk6IHdhcm5p bmcgIzI2NzogdGhlIGZvcm1hdCBzdHJpbmcgcmVxdWlyZXMgYWRkaXRpb25hbCBhcmd1bWVudHMK KyhpbiBQVVJHRSBjb21tYW5kKTsgZml4ZWQgMjAgT2N0IDIwMDUuCisKK0Zyb20gQW5keSBUYW5l bmJhdW0sIGZpbmFsIGNoYW5nZXMgZm9yIE1JTklYMzogI2lmZGVmIG91dCB0aGUgaW5saW5lCitk ZWZpbml0aW9ucyBmb3IgZ2V0dGltZW9mZGF5KCkgYW5kIHJlYWRsaW5rKCkuICBja3V0aW8uYywg MjMgT2N0IDIwMDUuCisKK0Zyb20gSmVmZjogc3RydWN0IGdzc190cmlhbHMgaW5pdGlhbGl6ZXJz IGNoYW5nZWQgZnJvbSBnc3NfbWVjaF9rcmI1IHRvCitja19nc3NfbWVjaF9rcmI1LiAgY2tjZnRw LmMsIDIzIE9jdCAyMDA1LgorCitGcm9tIEplZmY6IHNvbWUgaW1wcm92ZW1lbnRzIHRvIEs5NSBH VUkgU0hPVyBURVJNSU5BTC4gIGNrdXVzNS5jLCAyMyBPY3QgMjAwNS4KKworRm91bmQgYW5kIGNv cnJlY3RlZCBzb21lIG1pc3BsYWNlZCAjaWZkZWZzIGluIHNob2ZlYXQoKSwgY2t1dXM1LmMsIDIz IE9jdCAyMDA1LgorCistLS0gRGV2LjAzIC0tLQorCitGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcg aW4gYSBkZWJ1ZygpIHN0YXRlbWVudCBpbiB6enN0cmluZygpIGJ5IGFkZGluZworcGFyZW5zLiAg Y2t1dXM0LmMsIDI0IE9jdCAyMDA1LgorCitBZGRlZCAtRE5PTE9OR0xPTkcgdG8gc3Y2OHIzdjYg dGFyZ2V0LCBtYWtlZmlsZSwgMjUgT2N0IDIwMDUuCisKK05ldyBtYWtlZmlsZSB0YXJnZXRzIGZv ciBIUC1VWCBmcm9tIFBldGVyRSB0byBoYW5kbGUgdGhlICdsb25nIGxvbmcnCitzaXR1YXRpb24u ICAgMjYgT2N0IDIwMDUuCisKK0Zyb20gSmVmZjogY2hhbmdlcyB0byBzdXBwb3J0IE9wZW5TU0wg MC45LjgsIGNrX3NzbC5oLiAgY2tjYXNjLmggaGFzIGhhZAorc2hvcnQgbmFtZXMgZGVmaW5lZCBm b3IgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIGZvciAyMC1zb21lIHllYXJzIGJ1dCBub3cKK3Ro ZXkgYXJlIGNhdXNpbmcgY29uZmxpY3RzLCBzbyBFTSBiZWNvbWVzIFhFTSAoYWxzbyBmb3IgT3Bl blNTTCAwLjkuOCkuCitDaGFuZ2VkIEs5NSdzIGRlZmF1bHQgdGVybWluYWwgdHlwZSBmcm9tIFZU MzIwIHRvIFZUMjIwIGJlY2F1c2UgVlQzMjAKK3Rlcm1jYXBzL3Rlcm1pbmZvcyBhcmUgZGlzYXBw ZWFyaW5nIGZyb20gVW5peCBob3N0czogY2t1dXM3LmMuICBSZW9yZ2FuaXplCit0aGUgZGF0YS10 eXBlcyBzZWN0aW9uIG9mIFNIT1cgRkVBVFVSRVMgdG8gYWRkIG1vcmUgbWFjcm8gdGVzdHMgZm9y IGludGVncmFsCitzaXplcyBhbmQgdG8gcHJvdmlkZSBmb3IgdGhlIHByb3BlciBwcmludGYgZm9y bWF0dGluZyBpbiBvcmRlciB0byBhbGxvdyB0aGUKK3NpemVzIHRvIGJlIG91dHB1dCAoIllvdSBh cmUgZ29pbmcgdG8gbmVlZCB0byBiZSBjYXJlZnVsIGJlY2F1c2UgJWxseCBpcyBub3QKK3N1cHBv cnRlZCBvbiBhbGwgcGxhdGZvcm1zLiAgT24gV2luZG93cywgaXQgaXMgdGhlIHNhbWUgYXMgJWx4 LCAzMiBiaXRzIik6Citja3V1czUuYywgMjYgT2N0IDIwMDUuCisKK0RlZmluZWQgTk9MT05HTE9O RyBja2NkZWIuaCBmb3IgdmFyaW91cyBvbGQgcGxhdGZvcm1zIHdoZXJlIHdlIGtub3cgd2UgYXJl CituZXZlciBnb2luZyB0byBuZWVkIDY0LWJpdCBpbnRzIChldmVuIGlmIHRoZXkgc3VwcG9ydCBh IGxvbmcgbG9uZyBkYXRhdHlwZSwKK2NoYW5jZXMgYXJlIHByZXR0eSBzbGltIHRoZXkgc3VwcG9y dGVkIDY0LWJpdCBmaWxlIHNpemVzKS4gIGNrY2RlYi5oLAorMjYgT2N0IDIwMDUuCisKK1BldGVy RSBub3RpY2VkIHRoYXQgR09UTyB0YXJnZXRzIGNhbiBvbmx5IGJlIDUwIGNoYXJhY3RlcnMgbG9u Zy4gIFRoaXMgd2FzCitieSBkZXNpZ24sIGEgbG9uZyB0aW1lIGFnbywgb24gdGhlIGFzc3VtcHRp b24gdGhhdCBub2JvZHkgd291bGQgbWFrZSBsb25nZXIKK2xhYmVscy4gIEJ1dCBpbiBTV0lUQ0gg c3RhdGVtZW50cywgY2FzZSBsYWJlbHMgY2FuIGJlIHZhcmlhYmxlcyB0aGF0IGV4cGFuZAordG8g YW55dGhpbmcgYXQgYWxsLiAgSWYgd2UgY2hvcCB0aGVtIG9mZiBhdCA1MCwgd2UgbWlnaHQgZXhl Y3V0ZSB0aGUgd3JvbmcKK2Nhc2UuICBDaGFuZ2VkIHRoZSBtYXhpbXVtIGxhYmVsIHNpemUgdG8g YmUgOEssIGFuZCBhZGRlZCBjb2RlIHRvIGRvZ290bygpCit0byBjaGVjayB3aGVuIGEgbGFiZWwg b3IgdGFyZ2V0IGlzIHRvbyBsb25nIGFuZCBmYWlsLCB0byBwcmV2ZW50IHNwdXJpb3VzCitHT1RP IG9yIFNXSVRDSCByZXN1bHRzLiAgY2t1dXNyLmgsIGNrdXVzW3I2XS5jLCAyNiBPY3QgMjAwNS4K KworVGVzdGluZyByZXZlYWxlZCB0aGVyZSB3YXMgc3RpbGwgYSBwcm9ibGVtIHdpdGggU1dJVENI IGNhc2UgbGFiZWxzIHRoYXQgd2VyZQordmFyaWFibGVzIHRoYXQgZXhwYW5kZWQgaW50byBsb25n IHN0cmluZ3MuICBUdXJucyBvdXQgdGhhdCBJIHdhcyBiZWluZwordG9vIGNsZXZlciB3aGVuIEkg ZGVjaWRlZCB0aGF0LCBpZiB0aGUgU1dJVENIIG1hY3JvIHdhcyBuMSBjaGFyYWN0ZXJzIGxvbmcK K2FuZCB0aGUgY2FzZS1sYWJlbCBzZWFyY2ggdGFyZ2V0IHdhcyBuMiBjaGFyYWN0ZXJzIGxvbmcs IEkgb25seSBoYWQgdG8KK3NlYXJjaCB0aGUgZmlyc3QgbjEtbjIrMSBjaGFyYWN0ZXJzIG9mIHRo ZSBtYWNybyBkZWZpbml0aW9uLiAgVGhhdCB3YXMgdHJ1ZQorYmVmb3JlIEkgYWxsb3dlZCBjYXNl IGxhYmVscyB0byBiZSB2YXJpYWJsZXMsIGJ1dCBub3QgYW55IG1vcmUhICBGaXhlZCBpbgorZG9n b3RvKCk6IGNrdXVzNS5jLCAyNiBPY3QgMjAwNS4KKworLS0tIERldi4wNCAtLS0KKworRGV2LjA0 IGRpZG4ndCBhY3R1YWxseSBjb250YWluIEplZmYncyBkYXRhLXR5cGUgY2hhbmdlcyB0byBzaG9m ZWF0KCksCitJIHRoaW5rIEkgc2F2ZWQgdGhlIHdyb25nIGJ1ZmZlciBpbiBFTUFDUy4uLiAgRml4 ZWQgbm93LiAgMjcgT2N0IDIwMDUuCisKK1BldGVyRSBjb3JyZWN0ZWQgYSB0eXBvIGluIHRoZSBI UC1VWCA3LjAwIG1ha2VmaWxlIHRhcmdldC4gIDI3IE9jdCAyMDA1LgorCitQZXRlckUgaGFkIGJl ZW4gcmVwb3J0aW5nIHByb2JsZW1zIHN0cmVzcy10ZXN0aW5nIHRoZSBuZXcgU1dJVENIIGNvZGUs IGJ1dAorb25seSBvbiBIUC1VWCA5LCBwcmltYXJpbHkgc3RhY2sgb3ZlcnJ1bi4gIFR1cm5zIG91 dCB0byBiZSB0aGUgSFAtVVggOQorb3B0aW1pemluZyBjb21waWxlcidzIGZhdWx0LiAgTm8gb3B0 aW1pemF0aW9uLCBubyBwcm9ibGVtcy4KKworUGV0ZXJFIGZvdW5kIHRoYXQgZXZlbiB3aGVuIGRv Z290bygpIGRldGVjdHMgYSBzdHJpbmcgdGhhdCBpcyB0b28gbG9uZworYW5kIGZhaWxzLCB0aGlz IGRvZXMgbm90IHN0b3AgU1dJVENIIGZyb20gcHJvZHVjaW5nIGEgcmVzdWx0LCB3aGljaCBjYW4g bm90Citwb3NzaWJseSBiZSB0cnVzdGVkLiAgQ2hhbmdlZCB0aGUgcGFydCBvZiBkb2dvdG8oKSB0 aGF0IGhhbmRsZXMgdGhpcyB0bworbm90IGp1c3QgZmFpbCwgYnV0IGFsc28gdG8gZXhpdCB0aGUg c2NyaXB0IGltbWVkaWF0ZWx5IGFuZCByZXR1cm4gdG8gdG9wCitsZXZlbC4gIGNrdXVzNi5jLCAy OCBPY3QgMjAwNS4KKworQW4gaWRlYSBwb3BwZWQgaW50byBteSBoZWFkIGFmdGVyIGhhdmluZyB0 eXBlZCB0b28gbWFueSBjb21tYW5kcyBsaWtlICJkaXIKK2NrW2N1d10qLltjd2hdIiB0byBjaGVj ayB0aGUgbGlzdCBvZiBtYXRjaGluZyBmaWxlcywgYW5kIHRoZW4gaGF2aW5nIHRvCityZXR5cGUg dGhlIHNhbWUgZmlsZXNwZWMgaW4gYSBTRU5EIGNvbW1hbmQ6IFdoeSBub3QgdW5sZWFzaCBzb21l IHVudXNlZAorY29udHJvbCBjaGFyYWN0ZXIgc3VjaCBhcyBDdHJsLUsgdG8gc3BpdCBvdXQgdGhl IG1vc3QgcmVjZW50bHkgZW50ZXJlZCBpbnB1dAorZmlsZXNwZWM/ICBJdCB3YXMgZWFzeSwganVz dCBhIGZldyBsaW5lcyBpbiBjbWlmaTIoKSBhbmQgZ3R3b3JkKCksIHBsdXMgYQorY291cGxlIGRl Y2xhcmF0aW9ucy4gIFRvIHNlZSBhbGwgdGhlIGNoYW5nZXMsIHNlYXJjaCBmb3IgImxhc3RmaWxl IiAoYWxsIHRoZQorbmV3IGNvZGUgaXMgcHJvdGVjdGVkIGJ5ICNpZm5kZWYgTk9MQVNURklMRSku ICBja3VjbWQuYywgMjggT2N0IDIwMDUuCisKK0kgYWRkZWQgYSBuZXcgdmFyaWFibGUgXHYobGFz dGZpbGVzcGVjKSB0aGF0IGV4cGFuZHMgdG8gdGhlIHNhbWUgbGFzdAorZmlsZXNwZWMsIGZvciB1 c2UgaW4gc2NyaXB0cy4gIGNrdXVzci5oLCBja3V1czQuYywgMjggT2N0IDIwMDUuCisKK1RoZSBV bml4IHZlcnNpb24gb2YgQy1LZXJtaXQgZmFpbGVkIHRvIHB1dCBhbnl0aGluZyBpbiB0aGUgc2Vz c2lvbiBsb2cgaWYKK1NFVCBURVJNSU5BTCBERUJVRyBPTi4gIFJlYXJyYW5nZWQgdGhlIHBlcnRp bmVudCBjbGF1c2Ugc28gbG9nZ2luZyBoYXBwZW5zCitpbmRlcGVuZGVudCBvZiBURVJNSU5BTCBE RUJVRy4gIEZvciBub3csIHNpbmNlIHRoZSB1c2VyIHdobyBub3RpY2VkIHRoaXMKK3dhbnRlZCBk ZWJ1ZyBmb3JtYXQgdG8gZ28gaW50byB0aGUgc2Vzc2lvbiBsb2csIHRoYXQncyB3aGF0IEkgZG8u ICBUaGUKK2FsdGVybmF0aXZlIHdvdWxkIGJlIHRvIGp1c3QgbG9nIHRoZSByYXcgaW5jb21pbmcg c3RyZWFtIGFzIHVzdWFsLCBvciB0byBhZGQKK1lldCBBbm90aGVyIFNFVCBDb21tYW5kIHRvIGNo b29zZS4gIGNrdWNucy5jLCAxMSBOb3YgMjAwNS4KKworRml4ZWQgSEVMUCBJTlRSTyB0ZXh0LiAg Y2t1dXMyLmMsIDExIE5vdiAyMDA1LgorCitBZGRlZCBOT0xPTkdMT05HIGZvciBTVjY4LiAgY2tj ZGViLmgsIDExIE5vdiAyMDA1LgorCistLS0gRGV2LjA1IC0tLQorCitBZGRlZCBhIGRlYnVnKCkg c3RhdGVtZW50IGluIEZUUCBzZWN1cmVfZ2V0Ynl0ZSgpIHRvIHNlZSB3aGF0J3MgZ29pbmcgb24K K3dpdGggTXVoYW1hZCBUYXVmaXEgVGFqdWRkaW4ncyAyMDUtYnl0ZS1wZXItc2Vjb25kIEZUUC9T U0wgZG93bmxvYWRzLgorCistLS0gRGV2LjA2IC0tLQorCitSZXN1bHQ6IG5vdGhpbmcsIFNTTF9n ZXRfZXJyb3IoKSBkb2VzIG5vdCByZXBvcnQgYW55IGVycm9ycy4gIFN1Z2dlc3RlZAordGVzdGlu ZyBTU0xfcmVhZCgpJ3MgcmV0dXJuIGNvZGUsIGlmIDAgZG9uJ3QgdXBkYXRlIHRoZSBzY3JlZW4u CisKK0NyZWF0ZWQgYSBuZXcgZGF0YSB0eXBlIENLX09GRl9UIGluIGNrY2RlYi5oIHRoYXQgd2ls bCBldmVudHVhbGx5IHJlc29sdmUKK3RvIHdoYXRldmVyIGVhY2ggcGxhdGZvcm0gdXNlcyBmb3Ig ZmlsZSBzaXplcyBhbmQgb2Zmc2V0cy4gIGNrY2RlYi5oLAorMTcgTm92IDIwMDUuCisKK01hZGUg YSBuZXcgbGlicmFyeSByb3V0aW5lIGNrZnN0b2EoKSB0aGF0IGNvbnZlcnRzIGEgZmlsZSBzaXpl IG9yIG9mZnNldCB0bworYSBzdHJpbmcuICBUaGlzIGlzIHRvIHNvbHZlIHRoZSBwcm9ibGVtIHdp dGggaGF2aW5nIHRvIHVzZSBkaWZmZXJlbnQKK3ByaW50ZigpIGZvcm1hdHMgZm9yIGRpZmZlcmVu dCByZXByZXNlbnRhdGlvbnMgb2YgZmlsZSBzaXplIChpbnQsIGxvbmcsIGxvbmcKK2xvbmcsIG9m Zl90LCBzaWduZWQsIHVuc2lnbmVkLCBldGMpLiAgUmVwbGFjZWQgYSBmZXcgcHJpbnRmKCIlbCIs c2l6ZSkgd2l0aAorcHJpbnRmKCIlcyIsY2tmc3RvYShzaXplKSkgd2l0aCB0aGUgZXhwZWN0ZWQg cmVzdWx0cy4gIFRoaXMgaXMganVzdCBhIHN0YXJ0LAordGhlIGRlZmluaXRpb25zIHdpbGwgbmVl ZCBhZGp1c3RtZW50IGZvciBtYW55IHBsYXRmb3JtcywgdmFyaWFibGVzIG5lZWQgdG8KK2JlIHJl ZGVjbGFyZWQsIGFuZCBhbGwgdGhlIG9mZmVuZGluZyBwcmludGYncyAoYW5kIHByaW50dydzKSB3 aWxsIGhhdmUgdG8KK2h1bnRlZCBkb3duIGFuZCBjb252ZXJ0ZWQuICBja2NsaWIuW2NoXSwgY2t1 dXM0LmMsIDE3IE5vdiAyMDA1LgorCitCdWlsdCBhIG1pbmltYWwgdmVyc2lvbiBvbiBMaW51eCB3 aXRoOgorbWFrZSBsaW51eCAiS0ZMQUdTPS1ETk9MT0NBTCAtRE5PSUNQIC1ETk9DU0VUUyAtRE5P REVCVUciCitXb3JrZWQgZmluZSwgcmVzdWx0IHdhcyAyNjBLIG9uIGk2ODYuICAyMSBOb3YgMjAw NS4KKworRGlzY292ZXJlZCB0aGF0IEtlcm1pdCdzIGRhdGUgcGFyc2VyLCBjb250cmFyeSB0byB0 aGUgZG9jdW1lbnRhdGlvbiwgZmFpbGVkCit0byBoYW5kbGUgc3RyaW5ncyBsaWtlICJXZWQsIDEz IEZlYiAyMDAyIDE3OjQzOjAyIC0wODAwIChQU1QpIiwgd2hpY2ggYXJlCitjb21tb25seSBmb3Vu ZCBpbiBlbWFpbC4gIFRoaXMgd2FzIGJlY2F1c2Ugb2YgYW4gb3ZlcnplYWxvdXMgYW5kIG1pc2d1 aWRlZAorY2hlY2sgaW4gdGhlIGNvZGU7IG9uY2UgcmVtb3ZlZCwgYWxsIHdhcyB3ZWxsLiAgY2t1 Y21kLmMsIDI2IE5vdiAyMDA1LgorCitBZGRlZCBhIG5ldyBmb3JtYXQgY29kZSA0IHRvIFxmY3Z0 ZGF0ZSgpIHRvIGVtaXQgYXNjdGltZSgpIGZvcm1hdCwgdXNlZCBpbgorQlNELWZvcm1hdCBlbWFp bCBtZXNzYWdlIGVudmVsb3BlcyAoaS5lLiB0aGUgIkZyb20gIiBsaW5lKS4gIHNodWZmbGVkYXRl KCksCitja3VjbWQuYywgY2t1dXNbMjRdLmMsIDI2IE5vdiAyMDA1LgorCitBZGRlZCBhIG5ldyBm dW5jdGlvbiBcZmVtYWlsYWRkcmVzcygpLiAgR2l2ZW4gYSBGcm9tOiBvciBTZW5kZXI6IGhlYWRl ciBsaW5lCitmcm9tIGFuIFJGQzI4MjItZm9ybWF0IGVtYWlsIGFkZHJlc3MsIGV4dHJhY3RzIGFu ZCByZXR1cm5zIHRoZSBhY3R1YWwgZW1haWwKK2FkZHJlc3MsIHN1Y2ggYXMga2VybWl0QGNvbHVt YmlhLmVkdS4gIGNrdXVzci5oLCBja3V1c1s0Ml0uYywgMjYgTm92IDIwMDUuCisKK1VzaW5nIHRo ZSBuZXcgZnVuY3Rpb25zLCBJIHdyb3RlIGEgc2NyaXB0IHRvIGZldGNoIG1haWwgZnJvbSBhIFBP UDMgc2VydmVyCitvdmVyIGEgVExTIGNvbm5lY3Rpb24uICBCdXQgdGhlIGxpbmUtYXQtYS10aW1l IGlucHV0IChuZWVkZWQgZm9yIGNoYW5naW5nCitsaW5lIHRlcm1pbmF0b3JzIGFuZCBieXRlLXN0 dWZmaW5nIHRleHQgbGluZXMgdGhhdCBzdGFydCB3aXRoICJGcm9tICIpIGlzCitzbG93LCAxNyBz ZWMgdG8gcmVhZCAyOSBtZXNzYWdlcyB0b3RhbGluZyAxNzVLLgorCitBZGRlZCBJTlBVVCAvQ0xF QVIgc28gSU5QVVQgY2FuIGJlIHN0YXJ0ZWQgd2l0aCBhIGNsZWFuIGJ1ZmZlciB3aXRob3V0City ZXF1aXJpbmcgYSBzZXBhcmF0ZSBDTEVBUiBJTlBVVCBjb21tYW5kLiAgY2t1dXNyLmgsIGNrdXVz W3IyNF0uYywKKzI3IE5vdiAyMDA1LgorCitPbmUgdGhpbmcgdGhhdCBJTlBVVCB3YXMgbmV2ZXIg YWJsZSB0byBkbyB3ZWxsIHdhcyByZWFkIGFuZCBzYXZlIHRoZQorY29tcGxldGUgaW5jb21pbmcg ZGF0YSBzdHJlYW0uICBUaGF0J3MgYmVjYXVzZSwgd2hpbGUgd2FpdGluZyBmb3IgaXRzCit0YXJn ZXQsIHRoZSBidWZmZXIgbWlnaHQgb3ZlcmZsb3cgd3JhcCBhcm91bmQuICBZZXQgdGhlcmUgd2Fz IG5ldmVyIGEgd2F5IHRvCit0ZWxsIGl0IHRvIHN0b3Agd2hlbiBpdHMgYnVmZmVyIGZpbGxzIHVw IGFuZCBsZXQgbWUgc2F2ZSBpdC4gIEkgYWRkZWQgYQorL05PV1JBUCBzd2l0Y2ggdGhhdCBkb2Vz IHRoaXMuICBJZiB0aGUgYnVmZmVyIGZpbGxzIHVwIGJlZm9yZSBhbnkgb3RoZXIKK2NvbXBsZXRp b24gY3JpdGVyaW9uIGlzIG1ldCwgSU5QVVQgcmV0dXJucyBmYWlsdXJlLCBidXQgd2l0aCBcdihp bnN0YXR1cykKK3NldCB0byA2ICh0aGUgbmV4dCBhdmFpbGFibGUgaW5zdGF0dXMgdmFsdWUpLiAg VGh1cyBhIHByb2dyYW0gdGhhdCB3YW50cyB0bworcmVhZCBhbmQgc2F2ZSAoc2F5KSBhbiBlbWFp bCBtZXNzYWdlIGZyb20gYSBQT1Agc2VydmVyLCB3aGljaCBjb3VsZCBiZSBhbnkKK2xlbmd0aCBh dCBhbGwsIGFuZCB3aGljaCB0ZXJtaW5hdGVzIHdpdGggPENSTEY+LjxDUkxGPiBjb3VsZCBkbyB0 aGlzOgorCisgIHNldCBmbGFnIG9mZgorICB3aGlsZSBvcGVuIGNvbm5lY3Rpb24geworICAgICAg aW5wdXQgL25vd3JhcCAxMCBcMTNcMTAuXDEzXDEwICMgV2FpdCBmb3IgPENSTEY+LjxDUkxGPgor ICAgICAgaWYgc3VjY2VzcyB7CisgICAgICAgICAgZnJ3cml0ZSAvc3RyaW5nIFwlbyB7XGZyZXBs YWNlKFx2KGlucHV0KSxcMTNcMTAuXDEzXDEwLFwxM1wxMCl9CisgICAgICAgICAgc2V0IGZsYWcg b24KKyAgICAgICAgICBicmVhaworICAgICAgfSBlbHNlIGlmICggPT0gXHYoaW5zdGF0dXMpIDYg fHwgPT0gXHYoaW5zdGF0dXMpIDEgKSB7CisgICAgICAgICAgZnJ3cml0ZSAvc3RyaW5nIFwlbyB7 XHYoaW5wdXQpfQorICAgICAgICAgIGNvbnRpbnVlCisgICAgICB9CisgICAgICBicmVhaworICB9 CisgIGlmIGZsYWcgKGhhbmRsZSBzdWNjZXNzKQorCitOb3RlIGNhcmVmdWxseSB0aGUgYnJhY2Vz IGFyb3VuZCB0aGUgRldSSVRFIHRleHQ7IHdpdGhvdXQgdGhlbSwgdHJhaWxpbmcKK3NwYWNlcyB3 b3VsZCBiZSBsb3N0LgorCitQcmV2aW91c2x5IHRoZSBvbmx5IHdheSB0byBJTlBVVCBhbiBlbnRp cmUgZGF0YSBzdHJlYW0gd2l0aG91dCBsb3NpbmcKK2FueXRoaW5nIChhc3N1bWluZyBpdCB3YXMg b3JkaW5hcnkgbGluZXMgb2YgdGV4dCB0aGF0IHdlcmUgbm90ICJ0b28gbG9uZyIpLAord2FzIGxp bmUtYnktbGluZToKKworICB3aGlsZSBvcGVuIGNvbm5lY3Rpb24geworICAgICAgaW5wdXQgL2Ns ZWFyIDEwIFwxM1wxMAorICAgICAgaWYgZmFpbCBicmVhaworICAgICAgaWYgZXEgIlx2KGlucHV0 KSIgIiQgXDEzXDEwIiBicmVhaworICAgICAgZndyaXRlIC9zdHJpbmcgXCVvIHtcZnJlcGxhY2Uo XHYoaW5wdXQpLFwxM1wxMCxcMTApfQorICB9CisKK1RoZSBuZXcgY29kZSBpcyAzIHRpbWVzIGZh c3RlciB1c2luZyB0aGUgZGVmYXVsdCBJTlBVVCBidWZmZXIgbGVuZ3RoIG9mIDRLLgorUmFpc2lu ZyBpdCB0byAxNksgbWFrZXMgaXQgMy42IHRpbWVzIGZhc3RlciAobm90IHdvcnRoIGl0KS4gIENo YW5naW5nIHRoZQorUE9QMyBzY3JpcHQgdG8gdXNlIElOUFVUIC9OT1dSQVAgbWFrZXMgaXQgYWJv dXQgdHdpY2UgYXMgZmFzdCAoaXQgZG9lcyBtb3JlOworaXQgaGFzIHRvIGRvIGFsbCB0aGUgYnl0 ZS1zdHVmZmluZyBhbmQgdW5zdHVmZmluZykuICAyNyBOb3YgMjAwNS4KKworQ2hhbmdlZCBzc2xf ZGlzcGxheV94eHgoKSB0byBqdXN0IHJldHVybiBpZiBTRVQgUVVJRVQgT04uICBPdGhlcndpc2Ug dGhlcmUKK2lzIG5vIHdheSB0byBzdXBwcmVzcyB0aGUgbWVzc2FnZXMuICBBbHNvIHByb3RlY3Rl ZCBhIHByZXZpb3VzbHkgdW5wcm90ZWN0ZWQKK3ByaW50ZigiW1NTTCAtIE9LXVxyXG4iKTsgYnkg aWYgKCBzc2xfdmVyYm9zZV9mbGFnICkuICBja19zc2wuYywKKzI4IE5vdiAyMDA1LgorCitEaXNj b3ZlcmVkIHRoYXQgRk9QRU4gL0FQUEVORCBkb2Vzbid0IHdvcmsgaWYgdGhlIGZpbGUgZG9lc24n dCBleGlzdC4gIEl0Cit1c2VzIGNtaW9maSgpIHdoaWNoIGlzIGEgc3VwZXItaG9rZXkgZnJvbnQg ZW5kIHRvIGNtaWZpMigpLiAgSSBoYWQgY29kZSB0bworY2FsbCBpdCBidXQgZm9yIHNvbWUgcmVh c29uIGl0IHdhcyBjb21tZW50ZWQgb3V0LCB3aXRoIGEgbm90ZSB0byB0aGUgZWZmZWN0CitpdCBk aWRuJ3Qgd29yay4gIEkgdW5jb21tZW50ZWQgaXQgYnV0IHRoYXQgZGlkbid0IGhlbHAgbXVjaC4g IFNvIEkgd3JvdGUgYW4KK2VudGlyZWx5IG5ldyBjbWlvZmkoKSB0aGF0IHdvcmtzIGV4YWN0bHkg YXMgaXQgc2hvdWxkLCB1c2luZyBjaGFpbmVkIEZEQnMsCitfQ01JRkkgdG8gX0NNT0ZJIChJIHRo aW5rIHRoZSBvcmlnaW5hbCBjbWlvZmkoKSBwcmVkYXRlZCBjaGFpbmVkIEZEQnMpLgorY2t1dXM3 LmMsIGNrdWNtZC5jLCAyOSBOb3YgMjAwNS4KKworR2V0dGluZyByaWQgb2YgdGhlIGF3ZnVsIGhh Y2tzIHJlcXVpcmVkIHRvIGNhbGwgY21pb2ZpKCkgbWVhbnQgSSBhbHNvIGhhZCB0bworY2hhbmdl IHRoZSBFRElUIGNvbW1hbmQsIHdoaWNoIGlzIHRoZSBvbmx5IG90aGVyIHBsYWNlIHdoZXJlIGl0 J3MgdXNlZC4KK1VuZm9ydHVuYXRlbHkgbm93IGl0J3Mgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIGdp dmUgRURJVCB3aXRob3V0IGEgZmlsZW5hbWUKKyh0byBqdXN0IHN0YXJ0IGFuIGVtcHR5IGVkaXRv cikgYnV0IEkgZG91YnQgYW55b25lIHdpbGwgbm90aWNlLiAgY2t1dXNyLmMsCisyOSBOb3YgMjAw NS4KKworSUYgS0VSQkFORyBkaWRuJ3QgYWx3YXlzIHdvcmsgcmlnaHQuICBJZiBhIGtlcmJhbmcg c2NyaXB0IFRBS0VzIGFub3RoZXIKK2tlcmJhbmcgc2NyaXB0LCB0aGUgc2Vjb25kIG9uZSBzaG91 bGQgaGF2ZSBJRiBLRVJCQU5HIGZhbHNlLCBidXQgaXQgZGlkbid0LgorQWRkZWQgYSBjaGVjayBm b3IgXHYoY21kbGV2ZWwpID09IDEuICBOb3cgeW91IGNhbiB3cml0ZSBhIHdyYXBwZXIgdGhhdCBy dW5zCithIGtlcmJhbmcgc2NyaXB0IGluIGEgbG9vcCwgYW5kIHRoZSBsYXR0ZXIgY2FuIHVzZSBJ RiBLRVJCQU5HIHRvIGtub3cKK3doZXRoZXIgdG8gRVhJVCAoaWYgY2FsbGVkIGF0IHRvcCBsZXZl bCkgb3IgRU5EIChpZiBjYWxsZWQgYnkgYW5vdGhlcgorc2NyaXB0LCB0aHVzIGFsbG93aW5nIC0t IGluIHRoaXMgY2FzZSAtLSB0aGUgbG9vcCB0byBjb250aW51ZSkuICBja3V1czYuYywKKzI5IE5v diAyMDA1LgorCitDaGFuZ2VkIFxmbG9wKCkgYW5kIGZsb3B4KCkgZnVuY3Rpb25zIHRvIHRha2Ug YSB0aGlyZCBhcmd1bWVudCwgYSBudW1iZXIKK3NpZ25pZnlpbmcgYXQgd2hpY2ggb2NjdXJyZW5j ZSBvZiB0aGUgYnJlYWsgY2hhcmFjdGVyIHRvIGxvcCwgc286CisKKyAgXGZsb3B4KHNlc2FtZS5j Yy5jb2x1bWJpYS5lZHUpID0gZWR1CisgIFxmbG9weChzZXNhbWUuY2MuY29sdW1iaWEuZWR1LCwy KSA9IGNvbHVtYmlhLmVkdQorCitja3V1c1syNF0uYywgMSBEZWMgMjAwNS4KKworQnVpbHQgT0sg b24gVk1TIDcuMi0xIHdpdGggTXVsdGlOZXQgNC40LiAgQnVpbHQgd2l0aCBhbmQgd2l0aG91dCBP cGVuU1NMIG9uCitMaW51eCBPSywgZGl0dG8gU29sYXJpcyA5LiAgQnVpbHQgT0sgb24gUkggTGlu dXggQVM0IG9uIFg4Nl82NCAoNjQtYml0KTsKKyJzaG93IHZhciBmc2l6ZSIgKHVzaW5nIG5ldyBj a2ZzdG9hKCkpIHdvcmtzIE9LIHRoZXJlLiAgQWxzbyBNYWMgT1MgWCAxMC4zLjkKKygzMi1iaXQp LCBUcnU2NCBVTklYIDQuMEYgKDY0LWJpdCksIEhQLVVYIDExaXYyICg2NC1iaXQpIChwaWNreSBu ZXcgY29tcGlsZXIKK3NwZXdzIG91dCB0b25zIG9mIHVzZWxlc3Mgd2FybmluZ3MpLCBGcmVlQlNE IDYuMCBvbiBpYTY0ICg2NC1iaXQpLgorCistLS0gRGV2LjA3IC0tLQorCitDaGFuZ2VkICJtYWtl IG5ldGJzZCIgdG8gYmUgYSBzeW5vbnltIGZvciAibWFrZSBuZXRic2QyIiBiZWNhdXNlIHRoZQor b3JpZ2luYWwgbmV0YnNkIHRhcmdldCB3YXMgYW5jaWVudC4gIFJlbmFtZWQgaXQgdG8gbmV0YnNk LW9sZC4gIG1ha2VmaWxlLAorMyBEZWMgMjAwNS4KKworVXBkYXRlZCBJTlBVVCBhbmQgTUlOUFVU IGhlbHAgdGV4dC4gIGNrdXVzMi5jLCAzIERlYyAyMDA1LgorCitEaXNjb3ZlcmVkIHRoYXQgb24g YSBTRVQgUE9SVCAvU1NMIGNvbm5lY3Rpb24sIEtlcm1pdCB0cmVhdHMgaW5jb21pbmcKKzB4ZmYg ZGF0YSBieXRlcyAoZS5nLiBzZW50IGZyb20gdGhlIFBPUCBzZXJ2ZXIpIGFzIElBQ3MgYW5kIGdv ZXMgaW50byBUZWxuZXQKK25lZ290aWF0aW9ucy4gIEplZmYgc2F5cyAiWW91IHdpbGwgbmVlZCB0 byBpbXBsZW1lbnQgTlBfU1NMUkFXIGFuZCBOUF9UTFNSQVcKK3RoYXQgZG8gdGhlIHNhbWUgYXMg TlBfVENQUkFXIGJ1dCBuZWdvdGlhdGUgU1NMIG9yIFRMUyBhcyBhcHByb3ByaWF0ZS4iCitUaGlz IHdhcyBub3QgYXMgZWFzeSBhcyBpdCBzb3VuZGVkLCBiZWNhdXNlIGFwcGFyZW50bHkgYSBsb3Qg b2YgdGhlIFRlbG5ldAorY29kZSBpcyB1c2VkIGJ5IFNTTCBhbmQgVExTIGV2ZW4gd2hlbiBUZWxu ZXQgcHJvdG9jb2wgaXMgbm90IGJlaW5nIGV4ZWN1dGVkLgorSSB3b3VuZCB1cCBkb2luZyB0aGlz IGFzIGZvbGxvd3M6IEkgYWRkZWQgL1NTTC1SQVcgYW5kIC9UTFMtUkFXIHRvIHRoZQorc3dpdGNo IHRhYmxlLiAgUmF0aGVyIHRoYW4gZGlzYWJsZSBUZWxuZXQsIHRoZXkgZG8gZXhhY3RseSB3aGF0 IHRoZSAvU1NMIGFuZAorL1RMUyBzd2l0Y2hlcyBkbywgYnV0IGFsc28gc2V0IGEgc3BlY2lhbCBm bGFnLiAgVGhpcyBmbGFnIGlzIGNoZWNrZWQgaW4gb25seQordHdvIHBsYWNlOiBuZXRjbG9zKCkg KHRvIHByZXZlbnQgS2VybWl0IGZyb20gc2VuZGluZyBURUxORVQgTE9HT1VUIHdoZW4KK2Nsb3Np bmcgdGhlIGNvbm5lY3Rpb24pLCBhbmQgdG5fZG9vcCgpICh0byBwcmV2ZW50IEtlcm1pdCBmcm9t IHJlYWN0aW5nIHRvCitpbmNvbWluZyBJQUNzOyBpdCBtYWtlcyB0bl9kb29wKCkgcmV0dXJuKDMp LCB3aGljaCBtZWFucyAicXVvdGVkIElBQyIsIHdoaWNoCitjYXVzZXMgdGhlIGNhbGxlciB0byBr ZWVwIHRoZSBJQUMgYXMgZGF0YSkuICBja2NuZXQuaCwgY2tjdGVsLmgsIGNrY3RlbC5jLAorY2t1 dXM3LmMsIDQgRGVjIDIwMDUuCisKK1RoZSBJTlBVVCBjb21tYW5kIGRpZCBub3QgYWNjb3VudCBm b3IgdG5fZG9vcCgpIHJldHVybmluZyAzLiAgRml4ZWQgaW4KK2RvaW5wdXQoKSwgY2t1dXM0LmMs IDQgRGVjIDIwMDUuCisKK0FkZGVkIGFub3RoZXIgZGVidWcoKSBzdGF0ZW1lbnQgaW4gRlRQIHNl Y3VyZV9nZXRieXRlKCkgdG8gc2VlIHdoYXQncyBnb2luZyBvbgord2l0aCBNdWhhbWFkIFRhdWZp cSBUYWp1ZGRpbidzIDIwNS1ieXRlLXBlci1zZWNvbmQgRlRQL1NTTCBkb3dubG9hZHMsIHBsdXMK K25ldyBjb2RlIHRvIHRlc3QgU1NMX3JlYWQoKSdzIHJldHVybiBjb2RlIChieXRlIGNvdW50KTsg aWYgMCBkb24ndCB1cGRhdGUKK3RoZSBzY3JlZW4uICBja2NmdHAuYywgNCBEZWMgMjAwNS4KKwor LS0tIERldi4wOCAtLS0KKworRml4ZWQgYSB0eXBvIGluIHRoZSBub24tQU5TSUMgZGVmaW5pdGlv biBvZiBja2ZzdG9hKCkuICBja2NsaWIuYywgNyBEZWMgMjAwNS4KKworT3VyIEN0cmwtQyB0cmFw ICh0aGUgT05fQ1RSTEMgbWFjcm8pIHdhc24ndCB3b3JraW5nIGZvciBrZXJiYW5nIGZpbGVzLgor UmVhcnJhbmdlZCBzb21lIGNvZGUgdG8gbWFrZSBpdCB3b3JrLiAgY2tjbWFpLmMsIDggRGVjIDIw MDUuCisKK1N0YXJ0ZWQgY29udmVydGluZyBjb2RlIHRvIHVzZSBDS19PRkZfVCBmb3IgZmlsZSBz aXplcyBhbmQgb2Zmc2V0cywgYW5kCithbGwgW3NdcHJpbnRmJ3MgdG8gcmVwbGFjZSAiJWxkIiBv ciB3aGF0ZXZlciB3aXRoICIlcyIsIGFuZCB0aGUgc2l6ZQordmFyaWFibGUgd2l0aCBhIGNhbGwg dG8gY2tmc3RvYSgpLiAgU2luY2UgSSBoYXZlbid0IGFjdHVhbGx5IGNoYW5nZWQgdGhlCitkZWZp bml0aW9uIG9mIENLX09GRl9UIGZyb20gd2hhdCBhbGwgdGhlIHNpemUgdmFyaWFibGVzIHdlcmUg dG8gYmVnaW4KK3dpdGggKGkuZS4gbG9uZyksIGl0IHNob3VsZG4ndCBkbyBhbnkgaGFybS4gIFNv IGZhciBqdXN0IGNrY2ZuMy5jCisxMCBEZWMgMjAwNS4KKworQW4gdXBkYXRlZCBIUC1VWCA5Lnh4 IG1ha2VmaWxlIHRhcmdldCBmcm9tIFBldGVyRSB0byBmaXggYSBjb3JlIGR1bXAgdGhhdAoraGFw cGVucyBvbiB0aGF0IHBsYXRmb3JtIGR1ZSB0byBpbnN1ZmZpY2llbnQgcmVzb3VyY2VzLiAgMTQg RGVjIDIwMDUuCisKK0FkZGVkIGRlYnVnKCkgc3RhdGVtZW50cyB0byBodHRwX2JsYWgoKSByb3V0 aW5lcyB0byB0ZWxsIHdoZXRoZXIgdGhlCitjb25uZWN0aW9uIGlzICJjaHVua2VkIi4gIFRoZXJl IHNlZW1zIHRvIGJlIGEgYmFkIHBlcmZvcm1hbmNlIHByb2JsZW0uCitja2NuZXQuYywgMTQgRGVj IDIwMDUuCisKK1BldGVyRSBjb21wbGFpbmVkIGFib3V0IHVnbHkgRElSRUNUT1JZIGVycm9yIG1l c3NhZ2UsID9ObyBmaWxlcyBtYXRjaCAtCisie2JsYWh9Ii4gIFRoZSBicmFjZXMgYXJlIHVzZWQg aW50ZXJuYWxseSBpbiBjYXNlIHRoZSB1c2VyIHR5cGVkIG1vcmUgdGhhbgorb25lIGZpbGVzcGVj LiAgSSBjaGFuZ2VkIHRoZSBlcnJvciBtZXNzYWdlIHRvIHJlbW92ZSB0aGVtLiAgRGl0dG8gREVM RVRFLgorY2t1dXM2LmMsIDE1IERlYyAyMDA1LgorCitUaGUgcHJvYmxlbSB3aXRoIEhUVFAgZG93 bmxvYWRzIGlzIHRoYXQgS2VybWl0IGFsd2F5cyBkb2VzIHNpbmdsZS1jaGFyYWN0ZXIKK3JlYWQo KSBvciBzb2NrZXRfcmVhZCgpIGNhbGxzIChvciB0aGUgU1NMIGVxdWl2YWxlbnQpOyBzZWUgaHR0 cF9pbmMoKS4gIEkKK2FkZGVkIGJ1ZmZlcmluZyBjb2RlIGZvciBub24tU1NMIGNvbm5lY3Rpb25z IG9ubHkgYnV0IGl0J3MgZ3Jvc3MgYmVjYXVzZSBpdAoraGFzIHRvIHN3YXAgdHR5ZmQgYW5kIGh0 dHBmZCBiZWZvcmUgY2FsbGluZyBuZXR0Y2hrKCkuICBJIHRyaWVkIG1ha2luZyBhCituZXR0Y2hr KCkgY2xvbmUgdGhhdCBhY2NlcHRzIGEgZmlsZSBkZXNjcmlwdG9yIGFzIGFuIGFyZ3VtZW50IGJ1 dCBpdCBkaWRuJ3QKK3dvcmsgYmVjYXVzZSB0b28gbWFueSBvdGhlciByb3V0aW5lcyB0aGF0IGFy ZSBpbnZva2VkIGRpcmVjdGx5IG9yIGltcGxpY2l0bHkKK2J5IG5ldHRjaGsoKSAoc3VjaCBhcyBp bl9jaGsoKSkgYXJlIHN0aWxsIGhhcmR3aXJlZCB0byB1c2UgdHR5ZmQuICBIVFRQIEdFVHMKK2Fy ZSBub3cgMjAgdGltZXMgZmFzdGVyIG9uIHRoZSBsb2NhbCBuZXR3b3JrICh0aGUgaW1wcm92ZW1l bnQgaXMgbGVzcworZHJhbWF0aWMgb3ZlciBhIGNsb2dnZWQgSW50ZXJuZXQpLiAgY2tjbmV0Lltj aF0sIDE1IERlYyAyMDA1LgorCistLS0gRGV2LjA5IC0tLQorCitIVFRQIGZpbGUtZGVzY3JpcHRv ciBzd2FwcGluZyBpcyBub3QgdGhyZWFkIHNhZmUuICBEb2luZyBpdCByaWdodCwgb2YKK2NvdXJz ZSwgaXMgYSBiaWcgZGVhbCwgc28gZm9yIG5vdyBJIGp1c3QgZG9uJ3QgZGVmaW5lIEhUVFBfQlVG RkVSSU5HIGZvcgorV2luZG93cy4gIGNrY25ldC5jLCAxNSBEZWMgMjAwNS4KKworTm90aWNlZCB0 aGF0IEhUVFAgbm90IGluY2x1ZGVkIGluIEZyZWVCU0QgYW5kIE9wZW5CU0QgYnVpbGRzLiAgRml4 ZWQgaW4KK2NrY2RlYi5oLCAyMiBEZWMgMjAwNS4KKworRmxlc2hlZCBvdXQgMzIvNjQtYml0IGRh dGEgdHlwZSBkZWZpbml0aW9ucyBhbmQgY2hhbmdlZCBzdHJ1Y3QgemF0dHIKKyhmaWxlIGF0dHJp YnV0ZSBzdHJ1Y3R1cmUpIG1lbWJlcnMgbGVuZ3RoIGFuZCBsZW5ndGhrIHRvIGhhdmUgdGhlIG5l dworQ0tfT0ZGX1QgdHlwZS4gIENoYW5nZWQgZmluYWwgYXJndW1lbnRzIG9mIGRlYnVnKCkgYW5k IHRsb2coKSB0byBiZSB0aGUgbmV3CitMT05HTE9ORyB0eXBlLiAgY2tjZGViLmgsIDIyIERlYyAy MDA1LgorCitDaGFuZ2VkIGNrZnN0b2EoKSB0byByZXR1cm4gYSBzaWduZWQgbnVtYmVyIGluIHN0 cmluZyBmb3JtLCByYXRoZXIgdGhhbiBhbgordW5zaWduZWQgb25lLiAgVGhhdCdzIGJlY2F1c2Ug b2ZmX3QgaXMgc2lnbmVkICh0aGFuayBnb29kbmVzcykuICBBZGRlZCB0aGUKK2ludmVyc2UgZnVu Y3Rpb24sIGNrYXRvZnMoKSBzbyB3ZSBjYW4gY29udmVydCBmaWxlIHNpemVzIGFuZCBvZmZzZXRz IGJhY2sKK2FuZCBmb3J0aCBiZXR3ZWVuIGJpbmFyeSBudW1iZXIgYW5kIHN0cmluZy4gIGNrY2xp Yi5jLCAyMiBEZWMgMjAwNS4KKworQ2hhbmdlZCBBdHRyaWJ1dGUgUGFja2V0IHJlYWRlciB0byBj b252ZXJ0IGluY29taW5nIGZpbGUgc2l6ZSBhdHRyaWJ1dGUKK3dpdGggY2thdG9mcygpIHJhdGhl ciB0aGFuIGF0b2woKS4gIGNrY2ZuMy5jLCAyMiBEZWMgMjAwNS4KKworQ29udmVydGVkIGRlYnVn KCksIHRsb2coKSwgY2tzY3JlZW4oKSwgZXRjLCB0byBoYW5kbGUgcG90ZW50aWFsbHkgImxvbmcg bG9uZyIKK2FyZ3VtZW50cyBieSBtYWtpbmcgdGhlaXIgIm4iIGFyZ3VtZW50IENLX09GRl9ULiAg Y2t1dXN4LmMsIGNrY2RlYi5oLAorMjIgRGVjIDIwMDUuCisKK0NvbnZlcnRlZCB0aGUgcmVzdCBv ZiB0aGUgc291cmNlIGZpbGVzIHRvIHVzZSBDS19PRkZfVCBmb3IgYWxsIGZpbGUgc2l6ZQorYW5k IG9mZnNldCBhbmQgYnl0ZS1jb3VudCByZWxhdGVkIHZhcmlhYmxlcywgYW5kIGNvbnZlcnRlZCBh bGwgcmVmZXJlbmNlcyB0bwordGhlc2UgdmFyaWFibGVzIGluIHByaW50ZnMgdG8gZ28gdGhyb3Vn aCBja2ZzdG9hKCkuICBUaGVuIEkgYnVpbHQgaXQgb24KK0xpbnV4L2kzODYgd2l0aDoKKworICBt YWtlIGxpbnV4ICJLRkxBR1M9LURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRT PTY0IgorCit3aGljaCBtYWtlcyBvZmZfdCBiZSA2NCBiaXRzIGFuZCBtYWdpY2FsbHkgbWFrZXMg YWxsIHRoZSByZWd1bGFyIGZpbGUgQVBJcwordXNlIDY0LWJpdCBzaXplcyBhbmQgb2Zmc2V0cyB3 aXRob3V0IGNoYW5naW5nIHRoZSBBUEkgY2FsbHMgaW4gdGhlIHNvdXJjZQorY29kZS4gIEl0J3Mg Z29pbmcgdG8gYmUgYSBsb3Qgb2Ygd29yayB0byBnZXQgdGhyb3VnaCBhbGwgdGhlIGtpbmtzIGJ1 dCBJIHdhcworYWJsZSB0byBzZW5kIGEgbG9uZyBmaWxlLCBkbyBkaXJlY3RvcnkgbGlzdGluZ3Mg b2YgbG9uZyBmaWxlcywgZG8KK1xmc2l6ZShsb25nZmlsZSksIGV0Yy4gIFdoZW4gaXQgc2VuZHMg YSBmaWxlLCB0aGUgbGVuZ3RoIGlzIHNob3duIGNvcnJlY3RseQoraW4gdGhlIEEgcGFja2V0LiAg SWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHN1cHBvcnQgYmlnIG51bWJlcnMsIGl0IHJlY2VpdmVz Cit0aGUgZmlsZSBPSyBhbnl3YXksIHdpdGhvdXQgc2hvd2luZyB0aGUgc2l6ZSwgdGhlIHRoZXJt b21ldGVyLCBvciBwZXJjZW50Citkb25lIChhbmQgdGhlbiB3aWxsIGdldCBhbiBlcnJvciB3aGVu IHRoZSBmaWxlIGtlZXBzIGNvbWluZyBhZnRlciB0aGUgMkcKK21hcmspLiAgS2VybWl0IDk1IGFj dHVhbGx5IHJlZnVzZXMgbG9uZyBmaWxlcyBmb3IgIlNpemUiLCBidXQgb25seSBpZiB0aGUKK2Fu bm91bmNlZCBpcyBsZXNzIHRoYW4gMl42MyBieXRlcy4gIFdoZW4gdG9kYXkncyBMaW51eCB2ZXJz aW9uIHJlY2VpdmVzIGEKK2ZpbGUsIGl0IHNob3dzIHRoZSBsZW5ndGggY29ycmVjdGx5IGluIHRo ZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXksIGFzIHdlbGwgYXMKK3BlcmNlbnQgZG9uZSwgdGhlcm1v bWV0ZXIsIGV0Yy4gIEFsc28gYnVpbHQgdGhpcyB2ZXJzaW9uIG9uIHRydWUgNjQtYml0CitMaW51 eCwgYW5kIGl0IHdvcmtlZCBmaW5lLiAgTWFueSBmaWxlcyBjaGFuZ2VkLCAyMiBEZWMgMjAwNS4K KworRm9yIHRoZSByZWNvcmQsIHRoaXMgQVBJIGlzIHNwZWNpZmllZCBpbiBYL09wZW4ncyBTaW5n bGUgVU5JWCBTcGVjaWZpY2F0aW9uCitWZXJzaW9uIDIsIHdoaWNoIGlzIGJyYW5kZWQgYXMgVU5J WCA5OC4gIEl0IGlzIGNhbGxlZCBMYXJnZSBGaWxlIFN1cHBvcnQsIG9yCitMRlMsIGFuZCB3YXMg ZGV2ZWxvcGVkIGF0IHRoZSBMYXJnZSBGaWxlIFN1bW1pdC4KKworSXQgbG9va3MgbGlrZSB0aGUg b3BlcmF0aXZlIGZlYXR1cmUtdGVzdCBtYWNybyBpbiBnbGliYyBmb3IgdHJhbnNpdGlvbmFsCits YXJnZSBmaWxlIHN1cHBvcnQgaXMgX19VU0VfTEFSR0VGSUxFNjQuICBTbyBpZiB0aGlzIGlzIGRl ZmluZWQsIHdlIGNhbiBhbHNvCitzdXBwbHkgX0xBUkdFRklMRV9TT1VSQ0UgYW5kIF9GSUxFX09G RlNFVF9CSVRTPTY0IGF1dG9tYXRpY2FsbHkgZm9yIDMyLWJpdAorTGludXggYnVpbGRzLiAgQnV0 IHRoZXJlJ3MgYSBDYXRjaC0yMiwgeW91IGRvbid0IGtub3cgaWYgdGhpcyBpcyBkZWZpbmVkCit1 bnRpbCB5b3UgcmVhZCB0aGUgaGVhZGVyIGZpbGVzLCBidXQgeW91IGhhdmUgdG8gZGVmaW5lIF9M QVJHRUZJTEVfU09VUkNFCithbmQgX0ZJTEVfT0ZGU0VUX0JJVFMgYmVmb3JlIHlvdSByZWFkIHRo ZSBoZWFkZXIgZmlsZXMuICBNYXliZSBpdCdzIGdvb2QKK2Vub3VnaCB0byBncmVwIHRocm91Z2gg PGZlYXR1cmVzLmg+IGZvciBfX1VTRV9MQVJHRUZJTEU2NC4gIG1ha2VmaWxlLAorMjMgRGVjIDIw MDUuCisKK0NoZWNrZWQgdGhpcyBvbiB0cnVlIDY0LWJpdCBMaW51eC4gIFRoZSBzYW1lIHN5bWJv bHMgYXJlIGRlZmluZWQgaW4gQ0ZMQUdTLAorYnV0IHRoZXkgZG8gbm8gaGFybTsgaXQgYnVpbGRz IHdpdGhvdXQgY29tcGxhaW50IGFuZCB3b3JrcyBmaW5lLiAgMjQgRGVjIDIwMDUuCisKK0J1aWx0 IGl0IG9uIFJlZCBIYXQgTGludXggNi4xIGZyb20gMTk5OS4gIFRoaXMgcGlja2VkIHVwIHRoZSBs b25nIGZpbGUKK3N1cHBvcnQgdG9vLiAgR3Vlc3MgNi4xIGlzbid0IG9sZCBlbm91Z2ggdG8gbm90 IGhhdmUgaXQhICBLZXJtaXQgc2VlbXMgdG8KK3dvcmsgT0sgb24gcmVndWxhciBmaWxlcyBidXQg SSBkb24ndCBoYXZlIGVub3VnaCBkaXNrIHNwYWNlIHRvIGNyZWF0ZSBhIGxvbmcKK2ZpbGUsIGFu ZCBteSBiaWdmaWxlLmMgcHJvZ3JhbSAod2hpY2ggY3JlYXRlcyBhIGxvbmcgZmlsZSBjb250YWlu aW5nIG9ubHkgMQorYnl0ZSkgZG9lc24ndCB3b3JrICgiZnNlZWtvOiBpbnZhbGlkIGFyZ3VtZW50 IikuICBJdCBsb29rcyBsaWtlIHBhcnRzIG9mCit0aGlzIEFQSSB3ZXJlIHZpc2libGUgaW4gTGlu dXggYmVmb3JlIHRoZXkgd2VyZSBhY3R1YWxseSB3b3JraW5nLgorMjQgRGVjIDIwMDUuCisKK0Nv bnZlcnRlZCBhbGwgZnNlZWsoKSBhbmQgZnRlbGwoKSB0byBtYWNyb3MgdGhhdCBleHBhbmQgdG8g ZnNlZWsoKSBhbmQgZnRlbGwoKQorb3IgZnNlZWtvKCkgYW5kIGZ0ZWxsbygpIGRlcGVuZGluZyBv biB3aGV0aGVyIF9MQVJHRUZJTEVfU09VUkNFIGlzIGRlZmluZWQuCitja3VmaW8uYywgY2t1dXM3 LmMsIGNrdXVzeC5jLCAyNCBEZWMgMjAwNS4KKworTWFkZSBhIENLX09GRl9UIHZlcnNpb24gb2Yg Y21udW0oKS4gIEl0IHdvdWxkIGJlIGEgdmVyeSBiaWcgZGVhbCB0byBqdXN0CitjaGFuZ2UgY21u dW0oKSB0byByZXR1cm4gYSBuZXcgdHlwZSwgc28gYW5vdGhlciBpZGVhIGlzIHRvIHJlbmFtZSBj bW51bSgpIHRvCitzb21ldGhpbmcgZWxzZSwgY21udW13KCksIGNoYW5nZSBpdHMgcmVzdWx0IGFy Z3VtZW50IHRvIENLX09GRl9ULCBhbmQgdGhlbgorbWFrZSBhIHN0dWIgY21udW0oKSB0byBjYWxs IGl0IHRvIGdldCBhbiBpbnQsIHRoZW4gY2FsbCBjbW51bXcoKSBleHBsaWNpdGx5CithbnkgdGlt ZSB3ZSBuZWVkIGEgYmlnIG51bWJlci4gIGNrdWNtZC5jLCAyNCBEZWMgMjAwNS4KKworQ2FsbGlu ZyBjbW51bXcoKSBkaXJlY3RseSByZXF1aXJlcyBjaGFuZ2VzIHRvIGVhY2ggcm91dGluZSB0aGF0 IHVzZXMgaXQuCitUaGUgSU5DUkVNRU5UIGFuZCBERUNSRU1FTlQgY29tbWFuZHMsIGZvciBleGFt cGxlLCByZXF1aXJlZCBjaGFuZ2VzIHRvCitkb2luY3IoKSwgdmFydmFsKCksIGFuZCBpbmN2YXIo KSwgYW5kIGFsbCByZWZlcmVuY2VzIHRvIHRoZW0uICBja3V1c3IuW2NoXSwKK2NrdXVzWzU2XS5j LCAyNCBEZWMgMjAwNS4KKworQ2FsbGluZyBjbW51bXcoKSBpbiBjaGFpbmVkIEZEQnMgcmVxdWly ZWQgZGVmaW5pbmcgYSBuZXcgZnVuY3Rpb24gY29kZSwKK19DTU5VVywgYWRkaW5nIGEgbmV3IG1l bWJlciB0byB0aGUgT0ZEQiBzdHJ1Y3QgZm9yIHJldHVybmluZyB3aWRlIHJlc3VsdHMsCithbmQg YWRkaW5nIGEgbmV3IGNhc2UgdG8gY21mZGIoKS4gIGNrdWNtZC5bY2hdLCAyNCBEZWMgMjAwNS4K KworQ2hhbmdlZCBGU0VFSyBhbmQgRkNPVU5UIHRvIHVzZSB0aGUgbmV3IGNoYWluZWQgRkRCIGlu dGVyZmFjZSwgbm93IHdlIGNhbgorc2VlayBhbmQgbG9vayBwYXN0IDJHQi4gIGNrdXVzNy5jLCAy NCBEZWMgMjAwNS4KKworTmV4dCBjb21lIHN3aXRjaGVzLCB3aGljaCBzdG9yZSB0aGVpciByZXN1 bHRzIGluIGEgc3RydWN0IHN0cmluZ2ludC4gIFRoaXMKK3N0cnVjdCB3YXMgZGVmaW5lZCBpbiBl YWNoIG1vZHVsZSB3aGVyZSBpdCB3YXMgdXNlZCAoY2t1dXNbcjM2N10uYywgY2tjZnRwLmMpLgor SSBtb3ZlZCB0aGUgZGVmaW5pdGlvbiB0byBja3V1c3IuaCBhbmQgYWRkZWQgYSB3dmFsIG1lbWJl ciwgd2hpY2ggY2FuIGJlCityZWZlcmVuY2VkIGJ5IGFueSBzd2l0Y2gtcGFyc2luZyBjb2RlIHRo YXQgY2FsbHMgY21udW13KCkuICAyNCBEZWMgMjAwNS4KKworQ2hhbmdlZCBTRU5EIC9DQUxJQlJB VEU6biB0byBhbGxvdyBiaWcgdmFsdWVzIG9mIG4uICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlCit0 byB0ZXN0IHRoZSBwcm90b2NvbCBhc3BlY3RzIG9mIGxvbmctZmlsZSB0cmFuc2ZlciB3aXRob3V0 IGFjdHVhbGx5IGhhdmluZyBhCitsb25nIGZpbGUgaGFuZHkuICBja3V1c3IuYywgMjQgRGVjIDIw MDUuCisKK1NFTkQgL1NNQUxMRVItVEhBTjpuLCBTRU5EIC9MQVJHRVItVEhBTjpuLCBhbmQgYW5k IFNFTkQgL1NUQVJUOm4gYWxzbyBub3cKK2FsbG93IGxhcmdlIHZhbHVlcyBvZiBuLiAgY2t1dXNy LmMsIDI0IERlYyAyMDA1LgorCitDaGFuZ2VkIHRoZSBhbGdlYnJhaWMgZXhwcmVzc2lvbiBldmFs dWF0b3IgdG8gdXNlIHdpZGUgdmFsdWVzLgorY2t1dXM1LmMsIDI0IERlYyAyMDA1LgorCitGaXhl ZCBja2ZzdG9hKCkgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW4gbiBpcyBuZWdhdGl2ZSBhbmQgKDAg LSBuKSBpcyBhbHNvCituZWdhdGl2ZSwgd2hpY2ggaGFwcGVucyBmb3IgbnVtYmVycyAyXihuLTEp IG9yIGdyZWF0ZXIsIHdoZXJlIG4gaXMgdGhlCitudW1iZXIgb2YgYml0cyBpbiB0aGUgd29yZCBz aXplIHdlJ3JlIGRlYWxpbmcgd2l0aCwgZS5nLiA2NCwgaW4gd2hpY2ggY2FzZQorMl42MyBoYXMg aXRzIHNpZ24gYml0IHNldCBzbyBzZWVtcyB0byBiZSBuZWdhdGl2ZS4gIEluIHN1Y2ggY2FzZXMs IGNrZnN0b2EoKQorcmV0dXJucyAiT1ZFUkZMT1ciIGluc3RlYWQgb2YgYSBudW1lcmljIHN0cmlu Zy4gIFdlJ2xsIGhhdmUgdG8gc2VlIGhvdyB0aGlzCitwbGF5cyBvdXQgYnV0IEkgdGhpbmsgaXQn cyBiZXR0ZXIgdG8gY2F1c2UgYSBwYXJzZSBlcnJvciBhbmQgc3RvcCB0aGluZ3MKK2RlYWQgdGhh biB0byByZXR1cm4gYSBzcHVyaW91cyBudW1iZXIuICBja2NsaWIuYywgMjQgRGVjIDIwMDUuCisK K0NvbnZlcnRlZCB0aGUgUy1FeHByZXNzaW9uIGhhbmRsZXIgdG8gdXNlIHdpZGUgaW50ZWdlcnMu IGNrdXVzMy5jLCAyNCBEZWMgMjAwNS4KKworVG9vayBhbGwgdGhlIExPTkdMT05HIHN0dWZmIG91 dCBvZiBja2NkZWIuaCwgd2UgZG9uJ3QgbmVlZCBpdC4KKworQWxsIG9mIHRoZXNlIGNoYW5nZXMg cmVzdWx0IGluIDY0LWJpdCBhcml0aG1ldGljIChtb3JlIG9yIGxlc3MpIG9uIDMyLWJpdAorTGlu dXgsIGFzIHdlbGwgYXMgb24gdHJ1ZSA2NC1iaXQgcGxhdGZvcm1zLgorCitSZWJ1aWx0IHRvZGF5 J3MgY29kZSBvbiBTb2xhcmlzIDkgaW4gdGhlIDMyLWJpdCBhbmQgNjQtYml0IHdvcmxkcywgb24g UmVkCitIYXQgNi4xLCBSZWQgSGF0IEFTNC4yLiAgSSBoYXZlbid0IGJvdGhlcmVkIHRyeWluZyBh IDMyLzY0IGh5YnJpZCBidWlsZCBmb3IKK1NvbGFyaXMsIHNpbmNlIEkgY2FuIGJ1aWxkIGEgcHVy ZSA2NC1iaXQgdmVyc2lvbiB0aGVyZS4gIFF1aWNrIHRlc3RzIHNob3cKK3RoZSBsYXJnZS1udW1i ZXIgYXJpdGhtZXRpYyB3b3JrcyBPSyBpbiBhbGwgY2FzZXMgZXhjZXB0LCBvZiBjb3Vyc2UsIG9u IHB1cmUKKzMyLWJpdCBidWlsZHMgKHVuZm9ydHVuYXRlbHkgSSBjYW4ndCBmaW5kIGEgcnVubmlu ZyBMaW51eCBzeXN0ZW0gb2xkIGVub3VnaAordG8gdmVyaWZ5IHRoaXMgZm9yIExpbnV4LCBidXQg aXQncyB0cnVlIGZvciBvdGhlciAzMi1iaXQgcGxhdGZvcm1zKS4KKzI0IERlYyAyMDA1LgorCitU cmllZCBidWlsZGluZyBhIGh5YnJpZCB2ZXJzaW9uIG9uIFNvbGFyaXMgOSBhZnRlciBhbGwgc2lu Y2UgdGhlIExGUyBBUEkgaXMKK29zdGVuc2libHkgdGhlIHNhbWUgYXMgZm9yIExpbnV4OgorCisg bWFrZSBzb2xhcmlzOSAiS0ZMQUdTPS1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRf QklUUz02NCIKKworSXQgYnVpbHQgc21vb3RobHkgYW5kIHRoZSByZXN1bHRpbmcgYmluYXJ5IGlz IDIuNU1CIGNvbXBhcmVkIHRvIDMuNE1CIGZvcgordGhlIDEwMCUgNjQtYml0IHZlcnNpb24uICBM b29rcyBsaWtlIGEga2VlcGVyLiAgRm9yIG5vdywgYWRkZWQgc29sYXJpczlsZnMKK2FuZCBzb2xh cmlzMTBsZnMgZW50cmllcyB0byB0aGUgbWFrZWZpbGUgYnV0IGlmIHRoZXNlIHdvcmsgb24gUENz IHdlIGNhbgorbWFrZSB0aGVzZSB0aGUgcmVndWxhciBlbnRyaWVzIGZvciBTb2xhcmlzIDkgYW5k IDEwLiAgMjcgRGVjIDIwMDUuCisKK0J1aWx0IG9uIE1hYyBPUyBYIDEwLjQgd2l0aCB0aGUgcmVn dWxhciB0YXJnZXQuICBJdCBzZWVtcyB0aGF0IGluIHRoYXQgY2FzZSwKK29mZl90IGlzIDY0IGJp dHMgYW55d2F5LiAgTm90aWNlZCB0aGF0IGEgbG90IG9mIHN0dWZmIGRpZG4ndCB3b3JrLCBsaWtl CitleHBvbmVudGlhdGlvbiBpbiBTLUV4cHJlc3Npb25zLiAgVHJpZWQgYnVpbGRpbmcgaXQgYXMg YWJvdmUsIHdoaWNoIHdvcmtlZCwKK2FuZCBub3cgQ0tfT0ZGX1QgaXMgNjQgYml0cyBpbnN0ZWFk IG9mIDMyLCBidXQgKF4gMiAzMCkgaXMgc3RpbGwgMi4wLiAgSW4KK2ZhY3QgMi10by10aGUtYW55 LXBvd2VyIGlzIDIuMC4gIEl0IHNlZW1zIHRoYXQgdGhlIE1hYyBPUyBYIHZlcnNpb24gZGlkIG5v dAoraGF2ZSBGTkZMT0FUIGRlZmluZWQuICBJdCBhbHNvIHNlZW1zIHRoYXQgZXZlcnkgdGVzdCBp biBkb3NleHAoKSBsaWtlOgorCisgIGlmIChyZXN1bHQgIT0gZnByZXN1bHQpIGZwZmxhZysrOwor CitzaG91bGQgaGF2ZSBiZWVuIHByb3RlY3RlZCBieSAjaWZkZWYgRk5GTE9BVC4uI2VuZGlmIC8q IEZORkxPQVQgKi8gLS0gYQorZG91YmxlLWVuZGVkIGJyZWFrLCBhcyB0aGV5IHNheSBpbiB0aGUg bnVjbGVhciBwb3dlciBpbmR1c3RyeS4gIGNrdXVzMy5jLAorMjcgRGVjIDIwMDUuCisKK0FkZGVk IEdSRVAgL0VYQ0VQVDpwYXR0ZXJuLiAgY2t1dXNbMjZdLmMsIDI3IERlYyAyMDA1LgorCitGaXhl ZCBhIHByb2JsZW0gd2l0aCB1bmluaXRpYWxpemVkIHB2W10ud3ZhbCAoc3dpdGNoLXBhcnNpbmcg cGFyYW1ldGVyLXZhbHVlKQorbWVtYmVycyB0aGF0IHNob3dlZCB1cCBvbiBjZXJ0YWluIHBsYXRm b3JtcyBvciB3aXRoIGNlcnRhaW4gY29tcGlsZXJzLiAgTm93Cit0aGUgTWFjIE9TIFggMTAuNCB2 ZXJzaW9uIHdvcmtzLiAgY2t1dXNbcjM2N10uYywgY2tjZnRwLmMsIDI4IERlYyAyMDA1LgorCitC dWlsdCBvbiBVbml4d2FyZSA3LjEuMSwgYSBwdXJlIDMyLWJpdCBidWlsZCwgc2VlbXMgZmluZS4g IFJlYnVpbHQgb24gUmVkCitIYXQgQVMgNC4yIGp1c3QgdG8gbWFrZSBzdXJlIEkgZGlkbid0IGJy ZWFrIGFueXRoaW5nLCBpdCdzIE9LLiAgTm8gdGVzdGluZworb24gSFAtVVgsIGV0YywgYmVjYXVz ZSBIUCB0ZXN0ZHJpdmUgZmlsZSBzeXN0ZW0gaXMgZnVsbCwgY2FuJ3QgdXBsb2FkCithbnl0aGlu Zy4gIDI5IERlYyAyMDA1LgorCitDb21tZW50ZWQgb3V0IHRoZSBTSE9XIEZFQVRVUkVTIHNlY3Rp b24gdGhhdCBkaXNwbGF5cyBjb25zdGFudHMgbGlrZQorSU5UX01BWCwgQ0hBUl9NQVgsIGV0Yywg YmVjYXVzZSBwcmludGluZyBlYWNoIHZhbHVlIGluIHRoZSBhcHByb3ByaWF0ZQorZm9ybWF0IGlz IHRvbyB0cmlja3ksIGFuZCB3ZSBkb24ndCBuZWVkIHRoZW0gYW55d2F5LiAgY2t1dXM1LmMsIDI5 IERlYyAyMDA1LgorCitVcGRhdGVkIGNrdmZpby5jIHRvIHVzZSBDS19PRkZfVCBmb3IgdGhlIHJl bGV2YW50IHZhcmlhYmxlcy4gIEJ1aWx0IGFuZAordGVzdGVkIG9uIFZNUy9BbHBoYSA3LjI6IGZp bGUgdHJhbnNmZXIgaW4gcmVtb3RlIG1vZGU7IG1ha2luZyBhIFRlbG5ldAorY29ubmVjdGlvbiBh bmQgdGhlbiBsb2NhbC1tb2RlIGZpbGUgdHJhbnNmZXI7IFMtRXhwcmVzc2lvbnMsIGFsbCBPSy4g IEFsc28KK2J1aWx0IGEgbm8tbmV0IHZlcnNpb24gT0suICAyOSBEZWMgMjAwNS4KKworQnVpbHQg YW5kIHRlc3RlZCBvbiBSZWQgSGF0IEFTNCBBTUQgWDg2XzY0LCB1c2VkIGl0IHRvIHVwbG9hZCBu ZXcgc291cmNlcyB0bworRnJlZUJTRCA0LjExLiAgQnVpbHQgb24gRnJlZUJTRCA0LjExL2kzODYu ICBIZXJlJ3MgYW5vdGhlciBvbmUgd2hlcmUgb2ZmX3QKK2lzIDY0IGJpdHMsIGV2ZW4gdGhvdWdo IGxvbmcgaXMgMzIgYml0cy4gIEJ1dCBpdCBzZWVtcyB0byB3b3JrIG9rLCBub3Qgc3VyZQord2h5 LCB3aGVuIENLX09GRl9UIGlzIDMyIGJpdHMuICBUaGVyZSBpcyBubyBfTEFSR0VGSUxFX1NPVVJD RSBzdHVmZiBpbiB0aGUKK2hlYWRlciBmaWxlcy4gIDI5IERlYyAyMDA1LgorCitCdWlsdCBvbiBN YWMgT1MgWCAxMC4zLjkgdXNpbmcgdGhlIG5ldyBtYWNvc3gxMC40IHRhcmdldCB0byBwaWNrIHVw IExGUy4KK1dvcmtzIGZpbmUuCisKK0J1aWx0IG9uIFJlZCBIYXQgTGludXggNFdTIG9uIElBNjQg KDY0LWJpdCkuICBOb3cgdGhpcyBvbmUgaXMgb2RkLCBzdGF0KCkKK2ZhaWxzIG9uIGJpZyBmaWxl cy4gIEl0IGhhcHBlbnMgYWxzbyBpZiBJIHVzZSB0aGUgImxpbnV4bm9sZnMiIHRhcmdldCwgd2hp Y2gKK2RvZXMgbm90IGRlZmluZSBfVVNFX0xBUkdFRklMRSBvciBfRklMRV9PRkZTRVRfQklUUz02 NC4gIERJUkVDVE9SWSBCSUdGSUxFCitzaG93cyB0aGUgc2l6ZSBhcyAtMSwgYnV0IGlmICJsb2cg ZGVidWciLCBpdCBzYXlzICJubyBmaWxlcyBtYXRjaCIsIGkuZS4KK2RpZmZlcmVudCBiZWhhdmlv ciwgb2JzZXJ2ZXIgZWZmZWN0LiAgSSBoYXRlIHdoZW4gdGhhdCBoYXBwZW5zLgorCitMZXQncyBz ZWUgaWYgdGhhdCdzIGFuIGFub21hbHkuLi4gIEJ1aWx0IG9uIFRydTY0IFVuaXggNC4wRiAoNjQt Yml0IEFscGhhKS4KK0l0IHNlZXMgbG9uZyBmaWxlcyBqdXN0IGZpbmUuICBSZWJ1aWx0IGFuZCBj aGVja2VkIG9uIHg4Nl82NCBhZ2Fpbi4uLiBmaW5lLgorT0ssIGxldCdzIG5vdCB3b3JyeSBhYm91 dCBJQTY0IHlldC4KKworQW5vdGhlciBzbWFsbCBmaXggdG8gdGhlIEhQLVVYIDkuMCB0YXJnZXQg ZnJvbSBQZXRlckUuICBtYWtlZmlsZSwgMjkgRGVjIDIwMDUuCisKKy0tLURldi4xMC0tLQorCitD b2RlIGFkanVzdG1lbnRzIGZyb20gSmVmZiwgbWFpbmx5IHRvIHRoZSBTU0wgYW5kIFRMUyBSYXcg bW9kZSBjb2RlIGZyb20KK3NldmVyYWwgd2Vla3MgYWdvLCBwbHVzIGNoYW5naW5nIHNvbWUgZGF0 YSB0eXBlcyBpbiB0aGUgc2VjdXJpdHkgY29kZSB0bworQ0tfT0ZGX1QsIHBsdXMgYSBkaWZmZXJl bnQgZGF0YSB0eXBlIGZvciBDS19PRkZfVCBmb3IgSzk1IGJlY2F1c2UgV2luZG93cworc2l6ZV9U IGlzbid0IHNpZ25lZC4gIFRoaXMgcHJlc3VtYWJseSB3aWxsIGFsbG93IGxhcmdlLW51bWJlciBh cml0aG1ldGljIGJ1dAoraXQgd2lsbCBub3QgZ2l2ZSBsYXJnZSBmaWxlIGFjY2VzcyBiZWNhdXNl IHRoYXQgd2lsbCByZXF1aXJlIHJlcGxhY2luZyBhbGwgQworbGlicmFyeSBmaWxlIGkvbyBjYWxs cyAoZXNwLiBpbiBja29maW8uYykgd2l0aCBuYXRpdmUgV2luZG93cyBBUElzLiAgQnVpbGQKK29u IFNvbGFyaXMgOSB3aXRoIGFuZCB3aXRob3V0IFNTTCBhbmQgb24gTGludXggUkggQVM0LjIgd2l0 aCBhbmQgd2l0aG91dAorU1NMLiAgY2tfY3JwLmMsIGNrX3NzbC5jLCBja19zc2wuaCwgY2tjZGVi LmgsIGNrY2Z0cC5jLCBja2NtYWkuYywgY2tjbmV0LmMsCitja2NuZXQuaCwgY2tjdGVsLmMsIGNr dWF0Mi5oLCBja3V1czQuYywgY2t1dXM3LmMsIGNrdXVzci5jLCAzMCBEZWMgMjAwNS4KKworSXQg d2FzIHJlcG9ydGVkIHRoYXQgV1JJVEUgU0VTU0lPTiBhbHdheXMgcmV0dXJuZWQgYSBmYWlsdXJl IHN0YXR1cywgZXZlbgord2hlbiBpdCBzdWNjZWVkZWQuICBUaGUgcHJvYmxlbSB3YXMgdGhhdCBV bml4IHZlcnNpb25zIG9mIHpzb3V0KCkgYW5kCit6c291dGwoKSwgZm9yIHRoZSBzZXNzaW9uIGxv ZyBvbmx5LCB3ZXJlIHVzaW5nIHdyaXRlKCkgYW5kIHJldHVybmluZword3JpdGUoKSdzIHJldHVy biBjb2RlLCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSB3aGF0IHpzb3V0KCkgYW5kIHpzb3V0bCgp IGFyZQorZG9jdW1lbnRlZCB0byByZXR1cm4uICBBbHNvIHBsdWdnZWQgYSBjb3VwbGUgcG90ZW50 aWFsIGhvbGVzIGluIHpzb3V0eCgpCit0aGF0IEkgbm90aWNlZCB3aGlsZSBJIHdhcyBpbiB0aGUg bmVpZ2hib3Job29kLiAgY2t1ZmlvLmMsIDMwIERlYyAyMDA1LgorCitBZGRlZCBGU0VFSyAvRklO RDpwYXR0ZXJuLiAgVGhpcyBmb3JtIG9mIEZTRUVLIGFjY2VwdHMgYWxsIHRoZSBvdGhlcgorc3dp dGNoZXMgYW5kIGFyZ3VtZW50cyBhbmQgcGVyZm9ybXMgdGhlIGRlc2lyZWQgc2Vlay4gIFRoZW4s IGlmIHRoZSBzZWVrIHdhcworc3VjY2Vzc2Z1bCwgaXQgc3RhcnRzIGZyb20gdGhhdCBwb2ludCBh bmQgcmVhZHMgdGhyb3VnaCB0aGUgZmlsZSwgbGluZSBieQorbGluZSwgc2VhcmNoaW5nIGZvciB0 aGUgZmlyc3QgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcgb3IgbWF0Y2hlcwor dGhlIGdpdmVuICh1bmFuY2hvcmVkKSBwYXR0ZXJuIGFuZCwgaWYgZm91bmQsIHNldHMgdGhlIGZp bGUgcG9pbnRlciB0byB0aGUKK2JlZ2lubmluZyBvZiB0aGF0IGxpbmUuICBVc2VmdWwsIGUuZy4s IGZvciB2ZXJ5IGxvbmcgdGltZXN0YW1wZWQgbG9ncywgd2hlcmUKK3lvdSB3YW50IHRvIHN0YXJ0 IHByb2Nlc3NpbmcgYXQgYSBjZXJ0YWluIGRhdGUgb3IgdGltZTsgc2VhcmNoaW5nIGZvciBhCitw YXJ0aWN1bGFyIHN0cmluZyBpcyBtdWNoIGZhc3RlciB0aGFuIGRvaW5nIGRhdGUgY29tcGFyaXNv bnMgb24gZWFjaCBsaW5lLgorY2t1dXNbMjddLmMsIDMwIERlYyAyMDA1LgorCitJdCB3YXMgYW5u b3lpbmcgbWUgdGhhdCBGSUxFIFNUQVRVUyAoRlNUQVRVUykgcmVxdWlyZWQgYSBjaGFubmVsIG51 bWJlciB0bworYmUgZ2l2ZW4gZXZlbiBpZiBvbmx5IG9uZSBmaWxlIHdhcyBvcGVuLCBzbyBJIHN1 cHBsaWVkIHRoZSBjb3JyZWN0IGRlZmF1bHQKK2luIHRoYXQgY2FzZS4gIGNrdXVzNy5jLCAzMCBE ZWMgMjAwNS4KKworSU5QVVQgL05PV1JBUCwgYWRkZWQgcmVjZW50bHksIGlzIHVzZWQgZm9yIGVm ZmljaWVudGx5IGNvcHlpbmcgdGhlIElOUFVUCitzdHJlYW0gaW50YWN0LCBidXQgaXQncyBub3Qg Z29vZCBmb3IgbWF0Y2hpbmcgYmVjYXVzZSBpZiB0aGUgSU5QVVQgdGFyZ2V0IGlzCiticm9rZW4g YmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBidWZmZXIgYW5kIHRoZSBiZWdpbm5pbmcg b2YgdGhlIG5leHQKK29uZSwgdGhlIGNvbnRleHQgaXMgbG9zdCBhbmQgdGhlIG1hdGNoIGRvZXMg bm90IG9jY3VyLiAgSSB0aG91Z2h0IG9mIHNldmVyYWwKK3dheXMgYXJvdW5kIHRoaXMsIGJ1dCB0 aGV5IGFsbCBpbnZvbHZlIHNhdmluZyBhIGh1Z2UgYW1vdW50IG9mIGNvbnRleHQgLS0KK29sZCBp bnB1dCBidWZmZXJzLCB0aGUgYXJyYXlzIG9mIHRhcmdldCBzdHJpbmdzIGFuZCBjb3JyZXNwb25k aW5nIG1hdGNoCitwb3NpdGlvbnMsIGV0Yy4gIFRoZSBhbHRlcm5hdGl2ZSBpcyBmYWlybHkgc2lt cGxlIGJ1dCBpdCdzIG5vdCB0cmFuc3BhcmVudAordG8gdGhlIHVzZXIuICBIZXJlJ3Mgd2hhdCBJ IGRpZCBpbiBhIFBPUCBzY3JpcHQ6CisKKyAgICAuZW9tIDo9ICJcMTNcMTAuXDEzXDEwIgorICAg IHNldCBmbGFnIG9mZiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRkxBRyBPTiA9IHN1Y2Nl c3MKKyAgICB3aGlsZSAoIG9wZW4gY29ubmVjdGlvbiAmJiBub3QgZmxhZyApIHsKKyAgICAgICAg Lm9sZGlucHV0IDo9IFxmcmlnaHQoXHYoaW5wdXQpLDgpICAjIFNhdmUgdGFpbCBvZiBwcmV2aW91 cyBJTlBVVCBidWZmZXIKKyAgICAgICAgaW5wdXQgL2NsZWFyIC9ub3dyYXAgNCBcbShlb20pICAg ICAjIEdldCBuZXcgSU5QVVQgYnVmZmVyCisgICAgICAgIGlmIHN1Y2Nlc3MgeyAgICAgICAgICAg ICAgICAgICAgICAgIyBJTlBVVCBtYXRjaGVkIC0gZ29vZAorICAgICAgICAgICAgLnMgOj0ge1xm cmVwbGFjZShcdihpbnB1dCksXG0oZW9tKSxcMTNcMTApfQorICAgICAgICAgICAgc2V0IGZsYWcg b24KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vIG1hdGNo CisgICAgICAgICAgICAucyA6PSBcdihpbnB1dCkgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0 YXJnZXQgY3Jvc3NlZCB0aGUgYm9yZGVyCisgICAgICAgICAgICAub2xkaW5wdXQgOj0gXG0ob2xk aW5wdXQpXGZzdWJzdHIoXHYoaW5wdXQpLDEsOCkKKyAgICAgICAgICAgIGlmIFxmaW5kZXgoXG0o ZW9tKSxcbShvbGRpbnB1dCkpIHNldCBmbGFnIG9uCisgICAgICAgIH0KKyAgICAgICAgLi4uCisg ICAgfQorCitJIHRoaW5rIHRoaXMgd2lsbCBiZSBlYXNpZXIgdG8gZXhwbGFpbiB0aGFuIGFueSBk YW5nZXJvdXMgYW5kIGdyb3Rlc3F1ZQorbWFnaWMgSSBtaWdodCBwdXQgaW50byBkb2lucHV0KCkg aXRzZWxmLiAgRm9yIG5vdywgYWRkZWQgYSBmZXcgd29yZHMgYWJvdXQKK3RoaXMgdG8gSEVMUCBJ TlBVVC4gIGNrdXVzMi5jLCAzMCBEZWMgMjAwNS4KKworQmFjayB0byB0aGUgcGF0dGVybiBtYXRj aGVyLiAgTm90aWNlZCB0aGF0ICJJRiBNQVRDSCBpbmRleC5odG1sIFthLWhqLXpdKiIKK3N1Y2Nl ZWRlZCB3aGVuIGl0IHNob3VsZCBoYXZlIGZhaWxlZC4gIEluIGNrbWF0Y2goKSwgdGhlIGNsaXN0 IHNlY3Rpb24KK25lZWRlZCBvbmUgbW9yZSBjbGF1c2U6IGl0IGNhbid0IGZsb2F0IHRoZSBwYXR0 ZXJuIGlmIGFuIGFzdGVyaXNrIGRvZXMgbm90CitvY2N1ciBpbiB0aGUgcGF0dGVybiBiZWZvcmUg dGhlIGNsaXN0LiAgVGhpcyBjaGFuZ2UgZml4ZXMgdGhlIHByb2JsZW0KK3dpdGhvdXQgYnJlYWtp bmcgYW55IG90aGVyIGNhc2VzIHRoYXQgd2VyZW4ndCBhbHJlYWR5IGJyb2tlbiwgbW9zdCBvZiB3 aGljaAoraW52b2x2ZSBzbGlzdHMsIGkuZS4ge3N0cmluZyxzdHJpbmcsc3RyaW5nLC4uLn0uICBj a2NsaWIuYywgMzAgRGVjIDIwMDUuCisKK1RyaWVkIEZTRUVLIC9GSU5EOiBvbiBhIGxhcmdpc2gg ZmlsZSAob3ZlciAxMDAsMDAwIGxpbmVzKSwgdXNpbmcgaXQgdG8gc2VlawordG8gYSBsaW5lIG5l YXIgdGhlIGVuZC4gIEl0IHRvb2sgMC43NTYgc2Vjb25kcywgY29tcGFyZWQgd2l0aCBVbml4IGdy ZXAsCit3aGljaCBkaWQgdGhlIHNhbWUgdGhpbmcgaW4gMC4xNTEgc2VjLiAgVGhhdCdzIGJlY2F1 c2UgQy1LZXJtaXQgaXMgdXNpbmcKK2NrbWF0Y2goKS4gIEJ1dCBpZiB0aGUgc2VhcmNoIHRhcmdl dCBpcyBub3QgYSBwYXR0ZXJuLCBpdCBzaG91bGQgYmUgYSBiaXQKK2Zhc3RlciB0byB1c2UgY2tp bmRleCgpLiAgWXVwLCAwLjU1NCBzZWMsIGEgMzYlIGltcHJvdmVtZW50LiAgQ2FuJ3QgZXhwZWN0 Cit0byBjb21wZXRlIHdpdGggZ3JlcCwgdGhvdWdoOyBpdCdzIGhpZ2hseSB0dW5lZCBmb3IgaXRz IHNpbmdsZSBwdXJwb3NlLgorY2tjbGliLltjaF0sIGNrdXVzNy5jLCAxIEphbiAyMDA2LgorCitV cGRhdGVkIHZpc2libGUgY29weXJpZ2h0IGRhdGVzIHRvIDIwMDY6IGNrY21haS5jLCBja3V1czIu YywgY2t1dXM1LmMsCisxIEphbiAyMDA2LgorCitOb3RpY2VkIHRoYXQgTmV0QlNEIDIuMC4zIGhh cyA2NC1iaXQgb2ZmX3QsIGFuZCB0aGF0IF9MQVJHRUZJTEVfU09VUkNFIGlzCittZW50aW9uZWQg aW4gPHN0ZGlvLmg+LiAgVHJpZWQgYnVpbGRpbmcgS2VybWl0IHdpdGggX0xBUkdFRklMRV9TT1VS Q0UgYWRkZWQKK3RvIENGTEFHUywgaXQncyBnb29kLiAgQWRkZWQgaXQgdG8gdGhlIG5ldGJzZCB0 YXJnZXQuICBtYWtlZmlsZSwgMSBKYW4gMjAwNi4KKworRml4ZWQgdHlwbywgI2lmZGVmIENLX05P TE9OR0xPTkcgaW4gY2t1dXM1LmMgc2hvdWxkIGhhdmUgYmVlbiAjaWZuZGVmCitDS19MT05HTE9O RyAod2hpY2gsIGl0IHR1cm5zIG91dCwgd2UgZG9uJ3QgdXNlIGFueXdheSkuICAyIEphbiAyMDA1 LgorCitPYnNlcnZlZCB0aGF0IEZyZWVCU0QgNC54IGhhcyBhIDY0LWJpdCBvZmZfdCwgYnV0IGRv ZXMgbm90IHVzZSB0aGUKK19MQVJHRUZJTEVfU09VUkNFIGNvbnZlbnRpb24uICBSZWFzb25pbmcg dGhhdCBhbGwgdmVyc2lvbnMgb2YgRnJlZUJTRCBoYXZlCitvZmZfdCAoSSB3YXMgYWJsZSB0byBj aGVjayBiYWNrIHRvIEZyZWVCU0QgMy4zKSwgSSBzaW1wbHkgI2RlZmluZSBDS19PRkZfVAordG8g YmUgb2ZmX3QgaW4gY2tjZGViLmggd2l0aGluICNpZmRlZiBfX0ZyZWVCU0RfXyAuLiAjZW5kaWYu ICBBbm90aGVyIG9uZQorZG93bi4gIFRoaXMgY2FuIGJlIGRvbmUgZm9yIGFueSBwbGF0Zm9ybSB0 aGF0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBvZmZfdC4KK1R1cm5zIG91dCBGcmVlQlNEIDMuMyBo YXMgNjQtYml0IG9mZl90IHRvby4gIDIgSmFuIDIwMDUuCisKK09wZW5CU0QsIHNhbWUgYXMgRnJl ZUJTRC4gIEFsc28sIGFkZGVkIE9TLXZlcnNpb24tZ2V0dGluZyB0aGluZyB0byBtYWtlZmlsZQor dGFyZ2V0IGZvciB0aGUgcHJvZ3JhbSBoZXJhbGQsIGFzIGluIHRoZSBvdGhlciBCU0RzLiAgQnVp bHQgb24gT3BlbkJTRCAyLjUKK2Zyb20gMTk5OCwgaXQgaGFzIDY0LWJpdCBvZmZfdCB0b28uICBj a2NkZWIuaCwgbWFrZWZpbGUsIDIgSmFuIDIwMDUuCisKK0R1bXBpbmcgdGhlIGNvbW1hbmQgc3Rh Y2sgZXZlcnkgdGltZSB0aGVyZSdzIGFuIGVycm9yIGlzIHJlYWxseSB0b28gbXVjaC4KK0kgYWRk ZWQgU0VUIENPTU1BTkQgRVJST1ItRElTUExBWSB7MCwxLDIsM30gdG8gc2V0IHRoZSB2ZXJib3Np dHkgbGV2ZWwgb2YKK2Vycm9yIG1lc3NhZ2VzLiAgT25seSBsZXZlbCAzIGR1bXBzIHRoZSBzdGFj ay4gIGNrdXVzWzIzNV0uYywgMiBKYW4gMjAwNS4KKworQnVpbHQgb24gSFAtVVggMTEuMTEgd2l0 aCBfTEFSR0VGSUxFX1NPVVJDRSBhbmQgX0ZJTEVfT0ZGU0VUX0JJVFM9NjQuICBUaGUKK3Jlc3Vs dCB3b3JrcyBmaW5lIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiAgSXQgc2VlcyBiaWcgZmlsZXMsIGl0 IGNhbiBvcGVuCit0aGVtLCBzZWVrIHRvIHBvc2l0aW9ucyBwYXN0IHRoZSAyXjMxIGJvdW5kYXJ5 LiAgSXQgY2FuIHNlbmQgbGFyZ2UgZmlsZXMuCitJdCBjYW4gZG8gbGFyZ2UtbnVtYmVyIGFyaXRo bWV0aWMgKF4gMiA2MikuICBUaGUgb25seSBwcm9ibGVtIGlzIHRoYXQgZHVyaW5nCitjb21waWxh dGlvbiwgZXZlcnkgc2luZ2xlIG1vZHVsZXMgd2FybnM6CisKKyAgY2M6ICIvdXNyL2luY2x1ZGUv c3lzL3NvY2tldC5oIiwgbGluZSA1MDQ6IHdhcm5pbmcgNTYyOiBSZWRlY2xhcmF0aW9uIG9mCisg ICJzZW5kZmlsZSIgd2l0aCBhIGRpZmZlcmVudCBzdG9yYWdlIGNsYXNzIHNwZWNpZmllcjogInNl bmRmaWxlIiB3aWxsIGhhdmUKKyAgaW50ZXJuYWwgbGlua2FnZS4KKyAgY2M6ICIvdXNyL2luY2x1 ZGUvc3lzL3NvY2tldC5oIiwgbGluZSA1MDU6IHdhcm5pbmcgNTYyOiBSZWRlY2xhcmF0aW9uIG9m CisgICJzZW5kcGF0aCIgd2l0aCBhIGRpZmZlcmVudCBzdG9yYWdlIGNsYXNzIHNwZWNpZmllcjog InNlbmRwYXRoIiB3aWxsIGhhdmUKKyAgaW50ZXJuYWwgbGlua2FnZS4KKworVGhlc2Ugd2Fybmlu Z3Mgc2hvdWxkIGJlIHBlcmZlY3RseSBoYXJtbGVzcyBzaW5jZSB0aGV5IGFyZSBub3QgY29taW5n IGZyb20KK0MtS2VybWl0IGNvZGUsIG5vciBkb2VzIEMtS2VybWl0IHVzZSBlaXRoZXIgb25lIG9m IHRob3NlIGZ1bmN0aW9ucy4gIFRoZXNlCit3YXJuaW5ncyBkb24ndCBjb21lIG91dCBpbiBIUC1V WCAxMWkgdjIsIGJ1dCBvbiB0aGF0IG9uZSB3ZSBnZXQgdG9ucyBhbmQgdG9ucworb2YgcGlja3kg Y29tcGlsZXIgd2FybmluZ3MgKHZhcmlhYmxlcyBzZXQgYnV0IG5vdCB1c2VkLCBkZWZpbmVkIGJ1 dCBub3QKK3JlZmVyZW5jZWQsIGV0YykuICBBIGNvdXBsZSwgaG93ZXZlciwgdHVybmVkIG91dCB0 byBiZSB2YWxpZDsgb25lIGNhc2Ugb2YKKyJleHByZXNzaW9uIGhhcyBubyBlZmZlY3QiLCBhbmQg dHdvIG9mICJzdHJpbmcgZm9ybWF0IGluY29tcGF0aWJsZSB3aXRoCitkYXRhIHR5cGUiIChJIG1p c3NlZCBhIGNvdXBsZSBmaWxlLXNpemUgcHJpbnRmcykuCisKK1RoZXJlIHdlcmUgYWxzbyBudW1l cm91cyB3YXJuaW5ncyBhYm91dCBzaWduZWRuZXNzIG1pc21hdGNoIG9yIHNpZ24KK2NvbnZlcnNp b24gb2YgY29uc3RhbnRzIGxpa2UgSUFDICgweGZmKS4gIERvZXMgdGhlIEhQLVVYIE9wdGltaXpp bmcgQ29tcGlsZXIKK2hhdmUgYSBjb21waWxlciBmbGFnIHRvIG1ha2UgYWxsIGNoYXJzIHVuc2ln bmVkPyAgWWVzLCArdWMsIGJ1dCB0aGUgbWFuIHBhZ2UKK3NheXMgIkJlIGNhcmVmdWwgd2hlbiB1 c2luZyB0aGlzIG9wdGlvbi4gIFlvdXIgYXBwbGljYXRpb24gbWF5IGhhdmUgcHJvYmxlbXMKK2lu dGVyZmFjaW5nIHdpdGggSFAtVVggc3lzdGVtIGxpYnJhcmllcyBhbmQgb3RoZXIgbGlicmFyaWVz IHRoYXQgZG8gbm90IHVzZQordGhpcyBvcHRpb24iLiAgU2lnaCwgYmV0dGVyIG5vdCB1c2UgaXQu CisKK0FmdGVyIHJldmlld2luZyAiSFAtVVggTGFyZ2UgRmlsZXMgV2hpdGUgUGFwZXIgVmVyc2lv biAxLjQiIGFuZCBIUCdzCisiV3JpdGluZyBQb3J0YWJsZSBDb2RlIiBkb2N1bWVudHMsIEkgYWRk ZWQgLURfTEFSR0VGSUxFX1NPVVJDRQorLURfRklMRV9PRkZTRVRfQklUUz02NCB0byB0aGUgaHB1 eDEwMDAgdGFyZ2V0LCB3aGljaCBpcyB0aGUgYmFzaXMgZm9yIGFsbAorSFAtVVggMTAuMDAgYW5k IGxhdGVyIGJ1aWxkcy4gIExhcmdlIGZpbGVzIGFyZSBhdmFpbGFibGUgaW4gSFAtVVggMTAuMjAg YW5kCitsYXRlci4gIDEwLjAwIGFuZCAxMC4xMCB3ZXJlIG5vdCByZWFsIHJlbGVhc2VzLCBhbmQg YW55d2F5IHRoZXNlIGZsYWdzCitzaG91bGQgYmUgaGFybWxlc3MgdGhlcmUgdW5sZXNzIHRoZSBs YXJnZS1maWxlIGltcGxlbWVudGF0aW9uIHdhcyBvbmx5CitwYXJ0bHkgZG9uZS4gIEJ1aWx0IE9L IG9uIGJvdGggUEEtUklTQyBhbmQgSUE2NCwgb3B0aW1pemVkIGFuZCBwbGFpbi4KK21ha2VmaWxl LCA0IEphbiAyMDA2LgorCitCdWlsdCBvbiBGcmVlQlNEIDYuMCBvbiBJQTY0LiAgQWxsIE9LIGV4 Y2VwdCBJIGdvdCBhIHdhcm5pbmcgYWJvdXQgdGhlCithcmd1bWVudCBwYXNzZWQgdG8gdGltZSgp IGluIGxvZ3d0bXAoKSBpbiBja3VmaW8uYy4gIFRoaXMgc2VjdGlvbiBoYWQKK2FscmVhZHkgYmVl biBwYXJ0aWFsbHkgZml4ZWQ7IHRodXMgSSBwdXQgdGhlIGltcHJvdmVkIHZlcnNpb24gaW50bwor I2lmZGVmIENLXzY0QklULCB3aGljaCBpcyBvdXIgbmV3bHkgYXZhaWxhYmxlIHN5bWJvbCB0aGF0 IHNob3VsZCBiZQorYXV0b21hdGljYWxseSBkZWZpbmVkIGZvciBhbnkgdHJ1ZSA2NC1iaXQgYnVp bGQuICBja3VmaW8uYywgNCBKYW4gMjAwNi4KKworRmluYWxseSBnb3QgYXJvdW5kIHRvIHRlc3Rp bmcgSmVmZidzIGNoYW5nZXMgdG8gU1NML1RMUyBSQVcgbW9kZSBmcm9tCitEZWNlbWJlciAzMHRo IGFnYWluc3Qgb3VyIFBPUCBzZXJ2ZXIuICBJdCBkaWRuJ3Qgd29yaywgY291bGRuJ3QgbG9nIGlu LgorVHJpZWQgYmFja2luZyBvZmYgdGhlIGNrY3RlbC5jIGNoYW5nZXMgZmlyc3Q7IHRoYXQgYWxs b3dlZCBsb2dpbiBhbmQKK2NvbW11bmljYXRpb24sIGJ1dCBpdCBkaWQgbm90IHN1cHByZXNzIGFj dGl2YXRpb24gb2YgVGVsbmV0IHByb3RvY29sCit3aGVuZXZlciBhIDB4ZmYgYnl0ZSBhcnJpdmVk LiAgQmFja2VkIG9mZiB0aGUgcmVzdCBvZiB0aGUgY2hhbmdlcyBhbmQgbm93CithbGwgaXMgT0sg YWdhaW4uICBja2N0ZWwuYywgY2tjbmV0LmMsIGNrdXVzNy5jLCA5IEphbiAyMDA2LgorCitCdWls dCBvbiBOZXRCU0QgMS40LjEgKDE5OTkpLCBmb3VuZCB0aGF0IGl0IGRpZCBub3QgbGlrZSB0aGUg bGFyZ2UgZmlsZQorYXNzdW1wdGlvbiAtLSBmc2Vla28oKSBhbmQgZnRlbGxvKCkgZG8gbm90IGV4 aXN0OyBhZGRlZCBhIGNsYXVzZSB0byB0aGUKK25ldGJzZCB0YXJnZXQgdG8gY2hlY2sgZm9yIGZz ZWVrbyBhbmQgbm90IGRlZmluZSBfTEFSR0VGSUxFX1NPVVJDRSBpZiBub3QKK2ZvdW5kLiAgT2Rk bHkgZW5vdWdoLCBvZmZfdCBpcyA2NCBiaXRzIGFueXdheSwgYnV0IGl0IGRvZXNuJ3QgbG9vayBs aWtlIHRoZQorQVBJcyBhcmUgaGFsZi1kb25lLiAgRm9yIGV4YW1wbGUsIHN0YXQoKSB1c2VzIG9m Zl90ICg2NCBiaXRzKSBmb3IgdGhlIGZpbGUKK2xlbmd0aCwgYnV0IGZzZWVrKCkgdXNlcyBsb25n ICgzMiBiaXRzKSBhbmQgdGhlcmUgaXMgbm8gNjQtYml0IGFuYWxvZy4KK0FueXdheSB0aGUgbmV3 IG5ldGJzZCB0YXJnZXQgd29ya3Mgb24gYm90aCAxLjQuMSBhbmQgMS41LjIgKG5vIGxhcmdlIGZp bGVzKQorYW5kIG9uIDIuMC4zIChsYXJnZSBmaWxlcykuICBtYWtlZmlsZSwgOSBKYW4gMjAwNi4K KworQnVpbHQgb24gUU5YLTMyIDQuMjUsIHdoaWNoIGhhcyBubyBsYXJnZSBmaWxlIHN1cHBvcnQu ICBHb3QgYSBmZXcgc3RyYW5nZQorY29tcGlsZXIgKFdhdENvbSkgd2FybmluZ3MsIGJ1dCBpdCBi dWlsdCBhbmQgcnVucyBPSy4gIE5vdGljZWQgdGhhdCBmaWxlCit0cmFuc2ZlcnMgaW50byBRTlgg b3ZlciBhIFRlbG5ldCBjb25uZWN0aW9uIGNhbid0IHVzZSBzdHJlYW1pbmcsIGJ1dCB0aGF0J3MK K25vdGhpbmcgbmV3IHRvIHRoaXMgdmVyc2lvbjsgc2FtZSB0aGluZyBoYXBwZW5zIHdpdGggQy1L ZXJtaXQgNy4wLiAgOSBKYW4gMjAwNi4KKworQnVpbHQgb24gSVJJWCA2LjUuICBJIGRpZG4ndCBi b3RoZXIgd2l0aCBsYXJnZSBmaWxlcyB0aGVyZSBiZWNhdXNlIGl0IGRvZXMKK25vdCBzdXBwb3J0 IHRoZSBfTEFSR0VGSUxFX1NPVVJDRSBpbnRlcmZhY2U7IHlvdSBoYXZlIHRvIGNoYW5nZSBhbGwg dGhlIEFQSXMKK2F0IHRoZSBzb3VyY2UgbGV2ZWwgZnJvbSBibGFoKCkgdG8gYmxhaDY0KCkuICBT ZWVtcyB0byB3b3JrIGZpbmUgYXMgYSAzMi1iaXQKK2FwcCBldmVuIHRob3VnaCBpdHMgb2ZmX3Qg aXMgNjQgYml0cy4gIFRyaWVkIGEgcHVyZSA2NC1iaXQgSVJJWCA2LjUgYnVpbGQKK2J1dCBpdCBk aWVzIGluIGNrY25ldC5jIHdoZW4gaXQgaGl0cyBTT0NLT1BUX1QgYW5kIEdTT0NLTkFNRV9UIHdp dGggIlRoZQoraWRlbnRpZmllciAnc29ja2xlbl90JyBpcyB1bmRlZmluZWQiLgorCitMb29rcyBs aWtlIEkgbm8gbG9uZ2VyIGhhdmUgYWNjZXNzIHRvIFNDTyBPU1I1LgorCitNYWRlIGEgcHVyZSAz Mi1iaXQgYnVpbGQgb24gU0NPIFVuaXhXYXJlIDcuMS40LCBhbGwgT0suICBGb3VuZCB0aGF0IHRo aXMKK3ZlcnNpb24gYWxzbyBzdXBwb3J0cyBMRlMsIGFkZGVkIGl0IHRvIHRoZSB1dzcgdGFyZ2V0 LiAgbWFrZWZpbGUsIDkgSmFuIDIwMDYuCisKKy0tLSBEZXYuMTEgLS0tCisKK0V2aWRlbnRseSB0 aGUgSFAtVVggYnVuZGxlZCAobm9uLUFOU0kgbm9uLW9wdGltaXppbmcpIGNvbXBpbGVyIGRvZXNu J3QgbGlrZQorbG9uZyBpbnRlZ2VycyBpbiBzd2l0Y2ggZXhwcmVzc2lvbnMuICBDaGFuZ2VkIHRo cmVlIGV4YW1wbGVzIG9mIHRoZXNlIGluIHRoZQorUy1leHByZXNzaW9uIGNvZGUuICBja3V1czMu YywgMTAgSmFuIDIwMDYuCisKK0Egc2VjdGlvbiBvZiB0c3RhdHMoKSB3aGVyZSBHRlRJTUVSIGlz bid0IGRlZmluZWQgKGUuZy4gb24gTW90b3JvbGEKK3N2NjhyM3Y2KSB3YXMgZ2FyYmxlZC4gIEZp eGVkIGluIGNrY2ZuMi5jLCAxMCBKYW4gMjAwNi4KKworQSBmaXggZm9yIHNldHRpbmcgOTIxNjAw IGJwcyBvbiBMaW51eCBmcm9tIFBhdWwgRnVsZ2h1bSwgTWljcm9nYXRlIFN5c3RlbXMgTHRkLgor dHRnc3BkKCk6IGNrdXRpby5jLCAxMSBKYW4gMjAwNi4KKworTm90aWNlZCB0aGF0IHdoZW4gSSBj aGFuZ2VkIHRoZSBjb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbiBjb2RlIGJhY2sgb24KK0F1Z3Vz dCA5dGgsIEkgYnJva2UgdGhlIGFiaWxpdHkgdG8gdXNlIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMg d2l0aGluIHRoZQorYnJhY2tldHMsIHdoaWNoIGV4cGxhaW5zIHNvbWUgcmF0aGVyIG9kZCBiZWhh dmlvciBJIHNhdyB3aXRoIHNvbWUgb2YgbXkKK3NjcmlwdHMuICBMb29raW5nIG1vcmUgZGVlcGx5 IGludG8gdGhpcywgSSBhbHNvIHNlZSB0aGF0IGFsbCB0aGUgcGFyc2VycyBJCitoYXZlIGJlZW4g dXNpbmcgdXAgdG8gbm93IGZvciB0aGlzLCBhcyB3ZWxsIGFzIGZvciBhcnJheSBib3VuZHMgcGFp cnMsIGhhdmUKK2JlZW4gaW5hZGVxdWF0ZSBiZWNhdXNlIHRoZXkgbmV2ZXIgYWxsb3dlZCBmb3Ig bmVzdGVkIGNvbnN0cnVjdGlvbnMsIHN1Y2ggYXMKK2EgbWVtYmVyIG9mIGEgYm91bmRzIHBhaXIg dGhhdCBpdHNlbGYgd2FzIGFuIGFycmF5IGVsZW1lbnQsIHBvc3NpYmx5IHdpdGgKK2Fub3RoZXIg YXJyYXkgZWxlbWVudCBhcyBhIHN1YnNjcmlwdC4gIEkgd3JvdGUgYSBuZXcgcm91dGluZSBmb3Ig dGhpcywKK2NhbGxlZCBib3VuZHNwYWlyKCksIHdoaWNoIGlzIGxpa2UgYXJyYXlib3VuZHMoKSBl eGNlcHQgaXQgYWNjZXB0cyBhbiBleHRyYQorYXJndW1lbnQsIGFuIGFycmF5IG9mIGNoYXJhY3Rl cnMgdGhhdCBjYW4gc2VydmUgYXMgYm91bmRzLXBhaXIgZGVsaW1pdGVycywKK2FuZCBpdCByZXR1 cm5zIHRoZSBwYWlyIHNlcGFyYXRvciB0aGF0IHdhcyBlbmNvdW50ZXJlZCBpbiBhbm90aGVyIG5l dworYXJndW1lbnQuICBGb3IgdGhlIGFsdGVybmF0aXZlIHN1YnN0cmluZyBub3RhdGlvbiBmb3Ig W3N0YXJ0cG9zLWVuZHBvc10gSQoraGFkIHRvIGNoYW5nZSB0aGUgZGVsaW1pdGVyIGZyb20gJy0n IHRvICdfJyBiZWNhdXNlICctJyBjYW4gYmUgdXNlZCBpbgorYXJpdGhtZXRpYyBidXQgJ18nIGlz IG5vdCBhIHJlY29nbml6ZWQgb3BlcmF0b3IuICBUaGlzIGlzIHNvIEkgY2FuIHBhcnNlLAorZS5n LiBbYTpiXSBvciBbYV9iXSBpbiB0aGUgc2FtZSBjb250ZXh0LCBhbmQgdGhlbiBmaW5kIG91dCB3 aGljaCBmb3JtIHdhcwordXNlZCwgZS5nLiBccyhsaW5lWzk6MTJdKSBvciBccyhsaW5lWzlfMTJd KTsgdGhlIGZpcnN0IHN0cmluZyBpcyA0IGJ5dGVzCitsb25nLCB0aGUgc2Vjb25kIGlzIDEyLiAg RXZlcnl0aGluZyBzZWVtcyB0byBiZSBPSyBub3cuICBccyhsaW5lWzEwXSkgZ2l2ZXMKK2V2ZXJ5 dGhpbmcgc3RhcnRpbmcgYXQgMTAsIGJ1dCBccyhsaW5lWzEwOjBdKSBnaXZlcyB0aGUgbnVsbCBz dHJpbmcuICBCYWQKK3N5bnRheCBpbiB0aGUgYm91bmRzIHBhaXJzIHJlc3VsdHMgaW4gYSBudWxs IHN0cmluZzsgbWlzc2luZyBwaWVjZXMgb2YgdGhlCitib3VuZHMgcGFpciByZXN1bHQgaW4gZGVm YXVsdHMgdGhhdCBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzCitiZWhhdmlvci4g IGNrdXVzWzQ1XS5jLCBja3V1c3IuaCwgMTMgSmFuIDIwMDUuCisKK0NoYW5nZWQgYXJyYXlib3Vu ZHMoKSB0byBjYWxsIGJvdW5kc3BhaXIoKS4gIFRoaXMgd2FzIGEgcmF0aGVyIGRyYXN0aWMKK2No YW5nZSwgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IEkgdGhpbmsgSSBnb3QgYWxsIHRoZSBr aW5rcyBvdXQuCitja3V1czUuYywgMTMgSmFuIDIwMDUuCisKK0NoYW5nZXMgZnJvbSBQZXRlckUg dG8gdGhlIG1ha2VmaWxlIGZvciBIUC1VWCA2IGFuZCA3LCB0byBhY2NvbW1vZGF0ZSBiaWdnZXIK K3N5bWJvbCB0YWJsZXMsIGV0Yy4gIDE5IEphbiAyMDA1LgorCitEZXRlcm1pbmVkIHRoYXQgU0NP IE9TUjUuMC42IChhbmQgZWFybGllcikgZG8oZXMpIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzLgor RG9uJ3Qga25vdyBhYm91dCA1LjAuNy4gIDMwIEphbiAyMDA1LgorCitDcmVhdGVkIGEgbmV3IGJ1 aWxkIHRhcmdldCBmb3IgU0NPIE9TUjYuMC4wLiAgR2V0cyB0aGUgZXhhY3QgNi54LnggdmVyc2lv bgorZHluYW1pY2FsbHkuICBTdXBwb3J0cyBsYXJnZSBmaWxlcyBhbmQgYmlnLW51bWJlciBhcml0 aG1ldGljIHZpYSBDS19PRkZfVC4KK1RoZSBzb2Nrb3B0KCkgZmFtaWx5IG9mIGZ1bmN0aW9ucyBj aGFuZ2VkIHRoZSBkYXRhIHR5cGVzIG9mIHNvbWUgb2YgdGhlaXIKK2FyZ3VtZW50cyBzaW5jZSBP U1I1LiAgSXQgd2FzIGFscmVhZHkgcG9zc2libGUgdG8gZGVmaW5lIFNPQ0tPUFRfVCBhbmQKK0dT T0NLTkFNRV9UIGZyb20gdGhlIGNvbW1hbmQgbGluZSBidXQgSSBoYWQgdG8gYWRkIGNvZGUgdG8g YWxzbyBhbGxvdyB0aGlzCitmb3IgR1BFRVJOQU1FX1QgdG9vLiAgY2tjbmV0LmMsIG1ha2VmaWxl LCAzMCBKYW4gMjAwNS4KKworQXBwYXJlbnRseSwgZXZlciBzaW5jZSBDLUtlcm1pdCA3LjAgd2Fz IHJlbGVhc2VkLCBpdCBoYXMgbmV2ZXIgYmVlbiBwb3NzaWJsZQordG8gdXNlIGEgdmFyaWFibGUg Zm9yIHRoZSBhcy1uYW1lIGluIGEgUkVDRUlWRSBjb21tYW5kIGluIEtlcm1pdCA5NS4gIFRoaXMK K2lzIGJlY2F1c2UgZXZhbHVhdGlvbiBvZiB0aGUgYXMtbmFtZSBmaWVsZCB3YXMgZGVmZXJyZWQg dW50aWwgYWZ0ZXIgd2UgY291bGQKK2NoZWNrIHdoZXRoZXIgaXQgbWlnaHQgYmUgYSBkaXJlY3Rv cnkgbmFtZSAod2hpY2gsIGluIFdpbmRvd3MsIGNvdWxkIHN0YXJ0Cit3aXRoIGEgYmFja3NsYXNo KS4gICBUaGlzIGxpdHRsZSBiaXQgb2YgbWFnaWMgd2FzIG5vdCBhIGdvb2QgaWRlYSwgbWFnaWMK K2hhcmRseSBldmVyIGlzLiAgSSBjaGFuZ2VkIHRoZSBjb2RlIHRvIGV2YWx1YXRlIGJvdGggYXMt bmFtZSBmaWVsZHMgaW4gdGhlCitub3JtYWwgd2F5LiAgSWYgdGhleSB3YW50IHRvIHJlY2VpdmUg dG8gYSBkaXJlY3RvcnkgY2FsbGVkICJcJTEiLCB0aGV5J2xsCitqdXN0IGhhdmUgdG8gc3BlbGwg aXQgZGlmZmVyZW50bHkuICBUaGUgd29ya2Fyb3VuZCBpcyB0byB0dXJuIHRoZSB3aG9sZQorY29t bWFuZCBpbnRvIGEgbWFjcm8gYW5kIGV2YWx1YXRlIGl0IGJlZm9yZSBleGVjdXRpbmcgaXQsIGUu Zy46CisKKyAgYXNzaWduIHh4IHJlY2VpdmUgL2FzLW5hbWU6XCUxCisgIGRvIHh4CisKK2NrdXVz Ni5jLCAxIEZlYiAyMDA2LgorCitCdWlsdCBPSyBvbiBGcmVlQlNEIDYuMSBvbiBBTUQ2NC4gIEFk anVzdGVkIHNvbWUgY29weXJpZ2h0cyBhbmQgZGF0ZSBzdGFtcHMuCitja2NtYWkuYywgbWFrZWZp bGUsIDggRmViIDIwMDYuCisKKy0tLSBEZXYuMTIgLS0tCisKK0ZpeGVkIGEgc2lnbmVkL3Vuc2ln bmVkIGNoYXIgd2FybmluZyBpbiB0aGUgbmV3IGJvdW5kc3BhaXIoKSBjYWxsaW5nIGNvZGUKK2lu IHRoZSBjb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbiBoYW5kbGVyLiAgY2t1dXM0LmMsIDkgRmVi IDIwMDYuCisKK1JlbW92ZWQgYSBzcHVyaW91cyBleHRyYSBsaW51eCtvcGVuc3NsIGxhYmVsIGZy b20gdGhlIG1ha2VmaWxlLCBhZGRlZAorc29sYXJpczEwZ182NCBzeW5vbnltLiAgOSBGZWIgMjAw Ni4KKworU2F0aXNmaWVkIG15c2VsZiB0aGF0IExGUyBpcyBPSyBvbiBTb2xhcmlzIDEwIGkzODYs IGFuZCBJJ20gZ29pbmcgdG8gYXNzdW1lCitpdCdzIGFsc28gT0sgb24gU29sYXJpcyA5LiAgTWFk ZSBMRlMgc3RhbmRhcmQgZm9yIGFsbCBTb2xhcmlzIDkgYW5kIDEwCitidWlsZHMgKGluY2x1ZGlu ZyB0aGUgc2VjdXJlIG9uZXMpIGV4Y2VwdCB0aGUgZXhwbGljaXRseSA2NC1iaXQgb25lcywgYW5k CittYWRlIHRoZSBwcm92aXNpb25hbCBzb2xhcmlzWFhsZnMgdGFyZ2V0cyBpbnRvIHN5bm9ueW1z LiAgbWFrZWZpbGUsIDkgRmViIDIwMDYuCisKKy0tLSBEZXYuMTMgLS0tCisKK0Z1cnRoZXIgYXR0 ZW1wdHMgYXQgU1NML1RMUyBtZXNzYWdlIHN1cHByZXNzaW9uIHdoZW4gUVVJRVQgaXMgT04uCitj a19zc2wuYywgMTYgRmViIDIwMDYuCisKK0Zyb20gSi5TY290dCBLYXN0ZW46IChxdW90ZS4uLikg SSBqdXN0IHVwbG9hZGVkIGEgcGF0Y2ggdG8gL2tlcm1pdC9pbmNvbWluZy4KK1RoZSBmaWxlIG5h bWUgaXMgImpzay1wYXRjaC1mb3ItY2t1MjExLmRpZmYiLiAgSSBoYXZlIGFsc28gaW5jbHVkZWQg dGhlCitwYXRjaCBhcyBBU0NJSSB0ZXh0IGluIHRoaXMgZW1haWwgYmVsb3cuICBUaGlzIHBhdGNo IG1heSBiZSBhcHBsaWVkIHRvIHRoZQorY2t1MjExLnRhci5neiBzb3VyY2UgY29kZSB2aWE6Cisg IGNkIGNrdTIxMSwgcGF0Y2ggLXAxIDwuLi9qc2stcGF0Y2gtZm9yLWNrdTIxMS5kaWZmCitUaGUg cGF0Y2ggYWRkcyA0IG5ldyBidWlsZCB0YXJnZXRzOgorICBuZXRic2R3b2MgLSBhIHN0cmlwcGVk IG5vIGN1cnNlcyB0YXJnZXQgZm9yIGlrc2QgdXNlZC4KKyAgbmV0YnNkc2UgIC0gc2VjdXJpdHkg ZW5oYW5jZWQgdGFyZ2V0IHdpdGggc3JwLCBzc2wsIGFuZCB6bGliLgorICBpcml4NjVnY2MgLSBi dWlsZCBvbiBTR0kgSXJpeCA2LjUgcGxhdGZvcm0gdXNpbmcgZ2NjLgorICBpcml4NjVzZSAgLSBz ZWN1cml0eSBlbmhhbmNlZCB0YXJnZXQgd2l0aCBzcnAsIHNzbCwgYW5kIHpsaWIuCitUaGUgcGF0 Y2ggZml4ZXMgb25lIGJ1aWxkIHRhcmdldDoKKyAgaXJpeDY0Z2NjIC0gVGhlICItcyIgb3B0aW9u IGlzIG5vdCBzdXBwb3J0ZWQgYnkgZ2NjIHVuZGVyIElyaXguCitJIHRoYW5rIGFsbCBvZiB5b3Ug aW4gdGhlIEtlcm1pdCBQcm9qZWN0IGZvciBzdWNoIGEgZmluZSB1dGlsaXR5LiAgSQorcmVjZW50 bHkgaGFkIHRvIGdldCBhIDE2IE1CIGZpbGUgb3ZlcnNlYXMgYWNyb3NzIGEgc3BvdHR5IGNvbW11 bmljYXRpb25zCitsaW5rIHRvIHJlcGFpciBhIGNvbXB1dGVyIHJlbW90ZWx5LiAgS2VybWl0IHdh cyB0aGUgb25seSB0aGluZyB0aGF0IGNvdWxkIGRvCit0aGUgam9iLCBzbyBJIHdhbnRlZCB0byBj b250cmlidXRlIHRoZXNlIHBhdGNoZXMgYmFjayB0byB0aGUgbWFpbnN0cmVhbSB0bworc2F5IHRo YW5rcy4gIFRoaXMgZGlnaXRhbGx5IHNpZ25lZCBlbWFpbCBpcyBhIGJpbmRpbmcgY29udHJhY3Qg dGhhdAorb2ZmaWNpYWxseSBhc3NpZ25zIHRoZSByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIHBh dGNoIChzaG93biBiZWxvdykgdGhhdCBJCitkZXZlbG9wZWQgdG8gdGhlIEtlcm1pdCBQcm9qZWN0 IGF0IENvbHVtYmlhIFVuaXZlcnNpdHkuICguLi5lbmQgcXVvdGUpCitja19zc2wuYywgbWFrZWZp bGUsIDIzIEZlYiAyMDA2LgorCitDaGFuZ2VkIHRoZSBuZXcgTmV0QlNEIHRhcmdldCBuYW1lcyB0 byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGNvbnZlbnRpb25zCit1c2VkIGluIG1vc3Qgb3RoZXIg dGFyZ2V0czoKKworICBuZXRic2R3b2MgLT4gbmV0YnNkbmMKKyAgbmV0YnNkc2UgIC0+IG5ldGJz ZCtzc2wrc3JwK3psaWIKKyAgaXJpeDY1c2UgIC0+IGlyaXg2NStzc2wrc3JwK3psaWIKKworYW5k IHJlbW92ZWQgb2xkLCBub3cgc3VwZXJmbHVvdXMsIE5ldEJTRCB0YXJnZXRzIChvbGQtbmV0YnNk LCBuZXRic3QxNSwKK25ldGJzdDE2KSwgbGVhdmluZyBzeW5vbnltIGxhYmVscyBpbiB0aGVpciBw bGFjZS4gIEFsc28gdXBkYXRlZCAoY3J1ZGVseSkKK3RoZSBMaW51eCB0YXJnZXQgdmFyaWF0aW9u cyAoY3Vyc2VzIGluc3RlYWQgb2Ygbm9jdXJzZXMsIG5vIGN1cnNlcyBhdCBhbGwpCit0byBiZSAo YXBwcm9wcmlhdGVseSBtb2RpZmllZCkgY29waWVzIG9mIHRoZSBjdXJyZW50IGxpbnV4IHRhcmdl dC4gIEl0IHdvdWxkCitiZSBuaWNlciB0byBjb21iaW5lIHRoZW0sIGJ1dCB0aGlzIGdldHMgdGhl IGpvYiBkb25lLiAgbWFrZWZpbGUsIDIzIEZlYiAyMDA2LgorCistLS0gRGV2LjE0IC0tLQorCitG aXhlZCB0aGUgSEVMUCBjb21tYW5kIHdoZW4gdXNlZCB3aXRoIHRva2VucyBsaWtlIEAsIF4sICMs IGFuZCA7LiAgVGhlIGZpcnN0Cit0d28gaGFkIGJlZW4gb21pdHRlZCBmcm9tIHRoZSB0YWJsZS4g IFRoZSBzZWNvbmQgdHdvIHJlcXVpcmVkIGEgbmV3IHBhdGgKK2ludG8gdGhlIGd1dHMgb2YgdGhl IHBhcnNlciwgc2luY2UgY29tbWVudHMgYXJlIG5vcm1hbGx5IHN0cmlwcGVkIGF0IGEgdmVyeQor bG93IGxldmVsLiAgY2t1dXNbcjJdLmMsIGNrdWNtZC5jLCAyNCBGZWIgMjAwNi4KKworQnVpbHQg b24gQUlYIDUuMSAoIm1ha2UgYWl4NTEiKSB3aXRob3V0IGluY2lkZW50LiAgVGhlbiBJIHRyaWVk OgorCisgbWFrZSBhaXg1MSAiS0ZMQUdTPS1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZT RVRfQklUUz02NCIKKworVGhpcyBoYWQgbm8gZWZmZWN0LiAgSSBmb3VuZCB0aGUgcmVsZXZhbnQg ZG9jdW1lbnQgYXRoIHRoZSBJQk0gd2Vic2l0ZS4gIEl0CitzYXlzIHRvIHVzZSAtRF9MQVJHRV9G SUxFUyBpbnN0ZWFkLiAgSSBhZGRlZCB0aGlzIHRvIHRoZSBBSVggNC4yIHRhcmdldAorc2luY2Ug KGEpIElCTSBzYXlzIGxhcmdlIGZpbGVzIGFyZSBzdXBwb3J0ZWQgYnkgQUlYIDQuMiBhbmQgbGF0 ZXIsIGFuZCAoYikKK2FsbCBLZXJtaXQgQUlYIHRhcmdldHMgcGFzdCA0LjIgdXNlIHRoZSA0LjIg b25lLiAgUGx1cyBhIGNsYXVzZSB0byBtYWtlCitzdXJlIENLX09GRl9UIGlzIGRlZmluZWQgYXBw cm9wcmlhdGVseS4gIGNrY2RlYi5oLCBtYWtlZmlsZSwgNiBNYXIgMjAwNi4KKworQWRkZWQgYSAz Mi1iaXQgYWl4NTErb3BlbnNzbCB0YXJnZXQuICBCdWlsZHMgT0ssIHdvcmtzIGZpbmUgKHRlc3Rl ZCBhZ2FpbnN0CitvdXIgU1NMIFBPUCBzZXJ2ZXIpLiAgVHJpZWQgSSB0cmllZCBhZGRpbmcgLURf TEFSR0VfRklMRVMuICBJdCBzZWVtcyB0byB3b3JrCitmaW5lLCBzbyB3ZSdsbCBrZWVwIGl0LiAg Q2xlYW5lZCB1cCB0aGUgb3RoZXIgYWl4NWJsYWggZW50cmllcyBhIGJpdCBhbHNvLgorbWFrZWZp bGUsIDYgTWFyIDIwMDYuCisKK0ZpeGVzIGZyb20gSi4gU2NvdHQgS2FzdGVuIHRvIHRoZSBJUklY IDYuNCBhbmQgNi41IG1ha2VmaWxlIHRhcmdldHMuICBUaGV5Cit3ZXJlIGJhZGx5IHdyb25nLiAg bWFrZWZpbGUsIDYgTWFyIDIwMDYuCisKK1RoZSByZWFzb24gS2VybWl0IHdhcyBsb29waW5nIG9u IGRpcmVjdG9yaWVzIGluIElSSVggd2FzIGEgY2xhc3NpYworImRvdWJsZS1lbmRlZCBicmVhayIu ICBUaGUgbWFrZWZpbGUgdGFyZ2V0cyBmYWlsZWQgdG8gZGVmaW5lIERJUkVOVCBzbworS2VybWl0 IHdhcyBvcGVuL3JlYWQgb24gZGlyZWN0b3JpZXMgcmF0aGVyIHRoYW4gb3BlbmRpcigpL3JlYWRk aXIoKS4gIEJ1dAordGhlbiBpdCB3YXMgYWxzbyBmYWlsaW5nIHRvIGFjY291bnQgZm9yIHRoZSBm YWN0IHRoYXQgcmVhZCgpIHdvdWxkIHJldHVybiAtMQorb24gZXJyb3IuICBUaGUgbWFrZWZpbGUg Zml4IGFkZHMgLURESVJFTlQsIGFuZCB0aGUgcmVhZCgpIGNhc2UgaW4gdHJhdmVyc2UoKQorbm93 IHByb3Blcmx5IHRlcm1pbmF0ZXMgaXRzIGxvb3Agb24gZXJyb3IuICBja3VmaW8uYywgNiBNYXIg MjAwNi4KKworLS0tIERldi4xNCAtLS0KKworSW4gcmVzcG9uc2UgdG8gYSBjb21wbGFpbnQgdGhh dCBDLUtlcm1pdCB3b3VsZCBub3QgYnVpbGQgb24gSFAtVVggMTEgd2l0aAorT3BlblNTTCwgSSB0 cmllZCBpdCBteXNlbGYgb24gYm90aCAxMS4xMS9QQS1SSVNDIGFuZCAxMWkgdjIvSXRhbml1bS4g IEl0IGJ1aWx0CitPSyBvbiBib3RoIGJ1dCBJIGhhZCB0byBhZGQgYSBuZXcgdGFyZ2V0IChocHV4 MTAwMG8rb3BlbnNzbC1ub3psaWIpIGZvciBubworWmxpYiBzaW5jZSB0aGVzZSBib3hlcyBkaWQg bm90IGhhdmUgaXQgaW5zdGFsbGVkLiAgbWFrZWZpbGUsIDkgTWFyIDIwMDYuCisKK0FkZGVkIE9w ZW5TU0wgdmVyc2lvbiBudW1iZXIgZGlzcGxheSB0byBTSE9XIEZFQVRVUkVTLiAgY2t1dXM1LmMs IDkgTWFyIDIwMDYuCisKK0dhdmluIEdyYWhhbSBub3RpY2VkIHRoYXQgRlRQIFtNXUdFVCAvREVM RVRFIC9NT1ZFLVRPOiB3YXMgcmVqZWN0ZWQgd2l0aAorIj9Tb3JyeSwgL0RFTEVURSBjb25mbGlj dHMgd2l0aCAvTU9WRSBvciAvUkVOQU1FIi4gIFRoaXMgY2hlY2sgYmVsb25ncyBpbiB0aGUKK1BV VCBjb2RlIGJ1dCBub3QgaW4gdGhlIEdFVCBjb2RlLiAgQ29tbWVudGVkIGl0IG91dCBhbmQgdGVz dGVkIHRoZSByZXN1bHQuCitUaGUgY29tYmluYXRpb24gaXMgbm93IGFjY2VwdGVkIGJ1dCB0aGVu IEtlcm1pdCByZWZ1c2VzIHRoZSBpbmNvbWluZyBmaWxlIGFzCitpZiBpdCBoYWQgYmVlbiBnaXZl biBhIC9TTUFMTEVSLVRIQU46IG9yIC9MQVJHRVItVEhBTjogc3dpdGNoLCB3aGljaCBpdCBkaWRu J3QKK2hhcHBlbi4gIFR1cm5zIG91dCB0aGVyZSB3YXMgb25lIG1vcmUgcGxhY2Ugd2hlcmUgSSB3 YXNuJ3QgaW5pdGlhbGl6aW5nIHRoZQorbmV3ICJ3aWRlIGludCIgbWVtYmVyIG9mIHRoZSBzd2l0 Y2gtcGFyc2luZyBwdltdIHN0cnVjdC4gIE9uY2UgdGhpcyB3YXMgZml4ZWQsCit0aGUgL01PVkUt VE8gcGFydCBzdGlsbCBkaWRuJ3Qgd29yay4gIFR1cm5lZCBvdXQgdGhlIC9ERUxFVEUgY2FzZSB3 YXMgcGFydCBvZgorYSBsb25nIGlmLWVsc2UtaWYtZWxzZS0gY2hhaW4sIHdoaWNoIGVmZmVjdGl2 ZWx5IG1hZGUgL0RFTEVURSBhbmQgL01PVkUtVE86IG9yCisvUkVOQU1FLVRPOiBtdXR1YWxseSBl eGNsdXNpdmUuICBGaXhlZCB0aGlzLCBub3cgaXQgd29ya3MgZmluZS4gIGNrY2Z0cC5jLAorMTMg TWFyIDIwMDYuCisKK0dvdCBhY2Nlc3MgdG8gQUlYIDUuMywgYnVpbHQgdGhlcmUsIGFsbCBPSywg aW5jbHVkaW5nIGxhcmdlIGZpbGVzLiAxMyBNYXIgMjAwNi4KKworLS0tIERldi4xNiAtLS0KKwor UGF0Y2hlcyBmcm9tIE1hcmsgU2FwaXJvIHRvIHN1cHByZXNzIGdldHNvY2tvcHQoKSBhbmQgZ2V0 c29ja25hbWUoKSB3YXJuaW5ncworaW4gTWFjIE9TIFguICBja2NuZXQuW2NoXSwgMTggTWFyIDIw MDYuCisKK0luIHJlc3BvbnNlIHRvIGEgY29tcGxhaW50IGZyb20gQ2xhcmVuY2UgRG9sZCwgdHJp ZWQgIm1ha2UgcmVkaGF0OSIgKHdoaWNoCitpcyB0aGUgcmF0aGVyIGRhdGVkIHRhcmdldCB0aGF0 IHRyaWVkIHRvIGluY2x1ZGUgYWxsIGZvcm1zIG9mIHNlY3VyaXR5KSBvbgorUkggTGludXggQVM0 LjMsIGl0IGZhaWxlZCBtaXNlcmFibHkuICBJIG1hZGUgYSBuZXcgbWFrZWZpbGUgdGFyZ2V0LCBy ZW1vdmluZworS2VyYmVyb3MgSVYgYW5kIGdvdCBhIGxvdCBmYXJ0aGVyLiAgQnV0IHRoZW4gaW4g Y2tjZnRwLmMsIHRoZSBmb2xsb3dpbmcKK3N0cnVjdCBkZWZpbml0aW9uOgorCisgIHN0cnVjdCB7 CisgICAgICBDT05TVCBnc3NfT0lEX2Rlc2MgKiBDT05TVCAqIG1lY2hfdHlwZTsKKyAgICAgIGNo YXIgKnNlcnZpY2VfbmFtZTsKKyAgfSBnc3NfdHJpYWxzW10gPSB7CisgICAgICB7ICZja19nc3Nf bWVjaF9rcmI1LCAiZnRwIiB9LAorICAgICAgeyAmY2tfZ3NzX21lY2hfa3JiNSwgImhvc3QiIH0s CisgIH07CisKK3JlZmVycyB0byBhIHZhcmlhYmxlLCBja19nc3NfbWVjaF9rcmI1LCB0aGF0IGlz IG5vdCBkZWZpbmVkIGFueXdoZXJlLiAgVXAKK2Fib3ZlLCBob3dldmVyLCBpcyBhIHN0YXRpYyBk ZWZpbml0aW9uIGZvciBnc3NfbWVjaF9rcmI1LCBzbyBJIGNoYW5nZWQgdGhlCitzdHJ1Y3QgZGVm aW5pdGlvbiB0byBtYXRjaC4gIE5leHQsIGluIGNrdWF0aC5jLCB0aGUgY29tcGlsZXIgY291bGQg bm90IGZpbmQKK3RoZSBjb21fZXJyLmggZmlsZS4gIFR1cm5zIG91dCBpbiBMaW51eCB0aGlzIGlz IGluIGEgc3ViZGlyZWN0b3J5LCBldCwgc28gd2UKK2hhdmUgdG8gYWRkIGEgLUkgY2xhdXNlIHRv IHRoZSBtYWtlZmlsZSB0YXJnZXQgZm9yIHRoaXMuICBNYWRlIGEgdGFyZ2V0IGZvcgorTGludXgr U1NMIG9ubHkuICBNYWRlIGEgdGFyZ2V0IGZvciBMaW51eCtLcmI1IG9ubHk7IHRoaXMgcmVxdWly ZWQgbW92aW5nIGFuCisjaWZkZWYgaW4gY2t1dXM3LmMgdG8gcHJldmVudCBhbiB1bmd1YXJkZWQg cmVmZXJlbmNlIHRvIFNTTEVBWV9WRVJTSU9OLgorTmV3IHRhcmdldHM6IGxpbnV4K2tyYjUrc3Ns LCBsaW51eCtrcmI1LCBsaW51eCtrcmI1LiAgY2tjZnRwLmMsIGNrdXVzNy5jLAorbWFrZWZpbGUs IDI3IE1hciAyMDA2LiAgCisKK05ldyB0YXJnZXRzIG9mIEhQLVVYIDEwLzExIHdpdGggT3BlblNT TCBmcm9tIFBldGVyRS4gIG1ha2VmaWxlLCAyNyBNYXIgMjAwNi4KKworQWRkZWQgbGFyZ2UgZmls ZS9pbnRlZ2VyIHN1cHBvcnQgdG8gU0hPVyBGRUFUVVJFUy4gIGNrdXVzNS5jLCAyNyBNYXIgMjAw Ni4KKworQnVpbHQgT0sgb24gU29sYXJpcyA5IGFuZCAxMCB3aXRoIGdjYyAoc29tZW9uZSB3YXMg Y29tcGxhaW5pbmcgdGhhdCB0aGlzCitkaWRuJ3Qgd29yaywgYnV0IHRoYXQgd2FzIDguMC4yMTEp LgorCitTdGFydGVkIGJ1aWxkIG9uIGEgU3VuIDMvODAgbWM2ODAzMCB3aXRoIE5ldEJTRCAyLjAg YW5kIGdjYyAzLjMuMy4gIEJ1dCBpdAorZGllZCB3aXRoIGFuIGFzc2VtYmxlciBlcnJvciBpbiBj a2NmbjIuYyAoY29tcGlsZXIgYnVnKS4gIDI3IE1hciAyMDA2LgorCistLS0gRGV2LjE3IC0tLQor CitOZWJCU0QgMi4wIGJ1aWxkIGNvbXBsZXRlZCBieSB0dXJuaW5nIG9mZiBvcHRpbWl6YXRpb24g b24gY2tjZm4yLmMKKygiS0ZMQUdTPS1PMCIpLiAgUmVzdWx0IHN1cHBvcnRzIDY0LWJpdCBpbnRz IGFuZCwgcHJlc3VtYWJseSwgbGFyZ2UgZmlsZXMuCit1bmFtZSAtcCA9ICJtNjhrIiwgLW0gPSAi c3VuMyIuIDI5IE1hciAyMDA2LgorCitDb3JyZWN0ZWQgYW4gb21pc3Npb24gaW4gYXBwbHlpbmcg UGV0ZXJFJ3MgdXBkYXRlcyB0byB0aGUgSFAtVVggdGFyZ2V0cy4KK21ha2VmaWxlLCAyOCBNYXIg MjAwNi4KKworc29sYXJpczJ4ZytrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3c6CisKK1RyaWVkIHJl c3VycmVjdGluZyB0aGUgc29sYXJpczJ4ZytrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3cgdGFyZ2V0 LiAgSXQgYXNrcwordG8gbGluayB3aXRoIGxpYmRlcyBidXQgdGhlcmUgaXMgbm8gbGliZGVzLiAg UmVtb3ZlZCAtbGRlcyBmcm9tIHRoZSB0YXJnZXQsCitub3cgYXQgbGVhc3QgaXQgYnVpbGRzIGFu ZCBydW5zIHdhcnQuICBUaGUgY29tcGlsYXRpb24gYmxvd3MgdXAgaW4gY2tjZnRwLmMKK2ZvciBt aXNzaW5nIGhlYWRlciBmaWxlczoKKworICBja2NmdHAuYzo0NjI6IGtlcmJlcm9zSVYva3JiLmg6 IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAgY2tjZnRwLmM6NTAwOiBnc3NhcGkvZ3NzYXBp X2dlbmVyaWMuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICBja2NmdHAuYzo1MDE6IGdz c2FwaS9nc3NhcGlfa3JiNS5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK0dvdCBhIGJp dCBmYXJ0aGVyIGJ5IGFkZGluZyBhcHByb3ByaWF0ZSAtSSdzIGFuZCAtTCdzIHRvIEtGTEFHUyBi dXQgaXQgc3RpbGwKK2RpZXMgY29tcGlsaW5nIChvciBsaW5raW5nPykgY2tjZnRwLmMsIGJ1dCBp dCBkb2Vzbid0IHNheSBleGFjdGx5IHdoeS4gIE9LLAorZGVmZXJyZWQuCisKK0FkZGVkIFNFVCBT RVhQUkVTU0lPTiBUUlVOQ0FURS1BTEwtUkVTVUxUUyB7IE9OLCBPRkYgfS4gIFRoaXMgY2FuIGJl IHVzZWQKK2ZvciBmb3JjZSBpbnRlZ2VyIGFyaXRobWV0aWMgaW4gYW55IGtpbmQgb2YgY2FsY3Vs YXRpb24gdGhhdCByZXF1aXJlcyBpdCwKK3N1Y2ggYXMgZGF0ZSBjYWxjdWxhdGlvbnMuICBUaGlz IGlzIGEgZ2xvYmFsIHNldHRpbmcsIG5vdCBvbiBhbnkga2luZCBvZgorc3RhY2suICBBbHNvLCB1 cGRhdGVkIFNIT1cgU0VYUCBhbmQgYWRkZWQgSEVMUCBTRVQgU0VYUCB3aGljaCB3YXNuJ3QgdGhl cmUKK2JlZm9yZS4gIGNrdXVzWzIzXS5jLCAzMCBNYXIgMjAwNi4KKworVG8gbWFrZSB0aGUgUkVO QU1FIGNvbW1hbmQgYSBiaXQgbW9yZSB1c2VmdWwsIG5lZWQgdG8gYWRkIHNvbWUgc3dpdGNoZXMu CitCdXQgaXQgc2hhcmVzIGEgc3dpdGNoIHRhYmxlLCBxdnN3dGFiW10sIHdpdGggc29tZSBvdGhl ciBjb21tYW5kcy4gIEJyb2tlCit0aGlzIG9mZiBpbnRvIGl0cyBvd24gc3dpdGNoIHRhYmxlLiAg Y2t1dXM2LmMsIDE3IEFwciAyMDA2LgorCitBZGRlZCBSRU5BTUUgc3dpdGNoIHZhbHVlcyB0aGF0 IGNhbiBiZSB1c2VkIGluIHRoZSBzYW1lIHRhYmxlIHdpdGggdGhlIERFTEVURQorc3dpdGNoIHZh bHVlcywgd2hpY2ggYXJlIHNoYXJlZCBieSBtYW55IGNvbW1hbmRzLiAgY2t1dXNyLmgsIDE3IEFw ciAyMDA2LgorCitEaXNjb3ZlcmVkIHRoYXQgdGhlIFJFTkFNRSBjb21tYW5kIGNvdWxkIGJlIGVu dGVyZWQgd2l0aG91dCBhbnkgYXJndW1lbnRzCithbmQgaXQgd291bGQgc3RpbGwgc3VjY2VlZC4g IEZpeGVkIGluIGRvcmVuYW0oKTogY2t1dXM2LmMsIDE3IEFwciAyMDA2LgorCitBZGRlZCBwYXJz aW5nIGZvciBSRU5BTUUgL1VQUEVSOm9wdGlvbiAodG8gdXBwZXJjYXNlIHRoZSBmaWxlIG5hbWUo cykpLAorL0xPV0VSOm9wdGlvbiAodG8gbG93ZXJjYXNlKSwgYW5kIC9SRVBMQUNFOnt7czF9e3My fX0gKHRvIGRvIHN0cmluZworcmVwbGFjZW1lbnQgb24gdGhlIGZpbGVuYW1lKHMpKSwgYnV0IG5v dCB0aGUgc2VtYW50aWNzLiAgV2hlbiBhbnkgb2YgdGhlc2UKK3N3aXRjaGVzIGlzIGdpdmVuLCB0 aGUgdGFyZ2V0ICgidG8iKSBuYW1lIGlzIG5vdCBwYXJzZWQ7IHRoZXkgYWN0IG9uIHRoZQorc291 cmNlIG5hbWUuICBUaGUgL0xPV0VSOiBzd2l0Y2ggdGFrZXMga2V5d29yZCBhcmdzIHRvIHNwZWNp Znkgd2hldGhlciBpdAorc2hvdWxkIGFjdCBvbmx5IG9ubHkgZmlsZXMgdGhhdCBoYXZlIGFsbCBV UFBFUiBjYXNlIGxhdHRlcnMsIG9yIG9uIEFMTCBmaWxlcworKGkuZS4sIGluY2x1ZGluZyBmaWxl cyB3aXRoIG1peGVkLWNhc2UgbmFtZXMpOyBzaW1pbGFybHkgZm9yIHRoZSAvVVBQRVI6Citzd2l0 Y2guICBUaGVyZSBpcyBzb21lIGNyZWF0aXZlIHBhcnNpbmcgYWxsb3dpbmcgdGhlc2UgdG8gYmUg Z2l2ZW4gd2l0aCBvcgord2l0aG91dCBhIGNvbG9uIGFuZCBrZXl3b3JkIGFyZ3VtZW50LCB3aGlj aCB3b3JrcyBmaW5lIGV4Y2VwdCBpZiB5b3UgaW5jbHVkZQordGhlIGNvbG9uIGJ1dCBubyBhcmd1 bWVudCwgZXhlY3V0ZSB0aGUgY29tbWFuZCAod2hpY2ggd29ya3MgZmluZSksIGFuZCB0aGVuCity ZWNhbGwgdGhlIGNvbW1hbmQuICBJIGhhdmVuJ3QgeWV0IGRlY2lkZWQgYWJvdXQgdGhlIGludGVy YWN0aW9uIGFtb25nIHRoZXNlCitzd2l0Y2hlcy4gIENsZWFybHkgaWYgL1VQUEVSIGlzIGdpdmVu IGFmdGVyIC9MT1dFUiwgaXQgb3ZlcnJpZGVzLiAgQnV0IGlmCisvVVBQRVIgKG9yIC9MT1dFUikg aXMgZ2l2ZW4gd2l0aCAvUkVQTEFDRSwgd2hhdCBzaG91bGQgaGFwcGVuPyAgY2t1dXM2LmMsCisx NyBBcHIgMjAwNi4KKworRmlsbGVkIGluIGFjdGlvbnMgZm9yIFJFTkFNRSAvVVBQRVI6IGFuZCAv TE9XRVI6IGZvciB0aGUgc2luZ2xlIGZpbGUgY2FzZSwKK2FuZCB0ZXN0ZWQgYWxsIGNvbWJpbmF0 aW9ucyBvZiBzd2l0Y2ggdmFsdWVzIGFuZCBmaWxlbmFtZSBjb25maWd1cmF0aW9ucy4KK09uY2Ug dGhhdCB3YXMgT0ssIG1vdmVkIHRoZSBjb2RlIG91dCBpbnRvIGEgc2VwYXJhdGUgcm91dGluZSwg cmVuYW1lb25lKCksCithbmQgdGhlbiBjYWxsZWQgaXQgZnJvbSBib3RoIHRoZSBzaW5nbGUtZmls ZSBjYXNlIGFuZCB0aGUgbXVsdGlmaWxlIGNhc2UuCitja3V1czYuYywgMTkgQXByIDIwMDYuCisK K0FkZGVkIFJFTkFNRSAvU0lNVUxBVEUuICBGaWxsZWQgaW4gdGhlIGNvZGUgZm9yIHN0cmluZyBy ZXBsYWNlbWVudCwgbmVlZHMKK3Rlc3RpbmcuICBja3V1czYuYywgMjAgQXByIDIwMDYuCisKK0No YW5nZWQgL1JFUExBQ0Ugb3B0aW9ucyB0byBhbGxvdyBhIG5lZ2F0aXZlIG51bWJlciB0byBzcGVj aWZ5IGFuIG9jY3VycmVuY2UKK2Zyb20gdGhlIHJpZ2h0LCBzbyAtMSBtZWFucyB0aGUgbGFzdCBv Y2N1cnJlbmNlLCAtMiBtZWFucyB0aGUgbmV4dC10by1sYXN0LAorZXRjLiAgY2t1dXM2LmMsIDI0 IEFwciAyMDA2LgorCitBZGRlZCBSRU5BTUUgL0NPTExJU0lPTjp7T1ZFUldSSVRFLFBST0NFRUQs RkFJTH0uICBUaGlzIGlzIGltcGxlbWVudGVkIGJ1dAorbm90IHRlc3RlZC4gIGNrdXVzNi5jLCAy NCBBcHIgMjAwNi4KKworV29ya2VkIG9uIFJFTkFNRSAvQ09MTElTSU9OOkZBSUwuICBJIGRlY2lk ZWQgaXQgd2FzIGxlc3MgdGhhbiB1c2VmdWwgdG8gLi4uCisKK0FkZGVkIFNFVCBSRU5BTUUgeyBD T0xMSVNJT04sIExJU1QgfSB0byBsZXQgdXNlciBjaGFuZ2UgZGVmYXVsdCBjb2xsaXNpb24KK2Fu ZCBsaXN0aW5nIGFjdGlvbnMuICBja3V1c3IuW2NoXSwgY2t1dXNbMzZdLmMsIDI1IEFwciAyMDA2 LgorCitFeHBlcmltZW50ZWQgd2l0aCBwYXJzaW5nIGZvciAvQ09OVkVSVDpjc2V0MTpjc2V0Mi4g IFRoZSBwcm9ibGVtIGhlcmUgaXMKK3RoYXQgdGhlcmUgaXMgbm8gc3RyYWlnaHRmb3J3YXJkIHdh eSBmb3IgYSBzd2l0Y2ggdG8gaGF2ZSBtdWx0aXBsZQorYXJndW1lbnRzLiAgT3IgaXMgdGhlcmUu Li4/ICBJZiBJIHBhcnNlIGNzZXQxIHdpdGggY21zd2koKSByYXRoZXIgdGhhbgorY21rZXkoKSwg aXQgYWxtb3N0IHdvcmtzOyB0aGUgb25seSBwcm9ibGVtIGlzIHRoYXQgdGhlIGNoYXJhY3Rlci1z ZXQKK2tleXdvcmRzIGRvbid0IGhhdmUgQ01fQVJHIHNldCwgc28gdGhleSBkb24ndCBrbm93IHRv IHN0b3Agb24sIGFuZCBpZ25vcmUsIGEKK2NvbG9uLiAgSWYgSSBtYWtlIGEgY29weSBvZiB0aGUg dGFibGUgYW5kIHNldCBDTV9BUkcgaW4gdGhlIGZsYWdzIGZpZWxkIGZvcgorZWFjaCBrZXl3b3Jk LCBpdCB3b3JrcyBmaW5lOiBpZiBJIFRhYiBpbiB0aGUgZmlyc3QgbmFtZSwgaXQgZmlsbHMgaXRz ZWxmCitvdXQsIHN1cHBsaWVzIGEgY29sb24sIGFuZCB3YWl0cyBmb3IgdGhlIHNlY29uZCBuYW1l LiAgU28gaW4gdGhlIGNvZGUsIHRoZQorZmlyc3QgdGltZSB0aGF0IFJFTkFNRSAvQ09OVkVSVCBp cyBpbnZva2VkLCBJIHB1dCBjb2RlIHRvIGNvcHkgZmNzdGFiW10gYW5kCitzZXQgQ01fQVJHIGlu IGVhY2ggZmxhZ3MgZmllbGQuICBXb3JrcyBmaW5lLCBhbmQgbm93IHdlIGtub3cgaG93IHRvIG1h a2UgYQorc3dpdGNoIHRoYXQgdGFrZXMgbXVsdGlwbGUgYXJndW1lbnRzLiAgY2t1dXM2LmMsIDI0 IEFwciAyMDA2LgorCitJIHRob3VnaHQgSSBoYWQgYSBmdW5jdGlvbiB0byBjb252ZXJ0IHRoZSBj aGFyYWN0ZXIgc2V0IG9mIGEgc3RyaW5nIGJ1dCBJCitkb24ndCwgc28gYWN0dWFsbHkgaW1wbGVt ZW50aW5nIC9DT05WRVJUOiB3aWxsIGJlIGRpZmZpY3VsdC4KKworQWN0dWFsbHkgdGhlIHBhcnNp bmcgd2Fzbid0IHRoYXQgZWFzeSBlaXRoZXIuICBJdCB3b3JrcyBPSyBpbnRlcmFjdGl2ZWx5LAor YnV0IG5vdCBpbiBhIFRBS0UgZmlsZS4gIFRvIG1ha2UgYSBsb25nIHN0b3J5IHNob3J0LCBJIGhh ZCB0byBjaGFuZ2UKK2d0d29yZCgpIGFuZCBjbWtleTIoKSB0byBub3QgcmVxdWlyZSAiLyIgYXQg dGhlIGJlZ2lubmluZyBvZiBhIHN3aXRjaCwgYW5kCit0aGVuIHRvIHBhcnNlIGFyZ3VtZW50cy10 aGF0LWFyZS1mb2xsb3dlZC1ieS1vdGhlci1hcmd1bWVudHMgYXMgaWYgdGhleSB3ZXJlCitzd2l0 Y2hlcywgc28gdGhhdCB0aGV5IGNhbiBlbmQgd2l0aCBjb2xvbiByYXRoZXIgdGhhbiBzcGFjZS4g IFRoaXMgbWlnaHQKK3NlZW0gZGFuZ2Vyb3VzLCBidXQgc3dpdGNoZXMgYWx3YXlzIGhhdmUgIi8i IGF0IHRoZSBiZWdpbm5pbmcsIHNvIHRoZSBjaGVjaworaXMgc3VwZXJmbHVvdXMuICBja3VjbWQu YywgMjYgQXByIDIwMDYuCisKK0JhY2sgdG8gL0NPTlZFUlQuLi4gIE9uY2UgSSB3YXMgYWJsZSB0 byBnZXQgdGhlIGNvZGUgdG8gY2FsbCBjdnRzdHJpbmcoKSBJCit3YXMgYWJsZSB0byBkZWJ1ZyBp dCAoYXQgZmlyc3QgaXQgd2FzIHNraXBwaW5nIGV2ZXJ5IHNlY29uZCBjaGFyYWN0ZXIpLiAgQW5k Citub3cgd2UgaGF2ZSBhIGdlbmVyYWwtcHVycG9zZSBzdHJpbmctdHJhbnNsYXRpbmcgZnVuY3Rp b24gd2UgY2FuIGNhbGwgZnJvbQorYW55d2hlcmUuICBSZXF1aXJlcyB0aGF0IEMtS2VybWl0IGJl IGJ1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0LgorY2t1dXM2LmMsIDI2IEFwciAyMDA2LgorCitB ZGRlZCBTSE9XIFJFTkFNRS4gIGNrdXVzci5oLCBja3V1c1tyNV0uYywgMjYgQXByIDIwMDYuCisK K0NvbmRpdGlvbmFsaXplZCBzb21lIFVuaXgvV2luZG93cyBhc3N1bXB0aW9ucyBpbiByZW5hbWVv bmUoKSBzbyB0aGUgY29kZQorY291bGQgd29yayBpbiBWTVMuICBja3V1czYuYywgMiBNYXkgMjAw Ni4KKworQWRkZWQgUkVOQU1FIC9GSVhTUEFDRVMgdG8gY2hhbmdlIGFsbCBzcGFjZXMgaW4gdGhl IGZpbGVuYW1lKHMpIHRvCit1bmRlcnNjb3JlIG9yIGFueSBvdGhlciBjaGFyYWN0ZXIgb3Igc3Ry aW5nIHRoYXQgaXMgZ2l2ZW4uICBUaGlzIGlzIGp1c3QgYQorc3BlY2lhbCBjYXNlIG9mIFJFTkFN RSAvUkVQTEFDRTp7eyB9e3h9fSB3aXRoIGVhc2llciBzeW50YXguCitja3V1c3IuaCwgY2t1dXM2 LmMsIDIgTWF5IDIwMDYuCisKK0FkZGVkIGFuICJhbGwtYnV0IiBjb250cm9sIHRvIHRoZSAvUkVQ TEFDRSBvcHRpb25zOgorL1JFUExBQ0U6e3sufXtffXt+MX19IG1lYW5zIHJlcGxhY2UgYWxsIGJ1 dCB0aGUgZmlyc3QgKHRoaXMgb25lIHdvcmtzKTsKKy9SRVBMQUNFOnt7Ln17X317fi0xfX0gbWVh bnMgcmVwbGFjZSBhbGwgYnV0IHRoZSBsYXN0ICh0aGlzIG9uZSBub3QgeWV0KS4KK2NrdXVzNi5j LCAyIE1heSAyMDA2LgorCitGaWxsZWQgaW4gdGhlIHNlY29uZCBvbmUgKCJhbGwgYnV0IiB0aGUg Z2l2ZW4gb2NjdXJyZW5jZSkuICBUaGUgYWxnb3JpdGhtIGlzCitzaW1wbHkgdG8gcmV2ZXJzZSB0 aGUgdGhyZWUgc3RyaW5ncyBhbmQgdGhlbiB1c2UgdGhlIHNhbWUgY29kZSBhcyB3ZSB1c2UgaW4K K3RoZSBsZWZ0LXJpZ2h0LWNhc2UsIGFuZCB0aGVuIHVucmV2ZXJzZSB0aGUgcmVzdWx0LiAgQXQg Zmlyc3QgSSB1c2VkCit5eXN0cmluZygpIGZvciB0aGlzIGJ1dCB5aWtlcywgd2hhdCBhIGJhZCBk ZXNpZ24hICBTbyBJIG1hZGUgYSBiZXR0ZXIKK3N0cmluZy1yZXZlcnNhbCByb3V0aW5lLCBnbmly dHMoKSwgZm9yIHRoaXMgKGx1Y2tpbHkgeXlzdHJpbmcoKSBpcyBvbmx5IHVzZWQKK2luIG9uZSBw bGFjZSwgZm9yIHdoaWNoIGl0cyBkZXNpZ24gaXMgYXBwcm9wcmlhdGUpLiBja3V1czYuYywgMy00 IE1heSAyMDA2LgorCitBZGRlZCBjb2RlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgZmls ZSBiZWluZyByZW5hbWVkIGluY2x1ZGVzIGEgcGF0aAorc3BlY2lmaWNhdGlvbi4gIEluIHRoaXMg Y2FzZSB3ZSBzZXBhcmF0ZSB0aGUgcGF0aCwgYXBwbHkgdGhlIHJlbmFtaW5nCitmdW5jdGlvbnMg dG8gdGhlIGZpbGVuYW1lIG9ubHksIGFuZCB0aGVuIGF0IHRoZSBlbmQgcmVqb2luIHRoZSBvcmln aW5hbAorZmlsZW5hbWUgd2l0aCB0aGUgcGF0aCwgYW5kIGpvaW4gdGhlIG5ldyBuYW1lIHdpdGgg c2FtZSBwYXRoIG9yLCBpZiBhCitkZXN0aW5hdGlvbiBkaXJlY3Rvcnkgd2FzIGdpdmVuLCB3aXRo IHRoYXQuICBja3V1czYuYywgNCBNYXkgMjAwNi4KKworQWRkZWQgSEVMUCBTRVQgUkVOQU1FIGFu ZCB1cGRhdGVkIEhFTFAgUkVOQU1FLiAgY2t1dXMyLmMsIDQgTWF5IDIwMDYuCisKKyJUb20gVmlv bGluIiAoVG9tIEhhbnNlbikgbm90aWNlZCB0aGF0IHRoZSBmaXJzdCB0aW1lIHlvdSBGT1BFTiBh IGZpbGUsCitLZXJtaXQncyBtZW1vcnkgY29uc3VtcHRpb24gZ29lcyB3YXkgdXAuICBJbiBmYWN0 IHRoZXJlJ3MgYSB3YXJuaW5nIHRvIHRoYXQKK2VmZmVjdCBpbiB0aGUgY29kZSwgd2hlcmUsIHVw b24gZmlyc3Qgb3BlbiwgYSBwb3RlbnRpYWxseSBiaWcgYXJyYXkgb2YKK3BvdGVudGlhbGx5IGJp ZyBzdHJ1Y3RzIGlzIGFsbG9jYXRlZC4gIEkgcmV3cm90ZSB0aGUgY29kZSB0byBhbGxvY2F0ZSBl YWNoCithcnJheSBtZW1iZXIgKHN0cnVjdCBja3pfZmlsZSkgYXMgbmVlZGVkLCBpLmUuIHdoZW4g YSBmaWxlIGlzIG9wZW5lZCwgYW5kIHRvCitmcmVlIGl0IHdoZW4gdGhlIGZpbGUgaXMgY2xvc2Vk IChvciB0aGUgb3BlbiBmYWlscykuICBUaGlzIHdhcyBhY3R1YWxseQorcXVpdGUgYSBsb3Qgb2Yg d29yaywgd2hpY2ggaXMgd2h5IEkgZGlkbid0IGRvIGl0IHRoZSBmaXJzdCB0aW1lIGFyb3VuZDoK K2V2ZXJ5IHNpbmdsZSAiLiIgIGhhZCB0byBiZSBjaGFuZ2VkIHRvICItPiIuICBFdmVyeSBjaGVj ayBmb3IgYSB2YWxpZAorY2hhbm5lbCBmaXJzdCBoYWQgdG8gY2hlY2sgaWYgdGhlIGNoYW5uZWwn cyBzdHJ1Y3Qgd2FzIGFsbG9jYXRlZCBhbmQgZXZlcnkKK290aGVyIHJlZmVyZW5jZSB0byB6X2Zp bGVbaV0tPmFueXRoaW5nIGhhZCB0byBiZSBwcmVjaGVja2VkIHRoYXQgel9maWxlW2ldCit3YXMg bm90IGEgTlVMTCBwb2ludGVyLiAgQWxzbyBJIG1hZGUgc29tZSBpbXByb3ZlbWVudHMgdG8gRklM RSBTVEFUVVMsIGFuZCBJCitmaXhlZCBGSUxFIENMT1NFIHRvIGRlZmF1bHQgdGhlIGNoYW5uZWwg bnVtYmVyIGlmIG9ubHkgb25lIGNoYW5uZWwgd2FzIG9wZW4sCithcyBJIGRpZCBmb3IgRklMRSBT VEFUVVMgYSB3aGlsZSBiYWNrLiAgY2t1dXM3LmMsIENpbmNvIGRlIG1heW8gMjAwNi4KKworUmFu IG15IG9sZCBCVUlMRFMgc2NyaXB0IHRoYXQgYnVpbGRzIEMtS2VybWl0IHdpdGggYWJvdXQgMTAw IGRpZmZlcmVudAorY29tYmluYXRpb25zIG9mIGZlYXR1cmUtc2VsZWN0aW9uIHN3aXRjaGVzLiAg Rml4ZWQgYSBmZXcgc21hbGwgZ2xpdGNoZXMgc28KK25vdyB0aGV5IGFsbCBidWlsZCBPSyAoZXhj ZXB0IGNhbid0IGRvIE5PQU5TSSBidWlsZHMgYW55IG1vcmUgb24gcmVjZW50CitMaW51eGVzIGJl Y2F1c2Ugb2YgdmFyYXJncygpKS4gIGNrdXVzMy5jLCBja3V1czUuYywgY2t1dXM2LmMsIGNrdXVz Ny5jLAorY2t1Y21kLmMsIGNrY2Zucy5jLCA2IE1heSAyMDA2LgorCitGaXhlZCBSRU5BTUUgL0xP V0VSIGFuZCAvVVBQRVIsIHdoZW4gZ2l2ZW4gd2l0aCBubyBjb2xvbiBvciBhcmd1bWVudCwgdG8K K2RlZmF1bHQgdG8gQUxMLiAgY2t1dXM2LmMsIDEzIE1heSAyMDA2LgorCitCdWlsdCBvbiBWTVMg Ny4yLTEsIHRlc3RlZCBuZXcgUkVOQU1FIGNvbW1hbmQgdGhlcmU7IHNlZW1zIHRvIGJlIE9LLgor MTMgTWF5IDIwMDYuCisKKy0tLSBEZXYuMTggLS0tCisKK0kgd2FudGVkIHRvIHRlc3QgbGFyZ2Ug ZmlsZXMgYWdhaW5zdCBSRVNFTkQgYnV0IEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55CitzeXN0 ZW0gdGhhdCBjYW4gcnVuIEMtS2VybWl0IGFuZCB0aGF0IGFsc28gaGFzIGVub3VnaCBzcGFjZSBm b3IgYSBsYXJnZQorZmlsZS4gIEkgY3JlYXRlZCBhICJmYWtlIiBsYXJnZSBmaWxlIG9uIExpbnV4 ICgzRyBob2xlIHBsdXMgMSBieXRlKSwgYW5kCitzZW50IGl0IG92ZXIgYSBsb2NhbGhvc3QgY29u bmVjdGlvbiwgYW5kIGludGVycnVwdGVkIGl0IHJlcGVhdGVkbHkgYW5kIHRoZW4KK2luaXRpYXRl ZCBhIFJFU0VORCBhdCB0aGUgc2VuZGVyLiAgSW4gZWFjaCBjYXNlLCBpdCBwaWNrZWQgdXAgd2hl cmUgaXQgbGVmdAorb2ZmLiAgQnV0IGJlZm9yZSB0aGUgMkcgYm91bmRhcnkgd2FzIGNyb3NzZWQg dGhlIGRpc2sgZmlsbGVkIHVwLgorSW5jb25jbHVzaXZlLiAgMTQgTWF5IDIwMDYuCisKK1BldGVy RSBnb3QgYSB3YXJuaW5nIGluIHRoZSBuZXcgRklMRSBPUEVOIGNvZGUgd2hlbiBidWlsZGluZyBp biBIUC1VWCA5LgorSSBhZGRlZCBhIGNhc3QsIGJ1aWx0IG9uIEhQLVVYIDExLCBubyBtb3JlIGNv bXBsYWludC4gIEhvd2V2ZXIgdGhlcmUKK2FyZSB3YXJuaW5ncyBhYm91dCBpbnRlcm5hbCB2cyBl eHRlcm5hbCBiaW5kaW5ncyBvZiBzZW5kcGF0aCBhbmQgc2VuZGZpbGUKK2luIGV2ZXJ5IG1vZHVs ZS4gIFRvbyBiYWQsIHRoZXNlIGFyZSBub3QgS2VybWl0IHRva2VucywgaXQncyBhIGNvbmZsaWN0 IGluCitIUCdzIGhlYWRlciBmaWxlcy4gIE1hcmMgU2FwaXJvIGRvZXNuJ3Qgc2VlIHRoZW07IHBy b2JhYmx5IGl0J3Mgc29tZXRoaW5nCitvbiB0aGUgSFAgdGVzdGRyaXZlIHNpdGUuICBja3V1czcu YywgMTcgTWF5IDIwMDYuCisKK0ZpeGVkIHRoZSB0cnU2NC01MWIrb3BlbnNzbCB0YXJnZXQgLS0g dGhlIHRlcm1pbmF0aW5nIGRvdWJsZXF1b3RlIG9mIEtGTEFHUword2FzIG1pc3NpbmcgLS0gYW5k IGFsc28gdGhlIG9zZiB0YXJnZXQsIHdoaWNoIGZhaWxlZCB0byBpbXBvcnQgdGhlIExJQlMKK2Rl ZmluaXRpb24gZnJvbSB3aGF0ZXZlciBvdGhlciB0YXJnZXQgaW52b2tlZCBpdC4gIE5vdyB0aGUg U1NMIGJ1aWxkIGdvZXMgT0sKK29uIFRydTY0IDUuMUIuICBSZXBsYWNlZCB4LnRhci56IGluIHRo ZSBkb3dubG9hZCBhcmVhcyB3aXRob3V0IGRlY2xhcmluZyBhCituZXcgRGV2IG51bWJlci4gIFRo ZSBuZXcgb25lIGhhcyBhIG1ha2VmaWxlIHdpdGggdG9kYXkncyBkYXRlLiAgU29mdHdhcmUKK2Vu Z2luZWVyaW5nIGF0IGl0cyBiZXN0ISAgbWFrZWZpbGUsIDE4IE1heSAyMDA2LgorCitTY290dCBL YXN0ZW4gbm90ZWQgdGhhdCB0aGUgZXN0aW1hdGVkLXRpbWUtcmVtYWluaW5nIGNhbGN1bGF0aW9u IHdvdWxkIGdvCitib25rZXJzIG9uIExGUyBzeXN0ZW1zIHdoZW4gUkVTRU5EaW5nIGEgbGFyZ2Ug ZmlsZS4gIEl0IGxvb2tzIGxpa2UgdGhlCitzaG9jcHMoKSBhbmQgc2hvZXRsKCkgZnVuY3Rpb25z IGVzY2FwZWQgdGhlIENLX09GRl9UIGNvbnZlcnNpb24uICBJIG1hZGUKK3doYXQgc2VlbWVkIHRv IGJlIHRoZSByaWdodCBhZGp1c3RtZW50cywgYW5kIHRoZW4gd2FzIGx1Y2t5IGVub3VnaCB0byBm aW5kIGEKK2NvbXB1dGVyIHRoYXQgaGFkIGVub3VnaCBmcmVlIGRpc2sgc3BhY2UgZm9yIG1lIHRv IHNlbmQgYSBsYXJnZSBmaWxlLAoraW50ZXJydXB0IGl0IHNldmVyYWwgdGltZXMsIHJlc2VuZCBp dCwgYWxsIHNlZW1zIHRvIGJlIE9LLiAgMjggTWF5IDIwMDYuCitMYXRlciBTY290dCB2ZXJpZmll ZCB0aGVzZSBjaGFuZ2VzIGluZGVwZW5kZW50bHkgZm9yIExpbnV4LCBidXQgdGhlIHByb2JsZW1z CitpbiBJUklYIHJlbWFpbi4KKworUGF0Y2hlcyBmcm9tIFNjb3R0IEthc3RlbiBmb3IgbGFyZ2Ug ZmlsZXMgb24gSVJJWCA2LjU6IGNrY2RlYi5oLCBtYWtlZmlsZSwKKzEyIEp1biAyMDA2LgorCist LS0gRGV2LjE5IC0tLQorCitBZGRlZCBhIG5ldyBmdW5jdGlvbiBmb3IgZGVhbGluZyB3aXRoIEpQ R3MgYW5kIEdJRnM6CisKK1xmcGljdHVyZShmaWxlbmFtZSwmYSkKKyAgcmV0dXJucyAwIGlmIGZp bGUgbm90IHJlY29nbml6ZWQgb3IgY2FuJ3QgYmUgb3BlbmVkOworICByZXR1cm5zIDEgaWYgbGFu ZHNjYXBlLCAyIGlmIHBvcnRyYWl0IG9yIHNxdWFyZS4KKyAgSWYgYXJyYXkgZ2l2ZW4sIGVsZW1l bnQgMSBpcyB3aWR0aCwgZWxlbWVudCAyIGlzIGhlaWdodC4KKworY2t1dXNyLmgsIGNrdXVzNC5j LCAxOSBKdW4gMjAwNi4KKworU2NvdHQgS2FzdGVuIHJlcG9ydHMgdGhhdCB0aGUgRlRQIGNsaWVu dCBjYW4gdHJhbnNmZXIgbGFyZ2UgZmlsZXMgT0ssIGF0CitsZWFzdCBpbiBMaW51eCwgYnV0IGhh cyB0cm91YmxlIHdpdGggcmVjb3Zlcnk6CisKKyAuIEtlcm1pdCB0YWtlcyBhIHZlcnkgbG9uZyB0 aW1lIHRvIHN0YXJ0IHRoZSB0cmFuc2Zlciwgc29tZXRpbWVzIG92ZXIKKyAgIDMwIG1pbnV0ZXMu ICBTdXNwZWN0IHRoZSBmdHAgc2VydmVyIGlzIGNvdW50aW5nIHRoZSBieXRlcyBpbiBhIGxvbmcg ZmlsZT8KKyAgIE9yIG1heWJlIGl0J3MgYSB0ZXh0LW1vZGUgdHJhbnNmZXIgYW5kIGl0J3MgY291 bnRpbmcgdGhlIGxpbmVzPyAgUHJvYmFibHkKKyAgIGluIHJlc3BvbnNlIHRvIEtlcm1pdCdzIFNJ WkUgY29tbWFuZC4KKworIC4gVGhlIHNpemUgc2hvd24gaW4gdGhlIEZUIGRpc3BsYXkgaXMgd3Jv bmcgYnkgYSByYW5kb20gYW1vdW50LiAgQW5kIG9mCisgICBjb3Vyc2Ugc28gYXJlIHRoZSBwcm9n cmVzcyBiYXIsIHBlcmNlbnQgZG9uZSwgYW5kIHRpbWUgcmVtYWluaW5nLgorCisgLiBUaGUgZmls ZSwgaG93ZXZlciwgaXMgdHJhbnNmZXJyZWQgY29ycmVjdGx5LiAgUkVHRVQgd29ya3MgY29ycmVj dGx5IHRvby4KKworSSB0cmllZCBzZXR0aW5nIHVwIGEgdGVzdCBzY2VuYXJpbyBsb2NhbGx5IGJ1 dCBvdXIgU29sYXJpcyBGVFAgc2VydmVyIGRvZXMKK25vdCBzdXBwb3J0IGxhcmdlIGZpbGVzOgor CisgIEZUUCBTRU5UIFtTSVpFIEJJR0ZJTEVdCisgIEZUUCBSQ1ZEIFs1NTAgQklHRklMRTogbm90 IGEgcGxhaW4gZmlsZS5dCisgIEZUUCBTRU5UIFtQQVNWXQorICBGVFAgUkNWRCBbMjI3IEVudGVy aW5nIFBhc3NpdmUgTW9kZSAoMTI4LDU5LDQ4LDI0LDI0NiwzNyldCisgIEZUUCBTRU5UIFtSRVRS IEJJR0ZJTEVdCisgIEZUUCBSQ1ZEIFs1NTAgQklHRklMRTogVmFsdWUgdG9vIGxhcmdlIGZvciBk ZWZpbmVkIGRhdGEgdHlwZS5dCisKK0NyZWF0ZWQgdGhlIHNhbWUgM0dCIG9uIGEgVHJ1NjQgVW5p eCBzeXN0ZW0gdGhhdCBhbGxvd3MgRlRQIGFjY2Vzcy4gIE1hZGUKK3RoZSBjb25uZWN0aW9uIGZy b20gQy1LZXJtaXQgb24gU29sYXJpcyAoMzItYml0IHdpdGggTEZTKToKKworICAxNjo0NjoxMi45 MDggRlRQIFNFTlQgW1NJWkUgQklHRklMRV0KKyAgMTY6NDY6MTIuOTQ3IEZUUCBSQ1ZEIFsyMTMg MzAwMDAwMDAwMV0KKworTm90ZSB0aGF0IGl0IHRha2VzIGxlc3MgdGhhbiBoYWxmIGEgc2Vjb25k IHRvIGdldCB0aGUgcmVwbHkuICBOb3cgSSBzdGFydAordGhlIGRvd25sb2FkIGFuZCB0aGVuIGlu dGVycnVwdCBpdCBhdCBhYm91dCAyJToKKworICAxNjo0NjoxMi45NzkgRlRQIFNFTlQgW1RZUEUg SV0KKyAgMTY6NDY6MTMuMTc0IEZUUCBSQ1ZEIFsyMDAgVHlwZSBzZXQgdG8gSS5dCisgIDE2OjQ2 OjEzLjIyNiBGVFAgU0VOVCBbUEFTVl0KKyAgMTY6NDY6MTMuMjYyIEZUUCBSQ1ZEIFsyMjcgRW50 ZXJpbmcgUGFzc2l2ZSBNb2RlICgxNSwxNzAsMTc4LDE3MSwxMSwzNyldCisgIDE2OjQ2OjEzLjI5 OSBGVFAgU0VOVCBbUkVUUiBCSUdGSUxFXQorICAxNjo0NjoxMy4zMzcgRlRQIFJDVkQgWzE1MCBP cGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVjdGlvbiBmb3IgQklHRklMRS4uXQorICAxNjo0 NzoyNC44OTUgRlRQIFJDVkQgWzQyNiBUcmFuc2ZlciBhYm9ydGVkLiBEYXRhIGNvbm5lY3Rpb24g Y2xvc2VkLl0KKyAgMTY6NDc6MjQuOTM0IEZUUCBSQ1ZEIFsyMjYgQWJvcnQgc3VjY2Vzc2Z1bF0K KyAgMTY6NDc6MjQuOTkxIEZUUCBTRU5UIFtNRFRNIEJJR0ZJTEVdCisgIDE2OjQ3OjI1LjAyOCBG VFAgUkNWRCBbMjEzIDIwMDYwNzA2MjA0NDU4XQorCitOb3cgSSBkbyBhIFJFR0VUOgorCisgIDE2 OjUxOjU1LjMyMSBGVFAgU0VOVCBbUEFTVl0KKyAgMTY6NTE6NTUuMzU3IEZUUCBSQ1ZEIFsyMjcg RW50ZXJpbmcgUGFzc2l2ZSBNb2RlICgxNSwxNzAsMTc4LDE3MSwxMSw0MyldCisgIDE2OjUxOjU1 LjM5NCBGVFAgU0VOVCBbUkVTVCAxMjI3MzY2NDBdCisgIDE2OjUxOjU1LjQzMCBGVFAgUkNWRCBb MzUwIFJlc3RhcnRpbmcgYXQgMTIyNzM2NjQwLiBTZW5kIFNUT1JFIG9yIFJFVFJJRVZFLi5dCisg IDE2OjUxOjU1LjQzMSBGVFAgU0VOVCBbUkVUUiBCSUdGSUxFXQorICAxNjo1MTo1NS40NjkgRlRQ IFJDVkQgWzE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVjdGlvbiBmb3IgQklHRklM RS4uXQorCitUaGlzIHdvcmtlZCBwZXJmZWN0bHksIGFzIGZhciBhcyBJIGNhbiB0ZWxsOyB0aGUg RlQgZGlzcGxheSBwaWNrZWQgdXAgaW4gdGhlCityaWdodCBwbGFjZTsgdGhlIHRoZXJtb21ldGVy LCBwZXJjZW50IGRvbmUsIGFuZCBlc3RpbWF0ZWQgdGltZSByZW1haW5pbmcKK3dlcmUgdGhlIHNh bWUgYXMgd2hlbiB3ZSBsZWZ0IG9mZiBsYXN0IHRpbWUuICBJIGRpZCB0aGUgc2FtZSB0aGluZyBz ZXZlcmFsCittb3JlIHRpbWVzLCBldmVyeXRoaW5nIHdhcyBPSy4gIEl0IHdvdWxkIGhhdmUgdGFr ZW4gYSByZWFsbHkgbG9uZyB0aW1lIHRvCitsZXQgdGhpcyBydW4gdG8gY29tcGxldGlvbiwgYnV0 IEkgdGhpbmsgdGhpcyBkZW1vbnN0cmF0ZXMgdGhhdCBTY290dCdzCitzeW1wdG9tcyBhcmUgc2Vy dmVyLWRlcGVuZGVudC4gIE5vIGNoYW5nZXMuICA2IEp1bHkgMjAwNi4KKworQ2hlY2tlZCBjdXJy ZW50IGNvZGUgb24gVk1TIDguMi0xIG9uIElBNjQgLyBVQ1ggNS41LCBidWlsZHMgZmluZS4KK05v IGNoYW5nZXMuICBVcGRhdGVkIGxpc3RpbmcgYXQgSFAuICA2IEp1bHkgMjAwNi4KKworQ2hlY2tl ZCBGVFAgR0VUIG9mIGxhcmdlIGZpbGUgaW4gQVNDSUkgbW9kZSBhZ2FpbnN0IFRydTY0IEZUUCBz ZXJ2ZXIuICBJdAord2FzIGZpbmUsIGFuZCB0aGVyZSB3YXMgbm8gZGVsYXkgaW4gdGhlIHNlcnZl cidzIHJlc3BvbnNlIHRvIG91ciBTSVpFIGNvbW1hbmQKKyhhcyB0aGVyZSB3b3VsZCBiZSBpZiBp dCB3ZXJlIHNjYW5uaW5nIHRoZSBlbnRpcmUgZmlsZSB0byBjb3VudCBob3cgbWFueQorYnl0ZXMg d291bGQgYmUgcmVxdWlyZWQgdG8gc2VuZCBpdCBpbiB0ZXh0IG1vZGUpLiAgNyBKdWwgMjAwNi4K KworVGVzdGVkIEZUUCBQVVQgYmlnIGZpbGUgYWdhaW5zdCBUcnU2NCwgT0suICBEaXR0byBGVFAg UkVTRU5EIGJpZyBmaWxlOgorCisgIEMtS2VybWl0PnJlc2VuZCBCSUdGSUxFCisgICBQVVQgQklH RklMRSAoYmluYXJ5KSAoMzAwMDAwMDAwMSBieXRlcyktLS0+IFBBU1YKKyAgMjI3IEVudGVyaW5n IFBhc3NpdmUgTW9kZSAoMTUsMTcwLDE3OCwxNzEsMTMsMTg2KQorICAtLS0+IFNJWkUgQklHRklM RQorICAyMTMgMzQzMjExMjgwCisgIC0tLT4gTURUTSBCSUdGSUxFCisgIDIxMyAyMDA2MDcwNzE0 MTI0MworICAtLS0+IEFQUEUgQklHRklMRQorICAxNTAgT3BlbmluZyBCSU5BUlkgbW9kZSBkYXRh IGNvbm5lY3Rpb24gZm9yIEJJR0ZJTEUgKDEyOC41OS41OS41Niw0NTQ3MCkuCisKK01hZGUgUkVQ VVQgYSBzeW5vbnltIGZvciBSRVNFTkQuICBja3V1c3IuYywgNyBKdWwgMjAwNi4KKworQWRkZWQg RlRQIFJFUFVUIGFuZCBGVFAgUkVTRU5EIHNpbmNlIHByZXZpb3VzbHkgdGhlcmUgd2FzIG5vIEZU UC1wcmVmaXhlZAorY29tbWFuZCBmb3IgcmVjb3ZlcmluZyB1cGxvYWRzLCBvbmx5IHRoZSByZWd1 bGFyIFJFU0VORCBjb21tYW5kLCB3aGljaCBtaWdodAorbm90IGhhdmUgYmVlbiBvYnZpb3VzIHRv IHBlb3BsZS4gIGNrY2Z0cC5jLCA3IEp1bCAyMDA2LgorCitBZGRlZCBoZWxwIHRleHQgZm9yIEZU UCBSRVNFTkQgYW5kIFJFUFVUIGFuZCBhbWVuZGVkIFJFU0VORCBoZWxwIHRleHQuCitja2NmdHAu YywgY2t1dXMyLmMsIDcgSnVsIDIwMDYuCisKK0NoYW5nZWQgbmFtZSBvZiBcZnBpY3R1cmUoKSB0 byBcZnBpY3R1cmVpbmZvKCkgYW5kIGFkZGVkIGhlbHAgdGV4dC4gIEJ5IHRoZQord2F5LCBJbWFn ZU1hZ2ljayBjYW4gZG8gdGhpcyB0b286IGlkZW50aWZ5IC1mb3JtYXQgIiV3ICVoIiBkc2NmMDUy MC5qcGcuCitUaGUgYWR2YW50YWdlIG9mIGhhdmluZyBpdCBpbiBLZXJtaXQgaXMgdGhhdCBub3Qg ZXZlcnlib2R5IGhhcyBJbWFnZU1hZ2ljay4KK2NrdXVzWzI0XS5jLCA3IEp1bCAyMDA2LgorCitD aGFuZ2VkIHRoZSBudW1lcmljIGNvbXBhcmlzb25zID0gPCA+IDw9ID49ICE9IHRvIGFsbG93IGxv bmcgaW50ZWdlcnMgYnkKK2NoYW5naW5nIHRoZSBkYXRhIHR5cGUgdG8gQ0tfT0ZGX1QsIGV0Yy4g IGNrdXVzNi5jLCA3IEp1bCAyMDA2LgorCitOb3RpY2VkIHRoYXQgXGZrZXl3b3JkdmFsdWUoZm9v PXRoaXMgaXMgYSBzdHJpbmcpIG9ubHkga2VwdCB0aGUgZmlyc3Qgd29yZC4KK0ZpeGVkIGl0IHRv IGtlZXAgdGhlIHdob2xlIGRlZmluaXRpb24uICBBbHNvIGFkZGVkIFxma3d2YWx1ZSgpIGFzIGEg YnJpZWZlcgorc3lub255bS4gIGNrdXVzNC5jLCA3IEp1bCAyMDA2CisKK1NvbWV0aW1lcyB3ZSB3 YW50IHRvIGNoZWNrIGlmIGEgZmlsZSdzIHN0YXR1cyBiZWZvcmUgd2UndmUgRk9QRU4nZCBpdCwg aW4KK3doaWNoIGNhc2UgdGhlIGNoYW5uZWwgdmFyaWFibGUgaXMgbGlrZWx5IHRvIGJlIGVtcHR5 IGFuZCBcZl9zdGF0dXMoXCVjKQord291bGQgZ2V0IGFuIGVycm9yLiAgTWFraW5nIHRoZSBvYnZp b3VzIGNoYW5nZSBkaWRuJ3QgZml4IHRoaXMsIGhvd2V2ZXIuICBJdAordHVybnMgb3V0IHRoYXQg dGhlIGZ1bmN0aW9uIGV2YWx1YXRvciBmYWlsZWQgdG8gYWRqdXN0IGFyZ24gKGFyZ3VtZW50IGNv dW50KQord2hlbiB0cmFpbGluZyBhcmd1bWVudHMgd2VyZSBlbXB0eSwgYW5kIGFyZ24gd2FzIGJl aW5nIHVzZWQgaW4gdGhpcyBjYXNlLAorYW5kIHByb2JhYmx5IG90aGVycywgdG8gdGVzdCB3aGV0 aGVyIGFuIGFyZ3VtZW50IGV4aXN0ZWQuICBJIGFkZGVkIGNvZGUgdG8KK2FkanVzdCBhcmduIHRv IHJlZmxlY3QgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUK K3JpZ2h0bW9zdCBub24tZW1wdHkgb25lLiAgY2t1dXM0LmMsIDcgSnVsIDIwMDYuCisKK0ZpeGVk IFxmc3RyaXBiKCkgdG8gbm90IGR1bXAgY29yZSBpZiBzZWNvbmQgYXJndW1lbnQgaXMgbWlzc2lu Zy4KK2NrdXVzNC5jLCA3IEp1bCAyMDA2LgorCitEaXNjb3ZlcmVkIHRoYXQgaXQgd2FzIG5vdCBv YnZpb3VzIHdoYXQgcGF0dGVybiB0byB1c2UgdG8gbWF0Y2ggc3RyaW5ncworZW5jbG9zZWQgaW4g c3F1YXJlIGJyYWNrZXRzLiAgImlmIG1hdGNoIFthYmNdIFxbKlxdIiBkaWRuJ3Qgd29yay4gIE5l aXRoZXIKK2RpZCB2YXJpb3VzIG90aGVyIHRyaWNrcyBsaWtlIE5DUnMgZm9yIHRoZSBicmFja2V0 cy4gIEhvd2V2ZXIsICJpZiBtYXRjaAorW2FiY10gXFxbKlxcXSIgZG9lcyB3b3JrLiAgVHJ5aW5n IHRvIGZpeCB0aGlzIHdvdWxkIG5vIGRvdWJ0IGJyZWFrIDEwMCBvdGhlcgordGhpbmdzLCBzbyBs ZXQncyBjYWxsIGl0IGEgZmVhdHVyZS4gIDcgSnVsIDIwMDYuCisKK0FkZGVkIFxmZ2V0cGlkaW5m byhuKSB0byByZXR1cm4gaW5mbyBhYm91dCBhIHByb2Nlc3MgSUQ7IGZvciBub3cgaXQgc2ltcGx5 CityZXR1cm5zIDEgaWYgdGhlIHByb2Nlc3MgaXMgYWxpdmUgYW5kIDAgaWYgbm90IChvciAtMSBp ZiB0aGUgYXJndW1lbnQgaXMKK2JhZCBvciBtaXNzaW5nIG9yIG9uIGFueSBraW5kIG9mIGVycm9y KS4gIGNrdXVzci5oLCBja3V1c1syNF0uYywgNyBKdWwgMjAwNi4KKworVGhlICJ3aGVyZS1kaWQt bXktZmlsZS1nbyIgbWVzc2FnZSBzZWVtZWQgdG8gYmUgZW5kaW5nIHdpdGggYSBMRiByYXRoZXIK K3RoYW4gQ1JMRiwgcHJvYmFibHkgYmVjYXVzZSB0aGUgdGVybWluYWwgbW9kZXMgaGFkIG5vdCB5 ZXQgYmVlbiByZXN0b3JlZCwKK2xlYXZpbmcgdGhlIG5leHQgcHJvbXB0IGhhbmdpbmcgYmVsb3cg aXQsIHJhdGhlciB0aGFuIG9uIHRoZSBsZWZ0IG1hcmdpbiwKK2lmIEMtS2VybWl0IGV4aXRlZCBp bW1lZGlhdGVseSBhZnRlciB0aGUgdHJhbnNmZXIuICBGaXhlZCBieSBjaGFuZ2luZworYWxsIFxu J3MgdG8gXHJcbidzIGluIHdoZXJlbXNnKCk6IGNrY3Byby53LCA4IEp1bCAyMDA2LgorCitBZGRl ZCBcdihsYXN0a3d2YWwpIHNvIHdlIGNhbiByZXRyaWV2ZSBwcm9ncmFtbWF0aWNhbGx5IHRoZSBr ZXl3b3JkIG1vc3QKK3JlY2VudGx5IHByb2Nlc3NlZCBieSBcZmtleXdvcmR2YWwoKS4gIGNrdXVz ci5oLCBja3V1czQuYywgOSBKdWwgMjAwNi4KKworLS0tIERldi4yMCAtLS0KKworQWRkZWQgI2lm ZGVmIFNWNjgsICNpbmNsdWRlIDx1bmlzdGQuaD4sICNlbmRpZiBiZWNhdXNlIFVuaXggU3lzdGVt IFYvNjggb24KK01vdG9yb2xhIGNob2tlZCBvbiB0aGUgU0VFS19DVVIgcmVmZXJlbmNlIHdpdGhv dXQgaXQuICBja3V1czQuYywgMTAgSnVsIDIwMDYuCisKK01ha2UgXGZrZXl3b3JkdmFsKHh4eCkg dW5kZWZpbmUgeHh4IChpLmUuIHdoZW4gYSBrZXl3b3JkIGlzIGdpdmVuIHdpdGggbm8KK3ZhbHVl KS4gIFRoaXMgd2F5IGNvbW1hbmQtbGluZSBrZXl3b3JkcyB3aWxsIGFsd2F5cyBvdmVycmlkZSBw cmVleGlzdGluZworZGVmYXVsdCBkZWZpbml0aW9ucywgd2hldGhlciB0aGV5IGhhdmUgYSB2YWx1 ZSBvciBub3QsIHdoaWNoIG1ha2VzIGl0IGVhc2llcgordG8gcGFyc2UgY29tbWFuZCBsaW5lcyBs aWtlICJmb289YmFyIGJsYWggeHg9eXkiLiAgY2t1dXNbMjRdLmMsIDEyIEp1bCAyMDA2LgorCitP biAyOSBOb3YgMjAwNSBJIGNoYW5nZWQgSUYgS0VSQkFORyB0byBzb2x2ZSBhIHByb2JsZW0gKHNl ZSBlbnRyeSBmb3IgdGhhdAorZGF0ZSksIGJ1dCBpbnRyb2R1Y2VkIGEgbmV3IG9uZTsgbmFtZWx5 IHRoYXQgeW91IGNhbid0IGhhdmUgKGUuZy4pICBhIEZBVEFMCittYWNybyB0aGF0IHVzZXMgSUYg S0VSQkFORyB0byBkZWNpZGUgd2hldGhlciB0byBFWElUIGFsbCB0aGUgd2F5IG9yIFNUT1AKK2Jh Y2sgdG8gdGhlIHByb21wdC4gIENoYW5nZWQgaXQgYWdhaW4sIHRoaXMgdGltZSB0byByZXF1aXJl IG5vdCB0aGF0IHRoZQorY29tbWFuZCBsZXZlbCBiZSAxLCBidXQgdGhhdCB0aGUgY29tbWFuZCAq ZmlsZSogbGV2ZWwgYmUgMCAoaS5lLiB0aGF0IHdlIGFyZQoraW4gdGhlIHRvcC1sZXZlbCBjb21t YW5kIGZpbGUsIGlycmVzcGVjdGl2ZSBvZiB0aGUgY29tbWFuZCBvciBtYWNybyBsZXZlbCwKK2J1 dCBub3QgaW4gYSBzdWJmaWxlKS4gIGNrdXVzNi5jLCAxMiBKdWwgMjAwNi4KKworSXQgaXMgdW5o ZWxwZnVsIHdoZW4gS2VybWl0IGdldHMgYSBzeW50YXggZXJyb3IgaW4gdGhlIG1pZGRsZSBvZiBh IGJpZworY29tcG91bmQgc3RhdGVtZW50IGJsb2NrIChlLmcuIEZPUiBvciBXSElMRSBsb29wKSBh bmQgZHVtcHMgb3V0IHRoZSB3aG9sZQordGhpbmcgaW4gYW4gZXJyb3IgbWVzc2FnZS4gIEkgY2hh bmdlZCB0aGUgdHdvIHBsYWNlcyB3aGVyZSB0aGlzIGNhbiBoYXBwZW4KK3RvIGNhbGwgYSBuZXcg cm91dGluZSB0aGF0LCBpbnN0ZWFkIG9mIGR1bXBpbmcgb3V0IHRoZSBlbnRpcmUgY21kYnVmLAor Y2hlY2tzIGl0cyBsZW5ndGggZmlyc3QgYW5kIGlmIGl0J3MgbW9yZSB0aGFuIGEgbGluZSBsb25n LCB0cnVuY2F0ZXMgaXQKK2FuZCBhZGRzIGFuIGVsbGlwc2lzLiAgY2t1dXM2LmMsIDEyIEp1bCAy MDA2LgorCitUaGUgbmV3IFJFTkFNRSBjb21tYW5kIGRpZG4ndCBnaXZlIHZlcnkgZ29vZCBlcnJv ciBtZXNzYWdlcywgZS5nLiBpZiB0aGUKK2ZpbGVzcGVjIGRpZG4ndCBtYXRjaCBhbnkgZmlsZXMu ICBGaXhlZCBpbiBkb3JlbmFtKCk6IGNrdXVzNi5jLCAxMiBKdWwgMjAwNi4KKworRml4ZWQgRElS IC9UT1AgdG8gd29yayBpZiB0aGUgL1RPUDpuIGFyZ3VtZW50IHdhcyBvbWl0dGVkLCBkZWZhdWx0 aW5nCit0byAxMC4gIGRvbXlkaXIoKTogY2t1dXM2LmMsIDEyIEp1bCAyMDA2LgorCitBZGRlZCBE SVIgL0NPVU5UOnYgdG8gY291bnQgdGhlIG51bWJlciBvZiBmaWxlcyB0aGF0IG1hdGNoIHRoZSBn aXZlbgorY3JpdGVyaWEgYW5kIHN0b3JlIHJlc3VsdCBpbiB0aGUgdmFyaWFibGUgdi4gIGNrdXVz ci5oLCBja3V1c1tyMjZdLmMsCisyNCBBdWcgMjAwNi4KKworQWRkZWQgSERJUkVDVE9SWSBhcyBh biBpbnZpc2libGUgc3lub255bSBmb3IgRElSIC9TT1JUOlNJWkUgL1JFVkVSU0UuCitDYW4gYmUg dXNlZCB3aXRoIG90aGVyIHN3aXRjaGVzLCBvZiBjb3Vyc2UsIHNvIChlLmcuKSBIRCAvVE9QIHNo b3dzIHRoZQordGVuIGJpZ2dlc3QgZmlsZXMuICBja3V1c3IuaCwgY2t1dXNbcjI2XS5jLCAyNCBB dWcgMjAwNi4KKworRElSIC9GT0xMT1dMSU5LUyBhbmQgL05PRk9MTE9XTElOS1MgYWx3YXlzIGRp ZCB0aGUgc2FtZSB0aGluZzsgdGhlIHN3aXRjaAord2FzIGlnbm9yZWQsIGEgc3ltbGluayBpcyBh bHdheXMgZm9sbG93ZWQuICBGaXhlZCBpbiBja3V1czYuYywgMjQgQXVnIDIwMDYuCisKK0FkZGVk IERJUiAvTk9MSU5LUywgd2hpY2ggbWVhbnMgZG9uJ3Qgc2hvdyBvciBjb3VudCBzeW1saW5rcyBh dCBhbGwuCitja3V1c3IuaCwgY2t1dXNbcjI2XS5jLCAyNCBBdWcgMjAwNi4KKworQnVpbGQgb24g U29sYXJpcyA5IGFuZCBOZXRCU0QgMy4wLCAyNCBBdWcgMjAwNi4KKworQWRkZWQgYSBtaXNzaW5n IGRlZmluaXRpb24gZm9yIExPQ0tfRElSIGluIHRoZSBMaW51eCBIQVZFX0JBVURCT1kgY2FzZSwK K3N1Z2dlc3RlZCBieSBHZXJyeSBCZWxhbmdlci4gIGNrdXRpby5jLCA2IE9jdCAyMDA2LgorCitT dWdnZXN0ZWQgYnkgSmltIENyYXB1Y2hldHRlczogXHYoZGlhbG1lc3NhZ2UpIGlzIHRoZSB0ZXh0 IHN0cmluZworY29ycmVzcG9uZGluZyB0byBcdihkaWFsc3RhdHVzKS4gIGNrdXVzci5oLCBja3V1 czQuYywgNiBPY3QgMjAwNi4KKworU29ld29ubyBFZmZlbmRpIHNlbnQgY29kZSBmb3IgZXhpdCBz ZXF1ZW5jZSB0byBsZWF2ZSBEVFIgb247IHRoaXMgYW1vdW50ZWQKK3RvIHVuc2V0dGluZyBIUFVD TCBpbiBjX2NmbGFnLiAgSSBkaWQgaXQgYSBzaW1wbGVyIHdheSwgaG9wZWZ1bGx5IHBvcnRhYmxl Cit0byBhbGwgVW5peGVzLCBidXQgd2hvIGtub3dzIGF0IHRoaXMgbGF0ZSBkYXRlLiAgVGhlIGNv ZGUgaXMgaW5zaWRlCisjaWZuZGVmIENLX05PSFVQQ0wuLiNlbmRpZiBpbiBjYXNlIGl0IGNhdXNl cyB0cm91YmxlLiAgSXQgaXMgZXhlY3V0ZWQgaWYKK1NFVCBFWElUIEhBTkdVUCBpcyBPRkYgYW5k IGEgc2VyaWFsIHBvcnQgd2FzIG9wZW4gYXQgdGhlIHRpbWUgS2VybWl0IGV4aXRzCisob3IgY2xv c2VzIGl0IGV4cGxpY2l0bHkpLiAgdHRjbG9zKCk6IGNrdXRpby5jLCA2IE9jdCAyMDA2LgorCitC dWlsdCBvbiBTb2xhcmlzOS9TcGFyYzsgRnJlZUJTRCA2LjIvQU1ENjQ7IE5ldEJTRCAzLjAvaTM4 NjsgSFAtVVggMTFpIHYyOworU0NPIE9TUjYuMDAuCisKKy0tLSBEZXYuMjEgLS0tCisKK0FkZGVk IG5ldGJzZCtvcGVuc3NsIHRhcmdldCB0byBtYWtlZmlsZS4gIEJ1aWx0IE9LIChOZXRCU0QgMy4w LCBPcGVuU1NMCiswLjkuN2QpIGV4Y2VwdCB3aXRoIHNvbWUgd2FybmluZ3MgaW4gY2tfY3JwLmMu ICBDb25uZWN0cyBhbmQgbG9ncyBpbiBPSyB0byBhCitzZWN1cmUgc2l0ZS4gIDEwIE9jdCAyMDA2 LgorCitBZGRlZCBhIGRlYnVnIHN0YXRlbWVudCB0byBmdHBfaG9va3VwKCkgdG8gcmVjb3JkIHRo ZSBUQ1AgcG9ydCB0aGF0IHdhcyB1c2VkLgorY2tjZnRwLmMsIDExIE9jdCAyMDA2LgorCitCdWls dCB3aXRoIE9wZW5TU0wgMC45LjdsIG9uIFNvbGFyaXMgOS4gIEJ1aWx0IHdpdGggT3BlblNTTCAw LjkuOGQgb24KK1NvbGFyaXMgOTsgY29ubmVjdHMgYW5kIGxvZ3MgaW4gdG8gYSBzZWN1cmUgc2l0 ZS4gIDExIE9jdCAyMDA2LgorCitUaGUgbmV3IFJFTkFNRSBjb21tYW5kIGRpZG4ndCB3b3JrIGlm IGJvdGggdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZXMKK2luY2x1ZGVkIGRpcmVjdG9y eSBzZWdtZW50cywgZS5nLiAicmVuYW1lIC90bXAvZm9vIH4vYmFyIiAoc2VlIG5vdGVzIG9mCis0 IE1heSAyMDA2KS4gIFRoaXMgd2FzIGZpeGVkIGluIHJlbmFtZW9uZSgpIGJ5IGEgc3BlY2lhbCBj YXNlIGluIHdoaWNoCit0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGdpdmVuIGJ1dCBpdCBpcyBhIGZp bGVuYW1lLCBub3QgYSBkaXJlY3RvcnkgbmFtZS4KK2NrdXVzNi5jLCAxMSBPY3QgMjAwNi4KKwor Rml4ZWQgdW5ndWFyZGVkIHJlZmVyZW5jZSB0byBkaWFsbXNnW10gZm9yIFxmZGlhbG1lc3NhZ2Uo KSwgbm90aWNlZCBieQorR2VycnkgQmVsYW5nZXIuICBja3V1czQuYywgMTIgT2N0IDIwMDYuCisK K0FkZGVkIGEgVE9VQ0ggY29tbWFuZCB0aGF0IGRvZXMgd2hhdCBVTklYIHRvdWNoIGRvZXM6IGNy ZWF0ZXMgdGhlIGZpbGUgaWYgaXQKK2RvZXMgbm90IGV4aXN0LCB1cGRhdGVzIHRoZSB0aW1lc3Rh bXAgaWYgaXQgZG9lcy4gIElmIGEgd2lsZGNhcmQgaXMgZ2l2ZW4sCitpdCBvcGVyYXRlcyBvbmx5 IG9uIGV4aXN0aW5nIGZpbGVzLiAgSXQgc2hhcmVzIHRoZSBESVJFQ1RPUlkgY29tbWFuZCBwYXJz ZXIsCitzbyBhbGwgdGhlIHNhbWUgZmlsZSBzZWxlY3Rpb24gc3dpdGNoZXMgY2FuIGJlIGdpdmVu LiAgY2t1dXNyLltjaF0sCitja3V1c1syNl0uYywgMTIgT2N0IDIwMDYuCisKK1BldGVyRSBub3Rp Y2VkIHRoYXQgaWYgeW91IEZPUEVOIGEgZmlsZSwgZG8gc29tZSBzZWVrcyBvciByZWFkcywgdGhl biBGQ0xPU0UKK2l0LCB0aGVuIEZPUEVOIGl0IGFnYWluIChvciBvcGVuIGEgZGlmZmVyZW50IG9u ZSksIHNvbWUgb2YgdGhlIG9sZAoraW5mb3JtYXRpb24gaXMgc3RpbGwgdGhlcmUgKGUuZy4gY3Vy cmVudCBsaW5lIG51bWJlcikuICBUaGlzIGlzIGFuIGFydGlmYWN0CitvZiB0aGUgY2hhbmdlcyBv ZiBNYXkgNHRoLiAgTm93IHRoZSBmaWxlIGNsb3NpbmcgYW5kIG9wZW5pbmcgcm91dGluZXMgYXJl IGEKK2JpdCBtb3JlIGNhcmVmdWwgYWJvdXQgc2NydWJiaW5nIGFuZCBpbml0aWFsaXppbmcgdGhl IGZpbGUgaW5mbyBzdHJ1Y3QuCitja3V1czcuYywgMTIgT2N0IDIwMDYuCisKKy0tLSBEZXYuMjIg LS0tCisKK0J1aWx0IE9LIG9uIFJlZCBIYXQgTGludXggQVM0IHdpdGggYm90aCAibWFrZSBsaW51 eCIgYW5kICJtYWtlIGxpbnV4bmMiLiAKKzE1IE9jdCAyMDA2LgorCitESVJFQ1RPUlkgL0JSSUVG IGlnbm9yZWQgZmlsZSBzZWxlY3Rpb24gc3dpdGNoZXMgYW5kIGFsd2F5cyBsaXN0ZWQgYWxsCitm aWxlcy4gIFRoaXMgd2FzIGJlY2F1c2Ugb2YgaG93IEkgY2xldmVybHkgY2FsbGVkIGZpbGhlbHAo KSAodGhlIHJvdXRpbmUKK3RoYXQgbGlzdHMgbWF0Y2hpbmcgZmlsZXMgd2hlbiA/IGlzIHR5cGVk IGluIGEgZmlsZW5hbWUgZmllbGQpIGFuZCwgb2YKK2NvdXJzZSwgZmlsaGVscCgpIGRvZXNuJ3Qg a25vdyBhbnl0aGluZyBhYm91dCB0aGUgRElSRUNUT1JZIGNvbW1hbmQncyBmaWxlCitzZWxlY3Rp b25zLiAgQ2hhbmdlZCBmaWxoZWxwKCkgdG8gYWNjZXB0IGFsbCB0aGUgYXJncyBuZWVkZWQgZm9y IHBhc3NpbmcKK2Fsb25nIHRvIGZpbGVzZWxlY3QoKSwgcmVuYW1lZCBpdCB0byB4ZmlsaGVscCgp LCBhbmQgbWFkZSBhIGZpbGhlbHAoKSBzdHViCit0aGF0IGNoYWlucyB0byB4ZmlsaGVscCgpIHdp dGggbnVsbCBzZWxlY3Rpb25zLiAgY2tja2VyLmgsIGNrdWNtZC5bY2hdLAorY2t1dXM2LmMsIDI5 IE5vdiAyMDA2LgorCitTSE9XIENPTk5FQ1RJT04gZm9yIGFuIFNTSCBjb25uZWN0aW9uIHNhaWQg dGhlIGNvbm5lY3Rpb24gdHlwZSB3YXMgIk5FVCIKK3JhdGhlciB0aGFuICJTU0giLiAgRml4ZWQg aW4gZG9sb2duZXQoKTogY2t1dXMzLmMsIDI5IE5vdiAyMDA2LgorCitTSE9XIENPTk5FQ1RJT04g ZGlkbid0IHNob3cgdGhlIFRDUCBwb3J0IG51bWJlci4gIFRoaXMgY29tbWFuZCB3b3JrcyBieQor cGFyc2luZyB0aGUgY3VycmVudCBjb25uZWN0aW9uIGxvZyBlbnRyeSBzdHJpbmcsIHdoaWNoIGRv ZXNuJ3QgaGF2ZSBhIGZpZWxkCitmb3IgdGhpcywgYnV0IHdoaWNoIHNvbWV0aW1lcyBzaG93cyB0 aGUgcG9ydCBudW1iZXIgYXMgcGFydCBvZiB0aGUgaG9zdG5hbWUKKyhidXQgbW9yZSBvZnRlbiBu b3QpLiAgQWRkZWQgY29kZSB0byBkb2xvZ25ldCgpIHRvIGxvZyB0aGUgVENQIHBvcnQgbnVtYmVy LAoraWYga25vd24uICBUaGlzIGludm9sdmVkIGFkZGluZyBhIGdldHRjcHBvcnQoKSBmdW5jdGlv biB0byBja2NuZXQuYy4KK2NrY25ldC5bY2hdLCBja3V1czMuYywgMjkgTm92IDIwMDYuCisKK1Ro aXMgd2FzIGltcG9zc2libGU6IGRlZiBcJTEgdXBwZXIsIGVjaG8gXGZcJTEoYWJjKSAtLSBpLmUu IHRvICJjb21wb3NlIiBhCitmdW5jdGlvbiBuYW1lLiAgRml4ZWQgaW4genpzdHJpbmcoKS4gIEJ1 dCBub3RlIHRoYXQgaXQncyBzdGlsbCBub3QgcG9zc2libGUKK3RvIGRvIHRoaXM6IGRlZiBcJTEg XGZ1cHBlciwgZWNobyBcJTEoYWJjKSAtLSBiZWNhdXNlIGF0IHRoZSBwb2ludCB3aGVyZQorIlxm dXBwZXIiIGlzIGVuY291bnRlcmVkLCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGZlZCB0byBmbmV2 YWwoKSwgdGhlCithcmd1bWVudCBsaXN0IGhhc24ndCBiZWVuIHJlYWQgeWV0LiAgY2t1dXM0LmMs IDI5IE5vdiAyMDA2LgorCitUaGUgbWVhbmluZ2xlc3MgTGlzcCBjb21tYW5kICg9KSB3b3VsZCBj YXVzZSBLZXJtaXQgdG8gaGFuZy4gIER1ZSB0byBzb21lCitpZGlvc3luY3JhY3kgaW4gdGhlIHBh cnNlciwgaXQgd291bGQgc2VlIHRoaXMgYXMgKCg9KSBhbmQgd291bGQgZ28gaW50bworIndhaXQg Zm9yIHRoZSBjbG9zaW5nIHBhcmVuIiBtb2RlLiAgVGhlcmUgd2FzIGFscmVhZHkgYSBoYWNrIGlu IHRoZSBjb2RlIHRvCitjb21wZW5zYXRlIGZvciB0aGlzLCBidXQgaXQgZGlkbid0IHdvcmsuICBJ IGZpeGVkIHRoZSBoYWNrIGJ1dCBJIGRvbid0Cit1bmRlcnN0YW5kIHRoZSByZWFsIHByb2JsZW0u ICBBbnl3YXksIGNvbXBhcmluZyBLZXJtaXQgd2l0aCByZWFsIChGcmFueikKK0xpc3AgSSBkaXNj b3ZlcmVkIHRoYXQgY29tcGFyaXNvbiBvcGVyYXRvcnMgZG8gbm90IHJlcXVpcmUgdHdvIGFyZ3Vt ZW50cywgYXMKK0tlcm1pdCBoYXMgYmVlbiBkb2luZywgYWx0aG91Z2ggdGhleSBkbyByZXF1aXJl IGF0IGxlYXN0IG9uZS4gIEkgY2hhbmdlZAorS2VybWl0IHRvIG5vdCByZXF1aXJlIHR3bywgc28g bm93IGFsbCB0aGUgY29tcGFyaXNvbiBwcmVkaWNhdGVzIGJlaGF2ZQorZXhhY3RseSBsaWtlIEZy YW56IExpc3AsIGluY2x1ZGluZyBnZXR0aW5nIGFuIGVycm9yIGlmIHRoZXJlIGFyZSBubyBhcmdz KS4KK2NrdXVzW3IzXS5jLCAyOSBOb3YgMjAwNi4KKworRnJvbSB0by1kbyBsaXN0OiBNYWtlIGEg d2F5IHRvIGluaGliaXQgcGF0dGVybiBtYXRjaGluZyBpbiBTV0lUQ0ggbGFiZWxzLgorSXQncyBh bHJlYWR5IHRoZXJlOyBqdXN0IHF1b3RlIHRoZSB3aWxkY2FyZCBjaGFyYWN0ZXJzOyB0aGUgb25s eSB0cmljayBpcwordGhhdCBmb3Igc29tZSByZWFzb24gKHN1Y2ggYXMgdGhhdCBTV0lUQ0ggaXMg cmVhbGx5IGFuIGludGVybmFsbHkgZGVmaW5lZAorbWFjcm8pLCBhIGRvdWJsZSBxdW90ZSBpcyBu ZWVkZWQ6CisKKyAgc3dpdGNoIFwlMSB7CisgICAgOmFcXCp6LCBlY2hvIGxpdGVyYWxseSAiYSp6 IiwgYnJlYWsKKyAgICA6YWJjeHl6LCBlY2hvIGxpdGVyYWxseSAiYWJjeHl6IiwgYnJlYWsKKyAg ICA6YSp6LCBlY2hvIGEuLi56LCBicmVhaworICAgIDpkZWZhdWx0LCBlY2hvIE5PIE1BVENICisg IH0KKworSW4gZmlyc3QgY2FzZSwgdGhlIGFzdGVyaXNrIGlzIHRha2VuIGxpdGVyYWxseTsgaW4g dGhlIHRoaXJkIGl0J3MgYQorbWV0YWNoYXJhY3RlciBhbmQgdGhlIGxhYmVsIG1hdGNoZXMgYW55 IHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICdhJyBhbmQKK2VuZHMgd2l0aCAneicuCisKK0FycmF5 IGluaXRpYWxpemF0aW9uIHdvdWxkIHF1aXQgZWFybHkgaWYgYW55IGluaXRpYWxpemVycyB3ZXJl IHVuZGVmaW5lZCwKK2UuZy4gImRlY2wgXCZhW10gPSBcJWEgXCViIFwlYyIgd291bGQgc3RvcCBh dCB0aGUgZmlyc3QgZWxlbWVudCBpZiBcJWIKK3dhcyBub3QgZGVmaW5lZCwgZXZlbiB0aG91Z2gg XCVjIG1pZ2h0IGJlIGRlZmluZWQuICBGaXhlZCBpbiBkb2RjbCgpOgorY2t1dXNyLmMsIDMwIE5v diAyMDA2LgorCitESVIgL0FSUkFZOmEgZmlsZXNwZWMsIHdoZW4gdGhlIGZpbGVzcGVjIGRvZXMg bm90IG1hdGNoIGFueSBmaWxlcywKK3Rlcm1pbmF0ZXMgd2l0aCB0aGUgYXJyYXkgdW5kZWNsYXJl ZC4gIEl0IHdvdWxkIGJlIGJldHRlciB0byByZXR1cm4gYQorZGVjbGFyZWQgYnV0IGVtcHR5IGFy cmF5IChcJmFbMF0gPSAwKS4gIFRoZSBjb2RlIGlzIGFscmVhZHkgdGhlcmUgdG8gZG8KK3RoYXQs IGJ1dCBpc24ndCB3b3JraW5nLiAgQW5kIHlldCAiZGVjbGFyZSBcJmFbMF0iIGRvZXMgaW5kZWVk IGNyZWF0ZSBhCiswLWVsZW1lbnQgYXJyYXkgKCJzaG93IGFycmF5IiBzaG93cyBhIGRpbWVuc2lv biBvZiAwKS4gIFR1cm5zIG91dCB0aGVyZSB3ZXJlCit0d28gcHJvYmxlbXM7IG9uZSB3YXMgdGhl IGNhcmVsZXNzIHJlY3ljbGluZyBvZiBhIGxvY2FsIHZhcmlhYmxlICgiYXJyYXkiKSwKK3Jlc3Vs dGluZyBpbiBmYWlsdXJlIHRvIGNyZWF0ZSBcJmFbXSAoYnV0IG5vdCBhbnkgb3RoZXIgYXJyYXkp LiAgRml4ZWQgaW4KK2RvbXlkaXIoKTogY2t1dXM2LmMsIDMwIE5vdiAyMDA2LgorCitUaGUgb3Ro ZXIgcHJvYmxlbSB3YXMgdGhhdCBkY2xhcnJheSgpLCB3aGVuIGNhbGxlZCB3aXRoIGFuIGFycmF5 IG5hbWUgYW5kIGEKK2RpbWVuc2lvbiBvZiB6ZXJvLCBkb2VzIHR3byBkaWZmZXJlbnQgdGhpbmdz IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBhcnJheQorYWxyZWFkeSBleGlzdGVkLiAgVGhlcmUg aXMgc3RpbGwgYSBmYWlyIGFtb3VudCBvZiBjb25mdXNpb24gYWJvdXQgd2hldGhlciBhCitkaW1l bnNpb24gb2YgMCBpbmRpY2F0ZXMgYW4gYXJyYXkgd2l0aCAxIGVsZW1lbnQgKGFzIGl0IHNob3Vs ZCkgb3IgYQorbm9uZXhpc3RlbnQgYXJyYXkuICBXZSBjYWxsIGRjbGFycmF5KCkgd2l0aCBhIHNp emUgb2YgMCB0byB1bmRlY2xhcmUgYW4KK2FycmF5IGJ1dCB3ZSBhbHNvIG5lZWQgdG8gYWJsZSBh YmxlIHRvIGRlY2xhcmUgYW4gYXJyYXkgd2l0aCBvbmx5IGVsZW1lbnQgMC4KK0kgY2hhbmdlZCBk Y2xhcnJheSgpIHRvIHRyZWF0IGEgbmVnYXRpdmUgZGltZW5zaW9uIGFzIGEgY29tbWFuZCB0byBk ZXN0cm95Cit0aGUgYXJyYXksIGFuZCAwIG9yIHBvc2l0aXZlIGFzIGEgY29tbWFuZCB0byBjcmVh dGUgdGhlIGFycmF5IHdpdGggdGhlIGdpdmVuCitkaW1lbnNpb24uICBja3V1c1tyNTZdLmMsIDMw IE5vdiAyMDA2LgorCitOZXh0IHByb2JsZW06IHdoZW4gY2hrYXJyYXkoKSByZXR1cm5zIDAsIHRo aXMgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCB0bworbWVhbiB0aGUgYXJyYXkgZG9lcyBub3Qg ZXhpc3QuICBMb29rcyBsaWtlIHRoZSBvbmx5IHBsYWNlIHRoaXMgaGFwcGVuZWQgd2FzCitpbiBc ZmNvbnRlbnRzKCk7IGZpeGVkIGluIGNrdXVzNC5jLCAzMCBOb3YgMjAwNi4KKworSWYgd2UgaW5j bHVkZSBmaWxlIHNlbGVjdG9ycyB3aXRoIERJUiAvQVJSQVk6JmEgYW5kIHNvbWUgb2YgdGhlIGZp bGVzIHRoYXQKK21hdGNoIHRoZSBnaXZlbiBmaWxlc3BlYyBidXQgZG9uJ3QgZml0IHRoZSBzZWxl Y3RvcnMsIHRoZSBhcnJheSdzIGRpbWVuc2lvbgoraXMgYmlnZ2VyIHRoYW4gaXRzIG51bWJlciBv ZiBlbGVtZW50cy4gIEFkZGVkIGNvZGUgYXQgdGhlIGVuZCBvZiBkb215ZGlyKCkKK3RvIHJlc2l6 ZSB0aGUgYXJyYXkgc28gXGZkaW0oKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZW5hbWVzIGlu IHRoZSBhcnJheSwKK2FuZCBhbHNvIG1hZGUgc3VyZSB0aGF0IGVsZW1lbnQgMCBjb250YWlucyB0 aGF0IG51bWJlciB0b28uICBja3V1czYuYywKKzMwIE5vdiAyMDA2LgorCitUaGlzIHdvdWxkIGJl IGEgbmljZSBlbGVnYW50IHdheSB0byBsb29wIG92ZXIgYSBidW5jaCBvZiBmaWxlcywgaWYgaXQg d29ya2VkOgorCisgIGZvciBcJWkgMSBcZmZpbGVzKCopIDEgeyByZW5hbWUgXGZuZXh0ZmlsZSgp IHh4eF9cZmxwYWQoXCVpLDMsMCkgfQorCitCdXQgaW4gdGhpcyBsb29wLCBLZXJtaXQgc2tpcHMg ZXZlcnkgb3RoZXIgZmlsZSAoYmVnaW5uaW5nIHdpdGggdGhlIGZpcnN0KQorYW5kIHRoZW4gcnVu cyBvdXQgb2YgZmlsZXMgaGFsZndheSB0aHJvdWdoIHRoZSBsb29wLiAgV2h5PyAgQmVjYXVzZSBp bgorY29tbWFuZHMgbGlrZSBSRU5BTUUgYW5kIERFTEVURSwgdGhlIGZpbGVuYW1lIHBhcnNlciBp cyBpbiBhIGNoYWluZWQgRkRCCit3aXRoIHRoZSBzd2l0Y2ggcGFyc2VyLiAgRmlyc3QgdGhlIHN3 aXRjaCBwYXJzZXIsIGNtc3dpKCksIGdldHMgaXRzIGhhbmRzIG9uCitcZm5leHRmaWxlKCksIHBh c3NpbmcgaXQgdGhyb3VnaCB0aGUgZXZhbHVhdG9yIGFuZCB0aHVzIGdldHRpbmcgdGhlIGZpcnN0 CitmaWxlbmFtZSwgd2hpY2ggaXQgdGhlbiBzZWVzIGlzIG5vdCBhIHN3aXRjaCwgc28gbm93IHRo ZSBmaWVsZCBpcyBwYXJzZWQgYnkKK3RoZSBuZXh0IHBhcnNlciBpbiB0aGUgY2hhaW4sIGNtaWZp KCksIHdoaWNoIGNhdXNlcyBcZm5leHRmaWxlKCkgdG8gYmUgCitleGVjdXRlZCBhZ2Fpbi4gIElu IGZhY3QsIHRoZSBGT1IgbG9vcCBoYXMgbm90aGluZyB0byBkbyB3aXRoOyB0aGUgc2FtZQordGhp bmcgaGFwcGVucyBsaWtlIHRoaXM6CisKKyAgdm9pZCBcZmZpbGVzKCopCisgIGRlbGV0ZSBcZm5l eHRmaWxlKCkKKworVGhpcyBkZWxldGVzIG5vdCB0aGUgZmlyc3QgZmlsZSwgYnV0IHRoZSBzZWNv bmQgb25lLiAgT2J2aW91c2x5IHVzZXJzIGNhbiBiZQordG9sZCBub3QgdG8gcmVmZXIgdG8gXGZu ZXh0ZmlsZSgpIGluIGNoYWluZWQtZmRiIGZpZWxkczoKKworICBmb3IgXCVpIDEgXGZmaWxlcygq KSAxIHsgLmYgOj0gXGZuZXh0ZmlsZSgpLCBkZWxldGUgXG0oZikgfQorCitidXQgdGhpcyBpcyBo YXJkbHkgaW50dWl0aXZlLiAgSSBoYWQgc29tZSBjbGV2ZXIgaWRlYXMgb2YgaG93IHRvIG1ha2UK K1xmbmV4dGZpbGUoKSB3b3JrIGFzIGV4cGVjdGVkIGluIHRoaXMgY29udGV4dCBidXQgaXQncyB3 YXkgdG9vIG11Y2ggbWFnaWMuCitCZXR0ZXIgdG8gc2ltcGx5IGRvY3VtZW50IHRoYXQgXGZuZXh0 ZmlsZSgpIGlzICJkZXByZWNhdGVkIiBhbmQgdGhlIGFycmF5Citmb3JtYXQgc2hvdWxkIGJlIHVz ZWQ6CisKKyAgZm9yIFwlaSAxIFxmZmlsZXMoKiwmYSkgMSB7IGRlbGV0ZSBcJmFbXCVpXSB9CisK K1RoZSBkaWZmZXJlbmNlIGlzLCBhbiBhcnJheSBlbGVtZW50IGRvZXNuJ3QgY2hhbmdlIGV2ZXJ5 IHRpbWUgaXQncyByZWZlcnJlZCB0byEKKworQWRkZWQgYSAvUFJFU0VSVkUgc3dpdGNoIHRvIHRo ZSBDT1BZIGNvbW1hbmQgdG8gcHJlc2VydmUgdGhlIHRpbWVzdGFtcCBhbmQKK3Blcm1pc3Npb25z IG9mIHRoZSBmaWxlLiAgSSBkaWQgdGhpcyB1c2luZyB0aGUgS2VybWl0IEFQSXMgc28gaXQgc2hv dWxkIHdvcmsKK2ZvciBhbnkgdmVyc2lvbiBvZiBDLUtlcm1pdCBvciBLOTUuICBja3V1c1syNl0u YywgMzAgTm92IDIwMDYuCisKK0FkZGVkIENPUFkgL09WRVJXUklURTp7QUxXQVlTLE5FVkVSLE9M REVSLE5FV0VSfSB0byBjb250cm9sIG5hbWUgY29sbGlzaW9ucword2hlbiBjb3B5aW5nIGFjcm9z cyBkaXJlY3Rvcmllcy4gIGNrdXVzWzI2XS5jLCAxIERlYyAyMDA2LgorCistLS0gRGV2LjIzIC0t LQorCitGaXhlZCBhIGJ1ZyBpbiBTRVQgVEVMTkVUIFBST01QVC1GT1ItVVNFUklELCBTRVQgQVVU SCBLRVJCRVJPU1s0NV0gUFJPTVBULAorYW5kIFNFVCBBVVRIIFNSUCBQUk9NUFQgaW4gd2hpY2gg dGhlIHVzZXIncyBzdHJpbmcgd2FzIGNvbXBhcmVkIHdpdGggYQorbGl0ZXJhbCAocyA9PSAiIiks IHJlcG9ydGVkIGJ5IFBhdm9sIFJ1c25hay4gIFdvcnNlLCBlbXB0eSBzdHJpbmdzIChpZiB0aGUK K3Rlc3Qgc3VjY2VlZGVkKSB3ZXJlIHR1cm5lZCBpbnRvIG51bGwgcG9pbnRlcnMsIGFuZCB0aGVu IGZlZCB0byBzdHJsZW4oKS4KK0ZpeGVkIGluIGNrdXVzMy5jLCA1IERlYyAyMDA2LgorCitBZGRl ZCBhbiBvcHRpb25hbCA0dGggYXJndW1lbnQgdG8gXGZpbmRleCgpLCBcZnJpbmRleCgpLCBcZnNl YXJjaCgpLCBhbmQKK1xmcnNlYXJjaCgpOiB0aGUgZGVzaXJlZCBvY2N1cnJlbmNlIG51bWJlciBv ZiB0aGUgc2VhcmNoZWQtZm9yIHN0cmluZy4KK1xmcnNlYXJjaCgpIHdhcyBhIGJpdCB0cmlja3ku ICBja3V1c1syNF0uYywgNyBEZWMgMjAwNi4KKworQWRkZWQgXGZjb3VudChzMSxzMikgdG8gdGVs bCB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHMxIGluIHMyLgorY2t1dXNbMjRdLmMsIDgg RGVjIDIwMDYuCisKK0FkZGVkIFxmZnVuY3Rpb24oczEpIHRvIHRlbGwgaWYgYSBnaXZlbiBidWls dC1pbiBmdW5jdGlvbiBpcyBhdmFpbGFibGUuCitja3V1c1syNF0uYywgOCBEZWMgMjAwNi4KKwor Q2hhbmdlZCBSRU5BTUUgL0NPTExJU0lPTjpQUk9DRUVEIHRvIGJlIC9DT0xMSVNJT046U0tJUCwg d2hpY2ggaXMgY2xlYXJlci4KK2NrdXVzWzI2XS5jLCA4IERlYyAyMDA2LgorCitGb3IgY29tbXVu aWNhdGlvbiBwcm90b2NvbHM6IElOUFVUIC9DT1VOVDpuIHRvIHJlYWQgZXhhY3RseSBuIGNoYXJh Y3RlcnMKK3dpdGhvdXQgYW55IG1hdGNoaW5nLiAgQ2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB3 aXRoIENPTlRFTlRfTEVOR1RIIGluIENHSQorc2NyaXB0czsgTlVMIGNoYXJhY3RlcnMgYXJlIGNv dW50ZWQgYnV0IG5vdCBjb2xsZWN0ZWQuICBja3V1c3IuW2NoXSwKK2NrdXVzNC5jLCA4IERlYyAy MDA2LgorCitUaGVyZSB3YXMgYSBiYWQgYnVnIGluIHRoZSBkYXRlLXBhcnNpbmcgcm91dGluZXM7 IGl0J3MgYmVlbiB0aGVyZSBmb3IgeWVhcnMuCitJZiBhIGRhdGUgc3RyaW5nIGluY2x1ZGVzIGEg dGltZXpvbmUsIGUuZy4gIlNhdCwgOSBEZWMgMjAwNiAxOToyNjoyMyBFU1QiLAorYW5kIGNvbnZl cnRpbmcgdG8gR01UIGNoYW5nZXMgdGhlIGRhdGUsIHRoZSB2YXJpYWJsZXMgZm9yIGRheSwgbW9u dGgsIGFuZAoreWVhciAod2hpY2ggYXJlIHVzZWQgbGF0ZXIpIHdlcmUgbm90IHVwZGF0ZWQsIGFu ZCB0aGUgZmluYWwgcmVzdWx0IHdhcyBhIGRheQorb2ZmLiAgRml4ZWQgaW4gY21jdnRkYXRlKCk6 IGNrdWNtZC5jLCAxMCBEZWMgMjAwNi4KKworQnVpbHQgT0sgd2l0aCBTU0wvVExTLiAgVGVzdGVk IHdpdGggdGhlIFBPUCBzY3JpcHQsIGZvdW5kIHRoYXQgSSBicm9rZSBJTlBVVAord2hlbiBhZGRp bmcgdGhlIC9DT1VOVCBmZWF0dXJlOyB0aGVyZSB3YXMgYSBwYXRoIHRocm91Z2ggdGhlIGNvZGUg dGhhdCBjb3VsZAorbGVhdmUgdGhlICJhbnljaGFyIiB2YXJpYWJsZSB1bnNldCBhbmQgdGhlcmVm b3JlIHJhbmRvbS4gIEZpeGVkIGluCitkb2lucHV0KCkuICBUaGUgUE9QIHNjcmlwdCwgd2hpY2gg ZG9lcyBub3QgdXNlIC9DT1VOVCwgd29ya3MgYWdhaW4gYW5kIHNvCitkb2VzIGEgbmV3IENHSSBz Y3JpcHQsIHdoaWNoIGRvZXMgdXNlIC9DT1VOVC4gIGNrdXVzNC5jLCAxMCBEZWMgMjAwNi4KKwor U3VwcGxpZWQgYSBtaXNzaW5nIGNvbW1hIGluIHRoZSBoZWxwLXRleHQgYXJyYXkgZm9yIEhFTFAg U0VUIFRFUk1JTkFMLCB3aGljaAorcmVzdWx0ZWQgaW4gYmFkIGZvcm1hdHRpbmcgaW4gSzk1IGFy b3VuZCBTRVQgU05JLUZJUk1XQVJFLVZFUlNJT05TLgorY2t1dXMyLmMsIDEwIERlYyAyMDA2Lgor CitNYWRlICJoZWxwIGxvY3VzIiBhIHN5bm9ueW0gZm9yICJoZWxwIHNldCBsb2N1cyIuICBja3V1 c3IuW2NoXSwgY2t1dXMyLmMsCisxMSBEZWMgMjAwNi4KKworVGhpcyBtb3JuaW5nIHRoZSBDb2x1 bWJpYSBGVFAgc2VydmVyIHdhcyBtYWxmdW5jdGlvbmluZyBpbiBhIHBlcmZlY3Qgd2F5Citmb3Ig bWUgdG8gaW1wbGVtZW50IGFuZCB0ZXN0IGFuIEZUUCB0aW1lb3V0IG1lY2hhbmlzbS4gIFRoZSBz ZXJ2ZXIgd291bGQKK2Nsb3NlIHRoZSBkYXRhIGNvbm5lY3Rpb24gYWZ0ZXIgc2VuZGluZyB0aGUg ZmlsZSwgYnV0IHRoZSBjbGllbnQgbmV2ZXIgc2F3Cit0aGUgY2xvc2UgYW5kIHdhcyBzdHVjayBm b3JldmVyIGluIGEgcmVjdigpLiAgSSBhZGRlZCBjb2RlIHRvIGRvIGEgc2VsZWN0KCkKK29uIHRo ZSBkYXRhIGNvbm5lY3Rpb24gcHJpb3IgdG8gZW50ZXJpbmcgdGhlIHJlY3YoKSwgd2l0aCBhIHRp bWVvdXQgb24gdGhlCitzZWxlY3QoKSB0aGF0IHRoZSB1c2VyIGNhbiBlc3RhYmxpc2ggd2l0aCBT RVQgRlRQIFRJTUVPVVQuICBCdWlsdCBhbmQgdGVzdGVkCitvbiBTb2xhcmlzIDksIGNsZWFyLXRl eHQgRlRQLiAgQWxzbyBidWlsdCBjbGVhbmx5IGZvciBGVFBTIGFuZCB0ZXN0ZWQKK2FnYWluc3Qg YSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBoYW5nOyBJIGRvbid0IGhhdmUgYWNjZXNzIHRvIGFuIEZU UFMgc2VydmVyCit0aGF0IHdvdWxkIHRpY2tsZSB0aGUgdGltZW91dCBjb2RlLiAgY2tjZnRwLmMs IDExIERlYyAyMDA2LgorCistLS0gRGV2LjI0IC0tLQorCitGaXhlZCBhIGJ1ZyBpbiB0aGUgSU5Q VVQgL0NPVU5UOiBwYXJzZXI6IHRoZSBhcnJheSBvZiBzZWFyY2ggc3RyaW5ncyB3YXMKK25ldmVy IGluaXRpYWxpemVkLCB3aGljaCBkaWRuJ3QgbWF0dGVyIGJlZm9yZSwgYnV0IHdpdGggL0NPVU5U OiwgaWYgdGhlCitmaXJzdCBlbGVtZW50IHdhcyBub3QgYSBOVUxMIHBvaW50ZXIsIHdlJ2QgdHJl YXQgaXQgYXMgYSBzZWFyY2ggc3RyaW5nLCBhbmQKK3RoZW4gaWYgaXQgaGFwcGVuZWQgdG8gbWF0 Y2ggc29tZXRoaW5nIGluIHRoZSBpbnB1dCBzdHJlYW0sIHRoZSBvcGVyYXRpb24KK3dvdWxkIHN0 b3AgYmVmb3JlIHRoZSBjb3VudCB3YXMgZXhoYXVzdGVkLiAgRml4ZWQgYnkgKGEpIGluaXRpYWxp emluZyB0aGUKK2FycmF5LCBhbmQgKGIpIGlnbm9yaW5nIGFueSBzZWFyY2ggc3RyaW5ncyBpZiAv Q09VTlQ6IHdhcyBnaXZlbi4gIGNrdXVzci5jLAorMTMgRGVjIDIwMDYuCisKK1JlbW92ZWQgYSBk ZWJ1ZygpIHN0YXRlbWVudCBmcm9tIHpzYXR0cigpIHRoYXQgc3VkZGVubHkgc3RhcnRlZCBtYWtp bmcgc29tZQordmVyc2lvbiBvZiBnY2MgY29tcGxhaW4sIHJlcG9ydGVkIGJ5IEdlcnJ5IEJlbGFu Z2VyLiAgY2t1ZmlvLmMsIDEzIERlYyAyMDA2LgorCistLS0gRGV2LjI1IC0tLQorCitTb21lIGNh c3RzIGZvciB0aGUgMyBpbnRlcmlvciBhcmdzIG9mIHRoZSBuZXcgc2VsZWN0KCkgY2FsbCBpbiBj a2NmdHAuYworZm9yIEhQLVVYIDkuICAxNCBEZWMgMjAwNi4KKworQ2hhbmdlZCBcZmtleXdvcmR2 YWx1ZSgpIHRvIGFjY2VwdCBhIHN0cmluZyByYXRoZXIgdGhhbiBhIHNpbmdsZSB3b3JkCithcyBp dHMgc2Vjb25kIGFyZ3VtZW50LCBzbyB0aGF0IG1vcmUgdGhhbiBvbmUgc2VwYXJhdG9yIGNvdWxk IGJlIHNwZWNpZmllZCwKK2FuZCB0byByZXR1cm4gLTEgb24gZXJyb3IsIDAgaWYgaXQgZm91bmQg bm90aGluZywgMSBpZiBnaXZlbiBhIGtleXdvcmQgYnV0CitubyB2YWx1ZSwgYW5kIDIgaWYgdGhl cmUgd2FzIGEga2V5d29yZCBhbmQgYSB2YWx1ZS4gIGRva3d2YWwoKTogY2t1dXNbMjRdLmMsCisx NCBEZWMgMjAwNi4KKworQ2hlY2tlZCBGVFAgdGltZW91dCBvbiBjb21tYW5kIGNoYW5uZWwgd2l0 aCBGVFAgRElSRUNUT1JZIG9mIGEgYmlnIGRpcmVjdG9yeQordXNpbmcgYSBwYXRoIGludG8gb3Vy IGZ0cCBzZXJ2ZXIgdGhhdCBwcmVzZXJ2ZXMgdGhlIGhhbmdpbmcgYmVoYXZpb3IuICBUaGUKK3Rp bWVvdXQgd2FzIGFjdHVhbGx5IHdvcmtpbmcsIGJ1dCB0aGUgZmFpbHVyZSBjb25kaXRpb24gd2Fz bid0IHByb3BhZ2F0aW5nCitiYWNrIHRvIHRoZSB1c2VyLCBhbmQgdGhlcmUgd2FzIG5vIGVycm9y IG1lc3NhZ2UuICBGaXhlZCBpbiBkb2Z0cHJlY3YyKCkgYW5kCitmYWlsZnRwcmVjdjIoKTogY2tj ZnRwLmMsIDE1IERlYyAyMDA2LgorCitBZGRlZCB0aGUgb2J2aW91cyB0aW1lb3V0IGNoZWNrcyBm b3IgRlRQIHVwbG9hZHMsIGJ1dCBJIGhhdmUgbm8gd2F5IHRvIHRlc3QKK3RoZSBjb2RlIHNpbmNl IG91ciBtaXNiZWhhdmluZyBGVFAgc2VydmVyIGRvZXMgbm90IGhhbmcgd2hlbiByZWNlaXZpbmcK K2ZpbGVzLCBvbmx5IHdoZW4gc2VuZGluZyB0aGVtLiAgQnV0IHVwbG9hZHMgd29yayBib3RoIHdp dGggYW5kIHdpdGhvdXQgYQordGltZW91dCBzZXQsIHNvIGF0IGxlYXN0IG5vIGhhcm0gaXMgZG9u ZS4gIGNrY2Z0cC5jLCAxNyBEZWMgMjAwNi4KKworV2hlbiBkb3dubG9hZGluZyB3aXRoIEZJTEUg REVTVElOQVRJT04gTk9XSEVSRSAoPSAvQ0FMSUJSQVRFKSwgS2VybWl0IHN0aWxsCitjaGVja2Vk IHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBmaWxlIGFuZCByZWZ1c2VkIGl0IGlmIHRoZXJlIHdh c24ndCBlbm91Z2gKK2ZyZWUgZGlzayBzcGFjZSwgb24gcGxhdGZvcm1zIChzdWNoIGFzIFZNUykg d2hlcmUgemNoa3NwYSgpKSBhY3R1YWxseSB3b3JrczsKK3JlcG9ydGVkIGJ5IEJvYiBHZXplbHRl ci4gIGNrY2ZuMy5jLCAxOCBEZWMgMjAwNi4KKworQnVpbHQgb24gTWFjIE9TIFggMTAuNC44IGFu ZCBOZXRCU0QgMy4xX1JDMywgYWxsIE9LLiAgMTkgRGVjIDIwMDYuCisKKy0tLSBEZXYuMjYgLS0t CisKK0J1aWx0IG9uIFZNUyA3LjMtMi9BbHBoYS4gIEhhZCB0byBzcXVlbGNoIGEgY291cGxlIGNv bXBpbGVyIHdhcm5pbmdzIGJ5CitjaGFuZ2luZyBzb21lIGludHMgaW4gdGhlIG5ldyBcZnBpY3R1 cmVpbmZvKCkgY29kZSBmcm9tIHVuc2lnbmVkIHRvIHNpZ25lZCwKK2FuZCBmaXggYSB0eXBvIGlu IHRoZSBwcm90b3R5cGUgZm9yIHRoZSBuZXcgZ2V0dGNwcG9ydCgpIGZ1bmN0aW9uLgorY2tjbmV0 LmgsIGNrdXVzNC5jLCAyMiBEZWMgMjAwNi4KKworLS0tIERldi4yNyAtLS0KKworUGFyYW1ldGVy aXplZCBwdHkgcm91dGluZXMgYW5kIGFsbCByZWZlcmVuY2VzIHRvIHRoZW0gZm9yIGZpbGUgZGVz Y3JpcHRvciwKK3JhdGhlciB0aGFuIHRvIHVzZSBnbG9iYWwgdHR5ZmQsIHRodXMgYWxsb3dpbmcg cHR5cyB0byBiZSBjcmVhdGVkIGZvcgorZGlmZmVyZW50IHB1cnBvc2VzLiAgVGVzdGVkIG9uIFNv bGFyaXMgOSBhbmQgTWFjIE9TIFggMTAuNC44LCB3aXRoICJzZXQgaG9zdAorL2Nvbm5lY3QgL3B0 eSBlbWFjcyIgKGZpbmUgaW4gYm90aCBjYXNlcyksIGFuZCAobW9yZSB0byB0aGUgcG9pbnQpICJz ZXQgaG9zdAorL2Nvbm5lY3QgL3B0eSBrZXJtaXQiIC0tIGhlcmUgd2UgbWFrZSBhIGNvbm5lY3Rp b24gZnJvbSBvbmUgS2VybWl0IHByb2Nlc3MKK3RvIGFub3RoZXIgYW5kIHRyYW5zZmVyIGEgZmls ZTsgd29ya3MgZmluZSBhbmQgd2Fzbid0IGVzcGVjaWFsbHkgc2xvdyBlaXRoZXI7CithIGdvb2Qg c2lnbi4gIGNrY2RlYi5oLCBja3V0aW8uYywgY2t1cHR5LmMsIDIyIERlYyAyMDA2LgorCitDcmVh dGVkIGEgbmV3IHZlcnNpb24gb2YgdHRydW5jbWQoKSBjYWxsZWQgdHR5cHR5Y21kKCksIHdoaWNo IHdvcmtzIGJ5CitjYWxsaW5nIGRvX3B0eSgpIHRvIGdldCBhIHB0eSB0byBydW4gdGhlIGNvbW1h bmQgb24sIGFuZCB0aGVuIGluIGEgbG9vcCwKK3JlYWRzIGZyb20gdGhlIHB0eSBhbmQgd3JpdGVz IHRvIHRoZSBuZXQgYW5kIHJlYWRzIGZyb20gdGhlIG5ldCBhbmQgd3JpdGVzCit0byB0aGUgcHR5 LCB1c2luZyBzZWxlY3QoKSB0byB3aGljaCBvZiB0aG9zZSBpdCBzaG91bGQgZG8gb24gZWFjaCBw YXNzLgorRmlyc3QgY3V0IGp1c3QgdXNlcyBzaW5nbGUtYnl0ZSByZWFkcyBhbmQgd3JpdGVzLiAg VGVzdGVkIHVzaW5nIEtlcm1pdAoraXRzZWxmIGFzIGFuIGV4dGVybmFsIHByb3RvY29sLiAgV29y a3MgYnV0IHNsb3dseTogNjAwMGNwcy4gIFptb2RlbSBkb2Vzbid0Cit3b3JrIGF0IGFsbC4gIGNr dXRpby5jLCAyNCBEZWMgMjAwNi4KKworQ2hhbmdlZCBzaW5nbGUtY2hhcmFjdGVyIHJlYWQoKSBh bmQgd3JpdGUoKSB0byBidWZmZXJlZCByZWFkcyBhbmQgd3JpdGVzLAord2l0aCB0dHhpbigpIGFu ZCB0dG9sKCkgdXNlZCBmb3IgbmV0d29yayBpL28uICBVc2luZyBLZXJtaXQgYXMgdGhlIGV4dGVy bmFsCitwcm90b2NvbCwgdGhpcyBnaXZlcyA0NTBLY3BzIChhYm91dCAxLzMgbm9ybWFsIG9uIHRo aXMgY29ubmVjdGlvbikuICAKKworQnV0IG5vdyB0aGVyZSdzIGEgcHJvYmxlbTogdGhlIGxvb3Ag ZG9lc24ndCBrbm93IHdoZW4gdG8gc3RvcC4gIEhvdyBkb2VzIGl0Citrbm93IHdoZW4gdGhlIHBy b2Nlc3MgdGhhdCBpcyBydW5uaW5nIG9uIHRoZSBwdHkgaGFzIGV4aXRlZD8gIFdpdGggc2luZ2xl CitjaGFyYWN0ZXIgcmVhZCgpJ3MgdGhhdCBhcmUgZXhlY3V0ZWQgdW5jb25kaXRpb25hbGx5IHdo ZW4gc2VsZWN0KCkgc2F5cyB0aGUKK3B0eSBoYXMgZGF0YSB3YWl0aW5nLCBhcyBpbiB0aGUgZmly c3QgcGFzcywgSSBnZXQgRUlPIGlmIHRoZXJlIGFjdHVhbGx5Citpc24ndCBhbnksIGFuZCBjYW4g ZXhpdCB0aGUgbG9vcC4gIEJ1dCBub3csIHRvIGF2b2lkIGJsb2NraW5nLCBJIGNhbGwKK2luX2No aygpIHRvIHNlZSBob3cgbXVjaCBkYXRhIGlzIHdhaXRpbmcsIGFuZCBJIGRvbid0IHRyeSB0byBy ZWFkIGFueXRoaW5nCitpZiBpdCBzYXlzIG5vdGhpbmcgaXMgd2FpdGluZy4gIElmIHRoZSBwcm9j ZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHR5IGZpbGUKK2Rlc2NyaXB0b3IgaGFzIHRlcm1pbmF0 ZWQsIGluX2NoaygpIHdvdWxkIHByZXN1bWFibHkgZ2V0IHNvbWUga2luZCBvZiBlcnJvciwKK2J1 dCBpdCBkb2Vzbid0LiAgSSBjaGFuZ2VkIGRvX3B0eSB0byByZXR1cm4gdGhlIHBpZCBvZiB0aGUg Zm9yayB3aGVyZSBpdAorZXhlY3MgaXRzIGNvbW1hbmQgc28gd2UgY2FuIGNoZWNrIHRoZSBwaWQg d2l0aCBraWxsKHBpZCwwKSB3aGVuIGluX2NoaygpIG9mCit0aGUgcHR5IHNheXMgMCwgYnV0IHRo aXMgZG9lc24ndCBoZWxwIGVpdGhlcjsgaXQgc2VlbXMgbGlrZSB0aGUgcHJvY2VzcyBpcworbm90 IGV4aXRpbmcsIGJ1dCBvZiBjb3Vyc2UgaXQgaXMuCisKK0kgY291bGQgbm90IGZpbmQgYW55IGxl Z2l0aW1hdGUgd2F5IHRvIHRlc3Qgd2hlbiB0aGUgcHR5IGZvcmsgdGVybWluYXRlZC4KK1NlbGVj dCgpIGFsd2F5cyBzYXlzIHRoZSBwdHkgZmlsZSBkZXNjcmlwdG9yIHdhcyByZWFkeSwgbm8gbWF0 dGVyIHdoYXQuCitTZWxlY3QoKSBuZXZlciByZXBvcnRzIGFuIGV4Y2VwdGlvbiBvbiB0aGUgcHR5 IGZpbGUgZGVzY3JpcHRvcjsKK2luX2NoayhwdHlmZCkgcmV0dXJucyAwIGFuZCBub3QgYW4gZXJy b3IuICByZWFkKHB0eWZkLC4uLikgZ2V0cyAwIGJ1dCBub3QgYW4KK2Vycm9yLiAgZmNudGwocHR5 ZmQsLi4uKSBkb2Vzbid0IGdldCBhbiBlcnJvci4gIEZpbmFsbHkgSSB0cmllZAord3JpdGUocHR5 ZmQsYywwKSBhbmQgdGhpcyBpbmRlZWQgZ2V0cyBFSU8gKGkvbyBlcnJvcikuICBXaXRoIHRoaXMs IHVzaW5nCitLZXJtaXQgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sIHdvcmtzIGZpbmUgaW4gU29s YXJpcyBidXQgSSB0ZW5kIHRvIHRoaW5rCit0aGlzIHRyaWNrIHdpbGwgbm90IGJlIHZlcnkgcG9y dGFibGUgKGl0IGlzbid0KS4gIDI0IERlYyAyMDA2LgorCitNYWRlIHR0cHR5Y21kKCkgdXNlIGEg bW9yZSBpbnRlbGxpZ2VudCBidWZmZXJpbmcgc2NoZW1lLCBmaXhlZCBhIGZldyB0aGluZ3MKK2Fi b3V0IGhvdyBJIHdhcyBzZXR0aW5nIHVwIHRoZSBzZWxlY3QoKSBjYWxsIHRoYXQgc2hvdWxkIGFk ZHJlc3Mgc29tZSBvZgoreWVzdGVyZGF5J3MgcHJvYmxlbXMuICBTdGlsbCBkb2Vzbid0IHdvcmsg YnV0IGl0J3MgcHJvZ3Jlc3MuICBBOiAyNSBEZWMgMjAwNi4KKworRGVidWdnaW5nIHllc3RlcmRh eSdzIGNvZGUuLi4gIFN0aWxsLCB0aGUgZXJyb3IgY29uZGl0aW9ucyBhcmUgbmV2ZXIgc2V0LAor d2UgbmV2ZXIgZGV0ZWN0IHdoZW4gdGhlIHB0eSBjbG9zZXMuICBJbiBTb2xhcmlzLCBpZiBzZWxl Y3QoKSBzYXlzIHB0eWZkIGlzCityZWFkeSB0byByZWFkIGJ1dCBpbl9jaGsoKSBzYXlzIHRoZXJl IGFyZSBubyBjaGFyYWN0ZXJzIHRoZXJlLCB3ZSBjYW4gdHJlYXQKK3RoaXMgYXMgYSBsb29wLWV4 aXQgY29uZGl0aW9uLiAgQnV0IGluIE5ldEJTRCwgaW5fY2hrKCkgYWx3YXlzIHNheXMgMCB3aGVu Cit1c2VkIG9uIGEgcHR5IChidXQgd29ya3MgT0sgb24gYSBzZXJpYWwgb3IgbmV0IGNvbm5lY3Rp b24pLgorCitSZWFsaXplZCBJIGNvdWxkIG5vdCB1c2UgaW5fY2hrKCkgb24gdGhlIHB0eSBiZWNh dXNlIHRoZXJlIGlzIHRvbyBtdWNoCitiYWdnYWdlIHdpdGggdGhlIGNvbW11bmljYXRpb24gcGF0 aCAtLSBteXJlYWQoKSwgZXRjIGV0YykgLS0gc28gSSByZXBsYWNlZAordGhpcyB3aXRoIGEgc2lt cGxlIGlvY3RsKHB0eWZkLEZJT05SRUFELCZuKS4gIFRoaXMgd29ya3MgZmluZSBpbiBTb2xhcmlz IGJ1dAorYWx3YXlzIHJldHVybnMgMCBpbiBOZXRCU0QsIGRlc3BpdGUgd2hhdCB0aGUgbWFuIHBh Z2Ugc2F5cyAoaS5lLiB0aGF0IHRoaXMKK2Z1bmN0aW9uIGNhbiBiZSB1c2VkIG9uIGFueSBmaWxl IGRlc2NyaXB0b3IpLgorCitPSywgbGV0J3Mgc2VlLi4uLiBzZWxlY3QoKSBkb2VzIG5vdCByZXR1 cm4gdXNlZnVsIHJlc3VsdHMuICBJdCBzYXlzCitjaGFyYWN0ZXJzIGFyZSB3YWl0aW5nIG9uIHB0 eWZkIHdoZW4gdGhleSBhcmUgbm90LCBhbmQgaXQgbmV2ZXIgZGV0ZWN0cyB0aGUKK2Nsb3N1cmUg b2YgdGhlIHB0eS4uLi4uICBXZWxsIG9mIGNvdXJzZSBub3QsIGJlY2F1c2Ugd2UgYXJlIHRoZSBv bmVzIHdobworaGF2ZSB0byBjbG9zZSBpdC4gIEp1c3QgYmVjYXVzZSB0aGUgcHJvY2VzcyBoYXMg c3RvcHBlZCBkb2Vzbid0IG1lYW4gdGhlIHB0eQoraXMgY2xvc2VkLiAgU28gd2UncmUgYmFjayB0 byBzcXVhcmUgb25lLCBob3cgZG8gd2Uga25vdyB3aGVuIHRvIGNsb3NlIGl0PworY2t1cHR5LmMg c2VlbXMgdG8ga2VlcCB0aGUgcHJvY2VzcyBJRCBpbiBhIGdsb2JhbCB2YXJpYWJsZSwgcHR5X2Zv cmtfcGlkCisod2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBwaWQgbm93IHJldHVybmVkIGJ5 IGRvX3B0eSgpLCB3aGljaCBpcwordXNlbGVzcywgYnV0IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkp LiAgQnV0IGl0IGRvZXNuJ3QgbWF0dGVyIGJlY2F1c2Ugd2hlbiB3ZQora2lsbChwdHlfZm9ya19w aWQsMCksIHdlIHN0aWxsIGdldCBubyBlcnJvciBvZiBhbnkga2luZCwgZXZlbiBhZnRlciB3ZSBr bm93Cit0aGUgcHJvY2VzcyBoYXMgZXhpdGVkLiAgSSBhbSBjb21wbGV0ZWx5IGZsdW1tb3hlZC4g IHNlbGVjdCgpIGxpZXMsIGFuZCBldmVuCitpZiBpdCBkaWRuJ3QsIHRoZXJlIGlzIHNpbXBseSBu byBjb21wbGV0aW9uIGNyaXRlcmlvbi4gIEluIHRoZSBsb29wLAorc2VsZWN0KCkgYWx3YXlzIHNh eXMgdGhhdCB0aGUgcHR5IGlzIHJlYWR5IHRvIHJlYWQuICBUbyBiZSBjb250aW51ZWQuCisyNiBE ZWMgMjAwNi4KKworQmFjayB0byBTcXVhcmUgT25lLCBzaW5nbGUtYnl0ZSByZWFkcyBhbmQgd3Jp dGVzLgorCisgLiBUaGlzIHdvcmtzIGZvciBib3RoIHJpcHBsZSBhbmQgS2VybWl0LgorIC4gRG9l c24ndCB3b3JrIGZvciBabW9kZW0gYnV0IHdlJ2xsIGRlYWwgd2l0aCB0aGF0IGxhdGVyLgorIC4g SW4gdGhpcyBjYXNlIEZEX0lTU0VUKHB0eWZkKSBpcyBzdGlsbCB0cnVlIGFmdGVyIHB0eSBjbG9z ZXMuCisKK0J1dCB0aGUgZW5zdWluZyByZWFkKCkgZ2V0cyBFSU8gc28gd2Uga25vdyB0aGUgcHR5 IGlzIGdvbmUuICBUaGF0IG1lYW5zIHRoZQorc2FtZSB0aGluZyBzaG91bGQgaGFwcGVuIGluIHRo ZSBidWZmZXJlZCB2ZXJzaW9uLCBubz8gIFllczsgSSB3ZW50IGJhY2sgdG8KK3RoZSBidWZmZXJl ZCB2ZXJzaW9uIGFuZCByZXBsYWNlZCBhbGwgdGhlIG90aGVyIG5vbndvcmtpbmcgdGVzdHMgYnkg YQorYmxvY2tpbmcgcmVhZCBvZiAxIGJ5dGUgb24gdGhlIHB0eSBhbmQgdGhpcyBkZXRlY3RzIHRo ZSB0ZXJtaW5hdGlvbi4gIE5vdzoKKworIC4gcmlwcGxlIHdvcmtzIHBlcmZlY3RseSAob2YgY291 cnNlIGl0J3Mgb25seSBvbmUtd2F5KS4KKyAuIEtlcm1pdCBmYWlscworCitMZXQncyBjYWxsIHRo ZSByZW1vdGUsIGZvcmtlZCwgcmVkaXJlY3RlZCwgZXh0ZXJuYWwgS2VybWl0IEEgYW5kIGl0cwor bG9jYWwgcGFydG5lciBCLiAgQSBzZW5kcyBpdHMgUy1wYWNrZXQsIEIgcmVjZWl2ZXMgaXQgT0sg YW5kIEFja3MuCitBIGFwcGFyZW50bHkgZG9lcyBub3QgcmVjZWl2ZSB0aGUgQUNLIGluIHRpbWUs IHNvIHNlbmRzIHRoZSBTIGFnYWluLCBidXQgT0suCitmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0 aGUgRi4gIEIgQWNrcyB0aGUgRi4gIEEgc2VuZHMgdGhlIEEsIEIgQWNrcyBpdC4KK0J1dCBub3cg QSBzZW5kcyBhIHBpZWNlIG9mIHRoZSBwcmV2aW91cyBGIHBhY2tldCBhbmQgdGhlIHRoZSBmaXJz dCBwaWVjZQorb2YgYSBEIHBhY2tldC4KKworQ2xlYXJseSB0aGUgYnVmZmVyaW5nIGlzIG1lc3Nl ZCB1cC4gIFN1cmUgZW5vdWdoLCB0aGVyZSB3YXMgYW4gZXh0cmFuZW91cworc3RhdGVtZW50IGlu Y3JlbWVudGluZyBhIHJlYWQgcG9pbnRlciBpbiBhIHdyaXRlIHNlY3Rpb24uICBSZW1vdmluZyB0 aGF0CitjbGVhcmVkIHVwIHRoZSBwcm9ibGVtcyB3aXRoIEtlcm1pdCwgbm93IHdlIGNhbiBzZW5k IGFuZCByZWNlaXZlIHN1YnN0YW50aWFsCitmaWxlcyBlZmZpY2llbnRseSBpbiByZW1vdGUgbW9k ZS4gIFptb2RlbSBzZWVtcyB0byB3b3JrIHRvbywgZXhjZXB0IHRoYXQgYXQKK3RoZSBiZWdpbm5p bmcgYSBidW5jaCBvZiAiKipCMDgwMDAwMDAwMDAyMmQiJ3MgYXJlIHN0dWZmZWQgaW50byBLZXJt aXQncworY29tbWFuZCBidWZmZXIsIHNvIGFmdGVyIHRoZSB0cmFuc2ZlciB3ZSBnZXQgc29tZSBl cnJvciBtZXNzYWdlcy4KKworSW4gbG9jYWwgbW9kZSwgb3ZlciBhIFRlbG5ldCBjb25uZWN0aW9u LCBLZXJtaXQgd29ya3MgZmluZS4gIFptb2RlbSB3b3JrcworT0sgdG9vIGV4Y2VwdCBpdCBkb2Vz bid0IGZpbmlzaCByaWdodCwgc28gYXQgdGhlIHZlcnkgZW5kIHJ6IG9uIHRoZSBmYXIgZW5kCitp cyBzdGlsbCB3YWl0aW5nIGZvciBzb21ldGhpbmc7IGlmIEkgY2FuY2VsIG91dCBvZiBpdCB3aXRo IF5YXlheWF5YXlgsIGl0CitkZWxldGVzIHRoZSBmaWxlLiAgU28gdGhlcmUgc3RpbGwgaXMgc29t ZXRoaW5nIHdyb25nIHdpdGggdGhlIHRlcm1pbmF0aW9uCit0ZXN0LgorCitBbHNvIHlvdSBkb24n dCBzZWUgYW55dGhpbmcgb24geW91ciBzY3JlZW4gd2hlbiBydW5uaW5nIEtlcm1pdCBvciBabW9k ZW0KK3RoaXMgd2F5LiAgVGhhdCdzIHRvIGJlIGV4cGVjdGVkLCBzaW5jZSB0aGV5IGFyZSB1c2lu ZyBzdGRpbyBmb3IgdGhlCit0cmFuc2Zlciwgc28gdGhleSBjYW4ndCBhbHNvIGJlIGRpc3BsYXlp bmcgcHJvZ3Jlc3Mgb3Igb3RoZXIgbWVzc2FnZXMuCisKK0J1aWx0IHRoaXMgb24gTmV0QlNEIGFn YWluLi4uICBTZWVtcyB0byB3b3JrIHRoaXMgdGltZSwgYnV0IGhhcyB0cm91YmxlCitmaW5pc2hp bmcsIGxpa2UgWm1vZGVtLiAgSG1tbSwgb24gY2xvc2VyIGV4YW1pbmF0aW9uLCBpdCB0dXJucyBv dXQgdGhhdAorc2luY2UgaW5fY2hrKCkgYWx3YXlzIHJldHVybnMgMCBvbiB0aGUgcHR5ZmQsIHdl IGZhbGwgaW50byBvdXIgbmV3CitzaW5nbGUtYnl0ZSByZWFkIGNvZGUsIHNvIGl0J3MgcmVhbGx5 IHNsb3csIGxpa2UgMTBLIGNwcyBvbiBhIGNvbm5lY3Rpb24KK3doZXJlIDFNIGlzIHRoZSBub3Jt LiAgMjcgRGVjIDIwMDYuCisKK1N3aXRjaGVkIHRoZSBwdHkgZnJvbSBidWZmZXIgcGVla2luZyAo RklPTlJFQUQpIGFuZCBibG9ja2luZyByZWFkcyB0byB0bworbm9uYmxvY2tpbmcgcmVhZHMgKE9f Tk9OQkxPQ0sgLyBPX05ERUxBWSkuICBXb3JrcyBqdXN0IGZpbmUgb24gTmV0QlNEIGV4Y2VwdAor bm93IHdlIG5vIGxvbmdlciBnZXQgRUlPIGF0IHRoZSBlbmQgd2hlbiB0cnlpbmcgdG8gcmVhZCBm cm9tIHRoZSBwdHkgcHJvY2VzcwordGhhdCBoYXMgZXhpdGVkLiAgSW4gZmFjdCwgd2UncmUgYmFj ayB0byBzcXVhcmUgb25lIGFnYWluLiAgbm90IGlvY3RsKCksIG5vdAorZmNudGwoKSwgbm90IHNl bGVjdCgpLCBub3QgZXZlbiByZWFkKCkgZ2V0cyBhbiBpL28gZXJyb3IgYWZ0ZXIgdGhlIHB0eQor cHJvY2VzcyBleGl0cy4gIEJ1dCBpbiBOZXRCU0QsIHdlIGhhdmUgdG8gdXNlIG5vbmJsb2NraW5n IHJlYWRzIGJlY2F1c2UgLi4uCitIbW1tbSwgbWF5YmUgc3dpdGNoIHRoZSBmZCBiZXR3ZWVuIGJs b2NraW5nIGFuZCBub25ibG9ja2luZyBmb3IgdGhlIHRlc3QuLi4KK05vcGUsIE5ldEJTRCBzZWVt cyB0byBiZSBob3BlbGVzcyAobGF0ZXIsIEVkIFJhdmluIGNvbmZpcm1lZCB0aGF0IHNpbWlsYXIK K3Byb2JsZW1zIGhhdmUgYmVlbiBvYnNlcnZlZCB3aXRoIG90aGVyIGFwcGxpY2F0aW9ucyB0aGF0 IHRyeSB0byBkbyB0aGlzKS4KKworU3dpdGNoaW5nIHRvIExpbnV4LCBJIHNlZSB0aGF0IHllc3Rl cmRheSdzIFNvbGFyaXMgY29kZSAoYmxvY2tpbmcgcmVhZHMpCit3b3JrcyBleGFjdGx5IHRoZSBz YW1lIHdheSBvbiBMaW51eC4KKworVHJpZWQgdG9kYXkncyBPX05ERUxBWSBtZXRob2Qgb24gU29s YXJpcy4gIEl0IHdvcmtzIHBlcmZlY3RseS4gIEFuZCB0aGVuIEkKK21vdmVkIHRoaXMgb25lIHRv IExpbnV4IGFuZCBpdCB3b3JrcyBwZXJmZWN0bHkgdGhlcmUgdG9vLiAgRXhjZXB0IGluIGJvdGgK K2Nhc2VzIHdlIGhhdmUgdGhlIHdlaXJkIHRoaW5nIHdpdGggWm1vZGVtIGF0IHRoZSBlbmQsIGJ1 dCBJIHRoaW5rIHRoYXQncworYmVjYXVzZSByei9zeiBkb24ndCB1c2Ugc3RhbmRhcmQgaS9vLiAg T24gTmV0QlNELCBpdCBzdGlsbCBoYW5ncyBhdCB0aGUgZW5kLgorCitUdXJucyBvdXQgdGhhdCB0 ZXN0aW5nIHRoZSBwaWQgd29ya3MgaW4gTmV0QlNELCBldmVuIHRob3VnaCBpdCBkaWRuJ3QgaW4K K1NvbGFyaXMuICBUdXJucyBvdXQgcmVhZCgpIGdldHMgYW4gaS9vIGVycm9yIGluIFNvbGFyaXMg YW5kIExpbnV4IGJ1dCBub3QKK2luIE5ldEJTRC4gIFNvIGNoZWNraW5nIHRoZSByZWFkIHJlc3Vs dCBmaXJzdCwgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIHBpZAoraWYgcmVhZCgpIGdvdCB6ZXJvIGJ5 dGVzIGNhdGNoZXMgYWxsIHRocmVlLiAgMjggRGVjIDIwMDYuCisKK05vdyB0aGUgcXVlc3Rpb24g b2YgcmV0dXJuIGNvZGUuICBJbiB0aGUgb3JpZ2luYWwgdHRydW5jbWQoKSBmdW5jdGlvbiwgd2Ug ZG8KK2EgZm9yaygpIGFuZCBhIHdhaXQoKS4gIFdoZW4gdGhlIGV4dGVybmFsIHByb3RvY29sIHBy b2dyYW0gZmluaXNoZXMsIHdhaXQoKQorZ2l2ZXMgdXMgaXRzIHJldHVybiBjb2RlIGFuZCB3ZSBj YW4gcGFzcyBpdCBvbiB0aHJvdWdoIFx2KHBleGl0c3RhdCkgYXMgd2VsbAordHRydW5jbWQncyBv d24gcmV0dXJuIGNvZGUuICBCdXQgdHRwdHljbWQoKSBoYXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUg cHR5Citjb250aW51b3VzbHksIHNvIGl0IGNhbid0IGp1c3Qgc2l0IGJhY2sgYW5kIHdhaXQoKSBm b3IgaXQuICBJbnN0ZWFkIHdlIGhhdmUKK3RvIGRldGVjdCB3aGVuIHRoZSBwcm9jZXNzIGhhcyBl eGl0ZWQgYW5kIHRoZW4gY2FsbCB3YWl0cGlkKCkgb24gdGhlIGZvcmsKK3BpZCwgYmVmb3JlIHNo dXR0aW5nIGRvd24gdGhlIHB0eS4gIFRlc3RlZCBvbiBTb2xhcmlzIHVzaW5nIEtlcm1pdCBhcyB0 aGUKK2V4dGVybmFsIHByb3RvY29sIGFuZCB0aGVuIGluZHVjaW5nIGZhaWx1cmUsIG9yIGxldHRp bmcgaXQgcnVuIHRvCitjb21wbGV0aW9uLiAgRkFJTFVSRSBhbmQgU1VDQ0VTUyBzZXQgYXBwcm9w cmlhdGVseSBpbiBlYWNoIGNhc2UuICBUZXN0ZWQKK3dpdGggWm1vZGVtIHRvbywgd29ya3MgT0sg ZXhjZXB0IGZvciB0aGUgYWZvcmVtZW50aW9uZWQgY29zbWV0aWMgZ2xpdGNoIGF0Cit0aGUgZW5k LiAgVGVzdGVkIG9uIE5ldEJTRCwgYWxsIE9LLgorCitUbyBtYWtlIEs1IGNvbm5lY3Rpb24gdG8g UGFuaXggZnJvbSBTcGFtOgorCisgc2V0IHRlbG5ldCBkZWJ1ZyBvbgorIGF1dGhlbnRpY2F0ZSBL NSBpbml0IC9yZWFsbTpQQU5JWC5DT00gL3Bhc3N3b3JkOnh4eHh4Cisgc2V0IGhvc3Qgc2hlbGwu cGFuaXguY29tIDIzIC9rNWxvZ2luCisKK0dvb2QuLi4gIE5vdyBJIHRyeSB0byBzZW5kIGEgZmls ZSBmcm9tIFNwYW0gdG8gUGFuaXggb3ZlciB0aGUgSzUgY29ubmVjdGlvbgordXNpbmcgS2VybWl0 IGl0c2VsZiBhcyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wuICBJdCBmYWlscy4gIEluc3BlY3Rpb24g b2YgdGhlCitkZWJ1ZyBsb2cgb24gdGhlIGZhciBzaWRlIHNob3dzIHRoYXQgdGhlIFMtUGFja2V0 IHdhcyByZWNlaXZlZCBjb3JyZWN0bHksCitnb29kISAgVGhpcyBtZWFucyB3ZSBhcmUgcmVhZGlu ZyB0aGUgY2xlYXItdGV4dCBTLVBhY2tldCBmcm9tIHRoZSBleHRlcm5hbAorS2VybWl0IHByb2dy YW0sIGFuZCB0aGF0IHR0b2woKSBpcyBlbmNyeXB0aW5nIGFwcHJvcHJpYXRlbHkuCisKK1RoZSBy ZW1vdGUgS2VybWl0IHNlbmRzIHRoZSBBY2sgYW5kIGdvZXMgdG8gcmVhZCB0aGUgbmV4dCBwYWNr ZXQ6IHR0aW5sKCkKK2NhbGxzIG15ZmlsbGJ1ZigpIGFuZDoKKworICBTVk9SUE9TSVggbXlmaWxs YnVmIGNhbGxpbmcgcmVhZCgpCisgIFNWT1JQT1NJWCBteWZpbGxidWY9MCAgICAgICAgICAgICAg ICA8LS0gcmVhZCByZXR1cm5zIDAKKyAgU1ZPUlBPU0lYIG15ZmlsbGJ1ZiB0dGNhcnI9MgorICBT Vk9SUE9TSVggbXlmaWxsYnVmIGVycm5vPTAgICAgICAgICAgPC0tIGFuZCByZXBvcnRzIG5vIGVy cm9yCisgIEhFWERVTVA6IG15Z2V0YnVmIHJlYWQgKC0zIGJ5dGVzKQorICBteWdldGJ1ZiBlcnJu bz0wCisgIHR0aW5sIG15cmVhZCBmYWlsdXJlLCBuPS0zCisgIHR0aW5sIG15cmVhZCBlcnJubz0w CisgIHR0aW5sIG5vbi1FSU5UUiAtM1tjbG9zaW5nXQorCitUaGlzIGhhcHBlbnMgYmVjYXVzZSBt eWZpbGxidWYoKSBkZWxpYmVyYXRlbHkgcmV0dXJucyAtMyB3aGVuIHJlYWQoKSBnZXRzIDAKK2J5 dGVzLiAgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB0aGlzIGhhcHBlbnMgYnV0IHRoZSByZWFsIHBy b2JsZW0gaXMgeWV0IHRvCitjb21lLiAgVGhlIGxvY2FsIEtlcm1pdCAodGhlIG9uZSB0aGF0IGhh cyBtYWRlIHRoZSBzZWN1cmUgY29ubmVjdGlvbiBhbmQgaXMKK3J1bm5pbmcgdGhlIGV4dGVybmFs IHByb3RvY29sIHRocm91Z2ggdHRwdHljbWQoKSkgZXZlbnR1YWxseSBmaWd1cmVzIG91dAordGhh dCB0aGUgdHJhbnNmZXIgZmFpbGVkIGFuZCB3aGVuIHdlIHJlY29ubmVjdCwgd2UgZ2V0IHRvdGFs IGdhcmJhZ2UgLS0gdGhlCitlbmNyeXB0aW9uIGVpdGhlciBzdG9wcGVkIGhhcHBlbmluZywgb3Ig Z290IG91dCBvZiBzeW5jLgorCitMb29raW5nIGF0IHRoZSBsb2NhbCBkZWJ1ZyBsb2csIHR0b2wo KSBpcyBkb2luZyBpdHMgam9iLCBjb252ZXJ0aW5nIHRoZQoraW5pdGlhbCAia2VybWl0IC1yXDEz IiBmcm9tIHBsYWludGV4dCB0byBjeXBoZXJ0ZXh0LCBhcyBzaG93biBieSB0aGUKK2hleGR1bXBz LiAgVGhlbiBpdCBlbnRlcnMgdHRwdHljbWQoKS4uLiAgSG1tbW0sIHdhaXQsIGhvdyBjYW4gaXQg c2VuZCB0aGUKKyJrZXJtaXQgLXIiIGJlZm9yZSBpdCBzdGFydHMgdGhlIGV4dGVybmFsIHByb3Rv Y29sPyAgTmV2ZXIgbWluZCwgd29ycnkgYWJvdXQKK3RoYXQgbGF0ZXIuLi4gIEFueXdheSwgdHRw dHljbWQoKSBzYXlzOgorCisgIHR0cHR5Y21kIGxvb3AgdG9wIGhhdmVfcHR5PTEKKyAgdHRwdHlj bWQgbG9vcCB0b3AgaGF2ZV9uZXQ9MQorICB0dHB0eWNtZCBGRF9TRVQgcHR5ZmQgaW4KKyAgdHRw dHljbWQgRkRfU0VUIHR0eWZkIGluCisgIHR0cHR5Y21kIG5mZHM9NQorICB0dHB0eWNtZCBzZWxl Y3Q9MQorICB0dHB0eWNtZCBGRF9JU1NFVCB0dHlmZCBpbgorICAuLi4KKyAgdHRwdHljbWQgaW5f Y2hrKHR0eWZkKSBuPTExCisgIHR0cHR5Y21kIHR0eGluIG49MTEKKwordHR4aW4oKSBhc2tzIGZv ciAxMSBieXRlcywgbXlmaWxsYnVmKCkgZ2V0cyAxMSBieXRlcywgYW5kIGhleGR1bXAoKSBzaG93 cwordGhlIGN5cGhlcnRleHQsIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhbnkgZGVjcnlwdGlu ZyBnb2luZyBvbi4gIEhtbW0sIGl0Citsb29rcyBsaWtlIHRoZSByZWd1bGFyIGNvZGUgY2FsbHMg dHRpbmMoKSBpbiBhIGxvb3AsIHJhdGhlciB0aGFuIHR0eGluKCkuCitNYXliZSB0dHhpbigpIGRv ZXNuJ3QgaGF2ZSBkZWNyeXB0aW9uIGhvb2tzLiAgTm8sIHRoYXQncyBub3QgaXQsIHRoZSBjb2Rl IGlzCit0aGVyZSwgYnV0IHRoZSBLZXJtaXQgcGFja2V0IHJlYWRlciBkb2VzIG5vdCB1c2UgdHR4 aW4oKSwgaXQgdXNlcyB0dGlubCgpLgorQnV0IG9mIGNvdXJzZSB3ZSBjYW4ndCB1c2UgdGhhdCBm b3IgZXh0ZXJuYWwgcHJvdG9jb2xzIGJlY2F1c2UgaXQncyBkZXNpZ25lZAorb25seSB0byByZWFk IEtlcm1pdCBwYWNrZXRzLiAgU3Vic3RpdHV0aW5nIGEgbG9vcCBvZiB0dGluYygpcyBmb3IgdGhl IHR0eGluKCkKK2NhbGwgZml4ZXMgdGhpbmdzIChhbmQgc3RyYW5nZWx5IGVub3VnaCwgaXQgc2Vl bXMgdG8gYmUgZmFzdGVyKS4gIEFuZCBub3cgd2UKK2hhdmUgb3VyIGZpcnN0IGV4dGVybmFsIHBy b3RvY29sIHRyYW5zZmVyIG92ZXIgYSBzZWN1cmUgY29ubmVjdGlvbiAoZXh0ZXJuYWwKK0tlcm1p dCBwcm9ncmFtLCBMaW51eCBvdmVyIEtlcmJlcm9zIDUgdG8gTmV0QlNEKS4gIFptb2RlbSB3b3Jr ZWQgdG9vIGZvciBhCitzaG9ydCBmaWxlIGJ1dCAic29tZXRoaW5nIGhhcHBlbnMiIHdpdGggbG9u Z2VyIG9uZXMuICAyOSBEZWMgMjAwNi4KKworTmV3IG1ha2VmaWxlIHRhcmdldCBmb3IgTGludXgg d2l0aCBLZXJiZXJvcyA1LCBsaW51eCtrcmI1LCB0aGF0IGRvZXNuJ3QKK2luY2x1ZGUgYW55dGhp bmcgZXh0cmEgZnJvbSBTU0wgb3Igb3RoZXIgc2VjdXJpdHkgbWV0aG9kcyAoYnV0IGFwcGFyZW50 bHkgaXQKK2lzIHN0aWxsIG5lY2Vzc2FyeSB0byBpbmNsdWRlIC1ET1BFTlNTTF8wOTcgaW4gb3Jk ZXIgdG8gZ2V0IHRoZSByaWdodCBuYW1lcworZm9yIHRoZSBERVMgcm91dGluZXM/KS4gIERpdHRv IG5ldGJzZCtrcmI1IGZvciBOZXRCU0QsIGV4Y2VwdCBpbiB0aGlzIGNhc2UKKy1ET1BFTlNTTF8w OTcgaXMgbm90IG5lY2Vzc2FyeS4gIG1ha2VmaWxlLCAzMCBEZWMgMjAwNi4KKworTm90ZSB0byBt eXNlbGY6IE9uIFBhbml4OgorCisgIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg9L3Vzci9sb2NhbC9r ZXJibGliCisgIG1ha2UgbmV0YnNkK2tyYjUgIks1TElCPS1ML3Vzci9sb2NhbC9rZXJibGliIiAi SzVJTkM9LUkvdXNyL2xvY2FsL2luY2x1ZGUiCisKK0Nhbid0IHRlbG5ldC1rNSBmcm9tIG5ld2x5 IGJ1aWx0IEtlcm1pdCBvbiBOZXRCU0Q7IHBhcnR3YXkgdGhyb3VnaCB0aGUKK25lZ290aWF0aW9u cywganVzdCBhZnRlciAiVEVMTkVUIFJDVkQgU0IgRU5DUllQVElPTiBTVVBQT1JUIERFU19DRkI2 NAorREVTX09GQjY0IElBQyBTRSIgaXQgZHVtcHMgY29yZS4gIFRoZSBsYXN0IHR3byBsaW5lcyBp biBkZWJ1Zy5sb2cgYWZ0ZXIKK3RoaXMgYXJlOgorCisgIHRuX3NiW2xlbl09NQorICBlbmNyeXB0 X3N1cHBvcnRbY250XT0yCisKK1JlYnVpbGRpbmcgd2l0aCAtRE9QRU5TU0xfMDk3IGRvZXNuJ3Qg Y2hhbmdlIGFueXRoaW5nLiAgRWQgUmF2aW4gc2FpZCB0aGV5CitoYXZlIHR3byBkaWZmZXJlbnQg S2VyYmVyb3MgaW5zdGFsbGF0aW9ucywgSGVpbWRhbCBhbmQgTUlUOyBtYXliZSBzb21lCittaXh1 cCBiZXR3ZWVuIHRoZSB0d28gZXhwbGFpbnMgdGhlIHByb2JsZW0gKEplZmYgY29uY3VycykuIFRo ZSBjb3JlIGR1bXAKK29jY3VycyBpbiBja19jcnA6IGVuY3J5cHRfc3VwcG9ydCgpOgorCisgICBk ZWJ1ZyhGMTAwLCJYWFggZXAgbm90IE5VTEwiLCIiLDApOworICAgdHlwZSA9IGVwLT5zdGFydCA/ ICgqZXAtPnN0YXJ0KShESVJfRU5DUllQVCwgMCkgOiAwOyA8LS0gSGVyZQorICAgZGVidWcoRjEw MSwiWFhYIG5ldyB0eXBlIiwiIix0eXBlKTsKKworQW55d2F5LCBJIGNhbiBsb2cgaW4gd2l0aCBL ZXJiZXJvcyA1IHRvIFBhbml4IE9LIGZyb20gQ29sdW1iaWEgKHNlc2FtZSkKK3VzaW5nIDguMC4y MDEuICBTbyBsZXQncyB0cnkgdG8gcmVzdXJyZWN0IHRoZSBTb2xhcmlzIHZlcnNpb24gd2l0aCBl dmVyeXRoaW5nOgorCisgIHNvbGFyaXM5ZytrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3crcGFtK3ps aWIKKworSSBodW50ZWQgYXJvdW5kIHRvIGZpbmQgd2hlcmUgdGhlIGN1cnJlbnQgbGlicmFyeSBh bmQgaGVhZGVyIGZpbGUKK2RpcmVjdG9yaWVzIHdlcmUuLi4gIExhc3QgdGltZSBJIHRyaWVkIHRo aXMgKE1hcmNoIDIwMDYpIGl0IGJvbWJlZCwgbm90CitmaW5kaW5nIGxpYmRlcy4gIEluc3RlYWQg d2UgaGF2ZSAvb3B0L2tlcmJlcm9zNTEyNS9saWIvbGliZGVzNDI1LmEuICBNYWRlIGEKK25ldyBj dS1zcGVjaWZpYyB0YXJnZXQgdGhhdCBpbmNsdWRlcyB0aGlzOyBub3cgd2UgZ2V0IGZhcnRoZXI7 IGl0IGJsb3dzIHVwCitpbiBja2NmdHAuYyB3aXRoIHRvbnMgb2YgZXJyb3JzIGFuZCB3YXJuaW5n cywgd2hpY2ggd2UgY2FuIHdvcnJ5IGFib3V0CitsYXRlci4gIEJ1aWxkaW5nIGFnYWluIHdpdGgg LUROT0ZUUCwgaXQgZ2V0cyB0byBja3VhdGguYyAodGhlIGZpcnN0IHNlY3VyaXR5Cittb2R1bGUp IGFuZDoKKworICBja3VhdGguYzoxNTE6MTg6IGVycm9yOiBrcmI1Lmg6IE5vIHN1Y2ggZmlsZSBv ciBkaXJlY3RvcnkKKyAgY2t1YXRoLmM6MTUyOjIxOiBlcnJvcjogcHJvZmlsZS5oOiBObyBzdWNo IGZpbGUgb3IgZGlyZWN0b3J5CisgIGNrdWF0aC5jOjE1MzoyMTogZXJyb3I6IGNvbV9lcnIuaDog Tm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICBja3VhdGguYzoxNzY6Mjg6IGVycm9yOiBrZXJi ZXJvc0lWL2tyYi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgIEluIGZpbGUgaW5jbHVk ZWQgZnJvbSAvb3B0L29wZW5zc2wtMC45LjhkL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDoxMDEsCisJ CSAgIGZyb20gY2t1YXRoLmM6MjE5OgorCitGb3VuZCBrcmI1LmggaW4gL29wdC9rZXJiZXJvczUx MjUvaW5jbHVkZS9rcmI1LmgsIGFkZGVkIGEgLUkgZm9yIHRoaXMKK2RpcmVjdG9yeSAuLi4gIE5v dyB3ZSBnZXQgbG90cyBvZiB3YXJuaW5ncyBpbiBja3VhdGguYywgYnV0IGl0IGNvbXBsZXRlcyBP SywKK3RoZW4gd2Ugd2luZCB1cCBib21iaW5nIG91dCBpbiBja19jcnAuYzsgSSBkb24ndCBrbm93 IHdoeSAtLSB0aGVyZSBhcmUgYWxsCit0aGUgc2FtZSB3YXJuaW5ncyAocmVsYXRlZCB0byBhcmd1 bWVudCBwYXNzaW5nIHRvIERFUyBmdW5jdGlvbnMpLCBidXQgbm8KK2Vycm9ycy4gIEkgaGF2ZSBu byBjbHVlLgorCitUcmllZCB0byByZXN1cnJlY3QgdGhlIHNvbGFyaXMyeCtrcmI0IHRhcmdldDsg dGhpcyByZXF1aXJlZCBjaGFuZ2luZyAtbGtyYgordG8gLWxrcmI0IGFuZCAtbGRlcyB0byAtbGRl czQyNS4gIExvdHMgb2Ygd2FybmluZ3MgaW4gY2t1dGlvLmMsIGNrY25ldC5jLAorY2tjdGVsLmMs IHRoZW4gaXQgYm9tYnMgb3V0IGluIGNrY2Z0cC5jIGJlY2F1c2UgaXQgY2FuJ3QgZmluZCBrcmIu aC4gIEkKK2ZvdW5kIGl0LCBhZGp1c3RlZCB0aGUgLUkgZmxhZ3MsIGJ1dCBub3cgaXQgYm9tYnMg YmVjYXVzZSBrcmIuaCBpdHNlbGYKKyNpbmNsdWRlcyA8a2VyYmVyb3NJVi9kZXMuaD4sIHdoaWNo IG9mIGNvdXJzZSBpdCBjYW4ndCBmaW5kIGJlY2F1c2UgdGhlCiticmFja2V0cyBtZWFuIGl0J3Mg bG9va2luZyBpbiAvdXNyL2luY2x1ZGUva2VyYmVyb3NJVi8sIHdoaWNoLCBvZiBjb3Vyc2UsCit0 aGUgc3lzIGZvbGtzIGhhdmUgcmVtb3ZlZC4gIEdpdmluZyB1cCBvbiBTb2xhcmlzIGFnYWluLiAg TGF0ZXIsIEplZmYgc2FpZAorIlNvbGFyaXMgZG9lcyBub3QgcHVibGljbHkgZXhwb3J0IHRoZSBr cmI1IGxpYnJhcmllcy4gIFlvdSBuZWVkIHRvIGJ1aWxkCit0aGUgTUlUIEtlcmJlcm9zIGxpYnJh cmllcyBzZXBhcmF0ZWx5IGFuZCBsaW5rIHRvIHRoZW0uIiAgMzAgRGVjZW1iZXIgMjAwNi4KKwor Q2hhbmdlZCBjb3B5cmlnaHQgZGF0ZSB0byAyMDA3LiAgY2tjbWFpLmMsIDEgSmFuIDIwMDcuCisK K1dpdGggRWQgUmF2aW4ncyBoZWxwLCBzdWNjZXNzZnVsbHkgYnVpbHQgQy1LZXJtaXQgd2l0aCBL ZXJiZXJvcyA1IGFuZAorT3BlblNTTCAobmV0YnNkK2tyYjUrb3BlbnNzbCt6bGliKSwgYnV0IGl0 IGRvZXMgbm90IG1ha2UgSzUgY29ubmVjdGlvbnM7IGl0CitnZXRzIGh1bmcgdXAgaW4gdGhlIFRl bG5ldCBuZWdvdGlhdGlvbnMuICAzIEphbiAyMDA3LgorCitEb3dubG9hZGVkIE1JVCBLZXJiZXJv cyA1IHYxLjQuNCB0byBTb2xhcmlzIDksIDU0TUIgd29ydGguICBUaGlzIGlzIGp1c3Qgc28KK0kg Y2FuIGJ1aWxkIGEgS2VyYmVyaXplZCBDLUtlcm1pdCBmb3IgdGVzdGluZyB0dHlwdHljbWQoKS4g IFJhbiB0aGUKK2NvbmZpZ3VyZSBwcm9ncmFtLCBnb3QgYSBmZXcgd2FybmluZ3MgYnV0IGl0IGRp ZG4ndCBmYWlsIChzaG91bGQgaXQ/KSAgRGlkCisibWFrZSBpbnN0YWxsIiwgc3BlY2lmeWluZyBh IHByaXZhdGUgZGlyZWN0b3J5IGJ1dCBpdCBmYWlsZWQgaW1tZWRpYXRlbHkKK3dpdGggImNhbm5v dCBzdGF0IGxpYmtyYjVzdXBwb3J0LnNvLjAuMDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIu CitPSywgSSB0cmllZC4gIDMgSmFuIDIwMDcuCisKK01hZGUgYSBuZXcgbWFrZWZpbGUgdGFyZ2V0 IGZvciBNYWMgT1MgWCwgbWFjb3N4MTAuNCtrcmI1K3NzbCwgcmFuIGl0IG9uIE1hYworT1MgWCAx MC40LjguICBJdCBib21icyBvdXQgaW4gY2tjZnRwLmMgd2l0aDogY2tjZnRwLmM6NTUxOiBlcnJv cjogc3RhdGljCitkZWNsYXJhdGlvbiBvZiAnZ3NzX21lY2hfa3JiNScgZm9sbG93cyBub24tc3Rh dGljIGRlY2xhcmF0aW9uCisvdXNyL2luY2x1ZGUvZ3NzYXBpL2dzc2FwaV9rcmI1Lmg6NzY6IGVy cm9yOiBwcmV2aW91cyBkZWNsYXJhdGlvbiBvZgorJ2dzc19tZWNoX2tyYjUnIHdhcyBoZXJlIi4g IERpdHRvIGZvciBnc3NfbWVjaF9rcmI1X29sZCwgZ3NzX250X2tyYjVfbmFtZSwKK2FuZCBnc3Nf bnRfa3JiNV9wcmluY2lwYWwuICBUcmllZCBhZ2FpbiB3aXRoIC1ETk9GVFAuICBXZSBnZXQgbG90 cyBvZgord2FybmluZ3MgaW4gdGhlIG5ldHdvcmsgbW9kdWxlcywgYnV0IHRoZXkgY29tcGxldGUu ICBCdXQgY2tfc3NsLmMgYm9tYmVkCit3aXRoIGEgY29uZmxpY3QgYmV0d2VlbiBpdHMgb3duIGRl Y2xhcmF0aW9ucyBvZiBlbmNyeXB0X291dHB1dCBhbmQKK2RlY3J5cHRfaW5wdXQgYW5kIHRoZSBv bmVzIGluIGNrdWF0Mi5oOyByZW1vdmVkIHRoZSBwcm90b3R5cGVzIGZyb20gdGhlCitsYXR0ZXIg KGFzIEplZmYgYWR2aXNlZCkgaXQgYnVpbHQgT0sgYW5kIGl0IHdvcmtzIE9LIHRvby4gIEJ1aWx0 IHdpdGggRlRQCit0b28sIGJ1dCB3aXRoIGxpbmstdGltZSB3YXJuaW5ncyBhYm91dCB0aGUgYWZv cmVtZW50aW9uZWQgZ3NzXyogc3ltYm9scy4KKyNpZmRlZidkIHRoZW0gb3V0IChnc3NfbWVjaF9r cmI1LCBnc3NfbWVjaF9rcmI1X29sZCwgZ3NzX21lY2hfbmFtZSwgYW5kCitnc3NfbWVjaF9wcmlu Y2lwYWwpIGZvciBNQUNPU1gsIHdoZXJlIHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9ydGVkIGJ5IHRo ZQorbGlicmFyeS4gIE5vdyBpdCBhbGwgY29tcGlsZXMgYW5kIGxpbmtzIE9LLCBhbmQgcnVucyBP SyB0b28uICAzIEphbiAyMDA3LgorCitTcGVudCBhIGRheSBodW50aW5nIGFyb3VuZCBmb3IgYSB2 ZXJzaW9uIG9mIFptb2RlbSB0aGF0IHdvdWxkIGJ1aWxkIGFuZAorZXhlY3V0ZSBvbiBNYWMgT1Mg WCwgZmluYWxseSBmb3VuZCBvbmUuICBOb3cgYXQgbGFzdCBJIGNvdWxkIHRyeSBhIFptb2RlbQor ZXh0ZXJuYWwtcHJvdG9jb2wgdHJhbnNmZXIgb3ZlciBhIHNlY3VyZSBjb25uZWN0aW9uLiAgQnV0 IHBob29leSwgQy1LZXJtaXQncworcHR5IHN1cHBvcnQgZGlkbid0IHdvcmsgb24gdGhpcyBib3gu ICBLZXJtaXQgZmluZHMgbWFzdGVyIC9kZXYvcHR5cGEgT0ssCit0aGVuIGluIHB0eWludF92b2lk X2Fzc29jaWF0aW9uKCkgdHJpZXMgdG8gb3BlbiAvZGV2L3R0eSBidXQgZ2V0cyBFUlJOTz02Cisi ZGV2aWNlIG5vdCBjb25maWd1cmVkIiAod2hpY2ggaXMgYXBwYXJlbnRseSBPSywgYmVjYXVzZSB0 aGUgc2FtZSB0aGluZworaGFwcGVucyBvbiBvdGhlciBwbGF0Zm9ybXMgd2hlcmUgdGhpcyB3b3Jr cyksIHRoZW4gdHJpZXMgdG8gb3BlbiBzbGF2ZQorL2Rldi90dHlwYSBhbmQgZ2V0cyBFUlJOTz0x MyAicGVybWlzc2lvbiBkZW5pZWQiIGJlY2F1c2UsIGluZGVlZCwgSSBkb24ndAoraGF2ZSByL3cg cGVybWlzc2lvbiBvbiB0aGUgZGV2aWNlLiAgTGVmdCBhIG1lc3NhZ2UuICA0IEphbiAyMDA3Lgor CitDaGFuZ2VkIFRSQU5TTUlUIC9CSU5BUlkgb3V0cHV0IGJ1ZmZlciBzaXplIGZyb20gMjUyIHRv IDUwOCB0byBhdm9pZAorVENQIGZyYWdtZW50YXRpb24uICBOZWVkIHRvIGFkZCBhIFNFVCBjb21t YW5kIGZvciB0aGlzIGxhdGVyLgorY2t1dXM0LmMsIDUgSmFuIDIwMDcuCisKK0ZvdW5kIGFub3Ro ZXIgTWFjIHdoZXJlIHRoZSBwdHlzIHdlcmVuJ3QgcHJvdGVjdGVkIGFnYWluc3QgbWUsIG1ha2Ug YSBLNQorY29ubmVjdGlvbiBhbmQgdHJhbnNmZXJyZWQgYSBsYXJnaXNoIGZpbGUgd2l0aCBabW9k ZW0gd2l0aCB6ZXJvIGdsaXRjaGVzLAorZXhjZXB0IGl0IHdhcyBraW5kIG9mIHNsb3csIDg0SyBj cHMuICBXZWxsLCB3ZSdyZSBkb2luZyBzaW5nbGUtY2hhcmFjdGVyCityZWFkcyBvbiB0aGUgbmV0 ICh0dGluYygpJ3MgaW5zdGVhZCBvZiB0dHhpbigpKS4gIEhtbW0sIGJ1dCB0aGVuIEkgZGlkIGl0 CithZ2FpbiBhbmQgZ290IDIuMk1jcHMuICBTdWNjZXNzIHdhcyByZXBvcnRlZCwgYnV0IGl0IGFj dHVhbGx5IGRpZG4ndCB3b3JrOworaXQgb25seSBzZW50IHRoZSBmaXJzdCBxdWFydGVyIG9mIHRo ZSBmaWxlLi4uLiAgT2ggd2VsbCwgYXQgbGVhc3Qgbm93IHdlCitoYXZlIGEgdGVzdGJlZC4gIDUg SmFuIDIwMDcuCisKK1RyaWVkIGFnYWluLCBzYXcgdGhhdCB0aGUgZmlsZSBpcyBhY3R1YWxseSB0 cmFuc2ZlcnJlZCBpbnN0YW50bHkgYnV0IHRoZW4KK3dlJ3JlIG5vdCBwaWNraW5nIHVwIHRoZSBw cm90b2NvbCBhdCB0aGUgZW5kLiAgVGhlb3J5OiBhZnRlciB0aGUgdHJhbnNmZXIKK2ZpbmlzaGVz LCB3ZSBjb21lIGJhY2sgdG8gdGhlIHByb21wdCBvbiB0aGUgcmVtb3RlIGhvc3QsIHdoaWNoIG1l YW5zIHdlIGhhdmUKK3NvbWV0aGluZyB0byByZWFkIGZyb20gdGhlIG5ldCBhbmQgd3JpdGUgdG8g dGhlIHB0eSwgYnV0IHRoZSBwdHkgaGFzIGFscmVhZHkKK2V4aXRlZC4gIEFGVEVSIFRIRSBQVFkg SVMgR09ORSwgV0UgRE8gTk9UIFdBTlQgVE8gUkVBRCBGUk9NIFRIRSBORVQgQU5ZCitNT1JFLiAg QWRkaW5nIHRoaXMgdGVzdCBtYWtlcyBLZXJtaXQgc3VjY2VlZCByaWdodCBhd2F5IHdoZW4gc2Vu ZGluZyB0aGUKK3NhbWUgbGFyZ2lzaCBmaWxlLCB3aXRoIGEgdHJhbnNmZXIgcmF0ZSBvZiA0TSBj cHMsIHRoYXQncyBiZXR0ZXIuICBCdXQgdGhlCityeiBwcm9ncmFtIG9uIHRoZSBmYXIgZW5kIGlz IGV2aWRlbnRseSBub3QgcmVjZWl2aW5nIHRoZSBnb29kYnllIGhhbmRzaGFrZQorZnJvbSB0aGUg cmVjZWl2ZXIsIGJlY2F1c2UgaXQgc2l0cyB0aGVyZSBmb3JlZXZlciBpbiBpdHMgKkIwOTAwMjQw MjAwOTQxOAorbW9kZSB1bnRpbCBJIF5YXlheWF5YXlggb3V0IG9mIGl0LCBhdCB3aGljaCBwb2lu dCBpdCBkZWxldGVzIHRoZSBmaWxlIGl0CithbHJlYWR5IHJlY2VpdmVkLCBub3QgdmVyeSBoZWxw ZnVsLiAgSW4gdGhlIGNvZGUsIEkgcmVhZCBmcm9tIHRoZSBwdHkgaWYgdGhlCitwdHkgaXMgb3Bl biBhbmQgdGhlcmUgaXMgcm9vbSBpbiB0aGUgYnVmZmVyLiAgVGhpcyBtZWFucyB0aGF0IHdoZW4g d2UgZ2V0IHRvCit0aGUgZW5kLCBlaXRoZXIgdGhlcmUgaXMgbm8gcm9vbSBpbiB0aGUgYnVmZmVy ICh1bmxpa2VseSkgb3IgdGhlIGxhc3QgYml0CitzZW50IGJ5IHN6IGJlZm9yZSBleGl0aW5nIHdh cyBjdXQgb2ZmIHdoZW4gdGhlIGZvcmsgY2xvc2VkLiAgV2h5IGRvIHdlIGdldAoraW4gdGhpcyBm aXggb25seSB3aXRoIFptb2RlbSBhbmQgbm90IHdpdGggS2VybWl0PworCitJbiBNYWMgT1MgWCwg YWZ0ZXIgc3ogZXhpdHMsIHdlIGdldCBFUlJOTz01IGlmIHdlIHRyeSB0byB3cml0ZSB0byB0aGUg cHR5LAorYnV0IHdlIHN0aWxsIGdldCBubyBlcnJvcnMgYWZ0ZXIgdGhhdCBpZiB3ZSB0cnkgdG8g cmVhZCBmcm9tIGl0LiAgU3RpbGwsCitwcmlvciB0byB0aGlzIHdlIGRpZCBtb3JlIHRoYW4gMjAg dW5wcm9kdWN0aXZlIG5vbmJsb2NraW5nIHJlYWRzIGZyb20gdGhlCitwdHkgKG5vIGVycm9yLCBu byBieXRlcykgd2l0aG91dCBpbmNpZGVudDsgdGhlcmUgZGlkIG5vdCBzZWVtIHRvIGJlIGFueXRo aW5nCit3YWl0aW5nLiAgSW4gZmFjdCwgdGhlIGxhc3QgdGhpbmcgd2UgcmVhZCBmcm9tIHRoZSBw dHkgd2VyZSB0aGUgdGV4dAorbWVzc2FnZXMgdGhhdCBhcmUgaXNzdWVkIGF0IHRoZSBlbmQgb2Yg dGhlIHRyYW5zZmVyOiAicnogMy43MyAxLTMwLTAzCitmaW5pc2hlZC4iICBBZnRlciB3aGljaCBp dCBwYXVzZXMgYSBzZWNvbmQgYW5kIHNwaXRzIG91dCBhIG1lc3NhZ2UgYWJvdXQKK1VOUkVHSVNU RVJFRCBDT1BZLgorCitGaWd1cmVkIG91dCBob3cgdG8gYnVpbGQgbHJ6c3osIGluIGhvcGVzIHRo YXQgdGhlIHByZXZpb3VzIHByb2JsZW1zIHdlcmUKK3dpdGggcnpzeiBhbmQgY3J6c3oncyBmaWRk bGluZyB3aXRoIGZpbGUgZGVzY3JpcHRvcnMsIGJ1dCBJIGdldCB0aGUgc2FtZQorYmVoYXZpb3Iu ICBXaGljaCBpcyBnb29kLCBJIGd1ZXNzLCBiZWNhdXNlIGlmIEkgY2FuIGZpeCBvbmUsIEkgZml4 IHRoZW0gYWxsLgorT3Igbm90Li4uICBUZXN0aW5nIGxyeiBieSBpdHNlbGYgKG5vdCB1bmRlciBD LUtlcm1pdCksIEkgc2VlIHRoYXQgaXQgZG9lc24ndAord29yayBhdCBhbGwgd2l0aCBLZXJtaXQn cyBvd24gWm1vZGVtIGltcGxlbWVudGF0aW9uLgorCitPSywgaGVyZSdzIG9uZSBwcm9ibGVtOiBh dCB0aGUgZW5kIG9mIHRoZSB0cmFuc2ZlciwgdGhlIE9tZW4gWm1vZGVtcyBwcmludAorc3R1ZmYg bGlrZSAiUGxlYXNlIHJlYWQgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IiwgS2VybWl0IGR1dGlmdWxs eSByZWFkcyB0aGlzCitmcm9tIHRoZSBwdHkgYW5kIHNlbmRzIGl0IHRvIHRoZSBob3N0LCB0aGUg aG9zdCBzaGVsbCBzYXlzICJQbGVhc2U6IGNvbW1hbmQKK25vdCBmb3VuZCIsIGlzc3VlcyBpdHMg cHJvbXB0IGFnYWluLCB3aGljaCBLZXJtaXQgcmVhZHMsIGZlZWRzIHRvIHRoZSBwdHksCithbmQg YXBwYXJlbnRseSB0aGUgcHR5IGVjaG9lcyBpdCwgc28gd2Ugc2VuZCBpdCBiYWNrIHRvIHRoZSBo b3N0LCBhbmQgdGhlcmUKK2Vuc3VlcyBhbiBpbmZpbml0ZSBsb29wIG9mIGdldHR5IGJhYmJsZSB1 bnRpbCB0aGUgcHR5IGNsb3Nlcy4gIE5vdywgdGhlcmUKK291Z2h0IHRvIGJlIGEgd2F5IHRvIG1h a2UgdGhlIGV4dGVybmFsIHByb3RvY29sIHNodXQgdXAsIGxpa2UgS2VybWl0J3MKKy1xKHVpZXQp IGZsYWcsIGJ1dCB0aGVzZSBhcmUgdW5yZWdpc3RlcmVkIHZlcnNpb25zIHNvIHlvdSBjYW4ndCBz aHV0IHVwIHRoZQorbWVzc2FnZXMuICBJbiBmYWN0LCB0aGUgdHJhbnNmZXIgd29ya3MsIGJ1dCB0 aGUgZ2V0dHkgYmFiYmxlIGF0IHRoZSBlbmQKK3J1aW5zIHRoZSBleHBlcmllbmNlLiAgTm93IEkn bSBiZWdpbm5pbmcgdG8gd29uZGVyIGhvdyBhbnkgb2YgdGhlc2UgcHJvZ3JhbXMKK2V2ZXIgd29y a2VkIGFzIGV4dGVybmFsIHByb3RvY29scy4gIEhtbW0sIG5vdyB0aGF0IEkgdHJ5IGl0LCBJIHNl ZSB0aGUKK3NhbWUgdGhpbmcgaGFwcGVucyB0aGUgb2xkIHdheSwgd2hlbiB1c2luZyB0dHJ1bmNt ZCgpIHJhdGhlciB0aGFuIHR0cHR5Y21kKCkuCisKK1JlYWRpbmcgdGhlIGNyenN6IGRvY3VtZW50 YXRpb24gSSBzZWUgaXQgc2F5cyB0aGF0IG1lc3NhZ2VzIGNvbWUgb3V0IG9uCitzdGRlcnIuICBP SywgdGhhdCdzIHByb2dyZXNzLiAgSW4gY2t1cHR5LmMgSSB0cnkgcmVkaXJlY3RpbmcgMiB0byAv ZGV2L251bGwuCitXZWxsIGdvb2QsIHRoaXMgZmlsdGVycyBvdXQgdGhlIG1lc3NhZ2VzIGZyb20g Y3N6LCBidXQgd2Ugc3RpbGwgZ2V0IGdldHR5CitiYWJibGUgb24gdGhlIHByb21wdC4gIEluIHRo ZSBkZWJ1ZyBsb2csIHdlIHJlYWQgdGhlIGxhc3QgYnVuY2ggb2Ygc3R1ZmYKK2Zyb20gbmV0LCA2 MTggYnl0ZXMgb2YgWm1vZGVtIHN0dWZmLi4uICAgTm93IHdoYXQgaGFwcGVucz8KKworWm1vZGVt IG9uIHRoZSByZW1vdGUgZXhpdHMsIHRoZSBob3N0IHByaW50cyBpdHMgcHJvbXB0LiAgS2VybWl0 LCBvZiBjb3Vyc2UsCityZWFkcyB0aGUgcHJvbXB0IGZyb20gdGhlIG5ldCwgbm93IGNvbWUgdG8g dGhlIGJvdHRvbSBvZiB0aGUgbG9vcCBhbmQgd2UKK2hhdmUgNyBieXRlcyB0byB3cml0ZSB0byB0 aGUgcHR5LCBhbmQgbm8gZXJyb3IgY29uZGl0aW9uLCBzbyB3ZSBjb250aW51ZSB0aGUKK2xvb3Au ICBzZWxlY3QoKSBzYXlzIHRoYXQgdGhlIHB0eSBpcyByZWFkeSBmb3Igd3JpdGluZy4gIFdlIHdy aXRlIHRoZSA3CitieXRlcyBhbmQgYW5kIGdldCBubyBlcnJvci4gIExvb3AgYWdhaW4sIHRoaXMg dGltZSBzZWxlY3QoKSBzYXlzIHRoZSBwdHkgaGFzCitkYXRhIHdhaXRpbmcuICBTdXJlIGVub3Vn aCB3ZSBnZXQgdGhlIHByb21wdCBiYWNrLCBhbmQgc2VuZCBpdCB0byB0aGUgbmV0LAorYW5kIHRo dXMgYmVnaW5zIHRoZSBnZXR0eSBiYWJibGUuICBUaGVyZSBhcmUgdHdvIGNhdXNlcyBmb3IgdGhp czoKKworICAxLiBjcnpzeiBkb2VzIG5vdCBleGl0IGltbWVkaWF0ZWx5OyBpdCBzbGVlcHMgZm9y IDEwIHNlY29uZHMgYWZ0ZXIKKyAgICAgcHJpbnRpbmcgaXRzIG5hZyBtZXNzYWdlLgorCisgIDIu IER1cmluZyB0aGlzIGludGVydmFsIHRoZSBwdHkgc2VlbXMgdG8gYmUgZWNob2luZyB3aGF0IGlz IHNlbnQgdG8gaXQuCisgICAgIGNzeiBpcyBub3QgZWNob2luZzsgSSBjaGVja2VkLiAgQW55d2F5 LCByZW1vdmluZyB0aGUgcGF1c2UgZG9lc24ndAorICAgICBzZWVtIHRvIG1ha2UgYSBkaWZmZXJl bmNlLgorCit0dHB0eWNtZCgpIG5lZWRzIHRvOgorCisgLiBURUxMIHRoZSBwdHkgbW9kdWxlIHRv IHJlZGlyZWN0IHN0ZGVyciB0byAvZGV2L251bGwKKyAuIFNFVCBQVFkgVE8gTk9FQ0hPIChtYXN0 ZXIgb3Igc2xhdmU/KQorCitUcmllZCBzZXR0aW5nIHRoZSBwdHkgdG8gbm9lY2hvOgorCisgIHRl cm1idWYuY19sZmxhZyAmPSB+KEVDSE98RUNIT0V8RUNIT0spOworCithbmQgdGhpcyBzZWVtZWQg dG8gc3RvcCB0aGUgZ2V0dHkgYmFiYmxlLiAgQWZ0ZXIgdGhlIGZpbGUgdHJhbnNmZXIsIEkgcmVh ZAorYmFjayB0aGUgcHJvbXB0IGZyb20gdGhlIGhvc3Qgc2hlbGwsIEkgd3JpdGUgdGhlIHByb21w dCBieXRlcyB0byB0aGUgcHR5OwordGhlcmUgaXMgbm8gZXJyb3IuICBBbmQgbm93IHNlbGVjdCgp IHNpbXBseSBoYW5ncyBmb3JldmVyIChvciB0aW1lcyBvdXQgaWYKK2EgdGltZW91dCBpcyBzZXQp LiAgVGhlIHF1ZXN0aW9uIGhlcmUgaXM6IHdoeSBkaWRuJ3Qgd3JpdGluZyB0byB0aGUgcHR5Citw cm9kdWNlIGFuIGVycm9yPyAgQW5kLCBiZWNhdXNlIHdlIG5ldmVyIGRldGVjdCB0aGUgcHR5IGhh cyBleGl0ZWQsIHdlIGNhbid0CitzZXQgYSBnb29kIHJldHVybiBjb2RlLiAgNSBKYW4gMjAwNy4K KworTW92ZWQgcHR5IGZvcmsgdGVzdGluZyB0byBhIHNlcGFyYXRlIHJvdXRpbmUsIHB0eV9nZXRf c3RhdHVzKCksIGFuZCAKK2FkZGVkIGEgY2FsbCB0byBpdCBmcm9tIHRoZSBwbGFjZSB3aGVyZSB3 ZSB0aW1lIG91dCwgaW4gY2FzZSB0aGUgZm9yawordGVybWluYXRlZDsgdGhlbiB3ZSBjYW4gZ2V0 IGFuZCByZXR1cm4gaXRzIHN0YXR1cy4gIDYgSmFuIDIwMDcuCisKK0FkZGVkIGNhbGxzIHRvIHB0 eV9nZXRfc3RhdHVzKCkgdG8gZXZlcnkgcGxhY2Ugd2hlcmUgd2Ugc3VzcGVjdCBhIHB0eSBlcnJv ciwKK3RyaWVkIGFnYWluIHdpdGggbHJ6c3osIGNyenN6LCBhbmQgcmVndWxhciByenN6LiAgQWxs IHRocmVlIHdvcmssIGJ1dCBpbgorZWFjaCBjYXNlIHdhaXRwaWQoKSBpbmRpY2F0ZXMgdGhhdCB0 aGUgc3ogcHJvZ3JhbSBnYXZlIGV4aXQgY29kZSAxIChmYWlsdXJlKS4KK2NrdXRpby5jLCA3IEph biAyMDA3LgorCitDaGFuZ2luZyB0aGUgc3ViamVjdC4uLiAgT24gbXkgdGVzdCBzeXN0ZW0sIGV2 ZXJ5IHRpbWUgSSBleGVjdXRlIHR0cHR5Y21kKCksCitJIGdldCAicGVybWlzc2lvbiBkZW5pZWQi IG9uIC9kZXYvdHR5cDMuICBUaGVuIEkgcnVuIGl0IGFnYWluIGFuZCBnZXQgdG8KK3R0eXA0IHdo aWNoIGlzIE9LLiAgSSB3YW50ZWQgdG8gc2tpcCBwYXN0IGFueSBwdHkgZm9yIHdoaWNoIEkgbGFj aworcGVybWlzc2lvbiBhbmQgdHJ5IHRoZSBuZXh0IHdpdGhvdXQgcmFpc2luZyBhbiBlcnJvci4g IEFkZGVkIGRlYnVnZ2luZyBjb2RlOgorCisgIDE2OjI1OjIzLjUyNCBwdHlfZ2V0cHR5KCkgcHR5 IG1hc3RlciBvcGVuIGVycm9yWy9kZXYvcHR5cDBdPTUKKyAgMTY6MjU6MjMuNTI0IHB0eV9nZXRw dHkoKSBwdHkgbWFzdGVyIG9wZW4gZXJyb3JbL2Rldi9wdHlwMV09NQorICAxNjoyNToyMy41MjQg cHR5X2dldHB0eSgpIHB0eSBtYXN0ZXIgb3BlbiBlcnJvclsvZGV2L3B0eXAyXT01CisgIDE2OjI1 OjIzLjUyNCBwdHlfZ2V0cHR5KCkgZm91bmQgcHR5IG1hc3RlclsvZGV2L3B0eXAzXQorICAxNjoy NToyMy41MjQgcHR5X2dldHB0eSgpIHNsYXZlYnVmIFsyXVsvZGV2L3R0eXAzXQorCitTbyBpdCBh bHJlYWR5IHdhcyBza2lwcGluZyBwYXN0IG9wZW4gZXJyb3JzOyB0dHlwMyB3YXMgb3BlbmVkIHN1 Y2Nlc3NmdWxseS4KK1RoZSBwcm9ibGVtIGlzIHRoYXQgcHR5cDMgaXMgcnctcnctcnctLCBidXQg dGhlIGNvcnJlc3BvbmRpbmcgbWFzdGVyLAordHR5cDMsIGlzIHJ3LS1yLS0tLS4gIEl0IHNlZW1z IHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpZiB0aGUgbWFzdGVyIGNhbiBiZQorb3BlbmVkLCB0aGVu IHNvIGNhbiB0aGUgY29ycmVzcG9uZGluZyBzbGF2ZS4gIFVuZm9ydHVuYXRlbHksIHRoZSBjb2Rl IGlzCitub3Qgc3RydWN0dXJlZCB0byBhbGxvdyB1cyB0byBza2lwIGFoZWFkIHRvIHRoZSBuZXh0 IG1hc3RlciBpZiB0aGUgc2xhdmUKK2Nhbid0IGJlIG9wZW5lZC4gIDcgSmFuIDIwMDcuCisKK1Nw ZW50IGEgY291cGxlIGhvdXJzIHRyeWluZyB0byByZWFycmFuZ2UgdGhlIGNvZGUgaW4gdGhlIHB0 eSBtb2R1bGUgdG8gc2tpcAorcGFzdCBpbmFjY2Vzc2libGUgc2xhdmVzIGJ1dCBpdCB3YXMgYSBy YWJiaXQgaG9sZSwgbm90IHdvcnRoIGl0LCBiYWNrZWQgb2ZmLgorOCBKYW4gMjAwOC4KKworVHJp ZWQgYW4gdXBsb2FkIG92ZXIgYSBzZWN1cmUgY29ubmVjdGlvbiB1c2luZyBsc3ouICBVbmV4cGVj dGVkbHksIHRoaXMgdGltZQoraXQgd29ya2VkOyBub3Qgb25seSB3YXMgdGhlIGZpbGUgKGFib3V0 IDAuNU1CKSB0cmFuc2ZlcnJlZCBjb3JyZWN0bHksIGJ1dAorS2VybWl0IGRldGVjdGVkIHRoZSBm b3JrJ3MgdGVybWluYXRpb24gYW5kIGdvdCB0aGUgcGlkJ3MgZXhpdCBzdGF0dXMsIGFuZCwKK2Zv ciB0aGUgZmlyc3QgdGltZSwgY29ycmVjdGx5IHJlcG9ydGVkIGEgc3VjY2Vzc2Z1bCB0cmFuc2Zl ci4gIEkgaGF2ZSBubworaWRlYSB3aHkgdGhpcyB3b3JrcyB0b2RheSBhbmQgbm90IHllc3RlcmRh eS4gIE1vcmUgdGVzdHM7IGl0IHdvcmtzIG1vc3Qgb2YKK3RoZSB0aW1lLiAgSXQgd29ya3Mgd2l0 aCBjc3ogYW5kIHdpdGggcmVndWxhciBzeiB0b28uCisKKyhkYXlzIGxhdGVyLi4uKQorCitja3Vj bnMuYyBzZWVtcyB0byBkbyB0aGUgcmlnaHQgdGhpbmc7IGl0IHJlY29nbml6ZSB0aGUgWlNUQVJU IHN0cmluZywKK2FjdGl2YXRlcyB0aGUgWm1vZGVtLVJlY2VpdmUgQVBDLCBhbmQgcmV0dXJucy4g IGRvY29uZWN0KCkgc2VlcyB0aGUgQVBDIGFuZAorYmVnaW5zIHRvIGV4ZWN1dGUgaXQuICBUaGUg UkVDRUlWRSBjb21tYW5kIHJlc3VsdHMgaW4gYSBjYWxsIHRvIHRoZSBHRVQKK2NvbW1hbmQgcGFy c2VyLCBkb3hnZXQoKSAoSVMgVEhBVCBSSUdIVD8pLCB0aGVuIGNvbWVzIGEgdHRmbHVpKCksIHdo aWNoCit0aHJvd3MgYXdheSBhIGJ1bmNoIG9mIHN0dWZmLiAgRmluYWxseSB3ZSBnZXQgdG8gdHRw dHljbWQoKSwgd2UgZ2V0IGEgcHR5CithbmQgcnVuIGxyeiBpbiBpdCwgc2VsZWN0KCkgc2F5cyBz dHVmZiBpcyB3YWl0aW5nIGZyb20gdGhlIHB0eSwgYnV0IHJlYWQKK3JldHVybnMgMCwgZXJybm8g MC4gIFNraXBwaW5nIHRoZSB0dGZsdWkoKSBpbiBkb3hnZXQoKSBpZiB0aGUgcHJvdG9jb2wgd2Fz Citub3QgS2VybWl0IGRpZG4ndCBzZWVtIHRvIG1ha2UgZGlmZmVyZW5jZS4gIGNrdXVzNi5jLCA4 IEphbiAyMDA3LgorCitUaGUgcHJvYmxlbSBpcyB0aGF0IGluIHRoaXMgY2FzZSwgcmVhZHMgZnJv bSB0aGUgcHR5IG5ldmVyIGdldCBhbnl0aGluZyAobm8KK2RhdGEsIG5vIGVycm9yKSwgd3JpdGUg YWx3YXlzIGdldHMgYW4gZXJyb3IuICBJdCdzIGFzIGlmIHRoZSBwdHkgd2FzIG5vdAorYmVpbmcg c2V0IHVwIHJpZ2h0LCBvciB3ZSdyZSB1c2luZyB0aGUgd3JvbmcgZmlsZSBkZXNjcmlwdG9yLiAg QW5kIGlmIHdlCitza2lwIHRoZSBhdXRvZG93bmxvYWQ/ICBTYW1lIHRoaW5nLgorCitPSywgcHV0 dGluZyBkb3dubG9hZHMgYXNpZGUgZm9yIGEgbW9tZW50LCBsZXQncyBnZXQgdXBsb2FkcyB3b3Jr aW5nIGFzIHdlbGwKK2FzIHBvc3NpYmxlLiAgQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSBvZGQg c2l0dWF0aW9uIChhdCBsZWFzdCBpbiB0aGlzCitjb25maWd1cmF0aW9uKSB0aGF0IHRoZSB1cGxv YWQgc3VjY2VlZHMsIGJ1dCBub3cgZm9yIHNvbWUgcmVhc29uIHdlIGFyZQordW5hYmxlIHRvIHJl YWQgdGhlIGV4aXQgc3RhdHVzIGZyb20gdGhlIHByb2Nlc3MsIGV2ZW4gdGhvdWdoIHRoaXMgd2Fz Cit3b3JraW5nIGJlZm9yZSwgc28gdHRwdHljbWQoKSByZXR1cm5zIDAgKGZhaWx1cmUpLCB5ZXQg S2VybWl0IHJlcG9ydHMKK3N1Y2Nlc3MuCisKK1dlbGwsIGl0IHR1cm5zIG91dCB0aGF0IGtpbGwo cHR5X2ZvcmtfcGlkLDApIHdhcyBndW1taW5nIHVwIHRoZSB3b3Jrcy4KK0lmIHdlIHVzZSBvbmx5 IHdhaXRwaWQoKSBhbGwgaXMgd2VsbCwgSSB0aGluay4gIHdhaXRwaWQoKSB3aXRoIFdOT0hBTkcK K3JldHVybnMgLTEgd2l0aCBzdGF0dXMgLTEgZXJybm8gMCBpZiB0aGUgcGlkIGhhcyBub3QgZXhp dGVkLCBhbmQgaXQgcmV0dXJucwordGhlIHBpZCBhbmQgc3RhdHVzID4gLTEgaWYgdGhlIHByb2Nl c3MgaGFzIGV4aXRlZC4gIEZpeGVkIHB0eV9nZXRfc3RhdHVzKCkKK3RvIGRvIGl0IHRoaXMgd2F5 LiAgY2t1dGlvLmMsIDcgSmFuIDIwMDcuCisKK0xldCdzIG1vdmUgdGhpcyBmcm9tIE1hYyBPUyB0 byBOZXRCU0QgYW5kIHNlZSBob3cgaXQgd29ya3MuICBXZWxsLCB0aGUgZmlsZQordHJhbnNmZXIg d2FzIGp1c3QgZmluZSwgYnV0IHRoZW4gSSB1c2VkIHNvbWUgc2V4cHMgdG8gY2FsY3VsYXRlIHRo ZSBlbGFwc2VkCit0aW1lIGFuZCB0cmFuc2ZlciByYXRlLCBhbmQgS2VybWl0IGh1bmcgaW4gZG9z ZXhwKCkuICBGaW5lLCBpZ25vcmluZyB0aGF0Li4uCitUaGUgZGVidWcgbG9nIHNob3dzIHRoYXQg dHRwdHljbWQoKSBnZXRzIHRoZSBwdHkgT0ssIG1hc3RlciBhbmQgc2xhdmUsIHRoZQoraS9vIGdv ZXMgc21vb3RobHksIGFuZCB3YWl0cGlkKCkgZG9lcyBpdHMgam9iIHBlcmZlY3RseS4gIFNvbGFy aXMsIHNhbWUKK2RlYWw7IHR0cnVuY21kKCkgZ29lcyBzbW9vdGhseSwgYnV0IHRoZW4gdGhlIHNl eHBzIGFmdGVyd2FyZCBnZXQgIkFyaXRobWV0aWMKK2V4Y2VwdGlvbiIuICBUdXJucyBvdXQgdGhl cmUgd2FzIGEgQkFEIGJ1ZyBpbiBkb3NleHAoKSB0aGF0IGFsbG93ZWQgYW4KK2ludGVnZXIgZGl2 aXNpb24gYnkgMCB0byBvY2N1ciB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXM7IGl0J3MgYWx3 YXlzIGJlZW4KK3RoZXJlLiAgRml4ZWQgaW4gZG9zZXhwKCk6IGNrdXVzMy5jLCA4IEphbiAyMDA3 LgorCitBZnRlciBub3RpY2luZyBhIGZldyBwcm9ibGVtcyBydW5uaW5nIHRoZSBwb3Aua3NjIHNj cmlwdCBpbiBwcm9kdWN0aW9uIG92ZXIKK3RoZSBwYXN0IHllYXIsIHJld3JvdGUgXGZlbWFpbGFk ZHJlc3MoKSB0byBiZSBtb3JlIHJlbGlhYmxlIGFuZCBhIGxvdAorc2ltcGxlci4gIGNrdXVzNC5j LCA5IEphbiAyMDA3LgorCitCYWNrIHRvIHR0cHR5Y21kKCkuLi4gIFdoZW4gd2UgbGVmdCBvZmYs IHdlIGNvdWxkIHNlbmQgYnV0IG5vdCByZWNlaXZlLiAgU2V0Cit1cCBhIHRlc3QgY2FzZSB1c2lu ZyBLZXJtaXQgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sIGZvciByZWNlaXZpbmcgYSBzaG9ydAor ZmlsZS4gIElmIEkgU0VUIFNUUkVBTUlORyBPRkYgYW5kIHVzZSBzaG9ydCBwYWNrZXRzLCBpdCBh Y3R1YWxseSBkb2VzIHdvcmssCitzbyBpdCdzIG5vdCBhIGNvbXBsZXRlIGZhaWx1cmUgdG8gZnVu Y3Rpb24sIGJ1dCBhcHBhcmVudGx5IGEgbGFjayBvZiBmbG93Citjb250cm9sIGZvciB0aGUgcHR5 LiAgQmVnYW4gYnkgY29tcGxldGluZyB0aGUgcGFyYW1ldGVyaXphdGlvbiBvZiB0aGUgcHR5Citt b2R1bGUsIHNvIGl0IGNhbiBiZSBjYWxsZWQgZm9yIGludGVyYWN0aXZlIHVzZSAoZmMgMCkgb3Ig Zm9yIHJ1bm5pbmcKK3Byb3RvY29scyAoMSkuICBDb25maXJtZWQgdGhhdCBldmVyeXRoaW5nIHdv cmtzIGF0IGxlYXN0IGFzIHdlbGwgYXMgYmVmb3JlCisoZS5nLiAic2V0IGhvc3QgL3B0eSBlbWFj cyIgdnMgZXh0ZXJuYWwgcHJvdG9jb2xzKS4gIGNrY2RlYi5oLCBja3V0aW8uYywKK2NrdXB0eS5j LCA5IEphbiAyMDA3LgorCitGb3VuZCBpbiBIUC1VWCAibWFuIDcgcHR5IiBhIGRlc2NyaXB0aW9u IG9mIGlvY3RsKGZkLFRJT0NUVFksZmMpIHdoaWNoIGlzCitleGFjdGx5IHdoYXQgd2Ugd2FudDog ZmMgMCB0dXJucyBvZmYgYWxsIHRlcm1pbyBwcm9jZXNzaW5nIGFuZCBndWFyYW50ZWVzIGFuCit1 bmludGVycnVwdGVkLCB1bm1vbGVzdGVkLCBmbG93LWNvbnRyb2xsZWQgc3RyZWFtIG9mIGJ5dGVz IGluIGJvdGgKK2RpcmVjdGlvbnMuICBUaGlzIGZ1bmN0aW9uIGFsc28gZXhpc3RzIGluIExpbnV4 LCBidXQgbm90IGluIFNvbGFyaXMsIE5ldEJTRCwKK29yIE1hYyBPUyBYIChUSU9DTk9UVFkgaXMg bm90IHdoYXQgd2Ugd2FudCwgaXQgZG9lcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSkuCisKK0Fu b3RoZXIgcG9zc2liaWxpdHkgaXMgVElPQ1JFTU9URSwgd2hpY2ggImNhdXNlcyBpbnB1dCB0byB0 aGUgcHNldWRvdGVybWluYWwKK3RvIGJlIGZsb3cgY29udHJvbGxlZCBhbmQgbm90IGlucHV0IGVk aXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUgdGVybWluYWwKK21vZGUiLiAgVGhpcyBvbmUgZXhpc3Rz IGluIGF0IGxlYXN0IEhQVVgsIE5ldEJTRCwgU29sYXJpcywgYW5kIE1hYyBPUyBYLgorCitTb2xh cmlzOiBidWlsZHMgT0ssIGJ1dCBhdCBydW50aW1lIHdlIGdldCBFTk9UVFkgKCJJbmFwcHJvcHJp YXRlIGlvY3RsIGZvcgorZGV2aWNlIikuICBCeSB0aGUgdGltZSB0aGlzIGhhcHBlbnMsIGl0J3Mg aGFyZCB0byB0ZWxsIGZyb20gdGhlIGNvZGUgd2hldGhlcgordGhlIGZkIHdlJ3JlIHVzaW5nIGlz IGZvciB0aGUgbWFzdGVyIG9yIHRoZSBzbGF2ZTsgVElPQ1JFTU9URSBjYW4gYmUgdXNlZAorb25s eSBvbiB0aGUgbWFzdGVyLiAgQ2xvc2UgaW5zcGVjdGlvbiBzaG93cyB0aGF0IEkgYW0gaW5kZWVk IGRvaW5nIHRoYXQ7CitwdHlmZCBhcyBzZWVuIGJ5IHR0cHR5Y21kKCkgaXMgdHJ1bHkgdGhlIG1h c3RlciwgaS5lLiB0aGUgL2Rldi9wdHlYWCBkZXZpY2UsCitub3QgdGhlIC9kZXYvdHR5WFggZGV2 aWNlICh0aGUgc2xhdmUgZmQgY2FuJ3QgYmUgc2VlbiBhdCBhbGwsIGFzIGl0IGV4aXN0cworb25s eSBpbiBhIHNlcGFyYXRlIGZvcmspLiAgT0ssIHNvIG5vdyB3ZSBrbm93IHRoYXQgVElPQ1JFTU9U RSBjYW4ndCBiZSB1c2VkCitvbiBTb2xhcmlzLgorCitOZXRCU0Q6IFNvbWVob3csIHdoZXRoZXIg YXMgYSByZXN1bHQgb2YgdG9kYXkncyBmaWRkbGluZyBvciB0aGUgcGhhc2Ugb2YgdGhlCittb29u LCB0aGUgY29kZSBpbiBwdHlfb3Blbl9zbGF2ZSgpIHRoYXQgdHJpZXMgdG8gb3BlbiAvZGV2L3R0 eSBzdGFydGVkCitmYWlsaW5nIG9uIE5ldEJTRCAoIkRldmljZSBub3QgY29uZmlndXJlZCIpLiAg Q2hhbmdpbmcgaXQgdG8gYmUgcnVuIG9ubHkgaWYKK2ZjID09IDAgKHdoaWNoIGRvZXNuJ3Qgc2Vl bSB0byBodXJ0IGFueXRoaW5nKSwgb25jZSBhZ2FpbiBJIGdldCBFTk9UVFkgb24KK3RoZSBUSU9D UkVNT1RFIGlvY3RsLiAgWm1vZGVtIHdvcmtzIGJ1dCBLZXJtaXQgdG90YWxseSBmYWlscyAodGhl IGZvcmsgZXhpdHMKK2ltbWVkaWF0ZWx5IHdpdGggYW4gZXhpdCBjb2RlIG9mIDAsIGV2ZW4gdGhv dWdoIGl0IGRpZG4ndCBkbyBhbnl0aGluZykuCisKK01hYyBPUyBYOiBFeGFjdGx5IHRoZSBzYW1l IHNlcXVlbmNlIGFuZCByZXN1bHRzIGFzIE5ldEJTRC4KKworTGludXg6ICBJdCBkaWQgbm90IGV4 ZWN1dGUgdGhlIG5ldyBpb2N0bCBhdCBhbGw7IGFwcGFyZW50bHkgdGhlIFRJT0Mgc3ltYm9scwor YXJlIGhpZGRlbiBvciBub3QgZXhwb3J0ZWQgb3Igc29tZXRoaW5nLgorCitXaGVyZSB3ZSBzdGFu ZDoKKyAuIERvd25sb2FkcyBkb24ndCB3b3JrCisgLiBVcGxvYWRzIGdvdCBzbG93IGFnYWluCisg LiBLZXJtaXQgZG9lc24ndCB3b3JrIGF0IGFsbCBhcyBhbiBleHRlcm5hbCBwcm90b2NvbAorCitB Y3R1YWxseSBpZiBJIHRha2UgdGhlIGRlYnVnZ2luZyBvdXQgaXQgZ29lcyBmYXN0LCBidXQgaXQg ZG9lc24ndCBmaW5pc2guCisKK0FsbCB0b2RheSdzIHdvcmsgb24gdHRwdHljbWQoKSBsb29rcyBs aWtlIGEgZGVhZCBlbmQuICBUbyByb2xsIGJhY2sgdG8KK3llc3RlcmRheToKKworICBjcCBja3V0 aW8uYy0yMDA3MDEwOCBja3V0aW8uYworICBjcCBja3VwdHkuYy0yMDA3MDEwOCBja3VwdHkuYwor ICBjcCBja3VwdHkuaC0yMDA3MDEwOCBja3VwdHkuaAorCitvciB0byBjb250aW51ZSB3aXRoIHRv ZGF5J3M6CisKKyAgY3AgY2t1dGlvLmMtMjAwNzAxMDkgY2t1dGlvLmMKKyAgY3AgY2t1cHR5LmMt MjAwNzAxMDkgY2t1cHR5LmMKKyAgY3AgY2t1cHR5LmgtMjAwNzAxMDkgY2t1cHR5LmgKKworQ29t cGFyaW5nIE1vbmRheSdzIGFuZCBUdWVzZGF5J3MgcHR5LXJlbGF0ZWQgY29kZSwgdGhlIGRpZmZl cmVuY2VzIGFyZToKKyAxLiBQYXNzaW5nIG9mIGZ1bmN0aW9uIGNvZGUgdG8gYW5kIGFtb25nIHB0 eSBtb2R1bGVzLgorIDIuIFNraXBwaW5nIHRoZSBUSU9DU0NUVFkgaW9jdGwgYW5kIHRoZSBvcGVu KCIvZGV2L3R0eSIpIHRlc3QuCisgMy4gQXR0ZW1wdGluZyB0byBwdXQgcHR5IGluIFRJT0NUVFkg b3IgVElPQ1JFTU9URSBtb2RlLgorCitDb21tZW50aW5nIG91dCAyIGFuZCAzIHNob3VsZCBwdXQg dXMgYmFjayB3aGVyZSB3ZSB3ZXJlIG9uIE1vbmRheSBpZiB0aGUKK3BhcmFtZXRlcml6YXRpb24g d2FzIGRvbmUgcmlnaHQuICBBbmQgd2l0aCB0aGlzLCBvbiBTb2xhcmlzLCBkb3dubG9hZGluZwor d2l0aCBLZXJtaXQgZXh0ZXJuYWwgcHJvdG9jb2wgd29ya3MgYnV0IHNsb3dseSwgOEsgY3BzLCB3 aXRoIG9yIHdpdGhvdXQKK2RlYnVnZ2luZy4gIERlYnVnIGxvZyBkb2VzIG5vdCBzaG93IGFueSBv YnZpb3VzIGJvdHRsZW5lY2tzOyBzZWxlY3QoKSB0YWtlcworYW55d2hlcmUgYmV0d2VlbiBubyB0 aW1lIGF0IGFsbCBhbmQgMC4xIHNlY29uZHMgdG8gcmV0dXJuLiAgSWYgSSBpbmNyZWFzZQordGhl IHB0eS1uZXQgYnVmZmVyIHNpemUgZnJvbSAxSyB0byA0SywgdGhlIHJhdGUgZ29lcyB1cCB0byA1 NUsgY3BzLiAgSWYgSQorbWFrZSBpdCA4SyBJIGdldCAxMzZLIGNwcy4gIFdpdGggMTZLIEkgZ2V0 IDM0NksgY3BzLiAgMzJLOiAzOTVLIGNwcyAtLSB0aGlzCitsYXN0IG9uZSBpc24ndCB3b3J0aCB0 aGUgZG91YmxpbmcuICBCdXQgYXQgMjRLIEkgZ2V0IDQ5MEsgY3BzLCBzb21ldGltZXMKK3R3aWNl IHRoYXQuICBMZXQncyBzdGljayB3aXRoIDI0SyBmb3Igbm93LiAgRG93bmxvYWRpbmcgd2l0aCBa bW9kZW0gKHJ6c3opCit3b3JrcyBhdCB0aGUgc2FtZSByYXRlLCBidXQgbm93IHdlJ3JlIGJhY2sg dG8gc2VlaW5nIHRoZSBnZXR0eSBiYWJibGUKKyhTZXZlcmFsICIqKkIwODAwMDAwMDAwMDIyZCIp IGF0IHRoZSBlbmQuIDEwIEphbiAyMDA3LgorCitNb3ZpbmcgdG8gTWFjIE9TIFgsIGV2ZXJ5dGhp bmcgd29ya3MgdGhlIHNhbWUgYXMgb24gU29sYXJpcywgZXhjZXB0IEkgZG9uJ3QKK2dldCB0aGUg Wm1vZGVtIGdldHR5IGJhYmJsZSB0aGVyZSwgbm90IGV2ZW4gd2l0aCBPbWVuIHJ6c3ouICBUZXN0 ZWQgc2VuZHMKK2luIGJvdGggcmVtb3RlIGFuZCBsb2NhbCBtb2RlLCB0aGUgbGF0dGVyIG92ZXIg YSBzZWN1cmUgS2VyYmVyb3MgNSBUZWxuZXQKK2Nvbm5lY3Rpb24sIHVzaW5nIEMtS2VybWl0LCBy enN6LCBscnpzeiwgYW5kIGNyenN6LCBhbGwgZ29vZC4gIDEwIEphbiAyMDA3LgorCitOb3cgd2Un cmUgYmFjayB3aGVyZSB3ZSB3ZXJlIHllc3RlcmRheSBtb3JuaW5nLCBidXQgd2l0aCBiZXR0ZXIg dGhyb3VnaHB1dC4KK1RoZSBiaWcgaXNzdWUgdGhlbiB3YXMgcmVjZWl2aW5nIGZpbGVzLiAgQnV0 IHlpa2VzLCBub3cgaXQgd29ya3MhICBOb3Qgb25seQordGhhdCwgSSBnb3QgYSB0cmFuc2ZlciBy YXRlIG9mIDIuMU0gY3BzLiAgVGhhdCdzIHVzaW5nIEtlcm1pdCBwcm90b2NvbCwKK3N0cmVhbWlu ZywgYW5kIGJpZyAoNEspIHBhY2tldHMuICBXaGljaCBkaWRuJ3Qgd29yayBiZWZvcmUuICBOb3Qg YSBmbHVrZQorZWl0aGVyLCBJIHVwbG9hZGVkIGJpZ2dlciBhbmQgYmlnZ2VyIGZpbGVzIHVwIHRv IDZNQiwgdGhleSBhbGwgd2VudAorc21vb3RobHksIGF0IHJhdGVzIGJldHdlZW4gMSBhbmQgMiBN QnBzLiAgMTAgSmFuIDIwMDcuCisKK05vdCBzbyBncmVhdCBpbiBabW9kZW0gbGFuZCwgaG93ZXZl ci4gIElmIEkgc3RhcnQgdGhlIGV4dGVybmFsLXByb3RvY29sCityZWNlaXZlciBvbiB0aGUgZmFy IGVuZCwgZXNjYXBlIGJhY2sgYW5kIHN0YXJ0IGEgWm1vZGVtIHNlbmQuLi4gbm90aGluZy4KK0lm IEkgbGVhdmUgdGhlIHJlbW90ZSBDLUtlcm1pdCBhdCBpdHMgcHJvbXB0ICh3aGVyZSBpdCBzdXBw b3NlZCB0byByZWNvZ25pemUKK3RoZSBabW9kZW0gc3RhcnQgc3RyaW5nKSwgc3RpbGwgbm90aGlu Zy4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBJIGRvIGl0Cit3aXRoIGEgc2NyaXB0IGluc3RlYWQg b2YgYnkgaGFuZDoKKworICBkZWYgeHggb3V0cHV0IHRha2UgYmxhaFwxMywgc2VuZCAvcHJvdG86 em1vZGVtIFwlMQorICAKK2l0IHdvcmtzLCBhdCBsZWFzdCBpbnRlcm1pdHRlbnRseS4gIEJ1dCB0 aGF0J3MgaW4gcmVtb3RlIG1vZGUuICBXZSB3b24ndCBiZQordXNpbmcgdGhpcyBpbiByZW1vdGUg bW9kZS4gIEluIGxvY2FsIG1vZGUsIHdoZXJlIHdlIGhhdmUgYSBzZWN1cmUgY29ubmVjdGlvbgor dG8gYW5vdGhlciBjb21wdXRlciwgaXQgc2VlbXMgd2UgY2FuIHJlYWQgZnJvbSB0aGUgcHR5IGFu ZCB3cml0ZSB0byB0aGUgbmV0LAorYnV0IHdlIHRpbWUgb3V0IHdhaXRpbmcgdG8gcmVhZCBmcm9t IHRoZSBuZXQ7IG5vdGhpbmcgYXJyaXZlcy4gIFdlbGwsIHdlCitrbm93IHRoYXQgaS9vIHdvcmtz IGJvdGggd2F5cywgc28gdGhlcmUgaXMgc29tZSBraW5kIG9mIHNjcmV3dXAgd2l0aCB0aGUKK1pt b2RlbSBwcm90b2NvbCBzdGFydCBpdHNlbGYuICBJbmNyZWFzaW5nIHRoZSAoc3RpbGwgaGFyZHdp cmVkIHRpbWVvdXQpIGZyb20KKzUgdG8gMjJzZWMgYW5kIGRyaXZpbmcgdGhlIHdob2xlIHByb2Nl c3Mgd2l0aCBhIHNjcmlwdCBzbyBhcyB0byBhdm9pZAorYXV0b2Rvd25sb2FkIGFzIHdlbGwgYXMg bWFudWFsIGRleHRlcml0eSBlZmZlY3RzLi4uICBJdCBqdXN0IHNpdHMgdGhlcmUKK2ZvcmV2ZXIs IHdheSBsb25nZXIgdGhhbiAyMiBzZWMuICBeQydpbmcgb3V0LCBJIHNlZSB0aGF0IHN6IHdhcyBp bmRlZWQKK3N0YXJ0ZWQgb24gdGhlIGZhciBlbmQgYW5kIHRoZSBwcm90b2NvbCB3YXMgZXhlY3V0 aW5nLiAgQnV0IGl0IGxvb2tzIGxpa2UKK3RoZSByZWNlaXZlciAodGhlIG9uZSBydW5uaW5nIHVu ZGVyIHR0cHR5Y21kKCkpIGlzIGdldHRpbmcgdHJhc2hlZCBwYWNrZXRzLAorYmVjYXVzZSAoYSkg aXQgc2VlbXMgdG8gYmUgc2VuZGluZyB0aGUgc2FtZSB0aGluZyBvdmVyIGFuZCBvdmVyIGFnYWlu LCBhbmQKKyhiKSBzb21ldGltZXMgaXQgd2FpdHMgYXMgbG9uZyBhcyAxMCBzZWNvbmRzIGJlZm9y ZSBhbnl0aGluZyBhcnJpdmVzIGZyb20KK3RoZSByZW1vdGUuICBNYXliZSBJIHdhcyB0b28gaW1w YXRpZW50OyBJIGludGVycnVwdGVkIGl0IGFmdGVyIDQgbWludXRlcyBidXQKK2l0IHNlZW1zIHRv IGhhdmUgYmVlbiBtYWtpbmcgc29tZSBwcm9ncmVzcy4gIFdoZW5ldmVyIHRoZXJlIHdhcyBkYXRh CithdmFpbGFibGUgdG8gcmVhZCBmcm9tIHRoZSBuZXQsIGl0IHdhcyBhbHdheXMgNjUgYnl0ZXMs IGFuZCBpdCB3YXMgbm90CithY3R1YWxseSB0aGUgc2FtZSBkYXRhIG92ZXIgYW5kIG92ZXIuICBU aGlzIGlzIHVzaW5nIGxyeiBhcyB0aGUgZXh0ZXJuYWwKK3Byb3RvY29sLiAgY3J6IGdldHMgYSBi aXQgZmFydGhlci4gIEluIHRoaXMgY2FzZSB3ZSByZWFkIHVwIHRvIDI0SyBhdCBhCitndWxwLCBi dXQgdGhlIGFtb3VudCB2YXJpZXMgYSBsb3QuICBJdCBsb29rcyBsaWtlIHdlIHRvb2sgaW4gYWJv dXQgMS4yTUIgb2YKK1ptb2RlbSBwcm90b2NvbCBkYXRhLCBidXQgd2VyZSBvbmx5IGFibGUgdG8g b3V0cHV0IHRoZSBmaXJzdCAyMEsgb2YgdGhlCitmaWxlLiAgQ2xlYXJseSB0aGVyZSB3ZXJlIGxv dHMgb2YgZXJyb3JzLiAgSW4gdGhlIGVuZCwgdGhlIGNyeiBleGl0cyB3aXRoCitzdGF0dXMgMSAo ZmFpbHVyZSkuCisKK0FueXdheSBpdCBsb29rcyBsaWtlIHdlJ3JlIGJhY2sgYXQgbmVlZGluZyB0 byBmaW5kIGEgd2F5IHRvIGFjY29tcGxpc2gKK3NvbWV0aGluZyBsaWtlIFRJT0NSRU1PVEUgb24g dGhlIHB0eSwgd2hpY2ggaXMgd2hlcmUgd2UgY2FtZSBpbi4gIDEwIEphbiAyMDA3LgorCitXaXRo b3V0IGFueSB3YXkgdG8gbWFrZSB0aGUgcHR5IHRyYW5zcGFyZW50IGFuZCBmbG93IGNvbnRyb2xs ZWQsIGl0IHdvdWxkCitzZWVtIHRvIG1ha2Ugc2Vuc2UgdG8gd3JpdGUgdG8gdGhlIHB0eSBpbiBz bWFsbGVyIGNodW5rcyB0aGFuIHdlIGRvIHRvIHRoZQorbmV0LiAgSSBsZWZ0IHRoZSByZWFkLWZy b20tcHR5LXdyaXRlLXRvLW5ldCBidWZmZXIgYXQgMjRLIGFuZCBjaGFuZ2VkIHRoZQorcmVhZC1m cm9tLW5ldC13cml0ZS10by1wdHkgYnVmZmVyIHRvIDQ4IGJ5dGVzLgorCitVcGxvYWQgdXNpbmcg bHN6IHdvcmtlZCBidXQgdG9vayBhYm91dCAzIG1pbnV0ZXMuICBBY3R1YWxseSBpdCBkaWRuJ3Qg d29yay4KK09uIHRoZSBsb2NhbCBlbmQgaXQgc2VlbWVkIHRvIHdvcmssIGJ1dCB0aGUgZmlsZSBk aWQgbm90IGFwcGVhciBvbiB0aGUKK3JlbW90ZSBlbmQuICBUcmllZCB0aGlzIHNldmVyYWwgdGlt ZXMsIGVhY2ggdGltZSB3aXRoIGRpZmZlcmVudCByZXN1bHRzLAorYWRkaW5nIG1vcmUgZGVidWdn aW5nIGVhY2ggdGltZS4gIFRoZSBwcm9ibGVtIHRoaXMgdGltZSB3YXMgdGhhdCB0aGUgcHR5City ZWFkIGNvdWxkIGdldCBFV09VTERCTE9DSy4gIENoYW5nZWQgdGhlIGNvZGUgdG8gbm90IHRyZWF0 IHRoaXMgYXMgYW4gZXJyb3IsCitub3cgWm1vZGVtIHVwbG9hZHMgYXJlIHNvbGlkIGFnYWluIGV4 Y2VwdCBJIG5ldmVyIGdvdCBFV09VTERCTE9DSyBhZ2FpbgorZWl0aGVyLCBldmVuIHRob3VnaCBJ IHJlcGVhdGVkIHRoZSBzYW1lIHVwbG9hZCBhYm91dCAxMDAwIHRpbWVzICh3aXRoCit0aHJvdWdo cHV0IG9mIG92ZXIgMk1CcHMgZXZlbiB3aXRoIGRlYnVnZ2luZyBvbiksIHNvIHRoZSB0ZXN0IGZv ciBpdCBoYXMKK25vdCBiZWVuIGV4ZXJjaXNlZC4KKworT0ssIHVwbG9hZHMgc3RpbGwgd29yay4g IEJhY2sgdG8gZG93bmxvYWRpbmcuLi4gIFRoZSB2ZXJ5IGZpcnN0IHB0eSByZWFkCitnZXRzIDAg Ynl0ZXMsIGZvbGxvd2VkIGJ5IHRoZSBmb3JrIHRlc3QgdGhhdCBzaG93cyB0aGF0IGl0IGV4aXRl ZCB3aXRoCitleGl0IHN0YXR1cyAyLiAKKworTmV4dCB3ZSB0cnkgc3RhcnRpbmcgc3ogd2l0aCBz b21lIGRpZmZlcmVudCBvcHRpb25zIG9uIHRoZSBmYXIgZW5kOgorCisgLXE6IHF1aWV0IChubyBt ZXNzYWdlcyk6CisgICAgIGZvciBzb21lIHJlYXNvbiB0aGlzIGdldHMgdG90YWxseSBzdHVjay4K KyAgICAgaXQgbG9va3MgYXMgaWYgdGhpcyBvcHRpb24gaXMgbWlzZG9jdW1lbnRlZDsKKyAgICAg c3ogc2VlbXMgdG8gYmUgc2VuZGluZyB0aGUgbGV0dGVyIEMgKGFzIGluIFhtb2RlbSAxSyBvciB3 aGF0ZXZlcikKKworIC1lOiBlc2NhcGUgKGFsbCBjb250cm9sIGNoYXJzKToKKyAgICAgZmlyc3Qg YXR0ZW1wdCB0byByZWFkIHB0eSBmaW5kcyB0aGUgcHJvY2VzcyBnb25lIHdpdGggZXhpdCBzdGF0 dXMgMi4KKworIC1rOiBzZW5kIDFrIGJsb2NrczoKKyAgICAgdGhpcyBvbmUgZGlkbid0IHN0b3Ag aW1tZWRpYXRlbHkuICBJdCByZWFkcyA0OCBieXRlcyBmcm9tIG5ldCwgd3JpdGVzCisgICAgIDQ4 IHRvIHRoZSBwdHkgd2l0aCBubyBlcnJvci4gIFRoZW4gcmVhZHMgMjEgYnl0ZXMgZnJvbSB0aGUg cHR5LCB3cml0ZXMKKyAgICAgdGhlbSB0byB0aGUgbmV0IE9LLiAgVGhlbiByZWFkcyA0OCBieXRl cyBmcm9tIG5ldCwgd3JpdGVzIHRoZW0gdG8gcHR5IE9LLAorICAgICByZWFkcyAyMSBmcm9tIHB0 eSwgd3JpdGVzIHRvIG5ldCBPSywgZXRjIGV0Yy4uLiAgSXQgYXBwZWFycyB0byBoYXZlCisgICAg IHdvcmtlZCBidXQgKGZpbmFsIHJlYWQgZnJvbSBwdHkgcmV0dXJuZWQgMCwgZm9yayB0ZXN0IHNo b3dlZCBscnogZXhpdGVkCisgICAgIHdpdGggc3RhdHVzIDApLCBidXQgb25seSA3NTQgYnl0ZXMg d2VyZSByZWNlaXZlZCBmcm9tIHRoZSBuZXQgd2hlbiB0aGUKKyAgICAgZmlsZSBpcyA0MjBLLi4u CisKK1dlbGwgdGhpcyBvbmx5IGdvZXMgdG8gc2hvdyB0aGF0IHRoZSBmYXN0ZXIgd2Ugc2hvdmUg c3R1ZmYgaW50byB0aGUgcHR5LCB0aGUKK3dvcnNlIGl0IGdldHMuICBabW9kZW0gZG93bmxvYWRz IHdvbid0IHdvcmsgdW5sZXNzIHdlIGNhbiBtYWtlIHRoZSBwdHkKK3RyYW5zcGFyZW50IGFuZCBm bG93LWNvbnRyb2xsZWQuICBTbyB0byBzdW1tYXJpemUgdG9kYXkncyBkZXZlbG9wbWVudHM6CisK KyAuIHNlcGFyYXRlZCBpbi9vdXQgYnVmZmVyIHNpemVzCisgLiBoYW5kbGVkIEVXT1VMREJMT0NL CisgLiBmb3VuZCBvdXQgdGhhdCBzeiBvcHRpb25zIGRvbid0IGhlbHAgbXVjaAorCisxMSBKYW4g MjAwNy4KKworTmV4dCBkYXkuICBUaGlzIGhhcyBnb3QgdG8gYmUgdGhlIG1vc3QgZGVsaWNhdGUg Y29kZSBldmVyLCBpdCdzIGxpa2UKK1doYWNrLUEtTW9sZSwgZml4IEEgYW5kIEIgcG9wcyB1cC4g IEV2ZW4gd2l0aG91dCB0b3VjaGluZyBpdCwgc29tZXRoaW5nIHRoYXQKK3dvcmtlZCBwZXJmZWN0 bHkgYSAyOjAwIGRvZXNuJ3Qgd29yayBhdCBhbGwgYW4gaG91ciBsYXRlci4gIE1heWJlIEkgY291 bGQKK2hhdmUgdXNlZCBwaXBlcyBpbnN0ZWFkIG9mIHB0eXMsIGJ1dCBwaXBlcyBoYXZlIHByb2Js ZW1zIG9mIHRoZWlyIG93bi4KK1RoZXJlIGhhcyB0byBiZSBhIHdheSB0byBkbyB0aGlzLiAgVGhl IHRlbG5ldCBzZXJ2ZXIsIHRoZSBTU0ggc2VydmVyLCBldGMgLS0KK3RoZXkgYWxsIHJ1biBvbiBw dHlzLCBhbmQgd2UgY2FuIHVwbG9hZCBmaWxlcyB0byB0aGVtIHdpdGggS2VybWl0LiAgV2h5Pwor QmVjYXVzZSBLZXJtaXQgcHV0cyBpdHMgdGVybWluYWwgaW50byBhbGwgdGhlIHJpZ2h0IG1vZGVz IHVzaW5nIHRoZQordGltZS1ob25vcmVkIG1ldGhvZHMgb2YgdHRwa3QoKSBhbmQgdHR2dCgpLiAg UGVyaGFwcyBhbGwgd2UgbmVlZCBpcyBhIGNvcHkKK29mIHR0cGt0KCkgdGhhdCBvcGVyYXRlcyBv biB0aGUgcHR5LgorCitPbiB0aGF0IHRoZW9yeSwgbGV0J3MgZ28gYmFjayB0byBLZXJtaXQgYXMg dGhlIGV4dGVybmFsIHByb3RvY29sLgorSXQncyBpbXBvcnRhbnQgdG8gc3VwcHJlc3MgYWxsIG1l c3NhZ2VzIGFuZCBkaXNwbGF5cy4gIFdpdGggdGhhdCwKK3VwbG9hZHMgd29yayBmaW5lLCBubyBo aXRjaGVzLgorCitEb3dubG9hZHM6ICBXZSBmYWlsIHJpZ2h0IGF3YXkuICBUaGUgZGVidWcgbG9n IHNob3dzIHRoZSBLZXJtaXQgcHJvZ3JhbSB0aGF0Cit3ZSBhcmUgc3RhcnRpbmcgaW4gdGhlIHB0 eSBzYXlzOgorCisgICIiIC0gSW52YWxpZCBjb21tYW5kLWxpbmUgb3B0aW9uLCB0eXBlICJrZXJt aXQgLWgiIGZvciBoZWxwLgorCitCdXQgb2YgY291cnNlIHdlIGFyZSBub3QgZ2l2aW5nIGl0IGFu IGludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbi4KK1N3aXRjaGluZyB0byBna2VybWl0IGZvciB0 aGUgZXh0ZXJuYWwgcHJvdG9jb2wsIG5vdyB3ZSBzZWUgdGhhdCBubyBtYXR0ZXIKK2NvbW1hbmQt bGluZSBvcHRpb25zIHdlIHVzZSwgd2UgcmVhZCAwZCAwZCAwYSBmcm9tIHRoZSBwdHkgYW5kIHRo ZW4gdGhlCituZXh0IHRpbWUgd2UgZ28gdG8gcmVhZCBmcm9tIHRoZSBwdHkgd2UgZ2V0IDAgYnl0 ZXMgYW5kIHdhaXRwaWQoKSBzYXlzIHRoZQorcHJvZ3JhbSBoYXMgZXhpdGVkIHdpdGggc3RhdHVz IDEuCisKK1doeSBzaG91bGQgZG93bmxvYWRpbmcgYmUgZGlmZmVyZW50IGZyb20gdXBsb2FkaW5n PyAgdHRwdHljbWQgaGFzIG5vIGlkZWEsCitpdCBkb2VzIGV2ZXJ5dGhpbmcgdGhlIHNhbWUuICBU aGUgb25seSBkaWZmZXJlbmNlIHdvdWxkIHNlZW0gdG8gYmUgd2hpY2gKK3NpZGUgc2VuZHMgZmly c3QsIGJ1dCBldmVuIHRoYXQgdGVuZHMgdG8gZ2V0IHdhc2hlZCBvdXQgYnkgZWFjaCBwcm9ncmFt J3MKK3N0YXJ0dXAgbWVzc2FnZXMuCisKK0Rvd25sb2FkaW5nIHdpdGggS2VybWl0IHdvcmtlZCAy IGRheXMgYWdvLCB3aGF0J3MgZGlmZmVyZW50IG5vdz8gIFRoZSBidWZmZXIKK3NpemVzLiAgUHV0 dGluZyB0aGUgbmV0LXRvLXB0eSBiYWNrIHVwIHRvIDI0SyAoZnJvbSA0OCBieXRlcykuLi4gIE5v dyBpdAord29ya3MgYWdhaW4uCisKK0NvbmNsdXNpb246IEtlcm1pdCBjb25kaXRpb25zIHRoZSBw dHkgY29ycmVjdGx5LCBabW9kZW0gZG9lcyBub3QuICBUaGVyZWZvcmUKK3R0cnVuY21kKCkgbXVz dCBkdXBsaWNhdGUgd2hhdCB0dHBrdCgpIGRvZXMuCisKK09yIG5vdC4gIEJlY2F1c2Ugcnogd29y a3MgZmluZSBvbiBzc2gvdGVsbmV0IHB0eXMgdG9vLiAgQnV0IG5vdCBvbiBvdXIgcHR5LgorbHJ6 IGV4aXRzIGltbWVkaWF0ZWx5IHdpdGggc3RhdHVzIGNvZGUgMiA9IDAxMDAwIGJ1dCB0aGVyZSBh cmUgbm8gY2x1ZXMgaW4KK3RoZSBscnouYyBzb3VyY2UgY29kZSwgSSBkb24ndCBldmVuIHNlZSB0 aGlzIGV4aXQgc3RhdHVzIHNldCBhbnl3aGVyZS4KK1VucmVkaXJlY3Rpbmcgc3RkZXJyLCBJIHNl ZSB0aGF0IHRoZSBlcnJvciBpcyAibHJ6OiBnYXJiYWdlIG9uIGNvbW1hbmQgbGluZSIuCisKK1do eSBkbyBib3RoIEtlcm1pdCBhbmQgWm1vZGVtIHNvbWV0aW1lcyB0aGluayB0aGV5IGFyZSByZWNl aXZpbmcgYW4gaW52YWxpZAorY29tbWFuZCBsaW5lPyAgSWYgSSBjb3VsZCBjYXB0dXJlIHRoZSBn YXJiYWdlLi4uCisKK1NpZGUgdHJpcCAjMTogKCJwdHkubG9nIixPX1dST05MWSkgZ2l2ZXMgIm5v IHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiLgorQ2hhbmdlZCB0aGlzIHRvICgicHR5LmxvZyIsT19D UkVBVCwwNjQ0KSBhbmQgbm93IGl0IGRvZXNuJ3QgZ2V0IGFuIGVycm9yLAorYW5kIGl0IGNyZWF0 ZXMgdGhlIGZpbGUsIGJ1dCBub3Qgd2l0aCAwNjQ0IHBlcm1pc3Npb25zLCBhbmQgd2l0aCBub3Ro aW5nCit3cml0dGVuIGluIGl0LiAgSG93IGNvbWUgbm90aGluZyB3b3Jrcz8KKworRmluZSwgdGhl IGRlYnVnIGxvZyBzaG93cyB0aGF0IHR0cHR5Y21kKCkgcmVjZWl2ZXMgdGhlIGNvcnJlY3Qgc3Ry aW5nCisoZS5nLiAibHJ6IC12IikuICBJdCBwYXNzZXMgaXQgdG8gZG9fcHR5KCkgY29ycmVjdGx5 LCBhbmQgZG9fcHR5KCkgcGFzc2VzIGl0Cit0byBleGVjX2NtZCgpLCB3aGljaCBydW5zIGNrc3Bs aXQoKSBvbiBpdCwgY29taW5nIHVwIChpbiB0aGlzIGNhc2UpIHdpdGgKKyJscnoiIGFuZCAiLXYi LCB3aGljaCBpcyByaWdodCwgYW5kIHRoZW46CisKKyAgICBhcmdzID0gcS0+YV9oZWFkICsgMTsK KyAgICBleGVjdnAoYXJnc1swXSxhcmdzKTsKKworZXhlY3ZwKCkgd2FudHMgdGhlIGFyZ3MgYXJy YXkgdG8gaGF2ZSBhIG51bGwgZWxlbWVudCBhdCB0aGUgZW5kLiAgY2tzcGxpdCgpCitkb2VzIGlu ZGVlZCBkbyB0aGF0LCBvciBhdCBsZWFzdCB0aGUgY29kZSBpcyB0aGVyZS4gIEFkZGVkIGNvZGUg dG8gZXhlY19jbWQoKQordG8gdmVyaWZ5IHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGF0IGl0IGlz IG51bGwtdGVybWluYXRlZC4gIFNvIGZhciBpdCBpcy4KKworQW55d2F5LCB3ZSBoYXZlIHRyYWZm aWMgYmV0d2VlbiB0aGUgWm1vZGVtIHBhcnRuZXJzLCBidXQgbm8gam95LgorQ29tbWVudGluZyBv dXQgdGhlIGJpdCB0aGF0IHJlZGlyZWN0cyBzdGRlcnIsIG5vdyBJIGNhbiBzZWUgaXQgb24gbXkg c2NyZWVuCitpbiByZWFsIHRpbWU6CisKKyAgbHJ6IHdhaXRpbmcgdG8gcmVjZWl2ZS5SZXRyeSAw OiBCYWQgQ1JDCisgIFJldHJ5IDA6IEdvdCBFUlJPUgorICBSZXRyeSAwOiBUSU1FT1VUCisgIFJl dHJ5IDA6IFRJTUVPVVQKKyAgUmV0cnkgMDogVElNRU9VVAorICBSZXRyeSAwOiBUSU1FT1VUCisK K2V0YyBldGMsIGZvcmV2ZXIuICBUcnlpbmcgc3ogLWUgb24gdGhlIGZhciBlbmQsIEkgZ2V0Ogor CisgIFJldHJ5IDA6IEJhZCBDUkMKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAor ICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291 bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorICBSZXRyeSAw OiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVk ZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorICAuLi4KKyAgUmV0cnkgMDog R290IEVSUk9SCisgIFJldHJ5IDA6IEJhZCBDUkMKKyAgUmV0cnkgMDogR290IEVSUk9SCisgIFJl dHJ5IDA6IEdvdCBFUlJPUgorICBscno6IHh4dWZpby5jIHJlbW92ZWQuCisKK1NvIGFwcGFyZW50 bHkgaXQncyBub3QgYSBtYXR0ZXIgb2YgZXNjYXBpbmcuICBUcnlpbmcgc29tZSBvdGhlciBzdHVm ZiwgSQorY2F1Z2h0IHRoZSBjb21tYW5kLWxpbmUgcHJvYmxlbSBpbiB0aGUgYWN0OgorCisgIGxy ejogZ2FyYmFnZSBvbiBjb21tYW5kbGluZQorICBUcnkgYGxyeiAtLWhlbHAnIGZvciBtb3JlIGlu Zm9ybWF0aW9uLgorCitEZWJ1ZyBsb2cgc2hvd3M6CisKKyAgY2tzcGxpdCByZXN1bHRbbHJ6XT0x CisgIGNrc3BsaXQgcmVzdWx0Wy12XT0yCisgIGV4ZWNfY21kIGFyZ1tscnpdPTAKKyAgZXhlY19j bWQgYXJnWy12XT0xCisgIGV4ZWNfY21kIGFyZ1tdPTIKKworQW4gZW1wdHkgc3RyaW5nIGF0IHRo ZSBlbmQgaW5zdGVhZCBvZiBhIG51bGwgcG9pbnRlci4gIEkgcmVhbGx5IGRvIG5vdCBzZWUKK2Fu eSB3YXkgdGhhdCBjb3VsZCBoYXBwZW4sIGJ1dCByYXRoZXIgdGhhbiBkaWcgaW50byBja3NwbGl0 KCkgYWdhaW4gYWZ0ZXIKK2FsbCB0aGVzZSB5ZWFycyBJIGFkZGVkIGEgdGVzdCBmb3IgdGhpcyBp biBleGVjX2NtZCgpLCB3aGljaCwgb2YgY291cnNlCithZnRlciBhZGRpbmcgaXQsIG5ldmVyIGVu Y291bnRlcmVkIHRoaXMgYmVoYXZpb3IgYWdhaW4uCisKK0ZpZGRsZWQgd2l0aCBwdHkgYnVmZmVy IHNpemUgYWdhaW4uICBNYWRlIGl0IDUxMiBieXRlcyBpbnN0ZWFkIG9mIDI0Sy4KK1ptb2RlbSBk b3dubG9hZHMgYXJlIHRoZSBzYW1lIChSZXR5IDA6IFRJTUVPVVQsIG92ZXIgYW5kIG92ZXIpLiAg QnV0IEkgZG9uJ3QKK3NlZSB3aGF0IHRoZSBwcm9ibGVtIGlzIC0tIGV2ZXJ5IHRpbWUgd2UgcmVj ZWl2ZSBuIGJ5dGVzIGZyb20gdGhlIG5ldCwgd2UKK3dyaXRlIG4gYnl0ZXMgc3VjY2Vzc2Z1bGx5 IHRvIHRoZSBwdHkgYW5kIHRoZXJlIGFyZSBubyBlcnJvcnMuICBCdXQgaXQgYWxzbworbG9va3Mg bGlrZSB0aGUgcmVtb3RlIHNlbmRlciBpcyBzZW5kaW5nIHRoZSBmaWxlIGhlYWRlciBvdmVyIGFu ZCBvdmVyCitiZWNhdXNlIGl0J3Mgbm90IHJlY2VpdmluZyBhbiBhY2tub3dsZWRnbWVudC4gIElm IHdlJ3JlIG5vdCBsb3NpbmcgZGF0YSwKK3RoZW4gbWF5YmUgaXQncyBhIHRyYW5zcGFyZW5jeSBw cm9ibGVtLgorCitUcmllZCB1bmNvbW1lbnRpbmcgdGhlIFRJT0NibGFoIHN0dWZmIEkgY29tbWVu dGVkIG91dCBiZWZvcmUuICBOb3cgaW5zdGVhZAorb2Ygb25seSB0aW1lb3V0cyBJIGdldDoKKwor ICBscnogd2FpdGluZyB0byByZWNlaXZlLlJldHJ5IDA6IEJhZCBDUkMKKyAgUmV0cnkgMDogR290 IEVSUk9SCisgIFJldHJ5IDA6IEJhZCBDUkMKKyAgUmV0cnkgMDogR290IEVSUk9SCisgIFJldHJ5 IDA6IEJhZCBDUkMKKyAgUmV0cnkgMDogR290IEVSUk9SCisgIFJldHJ5IDA6IFRJTUVPVVQKKwor d2hpY2ggaXMgb2RkIGJlY2F1c2UgdGhlIFRJT0NSRU1PVEUgaW9jdGwgZmFpbGVkIHdpdGggZXJy bm8gMTQsIEVGQVVMVCwKK2JhZCBhZGRyZXNzLCB3aGljaCBzaG91bGQgaW5kaWNhdGUgaXQgaGFk IG5vIGVmZmVjdC4gIFdlJ3JlIHN0aWxsIHJlY2VpdmluZworZGF0YSBmcm9tIHRoZSByZW1vdGUg aW4gdGlueSBjaHVua3MgKGZyb20gMTIgdG8gNjUgYnl0ZXMpLCBhcHBhcmVudGx5IHRoZQorc2Ft ZSBzdHVmZiAoZmlsZSBoZWFkZXIpLCBhbmQgd3JpdGluZyB0aGVtIHRvIHRoZSBwdHkgc3VjY2Vz c2Z1bGx5IGJ1dAorbm90aGluZy4uLgorCitMb29rZWQgYXQgY2xvbmluZyB0dHBrdCgpIGZvciB0 aGUgcHR5LCBidXQgdGhlc2Ugc3R1cGlkIHJvdXRpbmVzIHVzZSBnbG9iYWwKK3R0eSBtb2RlIHN0 cnVjdHMgc28gaXQncyBub3QgZ29pbmcgdG8gYmUgZWFzeS4KKworV2VsbCwgd2UgZ290IGV4YWN0 bHkgbm93aGVyZSB0b2RheSwgYnV0IEkgdGhpbmsgSSdsbCBsZWF2ZSBzdGRlcnIgYXMgaXQgaXMK K3NvIHVzZXJzIHdpbGwgc2VlIHNvbWUgZmVlZGJhY2s7IG5vIHJlYXNvbiBub3QgdG8uCisKK1dI WSBETyBLRVJNSVQgRE9XTkxPQURTIFdPUksgQU5EIFpNT0RFTSBOT1Q/CisKK0lzIGl0IDgtYml0 IHRyYW5zcGFyZW5jeT8gIFVwIHRpbCBub3cgSSd2ZSBiZWVuIHRlc3Rpbmcgd2l0aCB0ZXh0IGZp bGVzLgorSWYgSSB0cnkgdG8gZG93bmxvYWQgYSBiaW5hcnkgd2hhdCBoYXBwZW5zPyAgRmFpbHMg YWZ0ZXIgOTkgc2Vjb25kcy4gIFBhY2tldAorbG9nIGZyb20gdGhlIGZhciBlbmQgc2hvd3MgdGhh dCBhcyBzb29uIGFzIHRoZSBmaXJzdCBwYWNrZXQgY29udGFpbmluZyA4LWJpdAorZGF0YSBpcyBz ZW50LCBldmVyeXRoaW5nIHN0b3BzLiAgQXQgbGVhc3QgSSBnb3Qgb25lIG9mIHRoZXNlOgorCisg IDE3OjIzOjU2LjQ3NSBleGVjX2NtZCBhcmdbZ2tlcm1pdF09MAorICAxNzoyMzo1Ni40NzUgZXhl Y19jbWQgYXJnWy1xcl09MQorICAxNzoyMzo1Ni40NzUgZXhlY19jbWQgYXJnW109MgorICAxNzoy Mzo1Ni40NzUgZXhlY19jbWQgU1VCU1RJVFVUSU5HIE5VTEw9MiAgPC0tIHRoZSBjb2RlIEkganVz dCBhZGRlZAorCitEb2luZyB0aGlzIGFnYWluIHNob3dzIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBu ZWFyIGVuZC4gIEFsbCB0aGUgNy1iaXQtb25seQorcGFja2V0cyBhcmUgc2VudCBhbmQgYWNrbm93 bGVkZ2VkIE9LLiAgVGhyZWUgOC1iaXQgZGF0YSBwYWNrZXRzIGFycml2ZSBhbmQKK25vdGhpbmcg ZWxzZSBoYXBwZW5zIGFmdGVyIHRoYXQuICBUaGlzIGlzIHdpdGggRy1LZXJtaXQuCisKK1RoZSBz YW1lIHRoaW5nIGhhcHBlbnMgd2l0aCBDLUtlcm1pdCByZWNlaXZpbmcuICBCdXQgaWYgSSBjaGFu Z2UgQy1LZXJtaXQncworLmtlcm1yYyB0byB0dXJuIG9mZiBzdHJlYW1pbmcgYW5kIHVzZSBhIHNo b3J0IHBhY2tldCBsZW5ndGg6CisKK1RoZSB0cmFuc2ZlciB3b3JrcywgZXZlbiB0aG91Z2ggaXQn cyBzZW5kaW5nIDgtYml0IGJ5dGVzLiAgU28gdGhlIHByb2JsZW0gaXMKK25vdCA4LWJpdCBkYXRh IGFmdGVyIGFsbCwgcGVyIHNlLiAgRmFjdHM6CisKKyAuIEtlcm1pdCBjYW4gcmVjZWl2ZSBzdHJl YW1pbmcgdHJhbnNmZXJzIG9mIDctYml0IGZpbGVzLgorIC4gS2VybWl0IGNhbiBub3QgcmVjZWl2 ZSBzdHJlYW1pbmcgdHJhbnNmZXJzIG9mIDgtYml0IGZpbGVzLgorIC4gS2VybWl0IGNhbiByZWNl aXZlIG5vbnN0cmVhbWluZyB0cmFuc2ZlcnMgb2YgOC1iaXQgZmlsZXMgd2l0aCBzaG9ydCBwYWNr ZXRzLgorIC4gS2VybWl0IGNhbiByZWNlaXZlIG5vbnN0cmVhbWluZyB0cmFuc2ZlcnMgb2YgOC1i aXQgZmlsZXMgd2l0aCAxSyBwYWNrZXRzLgorIC4gS2VybWl0IGNhbiByZWNlaXZlIG5vbnN0cmVh bWluZyB0cmFuc2ZlcnMgb2YgOC1iaXQgZmlsZXMgd2l0aCA0SyBwYWNrZXRzLgorCitTbyBpdCdz IHRoZSBjb21iaW5hdGlvbiBvZiBzdHJlYW1pbmcgYW5kIDgtYml0IGRhdGE/ICAxMiBKYW4gMjAw Ny4KKworQXMgYSB0ZXN0IEkgbWFkZSBhIG5ldyByb3V0aW5lIHB0eV9tYWtlX3JhdygpIHRoYXQg ZG9lcyBjZm1ha2VyYXcoKSAoYQorbm9ucG9ydGFibGUgIlBPU0lYLWxpa2UiIGZ1bmN0aW9uIGtu b3duIHRvIGJlIHVzZWQgb24gcHR5cyBpbiBhcHBsaWNhdGlvbnMKK3RoYXQgZG8gYXBwcm94aW1h dGVseSB3aGF0IHdlJ3JlIGF0dGVtcHRpbmcpLiAgUmVzdWx0czoKKworIFNvbGFyaXM6IGVycm5v IDI1IC0gaW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlLgorCitUaGlzIGhhcHBlbnMgZXZl biB3aGVuIHdlIHRyeSB0byBnZXQgdGhlIHRlcm1pbmFsIG1vZGVzIHdpdGggdGNnZXRhdHRyKCks Cit3aGljaCBpcyBjb21wbGV0ZWx5IG51dHMuICBXZSBwYXNzIGl0IHRoZSBmaWxlIGRlc2NyaXB0 b3Igb2YgdGhlIHB0eSBtYXN0ZXIsCit3aGljaCBpcyBzdXBwb3NlZCB0byB3b3JrLiAgQnV0IGlu IE1hYyBPUyBYLCB0aGVyZSBhcmUgbm8gZXJyb3JzLiAgQnV0Citkb3dubG9hZHMgc3RpbGwgZG9u J3Qgd29yazsgbG90cyBvZiBlcnJvcnMgYnV0IHRoZSBwYXR0ZXJuIGlzIGRpZmZlcmVudC4KK1Vz aW5nIGEgdmVyeSBzbWFsbCBidWZmZXI6CisKKyAgUmV0cnkgMDogQmFkIENSQworICBSZXRyeSAw OiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVk ZWQKKyAgUmV0cnkgMDogR290IFRJTUVPVVQKKyAgUmV0cnkgMDogVElNRU9VVAorICBSZXRyeSAw OiBCYWQgQ1JDCisgIFJldHJ5IDA6IEJhZCBDUkMKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBl eGNlZWRlZAorICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IFRJ TUVPVVQKKyAgUmV0cnkgMDogR290IEVSUk9SCisgIFJldHJ5IDA6IFRJTUVPVVQKKyAgUmV0cnkg MDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2Vl ZGVkCisgIFJldHJ5IDA6IEJhZCBDUkMKKworVXNpbmcgYSBiaWdnZXIgYnVmZmVyOgorCisgIFJl dHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBl eGNlZWRlZAorICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdh cmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAor ICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIChzZXZlcmFsIHNjcmVlbnNmdWwp CisKK1ZhcmlvdXMgb3RoZXIgY29tYmluYXRpb25zLi4uIE5vdGhpbmcgc2VlbXMgdG8gd29yay4K KworSW5zaWdodDogdGVsbmV0ZCBkb2VzIGV4YWN0bHkgd2hhdCB3ZSB3YW50IHRvIGRvLCBzb3J0 IG9mLgorQnV0IGl0IHVzZXMgVElPQ1BLVCwgc28gZXZlcnkgdGltZSBpdCByZWFkcyBmcm9tIHB0 eSwgaXQgcmVjZWl2ZXMKK29uZSBjb250cm9sIGJ5dGUgYW5kIHRoZW4gdGhlIGRhdGEgYnl0ZXMs IHdoaWNoIHdvdWxkIGNvbXBsaWNhdGUgb3VyCitidWZmZXJpbmcgc2NoZW1lIGNvbnNpZGVyYWJs eS4gIEFueXdheSB0aGUgVElPQ1BLVCBpb2N0bCgpIGZhaWxzIG9uCitNYWMgT1MgWCB3aXRoIDE0 ICJCYWQgYWRkcmVzcyIuCisKK0Fsc28gc2VlOiBzbm9vcHNlcnZlci5jIChmb3VuZCBpbiBHb29n bGUpLiAgSXQgc2VlbXMgdG8gZG8gdGhpbmdzIGluIGEKK3NsaWdodGx5IGRpZmZlcmVudCB3YXkg LS0gaXQgc2V0cyBzdGRvdXQgdG8gcmF3IGFuZCB0aGVuIGR1cHMgaXQgdG8gdGhlCitzbGF2ZSBz aWRlIG9mIHRoZSBwdHk/CisKK01heWJlIGl0J3MgYSBtaXN0YWtlIHRvIHVzZSB0aGUgY2t1cHR5 LmMgcm91dGluZXMuICBUaGV5IGFyZSBkZXNpZ25lZCBmb3IKK2NyZWF0aW5nIGFuZCBhY2Nlc3Np bmcgYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbi4gIE1heWJlIGp1c3QgY29weSBvbmUgb2YgdGhlCitv dGhlciBwcm9ncmFtcy4KKworMTggSmFuIDIwMDcuICBUcmllZCBnb2luZyBiYWNrIHRvIGJsb2Nr aW5nIHJhdGhlciB0aGFuIG5vbmJsb2NraW5nIHJlYWRzCit0byBzZWUgaWYgaXQgd291bGQgbWFr ZSBhIGRpZmZlcmVuY2UsIGFmdGVyIGFsbCB0aGUgb3RoZXIgY2hhbmdlcy4gIE5vcGUuCitPSywg bGV0J3MgbG9vayBhdCBzb21lIG9mIHRoZXNlIG90aGVyIHByb2dyYW1zLi4uCisKK3Nub29wc2Vy dmVyLmMuICBJIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IHRoaXMgaXMgb3Igd2hlcmUgaXQncyBm cm9tIG9yIHdoYXQKK3BsYXRmb3JtIGl0IHJ1bnMgb24gYW5kIHRoZXJlIGFyZSBubyBjb21tZW50 cyB0byBzcGVhayBvZiwgYnV0IGl0IGRvZXMKK2FwcHJveGltYXRlbHkgd2hhdCB0dHB0eWNtZCgp IGRvZXMuICBUbyBnZXQgYSBwdHkgaXQgdXNlcyBvcGVucHR5KCk6CisKKyAgaWYgKG9wZW5wdHko JnB0eSwgJnR0eSwgTlVMTCwgTlVMTCwgTlVMTCkgPT0gLTEpCisKK3RoZW4gY3JlYXRlcyBhIGZv cmsuICBJbiB0aGUgZm9yaywgaXQgY2xvc2VzIHRoZSBwdHkgKG1hc3RlcikgYW5kCittYW5pcHVs YXRlcyB0aGUgbW9kZXMgb2YgdGhlIHR0eSAoc2xhdmUpLCBkdXBzIHR0eSB0byBiZSBzdGRpbywg YW5kIHRoZW4KK2RvZXggZXhlY3YoKSBvbiB0aGUgY29tbWFuZC4gIE1lYW53aGlsZSB0aGUgdXBw ZXIgZm9yayBjbG9zZXMgdGhlIHR0eQorKHNsYXZlKSwgZ2V0cyB0aGUgYXR0cmlidXRlcyBvZiBz dGRpbiwgdXNpbmcgYXRleGl0KCkgdG8gaGF2ZSB0aGVtCithdXRvbWF0aWNhbGx5IHJlc3RvcmVk IG9uIGV4aXQuICBUaGVuIGl0IHNldHMgc3RkaW4gdG8gcmF3IG1vZGUgYW5kIGVudGVycwordGhl IHNlbGVjdCgpIGxvb3Agb24gc3RkaW4sIHRoZSBwdHkgbWFzdGVyLCBhbmQgdGhlIG5ldC4gIEl0 IHVzZXMgcmVndWxhcgorYmxvY2tpbmcgcmVhZHMuICBJdCBkb2VzIG5vdCB1c2UgVElPQ1BLVCBv ciBhbnl0aGluZyBsaWtlIGl0LgorCitvcGVucHR5KCkgaXMgc3VwcG9ydGVkIG9uOiBMaW51eCwg TWFjIE9TIFgsIE5ldEJTRCwgRnJlZUJTRCwgLi4uCitvcGVucHR5KCkgaXMgTk9UIHN1cHBvcnRl ZCBvbjogU29sYXJpcywgSFAtVVgsIC4uLgorCisgMS4gVHJ5IGNvcHlpbmcgdGhlIHB0eSBjb2Rl LCBidXQga2VlcCBldmVyeXRoaW5nIGVsc2UgdGhlIHNhbWUuCisKK0kgZGlkIHRoaXM7IGl0IGNv bXBpbGVzIGFuZCBzdGFydHMgT0ssIHVwcGVyIGZvcmsgKHR0cHR5Y21kKSBkZWJ1ZyBsb2cgc2hv d3MKK25vIGVycm9ycywgYnV0IG5vdGhpbmcgaGFwcGVucy4gIExvZ3Mgc2hvdyB0aGF0IHRoZSBL ZXJtaXQgcHJvZ3JhbSB0aGF0IGlzCitzdGFydGVkIGluIHRoZSBzdWJmb3JrIHNlZW1zIHRvIGRp ZSBhcyBzb29uIGFzIGl0IHJlYWNoZXMgZW9mIG9uIGl0cyBpbml0CitmaWxlLiAgVGhlIGdvb2Qg bmV3cywgYXQgbGVhc3QsIGlzIHRoYXQgc2VsZWN0KCkgZG9lc24ndCByZXBvcnQgcmVwb3J0IHRo YXQKK3RoZSBwdHkgaXMgcmVhZHkgdG8gYmUgcmVhZC4gIENsZWFybHkgdGhlIGZpbGUgZGVzY3Jp cHRvcnMgYXJlbid0IGJlaW5nCithc3NpZ25lZCBhcyBleHBlY3RlZCwgb3IgYXMgYmVmb3JlLgor ICAKK0luIGNrdXB0eS5jIGdldHB0eXNsYXZlKCkgZHVwMidzIHRoZSBzbGF2ZSBmZCB0byAwIGFu ZCAxLiAgVGhlIG5ldyBjb2RlCitkb2VzIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcuICBEZWJ1ZyBs b2cgbWFrZXMgaXQgbG9vayBsaWtlIHRoZSBmb3JrZWQga2VybWl0CitpcyBub3QgcmVjZWl2aW5n IGl0cyBjb21tYW5kIGxpbmUuICBCdXQgbm93IEknbSBub3QgZXZlbiBzdXJlIHRoYXQgdGhlCitm b3JrZWQga2VybWl0IHN0YXJ0ZWQgYXQgYWxsLiAgcHMgZnJvbSBhbm90aGVyIHRlcm1pbmFsIGRv ZXNuJ3Qgc2hvdyBpdC4KKworMTkgSmFuIDIwMDc6IE5vdGljZWQgdGhhdCBpbiBzbm9vcHNlcnZl ciwgdGhlIHNlbGVjdCgpIGNhbGxzIHVzZSBzdGFuZGFyZAoraW5wdXQgYW5kIG91dHB1dCBmaWxl IGRlc2NyaXB0b3JzLCByYXRoZXIgdGhhbiB0aGUgcHR5IG1hc3Rlci4gIE1hZGUgdGhhdAorY2hh bmdlLi4uICBJbiBkb2luZyB0aGF0IEkgaGFkIHRvIGxvb2sgYXQgZXZlcnkgZmlsZSBkZXNjcmlw dG9yIGluIGV2ZXJ5CitsaW5lIG9mIGNvZGUgYW5kIGRpc2NvdmVyZWQgYSBjb3VwbGUgbWlzdGFr ZXMsIGZpeGVkIHRoZW0sIHB1dCBiYWNrIHRoZQorb3JpZ2luYWwgY29kZSBidXQgd2l0aCB0aGUg Zml4ZXMsIHRyaWVkIGl0LCBidXQgbm8gY2hhbmdlOyBjYW4gdXBsb2FkIE9LIGJ1dAorc3RpbGwg Y2FuJ3QgZG93bmxvYWQgd2l0aCBabW9kZW0gd2l0aG91dCBsb3RzIG9mIGVycm9ycyBhbmQgdWx0 aW1hdGUKK2ZhaWx1cmUuICBHb2luZyBiYWNrIHRvIHRoZSBhbHRlcm5hdGl2ZSB2ZXJzaW9uIGFu ZCB0cnlpbmcgdG8gZ2V0IHRoZSB0aGUKK2ZpbGUgZGVzY3JpcHRvcnMgc29ydGVkIG91dCwgbm93 IGl0IGFwcGVhcnMgdGhhdCB0aGUgZXh0ZXJuYWwgS2VybWl0IHByb2dyYW0KK25ldmVyIGV2ZW4g c3RhcnRzIGluIHRoZSBsb3dlciBmb3JrLiAgQWZ0ZXIgYSBiaXQgbW9yZSBmaWRkbGluZyBJIHNv cnQgdGhhdAorb3V0LCBidXQgbm93IHdoZW4gdGhlIGxvd2VyIEtlcm1pdCBwcm9ncmFtIGdvZXMg dG8gb3BlbiAiL2Rldi90dHkiIGl0IGdldHMKK2Vycm5vIDYgIkRldmljZSBub3QgY29uZmlndXJl ZCIuICBGb3JjaW5nIGl0IHRvIHVzZSBzdGRpbyB3aXRoICItbCAwIiwgaXQKK2dldHMgcGFzdCB0 aGlzIGFuZCBhY3R1YWxseSBzZW5kcyBpdHMgZmlyc3QgcGFja2V0LiAgQnV0IHRoZSBLZXJtaXQg b24gdG9wCityZWFkcyBub3RoaW5nIGZyb20gdGhlIHB0eS4KKworTmV4dCwgSSBjaGFuZ2UgdGhl IHB0eSBmZCBmcm9tIFNURElOX0ZJTEVOTyBhbmQgU1RET1VUX0ZJTEVOTyB0byBzbGF2ZWZkLgor Tm8gZGlmZmVyZW5jZS4gIE5leHQgSSBjb21tZW50IG91dCB0aGUgZHVwMigpIGNhbGxzLiAgVGhp cyB0aW1lIEkgZ2V0IHNvbWUKK2FjdGlvbi4gIFRoZSB0cmFuc2ZlciBzdGFydHMsIGJ1dCBvbmx5 IG9uZSBwYWNrZXQgY29tZXMuICBMb2cgc2hvd3MgdGhhdAordGhlIGxvd2VyIEtlcm1pdCBzZW5k cyBpdHMgUyBwYWNrZXQuICBUaGUgdXBwZXIgS2VybWl0IHJlY2VpdmVzIHRoZSBBQ0sKK2J1dCB0 aGUgbG93ZXIgS2VybWl0IG5ldmVyIGdldHMgaXQuICBUaGUgd3JpdGUgdG8gdGhlIHB0eSBzdWNj ZWVkcywgbm8KK2Vycm9yLiAgRGlmZmVyZW50IGNvbWJpbmF0aW9ucyBnaXZlIGRpZmZlcmVudCBy ZXN1bHRzLiAgSWYgd3JpdGUgdG8gbWFzdGVyCithbmQgcmVhZCBmcm9tIHRoZSBzbGF2ZSwgSSBn ZXQgcGFja2V0cyBpbiBib3RoIGRpcmVjdGlvbnMgYnV0IHRvbnMgb2YKK2Vycm9ycy4uLi4gIFRo aXMgaGFwcGVucyBvbmx5IGlmIEkgY29tbWVudCBvdXQgdGhlIGR1cDIoKSdzLgorCisyNSBKYW4g MjAwNzogQWZ0ZXIgbGVhdmluZyBpdCBzaXQgZm9yIGEgd2hpbGUsIGFuZCByZWFsaXppbmcgdGhh dCB3aGF0IEknbQordHJ5aW5nIHRvIGRvIGhhcyB0byBiZSBwb3NzaWJsZSBiZWNhdXNlIHNvIG11 Y2ggb3RoZXIgc29mdHdhcmUgZG9lcyB0aGUgc2FtZQordGhpbmcgKGUuZy4gVGVsbmV0IHNlcnZl cnMpLCBJIHB1dCB0aGluZ3MgYmFjayB0byBob3cgdGhleSB3ZXJlIG9yaWdpbmFsbHkKKy0tIHRo ZSB1cHBlciBmb3JrIChLZXJtaXQpIHVzZXMgdGhlIG1hc3RlciBhbmQgdGhlIGxvd2VyIGZvcmsg dGhlIHNsYXZlLgorVGhlIHVwcGVyIGZvcmsgcHV0cyB0aGUgbWFzdGVyIGluIHJhdyBtb2RlLCB0 aGUgbG93ZXIgZm9yayBwdXRzIHRoZSBzbGF2ZSBpbgorcmF3IG1vZGUuICBUaGUgbG93ZXIgZm9y ayBkdXAyJ3MgdGhlIHNsYXZlIGZkIHRvIHN0ZGluL291dC4gIFNlbmQgZmlsZSBpbgorcmVtb3Rl IG1vZGUgdXNpbmcgZXh0ZXJuYWwgS2VybWl0OiB3b3JrcyBPSyBidXQgc2VsZWN0KCkgdGltZXMg b3V0IGF0IHRoZQorZW5kLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBzZWxmLWNvbnRhaW5lZCBwdHkg Y29kZSBpbiB0dHB0eWNtZCgpIGlzIHNvcnRlZAorb3V0IC0tIGFsbCB0aGUgZmlsZSBkZXNjcmlw dG9ycyBnbyB0byB0aGUgcmlnaHQgcGxhY2UsIGV0YywgYW5kIG5vdyB3ZSBjYW4KK3VzZSB0aGlz IHJvdXRpbmUgYXMgYSB0ZXN0YmVkLCByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgY2t1cHR5LmMt YmFzZWQgb25lLgorCitCdXQgc2VuZCB3aXRoIGxzeiwgY3N6LCBhbmQgcmVndWxhciByejogTm90 aGluZyBoYXBwZW5zLCB0aW1lcyBvdXQgYWZ0ZXIgMAorYnl0ZXMgb2YgaS9vLiAgT25jZSBhZ2Fp biwgS2VybWl0IHdvcmtzLCBabW9kZW0gZG9lc24ndC4gIFRoZSByZWFzb24gZm9yCitydW5uaW5n IFptb2RlbSBpbiBhIHB0eSBpcyBzbyBpdHMgaS9vIHdpbGwgd29yayBhcyBpdCBkb2VzIG9uIGEg dGVybWluYWwsCitubyBtYXR0ZXIgaG93IGl0IG1heSBmaWRkbGUgdGhlIGZpbGUgZGVzY3JpcHRv cnMuICBTbyB3aHkgZG9uJ3Qgd2Ugc2VlIGEKK3NpbmdsZSBieXRlIGNvbWUgb3V0PworCitDb21t ZW50aW5nIG91dCBwdHlfbWFrZV9yYXcoKSwgSSBnZXQgYSBzdWNjZXNzZnVsIFptb2RlbSBzZW5k IHVzaW5nIGxzei4KK2NzeiBtYW5hZ2VzIHRvIGdldCB0aGUgZmlsZW5hbWUgYWNyb3NzLCBidXQg dGhlbiBnZXRzIHN0dWNrLiAgcmVndWxhciBzeiwgb24KK3RoZSBvdGhlciBoYW5kLCB3b3JrcyBw ZXJmZWN0bHkuICBUZXN0aW5nIGNzeiBieSBpdHNlbGYgKG5vdCB1bmRlciBLZXJtaXQpLAorSSBz ZWUgaXQgZmFpbHMgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgKCJHb3QgcGhvbnkgWkVPRiIsIGV0 YykuICBPSywgZm9yZ2V0Citjcnpzei4KKworT0ssIGxldCdzIG1vdmUgdG8gbG9jYWwgbW9kZSBv dmVyIGEgS2VyYmVyaXplZCBUZWxuZXQgY29ubmVjdGlvbi4uLgorVXBsb2FkaW5nIChzZW5kaW5n KSB3aXRoIGV4dGVybmFsIEtlcm1pdCBwcm90b2NvbC4uLiB3b3Jrcy4KK0Rvd25sb2FkaW5nIChy ZWNlaXZpbmcpIHdpdGggZXh0ZXJuYWwgS2VybWl0IHByb3RvY29sLi4uIHdvcmtzLgorVXBsb2Fk aW5nIHdpdGggc3ouLi4gd29ya3MuCitEb3dubG9hZGluZyB3aXRoIGxyei4uLiAgR2V0cyB0b25z IG9mIGVycm9ycyBhbmQgZmFpbHMuCisKK1J1bm5pbmcgcHR5X21ha2VfcmF3KCkgb24gdGhlIHNs YXZlIGJ1dCBub3Qgb24gdGhlIG1hc3Rlcjogbm8gZGlmZmVyZW5jZS4KK1J1bm5pbmcgcHR5X21h a2VfcmF3KCkgb24gdGhlIG1hc3RlciBidXQgbm90IG9uIHRoZSBzbGF2ZTogbm8gZGlmZmVyZW5j ZS4KKworQmFjayB3aGVyZSB3ZSBzdGFydGVkLi4uICBFaXRoZXI6CisKKyAuIFptb2RlbSBpcyBv dmVyZHJpdmluZyB0aGUgcHR5LCBubyBtYXR0ZXIgd2hhdCBtb2RlcyB3ZSBwdXQgaXQgaW4uICAK KyAuIEl0J3MgYSB0cmFuc3BhcmVuY3kgcHJvYmxlbS4KKworVGhlb3JldGljYWxseSB3ZSBzaG91 bGQgYmUgYWJsZSB0byB0ZXN0IHRoZXNlIGJ5IHVzaW5nIGRpZmZlcmVudCBzeiBzd2l0Y2hlczoK KyAgLXE6ICAgIHF1aWV0IChzaG91bGQgYWx3YXlzIHVzZSB0aGlzKQorICAtZTogICAgZXNjYXBl IGFsbCBjb250cm9sIGNoYXJhY3RlcnMKKyAgLUIgbjogIEJ1ZmZlciBuIGJ5dGVzIChyYXRoZXIg dGhhbiB3aG9sZSBmaWxlKQorICAtTCBuOiAgUGFja2V0IGxlbmd0aAorICAtbCBuOiAgRnJhbWUg bGVuZ3RoICg+PSBwYWNrZXQgbGVuZ3RoKQorICAtdyBuOiAgV2luZG93IHNpemUKKyAgLTQ6ICAg IDRLIGJsb2Nrc2l6ZSAoZG9lc24ndCBoZWxwKQorCistcSBieSBpdHNlbGYgZG9lc24ndCBoZWxw LgorLXEgLWUsIHRoaXMgb25lIHdvcmtlZCBidXQgc3RpbGwgZ290IGFib3V0IDEwMCBlcnJvcnMg YW5kIHdhcyB2ZXJ5IHNsb3cuCistcSAtZSAtbCAyMDAgLUwgMTAwLCBmYWlsZWQgZmFzdCBhbmQg YmFkLgorLXEgLWUgLXcgMS4gIEZhaWxlZCBxdWlja2x5LgorLXEgLWUgLXcgMSAtQiAxMDAuICBF dmVudHVhbGx5IGZhaWxlZC4KKy1xIC13IDEsIEV2ZW50dWFsbHkgZmFpbGVkLgorLXEgLWwgMTAy NCwgdGhpcyBnZXRzIG11Y2ggbW9yZSBlcnJvcnMsIGRlZmluaXRlbHkgbmVlZCAtZS4KKy1xIC1l IC1sIDEwMjQsIGdvdCBwcmV0dHkgZmFyIGJlZm9yZSBmYWlsaW5nLgorLXEgLWUgLXcgMSAtbCAx MDI0LCBhbHNvIGdvdCBwcmV0dHkgZmFyIGJlZm9yZSBmYWlsaW5nLgorLXEgLWUsIHRoaXMgb25l IGdvdCBmYXJ0aGVzdCBvZiBhbGwsIGFib3V0IDQ4SywgYmVmb3JlIGdldHRpbmcgZXJyb3JzLgor CitJbiB0aGUgbGF0dGVyIGNvbWJpbmF0aW9ucyB0aGF0IHdvcmsgc29tZXdoYXQgYmV0dGVyLCB3 ZSBhbHdheXMgZ2V0IHVwIHRvCisxNkssIG9yIDMySywgb3IgNDhLLCBiZWZvcmUgdGhlIGVycm9y cyBzdGFydCBjb21pbmcgb3V0IGFuZCBwaWxpbmcgdXAuCitTb21ldGltZXMgdGhlIGVycm9ycyBh cmUgcmVjb3ZlcmFibGUgYW5kIHdlIHJlY2VpdmUgYXMgbXVjaCBhcyAzMDBLCitzdWNjZXNzZnVs bHkgYmVmb3JlIGdpdmluZyB1cC4KKworTm93IHRoYXQgd2UgaGF2ZSBkYXRhIGZsb3dpbmcgcHJl dHR5IHdlbGwgKGJ1dCBub3Qgd2VsbCBlbm91Z2gpLCB0cmllZAorcmVpbnN0YXRpbmcgcHR5X21h a2VfcmF3KCksIGJ1dCBpdCBodXJ0IG1vcmUgdGhhbiBoZWxwZWQuCisKK0FzIGEgc2FuaXR5IGNo ZWNrLCBJIHRyaWVkIHRyYW5zZmVycmluZyBmcm9tIHRoZSBzYW1lIGhvc3Qgb3ZlciB0aGUgc2Ft ZQora2luZCBvZiBjb25uZWN0aW9uIChLZXJiZXJpemVkIFRlbG5ldCkgZGlyZWN0bHkgdG8gSzk1 J3MgYnVpbHQtaW4gWm1vZGVtCitwcm90b2NvbCwgYW5kIHRoYXQgd29ya2VkIGZpbmUuICBTbyB0 aGUgcHJvYmxlbSBpcyBkZWZpbml0ZWx5IGluIHRoZSBwdHkuCitPciBtb3JlIHByZWNpc2VseSwg d2hlcmUgS2VybWl0IHdyaXRlcyBpbmNvbWluZyBuZXQgZGF0YSB0byB0aGUgcHR5IG1hc3Rlci4K KworMjYgSmFuIDIwMDc6IFRyaWVkIGNoYW5naW5nIHRoZSBzaXplIG9mIHRoZSBuZXQtdG8tcHR5 IGJ1ZmZlciBmcm9tIDI0SyB0bworMUsuICBSZXN1bHQ6IHRvdGFsIGZhaWx1cmUuICBTZXQgYm90 aCBidWZmZXJzIHRvIDFLLiAgU3RpbGwgdG90YWwgZmFpbHVyZS4KK1NldCBib3RoIHRvIDRLOiBu b3cgd2UgZ2V0IGFib3V0IDQ1SyBvZiBkYXRhLCB0aGVuIGZhaWx1cmUuICBQdXQgdGhlbSBib3Ro CitiYWNrIHRvIDI0Sywgc3RpbGwgZmFpbHMgdG90YWxseSAtLSB0aGUgc2FtZSBjb2RlIHRoYXQg d29ya2VkIHByZXR0eSB3ZWxsCit5ZXN0ZXJkYXkuICBBY3R1YWxseSwgbm8gZG93bmxvYWRzIHdv cmssIG5vdCBldmVuIEtlcm1pdCwgbm90IGV2ZW4gb2YKK3RleHQgZmlsZXMuCisKKzI3IEphbiAy MDA3OiBTaW5jZSBJIGhhdmUgbm90IGJlZW4gYWJsZSB0byBmaW5kIGEgd2F5IHRvIG1ha2UgcHR5 cyB3b3JrIGZvcgordGhpcywgSSBtYWRlIGEgdGhpcmQgY29weSBvZiB0aGlzIHJvdXRpbmUsIHRo aXMgdGltZSB1c2luZyBwaXBlcyBpbnN0ZWFkIG9mCitwdHlzLiAgVGhlIGRpc2FkdmFudGFnZSBo ZXJlIGlzIHRoYXQgaWYgdGhlIGV4dGVybmFsIHByb3RvY29sIGRvZXMgbm90IHVzZQorc3RkaW8s IHRoZSBwaXBlcyB3b24ndCB3b3JrLCBidXQgb25lIHRoaW5nIGEgdGltZS4uLgorCitJbmZlcmlv ciBLZXJtaXQgc3RhcnRzIGluIGxvd2VyIGZvcmssIGJ1dCB3aGVuIGl0IHRyaWVzIHRvIHNlbmQg aXRzIGZpcnN0CitwYWNrZXQgaXQgZ2V0cyBlcnJubz05IEVCQURGLCBCYWQgRmlsZSBEZXNjcmlw dG9yLiAgU3Vic3RpdHV0aW5nIEctS2VybWl0IGFzCit0aGUgZXh0ZXJuYWwgcHJvdG9jb2wsIHdo aWNoIGlzIHNpbXBsZXIsIHJldmVhbHMgdGhhdCB0aGUgcHJvYmxlbSBpcyB0aGF0Cit0aGUgZXh0 ZXJuYWwgcHJvdG9jb2wgZ2V0cyBlcnJvcnMgd2hlbiBpdCB0cmllcyB0byBtYW5pcHVsYXRlIHRo ZSBpdHMgc3RkaW8KK2ZpbGUgZGVzY3JpcHRvcnMgd2l0aCBpb2N0bHMsIGV0YzsgdGhlc2UgYXJl IG5vdCB2YWxpZCBmb3IgYSBwaXBlLiAgVGhlIHBpcGUKK21lY2hhbmlzbSBpdHNlbGYgd29ya3Mu ICBJZiBJIHRha2Ugb3V0IHRoZSB0ZXN0IGZvciB0dHBrdCgpIGZhaWxpbmcgaW4KK2drZXJtaXQs IHRoZSBmaWxlIHRyYW5zZmVyIHdvcmtzIE9LLiAgVHJ5aW5nIFptb2RlbS4uLiBTZW5kaW5nIHdv cmtzIE9LOworcmVjZWl2aW5nIHdvcmtzIGEgbG90IGJldHRlciB0aGFuIHdpdGggcHR5cyAoaXQg Z290IDM2MEsgaW50byB0aGUgZmlsZQorYmVmb3JlIGZhaWxpbmcpLiAgTWFraW5nIHRoZSBidWZm ZXJzIHNtYWxsZXIsIGRvZXNuJ3QgaGVscC4KKworSSdtIHN0YXJ0aW5nIHRvIHdvbmRlciBpZiB0 aGUgcHJvYmxlbSBtaWdodCBiZSBpbiBteSBidWZmZXJpbmcgY29kZSwgcmF0aGVyCit0aGFuIGlu IHRoZSBwdHkgb3IgcGlwZSBpbnRlcmZhY2UuLi4gIFRyeSBtYWtpbmcgYSB2ZXJzaW9uIHRoYXQg ZG9lcworc2luZ2xlLWNoYXJhY3RlciByZWFkcyBhbmQgd3JpdGVzLgorCitUaGlzIG9uZSByZWFk cyB0aGUgZmlyc3QgcGFja2V0IGZyb20gdGhlIGxvd2VyIEtlcm1pdCBhbmQgc2VuZHMgaXQuICBJ dCBpcworcmVjb2duaXplZCBieSB0aGUgb3RoZXIgS2VybWl0LCB3aGljaCBzZW5kcyBhbiBBQ0su ICBXZSBzZWUgdGhlIF5BIG9mIHRoZQorQUNLLCBidXQgdGhlbiBzZWxlY3QoKSB0aW1lcyBvdXQg b24gdGhlIG5leHQgY2hhcmFjdGVyIC0tIE9GIENPVVJTRTogYmVjYXVzZQorYXQgYSBsb3dlciBs ZXZlbCwgaXQgaGFzIGFscmVhZHkgYmVlbiByZWFkLiAgV2UgaGF2ZSB0byBjaGVjayB0aGUgbXly ZWFkCitidWZmZXIsIGFuZCB0aGVuIGNhbGwgc2VsZWN0KCkgb25seSBpZiBpdCdzIGVtcHR5LiAg TWFraW5nIHRoaXMgY2hhbmdlOgorCisgLiBTRU5EIHdpdGggRy1LZXJtaXQgd29ya3MgKGJ1dCB2 ZXJ5IHNsb3dseSkuCisgLiBTRU5EIHdpdGggbHN6IHdvcmtzIGJ1dCBnZXRzIGEgbG90IG9mIGVy cm9ycywgZXZlbnR1YWxseSBzdWNjZWVkcy4KKworTGV0J3Mgd29yayBvdXIgd2F5IGJhY2suLi4g IFdpdGggdGhlIHNhbWUgY2hhbmdlcyB0byB0aGUgYnVmZmVyZWQgcGlwZSB2ZXJzaW9uOgorCisg LiBTRU5EIHdpdGggRy1LZXJtaXQvc3RyZWFtaW5nIHdvcmtzIChmYXN0KS4KKyAuIFNFTkQgd2l0 aCBsc3ogd29ya3MgdG9vIChmYXN0KSwgYnV0IHdlIGdldCBndWJiaXNoIGF0IHRoZSBlbmQuCisg LiBSRUNFSVZFIHdpdGggS2VybWl0IGZhaWxzIGJlY2F1c2UgIi9kZXYvdHR5IGlzIG5vdCBhIHRl cm1pbmFsIGRldmljZSIuCisgLiBSRUNFSVZFIHdpdGggcnN6Li4uIGxvdHMgb2YgZXJyb3JzICgi Z2FyYmFnZSBjb3VudCBleGNlZWRlZCIpIGJ1dCBzdWNjZWVkZWQuCisKK0J1dCBtYXliZSBub3cg d2UncmUgc2VlaW5nIHBpcGUgYXJ0aWZhY3RzLCBzbyBnb2luZyBiYWNrIG9uZSBtb3JlIHN0ZXAg dG8KK3RoZSB2ZXJzaW9uIHRoYXQgZ2V0cyBpdHMgb3duIHB0eSBhbmQgc3RhcnRzIGl0cyBvd24g Zm9yazoKKworIC4gU0VORCB3aXRoIEctS2VybWl0L1N0cmVhbWluZyB3b3JrcyAoZmFzdCkgYnV0 IHNlbGVjdCgpIHRpbWVzIG91dCBhdCB0aGUgZW5kLgorCitBbm90aGVyIGJyZWFrdGhyb3VnaDog TW92ZWQgdGhlIHdyaXRlIHBpZWNlcyB0byBiZWxvdyB0aGUgcmVhZCBwaWVjZXMuICBUaGlzCitp cyB3aGF0IHdhcyBwcmV2ZW50aW5nIHRoZSBidWZmZXIgcmVzZXQgY29kZSBmcm9tIHdvcmtpbmcg LS0gd2l0aCB0aGUgd3JpdGVzCitkb25lIGJlZm9yZSB0aGUgcmVhZHMsIHdlIG5ldmVyIGNhdGNo IHVwIGFuZCBjYW4gbmV2ZXIgcmVzZXQgdGhlIGJ1ZmZlcnMuCisKKyAuIFNFTkQgd2l0aCBHLUtl cm1pdC9zdHJlYW1pbmcgd29ya3MgKGZhc3QpIChidXQgdGhlcmUncyBhIHBhdXNlIGF0IHRoZSBl bmQpCisgLiBTRU5EIHdpdGggbHN6IHdvcmtzIChmYXN0KSAoYnV0IHRoZXJlJ3MgYSBwYXVzZSBh dCB0aGUgZW5kKQorIC4gUkVDRUlWRSB3aXRoIHJzei4uLiBsb3RzIG9mIGVycm9ycyAoImdhcmJh Z2UgY291bnQgZXhjZWVkZWQiKSBhbmQgZmFpbHMuCisgLiBSRUNFSVZFIHdpdGggS2VybWl0IC0t IG5vdGhpbmcgaGFwcGVucyAoaXQgdGhpbmtzIGl0IHN1Y2NlZWRlZCksIHRoZW4gd2UKKyAgICAg cmVjb25uZWN0LCB0ZXJtaW5hbCBzZWVzIFMgcGFja2V0IGFuZCBnb2VzIGludG8gYXV0b2Rvd25s b2FkCisKK0Zyb20gdGhlIGxvZyBpdCBsb29rcyBsaWtlIHR0cGt0KCkgZmFpbHMgaW4gdGhlIGxv d2VyIEtlcm1pdC4gIFN3aXRjaGluZwordGhpcyB3aXRoIHRoZSBoYWNrZWQgRy1LZXJtaXQuLi4g IGl0IGdldHMgInRyYW5zbWlzc2lvbiBlcnJvciBvbiByZWxpYWJsZQorbGluayIuICBUcmllZCBh Z2FpbiB3aXRoIHJlYWwgS2VybWl0IGJlbG93LCB0aGlzIHRpbWUgd2l0aCAiLWwgMCIgYW5kIG5v dAorc3RyZWFtaW5nLiAgVGhpcyB3YXMgYWN0dWFsbHkgd29ya2luZywgYnV0IHNsb3dseSwgSSBk b24ndCBzZWUgYW55IE5BS3MgaW4KK3RoZSBwYWNrZXQgbG9nLCBidXQgdGhlbiBzZWxlY3QoKSB0 aW1lZCBvdXQuCisKKzI4IEphbiAyMDA3OiBSZXN0b3JlZCBib3RoIHRoZSBjYWxscyB0byBwdHlf bWFrZV9yYXcoKToKKworIC4gU0VORCB3aXRoIEMtS2VybWl0IHN0cmVhbWluZyB3b3JrcywgYnV0 IHNsb3cgKDU0S2NwcykKKyAuIERpdHRvLCBidXQgd2l0aCBkZWJ1Z2dpbmcgb2ZmIC0tIGhhbmdz IGZvcmV2ZXIuCisgLiBEaXR0bywgYnV0IHVzaW5nIEctS2VybWl0IGluc3RlYWQgb2YgQy1LZXJt aXQgLS0gYWxzbyBoYW5ncyBmb3JldmVyLgorCitCYWNrZWQgb2ZmIG9uIGNhbGxpbmcgcHR5X21h a2VfcmF3KCkuICBTYW1lIHRoaW5nLgorUmVkdWNlZCBzaXplIG9mIG5ldC10by1wdHkgYnVmZmVy LiAgU2FtZSB0aGluZy4KKworMTUgRmViIDIwMDcuLi4gIERlY2lkZWQgdG8gZ2l2ZSB1cCBvbiB0 aGlzIGFuZCBwdWJsaXNoIGl0IGFzIGlzLCBpbiBob3BlcwordGhhdCBzb21lYm9keSB3aXRoIG1v cmUgZXhwZXJpZW5jZSB3aXRoIHB0eXMgY2FuIG1ha2UgaXQgd29yaywgYmVjYXVzZSBJJ20KK2p1 c3QgZ29pbmcgaW4gY2lyY2xlcy4gIFNvIHRvZGF5IEkganVzdCBoYXZlIHRvIGdldCB0aGUgY29k ZSBpbnRvIHNoYXBlIHNvCitwZW9wbGUgY291bGQgY2hvb3NlIGFtb25nIHRoZSB0aHJlZSBhbHRl cm5hdGl2ZSByb3V0aW5lcy4gIFRoZSBzZWNvbmQgb25lLAoreXR0eXB0eWNtZCgpLCBpcyB0aGUg b25lIHRoYXQgdXNlcyBvcGVucHR5KCksIHdoaWNoIGlzIG5vdCBwb3J0YWJsZSwgc28gaXQKK2Nh biBiZSBlbmFibGVkIG9ubHkgZm9yIE1hYyBPUyBYLCBOZXRCU0QsIEZyZWVCU0QsIGFuZCBMaW51 eCwgb3IgYnkgYWxzbworZGVmaW5pbmcgSEFWRV9PUEVOUFRZIGF0IGNvbXBpbGUgdGltZS4gIEFu eXdheSwgaWYgeW91IGJ1aWxkIEtlcm1pdCBpbiB0aGUKK25vcm1hbCB3YXksIHlvdSBnZXQgdGhl IHJlZ3VsYXIgYmVoYXZpb3IgLS0gdHRydW5jbWQoKSBpcyB1c2VkIHRvIGV4ZWN1dGUKK2V4dGVy bmFsIHByb3RvY29scy4gIElmIHlvdSBidWlsZCBpdCB3aXRoIC1EWFRUUFRZQ01ELCB5b3UgZ2V0 IHRoZSBmaXJzdAordmVyc2lvbiBvZiB0dHB0eWNtZCgpOyB3aXRoIC1EWVRUUFRZQ01EIHRoZSBz ZWNvbmQsIGFuZCB3aXRoIC1EWlRUUFRZQ01EIHRoZQordGhpcmQuCisKKyhUaGVuIHNvbWUgaW50 ZXJydXB0aW9ucywgdGhlbi4uLikKKworRnJvbSBKZWZmLCBmaXggaG9zdG5hbWUgY29tcGFyaXNv biBpbiBYLjUwOSBjZXJ0aWZpY2F0ZSBjaGVja2luZyB0byB3b3JrCityaWdodCBpbiB0aGUgY2Fz ZSBvZiBuYW1lcyB0aGF0IGNvbnRhaW4gbm8gcGVyaW9kcy4gIGROU05hbWVfY21wKCk6IGNsX3Nz bC5jLAorMjEgRmViIDIwMDcuCisKK0pvaG4gRHVubGFwIG5vdGljZWQgc29tZSBzdHJhbmdlIGJl aGF2aW9yIHdoZW4gdHJhbnNmZXJyaW5nIGZpbGVzIGJldHdlZW4KK2hvbWUgYmFzZSBhbmQgdGhl IEVNLUFQRVggb2NlYW5vZ3JhcGhpYyBmbG9hdHMgdmlhIHNhdGVsbGl0ZS4uLiBsb25nIHN0b3J5 LAorYnV0IGV2ZXJ5IHNvIG9mdGVuIHRoZSB0cmFuc2ZlciB3b3VsZCBnZXQgc3R1Y2sgZm9yIGEg bG9uZyB0aW1lLCBhbmQgaXQKK2hhcHBlbmVkIG9ubHkgd2hlbiBDLUtlcm1pdCB3YXMgc2VuZGlu ZyBhIGZpbGUgYW5kIHJlY2VpdmVkIHR3byBvciBtb3JlCitwYWNrZXRzIChBY2sgb3IgTmFrKSBi YWNrIHRvIGJhY2sgZnJvbSB0aGUgZmxvYXQuICBZZWFycyBhZ28gSSBhZGRlZCBzb21lCitsb29r YWhlYWQgY29kZSB0byB0dGlubCgpIHRvIGNsZWFyIHRoZSBpbnB1dCBidWZmZXIgb2YgYW55IGlu dGVycGFja2V0IGp1bmsKK3NvIHRoYXQsIGluIHRoZSB3aW5kb3dpbmcgY2FzZSwgd2Ugd291bGRu J3QgYmUgdHJpY2tlZCBuZXh0IHRpbWUgYXJvdW5kIGludG8KK3RoaW5raW5nIGEgcGFja2V0IHdh cyB3YWl0aW5nIHRvIGJlIHJlYWQgd2hlbiB0aGVyZSB3YXNuJ3QuICBUaGUgY29kZSwgd2hpY2gK K2hhcyBiZWVuIHRoZXJlIGZvciBhIHdoaWxlLCB3YXMgYSBiaXQgZnJhY3R1cmVkOyBsdWNraWx5 LCBpdCB3b3VsZCBiZQorZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBkZWJ1ZyBsb2cgd2FzIGFjdGl2 ZSBzbyBpdCBkaWRuJ3QgaGF2ZSBtdWNoIGVmZmVjdC4KK1RoZSBwcm9ibGVtIHdhcyB0aGF0IGlm IHRoZSBTT1AgY2FtZSBpbW1lZGlhdGVseSBhZnRlciB0aGUgRU9QLCBpdCBjb3VsZCBiZQorbWlz c2VkIGJlY2F1c2UgdGhlIGxvb3AgcmVhZCB0aGUgbmV4dCBjaGFyYWN0ZXIgYmVmb3JlIGNoZWNr aW5nIHRoZSBjdXJyZW50CitvbmUuICBGaXhlZCBieSByZWFycmFuZ2luZyB0aGUgbG9vcC4gIEFs c28gSSBjaGFuZ2VkIGl0IHNvIGl0IHdvdWxkIGV4ZWN1dGUKK2luIGFsbCBjYXNlcywgbm90IG9u bHkgd2hlbiB0aGUgZGVidWcgbG9nIHdhcyBhY3RpdmUuICBBbHNvLCBjbGVhbmVkIHVwIGEKK2J1 bmNoIG9mIGNvbmZ1c2luZyAjaWZkZWZzIGFuZCByZW1vdmVkIHNvbWUgY2h1bmtzIHRoYXQgaGFk IGJlZW4gY29tbWVudGVkCitvdXQgZm9yIHllYXJzLCBkZWNhZGVzIG1heWJlLiAgdHRpbmwoKTog Y2t1dGlvLmMsIDIxLTIyIEZlYiAyMDA3LgorCitBZGRlZCBOT1cga2V5d29yZCBpbmZvIHRvIEhF TFAgREFURSwgcGx1cyBhIHRpcCBhYm91dCBob3cgdG8gY29udmVydCB0byBVVEM7CitzdWdnZXN0 ZWQgYnkgQXJ0aHVyIE1hcnNoLiAgY2t1dXMyLmMsIDIyIEZlYiAyMDA3LgorCitXaGVuIGFuIEZU UCBjbGllbnQgc2VuZHMgTkxTVCB0byB0aGUgc2VydmVyIGFuZCBubyBtYXRjaGluZyBmaWxlcyBh cmUgZm91bmQsCit0aGUgc2VydmVyIGlzIHN1cHBvc2VkIHRvIHJlc3BvbmQgd2l0aCBhbiBlcnJv ciBtZXNzYWdlIG9uIHRoZSBjb250cm9sCitjaGFubmVsIGFuZCBub3RoaW5nIG9uIHRoZSBkYXRh IGNoYW5uZWwuICBIb3dldmVyIGl0IHNlZW1zIHRoYXQgYXQgbGVhc3Qgb25lCitzZXJ2ZXIgc2Vu ZHMgdGhlIGVycm9yIG1lc3NhZ2UgYmFjayBvbiB0aGUgZGF0YSBjaGFubmVsLCBhcyBpZiBpdCB3 ZXJlIGEKK2ZpbGVuYW1lICgiL2Jpbi9sczogYmxhaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y eSIpLCBhbmQgb24gdGhlIGNvbnRyb2wKK2NoYW5uZWwgdGhlcmUgaXMgbm8gZXJyb3IgaW5kaWNh dGlvbiAoIjIyNiBBU0NJSSBUcmFuc2ZlciBjb21wbGV0ZSIpLiAgQXQKK3RoaXMgcG9pbnQgcmVt b3RlX2ZpbGVzKCkgaGFzIGEgbGlzdGZpbGUgYW5kLCBpZiBhIG1hdGNoIHBhdHRlcm4gd2FzIGdp dmVuLAoraXQgbG9va3MgdGhyb3VnaCBsaXN0IHRvIHNlZSBpZiBhbnkgb2YgdGhlIGxpbmVzIG1h dGNoIHRoZSBnaXZlbiBmaWxlbmFtZSwKK2UuZy4gImJsYWgiLiAgVGhpcyBtYWtlcyBGVFAgQ0hF Q0sgZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMuICBUaGUgcHJvYmxlbQorKGRpYWdub3NlZCBieSBKZWZm KSBpcyB0aGF0IHRoZSBtYXRjaCBwYXR0ZXJuIHdhcyBub3QgZ2l2ZW4gaW4gdGhpcyBjYXNlLCBz bworaXQgdGFrZXMgc29tZSByYW5kb20gZGVmYXVsdCBhY3Rpb24sIHJlc3VsdGluZyBpbiB0aGUg c3B1cmlvdXMgc3VjY2VzcworcmV0dXJuLiAgRml4ZWQgYnkgdXNpbmcgdGhlIHVzZXIncyBzdHJp bmcgYXMgdGhlIHBhdHRlcm4uICBOb3QgdGVzdGVkLAoraG93ZXZlciwgc2luY2UgSSBkb24ndCBo YXZlIGFjY2VzcyB0byBhIHNlcnZlciB0aGF0IGJlaGF2ZXMgdGhpcyB3YXkuCitja2NmdHAuYywg MjIgRmViIDIwMDcuCisKK0lmIGFuIGV4dGVybmFsLXByb3RvY29sIGZpbGUgdHJhbnNmZXIgZmFp bHMsIGRvbid0IHByaW50IEtlcm1pdC1zcGVjaWZpYworaGludHMuICBja3V1czUuYywgMjIgRmVi IDIwMDcuCisKK09uZSBtb3JlIHRpbWUgd2l0aCB0dGlubCgpLiAgR290IHJpZCBvZiB0aGUgImNz YXZlIiBqdW5rLCB3aGljaCBuZXZlciBjb3VsZAoraGF2ZSB3b3JrZWQgKHdoaWNoIGlzIG5vIGRv dWJ0IHdoeSBpdCB3YXMgaW4gYSBkZWJ1Z2dpbmcgc2VjdGlvbikuICBUaGUKK3Byb2JsZW0gd2Fz IHRoYXQgc2F2aW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgcGFja2V0IGxvY2FsbHkgZGlk IG5vdAorc3luY2hyb25pemUgd2l0aCB0aGUgYnVmZmVyIGNsZWFyaW5nICh0dGZsdWkoKSkgZG9u ZSBhdCBhIGhpZ2hlciBsZXZlbCwKK2JldHdlZW4gY2FsbHMgdG8gdHRpbmwoKS4gIFNvIG5vdywg dGhlIGxvb2thaGVhZCBjb2RlLCBpZiBpdCBmaW5kcyB0aGUKK2JlZ2lubmluZyBhbiBhcy15ZXQg dW5yZWFkIHBhY2tldCwgcHV0cyBpdCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBpbnB1dAorcXVl dWUuICBUaGlzIHdheSwgaWYgdGhlIHByb3RvY29sIGVuZ2luZSBjbGVhcnMgdGhlIGlucHV0IGJ1 ZmZlciwgaXQgd2lsbAorZ2V0IHRoZSB3aG9sZSBwYWNrZXQsIG5vdCBqdXN0IHRoZSBwYXJ0IGFm dGVyIHRoZSBTT0guICBja3V0aW8uYywgMjQgRmViIDIwMDcuCisKK0Zyb20gU3RldmVuIE0gU2No d2VkYSwgU2FpbnQgUGF1bCwgTU46IGFkYXB0YXRpb24gb2YgbGFyZ2UgZmlsZSBzdXBwb3J0IHRv CitWTVMgKGl0IHdhcyBhbHJlYWR5IHBvc3NpYmxlIHRvIHRyYW5zZmVyIGxhcmdlIGZpbGVzIGlu IFZNUyBDLUtlcm1pdCBidXQgdGhlCitmaWxlLXRyYW5zZmVyIGRpc3BsYXkgYW5kIHN0YXRpc3Rp Y3Mgd2VyZSB3cm9uZykuICBBbmQgYSBtaW5pbWFsIGFkYXB0YXRpb24KK29mIHRoZSBGVFAgY2xp ZW50IHRvIFZNUyAtLSBubyBSTVMsIG5vIHNwZWNpYWwgVk1TIGZpbGUgc3R1ZmYsIFN0cmVhbV9M RiBhbmQKK2JpbmFyeSBmaWxlcyBvbmx5LCBkZXZlbG9wZWQgYW5kIHRlc3RlZCBvbmx5IHdpdGgg VUNYLiAgU1NML1RMUyBpcworc3VwcG9ydGVkLiAgVGhlIHNvdXJjZS1jb2RlIGNoYW5nZXMgYXJl IG1pbmltYWw7IG1vc3QgaGF2ZSBub3RoaW5nIHRvIGRvCit3aXRoIFZNUywgYnV0IHdpdGggaGVh ZGVyIGZpbGVzLCBwcm90b3R5cGVzLCBhbmQgZGF0YSB0eXBlcyAoZS5nLiBmdHBfcG9ydAoraW50 IHJhdGhlciB0aGFuIHNob3J0LCB2YXJpb3VzIHNpZ25lZC91bnNpZ25lZCBjb25mbGljdHMpIHRv IHNodXQgdXAKK2NvbXBpbGVyIHdhcm5pbmdzLiAgU29tZSBvZiB0aGVzZSBjb3VsZCBiZSBkYW5n ZXJvdXMgaW4gdGVybXMgb2YKK3BvcnRhYmlsaXR5OyBJJ3ZlIG1hcmtlZCB0aGVtIHdpdGggLyog U01TIDIwMDcvMDIvMTUgKi8uICBja2NmbnMuYywKK2NrY25ldC5oLCBja19zc2wuaCwgY2t1dXMz LmMsIGNrdXVzNC5jLCBja3ZmaW8uYywgY2tjZnRwLmMsIGNrdmtlci5tbXMKKyh3aGljaCB3YXMg cmV3cml0dGVuIHRvIGFjdHVhbGx5IHJlZmxlY3QgdGhlIHNvdXJjZSBtb2R1bGUgZGVwZW5kZW5j aWVzKSwKK2Nrdmtlci5jb20gKGFsc28gaGVhdmlseSBtb2RpZmllZCkuICBja3ZrZXIuY29tICh0 aGUgIm1ha2VmaWxlIiBmb3IgVk1TCitDLUtlcm1pdCkgbm93IGluY2x1ZGVzICJGIiBhbmQgIkki IG9wdGlvbiBmbGFncyBmb3IgdGhlIGxhcmdlIEZpbGUgYW5kCitJbnRlcm5hbCBmdHAgZmVhdHVy ZXMsIHBsdXMgYmV0dGVyIGhhbmRsaW5nIG9mIFZheC9BbHBoYS9JQTY0IGRpc3RpbmN0aW9uLgor MjYgRmViIDIwMDcuCisKK0NoYW5nZWQgTmV0QlNEIHRhcmdldHMgdG8gaW5jbHVkZSAtREhBVkVf T1BFTlBUWSBhbmQgLWx1dGlsLCBzbyB0aGV5CitjYW4gdXNlIG9wZW5wdHkoKS4gIG1ha2VmaWxl LCAyNiBGZWIgMjAwNy4KKworQnVpbHQgb24gU29sYXJpcyB3aXRob3V0IGFuZCB3aXRoIFNTTCBP Sy4KK0J1aWx0IG9uIE5ldEJTRCB3aXRoIEtlcmJlcm9zIDUsIE9LLgorQnVpbHQgb24gTWFjIE9T IFggMTAuNCwgcmVndWxhciB2ZXJzaW9uLCBPSy4KK0J1aWx0IG9uIE1hYyBPUyBYIDEwLjQgd2l0 aCBTU0wgYW5kIEtlcmJlcm9zIDUsIE9LLgorCitPbiBWTVMgNy4yLTEvQWxwaGEgd2l0aCBNdWx0 aU5ldCA0LjRBLVguLi4KKworJ0NDJyAnQ0NPUFQnIEtTUDpja3V1czMKKyVEQ0wtVy1US05PVkYs IGNvbW1hbmQgZWxlbWVudCBpcyB0b28gbG9uZyAtIHNob3J0ZW4KKyBcQ0tVVVM0Lk9CSiAiJ0ND JyAnQ0NPUFQnIEtTUDpja3V1czQiICJLU1A6Y2t1dXM0LmMgS1NQOmNrY3N5bS5oIEtTUDpja2Nk ZWIuaAorIEtTUDpja2NsaWIuaCIgIktTUDpja2Nhc2MuaCBLU1A6Y2tja2VyLmggS1NQOmNrY25l dC5oIEtTUDpja3Zpb2MuaCIKKyJLU1A6Y2tjdGVsLmggS1NQOmNrdXVzci5oIEtTUDpja3VjbWQu aCBLU1A6Y2t1dmVyLmgiICJLU1A6Y2tjeGxhLmgKKyBLU1A6Y2t1eGxhLmggS1NQOmNrY3VuaS5o IEtTUDpja3VhdGguaCIKKworVGhlIG5ldyBydWxlIGZvciBja3V1czQuYyB3YXMgdG9vIGxvbmcu ICBJIHJlbW92ZWQgb25lIGZpbGUgZnJvbSB0aGUKK2RlcGVuZGVuY3kgbGlzdCAoY2tjeGxhLmgs IHdoaWNoIHdpbGwgcHJvYmFibHkgbmV2ZXIgY2hhbmdlIGFnYWluKSBhbmQgdGhhdAorbWFkZSBp dCBPSy4gIEJ1aWx0IE5vbmV0IGFuZCBOZXQgdmVyc2lvbnMgT0ssIGJ1dCB0aGlzIGlzIHdpdGhv dXQgdGhlIG5ldworc3R1ZmYuCisKKyJtYWtlIGYiIChsYXJnZS1maWxlIHN1cHBvcnQpIG9uIFZN UyA3LjItMS4uLgorJ0NDJyAnQ0NPUFQnIEtTUDpja3V1czQKKyAgICAgICAgICAgICAgICAgICAg aWYgKENLRlNFRUsoZnAsKENLX09GRl9UKWosU0VFS19DVVIpICE9IDApIHsKKy4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLl4KKyVDQy1JLUlNUExJQ0lURlVOQywgSW4gdGhpcyBzdGF0ZW1lbnQsIHRo ZSBpZGVudGlmaWVyICJmc2Vla28iIGlzIGltcGxpY2l0bHkKK2RlY2xhcmVkIGFzIGEgZnVuY3Rp b24uCisKK0RpdHRvIGZvciBmdGVsbG8gYW5kIGZzZWVrbyBpbiB2YXJpb3VzIG90aGVyIHBsYWNl cywgYW5kIHRoZW4gZnNlZWtvIGFuZAorZnRlbGxvIGNvbWUgdXAgdXAgdW5kZWZpbmVkIGF0IGxp bmsgdGltZS4KKworVGhlIHJ1bGUgZm9yIGNrY2Z0cCBpbiAibWFrZSBpIiAoSW50ZXJuYWwgRlRQ IHN1cHBvcnQpIGhhZCB0aGUgc2FtZSBwcm9ibGVtLgorSSByZW1vdmVkIGNrY3hsYS5oIGZyb20g aXRzIGRlcGVuZGVuY3kgbGlzdCB0b28sIGJ1dCAidXRpbWUiIGNvbWVzIHVwCit1bmRlY2xhcmVk IGF0IGNvbXBpbGUgdGltZSBhbmQgdW5kZWZpbmVkIGF0IGxpbmsgdGltZS4KKworVmVyZGljdDog bmVpdGhlciBvbmUgb2YgdGhlIHR3byBuZXcgZmVhdHVyZXMgY2FuIGJlIHVzZWQgaW4gVk1TIDcu MiBvcgorZWFybGllciwgYnV0IHRoZSBjb2RlIHN0aWxsIGJ1aWxkcyBPSyBpZiB5b3UgZG9uJ3Qg YXNrIGZvciB0aGVtLgorCitWTVMgOC4zIG9uIElBNjQuLi4gIENhbid0IGJ1aWxkIGFueXRoaW5n OgorJU1NUy1GLUJBRFRBUkcsIFNwZWNpZmllZCB0YXJnZXQgKFdFUk1JVCkgZG9lcyBub3QgZXhp c3QgaW4gZGVzY3JpcHRpb24gZmlsZQorCisyNyBGZWIgMjAwNzogQ2hhbmdlZCBDS1ZLRVIuQ09N IHRvIGtlZXAgYWxsIGl0cyBkZXBlbmRlbmNpZXMgYnV0IHVzZSBhCitzaG9ydGVyIGxvZ2ljYWwg bmFtZSAoU3RldmVuIE0gU2Nod2VkYSkuICBUaGUgcHJvYmxlbSBvbiBWTVMgOC4zIGlzIHRoYXQg TU1TCitub3cgc3VwcG9ydHMgY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLCBhbmQgc28gaXQg Y2FuJ3QgZmluZCBhbnl0aGluZy4KK1dvcmthcm91bmQ6IGJ5cGFzcyBNTVMgKGluY2x1ZGUgIm0i IGluIFAxKS4gIFdpdGggdGhpcywgIkBja3ZrZXIuY29tIGlmbSIKK2J1aWxkcyBPSyBvbiBIUCBU ZXN0ZHJpdmUsIGJ1dCBJIGNhbid0IHRlc3QgdGhlIG5ldyBmZWF0dXJlcyBzaW5jZSBvdXRib3Vu ZAorY29ubmVjdGlvbnMgYXJlIG5vdCBhbGxvd2VkIHRoZXJlLiAgQXMgZm9yIGZzZWVrbygpLCBm dGVsbG8oKSwgYW5kIHV0aW1lKCksCit0aGV5IHNpbXBseSBhcmUgbm90IGF2YWlsYWJsZSBwcmlv ciB0byBWTVMgNy4zLiAgSXQgd291bGQgcHJvYmFibHkgYmUgYSBnb29kCitpZGVhIHRvIHRlc3Qg Zm9yIHRoaXMgaW4gQ0tWS0VSLkNPTSwgYnV0IGFjdHVhbGx5IGl0IGlzIHBvc3NpYmxlIHRvIGlu c3RhbGwKK25ld2VyIEMncyBhbmQgQ1JUTHMgb24gb2xkZXIgVk1TIHZlcnNpb25zLCBzbyBkb24n dCBzdGFuZCBpbiB0aGVpciB3YXkuCisKKzI4IEZlYiAyMDA3OiBXaXRoIGFkZGl0aW9uYWwgY2hh bmdlcyBmcm9tIFNNUywgYW5kIHRoZW4gc29tZSBmdXJ0aGVyCithZGp1c3RtZW50cywgSSB3YXMg YWJsZSB0byBidWlsZCB0aGUgRlRQIHZlcnNpb24gb24gVk1TIDcuMi0xLiAgRmlyc3QgSQordGVz dGVkIGl0IHdpdGggR0VUIG9mIGEgYmluYXJ5IGZpbGUsIGJ1dCBpdCB0cmFuc2ZlcnJlZCBpdCBp biB0ZXh0IG1vZGUuCitBZnRlciBhIGZldyBtb3JlIGF0dGVtcHRzIHdpdGggUFVUIGFuZCBHRVQs IGl0IGNyYXNoZWQgd2l0aCAiZmxvYXRpbmcvZGVjaW1hbAorZGl2aWRlIGJ5IHplcm8iIGluIGNr c2NyZWVuLCBja3V1c3guYyBsaW5lIDI3ODU5LiAgT2YgY291cnNlLCB0aGF0J3MgdGhlCitsaXN0 aW5nIGxpbmUsIG5vdCB0aGUgc291cmNlIGxpbmUsIGFuZCBJIGRvbid0IGhhdmUgYSBsaXN0aW5n LgorCitUbyBnZXQgYSBsaXN0aW5nLCBJIGRlbGV0ZWQgQ0tVVVNYLk9CSiBhbmQgdGhlbiBkaWQ6 CisKKyAgJCBtYWtlIGkgIiIgIiIgIi9MSVNUIgorCitTdXJwcmlzaW5nbHksIGl0IHJlY29tcGls ZWQgZXZlcnl0aGluZy4KKworQW55d2F5LCB0aGUgZGl2aWRlIGJ5IHplcm8gaGFwcGVuZWQgaW4g YSBzZWN0aW9uIG9mIGNvZGUgd2hlcmUgdGhlIGRpdmlzb3IKK3dhcyBub3QgY2hlY2tlZCwgYnV0 IGl0IHdhcyBhIHNlY3Rpb24gb2YgY29kZSB3ZSBzaG91bGQgbm90IGhhdmUgYmVlbgorZXhlY3V0 aW5nIGF0IGFsbCwgc2luY2UgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSB3YXMgZnVsbHNjcmVl biwgYW5kIHRoaXMKK3dhcyBpbiB0aGUgImJyaWVmIiBzZWN0aW9uLiAgQW55d2F5LCBJIGFkZGVk IHRoZSBuZWVkZWQgY2hlY2suICBBZ2FpbiwgaXQKK3JlY29tcGlsZXMgZXZlcnl0aGluZy4gIE1h eWJlIHRoZXJlJ3Mgbm8gTU1TIG9uIGdydW1weSAtLSByaWdodCwgdGhlcmUgaXNuJ3QuCisKK0FO WVdBWS4uLiBUcnkgdG8gR0VUIGEgYmluYXJ5IGZpbGUgbGlrZSB0aGlzOgorCisgIGJpbmFyeQor ICAtLS0+IFRZUEUgSQorICAyMDAgVHlwZSBzZXQgdG8gSS4KKyAgZ2V0IGdrZXJtaXQKKyAgLS0t PiBUWVBFIEEKKyAgMjAwIFR5cGUgc2V0IHRvIEEuCisgIC0tLT4gU0laRSBna2VybWl0CisgIDU1 MCBna2VybWl0OiBmaWxlIHRvbyBsYXJnZSBmb3IgU0laRS4KKyAgR0VUIGdrZXJtaXQgKHRleHQp ICgtMSBieXRlcyktLS0+IFRZUEUgQQorCitBbnl3YXkuLi4gImdldCAvYmluYXJ5IGdrZXJtaXQi IGRvd25sb2FkcyBpdCwgc2VlbWluZ2x5IGNvcnJlY3RseSAodGhlIGJ5dGUKK2NvdW50IGlzIHJp Z2h0KS4KKworQnV0ICJwdXQgL2JpbmFyeSBna2VybWl0LjsxIiByZXN1bHRzIGluIGEgMC1sZW5n dGggR0tFUk1JVCBmaWxlIGJlaW5nIHNlbnQuCitIZXJlJ3MgdGhlIGRlYnVnIGxvZzoKKworRlRQ IFBVVCBnbmZpbGVbRElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47MV09MQorZnRwIHB1dGZp bGUgZmxnW0RJU0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFdPTAKK3psdG9yIGZuY252W0RJ U0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFdPS0xCitGVFAgUFVUIG56bHRvcltHS0VSTUlU XQoremZucWZwIDFbRElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47MV09Njc1Cit6Zm5xZnAg MltESVNLJE1TQTQ6W0MuRkRDLk5FVF1HS0VSTUlULjsxXT0zMQoremZucWZwIDNbRElTSyRNU0E0 OltDLkZEQy5ORVRdR0tFUk1JVC47MV09MzEKK3pyZWxuYW0gcmVzdWx0IDJbZ2tlcm1pdC47MV0K K2Z0cCBzZW5kcmVxdWVzdCByZXN0YXJ0W0RJU0skTVNBNDpbQy5GREMuTkVUXWdrZXJtaXQuOzFd PTAKK29wZW5pIG5hbWVbRElTSyRNU0E0OltDLkZEQy5ORVRdZ2tlcm1pdC47MV0KK29wZW5pIHNu ZHNyYz0tMQorb3BlbmkgZmlsZSBudW1iZXI9Mgorem9wZW5pW0RJU0skTVNBNDpbQy5GREMuTkVU XWdrZXJtaXQuOzFdPTIKK3pvcGVuaSBmcD0wCitjaGtmbj0yCitjaGtmbiByZXR1cm49MAorem9w ZW5pIGZpeGVkIGZpbGUgZm9ybWF0IC0gdXNpbmcgYmxrIEkvTworem9wZW5pIGJpbmFyeSBmbGFn IGF0IG9wZW49MQorem9wZW5pIGlmaWxlX2Jtb2RlPTEKK3pvcGVuaSBiaW5hcnk9MQorem9wZW5p IFJNUyBvcGVyYXRpb25zIGNvbXBsZXRlZCBvaworb3Blbmkgem9wZW5pIDFbRElTSyRNU0E0OltD LkZEQy5ORVRdZ2tlcm1pdC47MV09MQorZnRwY21kIGNtZFtQQVNWXQorRlRQIFNFTlQgW1BBU1Zd CitGVFAgUkNWRCBbMjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoMTY2LDg0LDEsMiwyMzMsMjE2 KV0KK2luaXRjb25uIGNvbm5lY3Qgb2sKK0ZUUCBTRU5UIFtTVE9SIEdLRVJNSVRdCitGVFAgUkNW RCBbMTUwIE9wZW5pbmcgQklOQVJZIG1vZGUgZGF0YSBjb25uZWN0aW9uIGZvciAnR0tFUk1JVCcu XQorZG9mdHBzZW5kMiBmdHBjb2RlW1NUT1JdPTE1MAorCisgIEhlcmUgaXMgd2hlcmUgdGhlIGZp bGUgaXMgc3VwcG9zZWQgdG8gYmUgcmVhZCBhbmQgc2VudCBidXQgdGhlcmUgaXMgbm90aGluZwor ICBpbiB0aGUgbG9nIGJldHdlZW4gdGhlICJkb2Z0cHNlbmQyIGZ0cGNvZGUiIGxpbmUgYW5kIHRo ZSBmb2xsb3dpbmcgbGluZS4KKworcmZ0aW1lciBzdGF0dXM9MQorZ2Z0aW1lciBzdGF0dXMgMT0x CitnZnRpbWVyIHN0YXR1cyAyPTE0MDkwMjUKK2dmdGltZXIgc3RhdHVzIDM9MTQwOTAyNQorZ2Z0 aW1lciBzWzAuMDAwMDAwXQoremNsb3NlIG49MgorY2hrZm49MgorY2hrZm4gcmV0dXJuPTEKK3pj bG9zZSBaSUZJTEUgUk1TIG9wZXJhdGlvbnMgY29tcGxldGVkIG9rCitmdHAgZ2V0cmVwbHkgbGNz PTAKK2Z0cCBnZXRyZXBseSByY3M9LTEKK2Z0cCBnZXRyZXBseSBmYz0wCitGVFAgUkNWRCBbMjI2 IFRyYW5zZmVyIGNvbXBsZXRlLl0KK2Z0cCBnZXRyZXBseVsyMjYgVHJhbnNmZXIgY29tcGxldGUu XT0yCitkb2Z0cHNlbmQyIG9rPTAKKworRXZlcnl0aGluZyBpcyBPSyB1cCB1bnRpbCB3ZSBnbyB0 byBzZW5kIHRoZSBmaWxlLCB0aGVuIGl0IGJlaGF2ZXMgYXMgaWYgd2UKK2dvdCBFT0YgaW1tZWRp YXRlbHkgYW5kIHNvIGNsb3NlcyB0aGUgZGF0YSBjb25uZWN0aW9uLCBhbmQgcmVwb3J0cyBzdWNj ZXNzOworYW4gZW1wdHkgY29weSBvZiB0aGUgZmlsZSBpcyBsZWZ0IG9uIHRoZSBmYXIgZW5kLgor CitTdGFydGluZyBvdmVyIHdpdGggYSB0ZXh0IGZpbGUuLi4uICBQVVQgTE9HSU4uQ09NIGdldHMg YW5vdGhlciBkaXZpZGUgYnkKK3plcm8uICBCdXQgaXQgaGFwcGVuZWQgaW4gdGhlIGNvZGUgSSBq dXN0IGZpeGVkLCB3aGljaCBpcyBpbXBvc3NpYmxlLiAgU3dlbGwuCitJIHJlY29tcGlsZWQgZXZl cnl0aGluZyBhbmQgdGhpcyB0aW1lIHRoZSB1cGxvYWQgd29ya2VkLCBhbmQgZG93bmxvYWRpbmcg aXQKK2FnYWluIHdvcmtlZCB0b28uCisKK0J1dCBhIGJpbmFyeSBmaWxlIHN0aWxsIGNhbid0IGJl IHVwbG9hZGVkLiAgVHJ5aW5nIHRvIHVwbG9hZCBhIHRleHQgZmlsZQorYWZ0ZXIgZG9pbmcgdGhp cyBzZWVtcyB0byBzdWNjZWVkIChyZXBvcnRzIHRoZSByaWdodCBudW1iZXIgb2YgYnl0ZXMgc2Vu dCkKK2J1dCBub3RoaW5nIGFwcGVhcnMgb24gdGhlIGZhciBzaWRlLgorCitTVU1NQVJZOgorCisg IFRvIGRvd25sb2FkIGEgdGV4dCBmaWxlOiBHRVQgL0FTQ0lJIGJsYWgudHh0ICAgICgvQVNDSUkg aXMgb3B0aW9uYWwpCisgIFRvIGRvd25sb2FkIGEgYmluYXJ5IGZpbGU6IEdFVCAvQklOQVJZIGJs YWguYmluICgvQklOQVJZIGlzIHJlcXVpcmVkKQorICBUbyB1cGxvYWQgYSB0ZXh0IGZpbGU6IFBV VCBibGFoLnR4dCAgICAgICAgICAgICAoL0FTQ0lJIHN3aXRjaCBub3QgbmVlZGVkKQorICBUbyB1 cGxvYWQgYSBiaW5hcnkgZmlsZTogUFVUIC9CSU5BUlkgYmxhaC5iaW4gICAoZG9lc24ndCB3b3Jr KQorCitQcm9ibGVtczoKKyAgLiBXaHkgZG9lc24ndCBCSU5BUlkgInN0aWNrIj8KKyAgLiBXaHkg ZG9uJ3QgYmluYXJ5IHVwbG9hZHMgd29yaz8KKworVGhlIGN1bHByaXQgc2VlbXMgdG8gYmUgdGhl IFZNUyB2ZXJzaW9uIG9mIHp4aW4oKS4gIEluIHRoZSBGVFAgbW9kdWxlLAorenhpbigpIGlzIGNh bGxlZCBvbmx5IHdoZW4gc2VuZGluZyBiaW5hcnkgZmlsZXMuICBJbiBWTVMsIHp4aW4oKSBpcyBq dXN0CithIGZyb250IGVuZCBmb3IgQy1MaWJyYXJ5IGZyZWFkKCkuICBJdCBwcm9iYWJseSBuZWVk cyB0byBkbyBqdXN0IGRvCit6bWluY2hhcigpIGluIGEgbG9vcCwgbGlrZSBiaW5hcnkgbW9kZSBk b2VzLCBidXQgY2FsbGluZyB6em91dCBpbnN0ZWFkCitvZiB4eG91dC4gIE9yIHNvbWV0aGluZyBs aWtlIHRoYXQuICBGSU5JU0ggVEhJUyBUT01PUlJPVyAoZGVidWcgb24gZ3J1bXB5KS4KKworMiBN YXIgMjAwNzogTmV3IGxvZ3MgZnJvbSBKb2huIER1bmxhcC4KKworZW1hLTE2MzYtbG9nLTAxNzUu ZGJnOiBDLUtlcm1pdCB1cGxvYWRzIGEgc2hvcnQgZmlsZS4gSXQgcmVjZWl2ZXMgYW4gQWNrIGZv cgordGhlIFogcGFja2V0IGl0IGp1c3Qgc2VudCwgdGFpbGdhdGVkIGJ5IHRoZSBiZWdpbm5pbmcg b2YgYSBOYWsgZm9yIHRoZSBuZXh0CitwYWNrZXQuICBXaGVuIHRoZSBzZWNvbmQgU09IIGlzIGVu Y291bnRlcmVkLCBpdCBpcyBwdXQgYmFjayBpbiB0aGUgbXlyZWFkCitxdWV1ZS4gIFRoZW4gdGhl IHByb3RvY29sIGVuZ2luZSwgdG8gd2hpY2ggd2UgcmV0dXJuIHRoZSBBY2ssIHNheXMsICJJIGhh dmUKK3RoZSBwYWNrZXQgSSB3YW50ZWQgc28gSSdtIGNsZWFyaW5nIHRoZSBidWZmZXIiLCBhbmQg YXdheSBnbyB0aGUgZmlyc3QgdHdvCitieXRlcyBvZiB0aGUgTmFrIGZyb20gdGhlIG15cmVhZCBi dWZmZXIuICBUaGVuLCBoYXZpbmcganVzdCByZWNlaXZlZCB0aGUgQWNrCitvZiBvdXIgWiBwYWNr ZXQsIHdlIHNlbmQgb3VyIEIsIGFuZCBnbyB0byByZWFkIHRoZSByZXBseS4gIGluX2NoayBmaW5k cyAwIGluCit0aGUgbXlyZWFkIGJ1ZmZlciAod2hpY2ggd2UganVzdCBjbGVhcmVkKSBhbmQgNiB3 YWl0aW5nIHRvIGJlIHJlYWQgZnJvbSB0aGUKK2NvbW1zIGNoYW5uZWwsIHdoaWNoIGl0IGRvZXMs IG9idGFpbmluZyB0aGUgcmVtYWluaW5nIDYgYnl0ZXMgb2YgdGhlIE5haywKK3doaWNoIGl0IHBy b3Blcmx5IGRpc2NhcmRzLiAgKFRoZSByZWFzb24gdGhpcyBpcyBwcm9wZXIgaXMgdGhhdCwgaGF2 aW5nCithbHJlYWR5IHJlY2VpdmVkIHRoZSBBY2sgZm9yIHRoZSBsYXN0IHBhY2tldCBpdCBzZW50 LCBubyBBY2sgb3IgTmFrIHRoYXQKK2Fycml2ZXMgc3Vic2VxdWVudGx5IC0tIGluIHRoZSBub24t d2luZG93aW5nIGNhc2UgLS0gY291bGQgcG9zc2libHkgYWZmZWN0Cit3aGF0IGl0IGRvZXMgbmV4 dC4pICBTaW5jZSBpdCBoYXNuJ3QgeWV0IGZvdW5kIGEgZ29vZCBwYWNrZXQsIGl0IGtlZXBzCity ZWFkaW5nLCBhbmQgbm93IGl0IGZpbmRzIHRoZSBBY2sgdG8gdGhlIEIsIGFzIHNvb24gYXMgaXQg c2hvd2VkIHVwLiAgVGhpcworaXMgaG93IGl0J3Mgc3VwcG9zZWQgdG8gd29yay4gIE5vIHRpbWUg d2FzIGxvc3QgYmVjYXVzZSBvZiBhbnl0aGluZyB0aGF0CitDLUtlcm1pdCBkaWQuCisKK2VtYS0x NjM2LWxvZy0wMTc0LmRiZzogQy1LZXJtaXQgdXBsb2FkcyBhIHNob3J0IGZpbGUuIEl0IHNlbmRz IERhdGEgcGFja2V0CisjMyBhbmQgcmVjZWl2ZXMgdGhlIEFjayBmb2xsb3dlZCBpbW1lZGlhdGVs eSBieSB0aGUgZmlyc3QgMyBieXRlcyBvZiBhIE5haworZm9yIHBhY2tldCA0LiAgV2hlbiBpdCBn ZXRzIHRvIHRoZSBTT0ggb2YgdGhlIHNlY29uZCBwYWNrZXQsIGl0IHB1c2hlcyBpdAorYmFjayBp biB0aGUgcXVldWUuICBBZ2FpbiwgaW5wdXQoKSBmbHVzaGVzIHRoZSBpbnB1dCBidWZmZXIgKG15 cmVhZCBxdWV1ZQorYW5kIGRldmljZSBidWZmZXIpLiAgQy1LZXJtaXQgZGV0ZWN0cyBFT0Ygb24g dGhlIGZpbGUgaXQgaXMgc2VuZGluZywgYW5kCitzZW5kcyB0aGUgWiBwYWNrZXQuICBUaGVuIGl0 IHJlYWRzIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgdGhlIE5haywKK3doaWNoIGl0IGRpc2NhcmRz LCBhbmQgdGhlbiBpdCBmaW5kcyB0aGUgQWNrIGZvciBaIHdoaWNoIGNvbWVzIGluIDIzIHNlY29u ZHMKK2xhdGVyLCBzZW5kcyB0aGUgQiwgZ2V0cyBhIE5hayBmb3IgdGhlIEIsIHNlbmRzIHRoZSBC IGFnYWluLCBnZXRzIHRoZSBBY2sKK2ZvciB0aGUgQiA0IHNlY29uZHMgbGF0ZXIsIGFuZCBkb25l LiAgQWdhaW4sIGl0J3Mgd29ya2luZyByaWdodCBhbmQgbG9zaW5nCitubyB0aW1lLgorCitUaGUg cXVlc3Rpb24gcmVtYWluczogd2hhdCB3b3VsZCBoYXBwZW4gaWYgdGhlIHByb3RvY29sIGVuZ2lu ZSBkaWQgbm90IGNsZWFyCit0aGUgYnVmZmVyPyAgV291bGQgdHRpbmwoKSByZXRyaWV2ZSBhbGwg cGFja2V0cyBpbiBzZXF1ZW5jZSBldmVuIHdoZW4gdGhleQorY29tZSBiYWNrIHRvIGJhY2s/ICBU byB0ZXN0IHRoaXMsIEkgaGFkIEMtS2VybWl0IHNlbmQgYSBmaWxlIHVzaW5nIDMwIHdpbmRvdwor c2xvdHMgYW5kIG9ic2VydmVkIHRoZSBzdHJlYW0gb2YgQWNrcyBpbiB0aGUgcmV2ZXJzZSBkaXJl Y3Rpb246CisKKyAgSEVYRFVNUDogbXlnZXRidWYgcmVhZCAoMTYgYnl0ZXMpCisgIDAxIDI1IDIz IDU5IDJmIDUyIDM5IDBkIHwgMDEgMjUgMjQgNTkgMmIgMjYgMzEgMGQgIC4lI1kvUjkuIC4lJFkr JjEuCisgIHR0aW5sIGxvb2thaGVhZCBteV9jb3VudD05CisgIHR0aW5sIGxvb2thaGVhZCByZW1v dmVkPV5NCisgIHR0aW5sIGxvb2thaGVhZCBwdXNoYmFjayBTT1A9XkEKKyAgSEVYRFVNUDogdHRp bmwgZ290ICg3IGJ5dGVzKQorICAwMSAyNSAyMyA1OSAyZiA1MiAzOSAgICB8ICAgICAgICAgICAg ICAgICAgICAgICAgICAuJSNZL1I5CisgIFJFQ0VJVkUgQlVGRkVSUzoKKyAgYnVmZmVyIGludXNl IGFkZHJlc3MgbGVuZ3RoIGRhdGEgdHlwZSBzZXEgZmxhZyByZXRyaWVzCisgICAgIDAgICAgIDEg ICAgIDI5MjEyIDk2NjcgICAgIDAgICBZICAgIDMgICAgIDAKKyAgWwElI1ldCisgIC4uLgorICBp bl9jaGsgbXlfY291bnQ9OAorICAuLi4KKyAgdHRpbmwgbG9va2FoZWFkIG15X2NvdW50PTEKKyAg dHRpbmwgbG9va2FoZWFkIHJlbW92ZWQ9Xk0KKyAgSEVYRFVNUDogdHRpbmwgZ290ICg3IGJ5dGVz KQorICAwMSAyNSAyNCA1OSAyYiAyNiAzMSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAu JSRZKyYxCisgIFJFQ0VJVkUgQlVGRkVSUzoKKyAgYnVmZmVyIGludXNlIGFkZHJlc3MgbGVuZ3Ro IGRhdGEgdHlwZSBzZXEgZmxhZyByZXRyaWVzCisgICAgIDAgICAgIDEgICAgIDI5MjEyIDk2Njcg ICAgIDAgICBZICAgIDQgICAgIDAKKyAgWwElJFldCisKK0hlcmUgd2UgY2FuIHNlZSB0aGF0IHRo ZSBwdXNoZWQtYmFjayBTT0ggd2FzIHByb3Blcmx5IHJldHJpZXZlZCBuZXh0IHRpbWUKK2Fyb3Vu ZCwgYW5kIHRoZSB0YWlsZ2F0aW5nIEFjayB3YXMgbm90IGxvc3QuICBUaGlzIHNjZW5hcmlvIHJl cGVhdHMgaXRzZWxmCisyMTIgdGltZXMgaW4gdGhlIGxvZywgYW5kIHRoZXJlIGFyZSBubyBzY3Jl d3Vwcy4KKworQmFjayB0byBWTVMgRlRQLi4uICBUaGUgcHJvYmxlbSB3aXRoIHNlbmRpbmcgYmlu YXJ5IGZpbGVzIGlzIHRoYXQgenhpbigpCit1c2VzIEMtTGlicmFyeSBmb3BlbigpL2ZyZWFkKCkg aW5zdGVhZCBvZiBSTVMsIHNvIGl0IGNhbid0IGFjY2VzcyB0aGUgaW5wdXQKK2ZpbGUsIHdoaWNo IHdhcyBvcGVuZWQgYnkgem9wZW5pKCksIHdoaWNoIGlzIHRvdGFsbHkgUk1TLWlmaWVkIGluIFZN UworQy1LZXJtaXQuICBGb3IgVk1TIG9ubHksIEkgcmVwbGFjZWQgdGhlIHp4aW4oKSBsb29wIGJ5 IGEgem1pbmNoYXIoKSBsb29wCitsaWtlIHRoZSBvbmUgdXNlZCBpbiB0ZXh0IG1vZGUsIGV4Y2Vw dCB3aXRob3V0IHRoZSBjaGFyYWN0ZXIgc2V0IG9yCityZWNvcmQtZm9ybWF0IGNvbnZlcnNpb24u ICBUZXN0ZWQgYnkgUFVUIC9CSU5BUlkgb2Ygc29tZSBiaW5hcnkgZmlsZXMsIHdoaWNoCit3b3Jr ZWQgZmluZS4gIGNrY2Z0cC5jLCAyIE1hciAyMDA3LgorCitOZXh0IHByb2JsZW0uLi4gIFZNUyBD LUtlcm1pdCBmdHAgY2xpZW50IHNlbmRpbmcgYmluYXJ5IGZpbGVzIGluIHRleHQgbW9kZS4KK1Zh cmlhdGlvbiAxOiBXZSBqdXN0IHNlbmQgdGhlIGZpbGUuICB6b3BlbmkoKSBpcyBzdXBwb3NlZCB0 byBkZXRlY3QgdGhhdAoraXQncyBhIGJpbmFyeSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5IHNldCB0 aGUgbW9kZS4gIEFuZCBpdCBkb2VzOgorCisgIHpvcGVuaSBmaXhlZCBmaWxlIGZvcm1hdCAtIHVz aW5nIGJsayBJL08KKyAgem9wZW5pIGJpbmFyeSBmbGFnIGF0IG9wZW49MAorICB6b3BlbmkgaWZp bGVfYm1vZGU9MQorICB6b3BlbmkgYmluYXJ5PTAKKyAgem9wZW5pIGF1dG9zd2l0Y2ggZnJvbSBU RVhUIHRvIEJJTkFSWQorICB6b3BlbmkgUk1TIG9wZXJhdGlvbnMgY29tcGxldGVkIG9rCisKK2J1 dCB0aGVuIGluIGduZmlsZSgpOgorCisgIGlmICghc2VydmVyIHx8IChzZXJ2ZXIgJiYgKCh3aGF0 cnUgJiBXTUlfRkxBRykgPT0gMCkpKQorICAgIGJpbmFyeSA9IGduZl9iaW5hcnk7CS8qIFJlc3Rv cmUgcHJldmFpbGluZyB0cmFuc2ZlciBtb2RlICovCisKK1dlbGwsIHNpbmNlIFZNUyBzZXRzIHRl eHQvYmluYXJ5IG1vZGUgYXV0b21hdGljYWxseSB3aGVuIHNlbmRpbmcgZmlsZXMsCit0aGlzIGNv ZGUgY2FuIChhbmQgc2hvdWxkKSBiZSBza2lwcGVkIGluIFZNUy4gIGduZmlsZSgpOiBja2NmbnMu YywgMiBNYXIgMjAwNy4KKworVmFyaWF0aW9uIDI6IEJJTkFSWSBvciBTRVQgRklMRSBUWVBFIEJJ TkFSWSBkb2Vzbid0IGZvcmNlIGJpbmFyeSBtb2RlLiAgQnV0CitTRVQgRlRQIFRZUEUgQklOQVJZ IGRvZXMuICBCdXQgQklOQVJZIGRvZXMgaW5kZWVkIGNhbGwgZG9mdHB0eXAoKSBzbyB3aGF0J3MK K3RoZSBwcm9ibGVtPyAgV2UgZG8gaW5kZWVkIHNldCBmdHBfdHlwIHRvIDEgYnV0IGl0IGdldHMg cmVzZXQgc29tZXdoZXJlCitiZWZvcmUgd2UgY2FsbCB6b3BlbmkoKS4gIEJ1dCB0aGVuIHpvcGVu aSgpIHB1dHMgaXQgYmFjayB0byAxLiAgVHJhY2luZwordGhyb3VnaCBhIHRyYW5zZmVyLCBpdCBs b29rcyBsaWtlIGFsbCBvZiB0aGlzIHdvcmtzIHJpZ2h0LCBpdCdzIG9ubHkgdGhhdAordGhlIGZp bGUgdHJhbnNmZXIgZGlzcGxheSBzYXlzIFRFWFQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgcmVhbGx5 IGluIGJpbmFyeQorbW9kZS4gIFRoaXMgaXMgYmVjYXVzZSBzY3JlZW4oKSBpcyBjYWxsZWQgYmVm b3JlIG9wZW5pKCkuICBJIHdvbmRlciBpZiB3ZQorY2FuIGNhbGwgc2NyZnQoKSBmcm9tIHRoZSBm dHAgbW9kdWxlLi4uICBObywgdGhhdCB3b3VsZCBiZSB0b28gZWFzeS4gIE9LLAorc2VuZHJlcXVl c3QgY2FsbHMgb3BlbmkoKSBhbmQgc2V0cyB0aGUgZmlsZSBtb2RlOyBwdXRmaWxlKCkgY2FsbHMK K3NjcmVlbihTQ1JfRk4pLCB3aGljaCBwcmludHMgdGhlIHRyYW5zZmVyIG1vZGUuICBCdXQgcHV0 ZmlsZSBjYWxscworc2VuZHJlcXVlc3QoKSBhZnRlciBpdCBwdXRzIHVwIHRoZSBzY3JlZW4gdGhh dCBzYXlzIHRoZSBmaWxlIHR5cGUuICBTbyBpdAorbG9va3MgbGlrZSBzZW5kcmVxdWVzdCgpIGhh cyB0byBjYWxsIHNjcmVlbihTQ1JfRk4pIGFnYWluIGlmIGl0IGNoYW5nZXMgdGhlCitmaWxlIHR5 cGUuICBPSywgdGhhdCBkaWQgaXQuICBja3V1c3guYywgY2tjZnRwLmMsIDIgTWFyIDIwMDcuCisK K1RoZSBCSU5BUlkgYW5kIFRFWFQgKEFTQ0lJKSBjb21tYW5kcyBkbyBub3QgaW5oaWJpdCBhdXRv bWF0aWMgdHlwZSBzd2l0Y2hpbmcKK2luIFZNUy4gIFRoZXkgZG9uJ3QgaW4gVW5peCBlaXRoZXIu ICBUaGV5IG5ldmVyIGhhdmUuICBTaG91bGQgdGhleT8gIEkgdGhpbmsKK3NvLCBvdGhlcndpc2Ug d2hhdCBnb29kIGFyZSB0aGV5PyAgUGx1cyB3ZSB3YW50IHRoZSBLZXJtaXQgRlRQIGNsaWVudCB0 bworYmVoYXZlIGxpa2UgdGhlIG90aGVycy4gIEkgYWRkZWQgY29kZSBmb3IgdGhpcyBidXQgaXQg ZG9lc24ndCB3b3JrLCBkdWUgdG8KK3RoZSBsYXllcnMgYW5kIGxheWVycyBvZiB0ZXh0L2JpbmFy eSBkZXRlY3Rpb24gYW5kIHN3aXRjaGluZyBhbmQKK2lmLXRoaXMtYnV0LXRoZW4taWYtdGhhdC4u LiAgQW55d2F5LCBubyBoYXJtIGRvbmUuICBUaGUgbm9ybWFsIHJ1bGUgaXM6Cit3aGVuIHlvdSBQ VVQgYSBmaWxlLCBLZXJtaXQgZmlndXJlcyBvdXQgb24gYSBwZXItZmlsZSBiYXNpcyB3aGV0aGVy IHRvIHVzZQordGV4dCBvciBiaW5hcnkgbW9kZSB1bmxlc3MgeW91IGluY2x1ZGUgYSAvVEVYVCAo L0FTQ0lJKSBvciAvQklOQVJZIHN3aXRjaAoraW4gdGhlIFBVVCAob3IgTVBVVCkgY29tbWFuZC4g IGNrdXVzW3IzXS5jLCBja2NmdHAuYywgMiBNYXIgMjAwNy4KKworV2VkIE1hciA3IDE2OjIxOjEz IDIwMDcgV1JPVEUgU0hPUlQgVEVTVCBQUk9HUkFNIGZvciB0dHJ1bmNtZCAodGhlIG9wZW5wdHkK K3ZlcnNpb24pIG9uIE1hYyBPUyBYLiAgT24gZHVsY2U6IH4va2VybWl0L3R0cHR5LmMgLyB0dHB0 eS5zaC4gIEl0IHN0YXJ0cyB0aGUKK2V4dGVybmFsIHByb3RvY29sIGluIHRoZSBsb3dlciBmb3Jr LiAgVGhlIGNvbW1hbmQgdG8gcnVuIGlzIGEgY29tbWFuZC1saW5lCithcmd1bWVudC4gIFNlbmRp bmcgYW5kIHJlY2VpdmluZyBmaWxlcyB3aXRoIEtlcm1pdCB3b3JrcyBPSy4gIEJ1dCBhZ2Fpbiwg dGhlCitzdGFuZGFsb25lIHByb2dyYW0gdG90YWxseSBmYWlscyB3aGVuIEkgdXNlIHN6IG9yIGxz eiBhcyB0aGUgZXh0ZXJuYWwKK3Byb3RvY29sLiAgU28gaXQgbG9va3MgbGlrZSB3ZSBjYW4gcnVs ZSBvdXQgYW55IGVudmlyb25tZW50YWwgZWZmZWN0cyBvZgorcnVubmluZyB0aGUgY29kZSBpbnNp ZGUgQy1LZXJtaXQuCisKK01vbiBNYXIgMTIgMTY6NTI6MjAgMjAwNzogUHV0IHNvbWUgZWZmb3J0 IGludG8gbWFraW5nIHR0cHR5LmMgbW9yZSB1c2VmdWw7CithZGRlZCBhIGRlYnVnIGxvZy4gIEZv dW5kIHRoYXQgZm9yIHNvbWUgcmVhc29uLCBhdCBsZWFzdCBvbiBNYWMgT1MgWCwKK3NlbGVjdCgp IGFsd2F5cyB0aW1lZCBvdXQgYXQgdGhlIHRoZSBlbmQuICBJIGFkZGVkIGEgU0lHQ0hMRCBhbGFy bSBhbmQgdGhhdAorc2VlbXMgdG8gaGFuZGxlIHRoZSBmb3JrIGV4aXQgY29uZGl0aW9uIHZlcnkg bmljZWx5LiAgTm93IHdlIGNhbiBzZW5kIChzYXkpCithIDNNQiBmaWxlIGF0IGdvb2Qgc3BlZWQg b24gRXRoZXJuZXQgKDFNY3BzKSBjb25zaWRlcmluZyB0aGUgZGVidWdnaW5nLCBldGMsCithbmQg aXQgdGVybWluYXRlcyBpbnN0YW50bHkuICBCdXQgd2hlbiBzZW5kaW5nIGEgZmlsZSBpbnRvIHR0 cHR5Y21kICh3aXRoCisiZ2tlcm1pdCAtciIpLCB0aGluZ3MgZ28gd3JvbmcgYXQgdGhlIGVuZCAt LSB0aGUgWiBwYWNrZXQgaXMgbmV2ZXIKK2Fja25vd2xlZGdlZC4gIFRoaXMgaXMgcmVwcm9kdWNp YmxlLiAgTWF5YmUgdGhpcyBpcyBhIGdvb2QgbGVhZC4uLi4gIFRoZSBsb2cKK3Nob3dzIHRoYXQg c2VsZWN0KCkgdGltZWQgb3V0LCBldmVuIHRob3VnaCB0aGUgZ2tlcm1pdCBmb3JrIGhhZCBub3Qg eWV0CitleGl0ZWQgKG9yIGZpbmlzaGVkKS4gIEl0IGxvb2tzIGxpa2UgZ2tlcm1pdCBzZW50IHRo ZSBBY2ssIHR0cHR5LmMgcmVhZCBpdAorZnJvbSB0aGUgcHR5IGFuZCBzZW50IGl0IG91dCB0aGUg bmV0OgorCisgIDAwMDM6IHJlYWQgcHR5PTggICAgICAgICAgICAgICAgPC0tIHJlYWQgQWNrIGZy b20gcHR5CisgIDAwMDM6IGxvb3AgdG9wIGhhdmVfcHR5PTEKKyAgMDAwMzogbG9vcCB0b3AgaGF2 ZV9uZXQ9MQorICAwMDAzOiBGRF9TRVQgcHR5X2luCisgIDAwMDM6IEZEX1NFVCB0dHlmZCBpbgor ICAwMDAzOiBGRF9TRVQgdHR5ZmQgb3V0PTgKKyAgMDAwMzogbmZkcz01CisgIDAwMDM6IHNlbGVj dD0xCisgIDAwMDM6IEZEX0lTU0VUIHR0eWZkIG91dAorICAwMDAzOiB3cml0ZSBuZXQ9OCAgICAg ICAgICAgICAgIDwtLSBzZW5kIGFjayB0byBuZXQKKyAgMDAwMzogbG9vcCB0b3AgaGF2ZV9wdHk9 MQorICAwMDAzOiBsb29wIHRvcCBoYXZlX25ldD0xCisgIDAwMDM6IEZEX1NFVCBwdHlfaW4KKyAg MDAwMzogRkRfU0VUIHR0eWZkIGluCisgIDAwMDM6IG5mZHM9NQorICAwMDA5OiBzZWxlY3Q9MAor ICAwMDA5OiBzZWxlY3QgdGltZW91dCAtIGhhdmVfcHR5PTEKKworQnV0IEFjayBuZXZlciBhcnJp dmVkLiAgVGhpcyBpcyBhIHN0cmVhbWluZyB0cmFuc2Zlci4gIEJ1dCBub3BlLCBzdHJlYW1pbmcK K2lzIG5vdCB0aGUgcHJvYmxlbS4gIElmIEkgZGlzYWJsZSBzdHJlYW1pbmcgKCJna2VybWl0IC1T ciIpLCB3ZSBoYW5nIGluIGluCit0aGUgbWlkZGxlIG9mIHNlbmRpbmcgdGhlIGRhdGEuICBJZiBJ IHVzZSBzbWFsbCBwYWNrZXRzLCB3ZSBkb24ndCBoYW5nOgorMTAwMCBpcyBPSywgMjAwMCBpcyBu b3QuICBJbiBmYWN0LCB0aGUgY3V0b2ZmIGlzIDEwMjQuICBPSywgVEJDLi4uCisKK1dlZCAxNCBN YXIgMjAwNzogUmVjZWl2aW5nIGEgZmlsZSB0aHJ1IHR0cHR5ICJna2VybWl0IC1lIDEyMDAgLVNy ZCIKK3Byb2R1Y2VzIGEgZGVidWcgbG9nIHRoYXQgc2hvd3MgdGhhdCBna2VybWl0IGdldHMgYSBs b3Qgb2YgRUFHQUlOIGVycm9ycword2hlbiBpdCB0cmllcyB0byByZWFkIGZyb20gaXRzIHN0ZGlu LiAgSW4gZmFjdCwgaXQgdGFrZXMgNiB0cmllcyAocmVhZCgpCitjYWxscykgdG8gcmVhZCB0aGUg UyBwYWNrZXQgKDI3IGJ5dGVzKS4gIFRoZW4gd2hlbiB0aGUgZmlyc3QgZGF0YSBwYWNrZXQKK2Fy cml2ZXMgKDEyMDAgYnl0ZXMpLCByZWFkKCkgbmV2ZXIgcmV0dXJucyBldmVuIG9uZSBzaW5nbGUg Ynl0ZS4gIFRoZQordGltZW91dCBpbnRlcnZhbCBpcyAxNSBzZWNvbmRzIGFuZCBpdCB0aW1lcyBv dXQgcmVwZWF0ZWRseS4gIEFkZGVkIGEKK3ByaW1pdGl2ZSBoZXggZHVtcCB0byB0aGUgdHRwdHkg ZGVidWcgbG9nIGZvciBlYWNoIHJlYWQvd3JpdGUgKHNob3dpbmcgb25seQordGhlIGZpcnN0IDI0 IGNoYXJhY3RlcnMgYW5kIHRoZSBsYXN0IGNoYXJhY3Rlciwgc28gaXQgZml0cyBvbiBvbmUgbGlu ZSkuCitUcmllZCB1cGxvYWRpbmcgYSBmaWxlLiAgVGhlIFMsIEYsIGFuZCBBIHBhY2tldHMgKHNo b3J0KSBhcmUgcmVjZWl2ZWQgYW5kCitBY2snZCBPSywgYnV0IHRoZW4gdHRwdHkgc2VsZWN0KCkg dGltZXMgb3V0LCBuZXZlciByZWNlaXZpbmcgZXZlbiBvbmUgYnl0ZQorZnJvbSB0aGUgRCBwYWNr ZXQuICBDbGVhcmx5LCB3aGVuIHRoZSBwdHkgZHJpdmVyIHJlY2VpdmVzIGEgYnVyc3Qgb2YgPiAx SworYnl0ZXMsIHN0b3BzIHdvcmtpbmcuICBBcyBiZWZvcmUsIGlmIEkgbGltaXQgdGhlIHBhY2tl dHMgdG8gPCAxSywgaXQgd29ya3MKK2ZpbmUuCisKK0NhbiBJIHNlbmQgYW4gOC1iaXQgYmluYXJ5 IGZpbGU/ICBOb3BlLiAgdHRwdHkgcmVhZHMgdGhlIGJpbmFyeSBkYXRhIGp1c3QKK2ZpbmUgZnJv bSB0aGUgbmV0IGFuZCB3cml0ZXMgaXQgZXhhY3RseSBhcyBpdCB3YXMgcmVjZWl2ZWQgdG8gdGhl IHB0eSwgYnV0Cit0aGUgZmlyc3QgdGltZSB3ZSB3cml0ZSBhbiA4LWJpdCBieXRlLCB3ZSBuZXZl ciBoZWFyIGJhY2sgZnJvbSB0aGUgUFRZCithZ2Fpbi4gIEJ1dCB0aGUgbG9nIHNob3dzIHRoYXQg d2hlbiB0aGUgaW5pdGlhbCA3LWJpdCBwYWNrZXRzIGZyb20gdGhlIHB0eSwKK2l0IGxvb2tzIGxp a2UgdGhlIFBUWSBpcyBub3QgaW4gcmF3bW9kZSwgYmVjYXVzZSB0aGVzZSBwYWNrZXRzIGVuZCB3 aXRoIF5KCityYXRoZXIgdGhhbiBeTS4gIENhbGxpbmcgcHR5X21ha2VfcmF3KCkgb24gdGhlIG1h c3RlcmZkIGFuZCBzbGF2ZWZkCitleHBsaWNpdGx5LCBob3dldmVyLCBkb2Vzbid0IGNoYW5nZSBh bnl0aGluZy4gIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIEkgZG8KK3RoaXMgaW4gdGhlIGxvd2VyIGZv cmsgb3IgdGhlIHVwcGVyIGZvcmsuICBTbyBtYXliZSBpdCdzIHRoZSBhY3R1YWwKK3NlbWFudGlj cyBvZiBwdHlfbWFrZV9yYXcoKSB0aGF0IGFyZSB3cm9uZy4KKworVGh1IDE1IE1hciAyMDA3OiBX ZW50IHRocnUgYWxsIHRoZSB0ZXJtaW5hbCBtb2RlIGZsYWdzIGluIE1hYyBPUyBYOyBkaWRuJ3QK K2hlbHAuICBDaGFuZ2VkIGhleCBkdW1wIHRvIHNob3cgd2hvbGUgcGFja2V0LiAgUHV0IGhleCBk dW1wIHJvdXRpbmUgaW4gYQorcHJpdmF0ZSBjb3B5IG9mIEctS2VybWl0LiAgVHJpZWQgdG8gdHJh bnNmZXIgYW4gOC1iaXQgZmlsZSwgbG9nZ2luZyBib3RoCit0dHB0eSBhbmQgZ2tlcm1pdC4gIENv bXBhcmVkIHdoYXQgdHRwdHkgcmVjZWl2ZWQgb24gc3RkaW4gd2l0aCB3aGF0IGl0IHNlbnQKK3Rv IHRoZSBwdHkgKHNhbWUpIGFuZCB3aGF0IHdhcyByZWNlaXZlZCBieSBHLUtlcm1pdCAoc2FtZSku ICBUaGVuIEkgcmVhbGl6ZWQKK3RoYXQgbXkgbGl0dGxlIHRlc3QgcHJvZ3JhbSB3YXMgbm90IHB1 dHRpbmcgaXRzIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGludG8KK3JhdyBtb2RlOyB3aGVuIEkgZGlk IHRoYXQsIEkgY291bGQgdXBsb2FkIGJpbmFyeSBmaWxlcyAoc3RyZWFtaW5nLCAyTUIvc2VjKS4K K0FuZCB3aXRoIFptb2RlbSB0b28gKHdpdGggcno7IGxyeiBkb2Vzbid0IHdvcmsgZm9yIHNvbWUg cmVhc29uKS4gIExvb2tpbmcKK2JhY2sgYXQgdGhlIG9yaWdpbmFsIGluIGNrdXRpby5jLCBJIHNl ZSB0aGF0IHR0cHR5Y21kKCkgbmV2ZXIgY2FsbGVkCit0dHBrdCgpLiAgTWF5YmUgdGhhdCB3YXMg dGhlIHRyb3VibGUgYWxsIGFsb25nLiAgKFl1cCwgYnV0IG1heWJlIG5vdCB0aGUKK3dob2xlIHRy b3VibGUuKQorCitNb3ZpbmcgYmFjayB0byBDLUtlcm1pdCBhbmQgdGhlIG9yaWdpbmFsIHR0cHR5 Y21kKCkgcm91dGluZSwgYWRkaW5nIHRoZSBjYWxsCit0byB0dHBrdCgpLCBhbmQgc3RyaXBwaW5n IG91dCBhIGxvdCBvZiBjcnVmdCwgYW5kIG1vdmluZyB0aGUgcHR5X21ha2VfcmF3KCkKK2NvZGUg dG8gY2t1cHR5LmMsIEtlcm1pdCB1cGxvYWRzIGFuZCBkb3dubG9hZHMgKHN0cmVhbWluZykgd29y ayBmaW5lIGluCitTb2xhcmlzLiAgWm1vZGVtIHNlbmRzIGEgZmlsZSwgYnV0IHRoZW4gdGhlIHRy YW5zZmVyIGhhbmdzIGF0IHRoZSB2ZXJ5IGVuZCwKK2FzIGlmIHRoZSBzaWdub2ZmIHByb3RvY29s IHdlcmUgbG9zdC4gIFRoaXMgaGFwcGVucyBvbiBTb2xhcmlzLiAgSWYgSSBtb3ZlCitiYWNrIHRv IE1hYyBPUyBYLCBldmVyeXRoaW5nIHdvcmtzIGp1c3QgZmluZS4gIFRoZW4sIG1ha2luZyBhIEtl cmJlcml6ZWQKK2Nvbm5lY3Rpb24gZnJvbSB0aGUgTWFjIHRvIE5ldEJTRCwgSSBjYW4gc2VuZCBm aWxlcyBmcm9tIHRoZSBNYWMgd2l0aCBib3RoCitabW9kZW0gYW5kIEtlcm1pdC4gIFJlY2Vpdmlu Zy4uLiAgS2VybWl0IE9LLiAgWm1vZGVtLi4uICBOb3BlLiAgInJ6OgorUGVyc2lzdGVudCBDUkMg b3Igb3RoZXIgRVJST1IiIChhbmQgY3JlYXRlZCBhIDI2NU1CIGRlYnVnLmxvZyEpCisKK0ZyaSAx NiBNYXIgMjAwNzogdHRwdHljbWQoKSB3YXMgZm9yIHNlbmRpbmcgZmlsZXMgd2l0aCBabW9kZW0g YWNyb3NzCitlbmNyeXB0ZWQgY29ubmVjdGlvbnMuICBCdXQgaXQgb2NjdXJyZWQgdG8gbWUgdGhh dCBpdCdzIG5lY2Vzc2FyeSBmb3IKK2NsZWFyLXRleHQgY29ubmVjdGlvbnMgdG9vOyBlLmcuIFRl bG5ldCwgd2hlcmUgMHhmZiBoYXMgdG8gYmUgZG91YmxlZC4gIE9mCitjb3Vyc2UgWm1vZGVtIGRv ZXNuJ3QgZG8gdGhhdCBpdHNlbGYsIHNvIHRoZXJlJ3Mgbm8gd2F5IFptb2RlbSBleHRlcm5hbAor cHJvdG9jb2wgY291bGQgd29yayB3aGVuIGV4ZWN1dGVkIG92ZXIgYSBUZWxuZXQgY29ubmVjdGlv biwgYW5kIGluIGZhY3QKK2l0IGRvZXNuJ3QuICBJIHdvbmRlciB3aHkgSSBldmVyIHRob3VnaHQg aXQgZGlkLgorCitXZWQgMjEgTWFyIDIwMDc6IEJhY2sgdG8gd2hlcmUgd2UgbGVmdCBvZmYgYSB3 ZWVrIGFnby4gIFRyeWluZyBDLUtlcm1pdCdzCit0dHB0eWNtZCgpIG9uIHRoZSBNYWMgYWdhaW4s IGluIHJlbW90ZSBtb2RlOgorCisgLiBHLUtlcm1pdCBzZW5kIHR4dCAoa3N0KTogT0sgIDgzMktj cHMgIAorIC4gRy1LZXJtaXQgcmVjdiB0eHQgKGtyKTogIE9LICA0MjVLY3BzICAKKyAuIEctS2Vy bWl0IHNlbmQgYmluIChrc2IpOiBPSyAxMDAwS2NwcyAgCisgLiBHLUtlcm1pdCByZWN2IGJpbiAo a3IpOiAgT0sgIDE4OEtjcHMgIAorCitBbmQgWm1vZGVtOgorCisgLiBzeiB0eHQgKHpzdCk6IE9L ICA1NjNLY3BzICAKKyAuIHN6IGJpbiAoenNiKTogT0sgIDcxNEtjcHMgIAorIC4gcnogdHh0ICh6 cik6ICBPSyAgODYzS2NwcyAgCisgLiByeiBiaW4gKHpyKTogIE9LICAxOThLY3BzICAKKworU28g aW4gcmVtb3RlIG1vZGUsIGV2ZXJ5dGhpbmcgd29ya3MuICBOb3cgbGV0J3MgdHJ5IGEgY2xlYXIt dGV4dCBUZWxuZXQKK2Nvbm5lY3Rpb24uLi4KKworIC4gRy1LZXJtaXQgc2VuZCB0eHQgKGtzdCk6 IE9LICA4NDFLY3BzCisgLiBHLUtlcm1pdCByZWN2IHR4dCAoa3J0KTogT0sgIDM5MUtjcHMKKyAu IEctS2VybWl0IHNlbmQgYmluIChrc2IpOiBPSyAgODExS2NwcworIC4gRy1LZXJtaXQgcmVjdiBi aW4gKGtyYik6IE9LICAxNzFLY3BzCisKK0FuZCBabW9kZW0gb3ZlciB0aGUgc2FtZSBjbGVhci10 ZXh0IHRlbG5ldCBjb25uZWN0aW9uOgorCisgLiBzeiB0eHQgKHpzdCk6IE9LICA5MUtjcHMgKCop CisKK0tlcm1pdCBpcyBzZW5kaW5nIHN6IG1lc3NhZ2VzIGxpa2UgInN6IDMuNzMgMS0zMC0wMyBm aW5pc2hlZC4iIHRvIHRoZQoraG9zdCwgd2hpY2ggdHJpZXMgdG8gZXhlY3V0ZSB0aGVtLCBhZnRl ciB0aGUgdHJhbnNmZXIgaXMgZmluaXNoZWQuCitPZiBjb3Vyc2UgInN6IiBpcyBhIGNvbW1hbmQs IGJ1dDoKKworICBzejogY2Fubm90IG9wZW4gMy43MzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y eQorICBzejogY2Fubm90IG9wZW4gMS0zMC0wMzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQor ICBzejogY2Fubm90IG9wZW4gZmluaXNoZWQuOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisK K0RpZCBJIGxvc2UgdGhhdCBjb2RlIHRoYXQgZGlzLXJlZGlyZWN0cyBzdGRlcnIgd2hlbiBJIHdl bnQgYmFjayB0byB1c2luZyB0aGUKK3B0eSBjb2RlIGZyb20gdGhlIGNrdXB0eSBtb2R1bGU/ICBO bywgaXQncyB0aGVyZSBhbmQgaXQncyBiZWluZyBleGVjdXRlZC4KK0FwcGFyZW50bHkgdGhlIGNv cHkgb2Ygc3ogSSBoYXZlIGlzIHdyaXRpbmcgaXRzICJmaW5pc2hlZCIgbWVzc2FnZSB0byBzdGRv dXQKK2JlY2F1c2UgInN6IGJsYWggMj4gL2Rldi9udWxsIiBkb2VzIG5vdCBzdXBwcmVzcyBpdC4g IFN0YXJ0aW5nIGFnYWluIHdpdGgKK2xzeiBpbnN0ZWFkIG9mIHN6OgorCisgLiBzeiB0eHQgKGx6 c3QpOiBPSyAgNDEzS2NwcworIC4gc3ogYmluIChsenNiKTogT0sgIEZBSUxFRCAoKikKKyAuIHJ6 IHR4dCAobHpydCk6IE9LICAKKyAuIHJ6IGJpbiAobHpyYik6IE9LCisKKygqKSBTaWdoLiAgVXNp bmcgbHN6LCB3ZSBnZXQgImdhcmJhZ2UgY291bnQgZXhjZWVkZWQiIGVycm9ycyBhbmQgZXZlbnR1 YWwKK2ZhaWx1cmUuICBCdXQgdXNpbmcgcmVndWxhciBzeiwgd2UgZ2V0IHRoZSBleHRyYW5lb3Vz IG1lc3NhZ2UgdGhhdCBzdGFydHMKK3N6IG9uIHRoZSBmYXIgdGVuZCwgYW5kIHRoZSByZXN1bHRp bmcgZ2V0dHkgYmFiYmxlLgorCitCdXQgZXZlbiB3aXRob3V0IGNoYW5naW5nIHRoZSBjb2RlLCBp dCB3aWxsIHdvcmsgb25lIG1pbnV0ZSwgYW5kIHRoZW4gZmFpbAorY29uc2lzdGVudGx5IHRoZSBu ZXh0LiAgRm9yIGV4YW1wbGUsIEkgd2FzIGFibGUgdG8gc2VuZCBmaWxlcyB3aXRoIHN6CitzdWNj ZXNzZnVsbHkgb3ZlciBhbmQgb3ZlciwgYnV0IHdpdGggdGhlIGdldHR5IGJhYmJsZSBhdCB0aGUg ZW5kLiAgVGhlbiwKK2FmdGVyIHRyeWluZyBsc3ogYW5kIHRoZW4gZ29pbmcgYmFjayB0byBzeiwg ZXZlcnkgYXR0ZW1wdCBhdCBzZW5kaW5nIGEgZmlsZQorcXVpdHMgd2l0aCAiR290IFpDQU4iLiAg VGhlIGRpZmZlcmVuY2UgaGFzIHRvIGJlIHRoYXQgS2VybWl0IGFsd2F5cyBkb2VzIGF0CitsZWFz dCBzb21lIG1pbmltYWwgZW5jb2Rpbmcgb2YgQzAvQzEgY29udHJvbCBjaGFyYWN0ZXJzIHN1Y2gg TlVMIGFuZCBERUwgYW5kCitJQUMsIGFuZCBJIGRvdWJ0IHRoYXQgWm1vZGVtIGRvZXMuCisKK2h0 dHA6Ly96c3NoLnNvdXJjZWZvcmdlLm5ldC8gc2F5czoKKworICBJZiBmaWxlIHRyYW5zZmVyIGlz IGluaXRpYXRlZCBidXQgbmV2ZXIgY29tcGxldGVzIChpZSBhIGxpbmUgbGlrZSA6CisKKyAgICAg Qnl0ZXMgU2VudDogICAgICAwLyAgICA1MTMgICBCUFM6MCAgICAgICAgRVRBIDAwOjAwICBSZXRy eSAwOiBHb3QgWkNBTgorCisgICBjYW4gYmUgc2VlbiwgYnV0IHRyYW5zZmVyIG5ldmVyIGNvbXBs ZXRlcyksIGNoYW5jZXMgYXJlIHRoZSBwdHkvdHR5IG9uIG9uZQorICAgb2YgdGhlIHN5c3RlbXMg YXJlIG5vdCA4LWJpdCBjbGVhbi4gIChMaW51eCBpcyA4LWJpdCBjbGVhbiwgTmV0QlNEIGlzIG5v dCkuCisgICBVc2luZyB0aGUgLWUgKGVzY2FwZSkgb3B0aW9uIG9mIHJ6IHNob3VsZCBzb2x2ZSB0 aGlzIHByb2JsZW0uCisKK0l0IGRvZXNuJ3QsIGF0IGxlYXN0IG5vdCB3aXRoIGxyei4gIEFuZCB5 ZXMsIHRoZSByZWNlaXZpbmcgZW5kIGhhcHBlbnMgdG8gYmUKK05ldEJTRC4gIEJ1dCBpdCBsb29r cyBsaWtlIHRoZSB6c3NoIHBlb3BsZSBoYXZlIGJlZW4gZG93biB0aGlzIHJvYWQgdG9vLgorCitC dXQgd2l0aCByeiBhbmQgc3osIGl0IHdvcmtlZC4gIE9uY2UuICBUd2ljZS4gIFRocmVlIHRpbWVz LiAgQnV0IG9mIGNvdXJzZSwKK3dpdGggdGhlIGdldHR5IGJhYmJsZSBhdCB0aGUgZW5kLiAgVGhp cyBjYW4gYmUgdGFrZW4gY2FyZSBvZiBieSBkb2luZzoKKworICByeiAtZXEgOyBjYXQgPiBmb28K Kword2hpY2ggcHV0cyAic3ogMy43MyAxLTMwLTAzIGZpbmlzaGVkIiBhbmQgYW55IG90aGVyIG1l c3NhZ2VzIGluIGZvbyAoYnV0IHlvdQoraGF2ZSB0byB0eXBlIF5EIHRvIGZpbmlzaCB0aGUgY2F0 KS4gIFVzaW5nIHRoaXMgbWV0aG9kIEkgd2FzIGFsc28gYWJsZSB0bworc2VuZCBhbiA4SyBiaW5h cnkgZmlsZSB0aGF0IGNvbnRhaW5lZCBhIHRlc3QgcGF0dGVybiBvZiBhbGwgMjU2IHBvc3NpYmxl IGJ5dGUKK3ZhbHVlcy4gIFRoZW4gSSB0cmllZCBhIDNNQiBiaW5hcnkgZXhlY3V0YWJsZS4gIEFs bCBPSy4gIFNvIGhlcmUgd2UgZ28gYWdhaW46CisKKyAuIHN6IHR4dCAoenN0KTogT0sKKyAuIHN6 IGJpbiAoenNiKTogT0sKKyAuIHJ6IHR4dCAoenJ0KTogCisgLiByeiBiaW4gKHpyYik6IAorCitE b3dubG9hZGluZyBmYWlscyBhYm91dCBoYWxmd2F5IHRocm91Z2ggYSBmYWlybHkgbGFyZ2UgZmls ZS4gIEkgdHJpZWQgYW4KK2V2ZW4gYmlnZ2VyIGZpbGUsIGd1YXJhbnRlZWQgdG8gYmUgMTAwJSBB U0NJSTsgc2FtZSB0aGluZyAtLSBoYWxmd2F5Cit0aHJvdWdoOiAicno6IFBlcnNpc3RlbnQgQ1JD IG9yIG90aGVyIEVSUk9SIi4gIEJ1dCBpdCB3b3JrZWQgd2l0aCBhIHNtYWxsZXIKK3ZlcnNpb24g b2YgdGhlIHNhbWUgZmlsZSAoODJLIHZlcnN1cyAyTUIpLiAgVHJpZWQgYWdhaW4gd2l0aCB0aGUg YmlnZ2VyCit2ZXJzaW9uLCBpdCBmYWlsZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXQgZXhh Y3RseSB0aGUgc2FtZSBzcG90OiBieXRlCitudW1iZXIgMTA0ODMyMC4gIEJ1dCB0aGlzIGlzIGp1 c3QgQVNDSUkgdGV4dCBzbyBpdCBjYW4ndCBiZSBhIHRyYW5zcGFyZW5jeQorcHJvYmxlbS4gIFN1 YnN0aXR1dGluZyBhbm90aGVyIHBsYWluIEFTQ0lJIGZpbGUgb2YgdGhlIHNhbWUgc2l6ZSBidXQg dG90YWxseQorZGlmZmVyZW50IGNvbnRlbnRzLCBpdCBkb2Vzbid0IGZhaWwgKDIuMzZNQikuICBC YWNrIHRvIHRoZSBwcmV2aW91cyBmaWxlLCBpdAorZmFpbHMgYWdhaW4sIGJ1dCBpbiBhIGRpZmZl cmVudCBzcG90ICg4MzI5NjApLiAgU28gaXQncyBub3QgdG90YWxseQorZGV0ZXJtaW5pc3RpYy4K KworVG8gcm91bmQgdGhpbmdzIG91dCwgSSB0cmllZCBkb3dubG9hZGluZyB0aGUgYmluYXJ5IHRl c3QtcGF0dGVybiBmaWxlOyBpdCdzCitvbmx5IDhLLiAgVGhpcyBmYWlsZWQuCisKKyAgLTQsIC0t dHJ5LTRrICAgICAgICAgICAgICAgIGdvIHVwIHRvIDRLIGJsb2Nrc2l6ZQorICAtQiwgLS1idWZz aXplIE4gICAgICAgICAgICAgYnVmZmVyIE4gYnl0ZXMgKE49PWF1dG86IGJ1ZmZlciB3aG9sZSBm aWxlKQorICAtZSwgLS1lc2NhcGUgICAgICAgICAgICAgICAgZXNjYXBlIGFsbCBjb250cm9sIGNo YXJhY3RlcnMgKFopCisgIC1FLCAtLXJlbmFtZSAgICAgICAgICAgICAgICBmb3JjZSByZWNlaXZl ciB0byByZW5hbWUgZmlsZXMgaXQgYWxyZWFkeSBoYXMKKyAgLUwsIC0tcGFja2V0bGVuIE4gICAg ICAgICAgIGxpbWl0IHN1YnBhY2tldCBsZW5ndGggdG8gTiBieXRlcyAoWikKKyAgLWwsIC0tZnJh bWVsZW4gTiAgICAgICAgICAgIGxpbWl0IGZyYW1lIGxlbmd0aCB0byBOIGJ5dGVzIChsPj1MKSAo WikKKworVHJpZWQgYWdhaW4gd2l0aCAic3ogLUwgMjU2IC1CIDI1NiAtNGFlcSIuICBEb2Vzbid0 IGNoYW5nZSBhbnl0aGluZy4KKworTk9URTogTWFjIE9TIFggcnogMy43MyAxLTMwLTAzIGRvZXMg bm90IHN1cHBvcnQgLWUuCitOZXRCU0QgcnogMC4xMi4yMCBkb2VzIHN1cHBvcnQgLWUuCisKK1Ro dSAyMiBNYXIgMjAwNzogSXQgb2NjdXJzIHRvIG1lIHRoYXQgdHRwa3QoKSBtaWdodCBzdGlsbCBi ZSBhIHByb2JsZW07CittYXliZSBpdCdzIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gYW5kIG5vdCB0 aGUgcHR5IHRoYXQgaXMgbm90IHRyYW5zcGFyZW50Citlbm91Z2guICBUbyB0ZXN0IHRoaXMgdGhl b3J5IEkgZGlkICJzdHR5IHJhdyA7IHN0dHkgLWEiIGFuZCB0aGVuIGNvcGllZCBhbGwKK29mIHRo ZSBmbGFnIHZhbHVlcyBpbnRvIHR0cGt0IGluIHRoZSBCU0Q0NE9SUE9TSVggc2VjdGlvbjoKKwor IC4gcnogdHh0ICh6cnQpOiBPSyAoMi4zNk1CIGZpbGUsIHdvcmtlZCAyIG91dCBvZiAzIHRpbWVz KQorIC4gcnogYmluICh6cmIpOiAicno6IFBlcnNpc3RlbnQgQ1JDIG9yIG90aGVyIEVSUk9SIgor CitBIGxpdHRsZSBtb3JlIGZpZGRsaW5nIHdpdGggdGhlIGZsYWdzIGFuZCBJIGdvdCB0aGUgOEsg YmluYXJ5IHRlc3QgcGF0dGVybgordG8gU0VFTSB0byBkb3dubG9hZCBPSyAoaW4gdGhlIHNlbnNl IHRoYXQgcnogZ2F2ZSBhIDAgcmV0dXJuIGNvZGUpIGJ1dCB0aGUKK2ZpbGUgaXRzZWxmIHdhcyB0 cnVuY2F0ZWQsIGFsd2F5cyBhdCAyMjQuICBJZiBJIGNoYW5nZWQgdGhlIHRlc3QgcGF0dGVybgor ZmlsZSB0byBub3QgaW5jbHVkZSBhbnkgYnl0ZXMgd2l0aCB2YWx1ZSAyMjQgKDB4ZTApIG9yIDI1 NSAoMHhmZiksIHRoZQorZG93bmxvYWQgd29ya2VkLiAgU28gd2UgaGF2ZSBhIHRyYW5zcGFyZW5j eSBwcm9ibGVtIHNvbWV3aGVyZS4gIFRoZSBkZWJ1ZworbG9nIHNob3dzIHRoYXQgYWxsIGJ5dGUg dmFsdWVzIGFyZSBiZWluZyByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIGNvcnJlY3RseQorc28g dGhlIHByb2JsZW0gaGFzIHRvIG9jY3VyIHdoZW4gd2UgdHJ5IHRvIGZlZWQgdGhlbSB0byB0aGUg cHR5LgorCitCdXQgbm8gYW1vdW50IG9mIHR3aWRkbGluZyB3aXRoIHRoZSB0ZXJtaW9zIGZsYWdz IHNlZW1zIHRvIGxldCB0aGVzZQorY2hhcmFjdGVycyBwYXNzIHRocm91Z2guICBPZiBjb3Vyc2Us IHNpbmNlIHRoZXkgYXJlIG5vdCBpbiB0aGUgQzAgb3IgQzEKK2NvbnRyb2wgcmFuZ2UsICJzeiAt ZSIgZG9lc24ndCBxdW90ZSB0aGVtICh3aGljaCBpdCBkb2VzIGJ5IHByZWZpeGluZyB3aXRoCitD dHJsLVggYW5kIHRoZW4gYWRkaW5nIDB4NDAgdG8gdGhlIGJ5dGUgdmFsdWUgc28gKGUuZy4pIE5V TCBiZWNvbWVzIF5YQC4KK05vdGUgdGhhdCAyNTUgZG9lcyBub3QgY2F1c2UgcHJvYmxlbXMgYmVj YXVzZSBpdCBjb2luY2lkZXMgd2l0aCB0aGUgSUFDCitjaGFyYWN0ZXI7IHRoZSByZW1vdGUgVGVs bmV0IHNlcnZlciBkb3VibGVzIG91dGJvdW5kIElBQ3MsIGFuZCBLZXJtaXQncwordHRpbmMoKSB1 bmRvdWJsZXMgdGhlbSBhdXRvbWF0aWNhbGx5IChhcyB0aGUgbG9nIHNob3dzKS4KKworVHJ5aW5n IHRvIHNlbmQgYSBkaWZmZXJlbnQgZmlsZSAoYSBDLUtlcm1pdCBiaW5hcnkpIHNob3dzIHRoYXQg MjU1IGlzIHRoZQorcmVhbCBraWxsZXI7IHRoZSBmaWxlIGlzIHRydW5jYXRlZCB3aGVyZSB0aGUg Zmlyc3Qgb25lIGFwcGVhcnMgKGF0IGFib3V0Cis2SyksIGV2ZW4gdGhvdWdoIHNvbWUgMjI0J3Mg cHJlY2VkZSBpdC4gIEdvaW5nIGJhY2sgdG8gdGhlIHJlbW90ZS1tb2RlIHRlc3QsCitJIHNlZSB0 aGUgc2FtZSB0aGluZyBoYXBwZW5zIHdpdGggdGhlIGJpbmFyeSB0ZXN0LXBhdHRlcm4gZmlsZSwg aWYgSSBzZW5kIGl0Citmcm9tIEs5NSBkaXJlY3QgdG8gcnotdW5kZXItQy1LZXJtaXQtaW4tcmVt b3RlLW1vZGUuICBTbyBpdCBoYXMgbm90aGluZyB0bworZG8gd2l0aCBDLUtlcm1pdCBoYXZpbmcg YSBuZXR3b3JrIGNvbm5lY3Rpb24uICBZZXQgaWYgSSBzZW5kIHRoZSBzYW1lIGZpbGUKK2RpcmVj dCBmcm9tIEs5NSB0byByeiwgaXQgZ29lcyBPSyBhbmQgdGhlIHJlc3VsdCBpcyBub3QgdHJ1bmNh dGVkLCBzbyBpdCdzCitub3QgWm1vZGVtIGVpdGhlci4gIFRoZSBkYXRhIGFycml2ZXMgdG8gQy1L ZXJtaXQgaW50YWN0LCBzbyB0aGUgZmFpbHVyZSBpcworZGVmaW5pdGVseSBpbiB3cml0aW5nIGl0 IHRvIHRoZSByeiBwcm9jZXNzIHRocm91Z2ggdGhlIHNsYXZlIGFuZCBtYXN0ZXIgcHR5cy4KKwor QlVUIGlmIEkgc2VuZCB0aGUgc2FtZSBmaWxlIGZyb20gSzk1IHRvIHJ6LXVuZGVyLXR0cHR5LCB0 aGF0IHdvcmtzLiAgV2hhdCdzCit0aGUgZGlmZmVyZW5jZT8gIFN1cHBvc2UgSSBqdXN0IHRyYW5z cGxhbnQgdHRwdHkgbGl0ZXJhbGx5IGludG8gQy1LZXJtaXQuLi4KK0l0IG1ha2VzIG5vIGRpZmZl cmVuY2UuICBXaGVuIHJlY2VpdmluZyB0aGUgdGVzdC1wYXR0ZXJuLCBpdCB0cnVuY2F0ZXMgaXQK K2luIGV4YWN0bHkgdGhlIHNhbWUgcGxhY2UuCisKK1dlbGwsIGFsbCB0aGlzIGlzIG9uIE1hYyBP UyBYLiAgV2hhdCBpZiBJIG1vdmUgaXQgdG8gYSBkaWZmZXJlbnQgcGxhdGZvcm0/CitPSywgYnVp bGRpbmcgb24gU29sYXJpcyBhbmQgZm9sbG93aW5nIHRoZSBleGFjdCBzYW1lIHByb2NlZHVyZSwg dHRwdHljbWQoKQorZG9lc24ndCBldmVuIHVzZSB0aGUgbmV0d29yayBjb25uZWN0aW9uLiAgSSB0 aGluayB0aGF0J3MgYmVjYXVzZSByenN6IG9uCitTb2xhcmlzIGlzIGhhcmR3aXJlZCB0byB1c2Ug dGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGFuZCBjYW4ndCBiZQorcmVkaXJlY3RlZCwgZXZlbiBp biBhIHB0eT8KKworTW92ZWQgdG8gTmV0QlNELgorCisgLiBzeiB0eHQgKHpzdCk6IEZhaWxlZCAo IkdvdCBaQ0FOIikKKyAuIHN6IGJpbiAoenNiKTogCisgLiByeiB0eHQgKHpydCk6IE9LCisgLiBy eiBiaW4gKHpyYik6IAorCitXZWxsLCB0aGlzIGlzIGEgYmlnIG1lc3MuICBTZW5kaW5nIGRvZXNu J3Qgd29yayAob3Igc29tZXRpbWVzIGl0IGRvZXMgYnV0CityZXBvcnRzIHRoYXQgaXQgZGlkbid0 KS4gIFJlY2VpdmluZy4uLiAgd2VsbCwgYWN0dWFsbHkgaXQncyB0aGUgc2FtZSB0aGluZzsKK3Ro ZSBmaWxlIGlzIGNvbXBsZXRlbHkgdHJhbnNmZXJyZWQgYnV0IHRoZW4gdGhlIGZpbmFsIHByb3Rv Y29sIGhhbmRzaGFrZSBpcworbG9zdC4gIFRoZSBsb2NhbCBDLUtlcm1pdCByZXR1cm5zIHRvIGl0 cyBwcm9tcHQsIGJ1dCByeiBpcyBzdGlsbCBydW5uaW5nOgorCisgIFJldHJ5IDA6IEdvdCBUSU1F T1VUCisgIFJldHJ5IDA6IFRJTUVPVVQKKyAgUmV0cnkgMDogR290IFRJTUVPVVQKKyAgUmV0cnkg MDogVElNRU9VVAorICBSZXRyeSAwOiBHb3QgVElNRU9VVAorICBSZXRyeSAwOiBUSU1FT1VUCisg IFJldHJ5IDA6IEdvdCBUSU1FT1VUCisgIFJldHJ5IDA6IFRJTUVPVVQKKyAgUmV0cnkgMDogR290 IFRJTUVPVVQKKyAgUmV0cnkgMDogVElNRU9VVAorICBSZXRyeSAwOiBHb3QgVElNRU9VVAorCitJ IGRvbid0IHNlZSBob3cgdGhhdCBpcyBldmVuIHBvc3NpYmxlLiAgRXZlbiBhZnRlciBJIGV4aXQg ZnJvbSBLZXJtaXQgdGhlCittZXNzYWdlcyBrZWVwIGNvbWluZywgZXZlbiB0aG91Z2ggcHMgZG9l c24ndCBzaG93IHRoZSByeiBwcm9jZXNzIGFueXdoZXJlLgorTG9va2luZyBhdCB0aGUgY29kZSwg SSBzZWUgYSBwbGFjZSB3aGVyZSBlbmRfcHR5KCkgd2FzIHN0aWxsIGNvbW1lbnRlZCBvdXQKK2Zy b20gdGhlIHR0cHR5LmMgZXBpc29kZSwgSSB1bmNvbW1lbnRlZCBpdC4gIEJ1dCBzdGlsbDoKKwor IC4gc3ogdHh0ICh6c3QpOiBGYWlscyAoIkdvdCBaQ0FOIikKKyAuIHN6IGJpbiAoenNiKTogRmFp bHMgaW5zdGFudGx5IChidXQgd2l0aCBubyBkaWFnbm9zdGljKQorIC4gcnogdHh0ICh6cnQpOiBP SworIC4gcnogYmluICh6cmIpOiBGYWlscyB3aXRoIHRvbnMgb2YgIkJhZCBDUkMiLCAiR2FyYmFn ZSBDb3VudCBleGNlZWRlZCIKKworQ29uY2x1c2lvbiBmb3IgdGhlIGRheTogSSB0aGluayB0aGlz IGlzIGhvcGVsZXNzLiAgRXZlbiBpZiBJIGNhbiBnZXQgaXQgdG8KK3dvcmsgc29tZXdoZXJlLCB0 aGUgcmVzdWx0cyBkZXBlbmQgb24gdGhlIGV4YWN0IFptb2RlbSBzb2Z0d2FyZSwgaG93IGl0IHVz ZXMKK3N0ZGluL291dCB2cyBzdGRlcnIgdmVyc3VzIGdldHRpbmcgaXRzIG93biBub25yZWRpcmVj dGFibGUgZmlsZSBkZXNjcmlwdG9yLAordmVyc3VzIHRoZSBabW9kZW0gdmVyc2lvbiBvbiB0aGUg b3RoZXIgZW5kIGFuZCB3aGljaCBvcHRpb25zIGFyZSBhdmFpbGFibGUKK29uIGVhY2gsIHZlcnN1 cyB0aGUgcHR5IGFuZCBzZWxlY3QoKSBxdWlya3Mgb24gZWFjaCBwbGF0Zm9ybSwgYW5kIG9uIGFu ZCBvbi4KK0l0IHdpbGwgYmUgc28gaGFyZCB0byBleHBsYWluIGFuZCB0byBzZXQgdXAgdGhhdCBu b2JvZHkgd291bGQgZXZlciB1c2UgaXQuCitJdCB3b3VsZCBiZSBiZXR0ZXIgdG8ganVzdCBpbXBs ZW1lbnQgWm1vZGVtIGludGVybmFsbHkuCisKK0ZyaSAyMyBNYXIgMjAwNzogV2VudCBiYWNrIHRv IHRoZSBzbWFsbCB0ZXN0IHByb2dyYW0sIHR0cHR5LmMuICBUcmllZAorc2V0dGluZyBib3RoIHRo ZSBtYXN0ZXIgYW5kIHRoZSBzbGF2ZSBwdHkgdG8gcmF3bW9kZSwgZXZlbiB0aG91Z2ggSSBoYXZl CituZXZlciBzZWVuIGFueSBvdGhlciBzb2Z0d2FyZSB0aGF0IGRpZCB0aGlzLiAgSSBoYWQgaXQg cmVjZWl2ZSB0aGUgYmluYXJ5Cit0ZXN0IHBhdHRlcm4gZmlsZTsgaXQgd29ya2VkLiAgSSBtYWRl IGEgYmlnZ2VyIHRlc3QtcGF0dGVybiBmaWxlLCAzTUIsCitjb250YWluaW5nIHNpbmdsZSwgZG91 YmxlLCBhbmQgdHJpcGxlIGNvcGllcyBvZiBlYWNoIGJ5dGUgaW4gYnl0ZSBvcmRlciBhbmQKK2lu IHJhbmRvbSBvcmRlciwgdGhpcyBvbmUgd2FzIGFjY2VwdGVkIHRvby4KKworU28gaXQgd291bGQg c2VlbSB0aGF0IHRoZSBja3VwdHkuYyBtb2R1bGUgaXMgc29tZXRoaW5nIHRvIGF2b2lkIGFmdGVy IGFsbC4KK0l0J3MgZnVsbCBvZiBzdHVmZiBJIGRvbid0IHVuZGVyc3RhbmQgYW5kIHByb2JhYmx5 IHNob3VsZCBub3QgdW5kby4gIFNvCitjaGFuZ2luZyBDLUtlcm1pdCdzIHR0cHR5Y21kKCkgdG8g bWFuYWdlIGl0cyBvd24gcHR5IGFnYWluLCB1c2luZyBvcGVucHR5KCkKKyh3aGljaCBpcyBub3Qg cG9ydGFibGUpLCBJIGdvdCBpdCBhbGwgdG8gd29yayBpbiByZW1vdGUgbW9kZTogS2VybWl0Cit0 ZXh0L2JpbmFyeSB1cC9kb3duIGFuZCBabW9kZW0gdGV4dC9iaW5hcnkgdXAvZG93bi4gIEJ1dCBp biBsb2NhbCBtb2RlIG9uCit0aGUgY2xpZW50IHNpZGUgb2YgYSBUZWxuZXQgY29ubmVjdGlvbi4u LgorCisgIHpzdDogT0ssIGJ1dCB3ZSBzdGlsbCBnZXQgdGhlIGdldHR5IGJhYmJsZSBhdCB0aGUg ZW5kIHRoYXQgc3RhcnRzIHN6LgorICB6c2I6IE9LLCBkaXR0by4gIFRoaXMgaXMgd2l0aCB0aGUg M01CIHRlc3QtcGF0dGVybiBmaWxlLgorICB6cnQ6IE5vdCBPSyAtLSAiUGVyc2lzdGVudCBDUkMg b3Igb3RoZXIgRVJST1IiCisgIHpyYjogTm90IE9LIC0tIGdvdCB0aGUgY3V0b2ZmIGF0IDIyNCBh Z2FpbiAiUGVyc2lzdGVudCBDUkMgb3Igb3RoZXIgRVJST1IiCisKK0l0J3MgY2xvc2UuICBCdXQg YWN0dWFsbHkgdGhpcyB3YXMgc3RpbGwgd2l0aCBVU0VfQ0tVUFRZX0MgZGVmaW5lZC4gIFdoZW4g SQordW5kZWZpbmVkIGl0LCBpdCB3YXMgYmFjayB0byBiZWluZyB0b3RhbGx5IGJyb2tlbi4gIFN0 YXJ0IG92ZXIuICAoQ2hlY2sgdGhlCituZXcgY2ZtYWtlcmF3KCkgY29kZS4pCisKK1R1ZSAyNyBN YXIgMjAwNzogU3RhcnRpbmcgb3Zlci4gIEJhY2sgdG8gdHRwdHkuYy4gIExldCdzIHZlcmlmeSwg VkVSWQorQ0FSRUZVTExZLCB0aGF0IGl0IHJlYWxseSBkb2VzIHdvcmssIHVzaW5nIHRoZSBtb3N0 IHN0cmVzc2Z1bCBvZiB0aGUgZm91cgordGVzdHM6IHNlbmRpbmcgdGhlIGJpZyAoMy4yNzY4TUIp IGJpbmFyeSB0ZXN0IHBhdHRlcm4gZnJvbSBLOTUgaW50byByegordGhyb3VnaCB0dHB0eSwgbG9n Z2luZyBldmVyeXRoaW5nLiAgdHRwdHkgZGVmaW5pdGVseSByZWNlaXZlcyB0aGUgYmlnIGZpbGUK K3Ntb290aGx5IHdpdGggbm8gZXJyb3JzIG9yIGhpY2N1cHMgd2hlbiBJIGhhdmUgaXQgc2V0IHRv IHVzZSB0aGUgbWFzdGVyIHNpZGUKK29mIHRoZSBwdHkgZm9yIGkvby4gIFRoZSBhcHBsaWNhdGlv biBwcm9ncmFtIChabW9kZW0gaW4gdGhpcyBjYXNlKSBydW5zIG9uCit0aGUgc2xhdmUsIGFuZCB0 aGUgbmV0d29yayBhbmQvb3IgY29udHJvbCBwcm9ncmFtIGNvbW11bmljYXRlcyB3aXRoIHRoZQor bWFzdGVyLiAgVGhpcyBpbXBsaWVzIHRoYXQgWm1vZGVtIGNvbnRyb2xzIHRoZSB0ZXJtaW5hbCBt b2RlcyBvZiB0aGUgc2xhdmUsCithbmQgdHRwdHkgc2hvdWxkIGJlIGNvbmNlcm5lZCB3aXRoIHRo b3NlIG9mIHRoZSBtYXN0ZXIuICBEb2luZyBpdCB0aGlzIHdheQoraW4gdHRwdHkgY29uZmlybXMg dGhpcy4KKworRmluZS4gIEJ1dCBpZiBJIHRlbGwgdHRwdHkgdG8gU0VORCBhIGZpbGUgd2l0aCBz eiwgbm90aGluZyBoYXBwZW5zLiAgRGl0dG8KK3dpdGggbHN6LiAgU2VsZWN0IHRpbWVzIG91dCB3 YWl0aW5nIGZvciBpbnB1dCBmcm9tIHRoZSBwdHkuICBCdXQgaWYgSQorbWFudWFsbHkgdGVsbCBL OTUgdG8gUkVDRUlWRSAvUFJPVE9DT0w6Wk1PREVNIGl0IHdvcmtzIE9LLiAgU29tZWhvdyBzeidz Citpbml0aWFsIEIwMDAwMDAgc3RyaW5nIGlzIGJlaW5nIHN3YWxsb3dlZCBzb21ld2hlcmUsIGFu ZCBpdCdzIHdhaXRpbmcgZm9yCithIHJlcGx5IGZyb20gdGhlIHJlY2VpdmVyLiAgc2lnaC4uLiAg QnV0ICJ0dHB0eSBna2VybWl0IC1zIGZpbGVuYW1lIiB3b3JrcworZmluZS4gIFdoYXQncyB0aGUg ZGlmZmVyZW5jZT8gIEl0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggc3Rkb3V0IHZzIHN0ZGVycjsK K3N6IGlzIG5vdCB3cml0aW5nIHRvIHN0ZGVyciBhdCBhbGwuICBJcyBpdCBzb21lIHRpbWluZyB0 aGluZyBiZXR3ZWVuIHRoZQorZm9ya3M/ICBBaGEuICBJdCdzIHRoYXQgSSBjaGFuZ2UgdGhlIG1v ZGVzIG9mIHRoZSBwdHkgbWFzdGVyIGluIG9uZSBmb3JrCit3aGlsZSBzeiBpcyBhbHJlYWR5IHN0 YXJ0aW5nIGluIHRoZSBvdGhlciBmb3JrLgorCitPSywgZ29vZCwgbm93IGZvciB0aGUgZmlyc3Qg dGltZSB3ZSBoYXZlIEtlcm1pdCBhbmQgWm1vZGVtIGJvdGggYWJsZSB0bwordXBsb2FkIGFuZCBk b3dubG9hZCBhIGxhcmdlIHdvcnN0LWNhc2UgYmluYXJ5IHRlc3QtcGF0dGVybiBmaWxlLi4uIGlu CityZW1vdGUgbW9kZS4gIE5vdyB0YWtpbmcgdG9kYXkncyBsZXNzb25zIGFuZCBmaXR0aW5nIHRo ZW0gYmFjayBpbnRvCitDLUtlcm1pdCBzbyBJIGNhbiB0cnkgaXQgbG9jYWwgbW9kZS4uLgorCitV c2luZyBHLUtlcm1pdCBhcyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wsIGZpcnN0IGluIHJlbW90ZSBt b2RlLi4uICBBbGwgZ29vZDoKK3RleHQvYmluYXJ5IHVwL2Rvd24uICBUaGUgImhhbHRpbmcgcHJv YmxlbSIgaXMgc29sdmVkIGJ5IFNJR0NITEQsIHdoaWNoCitjYXRjaGVzIGZvcmsgdGVybWluYXRp b24gaW5zdGFudGx5IGFuZCBsZXRzIHR0cHR5Y21kKCkga25vdyB0aGVyZSBpcyBubyBtb3JlCitw dHkuICBabW9kZW06CisKKyAgenN0OiBPSworICB6c2I6IE9LCisgIHpydDogT0sKKyAgenJiOiBP SworCitUaGF0J3MgYSBmaXJzdC4gIE5leHQsIHJlcGVhdCBpbiBsb2NhbCBtb2RlLCBpbiB3aGlj aCBDLUtlcm1pdCBpcyB0aGUgY2xpZW50CithbmQgaGFzIG1hZGUgYSBUZWxuZXQgY29ubmVjdGlv biB0byBhbm90aGVyIGhvc3Qgb3ZlciBhIHNlY3VyZSAoS2VyYmVyb3MgVikKK2Nvbm5lY3Rpb246 CisKKyAga3N0OiBPSyAgICAgenN0OiAuLi4KKyAga3NiOiBPSworICBrcnQ6IE9LICAKKyAga3Ji OiBPSworICAKK0l0IHNlZW1zIHdlIGNhbiBuZXZlciBlbmQgYSBkYXkgb24gYSBoaWdoIG5vdGUu ICBTb21laG93IEkgc2VlbSB0byBoYXZlCiticm9rZW4gcmVndWxhciBpbnRlcm5hbCBLZXJtaXQg cHJvdG9jb2wgdHJhbnNmZXJzIG92ZXIgZW5jcnlwdGVkIGNvbm5lY3Rpb25zCistLSB0aGUgZW4v ZGVjcnlwdGlvbiBlbmdpbmUgbG9zZXMgc3luYy4gIEJ1dCB0aGV5IHN0aWxsIHdvcmsgT0sgb3Zl ciBhCitjbGVhci10ZXh0IFRlbG5ldCBjb25uZWN0aW9uLgorCitUb2RheSdzIGNvZGUgaW4gfi84 MC9kdWxjZS50YXIgKDI3IE1hciAyMDA3KS4KKworQWRkZWQgbWFrZWZpbGUgdGFyZ2V0IHNvbGFy aXMxMGcrb3BlbnNzbC4gIEdhdGhlcmVkIGFsbCB0aGUgc3RhbmRhcmQgQ0ZMQUdTCitmb3IgU29s YXJpcyBpbnRvIGNkY2RlYi5oIHNvIHRoZXkgZG9uJ3QgaGF2ZSB0byBiZSBpbmNsdWRlZCBpbiBl dmVyeSBzaW5nbGUKK21ha2VmaWxlIHRhcmdldCBmb3IgU29sYXJpcy4gIE9uIGxvY2FsIFNvbGFy aXMgMTAgaG9zdCBPcGVuU1NMIGlzIGluCisvb3B0L29wZW5zc2wtMC45LjhlLy4gIFRyaWVkIHRo ZSBuZXcgbWFrZWZpbGUgdGFyZ2V0LCB3b3JrcyBPSy4gIEFsc28gbWFkZQorc29sYXJpczEwK29w ZW5zc2wgZm9yIFN1biBDQywgYnV0IGNvdWxkbid0IHRlc3QgaXQgYmVjYXVzZSBJIGNhbid0IGZp bmQgYW55CitTb2xhcmlzIDEwIGhvc3QgdGhhdCBoYXMgU3VuIENDLiAgQnVpbHQgd2l0aCBnY2Mg YXQgYW5vdGhlciBzaXRlIHRoYXQgaGFzCitPcGVuU1NMIDAuOS44Zi1kZXYsIGFsbCBPSy4gIGNr Y2RlYi5oLCBtYWtlZmlsZSwgMjQgSnVuIDIwMDcuCisKK0l0IG9jY3VycyB0byBtZSB0aGF0IEtl cm1pdCB0cmFuc2ZlcnMgb24gc2VjdXJlIGNvbm5lY3Rpb25zIG1pZ2h0IGhhdmUgYmVlbgorYnJv a2VuIGJ5IHRoZSBjaGFuZ2VzIEkgbWFkZSBiYWNrIGluIEZlYnJ1YXJ5IHRvIHR0aW5sKCkgZm9y IEpvaG4gRHVubGFwLgorSGVyZSwgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBpbnZva2UgbXl1bnJk KCkgdG8gcHVzaCBhIGJ5dGUgYmFjayBpbnRvIHRoZQoraW5wdXQgcXVldWUsIGFuZCB0aGVyZSBp cyBhbHNvIHNvbWUgZnVubnkgYnVzaW5lc3Mgd2l0aCAiY3NhdmUiLCB3aGljaAorY2hhbmdlZCwg YW5kIHdoaWNoIGFuIG9sZCBjb21tZW50IG5vdGVzIHRoYXQgaXQgaGFzIHRvIGJlIHRyZWF0ZWQg c3BlY2lhbGx5Cit3aGVuIGVuY3J5cHRpbmcuICBTbyBpdCBjb3VsZCBiZSB0aGF0IHRoZSBicm9r ZW4gS2VybWl0IHRyYW5zZmVyIGhhcyBub3RoaW5nCit0byBkbyB3aXRoIHRoZSB3b3JrIG9uIGV4 dGVybmFsIHByb3RvY29scywgYW5kIHRoYXQgcHV0dGluZyBiYWNrIHRoZQorcHJldmlvdXMgdHRp bmwoKSB3aWxsIGZpeCBpdC4gIEJ1dCBub3cgSSBjYW4ndCBzZWVtIHRvIG1ha2UgYSBLZXJiZXJp emVkCitjb25uZWN0aW9uIGZyb20gUGFuaXggdG8gUGFuaXgsIGV2ZW4gdGhvdWdoIEkgY2FuIG1h a2Ugb25lIGZyb20gQ29sdW1iaWEgdG8KK1Bhbml4LiAgVGhpcyBtZWFucyBJIGhhdmUgdG8gYnVp bGQgYSBLZXJiZXJpemVkIGJpbmFyeSBmcm9tIHRoZSBjdXJyZW50Citzb3VyY2UgY29kZSBvbiBl aXRoZXIgU29sYXJpcyBvciBNYWMgT1MgWC4gIFRyeWluZyBTb2xhcmlzCitmaXJzdC4uLiBbfi9z b2xhcmlzOWs1L21rNS5zaF0gVGhpcyBkaWRuJ3Qgd29yayB0aGUgZmlyc3QgdGltZSBkdWUgdG8K K3VuZGVmaW5lZCBrcmI1X2luaXRfZXRzLCB3aGljaCBpcyByZWZlcmVuY2VkIGlmIE1JVF9DVVJS RU5UIGlzIG5vdCBkZWZpbmVkCisoaXQgc2hvdWxkIGJlIGZvciBLZXJiZXJvcyA1IDEuMDUgYW5k IGxhdGVyIGFuZCB3ZSBoYXZlIDEuNDIgaGVyZSksIHRyaWVkCithZ2FpbiB3aXRoIC1ETUlUX0NV UlJFTlQ9MS4uLiAgTm9wZSwgdGhhdCBvbmUgdG90YWxseSBibGV3IHVwIGluIGNrX2NycC5jLgor TGF0ZXIsIEplZmYgc2F5cyBrcmI1X2luaXRfZXRzIGlzIGEgbm8tb3AgaW4gS2VyYmVyb3MgMS40 LnggYW5kIGxhdGVyLAorc28gSSBhZGRlZCBhbiAjaWZkZWYgKE5PX0tSQjVfSU5JVF9FVFMpIGZv ciBza2lwcGluZyBpdDsgbm93IGl0IGJ1aWxkcyBhbmQKK3J1bnMgT0suICBja3VhdGguYywgbWFr ZWZpbGUsIDkgSnVsIDIwMDcuCisKK01lYW53aGlsZSwgdXNpbmcgQy1LZXJtaXQgb24gTWFjIE9T IFgsIHdoaWNoIG1ha2VzIHRoZSBLZXJiZXJpemVkIGNvbm5lY3Rpb24KK2p1c3QgZmluZSwgYnV0 IHN0aWxsIGhhcyB0aGUgcHJvYmxlbSB0cmFuc2ZlcnJpbmcgZmlsZXMgb3ZlciBpdC4gIFBhY2tl dCBsb2cKK3Nob3dzOgorCisgIHMtMDAtMDEtXkE5IFN6LyBALSNZM35aISB6MF9fX0YiVTFAQV5N IAorICByLTAwLTAxLV5BOSBZfi8gQC0jWTN+Xj5KKTBfX19KIlUxQEkKKyAgcy0wMS0wMS1eQSgh RngueCkoVl5NCisgIHIteHgtMDgtPHRpbWVvdXQ+CisgIFMtMDEtMDgtXkEoIUZ4LngpKFZeTQor ICByLXh4LTA4LTx0aW1lb3V0PgorICBTLTAxLTA4LV5BKCFGeC54KShWXk0KKyAgci14eC0xNi08 dGltZW91dD4KKworTm90ZSB0aGF0IFMgcGFja2V0IGlzIHNlbnQsIHJlY2VpdmVkLCBhbmQgQWNr J2QgT0suICBUaGUgRiBwYWNrZXQgaXMgc2VudCBidXQKK2lzIG5ldmVyIEFjaydkLiAgVHJpZWQg dGhpcyBzZXZlcmFsIHRpbWVzIGFuZCBub3RpY2VkIHRoYXQgaXQncyBqdXN0CityZWNlaXZpbmcg dGhhdCBpcyBzY3Jld2VkIHVwLCBub3Qgc2VuZGluZy4gIEFmdGVyIF5DJ2luZyBvdXQgb2YgdGhl Cit0cmFuc2ZlciwgSSBjYW4gc3RpbGwgdHlwZSBjb21tYW5kcywgYW5kIHRoZXkgYXJlIGV4ZWN1 dGVkIG9uIHRoZSBmYXIgZW5kLAorYnV0IHRoZSByZXN1bHRzIGNvbWluZyBiYWNrIGFyZSBnaWJi ZXJpc2guICBNb24gSnVsIDkgMTY6MDg6MjIgMjAwNyAoY29tZQorYmFjayB0byB0aGlzIGxhdGVy Li4uIHN1YnN0aXR1dGUgRGV2LjI3IHR0aW5sIGZvciBjdXJyZW50IG9uZSBhbmQgc2VlIGlmCit0 aGUgcHJvYmxlbSBnb2VzIGF3YXksIGFuZCBpZiBzbywgY29uZGl0aW9uYWxpemUgdGhlIG5ldyBj b2RlIGZvciBjbGVhci10ZXh0Citjb25uZWN0aW9ucykuCisKK0J1aWx0IEMtS2VybWl0IHdpdGgg S2VyYmVyb3MgNSBvbiBTb2xhcmlzIHdpdGggYSB2ZXJzaW9uIG9mIGNrdXRpby5jIHRoYXQKK3Vz ZXMgdGhlIG9sZCB0dGlubCgpIGFuZCB0cmFuc2ZlcnJlZCBhIGZpbGUgT0sgb3ZlciBhIEtlcmJl cml6ZWQgY29ubmVjdGlvbi4KK1NvIG5vdyBpdCdzIGp1c3QgYSBtYXR0ZXIgb2YgcmVjb25jaWxp bmcgdGhlIG9sZCBhbmQgbmV3IHR0aW5sLiAgVGhlIGVhc2llc3QKK3dheSB0byBkbyB0aGlzIGlz IHRvIGhhdmUgbmV3IHR0aW5sKCkgY2hhaW4gdG8gb2xkIHR0aW5sKCkgaWYgdGhlIGNvbm5lY3Rp b24KK2lzIGVuY3J5cHRlZCwgd2hpY2ggaXMgd2hhdCBJIGRpZCBhbmQgaXQgd29ya3MgZmluZS4g IEF0IHNvbWUgcG9pbnQgdGhlIHR3bwordmVyc2lvbnMgb2YgdHRpbmwoKSBzaG91bGQgYmUgcmVj b25jaWxlZC4gIGNrdXRpby5jLCAxMiBBdWcgMjAwNy4KKworVGhlcmUgd2FzIGEgZnVuY3Rpb24s IGlzbGluaygpLCB1c2VkIGluIG9ubHkgb25lIHBsYWNlIChja3V1czYuYykgdGhhdCBoYWQKK3Ro ZSBzYW1lIG5hbWUgYXMgYSBjb21tb25seSB1c2VkIHNjYWxhciB2YXJpYWJsZSwgYW5kIGl0IHdh cyBtaXNzaW5nIGEKK3Byb3RvdHlwZS4gIENoYW5nZWQgaXRzIG5hbWUgdG8gaXNhbGluaygpIGFu ZCBhZGRlZCB0aGUgcHJvdG90eXBlIChVbml4Citvbmx5KSwgY2t1dXM2LmMsIGNrdWZpby5jLCBj a2NkZWIuaC4gMTIgQXVnIDIwMDcuCisKK1JldmlzaXRpbmcgdGhlIEFTQ0lJIGFuZCBCSU5BUlkg dG9wLWxldmVsIGNvbW1hbmRzLCB3aGljaCBhcmUgc3VwcG9zZWQgdG8KK2JlIGxpa2UgaW4gb3Ro ZXIgRlRQIGNsaWVudHMsIGJ1dCBkb24ndCBzZWVtIHRvIGhhdmUgYW55IGVmZmVjdC4gIEkgYWRk ZWQgYQorbmV3IHJvdXRpbmUgdG8gdGhlIEZUUCBtb2R1bGUsIGRvZnRwZ2xvYmFsdHlwZSgpLCB0 aGF0IHNldHMgdGhlIGdsb2JhbCwKK3N0aWNreSwgcGVybWFuZW50IHRyYW5zZmVyIG1vZGUgKEFT Q0lJIG9yIEJJTkFSWSkgKFRFTkVYIGNvdWxkIGJlIGFkZGVkIHRvCitpZiBhbnlib2R5IGFza3Mp LiAgVGhlc2UgY29tbWFuZHMgKG5vdyB0aGF0IHRoZXkgd29yaykgYXJlIGRpZmZlcmVudCBmcm9t CitTRVQgRlRQIFRZUEUgeyBBU0NJSSwgQklOQVJZIH0sIHdoaWNoIHNldCB0aGUgKmRlZmF1bHQq IHRyYW5zZmVyIG1vZGUgd2hlbgorYXV0b21hdGljIHN3aXRjaGluZyBmYWlscyBmb3IgYSBnaXZl biBmaWxlLiAgY2t1dXNyLmMsIGNrY2Z0cC5jLCAxMiBBdWcgMjAwNy4KKyAobm90aWZ5OiBNYXR0 IDxtbGlzdEBjbWNmbGV4LmNvbT4pCisKK0V2ZW4gdGhvdWdoIHRoZSBjb2RlIGhhc24ndCBjaGFu Z2VkLCBzdWRkZW5seSB3ZSdyZSBnZXR0aW5nOgorCisgICJja3V1c3guYyIsIGxpbmUgNTY4Mjog d2FybmluZzogaW1wbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb246IHRnZXRlbnQKKyAgImNrdXVz eC5jIiwgbGluZSA2MTgzOiB3YXJuaW5nOiBpbXBsaWNpdCBmdW5jdGlvbiBkZWNsYXJhdGlvbjog dGdldHN0cgorICAiY2t1dXN4LmMiLCBsaW5lIDYyNjI6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0 aW9uIGRlY2xhcmF0aW9uOiB0cHV0cworICAiY2t1dXN4LmMiLCBsaW5lIDYyNjY6IHdhcm5pbmc6 IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiB0Z290bworCitpbiBja3V1c3guYyBvbiBT b2xhcmlzIDkuICA8Y3Vyc2VzLmg+IGlzIHN0aWxsIGluIC91c3IvaW5jbHVkZSwgZGF0ZWQgMjAw Mi4KK0EgcXVpY2sgc2VhcmNoIHNob3dzIHRoZSBtaXNzaW5nIGZ1bmN0aW9ucyBhcmUgaGlkaW5n IGluIDx0ZXJtLmg+LCB3aGljaAordW50aWwgbm93IHdhcyBpbmNsdWRlZCBvbmx5IGluIExpbnV4 LiAgQWRkZWQgYSBVU0VfVEVSTV9IIGNsYXVzZS4gIE5vLCB0aGF0Citkb2Vzbid0IGhlbHAsIHRo ZSBwcm90b3R5cGVzIGFyZSBub3Qgc2VsZWN0ZWQgYXQgY29tcGlsZSB0aW1lOyB0aGVyZSBhcmUK KyNpZmRlZnMgaW4gdGhhdCBmaWxlIHRoYXQgc2tpcCBvdmVyIHRoZXNlIHByb3RvdHlwZXMuICBJ IGhhZCB0byBwdXQgdGhlbSBpbgordGhlIGNvZGUgdW5kZXIgI2lmZGVmIEJVRzk5OS4uI2VuZGlm IChJIGNvdWxkIGhhdmUgdXNlZCBhIGxvbmdlciBuYW1lIGxpa2UKKyNpZmRlZiBBRERfUFJPVE9U WVBFU19GT1JfQ1VSU0VTX0ZVTkNUSU9OUywgYnV0IHRoYXQgd291bGQgbm90IGJlIHBvcnRhYmxl KS4KK2NrdXVzeC5jLCAxMiBBdWcgMjAwNy4KKworQWxzbzoKKworICAiY2t1dXN4LmMiLCBsaW5l IDkyMzI6IHdhcm5pbmc6IGltcGxpY2l0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uOiBjcmVhdAorCitU aGlzIGlzIGNhbGxlZCBpbiB0aGUgSUtTRCBkYXRhYmFzZSBjb2RlLCB1c2VkIGZvciBnZXR0aW5n IGEgbG9ja2ZpbGUuCitjcmVhdCgpIGlzIGEgVW5peGlzbSBpbiBjb2RlIHRoYXQgaXMgc3VwcG9z ZWQgdG8gYmUgcG9ydGFibGUuICBCdXQgSUtTRCBvbmx5CitydW5zIG9uIFVuaXggYW5kIFdpbmRv d3MsIHNvIEkgYXNzdW1lIHRoZSBXaW5kb3dzIEMgbGlicmFyeSBoYXMgYSBjcmVhdCgpCitmdW5j dGlvbi4gIEFueXdheSwgc3VkZGVubHkgdGhlIFNvbGFyaXMgaGVhZGVyIGZpbGVzIHNlZW0gdG8g aGF2ZSBibG9ja2VkCit3aGF0ZXZlciBwYXRoIHByZXZpb3VzbHkgZXhpc3RlZCB0byB0aGUgY3Jl YXQoKSBwcm90b3R5cGUgKHdoaWNoIGlzIGluCis8ZmNudGwuaD4pLCBzbyBJIGFkZGVkIGFuICNp bmNsdWRlIGluIHRoZSBhcHByb3ByaWF0ZSBzcG90LiAgY2t1dXN4LmMsCisxMiBBdWcgMjAwNy4K KworS2VybWl0IGZ1bmN0aW9ucyBmb3IgY29udmVydGluZyB0aGUgbnVtYmVyIGJhc2UgLS0gXGZy YWRpeCgpLCBcZmhleGlmeSgpLAorXHVuZmhleGlmeSgpIC0tIGRpZCBub3Qgd29yayB3aXRoIGJp ZyBudW1iZXJzOyBja3JhZGl4KCkgd2FzIG1pc3NlZCBpbiB0aGUKK0NLX09GRl9UIGNvbnZlcnNp b24uICBGaXhlZCBpbiBja2NsaWIuYywgMTIgQXVnIDIwMDcuCisKK1VwZGF0ZWQgdGhlIGhlbHAg dGV4dCBmb3IgQVNDSUksIEJJTkFSWSwgYW5kIFNFVCBGVFAgVFlQRSB0byBjbGFyaWZ5IHRoZQor c2VtYW50aWNzLiAgY2t1dXMyLmMsIGNrY2Z0cC5jLCAxMiBBdWcgMjAwNy4KKworRXJyb3IgbWVz c2FnZXMgd2VyZSBwcmludGVkIHVwb24gZmFpbHVyZSB0byBvcGVuIGFueSBvZiB0aGUgZm91ciBs b2cgZmlsZSwKK2V2ZW4gd2l0aCBTRVQgUVVJRVQgT04uICBGaXhlZCBpbiBja3V1czQuYywgMTIg QXVnIDIwMDcuCisKK0J1aWx0IE9LIG9uIE5ldEJTRCAxLjNfUkMzLiAgVHJpZWQgdG8gYnVpbGQg c2VjdXJlIHZlcnNpb24gYnV0IHRoZSBsaWJyYXJpZXMKK2hhZCBkaXNhcHBlYXJlZC4gIDEzIEF1 ZyAyMDA3LgorCitCdWlsdCBPSyBvbiBNYWMgT1MgWCAxMC40LjkuICBUcmllZCB0aGUgc2VjdXJl IHZlcnNpb24sIG1hY29zeDEwLjQra3JiNStzc2wuCitIZXJlIHdlIGdldCB0aGUgdXN1YWwgcGls ZSBvZiAicG9pbnRlciB0YXJnZXRzIGluIHBhc3NpbmcgYXJndW1lbnQgMSBvZgorKGZ1bmN0aW9u IG5hbWUpIGRpZmZlciBpbiBzaWduZWRuZXNzIiwgcmVnYXJkaW5nIHNlY3VyaXR5IGZ1bmN0aW9u cywgYnV0IGl0CitidWlsdCBPSy4gIDEzIEF1ZyAyMDA3LgorCitSZWNvbmNpbGluZyB0aGUgdHdv IHR0aW5sJ3MuLi4gIE9uIGVuY3J5cHRlZCBjb25uZWN0aW9ucyBteXJlYWQoKSByZXR1cm5zCitl bmNyeXB0ZWQgYnl0ZXM7IHR0aW5sKCkgaGFzIHRvIGRlY3J5cHQgdGhlbTsgaXQgd2Fzbid0IGRv aW5nIHRoaXMgaW4gdGhlCitsb29rYWhlYWQgc2VjdGlvbiBzbyBJIGZpeGVkIGl0LiAgVGhlIG5l dyBjb2RlIHdvcmtzIG9uIGJvdGggZW5jcnlwdGVkIGFuZAorY2xlYXItdGV4dCBjb25uZWN0aW9u cy4gIEkgcmVtb3ZlZCB0aGUgY2hhaW5pbmcgdG8gb2xkdHRpbmwoKSwgYW5kCitvbGR0dGlubCgp IGl0c2VsZi4gIGNrdXRpby5jLCAxMyBBdWcgMjAwNy4KKworICAoV291bGRuJ3QgaXQgbWFrZSBt b3JlIHNlbnNlIGFuZCBiZSBtb3JlIGVmZmljaWVudCBhbmQgbGVzcyBjb25mdXNpbmcKKyAgZm9y IG15ZmlsbGJ1ZigpIHRvIGRvIHRoZSBkZWNyeXB0aW5nPykKKworV2hlbiBDLUtlcm1pdCB1c2Vz IFptb2RlbSBhcyBhbiBleHRlcm5hbCBwcm90b2NvbCwgaXQgZG9lc24ndCBzZWVtIHRvIHNjYW4K K2ZpbGVzIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gc2V0IHRleHQgb3IgYmluYXJ5IG1vZGUgYXBw cm9wcmlhdGVseS4gIEl0J3MKK3RoYXQgZXh0ZXJuYWwgcHJvdG9jb2xzIGJ5cGFzcyBLZXJtaXQn cyB3aG9sZSAiZ2V0IG5leHQgZmlsZSIgbWVjaGFuaXNtOyB0aGUKKyhwb3NzaWJseSB3aWxkKSBm aWxlc3BlYyBpcyBzaW1wbHkgcGFzc2VkIHRvIHRoZSBleHRlcm5hbCBwcm90b2NvbCBwcm9ncmFt LgorQ2hhbmdpbmcgdGhpcyB3b3VsZCBiZSBhIHZlcnkgYmlnIGRlYWwuICBCdXQgaWYgb25seSBv bmUgZmlsZSBpcyBiZWluZyBzZW50CisodGhlIGZpbGVzcGVjIGlzIG5vdCB3aWxkKSBpdCdzIGVh c3kgZW5vdWdoIHRvIGNoZWNrLiAgSSBhZGRlZCB0aGlzIHRvIHRoZQorZXh0ZXJuYWwgcHJvdG9j b2xzIHNlY3Rpb24gb2YgdGhlIHByb3RvY29sIG1vZHVsZS4gIEl0IGNhbiBiZSBvdmVycmlkZGVu IGluCithbnkgb2YgdGhlIHJlZ3VsYXIgd2F5cyAoL1RFWFQgb3IgL0JJTkFSWSBzd2l0Y2ggb24g U0VORCBjb21tYW5kLCBTRVQKK1BBVFRFUk5TIE9GRiwgU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFM LCBldGMpLiAgY2tjcHJvLncsIDEzIEF1ZyAyMDA3LgorCitbRlRQIFNFTkQgL1JFQ1VSU0lWRV0K K1BldGVyIENyb3dsZXkgcmVwb3J0ZWQgYSBwcm9ibGVtIHdpdGggRlRQIHJlY3Vyc2l2ZSB1cGxv YWRzIGdldHRpbmcgdGhlCitkaXJlY3RvcnkgdHJlZSB3cm9uZyB3aGVuIHRoZSBwcmV2aW91cyBw YXRobmFtZSB3YXMgYSBsZWZ0IHN1YnN0cmluZyBvZiB0aGUKK25ldyBwYXRobmFtZSAoZS5nLiBm b28vYmFyLyBhbmQgZm9vL2JhcjIvKS4gIFRoZSBsb2dpYyBkaWQgbm90IGhhbmRsZSB0aGlzCitj YXNlIGFuZCBjcmVhdGVkIHRoZSBiYXIyIGRpcmVjdG9yeSBhcyBhIHN1YmRpcmVjdG9yeSBvZiBi YXIsIHJhdGhlciB0aGFuIGFzCithIHBhcmFsbGVsIGRpcmVjdG9yeS4gIEZpeGVkIGluIHN5bmNk aXIoKSBhbmQgdGVzdGVkIHdpdGggdmFyaW91cyBlZGdlIGNhc2VzLgorY2tjZnRwLmMgMTQgQXVn IDIwMDcuCisKKyAgbm90aWZ5IDxwZXRlci5jcm93bGV5QGFsdW1uaS51dGV4YXMubmV0PgorCitB ZGRlZCBDRCBtZXNzYWdlcyB0byBGVFAgQlJJRUYgZGlzcGxheSB0byB0cmFjayB0aGUgdXBzIGFu ZCBkb3ducyBvZgorcmVjdXJzaXZlIHVwbG9hZHMuICBja2NmdHAuYywgMTQgQXVnIDIwMDcuCisK K1RoZSBPVVRQVVQgY29tbWFuZCBnYXZlIGEgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlICgiQ29u bmVjdGlvbiB0byB4eHggbm90CitvcGVuIikgd2hlbiB1c2VkIG9uIGEgc2VyaWFsIHBvcnQgdGhh dCB3YXMsIGluZGVlZCwgb3BlbiBidXQgd2FzIG5vdAorcHJlc2VudGluZyB0aGUgQ2FycmllciBz aWduYWwsIHdoZW4gQ0FSUklFUi1XQVRDSCB3YXMgbm90IE9GRi4gIEFkZGVkIGEgbmV3CittZXNz YWdlIGZvciB0aGlzLCBhbmQgc29tZSBvdGhlcnMuICBja3V1czUuYywgMTQgQXVnIDIwMDcuCisK K1NlbmRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBlLmcuIGtlcm1pdCAtcyBmb28sIGRpZCBu b3QgZ2l2ZSBhbgoraW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgZmlsZSBjb3VsZCBu b3QgYmUgZm91bmQgb3Igb3BlbmVkLiAgRml4ZWQKK2luIGNrdXVzeS5jLCAxNCBBdWcgMjAwNy4K KworT0ssIGJhY2sgdG8gdHRwdHljbWQuLi4uICBJdCBzZWVtcyB0aGF0IGJhY2sgb24gTWFyY2gg Mjd0aCwgSSBnb3QgZXZlcnl0aGluZword29ya2luZyBidXQgSSB0aG91Z2h0IHRoYXQgdGhlcmUg d2FzIHN0aWxsIHNvbWV0aGluZyB3cm9uZyB3aXRoIGl0IGJlY2F1c2UKK2FuIHVucmVsYXRlZCBw cm9ibGVtIHNvIEkgcHV0IGl0IGFzaWRlLiAgVGhlIHZlcnNpb24gb2YgdHRwdHkuYyBmcm9tIHRo YXQKK2RhdGUgd29ya2VkIE9LLCBhbmQgaXQgbG9va3MgbGlrZSBJIHVwZGF0ZWQgY2t1dGlvLmMg ZnJvbSBpdCwgYnV0IHRoYXQKK3ZlcnNpb24gb2YgY2t1dGlvLmMgd2FzIHB1dCBhc2lkZS4gIFNp bmNlIHRoZW4gSSBoYXZlIGJlZW4gd29ya2luZyBvbiB0aGUKK2NrdXRpby5jIHZlcnNpb24gdGhh dCB3YXMgTk9UIHB1dCBhc2lkZSBhbmQgc28gbm93IEkgaGF2ZSB0byByZWNvbmNpbGUgdGhlCit0 d286CisKKyAgfi84MC90dHlwdHkvMjAwNzAzMjcvY2t1dGlvLmMKKyAgfi84MC9ja3V0aW8uYwor CitBcyBhIGZpcnN0IGN1dCBJIGRpZCB0aGlzIHNpbXBseSBieSByZXBsYWNpbmcgdGhlIGNvbnRl bnRzIG9mIHRoZSAjaWZkZWYKK0NLX1JFRElSIHNlY3Rpb24gb2YgdGhlIGxhdHRlciB3aXRoIHRo YXQgb2YgdGhlIGZvcm1lci4gIE9mIGNvdXJzZSBpbgorU29sYXJpcyB0aGlzIGNvbWVzIHVwIHdp dGggb3BlbnB0eSgpIGltcGxpY2l0bHkgZGVjbGFyZWQgYXQgY29tcGlsZSB0aW1lIGFuZAordW5y ZXNvbHZlZCBhdCBsaW5rIHRpbWUuICBTbyB0aGUgZmlyc3QgdGFzayBpcyB0byBnZXQgSEFWRV9P UEVOUFRZIGRlZmluZWQKK2ZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIGl0IGFuZCBoYXZlIHRoZSBv dGhlcnMgdXNlIHRoZSB0dHJ1bmNtZCgpLiAgRm9yCitzdGFydGVycyBJIHB1dCBhbiAjaWZkZWYg YmxvY2sgaW4gY2tjZGViLmggdGhhdCBkZWZpbmVzIEhBVkVfT1BFTlBUWSBmb3IKK0xpbnV4LCBG cmVlQlNELCBOZXRCU0QsIE9wZW5CU0QsIGFuZCBNYWMgT1MgWC4gIE9uZXMgdGhhdCBkb24ndCBo YXZlCitvcGVucHR5KCkgaW5jbHVkZSBBSVgsIEhQLVVYLCBhbmQgU29sYXJpcy4gIE90aGVycyBs aWtlIFNDTyBJIGRvbid0IGtub3cgYnV0CitJIGRvdWJ0IGl0LiAgVGhlIHJlYWwgc29sdXRpb24g aXMgdG8gZ2V0IHRoZSBja3VwdHkuYyBtb2R1bGUgdG8gd29yayBidXQgb25lCit0aGluZyBhdCBh IHRpbWUuLi4gIFRoaXMgdmVyc2lvbiBpcyBzdXBwb3NlZCB3b3JrIHdpdGggc2VjdXJlIGJ1aWxk cyBvbiB0aGUKK29wZW5wdHkoKSBwbGF0Zm9ybXMsIGFuZCBvbiB0aGUgb3RoZXJzIGxpa2UgU29s YXJpcywgaWYgYW4gZXh0ZXJuYWwgcHJvdG9jb2wKK2lzIGF0dGVtcHRlZCBvbiBhIHNlY3VyZSAo ZW5jcnlwdGVkKSBjb25uZWN0aW9uLCBhbiBlcnJvciBtZXNzYWdlIGlzCitwcmludGVkIGFuZCB0 aGUgY29tbWFuZCBmYWlscy4gIGNrdXRpby5jLCAxNCBBdWcgMjAwNy4KKworSG93IHRvIHRlc3Q/ ICBBcHBhcmVudGx5IEkgZGlkIGFsbCBteSB0ZXN0aW5nIG9uIFBhbml4IGJlZm9yZSwgYW5kIHRo YXQncword2hlcmUgYWxsIG15IFptb2RlbSBidWlsZHMgYXJlLCBidXQgbm93IHdoZW4gSSBidWls ZCBhIEtlcmJlcml6ZWQgdmVyc2lvbgorKHdoaWNoIHdvcmtzIGlmIEkgZG8gaXQgb24gdGhlIHJp Z2h0IHBvb2wgaG9zdCksIGl0IHdvbid0IG1ha2UgYSBsb2NhbAorY29ubmVjdGlvbiwgYW5kIHRo ZXJlIGlzIG5vIG90aGVyIHBsYWNlIEkgY2FuIGNvbm5lY3QgdG8gdGhhdCBoYXMgYQorS2VyYmVy aXplZCBUZWxuZXQgc2VydmVyLiAgSSBjYW4sIGhvd2V2ZXIsIGNvbm5lY3QgdG8gUGFuaXggZnJv bSBoZXJlLCB1c2luZwordGhlIHNhbWUgY29kZSwgYnV0IG9uIE1hYyBPUyBYLi4uCisKK1NsaWdo dCBkZXRvdXI6IEdvdCBhY2Nlc3MgdG8gQUlYIGFnYWluICg1LjMuMC4wKS4gIFBpY2t5IGNvbXBp bGVyLCBzb21lCit0aGluZ3MgbmVlZGVkIGZpeGluZy4uLi4gIEFsc28gaXQgc2F5cyAiMTUwNi01 MDcgKFcpIE5vIGxpY2Vuc2VzIGF2YWlsYWJsZS4KK0NvbnRhY3QgeW91ciBwcm9ncmFtIHN1cHBs aWVyIHRvIGFkZCBhZGRpdGlvbmFsIHVzZXJzLiBDb21waWxhdGlvbiB3aWxsCitwcm9jZWVkIHNo b3J0bHkiIGFuZCBvZiBjb3Vyc2UgaXQgZ29lcyBraW5kIG9mIHNsb3cuICBGb3Igc29tZSByZWFz b24sIEkKK2Nhbid0IGRvIHN0cmVhbWluZyB0cmFuc2ZlcnMgaW50byBBSVggb3ZlciBhIGxvY2Fs IG5ldHdvcmsgKHRvIGl0cyBTU0gKK3NlcnZlciksIGJ1dCB3aW5kb3dlZCB0cmFuc2ZlcnMgYXJl IE9LLiAgQW55d2F5LCBub3RpbmcgdGhhdCB3ZSd2ZSBiZWVuCit1c2luZyB0aGUgc2FtZSBiYXNp YyBtYWtlZmlsZSB0YXJnZXQgc2luY2UgQUlYIDQuMiwgY2hhbmdpbmcgbm90aGluZyBidXQgdGhl Cit2ZXJzaW9uIGhlcmFsZCwgSSBtYWRlIGEgbmV3IHRhcmdldCwgc2ltcGx5ICJhaXgiLCB0aGF0 IHBpY2tzIHVwIHRoZSBBSVgKK3ZlcnNpb24gYXV0b21hdGljYWxseSBhbmQgc2V0cyB0aGUgaGVy YWxkIGZyb20gaXQuICBEaXR0byBmb3IgYWl4K29wZW5zc2wsCitidXQgb24gdGhpcyBob3N0IHJl cXVpcmVzIHNldHRpbmcgU1NMSU5DIGFuZCBTU0xMSUIgdG8gL29wdC9zc2wvaW5jbHVkZSBhbmQK Ky9vcHQvc3NsL2xpYi4gIEFsc28gdGhlIG1ha2UgcHJvZ3JhbSBoZXJlIHdhcyBleHRyZW1lbHkg c2Vuc2l0aXZlIHRvIHNwYWNpbmcKK3NvIEkgaGFkIHRvIG1ha2Ugc29tZSBtaW5vciBlZGl0cyB0 byBnZXQgdGhlIGxpbmsgc3RlcCB0byB3b3JrIGZvciB0aGUgU1NMCit2ZXJzaW9uLiAgY2t1dXN5 LmMsIG1ha2VmaWxlLCAxNC0xNSBBdWcgMjAwNy4KKworR290IHJpZCBvZiB0aGUgc3BlY2lhbCBQ YW5peCBzZWN1cmUgTmV0QlNEIHRhcmdldCwgcmVwbGFjZWQgaXQgd2l0aCBhCityZWd1bGFyIG9u ZSwgd2hpY2ggaXMgaW52b2tlZCBpbiB0aGUgbm9ybWFsIHdheSBieSBkZWZpbmluZyBLNUlOQyBh bmQgSzVMSUIKK3RvIHBvaW50IHRvIHRvIHdoZXJlIHRoZSBzdHVmZiBpcyBoaWRkZW4uICBDbGVh bmVkIHVwIGFuZCBtb2Rlcm5pemVkIHRoZQorY29tbWVudHMgaW4gdGhlIG1ha2VmaWxlIGEgYml0 LiAgbWFrZWZpbGUgMTUgQXVnIDIwMDcuCisKK0NoYW5nZWQgc29tZSBkYXRhIHR5cGVzIGFuZCBh ZGRlZCBzb21lIGNhc3RzIHRvIGNrY3RlbC5jIHRvIGRvIGF3YXkgd2l0aAordG9ucyBvZiAicG9p bnRlciB0YXJnZXRzIGluIHBhc3NpbmcgYXJndW1lbnQgMSBvZiAneHh4JyBkaWZmZXIgaW4gc2ln bmVkbmVzcyIKK3dhcm5pbmdzLiAgMTUgQXVnIDIwMDcuCisKK1NldCB1cCBNYWMgT1MgWCBhcyB0 aGUgdGVzdGJlZCBmb3IgdHRwdHljbWQoKSwgd2l0aCBQYW5peCBhcyB0aGUgcmVtb3RlCitwYXJ0 bmVyIG92ZXIgYSBLZXJiZXJvcyA1IGNvbm5lY3Rpb24uICBUaGUgZmlyc3QgdGVzdCBpcyB0byBz ZW5kIGEgMzAwSwordGV4dCBmaWxlIHdpdGggZ2tlcm1pdCBhcyB0aGUgZXh0ZXJuYWwgcHJvdG9j b2wuICBJdCB3b3JrZWQgZmluZSwgYW5kIHRoZQorZGVidWcgbG9nIHNob3dlZCBhbGwgdGhlIHJp Z2h0IGNvbXBvbmVudHMgd2VyZSBhY3RpdmUgKG5hbWVseSBlbmNyeXB0aW9uIGFuZAordHRwdHlj bWQpIFtrZXJtaXQvem1vZGVtIHNlbmQvcmVjZWl2ZSB0ZXh0L2JpbmFyeV06CisKKyAgS2VybWl0 ICAgIFptb2RlbQorICBrc3QgT0sgICAgenN0IE9LCisgIGtzYiBPSyAgICB6c2IgT0sKKyAga3J0 IE9LICAgIHpydCBPSworICBrcmIgT0sgICAgenJiIEZhaWxlZCAicno6IFBlcnNpc3RlbnQgQ1JD IG9yIG90aGVyIEVSUk9SIgorCitXZSd2ZSBzZWVuIHRoaXMgYmVmb3JlLiAgVGhlIHByb2JsZW0g aXMgMHhmZiwgVGVsbmV0IElBQywgYXMgSSBwcm92ZWQgdG8KK215c2VsZiBieSBjb25zdHJ1Y3Rp bmcgYSAzTUIgZmlsZSB0aGF0IGNvbnRhaW5lZCBldmVyeSBieXRlIGJ1dCAweGZmIGluIGV2ZXJ5 CittaXh0dXJlIGFuZCBvcmRlciBhbmQgdHJhbnNmZXJyaW5nIGl0IHN1Y2Nlc3NmdWxseSBvdmVy IHRoZSBzYW1lIGNvbm5lY3Rpb24uCitQcmVzdW1hYmx5IHRoZSBUZWxuZXQgc2VydmVyIGlzIGRv dWJsaW5nIElBQ3MsIHdoZXJlYXMgb2YgY291cnNlIHJ6IGlzIG5vdAordW5kb3VibGluZywgdGh1 cyB0aGUgQ1JDIGVycm9yLiAgVGhpcyBpcyBwcm9ncmVzcy4gIDE1IEF1ZyAyMDA3LgorCitMb2cg c2hvd3MgdGhhdCBpbmRlZWQgZXZlcnkgSUFDIGluIHRoZSBzb3VyY2UgZmlsZSBhcnJpdmVzIGRv dWJsZWQuICBBZGRpbmcKK2NvZGUgdG8gcmVtb3ZlIHRoZSBmaXJzdCBJQUMgb2YgZXZlcnkgYWRq YWNlbnQgcGFpciwgYSBzbWFsbCB0ZXN0IGZpbGUgd2l0aAorZGlmZmVyZW50LWxlbmd0aCBydW5z IG9mIElBQ3MgdHJhbnNmZXJzIE9LLiAgVGhlIDNNQiBhbGwuYmluIGZpbGUgZG9lcyBub3QuCisK K1N0YXJ0aW5nIG92ZXIuLi4gIEkgY2FuIHJlY2VpdmUgYSBiaWcgdGV4dCBmaWxlIHdpdGggWm1v ZGVtIE9LLiAgVGhlIDMuMk1CCitiaW5hcnkgdGVzdCBwYXR0ZXJuIHRoYXQgY29udGFpbnMgbm8g SUFDcyBmYWlsZWQgYWZ0ZXIgMS44TUIsIGJ1dCB0aGUgcGFydAordGhhdCBpdCB0cmFuc2ZlcnJl ZCB3YXMgT0suICBBIHNlY29uZCB0cnksIGFsbW9zdCB0aGUgd2hvbGUgdGhpbmcgYXJyaXZlZCwK K2l0IHN0b3BwZWQganVzdCA1ODQgYnl0ZXMgc2hvcnQgb2YgdGhlIGVuZC4gIENvdWxkIGJlIHRo YXQgZmlsZSBzaXplIGlzIGEKK3NlcGFyYXRlIHByb2JsZW0uICBNYWtpbmcgYSBuZXcgY29weSBl eGFjdGx5IDFNQiBsb25nLi4uICBXZWxsLCB0aGF0J3MKK2ludGVyZXN0aW5nLCB0aGlzIG9uZSB0 b28gc3RvcHBlZCBqdXN0IHNob3J0IG9mIHRoZSBlbmQuICBBbmQgYWdhaW4sIHRoZQorc2FtZSB0 aGluZy4gIFdoZW4gY29ubmVjdGluZyBiYWNrIHRvIHRoZSBob3N0LCB0aGUgbGFzdCBabW9kZW0g cGFja2V0IGNhbgorYmUgc2VlbiBvbiB0aGUgc2NyZWVuOyBpdCdzIGFzIGlmIHRoZSBsb2NhbCBa bW9kZW0gZXhpdGVkIGJlZm9yZSByZWFkaW5nCit0aGUgbGFzdCBwYWNrZXQuLi4gIEJ1dCBPSywg aWYgSSBjaGFuZ2UgdGhlIG9wdGlvbnMgb24gdGhlIHJlbW90ZSBzegorc2VuZGVyIHRvIHVzZSBz bWFsbCBibG9ja3MsIGV0YywgdGhlbiBpdCB3b3Jrcy4KKworTm93LCBjaGFuZ2luZyBmcm9tIHRo ZSAxTUIgbm8tSUFDLWJpbmFyeSB0ZXN0IHBhdHRlcm4sIHRvIHRoZSAxTUIgYWxsLXZhbHVlcwor dGVzdCBwYXR0ZXJuLCB3ZSBmYWlsIGFmdGVyIDgxSy4gIEJ1dCB0aGUgcGFydCB0aGF0IHdhcyB0 cmFuc2ZlcnJlZCBpcworY29ycmVjdC4gIFNlY29uZCB0cnksIHNhbWUgdGhpbmcsIGJ1dCA1N0su ICBUaGlyZDogNDBLLiAgRWFjaCB0aW1lLCB1cG9uCitjb25uZWN0aW5nIGJhY2ssIHRoZSBzZXNz aW9uIGlzIGNvbXBsZXRlbHkgZGVhZC4KKworSUYgSSBIQVZFIFRPIHVuZG91YmxlIElBQ3MgZm9y IGluY29taW5nIGZpbGVzLCBkb24ndCBJIGhhdmUgdG8gZG91YmxlIHRoZW0KK2dvaW5nIG91dD8g IFRvIHNlbmQgYSBibG9jayB0byBuZXQgd2UganVzdCBjYWxsIHR0b2woKSwgYnV0IHR0b2woKSBk b2Vzbid0CitkbyBhbnkgZG91YmxpbmcgKGJlY2F1c2UgS2VybWl0IHByb3RvY29sIGFsd2F5cyBx dW90ZXMgMHhmZikuICBUbyBzZWUgd2hhdAoraGFwcGVucywgSSBjaGFuZ2VkIHRoZSB0dG9sKCkg Y2FsbCB0byB0dG9jKCkgaW4gYSBsb29wIHRoYXQgZG91YmxlcyBJQUNzLiAgSQordGVzdGVkIHRo aXMgYnkgc2VuZGluZyB0aGUgZnVsbCAzLjJNQiB0ZXN0IHBhdHRlcm4sIHdoaWNoIHdvcmtlZCBm aW5lLgorCitGb3IgcmVjZWl2aW5nLCBpdCdzIHNsb3cgYnV0IGl0IHdvcmtzIE9LIHdpdGggZmls ZXMgdGhhdCBkb24ndCBjb250YWluIElBQ3MKKyhteSBjb25jZXJuIHdhcyB0aGF0IElBQ3MgbWln aHQgYXBwZWFyIGluIG91dGJvdW5kIGZpbGVzIG9yIGluIFptb2RlbQorcHJvdG9jb2wgbWVzc2Fn ZXMpLiAgSXQgcmVjZWl2ZXMgdGhlIDFNQiBuby1JQUMgdGVzdCBwYXR0ZXJuLCBzbyB0aGVyZSBh cmUKK25vIHByb2JsZW1zIHdpdGggcHJvdG9jb2wgb3IgdGltaW5nLiAgQnV0IHRoZSBmdWxsIHRl c3QgcGF0dGVybiBhbHdheXMgZ2V0cworY3V0IG9mZiwgYnV0IGF0IGRpZmZlcmVudCBwb2ludHMs IGFzIGJlZm9yZSwgd2l0aCB0aGUgcmVtb3RlIHNlc3Npb24gZGVhZC4KK0NoYW5naW5nIHRoZSBa bW9kZW0gcmVjZWl2ZXIgZnJvbSByeiB0byBscnogb24gdGhlIGxvY2FsIGVuZCAoc2luY2UgdGhl CitzZW5kZXIgb24gdGhlIHJlbW90ZSBlbmQgaXMgbHN6KSBkb2VzIG5vdCBjaGFuZ2UgdGhlIGJl aGF2aW9yLgorCitBbnl3YXksIEkgd2VudCBiYWNrIGFuZCByZXBsYWNlZCB0aGUgYnl0ZSBsb29w IHdpdGggc29tZXRoaW5nIG1vcmUKK2VmZmljaWVudCwgYW5kIGl0IGdvZXMgYWJvdXQgMjAgdGlt ZXMgZmFzdGVyLiAgQnV0IHRoaXMgZG9lc24ndCBoZWxwIGVpdGhlciwKK2l0IG9ubHkgbWFrZXMg aXQgZmFpbCBmYXN0ZXIuICBCdXQgYWhhLCB3aGF0IGlmIGEgZG91YmxlZCBJQUMgaXMgYnJva2Vu CithY3Jvc3Mgc3VjY2Vzc2l2ZSBwdHkgcmVhZHMgLS0gd2UgaGF2ZSB0byBtYWtlIHRoZSAicHJl dmlvdXMgY2hhcmFjdGVyIgorbWVtb3J5IHBlcnNpc3RlbnQuICBXZWxsLCB0aGF0IHdhcyBhIGdv b2QgaW5zaWdodCwgYnV0IGl0IHN0aWxsIGRpZG4ndCBmaXgKK2l0LiAgVGhlIGxvZyBzaG93cyB0 aGUgSUFDIGhhbmRsaW5nIGNvZGUgaXMgd29ya2luZyBmaW5lLgorCitXaGF0IGRvZXMgc3ogc2F5 PyAgQ2FwdHVyaW5nIGl0cyBzdGRlcnIgdG8gYSBmaWxlLi4uICJSZXRyeSAxOiBHb3QgWkNBTiIu CitOZXh0IHRpbWU6ICJSZXRyeSAxOiBHb3QgVElNRU9VVCIuICBOZXh0IHRpbWU6IEdvdCBaQ0FO LgorCitUcnlpbmcgZGlmZmVyZW50IFptb2RlbSBvcHRpb25zLi4uICBhcHBhcmVudGx5IEkgZG9u J3QgbmVlZCB0byB1c2Ugc2hvcnQKK2Jsb2Nrcy4gIEJ1dCBJIGRvIG5lZWQgdG8gdXNlIC1lLCBw cm9iYWJseSBiZWNhdXNlIG9mIFRlbG5ldCBOVlQgdHJlYXRtZW50CitvZiBjYXJyaWFnZSByZXR1 cm47IHdpdGhvdXQgLWUsIHRoZXJlIGlzIGEgInBlcnNpc3RlbnQgQ1JDIGVycm9yIi4gIC1PCitk aXNhYmxlcyB0aW1lb3V0cywgYnV0IHRoaXMgbWFrZXMgbm8gZGlmZmVyZW5jZS4KKworT0ssIHdl IHN0aWxsIGhhdmUgdHdvIEJpZyBQcm9ibGVtczoKKworIDEuIFdoZW4gYSBsb25nIGZpbGUgaGFz IG5vIElBQ3MsIHRoZSBmaW5hbCA8IDFLIG9mIHRoZSBmaWxlIGlzIG5vdCByZWNlaXZlZC4KKyAy LiBXaGVuIGEgbG9uZyBmaWxlIGhhcyBJQUNzLCB0aGUgdHJhbnNmZXIgZ2VuZXJhbGx5IHN0b3Bz IHZlcnkgZWFybHkuCisKK1Byb2JsZW0gMTogdGhlIHRyYW5zZmVyIGNvbnNpc3RlbnRseSBmYWls cyBsZXNzIHRoYW4gMUsgZnJvbSB0aGUgZW5kIG9mIHRoZQorZmlsZS4gIFVwb24gQ09OTkVDVCBi YWNrIHRvIHRoZSBob3N0LCBhIGJpZyBabW9kZW0gcGFja2V0IGlzIHNpdHRpbmcgdGhlcmUKK3dh aXRpbmcgdG8gYmUgcmVhZCwgd2hpY2ggbWVhbnMgdHRwdHljbWQoKSdzIGNvcHkgb2YgcnogaXMg dGVybWluYXRpbmcKK2Vhcmx5LiAgQ2FuIHdlIGNhdGNoIGl0IGluIHRoZSBkZWJ1ZyBsb2c/ICBE b2luZyB0aGlzIHRha2VzIGZvcmV2ZXIgYW5kCit3cml0ZXMgYSBHQiB0byB0aGUgZGlzay4uLiAg QW5kIHRoZW4gdGhlIHByb2JsZW0gZG9lc24ndCBoYXBwZW4uICBBbHNvLCBJCitjYW4gcmVjZWl2 ZSBhIEhVR0UgdGV4dCBmaWxlIGFsbW9zdCBpbnN0YW50bHkgd2l0aCBubyBlcnJvcnMgYXQgYWxs LgorCitTd2l0Y2hpbmcgdG8gbHJ6IG9uIHRoZSByZWNlaXZpbmcgZW5kLCBub3cgSSBzZWUgdGhl IGVycm9yIG1lc3NhZ2VzLCBhYm91dAorMzAwIGxpbmVzIGxpa2UgdGhpczoKKworICBSZXRyeSAw OiBHYXJiYWdlIGNvdW50IGV4Y2VlZGVkCisgIEJ5dGVzIHJlY2VpdmVkOiAgODcyMzUyLzEwMDAw MDAgICBCUFM6ODU0NjQgIEVUQSAwMDowMSAgUmV0cnkgMDogQmFkIENSQworICBCeXRlcyByZWNl aXZlZDogIDg5MjQ0OC8xMDAwMDAwICAgQlBTOjg2NjkwICBFVEEgMDA6MDEgIFJldHJ5IDA6IEJh ZCBDUkMKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorICBSZXRyeSAwOiBHYXJi YWdlIGNvdW50IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAg UmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50 IGV4Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgUmV0cnkgMDog R290IEVSUk9SCisgIEJ5dGVzIHJlY2VpdmVkOiAgODk4MzM2LzEwMDAwMDAgICBCUFM6ODQyOTMg IEVUQSAwMDowMSAgUmV0cnkgMDogQmFkIENSQworICBSZXRyeSAwOiBHYXJiYWdlIGNvdW50IGV4 Y2VlZGVkCisgIFJldHJ5IDA6IEdhcmJhZ2UgY291bnQgZXhjZWVkZWQKKyAgQnl0ZXMgcmVjZWl2 ZWQ6ICA5MDAzODQvMTAwMDAwMCAgIEJQUzo4Mzc1MSAgRVRBIDAwOjAxICBCYWQgZXNjYXBlIHNl cXVlbmNlCisgIDJmUmUKKyAgdHJ5IDA6IEJhZCBkYXRhIHN1YnBhY2tldAorICBCeXRlcyByZWNl aXZlZDogIDk0MTQ3Mi8xMDAwMDAwICAgQlBTOjg2MTkxICBFVEEgMDA6MDAgIFJldHJ5IDA6IEJh ZCBDUkMKKyAgUmV0cnkgMDogR2FyYmFnZSBjb3VudCBleGNlZWRlZAorCitFdmVuIHdoZW4gaXQg c3VjY2VlZHMsIGl0IGdldHMgdGhlc2UuICBCdXQgaWYgSSByZWNlaXZlIGEgdGV4dCBmaWxlLCBu bworbWF0dGVyIGhvdyBiaWcsIG5vIGVycm9ycyBvciByZXRyaWVzIG9yIHRpbWVvdXRzIGF0IGFs bC4gIFNvIGl0IGFwcGVhcnMgdGhhdAordGhlcmUgaXMgb25seSBvbmUgcHJvYmxlbTogYSBiaWct dGltZSBsYWNrIG9mIHRyYW5zcGFyZW5jeSByZWdhcmRpbmcgOC1iaXQKK2FuZC9vciBjb250cm9s IGNoYXJhY3RlcnMuICBUaGUgb2RkIHRoaW5nIGlzLCBpdCdzIG5vdCB0aGF0IHRoZSBjaGFyYWN0 ZXJzCitjYW4ndCBnZXQgdGhyb3VnaCAtLSB0aGV5IGFsbCBjYW4gLS0gYnV0IHRoZXkgc2VlbSB0 byBjYXVzZSB0cmFuc2l0b3J5CitibG9ja2FnZXMuICAxNiBBdWcgMjAwNy4KKworQ2xlYW5lZCB1 cCB0aGUgcmVtYWluaW5nIHBvaW50ZXIgc2lnbmVkbmVzcyB3YXJuaW5ncyBpbiBja3V0aW8uYywg YnV0IHRoaXMKK3dhcyBhIG1pc3Rha2UsIGl0IGJyb2tlIEtlcmJlcm9zIGNvbm5lY3Rpb25zIGNv bXBsZXRlbHkuICBVbmRpZCB0aGUgY2hhbmdlcy4KK2NrdXRpby5jLCAxNyBBdWcgMjAwNy4KKwor Q2hhbmdlZCBhbGwgcmV0dXJuKCkgaW4gdGhlIGZvcmsoKT09MCBzZWN0aW9uIG9mIHR0cHR5Y21k KCkgdG8gZXhpdCgpLgorY2t1dGlvLmMsIDE3IEF1ZyAyMDA3LgorCitUcmllZCBleHBsaWNpdGx5 IHNldHRpbmcgdGhlIHNsYXZlIHB0eSB0byByYXdtb2RlLiAgTWFrZXMgbm8gZGlmZmVyZW5jZS4K K1RyaWVkIHVzaW5nIHRoZSBNYWMgT1MgWCAoY3Vyc2VzKSByYXcoKSBmdW5jdGlvbiwgYW5kIGFs c28gc3lzdGVtKCJzdHR5CityYXciKTsgc3RpbGwgbm8gZGlmZmVyZW5jZS4gIFRyaWVkIGRvaW5n IGFsbCBvZiB0aGVzZSBpbiBkaWZmZXJlbnQKK2NvbWJpbmF0aW9ucyBhbmQgb3JkZXJzLiAgSSBm b3VuZCBvbmUgY29tYmluYXRpb24gdGhhdCBjdXRzIHRoZSBlcnJvcnMgYWJvdXQKK2luIGhhbGYs IGFuZCB0aGUgdHJhbnNmZXIgb2YgdGhlIG5vLUlBQyB0ZXN0IHBhdHRlcm4gYWxtb3N0IGFsd2F5 cyBzdWNjZWVkcworKGJ1dCBpdCdzIHNsb3cpLiAgQW55d2F5LCBpdCBkb2Vzbid0IGhlbHAgbXVj aCB3aXRoIHRoZSB0ZXN0IHBhdHRlcm4gdGhhdAorY29udGFpbnMgSUFDcy4gIFdlbGwsIHRoZSBj b2RlIGlzIG1vcmUgc29saWQgdGhhbiBpdCB3YXMgYmVmb3JlIGJ1dAorZnVuY3Rpb25hbGx5IHdl IGhhdmUgbm90IGFkdmFuY2VkIG11Y2ggaWYgd2UgY2FuJ3QgZG93bmxvYWQgYSBiaW5hcnkgZmls ZQord2l0aCBabW9kZW0hICBPbiB0aGUgb3RoZXIgaGFuZCwgd2UgY2FuIHVwbG9hZCB0aGVtLCBh bmQgd2UgY2FuIHRyYW5zZmVyCit0ZXh0IGZpbGVzIGluIGJvdGggZGlyZWN0aW9ucywgd2hpY2gg aXMgYW4gaW1wcm92ZW1lbnQgb3ZlciB0aGUgcHJldmlvdXMKK3NpdHVhdGlvbiwgaW4gd2hpY2gg dGhlIGVudGlyZSBzZXNzaW9uIHdvdWxkIGhhbmcgZHVlIHRvIGxvc3Mgb2YKK3N5bmNocm9uaXph dGlvbiBvZiB0aGUgZW5jcnlwdGlvbiBzdHJlYW0uCisKK1RyaWVkIGFkZGluZyAtZnVuc2lnbmVk LWNoYXIgdG8gQ0ZMQUdTIG9mIE1hYyBPUyBYIHRhcmdldC4gIEl0IGRvZXMgbm90CittYWtlIHRo ZSAic2lnbmVkbmVzcyIgd2FybmluZ3MgZ28gYXdheSBhbmQgaXQgZG9lc24ndCBjaGFuZ2UgdGhl IHJ1bnRpbWUKK3N5bXB0b21zLgorCitJIHRyaWVkIGEgc2ltcGxlciB2ZXJzaW9uIG9mIHB0eV9t YWtlX3JhdygpLCB0aGUgb25lIGZyb20gU2VyZyBJYWtvdmxldiwgYnV0CitpdCB3YXMgYSB0b3Rh bCBmYWlsdXJlLiAgVGhhdCdzIGVuY291cmFnaW5nIHRob3VnaCwgYmVjYXVzZSBpdCBpbmRpY2F0 ZXMKK3RoYXQgcHR5X21ha2VfcmF3KCkgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlIHdvcmtpbmcu CisKK1RoZW4gSSBtYWRlIHB0eV9tYWtlX3JhdygpIHNldCBvciB1bnNldCBldmVyeSBzaW5nbGUg dGVybWluYWwgZmxhZworZXhwbGljaXRseS4gIFRoaXMgbWFkZSBubyBkaWZmZXJlbmNlLCBidXQg ZGlkbid0IGh1cnQgYW55dGhpbmcgZWl0aGVyLgorCitUaGVuIEkgbWFkZSBwdHlfbWFrZV9yYXco KSBleHBsaWNpdGx5IHNldCBhbGwgdGhlIGNfY2NbXSBjaGFyYWN0ZXJzIHRvIDAKKyhidXQgbGVm dCBjX2NjW1ZNSU5dIGFzIDEpLiAgVGhpcyBtYWRlIG5vIGRpZmZlcmVuY2UgZWl0aGVyLgorCitJ IGNoZWNrZWQgcHR5X21ha2VfcmF3KCkgYWdhaW5zdCB0dHBrdCgpIGFuZCB0aGUgb25seSBkaWZm ZXJlbmNlIEkgZm91bmQgaW4KK3RoZSB0ZXJtaW5hbCBmbGFncyBpcyB0aGF0IHR0cGt0KCkgc2V0 cyBJR05QQVIgdGhpbmtpbmcgaXQgbWVhbnMgImlnbm9yZQorcGFyaXR5IGVycm9ycyIgd2hlbiBy ZWFsbHkgaXQgbWVhbnMgImRpc2NhcmQgYW55IGNoYXJhY3RlciB0aGF0IGhhcyBhIHBhcml0eQor ZXJyb3IiIChhdCBsZWFzdCBhY2NvcmRpbmcgdG8gSWFrb3ZsZXYpIC0tIGV4YWN0bHkgdGhlIG9w cG9zaXRlLiAgQnV0IEkKK3RyaWVkIGl0IGJvdGggd2F5cywgbm8gZGlmZmVyZW5jZS4gIDE3IEF1 ZyAyMDA3LgorCitJIG5vdGljZWQgdGhhdCBldmVuIFptb2RlbSB0ZXh0IHJlY2VpdmVzIGNhbiBm YWlsLiAgVGhleSBkb24ndCBnZXQgYW55CitlcnJvcnMsIHRoZXkganVzdCBnZXQgY3V0IG9mZiBz aG9ydGx5IGJlZm9yZSB0aGUgZW5kLiAgKEJ1dCB1c3VhbGx5IHRoZXkKK3N1Y2NlZWQsIGFuZCBm YXN0IHRvbywgbGlrZSA1MDBLIGNwcykuCisKK1doYXQgaWYgSSBkb24ndCBjYWxsIHB0eV9tYWtl X3JhdygpIGF0IGFsbCBvbiB0aGUgc2xhdmUgcHR5PworCit6cnQ6IEVFU1NTU1NTU1M6IDgwJSBn b29kIChFID0gc3RvcHBlZCBqdXN0IGJlZm9yZSBlbmQgYnV0IG5vIG90aGVyIGVycm9ycykKKwor enJiIG5vLUlBQyB0ZXN0IHBhdHRlcm4sIHNob3J0IGJsb2NrczoKKyAxLiBTLzUgKHN1Y2Nlc3Mg d2l0aCA1IHNjcmVlbnMgb2YgZXJyb3JzLgorIDIuIFMvNworIDMuIFMvNworIDQuIFMvNgorIDUu IEUvNyAoZmFpbGVkIGp1c3QgYmVmb3JlIGVuZCkKKyA2LiBTLzcKKyA3LiBTLzYKKyA4LiBTLzYK KyA5LiBTLzYKKzEwLiBTLzQKKworU28sIGxvdHMgb2YgZXJyb3JzLCBidXQgaXQgcmVjb3ZlcmVk IDkwJSBvZiB0aGUgdGltZS4KK05leHQsIHNhbWUgdGhpbmcsIGJ1dCB3aXRob3V0IHJlcXVlc3Rp bmcgc2hvcnQgYmxvY2tzOgorCisgMS4gRS81CisgMi4gUy81CisgMy4gRS80CisgNC4gUy81Cisg NS4gUy81CisgNi4gUy81CisgNy4gWC8wIChoYXJkIGZhaWx1cmUgcmlnaHQgYXdheTogIkdvdCBa Q0FOIgorIDguIFMvNQorIDkuIFMvNQorMTAuIFMvNQorCitTbyBpdCBkb2Vzbid0IGxvb2sgbGlr ZSBzaG9ydCBibG9ja3MgbWFrZSB0aGF0IG11Y2ggZGlmZmVyZW5jZS4gIE5vdyB3aGF0IGlmCitJ IHR1cm4gb2ZmIHByZWZpeGluZz8gIEJhZCBDUkMsIGZhaWxzIGltbWVkaWF0ZWx5IGV2ZXJ5IHRp bWUuICBQdXR0aW5nIGJhY2sKK3B0eV9tYWtlX3JhdyhzbGF2ZSksIGl0IHN0aWxsIGZhaWxzIGhh cmQuCisKK1RyaWVkIGEgbmV3IHN0cmF0ZWd5IHdpdGggcHR5X21ha2VfcmF3KCk6IHJhdGhlciB0 aGFuIG1vZGlmeSBleGlzdGluZyBmbGFncywKK0kgc2V0IGFsbCBmbGFncyB0byAwLCBhbmQgdGhl biB0dXJuIG9uIG9ubHkgdGhvc2UgZmV3IHRoYXQgd2UgbmVlZCBsaWtlIENTOC4KK05vdyB3ZSBn ZXQgb25seSAyLjUgc2NyZWVucyBvZiBlcnJvcnMgaW5zdGVhZCA0LTcgYW5kIHRoZSB0cmFuc2Zl ciByYXRlIGlzCitoaWdoZXIgZm9yIGJpbmFyeSBmaWxlcyAoYWxsIG9mIHRoZSBwcmV2aW91cyBv bmVzIHdlcmUgdW5kZXIgMTAwSyBDUFMsIHdoaWxlCitmb3IgdGV4dCBmaWxlcyBpdCB3YXMgNDAw LTUwMEsgQ1BTKToKKworIDEuIFMvMiAxOTU2NjkgQ1BTCisgMi4gUy8yIDE5NDcyMAorIDMuIEUv MworIDQuIFMvMiAxOTI1NTAKKyA1LiBTLzMgMTkyMzI1CisgNi4gUy8zIDE0NTA2NgorIDcuIFMv MiAyMDA2ODkKKyA4LiBTLzMgMTg4OTQ4CisgOS4gUy8yIDIwOTQ2MQorMTAuIFMvMyAxODE5OTEK KworSSBub3RpY2VkIHRoYXQgdGhlcmUgd2FzIG5vIFRJT0NTVFRZIGlvY3RsIGluIHRoZSBwdHkv Zm9yayBzZXR1cCBzZXF1ZW5jZSwKK3doaWNoIGlzIHJlY29tbWVuZGVkIHNvbWV3aGVyZSwgc28g SSB0cmllZCB0aGF0IGFuZCBpdCB3YXMgYSBkaXNhc3RlcjsgdGhlCitlbnRpcmUgc2Vzc2lvbiBo dW5nLiAgSSB0b29rIGl0IGJhY2sgb3V0LiAgMTggQXVnIDIwMDcuCisKK1RyaWVkIHNvbWUgdHJh bnNmZXJzIG92ZXIgYSBjbGVhci10ZXh0IChub3QgZW5jcnlwdGVkKSBjb25uZWN0aW9uIHdpdGgg dGhlCitzYW1lIHJlc3VsdHM6IHNtb290aCwgZmFzdCB0cmFuc2ZlciBvZiBhIGJpZyB0ZXh0IGZp bGUgKDQwMEsgY3BzKTsgcm9ja3kgYnV0CitzdWNjZXNzZnVsIHRyYW5zZmVyIG9mIHRoZSBuby1J QUMgYmluYXJ5IHBhdHRlcm4gZmlsZSAoMTM1SyBjcHMpLiAgU3dpdGNoaW5nCitiYWNrIHRvIHR0 cnVuY21kKCksIHRoZSBzYW1lIGJpbmFyeSBmaWxlIGlzIHJlY2VpdmVkIGF0IDEuNU0gY3BzLCBh bmQgdGhlCituby1JQUMgYmluYXJ5IGZpbGUgdG90YWxseSBmYWlscyBhZnRlciB0b28gbWFueSAi QmFkIENSQyJzOyBhbmQgd2UgYWxyZWFkeQora25vdyB0aGF0IGFueSBmaWxlIHRoYXQgY29udGFp bnMgSUFDcyB3aWxsIGZhaWwuICBPbmUgbWlnaHQgc2F5IHRoYXQKK3R0cHR5Y21kKCkgaXMgYmV0 dGVyIGluIGV2ZXJ5IHJlc3BlY3QgdGhhbiB0dHJ1bmNtZCgpIGV4Y2VwdCBpbiBzcGVlZAorKHdo ZW4gaXQgd29ya3MpLgorCitMZXQncyBzZWUgaWYgdHR5cHR5Y21kIHN0aWxsIHdvcmtzIGluIHJl bW90ZSBtb2RlICh0byBsb2NhbCBLOTUpOgorIC4gc3ogLyB0ZXh0IHdvcmtzLCBidXQgc2xvd2x5 LgorIC4gbHN6IC8gdGV4dCB3b3JrcyBidXQgc29tZSB3ZWlyZCBlcnJvcnMgYXJlIHJlcG9ydGVk LgorIC4gbHN6IC8gYmluYXJ5IC8gbm8gSUFDIGRvZXNuJ3Qgd29yayBhdCBhbGwgKENSQy0zMiBt aXNtYXRjaCBmb3IgYSBoZWFkZXI7CisgICAgICAgIFVuZXhwZWN0ZWQgY29udHJvbCBjaGFyYWN0 ZXIgaWdub3JlZDogMTMsIGV0YykuCisgLiBzeiAvIGJpbmFyeSAvIG5vIElBQyB3b3JrcyBPSyBi dXQgc2xvdy4KKyAuIHN6IC8gYmluYXJ5IC8gZnVsbCB0ZXN0IHBhdHRlcm4gd2l0aCBJQUMgd29y a3MgT0sgYnV0IHNsb3cuCisgLiBTZW5kaW5nIHRleHQgaW50byByeiBmYWlscyBjb21wbGV0ZWx5 LgorCitXaGF0IGFib3V0IHR0cnVuY21kKCkgaW4gcmVtb3RlIG1vZGU/CisgLiBzZW5kIC90ZXh0 IHdvcmtzLCBmYXN0LgorIC4gc2VuZCAvYmluYXJ5IHdvcmtzLCBmYXN0LiAKKyAuIHJlY2VpdmUg L3RleHQgd29ya3MsIG5vdCBzbyBmYXN0IGJ1dCBub3QgYmFkLgorIC4gcmVjZWl2ZSAvYmluYXJ5 IHdvcmtzLCBub3Qgc28gZmFzdCBidXQgbm90IGJhZC4KKworU28gd2UgdXNlIHR0cnVuY21kKCkg Zm9yIHJlbW90ZSBtb2RlLCBhbmQgd2UgdXNlIGl0IGZvciBsb2NhbCBtb2RlCitzZXJpYWwtcG9y dCBhbmQgbW9kZW0gY29ubmVjdGlvbnMsIGFuZCB3ZSB1c2UgdHRwdHljbWQoKSBvbiBuZXR3b3Jr Citjb25uZWN0aW9ucyBiZWNhdXNlIChhKSB0aGV5IG1pZ2h0IGJlIGVuY3J5cHRlZCwgYW5kIChi KSBldmVuIGlmIHRoZXkgYXJlCitub3QsIHRoZXkgdXNlIHNvbWUgcHJvdG9jb2wgdGhhdCB3ZSBo YXZlIHRvIGhhbmRsZSwgZS5nLiBUZWxuZXQsIFJsb2dpbi4KKzE5IEF1ZyAyMDA3LgorCitEaXNj b3ZlcmVkIHRoYXQgU2VuZGluZyBiaW5hcnkgZmlsZXMgbm8gbG9uZ2VyIHdvcmtzLiAgVGV4dCBp cyBPSywgYmluYXJ5Cit0cmFuc2ZlcnMgZG9uJ3QgZXZlbiBzdGFydC4gIFRoaXMgaGFwcGVucyBv biBib3RoIGVuY3J5cHRlZCBhbmQgY2xlYXItdGV4dAorY29ubmVjdGlvbnMuICB0dHB0eWNtZCgp IGlzIGJlaW5nIHVzZWQgaW4gYm90aCBjYXNlcy4gIEJ1dCBvZGRseSBlbm91Z2gsCityZWNlaXZp bmcgYmluYXJ5IHN0aWxsIHdvcmtzIGFzIGJlZm9yZS4gIFdoYXQgZGlkIEkgYnJlYWssIGFuZCB3 aGVuPworT2gsIGl0IHdhcyBqdXN0IHRoZSBzY3JpcHQsIHdoZW4gSSBjaGFuZ2VkIGl0IGZyb20g dXNpbmcgc3ogdG8gbHN6LiAgUHV0dGluZworaXQgYmFjayB0byBzeiBtYWtlcyBpdCB3b3JrLCBl dmVuIHdpdGggdGhlIGZ1bGwgMy4yTUIgYmluYXJ5IHBhdHRlcm4gd2l0aAorSUFDcy4KKworSSBi YWNrZWQgb2ZmIHRoZSBjaGFuZ2VzIEkgbWFkZSB0byBja2N0ZWwuYyB0byBzdXBwcmVzcyBzb21l IHdhcm5pbmdzLCBpbgordmlldyBvZiB0aGUgZmFjdCB0aGF0IHNpbWlsYXIgY2hhbmdlcyB0byBj a3V0aW8uYyBicm9rZSB0aGluZ3Mgc28gYmFkbHkuCisxOSBBdWcgMjAwNy4KKworSWYgc3ogaXMg bm90IGdpdmVuIHRoZSAtZSBmbGFnLCBpdCBzZW5kcyBjb250cm9sIGNoYXJhY3RlcnMgYmFyZSwg ZXhjZXB0IF5QLAorXlEsIF5TLCBhbmQgXlguICBeWCBpcyB0aGUgY29udHJvbCBwcmVmaXgsIHNv IF5BIGlzIHNlbnQgXlggZm9sbG93ZWQgYnkgQS4KK1dpdGggLWUsIGFsbCBDMCBjb250cm9sIGNo YXJzIGFyZSBwcmVmaXhlZCwgYnV0IHdpdGggXlgsIHdoaWNoIGlzLCBvZgorY291cnNlLCBhIGNv bnRyb2wgY2hhcmFjdGVyLiAgSW50ZXJlc3RpbmdseSwgdGhlIEMxIGFuYWxvZ3Mgb2YgXlAsIF5R LCBeUworKGJ1dCBub3QgXlggYW5kLCB1bmZvcnR1bmF0ZWx5LCBub3QgSUFDKSBhcmUgYWxzbyBw cmVmaXhlZC4gIC1lIG1ha2VzIG5vCitkaWZmZXJlbmNlIGZvciA4LWJpdCBjaGFyYWN0ZXJzLgor CitJZiB3ZSBoYXZlIGEgVGVsbmV0IGNvbm5lY3Rpb24gYW5kIHRoZSBzZXJ2ZXIgaXMgaW4gQVND SUkgKE5WVCkgbW9kZSwgQ1IgaXMKK2Fsd2F5cyBmb2xsb3dlZCBieSBMRiBvciBOVUwuICBXZWxs LCBpdCBzZWVtcyB0aGUgc2VydmVyIGlzIHB1dHRpbmcgdXMKKyhLZXJtaXQpIGluIGJpbmFyeSBt b2RlIGluIHRoaXMgY2FzZSwgYnV0IHN0YXlpbmcgaW4gQVNDSUkgbW9kZSBpdHNlbGYuCitBZGRl ZCBjb2RlIHRvIGhhbmRsZSBOVlQgYnl0ZSBzdHVmZmluZyBhbmQgdW5zdHVmZmluZyBpbiBlYWNo IGRpcmVjdGlvbgoraW5kZXBlbmRlbnRseSwgYWNjb3JkaW5nIHRvIHRoZSBUUkFOU01JVF9CSU5B Ulkgc3RhdGUgaW4gdGhhdCBkaXJlY3Rpb24uICBJCittYWRlIGEgZmlsZSBjb250YWluaW5nIGp1 c3QgdGhlIGJ5dGVzIDAtMzEgYW5kIDEyNyBhbmQgMTI4LTE1OSBhbmQgMjU1ICg2NgorYnl0ZXMg YWxsIHRvZ2V0aGVyKSBhbmQgc2VuZGluZyBpdCBmcm9tIHRoZSBob3N0IHRvIEMtS2VybWl0LCB0 aGUgbG9jYWwgbG9nCitzaG93cyB0aGF0IGV2ZXJ5IGNvbnRyb2wgY2hhcmFjdGVyIHdhcyByZWNl aXZlZCBjb3JyZWN0bHkgYW5kIGFsbCBURUxORVQKK2NvbnZlcnNpb25zIHdlcmUgZG9uZSByaWdo dCAtLSBOVUwgcmVtb3ZlZCBhZnRlciBDUiAoYW5kIG9ubHkgYWZ0ZXIgQ1IpOyBJQUMKK3JlbW92 ZWQgYWZ0ZXIgSUFDIChhbmQgb25seSBhZnRlciBhbiBJQUMgbWVhbnQgYXMgYSBxdW90ZSkuICBG b3IgdGhlIGZpcnN0Cit0aW1lLCBJIGNhbiByZWNlaXZlIHRoZSAxTUIgYWxsLXZhbHVlcyB0ZXN0 IHBhdHRlcm4sIGJ1dCB0aGVyZSBhcmUgc3RpbGwKK3RvbnMgb2YgKGNvcnJlY3RhYmxlKSBDUkMg ZXJyb3JzLCBzbyB0aGUgdHJhbnNmZXIgcmF0ZSBpcyByZWFsbHkgYXdmdWwsIGxpa2UKK2Fib3V0 IDUlIG9mIHdoYXQgd2UgZ2V0IHdpdGggYSB0ZXh0IGZpbGUgKDI1S2NwcyBpbnN0ZWFkIG9mIDUw MCkuCisKK0Z1cnRoZXIgZXhwZXJpbWVudGF0aW9uIHNob3dzIHRoYXQgdGhlIGZ1bmRhbWVudGFs IHRyYW5zcGFyZW5jeSBwcm9ibGVtIGlzCitmaXhlZDsgd2UgY2FuIHJlY2VpdmUgc2hvcnQgZmls ZXMgKHNheSwgMUsgb3IgbGVzcykgY29udGFpbmluZyBhYnNvbHV0ZWx5CithbnkgYnl0ZSB2YWx1 ZXMgaW4gYW55IGNvbWJpbmF0aW9uIHdpdGggbm8gZXJyb3JzIGF0IGFsbC4gIEJ1dCBvbmNlIHRo ZSBmaWxlCitzaXplIHJlYWNoZXMgKHNheSkgMTBLLCB3ZSBnZXQgQ1JDIGVycm9ycywgbGlrZSBv bmUgZXZlcnkgMiBvciAzSyBvZiBkYXRhLgorVGhlc2UgYXJlIG5vdCBkZXRlcm1pbmlzdGljLiAg SW4gc3VjY2Vzc2l2ZSB0cmFuc2ZlcnMgb2YgdGhlIHNhbWUgZmlsZSwgdGhleQorY29tZSBpbiBk aWZmZXJlbnQgc3BvdHMuICBJdCdzIHRlbXB0aW5nIHRvIGJsYW1lIHB0eSBidWZmZXIgb3ZlcnJ1 bnMsIGJ1dAordGhlbiB0ZXh0IGZpbGVzIHdvdWxkIHNob3cgdGhlIHNhbWUgYmVoYXZpb3IuICBX aGVuIGEgYmluYXJ5IGZpbGUgc2l6ZQorZXhjZWVkcywgc2F5LCAxTUIsIHRoZSBjaGFuY2VzIG9m IHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBnbyB3YXkgZG93biwKK2luZGVwZW5kZW50IG9mIHdoZXRo ZXIgbXkgZXh0ZXJuYWwgcHJvdG9jb2wgaXMgcnogb3IgbHJ6LiAgSSBsaWtlIGxyeiBiZXR0ZXIK K2JlY2F1c2UgdGhlIGVycm9yIHJlcG9ydHMgY29tZSBvdXQgb24gdGhlIHNjcmVlbiBhcyB0aGUg dHJhbnNmZXIgaXMgZ29pbmcKK29uLiAgVHJ5aW5nIHRvIGRvd25sb2FkIGEgcmVhbC13b3JsZCBi aW5hcnkgZmlsZSAtLSBhIDIuMk1CIEMtS2VybWl0CitleGVjdXRhYmxlIC0tIEkgZ2V0IDQ1MDAg ZXJyb3IgbWVzc2FnZXMgYnV0IHRoZSB0cmFuc2ZlciBldmVudHVhbGx5IHN1Y2NlZWRzLAord2l0 aCBhbiBlZmZlY3RpdmUgdGhyb3VnaHB1dCBvZiAyMUtjcHMuCisKK0FjdHVhbGx5IGl0IHR1cm5z IG91dCB0aGF0ICJzeiAtYSBzb21lYmlndGV4dGZpbGUiICgyLjJNQikgYWxzbyBnZXRzIGEgbG90 CitvZiBDUkMgZXJyb3JzLiAgVGhlIC1lIGZsYWcgKGVzY2FwZSBhbGwgY29udHJvbCBjaGFyYWN0 ZXJzKSBtYWtlcyB0aGUgc2FtZQorYmlnIHRleHQgZmlsZSB0cmFuc2ZlciB3aXRoIGZldyBvciBu byBlcnJvcnMuICBJdCdzIG5vdCBzdXJlLWZpcmUuCitTb21ldGltZXMgbm8gZXJyb3JzLCBzb21l dGltZXMgb25lIG9yIHR3bywgYW5kIHNvbWV0aW1lcyBhIGZhdGFsIGVycm9yIHRoYXQKK2tpbGxz IHRoZSB0cmFuc2Zlci4KKworV2l0aCBiaW5hcnkgZmlsZXMuLi4gYSAzMksgYmluYXJ5IGZpbGUg c2VlbXMgdG8gbWFrZSBpdCBldmVyeSB0aW1lLiAgNDBLCitmYWlscyBhYm91dCA1MCUgb2YgdGhl IHRpbWUuICA0OEsgZmFpbHMgNjAlIGFuZCBldmVyeSB0aW1lIGl0IGZhaWxzLCBpdCBoYXMKK2Ny ZWF0ZWQgYSBwYXJ0aWFsIGZpbGUgb2YgZXhhY3RseSAzMksgKDMyNzY4IGJ5dGVzKS4gIDk2SyBm YWlscyA5IG91dCBvZiAxMAordGltZXMsIHdoZW4gaXQgZmFpbHMsIHRoZSBwYXJ0aWFsIGZpbGUg aXMgYWx3YXlzIDAgYnl0ZXMsIG9yIDMyNzY4LCBvcgorNjU1MzYsIGJ1dCB0aGF0IGp1c3QgbWVh bnMgdGhhdCByeidzIGZpbGUgb3V0cHV0IGJ1ZmZlciBpcyAzMksuCisKK1doeSwgdGhlbiwgZG8g YmluYXJ5IGZpbGVzIGNhdXNlIHRyb3VibGUgaWYgaXQgaXMgbm90IGEgc29saWQgdHJhbnNwYXJl bmN5Citwcm9ibGVtPyAgSWYgYSBjZXJ0YWluIGZpbGUgY2FuIGdldCB0aHJvdWdoIG9uY2UsIHdo eSBjYW4ndCBpdCBnZXQgdGhyb3VnaAorZXZlcnkgdGltZT8gIFdoZW4gYSBjaGFyYWN0ZXIgYXJy aXZlcyBhdCB0aGUgcHR5LCB0aGUgcHR5IGRyaXZlciBwcm9iYWJseQordGFrZXMgYSBkaWZmZXJl bnQgcGF0aCB0aHJvdWdoIGl0cyBjb2RlLCBjaGVja2luZyB0aGUgdGVybWluYWwgZmxhZ3MgdGhh dAord291bGQgYWZmZWN0IHRoYXQgY2hhcmFjdGVyLiAgSSB0cmllZCBtYWtpbmcgS2VybWl0J3Mg bmV0d29yayByZWFkIGJ1ZmZlcnMKK3Zlcnkgc21hbGwgYnV0LCBzdXJwcmlzaW5nbHksIHRoaXMg bWFkZSB0aGluZ3Mgd29yc2UuICBJIGFsc28gdHJpZWQgbWFraW5nCit0aGVtIHZlcnkgbXVjaCBi aWdnZXIsIHdoaWNoIGRpZG4ndCBoZWxwIGVpdGhlci4gIDI0SyBzdGlsbCBzZWVtcyB0byBiZSB0 aGUKK3JpZ2h0IHNpemUuCisKK1NvLCBpcyBpdCB0aGF0IHNvbWUgY2hhcmFjdGVycyB0YWtlIGxv bmdlciB0byBwcm9jZXNzIHRoYW4gb3RoZXJzPyAgU28gbG9uZwordGhhdCBkYXRhIGlzIGxvc3Qg ZHVlIHRvIGxhY2sgb2YgZmxvdyBjb250cm9sIGJldHdlZW4gVENQIGFuZCB0aGUgcHR5PyAgT25l Cit3YXkgdG8gdGVzdCB0aGlzIHRoZW9yeSBpcyB0byBzbG93IFptb2RlbSBkb3duLiAgSSB0cmll ZCAiLWwgMzIiIHdoaWNoLAorYWNjb3JkaW5nIHRvIHRoZSBtYW4gcGFnZSwgdGVsbHMgc3ogdG8g IndhaXQgZm9yIHRoZSByZWNlaXZlciB0byBhY2tub3dsZWRnZQorY29ycmVjdCBkYXRhIGV2ZXJ5 IE4gKDMyIDw9IE4gPD0gMTAyNCkgY2hhcmFjdGVycy4gIFRoaXMgbWF5IGJlIHVzZWQgdG8KK2F2 b2lkIG5ldHdvcmsgb3Zlci1ydW4gd2hlbiBYT0ZGIGZsb3cgY29udHJvbCBpcyBsYWNraW5nLiIg IE1ha2VzIG5vCitkaWZmZXJlbmNlLiAgSSBhbHNvIHRyaWVkIHRoZSAtdyAoV2luZG93KSBzd2l0 Y2gsIGRpdHRvLiAgSW4gZmFjdCB0aGVyZSBhcmUKK2FsbCBzb3J0cyBvZiBvcHRpb25zIHRvIHNl dCB0aGUgIndpbmRvdyBzaXplIiwgInBhY2tldCBsZW5ndGgiLCAiYmxvY2sKK3NpemUiLCBhbmQg ImZyYW1lIGxlbmd0aCIsIGJ1dCB3aXRoIG5vIGV4cGxhbmF0aW9uIG9mIHdoYXQgdGhlc2UgbWVh biBvciBob3cKK3RoZXkgYXJlIHJlbGF0ZWQuICBJZiBJIGNyYW5rIGV2ZXJ5dGhpbmcgZG93biB0 byBtaW5pbXVtIHZhbHVlOgorCisgIGxzeiBxIC1MIDMyIC1sIDMyIC13IDEKKworSSBnZXQgNTAl IHN1Y2Nlc3Mgd2l0aCB0aGUgOTZLIGZpbGUgaW5zdGVhZCBvZiAxMCUuICBBZGRpbmcgLWUsIG9k ZGx5Citlbm91Z2gsIG1hZGUgaXQgd29yc2UuICBJIGFsc28gdHJpZWQgc2V0dGluZyB0aGUgZW52 aXJvbm1lbnQgdmFyaWFibGUKK1pOVUxMUyB0byBkaWZmZXJlbnQgbnVtYmVycyBsaWtlIDUxMiwg bm8gaGVscCB0aGVyZSBlaXRoZXIuCisKK0kgdHJpZWQgbWFraW5nIHRoZSByZWFkLWZyb20tbmV0 LXdyaXRlLXRvLXB0eSBidWZmZXIgc21hbGwgKDFLKSBidXQgbGVhdmluZwordGhlIHB0eS10by1u ZXQgb25lIGJpZy4gIFRoaXMgaW1wcm92ZXMgY2hhbmNlcyBvZiBzdWNjZXNzLCBidXQgaXQncwor aW50b2xlcmFibHkgc2xvdyAoM0tjcHMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjYXBhYmxlIG9m IDUwMEspLgorCitJIGFsc28gY2hhbmdlZCB0aGUgd3JpdGUtdG8tcHR5IG9wZXJhdGlvbiBmcm9t IGEgc2luZ2xlIHdyaXRlKCkgY2FsbCBvZgorcG9zc2libHkgbWFueSBLIGNoYXJhY3RlcnMgdG8g YSBieXRlIGxvb3AsIG9uZSB3cml0ZSgpIHBlciBieXRlLiAgU2FtZQorcmVzdWx0OiBzdWNjZXNz IChidXQgc3RpbGwgYWJvdXQgMzAwIHJlY292ZXJhYmxlIGVycm9ycyksIHRocm91Z2hwdXQgM0tj cHMuCisyMCBBdWcgMjAwNy4KKworV2l0aCB0dHB0eWNtZCgpIGNvbmZpZ3VyZWQgdG8gd3JpdGUg dG8gdGhlIHB0eSBpbiBhIGJ5dGUgbG9vcCwgaXQgaXMKK3Bvc3NpYmxlIHRvIGRlbGF5IGVhY2gg d3JpdGUuICBBZGRpbmcgYSAxMG1zZWMgZGVsYXkgcGVyIGNoYXJhY3RlciByZXN1bHRzCitpbiBh IHRyYW5zZmVyIHRoYXQgcnVucyBhdCBhYm91dCAyMCBjcHMgYW5kIChmb3IgdGhlIDk2SyB0ZXN0 IGZpbGUpIHdvdWxkCit0YWtlIGFib3V0IDgwIG1pbnV0ZXMgdG8gY29tcGxldGUuICBBbmQgeWV0 IGl0IHN0aWxsIGdldHMganVzdCBhcyBtYW55CitlcnJvcnMuICBTbyBpdCdzIG5vdCBhIG1hdHRl ciBvZiB0aW1pbmcgZWl0aGVyLiAgVGhlIGVycm9ycyBjb21lLCBvbgorYXZlcmFnZSwgZXZlcnkg ZmlsZSAzODggYnl0ZXMsIGJ1dCBub3QgYXQgcmVndWxhciBpbnRlcnZhbHMuCisKK0kgdHJpZWQg dGhlIFRJT0NSRU1PVEUgaW9jdGwgb24gdGhlIHB0eSBtYXN0ZXIsIGFzIGRpc2N1c3NlZCBzb21l d2hhdAorb2JsaXF1ZWx5IGluIHRoZSBNYWMgT1MgWCAibWFuIHB0eSIgcGFnZTsgIlRoaXMgbW9k ZSBjYXVzZXMgaW5wdXQgdG8gdGhlCitwc2V1ZG8gdGVybWluYWwgdG8gYmUgZmxvdyBjb250cm9s bGVkIGFuZCBub3QgaW5wdXQgZWRpdGVkIChyZWdhcmRsZXNzIG9mCit0aGUgdGVybWluYWwgbW9k ZSkiIC0tIHNvdW5kcyBsaWtlIGp1c3QgdGhlIHRpY2tldCBidXQgaXQgbWFkZSBubworZGlmZmVy ZW5jZS4gIEFjdHVhbGx5LCBsb29raW5nIGF0IGEgbWFuIHBhZ2Ugb24gYW5vdGhlciBPUyAoU29s YXJpcyksIGl0CitzYXlzIHRoaXMgaXMgb25seSBmb3IgbGluZXMgb2YgdGV4dCwgRU9McyBhcmUg c3VwcGxpZWQsIHNvIHRoYXQgd291bGQgbWVzcwordXAgdGhlIHByb3RvY29sLiAgU28gcmVtZW1i ZXI6IGRvbid0IHVzZSB0aGlzLgorCitUcmllZCB3aXRob3V0IE9fTkRFTEFZOyB0aGUgYmVoYXZp b3Igd2FzIHRoZSBzYW1lIGJ1dCB0aGUgc3BlZWQgd2FzIG11Y2gKK3Nsb3dlci4KKworVHJpZWQg c3dpdGNoaW5nIGJhY2sgdG8gdGhlIGNrdXB0eS5jIHJvdXRpbmVzIG9uIE1hYyBPUyBYIGFuZCBm b3VuZCB0aGF0IGl0Cit3b3JrcyBub3cgdGhlIHNhbWUgYXMgd2l0aCBvcGVucHR5KCksIGV4Y2Vw dCB0aGF0IEkgc2VlbSB0byBnZXQgbW9yZSBnZXR0eQorYmFiYmxlIGF0IHRoZSBlbmQuICBCdXQg dGhpcyBtZWFucyBJIGNhbiBydW4gc29tZSB0ZXN0cyBvbiBTb2xhcmlzLiAgSSBtb3ZlZAordGhl IGVudGlyZSB0ZXN0IGVudmlyb25tZW50IGZyb20gTWFjIE9TIFggMTAuNC45IHRvIFNvbGFyaXMg OS4gIEJ1dCBpdAorZG9lc24ndCB3b3JrIGF0IGFsbC4KKworVHJ5aW5nIHRvIGZpZ3VyZSBvdXQg dGhlIGNrdXB0eS5jIG1vZHVsZXMgYWdhaW4uCisgLiBkb19wdHkoKSBjYWxscyBwdHlfZ2V0cHR5 KCkgd2hpY2ggcmV0dXJucyBpbiBhcmcxIHRoZSBmZCBvZiB0aGUgcHR5IG1hc3Rlci4KKyAuIFRo ZW4gaXQgY3JlYXRlcyBhIHBpcGUgYXMgYSB3YXkgdG8gdGVsbCB3aGVuIHRoZSBjaGlsZCBkaWVz CisgLiBUaGVuIGl0IGNyZWF0ZXMgYSBmb3JrOgorICAgIC0gVGhlIHBhcmVudCBkb2VzIGEgYmxv Y2tpbmcgcmVhZCBmcm9tIHRoZSBwaXBlCisgICAgLSBUaGUgY2hpbGQgY2FsbHMgZ2V0cHR5c2xh dmUoKSB0byBnZXQgdGhlIHB0eSBzbGF2ZQorICAgICAgYW5kIHdyaXRlcyBvbmUgYnl0ZSB0byB0 aGUgcGlwZQorICAgICAgYW5kIHRoZW4gZXhlY3MgdGhlIGNvbW1hbmQgaXQncyBzdXBwb3NlZCB0 byBydW4KK05vdGUgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBzbGF2ZSBpcyBrbm93 biBvbmx5IHRvIHRoZSBsb3dlciBmb3JrLgorVGhlcmVmb3JlIHRoZSBsb3dlciBmb3JrIGlzIHRo ZSBvbmUgdGhhdCBoYXMgdG8gc2V0IGFsbCB0aGUgdHR5IG1vZGVzLCBldGMuCitJIHRvb2sgY2Fy ZSBvZiBhbGwgdGhhdCBidXQgdGhlIGNrdXB0eS5jIG1ldGhvZCBkb2Vzbid0IHdvcmsgYXQgYWxs IG9uCitTb2xhcmlzLiAgQnV0IGl0IHdvcmtzICJmaW5lIiBvbiBNYWMgT1MgWCAodGhlIDMySyBh bGwtYnl0ZXMgdGVzdCBmaWxlCit0cmFuc2ZlcnMgaW5zdGFudGx5IHdpdGggbm8gZXJyb3JzLCBi dXQgdGhlIDk2SyBvbmUgZXJyb3JzIG91dCkuCisKK1RoZSBwcm9ibGVtIG9uIFNvbGFyaXMgaXMg dGhhdCBwdHlfbWFrZV9yYXcoKSBmYWlscyBvbiB0aGUgbWFzdGVyZmQgKGJ1dCBub3QKK29uIHRo ZSBzbGF2ZWZkKSB3aXRoIGVycm5vIDI1ICJpb2N0bCBpbmFwcHJvcHJpYXRlIGZvciBkZXZpY2Ui LiAgSXQgZG9lc24ndAorbWF0dGVyIHdoZXRoZXIgSSBkbyBpdCBpbiBja3VwdHkuYyBvciBja3V0 aW8uYy4gIEkgZm91bmQgYSB3ZWIgcGFnZSBvbgora2RlLm9yZyB0aGF0IHNheXMgU29sYXJpcyBk b2VzIG5vdCBhbGxvdyB0Y2dldC9zZXRhdHRyKCkgb24gYSBwdHkgbWFzdGVyLgorQnV0IHRoZSBT dW4gImtub3dsZWRnZSBiYXNlIiBpcyBub3Qgb3BlbiB0byB0aGUgcHVibGljLiAgV2VsbCwgcHJl c3VtYWJseQorY2hhbmdlcyBtYWRlIHRvIHRoZSBzbGF2ZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBt YXN0ZXIgKGNvbW1lbnRzIGluIFNvbGFyaXMKK3RlbG5ldGQgc2VlbSB0byBjb25maXJtIHRoaXMu Li4pICBMZXQncyBjb21lIGJhY2sgdG8gU29sYXJpcyBsYXRlci4KKworTW92aW5nIHRvIGEgTGlu dXggd2l0aCBscnpzeiBpbnN0YWxsZWQuLi4gIEJ1aWx0IGEgS2VyYmVyb3MgNSB2ZXJzaW9uIHdp dGgKK1VTRV9DS1VQVFlfQy4gIExpa2Ugb24gTWFjIE9TIFgsIGl0IHRyYW5zZmVycyBzaG9ydCBm aWxlcyBPSyBhbmQgY2hva2VzIG9uCitsb25nZXIgb25lcy4gIFN3aXRjaGVkIHRvIG9wZW5wdHko KSwgaXQgYmVoYXZlcyB0aGUgc2FtZS4gIFNvIHRoZSBwcm9ibGVtcworb24gTWFjIE9TIFggYXJl IGV2aWRlbnRseSBub3QgT1Mtc3BlY2lmaWMsIHdoaWNoIGlzIGdvb2QgSSBndWVzcywgc2luY2Ug dGhhdAorbWVhbnMgZmluZGluZyB0aGUgd2F5IGFyb3VuZCB0aGVtIHdpbGwgYXBwbHkgdG8gbW9y ZSB0aGFuIG9uZSBwbGF0Zm9ybS4KKzIxIEF1ZyAyMDA3LgorCitMb29rIGludG8gVElPQ1NDVFRZ IGFnYWluLiAgT24gU3lzdGVtIFYgYmFzZWQgT1Mncywgb3BlbmluZyBhIHB0eSBhY3F1aXJlcyBh Citjb250cm9sbGluZyB0ZXJtaW5hbCBhdXRvbWF0aWNhbGx5LiAgT24gQlNELWJhc2VkIE9TJ3Ms IG5vOyB5b3UgaGF2ZSB0byB1c2UKK3RoZSBUSU9DU0NUVFkgb24gdGhlIHNsYXZlIGZpbGUgZGVz Y3JpcHRvciB0byBnaXZlIGl0IG9uZS4gIEknbSBub3Qgc3VyZSB3aHkKK2EgY29udHJvbGxpbmcg dGVybWluYWwgd291bGQgYmUgbmVlZGVkLCBleGNlcHQgdGhhdCB3aXRob3V0IG9uZSwgdGhlIHZp cnR1YWwKK2RldmljZSAiL2Rldi90dHkiIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgcHJvY2VzcyB0 aGF0IHJ1bnMgb24gdGhlIHB0eSwgYW5kCittYXliZSB0aGUgYXBwbGljYXRpb24gdGhhdCBydW5z IHRoZXJlIChlLmcuIHJ6c3opIGNoZWNrcyBmb3IgaXQuICBPbiB0aGUKK2Rvd25zaWRlLCBoYXZp bmcgYSBjb250cm9sbGluZyB0ZXJtaW5hbCBvcGVucyB0aGUgcHJvY2VzcyB1cCB0byB0ZXJtaW5h bAoraW50ZXJydXB0cyBsaWtlIFNJR0lOVCBhbmQgU0lHUVVJVC4gIFVudGlsIG5vdyBJIGhhdmUg bm90IGJlZW4gdXNpbmcgdGhpcworaW9jdGwoKS4gIFJlc3VsdHMgKGluIExpbnV4KToKKworICBX aXRoIFRJT0NTQ1RUWTogOTZLIGFsbC1ieXRlcyB0ZXN0OiAxMSBzY3JlZW5zIG9mIGVycm9ycywg dGhlbiBzdWNjZXNzCisgIFdpdGhvdXQgVElPQ1NDVFRZOiBleGFjdGx5IHRoZSBzYW1lLgorCitU cmllZCB0aGUgc2FtZSB0aGluZyB3aXRoIFRJT0NOT1RUWSBpbnN0ZWFkIG9mIFRJT0NTQ1RUWSwg d2l0aCBleGFjdGx5IHRoZQorc2FtZSByZXN1bHRzIChubyBlZmZlY3Qgd2hhdHNvZXZlcikuCisK K1RoZXJlIGhhcyB0byBiZSBhIHdheSB0byBtYWtlIHRoaXMgd29yaywgYmVjYXVzZSBabW9kZW0g d29ya3MgdGhyb3VnaAordGVsbmV0ZCwgd2hpY2ggYmFzaWNhbGx5IHRoZSBzYW1lIHRoaW5nIGFz IHR0cHR5Y21kKCk6IGEgcmVsYXkgYmV0d2VlbiB0aGUKK25ldHdvcmsgYW5kIGEgcHR5LiAgdHRw dHljbWQoKSBpcyBsaWtlIHRlbG5ldGQgYmFja3dhcmRzLiAgTW9kZXJuIHRlbG5ldGRzCithcmUg bm90IG11Y2ggaGVscDsgdGhleSBkb24ndCBhY2Nlc3MgcHR5cyBvciB0aGUgbmV0d29yayBkaXJl Y3RseSwgdGhleSBnbwordGhyb3VnaCAibXV4IiBkZXZpY2VzIHNvIEkgY2FuJ3Qgc2VlIHdoYXQg dGhleSdyZSBkb2luZyB0byBnZXQgdHJhbnNwYXJlbmN5CithbmQgZmxvdyBjb250cm9sLiAgQW4g b2xkIEJTRCB0ZWxuZXRkIHVzZXMgcGFja2V0IG1vZGUgYnV0IHRoYXQgd291bGQgYmUgYQorYmln IGRlYWwuLi4KKworSSB0cmllZCBpZ25vcmluZyB2YXJpb3VzIHNpZ25hbHMgbGlrZSBTSUdUVE9V IGFuZCBTSVRTVFAsIHNpbmNlIHNvbWUgVGVsbmV0CitjbGllbnRzIGRvIHRoaXMuICBObyBlZmZl Y3QsIG5vIGRpZmZlcmVuY2UuICBBbnl3YXksIGluIExpbnV4IHRoZSB0cmFuc2ZlcnMKK2FsbW9z dCBhbHdheXMgZmluaXNoIE9LIGRlc3BpdGUgdGhlIG1hbnkgZXJyb3JzLiAgVGhlcmUgaXMganVz dCBzb21lIHRyaWNrCitJJ20gbWlzc2luZyB0byBtYWtlIHRoZSBwdHkgYWNjZXB0IGEgc3RyZWFt IG9mIGFyYml0cmFyeSBieXRlcyB3aXRob3V0CitoaWNjdXBpbmcuCisKK1doYXQgYWJvdXQgU29s YXJpcywgd2hpY2ggdXNlcyBja3VwdHkuYz8gIEluIHN0cmVhbXMtYmFzZWQgT1Mncywgd2hlcmUg bGluZQorZGlzY2lwbGluZXMgYW5kIHdoYXRub3QgYXJlIHB1c2hlZCBvbiB0b3Agb2YgdGhlIHB0 eSwgaXQgbG9va3MgbGlrZSB0aGUgcHR5Cittb2R1bGUgc2F2ZXMgdGhlIGZpbGUgZGVzY3JpcHRv ciBvZiB0aGUgImJhcmUiIHNsYXZlIHB0eSAoYXMgJ3NwdHknKSBiZWZvcmUKK3B1c2hpbmcgdGhp bmdzIG9udG8gaXQsIGFuZCB0aGVuIGxhdGVyIHVzZXMgc3B0eSByYXRoZXIgdGhhbiB0aGUgcmVn dWxhcgorc2xhdmUgcHR5IGZpbGUgZGVzY3JpcHRvciB3aGVuIGdldHRpbmcvc2V0dGluZyB0ZXJt aW5hbCBtb2Rlcy4gIEknbSBub3Qgc3VyZQord2hhdCB0aGlzIGlzIGFsbCBhYm91dCBidXQgaXQn cyBkZWZpbml0ZWx5IFN5c1Zpc2guLi4gIEl0IGhhcHBlbnMgaWYKK1NUUkVBTVNQVFkgaXMgZGVm aW5lZCwgYnV0IEkgbm90aWNlZCB0aGF0IFNUUkVBTVNQVFkgaXMgbmV2ZXIgZGVmaW5lZAorYW55 d2hlcmUuICBJIHRyaWVkIGRlZmluaW5nIGl0IHNvIHdlIHRha2UgYW4gZW50aXJlbHkgZGlmZmVy ZW50IHBhdGggdGhyb3VnaAordGhlIGNvZGUuICBJdCBtYWRlIGFic29sdXRlbHkgbm8gZGlmZmVy ZW5jZS4KKworVGhlbiBJIG5vdGljZWQgdGhhdCBIQVZFX1NUUkVBTVMgaXMgbm90IGRlZmluZWQg Zm9yIFNvbGFyaXMgZWl0aGVyLiAgVHJpZWQKK2RlZmluaW5nIGl0LCBidXQgdGhlIHNlc3Npb24g ZGlkbid0IHdvcmsgYXQgYWxsLCBubyBpL28uICBSZW1vdmluZyB0aGUKK0hBVkVfU1RSRUFNUyBk ZWZpbml0aW9uIGJ1dCBrZWVwaW5nIHRoZSBTVFJFQU1TUFRZIGRlZmluZWQsIEkgcmVidWlsdCBh bmQKK3RyaWVkICJzZXQgaG9zdCAvY29ubmVjdCAvcHR5IGVtYWNzIi4gIEkgZ290IGFuIEVNQUNT IHNjcmVlbiBidXQgY291bGQgbm90Cit0eXBlIGFueXRoaW5nIGludG8gaXQsIHdoaWNoIG1lYW5z IHRoYXQgU1RSRUFNU1BUWSBzaG91bGQgbm90IGJlIGRlZmluZWQKK2VpdGhlci4gIFJlbW92ZWQg dGhlIGRlZmluaXRpb24gYW5kICJzZXQgaG9zdCAvcHR5IiB3b3JrcyBhZ2Fpbi4gIFNvIHdoYXQn cwordGhlIHByb2JsZW0gd2l0aCB0dHB0eWNtZCgpPworCitJbiBmYWN0LCB0dHB0eWNtZCgpIHdv cmtzIG9uIFNvbGFyaXMgd2l0aCBLZXJtaXQgYXMgdGhlIGV4dGVybmFsIHByb3RvY29sLAorYnV0 IG5vdCB3aXRoIFptb2RlbSwgbm90IGV2ZW4gd2l0aCB0ZXh0IGZpbGVzLiAgU28gYWdhaW4sIHRo ZXJlIGlzIG5vCitmdW5kYW1lbnRhbCBwcm9ibGVtIHdpdGggdGhlIGNvZGUgb3IgdGhlIGxvZ2lj LCBpdCdzIEp1c3QgQSBNYXR0ZXIgT2YKK1RyYW5zcGFyZW5jeSB0byBjb250cm9sIGFuZC9vciA4 LWJpdCBjaGFyYWN0ZXJzIC0tIHNvbWUgdHJpY2sgSSBkb24ndCBrbm93CithYm91dC4KKworTG9v a2luZyBhdCB0aGUgU29sYXJpcyBkZWJ1ZyBsb2cuLi4gIEkgc2VlIHRoYXQgY2t1cHR5LmMgaXMg Y2FsbGluZworaW5pdF90ZXJtYnVmKCkgdG8gc2V0IHRoZSB0dHkgbW9kZXMgb2YgdGhlIG1hc3Rl ciwgbm90IHRoZSBzbGF2ZSwgYW5kCitzZXRfdGVybWJ1ZigpIHRvIHNldCB0aGVtLCBidXQgeW91 IGNhbid0IGRvIHRoYXQgaW4gU29sYXJpcywgZXJyb3IgMjUuICBUaGlzCitpcyBpbiBnZXRwdHlz bGF2ZSgpLiAgU2hvdWxkbid0IGdldHB0eXNsYXZlKCkgYmUgc2V0dGluZyB0aGUgdHR5IG1vZGVz IG9mCit0aGUgc2xhdmUsIG5vdCB0aGUgbWFzdGVyPyAgSSBjaGFuZ2VkIGl0IHRvIGRvIHRoaXMs IGJ1dCBsaWtlIGFsbCBvdGhlcgorY2hhbmdlcywgaXQgbWFkZSBubyBkaWZmZXJlbmNlLiAgSSBj aGVja2VkIHRvIG1ha2Ugc3VyZSB0aGF0IGFmdGVyIHRoZSBjaGFuZ2UsCisic2V0IGhvc3QgL3B0 eSAvY29ubmVjdCBlbWFjcyIgc3RpbGwgd29ya2VkIGFuZCBpdCBkaWQuCisKK0FuZCB0aGVuIHdo YXQuLi4gIEkgaGFkIHNvbWUgY29kZSB0byByZWRpcmVjdCBzdGRlcnIgaW4gY2t1cHR5LmMgdGhh dCB3YXMKK25vdCBiZWluZyBleGVjdXRpbmcgZHVlIHRvIGEgdHlwby4gIFdoZW4gSSBmaXhlZCB0 aGUgdHlwbywgcG9vZiwgWm1vZGVtCitiaW5hcnkgdHJhbnNmZXJzIHN0YXJ0ZWQgd29ya2luZywg b3Igd29ya2luZyBhcyB3ZWxsIGFzIHRoZXkgd29yayBpbiBMaW51eAorYW5kIE1hYyBPUyBYLiAg SXQgdHVybnMgb3V0IHRoYXQgaWYgSSBkb24ndCByZWRpcmVjdCBzdGRlcnIsIHN6IGFuZCByegor anVzdCBkb24ndCB3b3JrLiAgQnV0IGxzeiBhbmQgbHJ6IGRvLiAgQnV0IGlmIEkgZG8gcmVkaXJl Y3QgaXQsIEkgZG9uJ3Qgc2VlCit0aGUgcHJvZ3Jlc3MgbWVzc2FnZXMgZnJvbSBsc3ovbHJ6LiAg MjIgQXVnIDIwMDcuCisKK0J1aWx0IG9uIEhQLVVYIDExaSB2MyAoQi4xMS4zMSBVIGlhNjQpIHdp dGggb3B0aW1pemluZyBjb21waWxlciwgZ290IHRvbnMgb2YKK3BpY2t5IHdhcm5pbmdzLCBidXQg aXQgZmluaXNoZWQgYW5kIGxpbmtlZCBhbmQgcnVucyBPSy4gIE1hbnkgb2YgdGhlCit3YXJuaW5n cyB3ZXJlIGxpa2UgdGhpczoKKworICAiY2t1Y25zLmMiLCBsaW5lIDE2MDY6IHdhcm5pbmcgIzIw NjgtRDogaW50ZWdlciBjb252ZXJzaW9uIHJlc3VsdGVkIGluIGEKKyAgY2hhbmdlIG9mIHNpZ246 ICAgdG5vcHRbMF0gPSAoQ0hBUikgSUFDOworCitJQUMgaXMgZGVmaW5lZCBhcyAyNTUgaW4gY2tj dGVsLmguICBJZiBJIGRlZmluZSBpdCBhcyAweGZmLCBJIGRvbid0IGdldCB0aGUKK3dhcm5pbmdz LiAgSSBjaGFuZ2VkIHRoZSBkZWZpbml0aW9ucyBvZiBhbGwgdGhlIFRlbG5ldCBjb21tYW5kcyB0 byBiZSBpbiBoZXgKK25vdGF0aW9uIHJhdGhlciB0aGFuIGRlY2ltYWwuICBJZiBjdXRzIHdheSBk b3duIG9uIHRoZSBIUC1VWCB3YXJuaW5ncyBhbmQKK2RvZXNuJ3Qgc2VlbSB0byBjYXVzZSBwcm9i bGVtcyBlbHNld2hlcmUuICBja2N0ZWwuaCwgMjMgQXVnIDIwMDcuCisKK05vdyBpdCBsb29rcyBs aWtlIFNvbGFyaXMgaXMgd29ya2luZyBidXQgdGhlbiBpdCBoYW5ncyBhdCB0aGUgZW5kLiAgSXQK K2FwcGVhcnMgYXMgaWYgdGhlIGNrdXB0eS5jIG1vZHVsZSBpcyBibG9ja2luZyBTSUdDSExELiAg RGVidWcgbG9nIHNob3dzIHRoYXQKK3doZW4gdGhlIHRyYW5zZmVyIGlzIGNvbXBsZXRlLCB3ZSBy ZWNlaXZlZCBJQUMgRE0gKFRlbG5ldCBEYXRhIE1hcmspIGFmdGVyCitzeidzIGxhc3QgZ2FzcCBh bmQgYmVmb3JlIHRoZSBzaGVsbCBwcm9tcHQgaXMgcHJpbnRlZC4gIEJ1dCBjYWxsaW5nCit0bl9k b29wKCkgaW4gdGhpcyBjYXNlIGlzIGEgbWlzdGFrZSBiZWNhdXNlIHdlIGFyZSByZWFkaW5nIHRo ZSBudW1iZXIgb2YKK2J5dGVzIHRoYXQgd2Uga25vdyBhcmUgYXZhaWxhYmxlIGluIGEgY291bnRl ZCBsb29wLCBidXQgdG5fZG9vcCgpIHdvdWxkCitjb25zdW1lIGFuIHVua25vd24gbnVtYmVyIG9m IGJ5dGVzIGFuZCB3ZSB3b3VsZCBuZXZlciBrbm93IHdoZW4gdG8gZXhpdCB0aGUKK2xvb3AuICBB bnl3YXksIEMtS2VybWl0IGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBETS4gIFNraXBwaW5nIG92 ZXIKK3RuX2Rvb3AoKSAoYW5kIG5vdCB3cml0aW5nIG91dCB0aGUgVGVsbmV0IGNvbW1hbmQgYnl0 ZXMpIGZpeGVzIHRoZSBoYW5naW5nCitjb25kaXRpb24gYXQgdGhlIGVuZCwgZXZlbiB0aG91Z2gg U0lHQ0hMRCBpcyBuZXZlciByYWlzZWQuICBja3V0aW8uYywKKzIzIEF1ZyAyMDA3LgorCitTb21l IHRlc3RzLCBTb2xhcmlzIHRvIE5ldEJTRCBvdmVyIEs1LgorenN0IHNlbmRzIGFzY2lpLnR4dCwg YSAyLjM2TUIgYXNjaWkgdGV4dCBmaWxlIChLY3BzIC8gRXJyb3JzKS4KK3pydCByZWNlaXZlcyB0 aGUgc2FtZSBmaWxlOgorCisgIHpzdCA1ODcvMCA1MjYvMCA1NDIvMCA0MzQvMCA0MjMvMAorICB6 cnQgODI3LzAgODAwLzAgODQ3LzAgRkFJTCAgNjEwLzAKKworU28gdGV4dCBpcyBnb29kLiAgQmlu YXJ5IG5vdCBzbyBnb29kLiAgSGVyZSB3ZSB0cmFuc2ZlciB0aGUgMU1CIGFsbC1ieXRlcworcGF0 dGVybiBmaWxlLiAgenJiIHJlY2VpdmVzIGl0IHN1Y2Nlc3NmdWxseSwgYnV0IHdpdGggMTI0OCBl cnJvcnMsIGF0IG9ubHkKKzE1S2Nwcy4gIFNlbmRpbmcgdGhlIHNhbWUgZmlsZSBvdXQgYWx3YXlz IGZhaWxzOgorCisgIEJlZ2luIDIwMDcwODIzIDE2OjMyOjA3OiBTRU5EIEJJTkFSWSBhbGwyLmJp biBbc3pdCisgIFNlbmRpbmc6IGFsbDIuYmluCisgIEJ5dGVzIFNlbnQ6ICAgNTYwMC8xMDAwMDAw ICAgQlBTOjEyNDQ2ICAgIEVUQSAwMToxOSAgIEZBSUxVUkUKKyAgRW5kIDIwMDcwODIzIDE2OjMy OjEzCisgIEVsYXBzZWQgdGltZTogNi42MTc5OTI5OTk5OTk4NDIKKyAgY3BzID0gMTUxMTAzLjIx MjEwNjc1NTYKKyAgbHN6OiBjYXVnaHQgc2lnbmFsIDE7IGV4aXRpbmcKKworRGVjaWRlZCB0byBt b3ZlIHRvIExpbnV4IGJ1dCBmb3VuZCB0aGF0IHNvbWV0aGluZyBpcyBzY3Jld2VkIHVwIGluIExp bnV4CitDLUtlcm1pdCB3aXRoIHRpbGRlIGV4cGFuc2lvbjoKKworICBzZW5kIH4vdGVzdGZpbGVz L2FsbC5iaW4KKworZG9lc24ndCBleHBhbmQgYXQgYWxsIChidXQgaXQgZGlkIHllc3RlcmRheSEp LiAgVGhlIHByb2JsZW0gd2FzIGluIHRoZQorYW5jaWVudCwgYW5jaWVudCByZWFsdWlkL3NldHVp ZCBoYW5kbGluZyBjb2RlOyByZWFsX3VpZCgpIG5vIGxvbmdlciB3b3JrcyBpbgorTGludXguICBJ IHdvcmtlZCBhcm91bmQgdGhpcyBpbiB3aG9hbWkoKSBieSBzZXR0aW5nIHJ1aWQgdG8gZ2V0dWlk KCkgaWYKK3JlYWxfdWlkKCkgcmV0dXJuZWQgYSBuZWdhdGl2ZSBudW1iZXIuICBNYXliZSBkYW5n ZXJvdXMsIHdvcnJ5IGFib3V0IGl0CitsYXRlci4gIGNrdWZpby5jLCAyMyBBdWcgMjAwNy4KKwor QU5ZV0FZLi4uIGFmdGVyIGZpeGluZyB0aGF0LCBJIHRlc3RlZCB6c2Igb24gTGludXgsIGFuZCBp dCdzIGJyb2tlbiB0aGVyZQordG9vLCB1c2luZyBvcGVucHR5KCksIHNvIGl0J3Mgbm90aGluZyB0 byBkbyB3aXRoIGNrdXB0eS5jLiAgQWZ0ZXIgc2VuZGluZwordGhlIGZpcnN0IFptb2RlbSBkYXRh IHBhY2tldCwgaXQganVzdCBoYW5ncywgbm90aGluZyBjb21lcyBiYWNrLiAgSW4gdGV4dAorbW9k ZSBpdCBnZXRzIGZhcnRoZXIsIGJ1dCB0aGVuIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMuICBDYXB0 dXJlZCBzdGRlcnIgZnJvbQorcnogb24gdGhlIGZhciBlbmQ6CisKKyAgQnl0ZXMgcmVjZWl2ZWQ6 ICAgICA2MDgvMTAwMDAwMCAgIEJQUzoyMTEzNyAgRVRBIDAwOjQ3ICBSZXRyeSAwOiBCYWQgQ1JD CisgIEJ5dGVzIHJlY2VpdmVkOiAgICAgODY0LzEwMDAwMDAgICBCUFM6MjM1NDAgIEVUQSAwMDo0 MiAgUmV0cnkgMDogQmFkIENSQworICBCeXRlcyByZWNlaXZlZDogICAgMTEyMC8xMDAwMDAwICAg QlBTOjI1MDAzICBFVEEgMDA6MzkgIFJldHJ5IDA6IEJhZCBDUkMKKyAgQnl0ZXMgcmVjZWl2ZWQ6 ICAgIDU2OTYvMTAwMDAwMCAgIEJQUzo1Njk4OCAgRVRBIDAwOjE3ICBSZXRyeSAwOiBCYWQgQ1JD CisgIEJ5dGVzIHJlY2VpdmVkOiAgICA5MTIwLzEwMDAwMDAgICBCUFM6NjIyMjcgIEVUQSAwMDox NSAgUmV0cnkgMDogQmFkIENSQworICBCeXRlcyByZWNlaXZlZDogICAgOTM3Ni8xMDAwMDAwICAg QlBTOjYwNzY2ICBFVEEgMDA6MTYgIFJldHJ5IDA6IEJhZCBDUkMKKyAgQnl0ZXMgcmVjZWl2ZWQ6 ICAgIDk2MzIvMTAwMDAwMCAgIEJQUzo2MDM2MSAgRVRBIDAwOjE2ICBSZXRyeSAwOiBHb3QgVElN RU9VVAorICBSZXRyeSAwOiBTZW5kZXIgQ2FuY2VsZWQKKyAgUmV0cnkgMDogR290IFpDQU4KKwor VGhlIGxvY2FsIHN6LCBob3dldmVyLCBkb2Vzbid0IGdpdmUgYW55IGVycm9yIG1lc3NhZ2UuICBa Q0FOIG1lYW5zOiAib3RoZXIKK2VuZCBjYW5jZWxlZCBzZXNzaW9uIGJ5IHNlbmRpbmcgNSBeWCdz IiAob3IgdXNlciB0eXBlZCB0aGVtKS4gIFdoYXQgYWN0dWFsbHkKK2hhcHBlbnMgaXMgdGhhdCB0 dHB0eWNtZCgpJ3Mgc2VsZWN0KCkgdGltZXMgb3V0IHdhaXRpbmcgZm9yIHNvbWV0aGluZyBmcm9t Cit0aGUgWm1vZGVtIHBhcnRuZXIgYW5kIHR0cHR5Y21kKCkgaXRzZWxmIGtpbGxzIHRoZSBzeiBm b3JrIHdpdGggU0lHSFVQLgorV2hlbiBsc3ogcmVjZWl2ZXMgU0lHSFVQIGl0IHNlbmRzIHRoZSBa Q0FOLiAgU28gdGhlIHJlYWwgcHJvYmxlbSBpcyB0aGF0CithZnRlciBzb21lIHBvaW50IHdlJ3Jl IG5vdCByZWNlaXZpbmcgYW55dGhpbmcuCisKK0kgY2hhbmdlZCB0aGUgdGltZW91dCBmcm9tIDQg c2Vjb25kcyB0byAzMCBzZWNvbmRzIGFuZCBub3cgSSBzZWUgaXQganVzdAorc3RvcHMgZm9yIGxv bmcgcGVyaW9kcyBvZiB0aW1lIGFuZCB0aGVuIHJlc3VtZXMuICBUaGUgbHJ6IGxvZyBvbiB0aGUK K3JlY2VpdmluZyBlbmQgc2hvd3MgdG9ucyBvZiB0aW1vdXRzLCBDUkMgZXJyb3JzLCBhbmQgb3Ro ZXIgZXJyb3JzLiAgVGhlCitsb2NhbCBsb2cgc2hvd3MgdGhhdCBsc3ogd291bmQgdXAgc2VuZGlu ZyBaQ0FOICgyIHggKDEwIHggXkgsIDEwIHggXlgpKS4KKworTW92aW5nIG9uIHRvIGFub3RoZXIg cHJvYmxlbS4uLiAgVHVybnMgb3V0IEN0cmwtQyAoU0lHSU5UKSBpcyB3b3JraW5nIHJpZ2h0Cith ZnRlciBhbGwuICBTaW5jZSBJJ20gdXNpbmcgbXkgdGVzdCBzY3JpcHRzIGxpa2Uga2VyYmFuZyBz Y3JpcHRzLCBDdHJsLUMKK2V4aXRzIHRocm91Z2ggdHJhcCgpLCBhcyBpdCBzaG91bGQsIGNsb3Np bmcgdGhlIGNvbm5lY3Rpb24gYW5kIGNsZWFuaW5nIHVwLgorSWYgSSBzdGFydCBLZXJtaXQgYW5k IHRlbGwgaXQgdG8gVEFLRSB0aGUgc2NyaXB0LCB0aGVuIEN0cmwtQyBicmluZ3MgbWUgYmFjawor dG8gdGhlIHByb21wdCB3aXRoIHRoZSBjb25uZWN0aW9uIHN0aWxsIG9wZW4gKGFzIGl0IHNob3Vs ZCkuICBIb3dldmVyLCB1bnRpbAorbm93IEkgaGF2ZW4ndCBkb25lIGFueXRoaW5nIGFib3V0IHRo ZSBmb3JrIG9yIHRoZSBwdHlzLiAgQWRkZWQgY29kZSB0bwordHJhcCgpIHRvIGtpbGwgdGhlIGZv cmsgYW5kIGNsb3NlIHRoZSBtYXN0ZXIgcHR5LiAgY2t1dXN4LmMsIDI0IEF1ZyAyMDA3LgorCitB ZGRlZCBjb2RlIHRvIHRyeSB0byBicmVhayB0aGUgZGVhZGxvY2suICBJZiBzZWxlY3QoKSB0aW1l cyBvdXQsIGJ1dCB3ZSBoYXZlCitzdHVmZiB0byB3cml0ZSBlaXRoZXIgdG8gdGhlIHB0eSBvciB0 aGUgbmV0LCB0cnkgdG8gZG8gaXQgYW55d2F5LCBldmVuCit0aG91Z2ggc2VsZWN0KCkgZGlkIG5v dCBzYXkgd2UgY291bGQuICBCdXQgdGhpcyBkb2Vzbid0IGhlbHAgYmVjYXVzZSB3aGVuCitzZWxl Y3QoKSB0aW1lcyBvdXQgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byB3cml0ZS4gIFRoZSBwcm9i bGVtIGlzIHRoYXQKK2FmdGVyIHJlY2VpdmluZyB0aGF0IGxhc3QgcGFja2V0IGZyb20gdGhlIHJl bW90ZSByeiwgdGhlIGxvY2FsIGxzeiBkb2Vzbid0CitzZWVtIHRvIGRvIGFueXRoaW5nLCBhcyBp ZiB0aGUgbG93ZXIgZm9yayB3YXNuJ3QgcnVubmluZyAoYW5kIHRvIGNvbmZpcm0KK3RoaXMgaHlw b3RoZXNpcywgc29tZXRpbWVzIEkgbm90aWNlZCB0aGF0IHdoZW4gSSBDdHJsLUMnZCBvdXQgb2Yg dGhpcywgdGhlCit0cmFuc2ZlciB3b3VsZCB0YWtlIG9mZiBhZ2FpbikuCisKK0JhY2tpbmcgdXAg YW5kIHRlc3Rpbmcgd2l0aCBna2VybWl0IHJhdGhlciB0aGFuIHptb2RlbToKKworIGtzdCByaXBw bGUudHh0IFs4MjRLXSBPSworIGtzdCBhc2NpaS50eHQgWzEzNTlLXSBPSworIGtydCByaXBwbGUu dHh0IC0tIEZBSUxFRAorCitJdCBzZWVtcyB0aGF0IHdlIGNhbid0IGhhbmRsZSBzdHJlYW1pbmcu ICBJZiBJIHNldCB1cCBrcnQgdG8gZGlzYWJsZQorc3RyZWFtaW5nIG9uIHJlY2VpcHQsIGl0IHdv cmtzIE9LLgorCisga3J0IHJpcHBsZS50eHQgWzgyNEtdIE9LCisga3JiIGFsbDIuYmluICBbMTAw MEtdIE9LCisKK1NvIGhlcmUgd2UgaGF2ZSBubyB0cm91YmxlIHNlbmRpbmcgYnV0IGJpZyB0cm91 YmxlIHJlY2VpdmluZyB1bmxlc3Mgd2UKK2Rpc2FibGUgc3RyZWFtaW5nLiAgV2hlcmVhcyB3aXRo IFptb2RlbSB3ZSBoYXZlIHRyb3VibGUgcmVjZWl2aW5nLgorCitCdXQgdGhpcyB3YXNuJ3QgaGFw cGVuaW5nIGJlZm9yZSwgd2hhdCBjaGFuZ2VkPyAgVXNpbmcgQy1LZXJtaXQgb24gdGhlIGZhcgor ZW5kIHRvIHJlY2VpdmUgdGhlIGZpbGUgd2l0aCBkZWJ1ZyBsb2cgb24sIEkgc2VlIHRoYXQgaXQg aXMgc2VuZGluZyA0SyBkYXRhCitwYWNrZXQgYWZ0ZXIgNEsgZGF0YSBwYWNrZXQsIHdpdGggdGhl IGxvY2FsIGdrZXJtaXQgc2lsZW50LCBhcyBleHBlY3RlZC4KK0Fib3V0IG1pZHdheSB0aHJvdWdo IHRoZSB0cmFuc2ZlciwgdGhlIGxvY2FsIEtlcm1pdCBzZW5kcyBhbiBlcnJvciBwYWNrZXQKKyJU cmFuc21pc3Npb24gZXJyb3Igb24gcmVsaWFibGUgbGluayIuICBMb29raW5nIGF0IEctS2VybWl0 J3MgZGVidWcgbG9nLi4uCitJdCByZWNlaXZlcyB0aGUgZmlyc3QgZml2ZSA0SyBkYXRhIHBhY2tl dHMgT0ssIGJ1dCBnZXRzIGEgQ1JDIGVycm9yIG9uIHRoZQorZmlmdGggb25lLCBhbmQgc2VuZHMg dGhlIEVycm9yIHBhY2tldC4gIFNvIGl0IGhhcyByZWNlaXZlZCBhIHN0cmVhbSBvZgorMjAtc29t ZSB0aG91c2FuZCBieXRlcyBPSyBhbmQgdGhlbiBtZXNzZXMgdXAuICBUaGF0IG51bWJlciBzb3Vu ZHMgYSBsb3QgbGlrZQordHRwdHljbWQoKSdzIGJ1ZmZlciBzaXplLiAgSSBjaGFuZ2VkIHRoZSBi dWZmZXIgc2l6ZXMgdG8gYmUgZGlmZmVyZW50OgorCisgIFJlYWQgZnJvbSBwdHkgYW5kIHdyaXRl IHRvIG5ldDogNEsgIAorICBSZWFkIGZyb20gbmV0IGFuZCB3cml0ZSB0byBwdHk6IDFLCisKK1Ro aXMgdGltZSBpdCByZWNlaXZlZCB0aGUgZmlyc3QgNEsgcGFja2V0IGFuZCBmYWlsZWQgb24gdGhl IHNlY29uZCBvbmUuCitUaGVuIEkgaW5jcmVhc2VkIHRoZSBidWZmZXJzIHRvIDk4SyBlYWNoLCBl eHBlY3RpbmcgdG8gcmVjZWl2ZSBsb3RzIG1vcmUKK3BhY2tldHMgc3VjY2Vzc2Z1bGx5IGJ1dCBp dCBib21iZWQgb3V0IG9uIHRoZSA1dGggb25lLiAgQnV0IHRoYXQncyBnb29kLCBpdAorY29uZmly bXMgdGhlcmUncyBubyBsb2dpYyBlcnJvciBpbiB0aGUgYnVmZmVyIG1hbmFnZW1lbnQuICBKdXN0 IHRvIG1ha2UKK3N1cmUsIHRob3VnaCwgbGV0J3Mgc2V0IHRoZSBidWZmZXIgc2l6ZSBzbWFsbGVy IHRoYW4gdGhlIHBhY2tldCBzaXplIGFuZAorZGlzYWJsZSBzdHJlYW1pbmcuICBJbiB0aGlzIGNh c2Ugd2UgZ2V0IDQgZ29vZCBkYXRhIHBhY2tldHMgYW5kIGEgQ1JDIGVycm9yCitvbiB0aGUgNXRo IG9uZSBhbmQgc28gd2UgcmVxdWVzdCByZXRyYW5zbWlzc2lvbiwgYW5kIHRoZSBuZXh0IDggdGlt ZXMgaXQKK2Fycml2ZXMgaXQgZ2V0cyBhIGRpZmZlcmVudCBDUkMgZXJyb3IsIGJ1dCB0aGUgOXRo IGNvcHkgaXMgT0suICBUaGVuIHRoZQorbmV4dCBwYWNrZXQgY29tZXMgYW5kIGl0IGdldHMgYSBD UkMgZXJyb3IgZXZlcnkgdGltZS4gIEFuZCB0aGlzIGlzIG5vdGhpbmcKK2J1dCBwbGFpbiBBU0NJ SSB0ZXh0LgorCitTd2l0Y2hpbmcgdG8gcmVtb3RlIG1vZGU6CisKKyAgUkVNT1RFPTEga2sga3N0 CisKKyhhZnRlciB0cmlja2luZyBteXNlbGYgYmVjYXVzZSBpdCB3YXMgdXNpbmcgdHRydW5jbWQo KSBmb3IgdGhpcy4uLikgSSBzZWUKK3RoYXQgbm90aGluZyB3b3JrcyBhdCBhbGwuICBXaGF0IGRp ZCBJIGJyZWFrPyAgMjQgQXVnIDIwMDcuCisKK0ZpeGVkIHR0cHR5Y21kKCkgdG8gcmVzdG9yZSBj b25zb2xlIG1vZGVzIGFmdGVyIGEgcmVtb3RlLW1vZGUgdHJhbnNmZXIuCitja3V0aW8uYywgMjUg QXVnIDIwMDcuCisKK05vdGljZWQgdGhhdCBlcnJvciBjb2RlcyBsaWtlIEVTUkNIIGFyZSBub3Qg YXZhaWxhYmxlIGluIGFsbCBtb2R1bGVzLgorVGhhdCdzIGJlY2F1c2Ugb2Ygc29tZSBjb21wbGlj YXRlZCBpbiAjaWZkZWZzIGluIGNrY2RlYi5oIHRoYXQgd2luZCB1cCBub3QKK2Fsd2F5cyAjaW5j bHVkaW5nIDxlcnJuby5oPi4gIEJ1dCBJIG5vdGljZSB0aGF0IGNrdXRpby5jIGluY2x1ZGVzIGl0 Cit1bmNvbmRpdGlvbmFsbHkgd2l0aCBubyBpbGwgZWZmZWN0cywgYW5kIHNvIGRvZXMgY2t2Zmlv LmMuICBEb2VzIGFueSB2ZXJzaW9uCitvZiBVbml4IGF0IGFsbCBub3QgaGF2ZSA8ZXJybm8uaD4/ ICBBZGRlZCBhIGNhdGNoLWFsbCBjbGF1c2UgdG8gY2tjZGViLmggdG8KKyNpbmNsdWRlIDxlcnJu by5oPiAoaW4gVU5JWCBvbmx5KSBpZiwgYWZ0ZXIgdGhlIG90aGVyIGNsYXVzZXMsIEVTUkNIIHdh cworc3RpbGwgbm90IGRlZmluZWQuICBja2NkZWIuaCwgMjUgQXVnIDIwMDcuCisKK05vdyBiYWNr IHRvIGRlYnVnZ2luZyB0dHB0eWNtZCgpLi4uICBSZW1vdGUtbW9kZSB0cmFuc2ZlcnMgd2l0aCB0 dHB0eWNtZCgpCit3ZXJlIGJyb2tlbiBpbiB0d28gcGxhY2VzLCBtYXliZSBhcyBsb25nIGFzIDIg d2Vla3MgYWdvICh0aGlzIHdvdWxkIGhhdmUKK2FmZmVjdGVkIG5vbi1uZXR3b3JrIHRyYW5zZmVy cyB0b28sIHdoaWNoIEkgY2FuJ3QgdGVzdCBhbnkgbW9yZSkuCitUaGUgbG9naWMgd2FzIG1pc3Np bmcgaW4gYSBjb3VwbGUgcGxhY2VzIGZvciB0aGUgbm9uLW5ldHdvcmsgYW5kL29yCitub24tVGVs bmV0IGFuZC9vciBub24tZW5jcnlwdGluZyBjb25uZWN0aW9ucyAoaWYgc3RhdGVtZW50cyB3aXRo IG5vIGVsc2UKK3BhcnRzKS4gIEZpeGVkIGluIGNrdXRpby5jLCAyNSBBdWcgMjAwNy4KKworVGVz dGluZyByZW1vdGUgbW9kZToKKworIGtzdCBPSyAgIHpzdCBPSworIGtzYiBPSyAgIHpzYiBPSwor IGtydCBPSyAgIHpydCBPSworIGtyYiBPSyAgIHpyYiBPSworCitGdW5jdGlvbmFsbHkgaXQgYWxs IHdvcmtzIGJ1dCB0aGVyZSBhcmUgaGl0Y2hlcyB3aXRoIFptb2RlbSBhcyBhbHdheXMuCitXaGVu IHNlbmRpbmcgdG8gSzk1OgorCisgLiBJZiBJIHNlbmQgd2l0aCBsc3osIHRoZXJlIGFyZSBodW5k cmVkcyBvZiAiU3VicGFja2V0IHRvbyBsb25nIiBlcnJvcnMsCisgICBhbmQgdGhlIHRyYW5zZmVy IGlzIHZlcnkgc2xvdywgYnV0IGl0IHN1Y2NlZWRzLgorCisgLiBJZiBJIHNlbmQgd2l0aCB0aGUg MTk5NCBPbWVuIHZlcnNpb24gb2Ygc3osIHRyYW5zbWlzc2lvbiBpcyBpbnN0YW50YW5lb3VzCisg ICBhbmQgd2l0aG91dCBlcnJvcnMsIGJ1dCB0aGVuIGl0IGhhbmdzIGF0IHRoZSBlbmQuCisKKyAu IElmIEkgYnlwYXNzIEMtS2VybWl0IGFuZCBzZW5kIGRpcmVjdCBmcm9tIGxzeiBvciBzeiwgYm90 aCB3b3JrIGZpbmUuCisKK1NvIGNsZWFybHkgdGhlIHB0eXMgYXJlIGdldHRpbmcgaW4gdGhlIHdh eS4gIFRoZSBoYW5naW5nIGF0IHRoZSBlbmQgd291bGQgYmUKK2NhdXNlZCBieSB0aGUgc3ogcHJv Y2VzcyBjbG9zaW5nIGJlZm9yZSBpdHMgbGFzdCBvdXRwdXQgcmVhY2hlZCB0aGUgbWFzdGVyCitw dHkuICBJdCB3b3VsZCBuZWVkIHRvIGRvIHNvbWUgZm9ybSBvZiBmbHVzaGluZyBhbmQvb3IgcGF1 c2luZyBhdCB0aGUgZW5kCitidXQgdGhlcmUncyBub3RoaW5nIEkgY2FuIGRvIGFib3V0IHRoYXQ7 IHRoZXNlIHByb2dyYW1zIHdlcmUgbm90IGRlc2lnbmVkIHRvCitiZSB1c2VkIGluIHRoaXMgd2F5 LiAgQW55d2F5LCBpdCBvbmx5IHNlZW1zIHRvIGhhcHBlbiB3aXRoIGZpbGVzIGxvbmdlciB0aGFu CisxMDBLLgorCitGb3IgbG9jYWwgbW9kZSwgdGVzdGluZyBpbiBTb2xhcmlzIG92ZXIgb3VyIEtl cmJlcm9zIDUgY29ubmVjdGlvbiBhZ2FpbjoKKworIGdrZXJtaXQgIGxyenN6Cisga3N0IE9LICAg enN0IEZBSUwKKyBrc2IgT0sgICB6c2IgRkFJTAorIGtydCBPSyAgIHpydCBPSyBidXQgd2l0aCBl cnJvcnMKKyBrcmIgT0sgICB6cmIgRkFJTAorCitJZiBJIHVzZSBPbWVuIHJ6c3ogYXMgdGhlIGV4 dGVybmFsIHByb3RvY29sIChlLmcuIHdpdGggenN0KSwgaXQgYmxvY2tzCityZWRpcmVjdGlvbiBh bmQgaXQgc2VuZHMgdGhlIGZpbGUgdG8gbXkgdGVybWluYWwsIHJhdGhlciB0aGFuIG92ZXIgdGhl Citjb25uZWN0aW9uLiAgVGhpcyB3b3VsZCBwcm9iYWJseSBiZSBiZWNhdXNlIGl0IGZpbmRzIG91 dCB0aGUgZGV2aWNlIG5hbWUgb2YKK3RoZSBqb2IncyBjb250cm9sbGluZyB0ZXJtaW5hbCBhbmQg b3BlbnMgaXQsIHRvIHByZXZlbnQgcmVkaXJlY3Rpb24uICBUaGlzCitpcyBoYXJkIHRvIHByZXZl bnQgaW4gU29sYXJpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIFRJT0NTVFRZIGlvY3RsKCkuCitTdXBw b3NlZGx5IHRoZSBzYW1lIHRoaW5nIGlzIGFjY29tcGxpc2hlZCBieSBjbG9zaW5nIGFuZCByZW9w ZW5pbmcgdGhlIHNsYXZlCitwdHkgYWZ0ZXIgZG9pbmcgc2V0c2lkKCkuICBJIGFkZGVkIGNvZGUg dG8gZG8gdGhpcywgYnV0IGl0IG1hZGUgbm8KK2RpZmZlcmVuY2UuICAoSWYgSSB1c2UgbHN6IGlu c3RlYWQgb2Ygc3osIGl0IGlzIGluZGVlZCByZWRpcmVjdGVkLCBidXQgamFtcwordXAgYWZ0ZXIg YWJvdXQgMTVLLikgIGNrdXB0eS5jLCAyNyBBdWcgMjAwNy4KKworT24gTWFjIE9TIFggd2l0aCBz eiAzLjczIDEtMzAtMDMsIGhvd2V2ZXIsIHRoZSByZWRpcmVjdGlvbiB3b3Jrcywgc28gSQorYXNz dW1lIGl0IHdvdWxkIGFsc28gd29yayBpbiBMaW51eCwgRnJlZUJTRCwgTmV0QlNELCBldGMsIHRv by4gIERvaW5nIHRoZQorZnVsbCB0ZXN0IHN1aXRlIG9uIE1hYyBPUyBYOgorCisgZ2tlcm1pdCAg IGxyenN6ICAgICAgICAgIHJ6c3oKKyAga3N0IE9LICAgenN0IEZBSUwgKDEpICAgIE9LCisgIGtz YiBPSyAgIHpzYiBGQUlMICgyKSAgICBPSworICBrcnQgT0sgICB6cnQgT0sgICAoMykgICAgT0sg Zm9yIDEwMEsgZmlsZSwgZmFpbHMgZm9yIGxvbmdlci4KKyAga3JiIE9LICAgenJiIEZBSUwgKDQp ICAgIE9LICgxTUIgYWxsLWJ5dGVzIHRlc3QgcGF0dGVybikKKworKDEpIDY0SyBmaWxlIE9LIGV2 ZXJ5IHRpbWU7IDEwMEsgZmlsZSBmYWlscyBldmVyeSB0aW1lLgorKDIpIDEwSyBmaWxlIGZhaWxz IGV2ZXJ5IHRpbWUuCisoMykgU3VjY2VlZHMgd2l0aCA4MDBLIGZpbGUgYnV0IGdldHMgYSBmZXcg cmVjb3ZlcmFibGUgZXJyb3JzLgorKDQpIFN1Y2NlZWRzIHdpdGggNDhLIGJpbmFyeSBmaWxlIHdp dGggc29tZSBlcnJvcnMsIGZhaWxzIHdpdGggbG9uZ2VyIG9uZXMuCisKK1NvIGFjdHVhbGx5IGl0 IGxvb2tzIHByZXR0eSBnb29kLCBpdCdzIGp1c3QgdGhhdCBscnpzeiBtZXNzZXMgdXAuICBXaGVu CitzZW5kaW5nIHdpdGggbHN6IGlmIEkgaW5jbHVkZSAtTCA1MTIgaXQgc2VuZHMgdGhlIDEwMEsg dGVzdCBmaWxlIHdpdGggbm8KK2Vycm9ycywgYnV0IHN0aWxsIGNob2tlcyBvbiBsb25nZXIgb25l cy4KKworVGVzdGluZyBvbiBNYWMgT1MgWCBhZ2FpbiwgYnV0IHRoaXMgdGltZSBvdmVyIGEgY2xl YXItdGV4dCBUZWxuZXQgY29ubmVjdGlvbjoKKworIGdrZXJtaXQgICAgICAgIGxyenN6ICAgIHJ6 c3oKKyAga3N0IE9LICAgenN0ICBGQUlMKDEpICAgT0sKKyAga3NiIE9LICAgenNiICBGQUlMKDIp ICAgT0sKKyAga3J0IE9LICAgenJ0ICBPSygzKSAgICAgT0sKKyAga3JiIE9LICAgenJiICBGQUlM KDQpICAgT0sgCisKKygxKSBBbG1vc3Qgd29ya2VkLCBmaW5pc2hlZCA3NzdLIG91dCBvZiA4MjRL IHdpdGhvdXQgZXJyb3JzLgorKDIpIEdvdCB0b25zIG9mIGVycm9ycywgZmFpbGVkIGluIGZpcnN0 IDMwSyBvdXQgb2YgMTAwMEsuCisoMykgT0sgZm9yIDEwMEsgZmlsZSBidXQgZmFpbHMgZm9yIGxh cmdlci4KKyg0KSBPSyBmb3IgNDhLIGJpbmFyeSBmYWlsIGJ1dCBmYWlscyBmb3IgbGFyZ2VyLgor CitNYXliZSBzZWUgaWYgd2UgY2FuIGRvIHdpdGhvdXQgdGhlIE9QRU5QVFkgcGFydC4KKworVE9N T1JST1cgLS0ganVzdCBjbGVhbiB1cCB0aGUgY29kZSwgYWRkIHNvbWUgU0VUIC8gU0hPVyAvIEhF TFAgY29tbWFuZHMsCitkb2N1bWVudCBpdCwgYW5kIG1vdmUgb24uCisKK05vdGU6IEluIEs5NSwg U0VUIFdJTkRPVyBzZXRzIHRoZSBabW9kZW0gcGFja2V0IGxlbmd0aCwgMzIgLSAxMDI0LCBtdWx0 aXBsZQorb2YgNjQuCisKK1NFRSB+LzgwL2V4dGVybmFsLnR4dAorCitDaGFuZ2VkIGZ0cCBwb3J0 IGZyb20gaW50IHRvIHVuc2lnbmVkIGludC4gIGNrY2Z0cC5jLCAzMCBBdWcgMjAwNy4KKworVHJp ZWQgYWdhaW4gdG8gYnVpbGQgS1JCNC9LUkI1L1NTTC9UTFMgdmVyc2lvbiBmb3IgU29sYXJpcyA5 LiAgSGFkIHRvIHVwZGF0ZQordGhlIGJ1aWxkIHByb2NlZHVyZSBhZ2Fpbiwgb2YgY291cnNlLCBi ZWNhdXNlIG9mIG5ldyBmaWxlIGFuZCBkaXJlY3RvcnkKK25hbWVzLCBidXQgcmFuIGludG8gcHJv YmxlbXMgYW55d2F5IGJlY2F1c2UgdGhlCitjdS1zb2xhcmlzOWcra3JiNStrcmI0K29wZW5zc2wr c2hhZG93K3BhbSt6bGliIHRhcmdldCB3YXMgY2FsbGluZyBhbm90aGVyCit0YXJnZXQgdGhhdCBk aWQgbm90IGtub3cgYWJvdXQgdGhlIGhhcmR3aXJlZCBwYXRobmFtZXMuICBJbnRlZ3JhdGVkIHRo ZSB0d28KK3RhcmdldHMgYW5kIHRyaWVkIGJ1aWxkaW5nIGFnYWluLiAgSXQgYWN0dWFsbHkgY29t cGlsZWQgb2sgKGJ1dCB3aXRoIGxvdHMgb2YKK3dhcm5pbmdzIGZyb20gdGhlIHNlY3VyaXR5IG1v ZHVsZXMpLCBidXQgZmFpbGVkIGF0IGxpbmsgdGltZSB3aXRoCitrcmI1X2luaXRfZXRzIG5vdCBm b3VuZDsgZml4ZWQgdGhhdCB3aXRoIGFuICNpZmRlZiBOT19LUkI1X0lOSVRfRVRTLCBub3cgaXQK K2J1aWxkcyBPSyBidXQgd2l0aG91dCB0aGUgZnRwIGNsaWVudC4gIFRyaWVkIGJ1aWxkaW5nIGl0 IFdJVEggdGhlIEZUUCBhbmQKK3RoYXQgd2FzIE9LIHRvbywgbm8gY2hhbmdlcyBuZWVkZWQgZXhj ZXB0IHRvIHRoZSBidWlsZCBwcm9jZWR1cmUuICAxMiBGZWIKKzIwMDgsIHRoYXQgaXM6IEMtS2Vy bWl0IDguMC4yMTIgOiAyMDA4MDIxMi4KKworVHJpZWQgdG8gYnVpbGQgd2l0aCAtRENLX1NSUCBh bmQgLWxzcnAgYnV0OgorCisgIGhhc2hfc3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgIGNr Y2Z0cC5vCisgIGhhc2hfZ2V0ZGVzY2J5bmFtZSAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCisg IGhhc2hfZ2V0ZGVzY2J5aWQgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCisgIGNpcGhlcl9n ZXRkZXNjYnluYW1lICAgICAgICAgICAgICAgIGNrY2Z0cC5vCisgIGtyeXB0b19kZWxldGUgICAg ICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCisgIGtyeXB0b19uZXcgICAgICAgICAgICAgICAg ICAgICAgICAgIGNrY2Z0cC5vCisgIGNpcGhlcl9zdXBwb3J0ZWQgICAgICAgICAgICAgICAgICAg IGNrY2Z0cC5vCisgIGtyeXB0b19tc2dfcHJpdiAgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5v CisgIGtyeXB0b19tc2dfc2FmZSAgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCisgIGhhc2hf Z2V0bGlzdCAgICAgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCisgIGNpcGhlcl9nZXRsaXN0 ICAgICAgICAgICAgICAgICAgICAgIGNrY2Z0cC5vCisgIGNpcGhlcl9nZXRkZXNjYnlpZCAgICAg ICAgICAgICAgICAgIGNrY2Z0cC5vCisKK1NlbnQgbWFpbCB0byBUb20gV3UgYW5kIGJhY2tlZCBv ZmYgZm9yIG5vdy4gIG1ha2VmaWxlLCAxNCBGZWIgMjAwOC4KKyhUb20gV3UgbmV2ZXIgYW5zd2Vy ZWQ7IHNlZW1zIGxpa2UgU1JQIGlzIGRlZnVuY3QuKQorCitUaGUgIi5ibGFoID0geHh4IiBmb3Jt IG9mIHZhcmlhYmxlIGFzc2lnbm1lbnQgb25seSB3b3JrZWQgZm9yIHZhcmlhYmxlcworbmFtZXMg b2YgbGVuZ3RoIDIyIG9yIGxlc3MsIG5vdGljZWQgYW5kIGZpeGVkIGJ5IFdvbGZyYW0gU2FuZy4g IGNrdWNtZC5jLAorNSBNYXIgMjAwOC4KKworSW4gInNldCBob3N0IC9wdHkgc3NoIC4uLiIgY29u bmVjdGlvbnMsIHRoZSBJTlBVVCBjb21tYW5kIHN1ZGRlbmx5IHN0b3BwZWQKK3dvcmtpbmcuICBU aGlzIGlzIGluIFNvbGFyaXMgOS4gIEl0IGhhcHBlbnMgd2l0aCBhbGwgOC4wLiogdmVyc2lvbnMg b2YKK0MtS2VybWl0LCBzbyBpdCdzIG5vdGhpbmcgdG8gZG8gd2l0aCB0dHB0eWNtZCgpLiAgQWRk ZWQgc29tZSBkZWJ1ZygpCitzdGF0ZW1lbnRzIGJ1dCB0aGV5IGRvbid0IHNob3cgYW55dGhpbmcu ICBUdXJucyBvdXQgdGhlcmUgd2Fzbid0IGEgcHJvYmxlbQorYWZ0ZXIgYWxsLiAgV2VkIE1hciAy NiAxNjowNDo1MyAyMDA4CisKK0NoYW5nZWQgY21pZmkoKSB0byBub3QgcHJpbnQgIj9ObyBmaWxl cyBtYXRjaCIgKG9yIHdoYXRldmVyKSBpZiBTRVQgUVVJRVQgT04uCitja3VjbWQuYywgMjYgTWFy IDIwMDguCisKK0FkZGVkIFx2KHJlbW90ZWlwKSBmb3IgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIGhv c3Qgd2UncmUgY29ubmVjdGVkIHRvLAorYW5kIFx2KGlubWVzc2FnZSkgZm9yIElOUFVUIHN0YXR1 cyBtZXNzYWdlcyBjb3JyZXNwb25kaW5nIHRvIFx2KGluc3RhdHVzKS4KK2NrdXVzci5oLCBja2Nt YWkuYywgY2t1dXNbMjRdLmMsIDI2IE1hciAyMDA4LgorCitNYWRlIFxma2V5d29yZHZhbCgpIHN0 cmlwIGJyYWNlcy9xdW90ZXMgZnJvbSB0aGUgcmlnaHQtaGFuZCBzaWRlIHNvIHdlIGNhbgoraGFu ZGxlIHRoaW5ncyBsaWtlOgorCisgIHBhc3N3b3JkPSJzdHJpbmd3aXRoc3BhY2VhdGVuZCAiCisK K2NrdXVzNC5jLCA2IEF1ZyAyMDA4LgorCitBZGRlZCBpbnZpc2libGUgUFVURU5WIGNvbW1hbmQg Zm9yIFVOSVggb25seS4gIFZhbHVlIHNob3VsZCBub3QgYmUgZW5jbG9zZWQKK2luIGRvdWJsZXF1 b3Rlcy4gIFJlcXVpcmVzIGxnZSBcdihidWlsZGlkKSAyMDA4MDgyNi4gIGNrdXVzci5bY2hdLCAy NiBBdWcgMjAwOC4KKworQWRkZWQgU0VUIFZBUklBQkxFLUVWQUxVQVRJT04geyBSRUNVUlNJVkUs IFNJTVBMRSB9LiAgVGhpcyBpcyBoaWdobHkKK2V4cGVyaW1lbnRhbCwgYnV0IGFsc28gaGlnaGx5 IGRlc2lyYWJsZSBpZiBpdCB3b3JrcyBvdXQuICBTSU1QTEUgaW5oaWJpdHMKK3RoZSBkZWZhdWx0 IHJlY3Vyc2l2ZSBtZXRob2Qgb2YgZXZhbHVhdGluZyBcJXggYW5kIFwmeFtdIHZhcmlhYmxlcywg d2hpY2gKK2lzLCBxdWl0ZSBmcmFua2x5LCBudXRzIGFuZCBtYWtlcyBwcm9ncmFtbWluZyBpbiBL ZXJtaXQgYXQgYmVzdAorY291bnRlcmludHVpdGl2ZS4gIEkgbWFkZSBhbiBleGNlcHRpb24gaW4g dGhlIGNhc2Ugb2YgYXJyYXkgc3Vic2NyaXB0cywKK2JlY2F1c2UgY2hhbmdpbmcgaG93IHRoZXkg YXJlIGV2YWx1YXRlZCBjb3VsZCBicmVhayBhIGxvdCBvZiBzY3JpcHRzLCBhbmQKK2FueXdheSB0 aGVyZSBzaG91bGQgbmV2ZXIgYmUgYW55IGhhcm0gaW4gZXZhbHVhdGluZyB0aGVtIHJlY3Vyc2l2 ZWx5IGJlY2F1c2UKK3RoZWlyIGZpbmFsIHZhbHVlIGlzIGFsd2F5cyAob3Igc2hvdWxkIGJlKSBu dW1lcmljLCBub3Qgc29tZSBzdHJpbmcgdGhhdAorbWlnaHQgY29udGFpbiBiYWNrc2xhc2hlcy4g IFRoZSBTRVQgVkFSIHNldHRpbmcgaXMgb24gdGhlIHN0YWNrLCBqdXN0IGxpa2UKK1NFVCBRVUlF VCAoaXQgZm9sbG93cyB0aGUgcXVpZXQveHF1aWV0IGNvZGUgaW4gY2t1dXNbMzU2XS5jKSwgc28g bWFjcm9zIG9yCitjb21tYW5kIGZpbGVzIHRoYXQgY2hhbmdlIGl0IGNhbid0IGJyZWFrIHRoZSBz Y3JpcHQgdGhhdCBpbnZva2VzIHRoZW0uCitBZGRlZCBcZnJlY3Vyc2UoKSB0byBmb3JjZSByZWN1 cnNpdmUgZXZhbHVhdGlvbiBvZiBhIFwleCBvciBcJnhbXSB2YXJpYWJsZQorcmVnYXJkbGVzcyBv ZiB0aGUgVkFSSUFCTEUtRVZBTFVBVElPTiBzZXR0aW5nLiAgQWRkZWQgXHYodmFyZXZhbCkgdG8g YWxsb3cKK3Byb2dyYW1tYXRpYyBzZXR0aW5nIHRvIGN1cnJlbnQgc2V0dGluZy4gIFRlc3RlZCBv biBTb2xhcmlzIDkgYnV0IHNob3VsZCBiZQordG90YWxseSBwb3J0YWJsZS4gIGNrdXVzci5bY2hd LCBja3V1c1szNTZdLmMsIDExIFNlcCAyMDA4LgorCitGcm9tIEfvv71udGVyIEtuYXVmOiA2NC1i aXQgYnVpbGRzIHdlcmUgZmFpbGluZyBvbiBTdVNFIExpbnV4IGJlY2F1c2UKK2xpYnJlc29sdiBh bmQgbGliY3J5cHQgd2VyZSBpbiBsaWI2NCByYXRoZXIgdGhhbiBsaWI7IHVwZGF0ZWQgdGhlIHRl c3RzIGluCit0aGUgbGludXggbWFrZWZpbGUgdGFyZ2V0IHRvIGZpbmQgdGhlbS4gIG1ha2VmaWxl LCAxMiBKYW4gMjAwOS4KKworVHJpZWQgYnVpbGRpbmcgb24gUmVkIEhhdCBFbnRlcnByaXNlIExp bnV4IFNlcnZlciByZWxlYXNlIDUuMyA2NC1iaXQuCitUaGVyZSBpcyBubyBjdXJzZXMgb3IgbmN1 cnNlcy4gICJtYWtlIGxpbnV4bmMiIGNvbXBpbGVkIE9LIGJ1dCBjb2xsYXBzZWQgYXQKK2xpbmsg dGltZSBsb29raW5nIGZvciBjcnlwdCgpLCByZXNfc2VhcmNoKCksIGFuZCBkbl9leHBhbmQoKS4g IFR1cm5lZCBvdXQKK3RoZSBsaW51eG5jIChhbmQgbGludXhjKSB0YXJnZXRzIG5lZWRlZCB0aGUg c2FtZSB0cmVhdG1lbnQgYXMgdGhlIExpbnV4IG9uZQorZm9yIDY0LWJpdCBMaW51eGVzLiAgbWFr ZWZpbGUsIDMgTWFyIDIwMDkuCisKK0NvbnNvbGlkYXRlZCB0aGUgbGludXggdGFyZ2V0cyBzbyB3 ZSBubyBsb25nZXIgbmVlZCB0aHJlZSBzZXBhcmF0ZSBvbmVzIGZvcgorY3Vyc2VzLCBuY3Vyc2Vz LCBhbmQgbm8gY3Vyc2VzLiAgIm1ha2UgbGludXgiIHdvcmtzIG9rIG9uIGNvbXB1dGVycyB3aXRo IGFuZAord2l0aG91dCAobiljdXJzZXMuICAibWFrZSBsaW51eCtzc2wiLCBkaXR0by4gICJsaW51 eCtrcmI1K3NzbCBidWlsZHMgT0sgYnV0CituZWVkcyAtRE5PX0tSQjVfSU5JVF9FVFMiLiAgTWFr ZWZpbGUsIDMgTWFyIDIwMDkuCisKK0ZpeGVkIGNvcHlyaWdodCBkYXRlIGFubm91bmNlZCBpbiBo ZXJhbGQsIGNrdXVzNS5jLCAzIE1hciAyMDA5LgorCitQYXRjaCBmcm9tIFNldGggVGhlcmlhdWx0 IHRvIGF2b2lkIGRlcHJlY2F0aW9uIHdhcm5pbmcgZm9yIHV0bXAgcmVmZXJlbmNlcworaW4gY2t1 ZmlvLmMgaW4gTWFjIE9TIFggMTAuNSAobGF0ZXIsIHRoaXMgYmVjYW1lIGEgY29uc29saWRhdGVk IG1ha2VmaWxlCit0YXJnZXQgdGhhdCB3b3JrcyBhdXRvbWF0aWNhbGx5IGZvciBhdCBsZWFzdCBN YWMgT1MgWCAxMC4zLjkgdGhyb3VnaAorMTAuNS42KS4gIG1ha2VmaWxlLCBja3VmaW8uYywgMjgg QXByaWwgMjAwOS4KKworenNoY21kKCkgKHRoZSBmdW5jdGlvbiB1c2VkIGJ5IFJVTiBhbmQgISB0 byBydW4gZXh0ZXJuYWwgY29tbWFuZHMpIHdhcyBub3QKK2ZhbGxpbmcgYmFjayBhcyBleHBlY3Rl ZCBpbiBMaW51eCBSSEVMNC81IGlmIFNIRUxMIHdhcyBub3QgZGVmaW5lZCBpbiB0aGUKK2Vudmly b25tZW50LiAgQWxzbyBpbiBhbGwgVW5peCB2ZXJzaW9ucywgdGhlcmUgd2FzIG5vIGluZGljYXRp b24gaWYgYSBSVU4vIQorY29tbWFuZCBmYWlsZWQgKG90aGVyIHRoYW4gdGhlIHJldHVybiBjb2Rl KSBiZWNhdXNlIHRoZSBzcGVjaWZpZWQgc2hlbGwKK2RpZG4ndCBleGlzdCBvciB3YXMgbm90IGV4 ZWN1dGFibGUgKGUuZy4gdGhlIFNIRUxMIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcworbWlzZGVm aW5lZCkuICBOb3cgaXQgcHJpbnRzIHRoZSBuYW1lIG9mIHRoZSBvZmZlbmRpbmcgc2hlbGwgYW5k IHRoZSByZWFzb24KK2l0IGNvdWxkbid0IGJlIGV4ZWN1dGVkIChOb3QgZm91bmQsIFBlcm1pc3Np b24gZGVuaWVkLCBldGMpLiAgY2t1ZmlvLmMsCisyOCBBcHJpbCAyMDA5LgorCitUaGVyZSBpcyBu byBlYXN5IHdheSB0byBnZXQgdGhlIGxhc3QgZmllbGQgb2Ygc3RyaW5nOyBmb3IgZXhhbXBsZSwg dGhlCitleHRlbnNpb24gZnJvbSBhIGZpbGVuYW1lLCB3aGljaCBtaWdodCBoYXZlIGFueSBudW1i ZXIgb2YgZmllbGRzLiAgSW4KK2dlbmVyYWwgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGdldCAid29y ZCBudW1iZXIgbiIgY291bnRpbmcgZnJvbSB0aGUgcmlnaHQ7CitcZndvcmQoKSBsYWNrcyB0aGlz IGFiaWxpdHkuICBOb3cgaWYgeW91IGdpdmUgaXQgYSBuZWdhdGl2ZSB3b3JkIG51bWJlciwKK3Ro YXQgc2F5cyB0byBjb3VudCBmcm9tIHRoZSByaWdodDsgZm9yIGV4YW1wbGUgXGZ3b3JkKG9uZSB0 d28gdGhyZWUgZm91cgorZml2ZSwgLTIpIHJldHVybnMgImZvdXIiLiAgY2tjbGliLmMsIGNrdXVz ci5jLCAxNCBNYXkgMjAwOS4KKworRml4ZWQgYSB0eXBvIGluIHRoZSBhaXg1MStvcGVuc3NsIChT U0xMSUJTIHNob3VsZCBoYXZlIGJlZW4gU1NMTElCKS4KK0Zyb20gSmFzb24gTGVoci4gIG1ha2Vm aWxlLCAyNyBNYXkgMjAwOS4KKworVXBkYXRlZCB0aGUgbGludXgrb3BlbnNzbCt6bGliK3NoYWRv dytwYW0gdGFyZ2V0IHRvIGNoYWluIHRvIHRoZSBuZXcgbWFpbgorTGludXggdGFyZ2V0LiAgQSBi dW5jaCBvZiBvdGhlciBvbmVzIHJlbWFpbiB1bi11cGRhdGVkLiBtYWtlZmlsZSwgMTIgSnVuIDIw MDkuCisKK1VwZGF0ZXMgdG8gdGhlIG5ldyBNYWMgT1MgWCAxMC41IHRhcmdldCBmcm9tIFNldGgg VGhlcmlhdWx0ICh3aGljaCBpcworc3VwcG9zZWQgdG8gd29yayBvbiBhbGwgTWFjIE9TIDEwLXBv aW50LWFueXRoaW5nKSB0byBhdm9pZCB3YXJuaW5ncwordGhhdCBjYW1lIHVwIG9uIG9uIE1hYyBP UyAxMC40LjExL0ludGVsLiAgT25jZSB0aGlzIG9uZSBpcyBwcm92ZW4gd2Ugc2hvdWxkCitiZSBh YmxlIHRvIHJlbW92ZS9jb25zb2xpZGF0ZSBsb3RzIG9mIG90aGVyIG9uZXMuICBtYWtlZmlsZSwg MTIgSnVuIDIwMDkuCisKK0MtS2VybWl0IGRpc2FibGVzIFNTTCB3aXRoIHRoZSBtZXNzYWdlICI/ T3BlblNTTCBsaWJyYXJpZXMgZG8gbm90IG1hdGNoCityZXF1aXJlZCB2ZXJzaW9uLiIgaWYgdGhl IHZlcnNpb24gb2YgT3BlblNTTCB0aGF0IEtlcm1pdCB3YXMgYnVpbHQgd2l0aCBpcworbm90IGV4 YWN0bHkgdGhlIHNhbWUgYXMgdGhlIHZlcnNpb24gdGhhdCBpcyBsb2FkZWQgZHluYW1pY2FsbHkg YXQgcnVudGltZS4KK1RoaXMgaXMgYWN0dWFsbHkgdGhlIHByb3BlciBiZWhhdmlvciwgc2luY2Ug QVBJcyBhcmUgbm90IGd1YXJhbnRlZWQgbm90IHRvCitjaGFuZ2UgYmV0d2VlbiBPcGVuU1NMIHZl cnNpb25zIHByaW9yIHRvIDEuMC4wLiAgTWFkZSB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlCitpbmZv cm1hdGl2ZS4gIGNrX3NzbC5jLCAyNiBBdWcgMjAwOSwgYW5kIGFnYWluIDI4IEF1ZyAyMDA5Lgor CitBSVggNi4xIGlzIG91dCwgaXQgaXMgcmVhbGx5IGp1c3QgYSBuZXcgbmFtZSBmb3IgQUlYIDUu NC4gIEFkZGVkIG1ha2VmaWxlCit0YXJnZXRzLCBwbHVzIGZvciB0aGUgZmlyc3QgSSBtYWRlIEFJ WCA0LjIgYW5kIGxhdGVyIGZpZ3VyZSBvdXQgaXRzIHZlcnNpb24KK251bWJlciBpbiB0aGUgbWFr ZWZpbGUgdGFyZ2V0IHNvIHdlIGRvbid0IGhhdmUgdG8ga2VlcCBhZGRpbmcgbmV3IC1EQUlYbm4K K3NlY3Rpb25zIHRvIHRoZSBjb2RlLCBhbmQgYWxzbyBnZXQgaXRzIGhhcmR3YXJlIG5hbWUgKGUu Zy4gInBvd2VycGMiKSBmcm9tCit1bmFtZSBhdCBtYWtlIHRpbWUsIHJhdGhlciB0aGFuIGhhcmR3 aXJpbmcgInJzNjAwMCIgYXMgSSBkaWQgYmVmb3JlLgorQ29uc29saWRhdGVkIGFsbCBBSVggNC4y IGFuZCBsYXRlciB0YXJnZXRzIHNvIG5vdyBqdXN0ICJtYWtlIGFpeCIgb3IgIm1ha2UKK2FpeCtz c2wiIGNhbiBiZSB1c2VkLiAgRXhjZXB0IG5vdCB0aGUgZ2NjIG9uZXMgYXMgdGhleSBoYXZlIHNv bWUgcXVpcmtzIHNvCitJJ2QgcmF0aGVyIG5vdCBkaXN0dXJiIHRoZW0uICBUZXN0ZWQgdGhpcyBv biBBSVggNS4zLgorbWFrZWZpbGUsIDI4IEF1ZyAyMDA5LgorCitGcm9tIEtpbmphbCBTaGFoLCBh IGNvcnJlY3Rpb24gdG8gdGhlIExpbnV4IG1ha2VmaWxlIGVudHJ5IHRoYXQgYWxsb3dzIGl0Citm aW5kIHRoZSA2NC1iaXQgY3Vyc2VzIG9yIG5jdXJzZXMgbGlicmFyeS4gIG1ha2VmaWxlLCAyOSBB dWcgMjAwOS4KKworUmVuYW1lZCBhaXg0WzIzXTogdG8gb2xkYWl4NFsyM106IGluIG1ha2VmaWxl IHRvIGZpeCB0aGUgd2FybmluZyBtZXNzYWdlcworSSBkaWRuJ3Qgbm90aWNlIGJlZm9yZS4gIEkg ZGlkbid0IHdhbnQgdG8gcmVtb3ZlIHRoZW0gYmVjYXVzZSB0aGV5IGhhdmUKK3NvbWUgc3BlY2lh bCB0aGluZ3MgdGhhdCBtaWdodCBzdGlsbCBiZSBuZWVkZWQsIGlmIGFueWJvZHkgc3RpbGwgaGFz IHRoZXNlIAorQUlYIHZlcnNpb25zLiAgbWFrZWZpbGUsIDI5IEF1ZyAyMDA5LgorCitCdWlsdCBv biBSSEVMIDUuMyA2NC1iaXQsIHJlZ3VsYXIgYW5kIHdpdGggT3BlblNTTCAwLjkuOGUuICAzMSBB dWcgMjAwOS4KKworQnVpbHQgb24gTmV0QlNEIDUuMC4xL2kzODYsIHJlZ3VsYXIgYW5kIHdpdGgg T3BlblNTTCAwLjkuOS1kZXYsIDEgU2VwIDIwMDkuCisKK0NoYW5nZWQgU1NMIG1lc3NhZ2UgdG8g bWVudGlvbiBMRF9MSUJSQVJZX1BBVEggKFNvbGFyaXMpLCBTSExJQl9QQVRIIChIUC1VWCksCitM SUJQQVRIIChBSVgpLCBvciBMRF9MSUJSQVJZX1BBVEggKExpbnV4KS4gIGNrX3NzbC5jLCAzIFNl cCAyMDA5CisKK05vdGljZWQgdGhhdCAibWFrZSBsaW51eCtvcGVuc3NsIiBmYWlscyB0byBpbmNs dWRlIC1sdXRpbCBhIGxpbmsgdGltZSwgd2hpY2gKK2l0IG5lZWRzIGZvciBvcGVucHR5KCkuICBU aGF0J3MgYmVjYXVzZSB0aGlzIHRhcmdldCBpcyBvYnNvbGV0ZS4gIEkgcmVuYW1lZAoraXQgdG8g YmUgb2xkbGludXgrb3BlbnNzbCBhbmQgYWRkZWQgbGludXgrb3BlbnNzbCBhcyBhIHN5bm9ueW0g Zm9yCitsaW51eCtzc2wuICBtYWtlZmlsZSwgMyBTZXAgMjAwOS4KKworVGVzdGVkIGxpbnV4K29w ZW5zc2wremxpYitzaGFkb3crcGFtLCBpdCdzIE9LLiAgQWxzbyBsaW51eCtrcmI1LiAgQWxzbwor bGludXgra3JiNStzc2wuICBtYWtlZmlsZSwgMyBTZXAgMjAwOS4KKworVHJpZWQgYnVpbGRpbmcg b24gU29sYXJpcyA5IHdpdGggT3BlblNTTCAwLjkuOGsgd2l0aAorc29sYXJpczlnK29wZW5zc2wr c2hhZG93K3BhbSt6bGliLCBpdCBmYWlsZWQgbGlrZSBzbzoKKworICBja19zc2wuYzoyODc1OiBl cnJvcjogY29uZmxpY3RpbmcgdHlwZXMgZm9yICdpbmV0X2F0b24nCisgIC91c3IvaW5jbHVkZS9h cnBhL2luZXQuaDo1MjogcHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJ2luZXRfYXRvbicgd2FzIGhl cmUKKyAgbWFrZVsyXTogW2NrX3NzbC5vXSBFcnJvciAxCisgIG1ha2VbMl06IExlYXZpbmcgZGly ZWN0b3J5IGhtdC9zaXJpdXMxL3BydjAva2QvZmRjL3NvbGFyaXM5c3NsJworICBtYWtlWzFdOiBb c29sYXJpczJ4ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvd10gRXJyb3IgMgorICBtYWtlWzFdOiBM ZWF2aW5nIGRpcmVjdG9yeSBobXQvc2lyaXVzMS9wcnYwL2tkL2ZkYy9zb2xhcmlzOXNzbCcKKyAg bWFrZTogW3NvbGFyaXM5ZytvcGVuc3NsK3NoYWRvdytwYW0remxpYl0gRXJyb3IgMgorCitUaGUg cHJvYmxlbSB3YXMgY2F1c2VkIGJ5IGluY2x1ZGluZyBhbiBpbmV0X2F0b24oKSBmdW5jdGlvbiBj a19zc2wuYyBmb3IKK3RoZSBiZW5lZml0IG9mIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgb25l IGluIHRoZWlyIGxpYnJhcmllcy4gIFRoaXMgaXMKK2RlZmVhdGVkIGJ5IGluY2x1ZGluZyBOT19E Q0xfSU5FVF9BVE9OIGluIEtGTEFHUy4gIEkgYWRkZWQgdGhpcywgYnV0IHRoZW4KK0kgdGhvdWdo dCBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBhdXRvbWF0aWNhbGx5IHNlbnNlIHRoZSBPcGVu U1NMCit2ZXJzaW9uIHNvIHdlIGNhbiBhdXRvbWF0aWNhbGx5IHNldCBPUEVOU1NMXzA5NyBvciBP UEVOU1NMXzA5OCByYXRoZXIgdGhhbgorYm9tYmluZyBvdXQsIHNvIEkgYWRkZWQgY29kZSB0byBk byB0aGF0IHRvbywgYW5kIGFsc28gdG8gc2V0IHRoZSBTb2xhcmlzCit2ZXJzaW9uIG51bWJlcjog OSwgMTAsIG9yIDExLiAgVGhlIG5ldyBlbnRyeSBpcyBzb2xhcmlzOWcrb3BlbnNzbC4KK2NrY2Rl Yi5oLCBtYWtlZmlsZSwgMyBTZXAgMjAwOS4KKworRml4ZWQgYSBjb21wbGFpbnQgaW4gY2t1Zmlv LmMgYWJvdXQgaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgaW5pdGdyb3Vwcy4KK2NrdWZpby5jLCA0 IFNlcCAyMDA5LgorCitCdWlsdCBvbiBTb2xhcmlzIDEwIHdpdGggZ2NjIGFuZCBTdW4gQ0MgdXNp bmcgbmV3IHNvbGFyaXN7OSwxMCwxMX0gdGFyZ2V0Cit0aGF0IGlzIGxpa2UgdGhlIG5ldyBzb2xh cmlzezksMTAsMTF9ZyBvbmUgYnV0IHdpdGhvdXQgdGhlIGdjY2lzbXMuCittYWtlZmlsZSwgNCBT ZXAgMjAwOS4KKworQ2hhbmdlZCBzb2xhcmlzezksMTAsMTF9Zytzc2wgdGFyZ2V0IHRvIHNldCBv bmx5IHRoZSBTU0wtc3BlY2lmaWMgdGhpbmdzIGFuZAordGhlbiBjaGFpbiB0byB0aGUgbWFpbiBz b2xhcmlzezksMTAsMTF9ZyB0YXJnZXQuICBUZXN0ZWQgT0sgb24gU29sYXJpcyA5IGFuZAorMTAu ICBtYWtlZmlsZSwgNCBTZXAgMjAwOS4KKworQ3JlYXRlZCBzb2xhcmlzezksMTAsMTF9K3NzbCB0 YXJnZXQgdGhhdCBpcyBleGFjdGx5IGxpa2UgdGhlCitzb2xhcmlzezksMTAsMTF9Zytzc2wgZXhj ZXB0IGl0IGNoYWlucyB0byB0aGUgc29sYXJpc3s5LDEwLDExfSB0YXJnZXQKK2luc3RlYWQgb2Yg dGhlIHNvbGFyaXN7OSwxMCwxMX1nIG9uZS4gIFRoYXQgaXMsIGl0IGJ1aWxkcyBhbiBTU0wgdmVy c2lvbiBvZgorQy1LZXJtaXQgdXNpbmcgU3VuIENDIHJhdGhlciB0aGFuIGdjYy4gIG1ha2VmaWxl LCA0IFNlcCAyMDA5LgorCitUcmllZCBidWlsZGluZyBvbiBIUC1VWCAxMC4yMCwgYnVuZGxlZCAo bm9uLUFOU0kpIGNvbXBpbGVyICgibWFrZQoraHB1eDEwMDAiKS4gIFRoaXMgZmFpbGVkIHVudGls IEk6CisKKyAuIE1vdmVkIGEgc3RydWN0IGluaXRpYWxpemF0aW9uIG91dCBvZiBzZXRleHRlcm4o KSwgY2t1dXMzLmMuCisgLiBSZW1vdmVkIGFuIEFOU0lpc20gZnJvbSB0aGUgZGVjbGFyYXRpb24g b2Ygc2lnY2hsZF9oYW5kbGVyKCkgaW4gY2t1dGlvLmMKKyAuIEFkZGVkIGEgY2FzdCB0byBzdHJj bXAoKSBpbiB6dnVzZXIoKSwgY2t1ZmlvLmMuCisKK0J1aWxkcyBPSyBub3cuICBCdWlsdCBPSyB3 aXRoICJocHV4MTAwMG8iICh0aGUgQU5TSSBjb21waWxlcikgdG9vLgorQW5kIHdpdGggImhwdXgx MDAwZ2NjIi4gIENvdWxkbid0IHRlc3QgImhwdXgxMDAwbytvcGVuc3NsIi4gIDIxIFNlcCAyMDA5 LgorCitUaGUgU29ueSBQbGF5c3RhdGlvbiAyIGFuZCAzIGFyZSA2NC1iaXQgUG93ZXJQQyBwbGF0 Zm9ybXMgdGhhdCBjYW4gcnVuIExpbnV4CitpZiBpdCBpcyBpbnN0YWxsZWQgYXMgYW4gIm90aGVy IE9TIiBvbiBpdHMgaGFyZCBkaXNrOyBhbmQgdGhlIExpbnV4IGtlcm5lbAorc2luY2UgMi42LjIx IHN1cHBvcnRzIHRoZSBQUzMgd2l0aG91dCBhbnkgcGF0Y2hpbmcgcmVxdWlyZWQuICBQYXdlbCBS b2dvY3oKK3JlcG9ydGVkIHRoYXQgIm1ha2UgbGludXhwcGMiIChvbmUgb2YgdGhlIG9sZCB0YXJn ZXRzIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbgoraW50ZWdyYXRlZCBpbnRvIHRoZSBtYWluICJsaW51 eCIgdGFyZ2V0KSBjb21waWxlcyBPSyBvbiAyLjYuMjkteWRsNjEuMworKFllbGxvdyBEb2cgTGlu dXggcmVsZWFzZSA2LjIgJ1B5eGlzJyksIGJ1dCBmYWlscyBhdCBsaW5rIHRpbWUgYmVjYXVzZQor J29wZW5wdHknIGlzbid0IGZvdW5kLCBiZWNhdXNlIC1sdXRpbCB3YXMgbm90IGluY2x1ZGVkLCBi ZWNhdXNlIHRoYXQgcGFydAord2FzIGFkZGVkIG9ubHkgdG8gdGhlIG1haW4gbGludXggdGFyZ2V0 LiAgSSBhc2tlZCBoaW0gdG8gdHJ5ICJtYWtlIGxpbnV4IgorYW5kIGhlIHNlbnQgYmFjayBhIHRy YW5zY3JpcHQgaW4gd2hpY2ggdGhlcmUgd2VyZSB0aG91c2FuZHMgb2YgZXJyb3JzIGZyb20KK3Ro ZSBjdXJzZXMgY29kZSBja3V1c3guYy4gIExhdGVyIEkgdHJpZWQgaXQgbXlzZWxmIGFuZCBpdCBi dWlsdCB3aXRob3V0IGEKK2hpdGNoLiAgTXkgdGhlb3J5IGlzIHRoYXQgYmV0d2VlbiB0aGVuIGFu ZCBub3csIGEgbWlzc2luZyBwaWVjZSBvZiB0aGUKK25jdXJzZXMgbGlicmFyeSAoL3Vzci9pbmNs dWRlL25jdXJzZXN3KSB3YXMgaW5zdGFsbGVkLiAgMjEgU2VwIDIwMDkuCisKK0hQLVVYIDkuMDUg b24gUEEtUklTQyA5MDAwLzcxMiBidWlsZGluZyB3aXRoIGhwdXgwOTAwIChidW5kbGVkIGNvbXBp bGVyKToKKyAuIGNrdXRpby5jIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoIFBFTkRJTiBhbmQgRkxV U0hPIG5vdCBkZWZpbmVkIGluCisgICBwdHlfbWFrZV9yYXcoKS4gIEkgZHVtbWllZCBkZWZpbml0 aW9ucyBmb3IgdGhlbSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24KKyAgIG9uIHRoaXMgb3IgYW55 IG90aGVyIHBsYXRmb3JtIHdoZXJlIGl0IG1pZ2h0IGNyb3AgdXAuCisgICBja3V0aW8uYywgMjQg U2VwIDIwMDkuCisgLiBEaXR0byBmb3IgdGhlIFBUWSBtb2R1bGUsICsgSU1BWEJFTC4gIGNrdXB0 eS5jLCAyNCBTZXAgMjAwOS4KKyAuIFJlZmVyZW5jZXMgdG8gZW5kdXNlcnNoZWxsKCkgd2VyZSBm YXRhbCBpbiB0aGUgYnVuZGxlZCBjb21waWxlci4gIENoYW5nZWQKKyAgIHRoZSBocHV4MDkwMCB0 YXJnZXQgdG8gZGVmaW5lIE5PRENMRU5EVVNFUlNIRUxMLCBhbmQgcHV0IGEgc3BlY2lhbCBjYXNl CisgICBpbiBja3VmaW8uYyB0byBub3QgcHV0IGEgY2FzdCBpbiBmcm9udCBvZiB0aGUgY2FsbCBp ZiBOT0RDTEVORFVTRVJTSEVMTAorICAgaXMgZGVmaW5lZC4gIE5vdyBpdCBidWlsZHMgYW5kIGxp bmtzIE9LLiAgbWFrZWZpbGUsIGNrdWZpby5jLCAyNCBTZXAgMjAwOS4KKworSFAtVVggOS4wNSBv biBQQS1SSVNDIDkwMDAvNzEyIGJ1aWxkaW5nIHdpdGggaHB1eDA5MDBvIChvcHRpbWl6aW5nIGNv bXBpbGVyKToKKyAuIFdhcm5pbmdzIGluIGNrdXRpby5jIGF0IGxpbmUgMTQ4NjAgYWJvdXQgYXJn dW1lbnRzIHRvIHNlbGVjdCAocG9pbnRlcnMKKyAgIGFyZSBub3QgYXNzaWdubWVudC1jb21wYXRp YmxlKS4gICJtYW4gc2VsZWN0IiBzYXlzIGFyZ3VtZW50cyBhcmUgaW50cy4KKyAgIERlZmluaW5n IElOVFNFTEVDVCBmaXhlcyB0aGVzZSB3YXJuaW5ncyBidXQgcmVzdWx0cyBpbiBmYXRhbCBlcnJv cnMgbGF0ZXIKKyAgIGFyb3VuZCBsaW5lIDE0ODgxIGFuZCBvdGhlcnMgaW4gdGhlIGFyZWEgaW52 b2x2aW5nIEZEX1NFVC4gIFRoaXMgd2FzIHRvbworICAgaW52b2x2ZWQgc28gSSBwdXQgaXQgYmFj ayBhcyBpdCB3YXMuICAyNCBTZXAgMjAwOS4KKworQnVpbHQgT0sgb24gU29sYXJpcyAxMCB3aXRo IFN1biBDQy4gIEEgY291cGxlIHdhcm5pbmdzIGFib3V0IGltcGxpY2l0CitmdW5jdGlvbiBkZWNs YXJhdGlvbnMgZm9yIGN1cnNlcyByb3V0aW5lcyBiZWNhdXNlIGFwcGFyZW50bHkgdGhleSBhcmVu J3QKK2RlY2xhcmVkIGluIGN1cnNlcy5oLiAgVHVmZi4gIDI1IFNlcCAyMDA5LgorCitUcmllZCBi dWlsZGluZyBvbiBTb2xhcmlzIDEwIHdpdGggU3VuIENDIGFuZCBPcGVuU1NMIDAuOS44aywgYW5k IHRoaXMKK3VuY292ZXJlZCB2YXJpb3VzIGxvb3NlIGVuZHMgaW4gdGhlIHNvbGFyaXM5K29wZW5z c2wgdGFyZ2V0LCB3aGljaCBJIGZpeGVkLgorbWFrZWZpbGUsIDI1IFNlcCAyMDA1LgorCitGaXhl ZCBmb3VyIHR5cG9zIGluIHByaW50ZnMgaW4gY2tfc3NsLmMsIFwlIGluc3RlYWQgb2YganVzdCAl LiAgMjUgU2VwIDIwMDkuCisKK1NxdWVsY2hlZCAyMC1zb21lIGNvbXBsYWludHMgYWJvdXQgYSBj aGFyYWN0ZXIgYXJyYXkgYmVpbmcgcmVmZXJyZWQgdG8KK2RpcmVjdGx5IGluc3RlYWQgb2YgYnkg YSBwb2ludGVyLCBwbHVzIHNldmVyYWwgb3RoZXIgc2ltaWxhciBuaXRzIHRvIGdldCByaWQKK29m IGFsbCB0aGUgY29tcGlsYXRpb24gd2FybmluZ3Mgb24gU29sYXJpcyAxMCB3aXRoIFN1biBDIDUu OCBQYXRjaCAxMjEwMTUtMDYKKzIwMDcvMTAvMDMuICBja2N0ZWwuYywgY2tjdGVsLmgsIDI1IFNl cCAyMDA5LgorCitCdWlsdCB0aGUgcmVzdWx0IG9uIHRoZSBzYW1lIFNvbGFyaXMgMTAgc3lzdGVt IHdpdGggZ2NjIDQuMi40IHVzaW5nIHRoZQorbmV3IHNvbGFyaTEwZytvcGVuc3NsIHRhcmdldCwg d29ya2luZyBvdXQgYSBmZXcga2lua3MgaGVyZSB0b28uCittYWtlZmlsZSwgMjUgU2VwIDIwMDku CisKK01hZGUgY29uc29saWRhdGVkIFNvbGFyaXMgOS8xMC8xMSA2NC1iaXQgdGFyZ2V0cyBmb3Ig Z2NjLCBzb2xhcmlzOWc2NCwKK3NvbGFyaXMxMGc2NCwgc29sYXJpczExZzY0LCB0ZXN0ZWQgb24g U29sYXJpcyAxMCBTcGFyYy4gbWFrZWZpbGUsIDI1IFNlcCAyMDA5LgorCitNYWRlIGNvbnNvbGlk YXRlZCBTb2xhcmlzIDkvMTAvMTEgNjQtYml0IHRhcmdldHMgZm9yIFN1biBjYzogc29sYXJpczlf NjQsCitzb2xhcmlzMTBfNjQsIHNvbGFyaXMxMV82NC4gIFRoZXNlIHNpbXBseSBzZXQgYSBjb3Vw bGUgZmxhZ3MgYW5kIGNoYWluIHRvCit0aGUgbWFpbiBzb2xhcmlzOSB0YXJnZXQuICBtYWtlZmls ZSwgMjUgU2VwIDIwMDkuCisKK1JlbW92ZWQgYSBidW5jaCBvZiBvbGQgc3VwZXJmbHVvdXMgU29s YXJpcyA5IGFuZCAxMCB0YXJnZXRzOiBvbGRzb2xhcmlzOSwKK29sZHNvbGFyaXM5bGZzLCBzb2xh cmlzOWc2NCBzb2xhcmlzOWdfNjQsIG9sZHNvbGFyaXMxMCBvbGQgc29sYXJpczEwbGZzLAorb2xk c29sYXJpczEwK29wZW5zc2wsIG9sZHNvbGFyaXMxMGcrb3BlbnNzbCwgc29sYXJpczEwXzY0LCBv bGRzb2xhcmlzMTBnLAorc29sYXJpczEwZ182NCwgc29sYXJpczEwZzY0LiAgVGhlcmUgYXJlIHN0 aWxsIHBsZW50eSBtb3JlIHRvIHBydW5lIGJ1dCBpdCdzCithIHN0YXJ0LiAgbWFrZWZpbGUsIDI1 IFNlcCAyMDA5LgorCitBZGRlZCBvciBmaXhlZCBzb21lIG1pc3NpbmcgcHJvdG90eXBlcyBpbiBj a2N0ZWwuaDoKK2Z3ZHhfc2VuZF94YXV0aF90b194c2VydmVyKCksIGZ3ZHhfcGFyc2VfZGlzcGxh eW5hbWUuICAyNSBTZXAgMjAwOS4KKworSW1wcm92ZWQgdGhlIGluc3RydWN0aW9ucyBmb3IgYnVp bGRpbmcgc2VjdXJlIHZlcnNpb25zIGluIHRoZSBtYWtlZmlsZSwKK3VzaW5nIHRoaXMgZXhhbXBs ZToKKworICBtYWtlIHNvbGFyaXM5K29wZW5zc2wgIlNTTElOQz0tSS9vcHQvb3BlbnNzbC0wLjku OGsvaW5jbHVkZSIgXAorICAgIlNTTExJQj0tTC9vcHQvb3BlbnNzbC0wLjkuOGsvbGliIgorCitt YWtlZmlsZSwgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvc2VjdXJpdHkuaHRtbCwgMjUgU2Vw IDIwMDkuCisKK0J1aWx0IG9uIEhQLVVYIDExLjExLCAyNiBTZXAgMjAwOToKKyAuIG1ha2UgaHB1 eDExMDAgKG9rKQorIC4gbWFrZSBocHV4MTEwMGdjYyAob2spCisgLiBtYWtlIGhwdXgxMTAwbyAo Z2V0cyBhIGxvdCBvZiB3YXJuaW5ncyBhYm91dCBzZW5kcGF0aCBhbmQgc2VuZGZpbGUsCisgICAg YmVjYXVzZSB0aGV5IGFyZSBhbHNvIGRlY2xhcmVkIGluIDxzeXMvc29ja2V0Lmg+LCBidXQgYnVp bGRzIE9LKQorIC4gbWFrZSBocHV4MTAwMGdjYytvcGVuc3NsIFwKKyAgICBTU0xJTkM9LUkvb3B0 L29wZW5zc2wvaW5jbHVkZSBTU0xMSUI9LUwvb3B0L29wZW5zc2wvbGliCisKK05vdGU6IHNlbmRw YXRoIGFuZCBzZW5kZmlsZSBhcmUgbm90IEtlcm1pdCBzeW1ib2xzLiAgVGhlIHdhcm5pbmdzIGFy ZSBjb21pbmcKK2Zyb20gc29ja2V0Lmg6ICdSZWRlY2xhcmF0aW9uIG9mICJzZW5kZmlsZSIgd2l0 aCBhIGRpZmZlcmVudCBzdG9yYWdlIGNsYXNzCitzcGVjaWZpZXInLiAgVGhpcyBpcyBub3RoaW5n IG5ldzsgc2VlIG5vdGVzIG9mIDItNCBKYW4gMjAwNS4KKworRnJvbSBQZXRlciBFaWNoaG9ybjoK KyAuIFVwZGF0ZSB0byBtYWtlZmlsZSB0byBtYWtlIGN1cnJlbnQgY29kZSBidWlsZCBPSyBvbiBI UC1VWCA4LjAwLgorIC4gQ2hhbmdlcyB0byBmb3JtYXQgb2Ygc29tZSBoaW50cyB0byBtYWtlIHRo ZW0gbW9yZSBjb3B5LWFuZC1wYXN0YWJsZS4KK21ha2VmaWxlLCBja3V1NS5jLCAyOCBTZXAgMjAw OS4KKworRnJvbSBQZXRlciBFaWNoaG9ybjogQ2hhbmdlcyB0byBIUC1VWCA3LjAgdGFyZ2V0IHRv IGluY3JlYXNlIHRoZSBzd2l0Y2ggdGFibGUKK3N0YWNrIHNpemUsIHdoaWNoIHdhcyBvdmVyZmxv d2luZy4gIG1ha2VmaWxlLCAzMCBTZXAgMjAwOQorCitIUC1VWCA2LjUgKDE5ODkpLCAibWFrZSBo cHV4MDY1MHRjcGMiLi4uICg4OjE5Li4uKSAgTmVlZGVkIHRvIG5vdCBpbmNsdWRlCithcnBhL2lu ZXQuaCAod2hpY2ggZG9lc24ndCBleGlzdCkgYW5kIG5vdCB1c2UgaG9zdCBhZGRyZXNzIGxpc3Rz IChhZGQKKy1ETk9IQUREUkxJU1QpLCB3aGljaCBnZXRzIHVzIHBhc3QgY2tjbmV0LmMsIGJ1dCBp biBja2NmdHAuYyB3ZSBib21iIG91dCBvbgorRkRfU0VUU0laRSB1bmRlZmluZWQuICBTb21laG93 IHdlIHdvcmtlZCBhcm91bmQgdGhpcyBpbiBja2NuZXQuYy4gIFBhdGNoZWQKK2luIGEgZGVmaW5p dGlvbiBpbiBja2NmdHAuYywgYW5kIGFsc28gYWRkZWQgLURJTlRTRUxFQ1QgdG8gY29tcGlsZXIg ZmxhZ3MuCitDb21waWxlcyBvaywgYm9tYnMgYXQgbGluayB0aW1lIG9uIGJjb3B5LCBiemVybywg RkRfWkVSTywgRkRfU0VULCBGRF9JU1NFVC4KK05vdyBpdCBjb21waWxlcyBhbmQgbGlua3MgT0sg YnV0IGR1bXBzIGNvcmUgd2hlbiBzdGFydGVkLiAgQWRkZWQKKy1ETk9DS0dFVEZRSE9TVCwgcmVi dWlsdCBmcm9tIHNjcmF0Y2ggKHRha2VzIDM1IG1pbnV0ZXMpLiAgSXQgc3RhcnRzIE9LLCBidXQK K2l0IGR1bXBzIGNvcmUgd2hlbiBnaXZlbiBhICJ0ZWxuZXQgeHh4IiBjb21tYW5kLCB3aGVyZSB4 eHggaXMgYSBob3N0bmFtZS4KK0hvd2V2ZXIsIGl0IHdvcmtzIE9LIGlmIGFuIElQIGFkZHJlc3Mg aXMgdXNlZDogInRlbG5ldCAxMjMuNDUuNi43OCIuICBJdAordG9vayBhbGwgZGF5IHRvIHRyYWNr IHRoaXMgZG93biwgYnV0IG5vdyBpdCdzIGZpeGVkIChzZWUgdGhlICNpZmRlZiBIUFVYNgorc2Vj dGlvbnMgb2YgY2tjbmV0LmMpLiAgU28gbm93IChmb3IgdGhlIGZpcnN0IHRpbWUsIEkgdGhpbmsp IHdlIGhhdmUgYm90aAordGVsbmV0IGFuZCBmdHAgaW4gSFAtVVggNi54LCBpZiBhbnlvbmUgY2Fy ZXMuICBja2NuZXQuW2NoXSwgY2tjZnRwLmMsCittYWtlZmlsZSwgMiBPY3QgMjAwOS4KKworQ2hh bmdlZCBkZWZhdWx0IFNFVCBURVJNSU5BTCBUWVBFIHR5cGUgZm9yIEs5NSBmcm9tIHZ0MzIwIHRv IHZ0MjIwLiAgVGhpcyBpcworYmVjYXVzZSBVbml4IE9TJ3Mgc3VjaCBhcyBTb2xhcmlzIGhhdmUg ZHJvcHBlZCB2dDMyMCBhcyBhIHRlcm1pbmFsIHR5cGUuCitzZXR0cm10eXAoKSwgY2t1dXM3LmMs IDUgT2N0IDIwMDkuCisKK0kgbW92ZWQgdGhlIFBVVEVOViBjb21tYW5kIGNvZGUsIHdoaWNoIHdh cyBpbmxpbmUsIHRvIGEgZnVuY3Rpb24sIGRvcHV0ZW52KCkuCitja3V1c1tyN10uYywgY2t1dXNy LmgsIDUgT2N0IDIwMDkuCisKK0NoYW5nZWQgdGhlIFVOSVggdmVyc2lvbiBvZiBTRVQgVEVSTUlO QUwgVFlQRSB0byB0YWtlIGEgdmFsdWUgYW5kIHRoZW4gZG8KK3RoZSBlcXVpdmFsZW50IG9mICJl eHBvcnQgVEVSTT12YWx1ZSIgYnkgY2FsbGluZyBkb3B1dGVudigpLiAgVGhpcyBzZXRzCitcJChU RVJNKSBjb3JyZWN0bHkgYW5kIHBhc3NlcyBpdHMgdmFsdWUgYWxvbmcgdG8gaW5mZXJpb3IgcHJv Y2Vzc2VzLgorSG93ZXZlciwgdG8gbWFrZSB0aGlzIHRha2UgZWZmZWN0IHdpdGhpbiBLZXJtaXQg aXRzZWxmIChmb3IgdGhlIGZ1bGxzY3JlZW4KK2ZpbGUgdHJhbnNmZXIgZGlzcGxheSBhbmQgZm9y IHRoZSBTQ1JFRU4gY29tbWFuZCwgQ3RybC1MLCBldGMpIEkgYWxzbyBoYWQgdG8KK3JlaW5pdGlh bGl6ZSB0aGUgY3Vyc2VzIGRhdGFiYXNlLCB3aGljaCBpcyB0cmlja3kgYmVjYXVzZSBub3JtYWxs eSBpZiB5b3UKK2ZlZWQgaXQgYW4gdW5rbm93biB0ZXJtaW5hbCBuYW1lLCBpdCBqdXN0IGV4aXRz LiAgY2t1dXM3LmMsIDUgT2N0IDIwMDkuCisKK0NoYW5nZWQgdGhlIGxpdHRsZS1rbm93biBhbmQg bGl0dGxlLXVzZWQgUkVTRVQgY29tbWFuZCAod2hpY2ggY2xvc2VzIGFsbAorb3BlbiBmaWxlcykg dG8gYWxzbyBwdXQgY29tbWFuZCBlY2hvaW5nIGJhY2sgdG8gbm9ybWFsIGluIGNhc2UgaXQgZ290 CittZXNzZWQgdXAgc29tZWhvdyAoYXMgaW4gSFAtVVggNi41LCB1cG9uIHJldHVybmluZyBmcm9t IFBVU0gpLgorY2t1dXN4LmMsIDUgT2N0IDIwMDkuCisKK0ZvciBVbml4LCBpbmNyZWFzZWQgc3Ry aW5nIGJ1ZmZlciBzaXplcyBmb3Igd2lsZGNhcmQgZXhwYW5zaW9uIGZvciBhbGwKK3BsYXRmb3Jt cyB0aGF0IGhhdmUgQklHQlVGT0sgZGVmaW5lZCBmcm9tIDUwMDAwMCAoMC41TSkgdG8gMTAwMDAw MDAgKDEwTSkKK2J5dGVzLCBhbmQgZm9yIDY0LWJpdCBidWlsZHMgdG8gMjAwMDAwMDAwMCAoMkcp IGJ5dGVzLiAgTm8gcG9pbnQgbWFraW5nCitpdCBiaWdnZXIgdGhhbiB0aGF0IGJlY2F1c2UgbWFs bG9jJ3MgYXJndW1lbnQgaXMgYSBzaXplX3QsIHdoaWNoIGlzIGFuIGludC4KK2NrdWZpby5jLCA1 IE9jdCAyMDA5LgorCitCdWlsdCBvbiBNYWMgT1MgWCAxMC40LjExLCByZXF1aXJlZCBvbmUgbWlu b3IgYWRqdXN0bWVudCB0byB0aGUgbWFrZWZpbGUKKygtRE5PRENMSU5JVEdST1VQUykuICBUaGlz IHdhcyB1c2luZyB0aGUgbWFjb3N4MTAuNSB0YXJnZXQsIHdoaWNoIGlzCitzdXBwb3NlZCB0byBi ZSB1bml2ZXJzYWwgbGlrZSB0aGUgbGludXggYW5kIG5ldGJzZCB0YXJnZXRzLCBidXQgbm90IHll dAorcHJvdmVuLiAgQWxzbyBidWlsdCBhIDY0LWJpdCB2ZXJzaW9uICgtbXBvd2VycGM2NCAtbWNw dT1HNSAtbXR1bmU9RzUKKy1hcmNoIHBwYzY0KTsgaXQgY29tcGlsZXMgYW5kIGxpbmtzIE9LIGJ1 dCB3b24ndCBzdGFydDogIkJhZCBDUFUgVHlwZQoraW4gZXhlY3V0YWJsZSIuICBGaXggbGF0ZXIu Li4gIG1ha2VmaWxlLCA1IE9jdCAyMDA5LgorCitDaGFuZ2VzIGZyb20gU2V0aCBUaGVyaWF1bHQg dG8gc3VwcHJlc3Mgc2lnbmVkIHZzIHVuc2lnbmVkIGNoYXIgd2FybmluZ3MgaW4KK01hYyBPUyAx MC41LjggZnJvbSBnY2M0LCBhbmQgYSBuZXcgbWFrZWZpbGUgdGFyZ2V0IGZvciBNYWMgT1MgWCAo cHJlc3VtYWJseQorMTAuMy45IG9yIGxhdGVyKSArIEtlcmJlcm9zIDUgYW5kIE9wZW5TU0wuICBj a3V0aW8uYywgY2t1YXRoLmMsIGNrY3RlbC5jLAorY2tjbmV0LmMsIGNrY2Z0cC5jLCBja19jcnAu YywgbWFrZWZpbGUsIDYgT2N0IDIwMDkuCisKKyAgTGF0ZXIgSSBoYWQgdG8gYmFjayBvdXQgb2Yg dGhlc2UsIGJlY2F1c2UgYWx0aG91Z2ggaXQgbWFkZSBmb3IgYQorICBjbGVhbiBidWlsZCwgaW4g dGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIFNTTCBjb25uZWN0aW9ucyBkaWRuJ3Qgd29yay4KKwor VHVlIE9jdCAgNiAxNzoyMzoyNyAyMDA5CitGVFAgYWRkcmVzcyByZXNvbHV0aW9uIGlzIGJyb2tl biwgYnV0IGZ0cF9ob29rdXAoKSBoYXNuJ3QgY2hhbmdlZC4KK1NvLi4uIChzZWUgdGhlICNpZmRl ZiBIUFVYNiBzZWN0aW9ucyBvZiBja2NuZXQuYykgIChJIGRpZCwgYW5kIEkgcm9sbGVkCitiYWNr IHNvbWUgb2YgdGhlIGNoYW5nZXMgZnJvbSB0aGUgb3RoZXIgZGF5LCBidXQgaXQgbWFkZSBubyBk aWZmZXJlbmNlLikKK1B1dHRpbmcgYmFjayB0aGUgY2tjZnRwLmMgZnJvbSBhIGZldyB3ZWVrcyBh Z28gbWFrZXMgbm8gZGlmZmVyZW5jZS4KK1B1dHRpbmcgYmFjayB0aGUgY2tjbmV0LmMgZnJvbSBh IGZldyB3ZWVrcyBhZ28gbWFrZXMgbm8gZGlmZmVyZW5jZS4KKworQWRkZWQgcGF0Y2hlcyBmcm9t IFNldGggVGhlcmlhdWx0IHNvIG1hY29zeDEwLjUra3JiNStvcGVuc3NsIHdvdWxkIGJ1aWxkCitv biBNYWMgT1MgWCAxMC4zLjkuICBtYWtlZmlsZSwgY2tjZnRwLmMsIDcgT2N0IDIwMDkuCisKK0J1 aWx0IHRvZGF5J3MgY29kZSBvbiBMaW51eCBSSEVMNCwgTmV0QlNEIDUuMC4xLCBTb2xhcmlzIDks IGFuZCBNYWMgT1MgWAorMTAuNC4xMSwgYm90aCB3aXRoIGFuZCB3aXRob3V0IFNTTC4gIFRoZSBO ZXRCU0Qgc3lzdGVtIGhhcyBPcGVuU1NMIDAuOS45LWRldi4KKzcgT2N0IDIwMDkuCisKK0luIE1h YyBPUyBYIDEwLjYsIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcmUgdW5yZXNvbHZlZCBhdCBsaW5r IHRpbWU6CitfZGVzX2tleV9zY2hlZCwgX2Rlc19uZXdfcmFuZG9tX2tleSwgX2Rlc19lY2JfZW5j cnlwdCwKK19kZXNfaW5pdF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvciwgX2Rlc19maXh1cF9rZXlf cGFyaXR5LiAgVGhpcyBpcword2l0aCBPcGVuU1NMIDAuOS44ay4gIEJ1dCBpdCBkb2Vzbid0IGhh cHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMgdGhhdAoraGF2ZSAwLjkuOGsuCisKK0FkZGVkIFNFVCBT RVNTSU9OLUxPRyBOVUxMLVRFUk1JTkFURUQtVEVYVC4gIFRoaXMgaXMgZm9yIHRoZSBiZW5lZml0 IG9mIGEKK3NwZWVjaCBzeW50aGVzaXplciB0aGF0IHdpbGwgc3BlYWsgYSBsaW5lIG9mIHRleHQg b25seSBhZnRlciByZWNlaXZpbmcgYQorTlVMIGNoYXJhY3Rlci4gIEEgbW9yZSBnZW5lcmFsIHNv bHV0aW9uIHdvdWxkIGJlIHRvIGRlZmluZSBhIGZpbHRlciBvcgord2hhdGV2ZXIsIGJ1dCB3aG8g aGFzIHRpbWUuICBja3V1c1syM3hdLmMsIDcgT2N0IDIwMDkuCisKK0NvbnNvbGlkYXRlZCBNYWMg T1MgWCB0YXJnZXRzLCBhbmQgcmVtb3ZlZCBleHBlcmltZW50YWwgNjQtYml0IG9uZXMsIGJlY2F1 c2UKK3RoZXkgbmV2ZXIgY291bGQgd29yayBpbiAxMC41IGFuZCBlYXJsaWVyIGJlY2F1c2UgNjQt Yml0IGxpYnMgYXJlIG1pc3NpbmcsCithbmQgMTAuNiBhbmQgbGF0ZXIgYXJlIDY0LWJpdCBhdXRv bWF0aWNhbGx5LiAgbWFrZWZpbGUsIDggT2N0IDIwMDkuCisKK0J1aWx0IG9uIE1hYyBPUyBYIDEw LjYuMS4gIEl0IGNhbWUgb3V0IGF1dG9tYXRpY2FsbHkgYXMgYSA2NC1iaXQgYnVpbGQKK2JlY2F1 c2UgX19MUDY0X18gaXMgZGVmaW5lZCBzb21ld2hlcmUgdGhhdCBJIGNhbid0IGZpbmQuICBCdXQg dGhpcyBleHBsYWlucword2h5IHRoZSAwLjkuOGsgb24gMTAuNiBjb21lcyB1cCB3aXRoIG1pc3Np bmcgc3ltYm9scyB3aGVuIHRoZSAwLjkuOGsgbGliCisxMC41IChvciBvbiBTb2xhcmlzIG9yIG9u IExpbnV4KSBkb2VzIG5vdDogaXQncyBhIGRpZmZlcmVudCBsaWJyYXJ5OiAiTWFjaC1PCis2NC1i aXQgZHluYW1pY2FsbHkgbGlua2VkIHNoYXJlZCBsaWJyYXJ5IHg4Nl82NCIsIHJhdGhlciB0aGFu ICJNYWNoLU8KK2R5bmFtaWNhbGx5IGxpbmtlZCBzaGFyZWQgbGlicmFyeSBwcGMiLiAgUHJvYmFi bHkgdGhlIDY0LWJpdCB2ZXJzaW9uIGhhcworc29tZSB0aGluZ3MgI2lmZGVmJ2Qgb3V0LiAgQWRk ZWQgLW0zMiB0byB0aGUgQ0ZMQUdTIGFuZCBMTktGTEFHUyBmb3IgdGhlCittYWNvc3gra3JiNStv cGVuc3NsIHRhcmdldHMsIGFuZCBpdCBidWlsdCBPSyBvbmUgdGltZS4gIEJ1dCB0aGVuIHRoZSBl cnJvcnMKK2NhbWUgYmFjay4gIG1ha2VmaWxlLCA4IE9jdCAyMDA5LgorCitVcGRhdGVkIEMtS2Vy bWl0IGluc3RhbGxhdGlvbiBmb3IgTWFjIE9TIFggaW4gY2t1d3IuaHRtbCBvbiB0aGUgd2Vic2l0 ZS4KKzggT2N0IDIwMDkuCisKK1RyaWVkIHNvbWUgdGhpbmdzIHRvIGdldCBhcm91bmQgdGhlIHBy b2JsZW0gd2l0aCBPcGVuU1NMIGluIE1hYyBPUyBYIDEwLjYsCit0byBubyBhdmFpbC4gIEFza2Vk IEplZmYuICBIZSBzYWlkLCAiTWFjT1MgWCBubyBsb25nZXIgaW5jbHVkZXMgREVTIGFueXdoZXJl CitvbiB0aGUgc3lzdGVtLiAgTm90IGZvciBTU0wsIG5vdCBmb3IgS2VyYmVyb3MsIG5vdCBmb3Ig YW55dGhpbmcuICBUaGlzIHdpbGwKK2luY3JlYXNpbmdseSBiZWNvbWUgdGhlIHNpdHVhdGlvbiBv biBuZXcgb3BlcmF0aW5nIHN5c3RlbXMuICBXaW5kb3dzIDcgYW5kCisyMDA4IFIyIHdpbGwgYWxz byBzaGlwIHdpdGggbm8gREVTLiIgIFN1cmUgZW5vdWdoLCB0aGUgTWFjIE9TIFggU2VydmVyCitV cGdyYWRpbmcgYW5kIE1pZ3JhdGluZyBkb2N1bWVudCBmb3IgMTAuNiBzYXlzLCAiTWFjIE9TIFgg U2VydmVyIHYxMC42IGRvZXMKK25vdCBzdXBwb3J0IHNpbmdsZSBERVMgZW5jcnlwdGlvbi4gSXQg c3VwcG9ydHMgQUVTIDEyOCBhbmQgMjU2IGVuY3J5cHRpb24KK3R5cGVzLiBIb3dldmVyLCBkdXJp bmcgYSBtaWdyYXRpb24gb3IgdXBncmFkZSBmcm9tIHYxMC40IHRvIHYxMC42LCBzZXJ2ZXJzCit0 aGF0IHdlcmUgS2VyYmVyaXplZCBieSB0aGUgdjEwLjUgT3BlbiBEaXJlY3Rvcnkgc2VydmVyIHdp bGwgbm90IHVzZSB0aGUgQUVTCisxMjggb3IgMjU2IGVuY3J5cHRpb24gdHlwZXMuIFRvIHVzZSB0 aGUgQUVTIDEyOCBvciAyNTYgZW5jcnlwdGlvbiB0eXBlcyB5b3UKK211c3QgcmUtS2VyYmVyaXpl IGFsbCBzZXJ2ZXJzLiIgIDEyIE9jdCAyMDA5LgorCitERVMgYW5kIDNERVMgZW5jcnlwdGlvbiBj YW4gYmUgZXhjbHVkaW5nIHJlbW92aW5nIHRoZSAtRENLX0RFUyBmbGFnLiAgSQorcmVtb3ZlZCB0 aGlzIG9uZSBhbmQgLURMSUJERVMgKGFuZCAtbTMyKSBhbmQgdGhpcyBtYWtlcyBhIHdvcmtpbmcg NjQtYml0Cit2ZXJzaW9uLiAgVGhlbiBJIGFkZGVkIGNvZGUgdG8gdGhlIG1hY29zeCtrcmI1K29w ZW5zc2wgdGFyZ2V0IHRvIHVzZSB0aGVzZQorZmxhZ3MgaWYgdGhlIE1hYyBPUyBYIHZlcnNpb24g d2FzIDEwLjUgb3IgbGVzcyBhbmQgbGVhdmUgdGhlbSBvdXQgZm9yIDEwLjYKK29yIGxhdGVyLiAg VGVzdGVkIG9uIDEwLjQuMTEgYW5kIDEwLjYuMS4gIEEgYmV0dGVyIHdheSB0byBkbyBpdCBtaWdo dCBoYXZlCitiZWVuICJubSAtZ2ogbGlic3NsLmR5bGliIHwgZ3JlcCBkZXNfIiwgYnV0IHRoYXQg Z2l2ZXMgdGhlIHNhbWUgcmVzdWx0cyBvbgorMTAuNCBhbmQgMTAuNi4gIEFsc28sIDEwLjYgc3Rp bGwgaGFzIC91c3IvaW5jbHVkZS9zc2wvZGVzLmguCittYWtlZmlsZSwgMTMgT2N0IDIwMDkuCisK K05leHQgaXNzdWU6CisgIEluIGZpbGUgaW5jbHVkZWQgZnJvbSBja3V0aW8uYzoxNTY3NDoKKyAg L3Vzci9saWIvZ2NjL2kzODYtcmVkaGF0LWxpbnV4LzMuNC42L2luY2x1ZGUvdmFyYXJncy5oOjQ6 MjogI2Vycm9yICJHQ0Mgbm8KKyAgbG9uZ2VyIGltcGxlbWVudHMgPHZhcmFyZ3MuaD4uIgorICAv dXNyL2xpYi9nY2MvaTM4Ni1yZWRoYXQtbGludXgvMy40LjYvaW5jbHVkZS92YXJhcmdzLmg6NToy OiAjZXJyb3IgIlJldmlzZQorICB5b3VyIGNvZGUgdG8gdXNlIDxzdGRhcmcuaD4uIgorCitUaGUg cHJvYmxlbSBvY2N1cnMgd2hlbiB0cnlpbmcgdG8gZm9yY2UgYSBub24tQU5TSUMgYnVpbGQgd2l0 aCBHQ0MuCitDaGFuZ2luZyB0aGUgc291cmNlIGZpbGUgdG8gaW5jbHVkZSA8c3RkYXJnLmg+IGlu c3RlYWQgb2YgPHZhcmFyZ3MuaD4KK2RvZXNuJ3QgaGVscCBiZWNhdXNlIGV2aWRlbnRseSA8c3Rk YXJnLmg+IHJlcXVpcmVzIGFuIEFOU0kgQyBjb21waWxlci4KK05vdGhpbmcgY2FuIGJlIGRvbmUg YWJvdXQgdGhpcy4gIDEzIE9jdCAyMDA5LgorCitOZXh0IGlzc3VlOiBDYW4ndCBjb21waWxlIGNr Y2Z0cC5jIHdpdGggLUROT0NTRVRTIG9yIC1ETk9TUEw7IHNvbWUKKyNpZmRlZi8jZW5kaWYgZG9l c24ndCBtYXRjaCB1cC4gIFNpZ2gsIHRoaXMgaXMgdGhlIGhhcmRlc3Qga2luZCBvZiB0aGluZyB0 bworZGVidWcuICBUaGVyZSdzIDE3LDYyMiBsaW5lcyBvZiBjb2RlIGluIHRoaXMgbW9kdWxlIGFu ZCBubyB0b29sIHRoYXQgSSBrbm93CitvZi4uLi4gV2FpdCwgSSB3cm90ZSBvbmUuICBCdXQgaXQg c2hvd3MgYWxsIHRoZSAjaWYvI2lmZGVmLyNpZm5kZWYncyBhbmQKKyNlbmRpZnMgbWF0Y2hpbmcg dXAganVzdCBmaW5lLiAgQmFja2luZyBvZmYgdG8gY2tjZnRwLmMgb2YgYSBmZXcgZGF5cyBhZ28K KyhiZWZvcmUgY2hhciAvIHVuc2lnbmVkIGNoYXIgY2FzdHMgd2VyZSBhZGRlZCksIEkgc2VlIHRo YXQgaXQgYnVpbGRzIE9LLCBzbworSSBiYWNrZWQgb2ZmIHRvIHRoYXQgb25lLCBidXQgcHV0IGJh Y2sgdGhlIHNwZWNpYWwgY2FzZSAjaWZkZWYgZm9yIE1BQ09TWDEwMworZGVjbGFyaW5nIENPTlNU IGdzc19PSURfZGVzYywgYW5kIGl0IGJ1aWxkcyBPSyAodGhlIG90aGVyIHN0dWZmIHdhcyBwdXJl bHkKK2Nvc21ldGljLCB3aGVuIHdpbGwgSSBsZWFybj8pLiAgY2tjZnRwLmMsIDEzIE9jdCAyMDA5 LgorCitQcm90ZWN0ZWQgY3Z0c3RyaW5nKCkgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGggI2lm ZGVmIE5PQ1NFVFMuLiNlbmRpZiwKK2FuZCBkaXR0byBmb3IgdGhlIGNoYXJhY3Rlci1zZXQgY29u dmVyc2lvbiBjb2RlIGluIGRvcmVuYW1lKCkuCitja3V1czYuYywgMTMgT2N0IDIwMDkuCisKK0Zp eGVkIGFuICNlbmRpZiAvKiBUTkNPREUgKi8gdGhhdCB3YXMgYSBsaW5lIHRvbyBsb3cgaW4gdHRw dHljbWQoKSwKK2NhdXNpbmcgLUROT05FVCBidWlsZHMgdG8gZmFpbC4gIGNrdXRpby5jLCAxMyBP Y3QgMjAwOS4KKworVGhlcmUgd2FzIGEgcmVmZXJlbmNlIHRvIGRvcHV0ZW52KCkgdGhhdCB3YXNu J3QgZ3VhcmRlZCBieSAjaWZuZGVmIE5PUFVURU5WLAorZml4ZWQgaW4gY2t1dXM3LmMsIDEzIE9j dCAyMDA5LgorCitNb3ZlZCBkb3B1dGVudigpIGFuZCBzZXR0ZXJtdHlwKCkgb3V0IG9mIGFuICNp ZmRlZiBOT0xPQ0FMIHNlY3Rpb24gYmVjYXVzZQordGhlc2UgYXJlIHVzZWZ1bCBldmVuIHdoZW4g bm90IG1ha2luZyBjb25uZWN0aW9ucy4gIGNrdXVzNy5jLCAxMyBPY3QgMjAwOS4KKworTW92ZWQg aGF2ZWxmcyBkZWNsYXJhdGlvbiBvdXRzaWRlIG9mICNpZmRlZiBOT1hGRVIgYmVjYXVzZSBpdCB3 YXMgYWxzbyB1c2VkCitmb3Igb3RoZXIgdGhpbmdzLiAgY2tjbWFpLmMsIDEzIE9jdCAyMDA5Lgor CitDT1BZIC9QUkVTRVJWRSBkZXBlbmRlZCBvbiBjb2RlIGZyb20gdGhlIEtlcm1pdCBwcm90b2Nv bCBtb2R1bGUsIHdoaWNoCitpcyBvbWl0dGVkIGluIC1ETk9YRkVSIGJ1aWxkcy4gIERpc2FibGVk IENPUFkgL1BSRVNFUlZFIGluIC1ETk9YRkVSCitidWlsZHMuICBja3V1czYuYywgMTQgT2N0IDIw MDkuCisKK1NIT1cgUFJPVE9DT0wgY29kZSBmb3IgZXh0ZXJuYWwgcHJvdG9jb2xzIGhhZCB0byBi ZSAjaWZkZWYnZCBvdXQgZm9yCistRE5PUFVTSCBidWlsZHMuICBja3V1czQuYywgMTQgT2N0IDIw MDkuCisKK1RoZXJlIHdhcyBzb21lIGNvbmZ1c2lvbiBiZXR3ZWVuICJObyBYWVpNT0RFTSIgYW5k ICJObyBleHRlcm5hbCBwcm90b2NvbHMiOworY2xlYXJlZCB1cCBpbiBja3V1czMuYywgMTQgT2N0 IDIwMDkuCisKK0FmdGVyIGFsbCB0aGF0LCA4NiBkaWZmZXJlbnQgY29tYmluYXRpb25zIG9mIGZl YXR1cmUgc2VsZWN0aW9ucyBidWlsdCBPSyBvbgorTGludXguICBBbmQgdGhlIEtlcmJlcml6ZWQg dmVyc2lvbiAoSzUpIHdvcmtzIE9LIG9uIExpbnV4IGZvciBUZWxuZXQgYW5kIEZUUC4KKzE0IE9j dCAyMDA5LgorCitDaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHRvIDkuMC4gIEFsbCBtb2R1bGVzLCAx NiBPY3QgMjAwOS4KKworTmVlZCB0byBtYWtlIExPRyBTRVNTSU9OIGxvZyB0byBhIHR0eS4gIFJp Z2h0IG5vdyAibG9nIHNlc3Npb24KKy9kZXYvdHR5S2V5U2VyaWFsMSIgc2F5cyAiV3JpdGUgcGVy bWlzc2lvbiBkZW5pZWQiIGV2ZW4gdGhvdWdoIHRoZSBkZXZpY2UgaXMKK2Nydy1ydy1ydy0uICBU aGlzIGhhcHBlbnMgaW4gemNoa28oKSwgd2hpY2ggaXMgY2FsbGVkIGJ5IGNtb2ZpKCkuICBUaGUK K3Byb2JsZW0gaXMgdGhhdCAvZGV2LyBpcyBub3Qgd3JpdGVhYmxlLiAgSSBhZGRlZCBhIFVuaXgt b25seSBjbGF1c2UgdGhhdAorYXR0ZW1wdHMgdG8gb3BlbiB0aGUgZmlsZSBmb3Igd3JpdGUgYWNj ZXNzIHVzaW5nIG9wZW4oKSwgaW4gb3JkZXIgdG8gZ2V0IGEKK2ZpbGUgZGVzY3JpcHRvciwgd2hp Y2ggdGhlbiBjYW4gYmUgcGFzc2VkIHRvIGlzYXR0eSgpIHRvIGNoZWNrIGlmIGl0J3MgYQordHR5 LCBhbmQgaWYgc28sIHRvIGFsbG93IGFjY2Vzcy4gIEFuZCB0aGVuIGNsb3NlIGl0LiAgSSB0ZXN0 ZWQgdGhpcyBvbiBNYWMKK09TIFggYXMgZm9sbG93czoKKworICBsb2cgc2Vzc2lvbiAvZGV2L3R0 eUtleVNlcmlhbDEKKyAgdGVsbmV0IHNvbWVob3N0CisKK1RoZSBNYWMncyBzZXJpYWwgcG9ydCB3 YXMgY29ubmVjdGVkIHRvIHRoZSBzZXJpYWwgcG9ydCBvZiBhbm90aGVyIGNvbXB1dGVyCit3aGVy ZSBLZXJtaXQgZGlzcGxheWVkIHRoZSBpbmNvbWluZyBjaGFyYWN0ZXJzIGluIENPTk5FQ1QgbW9k ZS4gIEdsaXRjaGVzOgorCisgMS4gVGhlIHBvcnQgaGFzIHRvIGJlIHNldCB1cCBhcyBkZXNpcmVk IGluIGFkdmFuY2UsIG91dHNpZGUgb2YgS2VybWl0LgorIDIuIGxvZyBzZXNzaW9uIC9kZXYvdHR5 S2V5U2VyaWFsMSB3aWxsIGhhbmcgaWYgYW55IHJlcXVpcmVkIG1vZGVtIHNpZ25hbHMKKyAgICBh cmUgbm90IHByZXNlbnQgd2hlbiB0aGUgcG9ydCBpcyBvcGVuZWQuCisgMy4gQnlwYXNzZXMgbG9j a2ZpbGUgbWVjaGFuaXNtIC0gc28gd2UgZG8gdGhpcyBvbmx5IGlmIC1ETk9VVUNQLgorCitGb3Ig KDIpLCBJIHRyaWVkIHNldHRpbmcgT19OREVMQVkgLyBPX05PTkJMT0NLLCBhbmQgdGhpcyBhbGxv d2VkIHpjaGtvKCkgdG8KK2NvbnRpbnVlLCBidXQgdGhlbiBpdCBmcmVlemVzIGluIHRoZSBzdWJz ZXF1ZW50IGZvcGVuKCkuICBTbyBJIGNoYW5nZWQKK3pvcGVubygpIHRvIGFsc28gY2hlY2sgaWYg dGhlIGRldmljZSBpcyBhIHNlcmlhbCBwb3J0LCBhbmQgaWYgc28sIHRvIG9wZW4oKQoraXQgd2l0 aCBPX05ERUxBWSAvIE9fTk9OQkxPQ0ssIGFuZCB0aGVuIGNvbnZlcnQgdGhlIGZpbGUgZGVzY3Jp cHRvciBpbnRvIGEKK2ZpbGUgcG9pbnRlciB3aXRoIGZkb3BlbigpLgorCitOb3cgZm9yIHRoZSBz cGVha2luZyBkZXZpY2UgdGhhdCBuZWVkcyBsaW5lcyB0byBiZSB0ZXJtaW5hdGVkIGJ5IE5VTC4u LgorCisgIHNldCBzZXNzaW9uLWxvZyBiaW5hcnkgICAgICAgPC0tIG5lZWQgdG8gcHV0IHRoZXNl IGluIFNIT1cgTE9HCisgIHNldCBzZXNzaW9uLWxvZyBudWxsLXBhZGRlZCAgICAgIChhbmQgaW4g SEVMUCBTRVQgTE9HKQorICBzZXQgbGluZSAvZGV2L3R0eUtleVNlcmlhbDEKKworVGhpcyBwYXJ0 IHdvcmtzLgorCitUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBvbmx5IGZvciAtRE5PVVVDUCBidWls ZHMgYmVjYXVzZSBzZXJpYWwgcG9ydHMgYXJlbid0CitsaWtlIG90aGVyIFVuaXggZmlsZXM7IHdl IHdvdWxkIGhhdmUgdG8gY3JlYXRlIGEgbG9ja2ZpbGUsIGJ1dCB3ZSBjYW4ndCBkbwordGhhdC4u LiAgYWN0dWFsbHksIHR0bG9jaygpIHRha2VzIGEgbmFtZSBhcyBhbiBhcmd1bWVudCwgYnV0IHR0 dW5sY2soKSBkb2VzCitub3QsIHNvIHRoZXJlIHdvdWxkIGJlIG5vIHdheSB0byByZW1vdmUgdGhl IGxvY2suICBBbnl3YXksIHRoZXJlIGlzIG9ubHkgb25lCitBUEkgZm9yIGNvbmZpZ3VyaW5nIHRo ZSBwb3J0IChzcGVlZCwgZmxvdyBjb250cm9sLCBldGMpIGFuZCBpdCBvbmx5IHdvcmtzCit3aXRo IHRoZSBTRVQgTElORSBkZXZpY2UsIG5vdCBhbnkgcmFuZG9tIGZpbGUuICBUbyBmaXggdGhpcyB3 b3VsZCByZXF1aXJlCittYXNzaXZlIHJlZGVzaWduIGFuZCBjaGFuZ2VzLiAgY2t1dXNbMjNdLmMs IGNrdWZpby5jLCAxOS0yMCBPY3QgMjAwOS4KKworSSBtYWRlIC1ETk9VVUNQIHRoZSBkZWZhdWx0 IGZvciBNYWMgT1MgWCwgc2luY2UgZXZlcnlib2R5IHdpbmRzIHVwIGJ1aWxkaW5nCitpdCB0aGF0 IHdheSBhbnlob3cuICBUbyB1bmRvIHRoaXMsIGRvICJtYWtlIG1hY29zeCBLRkxBR1M9LVVOT1VV Q1AiLgorbWFrZWZpbGUsIDIxIE9jdCAyMDA5LgorCitDaGFuZ2VkIFNFVCBTRVNTSU9OLUxPRyBU RVhUIHRvIHN0cmlwIG91dCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXM7IAorcHJldmlvdXNseSB0aGVy ZSB3YXNuJ3QgdGhhdCBtdWNoIGRpZmZlcmVuY2UgYmV0d2VlbiBURVhUIGFuZCBCSU5BUlkgbG9n cy4KK0l0J3Mgc3RpbGwgbm90IHBlcmZlY3Q7IGZvciBleGFtcGxlIGl0IGRvZXNuJ3QgZGVsZXRl IGNoYXJhY3RlcnMgdGhhdCB0aGUKK3VzZXIgZXJhc2VkLiAgKE1hZGUgc3VyZSB0aGlzIHN0aWxs IGJ1aWxkcyB3aXRoIC1ETk9FU0NTRVEuKQorY2t1Y25zLmMsIDIyIE9jdCAyMDA5LgorCitDaGFu Z2VkIFNIT1cgTE9HIHRvIHNob3cgdGhlIFNFVCBTRVNTSU9OLUxPRyBzZXR0aW5ncywgYXMgd2Vs bCBhcworU0VUIERFQlVHLCB3aGljaCB3YXMgbm90IHNob3duIGJlZm9yZS4gIGNrdXVzNS5jLCAy MiBPY3QgMjAwOS4KKworSWYgYSBzZXJpZXMgb2YgUFVURU5WIGNvbW1hbmRzIGlzIGdpdmVuLCBl YWNoIG5ldyBvbmUgdW5kb2VzIHRoZSBwcmV2aW91cworb25lLCBzbyBvbmx5IHRoZSBsYXN0IGRl ZmluaXRpb24gaXMgc2VlbiBieSB0aGUgbmV3IGZvcmsgKG9yIGJ5IEtlcm1pdAoraXRzZWxmKS4g IFR1cm5zIG91dCB5b3UgY2FuJ3QgZmVlZCBhdXRvbWF0aWMgdmFyaWFibGVzIHRvIHB1dGVudigp OyB0aGV5CitoYXZlIHRvIGJlIHN0YXRpYywgc28gdG8gYWxsb3cgZm9yIG11bHRpcGxlIFBVVEVO ViBjb21tYW5kcyBLZXJtaXQgaGFzIHRvCittYWludGFpbiBhbiBhcnJheSBvZiBzdGF0aWMgc3Ry aW5ncy4gIGNrdXVzNy5jLCA2IE5vdiAyMDA5LgorCitGcm9tIFNldGggVGhlcmlhdWx0LCBhIGJl dHRlciB3YXkgZm9yIHRoZSBtYWtlZmlsZSB0byBkZXRlcm1pbmUgdGhlCitNYWMgT1MgWCB2ZXJz aW9uIG51bWJlcjsgdGhlcmUncyBhIHByb2dyYW0gZm9yIHRoaXMsIHN3X3Zlci4gIG1ha2VmaWxl LAorNiBOb3YgMjAwOS4KKworUGV0ZXIgRWljaGhvcm4gcmVwb3J0ZWQgdGhhdCBmaWxlLXRyYW5z ZmVyIGZhaWx1cmUgaGludHMgd2VyZSBub3QgY29taW5nCitvdXQgc2luY2UgRGV2LjI3LiAgVGhl IG9ubHkgY2hhbmdlIEkgbWFkZSBzaW5jZSB0aGVuIHdhcyB0byBza2lwIHRoZW0gaWYKK3RoZSBm aWxlLXRyYW5zZmVyIHByb3RvY29sIHdhcyBub3QgS2VybWl0LiAgSSB3YXMgdXNpbmcgdGhlIHdy b25nIHZhcmlhYmxlCitpbiB0aGUgdGVzdHMsICdwcm90bycgaW5zdGVhZCBvZiAncHJvdG9jb2wn LiAgY2t1dXM1LmMsIDYgTm92IDIwMDkuCisKK0NoYW5nZWQgTWFjIE9TIFggdGFyZ2V0cyB0byBj b3JyZWN0bHkgZXh0cmFjdCB0aGUgTWFjIE9TIG1ham9yIHZlcnNpb24KK2Zyb20gdW5hbWUgLXIg aW4gb3JkZXIgdG8gY2hvb3NlIGNvcnJlY3RseSBiZXR3ZWVuIHV0bXAgYW5kIHV0bXB4OyB0aGlz Cit3YXNuJ3Qgd29ya2luZyBpbiAxMC42LjEuICBtYWtlZmlsZSwgNiBOb3YgMjAwOS4KKworRml4 IGZyb20gU2V0aCBULiBmb3IgYW4gb3ZlcnNpZ2h0IGluIHRoZSBwcmV2aW91cyBlZGl0LiAgQWxz byBhZGQKK01BQ09TWDEwMyB0byAic2hvdyBmZWF0dXJlcyIgZGlzcGxheS4gIG1ha2VmaWxlLCBj a3V1czUuYywgMTAgTm92IDIwMDkuCisKK0FkZGVkIFJFSkVDVCBhcyBhIHN5bm9ueW0gZm9yIERJ U0NBUkQgaW4gU0VUIEZJTEUgQ09MTElTSU9OOyBpdCdzIG1vcmUKK2ludHVpdGl2ZSBhbmQgbW9y ZSBhY2N1cmF0ZS4gIGNrdXVzWzI3XS5jLCAxNSBOb3YgMjAwOS4KKworXGZzcGxpdCgpIGFuZCBc ZndvcmQoKSBhbHdheXMgYnJlYWsgb24gOC1iaXQgY2hhcmFjdGVycyB1bmxlc3MgeW91IGV4cGxp Y2l0bHkKK3B1dCBldmVyeSBzaW5nbGUgOC1iaXQgdmFsdWUgaW50byB0aGUgaW5jbHVkZSBzZXQs IGUuZy4gKGZvciBhIFRTViBmaWxlKToKKworICB1bmRlZiBpbmNsdWRlCisgIGZvciBcJWkgMTI4 IDI1NSAxIHsKKyAgICAgIGlmID09IFwlaSA5IGNvbnRpbnVlCisgICAgICAuaW5jbHVkZSA6PSBc bShpbmNsdWRlKVxmY2hhcihcJWkpCisgIH0KKyAgLlwlbiA6PSBcZnNwbGl0KFxtKGxpbmUpLCZh LFw5LFxtKGluY2x1ZGUpKQorCitJIGNoYW5nZWQgY2tzcGxpdCgpIHRvIHRyZWF0IGFsbCA4LWJp dCBieXRlcyAxMjgtMjU1IGFzIG5vbi1icmVhayBjaGFyYWN0ZXJzCitieSBkZWZhdWx0LiAgSXQg bWlnaHQgaGF2ZSBtYWRlIG1vcmUgc2Vuc2UgdG8gZG8gdGhpcyBmb3IgMTYwLTI1NSAoc2luY2UK KzEyOC0xNTkgYXJlIHRyYWRpdGlvbmFsbHkgQzEgY29udHJvbCBjaGFyYWN0ZXJzKSBidXQgdGhh bmtzIHRvIE1pY3Jvc29mdAordHJhZGl0aW9uIGlzIG91dCB0aGUgd2luZG93LiAgVG8gdHJlYXQg b25lIG9yIG1vcmUgOC1iaXQgY2hhcmFjdGVycyBhcyBicmVhaworY2hhcmFjdGVycywgcHV0IHRo ZW0gaW4gdGhlIGJyZWFrIHNldC4gIFRoaXMgbWlnaHQgYnJlYWsgc29tZSBzY3JpcHRzLCBidXQg SQorZG91YnQgaXQgYmVjYXVzZSB0aGlzIGZsYXcgd2FzIHNvIGF3ZnVsIHRoYXQgaWYgYW55b25l IGhhZCBjb21lIHVwIGFnYWluc3QKK3RoZXkgd291bGQgaGF2ZSBsZXQgbWUga25vdy4gIGNrY2xp Yi5jLCAxNiBOb3YgMjAwOS4KKworQ2hhbmdlZCB0aGUgbmV0YnNkIHRhcmdldCB0byBzZXQgLWZ1 bnNpZ25lZC1jaGFyLCBzaW5jZSBjYyBvbiBOZXRCU0QgaXMKK2FjdHVhbGx5IGdjYy4gIG1ha2Vm aWxlLCAxNiBOb3YgMjAwOS4KKworQ2hhbmdlZCBtYWNvc3ggdGFyZ2V0cyB0byBnZXQgdGhlIENQ VSB0eXBlIGZyb20gdGhlIEhPU1RUWVBFIGVudmlyb25tZW50Cit2YXJpYWJsZS4gIEFsc28gYWRk ZWQgZ2V0ZW52KCJIT1NUVFlQRSIpIGFzIGEgbGFzdC1yZXNvcnQgbWV0aG9kIHRvIHNldCB0aGUK K1x2KGNwdSkgdmFyaWFibGUgYXQgcnVudGltZSAobWF5YmUgaXQgc2hvdWxkIGJlIHRoZSBmaXJz dCByZXNvcnQ/KS4uLgorY2t1dXM0LmMsIG1ha2VmaWxlLCAxNiBOb3YgMjAwOS4KKworTWFkZSBz dXJlIHRoZSBzb2xhcmlzOV82NCBhbmQgc29sYXJpczEwIHRhcmdldHMgc3RpbGwgd29yay4gIDE2 IE5vdiAyMDA5LgorCitNYWRlIHN1cmUgdGhlIGN1cnJlbnQgc291cmNlIHBhY2thZ2UgYnVpbGRz IE9LIG9uIEhQLVVYIDEwLjIwLi4uICBHb3QgYSBsb3QKK29mICJ3YXJuaW5nIDYwNjI6IE9wdGRy aXZlcjogRXhjZWVkaW5nIGNvbXBpbGVyIHJlc291cmNlIGxpbWl0cyBpbiB4eHg7IHNvbWUKK29w dGltaXphdGlvbnMgc2tpcHBlZC4gVXNlICtPbm9saW1pdCBpZiBvdmVycmlkZSBkZXNpcmVkIiBi dXQgaXQgYnVpbGRzIE9LLgorVGVzdGVkIGxvbmcgZmlsZSB0cmFuc2Zlcjsgd29ya3MgT0suICAx NyBOb3YgMjAwOS4KKworQnVpbHQgb24gRnJlZUJTRCA3LjIgd2l0aCBhbmQgd2l0aG91dCBPcGVu U1NMLCBhbGwgT0suICAxNyBOb3YgMjAwOS4KKworQnVpbHQgb24gTmV0QlNEIDUuMC4xIHdpdGgg YW5kIHdpdGhvdXQgT3BlblNTTCwgYWxsIE9LLCBidXQgbmV0YnNkK2tyYjUKK2ZhaWxzIHdpdGgg ImNhbid0IGZpbmQgLWxnc3NhcGlfa3JiNSI7IHdvcmtlZCBhcm91bmQgdGhpcyB3aXRoCisiSzVM SUI9LUwvdXNyL2xvY2FsL2tlcmJsaWIiICh3aGVyZSB0aGUgbGliIGFjdHVhbGx5IGlzIG9uIHRo aXMgaG9zdCkgYnV0Cit0aGVuIGl0IGZhaWxlZCB3aXRoICJja2NmdHAuYzoxMzg2ODogZXJyb3I6 ICdnc3NfbnRfc2VydmljZV9uYW1lJyB1bmRlY2xhcmVkIi4KKzE3IE5vdiAyMDA5LgorCitJIGZv dW5kIGEgVk1TIDYuMiBzeXN0ZW0uLi4gVGFrZXMgYSBsb29vb25nIHRpbWUgdG8gYnVpbGQgdGhl cmUuICBJbgorY2t1dXN5LmMsIERFQyBDIGRpZG4ndCBsaWtlIHRoZSBwcm90b3R5cGVzIGFuZCBk ZWNsYXJhdGlvbnMgb2YgZG9ybGdhcmcoKQorYW5kIGRvdG5hcmcoKSBhcyBzdGF0aWMgc28gSSBt YWRlIHRoZW0gbm90IHN0YXRpYy4gIEJ1dCB0aGF0IGRpZG4ndCBoZWxwLAorbm93IGl0IGZhaWxz IGF0IHRoZSB2ZXJ5IGVuZCwgc2F5aW5nIHRoZSBmaW5hbCAjaWZkZWYgaXMgYW4gaW52YWxpZAor c3RhdGVtZW50LiAgSXQgbG9va3MgbGlrZSBhbiAjaWZkZWYgbWlzbWF0Y2ggdGhhdCBhZmZlY3Rz IG9ubHkgVk1TLiAgSSByYW4KK215ICNpZmRlZiBtYXRjaGVyLCBpdCB0dXJuZWQgdXAgbm90aGlu Zy4gIEkgc3Vic3RpdHV0ZWQgYSBjb3B5IG9mIGNrdXVzeS5jCitmcm9tIDIwMDcsIGl0IGNvbWVz IHVwIHdpdGggdGhlIHNhbWUgZXJyb3JzLiAgVGhlbiBJIHN1YnN0aXR1dGVkIHRoZSBjb3B5Citm cm9tIDguMC4yMTEgZnJvbSAyMDA0LCBhbmQgdGhpcyBvbmUgY29tcGlsZWQgT0sgYW5kLCBtaXJh Y3Vsb3VzbHksIHRoZQord2hvbGUgbWVzcyBldmVuIGxpbmtlZCBPSyBhbmQgcnVucyBPSy4gIFRo ZSBBbHBoYSBiaW5hcnkgaXMgMi44NE1CLiAgTm93IEkKK2hhdmUgNDUwMCBsaW5lcyBvZiBjb2Rl IHRvIGNvbXBhcmUuLi4uICBJIHdlbnQgdGhyb3VnaCB0aGUgdHdvIGZpbGVzIGxpbmUgYnkKK2xp bmUgYW5kIEkgY2FuJ3Qgc2VlIGEgc2luZ2xlIHRoaW5nIHdyb25nLiAgSSBnYXZlIHVwIGFuZCB0 cmllZCBidWlsZGluZyB0aGUKK1RDUC9JUCB2ZXJzaW9uLiAgSXQgYnVpbGRzIGZpbmUgZXhjZXB0 IGZvciBja3V1c3kuYywgd2l0aCB0aGUgdXR0ZXJseQordXNlbGVzcyBlcnJvciBtZXNzYWdlOgor CisgICNlbmRpZiAvKiBOT0NNREwgKi8KKyAgLi4uLi4uLi4uLi4uLi4uLi4uLl4KKyAgJUNDLUUt QkFEU1RNVCwgSW52YWxpZCBzdGF0ZW1lbnQuCisKK0luZGljYXRpbmcgdGhlIGxhc3QgbGluZSBp biB0aGUgZmlsZS4gIEp1c3QgZm9yIHRoZSBoZWNrIG9mIGl0LCBJIHB1dAorYW5vdGhlciBsaW5l IGFmdGVyIHRoYXQgb25lOgorCisgIC8qIFRoaXMgaXMgYSB0ZXN0ICovCisKK2FuZCBnb3Q6CisK KyAgLyogVGhpcyBpcyBhIHRlc3QgKi8KKyAgLi4uLi4uLi4uLi4uLi4uLi4uLi5eCisgICVDQy1F LUJBRFNUTVQsIEludmFsaWQgc3RhdGVtZW50LgorCitTbyBpdCBpcyBub3Qgb2JqZWN0aW5nIHRv IGFueXRoaW5nIGluIHRoZSBmaWxlLiAgVHJ5aW5nIHRoZSBvbGQgTElTUCB0cmljaywKK0kgcHV0 IGFuIGV4dHJhbmVvdXMgY2xvc2luZyBicmFja2V0IGFmdGVyIHRoYXQuICBTdWNjZXNzISAgSG9u ZXN0bHksIEkgZG9uJ3QKK3NlZSBhbnl0aGluZyB3cm9uZyB3aXRoIGZpbGUuICBJdCdzIERFQyBD IFY1LjMtMDA2LiAgSSBzdXNwZWN0IGEgQyBidWcuCitJJ2xsIGxlYXZlIGl0IGxpa2UgdGhpcyBm b3Igbm93IHVudGlsIEkgZ2V0IGFjY2VzcyB0byBzb21lIG90aGVyIFZNUwordmVyc2lvbnMuICBB bm90aGVyIGNsdWUgaXMgdGhhdCB3aGVuIGJ1aWxkaW5nIHRoZSBuZXR3b3JrIHZlcnNpb24gSSBn ZXQgYQoraG9ycmlibGUgd2FybmluZyBJIG5ldmVyIHNhdyBiZWZvcmUgZnJvbSBhIG1vZHVsZSB0 aGF0IGhhc24ndCBiZWVuIHRvdWNoZWQKK2luIGEgdmVyeSBsb25nIHRpbWUgKGNrdnJ0bC5jKS4g IEFsc28sIGluIHRoZSBuZXR3b3JrIHZlcnNpb24sIEkgbm90ZSB0aGF0Cit0aGUgRlRQIGNvZGUg aXMgbm90IGNvbXBpbGVkIGluLiAgV2UgaGF2ZSB0byB0cnkgdGhpcyBhZ2FpbiB3aXRoIHNvbWUK K2NvbW1hbmQtbGluZSBzd2l0Y2hlcywgYnV0IGl0J2xsIGRvIGZvciBub3cuICBja3V1c3kuYywg MTggTm92IDIwMDkuCisKKy0tLUMtS2VybWl0IDkuMCBBbHBoYS4wMS0tLQorCitGcm9tIFN0ZXZl biBTY2h3ZWRhIChTTVMpLCB0aGUgcmVhbCBzb2x1dGlvbiBmb3IgdGhlIFZNUyBjbG9zaW5nIGJy YWNlCitwcm9ibGVtLCBpdCB3YXNuJ3QgYSBERUNDIGJ1ZywgaXQgd2FzIGEgbWUgYnVnLiAgY2t1 dXN5LmMsIDIwIE5vdiAyMDA5LgorCitSZWRpc2NvdmVyZWQgdGhlIG5ldyBWTVMgYnVpbGQgb3B0 aW9uczogZiBmb3IgTG9uZyBGaWxlcywgaSBmb3IgSW50ZXJuYWwKK0ZUUC4gICJtYWtlIG1uZiIg ZG9lc24ndCB3b3JrIG9uIFZNUyA2LjIsIGl0IGxvb2tzIGxpa2UgdGhlIFZNUyBkZWZpbml0aW9u Citmb3IgQ0tfT0ZGX1QgZ290IGxvc3QuICBTYW1lIHRoaW5nIHdpdGggIm1ha2UgbWZpIi4gIENv bWUgYmFjayB0byB0aGlzIGxhdGVyLgorCitGcm9tIEdlcnJ5IEJlbGFuZ2VyLCBhIGZpeCB0byBJ TlBVVCAvQ09VTlQ6bi4gIGNrdXVzNC5jLCAyNiBOb3YgMjAwOS4KKworQWRkZWQgXGZzcXVlZXpl KHMpLCByZXR1cm5zIHN0cmluZyBzIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFj ZQorcmVtb3ZlZCwgVGFicyBjb252ZXJ0ZWQgdG8gU3BhY2VzLCBhbmQgbXVsdGlwbGUgc3BhY2Vz IGNvbnZlcnRlZCB0byBzaW5nbGUKK3NwYWNlcy4gIEZvciBub3csIEFTQ0lJIG9ubHksIG5vIG9w dGlvbnMuICBja3V1c3IuaCwgY2t1dXNbMjRdLmMsIDI3IE5vdiAyMDA5LgorCitJIHdyb3RlIGEg S2VybWl0IHNjcmlwdCB0byByZWFkIGEgYmlnIGZpbGUgb2YgYWRkcmVzc2VzIG9uIFNvbGFyaXMg OSwKK1xmc3F1ZWV6ZSgpaW5nIGVhY2ggbGluZS4gIEFmdGVyIGFib3V0IDE0MDAwIGxpbmVzLCB0 aGVyZSB3YXMgYSBtYWxsb2MKK2ZhaWx1cmUgaW4gZ2V0bmN0KCkgKHRoZSBjb21tYW5kLWZpbGUg cmVhZGVyKS4gIFRoZXJlJ3Mgbm90aGluZyB3cm9uZyB3aXRoCitcZnNxdWVlemUoKSwgdGhlIGZh aWx1cmUgaXMgb24gYSBkZWVwZXIgbGV2ZWwsIGJlY2F1c2UgdGhlIHNhbWUgdGhpbmcKK2hhcHBl bnMgaWYgSSB1c2UgXGZ1cHBlcigpICh3aGljaCBpcyBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsIHRv IFxmc3F1ZWV6ZSgpKQoraW4gdGhlIHNhbWUgc2NyaXB0LiAgVGhlIHByb2JsZW0gaXMgbm90IGlu IGdldG5jdCgpIGVpdGhlciwgYmVjYXVzZSBldmVyeQorbWFsbG9jKCkgaXMgZnJlZWQgKEkgY2hl Y2tlZCkuICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHNhbWUgc2NyaXB0ICh3aXRoCitcZnVwcGVy KCkgaW5zdGVhZCBvZiBcZnNxdWVlemUoKSBjb21wbGV0ZXMgT0sgaW4gQy1LZXJtaXQgOC4wLjIw MS4gIElmIEkKK3JlbW92ZSB0aGUgZnVuY3Rpb24gY2FsbCAoXGZzcXVlZXplKCkgb3IgXGZ1cHBl cigpKSBmcm9tIHRoZSBzY3JpcHQsIGl0IGFsc28KK3J1bnMgT0sgaW4gOS4wLiAgVGhpcyBzZWVt cyB0byBwb2ludCB0aGUgZmluZ2VyIGF0IGZuZXZlbCgpLCB3aGljaCBjb250YWlucworY291bnRs ZXNzIG1hbGxvYydzIGFuZCBmcmVlJ3MuICBCdXQgY29tcGFyaW5nIGZuZXZhbCgpIGJldHdlZW4g OC4wLjIxMSBhbmQKKzkuMCwgSSBkb24ndCBzZWUgYW55IGRpZmZlcmVuY2UgdGhhdCB3b3VsZCBl eHBsYWluIHRoaXMgYmVoYXZpb3IgLS0gbm90aGluZworYXQgYWxsIHRoYXQgaW52b2x2ZXMgbWFs bG9jKCksIG1ha3N0cigpLCBvciBmcmVlKCkuICBOb3IgYW55IHBlcnRpbmVudAorY2hhbmdlIGlu IHRoZSBjYWxsZXIgKHp6c3RyaW5nKSBvZiBmbmV2YWwoKS4gIDI3IE5vdiAzMDA5LgorCitBbm90 aGVyIHByb2JsZW0gaXMgdGhhdCB3aGVuIHRoaXMgaGFwcGVucywgdGhlIGVycm9yIGlzIG5vdCBj YXVnaHQgKGUuZy4gYnkKK3RoZSBJRiBGQUlMIHN0YXRlbWVudCBhZnRlciB0aGUgY29tbWFuZCB0 aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBjYWxsKTsKK2luc3RlYWQsIEMtS2VybWl0IHJldHVy bnMgaW1tZWRpYXRlbHkgdG8gaXRzIHByb21wdC4gIDI3IE5vdiAyMDA5LgorCitJdCBjb3VsZCBz aW1wbHkgYmUgdGhhdCBzb21lIG9mIHRoZSBidWZmZXJzIHdlIGFsbG9jYXRlIGFyZSBtdWNoIGJp Z2dlciBub3cuCitCdXQgYWdhaW4sIEkgZG9uJ3Qgc2VlIG11Y2ggZGlmZmVyZW5jZSBiZXR3ZWVu IDguMC4yMTEgYW5kIDkuMDsgd2Ugd2VyZQorYWxyZWFkeSBhbGxvY2F0aW5nIDMySyBjb21tYW5k LXJlbGF0ZWQgYnVmZmVycyAobWFsbG9jKCkgdGFrZXMgYSBzaXplX3QsIGFuZAorc2l6ZV90IGlz IGFuIGludCBhbG1vc3QgZXZlcnl3aGVyZSkuICBJIGJ1aWx0IHRoZSBzYW1lIHNvdXJjZSBvbiBO ZXRCU0QgYW5kCityYW4gdGhlIHNhbWUgc2NyaXB0ICh3aXRoIFxmcXVlZXplKCkpLCBhbmQgaXQg d29ya2VkIGZpbmUuICBMZXQncyB3b3JyeQorYWJvdXQgdGhpcyBsYXRlciwgaWYgaXQgY29tZXMg dXAuICAyNyBOb3YgMjAwOS4KKworQnVpbHQgT0sgb24gU2lsaWNvbiBHcmFwaGljcyBJUklYIDYu NSBSMTAwMDA7IHJlZ3VsYXIgYnVpbGQgT0ssIFNTTCBhbmQKK0tlcmJlcm9zIGJ1aWxkcyBmYWls ZWQuICAzMCBOb3YgMzAwOS4KKworVHJpZWQgdG8gYnVpbGQgb24gRGlnaXRhbCBVbml4IDQuMEYg YnV0IGl0IGJsZXcgdXAgaW4gY2t1dGlvLmMsIGFwcGFyZW50bHkKK25vdCByZWNvZ25pemluZyBh bnkgb2YgdGhlIHRlcm1pbmFsIHN0cnVjdCBzeW1ib2xzIGZyb20gdGVybWlvcy5oLiAgVHJpZWQK K2FnYWluIHdpdGggZ2NjLCBzYW1lIHRoaW5nLiAgVHJpZWQgZXhwbGljaXRseSAjaW5jbHVkaW5n IDxzeXMvdGVybWlvcy5oPgord2l0aGluICNpZmRlZiBUUlU2NCwgc2FtZSB0aGluZy4gIFdoYXQg Y291bGQgaGF2ZSBjaGFuZ2VkPyAgMzAgTm92IDIwMDkuCisKK0J1aWx0IE9LIG9uIExpbnV4IFJI RUw1LjQvSXRhbml1bS0yLCBtYWtlIGxpbnV4LiAgVGhlIHNlY3VyZSBidWlsZAorcmVxdWlyZWQg IkZMQUdTPS1ETk9fS1JCNV9JTklUX0VUUyIgYW5kIGJ1aWx0IE9LLiAgMzAgTm92IDIwMDkuCisK K0J1aWx0IE9LIG9uIERpZ2l0YWwgVW5peCA0LjBGIHVzaW5nICJtYWtlIG9zZiIgaW5zdGVhZCBv ZiAibWFrZSB0cnU2NC00MGYiLgorSSBkb24ndCBrbm93IHdoeSB0aGUgc3BlY2lmaWMgdGFyZ2V0 IGRvZXNuJ3Qgd29yaywgYnV0IGl0J3Mgbm90IHdvcnRoCitjaGFzaW5nIGRvd24uICAyIERlYyAy MDA5LgorCitCdWlsdCBPSyBvbiBNaXJCU0QgMTAsIGRlc3BpdGUgYSBsb3Qgb2YgZ3JhdHVpdG91 cyBjb21waWxlciB3YXJuaW5ncy4gIEJ1aWx0CitPSyBvbiBNaXJCU0QgMTAsIE9wZW5CU0QgNC41 LCBhbmQgRmVkb3JhIDEwLiAgMyBEZWMgMjAwOS4KKworKFZhcmlvdXMgb3RoZXIgc3VjY2Vzc2Z1 bCBVbml4IGJ1aWxkcyBpbiB0aGVzZSB3ZWVrcy4uLikKKworQnVpbHQgb24gVk1TIDcuMiBhbmQg OC4zIHdpdGggYW5kIHdpdGhvdXQgVENQL0lQLCBubyBwcm9ibGVtcy4gIDExIEphbiAyMDEwLgor CitCdWlsdCBvbiBWTVMgOC4zIHdpdGggIm1ha2UgZmkiIHRvIGluY2x1ZGUgdGhlIEZUUCBjbGll bnQgYW5kIGxvbmctZmlsZQorc3VwcG9ydCAobWlkIEphbiAyMDEwKS4KKworQnVpbHQgb24gVk1T IDguMyB3aXRoIFVYQyA1LjYgYW5kIEhQIFNTTCAxLjMsIHdoaWNoIGlzIE9wZW5TU0wgMC45Ljdl LgorSXQgY29tcGlsZWQgYW5kIGxpbmtlZCBPSyBidXQgd2hlbiBJIHRyaWVkIHRvIG1ha2UgYW4g RlRQIFNTTCBjb25uZWN0aW9uCitpdCBjcmFzaGVkIGluIFNTTCRMSUJTU0xfU0hSLCB3aGljaCBp cyBjYWxsZWQgZnJvbSBzc2xfYXV0aCgpLCBhZnRlciBoYXZpbmcKK2hhZCBUTFMgYWNjZXB0ZWQg YXMgYW4gYXV0aGVudGljYXRpb24gdHlwZSwgYnV0IGJlZm9yZSBhY3R1YWxseQorYXV0aGVudGlj YXRpbmcuICBJbiBVbml4OgorCisgMTkuIGZ0cCBvcGVuIGZ0cC5zb21lY29tcGFueS5jb20gL3Vz ZXI6cGdlLmNvbS90ZXN0X3F1b3RhIC9wYXNzd29yZDp4eHh4eHgKK0Nvbm5lY3RlZCB0byBmdHAu c29tZWNvbXBhbnkuY29tLgorMjIwLVNvbWVjb21wYW55IEZUUCB2Ni4wIGZvciBXaW5Tb2NrIHJl YWR5Li4uCisyMjAgV2VsY29tZSB0byB0aGUgb25saW5lIHN0b3JhZ2UgRlRQIHNlcnZlci4gIFBs ZWFzZSBjaGVjayB0aGUgbWFpbiB3ZWIKK3NpdGUgZm9yIHN5c3RlbSBhbm5vdW5jZW1lbnRzIGFu ZCBBVVAuIChPKQorLS0tPiBBVVRIIFRMUworMjM0IEFVVEggY29tbWFuZCBPSy4gSW5pdGlhbGl6 aW5nIFNTTCBjb25uZWN0aW9uLgorVExTIGFjY2VwdGVkIGFzIGF1dGhlbnRpY2F0aW9uIHR5cGUK K1NTTCBERUJVRyBBQ1RJVkUKKz0+U1RBUlQgU1NML1RMUyBjb25uZWN0IG9uIENPTU1BTkQKKwor SW4gVk1TOgorCisgMTkuIGZ0cCBvcGVuIGZ0cC5zb21lY29tcGFueS5jb20gL3VzZXI6cGdlLmNv bS90ZXN0X3F1b3RhIC9wYXNzd29yZDp4eHh4eHgKK0Nvbm5lY3RlZCB0byBmdHAuc29tZWNvbXBh bnkuY29tLgorMjIwIFNvbWVjb21wYW55IEZUUCB2Ni4wIGZvciBXaW5Tb2NrIHJlYWR5Li4uCist LS0+IEFVVEggVExTCisyMzQgQVVUSCBjb21tYW5kIE9LLiBJbml0aWFsaXppbmcgU1NMIGNvbm5l Y3Rpb24uCitUTFMgYWNjZXB0ZWQgYXMgYXV0aGVudGljYXRpb24gdHlwZQorU1NMIERFQlVHIEFD VElWRQorJVNZU1RFTS1GLUFDQ1ZJTywgYWNjZXNzIHZpb2xhdGlvbiwgcmVhc29uIG1hc2s9MDQs IHZpcnR1YWwKK2FkZHJlc3M9RkZGRkZGRkY4MDAxQTEyMCwgUEM9MDAwMDAwMDAwMDY4QjExOCwg UFM9MDAwMDAwMUIKKworTm90ZTogVGhlIFVuaXggdmVyc2lvbiByZWNlaXZlZCB0aGUgc2Vjb25k IDIyMCByZXNwb25zZSwgdGhlIFZNUyB2ZXJzaW9uIGRpZAorbm90LiAgVGhhdCdzIG9kZCwgaXQn cyB0aGUgc2FtZSBjb2RlLi4uICAyNSBKYW4gMjAxMC4KKworQWRkZWQgc29tZSBlc3NlbnRpYWwg ZGV0YWlscyB0byB0aGUgSEVMUCBGU0VFSyB0ZXh0LiAgY2t1dXMyLmMsIDI1IEphbiAyMDEwLgor CitEaXNjb3ZlcmVkIHRoYXQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSBcZnNlYXJjaCgpIGlzIHRv dGFsbHkgdW5yZWxpYWJsZS4KK1RoaXMgaXMgcHJvYmFibHkgdG9vIGhhcmQgdG8gZml4LgorCitG U0VFSyBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gU0VUIENBU0UsIHNlYXJjaGVzIHdlcmUgYWx3 YXlzIGNhc2Ugc2Vuc2l0aXZlLgorRml4ZWQgaW4gY2t1dXM3LmMsIDI2IEphbiAyMDEwLgorCitG U0VFSyBmYWlsZWQgdG8gZmluZCBhbnl0aGluZyBpZiB0aGUgc2VhcmNoIHBhdHRlcm4gd2FzIG1h dGNoZWQgaW4gdGhlIGZpcnN0CitsaW5lIG9mIHRoZSBmaWxlLiAgRml4ZWQgaW4gY2t1dXM3LmMs IDI2IEphbiAyMDEwLgorCitcZndvcmQoKSBhbmQgXGZzcGxpdCgpLi4uLiAgQW5vdGhlciBjaGFu Z2UsIGJ1dCBub3QgYmFja3dhcmRzLWluY29tcGF0aWJsZS4KK09uZSBtYXkgbm93IHB1dCB0aGUg d29yZCBBTEwgKGp1c3QgbGlrZSB0aGF0LCBhbGwgdXBwZXJjYXNlKSBhcyB0aGUgaW5jbHVkZQor c2V0ICg0dGggYXJndW1lbnQpIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgd2lsbCBiZSBubyBicmVh ayBjaGFyYWN0ZXJzIG90aGVyCit0aGFuIHRob3NlIGV4cGxpY2l0bHkgZ2l2ZW4gaW4gdGhlIGJy ZWFrIHNldCwgZS5nLiBcZnNwbGl0KFxtKHh4KSwmYSw6LEFMTCkKK2JyZWFrcyBhIGxpbmUgb25s eSBvbiBhIGNvbG9uICg6KSwgbm90aGluZyBlbHNlLiAgVGhlIG9yaWdpbmFsIHJ1bGVzIGZvcgor Y2tzcGxpdCgpIHdlcmUgbW9yZSB0aGFuIGEgbGl0dGxlIGNvdW50ZXJpbnR1aXRpdmU6IHRoZSBk ZWZhdWx0IGJyZWFrIHNldCBpcworYWxsIG5vbiBhbHBoYW51bXMsIGFuZCB0aGUgZGVmYXVsdCBp bmNsdWRlIHNldCBpcyBhbGwgYWxwaGFudW1zLCBzbyBpZiB5b3UKK3dhbnRlZCB0byBwYXJzZSAo c2F5KSBhIENTViBmaWxlLCBicmVha2luZyBvbmx5IG9uIGNvbW1hLCB5b3UgaGFkIHRvIHRoaW5r CitvZiBhbGwgdGhlIGNoYXJhY3RlcnMgeW91IHdhbnRlZCB0byBrZWVwLiAgVGhpcyB3YXkgeW91 IGp1c3Qgc2F5IEFMTC4KK2NrY2xpYi5jLCAyNiBKYW4gMjAxMC4KKworU3BlYWtpbmcgb2YgQ1NW IGZpbGVzLi4uIEhvdyBjYW4geW91IHB1dCBjb21tYSBhcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IHdo ZW4KK2NvbW1hIGlzIHRoZSBmdW5jdGlvbi1hcmd1bWVudCBzZXBhcmF0b3I/ICBVc2Ugb25lIG9m IHRoZXNlIGZvcm1zOgorCisgXGZzcGxpdChcbSh4eCksJmEsIiwiLEFMTCkKKyBcZnNwbGl0KFxt KHh4KSwmYSx7LH0sQUxMKQorIFxmc3BsaXQoXG0oeHgpLCZhLFw0NCxBTEwpCisgXGZzcGxpdChc bSh4eCksJmEsXGZjaGFyKDQ0KSxBTEwpCisKK0Zyb20gSm9obiBEdW5sYXAsIFUuIG9mIFdhc2hp bmd0b24gQXBwbGllZCBQaHlzaWNzIExhYjogJ1doZW4gInN0dHkgLWEgPAorL2Rldi90dHlTMCB8 IGdyZXAgY3J0c2N0cyIgc2hvd3MgImNydHNjdHMiIChub3QgIi1jcnRzY3RzIikgYW5kIHdoZW4g dXNpbmcgYQordGhyZWUgd2lyZSBzZXJpYWwgaW50ZXJmYWNlIGFuZCB3aGVuIGFza2luZyBrZXJt aXQgdG8gbm90IHVzZSBmbG93IGNvbnRyb2wKKyhzZXQgZmxvdyBub25lKSB0aGVuICJja3V0aW8u YzEiIChzZWUgYXR0YWNobWVudHMpIGZhaWxzIHdoaWxlICJja3V0aW8uYyIKK3dvcmtzLiAgVGhl IHJlc3VsdCBvZiAiZGlmZiAtdSBja3V0aW8uYzEgY2t1dGlvLmMiIGlzIGF0dGFjaGVkIGFzICJk aWZmcyInLgorY2t1dGlvLmMsIDI2IEphbiAyMDEwLgorCitDaGFuZ2VkIHRoZSB5ZWFyIGZyb20g MjAwOSB0byAyMDEwIGluIHRoZSBtb2R1bGVzIEkgd29ya2VkIG9uIHRvZGF5IGFuZCBpbgordGhl IGhlcmFsZHMsIGV0Yy4gIGNrY2ttYWkuYywgY2t1dXM1LmMsIGNrdXRpby5jLCBja2NsaWIuYywg Y2t1dXM3LmMsCisyNiBKYW4gMjAxMC4KKworQnVpbHQgb24gTGludXggRmVkb3JhIENvcmUgMywg cmVndWxhciBhbmQgd2l0aCBPcGVuU1NMIDAuOS43YS4gIEJ1aWx0IG9uCitVYnVudHUgOS40IE9L LCBidXQgU1NMIGFuZCBLZXJiZXJvcyBidWlsZHMgZmFpbGVkIGR1ZSB0byBub3QgZmluZGluZyBs aWJzCithbmQvb3IgaGVhZGVyIGZpbGVzLiAgSSdtIHN1cmUgdGhpcyBjb3VsZCBiZSBmaXhlZC4u LiAgMjcgSmFuIDIwMTAuCisKK0FkZGVkIFNTTCwgS1JCNCwgYW5kIEtSQjUgdG8gdGhlIHN0YXJ0 dXAgaGVyYWxkIGZvciB2ZXJzaW9ucyB0aGF0IHdlcmUKK2J1aWx0IHdpdGggU1NMLCBLZXJiZXJv cyA0LCBvciBLZXJiZXJvcyA1LiAgQnVpbHQgT0sgb24gRmVkb3JhIDMgd2l0aAorbGludXgra3Ji NStzc2wgYW5kIG5ldyBiYW5uZXIgc2hvd3MgY29ycmVjdGx5LiAgY2t1dXM1LmMsIDI3IEphbiAy MDEwLgorCitTZXQgTk9fS1JCNV9JTklUX0VUUyBieSBkZWZhdWx0IGluIGNrdWF0aC5oIHNpbmNl IGtyYjVfaW5pdF9ldHMoKSBpcyBhIG5vLW9wCitpbiBLZXJiZXJvcyAxLjQueCBhbmQgbGF0ZXIg YW5kIGluIHNvbWUgaW5zdGFsbGF0aW9ucyBpdCBjYW4ndCBiZSBmb3VuZCwKK3doaWNoIGNsb2Ji ZXJzIHRoZSBidWlsZC4gIGNrdWF0aC5oLCAyNyBKYW4gMjAxMC4KKworQWRhcHRlZCB0byBNSU5J WCAzIDEuNSwgdGhlIGZpcnN0IHZlcnNpb24gdGhhdCBoYXMgdmlydHVhbCBtZW1vcnkgYWNjb3Jk aW5nCit0byBBbmR5IFQsIHdobyBzaG91bGQga25vdy4gIE9uIGVhcmxpZXIgdmVyc2lvbnMgKGUu Zy4gTUlOSVggMyAxLjIpIGFueQorYXR0ZW1wdCB0byBidWlsZCBDLUtlcm1pdCBjYXVzZXMgdGhl IGNvbXBpbGVyIHRvIGNyYXNoLiAgTm93IHRoZSBjb21waWxlcgorZG9lc24ndCBjcmFzaCBidXQg aXQgc3Bld3Mgb3V0IGNvdW50bGVzcyB3YXJuaW5ncyBhYm91dCBvbGQtZmFzaGlvbmVkCitmdW5j dGlvbiBkZWNsYXJhdGlvbnMgdGhhdCBJIGRvbid0IGdldCBhbnl3aGVyZSBlbHNlLiAgVGhlIHJl YWwgcHJvYmxlbXMKK2NhbWUgaW4gY2t1dGlvLmMgd2hlcmUgbnVtZXJvdXMgc3ltYm9scyB3ZXJl IHVuZGVmaW5lZCBhdCBjb21waWxlIHRpbWUgYW5kCit0aGUgUE9TSVggZnVuY3Rpb24gdGNnZXRw Z3JwKCkgd2FzIG5vdCBmb3VuZCBhdCBsaW5rIHRpbWUsIGV2ZW4gdGhvdWdoIHRoZXJlCitpcyBh IHByb3RvdHlwZSBmb3IgaXQgaW4gdGhlIE1JTklYIGhlYWRlciBmaWxlcywgYW5kIHRoZXJlIGlz IG5vIGFsdGVybmF0aXZlCisoc2luY2UgUE9TSVggZG9lc24ndCBsZXQgdXMgdXNlIGlvY3RsKCkp LiAgQWxzbyBub3RlIHRoYXQgdGhlcmUgaXMgc29tZQorY29uZnVzaW9uIG92ZXIgdGhlIGNvbXBp bGUtdGltZSBzeW1ib2xzIE1JTklYLCBNSU5JWDIsIE1JTklYMywgYW5kIE1JTklYMzE1LgorWW91 IHdvdWxkIGV4cGVjdCBNSU5JWCB0byBtZWFuICJhbnkgdmVyc2lvbiBvZiBNSU5JWCIgYnV0IGlu IHNvbWUgcGFydHMgb2YKK2NrdXRpby5jIGl0IG1lYW5zIE1JTklYIDEuMC4gIEkgc2luY2VyZWx5 IGRvdWJ0IHRoYXQgQy1LZXJtaXQgOS4wIGNhbiBiZQorYnVpbHQgb24gYW55IHZlcnNpb24gb2Yg TWluaXggYmVmb3JlIDMuMS41IHNvIEkgcmVtb3ZlZCB0aGUgY29uZnVzaW9uIGFuZAorbWFkZSBN SU5JWCBtZWFuICJhbnkgTWluaXgiLiAgSXQgYnVpbGRzIG9uIDMuMS41IE9LIG5vdywgZXhjZXB0 IGZvciB0aGUgRlRQCitjbGllbnQuICBUaGlzIGNhbiBwcm9iYWJseSBiZSBmaXhlZCBidXQuLi4g IE1vZHVsZXMgY2hhbmdlZDogY2tjZGViLmgsCitja3V2ZXIuaCwgY2tjbWFpLmMsIGNrdXVzNS5j LCBja3V0aW8uYywgMSBGZWIgMjAxMC4KKworTGF0ZXIuLiBBbmR5IHNheXMgTUlOSVggZG9lcyBu b3Qgc3VwcG9ydCBqb2IgY29udHJvbCwgc28gbm8gcHJvZ3JhbSBpcyBldmVyCitpbiB0aGUgYmFj a2dyb3VuZC4gIFRoYXQgc2V0dGxlcyB0aGF0ISAgMSBGZWIgMjAxMC4KKworQnVpbHQgT0sgb24g TWluaXgsIExpbnV4LCBNYWMgT1MgWCwgU29sYXJpcyA5LCBOZXRCU0QgNS4wLjEuLi4gIDEgRmVi IDIwMTAuCisKKy0tLUMtS2VybWl0IDkuMCBBbHBoYS4wMi0tLQorCitGcm9tIENocmlzdGlhbiBD b3J0aSBhdCBVbmktU3R1dHRnYXJ0LmRlOiBmaXhlcyB0byBhbGxvdyBidWlsZGluZyBvbiBTdW5P UworNC4xLCB3aGljaCBvbmNlIHdhcyBteSBtYWluIGRldmVsb3BtZW50IHBsYXRmb3JtIGJ1dCB3 aGljaCBpcyBsb25nLWdvbmUgZnJvbQoraGVyZS4gIGNrdXB0eS5jLCBja3V0aW8uYywgOSBGZWIg MjAxMC4gIChIZSBzYXlzIGl0IGlzIGFsc28gbmVjZXNzYXJ5IHRvCitjb21tZW50IG91dCB0aGUg InN0cnVjdCB3aW5zaXplIiBhbmQgInN0cnVjdCB0dHlzaXplIiBpbiBzeXMvaW9jdGwuaDsKK290 aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGEgY29uZmxpY3Qgd2l0aCBzeXMvdHR5Y29tLmggKGluY2x1 ZGVkIGJ5IHRlcm1pb3MuaCkKK3doaWNoIGFsc28gZGVjbGFyZXMgdGhlc2Ugc3RydWN0cy4gQnV0 IHlvdSBuZWVkIGJvdGggaW5jbHVkZXMuJykKKworRnJvbSBKb2huIER1bmxhcCwgYSBmaXggZm9y IEtlcm1pdCBwcm90b2NvbCBmaXhlZCBwYWNrZXQtdGltZW91dCBpbnRlcnZhbAorZ29pbmcgdG8g YSB1bmV4cGVjdGVkIHZhbHVlIChtaXNzaW5nIGVsc2UgY2xhdXNlIGluIHR3byBwbGFjZXMpLgor Y2tjZm4yLmMsIDkgRmViIDIwMTAuCisKK0FkZGVkIGFuIGFpeGcgdGFyZ2V0IHRvIGJ1aWxkIG9u IEFJWCB3aXRoIGdjYyB3aGVuIGdjYyBpcyBub3QgaW5zdGFsbGVkIGFzCitjYywgYW5kIGFsc28g YWRkZWQgQ0M9JChDQykgQ0MyPSQoQ0MpIGNsYXVzZXMgdG8gdGhlIGFpeCBhbmQgYWl4K3NzbAor dGFyZ2V0cy4gIFdvdywgQUlYIHJlYWxseSBsb3NlcyBiaWd0aW1lIHdoZW4gcmVjZWl2aW5nIGZp bGVzIHRocm91Z2ggaXRzIHNzaAorc2VydmVyLiAgU3RyZWFtaW5nIGNhbid0IGJlIHVzZWQsIHNs aWRpbmcgd2luZG93cyByZWNvdmVyIGZyb20gZXJyb3JzIGJ1dAordGhlcmUgYXJlIHRvbnMgb2Yg dGhlbSB1c2luZyB0aGUgZGVmYXVsdCA0SyBwYWNrZXRzOyA1MDAgd29ya3MgbXVjaCBiZXR0ZXIu CitCdWlsdCB3aXRoIElCTSBjYyBhbmQgZ2NjLCBhbmQgYWxzbyB0ZXN0ZWQgKHN1Y2Nlc3NmdWxs eSkgdGhlIG5ldyBhaXgraWJtc3NsCit0YXJnZXQsIGluIHdoaWNoIHRoZSBPcGVuU1NMIGhlYWRl cnMgYW5kIGxpYnMgYXJlIGluIGEgc3RhbmRhcmQgcGxhY2UuCittYWtlZmlsZSwgOSBGZWIgMjAx MC4KKworSW4gY2t1cHR5LmgsIG1ha2UgdGhlICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4gYmUgI2lm bmRlZiBTVU5PUzQxLgorRnJvbSBDaHJpc3RpYW4gQ29ydGkuICAxMCBGZWIgMjAxMC4KKworQnVp bHQgb24gVk1TIEU4LjQuICAxMiBGZWIgMjAxMC4KKworVHJpZWQgdG8gYnVpbGQgb24gYSByZWFs IFZBWC0xMS83ODUgYnV0IHRoZSBtYWNoaW5lIHNlZW1zIHRvIGJlIHNlcmlvdXNseQord2VkZ2Vk LiAgMTItMTUgRmViIDIwMTAuCisKK0FkZGVkIG5vdGUgdG8gQ0tWS0VSLkNPTSB0byB0aGUgZWZm ZWN0IHRoZSB0aGUgJ2YnIG9wdGlvbiBoYXMgbm8gZWZmZWN0CitvbiBWQVggYXJjaGl0ZWN0dXJl LiAgMTUgRmViIDIwMTAuCisKK01vdmVkIHRoZSAjaW5jbHVkZSAiY2t2cnRsLmgiIGluIHRoZSBG VFAgbW9kdWxlIHRvIGJlbG93IHRoZSBpbmNsdWRlIGZvcgordXRpbWUuaCwgYmVjYXVzZSBidWls ZGluZyB0aGUgVk1TIHZlcnNpb24gd2l0aCB0aGUgJ2knIG9wdGlvbiAobWVhbmluZworImluY2x1 ZGUgaW50ZXJuYWwgZnRwIGNsaWVudCIpIHJlc3VsdHMgaW4gInN0cnVjdCB1dGltYnVmIHRwIiBl cnJvcmluZyBvdXQKK2JlY2F1c2Ugc3RydWN0IHV0aW1idWYgaXMgbm90IGRlZmluZWQgeWV0IChh dCBsZWFzdCBpbiBzb21lIHZlcnNpb24gb2YgVk1TCit3aXRoIHNvbWUgdmVyc2lvbiBvZiBDKS4g IEZyb20gUm9iIEJyb3duLCBja2NmdHAuYywgMjAgRmViIDIwMTAuCisKK0Zyb20gTWFydGluIFZv cmxhZW5kZXI6IG5ldyBjb2RlIGluIFZNUyBDLUtlcm1pdCBidWlsZCBwcm9jZWR1cmUgdG8gZGV0 ZWN0CitPcGVuU1NMIHZlcnNpb24gYXV0b21hdGljYWxseS4gIGNrdmtlci5jb20sIDIyIEZlYiAy MDEwLgorCitBZGRlZCBjb2RlIHRvIElOUFVUIGNvbW1hbmQgdG8gc3RyaXAgQU5TSSBlc2NhcGUg c2VxdWVuY2VzLiAgSXQncyBhY3RpdmF0ZWQKK2J5IFNFVCBTRVNTSU9OLUxPRyBURVhULiAgY2t1 dXNyLmg6IGFkZGVkIHByb3RvdHlwZSBmb3IgY2hrYWVzKCk7Citja3Vjb24uYywgY2t1Y25zLmM6 IG1hZGUgaW5lc2NbXSBhbmQgb2xkZXNjW10gZ2xvYmFsIGluc3RlYWQgb2Ygc3RhdGljOyAKK2Nr dXVzNC5jOiBkb2lucHV0KCkgY29kZSBmb3Igc2tpcHBpbmcgZXNjYXBlIHNlcXVlbmNlcy4gIDEg TWFyIDIwMTAuCisKK1BldGVyIEVpY2hob3JuIGNvbXBsYWluZWQgdGhhdCBpZiB5b3UgbWFrZSBh biBzc2ggY29ubmVjdGlvbiB3aXRoIEtlcm1pdCwKK3RoZW4gbG9nIG91dCBmcm9tIHRoZSBzc2gg aG9zdCwgYW5kIHRoZW4gdXNlIGEgImNvbm5lY3QiIGNvbW1hbmQgdG8KK21ha2UgYSBuZXcgY29u bmVjdGlvbiB0byB0aGUgc2FtZSBob3N0ICh3aGljaCB5b3UgY2FuIGRvIHdpdGggVGVsbmV0KSwK K0tlcm1pdCBzYXlzIChlLmcuKToKKworIEROUyBMb29rdXAuLi4gQ2FuJ3QgZ2V0IGFkZHJlc3Mg Zm9yIHNzaCAtZSBub25lIHNvbWVob3N0bmFtZQorIFNvcnJ5LCBjYW4ndCBvcGVuIHNzaCAtZSBu b25lIHNvbWVob3N0bmFtZTogRXJyb3IgMAorCitJIGFkZGVkIGNvZGUgdG8gZGV0ZWN0IGFuZCBo YW5kbGUgdGhpcyBjYXNlIGFuZCBpdCBzZWVtcyB0byB3b3JrIE9LLCBldmVuCit0aG91Z2ggaXQn cyBraW5kIG9mIGEgaGFjay4gIGNrdXVzci5bY2hdLCBja3V1czcuYywgMSBNYXIgMjAxMC4KKwor VGhlcmUgaGFzIG5ldmVyIGJlZW4gYSBjbGVhbiB3YXkgdG8gcHV0IGRlYnVnZ2luZyBtZXNzYWdl cyAoRUNITyBjb21tYW5kcykKK2luIGEgc2NyaXB0IHdoaWNoIGFyZSBleGVjdXRlZCBvbmx5IGlm IGRlYnVnZ2luZyBpcyBkZXNpcmVkIGFuZCBpZ25vcmVkCitvdGhlcndpc2UuICBZb3UnZCBoYXZl IHRvIHNldCBhIHJhbmRvbSB2YXJpYWJsZSBhbmQgdGVzdCBpdCwgb3IgZGVmaW5lIGEKK21hY3Jv IG9yIHdoYXRldmVyLiAgVG8gbWFrZSB0aGlzIG1vcmUgc3RyYWlnaHRmb3J3YXJkLCBJIGFkZGVk IFNFVCBERUJVRworTUVTU0FHRSBPTi9PRkYvU1RERVJSLCBhbmQgYWRkZWQgYSBuZXcgTUVTU0FH RSAoc3luOiBNU0cpIGNvbW1hbmQgZm9yIHByaW50aW5nCitkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8g c3Rkb3V0IGlmIFNFVCBERUJVRyBNRVNTQUdFIGlzIE9OIG9yIHRvIHN0ZGVyciBpZiBTRVQKK0RF QlVHIE1FU1NBR0UgaXMgU1RERVJSLiAgY2tjbWFpLmMsIGNrdXVzW3IyM10uYywgMTIgTWFyIDIw MTAuCisKK0Fsc28gZm9yIGRlYnVnZ2luZyBhbmQgZXJyb3IgbWVzc2FnZXMsIEkgYWRkZWQgXHYo bGFzdGNvbW1tYW5kKSBzbyB0aGF0Cit0aGUgY29tbWFuZCB0aGF0IGZhaWxlZCBjYW4gYmUgaW5j bHVkZWQgaW4gYW4gSUYgRkFJTCBvciBERUJVRyBlcnJvciBtZXNzYWdlLgorVGhpcyB3b3JrcyBl dmVuIGZvciBjb21tYW5kcyB0aGF0IGhhdmUgc3ludGF4IGVycm9ycy4KK2NrdXVzci5oLCBja3V1 czUuYywgY2t1Y21kLmMsIDEyIE1hciAyMDEwLgorCitGcm9tIFNNUyBmb3IgVk1TOiAnQWRkZWQv ZG9jdW1lbnRlZCBQMyBvcHRpb25zIElOVFNFTEVDVCwgT0xERklCLCBPTERJUC4KK0Rpc2FibGVk IChjb21tZW50ZWQgb3V0KSBhdXRvbWF0aWMgZGVmaW5pdGlvbiBvZiBOT1NFVFRJTUUgZm9yIFZN UyBiZWZvcmUKK1Y3LjIgKHZtc192ZXIgLmx0cy4gIlZNU19WNzIiKS4nICBja2NkZWIuaCwgY2tj ZnRwLmMsIGNrY25ldC5jLCBja3V1c1syNTY3XS5jLAorY2t2ZmlvLmMsIGNrdmtlci5jb20sIGNr dnJ0bC5bY2hdLCAxNSBNYXIgMjAxMC4KKworRXhwb3NlZCBpbmVzY1tdIGFuZCBvbGRlc2NbXSBm b3IgVk1TLCBzbyBuZXcgSU5QVVQgY29tbWFuZCBlc2NhcGUtc2VxdWVuY2UKK3N0cmlwcGluZyBj YW4gd29yayAocmVhbGx5LCBjaGthZXMoKSBhbmQgcmVsYXRlZCBnbG9iYWwgdmFyaWFibGVzIHNo b3VsZCBiZQorbW92ZWQgb3V0IG9mIGNrW3V2ZF1jb24uYy9ja3VjbnMuYyBhbmQgaW50byBhIGNv bW1vbiBtb2R1bGU7IGRvIHRoYXQgbGF0ZXIpLgorY2t1dXNyLmgsIGNrdmNvbi5jLCAxNSBNYXIg MjAxMC4KKworQnVpbHQgT0sgb24gU29sYXJpczksIE1hYyBPUyBYIDEwLjQuMTEsIFJIRUw0ICgz Mi1iaXQpLCBSSEVMNSAoNjQtYml0KSwKK0FJWCA1LjMsIFNDTyBPcGVuU2VydnIgNi4wLjAuLi4g IDE1IE1hciAyMDEwLgorCitOb3Qgc28gZ29vZCBvbiBWTVMsIHR1cm5zIG91dCBJIG1hZGUgYSB0 eXBvIGluIG9uZSBvZiB0aGUgVk1TIHVwZGF0ZXMKKygjaWZuZGVmIE9MRElQIGluc3RlYWQgb2Yg I2lmZGVmLi4uKS4gIGNrY25ldC5jLCAxNiBNYXIgMjAxMC4KKworTW9yZSBmcm9tIFNNUyBmb3Ig Vk1TLCAxNiBNYXIgMjAxMDoKKyAuIFNldCBNQVhQQVRIIGNvcnJlY3RseSBmb3IgVk1TLCBja2Nk ZWIuaC4KKyAuIE5BTSAtPiBOQU1MLCBRSU8gcmVwbGFjZXMgc3lzdGVtKCAiU0VUIFBST1RFQ1RJ T04iKSwgYnVnZml4ZXMgaW4KKyAgIGN2dGRpcigpIGFuZCBuemx0b3IoKSwgLi4uICAoU2VlIGNv bW1lbnRzKTogY2t2ZmlvLmMsIG5ldyBja3ZybXMuaC4KKyAgIChUaGUgUk1TIGNvZGUgaW4gY2t2 ZmlvLmMgd2FzIGFsbW9zdCB0b3RhbGx5IHJld3JpdHRlbikKKyAuIE1vdmVkICJOQU1YJCoiIChh bmQgcmVsYXRlZCkgbWFjcm9zIHRvIGNrdnJtcy5oLCBhbmQgcmVuYW1lZCB0bworICAgIk5BTVhf KiIgKGFuZCBzaW1pbGFyICIkIiAtPiAiXyIpLCBtb3ZlZCAiRklCXyoiIG1hY3JvcyBmcm9tIGNr dnJ0bC5jLgorCitUaGVzZSBjaGFuZ2VzIGFyZSBtYWlubHkgdG8gYWNjb21tb2RhdGUgdGhlIE9E UzUgZmlsZSBzeXN0ZW0sIHdoaWNoIGhhcworbG9uZ2VyIGFuZCBtaXhlZC1jYXNlIGZpbGVuYW1l cywgYW5kIGFsc28gdG8gZXhlY3V0ZSBjZXJ0YWluIGNvbW1hbmRzCisoZS5nLiBmb3Igc2V0dGlu ZyBmaWxlIHByb3RlY3Rpb24sIGRlbGV0aW5nIGRpcmVjdG9yaWVzKSBkaXJlY3RseSBpbnN0ZWFk CitvZiB1c2luZyBhIHN5c3RlbSgpIGNvbW1hbmQuCisKK0J1aWx0IE9LIG9uIFZNUyA4LjMgKHdp dGggYW5kIHdpdGhvdXQgbmV0d29yayBzdXBwb3J0KS4gIDE2IE1hciAyMDEwLgorCitGYWlsZWQg dG8gYnVpbGQgb24gVk1TIDYuMi4gIDE2IE1hciAyMDEwLgorCitGcmVlQlNEIDguMCA8bGlidXRp bC5oPiBoYXMgYSBoZXhkdW1wKCkgcHJvdG90eXBlIHRoYXQgY29uZmxpY3RzIHdpdGggdGhlCito ZXhkdW1wIG1hY3JvIGRlZmluZWQgaW4gY2tjZGViLmguICBTaW5jZSB0aGUgc2FtZSB0aGluZyBp cyBsaWtlbHkgdG8gaGFwcGVuCitlbHNld2hlcmUsIEkgY2hhbmdlZCB0aGUgS2VybWl0IG1hY3Jv IHRvIGNraGV4ZHVtcCBhcyB3ZWxsIGFsbCByZWZlcmVuY2VzIHRvCitpdDogY2tjZGViLmgsIGNr Y2Z0cC5jLCBja2NuZXQuYywgY2tjdGVsLmMsIGNrdWF0aC5jLCBja3V0aW8uYywgMTYgTWFyIDIw MTAuCisKK0J1aWx0IE9LIG9uIERpZ2l0YWwgVW5peCBUcnUtNjQgNC4wRSB1c2luZyAibWFrZSBv c2YiLCAxNiBNYXIgMjAxMC4KKworVHJpZWQgYWdhaW4gdG8gYnVpbGQgRGlnaXRhbCBVbml4IFRy dTY0IDQuMEUgdXNpbmcgIm1ha2UgdHJ1NjQtNDBlIiwgYnV0Citzb21ldGhpbmcgcHJldmVudHMg aXQgZnJvbSBwaWNraW5nIHVwIHRoZSB0ZXJtaW9zIHN5bWJvbHMgYW5kIGl0IGJsb3dzIHVwIGlu Citja3V0aW8uYywgd2hlcmVhcyB0aGlzIHVzZWQgdG8gd29yayBpbiBlYXJsaWVyIEMtS2VybWl0 IHZlcnNpb25zLiAgVGhpcyBpcwordGhlIG9ubHkgVHJ1NjQgc3lzdGVtIEkgc3RpbGwgaGF2ZSBh Y2Nlc3MgdG8sIHNvIEkgY2FuJ3QgdGVsbCBpZiBpdCdzIGEKK2xvY2FsIHBlY3VsaWFyaXR5IG9y IHdoYXQuICBOb3RlIHRoYXQgUE9TSVggaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgYnVpbGQuCitC dXQgaWYgSSBkZWZpbmUgaXQsIEkgZ2V0IGludG8gdHJvdWJsZSB3aXRoICJzdHJ1Y3QgdGltZXZh bCIuICBUcmllZCBhZ2Fpbgord2l0aCAiS0ZMQUdTPS1EUE9TSVggLUROT1RJTUVWQUwiIGJ1dCB0 aGF0IGRvZXNuJ3QgaGVscC4gIFRyaWVkICJtYWtlCitkZWMtb3NmIiBhbmQgdGhhdCB3b3JrZWQg T0sgYnV0IG9kZGx5IGVub3VnaCBpdCBtYWtlcyBhIEtlcm1pdCB3aXRoIGxlc3MKK2ZlYXR1cmVz IHRoYW4gIm1ha2Ugb3NmIi4gIDE2IE1hciAyMDEwLgorCitUbyBnbyB3aXRoIE1FU1NBR0UgYW5k IFNFVCBERUJVRyBNRVNTQUdFLCBJIGFkZGVkIElGIERFQlVHLCB3aGljaCBpcyB0cnVlCitpZiBT RVQgREVCVUcgTUVTU0FHRSBpcyBub3QgT0ZGIGFuZCBmYWxzZSBvdGhlcndpc2UuICBja3V1c3Iu aCwgY2t1dXM2LmMsCisxNiBNYXIgMjAxMC4KKworRnJvbSBTTVM6IENvcnJlY3Rpb25zIHRvIG15 IG1lcmdpbmcgb2YgU01TJ3MgY2hhbmdlcywgY2tjZnRwLmMsIGNrdnJ0bC5oLgorQnVpbGRzIE9L IG9uIFZNUyA2LjIgbm93LiAgQWxzbyBkaWQgYW4gU1NMIGJ1aWxkIG9uIFZNUyA4LjMgd2l0aCBP cGVuU1NMCittMC45LjdlIGFuZCAiT1BFTlNTTF9ESVNBQkxFX09MRF9ERVNfU1VQUE9SVCIgd2Fz IGluY2x1ZGVkIGluIFAzCithdXRvbWF0aWNhbGx5IGJ5IE1hcnRpbiBWJ3MgYWRkaXRpb24gdG8g Y2t2a2VyLmNvbS4gIDE3IE1hciAyMDEwLgorCitGcm9tIFNNUzogI2luY2x1ZGUgPHR5cGVzLmg+ IGVhcmxpZXIgZm9yIFZNUyBpbiBja2NkZWIuaCB0byBwaWNrIHVwIG9mZl90CitiZWZvcmUgaXQg aXMgcmVmZXJlbmNlZC4gIFRoaXMgYWxsb3dzIEMtS2VybWl0IHRvIGNvbXBpbGUgb24gVk1TL0Fs cGhhIDYuMgorYnV0IGxpbmtpbmcgZmFpbHMgb24gZnNlZWtvKCkgYW5kIGZ0ZWxsbygpIChhbmQg eWV0LCBhIGZ1bmN0aW9uYWwgZXhlY3V0YWJsZQoraXMgY3JlYXRlZCwgYW5kIEZTRUVLIHdvcmtz IHJpZ2h0KS4gIEJ1aWxkcyB0aGUgc2FtZSB3YXkgd2l0aCBubyBwcm9ibGVtcyBhdAorYWxsIG9u IFZNUyA4LjMgLyBBbHBoYS4gIEluIHRoaXMgY2FzZSB3ZSBnZXQgdGhlIGZ1bGwgNjQtYml0IGFy aXRobWV0aWMuLi4KK1dlbGwsIDYyIGJpdHM6CisKKyAgQVRMQVM6OkMtS2VybWl0PiggXiAyIDYz KQorICAgOTIyMzM3MjAzNjg1NDc3NTAwMC4wCisgIEFUTEFTOjpDLUtlcm1pdD4oIF4gMiA2MikK KyAgIDQ2MTE2ODYwMTg0MjczODc5MDQKKword2hlcmVhcyBvbiBWTVMgNi4yIHdlIGdldCBpbnRl Z2VycyBvbmx5IHVwIHRvICheIDIgMzApLiAgMTcgTWFyIDIwMTAuCisKK0NoYW5nZWQgdGhlIFZN UyBidWlsZCBwcm9jZWR1cmUgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydCBhdXRvbWF0aWNh bGx5Citmb3Igbm9uLVZBWCBhbmQgVk1TIDcuMyBvciBncmVhdGVyLiAgTm8gcmVhc29uIG5vdCB0 byBpbmNsdWRlIHRoaXMgZmVhdHVyZS4KK0NoYW5nZWQgdGhlIHNlbnNlIG9mIHRoZSBGIG9wdGlv biB0byBESVNBQkxFIGxhcmdlIGZpbGUgc3VwcG9ydCBpbiB0aGUKK3VubGlrZWx5IGNhc2UgdGhh dCBDLUtlcm1pdCBpcyBiZWluZyBidWlsdCBvbiBhIHN1aXRhYmxlIHBsYXRmb3JtIGJ1dCB0aGUK K0MgbGlicmFyeSBpcyBvbGRlciB0aGFuIFZNUzczX0FDUlRMLVYwMjAwLCBpbiB3aGljaCBjYXNl IGZzZWVrbygpIGFuZAorZnRlbGxvKCkgd2lsbCBjb21lIHVwIG1pc3NpbmcgYXQgbGluayB0aW1l LiAgY2t2a2VyLmNvbSwgMTggTWFyIDIwMTAuCisKK0NoYW5nZWQgVk1TIGJ1aWxkIHByb2NlZHVy ZSB0byBpbmNsdWRlIHRoZSBGVFAgY2xpZW50IGluIGFueSBuZXR3b3JrIGJ1aWxkCitieSBkZWZh dWx0LiAgQ2hhbmdlZCB0aGUgc2Vuc2Ugb2YgdGhlIEkgb3B0aW9uIHRvIGV4Y2x1ZGUgdGhlIEZU UCBjbGllbnQsCitpbiBjYXNlIGFueWJvZHkgd291bGQgd2FudCB0byBkbyB0aGF0LiAgY2t2a2Vy LmNvbSwgMTggTWFyIDIwMTAuCisKK0Zyb20gU01TOiB1cGRhdGVkIGRlcGVuZGVuY2llcyBpbiBD S1ZLRVIuQ09NLCBmaXggdGhlICJkb24ndCByZWluY2x1ZGUgbWUiCitjbGF1c2UgaW4gQ0tWUlRM LkguICAxOSBNYXIgMjAxMC4KKworQnVpbHQgT0sgb24gVk1TIDYuMiBhbmQgOC4zIHdpdGggYW5k IHdpdGhvdXQgbmV0d29ya2luZy4gIExhcmdlIGZpbGUgc3VwcG9ydAoraW5jbHVkZWQgYXV0b21h dGljYWxseSBpbiBWTVMgOC4zICBGVFAgY2xpZW50IGluY2x1ZGVkIGF1dG9tYXRpY2FsbHkgaW4g Ym90aAorbmV0d29yayBidWlsZHMuICAxOSBNYXIgMjAxMC4KKworQ2hhbmdlZCBoZXhkdW1wKCkg dG8gY2toZXhkdW1wKCkgaW4gY2tfY3JwLmMsIHdoaWNoIEkgbWlzc2VkIGJlZm9yZS4KKzE5IE1h ciAyMDEwLgorCistLS1DLUtlcm1pdCA5LjAgQWxwaGEuMDMtLS0KKworSW4gSFAtVVggd2l0aCB0 aGUgYnVuZGxlZC1ub24gQU5TSSBjb21waWxlciwgd2UgZ2V0IHdhcm5pbmdzIGFib3V0IGZ1bmN0 aW9ucworc3VjaCBhcyBlbmR1c2Vyc2hlbGwoKSwgd2hpY2ggYXJlIGRlY2xhcmVkIHZvaWQgaW4g dGhlIGhlYWRlciBmaWxlcy4gIEJ1dCBpbgorbm9uLUFOU0kgYnVpbGRzIHdlIGRlZmluZCBWT0lE IHRvIGJlIGludCByYXRoZXIgdGhhbiB2b2lkLCBzbyBvdXIgcHJvdG90eXBlcworYXJlIHdyb25n LiAgSSBjaGVja2VkIHRoYXQgSFAtVVggOSwgMTAsIGFuZCAxMSBhbGwgaGF2ZSB2b2lkIGRhdGF0 eXBlIGFuZAorY2hhbmdlZCB0aGUgZGVmaW5pdGlvbiBvZiBWT0lEIHRvIHZvaWQgaW4gdGhvc2Ug Y2FzZXMuICBja2NkZWIuaCwgMjkgTWFyIDIwMTAuCisKK0ZpeGVkIGEgdHlwbyBpbiBhIGRlYnVn KCkgc3RhdGVtZW50IGluIGNrc3BsaXQoKSB0aGF0IHdhcyBjYXVzaW5nIHNvbWUKK3dhcm5pbmdz LiAgY2tjbGliLmMsIDI5IE1hciAyMDEwLgorCitEaXR0byBpbiB0bHNfbG9hZF9jZXJ0cygpLiAg Y2tfc3NsLmMsIDI5IE1hciAyMDEwLgorCisibWFrZSBocHV4MTAwMG8rc3NsIiBmaWxlcyB3aXRo OgorL3Vzci9jY3MvYmluL2xkOiBVbnNhdGlzZmllZCBzeW1ib2xzOgorICAgX191bW9kZGkzIChj b2RlKQorICAgX191ZGl2ZGkzIChjb2RlKQorICAgX19lcHJpbnRmIChjb2RlKQorCitJdCBhcHBl YXJzIHRoYXQgT3BlblNTTCAoMC45LjdjIGluIHRoaXMgY2FzZSkgcmVxdWlyZXMgLWxnY2MuCitB bmQgaW5kZWVkIGhwdXgxMDAwZ2NjK3NzbCBidWlsZHMgZmluZS4gIDI5IE1hciAyMDEwLgorCitU aGVyZSBhcmUgdmFyaW91cyB3YXJuaW5ncyBpbiB0aGUgU1NMIGNvZGUgaW4gY2t1dGlvLmMsIGNr Y2Z0cC5jLCBhbmQKK2NrY25ldC5jIGFib3V0IHBvaW50ZXJzIG5vdCBiZWluZyBhc3NpZ25tZW50 IGNvbXBhdGlibGUsIGJ1dCBJIGhhdmUgbGVhcm5lZAorZnJvbSBleHBlcmllbmNlIG5vdCB0byB0 cnkgdG8gZml4IHRoZXNlIChzZWUgbm90ZXMgZnJvbSA2IE9jdCAyMDA5KS4KKzI5IE1hciAyMDEw LgorCitjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmaGlzY3RsYWRkciwgc2l6ZW9mICho aXNjdGxhZGRyKSk6IEluIEZUUCwKK3RoaXMgZG9lc24ndCB3b3JrIG9uIFJIRUw1IC8gTWFjIE9Y IFggNi4xLzIgNjQtYml0LiAgQnV0IHRoZSBjb25uZWN0KCkgaW4KK1RlbG5ldCB3b3Jrcy4gIE9u IE1hYyBPUyBYIDYuMiBJIHRyaWVkIGNoYW5naW5nIHRoZSBzb2NrZXQoKSBjYWxsIHRvIGJlIGxp a2UKK3RoZSBvbmUgaW4gY2tjbmV0LmMgZm9yIFRlbG5ldCwgYnV0IGl0IG1hZGUgbm8gZGlmZmVy ZW5jZS4gIE9uIGEgUkhFTDUuNAorc3lzdGVtIG9uIGkzODYsIEZUUCB3b3JrcyBmaW5lLCBzbyBp dCdzIG5vdCB0aGUgUmVkIEhhdCB2ZXJzaW9uLiAgT24gRGlnaXRhbAorVW5peCA0LjBFIDY0LWJp dCwgc2FtZSB0aGluZzoKKworICAxMToyMzoxMC43MjIgZnRwX2hvb2t1cFtrZXJtaXQuY29sdW1i aWEuZWR1XT0yMQorICAxMToyMzoxMC43MjIgZnRwIGhvb2t1cCBBW2tlcm1pdC5jb2x1bWJpYS5l ZHVdCisgIDExOjIzOjEwLjcyMiBmdHAgaG9va3VwIENba2VybWl0LmNvbHVtYmlhLmVkdV0KKyAg MTE6MjM6MTAuNzIyIGZ0cCBob29rdXAgc29ja2V0PTQKKyAgMTE6MjM6MTAuNzIyIGZ0cCBob29r dXAgSEFERFJMSVNUCisgIDExOjIzOjEwLjcyMyBmdHAgaG9va3VwIGNvbm5lY3QgZmFpbGVkPTEz CisgIDExOjIzOjEwLjcyMyBmdHAgaG9va3VwIGJhZAorCisxMyA9IFBlcm1pc3Npb24gZGVuaWVk OgorCisgIFtFQUNDRVNTXSBTZWFyY2ggcGVybWlzc2lvbiBpcyBkZW5pZWQgZm9yIGEgY29tcG9u ZW50IG9mIHRoZSBwYXRoIHByZWZpeDsKKyAgICBvciB3cml0ZSBhY2Nlc3MgdG8gdGhlIG5hbWVk IHNvY2tldCBpcyBkZW5pZWQuCisKK09uIEdlbnRvbyBMaW51eCwgYWxzbyBvbiBBbHBoYSwgdGhl IGVycm5vIGlzIDUxOiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlLgorQ2xlYXJseSBzb21lIGRhdGEg dHlwZSBpbiB0aGUgc29ja2V0cyBzdHJ1Y3RzIGlzIG91dCBvZiB3aGFjay4KKworVGhlIHRoaXJk IGNvbm5lY3QoKSBhcmd1bWVudCBpcyAiYWRkcmVzcyBsZW5ndGgiLiAgVGhlIGFkZHJlc3MgaXMg YQorc3RydWN0IHNvY2thZGRyLiAgQWJvdXQgdGhlIHRoaXJkIGFyZ3VtZW50LCBSSEVMNSAibWFu IGNvbm5lY3QiIHNheXM6CisKKyAgVGhlIHRoaXJkIGFyZ3VtZW50IG9mIGNvbm5lY3QoKSBpcyBp biByZWFsaXR5IGFuIGludCAoYW5kIHRoaXMgaXMgd2hhdCAKKyAgNC54IEJTRCBhbmQgbGliYzQg YW5kIGxpYmM1IGhhdmUpLiAgU29tZSBQT1NJWCBjb25mdXNpb24gcmVzdWx0ZWQgaW4gCisgIHRo ZSBwcmVzZW50IHNvY2tsZW5fdCwgYWxzbyB1c2VkIGJ5IGdsaWJjLiAgU2VlIGFsc28gYWNjZXB0 KDIpLgorCitCdWlsZGluZyBvbiBSSEVMNSBvbiB4ODZfNjQsIHdoZXJlIHNpemVfdCBpcyA4IGFu ZCBzb2NrbGVuX3QgaXMgNCwgSSBnZXQgYQord2FybmluZzoKKworICBja2NmdHAuYzogSW4gZnVu Y3Rpb24gJ2Z0cF9ob29rdXAnOgorICBja2NmdHAuYzoxNDY2Nzogd2FybmluZzoKKyAgIGNvbXBh cmlzb24gaXMgYWx3YXlzIHRydWUgZHVlIHRvIGxpbWl0ZWQgcmFuZ2Ugb2YgZGF0YQorCitSZWZl cnJpbmcgdG86CisKKyAgaWYgKGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyICE9ICh1bnNpZ25l ZCBsb25nKSAtMSkKKworVGhpcyBzZWVtcyB0byBiZSB0aGUgcHJvYmxlbTsgaWYgSSByZW1vdmUg dGhlICh1bnNpZ25lZCBsb25nKSBjYXN0IChpbiB0d28KK3BsYWNlcyksIHRoZSBwcm9ibGVtIGdv ZXMgYXdheS4gIEFjdHVhbGx5IHdoYXQgSSBzaG91bGQgYmUgY29tcGFyaW5nIGl0IHdpdGgKK2lz IElOQUREUl9OT05FLCB3aGljaCBpcyBkZWZpbmVkIGFwcHJvcHJpYXRlbHkgaW4gc29tZSBoZWFk ZXIgZmlsZSwgZS5nLiBhcworMHhmZmZmZmZmZi4gIEFsc28gSSBkZWZpbmUgaXQgZXhwbGljaXRs eSBhcyAtMSBpZiBpdCBpcyBub3QgZGVmaW5lZCBpbiBhbnkKK2hlYWRlciBmaWxlIChhcyBpcyB0 aGUgY2FzZSBpbiBTb2xhcmlzIDkpLiAgVGVzdGVkIE9LIG9uIDY0LWJpdCBSSEVMNSwKKzMyLWJp dCBSSEVMNSwgRGlnaXRhbCBVbml4IDQuMEUgNjQtYml0LCBTb2xhcmlzIDkgMzItYml0LCBNYWMg T1MgWCAxMC40LjExCiszMi1iaXQsIE1hYyBPUyBYIDEwLjYuMyA2NC1iaXQsIEFJWCA1LjMsIEdl bnRvbyBMaW51eCAyLjYuMzEgb24gQWxwaGEKKzY0LWJpdCwgTmV0QlNEIDUuMC4xIDMyLWJpdC4u Li4gIGNrY2Z0cC5jLCAyOSBNYXIgMjAxMC4KKworLS0tQy1LZXJtaXQgOS4wIEFscGhhLjA0LS0t CisKK1llc3RlcmRheSdzIFZPSUQgcmVkZWZpbml0aW9uIGNhdXNlZCBwcm9ibGVtcyBmb3IgSFAt VVggaW4gY2t1dXN4LmMsIGluIHRoZQorY3Vyc2VzIHNlY3Rpb24gd2hlcmUgVk9JRCBpcyB1bmRl ZidkIGFuZCBub3QgdXNlZCB0byBhdm9pZCBhIGNvbmZsaWN0IHdpdGgKK2N1cnNlcy5oLiAgQXMg YSB3b3JrYXJvdW5kIEkgZGVmaW5lZCBhIG5ldyBtYWNybyBDS1ZPSUQgd2l0aCB0aGUgc2FtZQor ZGVmaW5pdGlvbiBhcyBWT0lEIGFuZCB1c2VkIGl0IGluIHRoZSBvZmZlbmRpbmcgc2VjdGlvbiBv ZiBja3V1c3guICBUaGUgcmVhbAorc29sdXRpb24gaXMgdG8gcmVwbGFjZSBhbGwgcmVmZXJlbmNl cyB0byBWT0lEIHdpdGggQ0tWT0lEIChzaW5jZSBWT0lEIGlzCitpbmNyZWFzaW5nbHkgbGlrZWx5 IHRvIGNhdXNlIGNvbmZsaWN0cyksIGJ1dCBhIG1hc3Mgc2VhcmNoIGFuZCByZXBsYWNlIGlzCitu b3Qgd2l0aG91dCByaXNrcy4gIGNrY2RlYi5oLCBja3V1c3guYywgMzAgTWFyIDIwMTAuCisKK0No YW5nZWQgVk9JRCBhbmQgQ0tWT0lEIGRlZmluaXRpb24gdG8gYmUgJ3ZvaWQnIGZvciBhbGwgSFAt VVggKHZlcmlmaWVkIGJ5CitQZXRlckUgYmFjayB0byBIUC1VWCA2LjUsIDE5ODkpLiAgU3RpbGwg bmVlZCB0byBjaGVjayB0aGlzIG9uIEhQLVVYIDUuMjE7CitpZiB0aGF0J3MgYW4gZXhjZXB0aW9u IGl0IGNhbiBiZSBkb25lIGluIHRoZSBtYWtlZmlsZS4gIGNrY2RlYi5oLCAzMCBNYXIgMjAxMC4K KworVGhlIGNoYW5nZSBJIG1hZGUgdG8gYWxsb3cgQ09OTkVDVCB0byByZWVzdGFibGlzaCBhIHBy ZXZpb3VzIFNTSCBjb25uZWN0aW9uCitwcmV2ZW50ZWQgYSBuZXcgU1NIIGNvbm5lY3Rpb24gdG8g YSBkaWZmZXJlbnQgaG9zdCB0byBiZSBtYWRlLiAgRml4ZWQgaW4KK2NrdXVzNy5jLCAzMCBNYXIg MjAxMC4KKworRml4ZWQgbWlzdGFrZW4gZXh0ZXJuIGRlY2xhcmF0aW9ucyBvZiBrcmI0X2Vycm5v IGFuZCBrcmI1X2Vycm5vIGFzIHN0cmluZ3MKK2luIG52bG9vaygpOyB0aGV5IGFyZSBpbnRzLiBC dWlsdCBPSyBvbiBNYWMgT1MgWCAxMC42LjMuIGNrdXVzNC5jLCAzMCBNYXIgMjAxMC4KKworQSBm aXggdG8gVHJ1c3RlZCBIUC1VWCBtYWtlZmlsZSB0YXJnZXQgZnJvbSBQZXRlckUsIHRvIGFjY291 bnQgZm9yIHRoZQorZXF1aXZhbGVuY2Ugb2YgK29wZW5zc2wgYW5kICtzc2wgYXMgdGFyZ2V0IHN1 ZmZpeGVzLiAgMzAgTWFyIDIwMTAuCisKK0FkZGVkIGEgbmV3IGZ1bmN0aW9uIFxmY3Z0Y3NldHMo c3RyaW5nLGNzZXQxLGNzZXQxKSB0aGF0IGNvbnZlcnRzIGEgc3RyaW5nCitmcm9tIG9uZSBjaGFy YWN0ZXIgc2V0IHRvIGFub3RoZXIuICBUaGUgY3NldHMgYXJlIEZpbGUgQ2hhcmFjdGVyLVNldCBu YW1lcy4KK2NrdXVzNC5jLCAzMSBNYXIgMjAxMC4KKworQWRkZWQgYSBuZXcgZnVuY3Rpb24gXGZk ZWNvZGVoZXgoc3RyaW5nLHByZWZpeCkgdGhhdCBkZWNvZGVzIGEgc3RyaW5nCitjb250YWluaW5n IHByZWZpeGVkIGhleCBieXRlcy4gIERlZmF1bHQgcHJlZml4IGlzICUlLCBidXQgYW55IHByZWZp eCBvZgorb25lIG9mIHR3byBjaGFycyAoc3VjaCBhcyAlIG9yIDB4KSBjYW4gYmUgc3BlY2lmaWVk LiAgY2t1dXNyLmgsIGNrY2xpYi5oLAorY2tjbGliLmMsIGNrdXVzci5jLCAzMSBNYXIgMjAxMC4K KworUmljaGFyZCBOb2xkZSByZXBvcnRzIHRoYXQgS2VybWl0IGNhbid0IGZpbmQgLWxwYW0gb24g RmVkb3JhIDEyIGJlY2F1c2UgaXQncworaW4gL2xpYiByYXRoZXIgdGhhbiAvdXNyL2xpYi4gIFJI RUw1IGhhcyBzeW1saW5rcywgRkMxMiBzaG91bGQgdG9vLiAgQWRkZWQgYQorbm90ZSB0byB0aGUg bWFrZWZpbGUuICAxIEFwciAyMDEwLgorCitCdWlsZCBvbiBTb2xhcmlzIDExIGZvciB0aGUgZmly c3QgdGltZS4gIEhhZCB0byBhZGp1c3QgY2t1dmVyLmggdG8gZ2V0IHRoZQordmVyc2lvbiBoZXJh bGQgcmlnaHQuICBUaGlzIHdhcyBvbiBhIGJveCB0aGF0IHJlcG9ydGVkIGl0cyBhcmNoaXRlY3R1 cmUgYXMKK2k4NnBjLiAgMSBBcHIgMjAxMC4KKworQWRkZWQgTUlNRSBjaGFyYWN0ZXItc2V0IG5h bWVzIGFzIGludmlzaWJsZSBzeW5vbnltcyBpbiB0aGUgZmlsZSBhbmQKK3Rlcm1pbmFsIGNoYXJh Y3Rlci1zZXQgdGFibGVzLCBmY3N0YWJbXSBhbmQgdGNzdGFiW10uICBOb3RlIHRoYXQgbm90IGFs bCB0aGUKK2NoYXJhY3RlciBzZXRzIGtub3duIHRvIEtlcm1pdCBhcmUgcmVnaXN0ZXJlZCBpbiBN SU1FLiAgQnV0IGF0IGxlYXN0IG5vdworTUlNRS1yZWdpc3RlcmVkIGNoYXJhY3RlciBzZXRzIGNh biBiZSByZWZlcnJlZCB0byBieSB0aGVpciBNSU1FIG5hbWVzLCBlLmcuCitJU08tODg1OS0xLCBJ U082NDYtRVMsIElCTTQzNywgV0lORE9XUy0xMjUyLiAgVGhlc2UgYXJlIG5vdCBsaXN0ZWQgaWYg eW91Cit0eXBlID8gaW4gYSBmaWVsZCB0aGF0IGlzIHBhcnNpbmcgdGhlbSwgdW5sZXNzIHlvdSB0 eXBlIGEgbGV0dGVyIGZpcnN0LAorZS5nLiAiaT8iIGxpc3RzIElTTy0gYW5kIElCTSBzZXQgbmFt ZXMuICBMYXRlciBtYXliZSBJJ2xsIG1ha2UgcGFyYWxsZWwKK3RhYmxlcywgb3Iga2V5d29yZCBh dHRyaWJ1dGUgYml0IHRoYXQgc2F5cyB3aGV0aGVyIGEgbmFtZSBpcyBNSU1FIG9yIG5vdC4KK1Ro ZSByZWFsIGJlbmVmaXQgb2YgdGhpcyBjaGFuZ2UgaXMgdGhhdCBub3cgS2VybWl0IGNhbiB0YWtl IGl0cworY2hhcmFjdGVyLXNldCBuYW1lcyBmcm9tIGV4dGVybmFsIHNvdXJjZXMgbGlrZSBlbWFp bCBoZWFkZXJzIG9yIHdlYiBsb2dzLgorY2t1eGxhLmMsIDEgQXByIDIwMTAuCisKK0NoYW5nZWQg dGhlIElGIGNvbW1hbmQgdG8gYWNjZXB0IGEgYmFyZSBtYWNybyBuYW1lIGl0cyBjb25kaXRpb24u ICBUaGlzIHdpbGwKK3BhcnNlIGFuZCBleGVjdXRlIGNvcnJlY3RseSBpZiB0aGUgbWFjcm8gaXMg ZGVmaW5lZCBhbmQgaWYgaXQgaGFzIGEgbnVtZXJpYwordmFsdWUsIG9yIGlmIGl0IGlzIG5vdCBk ZWZpbmVkLCBpbiB3aGljaCBjYXNlIGl0IGV2YWx1YXRlcyB0byAwIChGQUxTRSkuICBJZgoraXQg aXMgZGVmaW5lZCBidXQgaGFzIGEgbm9uLW51bWVyaWMgdmFsdWUsIGEgcGFyc2UgZXJyb3Igb2Nj dXJzLiAgY2t1dXM2LmMsCisyIEFwciAyMDEwLgorCitBZGRlZCBcZnN0cmluZ3R5cGUoKSBmdW5j dGlvbi4gIEdpdmVuIGEgc3RyaW5nIGFyZ3VtZW50LCBpdCB0ZWxscyB3aGV0aGVyCit0aGUgc3Ry aW5nIGlzIDdiaXQsIDhiaXQsIHV0ZjgsIGJpbmFyeSwgZXRjLiAgY2t1dXNyLmgsIGNrdXVzWzR4 XS5jLAorMiBBcHIgMjAxMC4KKworRGlkIGEgZmV3IGJ1aWxkcyB0byBtYWtlIHN1cmUgdGhlcmUg d2VyZSBubyBib29ib29zLiAgU29sYXJpcyA5LCBOZXRCU0QKKzUuMDEsIExpbnV4IFJIRUw0LCBI UC1VWCAxMC4yMCAobm9uLUFOU0kgY29tcGlsZXIgYW5kIEFOU0kgb3B0aW1pemluZworY29tcGls ZXIpLCBNYWMgT1MgWCAxMC40LjExLCBTQ08gT1NSIDYuMDAuICA1IEFwciAyMDEwLgorCistLS1D LUtlcm1pdCA5LjAgQWxwaGEuMDUtLS0KKworSW5jcmVhc2VkIG1heGltdW0gdmFyaWFibGUgbmFt ZSBsZW5ndGggZnJvbSA0SyB0byAxNksuIFZlcmlmaWVkIHRoYXQKK3Rvby1sb25nIG5hbWVzIGFy ZSBjYXVnaHQgYW5kIHJlY292ZXJlZCBmcm9tIGNvcnJlY3RseS4gIGNrdXVzci5oLCA2IEFwciAy MDEwLgorCitJbXBsZW1lbnRlZCBhIG5ldyBcZnNwbGl0KCkgb3B0aW9uIGZvciBwYXJzaW5nIENT ViBmaWxlcywgd2hpY2ggdHVybnMgb3V0IHRvCitiZSBhIGxpdHRsZSBjb21wbGljYXRlZCwgYmVj YXVzZSB0aGUgc2VwYXJhdG9yIGlzIG5vdCBqdXN0IGEgY29tbWEsIGJ1dCBhCitjb21tYSBhbmQg YWxsIGl0cyBzdXJyb3VuZGluZyBzcGFjZXMuICBBbHNvIHRoZXJlIGFyZSBzcGVjaWFsIHF1b3Rp bmcgcnVsZXMKK2ZvciBmaWVsZHMgd2l0aCBlbWJlZGRlZCBjb21tYXMgYW5kIGZpZWxkcyB3aXRo IGVtYmVkZGVkIHF1b3Rlcy4gIGNrY2xpYi5jLAorNyBBcHIgMjAxMC4KKworLS0tQy1LZXJtaXQg OS4wIEFscGhhLjA2LS0tCisKK1ZNUyBjaGFuZ2VzIGZyb20gU01TLiAgVGhleSBidWlsZCBPSywg S2VybWl0IGZpbGUgdHJhbnNmZXJzIGFyZSBzdGlsbCBPSywKK2J1dCBGVFAgdGV4dC1tb2RlIEdF VHMgYWx3YXlzIGhhbmcgb24gdGhlIDEwdGggOEsgbmV0d29yayByZWFkLiAgQ291bGRuJ3QKK2dl dCBhIGRlYnVnIGxvZyB0aGlzIHRpbWUuICBja2NtYWkuYywgY2t2ZmlvLmMsIGNrdnJtcy5oLCBj a3ZrZXIuY29tLgorOCBBcHIgMjAxMC4KKworQ2hhbmdpbmcgVk5BTUwgZnJvbSA0SyB0byAxNksg YnJva2UgdGhlIGJ1aWxkIG9uIEhQLVVYIDkuICBQdXQgaXQgYmFjayB0bworNEsuICA5IEFwciAy MDEwLgorCitKb2huIER1bmxhcCwgcnVubmluZyBkYXlzLWxvbmcgc3RyZXNzIHRlc3RzIGJldHdl ZW4gRS1LZXJtaXQgYW5kIEMtS2VybWl0LAorZm91bmQgYSBidWcgaW4gdGhlIHBhY2tldC1yZWFk aW5nIGFuZCAtZGVjb2RpbmcgY29kZTogSWYgYSBOQUsgcGFja2V0CithcnJpdmVzIHdpdGggaXRz IGxlbmd0aCBmaWVsZCBjb3JydXB0ZWQgdG8gaW5kaWNhdGUgYSBiaWdnZXIgc2l6ZSwgYW5kIHRo ZXJlCithcmUgZW5vdWdoIGJ5dGVzIGZvbGxvd2luZyBpbiB0aGUgcGlwZWxpbmUsIHR0aW5sKCkg d2lsbCByZXR1cm4gYSB0b28tbG9uZworcGFja2V0IChpZiB0aGVyZSBhcmUgbm90IGVub3VnaCBi eXRlcyB3YWl0aW5nIHRvIGJlIHJlYWQsIHRoZW4gdHRpbmwoKSB3aWxsCitwcm9wZXJseSB0aW1l IG91dCkuICBJbiB0aGUgYmFkIGNhc2UgcnBhY2soKSB0cnVzdHMgdGhlIHBhY2tldCBsZW5ndGgs IHVzZXMKK2l0IGFzIHRoZSBiYXNpcyBmb3IgY29tcHV0YXRpb24gb2YgdGhlIGJsb2NrLWNoZWNr IGxlbmd0aCwgd2hpY2ggaXMgdGhlbgordXNlZCB0byBhY2Nlc3MgbWVtb3J5IHRoYXQgbWlnaHQg bm90IGJlIHRoZXJlLCBjYXVzaW5nIChhdCBsZWFzdCBvbiBKb2huJ3MKK0xpbnV4IHN5c3RlbSkg YSBzZWdtZW50YXRpb24gZmF1bHQuICBKb2huIGFkZGVkIHRoZSBub3JtYWwgY2xhdXNlIHRvIGNo ZWNrCit0aGUgcmVzdWx0IG9mIHRoZSBibG9jay1jaGVjayBjYWxjdWxhdGlvbiwgYW5kIEkgY2hh bmdlZCB0dGlubCgpIHRvIGFsd2F5cworYnJlYWsgb24gdGhlIGVvbCBjaGFyYWN0ZXIgKG5vcm1h bGx5IGNhcnJpYWdlIHJldHVybiksIHNpbmNlIHRoaXMgY2FuIG5ldmVyCithcHBlYXIgaW4gYSBw YWNrZXQsIGV2ZW4gaWYgd2UgInNldCBjb250cm9sIHVucHJlZml4IGFsbCIuICBBbHNvIGFkZGVk IGEKK2NoZWNrIHRvIHR0aW5sKCkgdG8gcHJvdGVjdCBhZ2FpbnN0IGxlbmd0aCBmaWVsZHMgY29y cnVwdGVkIGludG8gaWxsZWdhbAordmFsdWVzLiAgY2tjZm4yLmMsIGNrdXRpby5jLCAxMyBBcHIg MjAxMC4KKworRnJvbSBMZXdpcyBNY0NhcnRoeToKKyAgQmFzZWQgb24gY29kZSBpbnNwZWN0aW9u LCBDLUtlcm1pdCBhcHBlYXJzIHRvIGhhdmUgYW4gU1NMLXJlbGF0ZWQgc2VjdXJpdHkKKyAgdnVs bmVyYWJpbGl0eSBhbmFsb2dvdXMgdG8gdGhhdCBpZGVudGlmaWVkIGFzIENWRS0yMDA5LTM3Njcg KHNlZSBlLmcuCisgIGh0dHA6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFt ZT1DVkUtMjAwOS0zNzY3KS4KKworICBJJ20gYXR0YWNoaW5nIGEgcGF0Y2ggZm9yIHRoaXMgaXNz dWUgcmVsYXRpdmUgdG8gdGhlIHJldmlzaW9uIG9mIGNrX3NzbC5jCisgIG9idGFpbmVkIGZyb20g YSBjb3B5IG9mIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHAvdGVzdC90YXIveC56 aXAKKyAgZG93bmxvYWRlZCBvbiAyMDEwLzA3LzMwLCB3aGljaCBJIGJlbGlldmUgaXMgdGhlIGxh dGVzdC4KKworICBXaGVuIHRoaXMgZmxhdyB3YXMgZmlyc3Qgd2lkZWx5IHB1YmxpY2l6ZWQgYXQg bGFzdCB5ZWFyJ3MgQmxhY2sgSGF0CisgIGNvbmZlcmVuY2UsIGl0IHdhcyBjbGFpbWVkIHRoYXQg c29tZSBwdWJsaWMgY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMgaGFkCisgIGluZGVlZCBpc3N1ZWQg Y2VydGlmaWNhdGVzIHRoYXQgY291bGQgYmUgdXNlZCB0byBleHBsb2l0IHRoaXMgY2xhc3Mgb2YK KyAgdnVsbmVyYWJpbGl0eS4gQXMgZmFyIGFzIEkga25vdyB0aGV5IGhhdmUgbm90IHJldmVhbGVk IHNwZWNpZmljYWxseSB3aGljaAorICBwdWJsaWMgQ0EocykgaGFkIGJlZW4gZm91bmQgaXNzdWlu ZyBzdWNoIGNlcnRpZmljYXRlcy4KKyAgU29tZSByZWZlcmVuY2VzOiBodHRwOi8vd3d3Lm1zZWNs YWIuY29tLz9wPTE4MAorICBodHRwOi8vd3d3LnRoZXJlZ2lzdGVyLmNvLnVrLzIwMDkvMDcvMzAv dW5pdmVyc2FsX3NzbF9jZXJ0aWZpY2F0ZS8KKworUGF0Y2hlcyBhZGRlZCB0byBja19zc2wuYywg NCBBdWcgMjAxMC4KKworUGV0ZXIgRWljaGhvcm4gcmVwb3J0ZWQgdGhhdCAiUkVOQU1FIC4uL3gg LiIgZGlkbid0IHdvcmsuICBUaGlzIGlzIGEgc2lkZQorZWZmZWN0IG9mIHRoZSBjaGFuZ2VzIG9m IDIwMDYgdG8gdGhlIFJFTkFNRSBjb21tYW5kLCB0aGVyZSB3YXMgYSBsaXR0bGUKK2NvbmZ1c2lv biBpbiB0aGUgcmVuYW1lb25lKCkgcm91dGluZTsgZml4ZWQgaW4gY2t1dXM2LmMsIDQgQXVnIDIw MTAuCisKK0lmIG9ubHkgb25lIGZpbGUgaXMgRk9QRU4nZCwgRkNMT1NFIGdpdmVuIHdpdGggbm8g YXJndW1lbnRzIHdvdWxkIGNsb3NlIGl0LgorVHVybnMgb3V0IHRvIGJlIGEgYmFkIGlkZWEuIEV4 YW1wbGU6IHByb2dyYW0gd2l0aCBhbiBpbnB1dCBhbmQgb3V0cHV0IGZpbGUsCit0cnkgdG8gY2xv c2UgdGhlIG91dHB1dCBmaWxlIGJlZm9yZSBpdCBpcyBvcGVuZWQgYnkganVzdCB0eXBpbmcgRkNM T1NFOyB0aGlzCitjYW4gbWVzcyB1cCB0aGUgaW5wdXQgZmlsZS4gICBGb3Igc2FmZXR5IEZDTE9T RSBoYXMgdG8gcmVxdWlyZSBhIGNoYW5uZWwKK251bWJlciBvciBBTEwuICBja3V1czcuYywgNCBB dWcgMjAxMC4KKworQWRkZWQgXGZzdHJjbXAoczEsczIsY2FzZSxzdGFydCxsZW5ndGgpLCB3aGlj aCBoYXMgdGhlIGFkdmFudGFnZSBvdmVyIElGCitFUVUsTEdULExMVCB0aGF0IGNhc2Ugc2Vuc2l0 aXZpdHkgY2FuIGJlIHNwZWNpZmllZCBhcyBhIGZ1bmN0aW9uIGFyZywgYW5kCithbHNvIHN1YnN0 cmluZ3MgY2FuIGJlIHNwZWNpZmllZC4gIGNrdXVzci5oLCBja3V1c1syNF0uYywgNSBBdWcgMjAx MC4KKworVGhlIENTViBmZWF0dXJlIG9mIEFscGhhLjA2IGhhZCBhIHN1YnRsZSBmbGF3LCBuYW1l bHkgdGhhdCBpZiB0aGUgbGFzdCBpdGVtCitpbiBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IHdhcyBl bmNsb3NlZCB3aXRoaW4gZG91YmxlcXVvdGVzIHdpdGggYSB0cmFpbGluZworc3BhY2UgYWZ0ZXIg dGhlIGNsb3NpbmcgZG91YmxlcXVvdGUsIGEgc3B1cmlvdXMgZW1wdHkgZmluYWwgZWxlbWVudCB3 b3VsZCBiZQorY3JlYXRlZCBpbiB0aGUgcmVzdWx0IGFycmF5LiAgRml4ZWQgaW4gY2tzcGxpdCgp LCBja2NsaWIuYywgNSBBdWcgMjAxMC4KKworLS0tQWxwaGEuMDctLS0KKworVGhlIENTViBmZWF0 dXJlIG9mIFxmc3BsaXQoKSBzcGxpdHMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBpbnRvIGFuIGFy cmF5LgorVG8gdHVybiB0aGUgYXJyYXkgYmFjayBpbnRvIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qs IFxmam9pbigmYSxcNDQsMSkgYWxtb3N0Cit3b3JrcywgZXhjZXB0IGZvciBlbGVtZW50cyBjb250 YWluIGxpdGVyYWwgZG91YmxlcXVvdGVzLCBzdWNoIGFzOgorCisgIE1vaGFtbWFkICJUaGUgR3Jl YXRlc3QiIEFsaQorCitUaGlzIGNhbGxzIGZvciBtYWtpbmcgYSBzeW1ib2xpYyBDU1YgYXJndW1l bnQgZm9yIFxmam9pbigpIGxpa2UgdGhlIG9uZSB0aGF0Cit3YXMgbWFkZSBmb3IgXGZzcGxpdCgp OiBcZmpvaW4oJmEsQ1NWKS4gIEFsc28gXGZqb2luKCZhLFRTVikgZm9yCitUYWItc2VwYXJhdGVk IGxpc3QuICBUaHVzIGlmIEtlcm1pdCByZWFkcyBhIHJlY29yZCBpbiBDU1YgZm9ybWF0LCBzcGxp dHMgaXQKK2ludG8gYW4gYXJyYXksIGFuZCB0aGVuIGpvaW5zIHRoZSBhcnJheSBiYWNrIGludG8g YSBDU1YgcmVjb3JkLCB0aGUgcmVzdWx0Cit3aWxsIGJlIGVxdWl2YWxlbnQgdG8gdGhlIG9yaWdp bmFsLCBhY2NvcmRpbmcgdG8gdGhlIENTViBkZWZpbml0aW9uLiAgSXQKK21pZ2h0IG5vdCBiZSBp ZGVudGljYWwsIGJlY2F1c2UgaWYgdGhlIHJlc3VsdCBoYWQgZXh0cmFuZW91cyBzcGFjZXMgYmVm b3JlCitvciBhZnRlciB0aGUgc2VwYXJhdGluZyBjb21tYXMsIHRoZXNlIGFyZSBkaXNjYXJkZWQs IGJ1dCB0aGF0IGRvZXMgbm90CithZmZlY3QgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMuICBGdXJ0 aGVybW9yZSBpdCBpcyBub3cgcG9zc2libGUgdG8gY29udmVydAorYSBjb21tYS1zZXBhcmF0ZWQg bGlzdCBpbnRvIGEgdGFiLXNlcGFyYXRlZCBsaXN0LCBhbmQgdmljZSB2ZXJzYSAod2hpY2ggaXMK K25vdCBhIHNpbXBsZSBtYXR0ZXIgb2YgY2hhbmdpbmcgY29tbWFzIHRvIHRhYnMgb3IgdmljZSB2 ZXJzYSkuICBja3V1czQuYywKKzEyIEF1ZyAyMDEwLgorCitGcm9tIEpvb3AgQm9vbmVuIDI2IEp1 bGkgMjAxMDogIkFkZGVkIEhBVkVfTE9DS0RFViBhcyBvcGVuU3VTRSA+PSAxMS4zIHVzZXMKK2xv Y2tkZXYgYnV0IG5vdCBiYXVkYm95LiAgVGhleSB1c2UgdHR5bG9jayBkaXJlY3RseS4gIFRoZSBw cm9ncmFtIGNvZGUgaGFzCitiZWVuIGFkZGVkIHNvIHRoZSB0aGUgcHJvZ3JhbSB3b3JrcyB3aXRo b3V0IGEgcHJvYmxlbS4iICBtYWtlZmlsZSwgY2tjZGViLmgsCitja3V0aW8uYywgY2t1dXM1LmMs IDIzIEF1ZyAyMDEwLgorCistLS1BbHBoYS4wOC0tLQorCitGcm9tIEdhcnkgTWlsbHMgYXQgdGhl IFUgb2YgTWFuaXRvYmE6IGNvbnZlcnQgU29sYXJpcyB2ZXJzaW9uIGZyb20gQlNEIHB0eXMKK3Rv IHN0cmVhbXMgcHR5cyBiZWNhdXNlIHRoZXJlIGFyZSBvbmx5IDQ4IEJTRC1zdHlsZSBwdHlzIGFu ZCBoZSB3YXMgcnVubmluZworb3V0LiAgTm8gY29kZSBjaGFuZ2VzIG5lZWRlZCwgdGhlIG9ubHkg Y2hhbmdlIG5lY2Vzc2FyeSB3YXMgdG8gYWRkIHRoZQorZm9sbG93aW5nIGZsYWdzIHRvIHRoZSBt YWtlZmlsZSB0YXJnZXQ6CisKKyAgLURIQVZFX1NUUkVBTVMgLURIQVZFX0dSQU5UUFQgLURIQVZF X1BUU05BTUUKKyAgLURQVVNIX1BURU0gLURQVVNIX0xEVEVSTSAtRFBVU0hfVFRDT01QQVQKKwor bWFrZWZpbGUsIGNrY21haS5jLCAyMSBTZXAgMjAxMC4KKworVGVzdGluZyB0aGlzIGluIFNvbGFy aXMgOSBJIHNlZSB0aGF0IHRoZSBERVMgbGlicmFyeSBkaXNhcHBlYXJlZC4gIEFkZGVkCitjb2Rl IHRvIHRoZSBzb2xhcmlzOSB0YXJnZXRzIChhbHNvIHVzZWQgYnkgU29sYXJpcyAxMCBhbmQgMTEp IHRvIGNoZWNrIGZvcgordGhpcy4gIG1ha2VmaWxlLCAyMSBTZXAgMjAxMC4KKworVGhlIFNvbGFy aXMgdGFyZ2V0IGNoZWNrZWQgdGhlIE9wZW5TU0wgdmVyc2lvbiBhdXRvbWF0aWNhbGx5IHRvIHNl dCB0aGUKK3JpZ2h0IGZsYWcsIHRoZSBMaW51eCB0YXJnZXQgZGlkbid0LiAgUHV0IHRoZSBPcGVu U1NMLXZlcnNpb24gdGVzdGluZyBjb2RlCitpbiB0aGUgTGludXggdGFyZ2V0IHRvby4gIG1ha2Vm aWxlLCAyMSBTZXAgMjAxMC4KKworQSBjb3VwbGUgbWlub3IgY2hhbmdlcyB0byB0aGUgdHJ1NjQt NTFiIG1ha2VmaWxlIHRhcmdldHMgZnJvbSBTdGV2ZW4gU2Nod2VkYQorYnV0IHRoZXJlIHN0aWxs IGFyZSBzb21lIHByb2JsZW1zIHdpdGggdGhlIFRydTY0IFVuaXggYnVpbGRzLgorbWFrZWZpbGUs IDIxIFNlcCAyMDEwLgorCistLS1BbHBoYS4wOS0tLQorCitcZmNvbnRlbnRzKFwmYVszXSkgZ290 IGFuIGVycm9yIGlmIHRoZSBhcnJheSB3YXMgZGVjbGFyZWQgYnV0IGl0cyBkaW1lbnNpb24KK3dh cyBsZXNzIHRoYW4gMywgd2hpY2ggaXMgYmFkIHdoZW4gZGVhbGluZyB3aXRoIChzYXkpIGFuIGFy cmF5IGNyZWF0ZWQKK2R5bmFtaWNhbGx5IGJ5IFxmc3BsaXQoKSwgd2hpY2ggbWlnaHQgb3IgbWln aHQgbm90IGhhdmUgYSB0aGlyZCBlbGVtZW50LgorSW4gY2FzZSBpdCBkb2Vzbid0IC0tIGkuZS4g aW4gY2FzZSB3ZSBhcmUgcmVmZXJyaW5nIHRvIGFuIG91dCBvZiByYW5nZQorZWxlbWVudCBvZiBh bnkgYXJyYXkgdGhhdCBpcyBkZWNsYXJlZCAtLSB3ZSBzaG91bGQganVzdCByZXR1cm4gYSBudWxs CitzdHJpbmcsIGFzIHdlIGRvIHdpdGggb3RoZXIgdHlwZXMgb2YgdmFyaWFibGVzIHRoYXQgYXJl IG5vdCBkZWZpbmVkLgorRm9yIHRoYXQgbWF0dGVyLCBkaXR0byBldmVuIGlmIHRoZSBhcnJheSBp cyBub3QgZGVjbGFyZWQ7IHdoYXQgdXNlZnVsCitwdXJwb3NlIGlzIHNlcnZlZCBieSB0aHJvd2lu ZyBhbiBlcnJvciBpbiB0aGlzIGNhc2U/Citja3V1czQuYywgMzAgRGVjIDIwMTAuCisKK2Nrc3Bs aXQoKSB0cmVhdHMgXCBhcyBhIHF1b3RpbmcgY2hhcmFjdGVyLiAgSWYgdGhlIHNvdXJjZSBzdHJp bmcgY29udGFpbnMKK2JhY2tzbGFzaGVzLCB0aGV5IGFyZSBzd2FsbG93ZWQgKG9yLCBpZiBkb3Vi bGVkLCBvbmUgaXMga2VwdCkuICBUaGF0J3Mgbm90Citnb29kIGZvciBwYXJzaW5nIGV4dGVybmFs IGRhdGEsIHN1Y2ggYXMgbGluZXMgcmVhZCBmcm9tIGZpbGVzLCB3aGVyZSB0aGVyZQorYXJlIG5v IHF1b3RpbmcgcnVsZXMuICBUaGlzIGNhbWUgdXAgd2hlbiBwYXJzaW5nIENTViBmaWxlczsgYXMg YSB3b3JrYXJvdW5kLAorSSBtYWRlIFxmc3BsaXQoKSB0cmVhdCBiYWNrc2xhc2ggYXMgYW4gb3Jk aW5hcnkgY2hhcmFjdGVyIGZvciBDU1YgYW5kIFRTVgorc3BsaXR0aW5nIChhIGJldHRlciBzb2x1 dGlvbiBtaWdodCBiZSB5ZXQgYW5vdGhlciBhcmd1bWVudCB0aGF0IHNwZWNpZmllcworYSBxdW90 ZSBjaGFyYWN0ZXIpLiAgY2tjbGliLmMsIDMwIERlYyAyMDEwLgorCitCZWdhbiBjb252ZXJ0aW5n IEMtS2VybWl0IHRvIE9wZW4gU291cmNlIHdpdGggdGhlIFNpbXBsaWZpZWQgMy1DbGF1c2UgQlNE CitsaWNlbnNlLiAgVXBkYXRlZCB0aGUgdGV4dCBmb3IgdGhlIElOVFJPLCBMSUNFTlNFLCBORVdT LCBhbmQgU1VQUE9SVAorY29tbWFuZHMuICBGaXhlZCB0aGluZ3Mgc28gdGhlIGNvcHlyaWdodCB5 ZWFyIHRvIGJlIGRpc3BsYXllZCBpcyBkZWZpbmVkIGluCitvbmUgcGxhY2UgKGNrX2NyeWVhciBp biBja2NtYWkuYyksIHJhdGhlciB0aGFuIGhhcmR3aXJlZCBpbnRvIHRleHQgc3RyaW5ncworYWxs IG92ZXIgdGhlIHBsYWNlLiAgQ09QWUlORy5UWFQsIGNrY21haS5jLCBja3V1c1syNTZdLmMsIDIg SnVuIDIwMTEuCisKK1doZW4gSSBhZGRlZCBNSU1FIHN5bm9ueW1zIGZvciBLZXJtaXQgY2hhcmFj dGVyLXNldCBuYW1lcywgSSBsZWZ0IGEgYm9ndXMKK2VudHJ5IGluIHRoZSB0YWJsZXMgKCJ3aW5k b3dzLTEyNTEiKSB0aGF0IHdhcyBpbiB0aGUgd3JvbmcgcGxhY2UKK2FscGhhYmV0aWNhbGx5LCB0 aHVzIHByZXZlbnRpbmcgbW9zdCByZWZlcmVuY2VzIHRvIGZpbGUgY2hhcmFjdGVyLXNldCBuYW1l cworZnJvbSB3b3JraW5nIHJpZ2h0LiAgUmVtb3ZlZCB0aGUgYm9ndXMgZW50cnkuICBja3V4bGEu YywgMiBKdW4gMjAxMS4KKworTW9zdCBjb21iaW5hdGlvbnMgd29yayBPSywgYnV0IG5vdCB0cmFu c2xhdGluZyBDeXJpbGxpYyB0ZXh0IGZyb20gVVRGLTgKK3RvIExhdGluL0N5cmlsbGljLCBhbmQg cHJvYmFibHkgdGhlIHNhbWUgd291bGQgYmUgdHJ1ZSBmb3IgYW55IGNhc2Ugb2YKK2NvbnZlcnRp bmcgZnJvbSBVVEYtOCBvciBVQ1MtMiB0byBhbnl0aGluZyBlbHNlLiAgVGhlIHByb2JsZW0gd2Fz IGluCit4Z25ieXRlKCksIHdoaWNoIGNvbnZlcnRzIHRoZSBpbnB1dCBzdHJlYW0gZnJvbSB0aGUg c3BlY2lmaWVkIGNoYXJhY3RlciB0bworVUNTMjsgaXQgbmVlZGVkIHRvIG1ha2UgYSBzcGVjaWFs IGNhc2UgZm9yIHdoZW4gdGhlIGlucHV0IGZpbGUgd2FzIGFscmVhZHkKK1VuaWNvZGUuICBCZWxp ZXZlIGl0IG9yIG5vdCwgdGhpcyBwcm9ibGVtIG9jY3VycmVkIGF0IGxlYXN0IGFzIGZhciBiYWNr IGFzCis4LjAuMjAxICg5LjUgeWVhcnMgYWdvKSBhbmQgbm9ib2R5IG5vdGljZWQuICBTbyBpZiB0 aGUgZml4IGlzbid0IHBlcmZlY3QKK3Byb2JhYmx5IG5vYm9keSB3aWxsIG5vdGljZSB0aGF0IGVp dGhlci4gIGNrY2Zucy5jLCAzIEp1biAyMDExLgorCitUaGUgU0VUIEJMT0NLIENIRUNLIGNvbW1h bmQgZGlkIG5vdCBwYXJzZSBhbGwgdGhlIGl0ZW1zIGluIGl0cyBrZXl3b3JkCitsaXN0LiAgRml4 ZWQgaW4gY2t1dXMzLmMsIDMgSnVuIDIwMTEuCisKK0ZvciBFTS1BUEVYIG9jZWFuIGZsb2F0cyBw cm9qZWN0LCB3aGVyZSBidW95cyBpbiBzdG9ybXkgd2F0ZXJzIGhhdmUgdG8KK3RyYW5zbWl0IGRh dGEgdGhyb3VnaCBhbiBlYXJ0aCBzYXRlbGxpdGUgdXNpbmcgbm9uLWVycm9yLWNvcnJlY3Rpbmcg bW9kZW1zLAorSm9obiBEdW5sYXAgcmFuIGV4aGF1c3RpdmUgc3RyZXNzIHRlc3RzIG9mIEtlcm1p dCBwcm90b2NvbCB0cmFuc2ZlcnMgdGhyb3VnaAorYSBzaW11bGF0ZWQgY29ubmVjdGlvbiB0aGF0 IGluamVjdGVkIGVycm9ycyBhbmQgZGVsYXlzIGFuZCBpZGVudGlmaWVkIGEKK3dlYWtuZXNzIGlu IEtlcm1pdCBwcm90b2NvbCB3aGVuIGl0IGlzIHVzZWQgdW5kZXIgZXh0cmVtZWx5IGJhZCBjb25k aXRpb25zOgorSWYgYSBkYXRhIGJ5dGUgb2YgdGhlIFMgcGFja2V0IChvciBpdHMgQWNrKSBpcyBj b3JydXB0ZWQgYW5kIHRoZSAxLWJ5dGUKK2NoZWNrc3VtIGlzIGFsc28gY29ycnVwdGVkIGluIHN1 Y2ggYSB3YXkgdGhhdCB0aGF0IHRoZSBjaGVja3N1bSBtYXRjaGVzIHRoZQorY29ycnVwdGVkIGRh dGEsIHRoZSB0d28gS2VybWl0IHByb2dyYW1zIHdpbGwgZGlzYWdyZWUgYXMgdG8gdGhlIG5lZ290 aWF0ZWQKK3BhcmFtZXRlcnMuICBGb3IgZXhhbXBsZSwgaWYgZmlsZSBTZW5kZXIncyBSUFQgZmll bGQgaXMgY2hhbmdlZCBmcm9tICd+JyB0bworJ14nLCB0aGUgcmVjZWl2ZXIgd2lsbCBkZWNvZGUg dGhlIHBhY2tldCBpbmNvcnJlY3RseS4gIERpdHRvIGZvciBtb3N0IG9mIHRoZQorb3RoZXIgcGFy YW1ldGVycy4gIFRoZSByZXN1bHQgaXMgdGhhdCBhIGNvcnJ1cHRlZCBmaWxlIGlzIHJlY2VpdmVk IGJ1dAorcmVwb3J0ZWQgY29ycmVjdC4gIEpvaG4gc3VnZ2VzdGVkIGEgbmV3IG1vZGUgb2Ygb3Bl cmF0aW9uIGluIHdoaWNoIHRoZSBUeXBlCiszIGJsb2NrIGNoZWNrIGlzIHVzZWQgZm9yIGFsbCBw YWNrZXRzLiAgU3VjaCBhIG1vZGUgY2FuIG5vdCBiZSBuZWdvdGlhdGVkCitiZWNhdXNlIHRoZSBu ZWdvdGlhdGlvbiBwYWNrZXQgaXRzZWxmIGlzIGFzc3VtZWQgYnkgYWxsIEtlcm1pdCBwcm9ncmFt cyB0bworaGF2ZSBhIDEtYnl0ZSBjaGVja3N1bS4gIEFkZGVkIFNFVCBCTE9DSy1DSEVDSyA1IHRv IHRoZSBwYXJzZXIgKHdpdGgKK2ludmlzaWJsZSBzeW5vbnltIEZPUkNFLTMiLiAgY2t1dXMzLmMs IDMgSnVuIDIwMTEuCisKK0FkZGVkIHN1cHBvcnRpbmcgY29kZSBmb3IgU0VUIEJMT0NLIDU6IGNr Y2ZuWzIzXS5jLCBja2Nwcm8udywgY2tjbWFpLmMsCitja3V1czMuYywgMyBKdW4gMjAxMS4KKwor QWRkZWQgY29kZSB0byBza2lwIHRoZSBoZXVyaXN0aWMgdGhhdCBTIGFuZCBJIHBhY2tldHMgYWx3 YXlzIGhhdmUgYmxvY2sKK2NoZWNrIHR5cGUgMS4gIEZpbGUgdHJhbnNmZXIgT0sgYmV0d2VlbiB0 d28gQy1LZXJtaXRzIHdpdGggU0VUIEJMT0NLIDUuCitycGFjaygpOiBja2NmbjIuYywgNSBKdW4g MjAxMS4KKworTWFkZSB0aGUgZmlsZSByZWNlaXZlciBwdXQgIjUiIGluIHRoZSBibG9jay1jaGVj ay10eXBlIGluIGl0cyBBQ0sgdG8gdGhlCitTLVBhY2tldC4gIHNwYXIoKTogY2tjZm5zLmMsIDUg SnVuIDIwMTEuCisKK05vdyB0aGUgcXVlc3Rpb24gaXM6IENhbiB3ZSBtYWtlIHRoZSBmaWxlIHJl Y2VpdmVyIGF1dG9tYXRpY2FsbHkgYW5kIHNhZmVseQorcmVjb2duaXplIGEgdGhyZWUtYnl0ZSBi bG9jayBjaGVjayBvbiBhbiBpbmNvbWluZyBTIG9yIEkgcGFja2V0PyAgSXQncwordHJpY2t5IGJl Y2F1c2UgdGhlIGJsb2NrIGNoZWNrIGZpZWxkIGlzIG5vdCBzZWxmLWlkZW50aWZpZWQsIGl0J3Mg anVzdCB0aGUKK2xhc3QgIm4iIGNoYXJhY3RlcnMgb2Ygc3RyaW5nIGluZGljYXRlZCBieSB0aGUg bGVuZ3RoIGZpZWxkLCBzbyBjb3JyZWN0CitkZWNvZGluZyBvZiB0aGUgcGFja2V0IGRlcGVuZHMg b24gc3RhdGVmdWwga25vd2xlZGdlIG9mICJuIi4gIEhvdyBhYm91dCB0aGlzOgorcnBhY2soKSBh bHJlYWR5IGtub3dzIHdoYXQgdHlwZSBvZiBwYWNrZXQgaXQgaXMsIHNvIGlmIGl0J3MgYW4gUyBv ciBJIHBhY2tldAorYW5kIHRoZSA4dGggYnl0ZSBvZiB0aGUgZGF0YSBmaWVsZCBpcyAiNSIgYW5k IGxhc3QgMyBieXRlcywgd2hlbiBpbnRlcnByZXRlZAorYXMgdGhlIENSQywgbWF0Y2ggdGhlIHBh Y2tldCBjb250ZW50cywgdGhlbiB3ZSBhY2NlcHQgdGhlIHBhY2tldCBhbmQgc3dpdGNoCit0byBC TE9DSyA1IG1vZGUuICAKKworT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSAiNSIgd2FzIHB1dCB0 aGVyZSBieSBjb3JydXB0aW9uLCB0aGUgQ1JDIHNob3VsZAorY2F0Y2ggdGhlIGVycm9yLiAgSW4g dGhhdCBjYXNlIHdlIE5BSyB0aGUgcGFja2V0IGFuZCBwcmVzdW1hYmx5IGdldCBhCitkaWZmZXJl bnQgdmVyc2lvbiBiYWNrLiAgVGhlcmUgd291bGQgYmUgbm8gcmVhc29uIHRvIHRyeSB0byByZS1y ZWFkIHRoZSBzYW1lCitwYWNrZXQgd2l0aCBhIGRpZmZlcmVudCBibG9jayBjaGVjaywgYmVjYXVz ZSB0aGUgIjUiIGNvdWxkIG5vdCBwb3NzaWJseSBiZQordGhlcmUgbGVnaXRpbWF0ZWx5IHVubGVz cyBpdCBoYWQgYSAzLWJ5dGUgQ1JDLiAgVG8gYmUgY2xlYXIsIHRoaXMgaXMKK2NoZWF0aW5nLiAg V2UgcmVhZCB0aGUgcGFja2V0IGNvbnRlbnRzIGJlZm9yZSB3ZSBrbm93IHRoZSBwYWNrZXQgaXMg Y29ycmVjdCwKK3RoZW4gd2UgY2hlY2sgdGhhdCBpdCAqaXMqIGNvcnJlY3QuICBJIG1hZGUgdGhl IDQtbGluZSBjaGFuZ2UgdG8gcnBhY2soKQorYW5kIGl0IHdvcmtzIE9LIGluIHRoZSBhYnNlbmNl IG9mIHRyYW5zbWlzc2lvbiBlcnJvcnMuICBja2NmbjIuYywgMyBKdW4gMjAxMS4KKworU28gdGhl IHZhcmlvdXMgY29tYmluYXRpb25zIHNob3VsZCB3b3JrIGFzIGRlc2lyZWQ6CisKKyAuIFNlbmRl ciBhbmQgcmVjZWl2ZXIgYm90aCBzdXBwb3J0IGFuZCBhcmUgdG9sZCB0byBTRVQgQkxPQ0sgNSAo IlNCNSIpLgorIC4gU2VuZGVyIFNCNSwgYnV0IHJlY2VpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBpdCAo ZXJyb3JzIG91dCkuCisgLiBTZW5kZXIgU0I1LCByZWNlaXZlciBzdXBwb3J0cyBpdCBidXQgd2Fz bid0IHRvbGQgKGF1dG8tcmVjb2duaXplcyBpdCkuCisgLiBSZWNlaXZlciBTQjUgYnV0IHNlbmRl ciBubyAoZXJyb3JzIG91dCkuCisKK05vdGUgaW4gdGhlIGxhc3QgY2FzZSwgdGhlIHJlY2VpdmVy IHNob3VsZCBOT1QgYXV0b21hdGljYWxseSBmYWxsIGJhY2sgdG8KK3N0YW5kYXJkIGJlaGF2aW9y IGJlY2F1c2UgaWYgdGhlIHVzZXIgc2FpZCBTRVQgQkxPQ0sgNSB0aGF0IG1lYW5zIGV2ZXJ5Citw YWNrZXQgTVVTVCBiZSBwcm90ZWN0ZWQgYnkgQ1JDIHRvIHByZXZlbnQgdGhlIEkvUyBwYWNrZXRz IGZyb20gYmVpbmcKK2NvcnJ1cHRlZC4KKworSW5zdGFsbGVkIG5ldyBIRUxQIFNFVCBCTE9DSy1D SEVDSyB0ZXh0LiAgY2t1dXMyLmMsIDUgSnVuIDIwMTEuCisKK0F1dG9kb3dubG9hZCBkaWRuJ3Qg d29yayB3aGVuIHRoZSBTIG9yIEkgcGFja2V0IGhhZCBhIDMtYnl0ZSBibG9jayBjaGVjaworYmVj YXVzZSBrc3RhcnQoKSBjaGVja2VkIGl0IGZvciBhIDEtYnl0ZSBjaGVja3N1bS4gIEZpeGVkIGlu IGtzdGFydCgpLAorY2tjZm4yLmMsIDYgSnVuIDIwMTEuICBIb3dldmVyLCBvbGRlciBLZXJtaXQg dmVyc2lvbnMgYW5kIHByb2dyYW1zIHRoYXQKK2NsYWltIHRvIGRvICJhdXRvZG93bmxvYWQiIHdp bGwgbmV2ZXIgcmVjb2duaXplIHRoaXMgdHlwZSBvZiBwYWNrZXQuICBObworYmlnIGRlYWwgc2lu Y2UgZXZlbiBpZiB0aGV5IGRpZCwgdGhlIHRyYW5zZmVyIHdvdWxkIGZhaWwgYW55d2F5LgorCitB ZGRlZCAnRk9SQ0UgMycgdG8gRS1LZXJtaXQsIGNhbGxlZCBpdCBFSyAxLjcuICBUaGUgb3B0aW9u IGlzICItYiA1Ii4gIFdvcmtzCitPSyBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nLCBib3RoIHdp dGggYW5kIHdpdGhvdXQgdGhlIG5ldyBvcHRpb24uICBBbHNvCit3b3JrcyB3aXRoICItYiA1IiBp ZiB5b3Ugc2VuZCBhbiBTIHBhY2tldCB0byBpdCB3aXRoICc1JyBpbiB0aGUgQkNUIGZpZWxkLgor Q2hhbmdlcyB3ZXJlIG1pbmltYWwsIEkgaGF2ZSB0aGVtIGFsbCBpbiBlazE3LmRpZmYuCisKK0kg Y291bGQgcHJvYmFibHkgYWxzbyBtYWtlIGEgbmV3IEctS2VybWl0IGluIGFib3V0IDEwIG1pbnV0 ZXMsIGJ1dCB3aG8gY2FyZXMKK2Fib3V0IEctS2VybWl0Li4uICBXZSBhbHJlYWR5IGhhdmUgdHdv IHVzZWZ1bCBLZXJtaXQgcHJvZ3JhbXMgdGhhdAoraW50ZXJvcGVyYXRlIHdpdGggdGhlIG5ldyBw cm90b2NvbC4gIDYgSnVuIDIwMTEuCisKK1JlcGxhY2VkIHRoZSB2ZXJ5IGluYWRlcXVhdGUgaGVs cCB0ZXh0cyBmb3IgZnVuY3Rpb25zIFxmd29yZCgpIGFuZAorXGZzcGxpdCgpIHdpdGggbmV3IG9u ZXMuICBja3V1czIuYywgNiBKdW4gMjAxMS4KKworVGhlcmUgd2VyZSBhIGNvdXBsZSByZXBvcnRz IG9mIGZpbGUgY29ycnVwdGlvbiB0aGF0IEkgd2FzIHNhdmluZyBmb3IgbGF0ZXIuCitOb3cgdGhh dCBub3cgaXMgbGF0ZXIgSSBkdWcgdXAgdGhlIG1lc3NhZ2VzLCBmaWxlcywgYW5kIGxvZ3MgYW5k IGl0IHR1cm5zCitvdXQgdGhhdCBub2JvZHkgaGFkIHJlcG9ydGVkIGEgcmVwcm9kdWNpYmxlIGNh c2Ugb2YgS2VybWl0IGNvcnJ1cHRpbmcgYQorZmlsZS4gIFRoZXJlIGhhdmUgYmVlbiBub24tcmVw cm9kdWNpYmxlIGNhc2VzIHRob3VnaCwgYWxtb3N0IGNlcnRhaW5seSBkdWUKK3RvIGNvcnJ1cHRp b24gb2YgdGhlIFMgb3IgSSBwYWNrZXQgb3IgaXRzIEFDSywgd2hpY2ggaXMgd2h5IHdlIG5vdyBo YXZlIFNFVAorQkxPQ0sgNS4gIEV2ZW4gd2l0aCBCTE9DSyBDSEVDSyA1LCB0aGVyZSBpcyBubyBn dWFyYW50ZWUgdGhhdCB0aGUgc2FtZSB0aGluZword29uJ3QgaGFwcGVuLCBpdCBpcyBqdXN0IGZh ciBsZXNzIGxpa2VseS4gIEV2ZW4gaWYgd2UgYWRkZWQgYSAzMi1iaXQgQ1JDIG9yCitldmVuIDY0 LWJpdCBvbmUsIHRoZXJlIHdvdWxkIHN0aWxsIGJlIGEgc21hbGwgY2hhbmNlIGl0IGNvdWxkIGhh cHBlbi4KKworNyBKdW4gMjAxMToKKworQ29ycmVjdGVkIHZhcmlvdXMgI2lmZGVmcyAob3IgbGFj ayBvZiB0aGVtKSB3aGVuIGJ1aWxkaW5nIEMtS2VybWl0IHdpdGgKK2RpZmZlcmVudCBjb21iaW5h dGlvbnMgb2YgZmVhdHVyZS1zZWxlY3Rpb24gb3B0aW9ucyBzdWNoIGFzIE5PQ1NFVFMsIE5PSUNQ LAorTk9MT0NBTCwgTk9TUEwsIE5PVU5JQ09ERSwgZXRjLiAgY2tjZm5zLmMgY2tjbWFpLmMgY2tj eGxhLmggY2t1dXMyLmMKK2NrdXVzNC5jIGNrdXVzNS5jIGNrdXVzNi5jIGNrdXVzci5jLCA3IEp1 biAyMDExLiAgQWZ0ZXIgcnVubmluZyB0aGUgc2NyaXB0Cit0aGF0IGRvZXMgYWxsIHRoZXNlIGJ1 aWxkcyAoODQgb2YgdGhlbSkgSSByYW4gaXQgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQKK25vbmUg b2YgdGhlIGNoYW5nZXMgYnJva2UgYnVpbGRzIHRoYXQgc3VjY2VlZGVkIGJlZm9yZSB0aGUgY2hh bmdlcyB3ZXJlIG1hZGUuCisKK0J1aWx0IE9LIG9uIFNvbGFyaXM5ICgibWFrZSBzb2xhcmlzOSIp CitEaXR0byB3aXRoIEtyYjUgYW5kIE9wZW5TU0wgMC45LjhxICAoIm1ha2Ugc29sYXJpczlnK29w ZW5zc2wrc2hhZG93K3BhbSt6bGliIikKKworQnVpbHQgT0sgb24gTWFjIE9TIFggMTAuNC4xMSAo Im1ha2UgbWFjb3N4IikuCitBbHNvICJtYWtlIG1hY29zeCtrcmI1K29wZW5zc2wuCisKK0J1aWx0 IE9LIG9uIExpbnV4IFJIRUw0ICgibWFrZSBsaW51eCIpLgorQnVpbHQgT0sgb24gTGludXggUkhF TDQgd2l0aCBPcGVuU1NMIDAuOS43YSAoIm1ha2UgbGludXgrc3NsIikuCitCdWlsdCBPSyBvbiBM aW51eCBSSEVMNSAoIm1ha2UgbGludXgiKS4KKworIm1ha2UgbGludXgrc3NsIiBmYWlscyBvbiBS SEVMNSBiZWNhdXNlIG9mIERFUywgZXZlbiB0aG91Z2ggdGhlIHRhcmdldAordGVzdHMgZm9yIHRo ZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoZSBERVMgbGlicmFyaWVzLiAgSW4gdGhpcyBjYXNl IHRoZQorbGlicmFyaWVzIGFyZSB0aGVyZSBidXQgdGhleSBsYWNrIHRoZSBmdW5jdGlvbnMgZGVz X2VjYjNfZW5jcnlwdCwKK2Rlc19yYW5kb21fc2VlZCwgYW5kIGRlc19zZXRfb2RkX3Bhcml0eS4g IFRoZSBidWlsZCBzdWNjZWVkcyBhczoKKworICBtYWtlIGxpbnV4K3NzbCBLRkxBR1M9LVVDS19T U0wKKworU2luY2UgREVTIGlzIG5vdyBjb25zaWRlcmVkIGhhcm1mdWwsIEplZmYgQWx0bWFuIHN1 Z2dlc3RzIHRoYXQgYWxsIE9wZW5TU0wKK2J1aWxkcywgZXZlbiBmb3Igb2xkIHZlcnNpb25zLCBz aG91bGQgb21pdCBpdCAoIklmIHlvdSBhcmUgYnVpbGRpbmcgd2l0aAorb3BlbnNzbCBhbmQgbm8g a2VyYmVyb3Mgb3Igc3JwLCBqdXN0IGRpc2FibGUgREVTLiAgRGlzYWJsaW5nIERFUyB3aWxsIGlt cGFjdAordGVsbmV0IGFuZCBybG9naW4gYnV0IGl0IHdvbid0IG1hdHRlciBpZiB5b3UgaGF2ZSBu byBhYmlsaXR5IHRvIG5lZ290aWF0ZSBhCitzZXNzaW9uIGtleSIpLgorCitGcm9tIElhbiBCZWNr d2l0aCwgcGF0Y2hlcyBmb3IgRGViaWFuIExpbnV4OgorIC4gQ2hhbmdlIGFsbCAnLScgdG8gJ1wo aHknIGluIG1hbiBwYWdlIChuZXcgcGVkYW50cnkpOiBja3VrZXIubnIuCisgLiBNYWtlIElLU0Qg YXV0aGVudGljYXRpb24gKHVzaW5nIFBBTSkgYXNrIGZvciBhIHBhc3N3b3JkIHdoZW4gYW4gaW52 YWxpZAorICAgdXNlcm5hbWUgaGFzIGJlZW4gZ2l2ZW4sIHRvIGF2b2lkIGRpc2Nsb3Npbmcgd2hp Y2ggYWNjb3VudCBuYW1lcyBhcmUgdmFsaWQ6CisgICBja3VmaW8uYywgY2t1dXM3LmMuCisgLiBG aXggc3BlbGxpbmcgZXJyb3JzOiBja2NmdHAuYywgY2t1dXMyLmMsIGNrdWtlci5uciwgY2tjcHJv LncsIGNrdXVzci5oLgorIC4gUGF0Y2ggbWFrZWZpbGUgdG8gc3VwcG9ydCBpbnN0YWxsIHRvIGEg c3RhZ2luZyBhcmVhIHdpdGggREVTVERJUi4KKyAuIFNvbWUgb3RoZXIgcGF0Y2hlcyAobWFpbmx5 IGZvciB0eXBvcykgd2VyZSBmb3IgcGxhaW4tdGV4dCBkb2N1bWVudGF0aW9uCisgICBmaWxlcyB0 aGF0IHdlcmUgZ2VuZXJhdGVkIGZyb20gV2ViIHBhZ2VzOyBJIHVwZGF0ZWQgdGhlIHdlYiBwYWdl cy4KKworQSBiaWcgY29ycG9yYXRlIEMtS2VybWl0IHVzZXIgaGFzIGFuIGFwcGxpY2F0aW9uIHdo ZXJlIGEgbG9jYWwgQy1LZXJtaXQKK21ha2VzIGEgY29ubmVjdGlvbiB0byBhIHJlbW90ZSBvbmUs IHVwbG9hZHMgc29tZSBmaWxlcywgYW5kIHRoZW4gaWYgdGhlCitzZXJ2ZXIgaGFzIGFueSBuZXcg cGF0Y2ggZmlsZXMgZm9yIHRoZSBsb2NhbCwgaXQgc2VuZHMgdGhlIHBhdGNoZXMgYW5kCitkb2Vz IGEgUkVNT1RFIEhPU1QgY29tbWFuZCB0byBydW4gdGhlIHBhdGNoIHByb2dyYW0uICBUaGlzIHN0 b3BwZWQgd29ya2luZworaW4gQy1LZXJtaXQgNi4wIG9yIDcuMCB3aGVuIEkgcHV0IGEgY2hlY2sg dG8gcHJldmVudCBpdCwgYmVjYXVzZSAiaXQgbWFrZXMKK25vIHNlbnNlIHRvIHNlbmQgUkVNT1RF IGNvbW1hbmRzIHRvIHRoZSBsb2NhbCBlbmQsIGJlY2F1c2UgdGhlIHJlc3VsdHMgYXJlCitzZW50 IGJhY2sgdG8gdGhlIHJlbW90ZSB0byBiZSBkaXNwbGF5ZWQgb24gaXRzIHNjcmVlbiBidXQgaXQg aGFzIG5vIHNjcmVlbiIuCitUaGF0IG1heSBiZSB0cnVlLCBidXQgaWYgdGhlIHVzZXIgbmVlZHMg dG8gY29udHJvbCB0aGUgbG9jYWwgZnJvbSB0aGUKK3JlbW90ZSwgdGhleSBzaG91bGQgYmUgYWJs ZSB0by4gIEkgcmVtb3ZlZCB0aGUgY2hlY2tzLiAgVGhpcyBkb2Vzbid0IHNvbHZlCit0aGUgcHJv YmxlbSBvZiB3aGVyZSB0aGUgb3V0cHV0IGdvZXM7IGlkZWFsbHkgaXQgd291bGQgZ28gdG8gdGhl IGxvY2FsCitzY3JlZW4gYnV0IEkgZG9uJ3Qgc2VlIGFueSBlbGVnYW50IGFuZCBzaW1wbGUgd2F5 IHRvIG1ha2UgdGhhdCBjaGFuZ2UuCitIb3dldmVyIHRoZSBvdXRwdXQgcmVkaXJlY3RvcnMgY2Fu IHN0aWxsIGJlIHVzZWQgd2l0aCB0aGUgUkVNT1RFIGNvbW1hbmQKK3NvIHRoZSByZXN1bHRzIGNh biBiZSBjYXB0dXJlZCB0byBhIHJlbW90ZSBmaWxlLCB3aGljaCBjb3VsZCB0aGVuIGJlIHNlbnQu Citja3V1czcuYywgNyBKdW4gMjAxMS4KKworQ2hhbmdlZCBTRVQgVkFSSUFCTEUtRVZBTFVBVElP TiB0byBTRVQgQ09NTUFORCBWQVJJQUJMRS1FVkFMVUFUSU9OLCBidXQgbGVmdAordGhlIGZvcm1l ciB2ZXJzaW9uIGF2YWlsYWJsZS4gIGNrdXVzci5jLCA5IEp1biAyMDExLgorCitEb2N1bWVudGVk IHRoZSBTRVQgQ09NTUFORCBWQVJJQUJMRS1FVkFMVUFUSU9OIGNvbW1hbmQsIHdoaWNoIEkgYWRk ZWQgaW4KKzIwMDguICBjazkwLmh0bWwsIDkgSnVuIDIwMTEuCisKK1JlbmFtZWQgYWxsIG9sZCBN YWMgT1MgWCBtYWtlZmlsZSB0YXJnZXRzIHRvIGhhdmUgdGhlIHByZWZpeCAib2xkIiB0byBhdm9p ZAorY29uZnVzaW5nIHRoZW0gd2l0aCB0aGUgY3VycmVudCB0YXJnZXRzLCBhbmQgbWFkZSBtYWNv c3gxMCBhIHN5bm9ueW0gZm9yCittYWNvc3gsIHNvIHRob3NlIHdobyB1c2VkIHByZXZpb3VzIG1h a2VmaWxlcyB3aWxsIGdldCBhIGN1cnJlbnQgdGFyZ2V0Cit3aXRob3V0IGhhdmluZyB0byBrbm93 IHRoZSBuZXcgbmFtZS4gIG1ha2VmaWxlLCA5IEp1biAyMDExLgorCitBZGRlZCBYTUVTU0FHRSwg d2hpY2ggaXMgdG8gTUVTU0FHRSBhcyBYRUNITyBpcyBFQ0hPOiBwcmludHMgdGhlIHRleHQKK3dp dGhvdXQgYSBsaW5lIHRlcm1pbmF0b3IsIHNvIGl0IGNhbiBiZSBjb250aW51ZWQgYnkgc3Vic2Vx dWVudCBbWF1NRVNTQUdFCitjb21tYW5kcy4gIGNrdXVzci5bY2hdLCA5IEp1biAyMDExLgorCitC YWNrIHRvICJtYWtlIGxpbnV4K3NzbCIgb24gUkhFTDUuLi4gIEkgdG9vayB0aGUgY293YXJkJ3Mg d2F5IG91dCBhbmQgYWRkZWQKK2NvZGUgdG8gdGhlIG1ha2VmaWxlIHRhcmdldCB0byBjaGVjayB3 aGV0aGVyIHRoZSBidWlsZCB3b3JrZWQgKHNvbWVib2R5IGxldAorbWUga25vdyBpZiB0aGVyZSBp cyBhIGJldHRlciB3YXkgdG8gY2hlY2spLCBhbmQgaWYgbm90IHRvIGdpdmUgYSBtZXNzYWdlCitz dWdnZXN0aW5nIHRoZXkgIm1ha2UgY2xlYW4gOyBtYWtlIGxpbnV4K3NzbCBLRkxBR1M9LVVDS19E RVMiLiAgbWFrZWZpbGUsCis5IEp1biAyMDExLgorCitOb3RpY2VkIHRoYXQgXGZyZWN1cnNlKCkg d291bGQgZHVtcCBjb3JlIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4KK0ZpeGVkIGluIGNr dXVzNC5jLCA5IEp1biAyMDExLgorCitBZGRlZCBccSgpIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRo ZSBtb3JlIHZlcmJvc2UgXGZsaXRlcmFsKCkgZm9yIHF1b3RpbmcKK3N0cmluZ3MgdGhhdCBjb250 YWluIGNoYXJhY3RlcnMgKGxpa2UgXCkgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgc2lnbmlmaWNh bnQKK3RvIEtlcm1pdC4gIEl0J3MgbW9yZSBlZmZpY2llbnQgYmVjYXVzZSBpdCBpc24ndCBhIGZ1 bmN0aW9uIGNhbGwsIGFuZCAncScKK2lzIGFuIGludHVpdGl2ZSBsZXR0ZXIgdG8gbWVhbiAncXVv dGUnLiAgSXQgYWxzbyB3b3JrcyBiZXR0ZXIgdGhhbgorXGZsaXRlcmFsKCkgYmVjYXVzZSBmdW5j dGlvbnMgdHJlYXQgY29tbWFzIGFuZCBicmFjZXMgc3BlY2lhbGx5LiAgY2t1dXM0LmMsCisxMCBK dW4gMjAxMS4KKworQnVpbHQgT0sgb24gVk1TIDguMyBvbiBBbHBoYSwgbm8gbmV0LiAgREVDIEMg Y2F1Z2h0IGEgY291cGxlIGdsaXRjaGVzIGluIHRoZQorbmV3IGNvZGUgdGhhdCBnY2MgZGlkbid0 IGNhdGNoLCB3aGljaCBJIGZpeGVkLiAgY2t1dXNbMjVdLmMsIDEwIEp1biAyMDExLgorCitCdWls dCBPSyBvbiBWTVMgOC4zIG9uIEFscGhhIHdpdGggTXVsdGluZXQgNS4zLiAgVGhlIFNTTCBidWls ZCBmYWlsZWQgYnV0CitJJ20gbm90IGdvaW5nIHRvIHdvcnJ5IGFib3V0IGl0LiAgMTAgSnVuIDIw MTEuCisKK0J1aWx0IE9LIG9uIE5ldEJTRCA1LjEuICAxMCBKdW4gMjAxMS4KKworVHJpZWQgdG8g cmVzdXJyZWN0IG15IG9sZCAiYnVpbGQtYWxsIiBtYWNoaW5lLCBhbiBJQk0gTmV0ZmluaXR5IDM1 MDAgZnJvbQorMTk5NyB3aXRoIDIwLXNvbWUgbW91bnRhYmxlIGJvb3RhYmxlIGhhcmQgZGlza3Mg d2l0aCBsb3RzIG9mIDE5OTBzIE9TJ3Mgb24KK3RoZW0uICBObyBkaWNlLiAgSSBjYW4gc2VlIHRo ZSBCSU9TIGJ1dCBub3QgdGhlIGhhcmQgZGlza3MuICBUaGUKK2NvbmZpZ3VyYXRpb24gaXMgc3Rp bGwgY29ycmVjdCBiZWNhdXNlIGl0IHRyaWVzIHRvIGJvb3QgZnJvbSB0aGUgbW91bnRhYmxlCito YXJkIGRpc2ssIGJ1dCBpdCBmYWlscyAoSSB0cmllZCBzaXggZGlmZmVyZW50IG9uZXMpLgorCitU cmllZCB0byByZXN1cnJlY3QgbXkgb2xkIFNpZW1lbnMgTml4ZG9yZiBSTSAyMDAgTUlQUyBtYWNo aW5lLiAgQm9vdGVkIE9LLAoraGVhZGxlc3MgZXZlbiwgYnV0IG1ha2VzIGEgaGVsbGlzaCBoaWdo LXBpdGNoZWQgd2hpbmUsIGxpa2UgYSBkZW50aXN0IGRyaWxsLgorSXQncyBwcmV0dHkgc2xvdyB0 b28uICAibWFrZSBzaW5peDU0MiIgKGZvciBTSU5JWCA1LjQuMikgYm9tYmVkIGF0IGxpbmsKK3Rp bWUgb24gbm8gcmRjaGsoKS4gIEZpeGVkIGJ5ICNpbmNsdWRpbmcgPHN5cy9maWxpby5oPi4gIGNr dXRpby5jLCAxMCBKdW4gMjAxMS4KKworVHJpZWQgdG8gcmVzdXJyZWN0IG15IG9sZCBTQ08gWGVu aXggMi4zLjQgbWFjaGluZSwgYWxzbyBoZWFkbGVzcy4gIEFtYXppbmdseQoraXQgc3RpbGwgd29y a3M7IGl0IGNhbid0IHVzZSBhIG1vbml0b3IgYnV0IEkgY2FuIFRlbG5ldCB0byBpdC4gIEhhZCB0 byB0d2Vhaworc29tZSAjaWZkZWZzIGJ1dCBJIGdvdCBhIG5vLW5ldCB2ZXJzaW9uIGJ1aWx0IHN1 Y2Nlc3NmdWxseS4gIEFjY29yZGluZyB0byBteQorbm90ZXMsIGl0IGhhc24ndCBiZWVuIHBvc3Np YmxlIHRvIGJ1aWxkIHdpdGggVENQL0lQIHNpbmNlIEMtS2VybWl0IDguMCwKK2J1dCBob3cgbWFu eSBwZW9wbGUgZXZlciBoYWQgU0NPIFhlbml4IDIuMy40IHdpdGggVENQL0lQIGFueXdheT8gIEFu eXdheSB3ZQorc3RpbGwgaGF2ZSB0aGUgYmluYXJpZXMgZm9yIEMtS2VybWl0IDcuMC4gIGNrdXVz NC5jLCAxMCBKdW4gMjAxMS4KKworQnVpbHQgT0sgb24gQUlYIDUuMy4gIEJ1aWx0IE9LIG9uIFNv bGFyaXMgMTAuICAxMSBKdW4gMjAxMS4KKworVHJpZWQgaGFyZGVyIHRvIHJldml2ZSB0aGUgYnVp bGQtYWxsIG1hY2hpbmUsIG5vdyBpdCBzb3J0IG9mIHdvcmtzLCBidXQgbm90CithbGwgb2YgdGhl IGJvb3RhYmxlIE9TJ3Mgd29yay4gIEJ1aWx0IEMtS2VybWl0IDkuMCBPSyBvbiBPcGVuQlNEIDMu MC4gIEJ1aWx0CitPSyBvbiBRTlggNC4yNSBidXQgaGFkIHRvICNpZmRlZiByZWZlcmVuY2VzIHRv IElYQU5ZIGluIGNrdXRpby5jIGFuZCBja3VwdHkuCitCdWlsdCBPSyBvbiBOZXRCU0QgMS41LjEg KDIwMDApLiAgVHJpZWQgIm1ha2UgbmV0YnNkK3NzbCIgb24gdGhpcyBvbmUsIGl0J3MKK09wZW5T U0wgMC45LjVhIDEgQXByIDIwMDAsIGJ1dCBpdCBib21icyBvdXQgaW4gY2t1YXRoLmMsIG5vIGJp ZyBkZWFsLgorQW5vdGhlciBwcm9ibGVtIGluIE5ldEJTRCAxLjUuMiBpcyB0aGF0IGV2ZW4gdGhv dWdoIG9mZl90IGlzIDgsIENLX09GRl9UCitpcyA0LiAgV29ydGggbm90aW5nIGJ1dCBub3Qgd29y dGggZml4aW5nIHVubGVzcyBzb21lb25lIGVsc2Ugbm90aWNlcy4KKzEzIEp1biAyMDExLgorCitT dVNFIDcuMC4uLiBib290cyBPSyBidXQgdGVsbmV0IHNlcnZlciBkb2Vzbid0IHdvcmsuICBDYW4g dGVsbmV0IG91dCBidXQKK2l0J3MgdG9vIGZsYWt5LCBjb25uZWN0aW9uIGRyb3BzIGlmIEkgdHJ5 IHRvIHRyYW5zZmVyIGEgZmlsZS4KKworT3BlbkJTRCAyLjUgWzE5OTldIE9LLiAgUmVkIEhhdCA3 LjEgT0suICBSZWQgSGF0IDcuMSB3aXRoIE9wZW5TU0wgMC45LjYKK25vdCBPSywgc2FtZSBlcnJv ciBhcyB3aXRoIDAuOS41YToKKworY2t1YXRoLmMKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSBja19z c2wuaDo0OCwKKyAgICAgICAgICAgICAgICAgZnJvbSBja3VhdGguYzoyMjU6CisvdXNyL2luY2x1 ZGUvb3BlbnNzbC9kZXMuaDo3Nzogd2FybmluZzogcmVkZWZpbml0aW9uIG9mIGBCbG9jaycKK2Nr dWF0Mi5oOjg2OiB3YXJuaW5nOiBgQmxvY2snIHByZXZpb3VzbHkgZGVjbGFyZWQgaGVyZQorL3Vz ci9pbmNsdWRlL29wZW5zc2wvZGVzLmg6ODM6IHJlZGVmaW5pdGlvbiBvZiBgc3RydWN0IGRlc19r c19zdHJ1Y3QnCisvdXNyL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo5MTogd2FybmluZzogcmVkZWZp bml0aW9uIG9mIGBTY2hlZHVsZScKK2NrdWF0Mi5oOjkwOiB3YXJuaW5nOiBgU2NoZWR1bGUnIHBy ZXZpb3VzbHkgZGVjbGFyZWQgaGVyZQorCitTbyBpdCBhcHBlYXJzIHRoYXQgT3BlblNTTCBzdXBw b3J0IGlzIGJyb2tlbiBmb3IgcHJlLTAuOS43LiAgVHJpZWQKK2J1aWxkaW5nIGl0IGFnYWluIHdp dGggLVVDS19TU0wgKHNpbmNlIHRoZSBlcnJvcnMgYXJlIG9yaWdpbmF0aW5nIGZyb20KK2Zyb20g ZGVzLmgpLi4uICBCdXQgaXQgc3RpbGwgZmFpbGVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5LiAgSSBm b3VuZAorI2luY2x1ZGVzIGZvciBkZXMuaCBpbiBja3VhdGguYyBhbmQgYW5kIGNrX3NzbC5oIGFu ZCAjaWZkZWYnZCB0aGVtIG91dCwKK2J1dCBpdCBzdGlsbCBmYWlsczoKKworSW4gZmlsZSBpbmNs dWRlZCBmcm9tIC91c3IvaW5jbHVkZS9vcGVuc3NsL2V2cC5oOjg5LAorICAgICAgICAgICAgICAg ICBmcm9tIC91c3IvaW5jbHVkZS9vcGVuc3NsL3g1MDkuaDo2NywKKyAgICAgICAgICAgICAgICAg ZnJvbSAvdXNyL2luY2x1ZGUvb3BlbnNzbC9zc2wuaDo2OSwKKyAgICAgICAgICAgICAgICAgZnJv bSBja19zc2wuaDo1MSwKKyAgICAgICAgICAgICAgICAgZnJvbSBja3VhdGguYzoyMjc6CisvdXNy L2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo3Nzogd2FybmluZzogcmVkZWZpbml0aW9uIG9mIGBCbG9j aycKK2NrdWF0Mi5oOjg2OiB3YXJuaW5nOiBgQmxvY2snIHByZXZpb3VzbHkgZGVjbGFyZWQgaGVy ZQorL3Vzci9pbmNsdWRlL29wZW5zc2wvZGVzLmg6ODM6IHJlZGVmaW5pdGlvbiBvZiBgc3RydWN0 IGRlc19rc19zdHJ1Y3QnCisvdXNyL2luY2x1ZGUvb3BlbnNzbC9kZXMuaDo5MTogd2FybmluZzog cmVkZWZpbml0aW9uIG9mIGBTY2hlZHVsZScKK2NrdWF0Mi5oOjkwOiB3YXJuaW5nOiBgU2NoZWR1 bGUnIHByZXZpb3VzbHkgZGVjbGFyZWQgaGVyZQorCitCdWlsdCBPSyBvbiBEZWJpYW4gMi4xLiAg MTMgSnVuIDIwMTEuCisKK09uIEZyZWVCU0QgNC40LCBpdCBibG93cyB1cCB3aXRoOgorY2t1Zmlv LmM6IEluIGZ1bmN0aW9uIHZwYXNzJzoKK2NrdWZpby5jOjgyMDE6IGNvbmZsaWN0aW5nIHR5cGVz IGZvciAnaW5pdGdyb3VwcycKKy91c3IvaW5jbHVkZS91bmlzdGQuaDoxNTQ6IHByZXZpb3VzIGRl Y2xhcmF0aW9uIG9mICdpbml0Z3JvdXBzJworY2t1ZmlvLmM6ODIwMTogd2FybmluZzogZXh0ZXJu IGRlY2xhcmF0aW9uIG9mICdpbml0Z3JvdXBzJyBkb2Vzbid0IG1hdGNoIGdsb2JhbAorb25lLiAg Rml4ZWQgYnkgZGVmaW5pbmcgTk9EQ0xJTklUR1JPVVBTIGZvciBGcmVlQlNEIGluIGNrdWZpby5j LiBJdCBtaWdodCBub3QgCitiZSB0aGUgcmlnaHQgZml4LCBidXQgSSBkb24ndCBoYXZlIGEgbG90 IG9mIG90aGVyIEZyZWVCU0QgdmVyc2lvbnMgdG8KK2NvbXBhcmUgd2l0aC4gIEFueXdheSBub3cg aXQgYnVpbGRzIE9LIG9uIDQuNCwgYW5kIGFsc28gb24gRnJlZUJTRCAzLjMuCitja3VmaW8uYywg MTMgSnVuIDIwMTEuCisKK1RyaWVkIHRvIGJ1aWxkIG9uIFNDTyBPcGVuIFNlcnZlciA1LjAuNyBi dXQgaXQgZmFpbHMgYXQgbGluayB0aW1lIGJlY2F1c2UKK2l0IGNhbid0IGZpbmQgcmRjaGsoKS4g IEJ1dCBpdCdzIHN1cHBvc2VkIHRvIGJlIHRoZXJlISAgQ29tZSBiYWNrIHRvIHRoaXMKK2xhdGVy Li4uCisKK1JlZCBIYXQgNi4xICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIGxpbnV4ICAgICAg ICAgIDIzMzI1NDUKK1JlZCBIYXQgNy4xICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIGxpbnV4 ICAgICAgICAgIDIzNjg1MjgKK1JlZCBIYXQgRUw0ICAgICAgICAgICAgIGkzODYgICAzMi83NCAg IGxpbnV4ICAgICAgICAgIDIzNjMwNjcKK1JlZCBIYXQgRUw1LjYgICAgICAgICAgIGkzODYgICAg NjQgICAgIGxpbnV4ICAgICAgICAgIDIzNzEyNzkKK1NvbGFyaXM5ICAgICAgICAgICAgICAgIHNw YXJjICAzMi82NCAgIHNvbGFyaXM5ICAgICAgIDI4NDk4OTYKK1NvbGFyaXM5K3NzbCAgICAgICAg ICAgIHNwYXJjICAzMi82NCAgIHNvbGFyaXM5ICAgICAgIDUwMjE3NjQKK1NvbGFyaXMxMCAgICAg ICAgICAgICAgIHNwYXJjICAzMi82NCAgIHNvbGFyaXMxMCAgICAgIDI4NTU3NzYKK1FOWCAgICAg ICAgICAgICAgICAgICAgIGkzODYgICAgMzIgICAgIHFueDMyICAgICAgICAgIDIwMTIzMjMgCitO ZXRCU0QgMS41LjEgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBuZXRic2QgICAgICAgICAyMTk4 MDU1CitOZXRCU0QgNS4xICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBuZXRic2QgICAgICAg ICAyMTU5ODYzCitPcGVuQlNEIDIuNSAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBvcGVuYnNk ICAgICAgICAyMjM2MDM2CitNYWMgT1MgWCAxMC42LjcgICAgICAgICB4ODZfNjQgIDY0ICAgICBt YWNvc3ggICAgICAgICAyLjdNCitNYWMgT1MgWCAxMC40LjExICAgICAgICBwcGMgICAgMzIvNjQg ICBtYWNvc3ggICAgICAgICAyNDk2MzA0CitEZWJpYW4gMi4xICAgICAgICAgICAgICBpMzg2ICAg MzIvNjQgICBsaW51eCAgICAgICAgICAyMjEzMjIxCitGcmVlQlNEIDQuNCAgICAgICAgICAgICBp Mzg2ICAgMzIvNjQgICBmcmVlYnNkICAgICAgICAyMjkxMzMzCitGcmVlQlNEIDMuMyAgICAgICAg ICAgICBpMzg2ICAgMzIvNjQgICBmcmVlYnNkICAgICAgICAyMTQ3MzcwCitTSU5JWCA1LjQyICAg ICAgICAgICAgICBtaXBzICAgIDMyICAgICBzaW5peDU0MiAgICAgICAzMzE5MzI1ICgxOTk1KQor U0NPIFVuaXh3YXJlIDIuMS4zICAgICAgaTM4NiAgICAzMiAgICAgdXcyMTMgICAgICAgICAgMjI0 MjE3NgorU0NPIE9TUjYuMC4wICAgICAgICAgICAgaTM4NiAgIDMyLzY0ICAgc2NvX29zcjYwMCAg ICAgMjM2ODMwMAorCitNb3JlIGJ1aWxkcywgMTQgSnVuZSAyMDExOgorCitWTVMgNi4yICAgICAg ICAgICAgICAgICBhbHBoYSAgIDMyICAgICBtYWtlIG1uICAgICAgICAyNTU2OTI4IE5vIFRDUC9J UAorVk1TIDYuMiAgICAgICAgICAgICAgICAgYWxwaGEgICAzMiAgICAgbWFrZSBtICAgICAgICAg MzExMjk2MCBVQ1ggNC4wCitTb2xhcmlzIDExICAgICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBz b2xhcmlzMTEgICAgICAyODIzODYwCitTb2xhcmlzIDExICAgICAgICAgICAgICBpMzg2ICAgMzIv NjQgICBzb2xhcmlzMTErc3NsICAyOTkzNjYwIE9wZW5TU0wgMC45LjhsCitOZXRCU0QgNS4xICAg ICAgICAgICAgICBpMzg2ICAgMzIvNjQgICBuZXRic2Qra3JiNSAgICAyMzA3ODU1IEtlcmJlcm9z IDUKK0xpbnV4IFNsYWNrd2FyZSAxMi4xLjAgIGkzODYgICAzMi82NSAgIGxpbnV4ICAgICAgICAg IDIxNzU3NTQKK0xpbnV4IEZlZG9yYSAxNCAgICAgICAgIGkzODYgICAzMi82NCAgIGxpbnV4ICAg ICAgICAgIDIyNTY1MTQKK0xpbnV4IEZlZG9yYSAxNCAgICAgICAgIGkzODYgICAzMi82NCAgIGxp bnV4K3NzbCAgICAgIC4uLi4uLi4gT3BlblNTTCAxLjAuMGQKK0xpbnV4IEZlZG9yYSAxNCAgICAg ICAgIGkzODYgICAzMi82NCAgIGxpbnV4K2tyYiAgICAgIDI0NDk2MTQgKCopCisKKygqKSBtYWtl IGxpbnV4K2tyYjUgIkxJQlM9JExJQlMgL2xpYi9saWJrNWNyeXB0by5zby4zIC9saWIvbGliY29t X2Vyci5zby4yIgorCitOb3RpY2VkIHRoYXQgbmV0YnNkK3NzbCBidWlsZCBvbiBOZXRCU0QgNS4x IHNhaWQgIk5ldEJTRCAxLjUiIGluIGl0cyBiYW5uZXIuCitGaXhlZCBieSByZXBsYWNpbmcgdGhl IG9sZCBoYXJkd2lyZWQgdGFyZ2V0IHdpdGggdGhlIG5ldyAic3Vicm91dGluaXplZCIKK3Rhcmdl dCBhJ2xhIGxpbnV4K3NzbCBhbmQgYWRhcHRpbmcgaXQgdG8gTmV0QlNELiAgbWFrZWZpbGUsIDE1 IEp1biAyMDExLgorCitTYW1lIGRlYWwgZm9yIEtlcmJlcm9zIDUsIG1ha2UgYSBuZXcgbmV0YnNk K2tyYjUgdGFyZ2V0IGFuZCBpdCBidWlsZHMgb2ssCithdCBsZWFzdCBvbmNlIG9uZSBmaWd1cmVz IG91dCB3aGVyZSB0aGUgS2VyYmVyb3MgaGVhZGVycyBhbmQgbGlicyBhcmUuCittYWtlZmlsZSwg MTUgSnVuIDIwMTEuCisKK1NhbWUgZGVhbCBmb3IgdGhlIG5ldGJzZG5jIHRhcmdldCwgbm93IGl0 IHNpbXBseSBkZWZpbmVkIE5PQ1VSU0VTIGFuZAorY2hhaW5zIHRvIHRoZSBtYWluIG5ldGJzZCB0 YXJnZXQuICBtYWtlZmlsZSwgMTUgSnVuIDIwMTEuCisKK1RyaWVkIHRvIGJ1aWxkIHdpdGggS2Vy YmVyb3MgNSBvbiBTb2xhcmlzLCBmYWlscyBiZWNhdXNlIHRoZSBERVMgbGlicmFyeQorbm8gbG9u Z2VyIGV4aXN0cy4gIFRoaXMgb25lIGlzIGJleW9uZCBtZSwgc29ycnkuCisKK01hZGUgbmV3IHRh cmdldHMgZm9yIE1pckJTRCwgbWlyYnNkIGFuZCBtaXJic2Qrc3NsLCBtYWtlZmlsZSAxNSBKdW4g MjAxMS4KKworSW4gT3BlblNVU0UgMTEuMiB3aXRoIE9wZW5TU0wgMC45LjhyIHdlIGJvbWIgb24g dW5kZWZpbmVkIHJlZmVyZW5jZXMgZnJvbQordmFyaW91cyBERVMgbGlicmFyeSByb3V0aW5lcy4g IEJ1aWxkcyBPSyB3aXRob3V0IERFUy4KKworVmFyaW91cyBsaW51eCtrcmI1IGJ1aWxkcyBmYWls IGJlY2F1c2UgY2FuJ3QgZmluZCAtbGdzc2FwaV9rcmI1CisKK1NTTCBidWlsZHMgd2l0aCBPcGVu U1NMIDwgMC45LjcgZmFpbCBldmVuIHRob3VnaCB0aGVyZSBpcyBjb2RlIHRvIHN1cHBvcnQKK3Ro ZSBvbGRlciBTU0wuCisKK0ZpeGVkIHNvbWUgcHJpbnRmICVsZCB2cyBpbnQgaW5zdGFuY2VzIGlu IHRoZSBzaXplb2ZzIHNlY3Rpb24gb2YgU0hPVyBGRUFUVVJFUy4KK2NrdXVzNS5jLCAxNSBKdW4g MjAxMS4KKworRml4ZWQgdGhlIG5ldyBsaW51eCtzc2wgdGFyZ2V0IHRvIGFjdHVhbGx5IHVzZSB0 aGUgU1NMSU5DIGFuZCBTU0xMSUJTCitkZWZpbml0aW9ucywgb29wcy4gIG1ha2VmaWxlLCAxNSBK dW4gMjAxMS4KKworMTUgSnVuZSAyMDExIGJ1aWxkcyAoQmV0YS4wMSk6CisKK0FJWCA1LjMgICAg ICAgICAgICAgICAgIHBwYyAgICAzMi82NCAgIGFpeCtzc2wgICAgICAgIDMyODM4NDYgT3BlblNT TCAwLjkuOG0KK05ldEJTRCA1LjEgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG5ldGJzZCAg ICAgICAgIDIxNTk4NjMKK05ldEJTRCA1LjEgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG5l dGJzZCtzc2wgICAgIDIzNTAyNzQgT3BlblNTTCAwLjkuOS1kZXYKK05ldEJTRCA1LjEgICAgICAg ICAgICAgIGkzODYgICAzMi82NCAgIG5ldGJzZCtrcmI1ICAgIDIzNDk2MjcgTUlUIEtyYjUgMS42 LjMKK0ZyZWVCU0QgOC4yICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIGZyZWVic2QgICAgICAg IDIyOTg0MTQKK0ZyZWVCU0QgOC4yICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIGZyZWVic2Qr c3NsICAgIDI0NDg5NjEgT3BlblNTTCAwLjkuOHEKK09wZW5CU0QgNC43ICAgICAgICAgICAgIGkz ODYgICAzMi82NCAgIG9wZW5ic2QgICAgICAgIDIyNjYxMzIKK09wZW5CU0QgNC43ICAgICAgICAg ICAgIGkzODYgICAzMi82NCAgIG9wZW5ic2Qrc3NsICAgIDI0MDkyNjMgT3BlblNTTCAwLjkuOGsK K01pckJTRCAxMCAgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG1pcmJzZCAgICAgICAgIDIy MTY2MDEKK01pckJTRCAxMCAgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIG1pcmJzZCtzc2wg ICAgIDIzNTgzMTggT3BlblNTTCAwLjkuOHIKK09wZW5TdXNlIDExLjIgICAgICAgICAgIHg4Nl82 NCAgNjQgICAgIGxpbnV4ICAgICAgICAgIDIzNDg0NjgKK09wZW5TdXNlIDExLjIgICAgICAgICAg IHg4Nl82NCAgNjQgICAgIGxpbnV4K3NzbCAoKikgIDI1NDY1NDAgT3BlblNTTCAwLjkuOHIKK1JI RUwgNS42ICAgICAgICAgICAgICAgIGlhNjQgICAgNjQgICAgIGxpbnV4ICAgICAgICAgIDQzOTA2 ODcKK1JIRUwgNS42ICAgICAgICAgICAgICAgIGlhNjQgICAgNjQgICAgIGxpbnV4K3NzbCAoKikg IDQ3NzUwMDcgT3BlblNTTCAwLjkuOGUKK1VidW50dSA5LjEwICAgICAgICAgICAgIGkzODYgICAz Mi82NCAgIGxpbnV4ICAgICAgICAgIDIyNzU1MjMKK1VidW50dSA5LjEwICAgICAgICAgICAgIGkz ODYgICAzMi82NCAgIGxpbnV4K3NzbCAgICAgIDI0NjY3MDggT3BlblNTTCAwLjkuOHIKK0dlbnRv byAxLjEyLjEzICAgICAgICAgIHBwYyAgICAzMi82NCAgIGxpbnV4ICAgICAgICAgIDIzODY1OTcK K0dlbnRvbyAxLjEyLjEzICAgICAgICAgIHBwYzY0ICAgNjQgICAgIGxpbnV4ICAgICAgICAgIDI3 NDkwMTUKK0dlbnRvbyAxLjEyLjEzICAgICAgICAgIHBwYzY0ICAgNjQgICAgIGxpbnV4K3NzbCAg ICAgIDMwMDIxNTAgT3BlblNTTCAwLjkuOHIKK0dlbnRvbyAxLjEyLjEzICAgICAgICAgIHNwYXJj ICAzMi82NCAgIGxpbnV4ICAgICAgICAgIDI0NzgzODIKK0dlbnRvbyAxLjEyLjEzICAgICAgICAg IHNwYXJjICAzMi82NCAgIGxpbnV4K3NzbCAgICAgIDI2OTA0OTkgT3BlblNTTCAwLjkuOHIKK1Nv bGFyaXMgOSAgICAgICAgICAgICAgIHNwYXJjICAzMi82NCAgIHNvbGFyaXM5ICAgICAgIDI4NDk4 OTYKK1NvbGFyaXMgMTAgICAgICAgICAgICAgIGkzODYgICAzMi82NCAgIHNvbGFyaXMxMCAgICAg IDI4Mzc2MjAKK0lSSVggNi41ICAgICAgICAgICAgICAgIFIxMDAwMCAzMi82NCAgIGlyaXg2NSAg ICAgICAgIDI4Njk3MDQKKworKiBhbmQgS0ZMQUdTPS1VQ0tfREVTCisKK1RyaWVkIGJ1aWxkaW5n IG9uIE5ldEJTRCA1LjEgd2l0aCBIZWltZGFsIEtlcmJlcm9zIHVzaW5nOgorCittYWtlIG5ldGJz ZCtrcmI1IFwKKyAiS0ZMQUdTPS1ESEVJTURBTCIgXAorICJLNUlOQz0tSS91c3IvaW5jbHVkZSIg XAorICJLNUxJQj0tTC91c3IvbGliIgorCitJdCBmb3VuZCBhbGwgaXRzIGhlYWRlcnMgT0ssIGJ1 dCBpdCBibGV3IHVwIGluIGNrdWF0aC5jLiAgU21hbGwgd29uZGVyLAorY2tjY2ZnLmh0bWwgc2F5 czoKKworSEVJTURBTAorICAgIFNob3VsZCBiZSBkZWZpbmVkIGlmIEtlcmJlcm9zIFYgc3VwcG9y dCBpcyBwcm92aWRlZCBieSBIRUlNREFMLiBTdXBwb3J0CisgICAgZm9yIHRoaXMgb3B0aW9uIGlz IG5vdCBjb21wbGV0ZSBpbiBDLUtlcm1pdCA4LjAuIEFueW9uZSBpbnRlcmVzdGVkIGluCisgICAg d29ya2luZyBvbiB0aGlzIHNob3VsZCBjb250YWN0IGtlcm1pdC1zdXBwb3J0LiAKKworJ2tyYjUt Y29uZmlnIC0tdmVyc2lvbicgZ2l2ZXMgdGhlIE1JVCBLZXJiZXJvcyA1IHZlcnNpb24gbnVtYmVy LgorCitNYWtlIGEgbmV3IG5ldGJzZCtrcmI1K3NzbCB0YXJnZXQgYmFzZWQgb24gdGhlIGNvbWJp bmF0aW9uIG9mIHRoZSBuZXcKK25ldGJzZCtzc2wgYW5kIG5ldGJzZCtrcmI1IHRhcmdldHMuICBU aGVyZSB3ZXJlIGxvdHMgb2Ygd2FybmluZ3MgaW4gdGhlCitjb21waWxhdGlvbiBidXQgbm8gZXJy b3JzLCBidXQgaXQgcHJvZHVjZWQgYW4gZXhlY3V0YWJsZSB0aGF0IHN0YXJ0cyBhbmQKK2RvZXMg bm9ybWFsIHRoaW5ncyBidXQgSSBoYXZlIG5vIGlkZWEgaWYgdGhlIFNTTCBvciBLZXJiZXJvcyBm dW5jdGlvbnMgd29yay4KK21ha2VmaWxlLCAxNiBKdW4gMjAxMS4KKworQ2hhbmdlZCB0aGUgY3Ut c29sYXJpczkta3JiNSB0YXJnZXQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIERFUyBiZWNh dXNlCitERVMgaXNuJ3QgdGhlcmUsIHRvIHNlZSBpZiB0aGlzIHdvdWxkIGFsbG93IGEgS2VyYmVy b3MgYnVpbGQgdG8gcHJvY2VlZC4KK0FuZCBpdCB3b3JrZWQsIGFtYXppbmcuICBBdCBsZWFzdCB0 aGUgYnVpbGQgY29tcGxldGVkLCBJIGhhdmUgbm8gd2F5IHRvIHRlc3QKK3RoZSBLZXJiZXJvcyBw YXJ0LiAgbWFrZWZpbGUsIDE2IEp1biAyMDExLgorCitVcGRhdGVkIHRoZSBzb2xhcmlzOStzc2wg dGFyZ2V0IHRvIGRvIHRoZSBERVMgdGVzdGluZy4gIG1ha2VmaWxlLCAxNiBKdW4gMjAxMS4KKwor VXBkYXRlZCBjdS1zb2xhcmlzK2tyYjUgdGFyZ2V0IHRvIHRlc3Qgd2hldGhlciB0aGUgR1NTQVBJ IGxpYnJhcnkgaXMgY2FsbGVkCitsaWJnYXNzYXBpIG9yIGxpYmdhc3NhcGlfa3JiNS4gIG1ha2Vm aWxlLCAxNiBKdW4gMjAxMS4KKworQWRkZWQgbG90cyBvZiB0ZXN0cyB0byB0aGUgTGludXggS2Vy YmVyb3MgNSBlbnRyaWVzLCBsaW51eCtrcmI1IGFuZAorbGludXgra3JiNStzc2wsIGJlY2F1c2Ug c29tZSBoYXZlIGxpYms1Y3J5cHRvIGFuZCBzb21lIGRvbid0OyBzb21lIGhhdmUKK2xpYmNvbV9l cnIgYW5kIHNvbWUgZG9uJ3Q7IGFuZCBzb21lIGhhdmUgbGliZ3NzYXBpX2tyYjUgKGUuZy4gUkhF TDUsCitPcGVuU3VzZSAxMS4yKSB3aGVyZWFzIG90aGVycyBoYXZlIGxpYmdzc2FwaSAoR2VudG9v KS4KKworMTYgSnVuZSAyMDExIGJ1aWxkcyAoQmV0YS4wMSk6CisKK05ldEJTRCA1LjEgaTM4NiAg IDMyLzY0ICBuZXRic2Qra3JiNStzc2wgICAyNDUxNzU3IE9wZW5TU0wgMC45LjkgTUlUIEtyYjUg MS42LjMKK1NvbGFyaXMgOSAgc3BhcmMgIDMyLzY0ICBzb2xhcmlzOStrcmI1ICAgICAyNTQzMDM2 IE1JVCBLZXJiZXJvcyA1IDEuNy4xCitTb2xhcmlzIDkgIHNwYXJjICAzMi82NCAgc29sYXJpczkr c3NsICAgICAgNTAyMTU0NCBPcGVuU1NMIDAuOS44cSAoZ2NjKQorR2VudG9vLi4uICBwcGMgICAg MzIvNjQgIGxpbnV4ICAgICAgICAgICAgIDIzODY1OTcKK0dlbnRvby4uLiAgcHBjICAgIDMyLzY0 ICBsaW51eCtzc2wgICAgICAgICAyNTkzNTYxIE9wZW5TU0wgMC45LjhyIAorR2VudG9vLi4uICBw cGM2NCAgIDY0ICAgIGxpbnV4ICAgICAgICAgICAgIDI3NDkwMTUKK0dlbnRvby4uLiAgcHBjNjQg ICA2NCAgICBsaW51eCtzc2wgICAgICAgICAzMDAyMTUwIE9wZW5TU0wgMC45LjhyIAorUkhFTDUg ICAgICB4ODZfNjQgIDY0ICAgIGxpbnV4K2tyYjUgKCopICAgIDI1NjM4NzggTUlUIEtlcmJlcm9z IDUgMS42LjEKK1JIRUw1ICAgICAgeDg2XzY0ICA2NCAgICBsaW51eCtrcmI1K3NzbCgqKSAyNTYz ODc4IE1JVCBLZXJiZXJvcyA1IDEuNi4xCitGZWRvcmEgMTQgIGkzODYgICAzMi82NCAgbGludXgr a3JiNStzc2wgICAgMjUzOTg5MSBNSVQgS3JiNSArIE9wZW5TU0wgMC45LjhyCisKKyogS0ZMQUdT PS1VQ0tfREVTCisKKy0tLSBDLUtlcm1pdCA5LjAuMjk5IEJldGEuMDEgLS0tCisKK3NpemVvZigp IGNhbiByZXR1cm4gYSBsb25nIG9yIGFuIGludCwgc28gbmVpdGhlciBwcmludGYoIiVkIixzaXpl b2YoYmxhaCkpOworb3IgcHJpbnRmKCIlbGQiLHNpemVvZihibGFoKSk7IGNhbiBiZSB1c2VkIGV2 ZXJ5d2hlcmUuICBDaGFuZ2VkIHRoZQorInNpemVvZnMiIHNlY3Rpb24gb2YgU0hPVyBGRUFUVVJF UyBpbiB0aGUgZHVtYmVzdCAoYW5kIHRoZXJlZm9yZSBtb3N0Citwb3J0YWJsZSkgd2F5IHRvIHNx dWVsY2ggdGhlIHdhcm5pbmdzLiAgY2t1dXM1LmMsIDE3IEp1biAyMDExLgorCitGcm9tIEpvaG4g RHVubGFwOiAiV2F0Y2hpbmcgdGhlIHNlcnZlciBzY3JlZW4gbGVkIG1lIHRvIG9mZmVyIGEgY29z bWV0aWMKK3BhdGNoIGZvciBja3V1c3guYy4gIEkgbm90aWNlZCB0aGF0IHRoZSBzZXJ2ZXIgc2Ny ZWVuIHNhaWQgaXQgd2FzCisiUkVTRU5ESU5HIiB3aGVuIGl0IHJlYWxseSB3YXNuJ3QuICBUaGUg YXR0YWNoZWQgcGF0Y2ggZW1pdHMgYmxhbmtzIHRvCitpbnN1cmUgdGhhdCBvbGQgbGFiZWxzIGFy ZSBjb21wbGV0ZWx5IGVyYXNlZC4iICBja3V1c3guYywgMTcgSnVuIDIwMTEuCisKK05lbHNvbiBC ZWViZSBmb3VuZCB0d28gcGxhY2VzIHdoZXJlIEkgaGFkIFNTTExJQlMgaW4gdGhlIG1ha2VmaWxl IGluc3RlYWQgb2YKK1NTTExJQi4gIG1ha2VmaWxlLCAxOCBKdW4gMjAxMS4KKworTW9yZSBpbXBv cnRhbnQgaGUga25ldyBob3cgdG8gZm9yY2UgZ2NjIHRvIGxvYWQgdGhlIHJpZ2h0IGhlYWRlciBm aWxlcyBmb3IKK09wZW5TU0wgMS4wLjBkIChieSB1c2luZyAnLWlzeXN0ZW0nIHJhdGhlciB0aGFu ICctSScpLiAgUHJldmlvdXNseSBpdCB3YXMKK3VzaW5nIHRoZSAwLjkuOHIgaGVhZGVyIGZpbGVz IGJ1dCBsaW5raW5nIHdpdGggdGhlIDEuMC4wZCBsaWJyYXJpZXMuICBUaGlzCitpcyBub3QgaW4g dGhlIHNvdXJjZXMgb3IgbWFrZWZpbGU7IGl0J3MgZG9uZSB3aGVuIGdpdmluZyB0aGUgJ21ha2Un IGNvbW1hbmQ6CisKKyAgZXhwb3J0IFBBVEg9L3Vzci9iaW46JFBBVEgKKyAgZXhwb3J0IFNTTElO Qz0taXN5c3RlbS91c3IvaW5jbHVkZQorICBleHBvcnQgIlNTTExJQj0tTC91c3IvbGliIC1XbCwt cnBhdGgsL3Vzci9saWIiCisgIG1ha2UgbGludXgrc3NsCisKK0ZvbGRlZCB0aGUgcHJldmlvdXMg bGludXgrb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gYW5kIGxpbnV4K29wZW5zc2wrc2hhZG93Cit0 YXJnZXRzIGludG8gbGludXgrc3NsLiAgQ2hlY2tlZCB0aGUgbGludXhzbyAoc2NyaXB0aW5nIG9u bHkpIHRhcmdldCwgYnVpbGRzCitPSywgNjAwSy4gIE1hZGUgbmV3IHN1YnJvdXRpbml6ZWQgbGlu dXgra3JiNStrcmI0IHRhcmdldCBidXQgY2FuJ3QgZmluZAorYW55cGxhY2UgdG8gdGVzdCBpdC4g ICBNYWRlIG5ldyBzdWJyb3V0aW5pemVkIGxpbnV4K3NoYWRvdytwYW0gdGFyZ2V0LCB3b3Jrcwor ZmluZSBvbiBSSEVMNC4gIFJldmlzZWQgY29tbWVudHMgYW5kIGxpc3RzIGFnYWluLiAgbWFrZWZp bGUsIDE4IEp1biAyMDExLgorCitGb3IgdGhlIHBsdWdnYWJsZS1kaXNrIE9TJ3MgdGhhdCBib290 IE9LIGJ1dCBsYWNrIGEgd29ya2luZyBuZXR3b3JrLCBJCityaWdnZWQgdXAgYSBzZXJpYWwgY29u bmVjdGlvbiB1c2luZyBhIERCOS1GRiBudWxsIG1vZGVtIGNhYmxlLCBhbmQgdGhlbiBhCitEQjkt TUYgbW9kZW0gY2FibGUgdG8gbWFrZSBpdCByZWFjaC4gIEkgZG9uJ3Qgc2VlIGFueSBtb2RlbSBz aWduYWxzIG9uCitlaXRoZXIgZW5kLCBidXQgdGhlIGRhdGEgZ29lcyB0aHJvdWdoIE9LLiAgQ09N MSBvbiB0aGUgZGVza3RvcCBQQywKKy9kZXYvdHR5UzEgb3Igd2hhdGV2ZXIgb24gTGFiLiAgU2lu Y2UgdGhlcmUgYXJlIG5vIG1vZGVtIHNpZ25hbHMsIGNhbid0IHVzZQorUlRTL0NUUy4gIEF0IDU3 NjAwYnBzIHdpdGggWG9uL1hvZmYsIDUwMC1ieXRlIHBhY2tldHMgYW5kIHNsaWRpbmcgd2luZG93 cywKK3RyYW5zZmVycyB3b3JrIE9LIGF0IGFib3V0IDUwMDBjcHMgdXNpbmcgNSB3aW5kb3cgc2xv dHM7IHRha2VzIDggbWludXRlcyB0bwordHJhbnNmZXIgdGhlIGd6aXBwZWQgQy1LZXJtaXQgdGFy YmFsbC4gIEtlcm1pdCB0byB0aGUgcmVzY3VlLiAgMTkgSnVuIDIwMTEuCisKK1RyYW5zZmVycmVk IHRoZSB0YXJiYWxsIG92ZXIgc2VyaWFsIHBvcnRzIHRvIFNDTyBPU1I1LjAuNSBhdCAzOC40S2Jw cywgdGhlCitoaWdoZXN0IHNwZWVkIHN1cHBvcnRlZCwgMTIgbWludXRlcywgbm8gZXJyb3JzLCAz MzAwY3BzLiAgVW5wYWNrLCBtYWtlCitzY28zMnY1MDV1ZGssIE9LLiAgQWxzbyBidWlsdCB0aGUg VENQL0lQIHZlcnNpb24gYW5kIGl0IGFsbW9zdCBtYWRlIGFuCitvdXRib3VuZCBjb25uZWN0aW9u LCBidXQgb25seSBvbmNlIChub3QgYSBLZXJtaXQgcHJvYmxlbSBidXQgc29tZXRoaW5nIHdpdGgK K3RoZSBUQ1AvSVAgc3RhY2spLiAgMTkgSnVuIDIwMTEuCisKK0RpdHRvIGZvciBTb2xhcmlzIDIu Ni9pMzg2LCBleGNlcHQgNTcuNkticHMsIDRLLWJ5dGUgcGFja2V0cywgbm8gcHJvYmxlbS4KK1Nv bGFyaXMgOC9pMzg2LCBkaXR0by4gIDE5IEp1biAyMDExLgorCitTQ08gT3BlblNlcnZlciA1LjAu NSAgaTM4NiAgIDMyICAgc2NvMzJ2NTA1dWRrICAgICAxOTQwOTY0ICBObyBUQ1AvSVAKK1NDTyBP cGVuU2VydmVyIDUuMC41ICBpMzg2ICAgMzIgICBzY28zMnY1MDV1ZGtuZXQgIDIzMTQ2NjggIFdp dGggVENQL0lQCitTdW4gU29sYXJpcyAyLjYgICAgICAgaTM4NiAgIDMyICAgc29sYXJpczI2ZyAg ICAgICA0NjYxMzY4CitTdW4gU29sYXJpcyA4ICAgICAgICAgaTM4NiAgIDMyICAgc29sYXJpczhn ICAgICAgICA0Njc1NDMyCisKK1doZW4gdXNpbmcgY29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24s IFxzKHh4WzRdKSByZXR1cm5zIHRoZSB3aG9sZSBzdHJpbmcKK3h4IHN0YXJ0aW5nIGF0IHBvc2l0 aW9uIDQsIGJ1dCBccyh4eFs0Ol0pIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLiAgRml4ZWQKK3Ro ZSBsYXR0ZXIgdG8gYmUgbGlrZSB0aGUgZm9ybWVyLiAgY2t1dXM1LmMsIDIwIEp1biAyMDEwLgor CitSZWFsbHkgaXQgd291bGQgaGF2ZSBiZWVuIG5pY2VyIGlmIFxzKHh4WzRdKSByZXR1cm5lZCBh IHNpbmdsZSBjaGFyYWN0ZXIsCit0aGUgNHRoIGNoYXJhY3RlciBvZiB4eCwgYnV0IGl0J3MgdG9v IGxhdGUgbm93LiAgQWRkZWQgYW5vdGhlciAic2VwYXJhdG9yIgorY2hhcmFjdGVyICcuJyAocGVy aW9kKSBmb3IgdGhhdDogXHMoeHhbNC5dKSBpcyB0aGUgNHRoIGNoYXJhY3RlciBvZiB4eC4KK2Nr dXVzNC5jLCAyMCBKdW4gMjAxMC4KKworQmFjayB0byBTQ08gT1NSNS4wLjcuLi4gVGhpcyBmYWls ZWQgYmVmb3JlIGJlY2F1c2UgJ3JkY2hrJyBjYW1lIHVwIHVua25vd24KK2F0IGxpbmsgdGltZSwg dW5saWtlIGFsbCBwcmV2aW91cyBPU1I1J3MsIHRoYXQgdXNlZCByZGNoaygpIGluIHBsYWNlIG9m IHRoZQorRklPTlJFQUQgaW9jdGwuICBBZGRlZCAjaWZkZWZzIHRvIG1ha2UgYSBzcGVjaWFsIGNh c2UgZm9yIDUuMC43LiAgSSdtIG5vdAorc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHdheSwgYnV0IHRo aXMgaXMgdGhlIG1pbmltYWwgY2hhbmdlIHRvIGdldCBpdCB0byB3b3JrLgorSWYgYW55Ym9keSBj YXJlcywgbWF5YmUgdGhlIHNhbWUgY2FuIGJlIGRvbmUgZm9yIHByZXZpb3VzIE9TUjUgcmVsZWFz ZXMuCitja3V0aW8uYywgMjAgSnVuIDIwMTAgKHNlYXJjaCBmb3IgU0NPX09TUjUwNykuCisKK1ND TyBPcGVuU2VydmVyIDUuMC43ICBpMzg2ICAgMzIgICBzY28zMnY1MDcgICAgICAgIDE4OTU3MjQg IE5vIFRDUC9JUAorU0NPIE9wZW5TZXJ2ZXIgNS4wLjcgIGkzODYgICAzMiAgIHNjbzMydjUwN25l dCAgICAgMjI0Njc5MiAgV2l0aCBUQ1AvSVAKKworQ2hlY2tlZCBjdXJyZW50IGNvZGUgb24gUkhF TDQsIGZvdW5kIHRoYXQgbXkgR1NTQVBJLWxpYiBmaW5kaW5nIG1ha2VmaWxlCit0YXJnZXQgZGlk bid0IGxvb2sgaW4gZW5vdWdoIHBsYWNlczsgYWRkZWQgc29tZSBtb3JlLiAgbWFrZWZpbGUsIDIx IEp1biAyMDExLgorCitHb3QgcmVwb3J0cyBiYWNrIG9uIEhQVVggZnJvbSBQZXRlciBFaWNoaG9y biwgYWxtb3N0IGFsbCBnb29kIG9uIEhQLVVYIDcsIDgsCis5LCAxMCwgYW5kIDExLiAgMjEtMjIg SnVuIDIwMTEuCisKK0dvdCBhY2Nlc3MgdG8gRGViaWFuIDUuMCBhbmQgNy10by1iZSAoIldoZWV6 eS9TaWQiKS4gIFJlZ3VsYXIgJ21ha2UgbGludXgnIGlzCitPSyBpbiBEZWJpYW4gNSwgYnV0IGlu IDcgY2FuJ3QgZmluZCBjcnlwdCwgcmVzX3NlYXJjaCwgb3IgZG5fZXhwYW5kOyBoYWQKK3RvIGFk ZCBtb3JlIGxpYnJhcnkgc2VhcmNoIGNsYXVzZXMgdG8gJ21ha2UgbGludXgnLiAgbWFrZWZpbGUs IDIxIEp1biAyMDExLgorCitJbiBEZWJpYW4gNy4wLCBsaWJrNWNyeXB0byBjb3VsZCBub3QgYmUg Zm91bmQgd2l0aG91dCBhZGRpbmcgYW5vdGhlciBjbGF1c2UKK3RvICdtYWtlIGxpbnV4K2tyYjUn LiAgVGhhdCBkb25lLCB0aGUgU1NMIGJ1aWxkICgxLjAuMGQpIHdhcyBPSywgYXMgd2VsbCBhcwor dGhlIGtyYjUrc3NsIG9uZS4gIG1ha2VmaWxlLCAyMSBKdW4gMjAxMS4KKworSSBmb3VuZCBhIExp bnV4IGJveCB0aGF0IGhhZCBib3RoIEtlcmJlcm9zIDQgYW5kIDUgaW5zdGFsbGVkIGFuZCB0cmll ZCAnbWFrZQorbGludXgra3JiNStrcmI0Jywgd2hpY2ggZmFpbGVkIGJlY2F1c2Ugb2YgbWlzc2lu ZyBERVMgZnVuY3Rpb25zLiAgVHJpZWQKKydtYWtlIGxpbnV4K2tyYjUra3JiNCBLRkxBR1M9LVVD S19ERVMnLCBidXQgdGhhdCBmYWlscyB0b28sIGV2ZW4gdGhvdWdoIGl0Citkb2Vzbid0IGZhaWwg Zm9yIEtlcmJlcm9zIDUgYWxvbmUsIHNvIHByb2JhYmx5IHNvbWUgS3JiNCBjb2RlIGlzIG1ha2lu ZwordW5ndWFyZGVkIGNhbGxzIHRvIHRoZSBERVMgcm91dGluZXMuICBXaGF0IGlzIHJlYWxseSBu ZWVkZWQgaXMgYSB3YXkgdG8KK2NvbXBsZXRlbHkgc3RyaXAgYWxsIERFUyByZWZlcmVuY2VzIGZy b20gYW55IGdpdmVuIGJ1aWxkLCBjb2RlIGFuZCBtYWtlZmlsZSwKK2EgYmlnIGRlYWwuICAyMSBK dW4gMjAxMS4KKworRml4ZWQgc29tZSB0eXBvcyBpbiBDT1BZSU5HLlRYVCAobm90aWNlZCBieSBJ YW4gQmVja3dpdGgpLiAgMjQgSnVuIDIwMTEuCisKK0dvdCBhY2Nlc3MgdG8gcGVyaGFwcyB0aGUg bGFzdCBsaXZpbmcgNC4zQlNEIFZBWCBzeXN0ZW0uICBJdCBkb2Vzbid0IGhhdmUKK1NFRUtfQ1VS IHNvIEkgaGFkIHRvICNpZmRlZiBvdXQgdGhlIFxmcGljdHVyZSgpIGZ1bmN0aW9uLiAgQXNpZGUg ZnJvbSB0aGF0LAorbm8gcHJvYmxlbXMuICBja3V1czQuYywgMjQgSnVuIDIwMTEuCisKK0kgaGFk IGJlZW4gd2FudGluZyB0aGUgUy1FeHByZXNzaW9uIChST1VORCB4KSB0byBhbGxvdyBhIHNlY29u ZCBhcmd1bWVudCBuLAord2hpY2gsIGlmIGdpdmVuLCB0ZWxscyB3aGVyZSB0aGUgcm91bmRpbmcg c2hvdWxkIG9jY3VyLiAgSWYgbiBpcyBwb3NpdGl2ZSwKK3RoZSBudW1iZXIgaXMgcm91bmRlZCB0 byBuIGRlY2ltYWwgcGxhY2VzLiAgSWYgemVybywgaXQgaXMgcm91bmRlZCB0byB0aGUKK25lYXJl c3QgaW50ZWdldC4gIElmIHBvc2l0aXZlLCB0aGUgbnVtYmVyIGlzIHJvdW5kZWQgdG8gdGhlIG5l YXJlc3QgcG93ZXIgb2YKKzEwOyBlLmcuIC0yIG1lYW5zICJ0byB0aGUgbmVhcmVzdCBodW5kcmVk Ii4gIElmIFJPVU5EIGlzIHVzZWQgYXMgYmVmb3JlLAord2l0aCBvbmUgYXJndW1lbnQsIGl0IHdv cmtzIGFzIGJlZm9yZS4gIGNrY2xpYi5jLCBja3V1czMuYywgMjUgSnVuIDIwMTEuCisKK0Zyb20g QXJ0aHVyIE1hcnNoLCBhIGZldyBtb3JlIGRpcmVjdG9yaWVzIHRvIHRlc3QgZm9yIGxpYnJlc29s diBpbiBMaW51eC4KK21ha2VmaWxlLCAyNiBKdW4gMjAxMS4KKworRnJvbSBNYXJ0aW4gVm9ybGFl bmRlciwgYSBmaXggZm9yIHRoZSBWTVMgZmlsZS10cmFuc2ZlciBkaXNwbGF5IGFuZAorc3RhdGlz dGljcywgYSBwbGFjZSB3aGVyZSBhIGZpbGUgbGVuZ3RoIHdhc24ndCBiZWluZyBjYXN0IHRvIENL X09GRl9UCitpbiB6Y2hraSgpLiAgY2t2ZmlvLmMsIDI4IEp1biAyMDExLgorCitVcGRhdGVkIHZl cnNpb24gdG8gOS4wLjMwMCBhbmQgcmVtb3ZlZCB0aGUgQmV0YSBkZXNpZ25hdGlvbi4KK2NrY21h aS5jLCBtYWtlZmlsZSwgMjggSnVuIDIwMTEuCisKK1JlbW92ZWQgc29sYXJpczlfNjQgdGFyZ2V0 IGZyb20gbWFrZWZpbGUuICBJdCBidWlsZHMgYnV0IGl0IGRvZXNuJ3Qgd29yaworYXQgYWxsLiAg MzAgSnVuIDIwMTEuCisKKy0tLSBDLUtlcm1pdCA5LjAuMzAwIC0tLQorCitPbiBTb2xhcmlzIDEw IGFuZCAxMSwgRE5TIGxvb2t1cHMgZG9uJ3Qgd29yay4gIEl0IHNlZW1zIHRoZXNlIFNvbGFyaXMK K3ZlcnNpb25zIGhhdmUgSU5BRERSWCBhbmQgSU5BRERSWF9OT05FIGRlZmluZWQsIHRodXMgdHJp Z2dlcmluZyB0aGUgY29kZSBpbgorY2tjbmV0LmMsIGNrdWNucy5jLCBhbmQgY2tjZnRwLmMgI2lm ZGVmJ2Qgb24gdGhlc2Ugc3ltYm9scywgYnV0IHRoYXQgY29kZQorZG9lc24ndCB3b3JrIGluIHRo aXMgY2FzZS4gIFRoaXMgaGFwcGVucyBidWlsZGluZyB3aXRoIGdjYyBhcyB3ZWxsIGFzIHdpdGgK K1N1biBjYy4gIFB1dCAjaWZkZWZzIGluIGNrY25ldC5oIHRvIHVuZGVmaW5lIHRoZXNlIHN5bWJv bHMgKGlmIHRoZXkgYXJlCitkZWZpbmVkIGFmdGVyIGluY2x1ZGluZyBhbGwgdGhlIGhlYWRlciBm aWxlcykgZm9yIFNvbGFyaXMuICBJIGRpZG4ndCBib3RoZXIKK3RyeWluZyB0byBkaWZmZXJlbnRp YXRlIHRoZSBTb2xhcmlzIHZlcnNpb25zIGJlY2F1c2UgdGhlIHN5bWJvbHMgYXJlIG5vdAorZGVm aW5lZCBpbiBTb2xhcmlzIDkgb3IgZWFybGllciwgYW5kIHRoZXkgc2hvdWxkIG5vdCBiZSB1c2Vk IGluIFNvbGFyaXMgMTAKK29yIDExLiAgY2tjbmV0LmgsIDYgSnVseSAyMDExLgorCitGcm9tIFNN UzogIFRvIGF2b2lkIHRoZSAlQ0MtVy1QVFJNSVNNQVRDSDEgY29tcGxhaW50cyBmcm9tIGNrX3Nz bC5jLCBhZGQKK3R3byAoaGFybWxlc3MpIHR5cGUgY2FzdHMgYXQgbGluZXMgMjQ2MCBhbmQgMjc3 MywgNiBKdWx5IDIwMTEuCisKK0J1aWx0IGFuZCB0ZXN0ZWQgb24gU29sYXJpcyA5LCBTb2xhcmlz IDEwLCBhbmQgUkhFTDUuICA2IEp1bHkgMjAxMS4KKworLS0tIEMtS2VybWl0IDkuMC4zMDEgQmV0 YS4wMSAtLS0KKworVXBkYXRlZCB2ZXJzaW9uIHRleHQgYW5kIGRhdGUuICBja2NtYWkuYywgbWFr ZWZpbGUsIDExIEp1bHkgMjAxMS4KKworLS0tIEMtS2VybWl0IDkuMC4zMDEgLS0tCisKK0FmdGVy IHRoZSBpbml0aWFsIHJlbGVhc2UgSSBtYWRlIHNvbWUgc21hbGwgY2hhbmdlcyB0aGF0IGFmZmVj dCBvbmx5IEhQLVVYCis1Lng6IGFkZGVkIC1EVk9JRD12b2lkIGFuZCAtRENLVk9JRD12b2lkIHRv IHRoZSBocHV4MDUwMCBtYWtlZmlsZSB0YXJnZXRzLAorYW5kIHB1dCAjaWZkZWZzIGFyb3VuZCAj aW5jbHVkZSA8ZXJybm8uaD4sIHdoaWNoIChpbiB0aGUgV2luVENQIGNhc2UpIGRpZG4ndAorcHJv dGVjdCBpdHNlbGYgYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb24gKHdoaWNoIGlzIGhhcHBlbmlu ZyBpbiBvdGhlcgoraGVhZGVyIGZpbGVzLCBub3QgaW4gS2VybWl0KS4gIG1ha2VmaWxlLCBja3Vj bWQuYywgY2t1Y29uLmMsIGNrdXRpby5jLAorY2t1ZmlvLmMsIGNrY25ldC5jLCBja2NmdHAuYywg MTQgSnVseSAyMDExLgorCitJbiB0aGUgbmV3IGNvcHlyaWdodCBub3RpY2UsIGNvcGllZCBmcm9t IHRoZSBCU0QgbGljZW5zZSB0ZW1wbGF0ZSwKK29uZSBpbnN0YW5jZSBvZiAidGhlIDxPUkdBTkla QVRJT04+IiB3YXMgbm90IHJlcGxhY2VkIGJ5ICJDb2x1bWJpYQorVW5pdmVyc2l0eSIuICBGaXhl ZCBpbiBja2NtYWkuYywgMTkgSnVseSAyMDExLgorCitBZGRlZCBhbm90aGVyIHNlYXJjaCB0ZXJt IGZvciBsazVjcnlwdG8gaW4gdGhlIGxpbnV4K2tyYjUgdGFyZ2V0cy4KK21ha2VmaWxlLCAyMCBK dWx5IDIwMTEuCisKK0FkZGVkIGFuZCBzdWNjZXNzZnVsbHkgdXNlZCBhIG5ldyBzb2xhcmlzOStr cmI1K3NzbCB0YXJnZXQuCittYWtlZmlsZSwgOCBBdWcgMjAxMS4KKworRnJlZUJTRCA5IHN3aXRj aGVkIGZyb20gdXRtcCB0byB1dG1weCwgd2hpY2ggYnJva2UgY29tcGlsYXRpb24gb2YgS2VybWl0 IG9uCit0aGF0IHZlcnNpb24uICBGdXJ0aGVybW9yZSwgdGhlIFVVQ1AgbG9ja2ZpbGUgY29udmVu c2lvbnMgY2hhbmdlZCBpbiBGcmVlQlNECis4LCB3aGljaCBkaWQgbm90IHByZXZlbnQgQy1LZXJt aXQgZnJvbSBjb21waWxpbmcsIGJ1dCBhbnkgYXR0ZW1wdCB0byBsb2NrIGEKK3Rlcm1pbmFsIG9y IHB0eSBkZXZpY2Ugd291bGQgZmFpbC4gIFRoYW5rcyB0byBBbGV4ZXkgRG9rdWNoYWV2ICJkYW5m ZSIgZm9yCitmaW5kaW5nIGFuZCBwYXRjaGluZyB0aGUgcHJvYmxlbXMuICBJIHVuZGlkIHRoZSBw YXRjaGVzIGFuZCBmaXhlZCB0aGUgY29kZQorc28gaXQgZGlkbid0IG5lZWQgdG8gYmUgcGF0Y2hl ZCwgZXhjZXB0IGZvciBzb21lIGRlY2xhcmF0aW9ucyBpbiB0aGUKK2NrX2NycC5jIG1vZHVsZSwg d2hpY2ggSSBmZWx0IGhhZCBiZXR0ZXIgbm90IGJlIGNoYW5nZWQgd2l0aG91dCB0aG9yb3VnaGx5 Cit0ZXN0aW5nIHRoZSBjaGFuZ2VzIG9uIGRvemVucyBvZiBkaWZmZXJlbnQgcGxhdGZvcm1zLCB3 aGljaCBJIGRvbid0IGhhdmUKK3RpbWUgdG8gZG8gKGluIGFueSBjYXNlLCBpdCBidWlsZHMgT0sg b24gRnJlZUJTRCA5IHdpdGhvdXQgdGhlIHBhdGNoKS4gIEluCitwYXJ0aWN1bGFyIEkgbWFkZSBj b21wbGV0ZWx5IG5ldyBtYWtlZmlsZSB0YXJnZXRzIGZvciBGcmVlQlNEIDQuMCBhbmQgbGF0ZXIs Cit3aGljaCBhdXRvbWF0aWNhbGx5IGRldGVjdCBGcmVlQlNEIDggYW5kIEZyZWVCU0QgOSB0byBl bmFibGUgdGhlIGFwcHJvcHJpYXRlCitmZWF0dXJlIHRlc3RzIGluIHRoZSBjb2RlLCBmb3IgYSBy ZWd1bGFyIGJ1aWxkIGFuZCBhIGJ1aWxkIHdpdGggT3BlblNTTC4KK1RoZXNlIGNoYW5nZXMgc2hv dWxkIGFmZmVjdCBvbmx5IEZyZWVCU0QuICBja3V0aW8uYywgY2t1ZmlvLmMsIGNrX2NycC5jLAor Y2t1dXM1LmMsIG1ha2VmaWxlLCAyMCBBdWcgMjAxMS4KKworQ2hhbmdlZCB0aGUgdmVyc2lvbiB0 byA5LjAuMzAyLCBja2NtYWkuYywgMjAgQXVnIDIwMTEuCisKK0ZpeGVkIGZyZWVic2Qrc3NsIGFu ZCBuZXRic2Qrc3NsLCBuZXRic2Qra3JiNSwgYW5kIG5ldGJzZCtrcmI1K3NzbCB0YXJnZXRzCit0 byBoYXZlIENDPSQoQ0MpIGluc3RlYWQgb2YgQ0M9Z2NjOyBkaXR0byBmb3IgQ0MyLCBhbmQgYWRq dXN0ZWQgbGluZSBicmVha3MKK2luIGZyZWVic2QgYW5kIGZyZWVic2Qrc3NsIHRhcmdldHMuICBt YWtlZmlsZSwgMjEgQXVnIDIwMTEuCisKKy0tLSA5LjAuMzAyIC0tLQorCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKgoKZGlmZiAt LWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjYXNjLmggYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2FzYy5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2QyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2FzYy5oCkBAIC0wLDAgKzEsNjkg QEAKKy8qCisgIEZpbGUgQ0tDQVNDLkgKKyAgTW5lbW9uaWNzIGZvciBBU0NJSSBjb250cm9sIGNo YXJhY3RlcnMgKGFuZCBTcGFjZSkgZm9yIHVzZSB3aXRoIEMtS2VybWl0LgorKi8KKy8qCisgIEF1 dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlhLmVkdSkuCisgIENvbHVtYmlhIFVuaXZl cnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBD b3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVy c2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAg U2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0 ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25z LgorKi8KKyNpZm5kZWYgQ0tDQVNDX0gKKyNkZWZpbmUgQ0tDQVNDX0gKKworI2RlZmluZSBOVUwg ICdcMCcgICAgICAgLyogTnVsbCBDdHJsLUAqLworI2RlZmluZSBTT0ggICAgMSAgICAgICAgLyog U3RhcnQgb2YgaGVhZGVyIEN0cmwtQSAqLworI2RlZmluZSBTVFggICAgMiAgICAgICAgLyogQ3Ry bC1CICovCisjZGVmaW5lIEVUWCAgICAzICAgICAgICAvKiBDdHJsLUMgKi8KKyNkZWZpbmUgRU9U ICAgIDQgICAgICAgIC8qIEN0cmwtRCAqLworI2RlZmluZSBFTlEgICAgNSAgICAgICAgLyogRU5R IEN0cmwtRSAqLworI2RlZmluZSBBQ0sgICAgNiAgICAgICAgLyogQ3RybC1GICovCisjZGVmaW5l IEJFTCAgICA3ICAgICAgICAvKiBCZWxsIChCZWVwKSBDdHJsLUcgKi8KKyNkZWZpbmUgQlMgICAg IDggICAgICAgIC8qIEJhY2tzcGFjZSBDdHJsLUggKi8KKyNkZWZpbmUgSFQgICAgIDkgICAgICAg IC8qIEhvcml6b250YWwgVGFiIEN0cmwtSSAqLworI2RlZmluZSBMRiAgICAxMCAgICAgICAgLyog TGluZWZlZWQgQ3RybC1KICovCisjZGVmaW5lIFZUICAgIDExICAgICAgICAvKiBWZXJ0aWNhbCBU YWIgQ3RybC1LICovCisjZGVmaW5lIE5MICAgJ1xuJyAgICAgICAvKiBOZXdsaW5lICovCisjZGVm aW5lIEZGICAgIDEyICAgICAgICAvKiBGb3JtZmVlZCBDdHJsLUwgKi8KKyNkZWZpbmUgQ1IgICAg MTMgICAgICAgIC8qIENhcnJpYWdlIFJldHVybiBDdHJsLU0gKi8KKyNkZWZpbmUgU08gICAgMTQg ICAgICAgIC8qIFNoaWZ0IE91dCBDdHJsLU4gKi8KKyNkZWZpbmUgU0kgICAgMTUgICAgICAgIC8q IFNoaWZ0IEluIEN0cmwtTyAqLworI2RlZmluZSBETEUgICAxNiAgICAgICAgLyogRGF0YWxpbmsg RXNjYXBlIEN0cmwtUCAqLworI2RlZmluZSBYT04gICAxNyAgICAgICAgLyogWE9OIEN0cmwtUSAq LworI2RlZmluZSBEQzEgICAxNworI2RlZmluZSBEQzIgICAxOCAgICAgICAgLyogQ3RybC1SICov CisjZGVmaW5lIFhPRkYgIDE5ICAgICAgICAvKiBYT0ZGIEN0cmwtUyAqLworI2RlZmluZSBEQzMg ICAxOQorI2RlZmluZSBEQzQgICAyMCAgICAgICAgLyogQ3RybC1UICovCisjZGVmaW5lIE5BSyAg IDIxICAgICAgICAvKiBDdHJsLVUgKi8KKyNkZWZpbmUgU1lOICAgMjIgICAgICAgIC8qIFNZTiwg Q3RybC1WICovCisjZGVmaW5lIEVUQiAgIDIzICAgICAgICAvKiBDdHJsLVcgKi8KKyNkZWZpbmUg Q0FOICAgMjQgICAgICAgIC8qIENBTiwgQ3RybC1YICovCisjZGVmaW5lIFhFTSAgIDI1ICAgICAg ICAvKiBDdHJsLVkgKHdhcyBFTSBidXQgY29uZmxpY3RzIHdpdGggT3BlblNTTCkgKi8KKyNkZWZp bmUgU1VCICAgMjYgICAgICAgIC8qIFNVQiBDdHJsLVogKi8KKyNkZWZpbmUgRVNDICAgMjcgICAg ICAgIC8qIEVzY2FwZSBDdHJsLVsgKi8KKyNkZWZpbmUgWEZTICAgMjggICAgICAgIC8qIEZpZWxk IFNlcGFyYXRvciwgIEN0cmwtQmFja3NsYXNoICovCisjZGVmaW5lIFhHUyAgIDI5ICAgICAgICAv KiBHcm91cCBTZXBhcmF0b3IsICBDdHJsLVJpZ2h0YnJhY2tldCAqLworI2RlZmluZSBYUlMgICAz MCAgICAgICAgLyogUmVjb3JkIFNlcGFyYXRvciwgQ3RybC1DaXJjdW1mbGV4ICovCisjZGVmaW5l IFVTICAgIDMxICAgICAgICAvKiBVbml0IFNlcGFyYXRvciwgICBDdHJsLVVuZGVyc2NvcmUgKi8K KyNkZWZpbmUgU1AgICAgMzIgICAgICAgIC8qIFNwYWNlICovCisjZGVmaW5lIERFTCAgMTI3ICAg ICAgICAvKiBEZWxldGUgKFJ1Ym91dCkgKi8KKyNkZWZpbmUgUlVCICAxMjcgICAgICAgIC8qIERl bGV0ZSAoUnVib3V0KSAqLworCisjaWZkZWYgT1MyCisvKgorICBUaGVzZSBhcmUgbmVlZGVkIGlu IE9TLzIsIHNvIGxldCdzIG5vdCBjYXVzZSBhbnkgdW5uZWNlc3NhcnkgY29uZmxpY3RzLgorKi8K KyNkZWZpbmUgX0NTSSAgMDIzMyAgICAgIC8qIDgtYml0IENvbnRyb2wgU2VxdWVuY2UgSW50cm9k dWNlciAqLworI2RlZmluZSBfU1MyICAwMjE2ICAgICAgLyogOC1iaXQgU2luZ2xlIFNoaWZ0IDIg Ki8KKyNkZWZpbmUgX1NTMyAgMDIxNyAgICAgIC8qIDgtYml0IFNpbmdsZSBTaGlmdCAzICovCisj ZGVmaW5lIF9EQ1MgIDAyMjAgICAgICAvKiA4LWJpdCBEZXZpY2UgQ29udHJvbCBTdHJpbmcgSW50 cm9kdWNlciAqLworI2RlZmluZSBfU1Q4ICAwMjM0ICAgICAgLyogOC1iaXQgU3RyaW5nIFRlcm1p bmF0b3IgKi8KKyNkZWZpbmUgX09TQyAgMDIzNSAgICAgIC8qIDgtYml0IE9wZXJhdGluZyBTeXN0 ZW0gQ29tbWFuZCAqLworI2RlZmluZSBfUE04ICAwMjM2ICAgICAgLyogOC1iaXQgUHJpdmFjeSBN ZXNzYWdlICovCisjZGVmaW5lIF9BUEMgIDAyMzcgICAgICAvKiA4LWJpdCBBcHBsaWNhdGlvbiBQ cm9ncmFtIENvbW1hbmQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS0NBU0NfSCAq LwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tj YndyLnR4dCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjYndyLnR4 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzNjOTQ2Ci0tLSAvZGV2L251 bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nid3IudHh0 CkBAIC0wLDAgKzEsMTUxNCBAQAorCisgICBbMV1UaGUgQ29sdW1iaWEgQ3Jvd24gVGhlIEtlcm1p dCBQcm9qZWN0IHwgQ29sdW1iaWEgVW5pdmVyc2l0eQorICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0 LCBOZXcgWW9yayBOWSAxMDAyNSBVU0EgbyBbMl1rZXJtaXRAY29sdW1iaWEuZWR1CisgICAuLi5z aW5jZSAxOTgxCisgICBbM11Ib21lIFs0XUtlcm1pdCA5NSBbNV1DLUtlcm1pdCBbNl1TY3JpcHRz IFs3XUN1cnJlbnQgWzhdTmV3IFs5XUZBUQorICAgWzEwXVN1cHBvcnQKKworICAgQXMgb2Y6IEMt S2VybWl0IDkuMC4zMDAsIDMwIEp1bmUgMjAxMQorICAgVGhpcyBwYWdlIGxhc3QgdXBkYXRlZDog VHVlIEp1biAyOCAwODo1NDozMCAyMDExIChOZXcgWW9yayBVU0EgVGltZSkKKworICAgICBJRiBZ T1UgQVJFIFJFQURJTkcgQSBQTEFJTi1URVhUIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCwgaXQg aXMgYQorICAgICBwbGFpbi10ZXh0IGR1bXAgb2YgYSBXZWIgcGFnZS4gWW91IGNhbiB2aXNpdCB0 aGUgb3JpZ2luYWwgKGFuZAorICAgICBwb3NzaWJseSBtb3JlIHVwLXRvLWRhdGUpIFdlYiBwYWdl IGhlcmU6CisKKyAgWzExXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRt bAorCisgICBUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHBsYXRmb3JtLWluZGVwZW5kZW50IEMtS2Vy bWl0IGhpbnRzIGFuZCB0aXBzLgorICAgQWxzbyBzZWUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIEMt S2VybWl0IGhpbnRzIGFuZCB0aXBzIGRvY3VtZW50IGZvcgorICAgeW91ciBwbGF0Zm9ybSwgZm9y IGV4YW1wbGU6CisKKyAgWzEyXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbAorCisgICBmb3IgVW5peC4gVGhpcyBkb2N1bWVudCBhbHNvIGFwcGxpZXMgdG8gWzEzXUtl cm1pdCA5NSBmb3IgV2luZG93cywKKyAgIHdoaWNoIGlzIGJhc2VkIG9uIEMtS2VybWl0LgorCisg ICBbIFsxNF1DLUtlcm1pdCBdIFsgWzE1XVRVVE9SSUFMIF0KKworQ09OVEVOVFMKKworICAgMC4g WzE2XVBBVENIRVMKKyAgIDEuIFsxN11JTkNPTVBBVElCTEUgQ0hBTkdFUworICAgMi4gWzE4XVRI RSBDLUtFUk1JVCBDT01NQU5EIFBBUlNFUgorICAgMy4gWzE5XU1VTFRJUExFIFNFU1NJT05TCisg ICA0LiBbMjBdTkVUV09SSyBDT05ORUNUSU9OUworICAgNS4gWzIxXU1PREVNUyBBTkQgRElBTElO RworICAgNi4gWzIyXURJQUxJTkcgSElOVFMgQU5EIFRJUFMKKyAgIDcuIFsyM11URVJNSU5BTCBT RVJWRVJTCisgICA4LiBbMjRdVEVSTUlOQUwgRU1VTEFUSU9OCisgICA5LiBbMjVdS0VZIE1BUFBJ TkcKKyAgMTAuIFsyNl1GSUxFIFRSQU5TRkVSCisgIDExLiBbMjddU0NSSVBUIFBST0dSQU1NSU5H CisKKzAuIFBBVENIRVMKKworICAgWyBbMjhdVG9wIF0gWyBbMjldQ29udGVudHMgXSBbIFszMF1O ZXh0IF0KKworICAgU291cmNlLWxldmVsIHBhdGNoZXMgZm9yIEMtS2VybWl0IDguMC4yMTE6CisK KyAgICAgKE5vbmUpCisKKzEuIElOQ09NUEFUSUJMRSBDSEFOR0VTCisKKyAgIFsgWzMxXVRvcCBd IFsgWzMyXUNvbnRlbnRzIF0gWyBbMzNdTmV4dCBdCisKKyAgIFRoZXNlIGFyZSBub3QgbmVjZXNz YXJpbHkgZXhoYXVzdGl2ZSBsaXN0cy4KKworMS4xLiBDLUtlcm1pdCA2LjAKKworICAgQy1LZXJt aXQgNi4wIHdhcyByZWxlYXNlZCA2IFNlcHRlbWJlciAxOTk2IGFuZCBpcyBjb21wbGV0ZWx5IGRv Y3VtZW50ZWQKKyAgIGluIFszNF1Vc2luZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24uIFRoZSBmb2xs b3dpbmcgaW5jb21wYXRpYmxlIGNoYW5nZXMKKyAgIHdlcmUgbWFkZSBpbiBDLUtlcm1pdCA2LjA6 CisKKyAgICAgKiBVbmxlc3MgeW91IHRlbGwgQy1LZXJtaXQgb3RoZXJ3aXNlLCBpZiBhIHNlcmlh bCBvciBuZXR3b3JrCisgICAgICAgY29ubmVjdGlvbiBzZWVtcyB0byBiZSBvcGVuLCBhbmQgeW91 IGF0dGVtcHQgdG8gRVhJVCBvciB0byBvcGVuIGEKKyAgICAgICBuZXcgY29ubmVjdGlvbiwgQy1L ZXJtaXQgd2FybnMgeW91IHRoYXQgYW4gYWN0aXZlIGNvbm5lY3Rpb24KKyAgICAgICBhcHBlYXJz IHRvIGJlIG9wZW4gYW5kIGFza3MgeW91IGlmIHlvdSByZWFsbHkgd2FudCB0byBjbG9zZSBpdC4g SWYKKyAgICAgICB5b3UgZG8gbm90IHdhbnQgdGhlc2Ugd2FybmluZ3MsIGFkZCBTRVQgRVhJVCBX QVJOSU5HIE9GRiB0byB5b3VyCisgICAgICAgY3VzdG9taXphdGlvbiBmaWxlIG9yIHNjcmlwdCwg b3IgZ2l2ZSB0aGlzIGNvbW1hbmQgYXQgdGhlIHByb21wdC4KKyAgICAgKiBUaGUgZGVmYXVsdCBm b3IgU0VUIHsgU0VORCwgUkVDRUlWRSB9IFBBVEhOQU1FUyB3YXMgY2hhbmdlZCBmcm9tIE9OCisg ICAgICAgdG8gT0ZGLCB0byBwcmV2ZW50IHVuZXhwZWN0ZWQgY3JlYXRpb24gb2YgZGlyZWN0b3Jp ZXMgYW5kCisgICAgICAgZGVwb3NpdGluZyBvZiBpbmNvbWluZyBmaWxlcyBpbiBwbGFjZXMgeW91 IG1pZ2h0IG5vdCBrbm93IHRvIGxvb2suCisgICAgICogVGhlIGRlZmF1bHQgZm9yIFNFVCBGSUxF IElOQ09NUExFVEUgd2FzIGNoYW5nZWQgZnJvbSBESVNDQVJEIHRvCisgICAgICAgS0VFUCB0byBh bGxvdyBmb3IgZmlsZSB0cmFuc2ZlciByZWNvdmVyeS4KKyAgICAgKiBUaGUgZGVmYXVsdCBmaWxl LXRyYW5zZmVyIGJsb2NrLWNoZWNrIGlzIG5vdyAzLCByYXRoZXIgdGhhbiAxLiBJZgorICAgICAg IHRoZSBvdGhlciBLZXJtaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzLCB0aGUgdHdvIHdpbGwgZHJv cCBiYWNrIHRvCisgICAgICAgdHlwZSAxIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHRoZSBvdGhlciBL ZXJtaXQgZmFpbHMgdG8gZm9sbG93IHRoZQorICAgICAgIHByb3RvY29sIHNwZWNpZmljYXRpb24u CisgICAgICogVGhlIGRlZmF1bHQgZmxvdy1jb250cm9sIGlzIG5vdyAiYXV0byIgKCJkbyB0aGUg cmlnaHQgdGhpbmcgZm9yCisgICAgICAgZWFjaCB0eXBlIG9mIGNvbm5lY3Rpb24iKSwgbm90IFhv bi9Yb2ZmLgorICAgICAqIEJhY2tzbGFzaCAoXCkgaXMgbm8gbG9uZ2VyIGEgY29tbWFuZCBjb250 aW51YXRpb24gY2hhcmFjdGVyLiBPbmx5IC0KKyAgICAgICAoaHlwaGVuLCBkYXNoKSBtYXkgYmUg dXNlZCBmb3IgdGhpcyBpbiBDLUtlcm1pdCA2LjAgYW5kIGxhdGVyLgorICAgICAqIE5lZ2F0aXZl IElOUFVUIHRpbWVvdXQgbm93IHJlc3VsdHMgaW4gaW5maW5pdGUgd2FpdCwgcmF0aGVyIHRoYW4g MQorICAgICAgIHNlY29uZC4KKworMS4yLiBDLUtlcm1pdCA3LjAKKworICAgQy1LZXJtaXQgNy4w IHdhcyByZWxlYXNlZCAxIEphbnVhcnkgMjAwMC4gSXRzIG5ldyBmZWF0dXJlcyBhcmUKKyAgIGRv Y3VtZW50ZWQgaW4gdGhlIEMtS2VybWl0IDcuMCBTdXBwbGVtZW50LAorICAgWzM1XWh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Mi5odG1sLiBUaGUgZm9sbG93aW5nCisgICBp bmNvbXBhdGlibGUgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gQy1LZXJtaXQgNy4wOgorICAgICAqIFRo ZSAibXVsdGlsaW5lIEdFVCIgY29tbWFuZCBpcyBnb25lLiBOb3cgdXNlIGVpdGhlciBvZiB0aGUK KyAgICAgICBmb2xsb3dpbmcgZm9ybXMgaW5zdGVhZDoKKyAgZ2V0IHJlbW90ZS1uYW1lIGxvY2Fs LW5hbWUKKyAgZ2V0IC9hcy1uYW1lOmxvY2FsLW5hbWUgcmVtb3RlLW5hbWUKKworICAgICAgIElm IGVpdGhlciBuYW1lIGNvbnRhaW5zIHNwYWNlcywgZW5jbG9zZSBpdCBpbiBicmFjZXMgKG9yLCBp bgorICAgICAgIEMtS2VybWl0IDguMCwgZG91YmxlcXVvdGVzKS4KKyAgICAgKiBUbyBpbmNsdWRl IG11bHRpcGxlIGZpbGUgc3BlY2lmaWNhdGlvbnMgaW4gYSBHRVQgY29tbWFuZCwgeW91IG11c3QK KyAgICAgICBub3cgdXNlIE1HRVQgcmF0aGVyIHRoYW4gR0VUOgorICBtZ2V0IGZpbGUxIGZpbGUy IGZpbGUzIC4uLgorCisgICAgICogQy1LZXJtaXQgNy4wIGFuZCBsYXRlciB1c2UgRkFTVCBLZXJt aXQgcHJvdG9jb2wgc2V0dGluZ3MgYnkKKyAgICAgICBkZWZhdWx0LiBUaGlzIGluY2x1ZGVzICJ1 bnByZWZpeGluZyIgb2YgY2VydGFpbiBjb250cm9sIGNoYXJhY3RlcnMuCisgICAgICAgQmVjYXVz ZSBvZiB0aGlzLCBmaWxlIHRyYW5zZmVycyB0aGF0IHdvcmtlZCB3aXRoIHByZXZpb3VzIHJlbGVh c2VzCisgICAgICAgbWlnaHQgbm90IHdvcmsgaW4gdGhlIG5ldyByZWxlYXNlIGVzcGVjaWFsbHkg YWdhaW5zdCBhCisgICAgICAgbm9uLUtlcm1pdC1Qcm9qZWN0IEtlcm1pdCBwcm90b2NvbCBpbXBs ZW1lbnRhdGlvbiAoYnV0IGl0IGlzIG1vcmUKKyAgICAgICBsaWtlbHkgdGhhdCB0aGV5IHdpbGwg d29yaywgYW5kIG11Y2ggZmFzdGVyKS4gSWYgYSB0cmFuc2ZlciBmYWlscywKKyAgICAgICB5b3Un bGwgZ2V0IGEgY29udGV4dC1zZW5zaXRpdmUgaGludCBzdWdnZXN0aW5nIHBvc3NpYmxlIGNhdXNl cyBhbmQKKyAgICAgICBjdXJlcy4gVXN1YWxseSBTRVQgUFJFRklYSU5HIEFMTCBkb2VzIHRoZSB0 cmljay4KKyAgICAgKiBCeSBkZWZhdWx0IEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIgc2VuZCBmaWxl cyBpbiB0ZXh0IG9yIGJpbmFyeSBtb2RlCisgICAgICAgYnkgbG9va2luZyBhdCBlYWNoIGZpbGUg dG8gc2VlIHdoaWNoIGlzIHRoZSBhcHByb3ByaWF0ZSBtb2RlLiBUbworICAgICAgIHJlc3RvcmUg dGhlIHByZXZpb3VzIGJlaGF2aW9yLCBwdXQgU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMIGFuZCB0 aGUKKyAgICAgICBkZXNpcmVkIFNFVCBGSUxFIFRZUEUgKFRFWFQgb3IgQklOQVJZKSBpbiB5b3Vy IEMtS2VybWl0CisgICAgICAgaW5pdGlhbGl6YXRpb24gZmlsZS4KKyAgICAgKiBUaGUgUkVTRU5E IGFuZCBSRUdFVCBjb21tYW5kcyBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byBiaW5hcnkgbW9kZTsK KyAgICAgICBwcmV2aW91c2x5IGlmIFJFU0VORCBvciBSRUdFVCB3ZXJlIGF0dGVtcHRlZCB3aGVu IEZJTEUgVFlQRSB3YXMKKyAgICAgICBURVhULCB0aGVzZSBjb21tYW5kcyB3b3VsZCBmYWlsIGlt bWVkaWF0ZWx5LCB3aXRoIGEgbWVzc2FnZSB0ZWxsaW5nCisgICAgICAgeW91IHRoZXkgd29yayBv bmx5IHdoZW4gdGhlIEZJTEUgVFlQRSBpcyBCSU5BUlkuIE5vdyB0aGV5IHNpbXBseSBkbworICAg ICAgIHRoaXMgZm9yIHlvdS4KKyAgICAgKiBTRVQgUFJFRklYSU5HIENBVVRJT1VTIGFuZCBNSU5J TUFMIG5vdyBib3RoIHByZWZpeCBsaW5lZmVlZCAoMTAgYW5kCisgICAgICAgMTM4KSBpbiBjYXNl IHJsb2dpbiwgc3NoLCBvciBjdSBhcmUgImluIHRoZSBtaWRkbGUiLCBzaW5jZQorICAgICAgIG90 aGVyd2lzZSA8TEY+fiBtaWdodCBhcHBlYXIgaW4gS2VybWl0IHBhY2tldHMsIGFuZCB0aGlzIHdv dWxkCisgICAgICAgY2F1c2UgcmxvZ2luLCBzc2gsIG9yIGN1IHRvIGRpc2Nvbm5lY3QsIHN1c3Bl bmQsZXNjYXBlIGJhY2ssIG9yCisgICAgICAgb3RoZXJ3aXNlIHdyZWNrIHRoZSBmaWxlIHRyYW5z ZmVyLiBYb24gYW5kIFhvZmYgYXJlIG5vdyBhbHdheXMKKyAgICAgICBwcmVmaXhlZCB0b28sIGV2 ZW4gd2hlbiBYb24vWG9mZiBmbG93IGNvbnRyb2wgaXMgbm90IGluIGVmZmVjdCwKKyAgICAgICBz aW5jZSB1bnByZWZpeGluZyB0aGVtIGhhcyBwcm92ZW4gZGFuZ2Vyb3VzIG9uIFRDUC9JUCBjb25u ZWN0aW9ucy4KKyAgICAgKiBJbiBVTklYLCBWTVMsIFdpbmRvd3MsIGFuZCBPUy8yLCB0aGUgRElS RUNUT1JZIGNvbW1hbmQgaXMgYnVpbHQKKyAgICAgICBpbnRvIEMtS2VybWl0IGl0c2VsZiByYXRo ZXIgdGhhbiBpbXBsZW1lbnRlZCBieSBydW5uaW5nIGFuIGV4dGVybmFsCisgICAgICAgY29tbWFu ZCBvciBwcm9ncmFtLiBUaGUgYnVpbHQtaW4gY29tbWFuZCBtaWdodCBub3QgYmVoYXZlIHRoZSB3 YXkKKyAgICAgICB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZXh0ZXJuYWwgb25lIGRpZCwgYnV0IG1h bnkgb3B0aW9ucyBhcmUKKyAgICAgICBhdmFpbGFibGUgZm9yIGN1c3RvbWl6YXRpb24uIE9mIGNv dXJzZSB0aGUgdW5kZXJseWluZworICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIGNvbW1hbmQgY2Fu IHN0aWxsIGJlIGFjY2Vzc2VkIHdpdGggIiEiLCAiQCIsIG9yCisgICAgICAgIlJVTiIgd2hlcmV2 ZXIgdGhlIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBmb3JiaWQuIEluIFVOSVgsIHRoZSAibHMiCisg ICAgICAgY29tbWFuZCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgYXMgImxzIiBpbiBDLUtlcm1p dC4KKyAgICAgKiBTRU5EID8gcHJpbnRzIGEgbGlzdCBvZiBzd2l0Y2hlcyByYXRoZXIgdGhhbiBh IGxpc3Qgb2YgZmlsZW5hbWVzLgorICAgICAgIElmIHlvdSB3YW50IHRvIHNlZSBhIGxpc3Qgb2Yg ZmlsZW5hbWVzLCB1c2UgYSAoc3lzdGVtLWRlcGVuZGVudCkKKyAgICAgICBjb25zdHJ1Y3Rpb24g c3VjaCBhcyBTRU5EIC4vPyAoZm9yIFVOSVgsIFdpbmRvd3MsIG9yIE9TLzIpLCBTRU5ECisgICAg ICAgW10/IChWTVMpLCBldGMuCisgICAgICogSW4gVU5JWCwgT1MtOSwgYW5kIEtlcm1pdCA5NSwg dGhlIHdpbGRjYXJkIGNoYXJhY3RlcnMgaW4gcHJldmlvdXMKKyAgICAgICB2ZXJzaW9ucyB3ZXJl ICogYW5kID8uIEluIEMtS2VybWl0IDcuMCB0aGV5IGFyZSAqLCA/LCBbLCBdLCB7LCBhbmQKKyAg ICAgICB9LCB3aXRoIGRhc2ggdXNlZCBpbnNpZGUgW10ncyB0byBkZW5vdGUgcmFuZ2VzIGFuZCBj b21tYSB1c2VkCisgICAgICAgaW5zaWRlIHt9IHRvIHNlcGFyYXRlIGxpc3QgZWxlbWVudHMuIElm IHlvdSBuZWVkIHRvIGluY2x1ZGUgYW55IG9mCisgICAgICAgdGhlc2UgY2hhcmFjdGVycyBsaXRl cmFsbHkgaW4gYSBmaWxlbmFtZSwgcHJlY2VkZSBlYWNoIG9uZSB3aXRoCisgICAgICAgYmFja3Ns YXNoIChcKS4KKyAgICAgKiBTRVQgUVVJRVQgeyBPTiwgT0ZGIH0gaXMgbm93IG9uIHRoZSBjb21t YW5kIHN0YWNrLCBqdXN0IGxpa2UgU0VUCisgICAgICAgSU5QVVQgQ0FTRSwgU0VUIENPVU5ULCBT RVQgTUFDUk8gRVJST1IsIGV0YywgYXMgZGVzY3JpYmVkIG9uIHAuNDU4CisgICAgICAgb2YgWzM2 XVVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbi4gVGhpcyBhbGxvd3MgYW55IG1hY3JvIG9yCisg ICAgICAgY29tbWFuZCBmaWxlIHRvIFNFVCBRVUlFVCBPTiBvciBPRkYgd2l0aG91dCB3b3JyeWlu ZyBhYm91dCBzYXZpbmcKKyAgICAgICBhbmQgcmVzdG9yaW5nIHRoZSBnbG9iYWwgUVVJRVQgdmFs dWUuIEZvciBleGFtcGxlLCB0aGlzIGxldHMgeW91CisgICAgICAgd3JpdGUgYSBzY3JpcHQgdGhh dCB0cmllcyBTRVQgTElORSBvbiBsb3RzIG9mIGRldmljZXMgdW50aWwgaXQKKyAgICAgICBmaW5k cyBvbmUgZnJlZSB3aXRob3V0IHNwZXdpbmcgb3V0IGxvYWRzIG9mIGVycm9yIG1lc3NhZ2VzLCBh bmQKKyAgICAgICBhbHNvIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZ2xvYmFsIFFVSUVUIHNldHRp bmcsIHdoYXRldmVyIGl0IHdhcy4KKyAgICAgKiBCZWNhdXNlIG9mIHRoZSBuZXcgIi4iIG9wZXJh dG9yICh3aGljaCBpbnRyb2R1Y2VzIGFzc2lnbm1lbnRzKSwKKyAgICAgICBtYWNyb3Mgd2hvc2Ug bmFtZXMgYmVnaW4gd2l0aCAiLiIgY2FuIG5vdCBiZSBpbnZva2VkICJieSBuYW1lIi4KKyAgICAg ICBIb3dldmVyLCB0aGV5IHN0aWxsIGNhbiBiZSBpbnZva2VkIHdpdGggRE8gb3IgXGZleGVjdXRl KCkuCisgICAgICogVGhlIHN5bnRheCBvZiB0aGUgRVZBTFVBVEUgY29tbWFuZCBoYXMgY2hhbmdl ZC4gVG8gcmVzdG9yZSB0aGUKKyAgICAgICBwcmV2aW91cyBzeW50YXgsIHVzZSBTRVQgRVZBTFVB VEUgT0xELgorICAgICAqIFRoZSBcdihkaXJlY3RvcnkpIHZhcmlhYmxlIG5vdyBpbmNsdWRlcyB0 aGUgdHJhaWxpbmcgZGlyZWN0b3J5CisgICAgICAgc2VwYXJhdG9yOyBpbiBwcmV2aW91cyByZWxl YXNlcyBpdCBkaWQgbm90LiBUaGlzIGlzIHRvIGFsbG93CisgICAgICAgY29uc3RydWN0aW9ucyBz dWNoIGFzOgorICBjZCBcdihkaXIpZGF0YS50bXAKKworICAgICAgIHRvIHdvcmsgYWNyb3NzIHBs YXRmb3JtcyB0aGF0IG1pZ2h0IGhhdmUgZGlmZmVyZW50IGRpcmVjdG9yeQorICAgICAgIG5vdGF0 aW9uLCBzdWNoIGFzIFVOSVgsIFdpbmRvd3MsIGFuZCBWTVMuCisgICAgICogUHJpb3IgdG8gQy1L ZXJtaXQgNy4wLCB0aGUgRkxPVy1DT05UUk9MIHNldHRpbmcgd2FzIGdsb2JhbCBhbmQKKyAgICAg ICBzdGlja3kuIEluIEMtS2VybWl0IDcuMCwgdGhlcmUgaXMgYW4gYXJyYXkgb2YgZGVmYXVsdCBm bG93LWNvbnRyb2wKKyAgICAgICB2YWx1ZXMgZm9yIGVhY2gga2luZCBvZiBjb25uZWN0aW9uLCB0 aGF0IGFyZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkKKyAgICAgICBhdCBTRVQgTElORS9QT1JUL0hP U1QgdGltZS4gVGh1cyBhIFNFVCBGTE9XIGNvbW1hbmQgZ2l2ZW4gYmVmb3JlCisgICAgICAgU0VU IExJTkUvUE9SVC9IT1NUIGlzIGxpa2VseSB0byBiZSB1bmRvbmUuIFRoZXJlZm9yZSBTRVQgRkxP VyBjYW4KKyAgICAgICBiZSBndWFyYW50ZWVkIHRvIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0IG9u bHkgaWYgZ2l2ZW4gYWZ0ZXIgdGhlCisgICAgICAgU0VUIExJTkUvUE9SVC9IT1NUIGNvbW1hbmQu CisgICAgICogQ2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiB3b3JrcyBkaWZmZXJlbnRseSBpbiB0 aGUgVFJBTlNNSVQgY29tbWFuZAorICAgICAgIHdoZW4gKGEpIHRoZSBmaWxlIGNoYXJhY3Rlci1z ZXQgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBsb2NhbCBlbmQgb2YKKyAgICAgICB0aGUgdGVybWlu YWwgY2hhcmFjdGVyLXNldCwgb3IgKGIpIHdoZW4gdGhlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQK KyAgICAgICBpcyBUUkFOU1BBUkVOVC4KKworMS4zLiBDLUtlcm1pdCA4LjAKKworICAgVGhlIGZv bGxvd2luZyBpbmNvbXBhdGlibGUgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gQy1LZXJtaXQgOC4wOgor ICAgICAqIEMtS2VybWl0IG5vdyBhY2NlcHRzIGRvdWJsZXF1b3RlcyBpbiBtb3N0IGNvbnRleHRz IHdoZXJlIHlvdQorICAgICAgIHByZXZpb3VzbHkgaGFkIHRvIHVzZSBicmFjZXMgdG8gZ3JvdXAg bXVsdGlwbGUgd29yZHMgaW50byBhIHNpbmdsZQorICAgICAgIGZpZWxkLCBvciB0byBmb3JjZSBp bmNsdXNpb24gb2YgbGVhZGluZyBvciB0cmFpbGluZyBibGFua3MuIFRoaXMKKyAgICAgICBtaWdo dCBjYXVzZSBwcm9ibGVtcyBpbiBjb250ZXh0cyB3aGVyZSB5b3Ugd2FudGVkIHRoZSBkb3VibGVx dW90ZQorICAgICAgIGNoYXJhY3RlcnMgdG8gYmUgdGFrZW4gbGl0ZXJhbGx5LiBDb25zdWx0IFsz N11TZWN0aW9uIDUgb2YgdGhlCisgICAgICAgWzM4XUMtS2VybWl0IDguMCBVcGRhdGUgTm90ZXMg Zm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgICAgICogVXNpbmcgdGhlIFNFVCBIT1NUIGNvbW1h bmQgdG8gbWFrZSBIVFRQIGNvbm5lY3Rpb25zIGlzIG5vIGxvbmdlcgorICAgICAgIHN1cHBvcnRl ZC4gSW5zdGVhZCwgdXNlIHRoZSBuZXcgWzM5XUhUVFAgT1BFTiBjb21tYW5kLgorCisxLjQuIEMt S2VybWl0IDkuMAorCisgICBUaGUgWzQwXVxmc3BsaXQoKSBmdW5jdGlvbiBpcyBpbmNyZWRpYmx5 IGhhbmR5LCBpdCBjYW4gZG8gYWxtb3N0CisgICBhbnl0aGluZywgdXAgdG8gYW5kIGluY2x1ZGlu ZyBwYXJzaW5nIGEgTElTUCBwcm9ncmFtICh0aGUgdW5kZXJseWluZworICAgY29kZSBpcyB0aGUg YmFzaXMgb2YgdGhlIFs0MV1TLUV4cHJlc3Npb24gaW50ZXJwcmV0ZXIpLiBCdXQgZGlkIHlvdQor ICAgZXZlciB0cnkgdG8gdXNlIGl0IHRvIHBhcnNlIChzYXkpIGEgVGFiLVNlcGFyYXRlZC1MaXN0 IChUU1YgZmlsZSkgb3IKKyAgIENvbW1hLVNlcGFyYXRlZC1MaXN0IChDU1YpPyBJdCB3b3JrcyBh cyBleHBlY3RlZCBhcyBsb25nIGFzIHRoZSBkYXRhCisgICBjb250YWlucyBvbmx5IDctYml0IGNo YXJhY3RlcnMuIEJ1dCBpZiB5b3VyIGRhdGEgY29udGFpbnMgKHNheSkgU3BhbmlzaAorICAgb3Ig R2VybWFuIG9yIFJ1c3NpYW4gdGV4dCB3cml0dGVuIGluIGFuIDgtYml0IGNoYXJhY3RlciBzZXQg c3VjaCBhcyBJU08KKyAgIDg4NTktMSwgZXZlcnkgOC1iaXQgY2hhcmFjdGVyIChhbnkgdmFsdWUg MTI4LTI1NSkgaXMgdHJlYXRlZCBhcyBhIGJyZWFrCisgICBjaGFyYWN0ZXIuIFRoaXMgaXMgZml4 ZWQgaW4gQy1LZXJtaXQgOS4wIGJ5IHRyZWF0aW5nIGFsbCA4LWJpdCBieXRlcyBhcworICAgImlu Y2x1ZGUiIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gYnJlYWsgY2hhcmFjdGVycywgYSB0b3RhbCBy ZXZlcnNhbCBvZgorICAgcGFzdCBiZWhhdmlvci4gSSBkb24ndCB0aGluayBpdCB3aWxsIGFmZmVj dCBhbnlvbmUgdGhvdWdoLCBiZWNhdXNlIGlmCisgICB0aGlzIGhhZCBoYXBwZW5lZCB0byBhbnlv bmUsIEkgd291bGQgaGF2ZSBoZWFyZCBhYm91dCBpdCEKKworICAgU2luY2UgbW9zdCBzdGFuZGFy ZCA4LWJpdCBjaGFyYWN0ZXIgc2V0cyBoYXZlIGNvbnRyb2wgY2hhcmFjdGVycyBpbgorICAgcG9z aXRpb25zIDEyOC0xNjAsIGl0IG1pZ2h0IGhhdmUgbWFkZSBzZW5zZSB0byBrZWVwIDEyOC0xNjAg aW4gdGhlCisgICBicmVhayBzZXQsIGJ1dCB3aXRoIHRoZSBwcm9saWZlcmF0aW9uIG9mIE1pY3Jv c29mdCBXaW5kb3dzIGNvZGUgcGFnZXMsCisgICB0aGVyZSBpcyBubyB0ZWxsaW5nIHdoaWNoIDgt Yml0IGNoYXJhY3RlciBpcyBsaWtlbHkgdG8gYmUgc29tZSBraW5kIG9mCisgICB0ZXh0LCBlLmcu ICJzbWFydCBxdW90ZXMiIG9yIEVhc3QgRXVyb3BlYW4gb3IgVHVya2lzaCBhY2NlbnRlZCBsZXR0 ZXJzLgorCisyLiBUSEUgQy1LRVJNSVQgQ09NTUFORCBQQVJTRVIKKworICAgWyBbNDJdVG9wIF0g WyBbNDNdQ29udGVudHMgXSBbIFs0NF1OZXh0IF0gWyBbNDVdUHJldmlvdXMgXQorCisgICBWYXJp b3VzIGNvbW1hbmQtcmVsYXRlZCBsaW1pdHMgYXJlIHNob3duIGluIHRoZSBmb2xsb3dpbmcgdGFi bGUsIGluCisgICB3aGljaCB0aGUgc2FtcGxlIHZhbHVlcyBhcmUgZm9yIGEgImxhcmdlIG1lbW9y eSBtb2RlbCIgYnVpbGQgb2YKKyAgIEMtS2VybWl0LCB0eXBpY2FsIGZvciBtb2Rlcm4gcGxhdGZv cm1zIChMaW51eCwgU29sYXJpcywgQUlYLCBWTVMsIGV0YykuCisgICBZb3UgY2FuIHNlZSB0aGUg dmFsdWVzIGZvciB5b3VyIHZlcnNpb24gb2YgS2VybWl0IGJ5IGdpdmluZyB0aGUgU0hPVworICAg RkVBVFVSRVMgY29tbWFuZC4gVGhlIG1heGltdW0gbGVuZ3RoIGZvciBhIEtlcm1pdCBjb21tYW5k IChDTURCTCkgYWxzbworICAgZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsZW5ndGggZm9yIGEgbWFj cm8gZGVmaW5pdGlvbiwgc2luY2UgREVGSU5FIGlzCisgICBpdHNlbGYgYSBjb21tYW5kLiBUaGUg bWF4aW11bSBsZW5ndGggZm9yIGEgdmFyaWFibGUgbmFtZSBpcyBiZXR3ZWVuIDI1NgorICAgYW5k IDQwOTYgY2hhcmFjdGVycywgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybTsgZm9yIGFycmF5IGRl Y2xhcmF0aW9ucworICAgYW5kIHJlZmVyZW5jZXMsIHRoYXQgaW5jbHVkZXMgdGhlIHN1YnNjcmlw dC4KKworICAgSXRlbSBTeW1ib2wgU2FtcGxlCisgICBWYWx1ZSBEZWZpbml0aW9uCisgICBOdW1i ZXIgb2YgY2hhcmFjdGVycyBpbiBhIGNvbW1hbmQgQ01EQkwgMzI3NjMgY2t1Y21kLmgKKyAgIE51 bWJlciBvZiBjaGFycyBpbiBhIGZpZWxkIG9mIGEgY29tbWFuZCAgICBBVE1CTCAxMDIzOCBja3Vj bWQuaAorICAgTmVzdGluZyBsZXZlbCBmb3IgY29tbWFuZCBmaWxlcyBNQVhUQUtFIDU0ICAgY2t1 dXNyLmgKKyAgIE5lc3RpbmcgbGV2ZWwgZm9yIG1hY3JvcyBNQUNMRVZFTCAxMjggY2t1dXNyLmgK KyAgIE5lc3RpbmcgbGV2ZWwgZm9yIEZPUiAvIFdISUxFIGxvb3BzIEZPUkRFUFRIIDMyIGNrdXVz ci5oCisgICBOdW1iZXIgb2YgbWFjcm9zIE1BQ19NQVggMTYzODQgY2t1dXNyLmgKKyAgIFNpemUg b2YgSU5QVVQgYnVmZmVyIElOUEJVRlNJWiA0MDk2IGNrdXVzci5oCisgICBNYXhpbXVtIGZpbGVz IHRvIG1hdGNoIGEgd2lsZGNhcmQgTUFYV0xEICAgIDEwMjQwMCBja2NkZWIuaAorICAgRmlsZXNw ZWNzIGluIE1TRU5EIGNvbW1hbmQgTVNFTkRNQVggMTAyNCBja3V1c3IuaAorICAgTGVuZ3RoIGZv ciBHT1RPIHRhcmdldCBsYWJlbCBMQkxTSVogNTAgY2t1dXNyLmgKKyAgIFxmZXhlY3V0ZSgpIHJl Y3Vyc2lvbiBkZXB0aCBsaW1pdCBDTURERVAgNjQgY2t1Y21kLmgKKworICAgSWYgeW91IG5lZWQg dG8gZGVmaW5lIGEgbWFjcm8gdGhhdCBpcyBsb25nZXIgdGhhbiBDTURCTCwgeW91IGNhbiBicmVh aworICAgdGhlIG1hY3JvIHVwIGludG8gc3ViLW1hY3JvcyBvciByZXdyaXRlIHRoZSBtYWNybyBh cyBhIGNvbW1hbmQgZmlsZS4gSW4KKyAgIGEgcGluY2ggeW91IGNhbiBhbHNvIHJlZGVmaW5lIENN REJMIGFuZCByZWNvbXBpbGUgQy1LZXJtaXQuIEFsbCBvZgorICAgdGhlc2UgbnVtYmVycyByZXBy ZXNlbnQgdHJhZGVvZmZzOiB0aGUgYmlnZ2VyIHRoZSBudW1iZXIsIHRoZSBtb3JlCisgICAicG93 ZXJmdWwiIEtlcm1pdCBpbiB0aGUgY29ycmVzcG9uZGluZyBhcmVhLCBidXQgYWxzbyB0aGUgYmln Z2VyIHRoZQorICAgcHJvZ3JhbSBpbWFnZSBhbmQgcG9zc2libHkgZGlzayBmb290cHJpbnQsIGFu ZCB0aGUgbG9uZ2VyIGl0IHRha2VzIHRvCisgICBsb2FkIGFuZCBpbml0aWFsaXplLgorCisgICBJ biB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXI6CisKKyAgICAgKiBFTUFDUy0gb3IgVkkt c3R5bGUgY29tbWFuZCBsaW5lIGVkaXRpbmcgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgKiBFZGl0 aW5nIGtleXMgYXJlIGhhcmR3aXJlZCAoQ3RybC1VLCBDdHJsLVcsIGV0YykuCisKKyAgIElmIHlv dSBpbnRlcnJ1cHQgQy1LZXJtaXQgYmVmb3JlIGl0IGhhcyBpc3N1ZWQgaXRzIGZpcnN0IHByb21w dCwgaXQKKyAgIHdpbGwgZXhpdC4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW5ub3QgaW50ZXJydXB0 IGV4ZWN1dGlvbiBvZiB0aGUKKyAgIGluaXRpYWxpemF0aW9uIGZpbGUsIG9yIG9mIGFuICJhcHBs aWNhdGlvbiBmaWxlIiAoZmlsZSB3aG9zZSBuYW1lIGlzCisgICBnaXZlbiBhcyB0aGUgZmlyc3Qg Y29tbWFuZC1saW5lIGFyZ3VtZW50KSwgb3Igb2YgYW4gYWx0ZXJuYXRpdmUKKyAgIGluaXRpYWxp emF0aW9uIGZpbGUgKCIteSBmaWxlbmFtZSIpLCBhbmQgZ2V0IHRvIHRoZSBwcm9tcHQuIFRoZXJl IGlzLAorICAgaG93ZXZlciwgb25lIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6IHlvdSAqY2FuKiBp bnRlcnJ1cHQgY29tbWFuZHMgLS0KKyAgIGluY2x1ZGluZyBUQUtFIGNvbW1hbmRzIC0tIGdpdmVu IGluIHRoZSAnLUMgImNvbW1hbmQgbGlzdCInCisgICBjb21tYW5kLWxpbmUgYXJndW1lbnQgYW5k IC0tIGlmIHRoZXJlIHdlcmUgbm8gYWN0aW9uIGNvbW1hbmRzIGFtb25nIHRoZQorICAgY29tbWFu ZC1saW5lIGFyZ3VtZW50cyAtLSB5b3Ugd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgQy1LZXJtaXQg cHJvbXB0LgorICAgU28sIGZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBzdGFydCBDLUtlcm1p dCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQKKyAgIGV4ZWN1dGVzIGEgY29tbWFuZCBmaWxlIGJlZm9y ZSBpc3N1aW5nIGl0cyBmaXJzdCBwcm9tcHQsIGFuZCB5b3UgYWxzbworICAgd2FudCB0byBiZSBh YmxlIHRvIGludGVycnVwdCB0aGUgY29tbWFuZCBmaWxlIGFuZCBnZXQgdG8gdGhlIHByb21wdCwK KyAgIGluY2x1ZGUgYSBUQUtFIGNvbW1hbmQgZm9yIHRoZSBkZXNpcmVkIGNvbW1hbmQgaW4gdGhl IC1DIGFyZ3VtZW50LCBmb3IKKyAgIGV4YW1wbGU6CisKKyAga2VybWl0IC1DICJ0YWtlIGRpYWwu c2NyIgorCisgICBBdCB0aGUgY29tbWFuZCBwcm9tcHQsIGlmIHlvdSB1c2UgdGhlIGJhY2tzbGFz aCAoXCkgcHJlZml4IHRvIGVudGVyIGEKKyAgIGNvbnRyb2wgY2hhcmFjdGVyLCBzcGFjZSwgb3Ig cXVlc3Rpb24gbWFyayBpbnRvIGEgY29tbWFuZCBsaXRlcmFsbHksCisgICB0aGUgYmFja3NsYXNo IGRpc2FwcGVhcnMgYW5kIGlzIHJlcGxhY2VkIGJ5IHRoZSBxdW90ZWQgY2hhcmFjdGVyLiBJZiBp dAorICAgd2FzIGEgY29udHJvbCBjaGFyYWN0ZXIsIGl0IGlzIHNob3duIGFzIGEgY2lyY3VtZmxl eCAoXikuIFRoaXMgYWxsb3dzCisgICBlZGl0aW5nIChiYWNrc3BhY2UsIGRlbGV0ZSwgQ3RybC1X KSB0byB3b3JrIGNvcnJlY3RseSBldmVuIGZvciBjb250cm9sCisgICBjaGFyYWN0ZXJzLgorCisg ICBQcmlvdCB0byBDLUtlcm1pdCA4LjAsIHRoZSBvbmx5IHdheSB0byBpbmNsdWRlIGEgY29tbWEg bGl0ZXJhbGx5IGluIGEKKyAgIG1hY3JvIGRlZmluaXRpb24gLS0gYXMgb3Bwb3NlZCB0byBoYXZp bmcgaXQgc2VwYXJhdGUgY29tbWFuZHMgd2l0aGluCisgICB0aGUgZGVmaW5pdGlvbiAtLSBpcyB0 byBlbnRlciBpdHMgQVNDSUkgdmFsdWUgKDQ0KSBpbiBiYWNrc2xhc2gKKyAgIG5vdGF0aW9uLCBl LmcuOgorCisgIERFRklORSBST1dTIFJVTiBNT0RFIENPODBcezQ0fVwlMQorCisgICBJbiBDLUtl cm1pdCA4LjAgeW91IGNhbiB1c2UgY29uc3RydWN0aW9ucyBsaWtlIHRoaXM6CisKKyAgREVGSU5F IFJPV1MgUlVOIE1PREUgIkNPODAsXCUxIgorCisgICBJZiB5b3UgcXVvdGUgc3BlY2lhbCBjaGFy YWN0ZXJzIGluIGEgZmlsZW5hbWUgKGUuZy4gaW4gdGhlIFNFTkQKKyAgIGNvbW1hbmQpLCBmaWxl bmFtZSBjb21wbGV0aW9uIG1heSBzZWVtIHRvIHdvcmsgaW5jb3JyZWN0bHkuIEZvcgorICAgZXhh bXBsZSwgaWYgeW91IGhhdmUgYSBmaWxlIHdob3NlIG5hbWUgaXMgYSpiICh0aGUgbmFtZSByZWFs bHkgY29udGFpbnMKKyAgIGFuIGFzdGVyaXNrKSwgYW5kIHlvdSB0eXBlICJzZW5kIGFcXCo8RVND PiIsIHRoZSAiYiIgZG9lcyBub3QgYXBwZWFyLAorICAgbm9yIHdpbGwgQ3RybC1SIHJlZGlzcGxh eSB0aGUgY29tcGxldGVkIG5hbWUgY29ycmVjdGx5LiBCdXQgaW50ZXJuYWxseQorICAgdGhlIGZp bGUgbmFtZSBpcyByZWNvZ25pemVkIGFueXdheS4KKworICAgUXVlc3Rpb24tbWFyayBoZWxwIGRv ZXMgbm90IHdvcmsgZHVyaW5nIGV4ZWN1dGlvbiBvZiBhbiBBU0tRIGNvbW1hbmQuCisgICBUaGUg cXVlc3Rpb24gbWFya3MgYXJlIHNpbXBseSBhY2NlcHRlZCBhcyB0ZXh0LgorCisgICBJbiBPVVRQ VVQgY29tbWFuZHMgb25seSwgXEIgc2VuZHMgYSBCUkVBSyBzaWduYWwsIFxMIHNlbmRzIGEgTG9u ZyBCUkVBSworICAgc2lnbmFsLCBhbmQgXE4gc2VuZHMgYSBOVUwgKEFTQ0lJIDApLiBCUkVBSyBh bmQgTG9uZyBCUkVBSyBhcmUgc3BlY2lhbAorICAgc2lnbmFscywgbm90IGNoYXJhY3RlcnMsIGFu ZCBOVUwgaXMgYSBjaGFyYWN0ZXIgdGhhdCBub3JtYWxseSBjYW5ub3QgYmUKKyAgIGluY2x1ZGVk IGluIGEgQyBzdHJpbmcsIHNpbmNlIGl0IGlzIHRoZSBDIHN0cmluZyB0ZXJtaW5hdG9yLiBJZiB5 b3UKKyAgIHJlYWxseSB3YW50IHRvIG91dHB1dCBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhIEIs IGFuIEwsIG9yIGFuIE4gKGFzIGlzCisgICBuZWVkZWQgdG8gY29uZmlndXJlIGNlcnRhaW4gbW9k ZW1zLCBldGMpLCBkb3VibGUgdGhlIGJhY2tzbGFzaCwgZS5nLgorICAgIm91dHB1dCBcXEIiLiBJ biBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIsIHlvdSBjYW4gZGlzYXJtIGFuZCByZS1hcm0gdGhlCisg ICBzcGVjaWFsIE9VVFBVVC1jb21tYW5kIGVzY2FwZXMgKFxCLCBcTCwgYW5kIFxOKSB3aXRoIFNF VCBPVVRQVVQKKyAgIFNQRUNJQUwtRVNDQVBFUyB7IE9GRiwgT04gfS4KKworICAgV2hlbiB1c2lu ZyB0aGUgY29tbWFuZC1saW5lIHByb2Nlc3NvciAoImtlcm1pdCAtbCAvZGV2L3R0eTAwIC1iIDE5 MjAwIiwKKyAgIGV0YyksIG5vdGUgdGhhdCBpbiBzb21lIGNhc2VzIHRoZSBvcmRlciBvZiB0aGUg Y29tbWFuZC1saW5lIG9wdGlvbnMKKyAgIG1ha2VzIGEgZGlmZmVyZW5jZSwgY29udHJhcnkgdG8g dGhlIGV4cGVjdGF0aW9uIHRoYXQgb3JkZXIgb2YKKyAgIGNvbW1hbmQtbGluZSBvcHRpb25zIHNo b3VsZCBub3QgbWF0dGVyLiBGb3IgZXhhbXBsZSwgdGhlIC1iIG9wdGlvbiBtdXN0CisgICBiZSBn aXZlbiBhZnRlciB0aGUgLWwgb3B0aW9uIGlmIGl0IGlzIHRvIGFmZmVjdCB0aGUgZGV2aWNlIHNw ZWNpZmllZCBpbgorICAgdGhlIC1sIG9wdGlvbi4KKworMy4gTVVMVElQTEUgU0VTU0lPTlMKKwor ICAgWyBbNDZdVG9wIF0gWyBbNDddQ29udGVudHMgXSBbIFs0OF1OZXh0IF0gWyBbNDldUHJldmlv dXMgXQorCisgICBDLUtlcm1pdCA3LjAgYW5kIGVhcmxpZXIgZG8gbm90IHN1cHBvcnQgbXVsdGlw bGUgc2Vzc2lvbnMuIFdoZW4geW91IFNFVAorICAgTElORSAob3IgU0VUIFBPUlQsIHNhbWUgdGhp bmcpIHRvIGEgbmV3IGRldmljZSwgb3IgU0VUIEhPU1QgdG8gYSBuZXcKKyAgIGhvc3QsIHRoZSBw cmV2aW91cyBTRVQgTElORSBkZXZpY2Ugb3IgbmV0d29yayBob3N0IGNvbm5lY3Rpb24gaXMKKyAg IGNsb3NlZCwgcmVzdWx0aW5nIGluIGhhbmd1cCBvZiB0aGUgbW9kZW0gb3IgdGVybWluYXRpb24g b2YgdGhlIG5ldHdvcmsKKyAgIGNvbm5lY3Rpb24uIEluIHdpbmRvd2luZyBlbnZpcm9ubWVudHMg bGlrZSBIUC1WVUUsIE5lWFRTVEVQLCBXaW5kb3dzLAorICAgT1MvMiwgZXRjLCB5b3UgY2FuIHJ1 biBzZXBhcmF0ZSBjb3BpZXMgb2YgS2VybWl0IGluIGRpZmZlcmVudCB3aW5kb3dzCisgICB0byBh Y2hpZXZlIG11bHRpcGxlIHNlc3Npb25zLgorCisgICBUbyBhY2hpZXZlIG11bHRpcGxlIHNlc3Np b25zIHRocm91Z2ggYSBzaW5nbGUgc2VyaWFsIHBvcnQgKGUuZy4gd2hlbgorICAgZGlhbGluZyB1 cCksIHlvdSBjYW4gaW5zdGFsbCBTTElQIG9yIFBQUCBvbiB5b3VyIGNvbXB1dGVyIGFuZCB0aGVu IHVzZQorICAgQy1LZXJtaXQncyBUQ1AvSVAgc3VwcG9ydCBvdmVyIHRoZSBTTElQIG9yIFBQUCBj b25uZWN0aW9uLCBhc3N1bWluZyB5b3UKKyAgIGFsc28gaGF2ZSBUQ1AvSVAgbmV0d29ya2luZyBp bnN0YWxsZWQgb24geW91ciBjb21wdXRlci4KKworICAgQy1LZXJtaXQgOC4wIGhhcyB0aGUgc2Ft ZSByZXN0cmljdGlvbiBvbiBTRVQgTElORSBhbmQgU0VUIEhPU1QKKyAgIHNlc3Npb25zOiBvbmx5 IG9uZSByZWd1bGFyIHNlc3Npb24gKGRpYWxvdXQsIFRlbG5ldCwgZXRjKSBjYW4gYmUgb3Blbgor ICAgYXQgYSB0aW1lLiBIb3dldmVyLCB2ZXJzaW9uIDguMCBhZGRzIHR3byBuZXcga2luZHMgb2Yg c2Vzc2lvbnM6IEZUUCBhbmQKKyAgIEhUVFA7IG9uZSBvciBib3RoIG9mIHRoZXNlIGNhbiBiZSBv cGVuIGF0IHRoZSBzYW1lIGFzIGEgcmVndWxhcgorICAgc2Vzc2lvbi4KKworNC4gTkVUV09SSyBD T05ORUNUSU9OUworCisgICBbIFs1MF1Ub3AgXSBbIFs1MV1Db250ZW50cyBdIFsgWzUyXU5leHQg XSBbIFs1M11QcmV2aW91cyBdCisKK0ZUUCBDbGllbnQgQnVncworCisgICBUaGUgVW5peCBDLUtl cm1pdCA4LjAuMjA2IEZUUCBjbGllbnQgaGFkIHRoZSBmb2xsb3dpbmcgYnVncyBhdCB0aGUgdGlt ZQorICAgbW9zdCBvZiB0aGUgOC4wLjIwNiBiaW5hcmllcyB3ZXJlIGJ1aWx0IGZvciB0aGUgQy1L ZXJtaXQgOC4wIENEUk9NOgorCisgICAgMS4gRlRQIE1HRVQgZmFpbHMgd2hlbiBkaXJlY3Rvcnkg c2VnbWVudHMgY29udGFpbiB3aWxkY2FyZHMsIGFzIGluCisgICAgICAgImZ0cCBtZ2V0ICovZGF0 YS8qLmRhdCIuIFdvcmsgYXJvdW5kIGJ5IGRvaW5nIGEgc2VwYXJhdGUgTUdFVCBmb3IKKyAgICAg ICBlYWNoIHNvdXJjZSBkaXJlY3RvcnkuCisgICAgMi4gRlRQIE1HRVQgY2FuIGZhaWwgb3IgcHJv ZHVjZSByYW5kb20gc2lkZSBlZmZlY3RzIGlmIHlvdSBoYXZlIGEKKyAgICAgICBUTVBESVIgb3Ig Q0tfVE1QIGVudmlyb25tZW50IHZhcmlhYmxlIGRlZmluaXRpb24gaW4gZWZmZWN0LCBvciBhCisg ICAgICAgU0VUIFRFTVAtRElSRUNUT1JZIHZhbHVlLCBsb25nZXIgdGhhbiA3IGNoYXJhY3RlcnMu IFdvcmsgYXJvdW5kIGJ5CisgICAgICAgZ2l2aW5nIGEgU0VUIFRFTVAtRElSRUNUT1JZIGNvbW1h bmQgd2l0aCBhIHNob3J0IHZhbHVlLCBzdWNoIGFzCisgICAgICAgIi90bXAiLgorCisgICBUaGVz ZSB0d28gYnVncyBhcmUgZml4ZWQgaW4gdGhlIHNvdXJjZSBjb2RlIHRoYXQgaXMgaW5jbHVkZWQg b24gdGhlCisgICBDRFJPTSwgYW5kIGFsc28gaW4gS2VybWl0IDk1IDIuMS4xLiBZb3UgY2FuIHRl bGwgaWYgYSBDLUtlcm1pdCA4LjAuMjA2CisgICBiaW5hcnkgaGFzIHRoZXNlIGZpeGVzIGJ5IHR5 cGluZyBTSE9XIFZFUlNJT047IGlmIGl0IHNheXMgIkZUUCBDbGllbnQsCisgICA4LjAuMjAwLCAy NCBPY3QgMjAwMiIgaXQgaGFzIHRoZSBmaXhlczsgaWYgdGhlIGVkaXQgbnVtYmVyIGlzIGxlc3Mg dGhhdAorICAgMjAwLCBpdCBkb2Vzbid0LCBpbiB3aGljaCBjYXNlIGNhbiBidWlsZCBhIG5ldyBi aW5hcnkgZnJvbSB0aGUgc291cmNlCisgICBjb2RlIChvciBjb250YWN0IHVzIGFuZCB3ZSdsbCB0 cnkgdG8gZ2V0IGdldCBvbmUgZm9yIHlvdSkuCisKK01ha2luZyBUQ1AvSVAgQ29ubmVjdGlvbnMg Q2FuIFRha2UgYSBMb25nIFRpbWUKKworICAgVGhlIG1vc3QgZnJlcXVlbnRseSBhc2tlZCBxdWVz dGlvbiBpbiBtYW55IG5ld3Nncm91cHMgaXMgIldoeSBkb2VzIGl0CisgICB0YWtlIHN1Y2ggYSBs b25nIHRpbWUgdG8gbWFrZSBhIFRlbG5ldCBjb25uZWN0aW9uIHRvIChvciBmcm9tKSBteQorICAg KGUuZy4pIExpbnV4IFBDPyIgKHRoaXMgYXBwbGllcyB0byBLZXJtaXQgYXMgd2VsbCBhcyB0byBy ZWd1bGFyIFRlbG5ldAorICAgY2xpZW50cyk6CisKKyAgICAxLiBNb3N0IFRlbG5ldCBzZXJ2ZXJz IHBlcmZvcm0gcmV2ZXJzZSBETlMgbG9va3VwcyBvbiB0aGUgY2xpZW50IGZvcgorICAgICAgIHNl Y3VyaXR5IGFuZC9vciBsb2dnaW5nIHJlYXNvbnMuIElmIHRoZSBUZWxuZXQgY2xpZW50J3MgaG9z dCBjYW5ub3QKKyAgICAgICBiZSBmb3VuZCBieSB0aGUgc2VydmVyJ3MgbG9jYWwgRE5TIHNlcnZl ciwgdGhlIEROUyByZXF1ZXN0IGdvZXMgb3V0CisgICAgICAgdG8gdGhlIEludGVybmV0IGF0IGxh cmdlLCBhbmQgdGhpcyBjYW4gdGFrZSBxdWl0ZSBzb21lIHRpbWUuIFRoZQorICAgICAgIHNvbHV0 aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBtYWtlIHN1cmUgdGhhdCBib3RoIGNsaWVudCBhbmQg aG9zdAorICAgICAgIGFyZSByZWdpc3RlcmVkIGluIEROUy4KKyAgICAyLiBDLUtlcm1pdCBpdHNl bGYgcGVyZm9ybXMgcmV2ZXJzZSBETlMgbG9va3VwcyB1bmxlc3MgeW91IHRlbGwgaXQgbm90Cisg ICAgICAgdG8uIFRoaXMgaXMgdG8gYWxsb3cgQy1LZXJtaXQgdG8gbGV0IHlvdSBrbm93IHdoaWNo IGhvc3QgaXQgaXMKKyAgICAgICBhY3R1YWxseSBjb25uZWN0ZWQgdG8gaW4gY2FzZSB5b3UgaGF2 ZSBtYWRlIGEgY29ubmVjdGlvbiB0byBhICJob3N0CisgICAgICAgcG9vbCIgKG11bHRpaG9tZWQg aG9zdCkuIFlvdSBjYW4gZGlzYWJsZSBDLUtlcm1pdCdzIHJldmVyc2UgRE5TCisgICAgICAgbG9v a3VwIHdpdGggU0VUIFRDUCBSRVZFUlNFLUROUy1MT09LVVAgT0ZGLgorICAgIDMuIEMtS2VybWl0 IDcuMCBhbmQgbGF0ZXIgc3RyaWN0bHkgZW5mb3JjZSBUZWxuZXQgcHJvdG9jb2wgcnVsZXMuIE9u ZQorICAgICAgIHN1Y2ggcnVsZSBpcyB0aGF0IGNlcnRhaW4gbmVnb3RpYXRpb25zIG11c3QgYmUg cmVzcG9uZGVkIHRvLiBJZgorICAgICAgIEMtS2VybWl0IHNlbmRzIGEgc3VjaCBhIG5lZ290aWF0 aW9uIGFuZCB0aGUgaG9zdCBkb2VzIG5vdCByZXNwb25kLAorICAgICAgIEMtS2VybWl0IHdhaXRz IGEgbG9uZyB0aW1lIGZvciB0aGUgcmVwbHkgKGluIGNhc2UgdGhlIG5ldHdvcmsgaXMKKyAgICAg ICBjb25nZXN0ZWQgb3IgdGhlIGhvc3QgaXMgc2xvdyksIGJ1dCBldmVudHVhbGx5IHdpbGwgdGlt ZSBvdXQuIFRvCisgICAgICAgZWxpbWluYXRlIHRoZSB3YWl0cyAoYW5kIHRoZXJlZm9yZSByaXNr IHBvc3NpYmxlIHByb3RvY29sCisgICAgICAgbWlzbWF0Y2hlcyAtLSBvciB3b3JzZSAtLSBiZXR3 ZWVuIFRlbG5ldCBjbGllbnQgYW5kIHNlcnZlciksIHRlbGwKKyAgICAgICBDLUtlcm1pdCB0byBT RVQgVEVMTkVUIFdBSVQgT0ZGIChvciBpbmNsdWRlIHRoZSAvTk9XQUlUIHN3aXRjaCB3aXRoCisg ICAgICAgdGhlIFRFTE5FVCBjb21tYW5kKS4KKworVGhlIFJsb2dpbiBDbGllbnQKKworICAgSW4g bXVsdGl1c2VyIG9wZXJhdGluZyBzeXN0ZW1zIHN1Y2ggYXMgVU5JWCBhbmQgVk1TLCBUQ1AvSVAg UmxvZ2luCisgICBjb25uZWN0aW9ucyBhcmUgYXZhaWxhYmxlIG9ubHkgdG8gcHJpdmlsZWdlZCB1 c2Vycywgc2luY2UgImxvZ2luIiBpcyBhCisgICBwcml2aWxlZ2VkIHNvY2tldC4gQXNzdW1pbmcg eW91IGFyZSBhbGxvd2VkIHRvIHVzZSBpdCBpbiB0aGUgZmlyc3QKKyAgIHBsYWNlLCBpdCBpcyBs aWtlbHkgdG8gYmVoYXZlIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGF0IHR5cGUgb2YKKyAg IGhvc3QgeW91IGFyZSBybG9nZ2luZyBpbiB0bywgZHVlIHRvIHRlY2huaWNhbCByZWFzb25zIGhh dmluZyB0byBkbyB3aXRoCisgICBjb25mbGljdGluZyBpbnRlcnByZXRhdGlvbnMgb2YgUkZDNzkz IChPdXQtT2YtQmFuZCBEYXRhKSBhbmQgUmxvZ2luCisgICAoUkZDMTEyMikuLi4gIlNwZWNpZmlj YWxseSwgdGhlIFRDUCB1cmdlbnQgcG9pbnRlciBpbiBCU0QgcG9pbnRzIHRvIHRoZQorICAgYnl0 ZSBhZnRlciB0aGUgdXJnZW50IGRhdGEgYnl0ZSwgYW5kIGFuIFJGQy1jb21wbGlhbnQgVENQIHVy Z2VudAorICAgcG9pbnRlciBwb2ludHMgdG8gdGhlIHVyZ2VudCBkYXRhIGJ5dGUuIEFzIGEgcmVz dWx0LCBpZiBhbiBhcHBsaWNhdGlvbgorICAgc2VuZHMgdXJnZW50IGRhdGEgZnJvbSBhIEJTRC1j b21wYXRpYmxlIGltcGxlbWVudGF0aW9uIHRvIGFuCisgICBbNTRdUkZDLTExMjIgY29tcGF0aWJs ZSBpbXBsZW1lbnRhdGlvbiB0aGVuIHRoZSByZWNlaXZlciB3aWxsIHJlYWQgdGhlCisgICB3cm9u ZyB1cmdlbnQgZGF0YSBieXRlIChpdCB3aWxsIHJlYWQgdGhlIGJ5dGUgbG9jYXRlZCBhZnRlciB0 aGUgY29ycmVjdAorICAgYnl0ZSBpbiB0aGUgZGF0YSBzdHJlYW0gYXMgdGhlIHVyZ2VudCBkYXRh IGJ5dGUpLiIgUmxvZ2luIHJlcXVpcmVzIHRoZQorICAgdXNlIG9mIE9PQiBkYXRhIHdoaWxlIFRl bG5ldCBkb2VzIG5vdC4gVGhlcmVmb3JlLCBpdCBpcyBwb3NzaWJsZSBmb3IKKyAgIFRlbG5ldCB0 byB3b3JrIGJldHdlZW4gYWxsIHN5c3RlbXMgd2hpbGUgQlNEIGFuZCBTeXN0ZW0gViBUQ1AvSVAK KyAgIGltcGxlbWVudGF0aW9ucyBhcmUgYWxtb3N0IGFsd2F5cyBhIGJhZCBtaXguCisKK1RoZSBU ZWxuZXQgQ2xpZW50CisKKyAgIE9uIGEgVENQL0lQIFRFTE5FVCBjb25uZWN0aW9uLCB5b3Ugc2hv dWxkIG5vcm1hbGx5IGhhdmUgUEFSSVRZIHNldCB0bworICAgTk9ORSBhbmQgKGV4Y2VwdCBpbiBW TVMgQy1LZXJtaXQpIEZMT1ctQ09OVFJPTCBhbHNvIHNldCB0byBOT05FLiBJZgorICAgZmlsZSB0 cmFuc2ZlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhlc2Ugc2V0dGluZ3MgKGZvciBleGFtcGxlLCBi ZWNhdXNlCisgICB0aGUgcmVtb3RlIFRFTE5FVCBzZXJ2ZXIgb25seSBnaXZlcyBhIDctYml0IGRh dGEgcGF0aCksIHVzZSBTRVQgUEFSSVRZCisgICBTUEFDRS4gRG8gbm90IHVzZSBTRVQgUEFSSVRZ IE1BUkssIEVWRU4sIG9yIE9ERCBvbiBhIFRFTE5FVCBjb25uZWN0aW9uCisgICAtLSBpdCBpbnRl cmZlcmVzIHdpdGggVEVMTkVUIHByb3RvY29sLgorCisgICBJZiBlY2hvaW5nIGRvZXMgbm90IHdv cmsgcmlnaHQgYWZ0ZXIgY29ubmVjdGluZyB0byBhIG5ldHdvcmsgaG9zdCBvcgorICAgYWZ0ZXIg ZGlhbGluZyB0aHJvdWdoIGEgVENQL0lQIG1vZGVtIHNlcnZlciwgaXQgcHJvYmFibHkgbWVhbnMg dGhhdCB0aGUKKyAgIFRFTE5FVCBzZXJ2ZXIgb24gdGhlIGZhciBlbmQgb2YgdGhlIGNvbm5lY3Rp b24gaXMgZXhlY3V0aW5nIHRoZSBURUxORVQKKyAgIHByb3RvY29sIGluY29ycmVjdGx5LiBBZnRl ciBpbml0aWFsbHkgY29ubmVjdGluZyBhbmQgZGlzY292ZXJpbmcKKyAgIGluY29ycmVjdCBlY2hv aW5nIChjaGFyYWN0ZXJzIGFyZSBlY2hvZWQgdHdpY2UsIG9yIG5vdCBhdCBhbGwpLCBlc2NhcGUK KyAgIGJhY2ssIGdpdmUgdGhlIGFwcHJvcHJpYXRlIFNFVCBEVVBMRVggY29tbWFuZCAoRlVMTCBv ciBIQUxGKSwgYW5kIHRoZW4KKyAgIENPTk5FQ1QgYWdhaW4uIEZvciBhIGNvbnNpc3RlbnRseSBt aXNiZWhhdmluZyBjb25uZWN0aW9uLCB5b3UgY2FuCisgICBhdXRvbWF0ZSB0aGlzIHByb2Nlc3Mg aW4gYSBtYWNybyBvciBUQUtFIGZpbGUuCisKKyAgIFRFTE5FVCBzZXNzaW9ucyBhcmUgdHJlYXRl ZCBqdXN0IGxpa2Ugc2VyaWFsIGNvbW11bmljYXRpb25zIHNlc3Npb25zIGFzCisgICBmYXIgYXMg InRlcm1pbmFsIGJ5dGVzaXplIiBhbmQgImNvbW1hbmQgYnl0ZXNpemUiIGFyZSBjb25jZXJuZWQu IElmIHlvdQorICAgbmVlZCB0byB2aWV3IGFuZC9vciBlbnRlciA4LWJpdCBjaGFyYWN0ZXJzIGR1 cmluZyBhIFRFTE5FVCBzZXNzaW9uLCB5b3UKKyAgIG11c3QgdGVsbCBDLUtlcm1pdCB0byBTRVQg VEVSTUlOQUwgQllURVNJWkUgOCwgU0VUIENPTU1BTkQgQllURVNJWkUgOCwKKyAgIGFuZCBTRVQg UEFSSVRZIE5PTkUuCisKKyAgIElmIHlvdSBTRVQgVEVMTkVUIERFQlVHIE9OIHByaW9yIHRvIG1h a2luZyBhIGNvbm5lY3Rpb24sIHByb3RvY29sCisgICBuZWdvdGlhdGlvbnMgd2lsbCBiZSBkaXNw bGF5ZWQgb24geW91ciBzY3JlZW4uIFlvdSBjYW4gYWxzbyBjYXB0dXJlCisgICB0aGVtIGluIHRo ZSBkZWJ1ZyBsb2cgKGFsb25nIHdpdGggZXZlcnl0aGluZyBlbHNlKSBhbmQgdGhlbiBleHRyYWN0 CisgICB0aGVtIGVhc2lseSwgc2luY2UgYWxsIFRlbG5ldCBuZWdvdGlhdGlvbnMgbGluZXMgYmVn aW4gd2l0aCAodXBwZXJjYXNlKQorICAgIlRFTE5FVCIuCisKK1RoZSBTU0ggQ2xpZW50CisKKyAg IEMtS2VybWl0IGRvZXMgbm90IGhhdmUgaXRzIG93biBidWlsdC1pbiBTU0ggY2xpZW50OyBpbnN0 ZWFkLCBpbiB0aGUKKyAgIFVuaXggdHJhZGl0aW9uLCB1c2VzIHRoZSBleHRlcm5hbCBTU0ggY2xp ZW50IHRvIGRvIHRoZSBTU0ggcGFydCwgYW5kCisgICBLZXJtaXQgZG9lcyBpdHMgdGhpbmcgb24g dG9wIC0tIGZpbGUgdHJhbnNmZXIsIHNjcmlwdGluZywgZXRjLiBVbmRlcgorICAgY2VydGFpbiBj aXJjdW1zdGFuY2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gaWRlbnRpZmllZCwgaXQgc29tZXRp bWVzCisgICBoYXBwZW5zIHRoYXQgYWZ0ZXIgbWFraW5nIGFuIFNTSCBjb25uZWN0aW9uIGZyb20g Qy1LZXJtaXQsIGxvZ2dpbmcgb3V0CisgICBmcm9tIHRoZSByZW1vdGUgaG9zdCwgYW5kIHBvcHBp bmcgYmFjayB0byB0aGUgbG9jYWwgQy1LZXJtaXQgcHJvZ3JhbSwKKyAgIHN1YnNlcXVlbnQgU1NI IGNvbW1hbmRzIGZpbGUgd2l0aCBhIG1lc3NhZ2UgbGlrZSAiTmV0d29yayB0eXBlIG5vdAorICAg c3VwcG9ydGVkIi4gU3RhcnRpbmcgYSBuZXcgY29weSBvZiBDLUtlcm1pdCBpcyB0aGUgd29ya2Fy b3VuZC4KKworNS4gTU9ERU1TIEFORCBESUFMSU5HCisKKyAgIFsgWzU1XVRvcCBdIFsgWzU2XUNv bnRlbnRzIF0gWyBbNTddTmV4dCBdIFsgWzU4XVByZXZpb3VzIF0KKworICAgRXh0ZXJuYWwgbW9k ZW1zIGFyZSByZWNvbW1lbmRlZCBiZWNhdXNlOgorCisgICAgICogVGhleSBkb24ndCBuZWVkIGFu eSBzcGVjaWFsIGRyaXZlcnMuCisgICAgICogVGhleSBhcmUgbGVzcyBsaWtlbHkgdG8gaW50ZXJm ZXJlIHdpdGggbm9ybWFsIG9wZXJhdGlvbiBvZiB5b3VyCisgICAgICAgY29tcHV0ZXIuCisgICAg ICogWW91IGNhbiB1c2UgdGhlIGxpZ2h0cyBhbmQgc3BlYWtlciB0byB0cm91Ymxlc2hvb3QgZGlh bGluZy4KKyAgICAgKiBZb3UgY2FuIHNoYXJlIHRoZW0gYW1vbmcgYWxsIHR5cGVzIG9mIGNvbXB1 dGVycy4KKyAgICAgKiBZb3UgY2FuIGVhc2lseSB0dXJuIHRoZW0gb2ZmIGFuZCBvbiB3aGVuIHBv d2VyLWN5Y2xpbmcgc2VlbXMKKyAgICAgICB3YXJyYW50ZWQuCisgICAgICogVGhleSBhcmUgbW9y ZSBsaWtlbHkgdG8gaGF2ZSBtYW51YWxzLgorCisgICBNb2RlbXMgY2FuIGJlIHVzZWQgYnkgQy1L ZXJtaXQgb25seSB3aGVuIHRoZXkgYXJlIHZpc2libGUgYXMgb3IgdGhyb3VnaAorICAgYSByZWd1 bGFyIHNlcmlhbCBwb3J0IGRldmljZS4gQ2VydGFpbiBtb2RlbXMgY2FuIG5vdCBiZSB1c2VkIGlu IHRoaXMKKyAgIG5vcm1hbCB3YXkgb24gbWFueSBraW5kcyBvZiBjb21wdXRlcnM6IFdpbm1vZGVt cywgUlBJIG1vZGVtcywKKyAgIENvbnRyb2xsZXJsZXNzIG1vZGVtcywgdGhlIElCTSBNd2F2ZSwg ZXRjOyBhbGwgb2YgdGhlc2UgcmVxdWlyZSBzcGVjaWFsCisgICBkcml2ZXJzIHRoYXQgcGVyZm9y bSBzb21lLCBtb3N0LCBvciBhbGwgb2YgdGhlIG1vZGVtJ3MgZnVuY3Rpb25zIGluCisgICBzb2Z0 d2FyZS4gU3VjaCBkcml2ZXJzIGFyZSBnZW5lcmFsbHkgTk9UIGF2YWlsYWJsZSBpbiBVTklYIG9y IG90aGVyCisgICBub24tV2luZG93cyAob3Igbm9uLU9TLzIsIGluIHRoZSBjYXNlIG9mIHRoZSBN d2F2ZSkgcGxhdGZvcm1zLgorCisgICBJbiBvcmRlciB0byBkaWFsIGEgbW9kZW0sIEMtS2VybWl0 IG11c3Qga25vdyB0aGUgbW9kZW0ncyByZXBlcnRvaXJlIG9mCisgICBjb21tYW5kcyBhbmQgcmVz cG9uc2VzLiBFYWNoIG1vZGVtIG1ha2UgYW5kIG1vZGVsIGlzIGxpa2VseSB0byBoYXZlIGEKKyAg IGRpZmZlcmVudCByZXBlcnRvaXJlLiBTaW5jZSBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5n IHdoaWNoIGtpbmQgb2YKKyAgIG1vZGVtIHdpbGwgYmUgZGlhbGVkLCBub3JtYWxseSB5b3UgaGF2 ZSB0byB0ZWxsIGl0IHdpdGggYSBTRVQgTU9ERU0KKyAgIFRZUEUgY29tbWFuZCwgZS5nLjoKKwor ICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzCisgIHNldCBsaW5lIC9kZXYvY3VhMAorICBzZXQg c3BlZWQgNTc2MDAKKyAgZGlhbCA3NjU0MzIxCisKKyAgIEluIHRoZSBlYXJseSBkYXlzLCB0aGVy ZSB3YXMgYSB3aWRlIHZhcmlldHkgb2YgbW9kZW1zIGFuZCBjb21tYW5kCisgICBsYW5ndWFnZXMu IE5vd2FkYXlzLCBhbG1vc3QgZXZlcnkgbW9kZW0gdXNlcyB0aGUgSGF5ZXMgQVQgY29tbWFuZCBz ZXQKKyAgIChidXQgd2l0aCBzb21lIGRpZmZlcmVuY2VzIGluIHRoZSBkZXRhaWxzKSBhbmQgaXRz IHN0YXJ0dXAKKyAgIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgZXJyb3IgY29ycmVjdGlvbiwgZGF0 YSBjb21wcmVzc2lvbiwgYW5kIGhhcmR3YXJlCisgICAoUlRTL0NUUykgZmxvdyBjb250cm9sLiBB cyBsb25nIGFzIEMtS2VybWl0IGlzIGNhcGFibGUgb2YgaGFyZHdhcmUgZmxvdworICAgY29udHJv bCAoYXMgaXQgaXMgb24gbWFueSwgYnV0IG5vdCBhbGwsIHRoZSBwbGF0Zm9ybXMgd2hlcmUgaXQg cnVucywKKyAgIHNpbmNlIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgZG9uJ3Qgc3VwcG9ydCBpdCks IHRoZSBtb2RlbSBjYW4gYmUgZGlhbGVkCisgICBpbW1lZGlhdGVseSwgd2l0aG91dCBsZW5ndGh5 IGNvbmZpZ3VyYXRpb24gZGlhbG9ncywgYW5kIGluIGZhY3QgdGhpcyBpcworICAgd2hhdCBTRVQg TU9ERU0gVFlQRSBHRU5FUklDLUhJR0gtU1BFRUQgZG9lcy4gSW4gQy1LZXJtaXQgOC4wLAorICAg R0VORVJJQy1ISUdILVNQRUVEIGhhcyBiZWNvbWUgdGhlIGRlZmF1bHQgbW9kZW0gdHlwZSwgc28g bm93IGl0IGlzCisgICB1c3VhbGx5IHBvc3NpYmxlIHRvIFNFVCBMSU5FLCBTRVQgU1BFRUQsIGFu ZCBESUFMIHdpdGhvdXQgaGF2aW5nIHRvCisgICBpZGVudGlmeSB5b3VyIG1vZGVtLiBJZiB0aGlz IGRvZXNuJ3Qgd29yaywgb2YgY291cnNlLCB0aGVuIHlvdSBtaWdodAorICAgaGF2ZSB0byBmYWxs IGJhY2sgdG8gdGhlIHRyYWRpdGlvbmFsIG1ldGhvZDogR2l2ZSBhIFNFVCBNT0RFTSBUWVBFIGZv cgorICAgYSBzcGVjaWZpYyBtb2RlbSBmaXJzdCwgdGhlbiBTRVQgTElORSwgU0VUIFNQRUVELCBh bmQgRElBTC4KKworICAgQW4gaW1wb3J0YW50IGNoYW5nZSBpbiBDLUtlcm1pdCA2LjAgaXMgdGhh dCB3aGVuIHlvdSBnaXZlIGEgU0VUIE1PREVNCisgICBUWVBFIGNvbW1hbmQgdG8gdGVsbCBLZXJt aXQgd2hhdCBraW5kIG9mIG1vZGVtIHlvdSBoYXZlLCBLZXJtaXQgYWxzbworICAgc2V0cyBhIG51 bWJlciBvZiBvdGhlciBtb2RlbS1yZWxhdGVkIHBhcmFtZXRlcnMgYXV0b21hdGljYWxseSBmcm9t IGl0cworICAgaW50ZXJuYWwgbW9kZW0gZGF0YWJhc2UuIFRodXMsIHRoZSBvcmRlciBpbiB3aGlj aCB5b3UgZ2l2ZQorICAgbW9kZW0tcmVsYXRlZCBjb21tYW5kcyBpcyBzaWduaWZpY2FudCwgd2hl cmVhcyBpbiBwcmlvciByZWxlYXNlcyB0aGV5CisgICBjb3VsZCBiZSBnaXZlbiBpbiBhbnkgb3Jk ZXIuCisKKyAgIEluIHBhcnRpY3VsYXIsIE1PREVNIFNQRUVELU1BVENISU5HIGlzIHNldCBhY2Nv cmRpbmcgdG8gd2hldGhlciB0aGUKKyAgIG1vZGVtIGlzIGtub3duIHRvIGJlIGNhcGFibGUgb2Yg c3BlZWQgYnVmZmVyaW5nLiBTRVQgTU9ERU0gVFlQRQorICAgSEFZRVMtMjQwMCBhdXRvbWF0aWNh bGx5IHR1cm5zIFNQRUVELU1BVENISU5HIE9OLCBiZWNhdXNlIHdoZW4gdGhlCisgICBIYXllcyAy NDAwIHJlcG9ydHMgYSBwYXJ0aWN1bGFyIHNwZWVkIGluIGl0cyBDT05ORUNUIG1lc3NhZ2UsIHRo YXQKKyAgIG1lYW5zIGl0cyBpbnRlcmZhY2Ugc3BlZWQgaGFzIGNoYW5nZWQgdG8gdGhhdCBzcGVl ZCwgYW5kIEMtS2VybWl0J3MKKyAgIG11c3QgY2hhbmdlIGFjY29yZGluZ2x5IGlmIGl0IGlzIHRv IGNvbnRpbnVlIGNvbW11bmljYXRpbmcuIFRoaXMgbWlnaHQKKyAgIGNhdXNlIHNvbWUgY29uZnVz aW9uIGlmIHlvdSB1c2UgInNldCBtb2RlbSB0eXBlIGhheWVzIiBmb3IgZGlhbGluZyBhCisgICBt b3JlIGFkdmFuY2VkIHR5cGUgb2YgbW9kZW0uCisKKyAgIFRoZSBuZXcgZGVmYXVsdCBmb3IgZmxv dyBjb250cm9sIGlzICJhdXRvIiwgbWVhbmluZyAiZG8gdGhlIHJpZ2h0IHRoaW5nCisgICBmb3Ig ZWFjaCB0eXBlIG9mIGNvbm5lY3Rpb24iLiBTbyAoZm9yIGV4YW1wbGUpIGlmIHlvdXIgdmVyc2lv biBvZgorICAgQy1LZXJtaXQgc3VwcG9ydHMgU0VUIEZMT1cgUlRTL0NUUyBhbmQgeW91ciBtb2Rl bSBhbHNvIHN1cHBvcnRzCisgICBSVFMvQ1RTLCB0aGVuIEtlcm1pdCBhdXRvbWF0aWNhbGx5IHNl dHMgaXRzIGZsb3cgY29udHJvbCB0byBSVFMvQ1RTIGFuZAorICAgc2V0IG1vZGVtJ3MgZmxvdyBj b250cm9sIHRvIFJUUy9DVFMgdG9vIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHVzZSB0aGUKKyAgIG1v ZGVtLgorCisgICBGb3IgdGhlc2UgcmVhc29ucywgZG9uJ3QgYXNzdW1lIHRoYXQgInNldCBtb2Rl bSB0eXBlIGhheWVzIiBzaG91bGQgYmUKKyAgIHVzZWQgZm9yIGFsbCBtb2RlbXMgdGhhdCB1c2Vz IHRoZSBIYXllcyBBVCBjb21tYW5kIHNldC4gInNldCBtb2RlbSB0eXBlCisgICBoYXllcyIgcmVh bGx5IGRvZXMgbWVhbiBIYXllcyAxMjAwIG9yIDI0MDAsIHdoaWNoIGluIHR1cm4gbWVhbnMgbm8K KyAgIGhhcmR3YXJlIGZsb3cgY29udHJvbCwgYW5kIG5vIHNwZWVkIGJ1ZmZlcmluZy4gVGhpcyBj aG9pY2Ugd2lsbCByYXJlbHkKKyAgIHdvcmsgd2l0aCBhIG1vZGVybiBoaWdoLXNwZWVkIG1vZGVt LgorCis2LiBESUFMSU5HIEhJTlRTIEFORCBUSVBTCisKKyAgIFsgWzU5XVRvcCBdIFsgWzYwXUNv bnRlbnRzIF0gWyBbNjFdTmV4dCBdIFsgWzYyXVByZXZpb3VzIF0KKworICAgSWYgeW91IGhhdmUg YSBoaWdoLXNwZWVkLCBlcnJvci1jb3JyZWN0aW5nLCBkYXRhLWNvbXByZXNzaW5nLAorICAgc3Bl ZWQtYnVmZmVyaW5nIG1vZGVtLCB5b3Ugc2hvdWxkIGZpeCB0aGUgbW9kZW0ncyBpbnRlcmZhY2Ug c3BlZWQgYXMKKyAgIGhpZ2ggYXMgcG9zc2libGUsIHByZWZlcmFibHkgKGF0IGxlYXN0KSBmb3Vy IHRpbWVzIGhpZ2hlciB0aGFuIGl0cworICAgbWF4aW11bSBjb25uZWN0aW9uIChtb2R1bGF0aW9u KSBzcGVlZCB0byBhbGxvdyBjb21wcmVzc2lvbiB0byB3b3JrIGF0CisgICBmdWxsIGFkdmFudGFn ZS4gSW4gdGhpcyB0eXBlIG9mIHNldHVwLCB5b3UgbXVzdCBhbHNvIGhhdmUgYW4gZWZmZWN0aXZl CisgICBtZWFucyBvZiBmbG93IGNvbnRyb2wgZW5hYmxlZCBiZXR3ZWVuIEMtS2VybWl0IGFuZCB0 aGUgbW9kZW0sCisgICBwcmVmZXJhYmx5IGhhcmR3YXJlIChSVFMvQ1RTKSBmbG93IGNvbnRyb2wu IE9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdAorICAgc3VwcG9ydCBoYXJkd2FyZSBmbG93IGNvbnRy b2wsIGl0IGlzIHVzdWFsbHkgcG9zc2libGUgdG8gc2VsZWN0CisgICBzb2Z0d2FyZSBmbG93IGNv bnRyb2wgKFhvbi9Yb2ZmKSwgYW5kIEMtS2VybWl0IHdpbGwgZG8gaXRzIGJlc3QgdG8gc2V0Cisg ICB0aGUgbW9kZW0gZm9yIGxvY2FsIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCB0b28gKGJ1dCB0aGVu LCBvZiBjb3Vyc2UsCisgICBDdHJsLVMgYW5kIEN0cmwtUSBjaGFyYWN0ZXJzIGNhbiBub3QgYmUg dHJhbnNtaXR0ZWQgb24gdGhlIGNvbm5lY3Rpb24pLgorCisgICBJZiB5b3UgYXJlIGhhdmluZyB0 cm91YmxlIGRpYWxpbmcgeW91ciBtb2RlbSwgU0VUIERJQUwgRElTUExBWSBPTiB0bworICAgd2F0 Y2ggdGhlIGRpYWxpbmcgaW50ZXJhY3Rpb25zIGJldHdlZW4gQy1LZXJtaXQgYW5kIHlvdXIgbW9k ZW0uIENvbnN1bHQKKyAgIENoYXB0ZXJzIDMtNCBvZiBbNjNdVXNpbmcgQy1LZXJtaXQgKDJuZCBF ZCkgZm9yIG1vZGVtLWRpYWxpbmcKKyAgIHRyb3VibGVzaG9vdGluZyBpbnN0cnVjdGlvbnMuIFRo ZSBmb2xsb3dpbmcgc2VjdGlvbnMgb2ZmZXIgc29tZQorICAgYWRkaXRpb25hbCBoaW50cyBhbmQg dGlwcy4KKworNi4xLiBTeW50YXgKKworICAgSWYgeW91IHdhbnQgdG8gZGlhbCBhIG51bWJlciB0 aGF0IHN0YXJ0cyB3aXRoICMsIHlvdSdsbCBuZWVkIHRvIHF1b3RlCisgICB0aGUgIiMiIGNoYXJh Y3RlciAoYXMgXCMgb3IgXHszNX0pLCBzaW5jZSBpdCBpcyBhbHNvIGEgY29tbWVudAorICAgaW50 cm9kdWNlcjoKKworICBDLUtlcm1pdD5kaWFsICM5ODc2NTQyMS0xLTIxMi01NTUxMjEyICAgOyBM b29rcyBsaWtlIGEgY29tbWVudAorICA/WW91IG11c3Qgc3BlY2lmeSBhIG51bWJlciB0byBkaWFs CisgIEMtS2VybWl0PmRpYWwgXCM5ODc2NTQyMS0xLTIxMi01NTUxMjEyICA7IFdvcmtzIE9LCisg IEMtS2VybWl0PmRpYWwgPSM5ODc2NTQyMS0xLTIxMi01NTUxMjEyICA7IFRoaXMgd29ya3MgdG9v CisKKyAgIFdoZW4gdXNpbmcgYSBkaWFsaW5nIGRpcmVjdG9yeSwgcmVtZW1iZXIgd2hhdCBoYXBw ZW5zIGlmIGEgbmFtZSBpcyBub3QKKyAgIGZvdW5kOgorCisgIEMtS2VybWl0PmRpYWwgeHl6Y29y cAorICBMb29rdXA6ICJ4eXpjb3JwIiAtIG5vdCBmb3VuZCAtIGRpYWxpbmcgYXMgZ2l2ZW4KKwor ICAgVGhpcyBub3JtYWxseSBkb2VzIG5vIGhhcm0sIGJ1dCBzb21lIG1vZGVtcyBtaWdodCBiZWhh dmUgc3RyYW5nZWx5IHdoZW4KKyAgIGdpdmVuIGRpYWwgc3RyaW5ncyB0aGF0IGNvbnRhaW4gY2Vy dGFpbiBsZXR0ZXJzLiBGb3IgZXhhbXBsZSwgYSBjZXJ0YWluCisgICBHZXJtYW4gbW9kZW0gdHJl YXRzIGFueSBkaWFsIHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBsZXR0ZXIgInMiIGFzIGEKKyAg IGNvbW1hbmQgdG8gZmV0Y2ggYSBudW1iZXIgZnJvbSBpdHMgaW50ZXJuYWwgbGlzdCwgYW5kIHJl cGxpZXMgT0sgdG8gdGhlCisgICBBVEQgY29tbWFuZCwgd2hpY2ggaXMgbm9ybWFsbHkgbm90IGEg dmFsaWQgcmVzcG9uc2UgZXhjZXB0IGZvciBwYXJ0aWFsCisgICBkaWFsaW5nLiBUbyBhdm9pZCB0 aGlzIHNpdHVhdGlvbiwgdXNlOgorCisgIGxvb2t1cCB4eXpjb3JwCisgIGlmIHN1Y2Nlc3MgZGlh bAorCis2LjIuIFRoZSBDYXJyaWVyIFNpZ25hbAorCisgICBSZW1lbWJlcjogSW4gbWFueSBDLUtl cm1pdCBpbXBsZW1lbnRhdGlvbnMgKGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZworICAgb3Bl cmF0aW5nIHN5c3RlbSAtLSBtb3N0bHkgV2luZG93cywgT1MvMiwgYW5kIFN5c3RlbS1WLWJhc2Vk IFVOSVgKKyAgIHZlcnNpb25zLCBhbmQgaW4gQy1LZXJtaXQgNy4wLCBhbHNvIFZNUyksIHlvdSBj YW4ndCBDT05ORUNUIHRvIGEgbW9kZW0KKyAgIGFuZCB0eXBlIHRoZSBtb2RlbSdzIGRpYWxpbmcg Y29tbWFuZCAobGlrZSAiQVREVDc2NTQzMjEiKSBtYW51YWxseSwKKyAgIHVubGVzcyB5b3UgZmly c3QgdGVsbCBDLUtlcm1pdCB0bzoKKworICBTRVQgQ0FSUklFUi1XQVRDSCBPRkYKKworICAgVGhp cyBpcyBiZWNhdXNlIChpbiB0aGVzZSBpbXBsZW1lbnRhdGlvbnMpLCB0aGUgQ09OTkVDVCBjb21t YW5kCisgICByZXF1aXJlcyB0aGUgbW9kZW0ncyBDYXJyaWVyIERldGVjdCAoQ0QpIHNpZ25hbCB0 byBiZSBvbiwgYnV0IHRoZSBDRAorICAgc2lnbmFsIGRvZXNuJ3QgY29tZSBvbiB1bnRpbCBhZnRl ciBkaWFsaW5nIGlzIGNvbXBsZXRlLiBUaGlzCisgICByZXF1aXJlbWVudCBpcyB3aGF0IGFsbG93 cyBDLUtlcm1pdCB0byBwb3AgYmFjayB0byBpdHMgcHJvbXB0CisgICBhdXRvbWF0aWNhbGx5IHdo ZW4gdGhlIGNvbm5lY3Rpb24gaXMgaHVuZyB1cC4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgorICAg U0VUIENBUlJJRVItV0FUQ0ggaW4gIlVzaW5nIEMtS2VybWl0Ii4KKworICAgU2ltaWxhcmx5LCBp ZiB5b3VyIGRpYWxlZCBjb25uZWN0aW9uIGRyb3BzIHdoZW4gQ0FSUklFUi1XQVRDSCBpcyBzZXQg dG8KKyAgIEFVVE8gb3IgT04sIHlvdSBjYW4ndCBDT05ORUNUIGJhY2sgdG8gdGhlIChub3cgZGlz Y29ubmVjdGVkKSBzY3JlZW4gdG8KKyAgIHNlZSB3aGF0IG1pZ2h0IGhhdmUgaGFwcGVuZWQgdW5s ZXNzIHlvdSBmaXJzdCBTRVQgQ0FSUklFUi1XQVRDSCBPRkYuCisgICBCdXQgc29tZXRpbWVzIG5v dCBldmVuIFNFVCBDQVJSSUVSLVdBVENIIE9GRiB3aWxsIGhlbHAgaW4gdGhpcworICAgc2l0dWF0 aW9uOiBjZXJ0YWluIHBsYXRmb3JtcyAoZm9yIGV4YW1wbGUgVW5peHdhcmUgMi4xKSwgb25jZSBj YXJyaWVyCisgICBkcm9wcywgd29uJ3QgbGV0IHRoZSBhcHBsaWNhdGlvbiBkbyBpL28gd2l0aCB0 aGUgZGV2aWNlIGFueSBtb3JlLiBJbgorICAgdGhhdCBjYXNlLCBpZiB5b3Ugd2FudCB0byB1c2Ug dGhlIGRldmljZSBhZ2FpbiwgeW91IGhhdmUgdG8gQ0xPU0UgaXQKKyAgIGFuZCBPUEVOIGl0IGFn YWluLiBPciB5b3UgY2FuIGhhdmUgS2VybWl0IGRvIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5 CisgICBieSB0ZWxsaW5nIGl0IHRvIFNFVCBDTE9TRS1PTi1ESVNDT05ORUNUIE9OLgorCis2LjMu IERpYWxpbmcgYW5kIEZsb3cgQ29udHJvbAorCisgICBEb24ndCBTRVQgRkxPVyBSVFMvQ1RTIGlm IHlvdXIgbW9kZW0gaXMgdHVybmVkIG9mZiwgb3IgaWYgaXQgaXMgbm90CisgICBwcmVzZW50aW5n IHRoZSBDVFMgc2lnbmFsLiBPdGhlcndpc2UsIHRoZSBzZXJpYWwgZGV2aWNlIGRyaXZlciBjYW4g Z2V0CisgICBzdHVjayB3YWl0aW5nIGZvciB0aGlzIHNpZ25hbCB0byBhcHBlYXIuCisKKyAgIE1v c3QgbW9kZXJuIG1vZGVtcyBzdXBwb3J0IFJUUy9DVFMgKGlmIHRoZXkgc3VwcG9ydCBhbnkgaGFy ZHdhcmUgZmxvdworICAgY29udHJvbCBhdCBhbGwpLCBidXQgc29tZSBjb21wdXRlcnMgdXNlIGRp ZmZlcmVudCBSUy0yMzIgY2lyY3VpdHMgZm9yCisgICB0aGUgc2FtZSBwdXJwb3NlcywgZS5nLiBE VFIgYW5kIENELCBvciBEVFIgYW5kIENUUy4gSW4gc3VjaCBjYXNlcywgeW91CisgICBtaWdodCBi ZSBhYmxlIHRvIG1ha2UgeW91ciBjb21wdXRlciB3b3JrIHdpdGggeW91ciBtb2RlbSBieQorICAg YXBwcm9wcmlhdGVseSBjcm9zcy13aXJpbmcgdGhlIGNpcmN1aXRzIGluIHRoZSBjYWJsZSBjb25u ZWN0b3IsIGZvcgorICAgZXhhbXBsZSB0aGUgY29tcHV0ZXIncyBEVFIgdG8gdGhlIG1vZGVtJ3Mg UlRTLCBhbmQgbW9kZW0ncyBDRCB0byB0aGUKKyAgIGNvbXB1dGVyJ3MgQ1RTLiBIT1dFVkVSLCBD LUtlcm1pdCBkb2VzIG5vdCBrbm93IHlvdSBoYXZlIGRvbmUgdGhpcy4gU28KKyAgIGlmIHlvdSBo YXZlIChzYXkpIFNFVCBGTE9XIERUUi9DRCwgQy1LZXJtaXQgd2lsbCBtYWtlIG5vIGF0dGVtcHQg dG8KKyAgIHRlbGwgdGhlIG1vZGVtIHRvIHVzZSBSVFMvQ1RTLiBZb3UgcHJvYmFibHkgZGlkIHRo aXMgeW91cnNlbGYgd2hlbiB5b3UKKyAgIGNvbmZpZ3VyZWQgdGhlIG1vZGVtLgorCis2LjQuIFRo ZSBEaWFsIFRpbWVvdXQKKworICAgSWYgaXQgdGFrZXMgeW91ciBjYWxsIGxvbmdlciB0byBiZSBj b21wbGV0ZWQgdGhhbiB0aGUgdGltZW91dCBpbnRlcnZhbAorICAgdGhhdCBDLUtlcm1pdCBjYWxj dWxhdGVzLCB5b3UgY2FuIHVzZSB0aGUgU0VUIERJQUwgVElNRU9VVCBjb21tYW5kIHRvCisgICBv dmVycmlkZSBDLUtlcm1pdCdzIHZhbHVlLiBCdXQgYmV3YXJlOiB0aGUgbW9kZW0gaGFzIGl0cyBv d24gdGltZW91dAorICAgZm9yIGNvbXBsZXRpbmcgdGhlIGNhbGwuIElmIGl0IGlzIGEgSGF5ZXMt bGlrZSBtb2RlbSwgQy1LZXJtaXQgYWRqdXN0cworICAgdGhlIG1vZGVtJ3MgdmFsdWUgdG9vIGJ5 IHNldHRpbmcgcmVnaXN0ZXIgUzcuIEJ1dCB0aGUgbWF4aW11bSB2YWx1ZSBmb3IKKyAgIFM3IG1p Z2h0IGJlIHNtYWxsZXIgdGhhbiB0aGUgdGltZSB5b3UgbmVlZCEgSW4gdGhhdCBjYXNlLCBDLUtl cm1pdCBzZXRzCisgICBTNyB0byAwLCAyNTUsIG9yIG90aGVyIChtb2RlbS1zcGVjaWZpYykgdmFs dWUgdG8gc2lnbmlmeSAibm8gdGltZW91dCIuCisgICBJZiBLZXJtaXQgYXR0ZW1wdHMgdG8gc2V0 IHJlZ2lzdGVyIFM3IHRvIGEgdmFsdWUgaGlnaGVyIHRoYW4geW91cgorICAgbW9kZW0ncyBtYXhp bXVtLCB0aGUgbW9kZW0gd2lsbCBzYXkgIkVSUk9SIiBhbmQgeW91IHdpbGwgZ2V0IGEgIkZhaWx1 cmUKKyAgIHRvIGluaXRpYWxpemUgbW9kZW0iIGVycm9yLiBJbiB0aGF0IGNhc2UsIHVzZSBTRVQg RElBTCBUSU1FT1VUIHRvCisgICBvdmVycmlkZSBDLUtlcm1pdCdzIGNhbGN1bGF0aW9uIG9mIHRo ZSB0aW1lb3V0IHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QKKyAgIHZhbHVlIHRoYXQgaXMgbGVnYWwg Zm9yIHlvdXIgbW9kZW0sIGUuZy4gNjAuCisKKzYuNS4gRXNjYXBlIFNlcXVlbmNlIEd1YXJkIFRp bWUKKworICAgQSAiVElFUyIgKFRpbWUtSW5kZXBlbmRlbnQgRXNjYXBlIFNlcXVlbmNlKSBtb2Rl bSBkb2VzIG5vdCByZXF1aXJlIGFueQorICAgZ3VhcmQgdGltZSBhcm91bmQgaXRzIGVzY2FwZSBz ZXF1ZW5jZS4gVGhlIGZvbGxvd2luZyB0ZXh0OgorCisgICsrK0FUSDAKKworICAgaWYgc2VudCB0 aHJvdWdoIGEgVElFUyBtb2RlbSwgZm9yIGV4YW1wbGUgYmVjYXVzZSB5b3Ugd2VyZSB1cGxvYWRp bmcKKyAgIHRoaXMgZmlsZSB0aHJvdWdoIGl0LCBjb3VsZCBwb3AgdGhlIG1vZGVtIGJhY2sgaW50 byBjb21tYW5kIG1vZGUgYW5kCisgICBtYWtlIGl0IGhhbmcgdXAgdGhlIGNvbm5lY3Rpb24uIExh dGVyIHZlcnNpb25zIG9mIHRoZSBUZWxlYml0IFQxNjAwIGFuZAorICAgVDMwMDAgKHZlcnNpb24g TEEzLjAxRSBmaXJtd2FyZSBhbmQgbGF0ZXIpLCBhbmQgYWxsIFdvcmxkQmxhemVycywgdXNlCisg ICBUSUVTLgorCisgICBBbHRob3VnaCB0aGUgcHJvYmFiaWxpdHkgb2YgIisrKyIgYXBwZWFyaW5n IGluIGEgS2VybWl0IHBhY2tldCBpcworICAgbWFya2VkbHkgbG93ZXIgdGhhbiB3aXRoIG1vc3Qg b3RoZXIgcHJvdG9jb2xzIChzZWUgdGhlIFs2NF1GaWxlCisgICBUcmFuc2ZlciBzZWN0aW9uIGJl bG93KSwgaXQgY2FuIHN0aWxsIGhhcHBlbiB1bmRlciBjZXJ0YWluCisgICBjaXJjdW1zdGFuY2Vz LiBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiB1c2luZyBDLUtlcm1pdCdzIFRSQU5TTUlUCisgICBj b21tYW5kLiBJZiB5b3UgYXJlIHVzaW5nIGEgVGVsZWJpdCBUSUVTIG1vZGVtLCB5b3UgY2FuIGNo YW5nZSB0aGUKKyAgIG1vZGVtJ3MgZXNjYXBlIHNlcXVlbmNlIHRvIGFuIG90aGVyd2lzZSBsaXR0 bGUtdXNlZCBjb250cm9sIGNoYXJhY3RlcgorICAgc3VjaCBhcyBDdHJsLV8gKENvbnRyb2wtVW5k ZXJzY29yZSk6CisKKyAgQVQgUzI9MzEKKworICAgQSBzZXF1ZW5jZSBvZiB0aHJlZSBjb25zZWN1 dGl2ZSBDdHJsLV8gY2hhcmFjdGVycyB3aWxsIG5vdCBhcHBlYXIgaW4gYQorICAgS2VybWl0IHBh Y2tldCB1bmxlc3MgeW91IGdvIHRvIGV4dHJhb3JkaW5hcnkgbGVuZ3RocyB0byBkZWZlYXQgbW9y ZQorICAgdGhhbiBhIGZldyBvZiBLZXJtaXQncyBidWlsdC1pbiBzYWZldHkgbWVjaGFuaXNtcy4g QW5kIGlmIHlvdSBkbyB0aGlzLAorICAgdGhlbiB5b3Ugc2hvdWxkIGFsc28gdHVybiBvZmYgdGhl IG1vZGVtJ3MgZXNjYXBlLXNlcXVlbmNlIHJlY29nbml0aW9uCisgICBhbHRvZ2V0aGVyOgorCisg IEFUIFM0OD0wIFMyPTI1NQorCisgICBCdXQgd2hlbiBlc2NhcGUgc2VxdWVuY2UgcmVjb2duaXRp b24gaXMgdHVybmVkIG9mZiwgIm1vZGVtIGhhbmd1cCIKKyAgICg8cGF1c2U+KysrPHBhdXNlPkFU SDA8Q1I+KSB3aWxsIG5vdCB3b3JrLCBzbyB5b3Ugc2hvdWxkIGFsc28gU0VUIE1PREVNCisgICBI QU5HVVAgUlMyMzItU0lHTkFMIChyYXRoZXIgdGhlbiBNT0RFTS1DT01NQU5EKS4KKworNi42LiBB ZGFwdGl2ZSBEaWFsaW5nCisKKyAgIFNvbWUgbW9kZW1zIGhhdmUgYSBmZWF0dXJlIGNhbGxlZCBh ZGFwdGl2ZSBkaWFsaW5nLiBXaGVuIHRoZXkgYXJlIHRvbGQKKyAgIHRvIGRpYWwgYSBudW1iZXIg dXNpbmcgVG9uZSBkaWFsaW5nLCB0aGV5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0CisgICBkaWFs dG9uZSBoYXMgZ29uZSBhd2F5IGFmdGVyIGRpYWxpbmcgdGhlIGZpcnN0IGRpZ2l0LiBJZiBpdCBo YXMgbm90LAorICAgdGhlIG1vZGVtIGFzc3VtZXMgdGhlIHBob25lIGxpbmUgZG9lcyBub3QgYWNj ZXB0IFRvbmUgZGlhbGluZyBhbmQgc28KKyAgIHN3aXRjaGVzIHRvIFB1bHNlLiBXaGVuIGRpYWxp bmcgb3V0IGZyb20gYSBQQlgsIHRoZXJlIGlzIGFsbW9zdCBhbHdheXMKKyAgIGEgc2Vjb25kYXJ5 IGRpYWx0b25lLiBUeXBpY2FsbHkgeW91IHRha2UgdGhlIHBob25lIG9mZi1ob29rLCBnZXQgdGhl CisgICBQQlggZGlhbHRvbmUsIGRpYWwgIjkiIHRvIGdldCBhbiBvdXRzaWRlIGxpbmUsIGFuZCB0 aGVuIGdldCB0aGUgcGhvbmUKKyAgIGNvbXBhbnkncyBkaWFsdG9uZS4gSW4gYSBzaXR1YXRpb24g bGlrZSB0aGlzLCB5b3UgbmVlZCB0byB0ZWxsIHRoZQorICAgbW9kZW0gdG8gZXhwZWN0IHRoZSBz ZWNvbmRhcnkgZGlhbHRvbmUuIE9uIEhheWVzIGFuZCBjb21wYXRpYmxlIG1vZGVtcywKKyAgIHRo aXMgaXMgZG9uZSBieSBwdXR0aW5nIGEgIlciIGluIHRoZSBkaWFsIHN0cmluZyBhdCB0aGUgYXBw cm9wcmlhdGUKKyAgIHBsYWNlLiBGb3IgZXhhbXBsZSwgdG8gZGlhbCA5IGZvciBhbiBvdXRzaWRl IGxpbmUsIGFuZCB0aGVuIDc2NTQzMjEsCisgICB1c2UgQVREVDlXNzY1NDMyMToKKworICBTRVQg UEJYLU9VVFNJREUtUFJFRklYIDlXCisKKyAgIChyZXBsYWNlICI5IiB3aXRoIHdoYXRldmVyIHlv dXIgUEJYJ3Mgb3V0c2lkZS1saW5lIHByZWZpeCBpcykuCisKKzYuNy4gVGhlIEJ1c3kgU2lnbmFs CisKKyAgIFNvbWUgcGhvbmUgY29tcGFuaWVzIGFyZSBlbGltaW5hdGluZyB0aGUgYnVzeSBzaWdu YWwuIEluc3RlYWQsIHRoZXkKKyAgIGlzc3VlIGEgdm9pY2UgbWVzc2FnZSBzdWNoIGFzICJwcmVz cyAxIHRvIGF1dG9tYXRpY2FsbHkgcmVkaWFsIHVudGlsCisgICB0aGUgbnVtYmVyIGFuc3dlcnMs IG9yLi4uIi4gT2J2aW91c2x5IHRoaXMgaXMgYSBkaXNhc3RlciBmb3IgbW9kZW0KKyAgIGNhbGxz LiBJZiB5b3VyIHNlcnZpY2UgaGFzIHRoaXMgZmVhdHVyZSwgdGhlcmUncyBub3RoaW5nIEtlcm1p dCBjYW4gZG8KKyAgIGFib3V0IGl0LiBZb3VyIG1vZGVtIHdpbGwgcmVzcG9uZCB3aXRoIE5PIENB UlJJRVIgKGFmdGVyIGEgbG9uZyB0aW1lKQorICAgcmF0aGVyIHRoYW4gQlVTWSAoaW1tZWRpYXRl bHkpLCBhbmQgS2VybWl0IHdpbGwgZGVjbGFyZSB0aGUgY2FsbCBhCisgICBmYWlsdXJlLCByYXRo ZXIgdGhhbiB0cnlpbmcgdG8gcmVkaWFsIHRoZSBzYW1lIG51bWJlci4KKworNi44LiBIYW5naW5n IFVwCisKKyAgIFRoZXJlIGFyZSB0d28gd2F5cyB0byBoYW5nIHVwIGEgbW9kZW06IGJ5IHR1cm5p bmcgb2ZmIHRoZSBzZXJpYWwgcG9ydCdzCisgICBEVFIgc2lnbmFsIChTRVQgTU9ERU0gSEFOR1VQ LU1FVEhPRCBSUzIzMi1TSUdOQUwpIG9yIHNlbmRpbmcgdGhlIG1vZGVtCisgICBpdHMgZXNjYXBl IHNlcXVlbmNlIGZvbGxvd2VkIGJ5IGl0cyBoYW5ndXAgY29tbWFuZCAoU0VUIE1PREVNCisgICBI QU5HVVAtTUVUSE9EIE1PREVNLUNPTU1BTkQpLiBJZiBvbmUgZG9lc24ndCB3b3JrLCB0cnkgdGhl IG90aGVyLiBJZgorICAgdGhlIGF1dG9tYXRpYyBoYW5ndXAgcGVyZm9ybWVkIGF0IHRoZSBiZWdp bm5pbmcgb2YgYSBESUFMIGNvbW1hbmQKKyAgIGNhdXNlcyB0cm91YmxlLCB0aGVuIFNFVCBESUFM IEhBTkdVUCBPRkYuCisKKyAgIFRoZSBIQU5HVVAgY29tbWFuZCBoYXMgbm8gZWZmZWN0IHdoZW4g Qy1LZXJtaXQgaXMgaW4gcmVtb3RlIG1vZGUuIFRoaXMKKyAgIGlzIG9uIHB1cnBvc2UuIElmIEMt S2VybWl0IGNvdWxkIGhhbmcgdXAgaXRzIG93biBjb250cm9sbGluZyB0ZXJtaW5hbCwKKyAgIHRo aXMgd291bGQgKGEpIG1vc3QgbGlrZWx5IGxlYXZlIGJlaGluZCB6b21iaWUgcHJvY2Vzc2VzLCBh bmQgKGIpIHBvc2UKKyAgIGEgc2VjdXJpdHkgcmlzay4KKworICAgSWYgeW91IERJQUwgYSBtb2Rl bSwgZGlzY29ubmVjdCwgdGhlbiBTRVQgSE9TVCBvciBURUxORVQsIGFuZCB0aGVuCisgICBIQU5H VVAsIEtlcm1pdCBzZW5kcyB0aGUgbW9kZW0ncyBoYW5ndXAgY29tbWFuZCwgc3VjaCBhcyAiKysr QVRITyIuCisgICBUaGVyZSBpcyBubyBnb29kIHdheSB0byBhdm9pZCB0aGlzLCBiZWNhdXNlIHRo aXMgY2FzZSBjYW4ndCByZWxpYWJseSBiZQorICAgZGlzdGluZ3Vpc2hlZCBmcm9tIHRoZSBjYXNl IGluIHdoaWNoIHRoZSB1c2VyIGRvZXMgU0VUIEhPU1QKKyAgIHRlcm1pbmFsLXNlcnZlciwgU0VU IE1PREVNIFRZUEUgbmFtZSwgRElBTC4gSW4gYm90aCBjYXNlcyB3ZSBoYXZlIGEKKyAgIHZhbGlk IG1vZGVtIHR5cGUgc2VsZWN0ZWQgYW5kIHdlIGhhdmUgYSBuZXR3b3JrIGNvbm5lY3Rpb24uIElm IHlvdSB3YW50CisgICB0byBESUFMIGFuZCB0aGVuIGxhdGVyIG1ha2UgYSByZWd1bGFyIG5ldHdv cmsgY29ubmVjdGlvbiwgeW91IHdpbGwgaGF2ZQorICAgdG8gU0VUIE1PREVNIFRZUEUgTk9ORSBv ciBTRVQgRElBTCBIQU5HVVAgT0ZGIHRvIGF2b2lkIHRoaXMgcGhlbm9tZW5vbi4KKworNy4gVEVS TUlOQUwgU0VSVkVSUworCisgICBbIFs2NV1Ub3AgXSBbIFs2Nl1Db250ZW50cyBdIFsgWzY3XU5l eHQgXSBbIFs2OF1QcmV2aW91cyBdCisKKyAgIFdhdGNoIG91dCBmb3IgdGVybWluYWwgc2VydmVy J3MgZXNjYXBlIGNoYXJhY3RlciAtLSB1c3VhbGx5IGEgY29udHJvbAorICAgY2hhcmFjdGVyIHN1 Y2ggYXMgQ3RybC1DaXJjdW1mbGV4IChDdHJsLV4pLiBEb24ndCB1bnByZWZpeCBpdCBpbgorICAg S2VybWl0IQorCisgICBDaXNjb3MgLS0gbXVzdCBvZnRlbiBiZSB0b2xkIHRvICJ0ZXJtaW5hbCBk b3dubG9hZCIuLi4gQ2lzY28gQVNNIG1vZGVscworICAgZG9uJ3QgaGF2ZSBoYXJkd2FyZSBmbG93 IGNvbnRyb2wgaW4gYm90aCBkaXJlY3Rpb25zLgorCisgICBNYW55IHRlcm1pbmFsIHNlcnZlcnMg b25seSBnaXZlIHlvdSBhIDctYml0IGNvbm5lY3Rpb24sIHNvIGlmIHlvdSBjYW4ndAorICAgbWFr ZSBpdCA4LWJpdCwgdGVsbCBLZXJtaXQgdG8gInNldCBwYXJpdHkgc3BhY2UiLgorCisgICBUaGUg Zm9sbG93aW5nIHN0b3J5LCByZWdhcmRpbmcgdHJvdWJsZSB0cmFuc2ZlcnJpbmcgOC1iaXQgZmls ZXMgdGhyb3VnaAorICAgYSByZXZlcnNlIHRlcm1pbmFsIHNlcnZlciwgd2FzIGNvbnRyaWJ1dGVk IGJ5IGFuIEFubmV4IHRlcm1pbmFsIHNlcnZlcgorICAgdXNlcjoKKworICAgICBVc2luZyBDLUtl cm1pdCBvbiBhbiBIUCA5MDAwIDcxMi84MCBydW5uaW5nIHRoZSBIUC1VWCAxMC4wMAorICAgICBv cGVyYXRpbmcgc3lzdGVtLiBUaGUgSFAgd2FzIGNvbm5lY3RlZCB0byBhIFh5bG9naWNzIEFubmV4 CisgICAgIE1JQ1JPLUVMUy1VWCBSNy4xIDggcG9ydCB0ZXJtaW5hbCBzZXJ2ZXIgdmlhIGV0aGVy bmV0LiBPbiB0aGUgc2Vjb25kCisgICAgIHBvcnQgb2YgdGhlIHRlcm1pbmFsIHNlcnZlciBpcyBh biBBVCZUIFBhcmFkeW5lIDM4MTAgbW9kZW0sIHdoaWNoIGlzCisgICAgIGNvbm5lY3RlZCB0byBh IHRlbGVwaG9uZSBsaW5lLiBUaGVyZSBpcyBhIHByb2dyYW0gd2hpY2ggcnVucyBvbiB0aGUKKyAg ICAgSFAgdG8gZXN0YWJsaXNoIGEgVGVsbmV0IGNvbm5lY3Rpb24gYmV0d2VlbiBhIHNlcmlhbCBs aW5lIG9uIHRoZQorICAgICBBbm5leCBhbmQgYSBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlIG9uIHRo ZSBIUCAoL2RldiBmaWxlKS4gVGhpcyBpcyBhbgorICAgICBBbm5leCBzcGVjaWZpYyBwcm9ncmFt IGNhbGxlZCBydGVsbmV0IChyZXZlcnNlIHRlbG5ldCkgYW5kIGlzCisgICAgIHByb3ZpZGVkIHdp dGggdGhlIHRlcm1pbmFsIHNlcnZlciBzb2Z0d2FyZS4gVGhlIHJ0ZWxuZXQgdXRpbGl0eSBydW5z CisgICAgIG9uIHRvcCBvZiB0aGUgcHNldWRvLXRlcm1pbmFsIGZhY2lsaXR5IHByb3ZpZGVkIGJ5 IFVOSVguIEl0IGNyZWF0ZXMKKyAgICAgaG9zdC1vcmlnaW5hdGVkIGNvbm5lY3Rpb25zIHRvIGRl dmljZXMgYXR0YWNoZWQgb3QgQW5uZXggc2VyaWFsCisgICAgIHBvcnRzLiBUaGVyZSBhcmUgc2V2 ZXJhbCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGJlIHNwZWNpZmllZCB3aXRoCisgICAgIHRo aXMgcHJvZ3JhbTogdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmFsIHNlcnZlciwgdGhlIG51 bWJlciBvZgorICAgICB0aGUgcG9ydCB0byBhdHRhY2ggdG8sIGFuZCB0aGUgbmFtZSBvZiB0aGUg cHNldWRvLWRldmljZSB0byBjcmVhdGUuCisgICAgIEluIGFkZGl0aW9uIHRvIHRoZXNlIHRoZXJl IGFyZSBvcHRpb25zIHRvIHRlbGwgcnRlbG5ldCBob3cgdG8KKyAgICAgb3BlcmF0ZSBvbiB0aGUg Y29ubmVjdDogLWIgcmVxdWVzdHMgbmVnb3RpYXRpb24gZm9yIFRlbG5ldCBiaW5hcnkKKyAgICAg bW9kZSwgLWQgdHVybnMgb24gc29ja2V0LWxldmUgZGVidWdnaW5nLCAtZiBlbmFibGVzICJjb25u ZWN0IG9uIHRoZQorICAgICBmbHkiIG1vZGUsIC1yIHJlbW92ZXMgdGhlIGRldmljZS1uYW1lIGlm IGl0IGFscmVhZHkgZXhpc3RzLCBldGMuIFRoZQorICAgICBtb3N0IGltcG9ydGFudCBvZiB0aGVz ZSB0byBiZSBzcGVjaWZpZWQgd2hlbiB1c2luZyA4IGRhdGEgYml0cyBhbmQKKyAgICAgbm8gcGFy aXR5LCBhcyB3ZSBmb3VuZCBvdXQsIHdhcyB0aGUgLXQgb3B0aW9uLiBUaGlzIGNyZWF0ZXMgYQor ICAgICB0cmFuc3BhcmVudCBUQ1AgY29ubmVjdGlvbiB0byB0aGUgdGVybWluYWwgc2VydmVyLiBB Z2Fpbiwgd2hhdCB3ZQorICAgICBhc3N1bWVkIHRvIGJlIGhhcHBlbmluZyB3YXMgdGhhdCB0aGUg cnRlbG5ldCBwcm9ncmFtIGVuY291bnRlcmVkIGEKKyAgICAgY2hhcmFjdGVyIHNlcXVlbmNlIHNw ZWNpYWwgdG8gaXRzZWxmIGFuZCB0aGVuICJlYXRpbmciIHRob3NlIGtlcm1pdAorICAgICBwYWNr ZXRzLiBJIHRoaW5rIHRoaXMgaXMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBJIGNhbiBnaXZlIHlv dSBvbgorICAgICB0aGUgY29uZmlndXJhdGlvbiwgc2hvcnQgb2YgdGhlIHZhbHVlcyBhc3NvY2lh dGVkIHdpdGggdGhlIHBvcnQgb24KKyAgICAgdGhlIHRlcm1pbmFsIHNlcnZlci4KKworICAgSG93 IHRvIERJQUwgZnJvbSBhIFRDUC9JUCByZXZlcnNlIHRlcm1pbmFsIHNlcnZlciAobW9kZW0gc2Vy dmVyKToKKworICAgIDEuIChvbmx5IGlmIG5lY2Vzc2FyeSkgU0VUIFRFTE5FVCBFQ0hPIFJFTU9U RQorICAgIDIuIFNFVCBIT1NUIHRlcm1pbmFsLXNlcnZlci1pcC1uYW1lLW9yLWFkZHJlc3MgWyBw b3J0IF0KKyAgICAzLiBTRVQgTU9ERU0gVFlQRSBtb2RlbS10eXBlCisgICAgNC4gKG9ubHkgaWYg bmVjZXNzYXJ5KSBTRVQgRElBTCBIQU5HVVAgT0ZGCisgICAgNS4gKGZvciB0cm91Ymxlc2hvb3Rp bmcpIFNFVCBESUFMIERJU1BMQVkgT04KKyAgICA2LiBESUFMIHBob25lLW51bWJlcgorCisgICBU aGUgb3JkZXIgaXMgaW1wb3J0YW50OiBTRVQgSE9TVCBiZWZvcmUgU0VUIE1PREVNIFRZUEUuIFNp bmNlIHRoaXMgaXMgYQorICAgVGVsbmV0IGNvbm5lY3Rpb24sIHNlcmlhbC1wb3J0IHJlbGF0ZWQg Y29tbWFuZHMgc3VjaCBhcyBTRVQgU1BFRUQsIFNFVAorICAgU1RPUC1CSVRTLCBIQU5HVVAgKHdo ZW4gTU9ERU0gSEFOR1VQLU1FVEhPRCBpcyBSUzIzMiksIGV0YywgaGF2ZSBubworICAgZWZmZWN0 LiBIb3dldmVyLCBpbiBDLUtlcm1pdCA4LjAsIGlmIHRoZSBtb2RlbSBzZXJ2ZXIgc3VwcG9ydHMK KyAgIFs2OV1SRkMtMjIxNyBUZWxuZXQgQ29tLVBvcnQgQ29udHJvbCBwcm90b2NvbCwgdGhlc2Ug Y29tbWFuZHMgZG8gaW5kZWVkCisgICB0YWtlIGVmZmVjdCBhdCB0aGUgc2VydmVyJ3Mgc2VyaWFs IHBvcnQuCisKKzguIFRFUk1JTkFMIEVNVUxBVElPTgorCisgICBbIFs3MF1Ub3AgXSBbIFs3MV1D b250ZW50cyBdIFsgWzcyXU5leHQgXSBbIFs3M11QcmV2aW91cyBdCisKKyAgIEV4Y2VwdCBmb3Ig dGhlIFdpbmRvd3MsIE9TLzIsIGFuZCBNYWNpbnRvc2ggdmVyc2lvbnMsIEMtS2VybWl0IGRvZXMg bm90CisgICBlbXVsYXRlIGFueSBraW5kIG9mIHRlcm1pbmFsLiBSYXRoZXIsIGl0IGFjdHMgYXMg YSAic2VtaXRyYW5zcGFyZW50CisgICBwaXBlIiwgcGFzc2luZyB0aGUgY2hhcmFjdGVycyB5b3Ug dHlwZSBkdXJpbmcgYSBDT05ORUNUIHNlc3Npb24gdG8gdGhlCisgICByZW1vdGUgaG9zdCwgYW5k IHNlbmRpbmcgdGhlIGNoYXJhY3RlcnMgcmVjZWl2ZWQgZnJvbSB0aGUgcmVtb3RlIGhvc3QKKyAg IHRvIHlvdXIgc2NyZWVuLiBXaGF0ZXZlciBpcyBjb250cm9sbGluZyB5b3VyIGtleWJvYXJkIGFu ZCBzY3JlZW4KKyAgIHByb3ZpZGVzIHRoZSBzcGVjaWZpYyB0ZXJtaW5hbCBlbXVsYXRpb246IGEg cmVhbCB0ZXJtaW5hbCwgYSBQQyBydW5uaW5nCisgICBhIHRlcm1pbmFsIGVtdWxhdG9yLCBldGMs IG9yIChpbiB0aGUgY2FzZSBvZiBhIHNlbGYtY29udGFpbmVkCisgICB3b3Jrc3RhdGlvbikgeW91 ciBjb25zb2xlIGRyaXZlciwgYSB0ZXJtaW5hbCB3aW5kb3csIHh0ZXJtLCBldGMuCisKKyAgIEtl cm1pdCBpcyBzZW1pdHJhbnNwYXJlbnQgcmF0aGVyIHRoYW4gZnVsbHkgdHJhbnNwYXJlbnQgaW4g dGhlCisgICBmb2xsb3dpbmcgd2F5czoKKworICAgICAqIER1cmluZyBhIFRFTE5FVCAoInNldCBo b3N0Iikgc2Vzc2lvbiwgQy1LZXJtaXQgaXRzZWxmIGV4ZWN1dGVzIHRoZQorICAgICAgIFRFTE5F VCBwcm90b2NvbCBhbmQgcGVyZm9ybXMgVEVMTkVUIG5lZ290aWF0aW9ucy4gKEJ1dCBpdCBkb2Vz IG5vdAorICAgICAgIHBlcmZvcm0gVE4zMjcwIHByb3RvY29sIG9yIGFueSBvdGhlciB0eXBlIG9m IDMyNzAgdGVybWluYWwKKyAgICAgICBlbXVsYXRpb24uKQorICAgICAqIElmIHlvdSBoYXZlIGNo YW5nZWQgeW91ciBrZXlib2FyZCBtYXBwaW5nIHVzaW5nIFNFVCBLRVksIEMtS2VybWl0CisgICAg ICAgcmVwbGFjZXMgdGhlIGNoYXJhY3RlcnMgeW91IHR5cGUgd2l0aCB0aGUgY2hhcmFjdGVycyBv ciBzdHJpbmdzCisgICAgICAgdGhleSBhcmUgbWFwcGVkIHRvLgorICAgICAqIElmIHlvdSBTRVQg eW91ciBURVJNSU5BTCBDSEFSQUNURVItU0VUIHRvIGFueXRoaW5nIGJ1dCBUUkFOU1BBUkVOVCwK KyAgICAgICBDLUtlcm1pdCB0cmFuc2xhdGVzIHlvdXIga2V5c3Ryb2tlcyAoYWZ0ZXIgYXBwbHlp bmcgYW55IFNFVCBLRVkKKyAgICAgICBkZWZpbml0aW9ucykgYmVmb3JlIHRyYW5zbWl0dGluZyB0 aGVtLCBhbmQgdHJhbnNsYXRlcyByZWNlaXZlZAorICAgICAgIGNoYXJhY3RlcnMgYmVmb3JlIHNo b3dpbmcgdGhlbSBvbiB5b3VyIHNjcmVlbi4KKyAgICAgKiBJZiB5b3VyIHJlbW90ZSBhbmQvb3Ig bG9jYWwgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBpcyBhbiBJU08gNjQ2CisgICAgICAgNy1iaXQg bmF0aW9uYWwgY2hhcmFjdGVyIHNldCwgc3VjaCBhcyBHZXJtYW4sIEZyZW5jaCwgSXRhbGlhbiwK KyAgICAgICBTd2VkaXNoLCBldGMsIG9yIFNob3J0IEtPSSB1c2VkIGZvciBDeXJpbGxpYywgQy1L ZXJtaXQncyBDT05ORUNUCisgICAgICAgY29tbWFuZCBhdXRvbWF0aWNhbGx5IHNraXBzIG92ZXIg QU5TSSBlc2NhcGUgc2VxdWVuY2VzIHRvIGF2b2lkCisgICAgICAgdHJhbnNsYXRpbmcgdGhlaXIg Y2hhcmFjdGVycy4gT25seSBBTlNJL0lTTyBzdGFuZGFyZAorICAgICAgIChWVDEwMC8yMDAvMzAw LWxpa2UpIDctYml0IGVzY2FwZSBzZXF1ZW5jZSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQKKyAgICAg ICBmb3IgdGhpcyBwdXJwb3NlLCBubyBwcm9wcmlldGFyeSBzY2hlbWVzIGxpa2UgSC1QLCBUZWxl dmlkZW8sCisgICAgICAgVGVrdHJvbml4LCBldGMuCisgICAgICogSWYgeW91ciB2ZXJzaW9uIG9m IEMtS2VybWl0IGluY2x1ZGVzIFNFVCBURVJNSU5BTCBBUEMgY29tbWFuZCwgdGhlbgorICAgICAg IEMtS2VybWl0J3MgQ09OTkVDVCBjb21tYW5kIHdpbGwgaGFuZGxlIEFQQyBlc2NhcGUgc2VxdWVu Y2VzIGlmCisgICAgICAgVEVSTUlOQUwgQVBDIGlzIG5vdCBzZXQgdG8gT0ZGICh3aGljaCBpcyB0 aGUgZGVmYXVsdCkuCisKKyAgIFlvdSBjYW4gbWFrZSBDLUtlcm1pdCBmdWxseSB0cmFuc3BhcmVu dCBieSBzdGFydGluZyBpdCB3aXRoIHRoZSAtMAorICAgKGRhc2ggemVybykgY29tbWFuZC1saW5l IG9wdGlvbi4KKworICAgSWYgeW91IGFyZSBydW5uaW5nIEMtS2VybWl0IHVuZGVyIGEgY29uc29s ZSBkcml2ZXIsIG9yIGluIGEgdGVybWluYWwKKyAgIHdpbmRvdywgdGhhdCBlbXVsYXRlcyB0aGUg VlQxMDAsIGFuZCB1c2UgQy1LZXJtaXQgdG8gbG9nIGluIHRvIGEgVk1TCisgICBzeXN0ZW0sIHRo ZSBjb25zb2xlIGRyaXZlciBvciB0ZXJtaW5hbCB3aW5kb3cgKG5vdCBLZXJtaXQpIGlzIHN1cHBv c2VkCisgICB0byByZXBseSB0byB0aGUgIndoYXQgYXJlIHlvdT8iIHF1ZXJ5IChFU0MgWikgZnJv bSB0aGUgVkFYLiBJZiBpdAorICAgZG9lc24ndCwgYW5kIHlvdSBjYW4ndCBtYWtlIGl0IGRvIHNv LCB0aGVuIHlvdSBjYW4gKGEpIGxpdmUgd2l0aCB0aGUKKyAgICJ1bmtub3duIHRlcm1pbmFsIiBw cm9ibGVtOyAoYikgdGVsbCBWTVMgdG8gU0VUIFRFUk1JTkFML0RFVklDRT1WVDEwMDsKKyAgIChj KSBwcm9ncmFtIGEga2V5IHVzaW5nIFNFVCBLRVkgdG8gc2VuZCB0aGUgYXBwcm9wcmlhdGUgc2Vx dWVuY2UgYW5kCisgICB0aGVuIHB1bmNoIHRoZSBrZXkgYXQgdGhlIHJpZ2h0IHRpbWU7IG9yIChk KSB1c2UgdGhlIFZNU0xPR0lOIG1hY3JvCisgICB0aGF0IGlzIGRlZmluZWQgaW4gQ0tFUk1JVC5J TkkgdG8gZG8gdGhpcyBmb3IgeW91IGF1dG9tYXRpY2FsbHkuCisKKyAgIFNFVCBTRVNTSU9OLUxP RyB7IFRFWFQsIEJJTkFSWSB9LCB3aGljaCBpcyBlZmZlY3RpdmUgaW4gVU5JWCBhbmQgQU9TL1ZT CisgICBidXQgbm90IG90aGVyIEMtS2VybWl0IHZlcnNpb25zLCByZW1vdmVzIENSLCBERUwsIE5V TCwgWE9OLCBhbmQgWE9GRgorICAgY2hhcmFjdGVycyAoVXNpbmcgQy1LZXJtaXQgbmVnbGVjdHMg dG8gbWVudGlvbiB0aGF0IFhPTiBhbmQgWE9GRiBhcmUKKyAgIHJlbW92ZWQpLiBUaGUgVEVYVC1t b2RlIHNldHRpbmcgaXMgaW5lZmZlY3RpdmUgZHVyaW5nIFNDUklQVCBjb21tYW5kCisgICBleGVj dXRpb24sIGFzIHdlbGwgYXMgb24gWC4yNSBjb25uZWN0aW9ucy4KKworOS4gS0VZIE1BUFBJTkcK KworICAgWyBbNzRdVG9wIF0gWyBbNzVdQ29udGVudHMgXSBbIFs3Nl1OZXh0IF0gWyBbNzddUHJl dmlvdXMgXQorCisgICBFeGNlcHQgaW4gdGhlIHRlcm1pbmFsLWVtdWxhdGluZyB2ZXJzaW9ucywg Qy1LZXJtaXQncyBrZXkgbWFwcGluZworICAgZmFjaWxpdGllcyBhcmUgbGltaXRlZCB0byBub3Jt YWwgIkFTQ0lJIiBrZXlzLCBhbmQgY2Fubm90IGJlIHVzZWQgd2l0aAorICAgZnVuY3Rpb24ga2V5 cywgYXJyb3cga2V5cywgYXJjYW5lIGtleSBjb21iaW5hdGlvbnMsIGV0Yy4gU2luY2UgQy1LZXJt aXQKKyAgIHJ1bnMgb24gc3VjaCBhIHdpZGUgdmFyaWV0eSBvZiBoYXJkd2FyZSBwbGF0Zm9ybXMg KGluY2x1ZGluZywgZm9yCisgICBleGFtcGxlLCBtb3JlIHRoYW4gMzYwIGRpZmZlcmVudCBVTklY IHBsYXRmb3JtcyksIGl0IGlzIG5vdCBwb3NzaWJsZQorICAgZm9yIEMtS2VybWl0IHRvIHN1cHBv cnQgZXZlcnkgY29uY2VpdmFibGUga2V5Ym9hcmQgdW5kZXIgZXZlcnkgcmVsZWFzZQorICAgb2Yg ZXZlcnkgVU5JWCAob3IgVk1TLCBvciAuLi4pIHByb2R1Y3Qgb24gZXZlcnkgZGlmZmVyZW50IGtp bmQgb2YKKyAgIGNvbXB1dGVyIHBvc3NpYmx5IHVuZGVyIGFsbCBtYW5uZXIgb2YgZGlmZmVyZW50 IGNvbnNvbGUgZHJpdmVycywgZXZlbgorICAgaWYgaXQgaGFkIHRoZSBtZWFucyB0byBkbyBzby4K KworICAgSW4gdGVjaG5pY2FsIHRlcm1zLCBDLUtlcm1pdCB1c2VzIHRoZSByZWFkKCkgZnVuY3Rp b24gdG8gcmVhZAorICAga2V5c3Ryb2tlcywgYW5kIHJlYWQoKSByZXR1cm5zIGEgc2luZ2xlIGJ5 dGUgKHZhbHVlIDAgdGhyb3VnaCAyNTUpLgorICAgQy1LZXJtaXQncyBTRVQgS0VZIGZ1bmN0aW9u IGFwcGxpZXMgdG8gdGhlc2Ugc2luZ2xlLWJ5dGUgY29kZXMuCisgICAiRXh0ZW5kZWQgZnVuY3Rp b24iIGtleXMsIHN1Y2ggYXMgRi1rZXlzLCBhcnJvdyBrZXlzLCBldGMsIHVzdWFsbHkKKyAgIHJl dHVybiBlaXRoZXIgYSAyLWJ5dGUgInNjYW4gY29kZSIgb3IgZWxzZSBhIGNoYXJhY3RlciBzdHJp bmcgKHN1Y2ggYXMKKyAgIGFuIGVzY2FwZSBzZXF1ZW5jZSBsaWtlICI8RVNDPiBPIHAiKS4gSW4g Ym90aCBjYXNlcywgQy1LZXJtaXQgaGFzIG5vCisgICB3YXkgdG8gdGVsbCB0aGUgZGlmZmVyZW5j ZSBiZXR3ZWVuIHN1Y2ggbXVsdGlieXRlIGtleSB2YWx1ZXMsIGFuZCB0aGUKKyAgIGNvcnJlc3Bv bmRpbmcgc2VyaWVzIG9mIHNpbmdsZS1ieXRlIGtleSB2YWx1ZXMuIFRoaXMgY291bGQgb25seSBi ZSBkb25lCisgICBieSBhY2Nlc3NpbmcgdGhlIGtleWJvYXJkIGF0IGEgbXVjaCBsb3dlciBsZXZl bCBpbiBhIGhpZ2hseQorICAgcGxhdGZvcm0tZGVwZW5kZW50IG1hbm5lciwgcHJvYmFibHkgcmVx dWlyaW5nIHRlbnMgb2YgdGhvdXNhbmRzIG9mCisgICBsaW5lcyBvZiBjb2RlIHRvIHN1cHBvcnQg ZXZlbiBhIHNhbXBsaW5nIG9mIHRoZSBtb3N0IHBvcHVsYXIKKyAgIHdvcmtzdGF0aW9uIC8gT1Mg Y29tYmluYXRpb25zLgorCisgICBIb3dldmVyLCBtb3N0IHdvcmtzdGF0aW9uIGNvbnNvbGUgZHJp dmVycyAodGVybWluYWwgZW11bGF0aW9uIHdpbmRvd3MsCisgICBldGMpIGluY2x1ZGUgdGhlaXIg b3duIGtleS1tYXBwaW5nIGZhY2lsaXR5LiBGb3IgZXhhbXBsZSBpbiBBSVgsIHRoZQorICAgQUlY dGVybSBwcm9ncmFtIChpbiB3aG9zZSB3aW5kb3cgeW91IHdvdWxkIHJ1biBDLUtlcm1pdCkgYWxs b3dzCisgICByZWJpbmRpbmcgb2YgdGhlIEYxLUYxMiBrZXlzIHRvIGFyYml0cmFyeSBzdHJpbmdz LiBUaGUgc2FtZSBpcyB0cnVlIG9mCisgICBYdGVybSBhbmQgREVDdGVybSB3aW5kb3dzLCBldGMu IENvbnN1bHQgdGhlIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uIGZvcgorICAgeW91ciB3b3Jrc3Rh dGlvbiBvciBlbXVsYXRvci4gU2VlIHNhbXBsZSBYdGVybSAoWG1vZG1hcCkgbWFwcGluZ3MgaW4K KyAgIHRoZSBbNzhdVW5peCBDLUtlcm1pdCBIaW50cyBhbmQgVGlwcyBkb2N1bWVudC4KKworICAg VGhlIFNFVCBLRVkgY29tbWFuZCAoZXhjZXB0IGluIEtlcm1pdCA5NSkgZG9lcyBub3QgYWxsb3cg YSBrZXkKKyAgIGRlZmluaXRpb24gdG8gYmUgKG9yIGNvbnRhaW4pIHRoZSBOVUwgKFwwKSBjaGFy YWN0ZXIuCisKKzEwLiBGSUxFIFRSQU5TRkVSCisKKyAgIFsgWzc5XVRvcCBdIFsgWzgwXUNvbnRl bnRzIF0gWyBbODFdTmV4dCBdIFsgWzgyXVByZXZpb3VzIF0KKworICAgQy1LZXJtaXQgNy4wIGlz IHRoZSBmaXJzdCByZWxlYXNlIG9mIEMtS2VybWl0IHRvIHVzZSBmYXN0IChyYXRoZXIgdGhhbgor ICAgcm9idXN0IGFuZCB0aGVyZWZvcmUgc2xvdykgcHJvdG9jb2wgZGVmYXVsdHM6IGxvbmcgcGFj a2V0cywgc2xpZGluZworICAgd2luZG93cywgY29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcs IGFuZCBzdHJlYW1pbmcgd2hlcmUgcG9zc2libGUuCisgICBUaGlzIG1ha2VzIG1vc3QgdHJhbnNm ZXJzIChwYXJ0bmVyIHdpbGxpbmcpIGRyYW1hdGljYWxseSBmYXN0ZXIgIm91dCBvZgorICAgdGhl IGJveCIgYnV0IG1pZ2h0IGJyZWFrIHNvbWUgY29tYmluYXRpb25zIHRoYXQgd29ya2VkIGJlZm9y ZS4gSWYKKyAgIHRyYW5zZmVycyB3aXRoIEMtS2VybWl0IDcuMCBvciBsYXRlciBmYWlsIHdoZXJl IHRyYW5zZmVycyB3b3JrZWQgd2l0aAorICAgZWFybGllciBDLUtlcm1pdCB2ZXJzaW9ucywgdHJ5 IHRoZSBmb2xsb3dpbmcgKG9uZSBhdCBhIHRpbWUsIGluIHRoaXMKKyAgIG9yZGVyKToKKworICAg IDEuIFNFVCBQUkVGSVhJTkcgQUxMOiBEaXNhYmxlcyBjb250cm9sLWNoYXJhY3RlciB1bnByZWZp eGluZy4KKyAgICAyLiBTRVQgU1RSRUFNSU5HIE9GRjogRGlzYWJsZXMgc3RyZWFtaW5nLgorICAg IDMuIENBVVRJT1VTOiBTZWxlY3RzIG1lZGl1bSBidXQgY2F1dGlvdXMgcHJvdG9jb2wgc2V0dGlu Z3MuCisgICAgNC4gUk9CVVNUOiB0aGlzIGNvbW1hbmQgcmV2ZXJ0cyB0byB0aGUgbW9zdCBjb25z ZXJ2YXRpdmUgcHJvdG9jb2wKKyAgICAgICBzZXR0aW5ncy4KKworICAgRXhlY3V0aW9uIG9mIG11 bHRpcGxlIGZpbGUgdHJhbnNmZXJzIGJ5IEMtS2VybWl0IGZyb20gYSBjb21tYW5kIGZpbGUKKyAg IHdoZW4gaW4gcmVtb3RlIG1vZGUgbWlnaHQgZXhoaWJpdCBsb25nIGRlbGF5cyBiZXR3ZWVuIGVh Y2ggdHJhbnNmZXIuIFRvCisgICBhdm9pZCB0aGlzLCBqdXN0IGluY2x1ZGUgdGhlIGNvbW1hbmQg IlNFVCBERUxBWSAwIiBpbiB5b3VyIGNvbW1hbmQgZmlsZQorICAgYmVmb3JlIGFueSBvZiB0aGUg ZmlsZS10cmFuc2ZlciBjb21tYW5kcy4KKworICAgRmlsZSB0cmFuc2ZlciBmYWlsdXJlcyBjYW4g b2NjdXIgZm9yIGFsbCBzb3J0cyBvZiByZWFzb25zLCBtb3N0IG9mIHRoZW0KKyAgIGxpc3RlZCBp biBDaGFwdGVyIDEwIG9mIFs4M11Vc2luZyBDLUtlcm1pdC4gVGhlIGZvbGxvd2luZyBzZWN0aW9u cworICAgdG91Y2ggb24gc29tZSB0aGF0IGFyZW4ndC4KKworICAgVGhlIFs4NF1DLUtlcm1pdCA3 LjAgUmVsZWFzZSBOb3RlcyBkb2N1bWVudCBTRU5EIC9DT01NQU5EIGFzIHRha2luZyBhbgorICAg YXJndW1lbnQsIGJ1dCBpdCBkb2Vzbid0LiBJbnN0ZWFkIG9mIFNFTkQgL0NPTU1BTkQ6e3NvbWUg Y29tbWFuZH0sIHVzZToKKworU0VORCAvQ09NTUFORCBbIG90aGVyIHN3aXRjaGVzIHN1Y2ggYXMg L0FTLU5BTUU6IF0gY29tbWFuZCBbIGFyZ3VtZW50cy4uLiBdCisKKzEwLjEuIExhcHRvcHMKKwor ICAgV2F0Y2ggb3V0IGZvciBsYXB0b3BzIGFuZCB0aGVpciBhc3NvcnRlZCBwb3dlci1zYXZlciBm ZWF0dXJlczsgZm9yCisgICBleGFtcGxlLCBhIGJ1aWx0LWluIG1vZGVtJ3MgImF1dG8gdGltZW91 dCBkZWxheSIgaGFuZ2luZyB1cCB0aGUKKyAgIGNvbm5lY3Rpb24gaW4gdGhlIG1pZGRsZSBvZiBh IGZpbGUgdHJhbnNmZXIuIE1vc3QgbW9kZW1zLCBldmVuIGlmIHRoZXkKKyAgIGhhdmUgdGhpcyBm ZWF0dXJlLCBkbyBub3QgaGF2ZSBpdCBlbmFibGVkIGJ5IGRlZmF1bHQuIEJ1dCBpZiB5b3UKKyAg IGV4cGVyaWVuY2Ugb3RoZXJ3aXNlIGluZXhwbGljYWJsZSBkaXNjb25uZWN0aW9ucyBpbiB0aGUg bWlkc3Qgb2YgeW91cgorICAgS2VybWl0IHNlc3Npb25zLCBjaGVjayB0aGUgbW9kZW0gbWFudWFs IGZvciBzdWNoIHRoaW5ncyBhcyAiaWRsZQorICAgdGltZW91dCIsICJhdXRvIHRpbWVvdXQiLCBl dGMsIGFuZCBhZGQgdGhlIGNvbW1hbmQgdG8gZGlzYWJsZSB0aGlzCisgICBmZWF0dXJlIHRvIEtl cm1pdCdzIGluaXQgc3RyaW5nIGZvciB0aGlzIG1vZGVtLgorCisxMC4yLiBORlMKKworICAgSWYg dXBsb2FkaW5nIGEgbGFyZ2UgZmlsZSB0byBhbiBORlMtbW91bnRlZCBkaXNrIGZhaWxzIChvciBp cyBwYWluZnVsbHkKKyAgIHNsb3cpLCB0cnkgdXBsb2FkaW5nIGl0IHRvIGEgbG9jYWwgZGlzayAo ZS5nLiAvdG1wIG9uIFVuaXgpIGFuZCB0aGVuCisgICBjb3B5aW5nIHRvIHRoZSBORlMgZGlzayBs YXRlci4KKworMTAuMy4gTW9kZW1zCisKKyAgIElmIHlvdSBhcmUgZGlhbGluZyBvdXQgYW5kIGZp bmQgdGhhdCBkb3dubG9hZHMgd29yayBidXQgdXBsb2FkcyBkb24ndCwKKyAgIHRyeSBhZ2FpbiB3 aXRoIGEgbG93ZXIgc2VyaWFsLXBvcnQgc3BlZWQuIENhc2UgaW4gcG9pbnQ6IGRpYWxpbmcgb3V0 IG9uCisgICBhIGNlcnRhaW4gUEMgZnJvbSBMaW51eCBhdCAxMTUyMDAgYnBzIHVzaW5nIGEgVVNS IENvdXJpZXIgNTZLCisgICAiVi5FdmVyeXRoaW5nIiBleHRlcm5hbCBtb2RlbSBhbmQgUlRTL0NU UyBmbG93IGNvbnRyb2wuIERvd25sb2FkcworICAgd29ya2VkIGZsYXdsZXNzbHksIHVwbG9hZHMg c3RvcHBlZCBkZWFkIGFmdGVyIHRoZSBmaXJzdCBmZXcgcGFja2V0cworICAgd2VyZSBzZW50LiBU aGUgbW9kZW0gbGlnaHRzIHNob3dlZCBjb25zdGFudCByZXRyYWluaW5nIChBUlEgbGlnaHQKKyAg IGJsaW5rcyBzbG93bHkpLCBhbmQgdGhlIENUUyBsaWdodCB3YXMgb2ZmIDk1JSBvZiB0aGUgdGlt ZSwgYWxsb3dpbmcKKyAgIG5vdGhpbmcgdG8gZ2V0IHRocm91Z2guIFJlZHVjaW5nIHRoZSBzZXJp YWwgcG9ydCBzcGVlZCB0byA1NzYwMCBicHMKKyAgIG1hZGUgdGhlIHByb2JsZW1zIGdvIGF3YXku IEV2aWRlbnRseSB0aGUgUEMgaW4gcXVlc3Rpb24gaGFzIGEgdmVyeSBmYXN0CisgICBzZXJpYWwg cG9ydCwgc2luY2UgZGlhbGluZyB0aGUgc2FtZSBtb2RlbSB3aXRoIGEgZGlmZmVyZW50IFBDIGF0 IDExNTIwMAorICAgYnBzIHdvcmtzIHdpdGhvdXQgaW5jaWRlbnQuCisKKzEwLjQuIFRDUC9JUCBD b25uZWN0aW9ucworCisgICBJZiB5b3UgaGF2ZSB0cm91YmxlIHRyYW5zZmVycmluZyBmaWxlcyBv dmVyIGEgVENQL0lQIGNvbm5lY3Rpb24sIHRlbGwKKyAgIEtlcm1pdCB0byBTRVQgUEFSSVRZIFNQ QUNFIGFuZCB0cnkgYWdhaW4uIElmIHRoYXQgZG9lc24ndCB3b3JrLCBhbHNvCisgICB0cnkgYSBz aG9ydGVyIHBhY2tldCBsZW5ndGggb3Igc21hbGxlciB3aW5kb3cgc2l6ZSAodG8gY29tcGVuc2F0 ZSBmb3IKKyAgIGNlcnRhaW4gd2VsbC1rbm93biBicm9rZW4gVGVsbmV0IHNlcnZlcnMpLCBhbmQv b3IgU0VUIFJFTElBQkxFIE9GRi4KKworMTAuNS4gTXVsdGlob3AgQ29ubmVjdGlvbnMKKworICAg SWYgeW91IGhhdmUgYSBtdWx0aWhvcCBjb25uZWN0aW9uLCB3aXRoIHRoZSBpbnRlcmlvciBub2Rl cyBpbiBDT05ORUNUCisgICBtb2RlIChLZXJtaXQsIFRlbG5ldCwgUmxvZ2luLCBvciBhbnkgb3Ro ZXIpLCB5b3UgY2FuIGV4cGVjdCAoYSkgZmlsZQorICAgdHJhbnNmZXIgdG8gYmUgc2xvd2VyLCBh bmQgKGIpIHRoZSBjb25uZWN0aW9uIHRvIGJlIGxlc3MgdHJhbnNwYXJlbnQKKyAgICh0byBjb250 cm9sIGNoYXJhY3RlcnMsIHBlcmhhcHMgdG8gdGhlIDh0aCBiaXQpIHRoYW4gYSBtb3JlIGRpcmVj dAorICAgY29ubmVjdGlvbi4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlciBoYXZlIGEgIi0wIiAoZGFz aC16ZXJvKSBjb21tYW5kLWxpbmUKKyAgIG9wdGlvbiB0byBtYWtlIGl0IDEwMCUgdHJhbnNwYXJl bnQgaW4gY2FzZXMgd2hlcmUgaXQgaXMgdG8gYmUgdXNlZCBpbgorICAgdGhlIG1pZGRsZS4KKwor MTAuNi4gUmVjb3ZlcnkKKworICAgVGhlIHJlY292ZXJ5IGZlYXR1cmUgKFJFU0VORCBjb21tYW5k KSB0aGF0IHdhcyBhZGRlZCBpbiB2ZXJzaW9uIDVBKDE5MCkKKyAgIHdvcmtzIG9ubHkgZm9yIGJp bmFyeS1tb2RlIHRyYW5zZmVycy4gSW4gb3JkZXIgZm9yIHRoaXMgZmVhdHVyZSB0byBiZQorICAg dXNlZnVsIGF0IGFsbCwgdGhlIGRlZmF1bHQgZm9yIFNFVCBGSUxFIElOQ09NUExFVEUgd2FzIGNo YW5nZWQgZnJvbQorICAgRElTQ0FSRCB0byBLRUVQLiBPdGhlcndpc2UgYW4gaW50ZXJydXB0ZWQg dHJhbnNmZXIgd291bGQgbGVhdmUgbm8KKyAgIHBhcnRpYWwgZmlsZSBiZWhpbmQgdW5sZXNzIHlv dSBoYWQgcmVtZW1iZXJlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQuCisgICBCdXQgbm93IHlvdSBo YXZlIHRvIHBheSBjbG9zZXIgYXR0ZW50aW9uIHRvIEtlcm1pdCdzIG1lc3NhZ2VzIHRvIGtub3cK KyAgIHdoZXRoZXIgYSB0cmFuc2ZlciBzdWNjZWVkZWQgb3IgZmFpbGVkIC0tIHByZXZpb3VzbHks IGlmIGl0IGZhaWxlZCwgdGhlCisgICBmaWxlIHdvdWxkIG5vdCBzaG93IHVwIG9uIHRoZSByZWNl aXZpbmcgZW5kIGF0IGFsbDsgaW4gNUEoMTkwKSBhbmQKKyAgIGxhdGVyLCB5b3UnbGwgZ2V0IGEg cGFydGlhbCBmaWxlIHdoaWNoIGNvdWxkIGVhc2lseSBiZSBtaXN0YWtlbiBmb3IgdGhlCisgICBj b21wbGV0ZSBmaWxlIHVubGVzcyB5b3UgY2hhbmdlIHRoZSBkZWZhdWx0IGJhY2sgdG8gRElTQ0FS RCBvciByZWFkIHRoZQorICAgc2NyZWVuIG1lc3NhZ2VzLCBvciBrZWVwIGEgdHJhbnNhY3Rpb24g bG9nLgorCisxMC43LiBGaWxlbmFtZSBDb2xsaXNpb25zCisKKyAgIFNFVCBGSUxFIENPTExJU0lP TiBCQUNLVVAgaXMgdGhlIGRlZmF1bHQuIFRoaXMgbWVhbnM6CisKKyAgICAgKiBJZiB5b3Ugc2Vu ZCB0aGUgc2FtZSBmaWxlIGxvdHMgb2YgdGltZXMsIHRoZXJlIHdpbGwgYmUgbWFueSBiYWNrdXAK KyAgICAgICBmaWxlcy4gVGhlcmUgaXMgbm8gYXV0b21hdGljIG1lY2hhbmlzbSB3aXRoaW4gS2Vy bWl0IHRvIGRlbGV0ZQorICAgICAgIHRoZW0sIG5vIG5vdGlvbiBvZiBhICJ2ZXJzaW9uIHJldGVu dGlvbiBjb3VudCIsIGV0YywgYnV0IHlvdSBjYW4KKyAgICAgICB1c2UgdGhlIFBVUkdFIGNvbW1h bmQgdG8gY2xlYW4gdGhlbSB1cC4KKyAgICAgKiBJZiBhIGZpbGUgYXJyaXZlcyB0aGF0IGhhcyB0 aGUgc2FtZSBuYW1lIGFzIGEgZGlyZWN0b3J5LCB0aGUgZmlsZQorICAgICAgIHRyYW5zZmVyIGZh aWxzIGJlY2F1c2UgS2VybWl0IHdpbGwgbm90IHJlbmFtZSBhIGRpcmVjdG9yeS4gU2VuZCB0aGUK KyAgICAgICBmaWxlIHdpdGggYW5vdGhlciBuYW1lLCBvciB1c2UgU0VUIEZJTEUgQ09MTElTSU9O IFJFTkFNRS4KKyAgICAgKiBJZiB0aGUgZGlyZWN0b3J5IGxhY2tzIHdyaXRlIHBlcm1pc3Npb24s IHRoZSBmaWxlIHRyYW5zZmVyIGZhaWxzCisgICAgICAgZXZlbiBpZiB5b3UgaGF2ZSB3cml0ZSBh Y2Nlc3MgdG8gdGhlIGZpbGUgdGhhdCBpcyBiZWluZyBiYWNrZWQgdXA7CisgICAgICAgaW4gdGhh dCBjYXNlLCBzd2l0Y2ggdG8gU0VUIEZJTEUgQ09MTElTSU9OIE9WRVJXUklURSBvciBBUFBFTkQs IG9yCisgICAgICAgc2VuZCB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisKKyAgIFNFVCBGSUxF IENPTExJU0lPTiBVUERBVEUgZGVwZW5kcyBvbiB0aGUgZGF0ZS90aW1lIHN0YW1wIGluIHRoZQor ICAgYXR0cmlidXRlIHBhY2tldC4gSG93ZXZlciwgdGhpcyBpcyByZWNvcmRlZCBpbiBsb2NhbCB0 aW1lLCBub3QKKyAgIFVuaXZlcnNhbCBUaW1lIChHTVQpLCBhbmQgdGhlcmUgaXMgbm8gaW5kaWNh dGlvbiBvZiB0aW1lIHpvbmUuIFRoZSB0aW1lCisgICBpcyBleHByZXNzZWQgdG8gdGhlIHByZWNp c2lvbiBvZiAxIHNlY29uZCwgYnV0IHNvbWUgZmlsZSBzeXN0ZW1zIGRvIG5vdAorICAgcmVjb3Jk IHdpdGggdGhpcyBwcmVjaXNpb24gLS0gZm9yIGV4YW1wbGUsIE1TLURPUyByZWNvcmRzIHRoZSBm aWxlCisgICBkYXRlL3RpbWUgb25seSB0byB0aGUgbmVhcmVzdCAyIHNlY29uZHMuIFRoaXMgbWln aHQgY2F1c2UgdXBkYXRlCisgICBvcGVyYXRpb25zIHRvIHNlbmQgbW9yZSBmaWxlcyB0aGFuIG5l Y2Vzc2FyeS4KKworICAgKFRoaXMgcGFyYWdyYXBoIGRvZXMgTk9UIGFwcGx5IHRvIFVOSVgsIHdo ZXJlLCBhcyBvZiBDLUtlcm1pdCA3LjAsCisgICBDLUtlcm1pdCBwaXBlcyBpbmNvbWluZyBtYWls IGFuZCBwcmludCBtYXRlcmlhbCBkaXJlY3RseSB0aGUgbWFpbCBvcgorICAgcHJpbnQgcHJvZ3Jh bSk6IFdoZW4gQy1LZXJtaXQgaXMgcmVjZWl2aW5nIGZpbGVzIGZyb20gYW5vdGhlciBLZXJtaXQK KyAgIHByb2dyYW0gdGhhdCBoYXMgYmVlbiBnaXZlbiB0aGUgTUFJTCBvciBSRU1PVEUgUFJJTlQg Y29tbWFuZCwgQy1LZXJtaXQKKyAgIGZvbGxvd3MgdGhlIGN1cnJlbnQgZmlsZW5hbWUgY29sbGlz aW9uIGFjdGlvbi4gVGhpcyBjYW4gYmUKKyAgIGRpc2NvbmNlcnRpbmcgaWYgdGhlIGFjdGlvbiB3 YXMgKGZvciBleGFtcGxlKSBCQUNLVVAsIGJlY2F1c2UgdGhlCisgICBleGlzdGluZyBmaWxlIHdp bGwgYmUgcmVuYW1lZCwgYW5kIHRoZSBuZXcgZmlsZSB3aWxsIGJlIG1haWxlZCAob3IKKyAgIHBy aW50ZWQpIGFuZCB0aGVuIGRlbGV0ZWQuIEtlcm1pdCBjYW5ub3QgdGVtcG9yYXJpbHkgY2hhbmdl IHRvIFJFTkFNRQorICAgYmVjYXVzZSB0aGUgZmlsZSBjb2xsaXNpb24gYWN0aW9uIG9jY3VycyB3 aGVuIHRoZSBmaWxlbmFtZSBwYWNrZXQgaXMKKyAgIHJlY2VpdmVkLCBhbmQgdGhlIFBSSU5UIG9y IE1BSUwgZGlzcG9zaXRpb24gb25seSBjb21lcyBsYXRlciwgaW4gdGhlCisgICBBdHRyaWJ1dGUg cGFja2V0LgorCisgICBXYXRjaCBvdXQgZm9yIFNFVCBGSUxFIENPTExJU0lPTiBSRU5BTUUsIGVz cGVjaWFsbHkgd2hlbiB1c2VkIGluCisgICBjb25qdW5jdGlvbiB3aXRoIHJlY292ZXJ5LiBSZWNh bGwgdGhhdCB0aGlzIG9wdGlvbiAod2hpY2ggaXMgTk9UIHRoZQorICAgZGVmYXVsdCkgcmVuYW1l cyB0aGUgaW5jb21pbmcgZmlsZSBpZiBhIGZpbGUgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGUKKyAg IHNhbWUgbmFtZSAodGhlIGRlZmF1bHQgaXMgdG8gcmVuYW1lIHRoZSBwcmV2aW91c2x5IGV4aXN0 aW5nIGZpbGUsIGFuZAorICAgc3RvcmUgdGhlIGluY29taW5nIGZpbGUgd2l0aCBpdHMgb3duIG5h bWUpLiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZAorICAgdGhhdCB5b3UgZG8gbm90IHVzZSBT RVQgRklMRSBDT0xMSVNJT04gUkVOQU1FIGlmIHlvdSBldmVyIGludGVuZCB0byB1c2UKKyAgIHRo ZSByZWNvdmVyeSBmZWF0dXJlOgorCisgICAgICogV2hlbiB0aGUgZmlsZSBpcyBmaXJzdCByZWNl aXZlZCBieSBDLUtlcm1pdCwgaXRzIG5hbWUgaXMgY2hhbmdlZCBpZgorICAgICAgIGFub3RoZXIg ZmlsZSBhbHJlYWR5IGhhcyB0aGUgc2FtZSBuYW1lLiBXaGVuIHlvdSBSRVNFTkQgdGhlIHNhbWUK KyAgICAgICBmaWxlIGFmdGVyIGEgZmFpbHVyZSwgQy1LZXJtaXQgd2lsbCBwcm9iYWJseSB0cnkg dG8gYXBwZW5kIHRoZQorICAgICAgIHJlLXNlbnQgcG9ydGlvbiB0byB0aGUgd3JvbmcgZmlsZS4K KyAgICAgKiBBc3N1bWluZyB0aGF0IHlvdSBnZXQgUkVTRU5EIHRvIHdvcmsgd2l0aCBGSUxFIENP TExJU0lPTiBSRU5BTUUsCisgICAgICAgQy1LZXJtaXQsIHdoZW4gcmVjZWl2aW5nIHRoZSByZW1h aW5kZXIgb2YgdGhlIGZpbGUgZHVyaW5nIGEgUkVTRU5ECisgICAgICAgb3BlcmF0aW9uLCB3aWxs IHJlcG9ydCBiYWNrIHRoZSB3cm9uZyBuYW1lLiBOb3RoaW5nIGNhbiBiZSBkb25lCisgICAgICAg YWJvdXQgdGhpcyBiZWNhdXNlIHRoZSBuYW1lIGlzIHJlcG9ydGVkIGJhY2sgYmVmb3JlIHRoZSBy ZWNlaXZpbmcKKyAgICAgICBLZXJtaXQgcHJvZ3JhbSBmaW5kcyBvdXQgdGhhdCBpdCBpcyBhIHJl Y292ZXJ5IG9wZXJhdGlvbi4KKworICAgQWxzbyB3YXRjaCBvdXQgZm9yIERJU0FCTEUgREVMRVRF LCBzaW5jZSB0aGlzIGltcGxpY2l0bHkgc2V0cyBGSUxFCisgICBDT0xMSVNJT04gdG8gUkVOQU1F LiBBbmQgbm90ZSB0aHQgREVMRVRFIGlzIERJU0FCTEVkIGF1dG9tYXRpY2FsbHkgYW55CisgICB0 aW1lIHlvdSBLZXJtaXQgaXMgaW4gbG9jYWwgbW9kZSAoaS5lLiBpdCBtYWtlcyBhIGNvbm5lY3Rp b24pLiBBbHNvCisgICBub3RlIHRoYXQgZm9yIHB1cnBvc2VzIG9mIERJU0FCTEUgYW5kIEVOQUJM RSwgInNldCBob3N0ICoiIGNvbm5lY3Rpb25zCisgICBkbyBub3QgY291bnQgYXMgbG9jYWwgbW9k ZSBldmVuIHRob3VnaCwgc3RyaWN0bHkgc3BlYWtpbmcsIHRoZXkgYXJlLgorCisxMC44LiBET1Mg UGF0aG5hbWVzCisKKyAgIFdoZW4gcmVmZXJyaW5nIHRvIGZvcmVpZ24gTVMtRE9TLCBXaW5kb3dz LCBBdGFyaSBTVCwgT1MvMiwgb3Igb3RoZXIKKyAgIGZpbGUgc3BlY2lmaWNhdGlvbnMgdGhhdCBj b250YWluIGJhY2tzbGFzaCBjaGFyYWN0ZXJzIGluIGEgQy1LZXJtaXQKKyAgIGNvbW1hbmQsIHlv dSBtaWdodCBoYXZlIHRvIGRvdWJsZSBlYWNoIGJhY2tzbGFzaCwgZm9yIGV4YW1wbGU6CisKKyAg Qy1LZXJtaXQ+Z2V0IGM6XFxkaXJlY3RvcnlcXGZvby50eHQKKworICAgVGhpcyBpcyBiZWNhdXNl IGJhY2tzbGFzaCBpcyB1c2VkIGluIEMtS2VybWl0IGNvbW1hbmRzIGZvciBpbnRyb2R1Y2luZwor ICAgc3BlY2lhbCBjaGFyYWN0ZXIgY29kZXMsIHZhcmlhYmxlcywgZnVuY3Rpb25zLCBldGMuCisK KzEwLjkuIENhbmNlbGxhdGlvbgorCisgICBJZiBhdHRlbXB0aW5nIHRvIGNhbmNlbCBsb2NhbC1t b2RlIGZpbGUgcmVjZXB0aW9uIGF0IGEgdmVyeSBlYXJseSBzdGFnZQorICAgKGkuZS4gYmVmb3Jl IGRhdGEgcGFja2V0cyBhcmUgZXhjaGFuZ2VkKSB3aXRoIFggb3IgWiBkb2VzIG5vdCB3b3JrLCB1 c2UKKyAgIEUgb3IgQ3RybC1DIGluc3RlYWQsIG9yIHdhaXQgdW50aWwgdGhlIGZpcnN0IGRhdGEg cGFja2V0cyBhcmUgc2VudC4KKworICAgSWYgeW91IGNhbmNlbCBhIHRyYW5zZmVyIHRoYXQgaXMg dW5kZXJ3YXkgdXNpbmcgWCBvciBaLCBhbmQgYSBsb3Qgb2YKKyAgIHdpbmRvdyBzbG90cyBhcmUg aW4gdXNlLCBpdCBtaWdodCB0YWtlIGEgd2hpbGUgZm9yIHRoZSBjYW5jZWxsYXRpb24gdG8KKyAg IHRha2UgZWZmZWN0LCBlc3BlY2lhbGx5IGlmIHlvdSBkbyB0aGlzIG9uIHRoZSByZWNlaXZpbmcg ZW5kOyB0aGF0J3MKKyAgIGJlY2F1c2UgYSBsb3Qgb2YgcGFja2V0cyBtaWdodCBhbHJlYWR5IGJl IG9uIHRoZWlyIHdheSB0byB5b3UuIEluIHRoYXQKKyAgIGNhc2UsIGp1c3QgYmUgcGF0aWVudCBh bmQgbGV0IEtlcm1pdCAiZHJhaW4iIHRoZW0uCisKKyAgIElmIEMtS2VybWl0IGlzIHNlbmRpbmcg YSBmaWxlLCByZW1vdGUtbW9kZSBwYWNrZXQtbW9kZSBicmVha291dCAodGhyZWUKKyAgIGNvbnNl Y3V0aXZlIEN0cmwtQydzIGJ5IGRlZmF1bHQpIGlzIG5vdCBlZmZlY3RpdmUgdW50aWwgYWZ0ZXIg Qy1LZXJtaXQKKyAgIHNlbmRzIGl0cyBmaXJzdCBwYWNrZXQuIElmIEMtS2VybWl0IGlzIHJlY2Vp dmluZyBhIGZpbGUgb3IgaXMgaW4gc2VydmVyCisgICBtb2RlLCBpdCBpcyBlZmZlY3RpdmUgcmln aHQgYXdheS4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgU0VUIERFTEFZCisgICB2YWx1ZSBkZXRl cm1pbmVzIHRoZSBlYXJsaWVzdCB0aW1lIGF0IHdoaWNoIHlvdSBjYW4gYnJlYWsgb3V0IG9mIHBh Y2tldAorICAgbW9kZS4KKworMTAuMTAuIFBhcnRuZXIgUGVjdWxpYXJpdGllcworCisgICBXaGVu IG9uZSBvciBib3RoIHBhcnRuZXJzIGlzIG9uIGFuIFNDTyBvcGVyYXRpbmcgc3lzdGVtIHN1Y2gg YXMgT1NSNSwKKyAgIHlvdSBtaWdodCBpc3N1ZSB0aGUgY29tbWFuZDoKKworbWFwY2hhbiAtbgor CisgICB0byBkaXNhYmxlIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbiBieSB0aGUgdGVybWluYWwg ZHJpdmVyLiBTaW1pbGFybHkKKyAgIGZvciBBSVg6CisKK3NldG1hcHMgLXQgTk9NQVAKKworICAg V2hlbiB1c2luZyBDLUtlcm1pdCB0byB0cmFuc2ZlciBmaWxlcyB3aXRoIHRoZSBIUDQ4U1ggY2Fs Y3VsYXRvciwgeW91CisgICBtdXN0IFNFVCBGTE9XIE5PTkUuIFRoZSBIUDQ4U1ggZG9lcyBub3Qg c3VwcG9ydCBmbG93IGNvbnRyb2wsIGFuZAorICAgZXZpZGVudGx5IGFsc28gYmVjb21lcyBjb25m dXNlZCBpZiB5b3UgYXR0ZW1wdCB0byB1c2UgaXQuIFlvdSBtaWdodAorICAgYWxzbyBuZWVkIHRv IHVzZSBTRVQgU0VORCBQQVVTRSAxMDAgKG9yIG90aGVyIG51bWJlcikuIEZvciBncmVhdGVyCisg ICBkZXRhaWwgYWJvdXQgdHJhbnNmZXJyaW5nIGZpbGVzIHRoZSBIUC00OCwgc2VlOgorCisgIFs4 NV1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaHA0OC5odG1sCisKKyAgIFNvbWUgY29t bXVuaWNhdGlvbiBwcm9ncmFtcyBoYXZlIGVycm9ycyBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiBv ZgorICAgS2VybWl0IGF0dHJpYnV0ZSBwYWNrZXRzLiBJZiB5b3UgZ2V0IGFuIGVycm9yIG1lc3Nh Z2UgZnJvbSB5b3VyCisgICBjb21tdW5pY2F0aW9uIHByb2dyYW0gbGlrZSAiQXR0cmlidXRlIGVy cm9yIiwgdGVsbCBDLUtlcm1pdCB0byBTRVQKKyAgIEFUVFJJQlVURVMgT0ZGLiBCZXR0ZXIgeWV0 LCBzd2l0Y2ggdG8gYSByZWFsIEtlcm1pdCBwcm9ncmFtLgorCisgICBTb21lIGNvbW11bmljYXRp b24gc29mdHdhcmUgY2xhaW1zIHRvIGltcGxlbWVudCBLZXJtaXQgc2xpZGluZyB3aW5kb3dzLAor ICAgYnV0IGRvZXMgc28gaW5jb3JyZWN0bHkuIElmIHNsaWRpbmcgd2luZG93IHRyYW5zZmVycyBm YWlsLCBzZXQKKyAgIEMtS2VybWl0J3Mgd2luZG93IHNpemUgdG8gdGhlIHNtYWxsZXN0IG9uZSB0 aGF0IHdvcmtzLCBmb3IgZXhhbXBsZSwgU0VUCisgICBXSU5ET1cgMS4KKworICAgRm9yIGxvdHMg bW9yZSBkZXRhaWwgYWJvdXQgaG93IHRvIGNvcGUgd2l0aCBkZWZlY3RpdmUgS2VybWl0IHBhcnRu ZXJzLAorICAgc2VlOgorCisgICAgICogWzg2XUNvcGluZyB3aXRoIEZhdWx0eSBLZXJtaXQgSW1w bGVtZW50YXRpb25zIChDLUtlcm1pdCA3LjAgYW5kCisgICAgICAgbGF0ZXIpLgorICAgICAqIFs4 N11Db3Bpbmcgd2l0aCBCcm9rZW4gS2VybWl0IFBhcnRuZXJzIChDLUtlcm1pdCA4LjAgYW5kIGxh dGVyKS4KKworICAgVGhlIFVOSVggdmVyc2lvbiBvZiBDLUtlcm1pdCBkaXNjYXJkcyBjYXJyaWFn ZSByZXR1cm5zIHdoZW4gcmVjZWl2aW5nCisgICBmaWxlcyBpbiB0ZXh0IG1vZGUuIFRodXMsICJi YXJlIiBjYXJyaWFnZSByZXR1cm5zIChzb21ldGltZXMgdXNlZCB0bworICAgYWNoaWV2ZSBvdmVy c3RyaWtpbmcpIGFyZSBsb3N0LgorCisxMS4gU0NSSVBUIFBST0dSQU1NSU5HCisKKyAgIFsgWzg4 XVRvcCBdIFsgWzg5XUNvbnRlbnRzIF0gWyBbOTBdUHJldmlvdXMgXQorCisxMS4xLiBDb21tZW50 cyBWZXJzdXMgdGhlIFNDUklQVCBDb21tYW5kCisKKyAgIFJlbWVtYmVyIHRoYXQgIjsiIGFuZCAi IyIgaW50cm9kdWNlIGNvbW1lbnRzIHdoZW4gKGEpIHRoZXkgYXJlIHRoZQorICAgZmlyc3QgY2hh cmFjdGVyIG9uIHRoZSBsaW5lLCBvciAoYikgdGhleSBhcmUgcHJlY2VkZWQgYnkgYXQgbGVhc3Qg b25lCisgICBibGFuayBvciB0YWIgd2l0aGluIGEgbGluZS4gVGh1cyBjb25zdHJ1Y3Rpb25zIGxp a2U6CisKKyAgSU5QVVQgNSA7CisgIFNDUklQVCB+MCAjLS0jLS0jCisKKyAgIG11c3QgYmUgY29k ZWQgdXNpbmcgYmFja3NsYXNoIG5vdGF0aW9uIHRvIGtlZXAgdGhlIGRhdGEgZnJvbSBiZWluZwor ICAgaWdub3JlZDoKKworICBJTlBVVCA1IFw1OSAgICAgICAgICAgICAgICAgICA7IDU5IGlzIHRo ZSBkZWNpbWFsIEFTQ0lJIGNvZGUgZm9yICI7IgorICBTQ1JJUFQgfjAgXDM1LS0jLS0jICAgICAg ICAgICA7IDQzIGlzIHRoZSBkZWNpbWFsIEFTQ0lJIGNvZGUgZm9yICIjIgorCisgICBvciwgbW9y ZSBzaW1wbHk6CisKKyAgSU5QVVQgNSBcOyAgICAgICAgICAgICAgICAgICAgOyBKdXN0IHF1b3Rl IHRoZSBzZW1pY29sb24KKyAgU0NSSVBUIH4wIFwjLS0jLS0jICAgICAgICAgICAgOyBKdXN0IHF1 b3RlIHRoZSAiIyIKKworMTEuMi4gQWxwaGFiZXRpYyBDYXNlIGFuZCB0aGUgSU5QVVQgQ29tbWFu ZAorCisgICBJTlBVVCBhbmQgTUlOUFVUIGNhc2VsZXNzIHN0cmluZyBjb21wYXJpc29ucyBkbyBu b3Qgd29yayBmb3Igbm9uLUFTQ0lJCisgICAoaW50ZXJuYXRpb25hbCkgY2hhcmFjdGVycy4gV29y a2Fyb3VuZDogU0VUIElOUFVUIENBU0UgT0JTRVJWRS4gRXZlbgorICAgdGhlbiwgdGhlICJsZXhp Y2FsbHkgbGVzcyB0aGFuIiBhbmQgImxleGljYWxseSBncmVhdGVyIHRoYW4iIG9wZXJhdGlvbnMK KyAgIChJRiBMTFQsIElGIExHVCkgcHJvYmFibHkgd29uJ3Qgd29yayBhcyBleHBlY3RlZC4gVGhl IHNhbWUgaXMgdHJ1ZSBmb3IKKyAgIHRoZSBjYXNlLWNvbnZlcnNpb24gZnVuY3Rpb25zIFxGbG93 ZXIoKSBhbmQgXEZ1cHBlcigpLiBDLUtlcm1pdCBkb2VzCisgICBub3Qga25vdyB0aGUgY29sbGF0 aW5nIHNlcXVlbmNlIGZvciBkaWZmZXJlbnQgY2hhcmFjdGVyIHNldHMgYW5kCisgICBsYW5ndWFn ZXMuIChPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbWlnaHQgd29yayBkZXBlbmRpbmcgb24gc3VjaCBp dGVtcyBhcworICAgaG93IEtlcm1pdCB3YXMgbGlua2VkLCB3aGV0aGVyIHlvdXIgb3BlcmF0aW5n IHN1cHBvcnRzICJsb2NhbGVzIiwgZXRjKQorCisxMS4zLiBOVUwgKDApIENoYXJhY3RlcnMgaW4g Qy1LZXJtaXQgQ29tbWFuZHMKKworICAgWW91IGNhbid0IGluY2x1ZGUgYSBOVUwgY2hhcmFjdGVy IChcMCkgaW4gQy1LZXJtaXQgY29tbWFuZCB0ZXh0IHdpdGhvdXQKKyAgIHRlcm1pbmF0aW5nIHRo ZSBjaGFyYWN0ZXIgc3RyaW5nIGluIHdoaWNoIGl0IGFwcGVhcnMuIEZvciBleGFtcGxlOgorCisg IGVjaG8gSW4gdGhlc2UgYnJhY2tldHMgW1wwXSBpcyBhIE5VTAorCisgICB3aWxsIGVjaG8gIklu IHRoZXNlIGJyYWNrZXRzIFsiLiBUaGlzIGFwcGxpZXMgdG8gRUNITywgSU5QVVQsIE9VVFBVVCwK KyAgIGFuZCBhbGwgb3RoZXIgY29tbWFuZHMgKGJ1dCB5b3UgY2FuIHJlcHJlc2VudCBOVUwgYnkg IlxOIiBpbiBhbiBPVVRQVVQKKyAgIHN0cmluZykuIFRoaXMgaXMgYmVjYXVzZSBDLWxhbmd1YWdl IHN0cmluZ3MgYXJlIHRlcm1pbmF0ZWQgaW50ZXJuYWxseQorICAgYnkgdGhlIE5VTCBjaGFyYWN0 ZXIsIGFuZCBpdCBhbGxvd3MgYWxsIG9mIEMtS2VybWl0J3Mgc3RyaW5nIGNvbXBhcmlzb24KKyAg IGFuZCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHRvIHdvcmsgaW4gdGhlIG5vcm1hbCAiQyIgd2F5 LgorCisgICBUbyBpbGx1c3RyYXRlOgorCisgIElOUFVUIDUgXDAKKworICAgaXMgZXF1aXZhbGVu dCB0bzoKKworICBJTlBVVCA1CisKKyAgIGFuZDoKKworICBJTlBVVCA1IEFCQ1wwREVGCisKKyAg IGlzIGVxdWl2YWxlbnQgdG86CisKKyAgSU5QVVQgNSBBQkMKKworICAgSU5QVVQgb3BlcmF0aW9u cyBkaXNjYXJkIGFuZCBpZ25vcmUgTlVMIGNoYXJhY3RlcnMgdGhhdCBhcnJpdmUgZnJvbSB0aGUK KyAgIGNvbW11bmljYXRpb24gZGV2aWNlLCBtZWFuaW5nIHRoYXQgdGhleSBkbyBub3QgZmlndXJl IGludG8gbWF0Y2hpbmcKKyAgIG9wZXJhdGlvbnMgKGUuZy4gQTxOVUw+QiBtYXRjaGVzIEFCKTsg dGhleSBhcmUgbm90IGRlcG9zaXRlZCBpbiB0aGUKKyAgIElOUFVUIGJ1ZmZlciAoXHYoaW5wdXQp KTsgYW5kIHRoZXkgYXJlIG5vdCBjb3VudGVkIGluIFx2KGluY291bnQpLCB3aXRoCisgICB0d28g ZXhjZXB0aW9uczoKKworICAgIDEuIEFuIGFycml2aW5nIE5VTCBjaGFyYWN0ZXIgcmVzdGFydHMg dGhlIElOUFVUIFNJTEVOQ0UgdGltZXIuCisgICAgMi4gQW4gYXJyaXZpbmcgTlVMIGNoYXJhY3Rl ciB0ZXJtaW5hdGVzIHRoZSBJTlBVVCBjb21tYW5kIHdpdGggdGhlCisgICAgICAgU1VDQ0VTUyBj b25kaXRpb24gaWYgdGhlIElOUFVUIGNvbW1hbmQgd2FzIGdpdmVuIGFuIGVtcHR5IHNlYXJjaAor ICAgICAgIHN0cmluZy4gSW4gdGhpcyBjYXNlIFx2KGluY291bnQpIGlzIHNldCB0byAxLgorCisg ICBBbHNvLCB0aGUgXHYoaW5jaGFyKSB2YXJpYWJsZSBpcyBudWxsIChjb21wbGV0ZWx5IGVtcHR5 KSBpZiB0aGUgbGFzdAorICAgSU5QVVQgY2hhcmFjdGVyIHdhcyBOVUwuIFRoYXQgaXMsIHRoZXJl IGlzIG5vIHdheSB0byB0ZWxsIG9ubHkgYnkKKyAgIGxvb2tpbmcgYXQgXHYoaW5jaGFyKSB0aGUg ZGlmZmVyZW5jZSBiZXR3ZWVuIGEgTlVMIHRoYXQgd2FzIElOUFVUIGFuZAorICAgbm8gSU5QVVQg YXQgYWxsLiBJZiB0aGUgSU5QVVQgY29tbWFuZCBzdWNjZWVkZWQgYnV0IFx2KGluY2hhcikgaXMK KyAgIGVtcHR5LCB0aGVuIGEgTlVMIGNoYXJhY3RlciB3YXMgaW5wdXQuIEFsc28sIFx2KGluY291 bnQpIHdpbGwgYmUgc2V0IHRvCisgICAxLgorCisgICBIZXJlJ3MgYSBzYW1wbGUgc2NyaXB0IGZy YWdtZW50IHRvIHJlYWQgY2hhcmFjdGVycywgcG9zc2libHkgaW5jbHVkaW5nCisgICBOVUwsIGZy b20gdGhlIGNvbW11bmljYXRpb24gY29ubmVjdGlvbiBhbmQgd3JpdGUgdGhlbSB0byBhIGZpbGU6 CisKKyAgd2hpbGUgdHJ1ZSB7CisgICAgICBpbnB1dCAxICAgICAgICAgICAgICAgICAgICAgIDsg cmVhZCBvbmUgYnl0ZQorICAgICAgaWYgZmFpbCBicmVhayAgICAgICAgICAgICAgICA7IHRpbWVk IG91dCBvciBjb25uZWN0aW9uIGNsb3NlZAorICAgICAgZndyaXRlIC9jaGFyIFwlYyBcdihpbmNo YXIpICA7IHJlY29yZCB0aGUgYnl0ZQorICB9CisKKyAgIFRoaXMgd29ya3MgYmVjYXVzZSB3aGVu IFx2KGluY2hhcikgaXMgTlVMLCB0aGF0J3MgZXF1aXZhbGVudCB0byBGV1JJVEUKKyAgIC9DSEFS IGhhdmluZyBubyB0ZXh0IGFyZ3VtZW50IGF0IGFsbCwgaW4gd2hpY2ggY2FzZSBpdCB3cml0ZXMg YSBOVUwKKyAgIGNoYXJhY3Rlci4KKworICAgXHYoaW5jb3VudCkgYW5kIFx2KGluY2hhcikgYXJl IE5PVCBhZmZlY3RlZCBieSB0aGUgQ0xFQVIgY29tbWFuZC4KKworMTEuNC4gXGZmaWxlcygpIGFu ZCBcZm5leHRmaWxlKCkgUGVjdWxpYXJpdGllcworCisgICBUaGUgZm9sbG93aW5nIHNjcmlwdCBw cm9ncmFtOgorCisgIGZvciBcJWkgMSBcZmZpbGVzKG9vZmEuKikgMSB7CisgICAgICBzZW5kIFxm bmV4dGZpbGUoKQorICB9CisKKyAgIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZCBpbiBDLUtlcm1p dCA2LjAgYW5kIGVhcmxpZXIgYnV0IGRvZXMgd29yayBpbgorICAgQy1LZXJtaXQgNy4wIGFuZCBs YXRlci4KKworMTEuNS4gQ29tbWFuZHMgVGhhdCBIYXZlIE9ubHkgTG9jYWwgRWZmZWN0CisKKyAg IENlcnRhaW4gc2V0dGluZ3MgYXJlIGxvY2FsIHRvIGVhY2ggY29tbWFuZCBsZXZlbCwgbWVhbmlu ZyB0aGF0CisgICBzdWJvcmRpbmF0ZSBjb21tYW5kIGxldmVscyAobWFjcm9zIG9yIGNvbW1hbmQg ZmlsZXMpIGNhbiBjaGFuZ2UgdGhlbQorICAgd2l0aG91dCBhZmZlY3RpbmcgdGhlaXIgdmFsdWVz IGF0IGhpZ2hlciBjb21tYW5kIGxldmVscy4gV2hlbiBhIG5ldworICAgY29tbWFuZCBsZXZlbCBp cyBpbnZva2VkLCB0aGUgdmFsdWUgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHByZXZpb3VzCisgICBs ZXZlbC4gVGhlc2Ugc2V0dGluZ3MgYXJlOgorCisgIENBU0UKKyAgQ09VTlQgYW5kIFx2KGNvdW50 KQorICBJTlBVVCBDQVNFCisgIElOUFVUIFRJTUVPVVQKKyAgTUFDUk8gRVJST1IKKyAgUVVJRVQK KyAgVEFLRSBFUlJPUgorCisgICBUaGlzIGFycmFuZ2VtZW50IGFsbG93cyBDQVNFLCBUSU1FT1VU LCBhbmQgRVJST1Igc2V0dGluZ3MsIHdoaWNoIGFyZQorICAgdXNlZCB0byBjb250cm9sIGF1dG9t YXRpYyBleGl0IGZyb20gYSBjb21tYW5kIGZpbGUgb3IgbWFjcm8gdXBvbiBlcnJvciwKKyAgIHRv IGJlIGF1dG9tYXRpY2FsbHkgcmVzdG9yZWQgd2hlbiB0aGUgY29tbWFuZCBmaWxlIG9yIG1hY3Jv IGV4aXRzLgorCisgICBUaGUgQ09VTlQgdmFyaWFibGUgZm9sbG93cyB0aGlzIHJ1bGUgdG9vLCB3 aGljaCBwZXJtaXRzIG5lc3RlZCBTRVQKKyAgIENPVU5UIC8gSUYgQ09VTlQgbG9vcHMsIGFzIGlu IHRoaXMgZXhhbXBsZSBpbiB3aGljaCB0aGUgaW5uZXIgbG9vcAorICAgY291bnRzIGRvd24gZnJv bSB0aGUgY3VycmVudCBDT1VOVCB2YWx1ZSBvZiB0aGUgb3V0ZXIgbG9vcCAodHJ5IGl0KToKKwor ICBERUZJTkUgSU5ORVIgV0hJTEUgQ09VTlQgeyBXUklURSBTQ1JFRU4geyAgIElubmVyOn0sIFNI T1cgQ09VTlQgfQorICBTRVQgQ09VTlQgNQorICBXSElMRSBDT1VOVCB7IFdSSVRFIFNDUkVFTiBP dXRlcjosIFNIT1cgQ09VTlQsIERPIElOTkVSIH0KKworICAgS2VlcCBpbiBtaW5kIHRoYXQgYW4g aW5mZXJpb3IgY29tbWFuZCBsZXZlbCBjYW5ub3QgbWFuaXB1bGF0ZSB0aGUgQ09VTlQKKyAgIHZh bHVlIGhlbGQgYnkgYSBoaWdoZXIgbGV2ZWwuIEZvciBleGFtcGxlOgorCisgIERFRklORSBPT0ZB IFNIT1cgQ09VTlQsIElGIENPVU5UIEdPVE8gTE9PUAorICBTRVQgQ09VTlQgNQorICA6TE9PUAor ICBPT0ZBCisgIEVDSE8gRG9uZQorCisgICByZXN1bHRzIGluIGFuIGluZmluaXRlIGxvb3A7IHRo ZSBDT1VOVCB2YWx1ZSByZW1haW5zIGF0IDUgYmVjYXVzZSBpdCBpcworICAgbmV2ZXIgZGVjcmVt ZW50ZWQgYXQgdGhlIHNhbWUgbGV2ZWwgYXQgd2hpY2ggaXQgd2FzIHNldC4KKworMTEuNi4gTGl0 ZXJhbCBCcmFjZXMgaW4gRnVuY3Rpb24gQ2FsbHMKKworICAgU2luY2UgYnJhY2VzIGFyZSB1c2Vk IGluIGZ1bmN0aW9uIGNhbGxzIHRvIGluZGljYXRlIGdyb3VwaW5nLCB0aGVyZSBpcworICAgbm8g d2F5IHRvIHBhc3MgbGl0ZXJhbCBicmFjZXMgdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gU29sdXRp b246IERlZmluZQorICAgYSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgdGhhdCBoYXMg YnJhY2VzLiBFeGFtcGxlOgorCisgIGRlZmluZSBcJWEgYWJ7Y2QKKyAgZWNobyBcZnN1YnN0cmlu ZyhcJWEpCisgIGFie2NkCisKKyAgIElmIHRoZSBzdHJpbmcgaXMgdG8gc3RhcnQgd2l0aCBhIGxl YWRpbmcgYnJhY2UgYW5kIGVuZCB3aXRoIGEgY2xvc2luZworICAgYnJhY2UsIHRoZW4gZG91Ymxl IGJyYWNlcyBtdXN0IGFwcGVhciBhcm91bmQgdGhlIHN0cmluZyAod2hpY2ggaXRzZWxmCisgICBp cyBlbmNsb3NlZCBpbiBicmFjZXMpOgorCisgIGRlZmluZSBcJWEge3t7Zm9vfX19CisgIGVjaG8g XGZzdWJzdHJpbmcoXCVhKQorICB7Zm9vfQorCisgICBUaGlzIGFsc28gd29ya3MgZm9yIGFueSBv dGhlciBraW5kIG9mIHN0cmluZzoKKworICBkZWZpbmUgXCVhIHt7YWJ7Y2R9fQorICBlY2hvIFxm c3Vic3RyaW5nKFwlYSkKKyAgYWJ7Y2QKKworMTEuNy4gRGVmaW5pbmcgVmFyaWFibGVzIG9uIHRo ZSBDLUtlcm1pdCBDb21tYW5kIExpbmUKKworICAgVG8gZGVmaW5lIHZhcmlhYmxlcyBvbiB0aGUg Qy1LZXJtaXQgY29tbWFuZCBsaW5lLCB1c2UgdGhlIC1DCisgICBjb21tYW5kLWxpbmUgb3B0aW9u IHdpdGggb25lIG9yIG1vcmUgREVGSU5FIG9yIEFTU0lHTiBjb21tYW5kcy4gTm90ZQorICAgdGhh dCB0aGUgQy1LZXJtaXQgY29tbWFuZCBsaW5lIG11c3QgY29wZSB3aXRoIHRoZSBxdW90aW5nIHJ1 bGVzIG9mIHlvdXIKKyAgIHNoZWxsLiBFeGFtcGxlczoKKworICBrZXJtaXQgLUMgImRlZmluZSBc XCVhIGZvbywgZGVmaW5lIHBob25lbnVtYmVyIDc2NTQzMjEiCisKKyAgIEluIHRoaXMgY2FzZSB3 ZSBmb2xsb3cgVU5JWCBxdW90aW5nIHJ1bGVzIGJ5IGRvdWJsaW5nIHRoZSBiYWNrc2xhc2guCisg ICBPbmNlIEMtS2VybWl0IHN0YXJ0cywgdGhlIFwlYSBhbmQgXG0ocGhvbmVudW1iZXIpIHZhcmlh YmxlcyBhcmUgZGVmaW5lZAorICAgYXMgaW5kaWNhdGVkIGFuZCBjYW4gYmUgdXNlZCBpbiB0aGUg bm9ybWFsIHdheS4KKworICAgSW4gRE9TIG9yIFdpbmRvd3Mgb3IgT1MvMiB0aGUgY29tbWFuZCB3 b3VsZCBiZToKKworICBrZXJtaXQgLUMgImRlZmluZSBcJSVhIGZvbywgZGVmaW5lIHBob25lbnVt YmVyIDc2NTQzMjEiCisKKyAgIEhlcmUgd2UgbmVlZCB0byBkb3VibGUgdGhlIHBlcmNlbnQgc2ln biByYXRoZXIgdGhhbiB0aGUgYmFja3NsYXNoCisgICBiZWNhdXNlIG9mIERPUyBzaGVsbCBxdW90 aW5nIHJ1bGVzLgorCisxMS44LiBQZXItQ2hhcmFjdGVyIEVjaG8gQ2hlY2sgd2l0aCB0aGUgT1VU UFVUIENvbW1hbmQKKworICAgU29tZXRpbWVzIHRoZSBPVVRQVVQgY29tbWFuZCBtdXN0IGJlIHVz ZWQgdG8gc2VuZCBjb21tYW5kcyBvciBkYXRhIHRvIGEKKyAgIGRldmljZSBpbiAiZWNob3BsZXgi IG1vZGUsIG1lYW5pbmcgdGhhdCBjaGFyYWN0ZXJzIG11c3QgYmUgc2VudCBvbmUgYXQKKyAgIGEg dGltZSwgYW5kIHRoZSBuZXh0IGNoYXJhY3RlciBjYW4gbm90IGJlIHNlbnQgdW50aWwgdGhlIGVj aG8gZnJvbSB0aGUKKyAgIHByZXZpb3VzIG9uZSBoYXMgYmVlbiByZWNlaXZlZC4gRm9yIGV4YW1w bGUsIGEgY2VydGFpbiBQQlggbWlnaHQgaGF2ZQorICAgdGhpcyBjaGFyYWN0ZXJpc3RpYy4gTGV0 J3Mgc2F5IGEgS2VybWl0IHNjcmlwdCBpcyB1c2VkIHRvIHByb2dyYW0gdGhlCisgICBQQlguIElm IGNoYXJhY3RlcnMgYXJlIHNlbnQgdG9vIGZhc3QsIHRoZXkgY2FuIGJlIGxvc3QuIEl0IHdvdWxk IHNlZW0KKyAgIHRoYXQgdGhlIGNvbW1hbmQ6CisKKyAgU0VUIE9VVFBVVCBQQUNJTkcgbWlsbGlz ZWNvbmRzCisKKyAgIGNvdWxkIGJlIHVzZWQgdG8gdGFrZSBjYXJlIG9mIHRoaXMsIGJ1dCB0aGUg cGFjaW5nIGludGVydmFsIGlzIGNvbnN0YW50CisgICBhbmQgbXVzdCBiZSBzZXQgbGFyZ2UgZW5v dWdoIHRvIGFsbG93IGV2ZW4gdGhlIHNsb3dlc3QgZWNobyB0byBmaW5pc2guCisgICBJZiB0aGUg c2NyaXB0IGlzIGxhcmdlIChhbiBhY3R1YWwgZXhhbXBsZSBpcyAxNCwwMDAgbGluZXMgbG9uZyks IHRoaXMKKyAgIGNhbiBjYXVzZSBpdCB0byB0YWtlIGhvdXJzIGxvbmdlciB0aGFuIGl0IG5lZWRz IHRvLgorCisgICBIZXJlIGlzIGEgbWFjcm8geW91IGNhbiB1c2UgdG8gT1VUUFVUIGEgc3RyaW5n IGluIGFuIEVjaG9wbGV4CisgICBlbnZpcm9ubWVudDoKKworICBkZWZpbmUgWE9VVFBVVCB7Cisg ICAgICBsb2NhbCBcJWMgXCVpCisgICAgICBzZXQgb3V0cHV0IHBhY2luZyAwCisgICAgICBmb3Ig XCVpIDEgXGZsZW4oXCUqKSAxIHsKKyAgICAgICAgICBhc2cgXCVjIFxmc3Vic3RyKFwlKixcJWks MSkKKyAgICAgICAgICBvdXRwdXQgXCVjCisgICAgICAgICAgaW5wdXQgMiBcJWMKKyAgICAgIH0K KyAgfQorCisgICBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIgaXMgcmVxdWlyZWQuCisKKyAgIEl0IHNl bmRzIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGFuZCB0aGVuIHdhaXRzIHVwIHRvIDIgc2Vjb25k cyBmb3IgdGhlCisgICBjaGFyYWN0ZXIgdG8gYmUgZWNob2VkIGJhY2ssIGJ1dCBjb250aW51ZXMg dG8gdGhlIG5leHQgY2hhcmFjdGVyIGFzCisgICBzb29uIGFzIHRoZSBlY2hvIGFwcGVhcnMsIHNv IG5vIHRpbWUgaXMgd2FzdGVkLiBZb3UgY2FuIGFkZCBhbiBJRiBGQUlMCisgICBjbGF1c2UgYWZ0 ZXIgdGhlIElOUFVUIGluIGNhc2UgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwgYWJv dXQKKyAgIGZhaWx1cmUgdG8gZGV0ZWN0IGFuIGVjaG8gd2l0aGluIHRoZSB0aW1lb3V0IHBlcmlv ZC4gT2J2aW91c2x5IHlvdSBjYW4KKyAgIGFsc28gY2hhbmdlIHRoZSAyLXNlY29uZCBsaW1pdCwg YW5kIGFkanVzdCB0aGUgc2NyaXB0IGluIGFueSBvdGhlcgorICAgZGVzaXJlZCB3YXkuCisKKzEx LjkuIFNjcmlwdGVkIEZpbGUgVHJhbnNmZXIKKworICAgU29tZXRpbWVzIGEgdXNlciBjb21wbGFp bnMgdGhhdCB3aGVuIHNoZSBtYWtlcyBhIGNvbm5lY3Rpb24gYnkgaGFuZCwKKyAgIGxvZ3MgaW4s IGFuZCB0cmFuc2ZlcnMgYSBmaWxlLCB0aGVyZSBhcmUgbm8gcHJvYmxlbXMsIGJ1dCB3aGVuIHNo ZQorICAgc2NyaXB0cyB0aGUgdGhlIGV4YWN0IHNhbWUgc2VxdWVuY2UsIHRoZSBmaWxlIHRyYW5z ZmVyIGFsd2F5cyBmYWlscworICAgYWZ0ZXIgYSBmZXcgcGFja2V0cy4gSGVyZSdzIGEgc2NlbmFy aW8gd2hlcmUgdGhpcyBjYW4gaGFwcGVuOgorCisgICAgMS4gVXBvbiBsb2dnaW5nIGluIHRvIHRo ZSByZW1vdGUgY29tcHV0ZXIsIGl0IHNlbmRzIGEgIldoYXQgQXJlIFlvdT8iCisgICAgICAgZXNj YXBlIHNlcXVlbmNlLgorICAgIDIuIFdoZW4geW91IGxvZyBpbiBpbnRlcmFjdGl2ZWx5LCB5b3Vy IHRlcm1pbmFsIGVtdWxhdG9yIHNlbmRzIHRoZQorICAgICAgIHJlc3BvbnNlLiBUaGlzIGlzIGlu dmlzaWJsZSB0byB5b3U7IHlvdSBkb24ndCBrbm93IGl0J3MgaGFwcGVuaW5nLgorICAgIDMuIFdo ZW4geW91IHNjcmlwdCB0aGUgbG9naW4sIGFuZCBiZWdpbiBhIGZpbGUgdHJhbnNmZXIgaW1tZWRp YXRlbHkKKyAgICAgICB1cG9uIGxvZ2dpbmcgaW4sIHRoZSBob3N0IHN0aWxsIHNlbmRzIHRoZSAi V2hhdCBBcmUgWW91PyIgc2VxdWVuY2UuCisgICAgICAgS2VybWl0J3MgSU5QVVQgRUNITyBzZXR0 aW5nIGlzIE9OIGJ5IGRlZmF1bHQsIHNvIHRoZSBlc2NhcGUKKyAgICAgICBzZXF1ZW5jZSBwYXNz ZXMgdGhyb3VnaCB0byB0aGUgdGVybWluYWwsIGFuZCB0aGUgdGVybWluYWwgc2VuZHMgaXRzCisg ICAgICAgcmVzcG9uc2UuIEJ1dCBieSB0aGlzIHRpbWUgS2VybWl0IGhhcyBhbHJlYWR5IHN0YXJ0 ZWQgdGhlIGZpbGUKKyAgICAgICB0cmFuc2Zlci4KKyAgICA0LiBCeSBkZWZhdWx0LCB0aGUgbG9j YWwgS2VybWl0IHByb2dyYW0gZXhhbWluZXMgdGhlIGtleWJvYXJkIGZvcgorICAgICAgIGludGVy cnVwdGlvbiBjaGFyYWN0ZXJzIGJldHdlZW4gZXZlcnkgcGFja2V0LiBUaGUgIldoYXQgQXJlIFlv dSIKKyAgICAgICByZXNwb25zZSBpcyBzaXR0aW5nIGluIHRoZSBrZXlib2FyZCBidWZmZXIuIEV2 ZW50dWFsbHkgS2VybWl0IHdpbGwKKyAgICAgICByZWFkIGEgY2hhcmFjdGVyIHN1Y2ggYXMgImMi IHRoYXQgaXMgYSB2YWxpZCBpbnRlcnJ1cHRpb24KKyAgICAgICBjaGFyYWN0ZXIsIGFuZCB0aGUg ZmlsZSB0cmFuc2ZlciBzdG9wcyB3aXRoICJVc2VyIGNhbmNlbGVkIi4KKworICAgVGhlIHJpZ2h0 IHdheSB0byBoYW5kbGUgdGhpcyBzaXR1YXRpb24gaXMgdG8gaGF2ZSB5b3VyIGxvb2sgZm9yIHRo ZQorICAgIldoYXQgQXJlIFlvdT8iIHNlcXVlbmNlIGFuZCBzZW5kIHRoZSByZXNwb25zZSBpdHNl bGYsIGFzIGRlc2NyaWJlZCBpbgorICAgVXNpbmcgQy1LZXJtaXQsIHBwLjQyOS00MzEuIE9yIHlv dSBjYW4gd29yayBhcm91bmQgaXQgYnkgdGVsbGluZyB0aGUKKyAgIGxvY2FsIEtlcm1pdCB0byAi c2V0IGlucHV0IGVjaG8gb2ZmIiBhbmQvb3IgInNldCB0cmFuc2ZlciBpbnRlcnJ1cHRpb24KKyAg IG9mZiIuCisKKzExLjEwLiBIZXhhZGVjaW1hbCBhcml0aG1ldGljLi4uCisKKyAgIEMtS2VybWl0 IGNhbiBkbyBib3RoIGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMsIGluIGJv dGgKKyAgIG9yZGluYXJ5IGFsZ2VicmFpYyBub3RhdGlvbiBhbmQgaW4gTGlzcCBTLUV4cHJlc3Np b24gbm90YXRpb24uIEFsbAorICAgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kIGZ1bmN0aW9ucyBv cGVyYXRlIG9ubHkgb24gZGVjaW1hbCBudW1iZXJzLiBJdAorICAgaXMgcG9zc2libGUsIGhvd2V2 ZXIsIHRvIHdyaXRlIHNjcmlwdHMgdGhhdCBvcGVyYXRlIG9uIGhleGFkZWNpbWFsCisgICBudW1i ZXJzLiBUaGlzIGlzIGRvbmUgYnkgY29udmVydGluZyB0aGVtIHRvIGRlY2ltYWwgcHJpb3IgdG8g YW55CisgICBhcml0aG1ldGljIG9wZXJhdGlvbnMsIGFuZCB0aGVuIGNvbnZlcnRpbmcgdGhlbSBi YWNrIHRvIGhleGFkZWNpbWFsIGZvcgorICAgZGlzcGxheS4gRXhhbXBsZToKKworOyBFVkFMVUFU RSBpcyBhIGNvbW1hbmQgdGhhdCBldmFsdWF0ZXMgYW4gYXJpdGhtZXRpYyBleHByZXNzaW9uLgor OyBTZWUgSEVMUCBFVkFMVUFURSBmb3IgZGV0YWlscy4gIFRoaXMgaXMganVzdCBmb3IgZGVtb25z dHJhdGlvbi4KKzsgQXJpdGhtZXRpYyBleHByZXNzaW9ucyBjYW4gYmUgdXNlZCBpbiBhbnkgY29u dGV4dCB3aGVyZSBhIG51bWJlcgorOyBjYW4gYmUgdXNlZC4gIEFsc28sIHRoZSBzcGVjaWFsIG5v dGF0aW9uOgorOworOyAuXCVhIDo6PSBleHByZXNzaW9uCis7Cis7IGV2YWx1YXRpb25zIHRoZSBl eHByZXNzaW9uIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgdG8gdGhlIHZhcmlhYmxlLgorOworLlwl YSA6PSBmZmZlICAgICAgICAgICAgICAgIDsgU2V0IHZhcmlhYmxlIHRvIGhleCB2YWx1ZQorc2V0 IGV2YWwgb2xkICAgICAgICAgICAgICAgIDsgU2VlIEhFTFAgRVZBTAorZXZhbCBcZmhleDJuKFwl YSkgICAgICAgICAgIDsgU2hvdyB2YWx1ZSBvZiB2YXJpYWJsZQorZXZhbCBcZmhleDJuKFwlYSkg KyAxICAgICAgIDsgU2hvdyB2YWx1ZSBvZiBleHByZXNzaW9uCitldmFsIFxmaGV4Mm4oXCVhKSAr IDIgICAgICAgOyBTaG93IHZhbHVlIG9mIGV4cHJlc3Npb24KKy5cJXggOjo9IFxmaGV4Mm4oXCVh KSArIDEgICA7IEFzc2lnbiB2YWx1ZSBvZiBleHByZXNzaW9uIHRvIHZhcmlhYmxlCitlY2hvIFxm bjJoZXgoXCV4KSAgICAgICAgICAgOyBEaXNwbGF5IHZhcmlhYmxlJ3MgdmFsdWUgaW4gaGV4Cisu XCV4IDo6PSBcZmhleDJuKFwlYSkgKyAyICAgOiBEaXR0bworZWNobyBcZm4yaGV4KFwleCkKKy5c JXggOjo9IFxmaGV4Mm4oXCVhKSB8IFxmaGV4Mm4oZmZmZikgIDsgU2ltaWxhcmx5IGZvciBsb2dp Y2FsIE9SCitlY2hvIFxmbjJoZXgoXCV4KQorLlwleCA6Oj0gXGZoZXgybihcJWEpICYgXGZoZXgy bihmZmZmKSAgOyBhbmQgbG9naWNhbCBBTkQKK2VjaG8gXGZuMmhleChcJXgpCisKKyAgIEJ5IHRo ZSB3YXksIHlvdSBtaWdodCBiZSB0ZW1wdGVkIHRvIHVzZSBLZXJtaXQncyBceG5uIG5vdGF0aW9u IHRvIHBsdWcKKyAgIGhleCBudW1iZXJzIGludG8gYXJpdGhtZXRpYyBleHByZXNzaW9ucyBidXQg dGhpcyBkb2Vzbid0IHdvcmsuIFRoYXQKKyAgIG5vdGF0aW9uIGlzIHN0cmljdGx5IGZvciBieXRl cyAoaGV4IHJlcHJlc2VudGF0aW9uIG9mIGNoYXJhY3RlcgorICAgdmFsdWVzKSwgbm90IGZvciBu dW1iZXJzLgorCisxMS4xMS4gT3RoZXIuLi4KKworICAgRXNjYXBlIHNlcXVlbmNlcyAob3IgYW55 IHN0cmluZ3MgdGhhdCBjb250YWluIGNvbnRyb2wgY2hhcmFjdGVycykgY2FuJ3QKKyAgIGJlIHVz ZWQgYXMgbGFiZWxzLCBHT1RPIHRhcmdldHMsIG9yIFNXSVRDSCBjYXNlcy4KKworICAgWyBbOTFd VG9wIF0gWyBbOTJdQ29udGVudHMgXSBbIFs5M11DLUtlcm1pdCBIb21lIF0gWyBbOTRdQy1LZXJt aXQgOC4wCisgICBPdmVydmlldyBdIFsgWzk1XUtlcm1pdCBIb21lIF0KKyAgICAgX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CisKKyAgIEMtS2VybWl0IDguMCBVbml4IEhpbnRzIGFuZCBUaXBzIC8gWzk2XVRoZSBLZXJtaXQg UHJvamVjdCAvCisgICBbOTdda2VybWl0QGNvbHVtYmlhLmVkdSAvIDMwIEp1bmUgMjAxMQorCitS ZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LworICAgMi4gbWFpbHRv Omtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCisgICA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0 bWwKKyAgIDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAg IDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAorICAgNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1cnJlbnQuaHRtbAorICAgOC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3Lmh0bWwKKyAgIDkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAorICAxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L3N1cHBvcnQuaHRtbAorICAxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2J3ci5odG1sCisgIDEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwKKyAgMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAor ICAxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICAxNS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwKKyAgMTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MAorICAxNy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gxCisgIDE4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDIKKyAgMTkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4MworICAyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2J3ci5odG1sI3g0CisgIDIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjYndyLmh0bWwjeDUKKyAgMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2Nid3IuaHRtbCN4NgorICAyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2J3ci5odG1sI3g3CisgIDI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndy Lmh0bWwjeDgKKyAgMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRt bCN4OQorICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gx MAorICAyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gxMQor ICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAorICAy OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCisg IDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDIKKyAgMzEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKKyAgMzIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cworICAzMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gyCisgIDM0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisgIDM1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDIuaHRtbAorICAzNi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAorICAzNy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g1CisgIDM4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKKyAgMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yCisgIDQwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNy4yCisgIDQxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKKyAgNDIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN0b3AKKyAgNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCNjb250ZW50cworICA0NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3gzCisgIDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjYndyLmh0bWwjeDEKKyAgNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2Nid3IuaHRtbCN0b3AKKyAgNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2Nid3IuaHRtbCNjb250ZW50cworICA0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2J3ci5odG1sI3g0CisgIDQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjYndyLmh0bWwjeDIKKyAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Ni d3IuaHRtbCN0b3AKKyAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3Iu aHRtbCNjb250ZW50cworICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3 ci5odG1sI3g1CisgIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0 bWwjeDMKKyAgNTQuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzExMjIudHh0CisgIDU1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCisgIDU2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMKKyAgNTcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4NgorICA1OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g0CisgIDU5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCisgIDYwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMKKyAgNjEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4NworICA2Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3g1CisgIDYzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisgIDY0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDEwCisgIDY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjYndyLmh0bWwjdG9wCisgIDY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjYndyLmh0bWwjY29udGVudHMKKyAgNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2Nid3IuaHRtbCN4OAorICA2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2J3ci5odG1sI3g2CisgIDY5LiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMy MjE3LnR4dAorICA3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1s I3RvcAorICA3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2Nv bnRlbnRzCisgIDcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwj eDkKKyAgNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbCN4Nwor ICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAorICA3 NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCisg IDc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDEwCisgIDc3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDgKKyAgNzguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAorICA3OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI3RvcAorICA4MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sI2NvbnRlbnRzCisgIDgxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDExCisgIDgyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwjeDkKKyAgODMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKKyAgODQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWk3MC5odG0KKyAgODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ocDQ4Lmh0bWwKKyAgODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4yMgorICA4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gxNQorICA4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr Y2J3ci5odG1sI3RvcAorICA4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3 ci5odG1sI2NvbnRlbnRzCisgIDkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj YndyLmh0bWwjeDEwCisgIDkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndy Lmh0bWwjdG9wCisgIDkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0 bWwjY29udGVudHMKKyAgOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKKyAgOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazgwLmh0bWwKKyAg OTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgIDk2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICA5Ny4gbWFpbHRvOmtlcm1p dEBjb2x1bWJpYS5lZHUKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrY2NmZy50eHQgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrY2NmZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4NWMz ZAotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2tjY2ZnLnR4dApAQCAtMCwwICsxLDE3MzggQEAKKworICAgWzFdVGhlIENvbHVtYmlhIENy b3duIFRoZSBLZXJtaXQgUHJvamVjdCB8IENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgIDYxMiBXZXN0 IDExNXRoIFN0cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUgVVNBIG8gWzJda2VybWl0QGNvbHVtYmlh LmVkdQorICAgLi4uc2luY2UgMTk4MQorICAgWzNdSG9tZSBbNF1LZXJtaXQgOTUgWzVdQy1LZXJt aXQgWzZdU2NyaXB0cyBbN11DdXJyZW50IFs4XU5ldyBbOV1GQVEKKyAgIFsxMF1TdXBwb3J0CisK K0MtS2VybWl0IENvbmZpZ3VyYXRpb24gT3B0aW9ucworCisgICBBcyBvZjogQy1LZXJtaXQgOS4w LjMwMCwgMzAgSnVuZSAyMDExCisgICBUaGlzIHBhZ2UgbGFzdCB1cGRhdGVkOiBGcmkgSnVsIDEg MTU6NDg6MjEgMjAxMSAoTmV3IFlvcmsgVVNBIFRpbWUpCisKKyAgICAgSUYgWU9VIEFSRSBSRUFE SU5HIEEgUExBSU4tVEVYVCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIG5vdGUgdGhhdAorICAg ICB0aGlzIGZpbGUgaXMgYSBwbGFpbi10ZXh0IGR1bXAgb2YgYSBXZWIgcGFnZS4gWW91IGNhbiB2 aXNpdCB0aGUKKyAgICAgb3JpZ2luYWwgKGFuZCBwb3NzaWJseSBtb3JlIHVwLXRvLWRhdGUpIFdl YiBwYWdlIGhlcmU6CisKKyAgWzExXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nj ZmcuaHRtbAorCisgICBbIFsxMl1DLUtlcm1pdCBIb21lIF0gWyBbMTNdS2VybWl0IEhvbWUgXQor CisgIENPTlRFTlRTCisKKyAgMS4gWzE0XUZJTEUgVFJBTlNGRVIKKyAgMi4gWzE1XVNFUklBTCBD T01NVU5JQ0FUSU9OIFNQRUVEUworICAzLiBbMTZdRlVMTFNDUkVFTiBGSUxFIFRSQU5TRkVSIERJ U1BMQVkKKyAgNC4gWzE3XUNIQVJBQ1RFUiBTRVRTCisgIDUuIFsxOF1BUEMgRVhFQ1VUSU9OCisg IDYuIFsxOV1QUk9HUkFNIFNJWkUKKyAgNy4gWzIwXU1PREVNIERJQUxJTkcKKyAgOC4gWzIxXU5F VFdPUksgU1VQUE9SVAorICA5LiBbMjJdRVhDRVBUSU9OIEhBTkRMSU5HCisgMTAuIFsyM11TRUNV UklUWSBGRUFUVVJFUworIDExLiBbMjRdRU5BQkxJTkcgU0VMRUNUKCkKKyAxMi4gWzI1XUkvTyBS RURJUkVDVElPTgorIDEzLiBbMjZdRkxPQVRJTkctUE9JTlQgTlVNQkVSUywgVElNRVJTLCBBTkQg QVJJVEhNRVRJQworIDE0LiBbMjddU1BFQ0lBTCBDT05GSUdVUkFUSU9OUworICBJLiBbMjhdU1VN TUFSWSBPRiBDT01QSUxFLVRJTUUgT1BUSU9OUworCisgIE9WRVJWSUVXCisKKyAgIFRoaXMgZG9j dW1lbnQgZGVzY3JpYmVzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQy1LZXJtaXQgKDVBIGFu ZAorICAgbGF0ZXIpLiBUaGUgbWFqb3IgdG9waWNzIGNvdmVyZWQgaW5jbHVkZSBwcm9ncmFtIHNp emUgKGFuZCBob3cgdG8KKyAgIHJlZHVjZSBpdCksIGhvdyB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUg cGFydGljdWxhciBmZWF0dXJlcywgbm90ZXMgb24KKyAgIHNlcmlhbC1wb3J0LCBtb2RlbSwgYW5k IG5ldHdvcmsgc3VwcG9ydCwgYW5kIGEgbGlzdCBvZiBDLUtlcm1pdCdzCisgICBjb21waWxlLXRp bWUgb3B0aW9ucy4KKworICAgRm9yIGRldGFpbHMgYWJvdXQgeW91ciBwYXJ0aWN1bGFyIG9wZXJh dGluZyBzeXN0ZW0sIGFsc28gc2VlIHRoZQorICAgc3lzdGVtLXNwZWNpZmljIGluc3RhbGxhdGlv biBpbnN0cnVjdGlvbnMgZmlsZSwgc3VjaCBhcyB0aGUKKyAgIFsyOV1DLUtlcm1pdCBJbnN0YWxs YXRpb24gSW5zdHJ1Y3Rpb25zIGZvciBVbml4LgorCisgICBbIFszMF1DLUtlcm1pdCBIb21lIF0g WyBbMzFdS2VybWl0IEhvbWUgXQorCisgIDEuIEZJTEUgVFJBTlNGRVIKKworICAgWyBbMzJdVG9w IF0gWyBbMzNdQ29udGVudHMgXSBbIFszNF1OZXh0IF0gWyBbMzVdUHJldmlvdXMgXQorCisgICBQ cmlvciB0byB2ZXJzaW9uIDcuMCwgQy1LZXJtaXQgd2FzIGFsd2F5cyBidWlsdCB3aXRoIHRoZSBt b3N0CisgICBjb25zZXJ2YXRpdmUgS2VybWl0IGZpbGUtdHJhbnNmZXIgcHJvdG9jb2wgZGVmYXVs dHMgb24gZXZlcnkgcGxhdGZvcm06CisgICBubyBjb250cm9sLWNoYXJhY3RlciBwcmVmaXhpbmcs IDk0LWJ5dGUgcGFja2V0cywgYW5kIGEgd2luZG93IHNpemUgb2YKKyAgIDEuCisKKyAgIFN0YXJ0 aW5nIGluIHZlcnNpb24gNy4wLCBmYXN0IHNldHRpbmdzIGFyZSB0aGUgZGVmYXVsdC4gVG8gb3Zl cnJpZGUKKyAgIHRoZXNlIGF0IGNvbXBpbGUgdGltZSwgaW5jbHVkZToKKworICAtRE5PRkFTVAor CisgICBpbiB0aGUgQyBjb21waWxlciBDRkxBR1MuIEV2ZW4gd2l0aCB0aGUgZmFzdCBkZWZhdWx0 cywgQy1LZXJtaXQKKyAgIGF1dG9tYXRpY2FsbHkgZHJvcHMgZG93biB0byB3aGF0ZXZlciB3aW5k b3cgYW5kIHBhY2tldCBzaXplcyByZXF1ZXN0ZWQKKyAgIGJ5IHRoZSBvdGhlciBLZXJtaXQsIGlm IHRoZXNlIGFyZSBzbWFsbGVyLCB3aGVuIHNlbmRpbmcgZmlsZXMgKGV4Y2VwdAorICAgZm9yIGNv bnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nLCB3aGljaCBpcyBub3QgbmVnb3RpYXRlZCwgYW5k IHdoaWNoCisgICBpcyBub3cgc2V0IHRvIENBVVRJT1VTIHJhdGhlciB0aGFuIE5PTkUgYXQgc3Rh cnR1cCkuIEMtS2VybWl0J3MKKyAgIHNldHRpbmdzIHByZXZhaWwgd2hlbiBpdCBpcyByZWNlaXZp bmcuCisKKyAgIFsgWzM2XUMtS2VybWl0IEhvbWUgXSBbIFszN11LZXJtaXQgSG9tZSBdCisKKyAg Mi4gU0VSSUFMIENPTU1VTklDQVRJT04gU1BFRURTCisKKyAgIFsgWzM4XVRvcCBdIFsgWzM5XUNv bnRlbnRzIF0gWyBbNDBdTmV4dCBdIFsgWzQxXVByZXZpb3VzIF0KKworICAgQXMgb2YgNiBTZXB0 ZW1iZXIgMTk5NywgYSBuZXcgc2ltcGxpZmllZCBtZWNoYW5pc20gZm9yIG9idGFpbmluZyB0aGUK KyAgIGxpc3Qgb2YgbGVnYWwgc2VyaWFsIGludGVyZmFjZSBzcGVlZHMgaXMgaW4gcGxhY2U6CisK KyAgICAgKiBJZiB0aGUgc3ltYm9sIFRUU1BETElTVCBpcyBkZWZpbmVkLCB0aGUgc3lzdGVtLWRl cGVuZGVudCByb3V0aW5lCisgICAgICAgdHRzcGRsaXN0KCkgaXMgY2FsbGVkIGF0IHByb2dyYW0g aW5pdGlhbGl6YXRpb24gdG8gb2J0YWluIHRoZSBsaXN0LgorICAgICAqIFRoaXMgc3ltYm9sIHNo b3VsZCBiZSBkZWZpbmVkIG9ubHkgZm9yIEMtS2VybWl0IGltcGxlbWVudGF0aW9ucworICAgICAg IHRoYXQgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgdHRzcGRsaXN0KCkgZnVuY3Rpb24sIHR5cGljYWxs eSBpbiB0aGUKKyAgICAgICBjaz90aW8uYyBtb2R1bGUuIFNlZSBbNDJdY2t1dGlvLmMgZm9yIGFu IGV4YW1wbGUuCisgICAgICogVFRTUERMSVNUIGlzIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBpbiBb NDNdY2tjZGViLmggZm9yIFVOSVguIEFkZAorICAgICAgIHRoZSBhcHByb3ByaWF0ZSAjaWZkZWZz IGZvciBvdGhlciBwbGF0Zm9ybXMgd2hlbiB0aGUgY29ycmVzcG9uZGluZworICAgICAgIHR0c3Bk bGlzdCgpIGZ1bmN0aW9ucyBhcmUgZmlsbGVkIGluLgorICAgICAqIElmIFRUU1BETElTVCBpcyAo b3Igbm9ybWFsbHkgd291bGQgYmUpIGRlZmluZWQsIHRoZSBvbGQgY29kZQorICAgICAgIChkZXNj cmliZWQgYmVsb3cpIGNhbiBzdGlsbCBiZSBzZWxlY3RlZCBieSBkZWZpbmluZyBOT1RUU1BETElT VC4KKworICAgVGhlIHR0c3BkbGlzdCgpIGZ1bmN0aW9uIGNhbiBvYnRhaW4gdGhlIHNwZWVkcyBp biBhbnkgd2F5IHRoYXQgd29ya3MuCisgICBGb3IgZXhhbXBsZSwgYmFzZWQgc2ltcGx5IG9uICNp ZmRlZiBCbm5ubi4uI2VuZGlmIChpbiBVTklYKS4gQWx0aG91Z2gKKyAgIGl0IG1pZ2h0IGJlIGJl dHRlciB0byBhY3R1YWxseSBjaGVjayBlYWNoIHNwZWVkIGFnYWluc3QgdGhlIGN1cnJlbnRseQor ICAgc2VsZWN0ZWQgaGFyZHdhcmUgaW50ZXJmYWNlIGJlZm9yZSBhbGxvd2luZyBpdCBpbiB0aGUg YXJyYXksIHRoZXJlIGlzCisgICB1c3VhbGx5IG5vIHBhc3NpdmUgYW5kL29yIHJlbGlhYmxlIGFu ZCBzYWZlIHdheSB0byBkbyB0aGlzLCBhbmQgc28gaXQncworICAgYmV0dGVyIHRvIGxldCBzb21l IHNwZWVkcyBpbnRvIHRoZSBhcnJheSB0aGF0IG1pZ2h0IG5vdCB3b3JrLCB0aGFuIGl0CisgICBp cyB0byBlcnJvbmVvdXNseSBleGNsdWRlIG90aGVycy4gU3BlZWRzIHRoYXQgZG9uJ3Qgd29yayBh cmUgY2F1Z2h0CisgICB3aGVuIHRoZSBTRVQgU1BFRUQgY29tbWFuZCBpcyBhY3R1YWxseSBnaXZl bi4KKworICAgTm90ZSB0aGF0IHRoaXMgc2NoZW1lIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJ1bGUg b3V0IHNwbGl0IHNwZWVkCisgICBvcGVyYXRpb24sIGJ1dCBlZmZlY3RpdmVseSBpdCBkb2VzIGlu IEMtS2VybWl0IGFzIHByZXNlbnRseSBjb25zdGl0dXRlZAorICAgc2luY2UgdGhlcmUgYXJlIG5v IGNvbW1hbmRzIHRvIHNldCBpbnB1dCBhbmQgb3V0cHV0IHNwZWVkIHNlcGFyYXRlbHkKKyAgIChl eGNlcHQgdGhlIHNwZWNpYWwgY2FzZSAic2V0IHNwZWVkIDc1LzEyMDAiKS4KKworICAgTm90ZSB0 aGF0IHNvbWUgcGxhdGZvcm1zLCBub3RhYmx5IEFJWCA0LjIgYW5kIDQuMywgaW1wbGVtZW50IGhp Z2gKKyAgIHNlcmlhbCBzcGVlZHMgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb24sIGUu Zy4gYnkgbWFwcGluZyA1MCBicHMKKyAgIHRvIDU3NjAwIGJwcywgYW5kIHNvIG9uLgorCisgICBU aGF0J3MgdGhlIHdob2xlIGRlYWwuIFdoZW4gVFRTUERMSVNUIGlzIG5vdCBkZWZpbmVkLCB0aGUg Zm9sbG93aW5nCisgICBhcHBsaWVzOgorCisgICBTcGVlZHMgYXJlIGRlZmluZWQgaW4gdHdvIHBs YWNlczogdGhlIFNFVCBTUEVFRCBrZXl3b3JkIGxpc3QgaW4gdGhlCisgICBjb21tYW5kIHBhcnNl ciAoYXMgb2YgdGhpcyB3cml0aW5nLCBpbiB0aGUgWzQ0XWNrdXVzMy5jIHNvdXJjZSBmaWxlKSwK KyAgIGFuZCBpbiB0aGUgc3lzdGVtLSBkZXBlbmRlbnQgY29tbXVuaWNhdGlvbnMgaS9vIG1vZHVs ZSwgY2s/dGlvLmMsCisgICBmdW5jdGlvbnMgdHRzc3BkKCkgKHNldCBzcGVlZCkgYW5kIHR0Z3Nw ZCgpIChnZXQgc3BlZWQpLiBUaGUgZm9sbG93aW5nCisgICBzcGVlZHMgYXJlIGFzc3VtZWQgdG8g YmUgYXZhaWxhYmxlIGluIGFsbCB2ZXJzaW9uczoKKworICAwLCAxMTAsIDMwMCwgNjAwLCAxMjAw LCAyNDAwLCA0ODAwLCA5NjAwCisKKyAgIElmIG9uZSBvciBtb3JlIG9mIHRoZXNlIHNwZWVkcyBp cyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgc3lzdGVtLCB5b3UnbGwKKyAgIG5lZWQgdG8gY2hhbmdl IHRoZSBzb3VyY2UgY29kZSAodGhpcyBoYXMgbmV2ZXIgaGFwcGVuZWQgc28gZmFyKS4gT3RoZXIK KyAgIHNwZWVkcyB0aGF0IGFyZSBub3QgY29tbW9uIHRvIGFsbCBzeXN0ZW1zIGhhdmUgS2VybWl0 LXNwZWNpZmljIHN5bWJvbHM6CisKKyAgICAgICAgICAgICAgIFN5bWJvbCAgICAgICBTeW1ib2wK KyAgU3BlZWQgKGJwcykgIHRvIGVuYWJsZSAgICB0byBkaXNhYmxlCisgICAgICAgNTAgICAgICAg QlBTXzUwICAgICAgIE5PQl81MAorICAgICAgIDc1ICAgICAgIEJQU183NSAgICAgICBOT0JfNzUK KyAgICAgICA3NS8xMjAwICBCUFNfNzUxMiAgICAgTk9CXzc1MTIKKyAgICAgIDEzNC41ICAgICBC UFNfMTM0ICAgICAgTk9CXzEzNAorICAgICAgMTUwICAgICAgIEJQU18xNTAgICAgICBOT0JfMTUw CisgICAgICAyMDAgICAgICAgQlBTXzIwMCAgICAgIE5PQl8yMDAKKyAgICAgMTgwMCAgICAgICBC UFNfMTgwMCAgICAgTk9CXzE4MDAKKyAgICAgMzYwMCAgICAgICBCUFNfMzYwMCAgICAgTk9CXzM2 MDAKKyAgICAgNzIwMCAgICAgICBCUFNfNzIwMCAgICAgTk9CXzcyMDAKKyAgICAxNDQwMCAgICAg ICBCUFNfMTRLICAgICAgTk9CXzE0SworICAgIDE5MjAwICAgICAgIEJQU18xOUsgICAgICBOT0Jf MTlLCisgICAgMjg4MDAgICAgICAgQlBTXzI4SyAgICAgIE5PQl8yOEsKKyAgICAzODQwMCAgICAg ICBCUFNfMzhLICAgICAgTk9CXzM4SworICAgIDU3NjAwICAgICAgIEJQU181N0sgICAgICBOT0Jf NTdLCisgICAgNzY4MDAgICAgICAgQlBTXzc2SyAgICAgIE5PQl83NksKKyAgIDExNTIwMCAgICAg ICBCUFNfMTE1SyAgICAgTk9CXzE1NUsKKyAgIDIzMDQwMCAgICAgICBCUFNfMjMwSyAgICAgTk9C XzIzMEsKKyAgIDQ2MDgwMCAgICAgICBCUFNfNDYwSyAgICAgTk9CXzQ2MEsKKyAgIDkyMTYwMCAg ICAgICBCUFNfOTIxSyAgICAgTk9CXzkyMUsKKworICAgVGhlIFs0NV1ja2NkZWIuaCBoZWFkZXIg ZmlsZSBjb250YWlucyBkZWZhdWx0IHNwZWVkIGNvbmZpZ3VyYXRpb25zIGZvcgorICAgdGhlIG1h bnkgc3lzdGVtcyB0aGF0IEMtS2VybWl0IHN1cHBvcnRzLiBZb3UgY2FuIG92ZXJyaWRlIHRoZXNl CisgICBkZWZhdWx0cyBieSAoYSkgZWRpdGluZyBja2NkZWIuaCwgb3IgKGIpIGRlZmluaW5nIHRo ZSBhcHByb3ByaWF0ZQorICAgZW5hYmxpbmcgYW5kL29yIGRpc2FibGluZyBzeW1ib2xzIG9uIHRo ZSBDQyBjb21tYW5kIGxpbmUsIGZvciBleGFtcGxlOgorCisgIC1EQlBTXzE0NDAwIC1ETk9CXzEx NTIwMAorCisgICBvciB0aGUgIm1ha2UiIGNvbW1hbmQgbGluZSwgZS5nLjoKKworICBtYWtlIGJs YWggIktGTEFHUz0tREJQU18xNDQwMCAtRE5PQl8xMTUyMDAiCisKKyAgIE5vdGU6IHNvbWUgc3Bl ZWRzIGhhdmUgbm8gc3ltYm9scyBkZWZpbmVkIGZvciB0aGVtLCBiZWNhdXNlIHRoZXkgaGF2ZQor ICAgbmV2ZXIgYmVlbiBuZWVkZWQ6IDEyLjVicHMsIDQ1LjVicHMsIDIwMDAwYnBzLCBldGMuIFRo ZXNlIGNhbiBlYXNpbHkgYmUKKyAgIGFkZGVkIGlmIHJlcXVpcmVkIChidXQgdGhleSB3aWxsIHdv cmsgb25seSBpZiB0aGUgT1Mgc3VwcG9ydHMgdGhlbSkuCisKKyAgIElNUE9SVEFOVDogQWRkaW5n IG9uZSBvZiB0aGVzZSBmbGFncyBhdCBjb21waWxlIHRpbWUgZG9lcyBub3QKKyAgIG5lY2Vzc2Fy aWx5IG1lYW4gdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHVzZSB0aGF0IHNwZWVkLiBBIHBhcnRp Y3VsYXIKKyAgIHNwZWVkIGlzIHVzYWJsZSBvbmx5IGlmIHlvdXIgdW5kZXJseWluZyBvcGVyYXRp bmcgc3lzdGVtIHN1cHBvcnRzIGl0LgorICAgSW4gcGFydGljdWxhciwgaXQgbmVlZHMgdG8gYmUg ZGVmaW5lZCBpbiB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGhlYWRlcgorICAgZmlsZSAoZS5nLiBp biBVTklYLCBjZCB0byAvdXNyL2luY2x1ZGUgYW5kIGdyZXAgZm9yIEI5NjAwIGluICouaCBhbmQK KyAgIHN5cy8qLmggdG8gZmluZCB0aGUgaGVhZGVyIGZpbGUgdGhhdCBjb250YWlucyB0aGUgZGVm aW5pdGlvbnMgZm9yIHRoZQorICAgc3VwcG9ydGVkIHNwZWVkcyksIGFuZCBzdXBwb3J0ZWQgYnkg dGhlIHNlcmlhbCBkZXZpY2UgZHJpdmVyLCBhbmQgb2YKKyAgIGNvdXJzZSBieSB0aGUgcGh5c2lj YWwgZGV2aWNlIGl0c2VsZi4KKworICAgQUxTTyBJTVBPUlRBTlQ6IFRoZSBsaXN0IG9mIGF2YWls YWJsZSBzcGVlZHMgaXMgaW5kZXBlbmRlbnQgb2YgaG93IHRoZXkKKyAgIGFyZSBzZXQuIFRoZSBt YW55IFVOSVhlcywgZm9yIGV4YW1wbGUsIG9mZmVyIGEgd2lkZSB2YXJpZXR5IG9mIEFQSXMKKyAg IHRoYXQgYXJlIEJTRC1iYXNlZCwgU1lTVi1iYXNlZCwgUE9TSVgtYmFzZWQsIGFuZCBwdXJlbHkg bWFkZSB1cC4gU2VlCisgICB0aGUgdHRzc3BkKCksIHR0Z3NwZCgpLCBhbmQgdHRzcGRsaXN0KCkg cm91dGluZXMgaW4gWzQ2XWNrdXRpby5jIGZvcgorICAgaWxsdXN0cmF0aW9ucy4KKworICAgVGhl IGxhdGVzdCBlbnRyaWVzIGluIHRoaXMgaG9yc2VyYWNlIGFyZSB0aGUgdGNnZXRzcGVlZCgpIGFu ZAorICAgdHRzZXRzcGVlZCgpIHJvdXRpbmVzIGZvdW5kIGluIFVuaXhXYXJlIDcuIFVubGlrZSBv dGhlciBtZXRob2RzLCB0aGV5CisgICBhY2NlcHQgdGhlIGVudGlyZSByYW5nZSBvZiBpbnRlZ2Vy cyAobG9uZ3MgcmVhbGx5KSBhcyBzcGVlZCB2YWx1ZXMsCisgICByYXRoZXIgdGhhbiBjZXJ0YWlu IGNvZGVzLCBhbmQgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBudW1iZXIgaXMgbm90LCBpbgorICAg ZmFjdCwgYSBsZWdhbCBzcGVlZCBmb3IgdGhlIGRldmljZS9kcml2ZXIgaW4gcXVlc3Rpb24uIElu IHRoaXMgY2FzZSwKKyAgIHRoZXJlIGlzIG5vIHdheSB0byBidWlsZCBhIGxpc3Qgb2YgbGVnYWwg c3BlZWRzIGF0IGNvbXBpbGUgdGltZSwgc2luY2UKKyAgIG5vIEJubm5uIHN5bWJvbHMgYXJlIGRl ZmluZWQgKGV4Y2VwdCBmb3IgImRlcHJlY2F0ZWQsIGxlZ2FjeSIKKyAgIGludGVyZmFjZXMgbGlr ZSBpb2N0bCgpKSBhbmQgc28gdGhlIGxlZ2FsIHNwZWVkIGxpc3QgbXVzdCBiZSBlbnVtZXJhdGVk CisgICBpbiB0aGUgY29kZSAtLSBzZWUgdHRzcGRsaXN0KCkgaW4gWzQ3XWNrdXRpby5jLgorCisg ICBbIFs0OF1DLUtlcm1pdCBIb21lIF0gWyBbNDldS2VybWl0IEhvbWUgXQorCisgIDMuIEZVTExT Q1JFRU4gRklMRSBUUkFOU0ZFUiBESVNQTEFZCisKKyAgIFsgWzUwXVRvcCBdIFsgWzUxXUNvbnRl bnRzIF0gWyBbNTJdTmV4dCBdIFsgWzUzXVByZXZpb3VzIF0KKworICAgTmV3IHRvIGVkaXQgMTgw IGlzIHN1cHBvcnQgZm9yIGFuIE1TLURPUy1LZXJtaXQtbGlrZSBsb2NhbC1tb2RlIGZ1bGwKKyAg IHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXksIGFjY29tcGxpc2hlZCB1c2luZyB0aGUgY3Vy c2VzIGxpYnJhcnksIG9yCisgICBzb21ldGhpbmcgZXF1aXZhbGVudCAoZm9yIGV4YW1wbGUsIHRo ZSBTY3JlZW4gTWFuYWdlciBvbiBERUMgVk1TKS4gVG8KKyAgIGVuYWJsZSB0aGlzIGZlYXR1cmUs IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiB5b3VyIENGTEFHUzoKKworICAtRENLX0NVUlNFUwor CisgICBhbmQgdGhlbiBjaGFuZ2UgeW91ciBidWlsZCBwcm9jZWR1cmUgKGlmIG5lY2Vzc2FyeSkg dG8gaW5jbHVkZSB0aGUKKyAgIG5lY2Vzc2FyeSBsaWJyYXJpZXMuIEZvciBleGFtcGxlLCBpbiBV bml4IHRoZXNlIGFyZSB1c3VhbGx5ICJjdXJzZXMiIG9yCisgICAibmN1cnNlcyIgKGFuZCBtb3Jl IHJlY2VudGx5LCAibmN1cnNlc3ciIGFuZCAic2xhbmciKSwgcGVyaGFwcyBhbHNvCisgICAidGVy bWNhcCIsICJ0ZXJtbGliIiwgb3IgInRpbmZvIjoKKworICAiTElCUz0gLWxjdXJzZXMgLWx0ZXJt Y2FwIgorICAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtbGliIgorICAiTElCUz0gLWxuY3Vyc2VzIgor ICAiTElCUz0gLWx0ZXJtbGliIgorICAiTElCUz0gLWx0aW5mbyIKKworICAgIm1hbiBjdXJzZXMi IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBhbmQgc2VhcmNoIHRocm91Z2ggdGhlIFVuaXgKKyAg IFs1NF1tYWtlZmlsZSBmb3IgIkNLX0NVUlNFUyIgdG8gc2VlIG1hbnkgZXhhbXBsZXMsIGFuZCBh bHNvIHNlZSB0aGUKKyAgIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoZSBbNTVdVW5peCBDLUtlcm1p dCBJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zLAorICAgcGFydGljdWxhcmx5IFNlY3Rpb25zIFs1 Nl00IGFuZCBbNTddOS4yLgorCisgICBUaGVyZSBtaWdodCBzdGlsbCBiZSBhIGNvbXBsaWNhdGlv bi4gU29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgY3Vyc2VzCisgICByZXNlcnZlIHRoZSByaWdodCB0 byBhbHRlciB0aGUgYnVmZmVyaW5nIG9uIHRoZSBvdXRwdXQgZmlsZSB3aXRob3V0CisgICByZXN0 b3JpbmcgaXQgYWZ0ZXJ3YXJkcywgd2hpY2ggY2FuIGxlYXZlIEtlcm1pdCdzIGNvbW1hbmQgcHJv Y2Vzc2luZyBpbgorICAgYSBtZXNzIHdoZW4gdGhlIHByb21wdCBjb21lcyBiYWNrIGFmdGVyIGEg ZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyCisgICBkaXNwbGF5LiBUaGUgdHlwaWNhbCBzeW1wdG9t IGlzIHRoYXQgY2hhcmFjdGVycyB5b3UgdHlwZSBhdCB0aGUgcHJvbXB0CisgICBhZnRlciBhIGxv Y2FsLW1vZGUgZmlsZSB0cmFuc2ZlciAoaS5lLiBhZnRlciBzZWVpbmcgdGhlIGN1cnNlcworICAg ZmlsZS10cmFuc2ZlciBkaXNwbGF5KSBkbyBub3QgZWNobyB1bnRpbCB5b3UgcHJlc3MgdGhlIFJl dHVybiAoRW50ZXIpCisgICBrZXkuIElmIHRoaXMgaGFwcGVucyB0byB5b3UsIHRyeSBhZGRpbmcK KworICAtRENLX05FV1RFUk0KKworICAgdG8geW91ciBtYWtlZmlsZSB0YXJnZXQgKHNlZSBjb21t ZW50cyBpbiBzY3JlZW5jKCkgaW4gWzU4XWNrdXVzeC5jIGZvcgorICAgYW4gZXhwbGFuYXRpb24p LgorCisgICBJZiB0aGF0IGRvZXNuJ3QgZml4IHRoZSBwcm9ibGVtLCB0aGVuIHVzZSBhIGJpZ2dl ciBoYW1tZXIgYW5kIHJlcGxhY2UKKyAgIC1EQ0tfTkVXVEVSTSB3aXRoOgorCisgIC1ETk9OT1NF VEJVRgorCisgICB3aGljaCB0ZWxscyBLZXJtaXQgdG8gZm9yY2Ugc3Rkb3V0IHRvIGJlIHVuYnVm ZmVyZWQgc28gQ0JSRUFLIG1vZGUgY2FuCisgICB3b3JrLgorCisgICBJbiBTQ08gWGVuaXggYW5k IFNDTyBVTklYLCB0aGVyZSBhcmUgdHdvIHNlcGFyYXRlIGN1cnNlcyBsaWJyYXJpZXMsIG9uZQor ICAgYmFzZWQgb24gdGVybWNhcCBhbmQgdGhlIG90aGVyIGJhc2VkIG9uIHRlcm1pbmZvLiBUaGUg ZGVmYXVsdCBsaWJyYXJ5LAorICAgdXN1YWxseSB0ZXJtaW5mbywgaXMgZXN0YWJsaXNoZWQgd2hl biB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtIGlzCisgICBpbnN0YWxsZWQuIFRvIG1hbnVhbGx5IHNl bGVjdCB0ZXJtaW5mbyAoYXQgY29tcGlsZSB0aW1lKToKKworICBjb21waWxlIC1ETV9URVJNSU5G TyBhbmQgbGluayAtbHRpbmZvCisKKyAgIGFuZCB0byBtYW51YWxseSBzZWxlY3QgdGVybWNhcDoK KworICBjb21waWxlIC1ETV9URVJNQ0FQIGFuZCBsaW5rIC1sdGNhcCAtbHRlcm1saWIKKworICAg PGN1cnNlcy5oPiBsb29rcyBhdCBNX1RFUk1JTkZPIGFuZCBNX1RFUk1DQVAgdG8gZGVjaWRlIHdo aWNoIGhlYWRlcgorICAgZmlsZXMgdG8gdXNlLiAvdXNyL2xpYi9saWJjdXJzZXMuYSBpcyBhIGxp bmsgdG8gZWl0aGVyIGxpYnRpbmZvLmEgb3IKKyAgIGxpYnRjYXAuYS4gVGhlIEMtS2VybWl0IGNv bXBpbGF0aW9uIG9wdGlvbnMgbXVzdCBhZ3JlZSB3aXRoIHRoZSB2ZXJzaW9uCisgICBvZiB0aGUg Y3Vyc2VzIGxpYnJhcnkgdGhhdCBpcyBhY3R1YWxseSBpbnN0YWxsZWQuCisKKyAgIE5PVEU6IElm IHlvdSBhcmUgZG9pbmcgYW4gQU5TSS1DIGNvbXBpbGF0aW9uIGFuZCB5b3UgZ2V0IGNvbXBpbGUg dGltZQorICAgd2FybmluZ3MgbGlrZSB0aGUgZm9sbG93aW5nOgorCisgIFdhcm5pbmc6IGZ1bmN0 aW9uIG5vdCBkZWNsYXJlZCBpbiBja3V1c3guYzogd21vdmUsIHByaW50dywgd2NscnRvZW9sLAor ICB3Y2xlYXIsIHdyZWZyZXNoLCBlbmR3aW4sIGV0Yy4uLgorCisgICBpdCBtZWFucyB0aGF0IHlv dXIgPGN1cnNlcy5oPiBmaWxlIGRvZXMgbm90IGNvbnRhaW4gcHJvdG90eXBlcyBmb3IKKyAgIHRo ZXNlIGZ1bmN0aW9ucy4gVGhlIHdhcm5pbmdzIHNob3VsZCBiZSBoYXJtbGVzcy4KKworICAgTmV3 IHRvIGVkaXQgMTkwIGlzIHRoZSBhYmlsaXR5IHRvIHJlZnJlc2ggYSBtZXNzZWQtdXAgZnVsbC1z Y3JlZW4KKyAgIGRpc3BsYXksIGUuZy4gYWZ0ZXIgcmVjZWl2aW5nIGEgYnJvYWRjYXN0IG1lc3Nh Z2UuIFRoaXMgZGVwZW5kcyBvbiB0aGUKKyAgIGN1cnNlcyBwYWNrYWdlIGluY2x1ZGluZyB0aGUg d3JlZnJlc2goKSBhbmQgY2xlYXJvaygpIGZ1bmN0aW9ucyBhbmQgdGhlCisgICBjdXJzY3IgdmFy aWFibGUuIElmIHlvdXIgdmVyc2lvbiBoYXMgdGhlc2UsIG9yIGhhcyBjb2RlIHRvIHNpbXVsYXRl CisgICB0aGVtLCB0aGVuIGFkZDoKKworICAtRENLX1dSRUZSRVNICisKKyAgIFRoZSBjdXJzZXMg YW5kIHRlcm1jYXAgbGlicmFyaWVzIGFkZCBjb25zaWRlcmFibGUgc2l6ZSB0byB0aGUgcHJvZ3Jh bQorICAgaW1hZ2UgKGUuZy4gYWJvdXQgMjBLIG9uIGEgU1VOLTQsIDQwSyBvbiBhIDM4NikuIE9u IHNvbWUgc21hbGwgc3lzdGVtcywKKyAgIHN1Y2ggYXMgdGhlIEFUJlQgNjMwMCBQTFVTLCBjdXJz ZXMgY2FuIHB1c2ggS2VybWl0IG92ZXIgdGhlIGVkZ2UuLi4KKyAgIGV2ZW4gdGhvdWdoIGl0IGNv bXBpbGVzLCBsb2FkcywgYW5kIHJ1bnMgY29ycmVjdGx5LCBpdHMgaW5jcmVhc2VkIHNpemUKKyAg IGFwcGFyZW50bHkgbWFrZXMgaXQgc3dhcCBjb25zdGFudGx5LCBzbG93aW5nIGl0IGRvd24gdG8g YSBjcmF3bCwgZXZlbgorICAgd2hlbiB0aGUgY3Vyc2VzIGRpc3BsYXkgaXMgbm90IGluIHVzZS4g U29tZSBuZXcgbWFrZWZpbGUgdGFyZ2V0cyBoYXZlCisgICBiZWVuIGFkZGVkIHRvIHRha2UgY2Fy ZSBvZiB0aGlzIChlLmcuIHN5czN1cGNzaGNjKSwgYnV0IHNpbWlsYXIgdHJpY2tzCisgICBtaWdo dCBiZSBuZWNlc3NhcnkgaW4gb3RoZXIgY2FzZXMgdG9vLgorCisgICBPbiB0aGUgY3Vyc2VzIGZp bGUtdHJhbnNmZXIgZGlzcGxheSwganVzdCBiZWxvdyB0aGUgInRoZXJtb21ldGVyIiwgaXMgYQor ICAgcnVubmluZyBkaXNwbGF5IG9mIHRoZSB0cmFuc2ZlciByYXRlLCBhcyBhIGZsYXQgcXVvdGll bnQgb2YgZmlsZQorICAgY2hhcmFjdGVycyBwZXIgZWxhcHNlZCBzZWNvbmRzIHNvIGZhci4gWW91 IGNhbiBjaGFuZ2UgdGhpcyB0byBhbgorICAgYXZlcmFnZSB0aGF0IGdpdmVzIGdyZWF0ZXIgd2Vp Z2h0IHRvIHJlY2VudCBoaXN0b3J5ICgwLjI1ICoKKyAgIGluc3RhbnRhbmVvdXMgY3BzICsgMC43 NSAqIGhpc3RvcmljYWwgY3BzKSBieSBhZGRpbmcgLURDUFNfV0VJR0hURUQgdG8KKyAgIHlvdXIg Q0ZMQUdTIChzb3JyeSBmb2xrcywgdGhpcyBvbmUgaXMgbm90IHdvcnRoIGEgU0VUIGNvbW1hbmQp LiBZb3UgY2FuCisgICBjaG9vc2UgYSBzZWNvbmQgdHlwZSBvZiB3ZWlnaHRlZCBhdmVyYWdlIGlu IHdoaWNoIHRoZSB3ZWlnaHRpbmcgc21vb3RocworICAgb3V0IHByb2dyZXNzaXZlbHkgYXMgdGhl IHRyYW5zZmVyIHByb2dyZXNzZXMgYnkgYWRkaW5nIC1EQ1BTX1ZJTkNFIHRvCisgICAtRENQU19X RUlHSFRFRC4KKworICAgQW4gYWx0ZXJuYXRpdmUgdG8gY3Vyc2VzIGlzIGFsc28gYXZhaWxhYmxl IGF0IGNvbXBpbGUgdGltZSwgYnV0IHNob3VsZAorICAgYmUgc2VsZWN0ZWQgaWYgeW91ciB2ZXJz aW9uIG9mIEtlcm1pdCBpcyB0byBiZSBydW4gaW4gbG9jYWwgbW9kZSBvbmx5CisgICBpbiBhbiBB TlNJIHRlcm1pbmFsIGVudmlyb25tZW50LCBmb3IgZXhhbXBsZSBvbiBhIGRlc2t0b3Agd29ya3N0 YXRpb24KKyAgIHRoYXQgaGFzIGFuIEFOU0kgY29uc29sZSBkcml2ZXIuIFRvIHNlbGVjdCB0aGlz IG9wdGlvbiBpbiBwbGFjZSBvZgorICAgY3Vyc2VzLCBkZWZpbmUgdGhlIHN5bWJvbCBNWUNVUlNF UzoKKworICAtRE1ZQ1VSU0VTCisKKyAgIGluc3RlYWQgb2YgQ0tfQ1VSU0VTLiBUaGUgTVlDVVJT RVMgb3B0aW9uIHVzZXMgYnVpbHQtaW4gQU5TSSAoVlQxMDApCisgICBlc2NhcGUgc2VxdWVuY2Vz LCBhbmQgZGVwZW5kcyB1cG9uIHlvdXIgdGVybWluYWwgb3IgY29uc29sZSBkcml2ZXIgdG8KKyAg IGludGVycHJldCB0aGVtIGNvcnJlY3RseS4KKworICAgSW4gc29tZSBDLUtlcm1pdCBidWlsZHMs IHdlIHJlcGxhY2UgcHJpbnRmKCkgdmlhICNkZWZpbmUgcHJpbnRmLi4uCisgICBIb3dldmVyLCB0 aGlzIGNhbiBjYXVzZSBjb25mbGljdHMgd2l0aCB0aGUgW25dY3Vyc2VzIGhlYWRlciBmaWxlcy4K KyAgIFZhcmlvdXMgaGFja3MgYXJlIHJlcXVpcmVkIHRvIGdldCBhcm91bmQgdGhpcyAtLSBzZWUg WzU5XWNrdXRpby5jLAorICAgWzYwXWNrdWZpby5jLCBbNjFdY2t1dXN4LmMsIFs2Ml1ja3VjbWQu YywgZXRjLgorCisgICBbIFs2M11DLUtlcm1pdCBIb21lIF0gWyBbNjRdS2VybWl0IEhvbWUgXQor CisgIDQuIENIQVJBQ1RFUiBTRVRTCisKKyAgIFsgWzY1XVRvcCBdIFsgWzY2XUNvbnRlbnRzIF0g WyBbNjddTmV4dCBdIFsgWzY4XVByZXZpb3VzIF0KKworICAgU2luY2UgdmVyc2lvbiA1QSwgQy1L ZXJtaXQgaGFzIGluY2x1ZGVkIHN1cHBvcnQgZm9yIGNvbnZlcnNpb24gb2YKKyAgIGNoYXJhY3Rl ciBzZXRzIGZvciBXZXN0ZXJuIEV1cm9wZWFuIGxhbmd1YWdlcyAoaS5lLiBsYW5ndWFnZXMgdGhh dAorICAgb3JpZ2luYXRlZCBpbiBXZXN0ZXJuIEV1cm9wZSwgYnV0IGFyZSBub3cgYWxzbyBzcG9r ZW4gaW4gdGhlIFdlc3Rlcm4KKyAgIEhlbWlzcGhlcmUgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3 b3JsZCksIHZpYSBJU08gODg1OS0xIExhdGluIEFscGhhYmV0CisgICAxLCBmb3IgRWFzdGVybiBF dXJvcGVhbiBsYW5ndWFnZXMgKElTTyBMYXRpbi0yKSwgSGVicmV3IChhbmQgWWlkZGlzaCksCisg ICBHcmVlaywgYW5kIEN5cmlsbGljLWFscGhhYmV0IGxhbmd1YWdlcyAoSVNPIExhdGluL0N5cmls bGljKS4gTWFueSBmaWxlCisgICAobG9jYWwpIGNoYXJhY3RlciBzZXRzIGFyZSBzdXBwb3J0ZWQ6 IElTTyA2NDYgNy1iaXQgbmF0aW9uYWwgc2V0cywgSUJNCisgICBjb2RlIHBhZ2VzLCBBcHBsZSwg REVDLCBERywgTmVYVCwgZXRjLgorCisgICBUbyBidWlsZCBLZXJtaXQgd2l0aCBubyBjaGFyYWN0 ZXItc2V0IHRyYW5zbGF0aW9uIGF0IGFsbCwgaW5jbHVkZQorICAgLUROT0NTRVRTIGluIHRoZSBD RkxBR1MuIFRvIGJ1aWxkIHdpdGggbm8gTGF0aW4tMiwgYWRkIC1ETk9MQVRJTjIuIFRvCisgICBi dWlsZCB3aXRoIG5vIEN5cmlsbGljLCBhZGQgLUROT0NZUklMLiBUbyBvbWl0IEhlYnJldywgYWRk IC1ETk9IRUJSRVcuCisgICBJZiAtRE5PQ1NFVFMgaXMgKm5vdCogaW5jbHVkZWQsIHlvdSdsbCBh bHdheXMgZ2V0IExBVElOMS4gVG8gYnVpbGQgd2l0aAorICAgbm8gS0FOSkkgaW5jbHVkZSAtRE5P S0FOSkkuIFRoZXJlIGlzIHByZXNlbnRseSBubyB3YXkgdG8gaW5jbHVkZQorICAgTGF0aW4tMiwg Q3lyaWxsaWMsIEhlYnJldywgb3IgS2Fuamkgd2l0aG91dCBhbHNvIGluY2x1ZGluZyBMYXRpbi0x LgorCisgICBbNjldVW5pY29kZSBzdXBwb3J0IHdhcyBhZGRlZCBpbiBDLUtlcm1pdCA3LjAsIGFu ZCBpdCBhZGRzIGEgZmFpcgorICAgYW1vdW50IG9mIHRhYmxlcyBhbmQgY29kZSAoYW5kIHRoaXMg aXMgb25seSBhICJMZXZlbCAxIiBpbXBsZW1lbnRhdGlvbgorICAgLS0gYSBoaWdoZXIgbGV2ZWwg d291bGQgYWxzbyByZXF1aXJlIGJ1aWxkaW5nIGluIHRoZSBlbnRpcmUgVW5pY29kZQorICAgZGF0 YWJhc2UpLiBPbiBhIFBDIHdpdGggUkggNS4yIExpbnV4LCBidWlsZGluZyBDLUtlcm1pdCA3LjAs IHdlIGdldCB0aGUKKyAgIGZvbGxvd2luZyBzaXplczoKKworICBOT0NTRVRTIE5PVU5JQ09ERSBO T0tBTkpJICAgQmVmb3JlICAgIEFmdGVyCisgICBbICAgXSAgICBbICAgXSAgICBbICAgXSAgICAx MzI5MDE0ICAgKEZ1bGwpCisgICBbICAgXSAgICBbICAgXSAgICBbIFggXSAgICAxMzI1Njg2ICAg KFVuaWNvZGUgYnV0IG5vIEthbmppKQorICAgWyAgIF0gICAgWyBYIF0gICAgWyAgIF0gICAgMTE1 ODgzNyAgIChBbGwgY2hhcnNldHMgZXhjZXB0IFVuaWNvZGUpCisgICBbIFggXSAgICBbIHggXSAg ICBbIHggXSAgICAxMDkwODQ1ICAgKE5PQ1NFVFMgaW1wbGllcyB0aGUgb3RoZXIgdHdvKQorCisg ICBOb3RlLCBieSB0aGUgd2F5LCB0aGF0IE5PS0FOSkkgd2l0aG91dCBOT1VOSUNPREUgb25seSBy ZW1vdmVzIHRoZQorICAgbm9uLVVuaWNvZGUgS2Fuamkgc2V0cyAoU2hpZnQtSklTLCBFVUMtSlAs IEpJUy03LCBldGMpLiBLYW5qaSBpcyBzdGlsbAorICAgcmVwcmVzZW50YWJsZSBpbiBVQ1MtMiBh bmQgVVRGLTguCisKKyAgIFsgWzcwXUMtS2VybWl0IEhvbWUgXSBbIFs3MV1LZXJtaXQgSG9tZSBd CisKKyAgNS4gQVBDIEVYRUNVVElPTgorCisgICBbIFs3Ml1Ub3AgXSBbIFs3M11Db250ZW50cyBd IFsgWzc0XU5leHQgXSBbIFs3NV1QcmV2aW91cyBdCisKKyAgIFRoZSBLZXJtaXQgQ09OTkVDVCBh bmQgSU5QVVQgY29tbWFuZHMgYXJlIGNvZGVkIHRvIGV4ZWN1dGUgQXBwbGljYXRpb24KKyAgIFBy b2dyYW0gQ29tbWFuZCBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlIGhvc3Q6CisKKyAgPEVTQz5f PHRleHQ+PEVTQz5cCisKKyAgIHdoZXJlIDx0ZXh0PiBpcyBhIEMtS2VybWl0IGNvbW1hbmQsIG9y IGEgbGlzdCBvZiBDLUtlcm1pdCBjb21tYW5kcworICAgc2VwYXJhdGVkIGJ5IGNvbW1hcywgdXAg dG8gYWJvdXQgMUsgaW4gbGVuZ3RoLgorCisgICBUbyBkYXRlLCB0aGlzIGZlYXR1cmUgaGFzIGJl ZW4gaW5jbHVkZWQgaW4gdGhlIE9TLzIsIFdpbmRvd3MsIFZNUywKKyAgIE9TLTksIGFuZCBVbml4 IHZlcnNpb25zLCBmb3Igd2hpY2ggdGhlIHN5bWJvbDoKKworICBDS19BUEMKKworICAgaXMgZGVm aW5lZCBhdXRvbWF0aWNhbGx5IGluIFs3Nl1ja3V1c3IuaC4gRm9yIE9TLzIsIEFQQyBpcyBlbmFi bGVkIGF0CisgICBydW50aW1lIGJ5IGRlZmF1bHQsIGZvciBVTklYIGl0IGlzIGRpc2FibGVkLiBJ dCBpcyBjb250cm9sbGVkIGJ5IHRoZQorICAgU0VUIFRFUk1JTkFMIEFQQyBjb21tYW5kLiBDb25m aWd1cmluZyBBUEMgY2FwYWJpbGl0eSBpbnRvIGEgdmVyc2lvbgorICAgdGhhdCBnZXRzIGl0IGJ5 IGRlZmF1bHQgKGJlY2F1c2UgQ0tfQVBDIGlzIGRlZmluZWQgaW4gWzc3XWNrdXVzci5oKSBjYW4K KyAgIGJlIG92ZXJyaWRkZW4gYnkgaW5jbHVkaW5nOgorCisgIC1ETk9BUEMKKworICAgb24gdGhl IENDIGNvbW1hbmQgbGluZS4KKworICAgQy1LZXJtaXQncyBhdXRvZG93bmxvYWQgZmVhdHVyZSBk ZXBlbmRzIG9uIHRoZSBBUEMgZmVhdHVyZSwgc28KKyAgIGRlY29uZmlndXJpbmcgQVBDIGFsc28g ZGlzYWJsZXMgYXV0b2Rvd25sb2FkIChpdCBkb2Vzbid0IHVzZSBBUEMgZXNjYXBlCisgICBzZXF1 ZW5jZXMsIGJ1dCB1c2VzIHRoZSBBUEMgc3dpdGNoaW5nIG1lY2hhbmlzbSBpbnRlcm5hbGx5KS4K KworICAgWyBbNzhdQy1LZXJtaXQgSG9tZSBdIFsgWzc5XUtlcm1pdCBIb21lIF0KKworICA2LiBQ Uk9HUkFNIFNJWkUKKworICAgWyBbODBdVG9wIF0gWyBbODFdQ29udGVudHMgXSBbIFs4Ml1OZXh0 IF0gWyBbODNdUHJldmlvdXMgXQorCisgICBTRUNUSU9OIENPTlRFTlRTCisKKyAgNi4xLiBbODRd RmVhdHVyZSBTZWxlY3Rpb24KKyAgNi4yLiBbODVdQ2hhbmdpbmcgQnVmZmVyIFNpemVzCisgIDYu My4gWzg2XU90aGVyIFNpemUtUmVsYXRlZCBJdGVtcworICA2LjQuIFs4N11TcGFjZS9UaW1lIFRy YWRlb2ZmcworCisgICAoQWxzbyBzZWUgWzg4XVNlY3Rpb24gNCkKKworICAgRWFjaCByZWxlYXNl IG9mIEMtS2VybWl0IGlzIGxhcmdlciB0aGFuIHRoZSBsYXN0LiBPbiBzb21lIGNvbXB1dGVycwor ICAgKHVzdWFsbHkgb2xkIG9uZXMpIHRoZSBzaXplIG9mIHRoZSBwcm9ncmFtIHByZXZlbnRzIGl0 IGZyb20gYmVpbmcKKyAgIHN1Y2Nlc3NmdWxseSBsaW5rZWQgYW5kIGxvYWRlZC4gT24gc29tZSBv dGhlcnMgKGFsc28gdXN1YWxseSBvbGQgb25lcyksCisgICBpdCBvY2N1cGllcyBzbyBtdWNoIG1l bW9yeSB0aGF0IGl0IGlzIGNvbnN0YW50bHkgc3dhcHBpbmcgb3IgcGFnaW5nLiBJbgorICAgc3Vj aCBjYXNlcywgeW91IGNhbiByZWR1Y2UgQy1LZXJtaXQncyBzaXplIGluIHZhcmlvdXMgd2F5cywg b3V0bGluZWQgaW4KKyAgIHRoaXMgc2VjdGlvbi4gVGhlIGZvbGxvd2luZyBvcHRpb25zIGNhbiBj dXQgZG93biBvbiB0aGUgcHJvZ3JhbSdzIHNpemUKKyAgIGF0IGNvbXBpbGUgdGltZSBieSByZW1v dmluZyBmZWF0dXJlcyBvciBjaGFuZ2luZyB0aGUgc2l6ZSBvZiBzdG9yYWdlCisgICBhcmVhcy4K KworICAgSWYgeW91IGFyZSByZWFkaW5nIHRoaXMgc2VjdGlvbiBiZWNhdXNlIGFsbCB5b3Ugd2Fu dCBpcyBhIHNtYWxsLCBmYXN0LAorICAgcXVpY2stdG8tbG9hZCBLZXJtaXQgZmlsZS10cmFuc2Zl ciBhcHBsaWNhdGlvbiBmb3IgdGhlIHJlbW90ZSBlbmQgb2YKKyAgIHlvdXIgY29ubmVjdGlvbiwg YW5kIHRoZSByZW1vdGUgZW5kIGlzIFVuaXggYmFzZWQsIHRha2UgYSBsb29rIGF0CisgICBHLUtl cm1pdDoKKworICBbODldaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2drZXJtaXQuaHRt bAorCisgIDYuMS4gRmVhdHVyZSBTZWxlY3Rpb24KKworICAgRmVhdHVyZXMgY2FuIGJlIGFkZGVk IG9yIHJlbW92ZWQgYnkgZGVmaW5pbmcgc3ltYm9scyBvbiB0aGUgQ0MgKEMKKyAgIGNvbXBpbGVy KSBjb21tYW5kIGxpbmUuICItRCIgaXMgdGhlIG5vcm1hbCBDQyBkaXJlY3RpdmUgdG8gZGVmaW5l IGEKKyAgIHN5bWJvbCBzbywgZm9yIGV4YW1wbGUsICItRE5PREVCVUciIGRlZmluZXMgdGhlIHN5 bWJvbCBOT0RFQlVHLiBTb21lIEMKKyAgIGNvbXBpbGVycyBtaWdodCB1c2UgZGlmZmVyZW50IHN5 bnRheCwgZS5nLiAiLWQgTk9ERUJVRyIgb3IKKyAgICIvREVGSU5FPU5PREVCVUciLiBGb3IgQyBj b21waWxlcnMgdGhhdCBkbyBub3QgYWNjZXB0IGNvbW1hbmQtbGluZQorICAgZGVmaW5pdGlvbnMs IHlvdSBjYW4gcHV0IHRoZSBjb3JyZXNwb25kaW5nICNkZWZpbmUgc3RhdGVtZW50cyBpbiB0aGUK KyAgIGZpbGUgY2tjc3ltLmgsIGZvciBleGFtcGxlOgorCisgICNkZWZpbmUgTk9ERUJVRworCisg ICBUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSBzYXZpbmdzIGFjaGlldmVkIHdoZW4gYnVp bGRpbmcgQy1LZXJtaXQKKyAgIDguMCAoQmV0YS4wNCkgd2l0aCBzZWxlY3RlZCBmZWF0dXJlLWRl c2VsZWN0aW9uIHN3aXRjaGVzIG9uIGFuCisgICBJbnRlbC1iYXNlZCBQQyB3aXRoIFJlZCBIYXQg TGludXggNy4wIGFuZCBnY2MgMi45Ni4gVGhlIHNpemVzIGFyZSBmb3IKKyAgIG5vbi1zZWN1cml0 eSBidWlsZHMuIFRoZSBmdWxseSBjb25maWd1cmVkIG5vbi1zZWN1cml0eSBidWlsZCBpcyAyMTI3 NDA4CisgICBieXRlcy4KKworICAgT3B0aW9uICAgICAgU2l6ZSAgICBTYXZpbmdzIEVmZmVjdAor ICAgTk9JQ1AgICAgICAgIDU0NTMzMCAgIDc0LjQlIE5vIEludGVyYWN0aXZlIENvbW1hbmQgUGFy c2VyIChjb21tYW5kLWxpbmUgb25seSkKKyAgIE5PTE9DQUwgICAgIDE1Mzk5OTQgICAyNy42JSBO byBtYWtpbmcgY29ubmVjdGlvbnMuCisgICBOT1hGRVIgICAgICAxNTUxMTA4ICAgMjcuMSUgTm8g ZmlsZSB0cmFuc2Zlci4KKyAgIElLU0RPTkxZICAgIDE1NjY2MDggICAyNi40JSBJbnRlcm5ldCBL ZXJtaXQgU2VydmVyIG9ubHkuCisgICBOT0NTRVRTICAgICAxNzUwMDk3ICAgMTcuNyUgTm8gY2hh cmFjdGVyLXNldCBjb252ZXJzaW9uLgorICAgTk9TUEwgICAgICAgMTgwMDI5MyAgIDE1LjQlIE5v IFNjcmlwdCBQcm9ncmFtbWluZyBMYW5ndWFnZS4KKyAgIE5PTkVUICAgICAgIDE4MDg1NzUgICAx NS4wJSBObyBtYWtpbmcgbmV0d29yayBjb25uZWN0aW9ucy4KKyAgIE5PVU5JQ09ERSAgIDE4MzQ0 MjYgICAxMy44JSBObyBVbmljb2RlIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbi4KKyAgIE5PSEVM UCAgICAgIDE4Mzc4NzcgICAxMy42JSBObyBidWlsdC1pbiBoZWxwIHRleHQuCisgICBOT0RFQlVH ICAgICAxODkxNjY5ICAgMTEuMSUgTm8gZGVidWcgbG9nLgorICAgTk9GUklMTFMgICAgMTkxODk2 NiAgICA5LjglIE5vICJmcmlsbHMiLgorICAgTk9GVFAgICAgICAgMTk3MjQ5NiAgICA3LjMlIE5v IEZUUCBjbGllbnQuCisgICBOT0RJQUwgICAgICAxOTg0NDg4ICAgIDYuNyUgTm8gYXV0b21hdGlj IG1vZGVtIGRpYWxpbmcuCisgICBOT1BVU0ggICAgICAyMDcwMTg0ICAgIDIuNyUgTm8gc2hlbGwg YWNjZXNzLCBydW5uaW5nIGV4dGVybmFsIHByb2dyYW1zLCBldGMuCisgICBOT0lLU0QgICAgICAy MDc0MTI5ICAgIDIuNSUgTm8gSW50ZXJuZXQgS2VybWl0IFNlcnZlciBjYXBhYmlsaXR5LgorICAg Tk9IVFRQICAgICAgMjA4MjYxMCAgICAyLjElIE5vIEhUVFAgY2xpZW50LgorICAgTk9GTE9BVCAg ICAgMjA5MTMzMiAgICAxLjclIE5vIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCisgICBOT0NI QU5ORUxJTyAyMDk1OTc4ICAgIDEuNSUgTm8gRk9QRU4vRlJFQUQvRldSSVRFL0ZDTE9TRSwgZXRj LgorICAgTUlOSURJQUwgICAgMjA5ODAzNSAgICAxLjQlIE5vIGJ1aWx0LWluIHN1cHBvcnQgZm9y IG1hbnkga2luZHMgb2YgbW9kZW1zLgorICAgTk9TRVJWRVIgICAgMjA5ODk4NyAgICAxLjMlIE5v IHNlcnZlciBtb2RlLgorICAgTk9TRVhQICAgICAgMjEwNTg5OCAgICAxLjAlIE5vIFMtRXhwcmVz c2lvbnMuCisgICBOT1BUWSAgICAgICAyMTE3NzQzICAgIDAuNSUgTm8gcHNldWRvdGVybWluYWwg c3VwcG9ydC4KKyAgIE5PUkxPR0lOICAgIDIxMjEwODkgICAgMC4zJSBObyBSTE9HSU4gY29ubmVj dGlvbnMuCisgICBOT09MRE1PREVNUyAyMTI0MDM4ICAgIDAuMiUgTm8gYnVpbHQtaW4gc3VwcG9y dCBmb3Igb2xkIGtpbmRzIG9mIG1vZGVtcy4KKyAgIE5PU1NIICAgICAgIDIxMjU2OTYgICAgMC4x JSBObyBTU0ggY29tbWFuZC4KKworICAgQW5kIGhlcmUgYXJlIGEgZmV3IGNvbWJpbmF0aW9ucwor CisgICBPcHRpb25zIFNpemUgU2F2aW5ncyBFZmZlY3QKKyAgIE5PREVCVUcgTk9JQ1AgTk9DU0VU UyBOT0xPQ0FMIDI4MTY0MSA4Ni43JSBObyBkZWJ1ZyBsb2csIHBhcnNlciwKKyAgIGNoYXJhY3Rl ciBzZXRzLCBvciBtYWtpbmcgY29ubmVjdGlvbnMuCisgICBOT0lDUCBOT0NTRVRTIE5PTE9DQUwg Mzc2NDY4IDgyLjMlIE5vIHBhcnNlciwgY2hhcmFjdGVyIHNldHMsIG9yIG1ha2luZworICAgY29u bmVjdGlvbnMuCisgICBOT0lDUCBOT0NTRVRTIE5PTkVUIDQyNzUxMCA3OS45JSBObyBwYXJzZXIs IGNoYXJhY3RlciBzZXRzLCBvciBuZXR3b3JrCisgICBjb25uZWN0aW9ucy4KKyAgIE5PU1BMIE5P Q1NFVFMgMTQyMzc4NCAzMy4xJSBObyBzY3JpcHQgbGFuZ3VhZ2UsIG9yIGNoYXJhY3RlciBzZXRz LgorCisgICAtRE5PRlJJTExTIHJlbW92ZXMgdmFyaW91cyBjb21tYW5kIHN5bm9ueW1zOyB0aGUg Zm9sbG93aW5nIHRvcC1sZXZlbAorICAgY29tbWFuZHM6IENMRUFSLCBERUxFVEUsIERJU0FCTEUs IEVOQUJMRSwgR0VUT0ssIE1BSUwsIFJFTkFNRSwgVFlQRSwKKyAgIFdITzsgYW5kIHRoZSBmb2xs b3dpbmcgUkVNT1RFIGNvbW1hbmRzOiBLRVJNSVQsIExPR0lOLCBMT0dPVVQsIFBSSU5ULAorICAg VFlQRSwgV0hPLgorCisgIDYuMi4gQ2hhbmdpbmcgQnVmZmVyIFNpemVzCisKKyAgIE1vc3QgbW9k ZXJuIGNvbXB1dGVycyBoYXZlIHNvIG11Y2ggbWVtb3J5IHRoYXQgKGEpIHRoZXJlIGlzIG5vIG5l ZWQgdG8KKyAgIHNjcmltcCBhbmQgc2F2ZSwgYW5kIChiKSBDLUtlcm1pdCwgZXZlbiB3aGVuIGZ1 bGx5IGNvbmZpZ3VyZWQsIGlzCisgICByZWxhdGl2ZWx5IHNtYWxsIGJ5IHRvZGF5J3Mgc3RhbmRh cmRzLgorCisgICBUd28gbWFqb3IgZmFjdG9ycyBhZmZlY3QgS2VybWl0J3Mgc2l6ZTogZmVhdHVy ZSBzZWxlY3Rpb24gYW5kIGJ1ZmZlcgorICAgc2l6ZXMuIEJ1ZmZlciBzaXplcyBhZmZlY3Qgc3Vj aCB0aGluZ3MgYXMgdGhlIG1heGltdW0gbGVuZ3RoIGZvciBhCisgICBLZXJtaXQgcGFja2V0LCB0 aGUgbWF4aW11bSBsZW5ndGggZm9yIGEgY29tbWFuZCwgZm9yIGEgbWFjcm8sIGZvciB0aGUKKyAg IG5hbWUgb2YgYSBtYWNybywgZXRjLiBCaWcgYnVmZmVyIHNpemVzIGFyZSB1c2VkIHdoZW4gdGhl IGZvbGxvd2luZworICAgc3ltYm9sIGlzIGRlZmluZWQ6CisKKyAgQklHQlVGT0sKKworICAgYXMg aXQgaXMgYnkgZGVmYXVsdCBmb3IgbW9zdCBtb2Rlcm4gcGxhdGZvcm1zIChMaW51eCwgQUlYIDQg YW5kIDUsCisgICBIUC1VWCAxMCBhbmQgMTEsIFNvbGFyaXMsIGV0YykgaW4gWzkwXWNrdXVzci5o LiBJZiB5b3VyIGJ1aWxkIGRvZXMgbm90CisgICBnZXQgYmlnIGJ1ZmZlcnMgYXV0b21hdGljYWxs eSAoU0hPVyBGRUFUVVJFUyB0ZWxscyB5b3UpLCB5b3UgY2FuCisgICBpbmNsdWRlIHRoZW0gYnkg cmVidWlsZGluZyB3aXRoIEJJR0JVRk9LIGRlZmluZWQ7IGUuZy4gaW4gVW5peDoKKworICBtYWtl IHh4eHggS0ZMQUdTPS1EQklHQlVGT0sKKworICAgd2hlcmUgeHh4eCBpcyB0aGUgbWFrZWZpbGUg dGFyZ2V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHdhbnQgdG8KKyAgIGJ1aWxkIHdpdGhv dXQgYmlnIGJ1ZmZlcnMgd2hlbiB0aGV5IG5vcm1hbGx5IHdvdWxkIGJlIHNlbGVjdGVkLCB1c2U6 CisKKyAgbWFrZSB4eHh4IEtGTEFHUz0tRE5PQklHQlVGCisKKyAgIFRoZXJlIGFyZSBvcHRpb25z IHRvIGNvbnRyb2wgS2VybWl0J3MgcGFja2V0IGJ1ZmZlciBhbGxvY2F0aW9ucy4gVGhlCisgICBm b2xsb3dpbmcgc3ltYm9scyBhcmUgZGVmaW5lZCBpbiBbOTFdY2tja2VyLmggaW4gc3VjaCBhIHdh eSB0aGF0IHlvdQorICAgY2FuIG92ZXJyaWRlIHRoZW0gYnkgcmVkZWZpbmluZyB0aGVtIGluIENG TEFHUzoKKworICAtRE1BWFNQPXh4eHggLSBNYXhpbXVtIHNlbmQtcGFja2V0IGxlbmd0aC4KKyAg LURNQVhSUD14eHh4IC0gTWF4aW11bSByZWNlaXZlLXBhY2tldCBsZW5ndGguCisgIC1EU0JTSVo9 eHh4eCAtIFRvdGFsIGFsbG9jYXRpb24gZm9yIHNlbmQtcGFja2V0IGJ1ZmZlcnMuCisgIC1EUkJT SVo9eHh4eCAtIFRvdGFsIGFsbG9jYXRpb24gZm9yIHJlY2VpdmUtcGFja2V0IGJ1ZmZlcnMuCisK KyAgIFRoZSBkZWZhdWx0cyBkZXBlbmQgb24gdGhlIHBsYXRmb3JtLgorCisgICBVc2luZyBkeW5h bWljIGFsbG9jYXRpb24gKC1ERFlOQU1JQykgcmVkdWNlcyBzdG9yYWdlIHJlcXVpcmVtZW50cyBm b3IKKyAgIHRoZSBleGVjdXRhYmxlIHByb2dyYW0gb24gZGlzaywgYW5kIGFsbG93cyBtb3JlIGFu ZCBiaWdnZXIgcGFja2V0cyBhdAorICAgcnVudGltZS4gVGhpcyBoYXMgcHJvdmVuIHNhZmUgb3Zl ciB0aGUgeWVhcnMsIGFuZCBub3cgbW9zdCBidWlsZHMgKGUuZy4KKyAgIGFsbCBVbml4LCBWTVMs IFdpbmRvd3MsIGFuZCBPUy8yIG9uZXMpIHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGJ5 CisgICBkZWZhdWx0LiBJZiBpdCBjYXVzZXMgdHJvdWJsZSwgaG93ZXZlciwgdGhlbiBvbWl0IHRo ZSAtRERZTkFNSUMgb3B0aW9uCisgICBmcm9tIENGTEFHUywgb3IgYWRkIC1ETk9EWU5BTUlDLgor CisgIDYuMy4gT3RoZXIgU2l6ZS1SZWxhdGVkIEl0ZW1zCisKKyAgIFRvIG1ha2UgS2VybWl0IGNv bXBpbGUgYW5kIGxvYWQgc3VjY2Vzc2Z1bGx5LCB5b3UgbWlnaHQgaGF2ZSB0byBjaGFuZ2UKKyAg IHlvdXIgYnVpbGQgcHJvY2VkdXJlIHRvOgorCisgICAgYS4gUmVxdWVzdCBhIGxhcmdlciAoImxh cmdlIiBvciAiaHVnZSIpIGNvbXBpbGF0aW9uIC8gY29kZS1nZW5lcmF0aW9uCisgICAgICAgbW9k ZWwuIFRoaXMgaXMgbmVlZGVkIGZvciAxNi1iaXQgUEMtYmFzZWQgVU5JWCB2ZXJzaW9ucyAobW9z dCBvcgorICAgICAgIGFsbCBvZiB3aGljaCBmYWlsIHRvIGJ1aWxkIEMtS2VybWl0IDcuMCBhbmQg bGF0ZXIgYW55d2F5KS4gVGhpcyBpcworICAgICAgIHR5cGljYWxseSBkb25lIHdpdGggYSAtTSBh bmQvb3IgLUYgc3dpdGNoIChzZWUgeW91ciBjYyBtYW51YWwgb3IKKyAgICAgICBtYW4gcGFnZSBm b3IgZGV0YWlscykuCisgICAgYi4gU29tZSBkZXZlbG9wbWVudCBzeXN0ZW1zIHN1cHBvcnQgb3Zl cmxheXMuIElmIHRoZSBwcm9ncmFtIGlzIHRvbworICAgICAgIGJpZyB0byBiZSBidWlsdCBhcyBp cywgY2hlY2sgeW91ciBsb2FkZXIgbWFudWFsICgibWFuIGxkIikgdG8gc2VlCisgICAgICAgaWYg YW4gb3ZlcmxheSBmZWF0dXJlIGlzIGF2YWlsYWJsZS4gU2VlIHRoZSAyLjEwLzIuMTEgQlNEIGV4 YW1wbGUKKyAgICAgICBpbiB0aGUgVU5JWCBtYWtlZmlsZS4gKEFjdHVhbGx5LCBhcyBvZiB2ZXJz aW9uIDcuMCwgQy1LZXJtaXQgaXMgdG9vCisgICAgICAgYmlnIHRvIGJ1aWxkLCBwZXJpb2QsIGV2 ZW4gd2l0aCBvdmVybGF5cywgb24gMi54eCBCU0QpLgorICAgIGMuIFNpbWlsYXJseSwgc29tZSBz bWFsbCBhbmQvb3Igc2VnbWVudC1iYXNlZCBhcmNoaXRlY3R1cmVzIHN1cHBvcnQKKyAgICAgICAi Y29kZSBtYXBwaW5nIiwgd2hpY2ggaXMgc2ltaWxhciB0byBvdmVybGF5cyAoUERQMTEtYmFzZWQg VkVOSVgKKyAgICAgICAxLjAsIGNpcmNhIDE5ODQsIHdhcyBhbiBleGFtcGxlKS4gU2VlIHRoZSBs aW5rZXIgZG9jdW1lbnRhdGlvbiBvbgorICAgICAgIHRoZSBhZmZlY3RlZCBwbGF0Zm9ybS4KKwor ICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGV4ZWN1dGFi bGUgcHJvZ3JhbSBmaWxlCisgICBpbiBzZXZlcmFsIG90aGVyIHdheXM6CisKKyAgICBhLiBJbmNs dWRlIHRoZSAtTyAob3B0aW1pemUpIGNvbXBpbGVyIHN3aXRjaCBpZiBpdCBpc24ndCBhbHJlYWR5 CisgICAgICAgaW5jbHVkZWQgaW4geW91ciAibWFrZSIgZW50cnkgKGFuZCBpZiBpdCB3b3JrcyEp LiBJZiB5b3VyIGNvbXBpbGVyCisgICAgICAgc3VwcG9ydHMgaGlnaGVyIGxldmVscyBvZiBvcHRp bWl6YXRpb24gKGUuZy4gLU8yIG9yIGhpZ2hlciBudW1iZXIsCisgICAgICAgLU9ub2xpbWl0IChI UC1VWCksIGV0YyksIHRyeSB0aGVtOyB0aGUgZ3JlYXRlciB0aGUgbGV2ZWwgb2YKKyAgICAgICBv cHRpbWl6YXRpb24sIHRoZSBsb25nZXIgdGhlIGNvbXBpbGF0aW9uIGFuZCBtb3JlIGxpa2VseSB0 aGUKKyAgICAgICBjb21waWxlciB3aWxsIHJ1biBvdXQgb2YgbWVtb3J5LiBUaGUgbGF0dGVyIGV2 ZW50dWFsaXR5LCBzb21lCisgICAgICAgY29tcGlsZXJzIGFsc28gcHJvdmlkZSBjb21tYW5kLWxp bmUgb3B0aW9ucyB0byBhbGxvY2F0ZSBtb3JlIG1lbW9yeQorICAgICAgIGZvciB0aGUgb3B0aW1p emVyLCBsaWtlICItT2xpbWl0IG51bWJlciIgaW4gVWx0cml4LgorICAgIGIuIElmIHlvdXIgcGxh dGZvcm0gc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcywgY2hhbmdlIHRoZSBtYWtlIGVudHJ5Cisg ICAgICAgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmZWF0dXJlLiBUaGUgd2F5IHRvIGRvIHRo aXMgaXMsIG9mCisgICAgICAgY291cnNlLCBwbGF0Zm9ybSBkZXBlbmRlbnQ7IHNlZSB0aGUgTmVY VCBtYWtlZmlsZSB0YXJnZXQgZm9yIGFuCisgICAgICAgZXhhbXBsZS4gc29tZSBwbGF0Zm9ybXMg KGxpa2UgU29sYXJpcykgZG8gaXQgYXV0b21hdGljYWxseSBhbmQgZ2l2ZQorICAgICAgIHlvdSBu byBjaG9pY2UuIEJ1dCB3YXRjaCBvdXQ6IGV4ZWN1dGFibGVzIGxpbmtlZCB3aXRoIHNoYXJlZAor ICAgICAgIGxpYnJhcmllcyBhcmUgbGVzcyBwb3J0YWJsZSB0aGFuIHN0YXRpY2FsbHkgbGlua2Vk IGV4ZWN1dGFibGVzLgorICAgIGMuIFN0cmlwIHRoZSBwcm9ncmFtIGltYWdlIGFmdGVyIGJ1aWxk aW5nICgibWFuIHN0cmlwIiBmb3IgZnVydGhlcgorICAgICAgIGluZm8pLCBvciBhZGQgLXMgdG8g dGhlIExOS0ZMQUdTIChVTklYIG9ubHkpLiBUaGlzIHN0cmlwcyB0aGUKKyAgICAgICBwcm9ncmFt IG9mIGl0cyBzeW1ib2wgdGFibGUgYW5kIHJlbG9jYXRpb24gaW5mb3JtYXRpb24uCisgICAgZC4g TW92ZSBjaGFyYWN0ZXIgc3RyaW5ncyBpbnRvIGEgc2VwYXJhdGUgZmlsZS4gU2VlIHRoZSAyLjEx IEJTRAorICAgICAgIHRhcmdldCBmb3IgYW4gZXhhbXBsZS4KKworICA2LjQuIFNwYWNlL1RpbWUg VHJhZGVvZmZzCisKKyAgIFRoZXJlIGFyZSBtb3JlIHRoYW4gNjAwMCBkZWJ1ZygpIHN0YXRlbWVu dHMgaW4gdGhlIHByb2dyYW0uIElmIHlvdSB3YW50CisgICB0byBzYXZlIGJvdGggc3BhY2UgKHBy b2dyYW0gc2l6ZSkgYW5kIHRpbWUgKHByb2dyYW0gZXhlY3V0aW9uIHRpbWUpLAorICAgaW5jbHVk ZSAtRE5PREVCVUcgaW4gdGhlIGNvbXBpbGF0aW9uLiBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGRl YnVnZ2luZworICAgZm9yIHRyYWNraW5nIGRvd24gcHJvYmxlbXMsIG9taXQgLUROT0RFQlVHIGZy b20gdGhlIG1ha2UgZW50cnkuIEJ1dAorICAgd2hlbiB5b3UgaW5jbHVkZSBkZWJ1Z2dpbmcsIHlv dSBoYXZlIHR3byBjaG9pY2VzIGZvciBob3cgaXQncyBkb25lLiBPbmUKKyAgIGRlZmluaXRpb24g ZGVmaW5lcyBkZWJ1ZygpIHRvIGJlIGEgZnVuY3Rpb24gY2FsbDsgdGhpcyBpcyBjaGVhcCBpbgor ICAgc3BhY2UgYnV0IGV4cGVuc2l2ZSBpbiBleGVjdXRpb24uIFRoZSBvdGhlciBkZWZpbmVzIGRl YnVnIGFzICJpZgorICAgKGRlYmxvZykiIGFuZCB0aGVuIHRoZSBmdW5jdGlvbiBjYWxsLCB0byBv bWl0IHRoZSBmdW5jdGlvbiBjYWxsCisgICBvdmVyaGVhZCB3aGVuIHRoZSBkZWJ1ZyBsb2cgaXMg bm90IGFjdGl2ZS4gQnV0IHRoaXMgYWRkcyBhIGxvdCBvZiBzcGFjZQorICAgdG8gdGhlIHByb2dy YW0uIEJvdGggbWV0aG9kcyB3b3JrLCB0YWtlIHlvdXIgY2hvaWNlOyBJRkRFQlVHIGlzCisgICBw cmVmZXJyZWQgaWYgbWVtb3J5IGlzIG5vdCBhIGNvbnN0cmFpbnQgYnV0IHRoZSBjb21wdXRlciBp cyBsaWtlbHkgdG8KKyAgIGJlIHNsb3cuIFRoZSBmaXJzdCBtZXRob2QgaXMgdGhlIGRlZmF1bHQs IGkuZS4gaWYgbm90aGluZyBpcyBkb25lIHRvCisgICB0aGUgQ0ZMQUdTIG9yIGluIFs5Ml1ja2Nk ZWIuaCAoYnV0IGluIHNvbWUgY2FzZXMsIGUuZy4gVk1TLCBpdCBpcykuIFRvCisgICBzZWxlY3Qg dGhlIHNlY29uZCBtZXRob2QsIGluY2x1ZGUgLURJRkRFQlVHIGluIHRoZSBjb21waWxhdGlvbiAo YW5kCisgICBkb24ndCBpbmNsdWRlIC1ETk9ERUJVRykuCisKKyAgIFsgWzkzXUMtS2VybWl0IEhv bWUgXSBbIFs5NF1LZXJtaXQgSG9tZSBdCisKKyAgNy4gTU9ERU0gRElBTElORworCisgICBbIFs5 NV1Ub3AgXSBbIFs5Nl1Db250ZW50cyBdIFsgWzk3XU5leHQgXSBbIFs5OF1QcmV2aW91cyBdCisK KyAgIC1ETk9ESUFMIHJlbW92ZXMgYXV0b21hdGljIG1vZGVtIGRpYWxpbmcgY29tcGxldGVseSwg aW5jbHVkaW5nIHRoZQorICAgZW50aXJlIFs5OV1ja3VkaWEuYyBtb2R1bGUsIHBsdXMgYWxsIGNv bW1hbmRzIHRoYXQgcmVmZXIgdG8gZGlhbGluZyBpbgorICAgdGhlIHZhcmlvdXMgY2t1dXMqLmMg bW9kdWxlcy4KKworICAgLURNSU5JRElBTCBsZWF2ZXMgdGhlIERJQUwgYW5kIHJlbGF0ZWQgY29t bWFuZHMgKFNFVC9TSE9XIE1PREVNLAorICAgU0VUL1NIT1cgRElBTCkgaW50YWN0LCBidXQgcmVt b3ZlcyBzdXBwb3J0IGZvciBhbGwgdHlwZXMgb2YgbW9kZW1zCisgICBleGNlcHQgQ0NJVFQsIEhh eWVzLCBVbmtub3duLCBVc2VyLWRlZmluZWQsIEdlbmVyaWMtaGlnaC1zcGVlZCwgYW5kCisgICBO b25lICg9IERpcmVjdCkuIFRoZSBNSU5JRElBTCBvcHRpb24gY3V0cyB0aGUgc2l6ZSBvZiB0aGUg ZGlhbCBtb2R1bGUKKyAgIGFwcHJveGltYXRlbHkgaW4gaGFsZi4gVXNlIHRoaXMgb3B0aW9uIGlm IHlvdSBoYXZlIG9ubHkgSGF5ZXMgb3IgQ0NJVFQKKyAgIG1vZGVtcyBhbmQgZG9uJ3Qgd2FudCB0 byBjYXJyeSB0aGUgYmFnZ2FnZSBmb3IgdGhlIG90aGVyIHR5cGVzLgorCisgICBBIGNvbXByb21p c2UgYmV0d2VlbiBmdWxsIGRpYWxlciBzdXBwb3J0IGFuZCBNSU5JRElBTCBpcyBvYnRhaW5lZCBi eQorICAgcmVtb3Zpbmcgc3VwcG9ydCBmb3IgIm9sZCIgbW9kZW1zIC0tIGFsbCB0aGUgc3RyYW5n ZSBub24tSGF5ZXMKKyAgIGNvbXBhdGlibGUgMTIwMCBhbmQgMjQwMCBicHMgbW9kZW1zIHRoYXQg Qy1LZXJtaXQgaGFzIGJlZW4gY2FycnlpbmcKKyAgIGFyb3VuZCBzaW5jZSAxOTg1IG9yIHNvLiBU byByZW1vdmUgc3VwcG9ydCBmb3IgdGhlc2UgbW9kZW1zLCBhZGQKKyAgIC1ETk9PTERNT0RFTVMg dG8gQ0ZMQUdTIGF0IGNvbXBpbGF0aW9uIHRpbWUuCisKKyAgIEZpbmFsbHksIGlmIHlvdSBrZWVw IHN1cHBvcnQgZm9yIG9sZCBtb2RlbXMsIHlvdSB3aWxsIG5vdGljZSB0aGF0IHRoZWlyCisgICBu YW1lcyBhcHBlYXIgb24gdGhlICJzZXQgbW9kZW0gPyIgbWVudS4gVGhhdCdzIGJlY2F1c2UgdGhl aXIgbmFtZXMgYXJlLAorICAgYnkgZGVmYXVsdCwgInZpc2libGUiLiBCdXQgdGhlIGxpc3QgaXMg Y29uZnVzaW5nIHRvIHRoZSB5b3VuZ2VyCisgICBnZW5lcmF0aW9uLCB3aG8gaGF2ZSBvbmx5IGhl YXJkIG9mIG1vZGVtcyBmcm9tIHRoZSBWLjMyYmlzLWFuZC1sYXRlcgorICAgZXJhLiBJZiB5b3Ug d2FudCB0byBiZSBhYmxlIHRvIHVzZSBvbGQgbW9kZW1zLCBidXQgZG9uJ3Qgd2FudCB0aGVpcgor ICAgbmFtZXMgY2x1dHRlcmluZyB1cCBtZW51cywgYWRkIHRoaXMgdG8gQ0ZMQUdTOgorCisgIC1E TV9PTEQ9MQorCisgICBbIFsxMDBdQy1LZXJtaXQgSG9tZSBdIFsgWzEwMV1LZXJtaXQgSG9tZSBd CisKKyAgOC4gTkVUV09SSyBTVVBQT1JUCisKKyAgIFsgWzEwMl1Ub3AgXSBbIFsxMDNdQ29udGVu dHMgXSBbIFsxMDRdTmV4dCBdIFsgWzEwNV1QcmV2aW91cyBdCisKKyAgIFNFQ1RJT04gQ09OVEVO VFMKKworICA4LjEuIFsxMDZdVENQL0lQCisgIDguMi4gWzEwN11YLjI1CisgIDguMy4gWzEwOF1P dGhlciBOZXR3b3JrcworCisgICBDLUtlcm1pdCBzdXBwb3J0cyBub3Qgb25seSBzZXJpYWwtcG9y dCBhbmQgbW9kZW0gY29ubmVjdGlvbnMsIGJ1dCBhbHNvCisgICBUQ1AvSVAgYW5kIFguMjUgbmV0 d29yayBjb25uZWN0aW9ucy4gU29tZSB2ZXJzaW9ucyBzdXBwb3J0IG90aGVyCisgICBuZXR3b3Jr IHR5cGVzIHRvbyBsaWtlIERFQ25ldCwgTEFULCBORVRCSU9TLCBldGMuIElmIHlvdSBkZWZpbmUg dGhlCisgICBmb2xsb3dpbmcgc3ltYm9sOgorCisgIE5PTkVUCisKKyAgIHRoZW4gYWxsIG5ldHdv cmsgc3VwcG9ydCBpcyBjb21waWxlZCBhd2F5LgorCisgIDguMS4gVENQL0lQCisKKyAgIFNVQlNF Q1RJT04gQ09OVEVOVFMKKworICA4LjEuMS4gWzEwOV1GaXJld2FsbHMKKyAgOC4xLjIuIFsxMTBd Q29tcGlsYXRpb24gYW5kIExpbmtpbmcgUHJvYmxlbXMKKyAgOC4xLjMuIFsxMTFdRW5hYmxpbmcg SG9zdCBBZGRyZXNzIExpc3RzCisgIDguMS40LiBbMTEyXUVuYWJsaW5nIFRlbG5ldCBOQVdTCisg IDguMS41LiBbMTEzXUVuYWJsaW5nIEluY29taW5nIFRDUC9JUCBDb25uZWN0aW9ucworICA4LjEu Ni4gWzExNF1EaXNhYmxpbmcgU0VUIFRDUCBPcHRpb25zCisKKyAgIEMtS2VybWl0J3MgVENQL0lQ IGZlYXR1cmVzIHJlcXVpcmUgdGhlIEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSBvcgorICAgZXF1 aXZhbGVudCwgZ2VuZXJhbGx5IGF2YWlsYWJsZSBvbiBhbnkgVW5peCBzeXN0ZW0sIGFzIHdlbGwg YXMgaW4KKyAgIFdpbmRvd3MgOXgvTlQsIE9TLzIsIFZNUywgQU9TL1ZTLCBWT1MsIGV0Yy4gVGhl IFRDUC9JUCBzdXBwb3J0IGluY2x1ZGVzCisgICBidWlsdC1pbiBURUxORVQsIEZUUCwgYW5kIEhU VFAgcHJvdG9jb2wuIFRvIHNlbGVjdCBUQ1AvSVAgc3VwcG9ydCwKKyAgIGluY2x1ZGUgLURUQ1BT T0NLRVQgaW4geW91ciBtYWtlZmlsZSB0YXJnZXQncyBDRkxBR1MsIG9yIChpbiBWTVMpIHRoZQor ICAgYXBwcm9wcmlhdGUgdmFyaWFudCAoZS5nLiAtRFdPTExPTkdPTkcsIC1ETVVMVElORVQsIC1E RVhDRUxBTiwKKyAgIC1EV0lOVENQLCBldGMpLgorCisgICBUaGUgVk1TIGFuZC9vciBlYXJseSBV bml4IHRoaXJkLXBhcnR5IFRDUC9JUCBwcm9kdWN0cyBhcmUgb2Z0ZW4KKyAgIGluY29tcGF0aWJs ZSB3aXRoIGVhY2ggb3RoZXIsIGFuZCBzb21ldGltZXMgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbnMg b2YKKyAgIHRoZW1zZWx2ZXMuIEZvciBleGFtcGxlLCBXb2xsb25nb25nIHJlcG9ydGVkbHkgcHV0 IGhlYWRlciBmaWxlcyBpbgorICAgZGlmZmVyZW50IGRpcmVjdG9yaWVzIGZvciBkaWZmZXJlbnQg VU5JWCB2ZXJzaW9uczoKKworICAgICAqIGluLmggY2FuIGJlIGluIGVpdGhlciAvdXNyL2luY2x1 ZGUvc3lzIG9yIC91c2VyL2luY2x1ZGUvbmV0aW5ldC4KKyAgICAgKiB0ZWxuZXQuaCBjYW4gYmUg aW4gZWl0aGVyIC91c3IvaW5jbHVkZS9hcnBhIG9yCisgICAgICAgL3VzZXIvaW5jbHVkZS9uZXRp bmV0LgorICAgICAqIGluZXQuaCBjYW4gYmUgaW4gZWl0aGVyIC91c3IvaW5jbHVkZS9hcnBhIG9y IC91c2VyL2luY2x1ZGUvc3lzLgorCisgICBJbiBjYXNlcyBsaWtlIHRoaXMsIHVzZSB0aGUgLUkg Y2MgY29tbWFuZC1saW5lIG9wdGlvbiB3aGVuIHBvc3NpYmxlOworICAgb3RoZXJ3aXNlIGl0J3Mg YmV0dGVyIHRvIG1ha2UgbGlua3MgaW4gdGhlIGZpbGUgc3lzdGVtIHRoYW4gaXQgaXMgdG8KKyAg IGhhY2sgdXAgdGhlIEMtS2VybWl0IHNvdXJjZSBjb2RlLiBTdXBwb3NlLCBmb3IgZXhhbXBsZSwg S2VybWl0IGlzCisgICBsb29raW5nIGZvciB0ZWxuZXQuaCBpbiAvdXNyL2luY2x1ZGUvYXJwYSwg YnV0IG9uIHlvdXIgY29tcHV0ZXIgaXQgaXMKKyAgIGluIC91c3IvaW5jbHVkZS9uZXRpbmV0LiBE byB0aGlzIChhcyByb290LCBvciBnZXQgdGhlIHN5c3RlbQorICAgYWRtaW5pc3RyYXRvciB0byBk byBpdCk6CisKKyAgY2QgL3Vzci9pbmNsdWRlL2FycGEKKyAgbG4gL3Vzci9pbmNsdWRlL25ldGlu ZXQvdGVsbmV0LmggdGVsbmV0LmgKKworICAgKCJtYW4gbG4iIGZvciBkZXRhaWxzIGFib3V0IGxp bmtzLikKKworICAgVGhlIG5ldHdvcmsgc3VwcG9ydCBmb3IgVENQL0lQIGFuZCBYLjI1IGlzIGlu IHRoZSBzb3VyY2UgZmlsZXMKKyAgIFsxMTVdY2tjbmV0LmgsIFsxMTZdY2tjdGVsLmMsIFsxMTdd Y2tjdGVsLmMsIFsxMThdY2tjdGVsLmgsCisgICBbMTE5XWNrY2Z0cC5jLCB3aXRoIG1pc2NlbGxh bmVvdXMgU0hPVyBjb21tYW5kcywgZXRjLCBpbiB0aGUgdmFyaW91cworICAgY2t1dXMqLmMgbW9k dWxlcywgcGx1cyBjb2RlIGluIHRoZSBjaypjb24uYyBvciBja3VjbnMuYyAoQ09OTkVDVAorICAg Y29tbWFuZCkgYW5kIHNldmVyYWwgb3RoZXIgbW9kdWxlcyB0byBkZXRlY3QgVEVMTkVUIG5lZ290 aWF0aW9ucywgZXRjLgorCisgICBXaXRoaW4gdGhlIFRDUFNPQ0tFVCBjb2RlLCBzb21lIHNvY2tl dC1sZXZlbCBjb250cm9scyBhcmUgaW5jbHVkZWQgaWYKKyAgIFRDUFNPQ0tFVCBpcyBkZWZpbmVk IGluIHRoZSBDLUtlcm1pdCBDRkxBR1MgYW5kIFNPTF9TT0NLRVQgaXMgZGVmaW5lZAorICAgaW4g aW4gdGhlIHN5c3RlbSdzIFRDUC1yZWxhdGVkIGhlYWRlciBmaWxlcywgc3VjaCBhcyA8c3lzL3Nv Y2tldC5oPi4KKyAgIFRoZXNlIGFyZToKKworICBTRVQgVENQIEtFRVBBTElWRQorICBTRVQgVENQ IExJTkdFUgorICBTRVQgVENQIFJFQ1ZCVUYKKyAgU0VUIFRDUCBTRU5EQlVGCisKKyAgIEluIGFk ZGl0aW9uLCBpZiBUQ1BfTk9ERUxBWSBpcyBkZWZpbmVkLCB0aGUgZm9sbG93aW5nIGNvbW1hbmQg aXMgYWxzbworICAgZW5hYmxlZDoKKworICBTRVQgVENQIE5PREVMQVkgKE5hZ2xlIGFsZ29yaXRo bSkKKworICAgU2VlIHRoZSBbMTIwXUMtS2VybWl0IHVzZXIgZG9jdW1lbnRhdGlvbiBmb3IgZGVz Y3JpcHRpb25zIG9mIHRoZXNlCisgICBjb21tYW5kcy4KKworICA4LjEuMS4gRmlyZXdhbGxzCisK KyAgIFRoZXJlIGV4aXN0IHZhcmlvdXMgdHlwZXMgb2YgZmlyZXdhbGxzLCBzZXQgdXAgdG8gc2Vw YXJhdGUgdXNlcnMgb2YgYW4KKyAgIGludGVybmFsIFRDUC9JUCBuZXR3b3JrICgiSW50cmFuZXQi KSBmcm9tIHRoZSBncmVhdCB3aWRlIEludGVybmV0LCBidXQKKyAgIHRoZW4gdG8gbGV0IHNlbGVj dGVkIHVzZXJzIG9yIHNlcnZpY2VzIGdldCB0aHJvdWdoIGFmdGVyIGFsbC4KKworICAgT25lIGZp cmV3YWxsIG1ldGhvZCBpcyBjYWxsZWQgU09DS1MsIGluIHdoaWNoIGEgcHJveHkgc2VydmVyIGFs bG93cworICAgdXNlcnMgaW5zaWRlIGEgZmlyZXdhbGwgdG8gYWNjZXNzIHRoZSBvdXRzaWRlIHdv cmxkLCBiYXNlZCBvbiBhCisgICBwZXJtaXNzaW9uIGxpc3QgZ2VuZXJhbGx5IHN0b3JlZCBpbiBh IGZpbGUuIFNPQ0tTIGlzIGVuYWJsZWQgaW4gb25lIG9mCisgICB0d28gd2F5cy4gRmlyc3QsIHRo ZSBzdGFuZGFyZCBzb2NrZXRzIGxpYnJhcnkgaXMgbW9kaWZpZWQgdG8gaGFuZGxlIHRoZQorICAg ZmlyZXdhbGwsIGFuZCB0aGVuIGFsbCB0aGUgY2xpZW50IGFwcGxpY2F0aW9ucyBhcmUgcmVsaW5r ZWQgKGlmCisgICBuZWNlc3NhcnksIGkuZS4gaWYgdGhlIGxpYnJhcmllcyBhcmUgbm90IGR5bmFt aWNhbGx5IGxvYWRlZCkgd2l0aCB0aGUKKyAgIG1vZGlmaWVkIHNvY2tldHMgbGlicmFyeS4gVGhl IEFQSXMgYXJlIGFsbCB0aGUgc2FtZSwgc28gdGhlCisgICBhcHBsaWNhdGlvbnMgZG8gbm90IG5l ZWQgdG8gYmUgcmVjb2RlZCBvciByZWNvbXBpbGVkLgorCisgICBJbiB0aGUgb3RoZXIgbWV0aG9k LCB0aGUgYXBwbGljYXRpb25zIG11c3QgYmUgbW9kaWZpZWQgdG8gY2FsbAorICAgcmVwbGFjZW1l bnQgcm91dGluZXMsIHN1Y2ggYXMgUmFjY2VwdCgpIGluc3RlYWQgb2YgYWNjZXB0KCksIFJiaW5k KCkKKyAgIGluc3RlYWQgb2YgYmluZCgpLCBldGMsIGFuZCB0aGVuIGxpbmtlZCB3aXRoIGEgc2Vw YXJhdGUgU09DS1MgbGlicmFyeS4KKyAgIFRoaXMgc2Vjb25kIG1ldGhvZCBpcyBhY2NvbXBsaXNo ZWQgKGZvciBTT0NLUzQpIGluIEMtS2VybWl0IGJ5CisgICBpbmNsdWRpbmcgLURDS19TT0NLUyBp biB5b3VyIENGTEFHUywgYW5kIGFsc28gYWRkaW5nOgorCisgIC1sc29ja3MKKworICAgdG8gTElC Uywgb3IgcmVwbGFjaW5nIC1sc29ja2V0cyB3aXRoIC1sc29ja3MgKGRlcGVuZGluZyBvbiB3aGV0 aGVyIHRoZQorICAgc29ja3MgbGlicmFyeSBhbHNvIGluY2x1ZGVzIGFsbCB0aGUgc29ja2V0cyBl bnRyeSBwb2ludHMpLgorCisgICBGb3IgU09DS1M1LCB1c2UgLURDS19TT0NLUzUuCisKKyAgIEV4 cGxpY2l0IGZpcmV3YWxsIHN1cHBvcnQgY2FuLCBpbiBnZW5lcmFsLCBub3QgYmUgYSBzdGFuZGFy ZCBmZWF0dXJlIG9yCisgICBhIGZlYXR1cmUgdGhhdCBpcyBzZWxlY3RlZCBhdCBydW50aW1lLCBi ZWNhdXNlIHRoZSBTT0NLUyBsaWJyYXJ5IHRlbmRzCisgICB0byBiZSBkaWZmZXJlbnQgYXQgZWFj aCBzaXRlIC0tIGxvY2FsIG1vZGlmaWNhdGlvbnMgYWJvdW5kLgorCisgICBUaGUgaWRlYWwgc2l0 dWF0aW9uIG9jY3VycyB3aGVuIGZpcmV3YWxscyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBmaXJzdAor ICAgbWV0aG9kLCB1c2luZyBkeW5hbWljYWxseSBsaW5rZWQgc29ja2V0cy1yZXBsYWNlbWVudCBs aWJyYXJpZXM7IGluIHRoaXMKKyAgIGNhc2UsIGFsbCB5b3VyIFRDUC9JUCBjbGllbnQgYXBwbGlj YXRpb25zIG5lZ290aWF0ZSB0aGUgZmlyZXdhbGwKKyAgIHRyYW5zcGFyZW50bHkuCisKKyAgOC4x LjIuIENvbXBpbGF0aW9uIGFuZCBMaW5raW5nIFByb2JsZW1zCisKKyAgIElmIHlvdSBnZXQgYSBj b21waWxhdGlvbiBlcnJvciBpbiBbMTIxXWNrY25ldC5jLCB3aXRoIGEgY29tcGxhaW50IGxpa2UK KyAgICJpbmNvbXBhdGlibGUgdHlwZXMgaW4gYXNzaWdubWVudCIsIGl0IHByb2JhYmx5IGhhcyBz b21ldGhpbmcgdG8gZG8KKyAgIHdpdGggdGhlIGRhdGEgdHlwZSB5b3VyIHN5c3RlbSB1c2VzIGZv ciB0aGUgaW5ldF9hZGRyKCkgZnVuY3Rpb24sIHdoaWNoCisgICBpcyBkZWNsYXJlZCAodXN1YWxs eSkgaW4gPGFycGEvaW5ldC5oPi4gS2VybWl0IHVzZXMgInVuc2lnbmVkIGxvbmciCisgICB1bmxl c3MgdGhlIHN5bWJvbCBJTkFERFJYIGlzIGRlZmluZWQsIGluIHdoaWNoIGNhc2UgInN0cnVjdCBp bmFkZHIiIGlzCisgICB1c2VkIGluc3RlYWQuIFRyeSBhZGRpbmcgLURJTkFERFJYIHRvIENGTEFH UyBpbiB5b3VyIG1ha2UgZW50cnksIGFuZCBpZgorICAgdGhhdCBmaXhlcyB0aGUgcHJvYmxlbSwg cGxlYXNlIHNlbmQgYSByZXBvcnQgdG8ga2VybWl0QGNvbHVtYmlhLmVkdS4KKworICAgQ29tcGls YXRpb24gZXJyb3JzIG1pZ2h0IGFsc28gaGF2ZSB0byBkbyB3aXRoIHRoZSBkYXRhIHR5cGUgdXNl ZCBmb3IKKyAgIGdldHNvY2tvcHQoKSBhbmQgc2V0c29ja29wdCgpIG9wdGlvbi1sZW5ndGggZmll bGQuIFRoaXMgaXMgbm9ybWFsbHkgYW4KKyAgIGludCwgYnV0IHNvbWV0aW1lcyBpdCdzIGEgc2hv cnQsIGEgbG9uZywgb3IgYW4gdW5zaWduZWQgYW55IG9mIHRob3NlLAorICAgb3IgYSBzaXplX3Qu IFRvIGZpeCB0aGUgY29tcGlsYXRpb24gcHJvYmxlbSwgYWRkIC1EU09DS09QVF9UPXh4eCB0byB0 aGUKKyAgIENGTEFHUyBpbiB5b3VyIG1ha2VmaWxlIHRhcmdldCwgd2hlcmUgeHh4IGlzIHRoZSBh cHByb3ByaWF0ZSB0eXBlICh1c2UKKyAgICJtYW4gZ2V0c29ja29wdCIgb3IgZ3JlcCB0aHJvdWdo IHlvdXIgc3lzdGVtL25ldHdvcmsgaGVhZGVyIGZpbGVzIHRvCisgICBmaW5kIHRoZSBuZWVkZWQg dHlwZSkuCisKKyAgOC4xLjMuIEVuYWJsaW5nIEhvc3QgQWRkcmVzcyBMaXN0cworCisgICBXaGVu IHlvdSBnaXZlIEtlcm1pdCBhbiBJUCBob3N0IG5hbWUsIGl0IGNhbGxzIHRoZSBzb2NrZXQgcm91 dGluZQorICAgZ2V0aG9zdGJ5bmFtZSgpIHRvIHJlc29sdmUgaXQuIGdldGhvc3RieW5hbWUoKSBy ZXR1cm5zIGEgaG9zdGVudAorICAgc3RydWN0LCB3aGljaCBtaWdodCBvciBtaWdodCBub3Qgbm90 IGluY2x1ZGUgYSBsaXN0IG9mIGFkZHJlc3NlczsgaWYgaXQKKyAgIGRvZXMsIHRoZW4gaWYgdGhl IGZpcnN0IG9uZSBmYWlscywgS2VybWl0IGNhbiB0cnkgdGhlIHNlY29uZCBvbmUsIGFuZAorICAg c28gb24uIEhvd2V2ZXIsIHRoaXMgd2lsbCBvbmx5IHdvcmsgaWYgdGhlIHN5bWJvbCAiaF9hZGRy IiBpcyBhIG1hY3JvCisgICBkZWZpbmVkIGFzICJoX2FkZHJfbGlzdFswXSIsIHVzdWFsbHkgaW4g bmV0ZGIuaC4gSWYgaXQgaXMsIHRoZW4geW91IGNhbgorICAgYWN0aXZhdGUgdGhpcyBmZWF0dXJl IGJ5IGRlZmluaW5nIHRoZSBmb2xsb3dpbmcgc3ltYm9sIGluIENGTEFHUzoKKworICBIQUREUkxJ U1QKKworICA4LjEuNC4gRW5hYmxpbmcgVGVsbmV0IE5BV1MKKworICAgVGhlIFRlbG5ldCBOZWdv dGlhdGlvbiBBYm91dCBXaW5kb3cgU2l6ZSAoTkFXUykgb3B0aW9uIHJlcXVpcmVzIHRoZQorICAg YWJpbGl0eSB0byBmaW5kIG91dCB0aGUgdGVybWluYWwgc2NyZWVuJ3MgZGltZW5zaW9ucy4gRS5n LiBpbiBVbml4LCB3ZQorICAgbmVlZCBzb21ldGhpbmcgbGlrZSBpb2N0bCgwLCBUSU9DR1dJTlNa LCAuLi4pLiBJZiB5b3VyIHZlcnNpb24gb2YKKyAgIEtlcm1pdCB3YXMgYnVpbHQgd2l0aCBOQVdT IGNhcGFiaWxpdHksIFNIT1cgVkVSU0lPTlMgaW5jbHVkZXMgQ0tfTkFXUworICAgYW1vbmcgdGhl IGNvbXBpbGVyIG9wdGlvbnMuIElmIGl0IGRvZXNuJ3QsIHlvdSBjYW4gYWRkIGl0IGJ5IGRlZmlu aW5nCisgICBDS19OQVdTIGF0IGNvbXBpbGUgdGltZS4gVGhlbiwgaWYgdGhlIGNvbXBpbGVyIG9y IGxpbmtlciBjb21wbGFpbiBhYm91dAorICAgdW5kZWZpbmVkIG9yIG1pc3Npbmcgc3ltYm9scywg b3IgdGhlcmUgaXMgbm8gY29tcGxhaW50IGJ1dCBTSE9XCisgICBURVJNSU5BTCBmYWlscyB0byBz aG93IHJlYXNvbmFibGUgIlJvd3MgPSwgQ29sdW1ucyA9IiB2YWx1ZXMsIHRoZW4gdGFrZQorICAg YSBsb29rIGF0IChvciB3cml0ZSkgdGhlIGFwcHJvcHJpYXRlIHR0Z3dzaXooKSByb3V0aW5lLiBP biB0aGUgb3RoZXIKKyAgIGhhbmQsIGlmIENLX05BV1MgaXMgZGVmaW5lZCBieSBkZWZhdWx0IGZv ciB5b3VyIHN5c3RlbSAoaW4KKyAgIFsxMjJdY2tjbmV0LmgpLCBidXQgY2F1c2VzIHRyb3VibGUs IHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBkZWZpbml0aW9uIGJ5CisgICBpbmNsdWRpbmcgdGhlIC1E Tk9OQVdTIHN3aXRjaCBvbiB5b3VyIENDIGNvbW1hbmQgbGluZSwgdGh1cyBkaXNhYmxpbmcKKyAg IHRoZSBOQVdTIGZlYXR1cmUuCisKKyAgIFRoaXMgYXBwZWFycyB0byBiZSBuZWVkZWQgYXQgbGVh c3Qgb24gdGhlIEFUJlQgM0IyLCB3aGVyZSBpbgorICAgWzEyM11ja3V0aW8uYywgdGhlIHJvdXRp bmUgdHRnd3NpeigpIGZpbmRzIHRoYXQgdGhlIFRJT0NHV0lOU1ogc3ltYm9sCisgICBpcyBkZWZp bmVkIGJ1dCBsYWNrcyBkZWZpbml0aW9ucyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgd2luc2l6ZSBz dHJ1Y3QKKyAgIGFuZCBpdHMgbWVtYmVycyB3c19jb2wgYW5kIHdzX3Jvdy4KKworICAgVGhlIFVO SVggdmVyc2lvbiBvZiBDLUtlcm1pdCBhbHNvIHRyYXBzIFNJR1dJTkNILCBzbyBpdCBjYW4gc2Vu ZCBhIE5BV1MKKyAgIHRvIHRoZSBUZWxuZXQgc2VydmVyIGFueSB0aW1lIHRoZSBsb2NhbCBjb25z b2xlIHRlcm1pbmFsIHdpbmRvdyBzaXplCisgICBjaGFuZ2VzLCBlLmcuIHdoZW4geW91IHN0cmV0 Y2ggaXQgd2l0aCBhIG1vdXNlLiBUaGUgU0lHV0lOQ0gtdHJhcHBpbmcKKyAgIGNvZGUgaXMgZW5h YmxlZCBpZiBTSUdXSU5DSCBpcyBkZWZpbmVkIChpLmUuIGluIHNpZ25hbC5oKS4gSWYgdGhpcyBj b2RlCisgICBzaG91bGQgY2F1c2UgcHJvYmxlbXMsIHlvdSBjYW4gZGlzYWJsZSBpdCB3aXRob3V0 IGRpc2FibGluZyB0aGUgTkFXUworICAgZmVhdHVyZSBhbHRvZ2V0aGVyLCBieSBkZWZpbmluZyBO T1NJR1dJTkNIIGF0IGNvbXBpbGUgdGltZS4KKworICA4LjEuNS4gRW5hYmxpbmcgSW5jb21pbmcg VENQL0lQIENvbm5lY3Rpb25zCisKKyAgIFRoaXMgZmVhdHVyZSBsZXRzIHlvdSAic2V0IGhvc3Qg KiBwb3J0IiBhbmQgd2FpdCBmb3IgYW4gaW5jb21pbmcKKyAgIGNvbm5lY3Rpb24gb24gdGhlIGdp dmVuIHBvcnQuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGF1dG9tYXRpY2FsbHkgYXQKKyAgIGNv bXBpbGUgaWYgVENQU09DS0VUIGlzIGRlZmluZWQgYW5kIFNFTEVDVCBpcyBhbHNvIGRlZmluZWQu IEJ1dCB3YXRjaAorICAgb3V0LCBzaW1wbHkgZGVmaW5pbmcgU0VMRUNUIG9uIHRoZSBjYyBjb21t YW5kIGxpbmUgZG9lcyBub3QgZ3VhcmFudGVlCisgICBzdWNjZXNzZnVsIGNvbXBpbGF0aW9uIG9y IGxpbmtpbmcgKHNlZSBbMTI0XVNlY3Rpb24gMTEpLgorCisgICBJZiB5b3Ugd2FudCB0byBkaXNh YmxlIGluY29taW5nIFRDUC9JUCBjb25uZWN0aW9ucywgdGhlbiBidWlsZCBDLUtlcm1pdAorICAg d2l0aDoKKworICAtRE5PTElTVEVOCisKKyAgOC4xLjYuIERpc2FibGluZyBTRVQgVENQIE9wdGlv bnMKKworICAgVGhlIG1haW4gcmVhc29uIGZvciB0aGlzIGlzIGJlY2F1c2Ugb2YgaGVhZGVyIGZp bGUgLyBwcm90b3R5cGUKKyAgIGNvbmZsaWN0cyBhdCBjb21waWxlIHRpbWUgcmVnYXJkaW5nIGdl dC0gLyBzZXRzb2Nrb3B0KCkuIElmIHlvdSBjYW4ndAorICAgZml4IHRoZW0gKHdpdGhvdXQgYnJl YWtpbmcgb3RoZXIgYnVpbGRzKSwgYWRkIHRoZSBmb2xsb3dpbmcgaW4gQ0ZMQUdTOgorCisgIC1E Tk9UQ1BPUFRTCisKKyAgOC4yLiBYLjI1CisKKyAgIFguMjUgc3VwcG9ydCByZXF1aXJlcyAoYSkg YSBTdW4sIChiKSB0aGUgU3VuTGluayBwcm9kdWN0IChsaWJyYXJpZXMgYW5kCisgICBoZWFkZXIg ZmlsZXMpLCBhbmQgKGMpIGFuIFguMjUgY29ubmVjdGlvbiBpbnRvIHlvdXIgU3VuLiBTaW1pbGFy bHkgKGluCisgICBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIpIFN0cmF0dXMgVk9TIGFuZCBJQk0gQUlY LgorCisgICBJbiBVTklYLCBzcGVjaWFsIG1ha2VmaWxlIHRhcmdldHMgc3Vub3M0eDI1IGFuZCBz dW5vczQxeDI1IChmb3IgU1VOT1MKKyAgIDQuMCBhbmQgNC4xLCByZXNwZWN0aXZlbHkpLCBvciBh aXg0MXgyNSwgYXJlIHByb3ZpZGVkIHRvIGJ1aWxkIGluIHRoaXMKKyAgIGZlYXR1cmUsIGJ1dCB0 aGV5IG9ubHkgd29yayBpZiBjb25kaXRpb25zIChhKS0oYykgYXJlIG1ldC4gVG8gcmVxdWVzdAor ICAgdGhpcyBmZWF0dXJlLCBpbmNsdWRlIC1EU1VOWDI1IChvciAtRElCTVgyNSkgaW4gQ0ZMQUdT LgorCisgICBTVU5YMjUgKG9yIC1ESUJNWDI1KSBhbmQgVENQU09DS0VUIGNhbiBiZSBmcmVlbHkg bWl4ZWQgYW5kIG1hdGNoZWQsIGFuZAorICAgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYXQgcnVudGlt ZSB3aXRoIHRoZSBTRVQgTkVUV09SSyBUWVBFIGNvbW1hbmQgb3IKKyAgIFNFVCBIT1NUIHN3aXRj aGVzLgorCisgIDguMy4gT3RoZXIgTmV0d29ya3MKKworICAgU3VwcG9ydCBmb3Igb3RoZXIgbmV0 d29ya2luZyBtZXRob2RzIC0tIE5FVEJJT1MsIExBVCwgTmFtZWQgUGlwZXMsIGV0YworICAgLS0g aXMgaW5jbHVkZWQgaW4gY2sqbmV0LmggYW5kIGNrKm5ldC5jIGZvciBpbXBsZW1lbnRhdGlvbnMg KHN1Y2ggYXMKKyAgIFdpbmRvd3Mgb3IgT1MvMikgd2hlcmUgdGhlc2UgbWV0aG9kcyBhcmUgc3Vw cG9ydGVkLgorCisgICBQcm92aXNpb24gaXMgbWFkZSBpbiB0aGUgb3JnYW5pemF0aW9uIG9mIHRo ZSBtb2R1bGVzLCBoZWFkZXIgZmlsZXMsCisgICBjb21tYW5kcywgZXRjLCBmb3IgYWRkaXRpb24g b2YgbmV3IG5ldHdvcmsgdHlwZXMgc3VjaCBhcyBERUNuZXQsIFguMjUKKyAgIGZvciBvdGhlciBz eXN0ZW1zIChIUC1VWCwgVk1TLCBldGMpLCBhbmQgc28gb24uIFNlbmQgZW1haWwgdG8KKyAgIFsx MjVda2VybWl0QGNvbHVtYmlhLmVkdSBpZiB5b3UgYXJlIHdpbGxpbmcgYW5kIGFibGUgdG8gd29y ayBvbiBzdWNoIGEKKyAgIHByb2plY3QuCisKKyAgIFsgWzEyNl1DLUtlcm1pdCBIb21lIF0gWyBb MTI3XUtlcm1pdCBIb21lIF0KKworICA5LiBFWENFUFRJT04gSEFORExJTkcKKworICAgWyBbMTI4 XVRvcCBdIFsgWzEyOV1Db250ZW50cyBdIFsgWzEzMF1OZXh0IF0gWyBbMTMxXVByZXZpb3VzIF0K KworICAgVGhlIEMgbGFuZ3VhZ2Ugc2V0am1wL2xvbmdqbXAgbWVjaGFuaXNtIGlzIHVzZWQgZm9y IGhhbmRsaW5nCisgICBleGNlcHRpb25zLiBUaGUganVtcCBidWZmZXIgaXMgb2YgdHlwZSBqbXBf YnVmLCB3aGljaCBhbG1vc3QgZXZlcnl3aGVyZQorICAgaXMgdHlwZWRlZidkIGFzIGFuIGFycmF5 LCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgaGF2ZSBubyB0cm91YmxlCisgICBjb21waWxpbmcg dGhlIGV4Y2VwdGlvbi1oYW5kbGluZyBjb2RlLiBIb3dldmVyLCBpZiB5b3UgYXJlIGJ1aWxkaW5n CisgICBDLUtlcm1pdCBpbi9mb3IgYW4gZW52aXJvbm1lbnQgd2hlcmUgam1wX2J1ZiBpcyBzb21l dGhpbmcgb3RoZXIgdGhhbiBhbgorICAgYXJyYXkgKGUuZy4gYSBzdHJ1Y3QpLCB0aGVuIHlvdSds bCBoYXZlIHRvIGRlZmluZSB0aGUgZm9sbG93aW5nIHN5bWJvbDoKKworICBKQk5PVEFSUkFZCisK KyAgIFsgWzEzMl1DLUtlcm1pdCBIb21lIF0gWyBbMTMzXUtlcm1pdCBIb21lIF0KKworICAxMC4g U0VDVVJJVFkgRkVBVFVSRVMKKworICAgWyBbMTM0XVRvcCBdIFsgWzEzNV1Db250ZW50cyBdIFsg WzEzNl1OZXh0IF0gWyBbMTM3XVByZXZpb3VzIF0KKworICAgU2VjdXJpdHksIGluIHRoZSBzZW5z ZSBvZiBzZWN1cmUgYXV0aGVudGljYXRpb24gYW5kIHN0cm9uZyBlbmNyeXB0aW9uLAorICAgY2Fu IGJlIGJ1aWx0IGludG8gdmVyc2lvbmYgb2YgQy1LZXJtaXQgZm9yIHdoaWNoIHRoZSBhcHByb3By aWF0ZQorICAgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMgYXJlIGF2YWlsYWJsZSAoS2VyYmVy b3MgSVYsIEtlcmJlcm9zIFYsCisgICBPcGVuU1NMLCBTUlApLCBhcyBleHBsYWluZWQgaW4gZ3Jl YXQgZGV0YWlsIGluIHRoZSBLZXJtaXQgU2VjdXJpdHkKKyAgIFJlZmVyZW5jZQorICAgLiBUaGUg Zm9sbG93aW5nIHN5bWJvbHMgZ292ZXJuIEMtS2VybWl0J3Mgc2VjdXJpdHkgZmVhdHVyZXMgYXQg YnVpbGQKKyAgIHRpbWU6CisKKyAgIE5PX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgTWVhbnMg ZG8gbm90IGNvbmZpZ3VyZSBhbnkgVEVMTkVUIEFVVEhFTlRJQ0FUSU9OIHN1cHBvcnQuIEl0Cisg ICAgICAgICAgaW1wbGllcyBOT19FTkNSWVBUSU9OIGFuZCB1bmRlZmluZXMgYW55IG9mIHRoZSBh dXRoIGFuZCBlbmNyeXB0CisgICAgICAgICAgdHlwZXMuIEl0IGRvZXMgbm90IHVuZGVmaW5lIENL X1NTTCBldmVuIHRob3VnaCBidWlsZHMgd2l0aAorICAgICAgICAgIENLX1NTTCBjYW5ub3Qgc3Vj Y2VlZCB3aXRob3V0IENLX0FVVEhFTlRJQ0FUSU9OLiAoVGhpcyB3aWxsIGJlCisgICAgICAgICAg c3VwcG9ydGVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIEl0IHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93 CisgICAgICAgICAgQy1LZXJtaXQgdG8gYmUgYnVpbHQgb25seSBhcyBhbiBGVFAgY2xpZW50LikK KworICAgTk9fS0VSQkVST1MKKyAgICAgICAgICBNZWFucyBkbyBub3QgY29tcGlsZSBpbiBhbnkg S0VSQkVST1Mgc3VwcG9ydCB3aGVuCisgICAgICAgICAgQ0tfQVVUSEVOVElDQVRJT04gaGFzIGJl ZW4gZGVmaW5lZC4KKworICAgTk9fU1JQCisgICAgICAgICAgRG8gbm90IGNvbXBpbGUgaW4gYW55 IFNSUCBzdXBwb3J0IHdoZW4gQ0tfQVVUSEVOVElDQVRJT04gaGFzCisgICAgICAgICAgYmVlbiBk ZWZpbmVkLgorCisgICBOT19TU0wKKyAgICAgICAgICBEbyBub3QgY29tcGlsZSBpbiBhbnkgU1NM L1RMUyBzdXBwb3J0CisKKyAgIE5PX0VOQ1JZUFRJT04KKyAgICAgICAgICBEbyBub3QgY29tcGls ZSBpbiBhbnkgVGVsbmV0IGVuY3J5cHRpb24gc3VwcG9ydC4gSXQgZG9lcyBub3QKKyAgICAgICAg ICBhZmZlY3QgdGhlIHVzZSBvZiBTU0wvVExTCisKKyAgIE5PU1NICisgICAgICAgICAgRG8gbm90 IGNvbXBpbGUgaW4gYW55IFNTSCBzdXBwb3J0IHdoZXRoZXIgaW50ZXJuYWwgb3IgZXh0ZXJuYWwK KworICAgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICBUZWxuZXQgQVVUSEVOVElDQVRJT04g c3VwcG9ydC4gKEFsc28sIHJlcXVpcmVkIGlmIFNTTC9UTFMKKyAgICAgICAgICBzdXBwb3J0IGlz IGRlc2lyZWQuKSBPbiBtb3N0IHBsYXRmb3JtcyB0aGlzIGRvZXMgbm90IGF1dG9kZWZpbmUKKyAg ICAgICAgICBhbnkgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBzdWNoIGFzIEtlcmJlcm9zIFYs IEtlcmJlcm9zIElWLAorICAgICAgICAgIFNSUCwgLi4uIFRob3NlIG5lZWQgdG8gYmUgZGVmaW5l ZCBzZXBhcmF0ZWx5LgorCisgICBDS19LRVJCRVJPUworICAgICAgICAgIERlZmluZWQgYXV0b21h dGljYWxseSB3aGVuIEtSQjQsIEtSQjUsIG9yIEtSQjUyNCBhcmUgZGVmaW5lZC4KKyAgICAgICAg ICBJbXBsaWVzIHRoYXQgc29tZSB2ZXJzaW9uIG9mIEtlcmJlcm9zIGlzIGluIHVzZS4KKworICAg S1JCNAorICAgICAgICAgIFNob3VsZCBiZSBkZWZpbmVkIHdoZW4gS2VyYmVyb3MgSVYgc3VwcG9y dCBpcyBkZXNpcmVkLgorCisgICBLUkI1CisgICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgd2hl biBLZXJiZXJvcyBWIHN1cHBvcnQgaXMgZGVzaXJlZC4KKworICAgS1JCNTI0CisgICAgICAgICAg U2hvdWxkIGJlIGRlZmluZWQgaWYgYm90aCBLZXJiZXJvcyBWIGFuZCBLZXJiZXJvcyBJViBhcmUg dXNlZAorICAgICAgICAgIGFuZCB0aGUgS2VyYmVyb3MgSVYgc3VwcG9ydCBpcyBwcm92aWRlZCBi eSB0aGUgTUlUIEtlcmJlcm9zIElWCisgICAgICAgICAgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IGlu IHRoZSBjdXJyZW50IEtlcmJlcm9zIDUgZGlzdHJpYnV0aW9uLgorCisgICBLUkI1X1UyVQorICAg ICAgICAgIFNob3VsZCBiZSBkZWZpbmVkIGlmIEtSQjUgaXMgZGVmaW5lZCBhbmQgS2VyYmVyb3Mg NSBVc2VyIHRvIFVzZXIKKyAgICAgICAgICBtb2RlIGlzIGRlc2lyZWQuCisKKyAgIEhFSU1EQUwK KyAgICAgICAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBLZXJiZXJvcyBWIHN1cHBvcnQgaXMgcHJv dmlkZWQgYnkgSEVJTURBTC4KKyAgICAgICAgICBTdXBwb3J0IGZvciB0aGlzIG9wdGlvbiBpcyBu b3QgY29tcGxldGUgaW4gQy1LZXJtaXQgOC4wLiBBbnlvbmUKKyAgICAgICAgICBpbnRlcmVzdGVk IGluIHdvcmtpbmcgb24gdGhpcyBzaG91bGQgY29udGFjdCBrZXJtaXQtc3VwcG9ydC4KKworICAg Q0tfU1JQCisgICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgaWYgU1JQIHN1cHBvcnQgaXMgZGVz aXJlZC4KKworICAgQ0tfRU5DUllQVElPTgorICAgICAgICAgIFNob3VsZCBiZSBkZWZpbmVkIGlm IFRFTE5FVCBFTkNSWVBUSU9OIG9wdGlvbiBzdXBwb3J0IGlzCisgICAgICAgICAgZGVzaXJlZC4g VGhpcyBvcHRpb24gZG9lcyBub3QgZGVmaW5lIGFueSBwYXJ0aWN1bGFyIGVuY3J5cHRpb24KKyAg ICAgICAgICB0eXBlcy4gVGhhdCBzaG91bGQgYmUgZG9uZSBieSBkZWZpbmluZyBDS19ERVMgb3Ig Q0tfQ0FTVC4KKworICAgQ0tfREVTCisgICAgICAgICAgU2hvdWxkIGJlIGRlZmluZWQgaWYgZWl0 aGVyIERFUyBvciAzREVTIFRlbG5ldCBFbmNyeXB0aW9uIG9wdGlvbgorICAgICAgICAgIHN1cHBv cnQgaXMgZGVzaXJlZC4KKworICAgTElCREVTCisgICAgICAgICAgSWYgQ0tfREVTIGlzIGRlZmlu ZWQgYW5kIERFUyBzdXBwb3J0IGlzIGJlaW5nIHByb3ZpZGVkIGJ5IGVpdGhlcgorICAgICAgICAg IEVyaWMgWW91bmcncyBsaWJkZXMuYSBvciBPcGVuU1NMIDAuOS42eCBvciBlYXJsaWVyLCB0aGlz IG9wdGlvbgorICAgICAgICAgIG11c3QgYmUgZGVmaW5lZC4gSWYgaXQgaXMgbm90IGRlZmluZWQs IGl0IHdpbGwgYmUgYXNzdW1lZCB0aGF0CisgICAgICAgICAgREVTIHN1cHBvcnQgaXMgcHJvdmlk ZWQgYnkgdGhlIE1JVCBLZXJiZXJvcyBJViBsaWJyYXJpZXMuCisKKyAgIENLX0NBU1QKKyAgICAg ICAgICBTaG91bGQgYmUgZGVmaW5lZCBpZiBDQVNUIFRlbG5ldCBFbmNyeXB0aW9uIG9wdGlvbiBz dXBwb3J0IGlzCisgICAgICAgICAgZGVzaXJlZAorCisgICBDS19TU0wKKyAgICAgICAgICBTaG91 bGQgYmUgZGVmaW5lZCBpZiBTU0wvVExTIHN1cHBvcnQgKE9wZW5TU0wpIGlzIGRlc2lyZWQuCisK KyAgIFNTTF9LUkI1CisgICAgICAgICAgSWYgS1JCNSBpcyBkZWZpbmVkLCBhbmQgT3BlblNTTCBp cyBidWlsdCB0byBzdXBwb3J0IHRoZSBLZXJiZXJvcworICAgICAgICAgIDUgY2lwaGVycywgdGhl biB5b3Ugc2hvdWxkIGRlZmluZSBTU0xfS1JCNQorCisgICBOT1NTTEtSQjUKKyAgICAgICAgICBJ ZiB5b3UgYXJlIHVzaW5nIE9wZW5TU0wgMC45Ljcgb3IgaGlnaGVyIGFuZCBkbyBub3Qgd2lzaCB0 bworICAgICAgICAgIGJ1aWxkIHdpdGggc3VwcG9ydCBmb3IgS2VyYmVyb3MgNSBUTFMgY2lwaGVy cywgdGhpcyBvcHRpb24gbXVzdAorICAgICAgICAgIGJlIGRlZmluZWQuCisKKyAgIFpMSUIKKyAg ICAgICAgICBJZiB5b3UgYXJlIHVzaW5nIE9wZW5TU0wgMC45LjYgb3IgaGlnaGVyIGFuZCBpdCBo YXMgYmVlbgorICAgICAgICAgIGNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3IgWkxJQiBjb21wcmVz c2lvbiwgdGhpcyBvcHRpb24gc2hvdWxkCisgICAgICAgICAgYmUgZGVmaW5lZCB0byBlbmFibGUg S2VybWl0IHRvIHByb3Blcmx5IGVuYWJsZSB0aGUgdXNlIG9mCisgICAgICAgICAgY29tcHJlc3Np b24uCisKKyAgIFNTSENNRAorICAgICAgICAgIERlZmluZWQgZm9yIEMtS2VybWl0IHRvIGVuYWJs ZSB0aGUgdXNlIG9mIGV4dGVybmFsIFNTSCBjbGllbnRzCisgICAgICAgICAgZnJvbSB0aGUgS2Vy bWl0IGNvbW1hbmQgbGFuZ3VhZ2UKKworICAgU1NIQlVJTFRJTgorICAgICAgICAgIERlZmluZWQg Zm9yIEtlcm1pdCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIGludGVncmF0ZWQgU1NICisgICAg ICAgICAgc3VwcG9ydC4gQ3VycmVudGx5IG9ubHkgV2luZG93cy4KKworICAgQU5ZU1NICisgICAg ICAgICAgRGVmaW5lZCBpZiBlaXRoZXIgU1NIQ01EIG9yIFNTSEJVSUxUSU4gYXJlIGRlZmluZWQu CisKKyAgIENLX1NORExPQworICAgICAgICAgIFRlbG5ldCBTZW5kIExvY2F0aW9uIHN1cHBvcnQu CisKKyAgIE5PU05ETE9DCisgICAgICAgICAgRG8gbm90IGluY2x1ZGUgVGVsbmV0IFNlbmQgTG9j YXRpb24gc3VwcG9ydC4KKworICAgQ0tfWERJU1BMT0MKKyAgICAgICAgICBUZWxuZXQgWC1EaXNw bGF5IExvY2F0aW9uIHN1cHBvcnQuIERldGVybWluZXMgaWYgdGhlIFgtRGlzcGxheQorICAgICAg ICAgIGxvY2F0aW9uIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gdGhlIFRlbG5ldCBzZXJ2ZXIgZWl0 aGVyIHZpYQorICAgICAgICAgIFRlbG5ldCBYRElTUExPQyBvciBORVctRU5WIG9wdGlvbnMuCisK KyAgIE5PWERJU1BMT0MKKyAgICAgICAgICBEbyBub3QgaW5jbHVkZSBUZWxuZXQgWC1EaXNwbGF5 IExvY2F0aW9uIHN1cHBvcnQuCisKKyAgIENLX0ZPUldBUkRfWAorICAgICAgICAgIFRlbG5ldCBG b3J3YXJkIFggV2luZG93cyBTZXNzaW9uIERhdGEgb3B0aW9uLiBVc2VkIHRvIHByb3RlY3QKKyAg ICAgICAgICB0aGUgcHJpdmFjeSBhbmQgaW50ZWdyaXR5IG9mIFggV2luZG93cyBTZXNzaW9ucyB3 aGVuIHNlY3VyZQorICAgICAgICAgIHRlbG5ldCBzZXNzaW9ucyBhcmUgaW4gdXNlLgorCisgICBO T0ZPUldBUkRYCisgICAgICAgICAgRG8gbm90IGluY2x1ZGUgVGVsbmV0IEZvcndhcmQgWCBXaW5k b3dzIFNlc3Npb24gRGF0YSBvcHRpb24uCisKKyAgIEJlc2lkZXMgdGhlIHN0cm9uZyBmb3JtcyBv ZiBzZWN1cml0eSBsaXN0ZWQgYWJvdmUsIEMtS2VybWl0IGFsc28KKyAgIGVtYm9kaWVzIHZhcmlv dXMgaW50ZXJuYWwgc2VjdXJpdHkgZmVhdHVyZXMsIGluY2x1ZGluZzoKKworICAgTk9QVVNICisg ICAgICAgICAgQ29tcGlsaW5nIHdpdGggdGhlIE5PUFVTSCBzeW1ib2wgZGVmaW5lZCByZW1vdmVz IGFsbCB0aGUgInNoZWxsCisgICAgICAgICAgZXNjYXBlIiBmZWF0dXJlcyBmcm9tIHRoZSBwcm9n cmFtLCBpbmNsdWRpbmcgdGhlIFBVU0gsIFJVTiwgYW5kCisgICAgICAgICAgU1BBV04gY29tbWFu ZHMsIHRoZSAiISIgYW5kICJAIiBjb21tYW5kIHByZWZpeGVzLCBPUEVOICFSRUFELAorICAgICAg ICAgIE9QRU4gIVdSSVRFLCBqb2IgY29udHJvbCAoaW5jbHVkaW5nIHRoZSBTVVNQRU5EIGNvbW1h bmQpLCB0aGUKKyAgICAgICAgICBSRURJUkVDVCBjb21tYW5kLCBzaGVsbC9EQ0wgZXNjYXBlIGZy b20gQ09OTkVDVCBtb2RlLCBhcyB3ZWxsIGFzCisgICAgICAgICAgdGhlIHNlcnZlcidzIGV4ZWN1 dGlvbiBvZiBSRU1PVEUgSE9TVCBjb21tYW5kcyAoYW5kLCBvZiBjb3Vyc2UsCisgICAgICAgICAg dGhlIEVOQUJMRSBIT1NUIGNvbW1hbmQpLiBBZGQgTk9ESVNQTyB0byBhbHNvIHByZXZlbnQgYWNj ZXB0YW5jZQorICAgICAgICAgIG9mIGluY29taW5nIE1BSUwgb3IgUkVNT1RFIFBSSU5UIGZpbGVz LiBGb3IgVU5JWCwgYWxzbyBiZSBzdXJlCisgICAgICAgICAgdG8gcmVhZCBbMTM4XVNlY3Rpb24g MTEgb2YgdGhlIFsxMzldVW5peCBDLUtlcm1pdCBJbnN0YWxsYXRpb24KKyAgICAgICAgICBJbnN0 cnVjdGlvbnMuIGFib3V0IHNldFt1Z11pZCBjb25maWd1cmF0aW9uLiBBZGRpdGlvbmFsCisgICAg ICAgICAgcmVzdHJpY3Rpb25zIGNhbiBiZSBlbmZvcmNlZCB3aGVuIGluIHNlcnZlciBtb2RlOyBy ZWFkIGFib3V0IHRoZQorICAgICAgICAgIERJU0FCTEUgY29tbWFuZCBpbiB0aGUgdXNlciBtYW51 YWwuCisKKyAgIE5PQ0NUUkFQCisgICAgICAgICAgQ29tcGlsaW5nIHdpdGggTk9DQ1RSQVAgcHJl dmVudHMgdGhlIHRyYXBwaW5nIG9mIFNJR0lOVCBieQorICAgICAgICAgIEtlcm1pdC4gVGh1cyBp ZiB0aGUgdXNlciBnZW5lcmF0ZXMgYSBTSUdJTlQgc2lnbmFsIChlLmcuIGJ5CisgICAgICAgICAg dHlwaW5nIHRoZSBzeXN0ZW0ncyBpbnRlcnJ1cHQgY2hhcmFjdGVyKSwgS2VybWl0IHdpbGwgZXhp dAorICAgICAgICAgIGltbWVkaWF0ZWx5LCByYXRoZXIgdGhhbiByZXR1cm5pbmcgdG8gaXRzIHBy b21wdC4KKworICAgTk9QVVNIIGFuZCBOT0NDVFJBUCB0b2dldGhlciBhbGxvdyBLZXJtaXQgdG8g YmUgcnVuIGZyb20gcmVzdHJpY3RlZAorICAgc2hlbGxzLCBwcmV2ZW50aW5nIGFjY2VzcyB0byBz eXN0ZW0gZnVuY3Rpb25zLgorCisgICBbIFsxNDBdQy1LZXJtaXQgSG9tZSBdIFsgWzE0MV1LZXJt aXQgSG9tZSBdCisKKyAgMTEuIEVOQUJMSU5HIFNFTEVDVCgpCisKKyAgIFsgWzE0Ml1Ub3AgXSBb IFsxNDNdQ29udGVudHMgXSBbIFsxNDRdTmV4dCBdIFsgWzE0NV1QcmV2aW91cyBdCisKKyAgIEtl cm1pdCB3b3JrcyBiZXN0IGlmIGl0IGNhbiBkbyBub25ibG9ja2luZyByZWFkcywgbm9uZGVzdHJ1 Y3RpdmUgaW5wdXQKKyAgIGJ1ZmZlciBjaGVja2luZywgYW5kIG1pbGxpc2Vjb25kIHNsZWVwcy4g QWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUKKyAgIGFjY29tcGxpc2hlZCBieSB0aGUgc2Vs ZWN0KCkgZnVuY3Rpb24sIHdoaWNoLCB1bmZvcnR1bmF0ZWx5LCBpcyBub3QKKyAgIHVuaXZlcnNh bGx5IGF2YWlsYWJsZS4gRnVydGhlcm1vcmUsIHNlbGVjdCgpIGlzIHJlcXVpcmVkIGlmIGluY29t aW5nCisgICBUQ1AvSVAgY29ubmVjdGlvbnMgYXJlIHRvIGJlIHN1cHBvcnRlZC4KKworICAgc2Vs ZWN0KCkgd2FzIGludHJvZHVjZWQgd2l0aCBCZXJrZWxleSBVTklYLCByZWplY3RlZCBieSBBVCZU IGZvciBTeXN0ZW0KKyAgIFYsIGJ1dCBpcyBncmFkdWFsbHkgY3JlZXBpbmcgaW4gdG8gYWxsIFVO SVggdmVyc2lvbnMgKGFuZCBvdGhlcgorICAgb3BlcmF0aW5nIHN5c3RlbXMgdG9vKSBieSB2aXJ0 dWUgb2YgaXRzIHByZXNlbmNlIGluIHRoZSBzb2NrZXRzCisgICBsaWJyYXJ5LCB3aGljaCBpcyBu ZWVkZWQgZm9yIFRDUC9JUC4gQVQmVCBTVklEIGZvciBTeXN0ZW0gViBSNCBpbmNsdWRlcworICAg c2VsZWN0KCksIGJ1dCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdCBhbGwgU1ZSNCBpbXBsZW1lbnRh dGlvbnMgaGF2ZSBpdC4KKworICAgRnVydGhlcm1vcmUsIGV2ZW4gd2hlbiBzZWxlY3QoKSBpcyBh dmFpbGFibGUsIGl0IG1pZ2h0IHdvcmsgb25seSBvbgorICAgc29ja2V0IGZpbGUgZGVzY3JpcHRv cnMsIGJ1dCBub3Qgb24gb3RoZXJzIGxpa2Ugc2VyaWFsIHBvcnRzLCBwaXBlcywKKyAgIGV0Yy4g Rm9yIGV4YW1wbGUsIGluIEFPUy9WUyBhbmQgQmVPUywgaXQgd29ya3Mgb25seSB3aXRoIGZpbGUK KyAgIGRlc2NyaXB0b3JzIHRoYXQgd2VyZSBjcmVhdGVkIGJ5IHNvY2tldCgpIGFuZCBvcGVuZWQg YnkgY29ubmVjdCgpIG9yCisgICBhY2NlcHQoKS4KKworICAgT3RoZXIgYWx0ZXJuYXRpdmVzIGlu Y2x1ZGUgcG9sbCgpIGFuZCByZGNoaygpLiBPbmx5IG9uZSBvZiB0aGVzZSB0aHJlZQorICAgZnVu Y3Rpb25zIHNob3VsZCBiZSBpbmNsdWRlZC4gVGhlIGZvbGxvd2luZyBzeW1ib2xzIGdvdmVybiB0 aGlzOgorCisgICAgIFNFTEVDVCAgVXNlIHNlbGVjdCgpIChCU0QsIG9yIHN5c3RlbXMgd2l0aCBz b2NrZXRzIGxpYnJhcmllcykKKyAgICAgQ0tfUE9MTCBVc2UgcG9sbCgpICAgKFN5c3RlbSBWKQor ICAgICBSRENISyAgIFVzZSByZGNoaygpICAoU0NPIFhFTklYIGFuZCBVTklYKQorCisgICBJZiB5 b3VyIHN5c3RlbSBzdXBwb3J0cyB0aGUgc2VsZWN0KCkgZnVuY3Rpb24sIGJ1dCB5b3VyIHZlcnNp b24gb2YKKyAgIEMtS2VybWl0IGRvZXMgbm90LCB0cnkgYWRkaW5nOgorCisgIC1EU0VMRUNUCisK KyAgIHRvIHRoZSBDRkxBR1MsIGFuZCByZW1vdmluZyAtRFJEQ0hLIG9yIC1EQ0tfUE9MTCBpZiBp dCBpcyB0aGVyZS4gSWYgeW91CisgICBnZXQgY29tcGlsYXRpb24gZXJyb3JzLCBzb21lIGFkanVz dG1lbnRzIHRvIGNrKnRpby5jIGFuZC9vciBjaypuZXQuYworICAgbWlnaHQgYmUgbmVlZGVkOyBz ZWFyY2ggZm9yIFNFTEVDVCAodXBwZXJjYXNlKSBpbiB0aGVzZSBmaWxlcyAobm90ZQorICAgdGhh dCB0aGVyZSBhcmUgc2V2ZXJhbCB2YXJpYXRpb25zIG9uIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25z IGZvcgorICAgc2VsZWN0KCkpLgorCisgICBWYXJpb3VzIG1hY3JvcyBhbmQgZGF0YSB0eXBlcyBu ZWVkIHRvIGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gdXNlCisgICBzZWxlY3QoKS4gVXN1YWxseSB0 aGVzZSBhcmUgcGlja2VkIHVwIGZyb20gPHR5cGVzLmg+IG9yIDxzeXMvdHlwZXMuaD4uCisgICBC dXQgb24gc29tZSBzeXN0ZW1zLCB0aGV5IGFyZSBpbiA8c3lzL3NlbGVjdC5oPi4gSW4gdGhhdCBj YXNlLCBhZGQgdGhlCisgICBmb2xsb3dpbmc6CisKKyAgLURTRUxFQ1RfSAorCisgICB0byB0aGUg Q0ZMQUdTIHRvIHRlbGwgQy1LZXJtaXQgdG8gI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4uIEEgZ29v ZAorICAgaW5kaWNhdGlvbiB0aGF0IHlvdSBuZWVkIHRvIGRvIHRoaXMgd291bGQgYmUgaWYgeW91 IGdldCBjb21waWxlLXRpbWUKKyAgIGNvbXBsYWludHMgYWJvdXQgImZkX3NldCIgb3IgIkZEX1NF VCIgbm90IGJlaW5nIGRlY2xhcmVkIG9yIGRlZmluZWQuCisKKyAgIEluIFVOSVgsIHRoZSB1c2Ug b2Ygc2VsZWN0KCkgdnMgZm9yaygpIGluIHRoZSBDT05ORUNUIGNvbW1hbmQgaXMKKyAgIGluZGVw ZW5kZW50IG9mIHRoZSBhYm92ZSBjb25zaWRlcmF0aW9ucywgYW5kIGlzIGdvdmVybmVkIGJ5IGNo b29zaW5nIGEKKyAgIHBhcnRpY3VsYXIgbWFrZWZpbGUgdGFyZ2V0LgorCisgICBBcyBvZiBDLUtl cm1pdCA3LjAsIHNlbGVjdCgpIGlzIGFsc28gdGhlIHByZWZlcnJlZCBjb250cm9sIG1lY2hhbmlz bQorICAgZm9yIHRoZSBDT05ORUNUIGNvbW1hbmQuIFVuZm9ydHVuYXRlbHksIHRoZSBzdHJ1Y3R1 cmVzIHVzZWQgYnkgdGhlCisgICBvcmlnaW5hbCBVTklYIENPTk5FQ1QgY29tbWFuZCwgYmFzZWQg b24gZm9yaygpLCBhbmQgdGhvc2UgdXNlZCBieQorICAgc2VsZWN0KCksIGFyZSBzbyBkaWZmZXJl bnQsIGl0IHdhcyBub3QgcHJhY3RpY2FsIHRvIGltcGxlbWVudCB0aGVtIGJvdGgKKyAgIGluIG9u ZSBtb2R1bGUuIFNvIHRoZSBzZWxlY3QoKS1iYXNlZCBDT05ORUNUIGNvbW1hbmQgbW9kdWxlIGZv ciBVTklYIGlzCisgICBbMTQ2XWNrdWNucy5jLCBhbmQgdGhlIGZvcmstYmFzZWQgb25lIHJlbWFp bnMgWzE0N11ja3Vjb24uYy4gVG8gY2hvb3NlCisgICB0aGUgZm9yay1iYXNlZCBvbmUsIHdoaWNo IGlzIG1vcmUgcG9ydGFibGUgKGJ1dCBzbG93ZXIgYW5kIG1vcmUKKyAgIGZyYWdpbGUpLCB1c2Ug Indlcm1pdCIgYXMgdGhlIG1ha2UgdGFyZ2V0LiBUbyBjaG9vc2UgdGhlIHNlbGVjdC1iYXNlZAor ICAgb25lLCB1c2UgInhlcm1pdCIuIE9ubHkgZG8gdGhpcyBpZiB5b3UgY2FuIHZlcmlmeSB0aGF0 IHRoZSBDT05ORUNUCisgICBjb21tYW5kIHdvcmtzIG9uIHNlcmlhbCBjb25uZWN0aW9ucyBhbmQg UElQRSBjb25uZWN0aW9ucyBhcyB3ZWxsIGFzIFRDUAorICAgY29ubmVjdGlvbnMuCisKKyAgICAg VGhlIHNlbGVjdCgpLWJhc2VkIFVuaXggQ09OTkVDVCBtb2R1bGUsIGNrdWNucy5jLCBtdXN0IGJl IHVzZWQgaWYKKyAgICAgZW5jcnlwdGlvbiBpcyB0byBiZSBkb25lLCBzaW5jZSB0aGUgZm9yaygp IHZlcnNpb24gKGNrdWNvbi5jKSBsb3NlcworICAgICBpdHMgYWJpbGl0eSB0byBzaGFyZSB2aXRh bCBzdGF0ZSBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSB0d28gZm9ya3MuCisgICAgIEFsc28gbm90 ZSB0aGF0IHRoZSBzZWxlY3QoKSB2ZXJzaW9uIGlzIHN1cGVyaW9yIGluIG1hbnkgb3RoZXIgd2F5 cworICAgICB0b28uIEZvciBleGFtcGxlLCBpdCByZWNvdmVycyBiZXR0ZXIgZnJvbSBleHRlcmlv ciBraWxsaW5nLCBmb3JjZWQKKyAgICAgZGlzY29ubmVjdGlvbnMsIGV0YywgcGx1cyBpdCBnb2Vz IGZhc3Rlci4KKworICAgU0hPVyBWRVJTSU9OUyB0ZWxscyB3aGV0aGVyIHRoZSBDT05ORUNUIG1v ZHVsZSB1c2VzIGZvcmsoKSBvciBzZWxlY3QoKS4KKworICAgQy1LZXJtaXQgOC4wIGFkZHMgbGVh cm5lZCBzY3JpcHQgY2FwYWJpbGl0eSwgd2hpY2ggZGVwZW5kcyBvbiBzZWxlY3QoKS4KKyAgIEFs bCB0aGUgIndlcm1pdCIgYmFzZWQgdGFyZ2V0cyAoYXMgb3Bwb3NlZCB0byAieGVybWl0IikgaGFk IE5PTEVBUk4KKyAgIGFkZGVkIHRvIHRoZW0uIFdoZW5ldmVyIGNoYW5naW5nIGEgdGFyZ2V0IG92 ZXIgZnJvbSB3ZXJtaXQgdG8geGVybWl0LAorICAgYWxzbyByZW1lbWJlciB0byByZW1vdmUgTk9M RUFSTi4KKworICAgWyBbMTQ4XUMtS2VybWl0IEhvbWUgXSBbIFsxNDldS2VybWl0IEhvbWUgXQor CisgIDEyLiBJL08gUkVESVJFQ1RJT04KKworICAgWyBbMTUwXVRvcCBdIFsgWzE1MV1Db250ZW50 cyBdIFsgWzE1Ml1OZXh0IF0gWyBbMTUzXVByZXZpb3VzIF0KKworICAgVGhlIFJFRElSRUNUIGNv bW1hbmQgYWxsb3dzIGEgbG9jYWwgcHJvZ3JhbSB0byBiZSBydW4gd2l0aCBpdHMgaS9vCisgICBy ZWRpcmVjdGVkIG92ZXIgdGhlIGNvbW11bmljYXRpb25zIGNvbm5lY3Rpb24uIFlvdXIgdmVyc2lv biBvZiBDLUtlcm1pdAorICAgaGFzIGEgUkVESVJFQ1QgY29tbWFuZCBpZiBpdCB3YXMgYnVpbHQg d2l0aCB0aGUgZm9sbG93aW5nIENGTEFHOgorCisgIC1EQ0tfUkVESVIKKworICAgVGhpcywgaW4g dHVybiwgaXMgcG9zc2libGUgb25seSBpZiB0aGUgdW5kZXJseWluZyBBUEkgaXMgdGhlcmUuIElu IHRoZQorICAgY2FzZSBvZiBVTklYIHRoaXMgaXMganVzdCB0aGUgd2FpdCgpIHN5c3RlbSBjYWxs LCBzbyBhbGwgVU5JWCB2ZXJzaW9ucworICAgZ2V0IHRoaXMgZmVhdHVyZSBhcyBvZiA2LjAuMTky IChlYXJsaWVyIHZlcnNpb25zIG5lZWRlZCBhIDxzeXMvd2FpdC5oPgorICAgaGVhZGVyIGZpbGUg ZGVmaW5pbmcgdGhlIHN5bWJvbHMgV0lGRVhJVEVEIGFuZCBXRVhJVFNUQVRVUykuCisKKyAgIEFz IG9mIHZlcnNpb24gNy4wLCBmaWxlIHRyYW5zZmVyIGNhbiBiZSBkb25lIHVzaW5nIHBpcGVzIGFu ZCBmaWx0ZXJzLgorICAgVG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwgI2RlZmluZSBQSVBFU0VORCAo YW5kIGZpbGwgaW4gdGhlIGNvZGUpLiBUbworICAgZGlzYWJsZSBvbiBzeXN0ZW1zIHdoZXJlIGl0 IGlzIG5vcm1hbGx5IGVuYWJsZWQsIGRlZmluZSBOT1BJUEVTRU5ELgorICAgVGhpcyBmZWF0dXJl IGlzLCBvZiBjb3Vyc2UsIGFsc28gZGlzYWJsZWQgYnkgYnVpbGRpbmcgd2l0aCBOT1BVU0ggKG9y CisgICBnaXZpbmcgdGhlICJub3B1c2giIGNvbW1hbmQgYXQgcnVudGltZSkuCisKKyAgIEMtS2Vy bWl0IDcuMCBhbHNvIGFkZHMgdGhlIFBJUEUgYW5kIFNFVCBIT1NUIC9DT01NQU5EIGNvbW1hbmRz LCB3aGljaAorICAgcHJvdmlkZSBhbm90aGVyIGZvcm0gb2YgcmVkaXJlY3Rpb24uIFRoaXMgZmVh dHVyZSBpcyBzZWxlY3RlZCB3aXRoCisgICAtRE5FVENNRC4gQ0tfUkRJUiBtdXN0IGFsc28gYmUg ZGVmaW5lZCwgc2luY2UgdGhlIHNhbWUgbWVjaGFuaXNtcyBhcmUKKyAgIHVzZWQgaW50ZXJuYWxs eS4KKworICAgWyBbMTU0XUMtS2VybWl0IEhvbWUgXSBbIFsxNTVdS2VybWl0IEhvbWUgXQorCisg IDEzLiBGTE9BVElORy1QT0lOVCBOVU1CRVJTLCBUSU1FUlMsIEFORCBBUklUSE1FVElDCisKKyAg IFsgWzE1Nl1Ub3AgXSBbIFsxNTddQ29udGVudHMgXSBbIFsxNThdTmV4dCBdIFsgWzE1OV1QcmV2 aW91cyBdCisKKyAgIEZsb2F0aW5nLXBvaW50IHN1cHBvcnQgd2FzIGFkZGVkIGluIEMtS2VybWl0 IDcuMC4KKworICAgRmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgZW5hYmxlZCBpbnRlcm5hbGx5 LCBhdCBsZWFzdCBmb3IgdXNlIGluCisgICBoaWdoLXByZWNpc2lvbiBmaWxlLXRyYW5zZmVyIHRp bWVycyBhbmQgc3RhdGlzdGljcywgdW5sZXNzIHRoZQorICAgZm9sbG93aW5nIHN5bWJvbCBpcyBk ZWZpbmVkIGF0IGNvbXBpbGUgdGltZToKKworICAtRE5PRkxPQVQKKworICAgVGhpcyBtaWdodCBi ZSBuZWNlc3Nhcnkgb24gb2xkIFBDcyB0aGF0IGRvIG5vdCBoYXZlIGJ1aWx0LWluCisgICBmbG9h dGluZy1wb2ludCBoYXJkd2FyZS4KKworICAgV2hlbiBOT0ZMT0FUIGlzIG5vdCBkZWZpbmVkLCB0 aGUgZm9sbG93aW5nIHN5bWJvbCB0ZWxscyB3aGljaAorICAgZmxvYXRpbmctcG9pbnQgdHlwZSB0 byB1c2U6CisKKyAgLURDS0ZMT0FUPXh4eHgKKworICAgVGhlIHZhbHVlIGlzIGVpdGhlciAiZG91 YmxlIiAobm9ybWFsIGZvciAzMi0gYW5kIDE2LWJpdCBhcmNoaXRlY3R1cmVzKQorICAgb3IgImZs b2F0IiAobm9ybWFsIGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcykuCisKKyAgIEMtS2VybWl0IGNh biBiZSBjb25maWd1cmVkIHRvIHVzZSBoaWdoLXByZWNpc2lvbiBmaWxlLXRyYW5zZmVyIHRpbWVy cworICAgZm9yIG1vcmUgYWNjdXJhdGUgc3RhdGlzdGljcy4gVGhpcyBmZWF0dXJlIGlzIGVuYWJs ZWQgd2l0aDoKKworICAtREdGVElNRVIKKworICAgYW5kIGRpc2FibGVkIHdpdGg6CisKKyAgLURO T0dGVElNRVIKKworICAgSWYgeW91IHRyeSB0byBidWlsZCB3aXRoIC1ER0ZUSU1FUiBidXQgeW91 IGdldCBjb21waWxhdGlvbiBlcnJvcnMsCisgICBlaXRoZXIgZml4IHRoZW0gKGFuZCBzZW5kIGVt YWlsIHRvIGtlcm1pdEBjb2x1bWJpYS5lZHUgdGVsbGluZyB3aGF0IHlvdQorICAgZGlkKSwgb3Ig ZWxzZSBnaXZlIHVwIGFuZCB1c2UgLUROT0dGVElNRVIgKG9yIC1ETk9GTE9BVCkgaW5zdGVhZC4g SGludDoKKyAgIGRlcGVuZGluZyBvbiB5b3VyIG1hY2hpbmUgYXJjaGl0ZWN0dXJlLCB5b3UgbWln aHQgaGF2ZSBiZXR0ZXIgbHVjaworICAgdXNpbmcgZG91YmxlIHRoYW4gZmxvYXQgYXMgdGhlIGRh dGEgdHlwZSBmb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVycywgb3IKKyAgIHZpY2UgdmVyc2EuIExv b2sgaW4gWzE2MF1ja2NkZWIuaCBmb3IgdGhlIENLRkxPQVQgZGVmaW5pdGlvbi4KKworICAgRmxv YXRpbmctcG9pbnQgYXJpdGhtZXRpYyBpcyBhbHNvIHN1cHBvcnRlZCBpbiB0aGUgc2NyaXB0IHBy b2dyYW1taW5nCisgICBsYW5ndWFnZS4gRmlyc3QgdmlhIHRoZSBcZnBwLi4uKCkgZnVuY3Rpb25z LCBzdWNoIGFzIFxmcHBhZGQoKSwgd2hpY2gKKyAgIGFkZHMgdHdvIGZsb2F0aW5nLXBvaW50IG51 bWJlcnMsIHNlY29uZCBpbiBTLUV4cHJlc3Npb25zLiBBZGRpdGlvbiwKKyAgIHN1YnRyYWN0aW9u LCBtdWx0aXBsaWNhdGlvbiwgYW5kIGRpdmlzaW9uIGFyZSBhbHdheXMgYXZhaWxhYmxlLiBCdXQK KyAgIG90aGVyIGZ1bmN0aW9ucyBzdWNoIGFzIGxvZ3MsIHJhaXNpbmcgdG8gcG93ZXJzLCBzaW5l cyBhbmQgY29zaW5lcywKKyAgIGV0YywgcmVxdWlyZSB0aGUgQyBNYXRoIGxpYnJhcnkuIFRvIGlu Y2x1ZGUgdXNlci1sZXZlbCBmbG9hdGluZy1wb2ludAorICAgbWF0aCB5b3UgbXVzdCBwdXQ6CisK KyAgLURGTkZMT0FUCisKKyAgIGFuZCBpbiBVbml4IHlvdSBtdXN0IGxpbmsgd2l0aCB0aGUgTWF0 aCBsaWJyYXJ5OgorCisgIExJQlM9Ii4uLi4gLWxtIgorCisgICBJbiBLOTUgYW5kIFZNUywgRk5G TE9BVCBpcyBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgaWYgQ0tGTE9BVCBpcyBkZWZpbmVkLgorICAg SW4gVW5peCwgaG93ZXZlciwgRk5GTE9BVCBtdXN0IGJlIGFkZGVkIHRvIGVhY2ggbWFrZWZpbGUg dGFyZ2V0CisgICBpbmRpdmlkdWFsbHksIGJlY2F1c2Ugb2YgdGhlIHNwZWNpYWwgbGlua2luZyBp bnN0cnVjdGlvbnMgdGhhdCBtdXN0CisgICBhbHNvIGJlIGFkZGVkIHRvIGVhY2ggdGFyZ2V0Lgor CisgICBOb3RlOiBTLUV4cHJlc3Npb25zIHJlcXVpcmUgRk5GTE9BVC4KKworICAgWyBbMTYxXUMt S2VybWl0IEhvbWUgXSBbIFsxNjJdS2VybWl0IEhvbWUgXQorCisgIDE0LiBTUEVDSUFMIENPTkZJ R1VSQVRJT05TCisKKyAgIFsgWzE2M11Ub3AgXSBbIFsxNjRdQ29udGVudHMgXSBbIFsxNjVdUHJl dmlvdXMgXQorCisgICBBcyBvZiBDLUtlcm1pdCA3LjAsIGlmIHlvdSBidWlsZCBDLUtlcm1pdCBu b3JtYWxseSwgYnV0IHdpdGggLUROT0lDUAorICAgKE5vIEludGVyYWN0aXZlIENvbW1hbmQgUGFy c2VyKSwgeW91IGdldCBhIHByb2dyYW0gY2FwYWJsZSBvZiBtYWtpbmcKKyAgIHNlcmlhbCBjb25u ZWN0aW9ucyAoYnV0IG5vdCBkaWFsaW5nKSBhbmQgbmV0d29yayBjb25uZWN0aW9ucyAoaWYKKyAg IFRDUFNPQ0tFVCBvciBvdGhlciBuZXR3b3JrIG9wdGlvbiBpbmNsdWRlZCksIGFuZCBjYW4gYWxz byB0cmFuc2ZlcgorICAgZmlsZXMgdXNpbmcgS2VybWl0IHByb3RvY29sLCBidXQgb25seSB2aWEg YXV0b2Rvd25sb2FkL3VwbG9hZC4KKyAgIEZ1cnRoZXJtb3JlLCBpZiB5b3UgY2FsbCB0aGUgZXhl Y3V0YWJsZSAidGVsbmV0IiwgaXQgd2lsbCBhY3QgbGlrZQorICAgVGVsbmV0IC0tIHVzaW5nIHRo ZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gSG93ZXZlciwgaW4gdGhpcyBjYXNlIHRoZXJlCisgICBp cyBub3RoaW5nIHRvIGVzY2FwZSBiYWNrIHRvLCBzbyBpZiB5b3UgdHlwZSBDdHJsLVxjLCBpdCBq dXN0IHByaW50cyBhCisgICBtZXNzYWdlIHRvIHRoaXMgZWZmZWN0LgorCisgICBZb3UgY2FuIGFs c28gYnVpbGQgQy1LZXJtaXQgd2l0aCAtRE5PWEZFUiwgbWVhbmluZyBvbWl0IGFsbCB0aGUKKyAg IGZpbGUtdHJhbnNmZXIgZmVhdHVyZXMuIFRoaXMgbGVhdmVzIHlvdSB3aXRoIGEgc2NyaXB0YWJs ZQorICAgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbSB0aGF0IGlzIGNvbnNpZGVyYWJseSBzbWFsbGVy IHRoYW4gdGhlIGZ1bGwKKyAgIEMtS2VybWl0LgorCisgICBbIFsxNjZdQy1LZXJtaXQgSG9tZSBd IFsgWzE2N11LZXJtaXQgSG9tZSBdCisKKyAgQVBQRU5ESVggSTogU1VNTUFSWSBPRiBDT01QSUxF LVRJTUUgT1BUSU9OUworCisgICBbIFsxNjhdVG9wIF0gWyBbMTY5XUNvbnRlbnRzIF0KKworICAg VGhlc2UgYXJlIHRoZSBzeW1ib2xzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgY2MgY29t bWFuZCBsaW5lLAorICAgbGlzdGVkIGFscGhhYmV0aWNhbGx5LiBPdGhlcnMgYXJlIHVzZWQgaW50 ZXJuYWxseSwgaW5jbHVkaW5nIHRob3NlCisgICB0YWtlbiBmcm9tIGhlYWRlciBmaWxlcywgdGhv c2UgZGVmaW5lZCBieSB0aGUgY29tcGlsZXIgaXRzZWxmLCBhbmQKKyAgIHRob3NlIGluZmVycmVk IGZyb20gdGhlIG9uZXMgZ2l2ZW4gYmVsb3cuIEtlcm1pdCdzIFNIT1cgVkVSU0lPTlMKKyAgIGNv bW1hbmQgYXR0ZW1wdHMgdG8gZGlzcGxheSBtb3N0IG9mIHRoZXNlLiBTZWUgWzE3MF1ja2NkZWIu aCBhbmQKKyAgIFsxNzFdY2tjbmV0LmggZm9yIGluZmVyZW5jZSBydWxlcy4gRm9yIGV4YW1wbGUg U1ZSMyBpbXBsaWVzIEFUVFNWLAorICAgTVVMVElORVQgaW1wbGllcyBUQ1BTT0NLRVQsIGFuZCBz byBvbi4KKworICAgSGVyZSBpcyB0aGUgY29tcGxldGUgbGlzdCBvZiB0aGUgS2VybWl0LXNwZWNp ZmljIGNvbXBpbGUtdGltZSBzd2l0Y2hlczoKKworICAgQUNVQ05UUkwgU2VsZWN0IEJTRCA0LjMt c3R5bGUgYWN1Y250cmwoKSBiaWRpcmVjdGlvbmFsIHR0eSBjb250cm9sLgorICAgYWVnaXMgQnVp bGQgZm9yIEFwb2xsbyBBZWdpcyAocHJlZGVmaW5lZCBvbiBBcG9sbG8gc3lzdGVtcykuCisgICBB SVgzNzAgQnVpbGQgZm9yIElCTSBBSVgvMzcwIGZvciBJQk0gbWFpbmZyYW1lcy4KKyAgIEFJWEVT QSBCdWlsZCBmb3IgSUJNIEFJWC9FU0EgZm9yIElCTSBtYWluZnJhbWVzLgorICAgQUlYUFMyIEJ1 aWxkIGZvciBJQk0gQUlYIDMuMCBmb3IgUFMvMiBzZXJpZXMgKG5ldmVyIGZvcm1hbGx5IHJlbGVh c2VkKS4KKyAgIEFJWFJTIEJ1aWxkIGZvciBJQk0gQUlYIDMueCBvbiBSUy82MDAwLgorICAgQUlY NDEgQnVpbGQgZm9yIElCTSBBSVggNC54IG9uIFJTLzYwMDAuCisgICBBTUlHQSBCdWlsZCBmb3Ig Q29tbW9kb3JlIEFtaWdhIHdpdGggSW50dWl0aW9uIE9TLgorICAgQVRUNjMwMCBCdWlsZCBmb3Ig QVQmVCA2MzAwIFBMVVMuCisgICBBVFQ3MzAwIEJ1aWxkIGZvciBBVCZUIDczMDAgVU5JWCBQQyAo M0IxKS4KKyAgIEFUVFNWIEJ1aWxkIGZvciBBVCZUIFN5c3RlbSBJSUkgb3IgViBVTklYLgorICAg QVVYIEJ1aWxkIGZvciBBcHBsZSBBL1VYIGZvciB0aGUgTWFjaW50b3NoLgorICAgQklHQlVGT0sg T0sgdG8gdXNlIGJpZyBidWZmZXJzIC0gIm1lbW9yeSBpcyBub3QgYSBwcm9ibGVtIgorICAgQlBT X3h4eHggRW5hYmxlIFNFVCBTUEVFRCB4eHh4CisgICBCU0QyOSBCdWlsZCBmb3IgQlNEIDIuOSBv ciAyLjEwLgorICAgQlNENCBCdWlsZCBmb3IgQlNEIDQuMi4KKyAgIEJTRDQxIEJ1aWxkIGZvciBC U0QgNC4xLgorICAgQlNENDMgQnVpbGQgZm9yIEJTRCA0LjMuCisgICBCU0Q0NCBCdWlsZCBmb3Ig QlNEIDQuNC4KKyAgIEM3MCBCdWlsZCBmb3IgQkJOIEMvNzAuCisgICBDSUUgQnVpbGQgZm9yIENJ RSBTeXN0ZW1zIDY4MC8yMC4KKyAgIENLQ09OSU5UQjRDQiBXb3JrIGFyb3VuZCBwcm9tcHQtZGlz YXBwZWFycyBhZnRlciBlc2NhcGUgYmFjayBmcm9tCisgICBDT05ORUNULgorICAgQ0tMRUFSTiBC dWlsZCB3aXRoIHN1cHBvcnQgZm9yIGxlYXJuZWQgc2NyaXB0cy4KKyAgIENLTE9HRElBTCBFbmFi bGUgY29ubmVjdGlvbiBsb2cuCisgICBDS01BWFBBVEggTWF4aW11bSBsZW5ndGggZm9yIGEgZnVs bHkgcXVhbGlmaWVkIGZpbGVuYW1lLgorICAgQ0tSRUdFWCAobWlzbm9tZXIpIEluY2x1ZGUgWy4u Ll0gb3Ige3h4eCx4eHgseHh4fSBtYXRjaGluZyBpbgorICAgY2ttYXRjaCgpLgorICAgQ0tTWVNM T0cgRW5hYmxlIHN5c2xvZ2dpbmcuCisgICBDS19BTlNJQyBFbmFibGUgQU5TSSBDIGNvbnN0cnVj dHMgLSBwcm90b3R5cGVzLCBldGMuCisgICBDS19BTlNJTElCUyBVc2UgaGVhZGVyIGZpbGVzIGZv ciBBTlNJIEMgbGlicmFyaWVzLgorICAgQ0tfQVBDIEVuYWJsZSBBUEMgZXhlY3V0aW9uIGJ5IENP Tk5FQ1QgbW9kdWxlLgorICAgQ0tfQ1VSU0VTIEVuYWJsZSBmdWxsc2NyZWVuIGZpbGUgdHJhbnNm ZXIgZGlzcGxheS4KKyAgIENLX0RTWVNJTkkgVXNlIHN5c3RlbS13aWRlIGluaXQgZmlsZSwgd2l0 aCBuYW1lIHN1cHBsaWVkIGJ5IEtlcm1pdC4KKyAgIENLX0RUUkNEIERUUi9DRCBmbG93IGNvbnRy b2wgaXMgYXZhaWxhYmxlLgorICAgQ0tfRkFTVCBCdWlsZCB3aXRoIGZhc3QgS2VybWl0IHByb3Rv Y29sIGRlZmF1bHRzLgorICAgQ0tfRk9SS19TSUcgVU5JWCBvbmx5OiBzaWduYWwoKSBudW1iZXIg Zm9yIENPTk5FQ1QgbW9kdWxlIGZvcmtzLgorICAgQ0tfSUZSTyBJRiBSRU1PVEUgY29tbWFuZCBp cyBhdmFpbGFibGUgKGFuZCBjYW4gcnVuIGluIHJlbW90ZSBtb2RlKS4KKyAgIENLX0lOSV9BIFN5 c3RlbS13aWRlIGluaXQgZmlsZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdXNlcidzLgorICAgQ0tf SU5JX0IgVXNlcidzIGluaXQgZmlsZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIHN5c3RlbS13 aWRlIG9uZS4KKyAgIENLX0xBQkVMRUQgSW5jbHVkZSBzdXBwb3J0IGZvciBTRVQgRklMRSBUWVBF IExBQkVMRUQuCisgICBDS19MQlJLIFRoaXMgdmVyc2lvbiBjYW4gc2VuZCBMb25nIEJSRUFLLgor ICAgQ0tfTElOR0VSIEFkZCBjb2RlIHRvIHR1cm4gb2YgVENQIHNvY2tldCAibGluZ2VyIiBwYXJh bWV0ZXIuCisgICBDS19NS0RJUiBUaGlzIHZlcnNpb24gaGFzIGEgem1rZGlyKCkgY29tbWFuZCB0 byBjcmVhdGUgZGlyZWN0b3JpZXMuCisgICBDS19OQVdTIEluY2x1ZGUgVEVMTkVUIE5lZ290aWF0 ZSBBYm91dCBXaW5kb3cgU2l6ZSBzdXBwb3J0LgorICAgQ0tfTkVXVEVSTSBVc2UgbmV3dGVybSgp IHJhdGhlciB0aGFuIGluaXRzY3IoKSB0byBpbml0aWFsaXplIGN1cnNlcy4KKyAgIENLX1BBTSBJ bmNsdWRlIFBBTSBhdXRoZW50aWNhdGlvbiAobWlnaHQgYWxzbyByZXF1aXJlIC1scGFtKS4KKyAg IENLX1BDVF9CQVIgRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgc2hvdWxkIGluY2x1 ZGUKKyAgICJ0aGVybW9tZXRlciIuCisgICBDS19QT0xMIFN5c3RlbS1WIG9yIFBPU0lYIGJhc2Vk IFVOSVggaGFzIHBvbGwoKSBmdW5jdGlvbi4KKyAgIENLX1BPU0lYX1NJRyBVc2UgUE9TSVggc2ln bmFsIGhhbmRpbmc6IHNpZ2ptcF9idWYsIHNpZ3NldGptcCwKKyAgIHNpZ2xvbmdqbXAuCisgICBD S19SRUFEMCByZWFkKGZkLCZ4LDApIGNhbiBiZSB1c2VkIHRvIHRlc3QgVENQL0lQIGNvbm5lY3Rp b25zLgorICAgQ0tfUkVESVIgRW5hYmxlIHRoZSBSRURJUkVDVCBjb21tYW5kLgorICAgQ0tfUkVT RU5EIEluY2x1ZGUgdGhlIFJFU0VORCBjb21tYW5kIChuZWVkcyB6ZnNlZWsoKSArIGFwcGVuZCku CisgICBDS19SVFNDVFMgUlRTL0NUUyBmbG93IGNvbnRyb2wgaXMgYXZhaWxhYmxlLgorICAgQ0tf U0hBRE9XIEluY2x1ZGUgc3VwcG9ydCBmb3Igc2hhZG93IHBhc3N3b3JkcyAoZS5nLiBmb3IgSUtT RAorICAgYXV0aGVudGljYXRpb24pLgorICAgQ0tfU09DS0JVRiBFbmFibGUgVENQIHNvY2tldC1i dWZmZXItc2l6ZS1pbmNyZWFzaW5nIGNvZGUuCisgICBDS19TT0NLUyBVTklYIG9ubHk6IEJ1aWxk IHdpdGggc29ja3MgbGlicmFyeSByYXRoZXIgdGhhbiByZWd1bGFyCisgICBzb2NrZXRzCisgICBD S19TT0NLUzUgVU5JWCBvbmx5OiBCdWlsZCB3aXRoIHNvY2tzIDUgbGliIHJhdGhlciB0aGFuIHJl Z3VsYXIgc29ja2V0cworICAgQ0tfU1BFRUQgRW5hYmxlIGNvbnRyb2wtY2hhcmFjdGVyIHVucHJl Zml4aW5nLgorICAgQ0tfU1lTSU5JPSJ4eHh4eCIgUXVvdGVkIHN0cmluZyB0byBiZSB1c2VkIGFz IHN5c3RlbS13aWRlIGluaXQgZmlsZQorICAgbmFtZS4KKyAgIENLX1RJTUVSUyBCdWlsZCB3aXRo IHN1cHBvcnQgZm9yIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQgcGFja2V0CisgICB0aW1lb3V0cy4K KyAgIENLX1RNUERJUiBUaGlzIHZlcnNpb24gb2YgS2VybWl0IGhhcyBhbiBpc2RpcigpIGZ1bmN0 aW9uLgorICAgQ0tfVFRZRkQgRGVmaW5lZCBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBjb21tdW5pY2F0 aW9ucyBjb25uZWN0aW9uIGZpbGUKKyAgIGRlc2NyaXB0b3IgKHR0eWZkKSBjYW4gYmUgcGFzc2Vk IHRvIG90aGVyIHByb2Nlc3NlcyBhcyBhIGNvbW1hbmQtbGluZQorICAgYXJndW1lbnQgdmlhIFx2 KHR0eWZkKS4KKyAgIENLX1VSTCBQYXJzZSBVUkxzIGFzIHdlbGwgYXMgaG9zdG5hbWVzLCBldGMu CisgICBDS19YT05YT0ZGIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCBhdmFpbGFibGUuCisgICBDS19Y WVogSW5jbHVkZSBzdXBwb3J0IGZvciBYWVpNT0RFTSBwcm90b2NvbHMuCisgICBDS19XUkVGUkVT SCBDdXJzZXMgcGFja2FnZSBpbmNsdWRlcyB3cmVmcmVzaCgpLGNsZWFyb2soKSBmb3Igc2NyZWVu CisgICByZWZyZXNoLgorICAgQ0tGTE9BVD10eXBlIEZsb2F0aW5nLXBvaW50IGRhdGEgdHlwZSwg ImRvdWJsZSIgb3IgImZsb2F0Ii4KKyAgIENLVFlQX0g9eHh4IEZvcmNlIGluY2x1ZGUgb2YgeHh4 IGFzIDx0eXBlcy5oPiBmaWxlLgorICAgQ0xTT1BOIFdoZW4gaGFuZ2luZyB1cCBhIHR0eSBkZXZp Y2UsIGFsc28gY2xvc2UgYW5kIHJlb3BlbiBpdC4KKyAgIENNRERFUCBNYXhpbXVtIHJlY3Vyc2lv biBkZXB0aCBmb3Igc2VsZi1yZWZlcmVudGlhbCB1c2VyLWRlZmluZWQgZm4ncy4KKyAgIENPSEVS RU5UIEJ1aWxkIGZvciBNYXJrIFdpbGxpYW1zIENvaGVyZW50IFVOSVgKKyAgIENPTkdTUEQgRGVm aW5lIGlmIHRoaXMgdmVyc2lvbiBoYXMgY29uZ3NwZCgpIHJvdXRpbmUgaW4gY2s/dGlvLmMKKyAg IGRhdGFnZW5lcmFsIEJ1aWxkIGZvciBEYXRhIEdlbmVyYWwgQU9TL1ZTIG9yIEFPUy9WUyBJSQor ICAgRENMUE9QRU4gcG9wZW4oKSBpcyBhdmFpbGFibGUgYnV0IG5lZWRzIHRvIGJlIGRlY2xhcmVk CisgICBERUNfVENQSVAgQnVpbGQgd2l0aCBzdXBwb3J0IGZvciBERUMgVENQL0lQIChVQ1gpIGZv ciAoT3BlbilWTVMKKyAgIERHVVg0MzAgQnVpbGQgZm9yIERHL1VYIDQuMzAKKyAgIERHVVg1NDAg QnVpbGQgZm9yIERHL1VYIDUuNDAKKyAgIERFRlBBUj14IERlZmF1bHQgcGFyaXR5LCAwLCAnZScs ICdvJywgJ20nLCBvciAncycuCisgICBERlRUWT14eHggRGVmYXVsdCBjb21tdW5pY2F0aW9ucyBk ZXZpY2UgbmFtZS4KKyAgIERJUkVOVCBVTklYIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gYmUgdGFr ZW4gZnJvbSA8ZGlyZW50Lmg+LgorICAgRElSUFdEUlAgUHJvbXB0IGZvciBwYXNzd29yZCBpbiBS RU1PVEUgQ1dEIGNvbW1hbmQuCisgICBEVElMREUgSW5jbHVkZSBVTklYIH4gbm90YXRpb24gZm9y IHVzZXJuYW1lL2hvbWUtZGlyZWN0b3J5CisgICBEWU5BTUlDIEFsbG9jYXRlIGZpbGUgdHJhbnNm ZXIgcGFja2V0IGJ1ZmZlcnMgZHluYW1pY2FsbHkgd2l0aCBtYWxsb2MuCisgICBFTkNPUkUgQnVp bGQgZm9yIEVuY29yZSBNdWx0aW1heCBjb21wdXRlcnMuCisgICBFWENFTEFOIEJ1aWxkIHdpdGgg ZXhjZWxhbiBUQ1AvSVAuCisgICBGTkZMT0FUIEluY2x1ZGUgZmxvYXRpbmctcG9pbnQgbWF0aCBm dW5jdGlvbnMgKGxvZ3MsIHNpbiwgY29zLCBleHAsCisgICBldGMpCisgICBGVDE4IEJ1aWxkIGZv ciBGb3J0dW5lIEZvcjpQcm8gMS44LgorICAgRlQyMSBCdWlsZCBmb3IgRm9ydHVuZSBGb3I6UHJv IDIuMS4KKyAgIEdFTURPUyBCdWlsZCBmb3IgQXRhcmkgU1QgR0VNRE9TLgorICAgR0ZUSU1FUiBV c2UgaGlnaC1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZmlsZS10cmFuc2ZlciB0aW1lcnMuCisg ICBHSURfVD14eHggR3JvdXAgSURzIGFyZSBvZiB0eXBlIHh4eCAodXN1YWxseSBpbnQsIHNob3J0 LCBvciBnaWRfdCkuCisgICBIQUREUkxJU1QgSWYgZ2V0aG9zdGJ5bmFtZSgpIGhvc3RlbnQgc3Ry dWN0IGNvbnRhaW5zIGEgbGlzdCBvZgorICAgYWRkcmVzc2VzLgorICAgSERCVVVDUCBCdWlsZCB3 aXRoIHN1cHBvcnQgZm9yIEhvbmV5IERhbkJlciBVVUNQLgorICAgSFBVWCBCdWlsZCBmb3IgSGV3 bGV0dCBQYWNrYXJkIEhQLVVYLgorICAgSFBVWDkgQnVpbGQgZm9yIEhld2xldHQgUGFja2FyZCBI UC1VWCA5LnguCisgICBIUFVYMTAgQnVpbGQgZm9yIEhld2xldHQgUGFja2FyZCBIUC1VWCAxMC54 LgorICAgSFdQQVJJVFkgRGVmaW5lIGlmIHRoaXMgdmVyc2lvbiBjYW4gU0VUIFBBUklUWSBIQVJE V0FSRSB7IEVWRU4sIE9ERC4uLn0KKyAgIEkzODZJWCBCdWlsZCBmb3IgSW50ZXJhY3RpdmUgU3lz dGVtIFYgUjMuCisgICBJRkRFQlVHIEFkZCBJRiBzdG10cyAiaWYgKGRlYmxvZykiIGJlZm9yZSAi ZGVidWcoKSIgY2FsbHMuCisgICBJTkFERFJYIFRDUC9JUCBpbmV0X2FkZHIoKSB0eXBlIGlzIHN0 cnVjdCBpbmFkZHIsIG5vdCB1bnNpZ25lZCBsb25nLgorICAgSU5URVJMQU4gQnVpbGQgd2l0aCBz dXBwb3J0IGZvciBSYWNhbC9JbnRlcmxhbiBUQ1AvSVAuCisgICBJU0RJUkJVRyBTeXN0ZW0gZGVm cyBvZiBTX0lTRElSIGFuZCBTX0lTUkVHIGhhdmUgYnVnLCBkZWZpbmUgb3Vyc2VsdmVzLgorICAg SVNJSUkgQnVpbGQgZm9yIEludGVyYWN0aXZlIFN5c3RlbSBJSUkuCisgICBJWDM3MCBCdWlsZCBm b3IgSUJNIElYLzM3MC4KKyAgIEtBTkpJIEJ1aWxkIHdpdGggS2FuamkgY2hhcmFjdGVyLXNldCB0 cmFuc2xhdGlvbiBzdXBwb3J0LgorICAgTENLRElSIFVVQ1AgbG9jayBkaXJlY3RvcnkgaXMgL3Vz ci9zcG9vbC91dWNwL0xDSy8uCisgICBMRkRFVk5PIFVVQ1AgbG9ja2ZpbGUgbmFtZSB1c2VzIGRl dmljZSBudW1iZXJzLCBhcyBpbiBTVlI0LgorICAgTElOVVhGU1NUTkQgRm9yIExpbnV4LCB1c2Ug RlNTVE5EIFVVQ1AgbG9ja2ZpbGUgY29udmVudGlvbnMgKGRlZmF1bHQpLgorICAgTE9DS19ESVI9 eHh4IFVVQ1AgbG9jayBkaXJlY3RvcnkgaXMgeHh4IChxdW90ZWQgc3RyaW5nKS4KKyAgIExPQ0tG IFVzZSBsb2NrZigpIChpbiBhZGRpdGlvbiB0byBsb2NrZmlsZXMpIG9uIHNlcmlhbCBsaW5lcwor ICAgTE9OR0ZOIEJTRCBsb25nIGZpbGVuYW1lcyBzdXBwb3J0ZWQgdXNpbmcgPGRpci5oPiBhbmQg b3BlbmRpcigpLgorICAgTFlOWE9TIEJ1aWxkIGZvciBMeW54IE9TIDIuMiBvciBsYXRlciAoUE9T SVgtYmFzZWQpLgorICAgTUFDIEJ1aWxkIGZvciBBcHBsZSBNYWNpbnRvc2ggd2l0aCBNYWMgT1Mu CisgICBNQVRDSERPVCBNYWtlIHdpbGRjYXJkcyBtYXRjaCBmaWxlbmFtZXMgdGhhdCBzdGFydCB3 aXRoIHBlcmlvZCAoLikKKyAgIE1BWFJQPW51bWJlciBNYXhpbXVtIHJlY2VpdmUtcGFja2V0IGxl bmd0aC4KKyAgIE1BWFNQPW51bWJlciBNYXhpbXVtIHNlbmQtcGFja2V0IGxlbmd0aC4KKyAgIE1E RUJVRyBNYWxsb2MtZGVidWdnaW5nIHJlcXVlc3RlZC4KKyAgIE1JTklESUFMIE1pbmltdW0gbW9k ZW0gZGlhbGVyIHN1cHBvcnQ6IENDSVRULCBIYXllcywgVW5rbm93biwgYW5kIE5vbmUuCisgICBN SU5JWCBCdWlsZCBmb3IgTUlOSVguCisgICBNSVBTIEJ1aWxkIGZvciBNSVBTIHdvcmtzdGF0aW9u LgorICAgTVVMVElORVQgQnVpbGQgd2l0aCBzdXBwb3J0IGZvciBUR1YgTXVsdGlOZXQgVENQL0lQ IChWQVgvVk1TKS4KKyAgIE1fVU5JWCBEZWZpbmVkIGJ5IFNDTy4KKyAgIE5BUCBUaGUgbmFwKCkg aXMgYXZhaWxhYmxlIChjb25mbGljdHMgd2l0aCBTRUxFQ1QgYW5kIFVTTEVFUCkKKyAgIE5BUEhB Q0sgVGhlIG5hcCgpIGNhbGwgaXMgYXZhaWxhYmxlIGJ1dCBvbmx5IGFzIHN5c2NhbGwoMzExMiwu Li4pCisgICBORElSIEJTRCBsb25nIGZpbGVuYW1lcyBzdXBwb3J0ZWQgdXNpbmcgPG5kaXIuaD4g YW5kIG9wZW5kaXIoKS4KKyAgIE5ER1BXTkFNIERvbid0IGRlY2xhcmUgZ2V0cHduYW0oKS4KKyAg IE5EU1lTRVJSTElTVCBEb24ndCBkZWNsYXJlIHN5c19lcnJsaXN0W10uCisgICBORUVEU0VMRUNU REVGUyBzZWxlY3QoKSBpcyBhdmFpbGFibGUgYnV0IHdlIG5lZWQgdG8gZGVmaW5lIEZEX2JsYWgK KyAgIG91cnNlbHZlcy4KKyAgIE5FVENNRCBCdWlsZCB3aXRoIHN1cHBvcnQgZm9yIFNFVCBIT1NU IC9DT01NQU5EIGFuZCBQSVBFIGNvbW1hbmRzLgorICAgTkVYVCBCdWlsZCBmb3IgTmVYVCBNYWNo IDEueCBvciAyLnggb3IgMy4wLCAzLjEsIG9yIDMuMi4KKyAgIE5FWFQzMyBCdWlsZCBmb3IgTmVY VCBNYWNoIDMuMy4KKyAgIE5PQU5TSSBEaXNhYmxlIEFOU0kgQyBmdW5jdGlvbiBwcm90b3R5cGlu Zy4KKyAgIE5PQVBDIERvIG5vdCBpbmNsdWRlIENLX0FQQyBjb2RlLgorICAgTk9BUlJPV0tFWVMg RXhjbHVkZSBjb2RlIHRvIHBhcnNlIEFOU0kgYXJyb3cta2V5IHNlcXVlbmNlcy4KKyAgIE5PQl94 eHh4IERpc2FibGUgU0VUIFNQRUVEIHh4eHgKKyAgIE5PQklHQlVGIE92ZXJyaWRlIEJJR0JVRk9L IHdoZW4gaXQgaXMgdGhlIGRlZmF1bHQKKyAgIE5PQlJLQyBEb24ndCB0cnkgdG8gcmVmZXIgdG8g dF9icmtjIG9yIHRfZW9mIHRjaGFycyBzdHJ1Y3R1cmUgbWVtYmVycy4KKyAgIE5PQ0tGUUhPU1RO QU1FIEV4Y2x1ZGUgY29kZSB0byBnZXQgZnVsbHkgcXVhbGlmaWVkIGhvc3RuYW1lIGluIGNhc2Ug aXQKKyAgIGNhdXNlcyBjb3JlIGR1bXBzLgorICAgTk9DQ1RSQVAgRGlzYWJsZSBDb250cm9sLUMg KFNJR0lOVCkgdHJhcHBpbmcuCisgICBOT0NLU1BFRUQgRGlzYWJsZSBjb250cm9sLXByZWZpeCBy ZW1vdmFsIGZlYXR1cmUgKFNFVCBDT05UUk9MKS4KKyAgIE5PQ0tUSU1FUlMgQnVpbGQgd2l0aG91 dCBzdXBwb3J0IGZvciBkeW5hbWljIHRpbWVycy4KKyAgIE5PQ0tYWVogT3ZlcnJpZGVzIENLX1hZ Wi4KKyAgIE5PQ0tSRUdFWCBEbyBub3QgaW5jbHVkZSBbLi4uXSBvciB7eHh4LHh4eCx4eHh9IG1h dGNoaW5nIGluIGNrbWF0Y2goKS4KKyAgIE5PQ01ETCBCdWlsZCB3aXRoIG5vIGNvbW1hbmQtbGlu ZSBvcHRpb24gcHJvY2Vzc2luZy4KKyAgIE5PQ09URk1DIE5vIENsb3NlKE9wZW4oKSkgVG8gRm9y Y2UgTW9kZSBDaGFuZ2UgKFVOSVggdmVyc2lvbikuCisgICBOT0NTRVRTIEJ1aWxkIHdpdGggbm8g c3VwcG9ydCBmb3IgY2hhcmFjdGVyIHNldCB0cmFuc2xhdGlvbi4KKyAgIE5PQ1lSSUwgQnVpbGQg d2l0aCBubyBzdXBwb3J0IGZvciBDeXJpbGxpYyBjaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uLgor ICAgTk9DWVJJTExJQyBEaXR0by4KKyAgIE5PREVCVUcgQnVpbGQgd2l0aCBubyBkZWJ1ZyBsb2dn aW5nIGNhcGFiaWxpdHkuCisgICBOT0RJQUwgQnVpbGQgd2l0aCBubyBESUFMIG9yIFNFVCBESUFM IGNvbW1hbmRzLgorICAgTk9ESVNQTyBCdWlsZCB0byBhbHdheXMgcmVmdXNlIGluY29taW5nIE1B SUwgb3IgUkVNT1RFIFBSSU5UIGZpbGVzLgorICAgRE5PRElTUExBWSBCdWlsZCB3aXRoIG5vIGZp bGUtdHJhbnNmZXIgZGlzcGxheS4KKyAgIE5PRVNDU0VRIEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBm b3IgQU5TSSBlc2NhcGUgc2VxdWVuY2UgcmVjb2duaXRpb24uCisgICBOT0ZBU1QgRG8gbm90IG1h a2UgRkFTVCBLZXJtaXQgcHJvdG9jb2wgc2V0dGluZ3MgdGhlIGRlZmF1bHQuCisgICBOT0ZEWkVS TyBEbyBub3QgdXNlIGZpbGUgZGVzY3JpcHRvciAwIGZvciByZW1vdGUtbW9kZSBmaWxlIHRyYW5z ZmVyLgorICAgTk9GSUxFSCBEbyBub3QgI2luY2x1ZGUgPHN5cy9maWxlLmg+LgorICAgTk9GTE9B VCBEb24ndCBpbmNsdWRlIGFueSBmbG9hdGluZy1wb2ludCBkYXRhIHR5cGVzIG9yIG9wZXJhdGlv bnMuCisgICBOT0ZSSUxMUyBCdWlsZCB3aXRoICJubyBmcmlsbHMiICh0aGlzIHNob3VsZCBiZSBw aGFzZWQgb3V0Li4uKQorICAgTk9GVFJVTkNBVEUgSW5jbHVkZSB0aGlzIG9uIFVOSVhlcyB0aGF0 IGRvbid0IGhhdmUgZnRydW5jYXRlKCkuCisgICBOT0dFVFVTRVJTSEVMTCBJbmNsdWRlIHRoaXMg b24gVU5JWGVzIHRoYXQgZG9uJ3QgaGF2ZSBnZXR1c2Vyc2hlbGwoKS4KKyAgIE5PR0ZUSU1FUiBE b24ndCB1c2UgaGlnaC1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgZmlsZS10cmFuc2ZlciB0aW1l cnMuCisgICBOT0hFQlJFVyBCdWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIEhlYnJldyBjaGFyYWN0 ZXIgc2V0cy4KKyAgIE5PSEVMUCBCdWlsZCB3aXRoIG5vIGJ1aWx0LWluIGhlbHAuCisgICBOT0lL U0QgQnVpbGQgd2l0aCBJS1NEIHN1cHBvcnQgZXhjbHVkZWQuCisgICBOT0lOSVRHUk9VUFMgSW5j bHVkZSB0aGlzIG9uIFVOSVhlcyB0aGF0IGRvbid0IGhhdmUgaW5pdGdyb3VwcygpLgorICAgTk9J Q1AgQnVpbGQgd2l0aCBubyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlci4KKyAgIE5PSkMgQnVp bGQgd2l0aCBubyBzdXBwb3J0IGZvciBqb2IgY29udHJvbCAoc3VzcGVuZCkuCisgICBOT0tBTkpJ IEJ1aWxkIHdpdGggbm8gc3VwcG9ydCBmb3IgSmFwYW5lc2UgS2FuamkgY2hhcmFjdGVyIHNldHMu CisgICBOT0tWRVJCUyBCdWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIGtleWJvYXJkIHZlcmJzIChc S3ZlcmJzKS4KKyAgIE5PTEFUSU4yIEJ1aWxkIHdpdGggbm8gSVNPIExhdGluLTIgY2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbiBzdXBwb3J0LgorICAgTk9MRUFSTiBCdWlsZCB3aXRoIG5vIHN1cHBv cnQgZm9yIGxlYXJuZWQgc2NyaXB0cy4KKyAgIE5PTElOS0JJVFMgVXNlIG9mIFNfSVNMTksgYW5k IF9JRkxOSyB1bnRydXN0d29ydGh5OyB1c2UgcmVhZGxpbmsoKQorICAgaW5zdGVhZC4KKyAgIE5P TE9DQUwgQnVpbGQgd2l0aG91dCBhbnkgbG9jYWwtbW9kZSBmZWF0dXJlczogTm8gTWFraW5nIENv bm5lY3Rpb25zLgorICAgTk9MT0dESUFMIERpc2FibGUgY29ubmVjdGlvbiBsb2cuCisgICBOT0xP R0lOIEJ1aWxkIHdpdGhvdXQgSUtTRCAobmV0d29yayBsb2dpbikgc3VwcG9ydC4KKyAgIE5PTFNU QVQgTm90IE9LIHRvIHVzZSBsc3RhdCgpLgorICAgTk9NRE1IVVAgQnVpbGQgd2l0aG91dCAibW9k ZW0tc3BlY2lmaWMgaGFuZ3VwIiAoZS5nLiBBVEgwKSBmZWF0dXJlLgorICAgTk9NSEhPU1QgRXhj bHVkZSB0aGUgbXVsdGlob21lZC1ob3N0IFRDUC9JUCBjb2RlIChpZiBjb21waWxhdGlvbgorICAg ZXJyb3JzKQorICAgTk9NSU5QVVQgQnVpbGQgd2l0aG91dCBNSU5QVVQgY29tbWFuZC4KKyAgIE5P TVNFTkQgQnVpbGQgd2l0aCBubyBNU0VORCBjb21tYW5kLgorICAgTk9OQVdTIERvIG5vdCBpbmNs dWRlIFRFTE5FVCBOZWdvdGlhdGUgQWJvdXQgV2luZG93IFNpemUgc3VwcG9ydC4KKyAgIE5PTkVU IERvIG5vdCBpbmNsdWRlIGFueSBuZXR3b3JrIHN1cHBvcnQuCisgICBOT05PU0VUQlVGIChTZWUg Tk9TRVRCVUYpCisgICBOT1BBUlNFTiBCdWlsZCB3aXRob3V0IGF1dG9tYXRpYyBwYXJpdHkgZGV0 ZWN0aW9uLgorICAgTk9QSVBFU0VORCBEaXNhYmxlIGZpbGUgdHJhbnNmZXIgdXNpbmcgcGlwZXMg YW5kIGZpbHRlcnMuCisgICBOT1BPTEwgT3ZlcnJpZGUgQ0tfUE9MTCBkZWZpbml0aW9uLgorICAg Tk9QT1BFTiBUaGUgcG9wZW4oKSBsaWJyYXJ5IGNhbGwgaXMgbm90IGF2YWlsYWJsZS4KKyAgIE5P UFVSR0UgQnVpbGQgd2l0aCBubyBQVVJHRSBjb21tYW5kLgorICAgTk9QVVNIIEJ1aWxkIHdpdGgg bm8gZXNjYXBlcyB0byBvcGVyYXRpbmcgc3lzdGVtLgorICAgTk9SRUFMUEFUSCBJbiBVTklYLCBy ZWFscGF0aCgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgICBOT1JFQ0FMTCBEaXNhYmxl IHRoZSBjb21tYW5kLXJlY2FsbCBmZWF0dXJlLgorICAgTk9SRURJUkVDVCBEaXNhYmxlIFJFRElS RUNUIGNvbW1hbmQuCisgICBOT1JFTkFNRSBEb24ndCB1c2UgcmVuYW1lKCkgc3lzdGVtIGNhbGws IHVzZSBsaW5rKCkvdW5saW5rKCkgKFVOSVgpLgorICAgTk9SRVNFTkQgQnVpbGQgd2l0aCBubyBS RVNFTkQgY29tbWFuZC4KKyAgIE5PUkVUUlkgQnVpbGQgd2l0aCBubyBjb21tYW5kLXJldHJ5IGZl YXR1cmUuCisgICBOT1NDUklQVCBCdWlsZCB3aXRoIG5vIFNDUklQVCBjb21tYW5kLgorICAgTk9T RUxFQ1QgRG9uJ3QgdHJ5IHRvIHVzZSBzZWxlY3QoKS4KKyAgIE5PU0VSVkVSIEJ1aWxkIHdpdGgg bm8gU0VSVkVSIG1vZGUgYW5kIG5vIHNlcnZlci1yZWxhdGVkIGNvbW1hbmRzLgorICAgTk9TRVRC VUYgRG9uJ3QgbWFrZSBjb25zb2xlIHdyaXRlcyB1bmJ1ZmZlcmVkLgorICAgTk9OT1NFVEJVRiBE TyBtYWtlIGNvbnNvbGUgd3JpdGVzIHVuYnVmZmVyZWQuCisgICBOT1NFVFJFVSBzZXRyZXVpZCgp IGFuZC9vciBzZXRyZWdpZCgpIG5vdCBhdmFpbGFibGUuCisgICBOT1NIT1cgQnVpbGQgd2l0aCBu byBTSE9XIGNvbW1hbmQgKG5vdCByZWNvbW1lbmRlZCEpLgorICAgTk9TSUdXSU5DSCBEaXNhYmxl IFNJR1dJTkNIIHNpZ25hbCB0cmFwcGluZy4KKyAgIE5PU1BMIEJ1aWxkIHdpdGggbm8gc2NyaXB0 IHByb2dyYW1taW5nIGxhbmd1YWdlLgorICAgTk9TVEFUIERvbid0IGNhbGwgc3RhdCgpIGZyb20g bWFpbmxpbmUgY29kZS4KKyAgIE5PU1lNTElOSyBJbmNsdWRlIHRoaXMgZm9yIFVOSVhlcyB0aGF0 IGRvbid0IGhhdmUgcmVhZGxpbmsoKS4KKyAgIE5PU1lTSU9DVExIIERvIG5vdCAjaW5jbHVkZSA8 c3lzL2lvY3RsLmg+LgorICAgTk9TWVNUSU1FSCBDbyBub3QgaW5jbHVkZSA8c3lzL3RpbWUuaD4u CisgICBOT1NZU0xPRyBEaXNhYmxlIHN5c2xvZ2dpbmcgY29kZS4KKyAgIE5PVENQT1BUUyBCdWls ZCB3aXRoIG5vIFNFVCBUQ1Agb3B0aW9ucyBvciB1bmRlcmx5aW5nIHN1cHBvcnQuCisgICBOT1RM T0cgQnVpbGQgd2l0aCBubyBzdXBwb3J0IGZvciB0cmFuc2FjdGlvbiBsb2dnaW5nLgorICAgTk9U TV9JU0RTVCBTdHJ1Y3QgdG0gaGFzIG5vIHRtX2lzZHN0IG1lbWJlci4KKyAgIE5PVU5JQ09ERSBC dWlsZCB3aXRoIG5vIHN1cHBvcnQgZm9yIFVuaWNvZGUgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlv bi4KKyAgIE5PVVJMIERvbid0IHBhcnNlIFVSTHMKKyAgIE5PVVVDUCBCdWlsZCB3aXRoIG5vIFVV Q1AgbG9ja2ZpbGUgc3VwcG9ydCAoZGFuZ2Vyb3VzISkuCisgICBOT1dBUk4gTWFrZSBFWElUIFdB Uk5JTkcgYmUgT0ZGIGJ5IGRlZmF1bHQgKG90aGVyd2lzZSBpdCdzIE9OKS4KKyAgIE5PV1JFRlJF U0ggT3ZlcnJpZGUgYnVpbHQtaW4gZGVmaW5pdGlvbiBvZiBDS19XUkVGUkVTSCAocS52LikuCisg ICBOT1hGRVIgQnVpbGQgd2l0aCBubyBLZXJtaXQgb3Igb3RoZXIgZmlsZS10cmFuc2ZlciBwcm90 b2NvbHMuCisgICBOT1hNSVQgQnVpbGQgd2l0aCBubyBUUkFOU01JVCBjb21tYW5kLgorICAgTk9Y UFJJTlQgRGlzYWJsZXMgdHJhbnNwYXJlbnQgcHJpbnQgY29kZS4KKyAgIE9MRE1TRyBVc2Ugb2xk ICJlbnRlcmluZyBzZXJ2ZXIgbW9kZSIgbWVzc2FnZSAoc2VlIFsxNzJdY2tjbWFpLmMpLgorICAg T0xJTlVYSElTUEVFRCBCdWlsZCBpbiBvbGQgTGludXggaGktc2VyaWFsLXNwZWVkIGNvZGUgKGZv ciBMaW51eCA8PQorICAgMS4wKS4KKyAgIE9QRU5CU0QgQnVpbGQgZm9yIE9wZW5CU0QuCisgICBP UzIgQnVpbGQgZm9yIE9TLzIuCisgICBPU0YgQnVpbGQgZm9yIE9TRi8xLgorICAgT1NGUEMgQnVp bGQgZm9yIE9TRi8xIG9uIGEgUEMuCisgICBPU0YzMiBEaWdpdGFsIFVOSVggMy4yIG9yIGxhdGVy LgorICAgT1NGNDAgQnVpbGQgZm9yIERpZ2l0YWwgVU5JWCA0LjAuCisgICBPU0Y1MCBCdWlsZCBm b3IgRGlnaXRhbCBVTklYIDUuMC4KKyAgIE9TSyBCdWlsZCBmb3IgT1MtOS4KKyAgIE9YT1MgQnVp bGQgZm9yIE9saXZldHRpIFgvT1MgMi4zLgorICAgUENJWCBCdWlsZCBmb3IgUEMvSVgKKyAgIFBJ RF9UPXh4eCBUeXBlIGZvciBwaWRzIGlzIHh4eCAobm9ybWFsbHkgaW50IG9yIHBpZF90KS4KKyAg IFBPU0lYIEJ1aWxkIGZvciBQT1NJWDogdXNlIFBPU0lYIGhlYWRlciBmaWxlcywgZnVuY3Rpb25z LCBldGMuCisgICBfUE9TSVhfU09VUkNFIERpc2FibGUgbm9uLVBPU0lYIGZlYXR1cmVzLgorICAg UFJPVlgxIEJ1aWxkIGZvciBWZW5peCAxLjAgb24gREVDIFByb2Zlc3Npb25hbCAzeHguCisgICBQ VFggQnVpbGQgZm9yIER5bml4L1BUWAorICAgUFdJRF9UPXh4eCBnZXRwd2lkKCkgdHlwZSBpcyB4 eHguCisgICBSQlNJWj14eHggRGVmaW5lIG92ZXJhbGwgc2l6ZSBvZiByZWNlaXZlLXBhY2tldCBi dWZmZXIgKHdpdGggRFlOQU1JQykuCisgICBSRENISyByZGNoaygpIHN5c3RlbSBjYWxsIGlzIGF2 YWlsYWJsZS4KKyAgIFJFTkFNRSByZW5hbWUoKSBzeXN0ZW0gY2FsbCBpcyBhdmFpbGFibGUgKFVO SVgpLgorICAgUlRBSVggQnVpbGQgZm9yIEFJWCAyLjIuMSBvbiBJQk0gUlQgUEMuCisgICBSVFUg QnVpbGQgZm9yIE1hc3Njb21wIC8gQ29uY3VycmVudCBSVFUuCisgICBTQVZFRFVJRCBCU0Qgb3Ig b3RoZXIgbm9uLUFUJlQgVU5JWCBoYXMgc2F2ZWQtc2V0dWlkIGZlYXR1cmUuCisgICBTQlNJWj14 eHggRGVmaW5lIG92ZXJhbGwgc2l6ZSBvZiBzZW5kLXBhY2tldCBidWZmZXIgKHVzZSB3aXRoIERZ TkFNSUMpLgorICAgU0RJUkVOVCBEaXJlY3Rvcnkgc3RydWN0dXJlIHNwZWNpZmllZCBpbiA8c3lz L2RpcmVudC5oPi4KKyAgIFNFTEVDVCBzZWxlY3QoKSBmdW5jdGlvbiBhdmFpbGFibGUgKGNvbmZs aWN0cyB3aXRoIFJEQ0hLIGFuZCBDS19QT0xMKQorICAgU0VMRUNUX0ggSW5jbHVkZSA8c3lzL3Nl bGVjdC5oPiBmb3Igc2VsZWN0KCktcmVsYXRlZCBkZWZpbml0aW9ucy4KKyAgIFNFVEVVSUQgQlNE IDQuNC1zdHlsZSBzZXRlWGlkKCkgZnVuY3Rpb25zIGF2YWlsYWJsZS4KKyAgIFNJR19WIFR5cGUg Zm9yIHNpZ25hbCgpIGlzIHZvaWQuIFVzZWQgdG8gb3ZlcnJpZGUgbm9ybWFsIGFzc3VtcHRpb24u CisgICBTSUdfSSBUeXBlIGZvciBzaWduYWwoKSBpcyBpbnQuIFVzZWQgdG8gb3ZlcnJpZGUgbm9y bWFsIGFzc3VtcHRpb24uCisgICBTT0NLT1BUX1QgT3ZlcnJpZGUgZGVmYXVsdCBkYXRhIHR5cGUg Zm9yIGdldC9zZXRzb2Nrb3B0KCkgb3B0aW9uCisgICBsZW5ndGguCisgICBTT0xBUklTIEJ1aWxk IGZvciBTb2xhcmlzLgorICAgU09MQVJJUzI1IEJ1aWxkIGZvciBTb2xhcmlzIDIuNSBvciBsYXRl ci4KKyAgIFNPTllORVdTIEJ1aWxkIGZvciBTb255IE5FV1MtT1MuCisgICBTVEVSTUlPWCA8c3lz L3Rlcm1pb3guaD4gaXMgYXZhaWxhYmxlLgorICAgU1RSQVRVUyBCdWlsZCBmb3IgU3RyYXR1cyBW T1MuCisgICBTVFJBVFVTWDI1IEluY2x1ZGUgU3RyYXR1cyBWT1MgWC4yNSBzdXBwb3J0LgorICAg U1VONFM1IEJ1aWxkIGZvciBTVU5PUyA0LnggaW4gdGhlIFN5c3RlbSBWIFIzIGVudmlyb25tZW50 LgorICAgU1VOT1M0IEJ1aWxkIGZvciBTVU5PUyA0LjAgaW4gdGhlIEJTRCBlbnZpcm9ubWVudC4K KyAgIFNVTk9TNDEgQnVpbGQgZm9yIFNVTk9TIDQuMSBpbiB0aGUgQlNEIGVudmlyb25tZW50Lgor ICAgU1VOWDI1IEJ1aWxkIHdpdGggc3VwcG9ydCBmb3IgU3VuTGluayBYLjI1LgorICAgU1ZSMyBC dWlsZCBmb3IgQVQmVCBTeXN0ZW0gViBSZWxlYXNlIDMuCisgICBTVlIzSkMgQWxsb3cgam9iIGNv bnRyb2wgc3VwcG9ydCBvbiBTeXN0ZW0gViBSZWxlYXNlIDMgVU5JWCB2ZXJzaW9ucy4KKyAgIFNW UjQgQnVpbGQgZm9yIEFUJlQgU3lzdGVtIFYgUmVsZWFzZSA0LgorICAgU1dfQUNDX0lEIFVOSVgg b25seSAtLSBzd2FwIHJlYWwgJiBlZmZlY3RpdmUgaWRzIGFyb3VuZCBhY2Nlc3MoKSBjYWxscy4K KyAgIHN4YUU1MCBCdWlsZCBmb3IgUEZVIENvbXBhY3QgQSBTZXJpZXMgU1gvQSBUSVNQLgorICAg U1lTTE9HTEVWRUw9biBGb3JjZSBzeXNsb2dnaW5nIGF0IGdpdmVuIGxldmVsLgorICAgU1lTVElN RUggSW5jbHVkZSA8c3lzL3RpbWUuaD4uCisgICBTWVNVVElNRUggSW5jbHVkZSA8c3lzL3V0aW1l Lmg+IGZvciBzZXR0aW5nIGZpbGUgZGF0ZXMgKDg4T1BFTikKKyAgIFRDUFNPQ0tFVCBCdWlsZCB3 aXRoIHN1cHBvcnQgZm9yIFRDUC9JUCB2aWEgQmVya2VsZXkgc29ja2V0cyBsaWJyYXJ5LgorICAg VEVSTUlPWCA8dGVybWlveC5oPiBoZWFkZXIgZmlsZSBpcyBhdmFpbGFibGUgKG1vc3RseSBTVlI0 KS4KKyAgIFROQ09ERSBJbmNsdWRlIFRFTE5FVC1zcGVjaWZpYyBjb2RlLgorICAgVE9XRVIxIEJ1 aWxkIGZvciBOQ1IgVG93ZXIgMTYzMiB3aXRoIE9TIDEuMDIuCisgICBUUlMxNiBCdWlsZCBmb3Ig VGFuZHkgMTYvNjAwMC4KKyAgIFVJRF9UPXh4eCBUeXBlIGZvciB1aWRzIGlzIHh4eCAobm9ybWFs bHkgaW50IG9yIHVpZF90KS4KKyAgIFVOSVggTXVzdCBiZSBkZWZpbmVkIGZvciBhbGwgVU5JWCB2 ZXJzaW9ucy4KKyAgIFVOSVgzNTFNIEFUJlQgVU5JWCAzLjUxbSBvbiB0aGUgQVQmVCA3MzAwIFVO SVggUEMuCisgICBVU0VfQVJST1dLRVlTIEluY2x1ZGUgY29kZSB0byBwYXJzZSBBTlNJIGFycm93 LWtleSBzZXF1ZW5jZXMuCisgICBVU0VfTFNUQVQgT0sgdG8gdXNlIGxzdGF0KCkuCisgICBVU0Vf TUVNQ1BZIERlZmluZSB0aGlzIGlmIG1lbWNweSgpL21lbXNldCgpL21lbW1vdmUoKSBhdmFpbGFi bGUuCisgICBVU0VfU1RSRVJST1IgRGVmaW5lIHRoaXMgaWYgc3RyZXJyb3IoKSBpcyBhdmFpbGFi bGUuCisgICBVU0xFRVAgdXNsZWVwKCkgc3lzdGVtIGNhbGwgYXZhaWxhYmxlIChjb25mbGljdHMg d2l0aCBOQVAgJiBTRUxFQ1QpLgorICAgVVRFSyBCdWlsZCBmb3IgVGVrdHJvbml4IHdvcmtzdGF0 aW9ucyB3aXRoIFVURUsgT1MuCisgICBVVElNRUggSW5jbHVkZSA8dXRpbWUuaD4gZm9yIHNldHRp bmcgZmlsZSBkYXRlcyAoU1ZSNCwgUE9TSVgpCisgICBVVFMyNCBCdWlsZCBmb3IgQW1kYWhsIFVU UyAyLjQuCisgICBWNyBCdWlsZCBmb3IgVmVyc2lvbiA3IFVOSVguCisgICBWTVMgQnVpbGQgZm9y IFZBWC9WTVMuCisgICBWT0lEPXh4eCBWT0lEIHR5cGUgZm9yIGZ1bmN0aW9ucyAoaW50IG9yIHZv aWQpLgorICAgVlhWRSBCdWlsZCBmb3IgQ0RDIFZYL1ZFIDUuMi4xLgorICAgV0FJVF9UPXh4eCBU eXBlIG9mIGFyZ3VtZW50IHBhc3NlZCB0byB3YWl0KCkuCisgICBXSU5UQ1AgQnVpbGQgd2l0aCBX b2xsb25nb25nIFZBWC9WTVMgVENQL0lQIChpbXBsaWVzIFRDUFNPQ0tFVCkKKyAgIFdPTExPTkdP TkcgQnVpbGQgd2l0aCBXb2xsb25nb25nIFVOSVggVENQL0lQIChpbXBsaWVzIFRDUFNPQ0tFVCkK KyAgIFhFTklYIEJ1aWxkIGZvciBYZW5peCAoU0NPLCBUYW5keSwgb3RoZXJzKS4KKyAgIFhORElS IFN1cHBvcnQgZm9yIEJTRCBsb25nIGZpbGVuYW1lcyB2aWEgPHN5cy9uZGlyLmg+LgorICAgWFla X0lOVEVSTkFMIFN1cHBvcnQgZm9yIFhZWk1PREVNIHByb3RvY29scyBpcyBpbnRlcm5hbCwgbm90 IGV4dGVybmFsLgorICAgWkZDREFUIERlZmluZSB0aGlzIGlmIHpmY2RhdCgpIGZ1bmN0aW9uIGlz IGF2YWlsYWJsZSBpbiBLZXJtaXQuCisgICBaSUxPRyBCdWlsZCBmb3IgWmlsb2cgWkVVUy4KKyAg IFpKREFURSBIYXMgempkYXRlKCkgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBkYXRlIHRvIEp1bGlh biBmb3JtYXQuCisgICBYUFJJTlQgVHJhbnNwYXJlbnQgcHJpbnQgY29kZSBpbmNsdWRlZCBpbiBD T05ORUNUIG1vZHVsZS4KKworICAgWyBbMTczXVRvcCBdIFsgWzE3NF1Db250ZW50cyBdIFsgWzE3 NV1DLUtlcm1pdCBIb21lIF0gWyBbMTc2XUtlcm1pdAorICAgSG9tZSBdCisgICAgIF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XworCisKKyAgICBDLUtlcm1pdCBDb25maWd1cmF0aW9uIE9wdGlvbnMgLyBbMTc3XVRoZSBLZXJt aXQgUHJvamVjdCAvCisgICAgWzE3OF1rZXJtaXRAY29sdW1iaWEuZWR1IC8gMzAgSnVuZSAyMDEx CisKK1JlZmVyZW5jZXMKKworICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCisgICAyLiBt YWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQorICAgMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2luZGV4Lmh0bWwKKyAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9r OTUuaHRtbAorICAgNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRt bAorICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCisg ICA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1sCisgICA4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAorICAgOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5odG1sCisgIDEwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCisgIDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwKKyAgMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKKyAgMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCisgIDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwj eDEKKyAgMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4Mgor ICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gzCisgIDE3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDQKKyAgMTguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NQorICAxOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g2CisgIDIwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDcKKyAgMjEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OAorICAyMi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g5CisgIDIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEwCisgIDI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDExCisgIDI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDEyCisgIDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjY2ZnLmh0bWwjeDEzCisgIDI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj Y2ZnLmh0bWwjeDE0CisgIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2Zn Lmh0bWwjeGExCisgIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwKKyAgMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAg MzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgIDMyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgIDMzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAgMzQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MgorICAzNS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3gwCisgIDM2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDM3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICAzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI3RvcAorICAzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY2NmZy5odG1sI2NvbnRlbnRzCisgIDQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDMKKyAgNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NjZmcuaHRtbCN4MQorICA0Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2t1dGlvLmMKKyAgNDMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrY2RlYi5oCisgIDQ0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3V1czMuYworICA0NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2tjZGViLmgKKyAgNDYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXRpby5jCisgIDQ3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja3V0aW8uYworICA0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAorICA0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4 Lmh0bWwKKyAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0 b3AKKyAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250 ZW50cworICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g0 CisgIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDIKKyAg NTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L21ha2VmaWxlCisg IDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKKyAgNTYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAorICA1Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjIKKyAgNTguIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzeC5jCisgIDU5LiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworICA2MC4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1ZmlvLmMKKyAgNjEuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzeC5jCisgIDYyLiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VjbWQuYworICA2My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICA2NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgNjUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN0b3AKKyAgNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCNjb250ZW50cworICA2Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g1CisgIDY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDMKKyAgNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC91bmljb2RlLmh0bWwKKyAgNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyAgNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgIDcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9w CisgIDczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVu dHMKKyAgNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4Ngor ICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g0CisgIDc2 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1c3IuaAorICA3 Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXNyLmgKKyAg NzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgNzkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgIDgwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgIDgxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAgODIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NworICA4My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g1CisgIDg0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDYuMQorICA4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2NmZy5odG1sI3g2LjIKKyAgODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2NjZmcuaHRtbCN4Ni4zCisgIDg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjeDYuNAorICA4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI3g0CisgIDg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Z2tlcm1pdC5odG1sCisgIDkwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3V1c3IuaAorICA5MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2tja2VyLmgKKyAgOTIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrY2RlYi5oCisgIDkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdC5odG1sCisgIDk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAorICA5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAor ICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRz CisgIDk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDgKKyAg OTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4NgorICA5OS4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1ZGlhLmMKKyAxMDAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxMDEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTAyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgMTAzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAxMDQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4OQorIDEwNS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g3CisgMTA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDguMQorIDEwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sI3g4LjIKKyAxMDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4OC4zCisgMTA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDguMS4xCisgMTEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDguMS4yCisgMTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDguMS4zCisgMTEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDguMS40CisgMTEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDguMS41CisgMTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjeDguMS42CisgMTE1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja2NuZXQuaAorIDExNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjdGVsLmMKKyAxMTcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrY3RlbC5jCisgMTE4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 L2tlcm1pdC9jLWtlcm1pdC9ja2N0ZWwuaAorIDExOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2tjZnRwLmMKKyAxMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxMjEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrY25ldC5jCisgMTIyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja2NuZXQuaAorIDEyMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAxMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4MTEKKyAxMjUuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1Cisg MTI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTI3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDEyOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAorIDEyOS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCisgMTMwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEwCisgMTMxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDgKKyAxMzIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9pbmRleC5odG1sCisgMTM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjY2ZnLmh0bWwjdG9wCisgMTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj Y2ZnLmh0bWwjY29udGVudHMKKyAxMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NjZmcuaHRtbCN4MTEKKyAxMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nj ZmcuaHRtbCN4OQorIDEzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3gxMQorIDEzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s CisgMTQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTQx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDE0Mi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAorIDE0My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCisgMTQ0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEyCisgMTQ1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEwCisgMTQ2LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VjbnMuYworIDE0Ny4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1Y29uLmMKKyAxNDguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxNDkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgMTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAxNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NjZmcuaHRtbCN4MTMKKyAxNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NjZmcuaHRtbCN4MTEKKyAxNTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyAxNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgMTU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjdG9w CisgMTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjY29udGVu dHMKKyAxNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTQK KyAxNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbCN4MTIKKyAx NjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCisg MTYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTYyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDE2My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3RvcAorIDE2NC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI2NvbnRlbnRzCisgMTY1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwjeDEzCisgMTY2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTY3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDE2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY2NmZy5odG1sI3RvcAorIDE2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY2NmZy5odG1sI2NvbnRlbnRzCisgMTcwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja2NkZWIuaAorIDE3MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjbmV0LmgKKyAxNzIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2Mta2VybWl0L2NrY21haS5jCisgMTczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjY2ZnLmh0bWwjdG9wCisgMTc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjY2ZnLmh0bWwjY29udGVudHMKKyAxNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwKKyAxNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9p bmRleC5odG1sCisgMTc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAorIDE3OC4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2RlYi5oIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NkZWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4zNGZmMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NkZWIuaApAQCAtMCwwICsxLDY2MDcgQEAKKy8qICBDIEsg QyBEIEUgQiAuIEggICovCisKKy8qCitNb24gQXVnIDIzIDA5OjIyOjA1IDIwMTAKKworICBOT1RF IFRPIENPTlRSSUJVVE9SUzogVGhpcyBmaWxlLCBhbmQgYWxsIHRoZSBvdGhlciBDLUtlcm1pdCBm aWxlcywgbXVzdCBiZQorICBjb21wYXRpYmxlIHdpdGggQyBwcmVwcm9jZXNzb3JzIHRoYXQgc3Vw cG9ydCBvbmx5ICNpZmRlZiwgI2Vsc2UsICNlbmRpZiwKKyAgI2RlZmluZSwgYW5kICN1bmRlZi4g IFBsZWFzZSBkbyBub3QgdXNlICNpZiwgbG9naWNhbCBvcGVyYXRvcnMsIG9yIG90aGVyCisgIGxh dGVyLW1vZGVsIHByZXByb2Nlc3NvciBmZWF0dXJlcyBpbiBhbnkgb2YgdGhlIHBvcnRhYmxlIEMt S2VybWl0IG1vZHVsZXMuCisgIFlvdSBjYW4sIG9mIGNvdXJzZSwgdXNlIHRoZXNlIGNvbnN0cnVj dGlvbnMgaW4gcGxhdGZvcm0tc3BlY2lmaWMgbW9kdWxlcworICB3aGVuIHlvdSBrbm93IHRoZXkg YXJlIHN1cHBvcnRlZC4KKyovCisKKy8qCisgIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSBhbGwg Qy1LZXJtaXQgbW9kdWxlcywgaW5jbHVkaW5nIHRoZSBtb2R1bGVzCisgIHRoYXQgYXJlbid0IHNw ZWNpZmljIHRvIEtlcm1pdCAobGlrZSB0aGUgY29tbWFuZCBwYXJzZXIgYW5kIHRoZSBjaz90aW8g YW5kCisgIGNrP2ZpbyBtb2R1bGVzKS4gIEl0IHNob3VsZCBiZSBpbmNsdWRlZCBCRUZPUkUgYW55 IG90aGVyIEMtS2VybWl0IGhlYWRlcgorICBmaWxlcy4gIEl0IHNwZWNpZmllcyBmb3JtYXQgY29k ZXMgZm9yIGRlYnVnKCksIHRsb2coKSwgYW5kIHNpbWlsYXIKKyAgZnVuY3Rpb25zLCBhbmQgaW5j bHVkZXMgYW55IG5lY2Vzc2FyeSBkZWZpbml0aW9ucyB0byBiZSB1c2VkIGJ5IGFsbCBDLUtlcm1p dAorICBtb2R1bGVzLCBhbmQgYWxzbyBpbmNsdWRlcyBzb21lIGZlYXR1cmUgc2VsZWN0aW9uIGNv bXBpbGUtdGltZSBzd2l0Y2hlcywgYW5kCisgIGFsc28gc3lzdGVtLSBvciBjb21waWxlci1kZXBl bmRlbnQgZGVmaW5pdGlvbnMsIHBsdXMgI2luY2x1ZGVzIGFuZCBwcm90b3R5cGVzCisgIHJlcXVp cmVkIGJ5IGFsbCBDLUtlcm1pdCBtb2R1bGVzLgorKi8KKworLyoKKyAgQXV0aG9yOiBGcmFuayBk YSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1p YyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykg MTk4NSwgMjAxMCwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBD aXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2Vy bWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNr Y21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgor ICBFdHltb2xvZ3k6IFRoZSBuYW1lIG9mIHRoaXMgZmlsZSBtZWFucyAiQy1LZXJtaXQgQ29tbW9u LUMtTGFuZ3VhZ2UgRGVidWdnaW5nCisgIEhlYWRlciIsIGJlY2F1c2Ugb3JpZ2luYWxseSBpdCBj b250YWluZWQgb25seSB0aGUgZm9ybWF0cyAoRjAwMC1GMTExKSBmb3IKKyAgdGhlIGRlYnVnKCkg YW5kIHRsb2coKSBmdW5jdGlvbnMuICBTaW5jZSB0aGVuIGl0IGhhcyBncm93biB0byBpbmNsdWRl IGFsbAorICBtYXRlcmlhbCByZXF1aXJlZCBieSBhbGwgb3RoZXIgQy1LZXJtaXQgbW9kdWxlcywg aW5jbHVkaW5nIHRoZSBub24tS2VybWl0CisgIHNwZWNpZmljIG9uZXMuICBJbiBvdGhlciB3b3Jk cywgdGhpcyBpcyB0aGUgb25lIGhlYWRlciBmaWxlIHRoYXQgaXMKKyAgZ3VhcmFudGVlZCB0byBi ZSBpbmNsdWRlZCBieSBhbGwgQy1LZXJtaXQgc291cmNlIG1vZHVsZXMuCisqLworCisjaWZuZGVm IENLQ0RFQl9ICQkJLyogRG9uJ3QgaW5jbHVkZSBtZSBtb3JlIHRoYW4gb25jZS4gKi8KKyNkZWZp bmUgQ0tDREVCX0gKKworI2lmZGVmIE9TMgorI2luY2x1ZGUgImNrb2tlci5oIgorI2Vsc2UgLyog T1MyICovCisvKiBVbnNpZ25lZCBudW1iZXJzICovCisKKyNpZm5kZWYgVVNIT1JUCisjZGVmaW5l IFVTSE9SVCB1bnNpZ25lZCBzaG9ydAorI2VuZGlmIC8qIFVTSE9SVCAqLworCisjaWZuZGVmIFVJ TlQKKyNkZWZpbmUgVUlOVCB1bnNpZ25lZCBpbnQKKyNlbmRpZiAvKiBVSU5UICovCisKKyNpZm5k ZWYgVUxPTkcKKyNkZWZpbmUgVUxPTkcgdW5zaWduZWQgbG9uZworI2VuZGlmIC8qIFVMT05HICov CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBNQUNPU1gxMAkJCQkvKiBNYWMgT1MgWCAxLjAg Ki8KKyNpZm5kZWYgTUFDT1NYCQkJCS8qIGltcGxpZXMgTWFjIE9TIFggKi8KKyNkZWZpbmUgTUFD T1NYCisjZW5kaWYgLyogTUFDT1NYICovCisjZW5kaWYgLyogTUFDT1NYMTAgKi8KKworI2lmZGVm IE1BQ09TWAkJCQkvKiBNYWMgT1MgWCAqLworI2lmbmRlZiBCU0Q0NAkJCQkvKiBpbXBsaWVzIDQu NCBCU0QgKi8KKyNkZWZpbmUgQlNENDQKKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIE1B Q09TWCAqLworCisjaWZkZWYgU0NPX09TUjUwNQkJCS8qIFNDTyAzLjJ2NS4wLjUgKi8KKyNpZm5k ZWYgU0NPX09TUjUwNAkJCS8qIGltcGxpZXMgU0NPIDMuMnY1LjAuNCAqLworI2RlZmluZSBTQ09f T1NSNTA0CisjZW5kaWYgLyogU0NPX09TUjUwNCAqLworI2VuZGlmIC8qIFNDT19PU1I1MDUgKi8K KworI2lmZGVmIFNDT19PU1I1MDQJCQkvKiBTQ08gMy4ydjUuMC40ICovCisjaWZuZGVmIENLX1ND T1Y1CQkJLyogaW1wbGllcyBTQ08gMy4ydjUuMCAqLworI2RlZmluZSBDS19TQ09WNQorI2VuZGlm IC8qIENLX1NDT1Y1ICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CQkJLyogVG8gc2lkZXN0ZXAg aGVhZGVyLWZpbGUgbWVzcyAqLworI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KKworI2lmZGVmIENL X1NDT1Y1CisjaWZuZGVmIEFOWVNDTworI2RlZmluZSBBTllTQ08KKyNlbmRpZiAvKiBBTllTQ08g Ki8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworCisjaWZkZWYgVU5JWFdBUkUKKyNpZm5kZWYgQU5Z U0NPCisjZGVmaW5lIEFOWVNDTworI2VuZGlmIC8qIEFOWVNDTyAqLworI2VuZGlmIC8qIFVOSVhX QVJFICovCisKKyNpZm5kZWYgTUlOSVgJCQkJLyogTWluaXggdmVyc2lvbnMgKi8KKyNpZmRlZiBN SU5JWDMxNQorI2RlZmluZSBNSU5JWAorI2Vsc2UKKyNpZmRlZiBNSU5JWDMKKyNkZWZpbmUgTUlO SVgKKyNlbHNlCisjaWZkZWYgTUlOSVgyCisjZGVmaW5lIE1JTklYCisjZW5kaWYJLyogTUlOSVgy ICovCisjZW5kaWYJLyogTUlOSVgzICovCisjZW5kaWYJLyogTUlOSVgzMTUgKi8KKyNlbmRpZgkv KiBNSU5JWCAqLworCisjaWZkZWYgQ0tfU0NPMzJWNAkJCS8qIFNDTyAzLjJ2NCAqLworI2lmbmRl ZiBBTllTQ08KKyNkZWZpbmUgQU5ZU0NPCisjZW5kaWYgLyogQU5ZU0NPICovCisjaWZuZGVmIFhF TklYCisjZGVmaW5lIFhFTklYCisjZW5kaWYgLyogWEVOSVggKi8KKyNpZm5kZWYgU1ZSMworI2Rl ZmluZSBTVlIzCisjZW5kaWYgLyogU1ZSMyAqLworI2lmbmRlZiBESVJFTlQKKyNkZWZpbmUgRElS RU5UCisjZW5kaWYgLyogRElSRU5UICovCisjaWZuZGVmIFJFTkFNRQorI2RlZmluZSBSRU5BTUUK KyNlbmRpZiAvKiBSRU5BTUUgKi8KKyNpZm5kZWYgU1ZSM0pDCisjZGVmaW5lIFNWUjNKQworI2Vu ZGlmIC8qIFNWUjNKQyAqLworI2lmbmRlZiBDS19SVFNDVFMKKyNkZWZpbmUgQ0tfUlRTQ1RTCisj ZW5kaWYgLyogQ0tfUlRTQ1RTICovCisjaWZuZGVmIFBJRF9UCisjZGVmaW5lIFBJRF9UIHBpZF90 CisjZW5kaWYgLyogUElEX1QgKi8KKyNpZm5kZWYgUFdJRF9UCisjZGVmaW5lIFBXSURfVCBpbnQK KyNlbmRpZiAvKiBQV0lEX1QgKi8KKyNlbmRpZiAvKiBDS19TQ08zMlY0ICovCisKKyNpZmRlZiBO T0lDUAkJCQkvKiBJZiBubyBjb21tYW5kIHBhcnNlciAqLworI2lmbmRlZiBOT1NQTAkJCQkvKiBU aGVuIG5vIHNjcmlwdCBsYW5ndWFnZSBlaXRoZXIgKi8KKyNkZWZpbmUgTk9TUEwKKyNlbmRpZiAv KiBOT1NQTCAqLworI2lmbmRlZiBOT0NTRVRTCQkJCS8qIE9yIGNoYXJhY2VyIHNldHMgKi8KKyNk ZWZpbmUgTk9DU0VUUworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZm5kZWYgTk9GVFAJCQkJLyog T3IgRlRQIGNsaWVudCAqLworI2RlZmluZSBOT0ZUUAorI2VuZGlmIC8qIE5PRlRQICovCisjZW5k aWYgLyogTk9JQ1AgKi8KKworLyogQnVpbHQtaW4gbWFrZWZpbGUgZW50cmllcyAqLworCisjaWZk ZWYgU09MQVJJUzExCQkJLyogU29sYXJpcyAxMSBpbXBsaWVzIDEwICovCisjaWZuZGVmIFNPTEFS SVMxMAorI2RlZmluZSBTT0xBUklTMTAKKyNlbmRpZiAvKiBTT0xBUklTMTAgKi8KKyNlbmRpZiAv KiBTT0xBUklTMTEgKi8KKworI2lmZGVmIFNPTEFSSVMxMAkJCS8qIFNvbGFyaXMgMTAgaW1wbGll cyA5ICovCisjaWZuZGVmIFNPTEFSSVM5CisjZGVmaW5lIFNPTEFSSVM5CisjZW5kaWYgLyogU09M QVJJUzkgKi8KKyNlbmRpZiAvKiBTT0xBUklTMTAgKi8KKworI2lmZGVmIFNPTEFSSVM5CQkJCS8q IFNvbGFyaXMgOSBpbXBsaWVzIDggKi8KKyNpZm5kZWYgU09MQVJJUzgKKyNkZWZpbmUgU09MQVJJ UzgKKyNlbmRpZiAvKiBTT0xBUklTOCAqLworI2VuZGlmIC8qIFNPTEFSSVM5ICovCisKKyNpZmRl ZiBTT0xBUklTOAkJCQkvKiBTb2xhcmlzIDggaW1wbGllcyA3ICovCisjaWZuZGVmIFNPTEFSSVM3 CisjZGVmaW5lIFNPTEFSSVM3CisjZW5kaWYgLyogU09MQVJJUzcgKi8KKyNlbmRpZiAvKiBTT0xB UklTOCAqLworCisjaWZkZWYgU09MQVJJUzcJCQkJLyogU29sYXJpcyA3IGltcGxpZXMgMi42ICov CisjaWZuZGVmIFNPTEFSSVMyNgorI2RlZmluZSBTT0xBUklTMjYKKyNlbmRpZiAvKiBTT0xBUklT MjYgKi8KKyNlbmRpZiAvKiBTT0xBUklTNyAqLworCisjaWZkZWYgU09MQVJJUzI2CQkJLyogU29s YXJpcyAyLjYgaW1wbGllcyAyLjUgKi8KKyNpZm5kZWYgU09MQVJJUzI1CisjZGVmaW5lIFNPTEFS SVMyNQorI2VuZGlmIC8qIFNPTEFSSVMyNSAqLworI2VuZGlmIC8qIFNPTEFSSVMyNiAqLworCisj aWZkZWYgU09MQVJJUzI1CQkJLyogU29sYXJpcyAyLjUgaW1wbGllcyBTb2xhcmlzICovCisjaWZu ZGVmIFNPTEFSSVMKKyNkZWZpbmUgU09MQVJJUworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNpZm5k ZWYgUE9TSVgJCQkJLyogQW5kIFBPU0lYICovCisjZGVmaW5lIFBPU0lYCisjZW5kaWYgLyogUE9T SVggKi8KKyNpZm5kZWYgQ0tfV1JFRlJFU0gJCQkvKiBBbmQgdGhpcyAoY3Vyc2VzKSAqLworI2Rl ZmluZSBDS19XUkVGUkVTSAorI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCisjZW5kaWYgLyogU09M QVJJUzI1ICovCisKKyNpZmRlZiBTT0xBUklTMjQJCQkvKiBTb2xhcmlzIDIuNCBpbXBsaWVzIFNv bGFyaXMgKi8KKyNpZm5kZWYgU09MQVJJUworI2RlZmluZSBTT0xBUklTCisjZW5kaWYgLyogU09M QVJJUyAqLworI2VuZGlmIC8qIFNPTEFSSVMyNCAqLworCisjaWZkZWYgU09MQVJJUwkJCQkvKiBT b2xhcmlzIGdldHMgIlBPU0lYIiBSVFMvQ1RTIEFQSSAqLworI2lmZGVmIFBPU0lYCisjaWZuZGVm IFBPU0lYX0NSVFNDVFMKKyNkZWZpbmUgUE9TSVhfQ1JUU0NUUworI2VuZGlmIC8qIFBPU0lYX0NS VFNDVFMgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2lmbmRlZiBTVlI0CisjZGVmaW5lIFNWUjQK KyNlbmRpZgkvKiBTVlI0ICovCisjaWZuZGVmIFNURVJNSU9YCisjZGVmaW5lIFNURVJNSU9YCisj ZW5kaWYJLyogU1RFUk1JT1ggKi8KKyNpZm5kZWYgU0VMRUNUCisjZGVmaW5lIFNFTEVDVAorI2Vu ZGlmCS8qIFNFTEVDVCAqLworI2lmbmRlZiBGTkZMT0FUCisjZGVmaW5lIEZORkxPQVQKKyNlbmRp ZgkvKiBGTkZMT0FUICovCisjaWZuZGVmIERJUkVOVAorI2RlZmluZSBESVJFTlQKKyNlbmRpZgkv KiBESVJFTlQgKi8KKyNpZm5kZWYgQklHQlVGT0sKKyNkZWZpbmUgQklHQlVGT0sKKyNlbmRpZgkv KiBCSUdCVUZPSyAqLworI2lmbmRlZiBDS19ORVdURVJNCisjZGVmaW5lIENLX05FV1RFUk0KKyNl bmRpZgkvKiBDS19ORVdURVJNICovCisjZW5kaWYgLyogU09MQVJJUyAqLworCisjaWZkZWYgU1VO NFM1CQkJCS8qIFN1bi00IFN5c3RlbSBWIGVudmlyb25tZW50ICovCisjaWZuZGVmIFNWUjMJCQkJ LyogaW1wbGllcyBTeXN0ZW0gViBSMyBvciBsYXRlciAqLworI2RlZmluZSBTVlIzCisjZW5kaWYg LyogU1ZSMyAqLworI2VuZGlmIC8qIFNVTjRTNSAqLworI2lmZGVmIFNVTk9TNDEJCQkJLyogU1VO T1M0MSBpbXBsaWVzIFNVTk9TNCAqLworI2lmbmRlZiBTVU5PUzQKKyNkZWZpbmUgU1VOT1M0Cisj ZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogU1VOT1M0MSAqLworCisjaWZkZWYgU1VONFM1 CQkJCS8qIFN1bi00IFN5c3RlbSBWIGVudmlyb25tZW50ICovCisjaWZuZGVmIFNWUjMJCQkJLyog aW1wbGllcyBTeXN0ZW0gViBSMyBvciBsYXRlciAqLworI2RlZmluZSBTVlIzCisjZW5kaWYgLyog U1ZSMyAqLworI2VuZGlmIC8qIFNVTjRTNSAqLworCisjaWZkZWYgU1VOT1M0MQkJCQkvKiBTVU5P UzQxIGltcGxpZXMgU1VOT1M0ICovCisjaWZuZGVmIFNVTk9TNAorI2RlZmluZSBTVU5PUzQKKyNl bmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBTVU5PUzQxICovCisKKyNpZmRlZiBTVU5PUzQJ CQkJLyogQnVpbHQtaW4gU1VOT1M0IG1ha2VmaWxlIGVudHJ5ICovCisjaWZuZGVmIFVOSVgKKyNk ZWZpbmUgVU5JWAorI2VuZGlmIC8qIFVOSVggKi8KKyNpZm5kZWYgQlNENAorI2RlZmluZSBCU0Q0 CisjZW5kaWYgLyogQlNENCAqLworI2lmbmRlZiBOT1NFVEJVRgorI2RlZmluZSBOT1NFVEJVRgor I2VuZGlmIC8qIE5PU0VUQlVGICovCisjaWZuZGVmIERJUkVOVAorI2RlZmluZSBESVJFTlQKKyNl bmRpZiAvKiBESVJFTlQgKi8KKyNpZm5kZWYgTk9ORVQKKyNpZm5kZWYgVENQU09DS0VUCisjZGVm aW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5PTkVUICov CisjaWZuZGVmIFNBVkVEVUlECisjZGVmaW5lIFNBVkVEVUlECisjZW5kaWYgLyogU0FWRURVSUQg Ki8KKyNpZm5kZWYgRFlOQU1JQworI2RlZmluZSBEWU5BTUlDCisjZW5kaWYgLyogRFlOQU1JQyAq LworI2VuZGlmIC8qIFNVTk9TNCAqLworCisjaWZkZWYgU09MQVJJUwkJCQkvKiBCdWlsdCBpbiBt YWtlZmlsZSBlbnRyeSAqLworI2lmbmRlZiBOT1NFVEJVRgkJCS8qIGZvciBTb2xhcmlzIDIueCAq LworI2RlZmluZSBOT1NFVEJVRgorI2VuZGlmIC8qIE5PU0VUQlVGICovCisjaWZuZGVmIE5PQ1VS U0VTCisjaWZuZGVmIENLX0NVUlNFUworI2RlZmluZSBDS19DVVJTRVMKKyNlbmRpZiAvKiBDS19D VVJTRVMgKi8KKyNlbmRpZiAvKiBOT0NVUlNFUyAqLworI2lmbmRlZiBDS19ORVdURVJNCisjZGVm aW5lIENLX05FV1RFUk0KKyNlbmRpZiAvKiBDS19ORVdURVJNICovCisjaWZuZGVmIERJUkVOVAor I2RlZmluZSBESVJFTlQKKyNlbmRpZiAvKiBESVJFTlQgKi8KKyNpZm5kZWYgTk9ORVQKKyNpZm5k ZWYgVENQU09DS0VUCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor I2VuZGlmIC8qIE5PTkVUICovCisjaWZuZGVmIFVOSVgKKyNkZWZpbmUgVU5JWAorI2VuZGlmIC8q IFVOSVggKi8KKyNpZm5kZWYgU1ZSNAorI2RlZmluZSBTVlI0CisjZW5kaWYgLyogU1ZSNCAqLwor I2lmbmRlZiBIQUREUkxJU1QKKyNkZWZpbmUgSEFERFJMSVNUCisjZW5kaWYgLyogSEFERFJMSVNU ICovCisjaWZuZGVmIFNURVJNSU9YCisjZGVmaW5lIFNURVJNSU9YCisjZW5kaWYgLyogU1RFUk1J T1ggKi8KKyNpZm5kZWYgU0VMRUNUCisjZGVmaW5lIFNFTEVDVAorI2VuZGlmIC8qIFNFTEVDVCAq LworI2lmbmRlZiBEWU5BTUlDCisjZGVmaW5lIERZTkFNSUMKKyNlbmRpZiAvKiBEWU5BTUlDICov CisjaWZuZGVmIE5PVVVDUAorI2lmbmRlZiBIREJVVUNQCisjZGVmaW5lIEhEQlVVQ1AKKyNlbmRp ZiAvKiBIREJVVUNQICovCisjZW5kaWYgLyogTk9VVUNQICovCisjZW5kaWYgLyogU09MQVJJUyAq LworCisvKiBGZWF0dXJlcyB0aGF0IGNhbiBiZSBlbGltaW5hdGVkIGZyb20gYSBuby1maWxlLXRy YW5zZmVyIHZlcnNpb24gKi8KKworI2lmZGVmIE5PWEZFUgorI2lmbmRlZiBOT0ZUUAorI2RlZmlu ZSBOT0ZUUAorI2VuZGlmIC8qIE5PRlRQICovCisjaWZuZGVmIE9TMgorI2lmbmRlZiBOT0NVUlNF UwkJCS8qIEZ1bGxzY3JlZW4gZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCisjZGVmaW5lIE5PQ1VS U0VTCisjZW5kaWYgLyogTk9DVVJTRVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9D S1hZWgkJCQkvKiBYWVpNT0RFTSBzdXBwb3J0ICovCisjZGVmaW5lIE5PQ0tYWVoKKyNlbmRpZiAv KiBOT0NLWFlaICovCisjaWZuZGVmIE5PQ0tTUEVFRAkJCS8qIEN0cmwtY2hhciB1bnByZWZpeGlu ZyAqLworI2RlZmluZSBOT0NLU1BFRUQKKyNlbmRpZiAvKiBOT0NLU1BFRUQgKi8KKyNpZm5kZWYg Tk9TRVJWRVIJCQkvKiBTZXJ2ZXIgbW9kZSAqLworI2RlZmluZSBOT1NFUlZFUgorI2VuZGlmIC8q IE5PU0VSVkVSICovCisjaWZuZGVmIE5PQ0tUSU1FUlMJCQkvKiBEeW5hbWljIHBhY2tldCB0aW1l cnMgKi8KKyNkZWZpbmUgTk9DS1RJTUVSUworI2VuZGlmIC8qIE5PQ0tUSU1FUlMgKi8KKyNpZm5k ZWYgTk9QQVRURVJOUwkJCS8qIEZpbGUtdHlwZSBwYXR0ZXJucyAqLworI2RlZmluZSBOT1BBVFRF Uk5TCisjZW5kaWYgLyogTk9QQVRURVJOUyAqLworI2lmbmRlZiBOT1NUUkVBTUlORwkJCS8qIFN0 cmVhbWluZyAqLworI2RlZmluZSBOT1NUUkVBTUlORworI2VuZGlmIC8qIE5PU1RSRUFNSU5HICov CisjaWZuZGVmIE5PSUtTRAkJCQkvKiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSAqLworI2RlZmlu ZSBOT0lLU0QKKyNlbmRpZiAvKiBOT0lLU0QgKi8KKyNpZm5kZWYgTk9QSVBFU0VORAkJCS8qIFNl bmRpbmcgZnJvbSBwaXBlcyAqLworI2RlZmluZSBOT1BJUEVTRU5ECisjZW5kaWYgLyogTk9QSVBF U0VORCAqLworI2lmbmRlZiBOT0FVVE9ETAkJCS8qIEF1dG9kb3dubG9hZCAqLworI2RlZmluZSBO T0FVVE9ETAorI2VuZGlmIC8qIE5PQVVUT0RMICovCisjaWZuZGVmIE5PTVNFTkQJCQkJLyogTVNF TkQgKi8KKyNkZWZpbmUgTk9NU0VORAorI2VuZGlmIC8qIE5PTVNFTkQgKi8KKyNpZm5kZWYgTk9U TE9HCQkJCS8qIFRyYW5zYWN0aW9uIGxvZ2dpbmcgKi8KKyNkZWZpbmUgTk9UTE9HCisjZW5kaWYg LyogTk9UTE9HICovCisjaWZuZGVmIE5PQ0tYWENIQVIJCQkvKiBQYWNrZXQgY2hhcmFjdGVyIGRv dWJsaW5nICovCisjZGVmaW5lIE5PQ0tYWENIQVIKKyNlbmRpZiAvKiBOT0NLWFhDSEFSICovCisj ZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBOT0lDUAkJCQkvKiBObyBJbnRlcmFjdGl2ZSBD b21tYW5kIFBhcnNlciAqLworI2lmbmRlZiBOT0RJQUwJCQkJLyogSW1wbGllcyBObyBESUFMIGNv bW1hbmQgKi8KKyNkZWZpbmUgTk9ESUFMCisjZW5kaWYgLyogTk9ESUFMICovCisjaWZuZGVmIE5P Q0tYWVoJCQkJLyogYW5kIG5vIGV4dGVybmFsIHByb3RvY29scyAqLworI2RlZmluZSBOT0NLWFla CisjZW5kaWYgLyogTk9DS1hZWiAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9J S1NECisjaWZkZWYgSUtTRE9OTFkKKyNpZm5kZWYgSUtTRAorI2RlZmluZSBJS1NECisjZW5kaWYg LyogSUtTRCAqLworI2lmbmRlZiBOT0xPQ0FMCisjZGVmaW5lIE5PTE9DQUwKKyNlbmRpZiAvKiBO T0xPQ0FMICovCisjaWZuZGVmIE5PUFVTSAorI2RlZmluZSBOT1BVU0gKKyNlbmRpZiAvKiBOT1BV U0ggKi8KKyNpZm5kZWYgVE5DT0RFCisjZGVmaW5lIFROQ09ERQorI2VuZGlmIC8qIFROQ09ERSAq LworI2lmbmRlZiBUQ1BTT0NLRVQKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQU09D S0VUICovCisjaWZuZGVmIE5FVENPTk4KKyNkZWZpbmUgTkVUQ09OTgorI2VuZGlmIC8qIE5FVENP Tk4gKi8KKyNpZmRlZiBTVU5YMjUKKyN1bmRlZiBTVU5YMjUKKyNlbmRpZiAvKiBTVU5YMjUgKi8K KyNpZmRlZiBJQk1YMjUKKyN1bmRlZiBJQk1YMjUKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNpZmRl ZiBTVFJBVFVTWDI1CisjdW5kZWYgU1RSQVRVU1gyNQorI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8K KyNpZmRlZiBDS19ORVRCSU9TCisjdW5kZWYgQ0tfTkVUQklPUworI2VuZGlmIC8qIENLX05FVEJJ T1MgKi8KKyNpZmRlZiBTVVBFUkxBVAorI3VuZGVmIFNVUEVSTEFUCisjZW5kaWYgLyogU1VQRVJM QVQgKi8KKyNpZmRlZiBOUElQRQorI3VuZGVmIE5QSVBFCisjZW5kaWYgLyogTlBJUEUgKi8KKyNp ZmRlZiBORVRGSUxFCisjdW5kZWYgTkVURklMRQorI2VuZGlmIC8qIE5FVEZJTEUgKi8KKyNpZmRl ZiBORVRDTUQKKyN1bmRlZiBORVRDTUQKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQ VFkKKyN1bmRlZiBORVRQVFkKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNpZmRlZiBSTE9HQ09ERQor I3VuZGVmIFJMT0dDT0RFCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBORVRETEwKKyN1 bmRlZiBORVRETEwKKyNlbmRpZiAvKiBORVRETEwgKi8KKyNpZm5kZWYgTk9TU0gKKyN1bmRlZiBO T1NTSAorI2VuZGlmIC8qIE5PU1NIICovCisjaWZuZGVmIE5PRk9SV0FSRFgKKyNkZWZpbmUgTk9G T1JXQVJEWAorI2VuZGlmIC8qIE5PRk9SV0FSRFggKi8KKyNpZm5kZWYgTk9CUk9XU0VSCisjZGVm aW5lIE5PQlJPV1NFUgorI2VuZGlmIC8qIE5PQlJPV1NFUiAqLworI2lmbmRlZiBOT0hUVFAKKyNk ZWZpbmUgTk9IVFRQCisjZW5kaWYgLyogTk9IVFRQICovCisjaWZuZGVmIE5PRlRQCisjZGVmaW5l IE5PRlRQCisjZW5kaWYgLyogTk9GVFAgKi8KKyNpZm5kZWYgTk9fQ09NUE9SVAorI2RlZmluZSBO T19DT01QT1JUCisjZW5kaWYgLyogTk9fQ09NUE9SVCAqLworI2VuZGlmIC8qIElLU0RPTkxZICov CisjZW5kaWYgLyogTk9JS1NEICovCisKKy8qIEZlYXR1cmVzIHRoYXQgY2FuIGJlIGVsaW1pbmF0 ZWQgZnJvbSBhIHJlbW90ZS1vbmx5IHZlcnNpb24gKi8KKworI2lmZGVmIE5PTE9DQUwKKyNpZm5k ZWYgTk9GVFAKKyNkZWZpbmUgTk9GVFAKKyNlbmRpZiAvKiBOT0ZUUCAqLworI2lmbmRlZiBOT0hU VFAKKyNkZWZpbmUgTk9IVFRQCisjZW5kaWYgLyogTk9IVFRQICovCisjaWZuZGVmIE5PU1NICisj ZGVmaW5lIE5PU1NICisjZW5kaWYgLyogTk9TU0ggKi8KKyNpZm5kZWYgTk9URVJNCisjZGVmaW5l IE5PVEVSTQorI2VuZGlmIC8qIE5PVEVSTSAqLworI2lmbmRlZiBOT0NVUlNFUwkJCS8qIEZ1bGxz Y3JlZW4gZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCisjZGVmaW5lIE5PQ1VSU0VTCisjZW5kaWYg LyogTk9DVVJTRVMgKi8KKyNpZm5kZWYgTk9ESUFMCisjZGVmaW5lIE5PRElBTAorI2VuZGlmIC8q IE5PRElBTCAqLworI2lmbmRlZiBOT1NDUklQVAorI2RlZmluZSBOT1NDUklQVAorI2VuZGlmIC8q IE5PU0NSSVBUICovCisjaWZuZGVmIE5PU0VUS0VZCisjZGVmaW5lIE5PU0VUS0VZCisjZW5kaWYg LyogTk9TRVRLRVkgKi8KKyNpZm5kZWYgTk9LVkVSQlMKKyNkZWZpbmUgTk9LVkVSQlMKKyNlbmRp ZiAvKiBOT0tWRVJCUyAqLworI2lmbmRlZiBOT1hNSVQKKyNkZWZpbmUgTk9YTUlUCisjZW5kaWYg LyogTk9YTUlUICovCisjaWZkZWYgQ0tfQ1VSU0VTCisjdW5kZWYgQ0tfQ1VSU0VTCisjZW5kaWYg LyogQ0tfQ1VSU0VTICovCisjaWZuZGVmIElLU0RPTkxZCisjaWZuZGVmIE5PQVBDCisjZGVmaW5l IE5PQVBDCisjZW5kaWYgLyogTk9BUEMgKi8KKyNpZm5kZWYgTk9ORVQKKyNkZWZpbmUgTk9ORVQK KyNlbmRpZiAvKiBOT05FVCAqLworI2VuZGlmIC8qIElLU0RPTkxZICovCisjZW5kaWYgLyogTk9M T0NBTCAqLworCisjaWZkZWYgTk9ORVQKKyNpZmRlZiBORVRDT05OCisjdW5kZWYgTkVUQ09OTgor I2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyN1bmRlZiBUQ1BTT0NLRVQK KyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZm5kZWYgTk9UQ1BPUFRTCisjZGVmaW5lIE5PVENQ T1BUUworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworI2lmZGVmIFNVTlgyNQorI3VuZGVmIFNVTlgy NQorI2VuZGlmIC8qIFNVTlgyNSAqLworI2lmZGVmIElCTVgyNQorI3VuZGVmIElCTVgyNQorI2Vu ZGlmIC8qIElCTVgyNSAqLworI2lmZGVmIFNUUkFUVVNYMjUKKyN1bmRlZiBTVFJBVFVTWDI1Cisj ZW5kaWYgLyogU1RSQVRVU1gyNSAqLworI2lmZGVmIENLX05FVEJJT1MKKyN1bmRlZiBDS19ORVRC SU9TCisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworI2lmZGVmIFNVUEVSTEFUCisjdW5kZWYgU1VQ RVJMQVQKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworI2lmZGVmIE5QSVBFCisjdW5kZWYgTlBJUEUK KyNlbmRpZiAvKiBOUElQRSAqLworI2lmZGVmIE5FVEZJTEUKKyN1bmRlZiBORVRGSUxFCisjZW5k aWYgLyogTkVURklMRSAqLworI2lmZGVmIE5FVENNRAorI3VuZGVmIE5FVENNRAorI2VuZGlmIC8q IE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorI3VuZGVmIE5FVFBUWQorI2VuZGlmIC8qIE5FVFBU WSAqLworI2lmZGVmIFJMT0dDT0RFCisjdW5kZWYgUkxPR0NPREUKKyNlbmRpZiAvKiBSTE9HQ09E RSAqLworI2lmZGVmIE5FVERMTAorI3VuZGVmIE5FVERMTAorI2VuZGlmIC8qIE5FVERMTCAqLwor I2lmbmRlZiBOT1NTSAorI2RlZmluZSBOT1NTSAorI2VuZGlmIC8qIE5PU1NIICovCisjaWZuZGVm IE5PRlRQCisjZGVmaW5lIE5PRlRQCisjZW5kaWYgLyogTk9GVFAgKi8KKyNpZm5kZWYgTk9IVFRQ CisjZGVmaW5lIE5PSFRUUAorI2VuZGlmIC8qIE5PSFRUUCAqLworI2lmbmRlZiBOT0JST1dTRVIK KyNkZWZpbmUgTk9CUk9XU0VSCisjZW5kaWYgLyogTk9CUk9XU0VSICovCisjaWZuZGVmIE5PRk9S V0FSRFgKKyNkZWZpbmUgTk9GT1JXQVJEWAorI2VuZGlmIC8qIE5PRk9SV0FSRFggKi8KKyNlbmRp ZiAvKiBOT05FVCAqLworCisjaWZkZWYgSUtTRE9OTFkKKyNpZmRlZiBTVU5YMjUKKyN1bmRlZiBT VU5YMjUKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKyNpZmRlZiBJQk1YMjUKKyN1bmRlZiBJQk1YMjUK KyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNpZmRlZiBTVFJBVFVTWDI1CisjdW5kZWYgU1RSQVRVU1gy NQorI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisjdW5kZWYgQ0tf TkVUQklPUworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNpZmRlZiBTVVBFUkxBVAorI3VuZGVm IFNVUEVSTEFUCisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKyNpZmRlZiBOUElQRQorI3VuZGVmIE5Q SVBFCisjZW5kaWYgLyogTlBJUEUgKi8KKyNpZmRlZiBORVRGSUxFCisjdW5kZWYgTkVURklMRQor I2VuZGlmIC8qIE5FVEZJTEUgKi8KKyNpZmRlZiBORVRDTUQKKyN1bmRlZiBORVRDTUQKKyNlbmRp ZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyN1bmRlZiBORVRQVFkKKyNlbmRpZiAvKiBO RVRQVFkgKi8KKyNpZmRlZiBSTE9HQ09ERQorI3VuZGVmIFJMT0dDT0RFCisjZW5kaWYgLyogUkxP R0NPREUgKi8KKyNpZmRlZiBORVRETEwKKyN1bmRlZiBORVRETEwKKyNlbmRpZiAvKiBORVRETEwg Ki8KKyNpZm5kZWYgTk9TU0gKKyNkZWZpbmUgTk9TU0gKKyNlbmRpZiAvKiBOT1NTSCAqLworI2lm bmRlZiBOT0hUVFAKKyNkZWZpbmUgTk9IVFRQCisjZW5kaWYgLyogTk9IVFRQICovCisjaWZuZGVm IE5PQlJPV1NFUgorI2RlZmluZSBOT0JST1dTRVIKKyNlbmRpZiAvKiBOT0JST1dTRVIgKi8KKyNl bmRpZiAvKiBJS1NET05MWSAqLworLyoKKyAgTm90ZSB0aGF0IG5vbmUgb2YgdGhlIGFib3ZlIHBy ZWNsdWRlcyBUTkNPREUsIHdoaWNoIGNhbiBiZSBkZWZpbmVkIGluCisgIHRoZSBhYnNlbmNlIG9m IFRDUFNPQ0tFVCwgZXRjLCB0byBlbmFibGUgc2VydmVyLXNpZGUgVGVsbmV0IG5lZ290YXRpb24u CisqLworI2lmbmRlZiBUTkNPREUJCQkJLyogVGhpcyBpcyBmb3IgdGhlIGJlbmVmaXQgb2YgKi8K KyNpZmRlZiBUQ1BTT0NLRVQJCQkvKiBtb2R1bGVzIHRoYXQgbWlnaHQgbmVlZCBUTkNPREUgKi8K KyNkZWZpbmUgVE5DT0RFCQkJCS8qIG5vdCBhbGwgb2YgY2tjbmV0LmguLi4gKi8KKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmbmRlZiBORVRDT05OCisj aWZkZWYgVENQU09DS0VUCisjZGVmaW5lIE5FVENPTk4KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K KyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZm5kZWYgREVGUEFSCQkJCS8qIERlZmF1bHQgcGFy aXR5ICovCisjZGVmaW5lIERFRlBBUiAwCQkJLyogTXVzdCBiZSBoZXJlIGJlY2F1c2UgaXQgaXMg dXNlZCAqLworI2VuZGlmIC8qIERFRlBBUiAqLwkJCS8qIGJ5IGFsbCBjbGFzc2VzIG9mIG1vZHVs ZXMgKi8KKworI2lmZGVmIE5UCisjaWZuZGVmIE9TMk9SV0lOMzIKKyNkZWZpbmUgT1MyT1JXSU4z MgorI2VuZGlmIC8qIE9TMk9SV0lOMzIgKi8KKyNpZm5kZWYgT1MyCisjZGVmaW5lIFdJTjMyT05M WQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5UICovCisKKyNpZmRlZiBPUzIJCQkJLyog Rm9yIE9TLzIgZGVidWdnaW5nICovCisjaWZuZGVmIE9TMk9SV0lOMzIKKyNkZWZpbmUgT1MyT1JX SU4zMgorI2VuZGlmIC8qIE9TMk9SV0lOMzIgKi8KKyNpZmRlZiBOVAorI2RlZmluZSBOT0NSWVBU CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBOVFNJRworI2Vsc2UgLyogTlQgKi8KKyNk ZWZpbmUgT1MyT05MWQorI2luY2x1ZGUgPG9zMmRlZi5oPgorI2VuZGlmIC8qIE5UICovCisjaWZu ZGVmIE9TMk9SVU5JWAorI2RlZmluZSBPUzJPUlVOSVgKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8K KyNpZm5kZWYgT1MyT1JWTVMKKyNkZWZpbmUgT1MyT1JWTVMKKyNlbmRpZiAvKiBPUzJPUlZNUyAq LworI2VuZGlmIC8qIE9TMiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4JCQkvKiBCZWdpbiBieSBp bmNsdWRpbmcgdGhpcy4gKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgkJCS8qIGFuZCB0aGlzLiAqLwor CisjaWZkZWYgVk1TCisjaW5jbHVkZSA8dHlwZXMuaD4JCQkvKiBFbnN1cmUgb2ZmX3QuICovCisj aW5jbHVkZSAiY2t2cm1zLmgiCQkJLyogR2V0IE5BTURFRiBOQU1YX0NfTUFYUlNTLiAqLworI2Vu ZGlmIC8qIGRlZiBWTVMgKi8KKworLyogU3lzdGVtLXR5cGUgY29tcGlsYXRpb24gc3dpdGNoZXMg Ki8KKworI2lmZGVmIEZUMjEJCQkJLyogRm9ydHVuZSBGb3I6UHJvIDIuMSBpbXBsaWVzIDEuOCAq LworI2lmbmRlZiBGVDE4CisjZGVmaW5lIEZUMTgKKyNlbmRpZiAvKiBGVDE4ICovCisjZW5kaWYg LyogRlQyMSAqLworCisjaWZkZWYgX19ic2RpX18KKyNpZm5kZWYgQlNESQorI2RlZmluZSBCU0RJ CisjZW5kaWYgLyogQlNESSAqLworI2VuZGlmIC8qIF9fYnNkaV9fICovCisKKyNpZmRlZiBBSVhQ UzIJCQkJLyogQUlYUFMyIGltcGxpZXMgQUlYMzcwICovCisjaWZuZGVmIEFJWDM3MAorI2RlZmlu ZSBBSVgzNzAKKyNlbmRpZiAvKiBBSVgzNzAgKi8KKyNlbmRpZiAvKiBBSVhQUzIgKi8KKworI2lm ZGVmIEFJWDM3MAkJCQkvKiBBSVggUFMvMiBvciAzNzAgaW1wbGllcyBCU0Q0ICovCisjaWZuZGVm IEJTRDQKKyNkZWZpbmUgQlNENAorI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBBSVgzNzAg Ki8KKworI2lmZGVmIEFJWEVTQQkJCQkvKiBBSVgvRVNBIGltcGxpZXMgQlNENC40ICovCisjaWZu ZGVmIEJTRDQ0CisjZGVmaW5lIEJTRDQ0CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBB SVhFU0EgKi8KKworI2lmZGVmIEFJWDUzCQkJCS8qIEFJWDUzIGltcGxpZXMgQUlYNTIgKi8KKyNp Zm5kZWYgQUlYNTIKKyNkZWZpbmUgQUlYNTIKKyNlbmRpZiAvKiBBSVg1MiAqLworI2VuZGlmIC8q IEFJWDUzICovCisKKyNpZmRlZiBBSVg1MgkJCQkvKiBBSVg1MiBpbXBsaWVzIEFJWDUxICovCisj aWZuZGVmIEFJWDUxCisjZGVmaW5lIEFJWDUxCisjZW5kaWYgLyogQUlYNTEgKi8KKyNlbmRpZiAv KiBBSVg1MiAqLworCisjaWZkZWYgQUlYNTEJCQkJLyogQUlYNTEgaW1wbGllcyBBSVg1MCAqLwor I2lmbmRlZiBBSVg1MAorI2RlZmluZSBBSVg1MAorI2VuZGlmIC8qIEFJWDUwICovCisjZW5kaWYg LyogQUlYNTEgKi8KKworI2lmZGVmIEFJWDUwCQkJCS8qIEFJWDUwIGltcGxpZXMgQUlYNDUgKi8K KyNpZm5kZWYgQUlYNDUKKyNkZWZpbmUgQUlYNDUKKyNlbmRpZiAvKiBBSVg0NSAqLworI2VuZGlm IC8qIEFJWDUwICovCisKKyNpZmRlZiBBSVg0NQkJCQkvKiBBSVg0NSBpbXBsaWVzIEFJWDQ0ICov CisjaWZuZGVmIEFJWDQ0CisjZGVmaW5lIEFJWDQ0CisjZW5kaWYgLyogQUlYNDQgKi8KKyNlbmRp ZiAvKiBBSVg0NSAqLworCisjaWZkZWYgQUlYNDQJCQkJLyogQUlYNDQgaW1wbGllcyBBSVg0MyAq LworI2lmbmRlZiBBSVg0MworI2RlZmluZSBBSVg0MworI2VuZGlmIC8qIEFJWDQzICovCisjZW5k aWYgLyogQUlYNDQgKi8KKworI2lmZGVmIEFJWDQzCQkJCS8qIEFJWDQzIGltcGxpZXMgQUlYNDIg Ki8KKyNpZm5kZWYgQUlYNDIKKyNkZWZpbmUgQUlYNDIKKyNlbmRpZiAvKiBBSVg0MiAqLworI2Vu ZGlmIC8qIEFJWDQzICovCisKKyNpZmRlZiBBSVg0MgkJCQkvKiBBSVg0MiBpbXBsaWVzIEFJWDQx ICovCisjaWZuZGVmIEFJWDQxCisjZGVmaW5lIEFJWDQxCisjZW5kaWYgLyogQUlYNDEgKi8KKyNl bmRpZiAvKiBBSVg0MiAqLworCisjaWZkZWYgU1Y2OFIzVjYJCQkJLyogU3lzdGVtIFYvNjggUjMy VjYgaW1wbGllcyBTVlIzICovCisjaWZuZGVmIFNWUjMKKyNkZWZpbmUgU1ZSMworI2VuZGlmIC8q IFNWUjMgKi8KKyNlbmRpZiAvKiBTVjY4UjNWNiAqLworCisjaWZkZWYgU1Y4OFIzMgkJCQkvKiBT eXN0ZW0gVi84OCBSMzIgaW1wbGllcyBTVlIzICovCisjaWZuZGVmIFNWUjMKKyNkZWZpbmUgU1ZS MworI2VuZGlmIC8qIFNWUjMgKi8KKyNlbmRpZiAvKiBTVjg4UjMyICovCisKKyNpZmRlZiBER1VY NTQwCQkJCS8qIERHIFVYIDUuNDAgaW1wbGllcyBTeXMgViBSIDQgKi8KKyNpZm5kZWYgU1ZSNAor I2RlZmluZSBTVlI0CisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIERHVVg1NDAgKi8KKwor I2lmbmRlZiBER1VYCisjaWZkZWYgREdVWDU0MAkJCQkvKiBERy9VWCA1LjQwIGltcGxpZXMgREdV WCAqLworI2RlZmluZSBER1VYCisjZWxzZQorI2lmZGVmIERHVVg0MzAJCQkJLyogU28gZG9lcyBE Ry9VWCA0LjMwICovCisjZGVmaW5lIERHVVgKKyNlbmRpZiAvKiBER1VYNDMwICovCisjZW5kaWYg LyogREdVWDU0MCAqLworI2VuZGlmIC8qIERHVVggKi8KKworI2lmZGVmIElSSVg2NQkJCQkvKiBJ UklYIDYuNSBpbXBsaWVzIElSSVggNi40ICovCisjaWZuZGVmIElSSVg2NAorI2RlZmluZSBJUklY NjQKKyNlbmRpZiAvKiBJUklYNjQgKi8KKyNlbmRpZiAvKiBJUklYNjUgKi8KKworI2lmZGVmIElS SVg2NAkJCQkvKiBJUklYIDYuNCBpbXBsaWVzIElSSVggNi4yICovCisjaWZuZGVmIEJTRDQ0T1JQ T1NJWAorI2RlZmluZSBCU0Q0NE9SUE9TSVgJCQkvKiBmb3IgY2t1dGlvJ3MgYmVuZWZpdCAqLwor I2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2lmbmRlZiBJUklYNjIKKyNkZWZpbmUgSVJJWDYy CisjZW5kaWYgLyogSVJJWDYyICovCisjZW5kaWYgLyogSVJJWDY0ICovCisKKyNpZmRlZiBJUklY NjIJCQkJLyogSVJJWCA2LjIgaW1wbGllcyBJUklYIDYuMCAqLworI2lmbmRlZiBJUklYNjAKKyNk ZWZpbmUgSVJJWDYwCisjZW5kaWYgLyogSVJJWDYwICovCisjZW5kaWYgLyogSVJJWDYyICovCisK KyNpZmRlZiBJUklYNjAJCQkJLyogSVJJWCA2LjAgaW1wbGllcyBJUklYIDUuMSAqLworI2lmbmRl ZiBJUklYNTEKKyNkZWZpbmUgSVJJWDUxCisjZW5kaWYgLyogSVJJWDUxICovCisjaWZuZGVmIElS SVg1MgkJCQkvKiBBbmQgSVJJWCA1LjIgKGZvciBod2ZjKSAqLworI2RlZmluZSBJUklYNTIKKyNl bmRpZiAvKiBJUklYNTIgKi8KKyNlbmRpZiAvKiBJUklYNjAgKi8KKworI2lmbmRlZiBJUklYCQkJ CS8qIElSSVggNC4wIG9yIGdyZWF0ZXIgaW1wbGllcyBJUklYICovCisjaWZkZWYgSVJJWDY0Cisj ZGVmaW5lIElSSVgKKyNlbHNlCisjaWZkZWYgSVJJWDYyCisjZGVmaW5lIElSSVgKKyNlbHNlCisj aWZkZWYgSVJJWDYwCisjZGVmaW5lIElSSVgKKyNlbHNlCisjaWZkZWYgSVJJWDUxCisjZGVmaW5l IElSSVgKKyNlbHNlCisjaWZkZWYgSVJJWDQwCisjZGVmaW5lIElSSVgKKyNlbmRpZiAvKiBJUklY NDAgKi8KKyNlbmRpZiAvKiBJUklYNTEgKi8KKyNlbmRpZiAvKiBJUklYNjAgKi8KKyNlbmRpZiAv KiBJUklYNjIgKi8KKyNlbmRpZiAvKiBJUklYNjQgKi8KKyNlbmRpZiAvKiBJUklYICovCisKKyNp ZmRlZiBNSVBTCQkJCS8qIE1JUFMgU3lzdGVtIFYgZW52aXJvbm1lbnQgKi8KKyNpZm5kZWYgU1ZS MwkJCQkvKiBpbXBsaWVzIFN5c3RlbSBWIFIzIG9yIGxhdGVyICovCisjZGVmaW5lIFNWUjMKKyNl bmRpZiAvKiBTVlIzICovCisjZW5kaWYgLyogTUlQUyAqLworCisjaWZkZWYgSFBVWDkJCQkJLyog SFAtVVggOS54ICovCisjaWZuZGVmIFNWUjMKKyNkZWZpbmUgU1ZSMworI2VuZGlmIC8qIFNWUjMg Ki8KKyNpZm5kZWYgSFBVWAorI2RlZmluZSBIUFVYCisjZW5kaWYgLyogSFBVWCAqLworI2lmbmRl ZiBIUFVYOVBMVVMKKyNkZWZpbmUgSFBVWDlQTFVTCisjZW5kaWYgLyogSFBVWDlQTFVTICovCisj ZW5kaWYgLyogSFBVWDkgKi8KKworI2lmZGVmIEhQVVgxMAkJCQkvKiBIUC1VWCAxMC54ICovCisj aWZuZGVmIEhQVVgxMDEwCQkJLyogSWYgYW55dGhpbmcgaGlnaGVyIGlzIGRlZmluZWQgKi8KKyNp ZmRlZiBIUFVYMTAyMAkJCQkvKiBkZWZpbmUgSFBVWDEwMTAgdG9vLiAqLworI2RlZmluZSBIUFVY MTAxMAorI2VuZGlmIC8qIEhQVVgxMDIwICovCisjaWZkZWYgSFBVWDEwMzAKKyNkZWZpbmUgSFBV WDEwMTAKKyNlbmRpZiAvKiBIUFVYMTAzMCAqLworI2VuZGlmIC8qIEhQVVgxMDEwICovCisKKyNp ZmRlZiBIUFVYMTEwMAkJCQkvKiBIUC1VWCAxMS4wMCBpbXBsaWVzIDEwLjEwICovCisjaWZuZGVm IEhQVVgxMDEwCisjZGVmaW5lIEhQVVgxMDEwCisjZW5kaWYgLyogSFBVWDEwMTAgKi8KKyNlbmRp ZiAvKiBIUFVYMTEwMCAqLworCisjaWZuZGVmIFNWUjQKKyNkZWZpbmUgU1ZSNAorI2VuZGlmIC8q IFNWUjQgKi8KKyNpZm5kZWYgSFBVWAorI2RlZmluZSBIUFVYCisjZW5kaWYgLyogSFBVWCAqLwor I2lmbmRlZiBIUFVYOVBMVVMKKyNkZWZpbmUgSFBVWDlQTFVTCisjZW5kaWYgLyogSFBVWDlQTFVT ICovCisjZW5kaWYgLyogSFBVWDEwICovCisKKyNpZmRlZiBRTlgJCQkJLyogUU5YIFNvZnR3YXJl IFN5c3RlbXMgSW5jICovCisjaWZuZGVmIFBPU0lYCQkJCS8qIFFOWCA0LjAgb3IgbGF0ZXIgaXMg UE9TSVggKi8KKyNkZWZpbmUgUE9TSVgKKyNlbmRpZiAvKiBQT1NJWCAqLworI2lmbmRlZiBfXzM4 Nl9fCQkJCS8qIENvbWVzIGluIDE2LWJpdCBhbmQgMzItYml0ICovCisjZGVmaW5lIF9fMTZCSVRf XworI2RlZmluZSBDS19RTlgxNgorI2Vsc2UKKyNkZWZpbmUgX18zMkJJVF9fCisjZGVmaW5lIENL X1FOWDMyCisjZW5kaWYgLyogX18zODZfXyAqLworI2VuZGlmIC8qIFFOWCAqLworCisvKgorICA0 LjRCU0QgaXMgYSBtaXh0dXJlIG9mIFN5c3RlbSBWIFI0LCBQT1NJWCwgYW5kIDQuM0JTRC4KKyov CisjaWZkZWYgQlNENDQJCQkJLyogNC40IEJTRCAqLworI2lmbmRlZiBTVlI0CQkJCS8qIEJTRDQ0 IGltcGxpZXMgU1ZSNCAqLworI2RlZmluZSBTVlI0CisjZW5kaWYgLyogU1ZSNCAqLworI2lmbmRl ZiBOT1NFVEJVRgkJCS8qIE5PU0VUQlVGIGlzIHNhZmUgKi8KKyNkZWZpbmUgTk9TRVRCVUYKKyNl bmRpZiAvKiBOT1NFVEJVRiAqLworI2lmbmRlZiBESVJFTlQJCQkJLyogVXNlcyA8ZGlyZW50Lmg+ ICovCisjZGVmaW5lIERJUkVOVAorI2VuZGlmIC8qIERJUkVOVCAqLworI2VuZGlmIC8qIEJTRDQ0 ICovCisKKyNpZmRlZiBPUEVOQlNECQkJCS8qIE9wZW5CU0QgbWlnaHQgb3IgbWlnaHQgbm90ICov CisjaWZuZGVmIF9fT3BlbkJTRF9fCQkJLyogaGF2ZSB0aGlzIGRlZmluZWQuLi4gKi8KKyNkZWZp bmUgX19PcGVuQlNEX18KKyNlbmRpZiAvKiBfX09wZW5CU0RfXyAqLworI2VuZGlmIC8qIE9QRU5C U0QgKi8KKworI2lmZGVmIFNWUjMJCQkJLyogU1ZSMyBpbXBsaWVzIEFUVFNWICovCisjaWZuZGVm IEFUVFNWCisjZGVmaW5lIEFUVFNWCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBTVlIz ICovCisKKyNpZmRlZiBTVlI0CQkJCS8qIFNWUjQgaW1wbGllcyBBVFRTViAqLworI2lmbmRlZiBB VFRTVgorI2RlZmluZSBBVFRTVgorI2VuZGlmIC8qIEFUVFNWICovCisjaWZuZGVmIFNWUjMJCQkJ LyogLi4uYXMgd2VsbCBhcyBTVlIzICovCisjZGVmaW5lIFNWUjMKKyNlbmRpZiAvKiBTVlIzICov CisjZW5kaWYgLyogU1ZSNCAqLworCisjaWZkZWYgT1hPUworI2lmbmRlZiBBVFRTVgorI2RlZmlu ZSBBVFRTVgkJCQkvKiBPWE9TIGltcGxpZXMgQVRUU1YgKi8KKyNlbmRpZiAvKiAhIEFUVFNWICov CisjZGVmaW5lIFNXX0FDQ19JRAkJCS8qIGFjY2VzcygpIHdhbnRzIHByaXZzIG9uICovCisjZGVm aW5lIGtpbGwgcHJpdl9raWxsCQkJLyoga2lsbCgpIHdhbnRzIHByaXZzIG9uICovCisjaWZuZGVm IE5PU0VUQlVGCisjZGVmaW5lIE5PU0VUQlVGCQkJLyogTk9TRVRCVUYgaXMgc2FmZSAqLworI2Vu ZGlmIC8qICEgTk9TRVRCVUYgKi8KKyNlbmRpZiAvKiBPWE9TICovCisKKyNpZmRlZiBVVFNWCQkJ CS8qIFVUU1YgaW1wbGllcyBBVFRTViAqLworI2lmbmRlZiBBVFRTVgorI2RlZmluZSBBVFRTVgor I2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogVVRTViAqLworCisjaWZkZWYgWEVOSVgJCQkJ LyogWEVOSVggaW1wbGllcyBBVFRTViAqLworI2lmbmRlZiBBVFRTVgorI2RlZmluZSBBVFRTVgor I2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogWEVOSVggKi8KKworI2lmZGVmIEFVWAkJCQkv KiBBVVggaW1wbGllcyBBVFRTViAqLworI2lmbmRlZiBBVFRTVgorI2RlZmluZSBBVFRTVgorI2Vu ZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQVVYICovCisKKyNpZmRlZiBBVFQ3MzAwCQkJCS8q IEFUVDczMDAgaW1wbGllcyBBVFRTViAqLworI2lmbmRlZiBBVFRTVgorI2RlZmluZSBBVFRTVgor I2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworCisjaWZkZWYgQVRUNjMw MAkJCQkvKiBBVFQ2MzAwIGltcGxpZXMgQVRUU1YgKi8KKyNpZm5kZWYgQVRUU1YKKyNkZWZpbmUg QVRUU1YKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEFUVDYzMDAgKi8KKworI2lmZGVm IEhQVVgJCQkJLyogSFBVWCBpbXBsaWVzIEFUVFNWICovCisjaWZuZGVmIEFUVFNWCisjZGVmaW5l IEFUVFNWCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBIUFVYICovCisKKyNpZmRlZiBJ U0lJSQkJCQkvKiBJU0lJSSBpbXBsaWVzIEFUVFNWICovCisjaWZuZGVmIEFUVFNWCisjZGVmaW5l IEFUVFNWCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBJU0lJSSAqLworCisjaWZkZWYg TkVYVDMzCQkJCS8qIE5FWFQzMyBpbXBsaWVzIE5FWFQgKi8KKyNpZm5kZWYgTkVYVAorI2RlZmlu ZSBORVhUCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIE5FWFQzMyAqLworCisjaWZkZWYg TkVYVAkJCQkvKiBORVhUIGltcGxpZXMgQlNENCAqLworI2lmbmRlZiBCU0Q0CisjZGVmaW5lIEJT RDQKKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogTkVYVCAqLworCisjaWZkZWYgQlNENDEJ CQkJLyogQlNENDEgaW1wbGllcyBCU0Q0ICovCisjaWZuZGVmIEJTRDQKKyNkZWZpbmUgQlNENAor I2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBCU0Q0MSAqLworCisjaWZkZWYgQlNENDMJCQkJ LyogQlNENDMgaW1wbGllcyBCU0Q0ICovCisjaWZuZGVmIEJTRDQKKyNkZWZpbmUgQlNENAorI2Vu ZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBCU0Q0MyAqLworCisjaWZkZWYgQlNENAkJCQkvKiBC U0Q0IGltcGxpZXMgQU5ZQlNEICovCisjaWZuZGVmIEFOWUJTRAorI2RlZmluZSBBTllCU0QKKyNl bmRpZiAvKiBBTllCU0QgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisKKyNpZmRlZiBCU0QyOQkJCQkv KiBCU0QyOSBpbXBsaWVzIEFOWUJTRCAqLworI2lmbmRlZiBBTllCU0QKKyNkZWZpbmUgQU5ZQlNE CisjZW5kaWYgLyogQU5ZQlNEICovCisjZW5kaWYgLyogQlNEMjkgKi8KKworI2lmZGVmIEFUVFNW CQkJCS8qIEFUVFNWIGltcGxpZXMgVU5JWCAqLworI2lmbmRlZiBVTklYCisjZGVmaW5lIFVOSVgK KyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogQVRUU1YgKi8KKworI2lmZGVmIEFOWUJTRAkJ CQkvKiBBTllCU0QgaW1wbGllcyBVTklYICovCisjaWZuZGVmIFVOSVgKKyNkZWZpbmUgVU5JWAor I2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBBTllCU0QgKi8KKworI2lmZGVmIFBPU0lYCQkJ CS8qIFBPU0lYIGltcGxpZXMgVU5JWCAqLworI2lmbmRlZiBVTklYCisjZGVmaW5lIFVOSVgKKyNl bmRpZiAvKiBVTklYICovCisjaWZuZGVmIERJUkVOVAkJCQkvKiBhbmQgRElSRU5ULCBpLmUuIDxk aXJlbnQuaD4gKi8KKyNpZm5kZWYgU0RJUkVOVAorI2RlZmluZSBESVJFTlQKKyNlbmRpZiAvKiBT RElSRU5UICovCisjZW5kaWYgLyogRElSRU5UICovCisjaWZuZGVmIE5PRklMRUgJCQkJLyogUE9T SVggZG9lc24ndCB1c2UgPHN5cy9maWxlLmg+ICovCisjZGVmaW5lIE5PRklMRUgKKyNlbmRpZiAv KiBOT0ZJTEVIICovCisjZW5kaWYgLyogUE9TSVggKi8KKworI2lmZGVmIFY3CisjaWZuZGVmIFVO SVgKKyNkZWZpbmUgVU5JWAorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBWNyAqLworCisj aWZkZWYgQ09IRVJFTlQKKyNpZm5kZWYgVU5JWAorI2RlZmluZSBVTklYCisjZW5kaWYgLyogVU5J WCAqLworI2lmZGVmIENPTU1FTlQKKyNpZm5kZWYgTk9DVVJTRVMKKyNkZWZpbmUgTk9DVVJTRVMK KyNlbmRpZiAvKiBOT0NVUlNFUyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBD T0hFUkVOVCAqLworCisjaWZkZWYgTUlOSVgKKyNpZm5kZWYgVU5JWAorI2RlZmluZSBVTklYCisj ZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE1JTklYICovCisvKgorICBUaGUgc3ltYm9sIFNW T1JQT1NJWCBpcyBkZWZpbmVkIGZvciBib3RoIEFUJlQgYW5kIFBPU0lYIGNvbXBpbGF0aW9ucwor ICB0byBtYWtlIGl0IGVhc2llciB0byBzZWxlY3QgaXRlbXMgdGhhdCBTeXN0ZW0gViBhbmQgUE9T SVggaGF2ZSBpbiBjb21tb24sCisgIGJ1dCB3aGljaCBCU0QsIFY3LCBldGMsIGRvIG5vdCBoYXZl LgorKi8KKyNpZmRlZiBBVFRTVgorI2lmbmRlZiBTVk9SUE9TSVgKKyNkZWZpbmUgU1ZPUlBPU0lY CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjZW5kaWYgLyogQVRUU1YgKi8KKworI2lmZGVmIFBP U0lYCisjaWZuZGVmIFNWT1JQT1NJWAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRpZiAvKiBTVk9S UE9TSVggKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworCisvKgorICBUaGUgc3ltYm9sIFNWUjRPUlBP U0lYIGlzIGRlZmluZWQgZm9yIGJvdGggQVQmVCBTeXN0ZW0gViBSNCBhbmQgUE9TSVgKKyAgY29t cGlsYXRpb25zIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNlbGVjdCBpdGVtcyB0aGF0IFN5c3RlbSBW IFI0IGFuZCBQT1NJWAorICBoYXZlIGluIGNvbW1vbiwgYnV0IHdoaWNoIEJTRCwgVjcsIGFuZCBT eXN0ZW0gViBSMyBhbmQgZWFybGllciwgZXRjLCBkbworICBub3QgaGF2ZS4KKyovCisjaWZkZWYg UE9TSVgKKyNpZm5kZWYgU1ZSNE9SUE9TSVgKKyNkZWZpbmUgU1ZSNE9SUE9TSVgKKyNlbmRpZiAv KiBTVlI0T1JQT1NJWCAqLworI2VuZGlmIC8qIFBPU0lYICovCisjaWZkZWYgU1ZSNAorI2lmbmRl ZiBTVlI0T1JQT1NJWAorI2RlZmluZSBTVlI0T1JQT1NJWAorI2VuZGlmIC8qIFNWUjRPUlBPU0lY ICovCisjZW5kaWYgLyogU1ZSNCAqLworCisvKgorICBUaGUgc3ltYm9sIEJTRDQ0T1JQT1NJWCBp cyBkZWZpbmVkIGZvciBib3RoIDQuNEJTRCBhbmQgUE9TSVggY29tcGlsYXRpb25zCisgIHRvIG1h a2UgaXQgZWFzaWVyIHRvIHNlbGVjdCBpdGVtcyB0aGF0IDQuNEJTRCBhbmQgUE9TSVggaGF2ZSBp biBjb21tb24sCisgIGJ1dCB3aGljaCBTeXN0ZW0gViwgQlNELCBWNywgZXRjLCBkbyBub3QgaGF2 ZS4KKyovCisjaWZkZWYgQlNENDQKKyNpZm5kZWYgQlNENDRPUlBPU0lYCisjZGVmaW5lIEJTRDQ0 T1JQT1NJWAorI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisK KyNpZmRlZiBQT1NJWAorI2lmbmRlZiBCU0Q0NE9SUE9TSVgKKyNkZWZpbmUgQlNENDRPUlBPU0lY CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogUE9TSVggKi8KKworI2lmZGVm IFVOSVgJCQkJLyogRm9yIGl0ZW1zIGNvbW1vbiB0byBPUy8yIGFuZCBVTklYICovCisjaWZuZGVm IE9TMk9SVU5JWAorI2RlZmluZSBPUzJPUlVOSVgKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyNl bmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBVTklYCQkJCS8qIEZvciBpdGVtcyBjb21tb24gdG8g Vk1TIGFuZCBVTklYICovCisjZGVmaW5lIFZNU09SVU5JWAorI2Vsc2UKKyNpZmRlZiBWTVMKKyNk ZWZpbmUgVk1TT1JVTklYCisjaWZuZGVmIE9TMk9SVk1TCisjZGVmaW5lIE9TMk9SVk1TCisjZW5k aWYgLyogT1MyT1JWTVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisK KyNpZm5kZWYgVU5JWE9ST1NLCQkJLyogVU5JWCBvciBPUy05IChvciBPUy05MDAwKSAqLworI2lm ZGVmIFVOSVgKKyNkZWZpbmUgVU5JWE9ST1NLCisjZWxzZQorI2lmZGVmIE9TSworI2RlZmluZSBV TklYT1JPU0sKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyog VU5JWE9ST1NLICovCisKKyNpZm5kZWYgT1NLT1JVTklYCisjaWZkZWYgVU5JWE9ST1NLCisjZGVm aW5lIE9TS09SVU5JWAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2VuZGlmIC8qIE9TS09SVU5J WCAqLworCisjaWZkZWYgT1MyCisjZGVmaW5lIENLX0FOU0lDCQkgLyogT1MvMiBzdXBwb3J0cyBB TlNJQyBhbmQgbW9yZSBleHRlbnNpb25zICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBP U0Y1MAkJCSAgIC8qIE5ld2VyIE9TRi8xIHZlcnNpb25zIGltcGx5IG9sZGVyIG9uZXMgKi8KKyNp Zm5kZWYgT1NGNDAKKyNkZWZpbmUgT1NGNDAKKyNlbmRpZiAvKiBPU0Y0MCAqLworI2VuZGlmIC8q IE9TRjUwICovCisKKyNpZmRlZiBPU0Y0MAorI2lmbmRlZiBPU0YzMgorI2RlZmluZSBPU0YzMgor I2VuZGlmIC8qIE9TRjMyICovCisjZW5kaWYgLyogT1NGNDAgKi8KKworI2lmZGVmIE9TRjMyCisj aWZuZGVmIE9TRjMwCisjZGVmaW5lIE9TRjMwCisjZW5kaWYgLyogT1NGMzAgKi8KKyNlbmRpZiAv KiBPU0YzMiAqLworCisjaWZkZWYgT1NGMzAKKyNpZm5kZWYgT1NGMjAKKyNkZWZpbmUgT1NGMjAK KyNlbmRpZiAvKiBPU0YyMCAqLworI2VuZGlmIC8qIE9TRjMwICovCisKKyNpZmRlZiBPU0YyMAor I2lmbmRlZiBPU0YxMAorI2RlZmluZSBPU0YxMAorI2VuZGlmIC8qIE9TRjEwICovCisjZW5kaWYg LyogT1NGMjAgKi8KKworI2lmZGVmIF9fREVDQwkJCQkvKiBGb3IgREVDIEFscGhhIFZNUyBvciBP U0YvMSAqLworI2lmbmRlZiBDS19BTlNJQworI2RlZmluZSBDS19BTlNJQwkJCS8qIEV2ZW4gd2l0 aCAvc3RhbmQ9dmF4YywgbmVlZCBhbnNpICovCisjZW5kaWYgLyogQ0tBTlNJQyAqLworI2lmbmRl ZiBTSUdfVgorI2RlZmluZSBTSUdfVgkJCQkvKiBhbmQgc2lnbmFsIHR5cGUgaXMgVk9JRCAqLwor I2VuZGlmIC8qIFNJR19WICovCisjaWZuZGVmIENLX0FOU0lMSUJTCisjZGVmaW5lIENLX0FOU0lM SUJTCQkJLyogKE1hcnRpbiBaaW5zZXIsIEZlYiAxOTk1KSAqLworI2VuZGlmIC8qIENLX0FOU0lM SUJTICovCisjaWZuZGVmIF9QT1NJWF9DX1NPVVJDRQorI2RlZmluZSBfUE9TSVhfQ19TT1VSQ0Ug MQorI2VuZGlmIC8qIF9QT1NJWF9DX1NPVVJDRSAqLworI2VuZGlmCS8qIF9fREVDQyAqLworCisj aWZkZWYgVk1TCisjaWZkZWYgX19pYTY0CQkJCS8qIFZNUyBvbiBJdGFuaXVtICovCisjaWZuZGVm IFZNU0k2NAorI2RlZmluZSBWTVNJNjQKKyNlbmRpZgkvKiBWTVNJNjQgKi8KKyNlbmRpZgkvKiBf X2lhNjQgKi8KKyNpZm5kZWYgVk1TNjRCSVQJCQkvKiA2NC1iaXQgVk1TIG9uIEl0YW5pdW0gb3Ig QWxwaGEgKi8KKyNpZmRlZiBfX2lhNjQKKyNkZWZpbmUgVk1TNjRCSVQKKyNlbHNlCisjaWZkZWYg X19BTFBIQQorI2RlZmluZSBWTVM2NEJJVAorI2VuZGlmCS8qIF9faWE2NCAqLworI2VuZGlmCS8q IF9fQUxQSEEgKi8KKyNlbmRpZgkvKiBWTVM2NEJJVCAqLworI2VuZGlmCS8qIFZNUyAqLworCisj aWZkZWYgYXBvbGxvCQkJCS8qIE1heSBiZSBBTlNJLUMsIGNoZWNrIGZ1cnRoZXIgKi8KKyNpZmRl ZiBfX1NURENQUF9fCisjZGVmaW5lIENLX0FOU0lDCQkJLyogWWVzLCB0aGlzIGlzIHJlYWwgQU5T SS1DICovCisjZGVmaW5lIFNJR19WCisjZWxzZQorI2RlZmluZSBOT0FOU0kJCQkJLyogTm9wZSwg bm90IEFOU0kgKi8KKyN1bmRlZiBfX1NURENfXwkJCQkvKiBFdmVuIHRob3VnaCBpdCBzYXkgaXQg aXMhICovCisjZGVmaW5lIFNJR19JCisjZW5kaWYgLyogX19TVERDUFBfXyAqLworI2VuZGlmIC8q IGFwb2xsbyAqLworCisjaWZkZWYgUE9TSVgJCQkJLyogLURQT1NJWCBvbiBjYyBjb21tYW5kIGxp bmUgKi8KKyNpZm5kZWYgX1BPU0lYX1NPVVJDRQkJCS8qIEltcGxpZXMgX1BPU0lYX1NPVVJDRSAq LworI2RlZmluZSBfUE9TSVhfU09VUkNFCisjZW5kaWYgLyogX1BPU0lYX1NPVVJDRSAqLworI2Vu ZGlmIC8qIFBPU0lYICovCisKKy8qCisgIEFOU0kgQz8gIFRoYXQgaXMsIGRvIHdlIGhhdmUgZnVu Y3Rpb24gcHJvdG90eXBlcywgbmV3LXN0eWxlCisgIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgYW5k IHBhcmFtZXRlciB0eXBlIGNoZWNraW5nIGFuZCBjb2VyY2lvbj8KKyovCisjaWZkZWYgTUFDCQkJ CS8qIE1QVyBDIGlzIEFOU0kgKi8KKyNpZm5kZWYgTk9BTlNJCisjaWZuZGVmIENLX0FOU0lDCisj ZGVmaW5lIENLX0FOU0lDCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBOT0FOU0kg Ki8KKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmZGVmIFNUUkFUVVMJCQkJLyogU3RyYXR1cyBWT1Mg Ki8KKyNpZm5kZWYgQ0tfQU5TSUMKKyNkZWZpbmUgQ0tfQU5TSUMKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworI2lmbmRlZiBOT1NUQVQKKyNkZWZpbmUgTk9TVEFUCisjZW5kaWYgLyogTk9TVEFUICov CisjZW5kaWYgLyogU1RSQVRVUyAqLworCisjaWZuZGVmIE5PQU5TSQorI2lmZGVmIF9fU1REQ19f CQkJCS8qIF9fU1REQ19fIG1lYW5zIEFOU0kgQyAqLworI2lmbmRlZiBDS19BTlNJQworI2RlZmlu ZSBDS19BTlNJQworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogX19TVERDX18gKi8K KyNlbmRpZiAvKiBOT0FOU0kgKi8KKy8qCisgIF9QUk9UT1RZUCgpIGlzIHVzZWQgZm9yIGZvcndh cmQgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBzbyB3ZSBjYW4gaGF2ZQorICBwYXJhbWV0ZXIg YW5kIHJldHVybiB2YWx1ZSB0eXBlIGNoZWNraW5nIGlmIHRoZSBjb21waWxlciBvZmZlcnMgaXQu CisgIF9fU1REQ19fIHNob3VsZCBiZSBkZWZpbmVkIGJ5IHRoZSBjb21waWxlciBvbmx5IGlmIGZ1 bmN0aW9uIHByb3RvdHlwZXMgYXJlCisgIGFsbG93ZWQuICBPdGhlcndpc2UsIHdlIGdldCBvbGQt c3R5bGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMuICBPdXIgb3duIHByaXZhdGUKKyAgQ0tfQU5TSUMg c3ltYm9sIHRlbGxzIHdoZXRoZXIgd2UgdXNlIEFOU0kgQyBwcm90b3R5cGVzLiAgVG8gZm9yY2Ug dXNlIG9mCisgIEFOU0kgcHJvdG90eXBlcywgaW5jbHVkZSAtRENLX0FOU0lDIG9uIHRoZSBjYyBj b21tYW5kIGxpbmUuICBUbyBkaXNhYmxlIHRoZQorICB1c2Ugb2YgQU5TSSBwcm90b3R5cGVzLCBp bmNsdWRlIC1ETk9BTlNJLgorKi8KKyNpZmRlZiBDS19BTlNJQworI2RlZmluZSBfUFJPVE9UWVAo IGZ1bmMsIHBhcm1zICkgZnVuYyBwYXJtcworI2Vsc2UgLyogTm90IEFOU0kgQyAqLworI2RlZmlu ZSBfUFJPVE9UWVAoIGZ1bmMsIHBhcm1zICkgZnVuYygpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K KworI2lmbmRlZiBPUzIKKyNpZmRlZiBOT0xPR0lOCQkJCS8qIE5PTE9HSU4gaW1wbGllcyBOT0lL U0QgKi8KKyNpZm5kZWYgTk9JS1NECisjZGVmaW5lIE5PSUtTRAorI2VuZGlmIC8qIE5PSUtTRCAq LworI2VuZGlmIC8qIE5PTE9HSU4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5PSUtT RAkJCQkvKiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSBEYWVtb24gKi8KKyNpZm5kZWYgT1MyCisj aWZuZGVmIE5PUFJJTlRGU1VCU1QKKyNkZWZpbmUgTk9QUklOVEZTVUJTVAorI2VuZGlmIC8qIE5P UFJJTlRGU1VCU1QgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9MT0dJTgorI2RlZmlu ZSBOT0xPR0lOCisjZW5kaWYgLyogTk9MT0dJTiAqLworI2lmbmRlZiBOT1NZU0xPRworI2RlZmlu ZSBOT1NZU0xPRworI2VuZGlmIC8qIE5PU1lTTE9HICovCisjaWZuZGVmIE5PV1RNUAorI2RlZmlu ZSBOT1dUTVAKKyNlbmRpZiAvKiBOT1dUTVAgKi8KKyNlbHNlCisjaWZuZGVmIElLU0QKKyNpZmRl ZiBPUzJPUlVOSVgJCQkvKiBQbGF0Zm9ybXMgd2hlcmUgSUtTRCBpcyBzdXBwb3J0ZWQgKi8KKyNk ZWZpbmUgSUtTRAorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIElLU0QgKi8KKyNl bmRpZiAvKiBOT0lLU0QgKi8KKworI2lmZGVmIElLU0QJCQkJLyogSUtTRCBvcHRpb25zLi4uICov CisjaWZuZGVmIElLU0RDT05GCQkJLyogSUtTRCBjb25maWd1cmF0aW9uIGZpbGUgKi8KKyNpZmRl ZiBVTklYCisjZGVmaW5lIElLU0RDT05GICIvZXRjL2lrc2QuY29uZiIKKyNlbHNlCisjaWZkZWYg T1MyCisjZGVmaW5lIElLU0RDT05GICJpa3NkLmtzYyIKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRp ZiAvKiBVTklYICovCisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyNpZm5kZWYgTk9JS1NEQgorI2lm bmRlZiBJS1NEQgkJCQkvKiBJS1NEIGRhdGFiYXNlICovCisjaWZkZWYgVU5JWAorI2RlZmluZSBJ S1NEQgorI2RlZmluZSBJS19MQ0tUUklFUyAxNgkJCS8qIEhvdyBtYW55IHRpbWVzIHRvIHRyeSB0 byBnZXQgbG9jayAqLworI2RlZmluZSBJS19MQ0tTTEVFUCAxCQkJLyogSG93IGxvbmcgdG8gc2xl ZXAgYmV0d2VlbiB0cmllcyAqLworI2RlZmluZSBJS19MT0NLRklMRSAiaWtzZC5sY2siCQkvKiBE YXRhYmFzZSBsb2NrZmlsZW5hbWUgKi8KKyNkZWZpbmUgSUtfREJBU0VESVIgIi92YXIvbG9nLyIJ CS8qIERhdGFiYXNlIGRpcmVjdG9yeSAqLworI2RlZmluZSBJS19EQkFTRUZJTCAiaWtzZC5kYiIJ CS8qIERhdGFiYXNlIGZpbGVuYW1lICovCisjZWxzZSAvKiBVTklYICovCisjaWZkZWYgT1MyCisj ZGVmaW5lIElLU0RCCisjaWZuZGVmIE5PRlRSVU5DQVRFCQkJLyogZnRydW5jYXRlKCkgbm90IGF2 YWlsYWJsZSAqLworI2RlZmluZSBOT0ZUUlVOQ0FURQorI2VuZGlmIC8qIE5PRlRSVU5DQVRFICov CisjZGVmaW5lIElLX0xDS1RSSUVTIDE2CQkJLyogSG93IG1hbnkgdGltZXMgdG8gdHJ5IHRvIGdl dCBsb2NrICovCisjZGVmaW5lIElLX0xDS1NMRUVQIDEJCQkvKiBIb3cgbG9uZyB0byBzbGVlcCBi ZXR3ZWVuIHRyaWVzICovCisjZGVmaW5lIElLX0xPQ0tGSUxFICJpa3NkLmxjayIJCS8qIERCIGxv Y2tmaWxlbmFtZSAoaW4gc3lzdGVtcm9vdCkgKi8KKyNkZWZpbmUgSUtfREJBU0VGSUwgImlrc2Qu ZGIiCQkvKiBEYXRhYmFzZSBmaWxlbmFtZSAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IFVOSVggKi8KKyNlbmRpZiAvKiBJS1NEQiAqLworI2VuZGlmIC8qIE5PSUtTREIgKi8KKyNlbmRp ZiAvKiBJS1NEICovCisvKgorICBTdWJzdGl0dXRlcyBmb3IgcHJpbnRmKCkgYW5kIGZyaWVuZHMg dXNlZCBpbiBJS1MgdG8gY29tcGVuc2F0ZSBmb3IKKyAgbGFjayBvZiBhIHRlcm1pbmFsIGRyaXZl ciwgbWFpbmx5IHRvIHN1cHBseSBDUiBhZnRlciBMRi4KKyovCisjaWZuZGVmIE5PUFJJTlRGU1VC U1QKKyNpZmRlZiBNQUMKKy8qCisgKiBUaGUgTUFDIGRvZXNuJ3QgdXNlIHN0YW5kYXJkIHN0ZGlv IHJvdXRpbmVzLgorICovCisjdW5kZWYgZ2V0Y2hhcgorI2RlZmluZSBnZXRjaGFyKCkgICBtYWNf Z2V0Y2hhcigpCisjdW5kZWYgcHV0Y2hhcgorI2RlZmluZSBwdXRjaGFyKGMpCW1hY19wdXRjaGFy KGMpCisjZGVmaW5lIHByaW50ZgkJbWFjX3ByaW50ZgorI2RlZmluZSBwZXJyb3IJCW1hY19wZXJy b3IKKyNkZWZpbmUgcHV0cwkJbWFjX3B1dHMKK2V4dGVybiBpbnQgbWFjX3B1dGNoYXIgKGludCBj KTsKK2V4dGVybiBpbnQgbWFjX3B1dHMgKGNvbnN0IGNoYXIgKnN0cmluZyk7CitleHRlcm4gaW50 IG1hY19wcmludGYoY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIGludCBtYWNfZ2V0Y2hhciAo dm9pZCk7CisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBPUzIKKyNkZWZpbmUgcHJpbnRmIFZz Y3JucHJpbnRmCisjZGVmaW5lIGZwcmludGYgVnNjcm5mcHJpbnRmCitleHRlcm4gaW50IFZzY3Ju cHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKK2V4dGVybiBpbnQgVnNjcm5wcmludHcoY29uc3Qg Y2hhciAqLCAuLi4pOworZXh0ZXJuIGludCBWc2NybmZwcmludGYoRklMRSAqLCBjb25zdCBjaGFy ICosIC4uLik7CisjaWZkZWYgcHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRj aGFyICovCisjZGVmaW5lIHB1dGNoYXIoeCkgVnNjcm5wcmludGYoIiVjIix4KQorI2RlZmluZSBw ZXJyb3IoeCkgIFZzY3JucGVycm9yKHgpCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgQ0tX QVJUX0MKKyNpZmRlZiBVTklYCisjaWZuZGVmIHBkcDExCisjaWZuZGVmIENLWFBSSU5URgorI2Rl ZmluZSBDS1hQUklOVEYKKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNlbmRpZiAvKiBwZHAxMSAq LworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS1dBUlRfQyAqLworI2VuZGlmIC8qIE5P UFJJTlRGU1VCU1QgKi8KKworI2lmZGVmIENLWFBSSU5URgorI2RlZmluZSBwcmludGYgY2t4cHJp bnRmCisjZGVmaW5lIGZwcmludGYgY2t4ZnByaW50ZgorI2lmZGVmIENLX0FOU0lDCitfUFJPVE9U WVAoaW50IGNreHByaW50ZiwoY29uc3QgY2hhciAqLCAuLi4pKTsKKyNpZmRlZiBORVhUCitfUFJP VE9UWVAodm9pZCBja3hwZXJyb3IsKGNvbnN0IGNoYXIgKikpOworI2Vsc2UKKyNpZmRlZiBDS19T Q09WNQorX1BST1RPVFlQKHZvaWQgY2t4cGVycm9yLChjb25zdCBjaGFyICopKTsKKyNlbHNlCitf UFJPVE9UWVAoaW50IGNreHBlcnJvciwoY29uc3QgY2hhciAqKSk7CisjZW5kaWYgLyogQ0tfU0NP VjUgKi8KKyNlbmRpZiAvKiBORVhUICovCitfUFJPVE9UWVAoaW50IGNreGZwcmludGYsKEZJTEUg KiwgY29uc3QgY2hhciAqLCAuLi4pKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2lmZGVmIHB1 dGNoYXIKKyN1bmRlZiBwdXRjaGFyCisjZW5kaWYgLyogcHV0Y2hhciAqLworI2RlZmluZSBwdXRj aGFyKHgpIGNreHByaW50ZigiJWMiLHgpCisjaWZkZWYgcHV0YworI3VuZGVmIHB1dGMKKyNlbmRp ZiAvKiBwdXRjICovCisjZGVmaW5lIHB1dGMoYSxiKSBja3hmcHJpbnRmKGIsIiVjIixhKQorI2Rl ZmluZSBwZXJyb3IoeCkgIGNreHBlcnJvcih4KQorI2VuZGlmIC8qIENLWFBSSU5URiAqLworCisv KgorICBBbHRvcy1zcGVjaWZpYyBpdGVtczogNDg2LCA1ODYsIDk4NiBtb2RlbHMuLi4KKyovCisj aWZkZWYgQTk4NgorI2RlZmluZSBNX1ZPSUQKKyNkZWZpbmUgdm9pZCBpbnQKKyNkZWZpbmUgQ0hB UiBjaGFyCisjZGVmaW5lIFNJR19JCisjZW5kaWYgLyogQTk4NiAqLworCisvKiBTaWduYWwgaGFu ZGxpbmcgKi8KKworI2lmZGVmIFFOWAorI2lmbmRlZiBDS19QT1NJWF9TSUcKKyNkZWZpbmUgQ0tf UE9TSVhfU0lHCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisjZW5kaWYgLyogUU5YICovCisK Ky8qIAorICB2b2lkIHR5cGUsIG5vcm1hbGx5IGF2YWlsYWJsZSBvbmx5IGluIEFOU0kgY29tcGls ZXJzLgorICBUaGUgSFAtVVggZXhjZXB0aW9uIChmb3IgaXRzICJidW5kbGVkIiBub24tQU5TSSBD IGNvbXBpbGVyKQorICBpcyBrbm93biB0byBiZSB2YWxpZCBiYWNrIHRvIEhQLVVYIDYuNS4KKyAg QWRqdXN0bWVudHMgbWlnaHQgYmUgbmVlZGVkIGZvciBlYXJsaWVyIEhQLVVYIHZlcnNpb25zLgor Ki8KKyNpZm5kZWYgVk9JRAkJCQkvKiBVc2VkIHRocm91Z2hvdXQgYWxsIEMtS2VybWl0ICovCisj aWZkZWYgQ0tfQU5TSUMJCQkJLyogbW9kdWxlcy4uLiAqLworI2RlZmluZSBWT0lEIHZvaWQKKyNl bHNlCisjaWZkZWYgSFBVWAorI2RlZmluZSBWT0lEIHZvaWQKKyNlbHNlCisjZGVmaW5lIFZPSUQg aW50CisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyog Vk9JRCAqLworLyoKKyAgRXhhY3RseSB0aGUgc2FtZSBhcyBWT0lEIGJ1dCBmb3IgdXNlIGluIGNv bnRleHRzIHdoZXJlIHRoZSBWT0lEIHN5bWJvbAorICBjb25mbGljdHMgc29tZSBoZWFkZXItZmls ZSBkZWZpbml0aW9uLiAgVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBzZWN0aW9uCisgIG9mIGNrdXVz eC5jIHRoYXQgcHJvdmlkZXMgQy1LZXJtaXQncyBjdXJzZXMgaW50ZXJmYWNlLCByb3VnaGx5IHRo ZQorICBzZWNvbmQgaGFsZiBvZiBja3V1c3guYy4KKyovCisjaWZuZGVmIENLVk9JRAorI2lmZGVm IENLX0FOU0lDCisjZGVmaW5lIENLVk9JRCB2b2lkCisjZWxzZQorI2lmZGVmIEhQVVgKKyNkZWZp bmUgQ0tWT0lEIHZvaWQKKyNlbHNlCisjZGVmaW5lIENLVk9JRCBpbnQKKyNlbmRpZiAvKiBIUFVY ICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBDS1ZPSUQgKi8KKworLyogQ29u c3QgdHlwZSAqLworCisjaWZuZGVmIENPTlNUCisjaWZkZWYgT1NLCisjaWZkZWYgX1VDQworI2Rl ZmluZSBDT05TVCBjb25zdAorI2Vsc2UKKyNkZWZpbmUgQ09OU1QKKyNlbmRpZiAvKiBfVUNDICov CisjZWxzZSAgLyogIU9TSyAqLworI2lmZGVmIENLX1NDTzMyVjQKKyNkZWZpbmUgQ09OU1QKKyNl bHNlCisjaWZkZWYgQ0tfQU5TSUMKKyNkZWZpbmUgQ09OU1QgY29uc3QKKyNlbHNlCisjZGVmaW5l IENPTlNUCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBDS19TQ08zMlY0ICovCisj ZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogQ09OU1QgKi8KKworLyogU2lnbmFsIHR5cGUgKi8K KworI2lmbmRlZiBTSUdfVgkJCQkvKiBzaWduYWwoKSB0eXBlLCBpZiBub3QgZGVmJ2QgeWV0ICov CisjaWZuZGVmIFNJR19JCisjaWZkZWYgT1MyCisjZGVmaW5lIFNJR19WCisjZWxzZQorI2lmZGVm IFBPU0lYCisjZGVmaW5lIFNJR19WCisjZWxzZQorI2lmZGVmIFNWUjMJCQkJLyogU3lzdGVtIFYg UjMgYW5kIGxhdGVyICovCisjZGVmaW5lIFNJR19WCisjZWxzZQorI2lmZGVmIFNVTk9TNAkJCQkv KiBTVU5PUyBWIDQuMCBhbmQgbGF0ZXIgKi8KKyNpZm5kZWYgc3VuMzg2CisjZGVmaW5lIFNJR19W CisjZWxzZQorI2RlZmluZSBTSUdfSQorI2VuZGlmIC8qIHN1bjM4NiAqLworI2Vsc2UKKyNpZmRl ZiBORVhUCQkJCS8qIE5lWFQgKi8KKyNkZWZpbmUgU0lHX1YKKyNlbHNlCisjaWZkZWYgQUlYMzcw CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZGVmaW5lIFNJR19WCisjZGVmaW5lIFNJR1RZUCBfX1NJ R1ZPSUQJCS8qIEFJWDM3MCAqLworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCQkJCS8qIFN0cmF0dXMg Vk9TICovCisjZGVmaW5lIFNJR19WCisjZWxzZQorI2lmZGVmIE1BQworI2RlZmluZSBTSUdUWVAg bG9uZworI2RlZmluZSBTSUdfSQorI2lmbmRlZiBNUFczMworI2RlZmluZSBTSUdfSUdOIDAKKyNl bmRpZiAvKiBNUFczMyAqLworI2RlZmluZSBTSUdBTFJNIDEKKyNpZm5kZWYgTVBXMzMKKyNkZWZp bmUgU0lHSU5UICAyCisjZW5kaWYgLyogTVBXMzMgKi8KKyNlbHNlIC8qIEV2ZXJ5dGhpbmcgZWxz ZSAqLworI2RlZmluZSBTSUdfSQorI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIFNUUkFUVVMg Ki8KKyNlbmRpZiAvKiBBSVgzNzAgKi8KKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyogU1VO T1M0ICovCisjZW5kaWYgLyogU1ZSMyAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogU0lHX0kgKi8KKyNlbmRpZiAvKiBTSUdfViAqLworCisjaWZkZWYg U0lHX0kKKyNkZWZpbmUgU0lHUkVUVVJOIHJldHVybigwKQorI2lmbmRlZiBTSUdUWVAKKyNkZWZp bmUgU0lHVFlQIGludAorI2VuZGlmIC8qIFNJR1RZUCAqLworI2VuZGlmIC8qIFNJR19JICovCisK KyNpZmRlZiBTSUdfVgorI2RlZmluZSBTSUdSRVRVUk4gcmV0dXJuCisjaWZuZGVmIFNJR1RZUAor I2RlZmluZSBTSUdUWVAgdm9pZAorI2VuZGlmIC8qIFNJR1RZUCAqLworI2VuZGlmIC8qIFNJR19W ICovCisKKyNpZmRlZiBOVAorI2lmbmRlZiBTSUdUWVAKKyNkZWZpbmUgU0lHVFlQIHZvaWQKKyNl bmRpZiAvKiBTSUdUWVAgKi8KKyNlbmRpZiAvKiBOVCAqLworCisjaWZuZGVmIFNJR1RZUAorI2Rl ZmluZSBTSUdUWVAgaW50CisjZW5kaWYgLyogU0lHVFlQICovCisKKyNpZm5kZWYgU0lHUkVUVVJO CisjZGVmaW5lIFNJR1JFVFVSTiByZXR1cm4oMCkKKyNlbmRpZiAvKiBTSUdSRVRVUk4gKi8KKwor I2lmZGVmIENLTlRTSUcKKy8qIFRoaXMgZG9lcyBub3Qgd29yaywgc28gZG9uJ3QgdXNlIGl0LiAq LworI2RlZmluZSBzaWduYWwgY2tudHNpZ25hbAorU0lHVFlQICgqY2tudHNpZ25hbChpbnQgdHlw ZSwgU0lHVFlQICgqKShpbnQpKSkoaW50KTsKKyNlbmRpZiAvKiBDS05UU0lHICovCisKKy8qIFdl IHdhbnQgYWxsIGNoYXJhY3RlcnMgdG8gYmUgdW5zaWduZWQgaWYgdGhlIGNvbXBpbGVyIHN1cHBv cnRzIGl0ICovCisKKyNpZmRlZiBLVUkKKyNpZmRlZiBDSEFSCisjdW5kZWYgQ0hBUgorI2VuZGlm IC8qIENIQVIgKi8KKyNkZWZpbmUgQ0hBUiB1bnNpZ25lZCBjaGFyCisjZWxzZQorI2lmZGVmIFBS T1ZYMQordHlwZWRlZiBjaGFyIENIQVI7CisvKiB0eXBlZGVmIGxvbmcgTE9ORzsgKi8KK3R5cGVk ZWYgaW50IHZvaWQ7CisjZWxzZQorI2lmZGVmIE1JTklYCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIg Q0hBUjsKKyNlbHNlCisjaWZkZWYgVjcKK3R5cGVkZWYgY2hhciBDSEFSOworI2Vsc2UKKyNpZmRl ZiBDNzAKK3R5cGVkZWYgY2hhciBDSEFSOworLyogdHlwZWRlZiBsb25nIExPTkc7ICovCisjZWxz ZQorI2lmZGVmIEJTRDI5Cit0eXBlZGVmIGNoYXIgQ0hBUjsKKy8qIHR5cGVkZWYgbG9uZyBMT05H OyAqLworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2RlZmluZSBDSEFSIHVuc2lnbmVkIGNo YXIJCQkvKiAzLjIyIGNvbXBpbGVyICovCisjZWxzZQorI2lmZGVmIEhQVVgKKyNkZWZpbmUgQ0hB UiB1bnNpZ25lZCBjaGFyCisjZWxzZQorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjZGVmaW5lIENI QVIgdW5zaWduZWQgY2hhcgorI2Vsc2UgLyogTlQgKi8KKyNpZmRlZiBDSEFSCisjdW5kZWYgQ0hB UgorI2VuZGlmIC8qIENIQVIgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBDSEFSOworI2VuZGlm IC8qIE5UICovCisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBWTVMKK3R5cGVkZWYgdW5zaWduZWQg Y2hhciBDSEFSOworI2Vsc2UKKyNpZmRlZiBDSEFSCisjdW5kZWYgQ0hBUgorI2VuZGlmIC8qIENI QVIgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBDSEFSOworI2VuZGlmIC8qIFZNUyAqLworI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LworI2VuZGlmIC8qIEJTRDI5ICovCisjZW5kaWYgLyogQzcwICovCisjZW5kaWYgLyogVjcgKi8K KyNlbmRpZiAvKiBNSU5JWCAqLworI2VuZGlmIC8qIFBST1ZYMSAqLworI2VuZGlmIC8qIEtVSSAq LworCit1bmlvbiBja19zaG9ydCB7CQkJLyogTWFpbmx5IGZvciBVbmljb2RlICovCisgICAgVVNI T1JUIHhfc2hvcnQ7CisgICAgQ0hBUiB4X2NoYXJbMl07Cit9OworCisjaWZkZWYgTUFDCQkJCS8q IE1hY2ludG9zaCBmaWxlIHJvdXRpbmVzICovCisjaWZuZGVmIENLV0FSVF9DCQkJLyogQnV0IG5v dCBpbiAid2FydCIuLi4gKi8KKyNpZmRlZiBmZW9mCisjdW5kZWYgZmVvZgorI2VuZGlmIC8qIGZl b2YgKi8KKyNkZWZpbmUgZmVvZiBtYWNfZmVvZgorI2RlZmluZSByZXdpbmQgbWFjX3Jld2luZAor I2RlZmluZSBmZ2V0cyBtYWNfZmdldHMKKyNkZWZpbmUgZm9wZW4gbWFjX2ZvcGVuCisjZGVmaW5l IGZjbG9zZSBtYWNfZmNsb3NlCitpbnQgbWFjX2Zlb2YoKTsKK3ZvaWQgbWFjX3Jld2luZCgpOwor Y2hhciAqbWFjX2ZnZXRzKCk7CitGSUxFICptYWNfZm9wZW4oKTsKK2ludCBtYWNfZmNsb3NlKCk7 CisjZW5kaWYgLyogQ0tDUFJPX1cgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKy8qCisgICBTeXN0ZW1z IHdob3NlIG1haW5saW5lIG1vZHVsZXMgaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbW11bmljYXRpb24t bGluZQorICAgZmlsZSBkZXNjcmlwdG9yLCB0dHlmZC4KKyovCisjaWZuZGVmIENLX1RUWUZECisj aWZkZWYgVU5JWAorI2RlZmluZSBDS19UVFlGRAorI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUg Q0tfVFRZRkQKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIENLX1RUWUZECisjZW5kaWYgLyog Vk1TICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENL X1RUWUZEICovCisKKy8qIFN5c3RlbXMgd2hlcmUgd2UgY2FuIGdldCBvdXIgb3duIHByb2Nlc3Mg SUQgKi8KKworI2lmbmRlZiBDS19QSUQKKyNpZmRlZiBVTklYCisjZGVmaW5lIENLX1BJRAorI2Vu ZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tfUElECisjZW5kaWYgLyogT1My ICovCisjaWZkZWYgVk1TCisjZGVmaW5lIENLX1BJRAorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlm IC8qIENLX1BJRCAqLworCisvKiBTeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGUgTWljcm9zb2Z0IFRl bGVwaG9ueSBBUEkgKFRBUEkpICovCisKKyNpZm5kZWYgTk9ESUFMCisjaWZuZGVmIENLX1RBUEkK KyNpZmRlZiBOVAorI2RlZmluZSBDS19UQVBJCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBD S19UQVBJICovCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZm5kZWYgTk9OWlhQQU5ECisjaWZu ZGVmIE5aWFBBTkQKKyNpZmRlZiBPUzJPUlVOSVgKKyNkZWZpbmUgTlpYUEFORAorI2Vsc2UKKyNp ZmRlZiBWTVMKKyNkZWZpbmUgTlpYUEFORAorI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2Rl ZmluZSBOWlhQQU5ECisjZWxzZQorI2lmZGVmIE9TSworI2RlZmluZSBOWlhQQU5ECisjZW5kaWYg LyogT1NLICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBOWlhQQU5EICovCisjZWxzZQorI2lmZGVm IE5aWFBBTkQKKyN1bmRlZiBOWlhQQU5ECisjZW5kaWYgLyogTlpYUEFORCAqLworI2VuZGlmIC8q IE5PTlpYUEFORCAqLworCisvKiBuenhwYW5kKCkgb3B0aW9uIGZsYWdzICovCisKKyNkZWZpbmUg WlhfRklMT05MWSAgIDEJCQkvKiBNYXRjaCBvbmx5IHJlZ3VsYXIgZmlsZXMgKi8KKyNkZWZpbmUg WlhfRElST05MWSAgIDIJCQkvKiBNYXRjaCBvbmx5IGRpcmVjdG9yaWVzICovCisjZGVmaW5lIFpY X1JFQ1VSU0UgICA0CQkJLyogRGVzY2VuZCB0aHJvdWdoIGRpcmVjdG9yeSB0cmVlICovCisjZGVm aW5lIFpYX01BVENIRE9UICA4CQkJLyogTWF0Y2ggImRvdCBmaWxlcyIgKi8KKyNkZWZpbmUgWlhf Tk9CQUNLVVAgMTYJCQkvKiBEb24ndCBtYXRjaCAiYmFja3VwIGZpbGVzIiAqLworI2RlZmluZSBa WF9OT0xJTktTICAzMgkJCS8qIERvbid0IGZvbGxvdyBzeW1saW5rcyAqLworCisjaWZuZGVmIE5a WFBBTkQKKyNkZWZpbmUgbnp4cGFuZChhLGIpIHp4cGFuZChhKQorI2VuZGlmIC8qIE5aWFBBTkQg Ki8KKworI2lmbmRlZiBOT1pYUkVXSU5ECisjaWZuZGVmIFpYUkVXSU5ECQkJLyogUGxhdGZvcm1z IHRoYXQgaGF2ZSB6eHJld2luZCgpICovCisjaWZkZWYgT1MyT1JVTklYCisjZGVmaW5lIFpYUkVX SU5ECisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBaWFJFV0lORAorI2Vsc2UKKyNpZmRlZiBk YXRhZ2VuZXJhbAorI2RlZmluZSBaWFJFV0lORAorI2Vsc2UKKyNpZmRlZiBPU0sKKyNkZWZpbmUg WlhSRVdJTkQKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBaWFJFV0lORAorI2VuZGlm IC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAq LworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIFpY UkVXSU5EICovCisjZWxzZQorI2lmZGVmIFpYUkVXSU5ECisjdW5kZWYgWlhSRVdJTkQKKyNlbmRp ZiAvKiBaWFJFV0lORCAqLworI2VuZGlmIC8qIE5PWlhSRVdJTkQgKi8KKworLyogVGVtcG9yYXJ5 LWRpcmVjdG9yeS1mb3ItUkVDRUlWRSBmZWF0dXJlIC4uLiAqLworLyogVGhpcyBzYXlzIHdoZXRo ZXIgd2UgaGF2ZSB0aGUgaXNkaXIoKSBmdW5jdGlvbiBkZWZpbmVkLiAqLworCisjaWZkZWYgVU5J WAkJCQkvKiBVTklYIGhhcyBpdCAqLworI2lmbmRlZiBDS19UTVBESVIKKyNpZm5kZWYgcGRwMTEK KyNkZWZpbmUgQ0tfVE1QRElSCisjZGVmaW5lIFRNUERJUkxFTiAyNTYKKyNlbmRpZiAvKiBwZHAx MSAqLworI2VuZGlmIC8qIENLX1RNUERJUiAqLworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVm IFZNUwkJCQkvKiBWTVMgdG9vICovCisjaWZuZGVmIENLX1RNUERJUgorI2RlZmluZSBDS19UTVBE SVIKKyNkZWZpbmUgVE1QRElSTEVOIDI1NgorI2VuZGlmIC8qIENLX1RNUERJUiAqLworI2VuZGlm IC8qIFZNUyAqLworCisjaWZkZWYgT1MyCQkJCS8qIE9TIHR3byB0b28gKi8KKyNpZm5kZWYgQ0tf VE1QRElSCisjZGVmaW5lIENLX1RNUERJUgorI2RlZmluZSBUTVBESVJMRU4gMTI5CisjZW5kaWYg LyogQ0tfVE1QRElSICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBTVFJBVFVTCQkJCS8q IFN0cmF0dXMgVk9TIHRvby4gKi8KKyNpZm5kZWYgQ0tfVE1QRElSCisjZGVmaW5lIENLX1RNUERJ UgorI2RlZmluZSBUTVBESVJMRU4gMjU2CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjZW5kaWYg LyogU1RSQVRVUyAqLworCisjaWZkZWYgT1NLCQkJCS8qIE9TLTkgdG9vICovCisjaWZuZGVmIENL X1RNUERJUgorI2RlZmluZSBDS19UTVBESVIKKyNkZWZpbmUgVE1QRElSTEVOIDI1NgorI2VuZGlm IC8qIENLX1RNUERJUiAqLworI2VuZGlmIC8qIE9TSyAqLworCisjaWZkZWYgZGF0YWdlbmVyYWwJ CQkvKiBBT1MvVlMgdG9vICovCisjaWZuZGVmIENLX1RNUERJUgorI2RlZmluZSBDS19UTVBESVIK KyNkZWZpbmUgVE1QRElSTEVOIDI1NgorI2VuZGlmIC8qIENLX1RNUERJUiAqLworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisKKyNpZmRlZiBDS19UTVBESVIJCQkvKiBOZWVkcyBjb21tYW5kIHBh cnNlciAqLworI2lmZGVmIE5PSUNQCisjdW5kZWYgQ0tfVE1QRElSCisjZW5kaWYgLyogTk9JQ1Ag Ki8KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworLyogV2hldGhlciB0byBpbmNsdWRlIDxzeXMv dGltZS5oPiAqLworCisjaWZuZGVmIE5PVElNRUgJCQkJLyogPHRpbWUuaD4gKi8KKyNpZm5kZWYg VElNRUgKKyNkZWZpbmUgVElNRUgKKyNlbmRpZiAvKiBUSU1FSCAqLworI2VuZGlmIC8qIE5PVElN RUggKi8KKworI2lmbmRlZiBOT1NZU1RJTUVICQkJLyogPHN5cy90aW1lLmg+ICovCisjaWZuZGVm IFNZU1RJTUVICisjaWZkZWYgVU5JWAkJCQkvKiBVTklYICovCisjaWZkZWYgU1ZPUlBPU0lYCQkJ LyogU3lzdGVtIFYgb3IgUE9TSVguLi4gKi8KKyNpZmRlZiBNX1VOSVgKKyNkZWZpbmUgU1lTVElN RUgKKyNlbHNlCisjaWZkZWYgU0NPXzMyVjQKKyNkZWZpbmUgU1lTVElNRUgKKyNlbHNlCisjaWZk ZWYgT1hPUworI2RlZmluZSBTWVNUSU1FSAorI2Vsc2UKKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBT WVNUSU1FSAorI2Vsc2UKKyNpZmRlZiBfX2xpbnV4X18KKyNkZWZpbmUgU1lTVElNRUgKKyNlbHNl CisjaWZkZWYgQUlYUlMKKyNpZm5kZWYgQUlYNDEKKyNkZWZpbmUgU1lTVElNRUgKKyNlbmRpZiAv KiBBSVg0MSAqLworI2Vsc2UKKyNpZmRlZiBJUklYNjAKKyNkZWZpbmUgU1lTVElNRUgKKyNlbHNl CisjaWZkZWYgSTM4NklYCisjZGVmaW5lIFNZU1RJTUVICisjZWxzZQorI2lmZGVmIFNWNjhSM1Y2 CisjZGVmaW5lIFNZU1RJTUVICisjZW5kaWYgLyogU1Y2OFIzVjYgKi8KKyNlbmRpZiAvKiBJMzg2 SVggKi8KKyNlbmRpZiAvKiBJUklYNjAgKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8q IF9fbGludXhfXyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogT1hPUyAqLworI2Vu ZGlmIC8qIFNDT18zMlY0ICovCisjZW5kaWYgLyogTV9VTklYICovCisKKyNlbHNlICAvKiBOb3Qg U1ZPUlBPU0lYICovCisKKyNpZm5kZWYgQkVMTFYxMAkJCQkvKiBBbGwgYnV0IHRoZXNlLi4uICov CisjaWZuZGVmIFBST1ZYMQorI2lmbmRlZiBWNworI2lmbmRlZiBCU0Q0MQorI2lmbmRlZiBDT0hF UkVOVAorI2RlZmluZSBTWVNUSU1FSAorI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyog QlNENDEgKi8KKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIFBST1ZYMSAqLworI2VuZGlmIC8q IEJFTExWMTAgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKyNlbmRpZiAvKiBVTklYICovCisj ZW5kaWYgLyogU1lTVElNRUggKi8KKyNlbmRpZiAvKiBOT1NZU1RJTUVIICovCisKKyNpZm5kZWYg Tk9TWVNUSU1FQkgJCQkvKiA8c3lzL3RpbWViLmg+ICovCisjaWZuZGVmIFNZU1RJTUVCSAorI2lm ZGVmIE9TRgorI2RlZmluZSBTWVNUSU1FQkgKKyNlbHNlCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZp bmUgU1lTVElNRUJICisjZWxzZQorI2lmZGVmIEJTRDQxCisjZGVmaW5lIFNZU1RJTUVCSAorI2Vs c2UKKyNpZmRlZiBCU0QyOQorI2RlZmluZSBTWVNUSU1FQkgKKyNlbHNlCisjaWZkZWYgVE9XRVIx CisjZGVmaW5lIFNZU1RJTUVCSAorI2Vsc2UKKyNpZmRlZiBGVDIxCisjZGVmaW5lIFNZU1RJTUVC SAorI2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisjZGVmaW5lIFNZU1RJTUVCSAorI2VuZGlmIC8qIEJF TExWMTAgKi8KKyNlbmRpZiAvKiBGVDIxICovCisjZW5kaWYgLyogVE9XRVIxICovCisjZW5kaWYg LyogQlNEMjkgKi8KKyNlbmRpZiAvKiBCU0Q0MSAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisj ZW5kaWYgLyogT1NGICovCisjZW5kaWYgLyogU1lTVElNRUJIICovCisjZW5kaWYgLyogTk9TWVNU SU1FQkggKi8KKworLyoKKyBEZWJ1ZyBhbmQgdHJhbnNhY3Rpb24gbG9nZ2luZyBpcyBpbmNsdWRl ZCBhdXRvbWF0aWNhbGx5IHVubGVzcyB5b3UgZGVmaW5lCisgTk9ERUJVRyBvciBOT1RMT0cuICBE byB0aGlzIGlmIHlvdSB3YW50IHRvIHNhdmUgdGhlIHNwYWNlIGFuZCBvdmVyaGVhZC4KKyAoTm90 ZSwgaW4gdmVyc2lvbiA0RiB0aGVzZSBkZWZpbml0aW9ucyBjaGFuZ2VkIGZyb20gInt9IiB0byB0 aGUgbnVsbCBzdHJpbmcKKyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHNlbWljb2xvbnMgYWZ0ZXIg YnJhY2VzLCBhcyBpbjogImlmICh4KSB0bG9nKHRoaXMpOworIGVsc2UgdGxvZyh0aGF0KTsiCisq LworI2lmbmRlZiBOT0RFQlVHCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYg LyogREVCVUcgKi8KKyNlbHNlCisjaWZkZWYgREVCVUcKKyN1bmRlZiBERUJVRworI2VuZGlmIC8q IERFQlVHICovCisjZW5kaWYgLyogTk9ERUJVRyAqLworCisjaWZkZWYgTk9UTE9HCisjaWZkZWYg VExPRworI3VuZGVmIFRMT0cKKyNlbmRpZiAvKiBUTE9HICovCisjZWxzZSAgLyogTk9UTE9HICov CisjaWZuZGVmIFRMT0cKKyNkZWZpbmUgVExPRworI2VuZGlmIC8qIFRMT0cgKi8KKyNlbmRpZiAv KiBOT1RMT0cgKi8KKworLyogZGVidWcoKSBtYWNybyBzdHlsZSBzZWxlY3Rpb24uICovCisKKyNp ZmRlZiBWTVMKKyNpZm5kZWYgSUZERUJVRworI2RlZmluZSBJRkRFQlVHCisjZW5kaWYgLyogSUZE RUJVRyAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgTUFDCisjaWZuZGVmIElGREVCVUcK KyNkZWZpbmUgSUZERUJVRworI2VuZGlmIC8qIElGREVCVUcgKi8KKyNlbmRpZiAvKiBNQUMgKi8K KworI2lmZGVmIE9TMgorI2lmbmRlZiBJRkRFQlVHCisjZGVmaW5lIElGREVCVUcKKyNlbmRpZiAv KiBJRkRFQlVHICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBPWE9TCQkJCS8qIHRzdCBp cyBmYXN0ZXIgdGhhbiBqc3IgKi8KKyNpZm5kZWYgSUZERUJVRworI2RlZmluZSBJRkRFQlVHCisj ZW5kaWYgLyogSUZERUJVRyAqLworI2VuZGlmIC8qIE9YT1MgKi8KKworI2lmbmRlZiBDS0NNQUkK K2V4dGVybiBpbnQgZGVibG9nOworZXh0ZXJuIGludCBkZWJvazsKK2V4dGVybiBpbnQgZGVieGxl bjsKK2V4dGVybiBpbnQgbWF0Y2hkb3Q7CitleHRlcm4gaW50IHR0X2JlbGw7CisjZW5kaWYgLyog Q0tDTUFJICovCisKKyNpZmRlZiBPUzIKK19QUk9UT1RZUCggdm9pZCBibGVlcCwgKHNob3J0KSAp OworI2Vsc2UgLyogT1MyICovCisjZGVmaW5lIGJsZWVwKHgpIGlmKHR0X2JlbGwpcHV0Y2hhcign XDA3JykKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBCRU9TT1JCRUJPWAorI2lmZGVmIEJF Qk9YCQkJCS8qIFRoaXMgd2FzIHVzZWQgb25seSBmb3IgRFI3ICovCisjZGVmaW5lIEJFT1NPUkJF Qk9YCisjZWxzZQorI2lmZGVmIEJFT1MJCQkJLyogVGhpcyBpcyB1c2VkIGZvciBCZU9TIDQueCAq LworI2RlZmluZSBCRU9TT1JCRUJPWAorI2VuZGlmIC8qIEJFT1MgKi8KKyNlbmRpZiAvKiBCRUJP WCAqLworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisKKyNpZmRlZiBOT0lDUAorI2lmZGVmIFRM T0cKKyN1bmRlZiBUTE9HCisjZW5kaWYgLyogVExPRyAqLworI2VuZGlmIC8qIE5PSUNQICovCisK Ky8qIEZvcm1hdHMgZm9yIGRlYnVnKCkgYW5kIHRsb2coKSAqLworCisjZGVmaW5lIEYwMDAgMAor I2RlZmluZSBGMDAxIDEKKyNkZWZpbmUgRjAxMCAyCisjZGVmaW5lIEYwMTEgMworI2RlZmluZSBG MTAwIDQKKyNkZWZpbmUgRjEwMSA1CisjZGVmaW5lIEYxMTAgNgorI2RlZmluZSBGMTExIDcKKwor I2lmZGVmIF9fbGludXhfXworI2lmbmRlZiBMSU5VWAorI2RlZmluZSBMSU5VWAorI2VuZGlmIC8q IExJTlVYICovCisjZW5kaWYgLyogX19saW51eF9fICovCisKKy8qIFBsYXRmb3JtcyB3aGVyZSBz bWFsbCBzaXplIGlzIG5lZWRlZCAqLworCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgQ0tfU01BTEwK KyNlbmRpZiAvKiBwZHAxMSAqLworCisvKiBDYW4gd2UgdXNlIHJlYWxwYXRoKCk/ICovCisKKyNp Zm5kZWYgTk9SRUFMUEFUSAorI2lmZGVmIHBkcDExCisjZGVmaW5lIE5PUkVBTFBBVEgKKyNlbmRp ZiAvKiBwZHAxMSAqLworI2VuZGlmIC8qIE5PUkVBTFBBVEggKi8KKworI2lmbmRlZiBOT1JFQUxQ QVRICisjaWZkZWYgVU5JWAorI2lmZGVmIEhQVVg1CisjZGVmaW5lIE5PUkVBTFBBVEgKKyNlbHNl CisjaWZkZWYgSFBVWDYKKyNkZWZpbmUgTk9SRUFMUEFUSAorI2Vsc2UKKyNpZmRlZiBIUFVYNwor I2RlZmluZSBOT1JFQUxQQVRICisjZWxzZQorI2lmZGVmIEhQVVg4CisjZGVmaW5lIE5PUkVBTFBB VEgKKyNlbHNlCisjaWZkZWYgU1Y2OFIzVjYKKyNkZWZpbmUgTk9SRUFMUEFUSAorI2Vsc2UKKyNp ZmRlZiBYRU5JWAorI2RlZmluZSBOT1JFQUxQQVRICisjZWxzZQorI2lmZGVmIENLX1NDTzMyVjQK KyNkZWZpbmUgTk9SRUFMUEFUSAorI2Vsc2UKKyNpZmRlZiBDS19TQ09WNQorI2RlZmluZSBOT1JF QUxQQVRICisjZWxzZQorI2lmZGVmIE9TRjMyCisjZGVmaW5lIE5PUkVBTFBBVEgKKyNlbHNlCisj aWZkZWYgT1NGMzAKKyNkZWZpbmUgTk9SRUFMUEFUSAorI2Vsc2UKKyNpZmRlZiB1bHRyaXgKKyNk ZWZpbmUgTk9SRUFMUEFUSAorI2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBOT1JFQUxQ QVRICisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiB1bHRyaXggKi8KKyNlbmRpZiAv KiBPU0YzMCAqLworI2VuZGlmIC8qIE9TRjMyICovCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNl bmRpZiAvKiBDS19TQ08zMlY0ICovCisjZW5kaWYgLyogWEVOSVggKi8KKyNlbmRpZiAvKiBTVjY4 UjNWNiAqLworI2VuZGlmIC8qIEhQVVg4ICovCisjZW5kaWYgLyogSFBVWDcgKi8KKyNlbmRpZiAv KiBIUFVYNiAqLworI2VuZGlmIC8qIEhQVVg1ICovCisjZW5kaWYgLyogTk9SRUFMUEFUSCAqLwor CisjaWZuZGVmIE5PUkVBTFBBVEgKKyNpZm5kZWYgQ0tSRUFMUEFUSAorI2RlZmluZSBDS1JFQUxQ QVRICisjZW5kaWYgLyogTk9SRUFMUEFUSCAqLworI2VuZGlmIC8qIENLUkVBTFBBVEggKi8KKyNl bmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBDS1JFQUxQQVRICisjaWZkZWYgT1MyT1JVTklYCisj aWZuZGVmIENLUk9PVAorI2RlZmluZSBDS1JPT1QKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBDS1JFQUxQQVRIICovCisKKy8qIENLU1lNTElO SyBzaG91bGQgYmUgc2V0IG9ubHkgaWYgd2UgY2FuIHVzZSByZWFkbGluaygpICovCisKKyNpZmRl ZiBVTklYCisjaWZuZGVmIE5PU1lNTElOSworI2lmbmRlZiBDS1NZTUxJTksKKyNkZWZpbmUgQ0tT WU1MSU5LCisjZW5kaWYgLyogTk9TWU1MSU5LICovCisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisj ZW5kaWYgLyogVU5JWCAqLworCisvKiBQbGF0Zm9ybXMgd2hlcmUgd2UgY2FuIHVzZSBsc3RhdCgp IGluc3RlYWQgb2Ygc3RhdCgpIChmb3Igc3ltbGlua3MpICovCisvKiBUaGlzIHNob3VsZCBiZSBz ZXQgb25seSBpZiBib3RoIGxzdGF0KCkgYW5kIHJlYWRsaW5rKCkgYXJlIGF2YWlsYWJsZSAqLwor CisjaWZuZGVmIE5PTFNUQVQKKyNpZm5kZWYgTk9TWU1MSU5LCisjaWZuZGVmIFVTRV9MU1RBVAor I2lmZGVmIFVOSVgKKyNpZmRlZiBDS1NZTUxJTksKKyNpZmRlZiBTVlI0CQkJCS8qIFNWUjQgaGFz IGxzdGF0KCkgKi8KKyNkZWZpbmUgVVNFX0xTVEFUCisjZWxzZQorI2lmZGVmIEJTRDQyCQkJCS8q IDQuMkJTRCBhbmQgNC4zQlNEIGhhdmUgaXQgKi8KKyNkZWZpbmUgVVNFX0xTVEFUCQkJLyogVGhp cyBzaG91bGQgaW5jbHVkZSBvbGQgSFBVWHMgKi8KKyNlbHNlCisjaWZkZWYgQlNENDQJCQkJLyog NC40QlNEIGhhcyBpdCAqLworI2RlZmluZSBVU0VfTFNUQVQKKyNlbHNlCisjaWZkZWYgTElOVVgJ CQkJLyogTElOVVggaGFzIGl0ICovCisjZGVmaW5lIFVTRV9MU1RBVAorI2Vsc2UKKyNpZmRlZiBT VU5PUzQJCQkJLyogU3VuT1MgaGFzIGl0ICovCisjZGVmaW5lIFVTRV9MU1RBVAorI2VuZGlmIC8q IFNVTk9TNCAqLworI2VuZGlmIC8qIExJTlVYICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRp ZiAvKiBCU0Q0MiAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8K KyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogVVNFX0xTVEFUICovCisjZW5kaWYgLyogTk9T WU1MSU5LICovCisjZW5kaWYgLyogTk9MU1RBVCAqLworCisjaWZkZWYgTk9MU1RBVAorI2lmZGVm IFVTRV9MU1RBVAorI3VuZGVmIFVTRV9MU1RBVAorI2VuZGlmIC8qIFVTRV9MU1RBVCAqLworI2Vu ZGlmIC8qIE5PTFNUQVQgKi8KKworI2lmbmRlZiBOT1RUWUxPQ0sJCQkvKiBVTklYIHN5c3RlbXMg dGhhdCBoYXZlIHR0eWxvY2soKSAqLworI2lmbmRlZiBVU0VUVFlMT0NLCisjaWZkZWYgQUlYUlMJ CQkJLyogQUlYIDMuMSBhbmQgbGF0ZXIgKi8KKyNkZWZpbmUgVVNFVFRZTE9DSworI2Vsc2UKKyNp ZmRlZiBVU0VfVVVfTE9DSwkJCS8qIEZyZWVCU0Qgb3Igb3RoZXIgd2l0aCB1dV9sb2NrKCkgKi8K KyNkZWZpbmUgVVNFVFRZTE9DSworI2Vsc2UKKy8qCisgIFByaW9yIHRvIDguMC4yOTkgQWxwaGEu MDggdGhpcyB3YXMgSEFWRV9CQVVEQk9ZIHdoaWNoIHdhcyBhZGRlZCBmb3IKKyAgUmVkIEhhdCA3 LjIgaW4gTWF5IDIwMDMgYnV0IHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gRGViaWFu IGFuZAorICBPcGVuU3VzZSAoYXQgbGVhc3QpLgorKi8KKyNpZmRlZiBIQVZFX0xPQ0tERVYKKyNk ZWZpbmUgVVNFVFRZTE9DSworI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLworI2VuZGlmIC8qIFVT RV9VVV9MT0NLICovCisjZW5kaWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBVU0VUVFlMT0NLICov CisjZW5kaWYgLyogTk9UVFlMT0NLICovCisKKyNpZm5kZWYgTk9fT1BFTlBUWQkJCS8qIENhbiB1 c2Ugb3BlbnB0eSgpICovCisjaWZuZGVmIEhBVkVfT1BFTlBUWQorI2lmZGVmIF9fbGludXhfXwor I2RlZmluZSBIQVZFX09QRU5QVFkKKyNlbHNlCisjaWZkZWYgX19GcmVlQlNEX18KKyNkZWZpbmUg SEFWRV9PUEVOUFRZCisjZWxzZQorI2lmZGVmIF9fT3BlbkJTRF9fCisjZGVmaW5lIEhBVkVfT1BF TlBUWQorI2Vsc2UKKyNpZmRlZiBfX05ldEJTRF9fCisjZGVmaW5lIEhBVkVfT1BFTlBUWQorI2Vs c2UKKyNpZmRlZiBNQUNPU1gxMAorI2RlZmluZSBIQVZFX09QRU5QVFkKKyNlbmRpZgkvKiBNQUNP U1gxMCAqLworI2VuZGlmCS8qIF9fTmV0QlNEX18gKi8KKyNlbmRpZgkvKiBfX09wZW5CU0RfXyAq LworI2VuZGlmCS8qIF9fRnJlZUJTRF9fICovCisjZW5kaWYJLyogX19saW51eF9fICovCisjZW5k aWYJLyogSEFWRV9PUEVOUFRZICovCisjZW5kaWYJLyogTk9fT1BFTlBUWSAqLworCisvKiBLZXJt aXQgZmVhdHVyZSBzZWxlY3Rpb24gKi8KKworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBOT0NIQU5O RUxJTwkJCS8qIENoYW5uZWwtYmFzZWQgZmlsZSBpL28gcGFja2FnZSAqLworI2lmbmRlZiBDS0NI QU5ORUxJTworI2lmZGVmIFVOSVgKKyNkZWZpbmUgQ0tDSEFOTkVMSU8KKyNlbHNlCisjaWZkZWYg T1MyCisjZGVmaW5lIENLQ0hBTk5FTElPCisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBDS0NI QU5ORUxJTworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisjZGVmaW5lIENLQ0hBTk5FTElPCisjZW5k aWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworI2VuZGlmIC8qIE5PQ0hB Tk5FTElPICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT0NLRVhFQwkJCS8qIEVY RUMgY29tbWFuZCAqLworI2lmbmRlZiBOT1BVU0gKKyNpZm5kZWYgQ0tFWEVDCisjaWZkZWYgVU5J WAkJCQkvKiBVTklYIGNhbiBkbyBpdCAqLworI2RlZmluZSBDS0VYRUMKKyNlbmRpZiAvKiBVTklY ICovCisjZW5kaWYgLyogQ0tFWEVDICovCisjZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyog Tk9DS0VYRUMgKi8KKworI2lmbmRlZiBOT0ZBU1QJCQkJLyogRmFzdCBLZXJtaXQgcHJvdG9jb2wg YnkgZGVmYXVsdCAqLworI2lmbmRlZiBDS19GQVNUCisjaWZkZWYgVU5JWAorI2RlZmluZSBDS19G QVNUCisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBDS19GQVNUCisjZWxzZQorI2lmZGVmIE9T MgorI2RlZmluZSBDS19GQVNUCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisj ZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLX0ZBU1QgKi8KKyNlbmRpZiAvKiBOT0ZBU1Qg Ki8KKworI2lmZGVmIFVOSVgJCQkJLyogVHJhbnNwYXJlbnQgcHJpbnQgKi8KKyNpZm5kZWYgTk9Y UFJJTlQKKyNpZm5kZWYgWFBSSU5UCisjZGVmaW5lIFhQUklOVAorI2VuZGlmIC8qIFhQUklOVCAq LworI2VuZGlmIC8qIE5PWFBSSU5UICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZuZGVmIE5P SFdQQVJJVFkJCQkvKiBIYXJkd2FyZSBwYXJpdHkgKi8KKyNpZm5kZWYgSFdQQVJJVFkKKyNpZmRl ZiBTVk9SUE9TSVgJCQkvKiBTeXN0ZW0gViBvciBQT1NJWCBjYW4gaGF2ZSBpdCAqLworI2RlZmlu ZSBIV1BBUklUWQorI2Vsc2UKKyNpZmRlZiBTVU5PUzQxCQkJCS8qIFN1bk9TIDQuMSBjYW4gaGF2 ZSBpdCAqLworI2RlZmluZSBIV1BBUklUWQorI2Vsc2UKKyNpZmRlZiBPUzIJCQkJLyogSzk1IGNh biBoYXZlIGl0ICovCisjZGVmaW5lIEhXUEFSSVRZCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogU1VOT1M0MSAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8qIEhXUEFSSVRZ ICovCisjZW5kaWYgLyogTk9IV1BBUklUWSAqLworCisjaWZuZGVmIE5PU1RPUEJJVFMJCQkvKiBT dG9wLWJpdCBzZWxlY3Rpb24gKi8KKyNpZm5kZWYgU1RPUEJJVFMKKyNpZmRlZiBPUzJPUlVOSVgK Ky8qIEluIFVuaXggcmVhbGx5IHRoaXMgc2hvdWxkIG9ubHkgYmUgaWYgQ1NUT1BCIGlzIGRlZmlu ZWQuICovCisvKiBCdXQgd2UgZG9uJ3Qga25vdyB0aGF0IHlldC4gKi8KKyNkZWZpbmUgU1RPUEJJ VFMKKyNlbHNlCisjaWZkZWYgVE5fQ09NUE9SVAorI2RlZmluZSBTVE9QQklUUworI2VuZGlmIC8q IFROX0NPTVBPUlQgKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBTVE9QQklU UyAqLworI2VuZGlmIC8qIE5PU1RPUEJJVFMgKi8KKworI2lmZGVmIFVOSVgKKyNpZm5kZWYgTkVU Q01ECQkJCS8qIENhbiBTRVQgTkVUV09SSyBUWVBFIENPTU1BTkQgKi8KKyNkZWZpbmUgTkVUQ01E CisjZW5kaWYgLyogTkVUQ01EICovCisjZW5kaWYgLyogVU5JWCAqLworCisvKiBQdHkgc3VwcG9y dCwgbm9ucG9ydGFibGUsIGF2YWlsYWJsZSBvbiBhIGNhc2UtYnktY2FzZSBiYXNpcyAqLworCisj aWZuZGVmIE5PUFRZCisjaWZkZWYgTkVYVAkJCQkvKiBOZVhUU1RFUCAodGVzdGVkIG9uIDMuMSkq LworI2RlZmluZSBORVRQVFkKKyNlbHNlCisjaWZkZWYgQ0tfU0NPVjUJCQkJLyogU0NPIE9TUjUg KHRlc3RlZCBvbiA1LjAuNSkqLworI2RlZmluZSBORVRQVFkKKyNlbHNlCisjaWZkZWYgUU5YCQkJ CS8qIFFOWCAodGVzdGVkIG9uIDQuMjUpICovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNpZmRl ZiBTSU5JWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaW5peCAodGVzdGVkIG9uIDUu NDIpICovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNpZmRlZiBER1VYNTQwCQkJCS8qIERHL1VY IDUuNCsrICh0ZXN0ZWQgb24gNS40UjQuMTEpICovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNp ZmRlZiBPU0YzMgkJCQkvKiBEaWdpdGFsIFVuaXggMy4yICovCisjZGVmaW5lIE5FVFBUWQorI2Vs c2UKKyNpZmRlZiBPU0Y0MAkJCQkvKiBEaWdpdGFsIFVuaXggNC4wIC8gVHJ1NjQgKi8KKyNkZWZp bmUgTkVUUFRZCisjZWxzZQorI2lmZGVmIElSSVg2MAkJCQkvKiBJUklYIDYuMCAobm90IGVhcmxp ZXIpICovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNpZmRlZiBIUFVYMTAJCQkJLyogSFBVWCAx MC4wMCBvciBsYXRlciAqLworI2RlZmluZSBORVRQVFkKKyNpZm5kZWYgSEFWRV9QVFlUUkFQCisj ZGVmaW5lIEhBVkVfUFRZVFJBUAorI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworI2Vsc2UKKyNp ZmRlZiBIUFVYOQkJCQkvKiBIUFVYIDkuMDAgKG5vdCBlYXJsaWVyKSAqLworI2RlZmluZSBORVRQ VFkKKyNpZm5kZWYgSEFWRV9QVFlUUkFQCisjZGVmaW5lIEhBVkVfUFRZVFJBUAorI2VuZGlmIC8q IEhBVkVfUFRZVFJBUCAqLworI2Vsc2UKKyNpZmRlZiBCU0Q0NAkJCQkvKiBCU0Q0NCwge05ldCxG cmVlLE9wZW59QlNEICovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNpZmRlZiBCU0RJCQkJCS8q IEJTREkvT1MgKHRlc3RlZCBpbiA0KSAqLworI2RlZmluZSBORVRQVFkKKyNlbHNlCisjaWZkZWYg U09MQVJJUwkJCQkvKiBTb2xhcmlzICh0ZXN0ZWQgaW4gMi41KSAqLworI2RlZmluZSBORVRQVFkK KyNlbHNlCisjaWZkZWYgVVc3CQkJCS8qIFVuaXh3YXJlIDcgKi8KKyNkZWZpbmUgTkVUUFRZCisj ZWxzZQorI2lmZGVmIFNVTk9TNDEJCQkJLyogU3VuT1MgKHRlc3RlZCBpbiA0LjEuMykgKi8KKyNk ZWZpbmUgTkVUUFRZCisjZWxzZQorI2lmZGVmIEFJWDQxCQkJCS8qIEFJWCA0LjEgYW5kIGxhdGVy ICovCisjZGVmaW5lIE5FVFBUWQorI2Vsc2UKKyNpZmRlZiBMSU5VWAkJCQkvKiBMaW51eCAqLwor I2RlZmluZSBORVRQVFkKKyNlbmRpZiAvKiBMSU5VWCAqLworI2VuZGlmIC8qIEFJWDQxICovCisj ZW5kaWYgLyogU1VOT1M0MSAqLworI2VuZGlmIC8qIFVXNyAqLworI2VuZGlmIC8qIFNPTEFSSVMg Ki8KKyNlbmRpZiAvKiBCU0RJICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBIUFVY OSAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIElSSVg2MCAqLworI2VuZGlmIC8q IE9TRjQwICovCisjZW5kaWYgLyogT1NGMzIgKi8KKyNlbmRpZiAvKiBER1VYNTQwICovCisjZW5k aWYgLyogU0lOSVggKi8KKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLwor I2VuZGlmIC8qIE5FWFQgKi8KKworI2Vsc2UgLyogTk9QVFkgKi8KKworI2lmZGVmIE5FVFBUWQor I3VuZGVmIE5FVFBUWQorI2VuZGlmIC8qIE5FVFBUWSAqLworI2VuZGlmIC8qIE5PUFRZICovCisK KyNpZmRlZiBORVRQVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRDTUQgcmVxdWly ZWQgZm9yIE5FVFBUWSAqLworI2lmbmRlZiBORVRDTUQKKyNkZWZpbmUgTkVUQ01ECisjZW5kaWYg LyogTkVUQ01EICovCisjZW5kaWYgLyogTkVUUFRZICovCisKKyNpZm5kZWYgQ0tfVVRTTkFNRQkJ CS8qIENhbiB3ZSBjYWxsIHVuYW1lKCk/ICovCisjaWZkZWYgVk1TCisjZGVmaW5lIENLX1VUU05B TUUKKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIENLX1VUU05BTUUKKyNlbHNlCisjaWZkZWYg UE9TSVgJCQkJLyogSXQncyBpbiBQT1NJWC4xICovCisjZGVmaW5lIENLX1VUU05BTUUKKyNlbHNl CisjaWZkZWYgU1VOT1M0MQkJCQkvKiBJdCdzIGluIFN1bk9TIDQuMSAqLworI2RlZmluZSBDS19V VFNOQU1FCisjZWxzZQorI2lmZGVmIEFJWFJTCQkJCS8qIEl0J3MgaW4gQUlYICovCisjZGVmaW5l IENLX1VUU05BTUUKKyNlbHNlCisjaWZkZWYgU1ZSNAkJCQkvKiBJdCdzIGluIFNWUjQgKGJ1dCBu b3QgU1ZSMykgKi8KKyNkZWZpbmUgQ0tfVVRTTkFNRQorI2Vsc2UKKyNpZmRlZiBIUFVYCQkJCS8q IEl0J3MgaW4gSFAtVVggNS4wMCBhbmQgbGF0ZXIgKi8KKyNkZWZpbmUgQ0tfVVRTTkFNRQorI2Vs c2UKKyNpZmRlZiBPU0YJCQkJLyogSXQncyBpbiBPU0YvMSAvIERpZ2l0YWwgVU5JWCAqLworI2Rl ZmluZSBDS19VVFNOQU1FCisjZWxzZQorI2lmZGVmIENLX1NDT1Y1CisjZGVmaW5lIENLX1VUU05B TUUKKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIE9TRiAqLworI2VuZGlmIC8qIEhQ VVggKi8KKyNlbmRpZiAvKiBTVlI0ICovCisjZW5kaWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBT VU5PUzQxICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAv KiBWTVMgKi8KKyNlbmRpZiAvKiBDS19VVFNOQU1FICovCisKKy8qIFRoaXMgc2VjdGlvbiBmb3Ig YW55dGhpbmcgdGhhdCBtaWdodCB1c2UgZmxvYXRpbmctcG9pbnQgKi8KKworLyogSWYgdGhlIGZv bGxvd2luZyBjYXVzZXMgdHJvdWJsZSB1c2UgLURGTE9BVD1mbG9hdCBvbiB0aGUgY29tbWFuZCBs aW5lICovCisKKyNpZmRlZiBOT1NQTAorI2lmZGVmIEZORkxPQVQKKyN1bmRlZiBGTkZMT0FUCisj ZW5kaWYgLyogRk5GTE9BVCAqLworI2lmZGVmIENLRkxPQVQKKyN1bmRlZiBDS0ZMT0FUCisjZW5k aWYgLyogQ0tGTE9BVCAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9GTE9BVAor CisjaWZuZGVmIENLRkxPQVQKKyNpZmRlZiBfX2FscGhhCisvKiBEb24ndCB1c2UgZG91YmxlIG9u IDY0LWJpdCBwbGF0Zm9ybXMgLS0gYmFkIHRoaW5ncyBoYXBwZW4gKi8KKyNkZWZpbmUgQ0tGTE9B VCBmbG9hdAorI2RlZmluZSBDS0ZMT0FUX1MgImZsb2F0IgorI2Vsc2UKKyNkZWZpbmUgQ0tGTE9B VCBkb3VibGUKKyNkZWZpbmUgQ0tGTE9BVF9TICJkb3VibGUiCisjZW5kaWYgLyogX19hbHBoYSAq LworI2VuZGlmIC8qIENLRkxPQVQgKi8KKworI2lmbmRlZiBOT0dGVElNRVIJCQkvKiBGbG9hdGlu Zy1wb2ludCB0aW1lcnMgKi8KKyNpZm5kZWYgR0ZUSU1FUgorI2lmZGVmIFVOSVgJCQkJLyogRm9y IFVOSVggKi8KKyNkZWZpbmUgR0ZUSU1FUgorI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBWTVMJ CQkJLyogVk1TICovCisjaWZuZGVmIE9MRF9WTVMJCQkJLyogNS4wIGFuZCBsYXRlciAqLworI2Rl ZmluZSBHRlRJTUVSCisjZW5kaWYgLyogT0xEX1ZNUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2lm ZGVmIE9TMgkJCQkvKiBBbmQgSzk1ICovCisjZGVmaW5lIEdGVElNRVIKKyNlbmRpZiAvKiBPUzIg Ki8KKyNpZmRlZiBTVFJBVFVTCQkJCS8qIEFuZCBTdHJhdHVzIFZPUyAqLworI2RlZmluZSBHRlRJ TUVSCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyNlbmRpZiAv KiBOT0dGVElNRVIgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBGTkZMT0FUCQkJCS8qIEZs b2F0aW5nLXBvaW50IG1hdGggZnVuY3Rpb25zICovCisjaWZkZWYgVk1TCQkJCS8qIGRlZmluZWQg YnkgZGVmYXVsdCBpbiBWTVMgKi8KKyNkZWZpbmUgRk5GTE9BVAorI2Vsc2UKKyNpZmRlZiBPUzIJ CQkJLyogYW5kIEs5NSAqLworI2RlZmluZSBGTkZMT0FUCisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogVk1TICovCisjZW5kaWYgLyogRk5GTE9BVCAqLworI2VuZGlmIC8qIE5PU1BMICovCisK KyNlbHNlICAvKiBOT0ZMT0FUIGlzIGRlZmluZWQgKi8KKworI2lmZGVmIENLRkxPQVQKKyN1bmRl ZiBDS0ZMT0FUCisjZW5kaWYgLyogQ0tGTE9BVCAqLworCisjaWZkZWYgR0ZUSU1FUgorI3VuZGVm IEdGVElNRVIKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyNpZmRlZiBGTkZMT0FUCisjdW5kZWYg Rk5GTE9BVAorI2VuZGlmIC8qIEZORkxPQVQgKi8KKworI2VuZGlmIC8qIE5PRkxPQVQgKi8KKwor I2lmZGVmIEdGVElNRVIJCQkJLyogRnJhY3Rpb24gb2Ygc2Vjb25kIHRvIHVzZSB3aGVuICovCisj aWZuZGVmIEdGTUlOVElNRQkJCS8qIGVsYXBzZWQgdGltZSBpcyA8PSAwICovCisjZGVmaW5lIEdG TUlOVElNRSAwLjAwNQorI2VuZGlmIC8qIEdGTUlOVElNRSAqLworI2VuZGlmIC8qIEdGVElNRVIg Ki8KKworI2lmbmRlZiBDS0NNQUkKK2V4dGVybiBsb25nIHp0bXNlYywgenR1c2VjOwkJLyogRnJh Y3Rpb24gb2Ygc2VjIG9mIGN1cnJlbnQgdGltZSAqLworI2VuZGlmIC8qIENLQ01BSSAqLworCisj aWZuZGVmIE5PVU5QUkVGSVhaRVJPCQkJLyogQWxsb3cgdW5wcmVmaXhpbmcgb2YgTlVMICgwKSAq LworI2lmbmRlZiBVTlBSRUZJWFpFUk8JCQkvKiBpbiBmaWxlLXRyYW5zZmVyIHBhY2tldHMgKi8K KyNkZWZpbmUgVU5QUkVGSVhaRVJPCisjZW5kaWYgLyogVU5QUkVGSVhaRVJPICovCisjZW5kaWYg LyogTk9VTlBSRUZJWFpFUk8gKi8KKworI2lmZGVmIENLX1NNQUxMCisjZGVmaW5lIE5PQ0FMCQkJ CS8qIENhbGlicmF0ZSAqLworI2VuZGlmIC8qIENLX1NNQUxMICovCisKKyNpZm5kZWYgTk9QQVRU RVJOUwkJCS8qIEZpbGV0eXBlIG1hdGNoaW5nIHBhdHRlcm5zICovCisjaWZuZGVmIFBBVFRFUk5T CisjaWZuZGVmIFZNUworI2lmbmRlZiBDS19TTUFMTAorI2RlZmluZSBQQVRURVJOUworI2VuZGlm IC8qIENLX1NNQUxMICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogUEFUVEVSTlMgKi8K KyNlbmRpZiAvKiBOT1BBVFRFUk5TICovCisKKyNpZm5kZWYgTk9DQUwKKyNpZm5kZWYgQ0FMSUJS QVRFCisjZGVmaW5lIENBTElCUkFURQorI2VuZGlmIC8qIENBTElCUkFURSAqLworI2Vsc2UKKyNp ZmRlZiBDQUxJQlJBVEUKKyN1bmRlZiBDQUxJQlJBVEUKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8K KyNlbmRpZiAvKiBOT0NBTCAqLworCisjaWZuZGVmIE5PUkVDVVJTRQkJCS8qIFJlY3Vyc2l2ZSBk aXJlY3RvcnkgdHJhdmVyc2FsICovCisjaWZuZGVmIFJFQ1VSU0lWRQorI2lmZGVmIFZNUworI2Rl ZmluZSBSRUNVUlNJVkUKKyNlbHNlCisjaWZkZWYgT1MyT1JVTklYCisjaWZuZGVmIENLX1NNQUxM CisjZGVmaW5lIFJFQ1VSU0lWRQorI2VuZGlmIC8qIENLX1NNQUxMICovCisjZWxzZQorI2lmZGVm IFNUUkFUVVMKKyNkZWZpbmUgUkVDVVJTSVZFCisjZWxzZQorI2lmZGVmIE9TSworI2RlZmluZSBS RUNVUlNJVkUKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYg LyogT1MyT1JVTklYICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogUkVDVVJTSVZFICov CisjZW5kaWYgLyogTk9SRUNVUlNFICovCisKKyNpZm5kZWYgQ0tfU01BTEwJCQkvKiBFbmFibGUg ZmlsZS10cmFuc2ZlciB0dW5pbmcgY29kZSAqLworI2lmbmRlZiBDS1RVTklORwkJCS8qIGluIHdo aWNoIG1vcmUgY29kZSBpcyBhZGRlZCAqLworI2lmbmRlZiBOT1RVTklORwkJCS8qIHRvIGF2b2lk IGZ1bmN0aW9uIGNhbGxzLCBldGMgKi8KKyNkZWZpbmUgQ0tUVU5JTkcKKyNlbmRpZiAvKiBOT1RV TklORyAqLworI2VuZGlmIC8qIENLVFVOSU5HICovCisjZW5kaWYgLyogQ0tfU01BTEwgKi8KKwor I2lmbmRlZiBOT1VSTAkJCQkvKiBQYXJzZSBVUkxzIGluIFNFVCBIT1NULCBldGMgKi8KKyNkZWZp bmUgQ0tfVVJMCisjZGVmaW5lIE5PX0ZUUF9BVVRIICAgICAgICAgICAgICAgICAgICAgLyogTm8g YXV0aCAiZnRwIiAvICJhbm9ueW1vdXMiICovCisjZW5kaWYgLyogTk9VUkwgKi8KKworI2lmbmRl ZiBOT1RSSUdHRVIKKyNpZm5kZWYgQ0tfVFJJR0dFUgkJCS8qIFRyaWdnZXIgc3RyaW5nIHRvIGV4 aXQgQ09OTkVDVCAqLworI2lmZGVmIE9TMk9SVU5JWAkJCS8qIE9LIGZvciBVTklYIGFuZCBLOTUg Ki8KKyNkZWZpbmUgQ0tfVFJJR0dFUgorI2Vsc2UKKyNpZmRlZiBWTVMJCQkJLyogYW5kIFZNUyAq LworI2RlZmluZSBDS19UUklHR0VSCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCQkJLyogYW5k IEFPUy9WUyAqLworI2RlZmluZSBDS19UUklHR0VSCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K KyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDS19U UklHR0VSICovCisjZW5kaWYgLyogTk9UUklHR0VSICovCisKKyNpZmRlZiBDS19UUklHR0VSCisj ZGVmaW5lIFRSSUdHRVJTIDgJCQkvKiBIb3cgbWFueSB0cmlnZ2VycyBhbGxvd2VkICovCisjZW5k aWYgLyogQ0tfVFJJR0dFUiAqLworCisjaWZuZGVmIFhMSU1JVFMJCQkJLyogQ09OTkVDVCBsaW1p dHMgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgWExJTUlUUworI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIFhMSU1JVFMgKi8KKworI2lmZGVmIE5PRlJJTExTCisjaWZuZGVmIE5PQlJPV1NFUgor I2RlZmluZSBOT0JST1dTRVIKKyNlbmRpZiAvKiBOT0JST1dTRVIgKi8KKyNpZm5kZWYgTk9GVFAK KyNkZWZpbmUgTk9GVFAKKyNlbmRpZiAvKiBOT0ZUUCAqLworI2VuZGlmIC8qIE5PRlJJTExTICov CisKKyNpZm5kZWYgTk9IVFRQCQkJCS8qIEhUVFAgZmVhdHVyZXMgbmVlZC4uLiAqLworI2lmZGVm IE5PSUNQCQkJCS8qIGFuIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyICovCisjZGVmaW5lIE5P SFRUUAorI2VuZGlmIC8qIE5PSUNQICovCisjaWZuZGVmIFZNUworI2lmbmRlZiBPUzJPUlVOSVgJ CQkvKiBLOTUgb3IgVU5JWCAoYmVjYXVzZSBvZiAqLworI2RlZmluZSBOT0hUVFAJCQkJLyogdGlt ZSBmdW5jdGlvbnMsIHRpbWVfdCwgZXRjKSAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2Vu ZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE5PSFRUUCAqLworCisKKyNpZm5kZWYgTk9ORVQKKyNp ZmRlZiBUQ1BTT0NLRVQKKworLyogVGhlIEhUVFAgY29kZSBpcyBub3QgdmVyeSBwb3J0YWJsZSwg c28gaXQgbXVzdCBiZSBhc2tlZCBmb3Igd2l0aCAtRENLSFRUUCAqLworCisjaWZuZGVmIE5PSFRU UAorI2lmbmRlZiBDS0hUVFAKKyNpZmRlZiBTVU5PUzQJCQkJLyogV2UgY2FuIHVzZSBpdCBpbiBT dW5PUyAqLworI2RlZmluZSBDS0hUVFAKKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNpZmRlZiBTT0xB UklTCQkJCS8qIEFuZCBpbiBTb2xhcmlzICovCisjZGVmaW5lIENLSFRUUAorI2VuZGlmIC8qIFNP TEFSSVMgKi8KKyNpZmRlZiBMSU5VWAkJCQkvKiBBbmQgTGludXggKi8KKyNkZWZpbmUgQ0tIVFRQ CisjZW5kaWYgLyogTElOVVggKi8KKyNpZmRlZiBIUFVYMTAJCQkJLyogQW5kIEhQLVVYIDEwIGFu ZCBhYm92ZSAqLworI2RlZmluZSBDS0hUVFAKKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNpZmRlZiBP UzIJCQkJLyogQW5kIGluIEstOTUgKi8KKyNkZWZpbmUgQ0tIVFRQCisjZW5kaWYgLyogT1MyICov CisjaWZkZWYgQUlYNDEJCQkJLyogSW4gQUlYIDQuMSBhbmQgaGlnaGVyICovCisjZGVmaW5lIENL SFRUUAorI2VuZGlmIC8qIEFJWDQxICovCisjaWZkZWYgVU5JWFdBUkUJCQkJLyogSW4gVW5peHdh cmUgMi4xIGFuZCBoaWdoZXIgKi8KKyNkZWZpbmUgQ0tIVFRQCQkJCS8qIGFuZCBwcm9iYWJseSBh bHNvIGluIDEueCBhbmQgMi4wICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKyNpZmRlZiBDS19T Q09WNQorI2RlZmluZSBDS0hUVFAKKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2lmZGVmIE9TRiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBpbiBPU0YgRGlnaXRhbCBVTklYL1Ry dWUgNjQgKi8KKyNkZWZpbmUgQ0tIVFRQCisjZW5kaWYgLyogT1NGICovCisjaWZkZWYgdWx0cml4 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGluIFVsdHJpeCBNaXBzICovCisjaWZk ZWYgbWlwcworI2RlZmluZSBDS0hUVFAKKyNlbmRpZiAvKiBtaXBzICovCisjZW5kaWYgLyogdWx0 cml4ICovCisjaWZkZWYgX19OZXRCU0RfXwkJCS8qIE5ldEJTRCAqLworI2RlZmluZSBDS0hUVFAK KyNlbmRpZgkvKiBfX05ldEJTRF9fICovCisjaWZkZWYgX19GcmVlQlNEX18KKyNkZWZpbmUgQ0tI VFRQCisjZW5kaWYJLyogX19GcmVlQlNEX18gKi8KKyNpZmRlZiBfX09wZW5CU0RfXworI2RlZmlu ZSBDS0hUVFAKKyNlbmRpZgkvKiBfX09wZW5CU0RfXyAqLworLyogQWRkIG1vcmUgaGVyZS4uLiAq LworI2VuZGlmIC8qIENLSFRUUCAqLworI2lmbmRlZiBDS0hUVFAJCQkJLyogSWYgQ0tIVFRQIG5v dCBkZWZpbmVkIHlldCAqLworI2RlZmluZSBOT0hUVFAJCQkJLyogdGhlbiBkZWZpbmUgTk9IVFRQ ICovCisjZW5kaWYgLyogQ0tIVFRQICovCisjZW5kaWYgLyogTk9IVFRQICovCisKKyNpZmRlZiBO RVRDT05OCQkJCS8qIFNwZWNpYWwgIm5ldHdvcmsiIHR5cGVzLi4uICovCisjaWZuZGVmIE5PTE9D QUwKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTkVURklMRQorI2RlZmluZSBORVRGSUxFCisjZW5kaWYg LyogTkVURklMRSAqLworI2lmbmRlZiBOT1BVU0gKKyNpZm5kZWYgTkVUQ01ECisjZGVmaW5lIE5F VENNRAorI2VuZGlmIC8qIE5FVENNRCAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworI2lmZGVmIE5U CisjaWZuZGVmIE5FVERMTAorI2RlZmluZSBORVRETEwKKyNlbmRpZiAvKiBORVRETEwgKi8KKyNl bmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNl bmRpZiAvKiBORVRDT05OICovCisKKyNpZm5kZWYgTk9GVFAKKyNpZm5kZWYgU1lTRlRQCisjaWZu ZGVmIE5FV0ZUUAorI2lmZGVmIE9TMk9SVU5JWAorI2RlZmluZSBORVdGVFAKKyNlbmRpZiAvKiBP UzJPUlVOSVggKi8KKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNlbmRpZiAvKiBTWVNGVFAgKi8KKyNl bmRpZiAvKiBOT0ZUUCAqLworCisjaWZuZGVmIE5PRlRQCisjaWZkZWYgTkVXRlRQCisjaWZkZWYg U1lTRlRQCisjdW5kZWYgU1lTRlRQCisjZW5kaWYgLyogU1lTRlRQICovCisjZWxzZSAvKiBORVdG VFAgKi8KKyNpZm5kZWYgU1lTRlRQCisjZGVmaW5lIFNZU0ZUUAorI2VuZGlmIC8qIFNZU0ZUUCAq LworI2VuZGlmIC8qIE5FV0ZUUCAqLworI2Vsc2UgLyogTk9GVFAgKi8KKyNpZmRlZiBORVdGVFAK KyN1bmRlZiBORVdGVFAKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNpZmRlZiBTWVNGVFAKKyN1bmRl ZiBTWVNGVFAKKyNlbmRpZiAvKiBTWVNGVFAgKi8KKyNlbmRpZiAvKiBOT0ZUUCAqLworCisjaWZu ZGVmIE5PQlJPV1NFUgorI2lmZGVmIFVOSVgKKyNpZm5kZWYgQlJPV1NFUgorI2lmbmRlZiBOT1BV U0gKKyNkZWZpbmUgQlJPV1NFUgorI2VuZGlmIC8qIE5PUFVTSCAqLworI2VuZGlmIC8qIEJST1dT RVIgKi8KKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgT1MyCisjaWZuZGVmIEJST1dTRVIKKyNp Zm5kZWYgTk9QVVNICisjZGVmaW5lIEJST1dTRVIKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRp ZiAvKiBCUk9XU0VSICovCisjZW5kaWYgLyogT1MyICovCisjZWxzZQorI2lmZGVmIEJST1dTRVIK KyN1bmRlZiBCUk9XU0VSCisjZW5kaWYgLyogQlJPV1NFUiAqLworI2VuZGlmIC8qIE5PQlJPV1NF UiAqLworCisjZWxzZSAvKiBUQ1BTT0NLRVQgKi8KKyNpZm5kZWYgTk9IVFRQICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBIVFRQIHJlcXVpcmVzIFRDUFNPQ0tFVCAqLworI2RlZmluZSBOT0hU VFAKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAv KiBOT05FVCAqLworCisjaWZkZWYgVENQU09DS0VUCisjaWZuZGVmIE5PQ0tHRVRGUUhPU1QKKyNp ZmRlZiBfX2lhNjRfXworI2RlZmluZSBOT0NLR0VURlFIT1NUCisjZWxzZSAgLyogX19pYTY0X18g Ki8KKyNpZmRlZiBTVjY4CisjZGVmaW5lIE5PQ0tHRVRGUUhPU1QKKyNlbHNlCisjaWZkZWYgSFBV WFBSRTY1CisjZGVmaW5lIE5PQ0tHRVRGUUhPU1QKKyNlbmRpZiAvKiBIUFVYUFJFNjUgKi8KKyNl bmRpZiAvKiBTVjY4ICovCisjZW5kaWYgLyogX19pYTY0ICovCisjZW5kaWYgLyogTk9DS0dFVEZR SE9TVCAqLworLyoKKyAgUmVnYXJkaW5nIFN5c3RlbSBWLzY4IChTVjY4KSAoZnJvbSBHZXJyeSBC ZWxhbmdlciwgT2N0IDIwMDIpOgorCisgICAgMSkgVGhlIGdldGhvc3RieW5hbWUoKSBhcHBlYXJz IHRvIHJldHVybiB0aGUgYWN0dWFsIGhvc3QgSVAKKyAgICAgICBhZGRyZXNzIGluIHRoZSBob3N0 ZW50IHN0cnVjdCwgaW5zdGVhZCBvZiB0aGUgZXhwZWN0ZWQgcG9pbnRlcgorICAgICAgIHRvIHRo ZSBhZGRyZXNzLiBIZW5jZSB0aGUgYm9ndXMgYWRkcmVzcyBpbiB0aGUgYmNvcHkvbWVtY29weS4K KyAgICAgICBUaGlzIGlzIGRlc3BpdGUgdGhlIGhlYWRlciBhZ3JlZWluZyB3aXRoIG91ciBleHBl Y3RhdGlvbnMuCisKKyAgICAyKSB0aGUgZXhwZWN0ZWQgYXJndW1lbnQgc3dhcCBiZXR3ZWVuIGJj b3B5IGFuZCBtZW1jb3B5CisgICAgICAgZGlkIG5vdCBoYXBwZW4uICBXaGF0IGdyaWVmIHRoaXMg bWlnaHQgY2F1c2UsIEkga25vdyBub3QuCisqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisj aWZkZWYgVENQU09DS0VUCisjaWZkZWYgT1MyT05MWQorI2lmbmRlZiBOT1NPQ0tTCisjZGVmaW5l IE5PU09DS1MKKyNlbmRpZiAvKiBOT1NPQ0tTICovCisjZW5kaWYgLyogT1MyT05MWSAqLworI2lm ZGVmIE5PU09DS1MKKyNpZmRlZiBDS19TT0NLUworI3VuZGVmIENLX1NPQ0tTCisjZW5kaWYgLyog Q0tfU09DS1MgKi8KKyNpZmRlZiBDS19TT0NLUzUKKyN1bmRlZiBDS19TT0NLUzUKKyNlbmRpZiAv KiBDS19TT0NLUzUgKi8KKyNlbHNlIC8qIE5PU09DS1MgKi8KKyNpZmRlZiBOVAorI2lmbmRlZiBD S19TT0NLUworI2RlZmluZSBDS19TT0NLUworI2VuZGlmIC8qIENLX1NPQ0tTICovCisjZW5kaWYg LyogTlQgKi8KKyNpZmRlZiBDS19TT0NLUzUJCQkvKiBDS19TT0NLUzUgaW1wbGllcyBDS19TT0NL UyAqLworI2lmbmRlZiBDS19TT0NLUworI2RlZmluZSBDS19TT0NLUworI2VuZGlmIC8qIENLX1NP Q0tTICovCisjZW5kaWYgLyogQ0tfU09DS1M1ICovCisjZW5kaWYgLyogTk9TT0NLUyAqLworI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZkZWYgVE5DT0RFCisjaWZuZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCisjaWZkZWYgT1MyCisjaWZkZWYgX01fUFBDCisjZGVmaW5lIE5PX0tFUkJFUk9TCisj ZGVmaW5lIE5PX1NSUAorI2Vsc2UgLyogX01fUFBDICovCisjaWZuZGVmIE5PX1NTTAorI2RlZmlu ZSBDS19TU0wKKyNkZWZpbmUgU1NMRExMCisjZW5kaWYgLyogTk9fU1NMICovCisjZW5kaWYgLyog X01fUFBDICovCisjaWZuZGVmIE5PX0tFUkJFUk9TCisjZGVmaW5lIENLX0tFUkJFUk9TCisjZGVm aW5lIEtSQjQKKyNkZWZpbmUgS1JCNQorI2RlZmluZSBLUkI1MjQKKyNkZWZpbmUgS1JCNTI0X0NP TlYKKyNpZmRlZiBOVAorI2lmbmRlZiBfTV9QUEMKKyNpZm5kZWYgX01fQUxQSEEKKyNpZm5kZWYg Tk9fU1NMX0tSQjUKKyNkZWZpbmUgU1NMX0tSQjUKKyNlbmRpZiAvKiBOT19TU0xfS1JCNSAqLwor I2VuZGlmIC8qIF9NX0FMUEhBICovCisjZW5kaWYgLyogX01fUFBDICovCisjZW5kaWYgLyogTlQg Ki8KKyNlbmRpZiAvKiBOT19LRVJCRVJPUyAqLworI2lmbmRlZiBOT19TUlAKKyNkZWZpbmUgQ0tf U1JQCisjZW5kaWYgLyogTk9fU1JQICovCisjZGVmaW5lIENLX0FVVEhFTlRJQ0FUSU9OCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCQkvKiBFbmNyeXB0aW9uIG11c3QgaGF2ZSBBdXRoICovCisjaWZuZGVm IENLX0VOQ1JZUFRJT04KKyNpZm5kZWYgTk9fRU5DUllQVElPTgorI2lmZGVmIE9TMgorI2RlZmlu ZSBDS19FTkNSWVBUSU9OCisjZGVmaW5lIENLX0RFUworI2RlZmluZSBDS19DQVNUCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTk9fRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisjaWZkZWYgTk9fQVVU SEVOVElDQVRJT04gICAgICAgICAgICAgICAgLyogQWxsb3cgYXV0aGVudGljYXRpb24gdG8gYmUg Ki8KKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTiAgICAgICAgICAgICAgICAvKiBkaXNhYmxlZCBp biBOVCBhbmQgT1MvMiAgICAqLworI3VuZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisjZW5kaWYgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDS19LRVJCRVJPUworI3VuZGVmIENLX0tFUkJF Uk9TCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNpZmRlZiBDS19TUlAKKyN1bmRlZiBDS19T UlAKKyNlbmRpZiAvKiBDS19TUlAgKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjdW5kZWYgQ0tf RU5DUllQVElPTgorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBOT19BVVRI RU5USUNBVElPTiAqLworCisjaWZkZWYgTk9fRU5DUllQVElPTiAgICAgICAgICAgICAgICAgICAg LyogQWxsb3cgZW5jcnlwdGlvbiB0byBiZSAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04gICAgICAg ICAgICAgICAgICAgIC8qIGRpc2FibGVkIGluIE5UIGFuZCBPUy8yICovCisjdW5kZWYgQ0tfRU5D UllQVElPTgorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBOT19FTkNSWVBU SU9OICovCisKKyNpZmRlZiBDS19LRVJCRVJPUyAgICAgIC8qIERpc2FibGUgZnVuY3Mgbm90IHll dCBzdXBwb3J0ZWQgd2l0aCBIZWltZGFsICovCisjaWZkZWYgS1JCNQorI2lmbmRlZiBIRUlNREFM CisjZGVmaW5lIEtSQjVfVTJVCisjZW5kaWYgLyogSEVJTURBTCAqLworI2VuZGlmIC8qIEtSQjUg Ki8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisvKgorICBTU0ggc2VjdGlvbi4gIE5PU1NI IGRpc2FibGVzIGFueSBmb3JtIG9mIFNTSCBzdXBwb3J0LgorICBJZiBOT1NTSCBpcyBub3QgZGVm aW5lZCAob3IgaW1wbGllZCBieSBOT05FVCwgTk9MT0NBTCwgZXRjKQorICB0aGVuIFNTSEJVSUxU SU4gaXMgZGVmaW5lZCBmb3IgSzk1IGFuZCBTU0hDTUQgaXMgZGVmaW5lZCBmb3IgVU5JWC4KKyAg VGhlbiwgaWYgZWl0aGVyIFNTSEJVSUxUSU4gb3IgU1NIQ01EIGlzIGRlZmluZWQsIEFOWVNTSCBp cyBhbHNvIGRlZmluZWQuCisqLworCisjaWZuZGVmIE5PU1NICisjaWZuZGVmIE5PX1NTTAorI2lm ZGVmIE9TMk9OTFkKKyNkZWZpbmUgTk9TU0gKKyNlbmRpZiAvKiBPUzJPTkxZICovCisjaWZkZWYg TlQKKyNpZm5kZWYgQ0tfU1NMCisjZGVmaW5lIE5PU1NICisjZW5kaWYgLyogQ0tfU1NMICovCisj ZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE5PX1NTTCAqLworI2RlZmluZSBOT1NTSAorI2VuZGlm IC8qIE5PX1NTTCAqLworI2VuZGlmIC8qIE5PU1NIICovCisKKyNpZmRlZiBOT1NTSAkJCQkvKiBO T1NTSCAqLworI2lmZGVmIFNTSEJVSUxUSU4JCQkvKiB1bmRlZmluZXMgYW55IFNTSCBzZWxjdG9y cyAqLworI3VuZGVmIFNTSEJVSUxUSU4KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYg U0ZUUF9CVUlMVElOCisjdW5kZWYgU0ZUUF9CVUlMVElOCisjZW5kaWYgLyogU0ZUUF9CVUlMVElO ICovCisjaWZkZWYgU1NIQ01ECisjdW5kZWYgU1NIQ01ECisjZW5kaWYgLyogU1NIQ01EICovCisj aWZkZWYgQU5ZU1NICisjdW5kZWYgQU5ZU1NICisjZW5kaWYgLyogQU5ZU1NIICovCisjZWxzZSAg LyogTm90IE5PU1NIICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyNpZm5kZWYgU1NI QlVJTFRJTgorI2RlZmluZSBTU0hCVUlMVElOCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2Vs c2UgIC8qIE5vdCBPUzIgKi8KKyNpZmRlZiBVTklYCisjaWZuZGVmIFNTSENNRAorI2lmZGVmIE5F VFBUWQorI2lmbmRlZiBOT1BVU0gKKyNkZWZpbmUgU1NIQ01ECisjZW5kaWYgLyogTk9QVVNIICov CisjZW5kaWYgLyogTkVUUFRZICovCisjZW5kaWYgLyogU1NIQ01EICovCisjZW5kaWYgLyogVU5J WCAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBBTllTU0gKKyNpZmRlZiBTU0hCVUlMVElO CisjZGVmaW5lIEFOWVNTSAorI2lmZGVmIFNTSENNRAorI3VuZGVmIFNTSENNRAorI2VuZGlmIC8q IFNTSENNRCAqLworI2Vsc2UgIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBTU0hDTUQKKyNkZWZp bmUgQU5ZU1NICisjZW5kaWYgLyogU1NIQ01EICovCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLwor I2VuZGlmIC8qIEFOWVNTSCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBOT1NT SCAqLworCisvKiBUaGlzIGlzIGluIGNhc2UgI2lmZGVmIFNTSCBpcyB1c2VkIGFueXdoZXJlIGlu IHRoZSBLOTUgbW9kdWxlcyAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgU1NIQlVJTFRJTgorI2lm bmRlZiBTU0gKKyNkZWZpbmUgU1NICisjZW5kaWYgLyogU1NIICovCisjZW5kaWYgLyogU1NIQlVJ TFRJTiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyNk ZWZpbmUgQ0tfU0VDVVJJVFkKKyNlbHNlCisjaWZkZWYgQ0tfU1NMCisjZGVmaW5lIENLX0FVVEhF TlRJQ0FUSU9OCisjZGVmaW5lIENLX1NFQ1VSSVRZCisjZW5kaWYgLyogQ0tfU1NMICovCisjZW5k aWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworLyogRW52aXJvbm1lbnQgc3R1ZmYgKi8KKwor I2lmbmRlZiBPUzJPUlVOSVgKKyNpZm5kZWYgTk9QVVRFTlYKKyNkZWZpbmUgTk9QVVRFTlYKKyNl bmRpZiAvKiBOT1BVVEVOViAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworCisjaWZuZGVmIENL X0VOVklST05NRU5UCisjaWZkZWYgT1MyCisjZGVmaW5lIENLX0VOVklST05NRU5UCisjZWxzZQor I2lmZGVmIFVOSVgKKyNkZWZpbmUgQ0tfRU5WSVJPTk1FTlQKKyNlbHNlCisjaWZkZWYgU1RSQVRV UworI2RlZmluZSBDS19FTlZJUk9OTUVOVAorI2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tf RU5WSVJPTk1FTlQKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5k aWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX0VOVklST05NRU5U ICovCisjaWZuZGVmIE5PU05ETE9DCQkJLyogUkZDIDc3OSBTRU5EIExPQ0FUSU9OICovCisjaWZu ZGVmIENLX1NORExPQworI2RlZmluZSBDS19TTkRMT0MKKyNlbmRpZiAvKiBDS19TTkRMT0MgKi8K KyNlbmRpZiAvKiBOT1NORExPQyAqLworI2lmbmRlZiBOT1hESVNQTE9DCQkJLyogUkZDIDEwOTYg WERJU1BMT0MgKi8KKyNpZm5kZWYgQ0tfWERJU1BMT0MKKyNkZWZpbmUgQ0tfWERJU1BMT0MKKyNl bmRpZiAvKiBDS19YRElTUExPQyAqLworI2VuZGlmIC8qIE5PWERJU1BMT0MgKi8KKyNpZm5kZWYg Tk9GT1JXQVJEWAorI2lmbmRlZiBOT1BVVEVOVgorI2lmbmRlZiBOT1NFTEVDVAorI2lmbmRlZiBD S19GT1JXQVJEX1gKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorI2lmbmRlZiBPUzJPTkxZCisj ZGVmaW5lIENLX0ZPUldBUkRfWAorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNlbmRpZiAvKiBDS19B VVRIRU5USUNBVElPTiAqLworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworI2VuZGlmIC8qIE5P U0VMRUNUICovCisjZW5kaWYgLyogTk9QVVRFTlYgKi8KKyNlbmRpZiAvKiBOT0ZPUldBUkRYICov CisjaWZuZGVmIE5PX0NPTVBPUlQKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgVE5fQ09NUE9S VAorI2RlZmluZSBUTl9DT01QT1JUCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5PX0NPTVBPUlQgKi8KKyNlbmRpZiAvKiBUTkNPREUg Ki8KKworI2lmbmRlZiBOT1hGRVIKKyNpZm5kZWYgTk9DVFJMWgkJCQkvKiBBbGxvdyBTRVQgRklM RSBFT0YgQ1RSTC1aICovCisjaWZuZGVmIENLX0NUUkxaCisjaWZkZWYgT1MyT1JVTklYCisjZGVm aW5lIENLX0NUUkxaCisjZW5kaWYgLyogT1MyT1JVTklYICovCisjZW5kaWYgLyogQ0tfQ1RSTFog Ki8KKyNlbmRpZiAvKiBOT0NUUkxaICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYg Tk9QRVJNUwkJCQkvKiBGaWxlIHBlcm1pc3Npb25zIGluIEEgcGFja2V0cyAqLworI2lmbmRlZiBD S19QRVJNUworI2lmZGVmIFVOSVgKKyNkZWZpbmUgQ0tfUEVSTVMKKyNlbHNlCisjaWZkZWYgVk1T CisjZGVmaW5lIENLX1BFUk1TCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWCAqLwor I2VuZGlmIC8qIENLX1BFUk1TICovCisjZW5kaWYgLyogTk9QRVJNUyAqLworI2lmZGVmIENLX1BF Uk1TCisjZGVmaW5lIENLX1BFUk1MRU4gMjQJCQkvKiBNYXggbGVuZ3RoIG9mIHN5cy1kZXBlbmRl bnQgcGVybXMgKi8KKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisjaWZkZWYgVU5JWAkJCQkvKiBO T1NFVEJVRiBmb3IgZXZlcnlib2R5ICovCisjaWZuZGVmIE5PU0VUQlVGCisjaWZuZGVmIFVTRV9T RVRCVUYJCQkvKiBUaGlzIGlzIHRoZSBlc2NhcGUgY2xhdXNlICovCisjZGVmaW5lIE5PU0VUQlVG CisjZW5kaWYgLyogVVNFX1NFVEJVRiAqLworI2VuZGlmIC8qIE5PU0VUQlVGICovCisjZW5kaWYg LyogVU5JWCAqLworCisjaWZuZGVmIFVTRV9TVFJFUlJPUgkJCS8qIFdoZXRoZXIgdG8gdXNlIHN0 cmVycm9yKCkgKi8KKyNpZmRlZiBwZHAxMQorI2RlZmluZSBVU0VfU1RSRVJST1IKKyNlbmRpZiAv KiBwZHAxMSAqLworI2VuZGlmIC8qIFVTRV9TVFJFUlJPUiAqLworCisjaWZkZWYgVk1TCQkJCS8q IEZlYXR1cmVzIGZvciBhbGwgVk1TIGJ1aWxkcyAqLworI2lmbmRlZiBOT0pDCisjZGVmaW5lIE5P SkMKKyNlbmRpZiAvKiBOT0pDICovCisjaWZuZGVmIE5PU0VUQlVGCisjZGVmaW5lIE5PU0VUQlVG CisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKyNpZm5kZWYgRFlOQU1JQworI2RlZmluZSBEWU5BTUlD CisjZW5kaWYgLyogRFlOQU1JQyAqLworI2lmbmRlZiBOT0NVUlNFUworI2lmbmRlZiBDS19DVVJT RVMKKyNkZWZpbmUgQ0tfQ1VSU0VTCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisjZW5kaWYgLyog Tk9DVVJTRVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmbmRlZiBOT0NLVElNRVJTCQkJLyog RHluYW1pYyB0aW1lb3V0cyAqLworI2lmbmRlZiBDS19USU1FUlMKKyNkZWZpbmUgQ0tfVElNRVJT CisjZW5kaWYgLyogQ0tfVElNRVJTICovCisjZW5kaWYgLyogTk9DS1RJTUVSUyAqLworCisjZGVm aW5lIENLX1NQRUVECQkJLyogQ29udHJvbC1wcmVmaXggcmVtb3ZhbCAqLworI2lmZGVmIE5PQ0tT UEVFRAorI3VuZGVmIENLX1NQRUVECisjZW5kaWYgLyogTk9DS1NQRUVEICovCisKKyNpZm5kZWYg Tk9DS1hYQ0hBUgorI2lmbmRlZiBDS1hYQ0hBUgorI2lmZGVmIFVOSVgKKyNkZWZpbmUgQ0tYWENI QVIKKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIENLWFhDSEFSCisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLWFhDSEFSICovCisjZW5kaWYgLyogTk9D S1hYQ0hBUiAqLworCisjaWZkZWYgTUFDCQkJCS8qIEZvciBNYWNpbnRvc2gsIG5vIGVzY2FwZSAq LworI2RlZmluZSBOT1BVU0gJCQkJLyogdG8gb3BlcmF0aW5nIHN5c3RlbSAqLworI2VuZGlmIC8q IE1BQyAqLworCisvKiBTeXN0ZW1zIHdoZXJlIHdlIGNhbiBjYWxsIHpta2RpcigpIHRvIGNyZWF0 ZSBkaXJlY3Rvcmllcy4gKi8KKworI2lmbmRlZiBDS19NS0RJUgorI2lmbmRlZiBOT01LRElSCisK KyNpZmRlZiBVTklYCisjaWZuZGVmIHBkcDExCisjZGVmaW5lIENLX01LRElSCisjZW5kaWYgLyog cGRwMTEgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tfTUtE SVIKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIFZNUworI2RlZmluZSBDS19NS0RJUgorI2Vu ZGlmIC8qIFZNUyAqLworCisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBDS19NS0RJUgorI2VuZGlm IC8qIFNUUkFUVVMgKi8KKworI2lmZGVmIE9TSworI2RlZmluZSBDS19NS0RJUgorI2VuZGlmIC8q IE9TSyAqLworCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNkZWZpbmUgQ0tfTUtESVIKKyNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLworCisjZW5kaWYgLyogQ0tfTUtESVIgKi8KKyNlbmRpZiAvKiBOT01L RElSICovCisKKyNpZmRlZiBOT01LRElSCQkJCS8qIEFsbG93IGZvciBjb21tYW5kLWxpbmUgb3Zl cnJpZGUgKi8KKyNpZmRlZiBDS19NS0RJUgorI3VuZGVmIENLX01LRElSCisjZW5kaWYgLyogQ0tf TUtESVIgKi8KKyNlbmRpZiAvKiBOT01LRElSICovCisKKy8qIFN5c3RlbXMgZm9yIHdoaWNoIHdl IGNhbiBlbmFibGUgdGhlIFJFRElSRUNUIGNvbW1hbmQgYXV0b21hdGljYWxseSAqLworLyogICBB cyBvZiA2LjAuMTkzLCBpdCBzaG91bGQgd29yayBmb3IgYWxsIFVOSVguLi4gKi8KKworI2lmbmRl ZiBOT1JFRElSRUNUCisjaWZuZGVmIENLX1JFRElSCisjaWZkZWYgVU5JWAorI2RlZmluZSBDS19S RURJUgorI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBPUzIJCQkJLyogQXMgd2VsbCBhcyBPUy8y IGFuZCBmcmllbmRzLi4uICovCisjZGVmaW5lIENLX1JFRElSCisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogQ0tfUkVESVIgKi8KKyNlbmRpZiAvKiBOT1JFRElSRUNUICovCisKKyNpZmRlZiBO T1BVU0gJCQkJLyogQnV0Li4uIFJFRElSRUNUIGNvbW1hbmQgaXMgbm90ICovCisjaWZkZWYgQ0tf UkVESVIJCQkJLyogIGFsbG93ZWQgaWYgTk9QVVNIIGlzIGRlZmluZWQuICovCisjdW5kZWYgQ0tf UkVESVIKKyNlbmRpZiAvKiBDS19SRURJUiAqLworI2lmZGVmIE5FVENNRAkJCQkvKiBOb3IgaXMg U0VUIE5FVCBDT01NQU5EICovCisjdW5kZWYgTkVUQ01ECisjZW5kaWYgLyogTkVUQ01EICovCisj aWZkZWYgTkVUUFRZCisjdW5kZWYgTkVUUFRZCisjZW5kaWYgLyogTkVUUFRZICovCisjZW5kaWYg LyogTk9QVVNIICovCisKKyNpZm5kZWYgUEVYSVRTVEFUCQkJLyogXHYocGV4aXRzdGF0KSB2YXJp YWJsZSBkZWZpbmVkICovCisjaWZkZWYgT1MyT1JVTklYCisjZGVmaW5lIFBFWElUU1RBVAorI2Vs c2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgUEVYSVRTVEFUCisjZW5kaWYgLyogVk1TICovCisjZW5k aWYgLyogT1MyT1JVTklYICovCisjZW5kaWYgLyogUEVYSVRTVEFUICovCisKKy8qIFRoZSBmb2xs b3dpbmcgYWxsb3dzIGF1dG9tYXRpYyBlbmFibGluZyBvZiBSRURJUkVDVCB0byBiZSBvdmVycmlk ZGVuLi4uICovCisKKyNpZmRlZiBOT1JFRElSRUNUCisjaWZkZWYgTkVUQ01ECisjdW5kZWYgTkVU Q01ECisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisjdW5kZWYgTkVUUFRZCisj ZW5kaWYgLyogTkVUUFRZICovCisjaWZkZWYgQ0tfUkVESVIKKyN1bmRlZiBDS19SRURJUgorI2Vu ZGlmIC8qIENLX1JFRElSICovCisjZW5kaWYgLyogTk9SRURJUkVDVCAqLworCisjaWZkZWYgTk9O RVRDTUQKKyNpZmRlZiBORVRDTUQKKyN1bmRlZiBORVRDTUQKKyNlbmRpZiAvKiBORVRDTUQgKi8K KyNpZmRlZiBORVRQVFkKKyN1bmRlZiBORVRQVFkKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNlbmRp ZiAvKiBOT05FVENNRCAqLworCisjaWZkZWYgQ0tfUkVESVIKK19QUk9UT1RZUCggaW50IHR0cnVu Y21kLCAoY2hhciAqKSApOworI2VuZGlmIC8qIENLX1JFRElSICovCisKKy8qIFVzZSBidWlsdC1p biBESVJFQ1RPUlkgY29tbWFuZCAqLworCisjaWZuZGVmIE5PTVlESVIKKyNpZm5kZWYgRE9NWURJ UgorI2lmZGVmIFVOSVhPUk9TSworI2RlZmluZSBET01ZRElSCisjZWxzZQorI2lmZGVmIE9TMgor I2RlZmluZSBET01ZRElSCisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBET01ZRElSCisjZW5k aWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisj ZW5kaWYgLyogRE9NWURJUiAqLworI2VuZGlmIC8qIE5PTVlESVIgKi8KKworLyogU2VuZGluZyBm cm9tIGFuZCByZWNlaXZpbmcgdG8gY29tbWFuZHMvcGlwZXMgKi8KKworI2lmbmRlZiBQSVBFU0VO RAorI2lmZGVmIFVOSVgKKyNkZWZpbmUgUElQRVNFTkQKKyNlbmRpZiAvKiBVTklYICovCisjaWZk ZWYgT1MyCisjZGVmaW5lIFBJUEVTRU5ECisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogUElQ RVNFTkQgKi8KKworI2lmZGVmIFBJUEVTRU5ECisjaWZkZWYgTk9QSVBFU0VORAorI3VuZGVmIFBJ UEVTRU5ECisjZW5kaWYgLyogTk9QSVBFU0VORCAqLworI2lmZGVmIE5PUFVTSAorI3VuZGVmIFBJ UEVTRU5ECisjZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lm ZGVmIE5PUFVTSAorI2lmZGVmIEJST1dTRVIKKyN1bmRlZiBCUk9XU0VSCisjZW5kaWYgLyogQlJP V1NFUiAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworCisvKiBWZXJzaW9ucyB3aGVyZSB3ZSBzdXBw b3J0IHRoZSBSRVNFTkQgY29tbWFuZCAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT1JF U0VORAorI2lmbmRlZiBDS19SRVNFTkQKKyNpZmRlZiBVTklYCisjaWZuZGVmIHBkcDExCisjZGVm aW5lIENLX1JFU0VORAorI2VuZGlmIC8qIHBkcDExICovCisjZW5kaWYgLyogVU5JWCAqLworCisj aWZkZWYgVk1TCisjZGVmaW5lIENLX1JFU0VORAorI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYg T1MyCisjZGVmaW5lIENLX1JFU0VORAorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQU1JR0EK KyNkZWZpbmUgQ0tfUkVTRU5ECisjZW5kaWYgLyogQU1JR0EgKi8KKworI2lmZGVmIGRhdGFnZW5l cmFsCisjZGVmaW5lIENLX1JFU0VORAorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyNpZmRl ZiBTVFJBVFVTCisjZGVmaW5lIENLX1JFU0VORAorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKworI2lm ZGVmIE9TSworI2RlZmluZSBDS19SRVNFTkQKKyNlbmRpZiAvKiBPU0sgKi8KKworI2VuZGlmIC8q IENLX1JFU0VORCAqLworI2VuZGlmIC8qIE5PUkVTRU5EICovCisjZW5kaWYgLyogTk9YRkVSICov CisKKy8qIFN5c3RlbXMgaW1wbGVtZW50aW5nICJEb29tc2RheSBLZXJtaXQiIHByb3RvY29sIC4u LiAqLworCisjaWZuZGVmIERPT01TREFZCisjaWZkZWYgVU5JWAorI2RlZmluZSBET09NU0RBWQor I2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgRE9PTVNEQVkKKyNlbHNlCisjaWZkZWYgT1MyCisj ZGVmaW5lIERPT01TREFZCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyNkZWZpbmUgRE9PTVNEQVkK KyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICov CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIERPT01TREFZICovCisKKy8qIFN5c3RlbXMg d2hlcmUgd2Ugd2FudCB0aGUgVGhlcm1vbWV0ZXIgdG8gYmUgdXNlZCBmb3IgZnVsbHNjcmVlbiAq LworCisjaWZkZWYgT1MyCisjaWZuZGVmIENLX1BDVF9CQVIKKyNkZWZpbmUgQ0tfUENUX0JBUgor I2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworLyogU3lzdGVtcyB3 aGVyZSB3ZSBoYXZlIGEgUkVYWCBjb21tYW5kICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBfXzMy QklUX18KKyNpZm5kZWYgTk9SRVhYCisjZGVmaW5lIENLX1JFWFgKKyNlbmRpZiAvKiBOT1JFWFgg Ki8KKyNlbmRpZiAvKiBfXzMyQklUX18gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworLyogUGxhdGZv cm1zIHRoYXQgaGF2ZSBhIFpDSEtQSUQgZnVuY3Rpb24gKi8KKworI2lmZGVmIE9TMk9SVU5JWAor I2RlZmluZSBaQ0hLUElECisjZW5kaWYgLyogT1MyT1JVTklYICovCisKKyNpZm5kZWYgWkNIS1BJ RAorLyogSWYgd2UgY2FuJ3QgY2hlY2sgcGlkcyB0aGVuIHdlIGhhdmUgdHJlYXQgYWxsIHBpZHMg YXMgYWN0aXZlICYgdmFsaWQuICovCisjZGVmaW5lIHpjaGtwaWQoeCkgMQorI2VuZGlmIC8qIFpD SEtQSUQgKi8KKworLyogU3lzdGVtcyB0aGF0IGhhdmUgYSBaUkVOQU1FIGZ1bmN0aW9uICovCisK KyNkZWZpbmUgWlJFTkFNRQkJCQkvKiBUaGV5IGFsbCBkbyAqLworCisvKiBTeXN0ZW1zIHRoYXQg aGF2ZSBhIFpDT1BZIGZ1bmN0aW9uICovCisKKyNpZm5kZWYgWkNPUFkKKyNpZmRlZiBWTVMKKyNk ZWZpbmUgWkNPUFkKKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIFpDT1BZCisjZWxzZQorI2lm ZGVmIFVOSVgKKyNkZWZpbmUgWkNPUFkKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBa Q09QWQorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogWkNPUFkgKi8KKworLyogU3lzdGVt cyB0aGF0IGhhdmUgdHRnd3NpeigpICh0aGV5IGFsbCBzaG91bGQgYnV0IHRoZXkgZG9uJ3QpICov CisKKyNpZm5kZWYgTk9UVEdXU0laCisjaWZuZGVmIENLX1RUR1dTSVoKKyNpZmRlZiBVTklYCisj ZGVmaW5lIENLX1RUR1dTSVoKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIENLX1RUR1dTSVoK KyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIENLX1RUR1dTSVoKKyNlbHNlCisjaWZkZWYgT1NL CisjZGVmaW5lIENLX1RUR1dTSVoKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogQ0tfVFRHV1NJ WiAqLworI2VuZGlmIC8qIE5PVFRHV1NJWiAqLworCisjaWZkZWYgTk9UVEdXU0laCisjaWZkZWYg Q0tfVFRHV1NJWgorI3VuZGVmIENLX1RUR1dTSVoKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisj ZW5kaWYgLyogTk9UVEdXU0laICovCisKKyNpZmRlZiBPUzIKKy8qIE9TLzIgQy1LZXJtaXQgZmVh dHVyZXMgbm90IGF2YWlsYWJsZSBpbiAxNi1iaXQgdmVyc2lvbi4uLiAqLworCisjaWZkZWYgT1My T05MWQorI2lmbmRlZiBfXzMyQklUX18KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIFBDRk9OVFMJ CQkJLyogUEMgRm9udCBzdXBwb3J0ICovCisjdW5kZWYgUENGT05UUworI2VuZGlmIC8qIFBDRk9O VFMgKi8KKyNpZmRlZiBOUElQRQkJCQkvKiBOYW1lZCBQaXBlcyBjb21tdW5pY2F0aW9uICovCisj dW5kZWYgTlBJUEUKKyNlbmRpZiAvKiBOUElQRSAqLworI2lmZGVmIENLX05FVEJJT1MJCQkvKiBO RVRCSU9TIGNvbW11bmljYXRpb24gKi8KKyN1bmRlZiBDS19ORVRCSU9TCisjZW5kaWYgLyogQ0tf TkVUQklPUyAqLworI2lmZGVmIE9TMk1PVVNFCQkJCS8qIE1vdXNlICovCisjdW5kZWYgT1MyTU9V U0UKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworI2lmZGVmIE9TMlBNCQkJCS8qIFByZXNlbnRhdGlv biBNYW5hZ2VyICovCisjdW5kZWYgT1MyUE0KKyNlbmRpZiAvKiBPUzJQTSAqLworI2VuZGlmIC8q IE5PTE9DQUwgKi8KKyNpZmRlZiBDS19SRVhYCQkJCS8qIFJleHggKi8KKyN1bmRlZiBDS19SRVhY CisjZW5kaWYgLyogQ0tfUkVYWCAqLworI2VuZGlmIC8qIF9fMzJCSVRfXyAqLworI2VuZGlmIC8q IE9TMk9OTFkgKi8KKworLyogT1MvMiBDLUtlcm1pdCBmZWF0dXJlcyBub3QgYXZhaWxhYmxlIGlu IFdpbmRvd3MgTlQgdmVyc2lvbi4uLiAqLworCisjaWZkZWYgTlQKKyNpZmRlZiBQQ0ZPTlRTCQkJ CS8qIFBDIEZvbnQgc3VwcG9ydCAqLworI3VuZGVmIFBDRk9OVFMKKyNlbmRpZiAvKiBQQ0ZPTlRT ICovCisjaWZkZWYgT1MyUE0JCQkJLyogUHJlc2VudGF0aW9uIE1hbmFnZXIgKi8KKyN1bmRlZiBP UzJQTQorI2VuZGlmIC8qIE9TMlBNICovCisjaWZkZWYgQ0tfUkVYWAkJCQkvKiBSZXh4ICovCisj dW5kZWYgQ0tfUkVYWAorI2VuZGlmIC8qIENLX1JFWFggKi8KKyNlbmRpZiAvKiBOVCAqLworI2Vu ZGlmIC8qIE9TMiAqLworCisvKgorICBTeXN0ZW1zIHRoYXQgaGF2ZSBzZWxlY3QoKS4KKyAgVGhp cyBpcyB1c2VkIGZvciBib3RoIG1zbGVlcCgpIGFuZCBmb3IgcmVhZC1idWZmZXIgY2hlY2tpbmcg aW4gaW5fY2hrKCkuCisqLworI2RlZmluZSBDS19TTEVFUElOVCAyNTAgLyogbWlsbGlzZWNvbmRz IC0gc2V0IHRoaXMgdG8gc29tZXRoaW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGRpdmlkZXMgZXZlbmx5IGludG8gMTAwMCAqLworI2lmbmRlZiBTRUxFQ1QKKyNpZm5kZWYgTk9T RUxFQ1QKKyNpZmRlZiBfX2xpbnV4X18KKyNkZWZpbmUgU0VMRUNUCisjZWxzZQorI2lmZGVmIFNV Tk9TNAorI2RlZmluZSBTRUxFQ1QKKyNlbHNlCisjaWZkZWYgTkVYVAorI2RlZmluZSBTRUxFQ1QK KyNlbHNlCisjaWZkZWYgUlRBSVgKKyNkZWZpbmUgU0VMRUNUCisjZWxzZQorI2lmZGVmIEhQVVgK Ky8qCisgIE5vdCByZWFsbHkuICBJIHRoaW5rIGl0J3Mgb25seSBpbiBIUC1VWCA3LjAgYW5kIGxh dGVyLCBleGNlcHQgaXQncyBhbHNvCisgIGluIGVhcmxpZXIgdmVyc2lvbnMgdGhhdCBoYXZlIFRD UC9JUCBpbnN0YWxsZWQuICBPdmVycmlkZSB0aGlzIGRlZmF1bHQKKyAgaW4gcGFydGljdWxhciBI UC1VWCBtYWtlZmlsZSBlbnRyaWVzIGJ5IGFkZGluZyAtRE5PU0VMRUNULCBhcyBpbiAoZS5nLikK KyAgdGhlIEhQLVVYIDYuNSBvbmVzLgorKi8KKyNkZWZpbmUgU0VMRUNUCisjZWxzZQorI2lmZGVm IEFJWFJTCisjZGVmaW5lIFNFTEVDVAorI2Vsc2UKKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBTRUxF Q1QKKyNlbHNlCisjaWZkZWYgQlNENAorI2RlZmluZSBTRUxFQ1QKKyNlbHNlCisjaWZkZWYgT1hP UworI2RlZmluZSBTRUxFQ1QKKyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIFNFTEVDVAorI2Vs c2UKKyNpZmRlZiBCRUJPWAorI2RlZmluZSBTRUxFQ1QKKyNlbmRpZiAvKiBCRUJPWCAqLworI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5k aWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNl bmRpZiAvKiBSVEFJWCAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBfX2xpbnV4X18g Ki8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBOT1NFTEVDVCAqLworI2VuZGlmIC8q IFNFTEVDVCAqLworCisvKgorICBUaGUgZm9sbG93aW5nIHNlY3Rpb24gbW92ZWQgaGVyZSBmcm9t IGNrY25ldC5oIGluIDYuMSBiZWNhdXNlIHNlbGVjdCgpCisgIGlzIG5vdyB1c2VkIGZvciBub24t bmV0d29ya2luZyBwdXJwb3Nlcy4KKyovCisKKy8qIE9uIEhQLTkwMDAvNTAwIEhQLVVYIDUuMjEg dGhpcyBzdHVmZiBpcyBub3QgZGVmaW5lZCBpbiBhbnkgaGVhZGVyIGZpbGUgKi8KKworI2lmZGVm IGhwOTAwMHM1MDAKKyNpZm5kZWYgTkVFRFNFTEVDVERFRlMKKyNkZWZpbmUgTkVFRFNFTEVDVERF RlMKKyNlbmRpZiAvKiBORUVEU0VMRUNUREVGUyAqLworI2VuZGlmIC8qIGhwOTAwMHM1MDAgKi8K KworI2lmZGVmIE5FRURTRUxFQ1RERUZTCit0eXBlZGVmIGxvbmcgZmRfbWFzazsKKyNpZm5kZWYg TkJCWQorI2RlZmluZSBOQkJZIDgKKyNlbmRpZiAvKiBOQkJZICovCisjaWZuZGVmIEZEX1NFVFNJ WkUKKyNkZWZpbmUgRkRfU0VUU0laRSAzMgorI2VuZGlmIC8qIEZEX1NFVFNJWkUgKi8KKyNpZm5k ZWYgTkZEQklUUworI2RlZmluZSBORkRCSVRTIChzaXplb2YoZmRfbWFzaykgKiBOQkJZKQorI2Vu ZGlmIC8qIE5GREJJVFMgKi8KKyNpZm5kZWYgaG93bWFueQorI2RlZmluZSBob3dtYW55KHgseSkg KCgoeCkrKCh5KS0xKSkvKHkpKQorI2VuZGlmIC8qIGhvd21hbnkgKi8KK3R5cGVkZWYgc3RydWN0 IGZkX3NldCB7CisgICAgZmRfbWFzayBmZHNfYml0c1tob3dtYW55KEZEX1NFVFNJWkUsIE5GREJJ VFMpXTsKK30gZmRfc2V0OworI2lmbmRlZiBGRF9TRVQKKyNkZWZpbmUgRkRfU0VUKG4scCkgKChw KS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdIHw9ICgxIDw8ICgobikgJSBORkRCSVRTKSkpCisjZW5k aWYgLyogRkRfU0VUICovCisjaWZuZGVmIEZEX0NMUgorI2RlZmluZSBGRF9DTFIobixwKSAoKHAp LT5mZHNfYml0c1sobikvTkZEQklUU10gJj0gfigxIDw8ICgobikgJSBORkRCSVRTKSkpCisjZW5k aWYgLyogRkRfQ0xSICovCisjaWZuZGVmIEZEX0lTU0VUCisjZGVmaW5lIEZEX0lTU0VUKG4scCkg KChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICYgKDEgPDwgKChuKSAlIE5GREJJVFMpKSkKKyNl bmRpZiAvKiBGRF9JU1NFVCAqLworI2lmbmRlZiBGRF9DT1BZCisjZGVmaW5lIEZEX0NPUFkoZix0 KSAoYmNvcHkoZix0LHNpemVvZigqKGYpKSkKKyNlbmRpZiAvKiBGRF9DT1BZICovCisjaWZuZGVm IEZEX1pFUk8KKyNkZWZpbmUgRkRfWkVSTyhwKSBiemVybygoY2hhciAqKShwKSxzaXplb2YoKihw KSkpCisjZW5kaWYgLyogRkRfWkVSTyAqLworI2VuZGlmIC8qIE5FRURTRUxFQ1RERUZTICovCisK Ky8qCisgIENLX05FRURfU0lHIGlzIGRlZmluZWQgaWYgdGhlIHN5c3RlbSBjYW5ub3QgY2hlY2sg dGhlIGNvbnNvbGUgdG8KKyAgdG8gc2VlIGlmIGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcuICBUaGlz IGlzIHVzZWQgZHVyaW5nIGxvY2FsLW1vZGUgZmlsZQorICB0cmFuc2ZlciB0byBpbnRlcnJ1cHQg dGhlIHRyYW5zZmVyLCByZWZyZXNoIHRoZSBzY3JlZW4gZGlzcGxheSwgZXRjLgorICBJZiBDS19O RUVEX1NJRyBpcyBkZWZpbmVkLCB0aGVuIGZpbGUtdHJhbnNmZXIgaW50ZXJydXB0aW9uIGNoYXJh Y3RlcnMKKyAgaGF2ZSB0byBiZSBwcmVjZWRlZCBhIHNwZWNpYWwgY2hhcmFjdGVyLCBlLmcuIHRo ZSBTSUdRVUlUIGNoYXJhY3Rlci4KKyAgQ0tfTkVFRF9TSUcgc2hvdWxkIGJlIGRlZmluZWQgaWYg dGhlIGNvbmNoaygpIGZ1bmN0aW9uIGlzIG5vdCBvcGVyYXRpb25hbC4KKyovCisjaWZkZWYgTk9Q T0xMCQkJCS8qIEZvciBvdmVycmlkaW5nIENLX1BPTEwgZGVmaW5pdGlvbiAqLworI2lmZGVmIENL X1BPTEwKKyN1bmRlZiBDS19QT0xMCisjZW5kaWYgLyogQ0tfUE9MTCAqLworI2VuZGlmIC8qIE5P UE9MTCAqLworCisjaWZuZGVmIENLX1BPTEwJCQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBwb2xsKCkg Ki8KKyNpZm5kZWYgUkRDSEsJCQkJLyogQW5kIHdlIGRvbid0IGhhdmUgcmRjaGsoKSAqLworI2lm bmRlZiBTRUxFQ1QJCQkJLyogQW5kIHdlIGRvbid0IGhhdmUgc2VsZWN0KCkgKi8KKyNpZmRlZiBB VFRTVgorI2lmbmRlZiBhZWdpcworI2lmbmRlZiBkYXRhZ2VuZXJhbAorI2lmbmRlZiBPWE9TCisj ZGVmaW5lIENLX05FRURfU0lHCisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCisjZW5kaWYgLyogYWVnaXMgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2lmZGVmIFBP U0lYCisjaWZuZGVmIENLX05FRURfU0lHCisjZGVmaW5lIENLX05FRURfU0lHCisjZW5kaWYgLyog Q0tfTkVFRF9TSUcgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIFNFTEVDVCAqLwor I2VuZGlmIC8qIFJEQ0hLICovCisjZW5kaWYgLyogQ0tfUE9MTCAqLworCisjaWZkZWYgSFBVWAkJ CQkvKiBIUC1VWCBoYXMgc2VsZWN0KCkgKi8KKyNpZmRlZiBDS19ORUVEX1NJRworI3VuZGVmIENL X05FRURfU0lHCisjZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KKyNlbmRpZiAvKiBIUFVYICovCisK KyNpZmRlZiBBSVhSUwkJCQkvKiBBSVggaGFzIHNlbGVjdCgpICovCisjaWZkZWYgQ0tfTkVFRF9T SUcKKyN1bmRlZiBDS19ORUVEX1NJRworI2VuZGlmIC8qIENLX05FRURfU0lHICovCisjZW5kaWYg LyogQUlYUlMgKi8KKworI2lmZGVmIEJTRDQ0CQkJCS8qIDQuNEJTRCBoYXMgRklPTlJFQUQgKi8K KyNpZmRlZiBDS19ORUVEX1NJRworI3VuZGVmIENLX05FRURfU0lHCisjZW5kaWYgLyogQ0tfTkVF RF9TSUcgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworCisjaWZkZWYgUU5YCQkJCS8qIFFOWCBoYXMg RklPTlJFQUQgYW5kIHNlbGVjdCgpICovCisjaWZkZWYgQ0tfTkVFRF9TSUcKKyN1bmRlZiBDS19O RUVEX1NJRworI2VuZGlmIC8qIENLX05FRURfU0lHICovCisjZW5kaWYgLyogUU5YICovCisKKyNp ZmRlZiBDT0hFUkVOVAorI2lmbmRlZiBOT1RJTUVaT05FCisjZGVmaW5lIE5PVElNRVpPTkUKKyNl bmRpZiAvKiBOT1RJTUVaT05FICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIFVO SVgKKyNpZm5kZWYgSEFWRV9UWgkJCQkvKiBDYW4gd2UgdXNlIHN0cnVjdCB0aW1lem9uZT8gKi8K KyNpZm5kZWYgTk9USU1FWk9ORQorI2lmZGVmIFBUWAorI2RlZmluZSBOT1RJTUVaT05FCisjZWxz ZQorI2lmbmRlZiBTRUxFQ1QKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBOT1RJTUVaT05FCisj ZWxzZQorI2lmZGVmIEJFTExWMTAKKyNkZWZpbmUgTk9USU1FWk9ORQorI2VuZGlmIC8qIEJFTExW MTAgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIFNFTEVDVCAqLworI2VuZGlm IC8qIFBUWCAqLworI2VuZGlmIC8qIE5PVElNRVpPTkUgKi8KKyNlbmRpZiAvKiBIQVZFX1RaICov CisjaWZuZGVmIE5PVElNRVZBTAkJCS8qIENhbiB3ZSB1c2Ugc3RydWN0IHRpbWV2YWw/ICovCisj aWZuZGVmIEhBVkVfVFYKKyNkZWZpbmUgSEFWRV9UVgorI2VuZGlmIC8qIEhBVkVfVFYgKi8KKyNl bmRpZiAvKiBOT1RJTUVWQUwgKi8KKyNpZm5kZWYgTk9USU1FWk9ORQorI2lmbmRlZiBIQVZFX1Ra CisjZGVmaW5lIEhBVkVfVFoKKyNlbmRpZiAvKiBIQVZFX1RaICovCisjZW5kaWYgLyogTk9USU1F Wk9ORSAqLworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIFNDTzMyCisjaWZkZWYgSEFWRV9U VgorI3VuZGVmIEhBVkVfVFYKKyNlbmRpZiAvKiBIQVZFX1RWICovCisjaWZkZWYgSEFWRV9UWgor I3VuZGVmIEhBVkVfVFoKKyNlbmRpZiAvKiBIQVZFX1RaICovCisjaWZuZGVmIE5PVElNRVZBTAor I2RlZmluZSBOT1RJTUVWQUwKKyNlbmRpZiAvKiBOT1RJTUVWQUwgKi8KKyNpZm5kZWYgTk9USU1F Wk9ORQorI2RlZmluZSBOT1RJTUVaT05FCisjZW5kaWYgLyogTk9USU1FWk9ORSAqLworI2VuZGlm IC8qIFNDTzMyICovCisKKyNpZmRlZiBBVFQ3MzAwCisjaWZkZWYgSEFWRV9UVgorI3VuZGVmIEhB VkVfVFYKKyNlbmRpZiAvKiBIQVZFX1RWICovCisjaWZkZWYgSEFWRV9UWgorI3VuZGVmIEhBVkVf VFoKKyNlbmRpZiAvKiBIQVZFX1RaICovCisjaWZuZGVmIE5PVElNRVZBTAorI2RlZmluZSBOT1RJ TUVWQUwKKyNlbmRpZiAvKiBOT1RJTUVWQUwgKi8KKyNpZm5kZWYgTk9USU1FWk9ORQorI2RlZmlu ZSBOT1RJTUVaT05FCisjZW5kaWYgLyogTk9USU1FWk9ORSAqLworI2VuZGlmIC8qIEFUVDczMDAg Ki8KKworLyoKKyAgQXV0b21hdGljIHBhcml0eSBkZXRlY3Rpb24uCisgIFRoaXMgYWN0dWFsbHkg aW1wbGllcyBhIGxvdCBtb3JlIG5vdzogbGVuZ3RoLWRyaXZlbiBwYWNrZXQgcmVhZGluZywKKyAg IkRvb21zZGF5IEtlcm1pdCIgSUJNIE1haW5mcmFtZSBmaWxlIHRyYW5zZmVyIHRocm91Z2ggMzI3 MCBkYXRhIHN0cmVhbXMsIGV0Yy4KKyovCisjaWZkZWYgVU5JWAkJCQkvKiBGb3IgVW5peCAqLwor I2lmbmRlZiBOT1BBUlNFTgorI2RlZmluZSBQQVJTRU5TRQorI2VuZGlmIC8qIE5PUEFSU0VOICov CisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgVk1TCQkJCS8qIC4uLiBhbmQgVk1TICovCisj aWZuZGVmIE5PUEFSU0VOCisjZGVmaW5lIFBBUlNFTlNFCisjZW5kaWYgLyogTk9QQVJTRU4gKi8K KyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBWTVNHQ0MKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLwor I2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgTUFDCQkJCS8qIGFuZCBNYWNpbnRvc2ggKi8KKyNp Zm5kZWYgTk9QQVJTRU4KKyNkZWZpbmUgUEFSU0VOU0UKKyNlbmRpZiAvKiBOT1BBUlNFTiAqLwor I2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgU1RSQVRVUwkJCQkvKiBhbmQgU3RyYXR1cyBWT1Mg Ki8KKyNpZm5kZWYgTk9QQVJTRU4KKyNkZWZpbmUgUEFSU0VOU0UKKyNlbmRpZiAvKiBOT1BBUlNF TiAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKworI2lmZGVmIE9TMgkJCQkvKiBhbmQgT1MvMiwg ZmluYWxseSAqLworI2lmbmRlZiBOT1BBUlNFTgorI2RlZmluZSBQQVJTRU5TRQorI2VuZGlmIC8q IE5PUEFSU0VOICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9EWU5BTUlDCQkJLyog RFlOQU1JQyBpcyBkZWZhdWx0IGZvciBVTklYICovCisjaWZuZGVmIERZTkFNSUMJCQkJLyogYXMg b2YgQy1LZXJtaXQgNy4wICovCisjaWZkZWYgVU5JWAorI2RlZmluZSBEWU5BTUlDCisjZW5kaWYg LyogVU5JWCAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyNlbmRpZiAvKiBOT0RZTkFNSUMgKi8K KworI2lmZGVmIERZTkFNSUMJCQkJLyogSWYgRFlOQU1JQyBpcyBkZWZpbmVkICovCisjZGVmaW5l IERDTURCVUYJCQkJLyogdGhlbiBhbHNvIGRlZmluZSB0aGlzLiAqLworI2VuZGlmIC8qIERZTkFN SUMgKi8KKworI2lmbmRlZiBDS19MQlJLCQkJCS8qIENhbiBzZW5kIExvbmcgQlJFQUsgKi8KKwor I2lmZGVmIFVOSVgJCQkJLyogKGV2ZXJ5Ym9keSBidXQgT1MtOSkgKi8KKyNkZWZpbmUgQ0tfTEJS SworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tfTEJSSworI2VuZGlm IC8qIFZNUyAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lIENLX0xCUksKKyNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLworI2lmZGVmIEdFTURPUworI2RlZmluZSBDS19MQlJLCisjZW5kaWYg LyogR0VNRE9TICovCisjaWZkZWYgT1MyCisjZGVmaW5lIENLX0xCUksKKyNlbmRpZiAvKiBPUzIg Ki8KKyNpZmRlZiBBTUlHQQorI2RlZmluZSBDS19MQlJLCisjZW5kaWYgLyogQU1JR0EgKi8KKyNp ZmRlZiBTVFJBVFVTCisjZGVmaW5lIENLX0xCUksKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNl bmRpZiAvKiBDS19MQlJLICovCisKKy8qIENhcnJpZXIgdHJlYXRtZW50ICovCisvKiBUaGVzZSBh cmUgZGVmaW5lZCBoZXJlIGJlY2F1c2UgdGhleSBhcmUgc2hhcmVkIGJ5IHRoZSBzeXN0ZW0gZGVw ZW5kZW50ICovCisvKiBhbmQgdGhlIHN5c3RlbSBpbmRlcGVuZGVudCBtb2R1bGVzLiAqLworCisj ZGVmaW5lICBDQVJfT0ZGIDAJLyogT2ZmOiBpZ25vcmUgY2FycmllciBhbHdheXMuICovCisjZGVm aW5lICBDQVJfT04gIDEgICAgICAvKiBPbjogaGVlZCBjYXJyaWVyIGFsd2F5cywgZXhjZXB0IGR1 cmluZyBESUFMLiAqLworI2RlZmluZSAgQ0FSX0FVVCAyICAgICAgLyogQXV0bzogaGVlZCBjYXJy aWVyLCBidXQgb25seSBpZiBsaW5lIGlzIGRlY2xhcmVkICovCisJCQkvKiB0byBiZSBhIG1vZGVt IGxpbmUsIGFuZCBvbmx5IGR1cmluZyBDT05ORUNULiAqLworCisvKiBBbmQgbW9yZSBnZW5lcmlj YWxseSAoZm9yIHVzZSB3aXRoIGFueSBPTi9PRkYvQVVUTyBmZWF0dXJlKSAqLworI2RlZmluZSAg Q0tfT0ZGICAwCisjZGVmaW5lICBDS19PTiAgIDEKKyNkZWZpbmUgIENLX0FVVE8gMgorCisjaWZu ZGVmIE5PTE9DQUwKKy8qCisgIFNlcmlhbCBpbnRlcmZhY2Ugc3BlZWRzIGF2YWlsYWJsZS4KKwor ICBBcyBvZiBDLUtlcm1pdCA2LjEgdGhlcmUgaXMgYSBuZXcgbWV0aG9kIHRvIGdldCB0aGUgc3Vw cG9ydGVkCisgIHNwZWVkcywgd2hpY2ggb2J2aWF0ZXMgdGhlIG5lZWQgZm9yIGFsbCB0aGUgY3Jh emluZXNzIGJlbG93LiAgQXQgcnVudGltZSwKKyAganVzdCBjYWxsIHRoZSBuZXcgdHRzcGRsaXN0 KCkgcm91dGluZSB0byBnZXQgYSBsaXN0IG9mIHN1cHBvcnRlZCBzcGVlZHMuCisgIFRoZW4gdGhl IHVzZXIgaW50ZXJmYWNlIG1vZHVsZSBjYW4gYnVpbGQgYSBrZXl3b3JkIHRhYmxlIG9yIG1lbnUg ZnJvbSBpdC4KKyovCisjaWZuZGVmIFRUU1BETElTVAorI2lmZGVmIFVOSVgJCQkJLyogRm9yIG5v dywgb25seSBmb3IgVU5JWCAqLworI2lmbmRlZiBPTElOVVhISVNQRUVECQkJLyogQnV0IG5vdCBz eXN0ZW1zIHdpdGggaGFja3MgZm9yICovCisjaWZuZGVmIE1JTklYCQkJCS8qIGhpZ2ggc3BlZWRz LCBsaWtlIDExMCA9IDExNTIwMCAqLworI2RlZmluZSBUVFNQRExJU1QKKyNlbmRpZiAvKiBNSU5J WCAqLworI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisjZGVm aW5lIFRUU1BETElTVAkJCS8qIFZNUyBnZXRzIGl0IHRvbyAqLworI2VuZGlmIC8qIFZNUyAqLwor I2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBUVFNQRExJU1QgKi8KKworI2lmbmRlZiBOT0RJ QUwJCQkJLyogSGFuZ3VwIGJ5IG1vZGVtIGNvbW1hbmQgKi8KKyNpZm5kZWYgTk9NRE1IVVAKKyNp Zm5kZWYgTURNSFVQCisjZGVmaW5lIE1ETUhVUAorI2VuZGlmIC8qIE1ETUhVUCAqLworI2VuZGlm IC8qIE5PTURNSFVQICovCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZmRlZiBOT1NQTAorI2lm bmRlZiBOT0xPR0RJQUwJCQkvKiBDb25uZWN0aW9uIGxvZyBuZWVkcyBtamQoKSwgZXRjLiAqLwor I2RlZmluZSBOT0xPR0RJQUwKKyNlbmRpZiAvKiBOT0xPR0RJQUwgKi8KKyNlbmRpZiAvKiBOT1NQ TCAqLworCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgTk9MT0dESUFMCisjZW5kaWYgLyogcGRwMTEg Ki8KKworI2lmbmRlZiBOT0xPR0RJQUwJCQkvKiBDb25uZWN0aW9uIGxvZyAqLworI2lmbmRlZiBD WExPR0ZJTEUKKyNkZWZpbmUgQ1hMT0dGSUxFICJDWC5MT0ciCQkvKiBEZWZhdWx0IGNvbm5lY3Rp b24gbG9nIGZpbGUgbmFtZSAqLworI2VuZGlmIC8qIENYTE9HRklMRSAqLworI2lmbmRlZiBDS0xP R0RJQUwKKyNpZm5kZWYgQ0tfU01BTEwKKyNkZWZpbmUgQ0tMT0dESUFMCisjZGVmaW5lIENYTE9H QlVGTCAxMDI0CQkJLyogQ29ubmVjdGlvbiBsb2cgcmVjb3JkIGJ1ZmZlciBzaXplICovCisjZW5k aWYgLyogQ0tfU01BTEwgKi8KKyNlbmRpZiAvKiBOT0xPR0RJQUwgKi8KKyNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KKworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE5PVFRTUERMSVNUCQkJ LyogRXhjZXB0IGlmIE5PVFRTUERMSVNUIGlzIGRlZmluZWQgKi8KKyNpZmRlZiBUVFNQRExJU1QK KyN1bmRlZiBUVFNQRExJU1QKKyNlbmRpZiAvKiBUVFNQRExJU1QgKi8KKyNlbmRpZiAvKiBOT1RU U1BETElTVCAqLworCisjaWZkZWYgVFRTUERMSVNUCisKK19QUk9UT1RZUCggbG9uZyAqIHR0c3Bk bGlzdCwgKHZvaWQpICk7CisKKyNlbHNlIC8qIFRUU1BETElTVCBub3QgZGVmaW5lZCAqLworLyoK KyAgV2UgbXVzdCB1c2UgYSBsb25nIGFuZCBjb252b2x1dGVkIHNlcmllcyBvZiAjaWZkZWZzIHRo YXQgaGF2ZSB0byBiZSBrZXB0IGluCisgIHN5bmMgd2l0aCB0aGUgY29kZSBpbiB0aGUgY2s/dGlv LmMgbW9kdWxlLgorCisgIFdlIGFzc3VtZSB0aGF0IGV2ZXJ5Ym9keSBzdXBwb3J0czogMCwgMTEw LCAzMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgYW5kCisgIDk2MDAgYnBzLiAgU3ltYm9scyBm b3Igb3RoZXIgc3BlZWRzIGFyZSBkZWZpbmVkIGhlcmUuICBZb3UgY2FuIGFsc28gYWRkCisgIGRl ZmluaXRpb25zIG9uIHRoZSBDQyBjb21tYW5kIGxpbmVzLiAgVGhlc2UgZGVmaW5pdGlvbnMgYWZm ZWN0IHRoZSBTRVQgU1BFRUQKKyAga2V5d29yZCB0YWJsZSwgYW5kIGFyZSBub3QgbmVjZXNzYXJp bHkgdXNhYmxlIGluIHRoZSBzeXN0ZW0tZGVwZW5kZW50CisgIHNwZWVkLXNldHRpbmcgY29kZSBp biB0aGUgY2s/dGlvLmMgbW9kdWxlcywgd2hpY2ggZGVwZW5kcyBvbiBzeXN0ZW0tc3BlY2lmaWMK KyAgc3ltYm9scyBsaWtlIChpbiBVTklYKSBCMTkyMDAuICBJbiBvdGhlciB3b3JkcywganVzdCBk ZWZpbmluZyBpdCBkb2Vzbid0CisgIG1lYW4gaXQnbGwgd29yayAtLSB5b3UgYWxzbyBoYXZlIHRv IHN1cHBseSB0aGUgc3VwcG9ydGluZyBjb2RlIGluIHR0c3NwZCgpCisgIGFuZCB0dGdzcGQoKSBp biBjaz90aW8uYy4KKworICBUaGUgc3ltYm9scyBoYXZlIHRoZSBmb3JtIEJQU194eHh4LCB3aGVy ZSB4eHh4IGlzIHRoZSBzcGVlZCBpbiBiaXRzIHBlcgorICBzZWNvbmQsIG9yIChmb3IgYnBzIHZh bHVlcyBsYXJnZXIgdGhhbiA5OTk5KSB0aG91c2FuZHMgb2YgYnBzIGZvbGxvd2VkIGJ5IEsuCisg IFRoZSB0b3RhbCBzeW1ib2wgbGVuZ3RoIHNob3VsZCBiZSA4IGNoYXJhY3RlcnMgb3IgbGVzcy4g IFNvbWUgdmFsdWVzIGFyZQorICBlbmFibGVkIGF1dG9tYXRpY2FsbHkgYmVsb3cuICBZb3UgY2Fu IGRpc2FibGUgYSBwYXJ0aWN1bGFyIHZhbHVlIGJ5IGRlZmluaW5nCisgIE5PQl94eHh4IG9uIHRo ZSBDQyBjb21tYW5kIGxpbmUuCisKKyovCisKKyNpZm5kZWYgTk9CXzUwCisjZGVmaW5lIEJQU181 MAkJCQkvKiA1MCBicHMgKi8KKyNlbmRpZgorCisjaWZuZGVmIE5PQl83NQorI2RlZmluZSBCUFNf NzUJCQkJLyogNzUgYnBzICovCisjZW5kaWYKKworI2lmbmRlZiBOT0I3NTEyCisjaWZkZWYgQU5Z QlNECisjZGVmaW5lIEJQU183NTEyCQkJLyogNzUvMTIwMCBTcGxpdCBTcGVlZCAqLworI2VuZGlm IC8qIEFOWUJTRCAqLworI2VuZGlmIC8qIE5PQjc1MTIgKi8KKworI2lmbmRlZiBOT0IxMzQKKyNp ZmRlZiBTT0xBUklTMjUKKyNkZWZpbmUgQlBTXzEzNAorI2Vsc2UKKyN1bmRlZiBCUFNfMTM0CQkJ CS8qIDEzNC41IGJwcyAoSUJNIDI3NDEpICovCisjZW5kaWYgLyogQlBTXzEzNCAqLworI2VuZGlm IC8qIE5PQjEzNCAqLworCisjaWZuZGVmIE5PQl8xNTAKKyNkZWZpbmUgQlBTXzE1MAkJCQkvKiAx NTAgYnBzICovCisjZW5kaWYKKworI2lmbmRlZiBOT0JfMjAwCisjZGVmaW5lIEJQU18yMDAJCQkJ LyogMjAwIGJwcyAqLworI2VuZGlmCisKKyNpZm5kZWYgTk9CXzE4MDAKKyNpZmRlZiBNQUMKKyNk ZWZpbmUgQlBTXzE4MDAJCQkvKiAxODAwIGJwcyAqLworI2Vsc2UKKyNpZmRlZiBTT0xBUklTMjUK KyNkZWZpbmUgQlBTXzE4MDAKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBOT0Jf MzYwMAorI2lmbmRlZiBTT0xBUklTMjUKKyNkZWZpbmUgQlBTXzM2MDAJCQkvKiAzNjAwIGJwcyAq LworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBOT0JfNzIwMAorI2lmbmRlZiBTT0xBUklTMjUK KyNkZWZpbmUgQlBTXzcyMDAJCQkvKiA3MjAwIGJwcyAqLworI2VuZGlmIC8qIFNPTEFSSVMyNSAq LworI2VuZGlmCisKKyNpZm5kZWYgTk9CXzE0SworI2lmZGVmIEJTRDQ0CisjZGVmaW5lIEJQU18x NEsJCQkJLyogMTQ0MDAgYnBzICovCisjZWxzZQorI2lmZGVmIE9TMgorI2RlZmluZSBCUFNfMTRL CisjZWxzZQorI2lmZGVmIE5FWFQKKyNkZWZpbmUgQlBTXzE0SworI2Vsc2UKKyNpZmRlZiBNQUMK KyNkZWZpbmUgQlBTXzE0SworI2Vsc2UKKyNpZmRlZiBBTUlHQQorI2RlZmluZSBCUFNfMTRLCisj ZW5kaWYgLyogQU1JR0EgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBORVhUICovCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBOT0JfMTRLICov CisKKyNpZm5kZWYgTk9CXzE5SworI2RlZmluZSBCUFNfMTlLCQkJCS8qIDE5MjAwIGJwcyAqLwor I2VuZGlmCisKKyNpZm5kZWYgTk9CXzI4SworI2lmZGVmIEJTRDQ0CisjZGVmaW5lIEJQU18yOEsK KyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIEJQU18yOEsKKyNlbHNlCisjaWZkZWYgTkVYVAor I2RlZmluZSBCUFNfMjhLCQkJCS8qIDI4ODAwIGJwcyAqLworI2Vsc2UKKyNpZmRlZiBNQUMKKyNk ZWZpbmUgQlBTXzI4SwkJCQkvKiAyODgwMCBicHMgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRp ZiAvKiBORVhUICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRp ZiAvKiBOT0JfMjhLICovCisKKyNpZm5kZWYgTk9CXzM4SworI2RlZmluZSBCUFNfMzhLCQkJCS8q IDM4NDAwIGJwcyAqLworI2VuZGlmCisKKyNpZm5kZWYgTk9CXzU3SworI2lmZGVmIFBsYW45Cisj ZGVmaW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgU09MQVJJUzI1CisjZGVmaW5lIEJQU181N0sK KyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIEJQU181N0sJCQkJLyogNTc2MDAgYnBzICovCisj ZWxzZQorI2lmZGVmIE9TMgorI2RlZmluZSBCUFNfNTdLCisjZWxzZQorI2lmZGVmIF9fbGludXhf XworI2RlZmluZSBCUFNfNTdLCisjZWxzZQorI2lmZGVmIEhQVVgKKyNkZWZpbmUgQlBTXzU3Swor I2Vsc2UKKyNpZmRlZiBORVhUCisjZGVmaW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgX18zODZC U0RfXworI2RlZmluZSBCUFNfNTdLCisjZWxzZQorI2lmZGVmIF9fRnJlZUJTRF9fCisjZGVmaW5l IEJQU181N0sKKyNlbHNlCisjaWZkZWYgX19OZXRCU0RfXworI2RlZmluZSBCUFNfNTdLCisjZWxz ZQorI2lmZGVmIE1BQworI2RlZmluZSBCUFNfNTdLCisjZWxzZQorI2lmZGVmIFFOWAorI2RlZmlu ZSBCUFNfNTdLCisjZWxzZQorI2lmZGVmIEJFT1NPUkJFQk9YCisjZGVmaW5lIEJQU181N0sKKyNl bHNlCisjaWZkZWYgSVJJWDYyCisjZGVmaW5lIEJQU181N0sKKyNlbHNlCisjaWZkZWYgU0NPX09T UjUwNAorI2RlZmluZSBCUFNfNTdLCisjZWxzZQorI2lmZGVmIEJTREkyCisjZGVmaW5lIEJQU181 N0sKKyNlbmRpZiAvKiBCU0RJMiAqLworI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KKyNlbmRpZiAv KiBJUklYNjIgKi8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworI2VuZGlmIC8qIFFOWCAqLwor I2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KKyNlbmRpZiAvKiBfX0Zy ZWVCU0RfXyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNlbmRpZiAvKiBORVhUICovCisj ZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIF9fbGludXhfXyAqLworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFNPTEFSSVMyNSAqLworI2VuZGlmIC8qIFBs YW45ICovCisjZW5kaWYgLyogTk9CXzU3SyAqLworCisjaWZuZGVmIE5PQl83NksKKyNpZmRlZiBC U0RJMgorI2RlZmluZSBCUFNfNzZLCisjZW5kaWYgLyogQlNESTIgKi8KKyNpZmRlZiBQbGFuOQor I2RlZmluZSBCUFNfNzZLCisjZW5kaWYgLyogUGxhbjkgKi8KKyNpZmRlZiBTT0xBUklTMjUKKyNk ZWZpbmUgQlBTXzc2SworI2VuZGlmIC8qIFNPTEFSSVMyNSAqLworI2lmZGVmIFZNUworI2RlZmlu ZSBCUFNfNzZLCQkJCS8qIDc2ODAwIGJwcyAqLworI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIE9T MgorI2lmZGVmIF9fMzJCSVRfXworI2RlZmluZSBCUFNfNzZLCisjZW5kaWYgLyogX18zMkJJVF9f ICovCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgUU5YCisjZGVmaW5lIEJQU183NksKKyNlbmRp ZiAvKiBRTlggKi8KKyNpZmRlZiBJUklYNjIKKyNkZWZpbmUgQlBTXzc2SworI2VuZGlmIC8qIElS SVg2MiAqLworI2lmZGVmIFNDT19PU1I1MDQKKyNkZWZpbmUgQlBTXzc2SworI2VuZGlmIC8qIFND T19PU1I1MDQgKi8KKyNlbmRpZiAvKiBOT0JfNzZLICovCisKKyNpZm5kZWYgTk9CXzExNUsKKyNp ZmRlZiBCU0RJMgorI2RlZmluZSBCUFNfMTE1SworI2VuZGlmIC8qIEJTREkyICovCisjaWZkZWYg UGxhbjkKKyNkZWZpbmUgQlBTXzExNUsKKyNlbmRpZiAvKiBQbGFuOSAqLworI2lmZGVmIFNPTEFS SVMyNQorI2RlZmluZSBCUFNfMTE1SworI2VuZGlmIC8qIFNPTEFSSVMyNSAqLworI2lmZGVmIFZN UworI2RlZmluZSBCUFNfMTE1SwkJCS8qIDExNTIwMCBicHMgKi8KKyNlbHNlCisjaWZkZWYgUU5Y CisjZGVmaW5lIEJQU18xMTVLCisjZWxzZQorI2lmZGVmIEhQVVgKKyNkZWZpbmUgQlBTXzExNUsK KyNlbHNlCisjaWZkZWYgX19saW51eF9fCisjZGVmaW5lIEJQU18xMTVLCisjZWxzZQorI2lmZGVm IF9fMzg2QlNEX18KKyNkZWZpbmUgQlBTXzExNUsKKyNlbHNlCisjaWZkZWYgX19GcmVlQlNEX18K KyNkZWZpbmUgQlBTXzExNUsKKyNlbHNlCisjaWZkZWYgX19OZXRCU0RfXworI2RlZmluZSBCUFNf MTE1SworI2Vsc2UKKyNpZmRlZiBPUzIKKyNpZmRlZiBfXzMyQklUX18KKyNkZWZpbmUgQlBTXzEx NUsKKyNlbmRpZiAvKiBfXzMyQklUX18gKi8KKyNlbHNlCisjaWZkZWYgQkVPU09SQkVCT1gKKyNk ZWZpbmUgQlBTXzExNUsKKyNlbHNlCisjaWZkZWYgSVJJWDYyCisjZGVmaW5lIEJQU18xMTVLCisj ZWxzZQorI2lmZGVmIFNDT19PU1I1MDQKKyNkZWZpbmUgQlBTXzExNUsKKyNlbmRpZiAvKiBTQ09f T1NSNTA0ICovCisjZW5kaWYgLyogSVJJWDYyICovCisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBfX05ldEJTRF9fICovCisjZW5kaWYgLyogX19G cmVlQlNEX18gKi8KKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisjZW5kaWYgLyogX19saW51eF9f ICovCisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIFZNUyAq LworI2VuZGlmIC8qIE5PQl8xMTVLICovCisKKyNpZm5kZWYgTk9CXzIzMEsJCQkvKiAyMzA0MDAg YnBzICovCisjaWZkZWYgQlNESTIKKyNkZWZpbmUgQlBTXzIzMEsKKyNlbHNlCisjaWZkZWYgU0NP X09TUjUwNAorI2RlZmluZSBCUFNfMjMwSworI2Vsc2UKKyNpZmRlZiBfX2xpbnV4X18KKyNkZWZp bmUgQlBTXzIzMEsKKyNlbHNlCisjaWZkZWYgU09MQVJJUzI1CisjZGVmaW5lIEJQU18yMzBLCisj ZWxzZQorI2lmZGVmIE9TMgorI2lmZGVmIF9fMzJCSVRfXworI2RlZmluZSBCUFNfMjMwSworI2Vu ZGlmIC8qIF9fMzJCSVRfXyAqLworI2Vsc2UKKyN1bmRlZiBCUFNfMjMwSworI2VuZGlmIC8qIE9T MiAqLworI2VuZGlmIC8qIFNPTEFSSVMyNSAqLworI2VuZGlmIC8qIF9fbGludXhfXyAqLworI2Vu ZGlmIC8qIFNDT19PU1I1MDQgKi8KKyNlbmRpZiAvKiBCU0RJMiAqLworI2VuZGlmIC8qIE5PQl8y MzBLICovCisKKyNpZm5kZWYgTk9CXzQ2MEsJCQkvKiA0NjA4MDAgYnBzICovCisjaWZkZWYgU0NP X09TUjUwNAorI2RlZmluZSBCUFNfNDYwSworI2Vsc2UKKyNpZmRlZiBfX2xpbnV4X18KKyNkZWZp bmUgQlBTXzQ2MEsKKyNlbHNlCisjaWZkZWYgT1MyCisjaWZkZWYgX18zMkJJVF9fCisjZGVmaW5l IEJQU180NjBLCisjZW5kaWYgLyogX18zMkJJVF9fICovCisjZWxzZQorI3VuZGVmIEJQU180NjBL CisjZW5kaWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyogU0NPX09TUjUwNCAqLworI2VuZGlm IC8qIE9TMiAqLworI2VuZGlmIC8qIE5PQl80NjBLICovCisKKyNpZm5kZWYgTk9CXzkyMUsJCQkv KiA5MjE2MDAgYnBzICovCisjaWZkZWYgU0NPX09TUjUwNAorI2RlZmluZSBCUFNfOTIxSworI2Vu ZGlmIC8qIFNDT19PU1I1MDQgKi8KKyNlbmRpZiAvKiBOT0JfOTIxSyAqLworCisjaWZkZWYgQlBT XzkyMUsJCQkJLyogTWF4aW11bSBzcGVlZCBkZWZpbmVkICovCisjZGVmaW5lIE1BWF9TUEQgOTIx NjAwTAorI2Vsc2UKKyNpZmRlZiBCUFNfNDYwSworI2RlZmluZSBNQVhfU1BEIDQ2MDgwMEwKKyNl bHNlCisjaWZkZWYgQlBTXzIzMEsKKyNkZWZpbmUgTUFYX1NQRCAyMzA0MDBMCisjZWxzZQorI2lm ZGVmIEJQU18xMTVLCisjZGVmaW5lIE1BWF9TUEQgMTE1MjAwTAorI2Vsc2UKKyNpZmRlZiBCUFNf NzZLCisjZGVmaW5lIE1BWF9TUEQgNzY4MDBMCisjZWxzZQorI2lmZGVmIEJQU181N0sKKyNkZWZp bmUgTUFYX1NQRCA1NzYwMEwKKyNlbHNlCisjaWZkZWYgQlBTXzM4SworI2RlZmluZSBNQVhfU1BE IDM4NDAwTAorI2Vsc2UKKyNpZmRlZiBCUFNfMjhLCisjZGVmaW5lIE1BWF9TUEQgMjg4MDBMCisj ZWxzZQorI2lmZGVmIEJQU18xOUsKKyNkZWZpbmUgTUFYX1NQRCAxOTIwMEwKKyNlbHNlCisjaWZk ZWYgQlBTXzE0SworI2RlZmluZSBNQVhfU1BEIDE0NDAwTAorI2Vsc2UKKyNkZWZpbmUgTUFYX1NQ RCA5NjAwTAorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgor I2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogVFRTUERMSVNUICovCisK KyNpZm5kZWYgQ09OR1NQRAkJCQkvKiBTeXN0ZW1zIHRoYXQgY2FuIGNhbGwgY29uZ3NwZCgpICov CisjaWZkZWYgVU5JWAorI2RlZmluZSBDT05HU1BECisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVm IFZNUworI2RlZmluZSBDT05HU1BECisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgU1RSQVRVUwor I2RlZmluZSBDT05HU1BECisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIENPTkdTUEQg Ki8KKworLyogVHlwZXMgb2YgZmxvdyBjb250cm9sIGF2YWlsYWJsZSAqLworCisjZGVmaW5lIENL X1hPTlhPRkYJCQkvKiBFdmVyeWJvZHkgY2FuIGRvIHRoaXMsIHJpZ2h0PyAqLworCisjaWZkZWYg QU1JR0EJCQkJLyogQ29tbW9kb3JlIEFtaWdhICovCisjZGVmaW5lIENLX1JUU0NUUwkJCS8qIGhh cyBSVFMvQ1RTICovCisjZW5kaWYgLyogQU1JR0EgKi8KKworI2lmZGVmIFNVTjRTNQkJCQkvKiBT dW5PUyBpbiBTeXN0ZW0gViBlbnZpcm9ubWVudCAqLworI2RlZmluZSBDS19SVFNDVFMKKyNlbHNl CQkJCQkvKiBTdW5PUyA0LjAvNC4xIGluIEJTRCBlbnZpcm9ubWVudCAqLworI2lmZGVmIFNVTk9T NAkJCQkvKiBTdW5PUyA0LjArbGF0ZXIgc3VwcG9ydHMgUlRTL0NUUyAqLworI2lmZGVmIFNVTk9T NDEJCQkJLyogRWFzeSBpbiA0LjEgYW5kIGxhdGVyICovCisjZGVmaW5lIENLX1JUU0NUUworI2Vs c2UJCQkJCS8qIEhhcmRlciBpbiA0LjAgKi8KKyNpZm5kZWYgX19HTlVDX18JCQkvKiAoc2VlIHR0 aGZsb3coKSBpbiBja3V0aW8uYykgKi8KKyNpZm5kZWYgR05VQworI2RlZmluZSBDS19SVFNDVFMJ CQkvKiBPbmx5IGlmIG5vdCB1c2luZyBHTlUgZ2NjICovCisjZW5kaWYgLyogX19HTlVDX18gKi8K KyNlbmRpZiAvKiBHTlVDICovCisjZW5kaWYgLyogU1VOT1M0MSAqLworI2VuZGlmIC8qIFNVTk9T NCAqLworI2VuZGlmIC8qIFNVTjRTNSAqLworCisjaWZkZWYgQlNENDQJCQkJLyogQW5kIGluIDQu NCBCU0QsIGluY2x1ZGluZyBCU0RJICovCisjZGVmaW5lIENLX1JUU0NUUworI2VuZGlmIC8qIEJT RDQ0ICovCisKKyNpZmRlZiBURVJNSU9YCQkJCS8qIFN5cyBWIFI0IDx0ZXJtaW94Lmg+ICovCisj aWZuZGVmIENLX1JUU0NUUworI2RlZmluZSBDS19SVFNDVFMKKyNlbmRpZiAvKiBDS19SVFNDVFMg Ki8KKyNpZm5kZWYgQ0tfRFRSQ0QKKyNkZWZpbmUgQ0tfRFRSQ0QKKyNlbmRpZiAvKiBDS19EVFJD RCAqLworI2Vsc2UKKyNpZmRlZiBTVEVSTUlPWAkJCQkvKiBTeXMgViBSNCA8c3lzL3Rlcm1pb3gu aD4gKi8KKyNpZm5kZWYgQ0tfUlRTQ1RTCisjZGVmaW5lIENLX1JUU0NUUworI2VuZGlmIC8qIENL X1JUU0NUUyAqLworI2lmbmRlZiBDS19EVFJDRAorI2RlZmluZSBDS19EVFJDRAorI2VuZGlmIC8q IENLX0RUUkNEICovCisjZW5kaWYgLyogU1RFUk1JT1ggKi8KKyNlbmRpZiAvKiBURVJNSU9YICov CisKKyNpZmRlZiBPWE9TCQkJCS8qIE9saXZldHRpIFgvT1MgUjIgc3RydWN0IHRlcm1pb3MgKi8K KyNkZWZpbmUgQ0tfUlRTQ1RTCQkJLyogRGl0dG8uICovCisjZGVmaW5lIENLX0RUUkNECisjZW5k aWYgLyogT1hPUyAqLworCisjaWZkZWYgQUlYUlMJCQkJLyogUlMvNjAwMCB3aXRoIEFJWCAzLngg Ki8KKyNkZWZpbmUgQ0tfUlRTQ1RTCQkJLyogSGFzIGl0cyBvd24gcGVjdWxpYXIgbWV0aG9kLi4u ICovCisjZW5kaWYgLyogQUlYUlMgKi8KKworI2lmZGVmIF9fbGludXhfXwkJCS8qIExpbnV4ICov CisjZGVmaW5lIENLX1JUU0NUUworI2VuZGlmIC8qIF9fbGludXhfXyAqLworLyoKKyAgSGFyZHdh cmUgZmxvdyBjb250cm9sIGlzIG5vdCBkZWZpbmVkIGluIFBPU0lYLjEuICBOZXZlcnRoZWxlc3Ms IGEgY2VydGFpbgorICBzdHlsZSBBUEkgZm9yIGhhcmR3YXJlIGZsb3cgY29udHJvbCwgdXNpbmcg dGNzZXRhdHRyKCkgYW5kIHRoZSBDUlRTQ1RTCisgIGJpdChzKSwgc2VlbXMgdG8gYmUgZ2Fpbmlu ZyBjdXJyZW5jeSBvbiBQT1NJWC1iYXNlZCBVTklYIHN5c3RlbXMuICBUaGUKKyAgZm9sbG93aW5n IGNvZGUgZGVmaW5lcyB0aGUgc3ltYm9sIFBPU0lYX0NSVFNDVFMgZm9yIHN1Y2ggc3lzdGVtcy4K KyovCisjaWZkZWYgQ0tfUlRTQ1RTCisjaWZkZWYgX19ic2RpX18JCQkJLyogQlNESSwgYS5rLmEu IEJTRC8zODYgKi8KKyNkZWZpbmUgUE9TSVhfQ1JUU0NUUworI2VuZGlmIC8qIF9fYnNkaV9fICov CisjaWZkZWYgX19saW51eF9fCQkJLyogTGludXggKi8KKyNkZWZpbmUgUE9TSVhfQ1JUU0NUUwor I2VuZGlmIC8qIF9fbGludXhfXyAqLworI2lmZGVmIF9fTmV0QlNEX18JCQkvKiBOZXRCU0QgKi8K KyNkZWZpbmUgUE9TSVhfQ1JUU0NUUworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KKyNpZmRlZiBf X09wZW5CU0RfXworI2RlZmluZSBQT1NJWF9DUlRTQ1RTCisjZW5kaWYgLyogX19PcGVuQlNEX18g Ki8KKyNpZmRlZiBCRU9TT1JCRUJPWAkJCS8qIEJlQk9YICovCisjZGVmaW5lIFBPU0lYX0NSVFND VFMKKy8qIEJFQk9YIGRlZmluZXMgQ1JUU0ZMIGFzIChDVFNGTE9XICYgUlRTRkxPVykgKi8KKyNk ZWZpbmUgQ1JUU0NUUyBDUlRTRkwKKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworI2lmZGVmIElS SVg1MgkJCQkvKiBJUklYIDUuMiBhbmQgbGF0ZXIgKi8KKyNkZWZpbmUgUE9TSVhfQ1JUU0NUUwor I2RlZmluZSBDUlRTQ1RTIENORVdfUlRTQ1RTCQkvKiBTZWUgPHN5cy90ZXJtaW9zLmg+ICovCisj ZW5kaWYgLyogSVJJWDUyICovCisjZW5kaWYgLyogQ0tfUlRTQ1RTICovCisKKy8qIEltcGxlbWVu dGF0aW9ucyB0aGF0IGhhdmUgaW1wbGVtZW50ZWQgdGhlIHR0c2V0ZmxvdygpIGZ1bmN0aW9uLiAq LworCisjaWZuZGVmIENLX1RUU0VURkxPVworI2lmZGVmIFVOSVgKKyNkZWZpbmUgQ0tfVFRTRVRG TE9XCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIE9TMgorI2RlZmluZSBDS19UVFNFVEZMT1cK KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19UVFNFVEZMT1cgKi8KKworI2lmZGVmIENL X1RUU0VURkxPVworX1BST1RPVFlQKCBpbnQgdHRzZXRmbG93LCAoaW50KSApOworI2VuZGlmIC8q IENLX1RUU0VURkxPVyAqLworLyoKKyBTeXN0ZW1zIHdoZXJlIHdlIGNhbiBleHBhbmQgdGlsZGUg YXQgdGhlIGJlZ2lubmluZyBvZiBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lcworKi8KKyNpZmRlZiBQ T1NJWAorI2lmbmRlZiBEVElMREUKKyNkZWZpbmUgRFRJTERFCisjZW5kaWYgLyogRFRJTERFICov CisjZW5kaWYgLyogUE9TSVggKi8KKyNpZmRlZiBCU0Q0CisjaWZuZGVmIERUSUxERQorI2RlZmlu ZSBEVElMREUKKyNlbmRpZiAvKiBEVElMREUgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisjaWZkZWYg QVRUU1YKKyNpZm5kZWYgRFRJTERFCisjZGVmaW5lIERUSUxERQorI2VuZGlmIC8qIERUSUxERSAq LworI2VuZGlmIC8qIEFUVFNWICovCisjaWZkZWYgT1NLCisjaWZuZGVmIERUSUxERQorI2RlZmlu ZSBEVElMREUKKyNlbmRpZiAvKiBEVElMREUgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNpZmRlZiBI UFVYCQkJCS8qIEkgZG9uJ3Qga25vdyB3aHkgdGhpcyBpcyAqLworI2lmbmRlZiBEVElMREUJCQkJ LyogbmVjZXNzYXJ5LCBzaW5jZSAtREhQVVggKi8KKyNkZWZpbmUgRFRJTERFCQkJCS8qIGF1dG9t YXRpY2FsbHkgZGVmaW5lcyBBVFRTViAqLworI2VuZGlmIC8qIERUSUxERSAqLwkJCS8qIChzZWUg YWJvdmUpIC4uLiAqLworI2VuZGlmIC8qIEhQVVggKi8KKworLyoKKyAgVGhpcyBpcyBtYWlubHkg Zm9yIHRoZSBiZW5lZml0IG9mIGNrdWZpby5jIChVTklYIGFuZCBPUy8yIGZpbGUgc3VwcG9ydCku CisgIFN5c3RlbXMgdGhhdCBoYXZlIGFuIGF0b21pYyByZW5hbWUoKSBmdW5jdGlvbiwgc28gd2Ug ZG9uJ3QgaGF2ZSB0byB1c2UKKyAgbGluaygpIGFuZCB1bmxpbmsoKS4KKyovCisjaWZkZWYgUE9T SVgKKyNpZm5kZWYgUkVOQU1FCisjZGVmaW5lIFJFTkFNRQorI2VuZGlmIC8qIFJFTkFNRSAqLwor I2VuZGlmIC8qIFBPU0lYICovCisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgUkVOQU1FCisjZGVmaW5l IFJFTkFNRQorI2VuZGlmIC8qIFJFTkFNRSAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYg U1VOT1M0MQorI2lmbmRlZiBSRU5BTUUKKyNkZWZpbmUgUkVOQU1FCisjZW5kaWYgLyogUkVOQU1F ICovCisjZW5kaWYgLyogU1VOT1M0MSAqLworCisjaWZkZWYgU1ZSNAorI2lmbmRlZiBSRU5BTUUK KyNkZWZpbmUgUkVOQU1FCisjZW5kaWYgLyogUkVOQU1FICovCisjZW5kaWYgLyogU1ZSNCAqLwor CisjaWZkZWYgQUlYUlMKKyNpZm5kZWYgUkVOQU1FCisjZGVmaW5lIFJFTkFNRQorI2VuZGlmIC8q IFJFTkFNRSAqLworI2VuZGlmIC8qIEFJWFJTICovCisKKyNpZmRlZiBCU0Q0NAorI2lmbmRlZiBS RU5BTUUKKyNkZWZpbmUgUkVOQU1FCisjZW5kaWYgLyogUkVOQU1FICovCisjZW5kaWYgLyogQlNE NDQgKi8KKworI2lmZGVmIE5PUkVOQU1FCQkJCS8qIEFsbG93IGZvciBjb21waWxlLXRpbWUgb3Zl cnJpZGUgKi8KKyNpZmRlZiBSRU5BTUUKKyN1bmRlZiBSRU5BTUUKKyNlbmRpZiAvKiBSRU5BTUUg Ki8KKyNlbmRpZiAvKiBOT1JFTkFNRSAqLworCisjaWZkZWYgU1RSQVRVUwkJCQkvKiBTdHJhdHVz IFZPUyAqLworI2lmbmRlZiBSRU5BTUUKKyNkZWZpbmUgUkVOQU1FCisjZW5kaWYgLyogUkVOQU1F ICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworCisvKiBMaW5lIGRlbGltaXRlciBmb3IgdGV4dCBm aWxlcyAqLworCisvKgorIElmIHRoZSBzeXN0ZW0gdXNlcyBhIHNpbmdsZSBjaGFyYWN0ZXIgZm9y IHRleHQgZmlsZSBsaW5lIGRlbGltaXRhdGlvbiwKKyBkZWZpbmUgTkxDSEFSIHRvIHRoZSB2YWx1 ZSBvZiB0aGF0IGNoYXJhY3Rlci4gIEZvciB0ZXh0IGZpbGVzLCB0aGF0CisgY2hhcmFjdGVyIHdp bGwgYmUgY29udmVydGVkIHRvIENSTEYgdXBvbiBvdXRwdXQsIGFuZCBDUkxGIHdpbGwgYmUgY29u dmVydGVkCisgdG8gdGhhdCBjaGFyYWN0ZXIgb24gaW5wdXQgZHVyaW5nIHRleHQtbW9kZSAoZGVm YXVsdCkgcGFja2V0IG9wZXJhdGlvbnMuCisqLworI2lmZGVmIE1BQyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE1hY2ludG9zaCAqLworI2RlZmluZSBOTENIQVIgMDE1CisjZWxzZQor I2lmZGVmIE9TSwkJCQkvKiBPUy05LzY4SyAqLworI2RlZmluZSBOTENIQVIgMDE1CisjZWxzZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsIFVuaXgtbGlrZSBzeXN0ZW1z ICovCisjZGVmaW5lIE5MQ0hBUiAwMTIKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBNQUMg Ki8KKworLyoKKyBBdCB0aGlzIHBvaW50LCBpZiB0aGVyZSdzIGEgc3lzdGVtIHRoYXQgdXNlcyBv cmRpbmFyeSBDUkxGIGxpbmUKKyBkZWxpbWl0YXRpb24gQU5EIHRoZSBDIGNvbXBpbGVyIGFjdHVh bGx5IHJldHVybnMgYm90aCB0aGUgQ1IgYW5kCisgdGhlIExGIHdoZW4gZG9pbmcgaW5wdXQgZnJv bSBhIGZpbGUsIHRoZW4gI3VuZGVmIE5MQ0hBUi4KKyovCisjaWZkZWYgT1MyCQkJCS8qIE9TLzIg Ki8KKyN1bmRlZiBOTENIQVIKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIEdFTURPUwkJCQkv KiBBdGFyaSBTVCAqLworI3VuZGVmIE5MQ0hBUgorI2VuZGlmIC8qIEdFTURPUyAqLworCisvKgor ICBWTVMgZmlsZSBmb3JtYXRzIGFyZSBzbyBjb21wbGljYXRlZCB3ZSBuZWVkIHRvIGRvIGFsbCB0 aGUgY29udmVyc2lvbgorICB3b3JrIGluIHRoZSBDS1ZGSU8gbW9kdWxlLCBzbyB3ZSB0ZWxsIHRo ZSByZXN0IG9mIEMtS2VybWl0IG5vdCB0byBmaWRkbGUKKyAgd2l0aCB0aGUgYnl0ZXMuCisqLwor CisjaWZkZWYgdm1zCisjdW5kZWYgTkxDSEFSCisjZW5kaWYgLyogdm1zICovCisKKy8qIFRoZSBk ZXZpY2UgbmFtZSBvZiBhIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCisvKiBTcGVjaWFs IGZvciBWTVMsIHNhbWUgZm9yIGFsbCBVbml4ZXMgKD8pLCBub3QgdXNlZCBieSBNYWNpbnRvc2gg Ki8KKworI2lmZGVmIEJFT1MKKyNkZWZpbmUgQ1RUTkFNIGRmdHR5CisjZWxzZQorI2lmZGVmIHZt cworI2RlZmluZSBDVFROQU0gIlNZUyRJTlBVVDoiCQkvKiAoNCBKYW4gMjAwMikgV2FzIFRUOiAq LworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2RlZmluZSBDVFROQU0gIkBvdXRwdXQiCisj ZWxzZQorI2lmZGVmIE9TSworZXh0ZXJuIGNoYXIgbXl0dHlzdHJbXTsKKyNkZWZpbmUgQ1RUTkFN IG15dHR5c3RyCisjZWxzZQorI2lmZGVmIE9TMgorI2RlZmluZSBDVFROQU0gImNvbiIKKyNlbHNl CisjaWZkZWYgVU5JWAorI2RlZmluZSBDVFROQU0gIi9kZXYvdHR5IgorI2Vsc2UKKyNpZmRlZiBH RU1ET1MKKyNkZWZpbmUgQ1RUTkFNICJhdXg6IgorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCitleHRl cm4gY2hhciBteXR0eXN0cltdOworI2RlZmluZSBDVFROQU0gbXl0dHlzdHIKKyNlbHNlIC8qIEFu eW9uZSBlbHNlLi4uICovCisjZGVmaW5lIENUVE5BTSAic3Rkb3V0IgkJCS8qIFRoaXMgaXMgYSBr bHVkZ2UgdXNlZCBieSBNYWMgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogR0VN RE9TICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE9T SyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogdm1zICovCisjZW5kaWYg LyogQkVPUyAqLworCisjaWZuZGVmIEhBVkVDVFROQU0KKyNpZmRlZiBVTklYCisjZGVmaW5lIEhB VkVDVFROQU0KKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIEhBVkVDVFROQU0KKyNlbmRpZiAv KiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogSEFWRUNUVE5BTSAqLworCisj aWZuZGVmIFpGQ0RBVAkJCQkvKiB6ZmNkYXQoKSBmdW5jdGlvbiBhdmFpbGFibGU/ICovCisjaWZk ZWYgVU5JWAorI2RlZmluZSAgWkZDREFUCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyNkZWZpbmUg IFpGQ0RBVAorI2Vsc2UKKyNpZmRlZiBHRU1ET1MKKyNkZWZpbmUgIFpGQ0RBVAorI2Vsc2UKKyNp ZmRlZiBBTUlHQQorI2RlZmluZSAgWkZDREFUCisjZWxzZQorI2lmZGVmIE9TMgorI2RlZmluZSAg WkZDREFUCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lICBaRkNEQVQKKyNlbHNl CisjaWZkZWYgVk1TCisjZGVmaW5lICBaRkNEQVQKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEFNSUdBICovCisj ZW5kaWYgLyogR0VNRE9TICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFVOSVgg Ki8KKyNlbmRpZiAvKiBaRkNEQVQgKi8KKworI2lmZGVmIFNVTlM0UzUKKyNkZWZpbmUgdG9sb3dl ciBfdG9sb3dlcgorI2RlZmluZSB0b3VwcGVyIF90b3VwcGVyCisjZW5kaWYgLyogU1VOUzRTNSAq LworCisvKiBFcnJvciBudW1iZXIgKi8KKworI2lmZGVmIF9DUkFZCisjaWZkZWYgX0NSQVlDT00J CQkJLyogQ3JheSBDb21wdXRlciBDb3JwLiAqLworZXh0ZXJuIGludCBlcnJubzsKKyNlbHNlIC8q IF9DUkFZQ09NICovCisjaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBDcmF5IFJlc2VhcmNoIFVOSUNP UyBkZWZpbmVzICovCisJCQkJCS8qIGVycm5vIGFzIGEgZnVuY3Rpb24uICovCisjZW5kaWYgLyog X0NSQVlDT00gKi8JCQkvKiBPSyBmb3IgVU5JQ09TIDYuMSBhbmQgNy4wLiAqLworI2Vsc2UgLyog X0NSQVkgKi8KKyNpZmRlZiBTVFJBVFVTCQkJCS8qIFN0cmF0dXMgVk9TICovCisjaW5jbHVkZSA8 ZXJybm8uaD4KKyNlbHNlIC8qIG5vdCBTVFJBVFVTICovCisjaWZuZGVmIFZNUworI2lmbmRlZiBP UzIKKyNpZmRlZiBfX0dMSUJDX18KKy8qCisgICJnbGliYyB1c2VzIHRocmVhZHMsIGtlcm1pdCB1 c2VzIGdsaWJjOyBlcnJubyBhY2Nlc3MgaXMgaW4gVGhyZWFkIExvY2FsCisgIFN0b3JhZ2UgKFRM UykgZnJvbSBnbGliYy0zLjIuMi4gIC4uLmEgdGhyZWFkIHNwZWNpZmljIGVycm5vIGlzIGJlaW5n IHJ1biBpbgorICB0aHJlYWQgbG9jYWwgc3RvcmFnZSByZWxhdGl2ZSB0byB0aGUgJWdzIHNlZ21l bnQgcmVnaXN0ZXIsIHNvIHNvbWUgbWVhbnMgdG8KKyAgcmV2ZWN0b3IgZ2V0cy9wdXRzIG5lZWRz IHRvIGJlIGRvbmUuIiAtIEplZmYgSm9obnNvbiwgUmVkIEhhdCwgRmViIDIwMDMuCisqLworI2lu Y2x1ZGUgPGVycm5vLmg+CisjZWxzZQorLyoKKyAgVGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbiB3 b3VsZCBjYXVzZSBwcm9ibGVtcyBmb3IgVk1TIGFuZCBPUy8yLCBpbiB3aGljaAorICBlcnJubyBp cyBhbiAiZXh0ZXJuIHZvbGF0aWxlIGludCBub3NoYXJlIi4uLiAgTk9URTogYnkgbm93ICgyMDA3 KSB0aGUKKyAgZm9sbG93aW5nIGlzIGFuIGFuYWNocm9uaXNtIGFuZCBzaG91bGQgYmUgdGhlIGV4 ZWNwdGlvbiByYXRoZXIgdGhhbiB0aGUKKyAgcnVsZS4KKyovCitleHRlcm4gaW50IGVycm5vOwor I2VuZGlmIC8qIF9fR0xJQkNfXyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFZNUyAq LworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBfQ1JBWSAqLworCisjaWZkZWYgVU5J WAkJCQkvKiBDYXRjaC1hbGwgc28gd2UgY2FuIGhhdmUgKi8KKyNpZm5kZWYgRVNSQ0gJCQkJLyog YWNjZXNzIHRvIGVycm9yIG1uZW1vbmljcyAqLworI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogaW4g YWxsIG1vZHVsZXMgLSAyMDA3LzA4LzI1ICovCisjZW5kaWYJLyogRVNSQ0ggKi8KKyNlbmRpZgkv KiBVTklYICovCisKKyNpZmRlZiBwZHAxMQkJCQkvKiBUcnkgdG8gbWFrZSBzb21lIHNwYWNlIG9u IFBEUC0xMSAqLworI2lmbmRlZiBOT0RJQUwKKyNkZWZpbmUgTk9ESUFMCisjZW5kaWYgLyogTk9E SUFMICovCisjaWZuZGVmIE5PQ1VSU0VTCisjZGVmaW5lIE5PQ1VSU0VTCisjZW5kaWYgLyogTk9D VVJTRVMgKi8KKyNpZm5kZWYgTk9CSUdCVUYKKyNkZWZpbmUgTk9CSUdCVUYKKyNlbmRpZiAvKiBO T0JJR0JVRiAqLworI2VuZGlmIC8qIHBkcDExICovCisKKyNpZm5kZWYgTk9CSUdCVUYKKyNpZm5k ZWYgQklHQlVGT0sJCQkvKiBQbGF0Zm9ybXMgd2l0aCBsb3RzIG9mIG1lbW9yeSAqLworCisjaWZk ZWYgUU5YCQkJCS8qIFFOWCAqLworI2lmbmRlZiBRTlgxNgkJCQkvKiBCdXQgbm90IDE2LWJpdCB2 ZXJzaW9ucyAqLworI2RlZmluZSBCSUdCVUZPSworI2VuZGlmIC8qIFFOWDE2ICovCisjZW5kaWYg LyogUU5YICovCisKKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBCSUdCVUZPSworI2VuZGlmIC8qIEJT RDQ0ICovCisKKyNpZmRlZiBTVFJBVFVTCQkJCS8qIFN0cmF0dXMgVk9TICovCisjZGVmaW5lIEJJ R0JVRk9LCisjZW5kaWYgLyogU1RSQVRVUyAqLworCisjaWZkZWYgc3BhcmMJCQkJLyogU1BBUkMg cHJvY2Vzc29ycyAqLworI2RlZmluZSBCSUdCVUZPSworI2VuZGlmIC8qIHNwYXJjICovCisKKyNp ZmRlZiBtaXBzCQkJCS8qIE1JUFMgcHJvY2Vzc29ycyAqLworI2RlZmluZSBCSUdCVUZPSworI2Vu ZGlmIC8qIG1pcHMgKi8KKworI2lmZGVmIEhQVVg5CQkJCS8qIEhQLVVYIDkueCAqLworI2RlZmlu ZSBCSUdCVUZPSworI2VuZGlmIC8qIEhQVVg5ICovCisKKyNpZmRlZiBIUFVYMTAJCQkJLyogSFAt VVggMTAuMCBQQS1SSVNDICovCisjZGVmaW5lIEJJR0JVRk9LCisjZW5kaWYgLyogSFBVWDEwICov CisKKyNpZmRlZiBORVhUCQkJCS8qIE5lWFRTVEVQICovCisjaWZkZWYgbWM2ODAwMAkJCQkvKiBv biBORVhUIHBsYXRmb3Jtcy4uLiAqLworI2RlZmluZSBCSUdCVUZPSworI2VuZGlmIC8qIG1jNjgw MDAgKi8KKyNlbmRpZiAvKiBORVhUICovCisKKyNpZmRlZiBMSU5VWAkJCQkvKiBMaW51eCBpbiAx OTk4IHNob3VsZCBiZSBPSyAqLworI2lmbmRlZiBCSUdCVUZPSworI2RlZmluZSBCSUdCVUZPSwor I2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5kaWYgLyogTElOVVggKi8KKworI2lmZGVmIE9TMgkJ CQkvKiAzMi1iaXQgT1MvMiAyLnggYW5kIGFib3ZlICovCisjaWZkZWYgX18zMkJJVF9fCisjZGVm aW5lIEJJR0JVRk9LCisjZW5kaWYgLyogX18zMkJJVF9fICovCisjaWZkZWYgTlQKKyNkZWZpbmUg QklHQlVGT0sKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgUGxh bjkJCQkJLyogUGxhbiA5IGlzIE9LICovCisjZGVmaW5lIEJJR0JVRk9LCisjZW5kaWYgLyogUGxh bjkgKi8KKworI2lmZGVmIFZNUwkJCQkvKiBBbnkgVk1TIGlzIE9LICovCisjaWZuZGVmIEJJR0JV Rk9LCisjZGVmaW5lIEJJR0JVRk9LCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKworI2lmZGVmIF9fYWxwaGEJCQkJLyogREVDIDY0LWJpdCBBbHBoYSwgZS5nLiBPU0Yv MSAqLworI2lmbmRlZiBCSUdCVUZPSwkJCS8qIE1pZ2h0IGFscmVhZHkgYmUgZGVmaW5lZCBmb3Ig Vk1TICovCisjZGVmaW5lIEJJR0JVRk9LCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAv KiBfX2FscGhhICovCisKKyNpZmRlZiBzZ2kJCQkJLyogU0dJIHdpdGggSVJJWCA0LjAgb3IgbGF0 ZXIgKi8KKyNpZm5kZWYgQklHQlVGT0sKKyNkZWZpbmUgQklHQlVGT0sKKyNlbmRpZiAvKiBCSUdC VUZPSyAqLworI2VuZGlmIC8qIHNnaSAqLworCisjaWZkZWYgQUlYUlMJCQkJLyogQUlYIG9uIFJJ U0MgKi8KKyNkZWZpbmUgQklHQlVGT0sKKyNlbmRpZiAvKiBBSVhSUyAqLworCisjaWZkZWYgQ0tf U0NPVjUJCQkJLyogU0NPIE9TUjUgKi8KKyNpZm5kZWYgQklHQlVGT0sKKyNkZWZpbmUgQklHQlVG T0sKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIENLX1NDT1Y1ICovCisKKyNpZmRl ZiBTT0xBUklTCQkJCS8qIFNvbGFyaXMgeDg2ICovCisjaWZuZGVmIEJJR0JVRk9LCisjZGVmaW5l IEJJR0JVRk9LCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisK KyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIE5PQklHQlVGICovCisKKyNpZmRlZiBD S19TTUFMTAorI2lmZGVmIEJJR0JVRk9LCisjdW5kZWYgQklHQlVGT0sKKyNlbmRpZiAvKiBCSUdC VUZPSyAqLworI2VuZGlmIC8qIENLX1NNQUxMICovCisKKy8qIElmICJtZW1vcnkgaXMgbm8gcHJv YmxlbSIgdGhlbiB0aGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlICovCisKKyNpZmRlZiBERUJVRwor I2lmZGVmIEJJR0JVRk9LCisjaWZuZGVmIElGREVCVUcKKyNkZWZpbmUgSUZERUJVRworI2VuZGlm IC8qIElGREVCVUcgKi8KKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIERFQlVHICov CisKKy8qIEZpbGUgU3lzdGVtIERlZmF1bHRzICovCisKKyNpZm5kZWYgVUlEQlVGTEVOCQkJLyog TGVuZ3RoIG9mIFVzZXIgSUQgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgVUlEQlVGTEVOIDI1Ngor I2Vsc2UgLyogT1MyICovCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgVUlEQlVGTEVOIDI1Ngor I2Vsc2UKKyNkZWZpbmUgVUlEQlVGTEVOIDY0CisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVSURCVUZMRU4gKi8KKworI2lmZGVmIFVOSVgKKyNpZmRl ZiBQUk9WWDEKKyNkZWZpbmUgTUFYV0xEIDUwCisjZWxzZQorI2lmZGVmIHBkcDExCisjZGVmaW5l IE1BWFdMRCA1MAorI2Vsc2UKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBNQVhXTEQgMTAyNDAw CisjZWxzZQorI2RlZmluZSBNQVhXTEQgMTAyNAorI2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5k aWYgLyogcGRwMTEgKi8KKyNlbmRpZiAvKiBQUk9WWDEgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisj ZGVmaW5lIE1BWFdMRCAxMDI0MDAJCQkvKiBNYXhpbXVtIHdpbGRjYXJkIGZpbGVuYW1lcyAqLwor I2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2RlZmluZSBNQVhXTEQgNTAwCisjZWxzZQorI2lm ZGVmIFNUUkFUVVMKKyNkZWZpbmUgTUFYV0xEIDUwMDAKKyNlbmRpZiAvKiBTVFJBVFVTICovCisj ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklY ICovCisKKyNpZmRlZiBWTVMKKyNkZWZpbmUgREJMS1NJWiA1MTIKKyNkZWZpbmUgRExSRUNMIDUx MgorI2Vsc2UKKyNkZWZpbmUgREJMS1NJWiAwCisjZGVmaW5lIERMUkVDTCAwCisjZW5kaWYgLyog Vk1TICovCisKKy8qIENvbW11bmljYXRpb24gZGV2aWNlIC8gbmV0d29yayBob3N0IG5hbWUgbGVu Z3RoICovCisKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBUVE5BTUxFTiA1MTIKKyNlbHNlCisj aWZkZWYgTUFDCisjZGVmaW5lIFRUTkFNTEVOIDI1NgorI2Vsc2UKKyNpZm5kZWYgQ0tfU01BTEwK KyNkZWZpbmUgVFROQU1MRU4gMTI4CisjZWxzZQorI2RlZmluZSBUVE5BTUxFTiA4MAorI2VuZGlm IC8qIENLX1NNQUxMICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogQklHQlVGT0sgKi8K KworLyogUHJvZ3JhbSByZXR1cm4gY29kZXMgZm9yIERFQ1VTIEMgYW5kIFVOSVggKFZNUyB1c2Vz IFVOSVggY29kZXMpICovCisKKyNpZmRlZiBkZWN1cworI2RlZmluZSBHT09EX0VYSVQgICBJT19O T1JNQUwKKyNkZWZpbmUgQkFEX0VYSVQgICAgSU9fRVJST1IKKyNlbHNlCisjZGVmaW5lIEdPT0Rf RVhJVCAgIDAKKyNkZWZpbmUgQkFEX0VYSVQgICAgMQorI2VuZGlmIC8qIGRlY3VzICovCisKKy8q IFNwZWNpYWwgaGFjayBmb3IgRm9ydHVuZSwgd2hpY2ggZG9lc24ndCBoYXZlIDxzeXMvZmlsZS5o Pi4uLiAqLworCisjaWZkZWYgRlQxOAorI2RlZmluZSBGUkVBRCAweDAxCisjZGVmaW5lIEZXUklU RSAweDEwCisjZW5kaWYgLyogRlQxOCAqLworCisvKiBTcGVjaWFsIGhhY2sgZm9yIE9TLTkvNjhr ICovCisjaWZkZWYgT1NLCisjaWZuZGVmIF9VQ0MKKyNkZWZpbmUgU0lHQUxSTSAzMAkJCS8qIE1h eSBhbHdheXMgY2FuY2VsIEkvTyAqLworI2VuZGlmIC8qIF9VQ0MgKi8KKyNkZWZpbmUgU0lHQVJC CTEyMzQJCQkvKiBBcmJpdHJhcnkgZm9yIEkvTyAqLworU0lHVFlQICgqc2lnbmFsKCkpKCk7Cisj ZW5kaWYgLyogT1NLICovCisKKyNpZmRlZiBNSU5JWAorI2lmZGVmIHB1dGNoYXIKKyN1bmRlZiBw dXRjaGFyCisjZW5kaWYgLyogcHV0Y2hhciAqLworI2RlZmluZSBwdXRjaGFyKGMpIChwdXRjKGMs c3Rkb3V0KSE9RU9GKSYmZmZsdXNoKHN0ZG91dCkKKyNlbmRpZiAvKiBNSU5JWCAqLworCisjaWZk ZWYgZGF0YWdlbmVyYWwJCQkvKiBEYXRhIEdlbmVyYWwgQU9TL1ZTICovCisjaWZkZWYgcHV0Y2hh cgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICovCisjZGVmaW5lIHB1dGNoYXIo YykgY29ub2MoYykKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisvKiBFc2NhcGUvcXVvdGUg Y2hhcmFjdGVyIHVzZWQgYnkgdGhlIGNvbW1hbmQgcGFyc2VyICovCisKKyNkZWZpbmUgQ01EUSAn XFwnCisKKy8qIFN5bWJvbHMgZm9yIFJTLTIzMiBtb2RlbSBzaWduYWxzICovCisKKyNkZWZpbmUg S01fRkcgICAgMQkJCS8qIEZyYW1lIGdyb3VuZCAqLworI2RlZmluZSBLTV9UWEQgICAyCQkJLyog VHJhbnNtaXQgKi8KKyNkZWZpbmUgS01fUlhEICAgMwkJCS8qIFJlY2VpdmUgKi8KKyNkZWZpbmUg S01fUlRTICAgNAkJCS8qIFJlcXVlc3QgdG8gU2VuZCAqLworI2RlZmluZSBLTV9DVFMgICA1CQkJ LyogQ2xlYXIgdG8gU2VuZCAqLworI2RlZmluZSBLTV9EU1IgICA2CQkJLyogRGF0YSBTZXQgUmVh ZHkgKi8KKyNkZWZpbmUgS01fU0cgICAgNwkJCS8qIFNpZ25hbCBncm91bmQgKi8KKyNkZWZpbmUg S01fRENEICAgOAkJCS8qIENhcnJpZXIgRGV0ZWN0ICovCisjZGVmaW5lIEtNX0RUUiAgMjAJCQkv KiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCisjZGVmaW5lIEtNX1JJICAgMjIJCQkvKiBSaW5nIElu ZGljYXRpb24gKi8KKworLyogQml0IG1hc2sgdmFsdWVzIGZvciBtb2RlbSBzaWduYWxzICovCisK KyNkZWZpbmUgQk1fQ1RTICAgMDAwMQkJCS8qIENsZWFyIHRvIHNlbmQgICAgICAgKEZyb20gRENF KSAqLworI2RlZmluZSBCTV9EU1IgICAwMDAyCQkJLyogRGF0YXNldCByZWFkeSAgICAgICAoRnJv bSBEQ0UpICovCisjZGVmaW5lIEJNX0RDRCAgIDAwMDQJCQkvKiBDYXJyaWVyICAgICAgICAgICAg IChGcm9tIERDRSkgKi8KKyNkZWZpbmUgQk1fUk5HICAgMDAxMAkJCS8qIFJpbmcgSW5kaWNhdG9y ICAgICAgKEZyb20gRENFKSAqLworI2RlZmluZSBCTV9EVFIgICAwMDIwCQkJLyogRGF0YSBUZXJt aW5hbCBSZWFkeSAoRnJvbSBEVEUpICovCisjZGVmaW5lIEJNX1JUUyAgIDAwNDAJCQkvKiBSZXF1 ZXN0IHRvIFNlbmQgICAgIChGcm9tIERURSkgKi8KKworLyogQ29kZXMgZm9yIGZ1bGwgZHVwbGV4 IGZsb3cgY29udHJvbCAqLworCisjZGVmaW5lIEZMT19OT05FIDAJCQkvKiBOb25lICovCisjZGVm aW5lIEZMT19YT05YIDEJCQkvKiBYb24vWG9mZiAoc29mdCkgKi8KKyNkZWZpbmUgRkxPX1JUU0Mg MgkJCS8qIFJUUy9DVFMgKGhhcmQpICovCisjZGVmaW5lIEZMT19EVFJDIDMJCQkvKiBEVFIvQ0Qg KGhhcmQpICovCisjZGVmaW5lIEZMT19FVFhBIDQJCQkvKiBFVFgvQUNLIChzb2Z0KSAqLworI2Rl ZmluZSBGTE9fU1RSRyA1CQkJLyogU3RyaW5nLWJhc2VkIChzb2Z0KSAqLworI2RlZmluZSBGTE9f RElBTCA2CQkJLyogRElBTGluZyBrbHVkZ2UgKi8KKyNkZWZpbmUgRkxPX0RJQVggNwkJCS8qIENh bmNlbCBkaWFsaW5nIGtsdWRnZSAqLworI2RlZmluZSBGTE9fRFRSVCA4CQkJLyogRFRSL0NUUyAo aGFyZCkgKi8KKyNkZWZpbmUgRkxPX0tFRVAgOQkJCS8qIEtlZXAsIGkuZS4gZG9uJ3QgdG91Y2gg b3IgY2hhbmdlICovCisjZGVmaW5lIEZMT19BVVRPIDEwCQkJLyogRmlndXJlIG91dCBhdXRvbWF0 aWNhbGx5ICovCisKKy8qIFR5cGVzIG9mIGNvbm5lY3Rpb25zICovCisKKyNkZWZpbmUgQ1hUX1JF TU9URSAgMAkJCS8qIFJlbW90ZSBtb2RlIC0gbm8gY29ubmVjdGlvbiAqLworI2RlZmluZSBDWFRf RElSRUNUICAxCQkJLyogRGlyZWN0IHNlcmlhbCBjb25uZWN0aW9uICovCisjZGVmaW5lIENYVF9N T0RFTSAgIDIJCQkvKiBNb2RlbSBkaWFsb3V0ICovCisjZGVmaW5lIENYVF9UQ1BJUCAgIDMJCQkv KiBUQ1AvSVAgLSBUZWxuZXQsIFJsb2dpbiwgZXRjICovCisjZGVmaW5lIENYVF9YMjUgICAgIDQJ CQkvKiBYLjI1IHBlZXItdG8tcGVlciAqLworI2RlZmluZSBDWFRfREVDTkVUICA1CQkJLyogREVD bmV0IChDVEVSTSwgZXRjKSAqLworI2RlZmluZSBDWFRfTEFUICAgICA2CQkJLyogTEFUICovCisj ZGVmaW5lIENYVF9ORVRCSU9TIDcJCQkvKiBORVRCSU9TICovCisjZGVmaW5lIENYVF9OUElQRSAg IDgJCQkvKiBOYW1lZCBQaXBlICovCisjZGVmaW5lIENYVF9QSVBFICAgIDkJCQkvKiBQaXBlLCBD b21tYW5kLCBQVFksIERMTCwgZXRjICovCisjZGVmaW5lIENYVF9TU0ggICAgIDEwICAgICAgICAg ICAgICAgICAgLyogU1NIICovCisjZGVmaW5lIENYVF9NQVggICAgIDEwCQkJLyogSGlnaGVzdCBj b25uZWN0aW9uIHR5cGUgKi8KKworLyogQXV0b2Rvd25sb2FkIERldGVjdGlvbiBPcHRpb25zICov CisKKyNkZWZpbmUgQURMX1BBQ0sgMAkJCS8qIEF1dG8tRG93bmxvYWQgZGV0ZWN0IHBhY2tldCAq LworI2RlZmluZSBBRExfU1RSICAxCQkJLyogQXV0by1Eb3dubG9hZCBkZXRlY3Qgc3RyaW5nICov CisKKy8qIEFuZCBmaW5hbGx5Li4uICovCisKKyNpZmRlZiBDT01NRU5UCQkJCS8qIE1ha2Ugc3Vy ZSB0aGlzIGlzIE5PVCBkZWZpbmVkISAqLworI3VuZGVmIENPTU1FTlQKKyNlbmRpZiAvKiBDT01N RU5UICovCisKKy8qIHpzdHIgemF0dHIgZmlsaW5mbyB3ZXJlIGhlcmUgKG1vdmVkIHRvIHRvcCBm b3IgREVDQyA1IEp1biAyMDAwKSAqLworCisjaWZuZGVmIFpGTlFGUAkJCQkvKiBWZXJzaW9ucyB0 aGF0IGhhdmUgemZucWZwKCkgKi8KKyNpZmRlZiBVTklYCisjZGVmaW5lIFpGTlFGUAorI2Vsc2UK KyNpZmRlZiBWTVMKKyNkZWZpbmUgWkZOUUZQCisjZWxzZQorI2lmZGVmIE9TMgorI2RlZmluZSBa Rk5RRlAKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNkZWZpbmUgWkZOUUZQCisjZWxzZQor I2lmZGVmIFNUUkFUVVMKKyNkZWZpbmUgWkZOUUZQCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICov CisjZW5kaWYgLyogVU5JWCAqLworc3RydWN0IHpmbmZwIHsKKyAgIGludCBsZW47CQkJCS8qIExl bmd0aCBvZiBmdWxsIHBhdGhuYW1lICovCisgICBjaGFyICogZnBhdGg7CQkJLyogUG9pbnRlciB0 byBmdWxsIHBhdGhuYW1lICovCisgICBjaGFyICogZm5hbWU7CQkJLyogUG9pbnRlciB0byBuYW1l IHBhcnQgKi8KK307CisjZW5kaWYgLyogWkZOUUZQICovCisKKy8qIFN5c3RlbXMgdGhhdCBzdXBw b3J0IEZJTEUgVFlQRSBMQUJFTEVEICovCisKKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tfTEFCRUxF RAorI2Vsc2UKKyNpZmRlZiBPUzIKKyNpZmRlZiBfXzMyQklUX18KKyNpZm5kZWYgTlQKKyNkZWZp bmUgQ0tfTEFCRUxFRAorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogX18zMkJJVF9fICovCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisKKy8qIExBQkVMRUQgRklMRSBvcHRp b25zIGJpdG1hc2sgKi8KKworI2lmZGVmIFZNUwkJCQkvKiBGb3IgVk1TICovCisjZGVmaW5lIExC TF9OQU0gIDEJCQkvKiBJZ25vcmUgaW5jb21pbmcgbmFtZSBpZiBzZXQgKi8KKyNkZWZpbmUgTEJM X1BUSCAgMgkJCS8qIFVzZSBjb21wbGV0ZSBwYXRoIGlmIHNldCAqLworI2RlZmluZSBMQkxfQUNM ICA0CQkJLyogUHJlc2VydmUgQUNMcyBpZiBzZXQgKi8KKyNkZWZpbmUgTEJMX0JDSyAgOAkJCS8q IFByZXNlcnZlIGJhY2t1cCBkYXRlIGlmIHNldCAqLworI2RlZmluZSBMQkxfT1dOIDE2CQkJLyog UHJlc2VydmUgb3duZXJzaGlwIGlmIHNldCAqLworCisjZWxzZQorCisjaWZkZWYgT1MyCQkJCS8q IERpdHRvIGZvciBPUy8yICovCisjZGVmaW5lIExCTF9OT1IgIDB4MDAwMAkJCS8qIE5vcm1hbCBm aWxlICovCisjZGVmaW5lIExCTF9BUkMgIDB4MDAyMAkJCS8qIEFyY2hpdmUgKi8KKyNkZWZpbmUg TEJMX0RJUiAgMHgwMDEwCQkJLyogRGlyZWN0b3J5ICovCisjZGVmaW5lIExCTF9ISUQgIDB4MDAw MgkJCS8qIEhpZGRlbiBmaWxlICovCisjZGVmaW5lIExCTF9STyAgIDB4MDAwMQkJCS8qIFJlYWQg b25seSBmaWxlICovCisjZGVmaW5lIExCTF9TWVMgIDB4MDAwNAkJCS8qIFN5c3RlbSBmaWxlICov CisjZGVmaW5lIExCTF9FWFQgIDB4MDA0MAkJCS8qIEV4dGVuZGVkICovCisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogVk1TICovCisKKy8qCisgIERhdGEgdHlwZXMuICBGaXJzdCB0aGUgaGVh ZGVyIGZpbGUgZm9yIGRhdGEgdHlwZXMgc28gd2UgY2FuIHBpY2sgdXAgdGhlCisgIHR5cGVzIHVz ZWQgZm9yIHBpZHMsIHVpZHMsIGFuZCBnaWRzLiAgT3ZlcnJpZGUgdGhpcyBzZWN0aW9uIGJ5IHB1 dHRpbmcKKyAgLURDS1RZUF9IPXh4eCBvbiB0aGUgY29tbWFuZCBsaW5lIHRvIHNwZWNpZnkgdGhl IGhlYWRlciBmaWxlIHdoZXJlIHlvdXIKKyAgc3lzdGVtIGRlZmluZXMgdGhlc2UgdHlwZXMuCisq LworI2lmbmRlZiBTVFJBVFVTCisjaWZkZWYgX19BTFBIQQorI2lmZGVmIE1VTFRJTkVUCisjZGVm aW5lIENLX1RHVl9BWFAKKyNlbmRpZiAvKiBNVUxUSU5FVCAqLworI2VuZGlmIC8qIF9fQUxQSEEg Ki8KKworI2lmZGVmIENLX1RHVl9BWFAJCQkvKiBBbHBoYSwgVk1TLCBNdWx0aU5ldCAqLworLyoK KyAgU3RhcnRpbmcgaW4gREVDQyA1LjAsIDxzdGRsaWIuaD4gbm8gbG9uZ2VyIGluY2x1ZGVzIDx0 eXBlcy5oPi4KKyAgQnV0IGJlZm9yZSB0aGF0IGFuIGVsYWJvcmF0ZSB3b3JrYXJvdW5kIGlzIHJl cXVpcmVkLCB3aGljaCByZXN1bHRzIGluCisgIGluY2x1ZGluZyA8dHlwZXMuaD4gc29tZXRpbWVz IGJ1dCBub3Qgb3RoZXJzLCBldmlkZW50bHkgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAgPHR5cGVz Lmg+IHByb3RlY3RzIGl0c2VsZiBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbiwgd2hpY2ggaW4g dHVybiBwcm9iYWJseQorICBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIERFQ0MgPHR5cGVzLmg+IGFu ZCBUR1YgPHR5cGVzLmg+LiAgVW5mb3J0dW5hdGVseSBJCisgIGRvbid0IHJlbWVtYmVyIHRoZSBk ZXRhaWxzLiAgKGZkYywgMjUgT2N0IDk2KQorKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBQcmV2 aW91c2x5IHRoZSB0ZXN0IGhlcmUgd2FzIGZvciBERUMgdmVyc2lvbiBwcmlvciB0byA0LjAsIGJ1 dCBzaW5jZSB0aGUKKyAgdGVzdCBpbnZvbHZlZCBhbiAiI2lmIiBzdGF0ZW1lbnQsIGl0IHdhcyBu b3QgcG9ydGFibGUgYW5kIGJyb2tlIHNvbWUgbm9uLVZNUworICBidWlsZHMuICBJbiBhbnkgY2Fz ZSwgY29uZGl0aW9uIHdhcyBuZXZlciBzYXRpc2ZpZWQsIHNvIHRoZSByZXN1bHQgb2YKKyAgY29t bWVudGluZyB0aGlzIHNlY3Rpb24gb3V0IGlzIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyAiI2lm IiBjb25kaXRpb24uCisqLworI2lmbmRlZiBfX1RZUEVTX0xPQURFRAorI2RlZmluZSBfX1RZUEVT X0xPQURFRAkJCS8qIFdvcmsgYXJvdW5kIGJ1ZyBpbiAuaCBmaWxlcyAqLworI2VuZGlmIC8qIF9f VFlQRVNfTE9BREVEICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2lmZGVmIElGX0RPVF9ICisjaWZuZGVmIE1VTFRJTkVUCisjaW5jbHVkZSA8aWYuaD4J CQkJLyogTmVlZGVkIHRvIHB1dCB1cCB1X2ludCB0eXBlZGVmICovCisjZW5kaWYgLyogTVVMVElO RVQgKi8KKyNlbHNlIC8qIElGX0RPVF9IICovCisjaWZkZWYgTkVFRFVJTlQKK3R5cGVkZWYgdW5z aWduZWQgaW50IHVfaW50OworI2VuZGlmIC8qIE5FRURVSU5UICovCisjZW5kaWYgLyogSUZfRE9U X0ggKi8KKyNlbHNlCQkJCQkvKiAhQ0tfVEdWX0FYUCAqLworI2lmZGVmIE9TSwkJCQkvKiBPUy05 ICovCisjaW5jbHVkZSA8dHlwZXMuaD4KKyNlbHNlCQkJCQkvKiBHZW5lcmFsIGNhc2UsIG5vdCBP Uy05ICovCisjaWZuZGVmIENLVFlQX0gKKyNpZm5kZWYgVk1TCisjaWZuZGVmIE1BQworI2lmbmRl ZiBBTUlHQQorI2RlZmluZSBDS1RZUF9IIDxzeXMvdHlwZXMuaD4KKyNlbmRpZiAvKiBBTUlHQSAq LworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLVFlQX0gg Ki8KKworI2lmZGVmIEdFTURPUworI3VuZGVmIENLVFlQX0gKKyNpbmNsdWRlIDx0eXBlcy5oPgor I2VuZGlmIC8qIEdFTURPUyAqLworCisjaWZkZWYgT1MyCisjdW5kZWYgQ0tUWVBfSAorI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tUWVBfSAkJCQkv KiBJbmNsdWRlIGl0LiAqLworI2lmZGVmIENPSEVSRU5UCQkJCS8qIEV4Y2VwdCBmb3IgQ09IRVJF TlQgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbHNl CisjaWZkZWYgZGF0YWdlbmVyYWwJCQkvKiBBT1MvVlMgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KKyNlbHNlICAvKiBBbGwgb3RoZXJzICovCisjaWZkZWYgX19ic2RpX18JCQkJLyogQlNESSAq LworI2lmZGVmIFBPU0lYCisjdW5kZWYgX1BPU0lYX1NPVVJDRQorI2VuZGlmIC8qIFBPU0lYICov CisjZW5kaWYgLyogX19ic2RpX18gKi8KKyNpbmNsdWRlIENLVFlQX0gKKyNpZmRlZiBfX2JzZGlf XworI2lmZGVmIFBPU0lYCisjZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZiAvKiBQT1NJWCAq LworI2VuZGlmIC8qIF9fYnNkaV9fICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRp ZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIENLVFlQX0ggKi8KKworI2VuZGlmIC8qIE9TSyAq LworI2VuZGlmIC8qIENLX1RHVl9BWFAgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCQkJLyogRW5k IG9mIHR5cGVzLmggc2VjdGlvbiAqLworCisvKgorICBGaWxlIGxlbmd0aHMgYW5kIG9mZnNldHMu ICBUaGlzIHNlY3Rpb24gaXMgZXhwZWN0ZWQgdG8gZ3JvdyBhcyB3ZQorICBzdXBwb3J0IGxvbmcg ZmlsZXMgb24gMzItYml0IHBsYXRmb3Jtcy4gIFdlIHdhbnQgdGhpcyBkYXRhIHR5cGUgdG8gYmUK KyAgc2lnbmVkIGJlY2F1c2Ugc28gbWFueSBmdW5jdGlvbnMgcmV0dXJuIGVpdGhlciBhIGZpbGUg c2l6ZSBvciBhIG5lZ2F0aXZlCisgIHZhbHVlIHRvIGluZGljYXRlIGFuIGVycm9yLgorKi8KKyNp Zm5kZWYgQ0tfT0ZGX1QKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorI2RlZmluZSBDS19PRkZfVCBf X2ludDY0CisjZWxzZQorI2RlZmluZSBDS19PRkZfVCBsb25nCisjZW5kaWYgIC8qIE5UICovCisj ZW5kaWYJLyogT1MyICovCisjZW5kaWYJLyogQ0tfT0ZGX1QgKi8KKworLyogRnJlZUJTRCBhbmQg T3BlbkJTRCBzZXQgb2ZmX3QgdG8gdGhlIGFwcHJvcHJpYXRlIHNpemUgdW5jb25kaXRpb25hbGx5 ICovCisKKyNpZm5kZWYgQ0tfT0ZGX1QKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2RlZmluZSBDS19P RkZfVCBvZmZfdAorI2Vsc2UKKyNpZmRlZiBfX09wZW5CU0RfXworI2RlZmluZSBDS19PRkZfVCBv ZmZfdAorI2VuZGlmCS8qIF9fT3BlbkJTRF9fICovCisjZW5kaWYJLyogX19GcmVlQlNEX18gKi8K KyNlbmRpZgkvKiBDS19PRkZfVCAqLworCisvKiAzMi1iaXQgcGxhdGZvcm1zIHRoYXQgc3VwcG9y dCBsb25nIGZpbGVzIHRocnUgInRyYW5zaXRpb25hbCBpbnRlcmZhY2UiICovCisvKiBUaGVzZSBp bmNsdWRlIExpbnV4LCBTb2xhcmlzLCBOZXRCU0QuLi4gKi8KKworI2lmZGVmIEFJWFJTCisjaWZk ZWYgX0xBUkdFX0ZJTEVTCisjaWZuZGVmIENLX09GRl9UCisjZGVmaW5lIENLX09GRl9UIG9mZl90 CisjZW5kaWYJLyogQ0tfT0ZGX1QgKi8KKyNlbmRpZgkvKiBfTEFSR0VfRklMRVMgKi8KKyNlbmRp ZgkvKiBBSVhSUyAqLworCisjaWZkZWYgX0xBUkdFRklMRV9TT1VSQ0UKKyNpZm5kZWYgQ0tfT0ZG X1QKKyNkZWZpbmUgQ0tfT0ZGX1Qgb2ZmX3QKKyNlbmRpZgkvKiBDS19PRkZfVCAqLworI2lmZGVm IElSSVgKKyNkZWZpbmUgQ0tGU0VFSyhhLGIsYykgZnNlZWs2NChhLGIsYykKKyNkZWZpbmUgQ0tG VEVMTChhKSBmdGVsbDY0KGEpCisjZWxzZSAvKiBJUklYICovCisjZGVmaW5lIENLRlNFRUsoYSxi LGMpIGZzZWVrbyhhLGIsYykKKyNkZWZpbmUgQ0tGVEVMTChhKSBmdGVsbG8oYSkKKyNlbmRpZgkv KiBJUklYICovCisjZWxzZSAgLyogTm90ICBfTEFSR0VGSUxFX1NPVVJDRSAqLworI2RlZmluZSBD S0ZTRUVLKGEsYixjKSBmc2VlayhhLGIsYykKKyNkZWZpbmUgQ0tGVEVMTChhKSBmdGVsbChhKQor LyogU2VlIGJlbG93IHRoZSBuZXh0IHNlY3Rpb24gZm9yIHRoZSBjYXRjaC1hbGwgY2FzZSAqLwor I2VuZGlmCS8qIF9MQVJHRUZJTEVfU09VUkNFICovCisKKy8qIDMyLWJpdCBvciA2NC1iaXQgcGxh dGZvcm1zICovCisKKy8qIENLXzY0QklUIGlzIGEgY29tcGlsZS10aW1lIHN5bWJvbCBpbmRpY2F0 aW5nIGEgdHJ1ZSA2NC1iaXQgYnVpbGQgKi8KKy8qIG1lYW5pbmcgdGhhdCBsb25ncyBhbmQgcG9p bnRlcnMgYXJlIDY0IGJpdHMgKi8KKworI2lmbmRlZiBWTVMJCQkJLyogVk1TIEFscGhhIGFuZCBJ QTY0IGFyZSAzMi1iaXQhICovCisjaWZuZGVmIENLXzY0QklUCisjaWZkZWYgX0xQNjQJCQkJLyog U29sYXJpcyAqLworI2RlZmluZSBDS182NEJJVAorI2Vsc2UKKyNpZmRlZiBfX0xQNjRfXwkJCQkv KiBNYWNPUyBYIDEwLjQgKG9yIF9MUDY0LF9fcHBjNjRfXykgKi8KKyNkZWZpbmUgQ0tfNjRCSVQK KyNlbHNlCisjaWZkZWYgX19hcmNoNjRfXwkJCS8qIGdjYyBhbHBoYSwgc3BhcmMgKi8KKyNkZWZp bmUgQ0tfNjRCSVQKKyNlbHNlCisjaWZkZWYgX19hbHBoYQkJCQkvKiBBbHBoYSBkZWNjIChvciBf X0FMUEhBKSAqLworI2RlZmluZSBDS182NEJJVAorI2Vsc2UKKyNpZmRlZiBfX2FtZDY0CQkJCS8q IEFNRCB4ODZfNjQgKG9yIF9feDg2XzY0KSAqLworI2RlZmluZSBDS182NEJJVAorI2Vsc2UKKyNp ZmRlZiBfX2lhNjQJCQkJLyogSW50ZWwgSUE2NCAqLworI2lmbmRlZiBIUFVYCisjZGVmaW5lIENL XzY0QklUCisjZW5kaWYJLyogSFBVWCAqLworI2VuZGlmCS8qIF9faWE2NCAqLworI2VuZGlmCS8q IF9fYW1kNjQgKi8KKyNlbmRpZgkvKiBfX2FscGhhICovCisjZW5kaWYJLyogX19hcmNoNjRfXyAq LworI2VuZGlmCS8qIF9fTFA2NF9fICovCisjZW5kaWYJLyogX0xQNjQgKi8KKyNlbmRpZgkvKiBD S182NEJJVCAqLworI2VuZGlmCS8qIFZNUyAqLworCisjaWZuZGVmIENLX09GRl9UCisjaWZkZWYg Q0tfNjRCSVQKKyNkZWZpbmUgQ0tfT0ZGX1Qgb2ZmX3QJCQkvKiBUaGlzIGhhcyB0byBiZSBzaWdu ZWQgKi8KKyNlbHNlICAvKiBDS182NEJJVCAqLworI2RlZmluZSBDS19PRkZfVCBsb25nCQkJLyog U2lnbmVkICovCisjZW5kaWYJLyogQ0tfNjRCSVQgKi8KKyNlbmRpZgkvKiBDS19PRkZfVCAqLwor CisjaWZuZGVmIFRMT0cKKyNkZWZpbmUgdGxvZyhhLGIsYyxkKQorI2Vsc2UKKyNpZm5kZWYgQ0tD TUFJCisvKiBEZWJ1Z2dpbmcgaW5jbHVkZWQuICBEZWNsYXJlIGRlYnVnIGxvZyBmbGFnIGluIG1h aW4gcHJvZ3JhbSBvbmx5LiAqLworZXh0ZXJuIGludCB0cmFsb2csIHRsb2dmbXQ7CisjZW5kaWYg LyogQ0tDTUFJICovCitfUFJPVE9UWVAoVk9JRCBkb3Rsb2csKGludCwgY2hhciAqLCBjaGFyICos IENLX09GRl9UKSk7CisjZGVmaW5lIHRsb2coYSxiLGMsZCkgaWYgKHRyYWxvZyAmJiB0bG9nZm10 KSBkb3Rsb2coYSxiLGMsKENLX09GRl9UKWQpCitfUFJPVE9UWVAoVk9JRCBkb3hsb2csKGludCwg Y2hhciAqLCBDS19PRkZfVCwgaW50LCBpbnQsIGNoYXIgKikpOworI2VuZGlmIC8qIFRMT0cgKi8K KworI2lmbmRlZiBERUJVRworLyogQ29tcGlsZSBhbGwgdGhlIGRlYnVnKCkgc3RhdGVtZW50cyBh d2F5LiAgU2F2ZXMgYSBsb3Qgb2Ygc3BhY2UgYW5kIHRpbWUuICovCisjZGVmaW5lIGRlYnVnKGEs YixjLGQpCisjZGVmaW5lIGNraGV4ZHVtcChhLGIsYykKKy8qIE5vdyBkZWZpbmUgdGhlIGRlYnVn KCkgbWFjcm8uICovCisjZWxzZSAvKiBERUJVRyAqLworX1BST1RPVFlQKGludCBkb2RlYnVnLChp bnQsY2hhciAqLGNoYXIgKixDS19PRkZfVCkpOworX1BST1RPVFlQKGludCBkb2hleGR1bXAsKENI QVIgKixDSEFSICosaW50KSk7CisjaWZkZWYgSUZERUJVRworLyogVXNlIHRoaXMgZm9ybSB0byBh dm9pZCBmdW5jdGlvbiBjYWxsczogKi8KKyNpZmRlZiBDT01NRU5UCisjZGVmaW5lIGRlYnVnKGEs YixjLGQpIGlmIChkZWJsb2cpIGRvZGVidWcoYSxiLChjaGFyICopKGMpLChDS19PRkZfVCkoZCkp CisjZGVmaW5lIGNraGV4ZHVtcChhLGIsYykgaWYgKGRlYmxvZykgZG9oZXhkdW1wKChDSEFSICop KGEpLChDSEFSICopKGIpLGMpCisjZWxzZQorI2lmZGVmIENLX0FOU0lDCisjZGVmaW5lIGRlYnVn KGEsYixjLGQpIFwKKygodm9pZCkoZGVibG9nP2RvZGVidWcoYSxiLChjaGFyICopKGMpLChDS19P RkZfVCkoZCkpOjApKQorI2RlZmluZSBja2hleGR1bXAoYSxiLGMpIFwKKygodm9pZCkoZGVibG9n P2RvaGV4ZHVtcCgoQ0hBUiAqKShhKSwoQ0hBUiAqKShiKSxjKTowKSkKKyNlbHNlCisjZGVmaW5l IGRlYnVnKGEsYixjLGQpIChkZWJsb2c/ZG9kZWJ1ZyhhLGIsKGNoYXIgKikoYyksKENLX09GRl9U KShkKSk6MCkKKyNkZWZpbmUgY2toZXhkdW1wKGEsYixjKSAoZGVibG9nP2RvaGV4ZHVtcCgoQ0hB UiAqKShhKSwoQ0hBUiAqKShiKSxjKTowKQorI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworI2Vsc2UgLyogSUZERUJVRyAqLworLyogVXNlIHRoaXMgZm9ybSB0byBz YXZlIHNwYWNlOiAqLworI2RlZmluZSBkZWJ1ZyhhLGIsYyxkKSBkb2RlYnVnKGEsYiwoY2hhciAq KShjKSwoQ0tfT0ZGX1QpKGQpKQorI2RlZmluZSBja2hleGR1bXAoYSxiLGMpIGRvaGV4ZHVtcCgo Q0hBUiAqKShhKSwoQ0hBUiAqKShiKSxjKQorI2VuZGlmIC8qIElGREVCVUcgKi8KKyNlbmRpZiAv KiBERUJVRyAqLworCisKKy8qIFN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgS2VybWl0IGZpbGUg YXR0cmlidXRlcyAqLworLyogQWxsIHN0cmluZ3MgY29tZSBhcyBwb2ludGVyIGFuZCBsZW5ndGgg Y29tYmluYXRpb25zICovCisvKiBFbXB0eSBzdHJpbmcgKG9yIGZvciBudW1lcmljIHZhcmlhYmxl cywgLTEpID0gdW51c2VkIGF0dHJpYnV0ZS4gKi8KKworc3RydWN0IHpzdHIgeyAgICAgICAgICAg ICAvKiBzdHJpbmcgZm9ybWF0ICovCisgICAgaW50IGxlbjsJICAgICAgICAgIC8qIGxlbmd0aCAq LworICAgIGNoYXIgKnZhbDsgICAgICAgICAgICAvKiB2YWx1ZSAqLworfTsKKworc3RydWN0IHph dHRyIHsgICAgICAgICAgICAvKiBLZXJtaXQgRmlsZSBBdHRyaWJ1dGUgc3RydWN0dXJlICovCisg ICAgQ0tfT0ZGX1QgbGVuZ3RoazsJICAvKiAoISkgZmlsZSBsZW5ndGggaW4gSyAqLworICAgIHN0 cnVjdCB6c3RyIHR5cGU7ICAgICAvKiAoIikgZmlsZSB0eXBlICh0ZXh0IG9yIGJpbmFyeSkgKi8K KyAgICBzdHJ1Y3QgenN0ciBkYXRlOyAgICAgLyogKCMpIGZpbGUgY3JlYXRpb24gZGF0ZSB5eXl5 bW1kZFsgaGg6bW1bOnNzXV0gKi8KKyAgICBzdHJ1Y3QgenN0ciBjcmVhdG9yOyAgLyogKCQpIGZp bGUgY3JlYXRvciBpZCAqLworICAgIHN0cnVjdCB6c3RyIGFjY291bnQ7ICAvKiAoJSkgZmlsZSBh Y2NvdW50ICovCisgICAgc3RydWN0IHpzdHIgYXJlYTsgICAgIC8qICgmKSBhcmVhIChlLmcuIGRp cmVjdG9yeSkgZm9yIGZpbGUgKi8KKyAgICBzdHJ1Y3QgenN0ciBwYXNzd29yZDsgLyogKCcpIHBh c3N3b3JkIGZvciBhcmVhICovCisgICAgbG9uZyBibGtzaXplOyAgICAgICAgIC8qICgoKSBmaWxl IGJsb2Nrc2l6ZSAqLworICAgIHN0cnVjdCB6c3RyIHhhY2Nlc3M7ICAvKiAoKSkgZmlsZSBhY2Nl c3M6IG5ldywgc3VwZXJzZWRlLCBhcHBlbmQsIHdhcm4gKi8KKyAgICBzdHJ1Y3QgenN0ciBlbmNv ZGluZzsgLyogKCopIGVuY29kaW5nICh0cmFuc2ZlciBzeW50YXgpICovCisgICAgc3RydWN0IHpz dHIgZGlzcDsgICAgIC8qICgrKSBkaXNwb3NpdGlvbiAobWFpbCwgbWVzc2FnZSwgcHJpbnQsIGV0 YykgKi8KKyAgICBzdHJ1Y3QgenN0ciBscHJvdGVjdDsgLyogKCwpIHByb3RlY3Rpb24gKGxvY2Fs IHN5bnRheCkgKi8KKyAgICBzdHJ1Y3QgenN0ciBncHJvdGVjdDsgLyogKC0pIHByb3RlY3Rpb24g KGdlbmVyaWMgc3ludGF4KSAqLworICAgIHN0cnVjdCB6c3RyIHN5c3RlbWlkOyAvKiAoLikgSUQg Zm9yIHN5c3RlbSBvZiBvcmlnaW4gKi8KKyAgICBzdHJ1Y3QgenN0ciByZWNmbTsgICAgLyogKC8p IHJlY29yZCBmb3JtYXQgKi8KKyAgICBzdHJ1Y3QgenN0ciBzeXNwYXJhbTsgLyogKDApIHN5c3Rl bS1kZXBlbmRlbnQgcGFyYW1ldGVyIHN0cmluZyAqLworICAgIENLX09GRl9UIGxlbmd0aDsgICAg ICAvKiAoMSkgZXhhY3QgbGVuZ3RoIG9uIHN5c3RlbSBvZiBvcmlnaW4gKi8KKyAgICBzdHJ1Y3Qg enN0ciBjaGFyc2V0OyAgLyogKDIpIHRyYW5zZmVyIHN5bnRheCBjaGFyYWN0ZXIgc2V0ICovCisj aWZkZWYgT1MyCisgICAgc3RydWN0IHpzdHIgbG9uZ25hbWU7IC8qIE9TLzIgbG9uZ25hbWUgaWYg YXBwbGljYWJsZSAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHN0cnVjdCB6c3RyIHJlcGx5OyAg ICAvKiBUaGlzIGdvZXMgbGFzdCwgdXNlZCBmb3IgYXR0cmlidXRlIHJlcGx5ICovCit9OworCisv KiBLZXJtaXQgZmlsZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KKworc3RydWN0IGZpbGluZm8g eworICBpbnQgYnM7CQkJCS8qIEJsb2Nrc2l6ZSAqLworICBpbnQgY3M7CQkJCS8qIENoYXJhY3Rl ciBzZXQgKi8KKyAgbG9uZyBybDsJCQkJLyogUmVjb3JkIGxlbmd0aCAqLworICBpbnQgb3JnOwkJ CQkvKiBPcmdhbml6YXRpb24gKi8KKyAgaW50IGZtdDsJCQkJLyogUmVjb3JkIGZvcm1hdCAqLwor ICBpbnQgY2M7CQkJCS8qIENhcnJpYWdlIGNvbnRyb2wgKi8KKyAgaW50IHR5cDsJCQkJLyogVHlw ZSAodGV4dC9iaW5hcnkpICovCisgIGludCBkc3A7CQkJCS8qIERpc3Bvc2l0aW9uICovCisgIGNo YXIgKm9zX3NwZWNpZmljOwkJCS8qIE9TLXNwZWNpZmljIGF0dHJpYnV0ZXMgKi8KKyNpZmRlZiBP UzIKKyAgdW5zaWduZWQgbG9uZyBpbnQgbGJsb3B0czsJCS8qIExBQkVMRUQgRklMRSBvcHRpb25z IGJpdG1hc2sgKi8KKyNlbHNlCisgIGludCBsYmxvcHRzOworI2VuZGlmIC8qIE9TMiAqLworfTsK KworCisvKgorICBEYXRhIHR5cGUgZm9yIHBpZHMuICBJZiB5b3VyIHN5c3RlbSB1c2VzIGEgZGlm ZmVyZW50IHR5cGUsIHB1dCBzb21ldGhpbmcKKyAgbGlrZSAtRFBJRF9UPXBpZF90IG9uIGNvbW1h bmQgbGluZSwgb3Igb3ZlcnJpZGUgaGVyZS4KKyovCisjaWZuZGVmIFBJRF9UCisjZGVmaW5lIFBJ RF9UIGludAorI2VuZGlmIC8qIFBJRF9UICovCisvKgorICBEYXRhIHR5cGVzIGZvciB1aWRzIGFu ZCBnaWRzLiAgU2FtZSBkZWFsIGFzIGZvciBwaWRzLgorICBXb3VsZG4ndCBiZSBuaWNlIGlmIHRo ZXJlIHdhcyBhIHByZXByb2Nlc3NvciB0ZXN0IHRvIGZpbmQgb3V0IGlmIGEKKyAgdHlwZWRlZiBl eGlzdGVkPworKi8KKyNpZmRlZiBWTVMKKy8qIE5vdCB1c2VkIGluIFZNUyBzbyB3aG8gY2FyZXMg Ki8KKyNkZWZpbmUgVUlEX1QgaW50CisjZGVmaW5lIEdJRF9UIGludAorI2VuZGlmIC8qIFZNUyAq LworCisjaWZkZWYgUE9TSVgKKy8qIE9yIHdvdWxkIGl0IGJlIGJldHRlciAob3Igd29yc2U/KSB0 byB1c2UgX1BPU0lYX1NPVVJDRSBoZXJlPyAqLworI2lmbmRlZiBVSURfVAorI2RlZmluZSBVSURf VCB1aWRfdAorI2VuZGlmIC8qIFVJRF9UICovCisjaWZuZGVmIEdJRF9UCisjZGVmaW5lIEdJRF9U IGdpZF90CisjZW5kaWYgLyogR0lEX1QgKi8KKyNlbHNlIC8qIE5vdCBQT1NJWCAqLworI2lmZGVm IFNWUjQKKy8qIFNWUjQgYW5kIGxhdGVyIGhhdmUgdWlkX3QgYW5kIGdpZF90LiAqLworLyogU1ZS MyBhbmQgZWFybGllciB1c2UgaW50LCBvciB1bnNpZ25lZCBzaG9ydCwgb3IuLi4uICovCisjaWZu ZGVmIFVJRF9UCisjZGVmaW5lIFVJRF9UIHVpZF90CisjZW5kaWYgLyogVUlEX1QgKi8KKyNpZm5k ZWYgR0lEX1QKKyNkZWZpbmUgR0lEX1QgZ2lkX3QKKyNlbmRpZiAvKiBHSURfVCAqLworI2Vsc2Ug LyogTm90IFNWUjQgKi8KKyNpZmRlZiBCU0Q0MworI2lmbmRlZiBVSURfVAorI2RlZmluZSBVSURf VCB1aWRfdAorI2VuZGlmIC8qIFVJRF9UICovCisjaWZuZGVmIEdJRF9UCisjZGVmaW5lIEdJRF9U IGdpZF90CisjZW5kaWYgLyogR0lEX1QgKi8KKyNlbHNlIC8qIE5vdCBCU0Q0MyAqLworLyogRGVm YXVsdCB0aGVzZSB0byBpbnQgZm9yIG9sZGVyIFVOSVggdmVyc2lvbnMgKi8KKyNpZm5kZWYgVUlE X1QKKyNkZWZpbmUgVUlEX1QgaW50CisjZW5kaWYgLyogVUlEX1QgKi8KKyNpZm5kZWYgR0lEX1QK KyNkZWZpbmUgR0lEX1QgaW50CisjZW5kaWYgLyogR0lEX1QgKi8KKyNlbmRpZiAvKiBCU0Q0MyAq LworI2VuZGlmIC8qIFNWUjQgICovCisjZW5kaWYgLyogUE9TSVggKi8KKworLyoKKyAgZ2V0cHd1 aWQoKSBhcmcgdHlwZSwgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIFVJRF9U LAorICBlLmcuIGluIFNDTyBVTklYIFNWUjMsIGl0J3MgaW50LgorKi8KKyNpZm5kZWYgUFdJRF9U CisjZGVmaW5lIFBXSURfVCBVSURfVAorI2VuZGlmIC8qIFBXSURfVCAqLworCisjaWZkZWYgQ0tf UkVESVIKKyNpZmRlZiBORVhUCisjZGVmaW5lIE1BQ0hXQUlUCisjZWxzZQorI2lmZGVmIE1BQ0gK KyNkZWZpbmUgTUFDSFdBSVQKKyNlbmRpZiAvKiBNQUNIICovCisjZW5kaWYgLyogTkVYVCAqLwor CisjaWZkZWYgTUFDSFdBSVQJCQkJLyogV0FJVF9UIGFyZ3VtZW50IGZvciB3YWl0KCkgKi8KKyNp bmNsdWRlIDxzeXMvd2FpdC5oPgorI2RlZmluZSBDS19XQUlUX0gKK3R5cGVkZWYgdW5pb24gd2Fp dCBXQUlUX1Q7CisjZWxzZQorI2lmZGVmIFBPU0lYCisjaWZkZWYgT1NGCisvKiBPU0Ygd2FpdC5o IGRlZmluZXMgQlNEIHdhaXQgaWYgX0JTRCBpcyBkZWZpbmVkIHNvICBoaWRlIF9CU0QgZnJvbSB3 YWl0LmggKi8KKyNpZmRlZiBfQlNECisjZGVmaW5lIENLX09TRl9CU0QKKyN1bmRlZiAgX0JTRAor I2VuZGlmIC8qIF9CU0QgKi8KKyNlbmRpZiAvKiBPU0YgKi8KKyNpbmNsdWRlIDxzeXMvd2FpdC5o PgorI2RlZmluZSBDS19XQUlUX0gKKyNpZm5kZWYgV0FJVF9UCit0eXBlZGVmIGludCBXQUlUX1Q7 CisjZW5kaWYgLyogV0FJVF9UICovCisjaWZkZWYgQ0tfT1NGX0JTRAkJCS8qIE9TRi8xOiBSZXN0 b3JlICBfQlNEIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgX0JTRAorI3VuZGVmIENLX09TRl9CU0QK KyNlbmRpZiAvKiBDS19PU0ZfQlNEICovCisjZWxzZSAvKiAhUE9TSVggKi8KK3R5cGVkZWYgaW50 IFdBSVRfVDsKKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIE1BQ0hXQUlUICovCisjZWxz ZQordHlwZWRlZiBpbnQgV0FJVF9UOworI2VuZGlmIC8qIENLX1JFRElSICovCisKKy8qIEFzc29y dGVkIG90aGVyIGJsYWhfdCdzIGhhbmRsZWQgaGVyZS4uLiAqLworCisjaWZuZGVmIFNJWkVfVAor I2RlZmluZSBTSVpFX1Qgc2l6ZV90CisjZW5kaWYgLyogU0laRV9UICovCisKKy8qIEZvcndhcmQg ZGVjbGFyYXRpb25zIG9mIHN5c3RlbS1kZXBlbmRlbnQgZnVuY3Rpb25zIGNhbGxhYmxlIGZyb20g YWxsICovCisvKiBDLUtlcm1pdCBtb2R1bGVzLiAqLworCisvKiBGaWxlLXJlbGF0ZWQgZnVuY3Rp b25zIGZyb20gc3lzdGVtLWRlcGVuZGVudCBmaWxlIGkvbyBtb2R1bGUgKi8KKworI2lmbmRlZiBD S1ZGSU9fQworLyogRm9yIHNvbWUgcmVhc29uLCB0aGlzIGRvZXMgbm90IGFncmVlIHdpdGggREVD IEMgKi8KK19QUk9UT1RZUCggaW50IHprc2VsZiwgKHZvaWQpICk7CisjZW5kaWYgLyogQ0tWRklP X0MgKi8KK19QUk9UT1RZUCggaW50IHpvcGVuaSwgKGludCwgY2hhciAqKSApOworX1BST1RPVFlQ KCBpbnQgem9wZW5vLCAoaW50LCBjaGFyICosIHN0cnVjdCB6YXR0ciAqLCBzdHJ1Y3QgZmlsaW5m byAqKSApOworX1BST1RPVFlQKCBpbnQgemNsb3NlLCAoaW50KSApOworI2lmbmRlZiBNQUMKK19Q Uk9UT1RZUCggaW50IHpjaGluLCAoaW50LCBpbnQgKikgKTsKKyNlbmRpZiAvKiBNQUMgKi8KK19Q Uk9UT1RZUCggaW50IHp4aW4sIChpbnQsIGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQg enNpbmwsIChpbnQsIGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgemluZmlsbCwgKHZv aWQpICk7CitfUFJPVE9UWVAoIGludCB6c291dCwgKGludCwgY2hhciopICk7CitfUFJPVE9UWVAo IGludCB6c291dGwsIChpbnQsIGNoYXIqKSApOworX1BST1RPVFlQKCBpbnQgenNvdXR4LCAoaW50 LCBjaGFyKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgemNob3V0LCAoaW50LCBjaGFyKSApOwor X1BST1RPVFlQKCBpbnQgem91dGR1bXAsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgenN5c2Nt ZCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IHpzaGNtZCwgKGNoYXIgKikgKTsKKyNpZmRl ZiBVTklYCitfUFJPVE9UWVAoIGludCB6c2V0ZmlsLCAoaW50LCBpbnQpICk7CitfUFJPVE9UWVAo IGludCB6Y2hrcGlkLCAodW5zaWduZWQgbG9uZykgKTsKKyNlbmRpZgkvKiBVTklYICovCisjaWZk ZWYgQ0tFWEVDCitfUFJPVE9UWVAoIFZPSUQgel9leGVjLCAoY2hhciAqLCBjaGFyICoqLCBpbnQp ICk7CisjZW5kaWYgLyogQ0tFWEVDICovCitfUFJPVE9UWVAoIGludCBjaGtmbiwgKGludCkgKTsK K19QUk9UT1RZUCggQ0tfT0ZGX1QgemNoa2ksIChjaGFyICopICk7CisjaWZkZWYgVk1TT1JVTklY CitfUFJPVE9UWVAoIENLX09GRl9UIHpnZXRmcywgKGNoYXIgKikgKTsKKyNlbHNlCisjaWZkZWYg T1MyCitfUFJPVE9UWVAoIENLX09GRl9UIHpnZXRmcywgKGNoYXIgKikgKTsKKyNlbHNlCisjZGVm aW5lIHpnZXRmcyhhKSB6Y2hraShhKQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFZNU09S VU5JWCAqLworX1BST1RPVFlQKCBpbnQgaXN3aWxkLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBp bnQgaXNkaXIsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCB6Y2hrbywgKGNoYXIgKikgKTsK K19QUk9UT1RZUCggaW50IHpkZWxldCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCB6cnRv bCwgKGNoYXIgKixjaGFyICopICk7CitfUFJPVE9UWVAoIFZPSUQgemx0b3IsIChjaGFyICosY2hh ciAqKSApOworX1BST1RPVFlQKCBWT0lEIHpzdHJpcCwgKGNoYXIgKixjaGFyICoqKSApOworI2lm ZGVmIFZNUworX1BST1RPVFlQKCBjaGFyICogenJlbG5hbWUsIChjaGFyICosIGNoYXIgKikgKTsK KyNlbmRpZiAvKiBWTVMgKi8KK19QUk9UT1RZUCggaW50IHpjaGRpciwgKGNoYXIgKikgKTsKK19Q Uk9UT1RZUCggY2hhciAqIHpob21lLCAodm9pZCkgKTsKK19QUk9UT1RZUCggY2hhciAqIHpndGRp ciwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB6eGNtZCwgKGludCwgY2hhciAqKSApOworI2lm bmRlZiBNQUMKK19QUk9UT1RZUCggaW50IHpjbG9zZiwgKGludCkgKTsKKyNlbmRpZiAvKiBNQUMg Ki8KKyNpZmRlZiBOWlhQQU5ECitfUFJPVE9UWVAoIGludCBuenhwYW5kLCAoY2hhciAqLCBpbnQp ICk7CisjZWxzZSAvKiBOWlhQQU5EICovCitfUFJPVE9UWVAoIGludCB6eHBhbmQsIChjaGFyICop ICk7CisjZW5kaWYgLyogTlpYUEFORCAqLworX1BST1RPVFlQKCBpbnQgem5leHQsIChjaGFyICop ICk7CisjaWZkZWYgWlhSRVdJTkQKK19QUk9UT1RZUCggaW50IHp4cmV3aW5kLCAodm9pZCkgKTsK KyNlbmRpZiAvKiBaWFJFV0lORCAqLworX1BST1RPVFlQKCBpbnQgemNoa3NwYSwgKGNoYXIgKiwg Q0tfT0ZGX1QpICk7CitfUFJPVE9UWVAoIFZPSUQgem5ld24sIChjaGFyICosIGNoYXIgKiopICk7 CitfUFJPVE9UWVAoIGludCB6cmVuYW1lLCAoY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9UWVAo IGludCB6Y29weSwgKGNoYXIgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgenNhdHRyLCAo c3RydWN0IHphdHRyICopICk7CitfUFJPVE9UWVAoIGludCB6ZnJlZSwgKGNoYXIgKikgKTsKK19Q Uk9UT1RZUCggY2hhciAqIHpmY2RhdCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IHpzdGlt ZSwgKGNoYXIgKiwgc3RydWN0IHphdHRyICosIGludCkgKTsKKyNpZmRlZiBDS19QRVJNUworX1BS T1RPVFlQKCBjaGFyICogemdwZXJtLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBjaGFyICogemlw ZXJtLCAoY2hhciAqKSApOworI2VuZGlmIC8qIENLX1BFUk1TICovCitfUFJPVE9UWVAoIGludCB6 bWFpbCwgKGNoYXIgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgenByaW50LCAoY2hhciAq LCBjaGFyICopICk7CitfUFJPVE9UWVAoIGNoYXIgKiB0aWxkZV9leHBhbmQsIChjaGFyICopICk7 CitfUFJPVE9UWVAoIGludCB6bWtkaXIsIChjaGFyICopICkgOworX1BST1RPVFlQKCBpbnQgemZz ZWVrLCAoQ0tfT0ZGX1QpICkgOworI2lmZGVmIFpGTlFGUAorX1BST1RPVFlQKCBzdHJ1Y3QgemZu ZnAgKiB6Zm5xZnAsIChjaGFyICosIGludCwgY2hhciAqICkgKSA7CisjZWxzZQorI2RlZmluZSB6 Zm5xZnAoYSxiLGMpIGNrc3RybmNweShjLGEsYikKKyNlbmRpZiAvKiBaRk5RRlAgKi8KK19QUk9U T1RZUCggaW50IHp2dXNlciwgKGNoYXIgKikgKSA7CitfUFJPVE9UWVAoIGludCB6dnBhc3MsIChj aGFyICopICkgOworX1BST1RPVFlQKCBWT0lEIHp2bG9nb3V0LCAodm9pZCkgKSA7CisjaWZkZWYg T1MyCitfUFJPVE9UWVAoIGludCBvczJzZXRsb25nbmFtZSwgKCBjaGFyICogZm4sIGNoYXIgKiBs biApICkgOworX1BST1RPVFlQKCBpbnQgb3MyZ2V0bG9uZ25hbWUsICggY2hhciAqIGZuLCBjaGFy ICoqIGxuICkgKSA7CitfUFJPVE9UWVAoIGludCBvczJyZXh4LCAoIGNoYXIgKiwgY2hhciAqLCBp bnQgKSApIDsKK19QUk9UT1RZUCggaW50IG9zMnJleHhmaWxlLCAoIGNoYXIgKiwgY2hhciAqLCBj aGFyICosIGludCkgKSA7CitfUFJPVE9UWVAoIGludCBvczJnZXRlYXMsIChjaGFyICopICkgOwor X1BST1RPVFlQKCBpbnQgb3Myc2V0ZWFzLCAoY2hhciAqKSApIDsKK19QUk9UT1RZUCggY2hhciAq IGdldF9vczJfdmVycywgKHZvaWQpICkgOworX1BST1RPVFlQKCBpbnQgZG9fbGFiZWxfc2VuZCwg KGNoYXIgKikgKSA7CitfUFJPVE9UWVAoIGludCBkb19sYWJlbF9yZWN2LCAodm9pZCkgKSA7Cisj aWZkZWYgT1MyTU9VU0UKK19QUk9UT1RZUCggdW5zaWduZWQgbG9uZyBvczJfbW91c2VvbiwgKHZv aWQpICk7CitfUFJPVE9UWVAoIHVuc2lnbmVkIGxvbmcgb3MyX21vdXNlaGlkZSwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIHVuc2lnbmVkIGxvbmcgb3MyX21vdXNlc2hvdywgKHZvaWQpICk7CitfUFJP VE9UWVAoIHVuc2lnbmVkIGxvbmcgb3MyX21vdXNlb2ZmLCAodm9pZCkgKTsKK19QUk9UT1RZUCgg dm9pZCBvczJfbW91c2VldnQsICh2b2lkICopICk7CitfUFJPVE9UWVAoIGludCBtb3VzZWJ1dHRv bmNvdW50LCAodm9pZCkpOworI2VuZGlmIC8qIE9TMk1PVVNFICovCisjZW5kaWYgLyogT1MyICov CisKKy8qIEZ1bmN0aW9ucyBmcm9tIHN5c3RlbS1kZXBlbmRlbnQgdGVybWluYWwgaS9vIG1vZHVs ZSAqLworCitfUFJPVE9UWVAoIGludCB0dG9wZW4sIChjaGFyICosIGludCAqLCBpbnQsIGludCkg KTsgIC8qIHR0eSBmdW5jdGlvbnMgKi8KKyNpZm5kZWYgTUFDCitfUFJPVE9UWVAoIGludCB0dGNs b3MsIChpbnQpICk7CisjZW5kaWYgLyogTUFDICovCitfUFJPVE9UWVAoIGludCB0dGhhbmcsICh2 b2lkKSApOworX1BST1RPVFlQKCBpbnQgdHRyZXMsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQg dHRwa3QsIChsb25nLCBpbnQsIGludCkgKTsKKyNpZm5kZWYgTUFDCitfUFJPVE9UWVAoIGludCB0 dHZ0LCAobG9uZywgaW50KSApOworI2VuZGlmIC8qIE1BQyAqLworX1BST1RPVFlQKCBpbnQgdHRz c3BkLCAoaW50KSApOworX1BST1RPVFlQKCBsb25nIHR0Z3NwZCwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCB0dGZsdWksICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgdHRmbHVvLCAodm9pZCkg KTsKK19QUk9UT1RZUCggaW50IHR0cHVzaGJhY2ssIChDSEFSICosIGludCkgKTsKK19QUk9UT1RZ UCggaW50IHR0cGVlaywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB0dGd3c2l6LCAodm9pZCkg KTsKK19QUk9UT1RZUCggaW50IHR0Y2hrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHR0eGlu LCAoaW50LCBDSEFSICopICk7CitfUFJPVE9UWVAoIGludCB0dHhvdXQsIChDSEFSICosIGludCkg KTsKK19QUk9UT1RZUCggaW50IHR0b2wsIChDSEFSICosIGludCkgKTsKK19QUk9UT1RZUCggaW50 IHR0b2MsIChjaGFyKSApOworX1BST1RPVFlQKCBpbnQgdHRpbmMsIChpbnQpICk7CitfUFJPVE9U WVAoIGludCB0dHNjYXJyLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgdHRnbWRtLCAodm9pZCkg KTsKK19QUk9UT1RZUCggaW50IHR0c25kYiwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB0dHNu ZGxiLCAodm9pZCkgKTsKKyNpZmRlZiBVTklYCitfUFJPVE9UWVAoIGNoYXIgKiB0dGdsY2tkaXIs ICh2b2lkKSApOworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBQQVJTRU5TRQorI2lmZGVmIFVO SVgKK19QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAqLCBpbnQsIGludCwgQ0hBUiwgQ0hBUiwg aW50KSApOworI2Vsc2UKKyNpZmRlZiBWTVMKK19QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAq LCBpbnQsIGludCwgQ0hBUiwgQ0hBUiwgaW50KSApOworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCitf UFJPVE9UWVAoIGludCB0dGlubCwgKENIQVIgKiwgaW50LCBpbnQsIENIQVIsIENIQVIsIGludCkg KTsKKyNlbHNlCisjaWZkZWYgT1MyCitfUFJPVE9UWVAoIGludCB0dGlubCwgKENIQVIgKiwgaW50 LCBpbnQsIENIQVIsIENIQVIsIGludCkgKTsKKyNlbHNlCisjaWZkZWYgT1NLCitfUFJPVE9UWVAo IGludCB0dGlubCwgKENIQVIgKiwgaW50LCBpbnQsIENIQVIsIENIQVIsIGludCkgKTsKKyNlbHNl CitfUFJPVE9UWVAoIGludCB0dGlubCwgKENIQVIgKiwgaW50LCBpbnQsIENIQVIsIENIQVIpICk7 CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogU1RSQVRVUyAq LworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbHNlIC8qICEgUEFSU0VO U0UgKi8KK19QUk9UT1RZUCggaW50IHR0aW5sLCAoQ0hBUiAqLCBpbnQsIGludCwgQ0hBUikgKTsK KyNlbmRpZiAvKiBQQVJTRU5TRSAqLworCisvKiBYWVpNT0RFTSBzdXBwb3J0ICovCisKKy8qCisg IENLX1hZWiBlbmFibGVzIHRoZSB2YXJpb3VzIGNvbW1hbmRzIGFuZCBkYXRhIHN0cnVjdHVyZXMu CisgIFhZWl9JTlRFUk5BTCBtZWFucyB0aGVzZSBwcm90b2NvbHMgYXJlIGJ1aWx0LWluOyBpZiBu b3QgZGVmaW5lZCwKKyAgdGhlbiB0aGV5IGFyZSBleHRlcm5hbC4gIFhZWl9ETEwgaXMgdXNlZCB0 byBpbmRpY2F0ZSBhIHNlcGFyYXRlCisgIGxvYWRhYmxlIGxpYnJhcnkgY29udGFpbmluZyB0aGUg WFlabW9kZW0gcHJvdG9jb2wgY29kZS4KKyovCisjaWZkZWYgcGRwMTEJCQkJLyogTm8gcm9vbSBm b3IgdGhpcyBpbiBQRFAtMTEgKi8KKyNkZWZpbmUgTk9DS1hZWgorI2VuZGlmIC8qIHBkcDExICov CisKKyNpZm5kZWYgTk9DS1hZWgkJCQkvKiBBbHRlcm5hdGl2ZSBwcm90b2NvbHMgKi8KKyNpZm5k ZWYgQ0tfWFlaCisjaWZkZWYgVU5JWAorI2RlZmluZSBDS19YWVoKKyNlbHNlCisjaWZkZWYgT1My CisjZGVmaW5lIENLX1hZWgorI2lmbmRlZiBOT1hZWkRMTAorI2RlZmluZSBYWVpfSU5URVJOQUwJ CQkvKiBJbnRlcm5hbCBhbmQgRExMICovCisjZGVmaW5lIFhZWl9ETEwKKyNlbmRpZiAvKiBOT1hZ WkRMTCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBD S19YWVogKi8KKyNlbmRpZiAvKiBOT0NLWFlaICovCisKKyNpZmRlZiBYWVpfSU5URVJOQUwJCQkv KiBUaGlzIGVuc3VyZXMgdGhhdCBYWVpfSU5URVJOQUwgKi8KKyNpZm5kZWYgQ0tfWFlaCQkJCS8q IGlzIGRlZmluZWQgb25seSBpZiBDS19YWVogaXMgdG9vICovCisjdW5kZWYgWFlaX0lOVEVSTkFM CisjZW5kaWYgLyogQ0tfWFlaICovCisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisjaWZkZWYg WFlaX0RMTAkJCQkvKiBUaGlzIGVuc3VyZXMgWFlaX0RMTCBpcyBkZWZpbmVkICovCisjaWZuZGVm IFhZWl9JTlRFUk5BTAkJCS8qIG9ubHkgaWYgWFlaX0lOVEVSTkFMIGlzIHRvbyAqLworI3VuZGVm IFhZWl9ETEwKKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KKyNlbmRpZiAvKiBYWVpfRExMICov CisKKy8qIENvbnNvbGUgZnVuY3Rpb25zICovCisKK19QUk9UT1RZUCggaW50IGNvbmdtLCAodm9p ZCkgKTsKKyNpZmRlZiBDT01NRU5UCitfUFJPVE9UWVAoIFZPSUQgY29uaW50LCAoU0lHVFlQICgq KShpbnQsIGludCksIFNJR1RZUCAoKikoaW50LCBpbnQpKSApOworI2Vsc2UKK19QUk9UT1RZUCgg Vk9JRCBjb25pbnQsIChTSUdUWVAgKCopKGludCksIFNJR1RZUCAoKikoaW50KSkgKTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCitfUFJPVE9UWVAoIFZPSUQgY29ubm9pLCAodm9pZCkgKTsKK19QUk9U T1RZUCggaW50IGNvbmNiLCAoY2hhcikgKTsKKyNpZmRlZiBDT05HU1BECitfUFJPVE9UWVAoIGxv bmcgY29uZ3NwZCwgKHZvaWQpICk7CisjZW5kaWYgLyogQ09OR1NQRCAqLworX1BST1RPVFlQKCBp bnQgY29uYmluLCAoY2hhcikgKTsKK19QUk9UT1RZUCggaW50IGNvbnJlcywgKHZvaWQpICk7Citf UFJPVE9UWVAoIGludCBjb25vYywgKGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBjb254bywgKGlu dCwgY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgY29ub2wsIChjaGFyICopICk7CitfUFJPVE9U WVAoIGludCBjb25vbGEsIChjaGFyICpbXSkgKTsKK19QUk9UT1RZUCggaW50IGNvbm9sbCwgKGNo YXIgKikgKTsKK19QUk9UT1RZUCggaW50IGNvbmNoaywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGlu dCBjb25pbmMsIChpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBjb25rYmcsICh2b2lkKSApOwor X1BST1RPVFlQKCBpbnQgcHN1c3BlbmQsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBwcml2X2lu aSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBwcml2X29uLCAodm9pZCkgKTsKK19QUk9UT1RZ UCggaW50IHByaXZfb2ZmLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHByaXZfY2FuLCAodm9p ZCkgKTsKK19QUk9UT1RZUCggaW50IHByaXZfY2hrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50 IHByaXZfb3BuLCAoY2hhciAqLCBpbnQpICk7CisKK19QUk9UT1RZUCggaW50IHN5c2luaXQsICh2 b2lkKSApOwkvKiBNaXNjIEtlcm1pdCBmdW5jdGlvbnMgKi8KK19QUk9UT1RZUCggaW50IHN5c2Ns ZWFudXAsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgbXNsZWVwLCAoaW50KSApOworX1BST1RP VFlQKCBWT0lEIHJ0aW1lciwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBndGltZXIsICh2b2lk KSApOworI2lmZGVmIEdGVElNRVIKK19QUk9UT1RZUCggVk9JRCByZnRpbWVyLCAodm9pZCkgKTsK K19QUk9UT1RZUCggQ0tGTE9BVCBnZnRpbWVyLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBHRlRJTUVS ICovCitfUFJPVE9UWVAoIFZPSUQgdHRpbW9mZiwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQg enRpbWUsIChjaGFyICoqKSApOworX1BST1RPVFlQKCBpbnQgcGFyY2hrLCAoQ0hBUiAqLCBDSEFS LCBpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgZG9leGl0LCAoaW50LCBpbnQpICk7CitfUFJPVE9U WVAoIGludCBhc2ttb3JlLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBmYXRhbCwgKGNoYXIg KikgKTsKK19QUk9UT1RZUCggVk9JRCBmYXRhbDIsIChjaGFyICosIGNoYXIgKikgKTsKKyNpZmRl ZiBWTVMKK19QUk9UT1RZUCggaW50IGNrX2NhbmNpbywgKHZvaWQpICk7CisjZW5kaWYgLyogVk1T ICovCisKKy8qIEtleSBtYXBwaW5nIHN1cHBvcnQgKi8KKworI2lmZGVmIE5PSUNQCisjaWZuZGVm IE5PU0VUS0VZCisjZGVmaW5lIE5PU0VUS0VZCisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKyNlbmRp ZiAvKiBOT0lDUCAqLworCisjaWZkZWYgTUFDCisjaWZuZGVmIE5PU0VUS0VZCisjZGVmaW5lIE5P U0VUS0VZCisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKworX1BST1RP VFlQKCBpbnQgY29uZ2tzLCAoaW50KSApOworI2lmZGVmIE9TMgorLyogT1MyIHJlcXVpcmVzIHRo ZXNlIGRlZmluaXRpb25zIGV2ZW4gaWYgU0VUIEtFWSBpcyBub3QgYmVpbmcgc3VwcG9ydGVkICov CisjZGVmaW5lIEtNU0laRSA4OTE2Cit0eXBlZGVmIFVMT05HIEtFWTsKK3R5cGVkZWYgQ0hBUiAq TUFDUk87CitleHRlcm4gaW50IHdpZGVyZXN1bHQ7CisjZWxzZSAvKiBOb3QgT1MyICovCisjaWZu ZGVmIE5PU0VUS0VZCisvKgorICBDYXRjaC1hbGwgZm9yIHN5c3RlbXMgd2hlcmUgd2UgZG9uJ3Qg a25vdyBob3cgdG8gcmVhZCBrZXlib2FyZCBzY2FuCisgIGNvZGVzID4gMjU1LgorKi8KKyNkZWZp bmUgS01TSVpFIDI1NgorLyogTm90ZTogQ0hBUiAoaS5lLiB1bnNpZ25lZCBjaGFyKSBpcyB2ZXJ5 IGltcG9ydGFudCBoZXJlLiAqLwordHlwZWRlZiBDSEFSIEtFWTsKK3R5cGVkZWYgQ0hBUiAqIE1B Q1JPOworI2RlZmluZSBjb25na3MgY29uaW5jCisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKworI2lmbmRlZiBPUzIKKyNpZm5kZWYgTk9LVkVSQlMJCQkvKiBObyBcS3Zl cmJzIHVubGVzcy4uLiAqLworI2RlZmluZSBOT0tWRVJCUworI2VuZGlmIC8qIE5PS1ZFUkJTICov CisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9LVkVSQlMKKyNpZmRlZiBPUzIKKy8qCisg IE5vdGU6IHRoaXMgdmFsdWUgY2hvc2VuIHRvIGJlIGJpZ2dlciB0aGFuIFBDIEJJT1Mga2V5IG1v ZGlmaWVyIGJpdHMsCisgIGJ1dCBzdGlsbCBmaXQgaW4gMTYgYml0cyB3aXRob3V0IGFmZmVjdGlu ZyBzaWduLgorCisgIEFzIG9mIEs5NSAxLjEuNSwgdGhpcyBubyBsb25nZXIgZml0cyBpbiAxNiBi aXRzLCBnb29kIHRoaW5nIHdlIGFyZSAzMiBiaXQuCisqLworI2RlZmluZSBGX01BQ1JPIDB4MjAw MCAgICAgICAgICAvKiBCaXQgaW5kaWNhdGluZyBhIG1hY3JvIGluZGljZSAqLworI2RlZmluZSBJ U19NQUNSTyh4KSAoeCAmIEZfTUFDUk8pCisjZGVmaW5lIEZfS1ZFUkIgMHg0MDAwCQkJLyogQml0 IGluZGljYXRpbmcgYSBrZXlib2FyZCB2ZXJiICovCisjZGVmaW5lIElTX0tWRVJCKHgpICh4ICYg Rl9LVkVSQikJLyogVGVzdCB0aGlzIGJpdCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IE5PS1ZFUkJTICovCisKKyNkZWZpbmUgRl9FU0MgICAweDgwMDAJCS8qIEJpdCBpbmRpY2F0aW5n IEVTQyBjaGFyIGNvbWJpbmF0aW9uICovCisjZGVmaW5lIElTX0VTQyh4KSAoeCAmIEZfRVNDKQor I2RlZmluZSBGX0NTSSAgIDB4MTAwMDAJCS8qIEJpdCBpbmRpY2F0aW5nIENTSSBjaGFyIGNvbWJp bmF0aW9uICovCisjZGVmaW5lIElTX0NTSSh4KSAoeCAmIEZfQ1NJKQorCisjaWZkZWYgTk9TUEwJ CQkJLyogVGhpcyBtaWdodCBiZSBvdmVya2lsbC4uICovCisjaWZuZGVmIE5PS1ZFUkJTCQkJLyog Tm90IGFsbCBcS3ZlcmJzIHJlcXVpcmUgKi8KKyNkZWZpbmUgTk9LVkVSQlMJCQkvKiB0aGUgc2Ny aXB0IHByb2dyYW1taW5nIGxhbmd1YWdlLiAqLworI2VuZGlmIC8qIE5PS1ZFUkJTICovCisjaWZu ZGVmIE5PVEFLRUFSR1MKKyNkZWZpbmUgTk9UQUtFQVJHUworI2VuZGlmIC8qIE5PVEFLRUFSR1Mg Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisvKgorICBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBz eXN0ZW0gYW5kIGxpYnJhcnkgZnVuY3Rpb25zLgorKi8KKyNpZmRlZiBfUE9TSVhfU09VUkNFCisj aWZuZGVmIFZNUworI2lmbmRlZiBNQUMKKyNkZWZpbmUgQ0tfQU5TSUxJQlMKKyNlbmRpZiAvKiBN QUMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBfUE9TSVhfU09VUkNFICovCisKKyNp ZmRlZiBORVhUCisjZGVmaW5lIENLX0FOU0lMSUJTCisjZW5kaWYgLyogTkVYVCAqLworCisjaWZk ZWYgU1ZSNAorI2RlZmluZSBDS19BTlNJTElCUworI2VuZGlmIC8qIFNWUjQgKi8KKworI2lmZGVm IFNUUkFUVVMJCQkJLyogU3RyYXR1cyBWT1MgdXNlcyBBTlNJIGxpYnJhcmllcyAqLworI2RlZmlu ZSBDS19BTlNJTElCUworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKworI2lmZGVmIE9TMgorI2RlZmlu ZSBDS19BTlNJTElCUworI2lmbmRlZiBOT0NVUlNFUworI2RlZmluZSBNWUNVUlNFUworI2VuZGlm IC8qIE5PQ1VSU0VTICovCisjZGVmaW5lIENLX1JUU0NUUworI2lmZGVmIF9fSUJNQ19fCisjZGVm aW5lIFNfSUZNVCAweEYwMDAKKyNkZWZpbmUgdGltZXpvbmUgX3RpbWV6b25lCisjZW5kaWYgLyog X19JQk1DX18gKi8KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGlvLmg+CisjaWZkZWYg X19FTVhfXworI2lmbmRlZiBfXzMyQklUX18KKyNkZWZpbmUgX18zMkJJVF9fCisjZW5kaWYgLyog X18zMkJJVF9fICovCisjaW5jbHVkZSA8c3lzL3RpbWViLmg+CisjZWxzZSAvKiBfX0VNWF9fICov CisjaW5jbHVkZSA8ZGlyZWN0Lmg+CisjdW5kZWYgU0lHQUxSTQorI2lmbmRlZiBTSUdVU1IxCisj ZGVmaW5lIFNJR1VTUjEgNworI2VuZGlmIC8qIFNJR1VTUjEgKi8KKyNkZWZpbmUgU0lHQUxSTSBT SUdVU1IxCitfUFJPVE9UWVAoIHVuc2lnbmVkIGFsYXJtLCAodW5zaWduZWQpICk7CitfUFJPVE9U WVAoIHVuc2lnbmVkIHNsZWVwLCAodW5zaWduZWQpICk7CisjZW5kaWYgLyogX19FTVhfXyAqLwor X1BST1RPVFlQKCB1bnNpZ25lZCBsb25nIHpkc2tzcGFjZSwgKGludCkgKTsKK19QUk9UT1RZUCgg aW50IHpjaGRzaywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGNvbmluY3JhdywgKGludCkgKTsK K19QUk9UT1RZUCggaW50IHR0aXNjb20sIChpbnQgZikgKTsKK19QUk9UT1RZUCggaW50IElzRmls ZU5hbWVWYWxpZCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggdm9pZCBDaGFuZ2VOYW1lRm9yRkFU LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBjaGFyICpHZXRMb2FkUGF0aCwgKHZvaWQpICk7Cisj ZW5kaWYgLyogT1MyICovCisKKy8qIEZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGl0 ZW1zLi4uICovCisKKyNpZm5kZWYgTk9DVVJTRVMKKyNpZmRlZiBDS19OQ1VSU0VTCQkJLyogQ0tf TkNVUlNFUyBpbXBsaWVzIENLX0NVUlNFUyAqLworI2lmbmRlZiBDS19DVVJTRVMKKyNkZWZpbmUg Q0tfQ1VSU0VTCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisjZW5kaWYgLyogQ0tfTkNVUlNFUyAq LworCisjaWZkZWYgTVlDVVJTRVMJCQkJLyogTVlDVVJTRVMgaW1wbGllcyBDS19DVVJTRVMgKi8K KyNpZm5kZWYgQ0tfQ1VSU0VTCisjZGVmaW5lIENLX0NVUlNFUworI2VuZGlmIC8qIENLX0NVUlNF UyAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisjZW5kaWYgLyogTk9DVVJTRVMgKi8KKworI2lm ZGVmIE5PQ1VSU0VTCisjaWZkZWYgQ0tfQ1VSU0VTCisjdW5kZWYgQ0tfQ1VSU0VTCisjZW5kaWYg LyogQ0tfQ1VSU0VTICovCisjaWZuZGVmIE5PRElTUExBWQorI2RlZmluZSBOT0RJU1BMQVkKKyNl bmRpZiAvKiBOT0RJU1BMQVkgKi8KKyNlbmRpZiAvKiBOT0NVUlNFUyAqLworCisjaWZkZWYgQ0tf Q1VSU0VTCisvKgorICBUaGUgQ0tfV1JFRlJFU0ggc3ltYm9sIGlzIGRlZmluZWQgaWYgdGhlIGN1 cnNlcyBsaWJyYXJ5IHByb3ZpZGVzCisgIGNsZWFyb2soKSBhbmQgd3JlZnJlc2goKSBmdW5jdGlv bnMsIHdoaWNoIGFyZSB1c2VkIGluIHJlcGFpbnRpbmcKKyAgdGhlIHNjcmVlbi4KKyovCisjaWZk ZWYgTk9XUkVGUkVTSAkJCS8qIE92ZXJyaWRlIENLX1dSRUZSRVNIICovCisKKyNpZmRlZiBDS19X UkVGUkVTSAkJCS8qIElmIHRoaXMgaXMgZGVmaW5lZCwgKi8KKyN1bmRlZiBDS19XUkVGUkVTSAkJ CS8qIHVuZGVmaW5lIGl0LiAqLworI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCisKKyNlbHNlIC8q ICFOT1dSRUZSRVNIICovCQkJLyogTm8gb3ZlcnJpZGUuLi4gKi8KKworI2lmbmRlZiBDS19XUkVG UkVTSAkJCS8qIElmIENLX1dSRUZSRVNIIG5vdCBkZWZpbmVkICovCisvKgorICBBdXRvbWF0aWNh bGx5IGRlZmluZSBpdCBmb3Igc3lzdGVtcyBrbm93biB0byBoYXZlIGl0IC4uLgorKi8KKyNpZmRl ZiBWTVMJCQkJLyogREVDIChPcGVuKVZNUyBoYXMgaXQgKi8KKyNkZWZpbmUgQ0tfV1JFRlJFU0gK KyNlbHNlCisjaWZkZWYgdWx0cml4CQkJCS8qIERFQyBVTFRSSVggaGFzIGl0ICovCisjZWxzZQor I2lmZGVmIFNWUjMJCQkJLyogU3lzdGVtIFYgaGFzIGl0ICovCisjZGVmaW5lIENLX1dSRUZSRVNI CisjZWxzZQorI2lmZGVmIEJTRDQ0CQkJCS8qIDQuNCBCU0QgaGFzIGl0ICovCisjZGVmaW5lIENL X1dSRUZSRVNICisjZWxzZQorI2lmZGVmIE5FWFQJCQkJLyogRGVmaW5lIGl0IGZvciBOZVhUU1RF UCAqLworI2RlZmluZSBDS19XUkVGUkVTSAorI2Vsc2UKKyNpZmRlZiBTVU5PUzQJCQkJLyogU3Vu T1MgNC54Li4uICovCisjZGVmaW5lIENLX1dSRUZSRVNICisjZWxzZQorI2lmZGVmIFNPTEFSSVMy NQkJCS8qIFNvbGFyaXMgMi41IGFuZCBsYXRlciAqLworI2RlZmluZSBDS19XUkVGUkVTSAorI2Vs c2UKKyNpZmRlZiBBSVhSUwkJCQkvKiBSUy82MDAwIEFJWCAuLi4gKi8KKyNkZWZpbmUgQ0tfV1JF RlJFU0gKKyNlbHNlCisjaWZkZWYgUlRBSVgJCQkJLyogUlQgUEMgQUlYIC4uLiAqLworI2RlZmlu ZSBDS19XUkVGUkVTSAorI2Vsc2UKKyNpZmRlZiBPU0YJCQkJLyogREVDIE9TRi8xIC4uLiAqLwor I2RlZmluZSBDS19XUkVGUkVTSAorCisvKiBBZGQgbW9yZSBoZXJlLCBvciBqdXN0IGRlZmluZSBD S19XUkVGUkVTSCBvbiB0aGUgQ0MgY29tbWFuZCBsaW5lLi4uICovCisKKyNlbmRpZiAvKiBPU0Yg Ki8KKyNlbmRpZiAvKiBSVEFJWCAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYgLyogU09M QVJJUzI1ICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlm IC8qIEJTRDQ0ICovCisjZW5kaWYgLyogU1ZSMyAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworI2Vu ZGlmIC8qIFZNUyAqLworCisjZWxzZSAvKiBDS19XUkVGUkVTSCBpcyBkZWZpbmVkICovCisKKy8q IFRoaXMgaXMgd2l0aGluIGFuIGlmZGVmIENLX0NVUlNFUyBibG9jay4gIFRoZSBmb2xsb3dpbmcg aXMgbm90IG5lZWRlZCAqLworCisjaWZuZGVmIENLX0NVUlNFUwkJCS8qIENLX1dSRUZSRVNIIGlt cGxpZXMgQ0tfQ1VSU0VTICovCisjZGVmaW5lIENLX0NVUlNFUworI2VuZGlmIC8qIENLX0NVUlNF UyAqLworCisjZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KKyNlbmRpZiAvKiBOT1dSRUZSRVNIICov CisKKyNpZm5kZWYgVFJNQlVGTAorI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIFRSTUJVRkwgMTYz ODQKKyNlbHNlCisjaWZkZWYgRFlOQU1JQworI2RlZmluZSBUUk1CVUZMIDgxOTIKKyNlbHNlCisj ZGVmaW5lIFRSTUJVRkwgMTAyNAorI2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5kaWYgLyogRFlO QU1JQyAqLworI2VuZGlmIC8qIFRSTUJVRkwgKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKwor LyoKKyAgV2hldGhlciB0byB1c2UgY2ttYXRjaCgpIGluIGFsbCBpdHMgZ2xvcnkgZm9yIEMtU2hl bGwtbGlrZSBwYXR0ZXJucy4KKyAgSWYgQ0tSRUdFWCBpcyBOT1QgZGVmaW5lZCwgYWxsIGJ1dCAq IGFuZCA/IG1hdGNoaW5nIGFyZSByZW1vdmVkIGZyb20KKyAgY2ttYXRjaCgpLiAgTk9URTogRGVm aW5pbmcgQ0tSRUdFWCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgY2ttYXRjaCgpCisg IHJlZ2V4ZXMgYXJlIHVzZWQgZm9yIGZpbGVuYW1lIG1hdGNoaW5nLiAgVGhhdCBkZXBlbmRzIG9u IHdoZXRoZXIgenhwYW5kKCkKKyAgaW4gY2s/ZmlvLmMgY2FsbHMgY2ttYXRjaCgpLiAgTk9URSAy OiBSRUdFWCBpcyBhIG1pc25vbWVyIC0tIHRoZXNlIGFyZSBub3QKKyAgcmVndWxhciBleHByZXNz aW9ucyBpbiB0aGUgY29tcHV0ZXItc2NpZW5jZSBzZW5zZSAoaW4gd2hpY2gsIGUuZy4gImEqYiIK KyAgbWF0Y2hlcyAwIG9yIG1vcmUgJ2EnIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgJ2InKSBidXQg cGF0dGVybnMgKGluIHdoaWNoCisgICJhKmIiIG1hdGNoZXMgJ2EnIGZvbGxvd2VkIGJ5IDAgb3Ig bW9yZSBub24tYiBjaGFyYWN0ZXJzLCBmb2xsb3dlZCBieSBiKS4KKyovCisjaWZuZGVmIE5PQ0tS RUdFWAorI2lmbmRlZiBDS1JFR0VYCisjZGVmaW5lIENLUkVHRVgKKyNlbmRpZiAvKiBDS1JFR0VY ICovCisjZW5kaWYgLyogTk9DS1JFR0VYICovCisKKy8qIExlYXJuZWQtc2NyaXB0IGZlYXR1cmUg Ki8KKworI2lmbmRlZiBOT0xFQVJOCisjaWZkZWYgTk9TUEwKKyNkZWZpbmUgTk9MRUFSTgorI2Vs c2UKKyNpZmRlZiBOT0xPQ0FMCisjZGVmaW5lIE5PTEVBUk4KKyNlbmRpZiAvKiBOT0xPQ0FMICov CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0xFQVJOICovCisKKyNpZmRlZiBOT0xF QVJOCisjaWZkZWYgQ0tMRUFSTgorI3VuZGVmIENLTEVBUk4KKyNlbmRpZiAvKiBDS0xFQVJOICov CisjZWxzZSAgLyogIU5PTEVBUk4gKi8KKyNpZm5kZWYgQ0tMRUFSTgorI2lmZGVmIE9TMk9SVU5J WAorLyogSW4gVU5JWCB0aGlzIGNhbiB3b3JrIG9ubHkgd2l0aCBja3VjbnMuYyBidWlsZHMgKi8K KyNkZWZpbmUgQ0tMRUFSTgorI2Vsc2UKKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tMRUFSTgorI2Vu ZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIENLTEVBUk4g Ki8KKyNlbmRpZiAvKiBOT0xFQVJOICovCisKKyNpZmRlZiBDS0xFQVJOCisjaWZuZGVmIExFQVJO QlVGU0laCisjZGVmaW5lIExFQVJOQlVGU0laIDEyOAorI2VuZGlmIC8qIExFQVJOQlVGU0laICov CisjZW5kaWYgLyogQ0tMRUFSTiAqLworCisjaWZuZGVmIElLU0RPTkxZCisjaWZuZGVmIENLVElE TEUJCQkJLyogUHNldWRvLWtlZXBhbGl2ZSBpbiBDT05ORUNUICovCisjaWZkZWYgT1MyCQkJCS8q IEluIEs5NSAqLworI2RlZmluZSBDS1RJRExFCisjZWxzZQorI2lmZGVmIFVOSVgJCQkJLyogSW4g VU5JWCBidXQgb25seSBja3VjbnMgdmVyc2lvbnMgKi8KKyNpZm5kZWYgTk9MRUFSTgorI2lmbmRl ZiBOT1NFTEVDVAorI2RlZmluZSBDS1RJRExFCisjZW5kaWYgLyogTk9TRUxFQ1QgKi8KKyNlbmRp ZiAvKiBOT0xFQVJOICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIENLVElETEUgKi8KKyNlbmRpZiAvKiBJS1NET05MWSAqLworCisjaWZkZWYgQ0tfQU5T SUxJQlMKKy8qCisgIFN0cmluZyBsaWJyYXJ5IGZ1bmN0aW9ucy4KKyAgRm9yIEFOU0kgQywgZ2V0 IHByb3RvdHlwZXMgZnJvbSA8c3RyaW5nLmg+LgorICBPdGhlcndpc2UsIHNraXAgdGhlIHByb3Rv dHlwZXMuCisqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICBQcm90b3R5cGVzIGZvciBv dGhlciBjb21tb25seSB1c2VkIGxpYnJhcnkgZnVuY3Rpb25zLCBzdWNoIGFzCisgIG1hbGxvYywg ZnJlZSwgZ2V0ZW52LCBhdG9sLCBhdG9pLCBhbmQgZXhpdC4gIE90aGVyd2lzZSwgbm8gcHJvdG90 eXBlcy4KKyovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgRElBQiAvKiBESUFCIERTOTAg Ki8KKy8qICNpbmNsdWRlIDxjb21tb25DLmg+ICAqLworI2luY2x1ZGUgPHN5cy93YWl0Lmg+Cisj ZGVmaW5lIENLX1dBSVRfSAorI2lmZGVmIENPTU1FTlQKK2V4dGVybiB2b2lkIGV4aXQoaW50IHN0 YXR1cyk7CitleHRlcm4gdm9pZCBfZXhpdChpbnQgc3RhdHVzKTsKK2V4dGVybiBpbnQgdW5hbWUo c3RydWN0IHV0c25hbWUgKm5hbWUpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK2V4dGVybiBpbnQg Y2htb2QoY2hhciAqcGF0aCwgaW50IG1vZGUpOworZXh0ZXJuIGludCBpb2N0bChpbnQgZmlsZGVz LCBpbnQgcmVxdWVzdCwgLi4uKTsKK2V4dGVybiBpbnQgcmRjaGsoaW50IHR0eWZkKTsKK2V4dGVy biBpbnQgbmFwKGludCBtKTsKKyNpZmRlZiBDT01NRU5UCitleHRlcm4gaW50IGdldHBwaWQodm9p ZCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworZXh0ZXJuIGludCBfZmlsYnVmKEZJTEUgKnN0cmVh bSk7CitleHRlcm4gaW50IF9mbHNidWYoY2hhciBjLEZJTEUgKnN0cmVhbSk7CisjZW5kaWYgLyog RElBQiAqLworCisvKgorICBQcm90b3R5cGVzIGZvciBVTklYIGZ1bmN0aW9ucyBsaWtlIGFjY2Vz cywgYWxhcm0sIGNoZGlyLCBzbGVlcCwgZm9yaywKKyAgYW5kIHBhdXNlLiAgT3RoZXJ3aXNlLCBu byBwcm90b3R5cGVzLgorKi8KKyNpZmRlZiBWTVMKKyNpbmNsdWRlIDxzaWduYWwuaD4gIC8qIFNN Uzogc2xlZXAoKSBmb3Igb2xkIChWNC4wLTAwMCkgREVDIEMuICovCisjaW5jbHVkZSA8dW5peGlv Lmg+CisjaW5jbHVkZSA8dW5peGxpYi5oPiAvKiBTTVM6IGdldHBpZCgpIGZvciBvbGQgKFY0LjAt MDAwKSBERUMgQy4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIE5FWFQKKyNpZm5kZWYg TkVYVDMzCisjaW5jbHVkZSA8bGliYy5oPgorI2VuZGlmIC8qIE5FWFQzMyAqLworI2Vsc2UgIC8q IE5vVCBOZVhUICovCisjaWZuZGVmIEFNSUdBCisjaWZuZGVmIE9TMgorI2lmZGVmIFNUUkFUVVMK KyNpbmNsdWRlIDxjX3V0aWxpdGllcy5oPgorI2Vsc2UgLyogIVNUUkFUVVMgKi8KKyNpZm5kZWYg T1NLWFhDCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYgLyogT1NLWFhDICovCisjaWZkZWYg SEFWRV9DUllQVF9ICisjaW5jbHVkZSA8Y3J5cHQuaD4KKyNlbmRpZiAvKiBIQVZFX0NSWVBUX0gg Ki8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQU1J R0EgKi8KKyNlbmRpZiAvKiBORVhUICovCisKKyNlbHNlIC8qIE5vdCBBTlNJIGxpYnMuLi4gKi8K KworI2lmZGVmIE1BQworI2luY2x1ZGUgPFN0cmluZy5oPgorI2luY2x1ZGUgPFN0ZExpYi5oPgor I2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgSFBVWAorI2lmbmRlZiBIUFVYUFJFNjUKKyNpbmNs dWRlIDx1bmlzdGQuaD4KKyNlbmRpZiAvKiBIUFVYUFJFNjUgKi8KKyNlbmRpZiAvKiBIUFVYICov CisKKyNpZmRlZiBTVU5PUzQxCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGli Lmg+CisjZWxzZQorI2lmbmRlZiBNQUMKKy8qCisgIEl0IGlzIGVzc2VudGlhbCB0aGF0IHRoZXNl IGFyZSBkZWNsYXJlZCBjb3JyZWN0bHkhCisgIFdoaWNoIGlzIG5vdCBhbHdheXMgZWFzeS4gIFRh a2UgbWFsbG9jKCkgZm9yIGluc3RhbmNlIC4uLgorKi8KKyNpZmRlZiBQWVJBTUlECisjaWZkZWYg U1ZSNAorI2lmZGVmIF9fU1REQ19fCisjZGVmaW5lIFNJWkVfVF9NQUxMT0MKKyNlbmRpZiAvKiBf X1NURENfXyAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBQWVJBTUlEICovCisvKgor ICBNYXliZSBzb21lIG90aGVyIGVudmlyb25tZW50cyBuZWVkIHRoZSBzYW1lIHRyZWF0bWVudCBm b3IgbWFsbG9jLgorICBJZiBzbywgZGVmaW5lIFNJWkVfVF9NQUxMT0MgZm9yIHRoZW0gaGVyZSBv ciBpbiBjb21waWxlciBDRkxBR1MuCisqLworI2lmZGVmIFNJWkVfVF9NQUxMT0MKK19QUk9UT1RZ UCggdm9pZCAqIG1hbGxvYywgKHNpemVfdCkgKTsKKyNlbHNlCitfUFJPVE9UWVAoIGNoYXIgKiBt YWxsb2MsICh1bnNpZ25lZCBpbnQpICk7CisjZW5kaWYgLyogU0laRV9UX01BTExPQyAqLworCitf UFJPVE9UWVAoIGNoYXIgKiBnZXRlbnYsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGxvbmcgYXRv bCwgKGNoYXIgKikgKTsKKyNlbmRpZiAvKiAhTUFDICovCisjZW5kaWYgLyogU1VOT1M0MSAqLwor I2VuZGlmIC8qIENLX0FOU0lMSUJTICovCisKKy8qCisgIDxzeXMvcGFyYW0uaD4gZ2VuZXJhbGx5 IHBpY2tzIHVwIE5VTEwsIE1BWFBBVEhMRU4sIGFuZCBNQVhOQU1MRU4KKyAgYW5kIHNlZW1zIHRv IHByZXNlbnQgb24gYWxsIFVuaXhlcyBnb2luZyBiYWNrIGF0IGxlYXN0IHRvIFNDTyBYZW5peAor ICB3aXRoIHRoZSBleGNlcHRpb24ocykgbm90ZWQuCisqLworI2lmbmRlZiBOT19QQVJBTV9ICQkJ LyogMjAwMS0xMS0wMyAqLworI2lmbmRlZiBVTklYCQkJCS8qIE5vbi1Vbml4ZXMgZG9uJ3QgaGF2 ZSBpdCAqLworI2RlZmluZSBOT19QQVJBTV9ICisjZWxzZQorI2lmZGVmIFRSUzE2CQkJCS8qIFRh bmR5IFhlbml4IGRvZXNuJ3QgaGF2ZSBpdCAqLworI2RlZmluZSBOT19QQVJBTV9ICisjZW5kaWYg LyogVFJTMTYgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogTk9fUEFSQU1fSCAqLwor CisjaWZuZGVmIE5PX1BBUkFNX0gKKyNpZm5kZWYgSU5DTF9QQVJBTV9ICisjZGVmaW5lIElOQ0xf UEFSQU1fSAorI2VuZGlmIC8qIElOQ0xfUEFSQU1fSCAqLworI2luY2x1ZGUgPHN5cy9wYXJhbS5o PgorI2VuZGlmIC8qIE5PX1BBUkFNX0ggKi8KKworI2lmbmRlZiBOVUxMCQkJCS8qIEluIGNhc2Ug TlVMTCBpcyBzdGlsbCBub3QgZGVmaW5lZCAqLworI2RlZmluZSBOVUxMIDBMCisvKiBvciAjZGVm aW5lIE5VTEwgMCAqLworLyogb3IgI2RlZmluZSBOVUxMICgoY2hhciAqKSAwKSAqLworLyogb3Ig I2RlZmluZSBOVUxMICgodm9pZCAqKSAwKSAqLworI2VuZGlmIC8qIE5VTEwgKi8KKworLyogTWFj cm8gdG8gZGlmZmVyZW50aWF0ZSAiIiBmcm9tIE5VTEwgKHRvIGF2b2lkIGNvbXBhcmlzb25zIHdp dGggbGl0ZXJhbHMpICovCisKKyNpZm5kZWYgaXNlbXB0eXN0cmluZworI2RlZmluZSBpc2VtcHR5 c3RyaW5nKHMpICgocz8oKnM/MDoxKTowKSkKKyNlbmRpZgkvKiBpc2VtcHR5c3RyaW5nICovCisK Ky8qIE1heGltdW0gbGVuZ3RoIGZvciBhIGZ1bGx5IHF1YWxpZmllZCBmaWxlbmFtZSwgbm90IGNv dW50aW5nIFwwIGF0IGVuZC4gKi8KKy8qCisgIFRoaXMgaXMgYSByb3VnaCBjdXQsIGFuZCBlcnJz IG9uIHRoZSBzaWRlIG9mIGJlaW5nIHRvbyBiaWcuICBXZSBkb24ndAorICB3YW50IHRvIHB1bGwg aW4gaHVuZHJlZHMgb2YgaGVhZGVyIGZpbGVzIGxvb2tpbmcgZm9yIG1hbnkgYW5kIHZhcmllZAor ICBzeW1ib2xzLCBmb3IgZmVhciBvZiBpbnRyb2R1Y2luZyB1bm5lY2Vzc2FyeSBjb25mbGljdHMu CisqLworI2lmbmRlZiBDS01BWFBBVEgKKyNpZmRlZiBWTVMJCQkJLyogVk1TIG1heSBoYXZlIGJh ZCAoc21hbGwsIE9EUzIpICovCisjZGVmaW5lIENLTUFYUEFUSCBOQU1YX0NfTUFYUlNTCQkvKiBQ QVRIX01BWCwgc28gdXNlIE5BTVhfQ19NQVhSU1MuICovCisjZWxzZSAvKiBkZWYgVk1TICovCisj aWZkZWYgTUFYUEFUSExFTgkJCS8qIChpdCBwcm9iYWJseSBpc24ndCkgKi8KKyNkZWZpbmUgQ0tN QVhQQVRIIE1BWFBBVEhMRU4KKyNlbHNlCisjaWZkZWYgUEFUSF9NQVgJCQkJLyogUE9TSVggKi8K KyNkZWZpbmUgQ0tNQVhQQVRIIFBBVEhfTUFYCisjZWxzZSAvKiBkZWYgUEFUSF9NQVggKi8KKyNp ZmRlZiBNQUMKKyNkZWZpbmUgQ0tNQVhQQVRIIDYzCisjZWxzZSAvKiBkZWYgTUFDICovCisjaWZk ZWYgcGRwMTEKKyNkZWZpbmUgQ0tNQVhQQVRIIDI1NQorI2Vsc2UgLyogZGVmIHBkcDExICovCisj aWZkZWYgVU5JWAkJCQkvKiBFdmVuIHRob3VnaCBzb21lIGFyZSB3YXkgbGVzcy4uLiAqLworI2Rl ZmluZSBDS01BWFBBVEggMTAyNAorI2Vsc2UgLyogZGVmIFVOSVggKi8KKyNpZmRlZiBTVFJBVFVT CisjZGVmaW5lIENLTUFYUEFUSCAyNTYJCQkvKiA9PSAkTVhQTCBmcm9tIFBBUlUuSCAqLworI2Vs c2UgLyogZGVmIFNUUkFUVVMgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2RlZmluZSBDS01BWFBB VEggMjU2CQkJLyogPT0gJE1YUEwgZnJvbSBQQVJVLkggKi8KKyNlbHNlIC8qIGRlZiBkYXRhZ2Vu ZXJhbCAqLworI2RlZmluZSBDS01BWFBBVEggMjU1CisjZW5kaWYgLyogZGVmIFNUUkFUVVMgW2Vs c2VdICovCisjZW5kaWYgLyogZGVmIGRhdGFnZW5lcmFsIFtlbHNlXSAqLworI2VuZGlmIC8qIGRl ZiBVTklYIFtlbHNlXSAqLworI2VuZGlmIC8qIGRlZiBwZHAxMSBbZWxzZV0gKi8KKyNlbmRpZiAv KiBkZWYgTUFDIFtlbHNlXSAqLworI2VuZGlmIC8qIGRlZiBQQVRIX01BWCBbZWxzZV0gKi8KKyNl bmRpZiAvKiBkZWYgTUFYUEFUSExFTiBbZWxzZV0gKi8KKyNlbmRpZiAvKiBkZWYgVk1TIFtlbHNl XSAqLworI2VuZGlmIC8qIG5kZWYgQ0tNQVhQQVRIICovCisKKy8qIE1heGltdW0gbGVuZ3RoIGZv ciB0aGUgbmFtZSBvZiBhIHR0eSBkZXZpY2UgKi8KKworI2lmbmRlZiBERVZOQU1MRU4KKyNkZWZp bmUgREVWTkFNTEVOIENLTUFYUEFUSAorI2VuZGlmIC8qIERFVk5BTUxFTiAqLworCisvKiBEaXJl Y3RvcnkgKHBhdGggc2VnbWVudCkgc2VwYXJhdG9yICovCisvKiBOb3QgZnVsbHkgZ2VuZXJhbCAt IFRyaWNreSBmb3IgVk1TLCBBbWlnYSwgLi4uICovCisKKyNpZm5kZWYgRElSU0VQCisjaWZkZWYg VU5JWAorI2RlZmluZSBESVJTRVAgJy8nCisjZGVmaW5lIElTRElSU0VQKGMpICgoYyk9PScvJykK KyNlbHNlCisjaWZkZWYgT1MyCisjZGVmaW5lIERJUlNFUCAnLycKKyNkZWZpbmUgSVNESVJTRVAo YykgKChjKT09Jy8nfHwoYyk9PSdcXCcpCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVm aW5lIERJUlNFUCAnOicKKyNkZWZpbmUgSVNESVJTRVAoYykgKCgoYyk9PSc6Jyl8fCgoYyk9PSde Jyl8fCgoYyk9PSc9JykpCisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyNkZWZpbmUgRElSU0VQICc+ JworI2RlZmluZSBJU0RJUlNFUChjKSAoKGMpPT0nPicpCisjZWxzZQorI2lmZGVmIFZNUworI2Rl ZmluZSBESVJTRVAgJ10nCQkJLyogKG5vdCByZWFsbHkpICovCisjZGVmaW5lIElTRElSU0VQKGMp ICgoYyk9PSddJ3x8KGMpPT0nOicpCisjZWxzZQorI2lmZGVmIE1BQworI2RlZmluZSBESVJTRVAg JzonCisjZGVmaW5lIElTRElSU0VQKGMpICgoYyk9PSc6JykKKyNlbHNlCisjaWZkZWYgQU1JR0EK KyNkZWZpbmUgRElSU0VQICcvJworI2RlZmluZSBJU0RJUlNFUChjKSAoKGMpPT0nLyd8fChjKT09 JzonKQorI2Vsc2UKKyNpZmRlZiBHRU1ET1MKKyNkZWZpbmUgRElSU0VQICdcXCcKKyNkZWZpbmUg SVNESVJTRVAoYykgKChjKT09J1xcJ3x8KGMpPT0nOicpCisjZWxzZQorI2RlZmluZSBESVJTRVAg Jy8nCisjZGVmaW5lIElTRElSU0VQKGMpICgoYyk9PScvJykKKyNlbmRpZiAvKiBHRU1ET1MgKi8K KyNlbmRpZiAvKiBBTUlHQSAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIFZNUyAqLwor I2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBESVJTRVAgKi8KKworLyogRklM RSBwYWNrYWdlIHBhcmFtZXRlcnMgKi8KKworI2lmZGVmIHBkcDExCisjZGVmaW5lIE5PQ0hBTk5F TElPCisjZWxzZQorCisjaWZuZGVmIENLTUFYT1BFTgorI2lmZGVmIFFOWAorI2RlZmluZSBDS01B WE9QRU4gMzkwCisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBDS01BWE9QRU4gNjQKKyNlbHNl CisjaWZkZWYgT1BFTl9NQVgKKyNkZWZpbmUgQ0tNQVhPUEVOIE9QRU5fTUFYCisjZWxzZQorI2lm ZGVmIEZPUEVOX01BWAorI2RlZmluZSBDS01BWE9QRU4gRk9QRU5fTUFYCisjZWxzZQorI2RlZmlu ZSBDS01BWE9QRU4gNjQKKyNlbmRpZiAvKiBGT1BFTl9NQVggKi8KKyNlbmRpZiAvKiBPUEVOX01B WCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIENLTUFY T1BFTiAqLworCisvKiBNYXhpbXVtIGNoYW5uZWxzIGZvciBGT1BFTiA9IENLTUFYT1BFTiBtaW51 cyBsb2dzLCBzdGRpbywgZXRjICovCisKKyNpZm5kZWYgWl9NSU5DSEFOCisjZGVmaW5lIFpfTUlO Q0hBTiAxNgorI2VuZGlmIC8qIFpfTUlOQ0hBTiAqLworCisjaWZuZGVmIFpfTUFYQ0hBTgorI2Rl ZmluZSBaX01BWENIQU4gKENLTUFYT1BFTi1aTkZJTFMtNSkKKyNlbmRpZiAvKiBaX01BWENIQU4g Ki8KKyNlbmRpZiAvKiBwZHAxMSAqLworCisvKiBOZXctZm9ybWF0IG56bHRvcigpIGFuZCBuenJ0 b2woKSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgcGF0aG5hbWVzICovCisKKyNpZm5kZWYgTlpMVE9S CisjaWZkZWYgVU5JWAorI2RlZmluZSBOWkxUT1IKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5l IE5aTFRPUgorI2Vsc2UKKyNpZmRlZiBPUzIKKyNkZWZpbmUgTlpMVE9SCisjZWxzZQorI2lmZGVm IFNUUkFUVVMKKyNkZWZpbmUgTlpMVE9SCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBO WkxUT1IgKi8KKworI2lmZGVmIE5aTFRPUgorX1BST1RPVFlQKCBWT0lEIG56bHRvciwgKGNoYXIg KiwgY2hhciAqLCBpbnQsIGludCwgaW50KSApOworX1BST1RPVFlQKCBWT0lEIG56cnRvbCwgKGNo YXIgKiwgY2hhciAqLCBpbnQsIGludCwgaW50KSApOworI2VuZGlmIC8qIE5aTFRPUiAqLworCisv KiBJbXBsZW1lbnRhdGlvbnMgd2l0aCBhIHpybWRpcigpIGZ1bmN0aW9uICovCisKKyNpZm5kZWYg WlJNRElSCisjaWZkZWYgT1MyCisjZGVmaW5lIFpSTURJUgorI2Vsc2UgLyogT1MyICovCisjaWZk ZWYgVU5JWAorI2RlZmluZSBaUk1ESVIKKyNlbHNlCisjaWZkZWYgVk1TCisjZGVmaW5lIFpSTURJ UgorI2Vsc2UgLyogVk1TICovCisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBaUk1ESVIKKyNlbmRp ZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWCAqLworI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFpSTURJUiAqLworCisjaWZkZWYgWlJNRElSCitfUFJP VE9UWVAoIGludCB6cm1kaXIsIChjaGFyICopICk7CisjZW5kaWYgLyogWlJNRElSICovCisKKyNp Zm5kZWYgRklMRUNBU0UKKyNpZmRlZiBVTklYT1JPU0sKKyNkZWZpbmUgRklMRUNBU0UgMQorI2Vs c2UKKyNkZWZpbmUgRklMRUNBU0UgMAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2lmbmRlZiBD S0NNQUkKK2V4dGVybiBpbnQgZmlsZWNhc2U7CisjZW5kaWYgLyogQ0tDTUFJICovCisjZW5kaWYg LyogRklMRUNBU0UgKi8KKworLyogRnVubnkgbmFtZXMgZm9yIGxpYnJhcnkgZnVuY3Rpb25zIGRl cGFydG1lbnQuLi4gKi8KKworI2lmZGVmIFpJTE9HCisjZGVmaW5lIHNldGptcCBzZXRyZXQKKyNk ZWZpbmUgbG9uZ2ptcCBsb25ncmV0CisjZGVmaW5lIGptcF9idWYgcmV0X2J1ZgorI2RlZmluZSBn ZXRjd2QgY3VyZGlyCisjZW5kaWYgLyogWklMT0cgKi8KKworI2lmZGVmIFNUUkFUVVMKKy8qIFRo ZSBDLXJ1bnRpbWUgY29uZmxpY3RzIHdpdGggdGhpbmdzIHdlIGRvIGluIFN0cmF0dXMgVk9TIGNr bHRpby5jIC4uLiAqLworI2RlZmluZSBwcmludGYgdm9zcHJ0ZgorX1BST1RPVFlQKCBpbnQgdm9z cHJ0ZiwgKGNoYXIgKmZtdCwgLi4uKSApOworI2RlZmluZSBwZXJyb3IodHh0KSBwcmludGYoIiVz XG4iLCB0eHQpCisvKiBjaGFyX3ZhcnlpbmcgaXMgYSBzdHJpbmcgdHlwZSBmcm9tIFBML0kgdGhh dCBWT1MgdXNlcyBleHRlbnNpdmVseSAqLworI2RlZmluZSBDViBjaGFyX3ZhcnlpbmcKKyNlbmRp ZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBOVAorZXh0ZXJuIGludCBPU1ZlcjsKKyNkZWZpbmUg aXNXaW45NSgpIChPU1Zlcj09VkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpCisjZWxzZQorI2Rl ZmluZSBpc1dpbjk1KCkgKDApCisjZW5kaWYgLyogTlQgKi8KKworI2lmbmRlZiBCUFJJTlQKKyNp ZmRlZiBPUzIKKyNkZWZpbmUgQlBSSU5UCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQlBS SU5UICovCisKKyNpZm5kZWYgU0VTTElNSVQKKyNpZmRlZiBPUzIKKyNkZWZpbmUgU0VTTElNSVQK KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBTRVNMSU1JVCAqLworCisjaWZuZGVmIE5PVEVS TQorI2lmbmRlZiBQQ1RFUk0KKyNpZmRlZiBOVAorI2RlZmluZSBQQ1RFUk0KKyNlbmRpZiAvKiBO VCAqLworI2VuZGlmIC8qIFBDVEVSTSAqLworI2VuZGlmIC8qIE5PVEVSTSAqLworCisjaWZkZWYg QkVPU09SQkVCT1gKKyNkZWZpbmUgcXVlcnkgY2txdWVyeQorI2VuZGlmIC8qIEJFT1NPUkJFQk9Y ICovCisKKyNpZm5kZWYgUFRZT1JQSVBFCQkJLyogTkVUQ01EIGFuZC9vciBORVRQVFkgZGVmaW5l ZCAqLworI2lmZGVmIE5FVENNRAorI2RlZmluZSBQVFlPUlBJUEUKKyNlbHNlCisjaWZkZWYgTkVU UFRZCisjZGVmaW5lIFBUWU9SUElQRQorI2VuZGlmIC8qIE5FVFBUWSAqLworI2VuZGlmIC8qIE5F VENNRCAqLworI2VuZGlmIC8qIFBUWU9SUElQRSAqLworCisvKiBta3RlbXAoKSBhbmQgbWtzdGVt cCgpICovCisKKyNpZm5kZWYgTk9NS1RFTVAKKyNpZm5kZWYgTUtURU1QCisjaWZkZWYgT1MyT1JV TklYCisjZGVmaW5lIE1LVEVNUAorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2VuZGlmIC8qIE1L VEVNUCAqLworCisjaWZkZWYgTUtURU1QCisjaWZuZGVmIE5PTUtTVEVNUAorI2lmbmRlZiBNS1NU RU1QCisjaWZkZWYgQlNENDQKKyNkZWZpbmUgTUtTVEVNUAorI2Vsc2UKKyNpZmRlZiBfX2xpbnV4 X18KKyNkZWZpbmUgTUtTVEVNUAorI2VuZGlmIC8qIF9fbGludXhfXyAqLworI2VuZGlmIC8qIEJT RDQ0ICovCisjZW5kaWYgLyogTUtTVEVNUCAqLworI2VuZGlmIC8qIE5PTUtTVEVNUCAqLworI2Vu ZGlmIC8qIE1LVEVNUCAqLworI2VuZGlmIC8qIE5PTUtURU1QICovCisKKy8qIFBsYXRmb3JtcyB0 aGF0IGhhdmUgbWVtY3B5KCkgLS0gb25seSBhZnRlciBhbGwgaGVhZGVycyBpbmNsdWRlZCAqLwor CisjaWZuZGVmIFVTRV9NRU1DUFkKKyNpZmRlZiBWTVMKKyNkZWZpbmUgVVNFX01FTUNQWQorI2Vs c2UKKyNpZmRlZiBORVhUCisjZGVmaW5lIFVTRV9NRU1DUFkKKyNlbHNlCisjaWZkZWYgT1MyCisj ZGVmaW5lIFVTRV9NRU1DUFkKKyNlbHNlCisjaWZkZWYgX19saW51eF9fCisjZGVmaW5lIFVTRV9N RU1DUFkKKyNlbHNlCisjaWZkZWYgU09MQVJJUworI2RlZmluZSBVU0VfTUVNQ1BZCisjZWxzZQor I2lmZGVmIFNVTk9TNAorI2RlZmluZSBVU0VfTUVNQ1BZCisjZWxzZQorI2lmZGVmIEFJWFJTCisj ZGVmaW5lIFVTRV9NRU1DUFkKKyNlbHNlCisjaWZkZWYgSFBVWAorI2RlZmluZSBVU0VfTUVNQ1BZ CisjZWxzZQorI2lmZGVmIFBPU0lYCisjZGVmaW5lIFVTRV9NRU1DUFkKKyNlbHNlCisjaWZkZWYg U1ZSNAorI2RlZmluZSBVU0VfTUVNQ1BZCisjZWxzZQorI2lmZGVmIE9TRgorI2RlZmluZSBVU0Vf TUVNQ1BZCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lIFVTRV9NRU1DUFkKKyNl bHNlCisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBVU0VfTUVNQ1BZCisjZW5kaWYgLyogU1RSQVRV UyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogT1NGICovCisjZW5kaWYg LyogU1ZSNCAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlm IC8qIEFJWFJTICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogU09MQVJJUyAqLwor I2VuZGlmIC8qIF9fbGludXhfXyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5FWFQg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCisKKyNpZm5kZWYg VVNFX01FTUNQWQorI2RlZmluZSBtZW1jcHkoYSxiLGMpIGNrbWVtY3B5KChhKSwoYiksKGMpKQor I2Vsc2UKKyNpZmRlZiBDS19TQ08zMlY0CisvKiBCZWNhdXNlIHRoZSBwcm90b3R5cGUgaXNuJ3Qg cGlja2VkIHVwIGluIHRoZSBub3JtYWwgaGVhZGVyIGZpbGVzICovCitfUFJPVE9UWVAoIHZvaWQg Km1lbWNweSwgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpKTsKKyNlbmRpZiAvKiBDS19T Q08zMlY0ICovCisjZW5kaWYgLyogVVNFX01FTUNQWSAqLworCisvKiBVc2VyIGF1dGhlbnRpY2F0 aW9uIGZvciBJS1MgLS0gU28gZmFyIEs5NSBhbmQgVU5JWCBvbmx5ICovCisKKyNpZmRlZiBOT0lD UAorI2lmbmRlZiBOT0xPR0lOCisjZGVmaW5lIE5PTE9HSU4KKyNlbmRpZiAvKiBOT0xPR0lOICov CisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0xPR0lOCisjaWZkZWYgT1MyT1JVTklY CisjaWZuZGVmIENLX0xPR0lOCisjZGVmaW5lIENLX0xPR0lOCisjaWZuZGVmIE5PU0hBRE9XCisj aWZkZWYgQ0tfU0NPVjUKKyNkZWZpbmUgQ0tfU0hBRE9XCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8K KyNlbmRpZiAvKiBOT1NIQURPVyAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisjaWZkZWYgTlQK KyNkZWZpbmUgTlRDUkVBVEVUT0tFTgorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogT1MyT1JV TklYICovCisjZWxzZSAvKiBOT0xPR0lOICovCisjaWZkZWYgQ0tfTE9HSU4KKyN1bmRlZiBDS19M T0dJTgorI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogTk9MT0dJTiAqLworCisjaWZk ZWYgT1MyCisjZGVmaW5lIENLU1BJTk5FUgorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tf TE9HSU4JCQkJLyogVGVsbmV0IHByb3RvY29sIHJlcXVpcmVkICovCisjaWZuZGVmIFROQ09ERQkJ CQkvKiBmb3IgbG9naW4gdG8gSUtTRC4gKi8KKyNkZWZpbmUgVE5DT0RFCisjZW5kaWYgLyogVE5D T0RFICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9O CisjaWZkZWYgTk9TRU5EVUlECisjdW5kZWYgTk9TRU5EVUlECisjZW5kaWYgLyogTk9TRU5EVUlE ICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2lmZGVmIFROQ09ERQkJCQkv KiBTaG91bGQgVEVMTkVUIHNlbmQgdXNlciBJRD8gKi8KKyNpZm5kZWYgTk9TRU5EVUlECisjaWZu ZGVmIENLU0VORFVJRAorI2RlZmluZSBDS1NFTkRVSUQKKyNlbmRpZiAvKiBDS1NFTkRVSUQgKi8K KyNlbmRpZiAvKiBOT1NFTkRVSUQgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworLyogVU5JWCBw bGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIGdldHVzZXJzaGVsbCgpICovCisKKyNpZmRlZiBVTklY CisjaWZuZGVmIE5PR0VUVVNFUlNIRUxMCisjaWZkZWYgSVJJWAorI2RlZmluZSBOT0dFVFVTRVJT SEVMTAorI2Vsc2UKKyNpZmRlZiBQVFgKKyNkZWZpbmUgTk9HRVRVU0VSU0hFTEwKKyNlbHNlCisj aWZkZWYgQUlYUlMKKyNkZWZpbmUgTk9HRVRVU0VSU0hFTEwKKyNlbHNlCisjaWZkZWYgU0lOSVgK KyNkZWZpbmUgTk9HRVRVU0VSU0hFTEwKKyNlbHNlCisjaWZkZWYgVU5JWFdBUkUKKyNkZWZpbmUg Tk9HRVRVU0VSU0hFTEwKKyNlbHNlCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZpbmUgTk9HRVRVU0VS U0hFTEwKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIFVOSVhXQVJFICovCisjZW5k aWYgLyogU0lOSVggKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8qIFBUWCAqLworI2Vu ZGlmIC8qIElSSVggKi8KKyNlbmRpZiAvKiBOT0dFVFVTRVJTSEVMTCAqLworI2VuZGlmIC8qIFVO SVggKi8KKworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyNpZm5kZWYgTk9TWVNMT0cKKyNp Zm5kZWYgQ0tTWVNMT0cKKyNkZWZpbmUgQ0tTWVNMT0cKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLwor I2VuZGlmIC8qIE5PU1lTTE9HICovCisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBVTklYCisjaWZu ZGVmIE5PU1lTTE9HCisjaWZuZGVmIENLU1lTTE9HCisjZGVmaW5lIENLU1lTTE9HCisjZW5kaWYg LyogQ0tTWVNMT0cgKi8KKyNlbmRpZiAvKiBOT1NZU0xPRyAqLworI2lmbmRlZiBOT1dUTVAKKyNp Zm5kZWYgQ0tXVE1QCisjZGVmaW5lIENLV1RNUAorI2VuZGlmIC8qIENLV1RNUCAqLworI2VuZGlm IC8qIE5PV1RNUCAqLworI2lmbmRlZiBOT0dFVFVTRVJTSEVMTAorI2lmbmRlZiBHRVRVU0VSU0hF TEwKKyNkZWZpbmUgR0VUVVNFUlNIRUxMCisjZW5kaWYgLyogR0VUVVNFUlNIRUxMICovCisjZW5k aWYgLyogTk9HRVRVU0VSU0hFTEwgKi8KKyNlbmRpZiAvKiBVTklYICovCitfUFJPVE9UWVAoIGlu dCBja3hsb2dpbiwgKENIQVIgKiwgQ0hBUiAqLCBDSEFSICosIGludCkpOworX1BST1RPVFlQKCBp bnQgY2t4bG9nb3V0LCAoVk9JRCkpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyNpZm5kZWYg Tk9aTE9DQUxUSU1FCQkJLyogemxvY2FsdGltZSgpIGF2YWlsYWJsZS4gKi8KKyNpZmRlZiBPUzJP UlVOSVgKKyNkZWZpbmUgWkxPQ0FMVElNRQorX1BST1RPVFlQKCBjaGFyICogemxvY2FsdGltZSwg KGNoYXIgKikgKTsKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBOT1pMT0NBTFRJ TUUgKi8KKworI2lmZGVmIENLU1lTTE9HCQkJCS8qIFN5c2xvZ2dpbmcgbGV2ZWxzICovCisjZGVm aW5lIFNZU0xHX05PIDAJCQkvKiBObyBsb2dnaW5nICovCisjZGVmaW5lIFNZU0xHX0xJIDEJCQkv KiBMb2dpbi9vdXQgKi8KKyNkZWZpbmUgU1lTTEdfREkgMgkJCS8qIERpYWxpbmcgb3V0ICovCisj ZGVmaW5lIFNZU0xHX0FDIDMJCQkvKiBNYWtpbmcgYW55IGtpbmQgb2YgY29ubmVjdGlvbiAqLwor I2RlZmluZSBTWVNMR19QUiA0ICAgICAgICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIE9wZXJh dGlvbnMgKi8KKyNkZWZpbmUgU1lTTEdfRkMgNQkJCS8qIEZpbGUgY3JlYXRpb24gKi8KKyNkZWZp bmUgU1lTTEdfRkEgNgkJCS8qIEZpbGUgcmVhZGluZyAqLworI2RlZmluZSBTWVNMR19DTSA3CQkJ LyogVG9wLWxldmVsIGNvbW1hbmRzICovCisjZGVmaW5lIFNZU0xHX0NYIDgJCQkvKiBBbGwgY29t bWFuZHMgKi8KKyNkZWZpbmUgU1lTTEdfREIgOQkJCS8qIERlYnVnICovCisjZGVmaW5lIFNZU0xH TUFYIDkJCQkvKiBIaWdoZXN0IGxldmVsICovCisjZGVmaW5lIFNZU0xHX0RGIFNZU0xHX0ZBCQkv KiBEZWZhdWx0IGxldmVsICovCisvKiBMb2dnaW5nIGZ1bmN0aW9uICovCitfUFJPVE9UWVAoVk9J RCBja3N5c2xvZywoaW50LCBpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICopKTsKKyNlbmRpZiAv KiBDS1NZU0xPRyAqLworI2lmbmRlZiBDS0NNQUkKK2V4dGVybiBpbnQgY2t4bG9nZ2luZywgY2t4 c3lzbG9nLCBpa2Rib3BlbjsKKyNlbmRpZiAvKiBDS0NNQUkgKi8KKworI2lmbmRlZiBDS19LRVlU QUIKKyNkZWZpbmUgQ0tfS0VZVEFCCisvKiBLZXl3b3JkIFRhYmxlIFRlbXBsYXRlICovCisKKy8q IE5vdGU6IGZvcm1lcmx5IGRlZmluZWQgaW4gY2t1Y21kLmggYnV0IG5vdyBtb3JlIHdpZGVseSB1 c2VkICovCisKK3N0cnVjdCBrZXl0YWIgewkJCQkvKiBLZXl3b3JkIHRhYmxlICovCisgICAgY2hh ciAqa3dkOwkJCQkvKiBQb2ludGVyIHRvIGtleXdvcmQgc3RyaW5nICovCisgICAgaW50IGt3dmFs OwkJCQkvKiBBc3NvY2lhdGVkIHZhbHVlICovCisgICAgaW50IGZsZ3M7CQkJCS8qIEZsYWdzIChh cyBkZWZpbmVkIGFib3ZlKSAqLworfTsKKyNlbmRpZiAvKiBDS19LRVlUQUIgKi8KKworI2lmZGVm IFVOSVgKK19QUk9UT1RZUCggaW50IGlzYWxpbmssIChjaGFyICopKTsKKyNlbmRpZgkvKiBVTklY ICovCisKKyNpZmRlZiBORVRQVFkKK19QUk9UT1RZUCggaW50IGRvX3B0eSwgKGludCAqLCBjaGFy ICosIGludCkpOworX1BST1RPVFlQKCBWT0lEIGVuZF9wdHksICh2b2lkKSk7CisjZW5kaWYgLyog TkVUUFRZICovCisKKyNpZmRlZiBDS1JPT1QKK19QUk9UT1RZUCggaW50IHpzZXRyb290LCAoY2hh ciAqKSApOworX1BST1RPVFlQKCBjaGFyICogemdldHJvb3QsICh2b2lkKSApOworX1BST1RPVFlQ KCBpbnQgemlucm9vdCwgKGNoYXIgKikgKTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworLyogTG9j YWwgRWNobyBCdWZmZXIgcHJvdG90eXBlcyAqLworX1BST1RPVFlQKCBWT0lEIGxlX2luaXQsICh2 b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGxlX2NsZWFuLCAodm9pZCkpOworX1BST1RPVFlQKCBp bnQgbGVfaW5idWYsICh2b2lkKSk7CitfUFJPVE9UWVAoIGludCBsZV9wdXRzdHIsIChDSEFSICop KTsKK19QUk9UT1RZUCggaW50IGxlX3B1dHMsIChDSEFSICosIGludCkpOworX1BST1RPVFlQKCBp bnQgbGVfcHV0Y2hhciwgKENIQVIpKTsKK19QUk9UT1RZUCggaW50IGxlX2dldGNoYXIsIChDSEFS ICopKTsKKworLyogI2lmbmRlZiBOT0hUVFAgKi8KKyNpZm5kZWYgTk9DTURBVEUyVE0KKyNpZm5k ZWYgQ01EQVRFMlRNCisjaWZkZWYgT1MyT1JVTklYCisjZGVmaW5lIENNREFURTJUTQorI2VuZGlm IC8qIE9TMk9SVU5JWCAqLworI2lmZGVmIFZNUworI2RlZmluZSBDTURBVEUyVE0KKyNlbmRpZiAv KiBWTVMgKi8KKyNlbmRpZiAvKiBDTURBVEUyVE0gKi8KKyNlbmRpZiAvKiBOT0NNREFURTJUTSAq LworCisjaWZkZWYgQ01EQVRFMlRNCitfUFJPVE9UWVAoIHN0cnVjdCB0bSAqIGNtZGF0ZTJ0bSwg KGNoYXIgKixpbnQpKTsKKyNlbmRpZiAvKiBDTURBVEUyVE0gKi8KKy8qICNlbmRpZiAqLyAvKiBO T0hUVFAgKi8KKworI2lmbmRlZiBOT1NFVFRJTUUJCQkvKiBUaGlzIHdvdWxkIGJlIHNldCBpbiBD RkxBR1MgKi8KKyNpZmRlZiBTVlI0T1JQT1NJWAkJCS8qIERlZmluZWQgaW4gSUVFRSAxMDAzLjEt MTk5NiAqLworI2lmbmRlZiBVVElNRUgJCQkJLyogYW5kIGluIFNWSUQgZm9yIFNWUjQgKi8KKyNk ZWZpbmUgVVRJTUVICisjZW5kaWYgLyogVVRJTUVIICovCisjZWxzZSAgLyogU1ZSNE9SUE9TSVgg Ki8KKyNpZmRlZiBPU0YJCQkJLyogVmVyaWZpZWQgYnkgTHVjYXMgSGFydCAqLworI2lmbmRlZiBV VElNRUgKKyNkZWZpbmUgVVRJTUVICisjZW5kaWYgLyogVVRJTUVIICovCisjZWxzZSAgLyogT1NG ICovCisjaWZkZWYgU1VOT1M0MQkJCQkvKiBWZXJpZmllZCBieSBMdWNhcyBIYXJ0ICovCisjaWZu ZGVmIFVUSU1FSAorI2RlZmluZSBVVElNRUgKKyNlbmRpZiAvKiBVVElNRUggKi8KKyNlbHNlICAv KiBTVU5PUzQxICovCisjaWZkZWYgT1MyCisjaWZuZGVmIFNZU1VUSU1FSAorI2RlZmluZSBTWVNV VElNRUgKKyNlbmRpZiAvKiBTWVNVVElNRUggKi8KKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIFZN UworI2lmbmRlZiBVVElNRUgKKyNkZWZpbmUgVVRJTUVICisjZW5kaWYgLyogVVRJTUVIICovCisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogU1VOT1M0MSAqLwor I2VuZGlmIC8qIE9TRiAqLworI2VuZGlmIC8qIFNWUjRPUlBPU0lYICovCisjZW5kaWYgLyogTk9T RVRUSU1FICovCisKKyNpZmRlZiBORVdGVFAKK19QUk9UT1RZUCggaW50IGZ0cGlzY29ubmVjdGVk LCAodm9pZCkpOworX1BST1RPVFlQKCBpbnQgZnRwaXNsb2dnZWRpbiwgKHZvaWQpKTsKK19QUk9U T1RZUCggaW50IGZ0cGlzc2VjdXJlLCAodm9pZCkpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCitf UFJPVE9UWVAoIGludCByZWFkcGFzcywgKGNoYXIgKiwgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZ UCggaW50IHJlYWR0ZXh0LCAoY2hhciAqLCBjaGFyICosIGludCkpOworCisjaWZkZWYgT1MyCitf UFJPVE9UWVAoaW50IGNrX2F1dGhfbG9hZGRsbCwgKFZPSUQpKTsKK19QUk9UT1RZUChpbnQgY2tf YXV0aF91bmxvYWRkbGwsIChWT0lEKSk7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBOVAor X1BST1RPVFlQKERXT1JEIGNrR2V0TG9uZ1BhdGhuYW1lLChMUENTVFIgbHBGaWxlTmFtZSwgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGxwQnVmZmVyLCBEV09SRCBj Y2hCdWZmZXIpKTsKKyNlbmRpZiAvKiBOVCAqLworCisKKyNpbmNsdWRlICJja2NsaWIuaCIKKwor LyogRW5kIG9mIGNrY2RlYi5oICovCisjZW5kaWYgLyogQ0tDREVCX0ggKi8KCmRpZmYgLS1naXQg YS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY2ZuMi5jIGIvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbjIuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi41ZmEwNTA3Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmbjIuYwpAQCAtMCwwICsxLDMzNTAgQEAK Ky8qICBDIEsgQyBGIE4gMiAgLS0gIFN5c3RlbS1pbmRlcGVuZGVudCBLZXJtaXQgcHJvdG9jb2wg c3VwcG9ydCBmdW5jdGlvbnMuLi4gKi8KKworLyogIC4uLlBhcnQgMiAoY29udGludWVkIGZyb20g Y2tjZm5zLmMpICAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJp YS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3Rl bXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAorICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisg ICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmls ZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBk aXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisvKgorIE5vdGUgLS0gaWYgeW91IGNoYW5n ZSB0aGlzIGZpbGUsIHBsZWFzZSBhbWVuZCB0aGUgdmVyc2lvbiBudW1iZXIgYW5kIGRhdGUgYXQK KyB0aGUgdG9wIG9mIGNrY2Zucy5jIGFjY29yZGluZ2x5LgorKi8KKworI2luY2x1ZGUgImNrY3N5 bS5oIgkJCS8qIENvbXBpbGF0aW9uIG9wdGlvbnMgKi8KKyNpbmNsdWRlICJja2NkZWIuaCIJCQkv KiBEZWJ1Z2dpbmcgYW5kIG90aGVyIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja2Nhc2MuaCIJCQkv KiBBU0NJSSBzeW1ib2xzICovCisjaW5jbHVkZSAiY2tja2VyLmgiCQkJLyogS2VybWl0IHN5bWJv bHMgKi8KKyNpbmNsdWRlICJja2N4bGEuaCIJCQkvKiBUcmFuc2xhdGlvbiAqLworI2luY2x1ZGUg ImNrY25ldC5oIgkJCS8qIElLUyBhbmQgVk1TICNkZWZpbmUgVENQU09DS0VUICovCisjaWZkZWYg VENQU09DS0VUCQkJLyogRm9yIFRFTE5FVCBidXNpbmVzcyBpbiBzcGFjaygpICovCitleHRlcm4g aW50IHRuX25sbSwgdHRucHJvdG8sIHRuX2JfbmxtOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor CitleHRlcm4gaW50IHBhcml0eSwgbmV0d29yaywgbG9jYWwsIGludGVycnVwdGVkLCBmYXRhbGlv LCB3YXNjbG9zZWQ7CisKK2ludCBrc3RhcnRhY3RpdmUgPSAwOwkJCS8qIEZsYWcgZm9yIGtzdGFy dCgpIGluIGEgcGFja2V0ICovCisKK3N0YXRpYyBDSEFSIHBfdGJsW10gPSB7CQkJLyogRXZlbiBw YXJpdHkgdGFibGUgZm9yIGRvcGFyKCkuICovCisgICAgKENIQVIpICdcMDAwJywJCQkvKiBBTlNJ IEMgY2FzdHMgJ1xvb28nIGNvbnN0YW50cyAgKi8KKyAgICAoQ0hBUikgJ1wyMDEnLAkJCS8qIHRv IHNpZ25lZCBjaGFyLCBzbyB3ZSBoYXZlIHRvICAqLworICAgIChDSEFSKSAnXDIwMicsCQkJLyog Y2FzdCBiYWNrIHRvIHVuc2lnbmVkIGNoYXIuLi4gICovCisgICAgKENIQVIpICdcMDAzJywKKyAg ICAoQ0hBUikgJ1wyMDQnLAorICAgIChDSEFSKSAnXDAwNScsCisgICAgKENIQVIpICdcMDA2JywK KyAgICAoQ0hBUikgJ1wyMDcnLAorICAgIChDSEFSKSAnXDIxMCcsCisgICAgKENIQVIpICdcMDEx JywKKyAgICAoQ0hBUikgJ1wwMTInLAorICAgIChDSEFSKSAnXDIxMycsCisgICAgKENIQVIpICdc MDE0JywKKyAgICAoQ0hBUikgJ1wyMTUnLAorICAgIChDSEFSKSAnXDIxNicsCisgICAgKENIQVIp ICdcMDE3JywKKyAgICAoQ0hBUikgJ1wyMjAnLAorICAgIChDSEFSKSAnXDAyMScsCisgICAgKENI QVIpICdcMDIyJywKKyAgICAoQ0hBUikgJ1wyMjMnLAorICAgIChDSEFSKSAnXDAyNCcsCisgICAg KENIQVIpICdcMjI1JywKKyAgICAoQ0hBUikgJ1wyMjYnLAorICAgIChDSEFSKSAnXDAyNycsCisg ICAgKENIQVIpICdcMDMwJywKKyAgICAoQ0hBUikgJ1wyMzEnLAorICAgIChDSEFSKSAnXDIzMics CisgICAgKENIQVIpICdcMDMzJywKKyAgICAoQ0hBUikgJ1wyMzQnLAorICAgIChDSEFSKSAnXDAz NScsCisgICAgKENIQVIpICdcMDM2JywKKyAgICAoQ0hBUikgJ1wyMzcnLAorICAgIChDSEFSKSAn XDI0MCcsCisgICAgKENIQVIpICdcMDQxJywKKyAgICAoQ0hBUikgJ1wwNDInLAorICAgIChDSEFS KSAnXDI0MycsCisgICAgKENIQVIpICdcMDQ0JywKKyAgICAoQ0hBUikgJ1wyNDUnLAorICAgIChD SEFSKSAnXDI0NicsCisgICAgKENIQVIpICdcMDQ3JywKKyAgICAoQ0hBUikgJ1wwNTAnLAorICAg IChDSEFSKSAnXDI1MScsCisgICAgKENIQVIpICdcMjUyJywKKyAgICAoQ0hBUikgJ1wwNTMnLAor ICAgIChDSEFSKSAnXDI1NCcsCisgICAgKENIQVIpICdcMDU1JywKKyAgICAoQ0hBUikgJ1wwNTYn LAorICAgIChDSEFSKSAnXDI1NycsCisgICAgKENIQVIpICdcMDYwJywKKyAgICAoQ0hBUikgJ1wy NjEnLAorICAgIChDSEFSKSAnXDI2MicsCisgICAgKENIQVIpICdcMDYzJywKKyAgICAoQ0hBUikg J1wyNjQnLAorICAgIChDSEFSKSAnXDA2NScsCisgICAgKENIQVIpICdcMDY2JywKKyAgICAoQ0hB UikgJ1wyNjcnLAorICAgIChDSEFSKSAnXDI3MCcsCisgICAgKENIQVIpICdcMDcxJywKKyAgICAo Q0hBUikgJ1wwNzInLAorICAgIChDSEFSKSAnXDI3MycsCisgICAgKENIQVIpICdcMDc0JywKKyAg ICAoQ0hBUikgJ1wyNzUnLAorICAgIChDSEFSKSAnXDI3NicsCisgICAgKENIQVIpICdcMDc3JywK KyAgICAoQ0hBUikgJ1wzMDAnLAorICAgIChDSEFSKSAnXDEwMScsCisgICAgKENIQVIpICdcMTAy JywKKyAgICAoQ0hBUikgJ1wzMDMnLAorICAgIChDSEFSKSAnXDEwNCcsCisgICAgKENIQVIpICdc MzA1JywKKyAgICAoQ0hBUikgJ1wzMDYnLAorICAgIChDSEFSKSAnXDEwNycsCisgICAgKENIQVIp ICdcMTEwJywKKyAgICAoQ0hBUikgJ1wzMTEnLAorICAgIChDSEFSKSAnXDMxMicsCisgICAgKENI QVIpICdcMTEzJywKKyAgICAoQ0hBUikgJ1wzMTQnLAorICAgIChDSEFSKSAnXDExNScsCisgICAg KENIQVIpICdcMTE2JywKKyAgICAoQ0hBUikgJ1wzMTcnLAorICAgIChDSEFSKSAnXDEyMCcsCisg ICAgKENIQVIpICdcMzIxJywKKyAgICAoQ0hBUikgJ1wzMjInLAorICAgIChDSEFSKSAnXDEyMycs CisgICAgKENIQVIpICdcMzI0JywKKyAgICAoQ0hBUikgJ1wxMjUnLAorICAgIChDSEFSKSAnXDEy NicsCisgICAgKENIQVIpICdcMzI3JywKKyAgICAoQ0hBUikgJ1wzMzAnLAorICAgIChDSEFSKSAn XDEzMScsCisgICAgKENIQVIpICdcMTMyJywKKyAgICAoQ0hBUikgJ1wzMzMnLAorICAgIChDSEFS KSAnXDEzNCcsCisgICAgKENIQVIpICdcMzM1JywKKyAgICAoQ0hBUikgJ1wzMzYnLAorICAgIChD SEFSKSAnXDEzNycsCisgICAgKENIQVIpICdcMTQwJywKKyAgICAoQ0hBUikgJ1wzNDEnLAorICAg IChDSEFSKSAnXDM0MicsCisgICAgKENIQVIpICdcMTQzJywKKyAgICAoQ0hBUikgJ1wzNDQnLAor ICAgIChDSEFSKSAnXDE0NScsCisgICAgKENIQVIpICdcMTQ2JywKKyAgICAoQ0hBUikgJ1wzNDcn LAorICAgIChDSEFSKSAnXDM1MCcsCisgICAgKENIQVIpICdcMTUxJywKKyAgICAoQ0hBUikgJ1wx NTInLAorICAgIChDSEFSKSAnXDM1MycsCisgICAgKENIQVIpICdcMTU0JywKKyAgICAoQ0hBUikg J1wzNTUnLAorICAgIChDSEFSKSAnXDM1NicsCisgICAgKENIQVIpICdcMTU3JywKKyAgICAoQ0hB UikgJ1wzNjAnLAorICAgIChDSEFSKSAnXDE2MScsCisgICAgKENIQVIpICdcMTYyJywKKyAgICAo Q0hBUikgJ1wzNjMnLAorICAgIChDSEFSKSAnXDE2NCcsCisgICAgKENIQVIpICdcMzY1JywKKyAg ICAoQ0hBUikgJ1wzNjYnLAorICAgIChDSEFSKSAnXDE2NycsCisgICAgKENIQVIpICdcMTcwJywK KyAgICAoQ0hBUikgJ1wzNzEnLAorICAgIChDSEFSKSAnXDM3MicsCisgICAgKENIQVIpICdcMTcz JywKKyAgICAoQ0hBUikgJ1wzNzQnLAorICAgIChDSEFSKSAnXDE3NScsCisgICAgKENIQVIpICdc MTc2JywKKyAgICAoQ0hBUikgJ1wzNzcnCit9OworCisvKiAgRCBPIFAgQSBSICAtLSAgQWRkIGFu IGFwcHJvcHJpYXRlIHBhcml0eSBiaXQgdG8gYSBjaGFyYWN0ZXIgICovCisKK0NIQVIKKyNpZmRl ZiBDS19BTlNJQworZG9wYXIocmVnaXN0ZXIgQ0hBUiBjaCkKKyNlbHNlCitkb3BhcihjaCkgcmVn aXN0ZXIgQ0hBUiBjaDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIHsKKyAgICByZWdpc3Rl ciB1bnNpZ25lZCBpbnQgYTsKKyAgICBpZiAoIXBhcml0eQorI2lmZGVmIFRDUFNPQ0tFVAorICAg ICAgICB8fCAobmV0d29yayAmJiAodHRucHJvdG8gPT0gTlBfVEVMTkVUKSAmJiAoVEVMT1BUX01F KFRFTE9QVF9CSU5BUlkpKSkKKyNpZm5kZWYgTk9YRkVSCisJfHwgKCFsb2NhbCAmJiBzc3RlbG5l dCkJCS8qIFRFTE5FVCBCSU5BUlkgTU9ERSAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLworICAgICAgICApIHJldHVybigoQ0hBUikgKGNoICYgMjU1KSk7IGVs c2UgYSA9IGNoICYgMTI3OworICAgIHN3aXRjaCAocGFyaXR5KSB7CisJY2FzZSAnZSc6ICByZXR1 cm4ocF90YmxbYV0pOwkgICAgICAgICAgICAgLyogRXZlbiAqLworCWNhc2UgJ20nOiAgcmV0dXJu KChDSEFSKSAoYSB8IDEyOCkpOyAgICAgICAgIC8qIE1hcmsgKi8KKwljYXNlICdvJzogIHJldHVy bigoQ0hBUikgKHBfdGJsW2FdIF4gMTI4KSk7ICAvKiBPZGQgKi8KKwljYXNlICdzJzogIHJldHVy bigoQ0hBUikgYSk7CSAgICAgICAgICAgICAvKiBTcGFjZSAqLworCWRlZmF1bHQ6ICAgcmV0dXJu KChDSEFSKSBhKTsgICAgICAgICAgICAgICAgIC8qIFNvbWV0aGluZyBpbGxlZ2FsICovCisgICAg fQorfQorCisjaWZuZGVmIE5PWEZFUgkJCQkvKiBSZXN0IG9mIHRoaXMgZmlsZS4uLiAqLworCisj ZGVmaW5lIE5FV0RQTAkJCQkvKiBOZXcgZHluYW1pYyBwYWNrZXQgbGVuZ3RoIG1ldGhvZCAqLwor CisjaWZkZWYgVk1TCitleHRlcm4gaW50IGJhdGNoOworI2Vsc2UKK2V4dGVybiBpbnQgYmFja2dy ZDsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIERZTkFNSUMKK2V4dGVybiBzdHJ1Y3QgcGt0 aW5mbyAqc19wa3Q7CQkvKiBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8KK2V4dGVybiBz dHJ1Y3QgcGt0aW5mbyAqcl9wa3Q7CQkvKiBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8K KyNlbHNlCitleHRlcm4gc3RydWN0IHBrdGluZm8gc19wa3RbXTsJCS8qIGFycmF5IG9mIHBrdGlu Zm8gc3RydWN0dXJlcyAqLworZXh0ZXJuIHN0cnVjdCBwa3RpbmZvIHJfcGt0W107CQkvKiBhcnJh eSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8KKyNlbmRpZiAvKiBEWU5BTUlDICovCisKK2V4dGVy biBpbnQgc3NlcXRibFtdLCByc2VxdGJsW10sIHNidWZ1c2VbXSwgc2Fja3RibFtdLCB3c2xvdHMs IHdpbmxvLCB3c2xvdG4sCisgIHNidWZudW0sIHJidWZudW0sIHBrdHBhdXMsIHJlbGlhYmxlOwor CisjaWZkZWYgU1RSRUFNSU5HCitzdGF0aWMgaW50IGRvbnRzZW5kID0gMDsKK2V4dGVybiBpbnQg c3RyZWFtaW5nOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCitleHRlcm4gaW50IHR0cHJ0eTsJ CQkvKiBmcm9tIGNrKnRpby5jICovCitleHRlcm4gaW50IGF1dG9wYXI7CisKK2V4dGVybiBpbnQg c3BzaXosIHNwbWF4LCBycHNpeiwgdGltaW50LCB0aW1lZiwgbnBhZCwgYmVzdGxlbiwgbWF4c2Vu ZDsKK2V4dGVybiBpbnQgcnB0LCBycHRxLCBycHRmbGcsIGNhcGFzLCBzcHNpemYsIGVuX2Zpbiwg dHNlY3MsIGZsb3c7CitleHRlcm4gaW50IHBrdG51bSwgc25kdHlwLCByY3Z0eXAsIGJjdHIsIGJj dHUsIGJjdGYsIGJjdGwsIHJzbiwgcmxuLCBtYXh0cnk7CitleHRlcm4gaW50IHNpemUsIG9zaXpl LCBtYXhzaXplLCBzcGt0bCwgcnBrdGwsIG5maWxzLCBzdGRvdWYsIGZzZWNzOworZXh0ZXJuIGlu dCB0dXJuLCB0dXJuY2gsIGRpc3BsYSwgcGt0bG9nLCBzZXNsb2csIHhmbGcsIG15cGFkbjsKK2V4 dGVybiBpbnQgaGNmbGcsIHNlcnZlciwgY3hzZWVuLCBjenNlZW4sIGRpc2NhcmQsIHNsb3N0YXJ0 OworZXh0ZXJuIGludCBuYWtzdGF0ZSwgcXVpZXQsIHN1Y2Nlc3MsIHhpdHN0YSwgd2hhdCwgZmls ZXN0YXR1czsKK2V4dGVybiBpbnQgc3BhY2tldHMsIHJwYWNrZXRzLCB0aW1lb3V0cywgcmV0cmFu cywgY3J1bmNoZWQsIHVycHNpejsKK2V4dGVybiBpbnQgY2FycmllciwgZmRpc3BsYSwgc3J2aWRs OworCisjaWZkZWYgR0ZUSU1FUgorZXh0ZXJuIENLRkxPQVQgZnB0c2VjcywgZnBmc2VjcywgZnB4 ZnNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCitleHRlcm4gbG9uZyBmaWxjbnQsIGZpbHJl aiwgc3BlZWQsIGZpbGNwcywgdGZjcHM7CitleHRlcm4gQ0tfT0ZGX1QgZmZjLCBmbGNpLCBmbGNv LCB0bGNpLCB0bGNvLCB0ZmM7CisKK2V4dGVybiBjaGFyICpjbWFyZywgZmlsbmFtW107CisKK2V4 dGVybiBDSEFSIHBhZGNoLCBteXBhZGMsIGVvbCwgc2VvbCwgY3RscSwgc3N0YXRlOworZXh0ZXJu IENIQVIgKnJlY3BrdCwgKmRhdGEsIG15aW5pdFtdOworZXh0ZXJuIENIQVIgKnNydnB0ciwgc3Rj aHIsIG15c3RjaCwgKnJkYXRhcDsKK2V4dGVybiBDSEFSIHBhZGJ1ZltdOworZXh0ZXJuIENIQVIg KiBlcGt0bXNnOworZXh0ZXJuIGludCBlcGt0cmN2ZCwgZXBrdHNlbnQ7CisKKyNpZmRlZiBPUzIJ CQkJLyogQVVUT0RPV05MT0FEIHBhcmFtZXRlcnMgKi8KK2V4dGVybiBpbnQgYWRsX2ttb2RlLCBh ZGxfem1vZGU7CS8qIE1hdGNoIFBhY2tldCB0byBzaWduYWwgZG93bmxvYWQgKi8KK2V4dGVybiBj aGFyICogYWRsX2tzdHI7CQkJLyogS0VSTUlUIERvd25sb2FkIFN0cmluZyAqLworZXh0ZXJuIGNo YXIgKiBhZGxfenN0cjsJCQkvKiBaTU9ERU0gRG93bmxvYWQgU3RyaW5nICovCisjZW5kaWYgLyog T1MyICovCisKKyNpZmRlZiBDS19BVVRPREwKK0NIQVIga3NidWZbOTZdID0geyBOVUwsIE5VTCB9 OwkJLyogQXV0b2Rvd25sb2FkICJLZXJtaXQgU3RhcnQiIGJ1ZiAqLworI2VuZGlmIC8qIENLX0FV VE9ETCAqLworCitpbnQgbnVtZXJycyA9IDA7CQkJLyogTnVtYmVyIG9mIHBhY2tldCBlcnJvcnMg c28gZmFyICovCitpbnQgcmN2dGltbyA9IDA7CQkJLyogVGltZW91dCBmb3IgcmVjZWl2aW5nIGEg cGFja2V0ICovCitpbnQgaWRsZXRtbyA9IDA7CQkJLyogRmxhZyBmb3IgaWRsZSB0aW1lb3V0ICov CisKK2xvbmcgZmlsY3BzID0gMEw7CQkJLyogQ1BTIG1vc3QgcmVjZW50IGZpbGUgdHJhbnNmZXJy ZWQgKi8KK2xvbmcgdGZjcHMgID0gMEw7CQkJLyogQ1BTIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9u ICovCitsb25nIHhmc2VjcyA9IDBMOwkJCS8qIEVsYXBzZWQgdGltZSBmb3IgbW9zdCByZWNlbnQg ZmlsZSAqLworI2lmZGVmIEdGVElNRVIKK0NLRkxPQVQgZnB4ZnNlY3MgPSAwLjA7CQkJLyogRGl0 dG8sIGJ1dCBmbG9hdGluZyBwb2ludCAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworI2lmZGVm IENLX1RJTUVSUworaW50IHJydHRibFs2NF0sIHNydHRibFs2NF07CQkvKiBQYWNrZXQgdGltZXN0 YW1wIHRhYmxlcyAqLworZXh0ZXJuIGludCBydHRmbGc7CisjZGVmaW5lIFJUVF9TQ0FMRSAxMDAw Citsb25nCisgIHJ0dHNhbXBsZXMsCQkJCS8qIFJvdW5kIHRyaXAgdGltZSBzYW1wbGVzICovCisg IHJ0dGRlbGF5LAkJCQkvKiBSVFQgZGVsYXkgKi8KKyAgcGt0aW50dmwsCQkJCS8qIEludGVycGFj a2V0IGFycml2YWwgdGltZSAqLworICBydHR2YXJpYW5jZSwJCQkJLyogUlRUIHZhcmlhbmNlICov CisgIHJ0dHN0ZGRldjsJCQkJLyogUlRUIHN0YW5kYXJkIGRldmlhdGlvbiAqLworI2VuZGlmIC8q IENLX1RJTUVSUyAqLworCisvKiBDUkMgZ2VuZXJhdGlvbiB0YWJsZXMgKi8KKworbG9uZyBjcmN0 YVsxNl0gPSB7IDBMLCAwMTAyMDFMLCAwMjA0MDJMLCAwMzA2MDNMLCAwNDEwMDRMLAorICAwNTEy MDVMLCAwNjE0MDZMLCAwNzE2MDdMLCAwMTAyMDEwTCwgMDExMjIxMUwsIDAxMjI0MTJMLCAwMTMy NjEzTCwgMDE0MzAxNEwsCisgIDAxNTMyMTVMLCAwMTYzNDE2TCwgMDE3MzYxN0wKK307CisKK2xv bmcgY3JjdGJbMTZdID0geyAwTCwgMDEwNjExTCwgMDIxNDIyTCwgMDMxMjMzTCwgMDQzMDQ0TCwK KyAgMDUzNjU1TCwgMDYyNDY2TCwgMDcyMjc3TCwgMDEwNjExMEwsIDAxMTY3MDFMLCAwMTI3NTMy TCwgMDEzNzMyM0wsIDAxNDUxNTRMLAorICAwMTU1NzQ1TCwgMDE2NDU3NkwsIDAxNzQzNjdMCit9 OworCisjaWZkZWYgQ0tfVElNRVJTCisvKgorICBSb3VuZC10cmlwIHRpbWVyIGNhbGN1bGF0aW9u cyBhZGFwdGVkIGZyb20gVGltIEtpZW50emxlJ3MgYXJ0aWNsZSwKKyAgIkltcHJvdmluZyBLZXJt aXQgUGVyZm9ybWFuY2UiLCBEciBEb2JiJ3MgSm91cm5hbCwgRmVicnVhcnkgMTk5Ni4KKyovCisK KworLyogIFIgVCBUIEkgTiBJIFQgIC0tICBJbml0aWFsaXplIHRpbWVycyBhdCBzdGFydCBvZiB0 cmFuc2FjdGlvbiAgKi8KKworVk9JRAorcnR0aW5pdCgpIHsJCQkJLyogSW5pdGlhbGl6ZSByb3Vu ZC10cmlwIHRpbWluZyAqLworICAgIGludCBpOworCisgICAgaWYgKHRpbWludCA9PSAwKQorICAg ICAgcmV0dXJuOworCisgICAgcnR0c2FtcGxlcyAgPSAwTDsJCQkvKiBTYW1wbGVzIChwYWNrZXRz KSAqLworICAgIHJ0dHZhcmlhbmNlID0gMEw7CQkJLyogVmFyaWFuY2UgaW4gZGVsYXkgKi8KKyAg ICBydHRkZWxheSAgICA9IChsb25nKSB0aW1pbnQgKiBSVFRfU0NBTEU7IC8qIERlbGF5ICovCisg ICAgcGt0aW50dmwgICAgPSAobG9uZykgdGltaW50ICogUlRUX1NDQUxFOyAvKiBEZWxheSAqLwor ICAgIHJ0dHN0ZGRldiAgID0gKGxvbmcpIHRpbWludCAqIFJUVF9TQ0FMRTsgLyogU3RhbmRhcmQg ZGV2aWF0aW9uIG9mIGRlbGF5ICovCisKKyAgICAvKiBUYWJsZXMgb2YgdGltZXN0YW1wcyBpbmRl eGVkIGJ5IHBhY2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPCA2 NDsgaSsrKSB7CisJcnJ0dGJsW2ldID0gLTE7CQkJLyogVGltZSBlYWNoIHBhY2tldCB3YXMgcmVj ZWl2ZWQgKi8KKwlzcnR0YmxbaV0gPSAtMTsJCQkvKiBUaW1lIGVhY2ggcGFja2V0IHdhcyBzZW50 ICovCisgICAgfQorICAgIHJjdnRpbW8gPSB0aW1pbnQ7CQkJLyogSW5pdGlhbCB0aW1lb3V0IGlz IHdoYXQgdXNlciBzYWlkICovCit9CisKKy8qICBHIEUgVCBSIFQgVCAgLS0gIEdldCBwYWNrZXQg cm91bmQgdHJpcCB0aW1lICAqLworLyoKKyAgQ2FsbCB3aXRoIG5ha3N0YXRlID09IDAgaWYgZmls ZSBzZW5kZXIsIG5vbnplcm8gaWYgcmVjZWl2ZXIsCisgIGFuZCBuID09IHBhY2tldCBzZXF1ZW5j ZSBudW1iZXIgb2YgdGhlIHBhY2tldCB3ZSBqdXN0IHJlY2VpdmVkLgorCisgIFJldHVybnM6Cisg IC0xIG9uIGZhaWx1cmUgd2l0aCByY3Z0aW1vIHNldCB0byB0aW1pbnQgKHdoYXQgdGhlIHVzZXIg c2FpZCksIG9yOgorICAgMCBvbiBzdWNjZXNzIHdpdGggcmN2dGltbyBzZXQgdG8gZHluYW1pY2Fs bHkgY2FsY3VsYXRlZCB2YWx1ZToKKyAgICAgMSA8PSByY3Z0aW1vIDw9IHRpbWludCAqIDMuCisq LworaW50CitnZXRydHQobmFrc3RhdGUsIG4pIGludCBuYWtzdGF0ZSwgbjsgeworICAgIGV4dGVy biBpbnQgbWludGltZSwgbWF4dGltZTsKKyAgICBzdGF0aWMgaW50IHByZXZ6ID0gMCwgcHJldnIg PSAwOworICAgIGludCB4LCB5LCB5eSwgeiA9IDAsIHp6ID0gMDsJLyogSG93IGxvbmcgZGlkIGl0 IHRha2UgdG8gZ2V0IGhlcmU/ICovCisKKyAgICByY3Z0aW1vID0gdGltaW50OwkJCS8qIERlZmF1 bHQgdGltZW91dCBpcyB3aGF0IHVzZXIgc2FpZCAqLworCisgICAgaWYgKHRpbWludCA9PSAwKQkJ CS8qIFdlJ3JlIG5vdCB0aW1pbmcgb3V0LiAqLworICAgICAgcmV0dXJuKDApOworCisgICAgaWYg KCFydHRmbGcpCQkJLyogTm90IHN1cHBvc2VkIHRvIGJlIGRvaW5nIHRoaXM/ICovCisgICAgICBy ZXR1cm4oLTEpOwkJCS8qICBTbyBkb24ndCAqLworCisgICAgaWYgKCFSVFRfU0NBTEUpCQkJLyog UGFyYW5vaWEuLi4gKi8KKyAgICAgIHJldHVybigtMSk7CisKKyAgICAvKiBydGltZXIoKSAocmVz ZXQgdGltZXIpIGlzIG5vdCBjYWxsZWQgdW50aWwgMXN0IGRhdGEgcGFja2V0ICovCisjaWZkZWYg R0ZUSU1FUgorICAgIC8qIHJmdGltZXIoKTsgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAg LyogUyAoRiBbIEEgXSBEKiBaKSogQiAqLworCisgICAgLyogTk9URTogd2UgY2FsY3VsYXRlIGJv dGggdGhlIHJvdW5kLXRyaXAgdGltZSBBTkQgdGhlIHBhY2tldCAqLworICAgIC8qIGFycml2YWwg cmF0ZS4gIFdlIGRvbid0IHVzZSB0aGUgUlRUIGZvciBhbnl0aGluZywgd2UganVzdCBkaXNwbGF5 IGl0LiAqLworICAgIC8qIFRpbWVvdXRzIGFyZSBiYXNlZCBvbiB0aGUgcGFja2V0IGFycml2YWwg cmF0ZS4gKi8KKworICAgIGlmIChzcGFja2V0cyA+IDMpIHsJCQkvKiBEb24ndCBzdGFydCB0aWxs IDR0aCBwYWNrZXQgKi8KKwlpZiAobmFrc3RhdGUpIHsJCQkvKiBGaWxlIHJlY2VpdmVyICovCisJ ICAgIHggPSBycnR0Ymxbbl07CQkgICAgIC8qIFRpbWUgd2hlbiBJIGdvdCBwYWNrZXQgbiAqLwor CSAgICB5ID0gcnJ0dGJsW24gPiAwID8gbiAtIDEgOiA2M107ICAvKiBUaW1lIHdoZW4gSSBnb3Qg cGFja2V0IG4tMSAqLworCSAgICB5eSA9IHNydHRibFtuID4gMCA/IG4gLSAxIDogNjNdOyAvKiBU aW1lIHdoZW4gSSBzZW50IEFDSyhuLTEpICovCisJICAgIGlmICh4ID4gLTEgJiYgeSA+IC0xKSB7 CS8qIEJlIGNhcmVmdWwgKi8KKwkJeiA9IHggLSB5OwkJLyogUGFja2V0IHJhdGUgKi8KKwkJenog PSB4IC0geXk7CQkvKiBSb3VuZCB0cmlwIHRpbWUgKi8KKwkJeisrOwkJCS8qIFNvIHNlbmRlciAm IHJlY2VpdmVyIGRpZmZlciAqLworCQlkZWJ1ZyhGMTAxLCJSVFQgUkVDViIsIiIseik7CisJICAg IH0gZWxzZSB7CQkJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuICovCisJCWRlYnVnKEYxMDEsIlJU VCBSRUNWIEVSUk9SIHNwYWNrZXRzIiwiIixzcGFja2V0cyk7CisJCWRlYnVnKEYxMDEsIlJUVCBS RUNWIEVSUk9SIHNlcXVlbmNlIiwiIixuKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfQorCX0gZWxz ZSB7CQkJLyogRmlsZSBzZW5kZXIgKi8KKwkgICAgeCA9IHJydHRibFtuXTsJCS8qIFRpbWUgd2hl biBJIGdvdCBBQ0sobikgKi8KKwkgICAgeSA9IHJydHRibFtuID4gMCA/IG4gLSAxIDogNjNdOyAv KiBUaW1lIHdoZW4gSSBnb3QgcGFja2V0IG4tMSAqLworCSAgICB5eSA9IHNydHRibFtuXTsJCS8q IFRpbWUgd2hlbiBJIHNlbnQgbiAqLworCSAgICBpZiAoeCA+IC0xICYmIHkgPiAtMSkgeworCQl6 ID0geCAtIHk7CQkvKiBQYWNrZXQgcmF0ZSAqLworCQl6eiA9IHggLSB5eTsJCS8qIFJvdW5kIHRy aXAgdGltZSAqLworCQlkZWJ1ZyhGMTAxLCJSVFQgU0VORCIsIiIseik7CisJICAgIH0gZWxzZSB7 CisJCWRlYnVnKEYxMDAsIlJUVCBTRU5EIEVSUk9SIiwiIiwwKTsKKwkJcmV0dXJuKC0xKTsKKwkg ICAgfQorCX0KKwlpZiAoeiA8IDEpCQkJLyogRm9yIGZhc3QgY29ubmVjdGlvbnMgKi8KKwkgIHog PSBSVFRfU0NBTEUgLyAyOwkJLyogQ29udmVydCB0byBzY2FsZS4uLiAqLworCWVsc2UKKwkgIHog Kj0gUlRUX1NDQUxFOworCWRlYnVnKEYxMDEsIlJUVCB6IHNjYWxlZCIsIiIseik7CisKKwlpZiAo enogPCAxKQkJCS8qIEZvciBmYXN0IGNvbm5lY3Rpb25zICovCisJICB6eiA9IFJUVF9TQ0FMRSAv IDI7CQkvKiBDb252ZXJ0IHRvIHNjYWxlLi4uICovCisJZWxzZQorCSAgenogKj0gUlRUX1NDQUxF OworCisJcnR0ZGVsYXkgPSB6ejsJCQkvKiBSb3VuZCB0cmlwIHRpbWUgb2YgdGhpcyBwYWNrZXQg Ki8KKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIHdhcyB1c2VkIGluIEMtS2VybWl0IDcuMCAo YW5kIDYuMD8pIGJ1dCBub3Qgb25seSBpcyBpdCBvdmVya2lsbCwKKyAgaXQgYWxzbyBjYW4gcHJv ZHVjZSByaWRpY3Vsb3VzbHkgbG9uZyB0aW1lb3V0cyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMu CisgIFJlcGxhY2VkIGluIDguMCBieSBhIGZhciBzaW1wbGVyIGFuZCBtb3JlIGFnZ3Jlc3NpdmUg c3RyYXRlZ3kuCisqLworCWlmIChydHRzYW1wbGVzKysgPT0gMEwpIHsJLyogRmlyc3Qgc2FtcGxl ICovCisJICAgIHBrdGludHZsID0gejsKKwl9IGVsc2UgewkJCS8qIFN1YnNlcXVlbnQgc2FtcGxl cyAqLworCSAgICBsb25nIG9sZGF2ZyA9IHBrdGludHZsOworCSAgICBsb25nIHJ0dGRpZmZzcTsK KworCSAgICBpZiAocnR0c2FtcGxlcyA+IDMwKQkvKiBVc2UgcmVhbCBhdmVyYWdlIGZvciBmaXJz dCAzMCAqLworCSAgICAgIHJ0dHNhbXBsZXMgPSAzMDsJCS8qICB0aGVuIGRlY2F5aW5nIGF2ZXJh Z2UuICovCisKKwkgICAgLyogQXZlcmFnZSBkZWxheSwgZGlmZmVyZW5jZSBzcXVhcmVkLCB2YXJp YW5jZSwgc3RkIGRldmlhdGlvbiAqLworCisJICAgIHBrdGludHZsICs9ICh6IC0gcGt0aW50dmwp IC8gcnR0c2FtcGxlczsKKwkgICAgcnR0ZGlmZnNxID0gKHogLSBvbGRhdmcpICogKHogLSBvbGRh dmcpOworCSAgICBydHR2YXJpYW5jZSArPSAocnR0ZGlmZnNxIC0gcnR0dmFyaWFuY2UpIC8gcnR0 c2FtcGxlczsKKwkgICAgZGVidWcoRjEwMSwiUlRUIHN0ZGRldjEiLCIiLHJ0dHN0ZGRldik7CisJ ICAgIGlmIChydHRzdGRkZXYgPCAxTCkJCS8qIEl0IGNhbiBiZSB6ZXJvLCBpbiB3aGljaCBjYXNl ICovCisJICAgICAgcnR0c3RkZGV2ID0gUlRUX1NDQUxFIC8gMzsgLyogc2V0IGl0IHRvIHNvbWV0 aGluZyBzbWFsbC4uLiAqLworCSAgICBydHRzdGRkZXYgPSAocnR0c3RkZGV2ICsgcnR0dmFyaWFu Y2UgLyBydHRzdGRkZXYpIC8gMjsKKwl9CisJZGVidWcoRjEwMSwiUlRUIHN0ZGRldjIiLCIiLHJ0 dHN0ZGRldik7CisJZGVidWcoRjEwMSwiUlRUIGRlbGF5ICAiLCIiLHBrdGludHZsKTsKKwlyY3Z0 aW1vID0gKHBrdGludHZsICsgKDNMICogcnR0c3RkZGV2KSkgLyBSVFRfU0NBTEUgKyAxOworCWlm IChycGFja2V0cyA8IDMyKQkJLyogQWxsb3cgZm9yIHNsb3cgc3RhcnQgKi8KKwkgIHJjdnRpbW8g Kz0gcmN2dGltbyArIDI7CisJZWxzZSBpZiAocnBhY2tldHMgPCA2NCkKKwkgIHJjdnRpbW8gKz0g cmN2dGltbyAvIDIgKyAxOworICAgICAgICAvKiBPbiBhIHJlbGlhYmxlIGxpbmssIGRvbid0IHRy eSB0b28gaGFyZCB0byB0aW1lIG91dC4gKi8KKwkvKiBFc3BlY2lhbGx5IG9uIGZhc3QgbG9jYWwg bmV0d29yayBjb25uZWN0aW9ucy4gKi8KKyAgICAgICAgaWYgKHNlcnZlciAmJiB3aGF0ID09IFdf Tk9USElORykgLyogU2VydmVyIGNvbW1hbmQgd2FpdCAqLworCSAgcmN2dGltbyA9IHJjdnRpbW87 CQkvKiA9PSBzcnZ0aW0gKi8KKyAgICAgICAgZWxzZSBpZiAocmVsaWFibGUgPT0gU0VUX09OICYm IHJjdnRpbW8gPiAwKSAvKiBSZWxpYWJsZSAqLworCSAgcmN2dGltbyA9IHJjdnRpbW8gKzE1Owkv KiBhbmQgbm90IHNlcnZlciBjb21tYW5kIHdhaXQgKi8KKyAgICAgICAgZWxzZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBOb3QgcmVsaWFibGUgb3Igc2VydmVyIGNtZCB3YWl0ICovCisJ ICByY3Z0aW1vID0gcmN2dGltbzsKKwlpZiAocmN2dGltbyA8IG1pbnRpbWUpCQkvKiBMb3dlciBi b3VuZCAqLworCSAgcmN2dGltbyA9IG1pbnRpbWU7CisJaWYgKG1heHRpbWUgPiAwKSB7CQkvKiBV c2VyIHNwZWNpZmllZCBhbiB1cHBlciBib3VuZCAqLworCSAgICBpZiAocmN2dGltbyA+IG1heHRp bWUpCisJICAgICAgcmN2dGltbyA9IG1heHRpbWU7CisJfSBlbHNlIGlmIChtYXh0aW1lID09IDAp IHsJLyogVXNlciBkaWRuJ3Qgc3BlY2lmeSAqLworCSAgICBpZiAocmN2dGltbyA+IHRpbWludCAq IDYpCisJICAgICAgcmN2dGltbyA9IHRpbWludCAqIDY7CisJfQorI2Vsc2UgIC8qIENPTU1FTlQg Ki8KKyNpZmRlZiBDS0ZMT0FUCisJeworCSAgICBDS0ZMT0FUIHg7CisJICAgIHggPSAoQ0tGTE9B VCkocHJldnogKyB6ICsgeikgLyAzLjA7CisJICAgIHJjdnRpbW8gPSAoaW50KSgoKChDS0ZMT0FU KXggKiAyLjY2KSAvIFJUVF9TQ0FMRSkgKyAwLjUpOworCSAgICBkZWJ1ZyhGMTAxLCJSVFQgcmN2 dGltbyAoZmxvYXQpIiwiIixyY3Z0aW1vKTsKKwl9CisjZWxzZQorCXJjdnRpbW8gPSAocHJldnog KyB6ICsgeikgLyBSVFRfU0NBTEU7CisJZGVidWcoRjEwMSwiUlRUIHJjdnRpbW8gKGludCkiLCIi LHJjdnRpbW8pOworI2VuZGlmIC8qIENLRkxPQVQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisK Kwl6eiA9IChydHRkZWxheSArIDUwMCkgLyAxMDAwOworCWlmIChyY3Z0aW1vID4gKHp6ICogMykp CisJICByY3Z0aW1vID0genogKiAzOworCisJaWYgKHJjdnRpbW8gPCAxKQorCSAgcmN2dGltbyA9 IDE7CisJaWYgKG1pbnRpbWUgPiAwKSB7CisJICAgIGlmIChyY3Z0aW1vIDwgbWludGltZSkJLyog TG93ZXIgYm91bmQgKi8KKwkgICAgICByY3Z0aW1vID0gbWludGltZTsKKwl9CisJaWYgKG1heHRp bWUgPiAwKSB7CQkvKiBVcHBlciBib3VuZCAqLworCSAgICBpZiAocmN2dGltbyA+IG1heHRpbWUp CisJICAgICAgcmN2dGltbyA9IG1heHRpbWU7CisJfQorCWlmIChyY3Z0aW1vID09IChwcmV2ciAt IDEpKQorCSAgcmN2dGltbysrOworCisJZGVidWcoRjEwMSwiUlRUIGZpbmFsIHJjdnRpbW8iLCIi LHJjdnRpbW8pOworICAgIH0KKyAgICBwcmV2eiA9IHo7CisgICAgcHJldnIgPSByY3Z0aW1vOwor ICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKworLyogIEkgTiBQIFUg VCAgLS0gIEF0dGVtcHQgdG8gcmVhZCBwYWNrZXQgbnVtYmVyICdwa3RudW0nLiAgKi8KKworLyoK KyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGZlZWRzIGlucHV0IHRvIEtlcm1pdCdzIGZpbml0 ZSBzdGF0ZSBtYWNoaW5lLAorIGluIHRoZSBmb3JtIG9mIGEgY2hhcmFjdGVyIGluIHRoZSByYW5n ZSAzMi0xMjYsIG5vcm1hbGx5IGEgcGFja2V0IHR5cGUKKyAodXBwZXJjYXNlIGxldHRlcikgb3Ig cHNldWRvLXBhY2tldC10eXBlIChsb3dlcmNhc2UgbGV0dGVyKS4KKworIElmIGEgc3BlY2lhbCBz dGFydCBzdGF0ZSBpcyBpbiBlZmZlY3QsIHRoYXQgc3RhdGUgaXMgcmV0dXJuZWQgYXMgaWYgaXQg d2VyZQorIHRoZSB0eXBlIG9mIGFuIGluY29taW5nIHBhY2tldC4KKyovCitpbnQKK2lucHV0KCkg eworICAgIGludCB0eXBlID0gMCwgYWNrdHlwZTsJCS8qIFJlY2VpdmVkIHBhY2tldCB0eXBlICov CisgICAgaW50IHgsIHksIGs7CQkJLyogV29ya2VycyAqLworICAgIGludCB6LCBwaSwgbmY7CQkJ LyogV29ya2VyLCBwYWNrZXQgaW5kZXgsIE5BSyBmbGFnICovCisgICAgaW50IG5hazJhY2sgPSAw OworCisgICAgZGVidWcoRjAwMCwiaW5wdXQgc3N0YXRlIiwiIixzc3RhdGUpOworICAgIGRlYnVn KEYxMDEsImlucHV0IG5ha3N0YXRlIiwiIixuYWtzdGF0ZSk7CisgICAgZGVidWcoRjAwMCwiaW5w dXQgc25kdHlwIiwiIixzbmR0eXApOworICAgIGRlYnVnKEYxMDEsImlucHV0IHhpdHN0YSIsIiIs eGl0c3RhKTsKKyAgICBkZWJ1ZyhGMTAxLCJpbnB1dCB3aGF0IiwiIix3aGF0KTsKKworICAgIHdo aWxlICgxKSB7CQkJCS8qIEJpZyBsb29wLi4uICovCisvKgorICBJdCBpcyB0dGNoaygpJ3MgcmVz cG9uc2liaWxpdHkgdG8gdGVsbCB1cyBpZiB0aGUgY29ubmVjdGlvbiBpcyBicm9rZW4sCisgIGFu ZCB0byBkbyBzbyBpbnN0YW50bHkgYW5kIG5vbmRlc3RydWN0aXZlbHkgLS0gbm8gYmxvY2tpbmcs IGV0YywgdGhhdCB3b3VsZAorICBzbG93IGRvd24gZmlsZSB0cmFuc2Zlci4KKyovCisJaWYgKHR0 Y2hrKCkgPCAwKSB7CisJICAgIGRlYnVnKEYxMDAsImlucHV0IENPTk5FQ1RJT04gQlJPS0VOIiwi IiwwKTsKKwkgICAgZmF0YWxpbyA9IDE7CisJICAgIHJldHVybigncScpOworCX0KKwlpZiAoc3N0 YXRlICE9IDApIHsJCS8qIElmIGEgc3RhcnQgc3RhdGUgaXMgaW4gZWZmZWN0LCAqLworCSAgICB0 eXBlID0gc3N0YXRlOwkJLyogcmV0dXJuIGl0IGxpa2UgYSBwYWNrZXQgdHlwZSwgKi8KKwkgICAg c3N0YXRlID0gMDsJCQkvKiBhbmQgdGhlbiBudWxsaWZ5IGl0LiAqLworCSAgICBudW1lcnJzID0g MDsJCS8qIChQV1ApIG5vIGVycm9ycyBzbyBmYXIgKi8KKwkgICAgcmV0dXJuKHR5cGUpOworCX0K KwlpZiAobmFrc3RhdGUpIHsJCQkvKiBUaGlzIHNlY3Rpb24gZm9yIGZpbGUgcmVjZWl2ZXIuICov CisJICAgIGlmICh3c2xvdHMgPiAxKSB7CQkvKiBJZiB3ZSdyZSBkb2luZyB3aW5kb3dzLCAqLwor CQl4ID0gcnNlcXRibFt3aW5sb107CS8qIHNlZSBpZiBkZXNpcmVkIHBhY2tldCBhbHJlYWR5IGlu LiAqLworCQlkZWJ1ZyhGMTAxLCJpbnB1dCB3aW5sbyIsIiIsd2lubG8pOworCQlkZWJ1ZyhGMTAx LCJpbnB1dCByc2VxdGJsW3dpbmxvXSIsIiIscnNlcXRibFt3aW5sb10pOworCQlpZiAoeCA+IC0x KSB7CQkvKiBBbHJlYWR5IHRoZXJlPyAqLworCQkgICAgaWYgKHJfcGt0W3hdLnBrX3NlcSA9PSB3 aW5sbykgeyAvKiAoZG91YmxlIGNoZWNrKSAqLworCQkJcnNuID0gd2lubG87CSAgICAgICAgICAg IC8qIFllcywgcmV0dXJuIGl0cyBpbmZvICovCisJCQlkZWJ1ZyhGMTAxLCJpbnB1dCByZXR1cm4g cHJlLXN0YXNoZWQgcGFja2V0IiwiIixyc24pOworCQkJZHVtcHJidWYoKTsKKwkJCXJkYXRhcCA9 IHJfcGt0W3hdLnBrX2FkcjsgICAvKiBsaWtlIHJwYWNrIHdvdWxkIGRvLiAqLworCQkJcmxuID0g KGludClzdHJsZW4oKGNoYXIgKikgcmRhdGFwKTsKKwkJCXR5cGUgPSByX3BrdFt4XS5wa190eXA7 CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHR5cGUgPSBycGFjaygpOwkg ICAgICAgIC8qIFRyeSB0byByZWFkIGEgcGFja2V0LiAqLworCSAgICBkZWJ1ZyhGMTAxLCJpbnB1 dCBycGFjayIsIiIsdHlwZSk7CisKKwkgICAgd2hpbGUgKHR5cGUgPT0gJ2UnKSB7CS8qIEhhbmRs ZSBlY2hvZXMgKi8KKwkJZGVidWcoRjEwMSwiaW5wdXQgZWNobyBkaXNjYXJkZWQiLCIiLHR5cGUp OworCQl0eXBlID0gcnBhY2soKTsKKwkgICAgfQorI2lmZGVmIERFQlVHCisJICAgIGlmIChkZWJs b2cpIHsKKwkJaWYgKHR5cGUgPT0gJ0QnKQorCQkgIGRlYnVnKEYwMTEsImlucHV0IHR5cGUgRD0i LChjaGFyICopcmRhdGFwLDM5KTsKKwkJZWxzZQorCQkgIGRlYnVnKEYwMDAsImlucHV0IHR5cGUi LChjaGFyICopcmRhdGFwLHR5cGUpOworCSAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZm5k ZWYgT0xEQ0hLSU5UCisJICAgIGlmICh0eXBlID09ICd6JykgeworCQllcGt0cmN2ZCA9IDE7CisJ CWVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZC4iKTsKKwkJdHlwZSA9ICdFJzsKKwkJYnJl YWs7CisJICAgIH0KKyNlbmRpZiAvKiBPTERDSEtJTlQgKi8KKwkgICAgaWYgKHR5cGUgPCAtMSkg eworCQljaGFyICogczsKKwkJcyA9ICh0eXBlID09IC0yKSA/CisJCSAgIkZBSUxFRCAtIEludGVy cnVwdGVkIiA6CisJCSAgICAiRkFJTEVEIC0gQ29ubmVjdGlvbiBsb3N0IjsKKworCQl4eHNjcmVl bihTQ1JfUFQsJ3EnLDBMLHMpOworCQlkb2xvZ2VuZCgpOworCQlyZXR1cm4oJ3EnKTsJCS8qIEN0 cmwtQyBvciBjb25uZWN0aW9uIGxvc3QgKi8KKwkgICAgfQorCSAgICBpZiAodHlwZSA8IDApIHsJ CS8qIFJlY2VpdmUgd2luZG93IGZ1bGwgKi8KKwkJLyogQW5vdGhlciB0aGluZyB0byBkbyBoZXJl IHdvdWxkIGJlIHRvIGRlbGV0ZSAqLworCQkvKiB0aGUgaGlnaGVzdCBwYWNrZXQgYW5kIE5BSyB3 aW5sby4gIEJ1dCB0aGF0ICovCisJCS8qIHNob3VsZG4ndCBiZSBuZWNlc3Nhcnkgc2luY2UgdGhl IG90aGVyIEtlcm1pdCAqLworCQkvKiBzaG91bGQgbm90IGhhdmUgc2VudCBhIHBhY2tldCBvdXRz aWRlIHRoZSB3aW5kb3cuICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgIGNoYXIg Zm9vWzI1Nl07CisgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGZvbywyNTYsIlJlY2VpdmUgd2lu ZG93IGZ1bGwgKHJwYWNrKTogd3Nsb3RzPSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNr aXRvYSh3c2xvdHMpLCIgd2lubG89Iixja2l0b2Eod2lubG8pLCIgcGt0bnVtPSIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGNraXRvYShwa3RudW0pLCBOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCk7CisJCWVycnBrdCgoQ0hBUiAqKWZvbyk7CisgICAgICAgICAgICAgICAgZGVidWco RjEwMCxmb28sIiIsMCk7CisjZWxzZQorCQllcnJwa3QoKENIQVIgKikiUmVjZWl2ZSB3aW5kb3cg ZnVsbCIpOworCQlkZWJ1ZyhGMTAxLCJycGFjayByZWNlaXZlIHdpbmRvdyBmdWxsIiwiIiwwKTsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCIgd3Nsb3RzIiwiIix3c2xvdHMpOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsIiB3aW5sbyIsIiIsd2lubG8pOworCQlkZWJ1ZyhGMTAxLCIg cGt0bnVtIiwiIixwa3RudW0pOworI2VuZGlmCisJCWR1bXByYnVmKCk7CisJCXR5cGUgPSAnRSc7 CisJCWJyZWFrOworCSAgICB9CisJICAgIGR1bXByYnVmKCk7CisKKyNpZmRlZiBPTERDSEtJTlQK KwkgICAgaWYgKGNoa2ludCgpIDwgMCkgewkJLyogQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0 cy4gKi8KKwkJZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkLiIpOyAvKiAob2xkIHdheSkg Ki8KKwkJdHlwZSA9ICdFJzsKKwkJYnJlYWs7CisJICAgIH0KKyNlbmRpZiAvKiBPTERDSEtJTlQg Ki8KKworI2lmZGVmIFNUUkVBTUlORworCSAgICBpZiAoc3RyZWFtaW5nKSB7CQkvKiBTdHJlYW1p bmcgKi8KKwkJaWYgKHR5cGUgPT0gJ1EnIHx8IHR5cGUgPT0gJ1QnKSB7IC8qIEVycm9ycyBhcmUg ZmF0YWwuICovCisJCSAgICBjcnVuY2hlZCsrOwkJLyogRm9yIHN0YXRpc3RpY3MgKi8KKwkJICAg IGVycnBrdCgoQ0hBUiAqKSJUcmFuc21pc3Npb24gZXJyb3Igb24gcmVsaWFibGUgbGluay4iKTsK KwkJICAgIHR5cGUgPSAnRSc7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLwor CSAgICBpZiAodHlwZSA9PSAnRScpIHsKKwkJZGVidWcoRjEwMSwiaW5wdXQgZ290IEUsIG5ha3N0 YXRlIiwiIixuYWtzdGF0ZSk7CisJCWJyZWFrOwkJCS8qIEVycm9yIHBhY2tldCAqLworCSAgICB9 CisJICAgIGlmICh0eXBlID09ICdRJykgewkJLyogQ3J1bmNoZWQgcGFja2V0LiAqLworCQljcnVu Y2hlZCsrOworCQludW1lcnJzKys7CisvKgorICBQYWNrZXQgYXJyaXZlZCBkYW1hZ2VkLiAgSXQg d2FzIG1vc3QgbGlrZWx5IHRoZSBwYWNrZXQgd2Ugd2VyZSBleHBlY3RpbmcKKyAgbmV4dCwgc28g d2Ugc2VuZCBhIE5BSyBmb3IgdGhhdCBwYWNrZXQuICBQcmlvciB0byA1QSgxODkpLCB3ZSBhbHdh eXMKKyAgTkFLJ2Qgd2lubG8gaGVyZSwgYnV0IHRoYXQgd2FzIGJhZCBiZWNhdXNlIGlmIHR3byAo b3IgbW9yZSkgZGlmZmVyZW50CisgIHBhY2tldHMgd2VyZSBkYW1hZ2VkLCB3ZSB3b3VsZCBrZWVw IE5BS2luZyB0aGUgZmlyc3Qgb25lIGFuZCBuZXZlciBOQUsgdGhlCisgIG90aGVyIG9uZXMsIHdo aWNoIGNvdWxkIHJlc3VsdCBpbiBhIGxlbmd0aHkgc2VyaWVzIG9mIHRpbWVvdXRzLiAgTm93IHdl CisgIE5BSyB0aGUgb2xkZXN0IGFzLXlldC11bk5BSydkIG1pc3NpbmcgcGFja2V0LgorKi8KKyNp ZmRlZiBDS19USU1FUlMKKwkJcmN2dGltbysrOwkJLyogU3RyZXRjaCB0aGUgdGltZW91dCBhIGxp dHRsZSAqLworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCQl6ID0gKHdpbmxvICsgd3Nsb3RzKSAl IDY0OyAgLyogU2VhcmNoIGZyb20gd2lubG8gdG8geiAqLworCQlkZWJ1ZyhGMTAxLCJaWlogY3J1 bmNoZWQgeiIsIiIseik7CisJCW5mID0gMDsJCQkgICAgLyogTkFLIGZsYWcgbm90IHNldCB5ZXQg Ki8KKwkJZm9yICh4ID0gd2lubG87IHggIT0gejsgeCA9ICh4ICsgMSkgJSA2NCkgeworCQkgICAg ZGVidWcoRjEwMSwiWlpaIHgiLCIiLHgpOworCQkgICAgaWYgKHJzZXF0YmxbeF0gPiAtMSkgLyog SGF2ZSBJIHJlY2VpdmVkIHBhY2tldCB4PyAqLworCQkgICAgICBjb250aW51ZTsJCSAvKiBZZXMs IGdvIG9uLiAqLworCQkgICAgZGVidWcoRjEwMSwiWlpaIHggbm90IHJlY2QgeWV0IiwiIix4KTsK KwkJICAgIHBpID0gc3NlcXRibFt4XTsJIC8qIE5vLCBoYXZlIEkgTkFLJ2QgaXQgeWV0PyAqLwor CQkgICAgaWYgKHBpIDwgMCB8fCBzX3BrdFtwaV0ucGtfcnRyID09IDApIHsKKwkJCWRlYnVnKEYx MDEsIlpaWiB4IG5vdCBOQUsnZCB5ZXQiLCIiLHgpOworCQkJbmFjayh4KTsJIC8qIE5vLCBOQUsg aXQgbm93LiAqLworCQkJbmYgPSAxOwkJIC8qIEZsYWcgdGhhdCBJIGRpZC4gKi8KKwkJCWJyZWFr OworCQkgICAgfQorCQl9CisJCWlmICghbmYpIHsJCS8qIElmIHdlIGRpZG4ndCBOQUsgYW55dGhp bmcgYWJvdmUsICovCisJCSAgICBkZWJ1ZyhGMTAxLCJaWlogTkFLaW5nIHdpbmxvIiwiIix3aW5s byk7CisJCSAgICBpZiAobmFjayh3aW5sbykgPCAwKSB7IC8qIHdlIGhhdmUgdG8gTkFLIHdpbmxv IChhZ2FpbikgKi8KKwkJCWVycnBrdCgoQ0hBUiAqKSJUb28gbWFueSByZXRyaWVzLiIpOyAvKiBU b28gbWFueSAqLworCQkJdHlwZSA9ICdFJzsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWNv bnRpbnVlOworCSAgICB9CisKKwkgICAgaWYgKHR5cGUgPT0gJ1QnKSB7CQkvKiBUaW1lb3V0ICov CisjaWZuZGVmIE9TMgorCQkvKiBLOTUgZG9lcyB0aGlzIGl0cyBvd24gd2F5ICovCisJCWlmIChz ZXJ2ZXIgJiYgc3J2aWRsKSB7CisJCSAgICBpZGxldG1vID0gMTsKKwkJICAgIGRlYnVnKEYxMDEs IlNFUlZFUiBJRExFIFRJTUVPVVQiLCIiLHNydmlkbCk7CisJCSAgICByZXR1cm4oJ3EnKTsKKwkJ fQorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX1RJTUVSUworCQlyY3Z0aW1vKys7CQkvKiBT dHJldGNoIHRoZSB0aW1lb3V0IGEgbGl0dGxlICovCisjZW5kaWYgLyogQ0tfVElNRVJTICovCisJ CXRpbWVvdXRzKys7CisJCWRlYnVnKEYxMDEsImlucHV0IHJlY2VpdmUtc3RhdGUgdGltZW91dCwg d2lubG8iLCIiLHdpbmxvKTsKKwkJLyogTkFLIG9ubHkgdGhlIHBhY2tldCBhdCB3aW5kb3ctbG93 ICovCisJCWRlYnVnKEYxMDEsImlucHV0IHNlbmRpbmcgTkFLIGZvciB3aW5sbyIsIiIsd2lubG8p OworCQl4ID0gdHRjaGsoKTsKKwkJaWYgKHggPiAwKQkJLyogRG9uJ3QgZ2l2ZSB1cCBpZiB0aGVy ZSBpcyBzdGlsbCAqLworCQkgIGNvbnRpbnVlOwkJLyogc29tZXRoaW5nIHRvIHJlYWQuICovCisJ CWVsc2UgaWYgKHggPCAwKSB7CisJCSAgICBkb2xvZ2VuZCgpOworCQkgICAgZmF0YWxpbyA9IDE7 CisJCSAgICByZXR1cm4oJ3EnKTsJLyogQ29ubmVjdGlvbiBMb3N0ICovCisJCX0KKwkJaWYgKG5h Y2sod2lubG8pIDwgMCkgeworCQkgICAgZGVidWcoRjEwMSwiaW5wdXQgc2VudCB0b28gbWFueSBu YWtzIiwiIix3aW5sbyk7CisJCSAgICBlcnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0cmllcy4i KTsKKwkJICAgIHR5cGUgPSAnRSc7CisJCSAgICBicmVhazsKKwkJfSBlbHNlIGNvbnRpbnVlOwor CSAgICB9CisJICAgIGlmIChyc24gPT0gd2lubG8pIHsJCS8qIEdvdCB0aGUgcGFja2V0IHdlIHdh bnQsIGRvbmUuICovCisjaWZkZWYgQ0tfVElNRVJTCisJCWlmIChydHRmbGcgJiYgdGltaW50KQkv KiBEeW5hbWljIHJvdW5kIHRyaXAgdGltZXJzPyAqLworCQkgIGdldHJ0dChuYWtzdGF0ZSwgcnNu KTsgLyogeWVzLCBkbyBpdC4gKi8KKyAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAg ICAgICAgLyogSkhEIDIwMTAwMjA4ICovCisgICAgICAgICAgICAgICAgICByY3Z0aW1vID0gdGlt aW50OyAgICAgIC8qIEpIRCAyMDEwMDIwOCAqLworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCQlk ZWJ1ZyhGMTAxLCJpbnB1dCByc249d2lubG8iLCIiLHJzbik7CisJCWJyZWFrOworCSAgICB9CisK KwkgICAgLyogR290IGEgcGFja2V0IG91dCBvZiBvcmRlci4gKi8KKworCSAgICBkZWJ1ZyhGMTAx LCJpbnB1dCBvdXQgb2Ygc2VxdWVuY2UsIHJzbiIsIiIscnNuKTsKKwkgICAgayA9IHJzZXF0Ymxb cnNuXTsJCS8qIEdldCB3aW5kb3cgc2xvdCBvZiB0aGlzIHBhY2tldC4gKi8KKwkgICAgZGVidWco RjEwMSwiaW5wdXQgcnNlcXRibFtyc25dIiwiIixrKTsKKwkgICAgaWYgKGsgPCAwKSB7CisJCWRl YnVnKEYxMDEsImlucHV0IHJlY3YgY2FuJ3QgZmluZCBpbmRleCBmb3IgcmN2ZCBwa3QiLCIiLHJz bik7CisJCS8qIFdhcyAiSW50ZXJuYWwgZXJyb3IgMjEiICovCisJCS8qIFRoaXMgc2hvdWxkIG5v dCBoYXBwZW4gICovCisJCWVycnBrdCgoQ0hBUiAqKSJTbGlkaW5nIHdpbmRvd3MgcHJvdG9jb2wg ZXJyb3IuIik7CisJCXR5cGUgPSAnRSc7CisJCWJyZWFrOworCSAgICB9CisJICAgIHkgPSBjaGt3 aW4ocnNuLHdpbmxvLHdzbG90cyk7IC8qIFNlZSB3aGF0IHdpbmRvdyBpdCdzIGluLiAqLworCSAg ICBkZWJ1ZyhGMTAxLCJpbnB1dCByZWN2IGNoa3dpbiIsIiIseSk7CisJICAgIGlmICh5ID09IDEp IHsJCS8qIEZyb20gcHJldmlvdXMgd2luZG93LiAqLworI2lmZGVmIFNUUkVBTUlORworCQlpZiAo IXN0cmVhbWluZykJCS8qIE5PIFJFU0VORCBJRiBTVFJFQU1JTkchICovCisjZW5kaWYgLyogU1RS RUFNSU5HICovCisJCSAgcmVzZW5kKHJzbik7CQkvKiBSZXNlbmQgdGhlIEFDSyAobWlnaHQgaGF2 ZSBkYXRhKSAqLworCQlmcmVlcnBrdChyc24pOwkJLyogR2V0IHJpZCBvZiByZWNlaXZlZCBwYWNr ZXQgKi8KKwkJY29udGludWU7CQkvKiBCYWNrIHRvIHdhaXQgZm9yIGFub3RoZXIgcGFja2V0ICov CisJICAgIH0gZWxzZSB7CQkJLyogSW4gdGhpcyB3aW5kb3cgb3Igb3V0IG9mIHJhbmdlICovCisJ CWlmICh5IDwgMCkJCS8qIElmIG91dCBvZiByYW5nZSBlbnRpcmVseSwgKi8KKwkJICBmcmVlcnBr dChyc24pOwkvKiByZWxlYXNlIGl0cyBidWZmZXIgKi8KKworI2lmZGVmIFNUUkVBTUlORworCQlp ZiAoc3RyZWFtaW5nKSB7CS8qIFN0cmVhbWluZyAodGhpcyBzaG91bGRuJ3QgaGFwcGVuKSAqLwor CQkgICAgZXJycGt0KChDSEFSICopIlNlcXVlbmNlIGVycm9yIG9uIHJlbGlhYmxlIGxpbmsuIik7 CisJCSAgICB0eXBlID0gJ0UnOworCQkgICAgYnJlYWs7CisJCX0KKyNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KKworLyogSWYgb3VyIHJlY2VpdmUgd2luZG93IGlzIGZ1bGwsIE5BSyB3aW5kb3ctbG93 ICovCisKKwkJaWYgKHJidWZudW0gPCAxKSB7CS8qIFJlY2VpdmUgd2luZG93IGZ1bGw/ICovCisJ CSAgICBpZiAobmFjayh3aW5sbykgPCAwKSB7ICAgIC8qIE5vIGNob2ljZSwgbXVzdCBOQUsgd2lu bG8uICovCisJCQllcnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0cmllcy4iKTsgLyogVG9vIG1h bnkgKi8KKwkJCXR5cGUgPSAnRSc7CisJCQlicmVhazsKKwkJICAgIH0gZWxzZSBjb250aW51ZTsK KwkJfQorLyoKKyAgUmVjZWl2ZSB3aW5kb3cgbm90IGZ1bGwuICBUaGlzIGlzIGEgcGFja2V0IGlu IHRoZSBjdXJyZW50IHdpbmRvdyBidXQgaXQgaXMKKyAgbm90IHRoZSBkZXNpcmVkIHBhY2tldCBh dCB3aW5sby4gIFNvIHRoZXJlZm9yZSB0aGVyZSBhcmUgZ2FwcyBiZWZvcmUgdGhpcworICBwYWNr ZXQuICBTbyB3ZSBmaW5kIHRoZSAibG93ZXN0IiB1bk5BSydkIG1pc3NpbmcgcGFja2V0LCBpZiBh bnksIGJldHdlZW4KKyAgd2lubG8gYW5kIHRoaXMgb25lLCBhbmQgTkFLIGl0LiAgSWYgdGhlcmUg YXJlIG5vIGFzLXlldC11bk5BSydkIG1pc3NpbmcKKyAgcGFja2V0cyBpbiB0aGUgd2luZG93LCB0 aGVuIHdlIHNlbmQgbm90aGluZyBhbmQgZ28gd2FpdCBmb3IgYW5vdGhlciBwYWNrZXQuCisgIElu IHRoZW9yeSwgdGhpcyBjb3VsZCByZXN1bHQgaW4gYSB0aW1lb3V0LCBidXQgaW4gcHJhY3RpY2Ug aXQgaXMgbGlrZWx5IHRoYXQKKyAgdGhlIGFscmVhZHktTkFLJ2QgbWlzc2luZyBwYWNrZXRzIGFy ZSBhbHJlYWR5IG9uIHRoZWlyIHdheS4gIE5vdGUsIHdlIGRvIG5vdAorICBOQUsgYWhlYWQgb2Yg b3Vyc2VsdmVzLCBhcyB0aGF0IG9ubHkgY3JlYXRlcyB1bm5lY2Vzc2FyeSByZXRyYW5zbWlzc2lv bnMuCisqLworCQlmb3IgKHggPSB3aW5sbzsgeCAhPSByc247IHggPSAoeCArIDEpICUgNjQpIHsK KwkJICAgIGlmIChyc2VxdGJsW3hdID4gLTEpIC8qIEhhdmUgSSByZWNlaXZlZCBwYWNrZXQgeD8g Ki8KKwkJICAgICAgY29udGludWU7CQkgLyogWWVzLCBjaGVjayBuZXh0IHNlcXVlbmNlIG51bWJl ci4gKi8KKwkJICAgIHBpID0gc3NlcXRibFt4XTsJIC8qIE5vLCBoYXZlIEkgTkFLJ2QgaXQgeWV0 PyAqLworCQkgICAgaWYgKHBpIDwgMCB8fCBzX3BrdFtwaV0ucGtfcnRyID09IDApIHsKKwkJCW5h Y2soeCk7CSAvKiBObywgTkFLIGl0IG5vdy4gKi8KKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJ ICAgIH0KKy8qISEhKi8KKwl9IGVsc2UgewkJCS8qIE90aGVyd2lzZSBmaWxlIHNlbmRlci4uLiAq LworCisjaWZkZWYgU1RSRUFNSU5HCisJICAgIGlmIChzdHJlYW1pbmcgJiYgc25kdHlwID09ICdE JykgeworCQlkZWJ1ZyhGMTAxLCJTVFJFQU1JTkcgaW5wdXQgc3RyZWFtaW5nIiwiIixzdHJlYW1p bmcpOworCQlkZWJ1ZyhGMDAwLCJTVFJFQU1JTkcgaW5wdXQgc25kdHlwIiwiIixzbmR0eXApOwor CQlyc24gPSB3aW5sbzsKKwkJdHlwZSA9ICdZJzsJCS8qIFByZXRlbmQgd2UgZ290IGFuIEFDSyAq LworCSAgICB9CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJICAgIGlmICghbmFrMmFjaykgewkJ LyogTkFLKG4rMSkgPSBBQ0sobikgKi8KKwkJaWYgKHdzbG90cyA+IDEpIHsJLyogUGFja2V0IGF0 IHdpbmxvIGFscmVhZHkgQUNLJ2Q/ICovCisJCSAgICBpZiAoc2Fja3RibFt3aW5sb10pIHsgLyog SWYgc28sICAqLworCQkJc2Fja3RibFt3aW5sb10gPSAwOyAvKiBUdXJuIG9mZiB0aGUgQUNLJ2Qg ZmxhZyAqLworCQkJd2lubG8gPSAod2lubG8gKyAxKSAlIDY0OyAvKiBSb3RhdGUgdGhlIHdpbmRv dyAqLworCQkJdHlwZSA9ICdZJzsJLyogQW5kIHJldHVybiBBQ0sgKi8KKwkJCWRlYnVnKEYxMDEs CisJCQkgICAgICAiaW5wdXQgc2VuZCByZXR1cm5pbmcgcHJlLXN0YXNoZWQgQUNLIiwiIiwKKwkJ CSAgICAgIHdpbmxvLTEpOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKyNpZmRlZiBTVFJFQU1J TkcKKwkJaWYgKCEoc3RyZWFtaW5nICYmIHNuZHR5cCA9PSAnRCcpKSB7IC8qIE5vdCBzdHJlYW1p bmcgfCBkYXRhICovCisJCSAgICB0eXBlID0gcnBhY2soKTsJLyogVHJ5IHRvIHJlYWQgYW4gYWNr bm93bGVkZ2VtZW50ICovCisJCX0gZWxzZSB7CQkvKiBTdHJlYW1pbmcgYW5kIGluIERhdGEgcGhh c2UgKi8KKwkJICAgIHR5cGUgPSAnWSc7CQkvKiBBc3N1bWUgYWxsIGlzIG5vcm1hbCAqLworCQkg ICAgaWYgKGNoa2ludCgpIDwgMCkJLyogQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0cy4gKi8K KwkJICAgICAgdHlwZSA9ICd6JzsKKwkJICAgIGVsc2UgaWYgKHR0Y2hrKCkgPiA0ICsgYmN0dSkg LyogQ2hlY2sgZm9yIHJldHVybiB0cmFmZmljICovCisJCSAgICAgIHR5cGUgPSBycGFjaygpOwor CQkgICAgZGVidWcoRjAwMCwiaW5wdXQgc3RyZWFtaW5nIHR5cGUiLCIiLHR5cGUpOworCQl9Cisj ZW5kaWYgLyogU1RSRUFNSU5HICovCisJCWRlYnVnKEYxMTEsImlucHV0IHNlbmQiLChjaGFyICop IHJkYXRhcCwoaW50KSB0eXBlKTsKKwkJd2hpbGUgKHR5cGUgPT0gJ2UnKSB7CS8qIEhhbmRsZSBl Y2hvZXMgKi8KKwkJICAgIGRlYnVnKEYwMDAsImVjaG8gZGlzY2FyZGVkIiwiIix0eXBlKTsKKwkJ ICAgIHR5cGUgPSBycGFjaygpOworCQl9CisjaWZuZGVmIE9MRENIS0lOVAorCQlpZiAodHlwZSA9 PSAneicpIHsKKwkJICAgIGVwa3RyY3ZkID0gMTsKKwkJICAgIGVycnBrdCgoQ0hBUiAqKSJVc2Vy IGNhbmNlbGxlZC4iKTsKKwkJICAgIHR5cGUgPSAnRSc7CisJCSAgICBicmVhazsKKwkJfQorI2Vu ZGlmIC8qIE9MRENIS0lOVCAqLworCQlpZiAodHlwZSA8IC0xKSB7CisJCSAgICB4eHNjcmVlbihT Q1JfUFQsJ3EnLDBMLAorCQkJICAgKChjaGFyICopKCh0eXBlID09IC0yKSA/CisJCQkgICAiSW50 ZXJydXB0ZWQiIDoKKwkJCSAgICJDb25uZWN0aW9uIGxvc3QiKSkKKwkJCSAgICk7CisJCSAgICBp ZiAodHlwZSAhPSAtMikKKwkJICAgICAgZG9sb2dlbmQoKTsKKwkJICAgIHJldHVybigncScpOwkv KiBDdHJsLUMgb3IgY29ubmVjdGlvbiBsb3N0ICovCisJCX0KKwkJaWYgKHR5cGUgPT0gLTEpIHsK KyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgIGNoYXIgZm9vWzI1Nl07CisgICAg ICAgICAgICAgICAgICAgIGNrbWFreG1zZyhmb28sMjU2LAorCQkJICAgICAgIlJlY2VpdmUgd2lu ZG93IGZ1bGwgKGVycm9yIDE4KTogd3Nsb3RzPSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBja2l0b2Eod3Nsb3RzKSwKKwkJCSAgICAgICIgd2lubG89Iixja2l0b2Eod2lubG8pLCIg cGt0bnVtPSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EocGt0bnVtKSwg TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworCQkgICAgZXJycGt0KChDSEFSICopZm9v KTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCxmb28sIiIsMCk7CisjZWxzZQorCQkg ICAgZXJycGt0KChDSEFSICopIlJlY2VpdmUgd2luZG93IGZ1bGwiKTsgLyogd2FzICJpbnRlcm5h bCAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCIgd3Nsb3RzIiwiIix3c2xvdHMp OyAvKiBlcnJvciAxOCIgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiIHdpbmxv IiwiIix3aW5sbyk7CisJCSAgICBkZWJ1ZyhGMTAxLCIgcGt0bnVtIiwiIixwa3RudW0pOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKwkJICAgIGR1bXByYnVmKCk7CisJCSAgICB0eXBlID0gJ0UnOwor CQkgICAgYnJlYWs7CisJCX0KKwkJZHVtcHJidWYoKTsJCS8qIERlYnVnZ2luZyAqLworCisjaWZk ZWYgT0xEQ0hLSU5UCisJCWlmIChjaGtpbnQoKSA8IDApIHsJLyogQ2hlY2sgZm9yIGNvbnNvbGUg aW50ZXJydXB0cy4gKi8KKwkJICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZC4iKTsK KwkJICAgIHJldHVybih0eXBlID0gJ0UnKTsKKwkJfQorI2VuZGlmIC8qIE9MRENIS0lOVCAqLwor CisJCS8qIEdvdCBhIHBhY2tldCAqLworCisjaWZkZWYgU1RSRUFNSU5HCisJCWlmIChzdHJlYW1p bmcpIHsJCS8qIFN0cmVhbWluZyAqLworCQkgICAgaWYgKHR5cGUgPT0gJ1EnIHx8IHR5cGUgPT0g J1QnKSB7IC8qIEVycm9ycyBhcmUgZmF0YWwuICovCisJCQljcnVuY2hlZCsrOwkvKiBGb3Igc3Rh dGlzdGljcyAqLworCQkJZXJycGt0KChDSEFSICopIlRyYW5zbWlzc2lvbiBlcnJvciBvbiByZWxp YWJsZSBsaW5rLiIpOworCQkJdHlwZSA9ICdFJzsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIFNU UkVBTUlORyAqLworCQlpZiAodHlwZSA9PSAnRScpIHsKKwkJICAgIGRlYnVnKEYxMDEsImlucHV0 IHNlbmQgZ290IEUsIG5ha3N0YXRlIiwiIixuYWtzdGF0ZSk7CisJCSAgICBicmVhazsJCS8qIEVy cm9yIHBhY2tldCAqLworCQl9CisJCWlmICh0eXBlID09ICdRJykgewkvKiBDcnVuY2hlZCBwYWNr ZXQgKi8KKwkJICAgIGNydW5jaGVkKys7CQkvKiBGb3Igc3RhdGlzdGljcyAqLworCQkgICAgbnVt ZXJycysrOwkJLyogRm9yIHBhY2tldCByZXNpemluZyAqLworCQkgICAgeCA9IHJlc2VuZCh3aW5s byk7CS8qIFJlc2VuZCB3aW5kb3ctbG93ICovCisJCSAgICBpZiAoeCA8IDApIHsKKwkJCXR5cGUg PSAnRSc7CisJCQllcnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0cmllcyIpOworCQkJYnJlYWs7 CisJCSAgICB9CisJCSAgICBjb250aW51ZTsKKwkJfQorCQlpZiAodHlwZSA9PSAnVCcpIHsJLyog VGltZW91dCB3YWl0aW5nIGZvciBBQ0tzLiAqLworCQkgICAgdGltZW91dHMrKzsJCS8qIENvdW50 IGl0ICovCisJCSAgICBudW1lcnJzKys7CQkvKiBDb3VudCBhbiBlcnJvciB0b28gKi8KKwkJICAg IGRlYnVnKEYxMDEsImlucHV0IHNlbmQgc3RhdGUgdGltZW91dCwgd2lubG8iLCIiLHdpbmxvKTsK KworCQkgICAgLyogUmV0cmFuc21pdCB0aGUgb2xkZXN0IHVuLUFDSydkIHBhY2tldC4gKi8KKwor CQkgICAgZGVidWcoRjEwMSwiaW5wdXQgc2VuZCByZXNlbmRpbmcgd2lubG8iLCIiLHdpbmxvKTsK KwkJICAgIGlmIChyZXNlbmQod2lubG8pIDwgMCkgeyAvKiBDaGVjayByZXRyaWVzICovCisJCQlk ZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIHRvbyBtYW55IHJlc2VuZHMiLCIiLG1heHRyeSk7CisJCQll cnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0cmllcyIpOworCQkJcmV0dXJuKHR5cGUgPSAnRScp OworCQkgICAgfQorI2lmZGVmIE5FV0RQTAorCQkgICAgLyogUmVkdWNlIHByZXZhaWxpbmcgcGFj a2V0IGxlbmd0aCAqLworCQkgICAgeCA9IHNzZXF0Ymxbd2lubG9dOwkvKiBHZXQgbGVuZ3RoIG9m IHBhY2tldCB3ZSB3YW50IEFDS2QgKi8KKwkJICAgIGlmICh4ID4gLTEpIHsJLyogT25seSBpZiB3 ZSBoYXZlIGEgdmFsaWQgaW5kZXggKi8KKwkJCWlmIChzX3BrdFt4XS5wa190eXAgPT0gJ0QnKSB7 IC8qIG9ubHkgZm9yIEQgcGFja2V0cyAqLworCQkJICAgIHNwc2l6ID0gKHNfcGt0W3hdLnBrX2xl biArIDgpID4+IDE7IC8qIGhhbHZlIGl0ICovCisJCQkgICAgaWYgKHNwc2l6IDwgMjApIHNwc2l6 ID0gMjA7IC8qIHdpdGhpbiByZWFzb24gKi8KKwkJCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBUIGN1 dCBwYWNrZXQgbGVuZ3RoIiwiIixzcHNpeik7CisJCQl9CisJCSAgICB9CisjZW5kaWYgLyogTkVX RFBMICovCisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICAgIC8qIEdvdCBhbiBhY3R1 YWwgbm9ybWFsIHBhY2tldCAqLworCisJICAgIG5hazJhY2sgPSAwOwkJLyogVW5zZXQgdGhpcyBm bGFnLiAqLworCSAgICB5ID0gY2hrd2luKHJzbix3aW5sbyx3c2xvdHMpOyAvKiBJcyBpdCBpbiB0 aGUgd2luZG93PyAqLworCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIHJzbiIsIiIscnNuKTsK KwkgICAgZGVidWcoRjEwMSwiaW5wdXQgc2VuZCB3aW5sbyIsIiIsd2lubG8pOworCSAgICBkZWJ1 ZyhGMTAxLCJpbnB1dCBzZW5kIGNoa3dpbiIsIiIseSk7CisKKwkgICAgaWYgKHR5cGUgPT0gJ1kn KSB7CQkvKiBHb3QgYW4gQUNLICovCisJCWlmICh5ID09IDApIHsJCS8qIEluIGN1cnJlbnQgd2lu ZG93ICovCisJCSAgICBpZiAoc3BhY2tldHMgPCA0KQkvKiBFcnJvciBjb3VudGVyIGRvZXNuJ3Qg Y291bnQgKi8KKwkJICAgICAgbnVtZXJycyA9IDA7CS8qIHVudGlsIGRhdGEgcGhhc2UuICovCisJ CSAgICBzYWNrdGJsW3Jzbl0rKzsJLyogTWFyayB0aGUgcGFja2V0IGFzIEFDSydkICovCisJCSAg ICB4ID0gc3NlcXRibFtyc25dOwkvKiBHZXQgQUNLJ2QgcGFja2V0J3MgYnVmZmVyIGluZGV4ICov CisJCSAgICBkZWJ1ZyhGMTAxLCJiZXN0bGVuIGFjayB4IiwiIix4KTsKKyNpZmRlZiBORVdEUEwK KwkJICAgIGlmICh4ID4gLTEpIHsKKwkJCWFja3R5cGUgPSBzX3BrdFt4XS5wa190eXA7IC8qIEdl dCB0eXBlICovCisJCQlkZWJ1ZyhGMDAwLCJiZXN0bGVuIGFjayB0eXBlIiwiIixhY2t0eXBlKTsK KworCQkJaWYgKGFja3R5cGUgPT0gJ0QnKSB7IC8qIEFkanVzdCBkYXRhIHBhY2tldCBsZW5ndGgg Ki8KKwkJCSAgICBpZiAoc3BzaXogPiBiZXN0bGVuKSB7CisJCQkJYmVzdGxlbiA9IHNwc2l6Owor CQkJCWRlYnVnKEYxMDEsImJlc3RsZW4gQiIsIiIsYmVzdGxlbik7CisJCQkgICAgfQorI2lmZGVm IERFQlVHCisJCQkgICAgaWYgKGRlYmxvZykgeworCQkJCWRlYnVnKEYxMDEsImJlc3RsZW4gcmV0 cnkiLCIiLHNfcGt0W3hdLnBrX3J0cik7CisJCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBsZW4iLCIi LHNfcGt0W3hdLnBrX2xlbik7CisJCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBzcGFja2V0cyIsIiIs c3BhY2tldHMpOworCQkJICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCQkJICAgIC8qIFNldCBu ZXcgYmVzdCBsZW5ndGggKi8KKwkJCSAgICBpZiAoc19wa3RbeF0ucGtfcnRyID09IDAgJiYKKwkJ CQlzX3BrdFt4XS5wa19sZW4gKyA4ID4gYmVzdGxlbikgeworCQkJCWJlc3RsZW4gPSBzX3BrdFt4 XS5wa19sZW4gKyA4OworCQkJCWlmIChiZXN0bGVuID4gc3BtYXgpCisJCQkJICBiZXN0bGVuID0g c3BtYXg7CisJCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBBIiwiIixiZXN0bGVuKTsKKwkJCSAgICB9 CisjaWZkZWYgREVCVUcKKwkJCSAgICBpZiAoZGVibG9nKSB7CisJCQkJZGVidWcoRjEwMSwiYmVz dGxlbiB3c2xvdHMiLCIiLHdzbG90cyk7CisJCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBtYXhzZW5k IiwiIixtYXhzZW5kKTsKKwkJCSAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCSAgICAvKiBT bG93IHN0YXJ0ICovCisJCQkgICAgaWYgKHNsb3N0YXJ0ICYmCisJCQkJKG1heHNlbmQgPD0gc3Bt YXgpICYmCisJCQkJKHJwYWNrZXRzIDwgMTEpICYmCisJCQkJKG51bWVycnMgPT0gMCkpIHsKKwkJ CQlzcHNpeiA9IHNwc2l6IDw8IDE7CisJCQkJZGVidWcoRjEwMSwiYmVzdGxlbiBzcHNpeiBBIiwi IixzcHNpeik7CisKKwkJCSAgICAvKiBDcmVlcCB1cCB0byBiZXN0IGxlbmd0aCAqLworCQkJICAg IH0gZWxzZSBpZiAoKHNwYWNrZXRzID4gNSkgJiYKKwkJCQkgICAgICAgKHNwc2l6IDwgYmVzdGxl biAtIDgpKSB7CisJCQkJc3BzaXogKz0gKGJlc3RsZW4gLSBzcHNpeikgLyAzOworCQkJCWRlYnVn KEYxMDEsImJlc3RsZW4gc3BzaXogQiIsIiIsc3BzaXopOworCisJCQkgICAgLyogUHVzaCB0aGUg ZW52ZWxvcGUgKi8KKwkJCSAgICB9IGVsc2UgaWYgKChzcGFja2V0cyAlICh3c2xvdHMgKyAxKSA9 PSAwKSAmJgorCQkJCSAgICAgICAoc3BhY2tldHMgPiA2KSAmJgorCQkJCSAgICAgICAoYmVzdGxl biA8IHNwbWF4IC0gOCkgJiYKKwkJCQkgICAgICAgKHNwc2l6IDwgc3BtYXgpKSB7CisJCQkJc3Bz aXogKz0gKHNwbWF4IC0gYmVzdGxlbikgLyAzOworCQkJCWRlYnVnKEYxMDEsImJlc3RsZW4gc3Bz aXogQyIsIiIsc3BzaXopOworCQkJICAgIH0KKwkJCSAgICAvKiBCdXQgbm90IHRvbyBmYXIgKi8K KwkJCSAgICBpZiAoc3BzaXogPiBzcG1heCkgeworCQkJCXNwc2l6ID0gc3BtYXg7CisJCQkJZGVi dWcoRjEwMSwiYmVzdGxlbiBzcHNpeiBEIiwiIixzcHNpeik7CisJCQkgICAgfQorCQkJfQorCQkg ICAgfQorI2VuZGlmIC8qIE5FV0RQTCAqLworCisjaWZkZWYgQ0tfVElNRVJTCisJCSAgICBpZiAo cnR0ZmxnICYmIHRpbWludCkgLyogSWYgZG9pbmcgZHluYW1pYyB0aW1lcnMgKi8KKwkJICAgICAg Z2V0cnR0KG5ha3N0YXRlLCByc24pOyAvKiBjYWxsIHJvdXRpbmUgdG8gc2V0IGl0LiAqLworCQkg ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgIC8qIEpIRCAyMDEwMDIwOCAqLworCQkgICAgICBy Y3Z0aW1vID0gdGltaW50OwkgICAgIC8qIEpIRCAyMDEwMDIwOCAqLworI2VuZGlmIC8qIENLX1RJ TUVSUyAqLworLyoKKyAgTk9URTogVGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgZnJlZXMgdGhlIGJ1 ZmZlciBvZiB0aGUgQUNLIHdlIGp1c3QgZ290LgorICBCdXQgdGhlIHVwcGVyIGxheWVycyBzdGls bCBuZWVkIHRoZSBkYXRhLCBsaWtlIGlmIGl0J3MgdGhlIEFDSyB0byBhbiBJLAorICBTLCBGLCBE LCBaLCBvciBqdXN0IGFib3V0IGFueSBraW5kIG9mIHBhY2tldC4gIFNvIGZvciBub3csIGZyZWVy YnVmKCkKKyAgZGVhbGxvY2F0ZXMgdGhlIGJ1ZmZlciwgYnV0IGRvZXMgbm90IGVyYXNlIHRoZSBk YXRhIG9yIGRlc3Ryb3kgdGhlIHBvaW50ZXIKKyAgdG8gaXQuICBUaGVyZSdzIG5vIG90aGVyIHNp bmdsZSBwbGFjZSB3aGVyZSB0aGVzZSByZWNlaXZlIGJ1ZmZlcnMgY2FuIGJlCisgIGNvcnJlY3Rs eSBmcmVlZCAoPykgLi4uCisqLworCQkgICAgZnJlZXJwa3QocnNuKTsJLyogRnJlZSB0aGUgQUNL J3MgYnVmZmVyICovCisJCSAgICBmcmVlc2J1Zihyc24pOwkvKiAqKiogRnJlZSB0aGUgc2VudCBw YWNrZXQncyBidWZmZXIgKi8KKwkJICAgIGlmIChyc24gPT0gd2lubG8pIHsJLyogR290IHRoZSBv bmUgd2Ugd2FudCAqLworCQkJc2Fja3RibFt3aW5sb10gPSAwOworCQkJd2lubG8gPSAod2lubG8g KyAxKSAlIDY0OworCQkJZGVidWcoRjEwMSwiaW5wdXQgc2VuZCByb3RhdGVkIHNlbmQgd2luZG93 IiwiIix3aW5sbyk7CisJCQlicmVhazsJCS8qIFJldHVybiB0aGUgQUNLICovCisJCSAgICB9IGVs c2UgeworCQkJZGVidWcoRjEwMSwiaW5wdXQgc2VuZCBtYXJrIHBrdCIsIiIscnNuKTsKKwkJCWNv bnRpbnVlOwkvKiBPdGhlcndpc2UgZ28gcmVhZCBhbm90aGVyIHBhY2tldCAqLworCQkgICAgfQor CQl9IGVsc2UgaWYgKHkgPT0gMSAmJiB3c2xvdHMgPCAyKSB7IC8qICgxOTApIEFDSyBmb3IgcHJl dmlvdXMgKi8KKwkJICAgIG51bWVycnMrKzsJCS8qID09IE5BSyBmb3IgY3VycmVudCwgY291bnQg ZXJyb3IgKi8KKwkJICAgIGRlYnVnKEYxMDEsImlucHV0IHNlbmQgQUNLIGZvciBwcmV2aW91cyIs IiIscnNuKTsKKwkJICAgIGZyZWVycGt0KHJzbik7CS8qIEZyZWUgTkFLJ3MgYnVmZmVyICovCisJ CSAgICB4ID0gcmVzZW5kKHdpbmxvKTsJLyogUmVzZW5kIGN1cnJlbnQgcGFja2V0ICovCisJCSAg ICBpZiAoeCA8IDApIHsKKwkJCXR5cGUgPSAnRSc7CisJCQllcnJwa3QoKENIQVIgKikiVG9vIG1h bnkgcmV0cmllcyIpOworCQkJYnJlYWs7CisJCSAgICB9IGVsc2UgY29udGludWU7CS8qIFJlc2Vu ZCBvaywgZ28gcmVhZCBhbm90aGVyIHBhY2tldCAqLworCQl9IGVsc2UgewkJLyogT3RoZXIgY2Fz ZXMsIGp1c3QgaWdub3JlICovCisJCSAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBzZW5kIEFDSyBvdXQg b2Ygd2luZG93IiwiIixyc24pOworCQkgICAgZnJlZXJwa3QocnNuKTsKKwkJICAgIGNvbnRpbnVl OworCQl9CisJICAgIH0KKwkgICAgaWYgKHR5cGUgPT0gJ04nKSB7CQkvKiBOQUsgKi8KKwkJbnVt ZXJycysrOwkJLyogQ291bnQgYW4gZXJyb3IgKi8KKyNpZmRlZiBTVFJFQU1JTkcKKwkJaWYgKHN0 cmVhbWluZykgewkJLyogU3RyZWFtaW5nICovCisJCSAgICBlcnJwa3QoKENIQVIgKikiTkFLIHJl Y2VpdmVkIG9uIHJlbGlhYmxlIGxpbmsuIik7CisJCSAgICB0eXBlID0gJ0UnOworCQkgICAgYnJl YWs7CisJCX0KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKworCQlkZWJ1ZyhGMTAxLCJpbnB1dCBz ZW5kIE5BSyIsIiIscnNuKTsKKyNpZmRlZiBORVdEUEwKKwkJLyogUmVkdWNlIHByZXZhaWxpbmcg cGFja2V0IGxlbmd0aCAqLworCQl4ID0gc3NlcXRibFtyc25dOwkvKiBMZW5ndGggb2YgcGFja2V0 IHRoYXQgd2FzIE5BSydkICovCisJCWlmICh4ID4gLTEpIHsJCS8qIElmIGl0J3MgYSBEYXRhIHBh Y2tldCB3ZSd2ZSBzZW50ICovCisJCSAgICBpZiAoc19wa3RbeF0ucGtfdHlwID09ICdEJykgewor CQkJc3BzaXogPSAoc19wa3RbeF0ucGtfbGVuICsgOCkgPj4gMTsgLyogSGFsdmUgbGVuZ3RoICov CisjaWZkZWYgQ09NTUVOVAorCQkJLyogVGhpcyBtaWdodCBiZSBhIGdvb2QgaWRlYSAtLSBoYXZl bid0IHRyaWVkIGl0IC4uLiAqLworCQkJaWYgKGJlc3RsZW4gPiAwICYmIHNwc2l6ID4gYmVzdGxl bikKKwkJCSAgc3BzaXogPSBiZXN0bGVuOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJCWlmIChz cHNpeiA8IDIwKSBzcHNpeiA9IDIwOworCQkJZGVidWcoRjEwMSwiaW5wdXQgTiBjdXQgcGFja2V0 IGxlbmd0aCIsIiIsc3BzaXopOworCQkgICAgfQorCQl9CisjZW5kaWYgLyogTkVXRFBMICovCisJ CWZyZWVycGt0KHJzbik7CQkvKiBGcmVlIGJ1ZmZlciB3aGVyZSBOQUsgbGllcy4gKi8KKwkJaWYg KHkgPT0gMCkgewkJLyogSW4gY3VycmVudCB3aW5kb3cgKi8KKwkJICAgIGRlYnVnKEYxMDAsIiBp biB3aW5kb3ciLCIiLDApOworCQkgICAgayA9IHNzZXF0YmxbcnNuXTsJLyogR2V0IHBvaW50ZXIg dG8gTkFLJ2QgcGFja2V0LiAqLworCQkgICAgaWYgKGsgPCAwIHx8IChrID4gLTEgJiYgc19wa3Rb a10ucGtfdHlwID09ICcgJykpIHsKKwkJCXggPSByZXNlbmQod2lubG8pOyAvKiBQYWNrZXQgd2Ug aGF2ZW4ndCBzZW50IHlldC4gKi8KKwkJICAgIH0gZWxzZSB7CisJCQl4ID0gcmVzZW5kKHJzbik7 IC8qIFJlc2VuZCByZXF1ZXN0ZWQgcGFja2V0LiAqLworCQkgICAgfQorCQkgICAgaWYgKHggPCAw KSB7CS8qIFJlc2VuZCBlcnJvciBpcyBmYXRhbC4gICovCisJCQl0eXBlID0gJ0UnOworCQkJZXJy cGt0KChDSEFSICopIlRvbyBtYW55IHJldHJpZXMiKTsKKwkJCWJyZWFrOworCQkgICAgfSBlbHNl IGNvbnRpbnVlOwkvKiBSZXNlbmQgb2ssIGdvIHJlYWQgYW5vdGhlciBwYWNrZXQgKi8KKwkJfSBl bHNlIGlmICgocnNuID09IChwa3RudW0gKyAxKSAlIDY0KSkgeyAvKiBOQUsgZm9yIG5leHQgcGt0 ICovCisJCSAgICBpZiAod3Nsb3RzID4gMSkgeworCQkJZGVidWcoIEYxMDEsIk5BSyBmb3IgbmV4 dCBwYWNrZXQsIHdpbmRvd2luZyIsIiIscnNuKTsKKwkJCXggPSByZXNlbmQod2lubG8pOyAvKiBS ZXNlbmQgd2luZG93LWxvdyAqLworCQkJaWYgKHggPCAwKSB7CisJCQkgICAgdHlwZSA9ICdFJzsK KwkJCSAgICBlcnJwa3QoKENIQVIgKikiVG9vIG1hbnkgcmV0cmllcyIpOworCQkJICAgIGJyZWFr OworCQkJfQorCQkJY29udGludWU7CS8qIEdvIGJhY2sgYW5kIHJlYWQgYW5vdGhlciBwa3QgKi8K KwkJICAgIH0KKwkJICAgIGRlYnVnKEYxMDEsIk5BSyBmb3IgbmV4dCBwYWNrZXQsIG5vIHdpbmRv d2luZyIsIiIscnNuKTsKKwkJICAgIHggPSAocnNuID09IDApID8gNjMgOiByc24gLSAxOworCQkg ICAgaWYgKHggPT0gMCAmJiAoc25kdHlwID09ICdTJyB8fCBzbmR0eXAgPT0gJ0knKSkgeworCQkJ cmVzZW5kKDApOwkvKiBBQ0sgZm9yIFMgb3IgSSBwYWNrZXQgbWlzc2luZyAqLworCQkJY29udGlu dWU7CS8qIHNvIHJlc2VuZCB0aGUgUyBvciBJICovCisJCSAgICB9CisJCSAgICByc24gPSB4OwkJ LyogRWxzZSwgdHJlYXQgTkFLKG4rMSkgYXMgQUNLKG4pICovCisJCSAgICBuYWsyYWNrID0gMTsJ LyogR28gYmFjayBhbmQgcHJvY2VzcyB0aGUgQUNLICovCisJCSAgICBjb250aW51ZTsKKwkJfSBl bHNlIGlmICh5ID4gMCkgewkvKiBOQUsgZm9yIHBrdCB3ZSBjYW4ndCByZXNlbmQgKi8KKwkJICAg IGRlYnVnKEYxMDEsIiBOQUsgb3V0IG9mIHdpbmRvdyIsIiIscnNuKTsgLyogYmFkLi4uICovCisJ CSAgICB0eXBlID0gJ0UnOworCQkgICAgZXJycGt0KChDSEFSICopIk5BSyBvdXQgb2Ygd2luZG93 Iik7CisJCSAgICBicmVhazsKKwkJfSBlbHNlIGNvbnRpbnVlOwkvKiBJZ25vcmUgb3RoZXIgTkFL cyAqLworCSAgICB9CQkJCS8qIEVuZCBvZiBmaWxlLXNlbmRlciBOQUsgaGFuZGxlciAqLworCisg ICAgICAgICAgICBpZiAocnNuID09IHdpbmxvKSB7CQkvKiBOb3QgQUNLLCBOQUssIHRpbWVvdXQs IGV0Yy4gKi8KKwkJZGVidWcoRjAwMCwiaW5wdXQgc2VuZCB1bmV4cGVjdGVkIHR5cGUiLCIiLHR5 cGUpOworCQlicmVhazsKKwkgICAgfQorCX0JCQkJLyogRW5kIG9mIGZpbGUtc2VuZGVyIHNlY3Rp b24gKi8KKyAgICB9CQkJCQkvKiBFbmQgb2YgaW5wdXQoKSB3aGlsZSgpIGxvb3AgKi8KKy8qCisg IFdoZW4gdGhlIHdpbmRvdyBzaXplIGlzIDEgYW5kIHdlIGhhdmUgdGhlIHBhY2tldCB3ZSB3YW50 LCB0aGVyZSBjYW4gbm90CisgIHBvc3NpYmx5IGJlIGFueXRoaW5nIHdhaXRpbmcgZm9yIHVzIG9u IHRoZSBjb25uZWN0aW9uIHRoYXQgaXMgdXNlZnVsIHRvIHVzLgorICBIb3dldmVyLCB0aGVyZSBt aWdodCBiZSByZWR1bmRhbnQgY29waWVzIG9mIGEgcGFja2V0IHdlIGFscmVhZHkgZ290LCB3aGlj aAorICB3b3VsZCBjYXVzZSBuZWVkbGVzcyBjeWNsZXMgb2YgcmVwZWF0ZWQgcGFja2V0cy4gIFRo ZXJlZm9yZSB3ZSBmbHVzaCB0aGUKKyAgY29tbXVuaWNhdGlvbnMgaW5wdXQgYnVmZmVyIG5vdyB0 byB0cnkgdG8gZ2V0IHJpZCBvZiB1bmRlc2lyZWQgYW5kIHVubmVlZGVkCisgIHBhY2tldHMgdGhh dCB3ZSBoYXZlIG5vdCByZWFkIHlldC4KKworICBBY3R1YWxseSwgdGhlIGZpcnN0IHNlbnRlbmNl IGFib3ZlIGlzIG5vdCBlbnRpcmVseSB0cnVlOiB0aGVyZSBjb3VsZCBiZSBhbgorICBFcnJvciBw YWNrZXQgd2FpdGluZyB0byBiZSByZWFkLiAgRmx1c2hpbmcgYW4gRSBwYWNrZXQgaXMgYmFkIGJl Y2F1c2UgaXQKKyAgd2lsbCBub3QgYmUgcmVzZW50LCBhbmQgd2UnbGwgZ28gaW50byBhIGN5Y2xl IG9mIHRpbWluZyBvdXQgYW5kCisgIHJldHJhbnNtaXR0aW5nIHVwIHRvIHRoZSByZXRyeSBsaW1p dC4gIC0gZmRjIDIwMDcvMDMvMDIKKyovCisgICAgaWYgKHdzbG90biA9PSAxCQkJLyogKG5vdCB3 c2xvdHMhKSAqLworI2lmZGVmIFNUUkVBTUlORworCSYmICFzdHJlYW1pbmcJCQkvKiBCdXQgbm90 IHdoZW4gc3RyZWFtaW5nICovCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJKSB7CisJZGVidWco RjEwMCwiaW5wdXQgYWJvdXQgdG8gZmx1c2giLCIiLDApOworCXR0Zmx1aSgpOwkJLyogR290IHdo YXQgd2Ugd2FudCwgY2xlYXIgaW5wdXQgYnVmZmVyLiAqLworICAgIH0KKyNpZm5kZWYgTkVXRFBM CisgICAgaWYgKCFuYWtzdGF0ZSkJCQkvKiBXaGVuIHNlbmRpbmcgKi8KKyAgICAgIHJjYWxjcHN6 KCk7CQkJLyogcmVjYWxjdWxhdGUgc2l6ZSBldmVyeSBwYWNrZXQgKi8KKyNlbmRpZiAvKiBORVdE UEwgKi8KKyAgICBpZiAodHlwZSA9PSAnRScpCisgICAgICB4aXRzdGEgfD0gKHdoYXQgPyB3aGF0 IDogMSk7CS8qIFJlbWVtYmVyIHdoYXQgZmFpbGVkLiAqLworICAgIGRlYnVnKEYxMDEsImlucHV0 IHdpbmxvIiwiIix3aW5sbyk7CisgICAgZGVidWcoRjEwMSwiaW5wdXQgcnNuIiwiIixyc24pOwor ICAgIGRlYnVnKEYwMDAsImlucHV0IHJldHVybmluZyB0eXBlIiwiIix0eXBlKTsKKyAgICByZXR1 cm4ocmN2dHlwID0gdHlwZSk7CQkvKiBTdWNjZXNzLCByZXR1cm4gcGFja2V0IHR5cGUuICovCit9 CisKKyNpZmRlZiBQQVJTRU5TRQorLyogIFAgQSBSIEMgSCBLICAtLSAgQ2hlY2sgaWYgS2VybWl0 IHBhY2tldCBoYXMgcGFyaXR5ICAqLworCisvKgorICBDYWxsIHdpdGggcyA9IHBvaW50ZXIgdG8g cGFja2V0LCBzdGFydCA9IHBhY2tldCBzdGFydCBjaGFyYWN0ZXIsIG4gPSBsZW5ndGguCisgIFJl dHVybnMgMCBpZiBwYWNrZXQgaGFzIG5vIHBhcml0eSwgLTEgb24gZXJyb3IsIG9yLCBpZiBwYWNr ZXQgaGFzIHBhcml0eToKKyAgICAnZScgZm9yIGV2ZW4sICdvJyBmb3Igb2RkLCAnbScgZm9yIG1h cmsuICBTcGFjZSBwYXJpdHkgY2Fubm90IGJlIHNlbnNlZC4KKyAgU28gYSByZXR1cm4gdmFsdWUg b2YgMCByZWFsbHkgbWVhbnMgZWl0aGVyIHNwYWNlIG9yIG5vbmUuCisgIFJldHVybnMgLTIgaWYg cGFyaXR5IGhhcyBhbHJlYWR5IGJlZW4gY2hlY2tlZCBkdXJpbmcgdGhpcyBwcm90b2NvbCBvcGVy YXRpb24uCisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3BhcmNoayhDSEFSICpzLCBDSEFSIHN0 YXJ0LCBpbnQgbikKKyNlbHNlCitwYXJjaGsocyxzdGFydCxuKSBDSEFSICpzLCBzdGFydDsgaW50 IG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHBhcmNoayAqLyB7CisgICAgQ0hBUiBzMCwg czEsIHMyLCBzMzsKKworICAgIGRlYnVnKEYxMDEsInBhcmNoayBuIiwiIixuKTsKKyAgICBkZWJ1 ZyhGMTAxLCJwYXJjaGsgc3RhcnQiLCIiLHN0YXJ0KTsKKworICAgIHMwID0gc1swXSAmIDB4N2Y7 CQkJLyogTWFyayBmaWVsZCAodXN1YWxseSBDdHJsLUEpICovCisKKyAgICBpZiAoczAgIT0gc3Rh cnQgfHwgbiA8IDUpIHJldHVybigtMSk7IC8qIE5vdCBhIHZhbGlkIHBhY2tldCAqLworCisvKiBM b29rIGF0IHBhY2tldCBjb250cm9sIGZpZWxkcywgd2hpY2ggbmV2ZXIgaGF2ZSA4dGggYml0IHNl dCAqLworLyogRmlyc3QgY2hlY2sgZm9yIG5vIHBhcml0eSwgbW9zdCBjb21tb24gY2FzZS4gKi8K KworICAgIGlmICgoKHNbMF0gfCBzWzFdIHwgc1syXSB8IHNbM10pICYgMHg4MCkgPT0gMCkKKyAg ICAgIHJldHVybigwKTsJCQkvKiBObyBwYXJpdHkgb3Igc3BhY2UgcGFyaXR5ICovCisKKy8qIENo ZWNrIGZvciBtYXJrIHBhcml0eSAqLworCisgICAgaWYgKCgoc1swXSAmIHNbMV0gJiBzWzJdICYg c1szXSkgJiAweDgwKSA9PSAweDgwKQorICAgICAgcmV0dXJuKCdtJyk7CQkJLyogTWFyayBwYXJp dHkgKi8KKworLyogUGFja2V0IGhhcyBzb21lIGtpbmQgb2YgcGFyaXR5ICovCisvKiBNYWtlIDct Yml0IGNvcGllcyBvZiBjb250cm9sIGZpZWxkcyAqLworCisgICAgczEgPSBzWzFdICYgMHg3ZjsJ CQkvKiBMRU4gKi8KKyAgICBzMiA9IHNbMl0gJiAweDdmOwkJCS8qIFNFUSAqLworICAgIHMzID0g c1szXSAmIDB4N2Y7CQkJLyogVFlQRSAqLworCisvKiBDaGVjayBmb3IgZXZlbiBwYXJpdHkgKi8K KworICAgIGlmICgoc1swXSA9PSBwX3RibFtzMF0pICYmCisgICAgICAgIChzWzFdID09IHBfdGJs W3MxXSkgJiYKKyAgICAgICAgKHNbMl0gPT0gcF90YmxbczJdKSAmJgorCShzWzNdID09IHBfdGJs W3MzXSkpCisgICAgICByZXR1cm4oJ2UnKTsKKworLyogQ2hlY2sgZm9yIG9kZCBwYXJpdHkgKi8K KworICAgIGlmICgoc1swXSAhPSBwX3RibFtzMF0pICYmCisgICAgICAgIChzWzFdICE9IHBfdGJs W3MxXSkgJiYKKyAgICAgICAgKHNbMl0gIT0gcF90YmxbczJdKSAmJgorCShzWzNdICE9IHBfdGJs W3MzXSkpCisgICAgICByZXR1cm4oJ28nKTsKKworLyogT3RoZXJ3aXNlIGl0J3MgcHJvYmFibHkg bGluZSBub2lzZS4gIExldCBjaGVja3N1bSBjYWxjdWxhdGlvbiBjYXRjaCBpdC4gKi8KKworICAg IHJldHVybigtMSk7Cit9CisjZW5kaWYgLyogUEFSU0VOU0UgKi8KKwwKKy8qCisgIENoZWNrIHRv IG1ha2Ugc3VyZSB0aW1lb3V0IGludGVydmFscyBhcmUgbG9uZyBlbm91Z2ggdG8gYWxsb3cgbWF4 aW11bQorICBsZW5ndGggcGFja2V0cyB0byBnZXQgdGhyb3VnaCBiZWZvcmUgdGhlIHRpbWVyIGdv ZXMgb2ZmLiAgSWYgbm90LCB0aGUKKyAgdGltZW91dCBpbnRlcnZhbCBpcyBhZGp1c3RlZCB1cHdh cmRzLgorCisgIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHRy YW5zYWN0aW9uLCBiZWZvcmUgd2UKKyAga25vdyBhbnl0aGluZyBhYm91dCB0aGUgZGVsYXkgY2hh cmFjdGVyaXN0aWNzIG9mIHRoZSBsaW5lLiAgSXQgd29ya3MKKyAgb25seSBmb3Igc2VyaWFsIGNv bW11bmljYXRpb24gZGV2aWNlczsgaXQgdHJ1c3RzIHRoZSBzcGVlZCByZXBvcnRlZCBieQorICB0 aGUgb3BlcmF0aW5nIHN5c3RlbS4KKworICBDYWxsIHdpdGggYSB0aW1vdXQgaW50ZXJ2YWwuICBS ZXR1cm5zIGl0LCBhZGp1c3RlZCBpZiBuZWNlc3NhcnkuCisqLworaW50CitjaGt0aW1vKHRpbW8s ZmxhZykgaW50IHRpbW8sIGZsYWc7IHsKKyAgICBsb25nIGNwcywgejsgaW50IHgsIHk7CisjaWZk ZWYgU1RSRUFNSU5HCisgICAgZGVidWcoRjEwMSwiY2hrdGltbyBzdHJlYW1pbmciLCIiLHN0cmVh bWluZyk7CisgICAgaWYgKHN0cmVhbWluZykKKyAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBT VFJFQU1JTkcgKi8KKworICAgIGRlYnVnKEYxMDEsImNoa3RpbW8gdGltbyIsIiIsdGltbyk7IC8q IFRpbWVvdXQgYmVmb3JlIGFkanVzdG1lbnQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJjaGt0aW1vIGZs YWciLCIiLGZsYWcpOworCisgICAgaWYgKGZsYWcpCQkJCS8qIERvbid0IGNoYW5nZSB0aW1lb3V0 IGlmIHVzZXIgKi8KKyAgICAgIHJldHVybih0aW1vKTsJCQkvKiBnYXZlIFNFVCBTRU5EIFRJTUVP VVQgY29tbWFuZC4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJjaGt0aW1vIHNwbWF4IiwiIixzcG1heCk7 CisgICAgZGVidWcoRjEwMSwiY2hrdGltbyB1cnBzaXoiLCIiLHVycHNpeik7CisKKyAgICBpZiAo IW5ldHdvcmspIHsJCQkvKiBPbiBzZXJpYWwgY29ubmVjdGlvbnMuLi4gKi8KKwlzcGVlZCA9IHR0 Z3NwZCgpOwkJLyogR2V0IGN1cnJlbnQgc3BlZWQuICovCisJaWYgKHNwZWVkID4gMEwpIHsKKwkg ICAgY3BzID0gc3BlZWQgLyAxMEw7CQkvKiBDb252ZXJ0IHRvIGNoYXJzIHBlciBzZWNvbmQgKi8K KwkgICAgaWYgKGNwcyA+IDBMKSB7CisJCWxvbmcgcGxlbjsJCS8qIE1heGltdW0gb2Ygc2VuZCBh bmQgcmN2IHBrdCBzaXplICovCisJCXogPSBjcHMgKiAobG9uZykgdGltbzsJLyogQ2hhcnMgcGVy IHRpbWVvdXQgaW50ZXJ2YWwgKi8KKwkJeiAtPSB6IC8gMTBMOwkJLyogTGVzcyAxMCBwZXJjZW50 ICovCisJCXBsZW4gPSBzcG1heDsKKwkJaWYgKHVycHNpeiA+IHNwbWF4KSBwbGVuID0gdXJwc2l6 OworCQlkZWJ1ZyhGMTAxLCJjaGt0aW1vIHBsZW4iLCIiLHBsZW4pOworCQlpZiAoeiA8IHBsZW4p IHsJCS8qIENvbXBhcmUgd2l0aCBwYWNrZXQgc2l6ZSAqLworCQkgICAgeCA9IChpbnQpICgobG9u ZykgcGxlbiAvIGNwcyk7IC8qIEFkanVzdCBpZiBuZWNlc3NhcnkgKi8KKwkJICAgIHkgPSB4IC8g MTA7CQkvKiBBZGQgMTAgcGVyY2VudCBmb3Igc2FmZXR5ICovCisJCSAgICBpZiAoeSA8IDIpIHkg PSAyOwkvKiBPciAyIHNlY29uZHMsIHdoaWNoZXZlciBpcyBtb3JlICovCisJCSAgICB4ICs9IHk7 CisJCSAgICBpZiAoeCA+IHRpbW8pCS8qIElmIHRoaXMgaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQg Ki8KKwkJICAgICAgdGltbyA9IHg7CQkvKiB0aW1lb3V0LCBjaGFuZ2UgdGhlIHRpbWVvdXQgKi8K KwkJICAgIGRlYnVnKEYxMDEsImNoa3RpbW8gbmV3IHRpbW8iLCIiLHRpbW8pOworCQl9CisJICAg IH0KKwl9CisgICAgfQorICAgIHJldHVybih0aW1vKTsKK30KKwwKKy8qICBTIFAgQSBDIEsgIC0t ICBDb25zdHJ1Y3QgYW5kIHNlbmQgYSBwYWNrZXQgICovCisKKy8qCisgIHNwYWNrKCkgc2VuZHMg YSBwYWNrZXQgb2YgdGhlIGdpdmVuIHR5cGUsIHNlcXVlbmNlIG51bWJlciBuLCB3aXRoIGxlbiBk YXRhCisgIGNoYXJhY3RlcnMgcG9pbnRlZCB0byBieSBkLCBpbiBlaXRoZXIgYSByZWd1bGFyIG9y IGV4dGVuZGVkLSBsZW5ndGggcGFja2V0LAorICBkZXBlbmRpbmcgb24gbGVuLiAgUmV0dXJucyB0 aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHNlbnQsIG9yIGVsc2UgLTEKKyAgdXBvbiBmYWls dXJlLiAgVXNlcyBnbG9iYWwgbnBhZCwgcGFkY2gsIG15c3RjaCwgYmN0dSwgZGF0YS4gIExlYXZl cyBwYWNrZXQKKyAgZnVsbHkgYnVpbHQgYW5kIG51bGwtdGVybWluYXRlZCBmb3IgbGF0ZXIgcmV0 cmFuc21pc3Npb24gYnkgcmVzZW5kKCkuCisgIFVwZGF0ZXMgZ2xvYmFsIHNuZHBrdGwgKHNlbmQt cGFja2V0IGxlbmd0aCkuCisKKyAgTk9URTogVGhlIGdsb2JhbCBwb2ludGVyICJkYXRhIiBpcyBh c3N1bWVkIHRvIHBvaW50IGludG8gdGhlIDd0aCBwb3NpdGlvbgorICBvZiBhIGNoYXJhY3RlciBh cnJheSAocHJlc3VtYWJseSBpbiBwYWNrZXQgYnVmZmVyIGZvciB0aGUgY3VycmVudCBwYWNrZXQp LgorICBJdCB3YXMgdXNlZCBieSBnZXRwa3QoKSB0byBidWlsZCB0aGUgcGFja2V0IGRhdGEgZmll bGQuICBzcGFjaygpIGZpbGxzIGluCisgIHRoZSBoZWFkZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGRh dGEgcG9pbnRlciAodGhlIGRhdGEgcG9pbnRlciBpcyBkZWZpbmVkCisgIGluIGdldHNidWYoKSBp biBja2NmbjMuYykuICBJZiB0aGUgYWRkcmVzcyAiZCIgaXMgdGhlIHNhbWUgYXMgImRhdGEiLCB0 aGVuCisgIHRoZSBwYWNrZXQncyBkYXRhIGZpZWxkIGhhcyBiZWVuIGJ1aWx0ICJpbiBwbGFjZSIg YW5kIG5lZWQgbm90IGJlIGNvcGllZC4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworc3BhY2so Y2hhciBwa3R0eXAsIGludCBuLCBpbnQgbGVuLCBDSEFSICpkKQorI2Vsc2UKK3NwYWNrKHBrdHR5 cCxuLGxlbixkKSBjaGFyIHBrdHR5cDsgaW50IG4sIGxlbjsgQ0hBUiAqZDsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogc3BhY2sgKi8geworICAgIHJlZ2lzdGVyIGludCBpOworICAgIGludCBp eCwgaiwgaywgeCwgbHAsIGxvbmdwa3QsIGNvcHksIGxvZ2xlbjsKKworI2lmZGVmIEdGVElNRVIK KyAgICBDS0ZMT0FUIHQxID0gMC4wLCB0MiA9IDAuMDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisK KyAgICByZWdpc3RlciBDSEFSICpjcCwgKm15ZGF0YTsKKyAgICB1bnNpZ25lZCBjcmM7CisKKyAg ICBjb3B5ID0gKGQgIT0gZGF0YSk7CQkJLyogRmxhZyB3aGV0aGVyIGRhdGEgbXVzdCBiZSBjb3Bp ZWQgICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsJCQkvKiBTYXZlIGxvdHMg b2YgZnVuY3Rpb24gY2FsbHMhICovCisJZGVidWcoRjEwMSwic3BhY2sgbiIsIiIsbik7CisjaWZk ZWYgQ09NTUVOVAorCWlmIChwa3R0eXAgIT0gJ0QnKSB7CQkvKiBEYXRhIHBhY2tldHMgd291bGQg YmUgdG9vIGxvbmcgKi8KKwkgICAgZGVidWcoRjExMSwic3BhY2sgZGF0YSIsZGF0YSxkYXRhKTsK KwkgICAgZGVidWcoRjExMSwic3BhY2sgZCIsZCxkKTsKKwl9CisjZW5kaWYJLyogQ09NTUVOVCAq LworCWRlYnVnKEYxMDEsInNwYWNrIGxlbiIsIiIsbGVuKTsKKwlkZWJ1ZyhGMTAxLCJzcGFjayBj b3B5IiwiIixjb3B5KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGxvbmdwa3Qg PSAobGVuICsgYmN0bCArIDIpID4gOTQ7CS8qIERlY2lkZSB3aGV0aGVyIGl0J3MgYSBsb25nIHBh Y2tldCAqLworICAgIG15ZGF0YSA9IGRhdGEgLSA3ICsgKGxvbmdwa3QgPyAwIDogMyk7IC8qIFN0 YXJ0aW5nIHBvc2l0aW9uIG9mIGhlYWRlciAqLworICAgIGsgPSBzc2VxdGJsW25dOwkJCS8qIFBh Y2tldCBzdHJ1Y3R1cmUgaW5mbyBmb3IgcGt0IG4gKi8KKyNpZmRlZiBDT01NRU5UCisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nKSB7CQkJLyogU2F2ZSAyIG1vcmUgZnVuY3Rpb24gY2FsbHMu Li4gKi8KKwlkZWJ1ZyhGMTAxLCJzcGFjayBteWRhdGEiLCIiLG15ZGF0YSk7CisJZGVidWcoRjEw MSwic3BhY2sgc3NlcXRibFtuXSIsIiIsayk7CisJaWYgKGsgPCAwKSB7CisjaWZkZWYgU1RSRUFN SU5HCisJICAgIGlmICghc3RyZWFtaW5nKQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAgICAg IGRlYnVnKEYxMDEsInNwYWNrIHNlbmRpbmcgcGFja2V0IG91dCBvZiB3aW5kb3ciLCIiLG4pOwor CX0KKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisgICAg aWYgKGsgPiAtMSkgeworCXNfcGt0W2tdLnBrX2FkciA9IG15ZGF0YTsJLyogUmVtZW1iZXIgYWRk cmVzcyBvZiBwYWNrZXQuICovCisJc19wa3Rba10ucGtfc2VxID0gbjsJCS8qIFJlY29yZCBzZXF1 ZW5jZSBudW1iZXIgKi8KKwlzX3BrdFtrXS5wa190eXAgPSBwa3R0eXA7CS8qIFJlY29yZCBwYWNr ZXQgdHlwZSAqLworICAgIH0KKyAgICBzcGt0bCA9IDA7CQkJCS8qIEluaXRpYWxpemUgbGVuZ3Ro IG9mIHRoaXMgcGFja2V0ICovCisgICAgaSA9IDA7CQkJCS8qIGFuZCBwb3NpdGlvbiBpbiBwYWNr ZXQuICovCisKKy8qIE5vdyBmaWxsIHRoZSBwYWNrZXQgKi8KKworICAgIG15ZGF0YVtpKytdID0g bXlzdGNoOwkJLyogTUFSSyAqLworICAgIGxwID0gaSsrOwkJCQkvKiBQb3NpdGlvbiBvZiBMRU4s IGZpbGwgaW4gbGF0ZXIgKi8KKworICAgIG15ZGF0YVtpKytdID0gdG9jaGFyKG4pOwkJLyogU0VR IGZpZWxkICovCisgICAgbXlkYXRhW2krK10gPSBwa3R0eXA7CQkvKiBUWVBFIGZpZWxkICovCisg ICAgaiA9IGxlbiArIGJjdGw7CQkJLyogTGVuZ3RoIG9mIGRhdGEgKyBibG9jayBjaGVjayAqLwor ICAgIGlmIChsb25ncGt0KSB7CQkJLyogTG9uZyBwYWNrZXQ/ICovCisJaW50IHg7CQkJCS8qIFll cywgd29yayBhcm91bmQgU0NPIFhlbml4LzI4NiAqLworI2lmZGVmIENLVFVOSU5HCisJdW5zaWdu ZWQgaW50IGNoazsKKyNlbmRpZiAvKiBDS1RVTklORyAqLworCXggPSBqIC8gOTU7CQkJLyogY29t cGlsZXIgYnVnLi4uICovCisgICAgICAgIG15ZGF0YVtscF0gPSB0b2NoYXIoMCk7CQkvKiBTZXQg TEVOIHRvIHplcm8gKi8KKyAgICAgICAgbXlkYXRhW2krK10gPSB0b2NoYXIoeCk7CS8qIEV4dGVu ZGVkIGxlbmd0aCwgaGlnaCBieXRlICovCisgICAgICAgIG15ZGF0YVtpKytdID0gdG9jaGFyKGog JSA5NSk7CS8qIEV4dGVuZGVkIGxlbmd0aCwgbG93IGJ5dGUgKi8KKyNpZmRlZiBDS1RVTklORwor ICAgICAgICAvKiBIZWFkZXIgY2hlY2tzdW0gLSBza2lwIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQg bG9vcHMgKi8KKwkgIGNoayA9ICh1bnNpZ25lZCkgbXlkYXRhW2xwXSAgICsKKwkgICAgICAgICh1 bnNpZ25lZCkgbXlkYXRhW2xwKzFdICsKKwkgICAgICAgICh1bnNpZ25lZCkgbXlkYXRhW2xwKzJd ICsKKwkJKHVuc2lnbmVkKSBteWRhdGFbbHArM10gKworCQkodW5zaWduZWQpIG15ZGF0YVtscCs0 XSA7CisJbXlkYXRhW2krK10gPSB0b2NoYXIoKENIQVIpICgoKChjaGsgJiAwMzAwKSA+PiA2KSAr IGNoaykgJiAwNzcpKTsKKyNlbHNlCisgICAgICAgIG15ZGF0YVtpXSA9ICdcMCc7CQkvKiBUZXJt aW5hdGUgZm9yIGhlYWRlciBjaGVja3N1bSAqLworICAgICAgICBteWRhdGFbaSsrXSA9IHRvY2hh cihjaGsxKG15ZGF0YStscCw1KSk7CisjZW5kaWYgLyogQ0tUVU5JTkcgKi8KKyAgICB9IGVsc2Ug bXlkYXRhW2xwXSA9IHRvY2hhcihqKzIpOwkvKiBOb3JtYWwgTEVOICovCisvKgorICBXaGVuIHNl bmRpbmcgYSBmaWxlLCB0aGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSByaWdodCBwbGFjZS4gIElm IGl0IHdlcmVuJ3QsCisgIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gb3B0aW1pemUgdGhpcyBzZWN0 aW9uIGJ5IHVzaW5nIG1lbWNweSBvciBiY29weQorICAobmVpdGhlciBvZiB3aGljaCBhcmUgcG9y dGFibGUpLCBidXQgb25seSBpZiBvdXIgcGFja2V0cyB3ZXJlIHJhdGhlciBsb25nLgorICBXaGVu IHJlY2VpdmluZywgd2UncmUgb25seSBzZW5kaW5nIEFDS3Mgc28gaXQgZG9lc24ndCBtYXR0ZXIu ICBTbyBjb3VudCB0aGUKKyAgZm9sbG93aW5nIGxvb3AgYXMgYSBzbGVlcGluZyBkb2cuCisqLwor ICAgIGlmIChjb3B5KQkJCQkvKiBEYXRhIGZpZWxkIGJ1aWx0IGluIHBsYWNlPyAqLworICAgICAg Zm9yICggOyBsZW4tLTsgaSsrKSBteWRhdGFbaV0gPSAqZCsrOyAvKiBObywgbXVzdCBjb3B5LiAq LworICAgIGVsc2UJCQkJLyogT3RoZXJ3aXNlLCAqLworICAgICAgaSArPSBsZW47CQkJCS8qIEp1 c3Qgc2tpcCBwYXN0IGRhdGEgZmllbGQuICovCisgICAgbXlkYXRhW2ldID0gJ1wwJzsJCQkvKiBO dWxsLXRlcm1pbmF0ZSBmb3IgY2hlY2tzdW0gY2FsYy4gKi8KKworICAgIHN3aXRjaCAoYmN0dSkg ewkJCS8qIEJsb2NrIGNoZWNrICovCisgICAgICAgIGNhc2UgMToJCQkJLyogMSA9IDYtYml0IGNo a3N1bSAqLworCSAgICBpeCA9IGkgLSBscDsJCS8qIEF2b2lkICJvcmRlciBvZiBvcGVyYXRpb24i IGVycm9yICovCisJICAgIG15ZGF0YVtpKytdID0gdG9jaGFyKGNoazEobXlkYXRhK2xwLGl4KSk7 CisJICAgIGJyZWFrOworCWNhc2UgMjoJCQkJLyogMiA9IDEyLWJpdCBjaGtzdW0gKi8KKwkgICAg aiA9IGNoazIobXlkYXRhK2xwLGktbHApOworCSAgICBteWRhdGFbaSsrXSA9ICh1bnNpZ25lZCl0 b2NoYXIoKGogPj4gNikgJiAwNzcpOworICAgCSAgICBteWRhdGFbaSsrXSA9ICh1bnNpZ25lZCl0 b2NoYXIoaiAmIDA3Nyk7CisJICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CQkJCS8qIDMgPSAx Ni1iaXQgQ1JDICovCisJICAgIGNyYyA9IGNoazMobXlkYXRhK2xwLGktbHApOworCSAgICBteWRh dGFbaSsrXSA9ICh1bnNpZ25lZCl0b2NoYXIoKChjcmMgJiAwMTcwMDAwKSkgPj4gMTIpOworCSAg ICBteWRhdGFbaSsrXSA9ICh1bnNpZ25lZCl0b2NoYXIoKGNyYyA+PiA2KSAmIDA3Nyk7CisJICAg IG15ZGF0YVtpKytdID0gKHVuc2lnbmVkKXRvY2hhcihjcmMgJiAwNzcpOworCSAgICBicmVhazsK KwljYXNlIDQ6CQkJCS8qIDIgPSAxMi1iaXQgY2hrc3VtLCBibGFuay1mcmVlICovCisJICAgIGog PSBjaGsyKG15ZGF0YStscCxpLWxwKTsKKwkgICAgbXlkYXRhW2krK10gPQorCSAgICAgICh1bnNp Z25lZCkodG9jaGFyKCh1bnNpZ25lZCkoKChqID4+IDYpICYgMDc3KSArIDEpKSk7CisgICAJICAg IG15ZGF0YVtpKytdID0gKHVuc2lnbmVkKSh0b2NoYXIoKHVuc2lnbmVkKSgoaiAmIDA3NykgKyAx KSkpOworCSAgICBicmVhazsKKyAgICB9CisgICAgbG9nbGVuID0gaTsKKyAgICBteWRhdGFbaSsr XSA9IHNlb2w7CQkJLyogRW5kIG9mIGxpbmUgKHBhY2tldCB0ZXJtaW5hdG9yKSAqLworI2lmZGVm IFRDUFNPQ0tFVAorLyoKKyAgSWYgVEVMTkVUIGNvbm5lY3Rpb24gYW5kIHBhY2tldCB0ZXJtaW5h dG9yIGlzIGNhcnJpYWdlIHJldHVybiwKKyAgd2UgbXVzdCBzdHVmZiBlaXRoZXIgTEYgb3IgTlVM LCBhY2NvcmRpbmcgdG8gU0VUIFRFTE5FVCBORVdMSU5FLU1PREUKKyAgKHRuX25sbSksIHRvIG1l ZXQgdGhlIFRFTE5FVCBOVlQgc3BlY2lmaWNhdGlvbiwgdW5sZXNzIHVzZXIgc2FpZCBSQVcuCisK KyAgSWYgTkVXTElORS1NT0RFIGlzIHNldCB0byBMRiBpbnN0ZWFkIG9mIENSLCB3ZSBzdGlsbCBz ZW5kIENSLU5VTAorICBvbiBhIE5WVCBjb25uZWN0aW9uIGFuZCBDUiBvbiBhIGJpbmFyeSBjb25u ZWN0aW9uLgorKi8KKyAgICBpZiAoCisjaWZkZWYgU1RSRUFNSU5HCisJIWRvbnRzZW5kICYmCisj ZW5kaWYgLyogU1RSRUFNSU5HICovCisJKChuZXR3b3JrICYmIHR0bnByb3RvID09IE5QX1RFTE5F VCkgfHwgKCFsb2NhbCAmJiBzc3RlbG5ldCkpCisJJiYgc2VvbCA9PSBDUikgeworICAgICAgICBz d2l0Y2ggKFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSA/IHRuX2JfbmxtIDogdG5fbmxtKSB7CisJ ICBjYXNlIFROTF9DUjoJCQkvKiBOVlQgb3IgQklOQVJZICovCisJICAgIGJyZWFrOworCSAgY2Fz ZSBUTkxfQ1JOVUw6CisJICAgIG15ZGF0YVtpKytdID0gTlVMOworCSAgICBicmVhazsKKwkgIGNh c2UgVE5MX0NSTEY6CisJICAgIG15ZGF0YVtpKytdID0gTEY7CisJICAgIGJyZWFrOworCX0KKyAg ICB9CisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgbXlkYXRhW2ldID0gJ1wwJzsJCQkvKiBU ZXJtaW5hdGUgc3RyaW5nICovCisgICAgaWYgKAorI2lmZGVmIFNUUkVBTUlORworCSFkb250c2Vu ZCAmJgorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCXBrdGxvZworCSkJCQkJLyogU2F2ZSBhIGZ1 bmN0aW9uIGNhbGwhICovCisgICAgICBsb2dwa3QoJ3MnLG4sbXlkYXRhLGxvZ2xlbik7CS8qIExv ZyB0aGUgcGFja2V0ICovCisKKyAgICAvKiAoUFdQKSBhZGQgdGhlIHBhcml0eSBxdWlja2x5IGF0 IHRoZSBlbmQgKi8KKyAgICBpZiAocGFyaXR5KSB7CisJc3dpdGNoIChwYXJpdHkpIHsKKwkgIGNh c2UgJ2UnOgkJCS8qIEV2ZW4gKi8KKwkgICAgZm9yIChjcCA9ICZteWRhdGFbaS0xXTsgY3AgPj0g bXlkYXRhOyBjcC0tKQorCSAgICAgICpjcCA9IHBfdGJsWypjcF07CisJICAgIGJyZWFrOworCSAg Y2FzZSAnbSc6CQkJLyogTWFyayAqLworCSAgICBmb3IgKGNwID0gJm15ZGF0YVtpLTFdOyBjcCA+ PSBteWRhdGE7IGNwLS0pCisJICAgICAgKmNwIHw9IDEyODsKKwkgICAgYnJlYWs7CisJICBjYXNl ICdvJzoJCQkvKiBPZGQgKi8KKwkgICAgZm9yIChjcCA9ICZteWRhdGFbaS0xXTsgY3AgPj0gbXlk YXRhOyBjcC0tKQorCSAgICAgICpjcCA9IHBfdGJsWypjcF0gXiAxMjg7CisJICAgIGJyZWFrOwor CSAgY2FzZSAncyc6CQkJLyogU3BhY2UgKi8KKwkgICAgZm9yIChjcCA9ICZteWRhdGFbaS0xXTsg Y3AgPj0gbXlkYXRhOyBjcC0tKQorCSAgICAgICpjcCAmPSAxMjc7CisJICAgIGJyZWFrOworCX0K KyAgICB9CisgICAgaWYgKHBrdHBhdXMpIG1zbGVlcChwa3RwYXVzKTsJLyogUGF1c2UgaWYgcmVx dWVzdGVkICovCisgICAgeCA9IDA7CisKKyAgICBpZiAobnBhZCkgeworI2lmZGVmIFNUUkVBTUlO RworCWlmIChkb250c2VuZCkKKwkgIHggPSAwOworCWVsc2UKKyNlbmRpZiAvKiBTVFJFQU1JTkcg Ki8KKwkgIHggPSB0dG9sKHBhZGJ1ZixucGFkKTsJLyogU2VuZCBhbnkgcGFkZGluZyAqLworICAg IH0KKyAgICBpZiAoeCA+IC0xKSB7CisjaWZkZWYgQ0tfVElNRVJTCisJaWYgKHRpbWludCA+IDAp IHsKKwkgICAgaWYgKHBrdHR5cCA9PSAnTicpCisJICAgICAgc3J0dGJsW24gPiAwID8gbi0xIDog NjNdID0gZ3RpbWVyKCk7CisJICAgIGVsc2UKKwkgICAgICBzcnR0Ymxbbl0gPSBndGltZXIoKTsK Kwl9CisjZW5kaWYgLyogQ0tfVElNRVJTICovCisJc3BrdGwgPSBpOwkJCS8qIFJlbWVtYmVyIHBh Y2tldCBsZW5ndGggKi8KKwlpZiAoayA+IC0xKQorCSAgc19wa3Rba10ucGtfbGVuID0gc3BrdGw7 CS8qIGFsc28gaW4gcGFja2V0IGluZm8gc3RydWN0dXJlICovCisKKyNpZmRlZiBERUJVRworI2lm ZGVmIEdGVElNRVIKKy8qCisgIFRoaXMgY29kZSBzaG93cyAoaW4gdGhlIGRlYnVnIGxvZykgaG93 IGxvbmcgaXQgdGFrZXMgd3JpdGUoKSB0byBleGVjdXRlLgorICBTb21ldGltZXMgb24gYSBjb25n ZXN0ZWQgVENQIGNvbm5lY3Rpb24sIGl0IGNhbiBzdXJwcmlzZSB5b3UgLS0gOTAgc2Vjb25kcwor ICBvciBtb3JlLi4uCisqLworCWlmICgKKyNpZmRlZiBTVFJFQU1JTkcKKwkgICAgIWRvbnRzZW5k ICYmCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJICAgIGRlYmxvZworCSAgICApCisJICB0MSA9 IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisjZW5kaWYgLyogREVCVUcgKi8KKwor I2lmZGVmIFNUUkVBTUlORworCWlmIChkb250c2VuZCkgeworCSAgICBkZWJ1ZyhGMDAwLCJTVFJF QU1JTkcgc3BhY2sgc2tpcHBpbmciLCIiLHBrdHR5cCk7CisJICAgIHggPSAwOworCX0gZWxzZQor I2VuZGlmIC8qIFNUUkVBTUlORyAqLworCXggPSB0dG9sKG15ZGF0YSxzcGt0bCk7CQkvKiBTZW5k IHRoZSBwYWNrZXQgKi8KKyAgICB9CisjaWZkZWYgU1RSRUFNSU5HCisgICAgaWYgKCFkb250c2Vu ZCkgeworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCWRlYnVnKEYxMDEsInNwYWNrIHNwa3RsIiwi IixzcGt0bCk7CisJZGVidWcoRjEwMSwic3BhY2sgdHRvbCByZXR1cm5zIiwiIix4KTsKKwlpZiAo eCA8IDApIHsJCQkvKiBGYWlsZWQuICovCisJICAgIGlmIChsb2NhbCAmJiB4IDwgLTEpIHsKKwkJ eHhzY3JlZW4oU0NSX1NULFNUX0VSUiwwTCwiRkFJTEVEOiBDb25uZWN0aW9uIGxvc3QiKTsKKwkJ LyogV2UgY2FuJ3Qgc2VuZCBhbiBFIHBhY2tldCBiZWNhdXNlIHRoZSBjb25uZWN0aW9uIGlzIGxv c3QuICovCisJCWVwa3RzZW50ID0gMTsJCS8qIFNvIHByZXRlbmQgd2Ugc2VudCBvbmUuICovCisJ CWZhdGFsaW8gPSAxOwkJLyogUmVtZW1iZXIgd2UgZ290IGEgZmF0YWwgaS9vIGVycm9yICovCisJ CWRvbG9nZW5kKCk7CisJCWNrc3RybmNweSgoY2hhciAqKWVwa3Rtc2csIkNvbm5lY3Rpb24gbG9z dCIsUEtUTVNHTEVOKTsKKwkgICAgfQorCSAgICByZXR1cm4oeCk7CisJfQorCWlmIChzcGt0bCA+ IG1heHNlbmQpCQkvKiBLZWVwIHRyYWNrIG9mIGxvbmdlc3QgcGFja2V0IHNlbnQgKi8KKwkgIG1h eHNlbmQgPSBzcGt0bDsKKyNpZmRlZiBERUJVRworI2lmZGVmIEdGVElNRVIKKwlpZiAoZGVibG9n KSAgewkJCS8qIExvZyBlbGFwc2VkIHRpbWUgZm9yIHdyaXRlKCkgKi8KKwkgICAgdDIgPSBnZnRp bWVyKCk7CisJICAgIGRlYnVnKEYxMDEsInNwYWNrIHR0b2wgbXNlYyIsIiIsKGxvbmcpKCh0Mi10 MSkqMTAwMC4wKSk7CisJfQorI2VuZGlmIC8qIEdGVElNRVIgKi8KKyNlbmRpZiAvKiBERUJVRyAq LworI2lmZGVmIFNUUkVBTUlORworICAgIH0KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKworICAg IHNuZHR5cCA9IHBrdHR5cDsJCQkvKiBSZW1lbWJlciBwYWNrZXQgdHlwZSBmb3IgZWNob3MgKi8K KyNpZmRlZiBTVFJFQU1JTkcKKyAgICBpZiAoIWRvbnRzZW5kKSB7CQkJLyogSWYgcmVhbGx5IHNl bnQsICovCisJc3BhY2tldHMrKzsJCQkvKiBjb3VudCBpdC4gKi8KKwlmbGNvICs9IHNwa3RsOwkJ CS8qIENvdW50IHRoZSBjaGFyYWN0ZXJzICovCisJdGxjbyArPSBzcGt0bDsJCQkvKiBmb3Igc3Rh dGlzdGljcy4uLiAqLworI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZykgewkJCS8qIFNhdmUgdHdv IGZ1bmN0aW9uIGNhbGxzISAqLworCSAgICBkdW1wc2J1ZigpOwkJCS8qIER1bXAgc2VuZCBidWZm ZXJzIHRvIGRlYnVnIGxvZyAqLworCSAgICBkZWJ1ZyhGMTExLCJzcGFjayBjYWxsaW5nIHNjcmVl biwgbXlkYXRhPSIsbXlkYXRhLG4pOworCX0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIH0KKyNl bmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICBpZiAobG9jYWwpIHsKKwlpbnQgeCA9IDA7CisJaWYg KGZkaXNwbGEgIT0gWFlGRF9OKSB4ID0gMTsKKwlpZiAoKGZkaXNwbGEgPT0gWFlGRF9CKSAmJiAo cGt0dHlwID09ICdEJyB8fCBwa3R0eXAgPT0gJ1knKSkgeCA9IDA7CisJaWYgKHgpCisJICB4eHNj cmVlbihTQ1JfUFQscGt0dHlwLChsb25nKW4sKGNoYXIgKilteWRhdGEpOyAvKiBVcGRhdGUgc2Ny ZWVuICovCisgICAgfQorICAgIHJldHVybihzcGt0bCk7CQkJLyogUmV0dXJuIGxlbmd0aCAqLwor fQorCisvKiAgQyBIIEsgMSAgLS0gIENvbXB1dGUgYSB0eXBlLTEgS2VybWl0IDYtYml0IGNoZWNr c3VtLiAgKi8KKworaW50CitjaGsxKHBrdCxsZW4pIHJlZ2lzdGVyIENIQVIgKnBrdDsgcmVnaXN0 ZXIgaW50IGxlbjsgeworICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBjaGs7CisjaWZkZWYgQ0tU VU5JTkcKKyNpZmRlZiBDT01NRU5UCisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IG07CQkvKiBB dm9pZCBmdW5jdGlvbiBjYWxsICovCisgICAgbSA9IChwYXJpdHkpID8gMDE3NyA6IDAzNzc7Cisg ICAgZm9yIChjaGsgPSAwOyBsZW4tLSA+IDA7IHBrdCsrKQorICAgICAgY2hrICs9ICpwa3QgJiBt OworI2Vsc2UKKyAgICBjaGsgPSAwOworICAgIHdoaWxlIChsZW4tLSA+IDApIGNoayArPSAodW5z aWduZWQpICpwa3QrKzsKKyNlbmRpZiAvKiBDT01NRU5UICovCisjZWxzZQorICAgIGNoayA9IGNo azIocGt0LGxlbik7CisjZW5kaWYgLyogQ0tUVU5JTkcgKi8KKyAgICBjaGsgPSAoKChjaGsgJiAw MzAwKSA+PiA2KSArIGNoaykgJiAwNzc7CisgICAgZGVidWcoRjEwMSwiY2hrMSIsIiIsY2hrKTsK KyAgICByZXR1cm4oKGludCkgY2hrKTsKK30KKworLyogIEMgSCBLIDIgIC0tICBDb21wdXRlIHRo ZSBudW1lcmljIHN1bSBvZiBhbGwgdGhlIGJ5dGVzIGluIHRoZSBwYWNrZXQuICAqLworCit1bnNp Z25lZCBpbnQKK2NoazIocGt0LGxlbikgcmVnaXN0ZXIgQ0hBUiAqcGt0OyByZWdpc3RlciBpbnQg bGVuOyB7CisgICAgcmVnaXN0ZXIgbG9uZyBjaGs7CisjaWZkZWYgQ09NTUVOVAorICAgIHJlZ2lz dGVyIHVuc2lnbmVkIGludCBtOworICAgIG0gPSAocGFyaXR5KSA/IDAxNzcgOiAwMzc3OworICAg IGZvciAoY2hrID0gMDsgbGVuLS0gPiAwOyBwa3QrKykKKyAgICAgIGNoayArPSAqcGt0ICYgbTsK KyNlbHNlCisgICAgLyogUGFyaXR5IGhhcyBhbHJlYWR5IGJlZW4gc3RyaXBwZWQgKi8KKyAgICBj aGsgPSAwTDsKKyAgICB3aGlsZSAobGVuLS0gPiAwKSBjaGsgKz0gKHVuc2lnbmVkKSAqcGt0Kys7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGRlYnVnKEYxMDEsImNoazIiLCIiLCh1bnNpZ25l ZCBpbnQpIChjaGsgJiAwNzc3NykpOworICAgIHJldHVybigodW5zaWduZWQgaW50KSAoY2hrICYg MDc3NzcpKTsKK30KKworLyogIEMgSCBLIDMgIC0tICBDb21wdXRlIGEgdHlwZS0zIEtlcm1pdCBi bG9jayBjaGVjay4gICovCisvKgorIENhbGN1bGF0ZSB0aGUgMTYtYml0IENSQy1DQ0lUVCBvZiBh IG51bGwtdGVybWluYXRlZCBzdHJpbmcgdXNpbmcgYSBsb29rdXAKKyB0YWJsZS4gIEFzc3VtZXMg dGhlIGFyZ3VtZW50IHN0cmluZyBjb250YWlucyBubyBlbWJlZGRlZCBudWxscy4KKyovCisjaWZk ZWYgQ09NTUVOVAordW5zaWduZWQgaW50CitjaGszKHBrdCxwYXJpdHksbGVuKSByZWdpc3RlciBD SEFSICpwa3Q7IGludCBwYXJpdHk7IHJlZ2lzdGVyIGludCBsZW47IHsKKyAgICByZWdpc3RlciBs b25nIGMsIGNyYzsKKyAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgbTsKKyAgICBtID0gKHBhcml0 eSkgPyAwMTc3IDogMDM3NzsKKyAgICBmb3IgKGNyYyA9IDA7IGxlbi0tID4gMDsgcGt0KyspIHsK KwljID0gY3JjIF4gKGxvbmcpKCpwa3QgJiBtKTsKKwljcmMgPSAoY3JjID4+IDgpIF4gKGNyY3Rh WyhjICYgMHhGMCkgPj4gNF0gXiBjcmN0YltjICYgMHgwRl0pOworICAgIH0KKyAgICByZXR1cm4o KHVuc2lnbmVkIGludCkgKGNyYyAmIDB4RkZGRikpOworfQorI2Vsc2UKK3Vuc2lnbmVkIGludAor Y2hrMyhwa3QsbGVuKSByZWdpc3RlciBDSEFSICpwa3Q7IHJlZ2lzdGVyIGludCBsZW47IHsKKyAg ICByZWdpc3RlciBsb25nIGMsIGNyYzsKKyAgICBmb3IgKGNyYyA9IDA7IGxlbi0tID4gMDsgcGt0 KyspIHsKKwljID0gY3JjIF4gKGxvbmcpKCpwa3QpOworCWNyYyA9IChjcmMgPj4gOCkgXiAoY3Jj dGFbKGMgJiAweEYwKSA+PiA0XSBeIGNyY3RiW2MgJiAweDBGXSk7CisgICAgfQorICAgIGRlYnVn KEYxMDEsImNoazMiLCIiLCh1bnNpZ25lZCBpbnQpIChjcmMgJiAweEZGRkYpKTsKKyAgICByZXR1 cm4oKHVuc2lnbmVkIGludCkgKGNyYyAmIDB4RkZGRikpOworfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworLyogIE4gWCBUIFAgSyBUICAtLSAgTmV4dCBQYWNrZXQgICovCisvKgorICBHZXQgcGFj a2V0IG51bWJlciBvZiBuZXh0IHBhY2tldCB0byBzZW5kIGFuZCBhbGxvY2F0ZSBhIGJ1ZmZlciBm b3IgaXQuCisgIFJldHVybnM6CisgICAgMCBvbiBzdWNjZXNzLCB3aXRoIGdsb2JhbCBwa3RudW0g c2V0IHRvIHRoZSBwYWNrZXQgbnVtYmVyOworICAgLTEgb24gZmFpbHVyZSB0byBhbGxvY2F0ZSBi dWZmZXIgKGZhdGFsKTsKKyAgIC0yIGlmIHJlc3VsdGluZyBwYWNrZXQgbnVtYmVyIGlzIG91dHNp ZGUgdGhlIGN1cnJlbnQgd2luZG93LgorKi8KK2ludAorbnh0cGt0KCkgewkJCQkvKiBDYWxsZWQg YnkgZmlsZSBzZW5kZXIgKi8KKyAgICBpbnQgaiwgbiwgeDsKKworICAgIGRlYnVnKEYxMDEsIm54 dHBrdCBwa3RudW0iLCIiLHBrdG51bSk7CisgICAgZGVidWcoRjEwMSwibnh0cGt0IHdpbmxvICIs IiIsd2lubG8pOworICAgIG4gPSAocGt0bnVtICsgMSkgJSA2NDsJCS8qIEluY3JlbWVudCBwYWNr ZXQgbnVtYmVyIG1vZCA2NCAqLworICAgIGRlYnVnKEYxMDEsIm54dHBrdCBuIiwiIixuKTsKKyNp ZmRlZiBTVFJFQU1JTkcKKyAgICBpZiAoIXN0cmVhbWluZykgeworCXggPSBjaGt3aW4obix3aW5s byx3c2xvdHMpOwkvKiBEb24ndCBleGNlZWQgd2luZG93IGJvdW5kYXJ5ICovCisJZGVidWcoRjEw MSwibnh0cGt0IGNoa3dpbiIsIiIseCk7CisJaWYgKHgpCisJICByZXR1cm4oLTIpOworCWogPSBn ZXRzYnVmKG4pOwkJCS8qIEdldCBhIGJ1ZmZlciBmb3IgcGFja2V0IG4gKi8KKwlpZiAoaiA8IDAp IHsKKwkgICAgZGVidWcoRjEwMSwibnh0cGt0IGdldHNidWYgZmFpbHVyZSIsIiIsaik7CisJICAg IHJldHVybigtMSk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICBwa3Ru dW0gPSBuOworICAgIHJldHVybigwKTsKK30KKworLyogRnVuY3Rpb25zIGZvciBzZW5kaW5nIEFD S3MgYW5kIE5BS3MgKi8KKworLyogTm90ZSwgd2Ugc2hvdWxkIG9ubHkgQUNLIHRoZSBwYWNrZXQg YXQgd2luZG93LWxvdyAod2lubG8pICovCisvKiBIb3dldmVyLCBpZiBhbiBvbGQgcGFja2V0IGFy cml2ZXMgYWdhaW4gKGUuZy4gYmVjYXVzZSB0aGUgQUNLIHdlIHNlbnQgKi8KKy8qIGVhcmxpZXIg d2FzIGxvc3QpLCB3ZSBBQ0sgaXQgYWdhaW4uICovCisKK2ludAorYWNrKCkgewkJCQkJLyogQWNr bm93bGVkZ2UgdGhlIGN1cnJlbnQgcGFja2V0LiAqLworICAgIHJldHVybihhY2tucyh3aW5sbywo Q0hBUiAqKSIiKSk7Cit9CisKKyNpZmRlZiBTVFJFQU1JTkcKK2ludAorZmFzdGFjaygpIHsJCQkJ LyogQWNrbm93bGVkZ2UgcGFja2V0IG4gKi8KKyAgICBpbnQgaiwgaywgbiwgeDsKKyAgICBuID0g d2lubG87CisKKyAgICBrID0gcnNlcXRibFtuXTsJCQkvKiBGaXJzdCBmaW5kIHJlY2VpdmVkIHBh Y2tldCBuLiAqLworICAgIGRlYnVnKEYxMDEsIlNUUkVBTUlORyBmYXN0YWNrIGsiLCIiLGspOwor ICAgIGZyZWVzYnVmKG4pOwkJCS8qIEZyZWUgY3VycmVudCBzZW5kLWJ1ZmZlciwgaWYgYW55ICov CisgICAgaWYgKChqID0gZ2V0c2J1ZihuKSkgPCAwKSB7CisJLyogVGhpcyBjYW4gaGFwcGVuIGlm IHdlIGhhdmUgdG8gcmUtQUNLIGFuIG9sZCBwYWNrZXQgdGhhdCBoYXMgKi8KKyAgICAgICAgLyog YWxyZWFkeSBsZWZ0IHRoZSB3aW5kb3cuICBJdCBkb2VzIG5vIGhhcm0uICovCisJZGVidWcoRjEw MSwiU1RSRUFNSU5HIGZhc3RhY2sgY2FuJ3QgZ2V0c2J1ZiIsIiIsbik7CisgICAgfQorICAgIGRv bnRzZW5kID0gMTsKKyAgICB4ID0gc3BhY2soJ1knLG4sMCwoQ0hBUiAqKSIiKTsJLyogTm93IHNl bmQgaXQgKGJ1dCBub3QgcmVhbGx5KSAqLworICAgIGRvbnRzZW5kID0gMDsKKyAgICBpZiAoeCA8 IDApIHJldHVybih4KTsKKyAgICBkZWJ1ZyhGMTAxLCJTVFJFQU1JTkcgZmFzdGFjayB4IiwiIix4 KTsKKyAgICBpZiAoayA+IC0xKQorICAgICAgZnJlZXJidWYoayk7CQkJLyogZG9uJ3QgbmVlZCBp dCBhbnkgbW9yZSAqLworICAgIGlmIChqID4gLTEpCisgICAgICBmcmVlc2J1ZihqKTsJCQkvKiBh bmQgZG9uJ3QgbmVlZCB0byBrZWVwIEFDSyBlaXRoZXIgKi8KKyAgICB3aW5sbyA9ICh3aW5sbyAr IDEpICUgNjQ7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCitp bnQKK2Fja25zKG4scykgaW50IG47IENIQVIgKnM7IHsJCS8qIEFja25vd2xlZGdlIHBhY2tldCBu ICovCisgICAgaW50IGosIGssIHg7CisgICAgZGVidWcoRjExMSwiYWNrbnMiLHMsbik7CisKKyAg ICBrID0gcnNlcXRibFtuXTsJCQkvKiBGaXJzdCBmaW5kIHJlY2VpdmVkIHBhY2tldCBuLiAqLwor ICAgIGRlYnVnKEYxMDEsImFja25zIGsiLCIiLGspOworICAgIGZyZWVzYnVmKG4pOwkJCS8qIEZy ZWUgY3VycmVudCBzZW5kLWJ1ZmZlciwgaWYgYW55ICovCisgICAgaWYgKChqID0gZ2V0c2J1Zihu KSkgPCAwKSB7CisJLyogVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGhhdmUgdG8gcmUtQUNLIGFuIG9s ZCBwYWNrZXQgdGhhdCBoYXMgKi8KKyAgICAgICAgLyogYWxyZWFkeSBsZWZ0IHRoZSB3aW5kb3cu ICBJdCBkb2VzIG5vIGhhcm0uICovCisJZGVidWcoRjEwMSwiYWNrbnMgY2FuJ3QgZ2V0c2J1ZiIs IiIsbik7CisgICAgfQorICAgIHggPSBzcGFjaygnWScsbiwoaW50KXN0cmxlbigoY2hhciAqKXMp LHMpOyAvKiBOb3cgc2VuZCBpdC4gKi8KKyAgICBpZiAoeCA8IDApIHJldHVybih4KTsKKyAgICBk ZWJ1ZyhGMTAxLCJhY2tucyB3aW5sbyIsIiIsd2lubG8pOworICAgIGRlYnVnKEYxMDEsImFja25z IG4iLCIiLG4pOworICAgIGlmIChuID09IHdpbmxvKSB7CQkJLyogSWYgd2UncmUgYWNraW5nIHdp bmxvICovCisJaWYgKGsgPiAtMSkKKwkgIGZyZWVyYnVmKGspOwkJCS8qIGRvbid0IG5lZWQgaXQg YW55IG1vcmUgKi8KKwlpZiAoaiA+IC0xKQorCSAgZnJlZXNidWYoaik7CQkJLyogYW5kIGRvbid0 IG5lZWQgdG8ga2VlcCBBQ0sgZWl0aGVyICovCisJd2lubG8gPSAod2lubG8gKyAxKSAlIDY0Owor ICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorYWNrbihuKSBpbnQgbjsgewkJCS8qIFNl bmQgQUNLIGZvciBwYWNrZXQgbnVtYmVyIG4gKi8KKyAgICByZXR1cm4oYWNrbnMobiwoQ0hBUiAq KSIiKSk7Cit9CisKK2ludAorYWNrMShzKSBDSEFSICpzOyB7CQkJLyogU2VuZCBhbiBBQ0sgd2l0 aCBkYXRhLiAqLworICAgIGlmICghcykgcyA9IChDSEFSICopIiI7CisgICAgZGVidWcoRjExMCwi YWNrMSIsKGNoYXIgKilzLDApOworICAgIHJldHVybihhY2tucyh3aW5sbyxzKSk7Cit9CisKKy8q IE4gQSBDIEsgIC0tICAgU2VuZCBhIE5lZ2F0aXZlIEFDS25vd2xlZGdtZW50LiAqLworLyoKKyBD YWxsIHdpdGggdGhlIHBhY2tldCBudW1iZXIsIG4sIHRvIGJlIE5BSydkLgorIFJldHVybnMgLTEg aWYgdGhhdCBwYWNrZXQgaGFzIGJlZW4gTkFLJ2QgdG9vIG1hbnkgdGltZXMsIG90aGVyd2lzZSAw LgorIEJ0dywgaXQgaXMgbm90IHJpZ2h0IHRvIHJldHVybiAwIHVuZGVyIGVycm9yIGNvbmRpdGlv bnMuICBUaGlzIGlzCisgZG9uZSBiZWNhdXNlIHRoZSAtMSBjb2RlIGlzIHVzZWQgZm9yIGNhbmNl bGxpbmcgdGhlIGZpbGUgdHJhbnNmZXIuCisgTW9yZSB3b3JrIGlzIG5lZWRlZCBoZXJlLgorKi8K K2ludAorbmFjayhuKSBpbnQgbjsgeworICAgIGludCBpLCB4OworCisgICAgaWYgKG4gPCAwIHx8 IG4gPiA2MykgeworCWRlYnVnKEYxMDEsIm5hY2sgYmFkIHBrdCBudW0iLCIiLG4pOworCXJldHVy bigwKTsKKyAgICB9IGVsc2UgZGVidWcoRjEwMSwibmFjayIsIiIsbik7CisgICAgaWYgKChpID0g c3NlcXRibFtuXSkgPCAwKSB7CQkvKiBJZiBuZWNlc3NhcnkgKi8KKwlpZiAoZ2V0c2J1ZihuKSA8 IDApIHsJCS8qIGdldCBhIGJ1ZmZlciBmb3IgdGhpcyBOQUsgKi8KKwkgICAgZGVidWcoRjEwMSwi bmFjayBjYW4ndCBnZXRzYnVmIiwiIixuKTsKKwkgICAgcmV0dXJuKDApOworCX0gZWxzZSBpID0g c3NlcXRibFtuXTsJCS8qIE5ldyBzbG90IG51bWJlciAqLworICAgIH0KKyAgICBpZiAobWF4dHJ5 ID4gMCAmJiBzX3BrdFtpXS5wa19ydHIrKyA+IG1heHRyeSkgLyogSG93IG1hbnk/ICovCisgICAg ICByZXR1cm4oLTEpOwkJCS8qIFRvbyBtYW55Li4uICovCisKKy8qIE5vdGUsIGRvbid0IGZyZWUg dGhpcyBidWZmZXIuICBFdmVudHVhbGx5IGFuIEFDSyB3aWxsIGNvbWUsIGFuZCB0aGF0ICovCisv KiB3aWxsIHNldCBpdCBmcmVlLiAgSWYgbm90LCB3ZWxsLCBpdCdzIGJhY2sgdG8gZ3JvdW5kIHpl cm8gYW55d2F5Li4uICAqLworCisgICAgeCA9IHNwYWNrKCdOJyxuLDAsKENIQVIgKikgIiIpOwkv KiBOQUtzIG5ldmVyIGhhdmUgZGF0YS4gKi8KKyAgICByZXR1cm4oeCk7Cit9CisKKyNpZm5kZWYg TkVXRFBMCQkJCS8qIFRoaXMgcm91dGluZSBubyBsb25nZXIgdXNlZCAqLworLyoKKyAqIChQV1Ap IHJlY2FsY3VsYXRlIHRoZSBvcHRpbWFsIHBhY2tldCBsZW5ndGggaW4gdGhlIGZhY2Ugb2YgZXJy b3JzLgorICogVGhpcyBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGFsZ29yaXRobSBieSBK b2huIENoYW5kbGVyIGluIEtlcm1pdC8zNzAsCisgKiBzZWUgIkR5bmFtaWMgUGFja2V0IFNpemUg Q29udHJvbCIsIEtlcm1pdCBOZXdzLCBWMiAjMSwgSnVuZSAxOTg4LgorICoKKyAqIFRoaXMgaW1w bGVtZW50YXRpb24gbWluaW1pemVzIHRoZSB0b3RhbCBvdmVyaGVhZCBlcXVhdGlvbiwgd2hpY2gg aXMKKyAqCisgKiAgIFRvdGFsIGNoYXJzID0gZmlsZV9jaGFycyArIChoZWFkZXJfbGVuICogbnVt X3BhY2tzKQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZXJyb3JzICogKGhlYWRl cl9sZW4gKyBwYWNrZXRfbGVuKSkKKyAqCisgKiBEaWZmZXJlbnRpYXRlIHdpdGggcmVzcGVjdCB0 byBudW1iZXIgb2YgY2hhcnMsIHNvbHZlIGZvciBwYWNrZXRfbGVuLCBnZXQ6CisgKgorICogICBw YWNrZXRfbGVuID0gc3FydCAoZmlsZV9jaGFycyAqIGhlYWRlcl9sZW4gLyBlcnJvcnMpCisgKi8K KworLyoKKyAoRkRDKSBOZXcgc3VwZXItc2ltcGxlIGFsZ29yaXRobS4gIElmIHRoZXJlIHdhcyBh biBlcnJvciBpbiB0aGUgbW9zdCByZWNlbnQKKyBwYWNrZXQgZXhjaGFuZ2UsIGN1dCB0aGUgc2Vu ZC1wYWNrZXQgc2l6ZSBpbiBoYWxmLCBkb3duIHRvIGEgbWluaW11bSBvZiAyMC4KKyBJZiB0aGVy ZSB3YXMgbm8gZXJyb3IsIGluY3JlYXNlIHRoZSBzaXplIGJ5IDUvNCwgdXAgdG8gdGhlIG1heGlt dW0gbmVnb3RpYXRlZAorIGxlbmd0aC4gIFNlZW1zIHRvIGJlIG11Y2ggbW9yZSByZXNwb25zaXZl IHRoYW4gcHJldmlvdXMgYWxnb3JpdGhtLCB3aGljaCB0b29rCisgZm9yZXZlciB0byByZWNvdmVy IHRoZSBvcmlnaW5hbCBwYWNrZXQgbGVuZ3RoLCBhbmQgaXQgYWxzbyB3ZW50IGNyYXp5IHVuZGVy CisgY2VydGFpbiBjb25kaXRpb25zLgorCisgSGVyZSdzIGFub3RoZXIgaWRlYSBmb3IgcGFja2V0 IGxlbmd0aCByZXNpemluZyB0aGF0IGtlZXBzIGEgaGlzdG9yeSBvZiB0aGUKKyBsYXN0IG4gcGFj a2V0cy4gIFB1c2ggYSAxIGludG8gdGhlIGxlZnQgZW5kIG9mIGFuIG4tYml0IHNoaWZ0IHJlZ2lz dGVyIGlmIHRoZQorIGN1cnJlbnQgcGFja2V0IGlzIGdvb2QsIG90aGVyd2lzZSBwdXNoIGEgemVy by4gIFRoZSBjdXJyZW50IG4tYml0IHZhbHVlLCB3LCBvZgorIHRoaXMgcmVnaXN0ZXIgaXMgYSB3 ZWlnaHRlZCBzdW0gb2YgdGhlIG5vaXNlIGhpdHMgZm9yIHRoZSBsYXN0IG4gcGFja2V0cywgd2l0 aAorIHRoZSBtb3N0IHJlY2VudCB3ZWlnaGluZyB0aGUgbW9zdC4gIFRoZSBjdXJyZW50IHBhY2tl dCBsZW5ndGggaXMgc29tZSBmdW5jdGlvbgorIG9mIHcgYW5kIHRoZSBuZWdvdGlhdGVkIHBhY2tl dCBsZW5ndGgsIGxpa2U6CisKKyAgICgyXm4gLSB3KSAvICgyXm4pICogKG5lZ290aWF0ZWQgbGVu Z3RoKQorCisgSWYgdGhlIHByZXNlbnQgcmVzaXppbmcgbWV0aG9kIGNhdXNlcyBwcm9ibGVtcywg dGhpbmsgYWJvdXQgdGhpcyBvbmUgYSBsaXR0bGUKKyBtb3JlLgorKi8KK1ZPSUQKK3JjYWxjcHN6 KCkgeworCisjaWZkZWYgQ09NTUVOVAorLyogT2xkIHdheSAqLworICAgIHJlZ2lzdGVyIGxvbmcg eCwgcTsKKyAgICBpZiAobnVtZXJycyA9PSAwKSByZXR1cm47CQkvKiBib3VuZHMgY2hlY2sganVz dCBpbiBjYXNlICovCisKKyAgICAvKiBvdmVyaGVhZCBvbiBhIGRhdGEgcGFja2V0IGlzIG5wYWQr NStiY3RyLCBwbHVzIDMgaWYgZXh0ZW5kZWQgcGFja2V0ICovCisgICAgLyogYW4gQUNLIGlzIDUr YmN0ciAqLworCisgICAgLyogZmlyc3Qgc2V0IHggPSBwZXIgcGFja2V0IG92ZXJoZWFkICovCisg ICAgaWYgKHdzbG90cyA+IDEpCQkJLyogU2xpZGluZyB3aW5kb3dzICovCisgICAgICB4ID0gKGxv bmcpIChucGFkKzUrYmN0cik7CQkvKiBwYWNrZXQgb25seSwgZG9uJ3QgY291bnQgYWNrICovCisg ICAgZWxzZQkJCQkvKiBTdG9wLW4td2FpdCAqLworICAgICAgeCA9IChsb25nKSAobnBhZCs1KzMr YmN0cis1K2JjdHIpOyAvKiBjb3VudCBwYWNrZXQgYW5kIGFjay4gKi8KKworICAgIC8qIHRoZW4g c2V0IHggPSBwYWNrZXQgbGVuZ3RoICoqIDIgKi8KKyAgICB4ID0geCAqICggZmZjIC8gKENLX09G Rl9UKSBudW1lcnJzKTsgLyogY2FyZWZ1bCBvZiBvdmVyZmxvdyAqLworCisgICAgLyogY2FsY3Vs YXRlIHRoZSBsb25nIGludGVnZXIgc3FydCh4KSBxdWlja2x5ICovCisgICAgcSA9IDUwMDsKKyAg ICBxID0gKHEgKyB4L3EpID4+IDE7CisgICAgcSA9IChxICsgeC9xKSA+PiAxOworICAgIHEgPSAo cSArIHgvcSkgPj4gMTsKKyAgICBxID0gKHEgKyB4L3EpID4+IDE7CQkvKiBzaG91bGQgY29udmVy Z2UgaW4gYWJvdXQgNCBzdGVwcyAqLworICAgIGlmICgocSA+IDk0KSAmJiAocSA8IDEzMCkpCS8q IGJyZWFrLWV2ZW4gcG9pbnQgZm9yIGxvbmcgcGFja2V0cyAqLworICAgICAgcSA9IDk0OworICAg IGlmIChxID4gc3BtYXgpIHEgPSBzcG1heDsJLyogbWF4aW11bSBib3VuZHMgKi8KKyAgICBpZiAo cSA8IDEwKSBxID0gMTA7CQkvKiBtaW5pbXVtIGJvdW5kcyAqLworICAgIHNwc2l6ID0gcTsJCQkv KiBzZXQgbmV3IHNlbmQgcGFja2V0IHNpemUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJyY2FsY3BzaXoi LCIiLHEpOworI2Vsc2UKKy8qIE5ldyB3YXkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJyY2FsY3BzaXog bnVtZXJycyIsIiIsbnVtZXJycyk7CisgICAgZGVidWcoRjEwMSwicmNhbGNwc2l6IHNwc2l6Iiwi IixzcHNpeik7CisgICAgaWYgKHNwYWNrZXRzIDwgMykgeworCW51bWVycnMgPSAwOworCXJldHVy bjsKKyAgICB9CisgICAgaWYgKG51bWVycnMpCisgICAgICBzcHNpeiA9IHNwc2l6IC8gMjsKKyAg ICBlbHNlCisgICAgICBzcHNpeiA9IChzcHNpeiAvIDQpICogNTsKKyAgICBpZiAoc3BzaXogPCAy MCkgc3BzaXogPSAyMDsKKyAgICBpZiAoc3BzaXogPiBzcG1heCkgc3BzaXogPSBzcG1heDsKKyAg ICBkZWJ1ZyhGMTAxLCJyY2FsY3BzaXogbmV3IHNwc2l6IiwiIixzcHNpeik7CisgICAgbnVtZXJy cyA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorI2VuZGlmIC8qIE5FV0RQTCAqLworCisv KiAgUiBFIFMgRSBOIEQgIC0tICBSZXRyYW5zbWl0IHBhY2tldCBuLiAgKi8KKworLyoKKyAgUmV0 dXJucyAwIG9yIHBvc2l0aXZlIG9uIHN1Y2Nlc3MgKHRoZSBudW1iZXIgb2YgcmV0cmllcyBmb3Ig cGFja2V0IG4pLgorICBPbiBmYWlsdXJlLCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCBhbmQg YW4gZXJyb3IgbWVzc2FnZSBpcyBwbGFjZWQKKyAgaW4gcmVjcGt0LgorKi8KK2ludAorcmVzZW5k KG4pIGludCBuOyB7CQkJLyogU2VuZCBwYWNrZXQgbiBhZ2Fpbi4gKi8KKyAgICBpbnQgaiwgaywg eDsKKyNpZmRlZiBHRlRJTUVSCisgICAgQ0tGTE9BVCB0MSA9IDAuMCwgdDIgPSAwLjA7CisjZW5k aWYgLyogR0ZUSU1FUiAqLworCisgICAgZGVidWcoRjEwMSwicmVzZW5kIHNlcSIsIiIsbik7CisK KyAgICBrID0gY2hrd2luKG4sd2lubG8sd3Nsb3RzKTsJCS8qIFNlZSBpZiBwYWNrZXQgaW4gY3Vy cmVudCB3aW5kb3cgKi8KKyAgICBqID0gLTE7CQkJCS8qIEFzc3VtZSBpdCdzIGxvc3QgKi8KKyAg ICBpZiAoayA9PSAwKSBqID0gc3NlcXRibFtuXTsJCS8qIFNlZSBpZiB3ZSBzdGlsbCBoYXZlIGEg Y29weSBvZiBpdCAqLworICAgIGlmIChrICE9IDAgfHwgaiA8IDApIHsJCS8qIElmIG5vdC4uLi4g Ki8KKwlpZiAobmFrc3RhdGUgJiYgayA9PSAxKSB7CisvKgorICBQYWNrZXQgbiBpcyBpbiB0aGUg cHJldmlvdXMgd2luZG93IGFuZCB3ZSBhcmUgdGhlIGZpbGUgcmVjZWl2ZXIuCisgIFdlIGFscmVh ZHkgc2VudCB0aGUgQUNLIGFuZCBkZWFsbG9jYXRlZCBpdHMgYnVmZmVyIHNvIHdlIGNhbid0IGp1 c3QKKyAgcmV0cmFuc21pdCB0aGUgQUNLLiAgUmF0aGVyIHRoYW4gZ2l2ZSB1cCwgd2UgdHJ5IHNv bWUgdHJpY2tzLi4uCisqLworCSAgICBpZiAobiA9PSAwICYmIHNwYWNrZXRzIDwgNjMgJiYgbXlp bml0WzBdKSB7IC8qIEFDSyB0byBTZW5kLUluaXQgKi8KKy8qCisgIElmIHRoZSBwYWNrZXQgbnVt YmVyIGlzIDAsIGFuZCB3ZSdyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcHJvdG9jb2wKKyAgb3Bl cmF0aW9uIChzcGFja2V0cyA8IDYzKSwgdGhlbiB3ZSBoYXZlIHRvIHJlc2VuZCB0aGUgQUNLIHRv IGFuIEkgb3IgUworICBwYWNrZXQsIGNvbXBsZXRlIHdpdGggcGFyYW1ldGVycyBpbiB0aGUgZGF0 YSBmaWVsZC4gIFNvIHdlIHRha2UgYSBjaGFuY2UgYW5kCisgIHNlbmQgYSBjb3B5IG9mIHRoZSBw YXJhbWV0ZXJzIGluIGFuIEFDSyBwYWNrZXQgd2l0aCBibG9jayBjaGVjayB0eXBlIDEuCisgIChP ciAzIGlmIFNFVCBCTE9DSyA1LikKKyovCisJCWlmIChiY3RmKSB7CQkvKiBGb3JjZSBUeXBlIDMg b24gYWxsIHBhY2tldHM/ICovCisJCSAgIHggPSBzcGFjaygnWScsMCwoaW50KXN0cmxlbigoY2hh ciAqKW15aW5pdCksKENIQVIgKilteWluaXQpOworCQkgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7 CisJCSAgICBsb2dwa3QoJyMnLG4sKENIQVIgKikiPHJlY29uc3RydWN0ZWQ+IiwwKTsgLyogTG9n IGl0ICovCisJCX0gZWxzZSB7CQkvKiBSZWd1bGFyIEtlcm1pdCBwcm90b2NvbCAqLworCQkgICAg aW50IGJjdGxzYXY7CS8qIFRlbXBvcmFyeSBzdG9yYWdlICovCisJCSAgICBpbnQgYmN0dXNhdjsK KwkJICAgIGJjdGxzYXYgPSBiY3RsOwkvKiBTYXZlIGN1cnJlbnQgYmxvY2sgY2hlY2sgbGVuZ3Ro ICovCisJCSAgICBiY3R1c2F2ID0gYmN0dTsJLyogYW5kIHR5cGUgKi8KKwkJICAgIGJjdHUgPSBi Y3RsID0gMTsJLyogU2V0IGJsb2NrIGNoZWNrIHRvIDEgKi8KKwkJICAgeCA9IHNwYWNrKCdZJyww LChpbnQpc3RybGVuKChjaGFyICopbXlpbml0KSwoQ0hBUiAqKW15aW5pdCk7CisJCSAgICBpZiAo eCA8IDApIHJldHVybih4KTsKKwkJICAgIGxvZ3BrdCgnIycsbiwoQ0hBUiAqKSI8cmVjb25zdHJ1 Y3RlZD4iLDApOyAvKiBMb2cgaXQgKi8KKwkJICAgIGJjdHUgPSBiY3R1c2F2OwkvKiBSZXN0b3Jl IGJsb2NrIGNoZWNrIHR5cGUgKi8KKwkJICAgIGJjdGwgPSBiY3Rsc2F2OwkvKiBhbmQgbGVuZ3Ro ICovCisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBOb3QgdGhlIGZpcnN0IHBhY2tldCAqLworLyoK KyAgSXQncyBub3QgdGhlIGZpcnN0IHBhY2tldCBvZiB0aGUgcHJvdG9jb2wgb3BlcmF0aW9uLiAg SXQncyBzb21lIG90aGVyIHBhY2tldAorICB0aGF0IHdlIGhhdmUgYWxyZWFkeSBBQ0snZCBhbmQg Zm9yZ290dGVuIGFib3V0LiAgU28gd2UgdGFrZSBhIGNoYW5jZSBhbmQKKyAgc2VuZCBhbiBlbXB0 eSBBQ0sgdXNpbmcgdGhlIGN1cnJlbnQgYmxvY2stY2hlY2sgdHlwZS4gIFVzdWFsbHkgdGhpcyB3 aWxsCisgIHdvcmsgb3V0IE9LIChsaWtlIHdoZW4gYWNraW5nIERhdGEgcGFja2V0cyksIGFuZCBu byBncmVhdCBoYXJtIHdpbGwgYmUgZG9uZQorICBpZiBpdCB3YXMgc29tZSBvdGhlciBraW5kIG9m IHBhY2tldCAoRiwgZXRjKS4gIElmIHdlIGFyZSByZXF1ZXN0aW5nIGFuCisgIGludGVycnVwdGlv biBvZiB0aGUgZmlsZSB0cmFuc2ZlciwgdGhlIGZsYWdzIGFyZSBzdGlsbCBzZXQsIHNvIHdlJ2xs IGNhdGNoCisgIHVwIG9uIHRoZSBuZXh0IHBhY2tldC4KKyovCisJCXggPSBzcGFjaygnWScsbiww LChDSEFSICopICIiKTsKKwkJaWYgKHggPCAwKSByZXR1cm4oeCk7CisJICAgIH0KKwkgICAgcmV0 cmFucysrOworCSAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiUmV0cmFuc21p c3Npb24iKTsKKwkgICAgcmV0dXJuKDApOworCX0gZWxzZSB7CisvKgorICBQYWNrZXQgbnVtYmVy IGlzIG5vdCBpbiBjdXJyZW50IG9yIHByZXZpb3VzIHdpbmRvdy4gIFdlIHNlZW0gdG8gaGl0IHRo aXMKKyAgY29kZSBvY2Nhc2lvbmFsbHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHRyYW5zYWN0aW9u LCBmb3IgYXBwYXJlbnRseSBubyBnb29kCisgIHJlYXNvbi4gIExldCdzIGp1c3QgbG9nIGl0IGZv ciBkZWJ1Z2dpbmcsIHNlbmQgbm90aGluZywgYW5kIHRyeSB0byBwcm9jZWVkCisgIHdpdGggdGhl IHByb3RvY29sIHJhdGhlciB0aGFuIGtpbGxpbmcgaXQuCisqLworCSAgICBkZWJ1ZyhGMTAxLCJy ZXNlbmQgUEtUIE5PVCBJTiBXSU5ET1ciLCIiLG4pOworCSAgICBkZWJ1ZyhGMTAxLCJyZXNlbmQg ayIsIiIsayk7CisJICAgIHJldHVybigwKTsKKwl9CisgICAgfQorCisvKiBPSywgaXQncyBpbiB0 aGUgd2luZG93IGFuZCBpdCdzIG5vdCBsb3N0LiAqLworCisgICAgZGVidWcoRjEwMSwicmVzZW5k IHBrdGluZm8gaW5kZXgiLCIiLGspOworCisgICAgaWYgKG1heHRyeSA+IDAgJiYgc19wa3Rbal0u cGtfcnRyKysgPiBtYXh0cnkpIHsgLyogT3ZlciByZXRyeSBsaW1pdCAqLworCXhpdHN0YSB8PSB3 aGF0OworCXJldHVybigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInJlc2VuZCByZXRyeSIs IiIsc19wa3Rbal0ucGtfcnRyKTsgLyogT0sgc28gZmFyICovCisgICAgZHVtcHNidWYoKTsJCQkJ LyogKGRlYnVnZ2luZykgKi8KKyAgICBpZiAoc19wa3Rbal0ucGtfdHlwID09ICcgJykgewkvKiBJ bmNvbXBsZXRlbHkgZm9ybWVkIHBhY2tldCAqLworCWlmIChuYWtzdGF0ZSkgewkJCS8qIChUaGlz IHNob3VsZG4ndCBoYXBwZW4gYW55IG1vcmUpICovCisJICAgIG5hY2sobik7CisJICAgIHJldHJh bnMrKzsKKwkgICAgeHhzY3JlZW4oU0NSX1BULCclJywobG9uZylwa3RudW0sIihyZXNlbmQpIik7 CisJICAgIHJldHVybihzX3BrdFtqXS5wa19ydHIpOworCX0gZWxzZSB7CQkJLyogTm8gcGFja2V0 IHRvIHJlc2VuZCEgKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIGhhcHBlbmVkIChvbmNl KSB3aGlsZSBzZW5kaW5nIGEgZmlsZSB3aXRoIDIgd2luZG93IHNsb3RzIGFuZCB0eXBpbmcKKyAg WCB0byB0aGUgc2VuZGVyIHRvIGNhbmNlbCB0aGUgZmlsZS4gIEJ1dCBzaW5jZSB3ZSdyZSBjYW5j ZWxsaW5nIGFueXdheSwKKyAgdGhlcmUncyBubyBuZWVkIHRvIGdpdmUgYSBzY2FyeSBtZXNzYWdl LgorKi8KKwkgICAgc3ByaW50ZigoY2hhciAqKWVwa3Rtc2csCisJCSAgICAicmVzZW5kIGxvZ2lj IGVycm9yOiBOUFMsIG49JWQsIGo9JWQuIixuLGopOworCSAgICByZXR1cm4oLTIpOworI2Vsc2UK Ky8qIEp1c3QgaWdub3JlIGl0LiAqLworCSAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVO VCAqLworCX0KKyAgICB9CisjaWZkZWYgREVCVUcKKyNpZmRlZiBHRlRJTUVSCisgICAgaWYgKGRl YmxvZykgdDEgPSBnZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2VuZGlmIC8qIERF QlVHICovCisKKyAgICAvKiBFdmVyeXRoaW5nIG9rLCBzZW5kIHRoZSBwYWNrZXQgKi8KKyNpZmRl ZiBDS19USU1FUlMKKyAgICBpZiAodGltaW50ID4gMCkKKyAgICAgIHNydHRibFtuXSA9IGd0aW1l cigpOwkJLyogVXBkYXRlIHRoZSB0aW1lciAqLworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworICAg IHggPSB0dG9sKHNfcGt0W2pdLnBrX2FkcixzX3BrdFtqXS5wa19sZW4pOworCisjaWZkZWYgREVC VUcKKyNpZmRlZiBHRlRJTUVSCisgICAgaWYgKGRlYmxvZykgIHsKKwl0MiA9IGdmdGltZXIoKTsK KwlkZWJ1ZyhGMTAxLCJyZXNlbmQgdHRvbCBtc2VjIiwiIiwobG9uZykoKHQyLXQxKSoxMDAwLjAp KTsKKyAgICB9CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2VuZGlmIC8qIERFQlVHICovCisgICAg ZGVidWcoRjEwMSwicmVzZW5kIHR0b2wgcmV0dXJucyIsIiIseCk7CisKKyAgICByZXRyYW5zKys7 CQkJCS8qIENvdW50IGEgcmV0cmFuc21pc3Npb24gKi8KKyAgICB4eHNjcmVlbihTQ1JfUFQsJyUn LChsb25nKXBrdG51bSwiKHJlc2VuZCkiKTsgLyogVGVsbCB1c2VyIGFib3V0IHJlc2VuZCAqLwor ICAgIGxvZ3BrdCgnUycsbixzX3BrdFtqXS5wa19hZHIsIHNfcGt0W2pdLnBrX2xlbik7IC8qIExv ZyB0aGUgcmVzZW50IHBhY2tldCAqLworICAgIHJldHVybihzX3BrdFtqXS5wa19ydHIpOwkJLyog UmV0dXJuIHRoZSBudW1iZXIgb2YgcmV0cmllcy4gKi8KK30KKworLyogIEUgUiBSIFAgSyBUICAt LSAgU2VuZCBhbiBFcnJvciBQYWNrZXQgICovCisKK2ludAorZXJycGt0KHJlYXNvbikgQ0hBUiAq cmVhc29uOyB7CQkvKiAuLi5jb250YWluaW5nIHRoZSByZWFzb24gZ2l2ZW4gKi8KKyAgICBleHRl cm4gaW50IHJ0aW1vLCBzdGF0ZSwganVzdG9uZTsKKyAgICBpbnQgeCwgeTsKKyAgICBjenNlZW4g PSAxOwkJCQkvKiBBbHNvIGNhbmNlbHMgYmF0Y2ggKi8KKyAgICBzdGF0ZSA9IDA7CQkJCS8qIFJl c2V0IHByb3RvY29sIHN0YXRlICovCisgICAgZGVidWcoRjExMCwiZXJycGt0IixyZWFzb24sMCk7 CisgICAgdGxvZyhGMTEwLCJQcm90b2NvbCBFcnJvcjoiLChjaGFyICopcmVhc29uLDBMKTsKKyAg ICB4eHNjcmVlbihTQ1JfRU0sMCwwTCxyZWFzb24pOworICAgIGVuY3N0cihyZWFzb24pOworICAg IHggPSBzcGFjaygnRScscGt0bnVtLHNpemUsZGF0YSk7CisgICAgY2tzdHJuY3B5KChjaGFyICop ZXBrdG1zZywoY2hhciAqKXJlYXNvbixQS1RNU0dMRU4pOworICAgIHkgPSBxdWlldDsgcXVpZXQg PSAxOyBlcGt0c2VudCA9IDE7CS8qIENsb3NlIGZpbGVzIHNpbGVudGx5LiAqLworICAgIGNsc2lm KCk7IGNsc29mKDEpOworICAgIHF1aWV0ID0geTsKKy8qCisgIEkganVzdCBzZW50IGFuIEUtcGFj a2V0LiAgSSdtIGluIGxvY2FsIG1vZGUsIEkgd2FzIHJlY2VpdmluZyBhIGZpbGUsCisgIEknbSBu b3QgYSBzZXJ2ZXIsIGFuZCBzbGlkaW5nIHdpbmRvd3MgYXJlIGluIHVzZS4gIFRoZXJlZm9yZSwg dGhlcmUgYXJlCisgIGxpa2VseSB0byBiZSBhIGJ1bmNoIG9mIHBhY2tldHMgYWxyZWFkeSAiaW4g dGhlIHBpcGUiIG9uIHRoZWlyIHdheSB0byBtZQorICBieSB0aGUgdGltZSB0aGUgcmVtb3RlIHNl bmRlciBnZXRzIHRoZSBFLXBhY2tldC4gIFNvIHRoZSBuZXh0IHRpbWUgSQorICBDT05ORUNUIG9y IHRyeSB0byBzdGFydCBhbm90aGVyIHByb3RvY29sIG9wZXJhdGlvbiwgSSBhbSBsaWtlbHkgdG8g YmVjb21lCisgIHRlcnJpYmx5IGNvbmZ1c2VkIGJ5IHRvcnJlbnRzIG9mIGluY29taW5nIG1hdGVy aWFsLiAgVG8gcHJldmVudCB0aGlzLAorICB0aGUgZm9sbG93aW5nIGNvZGUgc29ha3MgdXAgcGFj a2V0cyBmcm9tIHRoZSBjb25uZWN0aW9uIHVudGlsIHRoZXJlIGlzIGFuCisgIGVycm9yIG9yIHRp bWVvdXQsIHdpdGhvdXQgd2FzdGluZyB0b28gbXVjaCB0aW1lIHdhaXRpbmcuCisKKyAgRXhhY3Rs eSB0aGUgc2FtZSBwcm9ibGVtIG9jY3VycyB3aGVuIEkgYW0gaW4gcmVtb3RlIG1vZGUgb3IgaWYg SSBhbQorICBpbiBzZXJ2ZXIgbW9kZSB3aXRoIHRoZSBqdXN0b25lIGZsYWcgc2V0LiAgSW4gcmVt b3RlIG1vZGUgbm90IG9ubHkKKyAgZG9lcyB0aGUgcGFja2V0IGRhdGEgcG90ZW50aWFsbHkgZ2V0 IGVjaG8nZCBiYWNrIHRvIHRoZSBzZW5kZXIgd2hpY2gKKyAgaXMgY29uZnVzaW5nIHRvIHRoZSB1 c2VyIGluIENPTk5FQ1QgbW9kZSwgYnV0IGl0IGFsc28gbWF5IHJlc3VsdCBpbiB0aGUKKyAgaG9z dCBwZXJmb3JtaW5nIGJpemFycmUgYWN0aW9ucyBzdWNoIGFzIHN1c3BlbmRpbmcgdGhlIHByb2Nl c3MgaWYgXlogaXMKKyAgdW5wcmVmaXhlZCwgZXRjLgorCisgIEZ1cnRoZXJtb3JlLCB0aG91c2Fu ZHMgb2YgcGFja2V0cyBieXRlcyBpbiB0aGUgZGF0YSBzdHJlYW0gcHJldmVudCB0aGUKKyAgY2xp ZW50IGZyb20gYmVpbmcgYWJsZSB0byBwcm9jZXNzIFRlbG5ldCBLZXJtaXQgT3B0aW9uIG5lZ290 aWF0aW9ucworICBwcm9wZXJseS4KKyovCisjaWZkZWYgU1RSRUFNSU5HCisgICAgLyogQmVjYXVz ZSBzdHJlYW1pbmcgc2V0cyB0aGUgdGltZW91dCB0byAwLi4uICovCisgICAgaWYgKHN0cmVhbWlu ZykgeworCXRpbWludCA9IHJjdnRpbW8gPSBydGltbzsKKwlzdHJlYW1pbmcgPSAwOworICAgIH0K KyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICBpZiAod2hhdCAmIFdfUkVDViAmJgorICAgICAg ICAoIXNlcnZlciB8fCAoc2VydmVyICYmIGp1c3RvbmUpKSAmJgorICAgICAgICAod3Nsb3RzID4g MQorI2lmZGVmIFNUUkVBTUlORworCSB8fCBzdHJlYW1pbmcKKyNlbmRpZiAvKiBTVFJFQU1JTkcg Ki8KKwkgKSkgeworI2lmZGVmIEdGVElNRVIKKwlDS0ZMT0FUIG9sZHNlYywgc2VjID0gKENLRkxP QVQpIDAuMDsKKyNlbHNlCisJaW50IG9sZHNlYywgc2VjID0gMDsKKyNlbmRpZiAvKiBHRlRJTUVS ICovCisJZGVidWcoRjEwMSwiZXJycGt0IGRyYWluaW5nIiwiIix3c2xvdHMpOworCXh4c2NyZWVu KFNDUl9TVCxTVF9NU0csMGwsIkRyYWluaW5nIGluY29taW5nIHBhY2tldHMsIHdhaXQuLi4iKTsK Kwl3aGlsZSAoeCA+IC0xKSB7CQkvKiBEb24ndCBib3RoZXIgaWYgbm8gY29ubmVjdGlvbiAqLwor CSAgICBvbGRzZWMgPSBzZWM7CisjaWZkZWYgR0ZUSU1FUgorCSAgICBzZWMgPSBnZnRpbWVyKCk7 CisJICAgIGlmIChvbGRzZWMgIT0gKENLRkxPQVQpIDAuMCkKKwkgICAgICB0aW1pbnQgPSByY3Z0 aW1vID0gKGludCkgKHNlYyAtIG9sZHNlYyArIDAuNSk7CisjZWxzZQorCSAgICBzZWMgPSBndGlt ZXIoKTsKKwkgICAgaWYgKG9sZHNlYyAhPSAwKQorCSAgICAgIHRpbWludCA9IHJjdnRpbW8gPSBz ZWMgLSBvbGRzZWMgKyAxOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwkgICAgaWYgKHRpbWludCA8 IDEpCisJICAgICAgdGltaW50ID0gcmN2dGltbyA9IDE7CisJICAgIG1zbGVlcCg1MCk7CQkJLyog QWxsb3cgYSBiaXQgb2Ygc2xvcCAqLworCSAgICB4ID0gcnBhY2soKTsJCS8qIFJlYWQgYSBwYWNr ZXQgKi8KKwkgICAgaWYgKHggPT0gJ1QnIHx8IHggPT0gJ3onKQkvKiBUaW1lZCBvdXQgbWVhbnMg d2UncmUgZG9uZSAqLworCSAgICAgIGJyZWFrOworCSAgICB4eHNjcmVlbihTQ1JfUFQseCxyc24s IiIpOwkvKiBMZXQgdXNlciBrbm93ICovCisJfQorCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGws IkRyYWluIGNvbXBsZXRlLiIpOworICAgIH0KKyAgICBpZiAoKHggPSAod2hhdCAmIFdfS0VSTUlU KSkpCisgICAgICB4aXRzdGEgfD0geDsJCQkvKiBSZW1lbWJlciB3aGF0IGZhaWxlZC4gKi8KKyAg ICBzdWNjZXNzID0gMDsKKyAgICByZXR1cm4oeSk7Cit9CisKKy8qIHNjbWQoKSAgLS0gIFNlbmQg YSBwYWNrZXQgb2YgdGhlIGdpdmVuIHR5cGUgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3Nj bWQoY2hhciB0LCBDSEFSICpkYXQpCisjZWxzZQorc2NtZCh0LGRhdCkgY2hhciB0OyBDSEFSICpk YXQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNjbWQgKi8geworICAgIGludCB4OworICAg IGV4dGVybiBjaGFyICogc3JpbXNnOworICAgIGRlYnVnKEYwMDAsInNjbWQiLGRhdCx0KTsKKyAg ICBpZiAoZW5jc3RyKGRhdCkgPCAwKSB7CQkvKiBFbmNvZGUgdGhlIGNvbW1hbmQgc3RyaW5nICov CisJc3JpbXNnID0gIlN0cmluZyB0b28gbG9uZyI7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAg eCA9IHNwYWNrKHQscGt0bnVtLHNpemUsZGF0YSk7CisgICAgZGVidWcoRjEwMSwic2NtZCBzcGFj ayIsIiIseCk7CisgICAgcmV0dXJuKHgpOworfQorCisvKiBDb21wb3NlIGFuZCBTZW5kIEdFVCBw YWNrZXQgKi8KKworc3RydWN0IG9wa3RwYXJtIHsJCQkvKiBPLVBhY2tldCBpdGVtIGxpc3QgKi8K KyAgICBDSEFSICogb3BrdGl0ZW07CisgICAgc3RydWN0IG9wa3RwYXJtICogb3BrdG5leHQ7Cit9 OworCitzdHJ1Y3Qgb3BrdHBhcm0gKiBvcGt0aGVhZCA9IE5VTEw7CS8qIExpbmtlZCBsaXN0IG9m IE8tcGFja2V0IGZpZWxkcyAqLworaW50IG9wa3RjbnQgPSAwOwkJCS8qIE8tUGFja2V0IGNvdW50 ZXIgKi8KK2NoYXIgKiBzcmltc2cgPSBOVUxMOwkJCS8qIEdFVC1QYWNrZXQgZXJyb3IgbWVzc2Fn ZSAqLworCisvKiBTIE8gUCBLIFQgIC0tICBTZW5kIE8tUGFja2V0ICovCisvKgorICBTZW5kcyBv bmUgTy1QYWNrZXQgZWFjaCB0aW1lIGNhbGxlZCwgdXNpbmcgZmlyc3QtZml0IG1ldGhvZCBvZiBm aWxsaW5nCisgIHRoZSBwYWNrZXQgZnJvbSBsaW5rZWQgbGlzdCBvZiBwYXJhbWV0ZXJzIHBvaW50 ZWQgdG8gYnkgb3BrdGhlYWQuCisgIFRvIGJlIGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGxpc3Qg aXMgZW1wdHkgb3IgdGhlcmUgaXMgYW4gZXJyb3IuCisgIFJldHVybnM6CisgICAtMSBvbiBmYWls dXJlLgorICAgIDAgb24gc3VjY2VzcyBhbmQgbm8gbW9yZSBmaWVsZHMgbGVmdCB0byBzZW5kLgor ICAgIDEgb24gc3VjY2VzcyBidXQgd2l0aCBtb3JlIGZpZWxkcyBsZWZ0IHRvIGJlIHNlbnQuCisq LworCitpbnQKK3NvcGt0KCkgeworICAgIGludCBuID0gMDsJCQkJLyogRmllbGQgbnVtYmVyIGlu IHRoaXMgcGFja2V0ICovCisgICAgaW50IHJjID0gMDsJCQkJLyogUmV0dXJuIGNvZGUgKi8KKyAg ICBpbnQgbGVuID0gMDsJCQkvKiBEYXRhIGZpZWxkIGxlbmd0aCAqLworICAgIGNoYXIgYyA9IE5V TDsKKyAgICBzdHJ1Y3Qgb3BrdHBhcm0gKiBvID0gTlVMTDsKKyAgICBzdHJ1Y3Qgb3BrdHBhcm0g KiB0ID0gTlVMTDsKKyAgICBzdHJ1Y3Qgb3BrdHBhcm0gKiBwcmV2ID0gTlVMTDsKKyAgICBDSEFS ICogZHNhdmUgPSBkYXRhOworICAgIGludCB4LCBzc2F2ZSA9IHNwc2l6OworCisgICAgc3JpbXNn ID0gTlVMTDsJCQkvKiBFcnJvciBtZXNzYWdlICovCisgICAgbyA9IG9wa3RoZWFkOwkJCS8qIFBv aW50IHRvIGhlYWQgb2YgbGlzdCAqLworICAgIGlmICghbykgewkJCQkvKiBPb3BzLCBubyBsaXN0 Li4uICovCisJc3JpbXNnID0gIkdFVCBQYWNrZXQgSW50ZXJuYWwgRXJyb3IgMSI7CisJZGVidWco RjEwMCwic29wa3QgTlVMTCBsaXN0IiwiIiwwKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICB3 aGlsZSAobykgewkJCQkvKiBHbyB0aHJ1IGxpbmtlZCBsaXN0Li4uICovCisJYyA9ICooby0+b3Br dGl0ZW0pOwkJLyogUGFyYW1ldGVyIGNvZGUgKi8KKwlkZWJ1ZyhGMDAwLCJzb3BrdCIsby0+b3Br dGl0ZW0sYyk7CisJeCA9IGVuY3N0cigoQ0hBUiAqKW8tPm9wa3RpdGVtKTsKKwlkZWJ1ZyhGMTEx LCJzb3BrdCBlbmNzdHIiLGRzYXZlLHgpOworCWlmICh4IDwgMCkgewkJCS8qIEVuY29kZSB0aGlz IGl0ZW0gKi8KKwkgICAgaWYgKG4gPT0gMCkgewkJLyogRmFpbHVyZSwgZmlyc3QgZmllbGQgaW4g cGFja2V0ICovCisJCWRlYnVnKEYxMDAsInNvcGt0IG92ZXJmbG93IiwiIiwwKTsKKwkJc3BzaXog PSBzc2F2ZTsJCS8qIFJlc3RvcmUgdGhlc2UgKi8KKwkJZGF0YSA9IGRzYXZlOworCQlvID0gb3Br dGhlYWQ7CQkvKiBGcmVlIGxpbmtlZCBsaXN0ICovCisJCXdoaWxlIChvKSB7CisJCSAgICBpZiAo by0+b3BrdGl0ZW0pIGZyZWUoby0+b3BrdGl0ZW0pOworCQkgICAgdCA9IG8tPm9wa3RuZXh0Owor CQkgICAgZnJlZSgoY2hhciAqKW8pOworCQkgICAgbyA9IHQ7CisJCX0KKwkJb3BrdGhlYWQgPSBO VUxMOworCQlzcmltc2cgPSAiR0VUIFBhY2tldCBUb28gTG9uZyBmb3IgU2VydmVyIjsKKwkJcmV0 dXJuKC0xKTsJCS8qIEZhaWwgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBOb3QgZmlyc3QgZmllbGQg aW4gcGFja2V0ICovCisJCWRlYnVnKEYxMTAsInNvcGt0IGxlZnRvdmVyIixvLT5vcGt0aXRlbSww KTsKKwkJcHJldiA9IG87CQkvKiBNYWtlIHRoaXMgb25lIHRoZSBuZXcgcHJldmlvdXMgKi8KKwkJ byA9IG8tPm9wa3RuZXh0OwkvKiBHZXQgbmV4dCAqLworCQljID0gTlVMOwkJLyogU28gd2Uga25v dyB3ZSdyZSBub3QgZG9uZSAqLworCQkqZGF0YSA9IE5VTDsJCS8qIEVyYXNlIGFueSBwYXJ0aWFs IGVuY29kaW5nICovCisJCWNvbnRpbnVlOwkJLyogV2UgY2FuIHRyeSB0aGlzIG9uZSBhZ2FpbiBs YXRlciAqLworCSAgICB9CisJfQorCW4rKzsJCQkJLyogRW5jb2Rpbmcgd2FzIHN1Y2Nlc3NmdWwg Ki8KKwlkZWJ1ZyhGMTExLCJzb3BrdCBmaWVsZCIsZGF0YSx4KTsKKwlsZW4gKz0geDsJCQkvKiBU b3RhbCBkYXRhIGZpZWxkIGxlbmd0aCAqLworCWRhdGEgKz0geDsJCQkvKiBTZXQgdXAgZm9yIG5l eHQgZmllbGQuLi4gKi8KKwlzcHNpeiAtPSB4OworCWZyZWUoby0+b3BrdGl0ZW0pOwkJLyogRnJl ZSBpdGVtIGp1c3QgZW5jb2RlZCAqLworCWlmIChvID09IG9wa3RoZWFkKSB7CQkvKiBJZiBoZWFk ICovCisJICAgIG9wa3RoZWFkID0gby0+b3BrdG5leHQ7CS8qIE1vdmUgaGVhZCB0byBuZXh0ICov CisJICAgIGZyZWUoKGNoYXIgKilvKTsJCS8qIEZyZWUgdGhpcyBsaXN0IG5vZGUgKi8KKwkgICAg byA9IG9wa3RoZWFkOworCX0gZWxzZSB7CQkJLyogSWYgbm90IGhlYWQgKi8KKwkgICAgbyA9IG8t Pm9wa3RuZXh0OwkJLyogR2V0IG5leHQgKi8KKwkgICAgcHJldi0+b3BrdG5leHQgPSBvOwkJLyog TGluayBwcmV2aW91cyB0byBuZXh0ICovCisJfQorCWlmIChjID09ICdAJykJCQkvKiBMb29wIGV4 aXQgKi8KKwkgIGJyZWFrOworCWlmICghbyAmJiAhb3BrdGhlYWQpIHsJCS8qIFNldCB1cCBFbmQg T2YgUGFyYW1ldGVycyBGaWVsZCAqLworCSAgICBvID0gKHN0cnVjdCBvcGt0cGFybSAqKW1hbGxv YyhzaXplb2Yoc3RydWN0IG9wa3RwYXJtKSk7CisJICAgIGlmIChvKSB7CisJCW9wa3RoZWFkID0g bzsKKwkJaWYgKCEoby0+b3BrdGl0ZW0gPSAoQ0hBUiAqKW1hbGxvYygzKSkpIHsKKwkJICAgIGZy ZWUoKGNoYXIgKilvKTsKKwkJICAgIHNyaW1zZyA9ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9y IDgiOworCQkgICAgcmV0dXJuKC0xKTsKKwkJfQorCQlja3N0cm5jcHkoKGNoYXIgKikoby0+b3Br dGl0ZW0pLCAiQCAiLCAzKTsKKwkJZGVidWcoRjExMSwic29wa3Qgby0+b3BrdGl0ZW0iLG8tPm9w a3RpdGVtLAorCQkgICAgICBzdHJsZW4oKGNoYXIgKikoby0+b3BrdGl0ZW0pKSk7CisJCW8tPm9w a3RuZXh0ID0gTlVMTDsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZGF0YSA9IGRzYXZlOwkJCS8q IFJlc3RvcmUgZ2xvYmFscyAqLworICAgIHNwc2l6ID0gc3NhdmU7CisgICAgZGVidWcoRjExMCwi c29wa3QgZGF0YSIsZGF0YSwwKTsKKyAgICBkZWJ1ZyhGMTAxLCJzb3BrdCBvcGt0Y250IiwiIixv cGt0Y250KTsKKyAgICBpZiAob3BrdGNudCsrID4gMCkgeworCWlmIChueHRwa3QoKSA8IDApIHsJ CS8qIEdldCBuZXh0IHBhY2tldCBudW1iZXIgYW5kIGJ1ZmZlciAqLworCSAgICBzcmltc2cgPSAi R0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciA5IjsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAg fQorICAgIGRlYnVnKEYxMDEsInNvcGt0IHBrdG51bSIsIiIscGt0bnVtKTsKKyAgICByYyA9IHNw YWNrKChjaGFyKSdPJyxwa3RudW0sbGVuLGRhdGEpOyAvKiBTZW5kIE8tUGFja2V0ICovCisgICAg ZGVidWcoRjEwMSwic29wa3Qgc3BhY2siLCIiLHJjKTsKKyAgICBpZiAocmMgPCAwKQkJCQkvKiBG YWlsZWQgKi8KKyAgICAgIHNyaW1zZyA9ICJTZW5kIFBhY2tldCBGYWlsdXJlIjsJLyogU2V0IG1l c3NhZ2UgKi8KKyAgICBlbHNlCQkJCS8qIFN1Y2NlZWRlZCAqLworICAgICAgcmMgPSAoYyA9PSAn QCcpID8gMCA6IDE7CQkvKiAxID0gY29tZSBiYWNrIGZvciBtb3JlLCAwID0gZG9uZSAqLworICAg IGRlYnVnKEYxMDEsInNvcGt0IHJjIiwiIixyYyk7CisgICAgcmV0dXJuKHJjKTsKK30KKworLyog UyBSIEkgTiBJIFQgIC0tICBTZW5kIEdFVCBwYWNrZXQgICovCisvKgorICBTZW5kcyB0aGUgYXBw cm9wcmlhdGUgR0VULUNsYXNzIHBhY2tldC4KKyAgUmV0dXJuczoKKyAgLTEgb24gZXJyb3IKKyAg IDAgaWYgcGFja2V0IHNlbnQgc3VjY2Vzc2Z1bGx5IGFuZCB3ZSBjYW4gbW92ZSBvbiB0byB0aGUg bmV4dCBzdGF0ZQorICAgMSBpZiBhbiBPLXBhY2tldCB3YXMgc2VudCBPSyBidXQgbW9yZSBPIHBh Y2tldHMgc3RpbGwgbmVlZCB0byBiZSBzZW50LgorKi8KK2ludAorc3Jpbml0KHJlZ2V0LCByZXRy aWV2ZSwgb3BrdCkgaW50IHJlZ2V0LCByZXRyaWV2ZSwgb3BrdDsgeworICAgIGludCB4ID0gMCwg bGVmdCA9IDA7CisgICAgZXh0ZXJuIGludCBvb3B0cywgb21vZGU7CisgICAgQ0hBUiAqIHAgPSBO VUxMOworI2lmZGVmIFJFQ1VSU0lWRQorICAgIGV4dGVybiBpbnQgcmVjdXJzaXZlOworICAgIGRl YnVnKEYxMDEsInNyaW5pdCByZWN1cnNpdmUiLCIiLHJlY3Vyc2l2ZSk7CisjZW5kaWYgLyogUkVD VVJTSVZFICovCisgICAgZGVidWcoRjEwMSwic3Jpbml0IHJlZ2V0IiwiIixyZWdldCk7CisgICAg ZGVidWcoRjEwMSwic3Jpbml0IHJldHJpZXZlIiwiIixyZXRyaWV2ZSk7CisgICAgZGVidWcoRjEw MSwic3Jpbml0IG9wa3QiLCIiLG9wa3QpOworICAgIGRlYnVnKEYxMDEsInNyaW5pdCBvb3B0cyIs IiIsb29wdHMpOworICAgIGRlYnVnKEYxMDEsInNyaW5pdCBvbW9kZSIsIiIsb21vZGUpOworICAg IGRlYnVnKEYxMTAsInNyaW5pdCBjbWFyZyIsY21hcmcsMCk7CisgICAgc3JpbXNnID0gTlVMTDsK KworICAgIG9wa3RjbnQgPSAwOworICAgIGlmICghY21hcmcpIGNtYXJnID0gIiI7CisgICAgaWYg KCEqY21hcmcpIHsKKwlzcmltc2cgPSAiR0VUIHdpdGggbm8gZmlsZW5hbWUiOworCWRlYnVnKEYx MDAsInNyaW5pdCBudWxsIGNtYXJnIiwiIiwwKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBp ZiAob3BrdCkgewkJCQkvKiBFeHRlbmRlZCBHRVQgaXMgdG90YWxseSBkaWZmZXJlbnQgKi8KKwlj aGFyIGJ1ZlsxNl07CisJc3RydWN0IG9wa3RwYXJtICogbyA9IE5VTEw7CisJc3RydWN0IG9wa3Rw YXJtICogcHJldiA9IE5VTEw7CisKKyAgICAgICAgYnVmWzBdID0gTlVMOworCisJLyogQnVpbGQg Ty1QYWNrZXQgZmllbGRzIGFuZCBzZW5kIChwZXJoYXBzIGZpcnN0KSBPLVBhY2tldCAqLworCisJ aWYgKG9vcHRzID4gLTEpIHsJCS8qIFdyaXRlIE9wdGlvbiBmbGFncyAqLworCSAgICBvID0gKHN0 cnVjdCBvcGt0cGFybSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG9wa3RwYXJtKSk7CisJICAgIGlm ICghbykgeworCQlzcmltc2cgPSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciAyIjsKKwkJZGVi dWcoRjEwMCwic3Jpbml0IG1hbGxvYyBmYWlsIE8xIiwiIiwwKTsKKwkJcmV0dXJuKC0xKTsKKwkg ICAgfQorCSAgICBzcHJpbnRmKGJ1ZiwiT3glZCIsb29wdHMpOwkvKiBzYWZlICovCisJICAgIHgg PSAoaW50KSBzdHJsZW4oYnVmKzIpOworCSAgICBidWZbMV0gPSB0b2NoYXIoeCk7CisJICAgIG8t Pm9wa3RpdGVtID0gKENIQVIgKiltYWxsb2MoeCArIDMpOworCSAgICBpZiAoIW8tPm9wa3RpdGVt KSB7CisJCXNyaW1zZyA9ICJHRVQgUGFja2V0IEludGVybmFsIEVycm9yIDMiOworCQlkZWJ1ZyhG MTAwLCJzcmluaXQgbWFsbG9jIGZhaWwgTzIiLCIiLDApOworCQlyZXR1cm4oLTEpOworCSAgICB9 CisJICAgIGNrc3RybmNweSgoY2hhciAqKShvLT5vcGt0aXRlbSksYnVmLHgrMyk7CisJICAgIG8t Pm9wa3RuZXh0ID0gTlVMTDsKKwkgICAgaWYgKCFvcGt0aGVhZCkKKwkgICAgICBvcGt0aGVhZCA9 IG87CisJICAgIHByZXYgPSBvOworCX0KKwlpZiAob21vZGUgPiAtMSkgewkJLyogSWYgWGZlciBN b2RlIHNwZWNpZmllZCwgd3JpdGUgaXQgKi8KKwkgICAgbyA9IChzdHJ1Y3Qgb3BrdHBhcm0gKilt YWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGt0cGFybSkpOworCSAgICBpZiAoIW8pIHsKKwkJc3JpbXNn ID0gIkdFVCBQYWNrZXQgSW50ZXJuYWwgRXJyb3IgNCI7CisJCWRlYnVnKEYxMDAsInNyaW5pdCBt YWxsb2MgZmFpbCBNMSIsIiIsMCk7CisJCXJldHVybigtMSk7CisJICAgIH0KKwkgICAgc3ByaW50 ZihidWYsIk14JWQiLG9tb2RlKTsJLyogc2FmZSAqLworCSAgICB4ID0gKGludCkgc3RybGVuKGJ1 ZisyKTsKKwkgICAgYnVmWzFdID0gdG9jaGFyKHgpOworCSAgICBvLT5vcGt0aXRlbSA9IChDSEFS ICopbWFsbG9jKHggKyAzKTsKKwkgICAgaWYgKCFvLT5vcGt0aXRlbSkgeworCQlzcmltc2cgPSAi R0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciA1IjsKKwkJZGVidWcoRjEwMCwic3Jpbml0IG1hbGxv YyBmYWlsIE8yIiwiIiwwKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfQorCSAgICBja3N0cm5jcHko KGNoYXIgKikoby0+b3BrdGl0ZW0pLGJ1Zix4KzMpOworCSAgICBvLT5vcGt0bmV4dCA9IE5VTEw7 CisJICAgIGlmICghb3BrdGhlYWQpCisJICAgICAgb3BrdGhlYWQgPSBvOworCSAgICBlbHNlCisJ ICAgICAgcHJldi0+b3BrdG5leHQgPSBvOworCSAgICBwcmV2ID0gbzsKKwl9CisKKwkvKiBTYW1l IGRlYWwgZm9yIG9uYW1lIGFuZCBvcGF0aCBldmVudHVhbGx5IGJ1dCBub3QgbmVlZGVkIG5vdy4u LiAqLworCisJeCA9IHN0cmxlbihjbWFyZyk7CQkvKiBOb3cgZG8gZmlsZW5hbWUgKi8KKwlpZiAo eCA+IHNwc2l6IC0gNCkgeworCSAgICBzcmltc2cgPSAiR0VUIFBhY2tldCBUb28gTG9uZyBmb3Ig U2VydmVyIjsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJbyA9IChzdHJ1Y3Qgb3BrdHBhcm0gKilt YWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGt0cGFybSkpOworCWlmICghbykgeworCSAgICBzcmltc2cg PSAiR0VUIFBhY2tldCBJbnRlcm5hbCBFcnJvciA2IjsKKwkgICAgZGVidWcoRjEwMCwic3Jpbml0 IG1hbGxvYyBmYWlsIEYxIiwiIiwwKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJbGVmdCA9IHgg KyA2OworCW8tPm9wa3RpdGVtID0gKENIQVIgKiltYWxsb2MobGVmdCArIDEpOworCWlmICghby0+ b3BrdGl0ZW0pIHsKKwkgICAgc3JpbXNnID0gIkdFVCBQYWNrZXQgSW50ZXJuYWwgRXJyb3IgNyI7 CisJICAgIGRlYnVnKEYxMDAsInNyaW5pdCBtYWxsb2MgZmFpbCBGMiIsIiIsMCk7CisJICAgIHJl dHVybigtMSk7CisJfQorCXAgPSBvLT5vcGt0aXRlbTsKKwkqcCsrID0gJ0YnOworCWxlZnQtLTsK KwlpZiAoeCA+IDk0KSB7CQkJLyogVG9vIGxvbmcgZm9yIG5vcm1hbCBsZW5ndGggKi8KKwkgICAg KnArKyA9IFNZTjsJCQkvKiBFc2NhcGUgbGVuZ3RoIHdpdGggQ3RybC1WICovCisJICAgICpwKysg PSB0b2NoYXIoeCAvIDk1KTsKKwkgICAgKnArKyA9IHRvY2hhcih4ICUgOTUpOworCSAgICBsZWZ0 IC09IDM7CisJfSBlbHNlIHsJCQkvKiBOb3JtYWwgZW5jb2RpbmcgZm9yIDk0IG9yIGxlc3MgKi8K KwkgICAgKnArKyA9IHRvY2hhcih4KTsKKwkgICAgbGVmdC0tOworCX0KKwlja3N0cm5jcHkoKGNo YXIgKilwLGNtYXJnLGxlZnQpOyAvKiBDb3B5IHRoZSBmaWxlbmFtZSAqLworCW8tPm9wa3RuZXh0 ID0gTlVMTDsKKwlpZiAoIW9wa3RoZWFkKQorCSAgb3BrdGhlYWQgPSBvOworCWVsc2UKKwkgIHBy ZXYtPm9wa3RuZXh0ID0gbzsKKwlwcmV2ID0gbzsKKworCS8qIEVuZCBvZiBQYXJhbWV0ZXJzICov CisKKwlwcmV2LT5vcGt0bmV4dCA9IE5VTEw7CQkvKiBFbmQgb2YgbGlzdC4gKi8KKwlyZXR1cm4o c29wa3QoKSk7CisgICAgfQorCisgICAgLyogTm90IEV4dGVuZGVkIEdFVCAqLworCisgICAgaWYg KGVuY3N0cigoQ0hBUiAqKWNtYXJnKSA8IDApIHsJLyogRW5jb2RlIHRoZSBmaWxlbmFtZS4gKi8K Kwlzcmltc2cgPSAiR0VUIFBhY2tldCBUb28gTG9uZyBmb3IgU2VydmVyIjsKKwlyZXR1cm4oLTEp OworICAgIH0KKyAgICBpZiAocmV0cmlldmUpIHsJCQkvKiBTZW5kIHRoZSBwYWNrZXQuICovCisj aWZkZWYgUkVDVVJTSVZFCisJaWYgKHJlY3Vyc2l2ZSkKKwkgIHggPSBzcGFjaygoY2hhciknVycs cGt0bnVtLHNpemUsZGF0YSk7IC8qIEdFVCAvREVMRVRFIC9SRUNVUlNJVkUgKi8KKwllbHNlCisj ZW5kaWYgLyogUkVDVVJTSVZFICovCisJICB4ID0gc3BhY2soKGNoYXIpJ0gnLHBrdG51bSxzaXpl LGRhdGEpOyAvKiBHRVQgL0RFTEVURSAqLworICAgIH0KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICBl bHNlIGlmIChyZWN1cnNpdmUpCisgICAgICB4ID0gc3BhY2soKGNoYXIpJ1YnLHBrdG51bSxzaXpl LGRhdGEpOyAvKiBHRVQgL1JFQ1VSU0lWRSAqLworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAg IGVsc2UKKyAgICAgIHggPSBzcGFjaygoY2hhcikocmVnZXQgPyAnSicgOiAnUicpLHBrdG51bSxz aXplLGRhdGEpOyAvKiBHRVQgKi8KKyAgICBpZiAoeCA8IDApCisgICAgICBzcmltc2cgPSAiU2Vu ZCBQYWNrZXQgRmFpbHVyZSI7CisgICAgcmV0dXJuKHggPCAwID8geCA6IDApOworfQorCisKKy8q ICBLIFMgVCBBIFIgVCAgLS0gIENoZWNrcyBmb3IgYSBLZXJtaXQgcGFja2V0IHdoaWxlIGluIHRl cm1pbmFsIG1vZGUuICAqLworCisvKiAgKG9yIGNvbW1hbmQgbW9kZS4uLikgICovCisKKyNpZmRl ZiBDS19BVVRPREwKK2ludAorI2lmZGVmIENLX0FOU0lDCitrc3RhcnQoQ0hBUiBjaCkKKyNlbHNl Citrc3RhcnQoY2gpIENIQVIgY2g7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGtzdGFydCAq LyB7CisgICAgc3RhdGljIENIQVIgKiBwID0gTlVMTDsKKworI2lmZGVmIE9TMgorICAgIHN0YXRp YyBDSEFSICogcGsgPSBOVUxMOworI2VuZGlmIC8qIE9TMiAqLworICAgIGNoICY9IDAxNzc7CQkJ CS8qIFN0cmlwIDh0aCBiaXQgKi8KKworICAgIC8qIEJlY2F1c2Ugd2UncmUgaW4gY29va2VkIG1v ZGUgYXQgdGhlIGNvbW1hbmQgcHJvbXB0Li4uICovCisKKyAgICBpZiAoY2ggPT0gTEYpIHsKKwlk ZWJ1ZyhGMTEwLCJrc3RhcnQiLCJjaCA9PSBMRiIsMCk7CisJaWYgKCh3aGF0ID09IFdfQ09NTUFO RCB8fCB3aGF0ID09IFdfSU5JVCB8fCB3aGF0ID09IFdfTk9USElORykpIHsKKwkgICAgaWYgKGVv bCA9PSBDUikgeworCQljaCA9IGVvbDsKKwkJZGVidWcoRjExMCwia3N0YXJ0IiwiY2ggPSBDUiIs MCk7CisJICAgIH0KKwl9CisgICAgfQorCisjaWZkZWYgT1MyCisgICAgaWYgKGFkbF9rbW9kZSA9 PSBBRExfU1RSKSB7CisJaWYgKCFjaCkKKwkgIHJldHVybigwKTsKKwlpZiAoIXBrKQorCSAgcGsg PSBhZGxfa3N0cjsKKworCWlmIChjaCA9PSAqcGspIHsKKwkgICAgcGsrKzsKKwkgICAgaWYgKCpw ayA9PSAnXDAnKSB7CisJCXBrID0gYWRsX2tzdHI7CisJCWRlYnVnKEYxMDAsICJrc3RhcnQgS2Vy bWl0IFN0YXJ0IFN0cmluZyIsIiIsMCk7CisJCXJldHVybihQUk9UT19LICsgMSk7CisJICAgIH0K Kwl9IGVsc2UKKwkgIHBrID0gYWRsX2tzdHI7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisg ICAgaWYgKGNoID09IHN0Y2hyKSB7CQkJLyogU3RhcnQgb2YgcGFja2V0ICovCisJa3N0YXJ0YWN0 aXZlID0gMTsKKwlwID0ga3NidWY7CisJKnAgPSBjaDsKKwlkZWJ1ZyhGMTAxLCJrc3RhcnQgU09Q IiwiIixjaCk7CisgICAgfSBlbHNlIGlmIChjaCA9PSBlb2wpIHsJCS8qIEVuZCBvZiBwYWNrZXQg Ki8KKwlrc3RhcnRhY3RpdmUgPSAwOworCWlmIChwKSB7CisJICAgIGRlYnVnKEYxMDEsImtzdGFy dCBFT0wiLCIiLGNoKTsKKwkgICAgcCsrOworCSAgICBpZiAocCAtIGtzYnVmIDwgOTQgKSB7CisJ CWludCByYyA9IDA7CisJCSpwKysgPSBjaDsKKwkJKnAgPSBOVUw7CisJCXJjID0gY2hrc3BrdCgo Y2hhciAqKWtzYnVmKTsKKwkJZGVidWcoRjExMSwia3N0YXJ0IEVPUCBjaGtzcGt0Iiwga3NidWYs IHJjKTsKKwkJcCA9IE5VTEw7CisJCWlmICghcmMpIHJldHVybigwKTsKKwkJaWYgKHJjID09IDIp IHJjID0gLTE7CisJCWRlYnVnKEYxMTEsImtzdGFydCBrc2J1ZiIsa3NidWYscmMpOworCQlyZXR1 cm4ocmMpOworCSAgICB9IGVsc2UgeworCQlkZWJ1ZyhGMTEwLCJrc3RhcnQiLCJwIC0ga3NidWYg Pj0gOTQiLDApOworCQlwID0gTlVMTDsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgaWYgKHApIHsK KwlpZiAoY2ggPCBTUCkKKwkgIGtzdGFydGFjdGl2ZSA9IDA7CisJcCsrOworCWlmIChwIC0ga3Ni dWYgPCA5NCkgeworCSAgICAqcCA9IGNoOworCX0gZWxzZSB7CisJICAgIHAgPSBOVUxMOworCSAg ICBkZWJ1ZyhGMTEwLCJrc3RhcnQiLCJwIC0ga3NidWYgPj0gOTQiLDApOworCX0KKyAgICB9Cisg ICAgcmV0dXJuKDApOworfQorCisjaWZkZWYgQ0tfWFlaCisKKy8qICBaIFMgVCBBIFIgVCAgLS0g IENoZWNrcyBmb3IgYSBaTU9ERU0gcGFja2V0IHdoaWxlIGluIHRlcm1pbmFsIG1vZGUuICAqLwor CitpbnQKKyNpZmRlZiBDS19BTlNJQworenN0YXJ0KENIQVIgY2gpCisjZWxzZQorenN0YXJ0KGNo KSBDSEFSIGNoOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB6c3RhcnQgKi8geworICAgIHN0 YXRpYyBDSEFSICogbWF0Y2hzdHIgPSAoQ0hBUiAqKSAiXDAzMEIwMCI7CisgICAgLyogInJ6XHIq KlwwMzBCMDAwMDAwMDAwMDAwMDBcclwwMzNKXDAyMSI7ICovCisgICAgc3RhdGljIENIQVIgKiBw ID0gTlVMTDsKKyAgICBleHRlcm4gaW50IGluc2VydmVyOworCisgICAgaWYgKGluc2VydmVyKQor ICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCFjaCkKKyAgICAgIHJldHVybigwKTsKKyAgICBp ZiAoIXApIHsKKyNpZmRlZiBPUzIKKwlwID0gYWRsX3ptb2RlID09IEFETF9QQUNLID8gbWF0Y2hz dHIgOiBhZGxfenN0cjsKKyNlbHNlCisJcCA9IG1hdGNoc3RyOworI2VuZGlmIC8qIE9TMiAqLwor ICAgIH0KKyAgICBpZiAoY2ggPT0gKnApIHsKKwlwKys7CisJaWYgKCpwID09ICdcMCcpIHsKKyNp ZmRlZiBPUzIKKwkgICAgaWYgKGFkbF96bW9kZSA9PSBBRExfUEFDSykgeworCQlwID0gbWF0Y2hz dHI7CisJCWRlYnVnKEYxMDAsICJ6c3RhcnQgWm1vZGVtIFNPUCIsIiIsMCk7CisJICAgIH0gZWxz ZSB7CisJCXAgPSBhZGxfenN0cjsKKwkJZGVidWcoRjEwMCwgInpzdGFydCBabW9kZW0gU3RhcnQg U3RyaW5nIiwiIiwwKTsKKwkgICAgfQorI2Vsc2UKKwkgICAgcCA9IG1hdGNoc3RyOworCSAgICBk ZWJ1ZyhGMTAwLCAienN0YXJ0IFptb2RlbSBTT1AiLCIiLDApOworI2VuZGlmIC8qIE9TMiAqLwor CSAgICByZXR1cm4oUFJPVE9fWiArIDEpOworCX0KKyAgICB9IGVsc2UgeworI2lmZGVmIE9TMgor CXAgPSBhZGxfem1vZGUgPT0gQURMX1BBQ0sgPyBtYXRjaHN0ciA6IGFkbF96c3RyOworI2Vsc2UK KwlwID0gbWF0Y2hzdHI7CisjZW5kaWYgLyogT1MyICovCisgICAgfQorICAgIHJldHVybigwKTsK K30KKyNlbmRpZiAvKiBDS19YWVogKi8KKworI2lmbmRlZiBOT0lDUAorI2lmZGVmIENLX0FQQwor LyogIEEgVSBUIE8gRCBPIFcgTiAgKi8KKworI2lmZGVmIENLX0FOU0lDCitWT0lECithdXRvZG93 bihpbnQgY2gpCisjZWxzZQorVk9JRAorYXV0b2Rvd24oY2gpIGludCBjaDsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogYXV0b2Rvd24gKi8geworCisvKiBUaGUgS2VybWl0IGFuZCBabW9kZW0g QXV0by1kb3dubG9hZCBjYWxscyBnbyBoZXJlICovCisKKyAgICBleHRlcm4gaW50IGp1c3RvbmU7 CQkJLyogRnJvbSBwcm90b2NvbCBtb2R1bGUgKi8KKyAgICBleHRlcm4gaW50IGRlYnNlcywgcHJv dG9jb2wsIGFwY2FjdGl2ZSwgYXV0b2RsLCBpbmF1dG9kbDsKKyNpZmRlZiBEQ01EQlVGCisgICAg ZXh0ZXJuIGNoYXIgKmFwY2J1ZjsKKyNlbHNlCisgICAgZXh0ZXJuIGNoYXIgYXBjYnVmW107Cisj ZW5kaWYgLyogRENNREJVRiAqLworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQgYXBjbGVuZ3Ro LCB0ZXJtX2lvOworI2VuZGlmIC8qIE9TMiAqLworICAgIGludCBrID0gMDsKKworICAgIGlmICgo YXV0b2RsIHx8IGluYXV0b2RsCisjaWZkZWYgSUtTX09QVElPTgorCSB8fCBURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworCSAp ICYmICFkZWJzZXMpIHsKKyNpZmRlZiBDS19YWVoKKyNpZmRlZiBYWVpfSU5URVJOQUwKKwlleHRl cm4gaW50IHBfYXZhaWw7CisjZWxzZQorCWludCBwX2F2YWlsID0gMTsKKyNlbmRpZiAvKiBYWVpf SU5URVJOQUwgKi8KKwlpZiAocF9hdmFpbCAmJiB6c3RhcnQoKENIQVIpIGNoKSkgeworCSAgICBk ZWJ1ZyhGMTAwLCAiWm1vZGVtIGRvd25sb2FkIiwiIiwwKTsKKyNpZmRlZiBPUzIKKyNpZm5kZWYg Tk9URVJNCisgICAgICAgICAgICBhcGNfY29tbWFuZChBUENfTE9DQUwsInJlY2VpdmUgL3Byb3Rv Y29sOnptb2RlbSIpOworI2VuZGlmIC8qIE5PVEVSTSAqLworI2Vsc2UgLyogT1MyICovCisgICAg ICAgICAgICBja3N0cm5jcHkoYXBjYnVmLCJyZWNlaXZlIC9wcm90b2NvbDp6bW9kZW0iLEFQQ0JV RkxFTik7CisJICAgIGFwY2FjdGl2ZSA9IEFQQ19MT0NBTDsKKyNlbmRpZiAvKiBPUzIgKi8KKwkg ICAgcmV0dXJuOworCX0KKyNlbmRpZiAvKiBDS19YWVogKi8KKworCS8qIEZpcnN0IHRyeS4uLiAq LworCWsgPSBrc3RhcnQoKENIQVIpIGNoKTsKKwlpZiAoCisjaWZkZWYgTk9TRVJWRVIKKwkgICAg ayA+IDAKKyNlbHNlIC8qIE5PU0VSVkVSICovCisJICAgIGsKKyNlbmRpZiAvKiBOT1NFUlZFUiAq LworCSAgICApIHsJCQkJLyogV2Ugc2F3IGEgdmFsaWQgUyBvciBJIHBhY2tldCAqLworCSAgICBp ZiAoayA8IDApIHsJCS8qIFN0dWZmIFJFQ0VJVkUgaW50byBBUEMgYnVmZmVyICovCisJCWp1c3Rv bmUgPSAxOworCQlzd2l0Y2ggKHByb3RvY29sKSB7CisjaWZkZWYgQ0tfWFlaCisJCSAgY2FzZSBQ Uk9UT19HOgorCQkgICAgY2tzdHJuY3B5KGFwY2J1ZiwKKwkJCSAgICAgICJzZXQgcHJvdG8ga2Vy bWl0LCBzZXJ2ZXIsIHNldCBwcm90b2NvbCBnIiwKKwkJCSAgICAgIEFQQ0JVRkxFTgorCQkJICAg ICAgKTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgUFJPVE9fWDoKKwkJICAgIGNrc3RybmNweShh cGNidWYsCisJCQkgICAgICAic2V0IHByb3RvIGtlcm1pdCxzZXJ2ZXIsc2V0IHByb3RvIHhtb2Rl bSIsCisJCQkgICAgICBBUENCVUZMRU4KKwkJCSAgICAgICk7CisJCSAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgIGNhc2UgUFJPVE9fWEM6CisJCSAgICBja3N0cm5jcHkoYXBjYnVmLAorCQkJ ICAgInNldCBwcm90byBrZXJtaXQsc2VydmVyLHNldCBwcm90byB4bW9kZW0tY3JjIiwKKwkJCSAg ICAgIEFQQ0JVRkxFTgorCQkJICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KwkJICBjYXNlIFBST1RPX1k6CisJCSAgICBja3N0cm5jcHkoYXBjYnVmLAorCQkJICAgICAgInNl dCBwcm90byBrZXJtaXQsc2VydmVyLCBzZXQgcHJvdG9jb2wgeSIsCisJCQkgICAgICBBUENCVUZM RU4KKwkJCSAgICAgICk7CisJCSAgICBicmVhazsKKwkJICBjYXNlIFBST1RPX1o6CisJCSAgICBj a3N0cm5jcHkoYXBjYnVmLAorCQkJICAgICAgInNldCBwcm90byBrZXJtaXQsc2VydmVyLHNldCBw cm90byB6bW9kZW0iLAorCQkJICAgICAgQVBDQlVGTEVOCisJCQkgICAgICApOworCQkgICAgYnJl YWs7CisjZW5kaWYgLyogQ0tfWFlaICovCisJCSAgY2FzZSBQUk9UT19LOgorCQkgICAgY2tzdHJu Y3B5KGFwY2J1Ziwic2VydmVyIixBUENCVUZMRU4pOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAg fSBlbHNlIHsKKwkJanVzdG9uZSA9IDA7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGFwY2J1 ZiwicmVjZWl2ZSAvcHJvdG9jb2w6a2VybWl0IixBUENCVUZMRU4pOworCSAgICB9CisjaWZkZWYg T1MyCisjaWZuZGVmIE5PVEVSTQorICAgICAgICAgICAgYXBjX2NvbW1hbmQoQVBDX0xPQ0FMLGFw Y2J1Zik7CisjZW5kaWYgLyogTk9URVJNICovCisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgICAg IGNrc3RybmNweShhcGNidWYsInJlY2VpdmUgL3Byb3RvY29sOnptb2RlbSIsQVBDQlVGTEVOKTsK KwkgICAgYXBjYWN0aXZlID0gQVBDX0xPQ0FMOworI2VuZGlmIC8qIE9TMiAqLworCSAgICByZXR1 cm47CisJfQorICAgIH0KK30KKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNlbmRpZiAvKiBOT0lDUCAq LworCisvKiAgQyBIIEsgUyBQIEsgVCAgLS0gIENoZWNrIGlmIGJ1ZiBjb250YWlucyBhIHZhbGlk IFMgb3IgSSBwYWNrZXQgICovCisKK2ludAorY2hrc3BrdChwYWNrZXQpIGNoYXIgKnBhY2tldDsg eworICAgIGludCBpOworICAgIGludCBidWZsZW47CisgICAgaW50IGxlbiA9IC0xOworICAgIENI QVIgY2hrOworICAgIGNoYXIgdHlwZSA9IDA7CisgICAgY2hhciAqcyA9IE5VTEw7CisgICAgY2hh ciAqYnVmID0gTlVMTDsKKyAgICBjaGFyIHRtcGJ1ZlsxMDBdOwkJCS8qIExvbmdlc3QgUy9JIHBh Y2tldCBpcyBhYm91dCAzMCAqLworCisgICAgaWYgKCFwYWNrZXQpIHJldHVybigwKTsKKyAgICBi dWZsZW4gPSBja3N0cm5jcHkodG1wYnVmLHBhY2tldCwxMDApOyAvKiBNYWtlIGEgcG9rZWFibGUg Y29weSAqLworICAgIGlmIChidWZsZW4gPCA1KSByZXR1cm4oMCk7CQkvKiBUb28gc2hvcnQgKi8K KyAgICBpZiAoYnVmbGVuID4gMTAwKSByZXR1cm4oMCk7IAkvKiBUb28gbG9uZyB0byBiZSBhbiBT IG9yIEkgcGFja2V0ICovCisgICAgcyA9IGJ1ZiA9IHRtcGJ1ZjsJCQkvKiBQb2ludCB0byBiZWdp bm5pbmcgb2YgY29weSAqLworCisgICAgaWYgKCpzKysgIT0gc3RjaHIpIHJldHVybigwKTsJLyog U09IICovCisgICAgbGVuID0geHVuY2hhcigqcysrKTsJCS8qIExlbmd0aCAqLworICAgIGlmIChs ZW4gPCAwKSByZXR1cm4oMCk7CisgICAgaWYgKCpzKysgIT0gU1ApIHJldHVybigwKTsJCS8qIFNl cXVlbmNlIG51bWJlciAqLworICAgIHR5cGUgPSAqcysrOwkJCS8qIFR5cGUgKi8KKyAgICBpZiAo dHlwZSAhPSAnUycgJiYgdHlwZSAhPSAnSScpCisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKGJ1 ZmxlbiA8IGxlbiArIDIpIHJldHVybigwKTsKKyAgICBzICs9IChsZW4gLSAzKTsJCQkvKiBQb3Np dGlvbiBvZiBjaGVja3N1bSAqLworICAgIGNoayA9IChDSEFSKSAoKnMpOwkJCS8qIENoZWNrc3Vt ICovCisgICAgKnMgPSBOVUw7CQkJICAgLyogVGVtcG9yYXJpbHkgbnVsbC10ZXJtaW5hdGUgZGF0 YSBmaWVsZCAqLworICAgIGlmICh4dW5jaGFyKGNoaykgIT0gY2hrMSgoQ0hBUiAqKShidWYrMSks YnVmbGVuLTIpKSB7IC8qIENoZWNrIGl0ICovCisJLyoKKwkgIEluIEMtS2VybWl0IDkuMCBhbmQg bGF0ZXIsIGFuIFMgb3IgSSBwYWNrZXQgY2FuIGhhdmUgYSAKKwkgIFR5cGUgMyBCbG9jayBjaGVj ayAoImhlbHAgc2V0IGJsb2NrLWNoZWNrIiBmb3IgZGV0YWlscykuCisJKi8KKwl1bnNpZ25lZCBj cmM7CQkJLyogRmFpbGVkLi4uIFRyeSBUeXBlIDMgYmxvY2sgY2hlY2sgKi8KKwkqcyA9IGNoazsJ CQkvKiBSZXBsYWNlIGxhc3QgYnl0ZSAqLworCXMgLT0gMjsJCQkJLyogQmFjayB1cCB0d28gYnl0 ZXMgKi8KKwljcmMgPSAoeHVuY2hhcihzWzBdKSA8PCAxMikJLyogQ29udmVydCAzIGJ5dGVzIHRv IG51bWVyaWMgQ1JDICovCisJICAgIHwgKHh1bmNoYXIoc1sxXSkgPDwgNikKKwkgICAgfCAoeHVu Y2hhcihzWzJdKSk7CisJY2hrID0gKENIQVIpKCpzKTsJCS8qIENvcHkgMXN0IGJ5dGUgb2YgMy1i eXRlIENSQyAqLworCSpzID0gTlVMOwkJCS8qIE51bGwtdGVybWluYXRlIGRhdGEgZmllbGQgKi8K KwlpZiAoY3JjICE9IGNoazMoKENIQVIgKikoYnVmKzEpLHN0cmxlbihidWYrMSkpKQorCSAgcmV0 dXJuKDApOworICAgIH0KKyAgICByZXR1cm4odHlwZSA9PSAnUycgPyAxIDogMik7Cit9CisjZW5k aWYgLyogQ0tfQVVUT0RMICovCisKKy8qIFIgUCBBIEMgSyAgLS0gIFJlYWQgYSBQYWNrZXQgKi8K KworLyoKKyAgcnBhY2sgcmVhZHMgYSBwYWNrZXQgYW5kIHJldHVybnMgdGhlIHBhY2tldCB0eXBl LCBvciBlbHNlIFEgaWYgdGhlCisgIHBhY2tldCB3YXMgaW52YWxpZCwgb3IgVCBpZiBhIHRpbWVv dXQgb2NjdXJyZWQuICBVcG9uIHN1Y2Nlc3NmdWwgcmV0dXJuLAorICBzZXRzIHRoZSB2YWx1ZXMg b2YgZ2xvYmFsIHJzbiAocmVjZWl2ZWQgc2VxdWVuY2UgbnVtYmVyKSwgIHJsbiAocmVjZWl2ZWQK KyAgZGF0YSBsZW5ndGgpLCBhbmQgcmRhdGFwIChwb2ludGVyIHRvIG51bGwtdGVybWluYXRlZCBk YXRhIGZpZWxkKSwgYW5kCisgIHJldHVybnMgdGhlIHBhY2tldCB0eXBlLiAgTk9URTogVGhpcyBp cyBhbiBpbm5lci1sb29wIGZ1bmN0aW9uIHNvIG11c3QgYmUKKyAgZWZmaWNpZW50LiAgUHJvdGVj dCBmdW5jdGlvbiBjYWxscyBieSBpZi10ZXN0cyB3aGVyZSBwb3NzaWJsZSwgZS5nLgorICAiaWYg KHBrdGxvZykgbG9ncGt0KC4uLik7Ii4KKyovCitpbnQKK3JwYWNrKCkgeworICAgIHJlZ2lzdGVy IGludCBpLCBqLCB4LCBscDsJCS8qIExvY2FsIHZhcmlhYmxlcyAqLworI2lmZGVmIENLVFVOSU5H CisgICAgdW5zaWduZWQgaW50IGNoazsKKyNlbmRpZiAvKiBDS1RVTklORyAqLworICAgIGludCBr LCB0eXBlLCBjaGtsZW47CisgICAgdW5zaWduZWQgY3JjOworICAgIENIQVIgcGJjWzVdOwkJCS8q IFBhY2tldCBibG9jayBjaGVjayAqLworICAgIENIQVIgKnNvaHA7CQkJCS8qIFBvaW50ZXIgdG8g U09IICovCisgICAgQ0hBUiBlOwkJCQkvKiBQYWNrZXQgZW5kIGNoYXJhY3RlciAqLworCisjaWZk ZWYgR0ZUSU1FUgorICAgIENLRkxPQVQgdDEgPSAwLjAsIHQyID0gMC4wOworI2VuZGlmIC8qIEdG VElNRVIgKi8KKworICAgIGRlYnVnKEYxMDEsInJwYWNrIHBrdG51bSIsIiIscGt0bnVtKTsKKwor I2lmbmRlZiBPTERDSEtJTlQKKyAgICBpZiAoY2hraW50KCkgPCAwKQkJCS8qIENoZWNrIGZvciBj b25zb2xlIGludGVycnVwdHMuICovCisgICAgICByZXR1cm4oJ3onKTsKKyNlbmRpZiAvKiBPTERD SEtJTlQgKi8KKworICAgIGsgPSBnZXRyYnVmKCk7CQkJLyogR2V0IGEgbmV3IHBhY2tldCBpbnB1 dCBidWZmZXIuICovCisgICAgZGVidWcoRjEwMSwicnBhY2sgZ2V0cmJ1ZiIsIiIsayk7CisgICAg aWYgKGsgPCAwKSB7CQkJLyogUmV0dXJuIGxpa2UgdGhpcyBpZiBub25lIGZyZWUuICovCisJcmV0 dXJuKC0xKTsKKyAgICB9CisgICAgcmVjcGt0ID0gcl9wa3Rba10uYmZfYWRyOworICAgICpyZWNw a3QgPSAnXDAnOwkJCS8qIENsZWFyIHJlY2VpdmUgYnVmZmVyLiAqLworICAgIHNvaHAgPSByZWNw a3Q7CQkJLyogSW5pdGlhbGl6ZSBwb2ludGVycyB0byBpdC4gKi8KKyAgICByZGF0YXAgPSByZWNw a3Q7CisgICAgcnNuID0gcmxuID0gLTE7CQkJLyogSW4gY2FzZSBvZiBmYWlsdXJlLiAqLworICAg IGUgPSAodHVybikgPyB0dXJuY2ggOiBlb2w7CQkvKiBVc2UgYW55IGhhbmRzaGFrZSBjaGFyIGZv ciBlb2wgKi8KKworLyogVHJ5IHRvIGdldCBhICJsaW5lIi4gKi8KKworI2lmZGVmIENLX0FVVE9E TAorICAgIGRlYnVnKEYxMTAsInJwYWNrIGtzYnVmIixrc2J1ZiwwKTsKKyAgICBpZiAoa3NidWZb MF0pIHsJCQkvKiBLZXJtaXQgcGFja2V0IGFscmVhZHkgKi8KKwlpbnQgeDsJCQkJLyogY29sbGVj dGVkIGZvciB1cyBpbiBDT05ORUNUIG1vZGUgKi8KKwlDSEFSICpzMSA9IHJlY3BrdCwgKnMyID0g a3NidWY7CisJaiA9IDA7CisJd2hpbGUgKCpzMikgewkJCS8qIENvcHkgYW5kIGdldCBsZW5ndGgg Ki8KKwkgICAgKnMxKysgPSAqczIrKzsJCS8qIE5vIHBvaW50IG9wdGltaXppbmcgdGhpcyBzaW5j ZSAqLworCSAgICBqKys7CQkJLyogaXQncyBuZXZlciBtb3JlIHRoYW4gfjIwIGNoYXJzICovCisJ fQorCSpzMSA9IE5VTDsKKyNpZmRlZiBQQVJTRU5TRQorCXggPSBwYXJjaGsocmVjcGt0LCBzdGNo ciwgaik7CS8qIENoZWNrIHBhcml0eSAqLworCWRlYnVnKEYwMDAsImF1dG9kb3dubG9hZCBwYXJp dHkiLCIiLHBhcml0eSk7CisJZGVidWcoRjAwMCwiYXV0b2Rvd25sb2FkIHBhcmNoayIsIiIseCk7 CisJaWYgKHggPiAwICYmIHBhcml0eSAhPSB4KSB7CisJICAgIGF1dG9wYXIgPSAxOworCSAgICBw YXJpdHkgPSB4OworCX0KKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworCWtzYnVmWzBdID0gTlVMOwkJ CS8qIERvbid0IGRvIHRoaXMgbmV4dCB0aW1lISAqLworCisgICAgfSBlbHNlIHsJCQkJLyogTm9y bWFsbHkgZ28gcmVhZCBhIHBhY2tldCAqLworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworCisjaWZk ZWYgREVCVUcKKwlpZiAoZGVibG9nKSB7CisJICAgIGRlYnVnKEYxMDEsInJwYWNrIHRpbWludCIs IiIsdGltaW50KTsKKwkgICAgZGVidWcoRjEwMSwicnBhY2sgcmN2dGltbyIsIiIscmN2dGltbyk7 CisjaWZkZWYgU1RSRUFNSU5HCisJICAgIGRlYnVnKEYxMDEsInJwYWNrIHN0cmVhbWluZyIsIiIs c3RyZWFtaW5nKTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyNpZmRlZiBHRlRJTUVSCisJICAg IC8qIE1lYXN1cmUgaG93IGxvbmcgaXQgdGFrZXMgdG8gcmVhZCBhIHBhY2tldCAqLworCSAgICB0 MSA9IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJfQorI2VuZGlmIC8qIERFQlVH ICovCisKKy8qIEpVU1QgSU4gQ0FTRSAob3RoZXJ3aXNlIHRoaXMgY291bGQgY2xvYmJlciBzdHJl YW1pbmcpICovCisKKwlpZiAoKHRpbWludCA9PSAwCisjaWZkZWYgU1RSRUFNSU5HCisJICAgICB8 fCBzdHJlYW1pbmcKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgICAgICkgJiYgKHJjdnRpbW8g IT0gMCkpIHsKKwkgICAgZGVidWcoRjEwMSwicnBhY2sgdGltaW50IDAgfHwgc3RyZWFtaW5nIGJ1 dCByY3Z0aW1vIiwiIixyY3Z0aW1vKTsKKwkgICAgcmN2dGltbyA9IDA7CisJfQorCisjaWZkZWYg UEFSU0VOU0UKKyNpZmRlZiBVTklYCisvKgorICBTbyBmYXIgdGhlIGZpbmFsIHR1cm4gYXJndW1l bnQgaXMgb25seSBmb3IgY2tbdXZkbF10aW8uYy4gIFNob3VsZCBiZSBhZGRlZAorICB0byB0aGUg b3RoZXJzIHRvby4gICh0dXJuID09IGhhbmRzaGFrZSBjaGFyYWN0ZXIuKQorKi8KKwlqID0gdHRp bmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2dGltbyxlLHN0Y2hyLHR1cm4pOworI2Vs c2UKKyNpZmRlZiBWTVMKKwlqID0gdHRpbmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2 dGltbyxlLHN0Y2hyLHR1cm4pOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorCWogPSB0dGlu bChyZWNwa3Qscl9wa3Rba10uYmZfbGVuIC0gMSxyY3Z0aW1vLGUsc3RjaHIsdHVybik7CisjZWxz ZQorI2lmZGVmIFNUUkFUVVMKKwlqID0gdHRpbmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEs cmN2dGltbyxlLHN0Y2hyLHR1cm4pOworI2Vsc2UKKyNpZmRlZiBPUzIKKwlqID0gdHRpbmwocmVj cGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2dGltbyxlLHN0Y2hyLHR1cm4pOworI2Vsc2UKKyNp ZmRlZiBPU0sKKwlqID0gdHRpbmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAtIDEscmN2dGltbyxl LHN0Y2hyLHR1cm4pOworI2Vsc2UKKwlqID0gdHRpbmwocmVjcGt0LHJfcGt0W2tdLmJmX2xlbiAt IDEscmN2dGltbyxlLHN0Y2hyKTsKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAv KiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisJaWYgKHBhcml0eSAhPSAwICYmIHBhcml0eSAh PSAncycgJiYgdHRwcnR5ICE9IDApIHsKKwkgICAgaWYgKHBhcml0eSAhPSB0dHBydHkpIGF1dG9w YXIgPSAxOworCSAgICBwYXJpdHkgPSB0dHBydHk7CisJfQorI2Vsc2UgLyogIVBBUlNFTlNFICov CisJaiA9IHR0aW5sKHJlY3BrdCxyX3BrdFtrXS5iZl9sZW4gLSAxLHJjdnRpbW8sZSk7CisjZW5k aWYgLyogUEFSU0VOU0UgKi8KKworI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZykgIHsKKwkgICAg ZGVidWcoRjEwMSwicnBhY2sgdHRpbmwgbGVuIiwiIixqKTsKKyNpZmRlZiBHRlRJTUVSCisJICAg IHQyID0gZ2Z0aW1lcigpOworCSAgICBkZWJ1ZyhGMTAxLCJycGFjayB0dGlubCBtc2VjIiwiIiwo bG9uZykoKHQyLXQxKSoxMDAwLjApKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJfQorI2VuZGlm IC8qIERFQlVHICovCisKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICBpZiAoc3RyZWFtaW5nICYmIHNu ZHR5cCA9PSAnRCcgJiYgaiA9PSAwKQorICAgICAgICByZXR1cm4oJ1knKTsKKyNlbmRpZiAvKiBT VFJFQU1JTkcgKi8KKworCWlmIChqIDwgMCkgeworCSAgICAvKiAtMSA9PSB0aW1lb3V0LCAtMiA9 PSBeQywgLTMgPT0gY29ubmVjdGlvbiBsb3N0IG9yIGZhdGFsIGkvbyAqLworCSAgICBkZWJ1ZyhG MTAxLCJycGFjazogdHRpbmwgZmFpbHMiLCIiLGopOyAvKiBPdGhlcndpc2UsICovCisJICAgIGZy ZWVyYnVmKGspOwkJLyogRnJlZSB0aGlzIGJ1ZmZlciAqLworCSAgICBpZiAoaiA8IC0xKSB7CQkv KiBCYWlsIG91dCBpZiBeQ15DIHR5cGVkLiAqLworCQlpZiAoaiA9PSAtMikgeworCQkgICAgaW50 ZXJydXB0ZWQgPSAxOworCQkgICAgZGVidWcoRjEwMSwicnBhY2sgXkMgc2VydmVyIiwiIixzZXJ2 ZXIpOworCQkgICAgZGVidWcoRjEwMSwicnBhY2sgXkMgZW5fZmluIiwiIixlbl9maW4pOworCQl9 IGVsc2UgaWYgKGogPT0gLTMpIHsKKwkJICAgIGZhdGFsaW8gPSAxOworCQkgICAgZGVidWcoRjEw MSwicnBhY2sgZmF0YWxpbyIsIiIsZW5fZmluKTsKKwkJfQorCQlyZXR1cm4oaik7CisJICAgIH0K KwkgICAgaWYgKG5ha3N0YXRlKQkJLyogaiA9PSAtMSBpcyBhIHJlYWQgdGltZW91dCAqLworCSAg ICAgIHh4c2NyZWVuKFNDUl9QVCwnVCcsKGxvbmcpd2lubG8sIiIpOworCSAgICBlbHNlCisJICAg ICAgeHhzY3JlZW4oU0NSX1BULCdUJywobG9uZylwa3RudW0sIiIpOworCSAgICBsb2dwa3QoJ3In LC0xLChDSEFSICopIjx0aW1lb3V0PiIsMCk7CisJICAgIGlmIChmbG93ID09IDEpIHR0b2MoWE9O KTsJLyogSW4gY2FzZSBvZiBYb2ZmIGJsb2NrYWdlLiAqLworCSAgICByZXR1cm4oJ1QnKTsKKwl9 CisjaWZkZWYgQ0tfQVVUT0RMCisgICAgfQorI2VuZGlmIC8qIENLX0FVVE9ETCAqLworCisgICAg cnBrdGwgPSBqOworICAgIHRsY2kgKz0gajsJCQkJLyogQWxsIE9LLCBDb3VudCB0aGUgY2hhcmFj dGVycy4gKi8KKyAgICBmbGNpICs9IGo7CisKKy8qIEZpbmQgc3RhcnQgb2YgcGFja2V0ICovCisK KyNpZm5kZWYgUEFSU0VOU0UKKyAgICBmb3IgKGkgPSAwOyAocmVjcGt0W2ldICE9IHN0Y2hyKSAm JiAoaSA8IGopOyBpKyspCisgICAgICBzb2hwKys7CQkJCS8qIEZpbmQgbWFyayAqLworICAgIGlm IChpKysgPj0gaikgewkJCS8qIERpZG4ndCBmaW5kIGl0LiAqLworCWxvZ3BrdCgncicsLTEsIjx0 aW1lb3V0PiIsMCk7CisJZnJlZXJidWYoayk7CisJcmV0dXJuKCdUJyk7CisgICAgfQorI2Vsc2UK KyAgICBpID0gMTsJCQkJLyogdHRpbmwgZG9lcyB0aGlzIGZvciB1cyAqLworI2VuZGlmIC8qIFBB UlNFTlNFICovCisKKyAgICBycGFja2V0cysrOwkJCQkvKiBDb3VudCByZWNlaXZlZCBwYWNrZXQu ICovCisgICAgbHAgPSBpOwkJCQkvKiBSZW1lbWJlciBMRU4gcG9zaXRpb24uICovCisgICAgaWYg KChqID0geHVuY2hhcihyZWNwa3RbaSsrXSkpID09IDApIHsgLyogR2V0IHBhY2tldCBsZW5ndGgu ICAqLworICAgICAgICBpZiAoKGogPSBscCs1KSA+IE1BWFJQKSB7CS8qIExvbmcgcGFja2V0ICov CisJICAgIHJldHVybignUScpOwkJLyogVG9vIGxvbmcgKi8KKwl9CisKKyNpZmRlZiBDS1RVTklO RworCS8qIFNhdmUgc29tZSBmdW5jdGlvbi1jYWxsIGFuZCBsb29wIG92ZXJoZWFkLi4uICovCisj aWZkZWYgQ09NTUVOVAorCS8qIHR0aW5sKCkgYWxyZWFkeSByZW1vdmVkIHBhcml0eSAqLworCWlm IChwYXJpdHkpCisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAgY2hrID0gKHVuc2lnbmVkKSAoKHVu c2lnbmVkKSByZWNwa3RbaS0xXSArCisJCQkgICAgKHVuc2lnbmVkKSByZWNwa3RbaV0gICArCisJ CQkgICAgKHVuc2lnbmVkKSByZWNwa3RbaSsxXSArCisJCQkgICAgKHVuc2lnbmVkKSByZWNwa3Rb aSsyXSArCisJCQkgICAgKHVuc2lnbmVkKSByZWNwa3RbaSszXQorCQkJICAgICk7CisjaWZkZWYg Q09NTUVOVAorCWVsc2UKKwkgIGNoayA9ICh1bnNpZ25lZCkgKCh1bnNpZ25lZCkgKHJlY3BrdFtp LTFdICYgMDc3KSArCisJCQkgICAgKHVuc2lnbmVkKSAocmVjcGt0W2ldICAgJiAwNzcpICsKKwkJ CSAgICAodW5zaWduZWQpIChyZWNwa3RbaSsxXSAmIDA3NykgKworCQkJICAgICh1bnNpZ25lZCkg KHJlY3BrdFtpKzJdICYgMDc3KSArCisJCQkgICAgKHVuc2lnbmVkKSAocmVjcGt0W2krM10gJiAw NzcpCisJCQkgICAgKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJaWYgKHh1bmNoYXIocmVjcGt0 W2pdKSAhPSAoKCgoY2hrICYgMDMwMCkgPj4gNikgKyBjaGspICYgMDc3KSkKKyNlbHNlCisJeCA9 IHJlY3BrdFtqXTsJCQkvKiBIZWFkZXIgY2hlY2tzdW0uICovCisJcmVjcGt0W2pdID0gJ1wwJzsJ CS8qIENhbGN1bGF0ZSAmIGNvbXBhcmUuICovCisJaWYgKHh1bmNoYXIoeCkgIT0gY2hrMShyZWNw a3QrbHAsNSkpCisjZW5kaWYgLyogQ0tUVU5JTkcgKi8KKwkgIHsKKwkgICAgICBmcmVlcmJ1Zihr KTsKKwkgICAgICBsb2dwa3QoJ3InLC0xLChDSEFSICopIjxjcnVuY2hlZDpoZHI+IiwwKTsKKwkg ICAgICB4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiQmFkIHBhY2tldCBoZWFkZXIi KTsKKwkgICAgICByZXR1cm4oJ1EnKTsKKwkgIH0KKyNpZm5kZWYgQ0tUVU5JTkcKKwlyZWNwa3Rb al0gPSB4OwkJCS8qIENoZWNrc3VtIG9rLCBwdXQgaXQgYmFjay4gKi8KKyNlbmRpZiAvKiBDS1RV TklORyAqLworCXJsbiA9IHh1bmNoYXIocmVjcGt0W2otMl0pICogOTUgKyB4dW5jaGFyKHJlY3Br dFtqLTFdKSAtIGJjdGw7CisJaiA9IDM7CQkJCS8qIERhdGEgb2Zmc2V0LiAqLworICAgIH0gZWxz ZSBpZiAoaiA8IDMpIHsKKwlkZWJ1ZyhGMTAxLCJycGFjayBwYWNrZXQgbGVuZ3RoIGxlc3MgdGhh biAzIiwiIixqKTsKKwlmcmVlcmJ1ZihrKTsKKwlsb2dwa3QoJ3InLC0xLChDSEFSICopIjxjcnVu Y2hlZDpsZW4+IiwwKTsKKwl4eHNjcmVlbihTQ1JfUFQsJyUnLChsb25nKXBrdG51bSwiQmFkIHBh Y2tldCBsZW5ndGgiKTsKKwlyZXR1cm4oJ1EnKTsKKyAgICB9IGVsc2UgeworCXJsbiA9IGogLSBi Y3RsIC0gMjsJCS8qIFJlZ3VsYXIgcGFja2V0ICovCisJaiA9IDA7CQkJCS8qIE5vIGV4dGVuZGVk IGhlYWRlciAqLworICAgIH0KKyAgICByc24gPSB4dW5jaGFyKHJlY3BrdFtpKytdKTsJCS8qIFNl cXVlbmNlIG51bWJlciAqLworICAgIGlmIChwa3Rsb2cpCQkJCS8qIFNhdmUgYSBmdW5jdGlvbiBj YWxsISAqLworICAgICAgbG9ncGt0KCdyJyxyc24sc29ocCxybG4rYmN0bCtqKzQpOworICAgIGlm IChyc24gPCAwIHx8IHJzbiA+IDYzKSB7CisJZGVidWcoRjEwMSwicnBhY2sgYmFkIHNlcXVlbmNl IG51bWJlciIsIiIscnNuKTsKKwlmcmVlcmJ1ZihrKTsKKwlpZiAocGt0bG9nKQorCSAgbG9ncGt0 KCdyJyxyc24sKENIQVIgKikiPGNydW5jaGVkOnNlcT4iLDApOworCXh4c2NyZWVuKFNDUl9QVCwn JScsKGxvbmcpcGt0bnVtLCJCYWQgc2VxdWVuY2UgbnVtYmVyIik7CisJcmV0dXJuKCdRJyk7Cisg ICAgfQorLyoKKyAgSWYgdGhpcyBwYWNrZXQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHBhY2tl dCBqdXN0IHNlbnQsIGFzc3VtZSBpdCBpcworICBhbiBlY2hvIGFuZCBpZ25vcmUgaXQuICBEb24n dCBldmVuIGJvdGhlciB3aXRoIHRoZSBibG9jayBjaGVjayBjYWxjdWxhdGlvbjoKKyAgZXZlbiBp ZiB0aGUgcGFja2V0IGlzIGNvcnJ1cHRlZCwgd2UgZG9uJ3Qgd2FudCB0byBOQUsgYW4gZWNob2Vk IHBhY2tldC4KKyAgTm9yIG11c3Qgd2UgTkFLIGFuIEFDSyBvciBOQUsuCisqLworICAgIHR5cGUg PSByZWNwa3RbaSsrXTsJCQkvKiBHZXQgcGFja2V0J3MgVFlQRSBmaWVsZCAqLworICAgIGlmICh0 eXBlID09IHNuZHR5cCB8fCAobmFrc3RhdGUgJiYgKHR5cGUgPT0gJ04nIC8qIHx8IHR5cGUgPT0g J1knICovICkpKSB7CisJZGVidWcoRjAwMCwicnBhY2sgZWNobyIsIiIsdHlwZSk7IC8qIElmIGl0 J3MgYW4gZWNobyAqLworCWZyZWVyYnVmKGspOwkJCS8qIEZyZWUgdGhpcyBidWZmZXIgKi8KKwls b2dwa3QoJyMnLHJzbiwoQ0hBUiAqKSI8ZWNobzppZ25vcmVkPiIsMCk7CisJcmV0dXJuKCdlJyk7 CQkJLyogUmV0dXJuIHNwZWNpYWwgKGxvd2VyY2FzZSkgY29kZSAqLworICAgIH0KKy8qCisgIFNl cGFyYXRlIHRoZSBkYXRhIGZyb20gdGhlIGJsb2NrIGNoZWNrLCBhY2NvdW50aW5nIGZvciB0aGUg Y2FzZSB3aGVyZQorICBhIHBhY2tldCB3YXMgcmV0cmFuc21pdHRlZCBhZnRlciB0aGUgYmxvY2sg Y2hlY2sgc3dpdGNoZWQuICBUaGUgIlR5cGUgMworICBGb3JjZWQiIGJ1c2luZXNzIGlzIG5ldyB0 byBDLUtlcm1pdCA5LjAuCisqLworICAgIGlmIChiY3RmKSB7IAkJCS8qIFR5cGUgMyBmb3JjZWQg b24gYWxsIHBhY2tldHMgKi8KKwliY3RsID0gY2hrbGVuID0gMzsKKyAgICB9IGVsc2UgaWYgKCh0 eXBlID09ICdJJyB8fCB0eXBlID09ICdTJykpIHsgLyogT3RoZXJ3aXNlLi4uICovCisJaWYgKHJl Y3BrdFsxMV0gPT0gJzUnKSB7CS8qIFNlbmRlciBpcyBmb3JjaW5nIFR5cGUgMyAqLworCSAgICBi Y3RmID0gMTsJCQkvKiBTbyB3ZSB3aWxsIHRvbyAqLworCSAgICBiY3RsID0gY2hrbGVuID0gMzsK KwkgICAgZGVidWcoRjEwMCwiUkVDT0dOSVpFIEJMT0NLIENIRUNLIFRZUEUgNSIsIiIsMCk7CisJ fSBlbHNlIHsJCQkvKiBOb3JtYWwgY2FzZSAqLworCSAgICAvKiBJICYgUyBwYWNrZXRzIGFsd2F5 cyBoYXZlIHR5cGUgMSAqLworCSAgICBjaGtsZW4gPSAxOworCSAgICBybG4gPSBybG4gKyBiY3Rs IC0gMTsKKwl9CisgICAgfSBlbHNlIGlmICh0eXBlID09ICdOJykgewkJLyogQSBOQUsgcGFja2V0 IG5ldmVyIGhhcyBkYXRhICovCisJY2hrbGVuID0geHVuY2hhcihyZWNwa3RbbHBdKSAtIDI7CisJ aWYgKGNoa2xlbiA8IDEgfHwgY2hrbGVuID4gMykgewkvKiBKSEQgMTMgQXByIDIwMTAgKi8KKwkg ICAgZGVidWcoRjEwMSwicnBhY2sgYmFkIG5hayBjaGtsZW4iLCIiLGNoa2xlbik7CisJICAgIGZy ZWVyYnVmKGspOworCSAgICBsb2dwa3QoJ3InLC0xLChDSEFSICopIjxjcnVuY2hlZDpjaGtsZW4+ IiwwKTsKKwkgICAgeHhzY3JlZW4oU0NSX1BULCclJywobG9uZylwa3RudW0sIihiYWQgbmFrKSIp OworCSAgICByZXR1cm4oJ1EnKTsKKwl9CisJcmxuID0gcmxuICsgYmN0bCAtIGNoa2xlbjsKKyAg ICB9IGVsc2UgY2hrbGVuID0gYmN0bDsKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsJ CQkvKiBTYXZlIDIgZnVuY3Rpb24gY2FsbHMgKi8KKwlkZWJ1ZyhGMTAxLCJycGFjayBiY3RsIiwi IixiY3RsKTsKKwlkZWJ1ZyhGMTAxLCJycGFjayBjaGtsZW4iLCIiLGNoa2xlbik7CisgICAgfQor I2VuZGlmIC8qIERFQlVHICovCisgICAgaSArPSBqOwkJCQkvKiBCdWZmZXIgaW5kZXggb2YgREFU QSBmaWVsZCAqLworICAgIHJkYXRhcCA9IHJlY3BrdCtpOwkJCS8qIFBvaW50ZXIgdG8gREFUQSBm aWVsZCAqLworICAgIGlmICgoaiA9IHJsbiArIGkpID4gcl9wa3Rba10uYmZfbGVuKSB7IC8qIE1h a2Ugc3VyZSBpdCBmaXRzICovCisJZGVidWcoRjEwMSwicGFja2V0IHRvbyBsb25nIiwiIixqKTsK KwlmcmVlcmJ1ZihrKTsKKwlsb2dwa3QoJ3InLHJzbiwoQ0hBUiAqKSI8b3ZlcmZsb3c+IiwwKTsK KwlyZXR1cm4oJ1EnKTsKKyAgICB9CisgICAgZm9yICh4ID0gMDsgeCA8IGNoa2xlbjsgeCsrKQkv KiBDb3B5IHRoZSBibG9jayBjaGVjayAqLworICAgICAgcGJjW3hdID0gcmVjcGt0W2oreF07CQkv KiAzIGJ5dGVzIGF0IG1vc3QuICovCisgICAgcGJjW3hdID0gJ1wwJzsJCQkvKiBOdWxsLXRlcm1p bmF0ZSBibG9jayBjaGVjayBzdHJpbmcgKi8KKyAgICByZWNwa3Rbal0gPSAnXDAnOwkJCS8qIGFu ZCB0aGUgcGFja2V0IERhdGEgZmllbGQuICovCisKKyAgICBpZiAoY2hrbGVuID09IDIgJiYgYmN0 dSA9PSA0KSB7CS8qIEFkanVzdCBmb3IgQmxhbmstRnJlZS0yICovCisJY2hrbGVuID0gNDsJCQkv KiAoY2hrbGVuIGlzIG5vdyBhIG1pc25vbWVyLi4uKSAqLworCWRlYnVnKEYxMDAsInJwYWNrIGJs b2NrIGNoZWNrIEIiLCIiLDApOworICAgIH0KKyAgICBzd2l0Y2ggKGNoa2xlbikgewkJCS8qIENo ZWNrIHRoZSBibG9jayBjaGVjayAqLworICAgICAgY2FzZSAxOgkJCQkvKiBUeXBlIDEsIDYtYml0 IGNoZWNrc3VtICovCisJaWYgKHh1bmNoYXIoKnBiYykgIT0gY2hrMShyZWNwa3QrbHAsai1scCkp IHsKKyNpZmRlZiBERUJVRworCSAgICBpZiAoZGVibG9nKSB7CisJCWRlYnVnKEYxMTAsImNoZWNr ZWQgY2hhcnMiLHJlY3BrdCtscCwwKTsKKwkJZGVidWcoRjEwMSwiYmxvY2sgY2hlY2sgKDEpIiwi IiwoaW50KSB4dW5jaGFyKCpwYmMpKTsKKwkJZGVidWcoRjEwMSwic2hvdWxkIGJlICgxKSIsIiIs Y2hrMShyZWNwa3QrbHAsai1scCkpOworCSAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwkgICAg ZnJlZXJidWYoayk7CisJICAgIGxvZ3BrdCgncicsLTEsKENIQVIgKikiPGNydW5jaGVkOmNoazE+ IiwwKTsKKwkgICAgeHhzY3JlZW4oU0NSX1BULCclJywobG9uZylwa3RudW0sIkNoZWNrc3VtIGVy cm9yIik7CisJICAgIHJldHVybignUScpOworCX0KKwlicmVhazsKKyAgICAgIGNhc2UgMjoJCQkJ LyogVHlwZSAyLCAxMi1iaXQgY2hlY2tzdW0gKi8KKwl4ID0geHVuY2hhcigqcGJjKSA8PCA2IHwg eHVuY2hhcihwYmNbMV0pOworCWlmICh4ICE9IGNoazIocmVjcGt0K2xwLGotbHApKSB7IC8qIE5v IG1hdGNoICovCisJICAgIGlmICh0eXBlID09ICdFJykgewkJLyogQWxsb3cgRSBwYWNrZXRzIHRv IGhhdmUgdHlwZSAxICovCisJCXJlY3BrdFtqKytdID0gcGJjWzBdOworCQlyZWNwa3Rbal0gPSAn XDAnOworCQlpZiAoeHVuY2hhcihwYmNbMV0pID09IGNoazEocmVjcGt0K2xwLGotbHApKQorCQkg IGJyZWFrOworCQllbHNlCisJCSAgcmVjcGt0Wy0tal0gPSAnXDAnOworCSAgICB9CisjaWZkZWYg REVCVUcKKwkgICAgaWYgKGRlYmxvZykgeworCQlkZWJ1ZyhGMTEwLCJjaGVja2VkIGNoYXJzIixy ZWNwa3QrbHAsMCk7CisJCWRlYnVnKEYxMDEsImJsb2NrIGNoZWNrICgyKSIsIiIsIHgpOworCQlk ZWJ1ZyhGMTAxLCJzaG91bGQgYmUgKDIpIiwiIiwgKGludCkgY2hrMihyZWNwa3QrbHAsai1scCkp OworCSAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwkgICAgZnJlZXJidWYoayk7CisJICAgIGxv Z3BrdCgncicsLTEsKENIQVIgKikiPGNydW5jaGVkOmNoazI+IiwwKTsKKwkgICAgeHhzY3JlZW4o U0NSX1BULCclJywobG9uZylwa3RudW0sIkNoZWNrc3VtIGVycm9yIik7CisJICAgIHJldHVybign UScpOworCX0KKwlicmVhazsKKyAgICAgIGNhc2UgMzoJCQkJLyogVHlwZSAzLCAxNi1iaXQgQ1JD ICovCisJY3JjID0gKHh1bmNoYXIocGJjWzBdKSA8PCAxMikKKwkgICAgfCAoeHVuY2hhcihwYmNb MV0pIDw8IDYpCisJICAgIHwgKHh1bmNoYXIocGJjWzJdKSk7CisJaWYgKGNyYyAhPSBjaGszKHJl Y3BrdCtscCxqLWxwKSkgeworCSAgICBpZiAodHlwZSA9PSAnRScpIHsJCS8qIEFsbG93IEUgcGFj a2V0cyB0byBoYXZlIHR5cGUgMSAqLworCQlyZWNwa3RbaisrXSA9IHBiY1swXTsKKwkJcmVjcGt0 W2orK10gPSBwYmNbMV07CisJCXJlY3BrdFtqXSA9ICdcMCc7CisJCWlmICh4dW5jaGFyKHBiY1sy XSkgPT0gY2hrMShyZWNwa3QrbHAsai1scCkpCisJCSAgYnJlYWs7CisJCWVsc2UgeyBqIC09Mjsg cmVjcGt0W2pdID0gJ1wwJzsgfQorCSAgICB9CisjaWZkZWYgREVCVUcKKwkgICAgaWYgKGRlYmxv ZykgeworCQlkZWJ1ZyhGMTEwLCJjaGVja2VkIGNoYXJzIixyZWNwa3QrbHAsMCk7CisJCWRlYnVn KEYxMDEsImJsb2NrIGNoZWNrICgzKSIsIiIsY3JjKTsKKwkJZGVidWcoRjEwMSwic2hvdWxkIGJl ICgzKSIsIiIsKGludCkgY2hrMyhyZWNwa3QrbHAsai1scCkpOworCSAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKwkgICAgZnJlZXJidWYoayk7CisJICAgIGxvZ3BrdCgncicsLTEsKENIQVIgKiki PGNydW5jaGVkOmNoazM+IiwwKTsKKwkgICAgeHhzY3JlZW4oU0NSX1BULCclJywobG9uZylwa3Ru dW0sIkNSQyBlcnJvciIpOworCSAgICByZXR1cm4oJ1EnKTsKKwl9CisJYnJlYWs7CisgICAgICBj YXNlIDQ6CQkJCS8qIFR5cGUgNCA9IFR5cGUgMiwgbm8gYmxhbmtzLiAqLworCXggPSAodW5zaWdu ZWQpKCh4dW5jaGFyKCpwYmMpIC0gMSkgPDwgNikgfAorCSAgKHVuc2lnbmVkKSh4dW5jaGFyKHBi Y1sxXSkgLSAxKTsKKwlpZiAoeCAhPSBjaGsyKHJlY3BrdCtscCxqLWxwKSkgeworCSAgICBpZiAo dHlwZSA9PSAnRScpIHsJLyogQWxsb3cgRSBwYWNrZXRzIHRvIGhhdmUgdHlwZSAxICovCisJCXJl Y3BrdFtqKytdID0gcGJjWzBdOworCQlyZWNwa3Rbal0gPSAnXDAnOworCQlpZiAoeHVuY2hhcihw YmNbMV0pID09IGNoazEocmVjcGt0K2xwLGotbHApKQorCQkgIGJyZWFrOworCQllbHNlCisJCSAg cmVjcGt0Wy0tal0gPSAnXDAnOworCSAgICB9CisJICAgIGRlYnVnKEYxMDEsImJhZCB0eXBlIEIg YmxvY2sgY2hlY2siLCIiLHgpOworCSAgICBmcmVlcmJ1ZihrKTsKKwkgICAgbG9ncGt0KCdyJywt MSwoQ0hBUiAqKSI8Y3J1bmNoZWQ6Y2hrYj4iLDApOworCSAgICB4eHNjcmVlbihTQ1JfUFQsJyUn LChsb25nKXBrdG51bSwiQ2hlY2tzdW0gZXJyb3IiKTsKKwkgICAgcmV0dXJuKCdRJyk7CisJfQor CWJyZWFrOworICAgICAgZGVmYXVsdDoJCQkvKiBTaG91bGRuJ3QgaGFwcGVuLi4uICovCisJZnJl ZXJidWYoayk7CisJbG9ncGt0KCdyJywtMSwoQ0hBUiAqKSI8Y3J1bmNoZWQ6Y2hreD4iLDApOwor CXh4c2NyZWVuKFNDUl9QVCwnJScsKGxvbmcpcGt0bnVtLCIoY3J1bmNoZWQpIik7CisJcmV0dXJu KCdRJyk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInJwYWNrIGJsb2NrIGNoZWNrIE9LIiwiIixy c24pOworCisvKiBOb3cgd2UgY2FuIGJlbGlldmUgdGhlIHNlcXVlbmNlIG51bWJlciwgYW5kIG90 aGVyIGZpZWxkcy4gKi8KKy8qIEhlcmUgd2UgdmlvbGF0ZSBzdHJpY3QgcHJpbmNpcGxlcyBvZiBs YXllcmluZywgZXRjLCBhbmQgbG9vayBhdCB0aGUgICovCisvKiBwYWNrZXQgc2VxdWVuY2UgbnVt YmVyLiAgSWYgdGhlcmUncyBhbHJlYWR5IGEgcGFja2V0IHdpdGggdGhlIHNhbWUgICAqLworLyog bnVtYmVyIGluIHRoZSB3aW5kb3csIHdlIHJlbW92ZSB0aGlzIG9uZSBzbyB0aGF0IHRoZSB3aW5k b3cgd2lsbCBub3QgKi8KKy8qIGZpbGwgdXAuICovCisKKyAgICBpZiAoKHggPSByc2VxdGJsW3Jz bl0pICE9IC0xKSB7CS8qIEFscmVhZHkgYSBwYWNrZXQgd2l0aCB0aGlzIG51bWJlciAqLworCXJl dHJhbnMrKzsJCQkvKiBDb3VudCBpdCBmb3Igc3RhdGlzdGljcyAqLworCWRlYnVnKEYxMDEsInJw YWNrIGdvdCBkdXAiLCIiLHJzbik7CisJbG9ncGt0KCdyJyxyc24sKENIQVIgKikiPGR1cGxpY2F0 ZT4iLDApOworCWZyZWVyYnVmKHgpOwkJCS8qIEZyZWUgb2xkIGJ1ZmZlciwga2VlcCBuZXcgcGFj a2V0LiAqLworCXJfcGt0W2tdLnBrX3J0cisrOwkJLyogQ291bnQgdGhpcyBhcyBhIHJldHJhbnNt aXNzaW9uLiAqLworICAgIH0KKworLyogTmV3IHBhY2tldCwgbm90IHNlZW4gYmVmb3JlLCBlbnRl ciBpdCBpbnRvIHRoZSByZWNlaXZlIHdpbmRvdy4gKi8KKworI2lmZGVmIENLX1RJTUVSUworICAg IGlmICh0aW1pbnQgPiAwKQorICAgICAgcnJ0dGJsW3Jzbl0gPSBndGltZXIoKTsJCS8qIFRpbWVz dGFtcCAqLworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCisgICAgcnNlcXRibFtyc25dID0gazsJ CQkvKiBNYWtlIGJhY2sgcG9pbnRlciAqLworICAgIHJfcGt0W2tdLnBrX3NlcSA9IHJzbjsJCS8q IFJlY29yZCBpbiBwYWNrZXQgaW5mbyBzdHJ1Y3R1cmUgKi8KKyAgICByX3BrdFtrXS5wa190eXAg PSB0eXBlOwkJLyogU2VxdWVuY2UsIHR5cGUsLi4uICovCisgICAgcl9wa3Rba10ucGtfYWRyID0g cmRhdGFwOwkJLyogcG9pbnRlciB0byBkYXRhIGJ1ZmZlciAqLworICAgIGlmIChsb2NhbCkgewkJ CS8qIFNhdmUgYSBmdW5jdGlvbiBjYWxsISAqLworCWludCB4ID0gMDsKKwlpZiAoZmRpc3BsYSAh PSBYWUZEX04pIHggPSAxOworCWlmIChmZGlzcGxhID09IFhZRkRfQiAmJiAodHlwZSA9PSAnRCcg fHwgc25kdHlwID09ICdEJykpIHggPSAwOworCWlmICh4KQkJCQkvKiBVcGRhdGUgc2NyZWVuICov CisJICB4eHNjcmVlbihTQ1JfUFQsKGNoYXIpdHlwZSwobG9uZylyc24sKGNoYXIgKilzb2hwKTsK KyAgICB9CisgICAgcmV0dXJuKHR5cGUpOwkJCS8qIFJldHVybiBwYWNrZXQgdHlwZSAqLworfQor CisvKiAgTCBPIEcgUCBLIFQgIC0tICBMb2cgcGFja2V0IG51bWJlciBuLCBwb2ludGVkIHRvIGJ5 IHMuICAqLworCisvKiBjID0gJ3MnIChzZW5kKSBvciAncicgKHJlY2VpdmUpICovCisKK1ZPSUQK KyNpZmRlZiBDS19BTlNJQworbG9ncGt0KGNoYXIgYyxpbnQgbiwgQ0hBUiAqcywgaW50IGxlbikK KyNlbHNlCitsb2dwa3QoYyxuLHMsbGVuKSBjaGFyIGM7IGludCBuOyBDSEFSICpzOyBpbnQgbGVu OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBsb2dwa3QgKi8geworICAgIGNoYXIgcGxvZ1sy MF07CisgICAgaWYgKCFzKSBzID0gKENIQVIgKikiIjsKKyAgICBpZiAocGt0bG9nKSBpZiAoY2hr Zm4oWlBGSUxFKSA+IDApIHsKKwlpZiAobiA8IDApCQkJLyogQ29uc3RydWN0IGVudHJ5IGhlYWRl ciAqLworCSAgc3ByaW50ZihwbG9nLCIlYy14eC0lMDJkLSIsYywoZ3RpbWVyKCklNjApKTsgLyog c2FmZSAqLworCWVsc2UKKwkgIHNwcmludGYocGxvZywiJWMtJTAyZC0lMDJkLSIsYyxuLChndGlt ZXIoKSU2MCkpOyAvKiBzYWZlICovCisJaWYgKHpzb3V0eChaUEZJTEUscGxvZywoaW50KXN0cmxl bihwbG9nKSkgPCAwKSB7CisJICAgIHBrdGxvZyA9IDA7CisJICAgIHJldHVybjsKKwl9IGVsc2Ug eworCSAgICBpZiAobGVuID09IDApCisJICAgICAgbGVuID0gc3RybGVuKChjaGFyICopcyk7CisJ ICAgIGlmIChsZW4gPiAwKSB7CisJCWNoYXIgKiBwOwkJLyogTWFrZSBTT1AgcHJpbnRhYmxlICov CisJCWludCB4OwkJCS8qIHNvIHdlIGNhbiBsb29rIGF0IGxvZ3Mgd2l0aG91dCAqLworCQlwID0g ZGJjaHIoKnMpOwkJLyogdHJpZ2dlcmluZyBhdXRvZG93bmxvYWQuICovCisJCXggPSBzdHJsZW4o ZGJjaHIoKnMpKTsKKwkJaWYgKCpzIDwgMzIgfHwgKCpzID4gMTI3ICYmICpzIDwgMTYwKSkgewor CQkgICAgaWYgKHpzb3V0eChaUEZJTEUscCx4KSA8IDApIHsKKwkJCXBrdGxvZyA9IDA7CisJCQly ZXR1cm47CisJCSAgICB9IGVsc2UgeworCQkJbGVuLS07CisJCQlzKys7CisJCSAgICB9CisJCX0K KwkgICAgfQorCSAgICBpZiAoenNvdXR4KFpQRklMRSwoY2hhciAqKXMsbGVuKSA8IDApIHsKKwkJ cGt0bG9nID0gMDsKKwkJcmV0dXJuOworCSAgICB9IGVsc2UgaWYgKHpzb3V0eChaUEZJTEUsCisj aWZkZWYgVU5JWAorCQkJICAgICAgIlxuIiwgMQorI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAor CQkJICAgICAgIlxuIiwgMQorI2Vsc2UKKyNpZmRlZiBPU0sKKwkJCSAgICAgICJcciIsIDEKKyNl bHNlCisjaWZkZWYgTUFDCisJCQkgICAgICAiXHIiLCAxCisjZWxzZQorCQkJICAgICAgIlwwMTVc MDEyIiwgMgorI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCisjZW5kaWYgLyogVU5JWCAqLworCQkJICAgICAgKSA8IDApIHsKKwkJcGt0 bG9nID0gMDsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qICBUIFMgVCBBIFQgUyAgLS0gIFJl Y29yZCBzdGF0aXN0aWNzIGluIHRyYW5zYWN0aW9uIGxvZyAgKi8KKworVk9JRAordHN0YXRzKCkg eworICAgIGNoYXIgKnRwID0gTlVMTDsKKyNpZmRlZiBHRlRJTUVSCisgICAgQ0tGTE9BVCB4eDsJ CQkJLyogRWxhcHNlZCB0aW1lIGRpdmlzb3IgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAg ICBkZWJ1ZyhGMTAxLCJ0c3RhdHMgeGZzZWNzIiwiIix4ZnNlY3MpOworICAgIGRlYnVnKEYxMDEs InRzdGF0cyBmaWxjbnQiLCIiLGZpbGNudCk7CisgICAgaWYgKGZpbGNudCA9PSAxKSB7CQkJLyog R2V0IHRpbWluZyBmb3Igc3RhdGlzdGljcyAqLworCXRzZWNzID0geGZzZWNzOwkJCS8qIFNpbmds ZSBmaWxlLCB3ZSBhbHJlYWR5IGhhdmUgaXQgKi8KKyNpZmRlZiBHRlRJTUVSCisJZGVidWcoRjEw MSwidHN0YXRzIGZweGZzZWNzIiwiIiwoaW50KWZweGZzZWNzKTsKKwlmcHRzZWNzID0gZnB4ZnNl Y3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIH0gZWxzZSB7CQkJCS8qIE11bHRpcGxlIGZp bGVzICovCisJdHNlY3MgPSBndGltZXIoKTsJCS8qIEdldCBjdXJyZW50IHRpbWUgKi8KKyNpZmRl ZiBHRlRJTUVSCisJZnB0c2VjcyA9IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisg ICAgfQorI2lmZGVmIEdGVElNRVIKKyAgICBpZiAoZnB0c2VjcyA8PSBHRk1JTlRJTUUpCQkvKiBD YWxjdWxhdGUgQ1BTICovCisgICAgICBmcHRzZWNzID0gKENLRkxPQVQpIEdGTUlOVElNRTsKKyAg ICBkZWJ1ZyhGMTAxLCJ0c3RhdHMgZnB0c2VjcyIsIiIsKGludClmcHRzZWNzKTsKKyAgICB4eCA9 IChDS0ZMT0FUKSB0ZmMgLyBmcHRzZWNzOworICAgIGlmIChzaXplb2YobG9uZykgPD0gNCkgewkJ LyogZG9lc24ndCBhY2NvdW50IGZvciAxNi1iaXQgbG9uZ3MgKi8KKwlpZiAoeHggID4gMjE0NzQ4 MzY0Ny4wKQorCSAgdGZjcHMgPSAyMTQ3NDgzNjQ3TDsJICAgICAgICAvKiAzMSBiaXRzICovCisJ ZWxzZQorCSAgdGZjcHMgPSAobG9uZykgeHg7CisgICAgfSBlbHNlCisgICAgICB0ZmNwcyA9IChs b25nKSB4eDsKKyNlbHNlCisgICAgaWYgKHRzZWNzIDwgMkwpCisgICAgICB0c2VjcyA9IDFMOwor ICAgIGRlYnVnKEYxMDEsInRzdGF0cyB0c2VjcyIsIiIsdHNlY3MpOworICAgIHRmY3BzID0gdGZj IC8gdHNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgICAgenRpbWUoJnRwKTsJCQkJLyog R2V0IHRpbWUgc3RhbXAgKi8KKyAgICB0bG9nKEYxMDAsIiIsIiIsMEwpOwkJLyogTGVhdmUgYSBi bGFuayBsaW5lICovCisgICAgdGxvZyhGMTEwLCJUcmFuc2FjdGlvbiBjb21wbGV0ZSIsdHAsMEwp OyAgLyogUmVjb3JkIGl0ICovCisKKyAgICBpZiAoZmlsY250IDwgMSkgcmV0dXJuOwkJLyogSWYg bm8gZmlsZXMsIGRvbmUuICovCisKKy8qIElmIG11bHRpcGxlIGZpbGVzLCByZWNvcmQgY2hhcmFj dGVyIHRvdGFscyBmb3IgYWxsIGZpbGVzICovCisKKyAgICBpZiAoZmlsY250ID4gMSkgeworCXRs b2coRjEwMSwiIGZpbGVzIHRyYW5zZmVycmVkICAgICAgICIsIiIsZmlsY250IC0gZmlscmVqKTsK Kwl0bG9nKEYxMDEsIiB0b3RhbCBmaWxlIGNoYXJhY3RlcnMgICAiLCIiLHRmYyk7CisJdGxvZyhG MTAxLCIgY29tbXVuaWNhdGlvbiBsaW5lIGluICAgIiwiIix0bGNpKTsKKwl0bG9nKEYxMDEsIiBj b21tdW5pY2F0aW9uIGxpbmUgb3V0ICAiLCIiLHRsY28pOworICAgIH0KKworLyogUmVjb3JkIHRp bWluZyBpbmZvIGZvciBvbmUgb3IgbW9yZSBmaWxlcyAqLworCisjaWZkZWYgR0ZUSU1FUgorICAg IGlmIChmaWxjbnQgLSBmaWxyZWogPT0gMSkgeworCXRsb2coRjEwMSwiIGVsYXBzZWQgdGltZSAo c2Vjb25kcykgICIsIiIsKGxvbmcpIGZweGZzZWNzKTsKKwl0bG9nKEYxMDEsIiBlZmZlY3RpdmUg ZGF0YSByYXRlICAgICAiLCIiLGZpbGNwcyk7CisgICAgfSBlbHNlIHsKKwl0bG9nKEYxMDEsIiBl bGFwc2VkIHRpbWUgKHNlY29uZHMpICAiLCIiLChsb25nKSBmcHRzZWNzKTsKKwl0bG9nKEYxMDEs IiBlZmZlY3RpdmUgZGF0YSByYXRlICAgICAiLCIiLChsb25nKSB4eCk7CisgICAgfQorI2Vsc2UK KyAgICB0bG9nKEYxMDEsIiBlbGFwc2VkIHRpbWUgKHNlY29uZHMpICAiLCIiLHRzZWNzKTsKKyAg ICBpZiAodHNlY3MgPiAwKQorICAgICAgdGxvZyhGMTAxLCIgZWZmZWN0aXZlIGRhdGEgcmF0ZSAg ICAgIiwiIiwodGZjIC8gdHNlY3MpKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAgICB0bG9n KEYxMDAsIiIsIiIsMEwpOwkJLyogTGVhdmUgYSBibGFuayBsaW5lICovCit9CisKKy8qICBGIFMg VCBBIFQgUyAgLS0gIFJlY29yZCBmaWxlIHN0YXRpc3RpY3MgaW4gdHJhbnNhY3Rpb24gbG9nICAq LworCitWT0lECitmY3BzKCkgeworI2lmZGVmIEdGVElNRVIKKyAgICBkb3VibGUgeHg7CisgICAg ZnB4ZnNlY3MgPSBnZnRpbWVyKCkgLSBmcGZzZWNzOworICAgIGlmIChmcHhmc2VjcyA8PSBHRk1J TlRJTUUpCisgICAgICBmcHhmc2VjcyA9IChDS0ZMT0FUKSBHRk1JTlRJTUU7CisgICAgeHggPSAo Q0tGTE9BVCkgZmZjIC8gZnB4ZnNlY3M7CisgICAgaWYgKHNpemVvZihsb25nKSA8PSA0KSB7CisJ aWYgKHh4ICA+IDIxNDc0ODM2NDcuMCkKKwkgIHRmY3BzID0gMjE0NzQ4MzY0N0w7CQkvKiAzMSBi aXRzICovCisJZWxzZQorCSAgZmlsY3BzID0gKGxvbmcpIHh4OworICAgIH0gZWxzZQorICAgICAg ZmlsY3BzID0gKGxvbmcpIHh4OworICAgIGlmIChzaXplb2YoaW50KSA+PSA0KQorICAgICAgeGZz ZWNzID0gKGludCkgZnB4ZnNlY3M7CisgICAgZWxzZSBpZiAoZnB4ZnNlY3MgPCAzMjc2OC4wKQor ICAgICAgeGZzZWNzID0gKGludCkgZnB4ZnNlY3M7CisgICAgZWxzZQorICAgICAgeGZzZWNzID0g MzI3Njc7CisjZWxzZSAvKiBHRlRJTUVSICovCisgICAgeGZzZWNzID0gZ3RpbWVyKCkgLSBmc2Vj czsKKyAgICBpZiAoeGZzZWNzIDwgMUwpIHhmc2VjcyA9IDFMOworICAgIGZpbGNwcyA9IGZmYyAv IHhmc2VjczsKKyNlbmRpZiAvKiBHRlRJTUVSICovCit9CisKK1ZPSUQKK2ZzdGF0cygpIHsKKyAg ICB0ZmMgKz0gZmZjOworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYx MDEsImZzdGF0cyB0ZmMiLCIiLHRmYyk7CisJZGVidWcoRjEwMSwiZnN0YXRzIHdoYXQiLCIiLHdo YXQpOworCWRlYnVnKEYxMTAsImZzdGF0cyBlcGt0bXNnIixlcGt0bXNnLDApOworICAgIH0KKyNl bmRpZiAvKiBERUJVRyAqLworI2lmZGVmIFRMT0cKKyAgICBpZiAoIWRpc2NhcmQgJiYgIWN4c2Vl biAmJiAhY3pzZWVuICYmIHdoYXQgIT0gV19OT1RISU5HICYmICEqZXBrdG1zZykKKyAgICAgIHRs b2coRjEwMSwiIGNvbXBsZXRlLCBzaXplIiwiIixmZmMpOworI2VuZGlmIC8qIFRMT0cgKi8KK30K KworI2VuZGlmIC8qIE5PWEZFUiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tjZm4zLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrY2ZuMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJk NThhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrY2ZuMy5jCkBAIC0wLDAgKzEsMjYwNiBAQAorLyogIEMgSyBDIEYgTiAzICAtLSAg UGFja2V0IGJ1ZmZlciBtYW5hZ2VtZW50IGZvciBDLUtlcm1pdCAgKi8KKworLyogKHBsdXMgYXNz b3J0ZWQgZnVuY3Rpb25zIHRhY2tlZCBvbiBhdCB0aGUgZW5kKSAqLworCisvKgorICBBdXRob3I6 IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5 IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJp Z2h0IChDKSAxOTg1LCAyMDEwLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkg aW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0 aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBp biB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyov CisvKgorIE5vdGUgLS0gaWYgeW91IGNoYW5nZSB0aGlzIGZpbGUsIHBsZWFzZSBhbWVuZCB0aGUg dmVyc2lvbiBudW1iZXIgYW5kIGRhdGUgYXQKKyB0aGUgdG9wIG9mIGNrY2Zucy5jIGFjY29yZGlu Z2x5LgorKi8KKworI2luY2x1ZGUgImNrY3N5bS5oIgorI2luY2x1ZGUgImNrY2RlYi5oIgorI2lu Y2x1ZGUgImNrY2FzYy5oIgorI2luY2x1ZGUgImNrY2tlci5oIgorI2luY2x1ZGUgImNrY3hsYS5o IgorCisvKiAgQyBLIE0gSyBEIEkgUiAgLS0gIENyZWF0ZSBhIGRpcmVjdG9yeSAgKi8KKy8qCisg IENhbGwgd2l0aDoKKyAgICBpbnQgZmMgICAgPSAwIHRvIGNyZWF0ZSwgbm9uemVybyB0byByZW1v dmUsIGEgZGlyZWN0b3J5LgorICAgIGNoYXIgKiBzICA9IHBvaW50ZXIgdG8gbmFtZSBvZiBkaXJl Y3RvcnkgdG8gY3JlYXRlIG9yIHJlbW92ZS4KKyAgICBjaGFyICoqIHIgPSBhZGRyZXNzIG9mIHBv aW50ZXIgdG8gcmV0dXJuIG5hbWUgb3IgbWVzc2FnZS4KKyAgICBpbnQgbSAgICAgPSAxIHRvIHBy aW50IGVycm9yIG1lc3NhZ2VzLCAwIHRvIGJlIHNpbGVudC4KKyAgICBpbnQgY3Z0ICAgPSAxIG1l YW5zIGNvbnZlcnQgcyBmcm9tIHN0YW5kYXJkIGZvcm1hdCB0byBsb2NhbCBmb3JtYXQ7CisgICAg ICAgICAgICAgICAgMCBtZWFucyB1c2UgcyBhcyBpcy4KKyAgUmV0dXJuczoKKyAgICAwIG9uIHN1 Y2Nlc3MgKGRpcmVjdG9yeSB3YXMgY3JlYXRlZCBvciByZW1vdmVkKS4KKyAgIC0xIHdoZW4gYXR0 ZW1wdCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSBmYWlsZWQuCisgICAtMiBvbiBpbnRlcm5hbCBl cnJvciAoZS5nLiBubyBjb2RlIGZvciBjcmVhdGluZyBkaXJlY3RvcmllcykuCisgIE9uIHN1Y2Nl c3MsIHRoZSBuYW1lIGlzIHBvaW50ZWQgdG8gYnkgcC4KKyAgT24gZmFpbHVyZSwgdGhlIHJlYXNv biBpcyBwb2ludGVkIHRvIGJ5IHAuCisqLworI2lmZGVmIENLX01LRElSCitzdGF0aWMgY2hhciBj a21rZGJ1ZltDS01BWFBBVEgrMV07CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCitzdGF0aWMg Y2hhciBja21rZGJ1ZltDS01BWFBBVEgrMV07CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNl bmRpZiAvKiBDS19NS0RJUiAqLworCisjaWZkZWYgQ0tfTUtESVIKK2ludAorY2tta2RpcihmYyxz LHIsbSxjdnQpIGludCBmYzsgY2hhciAqIHM7IGNoYXIgKiogcjsgaW50IG07IGludCBjdnQ7IHsK KyAgICBpbnQgeCwgcmMgPSAtMjsKKyAgICBjaGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07CisgICAg Y2hhciBidWYyW0NLTUFYUEFUSCsxXTsKKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBkZWJ1ZyhG MTEwLCJja21rZGlyIDEgZmMiLHMsZmMpOworICAgIGlmICghKnMpIHsKKwlja21ha21zZyhja21r ZGJ1ZiwKKwkJIENLTUFYUEFUSCsxLAorCQkgKGZjID09IDApID8gIm1rZGlyIiA6ICJybWRpciIs CisJCSAiOiBubyBuYW1lIGdpdmVuIiwKKwkJIE5VTEwsCisJCSBOVUxMCisJCSApOworCSpyID0g Y2tta2RidWY7CisJcmV0dXJuKC0yKTsKKyAgICB9CisjaWZkZWYgZGF0YWdlbmVyYWwKKy8qIENv bWUgYmFjayBhbmQgbWFrZSB0aGlzIG5pY2VyIGxhdGVyIGlmIGFueWJvZHkgbm90aWNlcyAqLwor ICAgIGlmIChmYyA9PSAwKSB7CQkJLyogbWtkaXIgKi8KKwlyYyA9IGNyZWF0ZWRpcihzLDApOwor ICAgIH0gZWxzZSB7CQkJCS8qIHJtZGlyICovCisJLyogQU9TL1ZTIHJtZGlyKCkgaXMgYSBuby1v cC4gKi8KKwlja21ha21zZyh0bXBidWYsQ0tNQVhQQVRIKzEsImRlbGV0ZSAiLHMsTlVMTCxOVUxM KTsKKwlkZWJ1ZyhGMTEwLCJja21rZGlyIDIiLHRtcGJ1ZiwwKTsKKwlyYyA9IHN5c3RlbSh0bXBi dWYpOworICAgIH0KKyAgICAqciA9IE5VTEw7CisjZWxzZSAvKiBub3QgZGF0YWdlbmVyYWwgKi8K KworLyogRmlyc3QgbWFrZSBzdXJlIHRoZSBuYW1lIGhhcyBhbiBhY2NlcHRhYmxlIGRpcmVjdG9y eS1uYW1lIGZvcm1hdCAqLworCisjaWZkZWYgVk1TCisgICAgeworCWNoYXIgKnAgPSBzOworCWlu dCBsYiA9IDAsIHJiID0gMCwgc2wgPSAwOworCXdoaWxlICgqcCkgeworCSAgICBpZiAgICAgICgq cCA9PSAnWycgfHwgKnAgPT0gJzwnKSBsYisrOyAgIC8qIENvdW50IGJyYWNrZXRzICovCisJICAg IGVsc2UgaWYgKCpwID09ICddJyB8fCAqcCA9PSAnPicpIHJiKys7CisJICAgIGVsc2UgaWYgKCpw ID09ICcvJykgCSAgICAgc2wrKzsJLyogYW5kIHNsYXNoZXMgKi8KKwkgICAgcCsrOworCX0KKwlp ZiAobGIgIT0gMSAmJiByYiAhPSAxICYmIHNsID09IDAgJiYgcCA+IHMgJiYgKihwLTEpICE9ICc6 JykgeworCSAgICAvKiBQcm9iYWJseSBqdXN0IGEgd29yZCAtIGNvbnZlcnQgdG8gVk1TIGZvcm1h dCAqLworCSAgICBja21ha21zZyhidWYyLAorCQkgICAgIENLTUFYUEFUSCsxLAorCQkgICAgICJb IiwKKwkJICAgICAoKnMgPT0gJy4nKSA/ICIiIDogIi4iLAorCQkgICAgIHMsCisJCSAgICAgIl0i CisJCSAgICAgKTsKKwkgICAgcyA9IGJ1ZjI7CisJfSBlbHNlIGlmIChsYiA9PSAwICYmIHJiID09 IDAgJiYgc2wgIT0gMCAmJiBwID4gcyAmJiAqKHAtMSkgIT0gJzonKSB7CisJICAgIGludCBmbGFn ID0gMDsKKwkgICAgLyogU2VlbXMgdG8gYmUgaW4gVU5JWCBmb3JtYXQgKi8KKwkgICAgeCA9IHN0 cmxlbihzKTsKKwkgICAgaWYgKHggPiAwICYmIHNbeC0xXSAhPSAnLycpCisJICAgICAgZmxhZyA9 IDE7CisJICAgIGNrbWFrbXNnKGJ1ZjIsQ0tNQVhQQVRIKzEscyxmbGFnID8gIi8iIDogIiIsTlVM TCxOVUxMKTsKKwkgICAgcyA9IGJ1ZjI7CisJfQorCWlmIChzID09IGJ1ZjIpIHsKKwkgICAgY2tz dHJuY3B5KHRtcGJ1ZixzLENLTUFYUEFUSCsxKTsKKwkgICAgcyA9IHRtcGJ1ZjsKKwl9CisJZGVi dWcoRjExMCwiY2tta2RpciAyK1ZNUyIscywwKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIFVOSVhP Uk9TSworI2lmZGVmIERUSUxERQorICAgIHMgPSB0aWxkZV9leHBhbmQocyk7CisjZW5kaWYgLyog RFRJTERFICovCisgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLENLTUFYUEFUSCsxKTsKKyAgICBzID0g dG1wYnVmOworICAgIHggPSBzdHJsZW4ocyk7CisgICAgaWYgKHggPiAwICYmIHNbeC0xXSAhPSAn LycpIHsJLyogTXVzdCBlbmQgaW4gIi8iIGZvciB6bWtkaXIoKSAqLworCXNbeF0gPSAnLyc7CisJ c1t4KzFdID0gTlVMOworCWRlYnVnKEYxMTAsImNrbWtkaXIgMitVTklYT1JPU0siLHMsMCk7Cisg ICAgfQorI2Vsc2UgLyogVU5JWE9ST1NLICovCisjaWZkZWYgT1MyCisgICAgY2tzdHJuY3B5KHRt cGJ1ZixzLENLTUFYUEFUSCsxKTsKKyAgICBzID0gdG1wYnVmOworICAgIHggPSBzdHJsZW4ocyk7 CisgICAgaWYgKGZjID09IDAgJiYgeCA+IDAgJiYgc1t4LTFdICE9ICcvJykgeyAvKiBNdXN0IGVu ZCBpbiAiLyIgZm9yIHpta2RpcigpICovCisJc1t4XSA9ICcvJzsKKwlzW3grMV0gPSBOVUw7CisJ ZGVidWcoRjExMCwiY2tta2RpciAyK09TMiIscywwKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgTlpMVE9S CisgICAgLyogU2VydmVyIGlzIGNhbGxpbmcgdXMsIHNvIGNvbnZlcnQgdG8gbG9jYWwgZm9ybWF0 IGlmIG5lY2Vzc2FyeSAqLworICAgIGlmIChjdnQpIHsKKwluenJ0b2wocywoY2hhciAqKWJ1ZjIs MSxQQVRIX0FCUyxDS01BWFBBVEgpOworCXMgPSBidWYyOworCWRlYnVnKEYxMTAsImNrbWtkaXIg MyIscywwKTsKKyAgICB9CisjZW5kaWYgLyogTlpMVE9SICovCisgICAgZGVidWcoRjExMCwiY2tt a2RpciA0IixzLDApOworICAgIGlmIChmYyA9PSAwKSB7CQkJLyogTWFraW5nICovCisjaWZkZWYg Q0tfTUtESVIKKwlyYyA9IHpta2RpcihzKTsKKyNlbHNlCisjaWZkZWYgTlQKKwlyYyA9IF9ta2Rp cihzKTsKKyNlbHNlCisJcmMgPSBta2RpcihzLDA3NzcpOworI2VuZGlmIC8qIE5UICovCisjZW5k aWYgLyogQ0tfTUtESVIgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBSZW1vdmluZyAqLworI2lmZGVm IFpSTURJUgorCXJjID0genJtZGlyKHMpOworI2Vsc2UKKyNpZmRlZiBOVAorCXJjID0gX3JtZGly KHMpOworI2Vsc2UKKyNpZmRlZiBPU0sKKwlyYyA9IC0yOworI2Vsc2UKKwlyYyA9IHJtZGlyKHMp OworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogWlJNRElSICov CisgICAgfQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgZGVidWcoRjEwMSwiY2tta2Rp ciByYyIsIiIscmMpOworICAgIGlmIChyYyA9PSAtMikgeworCWNrbWFrbXNnKGNrbWtkYnVmLAor CQkgQ0tNQVhQQVRILAorCQkgIkRpcmVjdG9yeSAiLAorCQkgKGZjID09IDApID8gImNyZWF0aW9u IiA6ICJyZW1vdmFsIiwKKwkJICJub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEMt S2VybWl0IiwKKwkJIE5VTEwKKwkJICk7CisJKnIgPSBja21rZGJ1ZjsKKwlpZiAobSkgcHJpbnRm KCIlc1xuIiwqcik7CisgICAgfSBlbHNlIGlmIChyYyA8IDApIHsKKwlpZiAobSkgcGVycm9yKHMp OworCWNrbWFrbXNnKGNrbWtkYnVmLENLTUFYUEFUSCxzLCI6ICIsY2tfZXJyc3RyKCksTlVMTCk7 CisJKnIgPSBja21rZGJ1ZjsKKyAgICB9IGVsc2UgaWYgKGZjID09IDAgJiYgemZucWZwKHMsQ0tN QVhQQVRILGNrbWtkYnVmKSkgeworCSpyID0gY2tta2RidWY7CisgICAgfSBlbHNlIGlmIChmYyAh PSAwKSB7CisJY2ttYWttc2coY2tta2RidWYsQ0tNQVhQQVRILHMsIjogcmVtb3ZlZCIsTlVMTCxO VUxMKTsKKwkqciA9IGNrbWtkYnVmOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlm IC8qIENLX01LRElSICovCisKKyNpZm5kZWYgTk9YRkVSCQkJCS8qIFJlc3Qgb2YgdGhpcyBmaWxl Li4uICovCisKKyNpZm5kZWYgTk9ESVNQTworI2lmZGVmIHBkcDExCisjZGVmaW5lIE5PRElTUE8K KyNlbmRpZiAvKiBwZHBkMTEgKi8KKyNlbmRpZiAvKiBOT0RJU1BPICovCisKK2V4dGVybiBpbnQg cGlwZXNlbmQ7CisjaWZkZWYgUElQRVNFTkQKK2V4dGVybiBjaGFyICoqIHNuZGZpbHRlcjsKKyNl bmRpZiAvKiBQSVBFU0VORCAqLworCitleHRlcm4gaW50IHVua2NzLCB3bWF4LCB3Y3VyLCBkaXNj YXJkLCBiY3R1LCBiY3RsLCBsb2NhbCwgZmRpc3BsYSwgd2hhdCwKKyAgICBzZW5kbW9kZSwgb3Bu ZXJyLCBkZXN0LCBlcGt0cmN2ZCwgZXBrdHNlbnQsIGZpbGVzdGF0dXMsIGVvZm1ldGhvZCwgZGlz cG9zLAorICAgIGZuY252LCBmbnJwYXRoOworCitleHRlcm4gY2hhciAqIG9mbjI7CitleHRlcm4g Y2hhciAqIHJmc3BlYywgKiBzZnNwZWMsICogcHJmc3BlYywgKiBwc2ZzcGVjLCAqIHJyZnNwZWMs ICogcHJyZnNwZWM7CitleHRlcm4gY2hhciBvZm4xW107CitleHRlcm4gaW50IG9mbjF4OworZXh0 ZXJuIGNoYXIgKiBvZnBlcm1zOworCisjaWZkZWYgVk1TCitleHRlcm4gaW50IGJhdGNoOworI2Vs c2UKK2V4dGVybiBpbnQgYmFja2dyZDsKKyNlbmRpZiAvKiBWTVMgKi8KKworZXh0ZXJuIGludCB4 ZmxnLCByZW1maWxlLCByZW1hcHBkOworZXh0ZXJuIENIQVIgKmRhdGE7CitleHRlcm4gY2hhciBm aWxuYW1bXTsKKyNpZm5kZWYgTk9GUklMTFMKK2V4dGVybiBpbnQgcnByaW50Ziwgcm1haWxmOwkJ LyogUkVNT1RFIE1BSUwsIFBSSU5UICovCitjaGFyIG9wdGJ1ZltPUFRCVUZMRU5dOwkJCS8qIE9w dGlvbnMgZm9yIE1BSUwgb3IgUkVNT1RFIFBSSU5UICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8K K2V4dGVybiBpbnQgd3Nsb3RzOworZXh0ZXJuIGludCBmYmxrc2l6LCBmcmVjbCwgZm9yZywgZnJl Y2ZtLCBmbmNhY3QsIGZuY3NhdiwgZmNjdHJsLCBsZl9vcHRzOworZXh0ZXJuIENIQVIgKiBzcnZj bWQ7CitleHRlcm4gaW50IHNydmNtZGxlbjsKKworZXh0ZXJuIGludCBiaW5hcnksIHNwc2l6Owor ZXh0ZXJuIGludCBwa3RudW0sIGN4c2VlbiwgY3pzZWVuLCBuZmlscywgc3RkaW5mOworZXh0ZXJu IGludCBtZW1zdHIsIHN0ZG91Ziwga2VlcCwgc25kc3JjLCBoY2ZsZzsKK2V4dGVybiBpbnQgc2Vy dmVyLCBlbl9jd2QsIGVuX21haSwgZW5fcHJpOworCisvKiBBdHRyaWJ1dGVzIGluL291dCBlbmFi bGVkIGZsYWdzICovCisKK2V4dGVybiBpbnQKKyAgYXRlbmNpLCBhdGVuY28sIGF0ZGF0aSwgYXRk YXRvLCBhdGxlbmksIGF0bGVubywgYXRibGtpLCBhdGJsa28sCisgIGF0dHlwaSwgYXR0eXBvLCBh dHNpZGksIGF0c2lkbywgYXRzeXNpLCBhdHN5c28sIGF0ZGlzaSwgYXRkaXNvOworCisjaWZkZWYg Q0tfUEVSTVMKK2V4dGVybiBpbnQgYXRscHJpLCBhdGxwcm8sIGF0Z3ByaSwgYXRncHJvOworI2Vu ZGlmIC8qIENLX1BFUk1TICovCisKKyNpZmRlZiBTVFJBVFVTCitleHRlcm4gaW50IGF0ZnJtaSwg YXRmcm1vLCBhdGNyZWksIGF0Y3JlbywgYXRhY3RpLCBhdGFjdG87CisjZW5kaWYgLyogU1RSQVRV UyAqLworCisjaWZkZWYgZGF0YWdlbmVyYWwKK2V4dGVybiBpbnQgcXVpZXQ7CisjZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KKworZXh0ZXJuIGxvbmcgZmlsY250OworZXh0ZXJuIENLX09GRl9UIGZz aXplLCBmZmMsIHRmYywgc2VuZHN0YXJ0LCBjYWxpYnJhdGU7CitDS19PRkZfVCByc19sZW47CisK KyNpZm5kZWYgTk9DU0VUUworX1BST1RPVFlQIChWT0lEIHNldHhsYXRlLCAodm9pZCkpOworZXh0 ZXJuIGludCB0Y2hhcnNldCwgZmNoYXJzZXQ7CitleHRlcm4gaW50IG50Y3NldHMsIHhsYXR5cGUs IHhmcnhsYTsKK2V4dGVybiBzdHJ1Y3QgY3NpbmZvIHRjc2luZm9bXSwgZmNzaW5mb1tdOworI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKworLyogVmFyaWFibGVzIGdsb2JhbCB0byBLZXJtaXQgdGhhdCBh cmUgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSAqLworCisjaWZkZWYgQ0tYWENIQVIJCQkJLyogRE9V QkxFIC8gSUdOT1JFIGNoYXIgdGFibGUgKi8KK2ludCBkYmxmbGFnID0gMDsKK2ludCBpZ25mbGFn ID0gMDsKK3Nob3J0IGRibHRbMjU2XSA9IHsKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAg IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwCit9OworI2VuZGlmIC8qIENLWFhDSEFSICovCisKK2ludCB3aW5sbzsJ CQkJLyogcGFja2V0IG51bWJlciBhdCBsb3cgd2luZG93IGVkZ2UgICovCisKK2ludCBzYnVmbnVt OwkJCQkvKiBudW1iZXIgb2YgZnJlZSBidWZmZXJzICovCitpbnQgZHVtMDAxID0gMTIzNDsJCQkv KiBwcm90ZWN0aW9uLi4uICovCitpbnQgc2J1ZnVzZVtNQVhXU107CQkJLyogYnVmZmVyIGluLXVz ZSBmbGFnICovCitpbnQgZHVtMDAzID0gMTExMTsKK2ludCByYnVmbnVtOwkJCQkvKiBudW1iZXIg b2YgZnJlZSBidWZmZXJzICovCitpbnQgZHVtMDAyID0gNDMyMTsJCQkvKiBtb3JlIHByb3RlY3Rp b24gKi8KK2ludCByYnVmdXNlW01BWFdTXTsJCQkvKiBidWZmZXIgaW4tdXNlIGZsYWcgKi8KK2lu dCBzc2VxdGJsWzY0XTsJCQkvKiBzZXF1ZW5jZSAjIHRvIGJ1ZmZlciAjIHRhYmxlICovCitpbnQg cnNlcXRibFs2NF07CQkJLyogc2VxdWVuY2UgIyB0byBidWZmZXIgIyB0YWJsZSAqLworaW50IHNh Y2t0YmxbNjRdOwkJCS8qIHNlcXVlbmNlICMgYWNrIHRhYmxlICovCisKK2ludCBvX2lzb3BlbiA9 IDAsIGlfaXNvcGVuID0gMDsJCS8qIElucHV0ICYgb3V0cHV0IGZpbGVzIGFyZSBvcGVuICovCisK KyNpZmRlZiBEWU5BTUlDCitzdHJ1Y3QgcGt0aW5mbyAqc19wa3QgPSBOVUxMOwkJLyogYXJyYXkg b2YgcGt0aW5mbyBzdHJ1Y3R1cmVzICovCitzdHJ1Y3QgcGt0aW5mbyAqcl9wa3QgPSBOVUxMOwkJ LyogYXJyYXkgb2YgcGt0aW5mbyBzdHJ1Y3R1cmVzICovCisjZWxzZQorc3RydWN0IHBrdGluZm8g c19wa3RbTUFYV1NdOwkJLyogYXJyYXkgb2YgcGt0aW5mbyBzdHJ1Y3R1cmVzICovCitzdHJ1Y3Qg cGt0aW5mbyByX3BrdFtNQVhXU107CQkvKiBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgKi8K KyNlbmRpZiAvKiBEWU5BTUlDICovCisKKyNpZmRlZiBERUJVRworY2hhciB4YnVmWzIwMF07CQkJ CS8qIEZvciBkZWJ1ZyBsb2dnaW5nICovCisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIERZ TkFNSUMKK0NIQVIgKmJpZ3NidWYgPSBOVUxMLCAqYmlncmJ1ZiA9IE5VTEw7CisjZWxzZQorY2hh ciBiaWdzYnRbOF07CQkJCS8qIFByb3RlY3Rpb24gKHNob3VsZG4ndCBuZWVkIHRoaXMpLiAqLwor CQkJCQkvKiBCVVQgRE9OJ1QgUkVNT1ZFIElUISAqLworQ0hBUiBiaWdzYnVmW1NCU0laICsgNV07 CQkvKiBTZW5kLXBhY2tldCBidWZmZXIgYXJlYSAqLworY2hhciBiaWdyYnRbOF07CQkJCS8qIFNh ZmV0eSBwYWRkaW5nICovCitDSEFSIGJpZ3JidWZbUkJTSVogKyA1XTsJCS8qIFJlY2VpdmUtcGFj a2V0IGFyZWEgKi8KKyNlbmRpZgoraW50IGJpZ3Nic2l6ID0gU0JTSVo7CQkJLyogU2l6ZXMgb2Yg YmlnIHNlbmQgJiByY3YgYnVmZmVycy4gKi8KK2ludCBiaWdyYnNpeiA9IFJCU0laOworCisjaWZk ZWYgVk1TCitpbnQgemNoa3BhdGgoY2hhciAqcyk7CisjZW5kaWYgLyogVk1TICovCisKKy8qIEZV TkNUSU9OUyAqLworCitWT0lECitkb2Zhc3QoKSB7CisgICAgbG9uZyBtYXhidWZzaXogPSBSQlNJ WjsJCS8qIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworICAgIGludCBtYXhwa3RzaXogPSBN QVhTUDsKKyAgICBleHRlcm4gaW50IHNwc2l6ZiwJCQkvKiBGb3IgYnVnIGluIElSSVggVGVsbmV0 IHNlcnZlciAqLworICAgICAgcnBzaXosIHVycHNpeiwgc3BzaXpyLCBzcG1heCwgd3Nsb3RyOwor ICAgIGV4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW107CisKKyAgICBpZiAobWF4cGt0c2l6IDwgNDAp CQkJLyogTG9uZyBwYWNrZXQgbGVuZ3RoICovCisgICAgICBtYXhwa3RzaXogPSA0MDsKKyAgICBl bHNlIGlmIChtYXhwa3RzaXogPiA0MDAwKQorICAgICAgbWF4cGt0c2l6ID0gNDAwMDsKKyAgICB3 c2xvdHIgPSBtYXhidWZzaXogLyBtYXhwa3RzaXo7CisgICAgaWYgKHdzbG90ciA+IE1BWFdTKQkJ CS8qIFdpbmRvdyBzbG90cyAqLworICAgICAgd3Nsb3RyID0gTUFYV1M7CisgICAgaWYgKHdzbG90 ciA+IDMwKQorICAgICAgd3Nsb3RyID0gMzA7CisgICAgZWxzZSBpZiAod3Nsb3RyIDwgMSkKKyAg ICAgIHdzbG90ciA9IDE7CisgICAgdXJwc2l6ID0gYWRqcGtsKG1heHBrdHNpeix3c2xvdHIsbWF4 YnVmc2l6KTsKKyAgICBwdGFiW1BST1RPX0tdLnJwa3RsZW4gPSB1cnBzaXo7CisgICAgcnBzaXog PSAodXJwc2l6ID4gOTQpID8gOTQgOiB1cnBzaXo7IC8qIE1heCBub24tbG9uZyBwYWNrZXQgbGVu Z3RoICovCisgICAgZGVidWcoRjExMSwiZG9mYXN0IiwidXByc2l6Iix1cnBzaXopOworI2lmZGVm IElSSVgKKyNpZm5kZWYgSVJJWDY1CisgICAgLyogSVJJWCBUZWxuZXQgc2VydmVyIGNob3BzIG9m ZiB3cml0ZXMgbG9uZ2VyIHRoYW4gNEsgKi8KKyAgICBzcHNpeiA9IHNwbWF4ID0gc3BzaXpyID0g dXJwc2l6OworICAgIGRlYnVnKEYxMDEsImRvYXJnIFEgSVJJWCBzcHNpeiIsIiIsc3BzaXopOwor ICAgIHNwc2l6ZiA9IDE7CisjZW5kaWYgLyogSVJJWDY1ICovCisjZW5kaWYgLyogSVJJWCAqLwor I2lmZGVmIENLX1NQRUVECisgICAgc2V0cHJlZml4KFBYX0NBVSk7CQkJLyogQ2F1dGlvdXMgdW5w cmVmaXhpbmcgKi8KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworfQorCisKKy8qIEZvciBzYW5pdHks IHVzZSAiaSIgZm9yIGJ1ZmZlciBzbG90cywgIm4iIGZvciBwYWNrZXQgbnVtYmVycy4gKi8KKwor LyogSSBOIEkgQiBVIEYgUyAqLworCisvKgorICBBbGxvY2F0ZXMgdGhlIGJpZyBzZW5kIGFuZCBy ZWNlaXZlIGJ1ZmZlcnMuCisgIENhbGwgd2l0aCBzaXplIGZvciBiaWcgc2VuZCBidWZmZXIgKHMp IGFuZCByZWNlaXZlIGJ1ZmZlciAocikuCisgIFRoZXNlIHNpemVzIGNhbiBiZSBkaWZmZXJlbnQu CisgIEF0dGVtcHRzIHRvIGFsbG9jYXRlIGJ1ZmZlcnMgb2YgdGhlIHJlcXVlc3RlZCBzaXplLCBi dXQgaWYgaXQgY2FuJ3QsCisgIGl0IHdpbGwgYWxsb2NhdGUgc21hbGxlciBvbmVzLgorICBTZXRz IGdsb2JhbCB2YXJpYWJsZXMgYmlnc2JzaXogYW5kIGJpZ3Jic2l6IHRvIHRoZSBhY3R1YWwgc2l6 ZXMsCisgIGFuZCBiaWdzYnVmIGFuZCBiaWdyYnVmIHBvaW50aW5nIHRvIHRoZSBhY3R1YWwgYnVm ZmVycy4KKyAgRGVzaWduZWQgdG8gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgorICBSZXR1cm5z IDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyovCisKK0NIQVIgKmJpZ2J1ZnAgPSBOVUxM OworCitpbnQKK2luaWJ1ZnMocyxyKSBpbnQgcywgcjsgeworI2lmZGVmIERZTkFNSUMKKyAgICB1 bnNpZ25lZAorICAgICAgaW50IHNpemU7CisjaWZkZWYgT1MyCisgICAgdW5zaWduZWQJCS8qIERv bid0IHlvdSB3aXNoIGV2ZXJ5Ym9keSBoYWQgdW5zaWduZWQgbG9uZy4uLiAqLworI2VuZGlmIC8q IE9TMiAqLworICAgICAgbG9uZyB6OworICAgIGludCB4OworCisgICAgZGVidWcoRjEwMSwiaW5p YnVmcyBzIiwiIixzKTsKKyAgICBkZWJ1ZyhGMTAxLCJpbmlidWZzIHIiLCIiLHIpOworCisgICAg aWYgKHMgPCA4MCB8fCByIDwgODApIHJldHVybigtMSk7CS8qIFZhbGlkYXRlIGFyZ3VtZW50cy4g Ki8KKworICAgIGlmICghc19wa3QpIHsJCQkvKiBBbGxvY2F0ZSBwYWNrZXQgaW5mbyBzdHJ1Y3R1 cmVzICovCisJaWYgKCEoc19wa3QgPSAoc3RydWN0IHBrdGluZm8gKikgbWFsbG9jKHNpemVvZihz dHJ1Y3QgcGt0aW5mbykqTUFYV1MpKSkKKwkgIGZhdGFsKCJpbmlfcGt0czogbm8gbWVtb3J5IGZv ciBzX3BrdCIpOworICAgIH0KKyAgICBmb3IgKHggPSAwOyB4IDwgTUFYV1M7IHgrKykKKyAgICAg IHNfcGt0W3hdLnBrX2FkciA9IE5VTEw7CQkvKiBJbml0aWFsaXplIGFkZHJlc3NlcyAqLworCisg ICAgaWYgKCFyX3BrdCkgeworCWlmICghKHJfcGt0ID0gKHN0cnVjdCBwa3RpbmZvICopIG1hbGxv YyhzaXplb2Yoc3RydWN0IHBrdGluZm8pKk1BWFdTKSkpCisJICBmYXRhbCgiaW5pX3BrdHM6IG5v IG1lbW9yeSBmb3Igc19wa3QiKTsKKyAgICB9CisgICAgZm9yICh4ID0gMDsgeCA8IE1BWFdTOyB4 KyspCisgICAgICByX3BrdFt4XS5wa19hZHIgPSBOVUxMOwkJLyogSW5pdGlhbGl6ZSBhZGRyZXNz ZXMgKi8KKworICAgIGlmICghc3J2Y21kKSB7CQkJLyogQWxsb2NhdGUgc3J2Y21kIGJ1ZmZlciAq LworCXNydmNtZCA9IChDSEFSICopIG1hbGxvYyhyICsgMTAwKTsKKwlpZiAoIXNydmNtZCkgcmV0 dXJuKC0xKTsKKwlzcnZjbWRsZW4gPSByICsgOTk7CisJKnNydmNtZCA9IE5VTDsKKyAgICB9Cisg ICAgaWYgKGJpZ2J1ZnApIHsJCQkvKiBGcmVlIHByZXZpb3VzIGJ1ZmZlcnMsIGlmIGFueS4gKi8K KwlmcmVlKGJpZ2J1ZnApOworCWJpZ2J1ZnAgPSBOVUxMOworICAgIH0KKyAgICBzaXplID0gcyAr IHIgKyA0MDsJCQkvKiBDb21iaW5lZCByZXF1ZXN0ZWQgc2l6ZSArIHBhZGRpbmcgKi8KKyAgICB6 ICA9ICh1bnNpZ25lZCkgcyArICh1bnNpZ25lZCkgciArIDQwOworICAgIGRlYnVnKEYxMDEsImlu aWJ1ZnMgc2l6ZSAxIiwiIixzaXplKTsKKyAgICBkZWJ1ZyhGMTAxLCJpbmlidWZzIHNpemUgeiIs IiIseik7CisgICAgaWYgKChsb25nKSBzaXplICE9IHopIHsKKwlkZWJ1ZyhGMTAwLCJpbmlidWZz IG92ZXJmbG93IiwiIiwwKTsKKwlzaXplID0gNjU1MzU7CisgICAgfQorCisgICAgLyogVHJ5IHRv IGdldCB0aGUgc3BhY2UuICBJZiBtYWxsb2MgZmFpbHMsIHRyeSB0byBnZXQgYSBsaXR0bGUgbGVz cy4gKi8KKyAgICAvKiAoT2J2aW91c2x5LCB0aGlzIGFsZ29yaXRobSBjYW4gYmUgcmVmaW5lZC4p ICovCisKKyAgICB3aGlsZSAoIShiaWdidWZwID0gKENIQVIgKikgbWFsbG9jKHNpemUpKSkgewor CWRlYnVnKEYxMDEsImluaWJ1ZnMgYmlnYnVmIG1hbGxvYyBmYWlsZWQiLCIiLHNpemUpOworCXNp emUgPSAoc2l6ZSAqIDIpIC8gMzsJCS8qIEZhaWxlZCwgY3V0IHNpemUgYnkgMS8zLiAqLworCWlm IChzaXplIDwgMjAwKQkJCS8qIFRyeSBhZ2FpbiB1bnRpbCB0b28gc21hbGwuICovCisJICByZXR1 cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJpbmlidWZzIHNpemUgMiIsIiIsc2l6ZSk7 IC8qIE9LLCB3ZSBnb3Qgc29tZSBzcGFjZS4gKi8KKworLyoKKyAgTm93IGRpdmlkZSB0aGUgYWxs b2NhdGVkIHNwYWNlIGJldHdlZW4gdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycyBpbiB0aGUK KyAgcmVxdWVzdGVkIHByb3BvcnRpb24uICBUaGUgbmF0dXJhbCBmb3JtdWxhIHdvdWxkIGJlIChz IC8gKHMgKyByKSkgKiBzaXplCisgIChmb3IgdGhlIHNlbmQgYnVmZmVyKSwgYnV0IHRoYXQgZG9l c24ndCB3b3JrIHdpdGggaW50ZWdlciBhcml0aG1ldGljIGFuZCB3ZQorICBjYW4ndCB1c2UgZmxv YXRpbmcgcG9pbnQgYmVjYXVzZSBzb21lIG1hY2hpbmVzIGRvbid0IGhhdmUgaXQuICBUaGlzIGNh biBiZQorICByZWFycmFuZ2VkIGFzIChzICogc2l6ZSkgLyAocyArIHIpLiAgQnV0IChzICogc2l6 ZSkgY2FuIGJlIFZFUlkgbGFyZ2UsIHRvbworICBsYXJnZSBmb3IgMzIgYml0cy4gIFNvIGxldCdz IGRvIGl0IHRoaXMgd2F5LiAgVGhpcyBhcml0aG1ldGljIHdvcmtzIGZvcgorICBidWZmZXIgc2l6 ZXMgdXAgdG8gYWJvdXQgNSwwMDAsMDAwLgorKi8KKyNkZWZpbmUgRkFDVE9SIDIwTAorICAgIHog PSAoIChsb25nKSBzICogRkFDVE9SICkgLyAoIChsb25nKSBzICsgKGxvbmcpIHIgKTsKKyAgICB4 ID0gKCB6ICogKCAobG9uZykgc2l6ZSAvIEZBQ1RPUiApICk7CisgICAgaWYgKHggPCAwKSByZXR1 cm4oLTEpOwkJLyogQ2F0Y2ggb3ZlcmZsb3cgKi8KKworICAgIGJpZ3Nic2l6ID0geCAtIDU7CQkJ LyogU2l6ZSBvZiBzZW5kIGJ1ZmZlciAqLworICAgIGJpZ3NidWYgPSBiaWdidWZwOwkJCS8qIEFk ZHJlc3Mgb2Ygc2VuZCBidWZmZXIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJpbmlidWZzIGJpZ3Nic2l6 IiwiIixiaWdzYnNpeik7CisKKyAgICBiaWdyYnNpeiA9IHNpemUgLSB4IC0gNTsJCS8qIFNpemUg b2YgcmVjZWl2ZSBidWZmZXIgKi8KKyAgICBiaWdyYnVmID0gYmlnYnVmcCArIHg7CQkvKiBBZGRy ZXNzcyBvZiByZWNlaXZlIGJ1ZmZlciAqLworICAgIGRlYnVnKEYxMDEsImluaWJ1ZnMgYmlncmJz aXoiLCIiLGJpZ3Jic2l6KTsKKworICAgIHJldHVybigwKTsJCQkJLyogU3VjY2VzcyAqLworI2Vs c2UJCQkJCS8qIE5vIGR5bmFtaWMgYWxsb2NhdGlvbiAqLworICAgIGJpZ3Nic2l6ID0gU0JTSVo7 CQkJLyogSnVzdCB1c2UgdGhlIHN5bWJvbHMgKi8KKyAgICBiaWdyYnNpeiA9IFJCU0laOwkJCS8q IC4uLiAqLworICAgIHJldHVybigwKTsJCQkJLyogU3VjY2Vzcy4gKi8KKyNlbmRpZiAvKiBEWU5B TUlDICovCit9CisKKworLyogTSBBIEsgRSBCIFUgRiAgLS0gIE1ha2VzIGFuZCBjbGVhcnMgYSBu ZXcgYnVmZmVycy4gICovCisKKy8qIENhbGwgd2l0aDogKi8KKy8qICBzbG90czogIG51bWJlciBv ZiBidWZmZXIgc2xvdHMgdG8gbWFrZSwgMSB0byAzMiAqLworLyogIGJ1ZnNpejogc2l6ZSBvZiB0 aGUgYmlnIGJ1ZmZlciAqLworLyogIGJ1ZjogICAgYWRkcmVzcyBvZiB0aGUgYmlnIGJ1ZmZlciAq LworLyogIHh4OiAgICAgcG9pbnRlciB0byBhcnJheSBvZiBwa3RpbmZvIHN0cnVjdHVyZXMgZm9y IHRoZXNlIGJ1ZmZlcnMgKi8KKworLyogU3ViZGl2aWRlcyB0aGUgYmlnIGJ1ZmZlciBpbnRvICJz bG90cyIgYnVmZmVycy4gKi8KKworLyogUmV0dXJuczogKi8KKy8qICAtMSBpZiB0b28gbWFueSBv ciB0b28gZmV3IHNsb3RzIHJlcXVlc3RlZCwgICAgICovCisvKiAgLTIgaWYgc2xvdHMgd291bGQg YmUgdG9vIHNtYWxsLiAgICAgICovCisvKiAgIG4gKHBvc2l0aXZlKSBvbiBzdWNjZXNzID0gc2l6 ZSBvZiBvbmUgYnVmZmVyLiAqLworLyogICB3aXRoIHBrdGluZm8gc3RydWN0dXJlIGluaXRpYWxp emVkIGZvciB0aGlzIHNldCBvZiBidWZmZXJzLiAqLworCitpbnQKK21ha2VidWYoc2xvdHMsYnVm c2l6LGJ1Zix4eCkKKy8qIG1ha2VidWYgKi8gaW50IHNsb3RzLCBidWZzaXo7IENIQVIgYnVmW107 IHN0cnVjdCBwa3RpbmZvICp4eDsgeworCisgICAgQ0hBUiAqYTsKKyAgICBpbnQgaSwgc2l6ZTsK KworICAgIGRlYnVnKEYxMDEsIm1ha2VidWYiLCIiLHNsb3RzKTsKKyAgICBkZWJ1ZyhGMTAxLCJt YWtlYnVmIGJ1ZnNpeiIsIiIsYnVmc2l6KTsKKyAgICBkZWJ1ZyhGMTAxLCJtYWtlYnVmIE1BWFdT IiwiIixNQVhXUyk7CisKKyAgICBpZiAoc2xvdHMgPiBNQVhXUyB8fCBzbG90cyA8IDEpIHJldHVy bigtMSk7CisgICAgaWYgKGJ1ZnNpeiA8IHNsb3RzICogMTAgKSByZXR1cm4oLTIpOworCisgICAg c2l6ZSA9IGJ1ZnNpeiAvIHNsb3RzOwkJLyogRGl2aWRlIHVwIHRoZSBiaWcgYnVmZmVyLiAqLwor ICAgIGEgPSBidWY7CQkJCS8qIEFkZHJlc3Mgb2YgZmlyc3QgcGllY2UuICovCisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgc2xvdHM7IGkrKykgeworCXN0cnVjdCBwa3RpbmZvICp4ID0gJnh4W2ldOwor CXgtPmJmX2FkciA9IGE7CQkJLyogQWRkcmVzcyBvZiB0aGlzIGJ1ZmZlciAqLworCXgtPmJmX2xl biA9IHNpemU7CQkvKiBMZW5ndGggb2YgdGhpcyBidWZmZXIgKi8KKwl4LT5wa19sZW4gPSAwOwkJ CS8qIExlbmd0aCBvZiBkYXRhIGZpZWxkICovCisgICAgICAgIHgtPnBrX3R5cCA9ICcgJzsJCS8q IHBhY2tldCB0eXBlICovCisJeC0+cGtfc2VxID0gLTE7CQkJLyogcGFja2V0IHNlcXVlbmNlIG51 bWJlciAqLworICAgICAgICB4LT5wa19ydHIgPSAwOwkJCS8qIHJldHJhbnNtaXNzaW9ucyAqLwor CSphID0gJ1wwJzsJCQkvKiBDbGVhciB0aGUgYnVmZmVyICovCisJYSArPSBzaXplOwkJCS8qIFBv c2l0aW9uIHRvIG5leHQgYnVmZmVyIHNsb3QgKi8KKyAgICB9CisgICAgcmV0dXJuKHNpemUpOwor fQorCisvKiAgTSBBIEsgUyBCIFUgRiAgLS0gIE1ha2VzIHRoZSBzZW5kLXBhY2tldCBidWZmZXIg ICovCisKK2ludAorbWtzYnVmKHNsb3RzKSBpbnQgc2xvdHM7IHsKKyAgICBpbnQgaSwgeDsKKyAg ICBzYnVmbnVtID0gMDsKKyAgICBpZiAoKHggPSBtYWtlYnVmKHNsb3RzLGJpZ3Nic2l6LGJpZ3Ni dWYsc19wa3QpKSA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJta3NidWYgbWFrZWJ1ZiByZXR1cm4iLCIi LHgpOworCXJldHVybih4KTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwibWtzYnVmIG1ha2VidWYg cmV0dXJuIiwiIix4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewkJLyogSW5pdGlh bGl6ZSBzZXF1ZW5jZS1udW1iZXItICovCisJc3NlcXRibFtpXSA9IC0xOwkJLyogdG8tYnVmZmVy LW51bWJlciB0YWJsZS4gKi8KKyAgICAgICAgc2Fja3RibFtpXSA9IDA7CisgICAgfQorICAgIGZv ciAoaSA9IDA7IGkgPCBNQVhXUzsgaSsrKQorICAgICAgc2J1ZnVzZVtpXSA9IDA7CQkJLyogTWFy ayBlYWNoIGJ1ZmZlciBhcyBmcmVlICovCisgICAgc2J1Zm51bSA9IHNsb3RzOworICAgIHdjdXIg PSAwOworICAgIHJldHVybih4KTsKK30KKworLyogIE0gQSBLIFIgQiBVIEYgIC0tICBNYWtlcyB0 aGUgcmVjZWl2ZS1wYWNrZXQgYnVmZmVyICAqLworCitpbnQKK21rcmJ1ZihzbG90cykgaW50IHNs b3RzOyB7CisgICAgaW50IGksIHg7CisgICAgcmJ1Zm51bSA9IDA7CisgICAgaWYgKCh4ID0gbWFr ZWJ1ZihzbG90cyxiaWdyYnNpeixiaWdyYnVmLHJfcGt0KSkgPCAwKSB7CisJZGVidWcoRjEwMSwi bWtyYnVmIG1ha2VidWYgcmV0dXJuIiwiIix4KTsKKwlyZXR1cm4oeCk7CisgICAgfQorICAgIGRl YnVnKEYxMDEsIm1rcmJ1ZiBtYWtlYnVmIHJldHVybiIsIiIseCk7CisgICAgZm9yIChpID0gMDsg aSA8IDY0OyBpKyspIHsJCS8qIEluaXRpYWxpemUgc2VxdWVuY2UtbnVtYmVyLSAqLworCXJzZXF0 YmxbaV0gPSAtMTsJCS8qIHRvLWJ1ZmZlci1udW1iZXIgdGFibGUuICovCisgICAgfQorICAgIGZv ciAoaSA9IDA7IGkgPCBNQVhXUzsgaSsrKQorICAgICAgcmJ1ZnVzZVtpXSA9IDA7CQkJLyogTWFy ayBlYWNoIGJ1ZmZlciBhcyBmcmVlICovCisgICAgcmJ1Zm51bSA9IHNsb3RzOworICAgIHdjdXIg PSAwOworICAgIHJldHVybih4KTsKK30KKworLyogIFcgSSBOIEQgTyBXICAtLSAgUmVzaXplIHRo ZSB3aW5kb3cgdG8gbiAgKi8KKworaW50Cit3aW5kb3cobikgaW50IG47IHsKKyAgICBkZWJ1ZyhG MTAxLCJ3aW5kb3ciLCIiLG4pOworICAgIGlmIChuIDwgMSB8fCBuID4gTUFYV1MpIHJldHVybigt MSk7CisgICAgaWYgKG1rc2J1ZihuKSA8IDApIHJldHVybigtMSk7CisgICAgaWYgKG1rcmJ1Zihu KSA8IDApIHJldHVybigtMSk7CisgICAgd3Nsb3RzID0gbjsKKyNpZmRlZiBERUJVRworICAgIGlm IChkZWJsb2cpIGR1bXBzYnVmKCk7CisgICAgaWYgKGRlYmxvZykgZHVtcHJidWYoKTsKKyNlbmRp ZiAvKiBERUJVRyAqLworICAgIHJldHVybigwKTsKK30KKworLyogIEcgRSBUIFMgQiBVIEYgIC0t ICBBbGxvY2F0ZSBhIHNlbmQtYnVmZmVyLiAgKi8KKworLyogIENhbGwgd2l0aCBwYWNrZXQgc2Vx dWVuY2UgbnVtYmVyIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IuICovCisvKiAgUmV0dXJuczogKi8K Ky8qICAgLTQgaWYgYXJndW1lbnQgaXMgaW52YWxpZCAobmVnYXRpdmUsIG9yIGdyZWF0ZXIgdGhh biA2MykgKi8KKy8qICAgLTMgaWYgYnVmZmVycyB3ZXJlIHRob3VnaHQgdG8gYmUgYXZhaWxhYmxl IGJ1dCByZWFsbHkgd2VyZW4ndCAoYnVnISkgKi8KKy8qICAgLTIgaWYgdGhlIG51bWJlciBvZiBm cmVlIGJ1ZmZlcnMgaXMgbmVnYXRpdmUgKGJ1ZyEpICovCisvKiAgIC0xIGlmIG5vIGZyZWUgYnVm ZmVycy4gKi8KKy8qICAgMCBvciBwb3NpdGl2ZSwgcGFja2V0IHNlcXVlbmNlIG51bWJlciwgd2l0 aCBidWZmZXIgYWxsb2NhdGVkIGZvciBpdC4gKi8KKworaW50CitnZXRzYnVmKG4pIGludCBuOyB7 CQkJLyogQWxsb2NhdGUgYSBzZW5kLWJ1ZmZlciAqLworICAgIGludCBpOworICAgIENIQVIgKiBw ID0gTlVMTDsKKyAgICBpZiAobiA8IDAgfHwgbiA+IDYzKSB7CisJZGVidWcoRjEwMSwiZ2V0c2J1 ZiBiYWQgYXJnIiwiIixuKTsKKwlyZXR1cm4oLTQpOwkvKiBCYWQgYXJndW1lbnQgKi8KKyAgICB9 CisgICAgZGVidWcoRjEwMSwiZ2V0c2J1ZiBwYWNrZXQiLCIiLG4pOworICAgIC8qIGRlYnVnKEYx MDEsImdldHNidWYsIHNidWZudW0iLCIiLHNidWZudW0pOyAqLworICAgIGlmIChzYnVmbnVtID09 IDApIHJldHVybigtMSk7CS8qIE5vIGZyZWUgYnVmZmVycy4gKi8KKyAgICBpZiAoc2J1Zm51bSA8 IDApIHJldHVybigtMik7CS8qIFNob3VsZG4ndCBoYXBwZW4uICovCisgICAgZm9yIChpID0gMDsg aSA8IHdzbG90czsgaSsrKQkvKiBGaW5kIHRoZSBmaXJzdCBvbmUgbm90IGluIHVzZS4gKi8KKyAg ICAgIGlmIChzYnVmdXNlW2ldID09IDApIHsJCS8qIEdvdCBvbmU/ICovCisJICBzYnVmdXNlW2ld ID0gMTsJCS8qIE1hcmsgaXQgYXMgaW4gdXNlLiAqLworCSAgc2J1Zm51bS0tOwkJCS8qIE9uZSBs ZXNzIGZyZWUgYnVmZmVyLiAqLworCSAgKnNfcGt0W2ldLmJmX2FkciA9ICdcMCc7CS8qIFplcm8g dGhlIGJ1ZmZlciBkYXRhIGZpZWxkICovCisJICBzX3BrdFtpXS5wa19zZXEgPSBuOwkJLyogUHV0 IGluIHRoZSBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICAgICAgICBzc2VxdGJsW25dID0gaTsJCS8q IEJhY2sgcG9pbnRlciBmcm9tIHNlcXVlbmNlIG51bWJlciAqLworICAgICAgICAgIHNhY2t0Ymxb bl0gPSAwOwkJLyogQUNLIGZsYWcgKi8KKwkgIHNfcGt0W2ldLnBrX2xlbiA9IDA7CQkvKiBEYXRh IGZpZWxkIGxlbmd0aCBub3cgemVyby4gKi8KKwkgIHNfcGt0W2ldLnBrX3R5cCA9ICcgJzsJLyog QmxhbmsgdGhlIHBhY2tldCB0eXBlIHRvby4gKi8KKwkgIHNfcGt0W2ldLnBrX3J0ciA9IDA7CQkv KiBaZXJvIHRoZSByZXRyYW5zbWlzc2lvbiBjb3VudCAqLworCSAgcCA9IHNfcGt0W2ldLmJmX2Fk ciArIDc7CS8qIFNldCBnbG9iYWwgImRhdGEiIGFkZHJlc3MuICovCisJICBkZWJ1ZyhGMTAxLCJn ZXRzYnVmIHAiLCIiLDApOworCSAgZGF0YSA9IHA7CisJICBpZiAoIWRhdGEpIHsKKwkgICAgICBk ZWJ1ZyhGMTAwLCJnZXRzYnVmIGRhdGEgPT0gTlVMTCIsIiIsMCk7CisgICAgICAgICAgICAgIHJl dHVybigtMyk7CisgICAgICAgICAgfQorCSAgaWYgKCh3aGF0ICYgKFdfU0VORHxXX1JFTU8pKSAm JiAoKyt3Y3VyID4gd21heCkpCisJICAgIHdtYXggPSB3Y3VyOwkJLyogRm9yIHN0YXRpc3RpY3Mu ICovCisJICAvKiBkZWJ1ZyhGMTAxLCJnZXRzYnVmIHdjdXIiLCIiLHdjdXIpOyAqLworCSAgcmV0 dXJuKG4pOwkJCS8qIFJldHVybiBpdHMgaW5kZXguICovCisgICAgICB9CisgICAgc2J1Zm51bSA9 IDA7CQkJLyogRGlkbid0IGZpbmQgb25lLiAqLworICAgIHJldHVybigtMyk7CQkJCS8qIFNob3Vs ZG4ndCBoYXBwZW4hICovCit9CisKK2ludAorZ2V0cmJ1ZigpIHsJCQkJLyogQWxsb2NhdGUgYSBy ZWNlaXZlIGJ1ZmZlciAqLworICAgIGludCBpOworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBUaGlz IGNvZGUgaXMgcHJldHR5IHN0YWJsZSBieSBub3cuLi4gKi8KKyAgICAvKiBMb29rcyBsaWtlIHdl IG1pZ2h0IG5lZWQgdGhpcyBhZnRlciBhbGwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJnZXRyYnVmIHJi dWZudW0iLCIiLHJidWZudW0pOworICAgIGRlYnVnKEYxMDEsImdldHJidWYgd3Nsb3RzIiwiIix3 c2xvdHMpOworICAgIGRlYnVnKEYxMDEsImdldHJidWYgZHVtMDAyIiwiIixkdW0wMDIpOworICAg IGRlYnVnKEYxMDEsImdldHJidWYgZHVtMDAzIiwiIixkdW0wMDMpOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICBpZiAocmJ1Zm51bSA9PSAwKSByZXR1cm4oLTEpOwkvKiBObyBmcmVlIGJ1ZmZl cnMuICovCisgICAgaWYgKHJidWZudW0gPCAwKSByZXR1cm4oLTIpOwkvKiBTaG91bGRuJ3QgaGFw cGVuLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCB3c2xvdHM7IGkrKykJLyogRmluZCB0aGUgZmly c3Qgb25lIG5vdCBpbiB1c2UuICovCisgICAgICBpZiAocmJ1ZnVzZVtpXSA9PSAwKSB7CQkvKiBH b3Qgb25lPyAqLworCSAgcmJ1ZnVzZVtpXSA9IDE7CQkvKiBNYXJrIGl0IGFzIGluIHVzZS4gKi8K KwkgICpyX3BrdFtpXS5iZl9hZHIgPSAnXDAnOwkvKiBaZXJvIHRoZSBidWZmZXIgZGF0YSBmaWVs ZCAqLworCSAgcmJ1Zm51bS0tOwkJCS8qIE9uZSBsZXNzIGZyZWUgYnVmZmVyLiAqLworCSAgZGVi dWcoRjEwMSwiZ2V0cmJ1ZiBuZXcgcmJ1Zm51bSIsIiIscmJ1Zm51bSk7CisJICBpZiAoKHdoYXQg JiBXX1JFQ1YpICYmICgrK3djdXIgPiB3bWF4KSkKKwkgICAgd21heCA9IHdjdXI7CQkvKiBGb3Ig c3RhdGlzdGljcy4gKi8KKwkgIC8qIGRlYnVnKEYxMDEsImdldHJidWYgd2N1ciIsIiIsd2N1cik7 ICovCisJICByZXR1cm4oaSk7CQkJLyogUmV0dXJuIGl0cyBpbmRleC4gKi8KKyAgICAgIH0KKyAg ICAvKiBkZWJ1ZyhGMTAxLCJnZXRyYnVmIGZvdWx1cCIsIiIsaSk7ICovCisgICAgcmJ1Zm51bSA9 IDA7CQkJLyogRGlkbid0IGZpbmQgb25lLiAqLworICAgIHJldHVybigtMyk7CQkJCS8qIFNob3Vs ZG4ndCBoYXBwZW4hICovCit9CisKKy8qICBGIFIgRSBFIFMgQiBVIEYgIC0tICBGcmVlIHNlbmQt YnVmZmVyIGZvciBnaXZlbiBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCisKKy8qICBSZXR1cm5z OiAgKi8KKy8qICAgMSB1cG9uIHN1Y2Nlc3MgICovCisvKiAgLTEgaWYgc3BlY2lmaWVkIGJ1ZmZl ciBkb2VzIG5vdCBleGlzdCAqLworCitpbnQKK2ZyZWVzYnVmKG4pIGludCBuOyB7CQkJLyogUmVs ZWFzZSBzZW5kLWJ1ZmZlciBmb3IgcGFja2V0IG4uICovCisgICAgaW50IGk7CisKKyAgICBkZWJ1 ZyhGMTAxLCJmcmVlc2J1ZiIsIiIsbik7CisgICAgaWYgKG4gPCAwIHx8IG4gPiA2MykJCS8qIE5v IHN1Y2ggcGFja2V0LiAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBpID0gc3NlcXRibFtuXTsJ CQkvKiBHZXQgdGhlIHdpbmRvdyBzbG90IG51bWJlci4gKi8KKyAgICBpZiAoaSA+IC0xICYmIGkg PD0gd3Nsb3RzKSB7CisJc3NlcXRibFtuXSA9IC0xOwkJLyogSWYgdmFsaWQsIHJlbW92ZSBmcm9t IHNlcXRibCAqLworIAlzYnVmbnVtKys7CQkJLyogYW5kIGNvdW50IG9uZSBtb3JlIGZyZWUgYnVm ZmVyICovCisJc2J1ZnVzZVtpXSA9IDA7CQkJLyogYW5kIG1hcmsgaXQgYXMgZnJlZSwgKi8KKwlp ZiAod2hhdCAmIChXX1NFTkR8V19SRU1PKSkJLyogZGVjcmVtZW50IGFjdGl2ZSBzbG90cyAqLwor CSAgd2N1ci0tOwkJCS8qIGZvciBzdGF0aXN0aWNzIGFuZCBkaXNwbGF5LiAqLworICAgIH0gZWxz ZSB7CisJZGVidWcoRjEwMSwiIHNzZXF0Ymxbbl0iLCIiLHNzZXF0Ymxbbl0pOworCXJldHVybigt MSk7CisgICAgfQorCisvKiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgb25seSBzbyBkdW1wZWQgYnVm ZmVycyB3aWxsIGxvb2sgcmlnaHQuICovCisKKyAgICBpZiAoMSkgeworCSpzX3BrdFtpXS5iZl9h ZHIgPSAnXDAnOwkvKiBaZXJvIHRoZSBidWZmZXIgZGF0YSBmaWVsZCAqLworCXNfcGt0W2ldLnBr X3NlcSA9IC0xOwkJLyogSW52YWxpZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyICovCisJc19wa3Rb aV0ucGtfbGVuID0gMDsJCS8qIERhdGEgZmllbGQgbGVuZ3RoIG5vdyB6ZXJvLiAqLworCXNfcGt0 W2ldLnBrX3R5cCA9ICcgJzsJCS8qIEJsYW5rIHRoZSBwYWNrZXQgdHlwZSB0b28uICovCisJc19w a3RbaV0ucGtfcnRyID0gMDsJCS8qIEFuZCB0aGUgcmV0cmllcyBmaWVsZC4gKi8KKyAgICB9Cisg ICAgcmV0dXJuKDEpOworfQorCitpbnQKK2ZyZWVyYnVmKGkpIGludCBpOyB7CQkJLyogUmVsZWFz ZSByZWNlaXZlLWJ1ZmZlciBzbG90ICJpIi4gKi8KKyAgICBpbnQgbjsKKworLyogTk9URSAhISBD dXJyZW50bHksIHRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIGluZGljYXRlZCBidWZmZXIsIGJ1dCAq LworLyogZG9lcyBOT1QgZXJhc2UgdGhlIGRhdGEuICBUaGUgcHJvZ3JhbSBjb3VudHMgb24gdGhp cy4gIFdpbGwgZmluZCBhICovCisvKiBiZXR0ZXIgd2F5IGxhdGVyLi4uLiAqLworCisgICAgLyog ZGVidWcoRjEwMSwiZnJlZXJidWYsIHNsb3QiLCIiLGkpOyAqLworICAgIGlmIChpIDwgMCB8fCBp ID49IHdzbG90cykgewkJLyogTm8gc3VjaCBzbG90LiAqLworCWRlYnVnKEYxMDEsImZyZWVyYnVm IG5vIHN1Y2ggc2xvdCIsIiIsaSk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgbiA9IHJfcGt0 W2ldLnBrX3NlcTsJCS8qIEdldCB0aGUgcGFja2V0IHNlcXVlbmNlIG51bWJlciAqLworICAgIGRl YnVnKEYxMDEsImZyZWVyYnVmIHBhY2tldCIsIiIsbik7CisgICAgaWYgKG4gPiAtMSAmJiBuIDwg NjQpCQkvKiBJZiB2YWxpZCwgcmVtb3ZlIGZyb20gc2VxdGJsICovCisgICAgICByc2VxdGJsW25d ID0gLTE7CisgICAgaWYgKHJidWZ1c2VbaV0gIT0gMCkgewkJLyogSWYgcmVhbGx5IGFsbG9jYXRl ZCwgKi8KKwlyYnVmdXNlW2ldID0gMDsJCQkvKiBtYXJrIGl0IGFzIGZyZWUsICovCisJcmJ1Zm51 bSsrOwkJCS8qIGFuZCBjb3VudCBvbmUgbW9yZSBmcmVlIGJ1ZmZlci4gKi8KKwlpZiAod2hhdCAm IFdfUkVDVikJCS8qIEtlZXAgdHJhY2sgb2YgY3VycmVudCBzbG90cyAqLworCSAgd2N1ci0tOwkJ CS8qICBmb3Igc3RhdGlzdGljcyBhbmQgZGlzcGxheSAqLworCWRlYnVnKEYxMDEsImZyZWVyYnVm IHJidWZudW0iLCIiLHJidWZudW0pOworICAgIH0KKworLyogVGhlIGZvbGxvd2luZyBpcyBkb25l IG9ubHkgc28gZHVtcGVkIGJ1ZmZlcnMgd2lsbCBsb29rIHJpZ2h0LiAqLworCisgICAgaWYgKDEp IHsKKyAgICAgLyogKnJfcGt0W2ldLmJmX2FkciA9ICdcMCc7ICovCS8qIFplcm8gdGhlIGJ1ZmZl ciBkYXRhIGZpZWxkICovCisJcl9wa3RbaV0ucGtfc2VxID0gLTE7CQkvKiBBbmQgZnJvbSBwYWNr ZXQgbGlzdCAqLworCXJfcGt0W2ldLnBrX2xlbiA9IDA7CQkvKiBEYXRhIGZpZWxkIGxlbmd0aCBu b3cgemVyby4gKi8KKwlyX3BrdFtpXS5wa190eXAgPSAnICc7CQkvKiBCbGFuayB0aGUgcGFja2V0 IHR5cGUgdG9vLiAqLworCXJfcGt0W2ldLnBrX3J0ciA9IDA7CQkvKiBBbmQgdGhlIHJldHJpZXMg ZmllbGQuICovCisgICAgfQorICAgIHJldHVybigxKTsKK30KKworLyogVGhpcyBpcyBsaWtlIGZy ZWVyYnVmLCBleGNlcHQgaXQncyBjYWxsZWQgd2l0aCBhIHBhY2tldCBzZXF1ZW5jZSBudW1iZXIg Ki8KKy8qIHJhdGhlciB0aGFuIGEgcGFja2V0IGJ1ZmZlciBpbmRleC4gKi8KKworVk9JRAorZnJl ZXJwa3Qoc2VxKSBpbnQgc2VxOyB7CisgICAgaW50IGs7CisgICAgZGVidWcoRjEwMSwiZnJlZXJw a3Qgc2VxIiwiIixzZXEpOworICAgIGsgPSByc2VxdGJsW3NlcV07CisgICAgLyogZGVidWcoRjEw MSwiZnJlZXJwa3QgayIsIiIsayk7ICovCisgICAgaWYgKGsgPiAtMSkgeworCWsgPSBmcmVlcmJ1 ZihrKTsKKwkvKiBkZWJ1ZyhGMTAxLCJmcmVlcnBrdCBmcmVlcmJ1ZiIsIiIsayk7ICovCisgICAg fQorfQorCisKKy8qICBDIEggSyBXIEkgTiAgLS0gIENoZWNrIGlmIHBhY2tldCBuIGlzIGluIHdp bmRvdy4gKi8KKworLyogIFJldHVybnM6ICovCisvKiAgICAwIGlmIGl0IGlzIGluIHRoZSBjdXJy ZW50IHdpbmRvdywgICovCisvKiAgICsxIGlmIGl0IHdvdWxkIGhhdmUgYmVlbiBpbiBwcmV2aW91 cyB3aW5kb3cgKGUuZy4gaWYgYWNrIHdhcyBsb3N0KSwgKi8KKy8qICAgLTEgaWYgaXQgaXMgb3V0 c2lkZSBhbnkgd2luZG93IChwcm90b2NvbCBlcnJvciksICAgKi8KKy8qICAgLTIgaWYgZWl0aGVy IG9mIHRoZSBhcmd1bWVudCBwYWNrZXQgbnVtYmVycyBpcyBvdXQgb2YgcmFuZ2UuICAqLworCisv KiBDYWxsIHdpdGggcGFja2V0IG51bWJlciB0byBjaGVjayAobiksIGxvd2VzdCBwYWNrZXQgbnVt YmVyIGluIHdpbmRvdyAqLworLyogKGJvdHRvbSksIGFuZCBudW1iZXIgb2Ygc2xvdHMgaW4gd2lu ZG93IChzbG90cykuICAqLworCitpbnQKK2Noa3dpbihuLGJvdHRvbSxzbG90cykgaW50IG4sIGJv dHRvbSwgc2xvdHM7IHsKKyAgICBpbnQgdG9wLCBwcmV2OworCisgICAgZGVidWcoRjEwMSwiY2hr d2luIHBhY2tldCIsIiIsbik7CisgICAgZGVidWcoRjEwMSwiY2hrd2luIHdpbmxvIiwiIixib3R0 b20pOworICAgIGRlYnVnKEYxMDEsImNoa3dpbiBzbG90cyIsIiIsc2xvdHMpOworCisvKiBGaXJz dCBkbyB0aGUgZWFzeSBhbmQgY29tbW9uIGNhc2VzLCB3aGVyZSB0aGUgd2luZG93cyBhcmUgbm90 IHNwbGl0LiAqLworCisgICAgaWYgKG4gPCAwIHx8IG4gPiA2MyB8fCBib3R0b20gPCAwIHx8IGJv dHRvbSA+IDYzKQorICAgICAgcmV0dXJuKC0yKTsKKworICAgIGlmIChuID09IGJvdHRvbSkgcmV0 dXJuKDApOwkJLyogSW4gYSBwZXJmZWN0IHdvcmxkLi4uICovCisKKyAgICB0b3AgPSBib3R0b20g KyBzbG90czsJCS8qIENhbGN1bGF0ZSB3aW5kb3cgdG9wLiAqLworICAgIGlmICh0b3AgPCA2NCAm JiBuIDwgdG9wICYmIG4gPj0gYm90dG9tKQorICAgICAgcmV0dXJuKDApOwkJCS8qIEluIGN1cnJl bnQgd2luZG93LiAqLworCisgICAgcHJldiA9IGJvdHRvbSAtIHNsb3RzOwkJLyogQm90dG9tIG9m IHByZXZpb3VzIHdpbmRvdy4gKi8KKyAgICBpZiAocHJldiA+IC0xICYmIG4gPCBib3R0b20gJiYg biA+IHByZXYpCisgICAgICByZXR1cm4oMSk7CQkJLyogSW4gcHJldmlvdXMuICovCisKKy8qIE5v dyBjb25zaWRlciB0aGUgY2FzZSB3aGVyZSB0aGUgY3VycmVudCB3aW5kb3cgaXMgc3BsaXQuICov CisKKyAgICBpZiAodG9wID4gNjMpIHsJCQkvKiBXcmFwYXJvdW5kLi4uICovCisJdG9wIC09IDY0 OwkJCS8qIEdldCBtb2R1bG8tNjQgc2VxdWVuY2UgbnVtYmVyICovCisJaWYgKG4gPCB0b3AgfHwg biA+PSBib3R0b20pIHsKKwkgICAgcmV0dXJuKDApOwkJCS8qIEluIGN1cnJlbnQgd2luZG93LiAq LworCX0gZWxzZSB7CQkJLyogTm90IGluIGN1cnJlbnQgd2luZG93LiAqLworCSAgICBpZiAobiA8 IGJvdHRvbSAmJiBuID49IHByZXYpIC8qIFByZXZpb3VzIHdpbmRvdyBjYW4ndCBiZSBzcGxpdC4g Ki8KKwkgICAgICByZXR1cm4oMSk7CQkvKiBJbiBwcmV2aW91cyB3aW5kb3cuICovCisJICAgIGVs c2UKKwkgICAgICByZXR1cm4oLTEpOwkJLyogTm90IGluIHByZXZpb3VzIHdpbmRvdy4gKi8KKwl9 CisgICAgfQorCisvKiBOb3cgdGhlIGNhc2Ugd2hlcmUgY3VycmVudCB3aW5kb3cgbm90IHNwbGl0 LCBidXQgcHJldmlvdXMgd2luZG93IGlzLiAqLworCisgICAgaWYgKHByZXYgPCAwKSB7CQkJLyog SXMgcHJldmlvdXMgd2luZG93IHNwbGl0PyAqLworCXByZXYgKz0gNjQ7CQkJLyogWWVzLiAqLwor CWlmIChuIDwgYm90dG9tIHx8IG4gPj0gcHJldikKKwkgIHJldHVybigxKTsJCQkvKiBJbiBwcmV2 aW91cyB3aW5kb3cuICovCisgICAgfSBlbHNlIHsJCQkJLyogUHJldmlvdXMgd2luZG93IG5vdCBz cGxpdC4gKi8KKwlpZiAobiA8IGJvdHRvbSAmJiBuID49IHByZXYpCisJICByZXR1cm4oMSk7CQkJ LyogSW4gcHJldmlvdXMgd2luZG93LiAqLworICAgIH0KKworLyogSXQncyBub3QgaW4gdGhlIGN1 cnJlbnQgd2luZG93LCBhbmQgbm90IGluIHRoZSBwcmV2aW91cyB3aW5kb3cuLi4gKi8KKworICAg IHJldHVybigtMSk7CQkJCS8qIFNvIGl0J3Mgbm90IGluIGFueSB3aW5kb3cuICovCit9CisKK2lu dAorZHVtcHNidWYoKSB7CQkJCS8qIER1bXAgc2VuZC1idWZmZXJzICovCisjaWZkZWYgREVCVUcK KyAgICBpbnQgaiwgeCwgejsJCQkvKiB0byBkZWJ1ZyBsb2cuICovCisKKyAgICBpZiAoISBkZWJs b2cpIHJldHVybigwKTsKKyAgICB4ID0genNvdXRsKFpERklMRSwiU0VORCBCVUZGRVJTOiIpOwor ICAgIGlmICh4IDwgMCkgeworCWRlYmxvZyA9IDA7CisJcmV0dXJuKDApOworICAgIH0KKyAgICB4 PXpzb3V0bChaREZJTEUsImJ1ZmZlciBpbnVzZSBhZGRyZXNzIGxlbmd0aCBkYXRhIHR5cGUgc2Vx IGZsYWcgcmV0cmllcyIpOworICAgIGlmICh4IDwgMCkgeworCWRlYmxvZyA9IDA7CisJcmV0dXJu KDApOworICAgIH0KKyAgICBmb3IgKGogPSAwOyBqIDwgd3Nsb3RzOyBqKyspIHsKKwlpZiAoIXNi dWZ1c2Vbal0pCisJICBjb250aW51ZTsKKwl6ID0gKCh1bnNpZ25lZCBsb25nKShzX3BrdFtqXS5i Zl9hZHIpKSAmIDB4ZmZmZjsKKworCXNwcmludGYoeGJ1ZiwJCQkvKiBzYWZlICgyMDApICovCisJ CSIlNGQlNmQlMTBkJTVkJTZkJTRjJTVkJTZkXG4iLAorCQlqLAorCQlzYnVmdXNlW2pdLAorCQkv KiBBdm9pZCB3YXJuaW5ncyB3aGVuIGFkZHJlc3NlcyBhcmUgYmlnZ2VyIHRoYW4gaW50cyAqLwor CQl6LAorCQlzX3BrdFtqXS5iZl9sZW4sCisJCXNfcGt0W2pdLnBrX2xlbiwKKwkJc19wa3Rbal0u cGtfdHlwLAorCQlzX3BrdFtqXS5wa19zZXEsCisJCXNfcGt0W2pdLnBrX3J0cgorCQkpOworCWlm ICh6c291dChaREZJTEUseGJ1ZikgPCAwKSAgeworCSAgICBkZWJsb2cgPSAwOworCSAgICByZXR1 cm4oMCk7CisJfQorCWlmIChzX3BrdFtqXS5wa19hZHIpIHsKKwkgICAgeCA9IChpbnQpc3RybGVu KChjaGFyICopIHNfcGt0W2pdLnBrX2Fkcik7CisJICAgIGlmICh4KQorCSAgICAgIHNwcmludGYo eGJ1ZiwJCS8qIHNhZmUgKGNoZWNrZWQpICovCisJCSAgICAgICJbJS43MnMlc11cbiIsc19wa3Rb al0ucGtfYWRyLCB4ID4gNzIgPyAiLi4uIiA6ICIiKTsKKwkgICAgZWxzZQorCSAgICAgIHNwcmlu dGYoeGJ1ZiwiWyhlbXB0eSBzdHJpbmcpXVxuIik7IC8qIHNhZmUgKDIwMCkgKi8KKwl9IGVsc2Ug eworCSAgICBzcHJpbnRmKHhidWYsIlsobnVsbCBwb2ludGVyKV1cbiIpOwkvKiBzYWZlICgyMDAp ICovCisJfQorCWlmICh6c291dChaREZJTEUseGJ1ZikgPCAwKSB7CisJICAgIGRlYmxvZyA9IDA7 CisJICAgIHJldHVybigwKTsKKwl9CisgICAgfQorICAgIHNwcmludGYoeGJ1ZiwiZnJlZTogJWQs IHdpbmxvOiAlZFxuIiwgc2J1Zm51bSwgd2lubG8pOyAvKiBzYWZlICgyMDApICovCisgICAgaWYg KHpzb3V0KFpERklMRSx4YnVmKSA8IDApIHsKKwlkZWJsb2cgPSAwOworCXJldHVybigwKTsKKyAg ICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByZXR1cm4oMCk7Cit9CitpbnQKK2R1bXByYnVm KCkgewkJCQkvKiBEdW1wIHJlY2VpdmUtYnVmZmVycyAqLworI2lmZGVmIERFQlVHCisgICAgaW50 IGosIHgsIHo7CisgICAgaWYgKCEgZGVibG9nKSByZXR1cm4oMCk7CisgICAgaWYgKHpzb3V0bCha REZJTEUsIlJFQ0VJVkUgQlVGRkVSUzoiKSA8IDApIHsKKwlkZWJsb2cgPSAwOworCXJldHVybigw KTsKKyAgICB9CisgICAgeD16c291dGwoWkRGSUxFLCJidWZmZXIgaW51c2UgYWRkcmVzcyBsZW5n dGggZGF0YSB0eXBlIHNlcSBmbGFnIHJldHJpZXMiKTsKKyAgICBpZiAoeCA8IDApIHsKKwlkZWJs b2cgPSAwOworCXJldHVybigwKTsKKyAgICB9CisgICAgZm9yICggaiA9IDA7IGogPCB3c2xvdHM7 IGorKyApIHsKKwlpZiAoIXJidWZ1c2Vbal0pCisJICBjb250aW51ZTsKKwl6ID0gKCh1bnNpZ25l ZCBsb25nKShyX3BrdFtqXS5iZl9hZHIpKSAmIDB4ZmZmZjsKKwlzcHJpbnRmKHhidWYsCQkJLyog MjAwLCBzYWZlICovCisJCSIlNGQlNmQlMTBkJTVkJTZkJTRjJTVkJTZkXG4iLAorCQlqLAorCQly YnVmdXNlW2pdLAorCQkvKiBBdm9pZCB3YXJuaW5ncyB3aGVuIGFkZHJlc3NlcyBhcmUgYmlnZ2Vy IHRoYW4gaW50cyAqLworCQl6LAorCQlyX3BrdFtqXS5iZl9sZW4sCisJCXJfcGt0W2pdLnBrX2xl biwKKwkJcl9wa3Rbal0ucGtfdHlwLAorCQlyX3BrdFtqXS5wa19zZXEsCisJCXJfcGt0W2pdLnBr X3J0cgorCQkpOworCWlmICh6c291dChaREZJTEUseGJ1ZikgPCAwKSB7CisJICAgIGRlYmxvZyA9 IDA7CisJICAgIHJldHVybigwKTsKKwl9CisJeCA9IChpbnQpc3RybGVuKChjaGFyICopcl9wa3Rb al0uYmZfYWRyKTsKKwlzcHJpbnRmKHhidWYsCQkJLyogc2FmZSAoY2hlY2tlZCkgKi8KKwkJIlsl LjcycyVzXVxuIixyX3BrdFtqXS5iZl9hZHIsIHggPiA3MiA/ICIuLi4iIDogIiIpOworCWlmICh6 c291dChaREZJTEUseGJ1ZikgPCAwKSAgeworCSAgICBkZWJsb2cgPSAwOworCSAgICByZXR1cm4o MCk7CisJfQorICAgIH0KKyAgICBzcHJpbnRmKHhidWYsImZyZWU6ICVkLCB3aW5sbzogJWRcbiIs IHJidWZudW0sIHdpbmxvKTsgLyogc2FmZSAoMjAwKSAqLworICAgIGlmICh6c291dChaREZJTEUs eGJ1ZikgPCAwKSAgeworCWRlYmxvZyA9IDA7CisJcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworICAgIHJldHVybigwKTsKK30KKworLyogIFMgQSBUIFQgUiAgLS0gIFNlbmQg YW4gQXR0cmlidXRlIFBhY2tldCAgKi8KKworLyoKKyAgU2VuZHMgYXR0cmlidXRlIHBhY2tldChz KSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gIElmIHRoZSBpbmZvIHdpbGwgbm90CisgIGZpdCBpbnRv IG9uZSBwYWNrZXQsIGl0IGNhbiBiZSBjYWxsZWQgcmVwZWF0ZWRseSB1bnRpbCBhbGwgdGhlIGZp ZWxkcworICB0aGF0IHdpbGwgZml0IGFyZSBzZW50LgorCisgIENhbGwgd2l0aDoKKyAgICB4cCA9 PSAwIGlmIHdlJ3JlIHNlbmRpbmcgYSByZWFsIGZpbGUgKEYgcGFja2V0KSwgb3I6CisgICAgeHAg IT0gMCBmb3Igc2NyZWVuIGRhdGEgKFggcGFja2V0KS4KKyAgQW5kOgorICAgIGZsYWcgPT0gMSBm b3IgZmlyc3QgQSBwYWNrZXQKKyAgICBmbGFnID09IDAgZm9yIHN1YnNlcXVlbnQgQSBwYWNrZXRz LgorICBSZXR1cm5zOgorICAgIDEgb3IgZ3JlYXRlciBpZiBhbiBBIHBhY2tldCB3YXMgc2VudCwg b3I6CisgICAgMCBpZiBhbiBTLXBhY2tldCB3YXMgbm90IHNlbnQgYmVjYXVzZSB0aGVyZSB3YXMg bm8gZGF0YSB0byBzZW5kIG9yCisgICAgICB0aGVyZSB3YXMgbm8gZGF0YSBsZWZ0IHRoYXQgd2Fz IHNob3J0IGVub3VnaCB0byBzZW5kLCBvcjoKKyAgIC0xIG9uIGFueSBraW5kIG9mIGVycm9yLgor Ki8KKworLyogKGRvbid0KSAjZGVmaW5lIFRTT0ZPUk1BVCAqLworLyogd2hpY2ggd2FzIG9ubHkg Zm9yIG1ha2luZyBDLUtlcm1pdCBzZW5kIFRTTy1LZXJtaXQtbGlrZSBBIHBhY2tldHMgKi8KKy8q IHRvIHRyeSB0byB0cmFjayBkb3duIGEgcHJvYmxlbSBzb21lYm9keSByZXBvcnRlZC4uLiAqLwor CitpbnQKK3NhdHRyKHhwLCBmbGFnKSBpbnQgeHAsIGZsYWc7IHsJCS8qIFNlbmQgQXR0cmlidXRl cyAqLworCisgICAgc3RhdGljIGludCBtYXg7CQkJLyogTWF4aW11bSBsZW5ndGggZm9yIEF0dHJp YnV0ZXMgKi8KKyAgICBzdGF0aWMgc2hvcnQgZG9uZVs5NV07CQkvKiBGaWVsZC1jb21wbGV0ZSBh cnJheSAqLworICAgIHN0YXRpYyBzdHJ1Y3QgemF0dHIgeDsJCS8qIEZpbGUgYXR0cmlidXRlIHN0 cnVjdCAqLworICAgIHN0YXRpYyBjaGFyIHhkYXRlWzI0XTsKKworICAgIGV4dGVybiBjaGFyICog Y2tzeXNpZDsKKworICAgIC8qIFNvbWUgZXh0cmEgZmxhZ3MgYXJlIHVzZWQgYmVjYXVzZSB0aGUg ImRvbmUiIGFycmF5IGlzIHNwYXJzZSAqLworCisgICAgaW50IGksIGosIHJjLCBhbG4sIGxlZnQg PSAwLCBudW1zZXQgPSAwLCB4YmluID0gMDsgLyogV29ya2VycyAqLworICAgIGludCBub3RhZmls ZSA9IDA7CisgICAgY2hhciAqdHAsIGM7CisKKyAgICBub3RhZmlsZSA9IHNuZGFycmF5IHx8IHBp cGVzZW5kIHx8CisjaWZkZWYgUElQRVNFTkQKKyAgICAgIHNuZGZpbHRlciB8fAorI2VuZGlmIC8q IFBJUEVTRU5EICovCisJY2FsaWJyYXRlOworCisgICAgZGVidWcoRjEwMSwic2F0dHIgZmxhZyIs IiIsZmxhZyk7CisgICAgaWYgKCFmbGFnKQkJCQkvKiBObyBtb3JlIGF0dHJpYnV0ZXMgdG8gc2Vu ZCAqLworICAgICAgaWYgKGRvbmVbeHVuY2hhcignQCcpXSkKKwlyZXR1cm4oMCk7CisKKyAgICAv KiBJbml0aWFsaXplIEF0dHJpYnV0ZSBtZWNoYW5pc20gKi8KKworICAgIGlmIChmbGFnKSB7CQkJ CS8qIEZpcnN0IHRpbWUgaGVyZSBmb3IgdGhpcyBmaWxlPyAqLworCWluaXRhdHRyKCZ4KTsJCQkv KiBCbGFuayBvdXQgYWxsIHRoZSBmaWVsZHMuICovCisJZm9yIChqID0gMDsgaiA8IDk1OyBqKysp CS8qIEluaXQgYXJyYXkgb2YgY29tcGxldGVkIGZpZWxkcyAqLworCSAgZG9uZVtqXSA9IDA7CisJ bWF4ID0gbWF4ZGF0YSgpOwkJLyogR2V0IG1heGltdW0gZGF0YSBmaWVsZCBsZW5ndGggKi8KKwlp ZiAobm90YWZpbGUgfHwgeHAgPT0gMSkgewkvKiBJcyBpdCBub3QgYSByZWFsIGZpbGU/ICovCisJ ICAgIGV4dGVybiBjaGFyICogenpuZGF0ZSgpOworCSAgICBjaGFyICogcDsKKwkgICAgaW50IGk7 CisjaWZkZWYgQ0FMSUJSQVRFCisJICAgIGlmIChjYWxpYnJhdGUpIHsJCS8qIENhbGlicmF0aW9u IHJ1bi4uLiAqLworCQl4Lmxlbmd0aGsgPSBjYWxpYnJhdGUgLyAxMDI0TDsgLyogV2Uga25vdyB0 aGUgbGVuZ3RoICovCisJCXgubGVuZ3RoID0gY2FsaWJyYXRlOworCSAgICB9CisjZW5kaWYgLyog Q0FMSUJSQVRFICovCisJICAgIHguc3lzdGVtaWQudmFsID0gY2tzeXNpZDsJLyogU3lzdGVtIElE ICovCisJICAgIHguc3lzdGVtaWQubGVuID0gKGludClzdHJsZW4oY2tzeXNpZCk7CisJICAgIGNr c3RybmNweSh4ZGF0ZSx6em5kYXRlKCksMjQpOworCSAgICB4ZGF0ZVs4XSA9IFNQOworCSAgICB6 dGltZSgmcCk7CisJICAgIGZvciAoaSA9IDExOyBpIDwgMTk7IGkrKykJLyogY29weSBoaDptbTpz cyAqLworCSAgICAgIHhkYXRlW2kgLSAyXSA9IHBbaV07CS8qIHRvIHhkYXRlICovCisJICAgIHhk YXRlWzE3XSA9IE5VTDsJCS8qIHRlcm1pbmF0ZSAqLworCSAgICB4LmRhdGUudmFsID0geGRhdGU7 CisJICAgIHguZGF0ZS5sZW4gPSAxNzsKKwkgICAgZGVidWcoRjExMSwic2F0dHIgbm90YWZpbGUg ZGF0ZSIseC5kYXRlLnZhbCx4LmRhdGUubGVuKTsKKwl9IGVsc2UgewkJCS8qIFJlYWwgZmlsZSAq LworCSAgICByYyA9IHpzYXR0cigmeCk7CQkvKiBHZXQgYXR0cmlidXRlcyBmb3IgdGhpcyBmaWxl ICAqLworCSAgICBkZWJ1ZyhGMTAxLCJzYXR0ciB6c2F0dHIiLCIiLHJjKTsKKwkgICAgaWYgKHJj IDwgMCkJCQkvKiBDYW4ndCBnZXQgJ2VtIHNvIGRvbid0IHNlbmQgJ2VtICovCisJICAgICAgcmV0 dXJuKDApOworCSAgICBkZWJ1ZyhGMTAxLCJzYXR0ciBpbml0IG1heCIsIiIsbWF4KTsKKwl9Cisg ICAgfQorICAgIGlmIChueHRwa3QoKSA8IDApCQkJLyogR290ICdlbSwgZ2V0IG5leHQgcGFja2V0 IG51bWJlciAqLworICAgICAgcmV0dXJuKC0xKTsJCQkvKiBCYWQgbmV3cyBpZiB3ZSBjYW4ndCAq LworCisgICAgaSA9IDA7CQkJCS8qIEluaXQgZGF0YSBmaWVsZCBjaGFyYWN0ZXIgbnVtYmVyICov CisKKyAgICAvKiBEbyBlYWNoIGF0dHJpYnV0ZSB1c2luZyBmaXJzdC1maXQgbWV0aG9kLCBtYXJr aW5nIGFzIHdlIGdvICovCisgICAgLyogVGhpcyBpcyByYXRoZXIgbG9uZyBhbmQgcmVwaXRpdGlv dXMgLSBjb3VsZCBiZSBkb25lIG1vcmUgY2xldmVybHkgKi8KKworICAgIGlmIChhdHNpZG8gJiYg IWRvbmVbeHVuY2hhcihjID0gJy4nKV0pIHsgLyogU3lzdGVtIHR5cGUgKi8KKwlpZiAobWF4IC0g aSA+PSB4LnN5c3RlbWlkLmxlbiArIDIpIHsgLyogRW5vdWdoIHNwYWNlID8gKi8KKwkgICAgZGF0 YVtpKytdID0gYzsJCSAgICAgLyogWWVzLCBhZGQgcGFyYW1ldGVyICovCisJICAgIGRhdGFbaSsr XSA9IHRvY2hhcih4LnN5c3RlbWlkLmxlbik7CSAvKiBBZGQgbGVuZ3RoICovCisJICAgIGZvciAo aiA9IDA7IGogPCB4LnN5c3RlbWlkLmxlbjsgaisrKSAvKiBBZGQgZGF0YSAqLworCSAgICAgIGRh dGFbaSsrXSA9IHguc3lzdGVtaWQudmFsW2pdOworCSAgICBudW1zZXQrKzsJCQkvKiBDb3VudCB0 aGF0IHdlIGRpZCBhdCBsZWFzdCBvbmUgKi8KKwkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7CS8q IE1hcmsgdGhpcyBhdHRyaWJ1dGUgYXMgZG9uZSAqLworCX0gZWxzZQkJCQkvKiBObyAqLworCSAg bGVmdCsrOwkJCS8qIHNvIG1hcmsgdGhpcyBvbmUgbGVmdCB0byBkbyAqLworICAgIH0KKyNpZmRl ZiBTVFJBVFVTCisgICAgaWYgKGF0Y3JlbyAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnJCcpXSkgeyAv KiBDcmVhdG9yICovCisJaWYgKG1heCAtIGkgPj0geC5jcmVhdG9yLmxlbiArIDIpIHsgLyogRW5v dWdoIHNwYWNlID8gKi8KKwkgICAgZGF0YVtpKytdID0gYzsKKwkgICAgZGF0YVtpKytdID0gdG9j aGFyKHguY3JlYXRvci5sZW4pOworCSAgICBmb3IgKGogPSAwOyBqIDwgeC5jcmVhdG9yLmxlbjsg aisrKQorCSAgICAgIGRhdGFbaSsrXSA9IHguY3JlYXRvci52YWxbal07CisJICAgIG51bXNldCsr OworCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsKKwl9IGVsc2UKKwkgIGxlZnQrKzsKKyAgICB9 CisgICAgaWYgKGF0YWN0byAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnJScpXSkgeyAvKiBGaWxlIGFj Y291bnQgKi8KKwlpZiAobWF4IC0gaSA+PSB4LmFjY291bnQubGVuICsgMikgeworCSAgICBkYXRh W2krK10gPSBjOworCSAgICBkYXRhW2krK10gPSB0b2NoYXIoeC5hY2NvdW50Lmxlbik7CisJICAg IGZvciAoaiA9IDA7IGogPCB4LmFjY291bnQubGVuOyBqKyspCisJICAgICAgZGF0YVtpKytdID0g eC5hY2NvdW50LnZhbFtqXTsKKwkgICAgbnVtc2V0Kys7CisJICAgIGRvbmVbeHVuY2hhcihjKV0g PSAxOworCX0gZWxzZQorCSAgbGVmdCsrOworICAgIH0KKyAgICBpZiAoYXRmcm1vICYmICFkb25l W3h1bmNoYXIoYyA9ICcvJyldKSB7IC8qIFBhY2tldCBkYXRhIGZvcm1hdCAqLworCWlmIChtYXgg LSBpID49IHgucmVjZm0ubGVuICsgMikgeworCSAgICBkYXRhW2krK10gPSBjOworCSAgICBkYXRh W2krK10gPSB0b2NoYXIoeC5yZWNmbS5sZW4pOyAvKiAgQ29weSBmcm9tIGF0dHIgc3RydWN0dXJl ICovCisJICAgIGZvciAoaiA9IDA7IGogPCB4LnJlY2ZtLmxlbjsgaisrKQorCSAgICAgIGRhdGFb aSsrXSA9IHgucmVjZm0udmFsW2pdOworCSAgICBudW1zZXQrKzsKKwkgICAgZG9uZVt4dW5jaGFy KGMpXSA9IDE7CisJfSBlbHNlCisJICBsZWZ0Kys7CisgICAgfQorI2VuZGlmIC8qIFNUUkFUVVMg Ki8KKworICAgIHhiaW4gPQkJCQkvKiBJcyB0aGUgdHJhbnNmZXIgaW4gYmluYXJ5IG1vZGU/ICov CisjaWZkZWYgVk1TCisgICAgICBiaW5hcnkgPT0gWFlGVF9JIHx8IGJpbmFyeSA9PSBYWUZUX0wg fHwgLyogSU1BR0Ugb3IgTEFCRUxFRCAqLworCSFzdHJuY21wKHgucmVjZm0udmFsLCJGIiwxKQkv KiBvciBSRUNGTT1GeHh4eHh4ICovCisjZWxzZQorICAgICAgYmluYXJ5CQkJCS8qIFVzZXIgc2Fp ZCBTRVQgRklMRSBUWVBFIEJJTkFSWSAgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwk7CisKKyAgICBp ZiAoYXR0eXBvICYmICFkb25lW3h1bmNoYXIoYyA9ICciJyldKSB7IC8qIEZpbGUgdHlwZSAqLwor CWlmIChtYXggLSBpID49IDUpIHsJCS8qIE1heCBsZW5ndGggZm9yIHRoaXMgZmllbGQgKi8KKwkg ICAgZGF0YVtpKytdID0gYzsKKwkgICAgaWYgKHhiaW4pIHsJCQkvKiBCaW5hcnkgKi8KKwkJZGF0 YVtpKytdID0gdG9jaGFyKDIpOwkvKiAgVHdvIGNoYXJhY3RlcnMgKi8KKwkJZGF0YVtpKytdID0g J0InOwkvKiAgQiBmb3IgQmluYXJ5ICovCisJCWRhdGFbaSsrXSA9ICc4JzsJLyogIDgtYml0IGJ5 dGVzIChub3RlIGFzc3VtcHRpb24uLi4pICovCisjaWZkZWYgQ0tfTEFCRUxFRAorCQlpZiAoYmlu YXJ5ICE9IFhZRlRfTAorI2lmZGVmIFZNUworCQkgICAgJiYgYmluYXJ5ICE9IFhZRlRfSQorI2Vu ZGlmIC8qIFZNUyAqLworCQkgICAgKQorCQkgIGJpbmFyeSA9IFhZRlRfQjsKKyNlbmRpZiAvKiBD S19MQUJFTEVEICovCisJICAgIH0gZWxzZSB7CQkJLyogVGV4dCAqLworI2lmZGVmIFRTT0ZPUk1B VAorCQlkYXRhW2krK10gPSB0b2NoYXIoMSk7CS8qICBPbmUgY2hhcmFjdGVyICovCisJCWRhdGFb aSsrXSA9ICdBJzsJLyogIEEgPSAoZXh0ZW5kZWQpIEFTQ0lJIHdpdGggQ1JMRnMgKi8KKyNlbHNl CisJCWRhdGFbaSsrXSA9IHRvY2hhcigzKTsJLyogIFRocmVlIGNoYXJhY3RlcnMgKi8KKwkJZGF0 YVtpKytdID0gJ0EnOwkvKiAgQSA9IChleHRlbmRlZCkgQVNDSUkgd2l0aCBDUkxGcyAqLworCQlk YXRhW2krK10gPSAnTSc7CS8qICBNIGZvciBjYXJyaWFnZSByZXR1cm4gKi8KKwkJZGF0YVtpKytd ID0gJ0onOwkvKiAgSiBmb3IgbGluZWZlZWQgKi8KKyNlbmRpZiAvKiBUU09GT1JNQVQgKi8KKwor I2lmZGVmIFZNUworCQliaW5hcnkgPSBYWUZUX1Q7CS8qIFdlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0 ZWQgdGV4dCAqLworI2VuZGlmIC8qIFZNUyAqLworCSAgICB9CisJICAgIG51bXNldCsrOworCSAg ICBkb25lW3h1bmNoYXIoYyldID0gMTsKKwl9IGVsc2UKKwkgIGxlZnQrKzsKKyAgICB9CisKKyNp ZmRlZiBUU09GT1JNQVQKKyAgICBpZiAoYXR0eXBvICYmICF4YmluICYmICFkb25lW3h1bmNoYXIo YyA9ICcvJyldKSB7IC8qIFJlY29yZCBmb3JtYXQgKi8KKwlpZiAobWF4IC0gaSA+PSA1KSB7CisJ ICAgIGRhdGFbaSsrXSA9IGM7CisJICAgIGRhdGFbaSsrXSA9IHRvY2hhcigzKTsJLyogIFRocmVl IGNoYXJhY3RlcnMgKi8KKwkgICAgZGF0YVtpKytdID0gJ0EnOwkJLyogIEEgPSB2YXJpYWJsZSB3 aXRoIENSTEZzICovCisJICAgIGRhdGFbaSsrXSA9ICdNJzsJCS8qICBNIGZvciBjYXJyaWFnZSBy ZXR1cm4gKi8KKwkgICAgZGF0YVtpKytdID0gJ0onOwkJLyogIEogZm9yIGxpbmVmZWVkICovCisJ fQorICAgIH0KKyNlbmRpZiAvKiBUU09GT1JNQVQgKi8KKworICAgIGlmIChhdHR5cG8gJiYgIXhi aW4gJiYgIWRvbmVbeHVuY2hhcihjID0gJyonKV0pIHsgLyogVGV4dCBlbmNvZGluZyAqLworI2lm ZGVmIE5PQ1NFVFMKKwlpZiAobWF4IC0gaSA+PSAzKSB7CisJICAgIGRhdGFbaSsrXSA9IGM7CisJ ICAgIGRhdGFbaSsrXSA9IHRvY2hhcigxKTsJLyogTGVuZ3RoIG9mIHZhbHVlIGlzIDEgKi8KKwkg ICAgZGF0YVtpKytdID0gJ0EnOwkJLyogQSBmb3IgQVNDSUkgKi8KKwkgICAgbnVtc2V0Kys7CisJ ICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOworCX0gZWxzZQorCSAgbGVmdCsrOworI2Vsc2UKKwlp ZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8ICF4ZnJ4bGEpIHsJLyogVHJhbnNmZXIgY2hhcmFj dGVyIHNldCAqLworCSAgICBpZiAobWF4IC0gaSA+PSAzKSB7CisJCWRhdGFbaSsrXSA9IGM7CQkv KiBFbmNvZGluZyAqLworCQlkYXRhW2krK10gPSB0b2NoYXIoMSk7CS8qIExlbmd0aCBvZiB2YWx1 ZSBpcyAxICovCisJCWRhdGFbaSsrXSA9ICdBJzsJLyogQSBmb3IgQVNDSUkgKGkuZS4gdGV4dCkg Ki8KKwkJbnVtc2V0Kys7CisJCWRvbmVbeHVuY2hhcihjKV0gPSAxOworCSAgICB9IGVsc2UKKwkg ICAgICBsZWZ0Kys7CisJfSBlbHNlIHsKKwkgICAgdHAgPSB0Y3NpbmZvW3RjaGFyc2V0XS5kZXNp Z25hdG9yOworCSAgICBpZiAoIXRwKSB0cCA9ICIiOworCSAgICBhbG4gPSBzdHJsZW4odHApOwor CSAgICBpZiAoYWxuID4gMCkgeworCQlpZiAobWF4IC0gaSA+PSBhbG4gKyAyKSB7CisJCSAgICBk YXRhW2krK10gPSBjOwkvKiBFbmNvZGluZyAqLworCQkgICAgZGF0YVtpKytdID0gdG9jaGFyKGFs bisxKTsgLyogTGVuZ3RoIG9mIGRlc2lnbmF0b3IuICovCisJCSAgICBkYXRhW2krK10gPSAnQyc7 IC8qIFRleHQgaW4gc3BlY2lmaWVkIGNoYXJzZXQuICovCisJCSAgICBmb3IgKGogPSAwOyBqIDwg YWxuOyBqKyspIC8qIENvcHkgZGVzaWduYXRvciAqLworCQkgICAgICBkYXRhW2krK10gPSAqdHAr KzsgLyogIEV4YW1wbGU6IComSTYvMTAwICovCisJCSAgICBudW1zZXQrKzsKKwkJICAgIGRvbmVb eHVuY2hhcihjKV0gPSAxOworCQl9IGVsc2UKKwkJICBsZWZ0Kys7CisJICAgIH0gZWxzZQorCSAg ICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOworCX0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAg fQorICAgIGlmIChhdGRhdG8gJiYgIWRvbmVbeHVuY2hhcihjID0gJyMnKV0gJiYgLyogQ3JlYXRp b24gZGF0ZSwgaWYgYW55ICovCisJKGFsbiA9IHguZGF0ZS5sZW4pID4gMCkgeworCWlmIChtYXgg LSBpID49IGFsbiArIDIpIHsKKwkgICAgZGF0YVtpKytdID0gYzsKKwkgICAgZGF0YVtpKytdID0g dG9jaGFyKGFsbik7CisJICAgIGZvciAoaiA9IDA7IGogPCBhbG47IGorKykKKwkgICAgICBkYXRh W2krK10gPSB4LmRhdGUudmFsW2pdOworCSAgICBudW1zZXQrKzsKKwkgICAgZG9uZVt4dW5jaGFy KGMpXSA9IDE7CisJfSBlbHNlCisJICBsZWZ0Kys7CisgICAgfQorICAgIC8qIEZpbGUgbGVuZ3Ro IGluIEsgKi8KKyAgICBpZiAoYXRsZW5vICYmICFkb25lW3h1bmNoYXIoYyA9ICchJyldICYmIHgu bGVuZ3RoayA+IChDS19PRkZfVCktMSkgeworI2lmZGVmIENPTU1FTlQKKwlzcHJpbnRmKChjaGFy ICopICZkYXRhW2krMl0sIiVsZCIseC5sZW5ndGhrKTsgLyogc2FmZSAqLworI2Vsc2UKKwlja3N0 cm5jcHkoKGNoYXIgKikmZGF0YVtpKzJdLGNrZnN0b2EoeC5sZW5ndGhrKSwzMik7CisjZW5kaWYJ LyogQ09NTUVOVCAqLworCWFsbiA9IChpbnQpc3RybGVuKChjaGFyICopKGRhdGEraSsyKSk7CisJ aWYgKG1heCAtIGkgPj0gYWxuICsgMikgeworCSAgICBkYXRhW2ldID0gYzsKKwkgICAgZGF0YVtp KzFdID0gdG9jaGFyKGFsbik7CisJICAgIGkgKz0gYWxuICsgMjsKKwkgICAgbnVtc2V0Kys7CisJ ICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOworCX0gZWxzZSB7CisJICAgIGRhdGFbaV0gPSBOVUw7 CisJICAgIGxlZnQrKzsKKwl9CisgICAgfQorICAgIC8qIEZpbGUgbGVuZ3RoIGluIGJ5dGVzICov CisgICAgaWYgKGF0bGVubyAmJiAhZG9uZVt4dW5jaGFyKGMgPSAnMScpXSAmJiB4Lmxlbmd0aCA+ IChDS19PRkZfVCktMSkgeworI2lmZGVmIENPTU1FTlQKKwlzcHJpbnRmKChjaGFyICopICZkYXRh W2krMl0sIiVsZCIseC5sZW5ndGgpOyAvKiBzYWZlICovCisjZWxzZQorCWNrc3RybmNweSgoY2hh ciAqKSZkYXRhW2krMl0sY2tmc3RvYSh4Lmxlbmd0aCksMzIpOworI2VuZGlmCS8qIENPTU1FTlQg Ki8KKwlhbG4gPSAoaW50KXN0cmxlbigoY2hhciAqKShkYXRhK2krMikpOworCWlmIChtYXggLSBp ID49IGFsbiArIDIpIHsKKwkgICAgZGF0YVtpXSA9IGM7CisJICAgIGRhdGFbaSsxXSA9IHRvY2hh cihhbG4pOworCSAgICBpICs9IGFsbiArIDI7CisJICAgIG51bXNldCsrOworCSAgICBkb25lW3h1 bmNoYXIoYyldID0gMTsKKwl9IGVsc2UgeworCSAgICBkYXRhW2ldID0gTlVMOworCSAgICBsZWZ0 Kys7CisJfQorICAgIH0KKyNpZmRlZiBDS19QRVJNUworICAgIGlmIChhdGxwcm8gJiYgIWRvbmVb eHVuY2hhcihjID0gJywnKV0gJiYgLyogTG9jYWwgcHJvdGVjdGlvbiAqLworCShhbG4gPSB4Lmxw cm90ZWN0LmxlbikgPiAwICYmICFub3RhZmlsZSAmJiB4cCA9PSAwKSB7CisJaWYgKG1heCAtIGkg Pj0gYWxuICsgMikgeworCSAgICBkYXRhW2krK10gPSBjOworCSAgICBkYXRhW2krK10gPSB0b2No YXIoYWxuKTsKKwkgICAgZm9yIChqID0gMDsgaiA8IGFsbjsgaisrKQorCSAgICAgIGRhdGFbaSsr XSA9IHgubHByb3RlY3QudmFsW2pdOworCSAgICBudW1zZXQrKzsKKwkgICAgZG9uZVt4dW5jaGFy KGMpXSA9IDE7CisJfSBlbHNlCisJICBsZWZ0Kys7CisgICAgfQorICAgIGlmIChhdGdwcm8gJiYg IWRvbmVbeHVuY2hhcihjID0gJy0nKV0gJiYgLyogR2VuZXJpYyBwcm90ZWN0aW9uICovCisJKGFs biA9IHguZ3Byb3RlY3QubGVuKSA+IDAgJiYgIW5vdGFmaWxlICYmIHhwID09IDApIHsKKwlpZiAo bWF4IC0gaSA+PSBhbG4gKyAyKSB7CisJICAgIGRhdGFbaSsrXSA9IGM7CisJICAgIGRhdGFbaSsr XSA9IHRvY2hhcihhbG4pOworCSAgICBmb3IgKGogPSAwOyBqIDwgYWxuOyBqKyspCisJICAgICAg ZGF0YVtpKytdID0geC5ncHJvdGVjdC52YWxbal07CisJICAgIG51bXNldCsrOworCSAgICBkb25l W3h1bmNoYXIoYyldID0gMTsKKwl9IGVsc2UKKwkgIGxlZnQrKzsKKyAgICB9CisjZW5kaWYgLyog Q0tfUEVSTVMgKi8KKyAgICBpZiAoYXRibGtvICYmIGZibGtzaXogJiYgIWRvbmVbeHVuY2hhcihj ID0gJygnKV0gJiYKKwkhbm90YWZpbGUgJiYgeHAgPT0gMCkgewkvKiBCbG9ja3NpemUgKi8KKwlz cHJpbnRmKChjaGFyICopICZkYXRhW2krMl0sIiVkIixmYmxrc2l6KTsgLyogc2FmZSAqLworCWFs biA9IChpbnQpc3RybGVuKChjaGFyICopKGRhdGEraSsyKSk7CisJaWYgKG1heCAtIGkgPj0gYWxu ICsgMikgeworCSAgICBkYXRhW2ldID0gYzsKKwkgICAgZGF0YVtpKzFdID0gdG9jaGFyKGFsbik7 CisJICAgIGkgKz0gYWxuICsgMjsKKwkgICAgbnVtc2V0Kys7CisJICAgIGRvbmVbeHVuY2hhcihj KV0gPSAxOworCX0gZWxzZSB7CisJICAgIGRhdGFbaV0gPSBOVUw7CisJICAgIGxlZnQrKzsKKwl9 CisgICAgfQorI2lmbmRlZiBOT0ZSSUxMUworICAgIGlmICgocnByaW50ZiB8fCBybWFpbGYpICYm IGF0ZGlzbyAmJiAvKiBNQUlMLCBvciBSRU1PVEUgUFJJTlQ/ICAqLworCSFkb25lW3h1bmNoYXIo YyA9ICcrJyldKSB7CisJYWxuID0gKGludCkgc3RybGVuKG9wdGJ1ZikgKyAxOwkvKiBPcHRpb25z LCBpZiBhbnkgKi8KKwlpZiAobWF4IC0gaSA+PSBhbG4gKyAyKSB7CisJICAgIGRhdGFbaSsrXSA9 IGM7CQkvKiBEaXNwb3NpdGlvbiAqLworCSAgICBkYXRhW2krK10gPSB0b2NoYXIoYWxuKTsJLyog T3B0aW9ucywgaWYgYW55ICovCisJICAgIGlmIChycHJpbnRmKQorCSAgICAgIGRhdGFbaSsrXSA9 ICdQJzsJCS8qIFAgZm9yIFByaW50ICovCisJICAgIGVsc2UKKwkgICAgICBkYXRhW2krK10gPSAn TSc7CQkvKiBNIGZvciBNYWlsICovCisJICAgIGZvciAoaiA9IDA7IG9wdGJ1ZltqXTsgaisrKQkv KiBDb3B5IGFueSBvcHRpb25zICovCisJICAgICAgZGF0YVtpKytdID0gb3B0YnVmW2pdOworCSAg ICBudW1zZXQrKzsKKwkgICAgZG9uZVt4dW5jaGFyKGMpXSA9IDE7CisJfSBlbHNlIHsKKwkgICAg ZGF0YVtpXSA9IE5VTDsKKwkgICAgbGVmdCsrOworCX0KKyAgICB9CisjZW5kaWYgLyogTk9GUklM TFMgKi8KKyNpZmRlZiBDS19SRVNFTkQKKyAgICBpZiAoc2VuZG1vZGUgPT0gU01fUkVTRU5EICYm ICFkb25lW3h1bmNoYXIoYyA9ICcrJyldKSB7CisJaWYgKG1heCAtIGkgPj0gMykgeworCSAgICBk YXRhW2krK10gPSBjOwkJLyogRGlzcG9zaXRpb24gKi8KKwkgICAgZGF0YVtpKytdID0gdG9jaGFy KDEpOworCSAgICBkYXRhW2krK10gPSAnUic7CQkvKiBpcyBSRVNFTkQgKi8KKwkgICAgbnVtc2V0 Kys7CisJICAgIGRvbmVbeHVuY2hhcihjKV0gPSAxOworCX0gZWxzZQorCSAgbGVmdCsrOworICAg IH0KKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKworICAgIC8qIEVuZCBvZiBBdHRyaWJ1dGVzIC0t IHRvIGJlIHNlbnQgb25seSBhZnRlciBzZW5kaW5nIGFsbCBvdGhlcnMgKi8KKworICAgIGRlYnVn KEYxMTEsInNhdHRyIiwiQCIsaSk7CisgICAgZGVidWcoRjEwMSwic2F0dHIgbnVtc2V0IiwiIixu dW1zZXQpOworICAgIGRlYnVnKEYxMDEsInNhdHRyIGxlZnQiLCIiLGxlZnQpOworCisgICAgaWYg KChsZWZ0ID09IDAgfHwgbnVtc2V0ID09IDApICYmICFkb25lW3h1bmNoYXIoYyA9ICdAJyldKSB7 CisJaWYgKG1heCAtIGkgPj0gMykgeworCSAgICBkYXRhW2krK10gPSBjOwkJLyogRW5kIG9mIEF0 dHJpYnV0ZXMgKi8KKwkgICAgZGF0YVtpKytdID0gU1A7CQkvKiBMZW5ndGggMCAqLworCSAgICBk YXRhW2ldID0gTlVMOwkJLyogTWFrZSBzdXJlIGl0J3MgbnVsbC10ZXJtaW5hdGVkICovCisJICAg IG51bXNldCsrOworCSAgICBkb25lW3h1bmNoYXIoYyldID0gMTsKKwl9CisgICAgfQorCisgICAg LyogRmluaXNoZWQgLSBzZW5kIHRoZSBwYWNrZXQgb2ZmIGlmIHdlIGhhdmUgYW55dGhpbmcgaW4g aXQgKi8KKworICAgIGlmIChudW1zZXQpIHsKKwlkYXRhW2ldID0gTlVMOwkJCS8qIFRlcm1pbmF0 ZSBsYXN0IGdvb2QgZmllbGQgKi8KKwlkZWJ1ZyhGMTExLCJzYXR0ciBzZW5kaW5nIixkYXRhLGxl ZnQpOworCWFsbiA9IChpbnQpc3RybGVuKChjaGFyICopZGF0YSk7IC8qIEdldCBvdmVyYWxsIGxl bmd0aCBvZiBhdHRyaWJ1dGVzICovCisJcmV0dXJuKHNwYWNrKCdBJyxwa3RudW0sYWxuLGRhdGEp KTsgLyogU2VuZCBpdCAqLworICAgIH0gZWxzZQorICAgICAgcmV0dXJuKDApOworfQorCitzdGF0 aWMgY2hhciAqcmVmdXNlZCA9ICIiOworCitzdGF0aWMgY2hhciAqcmVhc29uW10gPSB7CisgICAg InNpemUiLCAidHlwZSIsICJkYXRlIiwgImNyZWF0b3IiLCAiYWNjb3VudCIsICJhcmVhIiwgInBh c3N3b3JkIiwKKyAgICAiYmxvY2tzaXplIiwgImFjY2VzcyIsICJlbmNvZGluZyIsICJkaXNwb3Np dGlvbiIsICJwcm90ZWN0aW9uIiwKKyAgICAicHJvdGVjdGlvbiIsICJvcmlnaW4iLCAiZm9ybWF0 IiwKKyAgICAic3lzLWRlcGVuZGVudCIsCQkJLyogMCAqLworICAgICJzaXplIiwJCQkJLyogMSAq LworICAgICIyIiwJCQkJLyogMiAqLworICAgICIzIiwJCQkJLyogMyAqLworICAgICI0IiwJCQkJ LyogNCAqLworICAgICI1IiwJCQkJLyogNSAqLworICAgICI2IiwJCQkJLyogNiAqLworICAgICI3 IiwJCQkJLyogNyAqLworICAgICI4IiwJCQkJLyogOCAqLworICAgICI5IiwJCQkJLyogOSAqLwor ICAgICI6IiwJCQkJLyogOiAqLworICAgICI7IiwJCQkJLyogOyAqLworICAgICI8IiwJCQkJLyog PCAqLworICAgICI9IiwJCQkJLyogPSAqLworICAgICI+IiwJCQkJLyogPiAqLworICAgICJuYW1l IiwJCQkJLyogPyAqLworICAgICJAIgorfTsKK3N0YXRpYyBpbnQgbnJlYXNvbiA9IHNpemVvZihy ZWFzb24pIC8gc2l6ZW9mKGNoYXIgKik7CitpbnQgcmVqZWN0aW9uID0gLTE7CisKK2NoYXIgKgor Z2V0cmVhc29uKHMpIGNoYXIgKnM7IHsJCQkvKiBEZWNvZGUgYXR0cmlidXRlIHJlZnVzYWwgcmVh c29uICovCisgICAgY2hhciBjLCAqcDsKKyAgICBpZiAocmVqZWN0aW9uID09IDEpCQkJLyogS2x1 ZGdlIGZvciBTRVQgRklMIENPTEwgRElTQ0FSRCAqLworICAgICAgcmV0dXJuKCJuYW1lIik7CQkJ Lyogd2hlbiBvdGhlciBLZXJtaXQgZG9lc24ndC4uLiAqLworICAgIHAgPSBzOworICAgIGlmICgq cCsrICE9ICdOJykgcmV0dXJuKCIiKTsJLyogU2hvdWxkIHN0YXJ0IHdpdGggTiAqLworICAgIGVs c2UgaWYgKChjID0gKnApID4gU1ApIHsJCS8qIGdldCByZWFzb24sICovCisJcmVqZWN0aW9uID0g YzsJCQkvKiByZW1lbWJlciBpdCwgKi8KKwljIC09ICchJzsJCQkvKiBnZXQgb2Zmc2V0ICovCisJ cCA9ICgodW5zaWduZWQgaW50KSAoKENIQVIpIGMpIDw9ICh1bnNpZ25lZCBpbnQpIG5yZWFzb24p ID8KKwkgIHJlYXNvbltjXSA6CisJICAgICJ1bmtub3duIjsKKyAgICB9CisgICAgcmV0dXJuKHAp OworfQorCitpbnQKK3JzYXR0cihzKSBDSEFSICpzOyB7CQkJLyogUmVhZCByZXNwb25zZSB0byBh dHRyaWJ1dGUgcGFja2V0ICovCisgICAgZGVidWcoRjExMSwicnNhdHRyIixzLCpzKTsKKyAgICBp ZiAoKnMgPT0gJ04nKSB7CQkJLyogSWYgaXQncyAnTicgZm9sbG93ZWQgYnkgYW55dGhpbmcsICov CisJcmVmdXNlZCA9IGdldHJlYXNvbigoY2hhciAqKXMpOwkvKiB0aGV5IGFyZSByZWZ1c2luZywg Z2V0IHJlYXNvbi4gKi8KKwlkZWJ1ZyhGMTEwLCJyc2F0dHIgcmVmdXNlZCIscmVmdXNlZCwwKTsK Kwl0bG9nKEYxMTAsIiByZWZ1c2VkOiIscmVmdXNlZCwwTCk7CisJcmV0dXJuKC0xKTsKKyAgICB9 CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgaWYgKHNlbmRtb2RlID09IFNNX1JFU0VORCAmJiAqcyA9 PSAnMScpIHsgLyogUkVTRU5EIGxlbmd0aCAqLworCWludCBuOyBDS19PRkZfVCB6OyBDSEFSICpw OworCXAgPSBzICsgMTsKKwluID0geHVuY2hhcigqcCsrKTsKKwlkZWJ1ZyhGMTAxLCJyc2F0dHIg UkVTRU5EIG4iLCIiLG4pOworCXogPSAoQ0tfT0ZGX1QpMDsKKwl3aGlsZSAobi0tID4gMCkJCQkv KiBXZSBhc3N1bWUgdGhlIGZvcm1hdCBpcyBnb29kLiAqLworCSAgeiA9IChDS19PRkZfVCkxMCAq IHogKyAoQ0tfT0ZGX1QpKCpwKysgLSAnMCcpOworCWRlYnVnKEYxMDEsInJzYXR0ciBSRVNFTkQg eiIsIiIseik7CisJaWYgKHogPiAoQ0tfT0ZGX1QpMCkgc2VuZHN0YXJ0ID0gejsKKwlkZWJ1ZyhG MTAxLCJyc2F0dHIgUkVTRU5EIHNlbmRzdGFydCIsIiIsc2VuZHN0YXJ0KTsKKwlpZiAoc2VuZHN0 YXJ0ID4gKENLX09GRl9UKTApCisJICBpZiAoemZzZWVrKHNlbmRzdGFydCkgPCAwKQkvKiBJbnB1 dCBmaWxlIGlzIGFscmVhZHkgb3Blbi4gKi8KKwkgICAgcmV0dXJuKDApOworI2lmZGVmIENLX0NV UlNFUworCWlmIChmZGlzcGxhID09IFhZRkRfQykKKwkgIHh4c2NyZWVuKFNDUl9GUywwLGZzaXpl LCIiKTsJLyogUmVmcmVzaCBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgKi8KKyNlbmRpZiAvKiBDS19D VVJTRVMgKi8KKyAgICB9CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAgcmVmdXNlZCA9ICIi OworICAgIHJldHVybigwKTsKK30KKworLyoKKyAgR2V0IGF0dHJpYnV0ZXMgZnJvbSBpbmNvbWlu ZyBBIHBhY2tldC4gIFJldHVybnM6CisgICAwIG9uIHN1Y2Nlc3MsIGZpbGUgaXMgdG8gYmUgYWNj ZXB0ZWQKKyAgLTEgb24gZmFpbHVyZSwgZmlsZSBpcyB0byBiZSByZWZ1c2VkCisqLworaW50Citn YXR0cihzLCB5eSkgQ0hBUiAqczsgc3RydWN0IHphdHRyICp5eTsgeyAvKiBSZWFkIGluY29taW5n IGF0dHJpYnV0ZSBwYWNrZXQgKi8KKyAgICBjaGFyIGMsIGQ7CisgICAgY2hhciAqZmY7CisgICAg aW50IGFsbiwgaSwgb3ZlcmZsb3cgPSAwOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBleHRlcm4g aW50IHJfY3NldCwgYXhjc2V0W107CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjZGVmaW5lIEFC VUZMIDQwCQkJLyogVGVtcG9yYXJ5IGJ1ZmZlciBmb3IgY29udmVyc2lvbnMgKi8KKyAgICBjaGFy IGFidWZbQUJVRkwrMV07CisjZGVmaW5lIFJGQlVGTCAxMAkJCS8qIFJlY29yZC1mb3JtYXQgYnVm ZmVyICovCisgICAgc3RhdGljIGNoYXIgcmZidWZbUkZCVUZMKzFdOworI2RlZmluZSBGVEJVRkwg MTAJCQkvKiBGaWxlIHR5cGUgYnVmZmVyICovCisgICAgc3RhdGljIGNoYXIgZnRidWZbRlRCVUZM KzFdOworI2RlZmluZSBEVEJVRkwgNDAJCQkvKiBGaWxlIGNyZWF0aW9uIGRhdGUgKi8KKyAgICBz dGF0aWMgY2hhciBkdGJ1ZltEVEJVRkwrMV07CisjZGVmaW5lIFRTQlVGTCAxMAkJCS8qIFRyYW5z ZmVyIHN5bnRheCAqLworICAgIHN0YXRpYyBjaGFyIHRzYnVmW1RTQlVGTCsxXTsKKyNkZWZpbmUg SURCVUZMIDEwCQkJLyogU3lzdGVtIElEICovCisgICAgc3RhdGljIGNoYXIgaWRidWZbSURCVUZM KzFdOworI2lmbmRlZiBEWU5BTUlDCisjZGVmaW5lIERTQlVGTCAxMDAJCQkvKiBEaXNwb3NpdGlv biAqLworICAgIHN0YXRpYyBjaGFyIGRzYnVmW0RTQlVGTCsxXTsKKyNkZWZpbmUgU1BCVUZMIDUx MgkJCS8qIFN5c3RlbS1kZXBlbmRlbnQgcGFyYW1ldGVycyAqLworICAgIHN0YXRpYyBjaGFyIHNw YnVmW1NQQlVGTCsxXTsKKyNlbHNlCisjZGVmaW5lIERTQlVGTCAxMDAJCQkvKiBEaXNwb3NpdGlv biAqLworICAgIHN0YXRpYyBjaGFyICpkc2J1ZiA9IE5VTEw7CisjZGVmaW5lIFNQQlVGTCA1MTIJ CQkvKiBTeXN0ZW0tZGVwZW5kZW50IHBhcmFtZXRlcnMgKi8KKyAgICBzdGF0aWMgY2hhciAqc3Bi dWYgPSBOVUxMOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyNkZWZpbmUgUlBCVUZMIDIwCQkJLyog QXR0cmlidXRlIHJlcGx5ICovCisgICAgc3RhdGljIGNoYXIgcnBidWZbUlBCVUZMKzFdOworCisj aWZkZWYgQ0tfUEVSTVMKKyAgICBzdGF0aWMgY2hhciBscHJtYnVmW0NLX1BFUk1MRU4rMV07Cisg ICAgc3RhdGljIGNoYXIgZ3BybWJ1ZlsyXTsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisgICAg Y2hhciAqcnA7CQkJCS8qIFBvaW50ZXIgdG8gcmVwbHkgYnVmZmVyICovCisgICAgaW50IHJldGNv ZGU7CQkJLyogUmV0dXJuIGNvZGUgKi8KKworICAgIGQgPSBTUDsJCQkJLyogSW5pdGlhbGl6ZSBk aXNwb3NpdGlvbiAqLworICAgIGZmID0gZmlsbmFtOwkJCS8qIEZpbGVuYW1lIHJldHVybmVkIGJ5 IHJjdmZpbCAqLworICAgIGlmIChmbmNhY3QgPT0gWFlGWF9SICYmIG9mbjF4ICYmIG9mbjFbMF0p IC8qIEJ1dCB3YXRjaCBvdXQgZm9yIEZDPVJFTkFNRSAqLworICAgICAgZmYgPSBvZm4xOwkJCS8q IGJlY2F1c2Ugd2UgaGF2ZW4ndCByZW5hbWVkIGl0IHlldCAqLworCisvKiBGaWxsIGluIHRoZSBh dHRyaWJ1dGVzIHdlIGhhdmUgcmVjZWl2ZWQgKi8KKworICAgIHJwID0gcnBidWY7CQkJCS8qIElu aXRpYWxpemUgcmVwbHkgYnVmZmVyICovCisgICAgKnJwKysgPSAnTic7CQkJLyogZm9yIG5lZ2F0 aXZlIHJlcGx5LiAqLworICAgICpycCA9IE5VTDsKKyAgICByZXRjb2RlID0gMDsJCQkvKiBJbml0 aWFsaXplIHJldHVybiBjb2RlLiAqLworCisgICAgaWYgKGRlc3QgPT0gREVTVF9QKSB7CQkvKiBT RVQgREVTVElOQVRJT04gUFJJTlRFUiAqLworI2lmZGVmIERZTkFNSUMKKwlpZiAoIWRzYnVmKQor CSAgaWYgKChkc2J1ZiA9IG1hbGxvYyhEU0JVRkwrMSkpID09IE5VTEwpCisJICAgIGZhdGFsKCJn dGF0dHI6IG5vIG1lbW9yeSBmb3IgZHNidWYiKTsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisJZHNi dWZbMF0gPSAnUCc7CisJZHNidWZbMV0gPSAnXDAnOworCXl5LT5kaXNwLnZhbCA9IGRzYnVmOwor CXl5LT5kaXNwLmxlbiA9IDE7CisgICAgfQorICAgIHdoaWxlIChjID0gKnMrKykgewkJCS8qIEdl dCBhdHRyaWJ1dGUgdGFnICovCisJYWxuID0geHVuY2hhcigqcysrKTsJCS8qIExlbmd0aCBvZiBh dHRyaWJ1dGUgc3RyaW5nICovCisJc3dpdGNoIChjKSB7CisjaWZkZWYgQ09NTUVOVAkJCQkvKiBU aGlzIGNhc2UgY29tYmluZWQgd2l0aCAnMScgYmVsb3cgKi8KKwkgIGNhc2UgJyEnOgkJCS8qIEZp bGUgbGVuZ3RoIGluIEsgKi8KKwkgICAgZm9yIChpID0gMDsgKGkgPCBhbG4pICYmIChpIDwgQUJV RkwpOyBpKyspIC8qIENvcHkgaXQgKi8KKwkgICAgICBhYnVmW2ldID0gKnMrKzsKKwkgICAgYWJ1 ZltpXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUgd2l0aCBudWxsICovCisJICAgIGlmIChpIDwgYWxu KSBzICs9IChhbG4gLSBpKTsgLyogSWYgZmllbGQgd2FzIHRvbyBsb25nIGZvciBidWZmZXIgKi8K KwkgICAgeXktPmxlbmd0aGsgPSBja2F0b2ZzKGFidWYpOyAvKiBDb252ZXJ0IHRvIG51bWJlciAq LworCSAgICBicmVhazsKKyNlbmRpZgkvKiBDT01NRU5UICovCisKKwkgIGNhc2UgJy8nOgkJCS8q IFJlY29yZCBmb3JtYXQgKi8KKwkgICAgcmZidWZbMV0gPSBOVUw7CisJICAgIHJmYnVmWzJdID0g TlVMOworCSAgICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBSRkJVRkwpOyBpKyspIC8q IENvcHkgaXQgKi8KKwkgICAgICByZmJ1ZltpXSA9ICpzKys7CisJICAgIHJmYnVmW2ldID0gTlVM OwkJLyogVGVybWluYXRlIHdpdGggbnVsbCAqLworCSAgICB5eS0+cmVjZm0udmFsID0gcmZidWY7 CS8qIFBvaW50ZXIgdG8gc3RyaW5nICovCisJICAgIHl5LT5yZWNmbS5sZW4gPSBpOwkJLyogTGVu Z3RoIG9mIHN0cmluZyAqLworCSAgICBpZiAoKHJmYnVmWzBdICE9ICdBJykgfHwKKwkJKHJmYnVm WzFdICYmIHJmYnVmWzFdICE9ICdNJykgfHwKKwkJKHJmYnVmWzJdICYmIHJmYnVmWzJdICE9ICdK JykpIHsKKwkJZGVidWcoRjExMCwiZ2F0dHIgYmFkIHJlY2ZtIixyZmJ1ZiwwKTsKKwkJKnJwKysg PSBjOworCQlyZXRjb2RlID0gLTE7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyIn OgkJCS8qIEZpbGUgdHlwZSAodGV4dCwgYmluYXJ5LCAuLi4pICovCisJICAgIGZvciAoaSA9IDA7 IChpIDwgYWxuKSAmJiAoaSA8IEZUQlVGTCk7IGkrKykKKwkgICAgICBmdGJ1ZltpXSA9ICpzKys7 CQkvKiBDb3B5IGl0IGludG8gYSBzdGF0aWMgc3RyaW5nICovCisJICAgIGZ0YnVmW2ldID0gJ1ww JzsKKwkgICAgaWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOworCSAgICAvKiBUWVBFIGF0dHJp YnV0ZSBpcyBlbmFibGVkPyAqLworCSAgICBpZiAoYXR0eXBpKSB7CisJCXl5LT50eXBlLnZhbCA9 IGZ0YnVmOwkvKiBQb2ludGVyIHRvIHN0cmluZyAqLworCQl5eS0+dHlwZS5sZW4gPSBpOwkvKiBM ZW5ndGggb2Ygc3RyaW5nICovCisJCWRlYnVnKEYxMTEsImdhdHRyIGZpbGUgdHlwZSIsIGZ0YnVm LCBpKTsKKwkJZGVidWcoRjEwMSwiZ2F0dHIgYmluYXJ5IDEiLCIiLGJpbmFyeSk7CisJCS8qIFVu a25vd24gdHlwZT8gKi8KKwkJaWYgKCgqZnRidWYgIT0gJ0EnICYmICpmdGJ1ZiAhPSAnQicgJiYg KmZ0YnVmICE9ICdJJykKKyNpZmRlZiBDS19MQUJFTEVECisvKiAuLi4gT3Igb3VyIEZJTEUgVFlQ RSBpcyBMQUJFTEVEIGFuZCB0aGUgaW5jb21pbmcgZmlsZSBpcyB0ZXh0Li4uICovCisJCSAgICB8 fCAoYmluYXJ5ID09IFhZRlRfTCAmJiAqZnRidWYgPT0gJ0EnICYmICF4ZmxnKQorI2VuZGlmIC8q IENLX0xBQkVMRUQgKi8KKwkJICAgICkgeworCQkgICAgcmV0Y29kZSA9IC0xOwkvKiBSZWplY3Qg dGhlIGZpbGUgKi8KKwkJICAgICpycCsrID0gYzsKKwkJICAgIGlmICghb3BuZXJyKSB0bG9nKEYx MDAsIiByZWZ1c2VkOiB0eXBlIiwiIiwwKTsKKwkJICAgIGJyZWFrOworCQl9CisvKgorICBUaGUg Zm9sbG93aW5nIGNvZGUgbW92ZWQgaGVyZSBmcm9tIG9wZW5hKCkgc28gd2Ugc2V0IGJpbmFyeSBt b2RlCisgIGFzIHNvb24gYXMgcmVxdWVzdGVkIGJ5IHRoZSBhdHRyaWJ1dGUgcGFja2V0LiAgVGhh dCB3YXkgd2hlbiB0aGUgZmlyc3QKKyAgZGF0YSBwYWNrZXQgY29tZXMsIHRoZSBtb2RlIG9mIHRy YW5zZmVyIGNhbiBiZSBkaXNwbGF5ZWQgY29ycmVjdGx5CisgIGJlZm9yZSBvcGVuYSgpIGlzIGNh bGxlZC4KKyovCisJCWlmICh5eS0+dHlwZS52YWxbMF0gPT0gJ0EnKSB7IC8qIENoZWNrIHJlY2Vp dmVkIGF0dHJpYnV0ZXMuICovCisjaWZkZWYgVk1TCisJCSAgICBpZiAoYmluYXJ5ICE9IFhZRlRf SSkgLyogVk1TIElNQUdFIG92ZXJyaWRlcyB0aGlzICovCisjZW5kaWYgLyogVk1TICovCisJCSAg ICAgIGJpbmFyeSA9IFhZRlRfVDsJLyogU2V0IGN1cnJlbnQgdHlwZSB0byBUZXh0LiAqLworCQkg ICAgZGVidWcoRjEwMSwiZ2F0dHIgYmluYXJ5IDIiLCIiLGJpbmFyeSk7CisJCX0gZWxzZSBpZiAo eXktPnR5cGUudmFsWzBdID09ICdCJykgeworI2lmZGVmIENLX0xBQkVMRUQKKwkJICAgIGlmIChi aW5hcnkgIT0gWFlGVF9MCisjaWZkZWYgVk1TCisJCQkmJiBiaW5hcnkgIT0gWFlGVF9VIC8qIFZN UyBzcGVjaWFsIGNhc2UgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwkJCSkKKyNlbmRpZiAvKiBDS19M QUJFTEVEICovCisjaWZkZWYgTUFDCisJCSAgICBpZiAoYmluYXJ5ICE9IFhZRlRfTSkgLyogSWYg bm90IE1hY0JpbmFyeS4uLiAqLworI2VuZGlmIC8qIE1BQyAqLworCQkgICAgICBiaW5hcnkgPSBY WUZUX0I7CisJCSAgICBkZWJ1ZyhGMTAxLCJnYXR0ciBiaW5hcnkgMyIsIiIsYmluYXJ5KTsKKwkJ fQorCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlICcjJzoJCQkvKiBGaWxlIGNyZWF0aW9u IGRhdGUgKi8KKwkgICAgZm9yIChpID0gMDsgKGkgPCBhbG4pICYmIChpIDwgRFRCVUZMKTsgaSsr KQorCSAgICAgIGR0YnVmW2ldID0gKnMrKzsJCS8qIENvcHkgaXQgaW50byBhIHN0YXRpYyBzdHJp bmcgKi8KKwkgICAgaWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOworCSAgICBkdGJ1ZltpXSA9 ICdcMCc7CisJICAgIGlmIChhdGRhdGkgJiYgIXhmbGcpIHsJLyogUmVhbCBmaWxlIGFuZCBkYXRl cyBlbmFibGVkICovCisJCXl5LT5kYXRlLnZhbCA9IGR0YnVmOwkvKiBQb2ludGVyIHRvIHN0cmlu ZyAqLworCQl5eS0+ZGF0ZS5sZW4gPSBpOwkvKiBMZW5ndGggb2Ygc3RyaW5nICovCisJCWlmIChm bmNhY3QgPT0gWFlGWF9VKSB7CS8qIFJlY2VpdmluZyBpbiB1cGRhdGUgbW9kZT8gKi8KKwkJICAg IGlmICh6c3RpbWUoZmYseXksMSkgPiAwKSB7IC8qIENvbXBhcmUgZGF0ZXMgKi8KKwkJCSpycCsr ID0gYzsJLyogRGlzY2FyZCBpZiBvbGRlciwgcmVhc29uID0gZGF0ZS4gKi8KKwkJCWlmICghb3Bu ZXJyKSB0bG9nKEYxMDAsIiByZWZ1c2VkOiBkYXRlIiwiIiwwKTsKKwkJCXJldGNvZGUgPSAtMTsJ LyogUmVqZWN0aW9uIG5vdGljZS4gKi8KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGJyZWFr OworCisJICBjYXNlICcoJzoJCQkvKiBGaWxlIEJsb2NrIFNpemUgKi8KKwkgICAgZm9yIChpID0g MDsgKGkgPCBhbG4pICYmIChpIDwgQUJVRkwpOyBpKyspIC8qIENvcHkgaXQgKi8KKwkgICAgICBh YnVmW2ldID0gKnMrKzsKKwkgICAgYWJ1ZltpXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUgd2l0aCBu dWxsICovCisJICAgIGlmIChpIDwgYWxuKSBzICs9IChhbG4gLSBpKTsKKwkgICAgaWYgKGF0Ymxr aSkKKwkgICAgICB5eS0+Ymxrc2l6ZSA9IGF0b2woYWJ1Zik7IC8qIENvbnZlcnQgdG8gbnVtYmVy ICovCisJICAgIGJyZWFrOworCisJICBjYXNlICcqJzoJCQkvKiBFbmNvZGluZyAodHJhbnNmZXIg c3ludGF4KSAqLworCSAgICBmb3IgKGkgPSAwOyAoaSA8IGFsbikgJiYgKGkgPCBUU0JVRkwpOyBp KyspCisJICAgICAgdHNidWZbaV0gPSAqcysrOwkJLyogQ29weSBpdCBpbnRvIGEgc3RhdGljIHN0 cmluZyAqLworCSAgICBpZiAoaSA8IGFsbikgcyArPSAoYWxuIC0gaSk7CisJICAgIHRzYnVmW2ld ID0gJ1wwJzsKKyNpZm5kZWYgTk9DU0VUUworCSAgICB4bGF0eXBlID0gWExBX05PTkU7CQkvKiBB c3N1bWUgbm8gdHJhbnNsYXRpb24gKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisJICAgIGlmIChh dGVuY2kpIHsKKwkJY2hhciAqIHNzOworCQl5eS0+ZW5jb2RpbmcudmFsID0gdHNidWY7IC8qIFBv aW50ZXIgdG8gc3RyaW5nICovCisJCXl5LT5lbmNvZGluZy5sZW4gPSBpOwkvKiBMZW5ndGggb2Yg c3RyaW5nICovCisJCWRlYnVnKEYxMDEsImdhdHRyIGVuY29kaW5nIix0c2J1ZixpKTsKKwkJc3Mg PSB0c2J1ZisxOworCQlzd2l0Y2ggKCp0c2J1ZikgeworI2lmbmRlZiBOT0NTRVRTCisJCSAgY2Fz ZSAnQSc6CQkgIC8qIE5vcm1hbCwgbm90aGluZyBzcGVjaWFsICovCisJCSAgICB0Y2hhcnNldCA9 IFRDX1RSQU5TUDsgLyogVHJhbnNwYXJlbnQgY2hhcnMgdW50cmFuc2xhdGVkICovCisJCSAgICBk ZWJ1ZyhGMTEwLCJnYXR0ciBzZXRzIHRjaGFyc2V0IFRDX1RSQU5TUCIsIkEiLDApOworCQkgICAg YnJlYWs7CisJCSAgY2FzZSAnQyc6CQkgIC8qIFNwZWNpZmllZCBjaGFyYWN0ZXIgc2V0ICovCisJ CSAgICBpZiAoIXhmcnhsYSkgewkgIC8qIEJ1dCB0cmFuc2xhdGlvbiBkaXNhYmxlZCAqLworCQkJ dGNoYXJzZXQgPSBUQ19UUkFOU1A7CisJCQlkZWJ1ZyhGMTEwLCJnYXR0ciBzZXRzIHRjaGFyc2V0 IFRDX1RSQU5TUCIsIkMiLDApOworCQkJYnJlYWs7CisJCSAgICB9CisjaWZkZWYgVU5JQ09ERQor CQkgICAgaWYgKCFzdHJjbXAoIkkxOTYiLHNzKSkgLyogVHJlYXQgSTE5NiAoVVRGLTggbm8gbGV2 ZWwpICovCisJCSAgICAgIHNzID0gIkkxOTAiOwkgICAgLyogYXMgSTE5MCAoVVRGLTggTGV2ZWwg MSkgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisJCSAgICBpZiAoIXN0cmNtcCgiSTYvMjA0Iixz cykpIC8qIFRyZWF0ICJMYXRpbi0xICsgRXVybyIgKi8KKwkJICAgICAgc3MgPSAiSTYvMTAwIjsJ ICAgICAgLyogYXMgSTYvMTAwIChyZWd1bGFyIExhdGluLTEpICovCisJCSAgICBmb3IgKGkgPSAw OyBpIDwgbnRjc2V0czsgaSsrKSB7CisJCQlpZiAoIXN0cmNtcCh0Y3NpbmZvW2ldLmRlc2lnbmF0 b3Isc3MpKQorCQkJICBicmVhazsKKwkJICAgIH0KKwkJICAgIGRlYnVnKEYxMDEsImdhdHRyIHhm ZXIgY2hhcnNldCBsb29rdXAiLCIiLGkpOworCQkgICAgaWYgKGkgPT0gbnRjc2V0cykgewkvKiBJ ZiB1bmtub3duIGNoYXJhY3RlciBzZXQsICovCisJCQlkZWJ1ZyhGMTEwLCJnYXR0cjogeGZlciBj aGFyc2V0IHVua25vd24iLHNzLDApOworCQkJaWYgKCF1bmtjcykgewkvKiBhbmQgU0VUIFVOS05P V04gRElTQ0FSRCwgKi8KKwkJCSAgICByZXRjb2RlID0gLTE7IC8qIHJlamVjdCB0aGUgZmlsZS4g Ki8KKwkJCSAgICAqcnArKyA9IGM7CisJCQkgICAgaWYgKCFvcG5lcnIpCisJCQkgICAgICB0bG9n KEYxMDAsIiByZWZ1c2VkOiBjaGFyYWN0ZXIgc2V0IiwiIiwwKTsKKwkJCX0KKwkJICAgIH0gZWxz ZSB7CisJCQl0Y2hhcnNldCA9IHRjc2luZm9baV0uY29kZTsgLyogaXQncyBrbm93biwgdXNlIGl0 ICovCisJCQlkZWJ1ZyhGMTAxLCJnYXR0ciBzd2l0Y2ggdGNoYXJzZXQiLCIiLHRjaGFyc2V0KTsK KwkJCWRlYnVnKEYxMDEsImdhdHRyIGZjaGFyc2V0IiwiIixmY2hhcnNldCk7CisJCQlpZiAocl9j c2V0ID09IFhNT0RFX0EpIHsgLyogQXV0b21hdGljIHN3aXRjaGluZz8gKi8KKwkJCSAgICBpZiAo dGNoYXJzZXQgPiAtMSAmJiB0Y2hhcnNldCA8PSBNQVhUQ1NFVFMpIHsKKwkJCQlpbnQgeDsKKwkJ CQl4ID0gYXhjc2V0W3RjaGFyc2V0XTsKKwkJCQlpZiAoeCA+IDAgJiYgeCA8PSBNQVhGQ1NFVFMp IHsKKwkJCQkgICAgZmNoYXJzZXQgPSB4OworCQkJCSAgICBkZWJ1ZyhGMTAxLCJnYXR0ciBzd2l0 Y2ggZmNoYXJzZXQiLCIiLHgpOworCQkJCX0KKwkJCSAgICB9CisJCQl9CisJCQkvKiBTZXQgdXAg dHJhbnNsYXRpb24gdHlwZSBhbmQgZnVuY3Rpb24gKi8KKwkJCXNldHhsYXR5cGUodGNoYXJzZXQs ZmNoYXJzZXQpOworCQkgICAgfQorCQlicmVhazsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisJICAg ICAgZGVmYXVsdDoJCQkvKiBTb21ldGhpbmcgZWxzZS4gKi8KKwkJZGVidWcoRjExMCwiZ2F0dHIg dW5rIGVuY29kaW5nIGF0dHJpYnV0ZSIsdHNidWYsMCk7CisJCWlmICghdW5rY3MpIHsJCS8qIElm IFNFVCBVTksgRElTQyAqLworCQkgICAgcmV0Y29kZSA9IC0xOworCQkgICAgKnJwKysgPSBjOwor CQkgICAgaWYgKCFvcG5lcnIpIHRsb2coRjEwMCwiIHJlZnVzZWQ6IGVuY29kaW5nIiwiIiwwKTsK KwkJfQorCQlicmVhazsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlICcrJzoJ CQkvKiBEaXNwb3NpdGlvbiAqLworI2lmZGVmIERZTkFNSUMKKwkgICAgaWYgKCFkc2J1ZikKKwkg ICAgICBpZiAoKGRzYnVmID0gbWFsbG9jKERTQlVGTCsxKSkgPT0gTlVMTCkKKwkJZmF0YWwoImd0 YXR0cjogbm8gbWVtb3J5IGZvciBkc2J1ZiIpOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKwkgICAg Zm9yIChpID0gMDsgKGkgPCBhbG4pICYmIChpIDwgRFNCVUZMKTsgaSsrKQorCSAgICAgIGRzYnVm W2ldID0gKnMrKzsJCS8qIENvcHkgaXQgaW50byBhIHNlcGFyYXRlIHN0cmluZyAqLworCSAgICBk c2J1ZltpXSA9ICdcMCc7CisJICAgIGlmIChpIDwgYWxuKSBzICs9IChhbG4gLSBpKTsKKwkgICAg cnNfbGVuID0gKENLX09GRl9UKTA7CisJICAgIGlmIChhdGRpc2kpIHsJCS8qIFdlIGFyZSBkb2lu ZyB0aGlzIGF0dHJpYnV0ZSAqLworCQkvKiBDb3B5IGl0IGludG8gdGhlIGF0dHJpYnV0ZSBzdHJ1 Y3R1cmUgKi8KKwkJeXktPmRpc3AudmFsID0gZHNidWY7CS8qIFBvaW50ZXIgdG8gc3RyaW5nICov CisJCXl5LT5kaXNwLmxlbiA9IGk7CS8qIExlbmd0aCBvZiBzdHJpbmcgKi8KKwkJZCA9ICpkc2J1 ZjsKKyNpZm5kZWYgTk9ESVNQTworLyoKKyAgRGVmaW5lIE5PRElTUE8gdG8gZGlzYWJsZSByZWNl aXB0IG9mIG1haWwgb3IgcHJpbnQgZmlsZXMgYW5kIG9mIFJFU0VORC4KKyovCisJCWlmICgKKyNp Zm5kZWYgZGF0YWdlbmVyYWwJCQkvKiBNQUlMIHN1cHBvcnRlZCBvbmx5IGZvciAqLworI2lmbmRl ZiBPUzIJCQkJLyogVU5JWCwgVk1TLCBhbmQgT1MtOSAqLworI2lmbmRlZiBNQUMKKyNpZm5kZWYg R0VNRE9TCisjaWZuZGVmIEFNSUdBCisJCSAgICBkICE9ICdNJyAmJgkJLyogTUFJTCAqLworI2Vu ZGlmIC8qIEFNSUdBICovCisjZW5kaWYgLyogR0VNRE9TICovCisjZW5kaWYgLyogTUFDICovCisj ZW5kaWYgLyogT1MvMiAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjaWZkZWYgQ0tfUkVT RU5ECisJCSAgICBkICE9ICdSJyAmJgkJLyogUkVTRU5EICovCisjZW5kaWYgLyogQ0tfUkVTRU5E ICovCisJCSAgICBkICE9ICdQJykgewkJLyogUFJJTlQgKi8KKwkJICAgIHJldGNvZGUgPSAtMTsJ LyogVW5rbm93bi91bnN1cHBvcnRlZCBkaXNwb3NpdGlvbiAqLworCQkgICAgKnJwKysgPSBjOwor CQkgICAgaWYgKCFvcG5lcnIpIHRsb2coRjEwMSwiIHJlZnVzZWQ6IGJhZCBkaXNwb3NpdGlvbiIs IiIsZCk7CisJCX0KKwkJZGlzcG9zID0gZDsKKwkJZGVidWcoRjAwMCwiZ2F0dHIgZGlzcG9zIiwi IixkaXNwb3MpOworCQlzd2l0Y2ggKGQpIHsKKyNpZm5kZWYgTk9GUklMTFMKKwkJICBjYXNlICdN JzoKKwkJICAgIGlmICghZW5fbWFpKSB7CisJCQlyZXRjb2RlID0gLTE7CisJCQkqcnArKyA9IGM7 CisJCQlpZiAoIW9wbmVycikgdGxvZyhGMTAwLCIgcmVmdXNlZDogbWFpbCBkaXNhYmxlZCIsIiIs MCk7CisJCQlkaXNwb3MgPSAwOworCQkgICAgfQorCQkgICAgYnJlYWs7CisjZW5kaWYgLyogTk9G UklMTFMgKi8KKwkJICBjYXNlICdQJzoKKwkJICAgIGlmICghZW5fcHJpKSB7CisJCQlyZXRjb2Rl ID0gLTE7CisJCQkqcnArKyA9IGM7CisJCQlpZiAoIW9wbmVycikKKwkJCSAgdGxvZyhGMTAwLCIg cmVmdXNlZDogcHJpbnQgZGlzYWJsZWQiLCIiLDApOworCQkJZGlzcG9zID0gMDsKKwkJICAgIH0K KwkJICAgIGJyZWFrOworCisJCSAgY2FzZSAnUic6CisJCSAgICBkaXNwb3MgPSAwOworI2lmZGVm IENLX1JFU0VORAorCQkgICAgcnNfbGVuID0gemdldGZzKGZmKTsgLyogR2V0IGxlbmd0aCBvZiBm aWxlICovCisJCSAgICBkZWJ1ZyhGMTExLCJnYXR0ciBSRVNFTkQiLGZmLHJzX2xlbik7CisjaWZk ZWYgVk1TCisJCSAgICByc19sZW4gJj0gKGxvbmcpIC01MTI7IC8qIEVuc3VyZSBibG9jayBib3Vu ZGFyeSBpZiBWTVMgKi8KKwkJICAgIHJzX2xlbiAtPSA1MTI7CSAgLyogSW4gY2FzZSBsYXN0IGJs b2NrIG5vdCBjb21wbGV0ZSAqLworCQkgICAgZGVidWcoRjExMSwiZ2F0dHIgcnNfbGVuIixmZixy c19sZW4pOworI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIENPTU1FTlQKKwkJICAgIGlmIChyc19s ZW4gPCAwTCkJLyogTG9jYWwgZmlsZSBkb2Vzbid0IGV4aXN0ICovCisJCSAgICAgIHJzX2xlbiA9 IDBMOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKy8qCisgIEFub3RoZXIgcG9zc2liaWxpdHkgaGVy ZSAob3IgbGF0ZXIsIHJlYWxseSkgd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHR3bworICBmaWxl IGxlbmd0aHMgYXJlIHRoZSBzYW1lLCBhbmQgaWYgc28sIGtlZXAgdGhlIHByZXZhaWxpbmcgY29s bGlzaW9uIGFjdGlvbgorICBhcyBpcyAobm90ZTogcnNfbGVuID09IGxlbmd0aCBvZiBleGlzdGlu ZyBmaWxlOyB5eS0+bGVuZ3RoID09IGZzaXplID09CisgIGxlbmd0aCBvZiBpbmNvbWluZyBmaWxl KS4gIFRoaXMgY291bGQgYmUgY29tcGxpY2F0ZWQsIHRob3VnaCwgc2luY2UKKyAgKGEpIHdlIG1p Z2h0IG5vdCBoYXZlIHJlY2VpdmVkIHRoZSBsZW5ndGggYXR0cmlidXRlIHlldCwgYW5kIGluIGZh Y3QgaXQKKyAgbWlnaHQgZXZlbiBiZSBpbiBhIHN1YnNlcXVlbnQgQS1wYWNrZXQsIHlldCAoYikg d2UgaGF2ZSB0byBhY2NlcHQgb3IgcmVqZWN0CisgIHRoZSBSZWNvdmVyIGF0dHJpYnV0ZSBub3cu ICBTbyBiZXR0ZXIgdG8gbGVhdmUgYXMtaXMuICBBbnl3YXksIGl0J3MgcHJvYmFibHkKKyAgbW9y ZSB1c2VmdWwgdGhpcyB3YXkuCisqLworCQkgICAgaWYgKHJzX2xlbiA+IChDS19PRkZfVCkwKSB7 CisJCQlmbmNzYXYgPSBmbmNhY3Q7IC8qIFNhdmUgY29sbGlzaW9uIGFjdGlvbiAqLworCQkJZm5j YWN0ID0gWFlGWF9BOyAvKiBTd2l0Y2ggdG8gQVBQRU5EICovCisJCSAgICB9CisjZWxzZQorCQkg ICAgcmV0Y29kZSA9IC0xOwkvKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gKi8KKwkJICAgICpycCsr ID0gYzsJCS8qICdjYXVzZSBpdCB3YXNuJ3QgbmVnb3RpYXRlZC4gKi8KKwkJICAgIGlmICghb3Bu ZXJyKSB0bG9nKEYxMDAsIiByZWZ1c2VkOiByZXNlbmQiLCIiLDApOworI2VuZGlmIC8qIENLX1JF U0VORCAqLworCQl9CisjZWxzZSAgLyogTk9ESVNQTyAqLworCQlyZXRjb2RlID0gLTE7CisJCSpy cCsrID0gYzsKKwkJaWYgKCFvcG5lcnIpIHRsb2coRjEwMCwiIHJlZnVzZWQ6IE5PRElTUE8iLCIi LDApOworI2VuZGlmIC8qIE5PRElTUE8gKi8KKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2Fz ZSAnLic6CQkJLyogU2VuZGVyJ3Mgc3lzdGVtIElEICovCisJICAgIGZvciAoaSA9IDA7IChpIDwg YWxuKSAmJiAoaSA8IElEQlVGTCk7IGkrKykKKwkgICAgICBpZGJ1ZltpXSA9ICpzKys7CQkvKiBD b3B5IGl0IGludG8gYSBzdGF0aWMgc3RyaW5nICovCisJICAgIGlkYnVmW2ldID0gJ1wwJzsKKwkg ICAgaWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOworCSAgICBpZiAoYXRzaWRpKSB7CisJCXl5 LT5zeXN0ZW1pZC52YWwgPSBpZGJ1ZjsgLyogUG9pbnRlciB0byBzdHJpbmcgKi8KKwkJeXktPnN5 c3RlbWlkLmxlbiA9IGk7CS8qIExlbmd0aCBvZiBzdHJpbmcgKi8KKwkgICAgfQorCSAgICBicmVh azsKKworCSAgY2FzZSAnMCc6CQkJLyogU3lzdGVtLWRlcGVuZGVudCBwYXJhbWV0ZXJzICovCisj aWZkZWYgRFlOQU1JQworCSAgICBpZiAoIXNwYnVmICYmICEoc3BidWYgPSBtYWxsb2MoU1BCVUZM KSkpCisJCWZhdGFsKCJnYXR0cjogbm8gbWVtb3J5IGZvciBzcGJ1ZiIpOworI2VuZGlmIC8qIERZ TkFNSUMgKi8KKwkgICAgZm9yIChpID0gMDsgKGkgPCBhbG4pICYmIChpIDwgU1BCVUZMKTsgaSsr KQorCSAgICAgIHNwYnVmW2ldID0gKnMrKzsJCS8qIENvcHkgaXQgaW50byBhIHN0YXRpYyBzdHJp bmcgKi8KKwkgICAgc3BidWZbaV0gPSAnXDAnOworCSAgICBpZiAoaSA8IGFsbikgcyArPSAoYWxu IC0gaSk7CisJICAgIGlmIChhdHN5c2kpIHsKKwkJeXktPnN5c3BhcmFtLnZhbCA9IHNwYnVmOyAv KiBQb2ludGVyIHRvIHN0cmluZyAqLworCQl5eS0+c3lzcGFyYW0ubGVuID0gaTsJLyogTGVuZ3Ro IG9mIHN0cmluZyAqLworCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlICchJzoJCQkvKiBG aWxlIGxlbmd0aCBpbiBLICovCisJICBjYXNlICcxJzogewkJCS8qIEZpbGUgbGVuZ3RoIGluIGJ5 dGVzICovCisJICAgICAgY2hhciAqIGwyOworCSAgICAgIENLX09GRl9UIHhsZW47CisJICAgICAg Zm9yIChpID0gMDsgKGkgPCBhbG4pICYmIChpIDwgQUJVRkwpOyBpKyspIC8qIENvcHkgaXQgKi8K KwkJYWJ1ZltpXSA9ICpzKys7CisJICAgICAgYWJ1ZltpXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUg d2l0aCBudWxsICovCisJICAgICAgaWYgKGkgPCBhbG4pIHMgKz0gKGFsbiAtIGkpOworCSAgICAg IGlmIChyZGlnaXRzKGFidWYpKSB7CS8qIE1ha2Ugc3VyZSBzdHJpbmcgaXMgYWxsIGRpZ2l0cyAq LworCQkgIHhsZW4gPSBja2F0b2ZzKGFidWYpOwkvKiBDb252ZXJ0IHRvIG51bWJlciAqLworCQkg IGwyID0gY2tmc3RvYSh4bGVuKTsJLyogQ29udmVydCBudW1iZXIgYmFjayB0byBzdHJpbmcgKi8K KwkJICBpZiAoYyA9PSAnMScpCisJCSAgICBkZWJ1ZyhGMTExLCJnYXR0ciBsZW5ndGgiLGFidWYs eGxlbik7CisJCSAgZWxzZQorCQkgICAgZGVidWcoRjExMSwiZ2F0dHIgbGVuZ3RoayIsYWJ1Zix4 bGVuKTsKKwkJICBpZiAoY2tzdHJjbXAoYWJ1ZixsMiwtMSwxKSkgeyAvKiBUaGlzIGlzIGhvdyB3 ZSBjaGVjay4uLiAqLworCQkgICAgICB4bGVuID0gKENLX09GRl9UKS0yOyAvKiAtMiA9IHVuaywg cG9zc2libHkgdG9vIGxvbmcgKi8KKwkJICAgICAgb3ZlcmZsb3crKzsKKwkJICAgICAgZGVidWco RjExMSwiZ2F0dHIgb3ZlcmZsb3ciLAorCQkJICAgIChjID09ICcxJykgPyAibGVuZ3RoIiA6ICJs ZW5ndGhrIiwKKwkJCSAgICB4bGVuKTsKKwkJICB9CisJCSAgaWYgKGMgPT0gJzEnKSB7CisJCSAg ICAgIHl5LT5sZW5ndGggPSB4bGVuOworCQkgICAgICBkZWJ1ZyhGMTAxLCJnYXR0ciBsZW5ndGgi LCIiLHhsZW4pOworCQkgIH0gZWxzZSB7CisJCSAgICAgIHl5LT5sZW5ndGhrID0geGxlbjsKKwkJ ICAgICAgZGVidWcoRjEwMSwiZ2F0dHIgbGVuZ3RoayIsIiIseGxlbik7CisJCSAgfQorCSAgICAg IH0KKwkgICAgICAvKiBJZiB0aGUgbGVuZ3RoIGZpZWxkIGlzIG5vdCBudW1lcmljIGFjY2VwdCB0 aGUgZmlsZSAqLworCSAgICAgIC8qIGFueXdheSBidXQgd2l0aCBhbiB1bmtub3duIGxlbmd0aCAq LworCSAgICAgIGJyZWFrOworCSAgfQorCisjaWZkZWYgQ0tfUEVSTVMKKwkgIGNhc2UgJywnOgkJ CS8qIFN5c3RlbS1kZXBlbmRlbnQgcHJvdGVjdGlvbiBjb2RlICovCisJICAgIGZvciAoaSA9IDA7 IChpIDwgYWxuKSAmJiAoaSA8IENLX1BFUk1MRU4pOyBpKyspCisJICAgICAgbHBybWJ1ZltpXSA9 ICpzKys7CS8qIEp1c3QgY29weSBpdCAtIGRlY29kZSBsYXRlciAqLworCSAgICBscHJtYnVmW2ld ID0gJ1wwJzsJCS8qIFRlcm1pbmF0ZSB3aXRoIG51bGwgKi8KKwkgICAgaWYgKGkgPCBhbG4pIHMg Kz0gKGFsbiAtIGkpOworCSAgICBpZiAoYXRscHJpKSB7CisJCXl5LT5scHJvdGVjdC52YWwgPSAo Y2hhciAqKWxwcm1idWY7CisJCXl5LT5scHJvdGVjdC5sZW4gPSBpOworCSAgICB9IGVsc2UKKwkg ICAgICBscHJtYnVmWzBdID0gTlVMOworCSAgICBicmVhazsKKworCSAgY2FzZSAnLSc6CQkJLyog R2VuZXJpYyAid29ybGQiIHByb3RlY3Rpb24gY29kZSAqLworCSAgICBncHJtYnVmWzBdID0gTlVM OwkJLyogSnVzdCAxIGJ5dGUgYnkgZGVmaW5pdGlvbiAqLworCSAgICBmb3IgKGkgPSAwOyBpIDwg YWxuOyBpKyspCS8qIEJ1dCBhbGxvdyBmb3IgbW9yZS4uLiAqLworCSAgICAgIGlmIChpID09IDAp IGdwcm1idWZbMF0gPSAqcysrOworCSAgICBncHJtYnVmWzFdID0gTlVMOworCSAgICBpZiAoYXRn cHJpKSB7CisJCXl5LT5ncHJvdGVjdC52YWwgPSAoY2hhciAqKWdwcm1idWY7CisJCXl5LT5ncHJv dGVjdC5sZW4gPSBncHJtYnVmWzBdID8gMSA6IDA7CisJICAgIH0gZWxzZQorCSAgICAgIGdwcm1i dWZbMF0gPSBOVUw7CisJICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1BFUk1TICovCisKKwkgIGRl ZmF1bHQ6CQkJLyogVW5rbm93biBhdHRyaWJ1dGUgKi8KKwkgICAgcyArPSBhbG47CQkJLyogSnVz dCBza2lwIHBhc3QgaXQgKi8KKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICAgIC8qIENoZWNr IHNwYWNlIG5vdywgYmVjYXVzZSB3ZSBhbHNvIG5lZWQgdG8ga25vdyB0aGUgZmlsZSB0eXBlICov CisgICAgLyogaW4gY2FzZSB6Y2hrc3BhKCkgZGlmZmVyZW50aWF0ZXMgdGV4dCBhbmQgYmluYXJ5 IChWTVMgdmVyc2lvbiBkb2VzKSAqLworCisgICAgaWYgKGF0bGVuaSAmJiAhY2FsaWJyYXRlKSB7 CQkvKiBMZW5ndGggYXR0cmlidXRlIGVuYWJsZWQ/ICovCisJaWYgKHl5LT5sZW5ndGggPiAoQ0tf T0ZGX1QpLTEpIHsgLyogTGVuZ3RoLWluLWJ5dGVzIGF0dHJpYnV0ZSByZWMnZD8gKi8KKwkgICAg aWYgKCF6Y2hrc3BhKGZmLCh5eS0+bGVuZ3RoKSkpIHsgLyogQ2hlY2sgc3BhY2UgKi8KKwkJcmV0 Y29kZSA9IC0xOwkJICAgICAvKiBOb3QgZW51ZiAqLworCQkqcnArKyA9ICcxJzsKKwkJaWYgKCFv cG5lcnIpIHRsb2coRjEwMCwiIHJlZnVzZWQ6IGxlbmd0aCBieXRlcyIsIiIsMCk7CisJICAgIH0K Kwl9IGVsc2UgaWYgKHl5LT5sZW5ndGhrID4gKENLX09GRl9UKS0xKSB7IC8qIExlbmd0aCBpbiBL IHJlY2VpdmVkPyAqLworCSAgICBsb25nIHhsZW47CisJICAgIHhsZW4gPSB5eS0+bGVuZ3RoayAq IDEwMjQ7CisJICAgIGlmICghemNoa3NwYShmZix4bGVuKSkgeworCQlyZXRjb2RlID0gLTE7CQkv KiBDaGVjayBzcGFjZSAqLworCQkqcnArKyA9ICchJzsKKwkJaWYgKCFvcG5lcnIpIHRsb2coRjEw MCwiIHJlZnVzZWQ6IGxlbmd0aCBLIiwiIiwwKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgaWYg KHJldGNvZGUgPiAtMUwpIHsJCS8qIFJlbWVtYmVyIHRoZSBmaWxlIHNpemUgKi8KKwlpZiAoeXkt Pmxlbmd0aCA+IChDS19PRkZfVCktMSkgeworCSAgICBmc2l6ZSA9IHl5LT5sZW5ndGg7CisJfSBl bHNlIGlmICh5eS0+bGVuZ3RoayA+IChDS19PRkZfVCktMSAmJiAhb3ZlcmZsb3cpIHsKKwkgICAg ZnNpemUgPSB5eS0+bGVuZ3RoayAqIDEwMjRMOworCX0gZWxzZSBmc2l6ZSA9IHl5LT5sZW5ndGg7 CS8qIChlLmcuIC0yTCkgKi8KKyAgICB9CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cp IHsKKyNpZmRlZiBDT01NRU5UCisJc3ByaW50ZihhYnVmLCIlbGQiLGZzaXplKTsJLyogc2FmZSAq LworI2Vsc2UKKwlja3N0cm5jcHkoYWJ1Zixja2ZzdG9hKGZzaXplKSxBQlVGTCk7CisjZW5kaWYJ LyogQ09NTUVOVCAqLworZGVidWcoRjExMCwiZ2F0dHIgZnNpemUiLGFidWYsMCk7CisgICAgfQor I2VuZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAocmV0Y29kZSA9PSAwKSBycCA9IHJwYnVmOwkv KiBOdWxsIHJlcGx5IHN0cmluZyBpZiBhY2NlcHRlZCAqLworICAgICpycCA9ICdcMCc7CQkJCS8q IEVuZCBvZiByZXBseSBzdHJpbmcgKi8KKworI2lmZGVmIENLX1JFU0VORAorICAgIGlmIChkID09 ICdSJykgewkJCS8qIFJlY2VpdmluZyBhIFJFU0VORD8gKi8KKwlkZWJ1ZyhGMTAxLCJnYXR0ciBS RVNFTkQiLCIiLHJldGNvZGUpOworCS8qIFdlIGlnbm9yZSByZXRjb2RlcyBiZWNhdXNlIHRoaXMg b3ZlcnJpZGVzICovCisJaWYgKGJpbmFyeSAhPSBYWUZUX0IpIHsJCS8qIFJlamVjdCBpZiBub3Qg YmluYXJ5ICovCisJICAgIHJldGNvZGUgPSAtMTsJCS8qIGluIGNhc2UgdHlwZSBmaWVsZCBjYW1l ICovCisJICAgIGNrc3RybmNweShycGJ1ZiwiTisiLFJQQlVGTCk7IC8qIGFmdGVyIHRoZSBkaXNw b3NpdGlvbiBmaWVsZCAqLworCSAgICBkZWJ1ZyhGMTExLCJnYXR0ciBSRVNFTkQgbm90IGJpbmFy eSIscnBidWYsYmluYXJ5KTsKKwl9IGVsc2UgewkJCS8qIEJpbmFyeSBtb2RlICovCisJICAgIHJl dGNvZGUgPSAwOwkJLyogQWNjZXB0IHRoZSBmaWxlICovCisJICAgIGRpc2NhcmQgPSAwOwkJLyog SWYgU0VUIEZJTEUgQ09MTElTSU9OIERJU0NBUkQgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIHNw cmludGYocnBidWYrMiwiJWxkIixyc19sZW4pOyAvKiBSZXBseSB3aXRoIGxlbmd0aCBvZiBmaWxl ICovCisjZWxzZQorCSAgICBja3N0cm5jcHkocnBidWYrMixja2ZzdG9hKHJzX2xlbiksUlBCVUZM LTIpOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKwkgICAgcnBidWZbMF0gPSAnMSc7CQkvKiAnMScg bWVhbnMgTGVuZ3RoIGluIEJ5dGVzICovCisJICAgIHJwYnVmWzFdID0gdG9jaGFyKChpbnQpc3Ry bGVuKHJwYnVmKzIpKTsgLyogTGVuZ3RoIG9mIGxlbmd0aCAqLworCSAgICBkZWJ1ZyhGMTExLCJn YXR0ciBSRVNFTkQgT0siLHJwYnVmLHJldGNvZGUpOworCX0KKyAgICB9CisjZW5kaWYgLyogQ0tf UkVTRU5EICovCisgICAgaWYgKHJldGNvZGUgPT0gMCAmJiBkaXNjYXJkICE9IDApIHsJLyogRG8g d2Ugc3RpbGwgaGF2ZSBhIGRpc2NhcmQgZmxhZz8gKi8KKwlja3N0cm5jcHkocnBidWYsIk4/IixS UEJVRkwpOwkvKiBZZXMsIG11c3QgYmUgZmlsZW5hbWUgY29sbGlzaW9uICovCisJcmV0Y29kZSA9 IC0xOwkJCS8qICI/IiA9IG5hbWUgKHJlcGx5LW9ubHkgY29kZSkgKi8KKyAgICB9CisgICAgeXkt PnJlcGx5LnZhbCA9IHJwYnVmOwkJLyogQWRkIGl0IHRvIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8K KyAgICB5eS0+cmVwbHkubGVuID0gKGludClzdHJsZW4ocnBidWYpOworICAgIGlmIChyZXRjb2Rl IDwgMCkgewkJCS8qIElmIHdlIGFyZSByZWplY3RpbmcgKi8KKwlkaXNjYXJkID0gMTsJCQkvKiBy ZW1lbWJlciB0byBkaXNjYXJkIHRoZSBmaWxlICovCisJcmVqZWN0aW9uID0gcnBidWZbMV07CQkv KiBhbmQgdXNlIHRoZSBmaXJzdCByZWFzb24gZ2l2ZW4uICovCisJaWYgKGZuY3NhdiAhPSAtMSkg eworCSAgICBmbmNhY3QgPSBmbmNzYXY7CisJICAgIGZuY3NhdiA9IC0xOworCX0KKyAgICB9Cisg ICAgZGVidWcoRjExMSwiZ2F0dHIgcmV0dXJuIixycGJ1ZixyZXRjb2RlKTsKKyAgICByZXR1cm4o cmV0Y29kZSk7Cit9CisKKy8qICBJIE4gSSBUIEEgVCBUIFIgIC0tICBJbml0aWFsaXplIGZpbGUg YXR0cmlidXRlIHN0cnVjdHVyZSAgKi8KKworaW50Citpbml0YXR0cih5eSkgc3RydWN0IHphdHRy ICp5eTsgeworICAgIHl5LT5sZW5ndGhrID0geXktPmxlbmd0aCA9IChDS19PRkZfVCktMTsKKyAg ICB5eS0+dHlwZS52YWwgPSAiIjsKKyAgICB5eS0+dHlwZS5sZW4gPSAwOworICAgIHl5LT5kYXRl LnZhbCA9ICIiOworICAgIHl5LT5kYXRlLmxlbiA9IDA7CisgICAgeXktPmVuY29kaW5nLnZhbCA9 ICIiOworICAgIHl5LT5lbmNvZGluZy5sZW4gPSAwOworICAgIHl5LT5kaXNwLnZhbCA9ICIiOwor ICAgIHl5LT5kaXNwLmxlbiA9IDA7CisgICAgeXktPnN5c3RlbWlkLnZhbCA9ICIiOworICAgIHl5 LT5zeXN0ZW1pZC5sZW4gPSAwOworICAgIHl5LT5zeXNwYXJhbS52YWwgPSAiIjsKKyAgICB5eS0+ c3lzcGFyYW0ubGVuID0gMDsKKyAgICB5eS0+Y3JlYXRvci52YWwgPSAiIjsKKyAgICB5eS0+Y3Jl YXRvci5sZW4gPSAwOworICAgIHl5LT5hY2NvdW50LnZhbCA9ICIiOworICAgIHl5LT5hY2NvdW50 LmxlbiA9IDA7CisgICAgeXktPmFyZWEudmFsID0gIiI7CisgICAgeXktPmFyZWEubGVuID0gMDsK KyAgICB5eS0+cGFzc3dvcmQudmFsID0gIiI7CisgICAgeXktPnBhc3N3b3JkLmxlbiA9IDA7Cisg ICAgeXktPmJsa3NpemUgPSAtMUw7CisgICAgeXktPnhhY2Nlc3MudmFsID0gIiI7CisgICAgeXkt PnhhY2Nlc3MubGVuID0gMDsKKyNpZmRlZiBDS19QRVJNUworICAgIGlmICghb2ZwZXJtcykgb2Zw ZXJtcyA9ICIiOworICAgIGRlYnVnKEYxMTAsImluaXRhdHRyIG9mcGVybXMiLG9mcGVybXMsMCk7 CisgICAgeXktPmxwcm90ZWN0LnZhbCA9IG9mcGVybXM7CisgICAgeXktPmxwcm90ZWN0LmxlbiA9 IDAgLSBzdHJsZW4ob2ZwZXJtcyk7IC8qIDwtLSBOT1RFISAqLworICAgIC8qCisgICAgICBBIG5l Z2F0aXZlIGxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGEgcGVybWlzc2lvbnMgc3RyaW5n IGJ1dCBpdCBoYXMKKyAgICAgIGJlZW4gaW5oZXJpdGVkIGZyb20gYSBwcmV2aW91c2x5IGV4aXN0 aW5nIGZpbGUgcmF0aGVyIHRoYW4gcGlja2VkIHVwCisgICAgICBmcm9tIGFuIGluY29taW5nIEEt cGFja2V0LgorICAgICovCisjZWxzZQorICAgIHl5LT5scHJvdGVjdC52YWwgPSAiIjsKKyAgICB5 eS0+bHByb3RlY3QubGVuID0gMDsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworICAgIHl5LT5ncHJv dGVjdC52YWwgPSAiIjsKKyAgICB5eS0+Z3Byb3RlY3QubGVuID0gMDsKKyAgICB5eS0+cmVjZm0u dmFsID0gIiI7CisgICAgeXktPnJlY2ZtLmxlbiA9IDA7CisgICAgeXktPnJlcGx5LnZhbCA9ICIi OworICAgIHl5LT5yZXBseS5sZW4gPSAwOworI2lmZGVmIE9TMgorICAgIHl5LT5sb25nbmFtZS5s ZW4gPSAwIDsKKyAgICB5eS0+bG9uZ25hbWUudmFsID0gIiIgOworI2VuZGlmIC8qIE9TMiAqLwor ICAgIHJldHVybigwKTsKK30KKworLyogIEEgRCBFIEIgVSAtLSBXcml0ZSBhdHRyaWJ1dGUgcGFj a2V0IGluZm8gdG8gZGVidWcgbG9nICAqLworCitpbnQKK2FkZWJ1KGYsenopIGNoYXIgKmY7IHN0 cnVjdCB6YXR0ciAqeno7IHsKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgPT0gMCkgcmV0 dXJuKDApOworICAgIGRlYnVnKEYxMTAsIkF0dHJpYnV0ZXMgZm9yIGluY29taW5nIGZpbGUgIixm LDApOworICAgIGRlYnVnKEYxMDEsIiBsZW5ndGggaW4gSyIsIiIsKGludCkgenotPmxlbmd0aGsp OworICAgIGRlYnVnKEYxMTEsIiBmaWxlIHR5cGUiLHp6LT50eXBlLnZhbCx6ei0+dHlwZS5sZW4p OworICAgIGRlYnVnKEYxMTEsIiBjcmVhdGlvbiBkYXRlIix6ei0+ZGF0ZS52YWwsenotPmRhdGUu bGVuKTsKKyAgICBkZWJ1ZyhGMTExLCIgY3JlYXRvciIsenotPmNyZWF0b3IudmFsLHp6LT5jcmVh dG9yLmxlbik7CisgICAgZGVidWcoRjExMSwiIGFjY291bnQiLHp6LT5hY2NvdW50LnZhbCx6ei0+ YWNjb3VudC5sZW4pOworICAgIGRlYnVnKEYxMTEsIiBhcmVhIix6ei0+YXJlYS52YWwsenotPmFy ZWEubGVuKTsKKyAgICBkZWJ1ZyhGMTExLCIgcGFzc3dvcmQiLHp6LT5wYXNzd29yZC52YWwsenot PnBhc3N3b3JkLmxlbik7CisgICAgZGVidWcoRjEwMSwiIGJsa3NpemUiLCIiLChpbnQpIHp6LT5i bGtzaXplKTsKKyAgICBkZWJ1ZyhGMTExLCIgYWNjZXNzIix6ei0+eGFjY2Vzcy52YWwsenotPnhh Y2Nlc3MubGVuKTsKKyAgICBkZWJ1ZyhGMTExLCIgZW5jb2RpbmciLHp6LT5lbmNvZGluZy52YWws enotPmVuY29kaW5nLmxlbik7CisgICAgZGVidWcoRjExMSwiIGRpc3Bvc2l0aW9uIix6ei0+ZGlz cC52YWwsenotPmRpc3AubGVuKTsKKyAgICBkZWJ1ZyhGMTExLCIgbHByb3RlY3Rpb24iLHp6LT5s cHJvdGVjdC52YWwsenotPmxwcm90ZWN0Lmxlbik7CisgICAgZGVidWcoRjExMSwiIGdwcm90ZWN0 aW9uIix6ei0+Z3Byb3RlY3QudmFsLHp6LT5ncHJvdGVjdC5sZW4pOworICAgIGRlYnVnKEYxMTEs IiBzeXN0ZW1pZCIsenotPnN5c3RlbWlkLnZhbCx6ei0+c3lzdGVtaWQubGVuKTsKKyAgICBkZWJ1 ZyhGMTExLCIgcmVjZm0iLHp6LT5yZWNmbS52YWwsenotPnJlY2ZtLmxlbik7CisgICAgZGVidWco RjExMSwiIHN5c3BhcmFtIix6ei0+c3lzcGFyYW0udmFsLHp6LT5zeXNwYXJhbS5sZW4pOworICAg IGRlYnVnKEYxMDEsIiBsZW5ndGgiLCIiLChpbnQpIHp6LT5sZW5ndGgpOworICAgIGRlYnVnKEYx MTAsIiByZXBseSIsenotPnJlcGx5LnZhbCwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJl dHVybigwKTsKK30KKworLyogIE8gUCBFIE4gQSAtLSBPcGVuIGEgZmlsZSwgd2l0aCBhdHRyaWJ1 dGVzLiAgKi8KKy8qCisgIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gb3BlbiBhIG5ldyBmaWxlIHRv IHB1dCB0aGUgYXJyaXZpbmcgZGF0YSBpbi4gIFRoZQorICBmaWxlbmFtZSBpcyB0aGUgb25lIGlu IHRoZSBzcnZjbWQgYnVmZmVyLiAgRmlsZSBjb2xsaXNpb24gYWN0aW9ucyBhcmU6CisgIE9WRVJX UklURSAodGhlIGV4aXN0aW5nIGZpbGUgaXMgb3ZlcndyaXR0ZW4pLCBSRU5BTUUgKHRoZSBuZXcg ZmlsZSBpcworICByZW5hbWVkKSwgQkFDS1VQICh0aGUgZXhpc3RpbmcgZmlsZSBpcyByZW5hbWVk KSwgRElTQ0FSRCAodGhlIG5ldyBmaWxlIGlzCisgIHJlZnVzZWQpLCBVUERBVEUgKHRoZSBpbmNv bWluZyBmaWxlIHJlcGxhY2VzIHRoZSBleGlzdGluZyBmaWxlIG9ubHkgaWYgdGhlCisgIGluY29t aW5nIGZpbGUgaGFzIGEgbmV3ZXIgY3JlYXRpb24gZGF0ZSkuCisKKyAgUmV0dXJucyAwIG9uIGZh aWx1cmUsIG5vbnplcm8gb24gc3VjY2Vzcy4KKyovCitleHRlcm4gY2hhciAqcmZfZXJyOworCitp bnQKK29wZW5hKGYsenopIGNoYXIgKmY7IHN0cnVjdCB6YXR0ciAqeno7IHsKKyAgICBpbnQgeCwg ZGlzcG9zID0gMDsKKyAgICBzdGF0aWMgc3RydWN0IGZpbGluZm8gZmNiOwkJLyogTXVzdCBiZSBz dGF0aWMhICovCisKKyAgICBkZWJ1ZyhGMTEwLCJvcGVuYSBmIixmLDApOworICAgIGRlYnVnKEYx MDEsIm9wZW5hIGRpc2NhcmQiLCIiLGRpc2NhcmQpOworCisgICAgYWRlYnUoZix6eik7CQkJLyog V3JpdGUgYXR0cmlidXRlcyB0byBkZWJ1ZyBsb2cgKi8KKworICAgIGZmYyA9IChDS19PRkZfVCkw OwkJCS8qIEluaXQgZmlsZS1jaGFyYWN0ZXIgY291bnRlciAqLworCisjaWZkZWYgUElQRVNFTkQK KyAgICBpZiAocGlwZXNlbmQpCQkJLyogUmVjZWl2aW5nIHRvIGEgcGlwZSAtIGVhc3kuICovCisg ICAgICByZXR1cm4ob3Blbm8oZix6eiwmZmNiKSk7CQkvKiBKdXN0IG9wZW4gdGhlIHBpcGUuICov CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworICAgIC8qIFJlY2VpdmluZyB0byBhIGZpbGUgLSBz ZXQgdXAgZmlsZSBjb250cm9sIHN0cnVjdHVyZSAqLworCisgICAgZmNiLmJzID0gZmJsa3NpejsJ CQkvKiBCbG9ja3NpemUgKi8KKyNpZm5kZWYgTk9DU0VUUworICAgIGZjYi5jcyA9IGZjaGFyc2V0 OwkJCS8qIENoYXJhY3RlciBzZXQgKi8KKyNlbHNlCisgICAgZmNiLmNzID0gMDsJCQkJLyogQ2hh cmFjdGVyIHNldCAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICBmY2IucmwgPSBmcmVjbDsJ CQkvKiBSZWNvcmQgTGVuZ3RoICovCisgICAgZmNiLmZtdCA9IGZyZWNmbTsJCQkvKiBSZWNvcmQg Rm9ybWF0ICovCisgICAgZmNiLm9yZyA9IGZvcmc7CQkJLyogT3JnYW5pemF0aW9uICovCisgICAg ZmNiLmNjID0gZmNjdHJsOwkJCS8qIENhcnJpYWdlIGNvbnRyb2wgKi8KKyAgICBmY2IudHlwID0g YmluYXJ5OwkJCS8qIFR5cGUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJvcGVuYSB4ZmxnIiwiIix4Zmxn KTsKKyAgICBkZWJ1ZyhGMTAxLCJvcGVuYSByZW1maWxlIiwiIixyZW1maWxlKTsKKyAgICBkZWJ1 ZyhGMTAxLCJvcGVuYSByZW1hcHBkIiwiIixyZW1hcHBkKTsKKyAgICBpZiAoeGZsZyAmJiByZW1m aWxlICYmIHJlbWFwcGQpCS8qIFJFTU9URSBvdXRwdXQgcmVkaXJlY3RlZCB3aXRoID4+ICovCisg ICAgICBmY2IuZHNwID0gWFlGWl9BOworICAgIGVsc2UKKyAgICAgIGZjYi5kc3AgPSAoZm5jYWN0 ID09IFhZRlhfQSkgPyBYWUZaX0EgOiBYWUZaX047IC8qIERpc3Bvc2l0aW9uICovCisgICAgZGVi dWcoRjEwMSwib3BlbmEgZGlzcCIsIiIsZmNiLmRzcCk7CisgICAgZmNiLm9zX3NwZWNpZmljID0g IiI7CQkvKiBPUy1zcGVjaWZpYyBpbmZvICovCisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIGZjYi5s YmxvcHRzID0gbGZfb3B0czsJCS8qIExhYmVsZWQgZmlsZSBvcHRpb25zICovCisjZWxzZQorICAg IGZjYi5sYmxvcHRzID0gMDsKKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisKKyAgICBpZiAoenot PmRpc3AubGVuID4gMCkgewkJLyogSW5jb21pbmcgZmlsZSBoYXMgYSBkaXNwb3NpdGlvbj8gKi8K KwlkZWJ1ZyhGMTExLCJvcGVuIGRpc3Bvc2l0aW9uIix6ei0+ZGlzcC52YWwsenotPmRpc3AubGVu KTsKKwlkaXNwb3MgPSAoaW50KSAoKih6ei0+ZGlzcC52YWwpKTsKKyAgICB9CisgICAgaWYgKCFk aXNwb3MgJiYgeGZsZyAmJiByZW1maWxlICYmIHJlbWFwcGQpIC8qIFJFTU9URSByZWRpcmVjdCBh cHBlbmQgPyAqLworICAgICAgZGlzcG9zID0gZmNiLmRzcDsKKworICAgIGRlYnVnKEYxMDEsIm9w ZW5hIGRpc3BvcyIsIiIsZGlzcG9zKTsKKworICAgIGlmICghZGlzcG9zKSB7CQkJICAgICAgICAg LyogTm8gc3BlY2lhbCBkaXNwb3NpdGlvbj8gKi8KKwlpZiAoZm5jYWN0ID09IFhZRlhfQiAmJiBv Zm4xeCAmJiBvZm4yKSB7IC8qIEZpbGUgY29sbGlzaW9uID0gQkFDS1VQPyAqLworCSAgICBpZiAo enJlbmFtZShvZm4xLG9mbjIpIDwgMCkgeyAgICAgICAgLyogUmVuYW1lIGV4aXN0aW5nIGZpbGUu ICovCisJCWRlYnVnKEYxMTAsIm9wZW5hIHJlbmFtZSBmYWlscyIsb2ZuMSwwKTsKKwkJcmZfZXJy ID0gIkNhbid0IGNyZWF0ZSBiYWNrdXAgZmlsZSI7CisJCXJldHVybigwKTsKKwkgICAgfSBlbHNl IGRlYnVnKEYxMTAsIm9wZW5hIHJlbmFtZSBvayIsb2ZuMiwwKTsKKwl9CisgICAgfSBlbHNlIGlm IChkaXNwb3MgPT0gJ1InKSB7CQkvKiBSZWNlaXZpbmcgYSBSRVNFTkQgKi8KKwlkZWJ1ZyhGMTAx LCJvcGVuYSByZW1vdGUgbGVuIiwiIix6ei0+bGVuZ3RoKTsKKwlkZWJ1ZyhGMTAxLCJvcGVuYSBs b2NhbCBsZW4iLCIiLHJzX2xlbik7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAoZm5jYWN0 ID09IFhZRlhfUikJCS8qIGFuZCBmaWxlIGNvbGxpc2lvbiA9IFJFTkFNRSAqLworCSAgaWYgKG9m bjF4KQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlpZiAob2ZuMVswXSkKKwkgIGYgPSBvZm4xOwkJ CS8qIHVzZSBvcmlnaW5hbCBuYW1lLiAqLworICAgICAgICBpZiAoZm5jYWN0ID09IFhZRlhfUikJ CS8qIGlmIGZpbGUgY29sbGlzaW9uIGlzIFJFTkFNRSAqLworICAgICAgICAgIGNrc3RybmNweShm aWxuYW0sb2ZuMSxDS01BWFBBVEgrMSk7IC8qIHJlc3RvcmUgdGhlIHJlYWwgbmFtZSAqLworICAg ICAgICB4eHNjcmVlbihTQ1JfQU4sMCwwTCxmKTsJLyogdXBkYXRlIG5hbWUgb24gc2NyZWVuICov CisJaWYgKHp6LT5sZW5ndGggPT0gcnNfbGVuKQkvKiBMb2NhbCBhbmQgcmVtb3RlIGxlbmd0aHMg ZXF1YWw/ICovCisJICByZXR1cm4oLTE3KTsJCQkvKiBTZWNyZXQgY29kZSAqLworICAgIH0KKyAg ICBkZWJ1ZyhGMTExLCJvcGVuYSBbZmlsZV09bW9kZTogIixmLGZjYi5kc3ApOworICAgIGlmICh4 ID0gb3Blbm8oZix6eiwmZmNiKSkgewkJLyogVHJ5IHRvIG9wZW4gdGhlIGZpbGUuICovCisjaWZk ZWYgcGRwMTEKKwl0bG9nKEYxMTAsIiBsb2NhbCBuYW1lOiIsZiwwTCk7CS8qIE9LLCBvcGVuLCBy ZWNvcmQgbG9jYWwgbmFtZS4gKi8KKwltYWtlc3RyKCZwcmZzcGVjLGYpOwkJLyogTmV3IHByZWxp bWluYXJ5IG5hbWUgKi8KKyNlbHNlCisjaWZuZGVmIFpGTlFGUAorCXRsb2coRjExMCwiIGxvY2Fs IG5hbWU6IixmLDBMKTsKKwltYWtlc3RyKCZwcmZzcGVjLGYpOworI2Vsc2UKKwl7CQkJCS8qIExv ZyBmdWxsIGxvY2FsIHBhdGhuYW1lICovCisJICAgIGNoYXIgKnAgPSBOVUxMLCAqcSA9IGY7CisJ ICAgIGlmICgocCA9IG1hbGxvYyhDS01BWFBBVEgrMSkpKQorCSAgICAgIGlmICh6Zm5xZnAoZmls bmFtLCBDS01BWFBBVEgsIHApKQorCQlxID0gcDsKKwkgICAgdGxvZyhGMTEwLCIgbG9jYWwgbmFt ZToiLHEsMEwpOworCSAgICBtYWtlc3RyKCZwcmZzcGVjLHEpOworCSAgICBpZiAocCkgZnJlZShw KTsKKwl9CisjZW5kaWYgLyogWkZOUUZQICovCisjZW5kaWYgLyogcGRwMTEgKi8KKworCWlmIChi aW5hcnkpIHsJCQkvKiBMb2cgZmlsZSBtb2RlIGluIHRyYW5zYWN0aW9uIGxvZyAqLworCSAgICB0 bG9nKEYxMDEsIiBtb2RlOiBiaW5hcnkiLCIiLChsb25nKSBiaW5hcnkpOworCX0gZWxzZSB7CQkJ LyogSWYgdGV4dCBtb2RlLCBjaGVjayBjaGFyYWN0ZXIgc2V0ICovCisJICAgIHRsb2coRjEwMCwi IG1vZGU6IHRleHQiLCIiLDBMKTsKKyNpZm5kZWYgTk9DU0VUUworCSAgICBpZiAoeGZyeGxhKSB7 CisJCWlmIChmY2hhcnNldCA+IC0xICYmIGZjaGFyc2V0IDw9IE1BWEZDU0VUUykKKwkJICB0bG9n KEYxMTAsIiBmaWxlIGNoYXJhY3Rlci1zZXQ6IixmY3NpbmZvW2ZjaGFyc2V0XS5uYW1lLDBMKTsK KwkJaWYgKHRjaGFyc2V0ID4gLTEgJiYgdGNoYXJzZXQgPD0gTUFYVENTRVRTKQorCQkgIHRsb2co RjExMCwiIHhmZXIgY2hhcmFjdGVyLXNldDoiLHRjc2luZm9bdGNoYXJzZXRdLm5hbWUsMEwpOwor CSAgICB9IGVsc2UgeworCQkgIHRsb2coRjExMCwiIGNoYXJhY3Rlci1zZXQ6IiwidHJhbnNwYXJl bnQiLDBMKTsKKwkgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkgICAgZGVidWcoRjExMSwi b3BlbmEgY2hhcnNldCIsenotPmVuY29kaW5nLnZhbCx6ei0+ZW5jb2RpbmcubGVuKTsKKwl9CisJ ZGVidWcoRjEwMSwib3BlbmEgYmluYXJ5IiwiIixiaW5hcnkpOworCisjaWZkZWYgQ09NTUVOVAor CWlmIChmc2l6ZSA+PSAwKQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgIHh4c2NyZWVuKFNDUl9G UywwLGZzaXplLCIiKTsKKworI2lmZGVmIGRhdGFnZW5lcmFsCisvKgorICBOZWVkIHRvIHR1cm4g b24gbXVsdGktdGFza2luZyBjb25zb2xlIGludGVycnVwdCB0YXNrIGhlcmUsIHNpbmNlIG11bHRp cGxlCisgIGZpbGVzIG1heSBiZSByZWNlaXZlZCAoaHVoPykgLi4uCisqLworICAgICAgICBpZiAo KGxvY2FsKSAmJiAoIXF1aWV0KSkgICAgICAgIC8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5v dCBxdWlldCAqLworCSAgY29uc3RhX210KCk7CQkJLyogU3RhcnQgdGhlIGFzeW5jIHJlYWQgdGFz ayAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyAgICB9IGVsc2UgewkJCQkvKiBEaWQg bm90IG9wZW4gZmlsZSBPSy4gKi8KKworCXJmX2VyciA9IGNrX2VycnN0cigpOwkJLyogR2V0IHN5 c3RlbSBlcnJvciBtZXNzYWdlICovCisJaWYgKCpyZl9lcnIpCisJICB4eHNjcmVlbihTQ1JfRU0s MCwwbCxyZl9lcnIpOworCWVsc2UKKwkgIHh4c2NyZWVuKFNDUl9FTSwwLDBsLCJDYW4ndCBvcGVu IG91dHB1dCBmaWxlIik7CisgICAgICAgIHRsb2coRjExMCwiRmFpbHVyZSB0byBvcGVuIixmLDBM KTsKKyAgICAgICAgdGxvZyhGMTEwLCJFcnJvcjoiLHJmX2VyciwwTCk7CisJZGVidWcoRjExMCwi b3BlbmEgZXJyb3IiLHJmX2VyciwwKTsKKyAgICB9CisgICAgcmV0dXJuKHgpOwkJCQkvKiBQYXNz IG9uIHJldHVybiBjb2RlIGZyb20gb3Blbm8gKi8KK30KKworLyogIE8gUCBFIE4gQyAgLS0gIE9w ZW4gYSBjb21tYW5kIChpbiBwbGFjZSBvZiBhIGZpbGUpIGZvciBvdXRwdXQgKi8KKworaW50Citv cGVuYyhuLHMpIGludCBuOyBjaGFyICogczsgeworICAgIGludCB4OworI2lmbmRlZiBOT1BVU0gK KyAgICB4ID0genhjbWQobixzKTsKKyNlbHNlCisgICAgeCA9IDA7CisjZW5kaWYgLyogTk9QVVNI ICovCisgICAgZGVidWcoRjExMSwib3BlbmMgenhjbWQiLHMseCk7CisgICAgb19pc29wZW4gPSAo eCA+IDApID8gMSA6IDA7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgQyBBIE4gTiBFIEQgIC0t ICBDaGVjayBpZiBjdXJyZW50IGZpbGUgdHJhbnNmZXIgY2FuY2VsbGVkICovCisKK2ludAorY2Fu bmVkKGJ1ZikgQ0hBUiAqYnVmOyB7CisgICAgZXh0ZXJuIGludCBpbnRlcnJ1cHRlZDsKKyAgICBp ZiAoKmJ1ZiA9PSAnWCcpIGN4c2VlbiA9IDE7CisgICAgaWYgKCpidWYgPT0gJ1onKSBjenNlZW4g PSAxOworICAgIGlmIChjenNlZW4gfHwgY3hzZWVuKQorICAgICAgaW50ZXJydXB0ZWQgPSAxOwor ICAgIGRlYnVnKEYxMDEsImNhbm5lZDogY3hzZWVuIiwiIixjeHNlZW4pOworICAgIGRlYnVnKEYx MDEsIiBjenNlZW4iLCIiLGN6c2Vlbik7CisgICAgcmV0dXJuKChjenNlZW4gfHwgY3hzZWVuKSA/ IDEgOiAwKTsKK30KKworCisvKiAgTyBQIEUgTiBJICAtLSAgT3BlbiBhbiBleGlzdGluZyBmaWxl IGZvciBpbnB1dCAgKi8KKworaW50CitvcGVuaShuYW1lKSBjaGFyICpuYW1lOyB7CisjaWZuZGVm IE5PU0VSVkVSCisgICAgZXh0ZXJuIGludCBmcm9tZ2V0cGF0aDsKKyNlbmRpZiAvKiBOT1NFUlZF UiAqLworICAgIGludCB4LCBmaWxubzsKKyAgICBjaGFyICpuYW1lMjsKKyAgICBleHRlcm4gQ0hB UiAqZXBrdG1zZzsKKworICAgIGVwa3Rtc2dbMF0gPSBOVUw7CQkJLyogSW5pdGlhbGl6ZSBlcnJv ciBtZXNzYWdlICovCisgICAgaWYgKG1lbXN0ciB8fCBzbmRhcnJheSkgewkJLyogSnVzdCByZXR1 cm4gaWYgImZpbGUiIGlzIG1lbW9yeS4gKi8KKwlpX2lzb3BlbiA9IDE7CisJcmV0dXJuKDEpOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJvcGVuaSBuYW1lIixuYW1lLDApOworICAgIGRlYnVnKEYx MDEsIm9wZW5pIHNuZHNyYyIsIiIsc25kc3JjKTsKKworICAgIGZpbG5vID0gKHNuZHNyYyA9PSAw KSA/IFpTVERJTyA6IFpJRklMRTsgICAgLyogLi4uICovCisgICAgZGVidWcoRjEwMSwib3Blbmkg ZmlsZSBudW1iZXIiLCIiLGZpbG5vKTsKKworI2lmbmRlZiBOT1NFUlZFUgorICAgIC8qIElmIEkn bSBhIHNlcnZlciBhbmQgQ1dEIGlzIGRpc2FibGVkIGFuZCBuYW1lIGlzIG5vdCBmcm9tIEdFVC1Q QVRILi4uICovCisKKyAgICBpZiAoc2VydmVyICYmICFlbl9jd2QgJiYgIWZyb21nZXRwYXRoKSB7 CisJenN0cmlwKG5hbWUsJm5hbWUyKTsKKwlpZiAoCQkJCS8qIC4uLiBjaGVjayBpZiBwYXRobmFt ZSBpbmNsdWRlZC4gKi8KKyNpZmRlZiBWTVMKKwkgICAgemNoa3BhdGgobmFtZSkKKyNlbHNlCisJ ICAgIHN0cmNtcChuYW1lLG5hbWUyKQorI2VuZGlmIC8qIFZNUyAqLworCSAgICApIHsKKwkgICAg dGxvZyhGMTEwLG5hbWUsImFjY2VzcyBkZW5pZWQiLDBMKTsKKwkgICAgZGVidWcoRjExMCwib3Bl bmkgQ0QgZGlzYWJsZWQiLG5hbWUsMCk7CisJICAgIGNrc3RybmNweSgoY2hhciAqKWVwa3Rtc2cs IkFjY2VzcyBkZW5pZWQiLFBLVE1TR0xFTik7CisJICAgIHJldHVybigwKTsKKwl9IGVsc2UgbmFt ZSA9IG5hbWUyOworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisjaWZkZWYgUElQRVNF TkQKKyAgICBkZWJ1ZyhGMTAxLCJvcGVuaSBwaXBlc2VuZCIsIiIscGlwZXNlbmQpOworICAgIGlm IChwaXBlc2VuZCkgeworCWludCB4OworI2lmbmRlZiBOT1BVU0gKKwl4ID0genhjbWQoWklGSUxF LG5hbWUpOworI2Vsc2UKKwl4ID0gMDsKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKwlpX2lzb3BlbiA9 ICh4ID4gMCkgPyAxIDogMDsKKwlpZiAoIWlfaXNvcGVuKQorCSAgY2tzdHJuY3B5KChjaGFyICop ZXBrdG1zZywiQ29tbWFuZCBvciBwaXBlIGZhaWx1cmUiLFBLVE1TR0xFTik7CisJZGVidWcoRjEx MSwib3BlbmkgcGlwZXNlbmQgenhjbWQiLG5hbWUseCk7CisJcmV0dXJuKGlfaXNvcGVuKTsKKyAg ICB9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmZGVmIENBTElCUkFURQorICAgIGlmIChj YWxpYnJhdGUpIHsKKwlpX2lzb3BlbiA9IDE7CisgICAgCXJldHVybigxKTsKKyAgICB9CisjZW5k aWYgLyogQ0FMSUJSQVRFICovCisKKyAgICB4ID0gem9wZW5pKGZpbG5vLG5hbWUpOwkJLyogT3Ro ZXJ3aXNlLCB0cnkgdG8gb3BlbiBpdC4gKi8KKyAgICBkZWJ1ZyhGMTExLCJvcGVuaSB6b3Blbmkg MSIsbmFtZSx4KTsKKyAgICBpZiAoeCkgeworCWlfaXNvcGVuID0gMTsKKyAgICAJcmV0dXJuKDEp OworICAgIH0gZWxzZSB7CQkJCS8qIElmIG5vdCBmb3VuZCwgKi8KKwljaGFyIHhuYW1lW0NLTUFY UEFUSF07CQkvKiBjb252ZXJ0IHRoZSBuYW1lICovCisjaWZkZWYgTlpMVE9SCisJbnpydG9sKG5h bWUseG5hbWUsZm5jbnYsZm5ycGF0aCxDS01BWFBBVEgpOworI2Vsc2UKKwl6cnRvbChuYW1lLHhu YW1lKTsJCS8qIHRvIGxvY2FsIGZvcm0gYW5kIHRoZW4gKi8KKyNlbmRpZiAvKiAgTlpMVE9SICov CisJeCA9IHpvcGVuaShmaWxubyx4bmFtZSk7CS8qIHRyeSBvcGVuaW5nIGl0IGFnYWluLiAqLwor CWRlYnVnKEYxMTEsIm9wZW5pIHpvcGVuaSAyIix4bmFtZSx4KTsKKwlpZiAoeCkgeworCSAgICBp X2lzb3BlbiA9IDE7CisJICAgIHJldHVybigxKTsJCQkvKiBJdCB3b3JrZWQuICovCisgICAgICAg IH0gZWxzZSB7CisJICAgIGNoYXIgKiBzOworCSAgICBzID0gY2tfZXJyc3RyKCk7CisJICAgIGlm IChzKSBpZiAoIXMpIHMgPSBOVUxMOworCSAgICBpZiAoIXMpIHMgPSAiQ2FuJ3Qgb3BlbiBmaWxl IjsKKwkgICAgY2tzdHJuY3B5KChjaGFyICopZXBrdG1zZyxzLFBLVE1TR0xFTik7CisJICAgIHRs b2coRjExMCx4bmFtZSxzLDBMKTsKKwkgICAgZGVidWcoRjExMCwib3BlbmkgZmFpbGVkIix4bmFt ZSwwKTsKKwkgICAgZGVidWcoRjExMCwib3BlbmkgbWVzc2FnZSIscywwKTsKKwkgICAgaV9pc29w ZW4gPSAwOworCSAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qICBPIFAg RSBOIE8gIC0tICBPcGVuIGEgbmV3IGZpbGUgZm9yIG91dHB1dC4gICovCisKK2ludAorb3Blbm8o bmFtZSx6eixmY2IpIGNoYXIgKm5hbWU7IHN0cnVjdCB6YXR0ciAqeno7IHN0cnVjdCBmaWxpbmZv ICpmY2I7IHsKKyAgICBjaGFyICpuYW1lMjsKKyNpZmRlZiBEVElMREUKKyAgICBjaGFyICpkaXJw OworI2VuZGlmIC8qIERUSUxERSAqLworCisgICAgaW50IGNoYW5uZWwsIHg7CisKKyAgICBpZiAo c3Rkb3VmKSB7CQkJCS8qIFJlY2VpdmluZyB0byBzdGRvdXQ/ICovCisJeCA9IHpvcGVubyhaU1RE SU8sIiIsenosTlVMTCk7CisJb19pc29wZW4gPSAoeCA+IDApOworCWRlYnVnKEYxMDEsIm9wZW5v IHN0ZG91ZiB6b3Blbm8iLCIiLHgpOworCXJldHVybih4KTsKKyAgICB9CisgICAgZGVidWcoRjEx MCwib3Blbm86IG5hbWUiLG5hbWUsMCk7CisKKyAgICBpZiAoY3hzZWVuIHx8IGN6c2VlbiB8fCBk aXNjYXJkKSB7CS8qIElmIGludGVycnVwdGVkLCBnZXQgb3V0IGJlZm9yZSAqLworCWRlYnVnKEYx MDAsIiBvcGVuIGNhbmNlbGxlZCIsIiIsMCk7IC8qIGRlc3Ryb3lpbmcgZXhpc3RpbmcgZmlsZS4g Ki8KKwlyZXR1cm4oMSk7CQkJLyogUHJldGVuZCB0byBzdWNjZWVkLiAqLworICAgIH0KKyAgICBj aGFubmVsID0gWk9GSUxFOwkJCS8qIFNFVCBERVNUSU5BVElPTiBESVNLIG9yIFBSSU5URVIgKi8K KworI2lmZGVmIFBJUEVTRU5ECisgICAgZGVidWcoRjEwMSwib3Blbm8gcGlwZXNlbmQiLCIiLHBp cGVzZW5kKTsKKyAgICBpZiAocGlwZXNlbmQpIHsKKwlpbnQgeDsKKyNpZm5kZWYgTk9QVVNICisJ eCA9IHp4Y21kKFpPRklMRSwoY2hhciAqKXNydmNtZCk7CisjZWxzZQorCXggPSAwOworI2VuZGlm IC8qIE5PUFVTSCAqLworCW9faXNvcGVuID0geCA+IDA7CisJZGVidWcoRjEwMSwib3Blbm8genhj bWQiLCIiLHgpOworCXJldHVybih4KTsKKyAgICB9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKwor ICAgIGlmIChkZXN0ID09IERFU1RfUykgewkJLyogU0VUIERFU1QgU0NSRUVOLi4uICovCisJY2hh bm5lbCA9IFpDVEVSTTsKKwlmY2IgPSBOVUxMOworICAgIH0KKyNpZmRlZiBEVElMREUKKyAgICBp ZiAoKm5hbWUgPT0gJ34nKSB7CisJZGlycCA9IHRpbGRlX2V4cGFuZChuYW1lKTsKKwlpZiAoKmRp cnApIGNrc3RybmNweShuYW1lLGRpcnAsQ0tNQVhQQVRIKzEpOworICAgIH0KKyNlbmRpZiAvKiBE VElMREUgKi8KKyAgICBpZiAoc2VydmVyICYmICFlbl9jd2QpIHsJCS8qIElmIHJ1bm5pbmcgYXMg c2VydmVyICovCisJenN0cmlwKG5hbWUsJm5hbWUyKTsJCS8qIGFuZCBDV0QgaXMgZGlzYWJsZWQs ICovCisJaWYgKHN0cmNtcChuYW1lLG5hbWUyKSkgewkvKiBjaGVjayBpZiBwYXRobmFtZSB3YXMg aW5jbHVkZWQuICovCisJICAgIHRsb2coRjExMCxuYW1lLCJhdXRob3JpemF0aW9uIGZhaWx1cmUi LDBMKTsKKwkgICAgZGVidWcoRjExMCwib3Blbm8gQ0QgZGlzYWJsZWQiLG5hbWUsMCk7CisJICAg IHJldHVybigwKTsKKwl9IGVsc2UgbmFtZSA9IG5hbWUyOworICAgIH0KKyAgICBpZiAoem9wZW5v KGNoYW5uZWwsbmFtZSx6eixmY2IpIDw9IDApIHsgLyogVHJ5IHRvIG9wZW4gdGhlIGZpbGUgKi8K KwlvX2lzb3BlbiA9IDA7CisJZGVidWcoRjExMCwib3Blbm8gZmFpbGVkIixuYW1lLDApOworCS8q IHRsb2coRjExMCwiRmFpbHVyZSB0byBvcGVuIixuYW1lLDBMKTsgKi8KKwlyZXR1cm4oMCk7Cisg ICAgfSBlbHNlIHsKKwlvX2lzb3BlbiA9IDE7CisJZGVidWcoRjExMCwib3Blbm8gb2ssIG5hbWUi LG5hbWUsMCk7CisJcmV0dXJuKDEpOworICAgIH0KK30KKworLyogIE8gUCBFIE4gVCAgLS0gIE9w ZW4gdGhlIHRlcm1pbmFsIGZvciBvdXRwdXQsIGluIHBsYWNlIG9mIGEgZmlsZSAgKi8KKworaW50 CitvcGVudCh6eikgc3RydWN0IHphdHRyICp6ejsgeworICAgIGludCB4OworICAgIGZmYyA9IHRm YyA9IChDS19PRkZfVCkwOworICAgIHggPSB6b3Blbm8oWkNURVJNLCIiLHp6LE5VTEwpOworICAg IGRlYnVnKEYxMDEsIm9wZW50IHpvcGVubyIsIiIseCk7CisgICAgaWYgKHggPj0gMCkgeworCW9f aXNvcGVuID0gMTsKKwliaW5hcnkgPSBYWUZUX1Q7CisgICAgfSBlbHNlCisgICAgICByZXR1cm4o MCk7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgTyBQIEUgTiBYICAtLSAgT3BlbiBub3RoaW5n IChpbmNvbWluZyBmaWxlIHRvIGJlIGFjY2VwdGVkIGJ1dCBpZ25vcmVkKSAgKi8KKworaW50Citj a29wZW54KHp6KSBzdHJ1Y3QgemF0dHIgKnp6OyB7CisgICAgZmZjID0gdGZjID0gKENLX09GRl9U KTA7CQkvKiBSZXNldCBjb3VudGVycyAqLworICAgIG9faXNvcGVuID0gMTsKKyAgICBkZWJ1ZyhG MTAxLCJja29wZW54IGZzaXplIiwiIixmc2l6ZSk7CisgICAgeHhzY3JlZW4oU0NSX0ZTLDAsZnNp emUsIiIpOwkvKiBMZXQgc2NyZWVuIGRpc3BsYXkga25vdyB0aGUgc2l6ZSAqLworICAgIHJldHVy bigxKTsKK30KKworLyogIEMgTCBTIEkgRiAgLS0gIENsb3NlIHRoZSBjdXJyZW50IGlucHV0IGZp bGUuICovCisKK2ludAorY2xzaWYoKSB7CisgICAgZXh0ZXJuIGludCB4ZmVyc3RhdCwgc3VjY2Vz czsKKyAgICBpbnQgeCA9IDA7CisKKyAgICBmY3BzKCk7CQkJLyogQ2FsY3VsYXRlIENQUyBxdWlj a2x5ICovCisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIGlmICgobG9jYWwpICYmICghcXVpZXQp KSAgICAvKiBPbmx5IGRvIHRoaXMgaWYgbG9jYWwgJiBub3QgcXVpZXQgKi8KKyAgICAgIGlmIChu ZmlscyA8IDEpCQkvKiBNb3JlIGZpbGVzIHRvIHNlbmQgLi4uIGxlYXZlIGl0IG9uISAqLworCWNv bm5vaV9tdCgpOworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyAgICBkZWJ1ZyhGMTAxLCJj bHNpZiBpX2lzb3BlbiIsIiIsaV9pc29wZW4pOworICAgIGlmIChpX2lzb3BlbikgewkJCS8qIElm IGlucHV0IGZpbGUgaXMgb3Blbi4uLiAqLworCWlmIChtZW1zdHIpIHsJCQkvKiBJZiBpbnB1dCB3 YXMgbWVtb3J5IHN0cmluZywgKi8KKwkgICAgbWVtc3RyID0gMDsJCQkvKiBpbmRpY2F0ZSBubyBt b3JlLiAqLworCX0gZWxzZSB7CisJICAgIHggPSB6Y2xvc2UoWklGSUxFKTsJCS8qIGVsc2UgY2xv c2UgaW5wdXQgZmlsZS4gKi8KKwl9CisjaWZkZWYgREVCVUcKKwlpZiAoZGVibG9nKSB7CisJICAg IGRlYnVnKEYxMDEsImNsc2lmIHpjbG9zZSIsIiIseCk7CisJICAgIGRlYnVnKEYxMDEsImNsc2lm IHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOworCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiB4ZmVyc3RhdCIs IiIseGZlcnN0YXQpOworCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiBmc2l6ZSIsIiIsZnNpemUpOwor CSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiBmZmMiLCIiLGZmYyk7CisJICAgIGRlYnVnKEYxMDEsImNs c2lmIGN4c2VlbiIsIiIsY3hzZWVuKTsKKwkgICAgZGVidWcoRjEwMSwiY2xzaWYgY3pzZWVuIiwi IixjenNlZW4pOworCSAgICBkZWJ1ZyhGMTAxLCJjbHNpZiBkaXNjYXJkIiwiIixjenNlZW4pOwor CX0KKyNlbmRpZiAvKiBERUJVRyAqLworCWlmICgoY3hzZWVuIHx8IGN6c2VlbikgJiYgIWVwa3Rz ZW50KSB7IC8qIElmIGludGVycnVwdGVkICovCisJICAgIHh4c2NyZWVuKFNDUl9TVCxTVF9JTlQs MGwsIiIpOyAvKiBzYXkgc28gKi8KKyNpZmRlZiBUTE9HCisJICAgIGlmICh0cmFsb2cgJiYgIXRs b2dmbXQpCisJICAgICAgZG94bG9nKHdoYXQscHNmc3BlYyxmc2l6ZSxiaW5hcnksMSwiSW50ZXJy dXB0ZWQiKTsKKyNlbmRpZiAvKiBUTE9HICovCisJfSBlbHNlIGlmIChkaXNjYXJkICYmICFlcGt0 c2VudCkgeyAvKiBJZiBJJ20gcmVmdXNpbmcgKi8KKwkgICAgeHhzY3JlZW4oU0NSX1NULFNUX1JF RlUsMGwscmVmdXNlZCk7IC8qIHNheSB3aHkgKi8KKyNpZmRlZiBUTE9HCisJICAgIGlmICh0cmFs b2cgJiYgIXRsb2dmbXQpIHsKKwkJY2hhciBidWZbMTI4XTsKKwkJY2ttYWttc2coYnVmLDEyOCwi UmVmdXNlZDogIixyZWZ1c2VkLE5VTEwsTlVMTCk7CisJCWRveGxvZyh3aGF0LHBzZnNwZWMsZnNp emUsYmluYXJ5LDEsYnVmKTsKKwkgICAgfQorI2VuZGlmIC8qIFRMT0cgKi8KKwl9IGVsc2UgaWYg KCFlcGt0cmN2ZCAmJiAhZXBrdHNlbnQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSB7CisJICAgIENL X09GRl9UIHp6OworCSAgICB6eiA9IGZmYzsKKyNpZmRlZiBDS19SRVNFTkQKKwkgICAgaWYgKHNl bmRtb2RlID09IFNNX1JFU0VORCB8fCBzZW5kbW9kZSA9PSBTTV9QU0VORCkKKwkgICAgICB6eiAr PSBzZW5kc3RhcnQ7CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisJICAgIGRlYnVnKEYxMDEsImNs c2lmIGZzdGF0cyIsIiIsenopOworCSAgICBmc3RhdHMoKTsJCQkvKiBVcGRhdGUgc3RhdGlzdGlj cyAqLworCSAgICBpZiAoCQkJLyogV2FzIHRoZSB3aG9sZSBmaWxlIHNlbnQ/ICovCisjaWZkZWYg Vk1TCisJCTAJCQkvKiBOb3QgYSByZWxpYWJsZSBjaGVjayBpbiBWTVMgKi8KKyNlbHNlCisjaWZk ZWYgU1RSQVRVUworCQkwCQkJLyogUHJvYmFibHkgbm90IGZvciBWT1MgZWl0aGVyICovCisjZWxz ZQorCQl6eiA8IGZzaXplCisjaWZkZWYgQ0tfQ1RSTFoKKwkJJiYgKChlb2ZtZXRob2QgIT0gWFlF T0ZfWiAmJiAhYmluYXJ5KSB8fCBiaW5hcnkpCisjZW5kaWYgLyogQ0tfQ1RSTFogKi8KKyNlbmRp ZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVk1TICovCisJCSkgeworCQl4eHNjcmVlbihTQ1Jf U1QsU1RfSU5ULDBsLCIiKTsKKyNpZmRlZiBUTE9HCisJCWlmICh0cmFsb2cgJiYgIXRsb2dmbXQp CisJCSAgZG94bG9nKHdoYXQscHNmc3BlYyxmc2l6ZSxiaW5hcnksMSwiSW5jb21wbGV0ZSIpOwor I2VuZGlmIC8qIFRMT0cgKi8KKwkgICAgfSBlbHNlIHsKKyNpZmRlZiBDT01NRU5UCisJCS8qIE5v dCB5ZXQgLS0gd2UgZG9uJ3QgaGF2ZSBjb25maXJtYXRpb24gZnJvbSB0aGUgcmVjZWl2ZXIgKi8K KwkJeHhzY3JlZW4oU0NSX1NULFNUX09LLDBsLCIiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisj aWZkZWYgVExPRworCQlpZiAodHJhbG9nICYmICF0bG9nZm10KQorCQkgIGRveGxvZyh3aGF0LHBz ZnNwZWMsZnNpemUsYmluYXJ5LDAsIiIpOworI2VuZGlmIC8qIFRMT0cgKi8KKwkgICAgfQorCX0K KyAgICB9CisgICAgaV9pc29wZW4gPSAwOworICAgIGhjZmxnID0gMDsJCQkJLyogUmVzZXQgZmxh Z3MgKi8KKyAgICBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsJCS8qIERvbid0IGRvIHRoaXMgYWdh aW4hICovCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgVGhpcyBwcmV2ZW50cyBhIHN1YnNlcXVlbnQg Y2FsbCB0byBjbHNvZigpIGZyb20gZGVsZXRpbmcgdGhlIGZpbGUKKyAgd2hlbiBnaXZlbiB0aGUg ZGlzY2FyZCBmbGFnLgorKi8KKyAgICAqZmlsbmFtID0gJ1wwJzsJCQkvKiBhbmQgY3VycmVudCBm aWxlIG5hbWUgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgcmV0dXJuKHgpOworfQorCisK Ky8qICBDIEwgUyBPIEYgIC0tICBDbG9zZSBhbiBvdXRwdXQgZmlsZS4gICovCisKKy8qICBDYWxs IHdpdGggZGlzcCAhPSAwIGlmIGZpbGUgaXMgdG8gYmUgZGlzY2FyZGVkLiAgKi8KKy8qICBSZXR1 cm5zIC0xIHVwb24gZmFpbHVyZSB0byBjbG9zZSwgMCBvciBncmVhdGVyIG9uIHN1Y2Nlc3MuICov CisKK2ludAorY2xzb2YoZGlzcCkgaW50IGRpc3A7IHsKKyAgICBpbnQgeCA9IDA7CisgICAgZXh0 ZXJuIGludCBzdWNjZXNzOworCisgICAgZmNwcygpOwkJCQkvKiBDYWxjdWxhdGUgQ1BTIHF1aWNr bHkgKi8KKworICAgIGRlYnVnKEYxMDEsImNsc29mIGRpc3AiLCIiLGRpc3ApOworICAgIGRlYnVn KEYxMDEsImNsc29mIGN4c2VlbiIsIiIsY3hzZWVuKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbHNvZiBz dWNjZXNzIiwiIixzdWNjZXNzKTsKKworICAgIGRlYnVnKEYxMDEsImNsc29mIG9faXNvcGVuIiwi IixvX2lzb3Blbik7CisgICAgaWYgKGZuY3NhdiAhPSAtMSkgewkJCS8qIFNhdmVkIGZpbGUgY29s bGlzaW9uIGFjdGlvbi4uLiAqLworCWZuY2FjdCA9IGZuY3NhdjsJCS8qIFJlc3RvcmUgaXQuICov CisJZm5jc2F2ID0gLTE7CQkJLyogVW5zYXZlIGl0LiAqLworICAgIH0KKyNpZmRlZiBkYXRhZ2Vu ZXJhbAorICAgIGlmICgobG9jYWwpICYmICghcXVpZXQpKQkJLyogT25seSBkbyB0aGlzIGlmIGxv Y2FsICYgbm90IHF1aWV0ICovCisgICAgICBjb25ub2lfbXQoKTsKKyNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLworICAgIGlmIChvX2lzb3BlbiAmJiAhY2FsaWJyYXRlKSB7CisJaWYgKCh4ID0gemNs b3NlKFpPRklMRSkpIDwgMCkgeyAvKiBUcnkgdG8gY2xvc2UgdGhlIGZpbGUgKi8KKwkgICAgdGxv ZyhGMTAwLCJGYWlsdXJlIHRvIGNsb3NlIixmaWxuYW0sMEwpOworCSAgICB4eHNjcmVlbihTQ1Jf U1QsU1RfRVJSLDBsLCJDYW4ndCBjbG9zZSBmaWxlIik7CisjaWZkZWYgVExPRworCSAgICBpZiAo dHJhbG9nICYmICF0bG9nZm10KQorCSAgICAgIGRveGxvZyh3aGF0LHByZnNwZWMsZnNpemUsYmlu YXJ5LDEsIkNhbid0IGNsb3NlIGZpbGUiKTsKKyNlbmRpZiAvKiBUTE9HICovCisJfSBlbHNlIGlm IChkaXNwKSB7CQkvKiBJbnRlcnJ1cHRlZCBvciByZWZ1c2VkICovCisJICAgIGlmIChrZWVwID09 IDAgfHwJCS8qIElmIG5vdCBrZWVwaW5nIGluY29tcGxldGUgZmlsZXMgKi8KKwkJKGtlZXAgPT0g U0VUX0FVVE8gJiYgYmluYXJ5ID09IFhZRlRfVCkKKwkJKSB7CisJCWlmICgqZmlsbmFtICYmICh3 aGF0ICYgV19SRUNWKSkgLyogQU5EIHdlJ3JlIHJlY2VpdmluZyAqLworCQkgIHpkZWxldChmaWxu YW0pOwkvKiBPTkxZIFRIRU4sIGRlbGV0ZSBpdCAqLworCQlpZiAod2hhdCAmIFdfS0VSTUlUKSB7 CisJCSAgICBkZWJ1ZyhGMTAwLCJjbHNvZiBpbmNvbXBsZXRlIGRpc2NhcmRlZCIsIiIsMCk7CisJ CSAgICB0bG9nKEYxMDAsIiBpbmNvbXBsZXRlOiBkaXNjYXJkZWQiLCIiLDBMKTsKKwkJICAgIGlm ICghZXBrdHJjdmQgJiYgIWVwa3RzZW50KSB7CisJCQl4eHNjcmVlbihTQ1JfU1QsU1RfRElTQyww bCwiIik7CisjaWZkZWYgVExPRworCQkJaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKKwkJCSAgZG94 bG9nKHdoYXQscHJmc3BlYyxmc2l6ZSxiaW5hcnksMSwiRGlzY2FyZGVkIik7CisjZW5kaWYgLyog VExPRyAqLworCQkgICAgfQorCQl9CisJICAgIH0gZWxzZSB7CQkJLyogS2VlcCBpbmNvbXBsZXRl IGNvcHkgKi8KKwkJZGVidWcoRjEwMCwiY2xzb2YgZnN0YXRzIDEiLCIiLDApOworCQlmc3RhdHMo KTsKKwkJaWYgKCFkaXNjYXJkKSB7CSAvKiBVbmxlc3MgZGlzY2FyZGluZyBmb3Igb3RoZXIgcmVh c29uLi4uICovCisJCSAgICBpZiAod2hhdCAmIFdfS0VSTUlUKSB7CisJCQlkZWJ1ZyhGMTAwLCJj bG9zZiBpbmNvbXBsZXRlIGtlcHQiLCIiLDApOworCQkJdGxvZyhGMTAwLCIgaW5jb21wbGV0ZTog a2VwdCIsIiIsMEwpOworCQkgICAgfQorCQl9CisJCWlmICh3aGF0ICYgV19LRVJNSVQpIHsKKwkJ ICAgIGlmICghZXBrdHJjdmQgJiYgIWVwa3RzZW50KSB7CisJCQl4eHNjcmVlbihTQ1JfU1QsU1Rf SU5DLDBsLCIiKTsKKyNpZmRlZiBUTE9HCisJCQlpZiAodHJhbG9nICYmICF0bG9nZm10KQorCQkJ ICBkb3hsb2cod2hhdCxwcmZzcGVjLGZzaXplLGJpbmFyeSwxLCJJbmNvbXBsZXRlIik7CisjZW5k aWYgLyogVExPRyAqLworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChv X2lzb3BlbiAmJiB4ID4gLTEgJiYgIWRpc3ApIHsKKwlkZWJ1ZyhGMTEwLCJjbHNvZiBPSyIscmZz cGVjLDApOworCW1ha2VzdHIoJnJmc3BlYyxwcmZzcGVjKTsKKwltYWtlc3RyKCZycmZzcGVjLHBy cmZzcGVjKTsKKwlmc3RhdHMoKTsKKwlpZiAoIWVwa3RyY3ZkICYmICFlcGt0c2VudCAmJiAhY3hz ZWVuICYmICFjenNlZW4pIHsKKwkgICAgeHhzY3JlZW4oU0NSX1NULFNUX09LLDBMLCIiKTsKKyNp ZmRlZiBUTE9HCisJICAgIGlmICh0cmFsb2cgJiYgIXRsb2dmbXQpCisJICAgICAgZG94bG9nKHdo YXQscmZzcGVjLGZzaXplLGJpbmFyeSwwLCIiKTsKKyNlbmRpZiAvKiBUTE9HICovCisJfQorICAg IH0KKyAgICByc19sZW4gPSAoQ0tfT0ZGX1QpMDsKKyAgICBvX2lzb3BlbiA9IDA7CQkJLyogVGhl IGZpbGUgaXMgbm90IG9wZW4gYW55IG1vcmUuICovCisgICAgY3hzZWVuID0gMDsJCQkJLyogUmVz ZXQgcGVyLWZpbGUgaW50ZXJydXB0aW9uIGZsYWcgKi8KKyAgICByZXR1cm4oeCk7CQkJCS8qIFNl bmQgYmFjayB6Y2xvc2UoKSByZXR1cm4gY29kZS4gKi8KK30KKworI2lmZGVmIFNVTk9TNFM1Cit0 b2xvd2VyKGMpIGNoYXIgYzsgeyByZXR1cm4oKGMpLSdBJysnYScpOyB9Cit0b3VwcGVyKGMpIGNo YXIgYzsgeyByZXR1cm4oKGMpLSdhJysnQScpOyB9CisjZW5kaWYgLyogU1VOT1M0UzUgKi8KKyNl bmRpZiAvKiBOT1hGRVIgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrY2Zucy5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja2NmbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjJiZDg2 Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja2NmbnMuYwpAQCAtMCwwICsxLDcxNjUgQEAKK2NoYXIgKmZuc3YgPSAiQy1LZXJtaXQgZnVu Y3Rpb25zLCA5LjAuMjMzLCAzIEp1biAyMDExIjsKKworY2hhciAqbm1bXSA9ICB7ICJEaXNhYmxl ZCIsICJMb2NhbCBvbmx5IiwgIlJlbW90ZSBvbmx5IiwgIkVuYWJsZWQiIH07CisKKy8qICBDIEsg QyBGIE4gUyAgLS0gIFN5c3RlbS1pbmRlcGVuZGVudCBLZXJtaXQgcHJvdG9jb2wgc3VwcG9ydCBm dW5jdGlvbnMuICAqLworCisvKiAgLi4uUGFydCAxIChvdGhlcnMgbW92ZWQgdG8gY2tjZm4yLDMg dG8gbWFrZSB0aGlzIG1vZHVsZSBzbWFsbGVyKSAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRh IENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWlj IEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAx OTg1LCAyMDExLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENp dHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJt aXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tj bWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisvKgorIFN5 c3RlbS1kZXBlbmRlbnQgcHJpbWl0aXZlcyBkZWZpbmVkIGluOgorCisgICBjaz90aW8uYyAtLSB0 ZXJtaW5hbCAoY29tbXVuaWNhdGlvbnMpIGkvbworICAgY3g/ZmlvLmMgLS0gZmlsZSBpL28sIGRp cmVjdG9yeSBzdHJ1Y3R1cmUKKyovCisjaW5jbHVkZSAiY2tjc3ltLmgiCQkJLyogTmVlZGVkIGZv ciBTdHJhdHVzIFZPUyAqLworI2luY2x1ZGUgImNrY2FzYy5oIgkJCS8qIEFTQ0lJIHN5bWJvbHMg Ki8KKyNpbmNsdWRlICJja2NkZWIuaCIJCQkvKiBEZWJ1ZyBmb3JtYXRzLCB0eXBlZGVmcywgZXRj LiAqLworI2luY2x1ZGUgImNrY2tlci5oIgkJCS8qIFN5bWJvbCBkZWZpbml0aW9ucyBmb3IgS2Vy bWl0ICovCisjaW5jbHVkZSAiY2tjeGxhLmgiCQkJLyogQ2hhcmFjdGVyIHNldCBzeW1ib2xzICov CisjaW5jbHVkZSAiY2tjbmV0LmgiICAgICAgICAgICAgICAgICAgICAgLyogVk1TIGRlZmluaXRp b24gb2YgVENQU09DS0VUICovCisjaWZkZWYgT1MyCisjaWZkZWYgT1MyT05MWQorI2luY2x1ZGUg PG9zMi5oPgorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNpbmNsdWRlICJja29jb24uaCIKKyNlbmRp ZiAvKiBPUzIgKi8KKworaW50IGRvY3JjICA9IDA7CQkJCS8qIEFjY3VtdWxhdGUgQ1JDIGZvciBc dihjcmMxNikgKi8KK2xvbmcgY3JjMTYgPSAwTDsJCQkvKiBGaWxlIENSQyA9IFx2KGNyYzE2KSAq LworaW50IGduZmVycm9yID0gMDsJCQkvKiBnbmZpbGUoKSBmYWlsdXJlIHJlYXNvbiAqLworCitl eHRlcm4gQ0hBUiBmZW9sOworZXh0ZXJuIGludCBieXRlb3JkZXIsIHhmbGcsIHdoYXQsIGZtYXNr LCBjeHNlZW4sIGN6c2VlbiwgbnNjYW5maWxlLCBzeXNpbmRleDsKK2V4dGVybiBpbnQgeGNtZHNy YywgZGlzcG9zLCBtYXRjaGZpZm87CitleHRlcm4gaW50IGluc2VydmVyOworCitleHRlcm4gaW50 IG5vbGlua3M7CisjaWZkZWYgVk1TT1JVTklYCitleHRlcm4gaW50IHpnZnNfZGlyOworI2lmZGVm IENLU1lNTElOSworZXh0ZXJuIGludCB6Z2ZzX2xpbms7CisjZW5kaWYgLyogQ0tTWU1MSU5LICov CisjZW5kaWYgLyogVk1TT1JVTklYICovCisKKyNpZm5kZWYgTk9YRkVSCisKKyNpZm5kZWYgTk9J Q1AKKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBjaGFyICogY2xjbWRzOworZXh0ZXJuIGludCBoYXZl dXJsOworI2lmZGVmIENLX0FQQworZXh0ZXJuIGludCBhcGNhY3RpdmUsIGFkbF9hc2s7CisjZW5k aWYgLyogQ0tfQVBDICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLwor CitleHRlcm4gaW50IHJlbWZpbGU7CisKKy8qIChtb3ZlIHRoZXNlIHByb3RvdHlwZXMgdG8gdGhl IGFwcHJvcHJpYXRlIC5oIGZpbGVzLi4uKSAqLworCisjaWZkZWYgQ09NTUVOVAorLyogTm90IHVz ZWQgKi8KKyNpZmRlZiBWTVMKK19QUk9UT1RZUCggaW50IGdldHZudW0sIChjaGFyICopICk7Cisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCitfUFJPVE9UWVAoIHN0YXRp YyBpbnQgYmdldHBrdCwgKGludCkgKTsKKyNpZm5kZWYgTk9DU0VUUworX1BST1RPVFlQKCBpbnQg bG9va3VwLCAoc3RydWN0IGtleXRhYltdLCBjaGFyICosIGludCwgaW50ICopICk7CisjZW5kaWYg LyogTk9DU0VUUyAqLworI2lmbmRlZiBOT1NQTAorX1BST1RPVFlQKCBpbnQgenpzdHJpbmcsIChj aGFyICosIGNoYXIgKiosIGludCAqKSApOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBP UzIKKyNpbmNsdWRlIDxpby5oPgorI2lmZGVmIE9TMk9OTFkKKyNpbmNsdWRlIDxvczIuaD4KKyNl bmRpZiAvKiBPUzJPTkxZICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBWTVMKKyNpbmNs dWRlIDxlcnJuby5oPgorI2VuZGlmIC8qIFZNUyAqLworCisvKiBFeHRlcm5hbHMgZnJvbSBja2Nt YWkuYyAqLworCitleHRlcm4gaW50IHNydmNkbXNnLCBzcnZpZGwsIGlkbGV0bW87CitleHRlcm4g Y2hhciAqIGNkbXNnZmlsZVtdOworZXh0ZXJuIGludCBzcHNpeiwgc3BtYXgsIHJwc2l6LCB0aW1p bnQsIHNydnRpbSwgcnRpbW8sIG5wYWQsIGVicSwgZWJxZmxnLAorIHJwdCwgcnB0cSwgcnB0Zmxn LCBjYXBhcywga2VlcCwgZm5jYWN0LCBwa3R0aW0sIGF1dG9wYXIsIHNwc2l6ciwgeGl0c3RhOwor ZXh0ZXJuIGludCBwa3RudW0sIGJjdHIsIGJjdHUsIGJjdGYsIGJjdGwsIGNsZmlscywgc2J1Zm51 bSwgcHJvdG9jb2wsCisgc2l6ZSwgb3NpemUsIHNwa3RsLCBuZmlscywgY2t3YXJuLCB0aW1lZiwg c3BzaXpmLCBzbmR0eXAsIHJjdnR5cCwgc3VjY2VzczsKK2V4dGVybiBpbnQgcGFyaXR5LCB0dXJu LCBuZXR3b3JrLCB3aGF0cnUsIGZzZWNzLCBqdXN0b25lLCBzbG9zdGFydCwKKyBja2RlbGF5LCBk aXNwbGEsIG15cGFkbiwgbW92aW5nLCByZWN1cnNpdmUsIG5ldHR5cGU7CitleHRlcm4gbG9uZyBm aWxjbnQ7CitleHRlcm4gQ0tfT0ZGX1QKKyB0ZmMsIGZzaXplLCBzZW5kc3RhcnQsIHJzX2xlbiwg ZmxjaSwgZmxjbywgdGxjaSwgdGxjbywgY2FsaWJyYXRlOworZXh0ZXJuIGxvbmcgZmlscmVqLCBv bGRjcHMsIGNwcywgcGVha2NwcywgY2N1LCBjY3AsIGZpbGVzdGF0dXM7CitleHRlcm4gaW50IGZi bGtzaXosIGZyZWNsLCBmcmVjZm0sIGZvcmcsIGZjY3RybCwgZmRpc3BsYSwgc2tpcGJ1cDsKK2V4 dGVybiBpbnQgc3BhY2tldHMsIHJwYWNrZXRzLCB0aW1lb3V0cywgcmV0cmFucywgY3J1bmNoZWQs IHdtYXgsIHdjdXI7CitleHRlcm4gaW50IGhjZmxnLCBiaW5hcnksIGZuY252LCBiX3NhdmUsIGZf c2F2ZSwgc2VydmVyOworZXh0ZXJuIGludCBuYWtzdGF0ZSwgZGlzY2FyZCwgcmVqZWN0aW9uLCBs b2NhbCwgeGZlcm1vZGUsIGludGVycnVwdGVkOworZXh0ZXJuIGludCBycSwgcnFmLCBzcSwgd3Ns b3RzLCB3c2xvdG4sIHdzbG90ciwgd2lubG8sIHVycHNpeiwgcmxuOworZXh0ZXJuIGludCBmbnNw YXRoLCBmbnJwYXRoLCBlb2ZtZXRob2QsIGRpcmFjdGl2ZSwgd2hhdHJ1Miwgd2VhcmVhbGlrZTsK K2V4dGVybiBpbnQgYXRjYXByLCBhdGNhcGIsIGF0Y2FwdTsKK2V4dGVybiBpbnQgbHBjYXByLCBs cGNhcGIsIGxwY2FwdTsKK2V4dGVybiBpbnQgc3djYXByLCBzd2NhcGIsIHN3Y2FwdTsKK2V4dGVy biBpbnQgbHNjYXByLCBsc2NhcGIsIGxzY2FwdTsKK2V4dGVybiBpbnQgcnNjYXByLCByc2NhcGIs IHJzY2FwdTsKK2V4dGVybiBpbnQgcnB0ZW5hLCBycHRtaW47CitleHRlcm4gaW50IHNzZXF0Ymxb XTsKK2V4dGVybiBpbnQgbnVtZXJycywgbnp4b3B0czsKK2V4dGVybiBsb25nIHJwdG47CitleHRl cm4gaW50IG1heHRyeTsKK2V4dGVybiBpbnQgc3Rkb3VmOworZXh0ZXJuIGludCBzZW5kbW9kZTsK K2V4dGVybiBpbnQgY2FycmllciwgdHRwcnR5OworZXh0ZXJuIGludCBnX2ZucnBhdGg7CisjaWZk ZWYgVENQU09DS0VUCitleHRlcm4gaW50IHR0bnByb3RvOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAq LworCisjaWZuZGVmIE5PU1BMCitleHRlcm4gaW50IHNuZHhpbiwgc25keGhpLCBzbmR4bG87Cisj ZW5kaWYgLyogTk9TUEwgKi8KKworZXh0ZXJuIGludCBnX2JpbmFyeSwgZ19mbmNudjsKKworI2lm ZGVmIEdGVElNRVIKK2V4dGVybiBDS0ZMT0FUIGZwZnNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAq LworCisjaWZkZWYgT1MyCitleHRlcm4gc3RydWN0IHphdHRyIGlhdHRyOworI2VuZGlmIC8qIE9T MiAqLworCisjaWZkZWYgUElQRVNFTkQKK2V4dGVybiBpbnQgdXNlcGlwZXM7CisjZW5kaWYgLyog UElQRVNFTkQgKi8KK2V4dGVybiBpbnQgcGlwZXNlbmQ7CisKKyNpZmRlZiBTVFJFQU1JTkcKK2V4 dGVybiBpbnQgc3RyZWFtcnEsIHN0cmVhbWluZywgc3RyZWFtZWQsIHN0cmVhbW9rOworI2VuZGlm IC8qIFNUUkVBTUlORyAqLworZXh0ZXJuIGludCByZWxpYWJsZSwgY2xlYXJycSwgY2xlYXJlZCwg dXJjbGVhcjsKKworZXh0ZXJuIGludAorICBhdGVuY2ksIGF0ZW5jbywgYXRkYXRpLCBhdGRhdG8s IGF0bGVuaSwgYXRsZW5vLCBhdGJsa2ksIGF0YmxrbywKKyAgYXR0eXBpLCBhdHR5cG8sIGF0c2lk aSwgYXRzaWRvLCBhdHN5c2ksIGF0c3lzbywgYXRkaXNpLCBhdGRpc287CisKK2V4dGVybiBpbnQg Ymlnc2JzaXosIGJpZ3Jic2l6OworZXh0ZXJuIGNoYXIgKnZlcnNpbzsKK2V4dGVybiBjaGFyICpm aWxlZmlsZTsKK2V4dGVybiBjaGFyIHdob2FyZXVbXSwgKiBja3N5c2lkOworCisjaWZuZGVmIE5P U0VSVkVSCitleHRlcm4gaW50IG5nZXRwYXRoOworZXh0ZXJuIGNoYXIgKiBnZXRwYXRoW107Citl eHRlcm4gaW50IGZyb21nZXRwYXRoOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyNpZmRlZiBD S19MT0dJTgorZXh0ZXJuIGludCBpc2d1ZXN0OworI2VuZGlmIC8qIENLX0xPR0lOICovCisKK2V4 dGVybiBpbnQgc3J2Y21kbGVuOworZXh0ZXJuIENIQVIgKnNydmNtZCwgKiBlcGt0bXNnOworZXh0 ZXJuIENIQVIgcGFkY2gsIG15cGFkYywgZW9sLCBzZW9sLCBjdGxxLCBteWN0bHEsIHNzdGF0ZSwg bXlycHRxOworZXh0ZXJuIENIQVIgKmRhdGEsIHBhZGJ1ZltdLCBzdGNociwgbXlzdGNoOworZXh0 ZXJuIENIQVIgKnNydnB0cjsKK2V4dGVybiBDSEFSICpyZGF0YXA7CitleHRlcm4gY2hhciAqY21h cmcsICpjbWFyZzIsICoqY21saXN0LCBmaWxuYW1bXSwgb2ZpbG5hbVtdOworZXh0ZXJuIGNoYXIg KnJmc3BlYywgKnByZnNwZWMsICpycmZzcGVjLCAqcHJyZnNwZWMsICpzZnNwZWMsICpwc2ZzcGVj LCAqcmZzcGVjOworZXh0ZXJuIGNoYXIgZnNwZWNbXTsKK2V4dGVybiBpbnQgZnNwZWNsZW47CisK KyNpZm5kZWYgTk9NU0VORAorZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGVoZWFkLCAqIGZp bGVuZXh0OworZXh0ZXJuIGludCBhZGRsaXN0OworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworX1BS T1RPVFlQKCBpbnQgbHNsb29rLCAodW5zaWduZWQgaW50IGIpICk7IC8qIExvY2tpbmcgU2hpZnQg TG9va2FoZWFkICovCitfUFJPVE9UWVAoIGludCBzemVvZiwgKENIQVIgKnMpICk7CitfUFJPVE9U WVAoIFZPSUQgZm5saXN0LCAodm9pZCkgKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworZXh0ZXJu IENLX09GRl9UIGZmYzsKKworLyogQ2hhcmFjdGVyIHNldCBUcmFuc2xhdGlvbiAqLworCisjaWZu ZGVmIE5PQ1NFVFMKK2V4dGVybiBpbnQgdGNoYXJzZXQsIGZjaGFyc2V0LCBkY3NldDcsIGRjc2V0 ODsKK2V4dGVybiBpbnQgZmNzX3NhdmUsIHRjc19zYXZlOworZXh0ZXJuIGludCBudGNzZXRzLCB4 bGF0eXBlLCBjc2VxdGFiW107CitleHRlcm4gc3RydWN0IGNzaW5mbyB0Y3NpbmZvW10sIGZjc2lu Zm9bXTsKK2V4dGVybiBpbnQgcl9jc2V0LCBzX2NzZXQsIGFmY3NldFtdOworI2lmZGVmIFVOSUNP REUKK2V4dGVybiBpbnQgdWNzb3JkZXIsIGZpbGVvcmRlcjsKKyNlbmRpZiAvKiBVTklDT0RFICov CisKK19QUk9UT1RZUCggQ0hBUiBpZGVudCwgKENIQVIpICk7CS8qIElkZW50aXR5IHRyYW5zbGF0 aW9uIGZ1bmN0aW9uICovCisKKy8qIEFycmF5cyBvZiBhbmQgcG9pbnRlcnMgdG8gY2hhcmFjdGVy IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLworCisjaWZkZWYgQ0tfQU5TSUMKK2V4dGVybiBDSEFS ICgqcngpKENIQVIpOyAvKiBQb2ludGVyIHRvIGlucHV0IGNoYXJhY3RlciB0cmFuc2xhdGlvbiBm dW5jdGlvbiAqLworZXh0ZXJuIENIQVIgKCpzeCkoQ0hBUik7IC8qIFBvaW50ZXIgdG8gb3V0cHV0 IGNoYXJhY3RlciB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLworZXh0ZXJuIENIQVIgKCp4bHNbTUFY VENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIEJ5dGUtdG8tQnl0ZSBTZW5kICovCitl eHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogQnl0 ZS10by1CeXRlIFJlY3YgKi8KKyNpZmRlZiBVTklDT0RFCitleHRlcm4gaW50ICgqeHV0KShVU0hP UlQpOwkvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbiBVQ1MgdG8gVENTICovCitleHRlcm4gaW50ICgq eHVmKShVU0hPUlQpOwkvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbiBVQ1MgdG8gRkNTICovCitleHRl cm4gVVNIT1JUICgqeHR1KShDSEFSKTsJLyogVHJhbnNsYXRpb24gZnVuY3Rpb24gVENTIHRvIFVD UyAqLworZXh0ZXJuIFVTSE9SVCAoKnhmdSkoQ0hBUik7CS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9u IEZDUyB0byBVQ1MgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyNlbHNlIC8qIFRoZSBzYW1l IGRlY2xhcmF0aW9ucyBhZ2FpbiBmb3Igbm9uLUFOU0kgY29taWxlcnMuLi4gKi8KKworZXh0ZXJu IENIQVIgKCpyeCkoKTsKK2V4dGVybiBDSEFSICgqc3gpKCk7CitleHRlcm4gQ0hBUiAoKnhsc1tN QVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOworZXh0ZXJuIENIQVIgKCp4bHJbTUFYVENTRVRT KzFdW01BWEZDU0VUUysxXSkoKTsKKyNpZmRlZiBVTklDT0RFCitleHRlcm4gaW50ICgqeHV0KSgp OworZXh0ZXJuIGludCAoKnh1ZikoKTsKK2V4dGVybiBVU0hPUlQgKCp4dHUpKCk7CitleHRlcm4g VVNIT1JUICgqeGZ1KSgpOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworLyogKFBXUCkgZXh0ZXJuYWwgZGVmLiBvZiB0 aGluZ3MgdXNlZCBpbiBidWZmZXJlZCBmaWxlIGlucHV0IGFuZCBvdXRwdXQgKi8KKworI2lmZGVm IERZTkFNSUMKK2V4dGVybiBjaGFyICp6aW5idWZmZXIsICp6b3V0YnVmZmVyOworI2Vsc2UKK2V4 dGVybiBjaGFyIHppbmJ1ZmZlcltdLCB6b3V0YnVmZmVyW107CisjZW5kaWYgLyogRFlOQU1JQyAq LworZXh0ZXJuIGNoYXIgKnppbnB0ciwgKnpvdXRwdHI7CitleHRlcm4gaW50IHppbmNudCwgem91 dGNudCwgem9idWZzaXplLCB4ZnJ4bGE7CisKK2V4dGVybiBsb25nIGNyY3RhW10sIGNyY3RiW107 CQkvKiBDUkMtMTYgZ2VuZXJhdGlvbiB0YWJsZXMgKi8KK2V4dGVybiBpbnQgcnNlcXRibFtdOwkJ CS8qIFJlYydkLXBhY2tldCBzZXF1ZW5jZSAjIHRhYmxlICovCisKKyNpZm5kZWYgTk9YRkVSCisK Ky8qIENyaXRlcmlhIHVzZWQgYnkgZ25maWxlKCkuLi4gKi8KKworY2hhciBzbmRhZnRlclsxOV0g ICA9IHsgTlVMLCBOVUwgfTsKK2NoYXIgc25kYmVmb3JlWzE5XSAgPSB7IE5VTCwgTlVMIH07Citj aGFyIHNuZG5hZnRlclsxOV0gID0geyBOVUwsIE5VTCB9OworY2hhciBzbmRuYmVmb3JlWzE5XSA9 IHsgTlVMLCBOVUwgfTsKK2NoYXIgKnNuZGV4Y2VwdFtOU05ERVhDRVBUXSAgPSB7IE5VTEwsIE5V TEwgfTsKK2NoYXIgKnJjdmV4Y2VwdFtOU05ERVhDRVBUXSAgPSB7IE5VTEwsIE5VTEwgfTsKK0NL X09GRl9UIHNuZHNtYWxsZXIgPSAoQ0tfT0ZGX1QpLTE7CitDS19PRkZfVCBzbmRsYXJnZXIgID0g KENLX09GRl9UKS0xOworCisvKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSBidXQg c2hhcmVkIGJ5IG90aGVyIG1vZHVsZXMuICovCisKK2ludCB4ZnJiZWwgPSAxOworY2hhciAqIG9m cGVybXMgPSAiIjsJCQkvKiBPdXRwdXQgZmlsZSBwZXJtaXNzaW9ucyAqLworaW50IGF1dG9wYXRo ID0gMDsJCQkvKiBTRVQgUkVDRUlWRSBQQVRITkFNRVMgQVVUTyBmbGFnICovCisKKyNpZmRlZiBD QUxJQlJBVEUKKyNkZWZpbmUgQ0FMX08gMworI2RlZmluZSBDQUxfTSAyNTMKKworaW50IGNhbF9q ID0gMDsKKworQ0hBUgorY2FsX2FbXSA9IHsKKyAxNiwgNDUsIDk4LCAgMywgNTIsIDQxLCAxNCwg IDcsIDc2LDE2NSwxMjIsIDExLDEwNCwgNzcsMTY2LCAxNSwKKzE2MCwgOTMsIDE4LCAxOSwxMTIs IDg1LCA1NCwgMjMsMjMyLDIxMywgOTAsIDI3LCAxMiwgODEsMTI2LCAzMSwKKyAgNCwyMDUsIDM0 LCAzNSwxNDQsIDczLDExMCwgMzksIDI4LDEzMywyMTgsIDQzLDE1NiwgNjUsMTAyLCA0NywKKyA4 NCwgNjEsIDUwLCA1MSwyMDgsMTE3LCA4NiwgNTUsICA4LDI0NSwgNzQsIDU5LCA0NCwxMjUsMjIy LCA2MywKKyA4MCwgIDEsMTYyLCA2NywxMTYsMTA1LDIwNiwgNzEsMTIwLCAgOSwyNTAsIDc1LCA4 OCwgOTcsICA2LCA3OSwKKzEwMCwyMjEsIDgyLCA4MywgMzYsIDg5LCA5NCwgODcsIDQwLCAyMSwx MDYsIDkxLDIzNiwxNDUsMTUwLCA5NSwKKzIyOCwgMzMsMTMwLCA5OSwxNDgsMTM3LDE5OCwxMDMs MTA4LDE2OSwgNDIsMTA3LDE4NCwxMjksIDc4LDExMSwKKyAgMCwgNDksMTE0LDExNSwgMzIsMTIx LDI1NCwxMTksMTcyLCA1NywxMzgsMTIzLDE1MiwxNzcsIDIyLDEyNywKKzI0MCwxOTMsICAyLDEz MSwxNzYsICA1LCAzOCwxMzUsMjA0LDIyOSwgMTAsMTM5LDIwMCwxNjEsMTc0LDE0MywKKzEyOCwg MTcsMTQ2LDE0NywgNjgsMTUzLCAzMCwxNTEsIDcyLDIxNywxNzAsMTU1LCAyNCwyMDksIDYyLDE1 OSwKKyA2NCwyMjUsMTk0LDE2MywyNDQsMjAxLCA3MCwxNjcsMjE2LDE5NywyMzQsMTcxLDE4OCwx MDksMjMwLDE3NSwKKzIxMiwxMTMsMTc4LDE3OSwxMzIsMTg1LDE5MCwxODMsMTM2LDI0OSwyMDIs MTg3LCA5MiwyNDEsMTE4LDE5MSwKKyA0OCwyMzcsIDY2LDE5NSwgOTYsMjMzLDE0MiwxOTksMjQ4 LCAzNywgNTgsMjAzLCA2MCwgMTMsMTM0LDIwNywKKyAyMCwgMjksMjEwLDIxMSwxNjQsMTQ5LDE4 MiwyMTUsMjIwLCAyNSwgMjYsMjE5LDEyNCwxNTcsMjQ2LDIyMywKKzE4MCwxNDEsMjI2LDIyNywx OTIsMTAxLDIzOCwyMzEsIDU2LCA2OSwxNTQsMjM1LDI1MiwxNzMsIDQ2LDIzOSwKKzIyNCwyNTMs MjQyLDI0MywxOTYsIDUzLDIxNCwyNDcsMTY4LDE4MSwxODYsMjUxLDE0MCwxODksMTU4LDI1NQor fTsKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKworY2hhciAqIHJmX2VyciA9ICJFcnJvciByZWNl aXZpbmcgZmlsZSI7CS8qIHJjdmZpbCgpIGVycm9yIG1lc3NhZ2UgKi8KKworI2lmZGVmIENLX1NQ RUVECitzaG9ydCBjdGxwWzI1Nl0gPSB7CQkvKiBDb250cm9sLVByZWZpeCB0YWJsZSAqLworICAx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsIC8qIEMwICAqLworICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsIC8qIEcwICAqLworICAwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgIDAsMCww LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MSwgLyogREVMICovCisgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgLyogQzEgICovCisgIDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwgLyogRzEgICovCisg IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwKKyAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwwLDAsMCwwLDAsMCwxICAvKiAyNTUgKi8KK307CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8K KworaW50IHNuZHNyYzsJCS8qIEZsYWcgZm9yIHdoZXJlIHRvIGdldCBuYW1lcyBvZiBmaWxlcyB0 byBzZW5kOiAqLworCQkJCQkvKiAtMTogem5leHQoKSBmdW5jdGlvbiAqLworCQkJCQkvKiAgMDog c3RkaW4gKi8KKwkJCQkJLyogPjA6IGxpc3QgaW4gY21saXN0IG9yIG90aGVyIGxpc3QgKi8KKwkJ CQkJLyogLTk6IGNhbGlicmF0ZSAqLworCitpbnQgIG1lbXN0cjsJCQkJLyogRmxhZyBmb3IgaW5w dXQgZnJvbSBtZW1vcnkgc3RyaW5nICovCitpbnQgIGZ1bmNzdHI7CQkJCS8qIEZsYWcgZm9yIGlu cHV0IGZyb20gZnVuY3Rpb24gKi8KK2ludCAgYmVzdGxlbiA9IDA7CitpbnQgIG1heHNlbmQgPSAw OworCitpbnQgZ25mX2JpbmFyeSA9IDA7CQkJLyogUHJldmFpbGluZyB4ZmVyIG1vZGUgZm9yIGdu ZmlsZSAqLworCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgTVlJTklUTEVOIDMyCisjZWxzZQorI2Rl ZmluZSBNWUlOSVRMRU4gMTAwCisjZW5kaWYgLyogcGRwMTEgKi8KK0NIQVIgbXlpbml0W01ZSU5J VExFTl07CQkJLyogQ29weSBvZiBteSBTZW5kLUluaXQgZGF0YSAqLworCisvKiBWYXJpYWJsZXMg bG9jYWwgdG8gdGhpcyBtb2R1bGUgKi8KKworI2lmZGVmIFRMT0cKKyNpZm5kZWYgWFlaX0lOVEVS TkFMCitzdGF0aWMKKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KK2NoYXIgKmZuY25hbVtdID0g eworICAicmVuYW1lIiwgInJlcGxhY2UiLCAiYmFja3VwIiwgImFwcGVuZCIsICJkaXNjYXJkIiwg ImFzayIsCisgICJ1cGRhdGUiLCAiZGF0ZXMtZGlmZmVyIiwgIiIKK307CisjZW5kaWYgLyogVExP RyAqLworCitzdGF0aWMgY2hhciAqbWVtcHRyOwkJCS8qIFBvaW50ZXIgZm9yIG1lbW9yeSBzdHJp bmdzICovCisKKyNpZmRlZiBWTVMKK2V4dGVybiBpbnQgYmF0Y2g7CisjZWxzZQorZXh0ZXJuIGlu dCBiYWNrZ3JkOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgQ0tfQ1RSTFoKK3N0YXRpYyBp bnQgbGFzdGNoYXIgPSAwOworI2VuZGlmIC8qIENLX0NUUkxaICovCisKKyNpZmRlZiBDS19BTlNJ Qworc3RhdGljIGludCAoKmZ1bmNwdHIpKHZvaWQpOwkJLyogUG9pbnRlciBmb3IgZnVuY3Rpb24g c3RyaW5ncyAqLworI2Vsc2UKK3N0YXRpYyBpbnQgKCpmdW5jcHRyKSgpOworI2VuZGlmIC8qIENL X0FOU0lDICovCisKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBDTURTVFJMIDUwCitzdGF0aWMgY2hh ciBjbWRzdHJbNTBdOwkJCS8qIFN5c3RlbSBjb21tYW5kIHN0cmluZy4gKi8KKyNlbHNlCisjaWZk ZWYgQklHQlVGT0sKKyNkZWZpbmUgQ01EU1RSTCAxMDI0CisjZWxzZQorI2RlZmluZSBDTURTVFJM IDI1NgorI2VuZGlmIC8qIEJJR0JVRk9LICovCitzdGF0aWMgY2hhciBjbWRzdHJbQ01EU1RSTCsx XTsKKyNlbmRpZiAvKiBwZHAxMSAqLworCitzdGF0aWMgaW50IGRyYWluOwkJCS8qIEZvciBkcmFp bmluZyBzdGFja2VkLXVwIEFDS3MuICovCisKK3N0YXRpYyBpbnQgZmlyc3Q7CQkJLyogRmxhZyBm b3IgZmlyc3QgY2hhciBmcm9tIGlucHV0ICovCitzdGF0aWMgQ0hBUiB0OwkJCQkvKiBDdXJyZW50 IGNoYXJhY3RlciAqLworI2lmZGVmIENPTU1FTlQKK3N0YXRpYyBDSEFSIG5leHQ7CQkJLyogTmV4 dCBjaGFyYWN0ZXIgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKK3N0YXRpYyBpbnQgZWJxc2Vu dCA9IDA7CQkJLyogOHRoLWJpdCBwcmVmaXggYmlkIHRoYXQgSSBzZW50ICovCitzdGF0aWMgaW50 IGxzc3RhdGUgPSAwOwkJCS8qIExvY2tpbmcgc2hpZnQgc3RhdGUgKi8KK3N0YXRpYyBpbnQgbHNx dW90ZSA9IDA7CQkJLyogTG9ja2luZyBzaGlmdCBxdW90ZSAqLworCitleHRlcm4gaW50IHF1aWV0 OworCisvKiAgRSBOIEMgUyBUIFIgIC0tICBFbmNvZGUgYSBzdHJpbmcgZnJvbSBtZW1vcnkuICov CisKKy8qCisgIENhbGwgdGhpcyBpbnN0ZWFkIG9mIGdldHBrdCgpIGlmIHNvdXJjZSBpcyBhIHN0 cmluZywgcmF0aGVyIHRoYW4gYSBmaWxlLgorICBOb3RlOiBDaGFyYWN0ZXIgc2V0IHRyYW5zbGF0 aW9uIGlzIG5ldmVyIGRvbmUgaW4gdGhpcyBjYXNlLgorKi8KKworI2lmZGVmIENPTU1FTlQKKyNk ZWZpbmUgRU5DQlVGTCAyMDAKKyNpZm5kZWYgcGRwMTEKK0NIQVIgZW5jYnVmW0VOQ0JVRkxdOwor I2Vsc2UKKy8qIFRoaXMgaXMgZ3Jvc3MsIGJ1dCB0aGUgcGRwMTEgcm9vdCBzZWdtZW50IGlzIG91 dCBvZiBzcGFjZSAqLworLyogV2lsbCBhbGxvY2F0ZSBpdCBpbiBja3V1c3IuYy4gKi8KK2V4dGVy biBDSEFSIGVuY2J1ZltdOworI2VuZGlmIC8qIHBkcDExICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworCisvKgorICBFbmNvZGUgcGFja2V0IGRhdGEgZnJvbSBhIHN0cmluZyBpbiBtZW1vcnkgcmF0 aGVyIHRoYW4gZnJvbSBhIGZpbGUuCisgIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgZW5jb2Rl ZCBzdHJpbmcgb24gc3VjY2VzcywgLTEgaWYgdGhlIHN0cmluZworICBjb3VsZCBub3QgYmUgY29t cGxldGVseSBlbmNvZGVkIGludG8gdGhlIGN1cnJlbnRseSBuZWdvdGlhdGVkIGRhdGEKKyAgZmll bGQgbGVuZ3RoLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitlbmNzdHIoQ0hBUiAqcykKKyNl bHNlIC8qIENLX0FOU0lDICovCitlbmNzdHIocykgQ0hBUiogczsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeworLyoKKyAgUmVjb2RlZCAzMCBKdWwgOTQgdG8gdXNlIHRoZSByZWd1bGFyIGRhdGEg YnVmZmVyIGFuZCB0aGUgbmVnb3RpYXRlZAorICBtYXhpbXVtIHBhY2tldCBzaXplLiAgUHJldmlv dXNseSB3ZSB3ZXJlIGxpbWl0ZWQgdG8gdGhlIGxlbmd0aCBvZiBlbmNidWZbXS4KKyAgQWxzbywg dG8gcmV0dXJuIGEgZmFpbHVyZSBjb2RlIGlmIHRoZSBlbnRpcmUgZW5jb2RlZCBzdHJpbmcgd291 bGQgbm90IGZpdC4KKyAgTW9kaWZpZWQgMTQgSnVsIDk4IHRvIHJldHVybiBsZW5ndGggb2YgZW5j b2RlZCBzdHJpbmcuCisqLworICAgIGludCBtLCByYywgc2xlbjsgY2hhciAqcDsKKyAgICBpZiAo IWRhdGEpIHsJCQkvKiBXYXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlcnMuICovCisJZGVidWcoRjEw MCwiU0VSSU9VUyBFUlJPUjogZW5jc3RyIGRhdGEgPT0gTlVMTCIsIiIsMCk7CisJcmV0dXJuKC0x KTsKKyAgICB9CisgICAgaWYgKCFzKSBzID0gKENIQVIgKikiIjsJCS8qIERpdHRvLiAqLworICAg IHNsZW4gPSBzdHJsZW4oKGNoYXIgKilzKTsJCS8qIExlbmd0aCBvZiBzb3VyY2Ugc3RyaW5nLiAq LworICAgIGRlYnVnKEYxMTEsImVuY3N0ciIscyxzbGVuKTsKKyAgICByYyA9IDA7CQkJCS8qIFJl dHVybiBjb2RlLiAqLworICAgIG0gPSBtZW1zdHI7IHAgPSBtZW1wdHI7CQkvKiBTYXZlIHRoZXNl LiAqLworICAgIG1lbXB0ciA9IChjaGFyICopczsJCQkvKiBQb2ludCB0byB0aGUgc3RyaW5nLiAq LworICAgIC8qIGRlYnVnKEYxMDEsImVuY3N0ciBtZW1wdHIgMSIsIiIsbWVtcHRyKTsgKi8KKyAg ICBtZW1zdHIgPSAxOwkJCQkvKiBGbGFnIG1lbW9yeSBzdHJpbmcgYXMgc291cmNlLiAqLworICAg IGZpcnN0ID0gMTsJCQkJLyogSW5pdGlhbGl6ZSBjaGFyYWN0ZXIgbG9va2FoZWFkLiAqLworICAg ICpkYXRhID0gTlVMOwkJCS8qIEluIGNhc2UgcyBpcyBlbXB0eSAqLworICAgIGRlYnVnKEYxMDEs ImVuY3N0ciBzcHNpeiIsIiIsc3BzaXopOworICAgIHJjID0gZ2V0cGt0KHNwc2l6LDApOwkJLyog RmlsbCBhIHBhY2tldCBmcm9tIHRoZSBzdHJpbmcuICovCisgICAgZGVidWcoRjEwMSwiZW5jc3Ry IGdldHBrdCByYyIsIiIscmMpOworICAgIGlmIChyYyA+IC0xICYmIG1lbXB0ciA8IChjaGFyICop KHMgKyBzbGVuKSkgeyAvKiBNZWFucyB3ZSBkaWRuJ3QgZW5jb2RlICovCisJcmMgPSAtMTsJCQkv KiB0aGUgd2hvbGUgc3RyaW5nLiAqLworCWRlYnVnKEYxMDEsImVuY3N0ciBzdHJpbmcgdG9vIGJp ZyIsIiIsc2l6ZSk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsImVuY3N0ciBnZXRwa3QgcmMiLCIi LHJjKTsKKyAgICBtZW1zdHIgPSBtOwkJCQkvKiBSZXN0b3JlIG1lbW9yeSBzdHJpbmcgZmxhZyAq LworICAgIG1lbXB0ciA9IHA7CQkJCS8qIGFuZCBwb2ludGVyICovCisgICAgZmlyc3QgPSAxOwkJ CQkvKiBQdXQgdGhpcyBiYWNrIGFzIHdlIGZvdW5kIGl0LiAqLworICAgIHJldHVybihyYyk7Cit9 CisKKy8qICBPdXRwdXQgZnVuY3Rpb25zIHBhc3NlZCB0byAnZGVjb2RlJzogICovCisKK2ludAkJ CSAgICAgICAvKiAgUHV0IGNoYXJhY3RlciBpbiBzZXJ2ZXIgY29tbWFuZCBidWZmZXIgICovCisj aWZkZWYgQ0tfQU5TSUMKK3B1dHNydihjaGFyIGMpCisjZWxzZQorcHV0c3J2KGMpIHJlZ2lzdGVy IGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogcHV0c3J2ICovIHsKKyAgICAqc3J2 cHRyKysgPSBjOworICAgICpzcnZwdHIgPSAnXDAnOwkJLyogTWFrZSBzdXJlIGJ1ZmZlciBpcyBu dWxsLXRlcm1pbmF0ZWQgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAkJCQkJLyogIE91dHB1 dCBjaGFyYWN0ZXIgdG8gY29uc29sZS4gICovCisjaWZkZWYgQ0tfQU5TSUMKK3B1dHRybShjaGFy IGMpCisjZWxzZQorcHV0dHJtKGMpIHJlZ2lzdGVyIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogcHV0dHJtICovIHsKKyAgICBleHRlcm4gaW50IHJjZGFjdGl2ZTsKKyNpZm5kZWYg Tk9TUEwKKyAgICBleHRlcm4gY2hhciAqIHFidWZwOwkJLyogSWYgUkVNT1RFIFFVRVJZIGFjdGl2 ZSwgKi8KKyAgICBleHRlcm4gaW50IHF1ZXJ5LCBxYnVmbjsJCS8qIGFsc28gc3RvcmUgcmVzcG9u c2UgaW4gKi8KKyAgICBpZiAocXVlcnkgJiYgcWJ1Zm4rKyA8IDEwMjQpIHsJLyogcXVlcnkgYnVm ZmVyLiAqLworCSpxYnVmcCsrID0gYzsKKwkqcWJ1ZnAgPSBOVUw7CisgICAgfQorICAgIGlmICgh cXVlcnkgfHwgIXhjbWRzcmMpCisjZW5kaWYgLyogTk9TUEwgKi8KKy8qCisgIFRoaXMgcm91dGlu ZSBpcyB1c2VkIChhbW9uZyBvdGhlciB0aGluZ3MpIGZvciBwcmludGluZyB0aGUgc2VydmVyJ3Mg YW5zd2VyCisgIHRvIGEgUkVNT1RFIGNvbW1hbmQuICBCdXQgUkVNT1RFIENEIGlzIHNwZWNpYWwg YmVjYXVzZSBpdCBpc24ndCByZWFsbHkgCisgIGFza2luZyBmb3IgYW4gYW5zd2VyIGZyb20gdGhl IHNlcnZlci4gIFRodXMgc29tZSBwZW9wbGUgd2FudCB0byBzdXBwcmVzcworICB0aGUgY29uZmly bWF0aW9uIG1lc3NhZ2UgKGUuZy4gd2hlbiB0aGUgc2VydmVyIHNlbmRzIGJhY2sgdGhlIGFjdHVh bCBwYXRoCisgIG9mIHRoZSBkaXJlY3RvcnkgQ0QnZCB0byksIGFuZCBleHBlY3QgdG8gYmUgYWJs ZSB0byBkbyB0aGlzIHdpdGggU0VUIFFVSUVUCisgIE9OLiAgQnV0IHRoZXkgd291bGQgbm90IHdh bnQgU0VUIFFVSUVUIE9OIHRvIHN1cHByZXNzIHRoZSBvdGhlciBzZXJ2ZXIKKyAgcmVwbGllcywg d2hpY2ggYXJlIHBvaW50bGVzcyB3aXRob3V0IHRoZWlyIGFuc3dlcnMuICBUaHVzIHRoZSAicmNk YWN0aXZlIgorICBmbGFnIChSRU1PVEUgQ0QgY29tbWFuZCBpcyBhY3RpdmUpLiAgVGh1IE9jdCAx MCAxNjozODoyMSAyMDAyCisqLworICAgICAgaWYgKCEocXVpZXQgJiYgcmNkYWN0aXZlKSkJLyog Z3Jvc3MsIHl1ayAqLworCWNvbm9jKGMpOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworaW50CQkJCQkvKiAgT3V0cHV0IGNoYXIgdG8gZmlsZS4gKi8KKyNpZmRlZiBD S19BTlNJQworcHV0bWZpbChjaGFyIGMpCQkJCS8qIEp1c3QgbGlrZSBwdXRmaWwgYnV0IHRvIFpN RklMRSAqLworI2Vsc2UJCQkJCS8qIHJhdGhlciB0aGFuIFpPRklMRS4uLiAqLworcHV0bWZpbChj KSByZWdpc3RlciBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHB1dG1maWwgKi8g eworICAgIGRlYnVnKEYwMDAsInB1dGZpbCIsIiIsYyk7CisgICAgaWYgKHpjaG91dChaTUZJTEUs IChjaGFyKSAoYyAmIGZtYXNrKSkgPCAwKSB7CisJY3pzZWVuID0gMTsKKwlkZWJ1ZyhGMTAxLCJw dXRmaWwgemNob3V0IHdyaXRlIGVycm9yLCBzZXR0aW5nIGN6c2VlbiIsIiIsMSk7CisJcmV0dXJu KC0xKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCitpbnQJCQkJCS8qICBPdXRwdXQgY2hh ciB0byBub3doZXJlLiAqLworI2lmZGVmIENLX0FOU0lDCitwdXRub3doZXJlKGNoYXIgYykKKyNl bHNlCitwdXRub3doZXJlKGMpIHJlZ2lzdGVyIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogcHV0bm93aGVyZSAqLyB7CisgICAgcmV0dXJuKDApOworfQorCisKK2ludAkJCQkJLyog IE91dHB1dCBjaGFyIHRvIGZpbGUuICovCisjaWZkZWYgQ0tfQU5TSUMKK3B1dGZpbChjaGFyIGMp CisjZWxzZQorcHV0ZmlsKGMpIHJlZ2lzdGVyIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogcHV0ZmlsICovIHsKKyAgICBkZWJ1ZyhGMDAwLCJwdXRmaWwiLCIiLGMpOworICAgIGlm ICh6Y2hvdXQoWk9GSUxFLCAoY2hhcikgKGMgJiBmbWFzaykpIDwgMCkgeworCWN6c2VlbiA9IDE7 ICAgCQkJLyogSWYgd3JpdGUgZXJyb3IuLi4gKi8KKwlkZWJ1ZyhGMTAxLCJwdXRmaWwgemNob3V0 IHdyaXRlIGVycm9yLCBzZXR0aW5nIGN6c2VlbiIsIiIsMSk7CisJcmV0dXJuKC0xKTsKKyAgICB9 CisgICAgcmV0dXJuKDApOworfQorCisvKgorICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGlzIGEg d3JhcHBlciBmb3IgcHV0ZmlsKCkuICBUaGUgb25seSByZWFzb24gZm9yIGl0cworICBleGlzdGVu Y2UgaXMgdG8gYmUgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBkZWNvZGUoKSwgd2hp Y2ggdHJlYXRzCisgIHB1dGZpbCgpIGl0c2VsZiBzcGVjaWFsbHkgLS0gYnlwYXNzaW5nIGl0IGFu ZCB1c2luZyBhbiBpbnRlcm5hbCBtYWNybworICBpbnN0ZWFkIHRvIHNwZWVkIHRoaW5ncyB1cC4g IFVzZSB6cHV0ZmlsKCkgaW5zdGVhZCBvZiBwdXRmaWwoKSBpbiBjYXNlcyB3aGVyZQorICB3ZSBk byBub3Qgd2FudCB0aGlzIHRvIGhhcHBlbiwgZS5nLiB3aGVuIHdlIG5lZWQgdG8gc2VuZCBvdXRw dXQgdG8gdGhlIGZpbGUKKyAgd2l0aCBhIG1peHR1cmUgb2YgemNob3V0KCkgYW5kIHpzb3V0KCkv enNvdXRsKCkgY2FsbHMgKGFzIGlzIHRoZSBjYXNlIHdpdGgKKyAgaW5jb21pbmcgc2hvcnQtZm9y bSBSRU1PVEUgY29tbWFuZCByZXBsaWVzIHJlZGlyZWN0ZWQgdG8gYSBmaWxlKSwgd2hpY2ggd291 bGQKKyAgb3RoZXJ3aXNlIHJlc3VsdCBpbiBkYXRhIHdyaXR0ZW4gdG8gdGhlIGZpbGUgb3V0IG9m IG9yZGVyLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCit6cHV0ZmlsKGNoYXIgYykKKyNlbHNl Cit6cHV0ZmlsKGMpIHJlZ2lzdGVyIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog enB1dGZpbCAqLyB7CisgICAgcmV0dXJuKHB1dGZpbChjKSk7Cit9CisKKyNpZm5kZWYgTk9YRkVS CisKKy8qIEQgRSBDIE8gRCBFICAtLSAgS2VybWl0IHBhY2tldCBkZWNvZGluZyBwcm9jZWR1cmUg Ki8KKworLyoKKyBDYWxsIHdpdGggc3RyaW5nIHRvIGJlIGRlY29kZWQgYW5kIGFuIG91dHB1dCBm dW5jdGlvbi4KKyBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSAoZS5nLiBkaXNr IGZ1bGwpLgorCisgVGhpcyBpcyB0aGUgImlubmVyIGxvb3AiIHdoZW4gcmVjZWl2aW5nIGZpbGVz LCBhbmQgbXVzdCBiZSBjb2RlZCBhcworIGVmZmljaWVudGx5IGFzIHBvc3NpYmxlLiAgTm90ZSBz b21lIHBvdGVudGlhbCBwcm9ibGVtczogIGlmIGEgcGFja2V0CisgaXMgYmFkbHkgZm9ybWVkLCBo YXZpbmcgYSBwcmVmaXhlZCBzZXF1ZW5jZSBlbmRpbmcgcHJlbWF0dXJlbHksIHRoaXMKKyBmdW5j dGlvbiwgYXMgY29kZWQsIGNvdWxkIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQuICBU aGlzIGhhcworIG5ldmVyIGhhcHBlbmVkLCB0aHVzIHRoZSBhZGRpdGlvbmFsICh0aW1lLWNvbnN1 bWluZykgdGVzdHMgaGF2ZSBub3QKKyBiZWVuIGFkZGVkLgorKi8KKworc3RhdGljIENIQVIgKnhk YnVmOwkvKiBHbG9iYWwgdmVyc2lvbiBvZiBkZWNvZGUoKSdzIGJ1ZmZlciBwb2ludGVyICovCisg ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgdXNlIGJ5IHRyYW5zbGF0aW9uIGZ1bmN0aW9u cy4gKi8KKworLyogRnVuY3Rpb24gZm9yIHB1c2hpbmcgYSBjaGFyYWN0ZXIgb250byBkZWNvZGUo KSdzIGlucHV0IHN0cmVhbS4gKi8KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCit6ZHN0dWZmKENI QVIgYykKKyNlbHNlCit6ZHN0dWZmKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor LyogemRzdHVmZiAqLyB7CisgICAgeGRidWYtLTsJCQkJLyogQmFjayB1cCB0aGUgcG9pbnRlci4g Ki8KKyAgICAqeGRidWYgPSBjOwkJCQkvKiBTdHVmZiB0aGUgY2hhcmFjdGVyLiAqLworfQorCisj aWZkZWYgQ0tUVU5JTkcKKy8qCisgIFRyaW1tZWQtZG93biBwYWNrZXQgZGVjb2RlciBmb3IgYmlu YXJ5LW1vZGUgbm8tcGFyaXR5IHRyYW5zZmVycy4KKyAgZGVjb2RlKCkgaXMgdGhlIGZ1bGwgdmVy c2lvbi4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworYmRlY29kZShDSEFSICpidWYsIGludCAo KmZuKShjaGFyKSkKKyNlbHNlCitiZGVjb2RlKGJ1ZixmbikgcmVnaXN0ZXIgQ0hBUiAqYnVmOyBy ZWdpc3RlciBpbnQgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogYmRlY29kZSAq LyB7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGEsIGE3OwkvKiBWYXJpb3VzIGNvcGllcyBv ZiBjdXJyZW50IGNoYXIgKi8KKyAgICBpbnQgY2NwZmxnOwkJCQkvKiBGb3IgQ3RybC11bnByZWZp eGluZyBzdGF0cyAqLworICAgIGludCB0OwkJCQkvKiBJbnQgdmVyc2lvbiBvZiBjaGFyYWN0ZXIg Ki8KKyAgICBpbnQgbGVuOworICAgIGxvbmcgejsJCQkJLyogRm9yIENSQyBjYWxjdWxhdGlvbiAq LworICAgIENIQVIgYzsJCQkJLyogQ3VycmVudCBjaGFyYWN0ZXIgKi8KKworICAgIGlmICghYmlu YXJ5IHx8IHBhcml0eSB8fCBmbiAhPSBwdXRmaWwpIC8qIEpVU1QgSU4gQ0FTRSAqLworICAgICAg cmV0dXJuKGRlY29kZShidWYsZm4sMSkpOworICAgIGRlYnVnKEYxMDAsIkJERUNPREUiLCIiLDAp OworCisgICAgeGRidWYgPSBidWY7CQkJLyogR2xvYmFsIGNvcHkgb2Ygc291cmNlIHBvaW50ZXIu ICovCisKKyAgICBsZW4gPSBybG47CQkJCS8qIE51bWJlciBvZiBieXRlcyBpbiBkYXRhIGZpZWxk ICovCisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICAgYSA9ICp4ZGJ1ZisrICYgMHhmZjsJ CS8qIEdldCBuZXh0IGNoYXJhY3RlciAqLworCWxlbi0tOworCXJwdCA9IDA7CQkJLyogSW5pdGlh bGl6ZSByZXBlYXQgY291bnQuICovCisJaWYgKGEgPT0gcnB0cSAmJiBycHRmbGcpIHsJLyogR290 IGEgcmVwZWF0IHByZWZpeD8gKi8KKwkgICAgcnB0ID0geHVuY2hhcigqeGRidWYrKyAmIDB4RkYp OyAvKiBZZXMsIGdldCB0aGUgcmVwZWF0IGNvdW50LCAqLworCSAgICBycHRuICs9IHJwdDsKKwkg ICAgYSA9ICp4ZGJ1ZisrICYgMHhGRjsJLyogYW5kIGdldCB0aGUgcHJlZml4ZWQgY2hhcmFjdGVy LiAqLworCSAgICBsZW4gLT0gMjsKKwl9CisJY2NwZmxnID0gMDsJCQkvKiBDb250cm9sIHByZWZp eCBmbGFnLiAqLworCWlmIChhID09IGN0bHEpIHsJCS8qIElmIGNvbnRyb2wgcHJlZml4LCAqLwor CSAgICBhICA9ICp4ZGJ1ZisrICYgMHhGRjsJLyogZ2V0IGl0cyBvcGVyYW5kICovCisJICAgIGxl bi0tOworCSAgICBhNyA9IGEgJiAweDdGOwkJLyogYW5kIGl0cyBsb3cgNyBiaXRzLiAqLworCSAg ICBpZiAoKGE3ID49IDAxMDAgJiYgYTcgPD0gMDEzNykgfHwgYTcgPT0gJz8nKSB7IC8qIENvbnRy b2xsaWZ5ICovCisJCWEgPSBjdGwoYSk7CQkvKiBpZiBpbiBjb250cm9sIHJhbmdlLiAqLworCQlh NyA9IGEgJiAweDdGOworCQljY3BmbGcgPSAxOwkJLyogTm90ZSB0aGF0IHdlIGRpZCB0aGlzICov CisJCWNjcCsrOwkJCS8qIENvdW50IGZvciBzdGF0cyAqLworCSAgICB9CisJfSBlbHNlIGE3ID0g YSAmIDB4N2Y7CQkvKiBOb3QgY29udHJvbCBxdW90ZSAqLworCWlmIChhNyA8IDMyIHx8IGE3ID09 IDEyNykJLyogQSBiYXJlIGNvbnRyb2wgY2hhcmFjdGVyPyAqLworCSAgaWYgKCFjY3BmbGcpIGNj dSsrOwkJLyogQ291bnQgaXQgKi8KKwlpZiAoIXJwdCkgcnB0ID0gMTsKKwlmb3IgKDsgcnB0ID4g MDsgcnB0LS0pIHsJLyogT3V0cHV0IHRoZSBjaGFyIFJQVCB0aW1lcyAqLworI2lmZGVmIENBTElC UkFURQorCSAgICBpZiAoY2FsaWJyYXRlKSB7CisJCWZmYysrOworCQljb250aW51ZTsKKwkgICAg fQorI2VuZGlmIC8qIENBTElCUkFURSAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKHhm bGcgJiYgIXJlbWZpbGUpIHsJCS8qIFdyaXRlIHRvIHZpcnR1YWwgc2NyZWVuICovCisgICAgICAg ICAgICAgICAgY2hhciBfYTsKKyAgICAgICAgICAgICAgICBfYSA9IGEgJiBmbWFzazsKKyAgICAg ICAgICAgICAgICB0ID0gY29ub2MoX2EpOworICAgICAgICAgICAgICAgIGlmICh0IDwgMSkKKyAg ICAgICAgICAgICAgICAgICAgdCA9IC0xOworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyog T1MyICovCisJICAgICAgdCA9IHptY2hvdXQoYSAmIGZtYXNrKTsJLyogem1jaG91dCBpcyBhIG1h Y3JvICovCisJICAgIGlmICh0IDwgMCkgeworCQlkZWJ1ZyhGMTAxLCJiZGVjb2RlIHdyaXRlIGVy cm9yIC0gZXJybm8iLCIiLGVycm5vKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfQorCSAgICBmZmMr KzsJCQkvKiBDb3VudCB0aGUgY2hhcmFjdGVyICovCisJICAgIGlmIChkb2NyYyAmJiAhcmVtZmls ZSkgewkvKiBVcGRhdGUgZmlsZSBDUkMgKi8KKwkJYyA9IGE7CQkJLyogRm9yY2UgY29udmVyc2lv biB0byB1bnNpZ25lZCBjaGFyICovCisJCXogPSBjcmMxNiBeIChsb25nKWM7CisJCWNyYzE2ID0g KGNyYzE2ID4+IDgpIF4KKwkJICAoY3JjdGFbKHogJiAweEYwKSA+PiA0XSBeIGNyY3RiW3ogJiAw eDBGXSk7CisJICAgIH0KKwl9CisjaWZkZWYgQ0tfQ1RSTFoKKwlsYXN0Y2hhciA9IGE7CisjZW5k aWYgLyogQ0tfQ1RSTFogKi8KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENL VFVOSU5HICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKy8qICBQIE4gQiBZIFQgRSAgLS0gIE91 dHB1dCBuZXh0IGJ5dGUgdG8gZmlsZSBvciBvdGhlciBkZXN0aW5hdGlvbiAgKi8KKworc3RhdGlj IENLX09GRl9UIG9mZmMgPSAwTDsKKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitwbmJ5 dGUoQ0hBUiBjLCBpbnQgKCpmbikoY2hhcikpCisjZWxzZQorcG5ieXRlKGMsZm4pIENIQVIgYzsg aW50ICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHBuYnl0ZSAqLyB7CisgICAg aW50IHJjOworICAgIGxvbmcgejsKKworI2lmZGVmIE9TMgorI2lmbmRlZiBOT1hGRVIKKyAgICBp ZiAoeGZsZyAmJiAhcmVtZmlsZSkgewkJLyogV3JpdGUgdG8gdmlydHVhbCBzY3JlZW4gKi8KKwlj aGFyIF9hOworCV9hID0gYyAmIGZtYXNrOworCXJjID0gY29ub2MoX2EpOworCWlmIChyYyA8IDEp CisJICByZXR1cm4oLTEpOworICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlm IC8qIE9TMiAqLworICAgIHsKKwlpZiAoZm4gPT0gcHV0ZmlsKSB7CQkvKiBFeGVjdXRlIG91dHB1 dCBmdW5jdGlvbiAqLworCSAgICByYyA9IHptY2hvdXQoYyk7CQkvKiB0by1maWxlIG1hY3JvIChm YXN0KSAqLworCX0gZWxzZSBpZiAoIWZuKSB7CisJICAgIHJjID0gcHV0Y2hhcihjKTsJCS8qIHRv LXNjcmVlbiBtYWNybyAoZmFzdCkgKi8KKyAgICAgICAgfSBlbHNlIHsKKwkgICAgcmMgPSAoKmZu KShjKTsJCS8qIGZ1bmN0aW9uIGNhbGwgKG5vdCBhcyBmYXN0KSAqLworCX0KKwlpZiAocmMgPCAw KQorCSAgcmV0dXJuKHJjKTsKKyAgICB9CisvKgorICBCb3RoIHhnbmJ5dGUoKSBhbmQgeHBuYnl0 ZSgpIGluY3JlbWVudCBmZmMgKHRoZSBmaWxlIGJ5dGUgY291bnRlcikuCisgIER1cmluZyBmaWxl IHRyYW5zZmVyLCBvbmx5IG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgY2FsbGVkLiAgSG93ZXZl ciwKKyAgdGhlIFRSQU5TTEFURSBjb21tYW5kIGlzIGxpa2VseSB0byBjYWxsIHRoZW0gYm90aC4g IG9mZmMsIHRoZXJlZm9yZSwKKyAgY29udGFpbnMgdGhlIG91dHB1dCBieXRlIGNvdW50LCBuZWNl c3NhcnkgZm9yIGhhbmRsaW5nIHRoZSBVQ1MtMiBCT00uCisgIE5PVEU6IEl0IG1pZ2h0IGJlIHNh ZmUgdG8ganVzdCB0ZXN0IGZvciBXX1NFTkQsIEZUUCBvciBub3QuCisqLworICAgIGlmICgod2hh dCAmIChXX0ZUUHxXX1NFTkQpKSAhPSAoV19GVFB8V19TRU5EKSkgeworCW9mZmMrKzsJCQkJLyog Q291bnQgdGhlIGJ5dGUgKi8KKwlmZmMrKzsJCQkJLyogQ291bnQgdGhlIGJ5dGUgKi8KKyAgICB9 CisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChkb2NyYyAmJiAheGZsZyAmJiAhcmVtZmlsZSkgewkv KiBVcGRhdGUgZmlsZSBDUkMgKi8KKwl6ID0gY3JjMTYgXiAobG9uZyljOworCWNyYzE2ID0gKGNy YzE2ID4+IDgpIF4KKwkgIChjcmN0YVsoeiAmIDB4RjApID4+IDRdIF4gY3JjdGJbeiAmIDB4MEZd KTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgcmV0dXJuKDEpOworfQorCisvKgor ICBYIFAgTiBCIFkgVCBFICAtLSAgVHJhbnNsYXRlIGFuZCBwdXQgbmV4dCBieXRlIHRvIGZpbGUu CisKKyAgT25seSBmb3IgVW5pY29kZS4gIENhbGwgd2l0aCBuZXh0IHVudHJhbnNsYXRlZCBieXRl IGZyb20gaW5jb21pbmcKKyAgYnl0ZSBzdHJlYW0sIHdoaWNoIGNhbiBiZSBpbiBhbnkgVHJhbnNm ZXIgQ2hhcmFjdGVyIFNldDogVUNTLTIsIFVURi04LAorICBMYXRpbi0xLCBMYXRpbi1IZWJyZXcs IGV0Yy4gIFRyYW5zbGF0ZXMgdG8gdGhlIGZpbGUgY2hhcmFjdGVyIHNldCBhbmQKKyAgd3JpdGVz IGJ5dGVzIHRvIHRoZSBvdXRwdXQgZmlsZS4gIENhbGwgd2l0aCBjaGFyYWN0ZXIgdG8gdHJhbnNs YXRlCisgIGFzIGFuIGludCwgcGx1cyB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldCAodG8gdHJh bnNsYXRlIGZyb20pIGFuZCB0aGUKKyAgZmlsZSBjaGFyYWN0ZXIgc2V0ICh0byB0cmFuc2xhdGUg dG8pLCBvciAtMSwwLDAgdG8gcmVzZXQgdGhlIFVDUy0yIGJ5dGUKKyAgbnVtYmVyICh3aGljaCBz aG91bGQgYmUgZG9uZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmlsZSkuICBJZiB0aGUgdHJhbnNm ZXIKKyAgKHNvdXJjZSkgY2hhcmFjdGVyLXNldCBpcyBVQ1MtMiwgYnl0ZXMgTVVTVCBhcnJpdmUg aW4gQmlnLUVuZGlhbiBvcmRlci4KKyAgUmV0dXJuczoKKyAgIC0xOiBPbiBlcnJvcgorICAgIDA6 IE5vdGhpbmcgdG8gd3JpdGUgKG1pZC1zZXF1ZW5jZSkKKyAgID4wOiBOdW1iZXIgb2YgYnl0ZXMg d3JpdHRlbi4KKyovCisjaWZkZWYgS0FOSkkKK3N0YXRpYyBpbnQganN0YXRlID0gMCwganggPSAw OwkJLyogRm9yIG91dHB1dHRpbmcgSklTLTcgKi8KK3N0YXRpYyBjaGFyIGpidWZbMTZdID0geyBO VUwsIE5VTCB9OworI2VuZGlmIC8qIEtBTkpJICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCit4 cG5ieXRlKGludCBhLCBpbnQgdGNzLCBpbnQgZmNzLCBpbnQgKCpmbikoY2hhcikpCisjZWxzZQor eHBuYnl0ZShhLHRjcyxmY3MsZm4pIGludCBhLCB0Y3MsIGZjczsgaW50ICgqZm4pKCk7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKy8qIHhwbmJ5dGUgKi8geworI2lmZGVmIFVOSUNPREUKKyAgICBl eHRlcm4gaW50IHVjc2JvbTsJCQkvKiBCeXRlIG9yZGVyICovCisjZW5kaWYgLyogVU5JQ09ERSAq LworICAgIC8qIENIQVIgYzsgKi8JCQkvKiBVbnNpZ25lZCBjaGFyIHdvcmtlciAqLworICAgIHN0 YXRpYyB1bmlvbiBja19zaG9ydCB1YywgZXUsIHNqOwkvKiBVQ1MtMiwgRVVDLCBhbmQgU2hpZnQt SklTIHdvcmtlcnMgKi8KKyAgICBVU0hPUlQgY2g7CQkJCS8qIGRpdHRvLi4uICovCisgICAgVVNI T1JUICogdXMgPSBOVUxMOwkJCS8qIGRpdHRvLi4uICovCisgICAgaW50IGM3LCByYywgaGF2ZXVj ID0gMDsJCS8qIFJldHVybiBjb2RlIGFuZCBVQ1MtMiBmbGFnICovCisgICAgaW50IHV0ZmVycm9y ID0gMDsJCQkvKiBVVEYtOCBlcnJvciAqLworICAgIHN0YXRpYyBpbnQgYm4gPSAwOwkJCS8qIFVD Uy0yIGJ5dGUgbnVtYmVyICovCisgICAgaW50IHN3YXBwaW5nID0gMDsJCQkvKiBTd2FwcGluZyBV Q1MgYnl0ZXMgdG8gb3V0cHV0PyAqLworCQkJCQkvKiBzd2FwcGluZyBtdXN0IGJlIDAgb3IgMSAq LworICAgIGlmIChhID09IC0xICYmICh0Y3MgfCBmY3MpID09IDApIHsJLyogUmVzZXQgaW4gY2Fz ZSBwcmV2aW91cyBydW4gKi8KKwlibiA9IDA7CQkJCS8qIGxlZnQgYm4gYXQgMS4uLiAqLworCW9m ZmMgPSAoQ0tfT0ZGX1QpMDsKKwlkZWJ1ZyhGMTAxLCJ4cG5ieXRlIFJFU0VUIiwiIixibik7CisJ cmV0dXJuKDApOworICAgIH0KKyAgICBkZWJ1ZyhGMDAxLCJ4cG5ieXRlIGEiLCIiLGEpOworCisj aWZkZWYgVU5JQ09ERQorCisvKgorICBieXRlb3JkZXIgPSBoYXJkd2FyZSBieXRlIG9yZGVyIG9m IHRoaXMgbWFjaGluZS4KKyAgdWNzb3JkZXIgID0gb3ZlcnJpZGUgYnkgU0VUIEZJTEUgVUNTIEJZ VEUtT1JERVIgY29tbWFuZC4KKyAgZmlsZW9yZGVyID0gYnl0ZSBvcmRlciBvZiBVQ1MtMiBpbnB1 dCBmaWxlIGRldGVjdGVkIGZyb20gQk9NLgorICBzd2FwcGluZyBhcHBsaWVzIG9ubHkgd2hlbiBv dXRwdXQgY2hhcnNldCBpcyBVQ1MtMi4KKyovCisgICAgaWYgKHVjc29yZGVyICE9IDEgJiYgdWNz b3JkZXIgIT0gMCkJLyogQWxzbyBqdXN0IGluIGNhc2UuLi4gKi8KKyAgICAgIHVjc29yZGVyID0g Ynl0ZW9yZGVyOworICAgIGlmICgoYnl0ZW9yZGVyICYmICF1Y3NvcmRlcikgfHwgKCFieXRlb3Jk ZXIgJiYgZmlsZW9yZGVyKSkKKyAgICAgIHN3YXBwaW5nID0gMTsJCQkvKiBTd2FwcGluZyBieXRl cyB0byBvdXRwdXQgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICBkZWJ1ZyhGMTAxLCJ4cG5ieXRl IHVjc29yZGVyIiwiIix1Y3NvcmRlcik7CisgICAgZGVidWcoRjEwMSwieHBuYnl0ZSBzd2FwcGlu ZyIsIiIsc3dhcHBpbmcpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmICh0Y3MgPT0g VENfVVRGOCkgewkJLyogJ2EnIGlzIGZyb20gYSBVVEYtOCBzdHJlYW0gKi8KKwljaCA9IGE7CisJ aWYgKGZjcyA9PSBUQ19VVEY4KQkJLyogT3V0cHV0IGlzIFVURi04IHRvbyAqLworCSAgcmV0dXJu KHBuYnl0ZShjaCxmbikpOwkvKiBzbyBqdXN0IGNvcHkuICovCisJcmMgPSB1dGY4X3RvX3VjczIo Y2gsJnVzKTsJLyogT3RoZXJ3aXNlIGNvbnZlcnQgdG8gVUNTLTIgKi8KKwlpZiAocmMgPT0gMCkg ewkJCS8qIERvbmUgd2l0aCB0aGlzIHNlcXVlbmNlICovCisJICAgIHVjLnhfc2hvcnQgPSAqdXM7 CQkvKiBXZSBoYXZlIGEgVW5pY29kZSAqLworCSAgICBoYXZldWMgPSAxOworCX0gZWxzZSBpZiAo cmMgPCAwKSB7CQkvKiBFcnJvciAqLworCSAgICBkZWJ1ZyhGMTAxLCJ4cG5ieXRlIFVURi04IGNv bnZlcnNpb24gZXJyb3IiLCIiLHJjKTsKKwkgICAgaGF2ZXVjID0gMTsJCQkvKiBSZXBsYWNlIGJ5 IFUrRkZGRCAqLworCSAgICB1Yy54X3Nob3J0ID0gKnVzOworCSAgICB1dGZlcnJvciA9IDE7CisJ fSBlbHNlCQkJCS8qIFNlcXVlbmNlIGluY29tcGxldGUgKi8KKwkgIHJldHVybigwKTsKKyAgICB9 IGVsc2UgaWYgKHRjcyA9PSBUQ19VQ1MyKSB7CS8qICdhJyBpcyBVQ1MtMiAqLworCS8qIEhlcmUg d2UgaGF2ZSBpbmNvbWluZyBVQ1MtMiBpbiBndWFyYW50ZWVkIEJpZyBFbmRpYW4gb3JkZXIgKi8K KwkvKiBzbyB3ZSBtdXN0IGV4Y2hhbmdlIGJ5dGVzIGlmIGxvY2FsIG1hY2hpbmUgaXMgTGl0dGxl IEVuZGlhbi4gKi8KKwlzd2l0Y2ggKGJuKSB7CQkJLyogV2hpY2ggYnl0ZT8gKi8KKwkgIGNhc2Ug MDoJCQkvKiBIaWdoLi4uICovCisJICAgIHVjLnhfY2hhcltieXRlb3JkZXJdID0gKHVuc2lnbmVk KWEgJiAweGZmOworCSAgICBibisrOworCSAgICByZXR1cm4oMCk7CQkJLyogV2FpdCBmb3IgbmV4 dCAqLworCSAgY2FzZSAxOgkJCS8qIExvdy4uLiAqLworCSAgICB1Yy54X2NoYXJbMS1ieXRlb3Jk ZXJdID0gKHVuc2lnbmVkKWEgJiAweGZmOworCSAgICBibiA9IDA7CQkJLyogRG9uZSB3aXRoIHNl cXVlbmNlICovCisJICAgIGhhdmV1YyA9IDE7CQkJLyogSGF2ZSBhIFVuaWNvZGUgKi8KKwl9Cisg ICAgfSBlbHNlCisjZW5kaWYgLyogVU5JQ09ERSAqLworCisjaWZkZWYgS0FOSkkJCQkJLyogV2hl dGhlciBVTklDT0RFIGlzIGRlZmluZWQgb3Igbm90ICovCisgICAgICBpZiAodGNzID09IFRDX0pF VUMpIHsJCS8qIEluY29taW5nIEphcGFuZXNlIEVVQyAqLworCWludCBiYWQgPSAwOworCXN0YXRp YyBpbnQga2FuamkgPSAwOwkJLyogRmxhZ3Mgc2V0IGluIGNhc2UgMCBmb3IgY2FzZSAxICovCisJ c3RhdGljIGludCBrYW5hID0gMDsKKwlzd2l0Y2ggKGJuKSB7CQkJLyogQnl0ZSBudW1iZXIgKi8K KwkgIGNhc2UgMDoJCQkvKiBCeXRlIDAgKi8KKwkgICAgZXUueF9zaG9ydCA9IDA7CisJICAgIGlm ICgoYSAmIDB4ODApID09IDApIHsKKwkJc2oueF9zaG9ydCA9ICh1bnNpZ25lZClhICYgMHhmZjsg LyogU2luZ2xlIGJ5dGUgKi8KKwkJa2FuamkgPSBrYW5hID0gMDsKKwkgICAgfSBlbHNlIHsJCQkv KiBEb3VibGUgYnl0ZSAqLworCQljNyA9IGEgJiAweDdmOworCQlpZiAoYzcgPiAweDIwICYmIGM3 IDwgMHg3ZikgeyAvKiBLYW5qaSAqLworCQkgICAgZXUueF9jaGFyW2J5dGVvcmRlcl0gPSAoQ0hB UikgYTsgIC8qIFN0b3JlIGZpcnN0IGJ5dGUgKi8KKwkJICAgIGJuKys7CQkgICAgICAvKiBTZXQg dXAgZm9yIHNlY29uZCBieXRlICovCisJCSAgICBrYW5qaSA9IDE7CisJCSAgICBrYW5hID0gMDsK KwkJICAgIHJldHVybigwKTsKKwkJfSBlbHNlIGlmIChhID09IDB4OGUpIHsJLyogU1MyIC0tIEth dGFrYW5hIHByZWZpeCAqLworCQkgICAgZXUueF9jaGFyW2J5dGVvcmRlcl0gPSAoQ0hBUikgYTsg LyogU2F2ZSBpdCAqLworCQkgICAgYm4rKzsKKwkJICAgIGthbmEgPSAxOworCQkgICAga2Fuamkg PSAwOworCQkgICAgcmV0dXJuKDApOworCQl9IGVsc2UgeworCQkgICAgYmFkKys7CisJCX0KKwkg ICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgMToJCQkvKiBCeXRlIDEgKi8KKwkgICAgYm4gPSAw OworCSAgICBpZiAoa2FuamkpIHsKKwkJZXUueF9jaGFyWzEtYnl0ZW9yZGVyXSA9IChDSEFSKSBh OworCQlzai54X3Nob3J0ID0gZXVfdG9fc2ooZXUueF9zaG9ydCk7CisJCWJyZWFrOworCSAgICB9 IGVsc2UgaWYgKGthbmEpIHsKKwkJc2oueF9zaG9ydCA9IChDSEFSKSAoYSB8IDB4ODApOworCQli cmVhazsKKwkgICAgfSBlbHNlIHsJCQkvKiAoc2hvdWxkbid0IGhhcHBlbikgKi8KKwkJYmFkKys7 CisJICAgIH0KKwl9CisJLyogQ29tZSBoZXJlIHdpdGggb25lIFNoaWZ0LUpJUyBjaGFyYWN0ZXIg Ki8KKworI2lmZGVmIFVOSUNPREUKKwlpZiAoYmFkKSB7CisJICAgIHVjLnhfc2hvcnQgPSAweGZm ZmQ7CisJfSBlbHNlIHsKKwkgICAgdWMueF9zaG9ydCA9IHNqX3RvX3VuKHNqLnhfc2hvcnQpOyAv KiBDb252ZXJ0IHRvIFVuaWNvZGUgKi8KKwl9CisJaGF2ZXVjID0gMTsKKyNlbmRpZiAvKiBVTklD T0RFICovCisgICAgfSBlbHNlCisjZW5kaWYgLyogS0FOSkkgKi8KKworI2lmZGVmIFVOSUNPREUK Kwl1Yy54X3Nob3J0ID0gKHVuc2lnbmVkKWEgJiAweGZmOyAvKiBMYXRpbi0xIG9yIHdoYXRldmVy Li4uICovCisKKyAgICAvKiBDb21lIGhlcmUgd2l0aCB1YyA9IHRoZSBjaGFyYWN0ZXIgdG8gYmUg dHJhbnNsYXRlZC4gKi8KKyAgICAvKiBJZiAoaGF2ZXVjKSBpdCdzIFVDUy0yIGluIG5hdGl2ZSBv cmRlciwgb3RoZXJ3aXNlIGl0J3MgYSBieXRlLiAqLworCisgICAgZGVidWcoRjEwMSwieHBuYnl0 ZSBoYXZldWMiLCIiLGhhdmV1Yyk7CisKKyAgICBpZiAoaGF2ZXVjKSB7CQkJLyogSWYgd2UgaGF2 ZSBhIFVuaWNvZGUuLi4gKi8KKwlkZWJ1ZyhGMDAxLCJ4cG5ieXRlIHVjLnhfc2hvcnQiLCJbQV0i LHVjLnhfc2hvcnQpOworCWRlYnVnKEYxMDEsInhwbmJ5dGUgZmVvbCIsIiIsZmVvbCk7CisJaWYg KHdoYXQgJiBXX1hGRVIpIHsJCS8qIElmIHRyYW5zZmVycmluZyBhIGZpbGUgKi8KKwkgICAgaWYg KGZlb2wgJiYgdWMueF9zaG9ydCA9PSBDUikgeyAvKiBoYW5kbGUgZW9sIGNvbnZlcnNpb24uICov CisJCXJldHVybigwKTsKKwkgICAgfSBlbHNlIGlmIChmZW9sICYmIHVjLnhfc2hvcnQgPT0gTEYp IHsKKwkJdWMueF9zaG9ydCA9IGZlb2w7CisJICAgIH0KKwl9CisJZGVidWcoRjAwMSwieHBuYnl0 ZSB1Yy54X3Nob3J0IiwiW0JdIix1Yy54X3Nob3J0KTsKKwlpZiAoZmNzID09IEZDX1VDUzIpIHsJ CS8qIEFuZCBGQ1MgaXMgVUNTLTIgKi8KKwkgICAgLyogV3JpdGUgb3V0IHRoZSBieXRlcyBpbiB0 aGUgYXBwcm9wcmlhdGUgYnl0ZSBvcmRlciAqLworCSAgICBpbnQgY291bnQgPSAwOworI2lmbmRl ZiBJS1NET05MWQorI2lmZGVmIE9TMgorICAgICAgICAgICAgZXh0ZXJuIGludCBrOTVzdGRvdXQs d2hlcmV4W10sd2hlcmV5W107CisJCQlleHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcmNtZDsKKyAg ICAgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBVU0hPUlQgdWNzMjsKKyAgICAgICAg ICAgICAgICBVQ0hBUiAgYnl0ZXNbMl07CisgICAgICAgICAgICB9IG91dHB1dDsKKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBJS1NET05MWSAqLworCSAgICBpZiAoIW9mZmMgJiYgdWNzYm9t KSB7CS8qIEJlZ2lubmluZyBvZiBmaWxlPyAqLworCisjaWZuZGVmIElLU0RPTkxZCisjaWZkZWYg T1MyCisgICAgICAgICAgICAgICAgaWYgKGZuID09IE5VTEwgJiYgIWs5NXN0ZG91dCAmJiAhaW5z ZXJ2ZXIpIHsKKwkJICAgIG9mZmMrKzsKKyNpZmRlZiBDT01NRU5UCisJCSAgICAvKiBEb24ndCBw cmludCB0aGUgQk9NIHRvIHRoZSBkaXNwbGF5ICovCisgICAgICAgICAgICAgICAgICAgIG91dHB1 dC5ieXRlc1swXSA9ICghdWNzb3JkZXIgPyAweGZmIDogMHhmZSk7CisgICAgICAgICAgICAgICAg ICAgIG91dHB1dC5ieXRlc1sxXSA9ICghdWNzb3JkZXIgPyAweGZlIDogMHhmZik7CisKKyAgICAg ICAgICAgICAgICAgICAgVnNjcm5XcnRVQ1MyU3RyQXR0KFZDTUQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0LnVjczIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2hlcmV5W1ZDTURdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2hlcmV4W1ZDTURdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmNvbG9yY21kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgCisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogSUtTRE9OTFkgKi8KKyAgICAgICAgICAgICAgICB7CisJCSAgICBpZiAo KHJjID0gcG5ieXRlKCh1Y3NvcmRlciA/IDB4ZmYgOiAweGZlKSxmbikpIDwgMCkKKwkJICAgICAg cmV0dXJuKHJjKTsJLyogQk9NICovCisJCSAgICBpZiAoKHJjID0gcG5ieXRlKCh1Y3NvcmRlciA/ IDB4ZmUgOiAweGZmKSxmbikpIDwgMCkKKwkJICAgICAgcmV0dXJuKHJjKTsKKwkJfQorCQljb3Vu dCArPSAyOworCSAgICB9CisJICAgIGlmICh1dGZlcnJvcikgeworI2lmbmRlZiBJS1NET05MWQor I2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIGlmIChmbiA9PSBOVUxMICYmICFrOTVzdGRvdXQg JiYgIWluc2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZmMrKzsKKyAgICAgICAgICAg ICAgICAgICAgb3V0cHV0LmJ5dGVzWzBdID0gKCF1Y3NvcmRlciA/IDB4ZmQgOiAweGZmKTsKKyAg ICAgICAgICAgICAgICAgICAgb3V0cHV0LmJ5dGVzWzFdID0gKCF1Y3NvcmRlciA/IDB4ZmYgOiAw eGZkKTsKKworICAgICAgICAgICAgICAgICAgICBWc2NybldydFVDUzJTdHJBdHQoVkNNRCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQudWNzMiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3aGVyZXlbVkNNRF0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3aGVyZXhbVkNNRF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmY29sb3JjbWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIAorI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIElLU0RPTkxZICovCisJCXsKKwkJICAgIGlmICgocmMgPSBwbmJ5dGUoKHVjc29yZGVy ID8gMHhmZCA6IDB4ZmYpLGZuKSkgPCAwKQorCQkgICAgICByZXR1cm4ocmMpOworCQkgICAgaWYg KChyYyA9IHBuYnl0ZSgodWNzb3JkZXIgPyAweGZmIDogMHhmZCksZm4pKSA8IDApCisJCSAgICAg IHJldHVybihyYyk7CisJCX0KKwkJY291bnQgKz0gMjsKKwkgICAgfQorI2lmbmRlZiBJS1NET05M WQorI2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKGZuID09IE5VTEwgJiYgIWs5NXN0ZG91dCAm JiAhaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICBvZmZjKys7CisgICAgICAgICAgICAgICAg b3V0cHV0LmJ5dGVzWzBdID0gdWMueF9jaGFyW3N3YXBwaW5nXTsKKyAgICAgICAgICAgICAgICBv dXRwdXQuYnl0ZXNbMV0gPSB1Yy54X2NoYXJbMS1zd2FwcGluZ107CisKKyAgICAgICAgICAgICAg ICBWc2NybldydFVDUzJTdHJBdHQoVkNNRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJm91dHB1dC51Y3MyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZXlbVkNNRF0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleFtWQ01EXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmNvbG9yY21kCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9IGVsc2UgCisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogSUtTRE9OTFkgKi8KKyAgICAgICAgICAgIHsKKwkJaWYgKChyYyA9IHBuYnl0ZSh1 Yy54X2NoYXJbc3dhcHBpbmddLGZuKSkgPCAwKQorCQkgIHJldHVybihyYyk7CisJCWlmICgocmMg PSBwbmJ5dGUodWMueF9jaGFyWzEtc3dhcHBpbmddLGZuKSkgPCAwKQorCQkgIHJldHVybihyYyk7 CisJICAgIH0KKwkgICAgY291bnQgKz0gMjsKKwkgICAgcmV0dXJuKGNvdW50KTsKKwl9IGVsc2Ug aWYgKGZjcyA9PSBGQ19VVEY4KSB7CS8qIENvbnZlcnQgdG8gVVRGLTggKi8KKwkgICAgQ0hBUiAq IGJ1ZiA9IE5VTEw7CisJICAgIGludCBpLCBjb3VudDsKKwkgICAgaWYgKHV0ZmVycm9yKSB7CisJ CWlmICgocmMgPSBwbmJ5dGUoKHVjc29yZGVyID8gMHhiZCA6IDB4ZmYpLGZuKSkgPCAwKQorCQkg IHJldHVybihyYyk7CisJCWlmICgocmMgPSBwbmJ5dGUoKHVjc29yZGVyID8gMHhmZiA6IDB4YmQp LGZuKSkgPCAwKQorCQkgIHJldHVybihyYyk7CisJICAgIH0KKwkgICAgaWYgKChjb3VudCA9IHVj czJfdG9fdXRmOCh1Yy54X3Nob3J0LCZidWYpKSA8IDEpCisJICAgICAgcmV0dXJuKC0xKTsKKwkg ICAgZGVidWcoRjAxMSwieHBuYnl0ZSBidWYiLGJ1Zixjb3VudCk7CisJICAgIGZvciAoaSA9IDA7 IGkgPCBjb3VudDsgaSsrKQorCSAgICAgIGlmICgocmMgPSBwbmJ5dGUoYnVmW2ldLGZuKSkgPCAw KQorCQlyZXR1cm4ocmMpOworCSAgICBpZiAodXRmZXJyb3IpCisJICAgICAgY291bnQgKz0gMjsK KwkgICAgcmV0dXJuKGNvdW50KTsKKwl9IGVsc2UgewkJCS8qIFRyYW5zbGF0ZSBVQ1MtMiB0byBi eXRlICovCisJICAgIGlmICh1Yy54X3Nob3J0ID09IDB4MjAyOCB8fCB1Yy54X3Nob3J0ID09IDB4 MjAyOSkgeworCQlpZiAodXRmZXJyb3IpCisJCSAgcG5ieXRlKFVOSyxmbik7CisJCWlmIChmZW9s KQorCQkgIHJldHVybihwbmJ5dGUoKENIQVIpZmVvbCxmbikpOworCQlpZiAoKHJjID0gcG5ieXRl KChDSEFSKUNSLGZuKSkgPCAwKQorCQkgIHJldHVybihyYyk7CisJCWlmICgocmMgPSBwbmJ5dGUo KENIQVIpTEYsZm4pKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKwkJZWxzZQorCQkgIHJldHVybih1 dGZlcnJvciA/IDMgOiAyKTsKKwkgICAgfSBlbHNlIGlmICh4dWYpIHsJCS8qIFVDUy10by1GQ1Mg ZnVuY3Rpb24gKi8KKwkJaW50IHggPSAwOworCQlpZiAodXRmZXJyb3IpCisJCSAgcG5ieXRlKFVO Syxmbik7CisJCWlmICgocmMgPSAoKnh1ZikodWMueF9zaG9ydCkpIDwgMCkgLyogVGhlc2UgY2Fu IGZhaWwuLi4gKi8KKwkJICBjaCA9IFVOSzsKKwkJZWxzZQorCQkgIGNoID0gKHVuc2lnbmVkKSgo dW5zaWduZWQpcmMgJiAweGZmZmYpOworCQl4ID0gcG5ieXRlKGNoLGZuKTsKKwkJaWYgKHggPCAw KQorCQkgIHJldHVybih4KTsKKwkJZWxzZSBpZiAodXRmZXJyb3IpCisJCSAgeCsrOworCQlyZXR1 cm4oeCk7CisjaWZkZWYgS0FOSkkKKworLyogIEFsc28gc2VlIHRoZSBub24tVW5pY29kZSBLYW5q aSBzZWN0aW9uIGZ1cnRoZXIgZG93biBpbiB0aGlzIGZ1bmN0aW9uLiAqLworCisJICAgIH0gZWxz ZSBpZiAoZmNzaW5mb1tmY3NdLmFscGhhYmV0ID09IEFMX0pBUEFOKSB7CisKKwkJLyogVHJhbnNs YXRlIFVDUy0yIHRvIEphcGFuZXNlIHNldCAqLworCQlkZWJ1ZyhGMDAxLCJ4cG5ieXRlIHVjIiwi Iix1Yy54X3Nob3J0KTsKKwkJc2oueF9zaG9ydCA9IHVuX3RvX3NqKHVjLnhfc2hvcnQpOyAvKiBG aXJzdCB0byBTaGlmdC1KSVMgKi8KKwkJZGVidWcoRjAwMSwieHBuYnl0ZSBzaiIsIiIsc2oueF9z aG9ydCk7CisKKwkJc3dpdGNoIChmY3MpIHsJCS8qIEZpbGUgY2hhcmFjdGVyIHNldCAqLworCQkg IGNhc2UgRkNfU0hKSVM6CS8qIFNoaWZ0LUpJUyAtLSBqdXN0IG91dHB1dCBpdCAqLworCQkgICAg aWYgKHNqLnhfY2hhcltieXRlb3JkZXJdKSAvKiBCdXQgbm90IGhpZ2ggYnl0ZSBpZiB6ZXJvICov CisJCSAgICAgIGlmICgocmMgPSBwbmJ5dGUoKENIQVIpc2oueF9jaGFyW2J5dGVvcmRlcl0sZm4p KSA8IDApCisJCQlyZXR1cm4ocmMpOworCQkgICAgaWYgKChyYyA9IHBuYnl0ZSgoQ0hBUilzai54 X2NoYXJbMS1ieXRlb3JkZXJdLGZuKSkgPCAwKQorCQkgICAgICByZXR1cm4ocmMpOworCQkgICAg cmV0dXJuKDIpOworCQkgIGNhc2UgRkNfSkVVQzoJCS8qIEVVQy1KUCAqLworCQkgICAgZXUueF9z aG9ydCA9IHNqX3RvX2V1KHNqLnhfc2hvcnQpOyAvKiBTaGlmdC1KSVMgdG8gRVVDICovCisJCSAg ICBkZWJ1ZyhGMDAxLCJ4cG5ieXRlIGV1IiwiIixldS54X3Nob3J0KTsKKwkJICAgIGlmIChldS54 X3Nob3J0ID09IDB4ZmZmZikgeyAvKiBCYWQgKi8KKwkJCWlmICgocmMgPSBwbmJ5dGUoVU5LLGZu KSkgPCAwKQorCQkJICByZXR1cm4ocmMpOworCQkJcmV0dXJuKDEpOworCQkgICAgfSBlbHNlIHsJ CS8qIEdvb2QgKi8KKwkJCWludCBjb3VudCA9IDA7CS8qIFdyaXRlIGhpZ2ggYnl0ZSBpZiBub3Qg emVybyAqLworCQkJaWYgKGV1LnhfY2hhcltieXRlb3JkZXJdKSB7CisJCQkgICAgaWYgKChyYz1w bmJ5dGUoKENIQVIpZXUueF9jaGFyW2J5dGVvcmRlcl0sZm4pKSA8IDApCisJCQkgICAgICByZXR1 cm4ocmMpOworCQkJICAgIGNvdW50Kys7CisJCQl9CisJCQkvKiBBbHdheXMgd3JpdGUgbG93IGJ5 dGUgKi8KKwkJCWlmICgocmMgPSBwbmJ5dGUoKENIQVIpZXUueF9jaGFyWzEtYnl0ZW9yZGVyXSxm bikpIDwgMCkKKwkJCSAgcmV0dXJuKHJjKTsKKwkJCWNvdW50Kys7CisJCQlyZXR1cm4oY291bnQp OworCQkgICAgfQorCQkgICAgYnJlYWs7CisKKwkJICBjYXNlIEZDX0pJUzc6CQkvKiBKSVMtNyAq LworCQkgIGNhc2UgRkNfSkRFQzoJCS8qIERFQyBLYW5qaSAqLworCQkgICAgZXUueF9zaG9ydCA9 IHNqX3RvX2V1KHNqLnhfc2hvcnQpOyAvKiBTaGlmdC1KSVMgdG8gRVVDICovCisJCSAgICBpZiAo ZXUueF9zaG9ydCA9PSAweGZmZmYpIHsgLyogQmFkICovCisJCQlkZWJ1ZyhGMDAxLCJ4cG5ieXRl IGJhZCBldSIsIiIsZXUueF9zaG9ydCk7CisJCQlpZiAoKHJjID0gcG5ieXRlKFVOSyxmbikpIDwg MCkKKwkJCSAgcmV0dXJuKHJjKTsKKwkJCXJldHVybigxKTsKKwkJICAgIH0gZWxzZSB7CQkvKiBH b29kICovCisJCQlpbnQgaTsKKwkJCS8qIFVzZSBhbm90aGVyIG5hbWUgLSAnYScgaGlkZXMgcGFy YW1ldGVyICovCisJCQkvKiBJdCdzIE9LIGFzIGlzIGJ1dCBjYXVzZXMgY29tcGlsZXIgd2Fybmlu Z3MgKi8KKwkJCWNoYXIgYSA9IGV1LnhfY2hhclsxLWJ5dGVvcmRlcl07IC8qIExvdyBieXRlICov CisJCQlkZWJ1ZyhGMDAxLCJ4cG5ieXRlIGV1IiwiIixldS54X3Nob3J0KTsKKwkJCWlmIChldS54 X2NoYXJbYnl0ZW9yZGVyXSA9PSAwKSB7IC8qIFJvbWFuICovCisJCQkgICAgc3dpdGNoIChqc3Rh dGUpIHsKKwkJCSAgICAgIGNhc2UgMToJLyogQ3VycmVudCBzdGF0ZSBpcyBLYXRha2FuYSAqLwor CQkJCWpidWZbMF0gPSAweDBmOwkvKiBTSSAqLworCQkJCWpidWZbMV0gPSBhOworCQkJCWp4ID0g MjsKKwkJCQlicmVhazsKKwkJCSAgICAgIGNhc2UgMjoJLyogQ3VycmVudCBzdGF0ZSBpcyBLYW5q aSAqLworCQkJCWpidWZbMF0gPSAweDFiOwkvKiBFU0MgKi8KKwkJCQlqYnVmWzFdID0gMHgyODsJ LyogKCAqLworCQkJCWpidWZbMl0gPSAweDRhOwkvKiBKICovCisJCQkJamJ1ZlszXSA9IGE7CisJ CQkJanggPSA0OworCQkJCWJyZWFrOworCQkJICAgICAgZGVmYXVsdDoJLyogQ3VycmVudCBzdGF0 ZSBpcyBSb21hbiAqLworCQkJCWpidWZbMF0gPSBhOworCQkJCWp4ID0gMTsKKwkJCQlicmVhazsK KwkJCSAgICB9CisJCQkgICAganN0YXRlID0gMDsJLyogTmV3IHN0YXRlIGlzIFJvbWFuICovCisJ CQl9IGVsc2UgaWYgKGV1LnhfY2hhcltieXRlb3JkZXJdID09IDB4OGUpIHsgLyogS2FuYSAqLwor CQkJICAgIGp4ID0gMDsKKwkJCSAgICBzd2l0Y2ggKGpzdGF0ZSkgeworCQkJICAgICAgY2FzZSAy OgkJICAgLyogZnJvbSBLYW5qaSAqLworCQkJCWpidWZbangrK10gPSAweDFiOyAvKiBFU0MgKi8K KwkJCQlqYnVmW2p4KytdID0gMHgyODsgLyogKCAqLworCQkJCWpidWZbangrK10gPSAweDRhOyAv KiBKICovCisJCQkgICAgICBjYXNlIDA6CQkgICAvKiBmcm9tIFJvbWFuICovCisJCQkJamJ1Zltq eCsrXSA9IDB4MGU7IC8qIFNPICovCisJCQkgICAgICBkZWZhdWx0OgkJICAgLyogU3RhdGUgaXMg YWxyZWFkeSBLYW5hKi8KKwkJCQlqYnVmW2p4KytdID0gKGEgJiAweDdmKTsgLyogYW5kIHRoZSBj aGFyICovCisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJICAgIGpzdGF0ZSA9IDE7CS8qIE5ldyBz dGF0ZSBpcyBLYXRha2FuYSAqLworCQkJfSBlbHNlIHsJLyogS2FuamkgKi8KKwkJCSAgICBqeCA9 IDA7CisJCQkgICAgc3dpdGNoIChqc3RhdGUpIHsKKwkJCSAgICAgIGNhc2UgMToJLyogQ3VycmVu dCBzdGF0ZSBpcyBLYXRha2FuYSAqLworCQkJCWpidWZbangrK10gPSAweDBmOyAvKiBTSSAgKi8K KwkJCSAgICAgIGNhc2UgMDoJLyogQ3VycmVudCBzdGF0ZSBpcyBSb21hbiAqLworCQkJCWpidWZb angrK10gPSAweDFiOyAvKiBFU0MgKi8KKwkJCQlqYnVmW2p4KytdID0gMHgyNDsgLyogJCAgICov CisJCQkJamJ1ZltqeCsrXSA9IDB4NDI7IC8qIEIgICAqLworCQkJICAgICAgZGVmYXVsdDoJLyog Q3VycmVudCBzdGF0ZSBpcyBhbHJlYWR5IEthbmppICovCisJCQkJamJ1ZltqeCsrXSA9IGV1Lnhf Y2hhcltieXRlb3JkZXJdICYgMHg3ZjsKKwkJCQlqYnVmW2p4KytdID0gZXUueF9jaGFyWzEtYnl0 ZW9yZGVyXSAmIDB4N2Y7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJICAgIGpzdGF0ZSA9IDI7 CS8qIFNldCBzdGF0ZSB0byBLYW5qaSAqLworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IGp4OyBp KyspIC8qIE91dHB1dCB0aGUgcmVzdWx0ICovCisJCQkgIGlmICgocmMgPSBwbmJ5dGUoamJ1Zltp XSxmbikpIDwgMCkKKwkJCSAgICByZXR1cm4ocmMpOworCQkJcmV0dXJuKGp4KTsJLyogUmV0dXJu IGl0cyBsZW5ndGggKi8KKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIEtBTkpJICovCisJICAgIH0g ZWxzZSB7CQkJLyogTm8gdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KKwkJaW50IGNvdW50ID0gMDsK KwkJaWYgKHV0ZmVycm9yKSB7CisJCSAgICBpZiAoKHJjID0gcG5ieXRlKCh1Y3NvcmRlciA/IDB4 ZmQgOiAweGZmKSxmbikpIDwgMCkKKwkJICAgICAgcmV0dXJuKHJjKTsKKwkJICAgIGlmICgocmMg PSBwbmJ5dGUoKHVjc29yZGVyID8gMHhmZiA6IDB4ZmQpLGZuKSkgPCAwKQorCQkgICAgICByZXR1 cm4ocmMpOworCQkgICAgY291bnQgKz0gMjsKKwkJfQorCQlpZiAoKHJjID0gcG5ieXRlKHVjLnhf Y2hhcltzd2FwcGluZ10sZm4pKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKwkJaWYgKChyYyA9IHBu Ynl0ZSh1Yy54X2NoYXJbMS1zd2FwcGluZ10sZm4pKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKwkJ Y291bnQgKz0gMjsKKwkJcmV0dXJuKGNvdW50KTsKKwkgICAgfQorCX0KKyAgICB9IGVsc2UgewkJ CQkvKiBCeXRlIHRvIFVuaWNvZGUgKi8KKwlpZiAoeHR1KSB7CQkJLyogVENTLXRvLVVDUyBmdW5j dGlvbiAqLworCSAgICBpZiAoKCh0Y3NpbmZvW3Rjc10uc2l6ZSA+IDEyOCkgJiYgKHVjLnhfc2hv cnQgJiAweDgwKSkgfHwKKwkJdGNzaW5mb1t0Y3NdLnNpemUgPD0gMTI4KQorCSAgICAgIHVjLnhf c2hvcnQgPSAoKnh0dSkodWMueF9zaG9ydCk7CisJfQorCWlmIChmY3MgPT0gRkNfVUNTMikgewkJ LyogQW5kIEZDUyBpcyBVQ1MtMiAqLworCSAgICAvKiBXcml0ZSBvdXQgdGhlIGJ5dGVzIGluIHRo ZSBhcHByb3ByaWF0ZSBieXRlIG9yZGVyICovCisJICAgIGlmICghb2ZmYyAmJiB1Y3Nib20pIHsJ LyogQmVnaW5uaW5nIG9mIGZpbGU/ICovCisJCWlmICgocmMgPSBwbmJ5dGUoKHVjc29yZGVyID8g MHhmZiA6IDB4ZmUpLGZuKSkgPCAwKSAvKiBCT00gKi8KKwkJICByZXR1cm4ocmMpOworCQlpZiAo KHJjID0gcG5ieXRlKCh1Y3NvcmRlciA/IDB4ZmUgOiAweGZmKSxmbikpIDwgMCkKKwkJICByZXR1 cm4ocmMpOworCSAgICB9CisJICAgIGlmICgocmMgPSBwbmJ5dGUodWMueF9jaGFyW3N3YXBwaW5n XSxmbikpIDwgMCkKKwkgICAgICByZXR1cm4ocmMpOworCSAgICBpZiAoKHJjID0gcG5ieXRlKHVj LnhfY2hhclsxLXN3YXBwaW5nXSxmbikpIDwgMCkKKwkgICAgICByZXR1cm4ocmMpOworCSAgICBy ZXR1cm4oMik7CisJfSBlbHNlIGlmIChmY3MgPT0gRkNfVVRGOCkgewkvKiBDb252ZXJ0IHRvIFVU Ri04ICovCisJICAgIENIQVIgKiBidWYgPSBOVUxMOworCSAgICBpbnQgaSwgY291bnQ7CisJICAg IGlmICgoY291bnQgPSB1Y3MyX3RvX3V0ZjgodWMueF9zaG9ydCwmYnVmKSkgPCAxKQorCSAgICAg IHJldHVybigtMSk7CisJICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCSAgICAgIGlm ICgocmMgPSBwbmJ5dGUoYnVmW2ldLGZuKSkgPCAwKQorCQlyZXR1cm4ocmMpOworCSAgICByZXR1 cm4oY291bnQpOworCX0gZWxzZSB7CisJICAgIGRlYnVnKEYxMDAsInhwbmJ5dGUgaW1wb3NzaWJs ZSBjb21iaW5hdGlvbiIsIiIsMCk7CisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KKyNlbHNl CisjaWZkZWYgS0FOSkkKKy8qCisgIFRoaXMgYWxtb3N0LCBidXQgbm90IHF1aXRlLCBkdXBsaWNh dGVzIHRoZSBLYW5qaSBzZWN0aW9uIGFib3ZlLgorICBUaGVyZSBpcyBubyBkb3VidCBhIHdheSB0 byBjb21iaW5lIHRoZSBzZWN0aW9ucyBtb3JlIGVsZWdhbnRseSwKKyAgYnV0IHByb2JhYmx5IG9u bHkgYXQgdGhlIGV4cGVuc2Ugb2YgYWRkaXRpb25hbCBleGVjdXRpb24gb3ZlcmhlYWQuCisgIEFz IG1hdHRlcnMgc3RhbmQsIGJlIGNhcmVmdWwgdG8gcmVmbGVjdCBhbnkgY2hhbmdlcyBpbiB0aGlz IHNlY3Rpb24KKyAgdG8gdGhlIG90aGVyIEthbmppIHNlY3Rpb24gYWJvdmUuCisqLworICAgIGlm ICh0Y3MgPT0gVENfSkVVQykgewkJLyogSW5jb21pbmcgSmFwYW5lc2UgRVVDICovCisJaW50IGNv dW50ID0gMDsKKwlzd2l0Y2ggKGZjcykgewkJCS8qIEZpbGUgY2hhcmFjdGVyIHNldCAqLworCSAg Y2FzZSBGQ19TSEpJUzoJCS8qIFNoaWZ0LUpJUyAtLSBqdXN0IG91dHB1dCBpdCAqLworCSAgICBp ZiAoc2oueF9jaGFyW2J5dGVvcmRlcl0pCS8qIEJ1dCBub3QgaGlnaCBieXRlIGlmIHplcm8gKi8K KwkgICAgICBpZiAoKHJjID0gcG5ieXRlKChDSEFSKXNqLnhfY2hhcltieXRlb3JkZXJdLGZuKSkg PCAwKQorCQlyZXR1cm4ocmMpOworCSAgICBjb3VudCsrOworCSAgICBpZiAoKHJjID0gcG5ieXRl KChDSEFSKXNqLnhfY2hhclsxLWJ5dGVvcmRlcl0sZm4pKSA8IDApCisJICAgICAgcmV0dXJuKHJj KTsKKwkgICAgY291bnQrKzsKKwkgICAgcmV0dXJuKGNvdW50KTsKKwkgIGNhc2UgRkNfSkVVQzoJ CQkvKiBFVUMtSlAgKi8KKwkgICAgZXUueF9zaG9ydCA9IHNqX3RvX2V1KHNqLnhfc2hvcnQpOyAv KiBTaGlmdC1KSVMgdG8gRVVDICovCisJICAgIGRlYnVnKEYwMDEsInhwbmJ5dGUgRkNfSkVVQyBl dSIsIiIsZXUueF9zaG9ydCk7CisJICAgIGlmIChldS54X3Nob3J0ID09IDB4ZmZmZikgeyAvKiBC YWQgKi8KKwkJaWYgKChyYyA9IHBuYnl0ZShVTkssZm4pKSA8IDApCisJCSAgcmV0dXJuKHJjKTsK KwkJcmV0dXJuKDEpOworCSAgICB9IGVsc2UgewkJCS8qIEdvb2QgKi8KKwkJaW50IGNvdW50ID0g MDsJCS8qIFdyaXRlIGhpZ2ggYnl0ZSBpZiBub3QgemVybyAqLworCQlpZiAoZXUueF9jaGFyW2J5 dGVvcmRlcl0pIHsKKwkJICAgIGlmICgocmMgPSBwbmJ5dGUoKENIQVIpZXUueF9jaGFyW2J5dGVv cmRlcl0sZm4pKSA8IDApCisJCSAgICAgIHJldHVybihyYyk7CisJCSAgICBjb3VudCsrOworCQl9 CisJCS8qIEFsd2F5cyB3cml0ZSBsb3cgYnl0ZSAqLworCQlpZiAoKHJjID0gcG5ieXRlKChDSEFS KWV1LnhfY2hhclsxLWJ5dGVvcmRlcl0sZm4pKSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKwkJY291 bnQrKzsKKwkJcmV0dXJuKGNvdW50KTsKKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSBG Q19KSVM3OgkJCS8qIEpJUy03ICovCisJICBjYXNlIEZDX0pERUM6CQkJLyogREVDIEthbmppICov CisJICAgIGV1Lnhfc2hvcnQgPSBzal90b19ldShzai54X3Nob3J0KTsgLyogU2hpZnQtSklTIHRv IEVVQyAqLworCSAgICBpZiAoZXUueF9zaG9ydCA9PSAweGZmZmYpIHsgLyogQmFkICovCisJCWRl YnVnKEYwMDEsInhwbmJ5dGUgRkNfSklTNyBiYWQgZXUiLCIiLGV1Lnhfc2hvcnQpOworCQlpZiAo KHJjID0gcG5ieXRlKFVOSyxmbikpIDwgMCkKKwkJICByZXR1cm4ocmMpOworCQlyZXR1cm4oMSk7 CisJICAgIH0gZWxzZSB7CQkJLyogR29vZCAqLworCQlpbnQgaTsKKwkJY2hhciBhID0gZXUueF9j aGFyWzEtYnl0ZW9yZGVyXTsgLyogTG93IGJ5dGUgKi8KKwkJZGVidWcoRjAwMSwieHBuYnl0ZSBG Q19KSVM3IGV1IiwiIixldS54X3Nob3J0KTsKKwkJaWYgKGV1LnhfY2hhcltieXRlb3JkZXJdID09 IDApIHsgLyogUm9tYW4gKi8KKwkJICAgIHN3aXRjaCAoanN0YXRlKSB7CisJCSAgICAgIGNhc2Ug MToJCS8qIEN1cnJlbnQgc3RhdGUgaXMgS2F0YWthbmEgKi8KKwkJCWpidWZbMF0gPSAweDBmOwkv KiBTSSAqLworCQkJamJ1ZlsxXSA9IGE7CisJCQlqeCA9IDI7CisJCQlicmVhazsKKwkJICAgICAg Y2FzZSAyOgkJLyogQ3VycmVudCBzdGF0ZSBpcyBLYW5qaSAqLworCQkJamJ1ZlswXSA9IDB4MWI7 CS8qIEVTQyAqLworCQkJamJ1ZlsxXSA9IDB4Mjg7CS8qICggKi8KKwkJCWpidWZbMl0gPSAweDRh OwkvKiBKICovCisJCQlqYnVmWzNdID0gYTsKKwkJCWp4ID0gNDsKKwkJCWJyZWFrOworCQkgICAg ICBkZWZhdWx0OgkJLyogQ3VycmVudCBzdGF0ZSBpcyBSb21hbiAqLworCQkJamJ1ZlswXSA9IGE7 CisJCQlqeCA9IDE7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGpzdGF0ZSA9IDA7CQkvKiBO ZXcgc3RhdGUgaXMgUm9tYW4gKi8KKwkJfSBlbHNlIGlmIChldS54X2NoYXJbYnl0ZW9yZGVyXSA9 PSAweDhlKSB7IC8qIEthbmEgKi8KKwkJICAgIGp4ID0gMDsKKwkJICAgIHN3aXRjaCAoanN0YXRl KSB7CisJCSAgICAgIGNhc2UgMjoJCSAgIC8qIGZyb20gS2FuamkgKi8KKwkJCWpidWZbangrK10g PSAweDFiOyAvKiBFU0MgKi8KKwkJCWpidWZbangrK10gPSAweDI4OyAvKiAoICovCisJCQlqYnVm W2p4KytdID0gMHg0YTsgLyogSiAqLworCQkgICAgICBjYXNlIDA6CQkgICAvKiBmcm9tIFJvbWFu ICovCisJCQlqYnVmW2p4KytdID0gMHgwZTsgLyogU08gKi8KKwkJICAgICAgZGVmYXVsdDoJCSAg IC8qIFN0YXRlIGlzIGFscmVhZHkgS2FuYSovCisJCQlqYnVmW2p4KytdID0gKGEgJiAweDdmKTsg LyogYW5kIHRoZSBjaGFyICovCisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGpzdGF0ZSA9IDE7 CQkvKiBOZXcgc3RhdGUgaXMgS2F0YWthbmEgKi8KKwkJfSBlbHNlIHsJCS8qIEthbmppICovCisJ CSAgICBqeCA9IDA7CisJCSAgICBzd2l0Y2ggKGpzdGF0ZSkgeworCQkgICAgICBjYXNlIDE6CQkv KiBDdXJyZW50IHN0YXRlIGlzIEthdGFrYW5hICovCisJCQlqYnVmW2p4KytdID0gMHgwZjsgLyog U0kgICovCisJCSAgICAgIGNhc2UgMDoJCS8qIEN1cnJlbnQgc3RhdGUgaXMgUm9tYW4gKi8KKwkJ CWpidWZbangrK10gPSAweDFiOyAvKiBFU0MgKi8KKwkJCWpidWZbangrK10gPSAweDI0OyAvKiAk ICAgKi8KKwkJCWpidWZbangrK10gPSAweDQyOyAvKiBCICAgKi8KKwkJICAgICAgZGVmYXVsdDoJ CS8qIEN1cnJlbnQgc3RhdGUgaXMgYWxyZWFkeSBLYW5qaSAqLworCQkJamJ1ZltqeCsrXSA9IGV1 LnhfY2hhcltieXRlb3JkZXJdICYgMHg3ZjsKKwkJCWpidWZbangrK10gPSBldS54X2NoYXJbMS1i eXRlb3JkZXJdICYgMHg3ZjsKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAganN0YXRlID0gMjsJ CS8qIFNldCBzdGF0ZSB0byBLYW5qaSAqLworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBqeDsgaSsr KSAvKiBPdXRwdXQgdGhlIHJlc3VsdCAqLworCQkgIGlmICgocmMgPSBwbmJ5dGUoamJ1ZltpXSxm bikpIDwgMCkKKwkJICAgIHJldHVybihyYyk7CisJCXJldHVybihqeCk7CQkvKiBSZXR1cm4gaXRz IGxlbmd0aCAqLworCSAgICB9CisJICBkZWZhdWx0OgorCSAgICBpZiAoc2oueF9zaG9ydCA8IDB4 ODApCisJICAgICAgcmV0dXJuKHNqLnhfc2hvcnQpOworCSAgICBlbHNlCisJICAgICAgcmV0dXJu KCc/Jyk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBLQU5KSSAqLworI2VuZGlmIC8qIFVOSUNPREUg Ki8KKyAgICBkZWJ1ZyhGMTAwLCJ4cG5ieXRlIEJBRCBGQUxMVEhSVSIsIiIsMCk7CisgICAgcmV0 dXJuKC0xKTsKK30KKworI2lmbmRlZiBOT1hGRVIKKworLyogIEQgRSBDIE8gRCBFICAtLSAgS2Vy bWl0IERhdGEtcGFja2V0IGRlY29kZXIgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitkZWNv ZGUoQ0hBUiAqYnVmLCBpbnQgKCpmbikoY2hhciksIGludCB4bGF0ZSkKKyNlbHNlCitkZWNvZGUo YnVmLGZuLHhsYXRlKSByZWdpc3RlciBDSEFSICpidWY7IHJlZ2lzdGVyIGludCAoKmZuKSgpOyBp bnQgeGxhdGU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRlY29kZSAqLyB7CisgICAgcmVn aXN0ZXIgdW5zaWduZWQgaW50IGEsIGE3LCBhOCwgYjg7IC8qIFZhcmlvdXMgY29waWVzIG9mIGN1 cnJlbnQgY2hhciAqLworICAgIGludCB0OwkJCQkvKiBJbnQgdmVyc2lvbiBvZiBjaGFyYWN0ZXIg Ki8KKyAgICBpbnQgc3NmbGc7CQkJCS8qIENoYXJhY3RlciB3YXMgc2luZ2xlLXNoaWZ0ZWQgKi8K KyAgICBpbnQgY2NwZmxnOwkJCQkvKiBGb3IgQ3RybC11bnByZWZpeGluZyBzdGF0cyAqLworICAg IGludCBsZW47CisgICAgbG9uZyB6OworICAgIENIQVIgYzsKKy8qCisgIENhdGNoIHRoZSBjYXNl IGluIHdoaWNoIHdlIGFyZSBhc2tlZCB0byBkZWNvZGUgaW50byBhIGZpbGUgdGhhdCBpcyBub3Qg b3BlbiwKKyAgZm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIGludGVycnVwdGVkIHRoZSB0cmFuc2Zl ciwgYnV0IHRoZSBvdGhlciBLZXJtaXQKKyAga2VlcHMgc2VuZGluZy4KKyovCisgICAgaWYgKChj eHNlZW4gfHwgY3pzZWVuIHx8IGRpc2NhcmQpICYmIChmbiA9PSBwdXRmaWwpKQorICAgICAgcmV0 dXJuKDApOworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIENLVFVOSU5HCisgICAgaWYgKGJpbmFy eSAmJiAhcGFyaXR5KQorICAgICAgcmV0dXJuKGJkZWNvZGUoYnVmLGZuKSk7CisjZW5kaWYgLyog Q0tUVU5JTkcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgZGVidWcoRjEwMCwiREVDT0RF IiwiIiwwKTsKKworICAgIHhkYnVmID0gYnVmOwkJCS8qIE1ha2UgZ2xvYmFsIGNvcHkgb2YgcG9p bnRlci4gKi8KKyAgICBycHQgPSAwOwkJCQkvKiBJbml0aWFsaXplIHJlcGVhdCBjb3VudC4gKi8K KworICAgIGxlbiA9IHJsbjsJCQkJLyogTnVtYmVyIG9mIGJ5dGVzIGluIGRhdGEgZmllbGQgKi8K KyAgICB3aGlsZSAobGVuID4gMCkgewkJCS8qIExvb3AgZm9yIGVhY2ggYnl0ZSAqLworICAgICAg ICBhID0gKnhkYnVmKysgJiAweGZmOwkJLyogR2V0IG5leHQgY2hhcmFjdGVyICovCisJbGVuLS07 CisJaWYgKGEgPT0gcnB0cSAmJiBycHRmbGcpIHsJLyogR290IGEgcmVwZWF0IHByZWZpeD8gKi8K KwkgICAgcnB0ID0geHVuY2hhcigqeGRidWYrKyAmIDB4RkYpOyAvKiBZZXMsIGdldCB0aGUgcmVw ZWF0IGNvdW50LCAqLworCSAgICBycHRuICs9IHJwdDsKKwkgICAgYSA9ICp4ZGJ1ZisrICYgMHhG RjsJLyogYW5kIGdldCB0aGUgcHJlZml4ZWQgY2hhcmFjdGVyLiAqLworCSAgICBsZW4gLT0gMjsK Kwl9CisJYjggPSBsc3N0YXRlID8gMDIwMCA6IDA7CS8qIDh0aC1iaXQgdmFsdWUgZnJvbSBTSElG VC1TVEFURSAqLworCWlmIChlYnFmbGcgJiYgYSA9PSBlYnEpIHsJLyogSGF2ZSA4dGgtYml0IHBy ZWZpeD8gKi8KKwkgICAgYjggXj0gMDIwMDsJCQkvKiBZZXMsIGludmVydCB0aGUgOHRoIGJpdCdz IHZhbHVlLCAqLworCSAgICBzc2ZsZyA9IDE7CQkJLyogcmVtZW1iZXIgd2UgZGlkIHRoaXMsICov CisJICAgIGEgPSAqeGRidWYrKyAmIDB4RkY7CS8qIGFuZCBnZXQgdGhlIHByZWZpeGVkIGNoYXJh Y3Rlci4gKi8KKwkgICAgbGVuLS07CisJfSBlbHNlIHNzZmxnID0gMDsKKwljY3BmbGcgPSAwOwor CWlmIChhID09IGN0bHEpIHsJCS8qIElmIGNvbnRyb2wgcHJlZml4LCAqLworCSAgICBhICA9ICp4 ZGJ1ZisrICYgMHhGRjsJLyogZ2V0IGl0cyBvcGVyYW5kICovCisJICAgIGxlbi0tOworCSAgICBh NyA9IGEgJiAweDdGOwkJLyogYW5kIGl0cyBsb3cgNyBiaXRzLiAqLworCSAgICBpZiAoKGE3ID49 IDAxMDAgJiYgYTcgPD0gMDEzNykgfHwgYTcgPT0gJz8nKSB7IC8qIENvbnRyb2xsaWZ5ICovCisJ CWEgPSBjdGwoYSk7CQkvKiBpZiBpbiBjb250cm9sIHJhbmdlLiAqLworCQlhNyA9IGEgJiAweDdG OworCQljY3BmbGcgPSAxOwkJLyogTm90ZSB0aGF0IHdlIGRpZCB0aGlzICovCisJCWNjcCsrOwkJ CS8qIENvdW50IGZvciBzdGF0cyAqLworCSAgICB9CisJfSBlbHNlIGE3ID0gYSAmIDB4N2Y7CQkv KiBOb3QgY29udHJvbCBxdW90ZSAqLworCWlmIChhNyA8IDMyIHx8IGE3ID09IDEyNykgewkvKiBD b250cm9sIGNoYXJhY3Rlcj8gKi8KKwkgICAgaWYgKCFjY3BmbGcpIGNjdSsrOwkJLyogQSBiYXJl IG9uZSwgY291bnQgaXQgKi8KKwkgICAgaWYgKGxzY2FwdSkgewkJLyogSWYgZG9pbmcgbG9ja2lu ZyBzaGlmdHMuLi4gKi8KKwkJaWYgKGxzc3RhdGUpCQkvKiBJZiBTSElGVEVEICovCisJCSAgYTgg PSAoYSAmIH5iOCkgJiAweEZGOyAvKiBJbnZlcnQgbWVhbmluZyBvZiA4dGggYml0ICovCisJCWVs c2UJCQkvKiBvdGhlcndpc2UgKi8KKwkJICBhOCA9IGEgfCBiODsJCS8qIE9SIGluIDh0aCBiaXQg Ki8KKwkJLyogSWYgd2UncmUgbm90IGluIGEgcXVvdGVkIHNlcXVlbmNlICovCisJCWlmICghbHNx dW90ZSAmJiAoIWxzc3RhdGUgfHwgIXNzZmxnKSkgeworCQkgICAgaWYgKGE4ID09IERMRSkgewkv KiBDaGVjayBmb3IgRExFIHF1b3RlICovCisJCQlsc3F1b3RlID0gMTsJLyogcHJlZml4ZWQgYnkg c2luZ2xlIHNoaWZ0ISAqLworCQkJY29udGludWU7CisJCSAgICB9IGVsc2UgaWYgKGE4ID09IFNP KSB7IC8qIENoZWNrIGZvciBTaGlmdC1PdXQgKi8KKwkJCWxzc3RhdGUgPSAxOwkvKiBTSElGVC1T VEFURSA9IFNISUZURUQgKi8KKwkJCWNvbnRpbnVlOworCQkgICAgfSBlbHNlIGlmIChhOCA9PSBT SSkgeyAvKiBvciBTaGlmdC1JbiAqLworCQkJbHNzdGF0ZSA9IDA7CS8qIFNISUZULVNUQVRFID0g VU5TSElGVEVEICovCisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJfSBlbHNlIGxzcXVvdGUgPSAw OworCSAgICB9CisJfQorCWEgfD0gYjg7CQkJLyogT1IgaW4gdGhlIDh0aCBiaXQgKi8KKwlpZiAo cnB0ID09IDApIHJwdCA9IDE7CQkvKiBJZiBubyByZXBlYXRzLCB0aGVuIG9uZSAqLworI2lmbmRl ZiBOT0NTRVRTCisJaWYgKCFiaW5hcnkpIHsJCQkvKiBJZiBpbiB0ZXh0IG1vZGUsICovCisJICAg IGlmICh0Y2hhcnNldCAhPSBUQ19VQ1MyKSB7CisJCWlmIChmZW9sICYmIGEgPT0gQ1IpCS8qIENv bnZlcnQgQ1JMRiB0byBuZXdsaW5lIGNoYXIgKi8KKwkJICBjb250aW51ZTsKKwkJaWYgKGZlb2wg JiYgYSA9PSBMRikKKwkJICBhID0gZmVvbDsKKwkgICAgfQorCSAgICBpZiAoeGxhdHlwZSA9PSBY TEFfQllURSkJLyogQnl0ZS1mb3ItYnl0ZSAtIGRvIGl0IG5vdyAqLworCSAgICAgIGlmICh4bGF0 ZSAmJiByeCkgYSA9ICgqcngpKChDSEFSKSBhKTsKKyAgICAJfQorI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KKwkvKiAoUFdQKSBEZWNvZGluZyBzcGVlZHVwIHZpYSBidWZmZXJlZCBvdXRwdXQgYW5kIGEg bWFjcm8uLi4gKi8KKwlpZiAoZm4gPT0gcHV0ZmlsKSB7CisJICAgIGZvciAoOyBycHQgPiAwOyBy cHQtLSkgewkvKiBPdXRwdXQgdGhlIGNoYXIgUlBUIHRpbWVzICovCisjaWZkZWYgQ0FMSUJSQVRF CisJCWlmIChjYWxpYnJhdGUpIHsKKwkJICAgIGZmYysrOworCQkgICAgY29udGludWU7CisJCX0K KyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKworLyogTm90ZTogVGhlIFVuaWNvZGUgYW5kIEthbmpp IHNlY3Rpb25zIGNhbiBwcm9iYWJseSBiZSBjb21iaW5lZCBub3c7ICovCisvKiB0aGUgVW5pY29k ZSBtZXRob2QgKHhwbmJ5dGUoKSkgY292ZXJzIEthbmppIHRvby4gKi8KKworI2lmZGVmIFVOSUNP REUKKwkJaWYgKCFiaW5hcnkgJiYgeGxhdHlwZSA9PSBYTEFfVU5JQ09ERSkKKwkJICB0ID0geHBu Ynl0ZSgodW5zaWduZWQpKCh1bnNpZ25lZClhICYgMHhmZiksCisJCQkgICAgICB0Y2hhcnNldCwK KwkJCSAgICAgIGZjaGFyc2V0LAorCQkJICAgICAgZm4KKwkJCSAgICAgICk7CisJCWVsc2UKKyNl bmRpZiAvKiBVTklDT0RFICovCisjaWZkZWYgS0FOSkkKKwkJaWYgKCFiaW5hcnkgJiYgdGNoYXJz ZXQgPT0gVENfSkVVQyAmJgorCQkgICAgZmNoYXJzZXQgIT0gRkNfSkVVQykgeyAvKiBUcmFuc2xh dGluZyBmcm9tIEotRVVDICovCisJCSAgICBpZiAoIWZmYykgeGthbmpmKCk7CisJCSAgICBpZiAo eGthbmppKGEsZm4pIDwgMCkgIC8qIHRvIHNvbWV0aGluZyBlbHNlPyAqLworCQkgICAgICByZXR1 cm4oLTEpOworCQkgICAgZWxzZSB0ID0gMTsKKwkJfSBlbHNlCisjZW5kaWYgLyogS0FOSkkgKi8K KwkJeworI2lmZGVmIE9TMgorCQkgICAgICBpZiAoeGZsZyAmJiAhcmVtZmlsZSkgeyAvKiBXcml0 ZSB0byB2aXJ0dWFsIHNjcmVlbiAqLworCQkJICBjaGFyIF9hOworCQkJICBfYSA9IGEgJiBmbWFz azsKKwkJCSAgdCA9IGNvbm9jKF9hKTsKKwkJCSAgaWYgKHQgPCAxKQorCQkJICAgIHQgPSAtMTsK KwkJICAgICAgfSBlbHNlCisjZW5kaWYgLyogT1MyICovCisJCQl0ID0gem1jaG91dChhICYgZm1h c2spOyAvKiB6bWNob3V0IGlzIGEgbWFjcm8gKi8KKwkJfQorCQlpZiAodCA8IDApIHsKKwkJICAg IGRlYnVnKEYxMDEsImRlY29kZSB3cml0ZSBlcnJubyIsIiIsZXJybm8pOworCQkgICAgcmV0dXJu KC0xKTsKKwkJfQorI2lmZGVmIFVOSUNPREUKKwkJaWYgKHhsYXR5cGUgIT0gWExBX1VOSUNPREUg fHwgYmluYXJ5KSB7CisJCSAgICBmZmMrKzsJCS8qIENvdW50IHRoZSBjaGFyYWN0ZXIgKi8KKwkJ ICAgIGlmIChkb2NyYyAmJiAheGZsZyAmJiAhcmVtZmlsZSkgeyAvKiBVcGRhdGUgZmlsZSBDUkMg Ki8KKwkJCWMgPSBhOwkJLyogRm9yY2UgY29udmVyc2lvbiB0byB1bnNpZ25lZCBjaGFyICovCisJ CQl6ID0gY3JjMTYgXiAobG9uZyljOworCQkJY3JjMTYgPSAoY3JjMTYgPj4gOCkgXgorCQkJICAo Y3JjdGFbKHogJiAweEYwKSA+PiA0XSBeIGNyY3RiW3ogJiAweDBGXSk7CisJCSAgICB9CisJCX0K KyNlbmRpZiAvKiBVTklDT0RFICovCisJICAgIH0KKwl9IGVsc2UgewkJCS8qIE91dHB1dCB0byBz b21ldGhpbmcgZWxzZS4gKi8KKwkgICAgYSAmPSBmbWFzazsJCQkvKiBBcHBseSBmaWxlIG1hc2sg Ki8KKwkgICAgZm9yICg7IHJwdCA+IDA7IHJwdC0tKSB7CS8qIE91dHB1dCB0aGUgY2hhciBSUFQg dGltZXMgKi8KKyNpZmRlZiBDQUxJQlJBVEUKKwkJaWYgKGNhbGlicmF0ZSkgeworCQkgICAgZmZj Kys7CisJCSAgICBjb250aW51ZTsKKwkJfQorI2VuZGlmIC8qIENBTElCUkFURSAqLworCQlpZiAo KCpmbikoKGNoYXIpIGEpIDwgMCkgcmV0dXJuKC0xKTsgLyogU2VuZCB0byBvdXRwdXQgZnVuYy4g Ki8KKwkgICAgfQorCX0KKyNpZmRlZiBDS19DVFJMWgorCWxhc3RjaGFyID0gYTsKKyNlbmRpZiAv KiBDS19DVFJMWiAqLworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBHIEUgVCBQIEsg VCAtLSBGaWxsIGEgcGFja2V0IGRhdGEgZmllbGQgICovCisKKy8qCisgIEdldHMgY2hhcmFjdGVy cyBmcm9tIHRoZSBjdXJyZW50IHNvdXJjZSAtLSBmaWxlIG9yIG1lbW9yeSBzdHJpbmcuCisgIEVu Y29kZXMgdGhlIGRhdGEgaW50byB0aGUgcGFja2V0LCBmaWxsaW5nIHRoZSBwYWNrZXQgb3B0aW1h bGx5LgorICBTZXQgZmlyc3QgPSAxIHdoZW4gY2FsbGluZyBmb3IgdGhlIGZpcnN0IHRpbWUgb24g YSBnaXZlbiBpbnB1dCBzdHJlYW0KKyAgKHN0cmluZyBvciBmaWxlKS4KKworICBDYWxsIHdpdGg6 CisgICAgYnVmbWF4IC0tIGN1cnJlbnQgc2VuZC1wYWNrZXQgc2l6ZQorICAgIHhsYXRlICAtLSBm bGFnOiAwIHRvIHNraXAgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiwgMSB0byB0cmFuc2xhdGUK KworICBVc2VzIGdsb2JhbCB2YXJpYWJsZXM6CisgICAgdCAgICAgLS0gY3VycmVudCBjaGFyYWN0 ZXIuCisgICAgZmlyc3QgLS0gZmxhZzogMSB0byBzdGFydCB1cCwgMCBmb3IgaW5wdXQgaW4gcHJv Z3Jlc3MsIC0xIGZvciBFT0YuCisgICAgbmV4dCAgLS0gbmV4dCBjaGFyYWN0ZXIgKG5vdCB1c2Vk IGFueSBtb3JlKS4KKyAgICBkYXRhICAtLSBwb2ludGVyIHRvIHRoZSBwYWNrZXQgZGF0YSBidWZm ZXIuCisgICAgc2l6ZSAgLS0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGRhdGEgYnVmZmVy LgorICAgIG1lbXN0ciAtIGZsYWcgdGhhdCBpbnB1dCBpcyBjb21pbmcgZnJvbSBhIG1lbW9yeSBz dHJpbmcgaW5zdGVhZCBvZiBhIGZpbGUuCisgICAgbWVtcHRyIC0gcG9pbnRlciB0byBzdHJpbmcg aW4gbWVtb3J5LgorICAgICgqc3gpKCkgIGNoYXJhY3RlciBzZXQgdHJhbnNsYXRpb24gZnVuY3Rp b24KKworICBSZXR1cm5zOgorICAgIFRoZSBzaXplIGFzIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiwg YW5kIGFsc28gc2V0cyBnbG9iYWwgInNpemUiLAorICAgIGFuZCBmaWxscyAoYW5kIG51bGwtdGVy bWluYXRlcykgdGhlIGdsb2JhbCBkYXRhIGFycmF5LgorICAgIFJldHVybnM6CisgICAgICAwIG9u IEVPRi4KKyAgICAgLTEgb24gZmF0YWwgKGludGVybmFsKSBlcnJvci4KKyAgICAgLTMgb24gdGlt ZW91dCAoZS5nLiB3aGVuIHJlYWRpbmcgZGF0YSBmcm9tIGEgcGlwZSkuCisKKyAgUmV3cml0dGVu IGJ5IFBhdWwgVy4gUGxhY2V3YXkgKFBXUCkgb2YgT2hpbyBTdGF0ZSBVbml2ZXJzaXR5LCBNYXJj aCAxOTg5LgorICBJbmNvcnBvcmF0ZXMgb2xkIGdldGNoeCgpIGFuZCBlbmNvZGUoKSBpbmxpbmUg dG8gcmVkdWNlIGZ1bmN0aW9uIGNhbGxzLAorICB1c2VzIGJ1ZmZlcmVkIGlucHV0IGZvciBtdWNo LWltcHJvdmVkIGVmZmljaWVuY3ksIGFuZCBjbGVhcnMgdXAgc29tZQorICBjb25mdXNpb24gd2l0 aCBsaW5lIHRlcm1pbmF0aW9uIChDUkxGIHZzIExGIHZzIENSKS4KKworICBSZXdyaXR0ZW4gYWdh aW4gYnkgRnJhbmsgZGEgQ3J1eiB0byBpbmNvcnBvcmF0ZSBsb2NraW5nIHNoaWZ0IG1lY2hhbmlz bSwKKyAgTWF5IDE5OTEuICBBbmQgYWdhaW4gaW4gMTk5OCBmb3IgZWZmaWNpZW5jeSwgZXRjLCB3 aXRoIGEgc2VwYXJhdGUKKyAgYmdldHBrdCgpIHNwbGl0IG91dCBmb3IgYmluYXJ5LW1vZGUgbm8t cGFyaXR5IHRyYW5zZmVycy4KKyovCisKKy8qCisgIE5vdGU6IFNlcGFyYXRlIEthbmppIHN1cHBv cnQgZGF0ZXMgZnJvbSBjaXJjYSAxOTkxIGFuZCBub3cgKDE5OTkpIGNhbiBtb3N0CisgIGxpa2Vs eSBiZSBjb21iaW5lZCB3aXRoIHRoZSB0aGUgVW5pY29kZSBzdXBwb3J0OiB0aGUgeGduYnl0ZSgp L3hwbmJ5dGUoKQorICBtZWNoYW5pc20gd29ya3MgZm9yIGJvdGggVW5pY29kZSBhbmQgS2Fuamku CisqLworI2lmZGVmIEtBTkpJCitpbnQKK2tnZXRmKAorI2lmZGVmIENLX0FOU0lDCisgICAgICBW T0lECisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICAgICkgeworICAgIGlmIChmdW5jc3RyKQor ICAgICAgcmV0dXJuKCgqZnVuY3B0cikoKSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHptaW5j aGFyKCkpOworfQorCitpbnQKK2tnZXRtKAorI2lmZGVmIENLX0FOU0lDCisgICAgICBWT0lECisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICAgICkgeworICAgIGludCB4OworICAgIGlmICgoeCA9 ICptZW1wdHIrKykpIHJldHVybih4KTsKKyAgICBlbHNlIHJldHVybigtMSk7Cit9CisjZW5kaWYg LyogS0FOSkkgKi8KKworLyoKKyAgTG9va2FoZWFkIGZ1bmN0aW9uIHRvIGRlY2lkZSB3aGV0aGVy IGxvY2tpbmcgc2hpZnQgaXMgd29ydGggaXQuICBMb29rcyBhdAorICB0aGUgbmV4dCBmb3VyIGlu cHV0IGNoYXJhY3RlcnMgdG8gc2VlIGlmIGFsbCBvZiB0aGVpciA4dGggYml0cyBtYXRjaCB0aGUK KyAgYXJndW1lbnQuICBDYWxsIHdpdGggMCBvciAwMjAwLiAgUmV0dXJucyAxIG9uIG1hdGNoLCAw IGlmIHRoZXkgZG9uJ3QgbWF0Y2guCisgIElmIHdlIGRvbid0IGhhcHBlbiB0byBoYXZlIGF0IGxl YXN0IDQgbW9yZSBjaGFyYWN0ZXJzIHdhaXRpbmcgaW4gdGhlIGlucHV0CisgIGJ1ZmZlciwgcmV0 dXJucyAxLiAgTm90ZSB0aGF0IHppbnB0ciBwb2ludHMgdHdvIGNoYXJhY3RlcnMgYWhlYWQgb2Yg dGhlCisgIGN1cnJlbnQgY2hhcmFjdGVyIGJlY2F1c2Ugb2YgcmVwZWF0LWNvdW50IGxvb2thaGVh ZC4KKyovCitpbnQKK2xzbG9vayhiKSB1bnNpZ25lZCBpbnQgYjsgewkJLyogTG9ja2luZyBTaGlm dCBMb29rYWhlYWQgKi8KKyAgICBpbnQgaTsKKyAgICBpZiAoemluY250IDwgMykJCQkvKiBJZiBu b3QgZW5vdWdoIGNoYXJzIGluIGJ1ZmZlciwgKi8KKyAgICAgIHJldHVybigxKTsJCQkvKiBmb3Jj ZSBzaGlmdC1zdGF0ZSBzd2l0Y2guICovCisgICAgYiAmPSAwMjAwOwkJCQkvKiBGb3JjZSBhcmd1 bWVudCB0byBwcm9wZXIgZm9ybS4gKi8KKyAgICBmb3IgKGkgPSAtMTsgaSA8IDM7IGkrKykJCS8q IExvb2sgYXQgbmV4dCA1IGNoYXJhY3RlcnMgdG8gKi8KKyAgICAgIGlmICgoKCooemlucHRyK2kp KSAmIDAyMDApICE9IGIpCS8qIHNlZSBpZiBhbGwgdGhlaXIgOHRoIGJpdHMgbWF0Y2guICAqLwor CXJldHVybigwKTsJCQkvKiBUaGV5IGRvbid0LiAqLworICAgIHJldHVybigxKTsJCQkJLyogVGhl eSBkby4gKi8KK30KKworLyogUm91dGluZSB0byBjb21wdXRlIG1heGltdW0gZGF0YSBsZW5ndGgg Zm9yIHBhY2tldCB0byBiZSBmaWxsZWQgKi8KKworaW50CittYXhkYXRhKCkgewkJCQkvKiBHZXQg bWF4aW11bSBkYXRhIGxlbmd0aCAqLworICAgIGludCBuLCBsZW47CisgICAgZGVidWcoRjEwMSwi bWF4ZGF0YSBzcHNpeiAxIiwiIixzcHNpeik7CisgICAgaWYgKHNwc2l6IDwgMCkJCQkvKiBIb3cg Y291bGQgdGhpcyBoYXBwZW4/ICovCisgICAgICBzcHNpeiA9IERTUFNJWjsKKyAgICBkZWJ1ZyhG MTAxLCJtYXhkYXRhIHNwc2l6IDIiLCIiLHNwc2l6KTsKKyAgICBuID0gc3BzaXogLSA1OwkJCS8q IFNwYWNlIGZvciBEYXRhIGFuZCBDaGVja3N1bSAqLworICAgIGlmIChuID4gOTIgJiYgbiA8IDk2 KSBuID0gOTI7CS8qICJTaG9ydCIgTG9uZyBwYWNrZXRzIGRvbid0IHBheSAqLworICAgIGlmIChu ID4gOTIgJiYgbHBjYXB1ID09IDApCQkvKiBJZiBsb25nIHBhY2tldHMgbmVlZGVkLCAqLworICAg ICAgbiA9IDkyOwkJCQkvKiBtYWtlIHN1cmUgdGhleSd2ZSBiZWVuIG5lZ290aWF0ZWQgKi8KKyAg ICBsZW4gPSBuIC0gYmN0bDsJCQkvKiBTcGFjZSBmb3IgZGF0YSAqLworICAgIGlmIChuID4gOTIp IGxlbiAtPSAzOwkJLyogTG9uZyBwYWNrZXQgbmVlZHMgaGVhZGVyIGNoa3N1bSAqLworICAgIGRl YnVnKEYxMDEsIm1heGRhdGEgbGVuIDEiLCIiLGxlbik7CisgICAgaWYgKGxlbiA8IDApIGxlbiA9 IDEwOworICAgIGRlYnVnKEYxMDEsIm1heGRhdGEgbGVuIDIiLCIiLGxlbik7CisgICAgcmV0dXJu KGxlbik7Cit9CisKK3N0YXRpYyBDSEFSIGxlZnRvdmVyWzldID0geyAnXDAnLCdcMCcsJ1wwJywn XDAnLCdcMCcsJ1wwJywnXDAnLCdcMCcsJ1wwJyB9Oworc3RhdGljIGludCBubGVmdCA9IDA7CisK KyNpZmRlZiBDS1RVTklORworLyoKKyAgV2hlbiBDS1RVTklORyBpcyBkZWZpbmVkIHdlIHVzZSB0 aGlzIHNwZWNpYWwgdHJpbW1lZC1kb3duIHZlcnNpb24gb2YgZ2V0cGt0CisgIHRvIHNwZWVkIHVw IGJpbmFyeS1tb2RlIG5vLXBhcml0eSB0cmFuc2ZlcnMuICBXaGVuIENLVFVOSU5HIGlzIG5vdCBk ZWZpbmVkLAorICBvciBmb3IgdGV4dC1tb2RlIG9yIHBhcml0eSB0cmFuc2ZlcnMsIHdlIHVzZSB0 aGUgcmVndWxhciBnZXRwa3QoKSBmdW5jdGlvbi4KKyAgQ2FsbCBqdXN0IGxpa2UgZ2V0cGt0KCkg YnV0IHRlc3QgZmlyc3QgZm9yIHRyYW5zZmVyIG1vZGUgYW5kIHBhcml0eS4gIE5PVEU6CisgIFRo aXMgcm91dGluZSBpcyBvbmx5IHRvIGJlIGNhbGxlZCB3aGVuIHNlbmRpbmcgYSByZWFsIGZpbGUg LS0gbm90IGZvcgorICBmaWxlbmFtZXMsIHNlcnZlciByZXNwb25zZXMsIGV0YywgYmVjYXVzZSBp dCBvbmx5IHJlYWRzIGZyb20gdGhlIGlucHV0IGZpbGUuCisgIFNlZSBnZXRwa3QoKSBmb3IgbW9y ZSBkZXRhaWxlZCBjb21tZW50YXJ5LgorKi8KK3N0YXRpYyBpbnQKK2JnZXRwa3QoYnVmbWF4KSBp bnQgYnVmbWF4OyB7CisgICAgcmVnaXN0ZXIgQ0hBUiBydCA9IHQsIHJuZXh0OworICAgIHJlZ2lz dGVyIENIQVIgKmRwLCAqb2RwLCAqcDEsICpwMjsKKyAgICByZWdpc3RlciBpbnQgeCA9IDAsIGE3 OworCisgICAgQ0hBUiB4eHJjLCB4eGNxOwkJCS8qIFBpZWNlcyBvZiBwcmVmaXhlZCBzZXF1ZW5j ZSAqLworCisgICAgbG9uZyB6OwkJCQkvKiBBIGxvbmcgd29ya2VyIChmb3IgQ1JDKSAqLworCisg ICAgaWYgKCFiaW5hcnkgfHwgcGFyaXR5IHx8IG1lbXN0cikJLyogSlVTVCBJTiBDQVNFIGNhbGxl ciBkaWRuJ3QgdGVzdCAqLworICAgICAgcmV0dXJuKGdldHBrdChidWZtYXgsIWJpbmFyeSkpOwor CisgICAgaWYgKCFkYXRhKSB7CisJZGVidWcoRjEwMCwiU0VSSU9VUyBFUlJPUjogYmdldHBrdCBk YXRhID09IE5VTEwiLCIiLDApOworCXJldHVybigtMSk7CisgICAgfQorICAgIGRwID0gZGF0YTsJ CQkJLyogUG9pbnQgdG8gcGFja2V0IGRhdGEgYnVmZmVyICovCisgICAgc2l6ZSA9IDA7CQkJCS8q IEFuZCBpbml0aWFsaXplIGl0cyBzaXplICovCisgICAgYnVmbWF4ID0gbWF4ZGF0YSgpOwkJCS8q IEdldCBtYXhpbXVtIGRhdGEgbGVuZ3RoICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJs b2cpCisgICAgICBkZWJ1ZyhGMTAxLCJiZ2V0cGt0IGJ1Zm1heCIsIiIsYnVmbWF4KTsKKyNlbmRp ZiAvKiBERUJVRyAqLworCisgICAgaWYgKGZpcnN0ID09IDEpIHsJCQkvKiBJZiBmaXJzdCBjaGFy YWN0ZXIgb2YgdGhpcyBmaWxlLi4gKi8KKwlmZmMgPSAoQ0tfT0ZGX1QpMDsJCS8qIHJlc2V0IGZp bGUgY2hhcmFjdGVyIGNvdW50ZXIgKi8KKyNpZmRlZiBDT01NRU5UCisvKiBNb3ZlZCB0byBiZWxv dyAqLworCWZpcnN0ID0gMDsJCQkvKiBOZXh0IGNoYXJhY3RlciB3b24ndCBiZSBmaXJzdCAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKwkqbGVmdG92ZXIgPSAnXDAnOwkJLyogRGlzY2FyZCBhbnkg aW50ZXJydXB0ZWQgbGVmdG92ZXJzICovCisJbmxlZnQgPSAwOworCisJLyogR2V0IGZpcnN0IGNo YXJhY3RlciBvZiBmaWxlIGludG8gcnQsIHdhdGNoaW5nIG91dCBmb3IgbnVsbCBmaWxlICovCisK KyNpZmRlZiBDQUxJQlJBVEUKKwlpZiAoY2FsaWJyYXRlKSB7CisjaWZkZWYgTk9SQU5ET00KKwkg ICAgcnQgPSAxNzsKKyNlbHNlCisJICAgIHJ0ID0gY2FsX2FbcmFuZCgpICYgMHhmZl07CisjZW5k aWYgLyogTk9SQU5ET00gKi8KKwkgICAgZmlyc3QgPSAwOworCX0gZWxzZQorI2VuZGlmIC8qIENB TElCUkFURSAqLworCisJaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSB7CS8qIEVPRiBvciBlcnJv ciAqLworCSAgICBpZiAoeCA9PSAtMykgewkJLyogVGltZW91dC4gKi8KKwkJc2l6ZSA9IChkcCAt IGRhdGEpOworCQlkZWJ1ZyhGMTAxLCJiZ2V0cGt0IHRpbWVvdXQgc2l6ZSIsIiIsc2l6ZSk7CisJ CXJldHVybigoc2l6ZSA9PSAwKSA/IHggOiBzaXplKTsKKwkgICAgfQorCSAgICBmaXJzdCA9IC0x OworCSAgICBzaXplID0gMDsKKwkgICAgaWYgKHggPT0gLTIpIHsJCS8qIEVycm9yICovCisJCWRl YnVnKEYxMDAsImJnZXRwa3Q6IGlucHV0IGVycm9yIiwiIiwwKTsKKwkJY3hzZWVuID0gMTsJCS8q IEludGVycnVwdCB0aGUgZmlsZSB0cmFuc2ZlciAqLworCSAgICB9IGVsc2UgeworCQlkZWJ1ZyhG MTAwLCJiZ2V0cGt0IGVtcHR5IGZpbGUiLCIiLDApOworCSAgICB9CisJICAgIHJldHVybigwKTsK Kwl9CisJZmlyc3QgPSAwOwkJCS8qIE5leHQgY2hhciB3aWxsIG5vdCBiZSB0aGUgZmlyc3QgKi8K KwlmZmMrKzsJCQkJLyogQ291bnQgYSBmaWxlIGNoYXJhY3RlciAqLworCXJ0ID0gKENIQVIpIHg7 CQkJLyogQ29udmVydCBpbnQgdG8gY2hhciAqLworCWlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VO RCkpIHsJLyogQWNjdW11bGF0ZSBmaWxlIGNyYyAqLworCSAgICB6ID0gY3JjMTYgXiAobG9uZyly dDsKKwkgICAgY3JjMTYgPSAoY3JjMTYgPj4gOCkgXgorCSAgICAgIChjcmN0YVsoeiAmIDB4RjAp ID4+IDRdIF4gY3JjdGJbeiAmIDB4MEZdKTsKKwl9CisJcnQgJj0gZm1hc2s7CQkJLyogQXBwbHkg U0VUIEZJTEUgQllURVNJWkUgbWFzayAqLworCisgICAgfSBlbHNlIGlmIChmaXJzdCA9PSAtMSAm JiBubGVmdCA9PSAwKSB7IC8qIEVPRiBmcm9tIGxhc3QgdGltZSAqLworCisgICAgICAgIHJldHVy bihzaXplID0gMCk7CisgICAgfQorLyoKKyAgSGVyZSB3ZSBoYW5kbGUgY2hhcmFjdGVycyB0aGF0 IHdlcmUgZW5jb2RlZCBmb3IgdGhlIGxhc3QgcGFja2V0IGJ1dAorICBkaWQgbm90IGZpdCwgYW5k IHNvIHdlcmUgc2F2ZWQgaW4gdGhlICJsZWZ0b3ZlciIgYXJyYXkuCisqLworICAgIGlmIChubGVm dCkgeworCWZvciAocDEgPSBsZWZ0b3ZlcjsgbmxlZnQgPiAwOyBubGVmdC0tKSAvKiBDb3B5IGxl ZnRvdmVycyAqLworCSAgKmRwKysgPSAqcDErKzsKKwkqbGVmdG92ZXIgPSAnXDAnOwkJLyogRGVs ZXRlIGxlZnRvdmVycyAqLworCW5sZWZ0ID0gMDsKKyAgICB9CisgICAgaWYgKGZpcnN0ID09IC0x KQkJCS8qIEhhbmRsZSBFT0YgKi8KKyAgICAgIHJldHVybihzaXplID0gKGRwIC0gZGF0YSkpOwor CisvKiBOb3cgZmlsbCB1cCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0LiAqLworCisgICAgcnB0ID0g MDsJCQkJLyogSW5pdGlhbGl6ZSBjaGFyYWN0ZXIgcmVwZWF0IGNvdW50ICovCisKKyAgICB3aGls ZSAoZmlyc3QgPiAtMSkgewkJLyogVW50aWwgRU9GLi4uICovCisjaWZkZWYgQ0FMSUJSQVRFCisJ aWYgKGNhbGlicmF0ZSkgewkJLyogV2UgZ2VuZXJhdGUgb3VyIG93biAiZmlsZSIgKi8KKwkgICAg aWYgKGZmYyA+PSBjYWxpYnJhdGUpIHsJLyogRU9GICovCisJCWZpcnN0ID0gLTE7CisJCWZmYy0t OworCSAgICB9IGVsc2UgewkJCS8qIEdlbmVyYXRlIG5leHQgY2hhcmFjdGVyICovCisJCWlmIChj YWxfaiA+IENBTF9NICogZmZjKQorCQkgIGNhbF9qID0gY2FsX2FbZmZjICYgMHhmZl07CisJCXgg PSAodW5zaWduZWQpY2FsX2FbKGNhbF9qICYgMHhmZildOworCQlpZiAoeCA9PSBydCkgeCBePSAy OworCSAgICB9CisJICAgIGZmYysrOworCSAgICBjYWxfaiArPSAodW5zaWduZWQgaW50KShmZmMg KyBDQUxfTyk7CisJfSBlbHNlCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisJaWYgKCh4ID0gem1p bmNoYXIoKSkgPCAwKSB7CS8qIENoZWNrIGZvciBFT0YgKi8KKwkgICAgaWYgKHggPT0gLTMpIHsJ CS8qIFRpbWVvdXQuICovCisJCXQgPSBydDsKKwkJc2l6ZSA9IChkcC1kYXRhKTsKKwkJZGVidWco RjEwMSwiYmdldHBrdCB0aW1lb3V0IHNpemUiLCIiLHNpemUpOworCQlyZXR1cm4oKHNpemUgPT0g MCkgPyB4IDogc2l6ZSk7CisJICAgIH0KKwkgICAgZmlyc3QgPSAtMTsJCQkvKiBGbGFnIGVvZiBm b3IgbmV4dCB0aW1lLiAqLworCSAgICBpZiAoeCA9PSAtMikgY3hzZWVuID0gMTsJLyogSWYgZXJy b3IsIGNhbmNlbCB0aGlzIGZpbGUuICovCisJfSBlbHNlIHsKKwkgICAgZmZjKys7CQkJLyogQ291 bnQgdGhlIGNoYXJhY3RlciAqLworCSAgICBpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKSB7 IC8qIEFjY3VtdWxhdGUgZmlsZSBjcmMgKi8KKwkJeiA9IGNyYzE2IF4gKGxvbmcpKChDSEFSKXgg JiAweGZmKTsKKwkJY3JjMTYgPSAoY3JjMTYgPj4gOCkgXgorCQkgIChjcmN0YVsoeiAmIDB4RjAp ID4+IDRdIF4gY3JjdGJbeiAmIDB4MEZdKTsKKwkgICAgfQorCX0KKwlybmV4dCA9IChDSEFSKSAo eCAmIGZtYXNrKTsJLyogQXBwbHkgZmlsZSBtYXNrICovCisvKgorICBBdCB0aGlzIHBvaW50LCB0 aGUgY2hhcmFjdGVyIHdlIGp1c3QgcmVhZCBpcyBpbiBybmV4dCwKKyAgYW5kIHRoZSBjaGFyYWN0 ZXIgd2UgYXJlIGFib3V0IHRvIGVuY29kZSBpbnRvIHRoZSBwYWNrZXQgaXMgaW4gcnQuCisqLwor CW9kcCA9IGRwOwkJCS8qIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0ZWQuICovCisJeHhyYyA9IHh4 Y3EgPSBOVUw7CQkvKiBDbGVhciB0aGVzZS4gKi8KKy8qCisgIE5vdyBlbmNvZGUgdGhlIGNoYXJh Y3RlciBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMgdGhhdCBhcmUgaW4gZWZmZWN0OgorICAgIGN0 bHBbXTogd2hldGhlciB0aGlzIGNvbnRyb2wgY2hhcmFjdGVyIG5lZWRzIHByZWZpeGluZy4KKyAg ICBycHRmbGc6IHJlcGVhdCBjb3VudHMgZW5hYmxlZC4KKyAgICBPdGhlciBvcHRpb25zIGRvbid0 IGFwcGx5IGluIHRoaXMgcm91dGluZS4KKyovCisJaWYgKHJwdGZsZyAmJiAocnQgPT0gcm5leHQp ICYmIChmaXJzdCA9PSAwKSkgeyAvKiBHb3QgYSBydW4uLi4gKi8KKwkgICAgaWYgKCsrcnB0IDwg OTQpIHsJCS8qIEJlbG93IG1heCwganVzdCBjb3VudCAqLworCQljb250aW51ZTsJCS8qIGdvIGJh Y2sgYW5kIGdldCBhbm90aGVyICovCisJICAgIH0gZWxzZSBpZiAocnB0ID09IDk0KSB7CS8qIFJl YWNoZWQgbWF4LCBtdXN0IGR1bXAgKi8KKwkJeHhyYyA9IChDSEFSKSB0b2NoYXIocnB0KTsgLyog UHV0IHRoZSByZXBlYXQgY291bnQgaGVyZSAqLworCQlycHRuICs9IHJwdDsJCS8qIEFjY3VtdWxh dGUgaXQgZm9yIHN0YXRpc3RpY3MgKi8KKwkJcnB0ID0gMDsJCS8qIEFuZCByZXNldCBpdCAqLwor CSAgICB9CisJfSBlbHNlIGlmIChycHQgPiAwKSB7CQkvKiBFbmQgb2YgcnVuICovCisJICAgIHh4 cmMgPSAoQ0hBUil0b2NoYXIoKytycHQpOyAvKiBUaGUgY291bnQgKi8KKwkgICAgcnB0biArPSBy cHQ7CQkvKiBGb3Igc3RhdHMgKi8KKwkgICAgcnB0ID0gMDsJCQkvKiBSZXNldCByZXBlYXQgY291 bnQgKi8KKwl9CisJYTcgPSBydCAmIDAxNzc7CQkJLyogR2V0IGxvdyA3IGJpdHMgb2YgY2hhcmFj dGVyICovCisJaWYgKAorI2lmZGVmIENLX1NQRUVECisJICAgIGN0bHBbKHVuc2lnbmVkKShydCAm IDB4ZmYpXQkvKiBMb3Agb2ZmIGFueSAic2lnbiIgZXh0ZW5zaW9uICovCisjZWxzZQorCSAgICAo YTcgPCBTUCkgfHwgKGE3ID09IERFTCkKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCSAgICApIHsJ CQkJLyogRG8gY29udHJvbCBwcmVmaXhpbmcgaWYgbmVjZXNzYXJ5ICovCisJICAgIHh4Y3EgPSBt eWN0bHE7CQkvKiBUaGUgcHJlZml4ICovCisJICAgIGNjcCsrOwkJCS8qIENvdW50IGl0ICovCisJ ICAgIHJ0ID0gKENIQVIpIGN0bChydCk7CS8qIFVuY29udHJvbGxpZnkgdGhlIGNoYXJhY3RlciAq LworCX0KKyNpZmRlZiBDS19TUEVFRAorCWVsc2UgaWYgKChhNyA8IFNQKSB8fCAoYTcgPT0gREVM KSkgLyogQ291bnQgYW4gdW5wcmVmaXhlZCBvbmUgKi8KKwkgIGNjdSsrOworI2VuZGlmIC8qIENL X1NQRUVEICovCisKKwlpZiAoYTcgPT0gbXljdGxxKQkJLyogQWx3YXlzIHByZWZpeCB0aGUgY29u dHJvbCBwcmVmaXggKi8KKwkgIHh4Y3EgPSBteWN0bHE7CisKKwlpZiAoKHJwdGZsZykgJiYgKGE3 ID09IHJwdHEpKQkvKiBJZiBpdCdzIHRoZSByZXBlYXQgcHJlZml4LCAqLworCSAgeHhjcSA9IG15 Y3RscTsJCS8qIHByZWZpeCBpdCBpZiBkb2luZyByZXBlYXQgY291bnRzICovCisKKy8qIE5vdyBj b25zdHJ1Y3QgdGhlIHByZWZpeGVkIHNlcXVlbmNlICovCisKKwlpZiAoeHhyYykgewkJCS8qIFJl cGVhdCBjb3VudCAqLworI2lmZGVmIENPTU1FTlQKKwkgICAgaWYgKHh4cmMgPT0gKENIQVIpICci JyAmJiAheHhjcSkgeyAvKiAyIGluIGEgcm93ICYgbm90IHByZWZpeGVkICovCisJCSpkcCsrID0g cnQ7CQkvKiBTbyBqdXN0IGRvIHRoaXMgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBNb3JlIHRoYW4g dHdvIG9yIHByZWZpeGVkICovCisJCSpkcCsrID0gKENIQVIpIHJwdHE7ICpkcCsrID0geHhyYzsg LyogRW1pdCByZXBlYXQgc2VxdWVuY2UgKi8KKwkgICAgfQorI2Vsc2UJCQkJCS8qIENIRUNLIFRI SVMgKi8KKwkgICAgaWYgKHh4cmMgPT0gKENIQVIpICciJyAmJiAheHhjcSkgeyAvKiAyIGluIGEg cm93ICYgbm90IHByZWZpeGVkICovCisgICAgICAgICAgICAgICAgaWYgKGRwID09IGRhdGEpIHsK KyAgICAgICAgICAgICAgICAgICAgKmRwKysgPSBydDsJCS8qIFNvIGp1c3QgZG8gdGhpcyAqLwor ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKihkcC0xKSA9PSBydCkgeworICAgICAgICAgICAg ICAgICAgICAqZHArKyA9IChDSEFSKSBycHRxOworCQkgICAgKmRwKysgPSB4eHJjOwkvKiBFbWl0 IHJlcGVhdCBzZXF1ZW5jZSAqLworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgICpkcCsrID0gcnQ7CQkvKiBTbyBqdXN0IGRvIHRoaXMgKi8KKyAgICAgICAgICAg ICAgICB9CisJICAgIH0gZWxzZSB7CQkJLyogTW9yZSB0aGFuIHR3byBvciBwcmVmaXhlZCAqLwor CQkqZHArKyA9IChDSEFSKSBycHRxOworCQkqZHArKyA9IHh4cmM7CQkvKiBFbWl0IHJlcGVhdCBz ZXF1ZW5jZSAqLworCSAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0KKwlpZiAoeHhjcSkg eyAqZHArKyA9IG15Y3RscTsgfQkvKiBDb250cm9sIHByZWZpeCAqLworCSpkcCsrID0gcnQ7CQkJ LyogRmluYWxseSwgdGhlIGNoYXJhY3RlciBpdHNlbGYgKi8KKwlydCA9IHJuZXh0OwkJCS8qIE5l eHQgY2hhcmFjdGVyIGlzIG5vdyBjdXJyZW50LiAqLworCisvKiBEb25lIGVuY29kaW5nIHRoZSBj aGFyYWN0ZXIuICBOb3cgdGFrZSBjYXJlIG9mIHBhY2tldCBidWZmZXIgb3ZlcmZsb3cuICovCisK KwlzaXplID0gZHAgLSBkYXRhOwkJLyogSG93IG1hbnkgYnl0ZXMgd2UgcHV0IGluIGJ1ZmZlci4g Ki8KKwlpZiAoc2l6ZSA+PSBidWZtYXgpIHsJCS8qIElmIHRvbyBiaWcsIHNhdmUgc29tZSBmb3Ig bmV4dC4gKi8KKwkgICAgKmRwID0gJ1wwJzsJCQkvKiBNYXJrIHRoZSBlbmQuICovCisJICAgIGlm IChzaXplID4gYnVmbWF4KSB7CS8qIGlmIHBhY2tldCBpcyBvdmVyZnVsbCAqLworCQkvKiBDb3B5 IHRoZSBwYXJ0IHRoYXQgZG9lc24ndCBmaXQgaW50byB0aGUgbGVmdG92ZXIgYnVmZmVyLCAqLwor CQkvKiB0YWtpbmcgY2FyZSBub3QgdG8gc3BsaXQgYSBwcmVmaXhlZCBzZXF1ZW5jZS4gKi8KKwkJ aW50IGk7CisJCW5sZWZ0ID0gZHAgLSBvZHA7CisJCXAxID0gbGVmdG92ZXI7CisJCXAyID0gb2Rw OworCQlmb3IgKGkgPSAwOyBpIDwgbmxlZnQ7IGkrKykKKwkJICAqcDErKyA9ICpwMisrOworCQlz aXplID0gb2RwIC0gZGF0YTsJLyogUmV0dXJuIHRydW5jYXRlZCBwYWNrZXQuICovCisJCSpvZHAg PSAnXDAnOwkJLyogTWFyayB0aGUgbmV3IGVuZCAqLworCSAgICB9CisJICAgIHQgPSBydDsJCQkv KiBTYXZlIGZvciBuZXh0IHRpbWUgKi8KKwkgICAgcmV0dXJuKHNpemUpOworCX0KKyAgICB9CQkJ CQkvKiBPdGhlcndpc2UsIGtlZXAgZmlsbGluZy4gKi8KKyAgICBzaXplID0gZHAgLSBkYXRhOwkJ CS8qIEVuZCBvZiBmaWxlICovCisgICAgKmRwID0gJ1wwJzsJCQkJLyogTWFyayB0aGUgZW5kIG9m IHRoZSBkYXRhLiAqLworICAgIHJldHVybihzaXplKTsJCSAgICAgLyogUmV0dXJuIHBhcnRpYWxs eSBmaWxsZWQgbGFzdCBwYWNrZXQuICovCit9CisjZW5kaWYgLyogQ0tUVU5JTkcgKi8KKworVk9J RAorZG9maWxjcmMoYykgaW50IGM7IHsJCQkvKiBBY2N1bXVsYXRlIGZpbGUgY3JjICovCisgICAg bG9uZyB6OworICAgIHogPSBjcmMxNiBeIChsb25nKWM7CisgICAgY3JjMTYgPSAoY3JjMTYgPj4g OCkgXgorICAgICAgKGNyY3RhWyh6ICYgMHhGMCkgPj4gNF0gXiBjcmN0Ylt6ICYgMHgwRl0pOwor fQorCisvKiBGb3IgU0VORGluZyBmcm9tIGFuIGFycmF5Li4uICovCisKK2ludAorYWduYnl0ZSgp IHsJCQkJLyogR2V0IG5leHQgYnl0ZSBmcm9tIGFycmF5ICovCisjaWZuZGVmIE5PU1BMCisgICAg Y2hhciBjOworICAgIHN0YXRpYyBpbnQgc2F2ZSA9IDA7CQkvKiBGb3IgQ1JMRiAqLworICAgIHN0 YXRpYyBjaGFyICoqIGFwID0gTlVMTDsJCS8qIEFycmF5IHBvaW50ZXIgKi8KKyAgICBzdGF0aWMg Y2hhciAqIHAgPSBOVUxMOwkJLyogQ2hhcmFjdGVyIHBvaW50ZXIgKi8KKyAgICBzdGF0aWMgaW50 IGkgPSAwLCBuID0gMDsJCS8qIEFycmF5IGluZGV4IGFuZCBsaW1pdCAqLworICAgIGV4dGVybiBp bnQgYV9kaW1bXTsJCQkvKiBBcnJheSBkaW1lbnNpb24gKi8KKworICAgIGlmICghYXApIHsJCQkJ LyogRmlyc3QgdGltZSB0aHJ1ICovCisJYXAgPSBzbmRhcnJheTsJCQkvKiBTZXQgdXAgYXJyYXkg cG9pbnRlcnMgKi8KKwlpZiAoIWFwIHx8IChpID0gc25keGxvKSA+IGFfZGltW3NuZHhpbl0pIHsK KwkgICAgc25kYXJyYXkgPSBOVUxMOworCSAgICBhcCA9IE5VTEw7CisJICAgIHJldHVybigtMSk7 CisJfQorCXAgPSBhcFtpXTsJCQkvKiBQb2ludCB0byBmaXJzdCBlbGVtZW50IGluIHJhbmdlICov CisJbiA9IHNuZHhoaTsJCQkvKiBJbmRleCBvZiBsYXN0IGVsZW1lbnQgaW4gcmFuZ2UgKi8KKwlp ZiAoc25keGhpID4gYV9kaW1bc25keGluXSkJLyogQWRqdXN0IGlmIG5lY2Vzc2FyeSAqLworCSAg biA9IGFfZGltW3NuZHhpbl07CisgICAgfQorICAgIGlmIChzYXZlKSB7CQkJCS8qIElmIGFueXRo aW5nIHNhdmVkICovCisJYyA9IHNhdmU7CQkJLyogdW5zYXZlIGl0ICovCisJc2F2ZSA9IDA7CQkJ LyogYW5kIHJldHVybiBpdCAqLworCXJldHVybihjICYgMHhmZik7CisgICAgfQorICAgIGlmIChp ID4gbikgewkJCS8qIE5vIG1vcmUgZWxlbWVudHMgKi8KKwlzbmRhcnJheSA9IE5VTEw7CisJYXAg PSBOVUxMOworCXJldHVybigtMSk7CisgICAgfQorICAgIGlmICghcCkJCQkJLyogU291cmNlIHBv aW50ZXIgaXMgTlVMTCAqLworICAgICAgYyA9IE5VTDsJCQkJLyogdGhpcyBtZWFucyBhbiBlbXB0 eSBsaW5lICovCisgICAgZWxzZQkJCQkvKiBTb3VyY2UgcG9pbnRlciBub3QgTlVMTCAqLworICAg ICAgYyA9ICpwKys7CQkJCS8qIE5leHQgY2hhciAqLworICAgIGlmICghYykgewkJCQkvKiBDaGFy IGlzIGVtcHR5PyAqLworCWlmICghYmluYXJ5KSB7CQkJLyogVGV4dDogZW5kIG9mIGxpbmUuICov CisJICAgIGlmIChmZW9sKSB7CQkJLyogU3VwcGx5IE5MICovCisJCWMgPSBmZW9sOworCSAgICB9 IGVsc2UgewkJCS8qIG9yIENSTEYgKi8KKwkJc2F2ZSA9IExGOworCQljID0gQ1I7CisJICAgIH0K KwkgICAgcCA9IGFwWysraV07CisJICAgIHJldHVybihjICYgMHhmZik7CisJfQorCXdoaWxlIChp KysgPCBuKSB7CQkvKiBCaW5hcnkgLSBnZXQgbmV4dCBlbGVtZW50ICovCisJICAgIHAgPSBhcFtp XTsKKwkgICAgaWYgKCFwKQkJCS8qIEVtcHR5IGxpbmU/ICovCisJICAgICAgY29udGludWU7CQkJ LyogSWdub3JlIGl0IGFuZCBnZXQgYW5vdGhlciAqLworCSAgICBjID0gKnArKzsJCQkvKiBHZXQg bmV4dCBjaGFyICovCisJICAgIGlmICghYykJCQkvKiBFbXRweSBjaGFyPyAqLworCSAgICAgIGNv bnRpbnVlOwkJCS8qIElnbm9yZSBpdCBhbmQgZ2V0IGFub3RoZXIgKi8KKwkgICAgcmV0dXJuKGMg JiAweGZmKTsJCS8qIE5vdCBlbXB0eSAtIHJldHVybiBpdCAqLworCX0KKwlzbmRhcnJheSA9IE5V TEw7CisJYXAgPSBOVUxMOworCXJldHVybigtMSk7CQkJLyogRG9uZSAqLworICAgIH0KKyAgICBy ZXR1cm4oYyAmIDB4ZmYpOwkJCS8qIENoYXIgaXMgbm90IGVtcHR5ICovCisjZWxzZQorICAgIHNu ZGFycmF5ID0gTlVMTDsKKyAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIE5PU1BMICovCit9Cisj ZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9DU0VUUworc3RhdGljIENIQVIgeGxhYnVm WzMyXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Oworc3RhdGljIGludCB4bGFjb3VudCA9 IDA7CitzdGF0aWMgaW50IHhsYXB0ciA9IDA7CisvKiBzdGF0aWMgVVNIT1JUIGxhc3R1Y3MyID0g MDsgKi8KKworLyoKKyAgWCBHIE4gQiBZIFQgRSAtLSAgR2V0IG5leHQgdHJhbnNsYXRlZCBieXRl IGZyb20gdGhlIGlucHV0IGZpbGUuCisKKyAgUmV0dXJucyB0aGUgbmV4dCBieXRlIHRoYXQgaXMg dG8gYmUgcHV0IGludG8gdGhlIHBhY2tldCwgYWxyZWFkeSB0cmFuc2xhdGVkLgorICBUaGlzIGlz b2xhdGVzIGdldHBrdCgpIGZyb20gaGF2aW5nIHRvIGtub3cgYW55dGhpbmcgYWJvdXQgdHJhbnNs YXRpb24sCisgIHNpbmdsZS0gdnMgbXVsdGlieXRlIGNoYXJhY3RlciBzZXRzLCBvbmUtdG8tbWFu eSB2cyBtYW55LXRvLW9uZSwgZXRjLCBidXQgaXQKKyAgaGFzIHJhdGhlciBoaWdoIG92ZXJoZWFk LCBzbyBkb24ndCBjYWxsIGl0IHVubGVzcyB5b3Uga25vdyB0cmFuc2xhdGlvbiBpcworICBuZWVk ZWQgdG8gb3IgZnJvbSBVbmljb2RlLCBKYXBhbmVzZSwgb3Igb3RoZXIgbXVsdGlieXRlIGNoYXJh Y3RlciBzZXQuCisKKyAgQ2FsbCB3aXRoOgorICAgIGZjczogIEZpbGUgY2hhcmFjdGVyIHNldCAo c291cmNlLCBmaWxlIHdlIGFyZSByZWFkaW5nIGZyb20pCisgICAgdGNzOiAgVGFyZ2V0IGNoYXJh Y3RlciBzZXQgKHVzZSBhbiBGQ194eHggY29kZSwgbm90IGEgVENfeHh4IGNvZGUpCisgIFJldHVy bnM6CisgICAgPj0gMDogQSB0cmFuc2xhdGVkIGJ5dGUgc3VpdGFibGUgZm9yIHdyaXRpbmcuCisg ICAgPCAgMDogRmF0YWwgZXJyb3IgKHN1Y2ggYXMgRU9GIG9uIGlucHV0IHNvdXJjZSkuCisgIEFz IG9mIFNhdCBTZXAgIDcgMTg6Mzc6NDEgMjAwMjogIAorICAgIFdoZW4gdGhlIG91dHB1dCBjaGFy YWN0ZXItc2V0IGlzIFVDUy0yLCBieXRlcyBhcmUgQUxXQVlTIHJldHVybmVkIGluCisgICAgYmln LWVuZGlhbiBvcmRlciAocHJldmlvdXNseSB0aGV5IGNvdWxkIGFsc28gYmUgcmV0dXJuZWQgaW4g TEUgb3JkZXIKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHdoaWNoIHdhcyBqdXN0IHdh eSB0b28gY29uZnVzaW5nKS4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworeGduYnl0ZShpbnQg dGNzLCBpbnQgZmNzLCBpbnQgKCpmbikodm9pZCkpCisjZWxzZSAvKiBDS19BTlNJQyAqLworeGdu Ynl0ZSh0Y3MsZmNzLGZuKSBpbnQgdGNzLCBmY3MsICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KKy8qIHhnbmJ5dGUgKi8geworICAgIF9QUk9UT1RZUCggaW50ICgqeHgpLCAoVVNIT1JU KSApID0gTlVMTDsKKyAgICBpbnQgaGF2ZXVjID0gMDsJCQkvKiBGbGFnIGZvciBoYXZlIFVuaWNv ZGUgY2hhcmFjdGVyICovCisjaWZkZWYgS0FOSkkKKyAgICBpbnQgaGF2ZXNqID0gMDsJCQkvKiBI YXZlIFNoaWZ0LUpJUyBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgaGF2ZWV1ID0gMDsJCQkvKiBIYXZl IEVVQy1KUCBjaGFyYWN0ZXIgKi8KKyNlbmRpZiAvKiBLQU5KSSAqLworICAgIGludCByYyA9IC0x LCB4ID0gMCwgZmxhZyA9IDA7CisgICAgaW50IHV0ZmVycm9yID0gMDsKKyAgICBpbnQgZW9sZmxh ZyA9IDA7CisgICAgdW5zaWduZWQgaW50IHhjLCB0aGlzY2hhcjsKKyAgICBzdGF0aWMgaW50IHN3 YXBwaW5nID0gMDsKKyAgICBDSEFSIHJ0OworICAgIC8qIFVTSE9SVCBjaDsgKi8KKyNpZmRlZiBV TklDT0RFCisgICAgdW5pb24gY2tfc2hvcnQgdWM7CisjZW5kaWYgLyogVU5JQ09ERSAqLworI2lm ZGVmIEtBTkpJCisgICAgdW5pb24gY2tfc2hvcnQgc2osIGV1OwkJLyogU2hpZnQtSklTIGNoYXJh Y3RlciAqLworI2VuZGlmIC8qIEtBTkpJICovCisKKyNpZmRlZiBLQU5KSQorICAgIHNqLnhfc2hv cnQgPSAwOworI2VuZGlmIC8qIEtBTkpJICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJs b2cgJiYgIWZmYykgeworCWRlYnVnKEYxMDEsInhnbmJ5dGUgaW5pdGlhbCBzd2FwIiwiIixzd2Fw cGluZyk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAoeGxhY291bnQtLSA+ IDApIHsJCS8qIFdlIGFscmVhZHkgaGF2ZSBzb21lICovCisJeCA9IHhsYWJ1Zlt4bGFwdHIrK107 CisJZGVidWcoRjAwMSwieGduYnl0ZSBmcm9tIGJ1ZiIsIiIseCk7CisJcmV0dXJuKHgpOworICAg IH0KKyAgICBpZiAoeGxhdHlwZSAhPSBYTEFfTk9ORSkgewkJLyogTm90IG5vdCB0cmFuc2xhdGlu Zy4uLiAqLworCWhhdmV1YyA9IDA7CisjaWZkZWYgVU5JQ09ERQorCWlmIChmY3MgPT0gRkNfVUNT MikgewkJLyogVUNTLTI6IFJlYWQgdHdvIGJ5dGVzICovCisJICAgIGlmICghZmZjKQkJCS8qIEJl Z2lubmluZyBvZiBmaWxlPyAqLworCSAgICAgIHN3YXBwaW5nID0gMDsJCS8qIFJlc2V0IGJ5dGUt c3dhcHBpbmcgZmxhZyAqLworCSAgICB1Yy54X3Nob3J0ID0gMDsKKwkgIGJvbXNraXA6CisJICAg IHggPSBmbiA/ICgqZm4pKCkgOiB6bWluY2hhcigpOyAvKiBHZXQgZmlyc3QgYnl0ZSAqLworCSAg ICBkZWJ1ZyhGMDAxLCJ6bWluY2hhciBzd2FwcGluZyIsIiIsc3dhcHBpbmcpOworCSAgICBkZWJ1 ZyhGMDAxLCJ6bWluY2hhciBDMCIsIiIseCk7CisJICAgIGZsYWcgPSAxOwkJCS8qIFJlbWVtYmVy IHdlIGNhbGxlZCB6bWluY2hhcigpICovCisJICAgIGlmICh4ID4gLTEpIHsJCS8qIERpZG4ndCBm YWlsICovCisJCWZmYysrOwkJCS8qIENvdW50IGEgZmlsZSBieXRlICovCisJCXVjLnhfY2hhcltz d2FwcGluZ10gPSB4ICYgMHhmZjsKKyNpZm5kZWYgTk9YRkVSCisJCWlmIChkb2NyYyAmJiAod2hh dCAmIFdfU0VORCkpCisJCSAgZG9maWxjcmMoeCk7CisjZW5kaWYgLyogTk9YRkVSICovCisJCXgg PSBmbiA/ICgqZm4pKCkgOiB6bWluY2hhcigpOyAvKiBHZXQgc2Vjb25kIGJ5dGUgKi8KKwkJaWYg KHggPiAtMSkgewkJLyogSWYgZGlkbid0IGZhaWwgKi8KKwkJICAgIGRlYnVnKEYwMDEsInptaW5j aGFyIEMxIiwiIix4KTsKKwkJICAgIGZmYysrOwkJLyogY291bnQgYW5vdGhlciBmaWxlIGJ5dGUg Ki8KKwkJICAgIHVjLnhfY2hhclsxLXN3YXBwaW5nXSA9IHggJiAweGZmOworCQkgICAgaGF2ZXVj ID0gMTsJCS8qIEFuZCByZW1lbWJlciB3ZSBoYXZlIFVuaWNvZGUgKi8KKyNpZm5kZWYgTk9YRkVS CisJCSAgICBpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKQorCQkgICAgICBkb2ZpbGNyYyh4 KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwkJICAgIGlmIChmZmMgPT0gKENLX09GRl9UKTIpIHsg LyogU2Vjb25kIGNoYXIgb2YgZmlsZSAqLworCQkJZGVidWcoRjAwMSwieGduYnl0ZSAxc3QgVUNT MiIsIiIsdWMueF9zaG9ydCk7CisJCQlkZWJ1ZyhGMTExLCJ4Z25ieXRlIGZpbGVvcmRlciIsIkEi LGZpbGVvcmRlcik7CisJCQlpZiAoZmlsZW9yZGVyIDwgMCkgLyogQnl0ZSBvcmRlciBvZiB0aGlz IGZpbGUgKi8KKwkJCSAgZmlsZW9yZGVyID0gdWNzb3JkZXI7CS8qIERlZmF1bHQgaXMgdWNzb3Jk ZXIgKi8KKwkJCWlmIChmaWxlb3JkZXIgPiAxKQorCQkJICBmaWxlb3JkZXIgPSAxOworCQkJZGVi dWcoRjExMSwieGduYnl0ZSBmaWxlb3JkZXIiLCJCIixmaWxlb3JkZXIpOworCQkJaWYgKHVjLnhf c2hvcnQgPT0gKFVTSE9SVCkweGZlZmYpIHsKKwkJCSAgICBzd2FwcGluZyA9IDA7CisJCQkgICAg ZGVidWcoRjEwMSwKKwkJCQkgICJ4Z25ieXRlIFVDUzIgZ29vZGJvbSBzd2FwIiwiIixzd2FwcGlu Zyk7CisJCQkgICAgZmlsZW9yZGVyID0gYnl0ZW9yZGVyOyAvKiBOb3RlOiBOT1QgMCAqLworCQkJ ICAgIGdvdG8gYm9tc2tpcDsKKwkJCX0gZWxzZSBpZiAodWMueF9zaG9ydCA9PSAoVVNIT1JUKTB4 ZmZmZSkgeworCQkJICAgIHN3YXBwaW5nID0gMTsKKwkJCSAgICBkZWJ1ZyhGMTAxLAorCQkJCSAg InhnbmJ5dGUgVUNTMiBiYWRib20gc3dhcCIsIiIsc3dhcHBpbmcpOworCQkJICAgIGZpbGVvcmRl ciA9ICgxIC0gYnl0ZW9yZGVyKTsgLyogTm90ZTogTk9UIDEgKi8KKwkJCSAgICBnb3RvIGJvbXNr aXA7CisJCQl9IGVsc2UgaWYgKChieXRlb3JkZXIgJiYgIWZpbGVvcmRlcikgfHwgLyogTm8gQk9N ICovCisJCQkJICAgKCFieXRlb3JkZXIgJiYgZmlsZW9yZGVyID4gMCkpIHsKKwkJCSAgICAvKiBm aWxlb3JkZXIgbWlnaHQgaGF2ZSBiZWVuIHNldCBieSBzY2FuZmlsZSgpICovCisJCQkgICAgQ0hB UiBjOworCQkJICAgIGMgPSB1Yy54X2NoYXJbMF07CisJCQkgICAgdWMueF9jaGFyWzBdID0gdWMu eF9jaGFyWzFdOworCQkJICAgIHVjLnhfY2hhclsxXSA9IGM7CisJCQkgICAgc3dhcHBpbmcgPSAx OworCQkJICAgIGRlYnVnKEYxMTEsInhnbmJ5dGUgVUNTMiBub0JPTSBzd2FwIiwiQSIsc3dhcHBp bmcpOworCQkJfSBlbHNlIHsKKwkJCSAgICBzd2FwcGluZyA9IDA7CisJCQkgICAgZGVidWcoRjEx MSwieGduYnl0ZSBVQ1MyIG5vQk9NIHN3YXAiLCJCIixzd2FwcGluZyk7CisJCQl9CisJCQlkZWJ1 ZyhGMTExLCJ4Z25ieXRlIGZpbGVvcmRlciIsIkMiLGZpbGVvcmRlcik7CisJCSAgICB9CisJCX0g ZWxzZQorCQkgIHJldHVybih4KTsKKwkgICAgfSBlbHNlCisJICAgICAgcmV0dXJuKHgpOworCSAg ICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlIFVDUzIiLCIiLHVjLnhfc2hvcnQpOworCisJfSBlbHNlIGlm IChmY3MgPT0gRkNfVVRGOCkgewkvKiBGaWxlIGlzIFVURi04ICovCisJICAgIENIQVIgY2ggPSAw OwkJLyogRGF0YSB0eXBlcyBuZWVkZWQgZm9yIEFQSS4uLiAqLworCSAgICBVU0hPUlQgKiB1cyA9 IE5VTEw7CisJICAgIHVjLnhfc2hvcnQgPSAwOworCSAgICBmbGFnID0gMTsJCQkvKiBXZSAod2ls bCkgaGF2ZSBjYWxsZWQgem1pbmNoYXIoKSAqLworCSAgICAvKiBSZWFkIHNvdXJjZSBieXRlcyAq LworCSAgICB3aGlsZSAoKHggPSBmbiA/ICgqZm4pKCkgOiB6bWluY2hhcigpKSA+IC0xKSB7CisJ CWZmYysrOwkJCS8qIEdvdCBhIGJ5dGUgLSBjb3VudCBpdCAqLworI2lmbmRlZiBOT1hGRVIKKwkJ aWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkKKwkJICBkb2ZpbGNyYyh4KTsKKyNlbmRpZiAv KiBOT1hGRVIgKi8KKwkJY2ggPSB4OworCQlyYyA9IHV0ZjhfdG9fdWNzMihjaCwmdXMpOyAvKiBD b252ZXJ0IHRvIFVDUy0yICovCisJCWlmIChyYyA9PSAwKSB7CQkvKiBEb25lICovCisJCSAgICB1 Yy54X3Nob3J0ID0gKnVzOworCQkgICAgaGF2ZXVjID0gMTsKKwkJICAgIGJyZWFrOworCQl9IGVs c2UgaWYgKHJjIDwgMCkgewkvKiBFcnJvciAqLworCQkgICAgdXRmZXJyb3IgPSAxOworCQkgICAg ZGVidWcoRjEwMSwieGduYnl0ZSBVVEYtOCBpbnB1dCBlcnJvciIsIiIscmMpOworCQkgICAgaGF2 ZXVjID0gMTsKKwkJICAgIHVjLnhfc2hvcnQgPSAqdXM7CisJCSAgICBicmVhazsKKwkJfQorCSAg ICB9CisJICAgIGlmICh4IDwgMCkKKwkgICAgICByZXR1cm4oeCk7CisJICAgIGRlYnVnKEYwMDEs InhnbmJ5dGUgVVRGOC0+VUNTMiIsIiIsdWMueF9zaG9ydCk7CisJfQorI2VuZGlmIC8qIFVOSUNP REUgKi8KKworI2lmZGVmIEtBTkpJCisjaWZkZWYgVU5JQ09ERQorCWVsc2UKKyNlbmRpZiAvKiBV TklDT0RFICovCisJICBpZiAoZmNzaW5mb1tmY3NdLmFscGhhYmV0ID09IEFMX0pBUEFOKSB7IC8q IEphcGFuZXNlIHNvdXJjZSBmaWxlICovCisJICAgIGludCBjNywgeCwgeTsKKwkgICAgaWYgKGZj cyA9PSBGQ19KSVM3KSB7CS8qIElmIGZpbGUgY2hhcnNldCBpcyBKSVMtNyAqLworCQlpZiAoIWZm YykJCS8qIElmIGZpcnN0IGJ5dGUgb2YgZmlsZSAqLworCQkgIGo3aW5pdCgpOwkJLyogSW5pdGlh bGl6ZSBKSVMtNyBwYXJzZXIgKi8KKwkJeCA9IGdldGo3KCk7CQkvKiBHZXQgYSBKSVMtNyBieXRl ICovCisJICAgIH0gZWxzZQkJCS8qIE90aGVyd2lzZSAqLworCSAgICAgIHggPSBmbiA/ICgqZm4p KCkgOiB6bWluY2hhcigpOyAvKiBKdXN0IGdldCBieXRlICovCisJICAgIGlmICh4IDwgMCkgewkJ LyogUHJvcG9nYXRlIEVPRiBvciBlcnJvciAqLworCQlkZWJ1ZyhGMTAwLCJYR05CWVRFIEVPRiIs IiIsMCk7CisJCXJldHVybih4KTsKKwkgICAgfQorCSAgICBkZWJ1ZyhGMDAxLCJYR05CWVRFIHgi LCIiLHgpOworCSAgICBmZmMrKzsJCQkvKiBDb3VudCAqLworI2lmbmRlZiBOT1hGRVIKKwkgICAg aWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkgZG9maWxjcmMoeCk7IC8qIERvIENSQyAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCSAgICBzd2l0Y2ggKGZjcykgewkJLyogV2hhdCBuZXh0IGRl cGVuZHMgb24gY2hhcnNldCAqLworCSAgICAgIGNhc2UgRkNfU0hKSVM6CQkvKiBTaGlmdC1KSVMg Ki8KKwkJaWYgKCh4IDw9IDB4ODApIHx8CS8qIEFueSA3LWJpdCBjaGFyLi4uICovCisJCSAgICAo eCA+PSAweGEwICYmIHggPD0gMHhkZikpIHsgLyogb3IgaGFsZndpZHRoIEthdGFrYW5hICovCisJ CSAgICBzai54X3Nob3J0ID0gKFVTSE9SVCkgeDsgICAgLyogd2UgcmVhZCBvbmUgYnl0ZS4gKi8K KwkJfSBlbHNlIHsJCS8qIEFueXRoaW5nIGVsc2UgKi8KKwkJICAgIGlmICgoeSA9IGZuID8gKCpm bikoKSA6IHptaW5jaGFyKCkpIDwgMCkgLyogZ2V0IGFub3RoZXIgKi8KKwkJICAgICAgcmV0dXJu KHkpOworI2lmbmRlZiBOT1hGRVIKKwkJICAgIGlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkp IGRvZmlsY3JjKHkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCQkgICAgZmZjKys7CisJCSAgICBz ai54X2NoYXJbYnl0ZW9yZGVyXSA9IChDSEFSKSB4OworCQkgICAgc2oueF9jaGFyWzEtYnl0ZW9y ZGVyXSA9IChDSEFSKSB5OworCQl9CisJCWJyZWFrOworCisJICAgICAgY2FzZSBGQ19KSVM3OgkJ LyogSklTLTcgKi8KKwkgICAgICBjYXNlIEZDX0pERUM6CQkvKiBERUMgS2FuamkgKi8KKwkgICAg ICBjYXNlIEZDX0pFVUM6CQkvKiBFVUMtSlAgKi8KKwkJaWYgKCh4ICYgMHg4MCkgPT0gMCkgewkv KiBDb252ZXJ0IHRvIFNoaWZ0LUpJUyAqLworCQkgICAgc2oueF9zaG9ydCA9IChVU0hPUlQpIHg7 IC8qIEMwIG9yIEcwOiBvbmUgYnl0ZSAqLworCQkgICAgZXUueF9zaG9ydCA9IChVU0hPUlQpIHg7 CisJCSAgICBoYXZlZXUgPSAxOworCQl9IGVsc2UgeworCQkgICAgYzcgPSB4ICYgMHg3ZjsKKwkJ ICAgIGlmIChjNyA+IDB4MjAgJiYgYzcgPCAweDdmKSB7IC8qIEthbmppOiB0d28gYnl0ZXMgKi8K KwkJCWlmICgoeSA9IChmY3MgPT0gRkNfSkVVQykgPworCQkJICAgICAoZm4gPyAoKmZuKSgpIDog em1pbmNoYXIoKSkgOgorCQkJICAgICBnZXRqNygpCS8qIF5eXiAqLworCQkJICAgICApIDwgMCkK KwkJCSAgcmV0dXJuKHkpOworCQkJZmZjKys7CisjaWZuZGVmIE5PWEZFUgorCQkJaWYgKGRvY3Jj ICYmICh3aGF0ICYgV19TRU5EKSkgZG9maWxjcmMoeSk7CisjZW5kaWYgLyogTk9YRkVSICovCisJ CQlldS54X2NoYXJbYnl0ZW9yZGVyXSA9IChDSEFSKSB4OworCQkJZXUueF9jaGFyWzEtYnl0ZW9y ZGVyXSA9IChDSEFSKSB5OworCQkJc2oueF9zaG9ydCA9IGV1X3RvX3NqKGV1Lnhfc2hvcnQpOwor CQkJaGF2ZWV1ID0gMTsKKwkJICAgIH0gZWxzZSBpZiAoeCA9PSAweDhlKSB7IC8qIFNTMiBLYXRh a2FuYSBwcmVmaXg6IDIgYnl0ZXMgKi8KKwkJCWlmICgoeSA9IChmY3MgPT0gRkNfSklTNykgPwor CQkJICAgICBnZXRqNygpIDoJLyogXl5eICovCisJCQkgICAgIChmbiA/ICgqZm4pKCkgOiB6bWlu Y2hhcigpKQorCQkJICAgICApIDwgMCkKKwkJCSAgcmV0dXJuKHkpOworCQkJZmZjKys7CisjaWZu ZGVmIE5PWEZFUgorCQkJaWYgKGRvY3JjICYmICh3aGF0ICYgV19TRU5EKSkgZG9maWxjcmMoeSk7 CisjZW5kaWYgLyogTk9YRkVSICovCisJCQlzai54X3Nob3J0ID0geSB8IDB4ODA7CisJCQlkZWJ1 ZyhGMDAxLCJYR05CWVRFIEtBTkEgU0oiLCIiLHNqLnhfc2hvcnQpOworCQkgICAgfSBlbHNlIHsK KwkJCS8qIFNvbWV0aGluZyB0aGF0IHRyYW5zbGF0ZXMgdG8gVStGRkZEICovCisJCQlzai54X3No b3J0ID0gVU5LU0pJUzsKKwkJICAgIH0KKwkJfQorCQlicmVhazsKKwkgICAgfQorCSAgICBoYXZl c2ogPSAxOwkJCS8qIEhhdmUgU2hpZnQtSklTICovCisjaWZkZWYgVU5JQ09ERQorCSAgICB1Yy54 X3Nob3J0ID0gc2pfdG9fdW4oc2oueF9zaG9ydCk7IC8qIFRyYW5zbGF0ZSB0byBVQ1MtMiAqLwor CSAgICBoYXZldWMgPSAxOwkJCS8qIEhhdmUgVW5pY29kZSAqLworI2VuZGlmIC8qIFVOSUNPREUg Ki8KKwkgICAgZmxhZyA9IDE7CQkJLyogSGF2ZSBhIGNoYXIgKi8KKwl9CisjZW5kaWYgLyogS0FO SkkgKi8KKyAgICB9CisgICAgaWYgKCFmbGFnKSB7CQkJLyogSWYgbm8gY2hhcmFjdGVyIHdhcyBy ZWFkIHlldC4uLiAqLworCWlmICgoeCA9IChmbiA/ICgqZm4pKCkgOiB6bWluY2hhcigpKSkgPiAt MSkJLyogcmVhZCBvbmUgbm93ICovCisJICBmZmMrKzsKKwlkZWJ1ZyhGMTAxLCJ4Z25ieXRlIHpt aW5jaGFyIDEiLCIiLHgpOworCWlmICh4IDwgMCkKKwkgIHJldHVybih4KTsKKwloYXZldWMgPSAw OworICAgIH0KKyNpZmRlZiBVTklDT0RFCisgICAgaWYgKGhhdmV1YykgeworCXRoaXNjaGFyID0g dWMueF9zaG9ydDsKKwkvKiBsYXN0dWNzMiA9IHVjLnhfc2hvcnQ7ICovCisgICAgfSBlbHNlCisj ZW5kaWYgLyogVU5JQ09ERSAqLworICAgICAgdGhpc2NoYXIgPSB4OworICAgIGRlYnVnKEYwMDEs InhnbmJ5dGUgdGhpc2NoYXIiLGhhdmV1YyA/ICJbVU5JQ09ERV0iIDogIltvdGhlcl0iLHRoaXNj aGFyKTsKKworI2lmZGVmIENLX0NUUkxaCQkJCS8qIFNFVCBFT0YgQ1RSTFogKi8KKyAgICBpZiAo ZW9mbWV0aG9kID09IFhZRU9GX1ogJiYgIWJpbmFyeSAmJiB0aGlzY2hhciA9PSAyNikgeworCWRl YnVnKEYxMDAsInhnbmJ5dGUgRU9GIG9uIEN0cmwtWiAxIiwiIiwwKTsKKwlyZXR1cm4oLTEpOwor ICAgIH0KKyNlbmRpZiAvKiBDS19DVFJMWiAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIGlmICgh aGF2ZXVjKQkJCS8qIElmIG5vdCBVbmljb2RlLi4uICovCisjZW5kaWYgLyogVU5JQ09ERSAqLwor ICAgICAgeCAmPSBmbWFzazsJCQkvKiBBcHBseSBTRVQgRklMRSBCWVRFU0laRSBtYXNrICovCisK KyAgICBzd2l0Y2ggKHhsYXR5cGUpIHsJCQkvKiBUcmFuc2xhdGlvbiB0eXBlLi4uICovCisjaWZk ZWYgVU5JQ09ERQorICAgICAgY2FzZSBYTEFfVU5JQ09ERTogewkJLyogVW5pY29kZSBpcyBpbnZv bHZlZCAqLworCSAgeGMgPSAwOworLyoKKyAgSGVyZSB3ZSBtdXN0IGNob29zZSB0aGUgYXBwcm9w cmlhdGUgdHJhbnNsYXRpb24gZnVuY3Rpb24uICBJZiB3ZSBhcmUgYmVpbmcKKyAgY2FsbGVkIGJ5 IGdldHBrdCgpIChpLmUuIHdoZW4gdHJhbnNmZXJyaW5nIGEgZmlsZSksIHdlIGFyZSB0cmFuc2xh dGluZyBmcm9tCisgIFVuaWNvZGUgdG8gdGhlIFRyYW5zZmVyIENoYXJhY3RlciBTZXQgYW5kIHRo ZXJlZm9yZSBtdXN0IHVzZSB0aGUgZnVuY3Rpb24KKyAgcG9pbnRlZCB0byBieSB4dXQuICBPdGhl cndpc2UsIGUuZy4gZHVyaW5nIFRSQU5TTEFURSwgQ09OTkVDVCwgVFJBTlNNSVQsIGV0YywKKyAg d2UgYXJlIHRyYW5zbGF0aW5nIGZyb20gVW5pY29kZSB0byB0aGUgRmlsZSBDaGFyYWN0ZXIgU2V0 IGFuZCBzbyBtdXN0IGNhbGwKKyAgdGhlIGZ1bmN0aW9uIHBvaW50ZWQgdG8gYnkgeHVmLiAgVGhl cmUgbWlnaHQgYmUgYSBjbGVhbmVyIHdheSB0byBzZXQgdGhpcworICB1cCBidXQgSSBkb24ndCB0 aGluayBzby4gIEZvciBleGFtcGxlLCBzZXR4bGF0eXBlKCkgbWlnaHQgaGF2ZSBiZWVuIGNhbGxl ZAorICB0b28gc29vbiBhbmQgc28gbWlnaHQgbm90IGhhdmUga25vd24gd2hldGhlciBpdCB3YXMg YSBmaWxlIHRyYW5zZmVyIG9yIGEKKyAgbG9jYWwgb3BlcmF0aW9uLgorKi8KKy8qCisgIChNYW55 IHllYXJzIGxhdGVyLi4uKSBJbiB0ZXN0aW5nIHRoaXMgY29kZSBJIG5vdGljZWQgdGhhdCBUUkFO U0xBVEUnaW5nCisgIFJ1c3NpYW4gdGV4dCBmcm9tIFVURi04IHRvIElTTyBMYXRpbi9DeXJpbGxp YyBwcm9kdWNlZCBhbGwgcXVlc3Rpb24gbWFya3MuCisgIFJlcmVhZGluZyB0aGUgcHJldmlvdXMg cGFyYWdyYXBoIGl0IHNlZW1zIHRvIG1lIHdlIGFyZSAoSSBhbSkgb3ZlcmxvYWRpbmcKKyAgdGhp cyBmdW5jdGlvbiB3aXRoIHJlc3BvbnNpYmlsaXRlcywgc2F0aXNmeWluZyB0aGUgbmVlZHMgb2Yg ZmlsZSB0cmFuc2ZlcgorICAobG9jYWwgZmlsZSBjaGFyc2V0IC0+IHRyYW5zZmVyIGNoYXJzZXQg Zm9yIG91dGJvdW5kIHBhY2tldCkgYW5kIGxvY2FsIGZpbGUKKyAgY29udmVyc2lvbi4gIEluIHRo ZSBjYXNlIG9mIFRSQU5TTEFURSwgd2UgY2FsbCAoeGduYnl0ZSgpLCB4cG5ieXRlKCkpIGluIGEK KyAgbG9vcCwgZXhwZWN0aW5nIHRoZSB4Z25ieXRlKCkgd2lsbCBmZWVkIFVDUzIgdG8geHBuYnl0 ZSgpLiAgQnV0IHRoZQorICBmb2xsb3dpbmcgY29kZSBkb2VzIHdoYXQgeHBuYnl0ZSgpIGlzIGdv aW5nIHRvIGRvLCByZXR1cm5pbmcgKGluIHRoaXMgY2FzZSkKKyAgYW4gSVNPIExhdGluL0N5cmls bGljIGJ5dGUgc3RyZWFtLCB3aGljaCB4cG5ieXRlKCkgYmVsaWV2ZXMgdG8gYmUgVUNTMiwgYW5k CisgIGNvbWVzIHVwIHdpdGggbm9uc2Vuc2UuICBOb3Qgd2FudGluZyB0byByaXAgdGhlIHdob2xl IHRoaW5nIGFwYXJ0IGFuZCBzdGFydAorICBvdmVyLCBJIG1hZGUgdGhlIGZvbGxvd2luZyBjaGFu Z2UgdGhhdCBzaG91bGQgZG8gbm8gaGFybSwgdXBvbiBvYnNlcnZpbmcKKyAgdGhhdCBpZiB0aGUg aW5wdXQgY2hhcmFjdGVyIHNldCBpcyBVVEYtOCBvciBVQ1MtMiwgdGhlbiB3aGVuIHdlIGdldCBo ZXJlIGl0CisgIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvIFVDUzIsIHNvIGlmIHdlIGFy ZSBub3QgdHJhbnNmZXJyaW5nIGEgZmlsZSwgd2UKKyAgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGlu ZyBlbHNlIGV4Y2VwdCBwdXQgdGhlIGJ5dGVzIGluIHRoZSByaWdodCBwbGFjZSB0byBiZQorICBy ZXR1cm5lZCwgd2hpY2ggaXMgZG9uZSBmdXJ0aGVyIGFsb25nLgorKi8KKyNpZmRlZiBDT01NRU5U CisJICAvKiBQcmV2aW91cyBjb2RlICovCisJICB4eCA9ICh3aGF0ICYgV19TRU5EKSA/IHh1dCA6 IHh1ZjsKKyNlbHNlCisJICAvKiBOZXcgY29kZSAyMDExLTA2LTAzICovCisJICBpZiAod2hhdCAm IFdfU0VORCkgeworCSAgICAgIHh4ID0geHV0OworCSAgfSBlbHNlIHsKKwkgICAgICBpZiAoZmNz ID09IEZDX1VDUzIgfHwgZmNzID09IEZDX1VURjgpCisJCXh4ID0gTlVMTDsKKwkgICAgICBlbHNl CisJCXh4ID0geHVmOworCSAgfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKworCSAgZW9sZmxhZyA9 IDA7CisJICBpZiAoaGF2ZXVjKSB7CQkJLyogRmlsZSBpcyBVbmljb2RlICovCisJICAgICAgLyog U2VlIFVuaWNvZGUgVFIxMywgIkNvbnZlcnRpbmcgdG8gT3RoZXIgQ2hhcmFjdGVyIFNldHMiICov CisJICAgICAgaWYgKHVjLnhfc2hvcnQgPT0gMHgyMDI4IHx8IC8qIExpbmUgU2VwYXJhdG9yPyAq LworCQkgIHVjLnhfc2hvcnQgPT0gMHgyMDI5IHx8IC8qIFBhcmFncmFwaCBTZXBhcmF0b3IgKi8K KwkJICAoZmVvbCAmJiAodWMueF9zaG9ydCA9PSAoVVNIT1JUKWZlb2wpKQorCQkgICkgeworCQkg IGRlYnVnKEYwMDEsInhnbmJ5dGUgdWMgZW9sIiwiIix1Yy54X3Nob3J0KTsKKwkJICByYyA9IDA7 CisJCSAgZW9sZmxhZyA9IDE7CQkvKiBEb24ndCB0cmFuc2xhdGUgYW5kIGhhbmRsZSBsYXRlciAq LworCSAgICAgIH0KKwkgICAgICBpZiAoeHggJiYgIWVvbGZsYWcpIHsJLyogVUNTLXRvLVRDUyBm dW5jdGlvbiAoVUNTLT5ieXRlKSAqLworCQkgIHJjID0gKCp4eCkodWMueF9zaG9ydCk7IC8qIFRo ZXNlIGNhbiBmYWlsLi4uICovCisJCSAgZGVidWcoRjEwMSwieGduYnl0ZSB4eCByYyIsIiIscmMp OworCQkgIGlmIChyYyA8IDApCQkvKiBJZiBpdCBjYW4ndCBiZSB0cmFuc2xhdGVkICovCisJCSAg ICB1Yy54X3Nob3J0ID0gVU5LOwkvKiBQdXQgdW5rbm93bi1jaGFyYWN0ZXIgc3ltYm9sICovCisJ CSAgZWxzZQorCQkgICAgdWMueF9zaG9ydCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKXJjICYgMHhm ZmZmKTsKKwkJICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIHh4IHVjIiwiIix1Yy54X3Nob3J0KTsKKwkg ICAgICB9CisjaWZkZWYgS0FOSkkKKwkgICAgICBpZiAodGNzID09IEZDX0pFVUMpIHsJLyogVHJh bnNsYXRpbmcgdG8gRVVDLUpQICovCisJCSAgVVNIT1JUIHNqID0gMDsKKwkJICB1bmlvbiBja19z aG9ydCBldTsKKwkJICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlIFVDUy0+RVVDIFVDUyIsIiIsdWMueF9z aG9ydCk7CisJCSAgaWYgKCFoYXZlc2opCQkvKiBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgaXQg Ki8KKwkJICAgIHNqID0gdW5fdG9fc2oodWMueF9zaG9ydCk7IC8qIGNvbnZlcnQgdG8gU2hpZnQt SklTICovCisJCSAgZXUueF9zaG9ydCA9IHNqX3RvX2V1KHNqKTsKKwkJICBkZWJ1ZyhGMDAxLCJ4 Z25ieXRlIFVDUy0+RVVDIEVVQyIsIiIsZXUueF9zaG9ydCk7CisJCSAgeGxhcHRyID0gMDsKKwkJ ICB4bGFjb3VudCA9IDA7CisJCSAgaWYgKGVvbGZsYWcpIHsKKwkJICAgICAgaWYgKHdoYXQgJiBX X1NFTkQpIHsKKwkJCSAgeGxhYnVmW3hsYWNvdW50KytdID0gTEY7CisJCQkgIHJldHVybihDUik7 CisJCSAgICAgIH0gZWxzZSB7CisJCQkgIHJldHVybihmZW9sKTsKKwkJICAgICAgfQorCQkgIH0K KwkJICBpZiAoZXUueF9jaGFyW2J5dGVvcmRlcl0pIHsJLyogVHdvIGJ5dGVzICovCisJCSAgICAg IHJjID0gZXUueF9jaGFyW2J5dGVvcmRlcl07CisJCSAgICAgIHhsYWJ1Zlt4bGFjb3VudCsrXSA9 IGV1LnhfY2hhclsxLWJ5dGVvcmRlcl07CisJCSAgICAgIGRlYnVnKEYwMDEsInhnbmJ5dGUgVUNT LT5FVUMgeGxhYnVmWzBdIiwiIix4bGFidWZbMF0pOworCQkgIH0gZWxzZSB7CQkvKiBPbmUgYnl0 ZSAqLworCQkgICAgICByYyA9IGV1LnhfY2hhclsxLWJ5dGVvcmRlcl07CisJCSAgfQorCQkgIGRl YnVnKEYxMDEsInhnbmJ5dGUgVUNTLT5FVUMgeGxhY291bnQiLCIiLHhsYWNvdW50KTsKKwkJICBk ZWJ1ZyhGMDAxLCJ4Z25ieXRlIFVDUy0+RVVDIHJjIiwiIixyYyk7CisJCSAgcmV0dXJuKHJjKTsK KwkgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBLQU5KSSAqLworCSAgICAgIGlmICh0Y3MgIT0gRkNf VUNTMiAmJiB0Y3MgIT0gRkNfVVRGOCkgeworCQkgIGlmICh1Yy54X3Nob3J0ICYgMHhmZjAwKSB7 CS8qIERlY29kaW5nIGVycm9yICovCisJCSAgICAgIGRlYnVnKEYwMDEsInhnbmJ5dGUgZGVjb2Rp bmcgZXJyb3IiLCIiLHVjLnhfc2hvcnQpOworCQkgICAgICByZXR1cm4oLTIpOworCQkgIH0gZWxz ZQorCQkgICAgcmV0dXJuKCh1bnNpZ25lZCBpbnQpKHVjLnhfc2hvcnQgJiAweGZmKSk7CisJICAg ICAgfQorCSAgICAgIHhjID0gdWMueF9zaG9ydDsKKworCSAgfSBlbHNlIHsJCQkvKiBGaWxlIGlz IG5vdCBVbmljb2RlICovCisJICAgICAgVVNIT1JUIGNoOworCSAgICAgIC8qIFRyYW5zbGF0ZSBm cm9tIHNpbmdsZSBGQ1MgYnl0ZSB0byBVQ1MtMiAqLworLyoKKyAgVGhpcyBpcyBhIGJpdCBub25v YnZpb3VzLi4uICBUaGUgYmxhaF91KCkgKEJsYWgtdG8tVW5pY29kZSkgcm91dGluZXMgYXJlCisg IGNhbGxlZCBvbmx5IHdpdGggcGllY2VzIG9mIGNoYXJhY3RlciBzZXRzLCBpbiB0aGUgSVNPIDIw MjIgc2Vuc2UuICBTbywKKyAgZm9yIGV4YW1wbGUsIGlmIGNoIGlzIGEgTGF0aW4tMSBjaGFyYWN0 ZXIsIHdlIGNhbGwgdGhlIHRyYW5zbGF0aW9uCisgIHJvdXRpbmUgb25seSBpZiBpdCBpcyBpbiB0 aGUgcmlnaHQgaGFsZjsgaWYgaXQncyBpbiB0aGUgbGVmdCBoYWxmLCBpdAorICBpc24ndCB0cmFu c2xhdGVkLCBhbmQgaW4gZmFjdCB3aWxsIGdpdmUgdGhlIHdyb25nIHJlc3VsdCBpZiBzZW50IHRv IHRoZQorICB0cmFuc2xhdGlvbiBmdW5jdGlvbi4gIFRoYXQncyBiZWNhdXNlIHRob3NlIGZ1bmN0 aW9ucyB3ZXJlIGRlc2lnbmVkIGZvcgorICB1c2Ugd2l0aCB0aGUgSVNPIDIwMjIgRzAuLkczIHNl dHMsIG5vdCBmb3IgZmlsZSB0cmFuc2Zlci4gIE9uIHRoZSBvdGhlcgorICBoYW5kLCBpZiBpdCdz IGEgNy1iaXQgY2hhcmFjdGVyIHNldCwgd2UgKmRvKiBjYWxsIHRoZSB0cmFuc2xhdGlvbgorICBm dW5jdGlvbi4gIChUbyBwdXQgaXQgYW5vdGhlciB3YXksIHRoZSBsZWZ0IGhhbGYgb2YgYW55IDgt Yml0IGNoYXJhY3RlcgorICBzZXQgaXMgQVNDSUkgYW5kIHRoZXJlZm9yZSBkb2Vzbid0IG5lZWQg dG8gYmUgdHJhbnNsYXRlZCBidXQgNy1iaXQgc2V0cworICBzdWNoIGFzIElTTyA2NDYgR2VybWFu IGRvIG5lZWQgdHJhbnNsYXRpb24pLgorKi8KKwkgICAgICBjaCA9ICh1bnNpZ25lZCkodGhpc2No YXIgJiAweGZmKTsKKwkgICAgICBpZiAoKChmY3NpbmZvW2Zjc10uc2l6ZSA+IDEyOCkgJiYgKGNo ICYgMHg4MCkpIHx8CisJCSAgZmNzaW5mb1tmY3NdLnNpemUgPD0gMTI4KSB7CisJCSAgaWYgKHhm dSkgewkJIC8qIEZDUy10by1VQ1MgZnVuY3Rpb24gKi8KKwkJICAgICAgY2ggPSAoKnhmdSkoY2gp OworCQkgIH0KKwkgICAgICB9CisJICAgICAgeGMgPSBjaDsKKwkgIH0KKwkgIC8qIEF0IHRoaXMg cG9pbnQgd2UgaGF2ZSBhIFVDUy0yIGNoYXJhY3RlciBpbiBuYXRpdmUgZm9ybWF0ICovCisJICAv KiAoQmlnIEVuZGlhbiBvciBMaXR0bGUgRW5kaWFuKSBpbiB4Yywgd2hpY2ggaXMgYW4gdW5zaWdu ZWQgaW50LiAqLworCisJICBkZWJ1ZyhGMDAxLCJ4Z25ieXRlIHhjIiwiIix4Yyk7CisKKwkgIGlm ICh0Y3MgPT0gRkNfVVRGOCkgewkJLyogTm93IGNvbnZlcnQgdG8gVVRGLTggKi8KKwkgICAgICBV U0hPUlQgYzsJCQkvKiBOT1RFOiB0aGlzIGlzIEZDX1VURjggb24gcHVycG9zZSEgKi8KKwkgICAg ICBDSEFSICogYnVmID0gTlVMTDsKKwkgICAgICBpbnQgaSwgayA9IDAsIHg7CisKKwkgICAgICB4 bGFwdHIgPSAwOworCSAgICAgIGlmICh1dGZlcnJvcikgeworCQkgIHhsYWJ1ZltrKytdID0gMHhm ZjsKKwkJICB4bGFidWZbaysrXSA9IDB4YmQ7CisJICAgICAgfQorCSAgICAgIGlmIChlb2xmbGFn KSB7CQkvKiBXZSBkZXRlY3RlZCBFT0wgaW4gc291cmNlIGZpbGUgKi8KKwkJICBpZiAod2hhdCAm IFdfU0VORCkgewkvKiBDb252ZXJ0IHRvIENSTEYgKi8KKwkJICAgICAgeGxhYnVmW2srK10gPSBM RjsKKwkJICAgICAgeGxhY291bnQgPSBrOworCQkgICAgICByZXR1cm4oKHVuc2lnbmVkIGludClD Uik7CisjaWZkZWYgQ09NTUVOVAorCQkgIH0gZWxzZSB7CQkvKiBPciB0byBsb2NhbCBsaW5lLWVu ZCAqLworCQkgICAgICB4bGFjb3VudCA9IGs7CisJCSAgICAgIHJldHVybigodW5zaWduZWQgaW50 KWZlb2wpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJICB9CisJICAgICAgfQorCSAgICAgIGMg PSB4YzsKKwkgICAgICBpZiAoKHggPSB1Y3MyX3RvX3V0ZjgoYywmYnVmKSkgPCAxKSB7CisJCSAg ZGVidWcoRjEwMSwieGduYnl0ZSB1Y3MyX3RvX3V0ZjggZXJyb3IiLCIiLGMpOworCQkgIHJldHVy bigtMik7CisJICAgICAgfQorCSAgICAgIGRlYnVnKEYxMDEsInhnbmJ5dGUgVVRGOCBidWZbMF0i LCIiLGJ1ZlswXSk7CisJICAgICAgZm9yIChpID0gMTsgaSA8IHg7IGkrKykgeworCQkgIHhsYWJ1 ZltrK2ktMV0gPSBidWZbaV07CisJCSAgZGVidWcoRjExMSwieGduYnl0ZSBVVEY4IHhsYWJ1ZiIs Y2tpdG9hKGktMSksYnVmW2ldKTsKKwkgICAgICB9CisJICAgICAgeGxhcHRyID0gMDsKKwkgICAg ICB4bGFjb3VudCA9IHggLSAxOworCSAgICAgIGRlYnVnKEYxMDEsInhnbmJ5dGUgVVRGOCB4bGFj b3VudCIsIiIseGxhY291bnQpOworCSAgICAgIHJldHVybigodW5zaWduZWQgaW50KWJ1ZlswXSk7 CisJICB9IGVsc2UgewkJCS8qIE9yIGtlZXAgaXQgYXMgVUNTLTIgKi8KKwkgICAgICBpbnQgayA9 IDA7CisJICAgICAgQ0hBUiBjOworCSAgICAgIHhsYXB0ciA9IDA7CisJICAgICAgaWYgKHV0ZmVy cm9yKSB7CisJCSAgeGxhYnVmW2srK10gPSAweGZmOworCQkgIHhsYWJ1ZltrKytdID0gMHhmZDsK KwkJICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIGVycm9yIiwiIixrKTsKKwkgICAgICB9CisJICAgICAg aWYgKGVvbGZsYWcpIHsJCS8qIFdlIGRldGVjdGVkIEVPTCBpbiBzb3VyY2UgZmlsZSAqLworCQkg IGlmICh3aGF0ICYgV19TRU5EKSB7CS8qIENvbnZlcnQgdG8gQ1JMRiAqLworCQkgICAgICB4bGFi dWZbaysrXSA9IENSOworCQkgICAgICB4bGFidWZbaysrXSA9IE5VTDsKKwkJICAgICAgeGxhYnVm W2srK10gPSBMRjsKKwkJICAgICAgeGxhY291bnQgPSBrOworCQkgICAgICBkZWJ1ZyhGMTAxLCJ4 Z25ieXRlIHNlbmQgQ1JMRiIsIiIsayk7CisJCSAgICAgIHJldHVybigwKTsJLyogUmV0dXJuIE5V TCAqLworCQkgIH0gZWxzZSB7CQkvKiBPciB0byBsb2NhbCBsaW5lLWVuZCAqLworI2lmZGVmIENP TU1FTlQKKwkJICAgICAgLyogVGhpcyBieXBhc3NlcyBieXRlIHN3YXBwaW5nIHRoYXQgd2UgbWln aHQgbmVlZCAqLworCQkgICAgICB4bGFidWZbaysrXSA9IChDSEFSKWZlb2w7CisJCSAgICAgIHhs YWNvdW50ID0gazsKKwkJICAgICAgZGVidWcoRjEwMSwieGduYnl0ZSBzZW5kIGZlb2wiLCIiLGsp OworCQkgICAgICByZXR1cm4oMCk7CS8qIFJldHVybiBOVUwgKi8KKyNlbHNlCisJCSAgICAgIHhj ID0gKENIQVIpZmVvbDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCSAgfQorCSAgICAgIH0KKwkg ICAgICAvKiBJbiB3aGljaCBvcmRlciBzaG91bGQgd2UgcmV0dXJuIHRoZSBieXRlcz8gKi8KKyNp ZmRlZiBDT01NRU5UCisJICAgICAgaWYgKCAod2hhdCAmIFdfU0VORCkgfHwgKHdoYXQgJiBXX0ZU UCkgfHwgKGZpbGVvcmRlciA9PSAwKSkgeworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJICAvKiBB TFdBWVMgUkVUVVJOIElOIEJJRyBFTkRJQU4gT1JERVIuLi4gNyBTZXAgMjAwMiAgICovCisJCSAg LyogeGduYnl0ZSgpIGlzIGFsbW9zdCBhbHdheXMgdXNlZCB0byBmZWVkIHhwbmJ5dGUoKSAqLwor CQkgIC8qIHdoaWNoIHJlcXVpcmVzIGJ5dGVzIGluIEJFIG9yZGVyLiBJbiBjYXNlcyB3aGVyZSAg Ki8KKwkJICAvKiB4Z25ieXRlIGlzIHVzZWQgaW4gaXNvbGF0aW9uLCB0aGUgY2FsbGVyIGNhbiBz d2FwICovCisJCSAgLyogYnl0ZXMgaXRzZWxmIGFmdGVyd2FyZHMuICovCisJCSAgeGxhYnVmW2sr K10gPSAoeGMgPj4gOCkgJiAweGZmOyAvKiBCaWcgRW5kaWFuICovCisJCSAgeGxhYnVmW2srK10g PSB4YyAmIDB4ZmY7CisJCSAgZGVidWcoRjAwMSwieGduYnl0ZS0+VUNTMkJFIiwKKwkJCWNraXRv eCgoaW50KXhsYWJ1ZlswXSkseGxhYnVmWzFdKTsKKyNpZmRlZiBDT01NRU5UCisJICAgICAgfSBl bHNlIHsJCQkvKiBMaXR0bGUgRW5kaWFuICovCisJCSAgeGxhYnVmW2srK10gPSB4YyAmIDB4ZmY7 CisJCSAgeGxhYnVmW2srK10gPSAoeGMgPj4gOCkgJiAweGZmOworCQkgIGRlYnVnKEYwMDEsInhn bmJ5dGUtPlVDUzJMRSIsCisJCQlja2l0b3goKGludCl4bGFidWZbMF0pLHhsYWJ1ZlsxXSk7CisJ ICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgICBjID0geGxhYnVmWzBdOworCSAg ICAgIHhsYXB0ciA9IDE7CisJICAgICAgeGxhY291bnQgPSBrLTE7CisJICAgICAgZGVidWcoRjEw MSwieGduYnl0ZSBjIiwiIixjKTsKKwkgICAgICBkZWJ1ZyhGMTAxLCJ4Z25ieXRlIHhsYXB0ciIs IiIseGxhcHRyKTsKKwkgICAgICBkZWJ1ZyhGMDExLCJ4Z25ieXRlIHhsYWJ1ZiIseGxhYnVmLHhs YWNvdW50KTsKKwkgICAgICByZXR1cm4oKHVuc2lnbmVkIGludCljKTsKKwkgIH0KKyAgICAgIH0K KyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgICBjYXNlIFhMQV9OT05FOgorCXJldHVybigoZm4g PyAoKmZuKSgpIDogem1pbmNoYXIoKSkpOworICAgICAgY2FzZSBYTEFfQllURToJCQkvKiBCeXRl LWZvci1CeXRlIHRyYW5zbGF0aW9uICovCisJcnQgPSB4OworCWlmIChzeCkKKwkgIHJ0ID0gKCpz eCkocnQpOworI2lmZGVmIFVOSUNPREUKKwlpZiAodXRmZXJyb3IpIHsKKwkgICAgeGxhcHRyID0g MDsKKwkgICAgeGxhY291bnQgPSAxOworCSAgICB4bGFidWZbMF0gPSBydDsKKwkgICAgcmV0dXJu KFVOSyk7CisJfSBlbHNlCisjZW5kaWYgLyogVU5JQ09ERSAqLworCSAgcmV0dXJuKCh1bnNpZ25l ZCBpbnQpcnQpOworCisjaWZkZWYgS0FOSkkKKyAgICAgIGNhc2UgWExBX0pBUEFOOgkJCS8qIENv bWUgaGVyZSB3aXRoIFNoaWZ0LUpJUyAqLworCWlmICh0Y3MgPT0gRkNfSkVVQykgewkJLyogSXQg YmV0dGVyIGJlLi4uICovCisJICAgIHhsYXB0ciA9IDA7CisJICAgIHhsYWNvdW50ID0gMDsKKwkg ICAgaWYgKCFoYXZlc2opIHsKKwkJcHJpbnRmKCJCQUQgQkFEXG4iKTsKKwkJcmV0dXJuKC0yKTsK KwkgICAgfQorCSAgICBpZiAoIWhhdmVldSkJCS8qIFdlIG1pZ2h0IGFscmVhZHkgaGF2ZSBFVUMg dG9vICovCisJICAgICAgZXUueF9zaG9ydCA9IHNqX3RvX2V1KHNqLnhfc2hvcnQpOworCSAgICBp ZiAoZXUueF9jaGFyW2J5dGVvcmRlcl0pIHsKKwkJeGxhYnVmW3hsYWNvdW50KytdID0gZXUueF9j aGFyWzEtYnl0ZW9yZGVyXTsKKwkJcmV0dXJuKGV1LnhfY2hhcltieXRlb3JkZXJdKTsKKwkgICAg fSBlbHNlIHsKKwkJcmV0dXJuKGV1LnhfY2hhclsxLWJ5dGVvcmRlcl0pOworCSAgICB9CisJICAg IGJyZWFrOworCX0KKyNlbmRpZiAvKiBLQU5KSSAqLworCisgICAgICBkZWZhdWx0OgorCWRlYnVn KEYxMDEsInhnbmJ5dGUgYmFkIHhsYXR5cGUiLCIiLHhsYXR5cGUpOworCXJldHVybigtMik7Cisg ICAgfQorI2lmZGVmIENPTU1FTlQKKy8qICAgIAorICBJZiB0aGVyZSBpcyBhIHJldHVybigpIHN0 YXRlbWVudCBoZXJlLCBzb21lIGNvbXBpbGVycyBjb21wbGFpbgorICBhYm91dCAic3RhdGVtZW50 IG5vdCByZWFjaGVkIi4gIElmIHRoZXJlIGlzIG5vIHJldHVybigpIHN0YXRlbWVudCwKKyAgb3Ro ZXIgY29tcGlsZXJzIGNvbXBsYWluIHRoYXQgIk5vbi12b2lkIGZ1bmN0aW9uIHNob3VsZCByZXR1 cm4gYSB2YWx1ZSIuCisgIFRoZXJlIGlzIG5vIHBhdGggdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIHRo YXQgZmFsbHMgdGhyb3VnaCB0byBoZXJlLgorKi8KKyAgICBkZWJ1ZyhGMTAwLCJ4Z25ieXRlIHN3 aXRjaCBmYWlsdXJlIiwiIiwwKTsKKyAgICByZXR1cm4oLTIpOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KK30KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZm5kZWYgTk9YRkVSCisKKy8qICBHIEUg VCBQIEsgVCAgLS0gIEZpbGwgYSBwYWNrZXQgZGF0YSBmaWVsZCBmcm9tIHRoZSBpbmRpY2F0ZWQg c291cmNlLiAgKi8KKworLyoKKyAgUGFyYW1ldGVyczoKKyAgICBidWZtYXg6IE1heGltdW0gbGVu Z3RoIG9mIGVudGlyZSBwYWNrZXQuCisgICAgeGxhdGU6ICBGbGFnIGZvciB3aGV0aGVyIHRvIHRy YW5zbGF0ZSBjaGFyc2V0cyB3aGVuIGluIHRleHQgbW9kZS4KKyAgUmV0dXJuczogIE51bWJlciBv ZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gdG8gcGFja2V0IGRhdGEgZmllbGQsIDAgb3IgbW9yZSwKKyAg ICAgICAgICAgIE9yIC0xIG9uIGZhaWx1cmUgKGludGVybmFsIGVycm9yKSwKKyAgICAgICAgICAg IG9yIC0zIG9uIHRpbWVvdXQgKGUuZy4gd2hlbiByZWFkaW5nIGZyb20gYSBwaXBlKS4KKworICBU aGlzIGlzIHRoZSBmdWxsIHZlcnNpb24gYWxsb3dpbmcgZm9yIHBhcml0eSBhbmQgdGV4dC1tb2Rl IGNvbnZlcnNpb25zOworICBpLmUuIGl0IHdvcmtzIGluIGFsbCBjYXNlcy4gICBBbHNvIHNlZSBi Z2V0cGt0KCksIGEgc3BlY2lhbCBsZWFuL21lYW4vZmFzdAorICBwYWNrZXQgZW5jb2RlciB0aGF0 IHdvcmtzIG9ubHkgZm9yIGJpbmFyeS1tb2RlIG5vLXBhcml0eSB0cmFuc2ZlcnMuCisqLworc3Rh dGljIGludCB1ZmxhZyA9IDA7CisKK2ludAorZ2V0cGt0KGJ1Zm1heCx4bGF0ZSkgaW50IGJ1Zm1h eCwgeGxhdGU7IHsgLyogRmlsbCBvbmUgcGFja2V0IGJ1ZmZlciAqLworICAgIHJlZ2lzdGVyIENI QVIgcnQgPSB0LCBybmV4dCA9IE5VTDsJICAvKiBSZWdpc3RlciBzaGFkb3dzIG9mIHRoZSBnbG9i YWxzICovCisgICAgcmVnaXN0ZXIgQ0hBUiAqZHAsICpvZHAsICpvZHAyLCAqcDEsICpwMjsgLyog cG9pbnRlcnMuLi4gKi8KKyAgICByZWdpc3RlciBpbnQgeDsJCQkvKiBMb29wIGluZGV4LiAqLwor ICAgIHJlZ2lzdGVyIGludCBhNzsJCQkvKiBMb3cgNyBiaXRzIG9mIGNoYXJhY3RlciAqLworCisg ICAgQ0hBUiB4eGxzLCB4eGRsLCB4eHJjLCB4eHNzLCB4eGNxOwkvKiBQaWVjZXMgb2YgcHJlZml4 ZWQgc2VxdWVuY2UgKi8KKworICAgIGlmIChiaW5hcnkpIHhsYXRlID0gMDsJCS8qIFdlIGRvbid0 IHRyYW5zbGF0ZSBpZiBiaW5hcnkgKi8KKworICAgIGlmICghZGF0YSkgeworCWRlYnVnKEYxMDAs IlNFUklPVVMgRVJST1I6IGdldHBrdCBkYXRhID09IE5VTEwiLCIiLDApOworCXJldHVybigtMSk7 CisgICAgfQorICAgIGRwID0gZGF0YTsJCQkJLyogUG9pbnQgdG8gcGFja2V0IGRhdGEgYnVmZmVy ICovCisgICAgc2l6ZSA9IDA7CQkJCS8qIEFuZCBpbml0aWFsaXplIGl0cyBzaXplICovCisvKgor ICBBc3N1bWUgYnVmbWF4IGlzIHRoZSByZWNlaXZlcidzIHRvdGFsIHJlY2VpdmUtcGFja2V0IGJ1 ZmZlciBsZW5ndGguCisgIE91ciB3aG9sZSBwYWNrZXQgaGFzIHRvIGZpdCBpbnRvIGl0LCBzbyB3 ZSBhZGp1c3QgdGhlIGRhdGEgZmllbGQgbGVuZ3RoLgorICBXZSBhbHNvIGRlY2lkZSBvcHRpbWFs bHkgd2hldGhlciBpdCBpcyBiZXR0ZXIgdG8gdXNlIGEgc2hvcnQtZm9ybWF0IG9yCisgIGxvbmct Zm9ybWF0IHBhY2tldCB3aGVuIHdlJ3JlIG5lYXIgdGhlIGJvcmRlcmxpbmUuCisqLworICAgIGJ1 Zm1heCA9IG1heGRhdGEoKTsJCQkvKiBHZXQgbWF4aW11bSBkYXRhIGxlbmd0aCAqLworCisgICAg aWYgKGZpcnN0ID09IDEpIHsJCQkvKiBJZiBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhpcyBmaWxlLi4g Ki8KKyNpZmRlZiBVTklDT0RFCisJLyogU3BlY2lhbCBlbmQtb2YtbGluZSBoYW5kbGluZyBmb3Ig VW5pY29kZSAqLworCWlmICh0Y2hhcnNldCA9PSBUQ19VQ1MyIHx8IHRjaGFyc2V0ID09IFRDX1VU RjgpCisJICB1ZmxhZyA9IDE7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCWRlYnVnKEYxMDEsImdl dHBrdCBmaXJzdCB1ZmxhZyIsIiIsdWZsYWcpOworCWRlYnVnKEYxMDEsImdldHBrdCBmaXJzdCBy dCIsIiIscnQpOworCWlmICghbWVtc3RyICYmICFmdW5jc3RyKQkvKiBhbmQgcmVhbCBmaWxlLi4u ICovCisJICBmZmMgPSAoQ0tfT0ZGX1QpMDsJCS8qIHJlc2V0IGZpbGUgY2hhcmFjdGVyIGNvdW50 ZXIgKi8KKyNpZmRlZiBDT01NRU5UCisJLyogTW92ZWQgdG8gYmVsb3cuLi4gKi8KKwlmaXJzdCA9 IDA7CQkJLyogTmV4dCBjaGFyYWN0ZXIgd29uJ3QgYmUgZmlyc3QgKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisJKmxlZnRvdmVyID0gJ1wwJzsJCS8qIERpc2NhcmQgYW55IGludGVycnVwdGVkIGxl ZnRvdmVycyAqLworCW5sZWZ0ID0gMDsKKyNpZm5kZWYgTk9DU0VUUworCXNldHhsYXR5cGUodGNo YXJzZXQsZmNoYXJzZXQpOwkvKiBTZXQgdXAgY2hhcnNldCB0cmFuc2xhdGlvbnMgKi8KKyNlbmRp ZiAvKiBOT0NTRVRTICovCisKKwkvKiBHZXQgZmlyc3QgY2hhcmFjdGVyIG9mIGZpbGUgaW50byBy dCwgd2F0Y2hpbmcgb3V0IGZvciBudWxsIGZpbGUgKi8KKworI2lmZGVmIENBTElCUkFURQorCWlm IChjYWxpYnJhdGUgJiYgIW1lbXN0cikgeworI2lmZGVmIE5PUkFORE9NCisJICAgIHggPSBydCA9 IDUzOworI2Vsc2UKKwkgICAgeCA9IHJ0ID0gY2FsX2FbcmFuZCgpICYgMHhmZl07CisjZW5kaWYg LyogTk9SQU5ET00gKi8KKwkgICAgZmlyc3QgPSAwOworCSAgICBmZmMrKzsKKwl9IGVsc2UKKyNl bmRpZiAvKiBDQUxJQlJBVEUgKi8KKyNpZmRlZiBLQU5KSQorCWlmICh4bGF0ZSAmJiB0Y2hhcnNl dCA9PSBUQ19KRVVDKSB7IC8qIEthbmppIHRleHQgKi8KKwkgICAgeCA9IHprYW5qZigpOworCSAg ICBpZiAoKHggPSB6a2FuamkobWVtc3RyID8ga2dldG0gOiBrZ2V0ZikpIDwgMCkgeworCSAgICAg ICAgZmlyc3QgPSAtMTsKKwkgICAgICAgIHNpemUgPSAwOworCSAgICAgICAgaWYgKHggPT0gLTIp IHsKKwkgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJnZXRwa3QgemthbmppOiBpbnB1dCBlcnJvciIs IiIsMCk7CisJICAgICAgICAgICAgY3hzZWVuID0gMTsKKwkgICAgICAgIH0gZWxzZSBkZWJ1ZyhG MTAwLCJnZXRwa3QgemthbmppOiBlbXB0eSBzdHJpbmcvZmlsZSIsIiIsMCk7CisJICAgICAgICBy ZXR1cm4oMCk7CisJICAgIH0KKwkgICAgcnQgPSB4OworCSAgICBmaXJzdCA9IDA7CisJICAgIGlm ICghbWVtc3RyKSB7CisJCWZmYysrOworCQlpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NFTkQpKSAv KiBBY2N1bXVsYXRlIGZpbGUgY3JjICovCisJCSAgZG9maWxjcmMoKGludClydCk7CisJICAgIH0K Kwl9IGVsc2UgewkJCS8qIE5vdCBLYW5qaSB0ZXh0ICovCisjZW5kaWYgLyogS0FOSkkgKi8KKwkg ICAgaWYgKG1lbXN0cikgewkJLyogUmVhZGluZyBkYXRhIGZyb20gbWVtb3J5IHN0cmluZyAqLwor CQkvKiBUaGlzIHdpbGwgbm90IGJlIFVuaWNvZGUgKi8KKwkJaWYgKChydCA9ICptZW1wdHIrKykg PT0gJ1wwJykgeyAvKiBlbmQgb2Ygc3RyaW5nID09PiBFT0YgKi8KKwkJICAgIGZpcnN0ID0gLTE7 CisJCSAgICBzaXplID0gMDsKKwkJICAgIGRlYnVnKEYxMDAsImdldHBrdDogZW1wdHkgc3RyaW5n IiwiIiwwKTsKKwkJICAgIHJldHVybigwKTsKKwkJfQorCQlmaXJzdCA9IDA7CisJICAgIH0gZWxz ZSBpZiAoZnVuY3N0cikgewkvKiBSZWFkaW5nIGRhdGEgZnJvbSBhIGZ1bmN0aW9uICovCisJCS8q IFRoaXMgd2lsbCBub3QgYmUgVW5pY29kZSAqLworCQlpZiAoKHggPSAoKmZ1bmNwdHIpKCkpIDwg MCkgeyAvKiBFbmQgb2YgaW5wdXQgICovCisJCSAgICBmaXJzdCA9IC0xOworCQkgICAgc2l6ZSA9 IDA7CQkvKiBFbXB0eSAqLworCQkgICAgcmV0dXJuKDApOworCQl9CisJCWZmYysrOwkJCS8qIENv dW50IGEgZmlsZSBjaGFyYWN0ZXIgKi8KKwkJcnQgPSAoQ0hBUikgeDsJCS8qIENvbnZlcnQgaW50 IHRvIGNoYXIgKi8KKwkJZmlyc3QgPSAwOworCQlkZWJ1ZyhGMDAwLCJnZXRwa3QgZnVuY3N0ciIs IiIscnQpOworCisJICAgIH0gZWxzZSB7CQkJLyogUmVhZGluZyBkYXRhIGZyb20gYSBmaWxlICov CisjaWZuZGVmIE5PQ1NFVFMKKwkJaWYgKHhsYXRlICYmICFiaW5hcnkpIHsJLyogQ291bGQgYmUg VW5pY29kZSAqLworCQkgICAgaWYgKHhsYXR5cGUgPT0gWExBX1VOSUNPREUpIHsKKwkJCS8qIEdl dCBuZXh0IHRyYW5zbGF0ZWQgYnl0ZSAqLworCQkJeCA9IHhnbmJ5dGUoY3NlcXRhYlt0Y2hhcnNl dF0sZmNoYXJzZXQsTlVMTCk7CisJCQlkZWJ1ZyhGMTAxLCJnZXRwa3QgeGduYnl0ZSIsIiIseCk7 CisJCSAgICB9IGVsc2UgewkJLyogTm90IFVuaWNvZGUgKi8KKwkJCXggPSB6bWluY2hhcigpOwkv KiBHZXQgbmV4dCBieXRlLCB0cmFuc2xhdGUgYmVsb3cgKi8KKwkJCWRlYnVnKEYxMDEsImdldHBr dCB6bWluY2hhciBBIiwiIix4KTsKKwkJICAgIH0KKwkJfSBlbHNlIHsJCS8qIEp1c3QgZ2V0IG5l eHQgYnl0ZSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJICAgIHggPSB6bWluY2hhcigpOwor CQkgICAgZGVidWcoRjEwMSwiZ2V0cGt0IHptaW5jaGFyIEIiLCIiLHgpOworI2lmbmRlZiBOT0NT RVRTCisJCX0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisJCWlmICh4IDwgMCkgewkJLyogRW5kIG9m IGZpbGUgb3IgaW5wdXQgZXJyb3IgKi8KKwkJICAgIGlmICh4ID09IC0zKSB7CS8qIFRpbWVvdXQu ICovCisJCQlzaXplID0gKGRwLWRhdGEpOworCQkJZGVidWcoRjEwMSwiZ2V0cGt0IHRpbWVvdXQg c2l6ZSIsIiIsc2l6ZSk7CisJCQlyZXR1cm4oKHNpemUgPT0gMCkgPyB4IDogc2l6ZSk7CisJCSAg ICB9CisJCSAgICBmaXJzdCA9IC0xOworCQkgICAgc2l6ZSA9IDA7CisJCSAgICBpZiAoeCA9PSAt MikgewkvKiBFcnJvciAqLworCQkJZGVidWcoRjEwMCwiZ2V0cGt0OiBpbnB1dCBlcnJvciIsIiIs MCk7CisJCQljeHNlZW4gPSAxOwkvKiBJbnRlcnJ1cHQgdGhlIGZpbGUgdHJhbnNmZXIgKi8KKwkJ ICAgIH0gZWxzZSB7CisJCQlkZWJ1ZyhGMTAwLCJnZXRwa3QgZW1wdHkgZmlsZSIsIiIsMCk7CisJ CSAgICB9CisJCSAgICByZXR1cm4oMCk7CisJCX0KKwkJZmlyc3QgPSAwOwkJLyogTmV4dCBjaGFy YWN0ZXIgd29uJ3QgYmUgZmlyc3QgKi8KKwkJcnQgPSAoQ0hBUikgeDsJCS8qIENvbnZlcnQgaW50 IHRvIGNoYXIgKi8KKyNpZm5kZWYgTk9DU0VUUworCQlpZiAoeGxhdHlwZSAhPSBYTEFfVU5JQ09E RSB8fCBiaW5hcnkpIHsKKwkJICAgIGZmYysrOworCQkgICAgaWYgKHN4KQorCQkgICAgICBydCA9 ICgqc3gpKHJ0KTsKKwkJICAgIGlmIChkb2NyYyAmJiAod2hhdCAmIFdfU0VORCkpCisJCSAgICAg IGRvZmlsY3JjKHgpOworCQl9CisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmZGVmIERFQlVHCisJ CWlmIChkZWJsb2cpCisJCSAgZGVidWcoRjEwMSwiZ2V0cGt0IDFzdCBjaGFyIiwiIixydCk7Cisj ZW5kaWYgLyogREVCVUcgKi8KKwkJaWYgKC8qICFoYXZldWMgJiYgKi8gZG9jcmMgJiYgKHdoYXQg JiBXX1NFTkQpKSAvKiBGaWxlIENSQyAqLworCQkgIGRvZmlsY3JjKHgpOworCSAgICB9CisjaWZk ZWYgS0FOSkkKKwl9CisjZW5kaWYgLyogS0FOSkkgKi8KKwkvKiBQV1A6IGhhbmRsaW5nIG9mIGZl b2wgaXMgZG9uZSBsYXRlciAoaW4gdGhlIHdoaWxlIGxvb3ApLi4uICovCisKKyAgICB9IGVsc2Ug aWYgKChmaXJzdCA9PSAtMSkgJiYgKG5sZWZ0ID09IDApKSB7IC8qIEVPRiBmcm9tIGxhc3QgdGlt ZSAqLworI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZykgeworCSAgICBkZWJ1ZyhGMTAxLCJnZXRw a3QgZW9mIGNyYzE2IiwiIixjcmMxNik7CisJICAgIGRlYnVnKEYxMDEsImdldHBrdCBlb2YgZmZj IiwiIixmZmMpOworCX0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICByZXR1cm4oc2l6ZSA9 IDApOworICAgIH0KKy8qCisgIEhlcmUgd2UgaGFuZGxlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIGVu Y29kZWQgZm9yIHRoZSBsYXN0IHBhY2tldCBidXQKKyAgZGlkIG5vdCBmaXQsIGFuZCBzbyB3ZXJl IHNhdmVkIGluIHRoZSAibGVmdG92ZXIiIGFycmF5LgorKi8KKyAgICBkZWJ1ZyhGMTAxLCJnZXRw a3QgbmxlZnQiLCIiLG5sZWZ0KTsKKyAgICBpZiAobmxlZnQpIHsKKwlmb3IgKHAxID0gbGVmdG92 ZXI7IG5sZWZ0ID4gMDsgbmxlZnQtLSkgLyogQ29weSBsZWZ0b3ZlcnMgKi8KKwkgICpkcCsrID0g KnAxKys7CisJKmxlZnRvdmVyID0gJ1wwJzsJCQkvKiBEZWxldGUgbGVmdG92ZXJzICovCisJbmxl ZnQgPSAwOworICAgIH0KKyAgICBpZiAoZmlyc3QgPT0gLTEpCQkJLyogSGFuZGxlIEVPRiAqLwor ICAgICAgcmV0dXJuKHNpemUgPSAoZHAgLSBkYXRhKSk7CisKKy8qIE5vdyBmaWxsIHVwIHRoZSBy ZXN0IG9mIHRoZSBwYWNrZXQuICovCisKKyAgICBycHQgPSAwOwkJCQkvKiBJbml0aWFsaXplIGNo YXJhY3RlciByZXBlYXQgY291bnQgKi8KKworICAgIHdoaWxlIChmaXJzdCA+IC0xKSB7CQkvKiBV bnRpbCBFT0YuLi4gKi8KKyNpZmRlZiBDQUxJQlJBVEUKKwlpZiAoY2FsaWJyYXRlICYmICFtZW1z dHIpIHsJLyogV2UgZ2VuZXJhdGUgb3VyIG93biAiZmlsZSIgKi8KKwkgICAgaWYgKGZmYyA+PSBj YWxpYnJhdGUpIHsJLyogRU9GICovCisJCWZpcnN0ID0gLTE7CisJCWZmYy0tOworCSAgICB9IGVs c2UgewkJCS8qIEdlbmVyYXRlIG5leHQgY2hhcmFjdGVyICovCisJCWlmIChjYWxfaiA+IENBTF9N ICogZmZjKQorCQkgIGNhbF9qID0gY2FsX2FbZmZjICYgMHhmZl07CisJCXggPSAodW5zaWduZWQp Y2FsX2FbKGNhbF9qICYgMHhmZildOworCQlpZiAoeCA9PSBydCkgeCBePSAyOworCSAgICB9CisJ ICAgIGNhbF9qICs9ICh1bnNpZ25lZCBpbnQpKGZmYyArIENBTF9PKTsKKwkgICAgZmZjKys7CisJ fSBlbHNlCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisjaWZkZWYgS0FOSkkKKwkgIGlmICh4bGF0 ZSAmJiB0Y2hhcnNldCA9PSBUQ19KRVVDKSB7CisJICAgICAgaWYgKCh4ID0gemthbmppKG1lbXN0 ciA/IGtnZXRtIDoga2dldGYpKSA8IDApIHsKKwkJICBmaXJzdCA9IC0xOworCQkgIGlmICh4ID09 IC0yKSBjeHNlZW4gPSAxOworCSAgICAgIH0gZWxzZSBpZiAoIW1lbXN0cikgZmZjKys7CisJICAg ICAgcm5leHQgPSAoQ0hBUikgKHggJiBmbWFzayk7CisJICB9IGVsc2UgeworI2VuZGlmIC8qIEtB TkpJICovCisJICAgIGlmIChtZW1zdHIpIHsJCS8qIEdldCBuZXh0IGNoYXIgZnJvbSBtZW1vcnkg c3RyaW5nICovCisJCWlmICgoeCA9ICptZW1wdHIrKykgPT0gJ1wwJykgLyogRW5kIG9mIHN0cmlu ZyBtZWFucyBFT0YgKi8KKwkJICBmaXJzdCA9IC0xOwkJLyogRmxhZyBFT0YgZm9yIG5leHQgdGlt ZS4gKi8KKwkJcm5leHQgPSAoQ0hBUikgKHggJiBmbWFzayk7IC8qIEFwcGx5IGZpbGUgbWFzayAq LworCSAgICB9IGVsc2UgaWYgKGZ1bmNzdHIpIHsJLyogR2V0IG5leHQgY2hhciBmcm9tIGZ1bmN0 aW9uICovCisJCWlmICgoeCA9ICgqZnVuY3B0cikoKSkgPCAwKSAvKiBFbmQgb2Ygc3RyaW5nIG1l YW5zIEVPRiAqLworCQkgIGZpcnN0ID0gLTE7CQkvKiBGbGFnIEVPRiBmb3IgbmV4dCB0aW1lLiAq LworCQlybmV4dCA9IChDSEFSKSAoeCAmIGZtYXNrKTsgLyogQXBwbHkgZmlsZSBtYXNrICovCisJ ICAgIH0gZWxzZSB7CQkJLyogRnJvbSBmaWxlLi4uICovCisjaWZuZGVmIE5PQ1NFVFMKKwkJaWYg KHhsYXRlICYmICFiaW5hcnkpIHsJLyogQ291bGQgYmUgVW5pY29kZSAqLworCQkgICAgaWYgKHhs YXR5cGUgPT0gWExBX1VOSUNPREUpIHsKKwkJCS8qIEdldCBuZXh0IHRyYW5zbGF0ZWQgYnl0ZSAq LworCQkJeCA9IHhnbmJ5dGUoY3NlcXRhYlt0Y2hhcnNldF0sZmNoYXJzZXQsTlVMTCk7CisJCSAg ICB9IGVsc2UgewkJLyogTm90IFVuaWNvZGUgKi8KKwkJCXggPSB6bWluY2hhcigpOyAvKiBHZXQg bmV4dCBieXRlLCB0cmFuc2xhdGUgYmVsb3cgKi8KKwkJCS8qIGRlYnVnKEYxMDEsInhnbmJ5dGUg QiB6bWluY2hhciIsIiIseCk7ICovCisJCSAgICB9CisJCX0gZWxzZSB7CQkvKiBKdXN0IGdldCBu ZXh0IGJ5dGUgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisJCSAgICB4ID0gem1pbmNoYXIoKTsK KwkJICAgIC8qIGRlYnVnKEYxMDEsInhnbmJ5dGUgQyB6bWluY2hhciIsIiIseCk7ICovCisjaWZu ZGVmIE5PQ1NFVFMKKwkJfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJaWYgKHggPCAwKSB7CQkv KiBDaGVjayBmb3IgRU9GICovCisJCSAgICBpZiAoeCA9PSAtMykgewkvKiBUaW1lb3V0IHJlYWRp bmcgZnJvbSBwaXBlICovCisJCQl0ID0gcnQ7CisJCQlzaXplID0gKGRwLWRhdGEpOworCQkJZGVi dWcoRjEwMSwiZ2V0cGt0IHRpbWVvdXQgc2l6ZSIsIiIsc2l6ZSk7CisJCQlyZXR1cm4oKHNpemUg PT0gMCkgPyB4IDogc2l6ZSk7CisJCSAgICB9CisJCSAgICBmaXJzdCA9IC0xOwkJLyogRmxhZyBl b2YgZm9yIG5leHQgdGltZS4gKi8KKwkJICAgIGlmICh4ID09IC0yKSBjeHNlZW4gPSAxOyAvKiBJ ZiBlcnJvciwgY2FuY2VsIHRoaXMgZmlsZS4gKi8KKwkJfQorCQlybmV4dCA9IChDSEFSKSAoeCAm IGZtYXNrKTsgLyogQXBwbHkgZmlsZSBtYXNrICovCisjaWZuZGVmIE5PQ1NFVFMKKwkJaWYgKHhs YXR5cGUgIT0gWExBX1VOSUNPREUpIHsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisJCSAgICBmZmMr KzsKKyNpZm5kZWYgTk9DU0VUUworCQkgICAgaWYgKHN4KQorCQkgICAgICBydCA9ICgqc3gpKHJ0 KTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisJCSAgICBpZiAoZG9jcmMgJiYgKHdoYXQgJiBXX1NF TkQpKQorCQkgICAgICBkb2ZpbGNyYyh4KTsKKworI2lmbmRlZiBOT0NTRVRTCisJCX0KKyNlbmRp ZiAvKiBOT0NTRVRTICovCisJICAgIH0KKyNpZmRlZiBLQU5KSQorCX0KKyNlbmRpZiAvKiBLQU5K SSAqLworLyoKKyAgQXQgdGhpcyBwb2ludCwgdGhlIGNoYXJhY3RlciB3ZSBqdXN0IHJlYWQgaXMg aW4gcm5leHQsCisgIGFuZCB0aGUgY2hhcmFjdGVyIHdlIGFyZSBhYm91dCB0byBlbmNvZGUgaW50 byB0aGUgcGFja2V0IGlzIGluIHJ0LgorKi8KKwlvZHAgPSBkcDsJCQkvKiBSZW1lbWJlciB3aGVy ZSB3ZSBzdGFydGVkLiAqLworIAl4eGxzID0geHhkbCA9IHh4cmMgPSB4eHNzID0geHhjcSA9IE5V TDsJLyogQ2xlYXIgdGhlc2UuICovCisvKgorICBOb3cgZW5jb2RlIHRoZSBjaGFyYWN0ZXIgYWNj b3JkaW5nIHRvIHRoZSBvcHRpb25zIHRoYXQgYXJlIGluIGVmZmVjdDoKKyAgICBjdGxwW106IHdo ZXRoZXIgdGhpcyBjb250cm9sIGNoYXJhY3RlciBuZWVkcyBwcmVmaXhpbmcuCisgICAgYmluYXJ5 OiB0ZXh0IG9yIGJpbmFyeSBtb2RlLgorICAgIHJwdGZsZzogcmVwZWF0IGNvdW50cyBlbmFibGVk LgorICAgIGVicWZsZzogOHRoLWJpdCBwcmVmaXhpbmcgZW5hYmxlZC4KKyAgICBsc2NhcHU6IGxv Y2tpbmcgc2hpZnRzIGVuYWJsZWQuCisqLworCWlmIChycHRmbGcpIHsJCQkvKiBSZXBlYXQgcHJv Y2Vzc2luZyBpcyBvbj8gKi8KKwkgICAgaWYgKCF1ZmxhZyAmJgorCQkvKgorCQkgKiBJZiB0aGUg bmV4dCBjaGFyIGlzIHJlYWxseSBDUkxGLCB0aGVuIHdlIGNhbm5vdAorCQkgKiBiZSBkb2luZyBh IHJlcGVhdCAodW5sZXNzIENSLENSLExGIHdoaWNoIGJlY29tZXMKKwkJICogIn4gPG4tMT4gQ1Ig Q1IgTEYiLCB3aGljaCBpcyBPSyBidXQgbm90IG1vc3QgZWZmaWNpZW50KS4KKwkJICogSSBqdXN0 IHBsYWluIGRvbid0IHdvcnJ5IGFib3V0IHRoaXMgY2FzZS4gIFRoZSBhY3R1YWwKKwkJICogY29u dmVyc2lvbiBmcm9tIE5MIHRvIENSTEYgaXMgZG9uZSBhZnRlciB0aGUgcnB0ZmxnIGlmLi4uCisJ CSAqLworCQkoIWZlb2wgfHwgYmluYXJ5IHx8IChmZW9sICYmIChybmV4dCAhPSBmZW9sKSkpICYm CisJCShydCA9PSBybmV4dCkgJiYgKGZpcnN0ID09IDApKSB7IC8qIEdvdCBhIHJ1bi4uLiAqLwor CQlpZiAoKytycHQgPCA5NCkgewkvKiBCZWxvdyBtYXgsIGp1c3QgY291bnQgKi8KKwkJICAgIGNv bnRpbnVlOwkJLyogZ28gYmFjayBhbmQgZ2V0IGFub3RoZXIgKi8KKwkJfSBlbHNlIGlmIChycHQg PT0gOTQpIHsJLyogUmVhY2hlZCBtYXgsIG11c3QgZHVtcCAqLworCQkgICAgeHhyYyA9IChDSEFS KSB0b2NoYXIocnB0KTsgLyogUHV0IHRoZSByZXBlYXQgY291bnQgaGVyZSAqLworCQkgICAgcnB0 biArPSBycHQ7CS8qIEFjY3VtdWxhdGUgaXQgZm9yIHN0YXRpc3RpY3MgKi8KKwkJICAgIHJwdCA9 IDA7CQkvKiBBbmQgcmVzZXQgaXQgKi8KKwkJfQorCSAgICB9IGVsc2UgaWYgKHJwdCA+IDEpIHsJ LyogTW9yZSB0aGFuIHR3byAqLworCQl4eHJjID0gKENIQVIpIHRvY2hhcigrK3JwdCk7IC8qIGFu ZCBjb3VudC4gKi8KKwkJcnB0biArPSBycHQ7CisJCXJwdCA9IDA7CQkvKiBSZXNldCByZXBlYXQg Y291bnRlci4gKi8KKwkgICAgfQorCSAgICAvKgorCSAgICAgIElmIChycHQgPT0gMSkgd2UgbXVz dCBlbmNvZGUgZXhhY3RseSB0d28gY2hhcmFjdGVycy4KKwkgICAgICBUaGlzIGlzIGRvbmUgbGF0 ZXIsIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgZW5jb2RlZC4KKwkgICAgKi8KKwl9CisJ LyogSWYgaXQncyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIuLi4gKi8KKwlpZiAoIXVmbGFnICYmICFi aW5hcnkgJiYgZmVvbCAmJiAocnQgPT0gZmVvbCkpIHsKKwkgICAgaWYgKGxzY2FwdSAmJiBsc3N0 YXRlKSB7CS8qIElmIFNISUZULVNUQVRFIGlzIFNISUZURUQgKi8KKwkJaWYgKGVicWZsZykgewkJ LyogSWYgc2luZ2xlIHNoaWZ0cyBlbmFibGVkLCAqLworCQkgICAgKmRwKysgPSAoQ0hBUikgZWJx OwkvKiBpbnNlcnQgYSBzaW5nbGUgc2hpZnQuICovCisJCX0gZWxzZSB7CQkvKiBPdGhlcndpc2Ug bXVzdCBzaGlmdCBpbi4gKi8KKwkJICAgICpkcCsrID0gbXljdGxxOwkvKiBJbnNlcnQgc2hpZnQt b3V0IGNvZGUgKi8KKwkJICAgICpkcCsrID0gJ08nOworCQkgICAgbHNzdGF0ZSA9IDA7CS8qIENo YW5nZSBzaGlmdCBzdGF0ZSAqLworCQl9CisJICAgIH0KKyNpZmRlZiBDS19TUEVFRAorCSAgICBp ZiAoY3RscFtDUl0pIHsKKwkJKmRwKysgPSBteWN0bHE7CQkvKiBJbnNlcnQgY2FycmlhZ2UgcmV0 dXJuIGRpcmVjdGx5ICovCisJCSpkcCsrID0gJ00nOworCQljY3ArKzsKKwkgICAgfSBlbHNlIHsK KwkJKmRwKysgPSBDUjsJCS8qIFBlcmhhcHMgbGl0ZXJhbGx5ICovCisJCWNjdSsrOworCSAgICB9 CisjZWxzZSAvKiAhQ0tfU1BFRUQgKi8KKwkgICAgKmRwKysgPSBteWN0bHE7CQkvKiBJbnNlcnQg Y2FycmlhZ2UgcmV0dXJuIGRpcmVjdGx5ICovCisJICAgICpkcCsrID0gJ00nOworCSAgICBjY3Ar KzsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCSAgICBydCA9IExGOwkJCS8qIE5vdyBtYWtlIG5l eHQgY2hhciBiZSBsaW5lZmVlZC4gKi8KKwl9CisvKgorICBOb3cgaGFuZGxlIHRoZSA4dGggYml0 IG9mIHRoZSBmaWxlIGNoYXJhY3Rlci4gIElmIHdlIGhhdmUgYW4gOC1iaXQKKyAgY29ubmVjdGlv biwgd2UgcHJlc2VydmUgdGhlIDh0aCBiaXQuICBJZiB3ZSBoYXZlIGEgNy1iaXQgY29ubmVjdGlv biwKKyAgd2UgZW1wbG95IGVpdGhlciBzaW5nbGUgb3IgbG9ja2luZyBzaGlmdHMgKGlmIHRoZXkg YXJlIGVuYWJsZWQpLgorKi8KKwlhNyA9IHJ0ICYgMDE3NzsJCQkvKiBHZXQgbG93IDcgYml0cyBv ZiBjaGFyYWN0ZXIgKi8KKwlpZiAocnQgJiAwMjAwKSB7CQkvKiA4LWJpdCBjaGFyYWN0ZXI/ICov CisJICAgIGlmIChsc2NhcHUpIHsJCS8qIExvY2tpbmcgc2hpZnRzIGVuYWJsZWQ/ICovCisJCWlm ICghbHNzdGF0ZSkgewkJLyogTm90IGN1cnJlbnRseSBzaGlmdGVkPyAqLworCQkgICAgeCA9IGxz bG9vaygwMjAwKTsJLyogTG9vayBhaGVhZCAqLworCQkgICAgaWYgKHggIT0gMCB8fCBlYnFmbGcg PT0gMCkgeyAvKiBMb2NraW5nIHNoaWZ0IGRlY2lzaW9uICovCisJCQl4eGxzID0gJ04nOwkgICAv KiBOZWVkIGxvY2tpbmcgc2hpZnQtb3V0ICovCisJCQlsc3N0YXRlID0gMTsJICAgLyogYW5kIGNo YW5nZSB0byBzaGlmdGVkIHN0YXRlICovCisJCSAgICB9IGVsc2UgaWYgKGVicWZsZykgeyAgIC8q IE5vdCB3b3J0aCBpdCAqLworCQkJeHhzcyA9IChDSEFSKSBlYnE7IC8qIFVzZSBzaW5nbGUgc2hp ZnQgKi8KKwkJICAgIH0KKwkJfQorCQlydCA9IChDSEFSKSBhNzsJCS8qIFJlcGxhY2UgY2hhcmFj dGVyIGJ5IDctYml0IHZhbHVlICovCisJICAgIH0gZWxzZSBpZiAoZWJxZmxnKSB7CS8qIDh0aCBi aXQgcHJlZml4aW5nIGlzIG9uPyAqLworCQl4eHNzID0gKENIQVIpIGVicTsJLyogSW5zZXJ0IHNp bmdsZSBzaGlmdCAqLworCQlydCA9IChDSEFSKSBhNzsJCS8qIFJlcGxhY2UgY2hhcmFjdGVyIGJ5 IDctYml0IHZhbHVlICovCisJICAgIH0KKy8qCisgIEluIGNhc2Ugd2UgaGF2ZSBhIDctYml0IGNv bm5lY3Rpb24gYW5kIHRoaXMgaXMgYW4gOC1iaXQgY2hhcmFjdGVyLCBBTkQKKyAgbmVpdGhlciBs b2NraW5nIHNoaWZ0cyBub3Igc2luZ2xlIHNoaWZ0cyBhcmUgZW5hYmxlZCwgdGhlbiB0aGUgY2hh cmFjdGVyJ3MKKyAgOHRoIGJpdCB3aWxsIGJlIGRlc3Ryb3llZCBpbiB0cmFuc21pc3Npb24sIGFu ZCBhIGJsb2NrIGNoZWNrIGVycm9yIHdpbGwKKyAgb2NjdXIuCisqLworCX0gZWxzZSBpZiAobHNj YXB1KSB7CQkvKiA3LWJpdCBjaGFyYWN0ZXIgKi8KKworCSAgICBpZiAobHNzdGF0ZSkgewkJLyog Q29tZXMgd2hpbGUgc2hpZnRlZCBvdXQ/ICovCisJCXggPSBsc2xvb2soMCk7CQkvKiBZZXMsIGxv b2sgYWhlYWQgKi8KKwkJaWYgKHggfHwgZWJxZmxnID09IDApIHsJLyogVGltZSB0byBzaGlmdCBp bi4gKi8KKwkJICAgIHh4bHMgPSAnTyc7CQkvKiBTZXQgc2hpZnQtaW4gY29kZSAqLworCQkgICAg bHNzdGF0ZSA9IDA7CS8qIEV4aXQgc2hpZnRlZCBzdGF0ZSAqLworCQl9IGVsc2UgaWYgKGVicWZs ZykgewkvKiBOb3Qgd29ydGggaXQsIHN0YXkgc2hpZnRlZCBvdXQgKi8KKwkJICAgIHh4c3MgPSAo Q0hBUikgZWJxOwkvKiBJbnNlcnQgc2luZ2xlIHNoaWZ0ICovCisJCX0KKwkgICAgfQorCX0KKwkv KiBJZiBkYXRhIGNoYXJhY3RlciBpcyBzaWduaWZpY2FudCB0byBsb2NraW5nIHNoaWZ0IHByb3Rv Y29sLi4uICovCisJaWYgKGxzY2FwdSAmJiAoYTcgPT0gU08gfHwgYTcgPT0gU0kgfHwgYTcgPT0g RExFKSkKKwkgIHh4ZGwgPSAnUCc7CQkJLyogSW5zZXJ0IGRhdGFsaW5rIGVzY2FwZSAqLworCisJ aWYgKAorI2lmZGVmIENLX1NQRUVECisJICAgIC8qCisJICAgICAgVGh3YXJ0IFlFVCBBTk9USEVS IHVud2FudGVkLCB1bm5lZWRlZCwgYW5kIHVubG92ZWQgc2lnbgorCSAgICAgIGV4dGVuc2lvbi4g IFRoaXMgb25lIHdhcyBwYXJ0aWN1bGFybHkgbmFzdHkgYmVjYXVzZSBpdCBwcmV2ZW50ZWQKKwkg ICAgICAyNTUgKFRlbG5ldCBJQUMpIGZyb20gYmVpbmcgcHJlZml4ZWQgb24gc29tZSBwbGF0Zm9y bXMgLS0gZS5nLgorCSAgICAgIFZNUyB3aXRoIFZBWCBDIC0tIGJ1dCBub3Qgb3RoZXJzLCB0aHVz IGNhdXNpbmcgZmlsZSB0cmFuc2ZlcnMgdG8KKwkgICAgICBmYWlsIG9uIFRlbG5ldCBjb25uZWN0 aW9ucyBieSBzZW5kaW5nIGJhcmUgSUFDcy4gIE5vdCB0byBtZW50aW9uCisJICAgICAgdGhlIHN0 cmF5IG1lbW9yeSByZWZlcmVuY2UuICBTaWduZWQgY2hhcnMgYXJlIGEgQkFEIGlkZWEuCisJICAg ICovCisJICAgIGN0bHBbKHVuc2lnbmVkKShydCAmIDB4ZmYpXQkvKiBMb3Agb2ZmIGFueSAic2ln biIgZXh0ZW5zaW9uICovCisjZWxzZQorCSAgICAoYTcgPCBTUCkgfHwgKGE3ID09IERFTCkKKyNl bmRpZiAvKiBDS19TUEVFRCAqLworCSAgICApIHsJCQkJLyogRG8gY29udHJvbCBwcmVmaXhpbmcg aWYgbmVjZXNzYXJ5ICovCisJICAgIHh4Y3EgPSBteWN0bHE7CQkvKiBUaGUgcHJlZml4ICovCisJ ICAgIGNjcCsrOwkJCS8qIENvdW50IGl0ICovCisJICAgIHJ0ID0gKENIQVIpIGN0bChydCk7CS8q IFVuY29udHJvbGxpZnkgdGhlIGNoYXJhY3RlciAqLworCX0KKyNpZmRlZiBDS19TUEVFRAorCWVs c2UgaWYgKChhNyA8IFNQKSB8fCAoYTcgPT0gREVMKSkgLyogQ291bnQgYW4gdW5wcmVmaXhlZCBv bmUgKi8KKwkgIGNjdSsrOworI2VuZGlmIC8qIENLX1NQRUVEICovCisKKwlpZiAoYTcgPT0gbXlj dGxxKQkJLyogQWx3YXlzIHByZWZpeCB0aGUgY29udHJvbCBwcmVmaXggKi8KKwkgIHh4Y3EgPSBt eWN0bHE7CisKKwlpZiAoKHJwdGZsZykgJiYgKGE3ID09IHJwdHEpKQkvKiBJZiBpdCdzIHRoZSBy ZXBlYXQgcHJlZml4LCAqLworCSAgeHhjcSA9IG15Y3RscTsJCS8qIHByZWZpeCBpdCBpZiBkb2lu ZyByZXBlYXQgY291bnRzICovCisKKwlpZiAoKGVicWZsZykgJiYgKGE3ID09IGVicSkpCS8qIFBy ZWZpeCB0aGUgOHRoLWJpdCBwcmVmaXggKi8KKwkgIHh4Y3EgPSBteWN0bHE7CQkvKiBpZiBkb2lu ZyA4dGgtYml0IHByZWZpeGVzICovCisKKy8qIE5vdyBjb25zdHJ1Y3QgdGhlIGVudGlyZSBzZXF1 ZW5jZSAqLworCisJaWYgKHh4bHMpIHsgKmRwKysgPSBteWN0bHE7ICpkcCsrID0geHhsczsgfSAv KiBMb2NraW5nIHNoaWZ0ICovCisJb2RwMiA9IGRwOwkJCQkgICAgLyogKFNhdmUgdGhpcyBwbGFj ZSkgKi8KKwlpZiAoeHhkbCkgeyAqZHArKyA9IG15Y3RscTsgKmRwKysgPSB4eGRsOyB9IC8qIERh dGFsaW5rIGVzY2FwZSAqLworCWlmICh4eHJjKSB7ICpkcCsrID0gKENIQVIpIHJwdHE7ICpkcCsr ID0geHhyYzsgfSAvKiBSZXBlYXQgY291bnQgKi8KKwlpZiAoeHhzcykgeyAqZHArKyA9IChDSEFS KSBlYnE7IH0gICAgICAgICAgIC8qIFNpbmdsZSBzaGlmdCAqLworCWlmICh4eGNxKSB7ICpkcCsr ID0gbXljdGxxOyB9CSAgICAJICAgIC8qIENvbnRyb2wgcHJlZml4ICovCisJKmRwKysgPSBydDsJ CQkvKiBGaW5hbGx5LCB0aGUgY2hhcmFjdGVyIGl0c2VsZiAqLworCisJaWYgKHJwdCA9PSAxKSB7 CQkJLyogRXhhY3RseSB0d28gY29waWVzPyAqLworCSAgICBycHQgPSAwOworCSAgICBwMiA9IGRw OwkJCS8qIFNhdmUgcGxhY2UgdGVtcG9yYXJpbHkgKi8KKwkgICAgZm9yIChwMSA9IG9kcDI7IHAx IDwgcDI7IHAxKyspIC8qIENvcHkgdGhlIG9sZCBjaGFycyBvdmVyIGFnYWluICovCisJICAgICAg KmRwKysgPSAqcDE7CisJICAgIGlmICgocDItZGF0YSkgPD0gYnVmbWF4KSBvZHAgPSBwMjsgLyog Q2hlY2sgcGFja2V0IGJvdW5kcyAqLworCSAgICBpZiAoKHAyLWRhdGEpIDwgYnVmbWF4KSBvZHAg PSBwMjsgLyogQ2hlY2sgcGFja2V0IGJvdW5kcyAqLworCX0KKwlydCA9IHJuZXh0OwkJCS8qIE5l eHQgY2hhcmFjdGVyIGlzIG5vdyBjdXJyZW50LiAqLworCisvKiBEb25lIGVuY29kaW5nIHRoZSBj aGFyYWN0ZXIuICBOb3cgdGFrZSBjYXJlIG9mIHBhY2tldCBidWZmZXIgb3ZlcmZsb3cuICovCisK KwlpZiAoKGRwLWRhdGEpID49IGJ1Zm1heCkgewkvKiBJZiB0b28gYmlnLCBzYXZlIHNvbWUgZm9y IG5leHQuICovCisKKwkgICAgZGVidWcoRjAwMCwiZ2V0cGt0IEVPUCIsIiIscnQpOworCisJICAg IHNpemUgPSAoZHAtZGF0YSk7CQkvKiBDYWxjdWxhdGUgdGhlIHNpemUuICovCisJICAgICpkcCA9 ICdcMCc7CQkJLyogTWFyayB0aGUgZW5kLiAqLworCSAgICBpZiAobWVtc3RyKSB7CQkvKiBObyBs ZWZ0b3ZlcnMgZm9yIG1lbW9yeSBzdHJpbmdzICovCisJCWlmIChydCkJCQkvKiBDaGFyIHdlIGRp ZG4ndCBlbmNvZGUgeWV0ICovCisJCSAgbWVtcHRyLS07CQkvKiAoZm9yIGVuY3N0cigpKSAqLwor CQlyZXR1cm4oc2l6ZSk7CisJICAgIH0KKwkgICAgaWYgKChkcC1kYXRhKSA+IGJ1Zm1heCkgewkv KiBpZiBwYWNrZXQgaXMgb3ZlcmZ1bGwgKi8KKwkJLyogY29weSB0aGUgcGFydCB0aGF0IGRvZXNu J3QgZml0IGludG8gdGhlIGxlZnRvdmVyIGJ1ZmZlciwgKi8KKwkJLyogdGFraW5nIGNhcmUgbm90 IHRvIHNwbGl0IGEgcHJlZml4ZWQgc2VxdWVuY2UuICovCisJCWludCBpOworCQlubGVmdCA9IGRw IC0gb2RwOworCQlmb3IgKGkgPSAwLCBwMSA9IGxlZnRvdmVyLCBwMiA9IG9kcDsgaSA8IG5sZWZ0 OyBpKyspIHsKKwkJICAgICpwMSsrID0gKnAyKys7CisJCSAgICBpZiAobWVtc3RyKSBtZW1wdHIt LTsgLyogKGZvciBlbmNzdHIpICovCisJCX0KKwkJZGVidWcoRjExMSwiZ2V0cGt0IGxlZnRvdmVy IixsZWZ0b3ZlcixzaXplKTsKKwkJZGVidWcoRjEwMSwiZ2V0cGt0IG9zaXplIiwiIiwob2RwLWRh dGEpKTsKKwkJc2l6ZSA9IChvZHAtZGF0YSk7CS8qIFJldHVybiB0cnVuY2F0ZWQgcGFja2V0LiAq LworCQkqb2RwID0gJ1wwJzsJCS8qIE1hcmsgdGhlIG5ldyBlbmQgKi8KKwkgICAgfQorCSAgICB0 ID0gcnQ7CQkJLyogU2F2ZSBmb3IgbmV4dCB0aW1lICovCisJICAgIHJldHVybihzaXplKTsKKwl9 CisgICAgfQkJCQkJLyogT3RoZXJ3aXNlLCBrZWVwIGZpbGxpbmcuICovCisgICAgc2l6ZSA9IChk cC1kYXRhKTsJCQkvKiBFbmQgb2YgZmlsZSAqLworICAgICpkcCA9ICdcMCc7CQkJCS8qIE1hcmsg dGhlIGVuZCBvZiB0aGUgZGF0YS4gKi8KKyAgICBkZWJ1ZyhGMTExLCJnZXRwa3QgZW9mL2VvdCIs ZGF0YSxzaXplKTsgLyogRmVsbCB0aHJ1IGJlZm9yZSBwYWNrZXQgZnVsbCwgKi8KKyAgICByZXR1 cm4oc2l6ZSk7CQkgICAgIC8qIHJldHVybiBwYXJ0aWFsbHkgZmlsbGVkIGxhc3QgcGFja2V0LiAq LworfQorCisvKiAgVCBJIE4gSSBUICAtLSAgSW5pdGlhbGl6ZSBhIHRyYW5zYWN0aW9uICAqLwor CitpbnQgZXBrdHJjdmQgPSAwLCBlcGt0c2VudCA9IDA7CisKKy8qCisgIENhbGwgd2l0aCAxIHRv IHJlc2V0IGV2ZXJ5dGhpbmcgYmVmb3JlIFMvSS9ZIG5lZ290aWF0aW9uLCBvciAwIHRvCisgIHJl c2V0IG9ubHkgdGhlIHRoaW5ncyB0aGF0IGFyZSBub3Qgc2V0IGluIHRoZSBTL0kvWSBuZWdvdGlh dGlvbi4KKyAgUmV0dXJucyAtMSBvbiBmYWlsdXJlIChlLmcuIHRvIGNyZWF0ZSBwYWNrZXQgYnVm ZmVycyksIDAgb24gc3VjY2Vzcy4KKyovCitpbnQKK3Rpbml0KGZsYWcpIGludCBmbGFnOyB7Cisg ICAgaW50IHg7CisjaWZkZWYgQ0tfVElNRVJTCisgICAgZXh0ZXJuIGludCBydHRmbGc7CisjZW5k aWYgLyogQ0tfVElNRVJTICovCisgICAgZXh0ZXJuIGludCByY3Z0aW1vOworICAgIGV4dGVybiBp bnQgZmF0YWxpbzsKKworICAgIGRlYnVnKEYxMDEsInRpbml0IGZsYWciLCIiLGZsYWcpOworCisg ICAgKmVwa3Rtc2cgPSBOVUw7CisgICAgZXBrdHJjdmQgPSAwOworICAgIGVwa3RzZW50ID0gMDsK KyAgICBvZnBlcm1zID0gIiI7CisgICAgZGlyYWN0aXZlID0gMDsJCQkvKiBESVIgLyBSRU1PVEUg RElSIG5vdCBhY3RpdmUgKi8KKyAgICBpbnRlcnJ1cHRlZCA9IDA7CQkJLyogTm90IGludGVycnVw dGVkICovCisgICAgZmF0YWxpbyA9IDA7CQkJLyogTm8gZmF0YWwgaS9vIGVycm9yICovCisgICAg aWYgKHNlcnZlcikgeworCW1vdmluZyAgPSAwOworCXBpcGVzZW5kID0gMDsgLyogVGhpcyB0YWtl cyBjYXJlIG9mIG11bHRpcGxlIEdFVHMgc2VudCB0byBhIHNlcnZlci4gKi8KKyAgICB9CisgICAg YmVzdGxlbiA9IDA7CQkJLyogRm9yIHBhY2tldCBsZW5ndGggb3B0aW1pemF0aW9uICovCisgICAg bWF4c2VuZCA9IDA7CQkJLyogQmlnZ2VzdCBkYXRhIGZpZWxkIHdlIGNhbiBzZW5kICovCisjaWZk ZWYgU1RSRUFNSU5HCisgICAgc3RyZWFtb2sgPSAwOwkJCS8qIFN0cmVhbWluZyBuZWdvdGlhdGVk ICovCisgICAgc3RyZWFtaW5nID0gMDsJCQkvKiBTdHJlYW1pbmcgYmVpbmcgZG9uZSBub3cgKi8K KyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKworICAgIGJpbmFyeSA9IGJfc2F2ZTsJCQkvKiAuLi4g Ki8KKyAgICBnbmZfYmluYXJ5ID0gYmluYXJ5OwkJLyogUGVyLWZpbGUgdHJhbnNmZXIgbW9kZSAq LworICAgIHJldHJhbnMgPSAwOwkJCS8qIFBhY2tldCByZXRyYW5zbWlzc2lvbiBjb3VudCAqLwor ICAgIHNuZHR5cCA9IDA7CQkJCS8qIE5vIHByZXZpb3VzIHBhY2tldCAqLworICAgIHhmbGcgPSAw OwkJCQkvKiBSZXNldCB4LXBhY2tldCBmbGFnICovCisgICAgbWVtc3RyID0gMDsJCQkJLyogUmVz ZXQgbWVtb3J5LXN0cmluZyBmbGFnICovCisgICAgbWVtcHRyID0gTlVMTDsJCQkvKiAgYW5kIGJ1 ZmZlciBwb2ludGVyICovCisgICAgZnVuY3N0ciA9IDA7CQkJLyogUmVzZXQgInJlYWQgZnJvbSBm dW5jdGlvbiIgZmxhZyAqLworICAgIGZ1bmNwdHIgPSBOVUxMOwkJCS8qICBhbmQgZnVuY3Rpb24g cG9pbnRlciAqLworICAgIGF1dG9wYXIgPSAwOwkJCS8qIEF1dG9tYXRpYyBwYXJpdHkgZGV0ZWN0 aW9uIGZsYWcgKi8KKworICAgIC8qIFRoaXMgc3R1ZmYgaXMgb25seSBmb3IgQkVGT1JFIFMvSS9Z IG5lZ290aWF0aW9uLCBub3QgYWZ0ZXIgKi8KKworICAgIGlmIChmbGFnKSB7CisJaWYgKGJjdGYp IHsJCSAgICAgIC8qIEZvcmNlIEJsb2NrIENoZWNrIDMgb24gYWxsIHBhY2tldHMgKi8KKwkgICAg YmN0dSA9IGJjdGwgPSAzOwkJLyogU2V0IGJsb2NrIGNoZWNrIHR5cGUgdG8gMyAqLworCX0gZWxz ZSB7CisJICAgIGJjdHUgPSBiY3RsID0gMTsJCS8qIFJlc2V0IGJsb2NrIGNoZWNrIHR5cGUgdG8g MSAqLworCX0KKwlteWluaXRbMF0gPSAnXDAnOwkJLyogSGF2ZW4ndCBzZW50IGluaXQgc3RyaW5n IHlldCAqLworCXJxZiA9IC0xOwkJCS8qIFJlc2V0IDh0aC1iaXQtcXVvdGUgcmVxdWVzdCBmbGFn ICovCisJZWJxID0gTVlFQlE7CQkJLyogUmVzZXQgOHRoLWJpdCBxdW90aW5nIHN0dWZmICovCisJ ZWJxZmxnID0gMDsJCQkvKiA4dGggYml0IHF1b3Rpbmcgbm90IGVuYWJsZWQgKi8KKwllYnFzZW50 ID0gMDsJCQkvKiBObyA4dGgtYml0IHByZWZpeCBiaWQgc2VudCB5ZXQgKi8KKwlzcSA9ICdZJzsJ CQkvKiA4dGgtYml0IHByZWZpeCBiaWQgSSB1c3VhbGx5IHNlbmQgKi8KKwlzcHNpeiA9IHNwc2l6 cjsJCQkvKiBJbml0aWFsIHNlbmQtcGFja2V0IHNpemUgKi8KKwlkZWJ1ZyhGMTAxLCJ0aW5pdCBz cHNpeiIsIiIsc3BzaXopOworCXdzbG90cyA9IDE7CQkJLyogT25lIHdpbmRvdyBzbG90ICovCisJ d3Nsb3RuID0gMTsJCQkvKiBObyB3aW5kb3cgbmVnb3RpYXRlZCB5ZXQgKi8KKwlqdXN0b25lID0g MDsJCQkvKiAoc2hvdWxkIHRoaXMgYmUgemVybydkIGhlcmU/KSAqLworCXdob2FyZXVbMF0gPSBO VUw7CQkvKiBQYXJ0bmVyJ3Mgc3lzdGVtIHR5cGUgKi8KKwlzeXNpbmRleCA9IC0xOworCXdlYXJl YWxpa2UgPSAwOworCXdoYXQgPSBXX0lOSVQ7CQkJLyogRG9pbmcgbm90aGluZyBzbyBmYXIuLi4g Ki8KKyAgICB9CisgICAgZm5jbnYgPSBmX3NhdmU7CQkJLyogQmFjayB0byB3aGF0IHVzZXIgbGFz dCBzYWlkICovCisgICAgcGt0bnVtID0gMDsJCQkJLyogSW5pdGlhbCBwYWNrZXQgbnVtYmVyIHRv IHNlbmQgKi8KKyAgICBjeHNlZW4gPSBjenNlZW4gPSBkaXNjYXJkID0gMDsJLyogUmVzZXQgaW50 ZXJydXB0IGZsYWdzICovCisgICAgKmZpbG5hbSA9ICdcMCc7CQkJLyogQ2xlYXIgZmlsZSBuYW1l ICovCisgICAgc3BrdGwgPSAwOwkJCQkvKiBBbmQgaXRzIGxlbmd0aCAqLworICAgIG5ha3N0YXRl ID0gMDsJCQkvKiBBc3N1bWUgd2UncmUgbm90IGluIGEgTkFLIHN0YXRlICovCisgICAgbnVtZXJy cyA9IDA7CQkJLyogVHJhbnNtaXNzaW9uIGVycm9yIGNvdW50ZXIgKi8KKyAgICBpZGxldG1vID0g MDsJCQkvKiBObyBpZGxlIHRpbWVvdXQgeWV0ICovCisgICAgaWYgKHNlcnZlcikgeyAJCQkvKiBJ ZiBhY3RpbmcgYXMgc2VydmVyLCAqLworCWlmIChzcnZpZGwgPiAwKQkJCS8qIElmIGFuIGlkbGUg dGltZW91dCBpcyBnaXZlbiAqLworCSAgdGltaW50ID0gc3J2aWRsOworCWVsc2UKKwkgIHRpbWlu dCA9IHNydnRpbTsJCS8qIHVzZSBzZXJ2ZXIgdGltZW91dCBpbnRlcnZhbC4gKi8KKyAgICB9IGVs c2UgewkJCQkvKiBPdGhlcndpc2UgKi8KKwl0aW1pbnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVmKTsJ LyogYW5kIHVzZSBsb2NhbCB0aW1lb3V0IHZhbHVlICovCisgICAgfQorICAgIGRlYnVnKEYxMDEs InRpbml0IHRpbWludCIsIiIsdGltaW50KTsKKworI2lmZGVmIENLX1RJTUVSUworICAgIGlmIChy dHRmbGcgJiYgdGltaW50ID4gMCkJCS8qIFVzaW5nIHJvdW5kLXRyaXAgdGltZXJzPyAqLworICAg ICAgcnR0aW5pdCgpOworICAgIGVsc2UKKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKyAgICAgIHJj dnRpbW8gPSB0aW1pbnQ7CisKKyAgICB3aW5sbyA9IDA7CQkJCS8qIFBhY2tldCAwIGlzIGF0IHdp bmRvdy1sb3cgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0aW5pdCB3aW5sbyIsIiIsd2lubG8pOworICAg IHggPSBta3NidWYoMSk7CQkJLyogTWFrZSBhIDEtc2xvdCBzZW5kLXBhY2tldCBidWZmZXIgKi8K KyAgICBpZiAoeCA8IDApIHJldHVybih4KTsKKyAgICB4ID0gZ2V0c2J1ZigwKTsJCQkvKiBBbGxv Y2F0ZSBmaXJzdCBzZW5kLWJ1ZmZlci4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0aW5pdCBnZXRzYnVm IiwiIix4KTsKKyAgICBpZiAoeCA8IDApIHJldHVybih4KTsKKyAgICBkdW1wc2J1ZigpOworICAg IHggPSBta3JidWYod3Nsb3RzKTsJCQkvKiAmIGEgMS1zbG90IHJlY2VpdmUtcGFja2V0IGJ1ZmZl ci4gKi8KKyAgICBpZiAoeCA8IDApIHJldHVybih4KTsKKyAgICBsc3N0YXRlID0gMDsJCQkvKiBJ bml0aWFsaXplIGxvY2tpbmcgc2hpZnQgc3RhdGUgKi8KKyAgICBpZiAoYXV0b3BhdGgpIHsJCQkv KiBTRVQgUkVDRUlWRSBQQVRITkFNRVMgQVVUTyBmaXh1cCAqLworCWZucnBhdGggPSBQQVRIX0FV VE87CisJYXV0b3BhdGggPSAwOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK1ZPSUQKK3Br dGluaXQoKSB7CQkJCS8qIEluaXRpYWxpemUgcGFja2V0IHNlcXVlbmNlICovCisgICAgcGt0bnVt ID0gMDsJCQkJLyogbnVtYmVyICYgd2luZG93IGxvdy4gKi8KKyAgICB3aW5sbyA9IDA7CisgICAg ZGVidWcoRjEwMSwicGt0aW5pdCB3aW5sbyIsIiIsd2lubG8pOworfQorCisvKiAgUiBJIE4gSSBU ICAtLSAgUmVzcG9uZCB0byBTIG9yIEkgcGFja2V0ICAqLworCitWT0lECityaW5pdChkKSBDSEFS ICpkOyB7CisgICAgY2hhciAqdHAgPSBOVUxMOworICAgIHp0aW1lKCZ0cCk7CisgICAgdGxvZyhG MTEwLCJUcmFuc2FjdGlvbiBiZWdpbnMiLHRwLDBMKTsgLyogTWFrZSB0cmFuc2FjdGlvbiBsb2cg ZW50cnkgKi8KKyAgICB0bG9nKEYxMTAsIkdsb2JhbCBmaWxlIG1vZGU6IiwgYmluYXJ5ID8gImJp bmFyeSIgOiAidGV4dCIsIDBMKTsKKyAgICB0bG9nKEYxMTAsIkNvbGxpc2lvbiBhY3Rpb246Iiwg Zm5jbmFtW2ZuY2FjdF0sMCk7CisgICAgdGxvZyhGMTAwLCIiLCIiLDApOworICAgIGRlYnVnKEYx MDEsInJpbml0IGZuY2FjdCIsIiIsZm5jYWN0KTsKKyAgICBmaWxjbnQgPSBmaWxyZWogPSAwOwkJ LyogSW5pdCBmaWxlIGNvdW50ZXJzICovCisgICAgc3BhcihkKTsKKyAgICBhY2sxKHJwYXIoKSk7 CisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBpZiAoKGxvY2FsKSAmJiAoIXF1aWV0KSkgICAgICAg ICAgICAvKiBPbmx5IGRvIHRoaXMgaWYgbG9jYWwgJiBub3QgcXVpZXQgKi8KKyAgICAgICAgY29u c3RhX210KCk7ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCB0aGUgYXN5bmNoIHJlYWQgdGFz ayAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCit9CisKKworLyogIFIgRSBTIEUgVCBDICAt LSAgUmVzZXQgcGVyLXRyYW5zYWN0aW9uIGNoYXJhY3RlciBjb3VudGVycyAqLworCitWT0lECity ZXNldGMoKSB7CisgICAgcnB0biA9IDA7CQkJCS8qIFJlcGVhdCBjb3VudHMgKi8KKyAgICBmc2Vj cyA9IGZsY2kgPSBmbGNvID0gKENLX09GRl9UKTA7CS8qIEZpbGUgY2hhcnMgaW4gYW5kIG91dCAq LworI2lmZGVmIEdGVElNRVIKKyAgICBmcGZzZWNzID0gMC4wOworI2VuZGlmIC8qIEdGVElNRVIg Ki8KKyAgICB0ZmMgPSB0bGNpID0gdGxjbyA9IChDS19PRkZfVCkwOwkvKiBUb3RhbCBmaWxlLCBs aW5lIGNoYXJzIGluICYgb3V0ICovCisgICAgY2N1ID0gY2NwID0gMEw7CQkJLyogQ29udHJvbC1j aGFyIHN0YXRpc3RpY3MgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgZnNpemUgPSAoQ0tfT0ZGX1Qp LTE7CQkvKiBGaWxlIHNpemUgKi8KKyNlbHNlCisgICAgaWYgKCEod2hhdCAmIFdfU0VORCkpCisg ICAgICBmc2l6ZSA9IChDS19PRkZfVCktMTsKKyAgICBkZWJ1ZyhGMTAxLCJyZXNldGMgZnNpemUi LCIiLGZzaXplKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgdGltZW91dHMgPSByZXRyYW5z ID0gMDsJCS8qIFRpbWVvdXRzLCByZXRyYW5zbWlzc2lvbnMgKi8KKyAgICBzcGFja2V0cyA9IHJw YWNrZXRzID0gMDsJCS8qIFBhY2tldCBjb3VudHMgb3V0ICYgaW4gKi8KKyAgICBjcnVuY2hlZCA9 IDA7CQkJLyogQ3J1bmNoZWQgcGFja2V0cyAqLworICAgIHdjdXIgPSAwOwkJCQkvKiBDdXJyZW50 IHdpbmRvdyBzaXplICovCisgICAgd21heCA9IDA7CQkJCS8qIE1heGltdW0gd2luZG93IHNpemUg dXNlZCAqLworICAgIHBlYWtjcHMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlYWsg Y2hhcnMgcGVyIHNlY29uZCAqLworfQorCisvKiAgUyBJIE4gSSBUICAtLSAgR2V0ICYgdmVyaWZ5 IGZpcnN0IGZpbGUgbmFtZSwgdGhlbiBzZW5kIFNlbmQtSW5pdCBwYWNrZXQgKi8KKy8qCisgUmV0 dXJuczoKKyAgIDEgaWYgc2VuZCBvcGVyYXRpb24gYmVnaW5zIHN1Y2Nlc3NmdWxseQorICAgMCBp ZiBzZW5kIG9wZXJhdGlvbiBmYWlscworKi8KKyNpZmRlZiBEWU5BTUlDCitjaGFyICpjbWFyZ2J1 ZiA9IE5VTEw7CisjZWxzZQorY2hhciBjbWFyZ2J1ZltDS01BWFBBVEgrMV07CisjZW5kaWYgLyog RFlOQU1JQyAqLworY2hhciAqY21hcmdwWzJdOworCitWT0lECitmbmxpc3QoKSB7CisgICAgaWYg KCFjYWxpYnJhdGUpCisgICAgICBzbmRzcmMgPSAobmZpbHMgPCAwKSA/IC0xIDogbmZpbHM7IC8q IFNvdXJjZSBmb3IgZmlsZW5hbWVzICovCisjaWZkZWYgRFlOQU1JQworICAgIGlmICghY21hcmdi dWYgJiYgIShjbWFyZ2J1ZiA9IG1hbGxvYyhDS01BWFBBVEgrMSkpKQorICAgICAgZmF0YWwoImZu bGlzdDogbm8gbWVtb3J5IGZvciBjbWFyZ2J1ZiIpOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyAg ICBjbWFyZ2J1ZlswXSA9IE5VTDsJCQkvKiBJbml0aWFsaXplIG5hbWUgYnVmZmVyICovCisKKyAg ICBkZWJ1ZyhGMTAxLCJmbmxpc3QgbmZpbHMiLCIiLG5maWxzKTsKKyAgICBkZWJ1ZyhGMTEwLCJm bmxpc3QgY21hcmciLGNtYXJnLDApOworICAgIGRlYnVnKEYxMTAsImZubGlzdCBjbWFyZzIiLGNt YXJnMiwwKTsKKyAgICBpZiAoIWNtYXJnMikgY21hcmcyID0gIiI7CisgICAgaWYgKG5maWxzID09 IDApIHsJCQkvKiBTZW5kaW5nIGZyb20gc3RkaW4gb3IgbWVtb3J5LiAqLworCWlmICgoY21hcmcy ICE9IE5VTEwpICYmICgqY21hcmcyKSkgeworCSAgICBjbWFyZyA9IGNtYXJnMjsJCS8qIElmIEYg cGFja2V0LCAiYXMtbmFtZSIgaXMgdXNlZCAqLworCSAgICBjbWFyZzIgPSAiIjsJCS8qIGlmIHBy b3ZpZGVkICovCisJfSBlbHNlCisJICBjbWFyZyA9ICJzdGRpbiI7CQkvKiBvdGhlcndpc2UganVz dCB1c2UgInN0ZGluIiAqLworCWNrc3RybmNweShjbWFyZ2J1ZixjbWFyZyxDS01BWFBBVEgrMSk7 CisJY21hcmdwWzBdID0gY21hcmdidWY7CisJY21hcmdwWzFdID0gIiI7CisJY21saXN0ID0gY21h cmdwOworCW5maWxzID0gMTsKKyAgICB9Cit9CisKK2ludAorc2luaXQoKSB7CisgICAgaW50IHg7 CQkJCS8qIFdvcmtlciBpbnQgKi8KKyAgICBjaGFyICp0cCwgKnhwLCAqbTsJCQkvKiBXb3JrZXIg c3RyaW5nIHBvaW50ZXJzICovCisKKyAgICBmaWxjbnQgPSBmaWxyZWogPSAwOwkJLyogSW5pdGlh bGl6ZSBmaWxlIGNvdW50ZXJzICovCisKKyAgICBmbmxpc3QoKTsKKworICAgIHhwID0gIiI7Cisg ICAgaWYgKG5maWxzIDwgMCkgeworI2lmZGVmIFBJUEVTRU5ECisJaWYgKHVzZXBpcGVzICYmIHBy b3RvY29sID09IFBST1RPX0sgJiYgKmNtYXJnID09ICchJykgeworCSAgICBwaXBlc2VuZCA9IDE7 CisJICAgIGNtYXJnKys7CisJfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisJeHAgPSBjbWFyZzsK KyAgICB9IGVsc2UgeworI2lmbmRlZiBOT01TRU5ECisJaWYgKGFkZGxpc3QpCisJICB4cCA9IGZp bGVoZWFkLT5mbF9uYW1lOworCWVsc2UKKyNlbmRpZiAvKiBOT01TRU5EICovCisJICBpZiAoZmls ZWZpbGUpCisJICAgIHhwID0gZmlsZWZpbGU7CisJICBlbHNlIGlmIChjYWxpYnJhdGUpCisJICAg IHhwID0gIkNhbGlicmF0aW9uIjsKKwkgIGVsc2UKKwkgICAgeHAgPSAqY21saXN0OworICAgIH0K KyAgICBkZWJ1ZyhGMTEwLCJzaW5pdCB4cCIseHAsMCk7CisgICAgeCA9IGduZmlsZSgpOwkJCS8q IEdldCBmaXJzdCBmaWxlbmFtZS4gKi8KKyAgICBkZWJ1ZyhGMTExLCJzaW5pdCBnbmZpbGUiLGNr aXRvYShnbmZlcnJvcikseCk7CisgICAgaWYgKHggPT0gMCkgeCA9IGduZmVycm9yOwkJLyogSWYg bm9uZSwgZ2V0IGVycm9yIHJlYXNvbiAqLworICAgIG0gPSBOVUxMOwkJCQkvKiBFcnJvciBtZXNz YWdlIHBvaW50ZXIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzaW5pdCBnbmZpbCIsIiIseCk7CisgICAg c3dpdGNoICh4KSB7CisgICAgICBjYXNlIC02OiBtID0gIk5vIGZpbGVzIG1lZXQgc2VsZWN0aW9u IGNyaXRlcmlhIjsgYnJlYWs7CisgICAgICBjYXNlIC01OiBtID0gIlRvbyBtYW55IGZpbGVzIG1h dGNoIHdpbGRjYXJkIjsgYnJlYWs7CisgICAgICBjYXNlIC00OiBtID0gIkNhbmNlbGxlZCI7IGJy ZWFrOworICAgICAgY2FzZSAtMzogbSA9ICJSZWFkIGFjY2VzcyBkZW5pZWQiOyBicmVhazsKKyAg ICAgIGNhc2UgLTI6IG0gPSAiRmlsZSBpcyBub3QgcmVhZGFibGUiOyBicmVhazsKKyNpZmRlZiBD T01NRU5UCisgICAgICBjYXNlIC0xOiBtID0gaXN3aWxkKGZpbG5hbSkgPyAiTm8gZmlsZXMgbWF0 Y2giIDogIkZpbGUgbm90IGZvdW5kIjsKKwlicmVhazsKKyAgICAgIGNhc2UgIDA6IG0gPSAiTm8g ZmlsZXNwZWMgZ2l2ZW4hIjsgYnJlYWs7CisjZWxzZQorICAgICAgY2FzZSAgMDoKKyAgICAgIGNh c2UgLTE6IG0gPSBpc3dpbGQoZmlsbmFtKSA/ICJObyBmaWxlcyBtYXRjaCIgOiAiRmlsZSBub3Qg Zm91bmQiOworCWJyZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgIGRlZmF1bHQ6CisJ YnJlYWs7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInNpbml0IG5maWxzIiwiIixuZmlscyk7Cisg ICAgZGVidWcoRjExMCwic2luaXQgZmlsbmFtIixmaWxuYW0sMCk7CisgICAgaWYgKHggPCAxKSB7 CQkJLyogRGlkbid0IGdldCBhIGZpbGUuICovCisJZGVidWcoRjExMSwic2luaXQgbXNnIixtLHgp OworCWlmIChzZXJ2ZXIpIHsJCQkvKiBEb2luZyBHRVQgY29tbWFuZCAqLworCSAgICBlcnJwa3Qo KENIQVIgKiltKTsJCS8qIHNvIHNlbmQgRXJyb3IgcGFja2V0LiAqLworCX0gZWxzZSBpZiAoIWxv Y2FsKSB7IAkJLyogRG9pbmcgU0VORCBjb21tYW5kICovCisJICAgIGludGVycnVwdGVkID0gMTsJ CS8qIChUbyBzdXBwcmVzcyBoaW50KSAqLworCSAgICBwcmludGYoIj8lc1xyXG4iLG0pOworCX0g ZWxzZSB7CisJICAgIHh4c2NyZWVuKFNDUl9FTSwwLDBsLG0pOwkvKiBzbyBwcmludCBtZXNzYWdl LiAqLworCX0KKwl0bG9nKEYxMTAseHAsbSwwTCk7CQkvKiBNYWtlIHRyYW5zYWN0aW9uIGxvZyBl bnRyeS4gKi8KKwlmcmVlcmJ1Zihyc2VxdGJsWzBdKTsJCS8qIEZyZWUgdGhlIGJ1ZmZlciB0aGUg R0VUIGNhbWUgaW4uICovCisJcmV0dXJuKDApOwkJCS8qIFJldHVybiBmYWlsdXJlIGNvZGUgKi8K KyAgICB9CisgICAgaWYgKCFsb2NhbCAmJiAhc2VydmVyICYmIGNrZGVsYXkgPiAwKSAvKiBPUy05 IHNsZWVwKDApID09IGluZmluaXRlICovCisgICAgICBzbGVlcChja2RlbGF5KTsJCQkvKiBEZWxh eSBpZiByZXF1ZXN0ZWQgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIGlmICgobG9jYWwpICYm ICghcXVpZXQpKSAgICAgICAgICAgIC8qIE9ubHkgZG8gdGhpcyBpZiBsb2NhbCAmIG5vdCBxdWll dCAqLworICAgICAgY29uc3RhX210KCk7CQkJLyogU3RhcnQgdGhlIGFzeW5jIHJlYWQgdGFzayAq LworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgZnJlZXJidWYocnNlcXRibFswXSk7CQkv KiBGcmVlIHRoZSBidWZmZXIgdGhlIEdFVCBjYW1lIGluLiAqLworICAgIHNpcGt0KCdTJyk7CQkJ CS8qIFNlbmQgdGhlIFNlbmQtSW5pdCBwYWNrZXQuICovCisgICAgenRpbWUoJnRwKTsJCQkJLyog R2V0IGN1cnJlbnQgZGF0ZS90aW1lICovCisgICAgdGxvZyhGMTEwLCJUcmFuc2FjdGlvbiBiZWdp bnMiLHRwLDBMKTsgLyogTWFrZSB0cmFuc2FjdGlvbiBsb2cgZW50cnkgKi8KKyAgICB0bG9nKEYx MTAsIkdsb2JhbCBmaWxlIG1vZGU6IiwgYmluYXJ5ID8gImJpbmFyeSIgOiAidGV4dCIsIDBMKTsK KyAgICB0bG9nKEYxMDAsIiIsIiIsMCk7CisgICAgZGVidWcoRjExMSwic2luaXQgb2siLGZpbG5h bSwwKTsKKyAgICByZXR1cm4oMSk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitzaXBrdChj aGFyIGMpCQkJCS8qIFNlbmQgUyBvciBJIHBhY2tldC4gKi8KKyNlbHNlCitzaXBrdChjKSBjaGFy IGM7CisjZW5kaWYKKy8qIHNpcGt0ICovIHsKKyAgICBDSEFSICpycDsgaW50IGssIHg7CisgICAg ZXh0ZXJuIGludCBzZW5kaXBrdHM7CisgICAgZGVidWcoRjEwMSwic2lwa3QgcGt0bnVtIiwiIixw a3RudW0pOyAvKiAoYmV0dGVyIGJlIDAuLi4pICovCisgICAgdHRmbHVpKCk7CQkJCS8qIEZsdXNo IHBlbmRpbmcgaW5wdXQuICovCisgICAgLyoKKyAgICAgIElmIHRoaXMgaXMgYW4gSSBwYWNrZXQg YW5kIFNFVCBTRU5EIEktUEFDS0VUUyBpcyBPRkYsIGRvbid0IHNlbmQgaXQ7CisgICAgICBzZXQg c3N0YXRlIHRvICdZJyB3aGljaCBtYWtlcyB0aGUgbmV4dCBpbnB1dCgpIGNhbGwgcmV0dXJuICdZ JyBhcyBpZiB3ZQorICAgICAgaGFkIHJlY2VpdmVkIGFuIEFDSyB0byB0aGUgSSBwYWNrZXQgd2Ug ZGlkbid0IHNlbmQuICBUaGlzIGlzIHRvIHdvcmsKKyAgICAgIGFyb3VuZCBidWdneSBLZXJtaXQg c2VydmVycyB0aGF0IGNhbid0IGhhbmRsZSBJIHBhY2tldHMuCisgICAgKi8KKyAgICBpZiAoKHNl bmRpcGt0cyA9PSAwKSAmJiAoYyA9PSAnSScpKSB7IC8qIEkgcGFja2V0IGJ1dCBkb24ndCBzZW5k IEkgcGt0cz8gKi8KKwlzc3RhdGUgPSAnWSc7CQkJICAvKiBZaWtlcyEgKi8KKwlyZXR1cm4oMCk7 CQkJICAvKiAoc2VlIGlucHV0KCkuLikqLworICAgIH0KKyAgICBrID0gc3NlcXRibFtwa3RudW1d OwkJLyogRmluZCBzbG90IGZvciB0aGlzIHBhY2tldCAqLworICAgIGlmIChrIDwgMCkgewkJCS8q IE5vIHNsb3Q/ICovCisJayA9IGdldHNidWYod2lubG8gPSBwa3RudW0pOwkvKiBNYWtlIG9uZS4g Ki8KKwlkZWJ1ZyhGMTAxLCJzaXBrdCBnZXRzYnVmIiwiIixrKTsKKyAgICB9CisgICAgcnAgPSBy cGFyKCk7CQkJLyogR2V0IHByb3RvY29sIHBhcmFtZXRlcnMuICovCisgICAgaWYgKCFycCkgcnAg PSAoQ0hBUiAqKSIiOworICAgIHggPSBzcGFjayhjLHBrdG51bSwoaW50KXN0cmxlbigoY2hhciAq KXJwKSxycCk7IC8qIFNlbmQgdGhlbS4gKi8KKyAgICByZXR1cm4oeCk7Cit9CisKKy8qICBYIFMg SSBOIEkgVCAgLS0gIFJldHJhbnNtaXQgUy1wYWNrZXQgICovCisvKgorICBGb3IgdXNlIGluIHRo ZSBHRVQtU0VORCBzZXF1ZW5jZSwgd2hlbiB3ZSBzdGFydCB0byBzZW5kLCBidXQgcmVjZWl2ZSBh bm90aGVyCisgIGNvcHkgb2YgdGhlIEdFVCBjb21tYW5kIGJlY2F1c2UgdGhlIHJlY2VpdmVyIGRp ZG4ndCBnZXQgb3VyIFMgcGFja2V0LgorICBUaGlzIHJldHJhbnNtaXRzIHRoZSBTIHBhY2tldCBh bmQgZnJlZXMgdGhlIHJlY2VpdmUgYnVmZmVyIGZvciB0aGUgQUNLLgorICBUaGlzIHNwZWNpYWwg Y2FzZSBpcyBuZWNlc3NhcnkgYmVjYXVzZSBwYWNrZXQgbnVtYmVyIHplcm8gaXMgYmVpbmcgcmUt dXNlZC4KKyovCitWT0lECit4c2luaXQoKSB7CisgICAgaW50IGs7CisgICAgayA9IHJzZXF0Ymxb MF07CisgICAgZGVidWcoRjEwMSwieHNpbml0IGsiLCIiLGspOworICAgIGlmIChrID4gLTEpCisg ICAgZnJlZXJidWYoayk7CisgICAgcmVzZW5kKDApOworfQorCisvKiAgUiBDIFYgRiBJIEwgLS0g UmVjZWl2ZSBhIGZpbGUgICovCisKKy8qCisgIEluY29taW5nIGZpbGVuYW1lIGlzIGluIGRhdGEg ZmllbGQgb2YgRiBwYWNrZXQuCisgIFRoaXMgZnVuY3Rpb24gZGVjb2RlcyBpdCBpbnRvIHRoZSBz cnZjbWQgYnVmZmVyLCBzdWJzdGl0dXRpbmcgYW4KKyAgYWx0ZXJuYXRlICJhcy1uYW1lIiwgaWYg b25lIHdhcyBnaXZlbi4KKyAgVGhlbiBpdCBkb2VzIGFueSByZXF1ZXN0ZWQgdHJhbnNmb3JtYXRp b25zIChsaWtlIGNvbnZlcnRpbmcgdG8KKyAgbG93ZXJjYXNlKSwgYW5kIGZpbmFsbHkgaWYgYSBm aWxlIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsCisgIHRha2VzIHRoZSBkZXNpcmVk IGNvbGxpc2lvbiBhY3Rpb24uCisgIFJldHVybnM6CisgICAgMSBvbiBzdWNjZXNzLgorICAgIDAg b24gZmFpbHVyZS4KKyovCitjaGFyIG9mbjFbQ0tNQVhQQVRIKzRdOwkJCS8qIEJ1ZmZlciBmb3Ig b3V0cHV0IGZpbGUgbmFtZSAqLworY2hhciAqIG9mbjI7CQkJCS8qIFBvaW50ZXIgdG8gYmFja3Vw IGZpbGUgbmFtZSAqLworaW50IG9mbjF4OwkJCQkvKiBGbGFnIG91dHB1dCBmaWxlIGFscmVhZHkg ZXhpc3RzICovCitDS19PRkZfVCBvZm4xbGVuID0gKENLX09GRl9UKTA7CitpbnQgb3BuZXJyOwkJ CQkvKiBGbGFnIGZvciBvcGVuIGVycm9yICovCisKK2ludAkJCQkJLyogUmV0dXJucyBzdWNjZXNz ID8gMSA6IDAgKi8KK3JjdmZpbChuKSBjaGFyICpuOyB7CisgICAgZXh0ZXJuIGludCBlbl9jd2Q7 CisgICAgaW50IGksIHNraXB0aGlzOworICAgIGNoYXIgKiBuMjsKKyAgICBjaGFyICogZGlzcG87 CisjaWZkZWYgT1MyT05MWQorICAgIGNoYXIgKnpzLCAqbG9uZ25hbWUsICpuZXdsb25nbmFtZSwg KnBuOyAvKiBPUy8yIGxvbmcgbmFtZSBpdGVtcyAqLworI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNp ZmRlZiBEVElMREUKKyAgICBjaGFyICpkaXJwOworI2VuZGlmIC8qIERUSUxERSAqLworICAgIGlu dCBkaXJmbGcsIHgsIHk7CisjaWZkZWYgUElQRVNFTkQKKyAgICBleHRlcm4gY2hhciAqIHJjdmZp bHRlcjsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmZGVmIENBTElCUkFURQorICAgIGV4dGVy biBpbnQgZGVzdDsKKyAgICBDS19PRkZfVCBjc2F2ZTsKKyAgICBjc2F2ZSA9IGNhbGlicmF0ZTsJ CQkvKiBTbyB3ZSBjYW4gZGVjb2RlIGZpbGVuYW1lICovCisgICAgY2FsaWJyYXRlID0gKENLX09G Rl9UKTA7CisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisKKyAgICBvZnBlcm1zID0gIiI7CQkJLyog UmVzZXQgb2xkLWZpbGUgcGVybWlzc2lvbnMgKi8KKyAgICBvcG5lcnIgPSAwOwkJCQkvKiBObyBv cGVuIGVycm9yICh5ZXQpICovCisgICAgb2ZuMiA9IE5VTEw7CQkJLyogTm8gbmV3IG5hbWUgKHll dCkgKi8KKyAgICBsc3N0YXRlID0gMDsJCQkvKiBDYW5jZWwgbG9ja2luZy1zaGlmdCBzdGF0ZSAq LworICAgIHNydnB0ciA9IHNydmNtZDsJCQkvKiBEZWNvZGUgZmlsZSBuYW1lIGZyb20gcGFja2V0 LiAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIHhwbmJ5dGUoLTEsMCwwLE5VTEwpOwkJLyogUmVz ZXQgVUNTLTIgYnl0ZSBjb3VudGVyLiAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworICAgIGRl YnVnKEYxMTAsInJjdmZpbCByZGF0YXAiLHJkYXRhcCwwKTsKKyAgICBkZWNvZGUocmRhdGFwLHB1 dHNydiwwKTsJCS8qIERvbid0IHhsYXRlIGNoYXJzZXRzLiAqLworI2lmZGVmIENBTElCUkFURQor ICAgIGNhbGlicmF0ZSA9IGNzYXZlOworICAgIGlmIChkZXN0ID09IERFU1RfTikgeworCWNhbGli cmF0ZSA9IDE7CisJY21hcmcyID0gIkNBTElCUkFURSI7CisgICAgfQorI2VuZGlmIC8qIENBTElC UkFURSAqLworICAgIGlmICgqc3J2Y21kID09ICdcMCcpCQkvKiBXYXRjaCBvdXQgZm9yIG51bGwg RiBwYWNrZXQuICovCisgICAgICBja3N0cm5jcHkoKGNoYXIgKilzcnZjbWQsIk5PTkFNRSIsc3J2 Y21kbGVuKTsKKyAgICBtYWtlc3RyKCZwcnJmc3BlYywoY2hhciAqKXNydmNtZCk7CS8qIE5ldyBw cmVsaW1pbmFyeSBmaWxlbmFtZSAqLworI2lmZGVmIERUSUxERQorICAgIGlmICgqc3J2Y21kID09 ICd+JykgeworCWRpcnAgPSB0aWxkZV9leHBhbmQoKGNoYXIgKilzcnZjbWQpOyAvKiBFeHBhbmQg dGlsZGUsIGlmIGFueS4gKi8KKwlpZiAoKmRpcnAgIT0gJ1wwJykKKwkgIGNrc3RybmNweSgoY2hh ciAqKXNydmNtZCxkaXJwLHNydmNtZGxlbik7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBPUzIKKyAg ICBpZiAoaXNhbHBoYSgqc3J2Y21kKSAmJiBzcnZjbWRbMV0gPT0gJzonICYmIHNydmNtZFsyXSA9 PSAnXDAnKQorICAgICAgY2tzdHJuY2F0KChjaGFyICopc3J2Y21kLCJOT05BTUUiLHNydmNtZGxl bik7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogRFRJTERFICovCisKKyNpZm5kZWYgTk9J Q1AKKyNpZm5kZWYgTk9TUEwKKy8qIEZpbGUgZGlhbG9nIHdoZW4gZG93bmxvYWRpbmcuLi4gICov CisgICAgaWYgKAorI2lmZGVmIENLX0FQQworCShhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMICYmIGFk bF9hc2spIHx8IC8qIEF1dG9kb3dubG9hZCB3aXRoIEFTSyAqLworI2VuZGlmIC8qIENLX0FQQyAq LworCShjbGNtZHMgJiYgaGF2ZXVybCkJCS8qIE9yICJrZXJtaXQ6IiBvciAiaWtzZDoiIFVSTCAq LworCSkgeworCWludCB4OworCWNoYXIgZm5idWZbQ0tNQVhQQVRIKzFdOwkvKiBSZXN1bHQgYnVm ZmVyICovCisJY2hhciAqIHByZWZhY2U7CisKKwlpZiAoY2xjbWRzICYmIGhhdmV1cmwpCisJICBw cmVmYWNlID0gIlxyXG5JbmNvbWluZyBmaWxlIGZyb20gS2VybWl0IHNlcnZlci4uLlxyXG5cCitQ bGVhc2UgY29uZmlybSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uIG9yIHN1cHBseSBhbiBhbHRl cm5hdGl2ZToiOworCWVsc2UKKwkgIHByZWZhY2UgPSAiXHJcbkluY29taW5nIGZpbGUgZnJvbSBy ZW1vdGUgS2VybWl0Li4uXHJcblwKK1BsZWFzZSBjb25maXJtIG91dHB1dCBmaWxlIHNwZWNpZmlj YXRpb24gb3Igc3VwcGx5IGFuIGFsdGVybmF0aXZlOiI7CisKKwl4ID0gdXFfZmlsZShwcmVmYWNl LAkJLyogUHJlZmFjZSAqLworCQkgICAgTlVMTCwJCS8qIFByb21wdCAobGV0IHVxX2ZpbGUoKSBi dWlsdCBpdCkgKi8KKwkJICAgIDMsCQkJLyogT3V0cHV0IGZpbGUgKi8KKwkJICAgIE5VTEwsCQkv KiBIZWxwIHRleHQgKi8KKwkJICAgIChjaGFyICopc3J2Y21kLAkvKiBEZWZhdWx0ICovCisJCSAg ICBmbmJ1ZiwJCS8qIFJlc3VsdCBidWZmZXIgKi8KKwkJICAgIENLTUFYUEFUSCsxCQkvKiBTaXpl IG9mIHJlc3VsdCBidWZmZXIgKi8KKwkJICAgICk7CisJaWYgKHggPCAxKSB7CQkJLyogUmVmdXNl ZCAqLworCSAgICByZl9lcnIgPSAiUmVmdXNlZCBieSB1c2VyIjsKKwkgICAgcmV0dXJuKDApOwor CX0KKwlja3N0cm5jcHkoKGNoYXIgKilzcnZjbWQsZm5idWYsQ0tNQVhQQVRIKzEpOworCWlmIChp c2Fic29sdXRlKChjaGFyICopc3J2Y21kKSkgeyAvKiBVc2VyIGdhdmUgYW4gYWJzb2x1dGUgcGF0 aCAqLworCSAgICBnX2ZucnBhdGggPSBmbnJwYXRoOwkvKiBTYXZlIGN1cnJlbnQgUkVDRUlWRSBQ QVRITkFNRVMgKi8KKwkgICAgZm5ycGF0aCA9IFBBVEhfQUJTOwkJLyogc3dpdGNoIHRvIEFCU09M VVRFICovCisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PSUNQICov CisKKyAgICBpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJLyogQ0QgaXMgZGlzYWJsZWQgKi8KKwl6 c3RyaXAoKGNoYXIgKikoc3J2Y21kKzIpLCZuMik7IC8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0 aG5hbWUsICovCisJaWYgKHN0cmNtcCgoY2hhciAqKShzcnZjbWQrMiksbjIpKSB7IC8qIHNvIHJl ZnVzZS4gKi8KKwkgICAgcmZfZXJyID0gIkFjY2VzcyBkZW5pZWQiOworCSAgICByZXR1cm4oMCk7 CisJfQorICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgLyogV3JvbmcgcGxhY2UgZm9yIHRoaXMg LS0gaGFuZGxlIGNtYXJnMiBmaXJzdCAtLSBzZWUgYmVsb3cuLi4gICovCisKKyAgICBpZiAoemNo a28oKGNoYXIgKilzcnZjbWQpIDwgMCkgewkvKiBQcmVjaGVjayBmb3Igd3JpdGUgYWNjZXNzICov CisJZGVidWcoRjExMCwicmN2ZmlsIGFjY2VzcyBkZW5pZWQiLHNydmNtZCwwKTsKKwlyZl9lcnIg PSAiV3JpdGUgYWNjZXNzIGRlbmllZCI7CisJZGlzY2FyZCA9IG9wbmVyciA9IDE7CisJcmV0dXJu KDApOworICAgIH0KKyAgICB4eHNjcmVlbihTQ1JfRk4sMCwwbCwoY2hhciAqKXNydmNtZCk7IC8q IFB1dCBpdCBvbiBzY3JlZW4gaWYgbG9jYWwgKi8KKyAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgc3J2 Y21kIDEiLHNydmNtZCwwKTsKKyAgICB0bG9nKEYxMTAsIlJlY2VpdmluZyIsKGNoYXIgKilzcnZj bWQsMEwpOyAvKiBUcmFuc2FjdGlvbiBsb2cgZW50cnkgKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisKKyAgICBza2lwdGhpcyA9IDA7CQkJLyogVGhpcyBmaWxlIGluIG91ciBleGNlcHRpb24gbGlz dD8gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgTlNOREVYQ0VQVDsgaSsrKSB7CisJaWYgKCFyY3Zl eGNlcHRbaV0pIHsKKwkgICAgYnJlYWs7CisJfQorCWlmIChja21hdGNoKHJjdmV4Y2VwdFtpXSwo Y2hhciAqKXNydmNtZCxmaWxlY2FzZSwxKSkgeworCSAgICBza2lwdGhpcyA9IDE7CisJICAgIGJy ZWFrOworCX0KKyAgICB9CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgJiYgc2tpcHRo aXMpIHsKKwlkZWJ1ZyhGMTExLCJyY3ZmaWwgcmN2ZXhjZXB0IixyY3ZleGNlcHRbaV0saSk7CisJ ZGVidWcoRjExMCwicmN2ZmlsIHNraXBwaW5nIixzcnZjbWQsMCk7CisgICAgfQorI2VuZGlmIC8q IERFQlVHICovCisKKyAgICBpZiAoc2tpcHRoaXMpIHsJCQkvKiBTa2lwcGluZyB0aGlzIGZpbGUg Ki8KKwlkaXNjYXJkID0gMTsKKwlyZWplY3Rpb24gPSAxOworCXJmX2VyciA9ICJFeGNlcHRpb24g bGlzdCI7CisJZGVidWcoRjEwMSwicmN2ZmlsIGRpc2NhcmQiLCIiLGRpc2NhcmQpOworCXRsb2co RjEwMCwiIHJlZnVzZWQ6IGV4Y2VwdGlvbiBsaXN0IiwiIiwwKTsKKwlyZXR1cm4oMSk7CisgICAg fQorCisgICAgLyogRmlsZSBpcyBub3QgaW4gZXhjZXB0aW9uIGxpc3QgKi8KKworICAgIGlmICgh Y21hcmcyKQkJCS8qIE5vIGNvcmUgZHVtcHMgcGxlYXNlICovCisgICAgICBjbWFyZzIgPSAiIjsK KyAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgY21hcmcyIixjbWFyZzIsMCk7CisKKyAgICBpZiAoKmNt YXJnMikgewkJCS8qIENoZWNrIGZvciBhbHRlcm5hdGUgbmFtZSAqLworI2lmbmRlZiBOT1NQTAor CWludCB5OyBjaGFyICpzOwkJCS8qIFBhc3MgaXQgdGhydSB0aGUgZXZhbHVhdG9yICovCisJZXh0 ZXJuIGludCBjbWRfcXVvdGluZzsKKwlpZiAoY21kX3F1b3RpbmcpIHsKKwkgICAgeSA9IE1BWFJQ OworCSAgICBja3N0cm5jcHkob2ZuMSwoY2hhciAqKXNydmNtZCxDS01BWFBBVEgrMSk7IC8qIGZv ciBcdihmaWxlbmFtZSkgKi8KKwkgICAgcyA9IChjaGFyICopc3J2Y21kOworCSAgICB6enN0cmlu ZyhjbWFyZzIsJnMsJnkpOworCX0gZWxzZQorCSAgKnNydmNtZCA9IE5VTDsKKwlpZiAoISpzcnZj bWQpCQkJLyogSWYgd2UgZ290IHNvbWV0aGluZyAqLworI2VuZGlmIC8qIE5PU1BMICovCisJICBj a3N0cm5jcHkoKGNoYXIgKilzcnZjbWQsY21hcmcyLHNydmNtZGxlbik7CisgICAgfQorICAgIGRl YnVnKEYxMTAsInJjdmZpbCBzcnZjbWQgMiIsc3J2Y21kLDApOworCisjaWZkZWYgUElQRVNFTkQK KyAgICAvKiBJZiBpdCBzdGFydHMgd2l0aCAiYmFuZyIsIGl0J3MgYSBwaXBlLCBub3QgYSBmaWxl LiAqLworICAgIGlmICh1c2VwaXBlcyAmJiBwcm90b2NvbCA9PSBQUk9UT19LICYmICpzcnZjbWQg PT0gJyEnICYmICFyY3ZmaWx0ZXIpIHsKKwlDSEFSICpzOworCXMgPSBzcnZjbWQrMTsJCQkvKiBz cnZjbWRbXSBpcyBub3QgYSBwb2ludGVyLiAqLworCXdoaWxlICgqcykgewkJCS8qIFNvIHdlIGhh dmUgdG8gc2xpZGUgdGhlIGNvbnRlbnRzICovCisJICAgICoocy0xKSA9ICpzOwkJLyogb3ZlciAx IHNwYWNlIHRvIHRoZSBsZWZ0LiAqLworCSAgICBzKys7CisJfQorCSoocy0xKSA9IE5VTDsKKwlw aXBlc2VuZCA9IDE7CisgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyNpZmRlZiBDT01N RU5UCisvKgorICBUaGlzIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB3ZSBuZWVkIHRvIGtub3cg d2hldGhlciB0aGUgbmFtZSB3ZSBhcmUKKyAgdXNpbmcgd2FzIHNwZWNpZmllZCBieSB0aGUgbG9j YWwgdXNlciBhcyBhbiBvdmVycmlkZSwgb3IgY2FtZSBmcm9tIHRoZQorICBpbmNvbWluZyBwYWNr ZXQuICBJbiB0aGUgZm9ybWVyIGNhc2UsIHdlIGRvbid0IGRvIHN0dWZmIHRvIGl0IChsaWtlCisg IHN0cmlwIHRoZSBwYXRobmFtZSkgdGhhdCB3ZSBtaWdodCBkbyB0byBpdCBpbiB0aGUgbGF0dGVy LgorKi8KKyAgICBjbWFyZzIgPSAiIjsJCQkvKiBEb25lIHdpdGggYWx0ZXJuYXRlIG5hbWUgKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBpZiAoKGludClzdHJsZW4oKGNoYXIgKilzcnZj bWQpID4gQ0tNQVhQQVRIKSAvKiBXYXRjaCBvdXQgZm9yIG92ZXJmbG93ICovCisgICAgICAqKHNy dmNtZCArIENLTUFYUEFUSCAtIDEpID0gTlVMOworCisgICAgLyogQXQgdGhpcyBwb2ludCwgc3J2 Y21kW10gY29udGFpbnMgdGhlIGluY29taW5nIGZpbGVuYW1lIG9yIGFzLW5hbWUuICovCisgICAg LyogU28gTk9XIHdlIGNoZWNrIGZvciB3cml0ZSBhY2Nlc3MuICovCisKKyAgICBpZiAoemNoa28o KGNoYXIgKilzcnZjbWQpIDwgMCkgewkvKiBQcmVjaGVjayBmb3Igd3JpdGUgYWNjZXNzICovCisJ ZGVidWcoRjExMCwicmN2ZmlsIGFjY2VzcyBkZW5pZWQiLHNydmNtZCwwKTsKKwlyZl9lcnIgPSAi V3JpdGUgYWNjZXNzIGRlbmllZCI7CisJZGlzY2FyZCA9IG9wbmVyciA9IDE7CisJcmV0dXJuKDAp OworICAgIH0KKyAgICB4eHNjcmVlbihTQ1JfRk4sMCwwbCwoY2hhciAqKXNydmNtZCk7IC8qIFB1 dCBpdCBvbiBzY3JlZW4gaWYgbG9jYWwgKi8KKyAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgc3J2Y21k IDEiLHNydmNtZCwwKTsKKyAgICB0bG9nKEYxMTAsIlJlY2VpdmluZyIsKGNoYXIgKilzcnZjbWQs MEwpOyAvKiBUcmFuc2FjdGlvbiBsb2cgZW50cnkgKi8KKworI2lmZGVmIENLX0xBQkVMRUQKKyNp ZmRlZiBWTVMKKy8qCisgIElmIHdlIGhhdmUgYW4gYXMtbmFtZSwgdGhpcyBvdmVycmlkZXMgdGhl IGludGVybmFsIG5hbWUgaWYgd2UgYXJlIGRvaW5nCisgIGEgbGFiZWxlZC1tb2RlIHRyYW5zZmVy LgorKi8KKyAgICBpZiAoKmNtYXJnMikgeworCWV4dGVybiBpbnQgbGZfb3B0czsKKwlsZl9vcHRz ICY9IH5MQkxfTkFNOworICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDS19MQUJF TEVEICovCisKKyAgICBkZWJ1ZyhGMTExLCJyY3ZmaWwgcGlwZXNlbmQiLHNydmNtZCxwaXBlc2Vu ZCk7CisKKyNpZmRlZiBQSVBFU0VORAorICAgIC8qIFNraXAgYWxsIHRoZSBmaWxlbmFtZSBtYW5p cHVsYXRpb24gYW5kIGNvbGxpc2lvbiBhY3Rpb25zICovCisgICAgaWYgKHBpcGVzZW5kKSB7CisJ ZGlyZmxnID0gMDsKKwlvZm4xWzBdID0gJyEnOworCWNrc3RybmNweSgmb2ZuMVsxXSwoY2hhciAq KXNydmNtZCxDS01BWFBBVEgrMSk7CisJY2tzdHJuY3B5KG4sb2ZuMSxDS01BWFBBVEgrMSk7CisJ Y2tzdHJuY3B5KGZzcGVjLG9mbjEsQ0tNQVhQQVRIKzEpOworCW1ha2VzdHIoJnByZnNwZWMsZnNw ZWMpOwkvKiBOZXcgcHJlbGltaW5hcnkgZmlsZW5hbWUgKi8KKwlkZWJ1ZyhGMTEwLCJyY3ZmaWwg cGlwZXNlbmQiLG9mbjEsMCk7CisJZ290byByY3ZmaWx4OworICAgIH0KKyNlbmRpZiAvKiBQSVBF U0VORCAqLworLyoKKyAgVGhpcyBpcyB0byBhdm9pZCBwYXNzaW5nIGVtYWlsIHN1YmplY3RzIHRo cm91Z2ggbnpydG9sKCkuCisgIFdlIGhhdmVuJ3QgeWV0IHJlY2VpdmVkIHRoZSBBIHBhY2tldCBz byB3ZSBkb24ndCB5ZXQga25vdyBpdCdzIGUtbWFpbCwKKyAgc28gaW4gZmFjdCB3ZSBnbyBhaGVh ZCBhbmQgY29udmVydCBpdCBhbnl3YXksIGJ1dCBsYXRlciB3ZSBnZXQgdGhlCisgIG9yaWdpbmFs IGJhY2sgZnJvbSBvZmlsbmFtW10uCisqLyAgCisgICAgZGlzcG9zID0gMDsKKyAgICBja3N0cm5j cHkob2ZpbG5hbSwoY2hhciAqKXNydmNtZCxDS01BWFBBVEgrMSk7CisKKyNpZmRlZiBOWkxUT1IK KyAgICBpZiAoKmNtYXJnMikKKyAgICAgIGNrc3RybmNweSgoY2hhciAqKW9mbjEsKGNoYXIgKilz cnZjbWQsQ0tNQVhQQVRIKzEpOworICAgIGVsc2UKKyAgICAgIG56cnRvbCgoY2hhciAqKXNydmNt ZCwJCS8qIEZpbGVuYW1lIGZyb20gcGFja2V0ICovCisJICAgICAoY2hhciAqKW9mbjEsCQkvKiBX aGVyZSB0byBwdXQgcmVzdWx0ICovCisJICAgICBmbmNudiwJCQkvKiBGaWxlbmFtZSBjb252ZXJz aW9uICovCisJICAgICBmbnJwYXRoLAkJCS8qIFBhdGhuYW1lIGhhbmRsaW5nICovCisJICAgICBD S01BWFBBVEgJCQkvKiBTaXplIG9mIHJlc3VsdCBidWZmZXIgKi8KKwkgICAgICk7CisjZWxzZQor ICAgIGRlYnVnKEYxMDEsInJjdmZpbCBmbnJwYXRoIiwiIixmbnJwYXRoKTsgLyogSGFuZGxlIHBh dGhuYW1lcyAqLworICAgIGlmIChmbnJwYXRoID09IFBBVEhfT0ZGICYmICEqY21hcmcyKSB7IC8q IFJFQ0VJVkUgUEFUSE5BTUVTIE9GRj8gKi8KKwljaGFyICp0OwkJCS8qIFllcy4gKi8KKwl6c3Ry aXAoKGNoYXIgKilzcnZjbWQsJnQpOwkvKiBJZiB0aGVyZSBpcyBhIHBhdGhuYW1lLCBzdHJpcCBp dCAqLworCWRlYnVnKEYxMTAsInJjdmZpbCBQQVRIX09GRiB6c3RyaXAiLHQsMCk7CisJaWYgKCF0 KQkJCQkvKiBCZSBzdXJlIHdlIGRpZG4ndCBzdHJpcCB0b28gbXVjaCAqLworCSAgc3ByaW50Zihv Zm4xLCJGSUxFJTAybGQiLGZpbGNudCk7CisJZWxzZSBpZiAoKnQgPT0gJ1wwJykKKwkgIHNwcmlu dGYob2ZuMSwiRklMRSUwMmxkIixmaWxjbnQpOworCWVsc2UKKwkgIGNrc3RybmNweShvZm4xLHQs Q0tNQVhQQVRIKzEpOworCWNrc3RybmNweSgoY2hhciAqKXNydmNtZCxvZm4xLHNydmNtZGxlbik7 IC8qIE5vdyBjb3B5IGl0IGJhY2suICovCisgICAgfQorLyoKKyAgU0VUIFJFQ0VJVkUgUEFUSE5B TUVTIFJFTEFUSVZFLi4uCisgIFRoZSBmb2xsb3dpbmcgZG9lc24ndCBiZWxvbmcgaGVyZSBidXQg ZG9pbmcgaXQgcmlnaHQgd291bGQgcmVxdWlyZQorICBkZWZpbmluZyBhbmQgaW1wbGVtZW50aW5n IGEgbmV3IGZpbGUgcm91dGluZSBmb3IgYWxsIGNrP2Zpby5jIG1vZHVsZXMuCisgIFNvIGZvciBu b3cuLi4KKyovCisjaWZkZWYgVU5JWE9ST1NLCisgICAgZWxzZSBpZiAoZm5ycGF0aCA9PSBQQVRI X1JFTCAmJiAhKmNtYXJnMikgeworCWlmIChpc2Fic29sdXRlKChjaGFyICopc3J2Y21kKSkgewor CSAgICBvZm4xWzBdID0gJy4nOworCSAgICBja3N0cm5jcHkoJm9mMW5bMV0sKGNoYXIgKilzcnZj bWQsQ0tNQVhQQVRIKzEpOworCSAgICBja3N0cm5jcHkoKGNoYXIgKilzcnZjbWQsb2ZuMSxzcnZj bWRsZW4pOworCSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgUEFUSF9SRUwiLG9mbjEsMCk7CisJfQor ICAgIH0KKyNlbHNlCisjaWZkZWYgT1MyCisgICAgZWxzZSBpZiAoZm5ycGF0aCA9PSBQQVRIX1JF TCAmJiAhKmNtYXJnMikgeworCWlmIChpc2Fic29sdXRlKChjaGFyICopc3J2Y21kKSkgeworCSAg ICBjaGFyICpwID0gKGNoYXIgKilzcnZjbWQ7CisJICAgIGlmIChpc2FscGhhKCpwKSAmJiAqKHAr MSkgPT0gJzonKQorCSAgICAgIHAgKz0gMjsKKwkgICAgaWYgKCpwID09ICdcXCcgfHwgKnAgPT0g Jy8nKQorCSAgICAgIHArKzsKKwkgICAgY2tzdHJuY3B5KG9mbjEscCxDS01BWFBBVEgrMSk7CisJ ICAgIGNrc3RybmNweSgoY2hhciAqKXNydmNtZCxvZm4xLHNydmNtZGxlbik7CisJICAgIGRlYnVn KEYxMTAsInJjdmZpbCBPUzIgUEFUSF9SRUwiLG9mbjEsMCk7CisJfQorICAgIH0KKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKworICAgIC8qIE5vdyBzcnZjbWQgY29u dGFpbnMgaW5jb21pbmcgZmlsZW5hbWUgd2l0aCBwYXRoIHBvc3NpYmx5IHN0cmlwcGVkICovCisK KyAgICBpZiAoZm5jbnYpCQkJCS8qIEZJTEUgTkFNRVMgQ09OVkVSVEVEPyAqLworICAgICAgenJ0 b2woKGNoYXIgKilzcnZjbWQsKGNoYXIgKilvZm4xKTsgLyogWWVzLCBjb252ZXJ0IHRvIGxvY2Fs IGZvcm0gKi8KKyAgICBlbHNlCisgICAgICBja3N0cm5jcHkob2ZuMSwoY2hhciAqKXNydmNtZCxD S01BWFBBVEgrMSk7IC8qIE5vLCBjb3B5IGxpdGVyYWxseS4gKi8KKyNlbmRpZiAvKiBOWkxUT1Ig Ki8KKworI2lmZGVmIFBJUEVTRU5ECisgICAgaWYgKHJjdmZpbHRlcikgeworCWNoYXIgKiBwID0g TlVMTCwgKiBxOworCWludCBubiA9IE1BWFJQOworCXBpcGVzZW5kID0gMTsKKwlkZWJ1ZyhGMTEw LCJyY3ZmaWwgcmN2ZmlsdGVyICIscmN2ZmlsdGVyLDApOworI2lmbmRlZiBOT1NQTAorCWlmICgo cCA9IChjaGFyICopIG1hbGxvYyhubiArIDEpKSkgeworCSAgICBxID0gcDsKKyNpZmRlZiBDT01N RU5UCisgICAgICAgICAgICAvKiBXZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkIHNydmNtZCBhbmQg cGxhY2VkIGl0IGludG8gb2ZuMSAqLworICAgICAgICAgICAgY2tzdHJuY3B5KG9mbjEsKGNoYXIg KilzcnZjbWQsQ0tNQVhQQVRIKzEpOyAvKiBGb3IgXHYoZmlsZW5hbWUpICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworCSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWxlIHBpcGVzZW5kIGZpbHRlciIscmN2 ZmlsdGVyLDApOworCSAgICB6enN0cmluZyhyY3ZmaWx0ZXIsJnAsJm5uKTsKKwkgICAgZGVidWco RjExMSwicmN2ZmlsIHBpcGVuYW1lIixxLG5uKTsKKwkgICAgaWYgKG5uIDw9IDApIHsKKwkJcHJp bnRmKAorCQkgICAgICAgIj9Tb3JyeSwgcmVjZWl2ZSBmaWx0ZXIgKyBmaWxlbmFtZSB0b28gbG9u ZywgJWQgbWF4LlxuIiwKKwkJICAgICAgIENLTUFYUEFUSAorCQkgICAgICAgKTsKKwkJcmZfZXJy ID0gIk5hbWUgdG9vIGxvbmciOworCQlmcmVlKHEpOworCQlyZXR1cm4oMCk7CisJICAgIH0KKwkg ICAgY2tzdHJuY3B5KChjaGFyICopc3J2Y21kLHEsTUFYUlApOworCSAgICBmcmVlKHEpOworCX0K KyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisgICAg LyogTm93IHRoZSBpbmNvbWluZyBmaWxlbmFtZSwgcG9zc2libHkgY29udmVydGVkLCBpcyBpbiBv Zm4xW10uICovCisKKyNpZmRlZiBPUzIKKyAgICAvKiBEb24ndCByZWZ1c2UgdGhlIGZpbGUganVz dCBiZWNhdXNlIHRoZSBuYW1lIGlzIGlsbGVnYWwuICovCisgICAgaWYgKCFJc0ZpbGVOYW1lVmFs aWQob2ZuMSkpIHsJLyogTmFtZSBpcyBPSyBmb3IgT1MvMj8gKi8KKyNpZmRlZiBPUzJPTkxZCisJ Y2hhciAqenMgPSBOVUxMOworCXpzdHJpcChvZm4xLCAmenMpOwkJLyogTm90IHZhbGlkLCBzdHJp cCB1bmNvbmRpdGlvbmFsbHkgKi8KKwlpZiAoenMpIHsKKwkgICAgaWYgKGlhdHRyLmxvbmduYW1l LmxlbiAmJgkvKiBGcmVlIHByZXZpb3VzIGxvbmduYW1lLCBpZiBhbnkgKi8KKwkJaWF0dHIubG9u Z25hbWUudmFsKQorCSAgICAgIGZyZWUoaWF0dHIubG9uZ25hbWUudmFsKTsKKwkgICAgaWF0dHIu bG9uZ25hbWUubGVuID0gc3RybGVuKHpzKTsgLyogU3RvcmUgaW4gYXR0cmlidXRlIHN0cnVjdHVy ZSAqLworCSAgICBpYXR0ci5sb25nbmFtZS52YWwgPSAoY2hhciAqKSBtYWxsb2MoaWF0dHIubG9u Z25hbWUubGVuICsgMSk7CisJICAgIGlmIChpYXR0ci5sb25nbmFtZS52YWwpCS8qIFJlbWVtYmVy IHRoaXMgKGlsbGVnYWwpIG5hbWUgKi8KKwkgICAgICBzdHJjcHkoaWF0dHIubG9uZ25hbWUudmFs LCB6cyk7IC8qIHNhZmUgKi8KKwl9CisjZW5kaWYgLyogT1MyT05MWSAqLworCWRlYnVnKEYxMTAs InJjdmZpbDogaW52YWxpZCBmaWxlIG5hbWUiLG9mbjEsMCk7CisJQ2hhbmdlTmFtZUZvckZBVChv Zm4xKTsJLyogQ2hhbmdlIHRvIGFuIGFjY2VwdGFibGUgbmFtZSAqLworCWRlYnVnKEYxMTAsInJj dmZpbDogRkFUIGZpbGUgbmFtZSIsb2ZuMSwwKTsKKworICAgIH0gZWxzZSB7CQkJCS8qIE5hbWUg aXMgT0suICovCisKKwlkZWJ1ZyhGMTEwLCJyY3ZmaWw6IHZhbGlkIGZpbGUgbmFtZSIsb2ZuMSww KTsKKyNpZmRlZiBPUzJPTkxZCisJaWYgKGlhdHRyLmxvbmduYW1lLmxlbiAmJgorCSAgICAgaWF0 dHIubG9uZ25hbWUudmFsKQkvKiBGcmVlIHByZXZpb3VzIGxvbmduYW1lLCBpZiBhbnkgKi8KKwkg IGZyZWUoaWF0dHIubG9uZ25hbWUudmFsKTsKKwlpYXR0ci5sb25nbmFtZS5sZW4gPSAwOworCWlh dHRyLmxvbmduYW1lLnZhbCA9IE5VTEw7CS8qIFRoaXMgZmlsZSBkb2Vzbid0IG5lZWQgYSBsb25n bmFtZSAqLworI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyAgICB9CisjZW5kaWYgLyogT1MyICovCisg ICAgZGVidWcoRjExMCwicmN2ZmlsIGFzIixvZm4xLDApOworCisvKiBGaWxlbmFtZSBjb2xsaXNp b24gYWN0aW9uIHNlY3Rpb24uICovCisKKyAgICBkaXJmbGcgPQkJCQkvKiBJcyBpdCBhIGRpcmVj dG9yeSBuYW1lPyAqLworI2lmZGVmIENLX1RNUERJUgorICAgICAgICBpc2RpcihvZm4xKQorI2Vs c2UKKwkwCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisJICA7CisgICAgZGVidWcoRjEwMSwicmN2 ZmlsIGRpcmZsZyIsIiIsZGlyZmxnKTsKKyAgICBvZm4xbGVuID0gemNoa2kob2ZuMSk7CQkvKiBG aWxlIGFscmVhZHkgZXhpc3RzPyAqLworICAgIGRlYnVnKEYxMTEsInJjdmZpbCBvZm4xbGVuIixv Zm4xLG9mbjFsZW4pOworICAgIG9mbjF4ID0gKG9mbjFsZW4gIT0gKENLX09GRl9UKS0xKTsKKwor ICAgIGlmICggKAorI2lmZGVmIFVOSVgKKwlzdHJjbXAob2ZuMSwiL2Rldi9udWxsIikgJiYJLyog SXQncyBub3QgdGhlIG51bGwgZGV2aWNlPyAqLworI2Vsc2UKKyNpZmRlZiBPU0sKKwlzdHJjbXAo b2ZuMSwiL25pbCIpICYmCisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogVU5JWCAqLworCSFz dGRvdWYgKSAmJgkJCS8qIE5vdCBjb3B5aW5nIHRvIHN0YW5kYXJkIG91dHB1dD8gKi8KKwlvZm4x eCB8fAkJCS8qIEZpbGUgb2Ygc2FtZSBuYW1lIGV4aXN0cz8gKi8KKwlkaXJmbGcgKSB7CQkJLyog T3IgZmlsZSBpcyBhIGRpcmVjdG9yeT8gKi8KKyAgICAgICAgZGVidWcoRjExMSwicmN2ZmlsIGV4 aXN0cyIsb2ZuMSxmbmNhY3QpOworI2lmZGVmIENLX1BFUk1TCisJb2ZwZXJtcyA9IHpncGVybSgo Y2hhciAqKW9mbjEpOwkvKiBHZXQgb2xkIGZpbGUncyBwZXJtaXNzaW9ucyAqLworCWRlYnVnKEYx MTAsInJjdmZpbCBwZXJtcyIsb2ZwZXJtcywwKTsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisJ ZGVidWcoRjEwMSwicmN2ZmlsIGZuY2FjdCIsIiIsZm5jYWN0KTsKKwlzd2l0Y2ggKGZuY2FjdCkg ewkJLyogWWVzLCBkbyB3aGF0IHVzZXIgc2FpZC4gKi8KKwkgIGNhc2UgWFlGWF9BOgkJCS8qIEFw cGVuZCAqLworCSAgICBvZnBlcm1zID0gIiI7CisJICAgIGRlYnVnKEYxMDAsInJjdmZpbCBhcHBl bmQiLCIiLDApOworCSAgICBpZiAoZGlyZmxnKSB7CisJCXJmX2VyciA9ICJDYW4ndCBhcHBlbmQg dG8gYSBkaXJlY3RvcnkiOworCQl0bG9nKEYxMDAsIiBlcnJvciAtIGNhbid0IGFwcGVuZCB0byBk aXJlY3RvcnkiLCIiLDApOworCQlkaXNjYXJkID0gb3BuZXJyID0gMTsKKwkJcmV0dXJuKDApOwor CSAgICB9CisJICAgIHRsb2coRjExMCwiIGFwcGVuZGluZyB0byIsb2ZuMSwwKTsKKwkgICAgYnJl YWs7CisjaWZkZWYgQ09NTUVOVAorCSAgY2FzZSBYWUZYX1E6CQkJLyogUXVlcnkgKEFzaykgKi8K KwkgICAgYnJlYWs7CQkJLyogbm90IGltcGxlbWVudGVkICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworCSAgY2FzZSBYWUZYX0I6CQkJLyogQmFja3VwIChyZW5hbWUgb2xkIGZpbGUpICovCisJICAg IGlmIChkaXJmbGcpIHsKKwkJcmZfZXJyID0gIkNhbid0IHJlbmFtZSBleGlzdGluZyBkaXJlY3Rv cnkiOworCQl0bG9nKEYxMDAsIiBlcnJvciAtIGNhbid0IHJlbmFtZSBkaXJlY3RvcnkiLCIiLDAp OworCQlkaXNjYXJkID0gb3BuZXJyID0gMTsKKwkJcmV0dXJuKDApOworCSAgICB9CisJICAgIHpu ZXduKG9mbjEsJm9mbjIpOwkJLyogR2V0IG5ldyB1bmlxdWUgbmFtZSAqLworCSAgICB0bG9nKEYx MTAsIiBiYWNrdXA6IixvZm4yLDApOworCSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgYmFja3VwIG9m bjEiLG9mbjEsMCk7CisJICAgIGRlYnVnKEYxMTAsInJjdmZpbCBiYWNrdXAgb2ZuMiIsb2ZuMiww KTsKKyNpZmRlZiBDS19MQUJFTEVECisjaWZkZWYgT1MyT05MWQorLyoKKyAgSW4gY2FzZSB0aGlz IGlzIGEgRkFUIGZpbGUgc3lzdGVtLCB3ZSBjYW4ndCBjaGFuZ2Ugb25seSB0aGUgRkFUIG5hbWUs IHdlCisgIGFsc28gaGF2ZSB0byBjaGFuZ2UgdGhlIGxvbmduYW1lIGZyb20gdGhlIGV4dGVuZGVk IGF0dHJpYnV0ZXMgYmxvY2suCisgIE90aGVyd2lzZSwgd2UnbGwgaGF2ZSBtYW55IGZpbGVzIHdp dGggdGhlIHNhbWUgbG9uZ25hbWUgYW5kIGlmIHdlIGNvcHkgdGhlbQorICB0byBhbiBIUEZTIHZv bHVtZSwgb25seSBvbmUgd2lsbCBzdXJ2aXZlLgorKi8KKwkgICAgaWYgKG9zMmdldGxvbmduYW1l KG9mbjEsICZsb25nbmFtZSkgPiAtMSkgeworCQlpZiAoc3RybGVuKGxvbmduYW1lKSkgeworCQkg ICAgY2hhciB0bXBbMTBdOworCQkgICAgZXh0ZXJuIGludCBja196bmV3bjsKKwkJICAgIHNwcmlu dGYodG1wLCIufiVkfiIsY2tfem5ld24pOworCQkgICAgbmV3bG9uZ25hbWUgPQorCQkgICAgICAo Y2hhciAqKSBtYWxsb2Moc3RybGVuKGxvbmduYW1lKSArIHN0cmxlbih0bXApICsgMSk7CisJCSAg ICBpZiAobmV3bG9uZ25hbWUpIHsKKwkJCXN0cmNweShuZXdsb25nbmFtZSwgbG9uZ25hbWUpOyAv KiBzYWZlIChwcmVjaGVja2VkKSAqLworCQkJc3RyY2F0KG5ld2xvbmduYW1lLCB0bXApOyAvKiBz YWZlIChwcmVjaGVja2VkKSAqLworCQkJb3Myc2V0bG9uZ25hbWUob2ZuMSwgbmV3bG9uZ25hbWUp OworCQkJZnJlZShuZXdsb25nbmFtZSk7CisJCQluZXdsb25nbmFtZSA9IE5VTEw7CisJCSAgICB9 CisJCX0KKwkgICAgfSBlbHNlIGRlYnVnKEYxMDAsInJjdmZpbCBvczJnZXRsb25nbmFtZSBmYWls ZWQiLCIiLDApOworI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNlbmRpZiAvKiBDS19MQUJFTEVEICov CisKKyNpZmRlZiBDT01NRU5UCisJICAgIC8qIERvIHRoaXMgbGF0ZXIsIGluIG9wZW5hKCkuLi4g Ki8KKwkgICAgaWYgKHpyZW5hbWUob2ZuMSxvZm4yKSA8IDApIHsKKwkJcmZfZXJyID0gIkNhbid0 IHRyYW5zZm9ybSBmaWxlbmFtZSI7CisJCWRlYnVnKEYxMTAsInJjdmZpbCByZW5hbWUgZmFpbHMi LG9mbjEsMCk7CisJCWRpc2NhcmQgPSBvcG5lcnIgPSAxOworCQlyZXR1cm4oMCk7CisJICAgIH0K KyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIGJyZWFrOworCisJICBjYXNlIFhZRlhfRDoJCQkv KiBEaXNjYXJkIChyZWZ1c2UgbmV3IGZpbGUpICovCisJICAgIG9mcGVybXMgPSAiIjsKKwkgICAg ZGlzY2FyZCA9IDE7CisJICAgIHJlamVjdGlvbiA9IDE7CQkvKiBIb3JyaWJsZSBoYWNrOiByZWFz b24gPSBuYW1lICovCisJICAgIGRlYnVnKEYxMDEsInJjdmZpbCBkaXNjYXJkIiwiIixkaXNjYXJk KTsKKwkgICAgdGxvZyhGMTAwLCIgcmVmdXNlZDogbmFtZSIsIiIsMCk7CisJICAgIGJyZWFrOwor CisJICBjYXNlIFhZRlhfUjoJCQkvKiBSZW5hbWUgaW5jb21pbmcgZmlsZSAqLworCSAgICB6bmV3 bihvZm4xLCZvZm4yKTsJCS8qIE1ha2UgbmV3IG5hbWUgZm9yIGl0ICovCisjaWZkZWYgT1MyT05M WQorCSAgICBpZiAoaWF0dHIubG9uZ25hbWUubGVuKSB7CisJCWNoYXIgdG1wWzEwXTsKKwkJZXh0 ZXJuIGludCBja196bmV3bjsKKwkJc3ByaW50Zih0bXAsIi5+JWR+Iixja196bmV3bik7CisJCW5l d2xvbmduYW1lID0KKwkJICAoY2hhciAqKSBtYWxsb2MoaWF0dHIubG9uZ25hbWUubGVuICsgc3Ry bGVuKHRtcCkgKyAxKTsKKwkJaWYgKG5ld2xvbmduYW1lKSB7CisJCSAgICBzdHJjcHkobmV3bG9u Z25hbWUsIGlhdHRyLmxvbmduYW1lLnZhbCk7IC8qIHNhZmUgKi8KKwkJICAgIHN0cmNhdChuZXds b25nbmFtZSwgdG1wKTsgLyogc2FmZSAqLworCQkgICAgZGVidWcoRjExMCwKKwkJCSAgIlJlbmFt ZSBJbmNvbWluZzogbmV3bG9uZ25hbWUiLG5ld2xvbmduYW1lLDApOworCQkgICAgaWYgKGlhdHRy LmxvbmduYW1lLmxlbiAmJgorCQkJaWF0dHIubG9uZ25hbWUudmFsKQorCQkgICAgICBmcmVlKGlh dHRyLmxvbmduYW1lLnZhbCk7CisJCSAgICBpYXR0ci5sb25nbmFtZS5sZW4gPSBzdHJsZW4obmV3 bG9uZ25hbWUpOworCQkgICAgaWF0dHIubG9uZ25hbWUudmFsID0gbmV3bG9uZ25hbWU7CisJCSAg ICAvKiBmcmVlKG5ld2xvbmduYW1lKSBoZXJlID8gKi8KKwkJfQorCSAgICB9CisjZW5kaWYgLyog T1MyT05MWSAqLworCSAgICBicmVhazsKKwkgIGNhc2UgWFlGWF9YOgkJCS8qIFJlcGxhY2Ugb2xk IGZpbGUgKi8KKwkgICAgZGVidWcoRjEwMCwicmN2ZmlsIG92ZXJ3cml0ZSIsIiIsMCk7CisJICAg IGlmIChkaXJmbGcpIHsKKwkJcmZfZXJyID0gIkNhbid0IG92ZXJ3cml0ZSBleGlzdGluZyBkaXJl Y3RvcnkiOworCQl0bG9nKEYxMDAsIiBlcnJvciAtIGNhbid0IG92ZXJ3cml0ZSBkaXJlY3Rvcnki LCIiLDApOworCQlkaXNjYXJkID0gb3BuZXJyID0gMTsKKyNpZmRlZiBDT01NRU5UCisJCXJldHVy bigwKTsKKyNlbHNlCisJCWJyZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgfQorCSAg ICB0bG9nKEYxMTAsIm92ZXJ3cml0aW5nIixvZm4xLDApOworCSAgICBicmVhazsKKwkgIGNhc2Ug WFlGWF9VOgkJCS8qIFJlZnVzZSBpZiBvbGRlciAqLworCSAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwg dXBkYXRlIixvZm4xLDApOworCSAgICBpZiAoZGlyZmxnKSB7CisJCXJmX2VyciA9ICJGaWxlIGhh cyBzYW1lIG5hbWUgYXMgZXhpc3RpbmcgZGlyZWN0b3J5IjsKKwkJdGxvZyhGMTEwLCIgZXJyb3Ig LSBkaXJlY3RvcnkgZXhpc3RzOiIsb2ZuMSwwKTsKKwkJZGlzY2FyZCA9IG9wbmVyciA9IDE7Cisj aWZkZWYgQ09NTUVOVAorCQkvKiBEb24ndCBzZW5kIGFuIGVycm9yIHBhY2tldCwganVzdCByZWZ1 c2UgdGhlIGZpbGUgKi8KKwkJcmV0dXJuKDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAg fQorCSAgICBicmVhazsJCQkvKiBOb3QgaGVyZSwgd2UgZG9uJ3QgaGF2ZSAqLworCQkJCQkvKiB0 aGUgYXR0cmlidXRlIHBhY2tldCB5ZXQuICovCisJICBkZWZhdWx0OgorCSAgICBvZnBlcm1zID0g IiI7CisJICAgIGRlYnVnKEYxMDEsInJjdmZpbCBiYWQgY29sbGlzaW9uIGFjdGlvbiIsIiIsZm5j YWN0KTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgb2Zu MSIsb2ZuMSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgb2ZuMiIsb2ZuMiwwKTsKKyAgICBk ZWJ1ZyhGMTEwLCJyY3ZmaWwgb2ZwZXJtcyIsb2ZwZXJtcywwKTsKKyAgICBpZiAoZm5jYWN0ID09 IFhZRlhfUiAmJiBvZm4xeCAmJiBvZm4yKSB7IC8qIFJlbmFtaW5nIGluY29taW5nIGZpbGU/ICov CisJeHhzY3JlZW4oU0NSX0FOLDAsMGwsb2ZuMik7CS8qIERpc3BsYXkgcmVuYW1lZCBuYW1lICov CisJY2tzdHJuY3B5KG4sIG9mbjIsIENLTUFYUEFUSCsxKTsgLyogUmV0dXJuIGl0ICovCisgICAg fSBlbHNlIHsJCQkJLyogTm8gKi8KKwl4eHNjcmVlbihTQ1JfQU4sMCwwbCxvZm4xKTsJLyogRGlz cGxheSByZWd1bGFyIG5hbWUgKi8KKwlja3N0cm5jcHkobiwgb2ZuMSwgQ0tNQVhQQVRIKzEpOyAv KiBhbmQgcmV0dXJuIGl0LiAqLworICAgIH0KKworI2lmZGVmIENLX01LRElSCisvKiAgQ3JlYXRl IGRpcmVjdG9yeShzKSBpZiBuZWNlc3NhcnkuICAqLworICAgIGlmICghZGlzY2FyZCAmJiBmbnJw YXRoICE9IFBBVEhfT0ZGKSB7IC8qIFJFQ0VJVkUgUEFUSEFNRVMgT04/ICovCisJaW50IHg7CisJ ZGVidWcoRjExMCwicmN2ZmlsIGNhbGxpbmcgem1rZGlyIixvZm4xLDApOyAvKiBZZXMgKi8KKwlp ZiAoKHggPSB6bWtkaXIob2ZuMSkpIDwgMCkgeworCSAgICBkZWJ1ZyhGMTAwLCJ6bWtkaXIgZmFp bHMiLCIiLDApOworCSAgICB0bG9nKEYxMTAsIiBlcnJvciAtIGRpcmVjdG9yeSBjcmVhdGlvbiBm YWlsdXJlOiIsb2ZuMSwwKTsKKwkgICAgcmZfZXJyID0gIkRpcmVjdG9yeSBjcmVhdGlvbiBmYWls dXJlLiI7CisJICAgIGRpc2NhcmQgPSAxOworCSAgICByZXR1cm4oMCk7CisJfQorI2lmZGVmIFRM T0cKKwllbHNlIGlmICh4ID4gMCkKKwkgIHRsb2coRjExMCwiIHBhdGggY3JlYXRlZDoiLG9mbjEs MCk7CisjZW5kaWYgLyogVExPRyAqLworICAgIH0KKyNlbHNlCisgICAgZGVidWcoRjExMCwicmN2 ZmlsIENLX01LRElSIG5vdCBkZWZpbmVkIixvZm4xLDApOworI2VuZGlmIC8qIENLX01LRElSICov CisKKyAgICBpZiAoY2FsaWJyYXRlKQorICAgICAgY2tzdHJuY3B5KGZzcGVjLG9mbjEsQ0tNQVhQ QVRIKzEpOworICAgIGVsc2UKKyAgICAgIHpmbnFmcChvZm4xLGZzcGVjbGVuLGZzcGVjKTsKKyAg ICBkZWJ1ZyhGMTEwLCJyY3ZmaWwgZnNwZWMiLGZzcGVjLDApOworCisjaWZkZWYgQ09NTUVOVAor ICAgIC8qIFNlZSBjb21tZW50cyB3aXRoIFZNUyB6Zm5xZnAoKS4uLiAqLworI2lmZGVmIFZNUwor ICAgIC8qIHpmbnFmcCgpIGRvZXMgbm90IHJldHVybiB0aGUgdmVyc2lvbiBudW1iZXIgKi8KKyAg ICBpZiAoIWNhbGlicmF0ZSkgeworCWludCB4LCB2OworCXggPSBzdHJsZW4ob2ZuMSk7CisJaWYg KHggPiAwKSB7CisJICAgIGlmIChvZm4xW3gtMV0gPT0gJzsnKSB7CisJCXYgPSBnZXR2bnVtKG9m bjEpOworCQlja3N0cm5jcHkoJm9mbjFbeF0sY2tpdG9hKHYpLENLTUFYUEFUSC14KTsKKwkgICAg fQorCX0KKyAgICB9CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg IGZzcGVjW2ZzcGVjbGVuXSA9IE5VTDsKKyAgICBtYWtlc3RyKCZwcmZzcGVjLGZzcGVjKTsJCS8q IE5ldyBwcmVsaW1pbmFyeSBmaWxlbmFtZSAqLworCisjaWZkZWYgUElQRVNFTkQKKyAgcmN2Zmls eDoKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisgICAgZGVidWcoRjExMCwicmN2ZmlseDogbiIs biwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJyY3ZmaWx4OiBvZm4xIixvZm4xLDApOworICAgIGZmYyA9 IChDS19PRkZfVCkwOwkJCS8qIEluaXQgcGVyLWZpbGUgY291bnRlcnMgKi8KKyAgICBjcHMgPSBv bGRjcHMgPSAwTDsKKyAgICByc19sZW4gPSAoQ0tfT0ZGX1QpMDsKKyAgICByZWplY3Rpb24gPSAt MTsKKyAgICBmc2VjcyA9IGd0aW1lcigpOwkJCS8qIFRpbWUgdGhpcyBmaWxlIHN0YXJ0ZWQgKi8K KyNpZmRlZiBHRlRJTUVSCisgICAgZnBmc2VjcyA9IGdmdGltZXIoKTsKKyAgICBkZWJ1ZyhGMTAx LCJyY3ZmaWwgZnBmc2VjcyIsIiIsZnBmc2Vjcyk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAg IGZpbGNudCsrOworICAgIGludG1zZyhmaWxjbnQpOworICAgIHJldHVybigxKTsJCQkJLyogU3Vj Y2Vzc2Z1bCByZXR1cm4gKi8KK30KKworCisvKiAgUiBFIE8gRiAgLS0gIFJlY2VpdmUgRW5kIE9m IEZpbGUgcGFja2V0IGZvciBpbmNvbWluZyBmaWxlICovCisKKy8qCisgIENsb3NlcyB0aGUgcmVj ZWl2ZWQgZmlsZS4KKyAgUmV0dXJuczoKKyAgICAwIG9uIHN1Y2Nlc3MuCisgICAtMSBpZiBmaWxl IGNvdWxkIG5vdCBiZSBjbG9zZWQuCisgICAgMiBpZiBkaXNwb3NpdGlvbiB3YXMgbWFpbCwgbWFp bCB3YXMgc2VudCwgYnV0IHRlbXAgZmlsZSBub3QgZGVsZXRlZC4KKyAgICAzIGlmIGRpc3Bvc2l0 aW9uIHdhcyBwcmludCwgZmlsZSB3YXMgcHJpbnRlZCwgYnV0IG5vdCBkZWxldGVkLgorICAgLTIg aWYgZGlzcG9zaXRpb24gd2FzIG1haWwgYW5kIG1haWwgY291bGQgbm90IGJlIHNlbnQKKyAgIC0z IGlmIGRpc3Bvc2l0aW9uIHdhcyBwcmludCBhbmQgZmlsZSBjb3VsZCBub3QgYmUgcHJpbnRlZAor ICAgLTQgaWYgTU9WRS1UTzogZmFpbGVkCisgICAtNSBpZiBSRU5BTUUtVE86IGZhaWxlZAorKi8K K2ludAorcmVvZihmLHl5KSBjaGFyICpmOyBzdHJ1Y3QgemF0dHIgKnl5OyB7CisgICAgZXh0ZXJu IGNoYXIgKiByY3ZfbW92ZSwgKiByY3ZfcmVuYW1lOworICAgIGV4dGVybiBpbnQgb19pc29wZW47 CisgICAgaW50IHJjID0gMDsJCQkJLyogUmV0dXJuIGNvZGUgKi8KKyAgICBjaGFyICpwOworICAg IGNoYXIgYzsKKworICAgIGRlYnVnKEYxMTEsInJlb2YgZm5jYWN0IixmLGZuY2FjdCk7CisgICAg ZGVidWcoRjEwMSwicmVvZiBkaXNjYXJkIiwiIixkaXNjYXJkKTsKKyAgICBzdWNjZXNzID0gMTsJ CQkvKiBBc3N1bWUgc3RhdHVzIGlzIE9LICovCisgICAgbHNzdGF0ZSA9IDA7CQkJLyogQ2FuY2Vs IGxvY2tpbmctc2hpZnQgc3RhdGUgKi8KKyAgICBpZiAoZGlzY2FyZCkgewkJCS8qIEhhbmRsZSBh dHRyaWJ1dGUgcmVmdXNhbHMsIGV0Yy4gKi8KKwlkZWJ1ZyhGMTAxLCJyZW9mIGRpc2NhcmRpbmci LCIiLDApOworCXN1Y2Nlc3MgPSAwOwkJCS8qIFN0YXR1cyA9IGZhaWxlZC4gKi8KKwlpZiAocmVq ZWN0aW9uID09ICcjJyB8fAkJLyogVW5sZXNzIHJlamVjdGlvbiByZWFzb24gaXMgKi8KKwkgICAg cmVqZWN0aW9uID09ICAxICB8fAkJLyogZGF0ZSBvciBuYW1lIChTRVQgRklMRSBDT0xMSVNJT04g Ki8KKwkgICAgcmVqZWN0aW9uID09ICc/JykJCS8qIFVQREFURSBvciBESVNDQVJEKSAqLworCSAg c3VjY2VzcyA9IDE7CisJZGVidWcoRjEwMSwicmVvZiBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKwlm aWxyZWorKzsJCQkvKiBDb3VudCB0aGlzIHJlamVjdGlvbi4gKi8KKwlkaXNjYXJkID0gMDsJCQkv KiBXZSBuZXZlciBvcGVuZWQgdGhlIGZpbGUsICovCisJcmV0dXJuKDApOwkJCS8qIHNvIHdlIGRv bid0IGNsb3NlIGl0LiAqLworICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsK KwlkZWJ1ZyhGMTAxLCJyZW9mIGN4c2VlbiIsIiIsY3hzZWVuKTsKKwlkZWJ1ZyhGMTAxLCJyZW9m IGN6c2VlbiIsIiIsY3pzZWVuKTsKKwlkZWJ1ZyhGMTEwLCJyZW9mIHJkYXRhcCIscmRhdGFwLDAp OworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgaWYgKGN4c2VlbiA9PSAwKQkJCS8q IEdvdCBjYW5jZWwgZGlyZWN0aXZlPyAqLworICAgICAgY3hzZWVuID0gKCpyZGF0YXAgPT0gJ0Qn KTsKKyAgICBpZiAoY3hzZWVuIHx8IGN6c2VlbikJCS8qIChmb3IgaGludHMpICovCisgICAgICBp bnRlcnJ1cHRlZCA9IDE7CisgICAgc3VjY2VzcyA9IChjeHNlZW4gfHwgY3pzZWVuKSA/IDAgOiAx OyAvKiBTZXQgU1VDQ0VTUyBmbGFnIGFwcHJvcHJpYXRlbHkgKi8KKyAgICBpZiAoIXN1Y2Nlc3Mp CQkJICAvKiAiVW5jb3VudCIgdGhpcyBmaWxlICovCisgICAgICBmaWxyZWorKzsKKyAgICBkZWJ1 ZyhGMTAxLCJyZW9mIG9faXNvcGVuIiwiIixvX2lzb3Blbik7CisKKyAgICBpZiAob19pc29wZW4p IHsJCQkvKiBJZiBhbiBvdXRwdXQgZmlsZSB3YXMgb3Blbi4uLiAqLworCisjaWZkZWYgQ0tfQ1RS TFoKKwlpZiAoc3VjY2VzcykgeworCSAgICBkZWJ1ZyhGMTAxLCJyZW9mIGxhc3RjaGFyIiwiIixs YXN0Y2hhcik7CisJICAgIGlmICghYmluYXJ5ICYmIGVvZm1ldGhvZCA9PSBYWUVPRl9aICYmIGxh c3RjaGFyICE9IDI2ICYmCisJCSgheGZsZyB8fCAoeGZsZyAmJiByZW1maWxlKSkpCisJICAgICAg cG5ieXRlKChjaGFyKTI2LHB1dGZpbCk7CisJfQorI2VuZGlmIC8qIENLX0NUUkxaICovCisKKwly YyA9IGNsc29mKGN4c2VlbiB8fCBjenNlZW4pOwkvKiBDbG9zZSB0aGUgZmlsZSAocmVzZXRzIGN4 c2VlbikgKi8KKwlkZWJ1ZyhGMTAxLCJyZW9mIGNsb3NmIiwiIixyYyk7CisJaWYgKHJjIDwgMCkg ewkJCS8qIElmIGZhaWx1cmUgdG8gY2xvc2UsIEZBSUwgKi8KKwkgICAgaWYgKHN1Y2Nlc3MpIGZp bHJlaisrOworCSAgICBzdWNjZXNzID0gMDsKKwl9CisJaWYgKCFjYWxpYnJhdGUpIHsKKwkgICAg LyogU2V0IGZpbGUgbW9kaWZpY2F0aW9uIGRhdGUgYW5kL29yIHBlcm1pc3Npb25zICovCisJICAg IGlmIChzdWNjZXNzKQorCSAgICAgIHpzdGltZShmLHl5LDApOworI2lmZGVmIE9TMk9OTFkKKyNp ZmRlZiBDS19MQUJFTEVECisJICAgIGlmIChzdWNjZXNzICYmIHl5LT5sb25nbmFtZS5sZW4pCisJ ICAgICAgb3Myc2V0bG9uZ25hbWUoZiwgeXktPmxvbmduYW1lLnZhbCk7CisjZW5kaWYgLyogQ0tf TEFCRUxFRCAqLworI2VuZGlmIC8qIE9TMk9OTFkgKi8KKwl9CisJaWYgKHN1Y2Nlc3MgPT0gMCkg ewkJLyogQW5kIHByb2dyYW0gcmV0dXJuIGNvZGUgKi8KKwkgICAgeGl0c3RhIHw9IFdfUkVDVjsK Kwl9IGVsc2UgaWYgKHN1Y2Nlc3MgPT0gMSkgewkvKiBGaWxlIHJlYydkIHN1Y2Nlc3NmdWxseSAq LworCSAgICBtYWtlc3RyKCZycmZzcGVjLHBycmZzcGVjKTsJLyogUmVjb3JkIGl0IGZvciB3aGVy ZW1zZyAqLworCSAgICBtYWtlc3RyKCZyZnNwZWMscHJmc3BlYyk7CisJfQorCisvKiBIYW5kbGUg ZGlzcG9zaXRpb25zIGZyb20gYXR0cmlidXRlIHBhY2tldC4uLiAqLworCisJYyA9IE5VTDsKKyNp Zm5kZWYgTk9GUklMTFMKKwlpZiAoIWNhbGlicmF0ZSAmJiB5eS0+ZGlzcC5sZW4gIT0gMCkgewor CSAgICBwID0geXktPmRpc3AudmFsOworCSAgICBjID0gKnArKzsKKyNpZm5kZWYgVU5JWAorLyoK KyAgU2VlIGNrY3Byby53LiAgSW4gVU5JWCB3ZSBkb24ndCB1c2UgdGVtcCBmaWxlcyBhbnkgbW9y ZSAtLSB3ZSBwaXBlIHRoZQorICBzdHVmZiByaWdodCBpbnRvIG1haWwgb3IgbHByLgorKi8KKwkg ICAgaWYgKGMgPT0gJ00nKSB7CQkvKiBNYWlsIHRvIHVzZXIuICovCisJCXJjID0gem1haWwocCxm aWxuYW0pOwkvKiBEbyB0aGUgc3lzdGVtJ3MgbWFpbCBjb21tYW5kICovCisJCWlmIChyYyA8IDAp IHN1Y2Nlc3MgPSAwOwkvKiBSZW1lbWJlciBzdGF0dXMgKi8KKwkJdGxvZyhGMTEwLCJtYWlsZWQi LGZpbG5hbSwwTCk7CisJCXRsb2coRjExMCwiIHRvIixwLDBMKTsKKwkJemRlbGV0KGZpbG5hbSk7 CQkvKiBEZWxldGUgdGhlIGZpbGUgKi8KKwkgICAgfSBlbHNlIGlmIChjID09ICdQJykgewkvKiBQ cmludCB0aGUgZmlsZS4gKi8KKwkJcmMgPSB6cHJpbnQocCxmaWxuYW0pOwkvKiBEbyB0aGUgc3lz dGVtJ3MgcHJpbnQgY29tbWFuZCAqLworCQlpZiAocmMgPCAwKSBzdWNjZXNzID0gMDsgLyogUmVt ZW1iZXIgc3RhdHVzICovCisJCXRsb2coRjExMCwicHJpbnRlZCIsZmlsbmFtLDBMKTsKKwkJdGxv ZyhGMTEwLCIgd2l0aCBvcHRpb25zIixwLDBMKTsKKyNpZm5kZWYgVk1TCisjaWZuZGVmIFNUUkFU VVMKKwkJLyogc3Bvb2xlciBkZWxldGVzIGZpbGUgYWZ0ZXIgcHJpbnQgY29tcGxldGUgaW4gVk9T ICYgVk1TICovCisJCWlmICh6ZGVsZXQoZmlsbmFtKSAmJiByYyA9PSAwKSByYyA9IDM7IC8qIERl bGV0ZSB0aGUgZmlsZSAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8K KwkgICAgfQorI2VuZGlmIC8qIFVOSVggKi8KKwl9CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKwor CWlmIChzdWNjZXNzICYmCisJICAgICFwaXBlc2VuZCAmJgorCSAgICAhY2FsaWJyYXRlICYmIGMg IT0gJ00nICYmIGMgIT0gJ1AnKSB7CisJICAgIGlmIChyY3ZfbW92ZSkgewkJLyogSWYgL01PVkUt VE8gd2FzIGdpdmVuLi4uICovCisJCWNoYXIgKiBwID0gcmN2X21vdmU7CisjaWZkZWYgQ09NTUVO VAorLyogTm8gbmVlZCBmb3IgdGhpcyAtIGl0J3MgYSBkaXJlY3RvcnkgbmFtZSAqLworCQljaGFy IHRtcGJ1ZltDS01BWFBBVEgrMV07CisJCWV4dGVybiBpbnQgY21kX3F1b3Rpbmc7CS8qIGZvciBc dihmaWxlbmFtZSkgKi8KKwkJaWYgKGNtZF9xdW90aW5nKSB7CS8qIEJ1dCBvbmx5IGlmIGNtZF9x dW90aW5nIGlzIG9uICovCisJCSAgICBpbnQgbjsKKwkJICAgIG4gPSBDS01BWFBBVEg7CisJCSAg ICBwID0gdG1wYnVmOworCQkgICAgZGVidWcoRjExMSwicmVvZiAvbW92ZS10byIscmN2X21vdmUs MCk7CisJCSAgICB6enN0cmluZyhyY3ZfbW92ZSwmcCwmbik7CisJCSAgICBwID0gdG1wYnVmOwor CQl9CisjZW5kaWYgLyogQ09NTUVOVCAqLworLyoKKyAgSGVyZSB3ZSBjb3VsZCBjcmVhdGUgdGhl IGRpcmVjdG9yeSBpZiBpdCBkaWRuJ3QgZXhpc3QgKGFuZCBpdCB3YXMgcmVsYXRpdmUpCisgIGJ1 dCB0aGVyZSB3b3VsZCBoYXZlIHRvIGJlIGEgdXNlci1zZXR0YWJsZSBvcHRpb24gdG8gc2F5IHdo ZXRoZXIgdG8gZG8gdGhpcy4KKyovCisJCXJjID0genJlbmFtZShmaWxuYW0scCk7CisJCWRlYnVn KEYxMTEsInJlb2YgTU9WRSB6cmVuYW1lIixyY3ZfbW92ZSxyYyk7CisJCWlmIChyYyA+IC0xKSB7 CisJCSAgICB0bG9nKEYxMTAsIiBtb3ZpbmcgcmVjZWl2ZWQgZmlsZSB0byIscmN2X21vdmUsMCk7 CisJCX0gZWxzZSB7CisJCSAgICByYyA9IC00OworCQkgICAgdGxvZyhGMTEwLCIgRkFJTEVEIHRv IG1vdmUgcmVjZWl2ZWQgZmlsZSB0byIscmN2X21vdmUsMCk7CisJCX0KKwkgICAgfSBlbHNlIGlm IChyY3ZfcmVuYW1lKSB7CS8qIE9yIC9SRU5BTUUtVE86ICovCisJCWNoYXIgKnMgPSByY3ZfcmVu YW1lOwkvKiBUaGlzIGlzIHRoZSByZW5hbWluZyBzdHJpbmcgKi8KKyNpZm5kZWYgTk9TUEwKKwkJ Y2hhciB0bXBuYW1bQ0tNQVhQQVRIKzE2XTsKKwkJZXh0ZXJuIGludCBjbWRfcXVvdGluZzsJLyog Zm9yIFx2KGZpbGVuYW1lKSAqLworCQlpZiAoY21kX3F1b3RpbmcpIHsJLyogQnV0IG9ubHkgaWYg Y21kX3F1b3RpbmcgaXMgb24gKi8KKwkJICAgIGludCBuOwkJLyogUGFzcyBpdCB0aHJ1IHRoZSBl dmFsdWF0b3IgKi8KKwkJICAgIG4gPSBDS01BWFBBVEg7CisJCSAgICBzID0gKGNoYXIgKil0bXBu YW07CisJCSAgICB6enN0cmluZyhyY3ZfcmVuYW1lLCZzLCZuKTsKKwkJICAgIHMgPSAoY2hhciAq KXRtcG5hbTsKKwkJfQorI2VuZGlmIC8qIE5PU1BMICovCisJCWlmIChzKSBpZiAoKnMpIHsKKwkJ ICAgIHJjID0genJlbmFtZShmaWxuYW0scyk7CisJCSAgICBkZWJ1ZyhGMTExLCJyZW9mIFJFTkFN RSB6cmVuYW1lIixzLHJjKTsKKwkJICAgIGlmIChyYyA+IC0xKSB7CisJCQl0bG9nKEYxMTAsIiBy ZW5hbWluZyByZWNlaXZlZCBmaWxlIHRvIixzLDApOworCQkgICAgfSBlbHNlIHsKKwkJCXJjID0g LTU7CisJCQl0bG9nKEYxMTAsIiBGQUlMRUQgdG8gcmVuYW1lIHJlY2VpdmVkIGZpbGUgdG8iLHMs MCk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICB9CisgICAgZGVidWcoRjEwMSwicmVv ZiBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKyAgICBkZWJ1ZyhGMTAxLCJyZW9mIHJldHVybnMiLCIi LHJjKTsKKworICAgIGZpbG5hbVswXSA9IE5VTDsJCQkvKiBFcmFzZSB0aGUgZmlsZW5hbWUgKi8K KyAgICByZXR1cm4ocmMpOworfQorCisvKiAgUiBFIE8gVCAgLS0gIFJlY2VpdmUgRW5kIE9mIFRy YW5zYWN0aW9uICAqLworCitWT0lECityZW90KCkgeworICAgIGN4c2VlbiA9IGN6c2VlbiA9IGRp c2NhcmQgPSAwOwkvKiBSZXNldCBpbnRlcnJ1cHRpb24gZmxhZ3MgKi8KKyAgICB0c3RhdHMoKTsJ CQkJLyogRmluYWxpemUgdHJhbnNmZXIgc3RhdGlzdGljcyAqLworfQorCisvKiAgUyBGIEkgTCBF IC0tIFNlbmQgRmlsZSBoZWFkZXIgb3IgdGVYdCBoZWFkZXIgcGFja2V0ICAqLworCisvKgorICBD YWxsIHdpdGggeCBub256ZXJvIGZvciBYIHBhY2tldCwgemVybyBmb3IgRiBwYWNrZXQuCisgIElm IFggPT0gMCwgZmlsZW5hbWUgdG8gc2VuZCBpcyBpbiBmaWxuYW1bXSwgYW5kIGlmIGNtYXJnMiBp cyBub3QgbnVsbAorICBvciBlbXB0eSwgdGhlIGZpbGUgc2hvdWxkIGJlIHNlbnQgdW5kZXIgdGhp cyBuYW1lIHJhdGhlciB0aGFuIGZpbG5hbVtdLgorICBJZiBzbmRmaWx0ZXIgbm90IE5VTEwsIGl0 IGlzIHRoZSBuYW1lIG9mIGEgc2VuZCBmaWx0ZXIuCisgIFJldHVybnMgMSBvbiBzdWNjZXNzLCAw IG9uIGZhaWx1cmUuCisqLworaW50CitzZmlsZSh4KSBpbnQgeDsgeworI2lmZGVmIHBkcDExCisj ZGVmaW5lIFBLVE5MIDY0CisjZWxzZQorI2RlZmluZSBQS1ROTCAyNTYKKyNlbmRpZiAvKiBwZHAx MSAqLworICAgIGNoYXIgcGt0bmFtW1BLVE5MKzFdOwkJLyogTG9jYWwgY29weSBvZiBuYW1lICov CisgICAgY2hhciAqczsKKyAgICBpbnQgcmM7CisgICAgaW50IG5vdGFmaWxlID0gMDsKKyAgICBl eHRlcm4gaW50IGZpbGVwZWVrOworI2lmZGVmIFBJUEVTRU5ECisgICAgZXh0ZXJuIGNoYXIgKiBz bmRmaWx0ZXI7CisKKyAgICBpZiAoc25kZmlsdGVyKSB7CisJcGlwZXNlbmQgPSAxOworCWRlYnVn KEYxMTAsInNmaWxlIHNlbmQgZmlsdGVyICIsc25kZmlsdGVyLDApOworICAgIH0KKyNlbmRpZiAv KiBQSVBFU0VORCAqLworCisgICAgbm90YWZpbGUgPSBjYWxpYnJhdGUgfHwgc25kYXJyYXkgfHwg cGlwZXNlbmQgfHwgeDsKKyAgICBkZWJ1ZyhGMTAxLCJzZmlsZSB4IiwiIix4KTsKKyAgICBkZWJ1 ZyhGMTAxLCJzZmlsZSBub3RhZmlsZSIsIiIsbm90YWZpbGUpOworCisjaWZuZGVmIE5PQ1NFVFMK KyAgICBpZiAodGNzX3NhdmUgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0 cyAqLworICAgICAgICB0Y2hhcnNldCA9IHRjc19zYXZlOworICAgICAgICB0Y3Nfc2F2ZSA9IC0x OworCWRlYnVnKEYxMDEsInNmaWxlIHJlc3RvcmVkIHRjaGFyc2V0IiwiIix0Y2hhcnNldCk7Cisg ICAgfQorICAgIGlmIChmY3Nfc2F2ZSA+IC0xKSB7CisgICAgICAgIGZjaGFyc2V0ID0gZmNzX3Nh dmU7CisgICAgICAgIGZjc19zYXZlID0gLTE7CisJZGVidWcoRjEwMSwic2ZpbGUgcmVzdG9yZWQg ZmNoYXJzZXQiLCIiLGZjaGFyc2V0KTsKKyAgICB9CisgICAgc2V0eGxhdHlwZSh0Y2hhcnNldCxm Y2hhcnNldCk7ICAgICAgLyogVHJhbnNsYXRpb24gdHlwZSAqLworI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KKworICAgIC8qIGNtYXJnMiBvciBmaWxuYW0gKHdpdGggdGhhdCBwcmVjZWRlbmNlKSBoYXZl IHRoZSBmaWxlJ3MgbmFtZSAqLworCisgICAgbHNzdGF0ZSA9IDA7CQkJLyogQ2FuY2VsIGxvY2tp bmctc2hpZnQgc3RhdGUgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgLyogRG8gdGhpcyBhZnRlciBt YWtpbmcgc3VyZSB3ZSBjYW4gb3BlbiB0aGUgZmlsZSAqLworICAgIGlmIChueHRwa3QoKSA8IDAp IHJldHVybigwKTsJLyogQnVtcCBwYWNrZXQgbnVtYmVyLCBnZXQgYnVmZmVyICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgIHBrdG5hbVswXSA9IE5VTDsJCQkvKiBCdWZmZXIgZm9yIG5hbWUg d2Ugd2lsbCBzZW5kICovCisgICAgaWYgKHggPT0gMCkgewkJCS8qIEYtUGFja2V0IHNldHVwICov CisJaWYgKCFjbWFyZzIpIGNtYXJnMiA9ICIiOworI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZykg eworCSAgICAvKiBkZWJ1ZyhGMTExLCJzZmlsZSBjbWFyZzIiLGNtYXJnMixjbWFyZzIpOyAqLwor CSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBiaW5hcnkgMSIsIiIsYmluYXJ5KTsKKwkgICAgZGVidWco RjEwMSwic2ZpbGUgd2VhcmVhbGlrZSIsIiIsd2VhcmVhbGlrZSk7CisJICAgIGRlYnVnKEYxMDEs InNmaWxlIHhmZXJtb2RlIiwiIix4ZmVybW9kZSk7CisJICAgIGRlYnVnKEYxMDEsInNmaWxlIGZp bGVwZWVrIiwiIixmaWxlcGVlayk7CisjaWZuZGVmIE5PQ1NFVFMKKwkgICAgZGVidWcoRjEwMSwi c2ZpbGUgc19jc2V0IiwiIixzX2NzZXQpOworCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSB0Y2hhcnNl dCIsIiIsdGNoYXJzZXQpOworCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSB4ZnJ4bGEiLCIiLHhmcnhs YSk7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCX0KKyNlbmRpZiAvKiBERUJVRyAqLworCWlmICh4 ZmVybW9kZSA9PSBYTU9ERV9BCQkvKiBUUkFOU0ZFUiBNT0RFIEFVVE9NQVRJQyAqLworI2lmbmRl ZiBOT01TRU5ECisJICAgICYmICFhZGRsaXN0CQkJLyogQW5kIG5vdCB3b3JraW5nIGZyb20gYSBT RU5ELUxJU1QgKi8KKyNlbmRpZiAvKiBOT01TRU5EICovCisJICAgICkgeworCSAgICAvKiBPdGhl ciBLZXJtaXQgaXMgb24gYSBsaWtlIHN5c3RlbSBhbmQgbm8gY2hhcnNldCB0cmFuc2xhdGlvbiAq LworCSAgICBpZiAod2VhcmVhbGlrZQorI2lmbmRlZiBOT0NTRVRTCisJCSYmICh0Y2hhcnNldCA9 PSBUQ19UUkFOU1AgfHwgeGZyeGxhID09IDApCisjZW5kaWYgLyogTk9DU0VUUyAqLworCQkpIHsK KyNpZmRlZiBWTVMKKwkJaWYgKGJpbmFyeSAhPSBYWUZUX0kpCisjZW5kaWYgLyogVk1TICovCisj aWZkZWYgQ0tfTEFCRUxFRAorCQkgIGlmIChiaW5hcnkgIT0gWFlGVF9MKQorI2VuZGlmIC8qIENL X0xBQkVMRUQgKi8KKwkJICAgIGJpbmFyeSA9IFhZRlRfQjsJLyogU2VuZCBhbGwgZmlsZXMgaW4g YmluYXJ5IG1vZGUgKi8KKwkgICAgfQorCisJICAgIC8qIE90aGVyd2lzZSBzZWxlY3QgdHJhbnNm ZXIgbW9kZSBiYXNlZCBvbiBmaWxlIGluZm8gKi8KKworCSAgICBlbHNlIGlmICghbm90YWZpbGUJ CS8qIGJ1dCBub3QgaWYgc2VuZGluZyBmcm9tIHBpcGUgKi8KKyNpZmRlZiBDS19MQUJFTEVECisJ CSAgICAgJiYgYmluYXJ5ICE9IFhZRlRfTCAvKiBhbmQgbm90IGlmIEZJTEUgVFlQRSBMQUJFTEVE ICovCisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLworI2lmZGVmIFZNUworCQkgICAgICYmIGJpbmFy eSAhPSBYWUZUX0kgLyogb3IgRklMRSBUWVBFIElNQUdFICovCisjZW5kaWYgLyogVk1TICovCisJ CSAgICAgKSB7CisjaWZkZWYgVU5JQ09ERQorCQlmaWxlb3JkZXIgPSAtMTsJCS8qIEZpbGUgYnl0 ZSBvcmRlciAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkJaWYgKGZpbGVwZWVrICYmICFub3Rh ZmlsZSkgeyAvKiBSZWFsIGZpbGUsIEZJTEUgU0NBTiBpcyBPTiAqLworCQkgICAgaW50IGssIHg7 CisJCSAgICBrID0gc2NhbmZpbGUoZmlsbmFtLCZ4LG5zY2FuZmlsZSk7IC8qIFNjYW4gdGhlIGZp bGUgKi8KKwkJICAgIGRlYnVnKEYxMDEsInNmaWxlIHNjYW5maWxlIiwiIixrKTsKKwkJICAgIHN3 aXRjaCAoaykgeworCQkgICAgICBjYXNlIEZUX1RFWFQ6CS8qIFVuc3BlY2lmaWVkIHRleHQgKi8K KwkJCWRlYnVnKEYxMDAsInNmaWxlIHNjYW5maWxlIHRleHQiLCIiLDApOworCQkJYmluYXJ5ID0g WFlGVF9UOyAvKiBTRVQgRklMRSBUWVBFIFRFWFQgKi8KKwkJCWJyZWFrOworI2lmbmRlZiBOT0NT RVRTCisJCSAgICAgIGNhc2UgRlRfN0JJVDoJCS8qIDctYml0IHRleHQgKi8KKwkJCWJpbmFyeSA9 IFhZRlRfVDsJLyogU0VUIEZJTEUgVFlQRSBURVhUICovCisJCQkvKiBJZiBTRU5EIENIQVJTRVQt U0VMRUNUSU9OIEFVVE8gICovCisJCQkvKiBhbmQgU0VUIFRSQU5TRkVSIFRSQU5TTEFUSU9OIGlz IE9OICovCisJCQlkZWJ1ZyhGMTAwLCJzZmlsZSBzY2FuZmlsZSB0ZXh0NyIsIiIsMCk7CisJCQlp ZiAoc19jc2V0ID09IFhNT0RFX0EgJiYgeGZyeGxhKSB7CisJCQkgICAgaWYgKGZjc2luZm9bZmNo YXJzZXRdLnNpemUgIT0gMTI4KSB7CisJCQkJZmNzX3NhdmUgPSBmY2hhcnNldDsgLyogQ3VycmVu dCBGQ1Mgbm90IDdiaXQgKi8KKwkJCQlmY2hhcnNldCA9IGRjc2V0NzsgICAvKiBVc2UgZGVmYXVs dCA3Yml0IHNldCAqLworCQkJCWRlYnVnKEYxMDEsInNmaWxlIHNjYW5maWxlIDcgZmNoYXJzZXQi LAorCQkJCSAgICAgICIiLGZjaGFyc2V0KTsKKwkJCSAgICB9CisJCQkgICAgLyogQW5kIGFsc28g c3dpdGNoIHRvIGFwcHJvcHJpYXRlIFRDUyAqLworCQkJICAgIGlmIChhZmNzZXRbZmNoYXJzZXRd ID4gLTEgJiYKKwkJCQlhZmNzZXRbZmNoYXJzZXRdIDw9IE1BWFRDU0VUUykgeworCQkJCXRjc19z YXZlID0gdGNoYXJzZXQ7CisJCQkJdGNoYXJzZXQgPSBhZmNzZXRbZmNoYXJzZXRdOworCQkJCWRl YnVnKEYxMDEsInNmaWxlIHNjYW5maWxlIDcgdGNoYXJzZXQiLCIiLAorCQkJCSAgICAgIHRjaGFy c2V0KTsKKwkJCSAgICB9CisJCQkgICAgc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7CisJ CQl9CisJCQlicmVhazsKKworCQkgICAgICBjYXNlIEZUXzhCSVQ6CS8qIDgtYml0IHRleHQgKi8K KwkJCWJpbmFyeSA9IFhZRlRfVDsgLyogU0VUIEZJTEUgVFlQRSBURVhUICovCisJCQkvKiBJZiBT RU5EIENIQVJTRVQtU0VMRUMgQVVUTyAgKi8KKwkJCS8qIGFuZCBTRVQgVFJBTlNGRVIgVFJBTlNM QVRJT04gaXMgT04gKi8KKwkJCWRlYnVnKEYxMDAsInNmaWxlIHNjYW5maWxlIHRleHQ4IiwiIiww KTsKKwkJCWlmIChzX2NzZXQgPT0gWE1PREVfQSAmJiB4ZnJ4bGEpIHsKKwkJCSAgICBpZiAoZmNz aW5mb1tmY2hhcnNldF0uc2l6ZSAhPSAyNTYpIHsKKwkJCQlmY3Nfc2F2ZSA9IGZjaGFyc2V0OyAv KiBDdXJyZW50IEZDUyBub3QgOGJpdCAqLworCQkJCWZjaGFyc2V0ID0gZGNzZXQ4OyAvKiBVc2Ug ZGVmYXVsdCA4Yml0IHNldCAqLworCQkJCWRlYnVnKEYxMDEsInNmaWxlIHNjYW5maWxlIDggZmNo YXJzZXQiLAorCQkJCSAgICAgICIiLGZjaGFyc2V0KTsKKwkJCSAgICB9CisJCQkgICAgLyogU3dp dGNoIHRvIGNvcnJlc3BvbmRpbmcgdHJhbnNmZXIgY2hhcnNldCAqLworCQkJICAgIGlmIChhZmNz ZXRbZmNoYXJzZXRdID4gLTEgJiYKKwkJCQlhZmNzZXRbZmNoYXJzZXRdIDw9IE1BWFRDU0VUUykg eworCQkJCXRjc19zYXZlID0gdGNoYXJzZXQ7CisJCQkJdGNoYXJzZXQgPSBhZmNzZXRbZmNoYXJz ZXRdOworCQkJCWRlYnVnKEYxMDEsInNmaWxlIHNjYW5maWxlIDggdGNoYXJzZXQiLCIiLAorCQkJ CSAgICAgIHRjaGFyc2V0KTsKKwkJCSAgICB9CisJCQkgICAgc2V0eGxhdHlwZSh0Y2hhcnNldCxm Y2hhcnNldCk7CisJCQl9CisJCQlicmVhazsKKyNpZmRlZiBVTklDT0RFCisJCSAgICAgIGNhc2Ug RlRfVVRGODoJLyogVVRGLTggdGV4dCAqLworCQkgICAgICBjYXNlIEZUX1VDUzI6CS8qIFVDUy0y IHRleHQgKi8KKwkJCWRlYnVnKEYxMDEsInNmaWxlIHNjYW5maWxlIFVuaWNvZGUiLCIiLGspOwor CQkJYmluYXJ5ID0gWFlGVF9UOworCQkJLyogSWYgU0VORCBDSEFSU0VULVNFTEVDIEFVVE8gICov CisJCQkvKiBhbmQgU0VUIFRSQU5TRkVSIFRSQU5TTEFUSU9OIGlzIE9OICovCisJCQlpZiAoc19j c2V0ID09IFhNT0RFX0EgJiYgeGZyeGxhKSB7CisJCQkgICAgZmNzX3NhdmUgPSBmY2hhcnNldDsK KwkJCSAgICB0Y3Nfc2F2ZSA9IHRjaGFyc2V0OworCQkJICAgIGZjaGFyc2V0ID0gKGsgPT0gRlRf VUNTMikgPyBGQ19VQ1MyIDogRkNfVVRGODsKKwkJCSAgICBpZiAoayA9PSBGVF9VQ1MyICYmIHgg PiAtMSkKKwkJCSAgICAgIGZpbGVvcmRlciA9IHg7CisJCQl9CisJCQkvKiBTd2l0Y2ggdG8gYXNz b2NpYXRlZCB0cmFuc2ZlciBjaGFyc2V0IGlmIGFueSAqLworCQkJaWYgKGFmY3NldFtmY2hhcnNl dF0gPiAtMSAmJgorCQkJICAgIGFmY3NldFtmY2hhcnNldF0gPD0gTUFYVENTRVRTKQorCQkJICB0 Y2hhcnNldCA9IGFmY3NldFtmY2hhcnNldF07CisJCQlpZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQ KSAvKiBJZiBub25lICovCisJCQkgIHRjaGFyc2V0ID0gVENfVVRGODsgICAgICAvKiB1c2UgVVRG LTggKi8KKwkJCXNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOworCQkJZGVidWcoRjEwMSwi c2ZpbGUgVW5pY29kZSB0Y2hhcnNldCIsIiIsdGNoYXJzZXQpOworCQkJYnJlYWs7CisjZW5kaWYg LyogVU5JQ09ERSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJICAgICAgY2FzZSBGVF9CSU46 CisJCQlkZWJ1ZyhGMTAxLCJzZmlsZSBzY2FuZmlsZSBiaW5hcnkiLCIiLGspOworCQkJYmluYXJ5 ID0gWFlGVF9COworCQkJYnJlYWs7CisJCSAgICAvKiBEZWZhdWx0OiBEb24ndCBjaGFuZ2UgYW55 dGhpbmcgKi8KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIGRlYnVnKEYxMDEsInNmaWxlIGJp bmFyeSAyIiwiIixiaW5hcnkpOworCSAgICBkZWJ1ZyhGMTAxLCJzZmlsZSBzZW5kbW9kZSIsIiIs c2VuZG1vZGUpOworCX0KKyAgICAJaWYgKCpjbWFyZzIpIHsJCQkvKiBJZiB3ZSBoYXZlIGEgc2Vu ZC1hcyBuYW1lLi4uICovCisJICAgIGludCB5OyBjaGFyICpzOworI2lmbmRlZiBOT1NQTAkJCQkv KiBhbmQgYSBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgKi8KKwkgICAgZXh0ZXJuIGludCBj bWRfcXVvdGluZzsKKwkgICAgaWYgKGNtZF9xdW90aW5nKSB7CQkvKiBhbmQgaXQncyBub3QgdHVy bmVkIG9mZiAqLworCQl5ID0gUEtUTkw7CQkvKiBwYXNzIGFzLW5hbWUgdGhydSB0aGUgZXZhbHVh dG9yICovCisJCXMgPSBwa3RuYW07CisJCXp6c3RyaW5nKGNtYXJnMiwmcywmeSk7CisjaWZkZWYg Q09NTUVOVAorLyogVGhpcyBydWlucyBtYWNyb3MgbGlrZSBCU0VORCAqLworCQlpZiAoIXBrdG5h bVswXSkJCS8qIGFuZCBtYWtlIHN1cmUgcmVzdWx0IGlzIG5vdCBlbXB0eSAqLworCQkgIHNwcmlu dGYocGt0bmFtLCJGSUxFJTAybGQiLGZpbGNudCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCSAg ICB9IGVsc2UKKyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICAgIGNrc3RybmNweShwa3RuYW0sY21h cmcyLFBLVE5MKTsgLyogY29weSBpdCBsaXRlcmFsbHksICovCisKKwkgICAgZGVidWcoRjExMCwi c2ZpbGUgcGt0bmFtIixwa3RuYW0sMCk7CisjaWZkZWYgQ09NTUVOVAorLyogV2UgZG9uJ3QgZG8g dGhpcyBhbnkgbW9yZSBiZWNhdXNlIG5vdyB3ZSBoYXZlIGZpbGVuYW1lIHRlbXBsYXRlcyAqLwor CSAgICBjbWFyZzIgPSAiIjsJCS8qIGFuZCBibGFuayBpdCBvdXQgZm9yIG5leHQgdGltZS4gKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgCX0KKwlpZiAoISpwa3RuYW0pIHsJCQkvKiBObyBh cy1uYW1lLi4uICovCisjaWZkZWYgTlpMVE9SCisJICAgIGludCB4Zm5jbnYsIHhwYXRoOworCSAg ICBkZWJ1ZyhGMTAxLCJzZmlsZSBmbnNwYXRoIiwiIixmbnNwYXRoKTsKKwkgICAgZGVidWcoRjEw MSwic2ZpbGUgZm5jbnYiLCIiLGZuY252KTsKKwkgICAgeGZuY252ID0gZm5jbnY7CisJICAgIHhw YXRoID0gZm5zcGF0aDsKKwkgICAgaWYgKG5vdGFmaWxlKSB7CQkvKiBJZiBub3QgYW4gYWN0dWFs IGZpbGUgKi8KKwkJeGZuY252ID0gMDsJCS8qIERvbid0IGNvbnZlcnQgbmFtZSAqLworCQl4cGF0 aCA9IFBBVEhfT0ZGOwkvKiBMZWF2ZSBwYXRoIG9mZiAqLworCSAgICB9IGVsc2UgaWYgKHhmbmNu diAmJgorCQkgICAgICAgKCFzdHJjbXAod2hvYXJldSwiVTEiKSB8fCAhc3RyY21wKHdob2FyZXUs IlVOIikpCisJCSAgICAgICApIHsKKwkJLyogTGVzcy1zdHJpY3QgY29udmVyc2lvbiBpZiBwYXJ0 bmVyIGlzIFVOSVggb3IgV2luMzIgKi8KKwkJeGZuY252ID0gLTE7CisJICAgIH0KKwkgICAgZGVi dWcoRjEwMSwic2ZpbGUgeHBhdGgiLCIiLHhwYXRoKTsKKwkgICAgZGVidWcoRjEwMSwic2ZpbGUg eGZuY252IiwiIix4Zm5jbnYpOworCSAgICBuemx0b3IoZmlsbmFtLHBrdG5hbSx4Zm5jbnYseHBh dGgsUEtUTkwpOworCisjZWxzZSAgLyogTm90IE5aTFRPUiAqLworCisJICAgIGRlYnVnKEYxMDEs InNmaWxlIGZuc3BhdGgiLCIiLGZuc3BhdGgpOworCSAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09G RgkvKiBTdHJpcHBpbmcgcGF0aCBuYW1lcz8gKi8KKwkJJiYgKCFub3RhZmlsZSkJCS8qIChvZiBh Y3R1YWwgZmlsZXMpICovCisJCSkgeworCQljaGFyICp0OwkJLyogWWVzLiAqLworCQl6c3RyaXAo ZmlsbmFtLCZ0KTsJLyogU3RyaXAgb2ZmIHRoZSBwYXRoLiAqLworCQlkZWJ1ZyhGMTEwLCJzZmls ZSB6c3RyaXAiLHQsMCk7CisJCWlmICghdCkgdCA9ICJVTktOT1dOIjsJLyogQmUgY2F1dGlvdXMu Li4gKi8KKwkJZWxzZSBpZiAoKnQgPT0gJ1wwJykKKwkJICB0ID0gIlVOS05PV04iOworCQlja3N0 cm5jcHkocGt0bmFtLHQsUEtUTkwpOyAvKiBDb3B5IHN0cmlwcGVkIG5hbWUgbGl0ZXJhbGx5LiAq LworCSAgICB9IGVsc2UgaWYgKGZuc3BhdGggPT0gUEFUSF9BQlMgJiYgIW5vdGFmaWxlKSB7CisJ CS8qIENvbnZlcnRpbmcgdG8gYWJzb2x1dGUgZm9ybSAqLworCQl6Zm5xZnAoZmlsbmFtLFBLVE5M LHBrdG5hbSk7CisJICAgIH0gZWxzZQorCQlja3N0cm5jcHkocGt0bmFtLGZpbG5hbSxQS1ROTCk7 CisKKwkgICAgLyogcGt0bmFtW10gaGFzIHRoZSBwYWNrZXQgbmFtZSwgZmlsbmFtW10gaGFzIHRo ZSBvcmlnaW5hbCBuYW1lLiAqLworCSAgICAvKiBCdXQgd2Ugc3RpbGwgbmVlZCB0byBjb252ZXJ0 IHBrdG5hbSBpZiBGSUxFIE5BTUVTIENPTlZFUlRFRC4gICovCisKKwkgICAgZGVidWcoRjEwMSwi c2ZpbGUgZm5jbnYiLCIiLGZuY252KTsKKwkgICAgaWYgKGZuY252ICYmICFub3RhZmlsZSkgewkv KiBJZiBjb252ZXJ0aW5nIG5hbWVzIG9mIGZpbGVzICovCisJCXpsdG9yKHBrdG5hbSwoY2hhciAq KXNydmNtZCk7IC8qIGNvbnZlcnQgaXQgdG8gY29tbW9uIGZvcm0sICovCisJCWNrc3RybmNweShw a3RuYW0sKGNoYXIgKilzcnZjbWQsUEtUTkwpOworCQkqc3J2Y21kID0gTlVMOworCSAgICB9Cisj ZW5kaWYgLyogTlpMVE9SICovCisgICAgCX0KKwlpZiAoISpwa3RuYW0pCQkJLyogRmFpbHNhZmUu Li4gKi8KKwkgIHNwcmludGYocGt0bmFtLCJGSUxFJTAybGQiLGZpbGNudCk7CisJZGVidWcoRjEx MCwic2ZpbGUgZmlsbmFtIDEiLGZpbG5hbSwwKTsKKwlkZWJ1ZyhGMTEwLCJzZmlsZSBwa3RuYW0g MSIscGt0bmFtLDApOworI2lmZGVmIFBJUEVTRU5ECisvKiBJZiB3ZSBoYXZlIGEgc2VuZCBmaWx0 ZXIsIHN1YnN0aXR1dGUgdGhlIGN1cnJlbnQgZmlsZW5hbWUgaW50byBpdCAqLworCisJaWYgKHNu ZGZpbHRlcikgeworCSAgICBjaGFyICogcCA9IE5VTEwsICogcTsKKwkgICAgaW50IG4gPSBDS01B WFBBVEg7CisjaWZuZGVmIE5PU1BMCisJICAgIGlmICgocCA9IChjaGFyICopIG1hbGxvYyhuICsg MSkpKSB7CisJCXEgPSBwOworCQlkZWJ1ZyhGMTEwLCJzZmlsZSBwaXBlc2VuZCBmaWx0ZXIiLHNu ZGZpbHRlciwwKTsKKwkJenpzdHJpbmcoc25kZmlsdGVyLCZwLCZuKTsKKwkJZGVidWcoRjExMSwi c2ZpbGUgcGlwZW5hbWUiLHEsbik7CisJCWlmIChuIDw9IDApIHsKKwkJICAgIHByaW50ZigKKwkJ CSAgIj9Tb3JyeSwgc2VuZCBmaWx0ZXIgKyBmaWxlbmFtZSB0b28gbG9uZywgJWQgbWF4LlxuIiwK KwkJCSAgIENLTUFYUEFUSAorCQkJICAgKTsKKwkJICAgIGZyZWUocSk7CisJCSAgICByZXR1cm4o MCk7CisJCX0KKwkJY2tzdHJuY3B5KGZpbG5hbSxxLENLTUFYUEFUSCsxKTsKKwkJZnJlZShxKTsK KwkgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisJfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisK KyAgICAJZGVidWcoRjExMCwic2ZpbGUgZmlsbmFtIDIiLGZpbG5hbSwwKTsgLyogTG9nIGRlYnVn Z2luZyBpbmZvICovCisgICAgCWRlYnVnKEYxMTAsInNmaWxlIHBrdG5hbSAyIixwa3RuYW0sMCk7 CisgICAgCWlmIChvcGVuaShmaWxuYW0pID09IDApIAkvKiBUcnkgdG8gb3BlbiB0aGUgaW5wdXQg ZmlsZSAqLworCSAgcmV0dXJuKDApOworCisjaWZkZWYgQ0tfUkVTRU5ECisvKgorICBUaGUgZm9s bG93aW5nIGNoZWNrIGlzIGRvbmUgYWZ0ZXIgb3BlbmkoKSBpcyBjYWxsZWQsIHNpbmNlIG9wZW5p KCkgaXRzZWxmCisgIGNhbiBjaGFuZ2UgdGhlIHRyYW5zZmVyIG1vZGUgKGFzIGluIFZNUykuCisq LworICAgICAgICBpZiAoKGJpbmFyeSA9PSBYWUZUX1QKKyNpZmRlZiBWTVMKKwkgICAgIHx8IGJp bmFyeSA9PSBYWUZUX0wKKyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgICkgJiYgc2VuZG1vZGUgPT0g U01fUkVTRU5EKSB7CisgICAgICAgICAgICAvKiBUcnlpbmcgdG8gUkVTRU5EL1JFR0VUIGEgZmls ZSBmaXJzdCBzZW50IGluIFRFWFQgbW9kZS4gKi8KKwkgICAgZGVidWcoRjExMSwic2ZpbGUgZXJy b3IgLSBSZWNvdmVyIHZzIFRleHQiLGZpbG5hbSxiaW5hcnkpOworICAgICAgICAgICAgLyogU2V0 IGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2VzIGFuZCBtYWtlIGxvZyBlbnRyaWVzIGhlcmUgKi8K KyNpZmRlZiBWTVMKKwkgICAgaWYgKGJpbmFyeSA9PSBYWUZUX0wpCisJICAgICAgY2ttYWttc2co KGNoYXIgKillcGt0bXNnLAorCQkgICAgICAgUEtUTVNHTEVOLAorCQkgICAgICAgIlJlY292ZXJ5 IGF0dGVtcHRlZCBpbiBMQUJFTEVEIG1vZGU6ICIsCisJCSAgICAgICBmaWxuYW0sCisJCSAgICAg ICBOVUxMLAorCQkgICAgICAgTlVMTAorCQkgICAgICAgKTsKKwkgICAgZWxzZQorI2VuZGlmIC8q IFZNUyAqLworCSAgICAgIGNrbWFrbXNnKChjaGFyICopZXBrdG1zZywKKwkJICAgICAgIFBLVE1T R0xFTiwKKwkJICAgICAgICJSZWNvdmVyeSBhdHRlbXB0ZWQgaW4gVEVYVCBtb2RlOiAiLAorCQkg ICAgICAgZmlsbmFtLAorCQkgICAgICAgTlVMTCwKKwkJICAgICAgIE5VTEwKKwkJICAgICAgICk7 CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKwlpZiAoc2VuZG1vZGUgPT0gU01f UFNFTkQpCS8qIFBTRU5EaW5nPyAqLworCSAgaWYgKHNlbmRzdGFydCA+IChDS19PRkZfVCkwKQkv KiBTdGFydGluZyBwb3NpdGlvbiAqLworCSAgICBpZiAoemZzZWVrKHNlbmRzdGFydCkgPCAwKQkv KiBzZWVrIHRvIGl0Li4uICovCisJICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENLX1JFU0VO RCAqLworICAgIAlzID0gcGt0bmFtOwkJCS8qIE5hbWUgZm9yIHBhY2tldCBkYXRhIGZpZWxkICov CisjaWZkZWYgT1MyCisJLyogTmV2ZXIgc2VuZCBhIGRpc2sgbGV0dGVyLiAqLworCWlmIChpc2Fs cGhhKCpzKSAmJiAoKihzKzEpID09ICc6JykpCisJICBzICs9IDI7CisjZW5kaWYgLyogT1MyICov CisKKyAgICB9IGVsc2UgewkJCQkvKiBYLXBhY2tldCBzZXR1cCwgbm90IEYtcGFja2V0LiAqLwor CWJpbmFyeSA9IFhZRlRfVDsJCS8qIFRleHQgYWx3YXlzICovCisgICAgCWRlYnVnKEYxMTAsInNm aWxlIFggcGFja2V0IixjbWRzdHIsMCk7IC8qIExvZyBkZWJ1Z2dpbmcgaW5mbyAqLworICAgIAlz ID0gY21kc3RyOwkJCS8qIE5hbWUgZm9yIGRhdGEgZmllbGQgKi8KKyAgICB9CisKKyAgICAvKiBO b3cgcyBwb2ludHMgdG8gdGhlIHN0cmluZyB0aGF0IGdvZXMgaW4gdGhlIHBhY2tldCBkYXRhIGZp ZWxkLiAqLworCisgICAgZGVidWcoRjEwMSwic2ZpbGUgYmluYXJ5IiwiIixiaW5hcnkpOyAvKiBM b2cgZGVidWdnaW5nIGluZm8gKi8KKyAgICBlbmNzdHIoKENIQVIgKilzKTsJCQkvKiBFbmNvZGUg dGhlIG5hbWUuICovCisJCQkJCS8qIFNlbmQgdGhlIEYgb3IgWCBwYWNrZXQgKi8KKyAgICAvKiBJ ZiB0aGUgZW5jb2RlZCBzdHJpbmcgZGlkIG5vdCBmaXQgaW50byB0aGUgcGFja2V0LCBpdCB3YXMg dHJ1bmNhdGVkLiAqLworCisgICAgaWYgKG54dHBrdCgpIDwgMCkgcmV0dXJuKDApOwkvKiBCdW1w IHBhY2tldCBudW1iZXIsIGdldCBidWZmZXIgKi8KKworICAgIHJjID0gc3BhY2soKGNoYXIpICh4 ID8gJ1gnIDogJ0YnKSwgcGt0bnVtLCBzaXplLCBkYXRhKTsKKyAgICBpZiAocmMgPCAwKQorICAg ICAgcmV0dXJuKHJjKTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgc2V0eGxhdHlwZSh0Y2hhcnNl dCxmY2hhcnNldCk7CS8qIFNldCB1cCBjaGFyc2V0IHRyYW5zbGF0aW9ucyAqLworI2VuZGlmIC8q IE5PQ1NFVFMgKi8KKworICAgIGlmICh4ID09IDApIHsJCQkvKiBEaXNwbGF5IGZvciBGIHBhY2tl dCAqLworICAgIAlpZiAoZGlzcGxhKSB7CQkJLyogU2NyZWVuICovCisJICAgIHh4c2NyZWVuKFND Ul9GTiwnRicsKGxvbmcpcGt0bnVtLGZpbG5hbSk7CisJICAgIHh4c2NyZWVuKFNDUl9BTiwwLDBM LHBrdG5hbSk7CisJICAgIHh4c2NyZWVuKFNDUl9GUywwLGNhbGlicmF0ZSA/IGNhbGlicmF0ZSA6 IGZzaXplLCIiKTsKKyAgICAJfQorI2lmZGVmIHBkcDExCisgICAgCXRsb2coRjExMCwiU2VuZGlu ZyIsZmlsbmFtLDBMKTsgLyogVHJhbnNhY3Rpb24gbG9nIGVudHJ5ICovCisJbWFrZXN0cigmcHNm c3BlYyxmaWxuYW0pOwkvKiBOZXcgZmlsZW5hbWUgKi8KKyNlbHNlCisjaWZuZGVmIFpGTlFGUAor ICAgIAl0bG9nKEYxMTAsIlNlbmRpbmciLGZpbG5hbSwwTCk7CisJbWFrZXN0cigmcHNmc3BlYyxm aWxuYW0pOwkvKiBOZXcgZmlsZW5hbWUgKi8KKyNlbHNlCisJaWYgKG5vdGFmaWxlKSB7CQkJLyog SWYgbm90IGEgZmlsZSBsb2cgc2ltcGxlIG5hbWUgKi8KKwkgICAgdGxvZyhGMTEwLCJTZW5kaW5n IiwgZmlsbmFtLCAwTCk7CisJfSBlbHNlIHsJCQkvKiBMb2cgZnVsbHkgcXVhbGlmaWVkIGZpbGVu YW1lICovCisjaWZkZWYgQ09NTUVOVAorCSAgICAvKiBUaGlzIHNlY3Rpb24gZ2VuZXJhdGVzIGJh ZCBjb2RlIGluIFNDTyAzLjJ2NS4wLjUncyBjYyAqLworCSAgICBjaGFyICpwID0gTlVMTCwgKnEg PSBmaWxuYW07CisJICAgIGRlYnVnKEYxMDEsInNmaWxlIENLTUFYUEFUSCIsIiIsQ0tNQVhQQVRI KTsKKwkgICAgaWYgKChwID0gbWFsbG9jKENLTUFYUEFUSCsxKSkpIHsKKwkJZGVidWcoRjExMSwi c2ZpbGUgY2FsbGluZyB6Zm5xZnAiLGZpbG5hbSxzdHJsZW4oZmlsbmFtKSk7CisJCWlmICh6Zm5x ZnAoZmlsbmFtLCBDS01BWFBBVEgsIHApKSB7CisJCSAgICBkZWJ1ZyhGMTExLCJzZmlsZSB6Zm5x ZnAgb2siLHAsc3RybGVuKHApKTsKKwkJICAgIHEgPSBwOworCQl9CisJICAgIH0KKyNlbHNlCisJ ICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKwkgICAgY2hhciAqcCA9IHRtcGJ1ZiwgKnEg PSBmaWxuYW07CisJICAgIGlmICh6Zm5xZnAoZmlsbmFtLCBDS01BWFBBVEgsIHApKQorCSAgICAg IHEgPSBwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgZGVidWcoRjExMSwic2ZpbGUgcSIs cSxzdHJsZW4ocSkpOworCSAgICB0bG9nKEYxMTAsIlNlbmRpbmciLHEsMEwpOworCSAgICBtYWtl c3RyKCZwc2ZzcGVjLHEpOwkvKiBOZXcgcHJlbGltaW5hcnkgZmlsZW5hbWUgKi8KKyNpZmRlZiBD T01NRU5UCisJICAgIGlmIChwKSBmcmVlKHApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwl9Cisj ZW5kaWYgLyogWkZOUUZQICovCisjZW5kaWYgLyogcGRwMTEgKi8KKyAgICAJdGxvZyhGMTEwLCIg YXMiLHBrdG5hbSwwTCk7CisJaWYgKGJpbmFyeSkgewkJCS8qIExvZyBmaWxlIG1vZGUgaW4gdHJh bnNhY3Rpb24gbG9nICovCisJICAgIHRsb2coRjEwMSwiIG1vZGU6IGJpbmFyeSIsIiIsKGxvbmcp IGJpbmFyeSk7CisJfSBlbHNlIHsJCQkvKiBJZiB0ZXh0IG1vZGUsIGNoZWNrIGNoYXJhY3RlciBz ZXQgKi8KKwkgICAgdGxvZyhGMTAwLCIgbW9kZTogdGV4dCIsIiIsMEwpOworI2lmbmRlZiBOT0NT RVRTCisJICAgIGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1AgfHwgeGZyeGxhID09IDApIHsKKwkJ dGxvZyhGMTEwLCIgY2hhcmFjdGVyIHNldCIsInRyYW5zcGFyZW50IiwwTCk7CisJICAgIH0gZWxz ZSB7CisJCXRsb2coRjExMCwiIHhmZXIgY2hhcmFjdGVyIHNldCIsdGNzaW5mb1t0Y2hhcnNldF0u bmFtZSwwTCk7CisJCXRsb2coRjExMCwiIGZpbGUgY2hhcmFjdGVyIHNldCIsZmNzaW5mb1tmY2hh cnNldF0ubmFtZSwwTCk7CisJICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisJfQorICAgIH0g ZWxzZSB7CQkJCS8qIERpc3BsYXkgZm9yIFgtcGFja2V0ICovCisKKyAgICAJeHhzY3JlZW4oU0NS X1hELCdYJywobG9uZylwa3RudW0sY21kc3RyKTsgLyogU2NyZWVuICovCisgICAgCXRsb2coRjEx MCwiU2VuZGluZyBmcm9tOiIsY21kc3RyLDBMKTsJLyogVHJhbnNhY3Rpb24gbG9nICovCisgICAg fQorICAgIGludG1zZygrK2ZpbGNudCk7CQkJLyogQ291bnQgZmlsZSwgZ2l2ZSBpbnRlcnJ1cHQg bXNnICovCisgICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0IGZpbGUgY2hhcmFjdGVyIGxvb2thaGVh ZC4gKi8KKyAgICBmZmMgPSAoQ0tfT0ZGX1QpMDsJCQkvKiBJbml0IGZpbGUgY2hhcmFjdGVyIGNv dW50ZXIuICovCisgICAgY3BzID0gb2xkY3BzID0gMEw7CQkJLyogSW5pdCBjcHMgc3RhdGlzdGlj cyAqLworICAgIHJlamVjdGlvbiA9IC0xOworICAgIGZzZWNzID0gZ3RpbWVyKCk7CQkJLyogVGlt ZSB0aGlzIGZpbGUgc3RhcnRlZCAqLworI2lmZGVmIEdGVElNRVIKKyAgICBmcGZzZWNzID0gZ2Z0 aW1lcigpOworICAgIGRlYnVnKEYxMDEsIlNGSUxFIGZwZnNlY3MiLCIiLGZwZnNlY3MpOworI2Vu ZGlmIC8qIEdGVElNRVIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJTRklMRSBmc2VjcyIsIiIsZnNlY3Mp OworICAgIHJldHVybigxKTsKK30KKworLyogIFMgRCBBIFQgQSAtLSBTZW5kIGEgZGF0YSBwYWNr ZXQgKi8KKworLyoKKyAgUmV0dXJucyAtMSBpZiBubyBkYXRhIHRvIHNlbmQgKGVuZCBvZiBmaWxl KSwgLTIgaWYgY29ubmVjdGlvbiBpcyBicm9rZW4uCisgIElmIHRoZXJlIGlzIGRhdGEsIGEgZGF0 YSBwYWNrZXQgaXMgc2VudCwgYW5kIHNkYXRhKCkgcmV0dXJucyAxLgorCisgIEluIHRoZSBzdHJl YW1pbmcgY2FzZSwgdGhlIHdpbmRvdyBpcyByZWdhcmRlZCBhcyBpbmZpbml0ZSBhbmQgd2Uga2Vl cAorICBzZW5kaW5nIGRhdGEgcGFja2V0cyB1bnRpbCBFT0Ygb3IgdGhlcmUgYXBwZWFycyB0byBi ZSBhIEtlcm1pdCBwYWNrZXQgb24gdGhlCisgIHJldmVyc2UgY2hhbm5lbC4gIFdoZW4gbm90IHN0 cmVhbWluZyBhbmQgdGhlIHdpbmRvdyBzaXplIGlzIGdyZWF0ZXIgdGhhbiAxLAorICB3ZSBrZWVw IHNlbmRpbmcgZGF0YSBwYWNrZXRzIHVudGlsIHdpbmRvdyBpcyBmdWxsIG9yIGNoYXJhY3RlcnMg c3RhcnQgdG8KKyAgYXBwZWFyIGZyb20gdGhlIG90aGVyIEtlcm1pdC4KKworICBJbiB0aGUgd2lu ZG93aW5nIG9yIHN0cmVhbWluZyBjYXNlLCB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSBsZWZ0 IHRvIHNlbmQKKyAgKG9yIHdoZW4gc2VuZGluZyBoYXMgYmVlbiBpbnRlcnJ1cHRlZCksIHNkYXRh KCkgZG9lcyBub3RoaW5nIGFuZCByZXR1cm5zIDAKKyAgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZCB1 bnRpbCB0aGUgYWNrbm93bGVkZ2VtZW50IHNlcXVlbmNlIG51bWJlciBjYXRjaGVzIHVwCisgIHRv IHRoZSBsYXN0IGRhdGEgcGFja2V0IHRoYXQgd2FzIHNlbnQuCisqLworaW50CitzZGF0YSgpIHsK KyAgICBpbnQgaSwgeCwgbGVuOworICAgIGNoYXIgKiBzOworCisgICAgZGVidWcoRjEwMSwic2Rh dGEgZW50cnksIGZpcnN0IiwiIixmaXJzdCk7CisgICAgZGVidWcoRjEwMSwic2RhdGEgZHJhaW4i LCIiLGRyYWluKTsKKy8qCisgIFRoZSAiZHJhaW4iIGZsYWcgaXMgdXNlZCB3aXRoIHdpbmRvdyBz aXplID4gMS4gIEl0IG1lYW5zIHdlIGhhdmUgc2VudAorICBvdXIgbGFzdCBkYXRhIHBhY2tldC4g IElmIGNhbGxlZCBhbmQgZHJhaW4gaXMgbm90IHplcm8sIHRoZW4gd2UgcmV0dXJuCisgIDAgYXMg aWYgd2UgaGFkIHNlbnQgYW4gZW1wdHkgZGF0YSBwYWNrZXQsIHVudGlsIGFsbCBkYXRhIHBhY2tl dHMgaGF2ZQorICBiZWVuIEFDSydkLCB0aGVuIHRoZW4gd2UgY2FuIGZpbmFsbHkgcmV0dXJuIC0x IGluZGljYXRpbmcgRU9GLCBzbyB0aGF0CisgIHRoZSBwcm90b2NvbCBjYW4gc3dpdGNoIHRvIHNl b2Ygc3RhdGUuICBUaGlzIGlzIGEga2x1ZGdlLCBidXQgYXQgbGVhc3QKKyAgaXQncyBsb2NhbGl6 ZWQuLi4KKyovCisgICAgaWYgKGZpcnN0ID09IDEpIGRyYWluID0gMDsJCS8qIFN0YXJ0IG9mIGZp bGUsIGluaXQgZHJhaW4gZmxhZy4gKi8KKworICAgIGlmIChkcmFpbikgewkJCS8qIElmIGRyYWlu aW5nLi4uICovCisJZGVidWcoRjEwMSwic2RhdGEgZHJhaW5pbmcsIHdpbmxvIiwiIix3aW5sbyk7 CisJaWYgKHdpbmxvID09IHBrdG51bSkJCS8qIElmIGFsbCBkYXRhIHBhY2tldHMgYXJlIEFDSydk ICovCisJICByZXR1cm4oLTEpOwkJCS8qIHJldHVybiBFT0YgaW5kaWNhdGlvbiAqLworCWVsc2UJ CQkJLyogb3RoZXJ3aXNlICovCisJICByZXR1cm4oMCk7CQkJLyogcHJldGVuZCB3ZSBzZW50IGEg ZGF0YSBwYWNrZXQuICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsInNkYXRhIHNidWZudW0iLCIi LHNidWZudW0pOworICAgIGZvciAoaSA9IHNidWZudW07CisJIGkgPiAwCisjaWZkZWYgU1RSRUFN SU5HCisJIHx8IHN0cmVhbWluZworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSA7CisJIGktLSkg eworCWlmIChpIDwgMCkKKwkgIGJyZWFrOworICAgICAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBjb3Vu dGRvd24iLCIiLGkpOworI2lmZGVmIFNUUkVBTUlORworCWlmIChzdHJlYW1pbmcpIHsKKwkgICAg cGt0bnVtID0gKHBrdG51bSArIDEpICUgNjQ7CisJICAgIHdpbmxvID0gcGt0bnVtOworCSAgICBk ZWJ1ZyhGMTAxLCJzZGF0YSBzdHJlYW1pbmcgcGt0bnVtIiwiIixwa3RudW0pOworCX0gZWxzZSB7 CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJICAgIHggPSBueHRwa3QoKTsJCS8qIEdldCBuZXh0 IHBrdCBudW1iZXIgYW5kIGJ1ZmZlciAqLworCSAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBueHRwa3Qg cGt0bnVtIiwiIixwa3RudW0pOworCSAgICBpZiAoeCA8IDApIHJldHVybigwKTsKKyNpZmRlZiBT VFJFQU1JTkcKKwl9CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJZGVidWcoRjEwMSwic2RhdGEg cGFja2V0IiwiIixwa3RudW0pOworCWlmIChjaGtpbnQoKSA8IDApCQkvKiBFc3BlY2lhbGx5IGlt cG9ydGFudCBpZiBzdHJlYW1pbmcgKi8KKwkgIHJldHVybigtOSk7CisJaWYgKGN4c2VlbiB8fCBj enNlZW4pIHsJCS8qIElmIGludGVycnVwdGVkLCBkb25lLiAqLworCSAgICBpZiAod3Nsb3RzID4g MSkgeworCQlkcmFpbiA9IDE7CisJCWRlYnVnKEYxMDAsInNkYXRhIGN4L3pzZWVuIHdpbmRvd2lu ZyIsIiIsMCk7CisJCXJldHVybigwKTsKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjEwMCwic2Rh dGEgY3gvenNlZW4gbm9ud2luZG93aW5nIiwiIiwwKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfQor CX0KKyNpZmRlZiBERUJVRworCWlmIChkZWJsb2cpIHsKKwkgICAgZGVidWcoRjEwMSwic2RhdGEg c3BzaXoiLCIiLHNwc2l6KTsKKwkgICAgZGVidWcoRjEwMSwic2RhdGEgYmluYXJ5IiwiIixiaW5h cnkpOworCSAgICBkZWJ1ZyhGMTAxLCJzZGF0YSBwYXJpdHkiLCIiLHBhcml0eSk7CisJfQorI2Vu ZGlmIC8qIERFQlVHICovCisjaWZkZWYgQ0tUVU5JTkcKKwlpZiAoYmluYXJ5ICYmICFwYXJpdHkg JiYgIW1lbXN0ciAmJiAhZnVuY3N0cikKKwkgIGxlbiA9IGJnZXRwa3Qoc3BzaXopOworCWVsc2UK KwkgIGxlbiA9IGdldHBrdChzcHNpeiwxKTsKKyNlbHNlCisJbGVuID0gZ2V0cGt0KHNwc2l6LDEp OworI2VuZGlmIC8qIENLVFVOSU5HICovCisJcyA9IChjaGFyICopZGF0YTsKKwlpZiAobGVuID09 IC0zKSB7CQkvKiBUaW1lZCBvdXQgKGUuZy5yZWFkaW5nIGZyb20gcGlwZSkgKi8KKwkgICAgcyA9 ICIiOwkJCS8qIFNlbmQgYW4gZW1wdHkgZGF0YSBwYWNrZXQuICovCisJICAgIGxlbiA9IDA7CisJ fSBlbHNlIGlmIChsZW4gPT0gMCkgewkJLyogRG9uZSBpZiBubyBkYXRhLiAqLworCSAgICBpZiAo cGt0bnVtID09IHdpbmxvKQorCSAgICAgIHJldHVybigtMSk7CisJICAgIGRyYWluID0gMTsJCQkv KiBCdXQgY2FuJ3QgcmV0dXJuIC0xIHVudGlsIGFsbCAqLworCSAgICBkZWJ1ZyhGMTAxLCJzZGF0 YSBlb2YsIGRyYWluIiwiIixkcmFpbik7CisJICAgIHJldHVybigwKTsJCQkvKiBBQ0tzIGFyZSBk cmFpbmVkLiAqLworCX0KKwlkZWJ1ZyhGMTAxLCJzZGF0YSBwa3RudW0iLCIiLHBrdG51bSk7CisJ ZGVidWcoRjEwMSwic2RhdGEgbGVuIiwiIixsZW4pOworCWRlYnVnKEYwMTEsInNkYXRhIGRhdGEi LGRhdGEsNTIpOworCisJeCA9IHNwYWNrKCdEJyxwa3RudW0sbGVuLChDSEFSICopcyk7IC8qIFNl bmQgdGhlIGRhdGEgcGFja2V0LiAqLworCWRlYnVnKEYxMDEsInNkYXRhIHNwYWNrIiwiIix4KTsK KwlpZiAoeCA8IDApIHsJCQkvKiBFcnJvciAqLworCSAgICB0dGNoaygpOwkJCS8qIFNlZSBpZiBj b25uZWN0aW9uIGlzIHN0aWxsIHRoZXJlICovCisJICAgIHJldHVybigtMik7CisJfQorI2lmZGVm IFNUUkVBTUlORworCWlmIChzdHJlYW1pbmcpCQkJLyogV2hhdCBhbiBBQ0sgd291bGQgZG8uICov CisJICB3aW5sbyA9IHBrdG51bTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwl4ID0gdHRjaGso KTsJCQkvKiBQZWVrIGF0IGlucHV0IGJ1ZmZlci4gKi8KKwlkZWJ1ZyhGMTAxLCJzZGF0YSB0dGNo ayIsIiIseCk7CS8qIEFDS3Mgd2FpdGluZywgbWF5YmU/ICAqLworCWlmICh4IDwgMCkJCQkvKiBP ciBjb25uZWN0aW9uIGJyb2tlbj8gKi8KKwkgIHJldHVybigtMik7CisvKgorICBIZXJlIHdlIGNo ZWNrIHRvIHNlZSBpZiBhbnkgQUNLcyBvciBOQUtzIGhhdmUgYXJyaXZlZCwgaW4gd2hpY2ggY2Fz ZSB3ZQorICBicmVhayBvdXQgb2YgdGhlIEQtcGFja2V0LXNlbmRpbmcgbG9vcCBhbmQgcmV0dXJu IHRvIHRoZSBzdGF0ZSBzd2l0Y2hlcgorICB0byBwcm9jZXNzIHRoZW0uICBUaGlzIGlzIHdoYXQg bWFrZXMgb3VyIHdpbmRvd3Mgc2xpZGUgaW5zdGVhZCBvZiBsdXJjaC4KKyovCisJaWYgKAorI2lm ZGVmIEdFTURPUworLyoKKyAgSW4gdGhlIEF0YXJpIFNUIHZlcnNpb24sIHR0Y2hrKCkgY2FuIG9u bHkgcmV0dXJuIDAgb3IgMS4gIEJ1dCBub3RlOiB4IHdpbGwKKyAgcHJvYmFibHkgYWx3YXlzIGJl ID4gMCwgc2luY2UgdGhlIGFzLXlldC11bnJlYWQgcGFja2V0IHRlcm1pbmF0b3IgZnJvbSB0aGUK KyAgbGFzdCBwYWNrZXQgaXMgcHJvYmFibHkgc3RpbGwgaW4gdGhlIGJ1ZmZlciwgc28gc2xpZGlu ZyB3aW5kb3dzIHdpbGwKKyAgcHJvYmFibHkgbmV2ZXIgaGFwcGVuIHdoZW4gdGhlIEF0YXJpIFNU IGlzIHRoZSBmaWxlIHNlbmRlci4gIFRoZSBhbHRlcm5hdGl2ZQorICBpcyB0byBzYXkgImlmICgw KSIsIGluIHdoaWNoIGNhc2UgdGhlIFNUIHdpbGwgYWx3YXlzIHNlbmQgYSB3aW5kb3cgZnVsbCBv ZgorICBwYWNrZXRzIGJlZm9yZSByZWFkaW5nIGFueSBBQ0tzIG9yIE5BS3MuCisqLworCSAgICB4 ID4gMAorCisjZWxzZSAvKiAhR0VNRE9TICovCisvKgorICBJbiBtb3N0IG90aGVyIHZlcnNpb25z LCB0dGNoaygpIHJldHVybnMgdGhlIGFjdHVhbCBjb3VudC4KKyAgSXQgY2FuJ3QgYmUgYSBLZXJt aXQgcGFja2V0IGlmIGl0J3MgbGVzcyB0aGFuIGZpdmUgYnl0ZXMgbG9uZy4KKyovCisJICAgIHgg PiA0ICsgYmN0dQorCisjZW5kaWYgLyogR0VNRE9TICovCisJICAgICkKKwkgIHJldHVybigxKTsJ CQkvKiBZZXMsIHN0b3Agc2VuZGluZyBkYXRhIHBhY2tldHMgKi8KKyAgICB9CQkJCQkvKiBhbmQg Z28gdHJ5IHRvIHJlYWQgdGhlIEFDS3MuICovCisgICAgcmV0dXJuKDEpOworfQorCisKKy8qICBT IEUgTyBGIC0tIFNlbmQgYW4gRW5kLU9mLUZpbGUgcGFja2V0ICovCisKKy8qICBDYWxsIHdpdGgg YSBzdHJpbmcgcG9pbnRlciB0byBjaGFyYWN0ZXIgdG8gcHV0IGluIHRoZSBkYXRhIGZpZWxkLCAq LworLyogIG9yIGVsc2UgYSBudWxsIHBvaW50ZXIgb3IgIiIgZm9yIG5vIGRhdGEuICAqLworCisv KgorICBUaGVyZSBhcmUgdHdvICJzZW5kLWVvZiIgZnVuY3Rpb25zLiAgc2VvZigpIGlzIHVzZWQg dG8gc2VuZCB0aGUgbm9ybWFsIGVvZgorICBwYWNrZXQgYXQgdGhlIGVuZCBvZiBhIGZpbGUncyBk YXRhIChldmVuIGlmIHRoZSBmaWxlIGhhcyBubyBkYXRhKSwgb3Igd2hlbgorICBhIGZpbGUgdHJh bnNmZXIgaXMgaW50ZXJydXB0ZWQuICBzeGVvZigpIGlzIHVzZWQgdG8gc2VuZCBhbiBFT0YgcGFj a2V0IHRoYXQKKyAgb2NjdXJzIGJlY2F1c2Ugb2YgYXR0cmlidXRlIHJlZnVzYWwgb3IgaW50ZXJy dXB0aW9uIHByaW9yIHRvIGVudGVyaW5nIGRhdGEKKyAgc3RhdGUuICBUaGUgZGlmZmVyZW5jZSBp cyBwdXJlbHkgYSBtYXR0ZXIgb2YgYnVmZmVyIGFsbG9jYXRpb24gYW5kIHBhY2tldAorICBzZXF1 ZW5jZSBudW1iZXIgbWFuYWdlbWVudC4gIEJvdGggZnVuY3Rpb25zIGFjdCBhcyAiZnJvbnQgZW5k cyIgdG8gdGhlCisgIGNvbW1vbiBzZW5kLWVvZiBmdW5jdGlvbiwgc3plb2YoKS4KKyovCisKKy8q IENvZGUgY29tbW9uIHRvIGJvdGggc2VvZigpIGFuZCBzeGVvZigpICovCisKK2ludAorc3plb2Yo cykgQ0hBUiAqczsgeworICAgIGludCB4OworICAgIGxzc3RhdGUgPSAwOwkJCS8qIENhbmNlbCBs b2NraW5nLXNoaWZ0IHN0YXRlICovCisgICAgaWYgKCFzKSBzID0gKENIQVIgKikiIjsKKyAgICBk ZWJ1ZyhGMTExLCJzemVvZiIscyxwa3RudW0pOworICAgIGlmICgqcykgeworCXggPSBzcGFjaygn WicscGt0bnVtLDEscyk7CisJeGl0c3RhIHw9IFdfU0VORDsKKyNpZmRlZiBDT01NRU5UCisJdGxv ZyhGMTAwLCIgKioqIGludGVycnVwdGVkLCBzZW5kaW5nIGRpc2NhcmQgcmVxdWVzdCIsIiIsMEwp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlmaWxyZWorKzsKKyAgICB9IGVsc2UgeworCXggPSBz cGFjaygnWicscGt0bnVtLDAsKENIQVIgKikiIik7CisgICAgfQorICAgIGlmICh4IDwgMCkKKyAg ICAgIHJldHVybih4KTsKKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBObywgdG9vIHNvb24gKi8K KyAgICBkaXNjYXJkID0gMDsJCQkvKiBUdXJuIG9mZiBwZXItZmlsZSBkaXNjYXJkIGZsYWcgKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisKKy8qIElmIHdlIHdlcmUgc2VuZGluZyBmcm9tIGEgcGlw ZSwgd2UncmUgbm90IGFueSBtb3JlLi4uICovCisgICAgcGlwZXNlbmQgPSAwOworICAgIHJldHVy bigwKTsKK30KKworaW50CitzZW9mKHgpIGludCB4OyB7CisgICAgY2hhciAqIHM7CisvKgorICBj a2Nwcm8udywgYmVmb3JlIGNhbGxpbmcgc2VvZigpLCBzZXRzIHdpbmRvdyBzaXplIGJhY2sgdG8g MSBhbmQgdGhlbiBjYWxscworICB3aW5kb3coKSwgd2hpY2ggY2xlYXJzIG91dCB0aGUgb2xkIGJ1 ZmZlcnMuICBUaGlzIGlzIE9LIGJlY2F1c2UgdGhlIGZpbmFsCisgIGRhdGEgcGFja2V0IGZvciB0 aGUgZmlsZSBoYXMgYmVlbiBBQ0snZC4gIEhvd2V2ZXIsIHNkYXRhKCkgaGFzIGFscmVhZHkKKyAg Y2FsbGVkIG54dHBrdCgpLCB3aGljaCBzZXQgdGhlIG5ldyB2YWx1ZSBvZiBwa3RudW0gd2hpY2gg c2VvZigpIHdpbGwgdXNlLgorICBTbyBhbGwgd2UgbmVlZCB0byBkbyBoZXJlIGlzIGlzIGFsbG9j YXRlIGEgbmV3IHNlbmQtYnVmZmVyLgorKi8KKyAgICBzID0geCA/ICJEIiA6ICIiOworICAgIGRl YnVnKEYxMTEsInNlb2YiLHMscGt0bnVtKTsKKyAgICBpZiAoZ2V0c2J1Zihwa3RudW0pIDwgMCkg ewkvKiBHZXQgYSBidWZmZXIgZm9yIHBhY2tldCBuICovCisJZGVidWcoRjEwMSwic2VvZiBjYW4n dCBnZXQgcy1idWZmZXIiLCIiLHBrdG51bSk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcmV0 dXJuKHN6ZW9mKChDSEFSICopcykpOworfQorCisvKgorICBWZXJzaW9uIG9mIHNlb2YoKSB0byBi ZSBjYWxsZWQgd2hlbiBzZGF0YSgpIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLiAgVGhlCisg IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGlzIHZlcnNpb24gY2FsbHMgbnh0cGt0KCkgdG8gYWxsb2Nh dGUgYSBzZW5kLWJ1ZmZlciBhbmQKKyAgZ2V0IHRoZSBuZXh0IHBhY2tldCBudW1iZXIuCisqLwor aW50CitzeGVvZih4KSBpbnQgeDsgeworICAgIGNoYXIgKiBzOworICAgIHMgPSB4ID8gIkQiIDog IiI7CisgICAgaWYgKG54dHBrdCgpIDwgMCkJCQkvKiBHZXQgbmV4dCBwa3QgbnVtYmVyIGFuZCBi dWZmZXIgKi8KKyAgICAgIGRlYnVnKEYxMDEsInN4ZW9mIG54dHBrdCBmYWlscyIsIiIscGt0bnVt KTsKKyAgICBlbHNlCisgICAgICBkZWJ1ZyhGMTAxLCJzeGVvZiBwYWNrZXQiLCIiLHBrdG51bSk7 CisgICAgcmV0dXJuKHN6ZW9mKChDSEFSICopcykpOworfQorCisvKiAgUyBFIE8gVCAtLSBTZW5k IGFuIEVuZC1PZi1UcmFuc2FjdGlvbiBwYWNrZXQgKi8KKworaW50CitzZW90KCkgeworICAgIGlu dCB4OworICAgIHggPSBueHRwa3QoKTsKKyAgICBkZWJ1ZyhGMTAxLCJzZW90IG54dHBrdCIsIiIs eCk7CisgICAgaWYgKHggPCAwKSByZXR1cm4oLTEpOwkJLyogQnVtcCBwYWNrZXQgbnVtYmVyLCBn ZXQgYnVmZmVyICovCisgICAgeCA9IHNwYWNrKCdCJyxwa3RudW0sMCwoQ0hBUiAqKSIiKTsJLyog U2VuZCB0aGUgRU9UIHBhY2tldCAqLworICAgIGlmICh4IDwgMCkKKyAgICAgIHJldHVybih4KTsK KyAgICBjeHNlZW4gPSBjenNlZW4gPSBkaXNjYXJkID0gMDsJLyogUmVzZXQgaW50ZXJydXB0aW9u IGZsYWdzICovCisgICAgdHN0YXRzKCk7CQkJCS8qIExvZyB0aW1pbmcgaW5mbyAqLworICAgIHJl dHVybigwKTsKK30KKworCisvKiAgIFIgUCBBIFIgLS0gRmlsbCB0aGUgZGF0YSBhcnJheSB3aXRo IG15IHNlbmQtaW5pdCBwYXJhbWV0ZXJzICAqLworCitpbnQgcThmbGFnID0gMDsKKworQ0hBUiBk YWRhWzMyXTsJCQkJLyogVXNlIHRoaXMgaW5zdGVhZCBvZiBkYXRhW10uICovCisJCQkJCS8qIFRv IGF2b2lkIHNvbWUga2luZCBvZiB3aWVyZCAqLworCQkJCQkvKiBhZGRyZXNzaW5nIGZvdWx1cCBp biBzcGFjaygpLi4uICovCisJCQkJCS8qICh3aGljaCBtaWdodCBiZSBmaXhlZCBub3cuLi4pICov CisKK0NIQVIgKgorcnBhcigpIHsKKyAgICBjaGFyICpwOworICAgIGludCBpLCB4LCBtYXg7Cisg ICAgZXh0ZXJuIGludCBzcHJtbGVuOworCisgICAgbWF4ID0gbWF4ZGF0YSgpOwkJCS8qIEJpZ2dl c3QgZGF0YSBmaWVsZCBJIGNhbiBzZW5kICovCisgICAgZGVidWcoRjEwMSwgInJwYXIgbWF4IDEi LCIiLG1heCk7CisgICAgZGVidWcoRjEwMSwgInJwYXIgc3BybWxlbiIsIiIsc3BybWxlbik7Cisg ICAgaWYgKHNwcm1sZW4gPiAxICYmIHNwcm1sZW4gPCBtYXgpCS8qIFVzZXIgb3ZlcnJpZGUgKi8K KyAgICAgIG1heCA9IHNwcm1sZW47CisgICAgZGVidWcoRjEwMSwgInJwYXIgbWF4IDIiLCIiLG1h eCk7CisKKyAgICBpZiAocnBzaXogPiBNQVhQQUNLKQkJLyogQmlnZ2VzdCBub3JtYWwgcGFja2V0 IEkgd2FudC4gKi8KKyAgICAgIGRhZGFbMF0gPSAoY2hhcikgdG9jaGFyKE1BWFBBQ0spOwkvKiBJ ZiA+IDk0LCB1c2UgOTQsIGJ1dCBzcGVjaWZ5ICovCisgICAgZWxzZQkJCQkvKiBleHRlbmRlZCBw YWNrZXQgbGVuZ3RoIGJlbG93Li4uICovCisgICAgICBkYWRhWzBdID0gKGNoYXIpIHRvY2hhcihy cHNpeik7CS8qIGVsc2UgdXNlIHdoYXQgdGhlIHVzZXIgc2FpZC4gKi8KKyAgICBkYWRhWzFdID0g KGNoYXIpIHRvY2hhcihjaGt0aW1vKHBrdHRpbSwwKSk7IC8qIFdoZW4gdG8gdGltZSBtZSBvdXQg Ki8KKyAgICBkYWRhWzJdID0gKGNoYXIpIHRvY2hhcihteXBhZG4pOwkvKiBIb3cgbXVjaCBwYWRk aW5nIEkgbmVlZCAobm9uZSkgKi8KKyAgICBkYWRhWzNdID0gKGNoYXIpIGN0bChteXBhZGMpOwkv KiBQYWRkaW5nIGNoYXJhY3RlciBJIHdhbnQgKi8KKyAgICBkYWRhWzRdID0gKGNoYXIpIHRvY2hh cihlb2wpOwkvKiBFbmQtT2YtTGluZSBjaGFyYWN0ZXIgSSB3YW50ICovCisgICAgZGFkYVs1XSA9 IG15Y3RscTsJCQkvKiBDb250cm9sLVF1b3RlIGNoYXJhY3RlciBJIHNlbmQgKi8KKworICAgIGlm IChtYXggPCA2KSB7IGRhZGFbNl0gPSBOVUw7IHJxZiA9IDA7IGVicSA9IHNxID0gTlVMOyByZXR1 cm4oZGFkYSk7IH0KKworICAgIHN3aXRjaCAocnFmKSB7CQkJLyogOHRoLWJpdCBwcmVmaXggKHNp bmdsZS1zaGlmdCkgKi8KKyAgICAgIGNhc2UgLTE6CQkJCS8qIEknbSBvcGVuaW5nIHRoZSBiaWRz ICovCisgICAgICBjYXNlICAxOgkJCQkvKiBPdGhlciBLZXJtaXQgYWxyZWFkeSBiaWQgJ1knICov CisJaWYgKHBhcml0eSkgZWJxID0gc3EgPSBNWUVCUTsJLyogU28gSSByZXBseSB3aXRoICcmJyBp ZiBwYXJpdHkgKi8KKwlicmVhazsJCQkJLyogIG90aGVyd2lzZSB3aXRoICdZJy4gKi8KKyAgICAg IGNhc2UgIDI6CQkJCS8qIE90aGVyIEtlcm1pdCBzZW50IGEgdmFsaWQgcHJlZml4ICovCisJaWYg KHE4ZmxhZykKKwkgIHNxID0gZWJxOwkJCS8qIEZhbGwgdGhyb3VnaCBvbiBwdXJwb3NlICovCisg ICAgICBjYXNlICAwOgkJCQkvKiBPdGhlciBLZXJtaXQgYmlkIG5vdGhpbmcgKi8KKwlicmVhazsJ CQkJLyogU28gSSByZXBseSB3aXRoICdZJy4gKi8KKyAgICB9CisgICAgZGVidWcoRjAwMCwicnBh ciA4YnEgc3EiLCIiLHNxKTsKKyAgICBkZWJ1ZyhGMDAwLCJycGFyIDhicSBlYnEiLCIiLGVicSk7 CisgICAgaWYgKGxzY2FwdSA9PSAyKQkJCS8qIExPQ0tJTkctU0hJRlQgRk9SQ0VEICovCisgICAg ICBkYWRhWzZdID0gJ04nOwkJCS8qIHJlcXVpcmVzIG5vIHNpbmdsZS1zaGlmdCAqLworICAgIGVs c2UJCQkJLyogb3RoZXJ3aXNlIHNlbmQgcHJlZml4IG9yICdZJyAqLworICAgICAgZGFkYVs2XSA9 IChjaGFyKSBzcTsKKyAgICBlYnFzZW50ID0gZGFkYVs2XTsJCQkvKiBBbmQgcmVtZW1iZXIgd2hh dCBJIHJlYWxseSBzZW50ICovCisKKyAgICBpZiAobWF4IDwgNykgeyBkYWRhWzddID0gTlVMOyBi Y3RyID0gMTsgcmV0dXJuKGRhZGEpOyB9CisKKyAgICBkYWRhWzddID0gKGNoYXIpIChiY3RyID09 IDQpID8gJ0InIDogYmN0ciArICcwJzsgLyogQmxvY2sgY2hlY2sgdHlwZSAqLworCisgICAgaWYg KG1heCA8IDgpIHsgZGFkYVs4XSA9IE5VTDsgcnB0ZmxnID0gMDsgcmV0dXJuKGRhZGEpOyB9CisK KyAgICBpZiAocnB0ZW5hKSB7CisJaWYgKHJwdGZsZykJCQkvKiBSdW4gbGVuZ3RoIGVuY29kaW5n ICovCisJICBkYWRhWzhdID0gKGNoYXIpIHJwdHE7CS8qIElmIHJlY2VpdmluZywgYWdyZWUgKi8K KwllbHNlCQkJCS8qIGJ5IHJlcGx5aW5nIHdpdGggc2FtZSBjaGFyYWN0ZXIuICovCisJICBkYWRh WzhdID0gKGNoYXIpIChycHRxID0gbXlycHRxKTsgLyogV2hlbiBzZW5kaW5nIHVzZSB0aGlzLiAq LworICAgIH0gZWxzZSBkYWRhWzhdID0gU1A7CQkvKiBOb3QgZW5hYmxlZCwgcHV0IGEgc3BhY2Ug aGVyZS4gKi8KKworICAgIC8qIENBUEFTIG1hc2sgKi8KKworICAgIGlmIChtYXggPCA5KSB7CisJ ZGFkYVs5XSA9IE5VTDsKKwlhdGNhcHIgPSAwOworCWxwY2FwciA9IDA7CisJc3djYXByID0gMDsK Kwlyc2NhcHIgPSAwOworCXJldHVybihkYWRhKTsKKyAgICB9CisgICAgZGFkYVs5XSA9IChjaGFy KSB0b2NoYXIoKGxzY2FwciA/IGxzY2FwYiA6IDApIHwgLyogTG9ja2luZyBzaGlmdHMgKi8KKwkJ ICAgICAoYXRjYXByID8gYXRjYXBiIDogMCkgfCAvKiBBdHRyaWJ1dGUgcGFja2V0cyAqLworCQkg ICAgIChscGNhcHIgPyBscGNhcGIgOiAwKSB8IC8qIExvbmcgcGFja2V0cyAqLworCQkgICAgIChz d2NhcHIgPyBzd2NhcGIgOiAwKSB8IC8qIFNsaWRpbmcgd2luZG93cyAqLworCQkgICAgIChyc2Nh cHIgPyByc2NhcGIgOiAwKSk7IC8qIFJFU0VORCAqLworICAgIGlmIChtYXggPCAxMCkgeyB3c2xv dHIgPSAxOyByZXR1cm4oZGFkYSk7IH0KKyAgICBkYWRhWzEwXSA9IChjaGFyKSB0b2NoYXIoc3dj YXByID8gd3Nsb3RyIDogMSk7IC8qIENBUEFTKzEgPSBXaW5kb3cgc2l6ZSAqLworCisgICAgaWYg KG1heCA8IDEyKSB7IHJwc2l6ID0gODA7IHJldHVybihkYWRhKTsgfQorICAgIGlmICh1cnBzaXog PiA5NCkKKyAgICAgIHJwc2l6ID0gdXJwc2l6IC0gMTsJCS8qIExvbmcgcGFja2V0cyAuLi4gKi8K KyAgICBkYWRhWzExXSA9IChjaGFyKSB0b2NoYXIocnBzaXogLyA5NSk7IC8qIExvbmcgcGFja2V0 IHNpemUsIGJpZyBwYXJ0ICovCisgICAgZGFkYVsxMl0gPSAoY2hhcikgdG9jaGFyKHJwc2l6ICUg OTUpOyAvKiBMb25nIHBhY2tldCBzaXplLCBsaXR0bGUgcGFydCAqLworCisgICAgaWYgKG1heCA8 IDE2KSByZXR1cm4oZGFkYSk7CisgICAgZGFkYVsxM10gPSAnMCc7CQkJLyogQ0FQQVMrNCA9IFdP TlQgQ0hLUE5UICovCisgICAgZGFkYVsxNF0gPSAnXyc7CQkJLyogQ0FQQVMrNSA9IENIS0lOVCAo cmVzZXJ2ZWQpICovCisgICAgZGFkYVsxNV0gPSAnXyc7CQkJLyogQ0FQQVMrNiA9IENIS0lOVCAo cmVzZXJ2ZWQpICovCisgICAgZGFkYVsxNl0gPSAnXyc7CQkJLyogQ0FQQVMrNyA9IENIS0lOVCAo cmVzZXJ2ZWQpICovCisgICAgaWYgKG1heCA8IDE3KSByZXR1cm4oZGFkYSk7CisjaWZuZGVmIFdI QVRBTUkKKyAgICBkYWRhWzE3XSA9ICcgJzsKKyNlbHNlCisgICAgeCA9IDA7CisgICAgaWYgKHNl cnZlcikgeCB8PSBXTUlfU0VSVkU7CQkvKiBXaGV0aGVyIEkgYW0gYSBzZXJ2ZXIgKi8KKyAgICBp ZiAoYmluYXJ5KSB4IHw9IFdNSV9GTU9ERTsJCS8qIE15IGZpbGUgdHJhbnNmZXIgbW9kZSBpcyAu Li4gKi8KKyAgICBpZiAoZm5jbnYpICB4IHw9IFdNSV9GTkFNRTsJCS8qIE15IGZpbGVuYW1lIGNv bnZlcnNpb24gaXMgLi4uICovCisjaWZkZWYgU1RSRUFNSU5HCisgICAgaWYgKHN0cmVhbXJxID09 IFNFVF9PTikKKyAgICAgIHggfD0gV01JX1NUUkVBTTsKKyAgICBlbHNlIGlmIChzdHJlYW1ycSA9 PSBTRVRfQVVUTyAmJiByZWxpYWJsZSA9PSBTRVRfT04pCisgICAgICB4IHw9IFdNSV9TVFJFQU07 CisgICAgLyoKKyAgICAgIEFsd2F5cyBvZmZlciB0byBzdHJlYW0gd2hlbiBpbiByZW1vdGUgbW9k ZSBhbmQgU1RSRUFNSU5HIGlzIEFVVE8KKyAgICAgIGFuZCBSRUxJQUJMRSBpcyBub3QgT0ZGIChp LmUuIGlzIE9OIG9yIEFVVE8pLgorICAgICovCisgICAgZWxzZSBpZiAoIWxvY2FsICYmIHN0cmVh bXJxID09IFNFVF9BVVRPICYmIHJlbGlhYmxlICE9IFNFVF9PRkYpCisgICAgICB4IHw9IFdNSV9T VFJFQU07CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisjaWZkZWYgVENQU09DS0VUCisgICAgaWYg KGNsZWFycnEgPT0gU0VUX09OKQorICAgICAgeCB8PSBXTUlfQ0xFQVI7CisgICAgZWxzZSBpZiAo Y2xlYXJycSA9PSBTRVRfQVVUTyAmJgkvKiBTRVQgQ0xFQVItQ0hBTk5FTCBBVVRPICovCisJICAg ICAoKG5ldHdvcmsgJiYgbmV0dHlwZSA9PSBORVRfVENQQiAvKiBUQ1AvSVAgKi8KKyNpZmRlZiBS TE9HQ09ERQorICAgICAgICAgICAgICAgICYmIHR0bnByb3RvICE9IE5QX1JMT0dJTi8qIFJsb2dp biBpcyBub3QgY2xlYXIgKi8KKyAgICAgICAgICAgICAgICAmJiAhKHR0bnByb3RvID49IE5QX0s0 TE9HSU4gJiYgdHRucHJvdG8gPD0gTlBfRUs1TE9HSU4pCisjZW5kaWYgLyogUkxPR0NPREUgKi8K KwkgICAgICAgKQorI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAgICAgfHwgKG5ldHdvcmsg JiYgbmV0dHlwZSA9PSBORVRfU1NIKQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBJ S1NECisJICAgICAgfHwgaW5zZXJ2ZXIJCS8qIFdlIGFyZSBJS1NEICovCisjZW5kaWYgLyogSUtT RCAqLworCSAgICAgICkpCisgICAgICB4IHw9IFdNSV9DTEVBUjsKKyNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KKyAgICB4IHw9IFdNSV9GTEFHOworICAgIGRhZGFbMTddID0gKGNoYXIpIHRvY2hhcih4 KTsKKyNlbmRpZiAvKiBXSEFUQU1JICovCisgICAgaSA9IDE4OwkJCQkvKiBQb3NpdGlvbiBvZiBu ZXh0IGZpZWxkICovCisgICAgcCA9IGNrc3lzaWQ7CQkJLyogV0hPQU1JIChteSBzeXN0ZW0gSUQp ICovCisgICAgeCA9IHN0cmxlbihwKTsKKyAgICBpZiAobWF4IC0gaSA8IHggKyAxKSByZXR1cm4o ZGFkYSk7CisgICAgaWYgKHggPiAwKSB7CisJZGFkYVtpKytdID0gKGNoYXIpIHRvY2hhcih4KTsK Kwl3aGlsZSAoKnApCisJICBkYWRhW2krK10gPSAqcCsrOworICAgIH0KKworICAgIGlmIChtYXgg PCBpKzEpIHJldHVybihkYWRhKTsKKyNpZm5kZWYgV0hBVEFNSQkJCQkvKiBXSEFUQU1JMiAqLwor ICAgIGRhZGFbaSsrXSA9ICcgJzsKKyNlbHNlCisgICAgZGVidWcoRjEwMSwicnBhciB4ZmVybW9k ZSIsIiIseGZlcm1vZGUpOworICAgIHggPSBXTUkyX0ZMQUc7CQkJLyogSXMtVmFsaWQgZmxhZyAq LworICAgIGlmICh4ZmVybW9kZSAhPSBYTU9ERV9BKQkJLyogSWYgVFJBTlNGRVIgTU9ERSBpcyBN QU5VQUwgKi8KKyAgICAgIHggfD0gV01JMl9YTU9ERTsJCQkvKiBzZXQgdGhlIFhGRVJNT0RFIGJp dCAqLworICAgIGlmIChyZWN1cnNpdmUgPiAwKQkJCS8qIElmIHRoaXMgaXMgYSByZWN1cnNpdmUg dHJhbnNmZXIgKi8KKyAgICAgIHggfD0gV01JMl9SRUNVOwkJCS8qIHNldCB0aGUgUkVDVVJTSVZF IGJpdCAqLworICAgIGRhZGFbaSsrXSA9IHRvY2hhcih4KTsKKyAgICBkZWJ1ZyhGMTAxLCJycGFy IHdoYXRhbWkyIiwiIix4KTsKKyNlbmRpZiAvKiBXSEFUQU1JICovCisKKyAgICBkYWRhW2ldID0g J1wwJzsJCQkvKiBUZXJtaW5hdGUgdGhlIGluaXQgc3RyaW5nICovCisKKyNpZmRlZiBERUJVRwor ICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTEwLCJycGFyIixkYWRhLDApOworCXJkZWJ1KGRh ZGEsKGludClzdHJsZW4oKGNoYXIgKilkYWRhKSk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICov CisgICAgY2tzdHJuY3B5KChjaGFyICopbXlpbml0LChjaGFyICopZGFkYSxNWUlOSVRMRU4pOwor ICAgIHJldHVybihkYWRhKTsJCQkvKiBSZXR1cm4gcG9pbnRlciB0byBzdHJpbmcuICovCit9CisK K2ludAorc3BhcihzKSBDSEFSICpzOyB7CQkJLyogU2V0IHBhcmFtZXRlcnMgKi8KKyAgICBpbnQg eCwgeSwgbHBzaXosIGJpZ2dlc3Q7CisgICAgZXh0ZXJuIGludCBycHJtbGVuLCBsYXN0c3BtYXg7 CisgICAgZXh0ZXJuIHN0cnVjdCBzeXNkYXRhIHN5c2lkbGlzdFtdOworCisgICAgd2hhdHJ1ID0g MDsKKyAgICB3aG9hcmV1WzBdID0gTlVMOworI2lmZGVmIFNUUkVBTUlORworICAgIHN0cmVhbW9r ID0gMDsKKyAgICBzdHJlYW1pbmcgPSAwOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgIGJp Z2dlc3QgPSBybG47CisKKyAgICBkZWJ1ZyhGMTAxLCAic3BhciBiaWdnZXN0IDEiLCIiLGJpZ2dl c3QpOworICAgIGRlYnVnKEYxMDEsICJzcGFyIHJwcm1sZW4iLCIiLHJwcm1sZW4pOworICAgIGlm IChycHJtbGVuID4gMSAmJiBycHJtbGVuIDwgYmlnZ2VzdCkKKyAgICAgIGJpZ2dlc3QgPSBycHJt bGVuOworICAgIGRlYnVnKEYxMDEsICJycGFyIGJpZ2dlc3QgMiIsIiIsYmlnZ2VzdCk7CisgICAg ZGVidWcoRjExMCwic3BhciBwYWNrZXQiLHMsMCk7CisKKyAgICBzLS07CQkJCS8qIExpbmUgdXAg d2l0aCBmaWVsZCBudW1iZXJzLiAqLworCisvKiBMaW1pdCBvbiBzaXplIG9mIG91dGJvdW5kIHBh Y2tldHMgKi8KKyAgICB4ID0gKGJpZ2dlc3QgPj0gMSkgPyB4dW5jaGFyKHNbMV0pIDogODA7Cisg ICAgbHBzaXogPSBzcHNpenI7CQkJLyogUmVtZW1iZXIgd2hhdCB0aGV5IFNFVC4gKi8KKyAgICBp ZiAoc3BzaXpmKSB7CQkJLyogU0VULWNvbW1hbmQgb3ZlcnJpZGU/ICovCisJaWYgKHggPCBzcHNp enIpIHNwc2l6ID0geDsJLyogSWdub3JlIExFTiB1bmxlc3Mgc21hbGxlciAqLworICAgIH0gZWxz ZSB7CQkJCS8qIG90aGVyd2lzZSAqLworCXNwc2l6ID0gKHggPCAxMCkgPyA4MCA6IHg7CS8qIGJl bGlldmUgdGhlbSBpZiByZWFzb25hYmxlICovCisgICAgfQorICAgIHNwbWF4ID0gc3BzaXo7CQkJ LyogUmVtZW1iZXIgbWF4aW11bSBzaXplICovCisKKy8qIFRpbWVvdXQgb24gaW5ib3VuZCBwYWNr ZXRzICovCisgICAgaWYgKHRpbWVmKSB7CisJdGltaW50ID0gcnRpbW87CQkJLyogU0VUIFNFTkQg VElNRU9VVCB2YWx1ZSBvdmVycmlkZXMgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2Ug dXNlIHJlcXVlc3RlZCB2YWx1ZSwgKi8KKwl4ID0gKGJpZ2dlc3QgPj0gMikgPyB4dW5jaGFyKHNb Ml0pIDogcnRpbW87IC8qIGlmIGl0IGlzIGxlZ2FsLiAqLworCXRpbWludCA9ICh4IDwgMCkgPyBy dGltbyA6IHg7CisgICAgfQorICAgIHRpbWludCA9IGNoa3RpbW8odGltaW50LHRpbWVmKTsJLyog QWRqdXN0IGlmIG5lY2Vzc2FyeSAqLworCisvKiBPdXRib3VuZCBQYWRkaW5nICovCisgICAgbnBh ZCA9IDA7IHBhZGNoID0gJ1wwJzsKKyAgICBpZiAoYmlnZ2VzdCA+PSAzKSB7CisJbnBhZCA9IHh1 bmNoYXIoc1szXSk7CisJaWYgKGJpZ2dlc3QgPj0gNCkgcGFkY2ggPSAoQ0hBUikgY3RsKHNbNF0p OyBlbHNlIHBhZGNoID0gMDsKKyAgICB9CisgICAgaWYgKG5wYWQpIHsKKwlpbnQgaTsKKwlmb3Ig KGkgPSAwOyBpIDwgbnBhZDsgaSsrKSBwYWRidWZbaV0gPSBkb3BhcihwYWRjaCk7CisgICAgfQor CisvKiBPdXRib3VuZCBQYWNrZXQgVGVybWluYXRvciAqLworICAgIHNlb2wgPSAoQ0hBUikgKGJp Z2dlc3QgPj0gNSkgPyB4dW5jaGFyKHNbNV0pIDogQ1I7CisgICAgaWYgKChzZW9sIDwgMSkgfHwg KHNlb2wgPiAzMSkpIHNlb2wgPSBDUjsKKworLyogQ29udHJvbCBwcmVmaXggdGhhdCB0aGUgb3Ro ZXIgS2VybWl0IGlzIHNlbmRpbmcgKi8KKyAgICB4ID0gKGJpZ2dlc3QgPj0gNikgPyBzWzZdIDog JyMnOworICAgIGN0bHEgPSAoQ0hBUikgKCgoeCA+IDMyICYmIHggPCA2MykgfHwgKHggPiA5NSAm JiB4IDwgMTI3KSkgPyB4IDogJyMnKTsKKworLyogOHRoLWJpdCBwcmVmaXggKi8KKy8qCisgIE5P VEU6IE1heWJlIHRoaXMgY291bGQgYmUgc2ltcGxpZmllZCB1c2luZyByY3Z0eXAuCisgIElmIHJj dnR5cCA9PSAnWScgdGhlbiB3ZSdyZSByZWFkaW5nIHRoZSBBQ0ssCisgIG90aGVyd2lzZSB3ZSdy ZSByZWFkaW5nIHRoZSBvdGhlciBLZXJtaXQncyBpbml0aWFsIGJpZC4KKyAgQnV0IGhpcyBob3Jy ZW5kb3VzIGNvZGUgaGFzIGJlZW4gd29ya2luZyBPSyBmb3IgeWVhcnMsIHNvLi4uCisqLworICAg IHJxID0gKGJpZ2dlc3QgPj0gNykgPyBzWzddIDogMDsKKyAgICBpZiAocnEgPT0gJ1knKSBycWYg PSAxOworICAgICAgZWxzZSBpZiAoKHJxID4gMzIgJiYgcnEgPCA2MykgfHwgKHJxID4gOTUgJiYg cnEgPCAxMjcpKSBycWYgPSAyOworICAgICAgICBlbHNlIHJxZiA9IDA7CisgICAgZGVidWcoRjAw MCwic3BhciA4YnEgcnEiLCIiLHJxKTsKKyAgICBkZWJ1ZyhGMDAwLCJzcGFyIDhicSBzcSIsIiIs c3EpOworICAgIGRlYnVnKEYwMDAsInNwYXIgOGJxIGVicSIsIiIsZWJxKTsKKyAgICBkZWJ1ZyhG MTAxLCJzcGFyIDhicSBycWYiLCIiLHJxZik7CisgICAgc3dpdGNoIChycWYpIHsKKyAgICAgIGNh c2UgMDoJCQkJLyogRmllbGQgaXMgbWlzc2luZyBmcm9tIHBhY2tldC4gKi8KKwllYnFmbGcgPSAw OwkJCS8qIFNvIG5vIDh0aC1iaXQgcHJlZml4aW5nLiAqLworCWJyZWFrOworICAgICAgY2FzZSAx OgkJCQkvKiBPdGhlciBLZXJtaXQgc2VudCAnWScgPSBXaWxsIERvLiAqLworCS8qCisgICAgICAg ICAgV2hlbiBJIGFtIHRoZSBmaWxlIHJlY2VpdmVyLCBlYnFzZW50IGlzIDAgYmVjYXVzZSBJIGRp ZG4ndCBzZW5kIGEKKyAgICAgICAgICBuZWdvdGlhdGlvbiB5ZXQuICBJZiBteSBwYXJpdHkgaXMg c2V0IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gTk9ORSwKKyAgICAgICAgICBlaXRoZXIgYmVjYXVz ZSBteSB1c2VyIFNFVCBQQVJJVFkgb3IgYmVjYXVzZSBJIGRldGVjdGVkIHBhcml0eSBiaXRzCisg ICAgICAgICAgb24gdGhpcyBwYWNrZXQsIEkgcmVwbHkgd2l0aCAnJicsIG90aGVyd2lzZSAnWScu CisKKwkgIFdoZW4gSSBhbSB0aGUgZmlsZSBzZW5kZXIsIGVicXNlbnQgaXMgd2hhdCBJIGp1c3Qg c2VudCBpbiBycGFyKCksCisgICAgICAgICAgd2hpY2ggY2FuIGJlICdZJywgJ04nLCBvciAnJicu ICBJZiBJIHNlbnQgJyYnLCB0aGVuIHRoaXMgJ1knIG1lYW5zCisgICAgICAgICAgdGhlIG90aGVy IEtlcm1pdCBhZ3JlZXMgdG8gZG8gOHRoLWJpdCBwcmVmaXhpbmcuCisKKyAgICAgICAgICBJZiBJ IHNlbnQgJ1knIG9yICdOJywgYnV0IHRoZW4gZGV0ZWN0ZWQgcGFyaXR5IG9uIHRoZSBBQ0sgcGFj a2V0CisgICAgICAgICAgdGhhdCBjYW1lIGJhY2ssIHRoZW4gaXQncyB0b28gbGF0ZTogdGhlcmUg aXMgbm8gbG9uZ2VyIGFueSB3YXkgZm9yCisgICAgICAgICAgbWUgdG8gdGVsbCB0aGUgb3RoZXIg S2VybWl0IHRoYXQgSSB3YW50IHRvIGRvIDh0aC1iaXQgcHJlZml4aW5nLCBzbworICAgICAgICAg IEkgbXVzdCBub3QgZG8gaXQsIGFuZCBpbiB0aGF0IGNhc2UsIGlmIHRoZXJlIGlzIGFueSA4LWJp dCBkYXRhIGluCisgICAgICAgICAgdGhlIGZpbGUgdG8gYmUgdHJhbnNmZXJyZWQsIHRoZSB0cmFu c2ZlciB3aWxsIGZhaWwgYmVjYXVzZSBvZiBibG9jaworICAgICAgICAgIGNoZWNrIGVycm9ycy4K KworICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY2xhdXNlIGNvdmVycyBhbGwgb2YgdGhlc2Ugc2l0 dWF0aW9uczoKKwkqLworCWlmIChwYXJpdHkgJiYgKGVicXNlbnQgPT0gMCB8fCBlYnFzZW50ID09 ICcmJykpIHsKKwkgICAgZWJxZmxnID0gMTsKKwkgICAgZWJxID0gTVlFQlE7CisJfQorCWJyZWFr OworICAgICAgY2FzZSAyOgkJCQkvKiBPdGhlciBLZXJtaXQgc2VudCBhIHZhbGlkIHByZWZpeCAq LworCWVicWZsZyA9IChlYnEgPT0gc3EgfHwgc3EgPT0gJ1knKTsKKwlpZiAoZWJxZmxnKSB7CisJ ICAgIGVicSA9IHJxOworCSAgICBkZWJ1ZyhGMTAxLCJzcGFyIHNldHRpbmcgcGFyaXR5IHRvIHNw YWNlIiwiIixlYnEpOworCSAgICBpZiAoIXBhcml0eSkgcGFyaXR5ID0gdHRwcnR5ID0gJ3MnOwor CX0KKyAgICB9CisgICAgaWYgKGxzY2FwdSA9PSAyKSB7ICAgICAvKiBCdXQgbm8gc2luZ2xlLXNo aWZ0cyBpZiBMT0NLSU5HLVNISUZUIEZPUkNFRCAqLworCWVicWZsZyA9IDA7CisJZWJxID0gJ04n OworICAgIH0KKworLyogQmxvY2sgY2hlY2sgKi8KKyAgICB4ID0gMTsKKyAgICBpZiAoYmlnZ2Vz dCA+PSA4KSB7CisJaWYgKHNbOF0gPT0gJ0InKSB4ID0gNDsKKwllbHNlIHggPSBzWzhdIC0gJzAn OworCWlmICgoeCA8IDEpIHx8ICh4ID4gNSkpIHggPSAxOwkvKiAiNSIgMjAxMTA2MDUgKi8KKyAg ICB9CisgICAgYmN0ciA9IHg7CisKKy8qIFJlcGVhdCBwcmVmaXggKi8KKworICAgIHJwdGZsZyA9 IDA7CQkJCS8qIEFzc3VtZSBubyByZXBlYXQtY291bnRzICovCisgICAgaWYgKGJpZ2dlc3QgPj0g OSkgewkJCS8qIElzIHRoZXJlIGEgcmVwZWF0LWNvdW50IGZpZWxkPyAqLworCWNoYXIgdDsJCQkJ LyogWWVzLiAqLworCXQgPSBzWzldOwkJCS8qIEdldCBpdHMgY29udGVudHMuICovCisvKgorICBJ ZiBJJ20gc2VuZGluZyBmaWxlcywgdGhlbiBJJ20gcmVhZGluZyB0aGVzZSBwYXJhbWV0ZXJzIGZy b20gYW4gQUNLLCBhbmQgc28KKyAgdGhpcyBjaGFyYWN0ZXIgbXVzdCBhZ3JlZSB3aXRoIHdoYXQg SSBzZW50LgorKi8KKwlpZiAocnB0ZW5hKSB7CQkJLyogSWYgZW5hYmxlZCAuLi4gKi8KKwkgICAg aWYgKChjaGFyKSByY3Z0eXAgPT0gJ1knKSB7CS8qIFNlbmRpbmcgZmlsZXMsIHJlYWRpbmcgQUNL LiAqLworCQlpZiAodCA9PSBteXJwdHEpIHJwdGZsZyA9IDE7CisJICAgIH0gZWxzZSB7CQkJLyog SSdtIHJlY2VpdmluZyBmaWxlcyAqLworCQlpZiAoKHQgPiAzMiAmJiB0IDwgNjMpIHx8ICh0ID4g OTUgJiYgdCA8IDEyNykpIHsKKwkJICAgIHJwdGZsZyA9IDE7CisJCSAgICBycHRxID0gdDsKKwkJ fQorCSAgICB9CisJfSBlbHNlIHJwdGZsZyA9IDA7CisgICAgfQorCisvKiBDYXBhYmlsaXRpZXMg Ki8KKworICAgIGF0Y2FwdSA9IGxwY2FwdSA9IHN3Y2FwdSA9IHJzY2FwdSA9IDA7IC8qIEFzc3Vt ZSBub25lIG9mIHRoZXNlLiAqLworICAgIGlmIChsc2NhcHUgIT0gMikgbHNjYXB1ID0gMDsJLyog QXNzdW1lIG5vIExTIHVubGVzcyBmb3JjZWQuICovCisgICAgeSA9IDExOwkJCQkvKiBQb3NpdGlv biBvZiBuZXh0IGZpZWxkLCBpZiBhbnkgKi8KKyAgICBpZiAoYmlnZ2VzdCA+PSAxMCkgeworICAg ICAgICB4ID0geHVuY2hhcihzWzEwXSk7CisJZGVidWcoRjEwMSwic3BhciBjYXBhcyIsIiIseCk7 CisgICAgICAgIGF0Y2FwdSA9ICh4ICYgYXRjYXBiKSAmJiBhdGNhcHI7IC8qIEF0dHJpYnV0ZXMg Ki8KKwlscGNhcHUgPSAoeCAmIGxwY2FwYikgJiYgbHBjYXByOyAvKiBMb25nIHBhY2tldHMgKi8K Kwlzd2NhcHUgPSAoeCAmIHN3Y2FwYikgJiYgc3djYXByOyAvKiBTbGlkaW5nIHdpbmRvd3MgKi8K Kwlyc2NhcHUgPSAoeCAmIHJzY2FwYikgJiYgcnNjYXByOyAvKiBSRVNFTkQgKi8KKwlkZWJ1ZyhG MTAxLCJzcGFyIGxzY2FwdSIsIiIsbHNjYXB1KTsKKwlkZWJ1ZyhGMTAxLCJzcGFyIGxzY2FwciIs IiIsbHNjYXByKTsKKwlkZWJ1ZyhGMTAxLCJzcGFyIGVicWZsZyIsIiIsZWJxZmxnKTsKKwlpZiAo bHNjYXB1ICE9IDIpIGxzY2FwdSA9ICgoeCAmIGxzY2FwYikgJiYgbHNjYXByICYmIGVicWZsZykg PyAxIDogMDsKKwlkZWJ1ZyhGMTAxLCJzcGFyIHN3Y2FwciIsIiIsc3djYXByKTsKKwlkZWJ1ZyhG MTAxLCJzcGFyIHN3Y2FwdSIsIiIsc3djYXB1KTsKKwlkZWJ1ZyhGMTAxLCJzcGFyIGxzY2FwdSIs IiIsbHNjYXB1KTsKKwlmb3IgKHkgPSAxMDsgKHh1bmNoYXIoc1t5XSkgJiAxKSAmJiAoYmlnZ2Vz dCA+PSB5KTsgeSsrKTsKKwlkZWJ1ZyhGMTAxLCJzcGFyIHkiLCIiLHkpOworICAgIH0KKworLyog TG9uZyBQYWNrZXRzICovCisgICAgZGVidWcoRjEwMSwic3BhciBscGNhcHUiLCIiLGxwY2FwdSk7 CisgICAgaWYgKGxwY2FwdSkgeworICAgICAgICBpZiAoYmlnZ2VzdCA+IHkrMSkgeworCSAgICB4 ID0geHVuY2hhcihzW3krMl0pICogOTUgKyB4dW5jaGFyKHNbeSszXSk7CisJICAgIGRlYnVnKEYx MDEsInNwYXIgbHAgbGVuIiwiIix4KTsKKwkgICAgaWYgKHNwc2l6ZikgewkJLyogSWYgb3ZlcnJp ZGluZyBuZWdvdGlhdGlvbnMgKi8KKwkJc3BzaXogPSAoeCA8IGxwc2l6KSA/IHggOiBscHNpejsg LyogZG8gdGhpcywgKi8KKwkgICAgfSBlbHNlIHsJCQkgICAgICAgICAvKiBvdGhlcndpc2UgKi8K KwkJc3BzaXogPSAoeCA+IE1BWFNQKSA/IE1BWFNQIDogeDsgLyogZG8gdGhpcy4gKi8KKwkgICAg fQorCSAgICBpZiAoc3BzaXogPCAxMCkgc3BzaXogPSA4MDsJLyogQmUgZGVmZW5zaXZlLi4uICov CisJfQorICAgIH0KKyAgICAvKiAoUFdQKSBzYXZlIGN1cnJlbnQgc2VuZCBwYWNrZXQgc2l6ZSBm b3Igb3B0aW1hbCBwYWNrZXQgc2l6ZSBjYWxjcyAqLworICAgIHNwbWF4ID0gc3BzaXo7CQkJLyog TWF4aW11bSBuZWdvdGlhdGVkIGxlbmd0aCAqLworICAgIGxhc3RzcG1heCA9IHNwc2l6OwkJCS8q IEZvciBzdGF0cyAqLworICAgIGlmIChzbG9zdGFydCAmJiBzcHNpeiA+IDQ5OSkJLyogU2xvdyBz dGFydCBsZW5ndGggKi8KKyAgICAgIHNwc2l6ID0gMjQ0OworICAgIGRlYnVnKEYxMDEsInNwYXIg c2xvdy1zdGFydCBzcHNpeiIsIiIsc3BzaXopOworICAgIGRlYnVnKEYxMDEsInNwYXIgbHAgc3Bt YXgiLCIiLHNwbWF4KTsKKyAgICB0aW1pbnQgPSBjaGt0aW1vKHRpbWludCx0aW1lZik7CS8qIFJl Y2FsY3VsYXRlIHRoZSBwYWNrZXQgdGltZW91dCAqLworCisvKiBTbGlkaW5nIFdpbmRvd3MuLi4g Ki8KKworICAgIGlmIChzd2NhcHIpIHsJCQkvKiBPbmx5IGlmIHJlcXVlc3RlZC4uLiAqLworICAg ICAgICBpZiAoYmlnZ2VzdCA+IHkpIHsJCS8qIFNlZSB3aGF0IG90aGVyIEtlcm1pdCBzYXlzICov CisJICAgIHggPSB4dW5jaGFyKHNbeSsxXSk7CisJICAgIGRlYnVnKEYxMDEsInNwYXIgd2luZG93 IiwiIix4KTsKKwkgICAgd3Nsb3RuID0gKHggPiBNQVhXUykgPyBNQVhXUyA6IHg7CisvKgorICB3 c2xvdG4gPSBuZWdvdGlhdGVkIHNpemUgKGZyb20gb3RoZXIgS2VybWl0J3MgUyBvciBJIHBhY2tl dCkuCisgIHdzbG90ciA9IHJlcXVlc3RlZCB3aW5kb3cgc2l6ZSAoZnJvbSB0aGlzIEtlcm1pdCdz IFNFVCBXSU5ET1cgY29tbWFuZCkuCisqLworCSAgICBpZiAod3Nsb3RuID4gd3Nsb3RyKQkvKiBV c2UgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byAqLworCSAgICAgIHdzbG90biA9IHdzbG90cjsKKwkg ICAgaWYgKHdzbG90biA8IDEpCQkvKiBXYXRjaCBvdXQgZm9yIGJhZCBuZWdvdGlhdGlvbiAqLwor CSAgICAgIHdzbG90biA9IDE7CisJICAgIGlmICh3c2xvdG4gPiAxKSB7CisJCXN3Y2FwdSA9IDE7 CQkvKiBXZSBkbyB3aW5kb3dzLi4uICovCisJCWlmICh3c2xvdG4gPiBtYXh0cnkpCS8qIFJldHJ5 IGxpbWl0IG11c3QgYmUgZ3JlYXRlciAqLworCQkgIG1heHRyeSA9IHdzbG90biArIDE7CS8qIHRo YW4gd2luZG93IHNpemUuICovCisJICAgIH0KKwkgICAgZGVidWcoRjEwMSwic3BhciB3aW5kb3cg YWZ0ZXIgYWRqdXN0bWVudCIsIiIseCk7CisJfSBlbHNlIHsJCQkvKiBObyB3aW5kb3cgc2l6ZSBz cGVjaWZpZWQuICovCisJICAgIHdzbG90biA9IDE7CQkJLyogV2UgZG9uJ3QgZG8gd2luZG93cy4u LiAqLworCSAgICBkZWJ1ZyhGMTAxLCJzcGFyIHdpbmRvdyIsIiIseCk7CisJICAgIHN3Y2FwdSA9 IDA7CisJICAgIGRlYnVnKEYxMDEsInNwYXIgbm8gd2luZG93cyIsIiIsd3Nsb3RuKTsKKwl9Cisg ICAgfQorCisvKiBOb3cgcmVjYWxjdWxhdGUgcGFja2V0IGxlbmd0aCBiYXNlZCBvbiBudW1iZXIg b2Ygd2luZG93cy4gICAqLworLyogVGhlIG5vZ290aWF0ZWQgbnVtYmVyIG9mIHdpbmRvdyBzbG90 cyB3aWxsIGJlIGFsbG9jYXRlZCwgICAgKi8KKy8qIGFuZCB0aGUgbWF4aW11bSBwYWNrZXQgbGVu Z3RoIHdpbGwgYmUgcmVkdWNlZCBpZiBuZWNlc3NhcnksICovCisvKiBzbyB0aGF0IGEgd2luZG93 ZnVsIG9mIHBhY2tldHMgY2FuIGZpdCBpbiB0aGUgYmlnIGJ1ZmZlci4gICAqLworCisgICAgaWYg KHdzbG90biA+IDEpIHsJCQkvKiBTaHJpbmsgdG8gZml0Li4uICovCisJeCA9IGFkanBrbChzcG1h eCx3c2xvdG4sYmlnc2JzaXopOworCWlmICh4IDwgc3BtYXgpIHsKKwkgICAgc3BtYXggPSB4Owor CSAgICBsYXN0c3BtYXggPSBzcHNpejsKKwkgICAgaWYgKHNsb3N0YXJ0ICYmIHNwc2l6ID4gNDk5 KSBzcHNpeiA9IDI0NDsgLyogU2xvdyBzdGFydCBhZ2FpbiAqLworCSAgICBkZWJ1ZyhGMTAxLCJz cGFyIHNlbmRpbmcsIHJlZGVmaW5lIHNwbWF4IiwiIixzcG1heCk7CisJfQorICAgIH0KKyNpZmRl ZiBXSEFUQU1JCisgICAgZGVidWcoRjEwMSwic3BhciBiaWdnZXN0IiwiIixiaWdnZXN0KTsKKyAg ICBpZiAoYmlnZ2VzdCA+IHkrNykgewkJLyogR2V0IFdIQVRBTUkgaW5mbyBpZiBhbnkgKi8KKwl3 aGF0cnUgPSB4dW5jaGFyKHNbeSs4XSk7CisJZGVidWcoRjEwMSwic3BhciB3aGF0cnUiLCIiLHdo YXRydSk7CisgICAgfQorICAgIGlmICh3aGF0cnUgJiBXTUlfRkxBRykgewkJLyogT25seSB2YWxp ZCBpZiB0aGlzIGJpdCBpcyBzZXQgKi8KKyNpZmRlZiBTVFJFQU1JTkcKKwlpZiAod2hhdHJ1ICYg V01JX1NUUkVBTSkgeworCSAgICBpZiAoc3RyZWFtcnEgPT0gU0VUX09OIHx8CisJCShzdHJlYW1y cSA9PSBTRVRfQVVUTyAmJgorCQkgKHJlbGlhYmxlID09IFNFVF9PTiB8fCAocmVsaWFibGUgPT0g U0VUX0FVVE8gJiYgIWxvY2FsKQorI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgICAgICAgICAg ICYmICFpc3RuY29tcG9ydCgpCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworI2lmZGVmIElLU0QK KyAgICAgICAgICAgICAgICAgICB8fCBpbnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAg ICAgICAgICAgICAgICApKSkgeworCQlzdHJlYW1vayA9IDE7CQkvKiBTdHJlYW1pbmcgbmVnb3Rp YXRlZCAqLworCQlzbG9zdGFydCA9IDA7CQkvKiBVbmRvIHNsb3ctc3RhcnQgbWFjaGluYXRpb25z ICovCisJCXNwc2l6ID0gbGFzdHNwbWF4OworCSAgICB9CisJfQorCXN0cmVhbWVkID0gc3RyZWFt b2s7CisJZGVidWcoRjEwMSwic3BhciBzdHJlYW1vayIsIiIsc3RyZWFtb2spOworCWRlYnVnKEYx MDEsInNwYXIgY2xlYXJycSIsIiIsY2xlYXJycSk7CisJaWYgKGNsZWFycnEgPT0gU0VUX09OIHx8 CisgICAgICAgICAgICAgKGNsZWFycnEgPT0gU0VUX0FVVE8gJiYKKyAgICAgICAgICAgICAgICgo bmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9UQ1BCCisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAg ICAgICAgICAmJiB0dG5wcm90byAhPSBOUF9STE9HSU4vKiBSbG9naW4gaXMgbm90IGNsZWFyICov CisgICAgICAgICAgICAgICAgJiYgISh0dG5wcm90byA+PSBOUF9LNExPR0lOICYmIHR0bnByb3Rv IDw9IE5QX0VLNUxPR0lOKQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgVE5fQ09NUE9S VAorICAgICAgICAgICAgICAgICYmICFpc3RuY29tcG9ydCgpCisjZW5kaWYgLyogVE5fQ09NUE9S VCAqLworICAgICAgICAgICAgICAgICAgKQorI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAg ICAgICAgfHwgKG5ldHdvcmsgJiYgbmV0dHlwZSA9PSBORVRfU1NIKQorI2VuZGlmIC8qIFNTSEJV SUxUSU4gKi8KKyNpZmRlZiBJS1NECisgICAgICAgICAgICAgICAgIHx8IGluc2VydmVyCisjZW5k aWYgLyogSUtTRCAqLworICAgICAgICAgICAgICAgICApKSkKKyAgICAgICAgICB1cmNsZWFyID0g KHdoYXRydSAmIFdNSV9DTEVBUik7CisJZGVidWcoRjEwMSwic3BhciB1cmNsZWFyIiwiIix1cmNs ZWFyKTsKKyNpZmRlZiBDS19TUEVFRAorCWlmICh1cmNsZWFyKQorCSAgc2V0cHJlZml4KFBYX05P Tik7CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKwljbGVhcmVkID0gdXJjbGVhcjsKKyNlbmRpZiAv KiBTVFJFQU1JTkcgKi8KKyAgICB9CisjZW5kaWYgLyogV0hBVEFNSSAqLworCisgICAgaWYgKGJp Z2dlc3QgPiB5KzgpIHsJCS8qIEdldCBXSE9BUkVZT1UgaW5mbyBpZiBhbnkgKi8KKwlpbnQgeCwg ejsKKwl4ID0geHVuY2hhcihzW3krOV0pOwkJLyogTGVuZ3RoIG9mIGl0ICovCisJeiA9IHk7CisJ eSArPSAoOSArIHgpOworCWRlYnVnKEYxMDEsInNwYXIgc3lzaW5kZXggeCIsIiIseCk7CisJZGVi dWcoRjEwMSwic3BhciBzeXNpbmRleCB5IiwiIix5KTsKKwlkZWJ1ZyhGMTAxLCJzcGFyIHN5c2lu ZGV4IGJpZ2dlc3QiLCIiLGJpZ2dlc3QpOworCisJaWYgKHggPiAwICYmIHggPCAxNiAmJiBiaWdn ZXN0ID49IHkpIHsKKwkgICAgc3RybmNweSh3aG9hcmV1LChjaGFyICopcyt6KzEwLHgpOyAvKiBP dGhlciBLZXJtaXQncyBzeXN0ZW0gSUQgKi8KKwkgICAgZGVidWcoRjExMSwic3BhciB3aG9hcmV5 b3UiLHdob2FyZXUsd2hvYXJldVswXSk7CisJICAgIGlmICh3aG9hcmV1WzBdKSB7CQkvKiBHb3Qg b25lPyAqLworCQlzeXNpbmRleCA9IGdldHN5c2l4KChjaGFyICopd2hvYXJldSk7CisJCWRlYnVn KEYxMDEsInNwYXIgc3lzaW5kZXgiLHdob2FyZXUsc3lzaW5kZXgpOworCSAgICB9CisJfQorICAg IH0gZWxzZQorICAgICAgZ290byB4c3BhcjsKKworI2lmZGVmIFdIQVRBTUkKKyAgICB5Kys7CQkJ CS8qIEFkdmFuY2UgcG9pbnRlciAqLworICAgIGlmIChiaWdnZXN0ID49IHkpIHsKKwl3aGF0cnUy ID0geHVuY2hhcihzW3ldKTsJLyogTmV4dCBmaWVsZCBpcyBXSEFUQU1JMiAqLworCWRlYnVnKEYx MDEsInNwYXIgd2hhdHJ1MiIsIiIsd2hhdHJ1Mik7CisJaWYgKHdoYXRydTIgJiBXTUkyX0ZMQUcp IHsJLyogVmFsaWQgb25seSBpZiB0aGlzIGJpdCBpcyBzZXQgKi8KKwkgICAgaWYgKHNlcnZlcikg ewkJLyogU2VydmVyIG9iZXlzIGNsaWVudCdzIHhmZXIgbW9kZSAqLworCQl4ZmVybW9kZSA9ICh3 aGF0cnUyICYgV01JMl9YTU9ERSkgPyBYTU9ERV9NIDogWE1PREVfQTsKKwkJZGVidWcoRjEwMSwi c3BhciB3aGF0cnUyIHhmZXJtb2RlIiwiIix4ZmVybW9kZSk7CisJICAgIH0KKwkgICAgaWYgKHdo YXRydTIgJiBXTUkyX1JFQ1UpIHsJLyogUkVDVVJTSVZFIHRyYW5zZmVyICovCisJCWlmIChmbnJw YXRoID09IFBBVEhfQVVUTykgeyAvKiBJZiBSRUMgUEFUSCBBVVRPICovCisJCSAgICBmbnJwYXRo ID0gUEFUSF9SRUw7CS8qIFNldCBpdCB0byBSRUxBVElWRSAqLworCQkgICAgYXV0b3BhdGggPSAx OwkvKiBhbmQgcmVtZW1iZXIgd2UgZGlkIHRoaXMgKi8KKwkJfQorCSAgICB9CisJfQorICAgIH0K KyNlbmRpZiAvKiBXSEFUQU1JICovCisKKyAgeHNwYXI6CisgICAgaWYgKHN5c2luZGV4ID4gLTEp IHsKKwljaGFyICogcDsKKwlwID0gc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZTsKKwl0bG9n KEYxMTAsIlJlbW90ZSBzeXN0ZW0gdHlwZTogIixwLDBMKTsKKwlpZiAoc3lzaW5kZXggPiAwKSB7 CQkvKiBJZiBwYXJ0bmV0J3Mgc3lzdGVtIHR5cGUga25vd24gKi8KKwkgICAgd2hvYXJld2UoKTsJ CQkvKiBzZWUgaWYgd2UgYXJlIGEgbWF0Y2guICovCisjaWZkZWYgQ0tfU1BFRUQKKy8qIE5ldmVy IHVucHJlZml4IFhPTiBhbmQgWE9GRiB3aGVuIHNlbmRpbmcgdG8gVk1TICovCisJICAgIGRlYnVn KEYxMTEsInByb3RvIHdob2FyZXUiLHdob2FyZXUsc3lzaW5kZXgpOworCSAgICBpZiAoIXN0cmNt cCgoY2hhciAqKXdob2FyZXUsIkQ3IikpIHsKKwkJZGVidWcoRjExMSwicHJvdG8gc3BlY2lhbCBW TVMgcHJlZml4aW5nIiwiIiwwKTsKKwkJY3RscFtYT05dID0gY3RscFtYT0ZGXSA9IDE7CisJCWN0 bHBbWE9OKzEyOF0gPSBjdGxwW1hPRkYrMTI4XSA9IDE7CisJCWN0bHBbM10gPSAxOwkJLyogQ3Ry bC1DIG1pZ2h0IGJlIGRhbmdlcm91cyB0b28gKi8KKwkJY3RscFsxNF0gPSBjdGxwWzE1XSA9IDE7 IC8qIEFuZCBTTy9TSSAqLworCQljdGxwWzI0XSA9IGN0bHBbMjVdID0gMTsgLyogQW5kIF5YL15Z ICovCisJCWN0bHBbMTQxXSA9IDE7CQkvKiBBbmQgQ1IrMTI4ICovCisJICAgIH0KKyNlbmRpZiAv KiBDS19TUEVFRCAqLworCX0KKyAgICB9CisKKy8qIFJlY29yZCBwYXJhbWV0ZXJzIGluIGRlYnVn IGxvZyAqLworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgc2RlYnUoYmlnZ2VzdCk7Cisj ZW5kaWYgLyogREVCVUcgKi8KKyAgICBudW1lcnJzID0gMDsJCQkvKiBTdGFydCBjb3VudGluZyBl cnJvcnMgaGVyZS4gKi8KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBHIE4gRiBJIEwgRSAgLS0g IEdldCBuYW1lIG9mIG5leHQgZmlsZSB0byBzZW5kICAqLworLyoKKyAgRXhwZWN0cyBnbG9iYWwg c25kc3JjIHRvIGJlOgorICAgLTk6IGlmIHdlIGFyZSBnZW5lcmF0aW5nIGEgZmlsZSBpbnRlcm5h bGx5IGZvciBjYWxpYnJhdGlvbi4KKyAgIC0xOiBuZXh0IGZpbGVuYW1lIHRvIGJlIG9idGFpbmVk IGJ5IGNhbGxpbmcgem5leHQoKS4KKyAgICAwOiBubyBuZXh0IGZpbGUgbmFtZQorICAgIDE6IChv ciBncmVhdGVyKSBuZXh0IGZpbGVuYW1lIHRvIGJlIG9idGFpbmVkIGZyb20gKipjbWxpc3QsCisg ICAgICAgb3IgaWYgYWRkbGlzdCAhPSAwLCBmcm9tIHRoZSAiZmlsZWhlYWQiIGxpbmtlZCBsaXN0 LAorICAgICAgIG9yIGlmIGZpbGVmaWxlIHBvaW50ZXIgbm90IG51bGwgZnJvbSB0aGF0IGZpbGUg KHdoaWNoIGlzIGFscmVhZHkgb3BlbikuCisgIFJldHVybnM6CisgICAgMSwgd2l0aCBuYW1lIG9m IG5leHQgZmlsZSBpbiBmaWxuYW0uCisgICAgMCwgbm8gbW9yZSBmaWxlcywgd2l0aCBmaWxuYW0g c2V0IHRvIGVtcHR5IHN0cmluZy4KKyAgIC0xLCBmaWxlIG5vdCBmb3VuZAorICAgLTIsIGZpbGUg aXMgbm90IHJlYWRhYmxlIChidXQgdGhlbiB3ZSBqdXN0IHNraXAgdG8gdGhlIG5leHQgb25lIGlm IGFueSkKKyAgIC0zLCByZWFkIGFjY2VzcyBkZW5pZWQKKyAgIC00LCBjYW5jZWxsZWQKKyAgIC01 LCB0b28gbWFueSBmaWxlcyBtYXRjaCB3aWxkY2FyZAorICAgLTYsIG5vIGZpbGVzIHNlbGVjdGVk CisgIE5PVEU6CisgICAgSWYgZ25maWxlKCkgcmV0dXJucyAwLCB0aGVuIHRoZSBnbG9iYWwgdmFy aWFibGUgZ25mZXJyb3Igc2hvdWxkIGJlIGNoZWNrZWQKKyAgICB0byBmaW5kIG91dCB0aGUgbW9z dCByZWNlbnQgZ25maWxlKCkgZXJyb3IsIGFuZCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZQorICAg IHJldHVybiBjb2RlIChmb3IgcmVhc29ucyB0byBoYXJkIHRvIGV4cGxhaW4pLgorKi8KK2ludAor Z25maWxlKCkgeworICAgIGludCBpID0gMCwgeCA9IDA7CisgICAgQ0tfT0ZGX1QgZmlsZXNpemUg PSAwOworICAgIGludCBkb2RpcnN0b28gPSAwOworICAgIGludCByZXRjb2RlID0gMDsKKworICAg IGNoYXIgZnVsbG5hbWVbQ0tNQVhQQVRIKzFdOworCisgICAgZG9kaXJzdG9vID0gKCh3aGF0ICYg KFdfRlRQfFdfU0VORCkpID09IChXX0ZUUHxXX1NFTkQpKSAmJiByZWN1cnNpdmU7CisKKyAgICBk ZWJ1ZyhGMTAxLCJnbmZpbGUgc25kc3JjIiwiIixzbmRzcmMpOworICAgIGRlYnVnKEYxMDEsImdu ZmlsZSBmaWxjbnQiLCIiLGZpbGNudCk7CisgICAgZGVidWcoRjEwMSwiZ25maWxlIHdoYXQiLCIi LHdoYXQpOworICAgIGRlYnVnKEYxMDEsImduZmlsZSByZWN1cnNpdmUiLCIiLHJlY3Vyc2l2ZSk7 CisgICAgZGVidWcoRjEwMSwiZ25maWxlIGRvZGlyc3RvbyIsIiIsZG9kaXJzdG9vKTsKKyAgICBn bmZlcnJvciA9IDA7CisgICAgZnNpemUgPSAoQ0tfT0ZGX1QpLTE7CQkvKiBJbml0aWFsaXplIGZp bGUgc2l6ZSAqLworICAgIGZ1bGxuYW1lWzBdID0gTlVMOworCisjaWZkZWYgVk1TCisgICAgLyog CisgICAgICBJbiBWTVMsIHpvcGVuaSgpIHNldHMgYmluYXJ5IDAvMSBhdXRvbWF0aWNhbGx5IGZy b20gdGhlIGZpbGUKKyAgICAgIGF0dHJpYnV0ZXMuICBEb24ndCB1bmRvIGl0IGhlcmUuCisgICAg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUgVk1TIGJpbmFyeSIsIiIsYmluYXJ5KTsKKyNlbHNl ICAvKiBWTVMgKi8KKyAgICBpZiAoISh3aGF0ICYgV19SRU1PKSAmJiAoeGZlcm1vZGUgPT0gWE1P REVfQSkKKyNpZm5kZWYgTk9NU0VORAorCSYmICFhZGRsaXN0CisjZW5kaWYgLyogTk9NU0VORCAq LworCSkgeworCWV4dGVybiBpbnQgc3RkaW5mOworCWlmICghc3RkaW5mKQkJCS8qIE5vdCBpZiBz ZW5kaW5nIGZyb20gc3RkaW4gKi8KKyNpZmRlZiBXSEFUQU1JCisJICAvKiBXZSBkb24ndCBkbyB0 aGlzIGluIHNlcnZlciBtb2RlIGJlY2F1c2UgaXQgdW5kb2VzIFdIQVRBTUkgKi8KKwkgIGlmICgh c2VydmVyIHx8IChzZXJ2ZXIgJiYgKCh3aGF0cnUgJiBXTUlfRkxBRykgPT0gMCkpKQorI2VuZGlm IC8qIFdIQVRBTUkgKi8KKwkgICAgYmluYXJ5ID0gZ25mX2JpbmFyeTsJLyogUmVzdG9yZSBwcmV2 YWlsaW5nIHRyYW5zZmVyIG1vZGUgKi8KKwlkZWJ1ZyhGMTAxLCJnbmZpbGUgYmluYXJ5ID0gZ25m X2JpbmFyeSIsIiIsZ25mX2JpbmFyeSk7CisgICAgfQorI2VuZGlmCS8qIFZNUyAqLworCisjaWZk ZWYgUElQRVNFTkQKKyAgICBkZWJ1ZyhGMTAxLCJnbmZpbGUgcGlwZXNlbmQiLCIiLHBpcGVzZW5k KTsKKyAgICBpZiAocGlwZXNlbmQpIHsJCQkvKiBGaXJzdCBvbmUgKi8KKwlpZiAoZmlsY250ID09 IDApIHsKKwkgICAgY2tzdHJuY3B5KGZpbG5hbSxjbWFyZyxDS01BWFBBVEgrMSk7CisJICAgIHJl dHVybigxKTsKKwl9IGVsc2UgewkJCS8qIFRoZXJlJ3Mgb25seSBvbmUuLi4gKi8KKwkgICAgKmZp bG5hbSA9IE5VTDsKKwkgICAgcGlwZXNlbmQgPSAwOworCSAgICByZXR1cm4oMCk7CisJfQorICAg IH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZkZWYgQ0FMSUJSQVRFCisgICAgaWYgKHNu ZHNyYyA9PSAtOSkgeworCWRlYnVnKEYxMDAsImduZmlsZSBjYWxpYnJhdGUiLCIiLDApOworCWNr c3RybmNweShmaWxuYW0sIkNBTElCUkFUSU9OIixDS01BWFBBVEgpOworCW5maWxzID0gMDsKKwlj YWxfaiA9IDA7CisJZnNpemUgPSBjYWxpYnJhdGU7CisJc25kc3JjID0gMDsJCQkvKiBGb3IgbmV4 dCB0aW1lICovCisJbmZpbHMgPSAwOworCXJldHVybigxKTsKKyAgICB9CisjZW5kaWYgLyogQ0FM SUJSQVRFICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoc25kYXJyYXkpIHsJCQkvKiBTZW5k aW5nIGZyb20gYW4gYXJyYXkgKi8KKwlleHRlcm4gY2hhciBzbmR4bmFtW107CQkvKiBQc2V1ZG8g ZmlsZW5hbWUgKi8KKwlkZWJ1ZyhGMTAwLCJnbmZpbGUgYXJyYXkiLCIiLDApOworCW5maWxzID0g MDsKKwlmc2l6ZSA9IChDS19PRkZfVCktMTsJCS8qIFNpemUgdW5rbm93biAqLworCXNuZHNyYyA9 IDA7CisJY2tzdHJuY3B5KGZpbG5hbSxzbmR4bmFtLENLTUFYUEFUSCk7CisJcmV0dXJuKDEpOwor ICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgaWYgKHNuZHNyYyA9PSAwKSB7CQkJLyog SXQncyBub3QgcmVhbGx5IGEgZmlsZSAqLworCWlmIChuZmlscyA+IDApIHsJCS8qIEl0J3MgYSBw aXBlLCBvciBzdGRpbiAqLworCSAgICBja3N0cm5jcHkoZmlsbmFtLCpjbWxpc3QsQ0tNQVhQQVRI KzEpOyAvKiBDb3B5IGl0cyAibmFtZSIgKi8KKwkgICAgbmZpbHMgPSAwOwkJCS8qIFRoZXJlIGlz IG5vIG5leHQgZmlsZSAqLworCSAgICByZXR1cm4oMSk7CQkJLyogT0sgdGhpcyB0aW1lICovCisJ fSBlbHNlIHJldHVybigwKTsJCS8qIGJ1dCBub3QgbmV4dCB0aW1lICovCisgICAgfQorCisvKiBJ ZiBmaWxlIGdyb3VwIGludGVycnVwdGlvbiAoQy1aKSBvY2N1cnJlZCwgZmFpbC4gICovCisKKyAg ICBpZiAoY3pzZWVuKSB7CisJdGxvZyhGMTAwLCJUcmFuc2FjdGlvbiBjYW5jZWxsZWQiLCIiLDBM KTsKKyAgICAgICAgZGVidWcoRjEwMCwiZ25maWxlIGN6c2VlbiIsIiIsMCk7CisJcmV0dXJuKC00 KTsKKyAgICB9CisKKy8qIExvb3AgdGhyb3VnaCBmaWxlIGxpc3QgdGlsbCB3ZSBmaW5kIGEgcmVh ZGFibGUsIHNlbmRhYmxlIGZpbGUgKi8KKworICAgIGZpbGVzaXplID0gKENLX09GRl9UKS0xOwkJ LyogTG9vcCBleGl0IChmaWxlIHNpemUpIHZhcmlhYmxlICovCisgICAgd2hpbGUgKGZpbGVzaXpl IDwgMCkgewkJLyogS2VlcCB0cnlpbmcgdGlsbCB3ZSBnZXQgb25lLi4uICovCisJcmV0Y29kZSA9 IDA7CisJaWYgKHNuZHNyYyA+IDApIHsJCS8qIEZpbGUgbGlzdCBpbiBjbWxpc3Qgb3IgZmlsZSAq LworCSAgICBpZiAoZmlsZWZpbGUpIHsJCS8qIFJlYWRpbmcgbGlzdCBmcm9tIGZpbGUuLi4gKi8K KwkJaWYgKHpzaW5sKFpNRklMRSxmaWxuYW0sQ0tNQVhQQVRIKSA8IDApIHsgLyogUmVhZCBhIGxp bmUgKi8KKwkJICAgIHpjbG9zZShaTUZJTEUpOwkgICAgICAgICAgICAgICAgICAvKiBGYWlsZWQg Ki8KKwkJICAgIGRlYnVnKEYxMTAsImduZmlsZSBmaWxlZmlsZSBFT0YiLGZpbGVmaWxlLDApOwor CQkgICAgbWFrZXN0cigmZmlsZWZpbGUsTlVMTCk7CisJCSAgICByZXR1cm4oMCk7CisJCX0KKwkJ ZGVidWcoRjExMCwiZ25maWxlIGZpbGVmaWxlIGZpbG5hbSIsZmlsbmFtLDApOworCSAgICB9CisJ ICAgIGRlYnVnKEYxMDEsImduZmlsZSBuZmlscyIsIiIsbmZpbHMpOworCSAgICBpZiAobmZpbHMt LSA+IDAgfHwgZmlsZWZpbGUpIHsgLyogU3RpbGwgc29tZSBsZWZ0PyAqLworI2lmbmRlZiBOT01T RU5ECisJCWlmIChhZGRsaXN0KSB7CisJCSAgICBpZiAoZmlsZW5leHQgJiYgZmlsZW5leHQtPmZs X25hbWUpIHsKKwkJCWNrc3RybmNweShmaWxuYW0sZmlsZW5leHQtPmZsX25hbWUsQ0tNQVhQQVRI KzEpOworCQkJY21hcmcyID0KKwkJCSAgZmlsZW5leHQtPmZsX2FsaWFzID8KKwkJCSAgICBmaWxl bmV4dC0+ZmxfYWxpYXMgOgorCQkJICAgICAgIiI7CisJCQliaW5hcnkgPSBmaWxlbmV4dC0+Zmxf bW9kZTsKKwkJICAgIH0gZWxzZSB7CisJCQlwcmludGYoIj9JbnRlcm5hbCBlcnJvciBleHBhbmRp bmcgQUREIGxpc3RcbiIpOworCQkJcmV0dXJuKC01KTsKKwkJICAgIH0KKwkJICAgIGZpbGVuZXh0 ID0gZmlsZW5leHQtPmZsX25leHQ7CisJCSAgICBkZWJ1ZyhGMTExLCJnbmZpbGUgYWRkbGlzdCBm aWxuYW0iLGZpbG5hbSxuZmlscyk7CisJCX0gZWxzZSBpZiAoc25kc3JjID4gMCAmJiAhZmlsZWZp bGUpIHsKKyNlbmRpZiAvKiBOT01TRU5EICovCisJCSAgICBja3N0cm5jcHkoZmlsbmFtLCpjbWxp c3QrKyxDS01BWFBBVEgrMSk7CisJCSAgICBkZWJ1ZyhGMTExLCJnbmZpbGUgY21saXN0IGZpbG5h bSIsZmlsbmFtLG5maWxzKTsKKyNpZm5kZWYgTk9NU0VORAorCQl9CisjZW5kaWYgLyogTk9NU0VO RCAqLworCQlpID0gMDsKKyNpZm5kZWYgTk9TRVJWRVIKKwkJZGVidWcoRjEwMSwiZ25maWxlIG5n ZXRwYXRoIiwiIixuZ2V0cGF0aCk7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK25leHRpbnBhdGg6 CisjaWZuZGVmIE5PU0VSVkVSCisJCWZyb21nZXRwYXRoID0gMDsKKwkJaWYgKHNlcnZlciAmJiAh aXNhYnNvbHV0ZShmaWxuYW0pICYmIChuZ2V0cGF0aCA+IGkpKSB7CisJCSAgICBja3N0cm5jcHko ZnVsbG5hbWUsZ2V0cGF0aFtpXSxDS01BWFBBVEgrMSk7CisJCSAgICBja3N0cm5jYXQoZnVsbG5h bWUsZmlsbmFtLENLTUFYUEFUSCk7CisJCSAgICBkZWJ1ZyhGMTExLCJnbmZpbGUgZ2V0cGF0aCIs ZnVsbG5hbWUsaSk7CisJCSAgICBmcm9tZ2V0cGF0aCA9IDE7CisJCSAgICBpKys7CisJCX0gZWxz ZSB7CisJCSAgICBpID0gbmdldHBhdGggKyAxOworI2Vsc2UKKwkJICAgIGkgPSAxOwkJLyogPyAq LworI2VuZGlmIC8qIE5PU0VSVkVSICovCisJCSAgICBja3N0cm5jcHkoZnVsbG5hbWUsZmlsbmFt LENLTUFYUEFUSCsxKTsKKwkJICAgIGRlYnVnKEYxMTAsImduZmlsZSBhYnNvbHV0ZSIsZnVsbG5h bWUsMCk7CisjaWZuZGVmIE5PU0VSVkVSCisJCX0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCQlp ZiAoaXN3aWxkKGZ1bGxuYW1lKQorI2lmZGVmIFJFQ1VSU0lWRQorCQkgICAgfHwgcmVjdXJzaXZl ID4gMCB8fCAhc3RyY21wKGZ1bGxuYW1lLCIuIikKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKwkJ ICAgICkgewkvKiBJdCBsb29rcyB3aWxkLi4uICovCisJCSAgICAvKiBGaXJzdCBjaGVjayBpZiBh IGZpbGUgd2l0aCB0aGlzIG5hbWUgZXhpc3RzICovCisJCSAgICBkZWJ1ZyhGMTEwLCJnbmZpbGUg d2lsZCIsZnVsbG5hbWUsMCk7CisJCSAgICBpZiAoemNoa2koZnVsbG5hbWUpID49IDApIHsKKwkJ CS8qCisJCQkgICBIZXJlIHdlIGhhdmUgYSBmaWxlIHdob3NlIG5hbWUgYWN0dWFsbHkKKwkJCSAg IGNvbnRhaW5zIHdpbGRjYXJkIGNoYXJhY3RlcnMuCisJCQkqLworCQkJZ290byBnb3RuYW07CisJ CSAgICB9CisjaWZkZWYgQ09NTUVOVAorCQkgICAgbnp4b3B0cyA9IFpYX0ZJTE9OTFk7IC8qICh3 YXMgMDogMjUgSnVsIDIwMDEgZmRjKSAqLworI2Vsc2UKKwkJICAgIG56eG9wdHMgPSByZWN1cnNp dmUgPyAwIDogWlhfRklMT05MWTsgLyogMzAgSnVsIDIwMDEgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisJCSAgICBpZiAobm9saW5rcykgbnp4b3B0cyB8PSBaWF9OT0xJTktTOwkvKiAoMjYgSnVs IDIwMDEgZmRjKSAqLworI2lmZGVmIFVOSVhPUk9TSworCQkgICAgaWYgKG1hdGNoZG90KSBuenhv cHRzIHw9IFpYX01BVENIRE9UOworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworCQkgICAgaWYgKHJl Y3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOworCQkgICAgeCA9IG56eHBhbmQoZnVsbG5h bWUsbnp4b3B0cyk7IC8qIEV4cGFuZCB3aWxkY2FyZHMgKi8KKwkJICAgIGRlYnVnKEYxMDEsImdu ZmlsZSBuenhwYW5kIiwiIix4KTsKKwkJICAgIGlmICh4ID09IDEpIHsKKwkJCWludCB4eDsKKwkJ CXh4ID0gem5leHQoZnVsbG5hbWUpOworCQkJZGVidWcoRjExMSwiZ25maWxlIHpuZXh0IEEiLGZ1 bGxuYW1lLHh4KTsKKwkJCWdvdG8gZ290bmFtOworCQkgICAgfQorCQkgICAgaWYgKHggPT0gMCkg ewkvKiBOb25lIG1hdGNoICovCisjaWZuZGVmIE5PU0VSVkVSCisJCQlpZiAoc2VydmVyICYmIG5n ZXRwYXRoID4gaSkKKwkJCSAgZ290byBuZXh0aW5wYXRoOworI2VuZGlmIC8qIE5PU0VSVkVSICov CisJCQlyZXRjb2RlID0gLTE7CisJCQlkZWJ1ZyhGMTAxLCJnbmZpbGUgZ25mZXJyb3IgQSIsIiIs Z25mZXJyb3IpOworCQkJZ25mZXJyb3IgPSAtMTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQkg ICAgaWYgKHggPCAwKSB7CS8qIFRvbyBtYW55IHRvIGV4cGFuZCAqLworCQkJZGVidWcoRjEwMSwi Z25maWxlIGduZmVycm9yIEIiLCIiLGduZmVycm9yKTsKKwkJCWduZmVycm9yID0gLTU7CisJCQly ZXR1cm4oLTUpOworCQkgICAgfQorCQkgICAgc25kc3JjID0gLTE7CS8qIENoYW5nZSBzZW5kLXNv dXJjZSB0byB6bmV4dCgpICovCisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBXZSdyZSBvdXQgb2Yg ZmlsZXMuICovCisJCWRlYnVnKEYxMTEsImduZmlsZSBkb25lIixja2l0b2EoZ25mZXJyb3IpLG5m aWxzKTsKKwkJKmZpbG5hbSA9ICdcMCc7CisJCXJldHVybigwKTsKKwkgICAgfQorCX0KKworLyog T3RoZXJ3aXNlLCBzdGVwIHRvIG5leHQgZWxlbWVudCBvZiBpbnRlcm5hbCB3aWxkY2FyZCBleHBh bnNpb24gbGlzdC4gKi8KKworCWlmIChzbmRzcmMgPT0gLTEpIHsKKwkgICAgaW50IHh4ID0gMDsK KwkgICAgd2hpbGUgKDEpIHsKKwkJZGVidWcoRjExMSwiZ25maWxlIHpuZXh0IFgiLGZpbG5hbSx4 eCk7CisJCXh4ID0gem5leHQoZmlsbmFtKTsKKwkJZGVidWcoRjExMSwiZ25maWxlIHpuZXh0IEIi LGZpbG5hbSx4eCk7CisJCWlmICghZmlsbmFtWzBdKQorCQkgIGJyZWFrOworCQlpZiAoZG9kaXJz dG9vKSB7CisJCSAgICBkZWJ1ZyhGMTExLCJnbmZpbGUgRlRQIE1QVVQgL1JFQ1VSU0lWRSIsZmls bmFtLHh4KTsKKwkJICAgIGJyZWFrOworCQl9CisJCWlmICghaXNkaXIoZmlsbmFtKSkKKwkJICBi cmVhazsKKwkgICAgfQorCSAgICBkZWJ1ZyhGMTExLCJnbmZpbGUgem5leHQgQyIsZmlsbmFtLHgp OworCSAgICBpZiAoIWZpbG5hbVswXSkgewkJLyogSWYgbm8gbW9yZSwgKi8KKwkJc25kc3JjID0g MTsJCS8qIGdvIGJhY2sgdG8gcHJldmlvdXMgbGlzdCAqLworCQlkZWJ1ZyhGMTAxLCJnbmZpbGUg c2V0dGluZyBzbmRzcmMgYmFjayIsIiIsc25kc3JjKTsKKwkJY29udGludWU7CisJICAgIH0gZWxz ZQorCSAgICAgIGNrc3RybmNweShmdWxsbmFtZSxmaWxuYW0sQ0tNQVhQQVRIKzEpOworCX0KKwor LyogR2V0IGhlcmUgd2l0aCBhIGZpbGVuYW1lLiAqLworCitnb3RuYW06CisJZGVidWcoRjExMCwi Z25maWxlIGZ1bGxuYW1lIixmdWxsbmFtZSwwKTsKKwlpZiAoZnVsbG5hbWVbMF0pIHsKKyNpZmRl ZiBEVElMREUKKwkgICAgY2hhciAqIGRpcnAgPSAiIjsKKwkgICAgaWYgKGZ1bGxuYW1lWzBdID09 ICd+JykgeworCQlkaXJwID0gdGlsZGVfZXhwYW5kKChjaGFyICopZnVsbG5hbWUpOworCQlpZiAo KmRpcnApIGNrc3RybmNweShmdWxsbmFtZSxkaXJwLENLTUFYUEFUSCsxKTsKKwkgICAgfQorI2Vu ZGlmIC8qIERUSUxERSAqLworCSAgICBmaWxlc2l6ZSA9IHpjaGtpKGZ1bGxuYW1lKTsJLyogQ2hl Y2sgaWYgZmlsZSByZWFkYWJsZSAqLworCSAgICBkZWJ1ZyhGMTExLCJnbmZpbGUgemNoa2kiLGZ1 bGxuYW1lLGZpbGVzaXplKTsKKwkgICAgcmV0Y29kZSA9IGZpbGVzaXplOwkJLyogUG9zc2libGUg cmV0dXJuIGNvZGUgKi8KKwkgICAgaWYgKGZpbGVzaXplID09IChDS19PRkZfVCktMiAmJiBkb2Rp cnN0b28pIHsKKwkJZmlsZXNpemUgPSAwOworCSAgICB9CisJICAgIGlmIChmaWxlc2l6ZSA8IDAp IHsKKwkJZ25mZXJyb3IgPSAoaW50KWZpbGVzaXplOworCQlkZWJ1ZyhGMTAxLCJnbmZpbGUgZ25m ZXJyb3IgQyIsIiIsZ25mZXJyb3IpOworCSAgICB9CisJICAgIGlmIChmaWxlc2l6ZSA9PSAoQ0tf T0ZGX1QpLTEpIHsgLyogSWYgbm90IGZvdW5kICovCisJCWRlYnVnKEYxMDAsImduZmlsZSAtMSIs IiIsMCk7CisjaWZuZGVmIE5PU0VSVkVSCisJCWlmIChzZXJ2ZXIgJiYgbmdldHBhdGggPiBpKQor CQkgIGdvdG8gbmV4dGlucGF0aDsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCQlkZWJ1ZyhGMTEw LCJnbmZpbGUgc2tpcHBpbmc6IixmdWxsbmFtZSwwKTsKKwkJdGxvZyhGMTEwLGZ1bGxuYW1lLCI6 IG9wZW4gZmFpbHVyZSAtIHNraXBwZWQiLDApOworCQl4eHNjcmVlbihTQ1JfRk4sMCwwbCxmdWxs bmFtZSk7CisJCXh4c2NyZWVuKFNDUl9TVCxTVF9TS0lQLFNLUF9BQ0MsZnVsbG5hbWUpOworI2lm ZGVmIFRMT0cKKwkJaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKKwkJICBkb3hsb2cod2hhdCxmdWxs bmFtZSxmc2l6ZSxiaW5hcnksMSwiU2tpcHBlZCIpOworI2VuZGlmIC8qIFRMT0cgKi8KKwkJY29u dGludWU7CisJICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPCAwKSB7CisJCWlmIChmaWxlc2l6ZSA9 PSAoQ0tfT0ZGX1QpLTMpIHsgLyogRXhpc3RzIGJ1dCBub3QgcmVhZGFibGUgKi8KKwkJICAgIGRl YnVnKEYxMDAsImduZmlsZSAtMyIsIiIsMCk7CisJCSAgICBmaWxyZWorKzsJCS8qIENvdW50IHRo aXMgb25lIGFzIG5vdCBzZW50ICovCisJCSAgICB0bG9nKEYxMTAsIlJlYWQgYWNjZXNzIGRlbmll ZCIsZnVsbG5hbWUsMCk7IC8qIExvZyB0aGlzICovCisJCSAgICB4eHNjcmVlbihTQ1JfRk4sMCww bCxmdWxsbmFtZSk7CisJCSAgICB4eHNjcmVlbihTQ1JfU1QsU1RfU0tJUCxTS1BfQUNDLGZ1bGxu YW1lKTsgLyogRGlzcGxheSBpdCAqLworI2lmZGVmIFRMT0cKKwkJICAgIGlmICh0cmFsb2cgJiYg IXRsb2dmbXQpCisJCSAgICAgIGRveGxvZyh3aGF0LGZ1bGxuYW1lLGZzaXplLGJpbmFyeSwxLCJT a2lwcGVkIik7CisjZW5kaWYgLyogVExPRyAqLworCQl9CisJCWNvbnRpbnVlOworCSAgICB9IGVs c2UgeworCQlpbnQgeHg7CisJCWZzaXplID0gZmlsZXNpemU7CisvKiArKysgKi8KKyAgICBkZWJ1 ZyhGMTExLCJnbmZpbGUgc25kc21hbGxlciIsY2tmc3RvYShzbmRzbWFsbGVyKSxzbmRzbWFsbGVy KTsKKyAgICBkZWJ1ZyhGMTExLCJnbmZpbGUgc25kbGFyZ2VyIixja2ZzdG9hKHNuZGxhcmdlciks c25kbGFyZ2VyKTsKKyAgICBkZWJ1ZyhGMTExLCJnbmZpbGUgKENLX09GRl9UKS0xIixja2ZzdG9h KChDS19PRkZfVCktMSksKENLX09GRl9UKS0xKTsKKworCQl4eCA9IGZpbGVzZWxlY3QoZnVsbG5h bWUsCisJCQkJc25kYWZ0ZXIsIHNuZGJlZm9yZSwKKwkJCQlzbmRuYWZ0ZXIsc25kbmJlZm9yZSwK KwkJCQlzbmRzbWFsbGVyLHNuZGxhcmdlciwKKwkJCQlza2lwYnVwLAorCQkJCU5TTkRFWENFUFQs c25kZXhjZXB0KTsKKwkJZGVidWcoRjExMSwiZ25maWxlIGZpbGVzZWxlY3QiLGZ1bGxuYW1lLHh4 KTsKKwkJaWYgKCF4eCkgeworCQkgICAgZmlsZXNpemUgPSAoQ0tfT0ZGX1QpLTE7CisJCSAgICBn bmZlcnJvciA9IC02OworCQkgICAgZGVidWcoRjEwMSwiZ25maWxlIGduZmVycm9yIEQiLCIiLGdu ZmVycm9yKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJCWNrc3RybmNweShmaWxuYW0sZnVsbG5h bWUsQ0tNQVhQQVRIKzEpOworCQlyZXR1cm4oMSk7CisJICAgIH0KKyNpZmRlZiBDT01NRU5UCisJ LyogVGhpcyBjYW4ndCBiZSByaWdodCEgKi8KKwl9IGVsc2UgewkJCS8qIHNuZHNyYyBpcyAwLi4u ICovCisJICAgIGlmICghZmlsZXNlbGVjdChmdWxsbmFtZSwKKwkJCSAgICBzbmRhZnRlciwgc25k YmVmb3JlLAorCQkJICAgIHNuZG5hZnRlcixzbmRuYmVmb3JlLAorCQkJICAgIHNuZHNtYWxsZXIs c25kbGFyZ2VyLAorCQkJICAgIHNraXBidXAsCisJCQkgICAgTlNOREVYQ0VQVCxzbmRleGNlcHQp KSB7CisJCWduZmVycm9yID0gLTY7CisJCWRlYnVnKEYxMTEsImduZmlsZSBmaWxlc2VsZWN0Iixm dWxsbmFtZSxnbmZlcnJvcik7CisJCWZpbGVzaXplID0gKENLX09GRl9UKS0xOworCQljb250aW51 ZTsKKwkgICAgfQorCSAgICBja3N0cm5jcHkoZmlsbmFtLGZ1bGxuYW1lLENLTUFYUEFUSCsxKTsK KwkgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwl9CisgICAgfQorICAgIGRl YnVnKEYxMDEsImduZmlsZSByZXN1bHQiLCIiLHJldGNvZGUpOworICAgICpmaWxuYW0gPSAnXDAn OworICAgIHJldHVybigwKTsKK30KKworLyoKKyAgVGhlIGZvbGxvd2luZyBidW5jaCBvZiByb3V0 aW5lcyBmZWVkIGludGVybmFsbHkgZ2VuZXJhdGVkIGRhdGEgdG8gdGhlIHNlcnZlcgorICB0byBz ZW5kIHRvIHRoZSBjbGllbnQgaW4gcmVzcG9uc2UgdG8gUkVNT1RFIGNvbW1hbmRzIGxpa2UgRElS RUNUT1JZLCBERUxFVEUsCisgIGFuZCBzbyBvbi4gIFdlIGhhdmUgdG8gd3JpdGUgdGhlc2UgbGlu ZXMgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSB0byBvdXIKKyAgcGxhdGZvcm0sIHNvIHRoZXkg Y2FuIGJlIGNvbnZlcnRlZCB0byBnZW5lcmljIChDUkxGKSB0ZXh0IGZvcm1hdCBieSB0aGUKKyAg cGFja2V0aXplci4KKyovCisjaWZkZWYgVU5JWAorY2hhciAqIGVuZGxpbmUgPSAiXDEyIjsKKyNl bHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKK2NoYXIgKiBlbmRsaW5lID0gIlwxMiI7CisjZWxzZQor I2lmZGVmIE1BQworY2hhciAqIGVuZGxpbmUgPSAiXDE1IjsKKyNlbHNlCisjaWZkZWYgT1NLCitj aGFyICogZW5kbGluZSA9ICJcMTUiOworI2Vsc2UKK2NoYXIgKiBlbmRsaW5lID0gIlwxNVwxMiI7 CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogZGF0YWdlbmVy YWwgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBNQUMKKyNkZWZpbmUgRk5DQlVGTCAy NTYKKyNlbHNlCisjaWZkZWYgQ0tTWU1MSU5LCisjZGVmaW5lIEZOQ0JVRkwgKENLTUFYUEFUSCAr IENLTUFYUEFUSCArIDY0KQorI2Vsc2UKKyNkZWZpbmUgRk5DQlVGTCAoQ0tNQVhQQVRIICsgNjQp CisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisjZW5kaWYgLyogTUFDICovCisKKy8qIE5COiBUaGUg bWluaW11bSBGTkNCVUZMIGlzIDI1NSAqLworCitzdGF0aWMgQ0hBUiBmdW5jYnVmW0ZOQ0JVRkxd Oworc3RhdGljIGludCAgZnVuY254dCA9ICAwOworc3RhdGljIGludCAgZnVuY2xlbiA9ICAwOwor c3RhdGljIGludCAgbnhwbmQgICA9IC0xOworc3RhdGljIGxvbmcgbmRpcnMgICA9ICAwOworc3Rh dGljIGxvbmcgbmZpbGVzICA9ICAwOworc3RhdGljIENLX09GRl9UIG5ieXRlcyAgPSAgMDsKKwor aW50CitzbmRzdHJpbmcocCkgY2hhciAqIHA7IHsKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBuZmls cyA9IDA7CQkJCS8qIE5vIGZpbGVzLCBubyBsaXN0cy4gKi8KKyAgICB4ZmxnID0gMTsJCQkJLyog RmxhZyB3ZSBtdXN0IHNlbmQgWCBwYWNrZXQuICovCisgICAgY2tzdHJuY3B5KGNtZHN0cix2ZXJz aW8sQ01EU1RSTCk7CS8qIERhdGEgZm9yIFggcGFja2V0LiAqLworICAgIGZpcnN0ID0gMTsJCQkJ LyogSW5pdCBnZXRjaHggbG9va2FoZWFkICovCisgICAgbWVtc3RyID0gMTsJCQkJLyogSnVzdCBz ZXQgdGhlIGZsYWcuICovCisgICAgbWVtcHRyID0gcDsJCQkJLyogQW5kIHRoZSBwb2ludGVyLiAq LworICAgIGJpbmFyeSA9IFhZRlRfVDsJCQkvKiBUZXh0IG1vZGUgZm9yIHRoaXMuICovCisgICAg cmV0dXJuKHNpbml0KCkpOworI2Vsc2UKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTk9TRVJW RVIgKi8KK30KKworLyogIFMgTiBEIEggTCBQICAtLSAgUm91dGluZSB0byBzZW5kIGJ1aWx0aW4g aGVscCAgKi8KKworc3RhdGljIGludCBzcnZobHBudW0gPSAwOworCisjaWZkZWYgSUtTRAorc3Rh dGljIGNoYXIgKm5teFtdID0gIHsgIkRpc2FibGVkIiwgIkRpc2FibGVkIiwgIkVuYWJsZWQiLCAi RW5hYmxlZCIgfTsKKyNlbmRpZiAvKiBJS1NEICovCisKK3N0YXRpYyBjaGFyICoKK3hubSh4KSBp bnQgeDsgeworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICByZXR1cm4obm14 W3hdKTsKKyAgICBlbHNlCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgcmV0dXJuKG5tW3hdKTsK K30KKworc3RhdGljIGludAorbnh0aGxwKAorI2lmZGVmIENLX0FOU0lDCisgICAgICAgdm9pZAor I2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgICAgKSB7CisgICAgaW50IHggPSAwOworICAgIGV4 dGVybiBpbnQKKyAgICAgIGVuX2NweSwgZW5fY3dkLCBlbl9kZWwsIGVuX2RpciwgZW5fZmluLCBl bl9nZXQsIGVuX2J5ZSwgZW5fbWFpLAorICAgICAgZW5fcHJpLCBlbl9ob3MsIGVuX3JlbiwgZW5f c2VuLCBlbl9zcGEsIGVuX3NldCwgZW5fdHlwLCBlbl93aG8sCisgICAgICAvKiBlbl9yZXQsICov IGVuX21rZCwgZW5fcm1kLCBlbl9hc2csIGVuX3F1ZSwgZW5feGl0LCB4X2xvZ2luLCB4X2xvZ2dl ZCwKKyAgICAgIHhmaW5pc2g7CisgICAgZXh0ZXJuIGNoYXIgKiBja3hzeXM7CisKKyAgICBpZiAo ZnVuY254dCA8IGZ1bmNsZW4pCisgICAgICByZXR1cm4gKGZ1bmNidWZbZnVuY254dCsrXSk7CisK KyAgICBzd2l0Y2ggKHNydmhscG51bSsrKSB7CisgICAgICBjYXNlIDA6CisJeCA9IGNrc3RybmNw eSgoY2hhciAqKWZ1bmNidWYsCisJCSAgICAgICJDbGllbnQgQ29tbWFuZCAgICAgU3RhdHVzICAg ICAgICBEZXNjcmlwdGlvblxuIiwKKwkJICAgICAgRk5DQlVGTAorCQkgICAgICApOworCWlmICh4 X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCSAgICB4ICs9IGNrc3RybmNhdCgoY2hhciAqKWZ1bmNi dWYsCisJCQkgICAiIFJFTU9URSBMT0dJTiAgICAgICByZXF1aXJlZFxuIiwKKwkJCSAgIEZOQ0JV RkwKKwkJCSAgICk7CisJfQorCWlmIChGTkNCVUZMIC0geCA+IDc0KQorCXNwcmludGYoKGNoYXIg KikoZnVuY2J1Zit4KSwiIEdFVCAgICAgICAgICAgICAgICAlLTE0cyVzXG4iLAorCQl4bm0oZW5f Z2V0KSwKKwkJIlRyYW5zZmVyIGZpbGUocykgZnJvbSBzZXJ2ZXIgdG8gY2xpZW50LiIKKwkJKTsK KwlicmVhazsKKworLyogTk9URTogVGhlIG1pbmltdW0gZnVuY2J1ZltdIHNpemUgaXMgMjU1OyBh bGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgc2FmZS4gKi8KKworICAgICAgY2FzZSAxOgorCXNwcmlu dGYoKGNoYXIgKilmdW5jYnVmLCIgU0VORCAgICAgICAgICAgICAgICUtMTRzJXNcbiIsCisJCXhu bShlbl9zZW4pLAorCQkiVHJhbnNmZXIgZmlsZShzKSBmcm9tIGNsaWVudCB0byBzZXJ2ZXIuIgor CQkpOworCWJyZWFrOworCisgICAgICBjYXNlIDI6CisJc3ByaW50ZigoY2hhciAqKWZ1bmNidWYs IiBNQUlMICAgICAgICAgICAgICAgJS0xNHMlc1xuIiwKKwkJeG5tKGluc2VydmVyID8gMCA6IGVu X21haSksCisJCSJTZW5kIGZpbGUocykgYXMgZS1tYWlsLiIKKwkJKTsKKwlicmVhazsKKworICAg ICAgY2FzZSAzOgorI2lmbmRlZiBOT1NQTAorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVN T1RFIEFTU0lHTiAgICAgICUtMTRzJXNcbiIsCisJCXhubShlbl9hc2cpLAorCQkiQXNzaWduIHZh bHVlIHRvIHNlcnZlciB2YXJpYWJsZSBvciBtYWNyby4iCisJCSk7CisjZWxzZQorCXNwcmludGYo KGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIEFTU0lHTiAgICAgIG5vdCBjb25maWd1cmVkXG4iKTsK KyNlbmRpZiAvKiBOT1NQTCAqLworCisJYnJlYWs7CisgICAgICBjYXNlIDQ6CisJc3ByaW50Zigo Y2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgQ0QgICAgICAgICAgJS0xNHMlc1xuIiwKKwkJeG5tKGVu X2N3ZCksCisJCSJDaGFuZ2Ugc2VydmVyJ3MgZGlyZWN0b3J5LiIKKwkJKTsKKwlicmVhazsKKwor ICAgICAgY2FzZSA1OgorI2lmZGVmIFpDT1BZCisJc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBS RU1PVEUgQ09QWSAgICAgICAgJS0xNHMlc1xuIiwKKwkJeG5tKGVuX2NweSksCisJCSJDb3B5IGEg ZmlsZSBvbiB0aGUgc2VydmVyLiIKKwkJKTsKKyNlbHNlCisJc3ByaW50ZigoY2hhciAqKWZ1bmNi dWYsIiBSRU1PVEUgQ09QWSAgICAgICAgbm90IGNvbmZpZ3VyZWRcbiIpOworI2VuZGlmIC8qIFpD T1BZICovCisKKwlicmVhazsKKyAgICAgIGNhc2UgNjoKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1 ZiwiIFJFTU9URSBERUxFVEUgICAgICAlLTE0cyVzXG4iLAorCQl4bm0oZW5fZGVsKSwKKwkJIkRl bGV0ZSBhIGZpbGUgb24gdGhlIHNlcnZlci4iCisJCSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2Ug NzoKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBESVJFQ1RPUlkgICAlLTE0cyVz XG4iLAorCQl4bm0oZW5fZGlyKSwKKwkJIkxpc3QgZmlsZXMgb24gdGhlIHNlcnZlci4iCisJCSk7 CisJYnJlYWs7CisKKyAgICAgIGNhc2UgODoKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJF TU9URSBFWElUICAgICAgICAlLTE0cyVzXG4iLAorCQl4bm0oZW5feGl0KSwKKwkJIkV4aXQgZnJv bSBLZXJtaXQgc2VydmVyIHByb2dyYW0uIgorCQkpOworCWJyZWFrOworCisgICAgICBjYXNlIDk6 CisJc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiBSRU1PVEUgSE9TVCAgICAgICAgJS0xNHMlc1xu IiwKKwkJeG5tKGluc2VydmVyID8gMCA6IGVuX2hvcyksCisjaWZkZWYgZGF0YWdlbmVyYWwKKwkJ IkV4ZWN1dGUgYSBDTEkgY29tbWFuZCBvbiB0aGUgc2VydmVyLiIKKyNlbHNlCisjaWZkZWYgVk1T CisJCSJFeGVjdXRlIGEgRENMIGNvbW1hbmQgb24gdGhlIHNlcnZlci4iCisjZWxzZQorCQkiRXhl Y3V0ZSBhIHNoZWxsIGNvbW1hbmQgb24gdGhlIHNlcnZlci4iCisjZW5kaWYgLyogVk1TICovCisj ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKwkJKTsKKwlicmVhazsKKworICAgICAgY2FzZSAxMDoK KwlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBQUklOVCAgICAgICAlLTE0cyVzXG4i LAorCQl4bm0oaW5zZXJ2ZXIgPyAwIDogZW5fcHJpKSwKKwkJIlNlbmQgYSBmaWxlIHRvIHRoZSBz ZXJ2ZXIgZm9yIHByaW50aW5nLiIKKwkJKTsKKwlicmVhazsKKworICAgICAgY2FzZSAxMToKKyNp Zm5kZWYgTk9TUEwKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBRVUVSWSAgICAg ICAlLTE0cyVzXG4iLAorCQl4bm0oZW5fcXVlKSwKKwkJIkdldCB2YWx1ZSBvZiBzZXJ2ZXIgdmFy aWFibGUgb3IgbWFjcm8uIgorCQkpOworCisjZWxzZQorCXNwcmludGYoKGNoYXIgKilmdW5jYnVm LCIgUkVNT1RFIFFVRVJZICAgICAgIG5vdCBjb25maWd1cmVkXG4iKTsKKyNlbmRpZiAvKiBOT1NQ TCAqLworCisJYnJlYWs7CisgICAgICBjYXNlIDEyOgorCXNwcmludGYoKGNoYXIgKilmdW5jYnVm LCIgUkVNT1RFIE1LRElSICAgICAgICUtMTRzJXNcbiIsCisJCXhubShlbl9ta2QpLAorCQkiQ3Jl YXRlIGEgZGlyZWN0b3J5IG9uIHRoZSBzZXJ2ZXIuIgorCQkpOworCWJyZWFrOworCisgICAgICBj YXNlIDEzOgorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RFIFJNRElSICAgICAgICUt MTRzJXNcbiIsCisJCXhubShlbl9ybWQpLAorCQkiUmVtb3ZlIGEgZGlyZWN0b3J5IG9uIHRoZSBz ZXJ2ZXIuIgorCQkpOworCWJyZWFrOworCisgICAgICBjYXNlIDE0OgorCXNwcmludGYoKGNoYXIg KilmdW5jYnVmLCIgUkVNT1RFIFJFTkFNRSAgICAgICUtMTRzJXNcbiIsCisJCXhubShlbl9yZW4p LAorCQkiUmVuYW1lIGEgZmlsZSBvbiB0aGUgc2VydmVyLiIKKwkJKTsKKwlicmVhazsKKworICAg ICAgY2FzZSAxNToKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBTRVQgICAgICAg ICAlLTE0cyVzXG4iLAorCQl4bm0oZW5fc2V0KSwKKwkJIlNldCBhIHBhcmFtZXRlciBvbiB0aGUg c2VydmVyIgorCQkpOworCWJyZWFrOworCisgICAgICBjYXNlIDE2OgorCXNwcmludGYoKGNoYXIg KilmdW5jYnVmLCIgUkVNT1RFIFNQQUNFICAgICAgICUtMTRzJXNcbiIsCisJCXhubShlbl9zcGEp LAorCQkiSW5xdWlyZSBhYm91dCBkaXNrIHNwYWNlIG9uIHRoZSBzZXJ2ZXIuIgorCQkpOworCWJy ZWFrOworCisgICAgICBjYXNlIDE3OgorCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgUkVNT1RF IFRZUEUgICAgICAgICUtMTRzJXNcbiIsCisJCXhubShlbl90eXApLAorCQkiRGlzcGxheSBhIHNl cnZlciBmaWxlIG9uIHlvdXIgc2NyZWVuLiIKKwkJKTsKKwlicmVhazsKKworICAgICAgY2FzZSAx ODoKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIFJFTU9URSBXSE8gICAgICAgICAlLTE0cyVz XG4iLAorCQl4bm0oaW5zZXJ2ZXIgPyAwIDogZW5fd2hvKSwKKwkJIkxpc3Qgd2hvIGlzIGxvZ2dl ZCBpbiB0byB0aGUgc2VydmVyLiIKKwkJKTsKKwlicmVhazsKKworICAgICAgY2FzZSAxOToKKwlz cHJpbnRmKChjaGFyICopZnVuY2J1ZiwiIEZJTklTSCAgICAgICAgICAgICAlLTE0cyVzXG4iLAor CQl4bm0oZW5fZmluKSwKKwkJeGZpbmlzaCA/CisJCSJFeGl0IGZyb20gS2VybWl0IHNlcnZlciBw cm9ncmFtLiIgOgorCQkiUmV0dXJuIHRoZSBzZXJ2ZXIgdG8gaXRzIGNvbW1hbmQgcHJvbXB0LiIK KwkJKTsKKwlicmVhazsKKworICAgICAgY2FzZSAyMDoKKwlzcHJpbnRmKChjaGFyICopZnVuY2J1 ZiwiIEJZRSAgICAgICAgICAgICAgICAlLTE0cyVzXG5cbiIsCisJCXhubShlbl9ieWUpLAorCQki TG9nIHRoZSBzZXJ2ZXIgb3V0IGFuZCBkaXNjb25uZWN0LiIKKwkJKTsKKwlicmVhazsKKworICAg ICAgZGVmYXVsdDoKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBmdW5jbnh0ID0gMDsKKyAgICBm dW5jbGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1Zik7CisgICAgcmV0dXJuKGZ1bmNidWZbZnVu Y254dCsrXSk7Cit9CisKK2ludAorc25kaGxwKCkgeworI2lmbmRlZiBOT1NFUlZFUgorICAgIGV4 dGVybiBjaGFyICogY2t4c3lzOworCisgICAgZmlyc3QgPSAxOwkJCQkvKiBJbml0IGdldGNoeCBs b29rYWhlYWQgKi8KKyAgICBuZmlscyA9IDA7CQkJCS8qIE5vIGZpbGVzLCBubyBsaXN0cy4gKi8K KyAgICB4ZmxnID0gMTsJCQkJLyogRmxhZyB3ZSBtdXN0IHNlbmQgWCBwYWNrZXQuICovCisgICAg Y2tzdHJuY3B5KGNtZHN0ciwiUkVNT1RFIEhFTFAiLENNRFNUUkwpOyAvKiBEYXRhIGZvciBYIHBh Y2tldC4gKi8KKyAgICBzcHJpbnRmKChjaGFyICopZnVuY2J1ZiwgIkMtS2VybWl0ICVzLCVzXG5c biIsIHZlcnNpbywgY2t4c3lzKTsKKyAgICBmdW5jbGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1 Zik7CisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgeworCXNwcmludGYoKGNoYXIgKiko ZnVuY2J1ZitmdW5jbGVuKSwKKwkJIkludGVybmV0IEtlcm1pdCBTZXJ2aWNlIChFWFBFUklNRU5U QUwpXG5cbiIpOworCWZ1bmNsZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKKyAgICB9Cisj ZW5kaWYgLyogSUtTRCAqLworICAgIGZ1bmNueHQgPSAwOworICAgIGZ1bmNwdHIgPSBueHRobHA7 CisgICAgZnVuY3N0ciA9IDE7CisgICAgc3J2aGxwbnVtID0gMDsKKyAgICBiaW5hcnkgPSBYWUZU X1Q7CQkJLyogVGV4dCBtb2RlIGZvciB0aGlzLiAqLworICAgIHJldHVybihzaW5pdCgpKTsKKyNl bHNlCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKy8qCisgICBS ZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBjaGFyYWN0ZXIsCisgIC0xIGlmIG5vIG1vcmUgZGF0 YS4KKyovCitzdGF0aWMgaW50CitueHR0eXBlKAorI2lmZGVmIENLX0FOU0lDCisgICAgICAgdm9p ZAorI2VuZGlmIC8qIENLX0FOU0lDICovCisJKSB7CisgICAgaW50IGM7CisgICAgaWYgKHpjaGlu KFpJRklMRSwmYykgPCAwKSB7CisgICAgICAgIHpjbG9zZShaSUZJTEUpOworICAgICAgICByZXR1 cm4oLTEpOworICAgIH0gZWxzZSB7CisJcmV0dXJuKCh1bnNpZ25lZCljKTsKKyAgICB9Cit9CisK Ky8qICBTIE4gRCBUIFkgUCAtLSBUWVBFIGEgZmlsZSB0byByZW1vdGUgY2xpZW50ICovCisKK2lu dAorc25kdHlwZShmaWxlKSBjaGFyICogZmlsZTsgeworI2lmbmRlZiBOT1NFUlZFUgorICAgIGNo YXIgbmFtZVtDS01BWFBBVEgrMV07CisKKyNpZmRlZiBPUzIKKyAgICBjaGFyICogcCA9IE5VTEw7 CisKKyAgICBpZiAoKmZpbGUpIHsKKyAgICAgICAgY2tzdHJuY3B5KG5hbWUsIGZpbGUsIENLTUFY UEFUSCsxKTsKKyAgICAgICAgLyogY2hhbmdlIC8gdG8gXC4gKi8KKyAgICAgICAgcCA9IG5hbWU7 CisgICAgICAgIHdoaWxlICgqcCkgewkJCS8qIENoYW5nZSB0aGVtIGJhY2sgdG8gXCAqLworICAg ICAgICAgICAgaWYgKCpwID09ICcvJykgKnAgPSAnXFwnOworICAgICAgICAgICAgcCsrOworICAg ICAgICB9CisgICAgfSBlbHNlCisgICAgICByZXR1cm4oMCk7CisjZWxzZQorICAgIGNrc3RybmNw eShuYW1lLCBmaWxlLCBDS01BWFBBVEgrMSk7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBmdW5j bnh0ID0gMDsKKyAgICBmdW5jbGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1Zik7CisgICAgaWYg KHpjaGtpKG5hbWUpID09IC0yKSB7CisgICAgICAgIC8qIEZvdW5kIGEgZGlyZWN0b3J5ICovCisg ICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgaWYgKCF6b3BlbmkoWklGSUxFLG5hbWUpKQor ICAgICAgcmV0dXJuKDApOworCisgICAgbmZpbHMgPSAwOwkJCQkvKiBObyBmaWxlcywgbm8gbGlz dHMuICovCisgICAgeGZsZyA9IDE7CQkJCS8qIEZsYWcgd2UgbXVzdCBzZW5kIFggcGFja2V0LiAq LworICAgIGNrc3RybmNweShjbWRzdHIsInR5cGUiLENNRFNUUkwpOwkvKiBEYXRhIGZvciBYIHBh Y2tldC4gKi8KKyAgICBmaXJzdCA9IDE7CQkJCS8qIEluaXQgZ2V0Y2h4IGxvb2thaGVhZCAqLwor ICAgIGZ1bmNzdHIgPSAxOwkJCS8qIEp1c3Qgc2V0IHRoZSBmbGFnLiAqLworICAgIGZ1bmNwdHIg PSBueHR0eXBlOwkJCS8qIEFuZCB0aGUgcG9pbnRlci4gKi8KKyAgICBiaW5hcnkgPSBYWUZUX1Q7 CQkJLyogVGV4dCBtb2RlIGZvciB0aGlzICovCisgICAgcmV0dXJuKHNpbml0KCkpOworI2Vsc2UK KyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworLyoKKyAgIE4gWCBU IEQgSSBSICAtLSAgUHJvdmlkZSBkYXRhIGZvciBzZW5kZGlyKCkKKworICAgUmV0dXJucyB0aGUg bmV4dCBhdmFpbGFibGUgY2hhcmFjdGVyIG9yIC0xIGlmIG5vIG1vcmUgZGF0YS4KKyovCisjaWZu ZGVmIE5PSUNQCisvKiBEaXJlY3RvcnkgbGlzdGluZyBwYXJhbWV0ZXJzIHNldCBieSB0aGUgdXNl ciBpbnRlcmZhY2UsIGlmIGFueS4gKi8KK2V4dGVybiBpbnQgZGlyX2hlYWQsIGRpcl9kb3RzLCBk aXJfYmFjazsKKyNlbmRpZiAvKiBOT0lDUCAqLworc3RhdGljIGludCBzZF9oZGcsIHNkX2JrcCwg c2RfZG90OwkvKiBMb2NhbCBsaXN0aW5nIHBhcmFtZXRlcnMgKi8KKworc3RhdGljIGludAorbnh0 ZGlyKAorI2lmZGVmIENLX0FOU0lDCisgICAgICAgdm9pZAorI2VuZGlmIC8qIENLX0FOU0lDICov CisgICAgICAgKSB7CisgICAgY2hhciBuYW1lW0NLTUFYUEFUSCsxXSwgZGJ1ZlsyNF0sICpwID0g TlVMTDsKKyAgICBjaGFyICpkc3RyID0gTlVMTCwgKiBsbmsgPSAiIjsKKyAgICBDSEFSIGMsICog bGluZWJ1ZiA9IGZ1bmNidWY7CisjaWZkZWYgT1NLCisgICAgLyogV29yayBhcm91bmQgYnVncyBp biBPU0sgY29tcGlsZXIgKi8KKyAgICBjaGFyICpkaXJ0YWcgPSAiZGlyZWN0b3JpZXMiOworICAg IGNoYXIgKmZpbGV0YWcgPSAiZmlsZXMiOworICAgIGNoYXIgKmJ5dGV0YWcgPSAiYnl0ZXMiOwor I2VuZGlmIC8qIE9TSyAqLworICAgIENLX09GRl9UIGxlbiA9IDA7CisgICAgaW50IHgsIGl0c2Fk aXIgPSAwLCBnb3RvbmUgPSAwOworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJ ZGVidWcoRjEwMSwibnh0ZGlyIGZ1bmNueHQiLCIiLGZ1bmNueHQpOworCWRlYnVnKEYxMDEsIm54 dGRpciBmdW5jbGVuIiwiIixmdW5jbGVuKTsKKwlkZWJ1ZyhGMTEwLCJueHRkaXIgZnVuY2J1ZiIs ZnVuY2J1ZitmdW5jbnh0LDApOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIGlmIChm dW5jbnh0IDwgZnVuY2xlbikgewkJLyogUmV0dXJuIG5leHQgY2hhcmFjdGVyIGZyb20gYnVmZmVy ICovCisJYyA9IGZ1bmNidWZbZnVuY254dCsrXTsKKwlkZWJ1ZyhGMDAwLCJueHRkaXIgcmV0dXJu IDEiLCIiLCh1bnNpZ25lZCkoYyAmIDB4ZmYpKTsKKwlyZXR1cm4oKHVuc2lnbmVkKShjICYgMHhm ZikpOworICAgIH0KKyAgICB3aGlsZSAobnhwbmQgPiAwKSB7CQkJLyogQnVmZmVyIG5lZWRzIHJl ZmlsbCAqLworICAgICAgICBueHBuZC0tOworCXpuZXh0KG5hbWUpOwkJCS8qIEdldCBuZXh0IGZp bGVuYW1lICovCisgICAgICAgIGlmICghbmFtZVswXSkgewkJCS8qIE5vbmUgbGVmdCAtIGRvbmUg Ki8KKyAgICAgICAgICAgIG54cG5kID0gMDsKKyAgICAgICAgICAgIHJldHVybihueHRkaXIoKSk7 CisgICAgICAgIH0KKwlpZiAoc2RfYmtwKSB7CQkJLyogU2hvd2luZyBiYWNrdXAgZmlsZXM/ICov CisJICAgIGdvdG9uZSA9IDE7CQkJLyogWWVzLCBubyBuZWVkIHRvIGNoZWNrLiAqLworCSAgICBi cmVhazsKKwl9CisJeCA9IGNrbWF0Y2goCQkJLyogTm8gLSBzZWUgaWYgdGhpcyBpcyBvbmUgKi8K KyNpZmRlZiBDS1JFR0VYCisJCSAgICAiKi5+WzAtOV0qfiIJLyogTm90IHBlcmZlY3QgYnV0IGNs b3NlIGVub3VnaC4gKi8KKyNlbHNlCisJCSAgICAiKi5+Kn4iCQkvKiBMZXNzIGNsb3NlLiAqLwor I2VuZGlmIC8qIENLUkVHRVggKi8KKwkJICAgICxuYW1lLGZpbGVjYXNlLDEpOworCWRlYnVnKEYx MTEsIm54dGRpciBja21hdGNoIixuYW1lLHgpOworCWlmICh4KSB7CisJICAgIGNvbnRpbnVlOwkJ CS8qIEl0J3MgYSBiYWNrdXAgZmlsZSAtIHNraXAgaXQgKi8KKwl9IGVsc2UgeworCSAgICBnb3Rv bmUgPSAxOwkJCS8qIEl0J3Mgbm90LCBicmVhayBmcm9tIGxvb3AuICovCisJICAgIGJyZWFrOwor CX0KKyAgICB9CisgICAgaWYgKGdvdG9uZSkgeworICAgICAgICBsZW4gPSB6Z2V0ZnMobmFtZSk7 CQkvKiBHZXQgZmlsZSBzaXplICovCisJZGVidWcoRjExMSwibnh0ZGlyIHpnZXRmcyIsbmFtZSxs ZW4pOworI2lmZGVmIFZNU09SVU5JWAorCWl0c2FkaXIgPSB6Z2ZzX2RpcjsJCS8qIFNlZSBpZiBp dCdzIGEgZGlyZWN0b3J5ICovCisjZWxzZQorCWl0c2FkaXIgPSAobGVuID09IC0yIHx8IGlzZGly KG5hbWUpKTsKKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKyAgICAgICAgZHN0ciA9IHpmY2RhdChu YW1lKTsKKwlkZWJ1ZyhGMTExLCJueHRkaXIgemNmZGF0Iixkc3RyLDApOworCWlmICghZHN0cikK KwkgIGRzdHIgPSAiMDAwMC0wMC0wMCAwMDowMDowMCI7CisJaWYgKCEqZHN0cikgeworCSAgZHN0 ciA9ICIwMDAwLTAwLTAwIDAwOjAwOjAwIjsKKwl9IGVsc2UgeworCSAgICBkYnVmWzBdID0gZHN0 clswXTsKKwkgICAgZGJ1ZlsxXSA9IGRzdHJbMV07CisJICAgIGRidWZbMl0gPSBkc3RyWzJdOwor CSAgICBkYnVmWzNdID0gZHN0clszXTsKKwkgICAgZGJ1Zls0XSA9ICctJzsKKwkgICAgZGJ1Zls1 XSA9IGRzdHJbNF07CisJICAgIGRidWZbNl0gPSBkc3RyWzVdOworCSAgICBkYnVmWzddID0gJy0n OworCSAgICBkYnVmWzhdID0gZHN0cls2XTsKKwkgICAgZGJ1Zls5XSA9IGRzdHJbN107CisJICAg IHN0cmNweShkYnVmKzEwLGRzdHIrOCk7CisJICAgIGRzdHIgPSBkYnVmOworCX0KKyNpZmRlZiBD S19QRVJNUworI2lmZGVmIFZNU09SVU5JWAorCXAgPSB6aXBlcm0obmFtZSk7CQkvKiBHZXQgcGVy bWlzc2lvbnMgKi8KKyNlbHNlCisJcCA9IHpncGVybShuYW1lKTsKKyNlbmRpZiAvKiBWTVNPUlVO SVggKi8KKyNlbHNlCisJcCA9IE5VTEw7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKwlkZWJ1ZyhG MTEwLCJkb215ZGlyIHBlcm1zIixwLDApOworCisjaWZkZWYgVk1TCisJLyogTWFrZSBuYW1lIHJl bGF0aXZlICovCisJY2tzdHJuY3B5KG5hbWUsenJlbG5hbWUobmFtZSx6Z3RkaXIoKSksQ0tNQVhQ QVRIKzEpOworI2VuZGlmIC8qIFZNUyAqLworCisJaWYgKGl0c2FkaXIpIHsKKwkgICAgbmRpcnMr KzsKKwl9IGVsc2UgeworCSAgICBuZmlsZXMrKzsKKwkgICAgbmJ5dGVzICs9IGxlbjsKKwl9CisJ bG5rID0gIiI7CisjaWZkZWYgVU5JWAorI2lmZGVmIENLU1lNTElOSworCWlmICh6Z2ZzX2xpbmsp IHsKKwkgICAgZXh0ZXJuIGNoYXIgbGlua25hbWVbXTsKKwkgICAgbG5rID0gbGlua25hbWU7CisJ fQorCWRlYnVnKEYxMTEsIm54dGRpciBsaW5rbmFtZSIsbG5rLHpnZnNfbGluayk7CisjZW5kaWYg LyogQ0tTWU1MSU5LICovCisjZW5kaWYgLyogVU5JWCAqLworCisvKgorICBUaGUgZm9sbG93aW5n IHNwcmludGYncyBhcmUgc2FmZTsgbGluZWJ1ZiBpcyBhIHBvaW50ZXIgdG8gZnVuY2J1ZiwKKyAg d2hpY2ggaXMgNjQgYnl0ZXMgbGFyZ2VyIHRoYW4gQ0tNQVhQQVRIIChvciBkb3VibGUgQ0tNQVhQ QVRIIHdoZW4KKyAgc3ltbGlua3MgYXJlIHBvc3NpYmxlKS4gIDY0IGFsbG93cyBmb3IgdGhlIGZp eGVkLWZpZWxkIHBvcnRpb25zIG9mCisgIHRoZSBmaWxlIGxpc3RpbmcgbGluZTogcGVybWlzc2lv bnMsIHNpemUsIGFuZCBkYXRlLiAgQ0tNQVhQQVRIIGFsbG93cworICBmb3IgdGhlIGxvbmdlc3Qg cG9zc2libGUgcGF0aG5hbWUuCisqLworCWlmIChpdHNhZGlyICYmIGxlbiA8IDApIHsJLyogRGly ZWN0b3J5ICovCisjaWZkZWYgVk1TCisJICAgIHNwcmludGYoKGNoYXIgKilsaW5lYnVmLAorCQkg ICAgIiUtMjJzJS0xMHMgICVzICAlc1xuIixwLCI8RElSPiIsZHN0cixuYW1lKTsKKyNlbHNlCisJ ICAgIGlmIChwKQorCSAgICAgIHNwcmludGYoKGNoYXIgKilsaW5lYnVmLAorCQkgICAgICAiJTEw cyUtMTBzICAlcyAgJXNcbiIscCwiPERJUj4iLGRzdHIsbmFtZSk7CisJICAgIGVsc2UKKwkgICAg ICBzcHJpbnRmKChjaGFyICopbGluZWJ1ZiwKKwkJICAgICAgIiUtMTBzICAlcyAgJXNcbiIsICI8 RElSPiIsIGRzdHIsIG5hbWUpOworI2VuZGlmIC8qIFZNUyAqLworCX0gZWxzZSB7CQkJLyogUmVn dWxhciBmaWxlICovCisjaWZkZWYgVk1TCisJICAgIHNwcmludGYoKGNoYXIgKilsaW5lYnVmLAor CQkgICAgIiUtMjJzJTEwcyAgJXMgICVzXG4iLCBwLCBja2ZzdG9hKGxlbiksIGRzdHIsIG5hbWUp OworI2Vsc2UKKwkgICAgaWYgKHApCisJICAgICAgc3ByaW50ZigoY2hhciAqKWxpbmVidWYsCisJ CSAgICAgICIlMTBzJTEwcyAgJXMgICVzJXMlc1xuIiwKKwkJICAgICAgcCwgY2tmc3RvYShsZW4p LCBkc3RyLCBuYW1lLAorCQkgICAgICAqbG5rID8gIiAtPiAiIDogIiIsCisJCSAgICAgIGxuawor CQkgICAgICApOworCSAgICBlbHNlCisJICAgICAgc3ByaW50ZigoY2hhciAqKWxpbmVidWYsCisJ CSAgICAgICIlMTBzICAlcyAgJXMlcyVzXG4iLAorCQkgICAgICBja2ZzdG9hKGxlbiksIGRzdHIs IG5hbWUsCisJCSAgICAgICpsbmsgPyAiIC0+ICIgOiAiIiwKKwkJICAgICAgbG5rCisJCSAgICAg ICk7CisjZW5kaWYgLyogVk1TICovCisJfQorICAgICAgICBmdW5jbnh0ID0gMDsKKyAgICAgICAg ZnVuY2xlbiA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOworICAgIH0gZWxzZSBpZiAoc2RfaGRn ICYmIG54cG5kID09IDApIHsJLyogRG9uZSwgc2VuZCBzdW1tYXJ5ICovCisJY2hhciAqYmxhbmts aW5lID0gIiI7CQkvKiBBdCBiZWdpbm5pbmcgb2Ygc3VtbWFyeSAqLworLyoKKyAgVGhlIGlkZWEg aXMgdG8gcHJldmVudCAoYSkgdW5uZWNlc3NhcnkgbXVsdGlwbGUgYmxhbmtsaW5lcywgYW5kIChi KQorICBwcm9tcHQtc3RvbXBpbmcuICBQcmV2ZW50aW5nIChiKSBpcyBwcmFjdGljYWxseSBpbXBv c3NpYmxlLCBiZWNhdXNlIGl0CisgIGRlcGVuZHMgb24gdGhlIGNsaWVudCBzbyBmb3Igbm93IGFs d2F5cyBpbmNsdWRlIHRoYXQgZmluYWwgQ1JMRi4KKyovCisJaWYgKCFuZGlycyB8fCAhbmJ5dGVz IHx8ICFuZmlsZXMpCisJICBibGFua2xpbmUgPSBlbmRsaW5lOworI2lmZGVmIE9TSworLyogV29y a2Fyb3VuZCBidWdzIGluIE9TLTkgY29tcGlsZXIuLi4gKi8KKyAgICAgICAgaWYgKG5kaXJzID09 IDEpCisgICAgICAgICAgIGRpcnRhZyA9ICJkaXJlY3RvcnkiOworICAgICAgICBpZiAobmZpbGVz ID09IDEpCisgICAgICAgICAgIGZpbGV0YWcgPSAiZmlsZSI7CisgICAgICAgIGlmIChuYnl0ZXMg PT0gKENLX09GRl9UKTEpCisgICAgICAgICAgIGJ5dGV0YWcgPSAiYnl0ZSI7CisgICAgICAgIHNw cmludGYoKGNoYXIgKilmdW5jYnVmLAorCQkiJXNTdW1tYXJ5OiAlbGQgJXMsICVsZCAlcywgJXMg JXMlcyIsCisJCWJsYW5rbGluZSwKKwkJbmRpcnMsCisJCWRpcnRhZywKKwkJbmZpbGVzLAorCQlm aWxldGFnLAorCQlja2ZzdG9hKG5ieXRlcyksCisJCWJ5dGV0YWcsCisJCWVuZGxpbmUpOworI2Vs c2UKKyAgICAgICAgc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsCisJCSIlc1N1bW1hcnk6ICVsZCBk aXJlY3RvciVzLCAlbGQgZmlsZSVzLCAlcyBieXRlJXMlcyIsCisJCWJsYW5rbGluZSwKKwkJbmRp cnMsCisJCShuZGlycyA9PSAxKSA/ICJ5IiA6ICJpZXMiLAorCQluZmlsZXMsCisJCShuZmlsZXMg PT0gMSkgPyAiIiA6ICJzIiwKKwkJY2tmc3RvYShuYnl0ZXMpLAorCQkobmJ5dGVzID09IChDS19P RkZfVCkxKSA/ICIiIDogInMiLAorCQllbmRsaW5lCisJCSk7CisjZW5kaWYgLyogT1NLICovCisg ICAgICAgIG54cG5kLS07CisgICAgICAgIGZ1bmNueHQgPSAwOworICAgICAgICBmdW5jbGVuID0g c3RybGVuKChjaGFyICopZnVuY2J1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnVuY2J1Zlsw XSA9ICdcMCc7CisgICAgICAgIGZ1bmNueHQgPSAwOworICAgICAgICBmdW5jbGVuID0gMDsKKyAg ICB9CisgICAgZGVidWcoRjEwMSwibnh0ZGlyIGZ1bmNsZW4iLCIiLGZ1bmNsZW4pOworCisgICAg aWYgKGZ1bmNueHQgPCBmdW5jbGVuKSB7CQkvKiBJZiB3ZSBoYXZlIGRhdGEgdG8gc2VuZC4uLiAq LworCWMgPSBmdW5jYnVmW2Z1bmNueHQrK107CisJZGVidWcoRjAwMCwibnh0ZGlyIHJldHVybiAy IiwiIiwodW5zaWduZWQpKGMgJiAweGZmKSk7CisJcmV0dXJuKCh1bnNpZ25lZCkoYyAmIDB4ZmYp KTsKKyAgICB9IGVsc2UKKyAgICAgIHJldHVybigtMSk7CQkJLyogTm90aGluZyBsZWZ0LCBkb25l LiAqLworfQorCisvKiAgUyBOIEQgRCBJIFIgLS0gc2VuZCBkaXJlY3RvcnkgbGlzdGluZyAgKi8K KworaW50CitzbmRkaXIoc3BlYykgY2hhciAqIHNwZWM7IHsKKyNpZm5kZWYgTk9TRVJWRVIKKyAg ICBjaGFyICogcCA9IE5VTEwsIG5hbWVbQ0tNQVhQQVRIKzFdOworICAgIGludCB0ID0gMCwgcmMg PSAwOworICAgIGNoYXIgZm5idWZbQ0tNQVhQQVRIKzFdOworCisgICAgZGVidWcoRjExMSwic25k ZGlyIG1hdGNoZG90IixzcGVjLG1hdGNoZG90KTsKKworI2lmbmRlZiBOT0lDUAorICAgIGRlYnVn KEYxMTEsInNuZGRpciBkaXJfZG90cyIsc3BlYyxkaXJfZG90cyk7CisgICAgc2RfaGRnID0gZGly X2hlYWQgPiAwOwkJLyogSW1wb3J0IGxpc3RpbmcgcGFyYW1ldGVycyBpZiBhbnkgKi8KKyAgICBz ZF9ia3AgPSBkaXJfYmFjayA+IDA7CisgICAgaWYgKGRpcl9kb3RzID4gLTEpCisgICAgICBzZF9k b3QgPSBkaXJfZG90czsKKyAgICBlbHNlCisgICAgICBzZF9kb3QgPSBtYXRjaGRvdDsKKyNlbHNl CisgICAgc2RfaGRnID0gMTsJCQkJLyogT3IgdXNlIGhhcmR3aXJlZCBkZWZhdWx0cyAqLworICAg IHNkX2JrcCA9IDE7CisgICAgc2RfZG90ID0gbWF0Y2hkb3Q7CisjZW5kaWYgLyogTk9JQ1AgKi8K KworICAgIGlmICghc3BlYykgc3BlYyA9ICIiOworICAgIGRlYnVnKEYxMTEsInNuZGRpciBzZF9k b3QiLHNwZWMsc2RfZG90KTsKKyAgICBpZiAoKnNwZWMpIHsKKyNpZmRlZiBDT01NRU5UCisJemZu cWZwKHNwZWMsQ0tNQVhQQVRILG5hbWUpOworCWRlYnVnKEYxMTAsInNuZGRpciB6Zm5xZnAiLG5h bWUsMCk7CisjZWxzZQorCWNrc3RybmNweShuYW1lLHNwZWMsQ0tNQVhQQVRIKzEpOworCWRlYnVn KEYxMTAsInNuZGRpciBuYW1lIixuYW1lLDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9 IGVsc2UgeworI2lmZGVmIE9TMgorCXN0cmNweShuYW1lLCAiKiIpOworI2Vsc2UKKyNpZmRlZiBV TklYT1JPU0sKKwlzdHJjcHkobmFtZSwgIi4vKiIpOworI2Vsc2UKKyNpZmRlZiBWTVMKKwlzdHJj cHkobmFtZSwgIiouKiIpOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorCXN0cmNweShuYW1l LCAiKyIpOworI2Vsc2UKKwlkZWJ1ZyhGMTAxLCJzbmRkaXIgcXVpdCAobm8gZmlsZXNwZWMpIiwi IiwwKTsKKwlyZXR1cm4oMCk7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCisgICAgfQorICAgIGRl YnVnKEYxMTAsInNuZGRpciBuYW1lIDEiLG5hbWUsMCk7CisgICAgbmRpcnMgPSAwTDsKKyAgICBu ZmlsZXMgPSAwTDsKKyAgICBuYnl0ZXMgPSAoQ0tfT0ZGX1QpMDsKKworICAgIGlmICh6Zm5xZnAo bmFtZSxDS01BWFBBVEgsZm5idWYpKQorCisgICAgZGVidWcoRjExMCwic25kZGlyIG5hbWUgMiIs bmFtZSwwKTsKKyAgICBwID0gbmFtZSArIHN0cmxlbihuYW1lKTsJCS8qIE1vdmUgaXQgdG8gZW5k IG9mIGxpc3QgKi8KKworICAgIC8qIHNwcmludGYgc2FmZSBiZWNhdXNlIGZ1bmNidWYgc2l6ZSA+ PSBtYXggcGF0aCBsZW4gKyA2NCAqLworCisgICAgaWYgKHNkX2hkZykgeworCXNwcmludGYoKGNo YXIgKilmdW5jYnVmLCJMaXN0aW5nIGZpbGVzOiAlcyVzJXMiLGZuYnVmLGVuZGxpbmUsZW5kbGlu ZSk7CisJZnVuY254dCA9IDA7CisJZnVuY2xlbiA9IHN0cmxlbigoY2hhciAqKWZ1bmNidWYpOwor ICAgIH0KKyAgICBkaXJhY3RpdmUgPSAxOworCisjaWZkZWYgT1MyCisgICAgaWYgKHpjaGtpKG5h bWUpID09IC0yKSB7CQkvKiBGb3VuZCBhIGRpcmVjdG9yeSAqLworICAgICAgICBwLS07CisgICAg ICAgIGlmICgqcCA9PSAnXFwnIHx8ICpwID09ICcvJykKKyAgICAgICAgICBja3N0cm5jYXQobmFt ZSwgIioiLCBDS01BWFBBVEgpOworICAgICAgICBlbHNlIGlmICgqcCA9PSAnOicpCisgICAgICAg ICAgY2tzdHJuY2F0KG5hbWUsICIuIiwgQ0tNQVhQQVRIKTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgIGNrc3RybmNhdChuYW1lLCAiXFwqIiwgQ0tNQVhQQVRIKTsKKwlkZWJ1ZyhGMTEwLCJzbmRk aXIgZGlyZWN0b3J5IixuYW1lLDApOworICAgIH0KKyNlbHNlCisgICAgaWYgKCFpc3dpbGQobmFt ZSkgJiYgaXNkaXIobmFtZSkpIHsKKwljaGFyICogcyA9IG5hbWU7CisJcC0tOworI2lmZGVmIFVO SVhPUk9TSworCWlmICgqcCA9PSAnLycpCQkJLyogU28gYXBwZW5kIHdpbGRjYXJkIHRvIGl0ICov CisJICBja3N0cm5jYXQocywgIioiLCBDS01BWFBBVEgpOworCWVsc2UKKwkgIGNrc3RybmNhdChz LCAiLyoiLCBDS01BWFBBVEgpOworI2Vsc2UKKyNpZmRlZiBWTVMKKwlpZiAoKnAgPT0gJ10nIHx8 ICpwID09ICc+JyB8fCAqcCA9PSAnOicpCisJICBja3N0cm5jYXQocywgIiouKiIsIENLTUFYUEFU SCk7CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisJaWYgKCpwID09ICc6JykKKwkgIGNrc3Ry bmNhdChzLCAiKyIsIENLTUFYUEFUSCk7CisJZWxzZQorCSAgY2tzdHJuY2F0KHMsICI6KyIsIENL TUFYUEFUSCk7CisjZWxzZQorI2lmZGVmIFZPUworCWlmICgqcCA9PSAnPicpCisJICBja3N0cm5j YXQocywgIioiLCBDS01BWFBBVEgpOworCWVsc2UKKwkgIGNrc3RybmNhdChzLCAiPioiLCBDS01B WFBBVEgpOworI2VuZGlmIC8qIFZPUyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5k aWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisJZGVidWcoRjExMCwic25kZGly IGRpcmVjdG9yeSIsbmFtZSwwKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyAgICBuenhv cHRzID0gMDsKKyNpZmRlZiBVTklYCisgICAgeworCWV4dGVybiBjaGFyICoqIG10Y2hzOworCWRl YnVnKEYxMTEsInNuZGRpciBzZF9kb3QiLHNwZWMsc2RfZG90KTsKKwlpZiAoc2RfZG90ID4gMCkK KwkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7CisJaWYgKHJlY3Vyc2l2ZSkKKwkgIG56eG9wdHMg fD0gWlhfUkVDVVJTRTsKKwlkZWJ1ZyhGMTExLCJzbmRkaXIgbnp4b3B0cyIsc3BlYyxuenhvcHRz KTsKKwlueHBuZCA9IG56eHBhbmQobmFtZSxuenhvcHRzKTsJLyogR2V0IHRoZSBhcnJheSBvZiBu YW1lcyAqLworCXNoX3NvcnQobXRjaHMsTlVMTCxueHBuZCwwLDAsMSk7IC8qIFNvcnQgdGhlIGFy cmF5ICovCisgICAgfQorI2Vsc2UKKyAgICBpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JF Q1VSU0U7CisgICAgbnhwbmQgPSBuenhwYW5kKG5hbWUsbnp4b3B0cyk7CisjZW5kaWYgLyogVU5J WCAqLworCisgICAgZGVidWcoRjEwMSwic25kZGlyIG56eHBhbmQgbnhwbmQiLCIiLG54cG5kKTsK KyAgICBpZiAobnhwbmQgPCAxKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBuZmlscyA9IDA7CQkJ CS8qIE5vIGZpbGVzLCBubyBsaXN0cy4gKi8KKyAgICB4ZmxnID0gMTsJCQkJLyogRmxhZyB3ZSBt dXN0IHNlbmQgWCBwYWNrZXQuICovCisgICAgaWYgKChpbnQpc3RybGVuKG5hbWUpIDwgQ01EU1RS TCAtIDExKSAvKiBEYXRhIGZvciBYIHBhY2tldC4gKi8KKyAgICAgIHNwcmludGYoY21kc3RyLCJE SVJFQ1RPUlkgJXMiLG5hbWUpOyAvKiBzYWZlICovCisgICAgZWxzZQorICAgICAgY2tzdHJuY3B5 KGNtZHN0ciwiRElSRUNUT1JZIixDTURTVFJMKTsKKyAgICBmaXJzdCA9IDE7CQkJCS8qIEluaXQg Z2V0Y2h4IGxvb2thaGVhZCAqLworICAgIGZ1bmNzdHIgPSAxOwkJCS8qIEp1c3Qgc2V0IHRoZSBm bGFnLiAqLworICAgIGZ1bmNwdHIgPSBueHRkaXI7CQkJLyogQW5kIHRoZSBwb2ludGVyLiAqLwor ICAgIGJpbmFyeSA9IFhZRlRfVDsJCQkvKiBUZXh0IG1vZGUgZm9yIHRoaXMgKi8KKyAgICByYyA9 IHNpbml0KCk7CQkJLyogMjYgQXVnIDIwMDUgKi8KKyAgICBkZWJ1ZyhGMTExLCJzbmRkaXIiLCJz aW5pdCgpIixyYyk7CisgICAgcmV0dXJuKHJjKTsKKyNlbHNlCisgICAgcmV0dXJuKDApOworI2Vu ZGlmIC8qIE5PU0VSVkVSICovCit9CisKKy8qICBOIFggVCBEIEUgTCAtLSBwcm92aWRlIGRhdGEg Zm9yIGRlbGV0ZSAgICovCisKKy8qICBSZXR1cm5zIHRoZSBuZXh0IGF2YWlsYWJsZSBjaGFyYWN0 ZXIgb3IgLTEgaWYgbm8gbW9yZSBkYXRhICAqLworCitzdGF0aWMgaW50CitueHRkZWwoCisjaWZk ZWYgQ0tfQU5TSUMKKyAgICAgICB2b2lkCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICAgICAp IHsKKyAgICBjaGFyIG5hbWVbMjU3XSwgKnAgPSBOVUxMOworICAgIGludCBsZW4gPSAwOworCisg ICAgaWYgKGZ1bmNueHQgPCBmdW5jbGVuKQorICAgICAgcmV0dXJuICgodW5zaWduZWQpZnVuY2J1 ZltmdW5jbnh0KytdKTsKKworICAgIGlmIChueHBuZCA+IDApIHsKKyAgICAgICAgbnhwbmQtLTsK Kwl6bmV4dChuYW1lKTsKKyAgICAgICAgaWYgKCFuYW1lWzBdKSB7CisgICAgICAgICAgICBueHBu ZCA9IDA7CisgICAgICAgICAgICByZXR1cm4obnh0ZGVsKCkpOworICAgICAgICB9CisgICAgICAg IGxlbiA9IHpjaGtpKG5hbWUpOworCisgICAgICAgIC8qIEZpbmQganVzdCB0aGUgbmFtZSBvZiB0 aGUgZmlsZSAqLworCisgICAgICAgIGZvciAocCA9IG5hbWUgKyBzdHJsZW4obmFtZSk7IHAgIT0g bmFtZSAmJiAqcCAhPSAnLycgOyBwLS0pIDsKKyAgICAgICAgaWYgKCpwID09ICcvJykgcCsrOwor CisJLyogc3ByaW50ZidzIHNhZmUgYmVjYXVzZSBzaXplIG9mIGZ1bmNidWYgPj0gNjQgKyBtYXhw YXRobGVuICovCisKKyAgICAgICAgaWYgKGxlbiA+IC0xTCkgeworCSAgICBpZiAoemRlbGV0KG5h bWUpKSB7CisJCXNwcmludGYoKGNoYXIgKilmdW5jYnVmLCIgJTEwczogJXMlcyIsInNraXBwaW5n IixwLGVuZGxpbmUpOworCSAgICB9IGVsc2UgeworCQluZmlsZXMrKzsKKwkJbmJ5dGVzICs9IGxl bjsKKwkJc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIiAlMTBzOiAlcyVzIiwiZGVsZXRlZCIscCxl bmRsaW5lKTsKKwkgICAgfQorICAgICAgICB9IGVsc2UKKwkgIHNwcmludGYoKGNoYXIgKilmdW5j YnVmLCIgZGlyZWN0b3J5OiAlcyVzIiwgcCwgZW5kbGluZSk7CisgICAgICAgIGZ1bmNueHQgPSAw OworICAgICAgICBmdW5jbGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1Zik7CisgICAgfSBlbHNl CisKKyAgICAvKiBJZiBkb25lIHByb2Nlc3NpbmcgdGhlIGV4cGFuZGVkIGVudHJpZXMgc2VuZCBh IHN1bW1hcnkgc3RhdGVtZW50ICovCisKKyAgICAgIGlmIChueHBuZCA9PSAwKSB7CisJICBzcHJp bnRmKChjaGFyICopZnVuY2J1ZiwKKwkJICAiJXMlbGQgZmlsZSVzIGRlbGV0ZWQsICVzIGJ5dGUl cyBmcmVlZCVzIiwKKwkJICBlbmRsaW5lLAorCQkgIG5maWxlcywKKwkJICAobmZpbGVzID09IDEp ID8gIiIgOiAicyIsCisJCSAgY2tmc3RvYShuYnl0ZXMpLAorCQkgIChuYnl0ZXMgPT0gKENLX09G Rl9UKTEpID8gIiIgOiAicyIsCisJCSAgZW5kbGluZQorCQkgICk7CisJICBueHBuZC0tOworCSAg ZnVuY254dCA9IDA7CisJICBmdW5jbGVuID0gc3RybGVuKChjaGFyICopZnVuY2J1Zik7CisgICAg ICB9IGVsc2UgeworCSAgZnVuY2J1ZlswXSA9ICdcMCc7CisJICBmdW5jbnh0ID0gMDsKKwkgIGZ1 bmNsZW4gPSAwOworICAgICAgfQorCisgICAgLyogSWYgd2UgaGF2ZSBkYXRhIHRvIHNlbmQgKi8K KworICAgIGlmIChmdW5jbnh0IDwgZnVuY2xlbikKKyAgICAgIHJldHVybiAoKHVuc2lnbmVkKWZ1 bmNidWZbZnVuY254dCsrXSk7IC8qIFJldHVybiBhIGNoYXJhY3RlciAqLworICAgIGVsc2UKKyAg ICAgIHJldHVybigtMSk7CQkJLyogTm8gbW9yZSBpbnB1dCAqLworfQorCisvKiAgUyBOIEQgRCBF IEwgIC0tICBTZW5kIGRlbGV0ZSBtZXNzYWdlICAqLworCitpbnQKK3NuZGRlbChzcGVjKSBjaGFy ICogc3BlYzsgeworI2lmbmRlZiBOT1NFUlZFUgorICAgIGNoYXIgbmFtZVtDS01BWFBBVEgrMV07 CisjaWZkZWYgT1MyCisgICAgY2hhciAqIHAgPSBOVUxMOworI2VuZGlmIC8qICNpZmRlZiBPUzIg Ki8KKworICAgIGlmICghKnNwZWMpCisgICAgICByZXR1cm4oMCk7CisKKyAgICBja3N0cm5jcHko bmFtZSwgc3BlYywgQ0tNQVhQQVRIKzEpOworCisjaWZkZWYgT1MyCisgICAgLyogY2hhbmdlIC8g dG8gXC4gKi8KKyAgICBwID0gbmFtZTsKKyAgICB3aGlsZSAoKnApIHsJCQkvKiBDaGFuZ2UgdGhl bSBiYWNrIHRvIFwgKi8KKyAgICAgICAgaWYgKCpwID09ICcvJykgKnAgPSAnXFwnOworICAgICAg ICBwKys7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisgICAgbmZpbGVzID0gMEw7CisgICAg bmJ5dGVzID0gKENLX09GRl9UKTA7CisgICAgc3ByaW50ZigoY2hhciAqKWZ1bmNidWYsIkRlbGV0 aW5nIFwiJXNcIiVzIixuYW1lLGVuZGxpbmUpOworICAgIGZ1bmNueHQgPSAwOworICAgIGZ1bmNs ZW4gPSBzdHJsZW4oKGNoYXIgKilmdW5jYnVmKTsKKworICAgIG56eG9wdHMgPSBaWF9GSUxPTkxZ OwkJLyogRmlsZXMgb25seSAqLworI2lmZGVmIFVOSVhPUk9TSworICAgIGlmIChtYXRjaGRvdCkg bnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyNpZmRlZiBD T01NRU5UCisgICAgLyogUmVjdXJzaXZlIGRlbGV0aW5nIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisg ICAgaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICBueHBuZCA9IG56eHBhbmQobmFtZSxuenhvcHRzKTsKKyAgICBpZiAobnhwbmQg PCAxKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBuZmlscyA9IDA7CQkJCS8qIE5vIGZpbGVzLCBu byBsaXN0cy4gKi8KKyAgICB4ZmxnID0gMTsJCQkJLyogRmxhZyB3ZSBtdXN0IHNlbmQgWCBwYWNr ZXQuICovCisgICAgY2tzdHJuY3B5KGNtZHN0ciwiUkVNT1RFIERFTEVURSIsQ01EU1RSTCk7IC8q IERhdGEgZm9yIFggcGFja2V0LiAqLworICAgIGZpcnN0ID0gMTsJCQkJLyogSW5pdCBnZXRjaHgg bG9va2FoZWFkICovCisgICAgZnVuY3N0ciA9IDE7CQkJLyogSnVzdCBzZXQgdGhlIGZsYWcuICov CisgICAgZnVuY3B0ciA9IG54dGRlbDsJCQkvKiBBbmQgdGhlIHBvaW50ZXIuICovCisgICAgYmlu YXJ5ID0gWFlGVF9UOwkJCS8qIFVzZSB0ZXh0IG1vZGUgZm9yIHRoaXMsICovCisgICAgcmV0dXJu KHNpbml0KCkpOworI2Vsc2UKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8K K30KKworI2lmZGVmIE9TMgorLyogIFMgTiBEIFMgUCBBIEMgRSAtLSBzZW5kIGRpc2sgc3BhY2Ug bWVzc2FnZSAgKi8KK2ludAorc25kc3BhY2UoZHJpdmUpIGludCBkcml2ZTsgeworI2lmbmRlZiBO T1NFUlZFUgorICAgIHN0YXRpYyBjaGFyIHNwY3RleHRbNjRdOworICAgIHVuc2lnbmVkIGxvbmcg c3BhY2U7CisKKyAgICBpZiAoZHJpdmUpIHsKKwlzcGFjZSA9IHpkc2tzcGFjZShkcml2ZSAtICdB JyArIDEpOworCWlmIChzcGFjZSA+IDAgJiYgc3BhY2UgPCAxMDI0KQorCSAgc3ByaW50ZihzcGN0 ZXh0LAorCQkgICIgRHJpdmUgJWM6IHVua25vd24lcyIsCisJCSAgZHJpdmUsCisJCSAgZW5kbGlu ZQorCQkgICk7CisJZWxzZQorCSAgc3ByaW50ZihzcGN0ZXh0LAorCQkgICIgRHJpdmUgJWM6ICVs ZEsgZnJlZSVzIiwKKwkJICBkcml2ZSwKKwkJICBzcGFjZSAvIDEwMjRMLAorCQkgIGVuZGxpbmUK KwkJICApOworICAgIH0gZWxzZSB7CisJc3BhY2UgPSB6ZHNrc3BhY2UoMCk7CisJaWYgKHNwYWNl ID4gMCAmJiBzcGFjZSA8IDEwMjQpCisJICBzcHJpbnRmKHNwY3RleHQsICIgRnJlZSBzcGFjZTog dW5rbm93biVzIiwgZW5kbGluZSk7CisJZWxzZQorCSAgc3ByaW50ZihzcGN0ZXh0LCAiIEZyZWUg c3BhY2U6ICVsZEslcyIsIHNwYWNlIC8gMTAyNEwsIGVuZGxpbmUpOworICAgIH0KKyAgICBuZmls cyA9IDA7CQkJCS8qIE5vIGZpbGVzLCBubyBsaXN0cy4gKi8KKyAgICB4ZmxnID0gMTsJCQkJLyog RmxhZyB3ZSBtdXN0IHNlbmQgWCBwYWNrZXQuICovCisgICAgY2tzdHJuY3B5KGNtZHN0ciwiZnJl ZSBzcGFjZSIsQ01EU1RSTCk7IC8qIERhdGEgZm9yIFggcGFja2V0LiAqLworICAgIGZpcnN0ID0g MTsJCQkJLyogSW5pdCBnZXRjaHggbG9va2FoZWFkICovCisgICAgbWVtc3RyID0gMTsJCQkJLyog SnVzdCBzZXQgdGhlIGZsYWcuICovCisgICAgbWVtcHRyID0gc3BjdGV4dDsJCQkvKiBBbmQgdGhl IHBvaW50ZXIuICovCisgICAgYmluYXJ5ID0gWFlGVF9UOwkJCS8qIFRleHQgbW9kZSBmb3IgdGhp cy4gKi8KKyAgICByZXR1cm4oc2luaXQoKSk7CisjZWxzZQorICAgIHJldHVybigwKTsKKyNlbmRp ZiAvKiBOT1NFUlZFUiAqLworfQorCisvKiAgUyBOIEQgVyBIIE8gLS0gc2VuZCB3aG8gbWVzc2Fn ZSAgKi8KK2ludAorc25kd2hvKHdobykgY2hhciAqIHdobzsgeworI2lmbmRlZiBOT1NFUlZFUgor ICAgIG5maWxzID0gMDsJCQkJLyogTm8gZmlsZXMsIG5vIGxpc3RzLiAqLworICAgIHhmbGcgPSAx OwkJCQkvKiBGbGFnIHdlIG11c3Qgc2VuZCBYIHBhY2tldC4gKi8KKyAgICBja3N0cm5jcHkoY21k c3RyLCJ3aG8iLENNRFNUUkwpOwkvKiBEYXRhIGZvciBYIHBhY2tldC4gKi8KKyAgICBmaXJzdCA9 IDE7CQkJCS8qIEluaXQgZ2V0Y2h4IGxvb2thaGVhZCAqLworICAgIG1lbXN0ciA9IDE7CQkJCS8q IEp1c3Qgc2V0IHRoZSBmbGFnLiAqLworI2lmZGVmIE5UCisgICAgbWVtcHRyID0gIlwxNVwxMks5 NSBTRVJWRVJcMTVcMTIiOwkvKiBBbmQgdGhlIHBvaW50ZXIuICovCisjZWxzZQorICAgIG1lbXB0 ciA9ICJcMTVcMTJLLzIgU0VSVkVSXDE1XDEyIjsKKyNlbmRpZiAvKiBOVCAqLworICAgIGJpbmFy eSA9IFhZRlRfVDsJCQkvKiBVc2UgdGV4dCBtb2RlICovCisgICAgcmV0dXJuKHNpbml0KCkpOwor I2Vsc2UKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyNlbmRpZiAv KiBPUzIgKi8KKworLyogIEMgVyBEICAtLSAgQ2hhbmdlIHNlcnZlcidzIHdvcmtpbmcgZGlyZWN0 b3J5ICAqLworCisvKgorIFN0cmluZyBwYXNzZWQgaGFzIGZpcnN0IGJ5dGUgYXMgbGVuZ3RoIG9m IGRpcmVjdG9yeSBuYW1lLCByZXN0IG9mIHN0cmluZworIGlzIG5hbWUuICBSZXR1cm5zOgorICAw IG9uIGZhaWx1cmUuCisgIDEgb24gc3VjY2VzcyBhZnRlciBzZW5kaW5nIHNob3J0LWZvcm0gcmVz cG9uc2UgKEFDSyB3aXRoIG5hbWUpLgorICAyIG9uIHN1Y2Nlc3MgaWYgYSBDRCBNZXNzYWdlIGZp bGUgaXMgdG8gYmUgc2VudC4KKyovCitpbnQKK2N3ZCh2ZGlyKSBjaGFyICp2ZGlyOyB7CisgICAg Y2hhciAqY2RkLCAqZGlycDsKKworICAgIHZkaXJbeHVuY2hhcigqdmRpcikgKyAxXSA9ICdcMCc7 CS8qIFRlcm1pbmF0ZSBzdHJpbmcgd2l0aCBhIG51bGwgKi8KKyAgICBkaXJwID0gdmRpcisxOwor ICAgIHRsb2coRjExMCwiRGlyZWN0b3J5IHJlcXVlc3RlZDogIixkaXJwLDBMKTsKKyAgICBpZiAo emNoZGlyKGRpcnApKSB7CQkJLyogVHJ5IHRvIGNoYW5nZSAqLworCWNkZCA9IHpndGRpcigpOwkJ CS8qIEdldCBuZXcgd29ya2luZyBkaXJlY3RvcnkuICovCisJZGVidWcoRjExMCwiY3dkIixjZGQs MCk7CisJaWYgKHNydmNkbXNnKSB7CQkJLyogU2VuZCBvcmllbnRhdGlvbiBmaWxlPyAqLworCSAg ICBpbnQgaTsKKwkgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoemNoa2koY2Rt c2dmaWxlW2ldKSA+IC0xKSB7CisJCSAgICB4eHNjcmVlbihTQ1JfQ0QsMCwwbCxjZGQpOworCQkg ICAgdGxvZyhGMTEwLCJDaGFuZ2VkIGRpcmVjdG9yeSB0byIsY2RkLDBMKTsKKwkJICAgIHJldHVy bigyKTsKKwkJfQorCSAgICB9CisJfQorCWVuY3N0cigoQ0hBUiAqKWNkZCk7CQkvKiBTZW5kIHNo b3J0LWZvcm0gcmVwbHkgKi8KKwlhY2sxKGRhdGEpOwkJCS8qIGNvbnRhaW5pbmcgZGlyZWN0b3J5 IG5hbWUuICovCisJeHhzY3JlZW4oU0NSX0NELDAsMGwsY2RkKTsKKwl0bG9nKEYxMTAsIkNoYW5n ZWQgZGlyZWN0b3J5IHRvIixjZGQsMEwpOworCXJldHVybigxKTsKKyAgICB9IGVsc2UgeworCWRl YnVnKEYxMTAsImN3ZCBmYWlsZWQiLGRpcnAsMCk7CisJdGxvZyhGMTEwLCJGYWlsZWQgdG8gY2hh bmdlIGRpcmVjdG9yeSB0byIsZGlycCwwTCk7CisJcmV0dXJuKDApOworICAgIH0KK30KKworCisv KiAgUyBZIFMgQyBNIEQgIC0tICBEbyBhIHN5c3RlbSBjb21tYW5kICAqLworCisvKiAgQ29tbWFu ZCBzdHJpbmcgaXMgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIHR3byBhcmd1bWVudHMuICAq LworCitpbnQKK3N5c2NtZChwcmVmaXgsc3VmZml4KSBjaGFyICpwcmVmaXgsICpzdWZmaXg7IHsK KyAgICBleHRlcm4gaW50IGlfaXNvcGVuOworI2lmbmRlZiBOT1BVU0gKKyAgICBjaGFyICpjcDsK KworICAgIGlfaXNvcGVuID0gMDsKKyAgICBpZiAoIXByZWZpeCkKKyAgICAgIHJldHVybigwKTsK KyAgICBpZiAoISpwcmVmaXgpCisgICAgICByZXR1cm4oMCk7CisgICAgZm9yIChjcCA9IGNtZHN0 cjsgKnByZWZpeCAhPSAnXDAnOyAoKmNwKysgPSAqcHJlZml4KyspKTsKKyAgICB3aGlsZSAoKCpj cCsrID0gKnN1ZmZpeCsrKSkKKyNpZmRlZiBPUzIKKyAgICAgICAgLyogVGhpcyB0YWtlcyBhd2F5 IG1vcmUgdGhhbiB3ZSBnYWluIGluIGNvbnZlbmllbmNlCisgICAgICAgIGlmICgqKGNwLTEpID09 ICcvJykgKihjcC0xKSA9ICdcXCcgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgIDsJCQkJCS8q IENvcHkgc3VmZml4ICovCisKKyAgICBkZWJ1ZyhGMTEwLCJzeXNjbWQiLGNtZHN0ciwwKTsKKwor ICAgIGlmICh6eGNtZChaSUZJTEUsY21kc3RyKSA+IDApIHsKKyAgICAJZGVidWcoRjExMCwic3lz Y21kIHp4Y21kIG9rIixjbWRzdHIsMCk7CisJbmZpbHMgPSBzbmRzcmMgPSAwOwkJLyogRmxhZyB0 aGF0IGlucHV0IGlzIGZyb20gc3RkaW4gKi8KKyAgICAJeGZsZyA9IGhjZmxnID0gMTsJCS8qIEFu ZCBzcGVjaWFsIGZsYWdzIGZvciBwaXBlICovCisJYmluYXJ5ID0gWFlGVF9UOwkJLyogR28gdG8g dGV4dCBtb2RlICovCisJaV9pc29wZW4gPSAxOworICAgIAlyZXR1cm4gKHNpbml0KCkpOwkJLyog U2VuZCBTIHBhY2tldCAqLworICAgIH0gZWxzZSB7CisgICAgCWRlYnVnKEYxMDAsInN5c2NtZCB6 eGNtZCBmYWlsZWQiLGNtZHN0ciwwKTsKKwlpX2lzb3BlbiA9IDA7CisgICAgCXJldHVybigwKTsK KyAgICB9CisjZWxzZQorICAgIGRlYnVnKEYxMDAsInN5c2NtZCB6eGNtZCBOT1BVU0giLGNtZHN0 ciwwKTsKKyAgICBpX2lzb3BlbiA9IDA7CisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE5PUFVT SCAqLworfQorCisvKiAgUiBFIE0gUyBFIFQgIC0tICBSZW1vdGUgU2V0ICAqLworLyogIENhbGxl ZCBieSBzZXJ2ZXIgdG8gc2V0IHZhcmlhYmxlcyBhcyBjb21tYW5kZWQgaW4gUkVNT1RFIFNFVCBw YWNrZXRzLiAgKi8KKy8qICBSZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLiAgKi8K KworaW50CityZW1zZXQocykgY2hhciAqczsgeworICAgIGV4dGVybiBpbnQgY19zYXZlLCBlbl9k ZWw7CisgICAgaW50IGxlbiwgaSwgeCwgeTsKKyAgICBjaGFyICpwOworCisgICAgbGVuID0geHVu Y2hhcigqcysrKTsJCS8qIExlbmd0aCBvZiBmaXJzdCBmaWVsZCAqLworICAgIHAgPSBzICsgbGVu OwkJCS8qIFBvaW50ZXIgdG8gc2Vjb25kIGxlbmd0aCBmaWVsZCAqLworICAgICpwKysgPSAnXDAn OwkJCS8qIFplcm8gb3V0IHNlY29uZCBsZW5ndGggZmllbGQgKi8KKyAgICB4ID0gYXRvaShzKTsJ CQkvKiBWYWx1ZSBvZiBmaXJzdCBmaWVsZCAqLworICAgIGRlYnVnKEYxMTEsInJlbXNldCIscyx4 KTsKKyAgICBkZWJ1ZyhGMTEwLCJyZW1zZXQiLHAsMCk7CisgICAgc3dpdGNoICh4KSB7CQkJLyog RG8gdGhlIHJpZ2h0IHRoaW5nICovCisgICAgICBjYXNlIDEzMjoJCQkJLyogQXR0cmlidXRlcyAo YWxsLCBpbikgKi8KKwlhdGNhcHIgPSBhdG9pKHApOworCXJldHVybigxKTsKKyAgICAgIGNhc2Ug MTMzOgkJCQkvKiBGaWxlIGxlbmd0aCBhdHRyaWJ1dGVzICovCisgICAgICBjYXNlIDIzMzoJCQkJ LyogSU4vT1VUIGNvbWJpbmVkICovCisgICAgICBjYXNlIDE0ODoJCQkJLyogQm90aCBraW5kcyBv ZiBsZW5ndGhzICovCisgICAgICBjYXNlIDI0ODoKKwlhdGxlbmkgPSBhdGxlbm8gPSBhdG9pKHAp OworCXJldHVybigxKTsKKyAgICAgIGNhc2UgMTM0OgkJCQkvKiBGaWxlIFR5cGUgKHRleHQvYmlu YXJ5KSAqLworICAgICAgY2FzZSAyMzQ6CisJYXR0eXBpID0gYXR0eXBvID0gYXRvaShwKTsKKwly ZXR1cm4oMSk7CisgICAgICBjYXNlIDEzNToJCQkJLyogRmlsZSBjcmVhdGlvbiBkYXRlICovCisg ICAgICBjYXNlIDIzNToKKwlhdGRhdGkgPSBhdGRhdG8gPSBhdG9pKHApOworCXJldHVybigxKTsK KyAgICAgIGNhc2UgMTM5OgkJCQkvKiBGaWxlIEJsb2Nrc2l6ZSAqLworICAgICAgY2FzZSAyMzk6 CisJYXRibGtpID0gYXRibGtvID0gYXRvaShwKTsKKwlyZXR1cm4oMSk7CisgICAgICBjYXNlIDE0 MToJCQkJLyogRW5jb2RpbmcgLyBDaGFyYWN0ZXIgU2V0ICovCisgICAgICBjYXNlIDI0MToKKwlh dGVuY2kgPSBhdGVuY28gPSBhdG9pKHApOworCXJldHVybigxKTsKKyAgICAgIGNhc2UgMTQyOgkJ CQkvKiBEaXNwb3NpdGlvbiAqLworICAgICAgY2FzZSAyNDI6CisJYXRkaXNpID0gYXRkaXNvID0g YXRvaShwKTsKKwlyZXR1cm4oMSk7CisgICAgICBjYXNlIDE0NToJCQkJLyogU3lzdGVtIElEICov CisgICAgICBjYXNlIDI0NToKKwlhdHNpZGkgPSBhdHNpZG8gPSBhdG9pKHApOworCXJldHVybigx KTsKKyAgICAgIGNhc2UgMTQ3OgkJCQkvKiBTeXN0ZW0tRGVwZW5kZW50IEluZm8gKi8KKyAgICAg IGNhc2UgMjQ3OgorCWF0c3lzaSA9IGF0c3lzbyA9IGF0b2kocCk7CisJcmV0dXJuKDEpOworICAg ICAgY2FzZSAyMzI6CQkJCS8qIEF0dHJpYnV0ZXMgKGFsbCwgb3V0KSAqLworCWF0Y2FwciA9IGF0 b2kocCk7CisJcmV0dXJuKDEpOworICAgICAgY2FzZSAzMDA6CQkJCS8qIEZpbGUgdHlwZSAodGV4 dCwgYmluYXJ5KSAqLworCWJpbmFyeSA9IGF0b2kocCk7CisJYl9zYXZlID0gYmluYXJ5OworI2lm bmRlZiBOT0lDUAorCWdfYmluYXJ5ID0gLTE7CisjZW5kaWYgLyogTk9JQ1AgKi8KKwlyZXR1cm4o MSk7CisgICAgICBjYXNlIDMwMToJCQkJLyogRmlsZSBuYW1lIGNvbnZlcnNpb24gKi8KKwlmbmNu diA9IDEgLSBhdG9pKHApOwkJLyogKG9vcHMpICovCisJZl9zYXZlID0gZm5jbnY7CisjaWZuZGVm IE5PSUNQCisJZ19mbmNudiA9IC0xOworI2VuZGlmIC8qIE5PSUNQICovCisJcmV0dXJuKDEpOwor ICAgICAgY2FzZSAzMDI6CQkJCS8qIEZpbGUgbmFtZSBjb2xsaXNpb24gKi8KKyNpZmRlZiBJS1NE CisjaWZkZWYgQ0tfTE9HSU4KKwlpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkJLyogTWF5IG5vdCBi ZSBjaGFuZ2VkIGJ5IGd1ZXN0ICovCisJICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ0tfTE9HSU4g Ki8KKyNlbmRpZiAvKiBJS1NEICovCisJeCA9IGF0b2kocCk7CisJaWYgKCFFTkFCTEVEKGVuX2Rl bCkgJiYgKHggPT0gWFlGWF9YIHx8IHggPT0gWFlGWF9VKSkKKwkgIHJldHVybigwKTsKKwlpZiAo eCA9PSBYWUZYX1IpIGNrd2FybiA9IDE7CS8qIFJlbmFtZSAqLworCWlmICh4ID09IFhZRlhfWCkg Y2t3YXJuID0gMDsJLyogUmVwbGFjZSAqLworCWZuY2FjdCA9IHg7CisJcmV0dXJuKDEpOworICAg ICAgY2FzZSAzMTA6CQkJCS8qIEluY29tcGxldGUgRmlsZSBEaXNwb3NpdGlvbiAqLworCWtlZXAg PSBhdG9pKHApOwkJCS8qIEtlZXAsIERpc2NhcmQsIEF1dG8gKi8KKwlyZXR1cm4oMSk7CisgICAg ICBjYXNlIDMxMToJCQkJLyogQmxvY2tzaXplICovCisJZmJsa3NpeiA9IGF0b2kocCk7CisJcmV0 dXJuKDEpOworICAgICAgY2FzZSAzMTI6CQkJCS8qIFJlY29yZCBMZW5ndGggKi8KKwlmcmVjbCA9 IGF0b2kocCk7CisJcmV0dXJuKDEpOworICAgICAgY2FzZSAzMTM6CQkJCS8qIFJlY29yZCBmb3Jt YXQgKi8KKwlmcmVjZm0gPSBhdG9pKHApOworCXJldHVybigxKTsKKyAgICAgIGNhc2UgMzE0OgkJ CQkvKiBGaWxlIG9yZ2FuaXphdGlvbiAqLworCWZvcmcgPSBhdG9pKHApOworCXJldHVybigxKTsK KyAgICAgIGNhc2UgMzE1OgkJCQkvKiBGaWxlIGNhcnJpYWdlIGNvbnRyb2wgKi8KKwlmY2N0cmwg PSBhdG9pKHApOworCXJldHVybigxKTsKKyAgICAgIGNhc2UgMzMwOgkJCQkvKiBNYXRjaCBkb3Rm aWxlcyAqLworI2lmbmRlZiBOT0lDUAorCWRpcl9kb3RzID0gLTE7CQkJLyogVGhpcyB1bmRvZXMg RElSIC9ET1Qgb3B0aW9uICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKwltYXRjaGRvdCA9IGF0b2ko cCk7CisJcmV0dXJuKDEpOworICAgICAgY2FzZSAzMzE6CQkJCS8qIE1hdGNoIEZJRk9zICovCisJ bWF0Y2hmaWZvID0gYXRvaShwKTsKKwlyZXR1cm4oMSk7CisgICAgICBjYXNlIDQwMDoJCQkJLyog QmxvY2sgY2hlY2sgKi8KKwl5ID0gYXRvaShwKTsKKwlpZiAoeSA8IDUgJiYgeSA+IDApIHsKKwkg ICAgYmN0ciA9IHk7CisJICAgIGNfc2F2ZSA9IC0xOworCSAgICByZXR1cm4oMSk7CisJfSBlbHNl IGlmICgqcCA9PSAnQicpIHsKKwkgICAgYmN0ciA9IDQ7CisJICAgIGNfc2F2ZSA9IC0xOworCSAg ICByZXR1cm4oMSk7CisJfSBlbHNlIGlmICgqcCA9PSAnNScpIHsKKwkgICAgYmN0ciA9IDM7CisJ ICAgIGNfc2F2ZSA9IC0xOworCSAgICByZXR1cm4oMSk7CisJfQorCXJldHVybigwKTsKKyAgICAg IGNhc2UgNDAxOgkJCQkvKiBSZWNlaXZlIHBhY2tldC1sZW5ndGggKi8KKwlycHNpeiA9IHVycHNp eiA9IGF0b2kocCk7CisJaWYgKHVycHNpeiA+IE1BWFJQKSB1cnBzaXogPSBNQVhSUDsgLyogTWF4 IGxvbmctcGFja2V0IGxlbmd0aCAqLworCWlmIChycHNpeiA+IDk0KSBycHNpeiA9IDk0OwkgICAg LyogTWF4IHNob3J0LXBhY2tldCBsZW5ndGggKi8KKwl1cnBzaXogPSBhZGpwa2wodXJwc2l6LHdz bG90cyxiaWdyYnNpeik7CisJcmV0dXJuKDEpOworICAgICAgY2FzZSA0MDI6CQkJCS8qIFJlY2Vp dmUgdGltZW91dCAqLworCXkgPSBhdG9pKHApOwkJCS8qIENsaWVudCBpcyB0ZWxsaW5nIHVzICov CisJaWYgKHkgPiAtMSAmJiB5IDwgOTk5KSB7CS8qIHRoZSB0aW1lb3V0IHRoYXQgaXQgd2FudHMg Ki8KKwkgICAgcGt0dGltID0gY2hrdGltbyh5LHRpbWVmKTsJLyogdXMgdG8gdGVsbCBpdCB0byB1 c2UuICovCisJICAgIHJldHVybigxKTsKKwl9IGVsc2UgcmV0dXJuKDApOworICAgICAgY2FzZSA0 MDM6CQkJCS8qIFJldHJ5IGxpbWl0ICovCisJeSA9IGF0b2kocCk7CisJaWYgKHkgPiAtMSAmJiB5 IDwgOTUpIHsKKwkgICAgbWF4dHJ5ID0geTsKKwkgICAgcmV0dXJuKDEpOworCX0gZWxzZSByZXR1 cm4oMCk7CisgICAgICBjYXNlIDQwNDoJCQkJLyogU2VydmVyIHRpbWVvdXQgKi8KKwl5ID0gYXRv aShwKTsKKwlpZiAoeSA8IDApIHJldHVybigwKTsKKwlzcnZ0aW0gPSB5OworCXJldHVybigxKTsK KworI2lmbmRlZiBOT0NTRVRTCisgICAgICBjYXNlIDQwNTogewkJCQkvKiBUcmFuc2ZlciBjaGFy YWN0ZXIgc2V0ICovCisJICBleHRlcm4gaW50IHNfY3NldCwgYXhjc2V0W107CisJICBpbnQgaTsK KwkgIGZvciAoaSA9IDA7IGkgPCBudGNzZXRzOyBpKyspIHsKKwkgICAgICBpZiAoIXN0cmNtcCh0 Y3NpbmZvW2ldLmRlc2lnbmF0b3IscCkpIGJyZWFrOworCSAgfQorCSAgZGVidWcoRjEwMSwicmVt c2V0IHRjaGFyc2V0IGxvb2t1cCIsIiIsaSk7CisJICBpZiAoaSA9PSBudGNzZXRzKSByZXR1cm4o MCk7CisJICB0Y2hhcnNldCA9IHRjc2luZm9baV0uY29kZTsJLyogSWYga25vd24sIHVzZSBpdCAq LworCSAgZGVidWcoRjEwMSwicmVtc2V0IHRjaGFyc2V0IiwiIix0Y2hhcnNldCk7CisJICBpZiAo c19jc2V0ID09IFhNT0RFX0EpCisJICAgIGlmIChheGNzZXRbdGNoYXJzZXRdID4gLTEgJiYgYXhj c2V0W3RjaGFyc2V0XSA+IE1BWEZDU0VUUykKKwkgICAgICBmY2hhcnNldCA9IGF4Y3NldFt0Y2hh cnNldF07IC8qIEF1dG8tcGljayBmaWxlIGNoYXJzZXQgKi8KKwkgIGRlYnVnKEYxMDEsInJlbXNl dCB0Y2hhcnNldCBmY2hhcnNldCIsIiIsZmNoYXJzZXQpOworCSAgc2V0eGxhdHlwZSh0Y2hhcnNl dCxmY2hhcnNldCk7IC8qIFNldCB1cCBjaGFyc2V0IHRyYW5zbGF0aW9ucyAqLworCSAgZGVidWco RjEwMSwicmVtc2V0IHhsYXR5cGUiLCIiLHhsYXR5cGUpOworCSAgZGVidWcoRjEwMSwicmVtc2V0 IHRjaGFyc2V0IGFmdGVyIHNldHhsYXR5cGUiLCIiLHRjaGFyc2V0KTsKKwkgIHRjc19zYXZlID0g LTE7CisJICByZXR1cm4oMSk7CisgICAgICB9CisgICAgICBjYXNlIDMyMDogewkJCS8qIEZpbGUg Y2hhcmFjdGVyIHNldCAqLworCSAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZmNzdGFiW107CisJICBl eHRlcm4gaW50IG5maWxjLCBzX2NzZXQsIHJfY3NldDsKKwkgIHggPSBsb29rdXAoZmNzdGFiLHAs bmZpbGMsJnkpOworCSAgZGVidWcoRjExMSwiUlNFVCBGSUxFIENIQVIgbmFtZSIscCx4KTsKKwkg IGlmICh4IDwgMCkKKwkgICAgcmV0dXJuKDApOworCSAgc19jc2V0ID0gWE1PREVfTTsJCS8qIE5v IGF1dG9tYXRpYyBjaGFyc2V0IHN3aXRjaGluZyAqLworCSAgcl9jc2V0ID0gWE1PREVfTTsKKwkg IGZjaGFyc2V0ID0geDsJCQkvKiBTZXQgZmlsZSBjaGFyc2V0ICovCisJICBzZXR4bGF0eXBlKHRj aGFyc2V0LGZjaGFyc2V0KTsgLyogYW5kIHRyYW5zbGF0aW9uIHR5cGUgKi8KKwkgIGZjc19zYXZl ID0gLTE7CisJICByZXR1cm4oMSk7CisgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisg ICAgICBjYXNlIDQwNjoJCQkJLyogV2luZG93IHNsb3RzICovCisJeSA9IGF0b2kocCk7CisJaWYg KHkgPT0gMCkgeSA9IDE7CisJaWYgKHkgPCAxIHx8IHkgPiBNQVhXUykgcmV0dXJuKDApOworCXdz bG90ciA9IHk7CisJc3djYXByID0gMTsKKwl1cnBzaXogPSBhZGpwa2wodXJwc2l6LHdzbG90cixi aWdyYnNpeik7CisJcmV0dXJuKDEpOworCisgICAgICBjYXNlIDQxMDoJCQkJLyogVHJhbnNmZXIg bW9kZSAqLworCXkgPSBhdG9pKHApOwkJCS8qIDAgPSBhdXRvbWF0aWMsIG5vbnplcm8gPSBtYW51 YWwgKi8KKwlpZiAoeSAhPSAwKSB5ID0gMTsKKwl4ZmVybW9kZSA9IHk7CisJZGVidWcoRjEwMSwi UkVNT1RFIFNFVCB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOworCXJldHVybigxKTsKKworICAgICAg Y2FzZSA0MjA6CQkJCS8qIFNFUlZFUiBDRC1NRVNTQUdFIHsgT04sIE9GRiB9ICovCisJeSA9IGF0 b2kocCk7CQkJLyogMCA9IGF1dG9tYXRpYywgbm9uemVybyA9IG1hbnVhbCAqLworCXNydmNkbXNn ID0geTsKKwlyZXR1cm4oMSk7CisKKyAgICAgIGRlZmF1bHQ6CQkJCS8qIEFueXRoaW5nIGVsc2Uu Li4gKi8KKwlyZXR1cm4oMCk7CisgICAgfQorfQorCisvKiBBZGp1c3QgcGFja2V0IGxlbmd0aCBi YXNlZCBvbiBudW1iZXIgb2Ygd2luZG93IHNsb3RzIGFuZCBidWZmZXIgc2l6ZSAqLworCitpbnQK K2FkanBrbChwa3RsZW4sc2xvdHMsYnVmc2l6KSBpbnQgcGt0bGVuLCBzbG90cywgYnVmc2l6OyB7 CisgICAgaWYgKHByb3RvY29sICE9IFBST1RPX0spIHJldHVybihwa3RsZW4pOworICAgIGRlYnVn KEYxMDEsImFkanBrbCBsZW4iLCIiLHBrdGxlbik7CisgICAgZGVidWcoRjEwMSwiYWRqcGtsIHNs b3RzIiwiIixzbG90cyk7CisgICAgZGVidWcoRjEwMSwiYWRqcGtsIGJ1ZnNpeiIsIiIsYnVmc2l6 KTsKKyAgICBpZiAoKChwa3RsZW4gKyA2KSAqIHNsb3RzKSA+IGJ1ZnNpeikKKyAgICAgIHBrdGxl biA9IChidWZzaXogLyBzbG90cykgLSA2OworICAgIGRlYnVnKEYxMDEsImFkanBrbCBuZXcgbGVu IiwiIixwa3RsZW4pOworICAgIHJldHVybihwa3RsZW4pOworfQorCisvKiBTZXQgdHJhbnNmZXIg bW9kZSBhbmQgZmlsZSBuYW1pbmcgYmFzZWQgb24gY29tcGFyaXNvbiBvZiBzeXN0ZW0gdHlwZXMg Ki8KKworCitWT0lECit3aG9hcmV3ZSgpIHsKKyNpZm5kZWYgTk9JQ1AKKyAgICBleHRlcm4gaW50 IGdfeGZlcm1vZGU7CisjZW5kaWYgLyogTk9JQ1AgKi8KKworICAgIHdlYXJlYWxpa2UgPSAwOwor CisgICAgZGVidWcoRjEwMSwid2hvYXJld2UgeGZlcm1vZGUiLCIiLHhmZXJtb2RlKTsKKyNpZm5k ZWYgTk9JQ1AKKyAgICBkZWJ1ZyhGMTAxLCJ3aG9hcmV3ZSBnX3hmZXJtb2RlIiwiIixnX3hmZXJt b2RlKTsKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIGlmICh3aG9hcmV1WzBdKSB7CQkJLyogSWYg d2Uga25vdyBwYXJ0bmVyJ3Mgc3lzdGVtIHR5cGUgKi8KKwljaGFyICogcCA9IChjaGFyICopd2hv YXJldTsKKwlkZWJ1ZyhGMTEwLCJ3aG9hcmV3ZSByZW1vdGUgc3lzaWQiLHdob2FyZXUsMCk7CisJ aWYgKCFzdHJjbXAocCxja3N5c2lkKSkJCS8qIE90aGVyIHN5c3RlbSBzYW1lIGFzIHVzICovCisJ ICB3ZWFyZWFsaWtlID0gMTsKKworI2lmZGVmIFVOSVgKKwllbHNlIGlmICghc3RyY21wKHAsIkwz IikpCS8qIFVOSVggaXMgc29ydCBvZiBsaWtlIEFtaWdhRE9TICovCisJICB3ZWFyZWFsaWtlID0g MTsJCS8qIChzYW1lIGRpcmVjdG9yeSBzZXBhcmF0b3IpICovCisJZWxzZSBpZiAoIXN0cmNtcChw LCJOMyIpKQkvKiBVTklYIGxpa2UgQWVnaXMgKi8KKwkgIHdlYXJlYWxpa2UgPSAxOworI2Vsc2UK KyNpZmRlZiBBTUlHQQorLyogTGlrZSBVTklYLCBidXQgY2FzZSBkaXN0aW5jdGlvbnMgYXJlIGln bm9yZWQgYW5kIGNhbiBiZWdpbiB3aXRoIGRldmljZTouICovCisJZWxzZSBpZiAoIXN0cmNtcChw LCJVMSIpKQkvKiBBbWlnYSBpcyBzb3J0IG9mIGxpa2UgVU5JWCAqLworCSAgd2VhcmVhbGlrZSA9 IDE7CisJZWxzZSBpZiAoIXN0cmNtcChwLCJOMyIpKQkvKiBBbWlnYSBpcyBzb3J0IG9mIGxpa2Ug QWVnaXMgKi8KKwkgIHdlYXJlYWxpa2UgPSAxOworI2Vsc2UKKyNpZmRlZiBPUzIJCQkJLyogKElu Y2x1ZGVzIFdpbmRvd3MgOTUvTlQpICovCisKKwkvKiBET1MsIEdFTURPUywgV2luZG93cyAzLngs IFdpbmRvd3MgOTUsIFdpbmRvd3MgTlQgKi8KKwkvKiBBbGwgInRoZSBzYW1lIiBmb3IgRkFUIHBh cnRpdGlvbnMgYnV0IGFsbCBiZXRzIG9mZiBvdGhlcndpc2UgKi8KKwkvKiBzbyB0aGlzIHBhcnQg bmVlZHMgc29tZSByZWZpbmVtZW50IC4uLiAgKi8KKworCWVsc2UgaWYgKCFzdHJjbXAocCwiVTgi KSkJLyogTVMtRE9TICovCisJICB3ZWFyZWFsaWtlID0gMTsKKwllbHNlIGlmICghc3RyY21wKHAs IlVPIikpCS8qIE9TLzIgKi8KKwkgIHdlYXJlYWxpa2UgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAo cCwiVU4iKSkJLyogV2luZG93cyBOVCBvciA5NSAqLworCSAgd2VhcmVhbGlrZSA9IDE7CisJZWxz ZSBpZiAoIXN0cmNtcChwLCJLMiIpKQkvKiBHRU1ET1MgKi8KKwkgIHdlYXJlYWxpa2UgPSAxOwor I2Vsc2UKKyNpZmRlZiBHRU1ET1MKKwllbHNlIGlmICghc3RyY21wKHAsIlU4IikpCisJICB3ZWFy ZWFsaWtlID0gMTsKKwllbHNlIGlmICghc3RyY21wKHAsIlVPIikpCisJICB3ZWFyZWFsaWtlID0g MTsKKwllbHNlIGlmICghc3RyY21wKHAsIlVOIikpCisJICB3ZWFyZWFsaWtlID0gMTsKKwllbHNl IGlmICghc3RyY21wKHAsIksyIikpCisJICB3ZWFyZWFsaWtlID0gMTsKKyNlbmRpZiAvKiBHRU1E T1MgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworI2VuZGlmIC8qIFVO SVggKi8KKworCS8qIEdldCBoZXJlIHdpdGggd2VhcmVhbGlrZSA9PSAxIGlmIHN5c3RlbSB0eXBl cyBtYXRjaCAqLworCisJZGVidWcoRjEwMSwid2hvYXJld2Ugd2VhcmVhbGlrZSIsIiIsd2VhcmVh bGlrZSk7CisJaWYgKCF3ZWFyZWFsaWtlKQkJLyogTm90IGFsaWtlICovCisJICByZXR1cm47CisK KwlmbmNudiA9IFhZRk5fTDsJCQkvKiBBbGlrZSwgc28gbGl0ZXJhbCBmaWxlbmFtZXMgKi8KKwlk ZWJ1ZyhGMTAxLCJ3aG9hcmV3ZSBzZXR0aW5nIGZuY252IiwiIixmbmNudik7CisKKwlpZiAoeGZl cm1vZGUgPT0gWE1PREVfQSkgewkvKiBDdXJyZW50IHhmZXIgbW9kZSBpcyBhdXRvICovCisjaWZk ZWYgVk1TCisJICAgIGJpbmFyeSA9IFhZRlRfTDsJCS8qIEZvciBWTVMtdG8tVk1TLCB1c2UgbGFi ZWxlZCAqLworI2Vsc2UKKyNpZmRlZiBPUzIKKwkgICAgLyogT1MvMiBidXQgbm90IFdpbmRvd3Mg Ki8KKwkgICAgaWYgKCFzdHJjbXAoY2tzeXNpZCwiVU8iKSAmJiAhc3RyY21wKChjaGFyICopd2hv YXJldSwiVU8iKSkKKwkgICAgICBiaW5hcnkgPSBYWUZUX0w7CQkvKiBGb3IgT1MvMi10by1PUy8y LCB1c2UgbGFiZWxlZCAqLworI2Vsc2UKKwkgICAgYmluYXJ5ID0gWFlGVF9COwkJLyogRm9yIGFs bCBvdGhlcnMgdXNlIGJpbmFyeSAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFZNUyAq LworCSAgICBnbmZfYmluYXJ5ID0gYmluYXJ5OwkvKiBQcmV2YWlsaW5nIHR5cGUgZm9yIGduZmls ZSgpICovCisJICAgIGRlYnVnKEYxMDEsIndob2FyZXdlIHNldHRpbmcgYmluYXJ5IiwiIixiaW5h cnkpOworCX0KKyAgICB9Cit9CisjZW5kaWYgLyogTk9YRkVSICovCgpkaWZmIC0tZ2l0IGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NmdHAuYyBiL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZnRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNjZjNzk0MAotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjZnRwLmMKQEAgLTAsMCArMSwxNzY1NCBAQAorI2Rl ZmluZSBGVFBfVElNRU9VVAorCisvKiAgQyBLIEMgRiBUIFAgIC0tICBGVFAgQ2xpZW50IGZvciBD LUtlcm1pdCAgKi8KKworY2hhciAqY2tmdHB2ID0gIkZUUCBDbGllbnQsIDkuMC4yNjAsIDE0IEp1 bCAyMDExIjsKKworLyoKKyAgQXV0aG9yczoKKyAgICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFu QHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcg WW9yayBDaXR5CisgICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBU aGUgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHkuCisKKyAgQ29weXJpZ2h0IChD KSAyMDAwLCAyMDExLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhl IENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1L ZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUg Y2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKworICBQb3J0 aW9ucyBvZiBjb25kaXRpb25hbGx5IGluY2x1ZGVkIGNvZGUgQ29weXJpZ2h0IFJlZ2VudHMgb2Yg dGhlCisgICAgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGFuZCBUaGUgU3RhbmZvcmQgU1JQIEF1 dGhlbnRpY2F0aW9uIFByb2plY3Q7CisgICAgc2VlIG5vdGljZXMgYmVsb3cuCisqLworCisvKgor ICBQZW5kaW5nLi4uCisKKyAgLiBJbXBsZW1lbnQgcmVjdXJzaXZlIE5MU1QgZG93bmxvYWRzIGJ5 IHRyeWluZyB0byBDRCB0byBlYWNoIGZpbGVuYW1lLgorICAgIElmIGl0IHdvcmtzLCBpdCdzIGEg ZGlyZWN0b3J5OyBpZiBub3QsIGl0J3MgYSBmaWxlIC0tIEdFVCBpdC4gIEJ1dAorICAgIHRoYXQg d29uJ3Qgd29yayB3aXRoIHNlcnZlcnMgbGlrZSB3dS1mdHBkIHRoYXQgZG9uJ3Qgc2VuZCBkaXJl Y3RvcnkgCisgICAgbmFtZXMuICBSZWN1cnNpb24gd2l0aCBNTFNEIGlzIGRvbmUuCisKKyAgLiBN YWtlIHN5c2xvZyBlbnRyaWVzIGZvciBzZXNzaW9uPyAgRmlsZXM/CisKKyAgLiBNZXNzYWdlcyBh cmUgcHJpbnRlZCB0byBzdGRvdXQgYW5kIHN0ZGVyciBpbiByYW5kb20gZmFzaGlvbi4gIFdlIHNo b3VsZAorICAgIGVpdGhlciBwcmludCBldmVyeXRoaW5nIHRvIHN0ZG91dCwgb3IgZWxzZSBiZSBz eXN0ZW1hdGljIGFib3V0IHdoZW4KKyAgICB0byB1c2Ugc3RkZXJyLgorCisgIC4gSW1wbGVtZW50 IG1haWwgKE1BSUwsIE1MRkwsIE1TT00sIGV0YykgaWYgYW55IHNlcnZlcnMgc3VwcG9ydCBpdC4K KworICAuIEFkYXB0IHRvIFZNUy4gIEJpZyBqb2IgYmVjYXVzZSBvZiBpdHMgcmVjb3JkLW9yaWVu dGVkIGZpbGUgc3lzdGVtLgorICAgIFJNUyBwcm9ncmFtbWVyIHJlcXVpcmVkLiAgVGhlcmUgYXJl IHByb2JhYmx5IGFsc28gc29tZSBWTVMgVENQL0lQCisgICAgcHJvZHVjdC1zcGVjaWZpYyB3cmlu a2xlcywgZS5nLiBhdHRyaWJ1dGUgcHJlc2VydmF0aW9uIGluIFZNUy10by1WTVMKKyAgICB0cmFu c2ZlcnMgdXNpbmcgc3BlY2lhbCBvcHRpb25zIGZvciBNdWx0aW5ldCBvciBvdGhlciBGVFAgc2Vy dmVycworICAgIChmaW5kIG91dCBhYm91dCBTVFJVIFZNUykuCisqLworCisvKgorICBRdWljayBG VFAgY29tbWFuZCByZWZlcmVuY2U6CisKKyAgUkZDNzY1ICgxOTgwKSBhbmQgZWFybGllcjoKKyAg ICBNT0RFICBTKHRyZWFtKSwgQihsb2NrKSwgQyhvbXByZXNzZWQpCisgICAgU1RSVSAgRihJTEUp LCBSKEVDT1JEKSwgUChBR0UpCisgICAgVFlQRSAgQShTQ0lJKSA8Zm9ybWF0PiwgIEUoQkNESUMp IDxmb3JtYXQ+LCBJKE1BR0UpLCBMKE9DQUwpIDxieXRlc2l6ZT4KKyAgICBQT1JUICAtIFBvcnQK KyAgICBQQVNWICAtIFBhc3NpdmUgbW9kZQorICAgIFVTRVIgIC0gVXNlcgorICAgIFBBU1MgIC0g UGFzc3dvcmQKKyAgICBBQ0NUICAtIEFjY291bnQKKyAgICBDV0QgICAtIENoYW5nZSBXb3JraW5n IERpcmVjdG9yeQorICAgIFJFSU4gIC0gTG9nb3V0IGJ1dCBub3QgZGlzY29ubmVjdAorICAgIFFV SVQgIC0gQnllCisgICAgUkVUUiAgLSBSZXRyZWl2ZQorICAgIFNUT1IgIC0gU3RvcmUKKyAgICBB UFBFICAtIEFwcGVuZAorICAgIEFMTE8gIC0gQWxsb2NhdGUKKyAgICBSRVNUICAtIFJlc3RhcnQK KyAgICBSTkZSICAtIFJlbmFtZSBmcm9tCisgICAgUk5UTyAgLSBSZW5hbWUgdG8KKyAgICBBQk9S ICAtIENhbmNlbAorICAgIERFTEUgIC0gRGVsZXRlCisgICAgTElTVCAgLSBEaXJlY3RvcnkKKyAg ICBOTFNUICAtIE5hbWUgTGlzdAorICAgIFNJVEUgIC0gU2l0ZSBwYXJhbWV0ZXJzIG9yIGNvbW1h bmRzCisgICAgU1RBVCAgLSBTdGF0dXMKKyAgICBIRUxQICAtIEhlbHAKKyAgICBOT09QICAtIE5v b3AKKworICBSRkM5NTkgKDE5ODUpOgorICAgIENEVVAgIC0gQ2hhbmdlIHRvIFBhcmVudCBEaXJl Y3RvcnkKKyAgICBTTU5UICAtIFN0cnVjdHVyZSBNb3VudAorICAgIFNUT1UgIC0gU3RvcmUgVW5p cXVlCisgICAgUk1EICAgLSBSZW1vdmUgRGlyZWN0b3J5CisgICAgTUtEICAgLSBNYWtlIERpcmVj dG9yeQorICAgIFBXRCAgIC0gUHJpbnQgRGlyZWN0b3J5CisgICAgU1lTVCAgLSBTeXN0ZW0KKwor ICBSRkMyMzg5ICgxOTk4KToKKyAgICBGRUFUICAtIExpc3QgRmVhdHVyZXMgKGRvbmUpCisgICAg T1BUUyAgLSBTZW5kIG9wdGlvbnMgKGRvbmUpCisKKyAgUkZDMjY0MCAoMTk5OSk6CisgICAgTEFO RyAgLSBTcGVjaWZ5IGxhbmd1YWdlIGZvciBtZXNzYWdlcyAobm90IGRvbmUpCisKKyAgUGVuZGlu ZyAoSW50ZXJuZXQgRHJhZnRzKToKKyAgICBTSVpFICAtIEZpbGUgc2l6ZSAoZG9uZSkKKyAgICBN RFRNICAtIEZpbGUgbW9kaWZpY2F0aW9uIGRhdGUtdGltZSAoZG9uZSkKKyAgICBNTFNUICAtIEZp bGUgbmFtZSBhbmQgYXR0cmlidXRlIGxpc3QgKHNpbmdsZSBmaWxlKSAobm90IGRvbmUpCisgICAg TUxTRCAgLSBGaWxlIGxpc3Qgd2l0aCBhdHRyaWJ1dGVzIChtdWx0aXBsZSBmaWxlcykgKGRvbmUp CisgICAgTUFJTCwgTUxGTCwgTVNPTSAtIG1haWwgZGVsaXZlcnkgKG5vdCBkb25lKQorCisgIEFs cGhhYmV0aWNhbCBzeW50YXggbGlzdDoKKyAgICBBQk9SIDxDUkxGPgorICAgIEFDQ1QgPFNQPiA8 YWNjb3VudC1pbmZvcm1hdGlvbj4gPENSTEY+CisgICAgQUxMTyA8U1A+IDxkZWNpbWFsLWludGVn ZXI+IFs8U1A+IFIgPFNQPiA8ZGVjaW1hbC1pbnRlZ2VyPl0gPENSTEY+CisgICAgQVBQRSA8U1A+ IDxwYXRobmFtZT4gPENSTEY+CisgICAgQ0RVUCA8Q1JMRj4KKyAgICBDV0QgIDxTUD4gPHBhdGhu YW1lPiA8Q1JMRj4KKyAgICBERUxFIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KKyAgICBGRUFUIDxD UkxGPgorICAgIEhFTFAgWzxTUD4gPHN0cmluZz5dIDxDUkxGPgorICAgIExBTkcgWzxTUD4gPGxh bmd1YWdlLXRhZz4gXSA8Q1JMRj4KKyAgICBMSVNUIFs8U1A+IDxwYXRobmFtZT5dIDxDUkxGPgor ICAgIE1LRCAgPFNQPiA8cGF0aG5hbWU+IDxDUkxGPgorICAgIE1MU0QgWzxTUD4gPHBhdGhuYW1l Pl0gPENSTEY+CisgICAgTUxTVCBbPFNQPiA8cGF0aG5hbWU+XSA8Q1JMRj4KKyAgICBNT0RFIDxT UD4gPG1vZGUtY29kZT4gPENSTEY+CisgICAgTkxTVCBbPFNQPiA8cGF0aG5hbWUtb3Itd2lsZGNh cmQ+XSA8Q1JMRj4KKyAgICBOT09QIDxDUkxGPgorICAgIE9QVFMgPFNQPiA8Y29tbWFuZG5hbWU+ IFsgPFNQPiA8Y29tbWFuZC1vcHRpb25zPiBdIDxDUkxGPgorICAgIFBBU1MgPFNQPiA8cGFzc3dv cmQ+IDxDUkxGPgorICAgIFBBU1YgPENSTEY+CisgICAgUE9SVCA8U1A+IDxob3N0LXBvcnQ+IDxD UkxGPgorICAgIFBXRCAgPENSTEY+CisgICAgUVVJVCA8Q1JMRj4KKyAgICBSRUlOIDxDUkxGPgor ICAgIFJFU1QgPFNQPiA8bWFya2VyPiA8Q1JMRj4KKyAgICBSRVRSIDxTUD4gPHBhdGhuYW1lPiA8 Q1JMRj4KKyAgICBSTUQgIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KKyAgICBSTkZSIDxTUD4gPHBh dGhuYW1lPiA8Q1JMRj4KKyAgICBSTlRPIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KKyAgICBTSVRF IDxTUD4gPHN0cmluZz4gPENSTEY+CisgICAgU0laRSA8U1A+IDxwYXRobmFtZT4gPENSTEY+Cisg ICAgU01OVCA8U1A+IDxwYXRobmFtZT4gPENSTEY+CisgICAgU1RBVCBbPFNQPiA8cGF0aG5hbWU+ XSA8Q1JMRj4KKyAgICBTVE9SIDxTUD4gPHBhdGhuYW1lPiA8Q1JMRj4KKyAgICBTVE9VIDxDUkxG PgorICAgIFNUUlUgPFNQPiA8c3RydWN0dXJlLWNvZGU+IDxDUkxGPgorICAgIFNZU1QgPENSTEY+ CisgICAgVFlQRSA8U1A+IDx0eXBlLWNvZGU+IDxDUkxGPgorICAgIFVTRVIgPFNQPiA8dXNlcm5h bWU+IDxDUkxGPgorKi8KKyNpbmNsdWRlICJja2NzeW0uaCIgICAgICAgICAgICAgICAgICAgICAv KiBTdGFuZGFyZCBpbmNsdWRlcyAqLworI2luY2x1ZGUgImNrY2RlYi5oIgorCisjaWZuZGVmIE5P RlRQICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTk9GVFAgID0gbm8gRlRQICovCisjaWZu ZGVmIFNZU0ZUUCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1lTRlRQID0gdXNlIGV4dGVy bmFsIGZ0cCBjbGllbnQgKi8KKyNpZmRlZiBUQ1BTT0NLRVQgICAgICAgICAgICAgICAgICAgICAg ICAvKiBCdWlsZCBvbmx5IGlmIFRDUC9JUCBpbmNsdWRlZCAqLworI2RlZmluZSBDS0NGVFBfQwor CisvKiBOb3RlOiBtdWNoIG9mIHRoZSBmb2xsb3dpbmcgZHVwbGljYXRlcyB3aGF0IHdhcyBkb25l IGluIGNrY2RlYi5oICovCisvKiBidXQgbGV0J3Mgbm90IG1lc3Mgd2l0aCBpdCB1bmxlc3MgaXQg Y2F1c2VzIHRyb3VibGUuICovCisKKyNpZmRlZiBDS19BTlNJQworI2luY2x1ZGUgPHN0ZGFyZy5o PgorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KKyNpbmNsdWRlIDx2YXJhcmdzLmg+CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZmRlZiBPUzIKKyNpZmRlZiBPUzJP TkxZCisjaW5jbHVkZSA8b3MyLmg+CisjZW5kaWYgLyogT1MyT05MWSAqLworI2luY2x1ZGUgImNr b3dpbi5oIgorI2luY2x1ZGUgImNrb2Nvbi5oIgorI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBa SUxPRworI2lmZGVmIE5UCisjaW5jbHVkZSA8c2V0am1wZXguaD4KKyNpZmRlZiBOVFNJRworZXh0 ZXJuIGludCBUbHNJbmRleDsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2Vsc2UgLyogTlQgKi8KKyNp bmNsdWRlIDxzZXRqbXAuaD4KKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UKKyNpbmNsdWRlIDxzZXRy ZXQuaD4KKyNlbmRpZiAvKiBaSUxPRyAqLworI2luY2x1ZGUgImNrY3NpZy5oIgorI2lmZGVmIFZN UworLyogMjAxMC0wMy0wOSBTTVMuICBWQVggQyBuZWVkcyBoZWxwIHRvIGZpbmQgInN5cyIuICBJ dCdzIGVhc2llciBub3QgdG8gdHJ5LiAqLworI2luY2x1ZGUgPHN0YXQuaD4KKyNlbHNlIC8qIGRl ZiBWTVMgKi8KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmIC8qIGRlZiBWTVMgW2Vsc2Vd ICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmbmRlZiBIUFVYUFJFNjUKKyNpbmNsdWRlIDxl cnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICovCisjZWxzZQorI2lmbmRlZiBFUlJO T19JTkNMVURFRAorI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMg Ki8KKyNlbmRpZgkvKiBFUlJOT19JTkNMVURFRCAqLworI2VuZGlmCS8qIEhQVVhQUkU2NSAqLwor CisjaWZuZGVmIE5PVElNRUgKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYgLyogTk9USU1FSCAq LworI2lmbmRlZiBFUElQRQorI2RlZmluZSBFUElQRSAzMiAgICAgICAgICAgICAgICAgICAgICAg IC8qIEJyb2tlbiBwaXBlIGVycm9yICovCisjZW5kaWYgLyogRVBJUEUgKi8KKworLyogS2VybWl0 IGluY2x1ZGVzICovCisKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2NrZXIuaCIK KyNpbmNsdWRlICJja3VjbWQuaCIKKyNpbmNsdWRlICJja3V1c3IuaCIKKyNpbmNsdWRlICJja2Nu ZXQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlcyBja2N0ZWwuaCAqLworI2luY2x1 ZGUgImNrY3RlbC5oIiAgICAgICAgICAgICAgICAgICAgIC8qICh0aGVuIHdoeSBpbmNsdWRlIGl0 IGFnYWluPykgKi8KKyNpbmNsdWRlICJja2N4bGEuaCIKKworI2lmZGVmIENLX1NTTAorI2luY2x1 ZGUgImNrdWF0aC5oIgkJCS8qIFNNUyAyMDA3LzAyLzE1ICovCisjZW5kaWYgLyogZGVmIENLX1NT TCAqLworCisvKgorICBIb3cgdG8gZ2V0IHRoZSBzdHJ1Y3QgdGltZXZhbCBkZWZpbml0aW9uIHNv IHdlIGNhbiBjYWxsIHNlbGVjdCgpLiAgVGhlCisgIHh4VElNRUggc3ltYm9scyBhcmUgZGVmaW5l ZCBpbiBja2NkZWIuaCwgb3ZlcnJpZGRlbiBpbiB2YXJpb3VzIG1ha2VmaWxlCisgIHRhcmdldHMu ICBUaGUgcHJvYmxlbSBpczogbWF5YmUgd2UgaGF2ZSBhbHJlYWR5IGluY2x1ZGVkIHNvbWUgaGVh ZGVyIGZpbGUKKyAgdGhhdCBkZWZpbmVkIHN0cnVjdCB0aW1ldmFsLCBhbmQgbWF5YmUgd2UgZGlk bid0LiAgSWYgd2UgZGlkLCB3ZSBkb24ndCB3YW50CisgIHRvIGluY2x1ZGUgYW5vdGhlciBoZWFk ZXIgZmlsZSB0aGF0IGRlZmluZXMgaXQgYWdhaW4gb3IgdGhlIGNvbXBpbGF0aW9uIHdpbGwKKyAg ZmFpbC4gIElmIHdlIGRpZG4ndCwgd2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZSB3 aGVyZSBpdCdzIGRlZmluZWQuCisgIEJ1dCBpbiBzb21lIGNhc2VzIGV2ZW4gdGhhdCB3b24ndCB3 b3JrIGJlY2F1c2Ugb2Ygc3RyaWN0IFBPU0lYIGNvbnN0cmFpbnRzCisgIG9yIHNvbWVzdWNoLCBv ciBiZWNhdXNlIHRoaXMgaW50cm9kdWNlcyBvdGhlciBjb25mbGljdHMgKGUuZy4gc3RydWN0IHRt CisgIG11bHRpcGx5IGRlZmluZWQpLCBpbiB3aGljaCBjYXNlIHdlIGhhdmUgdG8gZGVmaW5lIGl0 IG91cnNlbHZlcywgYnV0IHRoaXMKKyAgY2FuIHdvcmsgb25seSBpZiB3ZSBkaWRuJ3QgYWxyZWFk eSBlbmNvdW50ZXIgYSBkZWZpbml0aW9uLgorKi8KKyNpZm5kZWYgRENMVElNRVZBTAorI2lmZGVm IFNWNjhSM1Y2CisjZGVmaW5lIERDTFRJTUVWQUwKKyNlbHNlCisjaWZkZWYgU0NPMjM0CisjZGVm aW5lIERDTFRJTUVWQUwKKyNlbmRpZiAvKiBTQ08yMzQgKi8KKyNlbmRpZiAvKiBTVjY4UjNWNiAq LworI2VuZGlmIC8qIERDTFRJTUVWQUwgKi8KKworI2lmZGVmIERDTFRJTUVWQUwKKy8qIEFsc28g bWF5YmUgaW4gc29tZSBwbGFjZXMgdGhlIGVsZW1lbnRzIG11c3QgYmUgdW5zaWduZWQuLi4gKi8K K3N0cnVjdCB0aW1ldmFsIHsKKyAgICBsb25nIHR2X3NlYzsKKyAgICBsb25nIHR2X3VzZWM7Cit9 OworI2lmZGVmIENPTU1FTlQKKy8qIEN1cnJlbnRseSB3ZSBkb24ndCB1c2UgdGhpcy4uLiAqLwor c3RydWN0IHRpbWV6b25lIHsKKyAgICBpbnQgdHpfbWludXRlc3dlc3Q7CisgICAgaW50IHR6X2Rz dHRpbWU7Cit9OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbHNlICAvKiAhRENMVElNRVZBTCAq LworI2lmbmRlZiBOT1NZU1RJTUVICisjaWZkZWYgU1lTVElNRUgKKyNpbmNsdWRlIDxzeXMvdGlt ZS5oPgorI2VuZGlmIC8qIFNZU1RJTUVIICovCisjZW5kaWYgLyogTk9TWVNUSU1FSCAqLworI2lm bmRlZiBOT1NZU1RJTUVCSAorI2lmZGVmIFNZU1RJTUVCSAorI2luY2x1ZGUgPHN5cy90aW1lYi5o PgorI2VuZGlmIC8qIFNZU1RJTUVCSCAqLworI2VuZGlmIC8qIE5PU1lTVElNRUJIICovCisjZW5k aWYgLyogRENMVElNRVZBTCAqLworCisvKiAyMDEwLTAzLTA5IFNNUy4gIFZBWCBDIG5lZWRzIGhl bHAgdG8gZmluZCAic3lzIi4gIEl0J3MgZWFzaWVyIG5vdCB0byB0cnkuICovCisjaWZkZWYgVk1T CisjaW5jbHVkZSA8dHlwZXMuaD4KKyNlbHNlIC8qIGRlZiBWTVMgKi8KKyNpbmNsdWRlIDxzeXMv dHlwZXMuaD4KKyNlbmRpZiAvKiBkZWYgVk1TIFtlbHNlXSAqLworI2luY2x1ZGUgPHN0ZGlvLmg+ CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2VuZGlmIC8qIEhBVkVfU1RETElCX0ggKi8KKworI2lmbmRlZiBOT1NFVFRJTUUK KyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIHNlY3Rpb24gbW92ZWQgdG8gY2tjZGViLmggKi8KKyNp ZmRlZiBQT1NJWAorI2RlZmluZSBVVElNRUgKKyNlbHNlCisjaWZkZWYgSFBVWDkKKyNkZWZpbmUg VVRJTUVICisjZWxzZQorI2lmZGVmIE9TMgorI2RlZmluZSBTWVNVVElNRUgKKyNlbmRpZiAvKiBP UzIgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworCisjaWZkZWYgVk1TCQkJCS8qIFNNUyAyMDA3LzAyLzE1ICovCisjaW5jbHVk ZSAiY2t2cnRsLmgiCQkJLyogZm9yIHV0aW1lKCkgKi8KKyNlbHNlICAvKiBkZWYgVk1TICovCisj aWZkZWYgU1lTVVRJTUVICisjaW5jbHVkZSA8c3lzL3V0aW1lLmg+CisjZWxzZQorI2lmZGVmIFVU SU1FSAorI2luY2x1ZGUgPHV0aW1lLmg+CisjZGVmaW5lIFNZU1VUSU1FSAorI2VuZGlmIC8qIFVU SU1FSCAqLworI2VuZGlmIC8qIFNZU1VUSU1FSCAqLworI2VuZGlmIC8qIGRlZiBWTVMgKi8KKyNl bmRpZiAvKiBOT1NFVFRJTUUgKi8KKworI2lmbmRlZiBTQ09fT1NSNTA0CisjaWZkZWYgU0VMRUNU X0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYgLyogU0VMRUNUX0ggKi8KKyNlbmRp ZiAvKiBTQ09fT1NSNTA0ICovCisKKyNpZm5kZWYgSU5BRERSX05PTkUJCQkvKiAyMDEwLTAzLTI5 ICovCisjZGVmaW5lIElOQUREUl9OT05FIC0xCisjZW5kaWYJLyogSU5BRERSX05PTkUgKi8KKwor Lyogc2VsZWN0KCkgZGlhbGVjdHMuLi4gKi8KKworI2lmZGVmIFVOSVgKKyNkZWZpbmUgQlNEU0VM RUNUICAgICAgICAgICAgICAgICAgICAgICAvKiBCU0Qgc2VsZWN0KCkgc3ludGF4L3NlbWFudGlj cyAqLworI2lmbmRlZiBGRF9TRVRTSVpFCisjZGVmaW5lIEZEX1NFVFNJWkUgMTI4CisjZW5kaWYJ LyogRkRfU0VUU0laRSAqLworI2lmZGVmIEhQVVg2CQkJCS8qIEZvciBIUC1VWCA2LjUgY2lyY2Eg MTk4OSAqLwordHlwZWRlZiBsb25nIGZkX21hc2s7CisjZGVmaW5lIE5GREJJVFMgKHNpemVvZihm ZF9tYXNrKSAqIE5CQlkpIC8qIGJpdHMgcGVyIG1hc2sgKi8KKyNpZm5kZWYgaG93bWFueQorI2Rl ZmluZSBob3dtYW55KHgsIHkpICAgKCgoeCkrKCh5KS0xKSkvKHkpKQorI2VuZGlmCS8qIGhvd21h bnkgKi8KKyNkZWZpbmUgRkRfU0VUKG4sIHApICAgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRT XSB8PSAoMSA8PCAoKG4pICUgTkZEQklUUykpKQorI2RlZmluZSBGRF9DTFIobiwgcCkgICAgKChw KS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICY9IH4oMSA8PCAoKG4pICUgTkZEQklUUykpKQorI2Rl ZmluZSBGRF9JU1NFVChuLCBwKSAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICYgKDEgPDwg KChuKSAlIE5GREJJVFMpKSkKKyNkZWZpbmUgRkRfQ09QWShmLCB0KSAgIGJjb3B5KGYsIHQsIHNp emVvZigqKGYpKSkKKyNkZWZpbmUgRkRfWkVSTyhwKSAgICAgIGJ6ZXJvKHAsIHNpemVvZigqKHAp KSkKKyNlbmRpZgkvKiBIUFVYNiAqLworCisjZWxzZQorI2lmZGVmIE9TMiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9TLzIgb3IgV2luMzIgKi8KKyNpZmRlZiBOVAorI2RlZmluZSBC U0RTRUxFQ1QKKyNlbHNlIC8qIE5UICovCisjZGVmaW5lIElCTVNFTEVDVAorI2VuZGlmIC8qIE5U ICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgVk1TCisj ZGVmaW5lIEJTRFNFTEVDVAkJCS8qIFNNUyAyMDA3LzAyLzE1ICovCisjZW5kaWYgLyogZGVmIFZN UyAqLworCisvKiBPdGhlciBzZWxlY3QoKSBwZWN1bGlhcml0aWVzICovCisKKyNpZmRlZiBIUFVY CisjaWZuZGVmIEhQVVgxMCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFAtVVggOS54eCBh bmQgZWFybGllciAqLworI2lmbmRlZiBIUFVYMTEwMAorLyogVGhlIHRocmVlIGludGVyaW9yIGFy Z3MgdG8gc2VsZWN0KCkgYXJlIChpbnQgKikgcmF0aGVyIHRoYW4gKGZkX3NldCAqKSAqLworI2lm bmRlZiBJTlRTRUxFQ1QKKyNkZWZpbmUgSU5UU0VMRUNUCisjZW5kaWYgLyogSU5UU0VMRUNUICov CisjZW5kaWYgLyogSFBVWDExMDAgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBI UFVYICovCisKKyNpZmRlZiBDS19TT0NLUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTT0NL UyBJbnRlcm5ldCByZWxheSBwYWNrYWdlICovCisjaWZkZWYgQ0tfU09DS1M1ICAgICAgICAgICAg ICAgICAgICAgICAgLyogU09DS1MgNSAqLworI2RlZmluZSBhY2NlcHQgIFNPQ0tTYWNjZXB0Cisj ZGVmaW5lIGJpbmQgICAgU09DS1NiaW5kCisjZGVmaW5lIGNvbm5lY3QgU09DS1Njb25uZWN0Cisj ZGVmaW5lIGdldHNvY2tuYW1lIFNPQ0tTZ2V0c29ja25hbWUKKyNkZWZpbmUgbGlzdGVuIFNPQ0tT bGlzdGVuCisjZWxzZSAgLyogTm90IFNPQ0tTIDUgKi8KKyNkZWZpbmUgYWNjZXB0ICBSYWNjZXB0 CisjZGVmaW5lIGJpbmQgICAgUmJpbmQKKyNkZWZpbmUgY29ubmVjdCBSY29ubmVjdAorI2RlZmlu ZSBnZXRzb2NrbmFtZSBSZ2V0c29ja25hbWUKKyNkZWZpbmUgbGlzdGVuIFJsaXN0ZW4KKyNlbmRp ZiAvKiBDS19TT0NLUzUgKi8KKyNlbmRpZiAvKiBDS19TT0NLUyAqLworCisjaWZuZGVmIE5PSFRU UAorZXh0ZXJuIGNoYXIgKiB0Y3BfaHR0cF9wcm94eTsgICAgICAgICAgIC8qIE5hbWVbOnBvcnRd IG9mIGh0dHAgcHJveHkgc2VydmVyICovCitleHRlcm4gaW50ICAgIHRjcF9odHRwX3Byb3h5X2Vy cm5vOworZXh0ZXJuIGNoYXIgKiB0Y3BfaHR0cF9wcm94eV91c2VyOworZXh0ZXJuIGNoYXIgKiB0 Y3BfaHR0cF9wcm94eV9wd2Q7CitleHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X2FnZW50Owor I2RlZmluZSBIVFRQQ1BZTCAxMDI0CitzdGF0aWMgY2hhciBwcm94eWhvc3RbSFRUUENQWUxdOwor I2VuZGlmIC8qIE5PSFRUUCAqLworaW50IHNzbF9mdHBfcHJveHkgPSAwOyAgICAgICAgICAgICAg ICAgIC8qIEZUUCBvdmVyIFNTTC9UTFMgUHJveHkgU2VydmVyICovCisKKy8qIEZlYXR1cmUgc2Vs ZWN0aW9uICovCisKKyNpZm5kZWYgVVNFX1NIVVRET1dOCisvKgorICBXZSBkb24ndCB1c2Ugc2h1 dGRvd24oKSBiZWNhdXNlIChhKSB3ZSBhbHdheXMgY2FsbCBpdCBqdXN0IGJlZm9yZSBjbG9zZSgp CisgIHNvIGl0J3MgcmVkdW5kYW50IGFuZCB1bm5lY2Vzc2FyeSwgYW5kIChiKSBpdCBpbnRyb2R1 Y2VzIGEgbG9uZyBwYXVzZSBvbgorICBzb21lIHBsYXRmb3JtcyBsaWtlIFNWLzY4IFIzLgorKi8K Ky8qICNkZWZpbmUgVVNFX1NIVVRET1dOICovCisjZW5kaWYgLyogVVNFX1NIVVRET1dOICovCisK KyNpZm5kZWYgTk9SRVNFTkQKKyNpZm5kZWYgTk9SRVNUQVJUICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXN0YXJ0IC8gcmVjb3ZlciAqLworI2lmbmRlZiBGVFBfUkVTVEFSVAorI2RlZmluZSBG VFBfUkVTVEFSVAorI2VuZGlmIC8qIEZUUF9SRVNUQVJUICovCisjZW5kaWYgLyogTk9SRVNUQVJU ICovCisjZW5kaWYgLyogTk9SRVNFTkQgKi8KKworI2lmbmRlZiBOT1VQREFURSAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFVwZGF0ZSBtb2RlICovCisjaWZuZGVmIERPVVBEQVRFCisjZGVmaW5l IERPVVBEQVRFCisjZW5kaWYgLyogRE9VUERBVEUgKi8KKyNlbmRpZiAvKiBOT1VQREFURSAqLwor CisjaWZuZGVmIFVOSUNPREUgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5pY29kZSByZXF1 aXJlZCAqLworI2lmbmRlZiBOT0NTRVRTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBj aGFyc2V0IHRyYW5zbGF0aW9uICovCisjZGVmaW5lIE5PQ1NFVFMKKyNlbmRpZiAvKiBOT0NTRVRT ICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworCisjaWZuZGVmIE9TMgorI2lmbmRlZiBIQVZFX01T RUNTICAgICAgICAgICAgICAgICAgICAgIC8qIE1pbGxpc2Vjb25kIHRpbWVyICovCisjaWZkZWYg VU5JWAorI2lmZGVmIEdGVElNRVIKKyNkZWZpbmUgSEFWRV9NU0VDUworI2VuZGlmIC8qIEdGVElN RVIgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogSEFWRV9NU0VDUyAqLworI2VuZGlm IC8qIE9TMiAqLworCisjaWZkZWYgUElQRVNFTkQgICAgICAgICAgICAgICAgICAgICAgICAgLyog UFVUIGZyb20gcGlwZSAqLworI2lmbmRlZiBQVVRQSVBFCisjZGVmaW5lIFBVVFBJUEUKKyNlbmRp ZiAvKiBQVVRQSVBFICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmbmRlZiBOT1NQTCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBVVCBmcm9tIGFycmF5ICovCisjaWZuZGVmIFBV VEFSUkFZCisjZGVmaW5lIFBVVEFSUkFZCisjZW5kaWYgLyogUFVUQVJSQVkgKi8KKyNlbmRpZiAv KiBOT1NQTCAqLworCisvKiBTZWN1cml0eS4uLiAqLworCisjaWZkZWYgQ0tfU1JQCisjZGVmaW5l IEZUUF9TUlAKKyNlbmRpZiAvKiBDS19TUlAgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZk ZWYgS1JCNAorLyoKKyAgVGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuIHRoZSBLZXkgU2NoZWR1 bGUgZm9ybWF0cyB1c2VkIGludGVybmFsbHkKKyAgd2l0aGluIHRoZSBzdGFuZGFsb25lIE1JVCBL UkI0IGxpYnJhcnkgYW5kIHRoYXQgdXNlZCBieSBFcmljIFlvdW5nCisgIGluIE9wZW5TU0wgYW5k IGhpcyBzdGFuZGFsb25lIERFUyBsaWJyYXJ5LiAgVGhlcmVmb3JlLCBLUkI0IEZUUCBBVVRICisg IGNhbm5vdCBiZSBzdXBwb3J0ZWQgd2hlbiBlaXRoZXIgb2YgdGhvc2UgdHdvIHBhY2thZ2VzIGFy ZSB1c2VkLgorKi8KKyNpZmRlZiBLUkI1MjQKKyNkZWZpbmUgRlRQX0tSQjQKKyNlbHNlIC8qIEtS QjUyNCAqLworI2lmbmRlZiBDS19TU0wKKyNpZm5kZWYgTElCREVTCisjZGVmaW5lIEZUUF9LUkI0 CisjZW5kaWYgLyogTElCREVTICovCisjZW5kaWYgLyogQ0tfU1NMICovCisjZW5kaWYgLyogS1JC NTI0ICovCisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyNpZm5kZWYgSEVJTURBTAor I2lmbmRlZiBOT0ZUUF9HU1NBUEkJCQkvKiAyOTkgKi8KKyNkZWZpbmUgRlRQX0dTU0FQSQorI2Vu ZGlmCS8qIE5PRlRQX0dTU0FQSSAqLworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyNlbmRpZiAvKiBL UkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworLyogRlRQX1NFQ1VSSVRZIGlzIGRl ZmluZWQgaWYgYW55IG9mIHRoZSBhYm92ZSBpcyBzZWxlY3RlZCAqLworI2lmbmRlZiBGVFBfU0VD VVJJVFkKKyNpZmRlZiBGVFBfR1NTQVBJCisjZGVmaW5lIEZUUF9TRUNVUklUWQorI2Vsc2UKKyNp ZmRlZiBGVFBfS1JCNAorI2RlZmluZSBGVFBfU0VDVVJJVFkKKyNlbHNlCisjaWZkZWYgRlRQX1NS UAorI2RlZmluZSBGVFBfU0VDVVJJVFkKKyNlbHNlCisjaWZkZWYgQ0tfU1NMCisjZGVmaW5lIEZU UF9TRUNVUklUWQorI2VuZGlmIC8qIENLX1NTTCAqLworI2VuZGlmIC8qIEZUUF9TUlAgKi8KKyNl bmRpZiAvKiBGVFBfS1JCNCAqLworI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KKyNlbmRpZiAvKiBG VFBfU0VDVVJJVFkgKi8KKworI2lmZGVmIENLX0RFUworI2lmZGVmIENLX1NTTAorI2lmbmRlZiBM SUJERVMKKyNkZWZpbmUgTElCREVTCisjZW5kaWYgLyogTElCREVTICovCisjZW5kaWYgLyogQ0tf U1NMICovCisjZW5kaWYgLyogQ0tfREVTICovCisKKyNpZmRlZiBDUllQVF9ETEwKKyNpZm5kZWYg TElCREVTCisjZGVmaW5lIExJQkRFUworI2VuZGlmIC8qIExJQkRFUyAqLworI2VuZGlmIC8qIENS WVBUX0RMTCAqLworCisjaWZkZWYgRlRQX0tSQjQKKyNkZWZpbmUgZGVzX2NibG9jayBCbG9jawor I2RlZmluZSBkZXNfa2V5X3NjaGVkdWxlIFNjaGVkdWxlCisjaWZkZWYgS1JCNTI0CisjaWZkZWYg TlQKKyNkZWZpbmUgX1dJTkRPV1MKKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImtlcmJlcm9z SVYva3JiLmgiCisjZWxzZSAvKiBLUkI1MjQgKi8KKyNpZmRlZiBTT0xBUklTCisjaWZuZGVmIHN1 bgorLyogRm9yIHNvbWUgcmVhc29uIGxvc3QgaW4gaGlzdG9yeSB0aGUgTWFrZWZpbGUgU29sYXJp cyB0YXJnZXRzIGhhdmUgLVVzdW4gKi8KKyNkZWZpbmUgc3VuCisjZW5kaWYgLyogc3VuICovCisj ZW5kaWYgLyogU09MQVJJUyAqLworI2luY2x1ZGUgImtyYi5oIgorI2RlZmluZSBrcmJfZ2V0X2Vy cl90ZXh0X2VudHJ5IGtyYl9nZXRfZXJyX3RleHQKKyNlbmRpZiAvKiBLUkI1MjQgKi8KKyNlbmRp ZiAvKiBGVFBfS1JCNCAqLworCisjaWZkZWYgQ0tfU1NMCisjaWZkZWYgRlRQX0tSQjQKKyNpZm5k ZWYgSEVBREVSX0RFU19ICisjZGVmaW5lIEhFQURFUl9ERVNfSAorI2VuZGlmIC8qIEhFQURFUl9E RVNfSCAqLworI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaW5jbHVkZSAiY2tfc3NsLmgiCisjZW5k aWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBGVFBfU1JQCisjaWZkZWYgSEFWRV9QV0RfSAorI2lu Y2x1ZGUgInB3ZC5oIgorI2VuZGlmIC8qIEhBVkVfUFdEX0ggKi8KKyNpbmNsdWRlICJ0X3B3ZC5o IgorI2luY2x1ZGUgInRfY2xpZW50LmgiCisjaW5jbHVkZSAia3J5cHRvLmgiCisjZW5kaWYgLyog RlRQX1NSUCAqLworCisjaWZkZWYgRlRQX0dTU0FQSQorI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGku aD4KKy8qCisgIE5lZWQgdG8gaW5jbHVkZSB0aGUga3JiNSBmaWxlLCBiZWNhdXNlIHdlJ3JlIGRv aW5nIG1hbnVhbCBmYWxsYmFjaworICBmcm9tIHRoZSB2MiBtZWNoIHRvIHRoZSB2MSBtZWNoLiAg T25jZSB0aGVyZSdzIHJlYWwgbmVnb3RpYXRpb24sCisgIHdlIGNhbiBiZSBnZW5lcmljIGFnYWlu LgorKi8KKyNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxnc3Nh cGkvZ3NzYXBpX2tyYjUuaD4KK3N0YXRpYyBnc3NfY3R4X2lkX3QgZ2NvbnRleHQ7CisKKyNpZmRl ZiBNQUNPU1gKKy8qKiBleHBvcnRlZCBjb25zdGFudHMgZGVmaW5lZCBpbiBnc3NhcGlfa3JiNXss X254fS5oICoqLworCisvKiB0aGVzZSBhcmUgYm9ndXMsIGJ1dCB3aWxsIGNvbXBpbGUgKi8KKwor LyoKKyAqIFRoZSBPSUQgb2YgdGhlIGRyYWZ0IGtyYjUgbWVjaGFuaXNtLCBhc3NpZ25lZCBieSBJ RVRGLCBpczoKKyAqICAgICAgaXNvKDEpIG9yZygzKSBkb2QoNSkgaW50ZXJuZXQoMSkgc2VjdXJp dHkoNSkKKyAqICAgICAga2VyYmVyb3N2NSgyKSA9IDEuMy41LjEuNS4yCisgKiBUaGUgT0lEIG9m IHRoZSBrcmI1X25hbWUgdHlwZSBpczoKKyAqICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIFVT KDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikKKyAqICAgICAga3JiNSgyKSBr cmI1X25hbWUoMSkgPSAxLjIuODQwLjExMzU1NC4xLjIuMi4xCisgKiBUaGUgT0lEIG9mIHRoZSBr cmI1X3ByaW5jaXBhbCB0eXBlIGlzOgorICogICAgICBpc28oMSkgbWVtYmVyLWJvZHkoMikgVVMo ODQwKSBtaXQoMTEzNTU0KSBpbmZvc3lzKDEpIGdzc2FwaSgyKQorICogICAgICBrcmI1KDIpIGty YjVfcHJpbmNpcGFsKDIpID0gMS4yLjg0MC4xMTM1NTQuMS4yLjIuMgorICogVGhlIE9JRCBvZiB0 aGUgcHJvcG9zZWQgc3RhbmRhcmQga3JiNSBtZWNoYW5pc20gaXM6CisgKiAgICAgIGlzbygxKSBt ZW1iZXItYm9keSgyKSBVUyg4NDApIG1pdCgxMTM1NTQpIGluZm9zeXMoMSkgZ3NzYXBpKDIpCisg KiAgICAgIGtyYjUoMikgPSAxLjIuODQwLjExMzU1NC4xLjIuMgorICogVGhlIE9JRCBvZiB0aGUg cHJvcG9zZWQgc3RhbmRhcmQga3JiNSB2MiBtZWNoYW5pc20gaXM6CisgKiAgICAgIGlzbygxKSBt ZW1iZXItYm9keSgyKSBVUyg4NDApIG1pdCgxMTM1NTQpIGluZm9zeXMoMSkgZ3NzYXBpKDIpCisg KiAgICAgIGtyYjV2MigzKSA9IDEuMi44NDAuMTEzNTU0LjEuMi4zCisgKgorICovCisKKy8qCisg KiBFbmNvZGluZyBydWxlczogVGhlIGZpcnN0IHR3byB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gb25l IGJ5dGUgYXMgNDAKKyAqICogdmFsdWUxICsgdmFsdWUyLiAgU3Vic2VxdWVudCB2YWx1ZXMgYXJl IGVuY29kZWQgYmFzZSAxMjgsIG1vc3QKKyAqIHNpZ25pZmljYW50IGRpZ2l0IGZpcnN0LCB3aXRo IHRoZSBoaWdoIGJpdCAoXDIwMCkgc2V0IG9uIGFsbCBvY3RldHMKKyAqIGV4Y2VwdCB0aGUgbGFz dCBpbiBlYWNoIHZhbHVlJ3MgZW5jb2RpbmcuCisgKi8KKworc3RhdGljIENPTlNUIGdzc19PSURf ZGVzYworY2tfa3JiNV9nc3Nfb2lkX2FycmF5W10gPSB7CisgICAvKiB0aGlzIGlzIHRoZSBvZmZp Y2lhbCwgcmZjLXNwZWNpZmllZCBPSUQgKi8KKyAgIHs5LCAiXDA1MlwyMDZcMTEwXDIwNlwzNjdc MDIyXDAwMVwwMDJcMDAyIn0sCisgICAvKiB0aGlzIGlzIHRoZSB1bm9mZmljaWFsLCB3cm9uZyBP SUQgKi8KKyAgIHs1LCAiXDA1M1wwMDVcMDAxXDAwNVwwMDIifSwKKyAgIC8qIHRoaXMgaXMgdGhl IHYyIGFzc2lnbmVkIE9JRCAqLworICAgezksICJcMDUyXDIwNlwxMTBcMjA2XDM2N1wwMjJcMDAx XDAwMlwwMDMifSwKKyAgIC8qIHRoZXNlIHR3byBhcmUgbmFtZSB0eXBlIE9JRCdzICovCisgICB7 MTAsICJcMDUyXDIwNlwxMTBcMjA2XDM2N1wwMjJcMDAxXDAwMlwwMDJcMDAxIn0sCisgICB7MTAs ICJcMDUyXDIwNlwxMTBcMjA2XDM2N1wwMjJcMDAxXDAwMlwwMDJcMDAyIn0sCisgICB7IDAsIDAg fQorfTsKKworc3RhdGljCitDT05TVCBnc3NfT0lEX2Rlc2MgKiBDT05TVCBnc3NfbWVjaF9rcmI1 X3YyID0gY2tfa3JiNV9nc3Nfb2lkX2FycmF5KzI7CisKKyNpZmRlZiBNQUNPU1gxMDMKK3N0YXRp YworQ09OU1QgZ3NzX09JRF9kZXNjICogQ09OU1QgZ3NzX21lY2hfa3JiNSA9IGNrX2tyYjVfZ3Nz X29pZF9hcnJheSswOworI2VuZGlmIC8qIE1BQ09TWDEwMyAqLworCisjaWZuZGVmIE1BQ09TWAor c3RhdGljCitDT05TVCBnc3NfT0lEX2Rlc2MgKiBDT05TVCBnc3NfbWVjaF9rcmI1ID0gY2tfa3Ji NV9nc3Nfb2lkX2FycmF5KzA7CitzdGF0aWMKK0NPTlNUIGdzc19PSURfZGVzYyAqIENPTlNUIGdz c19tZWNoX2tyYjVfb2xkID0gY2tfa3JiNV9nc3Nfb2lkX2FycmF5KzE7CitzdGF0aWMKK0NPTlNU IGdzc19PSURfZGVzYyAqIENPTlNUIGdzc19udF9rcmI1X25hbWUgPSBja19rcmI1X2dzc19vaWRf YXJyYXkrMzsKK3N0YXRpYworQ09OU1QgZ3NzX09JRF9kZXNjICogQ09OU1QgZ3NzX250X2tyYjVf cHJpbmNpcGFsID0gY2tfa3JiNV9nc3Nfb2lkX2FycmF5KzQ7CisjZW5kaWYJLyogTUFDT1NYICov CisKKy8qCisgKiBTZWUga3JiNS9nc3NhcGlfa3JiNS5jIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRo ZSBhbGdvcml0aG0gZm9yCisgKiBlbmNvZGluZyBhbiBvYmplY3QgaWRlbnRpZmllci4KKyAqLwor CisvKgorICogVGhlIE9JRCBvZiB1c2VyX25hbWUgaXM6CisgKiAgICAgIGlzbygxKSBtZW1iZXIt Ym9keSgyKSBVUyg4NDApIG1pdCgxMTM1NTQpIGluZm9zeXMoMSkgZ3NzYXBpKDIpCisgKiAgICAg IGdlbmVyaWMoMSkgdXNlcl9uYW1lKDEpID0gMS4yLjg0MC4xMTM1NTQuMS4yLjEuMQorICogbWFj aGluZV91aWRfbmFtZToKKyAqICAgICAgaXNvKDEpIG1lbWJlci1ib2R5KDIpIFVTKDg0MCkgbWl0 KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikKKyAqICAgICAgZ2VuZXJpYygxKSBtYWNoaW5l X3VpZF9uYW1lKDIpID0gMS4yLjg0MC4xMTM1NTQuMS4yLjEuMgorICogc3RyaW5nX3VpZF9uYW1l OgorICogICAgICBpc28oMSkgbWVtYmVyLWJvZHkoMikgVVMoODQwKSBtaXQoMTEzNTU0KSBpbmZv c3lzKDEpIGdzc2FwaSgyKQorICogICAgICBnZW5lcmljKDEpIHN0cmluZ191aWRfbmFtZSgzKSA9 IDEuMi44NDAuMTEzNTU0LjEuMi4xLjMKKyAqIHNlcnZpY2VfbmFtZToKKyAqICAgICAgaXNvKDEp IG1lbWJlci1ib2R5KDIpIFVTKDg0MCkgbWl0KDExMzU1NCkgaW5mb3N5cygxKSBnc3NhcGkoMikK KyAqICAgICAgZ2VuZXJpYygxKSBzZXJ2aWNlX25hbWUoNCkgPSAxLjIuODQwLjExMzU1NC4xLjIu MS40CisgKiBleHBvcnRlZF9uYW1lOgorICogICAgICAxKGlzbyksIDMob3JnKSwgNihkb2QpLCAx KGludGVybmV0KSwgNShzZWN1cml0eSksIDYobmFtZXR5cGVzKSwKKyAqICAgICAgICAgIDQoZ3Nz LWFwaS1leHBvcnRlZC1uYW1lKQorICogaG9zdF9iYXNlZF9zZXJ2aWNlX25hbWUgKHYyKToKKyAq ICAgICAgaXNvICgxKSBvcmcgKDMpLCBkb2QgKDYpLCBpbnRlcm5ldCAoMSksIHNlY3VyaXR5ICg1 KSwgbmFtZXR5cGVzKDYpLAorICogICAgICBnc3MtaG9zdC1iYXNlZC1zZXJ2aWNlcygyKQorICov CisKK3N0YXRpYyBnc3NfT0lEX2Rlc2MgY2tfb2lkc1tdID0geworICAgezEwLCAiXDA1MlwyMDZc MTEwXDIwNlwzNjdcMDIyXDAwMVwwMDJcMDAxXDAwMSJ9LAorICAgezEwLCAiXDA1MlwyMDZcMTEw XDIwNlwzNjdcMDIyXDAwMVwwMDJcMDAxXDAwMiJ9LAorICAgezEwLCAiXDA1MlwyMDZcMTEwXDIw NlwzNjdcMDIyXDAwMVwwMDJcMDAxXDAwMyJ9LAorICAgezEwLCAiXDA1MlwyMDZcMTEwXDIwNlwz NjdcMDIyXDAwMVwwMDJcMDAxXDAwNCJ9LAorICAgeyA2LCAiXDA1M1wwMDZcMDAxXDAwNVwwMDZc MDA0In0sCisgICB7IDYsICJcMDUzXDAwNlwwMDFcMDA1XDAwNlwwMDIifSwKK307CisKK3N0YXRp YyBnc3NfT0lEIGNrX2dzc19udF91c2VyX25hbWUgPSBja19vaWRzKzA7CitzdGF0aWMgZ3NzX09J RCBja19nc3NfbnRfbWFjaGluZV91aWRfbmFtZSA9IGNrX29pZHMrMTsKK3N0YXRpYyBnc3NfT0lE IGNrX2dzc19udF9zdHJpbmdfdWlkX25hbWUgPSBja19vaWRzKzI7CitzdGF0aWMgZ3NzX09JRCBj a19nc3NfbnRfc2VydmljZV9uYW1lID0gY2tfb2lkcyszOworc3RhdGljIGdzc19PSUQgY2tfZ3Nz X250X2V4cG9ydGVkX25hbWUgPSBja19vaWRzKzQ7CitzdGF0aWMgZ3NzX09JRCBja19nc3NfbnRf c2VydmljZV9uYW1lX3YyID0gY2tfb2lkcys1OworI2VuZGlmIC8qIE1BQ09TWCAqLworI2VuZGlm IC8qIEZUUF9HU1NBUEkgKi8KKworI2lmZGVmIE9TMgorI2lmZGVmIEZUUF9TUlAKKyNkZWZpbmUg TUFQX0tSWVBUTworI2lmZGVmIFNSUERMTAorI2RlZmluZSBNQVBfU1JQCisjZW5kaWYgLyogU1JQ RExMICovCisjZW5kaWYgLyogRlRQX1NSUCAqLworI2lmZGVmIEZUUF9LUkI0CisjZGVmaW5lIE1B UF9LUkI0CisjaWZkZWYgQ0tfRU5DUllQVElPTgorI2RlZmluZSBNQVBfREVTCisjZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZkZWYgRlRQX0dTU0FQ SQorI2RlZmluZSBNQVBfR1NTQVBJCisjZGVmaW5lIEdTU19PSURTCisjZW5kaWYgLyogRlRQX0dT U0FQSSAqLworI2luY2x1ZGUgImNrb2F0aC5oIgorCitleHRlcm4gaW50IGs5NXN0ZG91dCwgd2hl cmV4W10sIHdoZXJleVtdOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29sb3JjbWQ7CisjZW5kaWYg LyogT1MyICovCisKKyNpZmRlZiBGVFBfS1JCNAorc3RhdGljIGNoYXIgZnRwX3JlYWxtW1JFQUxN X1NaICsgMV07CitzdGF0aWMgS1RFWFRfU1QgZnRwX3RrdDsKKyNpZmRlZiBPUzIKK3N0YXRpYyBM RUFTSF9DUkVERU5USUFMUyBmdHBfY3JlZDsKKyNlbHNlIC8qIE9TMiAqLworc3RhdGljIENSRURF TlRJQUxTIGZ0cF9jcmVkOworI2VuZGlmIC8qIE9TMiAqLworc3RhdGljIE1TR19EQVQgZnRwX21z Z19kYXRhOworc3RhdGljIGRlc19rZXlfc2NoZWR1bGUgZnRwX3NjaGVkOworc3RhdGljIGludCBm b29bNF0gPSB7OTksOTksOTksOTl9OworI2VuZGlmIC8qIEZUUF9LUkI0ICovCisKKy8qIGdldHJl cGx5KCkgZnVuY3Rpb24gY29kZXMgKi8KKworI2RlZmluZSBHUkZfQVVUSCAxCQkJLyogUmVwbHkg dG8gQVVUSCBjb21tYW5kICovCisjZGVmaW5lIEdSRl9GRUFUIDIJCQkvKiBSZXBseSB0byBGRUFU IGNvbW1hbmQgKi8KKworLyogT3BlcmF0aW9uYWwgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBE RUZfVkJNIDAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgdmVyYm9zZSBtb2RlICov CisvKiAjZGVmaW5lIFNFVFZCTSAqLyAgICAgICAgICAgICAgICAgICAgLyogKHNlZSBnZXRyZXBs eSkgKi8KKworI2RlZmluZSBVUkxfT05FRklMRSAgICAgICAgICAgICAgICAgICAgIC8qIEdFVCwg bm90IE1HRVQsIGZvciBGVFAgVVJMICovCisKKyNkZWZpbmUgRlRQX0JVRlNJWiAxMDI0MCAgICAg ICAgICAgICAgICAvKiBNYXggc2l6ZSBmb3IgRlRQIGNtZHMgJiByZXBsaWVzICovCisjZGVmaW5l IFNSVk5BTUxFTiAzMiAgICAgICAgICAgICAgICAgICAgLyogTWF4IGxlbmd0aCBmb3Igc2VydmVy IHR5cGUgbmFtZSAqLworI2RlZmluZSBQV0RTSVogMjU2CisjZGVmaW5lIFBBU1NCVUZTSVogMjU2 CisjZGVmaW5lIFBST01QVFNJWiAyNTYKKworI2lmbmRlZiBNR0VUTUFYICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1heCBvcGVyYW5kcyBmb3IgTUdFVCBjb21tYW5kICovCisjZGVmaW5lIE1H RVRNQVggMTAwMAorI2VuZGlmIC8qIE1HRVRNQVggKi8KKworI2lmZGVmIEZUUF9TUlAKKyNkZWZp bmUgRlVER0VfRkFDVE9SIDEwMAorI2VuZGlmIC8qIEZUUF9TUlAgKi8KKworLyoKKyAgQW1vdW50 IG9mIGdyb3d0aCBmcm9tIGNsZWFydGV4dCB0byBjaXBoZXJ0ZXh0LiAga3JiX21rX3ByaXYgYWRk cyB0aGlzCisgIG51bWJlciBieXRlcy4gIE11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCBhdXRoIHR5 cGUuCisgIEdTU0FQSSBhcHBlYXJzIHRvIGFkZCA1MiBieXRlcywgYnV0IEknbSBub3Qgc3VyZSBp dCBpcyBhIGNvbnN0YW50LS1oYXJ0bWFucworICAzREVTIHJlcXVpcmVzIDU2IGJ5dGVzLiAgTGV0 cyB1c2UgOTYganVzdCB0byBiZSBzdXJlLgorKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisjaWZuZGVm IEZVREdFX0ZBQ1RPUgorI2RlZmluZSBGVURHRV9GQUNUT1IgOTYKKyNlbmRpZiAvKiBGVURHRV9G QUNUT1IgKi8KKyNlbmRpZiAvKiBGVFBfR1NTQVBJICovCisKKyNpZmRlZiBGVFBfS1JCNAorI2lm bmRlZiBGVURHRV9GQUNUT1IKKyNkZWZpbmUgRlVER0VfRkFDVE9SIDMyCisjZW5kaWYgLyogRlVE R0VfRkFDVE9SICovCisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKworI2lmbmRlZiBGVURHRV9GQUNU T1IgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2Ugbm8gYXV0aCB0eXBlcyBkZWZpbmUgaXQg Ki8KKyNkZWZpbmUgRlVER0VfRkFDVE9SIDAKKyNlbmRpZiAvKiBGVURHRV9GQUNUT1IgKi8KKwor I2lmbmRlZiBNQVhIT1NUTkFNRUxFTgorI2RlZmluZSBNQVhIT1NUTkFNRUxFTiA2NAorI2VuZGlm IC8qIE1BWEhPU1ROQU1FTEVOICovCisjZGVmaW5lIE1BWF9ETlNfTkFNRUxFTiAoMTUqKE1BWEhP U1ROQU1FTEVOICsgMSkrMSkKKworLyogRmFzY2lzdCBjb21waWxlciB0b2FkeWluZyAqLworCisj aWZuZGVmIFNFTkRBUkcyVFlQRQorI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE1pZ2h0IGJlIG5lZWRlZCBoZXJlIGFuZCB0aGVyZSAqLworI2RlZmluZSBTRU5EQVJH MlRZUEUgY29uc3QgY2hhciAqCisjZWxzZQorI2RlZmluZSBTRU5EQVJHMlRZUEUgY2hhciAqCisj ZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIFNFTkRBUkcyVFlQRSAqLworCisvKiBDb21t b24gdGV4dCBtZXNzYWdlcyAqLworCitzdGF0aWMgY2hhciAqbm9jeCA9ICI/Tm8gRlRQIGNvbnRy b2wgY29ubmVjdGlvblxuIjsKKworc3RhdGljIGNoYXIgKmZuY25hbVtdID0geworICAicmVuYW1l IiwgIm92ZXJ3cml0ZSIsICJiYWNrdXAiLCAiYXBwZW5kIiwgImRpc2NhcmQiLCAiYXNrIiwgInVw ZGF0ZSIsCisgICJkYXRlcy1kaWZmZXIiLCAiIgorfTsKKworLyogTWFjcm8gZGVmaW5pdGlvbnMg Ki8KKworLyogVXNlZCB0byBzcGVlZCB1cCB0ZXh0LW1vZGUgUFVUcyAqLworI2RlZmluZSB6em91 dChmZCxjKSBcCisoKGZkPDApPygtMSk6KChub3V0Pj11Y2J1ZnNpeik/KHp6c2VuZChmZCxjKSk6 KHVjYnVmW25vdXQrK109YykpKQorCisjZGVmaW5lIENIRUNLQ09OTigpIGlmKCFjb25uZWN0ZWQp e3ByaW50Zihub2N4KTtyZXR1cm4oLTkpO30KKworLyogRXh0ZXJuYWxzICovCisKKyNpZmRlZiBD S19VUkwKK2V4dGVybiBzdHJ1Y3QgdXJsZGF0YSBnX3VybDsKKyNlbmRpZiAvKiBDS19VUkwgKi8K KworI2lmZGVmIERZTkFNSUMKK2V4dGVybiBjaGFyICp6aW5idWZmZXIsICp6b3V0YnVmZmVyOyAg ICAvKiBSZWd1bGFyIEtlcm1pdCBmaWxlIGkvbyAqLworI2Vsc2UKK2V4dGVybiBjaGFyIHppbmJ1 ZmZlcltdLCB6b3V0YnVmZmVyW107CisjZW5kaWYgLyogRFlOQU1JQyAqLworZXh0ZXJuIGNoYXIg KnppbnB0ciwgKnpvdXRwdHI7CitleHRlcm4gaW50IHppbmNudCwgem91dGNudCwgem9idWZzaXpl LCBmbmNhY3Q7CisKKyNpZmRlZiBDS19UTVBESVIKK2V4dGVybiBpbnQgZl90bXBkaXI7ICAgICAg ICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgY2hhbmdlZCB0ZW1wb3JhcmlseSAqLworZXh0ZXJu IGNoYXIgc2F2ZGlyW107ICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgY3VycmVudCBk aXJlY3RvcnkgKi8KK2V4dGVybiBjaGFyICogZGxkaXI7CisjZW5kaWYgLyogQ0tfVE1QRElSICov CisKK2V4dGVybiBjaGFyICogcmZzcGVjLCAqIHNmc3BlYywgKiBzcmZzcGVjLCAqIHJyZnNwZWM7 IC8qIEZvciBXSEVSRSBjb21tYW5kICovCisKK2V4dGVybiB4eF9zdHJwIHh4c3RyaW5nOworZXh0 ZXJuIHN0cnVjdCBrZXl0YWIgb25vZmZbXSwgdHh0YmluW10sIHJwYXRodGFiW107CitleHRlcm4g aW50IG5ycGF0aHRhYiwgeGZpbGV0eXBlLCBwYXR0ZXJucywgZ25mZXJyb3IsIG1vdmluZywgd2hh dCwgcGt0bnVtOworZXh0ZXJuIGludCBzdWNjZXNzLCBuZmlscywgc25kc3JjLCBxdWlldCwgbm9w dXNoLCByZWN1cnNpdmUsIGluc2VydmVyLCBiaW5hcnk7CitleHRlcm4gaW50IGZpbGVwZWVrLCBu c2NhbmZpbGUsIGZzZWNzLCB4ZmVyc3RhdCwgeGZlcm1vZGUsIGxhc3R4ZmVyLCB0c2VjczsKK2V4 dGVybiBpbnQgYmFja2dyZCwgc3BhY2tldHMsIHJwYWNrZXRzLCBzcGt0bCwgcnBrdGwsIHhhc2tt b3JlLCBjbWRfcm93czsKK2V4dGVybiBpbnQgbm9saW5rcywgbXNnZmxnLCBrZWVwOworZXh0ZXJu IENLX09GRl9UIGZzaXplLCBmZmMsIHRmYywgc2VuZHN0YXJ0LCBzbmRzbWFsbGVyLCBzbmRsYXJn ZXIsIHJzX2xlbjsKK2V4dGVybiBsb25nIGZpbGNudCwgeGZzZWNzLCB0ZmNwcywgY3BzLCBvbGRj cHM7CisKKyNpZmRlZiBGVFBfVElNRU9VVAoraW50IGZ0cF90aW1lZF9vdXQgPSAwOworbG9uZyBm dHBfdGltZW91dCA9IDA7CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKworI2lmZGVmIEdGVElN RVIKK2V4dGVybiBDS0ZMT0FUIGZwdHNlY3MsIGZwZnNlY3MsIGZweGZzZWNzOworI2Vsc2UKK2V4 dGVybiBsb25nIHhmc2VjczsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKK2V4dGVybiBjaGFyIGZp bG5hbVtdLCAqIGZpbGVmaWxlLCBteWhvc3RbXTsKK2V4dGVybiBjaGFyICogc25kX21vdmUsICog cmN2X21vdmUsICogc25kX3JlbmFtZSwgKiByY3ZfcmVuYW1lOworZXh0ZXJuIGludCBnX3NraXBi dXAsIHNraXBidXAsIHNlbmRtb2RlOworZXh0ZXJuIGludCBnX2Rpc3BsYSwgZmRpc3BsYSwgZGlz cGxhOworCisjaWZkZWYgTE9DVVMKK2V4dGVybiBpbnQgbG9jdXMsIGF1dG9sb2N1czsKKyNlbmRp ZiAvKiBMT0NVUyAqLworCisjaWZuZGVmIE5PQ1NFVFMKK2V4dGVybiBpbnQgbmZpbGMsIGRjc2V0 NywgZGNzZXQ4LCBmaWxlb3JkZXI7CitleHRlcm4gc3RydWN0IGNzaW5mbyBmY3NpbmZvW107Citl eHRlcm4gc3RydWN0IGtleXRhYiBmY3N0YWJbXTsKK2V4dGVybiBpbnQgZmNoYXJzZXQ7CisjZW5k aWYgLyogTk9DU0VUUyAqLworCitleHRlcm4gY2hhciBzbmRiZWZvcmVbXSwgc25kYWZ0ZXJbXSwg KnNuZGV4Y2VwdFtdOyAvKiBTZWxlY3Rpb24gY3JpdGVyaWEgKi8KK2V4dGVybiBjaGFyIHNuZG5i ZWZvcmVbXSwgc25kbmFmdGVyW10sICpyY3ZleGNlcHRbXTsKK2V4dGVybiBDSEFSIGZlb2w7CisK K2V4dGVybiBjaGFyICogcmVtZGVzdDsKK2V4dGVybiBpbnQgcmVtZmlsZSwgcmVtYXBwZCwgcmVt cGlwZTsKKworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBjbWRfcXVvdGluZzsKKyNpZmRlZiBQ VVRBUlJBWQorZXh0ZXJuIGludCBzbmR4bG8sIHNuZHhoaSwgc25keGluOworZXh0ZXJuIGNoYXIg c25keG5hbVtdOworZXh0ZXJuIGNoYXIgKiphX3B0cltdOyAgICAgICAgICAgICAgICAgIC8qIEFy cmF5IHBvaW50ZXJzICovCitleHRlcm4gaW50IGFfZGltW107ICAgICAgICAgICAgICAgICAgICAg LyogQXJyYXkgZGltZW5zaW9ucyAqLworI2VuZGlmIC8qIFBVVEFSUkFZICovCisjZW5kaWYgLyog Tk9TUEwgKi8KKworI2lmbmRlZiBOT01TRU5EICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1Q VVQgYW5kIEFERCBTRU5ELUxJU1QgbGlzdHMgKi8KK2V4dGVybiBjaGFyICptc2ZpbGVzW107Citl eHRlcm4gaW50IGZpbGVzaW5saXN0OworZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGVoZWFk OworZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGV0YWlsOworZXh0ZXJuIHN0cnVjdCBmaWxl bGlzdCAqIGZpbGVuZXh0OworZXh0ZXJuIGludCBhZGRsaXN0OworZXh0ZXJuIGNoYXIgZnNwZWNb XTsgICAgICAgICAgICAgICAgICAgIC8qIE1vc3QgcmVjZW50IGZpbGVzcGVjICovCitleHRlcm4g aW50IGZzcGVjbGVuOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGZzcGVjW10gYnVm ZmVyICovCisjZW5kaWYgLyogTk9NU0VORCAqLworCitleHRlcm4gaW50IHBpcGVzZW5kOworI2lm ZGVmIFBJUEVTRU5ECitleHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0ZXI7CisjZW5k aWYgLyogUElQRVNFTkQgKi8KKworI2lmZGVmIENLUk9PVAorZXh0ZXJuIGludCBja3Jvb3RlcnI7 CisjZW5kaWYgLyogQ0tST09UICovCisKKyNpZmRlZiBLUkI0CitleHRlcm4gaW50IGtyYjRfYXV0 b2dldDsKK19QUk9UT1RZUChjaGFyICogY2tfa3JiNF9yZWFsbW9maG9zdCwoY2hhciAqKSk7Cisj ZW5kaWYgLyogS1JCNCAqLworCisjaWZkZWYgS1JCNQorZXh0ZXJuIGludCBrcmI1X2F1dG9nZXQ7 CitleHRlcm4gaW50IGtyYjVfZF9ub19hZGRyZXNzZXM7CitfUFJPVE9UWVAoY2hhciAqIGNrX2ty YjVfcmVhbG1vZmhvc3QsKGNoYXIgKikpOworI2VuZGlmIC8qIEtSQjUgKi8KKworI2lmZGVmIERD TURCVUYKK2V4dGVybiBjaGFyICphdG1idWY7ICAgICAgICAgICAgICAgICAgICAvKiBBdG9tIGJ1 ZmZlciAobWFsbG9jJ2QpICovCitleHRlcm4gY2hhciAqY21kYnVmOyAgICAgICAgICAgICAgICAg ICAgLyogQ29tbWFuZCBidWZmZXIgKG1hbGxvYydkKSAqLworZXh0ZXJuIGNoYXIgKmxpbmU7ICAg ICAgICAgICAgICAgICAgICAgIC8qIEJpZyBzdHJpbmcgYnVmZmVyICMxICovCitleHRlcm4gY2hh ciAqdG1wYnVmOyAgICAgICAgICAgICAgICAgICAgLyogQmlnIHN0cmluZyBidWZmZXIgIzIgKi8K KyNlbHNlCitleHRlcm4gY2hhciBhdG1idWZbXTsgICAgICAgICAgICAgICAgICAgLyogVGhlIHNh bWUsIGJ1dCBzdGF0aWMgKi8KK2V4dGVybiBjaGFyIGNtZGJ1ZltdOworZXh0ZXJuIGNoYXIgbGlu ZVtdOworZXh0ZXJuIGNoYXIgdG1wYnVmW107CisjZW5kaWYgLyogRENNREJVRiAqLworCitleHRl cm4gY2hhciAqIGNtYXJnLCAqIGNtYXJnMiwgKiogY21saXN0OyAvKiBGb3Igc2V0dGluZyB1cCBm aWxlIGxpc3RzICovCisKKy8qIFB1YmxpYyB2YXJpYWJsZXMgZGVjbGFyZWQgaGVyZSAqLworCisj aWZkZWYgTk9YRkVSCitpbnQgZnRwZ2V0ICA9ICAxOyAgICAgICAgICAgICAgICAgICAgICAgLyog R0VUL1BVVC9SRU1PVEUgb3JpZW50YXRpb24gRlRQICovCisjZWxzZQoraW50IGZ0cGdldCAgPSAg MjsgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVC9QVVQvUkVNT1RFIG9yaWVudGF0aW9uIEFV VE8gKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KK2ludCBmdHBjb2RlID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBMYXN0IEZUUCByZXNwb25zZSBjb2RlICovCitpbnQgZnRwX2NtZGxpbiA9 IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRlRQIGludm9rZWQgZnJvbSBjb21tYW5kIGxpbmUg Ki8KK2ludCBmdHBfZmFpID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVFAgZmFpbHVy ZSBjb3VudCAqLworaW50IGZ0cF9kZWIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZU UCBkZWJ1Z2dpbmcgKi8KK2ludCBmdHBfZGlzID0gLTE7CQkJLyogRlRQIGRpc3BsYXkgc3R5bGUg Ki8KK2ludCBmdHBfbG9nID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVFAgQXV0by1s b2dpbiAqLworaW50IHNhdl9sb2cgPSAtMTsKK2ludCBmdHBfYWN0aW9uID0gMDsgICAgICAgICAg ICAgICAgICAgICAvKiBGVFAgYWN0aW9uIGZyb20gY29tbWFuZCBsaW5lICovCitpbnQgZnRwX2Rh dGVzID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGZpbGUgZGF0ZXMgZnJvbSBzZXJ2 ZXIgKi8KK2ludCBmdHBfeGZlcm1vZGUgPSBYTU9ERV9BOwkJLyogRlRQLXNwZWNpZmljIHRyYW5z ZmVyIG1vZGUgKi8KKworY2hhciBmdHBfcmVwbHlfc3RyW0ZUUF9CVUZTSVpdID0gIiI7ICAgIC8q IExhc3QgbGluZSBvZiBwcmV2aW91cyByZXBseSAqLworY2hhciBmdHBfc3J2dHlwW1NSVk5BTUxF Tl0gPSB7IE5VTCwgTlVMIH07IC8qIFNlcnZlcidzIHN5c3RlbSB0eXBlICovCitjaGFyIGZ0cF91 c2VyX2hvc3RbTUFYX0ROU19OQU1FTEVOXT0gIiI7IC8qIEZUUCBob3N0bmFtZSBzcGVjaWZpZWQg YnkgdXNlciAqLworY2hhciAqIGZ0cF9ob3N0ID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEZU UCBob3N0bmFtZSAqLworY2hhciAqIGZ0cF9sb2duYW1lID0gTlVMTDsgICAgICAgICAgICAgIC8q IEZUUCB1c2VybmFtZSAqLworY2hhciAqIGZ0cF9yZGlyID0gTlVMTDsgICAgICAgICAgICAgICAg IC8qIFJlbW90ZSBkaXJlY3RvcnkgZnJvbSBjbWRsaW5lICovCitjaGFyICogZnRwX2FwdyA9IE5V TEw7CQkJLyogQW5vbnltb3VzIHBhc3N3b3JkICovCisKKy8qIERlZmluaXRpb25zIGFuZCB0eXBl ZGVmcyBuZWVkZWQgZm9yIHByb3RvdHlwZXMgKi8KKworI2RlZmluZSBzaWdfdCBteV9zaWdfdAor I2RlZmluZSBzaWd0eXBlIFNJR1RZUAordHlwZWRlZiBzaWd0eXBlICgqc2lnX3QpKCk7CisKKy8q IFN0YXRpYyBnbG9iYWwgdmFyaWFibGVzICovCisKK3N0YXRpYyBjaGFyIGZ0cHNuZGJ1ZltGVFBf QlVGU0laKzY0XTsKKworc3RhdGljIGNoYXIgKiBmdHNfc3RvID0gTlVMTDsKKworc3RhdGljIGlu dCBmdHBzbmRyZXQgPSAwOworc3RhdGljIHN0cnVjdCBfZnRwc25kIHsKKyAgICBzaWdfdCBvbGRp bnRyLCBvbGRpbnRwOworICAgIGludCAgICAgICAgICAgIHJlcGx5OworICAgIGludCAgICAgICAg ICAgIGluY3MsCisgICAgICAgICAgICAgICAgICAgb3V0Y3M7CisgICAgY2hhciAqICAgICAgICAg Y21kLCAqIGxvY2FsLCAqIHJlbW90ZTsKKyAgICBpbnQgICAgICAgICAgICBieXRlczsKKyAgICBp bnQgICAgICAgICAgICByZXN0YXJ0OworICAgIGludCAgICAgICAgICAgIHhsYXRlOworICAgIGNo YXIgKiAgICAgICAgIGxtb2RlOworfSBmdHBzbmQ7CisKKy8qCisgIFRoaXMgaXMganVzdCBhIGZp cnN0IHN0YWIgLS0gdGhlc2Ugc3RyaW5ncyBzaG91bGQgbWF0Y2ggaG93IHRoZQorICBjb3JyZXNw b25kaW5nIEZUUCBzZXJ2ZXJzIGlkZW50aWZ5IHRoZW1zZWx2ZXMuCisqLworI2lmZGVmIFVOSVgK K3N0YXRpYyBjaGFyICogbXlvc3R5cGUgPSAiVU5JWCI7CisjZWxzZQorI2lmZGVmIFZNUworLyog bm90IHlldC4uLiAqLworc3RhdGljIGNoYXIgKiBteW9zdHlwZSA9ICJWTVMiOworI2Vsc2UKKyNp ZmRlZiBPUzIKKyNpZmRlZiBOVAorc3RhdGljIGNoYXIgKiBteW9zdHlwZSA9ICJXSU4zMiI7Cisj ZWxzZQorc3RhdGljIGNoYXIgKiBteW9zdHlwZSA9ICJPUy8yIjsKKyNlbmRpZiAvKiBOVCAqLwor I2Vsc2UKK3N0YXRpYyBjaGFyICogbXlvc3R5cGUgPSAiVU5TVVBQT1JURUQiOworI2VuZGlmIC8q IE9TMiAgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisKK3N0YXRpYyBp bnQgbm9pbml0ID0gMDsgICAgICAgICAgICAgICAgICAvKiBEb24ndCBzZW5kIFJFU1QsIFNUUlUs IE1PREUgKi8KK3N0YXRpYyBpbnQgYWxpa2UgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBDbGll bnQvc2VydmVyIGxpa2UgcGxhdGZvcm1zICovCitzdGF0aWMgaW50IGxvY2FsID0gMTsgICAgICAg ICAgICAgICAgICAgLyogU2hhZG93cyBLZXJtaXQgZ2xvYmFsICdsb2NhbCcgKi8KK3N0YXRpYyBp bnQgZG91dCA9IC0xOyAgICAgICAgICAgICAgICAgICAvKiBEYXRhIGNvbm5lY3Rpb24gZmlsZSBk ZXNjcmlwdG9yICovCitzdGF0aWMgaW50IGRweWFjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgLyog RGF0YSB0cmFuc2ZlciBpcyBhY3RpdmUgKi8KK3N0YXRpYyBpbnQgZ2xvYmFsZGluID0gLTE7ICAg ICAgICAgICAgICAvKiBEYXRhIGNvbm5lY3Rpb24gZi5kLiAqLworc3RhdGljIGludCBvdXQyc2Ny ZWVuID0gMDsgICAgICAgICAgICAgIC8qIEdFVCBvdXRwdXQgaXMgdG8gc2NyZWVuICovCitzdGF0 aWMgaW50IGZvcmNldHlwZSA9IDA7ICAgICAgICAgICAgICAgLyogRm9yY2UgdGV4dCBvciBiaW5h cnkgbW9kZSAqLworc3RhdGljIGludCBjYW5jZWxmaWxlID0gMDsgICAgICAgICAgICAgIC8qIEZp bGUgY2FuY2VsZWQgKi8KK3N0YXRpYyBpbnQgY2FuY2VsZ3JvdXAgPSAwOyAgICAgICAgICAgICAv KiBHcm91cCBjYW5jZWxlZCAqLworc3RhdGljIGludCBhbm9ueW1vdXMgPSAwOyAgICAgICAgICAg ICAgIC8qIExvZ2dpbmcgaW4gYXMgYW5vbnltb3VzICovCitzdGF0aWMgaW50IGxvZ2dlZGluID0g MDsgICAgICAgICAgICAgICAgLyogTG9nZ2VkIGluIChvciBub3QpICovCitzdGF0aWMgaW50IHB1 dGVycm9yID0gMDsgICAgICAgICAgICAgICAgLyogV2hhdCB0byBkbyBvbiBQVVQgZXJyb3IgKi8K K3N0YXRpYyBpbnQgZ2V0ZXJyb3IgPSAwOyAgICAgICAgICAgICAgICAvKiBXaGF0IHRvIGRvIG9u IEdFVCBlcnJvciAqLworc3RhdGljIGludCByZnJjID0gMDsgICAgICAgICAgICAgICAgICAgIC8q IHJlbW90ZV9maWxlcygpIHJldHVybiBjb2RlICovCitzdGF0aWMgaW50IG9rcmVzdGFydCA9IDA7 ICAgICAgICAgICAgICAgLyogU2VydmVyIHVuZGVyc3RhbmRzIFJFU1QgKi8KK3N0YXRpYyBpbnQg cHJpbnRsaW5lcyA9IDA7ICAgICAgICAgICAgICAvKiBnZXRyZXBseSgpc2hvdWxkIHByaW50IGRh dGEgbGluZXMgKi8KK3N0YXRpYyBpbnQgaGF2ZXVybCA9IDA7ICAgICAgICAgICAgICAgICAvKiBJ bnZva2VkIGJ5IGNvbW1hbmQtbGluZSBGVFAgVVJMICovCitzdGF0aWMgaW50IG1kdG1vayA9IDE7 CQkJLyogU2VydmVyIHN1cHBvcnRzIE1EVE0gKi8KK3N0YXRpYyBpbnQgc2l6ZW9rID0gMTsKK3N0 YXRpYyBpbnQgZmVhdG9rID0gMTsKK3N0YXRpYyBpbnQgbWxzdG9rID0gMTsKK3N0YXRpYyBpbnQg c3RvdWFyZyA9IDE7CitzdGF0aWMgaW50IHR5cGVzZW50ID0gMDsKK3N0YXRpYyBpbnQgaGF2ZXNp Z2ludCA9IDA7CitzdGF0aWMgbG9uZyBoYXZldHlwZSA9ICAwOworc3RhdGljIENLX09GRl9UIGhh dmVzaXplID0gKENLX09GRl9UKS0xOworc3RhdGljIGNoYXIgKiBoYXZlbWR0bSA9IE5VTEw7Citz dGF0aWMgaW50IG1nZXRtZXRob2QgPSAwOwkJLyogTkxTVCBvciBNTFNEICovCitzdGF0aWMgaW50 IG1nZXRmb3JjZWQgPSAwOworCitzdGF0aWMgaW50IGksIC8qIGosIGssICovIHgsIHksIHo7ICAg ICAgLyogVm9sYXRpbGUgdGVtcG9yYXJpZXMgKi8KK3N0YXRpYyBpbnQgYzAsIGMxOyAgICAgICAg ICAgICAgICAgICAgICAvKiBUZW1wIHZhcmlhYmxlcyBmb3IgY2hhcmFjdGVycyAqLworCitzdGF0 aWMgY2hhciBwdXRwYXRoW0NLTUFYUEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRpYyBjaGFy IGFzbmFtYnVmW0NLTUFYUEFUSCsxXSA9IHsgTlVMLCBOVUwgfTsKKworI2RlZmluZSBSRk5CVUZT SVogNDA5NgkJCS8qIFJlbW90ZSBmaWxlbmFtZSBidWZmZXIgc2l6ZSAqLworCitzdGF0aWMgdW5z aWduZWQgaW50IG1heGJ1ZiA9IDAsIGFjdHVhbGJ1ZiA9IDA7CitzdGF0aWMgQ0hBUiAqdWNidWYg PSBOVUxMOworc3RhdGljIGludCB1Y2J1ZnNpeiA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IG5v dXQgPSAwOyAgICAgICAgICAgLyogTnVtYmVyIG9mIGNoYXJzIGluIHVjYnVmICovCisKK3N0YXRp YyBqbXBfYnVmIHJlY3ZjYW5jZWw7CitzdGF0aWMgam1wX2J1ZiBzZW5kY2FuY2VsOworc3RhdGlj IGptcF9idWYgcHRjYW5jZWw7CitzdGF0aWMgam1wX2J1ZiBqY2FuY2VsOworc3RhdGljIGludCBw dGFiZmxnID0gMDsKKworLyogUHJvdGVjdGlvbiBsZXZlbCBzeW1ib2xzICovCisKKyNkZWZpbmUg RlBMX0NMUiAxICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciAqLworI2RlZmluZSBGUExf U0FGIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhZmUgKi8KKyNkZWZpbmUgRlBMX1BSViAz ICAgICAgICAgICAgICAgICAgICAgICAvKiBQcml2YXRlICovCisjZGVmaW5lIEZQTF9DT04gNCAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29uZmlkZW50aWFsICovCisKKy8qIFN5bWJvbHMgZm9y IGZpbGUgdHlwZXMgcmV0dXJuZWQgYnkgTUxTVC9NTFNEICovCisKKyNkZWZpbmUgRlRZUF9GSUxF IDEJCQkvKiBSZWd1bGFyIGZpbGUgKi8KKyNkZWZpbmUgRlRZUF9ESVIgIDIJCQkvKiBEaXJlY3Rv cnkgKi8KKyNkZWZpbmUgRlRZUF9DRElSIDMJCQkvKiBDdXJyZW50IGRpcmVjdG9yeSAqLworI2Rl ZmluZSBGVFlQX1BESVIgNAkJCS8qIFBhcmVudCBkaXJlY3RvcnkgKi8KKworLyogRmlsZSB0eXBl IHN5bWJvbHMga2V5ZWQgdG8gdGhlIGZpbGUtdHlwZSBzeW1ib2xzIGZyb20gY2tja2VyLmggKi8K KworI2RlZmluZSBGVFRfQVNDIFhZRlRfVCAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJICh0ZXh0 KSAqLworI2RlZmluZSBGVFRfQklOIFhZRlRfQiAgICAgICAgICAgICAgICAgIC8qIEJpbmFyeSAo aW1hZ2UpICovCisjZGVmaW5lIEZUVF9URU4gWFlGVF9YICAgICAgICAgICAgICAgICAgLyogVEVO RVggKFRPUFMtMjApICovCisKKy8qIFNlcnZlciBmZWF0dXJlIHRhYmxlIC0gc2Z0dGFiWzBdID4g MCBtZWFucyBzZXJ2ZXIgc3VwcG9ydHMgRkVBVCBhbmQgT1BUUyAqLworCitzdGF0aWMgaW50IHNm dHRhYlsxNl0gPSB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfTsKKworI2RlZmlu ZSBTRlRfQVVUSCAgMQkJCS8qIEZUUCBzZXJ2ZXIgZmVhdHVyZSBjb2RlcyAqLworI2RlZmluZSBT RlRfTEFORyAgMgorI2RlZmluZSBTRlRfTURUTSAgMworI2RlZmluZSBTRlRfTUxTVCAgNAorI2Rl ZmluZSBTRlRfUEJTWiAgNQorI2RlZmluZSBTRlRfUFJPVCAgNgorI2RlZmluZSBTRlRfUkVTVCAg NworI2RlZmluZSBTRlRfU0laRSAgOAorI2RlZmluZSBTRlRfVFZGUyAgOQorI2RlZmluZSBTRlRf VVRGOCAxMAorCisjZGVmaW5lIENOVl9BVVRPICAyCQkJLyogRlRQIGZpbGVuYW1lIGNvbnZlcnNp b24gKi8KKyNkZWZpbmUgQ05WX0NOViAgIDEKKyNkZWZpbmUgQ05WX0xJVCAgIDAKKworLyogU0VU IEZUUCB2YWx1ZXMgKi8KKworc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBGVFAgdmFsdWVzLi4uICovCisgIGZ0cF9hdXQgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQXV0by1hdXRoZW50aWNhdGlvbiAqLworI2lmZGVmIEZUUF9TRUNVUklUWQor ICBmdHBfY3J5ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG8tZW5jcnlwdGlv biAqLworICBmdHBfY2Z3ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENyZWRlbnRp YWwgZm9yd2FyZGluZyAqLworI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLworICBmdHBfY3BsID0g RlBMX0NMUiwgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgcHJvdGVjdGlvbiBsZXZlbCAq LworICBmdHBfZHBsID0gRlBMX0NMUiwgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgcHJvdGVj dGlvbiBsZXZlbCAqLworI2lmZGVmIEZUUF9QUk9YWQorICBmdHBfcHJ4ID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFVzZSBwcm94eSAqLworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwor ICBzYXZfcHN2ID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgcGFz c2l2ZSBtb2RlICovCisgIGZ0cF9wc3YgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UGFzc2l2ZSBtb2RlICovCisgIGZ0cF9zcGMgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU2VuZCBwb3J0IGNvbW1hbmRzICovCisgIGZ0cF90eXAgPSBGVFRfQVNDLCAgICAgICAgICAg ICAgICAgICAgLyogVHlwZSAqLworICBnZXRfYXV0byA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEF1dG9tYXRpYyB0eXBlIHN3aXRjaGluZyBmb3IgR0VUICovCisgIHRlbmV4ID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBpcyBUZW5leCAqLworICBmdHBfdXNu ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaXF1ZSBzZXJ2ZXIgbmFtZXMgKi8K KyAgZnRwX3BybSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJtaXNzaW9ucyAq LworICBmdHBfY252ID0gQ05WX0FVVE8sCQkJLyogRmlsZW5hbWUgY29udmVyc2lvbiAoMiA9IGF1 dG8pICovCisgIGZ0cF92Ym0gPSBERUZfVkJNLCAgICAgICAgICAgICAgICAgICAgLyogVmVyYm9z ZSBtb2RlICovCisgIGZ0cF92YnggPSBERUZfVkJNLCAgICAgICAgICAgICAgICAgICAgLyogU3Rp Y2t5IHZlcnNpb24gb2Ygc2FtZSAqLworICBmdHBfZXJyID0gMCwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yIGFjdGlvbiAqLworICBmdHBfZm5jID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8KKworI2lmZGVmIENLX1NT TAorc3RhdGljIGludCBmdHBfYnVnX3VzZV9zc2xfdjIgPSAwOyAgICAgIC8qIHVzZSBTU0x2MiBm b3IgQVVUSCBTU0wgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworc3RhdGljIGludAorI2lmZGVm IE5PQ1NFVFMKKyAgZnRwX2NzciA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1v dGUgKHNlcnZlcikgY2hhcmFjdGVyIHNldCAqLworI2Vsc2UKKyAgZnRwX2NzciA9IEZDX1VURjgs CisjZW5kaWYgLyogTk9DU0VUUyAqLworICBmdHBfeGxhID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gb24vb2ZmICovCitpbnQKKyAgZnRw X2NzeCA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1vdGUgY2hhcnNldCBjdXJy ZW50bHkgaW4gdXNlICovCisgIGZ0cF9jc2wgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAg LyogTG9jYWwgY2hhcnNldCBjdXJyZW50bHkgaW4gdXNlICovCisKK3N0YXRpYyBpbnQgZ19mdHBf dHlwID0gRlRUX0FTQzsgICAgICAgICAvKiBGb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgZnRwX3R5 cCAqLworCitjaGFyICogZnRwX25tbCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogL05BTUVM SVNUICovCitjaGFyICogZnRwX3RtcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogVGVtcG9y YXJ5IHN0cmluZyAqLworc3RhdGljIGNoYXIgKiBmdHBfYWNjID0gTlVMTDsgICAgICAgICAgIC8q IEFjY291bnQgc3RyaW5nICovCitzdGF0aWMgY2hhciAqIGF1dGhfdHlwZSA9IE5VTEw7ICAgICAg ICAgLyogQXV0aGVudGljYXRpb24gdHlwZSAqLworc3RhdGljIGNoYXIgKiBzcnZfcmVuYW0gPSBO VUxMOyAgICAgICAgIC8qIFNlcnZlci1yZW5hbWUgc3RyaW5nICovCitGSUxFICogZnBfbm1sID0g TlVMTDsgICAgICAgICAgICAgICAgICAgLyogTmFtZWxpc3QgZmlsZSBwb2ludGVyICovCisKK3N0 YXRpYyBpbnQgY3NvY2tldCA9IC0xOyAgICAgICAgICAgICAgICAvKiBDb250cm9sIHNvY2tldCAq Lworc3RhdGljIGludCBjb25uZWN0ZWQgPSAwOyAgICAgICAgICAgICAgIC8qIENvbm5lY3RlZCB0 byBGVFAgc2VydmVyICovCisvKiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZnRwX3BvcnQgPSAwOyAq LyAvKiBGVFAgcG9ydCAqLyAKKy8qIHN0YXRpYyBpbnQgZnRwX3BvcnQgPSAwOyAqLwkJLyogU01T IDIwMDcvMDIvMTUgKi8KK3N0YXRpYyBpbnQgZnRwX3BvcnQgPSAwOwkJLyogZmRjIDIwMDcvMDgv MzAgKi8KKyNpZmRlZiBGVFBIT1NUCitzdGF0aWMgaW50IGhvc3RjbWQgPSAwOyAgICAgICAgICAg ICAgICAgLyogSGFzIEhPU1QgY29tbWFuZCBiZWVuIHNlbnQgKi8KKyNlbmRpZiAvKiBGVFBIT1NU ICovCitzdGF0aWMgaW50IGZvcm0sIG1vZGUsIHN0cnUsIGJ5dGVzaXplLCBjdXJ0eXBlID0gRlRU X0FTQzsKK3N0YXRpYyBjaGFyIGJ5dGVuYW1lWzhdOworCisvKiBGb3IgcGFyc2luZyByZXBsaWVz IHRvIEZUUCBzZXJ2ZXIgY29tbWFuZCAqLworc3RhdGljIGNoYXIgKnJlcGx5X3BhcnNlLCByZXBs eV9idWZbRlRQX0JVRlNJWl0sICpyZXBseV9wdHI7CisKKyNpZmRlZiBGVFBfUFJPWFkKK3N0YXRp YyBpbnQgcHJveHksIHVuaXhfcHJveHkKKyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KKworc3RhdGlj IGNoYXIgcGFzdls2NF07ICAgICAgICAgICAgICAgICAgIC8qIFBhc3NpdmUtbW9kZSBwb3J0ICov CitzdGF0aWMgaW50IHBhc3NpdmVtb2RlID0gMDsKK3N0YXRpYyBpbnQgc2VuZHBvcnQgPSAwOwor c3RhdGljIGludCBzZXJ2ZXJ0eXBlID0gMDsgICAgICAgICAgICAgIC8qIEZUUCBzZXJ2ZXIncyBP UyB0eXBlICovCisKK3N0YXRpYyBpbnQgdGVzdGluZyA9IDA7CitzdGF0aWMgY2hhciBmdHBjbWRi dWZbRlRQX0JVRlNJWl07CisKKy8qIE1hY3JvIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgVUMo YikgY2tpdG9hKCgoaW50KWIpJjB4ZmYpCisjZGVmaW5lIG56KHgpICgoeCkgPT0gMCA/IDEgOiAo eCkpCisKKy8qIENvbW1hbmQgdGFibGVzIGFuZCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIEZU UF9BQ0MgIDEgICAgICAgICAgICAgICAgICAgICAgLyogRlRQIGNvbW1hbmQga2V5d29yZCBjb2Rl cyAqLworI2RlZmluZSBGVFBfQVBQICAyCisjZGVmaW5lIEZUUF9DV0QgIDMKKyNkZWZpbmUgRlRQ X0NITSAgNAorI2RlZmluZSBGVFBfQ0xTICA1CisjZGVmaW5lIEZUUF9ERUwgIDYKKyNkZWZpbmUg RlRQX0RJUiAgNworI2RlZmluZSBGVFBfR0VUICA4CisjZGVmaW5lIEZUUF9JREwgIDkKKyNkZWZp bmUgRlRQX01ERSAxMAorI2RlZmluZSBGVFBfTURJIDExCisjZGVmaW5lIEZUUF9NR0UgMTIKKyNk ZWZpbmUgRlRQX01LRCAxMworI2RlZmluZSBGVFBfTU9EIDE0CisjZGVmaW5lIEZUUF9NUFUgMTUK KyNkZWZpbmUgRlRQX09QTiAxNgorI2RlZmluZSBGVFBfUFVUIDE3CisjZGVmaW5lIEZUUF9QV0Qg MTgKKyNkZWZpbmUgRlRQX1JHRSAxOQorI2RlZmluZSBGVFBfUkVOIDIwCisjZGVmaW5lIEZUUF9S RVMgMjEKKyNkZWZpbmUgRlRQX0hMUCAyMgorI2RlZmluZSBGVFBfUk1EIDIzCisjZGVmaW5lIEZU UF9TVEEgMjQKKyNkZWZpbmUgRlRQX1NJVCAyNQorI2RlZmluZSBGVFBfU0laIDI2CisjZGVmaW5l IEZUUF9TWVMgMjcKKyNkZWZpbmUgRlRQX1VNQSAyOAorI2RlZmluZSBGVFBfR1VQIDI5CisjZGVm aW5lIEZUUF9VU1IgMzAKKyNkZWZpbmUgRlRQX1FVTyAzMQorI2RlZmluZSBGVFBfVFlQIDMyCisj ZGVmaW5lIEZUUF9GRUEgMzMKKyNkZWZpbmUgRlRQX09QVCAzNAorI2RlZmluZSBGVFBfQ0hLIDM1 CisjZGVmaW5lIEZUUF9WREkgMzYKKyNkZWZpbmUgRlRQX0VOQSAzNworI2RlZmluZSBGVFBfRElT IDM4CisjZGVmaW5lIEZUUF9SRVAgMzkKKworc3RydWN0IGtleXRhYiBncHJ0YWJbXSA9IHsgICAg ICAgICAgICAgIC8qIEdFVC1QVVQtUkVNT1RFIGtleXdvcmRzICovCisgICAgeyAiYXV0byIsICAg IDIsIDAgfSwKKyAgICB7ICJmdHAiLCAgICAgMSwgMCB9LAorICAgIHsgImtlcm1pdCIsICAwLCAw ICB9Cit9OworCitzdGF0aWMgc3RydWN0IGtleXRhYiBxb3JwW10gPSB7ICAgICAgICAgLyogUVVJ VCBvciBQUk9DRUVEIGtleXdvcmRzICovCisgICAgeyAicHJvY2VlZCIsIDAsIDAgfSwgICAgICAg ICAgICAgICAgLyogMCA9IHByb2NlZWQgKi8KKyAgICB7ICJxdWl0IiwgICAgMSwgMCB9ICAgICAg ICAgICAgICAgICAvKiAxID0gcXVpdCAqLworfTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRw Y21kdGFiW10gPSB7ICAgIC8qIEZUUCBjb21tYW5kIHRhYmxlICovCisgICAgeyAiYWNjb3VudCIs ICAgRlRQX0FDQywgMCB9LAorICAgIHsgImFwcGVuZCIsICAgIEZUUF9BUFAsIDAgfSwKKyAgICB7 ICJieWUiLCAgICAgICBGVFBfQ0xTLCAwIH0sCisgICAgeyAiY2QiLCAgICAgICAgRlRQX0NXRCwg MCB9LAorICAgIHsgImNkdXAiLCAgICAgIEZUUF9HVVAsIDAgfSwKKyAgICB7ICJjaGVjayIsICAg ICBGVFBfQ0hLLCAwIH0sCisgICAgeyAiY2htb2QiLCAgICAgRlRQX0NITSwgMCB9LAorICAgIHsg ImNsb3NlIiwgICAgIEZUUF9DTFMsIDAgfSwKKyAgICB7ICJjd2QiLCAgICAgICBGVFBfQ1dELCBD TV9JTlYgfSwKKyAgICB7ICJkZWxldGUiLCAgICBGVFBfTURFLCAwIH0sCisgICAgeyAiZGlyZWN0 b3J5IiwgRlRQX0RJUiwgMCB9LAorICAgIHsgImRpc2FibGUiLCAgIEZUUF9ESVMsIDAgfSwKKyAg ICB7ICJlbmFibGUiLCAgICBGVFBfRU5BLCAwIH0sCisgICAgeyAiZmVhdHVyZXMiLCAgRlRQX0ZF QSwgMCB9LAorICAgIHsgImdldCIsICAgICAgIEZUUF9HRVQsIDAgfSwKKyAgICB7ICJoZWxwIiwg ICAgICBGVFBfSExQLCAwIH0sCisgICAgeyAiaWRsZSIsICAgICAgRlRQX0lETCwgMCB9LAorICAg IHsgImxvZ2luIiwgICAgIEZUUF9VU1IsIENNX0lOViB9LAorICAgIHsgIm1kZWxldGUiLCAgIEZU UF9NREUsIENNX0lOViB9LAorICAgIHsgIm1nZXQiLCAgICAgIEZUUF9NR0UsIDAgfSwKKyAgICB7 ICJta2RpciIsICAgICBGVFBfTUtELCAwIH0sCisgICAgeyAibW9kdGltZSIsICAgRlRQX01PRCwg MCB9LAorICAgIHsgIm1wdXQiLCAgICAgIEZUUF9NUFUsIDAgfSwKKyAgICB7ICJvcGVuIiwgICAg ICBGVFBfT1BOLCAwIH0sCisgICAgeyAib3B0IiwgICAgICAgRlRQX09QVCwgQ01fSU5WfENNX0FC UiB9LAorICAgIHsgIm9wdHMiLCAgICAgIEZUUF9PUFQsIENNX0lOViB9LAorICAgIHsgIm9wdGlv bnMiLCAgIEZUUF9PUFQsIDAgfSwKKyAgICB7ICJwdXQiLCAgICAgICBGVFBfUFVULCAwIH0sCisg ICAgeyAicHdkIiwgICAgICAgRlRQX1BXRCwgMCB9LAorICAgIHsgInF1aXQiLCAgICAgIEZUUF9D TFMsIENNX0lOViB9LAorICAgIHsgInF1b3RlIiwgICAgIEZUUF9RVU8sIDAgfSwKKyAgICB7ICJy ZWdldCIsICAgICBGVFBfUkdFLCAwIH0sCisgICAgeyAicmVuYW1lIiwgICAgRlRQX1JFTiwgMCB9 LAorICAgIHsgInJlcHV0IiwgICAgIEZUUF9SRVAsIDAgfSwKKyAgICB7ICJyZXNlbmQiLCAgICBG VFBfUkVQLCBDTV9JTlYgfSwKKyAgICB7ICJyZXNldCIsICAgICBGVFBfUkVTLCAwIH0sCisgICAg eyAicm1kaXIiLCAgICAgRlRQX1JNRCwgMCB9LAorICAgIHsgInNlbmQiLCAgICAgIEZUUF9QVVQs IENNX0lOViB9LAorICAgIHsgInNpdGUiLCAgICAgIEZUUF9TSVQsIDAgfSwKKyAgICB7ICJzaXpl IiwgICAgICBGVFBfU0laLCAwIH0sCisgICAgeyAic3RhdHVzIiwgICAgRlRQX1NUQSwgMCB9LAor ICAgIHsgInN5c3RlbSIsICAgIEZUUF9TWVMsIDAgfSwKKyAgICB7ICJ0eXBlIiwgICAgICBGVFBf VFlQLCAwIH0sCisgICAgeyAidW1hc2siLCAgICAgRlRQX1VNQSwgMCB9LAorICAgIHsgInVwIiwg ICAgICAgIEZUUF9HVVAsIENNX0lOViB9LAorICAgIHsgInVzZXIiLCAgICAgIEZUUF9VU1IsIDAg fSwKKyAgICB7ICJ2ZGlyZWN0b3J5IixGVFBfVkRJLCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9 Oworc3RhdGljIGludCBuZnRwY21kID0gKHNpemVvZihmdHBjbWR0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKSAtIDE7CisKKyNkZWZpbmUgT1BOX0FOTyAxCQkJLyogRlRQIE9QRU4gc3dpdGNo IGNvZGVzICovCisjZGVmaW5lIE9QTl9QU1cgMgorI2RlZmluZSBPUE5fVVNSIDMKKyNkZWZpbmUg T1BOX0FDQyA0CisjZGVmaW5lIE9QTl9BQ1QgNQorI2RlZmluZSBPUE5fUFNWIDYKKyNkZWZpbmUg T1BOX1RMUyA3CisjZGVmaW5lIE9QTl9OSU4gOAorI2RlZmluZSBPUE5fTk9MIDkKKworI2lmZGVm IEZUUF9TRUNVUklUWQorI2lmZGVmIENLX1NTTAorI2RlZmluZSBVU0VUTFNUQUIKK3N0YXRpYyBz dHJ1Y3Qga2V5dGFiIHRsc3RhYltdID0geyAgICAgICAvKiBGVFAgU1NML1RMUyBzd2l0Y2hlcyAq LworICAgIHsgIi9zc2wiLCAgICAgICBPUE5fVExTLCAwICAgIH0sCisgICAgeyAiL3RscyIsICAg ICAgIE9QTl9UTFMsIDAgICAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG50 bHN0YWIgPSAoc2l6ZW9mKHRsc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KKworc3RhdGljIHN0 cnVjdCBrZXl0YWIgZnRwc3dpdGFiW10gPSB7ICAgIC8qIEZUUCBjb21tYW5kIHN3aXRjaGVzICov CisgICAgeyAiL2FjY291bnQiLCAgIE9QTl9BQ0MsIENNX0FSRyB9LAorICAgIHsgIi9hY3RpdmUi LCAgICBPUE5fQUNULCAwICAgICAgfSwKKyAgICB7ICIvYW5vbnltb3VzIiwgT1BOX0FOTywgMCAg ICAgIH0sCisgICAgeyAiL25vaW5pdCIsICAgIE9QTl9OSU4sIDAgICAgICB9LAorICAgIHsgIi9u b2xvZ2luIiwgICBPUE5fTk9MLCAwICAgICAgfSwKKyAgICB7ICIvcGFzc2l2ZSIsICAgT1BOX1BT ViwgMCAgICAgIH0sCisgICAgeyAiL3Bhc3N3b3JkIiwgIE9QTl9QU1csIENNX0FSRyB9LAorICAg IHsgIi91c2VyIiwgICAgICBPUE5fVVNSLCBDTV9BUkcgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307 CitzdGF0aWMgaW50IG5mdHBzd2kgPSAoc2l6ZW9mKGZ0cHN3aXRhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpIC0gMTsKKworLyogRlRQIHsgRU5BQkxFLCBESVNBQkxFIH0gaXRlbXMgKi8KKwor I2RlZmluZSBFTkFfRkVBVCAxCisjZGVmaW5lIEVOQV9NRFRNIDIKKyNkZWZpbmUgRU5BX01MU1Qg MworI2RlZmluZSBFTkFfU0laRSA0CisjZGVmaW5lIEVOQV9BVVRIIDUKKworc3RhdGljIHN0cnVj dCBrZXl0YWIgZnRwZW5hdGFiW10gPSB7CisgICAgeyAiQVVUSCIsICBFTkFfQVVUSCwgMCB9LAor ICAgIHsgIkZFQVQiLCAgRU5BX0ZFQVQsIDAgfSwKKyAgICB7ICJNRFRNIiwgIEVOQV9NRFRNLCAw IH0sCisgICAgeyAiTUwiLCAgICBFTkFfTUxTVCwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIk1M UyIsICAgRU5BX01MU1QsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJNTFNEIiwgIEVOQV9NTFNU LCBDTV9JTlYgfSwKKyAgICB7ICJNTFNUIiwgIEVOQV9NTFNULCAwIH0sCisgICAgeyAiU0laRSIs ICBFTkFfU0laRSwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmZ0cGVu YSA9IChzaXplb2YoZnRwZW5hdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisv KiBTRVQgRlRQIGNvbW1hbmQga2V5d29yZCBpbmRpY2VzICovCisKKyNkZWZpbmUgRlRTX0FVVCAg MSAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvYXV0aGVudGljYXRpb24gKi8KKyNkZWZpbmUg RlRTX0NSWSAgMiAgICAgICAgICAgICAgICAgICAgICAvKiBFbmNyeXB0aW9uICovCisjZGVmaW5l IEZUU19MT0cgIDMgICAgICAgICAgICAgICAgICAgICAgLyogQXV0b2xvZ2luICovCisjZGVmaW5l IEZUU19DUEwgIDQgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBwcm90ZWN0aW9uIGxl dmVsICovCisjZGVmaW5lIEZUU19DRlcgIDUgICAgICAgICAgICAgICAgICAgICAgLyogQ3JlZGVu dGlhbHMgZm9yd2FyZGluZyAqLworI2RlZmluZSBGVFNfRFBMICA2ICAgICAgICAgICAgICAgICAg ICAgIC8qIERhdGEgcHJvdGVjdGlvbiBsZXZlbCAqLworI2RlZmluZSBGVFNfREJHICA3ICAgICAg ICAgICAgICAgICAgICAgIC8qIERlYnVnZ2luZyAqLworI2RlZmluZSBGVFNfUFNWICA4ICAgICAg ICAgICAgICAgICAgICAgIC8qIFBhc3NpdmUgbW9kZSAqLworI2RlZmluZSBGVFNfU1BDICA5ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcG9ydCBjb21tYW5kcyAqLworI2RlZmluZSBGVFNf VFlQIDEwICAgICAgICAgICAgICAgICAgICAgIC8qIChmaWxlKSBUeXBlICovCisjZGVmaW5lIEZU U19VU04gMTEgICAgICAgICAgICAgICAgICAgICAgLyogVW5pcXVlIHNlcnZlciBuYW1lcyAoZm9y IGZpbGVzKSAqLworI2RlZmluZSBGVFNfVkJNIDEyICAgICAgICAgICAgICAgICAgICAgIC8qIFZl cmJvc2UgbW9kZSAqLworI2RlZmluZSBGVFNfQVRQIDEzICAgICAgICAgICAgICAgICAgICAgIC8q IEF1dGhlbnRpY2F0aW9uIHR5cGUgKi8KKyNkZWZpbmUgRlRTX0NOViAxNCAgICAgICAgICAgICAg ICAgICAgICAvKiBGaWxlbmFtZSBjb252ZXJzaW9uICovCisjZGVmaW5lIEZUU19UU1QgMTUgICAg ICAgICAgICAgICAgICAgICAgLyogVGVzdCAocHJvZ3Jlc3MpIG1lc3NhZ2VzICovCisjZGVmaW5l IEZUU19QUk0gMTYgICAgICAgICAgICAgICAgICAgICAgLyogKGZpbGUpIFBlcm1pc3Npb25zICov CisjZGVmaW5lIEZUU19YTEEgMTcgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnNldCB0cmFu c2xhdGlvbiAqLworI2RlZmluZSBGVFNfQ1NSIDE4ICAgICAgICAgICAgICAgICAgICAgIC8qIFNl cnZlciBjaGFyc2V0ICovCisjZGVmaW5lIEZUU19FUlIgMTkgICAgICAgICAgICAgICAgICAgICAg LyogRXJyb3IgYWN0aW9uICovCisjZGVmaW5lIEZUU19GTkMgMjAgICAgICAgICAgICAgICAgICAg ICAgLyogQ29sbGlzaW9uICovCisjZGVmaW5lIEZUU19TUlAgMjEgICAgICAgICAgICAgICAgICAg ICAgLyogU1JQIG9wdGlvbnMgKi8KKyNkZWZpbmUgRlRTX0dGVCAyMiAgICAgICAgICAgICAgICAg ICAgICAvKiBHRVQgYXV0b21hdGljIGZpbGUtdHlwZSBzd2l0Y2hpbmcgKi8KKyNkZWZpbmUgRlRT X0RBVCAyMyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgZmlsZSBkYXRlcyAqLworI2RlZmlu ZSBGVFNfU1RPIDI0CQkJLyogU2VydmVyIHRpbWUgb2Zmc2V0ICovCisjZGVmaW5lIEZUU19BUFcg MjUJCQkvKiBBbm9ueW1vdXMgcGFzc3dvcmQgKi8KKyNkZWZpbmUgRlRTX0RJUyAyNgkJCS8qIEZp bGUtdHJhbnNmZXIgZGlzcGxheSBzdHlsZSAqLworI2RlZmluZSBGVFNfQlVHIDI3ICAgICAgICAg ICAgICAgICAgICAgIC8qIEJ1ZyhzKSAqLworI2RlZmluZSBGVFNfVE1PIDI4CQkJLyogVGltZW91 dCAqLworCisvKiBGVFAgQlVHUyAqLworCisjZGVmaW5lIEZUQl9TVjIgIDEgICAgICAgICAgICAg ICAgICAgICAgLyogdXNlIFNTTHYyICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cGJ1Z3Rh YltdID0geworICAgIHsgInVzZS1zc2wtdjIiLCAgICAgRlRCX1NWMiwgICAgICAgIDAgfQorfTsK K3N0YXRpYyBpbnQgbmZ0cGJ1ZyA9IChzaXplb2YoZnRwYnVndGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSk7CisKKy8qIEZUUCBQVVQgb3B0aW9ucyAobXV0dWFsbHkgZXhjbHVzaXZlLCBub3Qg YSBiaXRtYXNrKSAqLworCisjZGVmaW5lIFBVVF9VUEQgMSAgICAgICAgICAgICAgICAgICAgICAg LyogVXBkYXRlICovCisjZGVmaW5lIFBVVF9SRVMgMiAgICAgICAgICAgICAgICAgICAgICAgLyog UmVzdGFydCAqLworI2RlZmluZSBQVVRfU0lNIDQgICAgICAgICAgICAgICAgICAgICAgIC8qIFNp bXVsYXRpb24gKi8KKyNkZWZpbmUgUFVUX0RJRiA4CQkJLyogRGF0ZXMgRGlmZmVyICovCisKK3N0 YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cGNvbHh0YWJbXSA9IHsgLyogU0VUIEZUUCBDT0xMSVNJT04g b3B0aW9ucyAqLworI2lmbmRlZiBNQUMKKyAgICB7ICJhcHBlbmQiLCAgICBYWUZYX0EsIDAgfSwg ICAgICAgICAvKiBhcHBlbmQgdG8gb2xkIGZpbGUgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNpZmRl ZiBDT01NRU5UCisgICAgeyAiYXNrIiwgICAgICAgWFlGWF9RLCAwIH0sICAgICAgICAgLyogYXNr IHdoYXQgdG8gZG8gKG5vdCBpbXBsZW1lbnRlZCkgKi8KKyNlbmRpZgorICAgIHsgImJhY2t1cCIs ICAgIFhZRlhfQiwgMCB9LCAgICAgICAgIC8qIHJlbmFtZSBvbGQgZmlsZSAqLworI2lmbmRlZiBN QUMKKyAgICB7ICJkYXRlcy1kaWZmZXIiLCBYWUZYX00sIDAgfSwJLyogYWNjZXB0IGlmIGRhdGVz IGRpZmZlciAqLworICAgIHsgImRpc2NhcmQiLCAgIFhZRlhfRCwgMCB9LCAgICAgICAgIC8qIGRv bid0IGFjY2VwdCBuZXcgZmlsZSAqLworICAgIHsgIm5vLXN1cGVyc2VkZSIsIFhZRlhfRCwgQ01f SU5WIH0sIC8qIGRpdHRvIChNU0sgY29tcGF0aWJpbGl0eSkgKi8KKyNlbmRpZiAvKiBNQUMgKi8K KyAgICB7ICJvdmVyd3JpdGUiLCBYWUZYX1gsIDAgfSwgICAgICAgICAvKiBvdmVyd3JpdGUgdGhl IG9sZCBmaWxlICovCisgICAgeyAicmVuYW1lIiwgICAgWFlGWF9SLCAwIH0sICAgICAgICAgLyog cmVuYW1lIHRoZSBpbmNvbWluZyBmaWxlICovCisjaWZuZGVmIE1BQyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVGhpcyBjcmFzaGVzIE1hYyBLZXJtaXQuICovCisgICAgeyAidXBkYXRl IiwgICAgWFlGWF9VLCAwIH0sICAgICAgICAgLyogcmVwbGFjZSBpZiBuZXdlciAqLworI2VuZGlm IC8qIE1BQyAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmZ0cGNvbHggPSAo c2l6ZW9mKGZ0cGNvbHh0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKworI2lm ZGVmIEZUUF9TRUNVUklUWQorLyogRlRQIGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMgKi8KKworI2Rl ZmluZSBGVEFfQVVUTyAwICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG8gKi8KKyNkZWZpbmUg RlRBX1NSUCAgMSAgICAgICAgICAgICAgICAgICAgICAvKiBTUlAgKi8KKyNkZWZpbmUgRlRBX0dL NSAgMiAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA1ICovCisjZGVmaW5lIEZUQV9L NCAgIDMgICAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCAqLworI2RlZmluZSBGVEFf U1NMICA0ICAgICAgICAgICAgICAgICAgICAgIC8qIFNTTCAqLworI2RlZmluZSBGVEFfVExTICA1 ICAgICAgICAgICAgICAgICAgICAgIC8qIFRMUyAqLworCisvKiBGVFAgYXV0aGVudGljYXRpb24g dHlwZXMgKi8KKworI2RlZmluZSBGVFBBVFlQUyA4CitzdGF0aWMgaW50IGZ0cF9hdXRoX3R5cGVb RlRQQVRZUFNdID0geworI2lmZGVmIEZUUF9HU1NBUEkKKyAgICBGVEFfR0s1LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBHU1NBUEkgS2VyYmVyb3MgNSAqLworI2VuZGlmIC8qIEZUUF9H SzUgKi8KKyNpZmRlZiBGVFBfU1JQCisgICAgRlRBX1NSUCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU1JQICovCisjZW5kaWYgLyogRlRQX1NSUCAqLworI2lmZGVmIEZUUF9LUkI0Cisg ICAgRlRBX0s0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCAqLwor I2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZkZWYgQ0tfU1NMCisgICAgRlRBX1RMUywgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVExTICovCisgICAgRlRBX1NTTCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU1NMICovCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgMAorfTsK Kworc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwYXV0aFtdID0geyAgICAgIC8qIFNFVCBGVFAgQVVU SFRZUEUgY21kIHRhYmxlICovCisgICAgeyAiYXV0b21hdGljIiwgRlRBX0FVVE8sICBDTV9JTlYg fSwKKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgeyAiZ3NzYXBpLWtyYjUiLCBGVEFfR0s1LCAwIH0s CisjZW5kaWYgLyogRlRQX0dTU0FQSSAqLworI2lmZGVmIEZUUF9LUkI0CisgICAgeyAiazQiLCAg ICAgICBGVEFfSzQsICAgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBGVFBfS1JCNCAqLworI2lmZGVm IEZUUF9HU1NBUEkKKyAgICB7ICJrNSIsICAgICAgICBGVEFfR0s1LCAgIENNX0lOViB9LAorI2Vu ZGlmIC8qIEZUUF9HU1NBUEkgKi8KKyNpZmRlZiBGVFBfS1JCNAorICAgIHsgImtlcmJlcm9zNCIs IEZUQV9LNCwgICAgMCB9LAorI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZkZWYgRlRQX0dTU0FQ SQorICAgIHsgImtlcmJlcm9zNSIsIEZUQV9HSzUsICAgQ01fSU5WIH0sCisjZW5kaWYgLyogRlRQ X0dTU0FQSSAqLworI2lmZGVmIEZUUF9LUkI0CisgICAgeyAia2VyYmVyb3NfaXYiLEZUQV9LNCwg ICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBGVFBfS1JCNCAqLworI2lmZGVmIEZUUF9HU1NBUEkKKyAg ICB7ICJrZXJiZXJvc192IiwgRlRBX0dLNSwgIENNX0lOViB9LAorI2VuZGlmIC8qIEZUUF9HU1NB UEkgKi8KKyNpZmRlZiBGVFBfS1JCNAorICAgIHsgImtyYjQiLCAgICAgRlRBX0s0LCAgICAgQ01f SU5WIH0sCisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgeyAi a3JiNSIsICAgICBGVEFfR0s1LCAgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBGVFBfR1NTQVBJICov CisjaWZkZWYgRlRQX1NSUAorICAgIHsgInNycCIsICAgICAgRlRBX1NSUCwgICAgIDAgfSwKKyNl bmRpZiAvKiBGVFBfU1JQICovCisjaWZkZWYgQ0tfU1NMCisgICAgeyAic3NsIiwgICAgICBGVEFf U1NMLCAgICAgMCB9LAorICAgIHsgInRscyIsICAgICAgRlRBX1RMUywgICAgIDAgfSwKKyNlbmRp ZiAvKiBDS19TU0wgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5mdHBhdXRo ID0gKHNpemVvZihmdHBhdXRoKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisjaWZk ZWYgRlRQX1NSUAorI2RlZmluZSBTUlBfQ0lQSEVSIDEKKyNkZWZpbmUgU1JQX0hBU0ggICAyCitz dGF0aWMgc3RydWN0IGtleXRhYiBmdHBzcnBbXSA9IHsgICAgICAvKiBTRVQgRlRQIFNSUCBjb21t YW5kIHRhYmxlICovCisgICAgeyAiY2lwaGVyIiwgICBTUlBfQ0lQSEVSLCAgICAgMCB9LAorICAg IHsgImhhc2giLCAgICAgU1JQX0hBU0gsICAgICAgIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307 CitzdGF0aWMgaW50IG5mdHBzcnAgPSAoc2l6ZW9mKGZ0cHNycCkgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpIC0gMTsKKyNlbmRpZiAvKiBGVFBfU1JQICovCisjZW5kaWYgLyogRlRQX1NFQ1VSSVRZ ICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cHNldFtdID0geyAgICAgICAvKiBTRVQgRlRQ IGNvbW1tYW5kIHRhYmxlICovCisgICAgeyAiYW5vbnltb3VzLXBhc3N3b3JkIiwgICAgICAgRlRT X0FQVywgMCB9LAorI2lmZGVmIEZUUF9TRUNVUklUWQorICAgIHsgImF1dGh0eXBlIiwgICAgICAg ICAgICAgICAgIEZUU19BVFAsIDAgfSwKKyAgICB7ICJhdXRvYXV0aGVudGljYXRpb24iLCAgICAg ICBGVFNfQVVULCAwIH0sCisgICAgeyAiYXV0b2VuY3J5cHRpb24iLCAgICAgICAgICAgRlRTX0NS WSwgMCB9LAorI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLworICAgIHsgImF1dG9sb2dpbiIsICAg ICAgICAgICAgICAgIEZUU19MT0csIDAgfSwKKyAgICB7ICJidWciLCAgICAgICAgICAgICAgICAg ICAgICBGVFNfQlVHLCAwIH0sCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJjaGFyYWN0ZXItc2V0 LXRyYW5zbGF0aW9uIixGVFNfWExBLCAwIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIHsg ImNvbGxpc2lvbiIsICAgICAgICAgICAgICAgIEZUU19GTkMsIDAgfSwKKyNpZmRlZiBGVFBfU0VD VVJJVFkKKyAgICB7ICJjb21tYW5kLXByb3RlY3Rpb24tbGV2ZWwiLCBGVFNfQ1BMLCAwIH0sCisg ICAgeyAiY3BsIiwgICAgICAgICAgICAgICAgICAgICAgRlRTX0NQTCwgQ01fSU5WIH0sCisgICAg eyAiY3JlZGVudGlhbC1mb3J3YXJkaW5nIiwgICAgRlRTX0NGVywgMCB9LAorICAgIHsgImRhIiwg ICAgICAgICAgICAgICAgICAgICAgIEZUU19EQVQsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJk YXRhLXByb3RlY3Rpb24tbGV2ZWwiLCAgICBGVFNfRFBMLCAwIH0sCisjZW5kaWYgLyogRlRQX1NF Q1VSSVRZICovCisgICAgeyAiZGF0ZXMiLCAgICAgICAgICAgICAgICAgICAgRlRTX0RBVCwgMCB9 LAorICAgIHsgImRlYnVnIiwgICAgICAgICAgICAgICAgICAgIEZUU19EQkcsIDAgfSwKKyAgICB7 ICJkaXNwbGF5IiwgICAgICAgICAgICAgICAgICBGVFNfRElTLCAwIH0sCisjaWZkZWYgRlRQX1NF Q1VSSVRZCisgICAgeyAiZHBsIiwgICAgICAgICAgICAgICAgICAgICAgRlRTX0RQTCwgQ01fSU5W IH0sCisjZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCisgICAgeyAiZXJyb3ItYWN0aW9uIiwgICAg ICAgICAgICAgRlRTX0VSUiwgMCB9LAorICAgIHsgImZpbGVuYW1lcyIsICAgICAgICAgICAgICAg IEZUU19DTlYsIDAgfSwKKyAgICB7ICJnZXQtZmlsZXR5cGUtc3dpdGNoaW5nIiwgICBGVFNfR0ZU LCAwIH0sCisgICAgeyAicGFzc2l2ZS1tb2RlIiwgICAgICAgICAgICAgRlRTX1BTViwgMCB9LAor ICAgIHsgInBhc3YiLCAgICAgICAgICAgICAgICAgICAgIEZUU19QU1YsIENNX0lOViB9LAorICAg IHsgInBlcm1pc3Npb25zIiwgICAgICAgICAgICAgIEZUU19QUk0sIDAgfSwKKyAgICB7ICJwcm9n cmVzcy1tZXNzYWdlcyIsICAgICAgICBGVFNfVFNULCAwIH0sCisgICAgeyAic2VuZC1wb3J0LWNv bW1hbmRzIiwgICAgICAgRlRTX1NQQywgMCB9LAorI2lmbmRlZiBOT0NTRVRTCisgICAgeyAic2Vy dmVyLWNoYXJhY3Rlci1zZXQiLCAgICAgRlRTX0NTUiwgMCB9LAorI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KKyAgICB7ICJzZXJ2ZXItdGltZS1vZmZzZXQiLCAgICAgICBGVFNfU1RPLCAwIH0sCisjaWZk ZWYgRlRQX1NSUAorICAgIHsgInNycCIsICAgICAgICAgICAgICAgICAgICAgIEZUU19TUlAsIDAg fSwKKyNlbHNlCisgICAgeyAic3JwIiwgICAgICAgICAgICAgICAgICAgICAgRlRTX1NSUCwgQ01f SU5WIH0sCisjZW5kaWYgLyogRlRQX1NSUCAqLworI2lmZGVmIEZUUF9USU1FT1VUCisgICAgeyAi dGltZW91dCIsICAgICAgICAgICAgICAgICAgRlRTX1RNTywgMCB9LAorI2VuZGlmCS8qIEZUUF9U SU1FT1VUICovCisgICAgeyAidHlwZSIsICAgICAgICAgICAgICAgICAgICAgRlRTX1RZUCwgMCB9 LAorICAgIHsgInVuaXF1ZS1zZXJ2ZXItbmFtZXMiLCAgICAgIEZUU19VU04sIDAgfSwKKyAgICB7 ICJ2ZXJib3NlLW1vZGUiLCAgICAgICAgICAgICBGVFNfVkJNLCAwIH0sCisgICAgeyAiIiwgMCwg MCB9Cit9Oworc3RhdGljIGludCBuZnRwc2V0ID0gKHNpemVvZihmdHBzZXQpIC8gc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpKSAtIDE7CisKKy8qCisgIEdFVCBhbmQgUFVUIHN3aXRjaGVzIGFyZSBhcHBy b3hpbWF0ZWx5IHRoZSBzYW1lIGFzIEtlcm1pdCBHRVQgYW5kIFNFTkQsCisgIGFuZCB1c2UgdGhl IHNhbWUgU05EX3h4eCBkZWZpbml0aW9ucywgYnV0IGhpamFjayBhIGNvdXBsZSBmb3IgRlRQIHVz ZS4KKyAgRG9uJ3QganVzdCBtYWtlIHVwIG5ldyBvbmVzLCBzaW5jZSB0aGUgbnVtYmVyIG9mIFNO RF94eHggb3B0aW9ucyBtdXN0IGJlCisgIGtub3duIGluIGFkdmFuY2UgZm9yIHRoZSBzd2l0Y2gt cGFyc2luZyBhcnJheXMuCisqLworI2RlZmluZSBTTkRfVVNOIFNORF9QUk8gICAgICAgICAgICAg ICAgIC8qIC9VTklRVUUgaW5zdGVhZCBvZiAvUFJPVE9DT0wgKi8KKyNkZWZpbmUgU05EX1BSTSBT TkRfUElQICAgICAgICAgICAgICAgICAvKiAvUEVSTUlTU0lPTlMgaW5zdGVhZCBvZiAvUElQRVMg Ki8KKyNkZWZpbmUgU05EX1RFTiBTTkRfQ0FMICAgICAgICAgICAgICAgICAvKiAvVEVORVggaW5z dGVhZCBvZiAvQ0FMSUJSQVRFICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHB1dHN3aVtdID0g eyAgICAgICAvKiBGVFAgUFVUIHN3aXRjaCB0YWJsZSAqLworICAgIHsgIi9hZnRlciIsICAgICAg ICAgICAgICAgIFNORF9BRlQsIENNX0FSRyB9LAorI2lmZGVmIFBVVEFSUkFZCisgICAgeyAiL2Fy cmF5IiwgICAgICAgICAgICAgICAgU05EX0FSUiwgQ01fQVJHIH0sCisjZW5kaWYgLyogUFVUQVJS QVkgKi8KKyAgICB7ICIvYXMiLCAgICAgICAgICAgICAgICAgICBTTkRfQVNOLCBDTV9BUkd8Q01f SU5WfENNX0FCUiB9LAorICAgIHsgIi9hcy1uYW1lIiwgICAgICAgICAgICAgIFNORF9BU04sIENN X0FSRyB9LAorICAgIHsgIi9hc2NpaSIsICAgICAgICAgICAgICAgIFNORF9UWFQsIENNX0lOViB9 LAorICAgIHsgIi9iIiwgICAgICAgICAgICAgICAgICAgIFNORF9CSU4sIENNX0lOVnxDTV9BQlIg fSwKKyAgICB7ICIvYmVmb3JlIiwgICAgICAgICAgICAgICBTTkRfQkVGLCBDTV9BUkcgfSwKKyAg ICB7ICIvYmluYXJ5IiwgICAgICAgICAgICAgICBTTkRfQklOLCAwIH0sCisjaWZkZWYgUFVUUElQ RQorICAgIHsgIi9jb21tYW5kIiwgICAgICAgICAgICAgIFNORF9DTUQsIENNX1BTSCB9LAorI2Vu ZGlmIC8qIFBVVFBJUEUgKi8KKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIHdvcmtzIGJ1dCBpdCdz IGRhbmdlcm91cyAqLworI2lmZGVmIERPVVBEQVRFCisgICAgeyAiL2RhdGVzLWRpZmZlciIsICAg ICAgICAgU05EX0RJRiwgQ01fSU5WIH0sCisjZW5kaWYgLyogRE9VUERBVEUgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgeyAiL2RlbGV0ZSIsICAgICAgICAgICAgICAgU05EX0RFTCwgMCB9 LAorI2lmZGVmIFVOSVhPUk9TSworICAgIHsgIi9kb3RmaWxlcyIsICAgICAgICAgICAgIFNORF9E T1QsIDAgfSwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyAgICB7ICIvZXJyb3ItYWN0aW9uIiwg ICAgICAgICBTTkRfRVJSLCBDTV9BUkcgfSwKKyAgICB7ICIvZXhjZXB0IiwgICAgICAgICAgICAg ICBTTkRfRVhDLCBDTV9BUkcgfSwKKyAgICB7ICIvZmlsZW5hbWVzIiwgICAgICAgICAgICBTTkRf TkFNLCBDTV9BUkcgfSwKKyNpZmRlZiBQSVBFU0VORAorI2lmbmRlZiBOT1NQTAorICAgIHsgIi9m aWx0ZXIiLCAgICAgICAgICAgICAgIFNORF9GTFQsIENNX0FSR3xDTV9QU0ggfSwKKyNlbmRpZiAv KiBOT1NQTCAqLworI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZkZWYgQ0tTWU1MSU5LCisgICAg eyAiL2ZvbGxvd2xpbmtzIiwgICAgICAgICAgU05EX0xOSywgMCB9LAorI2VuZGlmIC8qIENLU1lN TElOSyAqLworI2lmZGVmIFZNUworICAgIHsgIi9pbWFnZSIsICAgICAgICAgICAgICAgIFNORF9J TUcsIDAgfSwKKyNlbHNlCisgICAgeyAiL2ltYWdlIiwgICAgICAgICAgICAgICAgU05EX0JJTiwg Q01fSU5WIH0sCisjZW5kaWYgLyogVk1TICovCisgICAgeyAiL2xhcmdlci10aGFuIiwgICAgICAg ICAgU05EX0xBUiwgQ01fQVJHIH0sCisgICAgeyAiL2xpc3RmaWxlIiwgICAgICAgICAgICAgU05E X0ZJTCwgQ01fQVJHIH0sCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICIvbG9jYWwtY2hhcmFjdGVy LXNldCIsICBTTkRfQ1NMLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZkZWYg Q0tfVE1QRElSCisgICAgeyAiL21vdmUtdG8iLCAgICAgICAgICAgICAgU05EX01PViwgQ01fQVJH IH0sCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisgICAgeyAiL25vYmFja3VwZmlsZXMiLCAgICAg ICAgU05EX05PQiwgMCB9LAorI2lmZGVmIFVOSVhPUk9TSworICAgIHsgIi9ub2RvdGZpbGVzIiwg ICAgICAgICAgIFNORF9OT0QsIDAgfSwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyNpZmRlZiBD S1NZTUxJTksKKyAgICB7ICIvbm9mb2xsb3dsaW5rcyIsICAgICAgICBTTkRfTkxLLCAwIH0sCisj ZW5kaWYgLyogQ0tTWU1MSU5LICovCisKKyAgICB7ICIvbm90LWFmdGVyIiwgICAgICAgICAgICBT TkRfTkFGLCBDTV9BUkcgfSwKKyAgICB7ICIvbm90LWJlZm9yZSIsICAgICAgICAgICBTTkRfTkJF LCBDTV9BUkcgfSwKKyNpZmRlZiBVTklYCisgICAgeyAiL3Blcm1pc3Npb25zIiwgICAgICAgICAg U05EX1BSTSwgQ01fQVJHIH0sCisjZWxzZQorICAgIHsgIi9wZXJtaXNzaW9ucyIsICAgICAgICAg IFNORF9QUk0sIENNX0FSR3xDTV9JTlYgfSwKKyNlbmRpZiAvKiBVTklYICovCisgICAgeyAiL3F1 aWV0IiwgICAgICAgICAgICAgICAgU05EX1NISCwgMCB9LAorI2lmZGVmIEZUUF9SRVNUQVJUCisg ICAgeyAiL3JlY292ZXIiLCAgICAgICAgICAgICAgU05EX1JFUywgMCB9LAorI2VuZGlmIC8qIEZU UF9SRVNUQVJUICovCisjaWZkZWYgUkVDVVJTSVZFCisgICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAg ICAgICAgU05EX1JFQywgMCB9LAorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgIHsgIi9yZW5h bWUtdG8iLCAgICAgICAgICAgIFNORF9SRU4sIENNX0FSRyB9LAorI2lmZGVmIEZUUF9SRVNUQVJU CisgICAgeyAiL3Jlc3RhcnQiLCAgICAgICAgICAgICAgU05EX1JFUywgQ01fSU5WIH0sCisjZW5k aWYgLyogRlRQX1JFU1RBUlQgKi8KKyNpZm5kZWYgTk9DU0VUUworICAgIHsgIi9zZXJ2ZXItY2hh cmFjdGVyLXNldCIsIFNORF9DU1IsIENNX0FSRyB9LAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAg ICB7ICIvc2VydmVyLXJlbmFtZS10byIsICAgICBTTkRfU1JOLCBDTV9BUkcgfSwKKyAgICB7ICIv c2ltdWxhdGUiLCAgICAgICAgICAgICBTTkRfU0lNLCAwIH0sCisgICAgeyAiL3NpbmNlIiwgICAg ICAgICAgICAgICAgU05EX0FGVCwgQ01fSU5WfENNX0FSRyB9LAorICAgIHsgIi9zbWFsbGVyLXRo YW4iLCAgICAgICAgIFNORF9TTUEsIENNX0FSRyB9LAorI2lmZGVmIENPTU1FTlQKKyAgICB7ICIv c3RhcnRpbmctYXQiLCAgICAgICAgICBTTkRfU1RBLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDT01N RU5UICovCisjaWZkZWYgUkVDVVJTSVZFCisgICAgeyAiL3N1YmRpcmVjdG9yaWVzIiwgICAgICAg U05EX1JFQywgQ01fSU5WIH0sCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgeyAiL3RlbmV4 IiwgICAgICAgICAgICAgICAgU05EX1RFTiwgMCB9LAorICAgIHsgIi90ZXh0IiwgICAgICAgICAg ICAgICAgIFNORF9UWFQsIDAgfSwKKyNpZm5kZWYgTk9DU0VUUworICAgIHsgIi90cmFuc3BhcmVu dCIsICAgICAgICAgIFNORF9YUEEsIDAgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAi L3R5cGUiLCAgICAgICAgICAgICAgICAgU05EX1RZUCwgQ01fQVJHIH0sCisjaWZkZWYgRE9VUERB VEUKKyAgICB7ICIvdXBkYXRlIiwgICAgICAgICAgICAgICBTTkRfVVBELCAwIH0sCisjZW5kaWYg LyogRE9VUERBVEUgKi8KKyAgICB7ICIvdW5pcXVlLXNlcnZlci1uYW1lcyIsICBTTkRfVVNOLCAw IH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBucHV0c3dpID0gKHNpemVvZihw dXRzd2kpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5 dGFiIGdldHN3aVtdID0geyAgICAgICAvKiBGVFAgW01dR0VUIHN3aXRjaCB0YWJsZSAqLworICAg IHsgIi9hZnRlciIsICAgICAgICAgICAgICAgIFNORF9BRlQsIENNX0lOViB9LAorICAgIHsgIi9h cyIsICAgICAgICAgICAgICAgICAgIFNORF9BU04sIENNX0FSR3xDTV9JTlZ8Q01fQUJSIH0sCisg ICAgeyAiL2FzLW5hbWUiLCAgICAgICAgICAgICAgU05EX0FTTiwgQ01fQVJHIH0sCisgICAgeyAi L2FzY2lpIiwgICAgICAgICAgICAgICAgU05EX1RYVCwgQ01fSU5WIH0sCisgICAgeyAiL2JlZm9y ZSIsICAgICAgICAgICAgICAgU05EX0JFRiwgQ01fSU5WIH0sCisgICAgeyAiL2JpbmFyeSIsICAg ICAgICAgICAgICAgU05EX0JJTiwgMCB9LAorICAgIHsgIi9jb2xsaXNpb24iLCAgICAgICAgICAg IFNORF9DT0wsIENNX0FSRyB9LAorI2lmZGVmIFBVVFBJUEUKKyAgICB7ICIvY29tbWFuZCIsICAg ICAgICAgICAgICBTTkRfQ01ELCBDTV9QU0ggfSwKKyNlbmRpZiAvKiBQVVRQSVBFICovCisgICAg eyAiL2RlbGV0ZSIsICAgICAgICAgICAgICAgU05EX0RFTCwgMCB9LAorICAgIHsgIi9lcnJvci1h Y3Rpb24iLCAgICAgICAgIFNORF9FUlIsIENNX0FSRyB9LAorICAgIHsgIi9leGNlcHQiLCAgICAg ICAgICAgICAgIFNORF9FWEMsIENNX0FSRyB9LAorICAgIHsgIi9maWxlbmFtZXMiLCAgICAgICAg ICAgIFNORF9OQU0sIENNX0FSRyB9LAorI2lmZGVmIFBJUEVTRU5ECisjaWZuZGVmIE5PU1BMCisg ICAgeyAiL2ZpbHRlciIsICAgICAgICAgICAgICAgU05EX0ZMVCwgQ01fQVJHfENNX1BTSCB9LAor I2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNpZmRlZiBWTVMKKyAg ICB7ICIvaW1hZ2UiLCAgICAgICAgICAgICAgICBTTkRfSU1HLCAwIH0sCisjZWxzZQorICAgIHsg Ii9pbWFnZSIsICAgICAgICAgICAgICAgIFNORF9CSU4sIENNX0lOViB9LAorI2VuZGlmIC8qIFZN UyAqLworICAgIHsgIi9sYXJnZXItdGhhbiIsICAgICAgICAgIFNORF9MQVIsIENNX0FSRyB9LAor ICAgIHsgIi9saXN0ZmlsZSIsICAgICAgICAgICAgIFNORF9GSUwsIENNX0FSRyB9LAorI2lmbmRl ZiBOT0NTRVRTCisgICAgeyAiL2xvY2FsLWNoYXJhY3Rlci1zZXQiLCAgU05EX0NTTCwgQ01fQVJH IH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIHsgIi9tYXRjaCIsICAgICAgICAgICAgICAg IFNORF9QQVQsIENNX0FSRyB9LAorICAgIHsgIi9tbCIsICAgICAgICAgICAgICAgICAgIFNORF9N TFMsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICIvbWxzIiwgICAgICAgICAgICAgICAgICBTTkRf TUxTLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL21sc2QiLCAgICAgICAgICAgICAgICAgU05E X01MUywgMCB9LAorICAgIHsgIi9tbHN0IiwgICAgICAgICAgICAgICAgIFNORF9NTFMsIENNX0lO ViB9LAorI2lmZGVmIENLX1RNUERJUgorICAgIHsgIi9tb3ZlLXRvIiwgICAgICAgICAgICAgIFNO RF9NT1YsIENNX0FSRyB9LAorI2VuZGlmIC8qIENLX1RNUERJUiAqLworICAgIHsgIi9uYW1lbGlz dCIsICAgICAgICAgICAgIFNORF9OTUwsIENNX0FSRyB9LAorICAgIHsgIi9ubHN0IiwgICAgICAg ICAgICAgICAgIFNORF9OTFMsIDAgfSwKKyAgICB7ICIvbm9iYWNrdXBmaWxlcyIsICAgICAgICBT TkRfTk9CLCAwIH0sCisgICAgeyAiL25vZG90ZmlsZXMiLCAgICAgICAgICAgU05EX05PRCwgMCB9 LAorI2lmZGVmIERPVVBEQVRFCisgICAgeyAiL2RhdGVzLWRpZmZlciIsICAgICAgICAgU05EX0RJ RiwgQ01fSU5WIH0sCisjZW5kaWYgLyogRE9VUERBVEUgKi8KKyAgICB7ICIvbm90LWFmdGVyIiwg ICAgICAgICAgICBTTkRfTkFGLCBDTV9JTlYgfSwKKyAgICB7ICIvbm90LWJlZm9yZSIsICAgICAg ICAgICBTTkRfTkJFLCBDTV9JTlYgfSwKKyAgICB7ICIvcGVybWlzc2lvbnMiLCAgICAgICAgICBT TkRfUFJNLCBDTV9JTlYgfSwKKyAgICB7ICIvcXVpZXQiLCAgICAgICAgICAgICAgICBTTkRfU0hI LCAwIH0sCisjaWZkZWYgRlRQX1JFU1RBUlQKKyAgICB7ICIvcmVjb3ZlciIsICAgICAgICAgICAg ICBTTkRfUkVTLCAwIH0sCisjZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KKyNpZmRlZiBSRUNVUlNJ VkUKKyAgICB7ICIvcmVjdXJzaXZlIiwgICAgICAgICAgICBTTkRfUkVDLCAwIH0sCisjZW5kaWYg LyogUkVDVVJTSVZFICovCisgICAgeyAiL3JlbmFtZS10byIsICAgICAgICAgICAgU05EX1JFTiwg Q01fQVJHIH0sCisjaWZkZWYgRlRQX1JFU1RBUlQKKyAgICB7ICIvcmVzdGFydCIsICAgICAgICAg ICAgICBTTkRfUkVTLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBGVFBfUkVTVEFSVCAqLworI2lmbmRl ZiBOT0NTRVRTCisgICAgeyAiL3NlcnZlci1jaGFyYWN0ZXItc2V0IiwgU05EX0NTUiwgQ01fQVJH IH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIHsgIi9zZXJ2ZXItcmVuYW1lLXRvIiwgICAg IFNORF9TUk4sIENNX0FSRyB9LAorICAgIHsgIi9zbWFsbGVyLXRoYW4iLCAgICAgICAgIFNORF9T TUEsIENNX0FSRyB9LAorI2lmZGVmIFJFQ1VSU0lWRQorICAgIHsgIi9zdWJkaXJlY3RvcmllcyIs ICAgICAgIFNORF9SRUMsIENNX0lOViB9LAorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgIHsg Ii90ZXh0IiwgICAgICAgICAgICAgICAgIFNORF9UWFQsIDAgfSwKKyAgICB7ICIvdGVuZXgiLCAg ICAgICAgICAgICAgICBTTkRfVEVOLCAwIH0sCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICIvdHJh bnNwYXJlbnQiLCAgICAgICAgICBTTkRfWFBBLCAwIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLwor ICAgIHsgIi90by1zY3JlZW4iLCAgICAgICAgICAgIFNORF9NQUksIDAgfSwKKyNpZmRlZiBET1VQ REFURQorICAgIHsgIi91cGRhdGUiLCAgICAgICAgICAgICAgIFNORF9VUEQsIENNX0lOViB9LAor I2VuZGlmIC8qIERPVVBEQVRFICovCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBu Z2V0c3dpID0gKHNpemVvZihnZXRzd2kpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisK K3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRlbHN3aVtdID0geyAgICAgICAvKiBGVFAgW01dREVMRVRF IHN3aXRjaCB0YWJsZSAqLworICAgIHsgIi9lcnJvci1hY3Rpb24iLCAgICAgICAgIFNORF9FUlIs IENNX0FSRyB9LAorICAgIHsgIi9leGNlcHQiLCAgICAgICAgICAgICAgIFNORF9FWEMsIENNX0FS RyB9LAorICAgIHsgIi9maWxlbmFtZXMiLCAgICAgICAgICAgIFNORF9OQU0sIENNX0FSRyB9LAor ICAgIHsgIi9sYXJnZXItdGhhbiIsICAgICAgICAgIFNORF9MQVIsIENNX0FSRyB9LAorICAgIHsg Ii9ub2JhY2t1cGZpbGVzIiwgICAgICAgIFNORF9OT0IsIDAgfSwKKyNpZmRlZiBVTklYT1JPU0sK KyAgICB7ICIvbm9kb3RmaWxlcyIsICAgICAgICAgICBTTkRfTk9ELCAwIH0sCisjZW5kaWYgLyog VU5JWE9ST1NLICovCisgICAgeyAiL3F1aWV0IiwgICAgICAgICAgICAgICAgU05EX1NISCwgMCB9 LAorI2lmZGVmIFJFQ1VSU0lWRQorICAgIHsgIi9yZWN1cnNpdmUiLCAgICAgICAgICAgIFNORF9S RUMsIDAgfSwKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICB7ICIvc21hbGxlci10aGFuIiwg ICAgICAgICBTTkRfU01BLCBDTV9BUkcgfSwKKyNpZmRlZiBSRUNVUlNJVkUKKyAgICB7ICIvc3Vi ZGlyZWN0b3JpZXMiLCAgICAgICBTTkRfUkVDLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBSRUNVUlNJ VkUgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5kZWxzd2kgPSAoc2l6ZW9m KGRlbHN3aSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgZm50YWJbXSA9IHsgICAgICAgIC8qIEZpbGVuYW1lIGNvbnZlcnNpb24ga2V5d29yZCB0 YWJsZSAqLworICAgIHsgImF1dG9tYXRpYyIsICAgIDIsIENOVl9BVVRPIH0sCisgICAgeyAiY29u dmVydGVkIiwgICAgMSwgQ05WX0NOViAgfSwKKyAgICB7ICJsaXRlcmFsIiwgICAgICAwLCBDTlZf TElUICB9Cit9Oworc3RhdGljIGludCBuZm50YWIgPSAoc2l6ZW9mKGZudGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0cHR5cFtdID0geyAgICAg ICAvKiBTRVQgRlRQIFRZUEUgdGFibGUgKi8KKyAgICB7ICJhc2NpaSIsICAgICAgICBGVFRfQVND LCAwIH0sCisgICAgeyAiYmluYXJ5IiwgICAgICAgRlRUX0JJTiwgMCB9LAorICAgIHsgInRlbmV4 IiwgICAgICAgIEZUVF9URU4sIDAgfSwKKyAgICB7ICJ0ZXh0IiwgICAgICAgICBGVFRfQVNDLCBD TV9JTlYgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5mdHB0eXAgPSAoc2l6 ZW9mKGZ0cHR5cCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworI2lmZGVmIEZUUF9T RUNVUklUWQorc3RhdGljIHN0cnVjdCBrZXl0YWIgZnRwcHJvW10gPSB7ICAgICAgIC8qIFNFVCBG VFAgUFJPVEVDVElPTi1MRVZFTCB0YWJsZSAqLworICAgIHsgImNsZWFyIiwgICAgICAgIEZQTF9D TFIsIDAgfSwKKyAgICB7ICJjb25maWRlbnRpYWwiLCBGUExfQ09OLCAwIH0sCisgICAgeyAicHJp dmF0ZSIsICAgICAgRlBMX1BSViwgMCB9LAorICAgIHsgInNhZmUiLCAgICAgICAgIEZQTF9TQUYs IDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5mdHBwcm8gPSAoc2l6ZW9m KGZ0cHBybykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKyNlbmRpZiAvKiBGVFBfU0VD VVJJVFkgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIEZUUCBmcm9tIFJGQzc2NS4gKi8KKworLyog UmVwbHkgY29kZXMgKi8KKworI2RlZmluZSBSRVBMWV9QUkVMSU0gICAgMSAgICAgICAgICAgICAg IC8qIFBvc2l0aXZlIHByZWxpbWluYXJ5ICovCisjZGVmaW5lIFJFUExZX0NPTVBMRVRFICAyICAg ICAgICAgICAgICAgLyogUG9zaXRpdmUgY29tcGxldGlvbiAqLworI2RlZmluZSBSRVBMWV9DT05U SU5VRSAgMyAgICAgICAgICAgICAgIC8qIFBvc2l0aXZlIGludGVybWVkaWF0ZSAqLworI2RlZmlu ZSBSRVBMWV9UUkFOU0lFTlQgNCAgICAgICAgICAgICAgIC8qIFRyYW5zaWVudCBuZWdhdGl2ZSBj b21wbGV0aW9uICovCisjZGVmaW5lIFJFUExZX0VSUk9SICAgICA1ICAgICAgICAgICAgICAgLyog UGVybWFuZW50IG5lZ2F0aXZlIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgUkVQTFlfU0VDVVJFICAg IDYgICAgICAgICAgICAgICAvKiBTZWN1cml0eSBlbmNvZGVkIG1lc3NhZ2UgKi8KKworLyogRm9y bSBjb2RlcyBhbmQgbmFtZXMgKi8KKworI2RlZmluZSBGT1JNX04gMSAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE5vbi1wcmludCAqLworI2RlZmluZSBGT1JNX1QgMiAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRlbG5ldCBmb3JtYXQgZWZmZWN0b3JzICovCisjZGVmaW5lIEZPUk1fQyAzICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ2FycmlhZ2UgY29udHJvbCAoQVNBKSAqLworCisvKiBT dHJ1Y3R1cmUgY29kZXMgYW5kIG5hbWVzICovCisKKyNkZWZpbmUgU1RSVV9GIDEgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGaWxlIChubyByZWNvcmQgc3RydWN0dXJlKSAqLworI2RlZmluZSBT VFJVX1IgMiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBzdHJ1Y3R1cmUgKi8KKyNk ZWZpbmUgU1RSVV9QIDMgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWdlIHN0cnVjdHVyZSAq LworCisvKiBNb2RlIHR5cGVzIGFuZCBuYW1lcyAqLworCisjZGVmaW5lIE1PREVfUyAxICAgICAg ICAgICAgICAgICAgICAgICAgLyogU3RyZWFtICovCisjZGVmaW5lIE1PREVfQiAyICAgICAgICAg ICAgICAgICAgICAgICAgLyogQmxvY2sgKi8KKyNkZWZpbmUgTU9ERV9DIDMgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb21wcmVzc2VkICovCisKKy8qIFByb3RlY3Rpb24gbGV2ZWxzIGFuZCBu YW1lcyAqLworCisjZGVmaW5lIFBST1RfQyAxICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xl YXIgKi8KKyNkZWZpbmUgUFJPVF9TIDIgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYWZlICov CisjZGVmaW5lIFBST1RfUCAzICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJpdmF0ZSAqLwor I2RlZmluZSBQUk9UX0UgNCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbmZpZGVudGlhbCAq LworCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHVzZWQg Ki8KKyNpZmRlZiBGVFBfTkFNRVMKK2NoYXIgKnN0cnVuYW1lc1tdICA9ICB7IjAiLCAiRmlsZSIs ICAgICAiUmVjb3JkIiwgIlBhZ2UiIH07CitjaGFyICpmb3JtbmFtZXNbXSAgPSAgeyIwIiwgIk5v bnByaW50IiwgIlRlbG5ldCIsICJDYXJyaWFnZS1jb250cm9sIiB9OworY2hhciAqbW9kZW5hbWVz W10gID0gIHsiMCIsICJTdHJlYW0iLCAgICJCbG9jayIsICAiQ29tcHJlc3NlZCIgfTsKK2NoYXIg KmxldmVsbmFtZXNbXSA9ICB7IjAiLCAiQ2xlYXIiLCAgICAiU2FmZSIsICAgIlByaXZhdGUiLCAg IkNvbmZpZGVudGlhbCIgfTsKKyNlbmRpZiAvKiBGVFBfTkFNRVMgKi8KKworLyogUmVjb3JkIFRv a2VucyAqLworCisjZGVmaW5lIFJFQ19FU0MgJ1wzNzcnICAgICAgICAgICAgICAgICAgLyogUmVj b3JkLW1vZGUgRXNjYXBlICovCisjZGVmaW5lIFJFQ19FT1IgJ1wwMDEnICAgICAgICAgICAgICAg ICAgLyogUmVjb3JkLW1vZGUgRW5kLW9mLVJlY29yZCAqLworI2RlZmluZSBSRUNfRU9GICdcMDAy JyAgICAgICAgICAgICAgICAgIC8qIFJlY29yZC1tb2RlIEVuZC1vZi1GaWxlICovCisKKy8qIEJs b2NrIEhlYWRlciAqLworCisjZGVmaW5lIEJMS19FT1IgICAgICAgICAgIDB4ODAgICAgICAgICAg LyogQmxvY2sgaXMgRW5kLW9mLVJlY29yZCAqLworI2RlZmluZSBCTEtfRU9GICAgICAgICAgICAw eDQwICAgICAgICAgIC8qIEJsb2NrIGlzIEVuZC1vZi1GaWxlICovCisjZGVmaW5lIEJMS19SRVBM WV9FUlJPUlMgIDB4MjAgICAgICAgICAgLyogQmxvY2sgbWlnaHQgaGF2ZSBlcnJvcnMgKi8KKyNk ZWZpbmUgQkxLX1JFU1RBUlQgICAgICAgMHgxMCAgICAgICAgICAvKiBCbG9jayBpcyBSZXN0YXJ0 IE1hcmtlciAqLworI2RlZmluZSBCTEtfQllURUNPVU5UIDIgICAgICAgICAgICAgICAgIC8qIEJ5 dGVzIGluIHRoaXMgYmxvY2sgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNkZWZpbmUgUkFE SVhfRU5DT0RFIDAgICAgICAgICAgICAgICAgICAvKiByYWRpeF9lbmNvZGUoKSBmdW5jdGlvbiBj b2RlcyAqLworI2RlZmluZSBSQURJWF9ERUNPREUgMQorCisvKgorICBUaGUgZGVmYXVsdCBzZXRw YnN6KCkgdmFsdWUgaW4gdGhlIFVuaXggRlRQIGNsaWVudCBpcyAxPDwyMCAoMU1CKS4gIFRoaXMK KyAgcmVzdWx0cyBpbiBhIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gZHVlIHRvIHRo ZSBpbmNyZWFzZWQgbnVtYmVyCisgIG9mIHBhZ2UgZmF1bHRzIGFuZCB0aGUgaW5hYmlsaXR5IHRv IG92ZXJsYXAgZW5jcnlwdC9kZWNyeXB0LCBmaWxlIGkvbywgYW5kCisgIG5ldHdvcmsgaS9vLiAg U28gaW5zdGVhZCB3ZSBzZXQgdGhlIHZhbHVlIHRvIDE8PDEzICg4SyksIGFib3V0IGhhbGYgdGhl IHNpemUKKyAgb2YgdGhlIHR5cGljYWwgVENQIHdpbmRvdy4gIE1heWJlIHdlIHNob3VsZCBhZGQg YSBjb21tYW5kIHRvIGFsbG93IHRoZSB2YWx1ZQorICB0byBiZSBjaGFuZ2VkLgorKi8KKyNkZWZp bmUgREVGQVVMVF9QQlNaIDE8PDEzCisKKy8qIFByb3RvdHlwZXMgKi8KKworX1BST1RPVFlQKGlu dCByZW10eHQsIChjaGFyICoqKSApOworX1BST1RPVFlQKGNoYXIgKiBnc2tyZWFzb24sIChpbnQp ICk7CitfUFJPVE9UWVAoc3RhdGljIGludCBmdHBjbG9zZSwodm9pZCkpOworX1BST1RPVFlQKHN0 YXRpYyBpbnQgenpzZW5kLCAoaW50LCBDSEFSKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBnZXRy ZXBseSwoaW50LGludCxpbnQsaW50LGludCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgcmFkaXhf ZW5jb2RlLChDSEFSW10sIENIQVJbXSwgaW50LCBpbnQgKiwgaW50KSk7CitfUFJPVE9UWVAoc3Rh dGljIGludCBzZXRwYnN6LCh1bnNpZ25lZCBpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IHJl Y3ZyZXF1ZXN0LChjaGFyICosY2hhciAqLGNoYXIgKixjaGFyICosCisgIGludCxpbnQsY2hhciAq LGludCxpbnQsaW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBmdHBjbWQsKGNoYXIgKixjaGFy ICosaW50LGludCxpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IGZ0c19jcGwsKGludCkpOwor X1BST1RPVFlQKHN0YXRpYyBpbnQgZnRzX2RwbCwoaW50KSk7CisjaWZkZWYgRlRQX1NFQ1VSSVRZ CitfUFJPVE9UWVAoc3RhdGljIGludCBmdHBfYXV0aCwgKHZvaWQpKTsKKyNlbmRpZiAvKiBGVFBf U0VDVVJJVFkgKi8KK19QUk9UT1RZUChzdGF0aWMgaW50IGZ0cF91c2VyLCAoY2hhciAqLCBjaGFy ICosIGNoYXIgKikpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgZnRwX2xvZ2luLCAoY2hhciAqKSk7 CitfUFJPVE9UWVAoc3RhdGljIGludCBmdHBfcmVzZXQsICh2b2lkKSk7CitfUFJPVE9UWVAoc3Rh dGljIGludCBmdHBfcmVuYW1lLCAoY2hhciAqLCBjaGFyICopKTsKK19QUk9UT1RZUChzdGF0aWMg aW50IGZ0cF91bWFzaywgKGNoYXIgKikpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgc2VjdXJlX2Zs dXNoLCAoaW50KSk7CisjaWZkZWYgQ09NTUVOVAorX1BST1RPVFlQKHN0YXRpYyBpbnQgc2VjdXJl X3B1dGMsIChjaGFyLCBpbnQpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCitfUFJPVE9UWVAoc3Rh dGljIGludCBzZWN1cmVfd3JpdGUsIChpbnQsIENIQVIgKiwgdW5zaWduZWQgaW50KSk7CitfUFJP VE9UWVAoc3RhdGljIGludCBzY29tbWFuZCwgKGNoYXIgKikpOworX1BST1RPVFlQKHN0YXRpYyBp bnQgc2VjdXJlX3B1dGJ1ZiwgKGludCwgQ0hBUiAqLCB1bnNpZ25lZCBpbnQpKTsKK19QUk9UT1RZ UChzdGF0aWMgaW50IHNlY3VyZV9nZXRjLCAoaW50LCBpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMg aW50IHNlY3VyZV9nZXRieXRlLCAoaW50LCBpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IHNl Y3VyZV9yZWFkLCAoaW50LCBjaGFyICosIGludCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgaW5p dGNvbm4sICh2b2lkKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBkYXRhY29ubiwgKGNoYXIgKikp OworX1BST1RPVFlQKHN0YXRpYyBpbnQgc2V0cHJvdGJ1ZiwodW5zaWduZWQgaW50KSk7CitfUFJP VE9UWVAoc3RhdGljIGludCBzZW5kcmVxdWVzdCwgKGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGlu dCxpbnQsaW50LGludCkpOworCitfUFJPVE9UWVAoc3RhdGljIGNoYXIgKiByYWRpeF9lcnJvciwo aW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGNoYXIgKiBmdHBfaG9va3VwLChjaGFyICosIGludCwg aW50KSk7CitfUFJPVE9UWVAoc3RhdGljIENIQVIgKiByZW1vdGVfZmlsZXMsIChpbnQsIENIQVIg KiwgQ0hBUiAqLCBpbnQpKTsKKworX1BST1RPVFlQKHN0YXRpYyBWT0lEIG1sc3Jlc2V0LCAodm9p ZCkpOworX1BST1RPVFlQKHN0YXRpYyBWT0lEIHNlY3VyZV9lcnJvciwgKGNoYXIgKmZtdCwgLi4u KSk7CitfUFJPVE9UWVAoc3RhdGljIFZPSUQgbG9zdHBlZXIsICh2b2lkKSk7CitfUFJPVE9UWVAo c3RhdGljIFZPSUQgY2FuY2VsX3JlbW90ZSwgKGludCkpOworX1BST1RPVFlQKHN0YXRpYyBWT0lE IGNoYW5nZXR5cGUsIChpbnQsIGludCkpOworCitfUFJPVE9UWVAoc3RhdGljIHNpZ3R5cGUgY21k Y2FuY2VsLCAoaW50KSk7CisKKyNpZmRlZiBGVFBfU1JQCitfUFJPVE9UWVAoc3RhdGljIGludCBz cnBfcmVzZXQsICgpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IHNycF9mdHBfYXV0aCwgKGNoYXIg KixjaGFyICosY2hhciAqKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBzcnBfcHV0LCAoQ0hBUiAq LCBDSEFSICoqLCBpbnQsIGludCAqKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBzcnBfZ2V0LCAo Q0hBUiAqKiwgQ0hBUiAqKiwgaW50ICosIGludCAqKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBz cnBfZW5jb2RlLCAoaW50LCBDSEFSICosIENIQVIgKiwgdW5zaWduZWQgaW50KSk7CitfUFJPVE9U WVAoc3RhdGljIGludCBzcnBfZGVjb2RlLCAoaW50LCBDSEFSICosIENIQVIgKiwgdW5zaWduZWQg aW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBzcnBfc2VsY2lwaGVyLCAoY2hhciAqKSk7Citf UFJPVE9UWVAoc3RhdGljIGludCBzcnBfc2VsaGFzaCwgKGNoYXIgKikpOworI2VuZGlmIC8qIEZU UF9TUlAgKi8KKworI2lmZGVmIEZUUF9HU1NBUEkKK19QUk9UT1RZUChzdGF0aWMgdm9pZCB1c2Vy X2dzc19lcnJvciwoT01fdWludDMyLCBPTV91aW50MzIsY2hhciAqKSk7CisjZW5kaWYgLyogRlRQ X0dTU0FQSSAqLworCisvKiAgRCBPIEYgVCBQIEEgUiBHICAtLSAgRG8gYW4gRlRQIGNvbW1hbmQt bGluZSBhcmd1bWVudC4gICovCisKKyNpZmRlZiBGVFBfU0VDVVJJVFkKKyNpZm5kZWYgTk9JQ1AK KyNkZWZpbmUgRlRfTk9HU1MgICAxCisjZGVmaW5lIEZUX05PSzQgICAgMgorI2RlZmluZSBGVF9O T1NSUCAgIDMKKyNkZWZpbmUgRlRfTk9TU0wgICA0CisjZGVmaW5lIEZUX05PVExTICAgNQorI2Rl ZmluZSBGVF9DRVJURkkgIDYKKyNkZWZpbmUgRlRfT0tDRVJUICA3CisjZGVmaW5lIEZUX0RFQlVH ICAgOAorI2RlZmluZSBGVF9LRVkgICAgIDkKKyNkZWZpbmUgRlRfU0VDVVJFIDEwCisjZGVmaW5l IEZUX1ZFUklGWSAxMQorCitzdGF0aWMgc3RydWN0IGtleXRhYiBmdHB6dGFiW10gPSB7CisgICAg eyAiIWdzcyIsICAgIEZUX05PR1NTLCAgMCB9LAorICAgIHsgIiFrcmI0IiwgICBGVF9OT0s0LCAg IDAgfSwKKyAgICB7ICIhc3JwIiwgICAgRlRfTk9TUlAsICAwIH0sCisgICAgeyAiIXNzbCIsICAg IEZUX05PU1NMLCAgMCB9LAorICAgIHsgIiF0bHMiLCAgICBGVF9OT1RMUywgIDAgfSwKKyAgICB7 ICJjZXJ0IiwgICAgRlRfQ0VSVEZJLCBDTV9BUkcgfSwKKyAgICB7ICJjZXJ0c29rIiwgRlRfT0tD RVJULCAwIH0sCisgICAgeyAiZGVidWciLCAgIEZUX0RFQlVHLCAgMCB9LAorICAgIHsgImtleSIs ICAgICBGVF9LRVksICAgIENNX0FSRyB9LAorICAgIHsgIm5vZ3NzIiwgICBGVF9OT0dTUywgIDAg fSwKKyAgICB7ICJub2tyYjQiLCAgRlRfTk9LNCwgICAwIH0sCisgICAgeyAibm9zcnAiLCAgIEZU X05PU1JQLCAgMCB9LAorICAgIHsgIm5vc3NsIiwgICBGVF9OT1NTTCwgIDAgfSwKKyAgICB7ICJu b3RscyIsICAgRlRfTk9UTFMsICAwIH0sCisjaWZkZWYgQ09NTUVOVAorICAgIHsgInNlY3VyZSIs ICBGVF9TRUNVUkUsIDAgfSwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeyAidmVyaWZ5Iiwg IEZUX1ZFUklGWSwgQ01fQVJHIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBu ZnRwenRhYiA9IHNpemVvZihmdHB6dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7CisK Ky8qCisgIFRoZSBmb2xsb3dpbmcgY2lwaGVyIGFuZCBoYXNoIHRhYmxlcyBzaG91bGQgYmUgcmVw bGFjZWQgd2l0aAorICBkeW5hbWljbHkgY3JlYXRlZCB2ZXJzaW9ucyBiYXNlZCB1cG9uIHRoZSBs aW5rZWQgbGlicmFyeS4KKyovCisjZGVmaW5lIFNSUF9CTE9XRklTSF9FQ0IgICAgMQorI2RlZmlu ZSBTUlBfQkxPV0ZJU0hfQ0JDICAgIDIKKyNkZWZpbmUgU1JQX0JMT1dGSVNIX0NGQjY0ICAzCisj ZGVmaW5lIFNSUF9CTE9XRklTSF9PRkI2NCAgNAorI2RlZmluZSBTUlBfQ0FTVDVfRUNCICAgICAg IDUKKyNkZWZpbmUgU1JQX0NBU1Q1X0NCQyAgICAgICA2CisjZGVmaW5lIFNSUF9DQVNUNV9DRkI2 NCAgICAgNworI2RlZmluZSBTUlBfQ0FTVDVfT0ZCNjQgICAgIDgKKyNkZWZpbmUgU1JQX0RFU19F Q0IgICAgICAgICA5CisjZGVmaW5lIFNSUF9ERVNfQ0JDICAgICAgICAxMAorI2RlZmluZSBTUlBf REVTX0NGQjY0ICAgICAgMTEKKyNkZWZpbmUgU1JQX0RFU19PRkI2NCAgICAgIDEyCisjZGVmaW5l IFNSUF9ERVMzX0VDQiAgICAgICAxMworI2RlZmluZSBTUlBfREVTM19DQkMgICAgICAgMTQKKyNk ZWZpbmUgU1JQX0RFUzNfQ0ZCNjQgICAgIDE1CisjZGVmaW5lIFNSUF9ERVMzX09GQjY0ICAgICAx NgorCitzdGF0aWMgc3RydWN0IGtleXRhYiBjaXBoZXJ0YWJbXSA9IHsKKyAgICB7ICJibG93Zmlz aF9lY2IiLCAgIFNSUF9CTE9XRklTSF9FQ0IsICAgMCB9LAorICAgIHsgImJsb3dmaXNoX2NiYyIs ICAgU1JQX0JMT1dGSVNIX0NCQywgICAwIH0sCisgICAgeyAiYmxvd2Zpc2hfY2ZiNjQiLCBTUlBf QkxPV0ZJU0hfQ0ZCNjQsIDAgfSwKKyAgICB7ICJibG93ZmlzaF9vZmI2NCIsIFNSUF9CTE9XRklT SF9PRkI2NCwgMCB9LAorICAgIHsgImNhc3Q1X2VjYiIsICAgICAgU1JQX0NBU1Q1X0VDQiwgICAg ICAwIH0sCisgICAgeyAiY2FzdDVfY2JjIiwgICAgICBTUlBfQ0FTVDVfQ0JDLCAgICAgIDAgfSwK KyAgICB7ICJjYXN0NV9jZmI2NCIsICAgIFNSUF9DQVNUNV9DRkI2NCwgICAgMCB9LAorICAgIHsg ImNhc3Q1X29mYjY0IiwgICAgU1JQX0NBU1Q1X09GQjY0LCAgICAwIH0sCisgICAgeyAiZGVzX2Vj YiIsICAgICAgICBTUlBfREVTX0VDQiwgICAgICAgIDAgfSwKKyAgICB7ICJkZXNfY2JjIiwgICAg ICAgIFNSUF9ERVNfQ0JDLCAgICAgICAgMCB9LAorICAgIHsgImRlc19jZmI2NCIsICAgICAgU1JQ X0RFU19DRkI2NCwgICAgICAwIH0sCisgICAgeyAiZGVzX29mYjY0IiwgICAgICBTUlBfREVTX09G QjY0LCAgICAgIDAgfSwKKyAgICB7ICJkZXMzX2VjYiIsICAgICAgIFNSUF9ERVMzX0VDQiwgICAg ICAgMCB9LAorICAgIHsgImRlczNfY2JjIiwgICAgICAgU1JQX0RFUzNfQ0JDLCAgICAgICAwIH0s CisgICAgeyAiZGVzM19jZmI2NCIsICAgICBTUlBfREVTM19DRkI2NCwgICAgIDAgfSwKKyAgICB7 ICJkZXMzX29mYjY0IiwgICAgIFNSUF9ERVMzX09GQjY0LCAgICAgMCB9LAorICAgIHsgIm5vbmUi LCAgICAgICAgICAgMCwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmNp cGhlcnRhYiA9IHNpemVvZihjaXBoZXJ0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsK KworI2RlZmluZSBTUlBfTUQ1ICAxCisjZGVmaW5lIFNSUF9TSEEgIDIKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGhhc2h0YWJbXSA9IHsKKyAgICB7ICJtZDUiLCAgICAgICAgICAgICAgU1JQX01ENSwg ICAgICAgIDAgfSwKKyAgICB7ICJub25lIiwgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIDAg fSwKKyAgICB7ICJzaGEiLCAgICAgICAgICAgICAgU1JQX1NIQSwgICAgICAgIDAgfSwKKyAgICB7 ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5oYXNodGFiID0gc2l6ZW9mKGhhc2h0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8q IEZUUF9TRUNVUklUWSAqLworCitzdGF0aWMgY2hhciAqCitzdHJ2YWwoczEsczIpIGNoYXIgKiBz MSwgKiBzMjsgeworICAgIGlmICghczEpIHMxID0gIiI7CisgICAgaWYgKCFzMikgczIgPSAiIjsK KyAgICByZXR1cm4oKnMxID8gczEgOiAoKnMyID8gczIgOiAiKG5vbmUpIikpOworfQorCisjaWZu ZGVmIE5PQ1NFVFMKK3N0YXRpYyBjaGFyICogcmZucHRyID0gTlVMTDsKK3N0YXRpYyBpbnQgcmZu bGVuID0gMDsKK3N0YXRpYyBjaGFyIHJmbmJ1ZltSRk5CVUZTSVpdOyAgICAgICAgICAvKiBSZW1v dGUgZmlsZW5hbWUgdHJhbnNsYXRlIGJ1ZmZlciAqLworc3RhdGljIGNoYXIgKiB4Z25icCA9IE5V TEw7CisKK3N0YXRpYyBpbnQKK3N0cmdldGMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHhnbmJ5dGUoKSAqLworICAgIGludCBjOworICAgIGlm ICgheGduYnApCisgICAgICByZXR1cm4oLTEpOworICAgIGlmICghKnhnbmJwKQorICAgICAgcmV0 dXJuKC0xKTsKKyAgICBjID0gKHVuc2lnbmVkKSAqeGduYnArKzsKKyAgICByZXR1cm4oKCh1bnNp Z25lZCkgYykgJiAweGZmKTsKK30KKworc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgeHBuYnl0ZSgpICovCisjaWZkZWYgQ0tfQU5T SUMKK3N0cnB1dGMoY2hhciBjKQorI2Vsc2UKK3N0cnB1dGMoYykgY2hhciBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7CisgICAgcmZubGVuID0gcmZucHRyIC0gcmZuYnVmOworICAgIGlmIChy Zm5sZW4gPj0gKFJGTkJVRlNJWiAtIDEpKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICAqcmZucHRy KysgPSBjOworICAgICpyZm5wdHIgPSBOVUw7CisgICAgcmV0dXJuKDApOworfQorCitzdGF0aWMg aW50CisjaWZkZWYgQ0tfQU5TSUMKK3hwcmludGMoY2hhciBjKQorI2Vsc2UKK3hwcmludGMoYykg Y2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgcHJpbnRmKCIlYyIsYyk7Cisg ICAgcmV0dXJuKDApOworfQorCitzdGF0aWMgVk9JRAorYnl0c3dhcChjMCxjMSkgaW50ICogYzAs ICogYzE7IHsKKyAgICBpbnQgdDsKKyAgICB0ID0gKmMwOworICAgICpjMCA9ICpjMTsKKyAgICAq YzEgPSB0OworfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIENLTE9HRElBTAorY2hh ciBmdHBsb2didWZbQ1hMT0dCVUZMXSA9IHsgTlVMLCBOVUwgfTsgLyogQ29ubmVjdGlvbiBMb2cg Ki8KK2ludCBmdHBsb2dhY3RpdmUgPSAwOworbG9uZyBmdHBsb2dwcmV2ID0gMEw7CisKK1ZPSUQK K2Z0cGxvZ2VuZCgpIHsKKyAgICBleHRlcm4gaW50IGRpYWxvZzsKKyAgICBleHRlcm4gY2hhciBk aWFmaWxbXTsKKyAgICBsb25nIGQxLCBkMiwgdDEsIHQyOworICAgIGNoYXIgYnVmWzMyXSwgKiBw OworCisgICAgZGVidWcoRjExMSwiZnRwIGN4IGxvZyBhY3RpdmUiLGNraXRvYShkaWFsb2cpLGZ0 cGxvZ2FjdGl2ZSk7CisgICAgZGVidWcoRjExMCwiZnRwIGN4IGxvZyBidWYiLGZ0cGxvZ2J1Ziww KTsKKworICAgIGlmICghZnRwbG9nYWN0aXZlIHx8ICFmdHBsb2didWZbMF0pIC8qIE5vIGFjdGl2 ZSByZWNvcmQgKi8KKyAgICAgIHJldHVybjsKKworICAgIGZ0cGxvZ2FjdGl2ZSA9IDA7ICAgICAg ICAgICAgICAgICAgIC8qIFJlY29yZCBpcyBub3QgYWN0aXZlICovCisKKyAgICBkMSA9IG1qZCgo Y2hhciAqKWZ0cGxvZ2J1Zik7ICAgICAgICAvKiBHZXQgc3RhcnQgZGF0ZSBvZiB0aGlzIHNlc3Np b24gKi8KKyAgICBja3N0cm5jcHkoYnVmLGNrZGF0ZSgpLDMxKTsgICAgICAgICAvKiBHZXQgY3Vy cmVudCBkYXRlICovCisgICAgZDIgPSBtamQoYnVmKTsgICAgICAgICAgICAgICAgICAgICAgLyog Q29udmVydCB0aGVtIHRvIG1qZHMgKi8KKyAgICBwID0gZnRwbG9nYnVmOyAgICAgICAgICAgICAg ICAgICAgICAvKiBHZXQgc3RhcnQgdGltZSAqLworICAgIHBbMTFdID0gTlVMOworICAgIHBbMTRd ID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gc2Vjb25kcyAqLwor ICAgIHQxID0gYXRvbChwKzkpICogMzYwMEwgKyBhdG9sKHArMTIpICogNjBMICsgYXRvbChwKzE1 KTsKKyAgICBwWzExXSA9ICc6JzsKKyAgICBwWzE0XSA9ICc6JzsKKyAgICBwID0gYnVmOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgZW5kIHRpbWUgKi8KKyAgICBwWzExXSA9IE5V TDsKKyAgICBwWzE0XSA9IE5VTDsKKyAgICB0MiA9IGF0b2wocCs5KSAqIDM2MDBMICsgYXRvbChw KzEyKSAqIDYwTCArIGF0b2wocCsxNSk7CisgICAgdDIgPSAoKGQyIC0gZDEpICogODY0MDBMKSAr ICh0MiAtIHQxKTsgLyogQ29tcHV0ZSBlbGFwc2VkIHRpbWUgKi8KKyAgICBpZiAodDIgPiAtMUwp IHsKKyAgICAgICAgZnRwbG9ncHJldiA9IHQyOworICAgICAgICBwID0gaGhtbXNzKHQyKTsKKyAg ICAgICAgY2tzdHJuY2F0KGZ0cGxvZ2J1ZiwiRT0iLENYTE9HQlVGTCk7IC8qIEFwcGVuZCB0byBs b2cgcmVjb3JkICovCisgICAgICAgIGNrc3RybmNhdChmdHBsb2didWYscCxDWExPR0JVRkwpOwor ICAgIH0gZWxzZQorICAgICAgZnRwbG9ncHJldiA9IDBMOworICAgIGRlYnVnKEYxMDEsImZ0cCBj eCBsb2cgZGlhbG9nIiwiIixkaWFsb2cpOworICAgIGlmIChkaWFsb2cpIHsgICAgICAgICAgICAg ICAgICAgICAgIC8qIElmIGxvZ2dpbmcgKi8KKyAgICAgICAgaW50IHg7CisgICAgICAgIHggPSBk aWFvcG4oZGlhZmlsLDEsMSk7ICAgICAgICAgLyogT3BlbiBsb2cgaW4gYXBwZW5kIG1vZGUgKi8K KyAgICAgICAgaWYgKHggPiAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY3ggbG9n IG9wZW4iLCIiLHgpOworICAgICAgICAgICAgeCA9IHpzb3V0bChaRElGSUwsZnRwbG9nYnVmKTsg LyogV3JpdGUgdGhlIHJlY29yZCAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGN4IGxv ZyB3cml0ZSIsIiIseCk7CisgICAgICAgICAgICB4ID0gemNsb3NlKFpESUZJTCk7ICAgICAgICAg LyogQ2xvc2UgdGhlIGxvZyAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGN4IGxvZyBj bG9zZSIsIiIseCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1ZPSUQKK2RvbG9nZnRwKCkgewor ICAgIGZ0cGxvZ2VuZCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZpb3VzIHNlc3Np b24gbm90IGNsb3NlZCBvdXQ/ICovCisgICAgZnRwbG9ncHJldiA9IDBMOworICAgIGZ0cGxvZ2Fj dGl2ZSA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBpcyBhY3RpdmUgKi8KKworICAg IGNrbWFreG1zZyhmdHBsb2didWYsQ1hMT0dCVUZMLAorICAgICAgICAgICAgICBja2RhdGUoKSwi ICIsc3RydmFsKGZ0cF9sb2duYW1lLE5VTEwpLCIgIixja2dldHBpZCgpLAorICAgICAgICAgICAg ICAiIFQ9RlRQIE49Iiwgc3RydmFsKGZ0cF9ob3N0LE5VTEwpLCIgSD0iLG15aG9zdCwKKyAgICAg ICAgICAgICAgIiBQPSIsIGNraXRvYShmdHBfcG9ydCksIiAiKTsgLyogU01TIDIwMDcvMDIvMTUg Ki8KKyAgICBkZWJ1ZyhGMTEwLCJmdHAgY3ggbG9nIGJlZ2luIixmdHBsb2didWYsMCk7Cit9Cisj ZW5kaWYgLyogQ0tMT0dESUFMICovCisKK3N0YXRpYyBjaGFyICogZHVtbXlbMl0gPSB7IE5VTEws IE5VTEwgfTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgbW9kZXRhYltdID0geworICAgIHsgImFj dGl2ZSIsICAwLCAwIH0sCisgICAgeyAicGFzc2l2ZSIsIDEsIDAgfQorfTsKKworI2lmbmRlZiBO T0NNREwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxsZWQg ZnJvbSBja3V1c3kuYyAqLworI2lmZGVmIENLX0FOU0lDCitkb2Z0cGFyZyhjaGFyIGMpCisjZWxz ZQorZG9mdHBhcmcoYykgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb2Z0cGFy ZyAqLyB7CisgICAgaW50IHgsIHo7CisgICAgY2hhciAqeHA7CisgICAgZXh0ZXJuIGNoYXIgKip4 YXJndiwgKnhhcmcwOworICAgIGV4dGVybiBpbnQgeGFyZ2MsIHN0YXlmbGcsIGhhdmVmdHB1aWQ7 CisgICAgZXh0ZXJuIGNoYXIgdWlkYnVmW107CisKKyAgICB4cCA9ICp4YXJndisxOyAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludGVyIGZvciBidW5kbGVkIGFyZ3MgKi8KKyAgICB3aGlsZSAo YykgeworICAgICAgICBpZiAoY2tzdHJjaHIoIk11RFBrY0h6bSIsYykpIHsgIC8qIE9wdGlvbnMg dGhhdCB0YWtlIGFyZ3VtZW50cyAqLworICAgICAgICAgICAgaWYgKCooeHArMSkpIHsKKyAgICAg ICAgICAgICAgICBmYXRhbCgiP0ludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHhhcmd2KyssIHhhcmdjLS07CisgICAgICAgICAgICBpZiAoKHhh cmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworICAgICAgICAgICAgICAgIGZhdGFsKCI/ UmVxdWlyZWQgYXJndW1lbnQgbWlzc2luZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogQmlnIHN3aXRjaCBvbiBh cmcgKi8KKyAgICAgICAgICBjYXNlICdoJzogICAgICAgICAgICAgICAgICAgICAvKiBoZWxwICov CisgICAgICAgICAgIHByaW50ZigiQy1LZXJtaXQncyBGVFAgY2xpZW50IGNvbW1hbmQtbGluZSBw ZXJzb25hbGl0eS4gIFVzYWdlOlxuIik7CisgICAgICAgICAgICBwcmludGYoIiAgJXMgWyBvcHRp b25zIF0gaG9zdCBbIHBvcnQgXSBbLXBnIGZpbGVzIF1cblxuIix4YXJnMCk7CisgICAgICAgICAg ICBwcmludGYoIk9wdGlvbnM6XG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAtaCAgICAgICAg ICAgPSBoZWxwICh0aGlzIG1lc3NhZ2UpXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAtbSBt b2RlICAgICAgPSBcInBhc3NpdmVcIiAoZGVmYXVsdCkgb3IgXCJhY3RpdmVcIlxuIik7CisgICAg ICAgICAgICBwcmludGYoIiAgLXUgbmFtZSAgICAgID0gdXNlcm5hbWUgZm9yIGF1dG9sb2dpbiAo b3IgLU0pXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAtUCBwYXNzd29yZCAgPSBwYXNzd29y ZCBmb3IgYXV0b2xvZ2luIChSSVNLWSlcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC1BICAg ICAgICAgICA9IGF1dG9sb2dpbiBhbm9ueW1vdXNseVxuIik7CisgICAgICAgICAgICBwcmludGYo IiAgLUQgZGlyZWN0b3J5ID0gY2QgYWZ0ZXIgYXV0b2xvZ2luXG4iKTsKKyAgICAgICAgICAgIHBy aW50ZigiICAtYiAgICAgICAgICAgPSBmb3JjZSBiaW5hcnkgbW9kZVxuIik7CisgICAgICAgICAg ICBwcmludGYoIiAgLWEgICAgICAgICAgID0gZm9yY2UgdGV4dCAoXCJhc2NpaVwiKSBtb2RlIChv ciAtVClcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC1kICAgICAgICAgICA9IGRlYnVnIChk b3VibGUgdG8gYWRkIHRpbWVzdGFtcHMpXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAtbiAg ICAgICAgICAgPSBubyBhdXRvbG9naW5cbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC12ICAg ICAgICAgICA9IHZlcmJvc2UgKGRlZmF1bHQpXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAt cSAgICAgICAgICAgPSBxdWlldFxuIik7CisgICAgICAgICAgICBwcmludGYoIiAgLVMgICAgICAg ICAgID0gU3RheSAoaXNzdWUgY29tbWFuZCBwcm9tcHQgd2hlbiBkb25lKVxuIik7CisgICAgICAg ICAgICBwcmludGYoIiAgLVkgICAgICAgICAgID0gZG8gbm90IGV4ZWN1dGUgS2VybWl0IGluaXQg ZmlsZVxuIik7CisgICAgICAgICAgICBwcmludGYoIiAgLXAgZmlsZXMgICAgID0gZmlsZXMgdG8g cHV0IGFmdGVyIGF1dG9sb2dpbiAob3IgLXMpXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigiICAt ZyBmaWxlcyAgICAgPSBmaWxlcyB0byBnZXQgYWZ0ZXIgYXV0b2xvZ2luXG4iKTsKKyAgICAgICAg ICAgIHByaW50ZigiICAtUiAgICAgICAgICAgPSByZWN1cnNpdmUgKGZvciB1c2Ugd2l0aCAtcClc biIpOworCisjaWZkZWYgRlRQX1NFQ1VSSVRZCisgICAgICAgICAgICBwcmludGYoIlxuU2VjdXJp dHkgb3B0aW9uczpcbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC1rIHJlYWxtICAgICA9IEtl cmJlcm9zIDQgcmVhbG1cbiIpOworICAgICAgICAgICAgcHJpbnRmKCIgIC1mICAgICAgICAgICA9 IEtlcmJvcm9zIDUgY3JlZGVudGlhbHMgZm9yd2FyZGluZ1xuIik7CisgICAgICAgICAgICBwcmlu dGYoIiAgLXggICAgICAgICAgID0gYXV0b2VuY3J5cHRpb24gbW9kZVxuIik7CisgICAgICAgICAg ICBwcmludGYoIiAgLWMgY2lwaGVyICAgID0gU1JQIGNpcGhlciB0eXBlXG4iKTsKKyAgICAgICAg ICAgIHByaW50ZigiICAtSCBoYXNoICAgICAgPSBTUlAgZW5jcnlwdGlvbiBoYXNoXG4iKTsKKyAg ICAgICAgICAgIHByaW50ZigiICAteiBvcHRpb24gICAgPSBTZWN1cml0eSBvcHRpb25zXG4iKTsK KyNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KKworICAgICAgICAgICAgcHJpbnRmKCJcbi1wIG9y IC1nLCBpZiBnaXZlbiwgc2hvdWxkIGJlIGxhc3QuICBFeGFtcGxlOlxuIik7CisgICAgICAgICAg ICBwcmludGYoIiAgZnRwIC1BIGtlcm1pdC5jb2x1bWJpYS5lZHUgLUQga2VybWl0IC1hZyBURVNU RklMRVxuIik7CisKKyAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOworICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdSJzogICAgICAgICAgICAgICAgICAgICAvKiBS ZWN1cnNpdmUgKi8KKyAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IDE7CisgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgIGNhc2UgJ2QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERlYnVnICov CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAgICAg ICBleHRlcm4gaW50IGRlYnRpbTsKKyAgICAgICAgICAgICAgICBkZWJ0aW0gPSAxOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxv ZyIsMCk7CisgICAgICAgICAgICAgICAgZGVib2sgPSAxOworICAgICAgICAgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisgICAgICAgICAgICAvKiBmYWxsIHRocnUgb24gcHVycG9zZSAqLworCisg ICAgICAgICAgY2FzZSAndCc6ICAgICAgICAgICAgICAgICAgICAgLyogVHJhY2UgKi8KKyAgICAg ICAgICAgIGZ0cF9kZWIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAn bic6ICAgICAgICAgICAgICAgICAgICAgLyogTm8gYXV0b2xvZ2luICovCisgICAgICAgICAgICBm dHBfbG9nID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnaSc6ICAg ICAgICAgICAgICAgICAgICAgLyogTm8gcHJvbXB0ICovCisgICAgICAgICAgY2FzZSAndic6ICAg ICAgICAgICAgICAgICAgICAgLyogVmVyYm9zZSAqLworICAgICAgICAgICAgYnJlYWs7ICAgICAg ICAgICAgICAgICAgICAgIC8qIChpZ25vcmVkKSAqLworCisgICAgICAgICAgY2FzZSAncSc6ICAg ICAgICAgICAgICAgICAgICAgLyogUXVpZXQgKi8KKyAgICAgICAgICAgIHF1aWV0ID0gMTsKKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAgICAgICAg ICAgLyogU3RheSAqLworICAgICAgICAgICAgc3RheWZsZyA9IDE7CisgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgIGNhc2UgJ00nOgorICAgICAgICAgIGNhc2UgJ3UnOiAgICAgICAgICAg ICAgICAgICAgIC8qIE15IFVzZXIgTmFtZSAqLworICAgICAgICAgICAgaWYgKChpbnQpc3RybGVu KCp4YXJndikgPiA2MykgeworICAgICAgICAgICAgICAgIGZhdGFsKCJ1c2VybmFtZSB0b28gbG9u ZyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwqeGFyZ3Ys VUlEQlVGTEVOKTsKKyAgICAgICAgICAgIGhhdmVmdHB1aWQgPSAxOworICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgICBjYXNlICdBJzoKKyAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYs ImFub255bW91cyIsVUlEQlVGTEVOKTsKKyAgICAgICAgICAgIGhhdmVmdHB1aWQgPSAxOworICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdUJzogICAgICAgICAgICAgICAgICAg ICAvKiBUZXh0ICovCisgICAgICAgICAgY2FzZSAnYSc6ICAgICAgICAgICAgICAgICAgICAgLyog ImFzY2lpIiAqLworICAgICAgICAgIGNhc2UgJ2InOiAgICAgICAgICAgICAgICAgICAgIC8qIEJp bmFyeSAqLworICAgICAgICAgICAgYmluYXJ5ID0gKGMgPT0gJ2InKSA/IEZUVF9CSU4gOiBGVFRf QVNDOworICAgICAgICAgICAgZnRwX3hmZXJtb2RlID0gWE1PREVfTTsKKyAgICAgICAgICAgIGZp bGVwZWVrID0gMDsKKyAgICAgICAgICAgIHBhdHRlcm5zID0gMDsKKyAgICAgICAgICAgIGJyZWFr OworCisgICAgICAgICAgY2FzZSAnZyc6ICAgICAgICAgICAgICAgICAgICAgLyogR2V0ICovCisg ICAgICAgICAgY2FzZSAncCc6ICAgICAgICAgICAgICAgICAgICAgLyogUHV0ICovCisgICAgICAg ICAgY2FzZSAncyc6IHsgICAgICAgICAgICAgICAgICAgLyogU2VuZCAoPSBQdXQpICovCisgICAg ICAgICAgICAgIGludCBoYXZlZmlsZXMsIHJjOworICAgICAgICAgICAgICBpZiAoZnRwX2FjdGlv bikgeworICAgICAgICAgICAgICAgICAgZmF0YWwoIk9ubHkgb25lIEZUUCBhY3Rpb24gYXQgYSB0 aW1lIHBsZWFzZSIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICgqKHhwKzEp KSB7CisgICAgICAgICAgICAgICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBh ZnRlciAtcyIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG5maWxzID0gMDsgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmaWxlIGNvdW50ZXIgKi8KKyAgICAgICAgICAgICAg aGF2ZWZpbGVzID0gMDsgICAgICAgICAgICAvKiBBc3N1bWUgbm90aGluZyB0byBzZW5kICAqLwor ICAgICAgICAgICAgICBjbWxpc3QgPSB4YXJndiArIDE7ICAgICAgIC8qIFJlbWVtYmVyIHRoaXMg cG9pbnRlciAqLworCisgICAgICAgICAgICAgIHdoaWxlICgrK3hhcmd2LCAtLXhhcmdjID4gMCkg eyAvKiBUcmF2ZXJzZSB0aGUgbGlzdCAqLworICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ2cn KSB7CisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWZpbGVzKys7CisgICAgICAgICAgICAgICAg ICAgICAgbmZpbHMrKzsKKyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICAgIH0KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICAgICAgICAgICAgICAgIGlmICghc3Ry Y21wKCp4YXJndiwiLiIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgaGF2ZWZpbGVzID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICBuZmlscysrOworICAgICAgICAgICAgICAgICAgICAgIHJl Y3Vyc2l2ZSA9IDE7CisgICAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBSRUNVUlNJ VkUgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKChyYyA9IHpjaGtpKCp4YXJndikpID4gLTEg fHwgKHJjID09IC0yKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgIChyYyAhPSAtMikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWZpbGVzID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIG5maWxzKys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXN3aWxk KCp4YXJndikgJiYgbnp4cGFuZCgqeGFyZ3YsMCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBoYXZlZmlsZXMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbmZpbHMrKzsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHhhcmdj KyssIHhhcmd2LS07ICAgICAgICAgLyogQWRqdXN0IGFyZ3YvYXJnYyAqLworICAgICAgICAgICAg ICBpZiAoIWhhdmVmaWxlcykgeworICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ2cnKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIk5vIGZpbGVzIHRvIHB1dCIpOworICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiTm8gZmlsZXMg dG8gZ2V0Iik7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgZnRwX2FjdGlvbiA9IGM7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0K KyAgICAgICAgICBjYXNlICdEJzogICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgKi8K KyAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF9yZGlyLCp4YXJndik7CisgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgIGNhc2UgJ20nOiAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGUgKEFj dGl2ZS9QYXNzaXZlICovCisgICAgICAgICAgICBmdHBfcHN2ID0gbG9va3VwKG1vZGV0YWIsKnhh cmd2LDIsTlVMTCk7CisgICAgICAgICAgICBpZiAoZnRwX3BzdiA8IDApIGZhdGFsKCJJbnZhbGlk IG1vZGUiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnUCc6CisgICAg ICAgICAgICBtYWtlc3RyKCZmdHBfdG1wLCp4YXJndik7ICAgLyogWW91LUtub3ctV2hhdCAqLwor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdZJzogICAgICAgICAgICAgICAg ICAgICAvKiBObyBpbml0aWFsaXphdGlvbiBmaWxlICovCisgICAgICAgICAgICBicmVhazsgICAg ICAgICAgICAgICAgICAgICAgLyogKGFscmVhZHkgZG9uZSBpbiBwcmVzY2FuKSAqLworCisjaWZk ZWYgQ0tfVVJMCisgICAgICAgICAgY2FzZSAnVSc6IHsgICAgICAgICAgICAgICAgICAgLyogVVJM ICovCisgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSBzZXQgYnkgdXJscGFyc2UoKSAtIGFueSBu b3Qgc2V0IGFyZSBOVUxMICovCisgICAgICAgICAgICAgIGlmIChnX3VybC5ob3MpIHsKKy8qCisg IEtlcm1pdCBoYXMgYWNjZXB0ZWQgaG9zdDpwb3J0IG5vdGF0aW9uIHNpbmNlIG1hbnkgeWVhcnMg YmVmb3JlIFVSTHMgd2VyZQorICBpbnZlbnRlZC4gIFVuZm9ydHVuYXRlbHksIFVSTHMgY29uZmxp Y3Qgd2l0aCB0aGlzIG5vdGF0aW9uLiAgVGh1cyAiZnRwCisgIGhvc3Q6NDQ5IiBsb29rcyBsaWtl IGEgVVJMIGFuZCByZXN1bHRzIGluIHNlcnZpY2UgPSBob3N0IGFuZCBob3N0ID0gNDQ5LgorICBI ZXJlIHdlIHRyeSB0byBjYXRjaCB0aGlzIHNpdHVhdGlvbiB0cmFuc3BhcmVudGx5IHRvIHRoZSB1 c2VyLgorKi8KKyAgICAgICAgICAgICAgICAgIGlmIChja3N0cmNtcChnX3VybC5zdmMsImZ0cCIs LTEsMCkKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgY2tzdHJjbXAo Z191cmwuc3ZjLCJmdHBzIiwtMSwwKQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAg ICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdfdXJsLnVzciAmJgor ICAgICAgICAgICAgICAgICAgICAgICAgICAhZ191cmwucHN3ICYmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICFnX3VybC5wb3IgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIWdfdXJs LnB0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBnX3VybC5wb3IgPSBnX3VybC5ob3M7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdXJsLmhvcyA9IGdfdXJsLnN2YzsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgZ191cmwuc3ZjID0gImZ0cCI7CisgICAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2codG1wYnVm LFRNUEJVRlNJWiwiTm9uLUZUUCBVUkw6IHNlcnZpY2U9IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ191cmwuc3ZjLCIgaG9zdD0iLGdfdXJsLmhvcyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIGZhdGFsKHRtcGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgbWFrZXN0cigmZnRwX2hvc3Qs Z191cmwuaG9zKTsKKyAgICAgICAgICAgICAgICAgIGlmIChnX3VybC51c3IpIHsKKyAgICAgICAg ICAgICAgICAgICAgICBoYXZlZnRwdWlkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jcHkodWlkYnVmLGdfdXJsLnVzcixVSURCVUZMRU4pOworICAgICAgICAgICAgICAgICAgICAg IG1ha2VzdHIoJmZ0cF9sb2duYW1lLHVpZGJ1Zik7CisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICBpZiAoZ191cmwucHN3KSB7CisgICAgICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmZnRwX3RtcCxnX3VybC5wc3cpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgaWYgKGdfdXJsLnB0aCkgeworICAgICAgICAgICAgICAgICAgICAgIGlmICghZ191 cmwudXNyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVmdHB1aWQgPSAxOworICAg ICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLCJhbm9ueW1vdXMiLFVJREJV RkxFTik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0cF9sb2duYW1lLHVp ZGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGlm IChmdHBfYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJPbmx5IG9u ZSBGVFAgYWN0aW9uIGF0IGEgdGltZSBwbGVhc2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF5ZmxnKQorICAgICAgICAgICAgICAgICAg ICAgICAgcXVpZXQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIG5maWxzID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgICBkdW1teVswXSA9IGdfdXJsLnB0aDsKKyAgICAgICAgICAgICAgICAg ICAgICBjbWxpc3QgPSBkdW1teTsKKyAgICAgICAgICAgICAgICAgICAgICBmdHBfYWN0aW9uID0g J2cnOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgeHAgPSBOVUxMOwor ICAgICAgICAgICAgICAgICAgaGF2ZXVybCA9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1VSTCAqLworCisjaWZkZWYg RlRQX1NFQ1VSSVRZCisgICAgICAgICAgY2FzZSAnayc6IHsgICAgICAgICAgICAgICAgICAgLyog SzQgUmVhbG0gKi8KKyNpZmRlZiBGVFBfS1JCNAorICAgICAgICAgICAgICBja3N0cm5jcHkoZnRw X3JlYWxtLCp4YXJndiwgUkVBTE1fU1opOworI2VuZGlmIC8qIEZUUF9LUkI0ICovCisgICAgICAg ICAgICAgIGlmIChmdHBfZGViKSBwcmludGYoIks0IFJlYWxtID0gWyVzXVxuIiwqeGFyZ3YpOwor ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgY2FzZSAnZic6IHsK KyNpZmRlZiBGVFBfR1NTQVBJCisgICAgICAgICAgICAgIGZ0cF9jZncgPSAxOworICAgICAgICAg ICAgICBpZiAoZnRwX2RlYikgcHJpbnRmKCJLNSBDcmVkZW50aWFscyBGb3J3YXJkaW5nXG4iKTsK KyNlbHNlIC8qIEZUUF9HU1NBUEkgKi8KKyAgICAgICAgICAgICAgcHJpbnRmKCJLNSBDcmVkZW50 aWFscyBGb3J3YXJkaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOworI2VuZGlmIC8qIEZUUF9HU1NBUEkg Ki8KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgJ3gn OiB7CisgICAgICAgICAgICAgIGZ0cF9jcnkgPSAxOworICAgICAgICAgICAgICBpZiAoZnRwX2Rl YikgcHJpbnRmKCJBdXRvZW5jcnlwdGlvblxuIik7CisgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIH0KKyAgICAgICAgICBjYXNlICdjJzogeyAgICAgICAgICAgICAgICAgICAvKiBDaXBo ZXIgKi8KKyNpZmRlZiBGVFBfU1JQCisgICAgICAgICAgICAgIGlmICghc3JwX3NlbGNpcGhlcigq eGFyZ3YpKSB7CisgICAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikgcHJpbnRmKCJTUlAgY2lw aGVyIHR5cGU6IFwiJXNcIlxuIiwqeGFyZ3YpOworICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg ICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIFNSUCBjaXBoZXIgdHlwZTogXCIlc1wiXG4iLCp4 YXJndik7CisjZWxzZSAvKiBGVFBfU1JQICovCisgICAgICAgICAgICAgIHByaW50ZigiP1NSUCBu b3Qgc3VwcG9ydGVkXG4iKTsKKyNlbmRpZiAvKiBGVFBfU1JQICovCisgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlICdIJzogeworI2lmZGVmIEZUUF9TUlAK KyAgICAgICAgICAgICAgaWYgKCFzcnBfc2VsaGFzaCgqeGFyZ3YpKSB7CisgICAgICAgICAgICAg ICAgICBpZiAoZnRwX2RlYikgcHJpbnRmKCJTUlAgaGFzaCB0eXBlOiBcIiVzXCJcbiIsKnhhcmd2 KTsKKyAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/SW52YWxp ZCBTUlAgaGFzaCB0eXBlOiBcIiVzXCJcbiIsKnhhcmd2KTsKKyNlbHNlIC8qIEZUUF9TUlAgKi8K KyAgICAgICAgICAgICAgcHJpbnRmKCI/U1JQIG5vdCBzdXBwb3J0ZWRcbiIpOworI2VuZGlmIC8q IEZUUF9TUlAgKi8KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAg IGNhc2UgJ3onOiB7CisgICAgICAgICAgICAgIC8qICp4YXJndiBjb250YWlucyBhIHZhbHVlIG9m IHRoZSBmb3JtIHRhZz12YWx1ZSAqLworICAgICAgICAgICAgICAvKiB3ZSBuZWVkIHRvIGxvb2t1 cCB0aGUgdGFnIGFuZCBzYXZlIHRoZSB2YWx1ZSAgKi8KKyAgICAgICAgICAgICAgY2hhciAqIHAg PSBOVUxMLCAqIHEgPSBOVUxMOworICAgICAgICAgICAgICBtYWtlc3RyKCZwLCp4YXJndik7Cisg ICAgICAgICAgICAgIHkgPSBja2luZGV4KCI9IixwLDAsMCwxKTsKKyAgICAgICAgICAgICAgaWYg KHkgPiAwKQorICAgICAgICAgICAgICAgIHBbeS0xXSA9ICdcMCc7CisgICAgICAgICAgICAgIHgg PSBsb29rdXAoZnRwenRhYixwLG5mdHB6dGFiLCZ6KTsKKyAgICAgICAgICAgICAgaWYgKHggPCAw KSB7CisgICAgICAgICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIHNlY3VyaXR5IG9wdGlvbjog XCIlc1wiXG4iLHApOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg aWYgKGZ0cF9kZWIpCisJCSAgICBwcmludGYoIlNlY3VyaXR5IG9wdGlvbjogXCIlcyIscCk7Cisg ICAgICAgICAgICAgICAgICBpZiAoZnRwenRhYlt6XS5mbGdzICYgQ01fQVJHKSB7CisgICAgICAg ICAgICAgICAgICAgICAgaWYgKHkgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFs KCI/TWlzc2luZyByZXF1aXJlZCB2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICAgIHEgPSAm cFt5XTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoISpxKQorICAgICAgICAgICAgICAgICAg ICAgICAgZmF0YWwoIj9NaXNzaW5nIHJlcXVpcmVkIHZhbHVlIik7CisgICAgICAgICAgICAgICAg ICAgICAgaWYgKGZ0cF9kZWIpCisJCQlwcmludGYoIj0lc1wiIixxKTsKKyAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZnRwenRhYlt6XS5rd3ZhbCkgeyAvKiAt eiBvcHRpb25zIHcvYXJncyAqLworICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX05PR1NTOgor I2lmZGVmIEZUUF9HU1NBUEkKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwg RlRQQVRZUFMgJiYgZnRwX2F1dGhfdHlwZVt6XTsgeisrKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChmdHBfYXV0aF90eXBlW3pdID09IEZUQV9HSzUpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAoeSA9IHo7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHkgPCAoRlRQQVRZUFMtMSkgJiYgZnRwX2F1dGhfdHlwZVt5XTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeSsrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVt5 XSA9IGZ0cF9hdXRoX3R5cGVbeSsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0 cF9hdXRoX3R5cGVbRlRQQVRZUFMtMV0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICB9CisjZW5kaWYgLyogRlRQX0dTU0FQSSAqLworICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX05PSzQ6CisjaWZkZWYgRlRQX0tSQjQK KyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgRlRQQVRZUFMgJiYgZnRwX2F1 dGhfdHlwZVt6XTsgeisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfYXV0 aF90eXBlW3pdID09IEZUQV9LNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y ICh5ID0gejsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA8IChGVFBBVFlQ Uy0xKSAmJiBmdHBfYXV0aF90eXBlW3ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB5KysKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW3ldID0gZnRwX2F1dGhfdHlwZVt5 KzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVtGVFBBVFlQ Uy0xXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBG VFBfS1JCNCAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICBjYXNlIEZUX05PU1JQOgorI2lmZGVmIEZUUF9TUlAKKyAgICAgICAgICAgICAgICAgICAg ICBmb3IgKHogPSAwOyB6IDwgRlRQQVRZUFMgJiYgZnRwX2F1dGhfdHlwZVt6XTsgeisrKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfYXV0aF90eXBlW3pdID09IEZUQV9TUlAp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IHo7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHkgPCAoRlRQQVRZUFMtMSkgJiYgZnRwX2F1dGhfdHlw ZVt5XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSsrCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnRwX2F1dGhfdHlwZVt5XSA9IGZ0cF9hdXRoX3R5cGVbeSsxXTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbRlRQQVRZUFMtMV0gPSAwOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogRlRQX1NSUCAqLworICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX05PU1NMOgor I2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCBGVFBB VFlQUyAmJiBmdHBfYXV0aF90eXBlW3pdOyB6KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGZ0cF9hdXRoX3R5cGVbel0gPT0gRlRBX1NTTCkgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yICh5ID0gejsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeSA8IChGVFBBVFlQUy0xKSAmJiBmdHBfYXV0aF90eXBlW3ldOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB5KysKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW3ldID0g ZnRwX2F1dGhfdHlwZVt5KzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2F1 dGhfdHlwZVtGVFBBVFlQUy0xXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg IH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgY2FzZSBGVF9OT1RMUzoKKyNpZmRlZiBDS19TU0wKKyAgICAgICAg ICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgRlRQQVRZUFMgJiYgZnRwX2F1dGhfdHlwZVt6 XTsgeisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfYXV0aF90eXBlW3pd ID09IEZUQV9UTFMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IHo7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPCAoRlRQQVRZUFMtMSkgJiYg ZnRwX2F1dGhfdHlwZVt5XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSsr CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZnRwX2F1dGhfdHlwZVt5XSA9IGZ0cF9hdXRoX3R5cGVbeSsxXTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbRlRQQVRZUFMtMV0gPSAw OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICov CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug RlRfQ0VSVEZJOgorI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JnNzbF9yc2FfY2VydF9maWxlLHEpOworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX09LQ0VSVDoKKyNp ZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgICBzc2xfY2VydHNva19mbGFnID0gMTsK KyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgY2FzZSBGVF9ERUJVRzoKKyNpZmRlZiBERUJVRworICAgICAgICAgICAg ICAgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJu IGludCBkZWJ0aW07CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVi bG9nID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOworICAgICAgICAgICAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICBjYXNlIEZUX0tFWToKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZzc2xfcnNhX2tleV9maWxlLHEpOworI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEZU X1NFQ1VSRToKKyAgICAgICAgICAgICAgICAgICAgICAvKiBubyBlcXVpdmFsZW50ICovCisgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRfVkVS SUZZOgorI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgICAgICAgIGlmICghcmRpZ2l0cyhx KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBudW1iZXI6ICVzXG4iLHEp OworICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJpZnlfZmxhZyA9IGF0b2kocSk7CisjZW5k aWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpIHBy aW50ZigiXCJcbiIpOworICAgICAgICAgICAgICBmcmVlKHApOworICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICB9CisjZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCisKKyAgICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgZmF0YWwyKCp4YXJndiwKKyAgICAgICAgICAgICAgICAgICAi dW5rbm93biBjb21tYW5kLWxpbmUgb3B0aW9uLCB0eXBlIFwiZnRwIC1oXCIgZm9yIGhlbHAiCisg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXhwKSBicmVhazsK KyAgICAgICAgYyA9ICorK3hwOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgaWYgb3B0aW9u cyBhcmUgYnVuZGxlZCAqLworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9D TURMICovCisKK2ludAorZnRwaXNjb25uZWN0ZWQoKSB7CisgICAgcmV0dXJuKGNvbm5lY3RlZCk7 Cit9CisKK2ludAorZnRwaXNsb2dnZWRpbigpIHsKKyAgICByZXR1cm4oY29ubmVjdGVkID8gbG9n Z2VkaW4gOiAwKTsKK30KKworaW50CitmdHBpc3NlY3VyZSgpIHsKKyAgICByZXR1cm4oKGZ0cF9k cGwgPT0gRlBMX0NMUiAmJiAhc3NsX2Z0cF9wcm94eSkgPyAwIDogMSk7Cit9CisKK3N0YXRpYyBW T0lECitmdHNjcmVlbihuLCBjLCB6LCBzKSBpbnQgbjsgY2hhciBjOyBDS19PRkZfVCB6OyBjaGFy ICogczsgeworICAgIGlmIChkaXNwbGEgJiYgZmRpc3BsYSAmJiAhYmFja2dyZCAmJiAhcXVpZXQg JiYgIW91dDJzY3JlZW4pIHsKKyAgICAgICAgaWYgKCFkcHlhY3RpdmUpIHsKKyAgICAgICAgICAg IGNrc2NyZWVuKFNDUl9QVCwnUycsKENLX09GRl9UKTAsIiIpOworICAgICAgICAgICAgZHB5YWN0 aXZlID0gMTsKKyAgICAgICAgfQorICAgICAgICBja3NjcmVlbihuLGMseixzKTsKKyAgICB9Cit9 CisKKyNpZm5kZWYgT1MyCisvKiAgZyBtIHMgdCBpIG0gZSByICAtLSAgTWlsbGlzZWNvbmQgdGlt ZXIgKi8KKworbG9uZworZ21zdGltZXIoKSB7CisjaWZkZWYgSEFWRV9NU0VDUworICAgIC8qIEZv ciB0aG9zZSB2ZXJzaW9ucyBvZiB6dGltZSgpIHRoYXQgYWxzbyBzZXQgZ2xvYmFsIHp0bXNlYy4g Ki8KKyAgICBjaGFyICpwID0gTlVMTDsKKyAgICBsb25nIHo7CisgICAgenRpbWUoJnApOworICAg IGlmICghcCkgcmV0dXJuKDBMKTsKKyAgICBpZiAoISpwKSByZXR1cm4oMEwpOworICAgIHogPSBh dG9sKHArMTEpICogMzYwMEwgKyBhdG9sKHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKKyAgICBy ZXR1cm4oeiAqIDEwMDAgKyB6dG1zZWMpOworI2Vsc2UKKyAgICByZXR1cm4oKGxvbmcpdGltZShO VUxMKSAqIDEwMDBMKTsKKyNlbmRpZiAvKiBIQVZFX01TRUNTICovCit9CisjZW5kaWYgLyogT1My ICovCisKKy8qICBkIG8gcyBlIHQgZiB0IHAgIC0tICBUaGUgU0VUIEZUUCBjb21tYW5kICAqLwor CitpbnQKK2Rvc2V0ZnRwKCkgeworICAgIGludCBjeDsKKyAgICBpZiAoKGN4ID0gY21rZXkoZnRw c2V0LG5mdHBzZXQsIiIsIiIseHhzdHJpbmcpKSA8IDApIC8qIFNldCB3aGF0PyAqLworICAgICAg cmV0dXJuKGN4KTsKKyAgICBzd2l0Y2ggKGN4KSB7CisKKyAgICAgIGNhc2UgRlRTX0ZOQzogICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCisgICAgICAg IGlmICgoeCA9IGNta2V5KGZ0cGNvbHh0YWIsbmZ0cGNvbHgsIiIsIiIseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBmdHBfZm5jID0geDsKKyAgICAgICAgcmV0dXJu KDEpOworCisgICAgICBjYXNlIEZUU19DTlY6ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5h bWUgY29udmVyc2lvbiAqLworICAgICAgICBpZiAoKHggPSBjbWtleShmbnRhYixuZm50YWIsIiIs ImF1dG9tYXRpYyIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBm dHBfY252ID0geDsKKyAgICAgICAgcmV0dXJuKDEpOworCisgICAgICBjYXNlIEZUU19EQkc6ICAg ICAgICAgICAgICAgICAgICAgLyogRGVidWcgbWVzc2FnZXMgKi8KKyAgICAgICAgcmV0dXJuKHNl dG9uKCZmdHBfZGViKSk7CisKKyAgICAgIGNhc2UgRlRTX0xPRzogICAgICAgICAgICAgICAgICAg ICAvKiBBdXRvLWxvZ2luICovCisgICAgICAgIHJldHVybihzZXRvbigmZnRwX2xvZykpOworCisg ICAgICBjYXNlIEZUU19QU1Y6ICAgICAgICAgICAgICAgICAgICAgLyogUGFzc2l2ZSBtb2RlICov CisJcmV0dXJuKGRvc2V0ZnRwcHN2KCkpOworCisgICAgICBjYXNlIEZUU19TUEM6ICAgICAgICAg ICAgICAgICAgICAgLyogU2VuZCBwb3J0IGNvbW1hbmRzICovCisgICAgICAgIHggPSBzZXRvbigm ZnRwX3NwYyk7CisgICAgICAgIGlmICh4ID4gMCkgc2VuZHBvcnQgPSBmdHBfc3BjOworICAgICAg ICByZXR1cm4oeCk7CisKKyAgICAgIGNhc2UgRlRTX1RZUDogICAgICAgICAgICAgICAgICAgICAv KiBUeXBlICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KGZ0cHR5cCxuZnRwdHlwLCIiLCIiLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeSk7CisJZnRwX3R5cCA9IHg7CisJZ19mdHBfdHlwID0geDsKKwl0 ZW5leCA9IChmdHBfdHlwID09IEZUVF9URU4pOworICAgICAgICByZXR1cm4oMSk7CisKKyAgICAg IGNhc2UgRlRTX1VTTjogICAgICAgICAgICAgICAgICAgICAvKiBVbmlxdWUgc2VydmVyIG5hbWVz ICovCisgICAgICAgIHJldHVybihzZXRvbigmZnRwX3VzbikpOworCisgICAgICBjYXNlIEZUU19W Qk06ICAgICAgICAgICAgICAgICAgICAgLyogVmVyYm9zZSBtb2RlICovCisgICAgICAgIGlmICgo eCA9IHNldG9uKCZmdHBfdmJtKSkgPCAwKSAgLyogUGVyLWNvbW1hbmQgY29weSAqLworICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgZnRwX3ZieCA9IGZ0cF92Ym07ICAgICAgICAgICAgICAv KiBHbG9iYWwgc3RpY2t5IGNvcHkgKi8KKyAgICAgICAgcmV0dXJuKHgpOworCisgICAgICBjYXNl IEZUU19UU1Q6ICAgICAgICAgICAgICAgICAgICAgLyogImlmICh0ZXN0aW5nKSIgbWVzc2FnZXMg Ki8KKyAgICAgICAgcmV0dXJuKHNldG9uKCZ0ZXN0aW5nKSk7CisKKyAgICAgIGNhc2UgRlRTX1BS TTogICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIHBlcm1pc3Npb25zICovCisgICAgICAgIHJl dHVybihzZXRvbmF1dCgmZnRwX3BybSkpOworCisgICAgICBjYXNlIEZUU19BVVQ6ICAgICAgICAg ICAgICAgICAgICAgLyogQXV0by1hdXRoZW50aWNhdGlvbiAqLworICAgICAgICByZXR1cm4oc2V0 b24oJmZ0cF9hdXQpKTsKKworICAgICAgY2FzZSBGVFNfRVJSOiAgICAgICAgICAgICAgICAgICAg IC8qIEVycm9yIGFjdGlvbiAqLworICAgICAgICBpZiAoKHggPSBjbWtleShxb3JwLDIsIiIsIiIs eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBmdHBfZXJyID0geDsK KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgICBj YXNlIEZUU19YTEE6ICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNsYXRpb24gKi8KKyAgICAg ICAgcmV0dXJuKHNldG9uKCZmdHBfeGxhKSk7CisKKyAgICAgIGNhc2UgRlRTX0NTUjogICAgICAg ICAgICAgICAgICAgICAvKiBTZXJ2ZXIgY2hhcnNldCAqLworICAgICAgICBpZiAoKHggPSBjbWtl eShmY3N0YWIsbmZpbGMsImNoYXJhY3Rlci1zZXQiLCJ1dGY4Iix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAg ICAgICByZXR1cm4oeSk7CisgICAgICAgIGZ0cF9jc3IgPSB4OworICAgICAgICBmdHBfeGxhID0g MTsgICAgICAgICAgICAgICAgICAgIC8qIEFsc28gZW5hYmxlIHRyYW5zbGF0aW9uICovCisgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgICBj YXNlIEZUU19HRlQ6CisgICAgICAgIHJldHVybihzZXRvbigmZ2V0X2F1dG8pKTsgICAgICAgLyog R0VULWZpbGV0eXBlLXN3aXRjaGluZyAqLworCisgICAgICBjYXNlIEZUU19EQVQ6CisgICAgICAg IHJldHVybihzZXRvbigmZnRwX2RhdGVzKSk7ICAgICAgLyogU2V0IGZpbGUgZGF0ZXMgKi8KKwor I2lmZGVmIEZUUF9USU1FT1VUCisgICAgICBjYXNlIEZUU19UTU86CQkJLyogVGltZW91dCAqLwor ICAgICAgICBpZiAoKHggPSBjbW51bSgiTnVtYmVyIG9mIHNlY29uZHMiLCIwIiwxMCwmeix4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeSA9IGNtY2Zt KCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisJZnRwX3RpbWVvdXQgPSB6OworCXJldHVy bihzdWNjZXNzID0gMSk7CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKworICAgICAgY2FzZSBG VFNfU1RPOiB7CQkJLyogU2VydmVyIHRpbWUgb2Zmc2V0ICovCisJICBjaGFyICogcywgKiBwID0g TlVMTDsKKwkgIGxvbmcgazsKKwkgIGlmICgoeCA9IGNtZmxkKCJbKy1daGhbOm1tWzpzc11dIiwi KzAiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgICByZXR1cm4oeCk7CisJICBpZiAoIXN0cmNtcChz LCIrMCIpKSB7CisJICAgICAgcyA9IE5VTEw7CisJICB9IGVsc2UgaWYgKCh4ID0gZGVsdGEyc2Vj KHMsJmspKSA8IDApIHsgLyogQ2hlY2sgZm9ybWF0ICovCisJICAgICAgcHJpbnRmKCI/SW52YWxp ZCB0aW1lIG9mZnNldFxuIik7CisJICAgICAgcmV0dXJuKC05KTsKKwkgIH0KKwkgIG1ha2VzdHIo JnAscyk7CQkvKiBNYWtlIGEgc2FmZSBjb3B5IHRoZSBzdHJpbmcgKi8KKwkgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgewkvKiBHZXQgY29uZmlybWF0aW9uICovCisJICAgICAgaWYgKHApCisJCW1h a2VzdHIoJnAsTlVMTCk7CisJICAgICAgcmV0dXJuKHgpOworCSAgfQorCSAgZnRzX3N0byA9IHA7 CQkJLyogQ29uZmlybWVkIC0gc2V0IHRoZSBzdHJpbmcuICovCisJICByZXR1cm4oc3VjY2VzcyA9 IDEpOworICAgICAgfQorICAgICAgY2FzZSBGVFNfQVBXOiB7CisJICBjaGFyICogczsKKwkgIGlm ICgoeCA9IGNtdHh0KCJUZXh0IiwgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKKwkgICAgcmV0dXJu KHgpOworCSAgbWFrZXN0cigmZnRwX2FwdywgKnMgPyBzIDogTlVMTCk7CisJICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworICAgICAgfQorCisgICAgICBjYXNlIEZUU19CVUc6IHsKKyAgICAgICAgICBp ZiAoKHggPSBjbWtleShmdHBidWd0YWIsbmZ0cGJ1ZywiIiwiIix4eHN0cmluZykpIDwgMCkgCisJ ICAgIHJldHVybih4KTsKKyAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgICBjYXNlIEZUQl9TVjI6CisJICAgIHJldHVybiBzZXRvbigmZnRwX2J1Z191c2Vfc3Ns X3YyKTsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICBkZWZhdWx0OgorCSAgICByZXR1 cm4oLTIpOworICAgICAgICAgIH0KKyAgICAgIH0KKworI2lmZGVmIEZUUF9TRUNVUklUWQorICAg ICAgY2FzZSBGVFNfQ1JZOiAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG8tZW5jcnlwdGlvbiAq LworICAgICAgICByZXR1cm4oc2V0b24oJmZ0cF9jcnkpKTsKKworICAgICAgY2FzZSBGVFNfQ0ZX OiAgICAgICAgICAgICAgICAgICAgIC8qIENyZWRlbnRpYWwtZm9yd2FyZGluZyAqLworICAgICAg ICByZXR1cm4oc2V0b24oJmZ0cF9jZncpKTsKKworICAgICAgY2FzZSBGVFNfQ1BMOiAgICAgICAg ICAgICAgICAgICAgIC8qIENvbW1hbmQgcHJvdGVjdGlvbiBsZXZlbCAqLworICAgICAgICBpZiAo KHggPSBjbWtleShmdHBwcm8sbmZ0cHBybywiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHgp OworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgc3Vj Y2VzcyA9IGZ0c19jcGwoeCk7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKworICAgICAgY2Fz ZSBGVFNfRFBMOiAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEgcHJvdGVjdGlvbiBsZXZlbCAq LworICAgICAgICBpZiAoKHggPSBjbWtleShmdHBwcm8sbmZ0cHBybywiIiwiIix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5 KTsKKyAgICAgICAgICBzdWNjZXNzID0gZnRzX2RwbCh4KTsKKyAgICAgICAgICByZXR1cm4oc3Vj Y2Vzcyk7CisKKyAgICAgIGNhc2UgRlRTX0FUUDogeyAgICAgICAgICAgICAgICAgICAvKiBGVFAg QXV0aCBUeXBlICovCisgICAgICAgICAgaW50IGksIGosIGF0eXBlc1s4XTsKKworICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXko ZnRwYXV0aCxuZnRwYXV0aCwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPT0g MCkgPyAiYXV0b21hdGljIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0 cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgaWYgKHkgPT0gLTMpCisgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIGlmIChpID4gMCAmJiAoeSA9PSBGVEFfQVVUTykpIHsKKyAg ICAgICAgICAgICAgICAgIHByaW50ZigiP0Nob2ljZSBtYXkgb25seSBiZSB1c2VkIGluIGZpcnN0 IHBvc2l0aW9uLlxyXG4iKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAg ICAgICAgICAgICAgaWYgKGF0eXBlc1tqXSA9PSB5KSB7CisgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJcclxuP0Nob2ljZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXHJcbiIpOworICAgICAg ICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgYXR5cGVzW2ldID0geTsKKyAgICAgICAgICAgICAgaWYg KHkgPT0gRlRBX0FVVE8pIHsKKyAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChp IDwgOCkKKyAgICAgICAgICAgIGF0eXBlc1tpXSA9IDA7CisgICAgICAgICAgaWYgKCh6ID0gY21j Zm0oKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgIGlmIChhdHlwZXNb MF0gPT0gRlRBX0FVVE8pIHsKKyAgICAgICAgICAgICAgaSA9IDA7CisjaWZkZWYgRlRQX0dTU0FQ SQorICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW2krK10gPSBGVEFfR0s1OworI2VuZGlmIC8q IEZUUF9HU1NBUEkgKi8KKyNpZmRlZiBGVFBfU1JQCisgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5 cGVbaSsrXSA9IEZUQV9TUlA7CisjZW5kaWYgLyogRlRQX1NSUCAqLworI2lmZGVmIEZUUF9LUkI0 CisgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaSsrXSA9IEZUQV9LNDsKKyNlbmRpZiAvKiBG VFBfS1JCNCAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW2kr K10gPSBGVEFfVExTOworICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW2krK10gPSBGVEFfU1NM OworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICBmdHBfYXV0aF90eXBlW2ldID0g MDsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsg aSsrKQorICAgICAgICAgICAgICAgIGZ0cF9hdXRoX3R5cGVbaV0gPSBhdHlwZXNbaV07CisgICAg ICAgICAgfQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisKKyAgICAg IGNhc2UgRlRTX1NSUDoKKyNpZmRlZiBGVFBfU1JQCisgICAgICAgIGlmICgoeCA9IGNta2V5KGZ0 cHNycCxuZnRwc3JwLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsK KyAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgY2FzZSBTUlBfQ0lQSEVSOgorICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkoY2lwaGVydGFiLG5jaXBoZXJ0YWIsIiIsIiIseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoeiA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgc3VjY2Vz cyA9ICFzcnBfc2VsY2lwaGVyKGNpcGhlcnRhYlt4XS5rd2QpOworICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MpOworICAgICAgICAgIGNhc2UgU1JQX0hBU0g6CisgICAgICAgICAgICBpZiAoKHgg PSBjbWtleShoYXNodGFiLG5oYXNodGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAg ICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhc3JwX3NlbGhhc2go aGFzaHRhYlt4XS5rd2QpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAgICAg ICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9Cisj ZWxzZSAvKiBGVFBfU1JQICovCisgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAg ICAgICByZXR1cm4oeik7CisgICAgICAgIHJldHVybigtMik7CisjZW5kaWYgLyogRlRQX1NSUCAq LworI2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLworCisgICAgICBjYXNlIEZUU19ESVM6CisJZG94 ZGlzKDIpOwkJCS8qIDIgPT0gZnRwICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisK KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigtMik7CisgICAgfQorfQorCitpbnQKK2Z0 cGJ5ZSgpIHsKKyAgICBpbnQgeDsKKyAgICBpZiAoIWNvbm5lY3RlZCkKKyAgICAgIHJldHVybigx KTsKKyAgICBpZiAodGVzdGluZykKKyAgICAgIHByaW50ZigiIGZ0cCBjbG9zaW5nICVzLi4uXG4i LGZ0cF9ob3N0KTsKKyAgICB4ID0gZnRwY2xvc2UoKTsKKyAgICByZXR1cm4oKHggPiAtMSkgPyAx IDogMCk7Cit9CisKKy8qICBvIHAgZSBuIGYgdCBwICAtLSAgUGFyc2UgRlRQIGhvc3RuYW1lICYg cG9ydCBhbmQgb3BlbiAqLworCitzdGF0aWMgaW50CitvcGVuZnRwKHMsb3BuX3RscykgY2hhciAq IHM7IGludCBvcG5fdGxzOyB7CisgICAgY2hhciBjLCAqIHAsICogaG9zdG5hbWUgPSBOVUxMLCAq aG9zdHNhdmUgPSBOVUxMLCAqIHNlcnZpY2UgPSBOVUxMOworICAgIGludCBpLCBuLCBoYXZlaG9z dCA9IDAsIGdldHZhbCA9IDAsIHJjID0gLTksIG9wbl9wc3YgPSAtMSwgbm9sb2dpbiA9IDA7Cisg ICAgaW50IGhhdmV1c2VyID0gMDsKKyAgICBzdHJ1Y3QgRkRCIHN3LCBmbCwgY207CisgICAgZXh0 ZXJuIGludCBubmV0ZGlyOyAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzZXJ2aWNlcyBkaXJl Y3RvcnkgKi8KKyAgICBleHRlcm4gaW50IG5oY291bnQ7ICAgICAgICAgICAgICAgICAvKiBMb29r dXAgcmVzdWx0ICovCisgICAgZXh0ZXJuIGNoYXIgKm5oX3BbXTsgICAgICAgICAgICAgICAgLyog TmV0d29yayBkaXJlY3RvcnkgZW50cnkgcG9pbnRlcnMgKi8KKyAgICBleHRlcm4gY2hhciAqbmhf cDJbXTsgICAgICAgICAgICAgICAvKiBOZXR3b3JrIGRpcmVjdG9yeSBlbnRyeSBuZXR0eXBlICov CisKKyAgICBpZiAoIXMpIHJldHVybigtMik7CisgICAgaWYgKCEqcykgcmV0dXJuKC0yKTsKKwor ICAgIG1ha2VzdHIoJmhvc3RuYW1lLHMpOworICAgIGhvc3RzYXZlID0gaG9zdG5hbWU7CisgICAg bWFrZXN0cigmZnRwX2xvZ25hbWUsTlVMTCk7CisgICAgYW5vbnltb3VzID0gMDsKKyAgICBub2lu aXQgPSAwOworCisgICAgZGVidWcoRjExMCwiZnRwIG9wZW4iLGhvc3RuYW1lLDApOworCisgICAg aWYgKHNhdl9wc3YgPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBwcmV2YWlsaW5n IGFjdGl2ZS9wYXNzaXZlICovCisgICAgICAgIGZ0cF9wc3YgPSBzYXZfcHN2OyAgICAgICAgICAg ICAgLyogc2VsZWN0aW9uIGluIGNhc2UgaXQgd2FzICovCisgICAgICAgIHNhdl9wc3YgPSAtMTsg ICAgICAgICAgICAgICAgICAgLyogdGVtcG9yYXJpbHkgb3ZlcnJpZGVuIGJ5IGEgc3dpdGNoICov CisgICAgfQorICAgIGlmIChzYXZfbG9nID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIERpdHRv IGZvciBhdXRvbG9naW4gKi8KKyAgICAgICAgZnRwX2xvZyA9IHNhdl9sb2c7CisgICAgICAgIHNh dl9sb2cgPSAtMTsKKyAgICB9CisgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU3dpdGNoZXMgKi8KKyAgICAgICAgICAgX0NNS0VZLAorICAgICAgICAgICAiU2Vydmlj ZSBuYW1lIG9yIHBvcnQ7XG4gb3Igc3dpdGNoIiwKKyAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbmZ0cHN3aSwg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8K KyAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMjogbm9uZSAqLworICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAg IC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgZnRwc3dpdGFiLCAgICAgICAg ICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICZmbCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOwor ICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEEgaG9zdCBuYW1lIG9y IGFkZHJlc3MgKi8KKyAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBm Y29kZSAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhlbHAg Ki8KKyAgICAgICAgICAgInhZekJvbyIsICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICov CisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5n IGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgIHh4c3RyaW5nLAorICAg ICAgICAgICBOVUxMLAorICAgICAgICAgICAmY20KKyAgICAgICAgICAgKTsKKyAgICBjbWZkYmko JmNtLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGNvbmZpcm1hdGlvbiAqLwor ICAgICAgICAgICBfQ01DRk0sCisgICAgICAgICAgICIiLAorICAgICAgICAgICAiIiwKKyAgICAg ICAgICAgIiIsCisgICAgICAgICAgIDAsCisgICAgICAgICAgIDAsCisgICAgICAgICAgIE5VTEws CisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgKTsKKworICAg IGZvciAobiA9IDA7OyBuKyspIHsKKyAgICAgICAgcmMgPSBjbWZkYigmc3cpOyAgICAgICAgICAg ICAgICAvKiBQYXJzZSBhIHNlcnZpY2UgbmFtZSBvciBhIHN3aXRjaCAqLworICAgICAgICBpZiAo cmMgPCAwKQorICAgICAgICAgIGdvdG8geG9wZW5mdHA7CisKKyAgICAgICAgaWYgKGNtcmVzdWx0 LmZjb2RlID09IF9DTUNGTSkgeyAvKiBEb25lPyAqLworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNRkxEKSB7ICAvKiBQb3J0ICovCisg ICAgICAgICAgICBpZiAoY2tzdHJjbXAoInhZekJvbyIsY21yZXN1bHQuc3Jlc3VsdCwtMSwxKSkK KyAgICAgICAgICAgICAgbWFrZXN0cigmc2VydmljZSxjbXJlc3VsdC5zcmVzdWx0KTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgbWFrZXN0cigmc2VydmljZSxvcG5fdGxzPyJmdHBz IjoiZnRwIik7CisgICAgICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKSB7 IC8qIEhhdmUgYSBzd2l0Y2ggKi8KKyAgICAgICAgICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAg ICAgICAvKiBnZXQgYnJlYWsgY2hhcmFjdGVyICovCisgICAgICAgICAgICBnZXR2YWwgPSAoYyA9 PSAnOicgfHwgYyA9PSAnPScpOworICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICAgIGlm IChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOworICAg ICAgICAgICAgICAgIGdvdG8geG9wZW5mdHA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoIWdldHZhbCAmJiAoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgeworICAgICAgICAgICAg ICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAg ICAgICAgICAgICBnb3RvIHhvcGVuZnRwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dp dGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7IC8qIFN3aXRjaCAqLworICAgICAgICAgICAgICBjYXNl IE9QTl9BTk86ICAgICAgICAgICAgIC8qIC9BTk9OWU1PVVMgKi8KKyAgICAgICAgICAgICAgICBh bm9ueW1vdXMrKzsKKwkJbm9sb2dpbiA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGNhc2UgT1BOX05JTjogICAgICAgICAgICAgLyogL05PSU5JVCAqLworICAgICAg ICAgICAgICAgIG5vaW5pdCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICBjYXNlIE9QTl9OT0w6ICAgICAgICAgICAgIC8qIC9OT0xPR0lOICovCisgICAgICAgICAgICAg ICAgbm9sb2dpbisrOworCQlhbm9ueW1vdXMgPSAwOworCQltYWtlc3RyKCZmdHBfbG9nbmFtZSxO VUxMKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBPUE5fUFNX OiAgICAgICAgICAgICAvKiAvUEFTU1dPUkQgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWFub255 bW91cykgICAgICAgICAvKiBEb24ndCBsb2cgcmVhbCBwYXNzd29yZHMgKi8KKyAgICAgICAgICAg ICAgICAgIGRlYm9rID0gMDsKKyAgICAgICAgICAgICAgICByYyA9IGNtZmxkKCJQYXNzd29yZCBm b3IgRlRQIHNlcnZlciIsIiIsJnAseHhzdHJpbmcpOworICAgICAgICAgICAgICAgIGlmIChyYyA9 PSAtMykgeworICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZmdHBfdG1wLE5VTEwpOworICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGdv dG8geG9wZW5mdHA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmZnRwX3RtcCxicnN0cmlwKHApKTsKKwkJICAgIG5vbG9naW4gPSAwOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz ZSBPUE5fVVNSOiAgICAgICAgICAgICAvKiAvVVNFUiAqLworICAgICAgICAgICAgICAgIHJjID0g Y21mbGQoIlVzZXJuYW1lIGZvciBGVFAgc2VydmVyIiwiIiwmcCx4eHN0cmluZyk7CisgICAgICAg ICAgICAgICAgaWYgKHJjID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0 cF9sb2duYW1lLE5VTEwpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmMgPCAwKSB7Cisg ICAgICAgICAgICAgICAgICAgIGdvdG8geG9wZW5mdHA7CisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKwkJICAgIG5vbG9naW4gPSAwOworICAgICAgICAgICAgICAgICAgICBhbm9ueW1vdXMgPSAw OworCQkgICAgaGF2ZXVzZXIgPSAxOworICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZmdHBf bG9nbmFtZSxicnN0cmlwKHApKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgT1BOX0FDQzoKKyAgICAgICAgICAgICAgICByYyA9 IGNtZmxkKCJBY2NvdW50IGZvciBGVFAgc2VydmVyIiwiIiwmcCx4eHN0cmluZyk7CisgICAgICAg ICAgICAgICAgaWYgKHJjID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmZ0 cF9hY2MsTlVMTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYyA8IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgZ290byB4b3BlbmZ0cDsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZmdHBfYWNjLGJyc3RyaXAocCkpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBP UE5fQUNUOgorICAgICAgICAgICAgICAgIG9wbl9wc3YgPSAwOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICBjYXNlIE9QTl9QU1Y6CisgICAgICAgICAgICAgICAgb3BuX3Bz diA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgT1BOX1RM UzoKKyAgICAgICAgICAgICAgICBvcG5fdGxzID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobiA9PSAwKSB7ICAgICAgICAgICAgICAgICAg IC8qIEFmdGVyIGZpcnN0IHRpbWUgdGhyb3VnaCAqLworICAgICAgICAgICAgY21mZGJpKCZzdywg ICAgICAgICAgICAgICAgIC8qIGFjY2VwdCBvbmx5IHN3aXRjaGVzICovCisgICAgICAgICAgICAg ICAgICAgX0NNS0VZLAorICAgICAgICAgICAgICAgICAgICJcbkNhcnJpYWdlIHJldHVybiB0byBj b25maXJtIHRvIGNvbW1hbmQsIG9yIHN3aXRjaCIsCisgICAgICAgICAgICAgICAgICAgIiIsCisg ICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgbmZ0cHN3aSwKKyAgICAg ICAgICAgICAgICAgICA0LAorICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nLAorICAgICAgICAg ICAgICAgICAgIGZ0cHN3aXRhYiwKKyAgICAgICAgICAgICAgICAgICAmY20KKyAgICAgICAgICAg ICAgICAgICApOworICAgICAgICB9CisgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICBkZWJ1ZyhG MTAwLCJmdHAgb3BlbmZ0cCB3aGlsZSBleGl0IiwiIiwwKTsKKyAgICByYyA9IGNtY2ZtKCk7Cisg ICAgZGVidWcoRjEwMSwiZnRwIG9wZW5mdHAgY21jZm0gcmMiLCIiLHJjKTsKKyAgICBpZiAocmMg PCAwKQorICAgICAgZ290byB4b3BlbmZ0cDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBp ZiAob3BuX3BzdiA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiAvUEFTU0lWRSBvciAvQUNUSVZF IHN3aXRjaCBnaXZlbiAqLworICAgICAgICBzYXZfcHN2ID0gZnRwX3BzdjsKKyAgICAgICAgZnRw X3BzdiA9IG9wbl9wc3Y7CisgICAgfQorICAgIGlmIChub2xvZ2luIHx8IGhhdmV1c2VyKSB7CQkv KiAvTk9MT0dJTiBvciAvVVNFUiBzd2l0Y2ggZ2l2ZW4gKi8KKwlzYXZfbG9nID0gZnRwX2xvZzsK KwlmdHBfbG9nID0gaGF2ZXVzZXIgPyAxIDogMDsKKyAgICB9CisgICAgaWYgKCpob3N0bmFtZSA9 PSAnPScpIHsgICAgICAgICAgICAgLyogQnlwYXNzIGRpcmVjdG9yeSBsb29rdXAgKi8KKyAgICAg ICAgaG9zdG5hbWUrKzsgICAgICAgICAgICAgICAgICAgICAvKiBpZiBob3N0bmFtZSBzdGFydHMg d2l0aCAnPScgKi8KKyAgICAgICAgaGF2ZWhvc3QrKzsKKyAgICB9IGVsc2UgaWYgKGlzZGlnaXQo Kmhvc3RuYW1lKSkgeyAgICAvKiBvciBpZiBpdCBzdGFydHMgd2l0aCBhIGRpZ2l0ICovCisgICAg ICAgIGhhdmVob3N0Kys7CisgICAgfQorICAgIGlmICghc2VydmljZSkKKyAgICAgIG1ha2VzdHIo JnNlcnZpY2Usb3BuX3Rscz8iZnRwcyI6ImZ0cCIpOworCisjaWZuZGVmIE5PRElBTAorICAgIGlm ICghaGF2ZWhvc3QgJiYgbm5ldGRpciA+IDApIHsgICAgIC8qIElmIHRoZXJlIGlzIGEgbmV0d29y a3MgZGlyZWN0b3J5ICovCisgICAgICAgIGx1bmV0KGhvc3RuYW1lKTsgICAgICAgICAgICAgICAg LyogTG9vayB1cCB0aGUgbmFtZSAqLworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgb3BlbmZ0cCBs dW5ldCIsaG9zdG5hbWUsbmhjb3VudCk7CisgICAgICAgIGlmIChuaGNvdW50ID09IDApIHsKKyAg ICAgICAgICAgIGlmICh0ZXN0aW5nKQorICAgICAgICAgICAgICBwcmludGYoIiBmdHAgb3BlbiB0 cnlpbmcgXCIlcyAlc1wiLi4uXG4iLGhvc3RuYW1lLHNlcnZpY2UpOworICAgICAgICAgICAgc3Vj Y2VzcyA9IGZ0cG9wZW4oaG9zdG5hbWUsc2VydmljZSxvcG5fdGxzKTsKKyAgICAgICAgICAgIGRl YnVnKEYxMDEsImZ0cCBvcGVuZnRwIEEgZnRwb3BlbiBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKyAg ICAgICAgICAgIHJjID0gc3VjY2VzczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlu dCBmb3VuZCA9IDA7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmhjb3VudDsgaSsrKSB7 CisgICAgICAgICAgICAgICAgaWYgKG5oX3AyW2ldKSAgICAgICAgICAgLyogSWYgbmV0d29yayB0 eXBlIHNwZWNpZmllZCAqLworICAgICAgICAgICAgICAgICAgaWYgKGNrc3RyY21wKG5oX3AyW2ld LCJ0Y3AvaXAiLHN0cmxlbihuaF9wMltpXSksMCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICAgICAgICAgIGZvdW5kKys7CisgICAgICAgICAgICAgICAgbWFrZXN0cigm aG9zdG5hbWUsbmhfcFtpXSk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwb3BlbiBs dW5ldCBzdWJzdGl0dXRpb24iLGhvc3RuYW1lLGkpOworICAgICAgICAgICAgICAgIGlmICh0ZXN0 aW5nKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgZnRwIG9wZW4gdHJ5aW5nIFwiJXMgJXNc Ii4uLlxuIixob3N0bmFtZSxzZXJ2aWNlKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gZnRw b3Blbihob3N0bmFtZSxzZXJ2aWNlLG9wbl90bHMpOworICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsImZ0cCBvcGVuZnRwIEIgZnRwb3BlbiBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKyAgICAgICAg ICAgICAgICByYyA9IHN1Y2Nlc3M7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZm91 bmQpIHsgICAgICAgICAgICAgICAvKiBFLmcuIGlmIG5vIG5ldHdvcmsgdHlwZXMgbWF0Y2ggKi8K KyAgICAgICAgICAgICAgICBpZiAodGVzdGluZykKKyAgICAgICAgICAgICAgICAgIHByaW50Zigi IGZ0cCBvcGVuIHRyeWluZyBcIiVzICVzXCIuLi5cbiIsaG9zdG5hbWUsc2VydmljZSk7CisgICAg ICAgICAgICAgICAgc3VjY2VzcyA9IGZ0cG9wZW4oaG9zdG5hbWUsc2VydmljZSxvcG5fdGxzKTsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgb3BlbmZ0cCBDIGZ0cG9wZW4gc3VjY2Vz cyIsIiIsc3VjY2Vzcyk7CisgICAgICAgICAgICAgICAgcmMgPSBzdWNjZXNzOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAgICAg ICAgaWYgKHRlc3RpbmcpCisgICAgICAgICAgcHJpbnRmKCIgZnRwIG9wZW4gdHJ5aW5nIFwiJXMg JXNcIi4uLlxuIixob3N0bmFtZSxzZXJ2aWNlKTsKKyAgICAgICAgc3VjY2VzcyA9IGZ0cG9wZW4o aG9zdG5hbWUsc2VydmljZSxvcG5fdGxzKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIG9wZW5m dHAgRCBmdHBvcGVuIHN1Y2Nlc3MiLGhvc3RuYW1lLHN1Y2Nlc3MpOworICAgICAgICBkZWJ1ZyhG MTExLCJmdHAgb3BlbmZ0cCBEIGZ0cG9wZW4gY29ubmVjdGVkIixob3N0bmFtZSxjb25uZWN0ZWQp OworICAgICAgICByYyA9IHN1Y2Nlc3M7CisjaWZuZGVmIE5PRElBTAorICAgIH0KKyNlbmRpZiAv KiBOT0RJQUwgKi8KKworICB4b3BlbmZ0cDoKKyAgICBkZWJ1ZyhGMTAxLCJmdHAgb3BlbmZ0cCB4 b3BlbmZ0cCByYyIsIiIscmMpOworICAgIGlmIChob3N0c2F2ZSkgZnJlZShob3N0c2F2ZSk7Cisg ICAgaWYgKHNlcnZpY2UpIGZyZWUoc2VydmljZSk7CisgICAgaWYgKHJjIDwgMCAmJiBmdHBfbG9n bmFtZSkgeworICAgICAgICBmcmVlKGZ0cF9sb2duYW1lKTsKKyAgICAgICAgZnRwX2xvZ25hbWUg PSBOVUxMOworICAgIH0KKyAgICBpZiAoZnRwX3RtcCkgeworICAgICAgICBmcmVlKGZ0cF90bXAp OworICAgICAgICBmdHBfdG1wID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKwor Vk9JRAkJCQkJLyogMTIgQXVnIDIwMDcgKi8KK2RvZnRwZ2xvYmFsdHlwZSh4KSBpbnQgeDsgewor ICAgIGZ0cF94ZmVybW9kZSA9IFhNT0RFX007CQkvKiBTZXQgbWFudWFsIEZUUCB0cmFuc2ZlciBt b2RlICovCisgICAgZnRwX3R5cCA9IHg7CQkJLyogVXNlZCBieSB0b3AtbGV2ZWwgQklOQVJZIGFu ZCAqLworICAgIGdfZnRwX3R5cCA9IHg7CQkJLyogQVNDSUkgY29tbWFuZHMuICovCisgICAgZ2V0 X2F1dG8gPSAwOworICAgIGZvcmNldHlwZSA9IDE7Cit9CisKK2ludAorZG9mdHBhY2N0KCkgewor ICAgIGludCB4OworICAgIGNoYXIgKiBzOworICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgYWNj b3VudCIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgQ0hF Q0tDT05OKCk7CisgICAgbWFrZXN0cigmZnRwX2FjYyxicnN0cmlwKHMpKTsKKyAgICBpZiAodGVz dGluZykKKyAgICAgIHByaW50ZigiIGZ0cCBhY2NvdW50OiBcIiVzXCJcbiIsZnRwX2FjYyk7Cisg ICAgc3VjY2VzcyA9IChmdHBjbWQoIkFDQ1QiLGZ0cF9hY2MsLTEsLTEsZnRwX3ZibSkgPT0gUkVQ TFlfQ09NUExFVEUpOworICAgIHJldHVybihzdWNjZXNzKTsKK30KKworaW50Citkb2Z0cHVzcigp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9nIGluIGFzIFVTRVIgKi8KKyAgICBl eHRlcm4gY2hhciB1aWRidWZbXTsKKyAgICBleHRlcm4gY2hhciBwd2J1ZltdOworICAgIGV4dGVy biBpbnQgIHB3ZmxnLCBwd2NyeXB0OworICAgIGludCB4OworICAgIGNoYXIgKnMsICogYWNjdCA9 ICIiOworCisgICAgZGVib2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3Qg bG9nICovCisKKyAgICBpZiAoKHggPSBjbWZsZCgiUmVtb3RlIHVzZXJuYW1lIG9yIElEIix1aWRi dWYsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgY2tzdHJuY3B5KGxp bmUsYnJzdHJpcChzKSxMSU5CVUZTSVopOyAvKiBicnN0cmlwOiAxNSBKYW4gMjAwMyAqLworICAg IGlmICgoeCA9IGNtZmxkKCJSZW1vdGUgcGFzc3dvcmQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7 CisgICAgICAgIGlmICh4ID09IC0zKSB7IC8qIG5vIGlucHV0ICovCisgICAgICAgICAgICBpZiAo IHB3YnVmWzBdICYmIHB3ZmxnICkgeworICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYs KGNoYXIgKilwd2J1ZixUTVBCVUZTSVopOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIGlm ICggcHdjcnlwdCApCisgICAgICAgICAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNoYXIgKil0bXBi dWYpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg Y2tzdHJuY3B5KHRtcGJ1ZixicnN0cmlwKHMpLFRNUEJVRlNJWik7CisgICAgfQorICAgIGlmICgo eCA9IGNtdHh0KCJSZW1vdGUgYWNjb3VudFxuIG9yIEVudGVyIG9yIENSIHRvIGNvbmZpcm0gdGhl IGNvbW1hbmQiLAorICAgICAgICAgICAgICAgICAgICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisg ICAgICByZXR1cm4oeCk7CisgICAgQ0hFQ0tDT05OKCk7CisgICAgaWYgKCpzKSB7CisgICAgICAg IHggPSBzdHJsZW4odG1wYnVmKTsKKyAgICAgICAgaWYgKHggPiAwKSB7CisgICAgICAgICAgICBh Y2N0ID0gJnRtcGJ1Zlt4KzJdOworICAgICAgICAgICAgY2tzdHJuY3B5KGFjY3QsYnJzdHJpcChz KSxUTVBCVUZTSVogLSB4IC0gMik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHRlc3Rpbmcp CisgICAgICBwcmludGYoIiBmdHAgdXNlciBcIiVzXCIgcGFzc3dvcmQgXCIlc1wiLi4uXG4iLGxp bmUsdG1wYnVmKTsKKyAgICBzdWNjZXNzID0gZnRwX3VzZXIobGluZSx0bXBidWYsYWNjdCk7Cisj aWZkZWYgQ0tMT0dESUFMCisgICAgZG9sb2dmdHAoKTsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8K KyAgICByZXR1cm4oc3VjY2Vzcyk7Cit9CisKKy8qIERPICh2YXJpb3VzIEZUUCBjb21tYW5kcyku Li4gKi8KKworaW50Citkb2Z0cHR5cCh0eXBlKSBpbnQgdHlwZTsgeyAgICAgICAgICAgICAgLyog VFlQRSAqLworICAgIENIRUNLQ09OTigpOworICAgIGZ0cF90eXAgPSB0eXBlOworICAgIGNoYW5n ZXR5cGUoZnRwX3R5cCxmdHBfdmJtKTsKKyAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHR5cCBjaGFuZ2Vk IHR5cGUiLCIiLHR5cGUpOworICAgIHJldHVybigxKTsKK30KKworc3RhdGljIGludAorZG9mdHB4 bWtkKHMsdmJtKSBjaGFyICogczsgaW50IHZibTsgeyAgIC8qIE1LRElSIGFjdGlvbiAqLworICAg IGludCBsY3MgPSAtMSwgcmNzID0gLTE7CisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAoZnRwX3hs YSkgeworICAgICAgICBsY3MgPSBmdHBfY3NsOworICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0g ZmNoYXJzZXQ7CisgICAgICAgIHJjcyA9IGZ0cF9jc3g7CisgICAgICAgIGlmIChyY3MgPCAwKSBy Y3MgPSBmdHBfY3NyOworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgZGVidWcoRjEx MCwiZnRwIGRvZnRwbWtkIixzLDApOworICAgIGlmIChmdHBjbWQoIk1LRCIscyxsY3MscmNzLHZi bSkgPT0gUkVQTFlfQ09NUExFVEUpCisgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIGlm IChmdHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikgeworICAgICAgICBpZiAoIXF1aWV0 KQorICAgICAgICAgIHByaW50ZigiTUtEIGNvbW1hbmQgbm90IHJlY29nbml6ZWQsIHRyeWluZyBY TUtEXG4iKTsKKyAgICAgICAgaWYgKGZ0cGNtZCgiWE1LRCIscyxsY3MscmNzLHZibSkgPT0gUkVQ TFlfQ09NUExFVEUpCisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKK30KKworc3RhdGljIGludAorZG9mdHBta2QoKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE1LRElSIHBhcnNlICovCisgICAgaW50IHg7CisgICAg Y2hhciAqIHM7CisgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBkaXJlY3RvcnkgbmFtZSIsICIi LCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgQ0hFQ0tDT05OKCk7 CisgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgIGlmICh0ZXN0aW5nKQorICAg ICAgcHJpbnRmKCIgZnRwIG1rZGlyIFwiJXNcIi4uLlxuIixsaW5lKTsKKyAgICByZXR1cm4oc3Vj Y2VzcyA9IGRvZnRweG1rZChsaW5lLC0xKSk7Cit9CisKK3N0YXRpYyBpbnQKK2RvZnRwcm1kKCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSTURJUiAqLworICAgIGludCB4LCBsY3Mg PSAtMSwgcmNzID0gLTE7CisgICAgY2hhciAqIHM7CisgICAgaWYgKCh4ID0gY210eHQoIlJlbW90 ZSBkaXJlY3RvcnkiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOwor ICAgIENIRUNLQ09OTigpOworICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICBp ZiAodGVzdGluZykKKyAgICAgIHByaW50ZigiIGZ0cCBybWRpciBcIiVzXCIuLi5cbiIsbGluZSk7 CisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAoZnRwX3hsYSkgeworICAgICAgICBsY3MgPSBmdHBf Y3NsOworICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7CisgICAgICAgIHJjcyA9 IGZ0cF9jc3g7CisgICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOworICAgIH0KKyNl bmRpZiAvKiBOT0NTRVRTICovCisgICAgaWYgKGZ0cGNtZCgiUk1EIixsaW5lLGxjcyxyY3MsZnRw X3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpCisgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAg IGlmIChmdHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikgeworICAgICAgICBpZiAoIXF1 aWV0KQorICAgICAgICAgIHByaW50ZigiUk1EIGNvbW1hbmQgbm90IHJlY29nbml6ZWQsIHRyeWlu ZyBYTUtEXG4iKTsKKyAgICAgICAgc3VjY2VzcyA9IChmdHBjbWQoIlhSTUQiLGxpbmUsbGNzLHJj cyxmdHBfdmJtKSA9PSBSRVBMWV9DT01QTEVURSk7CisgICAgfSBlbHNlCisgICAgICBzdWNjZXNz ID0gMDsKKyAgICByZXR1cm4oc3VjY2Vzcyk7Cit9CisKK3N0YXRpYyBpbnQKK2RvZnRwcmVuKCkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU5BTUUgKi8KKyAgICBpbnQgeDsKKyAg ICBjaGFyICogczsKKyAgICBpZiAoKHggPSBjbWZsZCgiUmVtb3RlIGZpbGVuYW1lIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBja3N0cm5jcHkobGluZSxzLExJ TkJVRlNJWik7CisgICAgaWYgKCh4ID0gY21mbGQoIk5ldyBuYW1lIGZvciByZW1vdGUgZmlsZSIs IiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgY2tzdHJuY3B5KHRt cGJ1ZixzLFRNUEJVRlNJWik7CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0 dXJuKHgpOworICAgIENIRUNLQ09OTigpOworICAgIGlmICh0ZXN0aW5nKQorICAgICAgcHJpbnRm KCIgZnRwIHJlbmFtZSBcIiVzXCIgKHRvKSBcIiVzXCIuLi5cbiIsbGluZSx0bXBidWYpOworICAg IHN1Y2Nlc3MgPSBmdHBfcmVuYW1lKGxpbmUsdG1wYnVmKTsKKyAgICByZXR1cm4oc3VjY2Vzcyk7 Cit9CisKK2ludAorZG9mdHByZXMoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJF U0VUIChsb2cgb3V0IHdpdGhvdXQgY2xvc2UpICovCisgICAgaW50IHg7CisgICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIENIRUNLQ09OTigpOworICAgIGlm ICh0ZXN0aW5nKQorICAgICAgcHJpbnRmKCIgZnRwIHJlc2V0Li4uXG4iKTsKKyAgICByZXR1cm4o c3VjY2VzcyA9IGZ0cF9yZXNldCgpKTsKK30KKworc3RhdGljIGludAorZG9mdHB4aGxwKCkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhFTFAgKi8KKyAgICBpbnQgeDsKKyAgICBjaGFy ICogczsKKyAgICBpZiAoKHggPSBjbXR4dCgiQ29tbWFuZCBuYW1lIiwgIiIsICZzLCB4eHN0cmlu ZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBDSEVDS0NPTk4oKTsKKyAgICBja3N0cm5j cHkobGluZSxzLExJTkJVRlNJWik7CisgICAgaWYgKHRlc3RpbmcpCisgICAgICBwcmludGYoIiBm dHAgaGVscCBcIiVzXCIuLi5cbiIsbGluZSk7CisgICAgLyogTm8gbmVlZCB0byB0cmFuc2xhdGUg LS0gYWxsIEZUUCBjb21tYW5kcyBhcmUgQVNDSUkgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IChm dHBjbWQoIkhFTFAiLGxpbmUsMCwwLDEpID09IFJFUExZX0NPTVBMRVRFKSk7Cit9CisKK3N0YXRp YyBpbnQKK2RvZnRwZGlyKGN4KSBpbnQgY3g7IHsgICAgICAgICAgICAgICAgICAvKiBbVl1ESVJF Q1RPUlkgKi8KKyAgICBpbnQgeCwgbGNzID0gMCwgcmNzID0gMCwgeGxhdGUgPSAwOworICAgIGNo YXIgKiBwLCAqIHMsICogbSA9ICIiOworICAgIGlmIChjeCA9PSBGVFBfVkRJKSB7CisgICAgICAg IHN3aXRjaCAoc2VydmVydHlwZSkgeworICAgICAgICAgIGNhc2UgU1lTX1ZNUzoKKyAgICAgICAg ICBjYXNlIFNZU19ET1M6CisgICAgICAgICAgY2FzZSBTWVNfVE9QUzEwOgorICAgICAgICAgIGNh c2UgU1lTX1RPUFMyMDoKKyAgICAgICAgICAgIG0gPSAiKi4qIjsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtID0gIioiOworICAgICAgICB9Cisg ICAgfQorICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgZmlsZXNwZWMiLG0sJnMseHhzdHJpbmcp KSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQor ICAgICAgcmV0dXJuKHgpOworI2lmZGVmIE5PQ1NFVFMKKyAgICB4bGF0ZSA9IDA7CisjZWxzZQor ICAgIHhsYXRlID0gZnRwX3hsYTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgbGluZVswXSA9 IE5VTDsKKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgcyA9IGxpbmU7Cisg ICAgQ0hFQ0tDT05OKCk7CisKKyNpZm5kZWYgTk9DU0VUUworICAgIGlmICh4bGF0ZSkgeyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBGVFAgQ0hBUkFDVEVSLVNFVC1UUkFOU0xBVElPTiAq LworICAgICAgICBsY3MgPSBmdHBfY3NsOyAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGNoYXJz ZXQgKi8KKyAgICAgICAgaWYgKGxjcyA8IDApIGxjcyA9IGZjaGFyc2V0OworICAgICAgICBpZiAo bGNzIDwgMCkgeGxhdGUgPSAwOworICAgIH0KKyAgICBpZiAoeGxhdGUpIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTdGlsbCBPTj8gKi8KKyAgICAgICAgcmNzID0gZnRwX2NzeDsgICAgICAg ICAgICAgICAgICAvKiBSZW1vdGUgKFNlcnZlcikgY2hhcnNldCAqLworICAgICAgICBpZiAocmNz IDwgMCkgcmNzID0gZnRwX2NzcjsKKyAgICAgICAgaWYgKHJjcyA8IDApIHhsYXRlID0gMDsKKyAg ICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgaWYgKHRlc3RpbmcpIHsKKyAgICAgICAg cCA9IHM7CisgICAgICAgIGlmICghcCkgcCA9ICIiOworICAgICAgICBpZiAoKnApCisgICAgICAg ICAgcHJpbnRmKCJEaXJlY3Rvcnkgb2YgZmlsZXMgJXMgYXQgJXM6XG4iLCBsaW5lLCBmdHBfaG9z dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIkRpcmVjdG9yeSBvZiBmaWxlcyBh dCAlczpcbiIsIGZ0cF9ob3N0KTsKKyAgICB9CisgICAgZGVidWcoRjExMSwiZG9mdHBkaXIiLHMs Y3gpOworCisgICAgaWYgKGN4ID09IEZUUF9ESVIpIHsKKyAgICAgICAgLyogVHJhbnNsYXRpb24g b2YgbGluZVtdIGlzIGRvbmUgaW5zaWRlIHJlY3ZyZXF1ZXN0KCkgKi8KKyAgICAgICAgLyogd2hl biBpdCBjYWxscyBmdHBjbWQoKS4gKi8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPQorICAgICAg ICAgIChyZWN2cmVxdWVzdCgiTElTVCIsIi0iLHMsIndiIiwwLDAsTlVMTCx4bGF0ZSxsY3MscmNz KSA9PSAwKSk7CisgICAgfQorICAgIHN1Y2Nlc3MgPSAxOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFZESVIgLSBvbmUgZmlsZSBhdCBhIHRpbWUuLi4gKi8KKyAgICBwID0gKGNoYXIgKilyZW1v dGVfZmlsZXMoMSwoQ0hBUiAqKXMsTlVMTCwwKTsgLyogR2V0IHRoZSBmaWxlIGxpc3QgKi8KKyAg ICBjYW5jZWxncm91cCA9IDA7CisgICAgaWYgKCFmdHBfdmJtICYmICFxdWlldCkKKyAgICAgIHBy aW50bGluZXMgPSAxOworICAgIHdoaWxlIChwICYmICFjYW5jZWxmaWxlICYmICFjYW5jZWxncm91 cCkgeyAvKiBTVEFUIG9uZSBmaWxlICovCisgICAgICAgIGlmIChmdHBjbWQoIlNUQVQiLHAsbGNz LHJjcyxmdHBfdmJtKSA8IDApIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcCA9IChjaGFyICopcmVtb3RlX2ZpbGVzKDAs TlVMTCxOVUxMLDApOyAvKiBHZXQgbmV4dCBmaWxlICovCisgICAgICAgIGRlYnVnKEYxMTAsImZ0 cCB2ZGlyIGZpbGUiLHMsMCk7CisgICAgfQorICAgIHJldHVybihzdWNjZXNzKTsKK30KKworc3Rh dGljIGludAorZG9mdHBwd2QoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBXRCAq LworICAgIGludCB4LCBsY3MgPSAtMSwgcmNzID0gLTE7CisjaWZuZGVmIE5PQ1NFVFMKKyAgICBp ZiAoZnRwX3hsYSkgeworICAgICAgICBsY3MgPSBmdHBfY3NsOworICAgICAgICBpZiAobGNzIDwg MCkgbGNzID0gZmNoYXJzZXQ7CisgICAgICAgIHJjcyA9IGZ0cF9jc3g7CisgICAgICAgIGlmIChy Y3MgPCAwKSByY3MgPSBmdHBfY3NyOworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworICAgIENIRUNLQ09OTigp OworICAgIGlmIChmdHBjbWQoIlBXRCIsTlVMTCxsY3MscmNzLDEpID09IFJFUExZX0NPTVBMRVRF KSB7CisgICAgICAgIHN1Y2Nlc3MgPSAxOworICAgIH0gZWxzZSBpZiAoZnRwY29kZSA9PSA1MDAg fHwgZnRwY29kZSA9PSA1MDIpIHsKKyAgICAgICAgaWYgKGZ0cF9kZWIpCisgICAgICAgICAgcHJp bnRmKCJQV0QgY29tbWFuZCBub3QgcmVjb2duaXplZCwgdHJ5aW5nIFhQV0RcbiIpOworICAgICAg ICBzdWNjZXNzID0gKGZ0cGNtZCgiWFBXRCIsTlVMTCxsY3MscmNzLDEpID09IFJFUExZX0NPTVBM RVRFKTsKKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MpOworfQorCitzdGF0aWMgaW50Citkb2Z0 cGN3ZChzLHZibSkgY2hhciAqIHM7IGludCB2Ym07IHsgICAgLyogQ0QgKENXRCkgKi8KKyAgICBp bnQgbGNzID0gLTEsIHJjcyA9IC0xOworI2lmbmRlZiBOT0NTRVRTCisgICAgaWYgKGZ0cF94bGEp IHsKKyAgICAgICAgbGNzID0gZnRwX2NzbDsKKyAgICAgICAgaWYgKGxjcyA8IDApIGxjcyA9IGZj aGFyc2V0OworICAgICAgICByY3MgPSBmdHBfY3N4OworICAgICAgICBpZiAocmNzIDwgMCkgcmNz ID0gZnRwX2NzcjsKKyAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgZGVidWcoRjEx MCwiZnRwIGRvZnRwY3dkIixzLDApOworICAgIGlmIChmdHBjbWQoIkNXRCIscyxsY3MscmNzLHZi bSkgPT0gUkVQTFlfQ09NUExFVEUpCisgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIGlm IChmdHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikgeworICAgICAgICBpZiAoIXF1aWV0 KQorICAgICAgICAgIHByaW50ZigiQ1dEIGNvbW1hbmQgbm90IHJlY29nbml6ZWQsIHRyeWluZyBY Q1dEXG4iKTsKKyAgICAgICAgaWYgKGZ0cGNtZCgiWENXRCIscyxsY3MscmNzLHZibSkgPT0gUkVQ TFlfQ09NUExFVEUpCisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKK30KKworc3RhdGljIGludAorZG9mdHBjZHVwKCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENEVVAgKi8KKyAgICBkZWJ1ZyhGMTAwLCJmdHAgZG9m dHBjZHVwIiwiIiwwKTsKKyAgICBpZiAoZnRwY21kKCJDRFVQIixOVUxMLDAsMCwxKSA9PSBSRVBM WV9DT01QTEVURSkKKyAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgaWYgKGZ0cGNvZGUg PT0gNTAwIHx8IGZ0cGNvZGUgPT0gNTAyKSB7CisgICAgICAgIGlmICghcXVpZXQpCisgICAgICAg ICAgcHJpbnRmKCJDRFVQIGNvbW1hbmQgbm90IHJlY29nbml6ZWQsIHRyeWluZyBYQ1VQXG4iKTsK KyAgICAgICAgaWYgKGZ0cGNtZCgiWENVUCIsTlVMTCwwLDAsMSkgPT0gUkVQTFlfQ09NUExFVEUp CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKK30KKworLyogcyB5IG4gYyBkIGkgciAgLS0gIFN5bmNocm9uaXplcyBjbGllbnQg JiBzZXJ2ZXIgZGlyZWN0b3JpZXMgKi8KKworLyoKKyAgQ2FsbCB3aXRoOgorICAgIGxvY2FsID0g cG9pbnRlciB0byBwYXRobmFtZSBvZiBsb2NhbCBmaWxlIHRvIGJlIHNlbnQuCisgICAgc2ltICAg PSAxIGZvciBzaW11bGF0aW9uLCAwIGZvciByZWFsIHVwbG9hZGluZy4KKyAgUmV0dXJucyAwIG9u IGZhaWx1cmUsIDEgb24gc3VjY2Vzcy4KKworICBUaGUgJ2xvY2FsJyBhcmd1bWVudCBpcyByZWxh dGl2ZSB0byB0aGUgaW5pdGlhbCBkaXJlY3Rvcnkgb2YgdGhlIE1QVVQsCisgIGkuZS4gdGhlIHJv b3Qgb2YgdGhlIHRyZWUgYmVpbmcgdXBsb2FkZWQuICBJZiB0aGUgZGlyZWN0b3J5IG9mIHRoZQor ICBhcmd1bWVudCBmaWxlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHBy ZXZpb3VzIGZpbGUKKyAgKHdoaWNoIGlzIHN0b3JlZCBpbiBnbG9iYWwgcHV0cGF0aFtdKSwgdGhp cyByb3V0aW5lIGRvZXMgdGhlIGFwcHJvcHJpYXRlCisgIENXRHMsIENEVVBzLCBhbmQvb3IgTUtE SVJzIHRvIHBvc2l0aW9uIHRoZSBGVFAgc2VydmVyIGluIHRoZSBzYW1lIHBsYWNlLgorKi8KK3N0 YXRpYyBpbnQgY2RsZXZlbCA9IDAsIGNkc2ltbHZsID0gMDsJLyogVHJlZS1sZXZlbCB0cmFja2Vy cyAqLworCitzdGF0aWMgaW50CitzeW5jZGlyKGxvY2FsLHNpbSkgY2hhciAqIGxvY2FsOyBpbnQg c2ltOyB7CisgICAgY2hhciBidWZbQ0tNQVhQQVRIKzFdOworICAgIGNoYXIgdG1wW0NLTUFYUEFU SCsxXTsKKyAgICBjaGFyIG1zZ2J1ZltDS01BWFBBVEgrNjRdOworICAgIGNoYXIgYywgKiBwID0g bG9jYWwsICogcyA9IGJ1ZiwgKiBxID0gYnVmLCAqIHBzZXAsICogc3NlcDsKKyAgICBpbnQgaSwg ayA9IDAsIGRvbmUgPSAwLCBpdHNhZGlyID0gMCwgc2F2ZXE7CisKKyAgICBkZWJ1ZyhGMTEwLCJm dHAgc3luY2RpciBsb2NhbCAobmV3KSIsbG9jYWwsMCk7CisgICAgZGVidWcoRjExMCwiZnRwIHN5 bmNkaXIgcHV0cGF0aCAob2xkKSIscHV0cGF0aCwwKTsKKworICAgIGl0c2FkaXIgPSBpc2Rpcihs b2NhbCk7CQkvKiBJcyB0aGUgbG9jYWwgZmlsZSBhIGRpcmVjdG9yeT8gKi8KKyAgICBzYXZlcSA9 IHF1aWV0OworCisgICAgd2hpbGUgKCgqcyA9ICpwKSkgeyAgICAgICAgICAgICAgICAgLyogQ29w eSB0aGUgYXJndW1lbnQgZmlsZW5hbWUgKi8KKyAgICAgICAgaWYgKCsrayA9PSBDS01BWFBBVEgp ICAgICAgICAgICAvKiBzbyB3ZSBjYW4gcG9rZSBpdC4gKi8KKyAgICAgICAgICByZXR1cm4oLTEp OworICAgICAgICBpZiAoKnMgPT0gJy8nKSAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8g cmlnaHRtb3N0IGRpcnNlcCAqLworICAgICAgICAgIHEgPSBzOworICAgICAgICBzKys7CisgICAg ICAgIHArKzsKKyAgICB9CisgICAgaWYgKCFpdHNhZGlyKQkJCS8qIElmIGl0J3MgYSByZWd1bGFy IGZpbGUgKi8KKyAgICAgICpxID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBrZWVw IGp1c3QgdGhlIHBhdGggcGFydCAqLworCisgICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgYnVm IixidWYsMCk7CisgICAgaWYgKCFzdHJjbXAoYnVmLHB1dHBhdGgpKSB7ICAgICAgICAgLyogU2Ft ZSBwYXRoIGFzIHByZXZpb3VzIGZpbGU/ICovCisgICAgICAgIGlmIChpdHNhZGlyKSB7ICAgICAg ICAgICAgICAgICAgLyogVGhpcyBmaWxlIGlzIGEgZGlyZWN0b3J5PyAqLworICAgICAgICAgICAg aWYgKGRvZnRwY3dkKGxvY2FsLDApKSB7ICAgIC8qIFRyeSB0byBDRCB0byBpdCAqLworICAgICAg ICAgICAgICAgIGRvZnRwY2R1cCgpOyAgICAgICAgICAgIC8qIFdvcmtlZCAtIENEIGJhY2sgdXAg Ki8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2ltKSB7ICAgICAgICAgICAvKiBTaW11bGF0aW5n Li4uICovCisgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiV09VTEQgQ1JFQVRFIERJUkVDVE9SWSAlc1xuIixsb2NhbCk7 CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhKSB7CisgICAgICAgICAgICAgICAg ICAgIGNrbWFrbXNnKG1zZ2J1ZixDS01BWFBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJXT1VMRCBDUkVBVEUgRElSRUNUT1JZIixsb2NhbCxOVUxMLE5VTEwpOworICAgICAgICAg ICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLG1zZ2J1Zik7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIFNlZSBub3RlIGFib3ZlICovCisg ICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfSBlbHNlIGlmICghZG9mdHB4 bWtkKGxvY2FsLDApKSB7IC8qIENhbid0IENEIC0gdHJ5IHRvIGNyZWF0ZSAqLworICAgICAgICAg ICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CQkJLyogUmVtb3RlIGRpcmVj dG9yeSBjcmVhdGVkIE9LICovCisgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9C KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ1JFQVRFRCBESVJFQ1RPUlkgJXNcbiIs bG9jYWwpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRpc3BsYSkgeworICAgICAgICAg ICAgICAgICAgICBja21ha21zZyhtc2didWYsQ0tNQVhQQVRIKzY0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiQ1JFQVRFRCBESVJFQ1RPUlkgIixsb2NhbCxOVUxMLE5VTEwpOworICAg ICAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLG1zZ2J1 Zik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGRlYnVnKEYxMTAsImZ0cCBzeW5jZGlyIG5vIGNoYW5nZSIsYnVmLDApOworICAgICAgICByZXR1 cm4oMSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFllcywgZG9uZS4gKi8KKyAgICB9CisgICAg Y2tzdHJuY3B5KHRtcCxidWYsQ0tNQVhQQVRIKzEpOyAgICAgLyogTWFrZSBhIHNhZmUgKHByZS1w b2tlZCkgY29weSAqLworICAgIGRlYnVnKEYxMTAsImZ0cCBzeW5jZGlyIG5ldyBwYXRoIixidWYs MCk7IC8qIGZvciBsYXRlciAoc2VlIGVuZCkgKi8KKworICAgIHAgPSBidWY7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5ldyAqLworICAgIHMgPSBwdXRwYXRoOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE9sZCAqLworCisgICAgZGVidWcoRjExMCwiZnRwIHN5bmNkaXIgQSAob2xk KSBzIixzLDApOyAvKiBQcmV2aW91cyAqLworICAgIGRlYnVnKEYxMTAsImZ0cCBzeW5jZGlyIEEg KG5ldykgcCIscCwwKTsgLyogTmV3ICovCisKKyAgICBwc2VwID0gYnVmOworICAgIHNzZXAgPSBw dXRwYXRoOworICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnMgIT0gTlVMICYmICpwID09ICpzKSB7 CisJaWYgKCpwID09ICcvJykgeyBwc2VwID0gcCsxOyBzc2VwID0gcysxOyB9CisJcCsrLHMrKzsK KyAgICB9CisgICAgLyoKKyAgICAgIHBzZXAgYW5kIHNzZXAgcG9pbnQgdG8gdGhlIGZpcnN0IHBh dGggc2VnbWVudCB0aGF0IGRpZmZlcnMuCisgICAgICBXZSBoYXZlIHRvIGRvIGFzIG1hbnkgQ0RV UHMgYXMgdGhlcmUgYXJlIHBhdGggc2VnbWVudHMgaW4gc3NlcC4KKyAgICAgIHRoZW4gd2UgaGF2 ZSB0byBkbyBhcyBtYW55IE1LRHMgYW5kIENXRHMgYXMgdGhlcmUgYXJlIHNlZ21lbnRzIGluIHBz ZXAuCisgICAgKi8KKyAgICBzID0gc3NlcDsKKyAgICBwID0gcHNlcDsKKworICAgIGRlYnVnKEYx MTAsImZ0cCBzeW5jZGlyIEIgKG9sZCkgcyIscywwKTsgLyogUHJldmlvdXMgKi8KKyAgICBkZWJ1 ZyhGMTEwLCJmdHAgc3luY2RpciBCIChuZXcpIHAiLHAsMCk7IC8qIE5ldyAqLworCisgICAgLyog cCBhbmQgcyBub3cgcG9pbnQgdG8gdGhlIGxlZnRtb3N0IHNwb3Qgd2hlcmUgdGhlIHBhdGhzIGRp ZmZlciAqLworCisgICAgaWYgKCpzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2Ug aGF2ZSB0byBiYWNrIHVwICovCisgICAgICAgIGsgPSAxOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSG93IG1hbnkgbGV2ZWxzIGNvdW50aW5nIHRoaXMgb25lICovCisgICAgICAgIHdoaWxl ICgoYyA9ICpzKyspKSB7ICAgICAgICAgICAgLyogQ291bnQgZGlyc2VwcyByZW1haW5pbmcgaW4g cHJldiAqLworICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmICpzKQorICAgICAgICAgICAgICBr Kys7CisgICAgICAgIH0KKwlkZWJ1ZyhGMTAxLCJmdHAgc3luY2RpciBsZXZlbHMgdXAiLCIiLGsp OworCisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gazsgaSsrKSB7ICAgICAgIC8qIERvIHRoYXQg bWFueSBDRFVQcyAqLworICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIHN5bmNkaXIgQ0RVUCBB IixwLGkpOworCSAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCisJICAgICAgcHJpbnRmKCIgQ0RV UFxuIik7CisgICAgICAgICAgICBpZiAoc2ltICYmIGNkc2ltbHZsKSB7CisgICAgICAgICAgICAg ICAgY2RzaW1sdmwtLTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg KCFkb2Z0cGNkdXAoKSkgeworICAgICAgICAgICAgICAgICAgICBxdWlldCA9IHNhdmVxOworICAg ICAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgY2RsZXZlbC0tOworICAgICAgICB9CisgICAgICAgIGlmICghKnAp ICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSB0byBnbyBkb3duICov CisgICAgICAgICAgZ290byB4Y3dkOyAgICAgICAgICAgICAgICAgICAgLyogd2UncmUgZG9uZS4g Ki8KKyAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgIHdoaWxlIChwID4gYnVmICYmICpwICYmICpw ICE9ICcvJykgIC8qIElmIGluIG1pZGRsZSBvZiBzZWdtZW50ICovCisgICAgICBwLS07ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFjayB1cCB0byBiZWdpbm5pbmcgKi8KKyAgICBp ZiAoKnAgPT0gJy8nKSAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgdGVybWluYXRlIHRoZXJl ICovCisgICAgICBwKys7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgZGVidWcoRjExMCwi ZnRwIHN5bmNkaXIgTkVXIFBBVEgiLHAsMCk7CisKKyAgICBzID0gcDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludCB0byBzdGFydCBvZiBuZXcgZG93biBwYXRoLiAqLworICAg IHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvb3AgdGhyb3VnaCBjaGFy YWN0ZXJzLiAqLworICAgICAgICBpZiAoKnMgPT0gJy8nIHx8ICEqcykgeyAgICAgICAgIC8qIEhh dmUgYSBzZWdtZW50LiAqLworICAgICAgICAgICAgaWYgKCEqcykgICAgICAgICAgICAgICAgICAg IC8qIElmIGVuZCBvZiBzdHJpbmcsICovCisgICAgICAgICAgICAgIGRvbmUrKzsgICAgICAgICAg ICAgICAgICAgLyogYWZ0ZXIgdGhpcyBzZWdtZW50IHdlJ3JlIGRvbmUuICovCisgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICpzID0gTlVMOyAgICAgICAgICAgICAgICAgLyogTlVMIG91 dCB0aGUgc2VwYXJhdG9yLiAqLworICAgICAgICAgICAgaWYgKCpwKSB7ICAgICAgICAgICAgICAg ICAgIC8qIElmIHNlZ21lbnQgaXMgbm90IGVtcHR5ICovCisgICAgICAgICAgICAgICAgZGVidWco RjExMCwiZnRwIHN5bmNkaXIgZG93biBzZWdtZW50IixwLDApOworICAgICAgICAgICAgICAgIGlm ICghZG9mdHBjd2QocCwwKSkgeyAgIC8qIFRyeSB0byBDRCB0byBpdCAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoc2ltKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9 PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBXT1VMRCBD UkVBVEUgRElSRUNUT1JZICVzXG4iLGxvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoZmRpc3BsYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNn KG1zZ2J1ZixDS01BWFBBVEgsCisJCQkJICAgICAiV09VTEQgQ1JFQVRFIERJUkVDVE9SWSIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwsTlVMTCxOVUxMKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZf VCkwLG1zZ2J1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICBjZHNpbWx2bCsrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCFkb2Z0cHhta2QocCwwKSkgeyAvKiBDYW4ndCBDRCAtIHRy eSB0byBjcmVhdGUgKi8KKwkJCSAgICBkZWJ1ZyhGMTEwLCJmdHAgc3luY2RpciBta2RpciBmYWls ZWQiLHAsMCk7IAorLyoKKyAgU3VwcG9zZSB3ZSBhcmUgZXhlY3V0aW5nIFNFTkQgL1JFQ1VSU0lW RS4gIExvY2FsbHkgd2UgaGF2ZSBhIGRpcmVjdG9yeQorICBGT08gYnV0IHRoZSByZW1vdGUgaGFz IGEgcmVndWxhciBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZS4gIFdlIGNhbid0IENECisgIHRvIGl0 LCBjYW4ndCBNS0RJUiBpdCBlaXRoZXIuICBUaGVyZSdzIG5vIHdheSBvdXQgYnV0IHRvIGZhaWwg YW5kIGxldAorICB0aGUgdXNlciBoYW5kbGUgdGhlIHByb2JsZW0uCisqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHF1aWV0ID0gc2F2ZXE7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJZGVidWcoRjExMCwi ZnRwIHN5bmNkaXIgbWtkaXIgT0siLHAsMCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCIgQ1JFQVRFRCBESVJFQ1RPUlkgJXNcbiIscCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKGZkaXNwbGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21z Zyhtc2didWYsQ0tNQVhQQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJDUkVBVEVEIERJUkVDVE9SWSAiLHAsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLG1zZ2J1Zik7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRvZnRw Y3dkKHAsMCkpIHsgLyogVHJ5IGFnYWluIHRvIENEICovCisJCQkgICAgZGVidWcoRjExMCwiZnRw IHN5bmNkaXIgQ0QgZmFpbGVkIixwLDApOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBx dWlldCA9IHNhdmVxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfQikgcHJpbnRmKCIgQ1dEICVzXG4iLHApOworCQkJZGVidWcoRjExMCwiZnRw IHN5bmNkaXIgQ0QgT0siLHAsMCk7IAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGNkbGV2ZWwrKzsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmIChkb25lKSAgICAgICAgICAgICAgICAgICAvKiBRdWl0IGlmIG5vIG5leHQgc2Vn bWVudCAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHAgPSBzKzE7ICAgICAg ICAgICAgICAgICAgICAvKiBQb2ludCB0byBuZXh0IHNlZ21lbnQgKi8KKyAgICAgICAgfQorICAg ICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIG5leHQgc291 cmNlIGNoYXIgKi8KKyAgICB9CisKKyAgeGN3ZDoKKyAgICBja3N0cm5jcHkocHV0cGF0aCx0bXAs Q0tNQVhQQVRIKzEpOyAvKiBBbGwgT0sgLSBtYWtlIHRoaXMgdGhlIG5ldyBwYXRoICovCisgICAg cXVpZXQgPSBzYXZlcTsKKyAgICByZXR1cm4oMSk7Cit9CisKKyNpZmRlZiBET1VQREFURQorI2lm ZGVmIERFQlVHCitzdGF0aWMgVk9JRAorZGJ0aW1lKHMseHgpIGNoYXIgKiBzOyBzdHJ1Y3QgdG0g KiB4eDsgeyAvKiBXcml0ZSBzdHJ1Y3QgdG0gdG8gZGVidWcgbG9nICovCisgICAgaWYgKGRlYmxv ZykgeworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgeWVhciAiLHMseHgtPnRtX3llYXIpOworICAg ICAgICBkZWJ1ZyhGMTExLCJmdHAgbW9udGgiLHMseHgtPnRtX21vbik7CisgICAgICAgIGRlYnVn KEYxMTEsImZ0cCBkYXkgICIscyx4eC0+dG1fbWRheSk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0 cCBob3VyICIscyx4eC0+dG1faG91cik7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBtaW4gICIs cyx4eC0+dG1fbWluKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIHNlYyAgIixzLHh4LT50bV9z ZWMpOworICAgIH0KK30KKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAgdCBtIGMgbyBtIHAgYSBy IGUgIC0tICBDb21wYXJlIHR3byBzdHJ1Y3QgdG0ncyAqLworCisvKiAgTGlrZSBzdHJjbXAoKSBi dXQgZm9yIHN0cnVjdCB0bSdzICAqLworLyogIFJldHVybnMgLTEgaWYgeHggPCB5eSwgMCBpZiB0 aGV5IGFyZSBlcXVhbCwgMSBpZiB4eCA+IHl5ICovCisKK3N0YXRpYyBpbnQKK3RtY29tcGFyZSh4 eCx5eSkgc3RydWN0IHRtICogeHgsICogeXk7IHsKKworICAgIGlmICh4eC0+dG1feWVhciA8IHl5 LT50bV95ZWFyKSAgICAgIC8qIEZpcnN0IHllYXIgbGVzcyB0aGFuIHNlY29uZCAqLworICAgICAg cmV0dXJuKC0xKTsKKyAgICBpZiAoeHgtPnRtX3llYXIgPiB5eS0+dG1feWVhcikgICAgICAvKiBG aXJzdCB5ZWFyIGdyZWF0ZXIgdGhhbiBzZWNvbmQgKi8KKyAgICAgIHJldHVybigxKTsKKworICAg IC8qIFllYXJzIGFyZSBlcXVhbCBzbyBjb21wYXJlIG1vbnRocyAqLworCisgICAgaWYgKHh4LT50 bV9tb24gIDwgeXktPnRtX21vbikgICAgICAgLyogQW5kIHNvIG9uLi4uICovCisgICAgICByZXR1 cm4oLTEpOworICAgIGlmICh4eC0+dG1fbW9uICA+IHl5LT50bV9tb24pCisgICAgICByZXR1cm4o MSk7CisKKyAgICBpZiAoeHgtPnRtX21kYXkgPCB5eS0+dG1fbWRheSkKKyAgICAgIHJldHVybigt MSk7CisgICAgaWYgKHh4LT50bV9tZGF5ID4geXktPnRtX21kYXkpCisgICAgICByZXR1cm4oMSk7 CisKKyAgICBpZiAoeHgtPnRtX2hvdXIgPCB5eS0+dG1faG91cikKKyAgICAgIHJldHVybigtMSk7 CisgICAgaWYgKHh4LT50bV9ob3VyID4geXktPnRtX2hvdXIpCisgICAgICByZXR1cm4oMSk7CisK KyAgICBpZiAoeHgtPnRtX21pbiAgPCB5eS0+dG1fbWluKQorICAgICAgcmV0dXJuKC0xKTsKKyAg ICBpZiAoeHgtPnRtX21pbiAgPiB5eS0+dG1fbWluKQorICAgICAgcmV0dXJuKDEpOworCisgICAg aWYgKHh4LT50bV9zZWMgIDwgeXktPnRtX3NlYykKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYg KHh4LT50bV9zZWMgID4geXktPnRtX3NlYykKKyAgICAgIHJldHVybigxKTsKKworICAgIHJldHVy bigwKTsKK30KKyNlbmRpZiAvKiBET1VQREFURSAqLworCisjaWZuZGVmIEhBVkVfVElNRUdNICAg ICAgICAgICAgIC8qIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3QgaGF2ZSB0aW1lZ20oKSAqLwor c3RhdGljIENPTlNUIGludCBNT05USERBWVNbXSA9IHsgLyogTnVtYmVyIG9mIGRheXMgaW4gZWFj aCBtb250aC4gKi8KKyAgICAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwg MzAsIDMxCit9OworCisvKiBNYWNybyBmb3Igd2hldGhlciBhIGdpdmVuIHllYXIgaXMgYSBsZWFw IHllYXIuICovCisjZGVmaW5lIElTTEVBUCh5ZWFyKSBcCisoKCh5ZWFyKSAlIDQpID09IDAgJiYg KCgoeWVhcikgJSAxMDApICE9IDAgfHwgKCh5ZWFyKSAlIDQwMCkgPT0gMCkpCisjZW5kaWYgLyog SEFWRV9USU1FR00gKi8KKworLyogIG0gayB1IHQgaSBtIGUgIC0tICBMaWtlIG1rdGltZSgpIGJ1 dCBhcmd1bWVudCBpcyBhbHJlYWR5IFVUQyAqLworCitzdGF0aWMgdGltZV90CisjaWZkZWYgQ0tf QU5TSUMKK21rdXRpbWUoc3RydWN0IHRtICogdG0pCisjZWxzZQorbWt1dGltZSh0bSkgc3RydWN0 IHRtICogdG07CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIG1rdXRpbWUgKi8geworI2lmZGVm IEhBVkVfVElNRUdNCisgICAgcmV0dXJuKHRpbWVnbSh0bSkpOyAgICAgICAgICAgICAgICAgLyog SGF2ZSBzeXN0ZW0gc2VydmljZSwgdXNlIGl0LiAqLworI2Vsc2UKKy8qCisgIENvbnRyaWJ1dGVk IGJ5IFJ1c3MgQWxsYmVyeSAocnJhQHN0YW5mb3JkLmVkdSksIHVzZWQgYnkgcGVybWlzc2lvbi4K KyAgR2l2ZW4gYSBzdHJ1Y3QgdG0gcmVwcmVzZW50aW5nIGEgY2FsZW5kYXIgdGltZSBpbiBVVEMs IGNvbnZlcnQgaXQgdG8KKyAgc2Vjb25kcyBzaW5jZSBlcG9jaC4gIFJldHVybnMgKHRpbWVfdCkg LTEgaWYgdGhlIHRpbWUgaXMgbm90CisgIGNvbnZlcnRhYmxlLiAgTm90ZSB0aGF0IHRoaXMgZnVu Y3Rpb24gZG9lcyBub3QgY2Fub25pY2FsaXplIHRoZSBwcm92aWRlZAorICBzdHJ1Y3QgdG0sIG5v ciBkb2VzIGl0IGFsbG93IG91dC1vZi1yYW5nZSB2YWx1ZXMgb3IgeWVhcnMgYmVmb3JlIDE5NzAu CisgIFJlc3VsdCBzaG91bGQgYmUgaWRlbnRpY2FsIHdpdGggdGltZWdtKCkuCisqLworICAgIHRp bWVfdCByZXN1bHQgPSAwOworICAgIGludCBpOworICAgIC8qCisgICAgICBXZSBkbyBhbGxvdyBz b21lIGlsbC1mb3JtZWQgZGF0ZXMsIGJ1dCB3ZSBkb24ndCBkbyBhbnl0aGluZyBzcGVjaWFsCisg ICAgICB3aXRoIHRoZW0gYW5kIG91ciBjYWxsZXJzIHJlYWxseSBzaG91bGRuJ3QgcGFzcyB0aGVt IHRvIHVzLiAgRG8KKyAgICAgIGV4cGxpY2l0bHkgZGlzYWxsb3cgdGhlIG9uZXMgdGhhdCB3b3Vs ZCBjYXVzZSBpbnZhbGlkIGFycmF5IGFjY2Vzc2VzCisgICAgICBvciBvdGhlciBhbGdvcml0aG0g cHJvYmxlbXMuCisgICAgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAg ICAgZGVidWcoRjEwMSwibWt1dGltZSB0bV9tb24iLCIiLHRtLT50bV9tb24pOworICAgICAgICBk ZWJ1ZyhGMTAxLCJta3V0aW1lIHRtX3llYXIiLCIiLHRtLT50bV95ZWFyKTsKKyAgICB9CisjZW5k aWYgLyogREVCVUcgKi8KKyAgICBpZiAodG0tPnRtX21vbiA8IDAgfHwgdG0tPnRtX21vbiA+IDEx IHx8IHRtLT50bV95ZWFyIDwgNzApCisgICAgICByZXR1cm4oKHRpbWVfdCkgLTEpOworCisgICAg LyogQ29udmVydCB0byB0aW1lX3QuICovCisgICAgZm9yIChpID0gMTk3MDsgaSA8IHRtLT50bV95 ZWFyICsgMTkwMDsgaSsrKQorICAgICAgcmVzdWx0ICs9IDM2NSArIElTTEVBUChpKTsKKyAgICBm b3IgKGkgPSAwOyBpIDwgdG0tPnRtX21vbjsgaSsrKQorICAgICAgcmVzdWx0ICs9IE1PTlRIREFZ U1tpXTsKKyAgICBpZiAodG0tPnRtX21vbiA+IDEgJiYgSVNMRUFQKHRtLT50bV95ZWFyICsgMTkw MCkpCisgICAgICByZXN1bHQrKzsKKyAgICByZXN1bHQgPSAyNCAqIChyZXN1bHQgKyB0bS0+dG1f bWRheSAtIDEpICsgdG0tPnRtX2hvdXI7CisgICAgcmVzdWx0ID0gNjAgKiByZXN1bHQgKyB0bS0+ dG1fbWluOworICAgIHJlc3VsdCA9IDYwICogcmVzdWx0ICsgdG0tPnRtX3NlYzsKKyAgICBkZWJ1 ZyhGMTAxLCJta3V0aW1lIHJlc3VsdCIsIiIscmVzdWx0KTsKKyAgICByZXR1cm4ocmVzdWx0KTsK KyNlbmRpZiAvKiBIQVZFX1RJTUVHTSAqLworfQorCisKKy8qCisgIHMgZSB0IG0gbyBkIHQgaSBt IGUgIC0tICBTZXQgZmlsZSBtb2RpZmljYXRpb24gdGltZS4KKworICBmID0gY2hhciAqIGZpbGVu YW1lOworICB0ID0gdGltZV90IGRhdGUvdGltZSB0byBzZXQgKFNlY3Mgc2luY2UgMTk3MDAxMDEg MDowMDowMCBVVEMsIE5PVCBsb2NhbCkKKworICBVTklYLXNwZWNpZmljOyBpc29sYXRlcyBtYWlu bGluZSBjb2RlIGZyb20gaGlkZW91cyAjaWZkZWZzLgorICBSZXR1cm5zOgorICAgIDAgb24gc3Vj Y2VzcywKKyAgIC0xIG9uIGVycm9yLgorCisqLworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lD CitzZXRtb2R0aW1lKGNoYXIgKiBmLCB0aW1lX3QgdCkKKyNlbHNlCitzZXRtb2R0aW1lKGYsdCkg Y2hhciAqIGY7IHRpbWVfdCB0OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzZXRtb2R0aW1l ICovIHsKKyNpZmRlZiBOVAorICAgIHN0cnVjdCBfc3RhdCBzYjsKKyNlbHNlIC8qIE5UICovCisg ICAgc3RydWN0IHN0YXQgc2I7CisjZW5kaWYgLyogTlQgKi8KKyAgICBpbnQgeCwgcmMgPSAwOwor I2lmZGVmIEJTRDQ0CisgICAgc3RydWN0IHRpbWV2YWwgdHBbMl07CisjZWxzZSAgLyogZGVmIEJT RDQ0ICovCisjaWZkZWYgVjcKKyAgICBzdHJ1Y3QgdXRpbWJ1ZiB7CisgICAgICAgIHRpbWVfdCB0 aW1lcFsyXTsKKyAgICB9IHRwOworI2Vsc2UgIC8qIGRlZiBWNyAqLworI2lmZGVmIFNZU1VUSU1F SAorI2lmZGVmIE5UCisgICAgc3RydWN0IF91dGltYnVmIHRwOworI2Vsc2UgLyogTlQgKi8KKyAg ICBzdHJ1Y3QgdXRpbWJ1ZiB0cDsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogZGVmIFNZU1VU SU1FSCAqLworI2lmZGVmIFZNUworICAgIHN0cnVjdCB1dGltYnVmIHRwOworI2RlZmluZSBTWVNV VElNRUggICAgICAgICAgICAgICAvKiBPdXIgdXRpbWJ1ZiBtYXRjaGVzIHRoaXMgb25lLiAqLwor I2Vsc2UgLyogZGVmIFZNUyAqLworICAgIHN0cnVjdCB1dGltYnVmIHsKKyAgICAgICAgdGltZV90 IGF0aW1lOworICAgICAgICB0aW1lX3QgbXRpbWU7CisgICAgfSB0cDsKKyNlbmRpZiAvKiBkZWYg Vk1TIFtlbHNlXSAqLworI2VuZGlmIC8qIGRlZiBTWVNVVElNRUggW2Vsc2VdICovCisjZW5kaWYg LyogZGVmIFY3IFtlbHNlXSAqLworI2VuZGlmIC8qIGRlZiBCU0Q0NCBbZWxzZV0gKi8KKworICAg IGlmIChzdGF0KGYsJnNiKSA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwic2V0bW9kdGltZSBz dGF0IGZhaWx1cmUiLGYsZXJybm8pOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNpZmRl ZiBCU0Q0NAorICAgIHRwWzBdLnR2X3NlYyA9IHNiLnN0X2F0aW1lOyAgICAgICAgIC8qIEFjY2Vz cyB0aW1lIGZpcnN0ICovCisgICAgdHBbMV0udHZfc2VjID0gdDsgICAgICAgICAgICAgICAgICAg LyogVXBkYXRlIHRpbWUgc2Vjb25kICovCisgICAgZGVidWcoRjExMSwic2V0bW9kdGltZSBCU0Q0 NCIsZix0KTsKKyNlbHNlCisjaWZkZWYgVjcKKyAgICB0cC50aW1lcFswXSA9IHQ7ICAgICAgICAg ICAgICAgICAgICAvKiBTZXQgbW9kaWYuIHRpbWUgdG8gY3JlYXRpb24gZGF0ZSAqLworICAgIHRw LnRpbWVwWzFdID0gc2Iuc3RfYXRpbWU7ICAgICAgICAgIC8qIERvbid0IGNoYW5nZSB0aGUgYWNj ZXNzIHRpbWUgKi8KKyAgICBkZWJ1ZyhGMTExLCJzZXRtb2R0aW1lIFY3IixmLHQpOworI2Vsc2UK KyNpZmRlZiBTWVNVVElNRUgKKyAgICB0cC5tb2R0aW1lID0gdDsgICAgICAgICAgICAgICAgICAg ICAvKiBTZXQgbW9kaWYuIHRpbWUgdG8gY3JlYXRpb24gZGF0ZSAqLworICAgIHRwLmFjdGltZSA9 IHNiLnN0X2F0aW1lOyAgICAgICAgICAgIC8qIERvbid0IGNoYW5nZSB0aGUgYWNjZXNzIHRpbWUg Ki8KKyAgICBkZWJ1ZyhGMTExLCJzZXRtb2R0aW1lIFNZU1VUSU1FSCIsZix0KTsKKyNlbHNlCisg ICAgdHAubXRpbWUgPSB0OyAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IG1vZGlmLiB0aW1l IHRvIGNyZWF0aW9uIGRhdGUgKi8KKyAgICB0cC5hdGltZSA9IHNiLnN0X2F0aW1lOyAgICAgICAg ICAgICAvKiBEb24ndCBjaGFuZ2UgdGhlIGFjY2VzcyB0aW1lICovCisgICAgZGVidWcoRjExMSwi c2V0bW9kdGltZSAob3RoZXIpIixmLHQpOworI2VuZGlmIC8qIFNZU1VUSU1FSCAqLworI2VuZGlm IC8qIFY3ICovCisjZW5kaWYgLyogQlNENDQgKi8KKworICAgIC8qIFRyeSB0byBzZXQgdGhlIGZp bGUgZGF0ZSAqLworCisjaWZkZWYgQlNENDQKKyAgICB4ID0gdXRpbWVzKGYsdHApOworICAgIGRl YnVnKEYxMTEsInNldG1vZHRpbWUgdXRpbWVzKCkiLCJCU0Q0NCIseCk7CisjZWxzZQorI2lmZGVm IElSSVg2NQorICAgIHsKKyAgICAgIC8qCisgICAgICAgIFRoZSBmb2xsb3dpbmcgcHJvZHVjZXMg dGhlIG5vbnNlbnNpY2FsIHdhcm5pbmc6CisgICAgICAgIEFyZ3VtZW50ICBvZiB0eXBlICJjb25z dCBzdHJ1Y3QgdXRpbWJ1ZiAqIiBpcyBpbmNvbXBhdGlibGUgd2l0aAorICAgICAgICBwYXJhbWV0 ZXIgb2YgdHlwZSAiY29uc3Qgc3RydWN0IHV0aW1idWYgKiIuICBJZiB5b3UgY2FuIG1ha2UgaXQK KyAgICAgICAgZ28gYXdheSwgYmUgbXkgZ3Vlc3QuCisgICAgICAqLworICAgICAgICBjb25zdCBz dHJ1Y3QgdXRpbWJ1ZiAqIHQyID0gJnRwOworICAgICAgICB4ID0gdXRpbWUoZix0Mik7CisgICAg fQorI2Vsc2UKKyAgICB4ID0gdXRpbWUoZiwmdHApOworICAgIGRlYnVnKEYxMTEsInNldG1vZHRp bWUgdXRpbWUoKSIsIm90aGVyIix4KTsKKyNlbmRpZiAvKiBJUklYNjUgKi8KKyNlbmRpZiAvKiBC U0Q0NCAqLworICAgIGlmICh4KQorICAgICAgcmMgPSAtMTsKKworICAgIGRlYnVnKEYxMDEsInNl dG1vZHRpbWUgcmVzdWx0IiwiIixyYyk7CisgICAgcmV0dXJuKHJjKTsKK30KKworCisvKgorICBj IGggayBtIG8gZCB0IGkgbSBlICAtLSAgQ2hlY2svU2V0IGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUu CisKKyAgZmMgPSBmdW5jdGlvbiBjb2RlOgorICAgIDAgPSBDaGVjazsgcmV0dXJuczoKKyAgICAg IC0xIG9uIGVycm9yLAorICAgICAgIDAgaWYgbG9jYWwgb2xkZXIgdGhhbiByZW1vdGUsCisgICAg ICAgMSBpZiBtb2R0aW1lcyBhcmUgZXF1YWwsCisgICAgICAgMiBpZiBsb2NhbCBuZXdlciB0aGFu IHJlbW90ZS4KKyAgICAxID0gU2V0IChsb2NhbCBmaWxlJ3MgbW9kdGltZSBmcm9tIHJlbW90ZSdz KTsgcmV0dXJuczoKKyAgICAgIC0xIG9uIGVycm9yLAorICAgICAgIDAgb24gc3VjY2Vzcy4KKyov CitzdGF0aWMgaW50CitjaGttb2R0aW1lKGxvY2FsLHJlbW90ZSxmYykgY2hhciAqIGxvY2FsLCAq IHJlbW90ZTsgaW50IGZjOyB7CisjaWZkZWYgTlQKKyAgICBzdHJ1Y3QgX3N0YXQgc3RhdGJ1ZjsK KyNlbHNlIC8qIE5UICovCisgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKyNlbmRpZiAvKiBOVCAq LworICAgIHN0cnVjdCB0bSAqIHRtbG9jYWwgPSBOVUxMOworICAgIHN0cnVjdCB0bSB0bXJlbW90 ZTsKKyAgICBpbnQgcmMgPSAwLCBoYXZlZGF0ZSA9IDAsIGxjcyA9IC0xLCByY3MgPSAtMSwgZmxh ZyA9IDA7CisgICAgY2hhciAqIHMsIHRpbWVidWZbNjRdOworCisgICAgZGVidWcoRjExMSwiY2hr bW9kdGltZSIsbG9jYWwsbWR0bW9rKTsKKyAgICBpZiAoIW1kdG1vaykJCQkvKiBTZXJ2ZXIgc3Vw cG9ydHMgTURUTT8gKi8KKyAgICAgIHJldHVybigtMSk7CQkJLyogTm8gZG9uJ3QgYm90aGVyLiAq LworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAoZnRwX3hsYSkgeworICAgICAgICBsY3MgPSBm dHBfY3NsOworICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0gZmNoYXJzZXQ7CisgICAgICAgIHJj cyA9IGZ0cF9jc3g7CisgICAgICAgIGlmIChyY3MgPCAwKSByY3MgPSBmdHBfY3NyOworICAgIH0K KyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBpZiAoZmMgPT0gMCkgeworICAgICAgICByYyA9 IHN0YXQobG9jYWwsJnN0YXRidWYpOworICAgICAgICBpZiAocmMgPT0gMCkgeyAgICAgICAgICAg ICAgICAgIC8qIEdldCBsb2NhbCBmaWxlJ3MgbW9kIHRpbWUgKi8KKwkgICAgLyogQ29udmVydCB0 byBzdHJ1Y3QgdG0gKi8KKyAgICAgICAgICAgIHRtbG9jYWwgPSBnbXRpbWUoKHRpbWVfdCAqKSZz dGF0YnVmLnN0X210aW1lKTsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKHRtbG9jYWwp IHsKKyAgICAgICAgICAgICAgICBkYnRpbWUobG9jYWwsdG1sb2NhbCk7CisgICAgICAgICAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBHZXQgcmVtb3Rl IGZpbGUncyBtb2QgdGltZSBhcyB5eXl5bW1kZGhobW1zcyAqLworCisgICAgaWYgKGhhdmVtZHRt KSB7CQkJLyogQWxyZWFkeSBnb3QgaXQgZnJvbSBNTFNEPyAqLworCXMgPSBoYXZlbWR0bTsKKwlm bGFnKys7CisgICAgfSBlbHNlIGlmIChmdHBjbWQoIk1EVE0iLHJlbW90ZSxsY3MscmNzLDApID09 IFJFUExZX0NPTVBMRVRFKSB7CisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgYnplcm8oKGNoYXIg KikmdG1yZW1vdGUsIHNpemVvZihzdHJ1Y3QgdG0pKTsKKyAgICAgICAgcyA9IGZ0cF9yZXBseV9z dHI7CisgICAgICAgIHdoaWxlICgoYyA9ICpzKyspKSB7ICAgICAgICAgICAgLyogU2tpcCBwYXN0 IHJlc3BvbnNlIGNvZGUgKi8KKyAgICAgICAgICAgIGlmIChjID09IFNQKSB7CisgICAgICAgICAg ICAgICAgZmxhZysrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorICAgIGlmIChmbGFnKSB7CisJZGVidWcoRjExMSwiZnRwIGNoa21vZHRp bWUgc3RyaW5nIixzLGZsYWcpOworCWlmIChmdHNfc3RvKSB7CQkJLyogVXNlciBnYXZlIHNlcnZl ciB0aW1lIG9mZnNldD8gKi8KKwkgICAgY2hhciAqIHA7CisJICAgIGRlYnVnKEYxMTAsImZ0cCBj aGttb2R0aW1lIG9mZnNldCIsZnRzX3N0bywwKTsKKwkgICAgY2ttYWttc2codGltZWJ1Ziw2NCxz LCIgIixmdHNfc3RvLE5VTEwpOyAvKiBCdWlsZCBkZWx0YSB0aW1lICovCisJICAgIGlmICgocCA9 IGNtY3Z0ZGF0ZSh0aW1lYnVmLDEpKSkgeyAvKiBBcHBseSBkZWx0YSB0aW1lICovCisJCWNrc3Ry bmNweSh0aW1lYnVmLHAsNjQpOyAgICAgIC8qIENvbnZlcnQgdG8gTURUTSBmb3JtYXQgKi8KKwkJ dGltZWJ1Zls4XSAgPSB0aW1lYnVmWzldOyAgLyogaCAqLworCQl0aW1lYnVmWzldICA9IHRpbWVi dWZbMTBdOyAvKiBoICovCisJCXRpbWVidWZbMTBdID0gdGltZWJ1ZlsxMl07IC8qIG0gKi8KKwkJ dGltZWJ1ZlsxMV0gPSB0aW1lYnVmWzEzXTsgLyogbSAqLworCQl0aW1lYnVmWzEyXSA9IHRpbWVi dWZbMTJdOyAvKiBzICovCisJCXRpbWVidWZbMTNdID0gdGltZWJ1ZlsxM107IC8qIHMgKi8KKwkJ dGltZWJ1ZlsxNF0gPSBOVUw7CisJCXMgPSB0aW1lYnVmOworCQlkZWJ1ZyhGMTEwLCJmdHAgY2hr bW9kdGltZSBhZGp1c3QiLHMsMCk7CisJICAgIH0KKwl9CisgICAgICAgIGlmIChmbGFnKSB7ICAg ICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0byBzdHJ1Y3QgdG0gKi8KKyAgICAgICAgICAg IGNoYXIgKiBwYXQ7CisgICAgICAgICAgICBpbnQgeTJrYnVnID0gMDsgICAgICAgICAgICAgLyog U2VlbiBpbiBLZXJiZXJvcyA0IEZUUCBzZXJ2ZXJzICovCisgICAgICAgICAgICBpZiAoIWNrc3Ry Y21wKHMsIjE5MSIsMywwKSkgeworICAgICAgICAgICAgICAgIHBhdCA9ICIlMDVkJTAyZCUwMmQl MDJkJTAyZCUwMmQiOworICAgICAgICAgICAgICAgIHkya2J1ZysrOworICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsImZ0cCBjaGttb2R0aW1lIFkySyBCVUcgZGV0ZWN0ZWQiLHMsMCk7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhdCA9ICIlMDRkJTAyZCUwMmQlMDJk JTAyZCUwMmQiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNzY2FuZihzLCAgICAg ICAgICAgICAgIC8qIFBhcnNlIGludG8gc3RydWN0IHRtICovCisgICAgICAgICAgICAgICAgICAg ICAgIHBhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgJih0bXJlbW90ZS50bV95ZWFyKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgJih0bXJlbW90ZS50bV9tb24pLAorICAgICAgICAgICAgICAg ICAgICAgICAmKHRtcmVtb3RlLnRtX21kYXkpLAorICAgICAgICAgICAgICAgICAgICAgICAmKHRt cmVtb3RlLnRtX2hvdXIpLAorICAgICAgICAgICAgICAgICAgICAgICAmKHRtcmVtb3RlLnRtX21p biksCisgICAgICAgICAgICAgICAgICAgICAgICYodG1yZW1vdGUudG1fc2VjKQorICAgICAgICAg ICAgICAgICAgICAgICApID09IDYpIHsKKyAgICAgICAgICAgICAgICB0bXJlbW90ZS50bV95ZWFy IC09ICh5MmtidWcgPyAxOTAwMCA6IDE5MDApOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs ImZ0cCBjaGttb2R0aW1lIHllYXIiLCIiLHRtcmVtb3RlLnRtX3llYXIpOworICAgICAgICAgICAg ICAgIHRtcmVtb3RlLnRtX21vbi0tOworCisjaWZkZWYgREVCVUcKKwkJZGVidWcoRjEwMCwiU0VS VkVSIFRJTUUgRk9MTE9XUzoiLCIiLDApOworICAgICAgICAgICAgICAgIGRidGltZShyZW1vdGUs JnRtcmVtb3RlKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgICAgICAgICAgICAgaWYgKGhh dmVkYXRlID4gLTEpCisJCSAgaGF2ZWRhdGUgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfSBlbHNlIHsJCQkJLyogRmFpbGVkICovCisJZGVidWcoRjEwMSwiZnRwIGNoa21vZHRp bWUgZnRwY29kZSIsIiIsZnRwY29kZSk7CisJaWYgKGZ0cGNvZGUgPT0gNTAwIHx8CQkvKiBDb21t YW5kIHVucmVjb2duaXplZCAqLworCSAgICBmdHBjb2RlID09IDUwMiB8fAkJLyogQ29tbWFuZCBu b3QgaW1wbGVtZW50ZWQgKi8KKwkgICAgZnRwY29kZSA9PSAyMDIpCQkvKiBDb21tYW5kIHN1cGVy Zmx1b3VzICovCisJICBtZHRtb2sgPSAwOwkJCS8qIERvbid0IGFzayB0aGlzIHNlcnZlciBhZ2Fp biAqLworCXJldHVybigtMSk7CisgICAgfQorICAgIGlmIChmYyA9PSAwKSB7ICAgICAgICAgICAg ICAgICAgICAgIC8qIENvbXBhcmUgKi8KKyAgICAgICAgaWYgKGhhdmVkYXRlID09IDEpIHsJCS8q IE9ubHkgaWYgd2UgaGF2ZSBib3RoIGZpbGUgZGF0ZXMgKi8KKyAgICAgICAgICAgIC8qCisgICAg ICAgICAgICAgIENvbXBhcmUgd2l0aCBsb2NhbCBmaWxlJ3MgdGltZS4gIFdlIGRvbid0IHVzZQor ICAgICAgICAgICAgICBjbG9jayB0aW1lICh0aW1lX3QpIGhlcmUgaW4gY2FzZSBvZiBzaWduZWQv dW5zaWduZWQKKyAgICAgICAgICAgICAgY29uZnVzaW9uLCBldGMuCisgICAgICAgICAgICAqLwor CSAgICBpbnQgeHg7CisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCSAgICAKKwkgICAgaWYg KGRlYmxvZykgeworCQlkYnRpbWUoIkxPQ0FMIix0bWxvY2FsKTsKKwkJZGJ0aW1lKCJSRU1PVCIs JnRtcmVtb3RlKTsKKwkgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjZW5kaWYgLyogQ09NTUVO VCAqLworCSAgICB4eCA9IHRtY29tcGFyZSh0bWxvY2FsLCZ0bXJlbW90ZSk7CisJICAgIGRlYnVn KEYxMDEsImNoa21vZHRpbWUgdG1jb21wYXJlIiwiIix4eCk7CisgICAgICAgICAgICByZXR1cm4o eHggKyAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZnRwX2RhdGVzKSB7ICAgICAgICAg ICAgIC8qIFNldCAqLworICAgICAgICAvKgorICAgICAgICAgIEhlcmUgd2UgbXVzdCBjb252ZXJ0 IHN0cnVjdCB0bSB0byB0aW1lX3QKKyAgICAgICAgICB3aXRob3V0IGFwcGx5aW5nIHRpbWV6b25l IGNvbnZlcnNpb24sIGZvciB3aGljaAorICAgICAgICAgIHRoZXJlIGlzIG5vIHBvcnRhYmxlIEFQ SS4gIFRoZSBtZXRob2QgaXMgaGlkZGVuCisgICAgICAgICAgaW4gbWt1dGltZSgpLCBkZWZpbmVk IGFib3ZlLgorICAgICAgICAqLworICAgICAgICB0aW1lX3QgdXRjOworICAgICAgICB1dGMgPSBt a3V0aW1lKCZ0bXJlbW90ZSk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjaGttb2R0aW1lIG1r dXRpbWUiLHJlbW90ZSx1dGMpOworICAgICAgICBpZiAodXRjICE9ICh0aW1lX3QpLTEpCisgICAg ICAgICAgcmV0dXJuKHNldG1vZHRpbWUobG9jYWwsdXRjKSk7CisgICAgfQorICAgIHJldHVybigt MSk7Cit9CisKKy8qIGdldGZpbGUoKSByZXR1cm5zOiAtMSBvbiBlcnJvciwgMCBpZiBmaWxlIHJl Y2VpdmVkLCAxIGlmIGZpbGUgc2tpcHBlZCAqLworCitzdGF0aWMgaW50CitnZXRmaWxlKHJlbW90 ZSxsb2NhbCxyZWNvdmVyLGFwcGVuZCxwaXBlbmFtZSx4bGF0ZSxmY3MscmNzKQorICAgIGNoYXIg KiBsb2NhbCwgKiByZW1vdGUsICogcGlwZW5hbWU7IGludCByZWNvdmVyLCBhcHBlbmQsIHhsYXRl LCBmY3MsIHJjczsKKy8qIGdldGZpbGUgKi8geworICAgIGludCByYyA9IC0xOworICAgIFVMT05H IHQwLCB0MTsKKworI2lmZGVmIEdGVElNRVIKKyAgICBDS0ZMT0FUIHNlYzsKKyNlbHNlCisgICAg aW50IHNlYyA9IDA7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIGNoYXIgZnVsbG5hbWVbQ0tN QVhQQVRIKzFdOworCisgICAgZGVidWcoRjExMCwiZnRwIGdldGZpbGUgcmVtb3RlIEEiLHJlbW90 ZSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0ZmlsZSBsb2NhbCBBIixsb2NhbCwwKTsKKyAg ICBkZWJ1ZyhGMTEwLCJmdHAgZ2V0ZmlsZSBwaXBlbmFtZSIscGlwZW5hbWUsMCk7CisgICAgaWYg KCFyZW1vdGUpIHJlbW90ZSA9ICIiOworCisjaWZkZWYgUEFUVEVSTlMKKyAgICAvKiBBdXRvbWF0 aWMgdHlwZSBzd2l0Y2hpbmc/ICovCisgICAgaWYgKGZ0cF94ZmVybW9kZSA9PSBYTU9ERV9BICYm IHBhdHRlcm5zICYmIGdldF9hdXRvICYmICFmb3JjZXR5cGUpIHsKKyAgICAgICAgaW50IHg7Cisg ICAgICAgIHggPSBtYXRjaG5hbWUocmVtb3RlLDAsc2VydmVydHlwZSk7CisgICAgICAgIGRlYnVn KEYxMTEsImZ0cCBnZXRmaWxlIG1hdGNobmFtZSIscmVtb3RlLHgpOworICAgICAgICBzd2l0Y2gg KHgpIHsKKyAgICAgICAgICBjYXNlIDA6IGZ0cF90eXAgPSBGVFRfQVNDOyBicmVhazsKKyAgICAg ICAgICBjYXNlIDE6IGZ0cF90eXAgPSB0ZW5leCA/IEZUVF9URU4gOiBGVFRfQklOOyBicmVhazsK KyAgICAgICAgICBkZWZhdWx0OiBpZiAoZ19mdHBfdHlwID4gLTEpIGZ0cF90eXAgPSBnX2Z0cF90 eXA7CisgICAgICAgIH0KKyAgICAgICAgY2hhbmdldHlwZShmdHBfdHlwLGZ0cF92Ym0pOworICAg ICAgICBiaW5hcnkgPSBmdHBfdHlwOyAgICAgICAgICAgICAgIC8qIEZvciBmaWxlLXRyYW5zZmVy IGRpc3BsYXkgKi8KKyAgICB9CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworI2lmbmRlZiBOT0NT RVRTCisgICAgZnRwX2NzeCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGZpbGUt dHJhbnNmZXIgZGlzcGxheSAqLworICAgIGZ0cF9jc2wgPSAtMTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIC4uLiAqLworCisgICAgaWYgKHJjcyA+IC0xKSAgICAgICAgICAgICAgICAgICAgICAg LyogLTEgbWVhbnMgbm8gdHJhbnNsYXRpb24gKi8KKyAgICAgIGlmIChmdHBfdHlwID09IEZUVF9B U0MpICAgICAgICAgICAvKiBGaWxlIHR5cGUgaXMgImFzY2lpIj8gKi8KKyAgICAgICAgaWYgKGZj cyA8IDApICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGNoYXJzZXQgbm90IGZvcmNlZD8gKi8K KyAgICAgICAgICBmY3MgPSBmY2hhcnNldDsgICAgICAgICAgICAgICAvKiB1c2UgcHJldmFpbGlu ZyBGSUxFIENIQVJBQ1RFUi1TRVQgKi8KKyAgICBpZiAoZmNzID4gLTEgJiYgcmNzID4gLTEpIHsg ICAgICAgICAvKiBTZXQgdXAgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCisgICAgICAgIGRlYnVn KEYxMTAsImZ0cCBnZXRmaWxlIiwiaW5pdHhsYXRlIiwwKTsKKyAgICAgICAgaW5pdHhsYXRlKHJj cyxmY3MpOyAgICAgICAgICAgICAvKiBOQjogb3Bwb3NpdGUgb3JkZXIgb2YgUFVUICovCisgICAg ICAgIGZ0cF9jc3ggPSByY3M7CisgICAgICAgIGZ0cF9jc2wgPSBmY3M7CisgICAgfSBlbHNlCisg ICAgICB4bGF0ZSA9IDA7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgaWYgKCFsb2NhbCkg bG9jYWwgPSAiIjsKKyAgICBpZiAoIXBpcGVuYW1lICYmICEqbG9jYWwpCisgICAgICBsb2NhbCA9 IHJlbW90ZTsKKworICAgIG91dDJzY3JlZW4gPSAhc3RyY21wKGxvY2FsLCItIik7CisKKyAgICBm dWxsbmFtZVswXSA9IE5VTDsKKyAgICBpZiAocGlwZW5hbWUpIHsKKyAgICAgICAgY2tzdHJuY3B5 KGZ1bGxuYW1lLHBpcGVuYW1lLENLTUFYUEFUSCsxKTsKKyAgICB9IGVsc2UgeworICAgICAgICB6 Zm5xZnAobG9jYWwsQ0tNQVhQQVRILGZ1bGxuYW1lKTsKKyAgICAgICAgaWYgKCFmdWxsbmFtZVsw XSkKKyAgICAgICAgICBja3N0cm5jcHkoZnVsbG5hbWUsbG9jYWwsQ0tNQVhQQVRIKzEpOworICAg IH0KKyAgICBpZiAoIW91dDJzY3JlZW4gJiYgZGlzcGxhICYmIGZkaXNwbGEpIHsgLyogU2NyZWVu ICovCisgICAgICAgIGZ0c2NyZWVuKFNDUl9GTiwnRicsKENLX09GRl9UKXBrdG51bSxyZW1vdGUp OworICAgICAgICBmdHNjcmVlbihTQ1JfQU4sMCwoQ0tfT0ZGX1QpMCxmdWxsbmFtZSk7CisgICAg ICAgIGZ0c2NyZWVuKFNDUl9GUywwLGZzaXplLCIiKTsKKyAgICB9CisgICAgdGxvZyhGMTEwLGZ0 cF90eXAgPyAiZnRwIGdldCBCSU5BUlk6IiA6ICJmdHAgZ2V0IFRFWFQ6IiwgcmVtb3RlLCAwKTsK KyAgICB0bG9nKEYxMTAsIiBhcyIsZnVsbG5hbWUsMCk7CisgICAgZGVidWcoRjExMSwiZnRwIGdl dGZpbGUgc2l6ZSIscmVtb3RlLGZzaXplKTsKKyAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0ZmlsZSBs b2NhbCIsbG9jYWwsb3V0MnNjcmVlbik7CisKKyAgICBja3N0cm5jcHkoZmlsbmFtLCBwaXBlbmFt ZSA/IHJlbW90ZSA6IGxvY2FsLCBDS01BWFBBVEgpOworCisgICAgdDAgPSBnbXN0aW1lcigpOyAg ICAgICAgICAgICAgICAgICAgLyogU3RhcnQgdGltZSAqLworICAgIGRlYnVnKEYxMTEsImZ0cCBn ZXRmaWxlIHQwIixyZW1vdGUsdDApOyAvKiBeXl4gKi8KKyAgICByYyA9IHJlY3ZyZXF1ZXN0KCJS RVRSIiwKKyAgICAgICAgICAgICAgICAgICAgIGxvY2FsLAorICAgICAgICAgICAgICAgICAgICAg cmVtb3RlLAorICAgICAgICAgICAgICAgICAgICAgYXBwZW5kID8gImFiIiA6ICJ3YiIsCisgICAg ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgcmVjb3ZlciwKKyAgICAg ICAgICAgICAgICAgICAgIHBpcGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgeGxhdGUsCisg ICAgICAgICAgICAgICAgICAgICBmY3MsCisgICAgICAgICAgICAgICAgICAgICByY3MKKyAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgdDEgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAg ICAgLyogRW5kIHRpbWUgKi8KKyAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0ZmlsZSB0MSIscmVtb3Rl LHQxKTsKKyAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0ZmlsZSBzZWMiLHJlbW90ZSwodDEtdDApLzEw MDApOworI2lmZGVmIEdGVElNRVIKKyAgICBzZWMgPSAoQ0tGTE9BVCkoKENLRkxPQVQpKHQxIC0g dDApIC8gMTAwMC4wKTsgLyogU3RhdHMgKi8KKyAgICBmcHhmc2VjcyA9IHNlYzsgICAgICAgICAg ICAgICAgICAgICAvKiAoZm9yIGRveGxvZygpKSAqLworI2Vsc2UKKyAgICBzZWMgPSAodDEgLSB0 MCkgLyAxMDAwOworICAgIHhmc2VjcyA9IChpbnQpc2VjOworI2VuZGlmIC8qIEdGVElNRVIgKi8K KworI2lmZGVmIEZUUF9USU1FT1VUCisgICAgaWYgKGZ0cF90aW1lZF9vdXQpCisgICAgICByYyA9 IC00OworI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCisKKyAgICBkZWJ1ZyhGMTExLCJmdHAgcmVj dnJlcXVlc3QgcmMiLHJlbW90ZSxyYyk7CisgICAgaWYgKGNhbmNlbGZpbGUgfHwgY2FuY2VsZ3Jv dXApIHsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCBjYW5jZWxlZCIsY2tpdG9hKGNhbmNl bGZpbGUpLGNhbmNlbGdyb3VwKTsKKyAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX0lOVCwoQ0tf T0ZGX1QpMCwiIik7CisgICAgfSBlbHNlIGlmIChyYyA+IDApIHsKKyAgICAgICAgZGVidWcoRjEx MSwiZnRwIGdldCBza2lwcGVkIixja2l0b2EoY2FuY2VsZmlsZSksY2FuY2VsZ3JvdXApOworICAg ICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfU0tJUCwoQ0tfT0ZGX1QpMCxjbWFyZyk7CisgICAgfSBl bHNlIGlmIChyYyA8IDApIHsKKyAgICAgICAgc3dpdGNoIChmdHBjb2RlKSB7CisgICAgICAgICAg Y2FzZSAtNDogICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBlcnJvciAqLworICAgICAg ICAgIGNhc2UgLTI6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgZXJyb3IgKi8KKyAgICAg ICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsY2tfZXJyc3RyKCkpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAtMzoKKyAgICAgICAgICAgIGZ0c2Ny ZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsCisJCSAgICAgIkZhaWx1cmUgdG8gbWFrZSBk YXRhIGNvbm5lY3Rpb24iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgLTE6 CQkJLyogKHNob3VsZCBiZSBjb3ZlcmVkIGFib3ZlKSAqLworICAgICAgICAgICAgZnRzY3JlZW4o U0NSX1NULFNUX0lOVCwoQ0tfT0ZGX1QpMCwiIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX01TRywoQ0tfT0ZG X1QpMCwmZnRwX3JlcGx5X3N0cls0XSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUdWRvIGJlbSAqLworICAgICAgICBmdHNjcmVlbihTQ1Jf UFQsJ1onLChDS19PRkZfVCkwLCIiKTsKKyAgICAgICAgaWYgKHJjID09IDApIHsKKyAgICAgICAg ICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9PSywoQ0tfT0ZGX1QpMCwiIik7IC8qIEZvciBzY3JlZW4g Ki8KKyAgICAgICAgICAgIG1ha2VzdHIoJnJyZnNwZWMscmVtb3RlKTsgICAgIC8qIEZvciBXSEVS RSBjb21tYW5kICovCisgICAgICAgICAgICBtYWtlc3RyKCZyZnNwZWMsZnVsbG5hbWUpOworICAg ICAgICB9CisgICAgfQorICAgIGlmIChyYyA+IC0xKSB7CisJaWYgKGZ0cF9kYXRlcykJCQkvKiBJ ZiBGVFAgREFURVMgT04uLi4gKi8KKwkgIGlmICghcGlwZW5hbWUgJiYgIW91dDJzY3JlZW4pCS8q IGFuZCBpdCdzIGEgcmVhbCBmaWxlICovCisJICAgIGlmIChyYyA8IDEgJiYgcmMgIT0gLTMpCS8q IGFuZCBpdCB3YXNuJ3Qgc2tpcHBlZCAqLworCSAgICAgIGlmIChjb25uZWN0ZWQpCQkvKiBhbmQg d2Ugc3RpbGwgaGF2ZSBhIGNvbm5lY3Rpb24gKi8KKwkJaWYgKHpjaGtpKGxvY2FsKSA+IC0xKSB7 IC8qIGFuZCB0aGUgZmlsZSB3YXNuJ3QgZGlzY2FyZGVkICovCisJCSAgICBjaGttb2R0aW1lKGxv Y2FsLHJlbW90ZSwxKTsgLyogc2V0IGxvY2FsIGZpbGUgZGF0ZSAqLworCQkgICAgZGVidWcoRjEx MCwiZnRwIGdldCBzZXQgZGF0ZSIsbG9jYWwsMCk7CisJCX0KKwlmaWxjbnQrKzsJCQkvKiBVc2Vk IGJ5IFx2KGZpbGVudW0pICovCisgICAgfQorI2lmZGVmIFRMT0cKKyAgICBpZiAodHJhbG9nKSB7 CisgICAgICAgIGlmIChyYyA+IDApIHsKKyAgICAgICAgICAgIHRsb2coRjEwMCwiIHJlY292ZXJ5 IHNraXBwZWQiLCIiLDApOworICAgICAgICB9IGVsc2UgaWYgKHJjID09IDApIHsKKyAgICAgICAg ICAgIHRsb2coRjEwMSwiIGNvbXBsZXRlLCBzaXplIiwgIiIsIGZzaXplKTsKKyAgICAgICAgfSBl bHNlIGlmIChjYW5jZWxmaWxlKSB7CisgICAgICAgICAgICB0bG9nKEYxMDAsIiBjYW5jZWxlZCBi eSB1c2VyIiwiIiwwKTsKKyNpZmRlZiBGVFBfVElNRU9VVAorICAgICAgICB9IGVsc2UgaWYgKGZ0 cF90aW1lZF9vdXQpIHsKKyAgICAgICAgICAgIHRsb2coRjEwMCwiIHRpbWVkIG91dCIsIiIsMCk7 CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHRsb2coRjExMCwiIGZhaWxlZDoiLGZ0cF9yZXBseV9zdHIsMCk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKCF0bG9nZm10KQorICAgICAgICAgIGRveGxvZyh3aGF0LGxvY2FsLGZzaXplLGZ0cF90 eXAscmMsIiIpOworICAgIH0KKyNlbmRpZiAvKiBUTE9HICovCisgICAgcmV0dXJuKHJjKTsKK30K KworLyogcHV0ZmlsZSgpIHJldHVybnM6IC0xIG9uIGVycm9yLCA+MCBpZiBmaWxlIG5vdCBzZWxl Y3RlZCwgMCBvbiBzdWNjZXNzLiAqLworLyogUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlzIFNraXAg UmVhc29uLCBTS1BfeHh4LCBmcm9tIGNrY2tlci5oLiAqLworCitzdGF0aWMgaW50CitwdXRmaWxl KGN4LAorICAgIGxvY2FsLHJlbW90ZSxmb3JjZSxtb3ZpbmcsbXZ0byxybnRvLHNydnJuLHhfY252 LHhfdXNuLHhmdCxwcm0sZmNzLHJjcyxmbGcpCisgICAgY2hhciAqIGxvY2FsLCAqIHJlbW90ZSwg KiBtdnRvLCAqcm50bywgKnNydnJuOworICAgIGludCBjeCwgZm9yY2UsIG1vdmluZywgeF9jbnYs IHhfdXNuLCB4ZnQsIGZjcywgcmNzLCBmbGcsIHBybTsKKworLyogcHV0ZmlsZSAqLyB7CisKKyAg ICBjaGFyIGFzbmFtZVtDS01BWFBBVEgrMV07CisgICAgY2hhciBmdWxsbmFtZVtDS01BWFBBVEgr MV07CisgICAgaW50IGsgPSAtMSwgeCA9IDAsIHkgPSAwLCBvID0gLTEsIHJjID0gMCwgbmMgPSAw OworICAgIGludCB4bGF0ZSA9IDAsIHJlc3RhcnQgPSAwLCBtdCA9IC0xOworICAgIGNoYXIgKiBz ID0gTlVMTCwgKiBjbWQgPSBOVUxMOworICAgIFVMT05HIHQwID0gMCwgdDEgPSAwOwkJLyogVGlt ZXMgZm9yIHN0YXRzICovCisgICAgaW50IG9mY3MgPSAwLCBvcmNzID0gMDsKKworI2lmZGVmIEdG VElNRVIKKyAgICBDS0ZMT0FUIHNlYyA9IDAuMDsKKyNlbHNlCisgICAgaW50IHNlYyA9IDA7Cisj ZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIGRlYnVnKEYxMTEsImZ0cCBwdXRmaWxlIGZsZyIsbG9j YWwsZmxnKTsKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0ZmlsZSBzcnZfcmVuYW0iLHNydnJuLDAp OworICAgIGRlYnVnKEYxMDEsImZ0cCBwdXRmaWxlIGZjcyIsIiIsZmNzKTsKKyAgICBkZWJ1ZyhG MTAxLCJmdHAgcHV0ZmlsZSByY3MiLCIiLHJjcyk7CisKKyAgICBvZmNzID0gZmNzOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTYXZlIGNoYXJzZXQgYXJncyAqLworICAgIG9yY3MgPSByY3M7 CisKKyAgICBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsKKyAgICByZXN0YXJ0ID0gZmxnICYgUFVU X1JFUzsKKyAgICBpZiAoIXJlbW90ZSkKKyAgICAgIHJlbW90ZSA9ICIiOworCisgICAgLyogRlRQ IHByb3RvY29sIGNvbW1hbmQgdG8gc2VuZCB0byBzZXJ2ZXIgKi8KKyAgICBjbWQgPSAoY3ggPT0g RlRQX0FQUCkgPyAiQVBQRSIgOiAoeF91c24gPyAiU1RPVSIgOiAiU1RPUiIpOworCisgICAgaWYg KHhfY252ID09IFNFVF9BVVRPKSB7ICAgICAgICAgICAgLyogTmFtZSBjb252ZXJzaW9uIGlzIGF1 dG8gKi8KKyAgICAgICAgaWYgKGFsaWtlKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiBzZXJ2 ZXIgJiBjbGllbnQgYXJlIGFsaWtlICovCisgICAgICAgICAgICBuYyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgLyogbm8gY29udmVyc2lvbiAqLworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElmIHRoZXkgYXJlIGRpZmZlcmVudCAqLworICAgICAgICAgICAgaWYg KHNlcnZlcnR5cGUgPT0gU1lTX1VOSVggfHwgc2VydmVydHlwZSA9PSBTWVNfV0lOMzIpCisgICAg ICAgICAgICAgIG5jID0gLTE7ICAgICAgICAgICAgICAgICAgLyogb25seSBtaW5pbWFsIGNvbnZl cnNpb25zIG5lZWRlZCAqLworICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAg IC8qIG90aGVyd2lzZSAqLworICAgICAgICAgICAgICBuYyA9IDE7ICAgICAgICAgICAgICAgICAg IC8qIGZ1bGwgY29udmVyc2lvbiAqLworICAgICAgICB9CisgICAgfSBlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IGF1dG8gLSBkbyB3aGF0IHVzZXIgc2FpZCAqLworICAg ICAgbmMgPSB4X2NudjsKKworICAgIC8qIElmIFRyYW5zZmVyIE1vZGUgaXMgQXV0b21hdGljLCBk ZXRlcm1pbmUgZmlsZSB0eXBlICovCisgICAgaWYgKGZ0cF94ZmVybW9kZSA9PSBYTU9ERV9BICYm IGZpbGVwZWVrICYmICFwaXBlc2VuZCkgeworICAgICAgICBpZiAoaXNkaXIobG9jYWwpKSB7ICAg ICAgICAgICAgIC8qIElmIGl0J3MgYSBkaXJlY3RvcnkgKi8KKyAgICAgICAgICAgIGsgPSBGVF9C SU47ICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSBmaWxlIHNjYW4gKi8KKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIkZUUCBQVVQgY2FsbGluZyBzY2FuZmlsZSIs bG9jYWwsMCk7CisgICAgICAgICAgICBrID0gc2NhbmZpbGUobG9jYWwsJm8sbnNjYW5maWxlKTsg LyogU2NhbiB0aGUgZmlsZSAqLworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTEsIkZUUCBQ VVQgc2NhbmZpbGUiLGxvY2FsLGspOworICAgICAgICBpZiAoayA+IC0xICYmICFmb3JjZXR5cGUp IHsKKyAgICAgICAgICAgIGZ0cF90eXAgPSAoayA9PSBGVF9CSU4pID8gMSA6IDA7CisgICAgICAg ICAgICBpZiAoeGZ0ID4gLTEgJiYgZnRwX3R5cCAhPSB4ZnQpIHsKKyAgICAgICAgICAgICAgICBp ZiAoZmxnICYgUFVUX1NJTSkKKyAgICAgICAgICAgICAgICAgIHRsb2coRjExMCwiZnRwIHB1dCBT S0lQIChUeXBlKToiLCBsb2NhbCwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKFNLUF9UWVAp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZ0cF90eXAgPT0gMSAmJiB0ZW5leCkg IC8qIFVzZXIgc2FpZCBURU5FWD8gKi8KKyAgICAgICAgICAgICAgZnRwX3R5cCA9IEZUVF9URU47 CisgICAgICAgIH0KKyAgICB9CisjaWZuZGVmIE5PQ1NFVFMKKyAgICBmdHBfY3N4ID0gLTE7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBGb3IgZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCisgICAg ZnRwX2NzbCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogLi4uICovCisKKyAgICBpZiAo cmNzID4gLTEpIHsgICAgICAgICAgICAgICAgICAgICAvKiAtMSBtZWFucyBubyB0cmFuc2xhdGlv biAqLworICAgICAgICBpZiAoZnRwX3R5cCA9PSAwKSB7ICAgICAgICAgICAgIC8qIEZpbGUgdHlw ZSBpcyAiYXNjaWkiPyAqLworICAgICAgICAgICAgaWYgKGZjcyA8IDApIHsgICAgICAgICAgICAg IC8qIEZpbGUgY2hhcnNldCBub3QgZm9yY2VkPyAqLworICAgICAgICAgICAgICAgIGlmIChrIDwg MCkgeyAgICAgICAgICAgIC8qIElmIHdlIGRpZG4ndCBzY2FuICovCisgICAgICAgICAgICAgICAg ICAgIGZjcyA9IGZjaGFyc2V0OyAgICAgLyogdXNlIHByZXZhaWxpbmcgRklMRSBDSEFSQUNURVIt U0VUICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogSWYgd2Ug ZGlkIHNjYW4sIHVzZSBzY2FuIHJlc3VsdCAqLworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KGspIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX1RFWFQ6ICAgICAvKiBVbmtub3du IHRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZjcyA9IGZjaGFyc2V0OworICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF83 QklUOiAgICAgLyogNy1iaXQgdGV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZmNzID0g ZGNzZXQ3OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgY2FzZSBGVF84QklUOiAgICAgLyogOC1iaXQgdGV4dCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgZmNzID0gZGNzZXQ4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF9VVEY4OiAgICAgLyogVVRGLTggKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIGZjcyA9IEZDX1VURjg7CisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX1VDUzI6ICAgICAvKiBVQ1Mt MiAqLworICAgICAgICAgICAgICAgICAgICAgICAgZmNzID0gRkNfVUNTMjsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChvID4gLTEpICAgICAvKiBJbnB1dCBmaWxlIGJ5dGUgb3JkZXIgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW9yZGVyID0gbzsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAgICAgICAgICAgICByY3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmNz ID4gLTEgJiYgcmNzID4gLTEpIHsgICAgICAgICAvKiBTZXQgdXAgdHJhbnNsYXRpb24gZnVuY3Rp b25zICovCisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXRmaWxlIiwiaW5pdHhsYXRlIiwwKTsK KyAgICAgICAgaW5pdHhsYXRlKGZjcyxyY3MpOworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0 ZmlsZSByY3MiLGZjc2luZm9bcmNzXS5rZXl3b3JkLHJjcyk7CisgICAgICAgIHhsYXRlID0gMTsK KyAgICAgICAgZnRwX2NzeCA9IHJjczsKKyAgICAgICAgZnRwX2NzbCA9IGZjczsKKyAgICB9Cisj ZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgYmluYXJ5ID0gZnRwX3R5cDsgICAgICAgICAgICAg ICAgICAgLyogRm9yIGZpbGUtdHJhbnNmZXIgZGlzcGxheSAqLworICAgIGFzbmFtZVswXSA9IE5V TDsKKworICAgIGlmIChyZWN1cnNpdmUpIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHNlbmRp bmcgcmVjdXJzaXZlbHksICovCisgICAgICAgIGlmICghc3luY2Rpcihsb2NhbCxmbGcgJiBQVVRf U0lNKSkgLyogc3luY2hyb25pemUgZGlyZWN0b3JpZXMuICovCisgICAgICAgICAgcmV0dXJuKC0x KTsgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgUFVUIGlmIGl0IGZhaWxzLiAqLworICAgICAg ICBlbHNlIGlmIChpc2Rpcihsb2NhbCkpICAgICAgICAgIC8qIEl0J3MgYSBkaXJlY3RvcnkgKi8K KyAgICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBzZW5kIGl0 ISAqLworICAgIH0KKyAgICBpZiAoKnJlbW90ZSkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBJ ZiBhbiBhcy1uYW1lIHRlbXBsYXRlIHdhcyBnaXZlbiAqLworI2lmbmRlZiBOT1NQTAorICAgICAg ICBpZiAoY21kX3F1b3RpbmcpIHsgICAgICAgICAgICAgIC8qIGFuZCBDT01NQU5EIFFVT1RJTkcg aXMgT04gKi8KKyAgICAgICAgICAgIHkgPSBDS01BWFBBVEg7ICAgICAgICAgICAgICAvKiBldmFs dWF0ZSBpdCBmb3IgdGhpcyBmaWxlICovCisgICAgICAgICAgICBzID0gYXNuYW1lOworICAgICAg ICAgICAgenpzdHJpbmcocmVtb3RlLCZzLCZ5KTsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyog Tk9TUEwgKi8KKyAgICAgICAgICBja3N0cm5jcHkoYXNuYW1lLHJlbW90ZSxDS01BWFBBVEgpOyAg IC8qIChvciB0YWtlIGl0IGxpdGVyYWxseSkgKi8KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGFzLW5hbWUgKi8KKyAgICAgICAgbnpsdG9yKGxv Y2FsLGFzbmFtZSxuYywwLENLTUFYUEFUSCk7ICAgIC8qIHVzZSBsb2NhbCBuYW1lIHN0cmlwIHBh dGggKi8KKyAgICAgICAgZGVidWcoRjExMCwiRlRQIFBVVCBuemx0b3IiLGFzbmFtZSwwKTsKKyAg ICB9CisgICAgLyogUHJlbGltaW5hcnkgbWVzc2FnZXMgYW5kIGxvZyBlbnRyaWVzICovCisKKyAg ICBmdWxsbmFtZVswXSA9IE5VTDsKKyAgICB6Zm5xZnAobG9jYWwsQ0tNQVhQQVRILGZ1bGxuYW1l KTsKKyAgICBpZiAoIWZ1bGxuYW1lWzBdKSBja3N0cm5jcHkoZnVsbG5hbWUsbG9jYWwsQ0tNQVhQ QVRIKzEpOworICAgIGZ1bGxuYW1lW0NLTUFYUEFUSF0gPSBOVUw7CisKKyAgICBpZiAoZGlzcGxh ICYmIGZkaXNwbGEpIHsgICAgICAgICAgICAvKiBTY3JlZW4gKi8KKyAgICAgICAgZnRzY3JlZW4o U0NSX0ZOLCdGJywoQ0tfT0ZGX1QpcGt0bnVtLGxvY2FsKTsKKyAgICAgICAgZnRzY3JlZW4oU0NS X0FOLDAsKENLX09GRl9UKTAsYXNuYW1lKTsKKyAgICAgICAgZnRzY3JlZW4oU0NSX0ZTLDAsZnNp emUsIiIpOworICAgIH0KKyNpZmRlZiBET1VQREFURQorICAgIGlmIChmbGcgJiAoUFVUX1VQRHxQ VVRfRElGKSkgewkvKiBEYXRlLWNoZWNraW5nIG1vZGVzLi4uICovCisgICAgICAgIG10ID0gY2hr bW9kdGltZShmdWxsbmFtZSxhc25hbWUsMCk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBwdXRm aWxlIGNoa21vZHRpbWUiLGFzbmFtZSxtdCk7CisgICAgICAgIGlmIChtdCA9PSAwICYmICgoZmxn ICYgUFVUX0RJRikgPT0gMCkpIHsgLyogTG9jYWwgaXMgb2xkZXIgKi8KKyAgICAgICAgICAgIHRs b2coRjExMCwiZnRwIHB1dCAvdXBkYXRlIFNLSVAgKE9sZGVyIG1vZHRpbWUpOiAiLGZ1bGxuYW1l LDApOworCSAgICAvKiBTa2lwIHRoaXMgb25lICovCisgICAgICAgICAgICBmdHNjcmVlbihTQ1Jf U1QsU1RfU0tJUCwoQ0tfT0ZGX1QpU0tQX0RBVCxmdWxsbmFtZSk7CisgICAgICAgICAgICBmaWxj bnQrKzsKKyAgICAgICAgICAgIHJldHVybihTS1BfREFUKTsKKyAgICAgICAgfSBlbHNlIGlmICht dCA9PSAxKSB7ICAgICAgICAgICAvKiBUaW1lcyBhcmUgZXF1YWwgKi8KKyAgICAgICAgICAgIHRs b2coRjExMCwiZnRwIHB1dCAvdXBkYXRlIFNLSVAgKEVxdWFsIG1vZHRpbWUpOiAiLGZ1bGxuYW1l LDApOworICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX1NLSVAsKENLX09GRl9UKVNLUF9F UVUsZnVsbG5hbWUpOyAvKiBTa2lwIGl0ICovCisgICAgICAgICAgICBmaWxjbnQrKzsKKyAgICAg ICAgICAgIHJldHVybihTS1BfREFUKTsKKyAgICAgICAgfQorCS8qIExvY2FsIGZpbGUgaXMgbmV3 ZXIgKi8KKyAgICAgICAgdGxvZyhGMTEwLGZ0cF90eXAgPyAiZnRwIHB1dCAvdXBkYXRlIEJJTkFS WToiIDoKKyAgICAgICAgICAgICAiZnRwIHB1dCAvdXBkYXRlIFRFWFQ6IiwgZnVsbG5hbWUsIDAp OworICAgIH0gZWxzZSBpZiAoZmxnICYgUFVUX1JFUykgeworICAgICAgICB0bG9nKEYxMTAsZnRw X3R5cCA/ICJmdHAgcHV0IC9yZWNvdmVyIEJJTkFSWToiIDoKKyAgICAgICAgICAgICAiZnRwIHB1 dCAvcmVjb3ZlciBURVhUOiIsIGZ1bGxuYW1lLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0 bG9nKEYxMTAsZnRwX3R5cCA/ICJmdHAgcHV0IEJJTkFSWToiIDogImZ0cCBwdXQgVEVYVDoiLCBm dWxsbmFtZSwgMCk7CisgICAgfQorI2Vsc2UKKyAgICB0bG9nKEYxMTAsZnRwX3R5cCA/ICJmdHAg cHV0IEJJTkFSWToiIDogImZ0cCBwdXQgVEVYVDoiLCBmdWxsbmFtZSwgMCk7CisjZW5kaWYgLyog RE9VUERBVEUgKi8KKyAgICB0bG9nKEYxMTAsIiBhcyIsYXNuYW1lLDApOworCisjaWZuZGVmIE5P Q1NFVFMKKyAgICBpZiAoeGxhdGUpIHsKKyAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUg ZmNzIixmY3NpbmZvW2Zjc10ua2V5d29yZCxmY3MpOworICAgICAgICB0bG9nKEYxMTAsIiBmaWxl IGNoYXJhY3RlciBzZXQ6IixmY3NpbmZvW2Zjc10ua2V5d29yZCwwKTsKKyAgICAgICAgdGxvZyhG MTEwLCIgc2VydmVyIGNoYXJhY3RlciBzZXQ6IixmY3NpbmZvW3Jjc10ua2V5d29yZCwwKTsKKyAg ICB9IGVsc2UgaWYgKCFmdHBfdHlwKSB7CisgICAgICAgIHRsb2coRjExMCwiIGNoYXJhY3RlciBz ZXRzOiIsIm5vIGNvbnZlcnNpb24iLDApOworICAgICAgICBmY3MgPSBvZmNzOyAgICAgICAgICAg ICAgICAgICAgIC8qIEJpbmFyeSBmaWxlIGJ1dCB3ZSBzdGlsbCBtdXN0ICovCisgICAgICAgIHJj cyA9IG9yY3M7ICAgICAgICAgICAgICAgICAgICAgLyogdHJhbnNsYXRlIGl0cyBuYW1lICovCisg ICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgIC8qIFBVVCBUSEUgRklMRSAqLworCisg ICAgdDAgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgdGltZSAqLwor ICAgIGlmIChmbGcgJiBQVVRfU0lNKSB7ICAgICAgICAgICAgICAgIC8qIHJjID4gMCBpcyBhIHNr aXAgcmVhc29uIGNvZGUgKi8KKyAgICAgICAgaWYgKGZsZyAmIChQVVRfVVBEfFBVVF9ESUYpKSB7 CS8qIChzZWUgU0tQX3h4eCBpbiBja2NrZXIuaCkgKi8KKyAgICAgICAgICAgIHJjID0gKG10IDwg MCkgPyAgICAgICAgICAgICAvKiBVcGRhdGUgbW9kZS4uLiAqLworICAgICAgICAgICAgICBTS1Bf WE5YIDogICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBmaWxlIGRvZXNuJ3QgZXhpc3QgKi8KKyAg ICAgICAgICAgICAgICBTS1BfWFVQOyAgICAgICAgICAgICAgICAvKiBSZW1vdGUgZmlsZSBpcyBv bGRlciAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmMgPSBTS1BfU0lNOyAgICAg ICAgICAgICAgIC8qICJXb3VsZCBiZSBzZW50IiwgcGVyaW9kLiAqLworICAgICAgICB9CisgICAg fSBlbHNlIHsKKyAgICAgICAgcmMgPSBzZW5kcmVxdWVzdChjbWQsbG9jYWwsYXNuYW1lLHhsYXRl LGZjcyxyY3MscmVzdGFydCk7CisgICAgfQorICAgIHQxID0gZ21zdGltZXIoKTsgICAgICAgICAg ICAgICAgICAgIC8qIEVuZCB0aW1lICovCisgICAgZmlsY250Kys7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSBudW1iZXIgKi8KKworI2lmZGVmIEdGVElNRVIKKyAgICBzZWMgPSAo Q0tGTE9BVCkoKENLRkxPQVQpKHQxIC0gdDApIC8gMTAwMC4wKTsgLyogU3RhdHMgKi8KKyAgICBm cHhmc2VjcyA9IHNlYzsgICAgICAgICAgICAgICAgICAgICAvKiAoZm9yIGRveGxvZygpKSAqLwor I2Vsc2UKKyAgICBzZWMgPSAodDEgLSB0MCkgLyAxMDAwOworICAgIHhmc2VjcyA9IChpbnQpc2Vj OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworICAgIGRlYnVnKEYxMTEsImZ0cCBzZW5kcmVxdWVz dCByYyIsbG9jYWwscmMpOworCisgICAgaWYgKGNhbmNlbGZpbGUgfHwgY2FuY2VsZ3JvdXApIHsK KyAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBjYW5jZWxlZCIsY2tpdG9hKGNhbmNlbGZpbGUp LGNhbmNlbGdyb3VwKTsKKyAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX0lOVCwoQ0tfT0ZGX1Qp MCwiIik7CisgICAgfSBlbHNlIGlmIChyYyA+IDApIHsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRw IHB1dCBza2lwcGVkIixsb2NhbCxyYyk7CisgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9TS0lQ LChDS19PRkZfVClyYyxmdWxsbmFtZSk7CisgICAgfSBlbHNlIGlmIChyYyA8IDApIHsKKyAgICAg ICAgZGVidWcoRjExMSwiZnRwIHB1dCBlcnJvciIsbG9jYWwsZnRwY29kZSk7CisgICAgICAgIGZ0 c2NyZWVuKFNDUl9TVCxTVF9NU0csKENLX09GRl9UKTAsJmZ0cF9yZXBseV9zdHJbNF0pOworICAg IH0gZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBwdXQgbm90IGNhbmNlbGVkIixja2l0 b2EoZGlzcGxhKSxmZGlzcGxhKTsKKyAgICAgICAgZnRzY3JlZW4oU0NSX1BULCdaJywoQ0tfT0ZG X1QpMCwiIik7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBwdXQgU1RfT0siLGxvY2FsLHJjKTsK KyAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX09LLChDS19PRkZfVCkwLCIiKTsKKyAgICAgICAg ZGVidWcoRjExMCwiZnRwIHB1dCBvbGQgc2ZzcGVjIixzZnNwZWMsMCk7CisgICAgICAgIG1ha2Vz dHIoJnNmc3BlYyxmdWxsbmFtZSk7ICAgICAgLyogRm9yIFdIRVJFIGNvbW1hbmQgKi8KKyAgICAg ICAgZGVidWcoRjExMCwiZnRwIHB1dCBuZXcgc2ZzcGVjIixzZnNwZWMsMCk7CisgICAgICAgIGRl YnVnKEYxMTAsImZ0cCBwdXQgb2xkIHNyZnNwZWMiLHNyZnNwZWMsMCk7CisgICAgICAgIG1ha2Vz dHIoJnNyZnNwZWMsYXNuYW1lKTsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIHB1dCBuZXcgc3Jm c3BlYyIsc3Jmc3BlYywwKTsKKyAgICB9CisKKyAgICAvKiBGaW5hbCBsb2cgZW50cmllcyAqLwor CisjaWZkZWYgVExPRworICAgIGlmICh0cmFsb2cpIHsKKyAgICAgICAgaWYgKHJjID4gMCkgewor ICAgICAgICAgICAgaWYgKHJjID09IFNLUF9YTlgpCisgICAgICAgICAgICAgIHRsb2coRjEwMCwi IC9zaW11bGF0ZTogV09VTEQgQkUgU0VOVDoiLCJubyByZW1vdGUgZmlsZSIsMCk7CisgICAgICAg ICAgICBlbHNlIGlmIChyYyA9PSBTS1BfWFVQKQorICAgICAgICAgICAgICB0bG9nKEYxMDAsIiAv c2ltdWxhdGU6IFdPVUxEIEJFIFNFTlQ6IiwicmVtb3RlIGZpbGUgb2xkZXIiLDApOworICAgICAg ICAgICAgZWxzZSBpZiAocmMgPT0gU0tQX1NJTSkKKyAgICAgICAgICAgICAgdGxvZyhGMTAwLCIg L3NpbXVsYXRlOiBXT1VMRCBCRSBTRU5UIiwiIiwwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgdGxvZyhGMTEwLCIgc2tpcHBlZDoiLGdza3JlYXNvbihyYyksMCk7CisgICAgICAg IH0gZWxzZSBpZiAocmMgPT0gMCkgeworICAgICAgICAgICAgdGxvZyhGMTAxLCIgY29tcGxldGUs IHNpemUiLCAiIiwgZnNpemUpOworICAgICAgICB9IGVsc2UgaWYgKGNhbmNlbGZpbGUpIHsKKyAg ICAgICAgICAgIHRsb2coRjEwMCwiIGNhbmNlbGVkIGJ5IHVzZXIiLCIiLDApOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgdGxvZyhGMTEwLCIgZmFpbGVkOiIsZnRwX3JlcGx5X3N0ciww KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRsb2dmbXQpCisgICAgICAgICAgZG94bG9nKHdo YXQsbG9jYWwsZnNpemUsZnRwX3R5cCxyYywiIik7CisgICAgfQorI2VuZGlmIC8qIFRMT0cgKi8K KworICAgIGlmIChyYyA8IDApICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBVVCBkaWQgbm90 IHN1Y2NlZWQgKi8KKyAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBz byBkb25lLiAqLworCisgICAgaWYgKGZsZyAmIFBVVF9TSU0pICAgICAgICAgICAgICAgICAgLyog U2ltdWxhdGluZywgc2tpcCB0aGUgcmVzdC4gKi8KKyAgICAgIHJldHVybihTS1BfU0lNKTsKKwor I2lmZGVmIFVOSVgKKyAgICAvKiBTZXQgcGVybWlzc2lvbnMgdG9vPyAqLworCisgICAgaWYgKHBy bSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhbmdlIHBlcm1pc3Npb25zPyAqLwor ICAgICAgICBzID0gemdwZXJtKGxvY2FsKTsgICAgICAgICAgICAgIC8qIEdldCBwZXJtcyBvZiBs b2NhbCBmaWxlICovCisgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICB4ID0gc3RybGVu KHMpOworICAgICAgICBpZiAoeCA+IDMpIHMgKz0gKHggLSAzKTsKKyAgICAgICAgaWYgKHJkaWdp dHMocykpIHsKKyAgICAgICAgICAgIGNrbWFrbXNnKGZ0cGNtZGJ1ZixGVFBfQlVGU0laLHMsIiAi LGFzbmFtZSxOVUxMKTsKKyAgICAgICAgICAgIHggPQorICAgICAgICAgICAgICBmdHBjbWQoIlNJ VEUgQ0hNT0QiLGZ0cGNtZGJ1ZixmY3MscmNzLGZ0cF92Ym0pID09IFJFUExZX0NPTVBMRVRFOwor ICAgICAgICAgICAgdGxvZyhGMTEwLCB4ID8gIiBjaG1vZCIgOiAiIGNobW9kIGZhaWxlZCIsCisg ICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgfQorICAgIH0KKyNlbmRpZiAvKiBVTklYICovCisKKyAgICAvKiBEaXNwb3NpdGlvbiBvZiBz b3VyY2UgZmlsZSAqLworCisgICAgaWYgKG1vdmluZykgeworICAgICAgICB4ID0gemRlbGV0KGxv Y2FsKTsKKyAgICAgICAgdGxvZyhGMTEwLCAoeCA+IC0xKSA/CisgICAgICAgICAgICAgIiBkZWxl dGVkIiA6ICIgZmFpbGVkIHRvIGRlbGV0ZSIsCisgICAgICAgICAgICAgbG9jYWwsCisgICAgICAg ICAgICAgMAorICAgICAgICAgICAgICk7CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0gZWxzZSBpZiAobXZ0bykgeworICAgICAgICB4ID0genJlbmFtZShs b2NhbCxtdnRvKTsKKyAgICAgICAgdGxvZyhGMTEwLCAoeCA+IC0xKSA/CisgICAgICAgICAgICAg IiBtb3ZlZCBzb3VyY2UgdG8iIDogIiBmYWlsZWQgdG8gbW92ZSBzb3VyY2UgdG8iLAorICAgICAg ICAgICAgIG12dG8sCisgICAgICAgICAgICAgMAorICAgICAgICAgICAgICk7CisgICAgICAgIGlm ICh4IDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAvKiBmdHNjcmVlbihTQ1Jf U1QsU1RfTVNHLChDS19PRkZfVCkwLG12dG8pOyAqLworCisgICAgfSBlbHNlIGlmIChybnRvKSB7 CisgICAgICAgIGNoYXIgKiBzID0gcm50bzsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgaW50IHk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXNzIGl0IHRocnUgdGhlIGV2YWx1YXRvciAq LworICAgICAgICBleHRlcm4gaW50IGNtZF9xdW90aW5nOyAgICAgICAgIC8qIGZvciBcdihmaWxl bmFtZSkgKi8KKyAgICAgICAgaWYgKGNtZF9xdW90aW5nKSB7ICAgICAgICAgICAgICAvKiBCdXQg b25seSBpZiBjbWRfcXVvdGluZyBpcyBvbiAqLworICAgICAgICAgICAgeSA9IENLTUFYUEFUSDsK KyAgICAgICAgICAgIHMgPSAoY2hhciAqKWFzbmFtZTsKKyAgICAgICAgICAgIHp6c3RyaW5nKHJu dG8sJnMsJnkpOworICAgICAgICAgICAgcyA9IChjaGFyICopYXNuYW1lOworICAgICAgICB9Cisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgaWYgKHMpIGlmICgqcykgeworICAgICAgICAgICAg aW50IHg7CisgICAgICAgICAgICB4ID0genJlbmFtZShsb2NhbCxzKTsKKyAgICAgICAgICAgIHRs b2coRjExMCwgKHggPiAtMSkgPworICAgICAgICAgICAgICAgICAiIHJlbmFtZWQgc291cmNlIGZp bGUgdG8iIDoKKyAgICAgICAgICAgICAgICAgIiBmYWlsZWQgdG8gcmVuYW1lIHNvdXJjZSBmaWxl IHRvIiwKKyAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgMAorICAgICAgICAg ICAgICAgICApOworICAgICAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICAgICAgLyogZnRzY3JlZW4oU0NSX1NULFNUX01TRywoQ0tfT0ZGX1QpMCxz KTsgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIERpc3Bvc2l0aW9uIG9mIGRlc3RpbmF0 aW9uIGZpbGUgKi8KKworICAgIGlmIChzcnZybikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IC9TRVJWRVItUkVOQU1FOiAqLworICAgICAgICBjaGFyICogcyA9IHNydnJuOworI2lmbmRlZiBO T1NQTAorICAgICAgICBpbnQgeTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhc3MgaXQg dGhydSB0aGUgZXZhbHVhdG9yICovCisgICAgICAgIGV4dGVybiBpbnQgY21kX3F1b3Rpbmc7IC8q IGZvciBcdihmaWxlbmFtZSkgKi8KKyAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgc3J2 cm4iLHMsMSk7CisKKyAgICAgICAgaWYgKGNtZF9xdW90aW5nKSB7ICAgICAgICAgICAgICAvKiBC dXQgb25seSBpZiBjbWRfcXVvdGluZyBpcyBvbiAqLworICAgICAgICAgICAgeSA9IENLTUFYUEFU SDsKKyAgICAgICAgICAgIHMgPSAoY2hhciAqKWZ1bGxuYW1lOyAgICAgICAvKiBXZSBjYW4gcmVj eWNsZSB0aGlzIGJ1ZmZlciBub3cgKi8KKyAgICAgICAgICAgIHp6c3RyaW5nKHNydnJuLCZzLCZ5 KTsKKyAgICAgICAgICAgIHMgPSAoY2hhciAqKWZ1bGxuYW1lOworICAgICAgICB9CisjZW5kaWYg LyogTk9TUEwgKi8KKyAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dGZpbGUgc3J2cm4iLHMsMik7 CisgICAgICAgIGlmIChzKSBpZiAoKnMpIHsKKyAgICAgICAgICAgIGludCB4OworICAgICAgICAg ICAgeCA9IGZ0cF9yZW5hbWUoYXNuYW1lLHMpOworICAgICAgICAgICAgZGVidWcoRjExMSwiZnRw IHB1dGZpbGUgZnRwX3JlbmFtZSIsYXNuYW1lLHgpOworICAgICAgICAgICAgdGxvZyhGMTEwLCAo eCA+IDApID8KKyAgICAgICAgICAgICAgICAgIiByZW5hbWVkIGRlc3RpbmF0aW9uIGZpbGUgdG8i IDoKKyAgICAgICAgICAgICAgICAgIiBmYWlsZWQgdG8gcmVuYW1lIGRlc3RpbmF0aW9uIGZpbGUg dG8iLAorICAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgICAwCisgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICBpZiAoeCA8IDEpCisgICAgICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisvKiB4eG91dCBtdXN0 IG9ubHkgYmUgdXNlZCBmb3IgQVNDSUkgdHJhbnNmZXJzICovCitzdGF0aWMgaW50CisjaWZkZWYg Q0tfQU5TSUMKK3h4b3V0KGNoYXIgYykKKyNlbHNlCit4eG91dChjKSBjaGFyIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyNpZm5kZWYgT1MyCisjaWZuZGVmIFZNUworI2lmbmRlZiBNQUMK KyNpZm5kZWYgT1NLCisgICAgLyogRm9yIFVuaXgsIERHLCBTdHJhdHVzLCBBbWlnYSwgR2VtZG9z LCBvdGhlciAqLworICAgIGlmIChjID09ICdcMDEyJykgeworCWlmICh6em91dChkb3V0LChDSEFS KSdcMDE1JykgPCAwKQorCSAgcmV0dXJuKC0xKTsKKwlmdHBzbmQuYnl0ZXMrKzsKKyAgICB9Cisj ZWxzZSAvKiBPU0sgKi8KKyAgICBpZiAoYyA9PSAnXDAxNScpIHsKKwljID0gJ1wwMTInOworCWlm ICh6em91dChkb3V0LChDSEFSKSdcMDE1JykgPCAwKQorCSAgcmV0dXJuKC0xKTsKKwlmdHBzbmQu Ynl0ZXMrKzsKKyAgICB9CisjZW5kaWYgLyogT1NLICovCisjZWxzZSAvKiBNQUMgKi8KKyAgICBp ZiAoYyA9PSAnXDAxNScpIHsKKwljID0gJ1wwMTInOworCWlmICh6em91dChkb3V0LChDSEFSKSdc MDE1JykgPCAwKQorCSAgcmV0dXJuKC0xKTsKKwlmdHBzbmQuYnl0ZXMrKzsKKyAgICB9CisjZW5k aWYgLyogTUFDICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgaWYg KHp6b3V0KGRvdXQsKENIQVIpYykgPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBmdHBzbmQu Ynl0ZXMrKzsKKyAgICByZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJ Qworc2Nybm91dChjaGFyIGMpCisjZWxzZQorc2Nybm91dChjKSBjaGFyIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4ocHV0Y2hhcihjKSk7Cit9CisKK3N0YXRpYyBpbnQK KyNpZmRlZiBDS19BTlNJQworcGlwZW91dChjaGFyIGMpCisjZWxzZQorcGlwZW91dChjKSBjaGFy IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4oem1jaG91dChjKSk7Cit9 CisKK3N0YXRpYyBpbnQKK2lzcGF0aHNlcChjKSBpbnQgYzsgeworICAgIHN3aXRjaCAoc2VydmVy dHlwZSkgeworICAgICAgY2FzZSBTWVNfVk1TOgorICAgICAgY2FzZSBTWVNfVE9QUzEwOgorICAg ICAgY2FzZSBTWVNfVE9QUzIwOgorICAgICAgICByZXR1cm4oKChjID09ICddJykgfHwgKGMgPT0g Jz4nKSB8fCAoYyA9PSAnOicpKSA/IDEgOiAwKTsKKyAgICAgIGNhc2UgU1lTX09TMjoKKyAgICAg IGNhc2UgU1lTX1dJTjMyOgorICAgICAgY2FzZSBTWVNfRE9TOgorICAgICAgICByZXR1cm4oKChj ID09ICdcXCcpIHx8IChjID09ICcvJykgfHwgKGMgPT0gJzonKSkgPyAxIDogMCk7CisgICAgICBj YXNlIFNZU19WT1M6CisgICAgICAgIHJldHVybigoYyA9PSAnPicpID8gMSA6IDApOworICAgICAg ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKChjID09ICcvJykgPyAxIDogMCk7CisgICAgfQorfQor CitzdGF0aWMgaW50Citpc2NhbmNlbGVkKCkgeworI2lmZGVmIENLX0NVUlNFUworICAgIGV4dGVy biBpbnQgY2tfcmVwYWludCgpOworI2VuZGlmIC8qIENLX0NVUlNFUyAqLworICAgIGludCB4LCBy YyA9IDA7CisgICAgY2hhciBjID0gMDsKKyAgICBpZiAoY2FuY2VsZmlsZSkKKyAgICAgIHJldHVy bigxKTsKKyAgICB4ID0gY29uY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnkgY2hh cnMgd2FpdGluZyBhdCBjb25zb2xlPyAqLworICAgIGlmICh4LS0gPiAwKSB7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFllcy4uLiAgKi8KKyAgICAgICAgYyA9IGNvbmluYyg1KTsgICAgICAgICAg ICAgICAgICAvKiBHZXQgb25lICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgIGNh c2UgMDMyOiAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtWCBvciBYICovCisgICAgICAgICAg Y2FzZSAneic6CisgICAgICAgICAgY2FzZSAnWic6IGNhbmNlbGdyb3VwKys7ICAgICAgLyogZmFs bCB0aHJ1IG9uIHB1cnBvc2UgKi8KKyAgICAgICAgICBjYXNlIDAzMDogICAgICAgICAgICAgICAg ICAgICAvKiBDdHJsLVogb3IgWiAqLworICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgIGNh c2UgJ1gnOiBjYW5jZWxmaWxlKys7IHJjKys7IGJyZWFrOworI2lmZGVmIENLX0NVUlNFUworICAg ICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgIGNhc2UgMDE0 OiAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtTCBvciBMIG9yIEN0cmwtVyAqLworICAgICAg ICAgIGNhc2UgMDI3OgorICAgICAgICAgICAgY2tfcmVwYWludCgpOyAgICAgICAgICAgICAgIC8q IFJlZnJlc2ggc2NyZWVuICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisgICAgICAgIH0KKyAg ICB9CisgICAgd2hpbGUgKHgtLSA+IDApICAgICAgICAgICAgICAgICAgICAgLyogU29hayB1cCBh bnkgcmVzdCAqLworICAgICAgYyA9IGNvbmluYygxKTsKKyAgICByZXR1cm4ocmMpOworfQorCisj aWZkZWYgRlRQX1RJTUVPVVQKKy8qIGZjID0gMCBmb3IgcmVhZDsgMSBmb3Igd3JpdGUgKi8KK3N0 YXRpYyBpbnQKK2NoZWNrX2RhdGFfY29ubmVjdGlvbihmZCxmYykgaW50IGZkLCBmYzsgeworICAg IGludCB4OworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIGZkX3NldCBpbiwgb3V0LCBlcnI7 CisKKyAgICBpZiAoZnRwX3RpbWVvdXQgPCAxTCkKKyAgICAgIHJldHVybigwKTsKKworICAgIEZE X1pFUk8oJmluKTsKKyAgICBGRF9aRVJPKCZvdXQpOworICAgIEZEX1pFUk8oJmVycik7CisgICAg RkRfU0VUKGZkLGZjID8gJm91dCA6ICZpbik7CisgICAgdHYudHZfc2VjID0gZnRwX3RpbWVvdXQ7 CQkvKiBUaW1lIGxpbWl0ICovCisgICAgdHYudHZfdXNlYyA9IDBMOworCisjaWZkZWYgSU5UU0VM RUNUCisgICAgeCA9IHNlbGVjdChGRF9TRVRTSVpFLChpbnQgKikmaW4sKGludCAqKSZvdXQsKGlu dCAqKSZlcnIsJnR2KTsKKyNlbHNlCisgICAgeCA9IHNlbGVjdChGRF9TRVRTSVpFLCZpbiwmb3V0 LCZlcnIsJnR2KTsKKyNlbmRpZiAvKiBJTlRTRUxFQ1QgKi8KKworICAgIGlmICh4ID09IDApIHsK KyNpZmRlZiBFV09VTERCTE9DSworCWVycm5vID0gRVdPVUxEQkxPQ0s7CisjZWxzZQorI2lmZGVm IEVBR0FJTgorCWVycm5vID0gRUFHQUlOOworI2Vsc2UKKwllcnJubyA9IDExOworI2VuZGlmCS8q IEVBR0FJTiAqLworI2VuZGlmCS8qIEVXT1VMREJMT0NLICovCisJZGVidWcoRjEwMCwiZnRwIGNo ZWNrX2RhdGFfY29ubmVjdGlvbiBUSU1PVVQiLCIiLDApOworCXJldHVybigtMyk7CisgICAgfQor ICAgIHJldHVybigwKTsKK30KKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLworCisvKiB6enNlbmQg LSB1c2VkIGJ5IGJ1ZmZlcmVkIG91dHB1dCBtYWNyb3MuICovCisKK3N0YXRpYyBpbnQKKyNpZmRl ZiBDS19BTlNJQworenpzZW5kKGludCBmZCwgQ0hBUiBjKQorI2Vsc2UKK3p6c2VuZChmZCxjKSBp bnQgZmQ7IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCByYzsKKwor ICAgIGRlYnVnKEYxMDEsInp6c2VuZCB1Y2J1ZnNpeiIsIiIsdWNidWZzaXopOworICAgIGRlYnVn KEYxMDEsInp6c2VuZCBub3V0IiwiIixub3V0KTsKKyAgICBkZWJ1ZyhGMTExLCJ6enNlbmQiLCJz ZWN1cmU/IixmdHBpc3NlY3VyZSgpKTsKKworICAgIGlmIChpc2NhbmNlbGVkKCkpICAgICAgICAg ICAgICAgICAgIC8qIENoZWNrIGZvciBjYW5jZWxsYXRpb24gKi8KKyAgICAgIHJldHVybigtOSk7 CisKKyNpZmRlZiBGVFBfVElNRU9VVCAgICAKKyAgICBmdHBfdGltZWRfb3V0ID0gMDsKKyAgICBp ZiAoY2hlY2tfZGF0YV9jb25uZWN0aW9uKGZkLDEpIDwgMCkgeworCWZ0cF90aW1lZF9vdXQgPSAx OworCXJldHVybigtMyk7CisgICAgfQorI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCisKKyAgICBy YyA9ICghZnRwaXNzZWN1cmUoKSkgPworICAgICAgc2VuZChmZCwgKFNFTkRBUkcyVFlQRSl1Y2J1 Ziwgbm91dCwgMCkgOgorICAgICAgICBzZWN1cmVfcHV0YnVmKGZkLCB1Y2J1Ziwgbm91dCk7Cisg ICAgdWNidWZbbm91dF0gPSBOVUw7CisgICAgbm91dCA9IDA7CisgICAgdWNidWZbbm91dCsrXSA9 IGM7CisgICAgc3BhY2tldHMrKzsKKyAgICBwa3RudW0rKzsKKyAgICBpZiAocmMgPiAtMSAmJiBm ZGlzcGxhICE9IFhZRkRfQikgeworICAgICAgICBzcGt0bCA9IG5vdXQ7CisgICAgICAgIGZ0c2Ny ZWVuKFNDUl9QVCwnRCcsKENLX09GRl9UKXNwYWNrZXRzLE5VTEwpOworICAgIH0KKyAgICByZXR1 cm4ocmMpOworfQorCisvKiBjIG0gZCBsIGkgbiBwIHUgdCAgLS0gIENvbW1hbmQtbGluZSBQVVQg Ki8KKworaW50CitjbWRsaW5wdXQoc3RheSkgaW50IHN0YXk7IHsKKyAgICBpbnQgeCwgcmMgPSAw LCBkb25lID0gMCwgZ29vZCA9IDAsIHN0YXR1cyA9IDA7CisgICAgVUxPTkcgdDAsIHQxOyAgICAg ICAgICAgICAgICAgICAgICAgLyogVGltZXMgZm9yIHN0YXRzICovCisjaWZkZWYgR0ZUSU1FUgor ICAgIENLRkxPQVQgc2VjOworI2Vsc2UKKyAgICBpbnQgc2VjID0gMDsKKyNlbmRpZiAvKiBHRlRJ TUVSICovCisKKyAgICBpZiAocXVpZXQpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcSBy ZWFsbHkgbWVhbnMgcXVpZXQgKi8KKyAgICAgICAgZGlzcGxhID0gMDsKKyAgICAgICAgZmRpc3Bs YSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGlzcGxhID0gMTsKKyAgICAgICAgZmRpc3Bs YSA9IFhZRkRfQjsKKyAgICB9CisgICAgdGVzdGluZyA9IDA7CisgICAgb3V0MnNjcmVlbiA9IDA7 CisgICAgZHB5YWN0aXZlID0gMDsKKyAgICB3aGF0ID0gV19GVFB8V19TRU5EOworCisjaWZuZGVm IE5PU1BMCisgICAgY21kX3F1b3RpbmcgPSAwOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgc25k c3JjID0gbmZpbHM7CisKKyAgICB0MCA9IGdtc3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAv KiBSZWNvcmQgc3RhcnRpbmcgdGltZSAqLworCisgICAgd2hpbGUgKCFkb25lICYmICFjYW5jZWxn cm91cCkgeyAgICAgLyogTG9vcCBmb3IgYWxsIGZpbGVzICovCisKKyAgICAgICAgY2FuY2VsZmls ZSA9IDA7CisgICAgICAgIHggPSBnbmZpbGUoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IG5l eHQgZmlsZSBmcm9tIGxpc3QocykgKi8KKyAgICAgICAgaWYgKHggPT0gMCkgICAgICAgICAgICAg ICAgICAgICAvKiAoc2VlIGduZmlsZSgpIGNvbW1lbnRzLi4uKSAqLworICAgICAgICAgIHggPSBn bmZlcnJvcjsKKworICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICBjYXNlIDE6ICAgICAg ICAgICAgICAgICAgICAgICAvKiBGaWxlIHRvIHNlbmQgKi8KKyAgICAgICAgICAgIHJjID0gcHV0 ZmlsZShGVFBfUFVULCAgICAgICAvKiBGdW5jdGlvbiAoUFVULCBBUFBFTkQpICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgZmlsbmFtLCAgICAgICAgLyogTG9jYWwgZmlsZSB0byBzZW5kICov CisgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbmFtLCAgICAgICAgLyogUmVtb3RlIG5hbWUg Zm9yIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZXR5cGUsICAgICAvKiBU ZXh0L2JpbmFyeSBtb2RlIGZvcmNlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAg ICAgICAgICAgIC8qIE5vdCBtb3ZpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCAgICAgICAgICAvKiBObyBtb3ZlLXRvICovCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgICAgICAgICAgLyogTm8gcmVuYW1lLXRvICovCisgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgICAgICAgICAgLyogTm8gc2VydmVyLXJlbmFtZSAqLworICAgICAgICAgICAgICAgICAg ICAgICAgIGZ0cF9jbnYsICAgICAgIC8qIEZpbGVuYW1lIGNvbnZlcnNpb24gKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAvKiBVbmlxdWUtc2VydmVyLW5hbWVzICov CisgICAgICAgICAgICAgICAgICAgICAgICAgLTEsICAgICAgICAgICAgLyogQWxsIGZpbGUgdHlw ZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAvKiBObyBwZXJt aXNzaW9ucyAqLworICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAgICAgICAgICAgIC8qIE5v IGNoYXJhY3RlciBzZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgLTEsICAgICAgICAg ICAgLyogTm8gY2hhcmFjdGVyIHNldHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAwICAg ICAgICAgICAgICAvKiBObyB1cGRhdGUgb3IgcmVzdGFydCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICBpZiAocmMgPiAtMSkgeworICAgICAgICAgICAgICAgIGdv b2QrKzsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKGNhbmNlbGZpbGUpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAg ICAgICAgICAvKiBPciBicmVhaz8gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChy YyA8IDApIHsKKyAgICAgICAgICAgICAgICBmdHBfZmFpKys7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgLyogT3IgYnJlYWs/ICovCisKKyAg ICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLCBk b25lICovCisgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAg ICAgICAgIGNhc2UgLTI6CisgICAgICAgICAgY2FzZSAtMToKKyAgICAgICAgICAgIHByaW50Zigi PyVzOiBmaWxlIG5vdCBmb3VuZCAtIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICBwdXRl cnJvciA/ICJGYXRhbCIgOiAiV2FybmluZyIsCisgICAgICAgICAgICAgICAgICAgZmlsbmFtCisg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAg ICAgICAvKiBvciBicmVhaz8gKi8KKyAgICAgICAgICBjYXNlIC0zOgorICAgICAgICAgICAgcHJp bnRmKCI/V2FybmluZyBhY2Nlc3MgZGVuaWVkIC0gXCIlc1wiXG4iLCBmaWxuYW0pOworICAgICAg ICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgIC8qIG9yIGJyZWFrPyAqLworICAgICAg ICAgIGNhc2UgLTU6CisgICAgICAgICAgICBwcmludGYoIj9Ub28gbWFueSBmaWxlcyBtYXRjaFxu Iik7CisgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj YXNlIC02OgorICAgICAgICAgICAgaWYgKGdvb2QgPCAxKQorICAgICAgICAgICAgICBwcmludGYo Ij9ObyBmaWxlcyBzZWxlY3RlZFxuIik7CisgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHJpbnRmKCI/Z2V0bmV4 dGZpbGUoKSAtIHVua25vd24gZmFpbHVyZVxuIik7CisgICAgICAgICAgICBkb25lKys7CisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKHN0YXR1cyA+IDApIHsKKyAgICAgICAgaWYgKGNhbmNlbGdy b3VwKQorICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgIGVsc2UgaWYgKGNhbmNlbGZpbGUg JiYgZ29vZCA8IDEpCisgICAgICAgICAgc3RhdHVzID0gMDsKKyAgICB9CisgICAgc3VjY2VzcyA9 IHN0YXR1czsKKyAgICB4ID0gc3VjY2VzczsKKyAgICBpZiAoeCA+IC0xKSB7CisgICAgICAgIGxh c3R4ZmVyID0gV19GVFB8V19TRU5EOworICAgICAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7CisgICAg fQorICAgIHQxID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgICAgIC8qIEVuZCB0aW1lICov CisjaWZkZWYgR0ZUSU1FUgorICAgIHNlYyA9IChDS0ZMT0FUKSgoQ0tGTE9BVCkodDEgLSB0MCkg LyAxMDAwLjApOyAvKiBTdGF0cyAqLworICAgIGlmICghc2VjKSBzZWMgPSAwLjAwMTsKKyAgICBm cHRzZWNzID0gc2VjOworI2Vsc2UKKyAgICBzZWMgPSAodDEgLSB0MCkgLyAxMDAwOworICAgIGlm ICghc2VjKSBzZWMgPSAxOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICB0ZmNwcyA9IChsb25n KSAodGZjIC8gc2VjKTsKKyAgICB0c2VjcyA9IChpbnQpc2VjOworICAgIGxhc3R4ZmVyID0gV19G VFB8V19TRU5EOworICAgIHhmZXJzdGF0ID0gc3VjY2VzczsKKyAgICBpZiAoZHB5YWN0aXZlKQor ICAgICAgZnRzY3JlZW4oc3RhdHVzID4gMCA/IFNDUl9UQyA6IFNDUl9DVywgMCwgKENLX09GRl9U KTAsICIiKTsKKyAgICBpZiAoIXN0YXkpCisgICAgICBkb2V4aXQoc3VjY2VzcyA/IEdPT0RfRVhJ VCA6IEJBRF9FWElULCAtMSk7CisgICAgcmV0dXJuKHN1Y2Nlc3MpOworfQorCisKKy8qICBkIG8g ZiB0IHAgcCB1IHQgIC0tICBQYXJzZSBhbmQgZXhlY3V0ZSBQVVQsIE1QVVQsIGFuZCBBUFBFTkQg ICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitkb2Z0cHB1dChpbnQgY3gsIGludCB3aG8pICAg ICAgICAgICAgICAgLyogd2hvID09IDEgZm9yIGZ0cCwgMCBmb3Iga2VybWl0ICovCisjZWxzZQor ZG9mdHBwdXQoY3gsd2hvKSBpbnQgY3gsIHdobzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIHN0cnVjdCBGREIgc2YsIGZsLCBzdywgY207CisgICAgaW50IG4sIHJjLCBjb25maXJtZWQg PSAwLCB3aWxkID0gMCwgZ2V0dmFsID0gMCwgbXB1dCA9IDAsIGRvbmUgPSAwOworICAgIGludCB4 X2NudiA9IDAsIHhfdXNuID0gMCwgeF9wcm0gPSAwLCBwdXRmbGFncyA9IDAsIHN0YXR1cyA9IDAs IGdvb2QgPSAwOworICAgIGNoYXIgKiBzLCAqIHMyOworCisgICAgaW50IHhfY3NsLCB4X2NzciA9 IC0xOyAgICAgICAgICAgICAgLyogTG9jYWwgYW5kIHJlbW90ZSBjaGFyc2V0cyAqLworICAgIGlu dCB4X3hsYSA9IDA7CisgICAgaW50IHhfcmVjdXJzZSA9IDA7CisgICAgY2hhciBjLCAqIHA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLworI2lmZGVmIFBVVEFSUkFZCisgICAg aW50IHJhbmdlWzJdOyAgICAgICAgICAgICAgICAgICAgICAgLyogQXJyYXkgcmFuZ2UgKi8KKyAg ICBjaGFyICoqIGFwID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBBcnJheSBwb2ludGVyICov CisgICAgaW50IGFycmF5eCA9IC0xOyAgICAgICAgICAgICAgICAgICAgLyogQXJyYXkgaW5kZXgg Ki8KKyNlbmRpZiAvKiBQVVRBUlJBWSAqLworICAgIFVMT05HIHQwID0gMEwsIHQxID0gMEw7ICAg ICAgICAgICAgIC8qIFRpbWVzIGZvciBzdGF0cyAqLworI2lmZGVmIEdGVElNRVIKKyAgICBDS0ZM T0FUIHNlYzsKKyNlbHNlCisgICAgaW50IHNlYyA9IDA7CisjZW5kaWYgLyogR0ZUSU1FUiAqLwor CisgICAgc3RydWN0IHN0cmluZ2ludCBwdltTTkRfTUFYKzFdOyAgICAvKiBUZW1wb3JhcnkgYXJy YXkgZm9yIHN3aXRjaCB2YWx1ZXMgKi8KKyAgICBzdWNjZXNzID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBBc3N1bWUgZmFpbHVyZSAqLworICAgIGZvcmNldHlwZSA9IDA7ICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vIC9URVhUIG9yIC9CSU5BUlkgZ2l2ZW4geWV0ICovCisgICAgb3V0 MnNjcmVlbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogTm90IG91dHB1dHRpbmcgZmlsZSB0 byBzY3JlZW4gKi8KKyAgICBwdXRmbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQ VVQgb3B0aW9ucyAqLworICAgIHhfY252ID0gZnRwX2NudjsgICAgICAgICAgICAgICAgICAgIC8q IEZpbGVuYW1lIGNvbnZlcnNpb24gKi8KKyAgICB4X3VzbiA9IGZ0cF91c247ICAgICAgICAgICAg ICAgICAgICAvKiBVbmlxdWUgc2VydmVyIG5hbWVzICovCisgICAgeF9wcm0gPSBmdHBfcHJtOyAg ICAgICAgICAgICAgICAgICAgLyogUGVybWlzc2lvbnMgKi8KKyAgICBpZiAoeF9wcm0gPT0gU0VU X0FVVE8pICAgICAgICAgICAgICAvKiBQZXJtaXNzaW9ucyBBVVRPICovCisgICAgICB4X3BybSA9 IGFsaWtlOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB4X2NzciA9IGZ0cF9jc3I7ICAgICAgICAg ICAgICAgICAgICAvKiBJbmhlcml0IGdsb2JhbCBzZXJ2ZXIgY2hhcnNldCAqLworICAgIHhfY3Ns ID0gZnRwX2NzbDsKKyAgICBpZiAoeF9jc2wgPCAwKQorICAgICAgeF9jc2wgPSBmY2hhcnNldDsK KyAgICB4X3hsYSA9IGZ0cF94bGE7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgbWFrZXN0 cigmZmlsZWZpbGUsTlVMTCk7ICAgICAgICAgICAgLyogTm8gZmlsZW5hbWUgbGlzdCBmaWxlIHll dC4gKi8KKyAgICBtYWtlc3RyKCZzcnZfcmVuYW0sTlVMTCk7CQkvKiBDbGVhciAvU0VSVkVSLVJF TkFNRTogKi8KKyAgICBtYWtlc3RyKCZzbmRfcmVuYW1lLE5VTEwpOwkJLyogIFBVVCAvUkVOQU1F ICovCisgICAgbWFrZXN0cigmc25kX21vdmUsTlVMTCk7CQkvKiAgUFVUIC9NT1ZFICovCisgICAg cHV0cGF0aFswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmb3Igc3lu Y2RpcigpLiAqLworICAgIHB1dGVycm9yID0gZnRwX2VycjsgICAgICAgICAgICAgICAgIC8qIElu aGVyaXQgZ2xvYmFsIGVycm9yIGFjdGlvbi4gKi8KKyAgICB3aGF0ID0gV19TRU5EfFdfRlRQOyAg ICAgICAgICAgICAgICAvKiBXaGF0IHdlJ3JlIGRvaW5nIChzZW5kaW5nIHcvRlRQKSAqLworICAg IGFzbmFtYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgIC8qIENsZWFyIGFzLW5hbWUgYnVm ZmVyICovCisKKyAgICBpZiAoZ19mdHBfdHlwID4gLTEpIHsgICAgICAgICAgICAgICAvKiBSZXN0 b3JlIFRZUEUgaWYgc2F2ZWQgKi8KKyAgICAgICAgZnRwX3R5cCA9IGdfZnRwX3R5cDsKKyAgICAg ICAgLyogZ19mdHBfdHlwID0gLTE7ICovCisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPD0gU05E X01BWDsgaSsrKSB7ICAgIC8qIEluaXRpYWxpemUgc3dpdGNoIHZhbHVlcyAqLworICAgICAgICBw dltpXS5zdmFsID0gTlVMTDsgICAgICAgICAgICAgIC8qIHRvIG51bGwgcG9pbnRlcnMgKi8KKyAg ICAgICAgcHZbaV0uaXZhbCA9IC0xOyAgICAgICAgICAgICAgICAvKiBhbmQgLTEgaW50IHZhbHVl cyAqLworICAgICAgICBwdltpXS53dmFsID0gKENLX09GRl9UKS0xOwkvKiBhbmQgLTEgd2lkZSB2 YWx1ZXMgKi8KKyAgICB9CisgICAgaWYgKHdobyA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAg LyogQ2FsbGVkIHdpdGggdW5wcmVmaXhlZCBjb21tYW5kICovCisgICAgICAgIHN3aXRjaCAoY3gp IHsKKyAgICAgICAgICBjYXNlIFhYUlNFTjogIHB2W1NORF9SRVNdLml2YWwgPSAxOyBicmVhazsK KyAgICAgICAgICBjYXNlIFhYQ1NFTjogIHB2W1NORF9DTURdLml2YWwgPSAxOyBicmVhazsKKyAg ICAgICAgICBjYXNlIFhYTU9WRTogIHB2W1NORF9ERUxdLml2YWwgPSAxOyBicmVhazsKKyAgICAg ICAgICBjYXNlIFhYTU1PVkU6IHB2W1NORF9ERUxdLml2YWwgPSAxOyAvKiBmYWxsIHRocnUgKi8K KyAgICAgICAgICBjYXNlIFhYTVNFOiAgIG1wdXQrKzsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9 IGVsc2UgeworCWlmIChjeCA9PSBGVFBfUkVQKQorCSAgcHZbU05EX1JFU10uaXZhbCA9IDE7Cisg ICAgICAgIGlmIChjeCA9PSBGVFBfTVBVKQorICAgICAgICAgIG1wdXQrKzsKKyAgICB9CisgICAg Y21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFu ZCBzd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8q IGZjb2RlICovCisgICAgICAgICAgICJGaWxlbmFtZSwgb3Igc3dpdGNoIiwgICAgICAgLyogaGxw bXNnICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVs dCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0 cmluZyBkYXRhICovCisgICAgICAgICAgIG5wdXRzd2ksICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgIDQsICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLwor ICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVu Y3Rpb24gKi8KKyAgICAgICAgICAgcHV0c3dpLCAgICAgICAgICAgICAgICAgICAgICAvKiBLZXl3 b3JkIHRhYmxlICovCisgICAgICAgICAgICZzZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOworICAgIGNtZmRiaSgmZmwsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDNyZCBGREIgLSBsb2NhbCBmaWxlc3BlYyAqLworICAg ICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAg ICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRh IDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAgICAgTlVMTCwK KyAgICAgICAgICAgJmNtCisgICAgICAgICAgICk7CisgICAgY21mZGJpKCZjbSwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNHRoIEZEQiAtIENvbmZpcm1hdGlvbiAqLworICAgICAgICAgICBf Q01DRk0sICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAg ICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRh dGEgMiAqLworICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBO VUxMCisgICAgICAgICAgICk7CisKKyAgYWdhaW46CisgICAgY21mZGJpKCZzZiwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIGZpbGUgdG8gc2VuZCAqLworICAgICAgICAgICBf Q01JRkksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIC8q IDAgPSBwYXJzZSBmaWxlcywgMSA9IHBhcnNlIGZpbGVzIG9yIGRpcnMsIDIgPSBza2lwIHN5bWxp bmtzICovCisgICAgICAgICAgIG5vbGlua3MgfCB4X3JlY3Vyc2UsICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBkaXJmbGcgMCBtZWFucyAibm90IGRpcnMgb25seSIgKi8KKyAgICAgICAgICAgeHhzdHJp bmcsCisgICAgICAgICAgIE5VTEwsCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICBtcHV0ID8g JmNtIDogJmZsCisjZWxzZQorCSAgICZmbAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg ICAgKTsKKworICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNl IHplcm8gb3IgbW9yZSBzd2l0Y2hlcyAqLworICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAg ICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAg cHV0IGNtZmRiIEEiLCIiLHgpOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcHV0IGZjb2RlIEEi LCIiLGNtcmVzdWx0LmZjb2RlKTsKKyAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAg ICAgICAvKiBFcnJvciAqLworICAgICAgICAgIGdvdG8geHB1dHg7ICAgICAgICAgICAgICAgICAg IC8qIG9yIHJlcGFyc2UgbmVlZGVkICovCisgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBf Q01LRVkpICAgLyogQnJlYWsgb3V0IG9mIGxvb3AgaWYgbm90IGEgc3dpdGNoICovCisgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0 IGJyZWFrIGNoYXJhY3RlciAqLworICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAn PScpOyAvKiB0byBzZWUgaG93IHRoZXkgZW5kZWQgdGhlIHN3aXRjaCAqLworICAgICAgICBpZiAo Z2V0dmFsICYmICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJp bnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOworICAgICAgICAg ICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgfQorICAgICAgICBp ZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICBwcmlu dGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICB4 ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICB9CisgICAgICAgIG4gPSBj bXJlc3VsdC5ucmVzdWx0OyAgICAgICAgICAgLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFs dWUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZnRwIHB1dCBzd2l0Y2giLCIiLG4pOworCisgICAg ICAgIHN3aXRjaCAobikgeyAgICAgICAgICAgICAgICAgICAgLyogUHJvY2VzcyB0aGUgc3dpdGNo ICovCisgICAgICAgICAgY2FzZSBTTkRfQUZUOiAgICAgICAgICAgICAgICAgLyogU2VuZCAvQUZU RVI6ZGF0ZS10aW1lICovCisgICAgICAgICAgY2FzZSBTTkRfQkVGOiAgICAgICAgICAgICAgICAg LyogU2VuZCAvQkVGT1JFOmRhdGUtdGltZSAqLworICAgICAgICAgIGNhc2UgU05EX05BRjogICAg ICAgICAgICAgICAgIC8qIFNlbmQgL05PVC1BRlRFUjpkYXRlLXRpbWUgKi8KKyAgICAgICAgICBj YXNlIFNORF9OQkU6ICAgICAgICAgICAgICAgICAvKiBTZW5kIC9OT1QtQkVGT1JFOmRhdGUtdGlt ZSAqLworICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4 ID0gY21kYXRlKCJGaWxlIGRhdGUtdGltZSIsIiIsJnMsMCx4eHN0cmluZykpIDwgMCkgeworICAg ICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi P0RhdGUtdGltZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgbWFrZXN0cigmKHB2 W25dLnN2YWwpLHMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNORF9B U046ICAgICAgICAgICAgICAgICAvKiAvQVMtTkFNRTogKi8KKyAgICAgICAgICAgIGRlYnVnKEYx MDEsImZ0cCBwdXQgL2FzLW5hbWUgZ2V0dmFsIiwiIixnZXR2YWwpOworICAgICAgICAgICAgaWYg KCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgdG8gc2Vu ZCB1bmRlciIsIiIsJnMsTlVMTCkpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0z KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP25hbWUgcmVxdWlyZWRcbiIpOworICAg ICAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYWtlc3RyKCYocHZb bl0uc3ZhbCksYnJzdHJpcChzKSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0IC9h cy1uYW1lIDEiLHB2W25dLnN2YWwsMCk7CisgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgcHZb bl0uaXZhbCA9IDE7CisgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIFBVVEFSUkFZCisgICAg ICAgICAgY2FzZSBTTkRfQVJSOiAgICAgICAgICAgICAgICAgLyogL0FSUkFZICovCisgICAgICAg ICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBhcCA9IE5VTEw7CisgICAgICAg ICAgICBpZiAoKHggPSBjbWZsZCgiQXJyYXkgbmFtZSAoYSBzaW5nbGUgbGV0dGVyIHdpbGwgZG8p IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAg ICAgICAgICAgICAgICApKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykKKwkJ ICBicmVhazsKKwkJZWxzZQorCQkgIHJldHVybih4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJihyYW5nZVswXSksJihyYW5nZVsxXSkpKSA8IDAp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9CYWQgYXJyYXk6ICVzXG4iLHMpOworICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIShh cCA9IGFfcHRyW3hdKSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP05vIHN1Y2ggYXJyYXk6 ICVzXG4iLHMpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAgICAgICAgICAgIHB2W1NORF9DTURdLml2YWwg PSAwOyAgICAgICAvKiBVbmRvIGFueSBjb25mbGljdGluZyBvbmVzLi4uICovCisgICAgICAgICAg ICBwdltTTkRfUkVTXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1NORF9GSUxdLml2YWwgPSAw OworICAgICAgICAgICAgYXJyYXl4ID0geDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IFBVVEFSUkFZICovCisKKyAgICAgICAgICBjYXNlIFNORF9CSU46ICAgICAgICAgICAgICAgICAv KiAvQklOQVJZICovCisgICAgICAgICAgY2FzZSBTTkRfVFhUOiAgICAgICAgICAgICAgICAgLyog L1RFWFQgb3IgL0FTQ0lJICovCisgICAgICAgICAgY2FzZSBTTkRfVEVOOiAgICAgICAgICAgICAg ICAgLyogL1RFTkVYICovCisgICAgICAgICAgICBwdltTTkRfQklOXS5pdmFsID0gMDsKKyAgICAg ICAgICAgIHB2W1NORF9UWFRdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbU05EX1RFTl0uaXZh bCA9IDA7CisgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAgICAgICAgICAgIGJyZWFrOwor CisjaWZkZWYgUFVUUElQRQorICAgICAgICAgIGNhc2UgU05EX0NNRDogICAgICAgICAgICAgICAg IC8qIFRoZXNlIHRha2Ugbm8gYXJncyAqLworICAgICAgICAgICAgaWYgKG5vcHVzaCkgeworICAg ICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBzeXN0ZW0gY29tbWFuZCBhY2Nlc3MgaXMgZGlz YWJsZWRcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3Rv IHhwdXR4OworICAgICAgICAgICAgfQorI2lmZGVmIFBJUEVTRU5ECisgICAgICAgICAgICBlbHNl IGlmIChzbmRmaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgbm8gUFVU IC9DT01NQU5EIHdoZW4gU0VORCBGSUxURVIgc2VsZWN0ZWRcbiIpOworICAgICAgICAgICAgICAg IHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIFBJUEVTRU5EICovCisgICAgICAgICAgICBzdy5obHBtc2cgPSAiQ29tbWFuZCwgb3Ig c3dpdGNoIjsgLyogQ2hhbmdlIGhlbHAgbWVzc2FnZSAqLworICAgICAgICAgICAgcHZbbl0uaXZh bCA9IDE7ICAgICAgICAgICAgIC8qIEp1c3Qgc2V0IHRoZSBmbGFnICovCisgICAgICAgICAgICBw dltTTkRfQVJSXS5pdmFsID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFBVVFBJ UEUgKi8KKworI2lmZGVmIENLU1lNTElOSworICAgICAgICAgIGNhc2UgU05EX0xOSzoKKyAgICAg ICAgICAgIG5vbGlua3MgPSAwOworICAgICAgICAgICAgZ290byBhZ2FpbjsJCQkvKiBCZWNhdXNl IENNSUZJIHBhcmFtcyBjaGFuZ2VkLi4uICovCisgICAgICAgICAgY2FzZSBTTkRfTkxLOgorICAg ICAgICAgICAgbm9saW5rcyA9IDI7CisgICAgICAgICAgICBnb3RvIGFnYWluOworI2VuZGlmIC8q IENLU1lNTElOSyAqLworCisjaWZkZWYgRlRQX1JFU1RBUlQKKyAgICAgICAgICBjYXNlIFNORF9S RVM6ICAgICAgICAgICAgICAgICAvKiAvUkVDT1ZFUiAocmVzZW5kKSAqLworICAgICAgICAgICAg cHZbU05EX0FSUl0uaXZhbCA9IDA7ICAgICAgIC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlLi4uICov CisjZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KKworICAgICAgICAgIGNhc2UgU05EX05PQjoKKyAg ICAgICAgICBjYXNlIFNORF9ERUw6ICAgICAgICAgICAgICAgICAvKiAvREVMRVRFICovCisgICAg ICAgICAgY2FzZSBTTkRfU0hIOiAgICAgICAgICAgICAgICAgLyogL1FVSUVUICovCisgICAgICAg ICAgY2FzZSBTTkRfVVBEOiAgICAgICAgICAgICAgICAgLyogL1VQREFURSAqLworICAgICAgICAg IGNhc2UgU05EX1NJTTogICAgICAgICAgICAgICAgIC8qIC9VUERBVEUgKi8KKyAgICAgICAgICBj YXNlIFNORF9VU046ICAgICAgICAgICAgICAgICAvKiAvVU5JUVVFICovCisgICAgICAgICAgICBw dltuXS5pdmFsID0gMTsgICAgICAgICAgICAgLyogSnVzdCBzZXQgdGhlIGZsYWcgKi8KKyAgICAg ICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTTkRfUkVDOiAgICAgICAgICAgICAgICAg LyogL1JFQ1VSU0lWRSAqLworICAgICAgICAgICAgcmVjdXJzaXZlID0gMjsgICAgICAgICAgICAg IC8qIE11c3QgYmUgc2V0IGJlZm9yZSBjbWlmaSgpICovCisgICAgICAgICAgICB4X3JlY3Vyc2Ug PSAxOworICAgICAgICAgICAgZ290byBhZ2FpbjsJCQkvKiBCZWNhdXNlIENNSUZJIHBhcmFtcyBj aGFuZ2VkLi4uICovCisgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIFVOSVhPUk9TSworICAg ICAgICAgIGNhc2UgU05EX0RPVDogICAgICAgICAgICAgICAgIC8qIC9ET1RGSUxFUyAqLworICAg ICAgICAgICAgbWF0Y2hkb3QgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBTTkRfTk9EOiAgICAgICAgICAgICAgICAgLyogL05PRE9URklMRVMgKi8KKyAgICAgICAgICAg IG1hdGNoZG90ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFVOSVhPUk9TSyAq LworCisgICAgICAgICAgY2FzZSBTTkRfRVJSOiAgICAgICAgICAgICAgICAgLyogL0VSUk9SLUFD VElPTiAqLworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkocW9ycCwyLCIiLCIiLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgcHZbbl0uaXZh bCA9IHg7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU05EX0VYQzogICAg ICAgICAgICAgICAgIC8qIEV4Y2x1ZGVzICovCisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJl YWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhzdHJpbmcp KSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAg ICAgICBwcmludGYoIj9QYXR0ZXJuIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg eCA9IC05OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHhwdXR4Owor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHMpIGlmICghKnMpIHMgPSBOVUxMOworICAg ICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOworICAgICAgICAgICAgaWYgKHB2W25d LnN2YWwpCisgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgICBjYXNlIFNORF9QUk06ICAgICAgICAgICAgICAgICAvKiAvUEVSTUlTU0lP TlMgKi8KKyAgICAgICAgICAgIGlmICghZ2V0dmFsKQorICAgICAgICAgICAgICB4ID0gMTsKKyAg ICAgICAgICAgIGVsc2UgaWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgcHZbU05EX1BSTV0u aXZhbCA9IHg7CisgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIFBJUEVTRU5ECisgICAgICAg ICAgY2FzZSBTTkRfRkxUOiAgICAgICAgICAgICAgICAgLyogL0ZJTFRFUiAqLworICAgICAgICAg ICAgZGVidWcoRjEwMSwiZnRwIHB1dCAvZmlsdGVyIGdldHZhbCIsIiIsZ2V0dmFsKTsKKyAgICAg ICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJG aWx0ZXIgcHJvZ3JhbSB0byBzZW5kIHRocm91Z2giLCIiLCZzLE5VTEwpKSA8IDApIHsKKyAgICAg ICAgICAgICAgICBpZiAoeCA9PSAtMykKKyAgICAgICAgICAgICAgICAgIHMgPSAiIjsKKyAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKCpzKSBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgICAgIHkg PSBzdHJsZW4ocyk7CisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSB7ICAgLyog TWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQgIlx2KC4uLikiICovCisgICAgICAgICAgICAgICAgaWYg KHNbeF0gIT0gJ1xcJykgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHNbeCsxXSA9PSAn dicpIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHggPT0geSkgeworICAg ICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAiP0ZpbHRlciBtdXN0IGNvbnRh aW4gYSByZXBsYWNlbWVudCB2YXJpYWJsZSBmb3IgZmlsZW5hbWUuXG4iCisgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdv dG8geHB1dHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocykgaWYgKCEqcykgcyA9 IE5VTEw7CisgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7CisgICAgICAgICAg ICBpZiAocHZbbl0uc3ZhbCkKKyAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAg ICAgICBicmVhazsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisgICAgICAgICAgY2FzZSBTTkRf TkFNOiAgICAgICAgICAgICAgICAgLyogL0ZJTEVOQU1FUyAqLworICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoZm50YWIsbmZudGFiLCIi LCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhwdXR4Owor ICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIHB1dCAvZmlsZW5hbWVzIiwiIix4KTsKKyAgICAg ICAgICAgIHB2W25dLml2YWwgPSB4OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBj YXNlIFNORF9TTUE6ICAgICAgICAgICAgICAgICAvKiBTbWFsbGVyIC8gbGFyZ2VyIHRoYW4gKi8K KyAgICAgICAgICBjYXNlIFNORF9MQVI6IHsKKwkgICAgICBDS19PRkZfVCB5OworCSAgICAgIGlm ICghZ2V0dmFsKSBicmVhazsKKwkgICAgICBpZiAoKHggPSBjbW51bXcoIlNpemUgaW4gYnl0ZXMi LCIwIiwxMCwmeSx4eHN0cmluZykpIDwgMCkKKwkJZ290byB4cHV0eDsKKwkgICAgICBwdltuXS53 dmFsID0geTsKKwkgICAgICBicmVhazsKKwkgIH0KKyAgICAgICAgICBjYXNlIFNORF9GSUw6ICAg ICAgICAgICAgICAgICAvKiBOYW1lIG9mIGZpbGUgY29udGFpbmluZyBmaWxlbmFtZXMgKi8KKyAg ICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtaWZp KCJOYW1lIG9mIGZpbGUgY29udGFpbmluZyBsaXN0IG9mIGZpbGVuYW1lcyIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiIsJnMsJnkseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAg ICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9GaWxl bmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgICAgIH0gZWxz ZSBpZiAoeSAmJiBpc3dpbGQocykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9XaWxkY2Fy ZHMgbm90IGFsbG93ZWRcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAg ICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHMpIGlmICgh KnMpIHMgPSBOVUxMOworICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOworICAg ICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsKKyAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0g MTsKKyAgICAgICAgICAgICAgICBwdltTTkRfQVJSXS5pdmFsID0gMDsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDA7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBtcHV0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2Fz ZSBTTkRfTU9WOiAgICAgICAgICAgICAgICAgLyogTU9WRSBhZnRlciAqLworICAgICAgICAgIGNh c2UgU05EX1JFTjogICAgICAgICAgICAgICAgIC8qIFJFTkFNRSBhZnRlciAqLworICAgICAgICAg IGNhc2UgU05EX1NSTjogeyAgICAgICAgICAgICAgIC8qIFNFUlZFUi1SRU5BTUUgYWZ0ZXIgKi8K KyAgICAgICAgICAgICAgY2hhciAqIG0gPSAiIjsKKyAgICAgICAgICAgICAgc3dpdGNoIChuKSB7 CisgICAgICAgICAgICAgICAgY2FzZSBTTkRfTU9WOgorICAgICAgICAgICAgICAgICAgbSA9ICJk ZXZpY2UgYW5kL29yIGRpcmVjdG9yeSBmb3Igc291cmNlIGZpbGUgYWZ0ZXIgc2VuZGluZyI7Cisg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNORF9SRU46Cisg ICAgICAgICAgICAgICAgICBtID0gIm5ldyBuYW1lIGZvciBzb3VyY2UgZmlsZSBhZnRlciBzZW5k aW5nIjsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU05E X1NSTjoKKyAgICAgICAgICAgICAgICAgIG0gPSAibmV3IG5hbWUgZm9yIGRlc3RpbmF0aW9uIGZp bGUgYWZ0ZXIgc2VuZGluZyI7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICAgIGlm ICgoeCA9IGNtZmxkKG0sICIiLCAmcywgbiA9PSBTTkRfTU9WID8geHhzdHJpbmcgOiBOVUxMKSkg PCAwKSB7CisgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiJXNcbiIsIG4gPT0gU05EX01PViA/CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICI/RGVzdGluYXRpb24gcmVxdWlyZWQiIDoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIj9OZXcgbmFtZSByZXF1aXJlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgIGlmIChzKSBpZiAoISpzKSBzID0gTlVMTDsKKyAgICAgICAgICAgICAgbWFrZXN0cigm KHB2W25dLnN2YWwpLHMgPyBicnN0cmlwKHMpIDogTlVMTCk7CisgICAgICAgICAgICAgIHB2W25d Lml2YWwgPSAocHZbbl0uc3ZhbCkgPyAxIDogMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgfQorICAgICAgICAgIGNhc2UgU05EX1NUQTogICAgICAgICAgICAgICAgIC8qIFN0YXJ0 aW5nIHBvc2l0aW9uICg9IFBTRU5EKSAqLworICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFr OworICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIjAtYmFzZWQgcG9zaXRpb24iLCIwIiwxMCwm eSx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgICAg IHB2W25dLml2YWwgPSB5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNO RF9UWVA6ICAgICAgICAgICAgICAgICAvKiAvVFlQRSAqLworICAgICAgICAgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodHh0YmluLDMsIiIsImFsbCIs eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICBw dltuXS5pdmFsID0gKHggPT0gMikgPyAtMSA6IHg7CisgICAgICAgICAgICBicmVhazsKKworI2lm bmRlZiBOT0NTRVRTCisgICAgICAgICAgY2FzZSBTTkRfQ1NMOiAgICAgICAgICAgICAgICAgLyog TG9jYWwgY2hhcmFjdGVyIHNldCAqLworICAgICAgICAgIGNhc2UgU05EX0NTUjogICAgICAgICAg ICAgICAgIC8qIFJlbW90ZSAoc2VydmVyKSBjaGFyc2V0ICovCisgICAgICAgICAgICBpZiAoKHgg PSBjbWtleShmY3N0YWIsbmZpbGMsIiIsIiIseHhzdHJpbmcpKSA8IDApIHsKKwkJcmV0dXJuKCh4 ID09IC0zKSA/IC0yIDogeCk7CisgICAgICAgICAgICB9CisJICAgIGlmIChuID09IFNORF9DU0wp CisgICAgICAgICAgICAgIHhfY3NsID0geDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgeF9jc3IgPSB4OworICAgICAgICAgICAgeF94bGEgPSAxOyAgICAgICAgICAgICAgICAgIC8q IE92ZXJyaWRlcyBnbG9iYWwgT0ZGIHNldHRpbmcgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgICAgY2FzZSBTTkRfWFBBOiAgICAgICAgICAgICAgICAgLyogVHJhbnNwYXJlbnQgKi8K KyAgICAgICAgICAgIHhfeGxhID0gMDsKKyAgICAgICAgICAgIHhfY3NyID0gLTE7CisgICAgICAg ICAgICB4X2NzbCA9IC0xOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9DU0VUUyAq LworICAgICAgICB9CisgICAgfQorI2lmZGVmIFBJUEVTRU5ECisgICAgaWYgKHB2W1NORF9SRVNd Lml2YWwgPiAwKSB7IC8qIC9SRUNPVkVSICovCisgICAgICAgIGlmIChzbmRmaWx0ZXIgfHwgcHZb U05EX0ZMVF0uaXZhbCA+IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBubyAvUkVD T1ZFUiBvciAvU1RBUlQgaWYgU0VORCBGSUxURVIgc2VsZWN0ZWRcbiIpOworICAgICAgICAgICAg eCA9IC05OworICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgfQorCWlmIChzZnR0YWJb MF0gPiAwICYmIHNmdHRhYltTRlRfUkVTVF0gPT0gMCkKKwkgIHByaW50ZigiV0FSTklORzogU2Vy dmVyIHNheXMgaXQgZG9lc24ndCBzdXBwb3J0IFJFU1QuXG4iKTsKKyAgICB9CisjZW5kaWYgLyog UElQRVNFTkQgKi8KKworICAgIGNtYXJnID0gIiI7CisgICAgY21hcmcyID0gYXNuYW1idWY7Cisg ICAgbGluZVswXSA9IE5VTDsKKyAgICBzID0gbGluZTsKKyAgICB3aWxkID0gMDsKKworICAgIHN3 aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsgICAgICAgICAgIC8qIEhvdyBkaWQgd2UgZ2V0IG91dCBv ZiBzd2l0Y2ggbG9vcCAqLworICAgICAgY2FzZSBfQ01JRkk6ICAgICAgICAgICAgICAgICAgICAg IC8qIElucHV0IGZpbGVuYW1lICovCisgICAgICAgIGlmIChwdltTTkRfRklMXS5pdmFsID4gMCkg eworICAgICAgICAgICAgcHJpbnRmKCI/WW91IG1heSBub3QgZ2l2ZSBhIFBVVCBmaWxlc3BlYyBh bmQgYSAvTElTVEZJTEVcbiIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290 byB4cHV0eDsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVz dWx0LExJTkJVRlNJWik7IC8qIE5hbWUgKi8KKyAgICAgICAgaWYgKHB2W1NORF9BUlJdLml2YWwg PiAwKQorICAgICAgICAgIGNrc3RybmNweShhc25hbWJ1ZixsaW5lLENLTUFYUEFUSCk7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICB3aWxkID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAvKiBXaWxk IGZsYWcgKi8KKyAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCB3aWxkIixsaW5lLHdpbGQpOwor ICAgICAgICBpZiAoIXdpbGQgJiYgIXJlY3Vyc2l2ZSAmJiAhbXB1dCkKKyAgICAgICAgICBub2xp bmtzID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIF9DTUZMRDogICAgICAgICAgICAg ICAgICAgICAgLyogRmllbGQgKi8KKyAgICAgICAgLyogT25seSBhbGxvd2VkIHdpdGggL0NPTU1B TkQgYW5kIC9BUlJBWSAqLworICAgICAgICBpZiAocHZbU05EX0ZJTF0uaXZhbCA+IDApIHsKKyAg ICAgICAgICAgIHByaW50ZigiP1lvdSBtYXkgbm90IGdpdmUgYSBQVVQgZmlsZXNwZWMgYW5kIGEg L0xJU1RGSUxFXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geHB1 dHg7CisgICAgICAgIH0KKwkvKiBGb3IgTVBVVCBpdCdzIE9LIHRvIGhhdmUgZmlsZXNwZWNzIHRo YXQgZG9uJ3QgbWF0Y2ggYW55IGZpbGVzICovCisJaWYgKG1wdXQpCisJICBicmVhazsKKyAgICAg ICAgaWYgKHB2W1NORF9DTURdLml2YWwgPCAxICYmIHB2W1NORF9BUlJdLml2YWwgPCAxKSB7Cisj aWZkZWYgQ0tST09UCisgICAgICAgICAgICBpZiAoY2tyb290ZXJyKQorICAgICAgICAgICAgICBw cmludGYoIj9PZmYgbGltaXRzOiAlc1xuIixjbXJlc3VsdC5zcmVzdWx0KTsKKyAgICAgICAgICAg IGVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAgICAgICAgICAgICAgcHJpbnRmKCI/JXMgLSBc IiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgaXN3aWxkKGNtcmVzdWx0LnNyZXN1bHQpID8K KyAgICAgICAgICAgICAgICAgICAiTm8gZmlsZXMgbWF0Y2giIDogIkZpbGUgbm90IGZvdW5kIiwK KyAgICAgICAgICAgICAgICAgICBjbXJlc3VsdC5zcmVzdWx0CisgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAg IH0KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOwor ICAgICAgICBpZiAocHZbU05EX0FSUl0uaXZhbCA+IDApCisgICAgICAgICAgY2tzdHJuY3B5KGFz bmFtYnVmLGxpbmUsQ0tNQVhQQVRIKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIF9DTUNG TTogICAgICAgICAgICAgICAgICAgICAgLyogQ29uZmlybWF0aW9uICovCisgICAgICAgIGNvbmZp cm1lZCA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRm KCI/VW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7CisgICAg ICAgIHggPSAtOTsKKyAgICAgICAgZ290byB4cHV0eDsKKyAgICB9CisgICAgZGVidWcoRjExMCwi ZnRwIHB1dCBzdHJpbmciLHMsMCk7CisgICAgZGVidWcoRjEwMSwiZnRwIHB1dCBjb25maXJtZWQi LCIiLGNvbmZpcm1lZCk7CisKKyAgICAvKiBTYXZlIGFuZCBjaGFuZ2UgcHJvdG9jb2wgYW5kIHRy YW5zZmVyIG1vZGUgKi8KKyAgICAvKiBHbG9iYWwgdmFsdWVzIGFyZSByZXN0b3JlZCBpbiBtYWlu IHBhcnNlIGxvb3AgKi8KKworICAgIGdfZGlzcGxhID0gZmRpc3BsYTsKKyAgICBpZiAoZnRwX2Rp cyA+IC0xKQorICAgICAgZmRpc3BsYSA9IGZ0cF9kaXM7CisgICAgZ19za2lwYnVwID0gc2tpcGJ1 cDsKKworICAgIGlmIChwdltTTkRfTk9CXS5pdmFsID4gLTEpIHsgICAgICAgIC8qIC9OT0JBQ0tV UCAoc2tpcCBiYWNrdXAgZmlsZSkgKi8KKyAgICAgICAgZ19za2lwYnVwID0gc2tpcGJ1cDsKKyAg ICAgICAgc2tpcGJ1cCA9IDE7CisgICAgfQorICAgIGlmIChwdltTTkRfVFlQXS5pdmFsID4gLTEp IHsgICAgICAgIC8qIC9UWVBFICovCisgICAgICAgIHhmaWxldHlwZSA9IHB2W1NORF9UWVBdLml2 YWw7CisgICAgICAgIGlmICh4ZmlsZXR5cGUgPT0gMikKKyAgICAgICAgICB4ZmlsZXR5cGUgPSAt MTsKKyAgICB9CisgICAgaWYgKHB2W1NORF9CSU5dLml2YWwgPiAwKSB7ICAgICAgICAgLyogL0JJ TkFSWSByZWFsbHkgbWVhbnMgYmluYXJ5Li4uICovCisgICAgICAgIGZvcmNldHlwZSA9IDE7ICAg ICAgICAgICAgICAgICAgLyogU28gc2tpcCBmaWxlIHNjYW4gKi8KKyAgICAgICAgZnRwX3R5cCA9 IEZUVF9CSU47ICAgICAgICAgICAgICAvKiBTZXQgYmluYXJ5ICovCisgICAgfSBlbHNlIGlmIChw dltTTkRfVFhUXS5pdmFsID4gMCkgeyAgLyogU2ltaWxhcmx5IGZvciAvVEVYVC4uLiAqLworICAg ICAgICBmb3JjZXR5cGUgPSAxOworICAgICAgICBmdHBfdHlwID0gRlRUX0FTQzsKKyAgICB9IGVs c2UgaWYgKHB2W1NORF9URU5dLml2YWwgPiAwKSB7ICAvKiBhbmQgL1RFTkVYKi8KKyAgICAgICAg Zm9yY2V0eXBlID0gMTsKKyAgICAgICAgZnRwX3R5cCA9IEZUVF9URU47CisgICAgfSBlbHNlIGlm IChmdHBfY21kbGluICYmIGZ0cF94ZmVybW9kZSA9PSBYTU9ERV9NKSB7CisgICAgICAgIGZvcmNl dHlwZSA9IDE7CisgICAgICAgIGZ0cF90eXAgPSBiaW5hcnk7CisgICAgICAgIGdfZnRwX3R5cCA9 IGJpbmFyeTsKKyAgICB9CisKKyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChwdltTTkRfQ01EXS5p dmFsID4gMCkgeyAgICAgICAgIC8qIC9DT01NQU5EIC0gc3RyaXAgYW55IGJyYWNlcyAqLworICAg ICAgICBkZWJ1ZyhGMTEwLCJQVVQgL0NPTU1BTkQgYmVmb3JlIHN0cmlwcGluZyIscywwKTsKKyAg ICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgIGRlYnVnKEYxMTAsIlBVVCAvQ09NTUFORCBh ZnRlciBzdHJpcHBpbmciLHMsMCk7CisgICAgICAgIGlmICghKnMpIHsKKyAgICAgICAgICAgIHBy aW50ZigiP1NvcnJ5LCBhIGNvbW1hbmQgdG8gc2VuZCBmcm9tIGlzIHJlcXVpcmVkXG4iKTsKKyAg ICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgIH0KKyAg ICAgICAgY21hcmcgPSBzOworICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisvKiBTZXQg dXAgL01PVkUgYW5kIC9SRU5BTUUgKi8KKworICAgIGlmIChwdltTTkRfREVMXS5pdmFsID4gMCAm JgorICAgICAgICAocHZbU05EX01PVl0uaXZhbCA+IDAgfHwgcHZbU05EX1JFTl0uaXZhbCA+IDAp KSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCAvREVMRVRFIGNvbmZsaWN0cyB3aXRoIC9NT1ZF IG9yIC9SRU5BTUVcbiIpOworICAgICAgICB4ID0gLTk7CisgICAgICAgIGdvdG8geHB1dHg7Cisg ICAgfQorI2lmZGVmIENLX1RNUERJUgorICAgIGlmIChwdltTTkRfTU9WXS5pdmFsID4gMCkgewor ICAgICAgICBpbnQgbGVuOworICAgICAgICBjaGFyICogcCA9IHB2W1NORF9NT1ZdLnN2YWw7Cisg ICAgICAgIGxlbiA9IHN0cmxlbihwKTsKKyAgICAgICAgaWYgKCFpc2RpcihwKSkgeyAgICAgICAg ICAgICAgICAvKiBDaGVjayBkaXJlY3RvcnkgKi8KKyNpZmRlZiBDS19NS0RJUgorICAgICAgICAg ICAgY2hhciAqIHMgPSBOVUxMOworICAgICAgICAgICAgcyA9IChjaGFyICopbWFsbG9jKGxlbiAr IDQpOworICAgICAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICAgICAgICBzdHJjcHkocyxwKTsg ICAgICAgICAgICAvKiBzYWZlICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgICAgICAg ICBpZiAoc1tsZW4tMV0gIT0gJzonKSB7IHNbbGVuKytdID0gJzonOyBzW2xlbl0gPSBOVUw7IH0K KyNlbHNlCisgICAgICAgICAgICAgICAgaWYgKHNbbGVuLTFdICE9ICcvJykgeyBzW2xlbisrXSA9 ICcvJzsgc1tsZW5dID0gTlVMOyB9CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICAgICAg ICAgICAgICBzW2xlbisrXSA9ICdYJzsKKyAgICAgICAgICAgICAgICBzW2xlbl0gPSBOVUw7Cisj aWZkZWYgTk9NS0RJUgorICAgICAgICAgICAgICAgIHggPSAtMTsKKyNlbHNlCisgICAgICAgICAg ICAgICAgeCA9IHpta2RpcihzKTsKKyNlbmRpZiAvKiBOT01LRElSICovCisgICAgICAgICAgICAg ICAgZnJlZShzKTsKKyAgICAgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/Q2FuJ3QgY3JlYXRlIFwiJXNcIlxuIixwKTsKKyAgICAgICAgICAgICAg ICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBwcmludGYoIj9EaXJl Y3RvcnkgXCIlc1wiIG5vdCBmb3VuZFxuIixwKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAg ICAgICAgIGdvdG8geHB1dHg7CisjZW5kaWYgLyogQ0tfTUtESVIgKi8KKyAgICAgICAgfQorICAg ICAgICBtYWtlc3RyKCZzbmRfbW92ZSxwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfVE1QRElSICov CisKKyAgICBpZiAocHZbU05EX1JFTl0uaXZhbCA+IDApIHsgICAgICAgICAvKiAvUkVOQU1FICov CisgICAgICAgIGNoYXIgKiBwID0gcHZbU05EX1JFTl0uc3ZhbDsKKyAgICAgICAgaWYgKCFwKSBw ID0gIiI7CisgICAgICAgIGlmICghKnApIHsKKyAgICAgICAgICAgIHByaW50ZigiP05ldyBuYW1l IHJlcXVpcmVkIGZvciAvUkVOQU1FXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAg ICAgIGdvdG8geHB1dHg7CisgICAgICAgIH0KKyAgICAgICAgcCA9IGJyc3RyaXAocCk7CisjaWZu ZGVmIE5PU1BMCisgICAgLyogSWYgbmFtZSBnaXZlbiBpcyB3aWxkLCByZW5hbWUgc3RyaW5nIG11 c3QgY29udGFpbiB2YXJpYWJsZXMgKi8KKyAgICAgICAgaWYgKHdpbGQpIHsKKyAgICAgICAgICAg IGNoYXIgKiBzID0gdG1wYnVmOworICAgICAgICAgICAgeCA9IFRNUEJVRlNJWjsKKyAgICAgICAg ICAgIHp6c3RyaW5nKHAsJnMsJngpOworICAgICAgICAgICAgaWYgKCFzdHJjbXAodG1wYnVmLHAp KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICI/L1JFTkFNRSBmb3IgZmlsZSBncm91 cCBtdXN0IGNvbnRhaW4gdmFyaWFibGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1lKVxuIgorICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAg ICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9T UEwgKi8KKyAgICAgICAgbWFrZXN0cigmc25kX3JlbmFtZSxwKTsKKyAgICAgICAgZGVidWcoRjEx MCwiRlRQIHNuZF9yZW5hbWUiLHNuZF9yZW5hbWUsMCk7CisgICAgfQorICAgIGlmIChwdltTTkRf U1JOXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9TRVJWRVItUkVOQU1FICovCisgICAgICAgIGNo YXIgKiBwID0gcHZbU05EX1NSTl0uc3ZhbDsKKyAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAg ICAgIGlmICghKnApIHsKKyAgICAgICAgICAgIHByaW50ZigiP05ldyBuYW1lIHJlcXVpcmVkIGZv ciAvU0VSVkVSLVJFTkFNRVxuIik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBn b3RvIHhwdXR4OworICAgICAgICB9CisgICAgICAgIHAgPSBicnN0cmlwKHApOworI2lmbmRlZiBO T1NQTAorICAgICAgICBpZiAod2lsZCkgeworICAgICAgICAgICAgY2hhciAqIHMgPSB0bXBidWY7 CisgICAgICAgICAgICB4ID0gVE1QQlVGU0laOworICAgICAgICAgICAgenpzdHJpbmcocCwmcywm eCk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcCh0bXBidWYscCkpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoCisiPy9TRVJWRVItUkVOQU1FIGZvciBmaWxlIGdyb3VwIG11c3QgY29udGFpbiB2 YXJpYWJsZXMgc3VjaCBhcyBcXHYoZmlsZW5hbWUpXG4iCisgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICBt YWtlc3RyKCZzcnZfcmVuYW0scCk7CisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgc3J2X3Jl bmFtIixzcnZfcmVuYW0sMCk7CisgICAgfQorICAgIGlmICghY29uZmlybWVkKSB7ICAgICAgICAg ICAgICAgICAgIC8qIENSIG5vdCB0eXBlZCB5ZXQsIGdldCBtb3JlIGZpZWxkcyAqLworICAgICAg ICBjaGFyICogbHA7CisgICAgICAgIGlmIChtcHV0KSB7ICAgICAgICAgICAgICAgICAgICAgLyog TVBVVCBvciBNTU9WRSAqLworICAgICAgICAgICAgbmZpbHMgPSAwOyAgICAgICAgICAgICAgICAg IC8qIFdlIGFscmVhZHkgaGF2ZSB0aGUgZmlyc3Qgb25lICovCisjaWZuZGVmIE5PTVNFTkQKKwkg ICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUlGSSkgeworCQkvKiBGaXJzdCBmaWxlc3BlYyBp cyB2YWxpZCAqLworCQltc2ZpbGVzW25maWxzKytdID0gbGluZTsgICAgLyogU3RvcmUgcG9pbnRl ciAqLworCQlscCA9IGxpbmUgKyAoaW50KXN0cmxlbihsaW5lKSArIDE7IC8qIFBvaW50IHBhc3Qg aXQgKi8KKwkJZGVidWcoRjExMSwiZnRwIHB1dCBtcHV0Iixtc2ZpbGVzW25maWxzLTFdLG5maWxz LTEpOworCSAgICB9IGVsc2UgeworCQkvKiBGaXJzdCBmaWxlc3BlYyBtYXRjaGVzIG5vIGZpbGVz ICovCisJCWRlYnVnKEYxMTAsImZ0cCBwdXQgbXB1dCBza2lwcGluZyBmaXJzdCBmaWxlc3BlYyIs CisJCSAgICAgIGNtcmVzdWx0LnNyZXN1bHQsCisJCSAgICAgIDAKKwkJICAgICAgKTsKKwkJbHAg PSBsaW5lOworCSAgICB9CisJICAgIC8qIFBhcnNlIGEgZmlsZXNwZWMsIGEgImZpZWxkIiwgb3Ig Y29uZmlybWF0aW9uICovCisKKwkgICAgY21mZGJpKCZzZiwJCQkvKiAxc3QgRkRCIC0gZmlsZSB0 byBzZW5kICovCisJCSAgIF9DTUlGSSwJCS8qIGZjb2RlICovCisJCSAgICIiLAkJCS8qIGhscG1z ZyAqLworCQkgICAiIiwJCQkvKiBkZWZhdWx0ICovCisJCSAgICIiLAkJCS8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCisJCSAgIG5vbGlua3MgfCB4X3JlY3Vyc2UsCS8qIGFkZHRsIG51bWVyaWMgZGF0 YSAxICovCisJCSAgIDAsCQkJLyogZGlyZmxnIDAgbWVhbnMgIm5vdCBkaXJzIG9ubHkiICovCisJ CSAgIHh4c3RyaW5nLAorCQkgICBOVUxMLAorCQkgICAmZmwKKwkJICAgKTsKKwkgICAgY21mZGJp KCZmbCwJCQkvKiAybmQgRkRCIC0gbG9jYWwgZmlsZXNwZWMgKi8KKwkJICAgX0NNRkxELAkJLyog ZmNvZGUgKi8KKwkJICAgIiIsCQkJLyogaGxwbXNnICovCisJCSAgICIiLAkJCS8qIGRlZmF1bHQg Ki8KKwkJICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJICAgMCwJCQkvKiBhZGR0 bCBudW1lcmljIGRhdGEgMSAqLworCQkgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICov CisJCSAgIHh4c3RyaW5nLAorCQkgICBOVUxMLAorCQkgICAmY20KKwkJICAgKTsKKwkgICAgY21m ZGJpKCZjbSwJCQkvKiAzcmQgRkRCIC0gQ29uZmlybWF0aW9uICovCisJCSAgIF9DTUNGTSwJCS8q IGZjb2RlICovCisJCSAgICIiLAorCQkgICAiIiwKKwkJICAgIiIsCisJCSAgIDAsCisJCSAgIDAs CisJCSAgIE5VTEwsCisJCSAgIE5VTEwsCisJCSAgIE5VTEwKKwkJICAgKTsKKworICAgICAgICAg ICAgd2hpbGUgKCFjb25maXJtZWQpIHsJLyogR2V0IG1vcmUgZmlsZW5hbWVzICovCisJCXggPSBj bWZkYigmc2YpOwkJLyogUGFyc2Ugc29tZXRoaW5nICovCisJCWRlYnVnKEYxMDEsImZ0cCBwdXQg Y21mZGIgQiIsIiIseCk7CisJCWRlYnVnKEYxMDEsImZ0cCBwdXQgZmNvZGUgQiIsIiIsY21yZXN1 bHQuZmNvZGUpOworCQlpZiAoeCA8IDApCQkvKiBFcnJvciAqLworCQkgIGdvdG8geHB1dHg7CQkv KiBvciByZXBhcnNlIG5lZWRlZCAqLworCQlzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7CisJCSAg Y2FzZSBfQ01DRk06CQkvKiBFbmQgb2YgY29tbWFuZCAqLworCQkgICAgY29uZmlybWVkKys7CisJ CSAgICBpZiAobmZpbHMgPCAxKSB7CisJCQlkZWJ1ZyhGMTAwLCJmdHAgcHV0IG1wdXQgbm8gZmls ZXMgbWF0Y2giLCIiLDApOworCQkJcHJpbnRmKCI/Tm8gZmlsZXMgbWF0Y2ggTVBVVCBsaXN0XG4i KTsKKwkJCXggPSAtOTsKKwkJCWdvdG8geHB1dHg7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJ ICBjYXNlIF9DTUZMRDoJCS8qIE5vIG1hdGNoICovCisJCSAgICBkZWJ1ZyhGMTEwLCJmdHAgcHV0 IG1wdXQgc2tpcHBpbmciLGNtcmVzdWx0LnNyZXN1bHQsMCk7CisJCSAgICBjb250aW51ZTsKKwkJ ICBjYXNlIF9DTUlGSToJCS8qIEdvb2QgbWF0Y2ggKi8KKwkJICAgIHMgPSBjbXJlc3VsdC5zcmVz dWx0OworCQkgICAgbXNmaWxlc1tuZmlscysrXSA9IGxwOyAvKiBHb3Qgb25lLCBjb3VudCwgcG9p bnQgdG8gaXQsICovCisJCSAgICBwID0gbHA7CQkgICAvKiByZW1lbWJlciBwb2ludGVyLCAqLwor CQkgICAgd2hpbGUgKCgqbHArKyA9ICpzKyspKSAvKiBhbmQgY29weSBpdCBpbnRvIGJ1ZmZlciAq LworCQkgICAgICBpZiAobHAgPiAobGluZSArIExJTkJVRlNJWikpIHsgLyogQXZvaWQgbWVtb3J5 IGxlYWsgKi8KKwkJCSAgcHJpbnRmKCI/TVBVVCBsaXN0IHRvbyBsb25nXG4iKTsKKwkJCSAgbGlu ZVswXSA9IE5VTDsKKwkJCSAgeCA9IC05OworCQkJICBnb3RvIHhwdXR4OworCQkgICAgICB9CisJ CSAgICBkZWJ1ZyhGMTExLCJmdHAgcHV0IG1wdXQgYWRkaW5nIixtc2ZpbGVzW25maWxzLTFdLG5m aWxzLTEpOworCQkgICAgaWYgKG5maWxzID09IDEpCS8qIFRha2UgY2FyZSBvZiBcdihmaWxlc3Bl YykgKi8KKwkJICAgICAgZnNwZWNbMF0gPSBOVUw7CisjaWZkZWYgWkZOUUZQCisJCSAgICB6Zm5x ZnAocCxUTVBCVUZTSVosdG1wYnVmKTsKKwkJICAgIHAgPSB0bXBidWY7CisjZW5kaWYgLyogWkZO UUZQICovCisJCSAgICBpZiAoKChpbnQpc3RybGVuKGZzcGVjKSArIChpbnQpc3RybGVuKHApICsg MSkgPCBmc3BlY2xlbikgeworCQkJc3RyY2F0KGZzcGVjLHApOyAgICAvKiBzYWZlICovCisJCQlz dHJjYXQoZnNwZWMsIiAiKTsgIC8qIHNhZmUgKi8KKwkJICAgIH0gZWxzZSB7CisjaWZkZWYgQ09N TUVOVAorCQkJcHJpbnRmKCJXQVJOSU5HIC0gXFx2KGZpbGVzcGVjKSBidWZmZXIgb3ZlcmZsb3dc biIpOworI2Vsc2UKKwkJCWRlYnVnKEYxMDEsImRveHB1dCBmaWxlc3BlYyBidWZmZXIgb3ZlcmZs b3ciLCIiLDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJICAgIH0KKwkJfQorCSAgICB9Cisj ZW5kaWYgLyogTk9NU0VORCAqLworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlZ3VsYXIgUFVUICovCisgICAgICAgICAgICBuZmlscyA9IC0xOworICAgICAgICAg ICAgaWYgKCh4ID0gY210eHQod2lsZCA/CisiXG5PcHRpb25hbCBhcy1uYW1lIHRlbXBsYXRlIGNv bnRhaW5pbmcgcmVwbGFjZW1lbnQgdmFyaWFibGVzIFwKK2xpa2UgXFx2KGZpbGVuYW1lKSIgOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9wdGlvbmFsIG5hbWUgdG8gc2VuZCBpdCB3aXRo IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCZwLE5VTEwpKSA8IDApCisgICAgICAg ICAgICAgIGdvdG8geHB1dHg7CisKKyAgICAgICAgICAgIGlmIChwKSBpZiAoISpwKSBwID0gTlVM TDsKKyAgICAgICAgICAgIHAgPSBicnN0cmlwKHApOworCisgICAgICAgICAgICBpZiAocCAmJiAq cCkgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltTTkRfQVNOXS5zdmFsKSxwKTsKKyAg ICAgICAgICAgICAgICBpZiAocHZbU05EX0FTTl0uc3ZhbCkKKyAgICAgICAgICAgICAgICAgIHB2 W1NORF9BU05dLml2YWwgPSAxOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQg L2FzLW5hbWUgMiIscHZbU05EX0FTTl0uc3ZhbCwwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KKyAgICAvKiBTZXQgY21hcmcyIGZyb20gYXMtbmFtZSwgaG93ZXZlciB3ZSBnb3Qg aXQuICovCisKKyAgICBDSEVDS0NPTk4oKTsKKyAgICBpZiAocHZbU05EX0FTTl0uaXZhbCA+IDAg JiYgcHZbU05EX0FTTl0uc3ZhbCAmJiAhYXNuYW1idWZbMF0pIHsKKyAgICAgICAgY2hhciAqIHA7 CisgICAgICAgIHAgPSBicnN0cmlwKHB2W1NORF9BU05dLnN2YWwpOworICAgICAgICBja3N0cm5j cHkoYXNuYW1idWYscCxDS01BWFBBVEgrMSk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImZ0cCBw dXQgYXNuYW1idWYiLGFzbmFtYnVmLDApOworCisgICAgaWYgKHB2W1NORF9GSUxdLml2YWwgPiAw KSB7CisgICAgICAgIGlmIChjb25maXJtZWQpIHsKKyAgICAgICAgICAgIGlmICh6b3BlbmkoWk1G SUxFLHB2W1NORF9GSUxdLnN2YWwpIDwgMSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImZ0cCBwdXQgY2FuJ3Qgb3BlbiIscHZbU05EX0ZJTF0uc3ZhbCwwKTsKKyAgICAgICAgICAgICAg ICBwcmludGYoIj9GYWlsdXJlIHRvIG9wZW4gJXNcbiIscHZbU05EX0ZJTF0uc3ZhbCk7CisgICAg ICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBtYWtlc3RyKCZmaWxlZmlsZSxwdltTTkRfRklMXS5zdmFsKTsg LyogT3BlbiwgcmVtZW1iZXIgbmFtZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIFBV VCAvTElTVEZJTEUgb3BlbmVkIixmaWxlZmlsZSwwKTsKKyAgICAgICAgICAgIHdpbGQgPSAxOwor ICAgICAgICB9CisgICAgfQorICAgIGlmIChjb25maXJtZWQgJiYgIWxpbmVbMF0gJiYgIWZpbGVm aWxlKSB7CisjaWZuZGVmIE5PTVNFTkQKKyAgICAgICAgaWYgKGZpbGVoZWFkKSB7ICAgICAgICAg ICAgICAgICAvKiBPSyBpZiB3ZSBoYXZlIGEgU0VORC1MSVNUICovCisgICAgICAgICAgICBuZmls cyA9IGZpbGVzaW5saXN0OworICAgICAgICAgICAgc25kc3JjID0gbmZpbHM7ICAgICAgICAgICAg IC8qIExpa2UgTVNFTkQgKi8KKyAgICAgICAgICAgIGFkZGxpc3QgPSAxOyAgICAgICAgICAgICAg ICAvKiBCdXQgdXNpbmcgYSBkaWZmZXJlbnQgbGlzdC4uLiAqLworICAgICAgICAgICAgZmlsZW5l eHQgPSBmaWxlaGVhZDsKKyAgICAgICAgICAgIGdvdG8gZG9wdXQ7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBOT01TRU5EICovCisgICAgICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVkIGJ1dCBu b3QgZ2l2ZW5cbiIpOworICAgICAgICB4ID0gLTk7CisgICAgICAgIGdvdG8geHB1dHg7CisgICAg fQorI2lmbmRlZiBOT01TRU5ECisgICAgYWRkbGlzdCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogRG9uJ3QgdXNlIFNFTkQtTElTVC4gKi8KKyNlbmRpZiAvKiBOT01TRU5EICovCisKKyAg ICBpZiAobXB1dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNUFVUIChyYXRoZXIgdGhh biBQVVQpICovCisjaWZuZGVmIE5PTVNFTkQKKyAgICAgICAgY21saXN0ID0gbXNmaWxlczsgICAg ICAgICAgICAgICAvKiBMaXN0IG9mIGZpbGVzcGVjcyAqLworICAgICAgICBzbmRzcmMgPSBuZmls czsgICAgICAgICAgICAgICAgIC8qIHJhdGhlciBmaWxlc3BlYyBhbmQgYXMtbmFtZSAqLworI2Vu ZGlmIC8qIE5PTVNFTkQgKi8KKyAgICAgICAgcGlwZXNlbmQgPSAwOworICAgIH0gZWxzZSBpZiAo ZmlsZWZpbGUpIHsgICAgICAgICAgICAgIC8qIEZpbGUgY29udGFpbnMgbGlzdCBvZiBmaWxlbmFt ZXMgKi8KKyAgICAgICAgcyA9ICIiOworICAgICAgICBjbWFyZyA9ICIiOworICAgICAgICBsaW5l WzBdID0gTlVMOworICAgICAgICBuZmlscyA9IDE7CisgICAgICAgIHNuZHNyYyA9IDE7CisKKyAg ICB9IGVsc2UgaWYgKHB2W1NORF9BUlJdLml2YWwgPCAxICYmIHB2W1NORF9DTURdLml2YWwgPCAx KSB7CisKKyAgICAgICAgLyogTm90IE1TRU5ELCBNTU9WRSwgL0xJU1QsIG9yIC9BUlJBWSAqLwor ICAgICAgICBuZmlscyA9IHNuZHNyYyA9IC0xOworICAgICAgICBpZiAoIXdpbGQpIHsKKyAgICAg ICAgICAgIGlmICh6Y2hraShzKSA8IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9SZWFk IGFjY2VzcyBkZW5pZWQgLSBcIiVzXCJcbiIsIHMpOworICAgICAgICAgICAgICAgIHggPSAtOTsK KyAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGlmIChzICE9IGxpbmUpICAgICAgICAgICAgICAgICAgLyogV2UgbWlnaHQgYWxyZWFk eSBoYXZlIGRvbmUgdGhpcy4gKi8KKyAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7ICAvKiBDb3B5IG9mIHN0cmluZyBqdXN0IHBhcnNlZC4gKi8KKyNpZmRlZiBERUJVRworICAg ICAgICBlbHNlCisgICAgICAgICAgZGVidWcoRjExMCwiZG94cHV0IGxpbmU9cyIsbGluZSwwKTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICBjbWFyZyA9IGxpbmU7ICAgICAgICAgICAgICAg ICAgIC8qIEZpbGUgdG8gc2VuZCAqLworICAgIH0KKyNpZm5kZWYgTk9NU0VORAorICAgIHpmbnFm cChjbWFyZyxmc3BlY2xlbixmc3BlYyk7ICAgICAgIC8qIEdldCBmdWxsIG5hbWUgKi8KKyNlbmRp ZiAvKiBOT01TRU5EICovCisKKyAgICBpZiAoIW1wdXQpIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGb3IgYWxsIGJ1dCBNUFVULi4uICovCisjaWZkZWYgUElQRVNFTkQKKyAgICAgICAgaWYg KHB2W1NORF9DTURdLml2YWwgPiAwKSAgICAgICAvKiAvQ09NTUFORCBzZXRzIHBpcGVzZW5kIGZs YWcgKi8KKyAgICAgICAgICBwaXBlc2VuZCA9IDE7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBw dXQgL0NPTU1BTkQgcGlwZXNlbmQiLCIiLHBpcGVzZW5kKTsKKyAgICAgICAgaWYgKHBpcGVzZW5k ICYmIGZpbGVmaWxlKSB7CisgICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIHN3aXRjaCBjb21i aW5hdGlvblxuIik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhwdXR4 OworICAgICAgICB9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmbmRlZiBOT1NQTAorICAg IC8qIElmIGFzLW5hbWUgZ2l2ZW4gYW5kIGZpbGVzcGVjIGlzIHdpbGQsIGFzLW5hbWUgbXVzdCBj b250YWluIHZhcmlhYmxlcyAqLworICAgICAgICBpZiAoKHdpbGQgfHwgbXB1dCkgJiYgYXNuYW1i dWZbMF0pIHsKKyAgICAgICAgICAgIGNoYXIgKiBzID0gdG1wYnVmOworICAgICAgICAgICAgeCA9 IFRNUEJVRlNJWjsKKyAgICAgICAgICAgIHp6c3RyaW5nKGFzbmFtYnVmLCZzLCZ4KTsKKyAgICAg ICAgICAgIGlmICghc3RyY21wKHRtcGJ1Zixhc25hbWJ1ZikpIHsKKyAgICAgICAgICAgICAgICBw cmludGYoCisgICAgIj9Bcy1uYW1lIGZvciBmaWxlIGdyb3VwIG11c3QgY29udGFpbiB2YXJpYWJs ZXMgc3VjaCBhcyBcXHYoZmlsZW5hbWUpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geHB1dHg7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0KKworICBkb3B1 dDoKKworICAgIGlmIChwdltTTkRfU0hIXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIFNFTkQgL1FV SUVULi4uICovCisgICAgICAgIGZkaXNwbGEgPSAwOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAg cHV0IGRpc3BsYXkiLCIiLGZkaXNwbGEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRpc3BsYSA9 IDE7CisgICAgICAgIGlmIChmdHBfZGViKQorCSAgZmRpc3BsYSA9IFhZRkRfQjsKKyAgICB9CisK KyNpZmRlZiBQVVRBUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRU5EIC9BUlJBWS4u LiAqLworICAgIGlmIChwdltTTkRfQVJSXS5pdmFsID4gMCkgeworICAgICAgICBpZiAoIWFwKSB7 IHggPSAtMjsgZ290byB4cHV0eDsgfSAvKiAoc2hvdWxkbid0IGhhcHBlbikgKi8KKyAgICAgICAg aWYgKHJhbmdlWzBdID09IC0xKSAgICAgICAgICAgICAvKiBJZiBsb3cgZW5kIG9mIHJhbmdlIG5v dCBzcGVjaWZpZWQgKi8KKyAgICAgICAgICByYW5nZVswXSA9IDE7ICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0IHRvIDEgKi8KKyAgICAgICAgaWYgKHJhbmdlWzFdID09IC0xKSAgICAgICAgICAg ICAvKiBJZiBoaWdoIG5vdCBzcGVjaWZpZWQgKi8KKyAgICAgICAgICByYW5nZVsxXSA9IGFfZGlt W2FycmF5eF07ICAgICAvKiBkZWZhdWx0IHRvIHNpemUgb2YgYXJyYXkgKi8KKyAgICAgICAgaWYg KChyYW5nZVswXSA8IDApIHx8ICAgICAgICAgICAvKiBDaGVjayByYW5nZSAqLworICAgICAgICAg ICAgKHJhbmdlWzBdID4gYV9kaW1bYXJyYXl4XSkgfHwKKyAgICAgICAgICAgIChyYW5nZVsxXSA8 IHJhbmdlWzBdKSB8fAorICAgICAgICAgICAgKHJhbmdlWzFdID4gYV9kaW1bYXJyYXl4XSkpIHsK KyAgICAgICAgICAgIHByaW50ZigiP0JhZCBhcnJheSByYW5nZSAtIFslZDolZF1cbiIscmFuZ2Vb MF0scmFuZ2VbMV0pOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4cHV0 eDsKKyAgICAgICAgfQorICAgICAgICBzbmRhcnJheSA9IGFwOyAgICAgICAgICAgICAgICAgIC8q IEFycmF5IHBvaW50ZXIgKi8KKyAgICAgICAgc25keGluID0gYXJyYXl4OyAgICAgICAgICAgICAg ICAvKiBBcnJheSBpbmRleCAqLworICAgICAgICBzbmR4bG8gPSByYW5nZVswXTsgICAgICAgICAg ICAgIC8qIEFycmF5IHJhbmdlICovCisgICAgICAgIHNuZHhoaSA9IHJhbmdlWzFdOworICAgICAg ICBzbmR4bmFtWzddID0gKGNoYXIpKChzbmR4aW4gPT0gMSkgPyA2NCA6IHNuZHhpbiArIEFSUkFZ QkFTRSk7CisgICAgICAgIGlmICghYXNuYW1idWZbMF0pCisgICAgICAgICAgY2tzdHJuY3B5KGFz bmFtYnVmLHNuZHhuYW0sQ0tNQVhQQVRIKTsKKyAgICAgICAgY21hcmcgPSAiIjsKKyAgICB9Cisj ZW5kaWYgLyogUFVUQVJSQVkgKi8KKworICAgIG1vdmluZyA9IDA7CisKKyAgICBpZiAocHZbU05E X0FSUl0uaXZhbCA8IDEpIHsgICAgICAgICAvKiBGaWxlIHNlbGVjdGlvbiAmIGRpc3Bvc2l0aW9u Li4uICovCisgICAgICAgIGlmIChwdltTTkRfREVMXS5pdmFsID4gMCkgICAgICAgLyogL0RFTEVU RSB3YXMgc3BlY2lmaWVkICovCisgICAgICAgICAgbW92aW5nID0gMTsKKyAgICAgICAgaWYgKHB2 W1NORF9BRlRdLml2YWwgPiAwKSAgICAgICAvKiBDb3B5IFNFTkQgY3JpdGVyaWEgKi8KKyAgICAg ICAgICBja3N0cm5jcHkoc25kYWZ0ZXIscHZbU05EX0FGVF0uc3ZhbCwxOSk7CisgICAgICAgIGlm IChwdltTTkRfQkVGXS5pdmFsID4gMCkKKyAgICAgICAgICBja3N0cm5jcHkoc25kYmVmb3JlLHB2 W1NORF9CRUZdLnN2YWwsMTkpOworICAgICAgICBpZiAocHZbU05EX05BRl0uaXZhbCA+IDApCisg ICAgICAgICAgY2tzdHJuY3B5KHNuZG5hZnRlcixwdltTTkRfTkFGXS5zdmFsLDE5KTsKKyAgICAg ICAgaWYgKHB2W1NORF9OQkVdLml2YWwgPiAwKQorICAgICAgICAgIGNrc3RybmNweShzbmRuYmVm b3JlLHB2W1NORF9OQkVdLnN2YWwsMTkpOworICAgICAgICBpZiAocHZbU05EX0VYQ10uaXZhbCA+ IDApCisgICAgICAgICAgbWFrZWxpc3QocHZbU05EX0VYQ10uc3ZhbCxzbmRleGNlcHQsTlNOREVY Q0VQVCk7CisgICAgICAgIGlmIChwdltTTkRfU01BXS5pdmFsID4gLTEpCisgICAgICAgICAgc25k c21hbGxlciA9IHB2W1NORF9TTUFdLnd2YWw7CisgICAgICAgIGlmIChwdltTTkRfTEFSXS5pdmFs ID4gLTEpCisgICAgICAgICAgc25kbGFyZ2VyID0gcHZbU05EX0xBUl0ud3ZhbDsKKyAgICAgICAg aWYgKHB2W1NORF9OQU1dLml2YWwgPiAtMSkKKyAgICAgICAgICB4X2NudiA9IHB2W1NORF9OQU1d Lml2YWw7CisgICAgICAgIGlmIChwdltTTkRfVVNOXS5pdmFsID4gLTEpCisgICAgICAgICAgeF91 c24gPSBwdltTTkRfVVNOXS5pdmFsOworICAgICAgICBpZiAocHZbU05EX0VSUl0uaXZhbCA+IC0x KQorICAgICAgICAgIHB1dGVycm9yID0gcHZbU05EX0VSUl0uaXZhbDsKKworI2lmZGVmIERPVVBE QVRFCisgICAgICAgIGlmIChwdltTTkRfVVBEXS5pdmFsID4gMCkgeworICAgICAgICAgICAgaWYg KHhfdXNuKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29uZmxpY3Rpbmcgc3dpdGNoZXM6 IC9VUERBVEUgL1VOSVFVRVxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg ICAgICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXRmbGFncyB8 PSBQVVRfVVBEOworCSAgICBmdHBfZGF0ZXMgfD0gMjsKKyAgICAgICAgfQorI2lmZGVmIENPTU1F TlQKKwkvKiBUaGlzIHdvcmtzIGJ1dCBpdCdzIHVzZWxlc3MsIG1heWJlIGRhbmdlcm91cyAqLwor ICAgICAgICBpZiAocHZbU05EX0RJRl0uaXZhbCA+IDApIHsKKyAgICAgICAgICAgIGlmICh4X3Vz bikgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0NvbmZsaWN0aW5nIHN3aXRjaGVzOiAvREFU RVMtRElGRkVSIC9VTklRVUVcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAg ICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHV0ZmxhZ3Mg fD0gUFVUX0RJRjsKKwkgICAgZnRwX2RhdGVzIHw9IDI7CisgICAgICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisjZW5kaWYgLyogRE9VUERBVEUgKi8KKworICAgICAgICBpZiAocHZbU05EX1NJ TV0uaXZhbCA+IDApCisgICAgICAgICAgcHV0ZmxhZ3MgfD0gUFVUX1NJTTsKKworICAgICAgICBp ZiAocHZbU05EX1BSTV0uaXZhbCA+IC0xKSB7CisjaWZkZWYgVU5JWAorICAgICAgICAgICAgaWYg KHhfdXNuKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29uZmxpY3Rpbmcgc3dpdGNoZXM6 IC9QRVJNSVNTSU9OUyAvVU5JUVVFXG4iKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAg ICAgICAgICAgICAgZ290byB4cHV0eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHhfcHJt ID0gcHZbU05EX1BSTV0uaXZhbDsKKyNlbHNlIC8qIFVOSVggKi8KKyAgICAgICAgICAgIHByaW50 ZigiPy9QRVJNSVNTSU9OUyBzd2l0Y2ggaXMgbm90IHN1cHBvcnRlZFxuIik7CisjZW5kaWYgLyog VU5JWCAqLworICAgICAgICB9CisjaWZkZWYgRlRQX1JFU1RBUlQKKyAgICAgICAgaWYgKHB2W1NO RF9SRVNdLml2YWwgPiAwKSB7CisJICAgIGlmICghc2l6ZW9rKSB7CisJCXByaW50ZigiP1BVVCAv UkVTVEFSVCBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgU0laRSBkaXNhYmxlZC5cbiIpOworICAgICAg ICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhwdXR4OworCSAgICB9Cisg ICAgICAgICAgICBpZiAoeF91c24gfHwgcHV0ZmxhZ3MpIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIj9Db25mbGljdGluZyBzd2l0Y2hlczogL1JFQ09WRVIgJXNcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgIHhfdXNuICYmIHB1dGZsYWdzID8gIi9VTklRVUUgL1VQREFURSIgOgorICAgICAg ICAgICAgICAgICAgICAgICAoeF91c24gPyAiL1VOSVFVRSIgOiAiL1VQREFURSIpCisgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAg ICAgIGdvdG8geHB1dHg7CisgICAgICAgICAgICB9CisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAg ICAgIGlmICh4X3hsYSAmJgorICAgICAgICAgICAgICAgICh4X2NzbCA9PSBGQ19VQ1MyIHx8Cisg ICAgICAgICAgICAgICAgIHhfY3NsID09IEZDX1VURjggfHwKKyAgICAgICAgICAgICAgICAgeF9j c3IgPT0gRkNfVUNTMiB8fAorICAgICAgICAgICAgICAgICB4X2NzciA9PSBGQ19VVEY4KSkgewor ICAgICAgICAgICAgICAgIHByaW50ZigiPy9SRUNPVkVSIGNhbiBub3QgYmUgdXNlZCB3aXRoIFVu aWNvZGUgdHJhbnNsYXRpb25cbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAg ICAgICAgICBnb3RvIHhwdXR4OworICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8K KyAgICAgICAgICAgIHB1dGZsYWdzID0gUFVUX1JFUzsKKyAgICAgICAgfQorI2VuZGlmIC8qIEZU UF9SRVNUQVJUICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsImZ0cCBQVVQgcmVzdGFydCIsIiIs cHV0ZmxhZ3MgJiBQVVRfUkVTKTsKKyAgICBkZWJ1ZyhGMTAxLCJmdHAgUFVUIHVwZGF0ZSIsIiIs cHV0ZmxhZ3MgJiBQVVRfVVBEKTsKKworI2lmZGVmIFBJUEVTRU5ECisgICAgaWYgKHB2W1NORF9G TFRdLml2YWwgPiAwKSB7ICAgICAgICAgLyogSGF2ZSBTRU5EIEZJTFRFUj8gKi8KKyAgICAgICAg aWYgKCFwdltTTkRfRkxUXS5zdmFsKSB7CisgICAgICAgICAgICBzbmRmaWx0ZXIgPSBOVUxMOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25kZmlsdGVyID0gKGNoYXIgKikgbWFsbG9j KChpbnQpIHN0cmxlbihwdltTTkRfRkxUXS5zdmFsKSArIDEpOworICAgICAgICAgICAgaWYgKHNu ZGZpbHRlcikgc3RyY3B5KHNuZGZpbHRlcixwdltTTkRfRkxUXS5zdmFsKTsgLyogc2FmZSAqLwor ICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBwdXQgL0ZJTFRFUiIsIHNuZGZpbHRl ciwgMCk7CisgICAgfQorICAgIGlmIChzbmRmaWx0ZXIgfHwgcGlwZXNlbmQpICAgICAgICAgIC8q IE5vIC9VUERBVEUgb3IgL1JFU1RBUlQgKi8KKyAgICAgIGlmIChwdXRmbGFncykgICAgICAgICAg ICAgICAgICAgICAvKiB3aXRoIHBpcGVzIG9yIGZpbHRlcnMgKi8KKyAgICAgICAgcHV0ZmxhZ3Mg PSAwOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyAgICB0ZmMgPSAoQ0tfT0ZGX1QpMDsJCQkv KiBJbml0aWFsaXplIHN0YXRzIGFuZCBjb3VudGVycyAqLworICAgIGZpbGNudCA9IDA7CisgICAg cGt0bnVtID0gMDsKKyAgICBzcGFja2V0cyA9IDBMOworCisgICAgaWYgKHdpbGQpICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogKGlzIHRoaXMgbmVjZXNzYXJ5PykgKi8KKyAgICAgIGN4ID0g RlRQX01QVTsKKworICAgIHQwID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgICAgIC8qIFJl Y29yZCBzdGFydGluZyB0aW1lICovCisKKyAgICBkb25lID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBMb29wIGNvbnRyb2wgKi8KKyAgICBjYW5jZWxncm91cCA9IDA7CisKKyAgICBj ZGxldmVsID0gMDsKKyAgICBjZHNpbWx2bCA9IDA7CisgICAgd2hpbGUgKCFkb25lICYmICFjYW5j ZWxncm91cCkgeyAgICAgLyogTG9vcCBmb3IgYWxsIGZpbGVzICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgdW50aWwgY2FuY2VsZWQuICovCisjaWZkZWYg RlRQX1BST1hZCisgICAgICAgIC8qCisgICAgICAgICAgIElmIHdlIGFyZSB1c2luZyBhIHByb3h5 LCB3ZSBkb24ndCB1c2UgdGhlIGxvY2FsIGZpbGUgbGlzdDsKKyAgICAgICAgICAgaW5zdGVhZCB3 ZSB1c2UgdGhlIGxpc3Qgb24gdGhlIHJlbW90ZSBtYWNoaW5lIHdoaWNoIHdlIHdhbnQKKyAgICAg ICAgICAgc2VudCB0byBzb21lb25lIGVsc2UsIGFuZCB3ZSB1c2UgcmVtZ2xvYigpIHRvIGdldCB0 aGUgbmFtZXMuCisgICAgICAgICAgIEJ1dCBpbiB0aGF0IGNhc2Ugd2Ugc2hvdWxkbid0IGV2ZW4g YmUgZXhlY3V0aW5nIHRoaXMgcm91dGluZTsKKyAgICAgICAgICAgc2VlIGZ0cF9tcHV0KCkuCisg ICAgICAgICovCisjZW5kaWYgLyogRlRQX1BST1hZICovCisKKyAgICAgICAgY2FuY2VsZmlsZSA9 IDA7CisgICAgICAgIHggPSBnbmZpbGUoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IG5leHQg ZmlsZSBmcm9tIGxpc3QocykgKi8KKworICAgICAgICBpZiAoeCA9PSAwKSAgICAgICAgICAgICAg ICAgICAgIC8qIChzZWUgZ25maWxlKCkgY29tbWVudHMuLi4pICovCisgICAgICAgICAgeCA9IGdu ZmVycm9yOworICAgICAgICBkZWJ1ZyhGMTExLCJGVFAgUFVUIGduZmlsZSIsZmlsbmFtLHgpOwor ICAgICAgICBkZWJ1ZyhGMTExLCJGVFAgUFVUIGJpbmFyeSIsZmlsbmFtLGJpbmFyeSk7CisKKyAg ICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZSB0byBzZW5kICovCisgICAgICAgICAgICBzMiA9IGFzbmFtYnVmOworI2lmbmRl ZiBOT1NQTAorICAgICAgICAgICAgaWYgKGFzbmFtYnVmWzBdKSB7ICAgICAgICAgIC8qIEFzLW5h bWUgKi8KKyAgICAgICAgICAgICAgICBpbnQgbjsgY2hhciAqcDsgICAgICAgICAvKiB0byBiZSBl dmFsdWF0ZWQuLi4gKi8KKyAgICAgICAgICAgICAgICBuID0gVE1QQlVGU0laOworICAgICAgICAg ICAgICAgIHAgPSB0bXBidWY7CisgICAgICAgICAgICAgICAgenpzdHJpbmcoYXNuYW1idWYsJnAs Jm4pOworICAgICAgICAgICAgICAgIHMyID0gdG1wYnVmOworICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsImZ0cCBwdXQgYXNuYW1lIixzMiwwKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBO T1NQTCAqLworICAgICAgICAgICAgcmMgPSBwdXRmaWxlKGN4LCAgICAgICAgICAgIC8qIEZ1bmN0 aW9uIChQVVQsIEFQUEVORCkgKi8KKyAgICAgICAgICAgICAgICAgICAgZmlsbmFtLCBzMiwgICAg ICAgICAvKiBOYW1lIHRvIHNlbmQsIGFzLW5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9y Y2V0eXBlLCBtb3ZpbmcsICAvKiBQYXJhbWV0ZXJzIGZyb20gc3dpdGNoZXMuLi4gKi8KKyAgICAg ICAgICAgICAgICAgICAgc25kX21vdmUsIHNuZF9yZW5hbWUsIHNydl9yZW5hbSwKKyAgICAgICAg ICAgICAgICAgICAgeF9jbnYsIHhfdXNuLCB4ZmlsZXR5cGUsIHhfcHJtLAorI2lmbmRlZiBOT0NT RVRTCisgICAgICAgICAgICAgICAgICAgIHhfY3NsLCAoIXhfeGxhID8gLTEgOiB4X2NzciksCisj ZWxzZQorICAgICAgICAgICAgICAgICAgICAtMSwgLTEsCisjZW5kaWYgLyogTk9DU0VUUyAqLwor ICAgICAgICAgICAgICAgICAgICBwdXRmbGFncworICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBwdXRmaWxlIHJjIixmaWxuYW0scmMpOworICAg ICAgICAgICAgZGVidWcoRjExMSwiZnRwIHB1dCBwdXRmaWxlIGNhbmNlbGZpbGUiLGZpbG5hbSxj YW5jZWxmaWxlKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBwdXQgcHV0ZmlsZSBjYW5j ZWxncm91cCIsZmlsbmFtLGNhbmNlbGdyb3VwKTsKKyAgICAgICAgICAgIGlmIChyYyA+IC0xKSB7 CisgICAgICAgICAgICAgICAgZ29vZCsrOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IDE7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2FuY2VsZmlsZSkKKyAgICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgZnRw X2ZhaSsrOworICAgICAgICAgICAgICAgIGlmIChwdXRlcnJvcikgeworICAgICAgICAgICAgICAg ICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9GYXRhbCB1cGxv YWQgZXJyb3I6ICVzXG4iLGZpbG5hbSk7CisgICAgICAgICAgICAgICAgICAgIGRvbmUrKzsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLCBk b25lICovCisgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgICBjYXNlIC0xOgorICAgICAgICAgICAgcHJpbnRmKCI/JXM6IGZpbGUgbm90IGZvdW5kIC0g XCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgIHB1dGVycm9yID8gIkZhdGFsIiA6ICJXYXJu aW5nIiwKKyAgICAgICAgICAgICAgICAgICBmaWxuYW0KKyAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgaWYgKHB1dGVycm9yKSB7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsK KyAgICAgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBjYXNlIC0yOgorICAgICAg ICAgICAgaWYgKHB1dGVycm9yKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/RmF0YWw6IGZp bGUgbm90IGZvdW5kIC0gXCIlc1wiXG4iLCBmaWxuYW0pOworICAgICAgICAgICAgICAgIHN0YXR1 cyA9IDA7CisgICAgICAgICAgICAgICAgZG9uZSsrOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgIC8q IE5vdCByZWFkYWJsZSwga2VlcCBnb2luZyAqLworICAgICAgICAgIGNhc2UgLTM6CisgICAgICAg ICAgICBpZiAocHV0ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9GYXRhbDogUmVh ZCBhY2Nlc3MgZGVuaWVkIC0gXCIlc1wiXG4iLCBmaWxuYW0pOworICAgICAgICAgICAgICAgIHN0 YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgZG9uZSsrOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCI/V2FybmluZyBhY2Nlc3MgZGVu aWVkIC0gXCIlc1wiXG4iLCBmaWxuYW0pOworICAgICAgICAgICAgY29udGludWU7CisjaWZkZWYg Q09NTUVOVAorICAgICAgICAgIGNhc2UgLTQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIENhbmNl bGVkICovCisgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgICAgICAgY2FzZSAtNToKKyAgICAgICAgICAgIHByaW50ZigiP1Rv byBtYW55IGZpbGVzIG1hdGNoXG4iKTsKKyAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgLTY6CisgICAgICAgICAgICBpZiAoZ29vZCA8IDEpCisg ICAgICAgICAgICAgIHByaW50ZigiP05vIGZpbGVzIHNlbGVjdGVkXG4iKTsKKyAgICAgICAgICAg IGRvbmUrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICBwcmludGYoIj9nZXRuZXh0ZmlsZSgpIC0gdW5rbm93biBmYWlsdXJlXG4iKTsKKyAgICAg ICAgICAgIGRvbmUrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY2RsZXZlbCA+IDApIHsK KyAgICAgICAgd2hpbGUgKGNkbGV2ZWwtLSkgeworICAgICAgICAgICAgaWYgKGNkc2ltbHZsKSB7 CisgICAgICAgICAgICAgICAgY2RzaW1sdmwtLTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRv ZnRwY2R1cCgpKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoc3RhdHVzID4gMCkgeworICAgICAgICBpZiAoY2FuY2VsZ3JvdXApCisgICAgICAgICAgc3Rh dHVzID0gMDsKKyAgICAgICAgZWxzZSBpZiAoY2FuY2VsZmlsZSAmJiBnb29kIDwgMSkKKyAgICAg ICAgICBzdGF0dXMgPSAwOworICAgIH0KKyAgICBzdWNjZXNzID0gc3RhdHVzOworICAgIHggPSBz dWNjZXNzOworCisgIHhwdXR4OgorICAgIGlmICh4ID4gLTEpIHsKKyNpZmRlZiBHRlRJTUVSCisg ICAgICAgIHQxID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgLyogRW5kIHRpbWUgKi8KKyAg ICAgICAgc2VjID0gKENLRkxPQVQpKChDS0ZMT0FUKSh0MSAtIHQwKSAvIDEwMDAuMCk7IC8qIFN0 YXRzICovCisgICAgICAgIGlmICghc2VjKSBzZWMgPSAwLjAwMTsKKyAgICAgICAgZnB0c2VjcyA9 IHNlYzsKKyNlbHNlCisgICAgICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7CisgICAgICAgIGlm ICghc2VjKSBzZWMgPSAxOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgdGZjcHMgPSAo bG9uZykgKHRmYyAvIHNlYyk7CisgICAgICAgIHRzZWNzID0gKGludClzZWM7CisgICAgICAgIGxh c3R4ZmVyID0gV19GVFB8V19TRU5EOworICAgICAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7CisgICAg ICAgIGlmIChkcHlhY3RpdmUpCisJICBmdHNjcmVlbihzdGF0dXMgPiAwID8gU0NSX1RDIDogU0NS X0NXLCAwLCAoQ0tfT0ZGX1QpMCwgIiIpOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDw9IFNO RF9NQVg7IGkrKykgeyAgICAvKiBGcmVlIG1hbGxvYydkIG1lbW9yeSAqLworICAgICAgICBpZiAo cHZbaV0uc3ZhbCkKKyAgICAgICAgICBmcmVlKHB2W2ldLnN2YWwpOworICAgIH0KKyAgICBmdHJl c2V0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRvIHN3aXRjaCBlZmZlY3RzICov CisgICAgZHB5YWN0aXZlID0gMDsKKyAgICByZXR1cm4oeCk7Cit9CisKKworc3RhdGljIGNoYXIg KiogbWdldGxpc3QgPSBOVUxMOyAgICAgICAgIC8qIEZvciBNR0VUICovCitzdGF0aWMgaW50IG1n ZXRuID0gMCwgbWdldHggPSAwOworc3RhdGljIGNoYXIgeHRtcGJ1Zls0MDk2XTsKKworLyoKKyAg YyBtIGQgbCBpIG4gZyBlIHQKKworICBHZXQgZmlsZXMgc3BlY2lmaWVkIGJ5IC1nIGNvbW1hbmQt bGluZSBvcHRpb24uCisgIEZpbGUgbGlzdCBpcyBzZXQgdXAgaW4gY21saXN0W10gYnkgY2t1dXN5 LmM7IG5maWxzIGlzIGxlbmd0aCBvZiBsaXN0LgorKi8KK2ludAorY21kbGluZ2V0KHN0YXkpIGlu dCBzdGF5OyB7CisgICAgaW50IGksIHgsIHJjID0gMCwgZG9uZSA9IDAsIGdvb2QgPSAwLCBzdGF0 dXMgPSAwLCBhcHBlbmQgPSAwOworICAgIGludCBsY3MgPSAtMSwgcmNzID0gLTEsIHhsYXRlID0g MDsKKyAgICBpbnQgZmlyc3QgPSAxOworICAgIGludCBtZ2V0ID0gMTsKKyAgICBpbnQgbmM7Cisg ICAgY2hhciAqIHMsICogczIsICogczM7CisgICAgVUxPTkcgdDAsIHQxOyAgICAgICAgICAgICAg ICAgICAgICAgLyogVGltZXMgZm9yIHN0YXRzICovCisjaWZkZWYgR0ZUSU1FUgorICAgIENLRkxP QVQgc2VjOworI2Vsc2UKKyAgICBpbnQgc2VjID0gMDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisK KyAgICBpZiAocXVpZXQpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiAtcSByZWFsbHkgbWVh bnMgcXVpZXQgKi8KKyAgICAgICAgZGlzcGxhID0gMDsKKyAgICAgICAgZmRpc3BsYSA9IDA7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgZGlzcGxhID0gMTsKKyAgICAgICAgZmRpc3BsYSA9IFhZRkRf QjsKKyAgICB9CisgICAgdGVzdGluZyA9IDA7CisgICAgZHB5YWN0aXZlID0gMDsKKyAgICBvdXQy c2NyZWVuID0gMDsKKyAgICB3aGF0ID0gV19GVFB8V19SRUNWOworICAgIG1nZXRtZXRob2QgPSAw OworICAgIG1nZXRmb3JjZWQgPSAwOworCisgICAgaGF2ZXR5cGUgPSAwOworICAgIGhhdmVzaXpl ID0gKENLX09GRl9UKS0xOworICAgIG1ha2VzdHIoJmhhdmVtZHRtLE5VTEwpOworCisgICAgaWYg KGZ0cF9mbmMgPCAwKQorICAgICAgZnRwX2ZuYyA9IGZuY2FjdDsKKworI2lmbmRlZiBOT1NQTAor ICAgIGNtZF9xdW90aW5nID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIGRlYnVnKEYxMDEs ImZ0cCBjbWRsaW5nZXQgbmZpbHMiLCIiLG5maWxzKTsKKworICAgIGlmIChmdHBfY252ID09IENO Vl9BVVRPKSB7ICAgICAgICAgIC8qIE5hbWUgY29udmVyc2lvbiBpcyBhdXRvICovCisgICAgICAg IGlmIChhbGlrZSkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgc2VydmVyICYgY2xpZW50IGFy ZSBhbGlrZSAqLworICAgICAgICAgICAgbmMgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIG5v IGNvbnZlcnNpb24gKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBJZiB0aGV5IGFyZSBkaWZmZXJlbnQgKi8KKyAgICAgICAgICAgIGlmIChzZXJ2ZXJ0eXBlID09 IFNZU19VTklYIHx8IHNlcnZlcnR5cGUgPT0gU1lTX1dJTjMyKQorICAgICAgICAgICAgICBuYyA9 IC0xOyAgICAgICAgICAgICAgICAgIC8qIG9ubHkgbWluaW1hbCBjb252ZXJzaW9ucyBuZWVkZWQg Ki8KKyAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2Ug Ki8KKyAgICAgICAgICAgICAgbmMgPSAxOyAgICAgICAgICAgICAgICAgICAvKiBmdWxsIGNvbnZl cnNpb24gKi8KKyAgICAgICAgfQorICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vdCBhdXRvIC0gZG8gd2hhdCB1c2VyIHNhaWQgKi8KKyAgICAgIG5jID0gZnRwX2Nu djsKKworICAgIGlmIChuZmlscyA8IDEpCisgICAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOworCisg ICAgdDAgPSBnbXN0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyogU3RhcnRpbmcgdGltZSBm b3IgdGhpcyBiYXRjaCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAoeGxhdGUpIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRlRQIENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJT04g Ki8KKyAgICAgICAgbGNzID0gZnRwX2NzbDsgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjaGFy c2V0ICovCisgICAgICAgIGlmIChsY3MgPCAwKSBsY3MgPSBmY2hhcnNldDsKKyAgICAgICAgaWYg KGxjcyA8IDApIHhsYXRlID0gMDsKKyAgICB9CisgICAgaWYgKHhsYXRlKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3RpbGwgT04/ICovCisgICAgICAgIHJjcyA9IGZ0cF9jc3g7ICAgICAg ICAgICAgICAgICAgLyogUmVtb3RlIChTZXJ2ZXIpIGNoYXJzZXQgKi8KKyAgICAgICAgaWYgKHJj cyA8IDApIHJjcyA9IGZ0cF9jc3I7CisgICAgICAgIGlmIChyY3MgPCAwKSB4bGF0ZSA9IDA7Cisg ICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAvKgorICAgICAgSWYgd2UgaGF2ZSBvbmx5 IG9uZSBmaWxlIGFuZCBpdCBpcyBhIGRpcmVjdG9yeSwgdGhlbiB3ZSBhc2sgZm9yIGEKKyAgICAg IGxpc3Rpbmcgb2YgaXRzIGNvbnRlbnRzLCByYXRoZXIgdGhhbiByZXRyaWV2aW5nIHRoZSBkaXJl Y3RvcnkgZmlsZQorICAgICAgaXRzZWxmLiAgVGhpcyBpcyB3aGF0IChlLmcuKSBOZXRzY2FwZSBk b2VzLgorICAgICovCisgICAgaWYgKG5maWxzID09IDEpIHsKKyAgICAgICAgaWYgKGRvZnRwY3dk KChjaGFyICopY21saXN0W21nZXR4XSwtMSkpIHsKKyAgICAgICAgICAgIC8qIElmIHdlIGNhbiBD RCB0byBpdCwgaXQgbXVzdCBiZSBhIGRpcmVjdG9yeSAqLworICAgICAgICAgICAgaWYgKHJlY3Vy c2l2ZSkgeworICAgICAgICAgICAgICAgIGNtbGlzdFttZ2V0eF0gPSAiKiI7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9CisgICAgICAgICAgICAgICAgICAo cmVjdnJlcXVlc3QoIkxJU1QiLCItIiwiIiwid2IiLDAsMCxOVUxMLHhsYXRlLGxjcyxyY3MpPT0w KTsKKyAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KKy8qCisgIFRoZSBmb2xsb3dpbmcgaXMgdG8gd29yayBhcm91bmQgVU5JWCBzZXJ2ZXJz IHdoaWNoLCB3aGVuIGdpdmVuIGEgY29tbWFuZAorICBsaWtlICJOTFNUIHBhdGgvYmxhaCIgKG5v dCB3aWxkKSByZXR1cm5zIHRoZSBiYXNlbmFtZSB3aXRob3V0IHRoZSBwYXRoLgorKi8KKyAgICBp ZiAoIWRvbmUgJiYgc2VydmVydHlwZSA9PSBTWVNfVU5JWCAmJiBuZmlscyA9PSAxKSB7CisgICAg ICAgIG1nZXQgPSBpc3dpbGQoY21saXN0W21nZXR4XSk7CisgICAgfQorICAgIGlmICghbWdldCAm JiAhZG9uZSkgeyAgICAgICAgICAgICAgIC8qIEludm9rZWQgYnkgY29tbWFuZC1saW5lIEZUUCBV UkwgKi8KKyAgICAgICAgaWYgKGZ0cF9kZWIpCisgICAgICAgICAgcHJpbnRmKCJET0lORyBHRVQu Li5cbiIpOworICAgICAgICBkb25lKys7CisgICAgICAgIGNhbmNlbGZpbGUgPSAwOyAgICAgICAg ICAgICAgICAgLyogVGhpcyBmaWxlIG5vdCBjYW5jZWxlZCB5ZXQgKi8KKyAgICAgICAgcyA9IGNt bGlzdFttZ2V0eF07CisgICAgICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbCByZXR1cm4gY29kZSAqLworCWZzaXplID0gKENLX09GRl9UKS0xOworCWlmIChzaXpl b2spIHsKKwkgICAgeCA9IGZ0cGNtZCgiU0laRSIscyxsY3MscmNzLGZ0cF92Ym0pOyAvKiBHZXQg cmVtb3RlIGZpbGUncyBzaXplICovCisJICAgIGlmICh4ID09IFJFUExZX0NPTVBMRVRFKQorCSAg ICAgIGZzaXplID0gY2thdG9mcygmZnRwX3JlcGx5X3N0cls0XSk7CisJfQorICAgICAgICBja3N0 cm5jcHkoZmlsbmFtLHMsQ0tNQVhQQVRIKTsgIC8qIEZvciBcdihmaWxlbmFtZSkgKi8KKyAgICAg ICAgZGVidWcoRjExMSwiZnRwIGNtZGxpbmdldCBmaWxuYW0iLGZpbG5hbSxmc2l6ZSk7CisKKyAg ICAgICAgbnpydG9sKHMsdG1wYnVmLG5jLDAsQ0tNQVhQQVRIKTsgLyogU3RyaXAgcGF0aCBhbmQg bWF5YmUgY29udmVydCAqLworICAgICAgICBzMiA9IHRtcGJ1ZjsKKworICAgICAgICAvKiBJZiBs b2NhbCBmaWxlIGFscmVhZHkgZXhpc3RzLCB0YWtlIGNvbGxpc2lvbiBhY3Rpb24gKi8KKworICAg ICAgICBpZiAoemNoa2koczIpID4gLTEpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoZnRwX2ZuYykg eworICAgICAgICAgICAgICBjYXNlIFhZRlhfQTogICAgICAgICAgICAgIC8qIEFwcGVuZCAqLwor ICAgICAgICAgICAgICAgIGFwcGVuZCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGNhc2UgWFlGWF9SOiAgICAgICAgICAgICAgLyogUmVuYW1lICovCisgICAgICAg ICAgICAgIGNhc2UgWFlGWF9COiB7ICAgICAgICAgICAgLyogQmFja3VwICovCisgICAgICAgICAg ICAgICAgICBjaGFyICogcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICBpbnQgeCA9IC0xOwor ICAgICAgICAgICAgICAgICAgem5ld24oczIsJnApOyAgICAgICAgIC8qIE1ha2UgdW5pcXVlIG5h bWUgKi8KKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBjbWRsaW5nZXQgem5ld24i LHAsMCk7CisgICAgICAgICAgICAgICAgICBpZiAoZnRwX2ZuYyA9PSBYWUZYX0IpIHsgLyogQmFj a3VwIGV4aXN0aW5nIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICB4ID0genJlbmFtZShz MixwKTsKKyAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0IGJh Y2t1cCB6cmVuYW1lIixwLHgpOworICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgIC8qIFJlbmFtZSBpbmNvbWluZyBmaWxlICovCisgICAgICAgICAgICAgICAgICAgICAgeCA9 IGNrc3RybmNweSh0bXBidWYscCxDS01BWFBBVEgrMSk7CisgICAgICAgICAgICAgICAgICAgICAg czIgPSB0bXBidWY7CisgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIGNtZGxp bmdldCByZW5hbWUgaW5jb21pbmciLHAseCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9C YWNrdXAvUmVuYW1lIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNhc2UgWFlGWF9EOiAgICAgICAgICAg ICAgLyogRGlzY2FyZCAqLworICAgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9GTiwnRicsKENL X09GRl9UKTAscyk7CisgICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1NULFNUX1NLSVAsKENL X09GRl9UKVNLUF9OQU0scyk7CisgICAgICAgICAgICAgICAgdGxvZyhGMTAwLCIgcmVmdXNlZDog bmFtZSIsIiIsMCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGNtZGxpbmdldCBz a2lwIG5hbWUiLHMyLDApOworICAgICAgICAgICAgICAgIGdvdG8geGNsZ2V0OworCisgICAgICAg ICAgICAgIGNhc2UgWFlGWF9YOiAgICAgICAgICAgICAgLyogT3ZlcndyaXRlICovCisgICAgICAg ICAgICAgIGNhc2UgWFlGWF9VOiAgICAgICAgICAgICAgLyogVXBkYXRlIChhbHJlYWR5IGhhbmRs ZWQgYWJvdmUpICovCisJICAgICAgY2FzZSBYWUZYX006CQkvKiBkaXR0byAqLworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJjID0gZ2V0 ZmlsZShzLCAgICAgICAgICAgICAgICAgLyogUmVtb3RlIG5hbWUgKi8KKyAgICAgICAgICAgICAg ICAgICAgIHMyLCAgICAgICAgICAgICAgICAvKiBMb2NhbCBuYW1lICovCisgICAgICAgICAgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgLyogUmVjb3Zlci9SZXN0YXJ0ICovCisgICAgICAg ICAgICAgICAgICAgICBhcHBlbmQsICAgICAgICAgICAgLyogQXBwZW5kICovCisgICAgICAgICAg ICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgLyogUGlwZW5hbWUgKi8KKyAgICAgICAgICAg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGUgY2hhcnNldHMgKi8KKyAg ICAgICAgICAgICAgICAgICAgIC0xLCAgICAgICAgICAgICAgICAvKiBGaWxlIGNoYXJzZXQgKG5v bmUpICovCisgICAgICAgICAgICAgICAgICAgICAtMSAgICAgICAgICAgICAgICAgLyogU2VydmVy IGNoYXJzZXQgKG5vbmUpICovCisgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBkZWJ1 ZyhGMTExLCJmdHAgY21kbGluZ2V0IHJjIixzLHJjKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRw IGNtZGxpbmdldCBjYW5jZWxmaWxlIixzLGNhbmNlbGZpbGUpOworICAgICAgICBkZWJ1ZyhGMTEx LCJmdHAgY21kbGluZ2V0IGNhbmNlbGdyb3VwIixzLGNhbmNlbGdyb3VwKTsKKworICAgICAgICBp ZiAocmMgPCAwICYmIGhhdmV1cmwgJiYgc1swXSA9PSAnLycpIC8qIFVSTCBmYWlsZWQgLSB0cnkg YWdhaW4gKi8KKyAgICAgICAgICAgIHJjID0gZ2V0ZmlsZSgmc1sxXSwgICAgICAgICAvKiBSZW1v dGUgbmFtZSB3aXRob3V0IGxlYWRpbmcgJy8nICovCisgICAgICAgICAgICAgICAgICAgICAgICAg czIsICAgICAgICAgICAgLyogTG9jYWwgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAg IDAsICAgICAgICAgICAgIC8qIFJlY292ZXIvUmVzdGFydCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgIGFwcGVuZCwgICAgICAgIC8qIEFwcGVuZCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsICAgICAgICAgIC8qIFBpcGVuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgICAgICAgICAgICAgLyogVHJhbnNsYXRlIGNoYXJzZXRzICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgLTEsICAgICAgICAgICAgLyogRmlsZSBjaGFyc2V0IChub25lKSAqLworICAg ICAgICAgICAgICAgICAgICAgICAgIC0xICAgICAgICAgICAgIC8qIFNlcnZlciBjaGFyc2V0IChu b25lKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGlmIChyYyA+IC0x KSB7CisgICAgICAgICAgICBnb29kKys7CisgICAgICAgICAgICBzdGF0dXMgPSAxOworICAgICAg ICB9CisgICAgICAgIGlmIChjYW5jZWxmaWxlKQorICAgICAgICAgIGdvdG8geGNsZ2V0OworICAg ICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICBmdHBfZmFpKys7CisjaWZkZWYgRlRQX1RJ TUVPVVQKKwkgICAgaWYgKGZ0cF90aW1lZF9vdXQpCisJICAgICAgc3RhdHVzID0gMDsKKyNlbmRp ZgkvKiBGVFBfVElNRU9VVCAqLworICAgICAgICAgICAgaWYgKGdldGVycm9yKSB7CisgICAgICAg ICAgICAgICAgc3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICBkb25lKys7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZ0cF9kZWIgJiYgIWRvbmUpCisgICAgICBw cmludGYoIkRPSU5HIE1HRVQuLi5cbiIpOworICAgIHdoaWxlICghZG9uZSAmJiAhY2FuY2VsZ3Jv dXApIHsKKyAgICAgICAgY2FuY2VsZmlsZSA9IDA7ICAgICAgICAgICAgICAgICAvKiBUaGlzIGZp bGUgbm90IGNhbmNlbGVkIHlldCAqLworICAgICAgICBzID0gKGNoYXIgKilyZW1vdGVfZmlsZXMo Zmlyc3QsKENIQVIgKiljbWxpc3RbbWdldHhdLE5VTEwsMCk7CisgICAgICAgIGlmICghcykgcyA9 ICIiOworICAgICAgICBpZiAoISpzKSB7CisgICAgICAgICAgICBmaXJzdCA9IDE7CisgICAgICAg ICAgICBtZ2V0eCsrOworICAgICAgICAgICAgaWYgKG1nZXR4IDwgbmZpbHMpCisgICAgICAgICAg ICAgIHMgPSAoY2hhciAqKXJlbW90ZV9maWxlcyhmaXJzdCwoQ0hBUiAqKWNtbGlzdFttZ2V0eF0s TlVMTCwwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcyA9IE5VTEw7CisgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY21kbGluZ2V0IHJlbW90ZV9maWxlcyBCIixzLDApOwor ICAgICAgICAgICAgaWYgKCFzKSB7CisgICAgICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAg ICAgICAgICBUaGUgc2VtYW50aWNzIG9mIE5MU1QgYXJlIGlsbC1kZWZpbmVkLiAgU3VwcG9zZSB3 ZSBoYXZlIGp1c3Qgc2VudAorICAgICAgICAgIE5MU1QgL3BhdGgvW2Etel0qLiAgTW9zdCBzZXJ2 ZXJzIHNlbmQgYmFjayBuYW1lcyBsaWtlIC9wYXRoL2ZvbywKKyAgICAgICAgICAvcGF0aC9iYXIs IGV0Yy4gIEJ1dCBzb21lIHNlbmQgYmFjayBvbmx5IGZvbyBhbmQgYmFyLCBhbmQgc3Vic2VxdWVu dAorICAgICAgICAgIFJFVFIgY29tbWFuZHMgYmFzZWQgb24gdGhlIHBhdGhsZXNzIG5hbWVzIGFy ZSBub3QgZ29pbmcgdG8gd29yay4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKHNlcnZlcnR5cGUg PT0gU1lTX1VOSVggJiYgIWNrc3RyY2hyKHMsJy8nKSkgeworICAgICAgICAgICAgaWYgKChzMyA9 IGNrc3RycmNocihjbWxpc3RbbWdldHhdLCcvJykpKSB7CisgICAgICAgICAgICAgICAgaW50IGxl biwgbGVmdCA9IDQwOTY7CisgICAgICAgICAgICAgICAgY2hhciAqIHRtcCA9IHh0bXBidWY7Cisg ICAgICAgICAgICAgICAgbGVuID0gczMgLSBjbWxpc3RbbWdldHhdICsgMTsKKyAgICAgICAgICAg ICAgICBja3N0cm5jcHkodG1wLGNtbGlzdFttZ2V0eF0sbGVmdCk7CisgICAgICAgICAgICAgICAg dG1wICs9IGxlbjsKKyAgICAgICAgICAgICAgICBsZWZ0IC09IGxlbjsKKyAgICAgICAgICAgICAg ICBja3N0cm5jcHkodG1wLHMsbGVmdCk7CisgICAgICAgICAgICAgICAgcyA9IHh0bXBidWY7CisJ CWRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgcmVtb3RlX2ZpbGVzIFgiLHMsMCk7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmlyc3QgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBOb3QgZmlyc3QgYW55IG1vcmUgKi8KKworCWRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQg aGF2ZXR5cGUiLHMsaGF2ZXR5cGUpOworCWlmIChoYXZldHlwZSA+IDAgJiYgaGF2ZXR5cGUgIT0g RlRZUF9GSUxFKSB7IC8qIFNlcnZlciBzYXlzIG5vdCBmaWxlICovCisJICAgIGRlYnVnKEYxMTAs ImZ0cCBjbWRsaW5nZXQgbm90LWEtZmlsZSIscywwKTsKKwkgICAgY29udGludWU7CisJfQorICAg ICAgICByYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgcmV0dXJuIGNv ZGUgKi8KKwlpZiAoaGF2ZXNpemUgPiAoQ0tfT0ZGX1QpLTEpIHsJLyogQWxyZWFkeSBoYXZlIGZp bGUgc2l6ZT8gKi8KKwkgICAgZnNpemUgPSBoYXZlc2l6ZTsKKwl9IGVsc2UgewkJCS8qIE5vIC0g bXVzdCBhc2sgc2VydmVyICovCisJICAgIC8qCisJICAgICAgUHJpb3IgdG8gc2VuZGluZyB0aGUg TkxTVCBjb21tYW5kIHdlIG5lY2Vzc2FyaWx5IHB1dCB0aGUKKwkgICAgICBzZXJ2ZXIgaW50byBB U0NJSSBtb2RlLiAgV2UgbXVzdCBub3cgcHV0IGl0IGJhY2sgaW50byB0aGUKKwkgICAgICB0aGUg cmVxdWVzdGVkIG1vZGUgc28gdGhlIHVwY29taW5nIFNJWkUgY29tbWFuZCByZXR1cm5zCisJICAg ICAgcmlnaHQga2luZCBvZiBzaXplOyB0aGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvcgor CSAgICAgIEdFVCAvUkVDT1ZFUjsgb3RoZXJ3aXNlIHRoZSBzZXJ2ZXIgcmV0dXJucyB0aGUgIkFT Q0lJIiBzaXplCisJICAgICAgb2YgdGhlIGZpbGUsIHJhdGhlciB0aGFuIGl0cyB0cnVlIHNpemUu CisJICAgICovCisJICAgIGNoYW5nZXR5cGUoZnRwX3R5cCwwKTsJLyogQ2hhbmdlIHRvIHJlcXVl c3RlZCB0eXBlICovCisJICAgIGZzaXplID0gKENLX09GRl9UKS0xOworCSAgICBpZiAoc2l6ZW9r KSB7CisJCXggPSBmdHBjbWQoIlNJWkUiLHMsbGNzLHJjcyxmdHBfdmJtKTsKKwkJaWYgKHggPT0g UkVQTFlfQ09NUExFVEUpCisJCSAgZnNpemUgPSBja2F0b2ZzKCZmdHBfcmVwbHlfc3RyWzRdKTsK KwkgICAgfQorCX0KKyAgICAgICAgY2tzdHJuY3B5KGZpbG5hbSxzLENLTUFYUEFUSCk7ICAvKiBG b3IgXHYoZmlsZW5hbWUpICovCisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgZmls bmFtIixmaWxuYW0sZnNpemUpOworCisgICAgICAgIG56cnRvbChzLHRtcGJ1ZixuYywwLENLTUFY UEFUSCk7IC8qIFN0cmlwIHBhdGggYW5kIG1heWJlIGNvbnZlcnQgKi8KKyAgICAgICAgczIgPSB0 bXBidWY7CisKKyAgICAgICAgLyogSWYgbG9jYWwgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGFrZSBj b2xsaXNpb24gYWN0aW9uICovCisKKyAgICAgICAgaWYgKHpjaGtpKHMyKSA+IC0xKSB7CisgICAg ICAgICAgICBzd2l0Y2ggKGZ0cF9mbmMpIHsKKyAgICAgICAgICAgICAgY2FzZSBYWUZYX0E6ICAg ICAgICAgICAgICAvKiBBcHBlbmQgKi8KKyAgICAgICAgICAgICAgICBhcHBlbmQgPSAxOworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFhZRlhfUjogICAgICAgICAg ICAgIC8qIFJlbmFtZSAqLworICAgICAgICAgICAgICBjYXNlIFhZRlhfQjogeyAgICAgICAgICAg IC8qIEJhY2t1cCAqLworICAgICAgICAgICAgICAgICAgY2hhciAqIHAgPSBOVUxMOworICAgICAg ICAgICAgICAgICAgaW50IHggPSAtMTsKKyAgICAgICAgICAgICAgICAgIHpuZXduKHMyLCZwKTsg ICAgICAgICAvKiBNYWtlIHVuaXF1ZSBuYW1lICovCisgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJmdHAgY21kbGluZ2V0IHpuZXduIixwLDApOworICAgICAgICAgICAgICAgICAgaWYgKGZ0 cF9mbmMgPT0gWFlGWF9CKSB7IC8qIEJhY2t1cCBleGlzdGluZyBmaWxlICovCisgICAgICAgICAg ICAgICAgICAgICAgeCA9IHpyZW5hbWUoczIscCk7CisgICAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjExMSwiZnRwIGNtZGxpbmdldCBiYWNrdXAgenJlbmFtZSIscCx4KTsKKyAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAvKiBSZW5hbWUgaW5jb21pbmcgZmlsZSAqLwor ICAgICAgICAgICAgICAgICAgICAgIHggPSBja3N0cm5jcHkodG1wYnVmLHAsQ0tNQVhQQVRIKzEp OworICAgICAgICAgICAgICAgICAgICAgIHMyID0gdG1wYnVmOworICAgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRsaW5nZXQgcmVuYW1lIGluY29taW5nIixwLHgpOworICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/QmFja3VwL1JlbmFtZSBmYWlsZWRcbiIpOworICAgICAg ICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICBjYXNlIFhZRlhfRDogICAgICAvKiBEaXNjYXJkICovCisgICAgICAgICAgICAgICAgZnRzY3Jl ZW4oU0NSX0ZOLCdGJywoQ0tfT0ZGX1QpMCxzKTsKKyAgICAgICAgICAgICAgICBmdHNjcmVlbihT Q1JfU1QsU1RfU0tJUCwoQ0tfT0ZGX1QpU0tQX05BTSxzKTsKKyAgICAgICAgICAgICAgICB0bG9n KEYxMDAsIiByZWZ1c2VkOiBuYW1lIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJmdHAgY21kbGluZ2V0IHNraXAgbmFtZSIsczIsMCk7CisgICAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICAgIGNhc2UgWFlGWF9YOiAgICAgICAgICAgICAgLyogT3ZlcndyaXRl ICovCisgICAgICAgICAgICAgIGNhc2UgWFlGWF9VOiAgICAgICAgICAgICAgLyogVXBkYXRlIChh bHJlYWR5IGhhbmRsZWQgYWJvdmUpICovCisgICAgICAgICAgICAgIGNhc2UgWFlGWF9NOiAgICAg ICAgICAgICAgLyogZGl0dG8gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IF5eXiBBREQgQ0hBUlNFVCBTVFVGRiBIRVJFIF5eXiAqLworICAgICAgICByYyA9IGdldGZpbGUo cywgICAgICAgICAgICAgICAgIC8qIFJlbW90ZSBuYW1lICovCisgICAgICAgICAgICAgICAgICAg ICBzMiwgICAgICAgICAgICAgICAgLyogTG9jYWwgbmFtZSAqLworICAgICAgICAgICAgICAgICAg ICAgMCwgICAgICAgICAgICAgICAgIC8qIFJlY292ZXIvUmVzdGFydCAqLworICAgICAgICAgICAg ICAgICAgICAgYXBwZW5kLCAgICAgICAgICAgIC8qIEFwcGVuZCAqLworICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgICAgICAgICAgICAgIC8qIFBpcGVuYW1lICovCisgICAgICAgICAgICAgICAg ICAgICAwLCAgICAgICAgICAgICAgICAgLyogVHJhbnNsYXRlIGNoYXJzZXRzICovCisgICAgICAg ICAgICAgICAgICAgICAtMSwgICAgICAgICAgICAgICAgLyogRmlsZSBjaGFyc2V0IChub25lKSAq LworICAgICAgICAgICAgICAgICAgICAgLTEgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBjaGFy c2V0IChub25lKSAqLworICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgZGVidWcoRjEx MSwiZnRwIGNtZGxpbmdldCByYyIscyxyYyk7CisgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBjbWRs aW5nZXQgY2FuY2VsZmlsZSIscyxjYW5jZWxmaWxlKTsKKyAgICAgICAgZGVidWcoRjExMSwiZnRw IGNtZGxpbmdldCBjYW5jZWxncm91cCIscyxjYW5jZWxncm91cCk7CisKKyAgICAgICAgaWYgKHJj ID4gLTEpIHsKKyAgICAgICAgICAgIGdvb2QrKzsKKyAgICAgICAgICAgIHN0YXR1cyA9IDE7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGNhbmNlbGZpbGUpCisgICAgICAgICAgY29udGludWU7Cisg ICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIGZ0cF9mYWkrKzsKKyNpZmRlZiBGVFBf VElNRU9VVAorCSAgICBpZiAoZnRwX3RpbWVkX291dCkKKwkgICAgICBzdGF0dXMgPSAwOworI2Vu ZGlmCS8qIEZUUF9USU1FT1VUICovCisgICAgICAgICAgICBpZiAoZ2V0ZXJyb3IpIHsKKyAgICAg ICAgICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIGRvbmUrKzsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICB4Y2xnZXQ6CisgICAgaWYgKGNhbmNlbGdyb3Vw KQorICAgICAgbWxzcmVzZXQoKTsKKyAgICBpZiAoc3RhdHVzID4gMCkgeworICAgICAgICBpZiAo Y2FuY2VsZ3JvdXApCisgICAgICAgICAgc3RhdHVzID0gMDsKKyAgICAgICAgZWxzZSBpZiAoY2Fu Y2VsZmlsZSAmJiBnb29kIDwgMSkKKyAgICAgICAgICBzdGF0dXMgPSAwOworICAgIH0KKyAgICBz dWNjZXNzID0gc3RhdHVzOworCisjaWZkZWYgR0ZUSU1FUgorICAgIHQxID0gZ21zdGltZXIoKTsg ICAgICAgICAgICAgICAgICAgIC8qIEVuZCB0aW1lICovCisgICAgc2VjID0gKENLRkxPQVQpKChD S0ZMT0FUKSh0MSAtIHQwKSAvIDEwMDAuMCk7IC8qIFN0YXRzICovCisgICAgaWYgKCFzZWMpIHNl YyA9IDAuMDAxOworICAgIGZwdHNlY3MgPSBzZWM7CisjZWxzZQorICAgIHNlYyA9ICh0MSAtIHQw KSAvIDEwMDA7CisgICAgaWYgKCFzZWMpIHNlYyA9IDE7CisjZW5kaWYgLyogR0ZUSU1FUiAqLwor CisgICAgdGZjcHMgPSAobG9uZykgKHRmYyAvIHNlYyk7CisgICAgdHNlY3MgPSAoaW50KXNlYzsK KyAgICBsYXN0eGZlciA9IFdfRlRQfFdfUkVDVjsKKyAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7Cisg ICAgaWYgKGRweWFjdGl2ZSkKKyAgICAgIGZ0c2NyZWVuKHN0YXR1cyA+IDAgPyBTQ1JfVEMgOiBT Q1JfQ1csIDAsIChDS19PRkZfVCkwLCAiIik7CisgICAgaWYgKCFzdGF5KQorICAgICAgZG9leGl0 KHN1Y2Nlc3MgPyBHT09EX0VYSVQgOiBCQURfRVhJVCwgLTEpOworICAgIHJldHVybihzdWNjZXNz KTsKK30KKworLyogIGQgbyBmIHQgcCBnIGUgdCAgLS0gIFBhcnNlIGFuZCBleGVjdXRlIEdFVCwg TUdFVCwgTURFTEVURSwgLi4uICAqLworCisvKgorICBOb3RlOiBpZiB3ZSB3YW50ZWQgdG8gaW1w bGVtZW50IC9BRlRFUjosIC9CRUZPUkU6LCBldGMsIHdlIGNvdWxkIHVzZQorICB6c3RyZGF0KCkg dG8gY29udmVydCB0byBVVEMtYmFzZWQgdGltZV90LiAgQnV0IGl0IGRvZXNuJ3QgbWFrZSBzZW5z ZSBmcm9tCisgIHRoZSB1c2VyLWludGVyZmFjZSBwZXJzcGVjdGl2ZSwgc2luY2UgdGhlIHNlcnZl cidzIGRpcmVjdG9yeSBsaXN0aW5ncyBzaG93CisgIGl0cyBvd24gbG9jYWwgdGltZXMgYW5kIHNp bmNlIHdlIGRvbid0IGtub3cgd2hhdCB0aW1lem9uZSBpdCdzIGluLCB0aGVyZSdzCisgIG5vIHdh eSB0byByZWNvbmNpbGUgb3VyIGxvY2FsIHRpbWVzIHdpdGggdGhlIHNlcnZlcidzLgorKi8KK2lu dAorZG9mdHBnZXQoY3gsd2hvKSBpbnQgY3gsIHdobzsgeyAgICAgICAgIC8qIHdobyA9PSAxIGZv ciBmdHAsIDAgZm9yIGtlcm1pdCAqLworICAgIHN0cnVjdCBGREIgZmwsIHN3LCBjbTsKKyAgICBp bnQgaSwgbiwgcmMsIGdldHZhbCA9IDAsIG1nZXQgPSAwLCBkb25lID0gMCwgcGlwZXNhdmUgPSAw OworICAgIGludCB4X2NudiA9IDAsIHhfcHJtID0gMCwgcmVzdGFydCA9IDAsIHN0YXR1cyA9IDAs IGdvb2QgPSAwOworICAgIGludCB4X2ZuYyA9IDAsIGZpcnN0ID0gMCwgc2tpcHRoaXMgPSAwLCBh cHBlbmQgPSAwLCBzZWxlY3RlZCA9IDA7CisgICAgaW50IHJlbmFtaW5nID0gMCwgbWRlbCA9IDAs IGxpc3RmaWxlID0gMCwgdXBkYXRpbmcgPSAwLCBnZXRvbmUgPSAwOworICAgIGludCBtb3Zpbmcg PSAwLCBkZWxldGluZyA9IDAsIHRvc2NyZWVuID0gMCwgaGFzcGF0aCA9IDA7CisgICAgaW50IGdv dHNpemUgPSAwOworICAgIGludCBtYXRjaGRvdCA9IDA7CisgICAgQ0tfT0ZGX1QgZ2V0bGFyZ2Vy ID0gKENLX09GRl9UKS0xOworICAgIENLX09GRl9UIGdldHNtYWxsZXIgPSAoQ0tfT0ZGX1QpLTE7 CisgICAgY2hhciAqIG1zZywgKiBzLCAqIHMyLCAqIG5hbSwgKiBwaXBlbmFtZSA9IE5VTEwsICog cG4gPSBOVUxMOworICAgIGNoYXIgKiBzcmMgPSAiIiwgKiBsb2NhbCA9ICIiOworICAgIGNoYXIg KiBwYXQgPSAiIjsKKworICAgIGludCB4X2NzbCA9IC0xLCB4X2NzciA9IC0xOyAgICAgICAgIC8q IExvY2FsIGFuZCByZW1vdGUgY2hhcnNldHMgKi8KKyAgICBpbnQgeF94bGEgPSAwOworICAgIGNo YXIgYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciBjaGFyICovCisgICAg VUxPTkcgdDAgPSAwTCwgdDE7ICAgICAgICAgICAgICAgICAgLyogVGltZXMgZm9yIHN0YXRzICov CisjaWZkZWYgR0ZUSU1FUgorICAgIENLRkxPQVQgc2VjOworI2Vsc2UKKyAgICBpbnQgc2VjID0g MDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAgICBzdHJ1Y3Qgc3RyaW5naW50IHB2W1NORF9N QVgrMV07ICAgIC8qIFRlbXBvcmFyeSBhcnJheSBmb3Igc3dpdGNoIHZhbHVlcyAqLworCisgICAg c3VjY2VzcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGZhaWx1cmUgKi8K KyAgICBmb3JjZXR5cGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBObyAvVEVYVCBvciAv QklOQVJZIGdpdmVuIHlldCAqLworICAgIHJlc3RhcnQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vIHJlc3RhcnQgeWV0ICovCisgICAgb3V0MnNjcmVlbiA9IDA7CQkJLyogTm8gVE8t U0NSRUVOIHN3aXRjaCBnaXZlbiB5ZXQgKi8KKyAgICBtZ2V0bWV0aG9kID0gMDsJCQkvKiBObyBO TFNUIG9yIE1MU0Qgc3dpdGNoIHlldCAqLworICAgIG1nZXRmb3JjZWQgPSAwOworCisgICAgZ19k aXNwbGEgPSBmZGlzcGxhOworICAgIGlmIChmdHBfZGlzID4gLTEpCisgICAgICBmZGlzcGxhID0g ZnRwX2RpczsKKworICAgIHhfY252ID0gZnRwX2NudjsgICAgICAgICAgICAgICAgICAgIC8qIEZp bGVuYW1lIGNvbnZlcnNpb24gKi8KKyAgICBpZiAoeF9jbnYgPT0gQ05WX0FVVE8pIHsJCS8qIE5h bWUgY29udmVyc2lvbiBpcyBhdXRvICovCisgICAgICAgIGlmIChhbGlrZSkgeyAgICAgICAgICAg ICAgICAgICAgLyogSWYgc2VydmVyICYgY2xpZW50IGFyZSBhbGlrZSAqLworICAgICAgICAgICAg eF9jbnYgPSAwOwkJCS8qIG5vIGNvbnZlcnNpb24gKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJZiB0aGV5IGFyZSBkaWZmZXJlbnQgKi8KKyAgICAgICAgICAg IGlmIChzZXJ2ZXJ0eXBlID09IFNZU19VTklYIHx8IHNlcnZlcnR5cGUgPT0gU1lTX1dJTjMyKQor ICAgICAgICAgICAgICB4X2NudiA9IC0xOwkJLyogb25seSBtaW5pbWFsIGNvbnZlcnNpb25zIG5l ZWRlZCAqLworICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVy d2lzZSAqLworICAgICAgICAgICAgICB4X2NudiA9IDE7CQkvKiBmdWxsIGNvbnZlcnNpb24gKi8K KyAgICAgICAgfQorICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5v dCBhdXRvIC0gZG8gd2hhdCB1c2VyIHNhaWQgKi8KKyAgICAgIHhfY252ID0gZnRwX2NudjsKKwor ICAgIHhfcHJtID0gZnRwX3BybTsgICAgICAgICAgICAgICAgICAgIC8qIFBlcm1pc3Npb25zICov CisgICAgaWYgKHhfcHJtID09IFNFVF9BVVRPKSAgICAgICAgICAgICAgLyogUGVybWlzc2lvbnMg QVVUTyAqLworICAgICAgeF9wcm0gPSBhbGlrZTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgeF9j c3IgPSBmdHBfY3NyOyAgICAgICAgICAgICAgICAgICAgLyogSW5oZXJpdCBnbG9iYWwgc2VydmVy IGNoYXJzZXQgKi8KKyAgICB4X2NzbCA9IGZ0cF9jc2w7ICAgICAgICAgICAgICAgICAgICAvKiBJ bmhlcml0IGdsb2JhbCBsb2NhbCBjaGFyc2V0ICovCisgICAgaWYgKHhfY3NsIDwgMCkgICAgICAg ICAgICAgICAgICAgICAgLyogSWYgbm9uZSwgdXNlIGN1cnJlbnQgKi8KKyAgICAgIHhfY3NsID0g ZmNoYXJzZXQ7ICAgICAgICAgICAgICAgICAvKiBmaWxlIGNoYXJhY3Rlci1zZXQuICovCisgICAg eF94bGEgPSBmdHBfeGxhOyAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNsYXRpb24gT24vT2Zm ICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgZ2V0ZXJyb3IgPSBmdHBfZXJyOyAgICAg ICAgICAgICAgICAgLyogSW5oZXJpdCBnbG9iYWwgZXJyb3IgYWN0aW9uLiAqLworICAgIGFzbmFt YnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgIC8qIE5vIGFzLW5hbWUgeWV0LiAqLworICAg IHBpcGVzYXZlID0gcGlwZXNlbmQ7CisgICAgcGlwZXNlbmQgPSAwOworCisgICAgaGF2ZXR5cGUg PSAwOworICAgIGhhdmVzaXplID0gKENLX09GRl9UKS0xOworICAgIG1ha2VzdHIoJmhhdmVtZHRt LE5VTEwpOworCisgICAgaWYgKGdfZnRwX3R5cCA+IC0xKSB7ICAgICAgICAgICAgICAgLyogUmVz dG9yZSBUWVBFIGlmIHNhdmVkICovCisgICAgICAgIGZ0cF90eXAgPSBnX2Z0cF90eXA7CisgICAg ICAgIC8qIGdfZnRwX3R5cCA9IC0xOyAqLworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDw9IFNO RF9NQVg7IGkrKykgeyAgICAvKiBJbml0aWFsaXplIHN3aXRjaCB2YWx1ZXMgKi8KKyAgICAgICAg cHZbaV0uc3ZhbCA9IE5VTEw7ICAgICAgICAgICAgICAvKiB0byBudWxsIHBvaW50ZXJzICovCisg ICAgICAgIHB2W2ldLml2YWwgPSAtMTsgICAgICAgICAgICAgICAgLyogYW5kIC0xIGludCB2YWx1 ZXMgKi8KKyAgICAgICAgcHZbaV0ud3ZhbCA9IChDS19PRkZfVCktMTsJLyogYW5kIC0xIHdpZGUg dmFsdWVzICovCisgICAgfQorICAgIHpjbG9zZShaTUZJTEUpOyAgICAgICAgICAgICAgICAgICAg IC8qIEluIGNhc2UgaXQgd2FzIGxlZnQgb3BlbiAqLworCisgICAgeF9mbmMgPSBmdHBfZm5jID4g LTEgPyBmdHBfZm5jIDogZm5jYWN0OyAvKiBGaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uICovCisK KyAgICBpZiAoZnBfbm1sKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCAvTkFNRUxJ U1QgKi8KKyAgICAgICAgaWYgKGZwX25tbCAhPSBzdGRvdXQpCisgICAgICAgICAgZmNsb3NlKGZw X25tbCk7CisgICAgICAgIGZwX25tbCA9IE5VTEw7CisgICAgfQorICAgIG1ha2VzdHIoJmZ0cF9u bWwsTlVMTCk7CisKKyAgICAvKiBJbml0aWFsaXplIGxpc3Qgb2YgcmVtb3RlIGZpbGVzcGVjcyAq LworCisgICAgaWYgKCFtZ2V0bGlzdCkgeworICAgICAgICBtZ2V0bGlzdCA9IChjaGFyICoqKW1h bGxvYyhNR0VUTUFYICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgICBpZiAoIW1nZXRsaXN0KSB7 CisgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIC0gTUdFVCBs aXN0XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgZm9y IChpID0gMDsgaSA8IE1HRVRNQVg7IGkrKykKKyAgICAgICAgICBtZ2V0bGlzdFtpXSA9IE5VTEw7 CisgICAgfQorICAgIG1nZXRuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJl ciBvZiBtZ2V0IGFyZ3VtZW50cyAqLworICAgIG1nZXR4ID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEN1cnJlbnQgYXJnICovCisKKyAgICBpZiAod2hvID09IDApIHsgICAgICAgICAg ICAgICAgICAgICAvKiBDYWxsZWQgd2l0aCB1bnByZWZpeGVkIGNvbW1hbmQgKi8KKyAgICAgICAg aWYgKGN4ID09IFhYR0VUIHx8IGN4ID09IFhYUkVHRVQgfHwgY3ggPT0gWFhSRVRSKQorICAgICAg ICAgIGdldG9uZSsrOworICAgICAgICBzd2l0Y2ggKGN4KSB7CisgICAgICAgICAgY2FzZSBYWFJF R0VUOiBwdltTTkRfUkVTXS5pdmFsID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWFJFVFI6 ICBwdltTTkRfREVMXS5pdmFsID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWEdFVDoKKyAg ICAgICAgICBjYXNlIFhYTUdFVDogIG1nZXQrKzsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGVFAgY29tbWFuZCAqLworICAgICAg ICBpZiAoY3ggPT0gRlRQX0dFVCB8fCBjeCA9PSBGVFBfUkdFKQorICAgICAgICAgIGdldG9uZSsr OworICAgICAgICBzd2l0Y2ggKGN4KSB7CisgICAgICAgICAgY2FzZSBGVFBfREVMOiAgICAgICAg ICAgICAgICAgLyogKGZhbGwgdGhydSBvbiBwdXJwb3NlKSAqLworICAgICAgICAgIGNhc2UgRlRQ X01ERTogbWRlbCsrOyAgICAgICAgIC8qIChkaXR0bykgKi8KKyAgICAgICAgICBjYXNlIEZUUF9H RVQ6ICAgICAgICAgICAgICAgICAvKiAoZGl0dG8pICovCisgICAgICAgICAgY2FzZSBGVFBfTUdF OiBtZ2V0Kys7IGJyZWFrOworICAgICAgICAgIGNhc2UgRlRQX1JHRTogcHZbU05EX1JFU10uaXZh bCA9IDE7IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGNtZmRiaSgmc3csICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAg ICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAg ICAiUmVtb3RlIGZpbGVuYW1lO1xuIG9yIHN3aXRjaCIsIC8qIGhscG1zZyAqLworICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAg ICAgICAgICBtZGVsID8gbmRlbHN3aSA6IG5nZXRzd2ksICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0 YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKyAgICAgICAgICAgeHhzdHJp bmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAg ICAgIG1kZWwgPyBkZWxzd2kgOiBnZXRzd2ksICAgICAgLyogS2V5d29yZCB0YWJsZSAqLworICAg ICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBG REIgKi8KKyAgICAgICAgICAgKTsKKyAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAybmQgRkRCIC0gcmVtb3RlIGZpbGVuYW1lICovCisgICAgICAgICAgIF9DTUZMRCwg ICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICov CisgICAgICAgICAgIHh4c3RyaW5nLAorICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAmY20K KyAgICAgICAgICAgKTsKKyAgICBjbWZkYmkoJmNtLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiAzcmQgRkRCIC0gQ29uZmlybWF0aW9uICovCisgICAgICAgICAgIF9DTUNGTSwgICAgICAgICAg ICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAg ICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAg KTsKKworICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAg b3IgbW9yZSBzd2l0Y2hlcyAqLworICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAg ICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IGNt ZmRiIiwiIix4KTsKKyAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBF cnJvciAqLworICAgICAgICAgIGdvdG8geGdldHg7ICAgICAgICAgICAgICAgICAgIC8qIG9yIHJl cGFyc2UgbmVlZGVkICovCisgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAg LyogQnJlYWsgb3V0IG9mIGxvb3AgaWYgbm90IGEgc3dpdGNoICovCisgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IGJyZWFrIGNo YXJhY3RlciAqLworICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpOyAvKiB0 byBzZWUgaG93IHRoZXkgZW5kZWQgdGhlIHN3aXRjaCAqLworICAgICAgICBpZiAoZ2V0dmFsICYm ICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhp cyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOworICAgICAgICAgICAgeCA9IC05 OworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgfQorICAgICAgICBuID0gY21yZXN1 bHQubnJlc3VsdDsgICAgICAgICAgIC8qIE51bWVyaWMgcmVzdWx0ID0gc3dpdGNoIHZhbHVlICov CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgc3dpdGNoIiwiIixuKTsKKworICAgICAgICBp ZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICBwcmlu dGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICB4 ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgICAgIHN3aXRj aCAobikgeyAgICAgICAgICAgICAgICAgICAgLyogUHJvY2VzcyB0aGUgc3dpdGNoICovCisgICAg ICAgICAgY2FzZSBTTkRfQVNOOiAgICAgICAgICAgICAgICAgLyogL0FTLU5BTUU6ICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IC9hcy1uYW1lIGdldHZhbCIsIiIsZ2V0dmFsKTsK KyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNt ZmxkKCJOYW1lIHRvIHN0b3JlIGl0IHVuZGVyIiwiIiwmcyxOVUxMKSkgPCAwKSB7CisgICAgICAg ICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/bmFt ZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAgaWYgKCEqcykgcyA9IE5VTEw7Cisg ICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7CisgICAgICAgICAgICBwdltuXS5p dmFsID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTTkRfQklOOiAg ICAgICAgICAgICAgICAgLyogL0JJTkFSWSAqLworICAgICAgICAgIGNhc2UgU05EX1RYVDogICAg ICAgICAgICAgICAgIC8qIC9URVhUIG9yIC9BU0NJSSAqLworICAgICAgICAgIGNhc2UgU05EX1RF TjogICAgICAgICAgICAgICAgIC8qIC9URU5FWCAqLworICAgICAgICAgICAgcHZbU05EX0JJTl0u aXZhbCA9IDA7CisgICAgICAgICAgICBwdltTTkRfVFhUXS5pdmFsID0gMDsKKyAgICAgICAgICAg IHB2W1NORF9URU5dLml2YWwgPSAwOworICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAg ICAgICAgICBicmVhazsKKworI2lmZGVmIFBVVFBJUEUKKyAgICAgICAgICBjYXNlIFNORF9DTUQ6 ICAgICAgICAgICAgICAgICAvKiBUaGVzZSB0YWtlIG5vIGFyZ3MgKi8KKyAgICAgICAgICAgIGlm IChub3B1c2gpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgc3lzdGVtIGNvbW1h bmQgYWNjZXNzIGlzIGRpc2FibGVkXG4iKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAg ICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBQSVBFU0VORAor ICAgICAgICAgICAgZWxzZSBpZiAocmN2ZmlsdGVyKSB7CisgICAgICAgICAgICAgICAgcHJpbnRm KCI/U29ycnksIG5vIFBVVCAvQ09NTUFORCB3aGVuIFNFTkQgRklMVEVSIHNlbGVjdGVkXG4iKTsK KyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgICAgICAgICAgc3cuaGxwbXNn ID0gIkNvbW1hbmQsIG9yIHN3aXRjaCI7IC8qIENoYW5nZSBoZWxwIG1lc3NhZ2UgKi8KKyAgICAg ICAgICAgIHB2W25dLml2YWwgPSAxOyAgICAgICAgICAgICAvKiBKdXN0IHNldCB0aGUgZmxhZyAq LworICAgICAgICAgICAgcHZbU05EX0FSUl0uaXZhbCA9IDA7CisgICAgICAgICAgICBicmVhazsK KyNlbmRpZiAvKiBQVVRQSVBFICovCisKKyAgICAgICAgICBjYXNlIFNORF9TSEg6ICAgICAgICAg ICAgICAgICAvKiAvUVVJRVQgKi8KKyAgICAgICAgICBjYXNlIFNORF9SRVM6ICAgICAgICAgICAg ICAgICAvKiAvUkVDT1ZFUiAocmVnZXQpICovCisgICAgICAgICAgY2FzZSBTTkRfTk9COiAgICAg ICAgICAgICAgICAgLyogL05PQkFDS1VQRklMRVMgKi8KKyAgICAgICAgICBjYXNlIFNORF9ERUw6 ICAgICAgICAgICAgICAgICAvKiAvREVMRVRFICovCisgICAgICAgICAgY2FzZSBTTkRfVVBEOiAg ICAgICAgICAgICAgICAgLyogL1VQREFURSAqLworICAgICAgICAgIGNhc2UgU05EX1VTTjogICAg ICAgICAgICAgICAgIC8qIC9VTklRVUUgKi8KKyAgICAgICAgICBjYXNlIFNORF9OT0Q6ICAgICAg ICAgICAgICAgICAvKiAvTk9ET1RGSUxFUyAqLworICAgICAgICAgIGNhc2UgU05EX1JFQzogICAg ICAgICAgICAgICAgIC8qIC9SRUNPVkVSICovCisgICAgICAgICAgY2FzZSBTTkRfTUFJOiAgICAg ICAgICAgICAgICAgLyogL1RPLVNDUkVFTiAqLworICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7 ICAgICAgICAgICAgIC8qIEp1c3Qgc2V0IHRoZSBmbGFnICovCisgICAgICAgICAgICBicmVhazsK KworICAgICAgICAgIGNhc2UgU05EX0RJRjogICAgICAgICAgICAgICAgIC8qIC9EQVRFUy1ESUZG RVIgKi8KKwkgICAgcHZbU05EX0NPTF0uaXZhbCA9IFhZRlhfTTsJLyogTm93IGl0J3MgYSBjb2xs aXNpb24gb3B0aW9uICovCisJICAgIHB2W25dLml2YWwgPSAxOworCSAgICBicmVhazsKKworICAg ICAgICAgIGNhc2UgU05EX0NPTDogICAgICAgICAgICAgICAgIC8qIC9DT0xMSVNJT046ICovCisg ICAgICAgICAgICBpZiAoKHggPSBjbWtleShmdHBjb2x4dGFiLG5mdHBjb2x4LCIiLCIiLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhnZXR4OworCSAgICBpZiAoeCA9PSBYWUZY X00pCisJICAgICAgcHZbU05EX0RJRl0uaXZhbCA9IDE7CS8qIChwaGFzZSB0aGlzIG91dCkgKi8K KwkgICAgcHZbbl0uaXZhbCA9IHg7CQkvKiB0aGlzIHNob3VsZCBiZSBzdWZmaWNpZW50ICovCisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU05EX0VSUjogICAgICAgICAgICAg ICAgIC8qIC9FUlJPUi1BQ1RJT04gKi8KKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHFvcnAs MiwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAg ICAgICAgIHB2W25dLml2YWwgPSB4OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBj YXNlIFNORF9FWEM6ICAgICAgICAgICAgICAgICAvKiBFeGNlcHRpb24gbGlzdCAqLworICAgICAg ICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBh dHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0g LTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7 CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzKSBp ZiAoISpzKSBzID0gTlVMTDsKKyAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsK KyAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKQorICAgICAgICAgICAgICBwdltuXS5pdmFsID0g MTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgUElQRVNFTkQKKyAgICAgICAgICBjYXNl IFNORF9GTFQ6CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IC9maWx0ZXIgZ2V0dmFs IiwiIixnZXR2YWwpOworICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAg ICAgaWYgKCh4ID0gY21mbGQoIkZpbHRlciBwcm9ncmFtIHRvIHNlbmQgdGhyb3VnaCIsIiIsJnMs TlVMTCkpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgICAg ICAgICAgcyA9ICIiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGdv dG8geGdldHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAg ICAgICAgICAgIGlmIChwdltTTkRfTUFJXS5pdmFsIDwgMSkgeworICAgICAgICAgICAgICAgIHkg PSBzdHJsZW4ocyk7CisgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQg Ilx2KC4uLikiICovCisgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHk7IHgrKykgewor ICAgICAgICAgICAgICAgICAgICBpZiAoc1t4XSAhPSAnXFwnKSBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKHNbeCsxXSA9PSAndicpIGJyZWFrOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBpZiAoeCA9PSB5KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50 ZigKKyAgICAgICAgICAgICAgICAiP0ZpbHRlciBtdXN0IGNvbnRhaW4gYSByZXBsYWNlbWVudCB2 YXJpYWJsZSBmb3IgZmlsZW5hbWUuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8geGdl dHg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCpz KSB7CisgICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICAgICAgbWFr ZXN0cigmKHB2W25dLnN2YWwpLHMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBwdltuXS5pdmFsID0gMDsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3Zh bCksTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBQ SVBFU0VORCAqLworCisgICAgICAgICAgY2FzZSBTTkRfTkFNOgorICAgICAgICAgICAgaWYgKCFn ZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoZm50YWIsbmZudGFiLCIi LCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhnZXR4Owor ICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldCAvZmlsZW5hbWVzIiwiIix4KTsKKyAgICAg ICAgICAgIHB2W25dLml2YWwgPSB4OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBj YXNlIFNORF9TTUE6ICAgICAgICAgICAgICAgICAvKiBTbWFsbGVyIC8gbGFyZ2VyIHRoYW4gKi8K KyAgICAgICAgICBjYXNlIFNORF9MQVI6IHsKKwkgICAgICBDS19PRkZfVCB5OworCSAgICAgIGlm ICghZ2V0dmFsKSBicmVhazsKKwkgICAgICBpZiAoKHggPSBjbW51bXcoIlNpemUgaW4gYnl0ZXMi LCIwIiwxMCwmeSx4eHN0cmluZykpIDwgMCkKKwkJZ290byB4Z2V0eDsKKwkgICAgICBwdltuXS53 dmFsID0geTsKKwkgICAgICBicmVhazsKKwkgIH0KKyAgICAgICAgICBjYXNlIFNORF9GSUw6ICAg ICAgICAgICAgICAgICAvKiBOYW1lIG9mIGZpbGUgY29udGFpbmluZyBmaWxuYW1lcyAqLworICAg ICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21pZmko Ik5hbWUgb2YgZmlsZSBjb250YWluaW5nIGxpc3Qgb2YgZmlsZW5hbWVzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAg ICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ZpbGVu YW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfSBlbHNl IGlmICh5ICYmIGlzd2lsZChzKSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJk cyBub3QgYWxsb3dlZCBCQkJcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAg ICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHMpIGlm ICghKnMpIHMgPSBOVUxMOworICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOwor ICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpCisgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAx OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNORF9NT1Y6ICAgICAgICAg ICAgICAgICAvKiBNT1ZFIGFmdGVyICovCisgICAgICAgICAgY2FzZSBTTkRfUkVOOiAgICAgICAg ICAgICAgICAgLyogUkVOQU1FIGFmdGVyICovCisgICAgICAgICAgY2FzZSBTTkRfU1JOOiB7ICAg ICAgICAgICAgICAgLyogU0VSVkVSLVJFTkFNRSAqLworICAgICAgICAgICAgICBjaGFyICogbSA9 ICIiOworICAgICAgICAgICAgICBzd2l0Y2ggKG4pIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNO RF9NT1Y6CisgICAgICAgICAgICAgICAgICBtID0KKyAgICAgICAgICAgICAgICAgICAiRGV2aWNl IGFuZC9vciBkaXJlY3RvcnkgZm9yIGluY29taW5nIGZpbGUgYWZ0ZXIgcmVjZXB0aW9uIjsKKyAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU05EX1JFTjoKKyAg ICAgICAgICAgICAgICAgIG0gPSAiTmV3IG5hbWUgZm9yIGluY29taW5nIGZpbGUgYWZ0ZXIgcmVj ZXB0aW9uIjsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug U05EX1NSTjoKKyAgICAgICAgICAgICAgICAgIG0gPSAiTmV3IG5hbWUgZm9yIHNvdXJjZSBmaWxl IG9uIHNlcnZlciBhZnRlciByZWNlcHRpb24iOworICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAg ICAgICAgICBpZiAoKHggPSBjbWZsZChtLCAiIiwgJnMsIG4gPT0gU05EX01PViA/IHh4c3RyaW5n IDogTlVMTCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBuID09IFNORF9NT1YgPworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiP0Rlc3RpbmF0aW9uIHJlcXVpcmVkIiA6CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICI/TmV3IG5hbWUgcmVxdWlyZWQiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCksKnMgPyBicnN0cmlwKHMpIDog TlVMTCk7CisgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAocHZbbl0uc3ZhbCkgPyAxIDogMDsK KyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorI2lmbmRlZiBOT0NTRVRTCisgICAg ICAgICAgY2FzZSBTTkRfQ1NMOiAgICAgICAgICAgICAgICAgLyogTG9jYWwgY2hhcmFjdGVyIHNl dCAqLworICAgICAgICAgIGNhc2UgU05EX0NTUjogICAgICAgICAgICAgICAgIC8qIFJlbW90ZSAo c2VydmVyKSBjaGFyc2V0ICovCisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShmY3N0YWIsbmZp bGMsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybigoeCA9PSAtMykg PyAtMiA6IHgpOworICAgICAgICAgICAgaWYgKG4gPT0gU05EX0NTTCkKKyAgICAgICAgICAgICAg eF9jc2wgPSB4OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB4X2NzciA9IHg7Cisg ICAgICAgICAgICB4X3hsYSA9IDE7ICAgICAgICAgICAgICAgICAgLyogT3ZlcnJpZGVzIGdsb2Jh bCBPRkYgc2V0dGluZyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNO RF9YUEE6ICAgICAgICAgICAgICAgICAvKiBUcmFuc3BhcmVudCAqLworICAgICAgICAgICAgeF94 bGEgPSAgMDsKKyAgICAgICAgICAgIHhfY3NyID0gLTE7CisgICAgICAgICAgICB4X2NzbCA9IC0x OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgICAgICAg Y2FzZSBTTkRfTk1MOgorICAgICAgICAgICAgaWYgKCh4ID0gY21vZmkoIkxvY2FsIGZpbGVuYW1l IiwiLSIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAg ICAgICAgICBtYWtlc3RyKCZmdHBfbm1sLHMpOworICAgICAgICAgICAgYnJlYWs7CisKKwkgIGNh c2UgU05EX1BBVDoJCQkvKiAvUEFUVEVSTjogKi8KKwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwor CSAgICBpZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIioiLCAmcywgeHhzdHJpbmcpKSA8IDApCisJ ICAgICAgZ290byB4Z2V0eDsKKwkgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLCpzID8gYnJzdHJp cChzKSA6IE5VTEwpOworCSAgICBwdltuXS5pdmFsID0gKHB2W25dLnN2YWwpID8gMSA6IDA7CisJ ICAgIGJyZWFrOworCisJICBjYXNlIFNORF9OTFM6CQkJLyogL05MU1QgKi8KKyAgICAgICAgICAg IHB2W25dLml2YWwgPSAxOwkJLyogVXNlIE5MU1QgKi8KKwkgICAgcHZbU05EX01MU10uaXZhbCA9 IDA7CS8qIERvbid0IHVzZSBNTFNEICovCisJICAgIGJyZWFrOworCisJICBjYXNlIFNORF9NTFM6 CQkJLyogL01MU0QgKi8KKyAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOwkJLyogVXNlIE1MU0Qg Ki8KKwkgICAgcHZbU05EX05MU10uaXZhbCA9IDA7CS8qIERvbid0IHVzZSBOTFNUICovCisJICAg IGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogL0FG VEVSLCAvUEVSTUlTU0lPTlMsIGV0Yy4uLiAqLworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnks IFwiJXNcIiB3b3JrcyBvbmx5IHdpdGggW01dUFVUXG4iLGF0bWJ1Zik7CisgICAgICAgICAgICB4 ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgfQorICAgIGxp bmVbMF0gPSBOVUw7CisgICAgY21hcmcgPSBsaW5lOworICAgIGNtYXJnMiA9IGFzbmFtYnVmOwor ICAgIHMgPSBsaW5lOworLyoKKyAgRm9yIEdFVCwgd2Ugd2FudCB0byBwYXJzZSBhbiBvcHRpb25h bCBhcy1uYW1lLCBsaWtlIHdpdGggUFVULgorICBGb3IgTUdFVCwgd2UgbXVzdCBwYXJzZSBhIGxp c3Qgb2YgbmFtZXMsIGFuZCB0aGVuIHNlbmQgTkxTVCBvciBNTFNECisgIGNvbW1hbmRzIGZvciBl YWNoIG5hbWUgc2VwYXJhdGVseS4KKyovCisgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeyAg ICAgICAgICAgLyogSG93IGRpZCB3ZSBnZXQgb3V0IG9mIHN3aXRjaCBsb29wICovCisgICAgICBj YXNlIF9DTUZMRDogICAgICAgICAgICAgICAgICAgICAgLyogRmllbGQgKi8KKyAgICAgICAgaWYg KCFnZXRvbmUpIHsKKyAgICAgICAgICAgIHMgPSBicnN0cmlwKGNtcmVzdWx0LnNyZXN1bHQpOwor ICAgICAgICAgICAgbWFrZXN0cigmKG1nZXRsaXN0W21nZXRuKytdKSxzKTsKKyAgICAgICAgICAg IHdoaWxlICgoeCA9IGNtZmxkKCJSZW1vdGUgZmlsZW5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgIT0g LTMpIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICAgICAgICBnb3Rv IHhnZXR4OworICAgICAgICAgICAgICAgIG1ha2VzdHIoJihtZ2V0bGlzdFttZ2V0bisrXSksYnJz dHJpcChzKSk7CisgICAgICAgICAgICAgICAgaWYgKG1nZXRuID49IE1HRVRNQVgpIHsKKyAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgaXRlbXMgaW4gTUdFVCBsaXN0XG4iKTsK KyAgICAgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAg ICAgIGdvdG8geGdldHg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzID0gYnJzdHJp cChjbXJlc3VsdC5zcmVzdWx0KTsKKyAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVG U0laKTsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJOYW1lIHRvIHN0b3JlIGl0IHVuZGVy IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCisgICAg ICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOworICAg ICAgICAgICAgY2tzdHJuY3B5KGFzbmFtYnVmLHMsQ0tNQVhQQVRIKzEpOworICAgICAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAg ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBfQ01DRk06ICAgICAgICAgICAgICAgICAg ICAgIC8qIENvbmZpcm1hdGlvbiAqLworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6Cisg ICAgICAgIHByaW50ZigiP1VuZXhwZWN0ZWQgZnVuY3Rpb24gY29kZTogJWRcbiIsY21yZXN1bHQu ZmNvZGUpOworICAgICAgICB4ID0gLTk7CisgICAgICAgIGdvdG8geGdldHg7CisgICAgfQorICAg IGlmIChwdltTTkRfUkVDXS5pdmFsID4gMCkgICAgICAgICAgIC8qIC9SRUNVUlNJVkUgKi8KKyAg ICAgIHJlY3Vyc2l2ZSA9IDI7CisKKyAgICBpZiAocHZbU05EX0JJTl0uaXZhbCA+IDApIHsgICAg ICAgICAvKiAvQklOQVJZIHJlYWxseSBtZWFucyBiaW5hcnkuLi4gKi8KKyAgICAgICAgZm9yY2V0 eXBlID0gMTsgICAgICAgICAgICAgICAgICAvKiBTbyBza2lwIHRoZSBuYW1lLXBhdHRlcm4gbWF0 Y2ggKi8KKyAgICAgICAgZnRwX3R5cCA9IFhZRlRfQjsgICAgICAgICAgICAgICAvKiBTZXQgYmlu YXJ5ICovCisgICAgfSBlbHNlIGlmIChwdltTTkRfVFhUXS5pdmFsID4gMCkgeyAgLyogU2ltaWxh cmx5IGZvciAvVEVYVC4uLiAqLworICAgICAgICBmb3JjZXR5cGUgPSAxOworICAgICAgICBmdHBf dHlwID0gWFlGVF9UOworICAgIH0gZWxzZSBpZiAocHZbU05EX1RFTl0uaXZhbCA+IDApIHsgIC8q IGFuZCAvVEVORVgqLworICAgICAgICBmb3JjZXR5cGUgPSAxOworICAgICAgICBmdHBfdHlwID0g RlRUX1RFTjsKKyAgICB9IGVsc2UgaWYgKGZ0cF9jbWRsaW4gJiYgZnRwX3hmZXJtb2RlID09IFhN T0RFX00pIHsKKyAgICAgICAgZm9yY2V0eXBlID0gMTsKKyAgICAgICAgZnRwX3R5cCA9IGJpbmFy eTsKKyAgICAgICAgZ19mdHBfdHlwID0gYmluYXJ5OworICAgIH0KKyAgICBpZiAocHZbU05EX0FT Tl0uaXZhbCA+IDAgJiYgcHZbU05EX0FTTl0uc3ZhbCAmJiAhYXNuYW1idWZbMF0pIHsKKyAgICAg ICAgY2hhciAqIHA7CisgICAgICAgIHAgPSBicnN0cmlwKHB2W1NORF9BU05dLnN2YWwpOyAgLyog QXMtbmFtZSAqLworICAgICAgICBja3N0cm5jcHkoYXNuYW1idWYscCxDS01BWFBBVEgrMSk7Cisg ICAgfQorICAgIGRlYnVnKEYxMTAsImZ0cCBnZXQgYXNuYW1idWYiLGFzbmFtYnVmLDApOworCisj aWZkZWYgUElQRVNFTkQKKyAgICBpZiAocHZbU05EX0NNRF0uaXZhbCA+IDApIHsgICAgICAgICAv KiAvQ09NTUFORCAtIHN0cmlwIGFueSBicmFjZXMgKi8KKyAgICAgICAgY2hhciAqIHA7CisgICAg ICAgIHAgPSBhc25hbWJ1ZjsKKyAgICAgICAgZGVidWcoRjExMCwiR0VUIC9DT01NQU5EIGJlZm9y ZSBzdHJpcHBpbmciLHAsMCk7CisgICAgICAgIHAgPSBicnN0cmlwKHApOworICAgICAgICBkZWJ1 ZyhGMTEwLCJHRVQgL0NPTU1BTkQgYWZ0ZXIgc3RyaXBwaW5nIixwLDApOworICAgICAgICBpZiAo ISpwKSB7CisgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgYSBjb21tYW5kIHRvIHdyaXRlIHRv IGlzIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8g eGdldHg7CisgICAgICAgIH0KKyAgICAgICAgcGlwZW5hbWUgPSBwOworICAgICAgICBwaXBlc2Vu ZCA9IDE7CisgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKy8qIFNldCB1cCAvTU9WRSBh bmQgL1JFTkFNRSAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIENvbmZsaWN0IGV4aXN0cyBv bmx5IGZvciBQVVQgLSByZW1vdmVkIDEzIE1hciAyMDA2IC0gZmRjICovCisgICAgaWYgKHB2W1NO RF9ERUxdLml2YWwgPiAwICYmCisgICAgICAgIChwdltTTkRfTU9WXS5pdmFsID4gMCB8fCBwdltT TkRfUkVOXS5pdmFsID4gMCkpIHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIC9ERUxFVEUgY29u ZmxpY3RzIHdpdGggL01PVkUgb3IgL1JFTkFNRVxuIik7CisgICAgICAgIHggPSAtOTsKKyAgICAg ICAgZ290byB4Z2V0eDsKKyAgICB9CisjZW5kaWYJLyogQ09NTUVOVCAqLworI2lmZGVmIENLX1RN UERJUgorICAgIGlmIChwdltTTkRfTU9WXS5pdmFsID4gMCAmJiBwdltTTkRfTU9WXS5zdmFsKSB7 CisgICAgICAgIGludCBsZW47CisgICAgICAgIGNoYXIgKiBwID0gcHZbU05EX01PVl0uc3ZhbDsK KyAgICAgICAgbGVuID0gc3RybGVuKHApOworICAgICAgICBpZiAoIWlzZGlyKHApKSB7ICAgICAg ICAgICAgICAgIC8qIENoZWNrIGRpcmVjdG9yeSAqLworI2lmZGVmIENLX01LRElSCisgICAgICAg ICAgICBjaGFyICogcyA9IE5VTEw7CisgICAgICAgICAgICBzID0gKGNoYXIgKiltYWxsb2MobGVu ICsgNCk7CisgICAgICAgICAgICBpZiAocykgeworICAgICAgICAgICAgICAgIHN0cmNweShzLHAp OyAgICAgICAgICAgIC8qIHNhZmUgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAgICAg ICAgIGlmIChzW2xlbi0xXSAhPSAnOicpIHsgc1tsZW4rK10gPSAnOic7IHNbbGVuXSA9IE5VTDsg fQorI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAoc1tsZW4tMV0gIT0gJy8nKSB7IHNbbGVuKytd ID0gJy8nOyBzW2xlbl0gPSBOVUw7IH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgICAg ICAgICAgICAgIHNbbGVuKytdID0gJ1gnOworICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsK KyNpZmRlZiBOT01LRElSCisgICAgICAgICAgICAgICAgeCA9IC0xOworI2Vsc2UKKyAgICAgICAg ICAgICAgICB4ID0gem1rZGlyKHMpOworI2VuZGlmIC8qIE5PTUtESVIgKi8KKyAgICAgICAgICAg ICAgICBmcmVlKHMpOworICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAg ICAgICAgICBwcmludGYoIj9DYW4ndCBjcmVhdGUgXCIlc1wiXG4iLHApOworICAgICAgICAgICAg ICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIHByaW50ZigiP0Rp cmVjdG9yeSBcIiVzXCIgbm90IGZvdW5kXG4iLHApOworICAgICAgICAgICAgeCA9IC05OworICAg ICAgICAgICAgZ290byB4Z2V0eDsKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworICAgICAgICB9Cisg ICAgICAgIG1ha2VzdHIoJnJjdl9tb3ZlLHApOworICAgICAgICBtb3ZpbmcgPSAxOworICAgIH0K KyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworICAgIGlmIChwdltTTkRfUkVOXS5pdmFsID4gMCkg eyAgICAgICAgIC8qIC9SRU5BTUUgKi8KKyAgICAgICAgY2hhciAqIHAgPSBwdltTTkRfUkVOXS5z dmFsOworICAgICAgICBpZiAoIXApIHAgPSAiIjsKKyAgICAgICAgaWYgKCEqcCkgeworICAgICAg ICAgICAgcHJpbnRmKCI/TmV3IG5hbWUgcmVxdWlyZWQgZm9yIC9SRU5BTUVcbiIpOworICAgICAg ICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgfQorICAgICAg ICBwID0gYnJzdHJpcChwKTsKKyNpZm5kZWYgTk9TUEwKKyAgICAvKiBJZiBuYW1lIGdpdmVuIGlz IHdpbGQsIHJlbmFtZSBzdHJpbmcgbXVzdCBjb250YWluIHZhcmlhYmxlcyAqLworICAgICAgICBp ZiAobWdldCAmJiAhZ2V0b25lKSB7CisgICAgICAgICAgICBjaGFyICogcyA9IHRtcGJ1ZjsKKyAg ICAgICAgICAgIHggPSBUTVBCVUZTSVo7CisgICAgICAgICAgICB6enN0cmluZyhwLCZzLCZ4KTsK KyAgICAgICAgICAgIGlmICghc3RyY21wKHRtcGJ1ZixwKSkgeworICAgICAgICAgICAgICAgIHBy aW50ZigKKyAgICAiPy9SRU5BTUUgZm9yIGZpbGUgZ3JvdXAgbXVzdCBjb250YWluIHZhcmlhYmxl cyBzdWNoIGFzIFxcdihmaWxlbmFtZSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgIHJlbmFtaW5n ID0gMTsKKyAgICAgICAgbWFrZXN0cigmcmN2X3JlbmFtZSxwKTsKKyAgICAgICAgZGVidWcoRjEx MCwiRlRQIHJjdl9yZW5hbWUiLHJjdl9yZW5hbWUsMCk7CisgICAgfQorICAgIGlmICghY21hcmdb MF0gJiYgbWdldG4gPT0gMCAmJiBnZXRvbmUgJiYgcHZbU05EX0ZJTF0uaXZhbCA8IDEpIHsKKyAg ICAgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWQgYnV0IG5vdCBnaXZlblxuIik7CisgICAg ICAgIHggPSAtOTsKKyAgICAgICAgZ290byB4Z2V0eDsKKyAgICB9IGVsc2UgaWYgKChjbWFyZ1sw XSB8fCBtZ2V0biA+IDApICYmIHB2W1NORF9GSUxdLml2YWwgPiAwKSB7CisgICAgICAgIHByaW50 ZigiP1lvdSBjYW4ndCBnaXZlIGJvdGggL0xJU1RGSUxFIGFuZCBhIHJlbW90ZSBmaWxlbmFtZVxu Iik7CisgICAgICAgIHggPSAtOTsKKyAgICAgICAgZ290byB4Z2V0eDsKKyAgICB9CisgICAgQ0hF Q0tDT05OKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgY29ubmVjdGlvbiAqLwor CisgICAgaWYgKHB2W1NORF9DT0xdLml2YWwgPiAtMSkKKyAgICAgIHhfZm5jID0gcHZbU05EX0NP TF0uaXZhbDsKKworI2lmbmRlZiBOT1NQTAorICAgIC8qIElmIGFzLW5hbWUgZ2l2ZW4gZm9yIE1H RVQsIGFzLW5hbWUgbXVzdCBjb250YWluIHZhcmlhYmxlcyAqLworICAgIGlmIChtZ2V0ICYmICFn ZXRvbmUgJiYgYXNuYW1idWZbMF0gJiYgeF9mbmMgIT0gWFlGWF9BKSB7CisgICAgICAgIGNoYXIg KiBzID0gdG1wYnVmOworICAgICAgICB4ID0gVE1QQlVGU0laOworICAgICAgICB6enN0cmluZyhh c25hbWJ1ZiwmcywmeCk7CisgICAgICAgIGlmICghc3RyY21wKHRtcGJ1Zixhc25hbWJ1ZikpIHsK KyAgICAgICAgICAgIHByaW50ZigKKyAgICAiP0FzLW5hbWUgZm9yIE1HRVQgbXVzdCBjb250YWlu IHZhcmlhYmxlcyBzdWNoIGFzIFxcdihmaWxlbmFtZSlcbiIKKyAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAg fQorICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisvKiBkb2dldDogKi8KKworICAgIGlmIChw dltTTkRfU0hIXS5pdmFsID4gMCB8fCBmdHBfbm1sKSB7IC8qIEdFVCAvUVVJRVQuLi4gKi8KKyAg ICAgICAgZmRpc3BsYSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGlzcGxhID0gMTsKKyAg ICAgICAgaWYgKG1kZWwgfHwgZnRwX2RlYikKKwkgIGZkaXNwbGEgPSBYWUZEX0I7CisgICAgfQor ICAgIGRlbGV0aW5nID0gMDsKKyAgICBpZiAocHZbU05EX0RFTF0uaXZhbCA+IDApICAgICAgICAg ICAvKiAvREVMRVRFIHdhcyBzcGVjaWZpZWQgKi8KKyAgICAgIGRlbGV0aW5nID0gMTsKKyAgICBp ZiAocHZbU05EX0VYQ10uaXZhbCA+IDApCisgICAgICBtYWtlbGlzdChwdltTTkRfRVhDXS5zdmFs LHJjdmV4Y2VwdCxOU05ERVhDRVBUKTsKKyAgICBpZiAocHZbU05EX1NNQV0ud3ZhbCA+IC0xKQor ICAgICAgZ2V0c21hbGxlciA9IHB2W1NORF9TTUFdLnd2YWw7CisgICAgaWYgKHB2W1NORF9MQVJd Lnd2YWwgPiAtMSkKKyAgICAgIGdldGxhcmdlciA9IHB2W1NORF9MQVJdLnd2YWw7CisgICAgaWYg KHB2W1NORF9OQU1dLml2YWwgPiAtMSkKKyAgICAgIHhfY252ID0gcHZbU05EX05BTV0uaXZhbDsK KyAgICBpZiAocHZbU05EX0VSUl0uaXZhbCA+IC0xKQorICAgICAgZ2V0ZXJyb3IgPSBwdltTTkRf RVJSXS5pdmFsOworICAgIGlmIChwdltTTkRfTUFJXS5pdmFsID4gLTEpCisgICAgICB0b3NjcmVl biA9IDE7CisKKyAgICBpZiAocHZbU05EX05MU10uaXZhbCA+IDApIHsJCS8qIEZvcmNlIE5MU1Qg b3IgTUxTRD8gKi8KKwltZ2V0bWV0aG9kID0gU05EX05MUzsKKwltZ2V0Zm9yY2VkID0gMTsKKyAg ICB9IGVsc2UgaWYgKHB2W1NORF9NTFNdLml2YWwgPiAwKSB7CisJbWdldG1ldGhvZCA9IFNORF9N TFM7CisJbWdldGZvcmNlZCA9IDE7CisgICAgfQorCisjaWZkZWYgRlRQX1JFU1RBUlQKKyAgICBp ZiAocHZbU05EX1JFU10uaXZhbCA+IDApIHsKKyAgICAgICAgaWYgKCFmdHBfdHlwKSB7CisgICAg ICAgICAgICBwcmludGYoIj9Tb3JyeSwgR0VUIC9SRUNPVkVSIHJlcXVpcmVzIGJpbmFyeSBtb2Rl XG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdldHg7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAvKiBOb3QgdHJ1ZSAtIHRoZSBmYWN0IHRoYXQgdGhlIGluaXRp YWwgUkVTVCBmYWlscyBkb2VzIG5vdCBtZWFuICovCisgICAgICAgIC8qIGl0IHdpbGwgZmFpbCBo ZXJlLiAgKi8KKyAgICAgICAgfSBlbHNlIGlmICghb2tyZXN0YXJ0KSB7CisgICAgICAgICAgICBw cmludGYoIldBUk5JTkc6IFNlcnZlciBtaWdodCBub3Qgc3VwcG9ydCByZXN0YXJ0Li4uXG4iKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0KKyAgICAgICAgcmVzdGFydCA9IDE7Cisg ICAgfQorI2VuZGlmIC8qIEZUUF9SRVNUQVJUICovCisKKyNpZmRlZiBQSVBFU0VORAorICAgIGlm IChwdltTTkRfRkxUXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIEhhdmUgU0VORCBGSUxURVI/ICov CisgICAgICAgIGlmIChwaXBlc2VuZCkgeworICAgICAgICAgICAgcHJpbnRmKCI/U3dpdGNoIGNv bmZsaWN0OiAvRklMVEVSIGFuZCAvQ09NTUFORFxuIik7CisgICAgICAgICAgICB4ID0gLTk7Cisg ICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgICAgIG1ha2VzdHIoJnJjdmZp bHRlcixwdltTTkRfRkxUXS5zdmFsKTsKKyAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCAvRklM VEVSIiwgcmN2ZmlsdGVyLCAwKTsKKyAgICB9CisgICAgaWYgKHJjdmZpbHRlciB8fCBwaXBlc2Vu ZCkgeyAgICAgICAgLyogL1JFU1RBUlQgKi8KKyNpZmRlZiBGVFBfUkVTVEFSVAorICAgICAgICBp ZiAocmVzdGFydCkgeyAgICAgICAgICAgICAgICAgIC8qIHdpdGggcGlwZXMgb3IgZmlsdGVycyAq LworICAgICAgICAgICAgcHJpbnRmKCI/U3dpdGNoIGNvbmZsaWN0OiAvRklMVEVSIG9yIC9DT01N QU5EIGFuZCAvUkVDT1ZFUlxuIik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBn b3RvIHhnZXR4OworICAgICAgICB9CisjZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KKyAgICAgICAg aWYgKHB2W1NORF9VUERdLml2YWwgPiAwIHx8IHhfZm5jID09IFhZRlhfTSB8fCB4X2ZuYyA9PSBY WUZYX1UpIHsKKyAgICAgICAgICAgIHByaW50ZigKKwkJIj9Td2l0Y2ggY29uZmxpY3Q6IC9GSUxU RVIgb3IgL0NPTU1BTkQgYW5kIERhdGUgQ2hlY2tpbmdcbiIpOworICAgICAgICAgICAgeCA9IC05 OworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBQ SVBFU0VORCAqLworCisgICAgdGZjID0gKENLX09GRl9UKTA7CQkJLyogSW5pdGlhbGl6ZSBzdGF0 cyBhbmQgY291bnRlcnMgKi8KKyAgICBmaWxjbnQgPSAwOworICAgIHBrdG51bSA9IDA7CisgICAg cnBhY2tldHMgPSAwTDsKKworICAgIGlmIChwdltTTkRfRklMXS5pdmFsID4gMCkgeworICAgICAg ICBpZiAoem9wZW5pKFpNRklMRSxwdltTTkRfRklMXS5zdmFsKSA8IDEpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTEsImZ0cCBnZXQgY2FuJ3Qgb3BlbiBsaXN0ZmlsZSIscHZbU05EX0ZJTF0uc3Zh bCxlcnJubyk7CisgICAgICAgICAgICBwcmludGYoIj9GYWlsdXJlIHRvIG9wZW4gbGlzdGZpbGUg LSBcIiVzXCJcbiIscHZbU05EX0ZJTF0uc3ZhbCk7CisgICAgICAgICAgICB4ID0gLTk7CisgICAg ICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgICAgIGlmICh6c2lubChaTUZJTEUs dG1wYnVmLENLTUFYUEFUSCkgPCAwKSB7IC8qIFJlYWQgYSBsaW5lICovCisgICAgICAgICAgICB6 Y2xvc2UoWk1GSUxFKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhaWxlZCAqLworICAgICAg ICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBsaXN0ZmlsZSBFT0YiLHB2W1NORF9GSUxdLnN2YWws MCk7CisgICAgICAgICAgICBwcmludGYoIj9FbXB0eSBsaXN0ZmlsZSAtIFwiJXNcIlxuIixwdltT TkRfRklMXS5zdmFsKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdl dHg7CisgICAgICAgIH0KKyAgICAgICAgbGlzdGZpbGUgPSAxOworICAgICAgICBkZWJ1ZyhGMTEw LCJmdHAgZ2V0IGxpc3RmaWxlIGZpcnN0Iix0bXBidWYsMCk7CisgICAgICAgIG1ha2VzdHIoJiht Z2V0bGlzdFswXSksdG1wYnVmKTsKKyAgICB9CisgICAgdDAgPSBnbXN0aW1lcigpOyAgICAgICAg ICAgICAgICAgICAgLyogUmVjb3JkIHN0YXJ0aW5nIHRpbWUgKi8KKworICAgIHVwZGF0aW5nID0g MDsJCQkvKiBDaGVja2luZyBkYXRlcz8gKi8KKyAgICBpZiAocHZbU05EX1VQRF0uaXZhbCA+IDAg fHwgKCFtZGVsICYmIHhfZm5jID09IFhZRlhfVSkpCisgICAgICB1cGRhdGluZyA9IDE7CisgICAg aWYgKHB2W1NORF9ESUZdLml2YWwgPiAwIHx8IHhfZm5jID09IFhZRlhfTSkKKyAgICAgIHVwZGF0 aW5nID0gMjsKKyAgICBpZiAodXBkYXRpbmcpCQkJLyogVGhlc2Ugc3dpdGNoZXMgZm9yY2UgRlRQ IERBVEVTIE9OICovCisgICAgICBmdHBfZGF0ZXMgfD0gMjsKKworICAgIHdoYXQgPSBtZGVsID8g V19GVFB8V19GVF9ERUxFIDogV19SRUNWfFdfRlRQOyAvKiBXaGF0IHdlJ3JlIGRvaW5nICovCisK KyAgICBjYW5jZWxncm91cCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBHcm91cCBub3QgY2Fu Y2VsZWQgeWV0ICovCisgICAgaWYgKCEoZnRwX3hmZXJtb2RlID09IFhNT0RFX0EgJiYgcGF0dGVy bnMgJiYgZ2V0X2F1dG8gJiYgIWZvcmNldHlwZSkpCisgICAgICBjaGFuZ2V0eXBlKGZ0cF90eXAs MCk7CQkvKiBDaGFuZ2UgdG8gcmVxdWVzdGVkIHR5cGUgKi8KKyAgICBiaW5hcnkgPSBmdHBfdHlw OyAgICAgICAgICAgICAgICAgICAvKiBGb3IgZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCisgICAg Zmlyc3QgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIE1HRVQgbGlzdCAqLwor ICAgIGRvbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvb3AgY29udHJvbCAq LworCisjaWZkZWYgQ0tfVE1QRElSCisgICAgaWYgKGRsZGlyICYmICFmX3RtcGRpcikgeyAgICAg ICAgICAgLyogSWYgdGhleSBoYXZlIGEgZG93bmxvYWQgZGlyZWN0b3J5ICovCisgICAgICAgIGlm ICgocyA9IHpndGRpcigpKSkgeyAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgZGlyZWN0b3J5ICov CisgICAgICAgICAgICBpZiAoemNoZGlyKGRsZGlyKSkgeyAgICAgICAgLyogQ2hhbmdlIHRvIGRv d25sb2FkIGRpcmVjdG9yeSAqLworICAgICAgICAgICAgICAgIGNrc3RybmNweShzYXZkaXIscyxU TVBESVJMRU4pOworICAgICAgICAgICAgICAgIGZfdG1wZGlyID0gMTsgICAgICAgICAgIC8qIFJl bWVtYmVyIHRoYXQgd2UgZGlkIHRoaXMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworICAgIGlmIChmdHBfbm1sKSB7ICAgICAgICAg ICAgICAgICAgICAgIC8qIC9OQU1FTElTVCAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgR0VU IGZ0cF9ubWwiLGZ0cF9ubWwsMCk7CisgICAgICAgIGlmIChmdHBfbm1sWzBdID09ICctJyAmJiBm dHBfbm1sWzFdID09IDApCisgICAgICAgICAgZnBfbm1sID0gc3Rkb3V0OworICAgICAgICBlbHNl CisgICAgICAgICAgZnBfbm1sID0gZm9wZW4oZnRwX25tbCwgIndiIik7CisgICAgICAgIGlmICgh ZnBfbm1sKSB7CisgICAgICAgICAgICBwcmludGYoIj8lczogJXNcbiIsZnRwX25tbCxja19lcnJz dHIoKSk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisgICAgfQorICAgIHdo aWxlICghZG9uZSAmJiAhY2FuY2VsZ3JvdXApIHsgICAgIC8qIExvb3AgZm9yIGFsbCBmaWxlcyAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIHVudGlsIGNh bmNlbGVkLiAqLworI2lmZGVmIEZUUF9QUk9YWQorICAgICAgICAvKiBkbyBzb21ldGhpbmcgaGVy ZSBpZiBwcm94eSAqLworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworCisgICAgICAgIHJzX2xlbiA9 IChDS19PRkZfVCkwOwkJLyogUkVHRVQgcG9zaXRpb24gKi8KKyAgICAgICAgY2FuY2VsZmlsZSA9 IDA7ICAgICAgICAgICAgICAgICAvKiBUaGlzIGZpbGUgbm90IGNhbmNlbGVkIHlldCAqLworICAg ICAgICBoYXNwYXRoID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFJlY2FsY3VsYXRlIHRoaXMg ZWFjaCB0aW1lIHRocnUgKi8KKworICAgICAgICBpZiAoZ2V0b25lKSB7ICAgICAgICAgICAgICAg ICAgIC8qIEdFVCAqLworICAgICAgICAgICAgY2hhciAqIHA7CisgICAgICAgICAgICBzID0gbGlu ZTsKKyAgICAgICAgICAgIHNyYyA9IGxpbmU7ICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgbmFt ZSAqLworICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAg Z2V0IGZpbGUiLHMsMCk7CisgICAgICAgIH0gZWxzZSBpZiAobWdldCkgeyAgICAgICAgICAgICAg LyogTUdFVCAqLworICAgICAgICAgICAgc3JjID0gbWdldGxpc3RbbWdldHhdOworICAgICAgICAg ICAgZGVidWcoRjExMSwiZnRwIG1nZXQgcmVtb3RlX2ZpbGVzIEEiLHNyYyxmaXJzdCk7CisgICAg ICAgICAgICBzID0gKGNoYXIgKilyZW1vdGVfZmlsZXMoZmlyc3QsCisJCQkJICAgICAoQ0hBUiAq KW1nZXRsaXN0W21nZXR4XSwKKwkJCQkgICAgIChDSEFSICopcHZbU05EX1BBVF0uc3ZhbCwKKwkJ CQkgICAgIDAKKwkJCQkgICAgICk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgbWdldCBy ZW1vdGVfZmlsZXMgQiIscywwKTsKKyAgICAgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAg ICAgICAgaWYgKCEqcykgeworICAgICAgICAgICAgICAgIGZpcnN0ID0gMTsKKyAgICAgICAgICAg ICAgICBpZiAobGlzdGZpbGUpIHsJCS8qIE5hbWVzIGZyb20gbGlzdGZpbGUgKi8KKyAgICAgICAg ICAgICAgICAgIGFnYWluOgorICAgICAgICAgICAgICAgICAgICB0bXBidWZbMF0gPSBOVUw7Cisg ICAgICAgICAgICAgICAgICAgIHdoaWxlICghdG1wYnVmWzBdKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoenNpbmwoWk1GSUxFLHRtcGJ1ZixDS01BWFBBVEgpIDwgMCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHpjbG9zZShaTUZJTEUpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBnZXQgbGlzdGZpbGUgRU9GIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwdltTTkRfRklMXS5zdmFsLDApOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJihtZ2V0bGlzdFswXSksTlVMTCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZG9uZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgaWYgKGRvbmUpCisgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmKG1nZXRsaXN0WzBdKSx0bXBidWYpOworCQkgICAgZGVidWco RjExMCwiZnRwIGdldCBsaXN0ZmlsZSBuZXh0Iix0bXBidWYsMCk7CisgICAgICAgICAgICAgICAg ICAgIHMgPSAoY2hhciAqKXJlbW90ZV9maWxlcyhmaXJzdCwKKwkJCQkJICAgICAoQ0hBUiAqKW1n ZXRsaXN0WzBdLAorCQkJCQkgICAgIChDSEFSICopcHZbU05EX1BBVF0uc3ZhbCwKKwkJCQkJICAg ICAwCisJCQkJCSAgICAgKTsKKwkJICAgIGRlYnVnKEYxMTAsImZ0cCBtZ2V0IHJlbW90ZV9maWxl cyBDIixzLDApOworICAgICAgICAgICAgICAgICAgICBpZiAoIXMpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGZ0c2NyZWVuKFNDUl9GTiwnRicsKENLX09GRl9UKTAscyk7CisgICAgICAgICAg ICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfTVNHLChDS19PRkZfVCkwLCJGaWxlIG5v dCBmb3VuZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAgZ2V0IGZp bGUgbm90IGZvdW5kOiIscywwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYWdhaW47 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgewkJLyogTmFt ZXMgZnJvbSBjb21tYW5kIGxpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgbWdldHgrKzsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKG1nZXR4IDwgbWdldG4pCisJCSAgICAgIHMgPSAoY2hhciAq KXJlbW90ZV9maWxlcyhmaXJzdCwKKwkJCQkJICAgICAgIChDSEFSICopbWdldGxpc3RbbWdldHhd LAorCQkJCQkgICAgICAgKENIQVIgKilwdltTTkRfUEFUXS5zdmFsLAorCQkJCQkgICAgICAgMAor CQkJCQkgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorCQkgICAgICBzID0gTlVM TDsKKwkJICAgIGlmICghcykgbWdldHgrKzsKKwkJICAgIGRlYnVnKEYxMTEsImZ0cCBtZ2V0IHJl bW90ZV9maWxlcyBEIixzLG1nZXR4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgaWYgKCFzKSB7CisJCSAgICBpZiAoIWZpcnN0IHx8IG1nZXR4ID49IG1nZXRuKSB7CisJCQlk b25lID0gMTsKKwkJCWJyZWFrOworCQkgICAgfSBlbHNlIGlmIChnZXRlcnJvcikgeworCQkJc3Rh dHVzID0gMDsKKwkJCWRvbmUgPSAxOworCQkJYnJlYWs7CisJCSAgICB9IGVsc2UgeworCQkJY29u dGludWU7CisJCSAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisJZGVidWcoRjExMSwiZnRwIG1nZXQgcmVtb3RlX2ZpbGVzIEUiLHMsMCk7CisgICAgICAg IC8qCisgICAgICAgICAgVGhlIHNlbWFudGljcyBvZiBOTFNUIGFyZSBpbGwtZGVmaW5lZC4gIFN1 cHBvc2Ugd2UgaGF2ZSBqdXN0IHNlbnQKKyAgICAgICAgICBOTFNUIC9wYXRoL1thLXpdKi4gIE1v c3Qgc2VydmVycyBzZW5kIGJhY2sgbmFtZXMgbGlrZSAvcGF0aC9mb28sCisgICAgICAgICAgL3Bh dGgvYmFyLCBldGMuICBCdXQgc29tZSBzZW5kIGJhY2sgb25seSBmb28gYW5kIGJhciwgYW5kIHN1 YnNlcXVlbnQKKyAgICAgICAgICBSRVRSIGNvbW1hbmRzIGJhc2VkIG9uIHRoZSBwYXRobGVzcyBu YW1lcyBhcmUgbm90IGdvaW5nIHRvIHdvcmsuCisgICAgICAgICovCisgICAgICAgIGlmIChzZXJ2 ZXJ0eXBlID09IFNZU19VTklYICYmICFja3N0cmNocihzLCcvJykpIHsKKyAgICAgICAgICAgIGNo YXIgKiBzMzsKKyAgICAgICAgICAgIGlmICgoczMgPSBja3N0cnJjaHIobWdldGxpc3RbbWdldHhd LCcvJykpKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiwgbGVmdCA9IDQwOTY7CisgICAgICAg ICAgICAgICAgY2hhciAqIHRtcCA9IHh0bXBidWY7CisgICAgICAgICAgICAgICAgbGVuID0gczMg LSBtZ2V0bGlzdFttZ2V0eF0gKyAxOworICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXAsbWdl dGxpc3RbbWdldHhdLGxlZnQpOworICAgICAgICAgICAgICAgIHRtcCArPSBsZW47CisgICAgICAg ICAgICAgICAgbGVmdCAtPSBsZW47CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcCxzLGxl ZnQpOworICAgICAgICAgICAgICAgIHMgPSB4dG1wYnVmOworCQlkZWJ1ZyhGMTExLCJmdHAgbWdl dCByZW1vdGVfZmlsZXMgRiIscywwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBmaXJzdCA9IDA7CisgICAgICAgIHNraXB0aGlzID0gMDsgICAgICAgICAgICAgICAgICAgLyog RmlsZSBzZWxlY3Rpb24uLi4gKi8KKyAgICAgICAgbXNnID0gIiI7CisgICAgICAgIG5hbSA9IHM7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgKHdpdGhvdXQgcGF0aCkgKi8KKyAg ICAgICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIHJldHVybiBj b2RlICovCisgICAgICAgIHMyID0gIiI7CisKKyAgICAgICAgaWYgKCFnZXRvbmUgJiYgIXNraXB0 aGlzKSB7ICAgICAvKiBGb3IgTUdFVCBhbmQgTURFTEVURS4uLiAqLworICAgICAgICAgICAgY2hh ciBjLCAqIHAgPSBzOworICAgICAgICAgICAgaW50IHNydnBhdGggPSAwOworICAgICAgICAgICAg aW50IHVzcnBhdGggPSAwOworICAgICAgICAgICAgaW50IGksIGsgPSAwOworCisJICAgIGRlYnVn KEYxMTEsImZ0cCBtZ2V0IGhhdmV0eXBlIixzLGhhdmV0eXBlKTsKKwkgICAgaWYgKGhhdmV0eXBl ID4gMCAmJiBoYXZldHlwZSAhPSBGVFlQX0ZJTEUpIHsKKwkJLyogU2VydmVyIHNheXMgaXQncyBu b3QgZmlsZS4uLiAqLworCQlkZWJ1ZyhGMTEwLCJmdHAgbWdldCBub3QtYS1maWxlIixzLDApOwor CQljb250aW51ZTsKKwkgICAgfQorLyoKKyAgRXhwbGFuYXRpb246IFNvbWUgZnRwIHNlcnZlcnMg KHN1Y2ggYXMgd3UtZnRwZCkgcmV0dXJuIGEgcmVjdXJzaXZlIGxpc3QuCisgIEJ1dCBpZiB0aGUg Y2xpZW50IGRpZCBub3QgYXNrIGZvciBhIHJlY3Vyc2l2ZSBsaXN0LCB3ZSBoYXZlIHRvIGlnbm9y ZSBhbnkKKyAgc2VydmVyIGZpbGVzIHRoYXQgaW5jbHVkZSBhIHBhdGhuYW1lIHRoYXQgZXh0ZW5k cyBiZXlvbmQgYW55IHBhdGggdGhhdAorICB3YXMgaW5jbHVkZWQgaW4gdGhlIHVzZXIncyByZXF1 ZXN0LgorCisgIFVzZXIncyBmaWxlc3BlYyBpcyBibGFoIG9yIHBhdGgvYmxhaCAob3Igb3RoZXIg bm9uLVVOSVggc3ludGF4KS4gIFdlIG5lZWQgdG8KKyAgZ2V0IHRoZSB1c2VyJ3MgcGF0aCBzZWdt ZW50LiAgVGhlbiwgZm9yIGVhY2ggaW5jb21pbmcgZmlsZSwgaWYgaXQgYmVnaW5zCisgIHdpdGgg dGhlIHNhbWUgcGF0aCBzZWdtZW50LCB3ZSBtdXN0IHN0cmlwIGl0IChwb2ludCBwYXN0IGl0KS4K KyovCisgICAgICAgICAgICBzcmMgPSBtZ2V0bGlzdFttZ2V0eF07ICAgICAgLyogSW4gY2FzZSBp dCBtb3ZlZCEgKi8KKwkgICAgaWYgKHNyYykgeworCQlmb3IgKGkgPSAwOyBzcmNbaV07IGkrKykg eyAvKiBGaW5kIHJpZ2h0bW9zdCBwYXRoIHNlcGFyYXRvciAqLworCQkgICAgaWYgKGlzcGF0aHNl cChzcmNbaV0pKSAvKiBpbiB1c2VyJ3MgcGF0aG5hbWUgKi8KKwkJICAgICAgayA9IGkgKyAxOwor CQl9CisJICAgIH0gZWxzZSB7CisJCXNyYyA9ICIiOworCSAgICB9CisgICAgICAgICAgICB1c3Jw YXRoID0gazsgICAgICAgICAgICAgICAgLyogVXNlciBwYXRoIHNlZ21lbnQgbGVuZ3RoICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHVzcnBhdGgiLHNyYyx1c3JwYXRoKTsKKwor ICAgICAgICAgICAgcCA9IHM7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBmaWxlbmFt ZSAqLworICAgICAgICAgICAgd2hpbGUgKChjID0gKnArKykpIHsgICAgICAgIC8qIExvb2sgZm9y IHBhdGggaW4gc2VydmVyIGZpbGVuYW1lICovCisgICAgICAgICAgICAgICAgaWYgKGlzcGF0aHNl cChjKSkgeworCQkgICAgLyogaGFzcGF0aCsrOyAqLworICAgICAgICAgICAgICAgICAgICBuYW0g PSBwOyAgICAgICAgICAgIC8qIFBhdGhsZXNzIG5hbWUgKGZvciBja21hdGNoKSAqLworICAgICAg ICAgICAgICAgICAgICBzcnZwYXRoID0gcCAtIHM7ICAgIC8qIFNlcnZlciBwYXRoIHNlZ21lbnQg bGVuZ3RoICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg ZGVidWcoRjExMSwiZnRwIGdldCBzcnZwYXRoIixzLHNydnBhdGgpOworCisJICAgIGlmICh1c3Jw YXRoID09IDApIHsKKy8qCisgIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2Vy IHNhaWQgIm1nZXQgZm9vIiB3aGVyZSBmb28gaXMgYQorICBkaXJlY3RvcnkgbmFtZSwgYW5kIHRo ZSBzZXJ2ZXIgaXMgc2VuZGluZyBiYWNrIG5hbWVzIGxpa2UgImZvby9maWxlMSIsCisgICJmb28v ZmlsZTIiLCBldGMuICBUaGlzIGlzIGEgbmFzdHkgdHJpY2sgYnV0IGl0J3MgbmVjZXNzYXJ5IGJl Y2F1c2UgdGhlCisgIHVzZXIgY2FuJ3QgY29tcGVuc2F0ZSBieSB0eXBpbmcgIm1nZXQgZm9vLyIg YmVjYXVzZSB0aGVuIHRoZSBzZXJ2ZXIgaXMKKyAgbGlrZWx5IHRvIHNlbmQgYmFjayAiZm9vLy9m aWxlMSwgZm9vLy9maWxlMiIgZXRjLCBhbmQgd2Ugc3RpbGwgd29uJ3QKKyAgZ2V0IGEgbWF0Y2gu Li4KKyovCisJCWludCBzcmNsZW4gPSAwLCBzcnZsZW4gPSAwOworCQlpZiAoc3JjKSBzcmNsZW4g PSBzdHJsZW4oc3JjKTsKKwkJaWYgKHMpIHNydmxlbiA9IHN0cmxlbihzKTsKKwkJaWYgKHNyYyAm JiAoc3J2bGVuID4gc3JjbGVuKSkgeworCQkgICAgaWYgKCFzdHJuY21wKHNyYyxzLHNyY2xlbikg JiYgaXNwYXRoc2VwKHNbc3JjbGVuXSkpIHsKKwkJCWNoYXIgKiB0bXBzcmMgPSBOVUxMOworCQkJ dG1wc3JjID0gKGNoYXIgKiltYWxsb2Moc3JjbGVuICsgMik7CisJCQlzdHJuY3B5KHRtcHNyYyxz cmMsc3JjbGVuKTsKKwkJCXRtcHNyY1tzcmNsZW5dID0gc1tzcmNsZW5dOworCQkJdG1wc3JjW3Ny Y2xlbisxXSA9IE5VTDsKKwkJCWZyZWUobWdldGxpc3RbbWdldHhdKTsKKwkJCW1nZXRsaXN0W21n ZXR4XSA9IHRtcHNyYzsKKwkJCXRtcHNyYyA9IE5VTEw7CisJCQlzcmMgPSBtZ2V0bGlzdFttZ2V0 eF07CisJCQl1c3JwYXRoID0gc3JjbGVuKzE7CisJCSAgICB9CQkJICAgICAgCisJCX0KKwkgICAg fQorLyoKKyAgSWYgYXMtbmFtZSBub3QgZ2l2ZW4gYW5kIHNlcnZlciBmaWxlbmFtZSBpbmNsdWRl cyBwYXRoIHRoYXQgbWF0Y2hlcworICB0aGUgcGF0aG5hbWUgZnJvbSB0aGUgdXNlcidzIGZpbGUg c3BlY2lmaWNhdGlvbiwgd2UgbXVzdCB0cmltIHRoZSBjb21tb24KKyAgcGF0aCBwcmVmaXggZnJv bSB0aGUgc2VydmVyJ3MgbmFtZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgbG9jYWwgbmFtZS4KKyov CisgICAgICAgICAgICBpZiAoc3JjICYmCQkJLyogV2VkIFNlcCAyNSAxNzoyNzo0OCAyMDAyICov CisJCSFhc25hbWJ1ZlswXSAmJgorCQkhcmVjdXJzaXZlICYmCQkvKiBUaHUgU2VwIDE5IDE2OjEx OjU5IDIwMDIgKi8KKwkJKHNydnBhdGggPiAwKSAmJgorCQkhc3RybmNtcChzcmMscyx1c3JwYXRo KSkgeworICAgICAgICAgICAgICAgIHMyID0gcyArIHVzcnBhdGg7ICAgICAgIC8qIExvY2FsIG5h bWUgc2tpcHMgcGFzdCByZW1vdGUgcGF0aCAqLworICAgICAgICAgICAgfQorI2lmZGVmIENPTU1F TlQKKwkgICAgLyogVGhpcyBkb2Vzbid0IHdvcmsgaWYgdGhlIHBhdGggcHJlZml4IGNvbnRhaW5z IHdpbGRjYXJkcyEgKi8KKwkgICAgaGFzcGF0aCA9IChzcnZwYXRoID4gdXNycGF0aCk7CisjZWxz ZQorCSAgICB7CQkJCS8qIENvdW50IHBhdGggc2VnbWVudHMgaW5zdGVhZCAqLworCQlpbnQgeDEg PSAwLCB4MiA9IDA7CisJCWNoYXIgKnA7CisJCWZvciAocCA9IHM7ICpwOyBwKyspCisJCSAgaWYg KGlzcGF0aHNlcCgqcCkpIHgxKys7CisJCWZvciAocCA9IHNyYzsgKnA7IHArKykgeworCQkgICAg aWYgKGlzcGF0aHNlcCgqcCkpIHgyKys7CisJCX0KKwkJaGFzcGF0aCA9IHJlY3Vyc2l2ZSA/IHgx IHx8IHgyIDogeDEgPiB4MjsKKwkJZGVidWcoRjExMSwiZnRwIGdldCBzZXJ2ZXIgcGF0aCBzZWdt ZW50cyIscyx4MSk7CisJCWRlYnVnKEYxMTEsImZ0cCBnZXQgdXNlciAgIHBhdGggc2VnbWVudHMi LHNyYyx4Mik7CisJICAgIH0KKworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMTEsImZ0cCBnZXQgaGFzcGF0aCIscyt1c3JwYXRoLGhhc3BhdGgpOworCisgICAgICAg ICAgICBpZiAoaGFzcGF0aCkgeyAgICAgICAgICAgICAgLyogU2VydmVyIGZpbGUgaGFzIHBhdGgg c2VnbWVudHM/ICovCisgICAgICAgICAgICAgICAgaWYgKCFyZWN1cnNpdmUpIHsgICAgICAgLyog W01dR0VUIC9SRUNVUlNJVkU/ICovCisvKgorICBXZSBkaWQgbm90IGFzayBmb3IgYSByZWN1cnNp dmUgbGlzdGluZywgYnV0IHRoZSBzZXJ2ZXIgaXMgc2VuZGluZyB1cyBvbmUKKyAgYW55d2F5IChh cyB3dS1mdHBkIGlzIHdvbnQgdG8gZG8pLiAgV2UgZ2V0IGhlcmUgaWYgdGhlIGN1cnJlbnQgZmls ZW5hbWUKKyAgaW5jbHVkZXMgYSBwYXRoIHNlZ21lbnQgYmV5b25kIGFueSBwYXRoIHNlZ21lbnQg d2UgYXNrZWQgZm9yIGluIG91cgorICBub24tcmVjdXJzaXZlIFtNXUdFVCBjb21tYW5kLiAgV2Ug TVVTVCBza2lwIHRoaXMgZmlsZS4KKyovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs ImZ0cCBnZXQgc2tpcHBpbmcgYmVjYXVzZSBvZiBwYXRoIixzLDApOworICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSBpZiAoZ2V0b25lICYmICFza2lwdGhpcykgeyAvKiBHRVQgKG5vdCBNR0VUKSAqLwor ICAgICAgICAgICAgY2hhciAqIHAgPSBuYW07CisJICAgIHdoaWxlICgoYyA9ICpwKyspKSB7CS8q IEhhbmRsZSBwYXRoIGluIGxvY2FsIG5hbWUgKi8KKwkJaWYgKGlzcGF0aHNlcChjKSkgeworCQkg ICAgaWYgKHJlY3Vyc2l2ZSkgewkvKiBJZiByZWN1cnNpdmUsIGtlZXAgaXQgKi8KKwkJCWhhc3Bh dGggPSAxOworCQkJYnJlYWs7CisJCSAgICB9IGVsc2UgewkJLyogT3RoZXJ3aXNlIGxvc2UgaXQu ICovCisJCSAgICAgIG5hbSA9IHA7CisJCSAgICB9CisJCX0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHMyID0gbmFtOworICAgICAgICB9CisgICAgICAgIGlmICghKm5hbSkgICAgICAgICAg ICAgICAgICAgICAgLyogTmFtZSB3aXRob3V0IHBhdGggKi8KKyAgICAgICAgICBuYW0gPSBzOwor CisgICAgICAgIGlmICghc2tpcHRoaXMgJiYgcHZbU05EX05PRF0uaXZhbCA+IDApIHsgLyogL05P RE9URklMRVMgKi8KKyAgICAgICAgICAgIGlmIChuYW1bMF0gPT0gJy4nKQorCSAgICAgIGNvbnRp bnVlOworICAgICAgICB9CisgICAgICAgIGlmICghc2tpcHRoaXMgJiYgcmN2ZXhjZXB0WzBdKSB7 IC8qIC9FWENFUFQ6IGxpc3QgKi8KKwkgICAgaW50IHh4OworICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IE5TTkRFWENFUFQ7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghcmN2ZXhjZXB0 W2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwkJ eHggPSBja21hdGNoKHJjdmV4Y2VwdFtpXSwgbmFtLCBzZXJ2ZXJ0eXBlID09IFNZU19VTklYLCAx KTsKKwkJZGVidWcoRjExMSwiZnRwIG1nZXQgL2V4Y2VwdCBtYXRjaCIscmN2ZXhjZXB0W2ldLHh4 KTsKKyAgICAgICAgICAgICAgICBpZiAoeHgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGxvZyhG MTAwLCIgcmVmdXNlZDogZXhjZXB0aW9uIGxpc3QiLCIiLDApOworCQkgICAgbXNnID0gIlJlZnVz ZWQ6IEV4Y2VwdGlvbiBMaXN0IjsKKyAgICAgICAgICAgICAgICAgICAgc2tpcHRoaXMrKzsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIGlmICghc2tpcHRoaXMgJiYgcHZbU05EX05PQl0uaXZhbCA+ IDApIHsgLyogL05PQkFDS1VQRklMRVMgKi8KKyAgICAgICAgICAgIGlmIChja21hdGNoKAorI2lm ZGVmIENLUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgICAgICIqLn5bMC05XSp+IgorI2Vsc2UK KyAgICAgICAgICAgICAgICAgICAgICAgICIqLn4qfiIKKyNlbmRpZiAvKiBDS1JFR0VYICovCisg ICAgICAgICAgICAgICAgICAgICAgICAsbmFtLDAsMSkgPiAwKQorICAgICAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXhfeGxhKSB7ICAgICAgICAgICAgICAgICAg IC8qIElmIHRyYW5zbGF0aW9uIGlzIG9mZiAqLworICAgICAgICAgICAgeF9jc2wgPSAtMjsgICAg ICAgICAgICAgICAgIC8qIHVuc2V0IHRoZSBjaGFyc2V0cyAqLworICAgICAgICAgICAgeF9jc3Ig PSAtMjsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkoZmlsbmFtLHMsQ0tNQVhQQVRIKTsg IC8qIEZvciBcdihmaWxlbmFtZSkgKi8KKyAgICAgICAgaWYgKCEqczIpICAgICAgICAgICAgICAg ICAgICAgICAvKiBMb2NhbCBuYW1lICovCisgICAgICAgICAgczIgPSBhc25hbWJ1ZjsgICAgICAg ICAgICAgICAgLyogQXMtbmFtZSAqLworCisJaWYgKCEqczIpCQkJLyogU2F0IE5vdiAxNiAxOTox OTozOSAyMDAyICovCisJICBzMiA9IHJlY3Vyc2l2ZSA/IHMgOiBuYW07CS8qIEZyaSBKYW4gMTAg MTM6MTU6MTkgMjAwMyAqLworCisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBnZXQgZmlsbmFtICAi LHMsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBnZXQgYXNuYW1lIEEiLHMyLDApOworCisg ICAgICAgIC8qIFJlY2VpdmluZyB0byByZWFsIGZpbGUgKi8KKyAgICAgICAgaWYgKCFwaXBlc2Vu ZCAmJgorI2lmZGVmIFBJUEVTRU5ECisgICAgICAgICAgICAhcmN2ZmlsdGVyICYmCisjZW5kaWYg LyogUElQRVNFTkQgKi8KKyAgICAgICAgICAgICF0b3NjcmVlbikgeworI2lmbmRlZiBOT1NQTAor ICAgICAgICAgICAgLyogRG8gdGhpcyBoZXJlIHNvIHdlIGNhbiBkZWNpZGUgd2hldGhlciB0byBz a2lwICovCisgICAgICAgICAgICBpZiAoY21kX3F1b3RpbmcgJiYgIXNraXB0aGlzICYmIGFzbmFt YnVmWzBdKSB7CisgICAgICAgICAgICAgICAgaW50IG47IGNoYXIgKnA7CisgICAgICAgICAgICAg ICAgbiA9IFRNUEJVRlNJWjsKKyAgICAgICAgICAgICAgICBwID0gdG1wYnVmOworICAgICAgICAg ICAgICAgIHp6c3RyaW5nKGFzbmFtYnVmLCZwLCZuKTsKKyAgICAgICAgICAgICAgICBzMiA9IHRt cGJ1ZjsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGFzbmFtZSBCIixzMix1 cGRhdGluZyk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworCSAgICBsb2Nh bCA9ICpzMiA/IHMyIDogczsKKworCSAgICBpZiAoIXNraXB0aGlzICYmIHhfZm5jID09IFhZRlhf RCkgeyAvKiBGaWxlIENvbGxpc2lvbiA9IERpc2NhcmQgKi8KKwkJQ0tfT0ZGX1QgeDsKKwkJeCA9 IHpjaGtpKGxvY2FsKTsKKwkJZGVidWcoRjExMSwiZnRwIGdldCBESVNDQVJEIHpjaGtpIixsb2Nh bCx4KTsKKwkJaWYgKHggPiAtMSkgeworCQkgICAgc2tpcHRoaXMrKzsKKwkJICAgIGRlYnVnKEYx MTAsImZ0cCBnZXQgc2tpcCBuYW1lIixsb2NhbCwwKTsKKwkJICAgIHRsb2coRjEwMCwiIHJlZnVz ZWQ6IG5hbWUiLCIiLDApOworCQkgICAgbXNnID0gIlJlZnVzZWQ6IE5hbWUiOworCQl9CisJICAg IH0KKworI2lmZGVmIERPVVBEQVRFCisgICAgICAgICAgICBpZiAoIXNraXB0aGlzICYmIHVwZGF0 aW5nKSB7IC8qIElmIHVwZGF0aW5nIGFuZCBub3QgeWV0IHNraXBwaW5nICovCisgICAgICAgICAg ICAgICAgaWYgKHpjaGtpKGxvY2FsKSA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSBj aGttb2R0aW1lKGxvY2FsLHMsMCk7CisjaWZkZWYgREVCVUcKKwkJICAgIGlmIChkZWJsb2cpIHsK KwkJCWlmICh1cGRhdGluZyA9PSAyKQorCQkJICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IC9kYXRlcy1k aWZmIGNoa21vZHRpbWUiLGxvY2FsLHgpOworCQkJZWxzZQorCQkJICBkZWJ1ZyhGMTExLCJmdHAg Z2V0IC91cGRhdGUgY2hrbW9kdGltZSIsbG9jYWwseCk7CisJCSAgICB9CisjZW5kaWYgLyogREVC VUcgKi8KKwkJICAgIGlmICgodXBkYXRpbmcgPT0gMSAmJiB4ID4gMCkgfHwgIC8qIC9VUERBVEUg Ki8KKwkJCSh1cGRhdGluZyA9PSAyICYmIHggPT0gMSkpIHsgLyogL0RBVEVTLURJRkZFUiAqLwor CQkJc2tpcHRoaXMrKzsKKwkJCXRsb2coRjEwMCwiIHJlZnVzZWQ6IGRhdGUiLCIiLDApOworCQkJ bXNnID0gIlJlZnVzZWQ6IERhdGUiOworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiZnRwIGdldCBza2lwIGRhdGUiLGxvY2FsLDApOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIERPVVBEQVRFICovCisg ICAgICAgIH0KKyAgICAgICAgLyogSW5pdGlhbGl6ZSBmaWxlIHNpemUgdG8gLTEgaW4gY2FzZSBz ZXJ2ZXIgZG9lc24ndCB1bmRlcnN0YW5kICovCisgICAgICAgIC8qIFNJWkUgY29tbWFuZCwgc28g eHhzY3JlZW4oKSB3aWxsIGtub3cgd2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSAqLworCisgICAgICAg IGZzaXplID0gKENLX09GRl9UKS0xOworCisJLyogQXNrIGZvciBzaXplIG5vdyBvbmx5IGlmIHdl IG5lZWQgaXQgZm9yIHNlbGVjdGlvbiAqLworCS8qIGJlY2F1c2UgaWYgeW91J3JlIGdvaW5nIHRo cnUgYSBsaXN0IDEwMCwwMDAgZmlsZXMgdG8gc2VsZWN0ICovCisJLyogYSBzbWFsbCBzdWJzZXQs IDEwMCwwMDAgU0laRSBjb21tYW5kcyBjYW4gdGFrZSBob3Vycy4uLiAqLworCisJZ290c2l6ZSA9 IDA7CisgICAgICAgIGlmICghbWRlbCAmJiAhc2tpcHRoaXMgJiYgICAgICAgIC8qIERvbid0IG5l ZWQgc2l6ZSBmb3IgREVMRS4uLiAqLworCSAgICAoZ2V0c21hbGxlciA+PSAoQ0tfT0ZGX1QpMCAg fHwgZ2V0bGFyZ2VyID49IChDS19PRkZfVCkwKSkgeworCSAgICBpZiAoaGF2ZXNpemUgPj0gKENL X09GRl9UKTApIHsgLyogQWxyZWFkeSBoYXZlIGZpbGUgc2l6ZT8gKi8KKwkJZnNpemUgPSBoYXZl c2l6ZTsKKwkJZ290c2l6ZSA9IDE7CisJICAgIH0gZWxzZSB7CQkJLyogTm8gLSBtdXN0IGFzayBz ZXJ2ZXIgKi8KKwkJLyoKKwkJICBQcmlvciB0byBzZW5kaW5nIHRoZSBOTFNUIGNvbW1hbmQgd2Ug bmVjZXNzYXJpbHkgcHV0IHRoZQorCQkgIHNlcnZlciBpbnRvIEFTQ0lJIG1vZGUuICBXZSBtdXN0 IG5vdyBwdXQgaXQgYmFjayBpbnRvIHRoZQorCQkgIHRoZSByZXF1ZXN0ZWQgbW9kZSBzbyB0aGUg dXBjb21pbmcgU0laRSBjb21tYW5kIHJldHVybnMKKwkJICByaWdodCBraW5kIG9mIHNpemU7IHRo aXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yCisJCSAgR0VUIC9SRUNPVkVSOyBvdGhlcndp c2UgdGhlIHNlcnZlciByZXR1cm5zIHRoZSAiQVNDSUkiIHNpemUKKwkJICBvZiB0aGUgZmlsZSwg cmF0aGVyIHRoYW4gaXRzIHRydWUgc2l6ZS4KKwkJKi8KKwkJY2hhbmdldHlwZShmdHBfdHlwLDAp OwkvKiBDaGFuZ2UgdG8gcmVxdWVzdGVkIHR5cGUgKi8KKwkJZnNpemUgPSAoQ0tfT0ZGX1QpLTE7 CisJCWlmIChzaXplb2spIHsKKwkJICAgIHggPSBmdHBjbWQoIlNJWkUiLHMseF9jc2wseF9jc3Is ZnRwX3ZibSk7CisJCSAgICBpZiAoeCA9PSBSRVBMWV9DT01QTEVURSkgeworCQkJZnNpemUgPSBj a2F0b2ZzKCZmdHBfcmVwbHlfc3RyWzRdKTsKKwkJCWdvdHNpemUgPSAxOworCQkgICAgfQorCQl9 CisJICAgIH0KKyAgICAgICAgICAgIGlmIChnb3RzaXplKSB7CisgICAgICAgICAgICAgICAgaWYg KGdldHNtYWxsZXIgPj0gKENLX09GRl9UKTAgJiYgZnNpemUgPj0gZ2V0c21hbGxlcikKKyAgICAg ICAgICAgICAgICAgIHNraXB0aGlzKys7CisgICAgICAgICAgICAgICAgaWYgKGdldGxhcmdlciA+ PSAoQ0tfT0ZGX1QpMCAmJiBmc2l6ZSA8PSBnZXRsYXJnZXIpCisgICAgICAgICAgICAgICAgICBz a2lwdGhpcysrOworICAgICAgICAgICAgICAgIGlmIChza2lwdGhpcykgeworICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHNraXAgc2l6ZSIscyxmc2l6ZSk7CisgICAgICAg ICAgICAgICAgICAgIHRsb2coRjEwMCwiIHJlZnVzZWQ6IHNpemUiLCIiLDApOworICAgICAgICAg ICAgICAgICAgICBtc2cgPSAiUmVmdXNlZDogU2l6ZSI7CisgICAgICAgICAgICAgICAgfQorI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0b25lKSB7CisgICAgICAgICAg ICAgICAgLyogU0laRSBjYW4gZmFpbCBmb3IgbWFueSByZWFzb25zLiAgRG9lcyB0aGUgZmlsZSBl eGlzdD8gKi8KKyAgICAgICAgICAgICAgICB4ID0gZnRwY21kKCJOTFNUIixzLHhfY3NsLHhfY3Ny LGZ0cF92Ym0pOworICAgICAgICAgICAgICAgIGlmICh4ICE9IFJFUExZX0NPTVBMRVRFKSB7Cisg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiPj4+IEZJTEUgTk9UIEZPVU5EOiAlc1xuIixzKTsK KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc2tpcHRo aXMpIHsgICAgICAgICAgICAgICAgIC8qIFNraXBwaW5nIHRoaXMgZmlsZT8gKi8KKyAgICAgICAg ICAgIGZ0c2NyZWVuKFNDUl9GTiwnRicsKENLX09GRl9UKTAscyk7CisgICAgICAgICAgICBpZiAo bXNnKQorICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfU1QsU1RfRVJSLChDS19PRkZfVCkwLG1z Zyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGZ0c2NyZWVuKFNDUl9TVCxTVF9T S0lQLChDS19PRkZfVCkwLHMpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKGZwX25tbCkgeyAgICAgICAgICAgICAgICAgICAvKiAvTkFNRUxJU1Qgb25seSAt IG5vIHRyYW5zZmVyICovCisgICAgICAgICAgICBmcHJpbnRmKGZwX25tbCwiJXNcbiIscyk7Cisg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVjdXJzaXZlICYm IGhhc3BhdGggJiYgIXBpcGVzZW5kCisjaWZkZWYgUElQRVNFTkQKKyAgICAgICAgICAgICYmICFy Y3ZmaWx0ZXIKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgICAgICAgICAgKSB7CisJICAgIGlu dCB4OworCisjaWZkZWYgTk9NS0RJUgorCSAgICB4ID0gLTE7CisjZWxzZQorICAgICAgICAgICAg eCA9IHpta2RpcihzKTsJCS8qIFRyeSB0byBtYWtlIHRoZSBkaXJlY3RvcnkgKi8KKyNlbmRpZiAv KiBOT01LRElSICovCisKKyAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAg IHJjID0gLTE7ICAgICAgICAgICAgICAgIC8qIEZhaWx1cmUgaXMgZmF0YWwgKi8KKyAgICAgICAg ICAgICAgICBpZiAoZ2V0ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsK KyAgICAgICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX0VNLDAsKENLX09GRl9UKTAsCisJCQkg ICAgICJEaXJlY3RvcnkgY3JlYXRpb24gZmFpbHVyZSIpOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg ICAgICAvKiBOb3Qgc2tpcHBpbmcgKi8KKworCXNlbGVjdGVkKys7CQkJLyogQ291bnQgdGhpcyBm aWxlIGFzIHNlbGVjdGVkICovCisgICAgICAgIHBuID0gTlVMTDsKKworCWlmICghZ290c2l6ZSAm JiAhbWRlbCkgewkvKiBEaWRuJ3QgZ2V0IHNpemUgeWV0ICovCisJICAgIGlmIChoYXZlc2l6ZSA+ IChDS19PRkZfVCktMSkgeyAvKiBBbHJlYWR5IGhhdmUgZmlsZSBzaXplPyAqLworCQlmc2l6ZSA9 IGhhdmVzaXplOworCQlnb3RzaXplID0gMTsKKwkgICAgfSBlbHNlIHsJCQkvKiBObyAtIG11c3Qg YXNrIHNlcnZlciAqLworCQlmc2l6ZSA9IChDS19PRkZfVCktMTsKKwkJaWYgKHNpemVvaykgewor CQkgICAgeCA9IGZ0cGNtZCgiU0laRSIscyx4X2NzbCx4X2NzcixmdHBfdmJtKTsKKwkJICAgIGlm ICh4ID09IFJFUExZX0NPTVBMRVRFKSB7CisJCQlmc2l6ZSA9IGNrYXRvZnMoJmZ0cF9yZXBseV9z dHJbNF0pOworCQkJZ290c2l6ZSA9IDE7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICAg ICAgaWYgKG1kZWwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBbTV1ERUxFVEUgKi8KKyAgICAg ICAgICAgIGlmIChkaXNwbGEgJiYgIWZ0cF92Ym0pCisgICAgICAgICAgICAgIHByaW50ZigiICVz Li4uIixzKTsKKyAgICAgICAgICAgIHJjID0KKyAgICAgICAgICAgICAoZnRwY21kKCJERUxFIixz LHhfY3NsLHhfY3NyLGZ0cF92Ym0pID09IFJFUExZX0NPTVBMRVRFKSA/IDEgOiAtMTsKKyAgICAg ICAgICAgIGlmIChyYyA+IC0xKSB7CisgICAgICAgICAgICAgICAgdGxvZyhGMTEwLCJmdHAgbWRl bGV0ZSIscywwKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlzcGxhICYmICFmdHBfdmJtKQorICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJPS1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIHRsb2coRjExMCwiZnRwIG1kZWxldGUgZmFpbGVkOiIscywwKTsKKyAgICAg ICAgICAgICAgICBpZiAoZGlzcGxhKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWRc biIpOworICAgICAgICAgICAgfQorI2lmbmRlZiBOT1NQTAorI2lmZGVmIFBJUEVTRU5ECisgICAg ICAgIH0gZWxzZSBpZiAocmN2ZmlsdGVyKSB7ICAgICAgICAgLyogW01dR0VUIHdpdGggZmlsdGVy ICovCisgICAgICAgICAgICBpbnQgbjsgY2hhciAqIHA7CisgICAgICAgICAgICBuID0gQ0tNQVhQ QVRIOworICAgICAgICAgICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAgIC8qIFNhZmUgLSBu byBhc25hbWUgd2l0aCBmaWx0ZXIgKi8KKyAgICAgICAgICAgIHp6c3RyaW5nKHJjdmZpbHRlciwm cCwmbik7CisgICAgICAgICAgICBpZiAobiA+IC0xKQorICAgICAgICAgICAgICBwbiA9IHRtcGJ1 ZjsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgcmN2ZmlsdGVyIixwbixuKTsKKyNl bmRpZiAvKiBQSVBFU0VORCAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICBpZiAo dG9zY3JlZW4pIHMyID0gIi0iOworICAgICAgICB9IGVsc2UgaWYgKHBpcGVzZW5kKSB7ICAgICAg ICAgIC8qIFtNXUdFVCAvQ09NTUFORCAqLworICAgICAgICAgICAgaW50IG47IGNoYXIgKiBwOwor ICAgICAgICAgICAgbiA9IENLTUFYUEFUSDsKKyAgICAgICAgICAgIHAgPSB0bXBidWY7ICAgICAg ICAgICAgICAgICAvKiBTYWZlIC0gbm8gYXNuYW1lIHdpdGggZmlsdGVyICovCisgICAgICAgICAg ICB6enN0cmluZyhwaXBlbmFtZSwmcCwmbik7CisgICAgICAgICAgICBpZiAobiA+IC0xKQorICAg ICAgICAgICAgICBwbiA9IHRtcGJ1ZjsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQg cGlwZW5hbWUiLHBpcGVuYW1lLG4pOworICAgICAgICAgICAgaWYgKHRvc2NyZWVuKSBzMiA9ICIt IjsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBbTV1HRVQgd2l0 aCBubyBwaXBlcyBvciBmaWx0ZXJzICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0 IHMyIEEiLHMyLHhfY252KTsKKyAgICAgICAgICAgIGlmICh0b3NjcmVlbikgeworICAgICAgICAg ICAgICAgIHMyID0gIi0iOyAgICAgICAgICAgICAgIC8qIChob2tleSBjb252ZW50aW9uIGZvciBz dGRvdXQpICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKCEqczIpIHsgICAgICAgICAgLyogTm8g YXNuYW1lPyAqLworICAgICAgICAgICAgICAgIGlmICh4X2NudikgeyAgICAgICAgICAgIC8qIElm IGNvbnZlcnRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgbnpydG9sKHMsdG1wYnVmLHhfY252 LDEsQ0tNQVhQQVRIKTsgLyogY29udmVydCAqLworICAgICAgICAgICAgICAgICAgICBzMiA9IHRt cGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIGdldCBuenJ0b2wiLHMy LDApOworICAgICAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lz ZSAqLworICAgICAgICAgICAgICAgICAgczIgPSBzOyAgICAgICAgICAgICAgIC8qIHVzZSBpbmNv bWluZyBmaWxlJ3MgbmFtZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjEx MCwiZnRwIGdldCBzMiBCIixzMiwwKTsKKworICAgICAgICAgICAgLyogSWYgbG9jYWwgZmlsZSBh bHJlYWR5IGV4aXN0cywgdGFrZSBjb2xsaXNpb24gYWN0aW9uICovCisKKyAgICAgICAgICAgIGlm ICghcGlwZXNlbmQgJiYKKyNpZmRlZiBQSVBFU0VORAorICAgICAgICAgICAgICAgICFyY3ZmaWx0 ZXIgJiYKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgICAgICAgICAgICAgICF0b3NjcmVlbikg eworCQlDS19PRkZfVCB4OworICAgICAgICAgICAgICAgIHggPSB6Y2hraShzMik7CisgICAgICAg ICAgICAgICAgZGVidWcoRjExMSwiZnRwIGdldCB6Y2hraSIsczIseCk7CisgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiZnRwIGdldCB4X2ZuYyIsczIseF9mbmMpOworCisgICAgICAgICAgICAg ICAgaWYgKHggPiAoQ0tfT0ZGX1QpLTEgJiYgIXJlc3RhcnQpIHsKKwkJICAgIGludCB4ID0gLTE7 CisJCSAgICBjaGFyICogbmV3bmFtZSA9IE5VTEw7CisKKyAgICAgICAgICAgICAgICAgICAgc3dp dGNoICh4X2ZuYykgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9BOiAgICAgIC8q IEFwcGVuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kID0gMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9S OiAgICAgIC8qIFJlbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9COgkv KiBCYWNrdXAgKi8KKwkJCXpuZXduKHMyLCZuZXduYW1lKTsgLyogTWFrZSB1bmlxdWUgbmFtZSAq LworCQkJZGVidWcoRjExMCwiZnRwIGdldCB6bmV3biIsbmV3bmFtZSwwKTsKKwkJCWlmICh4X2Zu YyA9PSBYWUZYX0IpIHsgLyogQmFja3VwIGV4aXN0aW5nIGZpbGUgKi8KKwkJCSAgICB4ID0genJl bmFtZShzMixuZXduYW1lKTsKKwkJCSAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGJhY2t1cCB6cmVu YW1lIixuZXduYW1lLHgpOworCQkJfSBlbHNlIHsgICAgICAvKiBSZW5hbWUgaW5jb21pbmcgZmls ZSAqLworCQkJICAgIHggPSBja3N0cm5jcHkodG1wYnVmLG5ld25hbWUsQ0tNQVhQQVRIKzEpOwor CQkJICAgIHMyID0gdG1wYnVmOworCQkJICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgcmVuYW1lIGlu Y29taW5nIixuZXduYW1lLHgpOworCQkJfQorCQkJaWYgKHggPCAwKSB7CisJCQkgICAgZnRzY3Jl ZW4oU0NSX0VNLDAsKENLX09GRl9UKTAsCisJCQkJICAgICAiQmFja3VwL1JlbmFtZSBmYWlsZWQi KTsKKwkJCSAgICB4ID0gMDsKKwkJCSAgICBnb3RvIHhnZXR4OworCQkJfQorCQkJYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZYX0Q6ICAgICAgLyogRGlzY2FyZCAoYWxyZWFk eSBoYW5kbGVkIGFib3ZlKSAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlGWF9VOiAg ICAgIC8qIFVwZGF0ZSAoZGl0dG8pICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWUZY X006ICAgICAgLyogVXBkYXRlIChkaXR0bykgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNl IFhZRlhfWDogICAgICAvKiBPdmVyd3JpdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbWRlbCkgeworI2lmZGVmIFBJUEVTRU5ECisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHBuIixwbixyY3ZmaWx0ZXIgPyAxIDogMCk7 CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyAgICAgICAgICAgIGlmIChwaXBlc2VuZCAmJiAhdG9z Y3JlZW4pCisgICAgICAgICAgICAgIHMyID0gTlVMTDsKKyNpZmRlZiBERUJVRworICAgICAgICAg ICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgeF94 bGEiLCIiLHhfeGxhKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgZ2V0IHhfY3Ns IiwiIix4X2NzbCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGdldCB4X2NzciIs IiIseF9jc3IpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXQgYXBwZW5kIiwi IixhcHBlbmQpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAgICAgICAg ICAgIHJjID0gZ2V0ZmlsZShzLHMyLHJlc3RhcnQsYXBwZW5kLHBuLHhfeGxhLHhfY3NsLHhfY3Ny KTsKKworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwiZnRwIGdldCByYyIscyxyYyk7CisgICAgICAgICAgICAgICAgZGVi dWcoRjExMSwiZnRwIGdldCBmdHBfdGltZWRfb3V0IixzLGZ0cF90aW1lZF9vdXQpOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgY2FuY2VsZmlsZSIscyxjYW5jZWxmaWxlKTsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IGNhbmNlbGdyb3VwIixzLGNhbmNl bGdyb3VwKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHJlbmFtaW5nIixz LHJlbmFtaW5nKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IG1vdmluZyIs cyxtb3ZpbmcpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgIH0K KyAgICAgICAgaWYgKHJjID4gLTEpIHsKKyAgICAgICAgICAgIGdvb2QrKzsKKyAgICAgICAgICAg IHN0YXR1cyA9IDE7CisgICAgICAgICAgICBpZiAoIWNhbmNlbGZpbGUpIHsKKyAgICAgICAgICAg ICAgICBpZiAoZGVsZXRpbmcpIHsgICAgICAgICAvKiBHRVQgL0RFTEVURSAoc291cmNlIGZpbGUp ICovCisgICAgICAgICAgICAgICAgICAgIHJjID0KKyAgICAgICAgICAgICAgICAgICAgICAoZnRw Y21kKCJERUxFIixzLHhfY3NsLHhfY3NyLGZ0cF92Ym0pID09IFJFUExZX0NPTVBMRVRFKQorICAg ICAgICAgICAgICAgICAgICAgICAgPyAxIDogLTE7CisgICAgICAgICAgICAgICAgICAgIHRsb2co RjExMCwgKHJjID4gLTEpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGRlbGV0ZWQiIDog IiBmYWlsZWQgdG8gZGVsZXRlIiwgcywgMCk7CisgICAgICAgICAgICAgICAgfQorCQlpZiAocmVu YW1pbmcgJiYgcmN2X3JlbmFtZSAmJiAhdG9zY3JlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAg Y2hhciAqcDsgICAgICAgICAgICAvKiBSZW5hbWUgZG93bmxvYWRlZCBmaWxlICovCisjaWZuZGVm IE5PU1BMCisgICAgICAgICAgICAgICAgICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKyAg ICAgICAgICAgICAgICAgICAgaW50IG47CisgICAgICAgICAgICAgICAgICAgIG4gPSBDS01BWFBB VEg7CisgICAgICAgICAgICAgICAgICAgIHAgPSB0bXBidWY7CisgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImZ0cCBnZXQgL3JlbmFtZSIscmN2X3JlbmFtZSwwKTsKKyAgICAgICAgICAg ICAgICAgICAgenpzdHJpbmcocmN2X3JlbmFtZSwmcCwmbik7CisgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImZ0cCBnZXQgL3JlbmFtZSIscmN2X3JlbmFtZSwwKTsKKyAgICAgICAgICAg ICAgICAgICAgcCA9IHRtcGJ1ZjsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIHAgPSByY3Zf cmVuYW1lOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICAgICAgICAgIHJjID0gKHpy ZW5hbWUoczIscCkgPCAwKSA/IC0xIDogMTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiZG9mdHBnZXQgL1JFTkFNRSB6cmVuYW1lIixwLHJjKTsKKyAgICAgICAgICAgICAgICAgICAg dGxvZyhGMTEwLCAocmMgPiAtMSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVuYW1l ZCB0byIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICIgZmFpbGVkIHRvIHJlbmFtZSB0byIs CisgICAgICAgICAgICAgICAgICAgICAgICAgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAw CisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KG1vdmluZyAmJiByY3ZfbW92ZSAmJiAhdG9zY3JlZW4pIHsKKyAgICAgICAgICAgICAgICAgICAg Y2hhciAqcDsgICAgICAgICAgICAvKiBNb3ZlIGRvd25sb2FkZWQgZmlsZSAqLworI2lmbmRlZiBO T1NQTAorICAgICAgICAgICAgICAgICAgICBjaGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07CisgICAg ICAgICAgICAgICAgICAgIGludCBuOworICAgICAgICAgICAgICAgICAgICBuID0gVE1QQlVGU0la OworICAgICAgICAgICAgICAgICAgICBwID0gdG1wYnVmOworICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJmdHAgZ2V0IC9tb3ZlLXRvIixyY3ZfbW92ZSwwKTsKKyAgICAgICAgICAgICAg ICAgICAgenpzdHJpbmcocmN2X21vdmUsJnAsJm4pOworICAgICAgICAgICAgICAgICAgICBwID0g dG1wYnVmOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgcCA9IHJjdl9tb3ZlOworI2VuZGlm IC8qIE5PU1BMICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgL21v dmUtdG8iLHAsMCk7CisgICAgICAgICAgICAgICAgICAgIHJjID0gKHpyZW5hbWUoczIscCkgPCAw KSA/IC0xIDogMTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiZG9mdHBnZXQgL01P VkUgenJlbmFtZSIscCxyYyk7CisgICAgICAgICAgICAgICAgICAgIHRsb2coRjExMCwgKHJjID4g LTEpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG1vdmVkIHRvIiA6ICIgZmFpbGVkIHRv IG1vdmUgdG8iLCBwLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg KHB2W1NORF9TUk5dLml2YWwgPiAwICYmIHB2W1NORF9TUk5dLnN2YWwpIHsKKyAgICAgICAgICAg ICAgICAgICAgY2hhciAqIHMgPSBwdltTTkRfU1JOXS5zdmFsOworICAgICAgICAgICAgICAgICAg ICBjaGFyICogc3J2cm4gPSBwdltTTkRfU1JOXS5zdmFsOworICAgICAgICAgICAgICAgICAgICBj aGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgICAg ICAgIGludCB5OyAgICAgICAgICAgICAgLyogUGFzcyBpdCB0aHJ1IHRoZSBldmFsdWF0b3IgKi8K KyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBjbWRfcXVvdGluZzsgLyogZm9yIFx2KGZp bGVuYW1lKSAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHNydl9y ZW5hbSIscywxKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY21kX3F1b3RpbmcpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHkgPSBDS01BWFBBVEg7CisgICAgICAgICAgICAgICAgICAg ICAgICBzID0gKGNoYXIgKil0bXBidWY7CisgICAgICAgICAgICAgICAgICAgICAgICB6enN0cmlu ZyhzcnZybiwmcywmeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gKGNoYXIgKil0bXBi dWY7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHNydl9yZW5hbSIscywxKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKHMpIGlmICgqcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHg7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gZnRwX3JlbmFtZShzMixzKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ0cCBnZXQgZnRwX3JlbmFtZSIsczIseCk7 CisgICAgICAgICAgICAgICAgICAgICAgICB0bG9nKEYxMTAsICh4ID4gMCkgPworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiIHJlbmFtZWQgc291cmNlIGZpbGUgdG8iIDoKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiBmYWlsZWQgdG8gcmVuYW1lIHNvdXJjZSBmaWxlIHRvIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHggPCAxKQorCQkJICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGlmIChjYW5jZWxmaWxlKQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocmMgPCAw KSB7CisgICAgICAgICAgICBmdHBfZmFpKys7CisjaWZkZWYgRlRQX1RJTUVPVVQKKwkgICAgZGVi dWcoRjEwMSwiZnRwIGdldCBmdHBfdGltZWRfb3V0IiwiIixmdHBfdGltZWRfb3V0KTsKKwkgICAg aWYgKGZ0cF90aW1lZF9vdXQpIHsKKwkJc3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICBmdHNj cmVlbihTQ1JfRU0sMCwoQ0tfT0ZGX1QpMCwiR0VUIHRpbWVkIG91dCIpOworCSAgICB9CisjZW5k aWYJLyogRlRQX1RJTUVPVVQgKi8KKyAgICAgICAgICAgIGlmIChnZXRlcnJvcikgeworICAgICAg ICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX0VNLDAs KENLX09GRl9UKTAsIkZhdGFsIGRvd25sb2FkIGVycm9yIik7CisgICAgICAgICAgICAgICAgZG9u ZSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2lmZGVmIERFQlVHCisgICAg aWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDEsImZ0cCBnZXQgc3RhdHVzIiwiIixzdGF0dXMpOwor CWRlYnVnKEYxMDEsImZ0cCBnZXQgY2FuY2VsZ3JvdXAiLCIiLGNhbmNlbGdyb3VwKTsKKwlkZWJ1 ZyhGMTAxLCJmdHAgZ2V0IGNhbmNlbGZpbGUiLCIiLGNhbmNlbGZpbGUpOworCWRlYnVnKEYxMDEs ImZ0cCBnZXQgc2VsZWN0ZWQiLCIiLHNlbGVjdGVkKTsKKwlkZWJ1ZyhGMTAxLCJmdHAgZ2V0IGdv b2QiLCIiLGdvb2QpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgaWYgKHNlbGVj dGVkID09IDApIHsJCS8qIE5vIGZpbGVzIG1ldCBzZWxlY3Rpb24gY3JpdGVyaWEgKi8KKwlzdGF0 dXMgPSAxOwkJCS8qIHdoaWNoIGlzIGEga2luZCBvZiBzdWNjZXNzLiAqLworICAgIH0gZWxzZSBp ZiAoc3RhdHVzID4gMCkgewkJLyogU29tZSBmaWxlcyB3ZXJlIHNlbGVjdGVkICovCisgICAgICAg IGlmIChjYW5jZWxncm91cCkJCS8qIGJ1dCBNR0VUIHdhcyBjYW5jZWxlZCAqLworICAgICAgICAg IHN0YXR1cyA9IDA7CQkJLyogc28gTUdFVCBmYWlsZWQgKi8KKyAgICAgICAgZWxzZSBpZiAoY2Fu Y2VsZmlsZSAmJiBnb29kIDwgMSkgLyogSWYgZmlsZSB3YXMgY2FuY2VsZWQgKi8KKyAgICAgICAg ICBzdGF0dXMgPSAwOwkJCS8qIE1HRVQgZmFpbGVkIGlmIGl0IGdvdCBubyBmaWxlcyAqLworICAg IH0KKyAgICBzdWNjZXNzID0gc3RhdHVzOworICAgIHggPSBzdWNjZXNzOworICAgIGRlYnVnKEYx MDEsImZ0cCBnZXQgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7CisKKyAgeGdldHg6CisgICAgcGlwZXNl bmQgPSBwaXBlc2F2ZTsgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBnbG9iYWwgcGlwZSBzZWxl Y3Rpb24gKi8KKyAgICBpZiAoZnBfbm1sKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9z ZSAvTkFNRUxJU1QgKi8KKyAgICAgICAgaWYgKGZwX25tbCAhPSBzdGRvdXQpCisgICAgICAgICAg ZmNsb3NlKGZwX25tbCk7CisgICAgICAgIGZwX25tbCA9IE5VTEw7CisgICAgfQorICAgIGlmICgK KyNpZmRlZiBDT01NRU5UCisJeCA+IC0xCisjZWxzZQorCXN1Y2Nlc3MKKyNlbmRpZgkvKiBDT01N RU5UICovCisJKSB7CQkJCS8qIERvd25sb2FkIHN1Y2Nlc3NmdWwgKi8KKyNpZmRlZiBHRlRJTUVS CisgICAgICAgIHQxID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgLyogRW5kIHRpbWUgKi8K KyAgICAgICAgc2VjID0gKENLRkxPQVQpKChDS0ZMT0FUKSh0MSAtIHQwKSAvIDEwMDAuMCk7IC8q IFN0YXRzICovCisgICAgICAgIGlmICghc2VjKSBzZWMgPSAwLjAwMTsKKyAgICAgICAgZnB0c2Vj cyA9IHNlYzsKKyNlbHNlCisgICAgICAgIHNlYyA9ICh0MSAtIHQwKSAvIDEwMDA7CisgICAgICAg IGlmICghc2VjKSBzZWMgPSAxOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgdGZjcHMg PSAobG9uZykgKHRmYyAvIHNlYyk7CisgICAgICAgIHRzZWNzID0gKGludClzZWM7CisgICAgICAg IGxhc3R4ZmVyID0gV19GVFB8V19SRUNWOworICAgICAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7Cisg ICAgfQorICAgIGlmIChkcHlhY3RpdmUpCisgICAgICBmdHNjcmVlbihzdWNjZXNzID4gMCA/IFND Ul9UQyA6IFNDUl9DVywgMCwgKENLX09GRl9UKTAsICIiKTsKKyNpZmRlZiBDS19UTVBESVIKKyAg ICBpZiAoZl90bXBkaXIpIHsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBjaGFuZ2VkIHRv IGRvd25sb2FkIGRpciAqLworICAgICAgICB6Y2hkaXIoKGNoYXIgKikgc2F2ZGlyKTsgICAgICAg IC8qIEdvIGJhY2sgd2hlcmUgd2UgY2FtZSBmcm9tICovCisgICAgICAgIGZfdG1wZGlyID0gMDsK KyAgICB9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IFNO RF9NQVg7IGkrKykgeyAgICAvKiBGcmVlIG1hbGxvYydkIG1lbW9yeSAqLworICAgICAgICBpZiAo cHZbaV0uc3ZhbCkKKyAgICAgICAgICBmcmVlKHB2W2ldLnN2YWwpOworICAgIH0KKyAgICBmb3Ig KGkgPSAwOyBpIDwgbWdldG47IGkrKykgICAgICAgICAvKiBNR0VUIGxpc3QgdG9vICovCisgICAg ICBtYWtlc3RyKCYobWdldGxpc3RbaV0pLE5VTEwpOworCisgICAgaWYgKGNhbmNlbGdyb3VwKQkJ CS8qIENsZWFyIHRlbXAtZmlsZSBzdGFjayAqLworICAgICAgbWxzcmVzZXQoKTsKKworICAgIGZ0 cmVzZXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuZG8gc3dpdGNoIGVmZmVjdHMg Ki8KKyAgICBkcHlhY3RpdmUgPSAwOworICAgIHJldHVybih4KTsKK30KKworc3RhdGljIHN0cnVj dCBrZXl0YWIgZnRwcm10W10gPSB7CisgICAgeyAiY2QiLCAgICAgICAgWFpDV0QsIDAgfSwKKyAg ICB7ICJjZHVwIiwgICAgICBYWkNEVSwgMCB9LAorICAgIHsgImN3ZCIsICAgICAgIFhaQ1dELCBD TV9JTlYgfSwKKyAgICB7ICJkZWxldGUiLCAgICBYWkRFTCwgMCB9LAorICAgIHsgImRpcmVjdG9y eSIsIFhaRElSLCAwIH0sCisgICAgeyAiZXhpdCIsICAgICAgWFpYSVQsIDAgfSwKKyAgICB7ICJo ZWxwIiwgICAgICBYWkhMUCwgMCB9LAorICAgIHsgImxvZ2luIiwgICAgIFhaTEdJLCAwIH0sCisg ICAgeyAibG9nb3V0IiwgICAgWFpMR08sIDAgfSwKKyAgICB7ICJta2RpciIsICAgICBYWk1LRCwg MCB9LAorICAgIHsgInB3ZCIsICAgICAgIFhaUFdELCAwIH0sCisgICAgeyAicmVuYW1lIiwgICAg WFpSRU4sIDAgfSwKKyAgICB7ICJybWRpciIsICAgICBYWlJNRCwgMCB9LAorICAgIHsgInR5cGUi LCAgICAgIFhaVFlQLCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuZnRw cm10ID0gKHNpemVvZihmdHBybXQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK2lu dAorZG9mdHBzaXRlKCkgewkJCQkvKiBTZW5kIGEgU0lURSBjb21tYW5kICovCisgICAgaW50IHJl cGx5OworICAgIGNoYXIgKiBzOworICAgIGludCBsY3MgPSAtMSwgcmNzID0gLTE7CisgICAgaW50 IHNhdmVfdmJtID0gZnRwX3ZibTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgaWYgKGZ0cF94bGEp IHsKKyAgICAgICAgbGNzID0gZnRwX2NzbDsKKyAgICAgICAgaWYgKGxjcyA8IDApIGxjcyA9IGZj aGFyc2V0OworICAgICAgICByY3MgPSBmdHBfY3N4OworICAgICAgICBpZiAocmNzIDwgMCkgcmNz ID0gZnRwX2NzcjsKKyAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIGlmICgoeCA9IGNt dHh0KCJDb21tYW5kIiwgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsK KyAgICBDSEVDS0NPTk4oKTsKKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAg aWYgKHRlc3RpbmcpIHByaW50ZigiIGZ0cCBzaXRlIFwiJXNcIi4uLlxuIixsaW5lKTsKKyAgICBp ZiAoIWZ0cF92Ym0pCisgICAgICAgIGZ0cF92Ym0gPSAhY2tzdHJjbXAoIkhFTFAiLGxpbmUsNCww KTsKKyAgICBpZiAoKHJlcGx5ID0gZnRwY21kKCJTSVRFIixsaW5lLGxjcyxyY3MsZnRwX3ZibSkp ID09IFJFUExZX1BSRUxJTSkgeworCWRvIHsKKwkgICAgcmVwbHkgPSBnZXRyZXBseSgwLGxjcyxy Y3MsZnRwX3ZibSwwKTsKKwl9IHdoaWxlIChyZXBseSA9PSBSRVBMWV9QUkVMSU0pOworICAgIH0K KyAgICBmdHBfdmJtID0gc2F2ZV92Ym07CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAocmVwbHkgPT0g UkVQTFlfQ09NUExFVEUpKTsKK30KKworCitpbnQKK2Rvc2V0ZnRwcHN2KCkgewkJCQkvKiBQYXNz aXZlIG1vZGUgKi8KKyAgICB4ID0gc2V0b24oJmZ0cF9wc3YpOworICAgIGlmICh4ID4gMCkgcGFz c2l2ZW1vZGUgPSBmdHBfcHN2OworICAgIHJldHVybih4KTsKK30KKworLyogIGQgbyBmIHQgcCBy IG0gdCAgLS0gIFBhcnNlIGFuZCBleGVjdXRlIFJFTU9URSBjb21tYW5kcyAgKi8KKworaW50Citk b2Z0cHJtdChjeCx3aG8pIGludCBjeCwgd2hvOyB7ICAgICAgICAgLyogd2hvID09IDEgZm9yIGZ0 cCwgMCBmb3Iga2VybWl0ICovCisgICAgLyogY3ggPT0gMCBtZWFucyBSRU1PVEUgKi8KKyAgICAv KiBjeCAhPSAwIGlzIGEgWFp4eHggdmFsdWUgKi8KKyAgICBjaGFyICogczsKKworICAgIGlmICh3 aG8gIT0gMCkKKyAgICAgIHJldHVybigwKTsKKworICAgIGlmIChjeCA9PSAwKSB7CisgICAgICAg IGlmICgoeCA9IGNta2V5KGZ0cHJtdCxuZnRwcm10LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgY3ggPSB4OworICAgIH0KKyAgICBzd2l0Y2ggKGN4 KSB7CisgICAgICBjYXNlIFhaQ0RVOiAgICAgICAgICAgICAgICAgICAgICAgLyogQ0RVUCAqLwor ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgcmV0dXJu KGRvZnRwY2R1cCgpKTsKKworICAgICAgY2FzZSBYWkNXRDogICAgICAgICAgICAgICAgICAgICAg IC8qIFJDRCAqLworICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmVtb3RlIGRpcmVjdG9yeSIsICIi LCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisJcyA9IGJyc3RyaXAobGluZSk7CisgICAgICAgIHJl dHVybihkb2Z0cGN3ZChzLDEpKTsKKyAgICAgIGNhc2UgWFpQV0Q6ICAgICAgICAgICAgICAgICAg ICAgICAvKiBSUFdEICovCisgICAgICAgIHJldHVybihkb2Z0cHB3ZCgpKTsKKyAgICAgIGNhc2Ug WFpERUw6ICAgICAgICAgICAgICAgICAgICAgICAvKiBSREVMICovCisgICAgICAgIHJldHVybihk b2Z0cGdldChGVFBfTURFLDEpKTsKKyAgICAgIGNhc2UgWFpESVI6ICAgICAgICAgICAgICAgICAg ICAgICAvKiBSRElSICovCisgICAgICAgIHJldHVybihkb2Z0cGRpcihGVFBfRElSKSk7CisgICAg ICBjYXNlIFhaSExQOiAgICAgICAgICAgICAgICAgICAgICAgLyogUkhFTFAgKi8KKyAgICAgICAg cmV0dXJuKGRvZnRweGhscCgpKTsKKyAgICAgIGNhc2UgWFpNS0Q6ICAgICAgICAgICAgICAgICAg ICAgICAvKiBSTUtESVIgKi8KKyAgICAgICAgcmV0dXJuKGRvZnRwbWtkKCkpOworICAgICAgY2Fz ZSBYWlJFTjogICAgICAgICAgICAgICAgICAgICAgIC8qIFJSRU5BTUUgKi8KKyAgICAgICAgcmV0 dXJuKGRvZnRwcmVuKCkpOworICAgICAgY2FzZSBYWlJNRDogICAgICAgICAgICAgICAgICAgICAg IC8qIFJSTURJUiAqLworICAgICAgICByZXR1cm4oZG9mdHBybWQoKSk7CisgICAgICBjYXNlIFha TEdPOiAgICAgICAgICAgICAgICAgICAgICAgLyogTE9HT1VUICovCisgICAgICAgIHJldHVybihk b2Z0cHJlcygpKTsKKyAgICAgIGNhc2UgWFpYSVQ6ICAgICAgICAgICAgICAgICAgICAgICAvKiBF WElUICovCisgICAgICAgIHJldHVybihmdHBieWUoKSk7CisgICAgfQorICAgIHByaW50ZigiP05v dCB1c2FibGUgd2l0aCBGVFAgLSBcIiVzXCJcbiIsIGF0bWJ1Zik7CisgICAgcmV0dXJuKC05KTsK K30KKworaW50Citkb3hmdHAoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29t bWFuZCBwYXJzZXIgZm9yIGJ1aWx0LWluIEZUUCAqLworICAgIGludCBjeCwgbjsKKyAgICBzdHJ1 Y3QgRkRCIGt3LCBmbDsKKyAgICBjaGFyICogczsKKyAgICBpbnQgdXNldGxzID0gMDsKKyAgICBp bnQgbGNzID0gLTEsIHJjcyA9IC0xOworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAoZnRwX3hs YSkgeworICAgICAgICBsY3MgPSBmdHBfY3NsOworICAgICAgICBpZiAobGNzIDwgMCkgbGNzID0g ZmNoYXJzZXQ7CisgICAgICAgIHJjcyA9IGZ0cF9jc3g7CisgICAgICAgIGlmIChyY3MgPCAwKSBy Y3MgPSBmdHBfY3NyOworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBpZiAoaW5z ZXJ2ZXIpICAgICAgICAgICAgICAgICAgICAgICAvKiBGVFAgbm90IGFsbG93ZWQgaW4gSUtTRC4g Ki8KKyAgICAgIHJldHVybigtMik7CisKKyAgICBpZiAoZ19mdHBfdHlwID4gLTEpIHsgICAgICAg ICAgICAgICAvKiBSZXN0b3JlIFRZUEUgaWYgc2F2ZWQgKi8KKyAgICAgICAgZnRwX3R5cCA9IGdf ZnRwX3R5cDsKKyAgICAgICAgLyogZ19mdHBfdHlwID0gLTE7ICovCisgICAgfQorI2lmZGVmIENP TU1FTlQKKy8qCisgIFdlJ2xsIHNldCB0aGUgY29sbGlzaW9uIGFjdGlvbiBsb2NhbGx5IGluIGRv ZnRwZ2V0KCkgYmFzZWQgb24gd2hldGhlcgorICBmdHBfZm5jIHdhcyBldmVyIHNldCB0byBhIHZh bHVlLiAgaWYgbm90LCB3ZSdsbCB1c2UgdGhlIGZuY2FjdCB2YWx1ZS4KKyovCisgICAgaWYgKGZ0 cF9mbmMgPCAwKSAgICAgICAgICAgICAgICAgICAgLyogSW5oZXJpdCBnbG9iYWwgY29sbGlzaW9u IGFjdGlvbiAqLworICAgICAgZnRwX2ZuYyA9IGZuY2FjdDsgICAgICAgICAgICAgICAgIC8qIGlm IG5vbmUgc3BlY2lmaWVkIGZvciBGVFAgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAv KiBSZXN0b3JlIGdsb2JhbCB2ZXJib3NlIG1vZGUgKi8KKyAgICBpZiAoZnRwX2RlYikKKyAgICAg IGZ0cF92Ym0gPSAxOworICAgIGVsc2UgaWYgKHF1aWV0KQorICAgICAgZnRwX3ZibSA9IDA7Cisg ICAgZWxzZQorICAgICAgZnRwX3ZibSA9IGZ0cF92Yng7CisKKyAgICBmdHBfZGF0ZXMgJj0gMTsJ CQkvKiBVbmRvIGFueSBwcmV2aW91cyAvVVBEQVRFIHN3aXRjaCAqLworCisgICAgZHB5YWN0aXZl ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgZ2xvYmFsIHRyYW5zZmVyLWFjdGl2 ZSBmbGFnICovCisgICAgcHJpbnRsaW5lcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogUmVz ZXQgcHJpbnRsaW5lcyAqLworCisgICAgaWYgKGZwX25tbCkgeyAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVzZXQgL05BTUVMSVNUICovCisgICAgICAgIGlmIChmcF9ubWwgIT0gc3Rkb3V0KQor ICAgICAgICAgIGZjbG9zZShmcF9ubWwpOworICAgICAgICBmcF9ubWwgPSBOVUxMOworICAgIH0K KyAgICBtYWtlc3RyKCZmdHBfbm1sLE5VTEwpOworCisgICAgY21mZGJpKCZrdywgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZHMgKi8KKyAgICAgICAgICAgX0NN S0VZLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAiSG9zdG5h bWU7IG9yIEZUUCBjb21tYW5kIiwgIC8qIGhlbHAgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbmZ0cGNt ZCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUg Ki8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMjogbm9uZSAqLworICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAg ICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgZnRwY21kdGFiLCAgICAg ICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICZmbCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAp OworICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEEgaG9zdCBuYW1l IG9yIGFkZHJlc3MgKi8KKyAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAv KiBmY29kZSAqLworICAgICAgICAgICAiSG9zdG5hbWUgb3IgYWRkcmVzcyIsICAgICAgIC8qIGhl bHAgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0 ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgIHh4c3RyaW5nLAor ICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMCisgICAgICAgICAgICk7CisgICAgeCA9 IGNtZmRiKCZrdyk7ICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgYSBob3N0bmFtZSBvciBh IGtleXdvcmQgKi8KKyAgICBpZiAoeCA9PSAtMykgeworICAgICAgICBwcmludGYoIj9mdHAgd2hh dD8gXCJoZWxwIGZ0cFwiIGZvciBoaW50c1xuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAg fQorICAgIGlmICh4IDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBpZiAoY21yZXN1bHQuZmNv ZGUgPT0gX0NNRkxEKSB7ICAgICAvKiBJZiBob3N0bmFtZSAqLworICAgICAgICByZXR1cm4ob3Bl bmZ0cChjbXJlc3VsdC5zcmVzdWx0LDApKTsgLyogZ28gb3BlbiB0aGUgY29ubmVjdGlvbiAqLwor ICAgIH0gZWxzZSB7CisgICAgICAgIGN4ID0gY21yZXN1bHQubnJlc3VsdDsKKyAgICB9CisgICAg c3dpdGNoIChjeCkgeworICAgICAgY2FzZSBGVFBfQUNDOiAgICAgICAgICAgICAgICAgICAgIC8q IEFDQ09VTlQgKi8KKyAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBhY2NvdW50IiwgIiIs ICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIENIRUNL Q09OTigpOworICAgICAgICBtYWtlc3RyKCZmdHBfYWNjLHMpOworICAgICAgICBpZiAodGVzdGlu ZykKKyAgICAgICAgICBwcmludGYoIiBmdHAgYWNjb3VudDogXCIlc1wiXG4iLGZ0cF9hY2MpOwor ICAgICAgICBzdWNjZXNzID0gKGZ0cGNtZCgiQUNDVCIsZnRwX2FjYywtMSwtMSxmdHBfdmJtKSA9 PSBSRVBMWV9DT01QTEVURSk7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKworICAgICAgY2Fz ZSBGVFBfR1VQOiAgICAgICAgICAgICAgICAgICAgIC8qIEdvIFVQICovCisgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBDSEVDS0NPTk4oKTsKKyAgICAg ICAgaWYgKHRlc3RpbmcpIHByaW50ZigiIGZ0cCBjZDogXCIodXApXCJcbiIpOworICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IGRvZnRwY2R1cCgpKTsKKworICAgICAgY2FzZSBGVFBfQ1dEOiAgICAg ICAgICAgICAgICAgICAgIC8qIENEICovCisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUg ZGlyZWN0b3J5IiwgIiIsICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgIENIRUNLQ09OTigpOworICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7CisgICAgICAgIGlmICh0ZXN0aW5nKQorICAgICAgICAgIHByaW50ZigiIGZ0cCBjZDogXCIl c1wiXG4iLCBsaW5lKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBkb2Z0cGN3ZChsaW5lLDEp KTsKKworICAgICAgY2FzZSBGVFBfQ0hNOiAgICAgICAgICAgICAgICAgICAgIC8qIENITU9EICov CisgICAgICAgIGlmICgoeCA9IGNtZmxkKCJQZXJtaXNzaW9ucyBvciBwcm90ZWN0aW9uIGNvZGUi LCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgY2tz dHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1v dGUgZmlsZW5hbWUiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7CisgICAgICAgIGNrbWFrbXNnKGZ0cGNtZGJ1ZixGVFBf QlVGU0laLHRtcGJ1ZiwiICIscyxOVUxMKTsKKyAgICAgICAgaWYgKHRlc3RpbmcpCisgICAgICAg ICAgcHJpbnRmKCIgZnRwIGNobW9kOiAlc1xuIixmdHBjbWRidWYpOworICAgICAgICBzdWNjZXNz ID0KKyAgICAgICAgICAoZnRwY21kKCJTSVRFIENITU9EIixmdHBjbWRidWYsbGNzLHJjcyxmdHBf dmJtKSA9PSBSRVBMWV9DT01QTEVURSk7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKworICAg ICAgY2FzZSBGVFBfQ0xTOiAgICAgICAgICAgICAgICAgICAgIC8qIENMT1NFIEZUUCBjb25uZWN0 aW9uICovCisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4o eSk7CisgICAgICAgIENIRUNLQ09OTigpOworICAgICAgICBpZiAodGVzdGluZykKKyAgICAgICAg ICBwcmludGYoIiBmdHAgY2xvc2luZy4uLlxuIik7CisgICAgICAgIGZ0cGNsb3NlKCk7CisgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgRlRQX0RJUjogICAgICAgICAg ICAgICAgICAgICAvKiBESVJFQ1RPUlkgb2YgcmVtb3RlIGZpbGVzICovCisgICAgICBjYXNlIEZU UF9WREk6CisgICAgICAgIHJldHVybihkb2Z0cGRpcihjeCkpOworCisgICAgICBjYXNlIEZUUF9H RVQ6ICAgICAgICAgICAgICAgICAgICAgLyogR0VUIGEgcmVtb3RlIGZpbGUgKi8KKyAgICAgIGNh c2UgRlRQX1JHRTogICAgICAgICAgICAgICAgICAgICAvKiBSRUdFVCAqLworICAgICAgY2FzZSBG VFBfTUdFOiAgICAgICAgICAgICAgICAgICAgIC8qIE1HRVQgKi8KKyAgICAgIGNhc2UgRlRQX01E RTogICAgICAgICAgICAgICAgICAgICAvKiBNREVMRVRFICovCisgICAgICAgIHJldHVybihkb2Z0 cGdldChjeCwxKSk7CisKKyAgICAgIGNhc2UgRlRQX0lETDogICAgICAgICAgICAgICAgICAgICAv KiBJRExFICovCisgICAgICAgIGlmICgoeCA9IGNtbnVtKCJOdW1iZXIgb2Ygc2Vjb25kcyIsIi0x IiwxMCwmeix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIENIRUNL Q09OTigpOworICAgICAgICBpZiAoeiA8IDApICB7ICAgICAgICAgICAgICAgICAgIC8qIERpc3Bs YXkgaWRsZSB0aW1lb3V0ICovCisgICAgICAgICAgICBpZiAodGVzdGluZykKKyAgICAgICAgICAg ICAgcHJpbnRmKCIgZnRwIHF1ZXJ5IGlkbGUgdGltZW91dC4uLlxuIik7CisgICAgICAgICAgICBz dWNjZXNzID0gKGZ0cGNtZCgiU0lURSBJRExFIixOVUxMLDAsMCwxKSA9PSBSRVBMWV9DT01QTEVU RSk7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGlkbGUg dGltZW91dCAqLworICAgICAgICAgICAgaWYgKHRlc3RpbmcpCisgICAgICAgICAgICAgIHByaW50 ZigiIGZ0cCBpZGxlIHRpbWVvdXQgc2V0OiAlZC4uLlxuIix6KTsKKyAgICAgICAgICAgIHN1Y2Nl c3MgPQorICAgICAgICAgICAgICAoZnRwY21kKCJTSVRFIElETEUiLGNraXRvYSh6KSwwLDAsMSkg PT0gUkVQTFlfQ09NUExFVEUpOworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzKTsK KworICAgICAgY2FzZSBGVFBfTUtEOiAgICAgICAgICAgICAgICAgICAgIC8qIE1LRElSICovCisg ICAgICAgIHJldHVybihkb2Z0cG1rZCgpKTsKKworICAgICAgY2FzZSBGVFBfTU9EOiAgICAgICAg ICAgICAgICAgICAgIC8qIE1PRFRJTUUgKi8KKyAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90 ZSBmaWxlbmFtZSIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICBDSEVDS0NPTk4oKTsKKyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOworICAgICAgICBpZiAodGVzdGluZykKKyAgICAgICAgICBwcmludGYoIiBmdHAgbW9kdGlt ZSBcIiVzXCIuLi5cbiIsbGluZSk7CisgICAgICAgIHN1Y2Nlc3MgPSAwOworICAgICAgICBpZiAo ZnRwY21kKCJNRFRNIixsaW5lLGxjcyxyY3MsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExFVEUpIHsK KwkgICAgc3VjY2VzcyA9IDE7CisJICAgIG1kdG1vayA9IDE7CisJICAgIGlmICghcXVpZXQpIHsK KwkJaW50IGZsYWcgPSAwOworCQljaGFyIGMsICogczsKKwkJc3RydWN0IHRtIHRtcmVtb3RlOwor CisJCWJ6ZXJvKChjaGFyICopJnRtcmVtb3RlLCBzaXplb2Yoc3RydWN0IHRtKSk7CisJCXMgPSBm dHBfcmVwbHlfc3RyOworCQl3aGlsZSAoKGMgPSAqcysrKSkgeworCQkgICAgaWYgKGMgPT0gU1Ap IHsKKwkJCWZsYWcrKzsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWlmIChmbGFnKSB7CisJ CSAgICBpZiAoc3NjYW5mKHMsICIlMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiLAorCQkJICAgICAg ICZ0bXJlbW90ZS50bV95ZWFyLAorCQkJICAgICAgICZ0bXJlbW90ZS50bV9tb24sCisJCQkgICAg ICAgJnRtcmVtb3RlLnRtX21kYXksCisJCQkgICAgICAgJnRtcmVtb3RlLnRtX2hvdXIsCisJCQkg ICAgICAgJnRtcmVtb3RlLnRtX21pbiwKKwkJCSAgICAgICAmdG1yZW1vdGUudG1fc2VjCisJCQkg ICAgICAgKSA9PSA2KSB7CisJCQlwcmludGYoIiAlcyAlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6 JTAyZCBHTVRcbiIsCisJCQkgICAgICAgbGluZSwKKwkJCSAgICAgICB0bXJlbW90ZS50bV95ZWFy LAorCQkJICAgICAgIHRtcmVtb3RlLnRtX21vbiwKKwkJCSAgICAgICB0bXJlbW90ZS50bV9tZGF5 LAorCQkJICAgICAgIHRtcmVtb3RlLnRtX2hvdXIsCisJCQkgICAgICAgdG1yZW1vdGUudG1fbWlu LAorCQkJICAgICAgIHRtcmVtb3RlLnRtX3NlYworCQkJICAgICAgICk7CisJCSAgICB9IGVsc2Ug eworCQkJc3VjY2VzcyA9IDA7CisJCSAgICB9CisJCX0KKwkgICAgfQorICAgICAgICB9CisgICAg ICAgIHJldHVybihzdWNjZXNzKTsKKworICAgICAgY2FzZSBGVFBfT1BOOiAgICAgICAgICAgICAg ICAgICAgIC8qIE9QRU4gY29ubmVjdGlvbiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgeCA9 IGNtZmxkKCJJUCBob3N0bmFtZSBvciBhZGRyZXNzIiwiIiwmcyx4eHN0cmluZyk7CisgICAgICAg IGlmICh4IDwgMCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IDA7CisgICAgICAgICAgICByZXR1 cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwor ICAgICAgICBzID0gbGluZTsKKyAgICAgICAgcmV0dXJuKG9wZW5mdHAocywwKSk7CisjZWxzZQor ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9QRU4gY29ubmVjdGlv biAqLworICAgICAgICAgICAgY2hhciBuYW1lW1RUTkFNTEVOKzFdLCAqcDsKKyAgICAgICAgICAg IGV4dGVybiBpbnQgbmV0d29yazsKKyAgICAgICAgICAgIGV4dGVybiBjaGFyIHR0bmFtZVtdOwor ICAgICAgICAgICAgaWYgKG5ldHdvcmspICAgICAgICAgICAgICAgIC8qIElmIHdlIGhhdmUgYSBj dXJyZW50IGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWUsdHRuYW1l LExJTkJVRlNJWik7IC8qIGdldCB0aGUgaG9zdCBuYW1lICovCisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICpuYW1lID0gJ1wwJzsgICAgICAgICAgICAgLyogYXMgZGVmYXVsdCBob3N0 ICovCisgICAgICAgICAgICBmb3IgKHAgPSBuYW1lOyAqcDsgcCsrKSAgICAgLyogUmVtb3ZlICI6 c2VydmljZSIgZnJvbSBlbmQuICovCisgICAgICAgICAgICAgIGlmICgqcCA9PSAnOicpIHsgKnAg PSAnXDAnOyBicmVhazsgfQorI2lmbmRlZiBVU0VUTFNUQUIKKyAgICAgICAgICAgIHggPSBjbWZs ZCgiSVAgaG9zdG5hbWUgb3IgYWRkcmVzcyIsbmFtZSwmcyx4eHN0cmluZyk7CisjZWxzZQorICAg ICAgICAgICAgY21mZGJpKCZrdywgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1h bmRzICovCisgICAgICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgLyogZmNvZGUg Ki8KKyAgICAgICAgICAgICAgICAgICAiSG9zdG5hbWUgb3Igc3dpdGNoIiwgLyogaGVscCAqLwor ICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAg ICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0 YSAqLworICAgICAgICAgICAgICAgICAgIG50bHN0YWIsICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAg ICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiBub25lICovCisgICAgICAgICAgICAg ICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAg ICAgICAgICAgICAgICAgIHRsc3RhYiwgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8K KyAgICAgICAgICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5l eHQgRkRCICovCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNtZmRiaSgmZmws ICAgICAgICAgICAgICAgICAvKiBBIGhvc3QgbmFtZSBvciBhZGRyZXNzICovCisgICAgICAgICAg ICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAg ICAgICAiSG9zdG5hbWUgb3IgYWRkcmVzcyIsIC8qIGhlbHAgKi8KKyAgICAgICAgICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwor ICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMg ZGF0YSAyICovCisgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcsCisgICAgICAgICAgICAgICAg ICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAgKTsK KworICAgICAgICAgICAgZm9yIChuID0gMDs7IG4rKykgeworICAgICAgICAgICAgICAgIHggPSBj bWZkYigma3cpOyAgICAgICAgIC8qIFBhcnNlIGEgaG9zdG5hbWUgb3IgYSBrZXl3b3JkICovCisg ICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgIHByaW50Zigi P2Z0cCBvcGVuIHdoYXQ/IFwiaGVscCBmdHBcIiBmb3IgaGludHNcbiIpOworICAgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg KHggPCAwKQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGNt cmVzdWx0LmZjb2RlID09IF9DTUZMRCkgeyAvKiBIb3N0bmFtZSAqLworICAgICAgICAgICAgICAg ICAgICBzID0gY21yZXN1bHQuc3Jlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbXJlc3VsdC5ucmVzdWx0ID09IE9QTl9UTFMpIHsK KyAgICAgICAgICAgICAgICAgICAgdXNldGxzID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisjZW5kaWYgLyogVVNFVExTVEFCICovCisgICAgICAgICAgICBpZiAoeCA8IDAp IHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7CisgICAgICAgICAgICBzID0gbGluZTsKKyAgICAgICAgICAgIHJldHVybihvcGVuZnRwKHMs dXNldGxzKSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAgIGNhc2Ug RlRQX1BVVDogICAgICAgICAgICAgICAgICAgICAvKiBQVVQgKi8KKyAgICAgIGNhc2UgRlRQX01Q VTogICAgICAgICAgICAgICAgICAgICAvKiBNUFVUICovCisgICAgICBjYXNlIEZUUF9BUFA6ICAg ICAgICAgICAgICAgICAgICAgLyogQVBQRU5EICovCisgICAgICBjYXNlIEZUUF9SRVA6CQkJLyog UkVQVVQgKi8KKyAgICAgICAgcmV0dXJuKGRvZnRwcHV0KGN4LDEpKTsKKworICAgICAgY2FzZSBG VFBfUFdEOiAgICAgICAgICAgICAgICAgICAgIC8qIFBXRCAqLworICAgICAgICB4ID0gZG9mdHBw d2QoKTsKKyAgICAgICAgaWYgKHggPiAtMSkgc3VjY2VzcyA9IHg7CisgICAgICAgIHJldHVybih4 KTsKKworICAgICAgY2FzZSBGVFBfUkVOOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFTkFNRSAq LworICAgICAgICByZXR1cm4oZG9mdHByZW4oKSk7CisKKyAgICAgIGNhc2UgRlRQX1JFUzogICAg ICAgICAgICAgICAgICAgICAvKiBSRVNFVCAqLworICAgICAgICByZXR1cm4oZG9mdHByZXMoKSk7 CisKKyAgICAgIGNhc2UgRlRQX0hMUDogICAgICAgICAgICAgICAgICAgICAvKiAocmVtb3RlKSBI RUxQICovCisgICAgICAgIHJldHVybihkb2Z0cHhobHAoKSk7CisKKyAgICAgIGNhc2UgRlRQX1JN RDogICAgICAgICAgICAgICAgICAgICAvKiBSTURJUiAqLworICAgICAgICByZXR1cm4oZG9mdHBy bWQoKSk7CisKKyAgICAgIGNhc2UgRlRQX1NUQTogICAgICAgICAgICAgICAgICAgICAvKiBTVEFU VVMgKi8KKyAgICAgICAgaWYgKCh4ID0gY210eHQoIkNvbW1hbmQiLCAiIiwgJnMsIHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7CisgICAg ICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgaWYgKHRlc3RpbmcpIHBy aW50ZigiIGZ0cCBzdGF0dXMgXCIlc1wiLi4uXG4iLGxpbmUpOworICAgICAgICBzdWNjZXNzID0g KGZ0cGNtZCgiU1RBVCIsbGluZSxsY3MscmNzLDEpID09IFJFUExZX0NPTVBMRVRFKTsKKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MpOworCisgICAgICBjYXNlIEZUUF9TSVQ6IHsgICAgICAgICAgICAg ICAgICAgLyogU0lURSAqLworCSAgcmV0dXJuKGRvZnRwc2l0ZSgpKTsKKyAgICAgIH0KKworICAg ICAgY2FzZSBGVFBfU0laOiAgICAgICAgICAgICAgICAgICAgIC8qIChhc2sgZm9yKSBTSVpFICov CisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZW1vdGUgZmlsZW5hbWUiLCAiIiwgJnMsIHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7Cisg ICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgaWYgKHRlc3Rpbmcp CisgICAgICAgICAgcHJpbnRmKCIgZnRwIHNpemUgXCIlc1wiLi4uXG4iLGxpbmUpOworICAgICAg ICBzdWNjZXNzID0gKGZ0cGNtZCgiU0laRSIsbGluZSxsY3MscmNzLDEpID09IFJFUExZX0NPTVBM RVRFKTsKKwlpZiAoc3VjY2VzcykKKwkgIHNpemVvayA9IDE7CisgICAgICAgIHJldHVybihzdWNj ZXNzKTsKKworICAgICAgY2FzZSBGVFBfU1lTOiAgICAgICAgICAgICAgICAgICAgIC8qIEFzayBm b3Igc2VydmVyJ3MgU1lTVEVNIHR5cGUgKi8KKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeCk7CisgICAgICAgIENIRUNLQ09OTigpOworICAgICAgICBpZiAodGVzdGluZykK KyAgICAgICAgICBwcmludGYoIiBmdHAgc3lzdGVtLi4uXG4iKTsKKyAgICAgICAgc3VjY2VzcyA9 IChmdHBjbWQoIlNZU1QiLE5VTEwsMCwwLDEpID09IFJFUExZX0NPTVBMRVRFKTsKKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MpOworCisgICAgICBjYXNlIEZUUF9VTUE6ICAgICAgICAgICAgICAgICAg ICAgLyogU2V0L3F1ZXJ5IFVNQVNLICovCisgICAgICAgIGlmICgoeCA9IGNtZmxkKCJVbWFzayB0 byBzZXQgb3Igbm90aGluZyB0byBxdWVyeSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgaWYgKHggIT0gLTMpCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGNrc3RybmNw eSh0bXBidWYscyxUTVBCVUZTSVopOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJl dHVybih4KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7CisgICAgICAgIGlmICh0ZXN0aW5nKSB7Cisg ICAgICAgICAgICBpZiAodG1wYnVmWzBdKQorICAgICAgICAgICAgICBwcmludGYoIiBmdHAgdW1h c2sgXCIlc1wiLi4uXG4iLHRtcGJ1Zik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg IHByaW50ZigiIGZ0cCBxdWVyeSB1bWFzay4uLlxuIik7CisgICAgICAgIH0KKyAgICAgICAgc3Vj Y2VzcyA9IGZ0cF91bWFzayh0bXBidWYpOworICAgICAgICByZXR1cm4oc3VjY2Vzcyk7CisKKyAg ICAgIGNhc2UgRlRQX1VTUjoKKyAgICAgICAgcmV0dXJuKGRvZnRwdXNyKCkpOworCisgICAgICBj YXNlIEZUUF9RVU86CisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJGVFAgcHJvdG9jb2wgY29tbWFu ZCIsICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICBDSEVDS0NPTk4oKTsKKyAgICAgICAgc3VjY2VzcyA9IChmdHBjbWQocyxOVUxMLDAsMCxmdHBf dmJtKSA9PSBSRVBMWV9DT01QTEVURSk7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKworICAg ICAgY2FzZSBGVFBfVFlQOiAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgKi8KKyAgICAgICAg aWYgKCh4ID0gY21rZXkoZnRwdHlwLG5mdHB0eXAsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5 KTsKKyAgICAgICAgQ0hFQ0tDT05OKCk7CisgICAgICAgIGZ0cF90eXAgPSB4OworICAgICAgICBn X2Z0cF90eXAgPSB4OworICAgICAgICB0ZW5leCA9IChmdHBfdHlwID09IEZUVF9URU4pOworICAg ICAgICBjaGFuZ2V0eXBlKGZ0cF90eXAsZnRwX3ZibSk7CisgICAgICAgIHJldHVybigxKTsKKwor ICAgICAgY2FzZSBGVFBfQ0hLOiAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHJlbW90 ZSBmaWxlKHMpIGV4aXN0KHMpICovCisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJyZW1vdGUgZmls ZW5hbWUiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgQ0hFQ0tDT05OKCk7CisgICAgICAgIHN1Y2Nlc3MgPSByZW1vdGVfZmlsZXMoMSwoQ0hB UiAqKXMsKENIQVIgKilzLDApID8gMSA6IDA7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKwor ICAgICAgY2FzZSBGVFBfRkVBOiAgICAgICAgICAgICAgICAgICAgIC8qIFJGQzIzODkgKi8KKyAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAg ICAgQ0hFQ0tDT05OKCk7CisJc3VjY2VzcyA9IChmdHBjbWQoIkZFQVQiLE5VTEwsMCwwLDEpID09 IFJFUExZX0NPTVBMRVRFKTsKKwlpZiAoc3VjY2VzcykgeworCSAgICBpZiAoc2Z0dGFiWzBdID4g MCkgeworCQlmdHBfYXV0ID0gc2Z0dGFiW1NGVF9BVVRIXTsKKwkJc2l6ZW9rICA9IHNmdHRhYltT RlRfU0laRV07CisJCW1kdG1vayAgPSBzZnR0YWJbU0ZUX01EVE1dOworCQltbHN0b2sgID0gc2Z0 dGFiW1NGVF9NTFNUXTsKKwkgICAgfQorCX0KKwlyZXR1cm4oc3VjY2Vzcyk7CisKKyAgICAgIGNh c2UgRlRQX09QVDogICAgICAgICAgICAgICAgICAgICAvKiBSRkMyMzg5ICovCisgICAgICAgIC8q IFBlcmhhcHMgdGhpcyBzaG91bGQgYmUgYSBrZXl3b3JkIGxpc3QuLi4gKi8KKyAgICAgICAgaWYg KCh4ID0gY21mbGQoIkZUUCBjb21tYW5kIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgIENIRUNLQ09OTigpOworICAgICAgICBja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7CisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJPcHRpb25zIGZvciB0aGlz IGNvbW1hbmQiLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsK KyAgICAgICAgc3VjY2VzcyA9IChmdHBjbWQoIk9QVFMiLGxpbmUsbGNzLHJjcyxmdHBfdmJtKSA9 PSBSRVBMWV9DT01QTEVURSk7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKworICAgICAgY2Fz ZSBGVFBfRU5BOgkJCS8qIEZUUCBFTkFCTEUgKi8KKyAgICAgIGNhc2UgRlRQX0RJUzoJCQkvKiBG VFAgRElTQUJMRSAqLworICAgICAgICBpZiAoKHggPSBjbWtleShmdHBlbmF0YWIsbmZ0cGVuYSwi IiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworCXN3aXRjaCAoeCkgeworCSAgY2FzZSBFTkFf QVVUSDoJCS8qIE9LIHRvIHVzZSBhdXRvYXV0aGVudGljYXRpb24gKi8KKwkgICAgZnRwX2F1dCA9 IChjeCA9PSBGVFBfRU5BKSA/IDEgOiAwOworCSAgICBzZnR0YWJbU0ZUX0FVVEhdID0gZnRwX2F1 dDsKKwkgICAgYnJlYWs7CisJICBjYXNlIEVOQV9GRUFUOgkJLyogT0sgdG8gc2VuZCBGRUFUIGNv bW1hbmQgKi8KKwkgICAgZmVhdG9rID0gKGN4ID09IEZUUF9FTkEpID8gMSA6IDA7CisJICAgIGJy ZWFrOworCSAgY2FzZSBFTkFfTUxTVDoJCS8qIE9LIHRvIHVzZSBNTFNUL01MU0QgKi8KKwkgICAg bWxzdG9rID0gKGN4ID09IEZUUF9FTkEpID8gMSA6IDA7CisJICAgIHNmdHRhYltTRlRfTUxTVF0g PSBtbHN0b2s7CisJICAgIGJyZWFrOworCSAgY2FzZSBFTkFfTURUTToJCS8qIE9LIHRvIHVzZSBN RFRNICovCisJICAgIG1kdG1vayA9IChjeCA9PSBGVFBfRU5BKSA/IDEgOiAwOworCSAgICBzZnR0 YWJbU0ZUX01EVE1dID0gbWR0bW9rOworCSAgICBicmVhazsKKwkgIGNhc2UgRU5BX1NJWkU6CQkv KiBPSyB0byB1c2UgU0laRSAqLworCSAgICBzaXplb2sgPSAoY3ggPT0gRlRQX0VOQSkgPyAxIDog MDsKKwkgICAgc2Z0dGFiW1NGVF9TSVpFXSA9IHNpemVvazsKKwkgICAgYnJlYWs7CisJfQorCXJl dHVybihzdWNjZXNzID0gMSk7CisgICAgfQorICAgIHJldHVybigtMik7Cit9CisKKyNpZm5kZWYg Tk9TSE9XCitzdGF0aWMgY2hhciAqCitzaG9wbCh4KSBpbnQgeDsgeworICAgIHN3aXRjaCAoeCkg eworICAgICAgY2FzZSBGUExfQ0xSOiByZXR1cm4oImNsZWFyIik7CisgICAgICBjYXNlIEZQTF9Q UlY6IHJldHVybigicHJpdmF0ZSIpOworICAgICAgY2FzZSBGUExfU0FGOiByZXR1cm4oInNhZmUi KTsKKyAgICAgIGNhc2UgMDogIHJldHVybigiKG5vdCBzZXQpIik7CisgICAgICBkZWZhdWx0OiBy ZXR1cm4oIih1bmtub3duKSIpOworICAgIH0KK30KKworaW50CitzaG9mdHAoYnJpZWYpIGludCBi cmllZjsgeworICAgIGNoYXIgKiBzID0gIj8iOworICAgIGludCBuLCB4OworCisgICAgaWYgKGdf ZnRwX3R5cCA+IC0xKSB7ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBUWVBFIGlmIHNhdmVkICov CisgICAgICAgIGZ0cF90eXAgPSBnX2Z0cF90eXA7CisgICAgICAgIC8qIGdfZnRwX3R5cCA9IC0x OyAqLworICAgIH0KKyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRmKCJGVFAgY29ubmVjdGlv bjogICAgICAgICAgICAgICAgICVzXG4iLGNvbm5lY3RlZCA/CisgICAgICAgICAgIGZ0cF9ob3N0 IDoKKyAgICAgICAgICAgIihub25lKSIKKyAgICAgICAgICAgKTsKKyAgICBuID0gMjsKKyAgICBp ZiAoY29ubmVjdGVkKSB7CisgICAgICAgIG4rKzsKKyAgICAgICAgcHJpbnRmKCJGVFAgc2VydmVy IHR5cGU6ICAgICAgICAgICAgICAgICVzXG4iLAorICAgICAgICAgICAgICAgZnRwX3NydnR5cFsw XSA/IGZ0cF9zcnZ0eXAgOiAiKHVua25vd24pIik7CisgICAgfQorICAgIGlmIChsb2dnZWRpbikK KyAgICAgIHByaW50ZigiTG9nZ2VkIGluIGFzOiAgICAgICAgICAgICAgICAgICAlc1xuIiwKKyAg ICAgICAgICAgICBzdHJ2YWwoZnRwX2xvZ25hbWUsIih1bmtub3duKSIpKTsKKyAgICBlbHNlCisg ICAgICBwcmludGYoIk5vdCBsb2dnZWQgaW5cbiIpOworICAgIG4rKzsKKyAgICBpZiAoYnJpZWYp IHJldHVybigwKTsKKworICAgIHByaW50ZigiXG5TRVQgRlRQIHZhbHVlczpcblxuIik7CisgICAg biArPSAzOworCisgICAgcHJpbnRmKCIgZnRwIGFub255bW91cy1wYXNzd29yZDogICAgICAgICVz XG4iLAorCSAgIGZ0cF9hcHcgPyBmdHBfYXB3IDogIihkZWZhdWx0KSIKKwkgICApOworICAgIHBy aW50ZigiIGZ0cCBhdXRvLWxvZ2luOiAgICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKGZ0cF9s b2cpKTsKKyAgICBwcmludGYoIiBmdHAgYXV0by1hdXRoZW50aWNhdGlvbjogICAgICAgJXNcbiIs c2hvd29mZihmdHBfYXV0KSk7CisgICAgc3dpdGNoIChmdHBfdHlwKSB7CisgICAgICBjYXNlIEZU VF9BU0M6IHMgPSAidGV4dCI7IGJyZWFrOworICAgICAgY2FzZSBGVFRfQklOOiBzID0gImJpbmFy eSI7IGJyZWFrOworICAgICAgY2FzZSBGVFRfVEVOOiBzID0gInRlbmV4IjsgYnJlYWs7CisgICAg fQorI2lmZGVmIEZUUF9USU1FT1VUCisgICAgcHJpbnRmKCIgZnRwIHRpbWVvdXQ6ICAgICAgICAg ICAgICAgICAgICVsZFxuIixmdHBfdGltZW91dCk7CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8K KyAgICBwcmludGYoIiBmdHAgdHlwZTogICAgICAgICAgICAgICAgICAgICAgJXNcbiIscyk7Cisg ICAgcHJpbnRmKCIgZnRwIGdldC1maWxldHlwZS1zd2l0Y2hpbmc6ICAgICVzXG4iLHNob3dvZmYo Z2V0X2F1dG8pKTsKKyAgICBwcmludGYoIiBmdHAgZGF0ZXM6ICAgICAgICAgICAgICAgICAgICAg JXNcbiIsc2hvd29mZihmdHBfZGF0ZXMpKTsKKyAgICBwcmludGYoIiBmdHAgZXJyb3ItYWN0aW9u OiAgICAgICAgICAgICAgJXNcbiIsZnRwX2VyciA/ICJxdWl0IjoicHJvY2VlZCIpOworICAgIHBy aW50ZigiIGZ0cCBmaWxlbmFtZXM6ICAgICAgICAgICAgICAgICAlc1xuIiwKKyAgICAgICAgICAg ZnRwX2NudiA9PSBDTlZfQVVUTyA/ICJhdXRvIiA6IChmdHBfY252ID8gImNvbnZlcnRlZCIgOiAi bGl0ZXJhbCIpCisgICAgICAgICAgICk7CisgICAgcHJpbnRmKCIgZnRwIGRlYnVnICAgICAgICAg ICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoZnRwX2RlYikpOworCisgICAgcHJpbnRmKCIgZnRw IHBhc3NpdmUtbW9kZTogICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoZnRwX3BzdikpOworICAg IHByaW50ZigiIGZ0cCBwZXJtaXNzaW9uczogICAgICAgICAgICAgICAlc1xuIixzaG93b29hKGZ0 cF9wcm0pKTsKKyAgICBwcmludGYoIiBmdHAgdmVyYm9zZS1tb2RlOiAgICAgICAgICAgICAgJXNc biIsc2hvd29mZihmdHBfdmJ4KSk7CisgICAgcHJpbnRmKCIgZnRwIHNlbmQtcG9ydC1jb21tYW5k czogICAgICAgICVzXG4iLHNob3dvZmYoZnRwX3BzdikpOworICAgIHByaW50ZigiIGZ0cCB1bmlx dWUtc2VydmVyLW5hbWVzOiAgICAgICAlc1xuIixzaG93b2ZmKGZ0cF91c24pKTsKKyNpZmRlZiBD T01NRU5UCisgICAgLyogU2VlIG5vdGUgaW4gZG94ZnRwKCkgKi8KKyAgICBpZiAoZnRwX2ZuYyA8 IDApCisgICAgICBmdHBfZm5jID0gZm5jYWN0OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBw cmludGYoIiBmdHAgY29sbGlzaW9uOiAgICAgICAgICAgICAgICAgJXNcbiIsCisJICAgZm5jbmFt W2Z0cF9mbmMgPiAtMSA/IGZ0cF9mbmMgOiBmbmNhY3RdKTsKKyAgICBwcmludGYoIiBmdHAgc2Vy dmVyLXRpbWUtb2Zmc2V0OiAgICAgICAgJXNcbiIsCisJICAgZnRzX3N0byA/IGZ0c19zdG8gOiAi KG5vbmUpIik7CisgICAgbiArPSAxNTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgcHJpbnRmKCIg ZnRwIGNoYXJhY3Rlci1zZXQtdHJhbnNsYXRpb246ICVzXG4iLHNob3dvZmYoZnRwX3hsYSkpOwor ICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVs c2UgbiA9IDA7IH0KKworICAgIHByaW50ZigiIGZ0cCBzZXJ2ZXItY2hhcmFjdGVyLXNldDogICAg ICAlc1xuIixmY3NpbmZvW2Z0cF9jc3JdLmtleXdvcmQpOworICAgIGlmICgrKyBuID4gY21kX3Jv d3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KKworICAgIHBy aW50ZigiIGZpbGUgY2hhcmFjdGVyLXNldDogICAgICAgICAgICAlc1xuIixmY3NpbmZvW2ZjaGFy c2V0XS5rZXl3b3JkKTsKKyAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAg eCA9IGZ0cF9kaXM7CisgICAgaWYgKHggPCAwKQorICAgICAgeCA9IGZkaXNwbGE7CisgICAgc3dp dGNoICh4KSB7CisgICAgICBjYXNlIFhZRkRfTjogcyA9ICJub25lIjsgYnJlYWs7CisgICAgICBj YXNlIFhZRkRfUjogcyA9ICJzZXJpYWwiOyBicmVhazsKKyAgICAgIGNhc2UgWFlGRF9DOiBzID0g ImZ1bGxzY3JlZW4iOyBicmVhazsKKyAgICAgIGNhc2UgWFlGRF9TOiBzID0gImNydCI7IGJyZWFr OworICAgICAgY2FzZSBYWUZEX0I6IHMgPSAiYnJpZWYiOyBicmVhazsKKyAgICB9CisgICAgcHJp bnRmKCIgZnRwIGRpc3BsYXk6ICAgICAgICAgICAgICAgICAgICVzXG4iLHMpOworICAgIGlmICgr KyBuID4gY21kX3Jvd3MtMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7 IH0KKworICAgIGlmIChtbHN0b2sgfHwgZmVhdG9rIHx8IG1kdG1vayB8fCBzaXplb2sgfHwgZnRw X2F1dCkgeworCXByaW50ZigiIGVuYWJsZWQ6ICAgICAgICAgICAgICAgICAgICAgICIpOworCWlm IChmdHBfYXV0KSBwcmludGYoIiBBVVRIIik7CisJaWYgKGZlYXRvaykgIHByaW50ZigiIEZFQVQi KTsKKwlpZiAobWR0bW9rKSAgcHJpbnRmKCIgTURUTSIpOworCWlmIChtbHN0b2spICBwcmludGYo IiBNTFNUIik7CisJaWYgKHNpemVvaykgIHByaW50ZigiIFNJWkUiKTsKKwlwcmludGYoIlxuIik7 CisJaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxz ZSBuID0gMDsgfQorICAgIH0KKyAgICBpZiAoIW1sc3RvayB8fCAhZmVhdG9rIHx8ICFtZHRtb2sg fHwgIXNpemVvayB8fCAhZnRwX2F1dCkgeworCXByaW50ZigiIGRpc2FibGVkOiAgICAgICAgICAg ICAgICAgICAgICIpOworCWlmICghZnRwX2F1dCkgcHJpbnRmKCIgQVVUSCIpOworCWlmICghZmVh dG9rKSAgcHJpbnRmKCIgRkVBVCIpOworCWlmICghbWR0bW9rKSAgcHJpbnRmKCIgTURUTSIpOwor CWlmICghbWxzdG9rKSAgcHJpbnRmKCIgTUxTVCIpOworCWlmICghc2l6ZW9rKSAgcHJpbnRmKCIg U0laRSIpOworCXByaW50ZigiXG4iKTsKKwlpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFh c2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9CisgICAgfQorICAgIHN3aXRjaCAoZnRw Z2V0KSB7CisgICAgICBjYXNlIDA6IHMgPSAia2VybWl0IjsgYnJlYWs7CisgICAgICBjYXNlIDE6 IHMgPSAiZnRwIjsgYnJlYWs7CisgICAgICBjYXNlIDI6IHMgPSAiYXV0byI7IGJyZWFrOworICAg ICAgZGVmYXVsdDogcyA9ICI/IjsKKyAgICB9CisgICAgcHJpbnRmKCIgZ2V0LXB1dC1yZW1vdGU6 ICAgICAgICAgICAgICAgICVzXG4iLHMpOworICAgIGlmICgrKyBuID4gY21kX3Jvd3MtMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KKworICAgIHByaW50ZigiXG4i KTsKKyAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAw OyBlbHNlIG4gPSAwOyB9CisKKyNpZmRlZiBGVFBfU0VDVVJJVFkKKyAgICBwcmludGYoIkF2YWls YWJsZSBzZWN1cml0eSBtZXRob2RzOiAgICAiKTsKKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgcHJp bnRmKCJHU1NBUEkgIik7CisjZW5kaWYgLyogRlRQX0dTU0FQSSAqLworI2lmZGVmIEZUUF9LUkI0 CisgICAgcHJpbnRmKCJLZXJiZXJvczQgIik7CisjZW5kaWYgLyogRlRQX0tSQjQgKi8KKyNpZmRl ZiBGVFBfU1JQCisgICAgcHJpbnRmKCJTUlAgIik7CisjZW5kaWYgLyogRlRQX1NSUCAqLworI2lm ZGVmIEZUUF9TU0wKKyAgICBwcmludGYoIlNTTCAiKTsKKyNlbmRpZiAvKiBGVFBfU1NMICovCisK KyAgICBuKys7CisgICAgcHJpbnRmKCJcblxuIik7CisgICAgaWYgKCsrIG4gPiBjbWRfcm93cy0z KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQorICAgIHByaW50Zigi IGZ0cCBhdXRodHlwZTogICAgICAgICAgICAgICAgICAlc1xuIixzdHJ2YWwoYXV0aF90eXBlLE5V TEwpKTsKKyAgICBpZiAoKysgbiA+IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy biAwOyBlbHNlIG4gPSAwOyB9CisgICAgcHJpbnRmKCIgZnRwIGF1dG8tZW5jcnlwdGlvbjogICAg ICAgICAgICVzXG4iLHNob3dvZmYoZnRwX2NyeSkpOworICAgIGlmICgrKyBuID4gY21kX3Jvd3Mt MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuIDA7IGVsc2UgbiA9IDA7IH0KKyAgICBwcmludGYo IiBmdHAgY3JlZGVudGlhbC1mb3J3YXJkaW5nOiAgICAgJXNcbiIsc2hvd29mZihmdHBfY2Z3KSk7 CisgICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsg ZWxzZSBuID0gMDsgfQorICAgIHByaW50ZigiIGZ0cCBjb21tYW5kLXByb3RlY3Rpb24tbGV2ZWw6 ICAlc1xuIixzaG9wbChmdHBfY3BsKSk7CisgICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQorICAgIHByaW50ZigiIGZ0cCBk YXRhLXByb3RlY3Rpb24tbGV2ZWw6ICAgICAlc1xuIixzaG9wbChmdHBfZHBsKSk7CisgICAgaWYg KCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0g MDsgfQorICAgIHByaW50ZigiIGZ0cCBzZWN1cmUgcHJveHk6ICAgICAgICAgICAgICAlc1xuIixz aG9wbChzc2xfZnRwX3Byb3h5KSk7CisgICAgaWYgKCsrIG4gPiBjbWRfcm93cy0zKSB7IGlmICgh YXNrbW9yZSgpKSByZXR1cm4gMDsgZWxzZSBuID0gMDsgfQorI2Vsc2UKKyAgICBwcmludGYoIkF2 YWlsYWJsZSBzZWN1cml0eSBtZXRob2RzOiAgICAgKG5vbmUpXG4iKTsKKyAgICBpZiAoKysgbiA+ IGNtZF9yb3dzLTMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybiAwOyBlbHNlIG4gPSAwOyB9Cisj ZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCisKKyAgICBpZiAobiA8PSBjbWRfcm93cyAtIDMpCisg ICAgICBwcmludGYoIlxuIik7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIE5PU0hPVyAq LworCisjaWZuZGVmIE5PSEVMUAorLyogRlRQIEhFTFAgdGV4dCBzdHJpbmdzICovCisKK3N0YXRp YyBjaGFyICogZmhzX2Z0cFtdID0geworICAgICJTeW50YXg6IEZUUCBzdWJjb21tYW5kIFsgb3Bl cmFuZHMgXSIsCisgICAgIiAgTWFrZXMgYW4gRlRQIGNvbm5lY3Rpb24sIG9yIHNlbmRzIGEgY29t bWFuZCB0byB0aGUgRlRQIHNlcnZlci4iLAorICAgICIgIFRvIHNlZSBhIGxpc3Qgb2YgYXZhaWxh YmxlIEZUUCBzdWJjb21tYW5kcywgdHlwZSBcImZ0cCA/XCIuIiwKKyAgICAiICBhbmQgdGhlbiB1 c2UgSEVMUCBGVFAgeHh4IHRvIGdldCBoZWxwIGFib3V0IHN1YmNvbW1hbmQgeHh4LiIsCisgICAg IiAgQWxzbyBzZWUgSEVMUCBTRVQgRlRQLCBIRUxQIFNFVCBHRVQtUFVULVJFTU9URSwgYW5kIEhF TFAgRklSRVdBTEwuIiwKKyAgICAiIgorfTsKKworc3RhdGljIGNoYXIgKiBmaHNfYWNjW10gPSB7 ICAgICAgICAgICAgIC8qIEFDQ09VTlQgKi8KKyAgICAiU3ludGF4OiBGVFAgQUNDT1VOVCB0ZXh0 IiwKKyAgICAiICBTZW5kcyBhbiBhY2NvdW50IGRlc2lnbmF0b3IgdG8gYW4gRlRQIHNlcnZlciB0 aGF0IG5lZWRzIG9uZS4iLAorICAgICIgIE1vc3QgRlRQIHNlcnZlcnMgZG8gbm90IHVzZSBhY2Nv dW50czsgc29tZSB1c2UgdGhlbSBmb3Igb3RoZXIiLAorICAgICIgIG90aGVyIHB1cnBvc2VzLCBz dWNoIGFzIGRpc2stYWNjZXNzIHBhc3N3b3Jkcy4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIg KiBmaHNfYXBwW10gPSB7ICAgICAgICAgICAgIC8qIEFQUEVORCAqLworICAgICJTeW50YXg6IEZU UCBBUFBFTkQgZmlsbmFtZSIsCisgICAgIiAgRXF1aXZhbGVudCB0byBbIEZUUCBdIFBVVCAvQVBQ RU5ELiAgU2VlIEhFTFAgRlRQIFBVVC4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNf Y2xzW10gPSB7ICAgICAgICAgICAgIC8qIEJZRSwgQ0xPU0UgKi8KKyAgICAiU3ludGF4OiBbIEZU UCBdIEJZRSIsCisgICAgIiAgTG9ncyBvdXQgZnJvbSB0aGUgRlRQIHNlcnZlciBhbmQgY2xvc2Vz IHRoZSBGVFAgY29ubmVjdGlvbi4iLAorICAgICIgIEFsc28gc2VlIEhFTFAgU0VUIEdFVC1QVVQt UkVNT1RFLiAgU3lub255bTogWyBGVFAgXSBDTE9TRS4iLAorICAgICIiCit9Oworc3RhdGljIGNo YXIgKiBmaHNfY3dkW10gPSB7ICAgICAgICAgICAgIC8qIENELCBDV0QgKi8KKyAgICAiU3ludGF4 OiBbIEZUUCBdIENEIGRpcmVjdG9yeSIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBj aGFuZ2UgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeS4iLAorICAgICIgIEFsc28gc2VlIEhFTFAgU0VU IEdFVC1QVVQtUkVNT1RFLiAgU3lub255bXM6IFsgRlRQIF0gQ1dELCBSQ0QsIFJDV0QuIiwKKyAg ICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX2d1cFtdID0geyAgICAgICAgICAgICAvKiBDRFVQ LCBVUCAqLworICAgICJTeW50YXg6IEZUUCBDRFVQIiwKKyAgICAiICBBc2tzIHRoZSBGVFAgc2Vy dmVyIHRvIGNoYW5nZSB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBvZiBpdHMgY3VycmVudCIsCisg ICAgIiAgZGlyZWN0b3J5LiAgQWxzbyBzZWUgSEVMUCBTRVQgR0VULVBVVC1SRU1PVEUuICBTeW5v bnltOiBGVFAgVVAuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX2NobVtdID0geyAg ICAgICAgICAgICAvKiBDSE1PRCAqLworICAgICJTeW50YXg6IEZUUCBDSE1PRCBmaWxlbmFtZSBw ZXJtaXNzaW9ucyIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBjaGFuZ2UgdGhlIHBl cm1pc3Npb25zLCBwcm90ZWN0aW9uLCBvciBtb2RlIG9mIiwKKyAgICAiICB0aGUgZ2l2ZW4gZmls ZS4gIFRoZSBnaXZlbiBwZXJtaXNzaW9ucyBtdXN0IGJlIGluIHRoZSBzeW50YXggb2YgdGhlIiwK KyAgICAiICB0aGUgc2VydmVyJ3MgZmlsZSBzeXN0ZW0sIGUuZy4gYW4gb2N0YWwgbnVtYmVyIGZv ciBVTklYLiAgQWxzbyBzZWUiLAorICAgICIgIEZUUCBQVVQgL1BFUk1JU1NJT05TIiwKKyAgICAi IgorfTsKK3N0YXRpYyBjaGFyICogZmhzX21kZVtdID0geyAgICAgICAgICAgICAvKiBERUxFVEUg Ki8KKyAgICAiU3ludGF4OiBGVFAgREVMRVRFIFsgc3dpdGNoZXMgXSBmaWxlc3BlYyIsCisgICAg IiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBkZWxldGUgdGhlIGdpdmVuIGZpbGUgb3IgZmlsZXMu IiwKKyAgICAiICBTeW5vbnltOiBNREVMRVRFIChLZXJtaXQgbWFrZXMgbm8gZGlzdGluY3Rpb24g YmV0d2VlbiBzaW5nbGUgYW5kIiwKKyAgICAiICBtdWx0aXBsZSBmaWxlIGRlbGV0aW9uKS4gIE9w dGlvbmFsIHN3aXRjaGVzOiIsCisgICAgIiAiLAorICAgICIgIC9FUlJPUi1BQ1RJT046e1BST0NF RUQsUVVJVH0iLAorICAgICIgIC9FWENFUFQ6cGF0dGVybiIsCisgICAgIiAgL0ZJTEVOQU1FUzp7 QVVUTyxDT05WRVJURUQsTElURVJBTH0iLAorICAgICIgIC9MQVJHRVItVEhBTjpudW1iZXIiLAor I2lmZGVmIFVOSVhPUk9TSworICAgICIgIC9OT0RPVEZJTEVTIiwKKyNlbmRpZiAvKiBVTklYT1JP U0sgKi8KKyAgICAiICAvUVVJRVQiLAorI2lmZGVmIFJFQ1VSU0lWRQorICAgICIgIC9SRUNVUlNJ VkUgKGRlcGVuZHMgb24gc2VydmVyKSIsCisgICAgIiAgL1NVQkRJUkVDVE9SSUVTIiwKKyNlbmRp ZiAvKiBSRUNVUlNJVkUgKi8KKyAgICAiICAvU01BTExFUi1USEFOOm51bWJlciIsCisgICAgIiIK K307CitzdGF0aWMgY2hhciAqIGZoc19kaXJbXSA9IHsgICAgICAgICAgICAgLyogRElSRUNUT1JZ ICovCisgICAgIlN5bnRheDogRlRQIERJUkVDVE9SWSBbIGZpbGVzcGVjIF0iLAorICAgICIgIEFz a3MgdGhlIHNlcnZlciB0byBzZW5kIGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2YgdGhlIGZpbGVzIHRo YXQgbWF0Y2giLAorICAgICIgIHRoZSBnaXZlbiBmaWxlc3BlYywgb3IgaWYgbm9uZSBpcyBnaXZl biwgYWxsIHRoZSBmaWxlcyBpbiBpdHMgY3VycmVudCIsCisgICAgIiAgZGlyZWN0b3J5LiAgVGhl IGZpbGVzcGVjLCBpbmNsdWRpbmcgYW55IHdpbGRjYXJkcywgbXVzdCBiZSBpbiB0aGUiLAorICAg ICIgIHN5bnRheCBvZiB0aGUgc2VydmVyJ3MgZmlsZSBzeXN0ZW0uICBBbHNvIHNlZSBIRUxQIFNF VCBHRVQtUFVULVJFTU9URS4iLAorICAgICIgIFN5bm9ueW06IFJESVJFQ1RPUlkuIiwKKyAgICAi IgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3ZkaVtdID0geyAgICAgICAgICAgICAvKiBWRElSRUNU T1JZICovCisgICAgIlN5bnRheDogRlRQIFZESVJFQ1RPUlkgWyBmaWxlc3BlYyBdIiwKKyAgICAi ICBBc2tzIHRoZSBzZXJ2ZXIgdG8gc2VuZCBhIGRpcmVjdG9yeSBsaXN0aW5nIG9mIHRoZSBmaWxl cyB0aGF0IG1hdGNoIiwKKyAgICAiICB0aGUgZ2l2ZW4gZmlsZXNwZWMsIG9yIGlmIG5vbmUgaXMg Z2l2ZW4sIGFsbCB0aGUgZmlsZXMgaW4gaXRzIGN1cnJlbnQiLAorICAgICIgIGRpcmVjdG9yeS4g IFZESVJFQ1RPUlkgaXMgbmVlZGVkIGZvciBnZXR0aW5nIHZlcmJvc2UgZGlyZWN0b3J5IiwKKyAg ICAiICBsaXN0aW5ncyBmcm9tIGNlcnRhaW4gRlRQIHNlcnZlcnMsIHN1Y2ggYXMgb24gVE9QUy0y MC4gIFRyeSBpdCBpZiIsCisgICAgIiAgRlRQIERJUkVDVE9SWSBsaXN0cyBvbmx5IGZpbGVuYW1l cyB3aXRob3V0IGRldGFpbHMuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX2ZlYVtd ID0geyAgICAgICAgICAgICAvKiBGRUFUVVJFUyAqLworICAgICJTeW50YXg6IEZUUCBGRUFUVVJF UyIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBsaXN0IGl0cyBzcGVjaWFsIGZlYXR1 cmVzLiAgTW9zdCBGVFAgc2VydmVycyIsCisgICAgIiAgZG8gbm90IHJlY29nbml6ZSB0aGlzIGNv bW1hbmQuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX21nZVtdID0geyAgICAgICAg ICAgICAvKiBNR0VUICovCisgICAgIlN5bnRheDogWyBGVFAgXSBNR0VUIFsgb3B0aW9ucyBdIGZp bGVzcGVjIFsgZmlsZXNwZWMgWyBmaWxlc3BlYyAuLi4gXSBdIiwKKyAgICAiICBEb3dubG9hZCBh IHNpbmdsZSBmaWxlIG9yIG11bHRpcGxlIGZpbGVzLiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBz ZW5kIiwKKyAgICAiICB0aGUgZ2l2ZW4gZmlsZSBvciBmaWxlcy4gIEFsc28gc2VlIEZUUCBHRVQu ICBPcHRpb25hbCBzd2l0Y2hlczoiLAorICAgICIgIiwKKyAgICAiICAvQVMtTkFNRTp0ZXh0IiwK KyAgICAiICAgIE5hbWUgdW5kZXIgd2hpY2ggdG8gc3RvcmUgaW5jb21pbmcgZmlsZS4iLAorICAg ICIgICAgUGF0dGVybiByZXF1aXJlZCBmb3IgZm9yIG11bHRpcGxlIGZpbGVzLiIsCisgICAgIiAg L0JJTkFSWSIsICAgICAgICAgICAgICAgICAgICAgICAgLyogL0lNQUdFICovCisgICAgIiAgICBG b3JjZSBiaW5hcnkgbW9kZS4gIFN5bm9ueW06IC9JTUFHRS4iLAorICAgICIgIC9DT0xMSVNJT046 e0JBQ0tVUCxSRU5BTUUsVVBEQVRFLERJU0NBUkQsQVBQRU5ELE9WRVJXUklURX0iLAorICAgIiAg ICBXaGF0IHRvIGRvIGlmIGFuIGluY29taW5nIGZpbGUgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4g ZXhpc3RpbmcgZmlsZS4iLAorCisjaWZkZWYgUFVUUElQRQorICAgICIgIC9DT01NQU5EIiwKKyAg ICAiICAgIFNwZWNpZmllcyB0aGF0IHRoZSBhcy1uYW1lIGlzIGEgY29tbWFuZCB0byB3aGljaCB0 aGUgaW5jb21pbmcgZmlsZSIsCisgICAgIiAgICBpcyB0byBiZSBwaXBlZCBhcyBzdGFuZGFyZCBp bnB1dC4iLAorI2VuZGlmIC8qIFBVVFBJUEUgKi8KKworI2lmZGVmIERPVVBEQVRFCisgICAgIiAg L0RBVEVTLURJRkZFUiIsCisgICAgIiAgICBEb3dubG9hZCBvbmx5IHRob3NlIGZpbGVzIHdob3Nl IG1vZGlmaWNhdGlvbiBkYXRlLXRpbWVzIGRpZmZlciBmcm9tIiwKKyAgICAiICAgIHRob3NlIG9m IHRoZSBjb3JyZXNwb25kaW5nIGxvY2FsIGZpbGVzLCBvciB0aGF0IGRvIG5vdCBhbHJlYWR5IiwK KyAgICAiICAgIGV4aXN0IG9uIHRoZSBsb2NhbCBjb21wdXRlci4iLAorI2VuZGlmIC8qIERPVVBE QVRFICovCisKKyAgICAiICAvREVMRVRFIiwKKyAgICAiICAgIFNwZWNpZmllcyB0aGF0IGVhY2gg ZmlsZSBpcyB0byBiZSBkZWxldGVkIGZyb20gdGhlIHNlcnZlciBhZnRlciwiLAorICAgICIgICAg YW5kIG9ubHkgaWYsIGl0IGlzIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkLiIsCisgICAgIiAgL0VS Uk9SLUFDVElPTjp7UFJPQ0VFRCxRVUlUfSIsCisgICAgIiAgICBXaGVuIGRvd25sb2FkaW5nIGEg Z3JvdXAgb2YgZmlsZXMsIHdoYXQgdG8gZG8gdXBvbiBmYWlsdXJlIHRvIiwKKyAgICAiICAgIHRy YW5zZmVyIGEgZmlsZTogcXVpdCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IG9uZS4iLAorICAgICIg IC9FWENFUFQ6cGF0dGVybiIsCisgICAgIiAgICBFeGNlcHRpb24gbGlzdDogZG9uJ3QgZG93bmxv YWQgYW55IGZpbGVzIHRoYXQgbWF0Y2ggdGhpcyBwYXR0ZXJuLiIsCisgICAgIiAgICBTZWUgSEVM UCBXSUxEQ0FSRCBmb3IgcGF0dGVybiBzeW50YXguIiwKKyAgICAiICAvRklMRU5BTUVTOntBVVRP TUFUSUMsQ09OVkVSVEVELExJVEVSQUx9IiwKKyAgICAiICAgIFdoZXRoZXIgdG8gY29udmVydCBp bmNvbWluZyBmaWxlbmFtZXMgdG8gbG9jYWwgc3ludGF4LiIsCisjaWZkZWYgUElQRVNFTkQKKyNp Zm5kZWYgTk9TUEwKKyAgICAiICAvRklMVEVSOmNvbW1hbmQiLAorICAgICIgICAgUGFzcyBpbmNv bWluZyBmaWxlcyB0aHJvdWdoIHRoZSBnaXZlbiBjb21tYW5kLiIsCisjZW5kaWYgLyogTk9TUEwg Ki8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgICIgIC9MQVJHRVItVEhBTjpudW1iZXIiLAor ICAgICIgICAgT25seSBkb3dubG9hZCBmaWxlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgZ2l2 ZW4gbnVtYmVyIG9mIGJ5dGVzLiIsCisgICAgIiAgL0xJU1RGSUxFOmZpbGVuYW1lIiwKKyAgICAi ICAgIE9idGFpbiB0aGUgbGlzdCBvZiBmaWxlcyB0byBkb3dubG9hZCBmcm9tIHRoZSBnaXZlbiBm aWxlLiIsCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAiICAvTE9DQUwtQ0hBUkFDVEVSLVNFVDpuYW1l IiwKKyAgICAiICAgIFdoZW4gZG93bmxvYWRpbmcgaW4gdGV4dCBtb2RlIGFuZCBjaGFyYWN0ZXIt c2V0IGNvbnZlcnNpb24gaXMiLAorICAgICIgICAgZGVzaXJlZCwgdGhpcyBzcGVjaWZpZXMgdGhl IHRhcmdldCBzZXQuIiwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgIiAgL01BVENIOnBhdHRl cm4iLAorICAgICIgICAgU3BlY2lmaWVzIGEgcGF0dGVybiB0byBiZSB1c2VkIHRvIHNlbGVjdCBm aWxlbmFtZXMgbG9jYWxseSBmcm9tIHRoZSIsCisgICAgIiAgICBzZXJ2ZXIncyBsaXN0LiIsCisg ICAgIiAgL01MU0QiLAorICAgICIgICAgRm9yY2VzIHNlbmRpbmcgb2YgTUxTRCAocmF0aGVyIHRo YW4gTkxTVCkgdG8gZ2V0IHRoZSBmaWxlIGxpc3QuIiwKKyNpZmRlZiBDS19UTVBESVIKKyAgICAi ICAvTU9WRS1UTzpkaXJlY3RvcnkiLAorICAgICIgICAgRWFjaCBmaWxlIHRoYXQgaXMgZG93bmxv YWRlZCBpcyB0byBiZSBtb3ZlZCB0byB0aGUgZ2l2ZW4gbG9jYWwiLAorICAgICIgICAgZGlyZWN0 b3J5IGltbWVkaWF0ZWx5IGFmdGVyLCBhbmQgb25seSBpZiwgaXQgaGFzIGJlZW4gcmVjZWl2ZWQi LAorICAgICIgICAgc3VjY2Vzc2Z1bGx5LiIsCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisgICAg IiAgL05BTUVMSVNUOmZpbGVuYW1lIiwKKyAgICAiICAgIEluc3RlYWQgb2YgZG93bmxvYWRpbmcg dGhlIGZpbGVzLCBzdG9yZXMgdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCIsCisgICAgIiAgICB3b3Vs ZCBiZSBkb3dubG9hZGVkIGluIHRoZSBnaXZlbiBsb2NhbCBmaWxlLCBvbmUgZmlsZW5hbWUgcGVy IGxpbmUuIiwKKyAgICAiICAvTkxTVCIsCisgICAgIiAgICBGb3JjZXMgc2VuZGluZyBvZiBOTFNU IChyYXRoZXIgdGhhbiBNTFNEKSB0byBnZXQgdGhlIGZpbGUgbGlzdC4iLAorICAgICIgIC9OT0JB Q0tVUEZJTEVTIiwKKyAgICAiICAgIERvbid0IGRvd25sb2FkIGFueSBmaWxlcyB3aG9zZSBuYW1l cyBlbmQgd2l0aCAufjxudW1iZXI+fi4iLAorICAgICIgIC9OT0RPVEZJTEVTIiwKKyAgICAiICAg IERvbid0IGRvd25sb2FkIGFueSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIHBlcmlvZCAo LikuIiwKKyAgICAiICAvUVVJRVQiLAorICAgICIgICAgU3VwcHJlc3MgdGhlIGZpbGUtdHJhbnNm ZXIgZGlzcGxheS4iLAorI2lmZGVmIEZUUF9SRVNUQVJUCisgICAgIiAgL1JFQ09WRVIiLCAgICAg ICAgICAgICAgICAgICAgICAgLyogL1JFU1RBUlQgKi8KKyAgICAiICAgIFJlc3VtZSBhIGRvd25s b2FkIHRoYXQgd2FzIHByZXZpb3VzbHkgaW50ZXJydXB0ZWQgZnJvbSB0aGUgcG9pbnQgb2YiLAor ICAgICIgICAgZmFpbHVyZS4gIFdvcmtzIG9ubHkgaW4gYmluYXJ5IG1vZGUuICBOb3Qgc3VwcG9y dGVkIGJ5IGFsbCBzZXJ2ZXJzLiIsCisgICAgIiAgICBTeW5vbnltOiAvUkVTVEFSVC4iLAorI2Vu ZGlmIC8qIEZUUF9SRVNUQVJUICovCisjaWZkZWYgUkVDVVJTSVZFCisgICAgIiAgL1JFQ1VSU0lW RSIsICAgICAgICAgICAgICAgICAgICAgLyogL1NVQkRJUkVDVE9SSUVTICovCisgICAgIiAgICBD cmVhdGUgc3ViZGlyZWN0b3JpZXMgYXV0b21hdGljYWxseSBpZiB0aGUgc2VydmVyIHNlbmRzIGZp bGVzIiwKKyAgICAiICAgIHJlY3Vyc2l2ZWx5IGFuZCBpbmNsdWRlcyBwYXRobmFtZXMgKG1vc3Qg ZG9uJ3QpLiIsCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgIiAgL1JFTkFNRS1UTzp0ZXh0 IiwKKyAgICAiICAgIEVhY2ggZmlsZSB0aGF0IGlzIGRvd25sb2FkZWQgaXMgdG8gYmUgcmVuYW1l ZCBhcyBpbmRpY2F0ZWQganVzdCwiLAorICAgICIgICAgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBo YXMgYXJyaXZlZCBzdWNjZXNzZnVsbHkuIiwKKyNpZm5kZWYgTk9DU0VUUworICAgICIgIC9TRVJW RVItQ0hBUkFDVEVSLVNFVDpuYW1lIiwKKyAgICAiICAgIFdoZW4gZG93bmxvYWRpbmcgaW4gdGV4 dCBtb2RlIGFuZCBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24gaXMgZGVzaXJlZCIKKywgICAiICAg IHRoaXMgc3BlY2lmaWVzIHRoZSBvcmlnaW5hbCBmaWxlJ3MgY2hhcmFjdGVyIHNldCBvbiB0aGUg c2VydmVyLiIsCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgICIgIC9TRVJWRVItUkVOQU1FOnRl eHQiLAorICAgICIgICAgRWFjaCBzZXJ2ZXIgc291cmNlIGZpbGUgaXMgdG8gYmUgcmVuYW1lZCBv biB0aGUgc2VydmVyIGFzIGluZGljYXRlZCIsCisgICAgIiAgICBpbW1lZGlhdGVseSBhZnRlciwg YnV0IG9ubHkgaWYsIGl0IGhhcyBhcnJpdmVkIHN1Y2Nlc3NmdWxseS4iLAorICAgICIgIC9TTUFM TEVSLVRIQU46bnVtYmVyIiwKKyAgICAiICAgIERvd25sb2FkIG9ubHkgdGhvc2UgZmlsZXMgc21h bGxlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMuIiwKKyAgICAiICAvVEVYVCIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAvQVNDSUkgKi8KKyAgICAiICAgIEZvcmNlIHRleHQg bW9kZS4gIFN5bm9ueW06IC9BU0NJSS4iLAorICAgICIgIC9URU5FWCIsCisgICAgIiAgICBGb3Jj ZSBURU5FWCAoVE9QUy0yMCkgbW9kZSAoc2VlIEhFTFAgU0VUIEZUUCBUWVBFKS4iLAorI2lmbmRl ZiBOT0NTRVRTCisgICAgIiAgL1RSQU5TUEFSRU5UIiwKKyAgICAiICAgIFdoZW4gZG93bmxvYWRp bmcgaW4gdGV4dCBtb2RlLCBkbyBub3QgY29udmVydCBjaHJhY3Rlci1zZXRzLiIsCisjZW5kaWYg LyogTk9DU0VUUyAqLworICAgICIgIC9UTy1TQ1JFRU4iLAorICAgICIgICAgVGhlIGRvd25sb2Fk ZWQgZmlsZSBpcyB0byBiZSBkaXNwbGF5ZWQgb24gdGhlIHNjcmVlbi4iLAorI2lmZGVmIERPVVBE QVRFCisgICAgIiAgL1VQREFURSIsCisgICAgIiAgICBFcXVpdmFsZW50IHRvIC9DT0xMSVNJT046 VVBEQVRFLiAgRG93bmxvYWQgb25seSB0aG9zZSBmaWxlcyB0aGF0IGFyZSIsCisgICAgIiAgICBu ZXdlciB0aGFuIHRoYW4gdGhlaXIgbG9jYWwgY291bnRlcnBhcnRzLCBvciB0aGF0IGRvIG5vdCBl eGlzdCBvbiIsCisgICAgIiAgICB0aGUgbG9jYWwgY29tcHV0ZXIuIiwKKyNlbmRpZiAvKiBET1VQ REFURSAqLworICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfaGxwW10gPSB7ICAgICAgICAg ICAgIC8qIEhFTFAgKi8KKyAgICAiU3ludGF4OiBGVFAgSEVMUCBbIGNvbW1hbmQgWyBzdWJjb21t YW5kLi4uIF0gXSIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciBmb3IgaGVscCBhYm91dCB0 aGUgZ2l2ZW4gY29tbWFuZC4gIEZpcnN0IHVzZSIsCisgICAgIiAgRlRQIEhFTFAgYnkgaXRzZWxm IHRvIGdldCBhIGxpc3Qgb2YgY29tbWFuZHMsIHRoZW4gdXNlIEhFTFAgRlRQIHh4eCIsCisgICAg IiAgdG8gZ2V0IGhlbHAgZm9yIGNvbW1hbmQgXCJ4eHhcIi4gIFN5bm9ueW1zOiBSRU1PVEUgSEVM UCwgUkhFTFAuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX2lkbFtdID0geyAgICAg ICAgICAgICAvKiBJRExFICovCisgICAgIlN5bnRheDogRlRQIElETEUgWyBudW1iZXIgXSIsCisg ICAgIiAgSWYgZ2l2ZW4gd2l0aG91dCBhIG51bWJlciwgdGhpcyBhc2tzIHRoZSBGVFAgc2VydmVy IHRvIHRlbGwgaXRzIiwKKyAgICAiICBjdXJyZW50IGlkbGUtdGltZSBsaW1pdC4gIElmIGdpdmVu IHdpdGggYSBudW1iZXIsIGl0IGFza3MgdGhlIHNlcnZlciIsCisgICAgIiAgdG8gY2hhbmdlIGl0 cyBpZGxlLXRpbWUgbGltaXQgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLiIsCisgICAg IiIKK307CitzdGF0aWMgY2hhciAqIGZoc191c3JbXSA9IHsgICAgICAgICAgICAgLyogVVNFUiwg TE9HSU4gKi8KKyAgICAiU3ludGF4OiBGVFAgVVNFUiB1c2VybmFtZSBbIHBhc3N3b3JkIFsgYWNj b3VudCBdIF0iLAorICAgICIgIExvZyBpbiB0byB0aGUgRlRQIHNlcnZlci4gIFRvIGJlIHVzZWQg d2hlbiBjb25uZWN0ZWQgYnV0IG5vdCB5ZXQiLAorICAgICIgIGxvZ2dlZCBpbiwgZS5nLiB3aGVu IFNFVCBGVFAgQVVUT0xPR0lOIGlzIE9GRiBvciBhdXRvbG9naW4gZmFpbGVkLiIsCisgICAgIiAg SWYgeW91IG9taXQgdGhlIHBhc3N3b3JkLCBhbmQgb25lIGlzIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2 ZXIsIHlvdSBhcmUiLAorICAgICIgIHByb21wdGVkIGZvciBpdC4gIElmIHlvdSBvbWl0IHRoZSBh Y2NvdW50LCBubyBhY2NvdW50IGlzIHNlbnQuIiwKKyAgICAiICBTeW5vbnltOiBGVFAgTE9HSU4u IiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX2dldFtdID0geyAgICAgICAgICAgICAv KiBHRVQgKi8KKyAgICAiU3ludGF4OiBbIEZUUCBdIEdFVCBbIG9wdGlvbnMgXSBmaWxlbmFtZSBb IGFzLW5hbWUgXSIsCisgICAgIiAgRG93bmxvYWQgYSBzaW5nbGUgZmlsZS4gIEFza3MgdGhlIEZU UCBzZXJ2ZXIgdG8gc2VuZCB0aGUgZ2l2ZW4gZmlsZS4iLAorICAgICIgIFRoZSBvcHRpb25hbCBh cy1uYW1lIGlzIHRoZSBuYW1lIHRvIHN0b3JlIGl0IHVuZGVyIHdoZW4gaXQgYXJyaXZlczsiLAor ICAgICIgIGlmIG9taXR0ZWQsIHRoZSBmaWxlIGlzIHN0b3JlZCB3aXRoIHRoZSBuYW1lIGl0IGFy cml2ZWQgd2l0aCwgYXMiLAorICAgICIgIG1vZGlmaWVkIGFjY29yZGluZyB0byB0aGUgRlRQIEZJ TEVOQU1FUyBzZXR0aW5nIG9yIC9GSUxFTkFNRVM6IHN3aXRjaCIsCisgICAgIiAgdmFsdWUuICBB c2lkZSBmcm9tIHRoZSBmaWxlIGxpc3QgYW5kIGFzLW5hbWUsIHN5bnRheCBhbmQgb3B0aW9ucyBh cmUiLAorICAgICIgIHRoZSBzYW1lIGFzIGZvciBGVFAgTUdFVCwgd2hpY2ggaXMgdXNlZCBmb3Ig ZG93bmxvYWRpbmcgbXVsdGlwbGUgZmlsZXMuIgorLCAgICIiCit9Oworc3RhdGljIGNoYXIgKiBm aHNfbWtkW10gPSB7ICAgICAgICAgICAgIC8qIE1LRElSICovCisgICAgIlN5bnRheDogRlRQIE1L RElSIGRpcmVjdG9yeSIsCisgICAgIiAgQXNrcyB0aGUgRlRQIHNlcnZlciB0byBjcmVhdGUgYSBk aXJlY3Rvcnkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwiLAorICAgICIgIHdoaWNoIG11c3QgYmUgaW4g dGhlIHN5bnRheCBvZiB0aGUgc2VydmVyJ3MgZmlsZSBzeXN0ZW0uICBTeW5vbnltczoiLAorICAg ICIgIFJFTU9URSBNS0RJUiwgUk1LRElSLiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZo c19tb2RbXSA9IHsgICAgICAgICAgICAgLyogTU9EVElNRSAqLworICAgICJTeW50YXg6IEZUUCBN T0RUSU1FIGZpbGVuYW1lIiwKKyAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIHNlbmQgdGhl IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBnaXZlbiBmaWxlLCIsCisgICAgIiAgdG8gYmUgZGlz cGxheWVkIG9uIHRoZSBzY3JlZW4uICBUaGUgZGF0ZS10aW1lIGZvcm1hdCBpcyBhbGwgbnVtZXJp YzoiLAorICAgICIgIHl5eXltbWRkaGhtbXNzeHh4Li4uICh3aGVyZSB4eHguLi4gaXMgMCBvciBt b3JlIGRpZ2l0cyBpbmRpY2F0aW5nIiwKKyAgICAiICBmcmFjdGlvbnMgb2Ygc2Vjb25kcykuIiwK KyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX21wdVtdID0geyAgICAgICAgICAgICAvKiBN UFVUICovCisgICAgIlN5bnRheDogWyBGVFAgXSBNUFVUIFsgc3dpdGNoZXMgXSBmaWxlc3BlYyBb IGZpbGVzcGVjIFsgZmlsZXNwZWMgLi4uIF0gXSIsCisgICAgIiAgVXBsb2FkcyBmaWxlcy4gIFNl bmRzIHRoZSBnaXZlbiBmaWxlIG9yIGZpbGVzIHRvIHRoZSBGVFAgc2VydmVyLiIsCisgICAgIiAg QWxzbyBzZWUgRlRQIFBVVC4gIE9wdGlvbmFsIHN3aXRjaGVzIGFyZToiLAorICAgICIgIiwKKyAg ICAiICAvQUZURVI6ZGF0ZS10aW1lIiwKKyAgICAiICAgIFVwbG9hZHMgb25seSB0aG9zZSBmaWxl cyBuZXdlciB0aGFuIHRoZSBnaXZlbiBkYXRlLXRpbWUuIiwKKyAgICAiICAgIEhFTFAgREFURSBm b3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy4gIFN5bm9ueW06IC9TSU5DRS4iLAorI2lm ZGVmIFBVVEFSUkFZCisgICAgIiAgL0FSUkFZOmFycmF5LWRlc2lnbmF0b3IiLAorICAgICIgICAg VGVsbHMgS2VybWl0IHRvIHVwbG9hZCB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIGFycmF5LCBy YXRoZXIgdGhhbiIsCisgICAgIiAgICBhIGZpbGUuIiwKKyNlbmRpZiAvKiBQVVRBUlJBWSAqLwor ICAgICIgIC9BUy1OQU1FOnRleHQiLAorICAgICIgICAgTmFtZSB1bmRlciB3aGljaCB0byBzZW5k IGZpbGVzLiIsCisgICAgIiAgICBQYXR0ZXJuIHJlcXVpcmVkIGZvciBmb3IgbXVsdGlwbGUgZmls ZXMuIiwKKyAgICAiICAvQkVGT1JFOmRhdGUtdGltZSIsCisgICAgIiAgICBVcGxvYWQgb25seSB0 aG9zZSBmaWxlcyBvbGRlciB0aGFuIHRoZSBnaXZlbiBkYXRlLXRpbWUuIiwKKyAgICAiICAvQklO QVJZIiwKKyAgICAiICAgIEZvcmNlIGJpbmFyeSBtb2RlLiAgU3lub255bTogL0lNQUdFLiIsCisj aWZkZWYgUFVUUElQRQorICAgICIgIC9DT01NQU5EIiwKKyAgICAiICAgIFNwZWNpZmllcyB0aGF0 IHRoZSBmaWxlc3BlYyBpcyBhIGNvbW1hbmQgd2hvc2Ugc3RhbmRhcmQgb3V0cHV0IGlzIiwKKyAg ICAiICAgIHRvIGJlIHNlbnQuIiwKKyNlbmRpZiAvKiBQVVRQSVBFICovCisKKyNpZmRlZiBDT01N RU5UCisjaWZkZWYgRE9VUERBVEUKKyAgICAiICAvREFURVMtRElGRkVSIiwKKyAgICAiICAgIFVw bG9hZCBvbmx5IHRob3NlIGZpbGVzIHdob3NlIG1vZGlmaWNhdGlvbiBkYXRlLXRpbWVzIGRpZmZl ciBmcm9tIiwKKyAgICAiICAgIHRob3NlIG9uIHRoZSBzZXJ2ZXIsIG9yIHRoYXQgZG9uJ3QgZXhp c3Qgb24gdGhlIHNlcnZlciBhdCBhbGwuIiwKKyNlbmRpZiAvKiBET1VQREFURSAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworICAgICIgIC9ERUxFVEUiLAorICAgICIgICAgU3BlY2lmaWVzIHRo YXQgZWFjaCBzb3VyY2UgZmlsZSBpcyB0byBiZSBkZWxldGVkIGFmdGVyLCBhbmQgb25seSBpZiwi LAorICAgICIgICAgaXQgaXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLiIsCisgICAgIiAgL0RPVEZJ TEVTIiwKKyAgICAiICAgIEluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBwZXJp b2QgKC4pLiIsCisgICAgIiAgL0VSUk9SLUFDVElPTjp7UFJPQ0VFRCxRVUlUfSIsCisgICAgIiAg ICBXaGVuIHVwbG9hZGluZyBhIGdyb3VwIG9mIGZpbGVzLCB3aGF0IHRvIGRvIHVwb24gZmFpbHVy ZSB0byIsCisgICAgIiAgICB0cmFuc2ZlciBhIGZpbGU6IHF1aXQgb3IgcHJvY2VlZCB0byB0aGUg bmV4dCBvbmUuIiwKKyAgICAiICAvRVhDRVBUOnBhdHRlcm4iLAorICAgICIgICAgRXhjZXB0aW9u IGxpc3Q6IGRvbid0IHVwbG9hZCBhbnkgZmlsZXMgdGhhdCBtYXRjaCB0aGlzIHBhdHRlcm4uIiwK KyAgICAiICAgIFNlZSBIRUxQIFdJTERDQVJEIGZvciBwYXR0ZXJuIHN5bnRheC4iLAorICAgICIg IC9GSUxFTkFNRVM6e0FVVE9NQVRJQyxDT05WRVJURUQsTElURVJBTH0iLAorICAgICIgICAgV2hl dGhlciB0byBjb252ZXJ0IG91dGJvdW5kIGZpbGVuYW1lcyB0byBjb21tb24gc3ludGF4LiIsCisj aWZkZWYgUElQRVNFTkQKKyNpZm5kZWYgTk9TUEwKKyAgICAiICAvRklMVEVSOmNvbW1hbmQiLAor ICAgICIgICAgUGFzcyBvdXRib3VuZCBmaWxlcyB0aHJvdWdoIHRoZSBnaXZlbiBjb21tYW5kLiIs CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmZGVmIENLU1lN TElOSworICAgICIgIC9GT0xMT1dJTktTIiwKKyAgICAiICAgIFNlbmQgZmlsZXMgdGhhdCBhcmUg cG9pbnRlZCB0byBieSBzeW1ib2xpYyBsaW5rcy4iLAorICAgICIgIC9OT0ZPTExPV0lOS1MiLAor ICAgICIgICAgU2tpcCBvdmVyIHN5bWJvbGljIGxpbmtzIChkZWZhdWx0KS4iLAorI2VuZGlmIC8q IENLU1lNTElOSyAqLworICAgICIgIC9MQVJHRVItVEhBTjpudW1iZXIiLAorICAgICIgICAgT25s eSB1cGxvYWQgZmlsZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBi eXRlcy4iLAorICAgICIgIC9MSVNURklMRTpmaWxlbmFtZSIsCisgICAgIiAgICBPYnRhaW4gdGhl IGxpc3Qgb2YgZmlsZXMgdG8gdXBsb2FkIGZyb20gdGhlIGdpdmVuIGZpbGUuIiwKKyNpZm5kZWYg Tk9DU0VUUworICAgICIgIC9MT0NBTC1DSEFSQUNURVItU0VUOm5hbWUiLAorICAgICIgICAgV2hl biB1cGxvYWRpbmcgaW4gdGV4dCBtb2RlIGFuZCBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24gaXMi LAorICAgICIgICAgZGVzaXJlZCwgdGhpcyBzcGVjaWZpZXMgdGhlIHNvdXJjZS1maWxlIGNoYXJh Y3RlciBzZXQuIiwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZkZWYgQ0tfVE1QRElSCisgICAg IiAgL01PVkUtVE86ZGlyZWN0b3J5IiwKKyAgICAiICAgIEVhY2ggc291cmNlIGZpbGUgdGhhdCBp cyB1cGxvYWRlZCBpcyB0byBiZSBtb3ZlZCB0byB0aGUgZ2l2ZW4gbG9jYWwiLAorICAgICIgICAg ZGlyZWN0b3J5IHdoZW4sIGFuZCBvbmx5IGlmLCB0aGUgdHJhbnNmZXIgaXMgc3VjY2Vzc2Z1bC4i LAorI2VuZGlmIC8qIENLX1RNUERJUiAqLworICAgICIgIC9OT0JBQ0tVUEZJTEVTIiwKKyAgICAi ICAgIERvbid0IHVwbG9hZCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgZW5kIHdpdGggLn48bnVtYmVy Pn4uIiwKKyNpZmRlZiBVTklYT1JPU0sKKyAgICAiICAvTk9ET1RGSUxFUyIsCisgICAgIiAgICBE b24ndCB1cGxvYWQgYW55IGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggcGVyaW9kICguKS4i LAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgICIgIC9OT1QtQUZURVI6ZGF0ZS10aW1lIiwK KyAgICAiICAgIFVwbG9hZCBvbmx5IGZpbGVzIHRoYXQgYXJlIG5vdCBuZXdlciB0aGFuIHRoZSBn aXZlbiBkYXRlLXRpbWUiLAorICAgICIgIC9OT1QtQkVGT1JFOmRhdGUtdGltZSIsCisgICAgIiAg ICBVcGxvYWQgb25seSBmaWxlcyB0aGF0IGFyZSBub3Qgb2xkZXIgdGhhbiB0aGUgZ2l2ZW4gZGF0 ZS10aW1lIiwKKyNpZmRlZiBVTklYCisgICAgIiAgL1BFUk1JU1NJT05TIiwKKyAgICAiICAgIEFz ayB0aGUgc2VydmVyIHRvIHNldCB0aGUgcGVybWlzc2lvbnMgb2YgZWFjaCBmaWxlIGl0IHJlY2Vp dmVzIiwKKyAgICAiICAgIGFjY29yZGluZyB0byB0aGUgc291cmNlIGZpbGUncyBwZXJtaXNzaW9u cy4iLAorI2VuZGlmIC8qIFVOSVggKi8KKyAgICAiICAvUVVJRVQiLAorICAgICIgICAgU3VwcHJl c3MgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheS4iLAorI2lmZGVmIEZUUF9SRVNUQVJUCisgICAg IiAgL1JFQ09WRVIiLAorICAgICIgICAgUmVzdW1lIGFuIHVwbG9hZCB0aGF0IHdhcyBwcmV2aW91 c2x5IGludGVycnVwdGVkIGZyb20gdGhlIHBvaW50IG9mIiwKKyAgICAiICAgIGZhaWx1cmUuICBT eW5vbnltOiAvUkVTVEFSVC4iLAorI2VuZGlmIC8qIEZUUF9SRVNUQVJUICovCisjaWZkZWYgUkVD VVJTSVZFCisgICAgIiAgL1JFQ1VSU0lWRSIsCisgICAgIiAgICBTZW5kIGZpbGVzIGZyb20gdGhl IGdpdmVuIGRpcmVjdG9yeSBhbmQgYWxsIHRoZSBkaXJlY3RvcmllcyBiZW5lYXRoIiwKKyAgICAi ICAgIGl0LiAgU3lub255bTogL1NVQkRJUkVDVE9SSUVTLiIsCisjZW5kaWYgLyogUkVDVVJTSVZF ICovCisgICAgIiAgL1JFTkFNRS1UTzp0ZXh0IiwKKyAgICAiICAgIEVhY2ggc291cmNlIGZpbGUg dGhhdCBpcyB1cGxvYWRlZCBpcyB0byBiZSByZW5hbWVkIG9uIHRoZSBsb2NhbCIsCisgICAgIiAg ICBsb2NhbCBjb21wdXRlciBhcyBpbmRpY2F0ZWQgd2hlbiBhbmQgb25seSBpZiwgdGhlIHRyYW5z ZmVyIGNvbXBsZXRlcyIsCisgICAgIiAgICBzdWNjZXNzZnVsbHkuIiwKKyNpZm5kZWYgTk9DU0VU UworICAgICIgIC9TRVJWRVItQ0hBUkFDVEVSLVNFVDpuYW1lIiwKKyAgICAiICAgIFdoZW4gdXBs b2FkaW5nIGluIHRleHQgbW9kZSBhbmQgY2hhcmFjdGVyLXNldCBjb252ZXJzaW9uIGlzIGRlc2ly ZWQsIiwKKyAgICAiICAgIHRoaXMgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXIgc2V0IHRvIHdoaWNo IHRoZSBmaWxlIHNob3VsZCBiZSIsCisgICAgIiAgICBjb252ZXJ0ZWQgZm9yIHN0b3JhZ2Ugb24g dGhlIHNlcnZlci4iLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAiICAvU0VSVkVSLVJFTkFN RTp0ZXh0IiwKKyAgICAiICAgIEVhY2ggZmlsZSB0aGF0IGlzIHVwbG9hZGVkIGlzIHRvIGJlIHJl bmFtZWQgYXMgaW5kaWNhdGVkIG9uIHRoZSIsCisgICAgIiAgICBzZXJ2ZXIgYWZ0ZXIsIGFuZCBv bmx5IGlmLCBpZiBhcnJpdmVzIHN1Y2Nlc3NmdWxseS4iLAorICAgICIgIC9TSU1VTEFURSIsCisg ICAgIiAgICBTaG93IHdoaWNoIGZpbGVzIHdvdWxkIGJlIHNlbnQgd2l0aG91dCBhY3R1YWxseSBz ZW5kaW5nIHRoZW0uIiwKKyAgICAiICAvU01BTExFUi1USEFOOm51bWJlciIsCisgICAgIiAgICBV cGxvYWQgb25seSB0aG9zZSBmaWxlcyBzbWFsbGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBi eXRlcy4iLAorICAgICIgIC9URVhUIiwKKyAgICAiICAgIEZvcmNlIHRleHQgbW9kZS4gIFN5bm9u eW06IC9BU0NJSS4iLAorICAgICIgIC9URU5FWCIsCisgICAgIiAgICBGb3JjZSBURU5FWCAoVE9Q Uy0yMCkgbW9kZSAoc2VlIEhFTFAgU0VUIEZUUCBUWVBFKS4iLAorI2lmbmRlZiBOT0NTRVRTCisg ICAgIiAgL1RSQU5TUEFSRU5UIiwKKyAgICAiICAgIFdoZW4gdXBsb2FkaW5nIGluIHRleHQgbW9k ZSwgZG8gbm90IGNvbnZlcnQgY2hyYWN0ZXItc2V0cy4iLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8K KyAgICAiICAvVFlQRTp7VEVYVCxCSU5BUll9IiwKKyAgICAiICAgIFVwbG9hZCBvbmx5IGZpbGVz IG9mIHRoZSBnaXZlbiB0eXBlLiIsCisjaWZkZWYgRE9VUERBVEUKKyAgICAiICAvVVBEQVRFIiwK KyAgICAiICAgIElmIGEgZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0cyBvbiB0aGUgc2VydmVy LCB1cGxvYWQgb25seSBpZiIsCisgICAgIiAgICB0aGUgbG9jYWwgZmlsZSBpcyBuZXdlci4iLAor I2VuZGlmIC8qIERPVVBEQVRFICovCisgICAgIiAgL1VOSVFVRS1TRVJWRVItTkFNRVMiLAorICAg ICIgICAgQXNrIHRoZSBzZXJ2ZXIgdG8gY29tcHV0ZSBuZXcgbmFtZXMgZm9yIGFueSBpbmNvbWlu ZyBmaWxlIHRoYXQgaGFzIiwKKyAgICAiICAgIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3Rpbmcg ZmlsZS4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfb3BuW10gPSB7ICAgICAgICAg ICAgIC8qIE9QRU4gKi8KKyNpZmRlZiBDS19TU0wKKyAgICAiU3ludGF4OiBGVFAgWyBPUEVOIF0g WyB7IC9TU0wsIC9UTFMgfSBdIGhvc3RuYW1lIFsgcG9ydCBdIFsgc3dpdGNoZXMgXSIsCisgICAg IiAgT3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBGVFAgc2VydmVyIG9uIHRoZSBnaXZlbiBob3N0 LiAgVGhlIGRlZmF1bHQiLAorICAgICIgIFRDUCBwb3J0IGlzIDIxICg5OTAgaWYgU1NML1RMUyBp cyB1c2VkKSwgYnV0IGEgZGlmZmVyZW50IHBvcnQgbnVtYmVyIiwKKyAgICAiICBjYW4gYmUgc3Vw cGxpZWQgaWYgbmVjZXNzYXJ5LiAgT3B0aW9uYWwgc3dpdGNoZXMgYXJlOiIsCisjZWxzZSAvKiBD S19TU0wgKi8KKyAgICAiU3ludGF4OiBGVFAgWyBPUEVOIF0gaG9zdG5hbWUgWyBwb3J0IF0gWyBz d2l0Y2hlcyBdIiwKKyAgICAiICBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIEZUUCBzZXJ2ZXIg b24gdGhlIGdpdmVuIGhvc3QuICBUaGUgZGVmYXVsdCIsCisgICAgIiAgVENQIHBvcnQgaXMgMjEs IGJ1dCBhIGRpZmZlcmVudCBwb3J0IG51bWJlciBjYW4gYmUgc3VwcGxpZWQgaWYiLAorICAgICIg IG5lY2Vzc2FyeS4gIE9wdGlvbmFsIHN3aXRjaGVzIGFyZToiLAorI2VuZGlmIC8qIENLX1NTTCAq LworICAgICIgIiwKKyAgICAiICAvQU5PTllNT1VTIiwKKyAgICAiICAgIExvZ3MgeW91IGluIGFu b255bW91c2x5LiIsCisgICAgIiAgL1VTRVI6dGV4dCIsCisgICAgIiAgICBTdXBwbGllcyB0aGUg Z2l2ZW4gdGV4dCBhcyB5b3VyIHVzZXJuYW1lLiIsCisgICAgIiAgL1BBU1NXT1JEOnRleHQiLAor ICAgICIgICAgU3VwcGxpZXMgdGhlIGdpdmVuIHRleHQgYXMgeW91ciBwYXNzd29yZC4gIElmIHlv dSBpbmNsdWRlIGEgdXNlcm5hbWUiLAorICAgICIgICAgYnV0IG9taXQgdGhpcyBzd2l0Y2ggYW5k IHRoZSBzZXJ2ZXIgcmVxdWlyZXMgYSBwYXNzd29yZCwgeW91IGFyZSIsCisgICAgIiAgICBwcm9t cHRlZCBmb3IgaXQuIiwKKyAgICAiICAvQUNDT1VOVDp0ZXh0IiwKKyAgICAiICAgIFN1cHBsaWVz IHRoZSBnaXZlbiB0ZXh0IGFzIHlvdXIgYWNjb3VudCwgaWYgcmVxdWlyZWQgYnkgdGhlIHNlcnZl ci4iLAorICAgICIgIC9BQ1RJVkUiLAorICAgICIgICAgRm9yY2VzIGFuIGFjdGl2ZSAocmF0aGVy IHRoYW4gcGFzc2l2ZSkgY29ubmVjdGlvbi4iLAorICAgICIgIC9QQVNTSVZFIiwKKyAgICAiICAg IEZvcmNlcyBhIHBhc3NpdmUgKHJhdGhlciB0aGFuIGFjdGl2ZSkgY29ubmVjdGlvbi4iLAorICAg ICIgIC9OT0lOSVQiLAorICAgICIgICAgSW5oaWJpdHMgc2VuZGluZyBpbml0aWFsIFJFU1QsIFNU UlUsIGFuZCBNT0RFIGNvbW1hbmRzLCB3aGljaCBhcmUiLAorICAgICIgICAgd2VsbC1rbm93biBz dGFuZGFyZCBjb21tYW5kcywgYnV0IHRvIHdoaWNoIHNvbWUgc2VydmVycyByZWFjdCBiYWRseS4i LAorICAgICIgIC9OT0xPR0lOIiwKKyAgICAiICAgIEluaGliaXRzIGF1dG9sb2dpbiBmb3IgdGhp cyBjb25uZWN0aW9uIG9ubHkuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX29wdFtd ID0geyAgICAgICAgICAgICAvKiBPUFRTLCBPUFRJT05TICovCisgICAgIlN5bnRheDogRlRQIE9Q VElPTlMiLAorICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gbGlzdCBpdHMgY3VycmVudCBv cHRpb25zLiAgQWR2YW5jZWQsIG5ldywiLAorICAgICIgIG5vdCBzdXBwb3J0ZWQgYnkgbW9zdCBG VFAgc2VydmVycy4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfcHV0W10gPSB7ICAg ICAgICAgICAgIC8qIFBVVCwgU0VORCAqLworICAgICJTeW50YXg6IFsgRlRQIF0gUFVUIFsgc3dp dGNoZXMgXSBmaWxlc3BlYyBbIGFzLW5hbWUgXSIsCisgICAgIiAgTGlrZSBGVFAgTVBVVCwgYnV0 IG9ubHkgb25lIGZpbGVzcGVjIGlzIGFsbG93ZWQsIGFuZCBpZiBpdCBpcyBmb2xsb3dlZCIsCisg ICAgIiAgYnkgYW4gYWRkaXRpb25hbCBmaWVsZCwgdGhpcyBpcyBpbnRlcnByZXRlZCBhcyB0aGUg bmFtZSB1bmRlciB3aGljaCIsCisgICAgIiAgdG8gc2VuZCB0aGUgZmlsZSBvciBmaWxlcy4gIFNl ZSBIRUxQIEZUUCBNUFVULiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZoc19yZXB1dFtd ID0gewkJLyogUkVQVVQsIFJFU0VORCAqLworICAgICJTeW50YXg6IFsgRlRQIF0gUkVQVVQgWyBz d2l0Y2hlcyBdIGZpbGVzcGVjIFsgYXMtbmFtZSBdIiwKKyAgICAiICBTeW5vbnltIGZvciBGVFAg UFVUIC9SRUNPVkVSLiAgUmVjb3ZlcnMgYW4gaW50ZXJydXB0ZWQgYmluYXJ5LW1vZGUiLAorICAg ICIgIHVwbG9hZCBmcm9tIHRoZSBwb2ludCBvZiBmYWlsdXJlIGlmIHRoZSBGVFAgc2VydmVyIHN1 cHBvcnRzIHJlY292ZXJ5LiIsCisgICAgIiAgU3lub255bTogWyBGVFAgXSBSRVNFTkQuICBGb3Ig ZGV0YWlscyBzZWUgSEVMUCBGVFAgTVBVVC4iLAorICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBm aHNfcHdkW10gPSB7ICAgICAgICAgICAgIC8qIFBXRCAqLworICAgICJTeW50YXg6IEZUUCBQV0Qi LAorICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gcmV2ZWFsIGl0cyBjdXJyZW50IHdvcmtp bmcgZGlyZWN0b3J5LiIsCisgICAgIiAgU3lub255bXM6IFJFTU9URSBQV0QsIFJQV0QuIiwKKyAg ICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3F1b1tdID0geyAgICAgICAgICAgICAvKiBRVU9U RSAqLworICAgICJTeW50YXg6IEZUUCBRVU9URSB0ZXh0IiwKKyAgICAiICBTZW5kcyBhbiBGVFAg cHJvdG9jb2wgY29tbWFuZCB0byB0aGUgRlRQIHNlcnZlci4gIFVzZSB0aGlzIGNvbW1hbmQiLAor ICAgICIgIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRoYXQgS2VybWl0IG1pZ2h0IG5vdCBzdXBwb3J0 LiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZoc19yZ2VbXSA9IHsgICAgICAgICAgICAg LyogUkVHRVQgKi8KKyAgICAiU3ludGF4OiBGVFAgUkVHRVQiLAorICAgICIgIFN5bm9ueW0gZm9y IEZUUCBHRVQgL1JFQ09WRVIuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3Jlbltd ID0geyAgICAgICAgICAgICAvKiBSRU5BTUUgKi8KKyAgICAiU3ludGF4OiBGVFAgUkVOQU1FIG5h bWUxIG5hbWUxIiwKKyAgICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSB0aGUgbmFt ZSBvZiB0aGUgZmlsZSB3aG9zZSBuYW1lIGlzIG5hbWUxIiwKKyAgICAiICBhbmQgd2hpY2ggcmVz aWRlcyBpbiB0aGUgRlRQIHNlcnZlcidzIGZpbGUgc3lzdGVtLCB0byBuYW1lMi4gIFdvcmtzIiwK KyAgICAiICBvbmx5IGZvciBzaW5nbGUgZmlsZXM7IHdpbGRjYXJkcyBhcmUgbm90IGFjY2VwdGVk LiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZoc19yZXNbXSA9IHsgICAgICAgICAgICAg LyogUkVTRVQgKi8KKyAgICAiU3ludGF4OiBGVFAgUkVTRVQiLAorICAgICIgIEFza3MgdGhlIHNl cnZlciB0byBsb2cgb3V0IHlvdXIgc2Vzc2lvbiwgdGVybWluYXRpbmcgeW91ciBhY2Nlc3MiLAor ICAgICIgIHJpZ2h0cywgd2l0aG91dCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLiIsCisgICAgIiIK K307CitzdGF0aWMgY2hhciAqIGZoc19ybWRbXSA9IHsgICAgICAgICAgICAgLyogUk1ESVIgKi8K KyAgICAiU3ludGF4OiBGVFAgUk1ESVIgZGlyZWN0b3J5IiwKKyAgICAiICBBc2tzIHRoZSBGVFAg c2VydmVyIHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMgZ2l2ZW4uIiwKKyAg ICAiICBUaGlzIHVzdWFsbHkgcmVxdWlyZXMgdGhlIGRpcmVjdG9yeSB0byBiZSBlbXB0eS4gIFN5 bm9ueW1zOiBSRU1PVEUiLAorICAgICIgIFJNRElSLCBSUk1ESVIuIiwKKyAgICAiIgorfTsKK3N0 YXRpYyBjaGFyICogZmhzX3NpdFtdID0geyAgICAgICAgICAgICAvKiBTSVRFICovCisgICAgIlN5 bnRheDogRlRQIFNJVEUgdGV4dCIsCisgICAgIiAgU2VuZHMgYSBzaXRlLXNwZWNpZmljIGNvbW1h bmQgdG8gdGhlIEZUUCBzZXJ2ZXIuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3Np eltdID0geyAgICAgICAgICAgICAvKiBTSVpFICovCisgICAgIlN5bnRheDogRlRQIFNJWkUgZmls ZW5hbWUiLAorICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gc2VuZCBhIG51bWVyaWMgc3Ry aW5nIHJlcHJlc2VudGluZyB0aGUgc2l6ZSIsCisgICAgIiAgb2YgdGhlIGdpdmVuIGZpbGUuIiwK KyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3N0YVtdID0geyAgICAgICAgICAgICAvKiBT VEFUVVMgKi8KKyAgICAiU3ludGF4OiBGVFAgU1RBVFVTIFsgZmlsZW5hbWUgXSIsCisgICAgIiAg QXNrcyB0aGUgRlRQIHNlcnZlciB0byByZXBvcnQgaXRzIHN0YXR1cy4gIElmIGEgZmlsZW5hbWUg aXMgZ2l2ZW4sIiwKKyAgICAiICB0aGUgRlRQIHNlcnZlciBzaG91bGQgcmVwb3J0IGRldGFpbHMg YWJvdXQgdGhlIGZpbGUuIiwKKyAgICAiIgorfTsKK3N0YXRpYyBjaGFyICogZmhzX3N5c1tdID0g eyAgICAgICAgICAgICAvKiBTWVNURU0gKi8KKyAgICAiU3ludGF4OiBGVFAgU1lTVEVNIiwKKyAg ICAiICBBc2tzIHRoZSBGVFAgc2VydmVyIHRvIHJlcG9ydCBpdHMgb3BlcmF0aW5nIHN5c3RlbSB0 eXBlLiIsCisgICAgIiIKK307CitzdGF0aWMgY2hhciAqIGZoc190eXBbXSA9IHsgICAgICAgICAg ICAgLyogVFlQRSAqLworICAgICJTeW50YXg6IEZUUCBUWVBFIHsgVEVYVCwgQklOQVJZLCBURU5F WCB9IiwKKyAgICAiICBQdXRzIHRoZSBjbGllbnQgYW5kIHNlcnZlciBpbiB0aGUgaW5kaWNhdGVk IHRyYW5zZmVyIG1vZGUuIiwKKyAgICAiICBBU0NJSSBpcyBhIHN5bm9ueW0gZm9yIFRFWFQuICBU RU5FWCBpcyB1c2VkIG9ubHkgZm9yIHVwbG9hZGluZyA4LWJpdCIsCisgICAgIiAgYmluYXJ5IGZp bGVzIHRvIGEgMzYtYml0IHBsYXRmb3JtcyBzdWNoIGFzIFRFTkVYIG9yIFRPUFMtMjAgYW5kL29y IiwKKyAgICAiICBkb3dubG9hZGluZyBmaWxlcyBmcm9tIFRFTkVYIG9yIFRPUFMtMjAgdGhhdCBo YXZlIGJlZW4gdXBsb2FkZWQgaW4iLAorICAgICIgIFRFTkVYIG1vZGUuIiwKKyAgICAiIgorfTsK K3N0YXRpYyBjaGFyICogZmhzX3VtYVtdID0geyAgICAgICAgICAgICAvKiBVTUFTSyAqLworICAg ICJTeW50YXg6IEZUUCBVTUFTSyBudW1iZXIiLAorICAgICIgIEFza3MgdGhlIEZUUCBzZXJ2ZXIg dG8gc2V0IGl0cyBmaWxlIGNyZWF0aW9uIG1vZGUgbWFzay4gIEFwcGxpZXMiLAorICAgICIgIG9u bHkgKG9yIG1haW5seSkgdG8gVU5JWC1iYXNlZCBGVFAgc2VydmVycy4iLAorICAgICIiCit9Owor c3RhdGljIGNoYXIgKiBmaHNfY2hrW10gPSB7ICAgICAgICAgICAgIC8qIENIRUNLICovCisgICAg IlN5bnRheDogRlRQIENIRUNLIHJlbW90ZS1maWxlc3BlYyIsCisgICAgIiAgQXNrcyB0aGUgRlRQ IHNlcnZlciBpZiB0aGUgZ2l2ZW4gZmlsZSBvciBmaWxlcyBleGlzdC4gIElmIHRoZSIsCisgICAg IiAgcmVtb3RlLWZpbGVzcGVjIGNvbnRhaW5zIHdpbGRjYXJkcywgdGhpcyBjb21tYW5kIGZhaWxz IGlmIG5vIHNlcnZlciIsCisgICAgIiAgZmlsZXMgbWF0Y2gsIGFuZCBzdWNjZWVkcyBpZiBhdCBs ZWFzdCBvbmUgZmlsZSBtYXRjaGVzLiAgSWYgdGhlIiwKKyAgICAiICByZW1vdGUtZmlsZXNwZWMg ZG9lcyBub3QgY29udGFpbiB3aWxkY2FyZHMsIHRoaXMgY29tbWFuZCBzdWNjZWVkcyBpZiIsCisg ICAgIiAgdGhlIGdpdmVuIGZpbGUgZXhpc3RzIGFuZCBmYWlscyBpZiBpdCBkb2VzIG5vdC4iLAor ICAgICIiCit9Oworc3RhdGljIGNoYXIgKiBmaHNfZW5hW10gPSB7CQkvKiBFTkFCTEUgKi8KKyAg ICAiU3ludGF4OiBGVFAgRU5BQkxFIHsgQVVUSCwgRkVBVCwgTURUTSwgTUxTVCwgU0laRSB9IiwK KyAgICAiICBFbmFibGVzIHRoZSB1c2Ugb2YgdGhlIGdpdmVuIEZUUCBwcm90b2NvbCBjb21tYW5k IGluIGNhc2UgaXQgaGFzIGJlZW4iLAorICAgICIgIGRpc2FibGVkIChidXQgdGhpcyBpcyBubyBn dWFyYW50ZWUgdGhhdCB0aGUgRlRQIHNlcnZlciB1bmRlcnN0YW5kcyBpdCkuIgorLAorICAgICIg IFVzZSBTSE9XIEZUUCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgY29tbWFuZHMgaXMgZW5hYmxlZCBh bmQgZGlzYWJsZWQuIiwKKyAgICAiICBBbHNvIHNlZSBGVFAgRElTQUJMRS4iLAorICAgICIiCit9 Oworc3RhdGljIGNoYXIgKiBmaHNfZGlzW10gPSB7CQkvKiBESVNBQkxFICovCisgICAgIlN5bnRh eDogRlRQIERJU0FCTEUgeyBBVVRILCBGRUFULCBNRFRNLCBNTFNULCBTSVpFIH0iLAorICAgICIg IERpc2FibGVzIHRoZSB1c2Ugb2YgdGhlIGdpdmVuIEZUUCBwcm90b2NvbCBjb21tYW5kLiIsCisg ICAgIiAgQWxzbyBzZWUgRlRQIEVOQUJMRS4iLAorICAgICIiCit9OworCisjZW5kaWYgLyogTk9I RUxQICovCisKK2ludAorZG9mdHBobHAoKSB7CisgICAgaW50IGN4OworICAgIGlmICgoY3ggPSBj bWtleShmdHBjbWR0YWIsbmZ0cGNtZCwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgIGlmIChj eCAhPSAtMykKKyAgICAgICAgcmV0dXJuKGN4KTsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp CisgICAgICByZXR1cm4oeCk7CisKKyNpZmRlZiBOT0hFTFAKKyAgICBwcmludGYoIlNvcnJ5LCBu byBoZWxwIGF2YWlsYWJsZVxuIik7CisjZWxzZQorICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgIGNh c2UgLTM6CisgICAgICAgIHJldHVybihobXNnYShmaHNfZnRwKSk7CisgICAgICBjYXNlIEZUUF9B Q0M6ICAgICAgICAgICAgICAgICAgICAgLyogQUNDT1VOVCAqLworICAgICAgICByZXR1cm4oaG1z Z2EoZmhzX2FjYykpOworICAgICAgY2FzZSBGVFBfQVBQOiAgICAgICAgICAgICAgICAgICAgIC8q IEFQUEVORCAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX2FwcCkpOworICAgICAgY2FzZSBG VFBfQ0xTOiAgICAgICAgICAgICAgICAgICAgIC8qIEJZRSwgQ0xPU0UgKi8KKyAgICAgICAgcmV0 dXJuKGhtc2dhKGZoc19jbHMpKTsKKyAgICAgIGNhc2UgRlRQX0NXRDogICAgICAgICAgICAgICAg ICAgICAvKiBDRCwgQ1dEICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfY3dkKSk7CisgICAg ICBjYXNlIEZUUF9HVVA6ICAgICAgICAgICAgICAgICAgICAgLyogQ0RVUCwgVVAgKi8KKyAgICAg ICAgcmV0dXJuKGhtc2dhKGZoc19ndXApKTsKKyAgICAgIGNhc2UgRlRQX0NITTogICAgICAgICAg ICAgICAgICAgICAvKiBDSE1PRCAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX2NobSkpOwor ICAgICAgY2FzZSBGVFBfTURFOiAgICAgICAgICAgICAgICAgICAgIC8qIERFTEVURSwgTURFTEVU RSAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX21kZSkpOworICAgICAgY2FzZSBGVFBfRElS OiAgICAgICAgICAgICAgICAgICAgIC8qIERJUkVDVE9SWSAqLworICAgICAgICByZXR1cm4oaG1z Z2EoZmhzX2RpcikpOworICAgICAgY2FzZSBGVFBfVkRJOiAgICAgICAgICAgICAgICAgICAgIC8q IFZESVJFQ1RPUlkgKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc192ZGkpKTsKKyAgICAgIGNh c2UgRlRQX0ZFQTogICAgICAgICAgICAgICAgICAgICAvKiBGRUFUVVJFUyAqLworICAgICAgICBy ZXR1cm4oaG1zZ2EoZmhzX2ZlYSkpOworICAgICAgY2FzZSBGVFBfR0VUOiAgICAgICAgICAgICAg ICAgICAgIC8qIEdFVCAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX2dldCkpOworICAgICAg Y2FzZSBGVFBfSExQOiAgICAgICAgICAgICAgICAgICAgIC8qIEhFTFAgKi8KKyAgICAgICAgcmV0 dXJuKGhtc2dhKGZoc19obHApKTsKKyAgICAgIGNhc2UgRlRQX0lETDogICAgICAgICAgICAgICAg ICAgICAvKiBJRExFICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfaWRsKSk7CisgICAgICBj YXNlIEZUUF9VU1I6ICAgICAgICAgICAgICAgICAgICAgLyogVVNFUiwgTE9HSU4gKi8KKyAgICAg ICAgcmV0dXJuKGhtc2dhKGZoc191c3IpKTsKKyAgICAgIGNhc2UgRlRQX01HRTogICAgICAgICAg ICAgICAgICAgICAvKiBNR0VUICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfbWdlKSk7Cisg ICAgICBjYXNlIEZUUF9NS0Q6ICAgICAgICAgICAgICAgICAgICAgLyogTUtESVIgKi8KKyAgICAg ICAgcmV0dXJuKGhtc2dhKGZoc19ta2QpKTsKKyAgICAgIGNhc2UgRlRQX01PRDogICAgICAgICAg ICAgICAgICAgICAvKiBNT0RUSU1FICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfbW9kKSk7 CisgICAgICBjYXNlIEZUUF9NUFU6ICAgICAgICAgICAgICAgICAgICAgLyogTVBVVCAqLworICAg ICAgICByZXR1cm4oaG1zZ2EoZmhzX21wdSkpOworICAgICAgY2FzZSBGVFBfT1BOOiAgICAgICAg ICAgICAgICAgICAgIC8qIE9QRU4gKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19vcG4pKTsK KyAgICAgIGNhc2UgRlRQX09QVDogICAgICAgICAgICAgICAgICAgICAvKiBPUFRTLCBPUFRJT05T ICovCisgICAgICAgIHJldHVybihobXNnYShmaHNfb3B0KSk7CisgICAgICBjYXNlIEZUUF9QVVQ6 ICAgICAgICAgICAgICAgICAgICAgLyogUFVULCBTRU5EICovCisgICAgICAgIHJldHVybihobXNn YShmaHNfcHV0KSk7CisgICAgICBjYXNlIEZUUF9SRVA6ICAgICAgICAgICAgICAgICAgICAgLyog UkVQVVQsIFJFU0VORCAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3JlcHV0KSk7CisgICAg ICBjYXNlIEZUUF9QV0Q6ICAgICAgICAgICAgICAgICAgICAgLyogUFdEICovCisgICAgICAgIHJl dHVybihobXNnYShmaHNfcHdkKSk7CisgICAgICBjYXNlIEZUUF9RVU86ICAgICAgICAgICAgICAg ICAgICAgLyogUVVPVEUgKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19xdW8pKTsKKyAgICAg IGNhc2UgRlRQX1JHRTogICAgICAgICAgICAgICAgICAgICAvKiBSRUdFVCAqLworICAgICAgICBy ZXR1cm4oaG1zZ2EoZmhzX3JnZSkpOworICAgICAgY2FzZSBGVFBfUkVOOiAgICAgICAgICAgICAg ICAgICAgIC8qIFJFTkFNRSAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3JlbikpOworICAg ICAgY2FzZSBGVFBfUkVTOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFU0VUICovCisgICAgICAg IHJldHVybihobXNnYShmaHNfcmVzKSk7CisgICAgICBjYXNlIEZUUF9STUQ6ICAgICAgICAgICAg ICAgICAgICAgLyogUk1ESVIgKi8KKyAgICAgICAgcmV0dXJuKGhtc2dhKGZoc19ybWQpKTsKKyAg ICAgIGNhc2UgRlRQX1NJVDogICAgICAgICAgICAgICAgICAgICAvKiBTSVRFICovCisgICAgICAg IHJldHVybihobXNnYShmaHNfc2l0KSk7CisgICAgICBjYXNlIEZUUF9TSVo6ICAgICAgICAgICAg ICAgICAgICAgLyogU0laRSAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3NpeikpOworICAg ICAgY2FzZSBGVFBfU1RBOiAgICAgICAgICAgICAgICAgICAgIC8qIFNUQVRVUyAqLworICAgICAg ICByZXR1cm4oaG1zZ2EoZmhzX3N0YSkpOworICAgICAgY2FzZSBGVFBfU1lTOiAgICAgICAgICAg ICAgICAgICAgIC8qIFNZU1RFTSAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3N5cykpOwor ICAgICAgY2FzZSBGVFBfVFlQOiAgICAgICAgICAgICAgICAgICAgIC8qIFRZUEUgKi8KKyAgICAg ICAgcmV0dXJuKGhtc2dhKGZoc190eXApKTsKKyAgICAgIGNhc2UgRlRQX1VNQTogICAgICAgICAg ICAgICAgICAgICAvKiBVTUFTSyAqLworICAgICAgICByZXR1cm4oaG1zZ2EoZmhzX3VtYSkpOwor ICAgICAgY2FzZSBGVFBfQ0hLOiAgICAgICAgICAgICAgICAgICAgIC8qIENIRUNLICovCisgICAg ICAgIHJldHVybihobXNnYShmaHNfY2hrKSk7CisgICAgICBjYXNlIEZUUF9FTkE6CisgICAgICAg IHJldHVybihobXNnYShmaHNfZW5hKSk7CisgICAgICBjYXNlIEZUUF9ESVM6CisgICAgICAgIHJl dHVybihobXNnYShmaHNfZGlzKSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIlNv cnJ5LCBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBjb21tYW5kLlxuIik7CisgICAgICAgIGJyZWFr OworICAgIH0KKyNlbmRpZiAvKiBOT0hFTFAgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor fQorCitpbnQKK2Rvc2V0ZnRwaGxwKCkgeworICAgIGludCBjeDsKKyAgICBpZiAoKGN4ID0gY21r ZXkoZnRwc2V0LG5mdHBzZXQsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICBpZiAoY3ggIT0g LTMpCisgICAgICAgIHJldHVybihjeCk7CisgICAgaWYgKGN4ICE9IC0zKQorICAgICAgY2tzdHJu Y3B5KHRtcGJ1ZixhdG1idWYsVE1QQlVGU0laKTsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp CisgICAgICByZXR1cm4oeCk7CisKKyNpZmRlZiBOT0hFTFAKKyAgICBwcmludGYoIlNvcnJ5LCBu byBoZWxwIGF2YWlsYWJsZVxuIik7CisjZWxzZQorICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgIGNh c2UgLTM6CisgICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgcGFyYW1ldGVyIHZhbHVl XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFR5cGUgXCJoZWxwIHNldCBmdHAgP1wiIGZvciBhIGxp c3Qgb2YgcGFyYW1ldGVycy5cbiIpOworICAgICAgICBwcmludGYoIiAgVHlwZSBcImhlbHAgc2V0 IGZ0cCB4eHhcIiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgc2V0dGluZ1xuIik7CisgICAgICAgIHBy aW50ZigiICBwYXJhbWV0ZXIgeHh4LiAgVHlwZSBcInNob3cgZnRwXCIgZm9yIGN1cnJlbnQgdmFs dWVzLlxuXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlIEZUU19CVUc6CisJ cHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBCVUcgPG5hbWU+IHtPTiwgT0ZGfVxuIik7CisJcHJp bnRmKAorCSAgICAiICBBY3RpdmF0ZXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgbmFtZWQgYnVnIGlu IHRoZSBGVFAgc2VydmVyLlxuIik7CisJcHJpbnRmKCIgIFR5cGUgU0VUIEZUUCBCVUcgPyBmb3Ig YSBsaXN0IG9mIG5hbWVzLlxuIik7CisJcHJpbnRmKCIgIEZvciBlYWNoIGJ1ZywgdGhlIGRlZmF1 bHQgaXMgT0ZGXG5cbiIpOworCXJldHVybigwKTsKKworI2lmZGVmIEZUUF9TRUNVUklUWQorICAg ICAgY2FzZSBGVFNfQVRQOiAgICAgICAgICAgICAgICAgICAgIC8qICJhdXRodHlwZSIgKi8KKyAg ICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBBVVRIVFlQRSBsaXN0XG4iKTsKKyAgICAg ICAgcHJpbnRmKCIgIFNwZWNpZmllcyBhbiBvcmRlcmVkIGxpc3Qgb2YgYXV0aGVudGljYXRpb24g bWV0aG9kcyB0byBiZVxuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCIgIHdo ZW4gRlRQIEFVVE9BVVRIRU5USUNBVElPTiBpcyBPTi4gIFRoZSBkZWZhdWx0IGxpc3QgaXM6XG4i KTsKKyAgICAgICAgcHJpbnRmKCIgIEdTU0FQSS1LUkI1LCBTUlAsIEtFUkJFUk9TX1Y0LCBUTFMs IFNTTC5cblxuIik7CisgICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSBGVFNfQVVUOiAg ICAgICAgICAgICAgICAgICAgIC8qICJhdXRvYXV0aGVudGljYXRpb24iICovCisgICAgICAgIHBy aW50ZigiXG5TeW50YXg6U0VUIEZUUCBBVVRPQVVUSEVOVElDQVRJT04geyBPTiwgT0ZGIH1cbiIp OworICAgICAgICBwcmludGYoIiAgVGVsbHMgd2hldGhlciBhdXRoZW50aWNhdGlvbiBzaG91bGQg YmUgbmVnb3RpYXRlZCBieSB0aGVcbiIpOworICAgICAgICBwcmludGYoIiAgRlRQIE9QRU4gY29t bWFuZC4gIERlZmF1bHQgaXMgT04uXG5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz ZSBGVFNfQ1JZOiAgICAgICAgICAgICAgICAgICAgIC8qICJhdXRvZW5jcnlwdGlvbiIgKi8KKyAg ICAgICAgcHJpbnRmKCJcblNFVCBGVFAgQVVUT0VOQ1JZUFRJT04geyBPTiwgT0ZGIH1cbiIpOwor ICAgICAgICBwcmludGYoIiAgVGVsbHMgd2hldGhlciBlbmNyeXB0aW9uIChwcml2YWN5KSBzaG91 bGQgYmUgbmVnb3RpYXRlZFxuIik7CisgICAgICAgIHByaW50ZigiICBieSB0aGUgRlRQIE9QRU4g Y29tbWFuZC4gIERlZmF1bHQgaXMgT04uXG5cbiIpOworICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBGVFBfU0VDVVJJVFkgKi8KKworICAgICAgY2FzZSBGVFNfTE9HOiAgICAgICAgICAgICAgICAg ICAgIC8qICJhdXRvbG9naW4iICovCisgICAgICAgIHByaW50ZigiXG5TRVQgRlRQIEFVVE9MT0dJ TiB7IE9OLCBPRkYgfVxuIik7CisgICAgICAgIHByaW50ZigiICBUZWxscyBLZXJtaXQgd2hldGhl ciB0byB0cnkgdG8gbG9nIHlvdSBpbiBhdXRvbWF0aWNhbGx5XG4iKTsKKyAgICAgICAgcHJpbnRm KCIgIGFzIHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy5cblxuIik7CisgICAgICAgIGJy ZWFrOworCisgICAgICBjYXNlIEZUU19ESVM6CisgICAgICAgIHByaW50ZigiXG5TRVQgRlRQIERJ U1BMQVkgeyBCUklFRiwgRlVMTFNDUkVFTiwgQ1JULCAuLi4gfVxuIik7CisJcHJpbnRmKCIgIENo b29zZXMgdGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSBzdHlsZSBmb3IgRlRQLlxuIik7CisgICAg ICAgIHByaW50ZigiICBMaWtlIFNFVCBUUkFOU0ZFUiBESVNQTEFZIGJ1dCBhcHBsaWVzIG9ubHkg dG8gRlRQLlxuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZm5kZWYgTk9DU0VUUworICAgICAg Y2FzZSBGVFNfWExBOiAgICAgICAgICAgICAgICAgICAgIC8qICJjaGFyYWN0ZXItc2V0LXRyYW5z bGF0aW9uIiAqLworICAgICAgICBwcmludGYoIlxuU0VUIEZUUCBDSEFSQUNURVItU0VULVRSQU5T TEFUSU9OIHsgT04sIE9GRiB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8gdHJh bnNsYXRlIGNoYXJhY3RlciBzZXRzIHdoZW4gdHJhbnNmZXJyaW5nXG4iKTsKKyAgICAgICAgcHJp bnRmKCIgIHRleHQgZmlsZXMgd2l0aCBGVFAuICBPRkYgYnkgZGVmYXVsdC5cblxuIik7CisgICAg ICAgIGJyZWFrOworCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgICAgY2FzZSBGVFNfRk5DOiAg ICAgICAgICAgICAgICAgICAgIC8qICJjb2xsaXNpb24iICovCisgICAgICAgIHByaW50ZigiXG4i KTsKKyAgICAgICAgcHJpbnRmKAorIlN5bnRheDogU0VUIEZUUCBDT0xMSVNJT04geyBCQUNLVVAs UkVOQU1FLFVQREFURSxESVNDQVJELEFQUEVORCxPVkVSV1JJVEUgfVxuIgorICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgcHJpbnRmKCIgIFRlbGxzIHdoYXQgZG8gd2hlbiBhbiBpbmNvbWluZyBm aWxlIGhhcyB0aGUgc2FtZSBuYW1lIGFzXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIGFuIGV4aXN0 aW5nIGZpbGUgd2hlbiBkb3dubG9hZGluZyB3aXRoIEZUUC5cblxuIik7CisgICAgICAgIGJyZWFr OworCisjaWZkZWYgRlRQX1NFQ1VSSVRZCisgICAgICBjYXNlIEZUU19DUEw6ICAgICAgICAgICAg ICAgICAgICAgLyogImNvbW1hbmQtcHJvdGVjdGlvbi1sZXZlbCIgKi8KKyAgICAgICAgcHJpbnRm KCJcbiIpOworICAgICAgICBwcmludGYoCisiU3ludGF4OiBTRVQgRlRQIENPTU1BTkQtUFJPVEVD VElPTi1MRVZFTCB7IENMRUFSLENPTkZJREVOVElBTCxQUklWQVRFLFNBRkUgfSIKKyAgICAgICAg ICAgICAgICk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgcHJpbnRmKAorIiAgVGVs bHMgd2hhdCBsZXZlbCBvZiBwcm90ZWN0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIEZUUCBjb21tYW5k IGNoYW5uZWwuXG5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRlRTX0NGVzogICAg ICAgICAgICAgICAgICAgICAvKiAiY3JlZGVudGlhbC1mb3J3YXJkaW5nIiAqLworICAgICAgICBw cmludGYoIlxuU3ludGF4OiBTRVQgRlRQIENSRURFTlRJQUwtRk9SV0FSRElORyB7IE9OLCBPRkYg fVxuIik7CisgICAgICAgIHByaW50ZigiICBUZWxscyB3aGV0aGVyIGVuZC11c2VyIGNyZWRlbnRp YWxzIGFyZSB0byBiZSBmb3J3YXJkZWRcbiIpOworICAgICAgICBwcmludGYoIiAgdG8gdGhlIHNl cnZlciBpZiBzdXBwb3J0ZWQgYnkgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFxuIik7CisgICAg ICAgIHByaW50ZigiICAoR1NTQVBJLUtSQjUgb25seSkuXG5cbiIpOworICAgICAgICBicmVhazsK KyAgICAgIGNhc2UgRlRTX0RQTDogICAgICAgICAgICAgICAgICAgICAvKiAiZGF0YS1wcm90ZWN0 aW9uLWxldmVsIiAqLworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIHByaW50ZigKKyJT eW50YXg6IFNFVCBGVFAgREFUQS1QUk9URUNUSU9OLUxFVkVMIHsgQ0xFQVIsQ09ORklERU5USUFM LFBSSVZBVEUsU0FGRSB9IgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCJcbiIp OworICAgICAgICBwcmludGYoCisiICBUZWxscyB3aGF0IGxldmVsIG9mIHByb3RlY3Rpb24gaXMg YXBwbGllZCB0byB0aGUgRlRQIGRhdGEgY2hhbm5lbC5cblxuIik7CisgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIEZUUF9TRUNVUklUWSAqLworCisgICAgICBjYXNlIEZUU19EQkc6ICAgICAgICAg ICAgICAgICAgICAgLyogImRlYnVnIiAqLworICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQg RlRQIERFQlVHIHsgT04sIE9GRiB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8g cHJpbnQgRlRQIHByb3RvY29sIG1lc3NhZ2VzLlxuXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOwor CisgICAgICBjYXNlIEZUU19FUlI6ICAgICAgICAgICAgICAgICAgICAgLyogImVycm9yLWFjdGlv biIgKi8KKyAgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBFUlJPUi1BQ1RJT04geyBR VUlULCBQUk9DRUVEIH1cbiIpOworICAgICAgICBwcmludGYoIiAgV2hhdCB0byBkbyB3aGVuIGFu IGVycm9yIG9jY3VycyB3aGVuIHRyYW5zZmVycmluZyBhIGdyb3VwXG4iKQorICAgICAgICAgIDsK KyAgICAgICAgcHJpbnRmKCIgIG9mIGZpbGVzOiBxdWl0IGFuZCBmYWlsLCBvciBwcm9jZWVkIHRv IHRoZSBuZXh0IGZpbGUuXG5cbiIpOworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2Ug RlRTX0NOVjogICAgICAgICAgICAgICAgICAgICAvKiAiZmlsZW5hbWVzIiAqLworICAgICAgICBw cmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEZJTEVOQU1FUyB7IEFVVE8sIENPTlZFUlRFRCwgTElU RVJBTCB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFdoYXQgdG8gZG8gd2l0aCBmaWxlbmFtZXM6 IGNvbnZlcnQgdGhlbSwgdGFrZSBhbmQgdXNlIHRoZW1cbiIKKyAgICAgICAgICAgICAgICk7Cisg ICAgICAgIHByaW50ZigiICBsaXRlcmFsbHk7IG9yIGNob29zZSB3aGF0IHRvIGRvIGF1dG9tYXRp Y2FsbHkgYmFzZWQgb24gdGhlXG4iCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYo IiAgT1MgdHlwZSBvZiB0aGUgc2VydmVyLiAgVGhlIGRlZmF1bHQgaXMgQVVUTy5cblxuIik7Cisg ICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSBGVFNfUFNWOiAgICAgICAgICAgICAgICAg ICAgIC8qICJwYXNzaXZlLW1vZGUiICovCisgICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBG VFAgUEFTU0lWRS1NT0RFIHsgT04sIE9GRiB9XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFdoZXRo ZXIgdG8gdXNlIHBhc3NpdmUgbW9kZSwgd2hpY2ggaGVscHMgdG8gZ2V0IHRocm91Z2hcbiIpOwor ICAgICAgICBwcmludGYoIiAgZmlyZXdhbGxzLiAgT04gYnkgZGVmYXVsdC5cblxuIik7CisgICAg ICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSBGVFNfUFJNOiAgICAgICAgICAgICAgICAgICAg IC8qICJwZXJtaXNzaW9ucyIgKi8KKyAgICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBQ RVJNSVNTSU9OUyB7IEFVVE8sIE9OLCBPRkYgfVxuIik7CisgICAgICAgIHByaW50ZigiICBXaGV0 aGVyIHRvIHRyeSB0byBzZW5kIGZpbGUgcGVybWlzc2lvbnMgd2hlbiB1cGxvYWRpbmcuXG4iKTsK KyAgICAgICAgcHJpbnRmKCIgIE9GRiBieSBkZWZhdWx0LiAgQVVUTyBtZWFucyBvbmx5IGlmIGNs aWVudCBhbmQgc2VydmVyXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIGhhdmUgdGhlIHNhbWUgT1Mg dHlwZS5cblxuIik7CisgICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSBGVFNfVFNUOiAg ICAgICAgICAgICAgICAgICAgIC8qICJwcm9ncmVzcy1tZXNzYWdlcyIgKi8KKyAgICAgICAgcHJp bnRmKCJcblN5bnRheDogU0VUIEZUUCBQUk9HUkVTUy1NRVNTQUdFUyB7IE9OLCBPRkYgfVxuIik7 CisgICAgICAgIHByaW50ZigiICBXaGV0aGVyIEtlcm1pdCBzaG91bGQgcHJpbnQgbG9jYWxseS1n ZW5lcmF0ZWQgZmVlZGJhY2tcbiIpOworICAgICAgICBwcmludGYoIiAgbWVzc2FnZXMgZm9yIGVh Y2ggbm9uLWZpbGUtdHJhbnNmZXIgY29tbWFuZC4iKTsKKyAgICAgICAgcHJpbnRmKCIgIE9OIGJ5 IGRlZmF1bHQuXG5cbiIpOworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgRlRTX1NQ QzogICAgICAgICAgICAgICAgICAgICAvKiAic2VuZC1wb3J0LWNvbW1hbmRzIiAqLworICAgICAg ICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIFNFTkQtUE9SVC1DT01NQU5EUyB7IE9OLCBPRkYg fVxuIik7CisgICAgICAgIHByaW50ZigiICBXaGV0aGVyIEtlcm1pdCBzaG91bGQgc2VuZCBhIG5l dyBQT1JUIGNvbW1hbmQgZm9yIGVhY2giKTsKKyAgICAgICAgcHJpbnRmKCIgIHRhc2suXG5cbiIp OworICAgICAgICByZXR1cm4oMCk7CisKKyNpZm5kZWYgTk9DU0VUUworICAgICAgY2FzZSBGVFNf Q1NSOiAgICAgICAgICAgICAgICAgICAgIC8qICJzZXJ2ZXItY2hhcmFjdGVyLXNldCIgKi8KKyAg ICAgICAgcHJpbnRmKCJcblN5bnRheDogU0VUIEZUUCBTRVJWRVItQ0hBUkFDVEVSLVNFVCBuYW1l XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFRoZSBuYW1lIG9mIHRoZSBjaGFyYWN0ZXIgc2V0IHVz ZWQgZm9yIHRleHQgZmlsZXMgb24gdGhlXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIHNlcnZlci4g IEVudGVyIGEgbmFtZSBvZiAnPycgZm9yIGEgbWVudS5cblxuIik7CisgICAgICAgIHJldHVybigw KTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICAgIGNhc2UgRlRTX1NUTzoJCQkvKiAic2Vy dmVyLXRpbWUtb2Zmc2V0ICovCisJcHJpbnRmKAorIlxuU3ludGF4OiBTRVQgRlRQIFNFUlZFUi1U SU1FLU9GRlNFVCAraGhbOm1tWzpzc11dIG9yIC1oaFs6bW1bOnNzXV1cbiIpOworICAgICAgICBw cmludGYoCisiICBTcGVjaWZpZXMgYW4gb2Zmc2V0IHRvIGFwcGx5IHRvIHRoZSBzZXJ2ZXIncyBm aWxlIHRpbWVzdGFtcHMuXG4iKTsKKyAgICAgICAgcHJpbnRmKAorIiAgVXNlIHRoaXMgdG8gY29y cmVjdCBmb3IgbWlzY29uZmlndXJlZCBzZXJ2ZXIgdGltZSBvciB0aW1lem9uZS5cbiIpOworICAg ICAgICBwcmludGYoCisiICBGb3JtYXQ6IG11c3QgYmVnaW4gd2l0aCArIG9yIC0gc2lnbi4gIEhv dXJzIG11c3QgYmUgZ2l2ZW47IG1pbnV0ZXNcbiIpOworICAgICAgICBwcmludGYoCisiICBhbmQg c2Vjb25kcyBhcmUgb3B0aW9uYWw6ICs0ID0gKzQ6MDAgPSArNDowMDowMCAoYWRkIDQgaG91cnMp LlxuXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlIEZUU19UWVA6ICAgICAg ICAgICAgICAgICAgICAgLyogInR5cGUiICovCisgICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNF VCBGVFAgVFlQRSB7IFRFWFQsIEJJTkFSWSwgVEVORVggfVxuIik7CisgICAgICAgIHByaW50Zigi ICBFc3RhYmxpc2hlcyB0aGUgZGVmYXVsdCB0cmFuc2ZlciBtb2RlLlxuIik7CisgICAgICAgIHBy aW50ZigiICBURU5FWCBpcyB1c2VkIGZvciB1cGxvYWRpbmcgOC1iaXQgYmluYXJ5IGZpbGVzIHRv IDM2LWJpdFxuIik7CisgICAgICAgIHByaW50ZigiICBwbGF0Zm9ybXMgc3VjaCBhcyBURU5FWCBh bmQgVE9QUy0yMCBhbmQgZm9yIGRvd25sb2FkaW5nXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIHRo ZW0gYWdhaW4uICBBU0NJSSBpcyBhIHN5bm9ueW0gZm9yIFRFWFQuICBOb3JtYWxseSBlYWNoXG4i KTsKKyAgICAgICAgcHJpbnRmKCIgIGZpbGUncyB0eXBlIGlzIGRldGVybWluZWQgYXV0b21hdGlj YWxseSBmcm9tIGl0cyBjb250ZW50c1xuIgorCSAgICAgICApOworICAgICAgICBwcmludGYoIiAg b3IgaXRzIG5hbWU7IFNFVCBGVFAgVFlQRSBkb2VzIG5vdCBwcmV2ZW50IHRoYXQsIGl0IG9ubHlc biIpOworICAgICAgICBwcmludGYoIiAgdGVsbHMgd2hpY2ggbW9kZSB0byB1c2Ugd2hlbiB0aGUg dHlwZSBjYW4ndCBiZSBkZXRlcm1pbmVkXG4iCisJICAgICAgICk7CisgICAgICAgIHByaW50Zigi ICBhdXRvbWF0aWNhbGx5LiAgVG8gY29tcGxldGVseSBkaXNhYmxlIGF1dG9tYXRpYyB0cmFuc2Zl ci1cbiIKKwkgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCIgIG1vZGUgc3dpdGNoaW5nIGFuZCBm b3JjZSBlaXRoZXIgdGV4dCBvciBiaW5hcnkgbW9kZSwgZ2l2ZVxuIgorCSAgICAgICApOworICAg ICAgICBwcmludGYoIiAgdGhlIHRvcC1sZXZlbCBjb21tYW5kIEFTQ0lJIG9yIEJJTkFSWSwgYXMg aW4gdHJhZGl0aW9uYWxcbiIpOworICAgICAgICBwcmludGYoIiAgRlRQIGNsaWVudHMuXG5cbiIp OworICAgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBGVFBfVElNRU9VVAorICAgICAgY2FzZSBG VFNfVE1POgorICAgICAgIHByaW50ZigiXG5TeW50YXg6IFNFVCBGVFAgVElNRU9VVCBudW1iZXIt b2Ytc2Vjb25kc1xuIik7CisgICAgICAgcHJpbnRmKCIgIEVzdGFibGlzaGVzIGEgdGltZW91dCBm b3IgRlRQIHRyYW5zZmVycy5cbiIpOworICAgICAgIHByaW50ZigiICBUaGUgdGltZW91dCBhcHBs aWVzIHBlciBuZXR3b3JrIHJlYWQgb3Igd3JpdGUgb24gdGhlIGRhdGFcbiIpOworICAgICAgIHBy aW50ZigiICBjb25uZWN0aW9uLCBub3QgdG8gdGhlIHdob2xlIHRyYW5zZmVyLiAgQnkgZGVmYXVs dCB0aGVcbiIpOworICAgICAgIHByaW50ZigiICB0aW1lb3V0IHZhbHVlIGlzIDAsIG1lYW5pbmcg bm8gdGltZW91dC4gIFVzZSBhIHBvc2l0aXZlXG4iKTsKKyAgICAgICBwcmludGYoIiAgbnVtYmVy IHRvIGVzY2FwZSBncmFjZWZ1bGx5IGZyb20gaHVuZyBkYXRhIGNvbm5lY3Rpb25zIG9yXG4iKTsK KyAgICAgICBwcmludGYoIiAgZGlyZWN0b3J5IGxpc3RpbmdzLlxuXG4iKTsKKyAgICAgICAgcmV0 dXJuKDApOworI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCisKKyNpZmRlZiBQQVRURVJOUworICAg ICAgY2FzZSBGVFNfR0ZUOgorICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEdFVC1G SUxFVFlQRS1TV0lUQ0hJTkcgeyBPTiwgT0ZGIH1cbiIpOworICAgICAgICBwcmludGYoIiAgVGVs bHMgd2hldGhlciBHRVQgYW5kIE1HRVQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgc3dpdGNoXG4iKTsK KyAgICAgICAgcHJpbnRmKCIgIHRoZSBhcHByb3ByaWF0ZSBmaWxlIHR5cGUsIFRFWFQsIEJJTkFS WSwgb3IgVEVORVgsIGJ5XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIG1hdGNoaW5nIHRoZSBuYW1l IG9mIGVhY2ggaW5jb21pbmcgZmlsZSB3aXRoIGl0cyBsaXN0IG9mXG4iKTsKKyAgICAgICAgcHJp bnRmKCIgIEZJTEUgVEVYVC1QQVRURVJOUyBhbmQgRklMRSBCSU5BUlktUEFUVEVSTlMuICBPTiBi eVxuIik7CisgICAgICAgIHByaW50ZigiICBkZWZhdWx0LiAgU0hPVyBQQVRURVJOUyBkaXNwbGF5 cyB0aGUgY3VycmVudCBwYXR0ZXJuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIGxpc3QuICBIRUxQ IFNFVCBGSUxFIHRvIHNlZSBob3cgdG8gY2hhbmdlIGl0LlxuIik7CisgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyAgICAgIGNhc2UgRlRTX1VTTjogICAgICAgICAgICAg ICAgICAgICAvKiAidW5pcXVlLXNlcnZlci1uYW1lcyIgKi8KKyAgICAgICAgcHJpbnRmKCJcblN5 bnRheDogU0VUIEZUUCBVTklRVUUtU0VSVkVSLU5BTUVTIHsgT04sIE9GRiB9XG4iKTsKKyAgICAg ICAgcHJpbnRmKCIgIFRlbGxzIHdoZXRoZXIgdG8gYXNrIHRoZSBzZXJ2ZXIgdG8gY3JlYXRlIHVu aXF1ZSBuYW1lc1xuIik7CisgICAgICAgIHByaW50ZigiICBmb3IgYW55IHVwbG9hZGVkIGZpbGUg dGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhblxuIik7CisgICAgICAgIHByaW50ZigiICBleGlz dGluZyBmaWxlLiAgRGVmYXVsdCBpcyBPRkYuXG5cbiIpOworICAgICAgICByZXR1cm4oMCk7CisK KyAgICAgIGNhc2UgRlRTX1ZCTTogICAgICAgICAgICAgICAgICAgICAvKiAidmVyYm9zZS1tb2Rl IiAqLworICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIFZFUkJPU0UtTU9ERSB7IE9O LCBPRkYgfVxuIik7CisgICAgICAgIHByaW50ZigiICBXaGV0aGVyIHRvIGRpc3BsYXkgYWxsIHJl c3BvbnNlcyBmcm9tIHRoZSBGVFAgc2VydmVyLlxuIik7CisgICAgICAgIHByaW50ZigiICBPRkYg YnkgZGVmYXVsdC5cblxuIik7CisgICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSBGVFNf REFUOgorICAgICAgICBwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIERBVEVTIHsgT04sIE9GRiB9 XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFdoZXRoZXIgdG8gc2V0IGRhdGUgb2YgaW5jb21pbmcg ZmlsZXMgZnJvbSB0aGUgZmlsZSBkYXRlXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIG9uIHRoZSBz ZXJ2ZXIuICBPTiBieSBkZWZhdWx0LiAgTm90ZTogdGhlcmUgaXMgbm8gd2F5IHRvXG4iKQorICAg ICAgICAgIDsKKyAgICAgICAgcHJpbnRmKCIgIHNldCB0aGUgZGF0ZSBvbiBmaWxlcyB1cGxvYWRl ZCB0byB0aGUgc2VydmVyLiAgQWxzbyBub3RlXG4iKTsKKwlwcmludGYoIiAgdGhhdCBub3QgYWxs IHNlcnZlcnMgc3VwcG9ydCB0aGlzIGZlYXR1cmUuXG5cbiIpOworICAgICAgICByZXR1cm4oMCk7 CisKKyAgICAgIGNhc2UgRlRTX0FQVzoKKwlwcmludGYoIlxuU3ludGF4OiBTRVQgRlRQIEFOT05Z TU9VUy1QQVNTV09SRCBbIHRleHQgXVxuIik7CisJcHJpbnRmKCIgIFBhc3N3b3JkIHRvIHN1cHBs eSBhdXRvbWF0aWNhbGx5IG9uIGFub255bW91cyBGVFBcbiIpOworCXByaW50ZigiICBjb25uZWN0 aW9ucyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHVzZXJAaG9zdC5cbiIpOworCXByaW50ZigiICBP bWl0IG9wdGlvbmFsIHRleHQgdG8gcmVzdG9yZSBkZWZhdWx0LlxuXG4iKTsKKwlyZXR1cm4oMCk7 CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiU29ycnksIGhlbHAgbm90IGF2YWls YWJsZSBmb3IgXCJzZXQgZnRwICVzXCJcbiIsdG1wYnVmKTsKKyAgICB9CisjZW5kaWYgLyogTk9I RUxQICovCisgICAgcmV0dXJuKDApOworfQorCisjaWZuZGVmIExfU0VUCisjZGVmaW5lIExfU0VU IDAKKyNlbmRpZiAvKiBMX1NFVCAqLworI2lmbmRlZiBMX0lOQ1IKKyNkZWZpbmUgTF9JTkNSIDEK KyNlbmRpZiAvKiBMX0lOQ1IgKi8KKworI2lmZGVmIEZUUF9TUlAKK2NoYXIgc3JwX3VzZXJbQlVG U0laXTsgICAgICAgICAgICAgICAgICAvKiB3aGVyZSBpcyBCVUZTSVogZGVmaW5lZD8gKi8KK2No YXIgKnNycF9wYXNzOworY2hhciAqc3JwX2FjY3Q7CisjZW5kaWYgLyogRlRQX1NSUCAqLworCitz dGF0aWMgaW50IGtlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZGVkIGZvciBhbGwg YXV0aCB0eXBlcyAqLworCitzdGF0aWMgc3RydWN0ICAgc29ja2FkZHJfaW4gaGlzY3RsYWRkcjsK K3N0YXRpYyBzdHJ1Y3QgICBzb2NrYWRkcl9pbiBoaXNkYXRhYWRkcjsKK3N0YXRpYyBzdHJ1Y3Qg ICBzb2NrYWRkcl9pbiBkYXRhX2FkZHI7CitzdGF0aWMgaW50ICAgICAgZGF0YSA9IC0xOworc3Rh dGljIGludCAgICAgIHB0ZmxhZyA9IDA7CitzdGF0aWMgc3RydWN0ICAgc29ja2FkZHJfaW4gbXlj dGxhZGRyOworCisjaWZkZWYgQ09NTUVOVAorI2lmbmRlZiBPUzIKK1VJRF9UIGdldHVpZCgpOwor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworCitzdGF0aWMgaW50IGNw ZW5kID0gMDsgICAgICAgICAgICAgICAgICAgLyogTm8gcGVuZGluZyByZXBsaWVzICovCisKKyNp ZmRlZiBDS19TU0wKK2V4dGVybiBTU0wgKnNzbF9mdHBfY29uOworZXh0ZXJuIFNTTF9DVFggKnNz bF9mdHBfY3R4OworZXh0ZXJuIFNTTCAqc3NsX2Z0cF9kYXRhX2NvbjsKK2V4dGVybiBpbnQgc3Ns X2Z0cF9hY3RpdmVfZmxhZzsKK2V4dGVybiBpbnQgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnOwor I2VuZGlmIC8qIENLX1NTTCAqLworCisvKiAgZiB0IHAgYyBtIGQgIC0tICBTZW5kIGEgY29tbWFu ZCB0byB0aGUgRlRQIHNlcnZlciAgKi8KKy8qCisgIENhbGwgd2l0aDoKKyAgICBjaGFyICogY21k OiBUaGUgY29tbWFuZCB0byBzZW5kLgorICAgIGNoYXIgKiBhcmc6IFRoZSBhcmd1bWVudCAoZS5n LiBhIGZpbGVuYW1lKS4KKyAgICBpbnQgbGNzOiBUaGUgbG9jYWwgY2hhcmFjdGVyIHNldCBpbmRl eC4KKyAgICBpbnQgcmNzOiBUaGUgcmVtb3RlIChzZXJ2ZXIpIGNoYXJhY3RlciBzZXQgaW5kZXgu CisgICAgaW50IHZibTogVmVyYm9zZSBtb2RlOgorICAgICAgMCA9IGZvcmNlIHZlcmJvc2l0eSBv ZmYKKyAgICAgPjAgPSBmb3JjZSB2ZXJib3NpdHkgb24KKworICBJZiBhcmcgaXMgZ2l2ZW4gKG5v dCBOVUxMIG9yIGVtcHR5KSBhbmQgbGNzICE9IHJjcyBhbmQgYm90aCBhcmUgPiAtMSwKKyAgYW5k IG5laXRoZXIgbGNzIG9yIHJjcyBpcyBVQ1MtMiwgdGhlIGFyZyBpcyB0cmFuc2xhdGVkIGZyb20g dGhlIGxvY2FsCisgIGNoYXJhY3RlciBzZXQgdG8gdGhlIHJlbW90ZSBvbmUgYmVmb3JlIHNlbmRp bmcgdGhlIHJlc3VsdCB0byB0aGUgc2VydmVyLgorCisgICBSZXR1cm5zOgorICAgIDAgb24gZmFp bHVyZSB3aXRoIGZ0cGNvZGUgPSAtMQorICAgID49IDAgb24gc3VjY2VzcyAoZ2V0cmVwbHkoKSBy ZXN1bHQpIHdpdGggZnRwY29kZSA9IDAuCisqLworc3RhdGljIGNoYXIgeGNtZGJ1ZltSRk5CVUZT SVpdOworCitzdGF0aWMgaW50CitmdHBjbWQoY21kLGFyZyxsY3MscmNzLHZibSkgY2hhciAqIGNt ZCwgKiBhcmc7IGludCBsY3MsIHJjcywgdmJtOyB7CisgICAgY2hhciAqIHMgPSBOVUxMOworICAg IGludCByID0gMCwgeCA9IDAsIGZjID0gMCwgbGVuID0gMCwgY21kbGVuID0gMCwgcSA9IC0xOwor ICAgIHNpZ190IG9sZGludHI7CisKKyAgICBpZiAoZnRwX2RlYikgICAgICAgICAgICAgICAgICAg ICAgICAvKiBERUJVRyAqLworICAgICAgdmJtID0gMTsKKyAgICBlbHNlIGlmIChxdWlldCB8fCBk cHlhY3RpdmUpICAgICAgICAvKiBRVUlFVCBvciBGaWxlIFRyYW5zZmVyIEFjdGl2ZSAqLworICAg ICAgdmJtID0gMDsKKyAgICBlbHNlIGlmICh2Ym0gPCAwKSAgICAgICAgICAgICAgICAgICAvKiBW RVJCT1NFICovCisgICAgICB2Ym0gPSBmdHBfdmJtOworCisgICAgY2FuY2VsZmlsZSA9IDA7Cisg ICAgaWYgKCFjbWQpIGNtZCA9ICIiOworICAgIGlmICghYXJnKSBhcmcgPSAiIjsKKyAgICBjbWRs ZW4gPSAoaW50KXN0cmxlbihjbWQpOworICAgIGxlbiA9IGNtZGxlbiArIChpbnQpc3RybGVuKGFy ZykgKyAxOworCisgICAgaWYgKGZ0cF9kZWIgLyogJiYgIWRweWFjdGl2ZSAqLyApIHsKKyNpZmRl ZiBGVFBfUFJPWFkKKyAgICAgICAgaWYgKGZ0cF9wcngpIHByaW50ZigiJXMgIiwgZnRwX2hvc3Qp OworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworICAgICAgICBwcmludGYoIi0tLT4gIik7CisgICAg ICAgIGlmICghYW5vbnltb3VzICYmIHN0cmNtcCgiUEFTUyIsY21kKSA9PSAwKQorICAgICAgICAg IHByaW50ZigiUEFTUyBYWFhYIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIiVz ICVzIixjbWQsYXJnKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKyAgICAvKiBiemVy byh4Y21kYnVmLFJGTkJVRlNJWik7ICovCisgICAgY2ttYWttc2coeGNtZGJ1ZixSRk5CVUZTSVos IGNtZCwgKmFyZyA/ICIgIiA6ICIiLCBhcmcsIE5VTEwpOworCisjaWZkZWYgREVCVUcKKyAgICBp ZiAoZGVibG9nKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImZ0cGNtZCBjbWQiLGNtZCwwKTsKKyAg ICAgICAgZGVidWcoRjExMCwiZnRwY21kIGFyZyIsYXJnLDApOworICAgICAgICBkZWJ1ZyhGMTAx LCJmdHBjbWQgbGNzIiwiIixsY3MpOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHBjbWQgcmNzIiwi IixyY3MpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgaWYgKGNzb2NrZXQgPT0g LTEpIHsKKyAgICAgICAgcGVycm9yKCJObyBjb250cm9sIGNvbm5lY3Rpb24gZm9yIGNvbW1hbmQi KTsKKyAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAg IGhhdmVzaWdpbnQgPSAwOworICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBjbWRjYW5jZWwp OworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAoKmFyZyAmJiAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJZiBhbiBhcmcgd2FzIGdpdmVuICovCisgICAgICAgIGxjcyA+IC0xICYmICAgICAg ICAgICAgICAgICAgICAgLyogYW5kIGEgbG9jYWwgY2hhcnNldCAqLworICAgICAgICByY3MgPiAt MSAmJiAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBhIHJlbW90ZSBjaGFyc2V0ICovCisgICAg ICAgIGxjcyAhPSByY3MgJiYgICAgICAgICAgICAgICAgICAgLyogYW5kIHRoZSB0d28gYXJlIG5v dCB0aGUgc2FtZSAqLworICAgICAgICBsY3MgIT0gRkNfVUNTMiAmJiAgICAgICAgICAgICAgIC8q IGFuZCBuZWl0aGVyIG9uZSBpcyBVQ1MtMiAqLworICAgICAgICByY3MgIT0gRkNfVUNTMiAgICAg ICAgICAgICAgICAgIC8qIC4uLiAqLworICAgICAgICApIHsKKyAgICAgICAgaW5pdHhsYXRlKGxj cyxyY3MpOyAgICAgICAgICAgICAvKiBUcmFuc2xhdGUgYXJnIGZyb20gbGNzIHRvIHJjcyAqLwor ICAgICAgICB4Z25icCA9IGFyZzsgICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCBwb2ludGVy IHRvIGlucHV0IHN0cmluZyAqLworICAgICAgICByZm5wdHIgPSByZm5idWY7ICAgICAgICAgICAg ICAgIC8qIEdsb2JhbCBwb2ludGVyIHRvIG91dHB1dCBidWZmZXIgKi8KKworICAgICAgICB3aGls ZSAoMSkgeworICAgICAgICAgICAgaWYgKChjMCA9IHhnbmJ5dGUoRkNfVUNTMixsY3Msc3RyZ2V0 YykpIDwgMCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoeHBuYnl0ZShjMCxUQ19VQ1MyLHJjcyxz dHJwdXRjKSA8IDApIGJyZWFrOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAgV2Ug aGF2ZSB0byBjb3B5IGhlcmUgaW5zdGVhZCBvZiB0cmFuc2xhdGluZyBkaXJlY3RseSBpbnRvCisg ICAgICAgICAgeGNtZGJ1ZltdIHNvIHN0cnB1dGMoKSBjYW4gY2hlY2sgbGVuZ3RoLiAgQWx0ZXJu YXRpdmVseSB3ZSBjb3VsZAorICAgICAgICAgIHdyaXRlIHlldCBhbm90aGVyIHhwbmJ5dGUoKSBv dXRwdXQgZnVuY3Rpb24uCisgICAgICAgICovCisgICAgICAgIGlmICgoaW50KXN0cmxlbihyZm5i dWYpID4gKFJGTkJVRlNJWiAtIChjbWRsZW4rMSkpKSB7CisgICAgICAgICAgICBwcmludGYoIj9G VFAgY29tbWFuZCB0b28gbG9uZzogJXMgKyBhcmdcbiIsY21kKTsKKyAgICAgICAgICAgIGZ0cGNv ZGUgPSAtMTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgICB4ID0g Y2tzdHJuY3B5KCZ4Y21kYnVmW2NtZGxlbisxXSwgcmZuYnVmLCBSRk5CVUZTSVogLSAoY21kbGVu KzEpKTsKKyAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgcyA9IHhjbWRidWY7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCB0byBzZW5kIHRvIHNlcnZlciAqLworCisj aWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CQkJLyogTG9nIGl0ICovCisJaWYgKCFhbm9u eW1vdXMgJiYgIWNrc3RyY21wKHMsIlBBU1MgIiw1LDApKSB7CisJICAgIC8qIEJ1dCBkb24ndCBs b2cgcGFzc3dvcmRzICovCisJICAgIGRlYnVnKEYxMTAsIkZUUCBTRU5UICIsIlBBU1MgWFhYWCIs MCk7CisJfSBlbHNlIHsKKwkgICAgZGVidWcoRjExMCwiRlRQIFNFTlQgIixzLDApOworCX0KKyAg ICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgYWdhaW46 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgIGlmIChzY29tbWFuZChzKSA9PSAwKSB7 ICAgICAgICAgICAgICAvKiBTZW5kIGl0LiAqLworICAgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50 cik7CisgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGNwZW5kID0gMTsKKyAgICB4ID0gIXN0 cmNtcChjbWQsIlFVSVQiKTsJCS8qIElzIGl0IHRoZSBRVUlUIGNvbW1hbmQ/ICovCisgICAgaWYg KHgpCQkJCS8qIEluIGNhc2Ugd2UncmUgaW50ZXJydXB0ZWQgKi8KKyAgICAgIGNvbm5lY3RlZCA9 IDA7CQkJLyogd2hpbGUgd2FpdGluZyBmb3IgdGhlIHJlcGx5Li4uICovCisKKyAgICBmYyA9IDA7 CQkJCS8qIEZ1bmN0aW9uIGNvZGUgZm9yIGdldHJlcGx5KCkgKi8KKyAgICBpZiAoIXN0cm5jbXAo Y21kLCJBVVRIICIsNSkJCS8qIE11c3QgcGFyc2UgQVVUSCByZXBseSAqLworI2lmZGVmIEZUUEhP U1QKKwkmJiBzdHJuY21wKGNtZCwgIkhPU1QgIiw1KQorI2VuZGlmIC8qIEZUUEhPU1QgKi8KKwkp IHsKKwlmYyA9IEdSRl9BVVRIOworICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGNtZCwiRkVBVCIs LTEsMCkpIHsgLyogTXVzdCBwYXJzZSBGRUFUIHJlcGx5ICovCisJZmMgPSBHUkZfRkVBVDsJCQkv KiBCdXQgRkVBVCBub3Qgd2lkZWx5IHVuZGVyc3Rvb2QgKi8KKwlpZiAoIWZ0cF9kZWIpCQkJLyog U28gc3VwcHJlc3MgZXJyb3IgbWVzc2FnZXMgKi8KKwkgIHZibSA9IDk7CisgICAgfQorICAgIHIg PSBnZXRyZXBseSh4LAkJCS8qIEV4cGVjdCBjb25uZWN0aW9uIHRvIGNsb3NlICovCisJCSBsY3Ms cmNzLAkJLyogQ2hhcnNldHMgKi8KKwkJIHZibSwJCQkvKiBWZXJib3NpdHkgKi8KKwkJIGZjCQkJ LyogRnVuY3Rpb24gY29kZSAqLworCQkgKTsKKyAgICBpZiAocSA+IC0xKQorICAgICAgcXVpZXQg PSBxOworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGlmIChmdHBjb2RlID09IDUzMyAmJiBm dHBfY3BsID09IEZQTF9QUlYpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAg ICAgICAiRU5DIGNvbW1hbmQgbm90IHN1cHBvcnRlZCBhdCBzZXJ2ZXI7IHJldHJ5aW5nIHVuZGVy IE1JQy4uLlxuIik7CisgICAgICAgIGZ0cF9jcGwgPSBGUExfU0FGOworICAgICAgICBnb3RvIGFn YWluOworICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ09NTUVOVAor ICAgIGlmIChjYW5jZWxmaWxlICYmIG9sZGludHIgIT0gU0lHX0lHTikKKyAgICAgICgqb2xkaW50 cikoU0lHSU5UKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgc2lnbmFsKFNJR0lOVCwgb2xk aW50cik7CisgICAgcmV0dXJuKHIpOworfQorCitzdGF0aWMgVk9JRAorbG9zdHBlZXIoKSB7Cisg ICAgZGVidWcoRjEwMCwibG9zdHBlZXIiLCIiLDApOworICAgIGlmIChjb25uZWN0ZWQpIHsKKyAg ICAgICAgaWYgKGNzb2NrZXQgIT0gLTEpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIGlm IChzc2xfZnRwX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgICAgICAgICAgU1NMX3NodXRkb3duKHNz bF9mdHBfY29uKTsKKyAgICAgICAgICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2Nvbik7CisgICAg ICAgICAgICAgICAgc3NsX2Z0cF9wcm94eSA9IDA7CisgICAgICAgICAgICAgICAgc3NsX2Z0cF9h Y3RpdmVfZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgc3NsX2Z0cF9jb24gPSBOVUxMOworICAg ICAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAg ICAgICBzb2NrZXRfY2xvc2UoY3NvY2tldCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVm IFVTRV9TSFVURE9XTgorICAgICAgICAgICAgc2h1dGRvd24oY3NvY2tldCwgMSsxKTsKKyNlbmRp ZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgICAgIGNsb3NlKGNzb2NrZXQpOworI2VuZGlm IC8qIFRDUElQTElCICovCisgICAgICAgICAgICBjc29ja2V0ID0gLTE7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKGRhdGEgIT0gLTEpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIGlmIChz c2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICBTU0xfc2h1dGRvd24o c3NsX2Z0cF9kYXRhX2Nvbik7CisgICAgICAgICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRh X2Nvbik7CisgICAgICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKKyAg ICAgICAgICAgICAgICBzc2xfZnRwX2RhdGFfY29uID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgc29ja2V0X2Ns b3NlKGRhdGEpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAg ICAgICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7CisjZW5kaWYgLyogVVNFX1NIVVRET1dOICov CisgICAgICAgICAgICBjbG9zZShkYXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAg ICAgICAgZGF0YSA9IC0xOworICAgICAgICAgICAgZ2xvYmFsZGluID0gLTE7CisgICAgICAgIH0K KyAgICAgICAgY29ubmVjdGVkID0gMDsKKyAgICAgICAgYW5vbnltb3VzID0gMDsKKyAgICAgICAg bG9nZ2VkaW4gPSAwOworICAgICAgICBhdXRoX3R5cGUgPSBOVUxMOworICAgICAgICBmdHBfY3Bs ID0gZnRwX2RwbCA9IEZQTF9DTFI7CisjaWZkZWYgQ0tMT0dESUFMCisgICAgICAgIGZ0cGxvZ2Vu ZCgpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZkZWYgTE9DVVMKKwlpZiAoYXV0b2xv Y3VzKQkJCS8qIEF1b3RvbWF0aWMgbG9jdXMgc3dpdGNoaW5nLi4uICovCisJICBzZXRsb2N1cygx LDEpOwkJLyogU3dpdGNoIGxvY3VzIHRvIGxvY2FsLiAqLworI2VuZGlmIC8qIExPQ1VTICovCisj aWZkZWYgT1MyCisgICAgICAgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9IQU5HVVAsIDApOworI2Vu ZGlmIC8qIE9TMiAqLworICAgIH0KKyNpZmRlZiBGVFBfUFJPWFkKKyAgICBwc3dpdGNoKDEpOwor ICAgIGlmIChjb25uZWN0ZWQpIHsKKyAgICAgICAgaWYgKGNzb2NrZXQgIT0gLTEpIHsKKyNpZmRl ZiBUQ1BJUExJQgorICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGNzb2NrZXQpOworI2Vsc2UgLyog VENQSVBMSUIgKi8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICAgICAgICAgIHNodXRkb3duKGNz b2NrZXQsIDErMSk7CisjZW5kaWYgLyogVVNFX1NIVVRET1dOICovCisgICAgICAgICAgICBjbG9z ZShjc29ja2V0KTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgY3NvY2tldCA9 IC0xOworICAgICAgICB9CisgICAgICAgIGNvbm5lY3RlZCA9IDA7CisgICAgICAgIGFub255bW91 cyA9IDA7CisgICAgICAgIGxvZ2dlZGluID0gMDsKKyAgICAgICAgYXV0aF90eXBlID0gTlVMTDsK KyAgICAgICAgZnRwX2NwbCA9IGZ0cF9kcGwgPSBGUExfQ0xSOworICAgIH0KKyAgICBwcm94Zmxh ZyA9IDA7CisgICAgcHN3aXRjaCgwKTsKKyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KK30KKworaW50 CitmdHBpc29wZW4oKSB7CisgICAgcmV0dXJuKGNvbm5lY3RlZCk7Cit9CisKK3N0YXRpYyBpbnQK K2Z0cGNsb3NlKCkgeworICAgIGV4dGVybiBpbnQgcXVpdHRpbmc7CisgICAgaWYgKCFjb25uZWN0 ZWQpCisgICAgICByZXR1cm4oMCk7CisgICAgZnRwX3hmZXJtb2RlID0geGZlcm1vZGU7CisgICAg aWYgKCFmdHBfdmJtICYmICFxdWlldCkKKyAgICAgIHByaW50bGluZXMgPSAxOworICAgIGZ0cGNt ZCgiUVVJVCIsTlVMTCwwLDAsZnRwX3ZibSk7CisgICAgaWYgKGNzb2NrZXQpIHsKKyNpZmRlZiBD S19TU0wKKyAgICAgICAgaWYgKHNzbF9mdHBfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgIFNT TF9zaHV0ZG93bihzc2xfZnRwX2Nvbik7CisgICAgICAgICAgICBTU0xfZnJlZShzc2xfZnRwX2Nv bik7CisgICAgICAgICAgICBzc2xfZnRwX3Byb3h5ID0gMDsKKyAgICAgICAgICAgIHNzbF9mdHBf YWN0aXZlX2ZsYWcgPSAwOworICAgICAgICAgICAgc3NsX2Z0cF9jb24gPSBOVUxMOworICAgICAg ICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgc29ja2V0 X2Nsb3NlKGNzb2NrZXQpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0VfU0hVVERP V04KKyAgICAgICAgc2h1dGRvd24oY3NvY2tldCwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hVVERP V04gKi8KKyAgICAgICAgY2xvc2UoY3NvY2tldCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAg ICB9CisgICAgY3NvY2tldCA9IC0xOworICAgIGNvbm5lY3RlZCA9IDA7CisgICAgYW5vbnltb3Vz ID0gMDsKKyAgICBsb2dnZWRpbiA9IDA7CisgICAgbWR0bW9rID0gMTsKKyAgICBzaXplb2sgPSAx OworICAgIGZlYXRvayA9IDE7CisgICAgc3RvdWFyZyA9IDE7CisgICAgdHlwZXNlbnQgPSAwOwor ICAgIGRhdGEgPSAtMTsKKyAgICBnbG9iYWxkaW4gPSAtMTsKKyNpZmRlZiBGVFBfUFJPWFkKKyAg ICBpZiAoIXByb3h5KQorICAgICAgbWFjbnVtID0gMDsKKyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8K KyAgICBhdXRoX3R5cGUgPSBOVUxMOworICAgIGZ0cF9kcGwgPSBGUExfQ0xSOworI2lmZGVmIENL TE9HRElBTAorICAgIGZ0cGxvZ2VuZCgpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworI2lmZGVm IExPQ1VTCisgICAgLyogVW5wcmVmaXhlZCBmaWxlIG1hbmFnZW1lbnQgY29tbWFuZHMgYXJlIGV4 ZWN1dGVkIGxvY2FsbHkgKi8KKyAgICBpZiAoYXV0b2xvY3VzICYmICFmdHBfY21kbGluICYmICFx dWl0dGluZykgeworICAgICAgICBzZXRsb2N1cygxLDEpOworICAgIH0KKyNlbmRpZiAvKiBMT0NV UyAqLworI2lmZGVmIE9TMgorICAgIERpYWxlclNlbmQoT1BUX0tFUk1JVF9IQU5HVVAsIDApOwor I2VuZGlmIC8qIE9TMiAqLworICAgIHJldHVybigwKTsKK30KKworaW50CitmdHBvcGVuKHJlbW90 ZSwgc2VydmljZSwgdXNlX3RscykgY2hhciAqIHJlbW90ZSwgKiBzZXJ2aWNlOyBpbnQgdXNlX3Rs czsgeworICAgIGNoYXIgKiBob3N0OworCisgICAgaWYgKGNvbm5lY3RlZCkgeworICAgICAgICBw cmludGYoIj9BbHJlYWR5IGNvbm5lY3RlZCB0byAlcywgdXNlIEZUUCBDTE9TRSBmaXJzdC5cbiIs IGZ0cF9ob3N0KTsKKyAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorI2lmZGVmIEZUUEhPU1QKKyAgICBob3N0Y21kID0gMDsKKyNlbmRpZiAvKiBGVFBIT1NU ICovCisgICAgYWxpa2UgPSAwOworICAgIGZ0cF9zcnZ0eXBbMF0gPSBOVUw7CisgICAgaWYgKCFz ZXJ2aWNlKSBzZXJ2aWNlID0gIiI7CisgICAgaWYgKCEqc2VydmljZSkgc2VydmljZSA9IHVzZV90 bHMgPyAiZnRwcyIgOiAiZnRwIjsKKworICAgIGlmICghaXNkaWdpdChzZXJ2aWNlWzBdKSkgewor ICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqZGVzdHNwOworICAgICAgICBkZXN0c3AgPSBnZXRzZXJ2 YnluYW1lKHNlcnZpY2UsICJ0Y3AiKTsKKyAgICAgICAgaWYgKCFkZXN0c3ApIHsKKyAgICAgICAg ICAgIGlmICghY2tzdHJjbXAoc2VydmljZSwiZnRwIiwtMSwwKSkgeworICAgICAgICAgICAgICAg IGZ0cF9wb3J0ID0gMjE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChzZXJ2aWNl LCJmdHBzIiwtMSwwKSkgeworICAgICAgICAgICAgICAgIGZ0cF9wb3J0ID0gOTkwOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9CYWQgcG9ydCBuYW1lIC0g XCIlc1wiXG4iLCBzZXJ2aWNlKTsKKyAgICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7CisgICAg ICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgZnRwX3BvcnQgPSBkZXN0c3AtPnNfcG9ydDsKKyAgICAgICAgICAgIGZ0cF9w b3J0ID0gbnRvaHMoKHVuc2lnbmVkIHNob3J0KWZ0cF9wb3J0KTsJLyogU01TIDIwMDcvMDIvMTUg Ki8KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBmdHBfcG9ydCA9IGF0b2koc2Vydmlj ZSk7CisgICAgaWYgKGZ0cF9wb3J0IDw9IDApIHsKKyAgICAgICAgcHJpbnRmKCI/QmFkIHBvcnQg bmFtZSAtIFwiJXNcIlxuIiwgc2VydmljZSk7CisgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAg ICAgcmV0dXJuKDApOworICAgIH0KKyAgICBob3N0ID0gZnRwX2hvb2t1cChyZW1vdGUsIGZ0cF9w b3J0LCB1c2VfdGxzKTsKKyAgICBpZiAoaG9zdCkgeworICAgICAgICBja3N0cm5jcHkoZnRwX3Vz ZXJfaG9zdCxyZW1vdGUsTUFYX0ROU19OQU1FTEVOKTsKKyAgICAgICAgY29ubmVjdGVkID0gMTsg ICAgICAgICAgICAgICAgICAvKiBTZXQgRlRQIGRlZmF1bHRzICovCisgICAgICAgIGZ0cF9jcGwg PSBmdHBfZHBsID0gRlBMX0NMUjsKKyAgICAgICAgY3VydHlwZSA9IEZUVF9BU0M7ICAgICAgICAg ICAgICAvKiBTZXJ2ZXIgdXNlcyBBU0NJSSBtb2RlICovCisgICAgICAgIGZvcm0gPSBGT1JNX047 CisgICAgICAgIG1vZGUgPSBNT0RFX1M7CisgICAgICAgIHN0cnUgPSBTVFJVX0Y7CisgICAgICAg IHN0cmNweShieXRlbmFtZSwgIjgiKTsKKyAgICAgICAgYnl0ZXNpemUgPSA4OworCisjaWZkZWYg RlRQX1NFQ1VSSVRZCisgICAgICAgIGlmIChmdHBfYXV0KSB7CisgICAgICAgICAgICBpZiAoZnRw X2F1dGgoKSkgeworICAgICAgICAgICAgICAgIGlmIChmdHBfY3J5IAorI2lmZGVmIE9TMgorICAg ICAgICAgICAgICAgICAgICAgJiYgY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo IXF1aWV0KQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRlRQIENvbW1hbmQgY2hhbm5l bCBpcyBQcml2YXRlIChlbmNyeXB0ZWQpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZnRwX2Nw bCA9IEZQTF9QUlY7CisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRwYnN6KERFRkFVTFRfUEJT WikgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBhIGZhaWx1cmUgaGVyZSBpcyBt b3N0IGxpa2VseSBjYXVzZWQgYnkgYSBtaXh1cCAqLworICAgICAgICAgICAgICAgICAgICAgICAg LyogaW4gdGhlIHNlc3Npb24ga2V5IHVzZWQgYnkgY2xpZW50IGFuZCBzZXJ2ZXIgICAgKi8KKwkJ CXByaW50ZigiP1Byb3RlY3Rpb24gYnVmZmVyIHNpemUgbmVnb3RpYXRpb24gZmFpbGVkXG4iKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICBpZiAoZnRwY21kKCJQUk9UIFAiLE5VTEwsMCwwLGZ0cF92 Ym0pID09IFJFUExZX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1 aWV0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZUUCBEYXRhIGNoYW5uZWwg aXMgUHJpdmF0ZSAoZW5jcnlwdGVkKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBmdHBf ZHBsID0gRlBMX1BSVjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGVuYWJsZSBlbmNyeXB0aW9uIG9uIGRhdGEgY2hh bm5lbFxuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ZnRwX2NwbCA9IEZQTF9TQUY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKCFjb25uZWN0ZWQpCisJICAgICAgZ290byBmYWlsOworICAgICAgICB9Cisj ZW5kaWYgLyogRlRQX1NFQ1VSSVRZICovCisgICAgICAgIGlmIChmdHBfbG9nKQkJCS8qIF5eXiAq LworICAgICAgICAgIGZ0cF9sb2dpbihyZW1vdGUpOworCisgICAgICAgIGlmICghY29ubmVjdGVk KQorCSAgZ290byBmYWlsOworCisJZnRwX3hmZXJtb2RlID0geGZlcm1vZGU7CisKKyNpZmRlZiBD S0xPR0RJQUwKKyAgICAgICAgZG9sb2dmdHAoKTsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKyNp ZmRlZiBPUzIKKyAgICAgICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0NPTk5FQ1QsIDApOworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICBwYXNzaXZlbW9kZSA9IGZ0cF9wc3Y7CisgICAgICAgIHNl bmRwb3J0ID0gZnRwX3NwYzsKKwltZHRtb2sgPSAxOworCXNpemVvayA9IDE7CisJc3RvdWFyZyA9 IDE7CisJdHlwZXNlbnQgPSAwOworCisgICAgICAgIGlmICh1Y2J1ZiA9PSBOVUxMKSB7CisgICAg ICAgICAgICBhY3R1YWxidWYgPSBERUZBVUxUX1BCU1o7CisgICAgICAgICAgICB3aGlsZSAoYWN0 dWFsYnVmICYmICh1Y2J1ZiA9IChDSEFSICopbWFsbG9jKGFjdHVhbGJ1ZikpID09IE5VTEwpCisg ICAgICAgICAgICAgIGFjdHVhbGJ1ZiA+Pj0gMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1h eGJ1ZikKKyAgICAgICAgICB1Y2J1ZnNpeiA9IGFjdHVhbGJ1ZiAtIEZVREdFX0ZBQ1RPUjsKKwlk ZWJ1ZyhGMTAxLCJmdHBvcGVuIHVjYnVmc2l6IiwiIix1Y2J1ZnNpeik7CisgICAgICAgIHJldHVy bigxKTsKKyAgICB9CisgIGZhaWw6CisgICAgcHJpbnRmKCI/Q2FuJ3QgRlRQIGNvbm5lY3QgdG8g JXM6JXNcbiIscmVtb3RlLHNlcnZpY2UpOworICAgIGZ0cGNvZGUgPSAtMTsKKyAgICByZXR1cm4o MCk7Cit9CisKKyNpZmRlZiBDS19TU0wKK2ludAorc3NsX2F1dGgoKSB7CisgICAgaW50IGk7Cisg ICAgY2hhciogcDsKKworICAgIGlmIChzc2xfZGVidWdfZmxhZykgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwiU1NMIERFQlVHIEFDVElWRVxuIik7CisgICAgICAgIGZmbHVzaChzdGRlcnIpOwor ICAgICAgICAvKiBmb3IgdGhlIG1vbWVudCBJIHdhbnQgdGhlIG91dHB1dCBvbiBzY3JlZW4gKi8K KyAgICB9CisgICAgaWYgKHNzbF9mdHBfZGF0YV9jb24gIT0gTlVMTCkgeworICAgICAgICBTU0xf ZnJlZShzc2xfZnRwX2RhdGFfY29uKTsKKyAgICAgICAgc3NsX2Z0cF9kYXRhX2NvbiA9IE5VTEw7 CisgICAgfQorICAgIGlmIChzc2xfZnRwX2NvbiAhPSBOVUxMKSB7CisgICAgICAgIFNTTF9mcmVl KHNzbF9mdHBfY29uKTsKKyAgICAgICAgc3NsX2Z0cF9jb249TlVMTDsKKyAgICB9CisgICAgaWYg KHNzbF9mdHBfY3R4ICE9IE5VTEwpIHsKKyAgICAgICAgU1NMX0NUWF9mcmVlKHNzbF9mdHBfY3R4 KTsKKyAgICAgICAgc3NsX2Z0cF9jdHggPSBOVUxMOworICAgIH0KKworICAgIC8qIFRoZSBTU0xf T1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIAorICAgICAqIHdhcyBhZGRlZCB0byBPcGVu U1NMIDAuOS42ZSBhbmQgMC45LjcuICBJdCBkb2VzIG5vdCBleGlzdCBpbiBwcmV2aW91cworICAg ICAqIHZlcnNpb25zCisgICAgICovCisjaWZuZGVmIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9G UkFHTUVOVFMKKyNkZWZpbmUgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyAwTAor I2VuZGlmCisgICAgaWYgKGF1dGhfdHlwZSAmJiAhc3RyY21wKGF1dGhfdHlwZSwiVExTIikpIHsK KyAgICAgICAgc3NsX2Z0cF9jdHg9U1NMX0NUWF9uZXcoU1NMdjNfY2xpZW50X21ldGhvZCgpKTsK KyAgICAgICAgaWYgKCFzc2xfZnRwX2N0eCkKKyAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAg IFNTTF9DVFhfc2V0X29wdGlvbnMoc3NsX2Z0cF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU1NMX09QX1NJTkdMRV9ESF9VU0V8U1NMX09QX0VQSEVNRVJBTF9SU0EKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgIH0gZWxzZSB7CisgICAgICAgIHNzbF9mdHBfY3R4 ID0gU1NMX0NUWF9uZXcoZnRwX2J1Z191c2Vfc3NsX3YyID8gU1NMdjIzX2NsaWVudF9tZXRob2Qo KSA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTHYzX2NsaWVudF9tZXRo b2QoKSk7CisgICAgICAgIGlmICghc3NsX2Z0cF9jdHgpCisgICAgICAgICAgcmV0dXJuKDApOwor ICAgICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHNzbF9mdHBfY3R4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChmdHBfYnVnX3VzZV9zc2xfdjIgPyAwIDogU1NMX09QX05PX1NTTHYyKXwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfT1BfU0lOR0xFX0RIX1VTRXxTU0xfT1Bf RVBIRU1FUkFMX1JTQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgfQorICAg IFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNzbF9mdHBfY3R4LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChwZW1fcGFzc3dvcmRfY2IgKilzc2xfcGFzc3dkX2NhbGxi YWNrKTsKKyAgICBTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrKHNzbF9mdHBfY3R4LHNzbF9jbGll bnRfaW5mb19jYWxsYmFjayk7CisgICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKHNz bF9mdHBfY3R4LFNTTF9TRVNTX0NBQ0hFX0NMSUVOVCk7CisKKyNpZmRlZiBPUzIKKyNpZmRlZiBO VAorICAgIC8qIFRoZSBkZWZhdWx0cyBpbiB0aGUgU1NMIGNyeXB0byBsaWJyYXJ5IGFyZSBub3Qg YXBwcm9wcmlhdGUgZm9yIE9TLzIgKi8KKyAgICB7CisgICAgICAgIGNoYXIgcGF0aFtDS01BWFBB VEhdOworICAgICAgICBleHRlcm4gY2hhciBleGVkaXJbXTsKKworICAgICAgICBja21ha21zZyhw YXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRzIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoU1NM X0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2Z0cF9jdHgsTlVMTCxwYXRoKSA9PSAwKSAg eworICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBsb2FkIHBh dGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWRpcjogJXNcclxuIixwYXRoKTsK KyAgICAgICAgfQorCisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILAorICAgICAgICAg ICAgICAgICAoY2hhciAqKUdldEFwcERhdGEoMSksImtlcm1pdCA5NS9jZXJ0cyIsTlVMTCxOVUxM KTsKKyAgICAgICAgaWYgKFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBfY3R4 LE5VTEwscGF0aCkgPT0gMCkgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2xfYXV0 aCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1 Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1k aXI6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKworICAgICAgICBja21ha21zZyhwYXRoLENL TUFYUEFUSCwKKyAgICAgICAgICAgICAgICAgKGNoYXIgKilHZXRBcHBEYXRhKDApLCJrZXJtaXQg OTUvY2VydHMiLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xv Y2F0aW9ucyhzc2xfZnRwX2N0eCxOVUxMLHBhdGgpID09IDApICB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJmdHAgc3NsX2F1dGggdW5hYmxlIHRvIGxvYWQgcGF0aCIscGF0aCwwKTsKKyAgICAg ICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFi bGUgdG8gbG9hZCB2ZXJpZnktZGlyOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisKKyAgICAg ICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jZXJ0cy5wZW0iLE5VTEwsTlVM TCk7CisgICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0 eCxwYXRoLE5VTEwpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBzc2xfYXV0 aCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1 Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1m aWxlOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisKKyAgICAgICAgY2ttYWttc2cocGF0aCxD S01BWFBBVEgsKGNoYXIgKilHZXRBcHBEYXRhKDEpLAorCQkgImtlcm1pdCA5NS9jYV9jZXJ0cy5w ZW0iLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9u cyhzc2xfZnRwX2N0eCxwYXRoLE5VTEwpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs ImZ0cCBzc2xfYXV0aCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOworICAgICAgICAgICAg aWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBs b2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisKKyAgICAgICAgY2tt YWttc2cocGF0aCxDS01BWFBBVEgsKGNoYXIgKilHZXRBcHBEYXRhKDApLAorCQkgImtlcm1pdCA5 NS9jYV9jZXJ0cy5wZW0iLE5VTEwsTlVMTCk7CisgICAgICAgIGlmIChTU0xfQ1RYX2xvYWRfdmVy aWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0eCxwYXRoLE5VTEwpID09IDApIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsImZ0cCBzc2xfYXV0aCB1bmFibGUgdG8gbG9hZCBwYXRoIixwYXRoLDApOwor ICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50Zigi P1VuYWJsZSB0byBsb2FkIHZlcmlmeS1maWxlOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9Cisg ICAgfQorI2Vsc2UgLyogTlQgKi8KKyAgICAvKiBUaGUgZGVmYXVsdHMgaW4gdGhlIFNTTCBjcnlw dG8gbGlicmFyeSBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciBPUy8yICovCisgICAgeworCisgICAg ICAgIGNoYXIgcGF0aFtDS01BWFBBVEhdOworICAgICAgICBleHRlcm4gY2hhciBleGVkaXJbXTsK KworICAgICAgICBja21ha21zZyhwYXRoLENLTUFYUEFUSCxleGVkaXIsImNlcnRzIixOVUxMLE5V TEwpOworICAgICAgICBpZiAoU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2Z0cF9j dHgsTlVMTCxwYXRoKSA9PSAwKSAgeworICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9h dXRoIHVuYWJsZSB0byBsb2FkIHBhdGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2Rl YnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5 LWRpcjogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBja21ha21zZyhwYXRoLENL TUFYUEFUSCxleGVkaXIsImNhX2NlcnRzLnBlbSIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKFNT TF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNzbF9mdHBfY3R4LHBhdGgsTlVMTCkgPT0gMCkg eworICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbF9hdXRoIHVuYWJsZSB0byBsb2FkIHBh dGgiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWZpbGU6ICVzXHJcbiIscGF0aCk7 CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLworICAg IFNTTF9DVFhfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKHNzbF9mdHBfY3R4KTsKKyNlbmRpZiAv KiBPUzIgKi8KKworICAgIGlmIChzc2xfdmVyaWZ5X2ZpbGUgJiYKKyAgICAgICAgU1NMX0NUWF9s b2FkX3ZlcmlmeV9sb2NhdGlvbnMoc3NsX2Z0cF9jdHgsc3NsX3ZlcmlmeV9maWxlLE5VTEwpID09 IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwKKyAgICAgICAgICAgICAgImZ0cCBzc2wgYXV0aCB1 bmFibGUgdG8gbG9hZCBzc2xfdmVyaWZ5X2ZpbGUiLAorICAgICAgICAgICAgICBzc2xfdmVyaWZ5 X2ZpbGUsCisgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKHNz bF9kZWJ1Z19mbGFnKQorICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIHZlcmlmeS1m aWxlOiAlc1xyXG4iLHNzbF92ZXJpZnlfZmlsZSk7CisgICAgfQorICAgIGlmIChzc2xfdmVyaWZ5 X2RpciAmJgorICAgICAgICBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzc2xfZnRwX2N0 eCxOVUxMLHNzbF92ZXJpZnlfZGlyKSA9PSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsCisgICAg ICAgICAgICAgICJmdHAgc3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgc3NsX3ZlcmlmeV9kaXIiLAor ICAgICAgICAgICAgICBzc2xfdmVyaWZ5X2RpciwKKyAgICAgICAgICAgICAgMAorICAgICAgICAg ICAgICApOworICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgcHJpbnRmKCI/ VW5hYmxlIHRvIGxvYWQgdmVyaWZ5LWRpcjogJXNcclxuIixzc2xfdmVyaWZ5X2Rpcik7CisgICAg fQorCisgICAgLyogc2V0IHVwIHRoZSBuZXcgQ1JMIFN0b3JlICovCisgICAgY3JsX3N0b3JlID0g KFg1MDlfU1RPUkUgKilYNTA5X1NUT1JFX25ldygpOworICAgIGlmIChjcmxfc3RvcmUpIHsKKyNp ZmRlZiBPUzIKKyAgICAgICAgY2hhciBwYXRoW0NLTUFYUEFUSF07CisgICAgICAgIGV4dGVybiBj aGFyIGV4ZWRpcltdOworCisgICAgICAgIGNrbWFrbXNnKHBhdGgsQ0tNQVhQQVRILGV4ZWRpciwi Y3JscyIsTlVMTCxOVUxMKTsKKyAgICAgICAgaWYgKFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMo Y3JsX3N0b3JlLE5VTEwscGF0aCkgPT0gMCkgeworICAgICAgICAgICAgZGVidWcoRjExMCwiZnRw IHNzbCBhdXRoIHVuYWJsZSB0byBsb2FkIGRpciIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChz c2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBj cmwtZGlyOiAlc1xyXG4iLHBhdGgpOworICAgICAgICB9CisjaWZkZWYgTlQKKyAgICAgICAgY2tt YWttc2cocGF0aCxDS01BWFBBVEgsCisJCSAoY2hhciAqKUdldEFwcERhdGEoMSksImtlcm1pdCA5 NS9jcmxzIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9u cyhjcmxfc3RvcmUsTlVMTCxwYXRoKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJm dHAgc3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOworICAgICAgICAgICAgaWYg KHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2Fk IGNybC1kaXI6ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgY2ttYWttc2cocGF0 aCxDS01BWFBBVEgsCisJCSAoY2hhciAqKUdldEFwcERhdGEoMCksImtlcm1pdCA5NS9jcmxzIixO VUxMLE5VTEwpOworICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhjcmxfc3Rv cmUsTlVMTCxwYXRoKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAgc3NsIGF1 dGggdW5hYmxlIHRvIGxvYWQgZGlyIixwYXRoLDApOworICAgICAgICAgICAgaWYgKHNzbF9kZWJ1 Z19mbGFnKQorICAgICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1kaXI6 ICVzXHJcbiIscGF0aCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAKKyAg ICAgICAgY2ttYWttc2cocGF0aCxDS01BWFBBVEgsZXhlZGlyLCJjYV9jcmxzLnBlbSIsTlVMTCxO VUxMKTsKKyAgICAgICAgaWYgKFg1MDlfU1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHBh dGgsTlVMTCkgPT0gMCkgeworICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwIHNzbCBhdXRoIHVu YWJsZSB0byBsb2FkIGZpbGUiLHBhdGgsMCk7CisgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2Zs YWcpCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIGxvYWQgY3JsLWZpbGU6ICVz XHJcbiIscGF0aCk7CisgICAgICAgIH0KKyNpZmRlZiBOVAorICAgICAgICBja21ha21zZyhwYXRo LENLTUFYUEFUSCwoY2hhciAqKUdldEFwcERhdGEoMSksCisJCSAia2VybWl0IDk1L2NhX2NybHMu cGVtIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhj cmxfc3RvcmUscGF0aCxOVUxMKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAg c3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChz c2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBj cmwtZmlsZTogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorICAgICAgICBja21ha21zZyhwYXRo LENLTUFYUEFUSCwoY2hhciAqKUdldEFwcERhdGEoMCksCisJCSAia2VybWl0IDk1L2NhX2NybHMu cGVtIixOVUxMLE5VTEwpOworICAgICAgICBpZiAoWDUwOV9TVE9SRV9sb2FkX2xvY2F0aW9ucyhj cmxfc3RvcmUscGF0aCxOVUxMKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHAg c3NsIGF1dGggdW5hYmxlIHRvIGxvYWQgZmlsZSIscGF0aCwwKTsKKyAgICAgICAgICAgIGlmIChz c2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9hZCBj cmwtZmlsZTogJXNcclxuIixwYXRoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisjZW5k aWYgLyogT1MyICovCisKKyAgICAgICAgaWYgKHNzbF9jcmxfZmlsZSB8fCBzc2xfY3JsX2Rpcikg eworICAgICAgICAgICAgaWYgKHNzbF9jcmxfZmlsZSAmJgorICAgICAgICAgICAgICAgIFg1MDlf U1RPUkVfbG9hZF9sb2NhdGlvbnMoY3JsX3N0b3JlLHNzbF9jcmxfZmlsZSxOVUxMKSA9PSAwKSB7 CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKKyAgICAgICAgICAgICAgICAgICAgICAiZnRw IHNzbCBhdXRoIHVuYWJsZSB0byBsb2FkIHNzbF9jcmxfZmlsZSIsCisgICAgICAgICAgICAgICAg ICAgICAgc3NsX2NybF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAg ICAgICAgICAgICAgIHByaW50ZigiP1VuYWJsZSB0byBsb2FkIGNybC1maWxlOiAlc1xyXG4iLHNz bF9jcmxfZmlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3NsX2NybF9kaXIg JiYKKyAgICAgICAgICAgICAgICBYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zKGNybF9zdG9yZSxO VUxMLHNzbF9jcmxfZGlyKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwKKyAg ICAgICAgICAgICAgICAgICAgICAiZnRwIHNzbCBhdXRoIHVuYWJsZSB0byBsb2FkIHNzbF9jcmxf ZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICBzc2xfY3JsX2RpciwKKyAgICAgICAgICAgICAg ICAgICAgICAwCisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBpZiAo c3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbG9h ZCBjcmwtZGlyOiAlc1xyXG4iLHNzbF9jcmxfZGlyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIFg1MDlfU1RPUkVfc2V0X2RlZmF1bHRfcGF0aHMoY3JsX3N0 b3JlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc3NsX2Z0cF9j dHgsc3NsX3ZlcmlmeV9mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICBzc2xfY2xpZW50X3Zl cmlmeV9jYWxsYmFjayk7CisgICAgc3NsX3ZlcmlmeV9kZXB0aCA9IC0xOworICAgIHNzbF9mdHBf Y29uPShTU0wgKilTU0xfbmV3KHNzbF9mdHBfY3R4KTsKKyAgICB0bHNfbG9hZF9jZXJ0cyhzc2xf ZnRwX2N0eCxzc2xfZnRwX2NvbiwwKTsKKyAgICBTU0xfc2V0X2ZkKHNzbF9mdHBfY29uLGNzb2Nr ZXQpOworICAgIFNTTF9zZXRfdmVyaWZ5KHNzbF9mdHBfY29uLHNzbF92ZXJpZnlfZmxhZyxOVUxM KTsKKyAgICBpZiAoc3NsX2NpcGhlcl9saXN0KSB7CisgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xp c3Qoc3NsX2Z0cF9jb24sc3NsX2NpcGhlcl9saXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBj aGFyICogcDsKKyAgICAgICAgaWYgKHAgPSBnZXRlbnYoIlNTTF9DSVBIRVIiKSkgeworICAgICAg ICAgICAgU1NMX3NldF9jaXBoZXJfbGlzdChzc2xfZnRwX2NvbixwKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIFNTTF9zZXRfY2lwaGVyX2xpc3Qoc3NsX2Z0cF9jb24sREVGQVVMVF9D SVBIRVJfTElTVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKSB7 CisgICAgICAgIGZwcmludGYoc3RkZXJyLCI9PlNUQVJUIFNTTC9UTFMgY29ubmVjdCBvbiBDT01N QU5EXG4iKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgfQorICAgIGlmIChTU0xfY29u bmVjdChzc2xfZnRwX2NvbikgPD0gMCkgeworICAgICAgICBzdGF0aWMgY2hhciBlcnJidWZbMTAy NF07CisgICAgICAgIGNrbWFrbXNnKGVycmJ1ZiwxMDI0LCJmdHA6IFNTTC9UTFMgY29ubmVjdCBD T01NQU5EIGVycm9yOiAiLAorICAgICAgICAgICAgICAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9n ZXRfZXJyb3IoKSxOVUxMKSxOVUxMLE5VTEwpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJXNc biIsIGVycmJ1Zik7CisgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICBzc2xfZnRwX2Fj dGl2ZV9mbGFnPTA7CisgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfY29uKTsKKyAgICAgICAgc3Ns X2Z0cF9jb24gPSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIHNzbF9mdHBfYWN0aXZlX2Zs YWcgPSAxOworCisgICAgICAgIGlmICghc3NsX2NlcnRzb2tfZmxhZyAmJiAhdGxzX2lzX2tyYjUo MSkpIHsKKyAgICAgICAgICAgIGNoYXIgKnN1YmplY3QgPSBzc2xfZ2V0X3N1YmplY3RfbmFtZShz c2xfZnRwX2Nvbik7CisKKyAgICAgICAgICAgIGlmICghc3ViamVjdCkgeworICAgICAgICAgICAg ICAgIGlmIChzc2xfdmVyaWZ5X2ZsYWcgJiBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJU KSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInNzbF9hdXRoIiwiW1NTTCAtIEZB SUxFRF0iLDApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3NsX2Z0cF9hY3RpdmVfZmxh ZyA9IDApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlm ICh1cV9vaygiV2FybmluZzogU2VydmVyIGRpZG4ndCBwcm92aWRlIGEgY2VydGlmaWNhdGVcbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRpbnVlPyAoWS9OKSIsMyxOVUxM LDApIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsICJzc2xfYXV0 aCIsIltTU0wgLSBGQUlMRURdIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihz c2xfZnRwX2FjdGl2ZV9mbGFnID0gMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNzbF9jaGVja19zZXJ2ZXJfbmFtZShz c2xfZnRwX2NvbiwgZnRwX3VzZXJfaG9zdCkpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJzc2xfYXV0aCIsIltTU0wgLSBGQUlMRURdIiwwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4o c3NsX2Z0cF9hY3RpdmVfZmxhZyA9IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGRlYnVnKEYxMTAsInNzbF9hdXRoIiwiW1NTTCAtIE9LXSIsMCk7CisgICAgICAgIHNzbF9k aXNwbGF5X2Nvbm5lY3RfZGV0YWlscyhzc2xfZnRwX2NvbiwwLHNzbF92ZXJib3NlX2ZsYWcpOwor ICAgIH0KKyAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs Ij0+RE9ORSBTU0wvVExTIGNvbm5lY3Qgb24gQ09NTUFORFxuIik7CisgICAgICAgIGZmbHVzaChz dGRlcnIpOworICAgIH0KKyAgICByZXR1cm4oc3NsX2Z0cF9hY3RpdmVfZmxhZyk7Cit9CisjZW5k aWYgLyogQ0tfU1NMICovCisKK3N0YXRpYyBzaWd0eXBlCitjbWRjYW5jZWwoc2lnKSBpbnQgc2ln OyB7CisjaWZkZWYgT1MyCisgICAgLyogSW4gVW5peCB3ZSAiY2hhaW4iIHRvIHRyYXAoKSwgd2hp Y2ggcHJpbnRzIHRoaXMgKi8KKyAgICBwcmludGYoIl5DLi4uXG4iKTsKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICBkZWJ1ZyhGMTAwLCJmdHAgY21kY2FuY2VsIGNhdWdodCBTSUdJTlQgIiwiIiwwKTsK KyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBzZWN1cmVfZ2V0YygwLDEpOwkJCS8qIEluaXRpYWxp emUgbmV0IGlucHV0IGJ1ZmZlcnMgKi8KKyAgICBjYW5jZWxmaWxlKys7CisgICAgY2FuY2VsZ3Jv dXArKzsKKyAgICBtbHNyZXNldCgpOworI2lmbmRlZiBPUzIKKyNpZmRlZiBGVFBfUFJPWFkKKyAg ICBpZiAocHRmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm94eS4uLiAqLworICAg ICAgbG9uZ2ptcChwdGNhbmNlbCwxKTsKKyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KKyAgICBkZWJ1 ZyhGMTAwLCJmdHAgY21kY2FuY2VsIGNoYWluIHRvIHRyYXAoKS4uLiIsIiIsMCk7CisgICAgdHJh cChTSUdJTlQpOworICAgIC8qIE5PVFJFQUNIRUQgKi8KKyAgICBkZWJ1ZyhGMTAwLCJmdHAgY21k Y2FuY2VsIHJldHVybiBmcm9tIHRyYXAoKS4uLiIsIiIsMCk7CisjZWxzZQorICAgIGRlYnVnKEYx MDAsImZ0cCBjbWRjYW5jZWwgUG9zdEN0cmxDU2VtKCkuLi4iLCIiLDApOworICAgIFBvc3RDdHJs Q1NlbSgpOworI2VuZGlmIC8qIE9TMiAqLworfQorCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5T SUMKK3Njb21tYW5kKGNoYXIgKiBzKSAgICAgICAgICAgICAgICAgICAgICAvKiBXYXMgc2VjdXJl X2NvbW1hbmQoKSAqLworI2Vsc2UKK3Njb21tYW5kKHMpIGNoYXIgKiBzOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgaW50IGxlbmd0aCA9IDAsIGxlbjI7CisgICAgY2hhciBpbltGVFBf QlVGU0laXSwgb3V0W0ZUUF9CVUZTSVpdOworI2lmZGVmIENLX1NTTAorICAgIGlmIChzc2xfZnRw X2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIGludCBlcnJvciwgcmM7CisgICAgICAgIGxlbmd0aCA9 IHN0cmxlbihzKSArIDI7CisgICAgICAgIGxlbmd0aCA9IGNrbWFrbXNnKG91dCxGVFBfQlVGU0la LHMsIlxyXG4iLE5VTEwsTlVMTCk7CisgICAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9mdHBfY29u LG91dCxsZW5ndGgpOworICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3Ioc3NsX2Z0cF9jb24s cmMpOworICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgICAgY2FzZSBTU0xfRVJST1Jf Tk9ORToKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9X QU5UX1dSSVRFOgorICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAg ICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorI2lmZGVmIE5UCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIE5UICovCisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoK KyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CisgICAgICAgICAgY2FzZSBTU0xfRVJST1Jf WkVST19SRVRVUk46CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvc3RwZWVyKCk7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wg Ki8KKworICAgIGlmIChhdXRoX3R5cGUgJiYgZnRwX2NwbCAhPSBGUExfQ0xSKSB7CisjaWZkZWYg RlRQX1NSUAorICAgICAgICBpZiAoY2tfc3JwX2lzX2luc3RhbGxlZCgpICYmIChzdHJjbXAoYXV0 aF90eXBlLCJTUlAiKSA9PSAwKSkKKyAgICAgICAgICBpZiAoKGxlbmd0aCA9IHNycF9lbmNvZGUo ZnRwX2NwbCA9PSBGUExfUFJWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Q0hBUiAqKXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDSEFSICopb3V0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocykpKSA8IDApIHsK KyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTUlAgZmFpbGVkIHRvIGVuY29kZSBtZXNz YWdlXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgIH0KKyNlbmRpZiAv KiBGVFBfU1JQICovCisjaWZkZWYgRlRQX0tSQjQKKyAgICAgICAgaWYgKGNrX2tyYjRfaXNfaW5z dGFsbGVkKCkgJiYKKyAgICAgICAgICAgIChzdHJjbXAoYXV0aF90eXBlLCAiS0VSQkVST1NfVjQi KSA9PSAwKSkgeworICAgICAgICAgICAgaWYgKGZ0cF9jcGwgPT0gRlBMX1BSVikgeworICAgICAg ICAgICAgICAgIGxlbmd0aCA9CisgICAgICAgICAgICAgICAgICBrcmJfbWtfcHJpdigoQ0hBUiAq KXMsIChDSEFSICopb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHMp LCBmdHBfc2NoZWQsCisjaWZkZWYgS1JCNTI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmdHBfY3JlZC5zZXNzaW9uLAorI2Vsc2UgLyogS1JCNTI0ICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbmRpZiAvKiBLUkI1MjQgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteWN0bGFkZHIsICZoaXNjdGxhZGRyKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGVuZ3RoID0KKyAgICAgICAgICAg ICAgICAgIGtyYl9ta19zYWZlKChDSEFSICopcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChDSEFSICopb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHMp LAorI2lmZGVmIEtSQjUyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2NyZWQu c2Vzc2lvbiwKKyNlbHNlIC8qIEtSQjUyNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmZ0cF9jcmVkLnNlc3Npb24sCisjZW5kaWYgLyogS1JCNTI0ICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmbXljdGxhZGRyLCAmaGlzY3RsYWRkcik7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAobGVuZ3RoID09IC0xKSB7CisgICAgICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJrcmJfbWtfJXMgZmFpbGVkIGZvciBLRVJCRVJPU19WNFxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZ0cF9jcGwgPT0gRlBMX1BSViA/ICJwcml2IiA6ICJzYWZlIik7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5k aWYgLyogRlRQX0tSQjQgKi8KKyNpZmRlZiBGVFBfR1NTQVBJCisgICAgICAgIC8qIFNjb21tYW5k IChiYXNlZCBvbiBsZXZlbCkgKi8KKyAgICAgICAgaWYgKGNrX2dzc2FwaV9pc19pbnN0YWxsZWQo KSAmJiAoc3RyY21wKGF1dGhfdHlwZSwgIkdTU0FQSSIpID09IDApKSB7CisgICAgICAgICAgICBn c3NfYnVmZmVyX2Rlc2MgaW5fYnVmLCBvdXRfYnVmOworICAgICAgICAgICAgT01fdWludDMyIG1h al9zdGF0LCBtaW5fc3RhdDsKKyAgICAgICAgICAgIGludCBjb25mX3N0YXRlOworICAgICAgICAg ICAgaW5fYnVmLnZhbHVlID0gczsKKyAgICAgICAgICAgIGluX2J1Zi5sZW5ndGggPSBzdHJsZW4o cykgKyAxOworICAgICAgICAgICAgbWFqX3N0YXQgPSBnc3Nfc2VhbCgmbWluX3N0YXQsIGdjb250 ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnRwX2NwbD09RlBMX1BSViks IC8qIHByaXZhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfUU9Q X0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbl9idWYsICZjb25m X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0X2J1Zik7CisgICAg ICAgICAgICBpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09NUExFVEUpIHsgLyogR2VuZXJhbGx5IG5l ZWQgdG8gZGVhbCAqLworICAgICAgICAgICAgICAgIHVzZXJfZ3NzX2Vycm9yKG1hal9zdGF0LCBt aW5fc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnRwX2NwbD09RlBMX1BS Vik/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdzc19zZWFsIEVOQyBkaWRuJ3Qg Y29tcGxldGUiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnc3Nfc2VhbCBNSUMg ZGlkbid0IGNvbXBsZXRlIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChmdHBfY3BsID09IEZQ TF9QUlYpICYmICFjb25mX3N0YXRlKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJHU1NBUEkgZGlkbid0IGVuY3J5cHQgbWVzc2FnZSIpOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikKKyAgICAgICAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAic2VhbGVkICglcykgJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGZ0cF9jcGw9PUZQTF9QUlY/IkVOQyI6Ik1JQyIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIG91dF9idWYubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkob3V0LCBvdXRfYnVm LnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg9b3V0X2J1Zi5sZW5ndGgpOwor ICAgICAgICAgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZvdXRfYnVmKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KKyAgICAg ICAgLyogT3RoZXIgYXV0aCB0eXBlcyBnbyBoZXJlIC4uLiAqLworCisgICAgICAgIGxlbjIgPSBG VFBfQlVGU0laOworICAgICAgICBpZiAoKGtlcnJvciA9IHJhZGl4X2VuY29kZSgoQ0hBUiAqKW91 dCwgKENIQVIgKilpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro LCAmbGVuMiwgUkFESVhfRU5DT0RFKSkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsIkNvdWxkbid0IGJhc2UgNjQgZW5jb2RlIGNvbW1hbmQgKCVzKVxuIiwKKyAg ICAgICAgICAgICAgICAgICAgcmFkaXhfZXJyb3Ioa2Vycm9yKSk7CisgICAgICAgICAgICByZXR1 cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ0cF9kZWIpCisgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJzY29tbWFuZCglcylcbmVuY29kaW5nICVkIGJ5dGVzXG4iLCBzLCBsZW5ndGgp OworICAgICAgICBsZW4yID0gY2ttYWttc2cob3V0LAorCQkJRlRQX0JVRlNJWiwKKwkJCWZ0cF9j cGwgPT0gRlBMX1BSViA/ICJFTkMgIiA6ICJNSUMgIiwKKyAgICAgICAgICAgICAgICAgICAgICAg IGluLAorCQkJIlxyXG4iLAorCQkJTlVMTAorCQkJKTsKKyAgICAgICAgc2VuZChjc29ja2V0LChT RU5EQVJHMlRZUEUpb3V0LGxlbjIsMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciBvdXRb RlRQX0JVRlNJWl07CisgICAgICAgIGludCBsZW4gPSBja21ha21zZyhvdXQsRlRQX0JVRlNJWixz LCJcclxuIixOVUxMLE5VTEwpOworICAgICAgICBzZW5kKGNzb2NrZXQsKFNFTkRBUkcyVFlQRSlv dXQsbGVuLDApOworICAgIH0KKyAgICByZXR1cm4oMSk7Cit9CisKK3N0YXRpYyBpbnQKK215Z2V0 YygpIHsKKyAgICBzdGF0aWMgY2hhciBpbmJ1Zls0MDk2XTsKKyAgICBzdGF0aWMgaW50IGJwID0g MCwgZXAgPSAwOworICAgIGludCByYzsKKworICAgIGlmIChicCA9PSBlcCkgeworICAgICAgICBi cCA9IGVwID0gMDsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKHNzbF9mdHBfYWN0aXZlX2Zs YWcpIHsKKyAgICAgICAgICAgIGludCBlcnJvcjsKKyAgICAgICAgICAgIHJjID0gU1NMX3JlYWQo c3NsX2Z0cF9jb24saW5idWYsNDA5Nik7CisgICAgICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJy b3Ioc3NsX2Z0cF9jb24scmMpOworICAgICAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAg ICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAg ICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAgICAgICAgICAgIGlmIChyYyA9 PSAwKSB7ICAgICAgICAgIC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgICAgIGlu dCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNhc2UgU1NMX0VS Uk9SX1dBTlRfWDUwOV9MT09LVVA6CisgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoK KyAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisgICAgICAgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgIHJjID0gcmVjdihjc29ja2V0 LChjaGFyICopaW5idWYsNDA5NiwwKTsKKyAgICAgICAgaWYgKHJjIDw9IDApCisgICAgICAgICAg cmV0dXJuKEVPRik7CisgICAgICAgIGVwID0gcmM7CisgICAgfQorICAgIHJldHVybihpbmJ1Zlti cCsrXSk7Cit9CisKKy8qICB4IGwgYSB0IGUgYyAgLS0gIFRyYW5zbGF0ZSBhIGNoYXJhY3RlciAg Ki8KKy8qCisgICAgQ2FsbCB3aXRoOgorICAgICAgZmMgICAgPSBGdW5jdGlvbiBjb2RlOiAwID0g dHJhbnNsYXRlLCAxID0gaW5pdGlhbGl6ZS4KKyAgICAgIGMgICAgID0gQ2hhcmFjdGVyIChhcyBp bnQpLgorICAgICAgaW5jcyAgPSBJbmRleCBvZiBjaGFyc2V0IHRvIHRyYW5zbGF0ZSBmcm9tLgor ICAgICAgb3V0Y3MgPSBJbmRleCBvZiBjaGFyc2V0IHRvIHRyYW5zbGF0ZSB0by4KKworICAgIFJl dHVybnM6CisgICAgICAwOiBPSworICAgICAtMTogRXJyb3IKKyovCitzdGF0aWMgaW50Cit4bGF0 ZWMoZmMsYyxpbmNzLG91dGNzKSBpbnQgZmMsIGMsIGluY3MsIG91dGNzOyB7CisjaWZkZWYgTk9D U0VUUworICAgIHJldHVybihjKTsKKyNlbHNlCisgICAgc3RhdGljIGNoYXIgYnVmWzEyOF07Cisg ICAgc3RhdGljIGludCBjeDsKKyAgICBpbnQgYzAsIGMxOworCisgICAgaWYgKGZjID09IDEpIHsg ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSAqLworICAgICAgICBjeCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoLXVwIGJ1ZmZlciB3cml0ZSBpbmRleCAqLwor ICAgICAgICB4Z25icCA9IGJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIENhdGNoLXVwIGJ1ZmZl ciByZWFkIHBvaW50ZXIgKi8KKyAgICAgICAgYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAg ICAvKiBCdWZmZXIgaXMgZW1wdHkgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBp ZiAoY3ggPj0gMTI3KSB7ICAgICAgICAgICAgICAgICAgICAvKiBDYXRjaC11cCBidWZmZXIgZnVs bCAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJ4bGF0ZWMgb3ZlcmZsb3ciLCIiLDApOyAvKiAoc2hv dWxkbid0IGhhcHBlbikgKi8KKyAgICAgICAgcHJpbnRmKCI/VHJhbnNsYXRpb24gYnVmZmVyIG92 ZXJmbG93XG4iKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgLyogQWRkIGNoYXIg dG8gYnVmZmVyLiAqLworICAgIC8qIFRoZSBidWZmZXIgd29uJ3QgZ3JvdyB1bmxlc3MgaW5jcyBp cyBhIG11bHRpYnl0ZSBzZXQsIGUuZy4gVVRGLTguICovCisKKyAgICBkZWJ1ZyhGMDAwLCJ4bGF0 ZWMgYnVmIixja2l0b2EoY3gpLGMpOworICAgIGJ1ZltjeCsrXSA9IGM7CisgICAgYnVmW2N4XSA9 IE5VTDsKKworICAgIHdoaWxlICgoYzAgPSB4Z25ieXRlKEZDX1VDUzIsaW5jcyxzdHJnZXRjKSkg PiAtMSkgeworICAgICAgICBpZiAoeHBuYnl0ZShjMCxUQ19VQ1MyLG91dGNzLE5VTEwpIDwgMCkJ LyogKE5VTEwgd2FzIHhwcmludGMpICovCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9Cisg ICAgLyogSWYgd2UncmUgY2F1Z2h0IHVwLCByZWluaXRpYWxpemUgdGhlIGJ1ZmZlciAqLworICAg IHJldHVybigoY3ggPT0gKHhnbmJwIC0gYnVmKSkgPyB4bGF0ZWMoMSwwLDAsMCkgOiAwKTsKKyNl bmRpZiAvKiBOT0NTRVRTICovCit9CisKKworLyogIHAgYSByIHMgZSBmIGUgYSB0ICAqLworCisv KiBOb3RlOiBmb3IgY29udmVuaWVuY2Ugd2UgYWxpZ24ga2V5d29yZCB2YWx1ZXMgd2l0aCB0YWJs ZSBpbmRpY2VzICovCisvKiBJZiB5b3UgbmVlZCB0byBpbnNlcnQgYSBuZXcga2V5d29yZCwgYWRq dXN0IHRoZSBTRlRfeHh4IGRlZmluaXRpb25zICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZl YXR0YWJbXSA9IHsKKyAgICB7ICIkJCQkIiwgMCwgICAgICAgIDAgfSwJCS8qIER1bW15IGZvciBz ZnR0YWJbMF0gKi8KKyAgICB7ICJBVVRIIiwgU0ZUX0FVVEgsIDAgfSwKKyAgICB7ICJMQU5HIiwg U0ZUX0xBTkcsIDAgfSwKKyAgICB7ICJNRFRNIiwgU0ZUX01EVE0sIDAgfSwKKyAgICB7ICJNTFNU IiwgU0ZUX01MU1QsIDAgfSwKKyAgICB7ICJQQlNaIiwgU0ZUX1BCU1osIDAgfSwKKyAgICB7ICJQ Uk9UIiwgU0ZUX1BST1QsIDAgfSwKKyAgICB7ICJSRVNUIiwgU0ZUX1JFU1QsIDAgfSwKKyAgICB7 ICJTSVpFIiwgU0ZUX1NJWkUsIDAgfSwKKyAgICB7ICJUVkZTIiwgU0ZUX1RWRlMsIDAgfSwKKyAg ICB7ICJVVEY4IiwgU0ZUX1VURjgsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmZlYXR0YWIgPSAoc2l6 ZW9mKGZlYXR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2RlZmluZSBGQUNUX0NT RVQgIDEKKyNkZWZpbmUgRkFDVF9DUkVBICAyCisjZGVmaW5lIEZBQ1RfTEFORyAgMworI2RlZmlu ZSBGQUNUX01UWVAgIDQKKyNkZWZpbmUgRkFDVF9NRFRNICA1CisjZGVmaW5lIEZBQ1RfUEVSTSAg NgorI2RlZmluZSBGQUNUX1NJWkUgIDcKKyNkZWZpbmUgRkFDVF9UWVBFICA4CisjZGVmaW5lIEZB Q1RfVU5JUSAgOQorCitzdGF0aWMgc3RydWN0IGtleXRhYiBmYWN0dGFiW10gPSB7CisgICAgeyAi Q0hBUlNFVCIsICAgIEZBQ1RfQ1NFVCwgMCB9LAorICAgIHsgIkNSRUFURSIsICAgICBGQUNUX0NS RUEsIDAgfSwKKyAgICB7ICJMQU5HIiwgICAgICAgRkFDVF9MQU5HLCAwIH0sCisgICAgeyAiTUVE SUEtVFlQRSIsIEZBQ1RfTVRZUCwgMCB9LAorICAgIHsgIk1PRElGWSIsICAgICBGQUNUX01EVE0s IDAgfSwKKyAgICB7ICJQRVJNIiwgICAgICAgRkFDVF9QRVJNLCAwIH0sCisgICAgeyAiU0laRSIs ICAgICAgIEZBQ1RfU0laRSwgMCB9LAorICAgIHsgIlRZUEUiLCAgICAgICBGQUNUX1RZUEUsIDAg fSwKKyAgICB7ICJVTklRVUUiLCAgICAgRkFDVF9VTklRLCAwIH0KK307CitzdGF0aWMgaW50IG5m YWN0dGFiID0gKHNpemVvZihmYWN0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0 YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ0eXB0YWJbXSA9IHsKKyAgICB7ICJDRElSIiwgRlRZUF9DRElS LCAwIH0sCisgICAgeyAiRElSIiwgIEZUWVBfRElSLCAgMCB9LAorICAgIHsgIkZJTEUiLCBGVFlQ X0ZJTEUsIDAgfSwKKyAgICB7ICJQRElSIiwgRlRZUF9QRElSLCAwIH0KK307CitzdGF0aWMgaW50 IG5mdHlwdGFiID0gKHNpemVvZihmdHlwdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisK K3N0YXRpYyBWT0lECitwYXJzZWZlYXQocykgY2hhciAqIHM7IHsJCS8qIFBhcnNlIGEgRkVBVFVS RSByZXNwb25zZSAqLworICAgIGNoYXIga3didWZbOF07CisgICAgaW50IGksIHg7CisgICAgaWYg KCFzKSByZXR1cm47CisgICAgaWYgKCEqcykgcmV0dXJuOworICAgIHdoaWxlICgqcyA8ICchJykK KyAgICAgIHMrKzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJaWYgKHNbaV0gPCAn IScpCisJICBicmVhazsKKwlrd2J1ZltpXSA9IHNbaV07CisgICAgfQorICAgIGlmIChzW2ldICYm IHNbaV0gIT0gU1AgJiYgc1tpXSAhPSBDUiAmJiBzW2ldICE9IExGKQorICAgICAgcmV0dXJuOwor ICAgIGt3YnVmW2ldID0gTlVMOworICAgIC8qIHhsb29rdXAgcmVxdWlyZXMgYSBmdWxsIChidXQg Y2FzZSBpbmRlcGVuZGVudCkgbWF0Y2ggKi8KKyAgICBpID0geGxvb2t1cChmZWF0dGFiLGt3YnVm LG5mZWF0dGFiLCZ4KTsKKyAgICBkZWJ1ZyhGMTExLCJmdHAgcGFyc2VmZWF0IixzLGkpOworICAg IGlmIChpIDwgMCB8fCBpID4gMTUpCisgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGkpIHsK KyAgICAgIGNhc2UgU0ZUX01EVE06CQkJLyogQ29udHJvbGxlZCBieSBFTkFCTEUvRElTQUJMRSAq LworCXNmdHRhYltpXSA9IG1kdG1vazsKKwlpZiAobWR0bW9rKSBzZnR0YWJbMF0rKzsKKwlicmVh azsKKyAgICAgIGNhc2UgU0ZUX01MU1Q6CQkJLyogZGl0dG8gKi8KKwlzZnR0YWJbaV0gPSBtbHN0 b2s7CisJaWYgKG1sc3Rvaykgc2Z0dGFiWzBdKys7CisJYnJlYWs7CisgICAgICBjYXNlIFNGVF9T SVpFOgkJCS8qIGRpdHRvICovCisJc2Z0dGFiW2ldID0gc2l6ZW9rOworCWlmIChzaXplb2spIHNm dHRhYlswXSsrOworCWJyZWFrOworICAgICAgY2FzZSBTRlRfQVVUSDoJCQkvKiBkaXR0byAqLwor CXNmdHRhYltpXSA9IGZ0cF9hdXQ7CisJaWYgKGZ0cF9hdXQpIHNmdHRhYlswXSsrOworCWJyZWFr OworICAgICAgZGVmYXVsdDoJCQkJLyogT3RoZXJzICovCisJc2Z0dGFiWzBdKys7CisJc2Z0dGFi W2ldKys7CisgICAgfQorfQorCitzdGF0aWMgY2hhciAqCitwYXJzZWZhY3RzKHMpIGNoYXIgKiBz OyB7CQkvKiBQYXJzZSBNTFNbRFRdIEZpbGUgRmFjdHMgKi8KKyAgICBjaGFyICogcDsKKyAgICBp bnQgaSwgaiwgeDsKKyAgICBpZiAoIXMpIHJldHVybihOVUxMKTsKKyAgICBpZiAoISpzKSByZXR1 cm4oTlVMTCk7CisKKyAgICAvKiBNYXliZSB3ZSBzaG91bGQgbWFrZSBhIGNvcHkgb2YgcyBzbyB3 ZSBjYW4gcG9rZSBpdC4uLiAqLworCisgICAgd2hpbGUgKChwID0gY2tzdHJjaHIocywnPScpKSkg eworCSpwID0gTlVMOwkJCS8qIHMgcG9pbnRzIHRvIGZhY3QgKi8KKwlpID0geGxvb2t1cChmYWN0 dGFiLHMsbmZhY3R0YWIsJngpOyAKKwlkZWJ1ZyhGMTExLCJmdHAgcGFyc2VmYWN0IGZhY3QiLHMs aSk7CisJKnAgPSAnPSc7CisJcyA9IHArMTsJCQkvKiBOb3cgcyBwb2ludHMgdG8gYXJnICovCisJ cCA9IGNrc3RyY2hyKHMsJzsnKTsKKyAgICAgICAgaWYgKCFwKQorCSAgcCA9IGNrc3RyY2hyKHMs U1ApOworCWlmICghcCkgeworCSAgICBkZWJ1ZyhGMTEwLCJmdHAgcGFyc2VmYWN0IGVuZC1vZi12 YWwgc2VhcmNoIGZhaWwiLHMsMCk7CisJICAgIGJyZWFrOworCX0KKwkqcCA9IE5VTDsKKwlkZWJ1 ZyhGMTEwLCJmdHAgcGFyc2VmYWN0IHZhbHUiLHMsMCk7CisJc3dpdGNoIChpKSB7CisJICBjYXNl IEZBQ1RfQ1NFVDoJCS8qIElnbm9yZSB0aGVzZSBmb3Igbm93ICovCisJICBjYXNlIEZBQ1RfQ1JF QToKKwkgIGNhc2UgRkFDVF9MQU5HOgorCSAgY2FzZSBGQUNUX1BFUk06CisJICBjYXNlIEZBQ1Rf TVRZUDoKKwkgIGNhc2UgRkFDVF9VTklROgorCSAgICBicmVhazsKKwkgIGNhc2UgRkFDVF9NRFRN OgkJLyogTW9kdGltZSAqLworCSAgICBtYWtlc3RyKCZoYXZlbWR0bSxzKTsKKwkgICAgZGVidWco RjExMCwiZnRwIHBhcnNlZmFjdCBtZHRtIixoYXZlbWR0bSwwKTsKKwkgICAgYnJlYWs7CisJICBj YXNlIEZBQ1RfU0laRToJCS8qIFNpemUgKi8KKwkgICAgaGF2ZXNpemUgPSBja2F0b2ZzKHMpOwor CSAgICBkZWJ1ZyhGMTAxLCJmdHAgcGFyc2VmYWN0IHNpemUiLCIiLGhhdmVzaXplKTsKKwkgICAg YnJlYWs7CisJICBjYXNlIEZBQ1RfVFlQRToJCS8qIFR5cGUgKi8KKwkgICAgaiA9IHhsb29rdXAo ZnR5cHRhYixzLG5mdHlwdGFiLE5VTEwpOworCSAgICBkZWJ1ZyhGMTExLCJmdHAgcGFyc2VmYWN0 IHR5cGUiLHMsaik7CisJICAgIGhhdmV0eXBlID0gKGogPCAxKSA/IDAgOiBqOworCSAgICBicmVh azsKKwl9CisJKnAgPSAnOyc7CisJcyA9IHArMTsJCQkvKiBzIHBvaW50cyBuZXh0IGZhY3Qgb3Ig bmFtZSAqLworICAgIH0KKyAgICB3aGlsZSAoKnMgPT0gU1ApCQkJLyogU2tpcCBwYXN0IHNwYWNl cy4gKi8KKyAgICAgIHMrKzsKKyAgICBpZiAoISpzKQkJCQkvKiBNYWtlIHN1cmUgd2Ugc3RpbGwg aGF2ZSBhIG5hbWUgKi8KKyAgICAgIHMgPSBOVUxMOworICAgIGRlYnVnKEYxMTAsImZ0cCBwYXJz ZWZhY3QgbmFtZSIscywwKTsKKyAgICByZXR1cm4ocyk7Cit9CisKKy8qICBnIGUgdCByIGUgcCBs IHkgIC0tICAodG8gYW4gRlRQIGNvbW1hbmQgc2VudCB0byBzZXJ2ZXIpICAqLworCisvKiB2Ym0g PSAxICh2ZXJib3NlKTsgMCAocXVpZXQgZXhjZXB0IGZvciBlcnJvciBtZXNzYWdlcyk7IDkgKHN1 cGVyIHF1aWV0KSAqLworCitzdGF0aWMgaW50CitnZXRyZXBseShleHBlY3Rlb2YsbGNzLHJjcyx2 Ym0sZmMpIGludCBleHBlY3Rlb2YsIGxjcywgcmNzLCB2Ym0sIGZjOyB7CisgICAgLyogbGNzLCBy Y3MsIHZibSBwYXJhbWV0ZXJzIGFzIGluIGZ0cGNtZCgpICovCisgICAgcmVnaXN0ZXIgaW50IGks IGMsIG47CisgICAgcmVnaXN0ZXIgaW50IGRpZzsKKyAgICByZWdpc3RlciBjaGFyICpjcDsKKyAg ICBpbnQgeGxhdGUgPSAwOworICAgIGludCBjb3VudCA9IDA7CisgICAgaW50IGF1dGggPSAwOwor ICAgIGludCBvcmlnaW5hbGNvZGUgPSAwLCBjb250aW51YXRpb24gPSAwOworICAgIHNpZ190IG9s ZGludHI7CisgICAgaW50IHBmbGFnID0gMDsKKyAgICBjaGFyICpwdCA9IHBhc3Y7CisgICAgY2hh ciBpYnVmW0ZUUF9CVUZTSVpdLCBvYnVmW0ZUUF9CVUZTSVpdOyAvKiAodGhlc2UgYXJlIHByZXR0 eSBiaWcuLi4pICovCisgICAgaW50IHNhZmUgPSAwOworICAgIGludCB4cXVpZXQgPSAwOworCisg ICAgYXV0aCA9IChmYyA9PSBHUkZfQVVUSCk7CisKKyNpZm5kZWYgTk9DU0VUUworICAgIGRlYnVn KEYxMDEsImZ0cCBnZXRyZXBseSBsY3MiLCIiLGxjcyk7CisgICAgZGVidWcoRjEwMSwiZnRwIGdl dHJlcGx5IHJjcyIsIiIscmNzKTsKKyAgICBpZiAobGNzID4gLTEgJiYgcmNzID4gLTEgJiYgbGNz ICE9IHJjcykgeworICAgICAgICB4bGF0ZSA9IDE7CisgICAgICAgIGluaXR4bGF0ZShyY3MsbGNz KTsKKyAgICAgICAgeGxhdGVjKDEsMCxyY3MsbGNzKTsKKyAgICB9CisjZW5kaWYgLyogTk9DU0VU UyAqLworICAgIGRlYnVnKEYxMDEsImZ0cCBnZXRyZXBseSBmYyIsIiIsZmMpOworCisgICAgaWYg KHF1aWV0KQorICAgICAgeHF1aWV0ID0gMTsKKyAgICBpZiAodmJtID09IDkpIHsKKyAgICAgICAg eHF1aWV0ID0gMTsKKyAgICAgICAgdmJtID0gMDsKKyAgICB9CisgICAgaWYgKGZ0cF9kZWIpICAg ICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAgICAgIHZibSA9IDE7CisgICAgZWxz ZSBpZiAocXVpZXQgfHwgZHB5YWN0aXZlKSAgICAgICAgLyogUVVJRVQgb3IgRmlsZSBUcmFuc2Zl ciBBY3RpdmUgKi8KKyAgICAgIHZibSA9IDA7CisgICAgZWxzZSBpZiAodmJtIDwgMCkgICAgICAg ICAgICAgICAgICAgLyogVkVSQk9TRSAqLworICAgICAgdmJtID0gZnRwX3ZibTsKKworICAgIGli dWZbMF0gPSAnXDAnOworICAgIGlmIChyZXBseV9wYXJzZSkKKyAgICAgIHJlcGx5X3B0ciA9IHJl cGx5X2J1ZjsKKyAgICBoYXZlc2lnaW50ID0gMDsKKyAgICBvbGRpbnRyID0gc2lnbmFsKFNJR0lO VCwgY21kY2FuY2VsKTsKKyAgICBmb3IgKGNvdW50ID0gMDs7IGNvdW50KyspIHsKKyAgICAgICAg b2J1ZlswXSA9ICdcMCc7CisgICAgICAgIGRpZyA9IG4gPSBmdHBjb2RlID0gaSA9IDA7CisgICAg ICAgIGNwID0gZnRwX3JlcGx5X3N0cjsKKyAgICAgICAgd2hpbGUgKChjID0gaWJ1ZlswXSA/IGli dWZbaSsrXSA6IG15Z2V0YygpKSAhPSAnXG4nKSB7CisgICAgICAgICAgICBpZiAoYyA9PSBJQUMp IHsgICAgICAgICAgICAgLyogSGFuZGxlIHRlbG5ldCBjb21tYW5kcyAqLworICAgICAgICAgICAg ICAgIHN3aXRjaCAoYyA9IG15Z2V0YygpKSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFdJTEw6 CisgICAgICAgICAgICAgICAgICBjYXNlIFdPTlQ6CisgICAgICAgICAgICAgICAgICAgIGMgPSBt eWdldGMoKTsKKyAgICAgICAgICAgICAgICAgICAgb2J1ZlswXSA9IElBQzsKKyAgICAgICAgICAg ICAgICAgICAgb2J1ZlsxXSA9IERPTlQ7CisgICAgICAgICAgICAgICAgICAgIG9idWZbMl0gPSBj OworICAgICAgICAgICAgICAgICAgICBvYnVmWzNdID0gTlVMOworI2lmZGVmIENLX1NTTAorICAg ICAgICAgICAgICAgICAgICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGVycm9yLCByYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0g U1NMX3dyaXRlKHNzbF9mdHBfY29uLG9idWYsMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBl cnJvciA9IFNTTF9nZXRfZXJyb3Ioc3NsX2Z0cF9jb24scmMpOworICAgICAgICAgICAgICAgICAg ICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNT TF9FUlJPUl9OT05FOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYyA9 PSAwKSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIE5UCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKyNlbmRp ZiAvKiBOVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug U1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJS T1JfWkVST19SRVRVUk46CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAg ICAgICAgICAgICAgICAgIHNlbmQoY3NvY2tldCwoU0VOREFSRzJUWVBFKW9idWYsMywwKTsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIERPOgorICAg ICAgICAgICAgICAgICAgY2FzZSBET05UOgorICAgICAgICAgICAgICAgICAgICBjID0gbXlnZXRj KCk7CisgICAgICAgICAgICAgICAgICAgIG9idWZbMF0gPSBJQUM7CisgICAgICAgICAgICAgICAg ICAgIG9idWZbMV0gPSBXT05UOworICAgICAgICAgICAgICAgICAgICBvYnVmWzJdID0gYzsKKyAg ICAgICAgICAgICAgICAgICAgb2J1ZlszXSA9IE5VTDsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAg ICAgICAgICAgICAgaWYgKHNzbF9mdHBfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGludCBlcnJvciwgcmM7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IFNTTF93 cml0ZShzc2xfZnRwX2NvbixvYnVmLDMpOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Ig PSBTU0xfZ2V0X2Vycm9yKHNzbF9mdHBfY29uLHJjKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJS T1JfTk9ORToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCxvbGRpbnRyKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0xf RVJST1JfU1lTQ0FMTDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gMCkg eyAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBOVAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7CisjZW5kaWYgLyog TlQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNTTF9F UlJPUl9XQU5UX1g1MDlfTE9PS1VQOgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNT TF9FUlJPUl9TU0w6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pF Uk9fUkVUVVJOOgorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAg ICAgICAgICAgICBzZW5kKGNzb2NrZXQsKFNFTkRBUkcyVFlQRSlvYnVmLDMsMCk7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlnKys7CisgICAgICAgICAgICBp ZiAoYyA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZW9mKSB7CisgICAgICAg ICAgICAgICAgICAgIHNpZ25hbChTSUdJTlQsb2xkaW50cik7CisgICAgICAgICAgICAgICAgICAg IGZ0cGNvZGUgPSAyMjE7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXRy ZXBseSBFT0YiLCIiLGZ0cGNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxvc3RwZWVyKCk7CisgICAgICAgICAg ICAgICAgaWYgKCF4cXVpZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpCisg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI0MjEgIik7CisgICAgICAgICAgICAgICAgICAg IHByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgICAiU2VydmljZSBub3QgYXZhaWxhYmxlLCBj b25uZWN0aW9uIGNsb3NlZCBieSBzZXJ2ZXJcbiIpOworICAgICAgICAgICAgICAgICAgICBmZmx1 c2goc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2lnbmFsKFNJ R0lOVCxvbGRpbnRyKTsKKyAgICAgICAgICAgICAgICBmdHBjb2RlID0gNDIxOworICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImZ0cCBnZXRyZXBseSBFT0YiLCIiLGZ0cGNvZGUpOworICAgICAg ICAgICAgICAgIHJldHVybig0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuID09 IDApIHsJCS8qIEZpcnN0IGRpZ2l0ICovCisJCW4gPSBjOwkJCS8qIFNhdmUgaXQgKi8KKwkgICAg fQorICAgICAgICAgICAgaWYgKGF1dGhfdHlwZSAmJgorI2lmZGVmIENLX1NTTAorICAgICAgICAg ICAgICAgICFzc2xfZnRwX2FjdGl2ZV9mbGFnICYmCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAg ICAgICAgICAgICAgIWlidWZbMF0gJiYgKG4gPT0gJzYnIHx8IGNvbnRpbnVhdGlvbikpIHsKKyAg ICAgICAgICAgICAgICBpZiAoYyAhPSAnXHInICYmIGRpZyA+IDQpCisgICAgICAgICAgICAgICAg ICBvYnVmW2krK10gPSBjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp ZiAoYXV0aF90eXBlICYmCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgICFzc2xf ZnRwX2FjdGl2ZV9mbGFnICYmCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAg ICAgICFpYnVmWzBdICYmIGRpZyA9PSAxICYmIHZibSkKKyAgICAgICAgICAgICAgICAgIHByaW50 ZigiVW5hdXRoZW50aWNhdGVkIHJlcGx5IHJlY2VpdmVkIGZyb20gc2VydmVyOlxuIik7CisgICAg ICAgICAgICAgICAgaWYgKHJlcGx5X3BhcnNlKSB7CisgICAgICAgICAgICAgICAgICAgICpyZXBs eV9wdHIrKyA9IGM7CisgICAgICAgICAgICAgICAgICAgICpyZXBseV9wdHIgPSBOVUw7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGVi KSAmJiAvKiBEb24ndCBtZXNzIHVwIHhmZXIgZGlzcGxheSAqLworICAgICAgICAgICAgICAgICAg ICBmdHBfY21kbGluIDwgMikgeworICAgICAgICAgICAgICAgICAgICBpZiAoKGMgIT0gJ1xyJykg JiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChmdHBfZGViIHx8ICgodmJtIHx8ICghYXV0aCAm JiBuID09ICc1JykpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoZGlnID4gNCB8fCAoIGRp ZyA8PSA0ICYmICFpc2RpZ2l0KGMpICYmIGZ0cGNvZGUgPT0gMAorICAgICAgICAgICAgICAgICAg ICAgICAgKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgeworI2lmZGVmIEZUUF9QUk9YWQorICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9wcnggJiYgKGRpZyA9PSAxIHx8IChkaWcgPT0g NSAmJiB2Ym0gPT0gMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiVzOiIs ZnRwX2hvc3QpOworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworCisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIXhxdWlldCkgeworI2lmZGVmIE5PQ1NFVFMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIiVjIixjKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHhsYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhsYXRlYygw LGMscmNzLGxjcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsYyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdXRoX3R5cGUgJiYKKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgICAgICAgICAhc3NsX2Z0cF9hY3RpdmVfZmxhZyAmJgorI2VuZGlmIC8qIENLX1NTTCAq LworICAgICAgICAgICAgICAgICFpYnVmWzBdICYmIG4gIT0gJzYnKQorICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgIGlmIChkaWcgPCA0ICYmIGlzZGlnaXQoYykpCisgICAgICAg ICAgICAgIGZ0cGNvZGUgPSBmdHBjb2RlICogMTAgKyAoYyAtICcwJyk7CisgICAgICAgICAgICBp ZiAoIXBmbGFnICYmIGZ0cGNvZGUgPT0gMjI3KQorICAgICAgICAgICAgICBwZmxhZyA9IDE7Cisg ICAgICAgICAgICBpZiAoZGlnID4gNCAmJiBwZmxhZyA9PSAxICYmIGlzZGlnaXQoYykpCisgICAg ICAgICAgICAgIHBmbGFnID0gMjsKKyAgICAgICAgICAgIGlmIChwZmxhZyA9PSAyKSB7CisgICAg ICAgICAgICAgICAgaWYgKGMgIT0gJ1xyJyAmJiBjICE9ICcpJykKKyAgICAgICAgICAgICAgICAg ICpwdCsrID0gYzsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg KnB0ID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgcGZsYWcgPSAzOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWcgPT0gNCAmJiBjID09ICct JyAmJiBuICE9ICc2JykgeworICAgICAgICAgICAgICAgIGlmIChjb250aW51YXRpb24pCisgICAg ICAgICAgICAgICAgICBmdHBjb2RlID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51YXRpb24r KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjcCA8ICZmdHBfcmVwbHlfc3RyW0ZU UF9CVUZTSVogLSAxXSkgeworICAgICAgICAgICAgICAgICpjcCsrID0gYzsKKyAgICAgICAgICAg ICAgICAqY3AgPSBOVUw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRl YmxvZyB8fAorI2lmZGVmIENPTU1FTlQKKy8qCisgIFNvbWV0aW1lcyB3ZSBuZWVkIHRvIHByaW50 IHRoZSBzZXJ2ZXIgcmVwbHkuICBwcmludGxpbmVzIGlzIG5vbnplcm8gZm9yIGFueQorICBjb21t YW5kIHdoZXJlIHRoZSByZXN1bHRzIGFyZSBzZW50IGJhY2sgb24gdGhlIGNvbnRyb2wgY29ubmVj dGlvbiByYXRoZXIKKyAgdGhhbiB0aGUgZGF0YSBjb25uZWN0aW9uLCBlLmcuIFNUQVQuICBJbiB0 aGUgVE9QUy0yMCBjYXNlLCBlYWNoIGZpbGUgbGluZQorICBoYXMgZnRwY29kZSAyMTMuICBCdXQg aWYgeW91IGRvIHRoaXMgd2l0aCBhIFVOSVggc2VydmVyLCBpdCBzZW5kcyAiMjEzLVN0YXJ0Cisg IFNUQVQiLCA8bGluZSB3aXRoIGZ0cGNvZGUgPT0gMD4sICIyMTMtRW5kIiBvciBzb21lc3VjaC4g IFNvIHdoZW4gcHJpbnRsaW5lcworICBpcyBub256ZXJvLCB3ZSB3YW50IHRoZSAyMTMgbGluZXMg ZnJvbSBUT1BTLTIwIGFuZCB3ZSBET04nVCB3YW50IHRoZSAyMTMKKyAgbGluZXMgZnJvbSBVTklY LiAgRnVydGhlciBleHBlcmltZW50YXRpb24gbmVlZGVkIHdpdGggb3RoZXIgc2VydmVycy4gIE9m CisgIGNvdXJzZSBSRkM5NTkgaXMgbXV0ZSBhcyB0byB0aGUgZm9ybWF0IG9mIHRoZSBzZXJ2ZXIg cmVwbHkuCisKKyAgJ3ByaW50bGluZXMnIGlzIGFsc28gdHJ1ZSBmb3IgUFdEIGFuZCBCWUUuCisq LworCSAgICAocHJpbnRsaW5lcyAmJiAoKGZ0cGNvZGUgPT0gMCkgfHwgKHNlcnZlcnR5cGUgPT0g U1lTX1RPUFMyMCkpKQorI2Vsc2UKKy8qIE5vLCB3ZSBjYW4ndCBiZSB0aGF0IGNsZXZlciAtLSBp dCBicmVha3Mgb3RoZXIgdGhpbmdzIGxpa2UgUlBXRC4uLiAqLworICAgICAgICAgICAgKHByaW50 bGluZXMgJiYKKyAgICAgICAgICAgICAoZnRwY29kZSAhPSA2MzEgJiYgZnRwY29kZSAhPSA2MzIg JiYgZnRwY29kZSAhPSA2MzMpKQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICkg eworICAgICAgICAgICAgY2hhciAqIHEgPSBjcDsKKyAgICAgICAgICAgIGNoYXIgKnIgPSBmdHBf cmVwbHlfc3RyOworICAgICAgICAgICAgKnEtLSA9IE5VTDsgICAgICAgICAgICAgICAgIC8qIE5V TC10ZXJtaW5hdGUgKi8KKyAgICAgICAgICAgIHdoaWxlICgqcSA8ICchJyAmJiBxID4gcikgICAv KiBTdHJpcCBDUiwgZXRjICovCisgICAgICAgICAgICAgICpxLS0gPSBOVUw7CisgICAgICAgICAg ICBpZiAoIWZ0cF9kZWIgJiYgcHJpbnRsaW5lcykgeyAvKiBJZiBwcmludGluZyAqLworICAgICAg ICAgICAgICAgIGlmIChmdHBjb2RlICE9IDApICAgICAgIC8qIHN0cmlwIGZ0cGNvZGUgaWYgYW55 ICovCisgICAgICAgICAgICAgICAgICByICs9IDQ7CisjaWZkZWYgTk9DU0VUUworICAgICAgICAg ICAgICAgIHByaW50ZigiJXNcbiIscik7ICAgICAgIC8qIGFuZCBwcmludCAqLworI2Vsc2UKKyAg ICAgICAgICAgICAgICBpZiAoIXhsYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi JXNcbiIscik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsJCS8qIFRyYW5zbGF0aW5nICovCisg ICAgICAgICAgICAgICAgICAgIHhnbmJwID0gcjsJCS8qIFNldCB1cCBzdHJnZXRjKCkgKi8KKyAg ICAgICAgICAgICAgICAgICAgd2hpbGUgKChjMCA9IHhnbmJ5dGUoRkNfVUNTMixyY3Msc3RyZ2V0 YykpID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4cG5ieXRlKGMwLFRDX1VD UzIsbGNzLE5VTEwpIDwgMCkgewkvKiAoeHByaW50YykgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaWduYWwoU0lHSU5ULG9sZGludHIpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwlk ZWJ1ZyhGMTEwLCJGVFAgUkNWRCAiLGZ0cF9yZXBseV9zdHIsMCk7CisKKwlpZiAoZmMgPT0gR1JG X0ZFQVQpIHsJCS8qIFBhcnNpbmcgRkVBVCBjb21tYW5kIHJlc3BvbnNlPyAqLworCSAgICBpZiAo Y291bnQgPT0gMCAmJiBuID09ICcyJykgeworCQlpbnQgaTsJCQkvKiAoUmUpLWluaXQgc2VydmVy IEZFQVR1cmUgdGFibGUgKi8KKwkJZGVidWcoRjEwMCwiZnRwIGdldHJlcGx5IGNsZWFyaW5nIGZl YXR1cmUgdGFibGUiLCIiLDApOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJICBzZnR0 YWJbaV0gPSAwOworCSAgICB9IGVsc2UgeworCQlwYXJzZWZlYXQoKGNoYXIgKilmdHBfcmVwbHlf c3RyKTsKKwkgICAgfQorCX0KKyAgICAgICAgaWYgKGF1dGhfdHlwZSAmJgorI2lmZGVmIENLX1NT TAorICAgICAgICAgICAgIXNzbF9mdHBfYWN0aXZlX2ZsYWcgJiYKKyNlbmRpZiAvKiBDS19TU0wg Ki8KKyAgICAgICAgICAgICAhaWJ1ZlswXSAmJiBuICE9ICc2JykgeworICAgICAgICAgICAgc2ln bmFsKFNJR0lOVCxvbGRpbnRyKTsKKyAgICAgICAgICAgIHJldHVybihnZXRyZXBseShleHBlY3Rl b2YsbGNzLHJjcyx2Ym0sYXV0aCkpOworICAgICAgICB9CisgICAgICAgIGlidWZbMF0gPSBvYnVm W2ldID0gJ1wwJzsKKyAgICAgICAgaWYgKGZ0cGNvZGUgJiYgbiA9PSAnNicpCisgICAgICAgICAg aWYgKGZ0cGNvZGUgIT0gNjMxICYmIGZ0cGNvZGUgIT0gNjMyICYmIGZ0cGNvZGUgIT0gNjMzKSB7 CisgICAgICAgICAgICAgIHByaW50ZigiVW5rbm93biByZXBseTogJWQgJXNcbiIsIGZ0cGNvZGUs IG9idWYpOworICAgICAgICAgICAgICBuID0gJzUnOworICAgICAgICAgIH0gZWxzZSBzYWZlID0g KGZ0cGNvZGUgPT0gNjMxKTsKKyAgICAgICAgaWYgKG9idWZbMF0gICAgICAgICAgICAgICAgICAg ICAvKiBpZiB0aGVyZSBpcyBhIHN0cmluZyB0byBkZWNvZGUgKi8KKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgICAgICYmICFzc2xfZnRwX2FjdGl2ZV9mbGFnICAgICAvKiBhbmQgbm90IFNTTC9UTFMg Ki8KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgaWYg KCFhdXRoX3R5cGUpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkNhbm5vdCBkZWNvZGUgcmVw bHk6XG4lZCAlc1xuIiwgZnRwY29kZSwgb2J1Zik7CisgICAgICAgICAgICAgICAgbiA9ICc1JzsK KyAgICAgICAgICAgIH0KKyNpZm5kZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgZWxzZSBp ZiAoZnRwY29kZSA9PSA2MzIpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkNhbm5vdCBkZWNy eXB0ICVkIHJlcGx5OiAlc1xuIiwgZnRwY29kZSwgb2J1Zik7CisgICAgICAgICAgICAgICAgbiA9 ICc1JzsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYg Tk9DT05GSURFTlRJQUwKKyAgICAgICAgICAgIGVsc2UgaWYgKGZ0cGNvZGUgPT0gNjMzKSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCJDYW5ub3QgZGVjcnlwdCAlZCByZXBseTogJXNcbiIsIGZ0 cGNvZGUsIG9idWYpOworICAgICAgICAgICAgICAgIG4gPSAnNSc7CisgICAgICAgICAgICB9Cisj ZW5kaWYgLyogTk9DT05GSURFTlRJQUwgKi8KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgICAgIGludCBsZW4gPSBGVFBfQlVGU0laOworICAgICAgICAgICAgICAgIGlmICgoa2Vycm9y ID0gcmFkaXhfZW5jb2RlKChDSEFSICopb2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoQ0hBUiAqKWlidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJBRElYX0RFQ09ERSkpCisgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAg ICAgICBwcmludGYoIkNhbid0IGRlY29kZSBiYXNlIDY0IHJlcGx5ICVkICglcylcblwiJXNcIlxu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cGNvZGUsIHJhZGl4X2Vycm9yKGtlcnJv ciksIG9idWYpOworICAgICAgICAgICAgICAgICAgICBuID0gJzUnOworICAgICAgICAgICAgICAg IH0KKyNpZmRlZiBGVFBfU1JQCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGF1dGhf dHlwZSwgIlNSUCIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG91dGxlbjsKKyAg ICAgICAgICAgICAgICAgICAgb3V0bGVuID0gc3JwX2RlY29kZSghc2FmZSwgKENIQVIgKilpYnVm LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDSEFSICopIGlidWYs IGxlbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChvdXRsZW4gPCAwKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6ICVkIHJlcGx5ICVzIVxuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmdHBjb2RlLCBzYWZlID8gIm1vZGlmaWVkIiA6ICJnYXJi bGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gJzUnOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KCZpYnVmW291 dGxlbl0sICJcclxuIixGVFBfQlVGU0laLW91dGxlbik7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoZnRwX2RlYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlYzoiLCBz YWZlID8gJ1MnIDogJ1AnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIEZUUF9TUlAg Ki8KKyNpZmRlZiBGVFBfS1JCNAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhdXRo X3R5cGUsICJLRVJCRVJPU19WNCIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNh ZmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9yZF9zYWZlKChDSEFS ICopaWJ1ZiwgbGVuLAorI2lmZGVmIEtSQjUyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbHNlIC8qIEtSQjUyNCAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cF9jcmVkLnNl c3Npb24sCisjZW5kaWYgLyogS1JCNTI0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmaGlzY3RsYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZteWN0bGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZnRwX21zZ19kYXRhCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX3JkX3ByaXYoKENIQVIgKilpYnVm LCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBf c2NoZWQsCisjaWZkZWYgS1JCNTI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmdHBfY3JlZC5zZXNzaW9uLAorI2Vsc2UgLyogS1JCNTI0ICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwK KyNlbmRpZiAvKiBLUkI1MjQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZoaXNjdGxhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJm15Y3RsYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZmdHBfbXNnX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgaWYgKGtlcnJvciAhPSBLU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIlZCByZXBseSAlcyEgKGtyYl9yZF8lczogJXMpXG4iLCBmdHBjb2RlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmUgPyAibW9kaWZpZWQiIDogImdhcmJsZWQiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmUgPyAic2FmZSIgOiAicHJpdiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiX2dldF9lcnJfdGV4dChrZXJyb3IpKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAnNSc7CisgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoZnRwX21zZ19kYXRhLmFwcF9sZW5ndGggPj0gRlRQX0JVRlNJWiAtIDMpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9IEtGQUlMVVJFOworICAgICAgICAgICAgICAg ICAgICAgICAgbiA9ICc1JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigicmVwbHkg ZGF0YSB0b28gbGFyZ2UgZm9yIGJ1ZmZlclxuIik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnRwX2RlYikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIlYzoiLCBzYWZlID8gJ1MnIDogJ1AnKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIG1lbWNweShpYnVmLGZ0cF9tc2dfZGF0YS5hcHBfZGF0YSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmdHBfbXNnX2RhdGEuYXBwX2xlbmd0aCk7CisgICAgICAg ICAgICAgICAgICAgICAgICBja3N0cm5jcHkoJmlidWZbZnRwX21zZ19kYXRhLmFwcF9sZW5ndGhd LCAiXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRQX0JVRlNJWiAt IGZ0cF9tc2dfZGF0YS5hcHBfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8q IEZUUF9LUkI0ICovCisjaWZkZWYgRlRQX0dTU0FQSQorICAgICAgICAgICAgICAgIGVsc2UgaWYg KHN0cmNtcChhdXRoX3R5cGUsICJHU1NBUEkiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAg IGdzc19idWZmZXJfZGVzYyB4bWl0X2J1ZiwgbXNnX2J1ZjsKKyAgICAgICAgICAgICAgICAgICAg T01fdWludDMyIG1hal9zdGF0LCBtaW5fc3RhdDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNv bmZfc3RhdGU7CisgICAgICAgICAgICAgICAgICAgIHhtaXRfYnVmLnZhbHVlID0gaWJ1ZjsKKyAg ICAgICAgICAgICAgICAgICAgeG1pdF9idWYubGVuZ3RoID0gbGVuOworICAgICAgICAgICAgICAg ICAgICAvKiBkZWNyeXB0L3ZlcmlmeSB0aGUgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgICAg ICBjb25mX3N0YXRlID0gc2FmZTsKKyAgICAgICAgICAgICAgICAgICAgbWFqX3N0YXQgPSBnc3Nf dW5zZWFsKCZtaW5fc3RhdCwgZ2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmeG1pdF9idWYsICZtc2dfYnVmLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmNvbmZfc3RhdGUsIE5VTEwpOworICAgICAgICAgICAgICAg ICAgICBpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHVzZXJfZ3NzX2Vycm9yKG1hal9zdGF0LCBtaW5fc3RhdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdW5zZWFsaW5nIHJlcGx5Iik7CisgICAg ICAgICAgICAgICAgICAgICAgICBuID0gJzUnOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGlidWYsIG1zZ19idWYudmFsdWUsIG1z Z19idWYubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSgmaWJ1Zltt c2dfYnVmLmxlbmd0aF0sICJcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGVFBfQlVGU0laLW1zZ19idWYubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdz c19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsJm1zZ19idWYpOworICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGZ0cF9kZWIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWM6 Iiwgc2FmZSA/ICdTJyA6ICdQJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBGVFBf R1NTQVBJICovCisgICAgICAgICAgICAgICAgLyogT3RoZXIgYXV0aCB0eXBlcyBnbyBoZXJlLi4u ICovCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKCFkcHlhY3RpdmUgfHwgZnRw X2RlYikgJiYgZnRwX2NtZGxpbiA8IDIgJiYKKyAgICAgICAgICAgICAgICAgICAheHF1aWV0ICYm ICh2Ym0gfHwgKCFhdXRoICYmIChuID09ICc0JyB8fCBuID09ICc1JykpKSkgeworI2lmZGVmIE5P Q1NFVFMKKyAgICAgICAgICAgIHByaW50ZigiJWMiLGMpOworI2Vsc2UKKyAgICAgICAgICAgIGlm ICh4bGF0ZSkgeworICAgICAgICAgICAgICAgIHhsYXRlYygwLGMscmNzLGxjcyk7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLGMpOworICAgICAgICAg ICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgICAgIGZmbHVzaCAoc3Rkb3V0KTsK KyAgICAgICAgfQorICAgICAgICBpZiAoY29udGludWF0aW9uICYmIGZ0cGNvZGUgIT0gb3JpZ2lu YWxjb2RlKSB7CisgICAgICAgICAgICBpZiAob3JpZ2luYWxjb2RlID09IDApCisgICAgICAgICAg ICAgIG9yaWdpbmFsY29kZSA9IGZ0cGNvZGU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgfQorICAgICAgICAqY3AgPSAnXDAnOworICAgICAgICBpZiAobiAhPSAnMScpCisgICAgICAg ICAgY3BlbmQgPSAwOworICAgICAgICBzaWduYWwoU0lHSU5ULG9sZGludHIpOworICAgICAgICBp ZiAoZnRwY29kZSA9PSA0MjEgfHwgb3JpZ2luYWxjb2RlID09IDQyMSkgeworCSAgICBsb3N0cGVl cigpOworCSAgICBpZiAoIXhxdWlldCAmJiAhZnRwX2RlYikKKwkgICAgICBwcmludGYoIiVzXG4i LHJlcGx5X2J1Zik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChjYW5jZWxmaWxlICE9IDApICYm CisjaWZuZGVmIFVMVFJJWDMKKyAgICAgICAgICAgIC8qIFVsdHJpeCAzLjAgY2Mgb2JqZWN0cyB2 aW9sZW50bHkgdG8gdGhpcyBjbGF1c2UgKi8KKyAgICAgICAgICAgIChvbGRpbnRyICE9IGNtZGNh bmNlbCkgJiYKKyNlbmRpZiAvKiBVTFRSSVgzICovCisgICAgICAgICAgICAob2xkaW50ciAhPSBT SUdfSUdOKSkgeworICAgICAgICAgICAgaWYgKG9sZGludHIpCisgICAgICAgICAgICAgICgqb2xk aW50cikoU0lHSU5UKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVwbHlfcGFyc2UpIHsKKyAg ICAgICAgICAgICpyZXBseV9wdHIgPSAnXDAnOworICAgICAgICAgICAgaWYgKChyZXBseV9wdHIg PSBja3N0cnN0cihyZXBseV9idWYsIHJlcGx5X3BhcnNlKSkpIHsKKyAgICAgICAgICAgICAgICBy ZXBseV9wYXJzZSA9IHJlcGx5X3B0ciArIHN0cmxlbihyZXBseV9wYXJzZSk7CisgICAgICAgICAg ICAgICAgaWYgKChyZXBseV9wdHIgPSBja3N0cnBicmsocmVwbHlfcGFyc2UsICIgXHIiKSkpCisg ICAgICAgICAgICAgICAgICAqcmVwbHlfcHRyID0gJ1wwJzsKKyAgICAgICAgICAgIH0gZWxzZQor ICAgICAgICAgICAgICByZXBseV9wYXJzZSA9IHJlcGx5X3B0cjsKKyAgICAgICAgfQorICAgICAg ICB3aGlsZSAoKmNwIDwgJyEnICYmIGNwID4gZnRwX3JlcGx5X3N0cikgLyogUmVtb3ZlIHRyYWls aW5nIGp1bmsgKi8KKyAgICAgICAgICAqY3AtLSA9IE5VTDsKKyAgICAgICAgZGVidWcoRjExMSwi ZnRwIGdldHJlcGx5IixmdHBfcmVwbHlfc3RyLG4gLSAnMCcpOworICAgICAgICByZXR1cm4obiAt ICcwJyk7CisgICAgfSAvKiBmb3IgKDs7KSAqLworfQorCisjaWZkZWYgQlNEU0VMRUNUCitzdGF0 aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK2VtcHR5KGZkX3NldCAqIG1hc2ssIGludCBzZWMpCisj ZWxzZQorZW1wdHkobWFzaywgc2VjKSBmZF9zZXQgKiBtYXNrOyBpbnQgc2VjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7CisgICAgc3RydWN0IHRpbWV2YWwgdDsKKyAgICB0LnR2X3NlYyA9IChs b25nKSBzZWM7CisgICAgdC50dl91c2VjID0gMEw7CisgICAgZGVidWcoRjEwMCwiZnRwIGVtcHR5 IGNhbGxpbmcgc2VsZWN0Li4uIiwiIiwwKTsKKyNpZmRlZiBJTlRTRUxFQ1QKKyAgICB4ID0gc2Vs ZWN0KDMyLCAoaW50ICopbWFzaywgTlVMTCwgTlVMTCwgJnQpOworI2Vsc2UKKyAgICB4ID0gc2Vs ZWN0KDMyLCBtYXNrLCAoZmRfc2V0ICopIDAsIChmZF9zZXQgKikgMCwgJnQpOworI2VuZGlmIC8q IElOVFNFTEVDVCAqLworICAgIGRlYnVnKEYxMDEsImZ0cCBlbXB0eSBzZWxlY3QiLCIiLHgpOwor ICAgIHJldHVybih4KTsKK30KKyNlbHNlIC8qIEJTRFNFTEVDVCAqLworI2lmZGVmIElCTVNFTEVD VAorc3RhdGljIGludAorZW1wdHkobWFzaywgY250LCBzZWMpIGludCAqIG1hc2ssIHNlYzsKKyAg ICAgICAgICAgICAgICAgICAgICBpbnQgICBjbnQ7Cit7CisgICAgcmV0dXJuKHNlbGVjdChtYXNr LGNudCwwLDAsc2VjKjEwMDApKTsKK30KKyNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KKyNlbmRpZiAv KiBCU0RTRUxFQ1QgKi8KKworc3RhdGljIHNpZ3R5cGUKK2NhbmNlbHNlbmQoc2lnKSBpbnQgc2ln OyB7CisgICAgaGF2ZXNpZ2ludCsrOworICAgIGNhbmNlbGdyb3VwKys7CisgICAgY2FuY2VsZmls ZSA9IDA7CisgICAgcHJpbnRmKCIgQ2FuY2VsZWQuLi5cbiIpOworICAgIHNlY3VyZV9nZXRjKDAs MSk7CQkJLyogSW5pdGlhbGl6ZSBuZXQgaW5wdXQgYnVmZmVycyAqLworICAgIGRlYnVnKEYxMDAs ImZ0cCBjYW5jZWxzZW5kIGNhdWdodCBTSUdJTlQgIiwiIiwwKTsKKyAgICBmZmx1c2goc3Rkb3V0 KTsKKyNpZm5kZWYgT1MyCisgICAgbG9uZ2ptcChzZW5kY2FuY2VsLCAxKTsKKyNlbHNlCisgICAg UG9zdEN0cmxDU2VtKCk7CisjZW5kaWYgLyogT1MyICovCit9CisKK3N0YXRpYyBWT0lECisjaWZk ZWYgQ0tfQU5TSUMKK3NlY3VyZV9lcnJvcihjaGFyICpmbXQsIC4uLikKKyNlbHNlCisvKiBWQVJB UkdTMSAqLworc2VjdXJlX2Vycm9yKGZtdCwgcDEsIHAyLCBwMywgcDQsIHA1KQorICAgY2hhciAq Zm10OyBpbnQgcDEsIHAyLCBwMywgcDQsIHA1OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisj aWZkZWYgQ0tfQU5TSUMKKyAgICB2YV9saXN0IGFwOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7 CisgICAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworI2Vsc2UK KyAgICBmcHJpbnRmKHN0ZGVyciwgZm10LCBwMSwgcDIsIHAzLCBwNCwgcDUpOworI2VuZGlmCisg ICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorCisvKgorICogSW50ZXJuYWwgZm9ybSBvZiBz ZXR0eXBlOyBjaGFuZ2VzIGN1cnJlbnQgdHlwZSBpbiB1c2Ugd2l0aCBzZXJ2ZXIKKyAqIHdpdGhv dXQgY2hhbmdpbmcgb3VyIG5vdGlvbiBvZiB0aGUgdHlwZSBmb3IgZGF0YSB0cmFuc2ZlcnMuCisg KiBVc2VkIHRvIGNoYW5nZSB0byBhbmQgZnJvbSBhc2NpaSBmb3IgbGlzdGluZ3MuCisgKi8KK3N0 YXRpYyBWT0lECitjaGFuZ2V0eXBlKG5ld3R5cGUsIHNob3cpIGludCBuZXd0eXBlLCBzaG93OyB7 CisgICAgaW50IHJjOworICAgIGNoYXIgKiBzOworCisgICAgaWYgKChuZXd0eXBlID09IGN1cnR5 cGUpICYmIHR5cGVzZW50KyspCisgICAgICByZXR1cm47CisgICAgc3dpdGNoIChuZXd0eXBlKSB7 CisgICAgICBjYXNlIEZUVF9BU0M6CisgICAgICAgIHMgPSAiQSI7CisgICAgICAgIGJyZWFrOwor ICAgICAgY2FzZSBGVFRfQklOOgorICAgICAgICBzID0gIkkiOworICAgICAgICBicmVhazsKKyAg ICAgIGNhc2UgRlRUX1RFTjoKKyAgICAgICAgcyA9ICJMIDgiOworICAgICAgICBicmVhazsKKyAg ICAgIGRlZmF1bHQ6CisgICAgICAgIHMgPSAiSSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg ICByYyA9IGZ0cGNtZCgiVFlQRSIscywtMSwtMSxzaG93KTsKKyAgICBpZiAocmMgPT0gUkVQTFlf Q09NUExFVEUpCisgICAgICBjdXJ0eXBlID0gbmV3dHlwZTsKK30KKworLyogUFVUIGEgZmlsZS4g IFJldHVybnMgLTEgb24gZXJyb3IsIDAgb24gc3VjY2VzcywgMSBpZiBmaWxlIHNraXBwZWQgKi8K Kworc3RhdGljIFZPSUQKKyNpZmRlZiBDS19BTlNJQworZG9mdHBzZW5kKHZvaWQgKiB0aHJlYWRp bmZvKQorI2Vsc2UKK2RvZnRwc2VuZCh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNl bmRpZgoreworI2lmZGVmIE5UU0lHCisgICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAg ICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICAgVGxzU2V0VmFsdWUo VGxzSW5kZXgsdGhyZWFkaW5mbyk7CisgICAgICAgIGRlYnVnKEYxMDAsICJkb2Z0cHNlbmQgY2Fs bGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOworICAgIH0gZWxzZSBkZWJ1ZyhGMTAw LCAiZG9mdHBzZW5kIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOworI2VuZGlmIC8qIE5U U0lHICovCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBJS1NECisjaWZkZWYgTlQKKyAgICBpZiAo aW5zZXJ2ZXIpCisgICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAv KiBJS1NEICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworICAgIGlmIChpbml0Y29ubigpKSB7 CisjaWZuZGVmIE5PSFRUUAorICAgICAgICBpbnQgeSA9IC0xOworICAgICAgICAvKiBkZWJ1ZyhG MTAxLCJkb2Z0cHNlbmQiLCJ0Y3BfaHR0cF9wcm94eSIsdGNwX2h0dHBfcHJveHkpOyAqLworCisg ICAgICAgLyogIElmIHRoZSBjb25uZWN0aW9uIGZhaWxlZCBhbmQgd2UgYXJlIHVzaW5nIGFuIEhU VFAgUHJveHkKKyAgICAgICAgKiAgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlIHdhcyBh biBhdXRoZW50aWNhdGlvbgorICAgICAgICAqICBlcnJvciwgdGhlbiB3ZSBuZWVkIHRvIGdpdmUg dGhlIHVzZXIgdG8gYWJpbGl0eSB0bworICAgICAgICAqICBlbnRlciBhIHVzZXJuYW1lIGFuZCBw YXNzd29yZCwganVzdCBsaWtlIGEgYnJvd3Nlci4KKyAgICAgICAgKgorICAgICAgICAqICBJIHRy aWVkIHRvIGRvIGFsbCBvZiB0aGlzIHdpdGhpbiB0aGUgbmV0b3BlbigpIGNhbGwKKyAgICAgICAg KiAgYnV0IGl0IGlzIG11Y2ggdG9vIG11Y2ggd29yay4KKyAgICAgICAgKi8KKyAgICAgICAgd2hp bGUgKHkgIT0gMCAmJiB0Y3BfaHR0cF9wcm94eSAhPSBOVUxMICkgeworCisgICAgICAgICAgICBp ZiAodGNwX2h0dHBfcHJveHlfZXJybm8gPT0gNDAxIHx8CisgICAgICAgICAgICAgICAgIHRjcF9o dHRwX3Byb3h5X2Vycm5vID09IDQwNyApIHsKKyAgICAgICAgICAgICAgICBjaGFyIHVpZFtVSURC VUZMRU5dOworICAgICAgICAgICAgICAgIGNoYXIgcHdkW1BXRFNJWl07CisgICAgICAgICAgICAg ICAgc3RydWN0IHR4dGJveCB0YlsyXTsKKyAgICAgICAgICAgICAgICBpbnQgb2s7CisKKyAgICAg ICAgICAgICAgICB0YlswXS50X2J1ZiA9IHVpZDsKKyAgICAgICAgICAgICAgICB0YlswXS50X2xl biA9IFVJREJVRkxFTjsKKyAgICAgICAgICAgICAgICB0YlswXS50X2xibCA9ICJQcm94eSBVc2Vy aWQ6ICI7CisgICAgICAgICAgICAgICAgdGJbMF0udF9kZmx0ID0gTlVMTDsKKyAgICAgICAgICAg ICAgICB0YlswXS50X2VjaG8gPSAxOworICAgICAgICAgICAgICAgIHRiWzFdLnRfYnVmID0gcHdk OworICAgICAgICAgICAgICAgIHRiWzFdLnRfbGVuID0gMjU2OworICAgICAgICAgICAgICAgIHRi WzFdLnRfbGJsID0gIlByb3h5IFBhc3NwaHJhc2U6ICI7CisgICAgICAgICAgICAgICAgdGJbMV0u dF9kZmx0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB0YlsxXS50X2VjaG8gPSAyOworCisgICAg ICAgICAgICAgICAgb2sgPSB1cV9tdHh0KCJQcm94eSBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUmVx dWlyZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAyLCB0Yik7Cisg ICAgICAgICAgICAgICAgaWYgKG9rICYmIHVpZFswXSkgeworICAgICAgICAgICAgICAgICAgICBj aGFyICogcHJveHlfdXNlciwgKiBwcm94eV9wd2Q7CisKKyAgICAgICAgICAgICAgICAgICAgcHJv eHlfdXNlciA9IHRjcF9odHRwX3Byb3h5X3VzZXI7CisgICAgICAgICAgICAgICAgICAgIHByb3h5 X3B3ZCAgPSB0Y3BfaHR0cF9wcm94eV9wd2Q7CisKKyAgICAgICAgICAgICAgICAgICAgdGNwX2h0 dHBfcHJveHlfdXNlciA9IHVpZDsKKyAgICAgICAgICAgICAgICAgICAgdGNwX2h0dHBfcHJveHlf cHdkID0gcHdkOworCisgICAgICAgICAgICAgICAgICAgIHkgPSBpbml0Y29ubigpOworCisgICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvZnRwc2VuZCIsImluaXRjb25uIix5KTsKKyAg ICAgICAgICAgICAgICAgICAgbWVtc2V0KHB3ZCwwLFBXRFNJWik7CisgICAgICAgICAgICAgICAg ICAgIHRjcF9odHRwX3Byb3h5X3VzZXIgPSBwcm94eV91c2VyOworICAgICAgICAgICAgICAgICAg ICB0Y3BfaHR0cF9wcm94eV9wd2QgPSBwcm94eV9wd2Q7CisgICAgICAgICAgICAgICAgfSBlbHNl CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHkgIT0gMCApIHsKKyNl bmRpZiAvKiBOT0hUVFAgKi8KKyAgICAgICAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHNuZC5vbGRp bnRyKTsKKyNpZmRlZiBTSUdQSVBFCisgICAgICAgICAgICBpZiAoZnRwc25kLm9sZGludHApCisg ICAgICAgICAgICAgIHNpZ25hbChTSUdQSVBFLCBmdHBzbmQub2xkaW50cCk7CisjZW5kaWYgLyog U0lHUElQRSAqLworICAgICAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICAgICAgemNsb3Nl KFpJRklMRSk7CisgICAgICAgICAgICBmdHBzbmRyZXQgPSAtMTsKKyNpZmRlZiBOVFNJRworICAg ICAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAg ICAgICAgICAgIHJldHVybjsKKyNpZm5kZWYgTk9IVFRQCisgICAgICAgIH0KKyNlbmRpZiAvKiBO T0hUVFAgKi8KKyAgICB9CisgICAgZnRwc25kcmV0ID0gMDsKKyNpZmRlZiBOVFNJRworICAgICBj a1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworfQorCitzdGF0aWMg Vk9JRAorI2lmZGVmIENLX0FOU0lDCitmYWlsZnRwc2VuZCh2b2lkICogdGhyZWFkaW5mbykKKyNl bHNlCitmYWlsZnRwc2VuZCh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworI2lmZGVmIE5UU0lHCisgICAgaWYgKHRocmVhZGluZm8pIHsgICAg ICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICAgVGxz U2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7CisgICAgICAgIGRlYnVnKEYxMDAsICJkb2Nt ZGZpbGUgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9jayIsIiIsIDApOworICAgIH0gZWxzZSBk ZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOworI2Vu ZGlmIC8qIE5UU0lHICovCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBJS1NECisjaWZkZWYgTlQK KyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYgLyogTlQgKi8K KyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworICAgIHdoaWxlIChj cGVuZCkgeworICAgICAgICBmdHBzbmQucmVwbHkgPSBnZXRyZXBseSgwLGZ0cHNuZC5pbmNzLGZ0 cHNuZC5vdXRjcyxmdHBfdmJtLDApOworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgc2VuZHJlcXVl c3QgZ2V0cmVwbHkiLCJudWxsIGNvbW1hbmQiLGZ0cHNuZC5yZXBseSk7CisgICAgfQorICAgIGlm IChkYXRhID49IDApIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKHNzbF9mdHBfZGF0YV9h Y3RpdmVfZmxhZykgeworICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBfZGF0YV9jb24p OworICAgICAgICAgICAgU1NMX2ZyZWUoc3NsX2Z0cF9kYXRhX2Nvbik7CisgICAgICAgICAgICBz c2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcgPSAwOworICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2Nv biA9IE5VTEw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBUQ1BJUExJ QgorICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lm ZGVmIFVTRV9TSFVURE9XTgorICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOworI2VuZGlmIC8q IFVTRV9TSFVURE9XTiAqLworICAgICAgICBjbG9zZShkYXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJ QiAqLworICAgICAgICBkYXRhID0gLTE7CisgICAgICAgIGdsb2JhbGRpbiA9IC0xOworICAgIH0K KyAgICBpZiAoZnRwc25kLm9sZGludHIpCisgICAgICAgIHNpZ25hbChTSUdJTlQsZnRwc25kLm9s ZGludHIpOworI2lmZGVmIFNJR1BJUEUKKyAgICBpZiAoZnRwc25kLm9sZGludHApCisgICAgICAg IHNpZ25hbChTSUdQSVBFLGZ0cHNuZC5vbGRpbnRwKTsKKyNlbmRpZiAvKiBTSUdQSVBFICovCisg ICAgZnRwY29kZSA9IC0xOworI2lmbmRlZiBPUzIKKyAgICAvKiBURVNUIE1FIElOIEs5NSAqLwor ICAgIGlmIChoYXZlc2lnaW50KSB7CisJaGF2ZXNpZ2ludCA9IDA7CisJZGVidWcoRjEwMCwiZnRw IGZhaWxmdHBzZW5kIGNoYWluIHRvIHRyYXAoKS4uLiIsIiIsMCk7CisJaWYgKGZ0cHNuZC5vbGRp bnRyICE9IFNJR19JR04pCisJICAoKmZ0cHNuZC5vbGRpbnRyKShTSUdJTlQpOworCS8qIE5PVFJF QUNIRUQgKEkgaG9wZSEpICovCisJZGVidWcoRjEwMCwiZnRwIGZhaWxmdHBzZW5kIHJldHVybiBm cm9tIHRyYXAoKS4uLiIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworfQorCitzdGF0 aWMgVk9JRAorI2lmZGVmIENLX0FOU0lDCitmYWlsZnRwc2VuZDIodm9pZCAqIHRocmVhZGluZm8p CisjZWxzZQorZmFpbGZ0cHNlbmQyKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7CisjaWZkZWYgTlRTSUcKKyAgICBpZiAodGhyZWFkaW5mbykg eyAgICAgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAg ICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKKyAgICAgICAgZGVidWcoRjEwMCwg ImRvY21kZmlsZSBjYWxsZWQgd2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7CisgICAgfSBl bHNlIGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7 CisjZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIElLU0QKKyNpZmRl ZiBOVAorICAgIGlmIChpbnNlcnZlcikKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBO VCAqLworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisgICAgZGVi dWcoRjEwMSwiZnRwIHNlbmRyZXF1ZXN0IGNhbmNlbGVkIiwiIixmdHBzbmQuYnl0ZXMpOworICAg IHRmYyArPSBmZmM7CisjaWZkZWYgR0ZUSU1FUgorICAgIGZwZnNlY3MgPSBnZnRpbWVyKCk7Cisj ZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIHpjbG9zZShaSUZJTEUpOworI2lmZGVmIFBJUEVTRU5E CisgICAgaWYgKHNuZGZpbHRlcikKKyAgICAgIHBpcGVzZW5kID0gMDsKKyNlbmRpZiAvKiBQSVBF U0VORCAqLworICAgIHNpZ25hbChTSUdJTlQsIGZ0cHNuZC5vbGRpbnRyKTsKKyNpZmRlZiBTSUdQ SVBFCisgICAgaWYgKGZ0cHNuZC5vbGRpbnRwKQorICAgICAgc2lnbmFsKFNJR1BJUEUsIGZ0cHNu ZC5vbGRpbnRwKTsKKyNlbmRpZiAvKiBTSUdQSVBFICovCisgICAgaWYgKCFjcGVuZCkgeworICAg ICAgICBmdHBjb2RlID0gLTE7CisgICAgICAgIGZ0cHNuZHJldCA9IC0xOworI2lmZGVmIE5UU0lH CisgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisg ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGRhdGEgPj0gMCkgeworI2lmZGVmIENLX1NT TAorICAgICAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgICAgICBT U0xfc2h1dGRvd24oc3NsX2Z0cF9kYXRhX2Nvbik7CisgICAgICAgICAgICBTU0xfZnJlZShzc2xf ZnRwX2RhdGFfY29uKTsKKyAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyA9IDA7 CisgICAgICAgICAgICBzc2xfZnRwX2RhdGFfY29uID0gTlVMTDsKKyAgICAgICAgfQorI2VuZGlm IC8qIENLX1NTTCAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAgIHNvY2tldF9jbG9zZShkYXRh KTsKKyNlbHNlIC8qIFRDUElQTElCICovCisjaWZkZWYgVVNFX1NIVVRET1dOCisgICAgICAgIHNo dXRkb3duKGRhdGEsIDErMSk7CisjZW5kaWYgLyogVVNFX1NIVVRET1dOICovCisgICAgICAgIGNs b3NlKGRhdGEpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgIGRhdGEgPSAtMTsKKyAg ICAgICAgZ2xvYmFsZGluID0gLTE7CisgICAgfQorICAgIGlmIChkb3V0KSB7CisjaWZkZWYgVENQ SVBMSUIKKyAgICAgICAgc29ja2V0X2Nsb3NlKGRvdXQpOworI2Vsc2UgLyogVENQSVBMSUIgKi8K KyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICAgICAgc2h1dGRvd24oZG91dCwgMSsxKTsKKyNlbmRp ZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgY2xvc2UoZG91dCk7CisjZW5kaWYgLyogVENQ SVBMSUIgKi8KKyAgICB9CisgICAgZnRwc25kLnJlcGx5ID0gZ2V0cmVwbHkoMCxmdHBzbmQuaW5j cyxmdHBzbmQub3V0Y3MsZnRwX3ZibSwwKTsKKyAgICBmdHBjb2RlID0gLTE7CisgICAgZnRwc25k cmV0ID0gLTE7CisKKyNpZm5kZWYgT1MyCisgICAgLyogVEVTVCBNRSBJTiBLOTUgKi8KKyAgICBp ZiAoaGF2ZXNpZ2ludCkgeworCWhhdmVzaWdpbnQgPSAwOworCWRlYnVnKEYxMDAsImZ0cCBmYWls ZnRwc2VuZDIgY2hhaW4gdG8gdHJhcCgpLi4uIiwiIiwwKTsKKwlpZiAoZnRwc25kLm9sZGludHIg IT0gU0lHX0lHTikKKwkgICgqZnRwc25kLm9sZGludHIpKFNJR0lOVCk7CisJLyogTk9UUkVBQ0hF RCAoSSBob3BlISkgKi8KKwlkZWJ1ZyhGMTAwLCJmdHAgZmFpbGZ0cHNlbmQyIHJldHVybiBmcm9t IHRyYXAoKS4uLiIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworfQorCitzdGF0aWMg Vk9JRAorI2lmZGVmIENLX0FOU0lDCitkb2Z0cHNlbmQyKHZvaWQgKiB0aHJlYWRpbmZvKQorI2Vs c2UKK2RvZnRwc2VuZDIodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYKK3sK KyAgICByZWdpc3RlciBpbnQgYywgZCA9IDA7CisgICAgaW50IG4sIHQsIHgsIG5vdGFmaWxlLCB1 bmlxdWUgPSAwOworICAgIGNoYXIgKmJ1ZiwgKmJ1ZnA7CisgICAgCisjaWZkZWYgTlRTSUcKKyAg ICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3Rv cmFnZS4uLiAqLworICAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKKyAg ICAgICAgZGVidWcoRjEwMCwgImRvZnRwc2VuZDIgY2FsbGVkIHdpdGggdGhyZWFkaW5mbyBibG9j ayIsIiIsIDApOworICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCAiZG9mdHBzZW5kMiAtIHRocmVhZGlu Zm8gaXMgTlVMTCIsICIiLCAwKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lO CisjaWZkZWYgSUtTRAorI2lmZGVmIE5UCisgICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRj cmVkcygpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8qIENL X0xPR0lOICovCisKKyAgICBidWYgPSBmdHBzbmRidWY7CQkJLyogKG5vdCBvbiBzdGFjaykgKi8K KworICAgIHVuaXF1ZSA9IHN0cmNtcChmdHBzbmQuY21kLCJTVE9VIikgPyAwIDogMTsKKyAgICBu b3RhZmlsZSA9IHNuZGFycmF5IHx8IHBpcGVzZW5kOworCisjaWZkZWYgRlRQX1JFU1RBUlQKKyAg ICBpZiAoZnRwc25kLnJlc3RhcnQgJiYgKChjdXJ0eXBlID09IEZUVF9CSU4pIHx8IChhbGlrZSA+ IDApKSkgeworICAgICAgICBjaGFyICogcDsKKyAgICAgICAgY2hhbmdldHlwZShGVFRfQklOLDAp OyAgICAgICAgICAvKiBDaGFuZ2UgdG8gYmluYXJ5ICovCisKKyAgICAgICAgLyogQXNrIGZvciBy ZW1vdGUgZmlsZSdzIHNpemUgKi8KKyAgICAgICAgeCA9IGZ0cGNtZCgiU0laRSIsZnRwc25kLnJl bW90ZSxmdHBzbmQuaW5jcyxmdHBzbmQub3V0Y3MsZnRwX3ZibSk7CisKKyAgICAgICAgaWYgKHgg PT0gUkVQTFlfQ09NUExFVEUpIHsgICAgICAvKiBIYXZlIGZ0cHNuZC5yZXBseSAqLworICAgICAg ICAgICAgcCA9ICZmdHBfcmVwbHlfc3RyWzRdOyAgICAgIC8qIFBhcnNlIGl0ICovCisgICAgICAg ICAgICB3aGlsZSAoaXNkaWdpdCgqcCkpIHsKKyAgICAgICAgICAgICAgICBzZW5kc3RhcnQgPSBz ZW5kc3RhcnQgKiAxMCArIChpbnQpKCpwIC0gJzAnKTsKKyAgICAgICAgICAgICAgICBwKys7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnAgJiYgKnAgIT0gQ1IpIHsgICAgICAgLyog QmFkIG51bWJlciAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImRvZnRwc2VuZDIgYmFk IHNpemUiLGZ0cF9yZXBseV9zdHIsMCk7CisgICAgICAgICAgICAgICAgc2VuZHN0YXJ0ID0gKENL X09GRl9UKTA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbmRzdGFydCA+IGZzaXplKSB7IC8q IFJlbW90ZSBmaWxlIGJpZ2dlciB0aGFuIGxvY2FsICovCisgICAgICAgICAgICAgICAgZGVidWco RjExMCwiZG9mdHBzZW5kMiBiaWcgc2l6ZSIsY2tmc3RvYShmc2l6ZSksc2VuZHN0YXJ0KTsKKyAg ICAgICAgICAgICAgICBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsKKyAgICAgICAgICAgIH0KKwkg ICAgLyogTG9jYWwgaXMgbmV3ZXIgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvZnRwc2Vu ZDIgc2l6ZSIsZnRwc25kLnJlbW90ZSxzZW5kc3RhcnQpOworICAgICAgICAgICAgaWYgKGNoa21v ZHRpbWUoZnRwc25kLmxvY2FsLGZ0cHNuZC5yZW1vdGUsMCkgPT0gMikgeworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImRvZnRwc2VuZDIgZGF0ZSBtaXNtYXRjaCIsZnRwX3JlcGx5X3N0ciww KTsKKyAgICAgICAgICAgICAgICBzZW5kc3RhcnQgPSAoQ0tfT0ZGX1QpMDsgLyogU2VuZCB0aGUg d2hvbGUgZmlsZSAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNoYW5nZXR5 cGUoZnRwX3R5cCwwKTsgICAgICAgICAgLyogQ2hhbmdlIGJhY2sgdG8gYXBwcm9wcmlhdGUgdHlw ZSAqLworICAgICAgICBpZiAoc2VuZHN0YXJ0ID4gKENLX09GRl9UKTApIHsJLyogU3RpbGwgcmVz dGFydGluZz8gKi8KKyAgICAgICAgICAgIGlmIChzZW5kc3RhcnQgPT0gZnNpemUpIHsgICAvKiBT YW1lIHNpemUgLSBubyBuZWVkIHRvIHNlbmQgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJkb2Z0cHNlbmQyIC9yZXN0YXJ0IFNLSVAiLAorCQkgICAgICBja2ZzdG9hKGZzaXplKSxzZW5k c3RhcnQpOworICAgICAgICAgICAgICAgIHpjbG9zZShaSUZJTEUpOworICAgICAgICAgICAgICAg IGZ0cHNuZHJldCA9IFNLUF9SRVM7CisjaWZkZWYgTlRTSUcKKyAgICAgICAgICAgICAgICBja1Ro cmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVycm5vID0gMDsgICAgICAgICAg ICAgICAgICAvKiBSZXN0YXJ0IG5lZWRlZCwgc2VlayB0byB0aGUgc3BvdCAqLworICAgICAgICAg ICAgaWYgKHpmc2VlaygobG9uZylzZW5kc3RhcnQpIDwgMCkgeworICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsImRvZnRwc2VuZDIgemZzZWVrIGZhaWxzIiwKKwkJICAgICAgZnRwc25kLmxvY2Fs LHNlbmRzdGFydCk7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGU0VFSzogJXM6 ICVzXG4iLCBmdHBzbmQubG9jYWwsIGNrX2VycnN0cigpKTsKKyAgICAgICAgICAgICAgICBzZW5k c3RhcnQgPSAwOworICAgICAgICAgICAgICAgIHpjbG9zZShaSUZJTEUpOworICAgICAgICAgICAg ICAgIGZ0cHNuZHJldCA9IC0xOworI2lmZGVmIE5UU0lHCisgICAgICAgICAgICAgICAgY2tUaHJl YWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICAgICAgICAgICAgICBy ZXR1cm47CisgICAgICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgZGVidWco RjExMSwiZG9mdHBzZW5kMiB6ZnNlZWsgb2siLGZ0cHNuZC5sb2NhbCxzZW5kc3RhcnQpOworICAg ICAgICAgICAgeCA9IGZ0cGNtZCgiUkVTVCIsY2tsdG9hKHNlbmRzdGFydCksLTEsLTEsZnRwX3Zi bSk7CisgICAgICAgICAgICBpZiAoeCAhPSBSRVBMWV9DT05USU5VRSkgeworICAgICAgICAgICAg ICAgIHNlbmRzdGFydCA9IDA7CisgICAgICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7CisgICAg ICAgICAgICAgICAgZnRwc25kcmV0ID0gLTE7CisjaWZkZWYgTlRTSUcKKyAgICAgICAgICAgICAg ICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZnRw c25kLmNtZCA9ICJTVE9SIjsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBzZW5k bW9kZSA9IFNNX1JFU0VORDsKKyAgICAgICAgICAgIGZ0cHNuZC5jbWQgPSAiQVBQRSI7CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgLyogc2VuZHN0YXJ0ID0gKENLX09GRl9UKTA7 ICovCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRlRQX1JFU1RBUlQgKi8KKworICAgIGlm ICh1bmlxdWUgJiYgIXN0b3VhcmcpCQkvKiBJZiB3ZSBrbm93IFNUT1UgYWNjZXB0cyBubyBhcmcg Ki8KKyAgICAgIGZ0cHNuZC5yZW1vdGUgPSBOVUxMOwkJLyogZG9uJ3QgaW5jbHVkZSBvbmUuICov CisKKyAgICB4ID0gZnRwY21kKGZ0cHNuZC5jbWQsIGZ0cHNuZC5yZW1vdGUsIGZ0cHNuZC5pbmNz LCBmdHBzbmQub3V0Y3MsIGZ0cF92Ym0pOworICAgIGRlYnVnKEYxMTEsImRvZnRwc2VuZDIgZnRw Y29kZSIsZnRwc25kLmNtZCxmdHBjb2RlKTsKKyAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIGZ0 cGNtZCIsIiIseCk7CisKKyAgICBpZiAoeCAhPSBSRVBMWV9QUkVMSU0gJiYgdW5pcXVlKSB7CisJ LyoKKwkgIFJGQzk1OSBzYXlzIFNUT1UgZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudC4gIEJ1dCBl dmVyeSBGVFAgc2VydmVyCisJICBJJ3ZlIGVuY291bnRlcmVkIGJ1dCBvbmUgYWNjZXB0cyB0aGUg YXJnIGFuZCBjb25zdHJ1Y3RzIHRoZSB1bmlxdWUKKwkgIG5hbWUgZnJvbSBpdCwgd2hpY2ggaXMg YmV0dGVyIHRoYW4gbWFraW5nIHVwIGEgdG90YWxseSByYW5kb20gbmFtZQorCSAgZm9yIHRoZSBm aWxlLCB3aGljaCBpcyB3aGF0IFJGQzk1OSBjYWxscyBmb3IuICBFc3BlY2lhbGx5IGJlY2F1c2UK KwkgIHRoZXJlIGlzIG5vIHdheSBmb3IgdGhlIGNsaWVudCB0byBmaW5kIG91dCB0aGUgbmFtZSBj aG9zZW4gYnkgdGhlCisJICBzZXJ2ZXIuICBTbyB3ZSB0cnkgU1RPVSB3aXRoIHRoZSBhcmd1bWVu dCBmaXJzdCwgd2hpY2ggd29ya3Mgd2l0aAorCSAgbW9zdCBzZXJ2ZXJzLCBhbmQgaWYgaXQgZmFp bHMgd2UgcmV0cnkgaXQgd2l0aG91dCB0aGUgYXJnLCBmb3IKKwkgIHRoZSBiZW5lZml0IG9mIHRo ZSBvbmUgcGlja3kgc2VydmVyIHRoYXQgaXMgbm90ICJsaWJlcmFsIGluIHdoYXQKKwkgIGl0IGFj Y2VwdHMiIFVOTEVTUyB0aGUgZmlyc3QgU1RPVSBnb3QgYSA1MDIgY29kZSAoIm5vdCBpbXBsZW1l bnRlZCIpCisJICB3aGljaCBtZWFucyBTVE9VIGlzIG5vdCBhY2NlcHRlZCwgcGVyaW9kLgorCSov CisJaWYgKCh4ID09IDUpICYmIHN0b3VhcmcgJiYgKGZ0cGNvZGUgIT0gNTAyKSkgeworCSAgICB4 ID0gZnRwY21kKGZ0cHNuZC5jbWQsTlVMTCxmdHBzbmQuaW5jcyxmdHBzbmQub3V0Y3MsZnRwX3Zi bSk7IAorCSAgICBpZiAoeCA9PSBSRVBMWV9QUkVMSU0pCS8qIElmIGFjY2VwdGVkICovCisJICAg ICAgc3RvdWFyZyA9IDA7CQkvKiBmbGFnIG5vIFNUT1UgYXJnIGZvciB0aGlzIHNlcnZlciAqLwor CX0KKyAgICB9CisgICAgaWYgKHggIT0gUkVQTFlfUFJFTElNKSB7CisgICAgICAgIHNpZ25hbChT SUdJTlQsIGZ0cHNuZC5vbGRpbnRyKTsKKyNpZmRlZiBTSUdQSVBFCisgICAgICAgIGlmIChmdHBz bmQub2xkaW50cCkKKyAgICAgICAgICBzaWduYWwoU0lHUElQRSwgZnRwc25kLm9sZGludHApOwor I2VuZGlmIC8qIFNJR1BJUEUgKi8KKwlkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIG5vdCBSRVBMWV9Q UkVMSU0iLCIiLHgpOworICAgICAgICB6Y2xvc2UoWklGSUxFKTsKKyNpZmRlZiBQSVBFU0VORAor ICAgICAgICBpZiAoc25kZmlsdGVyKQorICAgICAgICAgIHBpcGVzZW5kID0gMDsKKyNlbmRpZiAv KiBQSVBFU0VORCAqLworICAgICAgICBmdHBzbmRyZXQgPSAtMTsKKyNpZmRlZiBOVFNJRworICAg ICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAg ICByZXR1cm47CisgICAgfQorICAgIGRlYnVnKEYxMDAsImRvZnRwc2VuZDIgZ2V0dGluZyBkYXRh IGNvbm5lY3Rpb24uLi4iLCIiLDApOworICAgIGRvdXQgPSBkYXRhY29ubihmdHBzbmQubG1vZGUp OyAgICAgICAgICAgICAvKiBHZXQgZGF0YSBjb25uZWN0aW9uICovCisgICAgZGVidWcoRjEwMSwi ZG9mdHBzZW5kMiBkYXRhY29ubiIsIiIsZG91dCk7CisgICAgaWYgKGRvdXQgPT0gLTEpIHsKKyAg ICAgICAgZmFpbGZ0cHNlbmQyKHRocmVhZGluZm8pOworI2lmZGVmIE5UU0lHCisgICAgICAgIGNr VGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAgIHJldHVy bjsKKyAgICB9CisgICAgLyogSW5pdGlhbGl6ZSBwZXItZmlsZSBzdGF0cyAqLworICAgIGZmYyA9 IChDS19PRkZfVCkwOwkJCS8qIENoYXJhY3RlciBjb3VudGVyICovCisgICAgY3BzID0gb2xkY3Bz ID0gMEw7ICAgICAgICAgICAgICAgICAgLyogVGhydXB1dCAqLworICAgIG4gPSAwOworI2lmZGVm IEdGVElNRVIKKyAgICByZnRpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNl dCBmLnAuIHRpbWVyICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisjaWZkZWYgU0lHUElQRQor ICAgIGZ0cHNuZC5vbGRpbnRwID0gc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworI2VuZGlmIC8q IFNJR1BJUEUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIGN1cnR5cGUiLCIiLGN1cnR5 cGUpOworICAgIHN3aXRjaCAoY3VydHlwZSkgeworICAgICAgY2FzZSBGVFRfQklOOiAgICAgICAg ICAgICAgICAgICAgIC8qIEJpbmFyeSBtb2RlICovCisgICAgICBjYXNlIEZUVF9URU46CisgICAg ICAgIGVycm5vID0gZCA9IDA7CisjaWZkZWYgVk1TCisJLyoKKwkgIFRoaXMgaXMgYmVjYXVzZSBW TVMgenhpbigpIGlzIEMtTGlicmFyeSBmcmVhZCgpIAorICAgICAgICAgIGJ1dCB0aGUgZmlsZSB3 YXMgb3BlbmVkIHdpdGggem9wZW5pKCksIHdoaWNoIGlzIFJNUy4KKwkqLworCXdoaWxlICgoKGMg PSB6bWluY2hhcigpKSA+IC0xKSAmJiAhY2FuY2VsZmlsZSkgeworCSAgICBmZmMrKzsKKwkgICAg aWYgKHp6b3V0KGRvdXQsYykgPCAwKQorCSAgICAgIGJyZWFrOworCX0KKyNlbHNlICAvKiBWTVMg Ki8KKyAgICAgICAgd2hpbGUgKChuID0genhpbihaSUZJTEUsYnVmLEZUUF9CVUZTSVogLSAxKSkg PiAwICYmICFjYW5jZWxmaWxlKSB7CisgICAgICAgICAgICBmdHBzbmQuYnl0ZXMgKz0gbjsKKyAg ICAgICAgICAgIGZmYyArPSBuOworICAgICAgICAgICAgZGVidWcoRjExMSwiZG9mdHBzZW5kMiB6 eGluIixja2x0b2EobiksZmZjKTsKKyAgICAgICAgICAgIGNraGV4ZHVtcCgiZG9mdHBzZW5kMiB6 eGluIixidWYsMTYpOworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgaWYgKHNzbF9mdHBfZGF0 YV9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgICAgIGZvciAoYnVmcCA9IGJ1ZjsgbiA+IDA7 IG4gLT0gZCwgYnVmcCArPSBkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoZCA9IFNTTF93 cml0ZShzc2xfZnRwX2RhdGFfY29uLCBidWZwLCBuKSkgPD0gMCkKKyAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgc3BhY2tldHMrKzsKKyAgICAgICAgICAg ICAgICAgICAgcGt0bnVtKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhICE9IFhZ RkRfQikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BrdGwgPSBkOworICAgICAgICAgICAg ICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1BULCdEJywoQ0tfT0ZGX1Qpc3BhY2tldHMsTlVMTCk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 IGVsc2UgeworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgIGZvciAoYnVmcCA9 IGJ1ZjsgbiA+IDA7IG4gLT0gZCwgYnVmcCArPSBkKSB7CisgICAgICAgICAgICAgICAgICAgIGlm ICgoKGQgPSBzZWN1cmVfd3JpdGUoZG91dCwgKENIQVIgKilidWZwLCBuKSkgPD0gMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgIHx8IGlzY2FuY2VsZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgc3BhY2tldHMrKzsKKyAgICAgICAgICAgICAg ICAgICAgcGt0bnVtKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhICE9IFhZRkRf QikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BrdGwgPSBkOworICAgICAgICAgICAgICAg ICAgICAgICAgZnRzY3JlZW4oU0NSX1BULCdEJywoQ0tfT0ZGX1Qpc3BhY2tldHMsTlVMTCk7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgQ0tfU1NMCisg ICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICBpZiAoZCA8PSAw KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCS8qIFZNUyAqLworCisJ ZGVidWcoRjExMSwiZG9mdHBzZW5kMiBYWCB6eGluIixja2x0b2EobiksZmZjKTsKKyAgICAgICAg aWYgKG4gPCAwKQorICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9jYWw6ICVzOiAlc1xuIiwg ZnRwc25kLmxvY2FsLCBja19lcnJzdHIoKSk7CisgICAgICAgIGlmIChkIDwgMCB8fCAoZCA9IHNl Y3VyZV9mbHVzaChkb3V0KSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoZCA9PSAtMSAmJiBlcnJu byAmJiBlcnJubyAhPSBFUElQRSkKKyAgICAgICAgICAgICAgcGVycm9yKCJuZXRvdXQiKTsKKyAg ICAgICAgICAgIGZ0cHNuZC5ieXRlcyA9IC0xOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor CisgICAgICBjYXNlIEZUVF9BU0M6ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBtb2RlICov CisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgaWYgKGZ0cHNuZC54bGF0ZSkgeyAgICAgICAgICAg ICAvKiBXaXRoIHRyYW5zbGF0aW9uICovCisgICAgICAgICAgICBpbml0eGxhdGUoZnRwc25kLmlu Y3MsZnRwc25kLm91dGNzKTsKKyAgICAgICAgICAgIHdoaWxlICghY2FuY2VsZmlsZSkgeworICAg ICAgICAgICAgICAgIGlmICgoYzAgPSB4Z25ieXRlKEZDX1VDUzIsZnRwc25kLmluY3MsTlVMTCkp IDwgMCkgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCh4ID0geHBuYnl0ZShjMCxUQ19VQ1My LGZ0cHNuZC5vdXRjcyx4eG91dCkpIDwgMCkgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgICAgICAgICAgLyogVGV4dCBtb2Rl LCBubyB0cmFuc2xhdGlvbiAqLworICAgICAgICAgICAgd2hpbGUgKCgoYyA9IHptaW5jaGFyKCkp ID4gLTEpICYmICFjYW5jZWxmaWxlKSB7CisgICAgICAgICAgICAgICAgZmZjKys7CisJCWlmICh4 eG91dChjKSA8IDApCisJCSAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkID0g MDsKKyNpZm5kZWYgTk9DU0VUUworICAgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAg ICAgICBpZiAoZG91dCA9PSAtMSB8fCAoZCA9IHNlY3VyZV9mbHVzaChkb3V0KSkgPCAwKSB7Cisg ICAgICAgICAgICBpZiAoZCA9PSAtMSAmJiBlcnJubyAmJiBlcnJubyAhPSBFUElQRSkKKyAgICAg ICAgICAgICAgcGVycm9yKCJuZXRvdXQiKTsKKyAgICAgICAgICAgIGZ0cHNuZC5ieXRlcyA9IC0x OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB0ZmMgKz0gZmZjOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUb3RhbCBmaWxlIGNoYXJzICovCisjaWZkZWYgR0ZUSU1F UgorICAgIGZwZnNlY3MgPSBnZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIHpj bG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGlucHV0IGZpbGUgKi8K KyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChzbmRmaWx0ZXIpICAgICAgICAgICAgICAgICAgICAg IC8qIFVuZG8gdGhpcyAoaXQncyBwZXIgZmlsZSkgKi8KKyAgICAgIHBpcGVzZW5kID0gMDsKKyNl bmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmIChzc2xfZnRw X2RhdGFfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgIFNTTF9zaHV0ZG93bihzc2xfZnRwX2Rh dGFfY29uKTsKKyAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfZGF0YV9jb24pOworICAgICAg ICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKKyAgICAgICAgICAgIHNzbF9mdHBf ZGF0YV9jb24gPSBOVUxMOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRl ZiBUQ1BJUExJQgorICAgIHNvY2tldF9jbG9zZShkb3V0KTsgICAgICAgICAgICAgICAgIC8qIENs b3NlIGRhdGEgY29ubmVjdGlvbiAqLworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0Vf U0hVVERPV04KKyAgICBzaHV0ZG93bihkb3V0LCAxKzEpOworI2VuZGlmIC8qIFVTRV9TSFVURE9X TiAqLworICAgIGNsb3NlKGRvdXQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgZnRwc25k LnJlcGx5ID0gZ2V0cmVwbHkoMCxmdHBzbmQuaW5jcyxmdHBzbmQub3V0Y3MsZnRwX3ZibSwwKTsK KyAgICBzaWduYWwoU0lHSU5ULCBmdHBzbmQub2xkaW50cik7ICAgICAgICAgICAgLyogUHV0IGJh Y2sgaW50ZXJydXB0cyAqLworI2lmZGVmIFNJR1BJUEUKKyAgICBpZiAoZnRwc25kLm9sZGludHAp CisgICAgICBzaWduYWwoU0lHUElQRSwgZnRwc25kLm9sZGludHApOworI2VuZGlmIC8qIFNJR1BJ UEUgKi8KKyAgICBpZiAoZnRwc25kLnJlcGx5ID09IFJFUExZX1RSQU5TSUVOVCB8fCBmdHBzbmQu cmVwbHkgPT0gUkVQTFlfRVJST1IpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiZG9mdHBzZW5kMiBm dHBzbmQucmVwbHkiLCIiLGZ0cHNuZC5yZXBseSk7CisgICAgICAgIGZ0cHNuZHJldCA9IC0xOwor I2lmZGVmIE5UU0lHCisgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8q IE5UU0lHICovCisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKGNhbmNlbGZpbGUpIHsK KyAgICAgICAgZGVidWcoRjEwMSwiZG9mdHBzZW5kMiBjYW5jZWxlZCIsIiIsZnRwc25kLmJ5dGVz KTsKKyAgICAgICAgZnRwc25kcmV0ID0gLTE7CisjaWZkZWYgTlRTSUcKKyAgICAgICAgY2tUaHJl YWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICAgICAgcmV0dXJuOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJkb2Z0cHNlbmQyIG9rIiwiIixmdHBzbmQuYnl0ZXMpOwor ICAgIGZ0cHNuZHJldCA9IDA7CisjaWZkZWYgTlRTSUcKKyAgICAgY2tUaHJlYWRFbmQodGhyZWFk aW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KK30KKworc3RhdGljIGludAorc2VuZHJlcXVlc3Qo Y21kLCBsb2NhbCwgcmVtb3RlLCB4bGF0ZSwgaW5jcywgb3V0Y3MsIHJlc3RhcnQpCisgICAgY2hh ciAqY21kLCAqbG9jYWwsICpyZW1vdGU7IGludCB4bGF0ZSwgaW5jcywgb3V0Y3MsIHJlc3RhcnQ7 Cit7CisgICAgaWYgKCFyZW1vdGUpIHJlbW90ZSA9ICIiOyAgICAgICAgICAgLyogQ2hlY2sgYXJn cyAqLworICAgIGlmICghKnJlbW90ZSkgcmVtb3RlID0gbG9jYWw7CisgICAgaWYgKCFsb2NhbCkg bG9jYWwgPSAiIjsKKyAgICBpZiAoISpsb2NhbCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoIWNtZCkg Y21kID0gIiI7CisgICAgaWYgKCEqY21kKSBjbWQgPSAiU1RPUiI7CisKKyAgICBkZWJ1ZyhGMTEx LCJmdHAgc2VuZHJlcXVlc3QgcmVzdGFydCIsbG9jYWwscmVzdGFydCk7CisKKyAgICBub3V0ID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0IG91dHB1dCBidWZmZXIgY291bnQg Ki8KKyAgICBmdHBzbmQuYnl0ZXMgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGlucHV0 IGJ5dGUgY291bnQgKi8KKyAgICBkb3V0ID0gLTE7CisKKyNpZmRlZiBGVFBfUFJPWFkKKyAgICBp ZiAocHJveHkpIHsKKyAgICAgICAgcHJveHRyYW5zKGNtZCwgbG9jYWwsIHJlbW90ZSwgIXN0cmNt cChjbWQsIlNUT1UiKSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogRlRQ X1BST1hZICovCisKKyAgICBjaGFuZ2V0eXBlKGZ0cF90eXAsMCk7ICAgICAgICAgICAgICAvKiBD aGFuZ2UgdHlwZSBmb3IgdGhpcyBmaWxlICovCisKKyAgICBmdHBzbmQub2xkaW50ciA9IE5VTEw7 CQkvKiBTZXQgdXAgaW50ZXJydXB0IGhhbmRsZXIgKi8KKyAgICBmdHBzbmQub2xkaW50cCA9IE5V TEw7CisgICAgZnRwc25kLnJlc3RhcnQgPSByZXN0YXJ0OworICAgIGZ0cHNuZC54bGF0ZSA9IHhs YXRlOworICAgIGZ0cHNuZC5sbW9kZSA9ICJ3YiI7CisKKyNpZmRlZiBQSVBFU0VORCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBVc2UgS2VybWl0IEFQSSBmb3IgZmlsZSBpL28uLi4gKi8KKyAg ICBpZiAoc25kZmlsdGVyKSB7CisgICAgICAgIGNoYXIgKiBwID0gTlVMTCwgKiBxOworI2lmbmRl ZiBOT1NQTAorICAgICAgICBpbnQgbiA9IENLTUFYUEFUSDsKKyAgICAgICAgaWYgKGNtZF9xdW90 aW5nICYmIChwID0gKGNoYXIgKikgbWFsbG9jKG4gKyAxKSkpIHsKKyAgICAgICAgICAgIHEgPSBw OworICAgICAgICAgICAgZGVidWcoRjExMCwic2VuZHJlcXVlc3QgcGlwZXNlbmQgZmlsdGVyIixz bmRmaWx0ZXIsMCk7CisgICAgICAgICAgICB6enN0cmluZyhzbmRmaWx0ZXIsJnAsJm4pOworICAg ICAgICAgICAgZGVidWcoRjExMSwic2VuZHJlcXVlc3QgcGlwZW5hbWUiLHEsbik7CisgICAgICAg ICAgICBpZiAobiA8PSAwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIHNlbmQg ZmlsdGVyICsgZmlsZW5hbWUgdG9vIGxvbmcsICVkIG1heC5cbiIsCisgICAgICAgICAgICAgICAg ICAgICAgIENLTUFYUEFUSAorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgIGZyZWUocSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGNrc3RybmNweShmaWxuYW0scSxDS01BWFBBVEgrMSk7CisgICAgICAgICAg ICBmcmVlKHEpOworICAgICAgICAgICAgbG9jYWwgPSBmaWxuYW07CisgICAgICAgIH0KKyNlbmRp ZiAvKiBOT1NQTCAqLworICAgIH0KKworICAgIGlmIChzbmRmaWx0ZXIpICAgICAgICAgICAgICAg ICAgICAgIC8qIElmIHNlbmRpbmcgdGhydSBhIGZpbHRlciAqLworICAgICAgcGlwZXNlbmQgPSAx OyAgICAgICAgICAgICAgICAgICAgIC8qIHNldCB0aGlzIGZvciBvcGVuIGFuZCBpL28gKi8KKyNl bmRpZiAvKiBQSVBFU0VORCAqLworICAgIAorI2lmZGVmIFZNUworICAgIGRlYnVnKEYxMDEsIlhY WCBiZWZvcmUgb3BlbmkgYmluYXJ5IiwiIixiaW5hcnkpOworICAgIGRlYnVnKEYxMDEsIlhYWCBi ZWZvcmUgb3BlbmkgZnRwX3R5cCIsIiIsZnRwX3R5cCk7CisjZW5kaWYJLyogVk1TICovCisKKyAg ICBpZiAob3BlbmkobG9jYWwpID09IDApCQkvKiBUcnkgdG8gb3BlbiB0aGUgaW5wdXQgZmlsZSAq LworICAgICAgcmV0dXJuKC0xKTsKKworI2lmZGVmIFZNUworICAgIGRlYnVnKEYxMDEsIlhYWCBh ZnRlciBvcGVuaSBiaW5hcnkiLCIiLGJpbmFyeSk7CisgICAgZGVidWcoRjEwMSwiWFhYIGFmdGVy IG9wZW5pIGZ0cF90eXAiLCIiLGZ0cF90eXApOworICAgIGlmICghZm9yY2V0eXBlKSB7CisJaWYg KGJpbmFyeSAhPSBmdHBfdHlwKSB7CS8qIFZNUyB6b3BlbmkoKSBzZXRzIGJpbmFyeSAqLworCSAg ICBkZWJ1ZyhGMTAxLCJYWFggY2hhbmdpbmcgdHlwZSIsIiIsYmluYXJ5KTsKKwkgICAgZG9mdHB0 eXAoYmluYXJ5KTsKKwkgICAgZGVidWcoRjEwMSwiWFhYIGFmdGVyIGRvZnRwdHlwIiwiIixmdHBf dHlwKTsKKworCSAgICAvKiAqKioqICovCisJICAgIGlmIChkaXNwbGEgJiYgZmRpc3BsYSkgewkv KiBVcGRhdGUgZmlsZSB0eXBlIGRpc3BsYXkgKi8KKwkJZnRzY3JlZW4oU0NSX0ZOLCdGJywoQ0tf T0ZGX1QpMCxsb2NhbCk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmCS8qIFZNUyAqLworICAg IGZ0cHNuZHJldCA9IDA7CisgICAgZnRwc25kLmluY3MgPSBpbmNzOworICAgIGZ0cHNuZC5vdXRj cyA9IG91dGNzOworICAgIGZ0cHNuZC5jbWQgPSBjbWQ7CisgICAgZnRwc25kLmxvY2FsID0gbG9j YWw7CisgICAgZnRwc25kLnJlbW90ZSA9IHJlbW90ZTsKKyAgICBmdHBzbmQub2xkaW50ciA9IHNp Z25hbChTSUdJTlQsIGNhbmNlbHNlbmQpOworICAgIGhhdmVzaWdpbnQgPSAwOworCisgICAgaWYg KGNjX2V4ZWN1dGUoY2tqYWRkcihzZW5kY2FuY2VsKSwgZG9mdHBzZW5kLCBmYWlsZnRwc2VuZCkg PCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBpZiAoZnRwc25kcmV0IDwgMCkKKyAgICAgIHJl dHVybigtMSk7CisgICAgaWYgKGNjX2V4ZWN1dGUoY2tqYWRkcihzZW5kY2FuY2VsKSwgZG9mdHBz ZW5kMiwgZmFpbGZ0cHNlbmQyKSA8IDApCisgICAgICByZXR1cm4oLTEpOworCisgICAgcmV0dXJu KGZ0cHNuZHJldCk7Cit9CisKK3N0YXRpYyBzaWd0eXBlCitjYW5jZWxyZWN2KHNpZykgaW50IHNp ZzsgeworICAgIGhhdmVzaWdpbnQrKzsKKyAgICBjYW5jZWxmaWxlID0gMDsKKyAgICBjYW5jZWxn cm91cCsrOworICAgIHNlY3VyZV9nZXRjKDAsMSk7CQkJLyogSW5pdGlhbGl6ZSBuZXQgaW5wdXQg YnVmZmVycyAqLworICAgIHByaW50ZigiIENhbmNlbGluZy4uLlxuIik7CisgICAgZGVidWcoRjEw MCwiZnRwIGNhbmNlbHJlY3YgY2F1Z2h0IFNJR0lOVCIsIiIsMCk7CisgICAgZmZsdXNoKHN0ZG91 dCk7CisgICAgaWYgKGZwX25tbCkgeworICAgICAgICBpZiAoZnBfbm1sICE9IHN0ZG91dCkKKyAg ICAgICAgICBmY2xvc2UoZnBfbm1sKTsKKyAgICAgICAgZnBfbm1sID0gTlVMTDsKKyAgICB9Cisj aWZuZGVmIE9TMgorICAgIGxvbmdqbXAocmVjdmNhbmNlbCwgMSk7CisjZWxzZQorICAgIFBvc3RD dHJsQ1NlbSgpOworI2VuZGlmIC8qIE9TMiAqLworfQorCisvKiBBcmd1bWVudGxlc3MgZnJvbnQt ZW5kIGZvciBzZWN1cmVfZ2V0YygpICovCisKK3N0YXRpYyBpbnQKK25ldGdldGMoKSB7CisgICAg cmV0dXJuKHNlY3VyZV9nZXRjKGdsb2JhbGRpbiwwKSk7Cit9CisKKy8qIFJldHVybnMgLTEgb24g ZmFpbHVyZSwgMCBvbiBzdWNjZXNzLCAxIGlmIGZpbGUgc2tpcHBlZCAqLworCisvKgorICBTZXRz IGZ0cGNvZGUgPCAwIG9uIGZhaWx1cmUgaWYgZmFpbHVyZSByZWFzb24gaXMgbm90IHNlcnZlciBy ZXBseSBjb2RlOgorICAgIC0xOiBpbnRlcnJ1cHRlZCBieSB1c2VyLgorICAgIC0yOiBlcnJvciBv cGVuaW5nIG9yIHdyaXRpbmcgb3V0cHV0IGZpbGUgKHJlYXNvbiBpbiBlcnJubykuCisgICAgLTM6 IGZhaWx1cmUgdG8gbWFrZSBkYXRhIGNvbm5lY3Rpb24uCisgICAgLTQ6IG5ldHdvcmsgcmVhZCBl cnJvciAocmVhc29uIGluIGVycm5vKS4KKyovCisKK3N0cnVjdCB4eF9mdHByZWN2IHsKKyAgICBp bnQgcmVwbHk7CisgICAgaW50IGZjczsKKyAgICBpbnQgcmNzOworICAgIGludCByZWNvdmVyOwor ICAgIGludCB4bGF0ZTsKKyAgICBpbnQgZGluOworICAgIGludCBpc19yZXRyOworICAgIHNpZ190 IG9sZGludHIsIG9sZGludHA7CisgICAgY2hhciAqIGNtZDsKKyAgICBjaGFyICogbG9jYWw7Cisg ICAgY2hhciAqIHJlbW90ZTsKKyAgICBjaGFyICogbG1vZGU7CisgICAgY2hhciAqIHBpcGVuYW1l OworICAgIGludCAgICB0Y3JmbGFnOworICAgIENLX09GRl9UIGxvY2Fsc2l6ZTsKK307CitzdGF0 aWMgc3RydWN0IHh4X2Z0cHJlY3YgZnRwcmVjdjsKKworc3RhdGljIGludCBmdHByZWN2cmV0ID0g MDsKKworc3RhdGljIFZPSUQKKyNpZmRlZiBDS19BTlNJQworZmFpbGZ0cHJlY3YoVk9JRCAqIHRo cmVhZGluZm8pCisjZWxzZQorZmFpbGZ0cHJlY3YodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGlu Zm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBOVFNJRworICAgIGlmICh0aHJl YWRpbmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICov CisgICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAgICAgICBkZWJ1 ZyhGMTAwLCAiZG9jbWRmaWxlIGNhbGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsK KyAgICB9IGVsc2UgZGVidWcoRjEwMCwgImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIs ICIiLCAwKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBJ S1NECisjaWZkZWYgTlQKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBzZXRudGNyZWRzKCk7Cisj ZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8K KworICAgIHdoaWxlIChjcGVuZCkgeworICAgICAgICBmdHByZWN2LnJlcGx5ID0gZ2V0cmVwbHko MCxmdHByZWN2LmZjcyxmdHByZWN2LnJjcyxmdHBfdmJtLDApOworICAgIH0KKyAgICBpZiAoZGF0 YSA+PSAwKSB7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZl X2ZsYWcpIHsKKyAgICAgICAgICAgIFNTTF9zaHV0ZG93bihzc2xfZnRwX2RhdGFfY29uKTsKKyAg ICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfZGF0YV9jb24pOworICAgICAgICAgICAgc3NsX2Z0 cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKKyAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9jb24gPSBO VUxMOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgVENQSVBMSUIKKyAg ICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBV U0VfU0hVVERPV04KKyAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0Vf U0hVVERPV04gKi8KKyAgICAgICAgY2xvc2UoZGF0YSk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8K KyAgICAgICAgZGF0YSA9IC0xOworICAgICAgICBnbG9iYWxkaW4gPSAtMTsKKyAgICB9CisgICAg aWYgKGZ0cHJlY3Yub2xkaW50cikKKyAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHJlY3Yub2xkaW50 cik7CisgICAgZnRwY29kZSA9IC0xOworICAgIGZ0cHJlY3ZyZXQgPSAtMTsKKworI2lmbmRlZiBP UzIKKyAgICAvKiBURVNUIE1FIElOIEs5NSAqLworICAgIGlmIChoYXZlc2lnaW50KSB7CisJaGF2 ZXNpZ2ludCA9IDA7CisJZGVidWcoRjEwMCwiZnRwIGZhaWxmdHByZWN2IGNoYWluIHRvIHRyYXAo KS4uLiIsIiIsMCk7CisJaWYgKGZ0cHJlY3Yub2xkaW50ciAhPSBTSUdfSUdOKQorCSAgKCpmdHBy ZWN2Lm9sZGludHIpKFNJR0lOVCk7CisJLyogTk9UUkVBQ0hFRCAoSSBob3BlISkgKi8KKwlkZWJ1 ZyhGMTAwLCJmdHAgZmFpbGZ0cHJlY3YgcmV0dXJuIGZyb20gdHJhcCgpLi4uIiwiIiwwKTsKKyAg ICB9CisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuOworfQorCitzdGF0aWMgVk9JRAorI2lm ZGVmIENLX0FOU0lDCitkb2Z0cHJlY3YoVk9JRCAqIHRocmVhZGluZm8pCisjZWxzZQorZG9mdHBy ZWN2KHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisjaWZkZWYgTlRTSUcKKyAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAg ICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgICBUbHNTZXRWYWx1ZShUbHNJ bmRleCx0aHJlYWRpbmZvKTsKKyAgICAgICAgZGVidWcoRjEwMCwgImRvY21kZmlsZSBjYWxsZWQg d2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7CisgICAgfSBlbHNlIGRlYnVnKEYxMDAsICJk b2NtZGZpbGUgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7CisjZW5kaWYgLyogTlRTSUcg Ki8KKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIElLU0QKKyNpZmRlZiBOVAorICAgIGlmIChpbnNl cnZlcikKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIElL U0QgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisjaWZuZGVmIENPTU1FTlQKKyAgICBpZiAo IW91dDJzY3JlZW4gJiYgIWZ0cHJlY3YucGlwZW5hbWUpIHsKKwlpbnQgeDsKKwljaGFyICogbG9j YWw7CisJbG9jYWwgPSBmdHByZWN2LmxvY2FsOworCXggPSB6Y2hrbyhsb2NhbCk7CisgICAgICAg IGlmICh4IDwgMCkgeworICAgICAgICAgICAgaWYgKCghZHB5YWN0aXZlIHx8IGZ0cF9kZWIpKQor ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKwkJICAgICAgIlRlbXBvcmFyeSBmaWxlICVz OiAlc1xuIiwgZnRwcmVjdi5sb2NhbCwgY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgc2lnbmFs KFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsKKyAgICAgICAgICAgIGZ0cGNvZGUgPSAtMjsKKyAg ICAgICAgICAgIGZ0cHJlY3ZyZXQgPSAtMTsKKyNpZmRlZiBOVFNJRworICAgICAgICAgICAgY2tU aHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgY2hhbmdl dHlwZSgoIWZ0cHJlY3YuaXNfcmV0cikgPyBGVFRfQVNDIDogZnRwX3R5cCwgMCk7CisgICAgaWYg KGluaXRjb25uKCkpIHsgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZGF0YSBj b25uZWN0aW9uICovCisgICAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHJlY3Yub2xkaW50cik7Cisg ICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgZnRwcmVjdnJldCA9IC0zOworI2lmZGVmIE5U U0lHCisgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICov CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2VjdXJlX2dldGMoMCwxKTsJCQkvKiBJbml0 aWFsaXplIG5ldCBpbnB1dCBidWZmZXJzICovCisgICAgZnRwcmVjdnJldCA9IDA7CisKKyNpZmRl ZiBOVFNJRworICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICov Cit9CisKK3N0YXRpYyBWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWxmdHByZWN2MihWT0lEICog dGhyZWFkaW5mbykKKyNlbHNlCitmYWlsZnRwcmVjdjIodGhyZWFkaW5mbykgVk9JRCAqIHRocmVh ZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBOVFNJRworICAgIGlmICh0 aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4u ICovCisgICAgICAgIFRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAgICAgICBk ZWJ1ZyhGMTAwLCAiZG9jbWRmaWxlIGNhbGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAw KTsKKyAgICB9IGVsc2UgZGVidWcoRjEwMCwgImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVM TCIsICIiLCAwKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYg SUtTRAorI2lmZGVmIE5UCisgICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOwor I2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8qIENLX0xPR0lOICov CisKKyAgICAvKiBDYW5jZWwgdXNpbmcgUkZDOTU5IHJlY29tbWVuZGVkIElQLFNZTkMgc2VxdWVu Y2UgICovCisKKyAgICBkZWJ1ZyhGMTAwLCJmdHAgcmVjdnJlcXVlc3QgQ0FOQ0VMIiwiIiwwKTsK KyNpZmRlZiBHRlRJTUVSCisgICAgZnBmc2VjcyA9IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJ TUVSICovCisjaWZkZWYgU0lHUElQRQorICAgIGlmIChmdHByZWN2Lm9sZGludHApCisgICAgICBz aWduYWwoU0lHUElQRSwgZnRwcmVjdi5vbGRpbnRyKTsKKyNlbmRpZiAvKiBTSUdQSVBFICovCisg ICAgc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisgICAgaWYgKCFjcGVuZCkgeworICAgICAgICBm dHBjb2RlID0gLTE7CisgICAgICAgIHNpZ25hbChTSUdJTlQsIGZ0cHJlY3Yub2xkaW50cik7Cisg ICAgICAgIGZ0cHJlY3ZyZXQgPSAtMTsKKyNpZmRlZiBOVFNJRworICAgICAgICBja1RocmVhZEVu ZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICByZXR1cm47CisgICAg fQorICAgIGNhbmNlbF9yZW1vdGUoZnRwcmVjdi5kaW4pOworCisjaWZkZWYgRlRQX1RJTUVPVVQK KyAgICBpZiAoZnRwX3RpbWVkX291dCAmJiBvdXQyc2NyZWVuICYmICFxdWlldCkKKyAgICAgIHBy aW50ZigiXG4/VGltZWQgb3V0LlxuIik7CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKworICAg IGlmIChmdHBjb2RlID4gLTEpCisgICAgICBmdHBjb2RlID0gLTE7CisgICAgaWYgKGRhdGEgPj0g MCkgeworI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFn KSB7CisgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Z0cF9kYXRhX2Nvbik7CisgICAgICAg ICAgICBTU0xfZnJlZShzc2xfZnRwX2RhdGFfY29uKTsKKyAgICAgICAgICAgIHNzbF9mdHBfZGF0 YV9hY3RpdmVfZmxhZyA9IDA7CisgICAgICAgICAgICBzc2xfZnRwX2RhdGFfY29uID0gTlVMTDsK KyAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAg IHNvY2tldF9jbG9zZShkYXRhKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisjaWZkZWYgVVNFX1NI VVRET1dOCisgICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7CisjZW5kaWYgLyogVVNFX1NIVVRE T1dOICovCisgICAgICAgIGNsb3NlKGRhdGEpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAg ICAgIGRhdGEgPSAtMTsKKyAgICAgICAgZ2xvYmFsZGluID0gLTE7CisgICAgfQorICAgIGlmICgh b3V0MnNjcmVlbikgeworCWludCB4ID0gMDsKKwlkZWJ1ZyhGMTExLCJmdHAgZmFpbHJlY3YyIHpj bG9zZSIsZnRwcmVjdi5sb2NhbCxrZWVwKTsKKwl6Y2xvc2UoWk9GSUxFKTsKKwlzd2l0Y2ggKGtl ZXApIHsJCQkvKiB3aGljaCBpcy4uLiAqLworCSAgY2FzZSBTRVRfQVVUTzoJCS8qIEFVVE8gKi8K KwkgICAgaWYgKGN1cnR5cGUgPT0gRlRUX0FTQykJLyogRGVsZXRlIGZpbGUgaWYgVFlQRSBBLiAq LworCSAgICAgIHggPSAxOworCSAgICBicmVhazsKKwkgIGNhc2UgU0VUX09GRjoJCQkvKiBESVND QVJEICovCisJICAgIHggPSAxOwkJCS8qIERlbGV0ZSBmaWxlLCBwZXJpb2QuICovCisJICAgIGJy ZWFrOworCSAgZGVmYXVsdDoJCQkvKiBLRUVQICovCisJICAgIGJyZWFrOworCX0KKwlpZiAoeCkg eworCSAgICB4ID0gemRlbGV0KGZ0cHJlY3YubG9jYWwpOworCSAgICBkZWJ1ZyhGMTExLCJmdHAg ZmFpbHJlY3YyIGRlbGV0ZSBpbmNvbXBsZXRlIixmdHByZWN2LmxvY2FsLHgpOworCX0KKyAgICB9 CisgICAgaWYgKGZ0cHJlY3YuZGluKSB7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgc29ja2V0 X2Nsb3NlKGZ0cHJlY3YuZGluKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisjaWZkZWYgVVNFX1NI VVRET1dOCisgICAgICAgIHNodXRkb3duKGZ0cHJlY3YuZGluLCAxKzEpOworI2VuZGlmIC8qIFVT RV9TSFVURE9XTiAqLworICAgICAgICBjbG9zZShmdHByZWN2LmRpbik7CisjZW5kaWYgLyogVENQ SVBMSUIgKi8KKyAgICB9CisgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRpbnRyKTsKKyAg ICBmdHByZWN2cmV0ID0gLTE7CisKKyAgICBpZiAoaGF2ZXNpZ2ludCkgeworCWhhdmVzaWdpbnQg PSAwOworCWRlYnVnKEYxMDAsIkZUUCBmYWlsZnRwcmVjdjIgY2hhaW4gdG8gdHJhcCgpLi4uIiwi IiwwKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgZGVidWcoRjEwMCwiRlRQIGZhaWxmdHByZWN2MiBQ b3N0Q3RybENTZW0oKS4uLiIsIiIsMCk7CisgICAgICAgIFBvc3RDdHJsQ1NlbSgpOworI2Vsc2Ug LyogT1MyICovCisJaWYgKGZ0cHJlY3Yub2xkaW50ciAhPSBTSUdfSUdOKQorCSAgKCpmdHByZWN2 Lm9sZGludHIpKFNJR0lOVCk7CisJLyogTk9UUkVBQ0hFRCAoSSBob3BlISkgKi8KKwlkZWJ1ZyhG MTAwLCJmdHAgZmFpbGZ0cHJlY3YyIHJldHVybiBmcm9tIHRyYXAoKS4uLiIsIiIsMCk7CisjZW5k aWYgLyogT1MyICovCisgICAgfQorfQorCitzdGF0aWMgVk9JRAorI2lmZGVmIENLX0FOU0lDCitk b2Z0cHJlY3YyKFZPSUQgKiB0aHJlYWRpbmZvKQorI2Vsc2UKK2RvZnRwcmVjdjIodGhyZWFkaW5m bykgVk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZWdp c3RlciBpbnQgYywgZDsKKyAgICBDS19PRkZfVCBieXRlcyA9IChDS19PRkZfVCkwOworICAgIGlu dCBiYXJlX2xmcyA9IDA7CisgICAgaW50IGJsa3NpemUgPSAwOworICAgIFVMT05HIHN0YXJ0ID0g MEwsIHN0b3A7CisgICAgY2hhciAqIHA7CisgICAgc3RhdGljIGNoYXIgKiByY3ZidWYgPSBOVUxM OworICAgIHN0YXRpYyBpbnQgcmN2YnVmc2l6ID0gMDsKKyNpZmRlZiBDS19VUkwKKyAgICBjaGFy IG5ld25hbWVbQ0tNQVhQQVRIKzFdOwkJLyogRm9yIGZpbGUgZGlhbG9nICovCisjZW5kaWYgLyog Q0tfVVJMICovCisgICAgZXh0ZXJuIGludCBhZGxfYXNrOworCisjaWZkZWYgRlRQX1RJTUVPVVQK KyAgICBmdHBfdGltZWRfb3V0ID0gMDsKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLworCisgICAg ZnRwcmVjdi5kaW4gPSAtMTsKKyNpZmRlZiBOVFNJRworICAgIGlmICh0aHJlYWRpbmZvKSB7ICAg ICAgICAgICAgICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCisgICAgICAgIFRs c1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9j bWRmaWxlIGNhbGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCIiLCAwKTsKKyAgICB9IGVsc2Ug ZGVidWcoRjEwMCwgImRvY21kZmlsZSAtIHRocmVhZGluZm8gaXMgTlVMTCIsICIiLCAwKTsKKyNl bmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgSUtTRAorI2lmZGVmIE5U CisgICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIE5UICov CisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAgICBpZiAoZnRw cmVjdi5yZWNvdmVyKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYXRlIHJlY292ZXJ5 ICovCisgICAgICAgIHggPSBmdHBjbWQoIlJFU1QiLGNrZnN0b2EoZnRwcmVjdi5sb2NhbHNpemUp LC0xLC0xLGZ0cF92Ym0pOworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcmVwbHkiLCJSRVNUIix4 KTsKKyAgICAgICAgaWYgKHggPT0gUkVQTFlfQ09OVElOVUUpIHsKKyAgICAgICAgICAgIGZ0cHJl Y3YubG1vZGUgPSAiYWIiOworICAgICAgICAgICAgcnNfbGVuID0gZnRwcmVjdi5sb2NhbHNpemU7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmdHByZWN2LnJlY292ZXIgPSAwOworICAg ICAgICB9CisgICAgfQorICAgIC8qIElNUE9SVEFOVDogTm8gRlRQIGNvbW1hbmRzIGNhbiBjb21l IGJldHdlZW4gUkVTVCBhbmQgUkVUUiEgKi8KKworICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVx dWVzdCByZWNvdmVyIEUiLGZ0cHJlY3YucmVtb3RlLGZ0cHJlY3YucmVjb3Zlcik7CisKKyAgICAv KiBTZW5kIHRoZSBjb21tYW5kIGFuZCBnZXQgcmVwbHkgKi8KKyAgICBkZWJ1ZyhGMTEwLCJmdHAg cmVjdnJlcXVlc3QgY21kIixmdHByZWN2LmNtZCwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgcmVj dnJlcXVlc3QgcmVtb3RlIixmdHByZWN2LnJlbW90ZSwwKTsKKworICAgIGlmIChmdHBjbWQoZnRw cmVjdi5jbWQsZnRwcmVjdi5yZW1vdGUsZnRwcmVjdi5mY3MsZnRwcmVjdi5yY3MsZnRwX3ZibSkK KwkhPSBSRVBMWV9QUkVMSU0pIHsKKyAgICAgICAgc2lnbmFsKFNJR0lOVCwgZnRwcmVjdi5vbGRp bnRyKTsgLyogQmFkIHJlcGx5LCBmYWlsLiAqLworICAgICAgICBmdHByZWN2cmV0ID0gLTE7CQkv KiBmdHBjb2RlIGlzIHNldCBieSBmdHBjbWQoKSAqLworI2lmZGVmIE5UU0lHCisgICAgICAgIGNr VGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAgIHJldHVy bjsKKyAgICB9CisgICAgZnRwcmVjdi5kaW4gPSBkYXRhY29ubigiciIpOyAgICAgICAgLyogR29v ZCByZXBseSwgb3BlbiBkYXRhIGNvbm5lY3Rpb24gKi8KKyAgICBnbG9iYWxkaW4gPSBmdHByZWN2 LmRpbjsgICAgICAgICAgICAvKiBHbG9iYWwgY29weSBvZiBmaWxlIGRlc2NyaXB0b3IgKi8KKyAg ICBpZiAoZnRwcmVjdi5kaW4gPT0gLTEpIHsgICAgICAgICAgICAvKiBDaGVjayBmb3IgZmFpbHVy ZSAqLworICAgICAgICBmdHBjb2RlID0gLTM7ICAgICAgICAgICAgICAgICAgIC8qIENvZGUgZm9y IG5vIGRhdGEgY29ubmVjdGlvbiAqLworICAgICAgICBmdHByZWN2cmV0ID0gLTE7CisjaWZkZWYg TlRTSUcKKyAgICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcg Ki8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZmRlZiBDS19VUkwKKyAgICAvKiBJbiBLOTUg R1VJIHB1dCB1cCBhIGZpbGUgYm94ICovCisgICAgaWYgKGhhdmV1cmwgJiYgZ191cmwucHRoICYm IGFkbF9hc2sJKSB7IC8qIERvd25sb2FkaW5nIGZyb20gYSBVUkwgKi8KKwlpbnQgeDsKKwljaGFy ICogcHJlZmFjZSA9CisiXHJcbkluY29taW5nIGZpbGUgZnJvbSBGVFAgc2VydmVyLi4uXHJcblwK K1BsZWFzZSBjb25maXJtIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24gb3Igc3VwcGx5IGFuIGFs dGVybmF0aXZlOiI7CisKKwl4ID0gdXFfZmlsZShwcmVmYWNlLAkJLyogSzk1IEdVSTogUHV0IHVw IGZpbGUgYm94LiAqLworCQkgICAgTlVMTCwKKwkJICAgIDQsCisJCSAgICBOVUxMLAorCQkgICAg ZnRwcmVjdi5sb2NhbCA/IGZ0cHJlY3YubG9jYWwgOiBmdHByZWN2LnJlbW90ZSwKKwkJICAgIG5l d25hbWUsCisJCSAgICBDS01BWFBBVEgrMQorCQkgICAgKTsKKwlpZiAoeCA+IDApIHsKKwkgICAg ZnRwcmVjdi5sb2NhbCA9IG5ld25hbWU7CS8qIFN1YnN0aXR1dGUgdXNlcidzIGZpbGUgbmFtZSAq LworCSAgICBpZiAoeCA9PSAyKQkJCS8qIEFuZCBhcHBlbmQgaWYgdXNlciBzYWlkIHRvICovCisJ ICAgICAgZnRwcmVjdi5sbW9kZSA9ICJhYiI7CisJfQorICAgIH0KKyNlbmRpZiAvKiBDS19VUkwg Ki8KKyAgICB4ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgZmls ZSBvcGVuIE9LPyAqLworICAgIGlmIChmdHByZWN2LnBpcGVuYW1lKSB7CQkvKiBDb21tYW5kICov CisgICAgICAgIHggPSB6eGNtZChaT0ZJTEUsZnRwcmVjdi5waXBlbmFtZSk7CisgICAgICAgIGRl YnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCB6eGNtZCIsZnRwcmVjdi5waXBlbmFtZSx4KTsKKyAg ICB9IGVsc2UgaWYgKCFvdXQyc2NyZWVuKSB7ICAgICAgICAgICAvKiBGaWxlICovCisgICAgICAg IHN0cnVjdCBmaWxpbmZvIHh4OworICAgICAgICB4eC5icyA9IDA7IHh4LmNzID0gMDsgeHgucmwg PSAwOyB4eC5vcmcgPSAwOyB4eC5jYyA9IDA7CisgICAgICAgIHh4LnR5cCA9IDA7IHh4Lm9zX3Nw ZWNpZmljID0gTlVMOyB4eC5sYmxvcHRzID0gMDsKKwkvKiBBcHBlbmQgb3IgTmV3ICovCisgICAg ICAgIHh4LmRzcCA9ICFzdHJjbXAoZnRwcmVjdi5sbW9kZSwiYWIiKSA/IFhZRlpfQSA6IFhZRlpf TjsKKyAgICAgICAgeCA9IHpvcGVubyhaT0ZJTEUsZnRwcmVjdi5sb2NhbCxOVUxMLCZ4eCk7Cisg ICAgICAgIGRlYnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCB6b3Blbm8iLGZ0cHJlY3YubG9jYWws eCk7CisgICAgfQorICAgIGlmICh4IDwgMSkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZh aWx1cmUgdG8gb3BlbiBvdXRwdXQgZmlsZSAqLworICAgICAgICBpZiAoKCFkcHlhY3RpdmUgfHwg ZnRwX2RlYikpCisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb2NhbCgyKTogJXM6ICVzXG4i LCBmdHByZWN2LmxvY2FsLCBja19lcnJzdHIoKSk7CisgICAgICAgIGZ0cHJlY3ZyZXQgPSAtMTsK KyNpZmRlZiBOVFNJRworICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAv KiBOVFNJRyAqLworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGJsa3NpemUgPSBGVFBfQlVG U0laOyAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGlucHV0IGJ1ZmZlciAqLworCisgICAgZGVi dWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IGJsa3NpemUiLCIiLGJsa3NpemUpOworICAgIGRlYnVn KEYxMDEsImZ0cCByZWN2cmVxdWVzdCByY3ZidWZzaXoiLCIiLHJjdmJ1ZnNpeik7CisKKyAgICBp ZiAocmN2YnVmc2l6IDwgYmxrc2l6ZSkgeyAgICAgICAgICAvKiBpZiBuZWNlc3NhcnkgKi8KKyAg ICAgICAgaWYgKHJjdmJ1ZikgeworICAgICAgICAgICAgZnJlZShyY3ZidWYpOworICAgICAgICAg ICAgcmN2YnVmID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByY3ZidWYgPSAoY2hhciAqKW1h bGxvYygodW5zaWduZWQpYmxrc2l6ZSk7CisgICAgICAgIGlmICghcmN2YnVmKSB7CisJICAgIGRl YnVnKEYxMDAsImZ0cCBnZXQgcmN2YnVmIG1hbGxvYyBmYWlsZWQiLCIiLDApOworICAgICAgICAg ICAgZnRwY29kZSA9IC0yOworI2lmZGVmIEVOT01FTQorICAgICAgICAgICAgZXJybm8gPSBFTk9N RU07CisjZW5kaWYgLyogRU5PTUVNICovCisgICAgICAgICAgICBpZiAoKCFkcHlhY3RpdmUgfHwg ZnRwX2RlYikpCisgICAgICAgICAgICAgIHBlcnJvcigibWFsbG9jIik7CisgICAgICAgICAgICBy Y3ZidWZzaXogPSAwOworICAgICAgICAgICAgZnRwcmVjdnJldCA9IC0xOworI2lmZGVmIE5UU0lH CisgICAgICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAq LworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisJZGVidWcoRjEwMSwiZnRwIGdldCBy Y3ZidWYgbWFsbG9jIG9rIiwiIixibGtzaXplKTsKKyAgICAgICAgcmN2YnVmc2l6ID0gYmxrc2l6 ZTsKKyAgICB9CisgICAgZGVidWcoRjExMSwiZnRwIGdldCByY3ZidWZzaXoiLGZ0cHJlY3YubG9j YWwscmN2YnVmc2l6KTsKKworICAgIGZmYyA9IChDS19PRkZfVCkwOwkJCS8qIENoYXJhY3RlciBj b3VudGVyICovCisgICAgY3BzID0gb2xkY3BzID0gMEw7ICAgICAgICAgICAgICAgICAgLyogVGhy dXB1dCAqLworICAgIHN0YXJ0ID0gZ21zdGltZXIoKTsgICAgICAgICAgICAgICAgIC8qIFN0YXJ0 IHRpbWUgKG1zZWNzKSAqLworI2lmZGVmIEdGVElNRVIKKyAgICByZnRpbWVyKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTdGFydCB0aW1lIChmbG9hdCkgKi8KKyNlbmRpZiAvKiBHRlRJ TUVSICovCisKKyAgICBkZWJ1ZyhGMTExLCJmdHAgZ2V0IHR5cGUiLGZ0cHJlY3YubG9jYWwsY3Vy dHlwZSk7CisgICAgZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IGZ0cF9kcGwiLCIiLGZ0cF9k cGwpOworICAgIHN3aXRjaCAoY3VydHlwZSkgeworICAgICAgY2FzZSBGVFRfQklOOiAgICAgICAg ICAgICAgICAgICAgIC8qIEJpbmFyeSBtb2RlICovCisgICAgICBjYXNlIEZUVF9URU46ICAgICAg ICAgICAgICAgICAgICAgLyogVEVORVggbW9kZSAqLworICAgICAgICBkID0gMDsKKyAgICAgICAg d2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgIGMgPSBzZWN1 cmVfcmVhZChmdHByZWN2LmRpbiwgcmN2YnVmLCByY3ZidWZzaXopOworICAgICAgICAgICAgaWYg KGNhbmNlbGZpbGUpIHsKKyAgICAgICAgICAgICAgICBmYWlsZnRwcmVjdjIodGhyZWFkaW5mbyk7 CisjaWZkZWYgTlRTSUcKKyAgICAgICAgICAgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsK KyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChjIDwgMSkKKyAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYg cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKFdoYXQgaWYgaXQgaXNuJ3Q/KSAq LworICAgICAgICAgICAgaWYgKG91dDJzY3JlZW4gJiYgIWZ0cHJlY3YucGlwZW5hbWUpIHsKKyAg ICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYzsg aSsrKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIscmN2YnVmW2ldKTsKKyAgICAgICAg ICAgIH0gZWxzZQorI2VuZGlmIC8qIHByaW50ZiAqLworICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAg ICAgICAgICAgZXJybm8gPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgYykgeworICAg ICAgICAgICAgICAgICAgICBpZiAoem1jaG91dChyY3ZidWZbaSsrXSkgPCAwKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBkID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgYnl0ZXMgKz0gYzsKKyAgICAgICAgICAgIGZmYyArPSBjOworICAgICAgICB9 CisjaWZkZWYgRlRQX1RJTUVPVVQKKwlpZiAoYyA9PSAtMykgeworICAgICAgICAgICAgZGVidWco RjEwMCwiZnRwIHJlY3ZyZXF1ZXN0IHRpbWVvdXQiLCIiLDApOyAKKyAgICAgICAgICAgIGJ5dGVz ID0gKENLX09GRl9UKS0xOworCSAgICBmdHBfdGltZWRfb3V0ID0gMTsKKwkgICAgZnRwY29kZSA9 IC0zOworCX0gZWxzZQorI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCisgICAgICAgIGlmIChjIDwg MCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZnRwIHJlY3ZyZXF1ZXN0IGVycm5vIixja2l0 b2EoYyksZXJybm8pOworICAgICAgICAgICAgaWYgKGMgPT0gLTEgJiYgZXJybm8gIT0gRVBJUEUp CisgICAgICAgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkKKyAgICAgICAgICAg ICAgICBwZXJyb3IoIm5ldGluIik7CisgICAgICAgICAgICBieXRlcyA9IChDS19PRkZfVCktMTsK KyAgICAgICAgICAgIGZ0cGNvZGUgPSAtNDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZCA8IGMp IHsKKyAgICAgICAgICAgIGZ0cGNvZGUgPSAtMjsKKyAgICAgICAgICAgIGlmICgoIWRweWFjdGl2 ZSB8fCBmdHBfZGViKSkgeworICAgICAgICAgICAgICAgIGNoYXIgKiBwOworICAgICAgICAgICAg ICAgIHAgPSBmdHByZWN2LmxvY2FsID8gZnRwcmVjdi5sb2NhbCA6IGZ0cHJlY3YucGlwZW5hbWU7 CisgICAgICAgICAgICAgICAgaWYgKGQgPCAwKQorICAgICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsCisJCQkgICJsb2NhbCgzKTogJXM6ICVzXG4iLCBmdHByZWN2LmxvY2FsLCBja19lcnJz dHIoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsCisJCQkgICIlczogc2hvcnQgd3JpdGVcbiIsIGZ0cHJlY3YubG9jYWwpOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZUVF9BU0M6 ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBtb2RlICovCisJZGVidWcoRjEwMSwiZnRwIHJl Y3ZyZXF1ZXN0IFRZUEUgQSB4bGF0ZSIsIiIsZnRwcmVjdi54bGF0ZSk7CisjaWZuZGVmIE5PQ1NF VFMKKyAgICAgICAgaWYgKGZ0cHJlY3YueGxhdGUpIHsKKyAgICAgICAgICAgIGludCB0OworI2lm ZGVmIENLX0FOU0lDCisgICAgICAgICAgICBpbnQgKCpmbikoY2hhcik7CisjZWxzZQorICAgICAg ICAgICAgaW50ICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCAoZGF0YSkiLCJpbml0eGxhdGUiLDApOworICAgICAg ICAgICAgaW5pdHhsYXRlKGZ0cHJlY3YucmNzLGZ0cHJlY3YuZmNzKTsgICAgICAgICAvKiAoRnJv bSxUbykgKi8KKyAgICAgICAgICAgIGlmIChmdHByZWN2LnBpcGVuYW1lKSB7CisgICAgICAgICAg ICAgICAgZm4gPSBwaXBlb3V0OworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cCByZWN2 cmVxdWVzdCBBU0NJSSIsInBpcGVvdXQiLDApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICBmbiA9IG91dDJzY3JlZW4gPyBzY3Jub3V0IDogcHV0ZmlsOworICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCBBU0NJSSIsCisgICAgICAgICAgICAg ICAgICAgICAgb3V0MnNjcmVlbiA/ICJzY3Jub3V0IiA6ICJwdXRmaWwiLDApOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKwkJLyogR2V0IGJ5dGUgZnJvbSBuZXQgKi8K KyAgICAgICAgICAgICAgICBjMCA9IHhnbmJ5dGUoRkNfVUNTMixmdHByZWN2LnJjcyxuZXRnZXRj KTsKKyAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZmlsZSkgeworICAgICAgICAgICAgICAgICAg ICBmYWlsZnRwcmVjdjIodGhyZWFkaW5mbyk7CisjaWZkZWYgTlRTSUcKKyAgICAgICAgICAgICAg ICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBpZiAoYzAgPCAwKQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCS8qIFNlY29uZCBieXRl IGZyb20gbmV0ICovCisgICAgICAgICAgICAgICAgYzEgPSB4Z25ieXRlKEZDX1VDUzIsZnRwcmVj di5yY3MsbmV0Z2V0Yyk7CisgICAgICAgICAgICAgICAgaWYgKGNhbmNlbGZpbGUpIHsKKyAgICAg ICAgICAgICAgICAgICAgZmFpbGZ0cHJlY3YyKHRocmVhZGluZm8pOworI2lmZGVmIE5UU0lHCisg ICAgICAgICAgICAgICAgICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5U U0lHICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgaWYgKGMxIDwgMCkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lm ZGVmIENPTU1FTlQKKwkJLyogSzk1OiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdGhpcyAqLworCQlp ZiAoZmlsZW9yZGVyID4gMCkJLyogTGl0dGxlIEVuZGlhbiAqLworCQkgIGJ5dHN3YXAoJmMwLCZj MSk7CS8qIHN3YXAgYnl0ZXMqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIE9TMgor ICAgICAgICAgICAgICAgIGlmICggb3V0MnNjcmVlbiAmJiAgICAgICAgICAgIC8qIHdlJ3JlIHRy YW5zbGF0aW5nIHRvIFVDUy0yICovIAorICAgICAgICAgICAgICAgICAgICAgIWs5NXN0ZG91dCAm JiAhaW5zZXJ2ZXIpIC8qIGZvciB0aGUgcmVhbCBzY3JlZW4uLi4gKi8gICAgIAorICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pb24geworICAgICAgICAgICAgICAgICAg ICAgICAgVVNIT1JUIHVjczI7CisgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiAgYnl0ZXNb Ml07CisgICAgICAgICAgICAgICAgICAgIH0gb3V0cHV0OworCisgICAgICAgICAgICAgICAgICAg IG91dHB1dC5ieXRlc1swXSA9IGMxOworICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYnl0ZXNb MV0gPSBjMDsKKworICAgICAgICAgICAgICAgICAgICBWc2NybldydFVDUzJTdHJBdHQoVkNNRCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQudWNzMiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3aGVyZXlbVkNNRF0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3aGVyZXhbVkNNRF0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmY29sb3JjbWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgCisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSB4cG5ieXRl KGMwLFRDX1VDUzIsZnRwcmVjdi5mY3MsZm4pKSA8IDApIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICBpZiAoKHggPSB4cG5ieXRlKGMxLFRDX1VDUzIsZnRwcmVjdi5mY3MsZm4pKSA8IDApIGJy ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK KyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAg ICAgICAgIGMgPSBzZWN1cmVfZ2V0YyhmdHByZWN2LmRpbiwwKTsKKyAgICAgICAgICAgICAgICBp ZiAoY2FuY2VsZmlsZQorI2lmZGVmIEZUUF9USU1FT1VUCisJCSAgICB8fCBmdHBfdGltZWRfb3V0 CisjZW5kaWYJLyogRlRQX1RJTUVPVVQgKi8KKwkJICAgICkgeworICAgICAgICAgICAgICAgICAg ICBmYWlsZnRwcmVjdjIodGhyZWFkaW5mbyk7CisjaWZkZWYgTlRTSUcKKyAgICAgICAgICAgICAg ICAgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBpZiAoYyA8IDAgfHwgYyA9PSBFT0YpCisgICAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRl ZiBVTklYCisJCS8qIFJlY29yZCBmb3JtYXQgY29udmVyc2lvbiBmb3IgVW5peCAqLworCQkvKiBT S0lQIFRISVMgRk9SIFdJTkRPV1MhICovCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykK KyAgICAgICAgICAgICAgICAgIGJhcmVfbGZzKys7CisgICAgICAgICAgICAgICAgd2hpbGUgKGMg PT0gJ1xyJykgeworICAgICAgICAgICAgICAgICAgICBieXRlcysrOworICAgICAgICAgICAgICAg ICAgICBpZiAoKGMgPSBzZWN1cmVfZ2V0YyhmdHByZWN2LmRpbiwwKSkgIT0gJ1xuJyB8fAorCQkJ ZnRwcmVjdi50Y3JmbGFnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsZmls ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxmdHByZWN2Mih0aHJlYWRpbmZv KTsKKyNpZmRlZiBOVFNJRworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrVGhyZWFkRW5k KHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGMgPCAwIHx8IGMgPT0gRU9GKQorICAgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGJyZWFrMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdcMCcpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcysrOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gY29udGluMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo YyA8IDApCisgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBVTlggKi8KKworICAg ICAgICAgICAgICAgIGlmIChvdXQyc2NyZWVuICYmICFmdHByZWN2LnBpcGVuYW1lKQorI2lmZGVm IHByaW50ZgorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlYyIsKGNoYXIpYyk7CisjZWxzZQor ICAgICAgICAgICAgICAgICAgcHV0Y2hhcigoY2hhciljKTsKKyNlbmRpZiAvKiBwcmludGYgKi8K KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpZiAoKGQgPSB6bWNob3V0 KGMpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGJ5 dGVzKys7CisgICAgICAgICAgICAgICAgZmZjKys7CisgICAgICAgICAgICAgIGNvbnRpbjI6Cisg ICAgICAgICAgICAgICAgOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrMjoKKyAgICAg ICAgICAgIGlmIChiYXJlX2xmcyAmJiAoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkgeworICAgICAg ICAgICAgICAgIHByaW50ZigiV0FSTklORyEgJWQgYmFyZSBsaW5lZmVlZHMgcmVjZWl2ZWQgaW4g QVNDSUkgbW9kZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYmFyZV9sZnMpOworICAgICAg ICAgICAgICAgIHByaW50ZigiRmlsZSBtaWdodCBub3QgaGF2ZSB0cmFuc2ZlcnJlZCBjb3JyZWN0 bHkuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmdHByZWN2LmRpbiA9PSAt MSkgeworICAgICAgICAgICAgICAgIGJ5dGVzID0gKENLX09GRl9UKS0xOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKGMgPT0gLTIpCisgICAgICAgICAgICAgIGJ5dGVzID0gKENLX09G Rl9UKS0xOworICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgfQor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICB9CisgICAgaWYgKGZ0cHJlY3YucGlwZW5hbWUgfHwg IW91dDJzY3JlZW4pIHsKKwl6Y2xvc2UoWk9GSUxFKTsJCQkvKiBDbG9zZSB0aGUgZmlsZSAqLwor CWRlYnVnKEYxMTEsImRvZnRwcmVjdjIgemNsb3NlIGZ0cGNvZGUiLGZ0cHJlY3YubG9jYWwsZnRw Y29kZSk7CisJaWYgKGZ0cGNvZGUgPCAwKSB7CQkvKiBJZiBkb3dubG9hZCBmYWlsZWQgKi8KKwkg ICAgaW50IHggPSAwOworCSAgICBzd2l0Y2ggKGtlZXApIHsJCS8qIHdoaWNoIGlzLi4uICovCisJ ICAgICAgY2FzZSBTRVRfQVVUTzoJCS8qIEFVVE8gKi8KKwkJaWYgKGN1cnR5cGUgPT0gRlRUX0FT QykgLyogRGVsZXRlIGZpbGUgaWYgVFlQRSBBLiAqLworCQkgIHggPSAxOworCQlicmVhazsKKwkg ICAgICBjYXNlIFNFVF9PRkY6CQkvKiBESVNDQVJEICovCisJCXggPSAxOwkJCS8qIERlbGV0ZSBm aWxlLCBwZXJpb2QuICovCisJCWJyZWFrOworCSAgICAgIGRlZmF1bHQ6CQkJLyogS0VFUCAqLwor CQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoeCkgeworCQl4ID0gemRlbGV0KGZ0cHJlY3YubG9j YWwpOworCQlkZWJ1ZyhGMTExLCJmdHAgZ2V0IGRlbGV0ZSBpbmNvbXBsZXRlIixmdHByZWN2Lmxv Y2FsLHgpOworCSAgICB9CisJfQorICAgIH0KKyAgICBzaWduYWwoU0lHSU5ULCBmdHByZWN2Lm9s ZGludHIpOworI2lmZGVmIFNJR1BJUEUKKyAgICBpZiAoZnRwcmVjdi5vbGRpbnRwKQorICAgICAg c2lnbmFsKFNJR1BJUEUsIGZ0cHJlY3Yub2xkaW50cCk7CisjZW5kaWYgLyogU0lHUElQRSAqLwor ICAgIHN0b3AgPSBnbXN0aW1lcigpOworI2lmZGVmIEdGVElNRVIKKyAgICBmcGZzZWNzID0gZ2Z0 aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICB0ZmMgKz0gZmZjOworCisjaWZkZWYg VENQSVBMSUIKKyAgICBzb2NrZXRfY2xvc2UoZnRwcmVjdi5kaW4pOworI2Vsc2UgLyogVENQSVBM SUIgKi8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICBzaHV0ZG93bihmdHByZWN2LmRpbiwgMSsx KTsKKyNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICBjbG9zZShmdHByZWN2LmRpbik7Cisj ZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICBmdHByZWN2LnJlcGx5ID0gZ2V0cmVwbHkoMCxmdHBy ZWN2LmZjcyxmdHByZWN2LnJjcyxmdHBfdmJtLDApOworICAgIGZ0cHJlY3ZyZXQgPSAoKGZ0cGNv ZGUgPCAwIHx8IGZ0cHJlY3YucmVwbHkgPT0gUkVQTFlfVFJBTlNJRU5UIHx8IAorICAgICAgICAg ICAgICAgICAgIGZ0cHJlY3YucmVwbHkgPT0gUkVQTFlfRVJST1IpID8gLTEgOiAwKTsKKyNpZmRl ZiBOVFNJRworICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAq LworfQorCitzdGF0aWMgaW50CityZWN2cmVxdWVzdChjbWQsIGxvY2FsLCByZW1vdGUsIGxtb2Rl LCBwcmludG5hbWVzLCByZWNvdmVyLCBwaXBlbmFtZSwKKyAgICAgICAgICAgIHhsYXRlLCBmY3Ms IHJjcykKKyAgICBjaGFyICpjbWQsICpsb2NhbCwgKnJlbW90ZSwgKmxtb2RlLCAqcGlwZW5hbWU7 CisgICAgaW50IHByaW50bmFtZXMsIHJlY292ZXIsIHhsYXRlLCBmY3MsIHJjczsKK3sKKyNpZmRl ZiBOVAorICAgIHN0cnVjdCBfc3RhdCBzdGJ1ZjsKKyNlbHNlIC8qIE5UICovCisgICAgc3RydWN0 IHN0YXQgc3RidWY7CisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZykgeworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgY21kIixjbWQscmVj b3Zlcik7CisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCBsb2NhbCAiLGxvY2Fs LDApOworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgcmVtb3RlIixyZW1vdGUs ZnRwX3R5cCk7CisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCByZWN2cmVxdWVzdCBwaXBlbmFtZSAi LHBpcGVuYW1lLDApOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3QgeGxhdGUi LCIiLHhsYXRlKTsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IGZjcyIsIiIs ZmNzKTsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IHJjcyIsIiIscmNzKTsK KyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGZ0cHJlY3YubG9jYWxzaXplID0gKENL X09GRl9UKTA7CisKKyAgICBpZiAocmVtZmlsZSkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBT ZWUgcmVtY2ZtKCksIHJlbXR4dCgpICovCisgICAgICAgIGlmIChyZW1waXBlKSB7CisgICAgICAg ICAgICBwaXBlbmFtZSA9IHJlbWRlc3Q7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs b2NhbCA9IHJlbWRlc3Q7CisgICAgICAgICAgICBpZiAocmVtYXBwZCkgbG1vZGUgPSAiYWIiOwor ICAgICAgICB9CisgICAgfQorICAgIG91dDJzY3JlZW4gPSAwOworICAgIGlmICghY21kKSBjbWQg PSAiIjsgICAgICAgICAgICAgICAgIC8qIENvcmUgZHVtcCBwcmV2ZW50aW9uICovCisgICAgaWYg KCFyZW1vdGUpIHJlbW90ZSA9ICIiOworICAgIGlmICghbG1vZGUpIGxtb2RlID0gIiI7CisKKyAg ICBpZiAocGlwZW5hbWUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBObyByZWNvdmVyeSBmb3Ig cGlwZXMuICovCisgICAgICAgIHJlY292ZXIgPSAwOworICAgICAgICBpZiAoIWxvY2FsKQorICAg ICAgICAgIGxvY2FsID0gcGlwZW5hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFsb2Nh bCkgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgdG8gc2NyZWVuPyAqLworICAgICAgICAg IGxvY2FsID0gIi0iOworICAgICAgICBvdXQyc2NyZWVuID0gIXN0cmNtcChsb2NhbCwiLSIpOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJmdHAgcmVjdnJlcXVlc3Qgb3V0MnNjcmVlbiIsIiIsb3V0 MnNjcmVlbik7CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoIGZ0cF94bGEgJiYgb3V0MnNjcmVlbiAm JiAhazk1c3Rkb3V0ICYmICFpbnNlcnZlciApCisgICAgICAgIGZjcyA9IEZDX1VDUzI7CisjZW5k aWYgLyogT1MyICovCisKKyAgICBpZiAob3V0MnNjcmVlbikgICAgICAgICAgICAgICAgICAgICAv KiBObyByZWNvdmVyeSB0byBzY3JlZW4gKi8KKyAgICAgIHJlY292ZXIgPSAwOworICAgIGlmICgh ZnRwX3R5cCkgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHJlY292ZXJ5IGluIHRleHQgbW9k ZSAqLworICAgICAgcmVjb3ZlciA9IDA7CisgICAgZnRwcmVjdi5pc19yZXRyID0gKHN0cmNtcChj bWQsICJSRVRSIikgPT0gMCk7CisKKyAgICBpZiAoIWZ0cHJlY3YuaXNfcmV0cikgICAgICAgICAg ICAgICAvKiBObyByZWNvdmVyeSBleGNlcHQgZm9yIFJFVFJpZXZlICovCisgICAgICByZWNvdmVy ID0gMDsKKworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoIW91dDJzY3JlZW4gJiYgIXBpcGVuYW1l ICYmIGZ0cHJlY3YuaXNfcmV0cikgeyAvKiBUbyByZWFsIGZpbGUgKi8KKyAgICAgICAgaWYgKHJl Y3Vyc2l2ZSAmJiBja3N0cmNocihsb2NhbCwnLycpKSB7CisJICAgIAorICAgICAgICB9CisgICAg fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGZ0cHJlY3YubG9jYWxzaXplID0gKENLX09G Rl9UKTA7CS8qIExvY2FsIGZpbGUgc2l6ZSAqLworICAgIHJzX2xlbiA9IChDS19PRkZfVCkwOwkJ LyogUmVjb3ZlcnkgcG9pbnQgKi8KKworICAgIGRlYnVnKEYxMDEsImZ0cCByZWN2cmVxdWVzdCBy ZWNvdmVyIiwiIixyZWNvdmVyKTsKKyAgICBpZiAocmVjb3ZlcikgeyAgICAgICAgICAgICAgICAg ICAgICAvKiBSZWNvdmVyaW5nLi4uICovCisgICAgICAgIGlmIChzdGF0KGxvY2FsLCAmc3RidWYp IDwgMCkgeyAgLyogQ2FuJ3Qgc3RhdCBsb2NhbCBmaWxlICovCisJICAgIGRlYnVnKEYxMDEsImZ0 cCByZWN2cmVxdWVzdCByZWNvdmVyIHN0YXQgZmFpbGVkIiwiIixlcnJubyk7CisgICAgICAgICAg ICByZWNvdmVyID0gMDsgICAgICAgICAgICAgICAgLyogU28gY2FuY2VsIHJlY292ZXJ5ICovCisg ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBsb2NhbCBmaWxl IGluZm8gKi8KKyAgICAgICAgICAgIGZ0cHJlY3YubG9jYWxzaXplID0gc3RidWYuc3Rfc2l6ZTsg IC8qIEdldCBzaXplICovCisJICAgIC8qIFJlbW90ZSBmaWxlIHNtYWxsZXIgdGhhbiBsb2NhbCAq LworICAgICAgICAgICAgaWYgKGZzaXplIDwgZnRwcmVjdi5sb2NhbHNpemUpIHsKKwkJZGVidWco RjEwMSwiZnRwIHJlY3ZyZXF1ZXN0IHJlY292ZXIgcmVtb3RlIHNtYWxsZXIiLCIiLGZzaXplKTsK KyAgICAgICAgICAgICAgICByZWNvdmVyID0gMDsgICAgICAgICAgICAvKiBSZWNvdmVyeSBjYW4n dCB3b3JrICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGZzaXplID09IGZ0cHJlY3YubG9jYWxz aXplKSB7IC8qIFNpemVzIGFyZSBlcXVhbCAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs ImZ0cCByZWN2cmVxdWVzdCByZWNvdmVyIGVxdWFsIHNpemUiLAorCQkgICAgICByZW1vdGUsZnRw cmVjdi5sb2NhbHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgICAg IH0KKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIG9y aWdpbmFsIHBhcnRpYWwgZmlsZSBuZXZlciBnb3QgaXRzIGRhdGUKKyAgc2V0LCBlaXRoZXIgYmVj YXVzZSBGVFAgREFURVMgd2FzIE9GRiwgb3IgYmVjYXVzZSB0aGUgcGFydGlhbCBmaWxlIHdhcwor ICBkb3dubG9hZGVkIGJ5IHNvbWUgb3RoZXIgcHJvZ3JhbSB0aGF0IGRvZXNuJ3Qgc2V0IGxvY2Fs IGZpbGUgZGF0ZXMsIG9yCisgIGJlY2F1c2UgS2VybWl0IG9ubHkgc2V0cyB0aGUgZmlsZSdzIGRh dGUgd2hlbiB0aGUgZG93bmxvYWQgd2FzIGNvbXBsZXRlCisgIGFuZCBzdWNjZXNzZnVsLiAgSW4g YWxsIHRoZXNlIGNhc2VzLCB0aGUgbG9jYWwgZmlsZSBoYXMgYSBsYXRlciB0aW1lCisgIHRoYW4g dGhlIHJlbW90ZS4KKyovCisgICAgICAgICAgICBpZiAocmVjb3ZlcikgeyAgICAgICAgICAgICAg LyogUmVtb3RlIGlzIGJpZ2dlciAqLworICAgICAgICAgICAgICAgIHggPSBjaGttb2R0aW1lKGxv Y2FsLHJlbW90ZSwwKTsgLyogQ2hlY2sgZmlsZSBkYXRlcyAqLworICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsImZ0cCByZWN2cmVxdWVzdCBjaGttb2R0aW1lIixyZW1vdGUseCk7CisgICAgICAg ICAgICAgICAgaWYgKHggIT0gMSkJCS8qIERhdGVzIG11c3QgYmUgZXF1YWwhICovCisgICAgICAg ICAgICAgICAgICByZWNvdmVyID0gMDsgICAgICAgICAgLyogSWYgbm90LCBnZXQgd2hvbGUgZmls ZSAqLworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgfQorICAg ICAgICBkZWJ1ZyhGMTExLCJmdHAgcmVjdnJlcXVlc3QgcmVjb3ZlciIscmVtb3RlLHJlY292ZXIp OworICAgIH0KKworI2lmZGVmIEZUUF9QUk9YWQorICAgIGlmIChwcm94eSAmJiBmdHByZWN2Lmlz X3JldHIpCisgICAgICByZXR1cm4ocHJveHRyYW5zKGNtZCwgbG9jYWwgPyBsb2NhbCA6IHJlbW90 ZSwgcmVtb3RlKSk7CisjZW5kaWYgLyogRlRQX1BST1hZICovCisKKyAgICBmdHByZWN2LnRjcmZs YWcgPSAoZmVvbCAhPSBDUikgJiYgZnRwcmVjdi5pc19yZXRyOworCisgICAgZnRwcmVjdi5yZXBs eSA9IDA7CisgICAgZnRwcmVjdi5mY3MgPSBmY3M7CisgICAgZnRwcmVjdi5yY3MgPSByY3M7Cisg ICAgZnRwcmVjdi5yZWNvdmVyID0gcmVjb3ZlcjsKKyAgICBmdHByZWN2LnhsYXRlID0geGxhdGU7 CisgICAgZnRwcmVjdi5jbWQgPSBjbWQ7CisgICAgZnRwcmVjdi5sb2NhbCA9IGxvY2FsOworICAg IGZ0cHJlY3YucmVtb3RlID0gcmVtb3RlOworICAgIGZ0cHJlY3YubG1vZGUgPSBsbW9kZTsKKyAg ICBmdHByZWN2LnBpcGVuYW1lID0gcGlwZW5hbWU7CisgICAgZnRwcmVjdi5vbGRpbnRwID0gTlVM TDsKKyAgICBmdHBjb2RlID0gMDsKKworICAgIGhhdmVzaWdpbnQgPSAwOworICAgIGZ0cHJlY3Yu b2xkaW50ciA9IHNpZ25hbChTSUdJTlQsIGNhbmNlbHJlY3YpOworICAgIGlmIChjY19leGVjdXRl KGNramFkZHIocmVjdmNhbmNlbCksIGRvZnRwcmVjdiwgZmFpbGZ0cHJlY3YpIDwgMCkKKyAgICAg IHJldHVybiAtMTsKKworI2lmZGVmIEZUUF9USU1FT1VUCisgICAgZGVidWcoRjExMSwiZnRwIHJl Y3ZyZXF1ZXN0IGZ0cHJlY3ZyZXQiLHJlbW90ZSxmdHByZWN2cmV0KTsKKyAgICBkZWJ1ZyhGMTEx LCJmdHAgcmVjdnJlcXVlc3QgZnRwX3RpbWVkX291dCIscmVtb3RlLGZ0cF90aW1lZF9vdXQpOwor ICAgIGlmIChmdHBfdGltZWRfb3V0KQorICAgICAgZnRwcmVjdnJldCA9IC0xOworI2VuZGlmCS8q IEZUUF9USU1FT1VUICovCisKKyAgICBpZiAoZnRwcmVjdnJldCA8IDApCisgICAgICByZXR1cm4g LTE7CisKKyAgICBpZiAoY2NfZXhlY3V0ZShja2phZGRyKHJlY3ZjYW5jZWwpLCBkb2Z0cHJlY3Yy LCBmYWlsZnRwcmVjdjIpIDwgMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gZnRwcmVj dnJldDsKK30KKworLyoKKyAqIE5lZWQgdG8gc3RhcnQgYSBsaXN0ZW4gb24gdGhlIGRhdGEgY2hh bm5lbCBiZWZvcmUgd2Ugc2VuZCB0aGUgY29tbWFuZCwKKyAqIG90aGVyd2lzZSB0aGUgc2VydmVy J3MgY29ubmVjdCBtYXkgZmFpbC4KKyAqLworc3RhdGljIGludAoraW5pdGNvbm4oKSB7CisgICAg cmVnaXN0ZXIgY2hhciAqcCwgKmE7CisgICAgaW50IHJlc3VsdCwgdG1wbm8gPSAwOworICAgIGlu dCBvbiA9IDE7CisgICAgR1NPQ0tOQU1FX1QgbGVuOworCisjaWZuZGVmIE5PX1BBU1NJVkVfTU9E RQorICAgIGludCBhMSxhMixhMyxhNCxwMSxwMjsKKworICAgIGlmIChwYXNzaXZlbW9kZSkgewor ICAgICAgICBkYXRhID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICAgICAg Z2xvYmFsZGluID0gZGF0YTsKKyAgICAgICAgaWYgKGRhdGEgPCAwKSB7CisgICAgICAgICAgICBw ZXJyb3IoImZ0cDogc29ja2V0Iik7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 CisgICAgICAgIGlmIChmdHBjbWQoIlBBU1YiLE5VTEwsMCwwLGZ0cF92Ym0pICE9IFJFUExZX0NP TVBMRVRFKSB7CisgICAgICAgICAgICBwcmludGYoIlBhc3NpdmUgbW9kZSByZWZ1c2VkXG4iKTsK KyAgICAgICAgICAgIHBhc3NpdmVtb2RlID0gMDsKKyAgICAgICAgICAgIHJldHVybihpbml0Y29u bigpKTsKKyAgICAgICAgfQorLyoKKyAgTm93IHdlIGhhdmUgYSBzdHJpbmcgb2YgY29tbWEtc2Vw YXJhdGVkIG9uZS1ieXRlIHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLAorICBUaGUgZmlyc3QgZm91 ciBhcmUgdGhlIGFuIElQIGFkZHJlc3MuICBUaGUgZmlmdGggaXMgdGhlIE1TQiBvZiB0aGUgcG9y dAorICBudW1iZXIsIHRoZSBzaXh0aCBpcyB0aGUgTFNCLiAgRnJvbSB0aGF0IHdlIGNhbiBtYWtl IGEgc29ja2FkZHJfaW4uCisqLworICAgICAgICBpZiAoc3NjYW5mKHBhc3YsIiVkLCVkLCVkLCVk LCVkLCVkIiwmYTEsJmEyLCZhMywmYTQsJnAxLCZwMikgIT0gNikgeworICAgICAgICAgICAgcHJp bnRmKCJQYXNzaXZlIG1vZGUgYWRkcmVzcyBzY2FuIGZhaWx1cmVcbiIpOworICAgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgfTsKKyNpZm5kZWYgTk9IVFRQCisgICAgICAgIGlmICh0Y3Bf aHR0cF9wcm94eSkgeworI2lmZGVmIE9TMgorICAgICAgICAgICAgY2hhciAqIGFnZW50ID0gIktl cm1pdCA5NSI7IC8qIERlZmF1bHQgdXNlciBhZ2VudCAqLworI2Vsc2UKKyAgICAgICAgICAgIGNo YXIgKiBhZ2VudCA9ICJDLUtlcm1pdCI7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICBy ZWdpc3RlciBzdHJ1Y3QgaG9zdGVudCAqaHAgPSAwOworICAgICAgICAgICAgc3RydWN0IHNlcnZl bnQgKmRlc3RzcDsKKyAgICAgICAgICAgIGNoYXIgaG9zdFs1MTJdLCAqcCwgKnE7CisjaWZkZWYg SVBfVE9TCisjaWZkZWYgSVBUT1NfVEhST1VHSFBVVAorICAgICAgICAgICAgaW50IHRvczsKKyNl bmRpZiAvKiBJUFRPU19USFJPVUdIUFVUICovCisjZW5kaWYgLyogSVBfVE9TICovCisgICAgICAg ICAgICBpbnQgczsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgZXh0ZXJuIGludCBkZWJ0aW07 CisgICAgICAgICAgICBpbnQgeGRlYnRpbTsKKyAgICAgICAgICAgIHhkZWJ0aW0gPSBkZWJ0aW07 CisgICAgICAgICAgICBkZWJ0aW0gPSAxOworI2VuZGlmIC8qIERFQlVHICovCisKKyAgICAgICAg ICAgIGNrbWFreG1zZyhwcm94eWhvc3QsSFRUUENQWUwsY2t1aXRvYShhMSksIi4iLGNrdWl0b2Eo YTIpLAorICAgICAgICAgICAgICAgICAgICAgICIuIixja3VpdG9hKGEzKSwiLiIsY2t1aXRvYShh NCksIjoiLGNrdWl0b2EoKHAxPDw4KXxwMiksCisgICAgICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgbWVtc2V0KChj aGFyICopJmhpc2N0bGFkZHIsIDAsIHNpemVvZiAoaGlzY3RsYWRkcikpOworICAgICAgICAgICAg Zm9yIChwID0gdGNwX2h0dHBfcHJveHksIHE9aG9zdDsgKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOic7 IHArKywgcSsrKQorICAgICAgICAgICAgICAqcSA9ICpwOworICAgICAgICAgICAgKnEgPSAnXDAn OworCisgICAgICAgICAgICBoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkciho b3N0KTsKKyAgICAgICAgICAgIGlmIChoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkciAhPSBJTkFE RFJfTk9ORSkgLyogMjAxMC0wMy0yOSAqLworCSAgICB7CisgICAgICAgICAgICAgICAgZGVidWco RjExMCwiaW5pdGNvbm4gQSIsaG9zdCwwKTsKKyAgICAgICAgICAgICAgICBoaXNjdGxhZGRyLnNp bl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJpbml0Y29ubiBCIixob3N0LDApOworICAgICAgICAgICAgICAgIGhwID0g Z2V0aG9zdGJ5bmFtZShob3N0KTsKKyNpZmRlZiBIQUREUkxJU1QKKyAgICAgICAgICAgICAgICBo cCA9IGNrX2NvcHlob3N0ZW50KGhwKTsgLyogbWFrZSBzYWZlIGNvcHkgdGhhdCB3b24ndCBjaGFu Z2UgKi8KKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8KKyAgICAgICAgICAgICAgICBpZiAoaHAgPT0g TlVMTCkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZ0cDogJXM6IFVu a25vd24gaG9zdFxuIiwgaG9zdCk7CisgICAgICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsK KyNpZmRlZiBERUJVRworICAgICAgICAgICAgICAgICAgICBkZWJ0aW0gPSB4ZGVidGltOworI2Vu ZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgaGlzY3RsYWRkci5zaW5fZmFtaWx5ID0gaHAtPmhf YWRkcnR5cGU7CisjaWZkZWYgSEFERFJMSVNUCisgICAgICAgICAgICAgICAgbWVtY3B5KChjaGFy ICopJmhpc2N0bGFkZHIuc2luX2FkZHIsIGhwLT5oX2FkZHJfbGlzdFswXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGhpc2N0bGFkZHIuc2luX2FkZHIpKTsKKyNlbHNlIC8qIEhBRERS TElTVCAqLworICAgICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSZoaXNjdGxhZGRyLnNpbl9h ZGRyLCBocC0+aF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaGlzY3RsYWRk ci5zaW5fYWRkcikpOworI2VuZGlmIC8qIEhBRERSTElTVCAqLworICAgICAgICAgICAgfQorICAg ICAgICAgICAgZGF0YSA9IHNvY2tldChoaXNjdGxhZGRyLnNpbl9mYW1pbHksIFNPQ0tfU1RSRUFN LCAwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImluaXRjb25uIHNvY2tldCIsIiIsZGF0YSk7 CisgICAgICAgICAgICBpZiAoZGF0YSA8IDApIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoImZ0 cDogc29ja2V0Iik7CisgICAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOworI2lmZGVmIERFQlVH CisgICAgICAgICAgICAgICAgZGVidGltID0geGRlYnRpbTsKKyNlbmRpZiAvKiBERUJVRyAqLwor ICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm ICgqcCA9PSAnOicpCisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgcCA9ICJodHRwIjsKKworICAgICAgICAgICAgZGVzdHNwID0gZ2V0c2VydmJ5bmFt ZShwLCJ0Y3AiKTsKKyAgICAgICAgICAgIGlmIChkZXN0c3ApCisgICAgICAgICAgICAgIGhpc2N0 bGFkZHIuc2luX3BvcnQgPSBkZXN0c3AtPnNfcG9ydDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHAp CisgICAgICAgICAgICAgIGhpc2N0bGFkZHIuc2luX3BvcnQgPSBodG9ucyhhdG9pKHApKTsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgaGlzY3RsYWRkci5zaW5fcG9ydCA9IGh0b25z KDgwKTsKKyAgICAgICAgICAgIGVycm5vID0gMDsKKyNpZmRlZiBIQUREUkxJU1QKKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsImluaXRjb25uIEhBRERSTElTVCIsIiIsMCk7CisgICAgICAgICAgICB3 aGlsZQorI2Vsc2UKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImluaXRjb25uIG5vIEhBRERSTElT VCIsIiIsMCk7CisgICAgICAgICAgICBpZgorI2VuZGlmIC8qIEhBRERSTElTVCAqLworICAgICAg ICAgICAgICAoY29ubmVjdChkYXRhLCAoc3RydWN0IHNvY2thZGRyICopJmhpc2N0bGFkZHIsCisg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoaGlzY3RsYWRkcikpIDwgMCkgeworICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5pdGNvbm4gY29ubmVjdCBmYWlsZWQiLCIiLGVycm5v KTsKKyNpZmRlZiBIQUREUkxJU1QKKyAgICAgICAgICAgICAgICAgIGlmIChocCAmJiBocC0+aF9h ZGRyX2xpc3RbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Vycm5vID0gZXJybm87 CisKKyAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJmdHA6IGNvbm5lY3QgdG8gYWRkcmVzcyAlczogIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYShoaXNjdGxhZGRyLnNpbl9hZGRyKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICBlcnJu byA9IG9lcnJubzsKKyAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoKGNoYXIgKikwKTsKKyAg ICAgICAgICAgICAgICAgICAgICBocC0+aF9hZGRyX2xpc3QrKzsKKyAgICAgICAgICAgICAgICAg ICAgICBtZW1jcHkoKGNoYXIgKikmaGlzY3RsYWRkci5zaW5fYWRkciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaHAtPmhfYWRkcl9saXN0WzBdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YoaGlzY3RsYWRkci5zaW5fYWRkcikpOworICAgICAgICAgICAgICAgICAg ICAgIGZwcmludGYoc3Rkb3V0LCAiVHJ5aW5nICVzLi4uXG4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5ldF9udG9hKGhpc2N0bGFkZHIuc2luX2FkZHIpKTsKKyNpZmRlZiBUQ1BJ UExJQgorICAgICAgICAgICAgICAgICAgICAgIHNvY2tldF9jbG9zZShkYXRhKTsKKyNlbHNlIC8q IFRDUElQTElCICovCisgICAgICAgICAgICAgICAgICAgICAgY2xvc2UoZGF0YSk7CisjZW5kaWYg LyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc29ja2V0KGhpc2N0 bGFkZHIuc2luX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOworICAgICAgICAgICAgICAgICAgICAg IGlmIChkYXRhIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoImZ0cDog c29ja2V0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyNpZmRl ZiBERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ0aW0gPSB4ZGVidGltOworI2Vu ZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogSEFERFJMSVNUICovCisgICAgICAgICAgICAg ICAgICBwZXJyb3IoImZ0cDogY29ubmVjdCIpOworICAgICAgICAgICAgICAgICAgZnRwY29kZSA9 IC0xOworICAgICAgICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmIChodHRwX2Nvbm5lY3QoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGNwX2h0dHBfcHJveHlfYWdlbnQgPworCQkJICAgICAgIHRjcF9odHRwX3Byb3h5X2FnZW50 IDoKKwkJCSAgICAgICAgIGFnZW50LAorCQkJICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV91c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0Y3BfaHR0cF9wcm94eV9wd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5aG9zdAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApIDwgMCkgeworI2lmZGVmIFRDUElQTElCCisgICAgICAgICAgICAgICAg c29ja2V0X2Nsb3NlKGRhdGEpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAg ICBjbG9zZShkYXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICAgIHBl cnJvcigiZnRwOiBjb25uZWN0Iik7CisgICAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOworICAg ICAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyNl bmRpZiAvKiBOT0hUVFAgKi8KKyAgICAgICAgeworICAgICAgICAgICAgZGF0YV9hZGRyLnNpbl9m YW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgICAgZGF0YV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9 IGh0b25sKChhMTw8MjQpfChhMjw8MTYpfChhMzw8OCl8YTQpOworICAgICAgICAgICAgZGF0YV9h ZGRyLnNpbl9wb3J0ID0gaHRvbnMoKHAxPDw4KXxwMik7CisKKyAgICAgICAgICAgIGlmIChjb25u ZWN0KGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRh dGFfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkYXRhX2FkZHIpKSA8IDAK KyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoImZ0cDogY29ubmVj dCIpOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgZGVidWcoRjEwMCwiaW5pdGNvbm4gY29ubmVjdCBvayIsIiIsMCk7CisjaWZk ZWYgSVBfVE9TCisjaWZkZWYgSVBUT1NfVEhST1VHSFBVVAorICAgICAgICBvbiA9IElQVE9TX1RI Uk9VR0hQVVQ7CisgICAgICAgIGlmIChzZXRzb2Nrb3B0KGRhdGEsIElQUFJPVE9fSVAsIElQX1RP UywgKGNoYXIgKikmb24sIHNpemVvZihpbnQpKSA8IDApCisgICAgICAgICAgcGVycm9yKCJmdHA6 IHNldHNvY2tvcHQgVE9TIChpZ25vcmVkKSIpOworI2VuZGlmIC8qIElQVE9TX1RIUk9VR0hQVVQg Ki8KKyNlbmRpZiAvKiBJUF9UT1MgKi8KKyAgICAgICAgbWVtY3B5KCZoaXNkYXRhYWRkciwmZGF0 YV9hZGRyLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0KKyNlbmRpZiAvKiBOT19QQVNTSVZFX01PREUgKi8KKworICBub3BvcnQ6CisgICAgbWVt Y3B5KCZkYXRhX2FkZHIsJm15Y3RsYWRkcixzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Cisg ICAgaWYgKHNlbmRwb3J0KQorICAgICAgZGF0YV9hZGRyLnNpbl9wb3J0ID0gMDsgICAvKiBsZXQg c3lzdGVtIHBpY2sgb25lICovCisgICAgaWYgKGRhdGEgIT0gLTEpIHsKKyNpZmRlZiBUQ1BJUExJ QgorICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lm ZGVmIFVTRV9TSFVURE9XTgorICAgICAgICBzaHV0ZG93bihkYXRhLCAxKzEpOworI2VuZGlmIC8q IFVTRV9TSFVURE9XTiAqLworICAgICAgICBjbG9zZShkYXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJ QiAqLworICAgIH0KKyAgICBkYXRhID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsK KyAgICBnbG9iYWxkaW4gPSBkYXRhOworICAgIGlmIChkYXRhIDwgMCkgeworICAgICAgICBwZXJy b3IoImZ0cDogc29ja2V0Iik7CisgICAgICAgIGlmICh0bXBubykKKyAgICAgICAgICBzZW5kcG9y dCA9IDE7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGlmICghc2VuZHBvcnQpIHsK KyAgICAgICAgaWYgKHNldHNvY2tvcHQoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgU09M X1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgU09fUkVVU0VBRERSLAorICAgICAgICAg ICAgICAgICAgICAgICAoY2hhciAqKSZvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m IChvbikKKyAgICAgICAgICAgICAgICAgICAgICAgKSA8IDAKKyAgICAgICAgICAgICkgeworICAg ICAgICAgICAgcGVycm9yKCJmdHA6IHNldHNvY2tvcHQgKHJldXNlIGFkZHJlc3MpIik7CisgICAg ICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYmluZChkYXRhLCAo c3RydWN0IHNvY2thZGRyICopJmRhdGFfYWRkciwgc2l6ZW9mIChkYXRhX2FkZHIpKSA8IDApIHsK KyAgICAgICAgcGVycm9yKCJmdHA6IGJpbmQiKTsKKyAgICAgICAgZ290byBiYWQ7CisgICAgfQor ICAgIGxlbiA9IHNpemVvZiAoZGF0YV9hZGRyKTsKKyAgICBpZiAoZ2V0c29ja25hbWUoZGF0YSwg KHN0cnVjdCBzb2NrYWRkciAqKSZkYXRhX2FkZHIsICZsZW4pIDwgMCkgeworICAgICAgICBwZXJy b3IoImZ0cDogZ2V0c29ja25hbWUiKTsKKyAgICAgICAgZ290byBiYWQ7CisgICAgfQorICAgIGlm IChsaXN0ZW4oZGF0YSwgMSkgPCAwKSB7CisgICAgICAgIHBlcnJvcigiZnRwOiBsaXN0ZW4iKTsK KyAgICAgICAgZ290byBiYWQ7CisgICAgfQorICAgIGlmIChzZW5kcG9ydCkgeworICAgICAgICBh ID0gKGNoYXIgKikmZGF0YV9hZGRyLnNpbl9hZGRyOworICAgICAgICBwID0gKGNoYXIgKikmZGF0 YV9hZGRyLnNpbl9wb3J0OworICAgICAgICBja21ha3htc2coZnRwY21kYnVmLEZUUF9CVUZTSVos IlBPUlQgIiwKKyAgICAgICAgICAgICAgICAgIFVDKGFbMF0pLCIsIixVQyhhWzFdKSwiLCIsIFVD KGFbMl0pLCIsIiwgVUMoYVszXSksIiwiLAorICAgICAgICAgICAgICAgICAgVUMocFswXSksIiwi LCBVQyhwWzFdKSk7CisgICAgICAgIHJlc3VsdCA9IGZ0cGNtZChmdHBjbWRidWYsTlVMTCwwLDAs ZnRwX3ZibSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gUkVQTFlfRVJST1IgJiYgc2VuZHBvcnQp IHsKKyAgICAgICAgICAgIHNlbmRwb3J0ID0gMDsKKyAgICAgICAgICAgIHRtcG5vID0gMTsKKyAg ICAgICAgICAgIGdvdG8gbm9wb3J0OworICAgICAgICB9CisgICAgICAgIHJldHVybihyZXN1bHQg IT0gUkVQTFlfQ09NUExFVEUpOworICAgIH0KKyAgICBpZiAodG1wbm8pCisgICAgICBzZW5kcG9y dCA9IDE7CisjaWZkZWYgSVBfVE9TCisjaWZkZWYgSVBUT1NfVEhST1VHSFBVVAorICAgIG9uID0g SVBUT1NfVEhST1VHSFBVVDsKKyAgICBpZiAoc2V0c29ja29wdChkYXRhLCBJUFBST1RPX0lQLCBJ UF9UT1MsIChjaGFyICopJm9uLCBzaXplb2YoaW50KSkgPCAwKQorICAgICAgcGVycm9yKCJmdHA6 IHNldHNvY2tvcHQgVE9TIChpZ25vcmVkKSIpOworI2VuZGlmCisjZW5kaWYKKyAgICByZXR1cm4o MCk7CisgIGJhZDoKKyNpZmRlZiBUQ1BJUExJQgorICAgIHNvY2tldF9jbG9zZShkYXRhKTsKKyNl bHNlIC8qIFRDUElQTElCICovCisjaWZkZWYgVVNFX1NIVVRET1dOCisgICAgc2h1dGRvd24oZGF0 YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICBjbG9zZShkYXRhKTsKKyNl bmRpZiAvKiBUQ1BJUExJQiAqLworICAgIGRhdGEgPSAtMTsKKyAgICBnbG9iYWxkaW4gPSBkYXRh OworICAgIGlmICh0bXBubykKKyAgICAgIHNlbmRwb3J0ID0gMTsKKyAgICByZXR1cm4oLTEpOwor fQorCisjaWZkZWYgQ0tfU1NMCitzdGF0aWMgaW50Citzc2xfZGF0YWNvbm4oKSB7CisgICAgaWYg KHNzbF9mdHBfZGF0YV9jb24hPU5VTEwpIHsgICAgICAgLyogRG8gU1NMICovCisgICAgICAgIFNT TF9mcmVlKHNzbF9mdHBfZGF0YV9jb24pOworICAgICAgICBzc2xfZnRwX2RhdGFfY29uPU5VTEw7 CisgICAgfQorICAgIHNzbF9mdHBfZGF0YV9jb249KFNTTCAqKVNTTF9uZXcoc3NsX2Z0cF9jdHgp OworCisgICAgU1NMX3NldF9mZChzc2xfZnRwX2RhdGFfY29uLGRhdGEpOworICAgIFNTTF9zZXRf dmVyaWZ5KHNzbF9mdHBfZGF0YV9jb24sc3NsX3ZlcmlmeV9mbGFnLE5VTEwpOworCisgICAgU1NM X2NvcHlfc2Vzc2lvbl9pZChzc2xfZnRwX2RhdGFfY29uLHNzbF9mdHBfY29uKTsKKworICAgIGlm IChzc2xfZGVidWdfZmxhZykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiPT5TVEFSVCBTU0wg Y29ubmVjdCBvbiBEQVRBXG4iKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgfQorICAg IGlmIChTU0xfY29ubmVjdChzc2xfZnRwX2RhdGFfY29uKSA8PSAwKSB7CisgICAgICAgIHN0YXRp YyBjaGFyIGVycmJ1ZlsxMDI0XTsKKyAgICAgICAgY2ttYWttc2coZXJyYnVmLDEwMjQsImZ0cDog U1NMX2Nvbm5lY3QgREFUQSBlcnJvcjogIiwKKyAgICAgICAgICAgICAgICAgIEVSUl9lcnJvcl9z dHJpbmcoRVJSX2dldF9lcnJvcigpLE5VTEwpLE5VTEwsTlVMTCk7CisgICAgICAgIGZwcmludGYo c3RkZXJyLCIlc1xuIiwgZXJyYnVmKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisjaWZkZWYg VENQSVBMSUIKKyAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vsc2UgLyogVENQSVBMSUIg Ki8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNl bmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgY2xvc2UoZGF0YSk7CisjZW5kaWYgLyog VENQSVBMSUIgKi8KKyAgICAgICAgZGF0YSA9IC0xOworICAgICAgICBnbG9iYWxkaW4gPSBkYXRh OworICAgICAgICByZXR1cm4oLTEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNzbF9mdHBfZGF0 YV9hY3RpdmVfZmxhZz0xOworCisgICAgICAgIGlmICghc3NsX2NlcnRzb2tfZmxhZyAmJiAhdGxz X2lzX2tyYjUoMikpIHsKKyAgICAgICAgICAgIGNoYXIgKnN1YmplY3QgPSBzc2xfZ2V0X3N1Ympl Y3RfbmFtZShzc2xfZnRwX2RhdGFfY29uKTsKKworICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7 CisgICAgICAgICAgICAgICAgaWYgKHNzbF92ZXJpZnlfZmxhZyAmIFNTTF9WRVJJRllfRkFJTF9J Rl9OT19QRUVSX0NFUlQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZGF0YWNv bm4iLCJbU1NMIF8tIEZBSUxFRF0iLDApOworCisgICAgICAgICAgICAgICAgICAgIHNzbF9mdHBf ZGF0YV9hY3RpdmVfZmxhZyA9IDA7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgICAgICAg ICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0Vf U0hVVERPV04KKyAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNlbmRp ZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgICAgICAgICAgICAgY2xvc2UoZGF0YSk7Cisj ZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IC0xOworICAg ICAgICAgICAgICAgICAgICBnbG9iYWxkaW4gPSBkYXRhOworICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg IGlmICghb3V0MnNjcmVlbiAmJiBkaXNwbGEgJiYgZmRpc3BsYSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgZnRzY3JlZW4oU0NSX1RDLDAsKENLX09GRl9UKTAsIkRpc3BsYXkgY2FuY2VsZWQi KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZkaXNwbGEgPSBYWUZEX0I7ICovCisgICAg ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodXFfb2soCisgICAg ICAgICAgIldhcm5pbmc6IFNlcnZlciBkaWRuJ3QgcHJvdmlkZSBhIGNlcnRpZmljYXRlIG9uIGRh dGEgY29ubmVjdGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGlu dWUgd2l0aCBmaWxlIHRyYW5zZmVyPyAoWS9OKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAzLE5VTEwsMCkgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwgImRhdGFjb25uIiwiW1NTTCAtIEZBSUxFRF0iLDApOworICAgICAgICAgICAgICAgICAgICAg ICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0gMDsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAg ICAgICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vsc2UgLyogVENQSVBMSUIg Ki8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3du KGRhdGEsIDErMSk7CisjZW5kaWYgLyogVVNFX1NIVVRET1dOICovCisgICAgICAgICAgICAgICAg ICAgICAgICBjbG9zZShkYXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsZGlu ID0gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGlmICghb3V0MnNjcmVlbiAmJiBkaXNwbGEgJiYgZmRpc3BsYSA9PSBYWUZE X0MpIHsKKyAgICAgICAgICAgICAgICAgICAgZnRzY3JlZW4oU0NSX1RDLDAsKENLX09GRl9UKTAs IkRpc3BsYXkgY2FuY2VsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgLyogZmRpc3BsYSA9IFhZ RkRfQjsgKi8KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc3NsX2No ZWNrX3NlcnZlcl9uYW1lKHNzbF9mdHBfZGF0YV9jb24sZnRwX3VzZXJfaG9zdCkpIHsKKyAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZGF0YWNvbm4iLCJbU1NMIC0gRkFJTEVEXSIsMCk7 CisgICAgICAgICAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyA9IDA7CisjaWZk ZWYgVENQSVBMSUIKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vs c2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICAgICAgICAgICAgICAg ICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAg ICAgICAgICAgICAgICAgY2xvc2UoZGF0YSk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAg ICAgICAgICAgICAgICAgZGF0YSA9IC0xOworICAgICAgICAgICAgICAgICAgICBnbG9iYWxkaW4g PSBkYXRhOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJkYXRhY29u biIsIltTU0wgLSBPS10iLDApOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgLyogVGhpcyBtZXNz ZXMgdXAgdGhlIGZ1bGwgc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLworICAgICAgICBz c2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHMoc3NsX2Z0cF9jb24sMCxzc2xfdmVyYm9zZV9mbGFn KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAgIGlmIChzc2xfZGVidWdfZmxhZykg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiPT5ET05FIFNTTCBjb25uZWN0IG9uIERBVEFcbiIp OworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICB9CisgICAgcmV0dXJuKGRhdGEpOworfQor I2VuZGlmIC8qIENLX1NTTCAqLworCitzdGF0aWMgaW50CitkYXRhY29ubihsbW9kZSkgY2hhciAq bG1vZGU7IHsKKyAgICBpbnQgczsKKyNpZmRlZiBJUF9UT1MKKyAgICBpbnQgdG9zOworI2VuZGlm IC8qIElQX1RPUyAqLworI2lmZGVmIFVDWDUwCisgICAgc3RhdGljIHVfaW50IGZyb21sZW47Cisj ZWxzZQorICAgIHN0YXRpYyBTT0NLT1BUX1QgZnJvbWxlbjsKKyNlbmRpZiAvKiBVQ1g1MCAqLwor CisgICAgZnJvbWxlbiA9IHNpemVvZihoaXNkYXRhYWRkcik7CisKKyNpZm5kZWYgTk9fUEFTU0lW RV9NT0RFCisgICAgaWYgKHBhc3NpdmVtb2RlKSB7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIHNz bF9mdHBfZGF0YV9hY3RpdmVfZmxhZz0wOworICAgICAgICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxh ZyAmJgorICAgICAgICAgICAgKHNzbF9mdHBfcHJveHkgfHwgZnRwX2RwbCA9PSBGUExfUFJWKSkK KyAgICAgICAgICByZXR1cm4oc3NsX2RhdGFjb25uKCkpOworI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgICAgICByZXR1cm4oZGF0YSk7CisgICAgfQorI2VuZGlmIC8qIE5PX1BBU1NJVkVfTU9ERSAq LworCisgICAgcyA9IGFjY2VwdChkYXRhLCAoc3RydWN0IHNvY2thZGRyICopICZoaXNkYXRhYWRk ciwgJmZyb21sZW4pOworICAgIGlmIChzIDwgMCkgeworICAgICAgICBwZXJyb3IoImZ0cDogYWNj ZXB0Iik7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgc29ja2V0X2Nsb3NlKGRhdGEpOworI2Vs c2UgLyogVENQSVBMSUIgKi8KKyNpZmRlZiBVU0VfU0hVVERPV04KKyAgICAgICAgc2h1dGRvd24o ZGF0YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgY2xvc2UoZGF0 YSk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgZGF0YSA9IC0xOworICAgICAgICBn bG9iYWxkaW4gPSBkYXRhOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNpZmRlZiBUQ1BJ UExJQgorICAgIHNvY2tldF9jbG9zZShkYXRhKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisjaWZk ZWYgVVNFX1NIVVRET1dOCisgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNlbmRpZiAvKiBVU0Vf U0hVVERPV04gKi8KKyAgICBjbG9zZShkYXRhKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAg IGRhdGEgPSBzOworICAgIGdsb2JhbGRpbiA9IGRhdGE7CisjaWZkZWYgSVBfVE9TCisjaWZkZWYg SVBUT1NfVEhST1VHSFBVVAorICAgIHRvcyA9IElQVE9TX1RIUk9VR0hQVVQ7CisgICAgaWYgKHNl dHNvY2tvcHQoZGF0YSwgSVBQUk9UT19JUCwgSVBfVE9TLCAoY2hhciAqKSZ0b3MsIHNpemVvZihp bnQpKSA8IDApCisgICAgICBwZXJyb3IoImZ0cDogc2V0c29ja29wdCBUT1MgKGlnbm9yZWQpIik7 CisjZW5kaWYgLyogSVBUT1NfVEhST1VHSFBVVCAqLworI2VuZGlmIC8qIElQX1RPUyAqLworCisj aWZkZWYgQ0tfU1NMCisgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnPTA7CisgICAgaWYgKHNz bF9mdHBfYWN0aXZlX2ZsYWcgJiYKKyAgICAgICAgKHNzbF9mdHBfcHJveHkgfHwgZnRwX2RwbCA9 PSBGUExfUFJWKSkKKyAgICAgIHJldHVybihzc2xfZGF0YWNvbm4oKSk7CisjZW5kaWYgLyogQ0tf U1NMICovCisgICAgcmV0dXJuKGRhdGEpOworfQorCisjaWZkZWYgRlRQX1BST1hZCitzdGF0aWMg c2lndHlwZQorcHNjYW5jZWwoc2lnKSBpbnQgc2lnOyB7CisgICAgY2FuY2VsZmlsZSsrOworfQor CitzdGF0aWMgVk9JRAorcHN3aXRjaChmbGFnKSBpbnQgZmxhZzsgeworICAgIGV4dGVybiBpbnQg cHJveHk7CisgICAgc2lnX3Qgb2xkaW50cjsKKyAgICBzdGF0aWMgc3RydWN0IGNvbXZhcnMgewor ICAgICAgICBpbnQgY29ubmVjdDsKKyAgICAgICAgY2hhciBuYW1lW01BWEhPU1ROQU1FTEVOXTsK KyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIG1jdGw7CisgICAgICAgIHN0cnVjdCBzb2NrYWRk cl9pbiBoY3RsOworICAgICAgICBGSUxFICppbjsKKyAgICAgICAgRklMRSAqb3V0OworICAgICAg ICBpbnQgdHBlOworICAgICAgICBpbnQgY3VydHBlOworICAgICAgICBpbnQgY3BuZDsKKyAgICAg ICAgaW50IHN1bnFlOworICAgICAgICBpbnQgcnVucWU7CisgICAgICAgIGludCBtY3NlOworICAg ICAgICBpbnQgbnRmbGc7CisgICAgICAgIGNoYXIgbnRpWzE3XTsKKyAgICAgICAgY2hhciBudG9b MTddOworICAgICAgICBpbnQgbWFwZmxnOworICAgICAgICBjaGFyIG1pW0NLTUFYUEFUSF07Cisg ICAgICAgIGNoYXIgbW9bQ0tNQVhQQVRIXTsKKyAgICAgICAgY2hhciAqYXV0aHR5cGU7CisgICAg ICAgIGludCBjbHZsOworICAgICAgICBpbnQgZGx2bDsKKyNpZmRlZiBGVFBfS1JCNAorICAgICAg ICBkZXNfY2Jsb2NrIHNlc3Npb247CisgICAgICAgIGRlc19rZXlfc2NoZWR1bGUgZnRwX3NjaGVk OworI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZkZWYgRlRQX0dTU0FQSQorICAgICAgICBnc3Nf Y3R4X2lkX3QgZ2NvbnRleHQ7CisjZW5kaWYgLyogR1NTQVBJICovCisgICAgfSBwcm94c3RydWN0 LCB0bXBzdHJ1Y3Q7CisgICAgc3RydWN0IGNvbXZhcnMgKmlwLCAqb3A7CisKKyAgICBjYW5jZWxm aWxlID0gMDsKKyAgICBvbGRpbnRyID0gc2lnbmFsKFNJR0lOVCwgcHNjYW5jZWwpOworICAgIGlm IChmbGFnKSB7CisgICAgICAgIGlmIChwcm94eSkKKyAgICAgICAgICByZXR1cm47CisgICAgICAg IGlwID0gJnRtcHN0cnVjdDsKKyAgICAgICAgb3AgPSAmcHJveHN0cnVjdDsKKyAgICAgICAgcHJv eHkrKzsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXByb3h5KQorICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgaXAgPSAmcHJveHN0cnVjdDsKKyAgICAgICAgb3AgPSAmdG1wc3RydWN0Owor ICAgICAgICBwcm94eSA9IDA7CisgICAgfQorICAgIGlwLT5jb25uZWN0ID0gY29ubmVjdGVkOwor ICAgIGNvbm5lY3RlZCA9IG9wLT5jb25uZWN0OworICAgIGlmIChmdHBfaG9zdCkgeworICAgICAg ICBzdHJuY3B5KGlwLT5uYW1lLCBmdHBfaG9zdCwgTUFYSE9TVE5BTUVMRU4gLSAxKTsKKyAgICAg ICAgaXAtPm5hbWVbTUFYSE9TVE5BTUVMRU4gLSAxXSA9ICdcMCc7CisgICAgICAgIGlwLT5uYW1l W3N0cmxlbihpcC0+bmFtZSldID0gJ1wwJzsKKyAgICB9IGVsc2UKKyAgICAgIGlwLT5uYW1lWzBd ID0gMDsKKyAgICBmdHBfaG9zdCA9IG9wLT5uYW1lOworICAgIGlwLT5oY3RsID0gaGlzY3RsYWRk cjsKKyAgICBoaXNjdGxhZGRyID0gb3AtPmhjdGw7CisgICAgaXAtPm1jdGwgPSBteWN0bGFkZHI7 CisgICAgbXljdGxhZGRyID0gb3AtPm1jdGw7CisgICAgaXAtPmluID0gY3NvY2tldDsKKyAgICBj c29ja2V0ID0gb3AtPmluOworICAgIGlwLT5vdXQgPSBjc29ja2V0OworICAgIGNzb2NrZXQgPSBv cC0+b3V0OworICAgIGlwLT50cGUgPSBmdHBfdHlwOworICAgIGZ0cF90eXAgPSBvcC0+dHBlOwor ICAgIGlwLT5jdXJ0cGUgPSBjdXJ0eXBlOworICAgIGN1cnR5cGUgPSBvcC0+Y3VydHBlOworICAg IGlwLT5jcG5kID0gY3BlbmQ7CisgICAgY3BlbmQgPSBvcC0+Y3BuZDsKKyAgICBpcC0+c3VucWUg PSBmdHBfdXNuOworICAgIGZ0cF91c24gPSBvcC0+c3VucWU7CisgICAgaXAtPm1jc2UgPSBtY2Fz ZTsKKyAgICBtY2FzZSA9IG9wLT5tY3NlOworICAgIGlwLT5udGZsZyA9IG50ZmxhZzsKKyAgICBu dGZsYWcgPSBvcC0+bnRmbGc7CisgICAgc3RybmNweShpcC0+bnRpLCBudGluLCAxNik7CisgICAg KGlwLT5udGkpW3N0cmxlbihpcC0+bnRpKV0gPSAnXDAnOworICAgIHN0cmNweShudGluLCBvcC0+ bnRpKTsKKyAgICBzdHJuY3B5KGlwLT5udG8sIG50b3V0LCAxNik7CisgICAgKGlwLT5udG8pW3N0 cmxlbihpcC0+bnRvKV0gPSAnXDAnOworICAgIHN0cmNweShudG91dCwgb3AtPm50byk7CisgICAg aXAtPm1hcGZsZyA9IG1hcGZsYWc7CisgICAgbWFwZmxhZyA9IG9wLT5tYXBmbGc7CisgICAgc3Ry bmNweShpcC0+bWksIG1hcGluLCBDS01BWFBBVEggLSAxKTsKKyAgICAoaXAtPm1pKVtzdHJsZW4o aXAtPm1pKV0gPSAnXDAnOworICAgIHN0cmNweShtYXBpbiwgb3AtPm1pKTsKKyAgICBzdHJuY3B5 KGlwLT5tbywgbWFwb3V0LCBDS01BWFBBVEggLSAxKTsKKyAgICAoaXAtPm1vKVtzdHJsZW4oaXAt Pm1vKV0gPSAnXDAnOworICAgIHN0cmNweShtYXBvdXQsIG9wLT5tbyk7CisgICAgaXAtPmF1dGh0 eXBlID0gYXV0aF90eXBlOworICAgIGF1dGhfdHlwZSA9IG9wLT5hdXRodHlwZTsKKyAgICBpcC0+ Y2x2bCA9IGZ0cF9jcGw7CisgICAgZnRwX2NwbCA9IG9wLT5jbHZsOworICAgIGlwLT5kbHZsID0g ZnRwX2RwbDsKKyAgICBmdHBfZHBsID0gb3AtPmRsdmw7CisgICAgaWYgKCFmdHBfY3BsKQorICAg ICAgZnRwX2NwbCA9IEZQTF9DTFI7CisgICAgaWYgKCFmdHBfZHBsKQorICAgICAgZnRwX2RwbCA9 IEZQTF9DTFI7CisjaWZkZWYgRlRQX0tSQjQKKyAgICBtZW1jcHkoaXAtPnNlc3Npb24sIGZ0cF9j cmVkLnNlc3Npb24sIHNpemVvZihmdHBfY3JlZC5zZXNzaW9uKSk7CisgICAgbWVtY3B5KGZ0cF9j cmVkLnNlc3Npb24sIG9wLT5zZXNzaW9uLCBzaXplb2YoZnRwX2NyZWQuc2Vzc2lvbikpOworICAg IG1lbWNweShpcC0+c2NoZWR1bGUsIGZ0cF9zY2hlZCwgc2l6ZW9mKGZ0cF9zY2hlZCkpOworICAg IG1lbWNweShmdHBfc2NoZWQsIG9wLT5zY2hlZHVsZSwgc2l6ZW9mKGZ0cF9zY2hlZCkpOworI2Vu ZGlmIC8qIEZUUF9LUkI0ICovCisjaWZkZWYgRlRQX0dTU0FQSQorICAgIGlwLT5nY29udGV4dCA9 IGdjb250ZXh0OworICAgIGdjb250ZXh0ID0gb3AtPmdjb250ZXh0OworI2VuZGlmIC8qIEdTU0FQ SSAqLworICAgIHNpZ25hbChTSUdJTlQsIG9sZGludHIpOworICAgIGlmIChjYW5jZWxmaWxlKSB7 CisgICAgICAgIGNhbmNlbGZpbGUgPSAwOworICAgICAgICBkZWJ1ZyhGMTAxLCJwc3dpdGNoIGNh bmNlbGZpbGUgQiIsIiIsY2FuY2VsZmlsZSk7CisgICAgICAgICgqb2xkaW50cikoU0lHSU5UKTsK KyAgICB9Cit9CisKK3N0YXRpYyBzaWd0eXBlCitjYW5jZWxwdChzaWcpIGludCBzaWc7IHsKKyAg ICBwcmludGYoIlxuIik7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgcHRhYmZsZysrOworICAg IGNhbmNlbGZpbGUgPSAwOworI2lmbmRlZiBPUzIKKyAgICBsb25nam1wKHB0Y2FuY2VsLCAxKTsK KyNlbHNlCisgICAgUG9zdEN0cmxDU2VtKCk7CisjZW5kaWYgLyogT1MyICovCit9CisKK3ZvaWQK K3Byb3h0cmFucyhjbWQsIGxvY2FsLCByZW1vdGUsIHVuaXF1ZSkgY2hhciAqY21kLCAqbG9jYWws ICpyZW1vdGU7IGludCB1bmlxdWU7IHsKKyAgICBzaWdfdCBvbGRpbnRyOworICAgIGludCBzZWNu ZGZsYWcgPSAwLCBwcm94X3R5cGUsIG5mbmQ7CisgICAgY2hhciAqY21kMjsKKyNpZmRlZiBCU0RT RUxFQ1QKKyAgICBmZF9zZXQgbWFzazsKKyNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KKyAgICBzaWd0 eXBlIGNhbmNlbHB0KCk7CisKKyAgICBpZiAoc3RyY21wKGNtZCwgIlJFVFIiKSkKKyAgICAgIGNt ZDIgPSAiUkVUUiI7CisgICAgZWxzZQorICAgICAgY21kMiA9IHVuaXF1ZSA/ICJTVE9VIiA6ICJT VE9SIjsKKyAgICBpZiAoKHByb3hfdHlwZSA9IHR5cGUpID09IDApIHsKKyAgICAgICAgaWYgKHNl cnZlcnR5cGUgPT0gU1lTX1VOSVggJiYgdW5peF9wcm94eSkKKyAgICAgICAgICBwcm94X3R5cGUg PSBGVFRfQklOOworICAgICAgICBlbHNlCisgICAgICAgICAgcHJveF90eXBlID0gRlRUX0FTQzsK KyAgICB9CisgICAgaWYgKGN1cnR5cGUgIT0gcHJveF90eXBlKQorICAgICAgY2hhbmdldHlwZShw cm94X3R5cGUsIDEpOworICAgIGlmIChmdHBjbWQoIlBBU1YiLE5VTEwsMCwwLGZ0cF92Ym0pICE9 IFJFUExZX0NPTVBMRVRFKSB7CisgICAgICAgIHByaW50ZigiUHJveHkgc2VydmVyIGRvZXMgbm90 IHN1cHBvcnQgdGhpcmQgcGFydHkgdHJhbnNmZXJzLlxuIik7CisgICAgICAgIHJldHVybjsKKyAg ICB9CisgICAgcHN3aXRjaCgwKTsKKyAgICBpZiAoIWNvbm5lY3RlZCkgeworICAgICAgICBwcmlu dGYoIk5vIHByaW1hcnkgY29ubmVjdGlvblxuIik7CisgICAgICAgIHBzd2l0Y2goMSk7CisgICAg ICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoY3VydHlw ZSAhPSBwcm94X3R5cGUpCisgICAgICBjaGFuZ2V0eXBlKHByb3hfdHlwZSwgMSk7CisKKyAgICBp ZiAoZnRwY21kKCJQT1JUIixwYXN2LC0xLC0xLGZ0cF92Ym0pICE9IFJFUExZX0NPTVBMRVRFKSB7 CisgICAgICAgIHBzd2l0Y2goMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBS ZXBsYWNlIHdpdGggY2FsbHMgdG8gY2NfZXhlY3V0ZSgpICovCisgICAgaWYgKHNldGptcChwdGNh bmNlbCkpCisgICAgICBnb3RvIGNhbmNlbDsKKyAgICBvbGRpbnRyID0gc2lnbmFsKFNJR0lOVCwg Y2FuY2VscHQpOworICAgIGlmIChmdHBjbWQoY21kLHJlbW90ZSwtMSwtMSxmdHBfdmJtKSAhPSBQ UkVMSU0pIHsKKyAgICAgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7CisgICAgICAgIHBzd2l0 Y2goMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2xlZXAoMjAwMCk7CisgICAgcHN3 aXRjaCgxKTsKKyAgICBzZWNuZGZsYWcrKzsKKyAgICBpZiAoZnRwY21kKGNtZDIsbG9jYWwsLTEs LTEsZnRwX3ZibSkgIT0gUFJFTElNKQorICAgICAgZ290byBjYW5jZWw7CisgICAgcHRmbGFnKys7 CisgICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApOworICAgIHBzd2l0Y2goMCk7CisgICAg Z2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApOworICAgIHNpZ25hbChTSUdJTlQsIG9sZGludHIp OworICAgIHBzd2l0Y2goMSk7CisgICAgcHRmbGFnID0gMDsKKyAgICByZXR1cm47CisKKyAgY2Fu Y2VsOgorICAgIHNpZ25hbChTSUdJTlQsIFNJR19JR04pOworICAgIHB0ZmxhZyA9IDA7CisgICAg aWYgKHN0cmNtcChjbWQsICJSRVRSIikgJiYgIXByb3h5KQorICAgICAgcHN3aXRjaCgxKTsKKyAg ICBlbHNlIGlmICghc3RyY21wKGNtZCwgIlJFVFIiKSAmJiBwcm94eSkKKyAgICAgIHBzd2l0Y2go MCk7CisgICAgaWYgKCFjcGVuZCAmJiAhc2VjbmRmbGFnKSB7ICAvKiBvbmx5IGhlcmUgaWYgY21k ID0gIlNUT1IiIChwcm94eT0xKSAqLworICAgICAgICBpZiAoZnRwY21kKGNtZDIsbG9jYWwsLTEs LTEsZnRwX3ZibSkgIT0gUFJFTElNKSB7CisgICAgICAgICAgICBwc3dpdGNoKDApOworICAgICAg ICAgICAgaWYgKGNwZW5kKQorICAgICAgICAgICAgICBjYW5jZWxfcmVtb3RlKDApOworICAgICAg ICB9CisgICAgICAgIHBzd2l0Y2goMSk7CisgICAgICAgIGlmIChwdGFiZmxnKQorICAgICAgICAg IGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7CisgICAgICAg IHJldHVybjsKKyAgICB9CisgICAgaWYgKGNwZW5kKQorICAgICAgY2FuY2VsX3JlbW90ZSgwKTsK KyAgICBwc3dpdGNoKCFwcm94eSk7CisgICAgaWYgKCFjcGVuZCAmJiAhc2VjbmRmbGFnKSB7ICAv KiBvbmx5IGlmIGNtZCA9ICJSRVRSIiAocHJveHk9MSkgKi8KKyAgICAgICAgaWYgKGZ0cGNtZChj bWQyLGxvY2FsLC0xLC0xLGZ0cF92Ym0pICE9IFBSRUxJTSkgeworICAgICAgICAgICAgcHN3aXRj aCgwKTsKKyAgICAgICAgICAgIGlmIChjcGVuZCkKKyAgICAgICAgICAgICAgY2FuY2VsX3JlbW90 ZSgwKTsKKyAgICAgICAgICAgIHBzd2l0Y2goMSk7CisgICAgICAgICAgICBpZiAocHRhYmZsZykK KyAgICAgICAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAgICAgICAgc2lnbmFsKFNJR0lOVCwg b2xkaW50cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg KGNwZW5kKQorICAgICAgY2FuY2VsX3JlbW90ZSgwKTsKKyAgICBwc3dpdGNoKCFwcm94eSk7Cisg ICAgaWYgKGNwZW5kKSB7CisjaWZkZWYgQlNEU0VMRUNUCisgICAgICAgIEZEX1pFUk8oJm1hc2sp OworICAgICAgICBGRF9TRVQoY3NvY2tldCwgJm1hc2spOworICAgICAgICBpZiAoKG5mbmQgPSBl bXB0eSgmbWFzaywgMTApKSA8PSAwKSB7CisgICAgICAgICAgICBpZiAobmZuZCA8IDApIHsKKyAg ICAgICAgICAgICAgICBwZXJyb3IoImNhbmNlbCIpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKHB0YWJmbGcpCisgICAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgICAg IGxvc3RwZWVyKCk7CisgICAgICAgIH0KKyNlbHNlIC8qIEJTRFNFTEVDVCAqLworI2lmZGVmIElC TVNFTEVDVAorICAgICAgICBpZiAoKG5mbmQgPSBlbXB0eSgmY3NvY2tldCwgMSwgMTApKSA8PSAw KSB7CisgICAgICAgICAgICBpZiAobmZuZCA8IDApIHsKKyAgICAgICAgICAgICAgICBwZXJyb3Io ImNhbmNlbCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHB0YWJmbGcpCisgICAg ICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgICAgIGxvc3RwZWVyKCk7CisgICAgICAg IH0KKyNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KKyNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KKyAgICAg ICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApOworICAgICAgICBnZXRyZXBseSgwLC0xLC0x LGZ0cF92Ym0sMCk7CisgICAgfQorICAgIGlmIChwcm94eSkKKyAgICAgIHBzd2l0Y2goMCk7Cisg ICAgcHN3aXRjaCgxKTsKKyAgICBpZiAocHRhYmZsZykKKyAgICAgIGZ0cGNvZGUgPSAtMTsKKyAg ICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKK30KKyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KKwor I2lmZGVmIEZUUF9TRUNVUklUWQorI2lmZGVmIEZUUF9HU1NBUEkKKworI2lmZGVmIENPTU1FTlQK Ky8qIGNrX2dzc19tZWNoX2tyYjUgaXMgbm90IGRlY2xhcmVkIGFueXdoZXJlICovCitzdHJ1Y3Qg eworICAgIENPTlNUIGdzc19PSURfZGVzYyAqIENPTlNUICogbWVjaF90eXBlOworICAgIGNoYXIg KnNlcnZpY2VfbmFtZTsKK30gZ3NzX3RyaWFsc1tdID0geworICAgIHsgJmNrX2dzc19tZWNoX2ty YjUsICJmdHAiIH0sCisgICAgeyAmY2tfZ3NzX21lY2hfa3JiNSwgImhvc3QiIH0sCit9OworI2Vs c2UKKy8qIFRoaXMgbWF0Y2hlcyB3aGF0IGlzIGRlY2xhcmVkIGFib3ZlICovCitzdHJ1Y3Qgewor ICAgIENPTlNUIGdzc19PSURfZGVzYyAqIENPTlNUICogbWVjaF90eXBlOworICAgIGNoYXIgKnNl cnZpY2VfbmFtZTsKK30gZ3NzX3RyaWFsc1tdID0geworICAgIHsgJmdzc19tZWNoX2tyYjUsICJm dHAiIH0sCisgICAgeyAmZ3NzX21lY2hfa3JiNSwgImhvc3QiIH0sCit9OworI2VuZGlmCS8qIENP TU1FTlQgKi8KKworCitpbnQgbl9nc3NfdHJpYWxzID0gc2l6ZW9mKGdzc190cmlhbHMpL3NpemVv Zihnc3NfdHJpYWxzWzBdKTsKKyNlbmRpZiAvKiBGVFBfR1NTQVBJICovCisKK3N0YXRpYyBpbnQK K2Z0cF9hdXRoKCkgeworICAgIGV4dGVybiBpbnQgc2V0c2FmZSgpOworICAgIGludCBqID0gMCwg bjsKKyNpZmRlZiBGVFBfS1JCNAorICAgIGNoYXIgKnNlcnZpY2UsIGluc3RbSU5TVF9TWl07Cisg ICAgVUxPTkcgY2tzdW07CisgICAgVUxPTkcgY2hlY2tzdW0gPSAoVUxPTkcpIGdldHBpZCgpOwor ICAgIENIQVIgb3V0X2J1ZltGVFBfQlVGU0laXTsKKyAgICBpbnQgaTsKKyNlbHNlIC8qIEZUUF9L UkI0ICovCisjaWZkZWYgRlRQX0dTU0FQSQorICAgIENIQVIgb3V0X2J1ZltGVFBfQlVGU0laXTsK KyAgICBpbnQgaTsKKyNlbmRpZiAvKiBGVFBfR1NTQVBJICovCisjZW5kaWYgLyogRlRQX0tSQjQg Ki8KKworICAgIGlmIChzc2xfZnRwX3Byb3h5KSAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBh bGxvdyBBVVRIIG92ZXIgU1NMIHByb3h5ICovCisgICAgICAgIHJldHVybigwKTsKKworICAgIGlm IChhdXRoX3R5cGUpCisgICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog YXV0aCBhbHJlYWR5IHN1Y2NlZWRlZCAqLworCisgICAgLyogVHJ5IGVhY2ggYXV0aCB0eXBlIGFz IHNwZWNpZmllZCBieSB0aGUgZW5kIHVzZXIgKi8KKyAgICBmb3IgKGogPSAwOyBqIDwgOCAmJiBm dHBfYXV0aF90eXBlW2pdICE9IDA7IGorKykgeworI2lmZGVmIEZUUF9HU1NBUEkKKyAgICAgICAg aWYgKGZ0cF9hdXRoX3R5cGVbal0gPT0gRlRBX0dLNSAmJiBja19nc3NhcGlfaXNfaW5zdGFsbGVk KCkpIHsKKyAgICAgICAgICAgIG4gPSBmdHBjbWQoIkFVVEggR1NTQVBJIixOVUxMLDAsMCxmdHBf dmJtKTsKKyAgICAgICAgICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7CisgICAgICAgICAg ICAgICAgT01fdWludDMyIG1hal9zdGF0LCBtaW5fc3RhdDsKKyAgICAgICAgICAgICAgICBnc3Nf bmFtZV90IHRhcmdldF9uYW1lOworICAgICAgICAgICAgICAgIGdzc19idWZmZXJfZGVzYyBzZW5k X3RvaywgcmVjdl90b2ssICp0b2tlbl9wdHI7CisgICAgICAgICAgICAgICAgY2hhciBzdGJ1ZltG VFBfQlVGU0laXTsKKyAgICAgICAgICAgICAgICBpbnQgY29tY29kZSwgdHJpYWw7CisgICAgICAg ICAgICAgICAgc3RydWN0IGdzc19jaGFubmVsX2JpbmRpbmdzX3N0cnVjdCBjaGFuOworICAgICAg ICAgICAgICAgIGNoYXIgKiByZWFsbSA9IE5VTEw7CisgICAgICAgICAgICAgICAgY2hhciB0Z3Rb MjU2XTsKKworICAgICAgICAgICAgICAgIGNoYW4uaW5pdGlhdG9yX2FkZHJ0eXBlID0gR1NTX0Nf QUZfSU5FVDsgLyogT01fdWludDMyICAqLworICAgICAgICAgICAgICAgIGNoYW4uaW5pdGlhdG9y X2FkZHJlc3MubGVuZ3RoID0gNDsKKyAgICAgICAgICAgICAgICBjaGFuLmluaXRpYXRvcl9hZGRy ZXNzLnZhbHVlID0gJm15Y3RsYWRkci5zaW5fYWRkci5zX2FkZHI7CisgICAgICAgICAgICAgICAg Y2hhbi5hY2NlcHRvcl9hZGRydHlwZSA9IEdTU19DX0FGX0lORVQ7IC8qIE9NX3VpbnQzMiAqLwor ICAgICAgICAgICAgICAgIGNoYW4uYWNjZXB0b3JfYWRkcmVzcy5sZW5ndGggPSA0OworICAgICAg ICAgICAgICAgIGNoYW4uYWNjZXB0b3JfYWRkcmVzcy52YWx1ZSA9ICZoaXNjdGxhZGRyLnNpbl9h ZGRyLnNfYWRkcjsKKyAgICAgICAgICAgICAgICBjaGFuLmFwcGxpY2F0aW9uX2RhdGEubGVuZ3Ro ID0gMDsKKyAgICAgICAgICAgICAgICBjaGFuLmFwcGxpY2F0aW9uX2RhdGEudmFsdWUgPSAwOwor CisgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICAgIHByaW50Zigi R1NTQVBJIGFjY2VwdGVkIGFzIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiIpOworCisgICAgICAgICAg ICAgICAgcmVhbG0gPSBja19rcmI1X3JlYWxtb2Zob3N0KGZ0cF91c2VyX2hvc3QpOworICAgICAg ICAgICAgICAgIGlmIChyZWFsbSkgeworICAgICAgICAgICAgICAgICAgICBja21ha21zZyh0Z3Qs c2l6ZW9mKHRndCksImtyYnRndC8iLHJlYWxtLCJAIixyZWFsbSk7CisgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImZ0cF9hdXRoKEdTU0FQSSkgVEdUIix0Z3QsMCk7CisgICAgICAgICAg ICAgICAgICAgIGlmICgga3JiNV9hdXRvZ2V0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAg ISgoY2tfa3JiNV90a3RfaXN2YWxpZChOVUxMLHRndCkgPiAwKSB8fAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChja19rcmI1X2lzX3RndF92YWxpZCgpID4gMCkpICkKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNrX2tyYjVfYXV0b2dldF9UR1QocmVhbG0pOworICAgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICAgIC8qIEJsb2IgZnJvbSBnc3MtY2xpZW50ICovCisgICAgICAg ICAgICAgICAgZm9yICh0cmlhbCA9IDA7IHRyaWFsIDwgbl9nc3NfdHJpYWxzOyB0cmlhbCsrKSB7 CisgICAgICAgICAgICAgICAgICAgIC8qIGZ0cEBob3N0bmFtZSBmaXJzdCwgdGhlIGhvc3RAaG9z dG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogdGhlIFY1IEdTU0FQSSBiaW5kaW5nIGNh bm9uaWNhbGl6ZXMgdGhpcyBmb3IgdXMuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgY2ttYWtt c2coc3RidWYsRlRQX0JVRlNJWiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3Ry aWFsc1t0cmlhbF0uc2VydmljZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi QCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF91c2VyX2hvc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cF9kZWIpCisgICAgICAgICAgICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXV0aGVu dGljYXRpbmcgdG8gPCVzPi4uLlxuIiwgc3RidWYpOworICAgICAgICAgICAgICAgICAgICBzZW5k X3Rvay52YWx1ZSA9IHN0YnVmOworICAgICAgICAgICAgICAgICAgICBzZW5kX3Rvay5sZW5ndGgg PSBzdHJsZW4oc3RidWYpOworICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCA9IGdzc19pbXBv cnRfbmFtZSgmbWluX3N0YXQsICZzZW5kX3RvaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3NzX250X3NlcnZpY2VfbmFtZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldF9uYW1lCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg ICAgIGlmIChtYWpfc3RhdCAhPSBHU1NfU19DT01QTEVURSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LCAicGFyc2luZyBuYW1lIik7 CisgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoIm5hbWUgcGFyc2VkIDwlcz5c biIsIHN0YnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRva2VuX3B0ciA9IEdTU19DX05PX0JV RkZFUjsKKyAgICAgICAgICAgICAgICAgICAgZ2NvbnRleHQgPSBHU1NfQ19OT19DT05URVhUOyAv KiBzdHJ1Y3R1cmUgY29weSAqLworCisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQorICAgICAgICAgICAgICAgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgImNhbGxpbmcgZ3NzX2luaXRfc2VjX2NvbnRleHRcbiIpOworICAgICAg ICAgICAgICAgICAgICAgICAgbWFqX3N0YXQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICBn c3NfaW5pdF9zZWNfY29udGV4dCgmbWluX3N0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05PX0NSRURFTlRJQUwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnY29udGV4dCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X25hbWUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnc3NfT0lEKSAqCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3RyaWFsc1t0 cmlhbF0ubWVjaF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHU1NfQ19NVVRVQUxfRkxBRyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdTU19DX1JFUExBWV9GTEFHIHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ0cF9jZncgPworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfREVMRUdfRkxBRyA6IDApLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhbm5lbCBiaW5k aW5ncyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGtyYjVfZF9ub19hZGRyZXNzZXMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHU1NfQ19OT19DSEFOTkVMX0JJTkRJTkdTIDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYW4pLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5fcHRyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAvKiBpZ25v cmUgbWVjaCB0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZzZW5kX3RvaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgICAgLyogaWdub3JlIHJldF9mbGFncyAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgIC8qIGlnbm9yZSB0aW1lX3JlYyAq LworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09NUExF VEUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCAhPSBHU1NfU19DT05U SU5VRV9ORUVERUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJpYWwgPT0g bl9nc3NfdHJpYWxzLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2dzc19l cnJvcihtYWpfc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1pbl9zdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImluaXRpYWxpemluZyBjb250ZXh0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfcmVsZWFz ZV9uYW1lKCZtaW5fc3RhdCwgJnRhcmdldF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBtYXliZSB3ZSBtaXNzZWQgb24gdGhlIHNlcnZpY2UgbmFtZSAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJfbG9vcDsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW5kX3Rvay5sZW5ndGggIT0gMCkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVwbHlfcGFyc2UgPSAiQURBVD0iOyAvKiBmb3IgZnRwY21kKCkgbGF0ZXIg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSBGVFBfQlVGU0laOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByYWRpeF9lbmNvZGUoc2VuZF90b2sudmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3V0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZW5kX3Rvay5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSQURJWF9FTkNPREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3Ip ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYXNlIDY0IGVuY29kaW5nIGZh aWxlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFk aXhfZXJyb3Ioa2Vycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ3NzX2NvbXBsZXRlX2xv b3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbWNvZGUgPSBmdHBjbWQoIkFEQVQiLG91dF9idWYsLTEsLTEsMCk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbWNvZGUgIT0gUkVQTFlfQ09NUExFVEUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29tY29kZSAhPSBSRVBMWV9DT05USU5VRSAv KiAoMzM1KSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyaWFsID09IG5fZ3NzX3RyaWFscy0xKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQ SSBBREFUIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBmb3JjZSBvdXQgb2YgbG9vcCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFqX3N0YXQgPSBHU1NfU19GQUlMVVJFOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQmFja29mZiB0byB0aGUgdjEgZ3NzYXBpIGlzIHN0aWxsIHBv c3NpYmxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgYSBuZXcgQVVU SCBjb21tYW5kLiAgSWYgdGhhdCBmYWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZXJtaW5hdGUgdGhlIGxvb3AuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdHBjbWQoIkFVVEggR1NT QVBJIixOVUxMLDAsMCxmdHBfdmJtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIT0gUkVQTFlfQ09OVElOVUUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR1NT QVBJIEFEQVQgZmFpbGVkLCBBVVRIIHJlc3RhcnQgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGZvcmNlIG91dCBvZiBsb29wICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYWpfc3RhdCA9IEdTU19TX0ZBSUxVUkU7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ290byBvdXRlcl9sb29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcGx5X3BhcnNlKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIk5vIGF1dGhlbnRpY2F0aW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXJc biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFqX3N0YXQgPT0gR1NT X1NfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Li4uYnV0IG5vIG1vcmUgd2FzIG5lZWRlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnb3RvIGdzc19jb21wbGV0ZV9sb29wOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtaW5fc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJubyByZXBseSwgaHVoPyIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGdzc19jb21wbGV0ZV9sb29wOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAga2Vycm9yID0gcmFkaXhfZW5jb2RlKHJlcGx5X3BhcnNlLG91dF9idWYs aSwmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSQURJWF9ERUNPREUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3Ip IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc2UgNjQgZGVjb2RpbmcgZmFp bGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRp eF9lcnJvcihrZXJyb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBn c3NfY29tcGxldGVfbG9vcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBldmVyeXRoaW5nIHdvcmtlZCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRva2VuX3B0ciA9ICZyZWN2X3RvazsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWN2X3Rvay52YWx1ZSA9IG91dF9idWY7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVjdl90b2subGVuZ3RoID0gbGVuOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IG91 dCBvZiBsb29wIGNsZWFuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc19jb21wbGV0 ZV9sb29wOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWFsID0gbl9nc3NfdHJpYWxz LTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZtaW5f c3RhdCwgJnNlbmRfdG9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfcmVsZWFz ZV9uYW1lKCZtaW5fc3RhdCwgJnRhcmdldF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIG91dGVyX2xvb3A7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIH0gd2hpbGUgKG1hal9zdGF0ID09IEdTU19TX0NPTlRJTlVFX05FRURFRCk7 CisKKyAgICAgICAgICAgICAgICAgIG91dGVyX2xvb3A6CisgICAgICAgICAgICAgICAgICAgIGlm IChtYWpfc3RhdCA9PSBHU1NfU19DT01QTEVURSkKKyAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1hal9zdGF0ID09IEdT U19TX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiR1NTQVBJIGF1dGhl bnRpY2F0aW9uIHN1Y2NlZWRlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5X3BhcnNl ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgYXV0aF90eXBlID0gIkdTU0FQSSI7CisgICAg ICAgICAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSBhdXRoZW50aWNhdGlvbiBm YWlsZWRcbiIpOworICAgICAgICAgICAgICAgICAgICByZXBseV9wYXJzZSA9IE5VTEw7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo ZnRwX2RlYikKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSByZWplY3Rl ZCBhcyBhbiBhdXRoZW50aWNhdGlvbiB0eXBlXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoZnRw Y29kZSA9PSA1MDAgfHwgZnRwY29kZSA9PSA1MDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVy bigwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8K KyNpZmRlZiBGVFBfU1JQCisgICAgICAgIGlmIChmdHBfYXV0aF90eXBlW2pdID09IEZUQV9TUlAg JiYgY2tfc3JwX2lzX2luc3RhbGxlZCgpKSB7CisgICAgICAgICAgICBpZiAoc3JwX2Z0cF9hdXRo KGZ0cF91c2VyX2hvc3QsTlVMTCxOVUxMKSkKKyAgICAgICAgICAgICAgcmV0dXJuKDEpOworICAg ICAgICAgICAgZWxzZSBpZiAoZnRwY29kZSA9PSA1MDAgfHwgZnRwY29kZSA9PSA1MDIpCisgICAg ICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEZUUF9TUlAgKi8KKyNp ZmRlZiBGVFBfS1JCNAorICAgICAgICBpZiAoZnRwX2F1dGhfdHlwZVtqXSA9PSBGVEFfSzQgJiYg Y2tfa3JiNF9pc19pbnN0YWxsZWQoKSkgeworICAgICAgICAgICAgbiA9IGZ0cGNtZCgiQVVUSCBL RVJCRVJPU19WNCIsTlVMTCwwLDAsZnRwX3ZibSk7CisgICAgICAgICAgICBpZiAobiA9PSBSRVBM WV9DT05USU5VRSkgeworICAgICAgICAgICAgICAgIGNoYXIgdGd0WzQqUkVBTE1fU1orMV07Cisg ICAgICAgICAgICAgICAgaW50IHJjOworCisgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAg ICAgICAgICAgICAgICAgIHByaW50ZigiS0VSQkVST1NfVjQgYWNjZXB0ZWQgYXMgYXV0aGVudGlj YXRpb24gdHlwZVxuIik7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGluc3QsIChjaGFyICop IGtyYl9nZXRfcGhvc3QoZnRwX3VzZXJfaG9zdCksSU5TVF9TWik7CisgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KGZ0cF9yZWFsbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilj a19rcmI0X3JlYWxtb2Zob3N0KGZ0cF91c2VyX2hvc3QpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBSRUFMTV9TWgorICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAg ICAgICAgY2ttYWttc2codGd0LHNpemVvZih0Z3QpLCJrcmJ0Z3QuIixmdHBfcmVhbG0sIkAiLGZ0 cF9yZWFsbSk7CisgICAgICAgICAgICAgICAgcmMgPSBja19rcmI0X3RrdF9pc3ZhbGlkKHRndCk7 CisKKyAgICAgICAgICAgICAgICBpZiAocmMgPD0gMCAmJiBrcmI0X2F1dG9nZXQpCisgICAgICAg ICAgICAgICAgICBja19rcmI0X2F1dG9nZXRfVEdUKGZ0cF9yZWFsbSk7CisKKyAgICAgICAgICAg ICAgICBzZXJ2aWNlID0gImZ0cCI7CisgICAgICAgICAgICAgICAga2Vycm9yID0ga3JiX21rX3Jl cSgmZnRwX3RrdCxzZXJ2aWNlLGluc3QsZnRwX3JlYWxtLGNoZWNrc3VtKTsKKyAgICAgICAgICAg ICAgICBpZiAoa2Vycm9yID09IEtEQ19QUl9VTktOT1dOKSB7CisgICAgICAgICAgICAgICAgICAg IHNlcnZpY2UgPSAicmNtZCI7CisgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9ta19y ZXEoJmZ0cF90a3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vy dmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9yZWFsbSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGlmIChrZXJyb3IpCisgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIktl cmJlcm9zIFY0IGtyYl9ta19yZXEgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAga3JiX2dldF9lcnJfdGV4dChrZXJyb3IpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWtl cnJvcikgeworICAgICAgICAgICAgICAgICAgICBrZXJyb3IgPSBrcmJfZ2V0X2NyZWQoc2Vydmlj ZSwgaW5zdCwgZnRwX3JlYWxtLCZmdHBfY3JlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChr ZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJLZXJiZXJvcyBW NCBrcmJfZ2V0X2NyZWQgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtyYl9nZXRfZXJyX3RleHQoa2Vycm9yKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlmICgha2Vycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGludCByYzsKKyAg ICAgICAgICAgICAgICAgICAgcmMgPSBkZXNfa2V5X3NjaGVkKGZ0cF9jcmVkLnNlc3Npb24sIGZ0 cF9zY2hlZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkgeworICAgICAgICAg ICAgICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIERFUyBrZXkgc3BlY2lmaWVkIGluIGNyZWRl bnRpYWxzXHJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmdHBfYXV0 aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIERFUyBLZXkgc3BlY2lm aWVkIGluIGNyZWRlbnRpYWxzIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgg cmMgPT0gLTIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9XZWFrIERFUyBr ZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzXHJcbiIpOworICAgICAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiZnRwX2F1dGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IndlYWsgREVTIEtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHMiLDApOworICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKCByYyAhPSAwICkgeworICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCI/REVTIEtleSBTY2hlZHVsZSBub3Qgc2V0IGJ5IGNyZWRlbnRpYWxzXHJcbiIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnRwX2F1dGgiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkRFUyBLZXkgU2NoZWR1bGUgbm90IHNldCBieSBjcmVkZW50 aWFscyIsMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVw bHlfcGFyc2UgPSAiQURBVD0iOworICAgICAgICAgICAgICAgICAgICBpID0gRlRQX0JVRlNJWjsK KyAgICAgICAgICAgICAgICAgICAga2Vycm9yID0gcmFkaXhfZW5jb2RlKGZ0cF90a3QuZGF0LCBv dXRfYnVmLCBmdHBfdGt0Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZpLCBSQURJWF9FTkNPREUpOworICAgICAgICAgICAgICAgICAgICBpZiAoa2Vy cm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhc2UgNjQg ZW5jb2RpbmcgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmFkaXhfZXJyb3Ioa2Vycm9yKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGtyYjRf ZXJyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChpID4g RlRQX0JVRlNJWiAtIDYpCisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QURBVCBkYXRh IHRvbyBsb25nXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ0cGNtZCgiQURBVCIsb3V0 X2J1ZiwtMSwtMSwwKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgUkVQTFlfQ09NUExFVEUp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiS2VyYmVyb3MgVjQg YXV0aGVudGljYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g a3JiNF9lcnI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg KCFyZXBseV9wYXJzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBhdXRoZW50aWNhdGlvbiBkYXRhIHJl Y2VpdmVkIGZyb20gc2VydmVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8ga3Ji NF9lcnI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaSA9IHNp emVvZihvdXRfYnVmKTsKKyAgICAgICAgICAgICAgICAgICAga2Vycm9yID0KKyAgICAgICAgICAg ICAgICAgICAgICByYWRpeF9lbmNvZGUocmVwbHlfcGFyc2UsIG91dF9idWYsIDAsICZpLCBSQURJ WF9ERUNPREUpOworICAgICAgICAgICAgICAgICAgICBpZiAoa2Vycm9yKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhc2UgNjQgZGVjb2RpbmcgZmFpbGVkOiAl c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXhfZXJyb3Ioa2Vycm9y KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGtyYjRfZXJyOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9yZF9zYWZlKG91dF9i dWYsIGksCisjaWZkZWYgS1JCNTI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZ0cF9jcmVkLnNlc3Npb24sCisjZWxzZSAvKiBLUkI1MjQgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cF9jcmVkLnNlc3Npb24sCisjZW5kaWYg LyogS1JCNTI0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZo aXNjdGxhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlj dGxhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX21z Z19kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgICAgIGlmIChrZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiS2VyYmVyb3MgVjQga3JiX3JkX3NhZmUgZmFpbGVkOiAlc1xuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3JiX2dldF9lcnJfdGV4dChrZXJyb3IpKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8ga3JiNF9lcnI7CisgICAgICAgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKiBmZXRjaCB0aGUgKG1vZGlmaWVkKSBjaGVj a3N1bSAqLworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmNrc3VtLCBmdHBfbXNnX2RhdGEu YXBwX2RhdGEsIHNpemVvZihja3N1bSkpOworICAgICAgICAgICAgICAgICAgICBpZiAobnRvaGwo Y2tzdW0pID09IGNoZWNrc3VtICsgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0 cF92Ym0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiS2VyYmVyb3MgVjQgYXV0 aGVudGljYXRpb24gc3VjY2VlZGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5 X3BhcnNlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfdHlwZSA9ICJLRVJC RVJPU19WNCI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIFY0IG11dHVhbCBhdXRoZW50 aWNhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgICAgICAga3JiNF9lcnI6CisgICAgICAg ICAgICAgICAgICAgIHJlcGx5X3BhcnNlID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChmdHBfZGViKQorCQkgIGZwcmlu dGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICJLRVJCRVJPU19WNCByZWplY3RlZCBh cyBhbiBhdXRoZW50aWNhdGlvbiB0eXBlXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoZnRwY29k ZSA9PSA1MDAgfHwgZnRwY29kZSA9PSA1MDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZk ZWYgQ0tfU1NMCisgICAgICAgIGlmIChmdHBfYXV0aF90eXBlW2pdID09IEZUQV9UTFMgJiYgY2tf c3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7CisjaWZkZWYgRlRQSE9TVAorICAgICAgICAgICAgaWYg KCFob3N0Y21kKSB7CisgICAgICAgICAgICAgICAgZnRwY21kKCJIT1NUIixmdHBfdXNlcl9ob3N0 LDAsMCwwKTsKKyAgICAgICAgICAgICAgICBob3N0Y21kID0gMTsKKyAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBGVFBIT1NUICovCisgICAgICAgICAgICBuID0gZnRwY21kKCJBVVRIIFRMUyIsTlVM TCwwLDAsZnRwX3ZibSk7CisgICAgICAgICAgICBpZiAobiAhPSBSRVBMWV9DT01QTEVURSkKKyAg ICAgICAgICAgICAgbiA9IGZ0cGNtZCgiQVVUSCBUTFMtUCIsTlVMTCwwLDAsZnRwX3ZibSk7Cisg ICAgICAgICAgICBpZiAobiA9PSBSRVBMWV9DT01QTEVURSkgeworICAgICAgICAgICAgICAgIGlm ICghcXVpZXQpCisgICAgICAgICAgICAgICAgICBwcmludGYoIlRMUyBhY2NlcHRlZCBhcyBhdXRo ZW50aWNhdGlvbiB0eXBlXG4iKTsKKworICAgICAgICAgICAgICAgIGF1dGhfdHlwZSA9ICJUTFMi OworICAgICAgICAgICAgICAgIHNzbF9hdXRoKCk7CisgICAgICAgICAgICAgICAgaWYgKHNzbF9m dHBfYWN0aXZlX2ZsYWcgKSB7CisgICAgICAgICAgICAgICAgICAgIGZ0cF9kcGwgPSBGUExfQ0xS OworICAgICAgICAgICAgICAgICAgICBmdHBfY3BsID0gRlBMX1BSVjsKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCJUTFMgYXV0aGVudGljYXRpb24gZmFpbGVkXG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgYXV0aF90eXBlID0gTlVMTDsKKyNpZmRlZiBUQ1BJUExJQgorICAg ICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UoY3NvY2tldCk7CisjZWxzZSAvKiBUQ1BJUExJ QiAqLworI2lmZGVmIFVTRV9TSFVURE9XTgorICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bihj c29ja2V0LCAxKzEpOworI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgICAgICAgICAgICAg ICAgICBjbG9zZShjc29ja2V0KTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAg ICAgICAgICBjc29ja2V0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfaG9va3Vw KGZ0cF91c2VyX2hvc3QsZnRwX3BvcnQsMCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBpZiAoZnRwX2RlYikKKwkJICBmcHJpbnRmKHN0ZGVyciwiVExTIHJlamVj dGVkIGFzIGFuIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiIpOworICAgICAgICAgICAgICAgIGlmIChm dHBjb2RlID09IDUwMCB8fCBmdHBjb2RlID09IDUwMikKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmdHBfYXV0aF90 eXBlW2pdID09IEZUQV9TU0wgJiYgY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7CisjaWZkZWYg RlRQSE9TVAorICAgICAgICAgICAgaWYgKCFob3N0Y21kKSB7CisgICAgICAgICAgICAgICAgZnRw Y21kKCJIT1NUIixmdHBfdXNlcl9ob3N0LDAsMCwwKTsKKyAgICAgICAgICAgICAgICBob3N0Y21k ID0gMTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBGVFBIT1NUICovCisgICAgICAgICAgICBu ID0gZnRwY21kKCJBVVRIIFNTTCIsTlVMTCwwLDAsZnRwX3ZibSk7CisgICAgICAgICAgICBpZiAo biA9PSBSRVBMWV9DT05USU5VRSB8fCBuID09IFJFUExZX0NPTVBMRVRFKSB7CisgICAgICAgICAg ICAgICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiU1NMIGFjY2VwdGVk IGFzIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiIpOworICAgICAgICAgICAgICAgIGF1dGhfdHlwZSA9 ICJTU0wiOworICAgICAgICAgICAgICAgIHNzbF9hdXRoKCk7CisgICAgICAgICAgICAgICAgaWYg KHNzbF9mdHBfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZnRwX2RwbCA9IEZQ TF9QUlY7CisgICAgICAgICAgICAgICAgICAgIGZ0cF9jcGwgPSBGUExfUFJWOworICAgICAgICAg ICAgICAgICAgICBzZXRwcm90YnVmKDE8PDIwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu KDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCJTU0wgYXV0aGVudGljYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAg ICAgICAgYXV0aF90eXBlID0gTlVMTDsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAg ICAgICBzb2NrZXRfY2xvc2UoY3NvY2tldCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVm IFVTRV9TSFVURE9XTgorICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bihjc29ja2V0LCAxKzEp OworI2VuZGlmIC8qIFVTRV9TSFVURE9XTiAqLworICAgICAgICAgICAgICAgICAgICBjbG9zZShj c29ja2V0KTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICAgICAgICBjc29j a2V0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIGlmIChmdHBfaG9va3VwKGZ0cF91c2VyX2hv c3QsZnRwX3BvcnQsMCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7 CisgICAgICAgICAgICAgICAgfQorCSAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChm dHBfZGViKQorCQkgIGZwcmludGYoc3RkZXJyLCAiU1NMIHJlamVjdGVkIGFzIGFuIGF1dGhlbnRp Y2F0aW9uIHR5cGVcbiIpOworICAgICAgICAgICAgICAgIGlmIChmdHBjb2RlID09IDUwMCB8fCBm dHBjb2RlID09IDUwMikKKwkJICByZXR1cm4oMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgLyogT3RoZXIgYXV0aCB0eXBlcyBnbyBoZXJl IC4uLiAqLworICAgIH0gLyogZm9yIChqOzspICovCisgICAgcmV0dXJuKDApOworfQorI2VuZGlm IC8qIEZUUF9TRUNVUklUWSAqLworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NldHBy b3RidWYodW5zaWduZWQgaW50IHNpemUpCisjZWxzZQorc2V0cHJvdGJ1ZihzaXplKSB1bnNpZ25l ZCBpbnQgc2l6ZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2V0cHJvdGJ1ZiAqLyB7Cisg ICAgaWYgKHVjYnVmKQorICAgICAgZnJlZSh1Y2J1Zik7CisgICAgdWNidWYgPSBOVUxMOworICAg IHVjYnVmc2l6ID0gMDsKKyAgICBhY3R1YWxidWYgPSBzaXplOworICAgIHdoaWxlICgodWNidWYg PSAoQ0hBUiAqKW1hbGxvYyhhY3R1YWxidWYpKSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChhY3R1 YWxidWYpCisgICAgICAgICAgYWN0dWFsYnVmIC89IDI7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICByZXR1cm4oMCk7CisgICAgfQorICAgIHVjYnVmc2l6ID0gYWN0dWFsYnVmIC0gRlVER0VfRkFD VE9SOworICAgIGRlYnVnKEYxMDEsInNldHByb3RidWYgdWNidWZzaXoiLCIiLHVjYnVmc2l6KTsK KyAgICBpZiAodWNidWZzaXogPCAxMjgpIHsKKyAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiB0aW55 IHVjYnVmc2l6OiAlZFxuIix1Y2J1ZnNpeik7CisgICAgfSBlbHNlIGlmICh1Y2J1ZnNpeiA8IDAp IHsKKyAgICAgICAgcHJpbnRmKCJFUlJPUjogdWNidWYgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgbWF4YnVmID0gYWN0dWFsYnVmOworICAg IHJldHVybigxKTsKK30KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitzZXRwYnN6KHVu c2lnbmVkIGludCBzaXplKQorI2Vsc2UKK3NldHBic3ooc2l6ZSkgdW5zaWduZWQgaW50IHNpemU7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNldHBic3ogKi8geworICAgIGlmICghc2V0cHJv dGJ1ZihzaXplKSkgeworICAgICAgICBwZXJyb3IoIj9FcnJvciB3aGlsZSB0cnlpbmcgdG8gbWFs bG9jIFBST1QgYnVmZmVyOiIpOworI2lmZGVmIEZUUF9TUlAKKyAgICAgICAgc3JwX3Jlc2V0KCk7 CisjZW5kaWYgLyogRlRQX1NSUCAqLworICAgICAgICBmdHBjbG9zZSgpOworICAgICAgICByZXR1 cm4oLTEpOworICAgIH0KKyAgICByZXBseV9wYXJzZSA9ICJQQlNaPSI7CisgICAgY2ttYWttc2co ZnRwY21kYnVmLEZUUF9CVUZTSVosIlBCU1ogIiwKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAg ICBzc2xfZnRwX2FjdGl2ZV9mbGFnID8gIjAiIDoKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAg ICAgICAgICBja3VpdG9hKGFjdHVhbGJ1ZiksTlVMTCxOVUxMKTsKKyAgICBpZiAoZnRwY21kKGZ0 cGNtZGJ1ZixOVUxMLDAsMCwwKSAhPSBSRVBMWV9DT01QTEVURSkgeworICAgICAgICBpZiAoY29u bmVjdGVkKSB7CisgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gbmVnb3RpYXRlIFBST1Qg YnVmZmVyIHNpemUgd2l0aCBGVFAgc2VydmVyXG4iKTsKKyAgICAgICAgICAgIGZ0cGNsb3NlKCk7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKHJlcGx5X3Bh cnNlKSB7CisgICAgICAgIGlmICgobWF4YnVmID0gKHVuc2lnbmVkIGludCkgYXRvbChyZXBseV9w YXJzZSkpID4gYWN0dWFsYnVmKQorICAgICAgICAgIG1heGJ1ZiA9IGFjdHVhbGJ1ZjsKKyAgICB9 IGVsc2UKKyAgICAgIG1heGJ1ZiA9IGFjdHVhbGJ1ZjsKKyAgICB1Y2J1ZnNpeiA9IG1heGJ1ZiAt IEZVREdFX0ZBQ1RPUjsKKyAgICBkZWJ1ZyhGMTAxLCJzZXRwYnN6IHVjYnVmc2l6IiwiIix1Y2J1 ZnNpeik7ICAgIAorICAgIHJlcGx5X3BhcnNlID0gTlVMTDsKKyAgICByZXR1cm4oMCk7Cit9CisK K3N0YXRpYyBWT0lECitjYW5jZWxfcmVtb3RlKGRpbikgaW50IGRpbjsgeworICAgIENIQVIgYnVm W0ZUUF9CVUZTSVpdOworICAgIGludCB4LCBuZm5kOworI2lmZGVmIEJTRFNFTEVDVAorICAgIGZk X3NldCBtYXNrOworI2VuZGlmIC8qIEJTRFNFTEVDVCAqLworI2lmZGVmIElCTVNFTEVDVAorICAg IGludCBmZHNbMl0sIGZkY250ID0gMDsKKyNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KKyNpZmRlZiBE RUJVRworICAgIGV4dGVybiBpbnQgZGVidGltOworICAgIGludCB4ZGVidGltOworICAgIHhkZWJ0 aW0gPSBkZWJ0aW07CisgICAgZGVidGltID0gMTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIGRl YnVnKEYxMDAsImZ0cCBjYW5jZWxfcmVtb3RlIGVudHJ5IiwiIiwwKTsKKyNpZmRlZiBDS19TU0wK KyAgICBpZiAoc3NsX2Z0cF9hY3RpdmVfZmxhZykgeworICAgICAgICAvKgorICAgICAgICAgKiBT ZW5kIFRlbG5ldCBJUCwgVGVsbmV0IERNIGJ1dCBkbyBzbyBpbmxpbmUgYW5kIHdpdGhpbiB0aGUK KyAgICAgICAgICogVExTIGNoYW5uZWwKKyAgICAgICAgICovCisgICAgICAgIGludCBjb3VudCwg ZXJyb3I7CisKKyAgICAgICAgYnVmWzBdID0gSUFDOworICAgICAgICBidWZbMV0gPSBUTl9JUDsK KyAgICAgICAgYnVmWzJdID0gSUFDOworICAgICAgICBidWZbM10gPSBUTl9ETTsKKyAgICAgICAg YnVmWzRdID0gTlVMOworCisgICAgICAgIGNvdW50ID0gU1NMX3dyaXRlKHNzbF9mdHBfY29uLCBi dWYsIDQpOworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY2FuY2VsX3JlbW90ZSIsIlNTTF93cml0 ZShJQUMgSVAgSUFDIERNKSIsY291bnQpOworICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3Io c3NsX2Z0cF9jb24sY291bnQpOworICAgICAgICBkZWJ1ZyhGMTExLCJmdHAgY2FuY2VsX3JlbW90 ZSIsIlNTTF9nZXRfZXJyb3IoKSIsZXJyb3IpOworICAgICAgICBzd2l0Y2ggKGVycm9yKSB7Cisg ICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgY2FzZSBTU0xfRVJST1Jf V0FOVF9SRUFEOgorICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisjaWZkZWYgTlQK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7 CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9XQU5UX1g1MDlfTE9PS1VQOgorICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAg ICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAgICAgICAgICBkZWZhdWx0OgorICAg ICAgICAgICAgbG9zdHBlZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg IH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAg ICogc2VuZCBJQUMgaW4gdXJnZW50IG1vZGUgaW5zdGVhZCBvZiBETSBiZWNhdXNlIDQuM0JTRCBw bGFjZXMgb29iIG1hcmsKKyAgICAgICAgICogYWZ0ZXIgdXJnZW50IGJ5dGUgcmF0aGVyIHRoYW4g YmVmb3JlIGFzIGlzIHByb3RvY29sIG5vdy4KKyAgICAgICAgICovCisgICAgICAgIGJ1ZlswXSA9 IElBQzsKKyAgICAgICAgYnVmWzFdID0gVE5fSVA7CisgICAgICAgIGJ1ZlsyXSA9IElBQzsKKyAg ICAgICAgYnVmWzNdID0gTlVMOworICAgICAgICBpZiAoKHggPSBzZW5kKGNzb2NrZXQsIChTRU5E QVJHMlRZUEUpYnVmLCAzLCBNU0dfT09CKSkgIT0gMykKKyAgICAgICAgICBwZXJyb3IoImNhbmNl bCIpOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY2FuY2VsX3JlbW90ZSBzZW5kIDEiLCIiLHgp OworICAgICAgICBidWZbMF0gPSBUTl9ETTsKKyAgICAgICAgeCA9IHNlbmQoY3NvY2tldCwoU0VO REFSRzJUWVBFKWJ1ZiwxLDApOworICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgY2FuY2VsX3JlbW90 ZSBzZW5kIDIiLCIiLHgpOworICAgIH0KKyAgICB4ID0gc2NvbW1hbmQoIkFCT1IiKTsKKyAgICBk ZWJ1ZyhGMTAxLCJmdHAgY2FuY2VsX3JlbW90ZSBzY29tbWFuZCIsIiIseCk7CisjaWZkZWYgQlNE U0VMRUNUCisgICAgRkRfWkVSTygmbWFzayk7CisgICAgRkRfU0VUKGNzb2NrZXQsICZtYXNrKTsK KyAgICBpZiAoZGluKSB7CisgICAgICAgIEZEX1NFVChkaW4sICZtYXNrKTsKKyAgICB9CisgICAg bmZuZCA9IGVtcHR5KCZtYXNrLCAxMCk7CisgICAgZGVidWcoRjEwMSwiZnRwIGNhbmNlbF9yZW1v dGUgZW1wdHkiLCIiLG5mbmQpOworICAgIGlmICgobmZuZCkgPD0gMCkgeworICAgICAgICBpZiAo bmZuZCA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigiY2FuY2VsIik7CisgICAgICAgIH0KKyNp ZmRlZiBGVFBfUFJPWFkKKyAgICAgICAgaWYgKHB0YWJmbGcpCisgICAgICAgICAgZnRwY29kZSA9 IC0xOworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworICAgICAgICBsb3N0cGVlcigpOworICAgIH0K KyAgICBkZWJ1ZyhGMTEwLCJmdHAgY2FuY2VsX3JlbW90ZSIsIkQiLDApOworICAgIGlmIChkaW4g JiYgRkRfSVNTRVQoZGluLCAmbWFzaykpIHsKKyAgICAgICAgLyogU2VjdXJpdHk6IE5vIHRocmVh dCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWFkLiAqLworICAgICAgICAvKiBCdXQgeW91IGNhbid0 IHNpbXBseSByZWFkIHRoZSBUTFMgZGF0YSBzdHJlYW0gICovCisjaWZkZWYgQ0tfU1NMCisgICAg ICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgIGludCBjb3Vu dCwgZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoKGNvdW50ID0gU1NMX3JlYWQoc3NsX2Z0cF9k YXRhX2NvbiwgYnVmLCBGVFBfQlVGU0laKSkgPiAwKQorICAgICAgICAgICAgICAgICAgICAvKiBM T09QICovIDsKKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgIHsK KyAgICAgICAgICAgIHdoaWxlIChyZWN2KGRpbiwgKFNFTkRBUkcyVFlQRSlidWYsIEZUUF9CVUZT SVosMCkgPiAwKQorICAgICAgICAgICAgICAgIC8qIExPT1AgKi8gOworICAgICAgICB9CisgICAg fQorICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3RlIiwiRSIsMCk7CisjZWxzZSAvKiBC U0RTRUxFQ1QgKi8KKyNpZmRlZiBJQk1TRUxFQ1QKKyAgICBmZHNbMF0gPSBjc29ja2V0OworICAg IGZkY250Kys7CisgICAgaWYgKGRpbikgeworICAgICAgICBmZHNbMV0gPSBkaW47CisgICAgICAg IGZkY250Kys7CisgICAgfQorICAgIG5mbmQgPSBlbXB0eShmZHMsIGZkY250LCAxMCk7CisgICAg ZGVidWcoRjEwMSwiZnRwIGNhbmNlbF9yZW1vdGUgZW1wdHkiLCIiLG5mbmQpOworICAgIGlmICgo bmZuZCkgPD0gMCkgeworICAgICAgICBpZiAobmZuZCA8IDApIHsKKyAgICAgICAgICAgIHBlcnJv cigiY2FuY2VsIik7CisgICAgICAgIH0KKyNpZmRlZiBGVFBfUFJPWFkKKyAgICAgICAgaWYgKHB0 YWJmbGcpCisgICAgICAgICAgZnRwY29kZSA9IC0xOworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLwor ICAgICAgICBsb3N0cGVlcigpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJmdHAgY2FuY2VsX3Jl bW90ZSIsIkQiLDApOworICAgIGlmIChkaW4gJiYgc2VsZWN0KCZkaW4sIDEsMCwwLDEpICkgewor I2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnKSB7Cisg ICAgICAgICAgICBpbnQgY291bnQsIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKChjb3VudCA9 IFNTTF9yZWFkKHNzbF9mdHBfZGF0YV9jb24sIGJ1ZiwgRlRQX0JVRlNJWikpID4gMCkKKyAgICAg ICAgICAgICAgICAgICAgLyogTE9PUCAqLyA7CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENL X1NTTCAqLworICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAocmVjdihkaW4sIChTRU5EQVJH MlRZUEUpYnVmLCBGVFBfQlVGU0laLDApID4gMCkKKyAgICAgICAgICAgICAgICAvKiBMT09QICov IDsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJmdHAgY2FuY2VsX3JlbW90ZSIs IkUiLDApOworI2Vsc2UgLyogSUJNU0VMRUNUICovCisgICAgU29tZSBmb3JtIG9mIHNlbGVjdCBp cyByZXF1aXJlZC4KKyNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KKyNlbmRpZiAvKiBCU0RTRUxFQ1Qg Ki8KKyAgICBpZiAoZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApID09IFJFUExZX0VSUk9SICYm IGZ0cGNvZGUgPT0gNTUyKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBjYW5jZWxfcmVtb3Rl IiwiRiIsMCk7CisgICAgICAgIC8qIDU1MiBuZWVkZWQgZm9yIE5JQyBzdHlsZSBjYW5jZWwgKi8K KyAgICAgICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApOworICAgICAgICBkZWJ1ZyhGMTEw LCJmdHAgY2FuY2VsX3JlbW90ZSIsIkciLDApOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJmdHAg Y2FuY2VsX3JlbW90ZSIsIkgiLDApOworICAgIGdldHJlcGx5KDAsLTEsLTEsZnRwX3ZibSwwKTsK KyAgICBkZWJ1ZyhGMTEwLCJmdHAgY2FuY2VsX3JlbW90ZSIsIkkiLDApOworI2lmZGVmIERFQlVH CisgICAgZGVidGltID0geGRlYnRpbTsKKyNlbmRpZiAvKiBERUJVRyAqLworfQorCitzdGF0aWMg aW50CitmdHNfZHBsKHgpIGludCB4OyB7CisgICAgaWYgKCFhdXRoX3R5cGUKKyNpZmRlZiBPUzIK KyAgICAgICAgIHx8ICFja19jcnlwdF9pc19pbnN0YWxsZWQoKQorI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgKSB7CisgICAgICAgIHN3aXRjaCAoIHggKSB7CisgICAgICAgICAgY2FzZSBGUExf UFJWOgorICAgICAgICAgICAgcHJpbnRmKCI/Q2Fubm90IHNldCBwcm90ZWN0aW9uIGxldmVsIHRv IFBSSVZBVEVcbiIpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgIGNhc2UgRlBM X1NBRjoKKyAgICAgICAgICAgIHByaW50ZigiP0Nhbm5vdCBzZXQgcHJvdGVjdGlvbiBsZXZlbCB0 byBTQUZFXG4iKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgICBm dHBfZHBsID0geDsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKworI2lmZGVmIENLX1NTTAor ICAgIGlmICh4ID09IEZQTF9TQUYgJiYKKyAgICAgICAgKCFzdHJjbXAoYXV0aF90eXBlLCJTU0wi KSB8fCAhc3RyY21wKGF1dGhfdHlwZSwiVExTIikpKSB7CisgICAgICAgIHByaW50ZigiQ2Fubm90 IHNldCBwcm90ZWN0aW9uIGxldmVsIHRvIHNhZmVcbiIpOworICAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIC8qIFN0YXJ0IHdpdGggYSBQQlNaIG9mIDEg bWVnICovCisgICAgaWYgKHggIT0gRlBMX0NMUikgeworICAgICAgICBpZiAoc2V0cGJzeihERUZB VUxUX1BCU1opIDwgMCkKKyAgICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIHkgPSBmdHBj bWQoeCA9PSBGUExfQ0xSID8gIlBST1QgQyIgOgorICAgICAgICAgICAgICAgKHggPT0gRlBMX1NB RiA/ICJQUk9UIFMiIDogIlBST1QgUCIpLCBOVUxMLCAwLCAwLGZ0cF92Ym0pOworICAgIGlmICh5 ID09IFJFUExZX0NPTVBMRVRFKSB7CisgICAgICAgIGZ0cF9kcGwgPSB4OworICAgICAgICByZXR1 cm4oMSk7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworc3RhdGljIGludAorZnRzX2NwbCh4 KSBpbnQgeDsgeworICAgIGlmICghYXV0aF90eXBlIAorI2lmZGVmIE9TMgorICAgICAgICAgfHwg IWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICApIHsK KyAgICAgICAgc3dpdGNoICggeCApIHsKKyAgICAgICAgICBjYXNlIEZQTF9QUlY6CisgICAgICAg ICAgICBwcmludGYoIj9DYW5ub3Qgc2V0IHByb3RlY3Rpb24gbGV2ZWwgdG8gUFJJVkFURVxuIik7 CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgY2FzZSBGUExfU0FGOgorICAgICAg ICAgICAgcHJpbnRmKCI/Q2Fubm90IHNldCBwcm90ZWN0aW9uIGxldmVsIHRvIFNBRkVcbiIpOwor ICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAgIGZ0cF9jcGwgPSB4Owor ICAgICAgICByZXR1cm4oMSk7CisgICAgfQorICAgIGlmICh4ID09IEZQTF9DTFIpIHsKKyAgICAg ICAgeSA9IGZ0cGNtZCgiQ0NDIixOVUxMLDAsMCxmdHBfdmJtKTsKKyAgICAgICAgaWYgKHkgPT0g UkVQTFlfQ09NUExFVEUpIHsKKyAgICAgICAgICAgIGZ0cF9jcGwgPSB4OworICAgICAgICAgICAg cmV0dXJuKDEpOworICAgICAgICB9CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgZnRw X2NwbCA9IHg7CisgICAgcmV0dXJuKDEpOworfQorCisjaWZkZWYgRlRQX0dTU0FQSQorc3RhdGlj IFZPSUQKK3VzZXJfZ3NzX2Vycm9yKG1hal9zdGF0LCBtaW5fc3RhdCwgcykKKyAgICBPTV91aW50 MzIgbWFqX3N0YXQsIG1pbl9zdGF0OworICAgIGNoYXIgKnM7Cit7CisgICAgLyogYSBsb3Qgb2Yg d29yayBqdXN0IHRvIHJlcG9ydCB0aGUgZXJyb3IgKi8KKyAgICBPTV91aW50MzIgZ21hal9zdGF0 LCBnbWluX3N0YXQsIG1zZ19jdHg7CisgICAgZ3NzX2J1ZmZlcl9kZXNjIG1zZzsKKyAgICBtc2df Y3R4ID0gMDsKKyAgICB3aGlsZSAoIW1zZ19jdHgpIHsKKyAgICAgICAgZ21hal9zdGF0ID0gZ3Nz X2Rpc3BsYXlfc3RhdHVzKCZnbWluX3N0YXQsIG1hal9zdGF0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR1NTX0NfR1NTX0NPREUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHU1NfQ19OVUxMX09JRCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZtc2dfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJm1zZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgaWYgKChnbWFqX3N0YXQgPT0gR1NTX1NfQ09NUExFVEUpfHwKKyAgICAgICAg ICAgIChnbWFqX3N0YXQgPT0gR1NTX1NfQ09OVElOVUVfTkVFREVEKSkgeworICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJHU1NBUEkgZXJyb3IgbWFqb3I6ICVzXG4iLAorICAgICAgICAgICAg ICAgICAgICAoY2hhciopbXNnLnZhbHVlKTsKKyAgICAgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZl cigmZ21pbl9zdGF0LCAmbXNnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZ21hal9zdGF0ICE9 IEdTU19TX0NPTlRJTlVFX05FRURFRCkKKyAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgbXNn X2N0eCA9IDA7CisgICAgd2hpbGUgKCFtc2dfY3R4KSB7CisgICAgICAgIGdtYWpfc3RhdCA9IGdz c19kaXNwbGF5X3N0YXR1cygmZ21pbl9zdGF0LCBtaW5fc3RhdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdTU19DX01FQ0hfQ09ERSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05VTExfT0lELAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm1zZ19jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmbXNnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICBpZiAoKGdtYWpfc3RhdCA9PSBHU1NfU19DT01QTEVURSl8fAorICAgICAg ICAgICAgKGdtYWpfc3RhdCA9PSBHU1NfU19DT05USU5VRV9ORUVERUQpKSB7CisgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQSSBlcnJvciBtaW5vcjogJXNcbiIsIChjaGFyKiltc2cu dmFsdWUpOworICAgICAgICAgICAgZ3NzX3JlbGVhc2VfYnVmZmVyKCZnbWluX3N0YXQsICZtc2cp OworICAgICAgICB9CisgICAgICAgIGlmIChnbWFqX3N0YXQgIT0gR1NTX1NfQ09OVElOVUVfTkVF REVEKQorICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdTU0FQ SSBlcnJvcjogJXNcbiIsIHMpOworfQorI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KKworI2lmbmRl ZiBOT01ISE9TVAorI2lmZGVmIGRhdGFnZW5lcmFsCisjZGVmaW5lIE5PTUhIT1NUCisjZWxzZQor I2lmZGVmIEhQVVg1V0lOVENQCisjZGVmaW5lIE5PTUhIT1NUCisjZW5kaWYgLyogSFBVWDVXSU5U Q1AgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIE5PTUhIT1NUICovCisK KyNpZmRlZiBJTkFERFJYCitzdGF0aWMgc3RydWN0IGluX2FkZHIgaW5hZGRyeDsKKyNlbmRpZiAv KiBJTkFERFJYICovCisKK3N0YXRpYyBjaGFyICoKK2Z0cF9ob29rdXAoaG9zdCwgcG9ydCwgdGxz KSBjaGFyICogaG9zdDsgaW50IHBvcnQ7IGludCB0bHM7IHsKKyAgICByZWdpc3RlciBzdHJ1Y3Qg aG9zdGVudCAqaHAgPSAwOworI2lmZGVmIElQX1RPUworI2lmZGVmIElQVE9TX1RIUk9VR0hQVVQK KyAgICBpbnQgdG9zOworI2VuZGlmIC8qIElQVE9TX1RIUk9VR0hQVVQgKi8KKyNlbmRpZiAvKiBJ UF9UT1MgKi8KKyAgICBpbnQgczsKKyAgICBHU09DS05BTUVfVCBsZW47CisgICAgc3RhdGljIGNo YXIgaG9zdG5hbWVidWZbTUFYSE9TVE5BTUVMRU5dOworICAgIGNoYXIgaG9zdG5hbWVbTUFYSE9T VE5BTUVMRU5dIC8qICwgKnAsICpxICovIDsKKyAgICBpbnQgIGNwb3J0OworI2lmZGVmIERFQlVH CisgICAgZXh0ZXJuIGludCBkZWJ0aW07CisgICAgaW50IHhkZWJ0aW07CisgICAgeGRlYnRpbSA9 IGRlYnRpbTsKKyAgICBkZWJ0aW0gPSAxOworI2VuZGlmIC8qIERFQlVHICovCisKKyAgICBkZWJ1 ZyhGMTExLCJmdHBfaG9va3VwIixob3N0LHBvcnQpOworCisjaWZuZGVmIE5PSFRUUAorICAgIGlm ICh0Y3BfaHR0cF9wcm94eSkgeworICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqZGVzdHNwOworICAg ICAgICBjaGFyICpwLCAqcTsKKworICAgICAgICBja21ha21zZyhwcm94eWhvc3QsSFRUUENQWUws aG9zdCwiOiIsY2t1aXRvYShwb3J0KSxOVUxMKTsKKyAgICAgICAgZm9yIChwID0gdGNwX2h0dHBf cHJveHksIHEgPSBob3N0bmFtZTsKKyAgICAgICAgICAgICAqcCAhPSAnXDAnICYmICpwICE9ICc6 JzsKKyAgICAgICAgICAgICBwKyssIHErKworICAgICAgICAgICAgICkKKyAgICAgICAgICAqcSA9 ICpwOworICAgICAgICAqcSA9ICdcMCc7CisKKyAgICAgICAgaWYgKCpwID09ICc6JykKKyAgICAg ICAgICBwKys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwID0gImh0dHAiOworCisgICAgICAg IGRlc3RzcCA9IGdldHNlcnZieW5hbWUocCwidGNwIik7CisgICAgICAgIGlmIChkZXN0c3ApCisg ICAgICAgICAgY3BvcnQgPSBudG9ocyhkZXN0c3AtPnNfcG9ydCk7CisgICAgICAgIGVsc2UgaWYg KHApIHsKKyAgICAgICAgICBjcG9ydCA9IGF0b2kocCk7CisgICAgICAgIH0gZWxzZQorICAgICAg ICAgIGNwb3J0ID0gODA7CisgICAgfSBlbHNlCisjZW5kaWYgLyogTk9IVFRQICovCisgICAgewor ICAgICAgICBja3N0cm5jcHkoaG9zdG5hbWUsaG9zdCxNQVhIT1NUTkFNRUxFTik7CisgICAgICAg IGNwb3J0ID0gcG9ydDsKKyAgICB9CisgICAgbWVtc2V0KChjaGFyICopJmhpc2N0bGFkZHIsIDAs IHNpemVvZiAoaGlzY3RsYWRkcikpOworICAgIGhpc2N0bGFkZHIuc2luX2FkZHIuc19hZGRyID0g aW5ldF9hZGRyKGhvc3QpOworICAgIGlmIChoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkciAhPSBJ TkFERFJfTk9ORSkgLyogMjAxMC0wMy0yOSAqLworICAgIHsKKyAgICAgICAgZGVidWcoRjExMCwi ZnRwIGhvb2t1cCBBIixob3N0bmFtZSwwKTsKKyAgICAgICAgaGlzY3RsYWRkci5zaW5fZmFtaWx5 ID0gQUZfSU5FVDsKKyAgICAgICAgY2tzdHJuY3B5KGhvc3RuYW1lYnVmLCBob3N0bmFtZSwgTUFY SE9TVE5BTUVMRU4pOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMTAsImZ0cCBob29r dXAgQiIsaG9zdG5hbWUsMCk7CisgICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSk7 CisjaWZkZWYgSEFERFJMSVNUCisgICAgICAgIGhwID0gY2tfY29weWhvc3RlbnQoaHApOyAgICAg ICAgLyogbWFrZSBzYWZlIGNvcHkgdGhhdCB3b24ndCBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBIQURE UkxJU1QgKi8KKyAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiZnRwOiAlczogVW5rbm93biBob3N0XG4iLCBob3N0KTsKKyAgICAgICAgICAgIGZ0 cGNvZGUgPSAtMTsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgZGVidGltID0geGRlYnRpbTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgcmV0dXJuKChjaGFyICopIDApOworICAg ICAgICB9CisgICAgICAgIGhpc2N0bGFkZHIuc2luX2ZhbWlseSA9IGhwLT5oX2FkZHJ0eXBlOwor I2lmZGVmIEhBRERSTElTVAorICAgICAgICBtZW1jcHkoKGNoYXIgKikmaGlzY3RsYWRkci5zaW5f YWRkciwgaHAtPmhfYWRkcl9saXN0WzBdLAorICAgICAgICAgICAgICAgc2l6ZW9mKGhpc2N0bGFk ZHIuc2luX2FkZHIpKTsKKyNlbHNlIC8qIEhBRERSTElTVCAqLworICAgICAgICBtZW1jcHkoKGNo YXIgKikmaGlzY3RsYWRkci5zaW5fYWRkciwgaHAtPmhfYWRkciwKKyAgICAgICAgICAgICAgIHNp emVvZihoaXNjdGxhZGRyLnNpbl9hZGRyKSk7CisjZW5kaWYgLyogSEFERFJMSVNUICovCisgICAg ICAgIGNrc3RybmNweShob3N0bmFtZWJ1ZiwgaHAtPmhfbmFtZSwgTUFYSE9TVE5BTUVMRU4pOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJmdHAgaG9va3VwIEMiLGhvc3RuYW1lYnVmLDApOworICAg IGZ0cF9ob3N0ID0gaG9zdG5hbWVidWY7CisgICAgcyA9IHNvY2tldChoaXNjdGxhZGRyLnNpbl9m YW1pbHksIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBkZWJ1ZyhGMTAxLCJmdHAgaG9va3VwIHNvY2tl dCIsIiIscyk7CisgICAgaWYgKHMgPCAwKSB7CisgICAgICAgIHBlcnJvcigiZnRwOiBzb2NrZXQi KTsKKyAgICAgICAgZnRwY29kZSA9IC0xOworI2lmZGVmIERFQlVHCisgICAgICAgIGRlYnRpbSA9 IHhkZWJ0aW07CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0K KyAgICBoaXNjdGxhZGRyLnNpbl9wb3J0ID0gaHRvbnMoY3BvcnQpOworICAgIGVycm5vID0gMDsK KworI2lmZGVmIENPTU1FTlQKKyAgcHJpbnRmKCJoaXNjdGxhZGRyPSVkXG4iLHNpemVvZihoaXNj dGxhZGRyKSk7CisgIHByaW50ZigiaGlzY3RsYWRkci5zaW5fYWRkcj0lZFxuIixzaXplb2YoaGlz Y3RsYWRkci5zaW5fYWRkcikpOworICBwcmludGYoInNvY2thZGRyX2luPSVkXG4iLHNpemVvZihz dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgcHJpbnRmKCJoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRk cj0lZFxuIixzaXplb2YoaGlzY3RsYWRkci5zaW5fYWRkci5zX2FkZHIpKTsKKyNlbmRpZgkvKiBD T01NRU5UICovCisKKyNpZmRlZiBIQUREUkxJU1QKKyAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3Vw IEhBRERSTElTVCIsIiIsMCk7CisgICAgd2hpbGUKKyNlbHNlCisgICAgZGVidWcoRjEwMCwiZnRw IGhvb2t1cCBubyBIQUREUkxJU1QiLCIiLDApOworICAgIGlmCisjZW5kaWYgLyogSEFERFJMSVNU ICovCisgICAgICAoY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJmhpc2N0bGFkZHIsIHNp emVvZiAoaGlzY3RsYWRkcikpIDwgMCkgeworICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBob29r dXAgY29ubmVjdCBmYWlsZWQiLCIiLGVycm5vKTsKKyNpZmRlZiBIQUREUkxJU1QKKyAgICAgICAg ICBpZiAoaHAgJiYgaHAtPmhfYWRkcl9saXN0WzFdKSB7CisgICAgICAgICAgICAgIGludCBvZXJy bm8gPSBlcnJubzsKKworICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZ0cDogY29ubmVj dCB0byBhZGRyZXNzICVzOiAiLAorICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYShoaXNj dGxhZGRyLnNpbl9hZGRyKSk7CisgICAgICAgICAgICAgIGVycm5vID0gb2Vycm5vOworICAgICAg ICAgICAgICBwZXJyb3IoKGNoYXIgKikgMCk7CisgICAgICAgICAgICAgIGhwLT5oX2FkZHJfbGlz dCsrOworICAgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKikmaGlzY3RsYWRkci5zaW5fYWRkciwK KyAgICAgICAgICAgICAgICAgICAgIGhwLT5oX2FkZHJfbGlzdFswXSwKKyAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihoaXNjdGxhZGRyLnNpbl9hZGRyKSk7CisgICAgICAgICAgICAgIGZwcmlu dGYoc3Rkb3V0LCAiVHJ5aW5nICVzLi4uXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGluZXRf bnRvYShoaXNjdGxhZGRyLnNpbl9hZGRyKSk7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAg ICAgc29ja2V0X2Nsb3NlKHMpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAg Y2xvc2Uocyk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgcyA9IHNvY2tl dChoaXNjdGxhZGRyLnNpbl9mYW1pbHksIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICAgICAgICAgICAg aWYgKHMgPCAwKSB7CisgICAgICAgICAgICAgICAgICBwZXJyb3IoImZ0cDogc29ja2V0Iik7Cisg ICAgICAgICAgICAgICAgICBmdHBjb2RlID0gLTE7CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAg ICAgICAgIGRlYnRpbSA9IHhkZWJ0aW07CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAg ICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICB9CisjZW5kaWYgLyogSEFERFJMSVNUICovCisgICAgICAgICAgcGVycm9y KCJmdHA6IGNvbm5lY3QiKTsKKyAgICAgICAgICBmdHBjb2RlID0gLTE7CisgICAgICAgICAgZ290 byBiYWQ7CisgICAgICB9CisgICAgZGVidWcoRjEwMCwiZnRwIGhvb2t1cCBjb25uZWN0IG9rIiwi IiwwKTsKKworICAgIGxlbiA9IHNpemVvZiAobXljdGxhZGRyKTsKKyAgICBlcnJubyA9IDA7Cisg ICAgaWYgKGdldHNvY2tuYW1lKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbXljdGxhZGRyLCAmbGVu KSA8IDApIHsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRwIGhvb2t1cCBnZXRzb2NrbmFtZSBmYWls ZWQiLCIiLGVycm5vKTsKKyAgICAgICAgcGVycm9yKCJmdHA6IGdldHNvY2tuYW1lIik7CisgICAg ICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgZ290byBiYWQ7CisgICAgfQorICAgIGRlYnVnKEYx MDAsImZ0cCBob29rdXAgZ2V0c29ja25hbWUgb2siLCIiLDApOworCisjaWZuZGVmIE5PSFRUUAor ICAgIGlmICh0Y3BfaHR0cF9wcm94eSkgeworI2lmZGVmIE9TMgorICAgICAgICBjaGFyICogYWdl bnQgPSAiS2VybWl0IDk1IjsgICAgIC8qIERlZmF1bHQgdXNlciBhZ2VudCAqLworI2Vsc2UKKyAg ICAgICAgY2hhciAqIGFnZW50ID0gIkMtS2VybWl0IjsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAg ICAgICBpZiAoaHR0cF9jb25uZWN0KHMsYWdlbnQsTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICB0Y3BfaHR0cF9wcm94eV91c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9o dHRwX3Byb3h5X3B3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg ICAgICAgICAgICAgIHByb3h5aG9zdAorICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwKSB7 CisgICAgICAgICAgICBjaGFyICogZm9vID0gTlVMTDsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAg ICAgICAgc29ja2V0X2Nsb3NlKHMpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAg IGNsb3NlKHMpOworI2VuZGlmIC8qIFRDUElQTElCICovCisKKyAgICAgICAgICAgIHdoaWxlIChm b28gPT0gTlVMTCAmJiB0Y3BfaHR0cF9wcm94eSAhPSBOVUxMICkgeworCisgICAgICAgICAgICAg ICAgaWYgKHRjcF9odHRwX3Byb3h5X2Vycm5vID09IDQwMSB8fAorICAgICAgICAgICAgICAgICAg ICAgdGNwX2h0dHBfcHJveHlfZXJybm8gPT0gNDA3ICkgeworICAgICAgICAgICAgICAgICAgICBj aGFyIHVpZFtVSURCVUZMRU5dOworICAgICAgICAgICAgICAgICAgICBjaGFyIHB3ZFtQV0RTSVpd OworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdHh0Ym94IHRiWzJdOworICAgICAgICAgICAg ICAgICAgICBpbnQgb2s7CisKKyAgICAgICAgICAgICAgICAgICAgdGJbMF0udF9idWYgPSB1aWQ7 CisgICAgICAgICAgICAgICAgICAgIHRiWzBdLnRfbGVuID0gVUlEQlVGTEVOOworICAgICAgICAg ICAgICAgICAgICB0YlswXS50X2xibCA9ICJQcm94eSBVc2VyaWQ6ICI7CisgICAgICAgICAgICAg ICAgICAgIHRiWzBdLnRfZGZsdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHRiWzBdLnRf ZWNobyA9IDE7CisgICAgICAgICAgICAgICAgICAgIHRiWzFdLnRfYnVmID0gcHdkOworICAgICAg ICAgICAgICAgICAgICB0YlsxXS50X2xlbiA9IDI1NjsKKyAgICAgICAgICAgICAgICAgICAgdGJb MV0udF9sYmwgPSAiUHJveHkgUGFzc3BocmFzZTogIjsKKyAgICAgICAgICAgICAgICAgICAgdGJb MV0udF9kZmx0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgdGJbMV0udF9lY2hvID0gMjsK KworICAgICAgICAgICAgICAgICAgICBvayA9IHVxX210eHQoIlByb3h5IFNlcnZlciBBdXRoZW50 aWNhdGlvbiBSZXF1aXJlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLCAyLCB0Yik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9rICYmIHVpZFswXSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHByb3h5X3VzZXIsICogcHJveHlfcHdkOwor CisgICAgICAgICAgICAgICAgICAgICAgICBwcm94eV91c2VyID0gdGNwX2h0dHBfcHJveHlfdXNl cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5X3B3ZCAgPSB0Y3BfaHR0cF9wcm94eV9w d2Q7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3VzZXIgPSB1aWQ7 CisgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV9wd2QgPSBwd2Q7CisKKyAg ICAgICAgICAgICAgICAgICAgICAgIGZvbyA9IGZ0cF9ob29rdXAoaG9zdCwgcG9ydCwgMCk7CisK KyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ0cF9ob29rdXAoKSIsZm9vLDAp OworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KHB3ZCwwLFBXRFNJWik7CisgICAgICAg ICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV91c2VyID0gcHJveHlfdXNlcjsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3B3ZCA9IHByb3h5X3B3ZDsKKyAgICAg ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoZm9vICE9IE5VTEwpCisgICAgICAgICAgICAgIHJldHVy bihmb28pOworICAgICAgICAgICAgcGVycm9yKCJmdHA6IGNvbm5lY3QiKTsKKyAgICAgICAgICAg IGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICB9CisgICAgICAg IGNrc3RybmNweShob3N0bmFtZWJ1ZiwgcHJveHlob3N0LCBNQVhIT1NUTkFNRUxFTik7CisgICAg fQorI2VuZGlmIC8qIE5PSFRUUCAqLworCisgICAgY3NvY2tldCA9IHM7CisKKyNpZmRlZiBDS19T U0wKKyAgICBpZiAodGxzKSB7CisgICAgICAgIC8qIEZUUCBvdmVyIFNTTAorICAgICAgICAgKiBJ ZiB0aGUgY29ubmVjdGlvbiBpcyBvdmVyIGFuIFNTTCBwcm94eSB0aGVuIHRoZQorICAgICAgICAg KiBhdXRoX3R5cGUgd2lsbCBiZSBOVUxMLiAgSG93ZXZlciwgSSdtIG5vdCBzdXJlCisgICAgICAg ICAqIHdoZXRoZXIgd2Ugc2hvdWxkIHByb3RlY3QgdGhlIGRhdGEgY2hhbm5lbCBpbgorICAgICAg ICAgKiB0aGF0IGNhc2Ugb3Igbm90LgorICAgICAgICAgKi8KKworICAgICAgICBkZWJ1ZyhGMTAw LCJmdHAgaG9va3VwIHVzZV90bHMiLCIiLDApOworICAgICAgICBpZiAoIXNzbF9hdXRoKCkpIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMDAsImZ0cCBob29rdXAgc3NsX2F1dGggZmFpbGVkIiwiIiww KTsKKyAgICAgICAgICAgIGF1dGhfdHlwZSA9IE5VTEw7CisgICAgICAgICAgICBmdHBjb2RlID0g LTE7CisgICAgICAgICAgICBjc29ja2V0ID0gLTE7CisgICAgICAgICAgICBnb3RvIGJhZDsKKyAg ICAgICAgfQorICAgICAgICBzc2xfZnRwX3Byb3h5ID0gMTsKKyAgICB9CisjZW5kaWYgLyogQ0tf U1NMICovCisKKyNpZmRlZiBJUF9UT1MKKyNpZmRlZiBJUFRPU19MT1dERUxBWQorICAgIHRvcyA9 IElQVE9TX0xPV0RFTEFZOworICAgIGlmIChzZXRzb2Nrb3B0KGNzb2NrZXQsIElQUFJPVE9fSVAs IElQX1RPUywgKGNoYXIgKikmdG9zLCBzaXplb2YoaW50KSkgPCAwKQorICAgICAgcGVycm9yKCJm dHA6IHNldHNvY2tvcHQgVE9TIChpZ25vcmVkKSIpOworI2VuZGlmCisjZW5kaWYKKyAgICBpZiAo IXF1aWV0KQorICAgICAgcHJpbnRmKCJDb25uZWN0ZWQgdG8gJXMuXG4iLCBob3N0KTsKKworICAg IC8qIFJlYWQgZ3JlZXRpbmcgZnJvbSBzZXJ2ZXIgKi8KKyAgICBpZiAoZ2V0cmVwbHkoMCxmdHBf Y3NsLGZ0cF9jc3IsZnRwX3ZibSwwKSA+IDIpIHsKKyAgICAgICAgZGVidWcoRjEwMCwiZnRwIGhv b2t1cCBiYWQgcmVwbHkiLCIiLDApOworI2lmZGVmIFRDUElQTElCCisgICAgICAgIHNvY2tldF9j bG9zZShjc29ja2V0KTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgIGNsb3NlKGNzb2Nr ZXQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAg ICAgZ290byBiYWQ7CisgICAgfQorI2lmZGVmIFNPX09PQklOTElORQorICAgIHsKKyAgICAgICAg aW50IG9uID0gMTsKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBpZiAoc2V0c29ja29wdChz LCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsIChjaGFyICopJm9uLAorCQkgICAgICAgc2l6ZW9m KG9uKSkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoImZ0cDogc2V0c29ja29wdCIpOworICAg ICAgICAgICAgZGVidWcoRjEwMSwiZnRwIGhvb2t1cCBzZXRzb2Nrb3B0IGZhaWxlZCIsIiIsZXJy bm8pOworICAgICAgICB9CisjaWZkZWYgREVCVUcKKyAgICAgICAgZWxzZQorICAgICAgICAgIGRl YnVnKEYxMDAsImZ0cCBob29rdXAgc2V0c29ja29wdCBvayIsIiIsMCk7CisjZW5kaWYgLyogREVC VUcgKi8KKyAgICB9CisjZW5kaWYgLyogU09fT09CSU5MSU5FICovCisKKyNpZmRlZiBERUJVRwor ICAgIGRlYnRpbSA9IHhkZWJ0aW07CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByZXR1cm4oZnRw X2hvc3QpOworCisgIGJhZDoKKyAgICBkZWJ1ZyhGMTAwLCJmdHAgaG9va3VwIGJhZCIsIiIsMCk7 CisjaWZkZWYgVENQSVBMSUIKKyAgICBzb2NrZXRfY2xvc2Uocyk7CisjZWxzZSAvKiBUQ1BJUExJ QiAqLworICAgIGNsb3NlKHMpOworI2VuZGlmIC8qIFRDUElQTElCICovCisjaWZkZWYgREVCVUcK KyAgICBkZWJ0aW0gPSB4ZGVidGltOworI2VuZGlmIC8qIERFQlVHICovCisgICAgY3NvY2tldCA9 IC0xOworICAgIHJldHVybigoY2hhciAqKTApOworfQorCitzdGF0aWMgVk9JRAorZnRwX2luaXQo KSB7CisgICAgaW50IGksIG47CisKKyAgICAvKiBUaGUgcHVycG9zZSBvZiB0aGUgaW5pdGlhbCBS RVNUIDAgaXMgbm90IGNsZWFyLCBidXQgb3RoZXIgRlRQICovCisgICAgLyogY2xpZW50cyBkbyBp dC4gIEluIGFueSBjYXNlLCBmYWlsdXJlIG9mIHRoaXMgY29tbWFuZCBpcyBub3QgYSAqLworICAg IC8qIHJlbGlhYmxlIGluZGljYXRpb24gdGhhdCB0aGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQg UmVzdGFydC4gKi8KKworICAgIG9rcmVzdGFydCA9IDA7CisgICAgaWYgKCFub2luaXQpIHsKKyAg ICAgICAgbiA9IGZ0cGNtZCgiUkVTVCAwIixOVUxMLDAsMCwwKTsKKyAgICAgICAgaWYgKG4gPT0g UkVQTFlfQ09NUExFVEUpCisgICAgICAgICAgb2tyZXN0YXJ0ID0gMTsKKyNpZmRlZiBDT01NRU5U CisgICAgICAgIGVsc2UgaWYgKGZ0cF9kZWIpCisgICAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiBV bmFibGUgdG8gcmVzdG9yZSBmaWxlIHBvaW50ZXIuXG4iKTsKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgfQorICAgIG4gPSBmdHBjbWQoIlNZU1QiLE5VTEwsMCwwLDApOyAgICAgIC8qIEdldCBz ZXJ2ZXIgc3lzdGVtIHR5cGUgKi8KKyAgICBpZiAobiA9PSBSRVBMWV9DT01QTEVURSkgeworICAg ICAgICByZWdpc3RlciBjaGFyICpjcCwgYyA9IE5VTDsKKyAgICAgICAgY3AgPSBja3N0cmNocihm dHBfcmVwbHlfc3RyKzQsJyAnKTsgLyogR2V0IGZpcnN0IHdvcmQgb2YgcmVwbHkgKi8KKyAgICAg ICAgaWYgKGNwID09IE5VTEwpCisgICAgICAgICAgY3AgPSBja3N0cmNocihmdHBfcmVwbHlfc3Ry KzQsJ1xyJyk7CisgICAgICAgIGlmIChjcCkgeworICAgICAgICAgICAgaWYgKGNwWy0xXSA9PSAn LicpCisgICAgICAgICAgICAgIGNwLS07CisgICAgICAgICAgICBjID0gKmNwOyAgICAgICAgICAg ICAgICAgICAgLyogU2F2ZSB0aGlzIGNoYXIgKi8KKyAgICAgICAgICAgICpjcCA9ICdcMCc7ICAg ICAgICAgICAgICAgICAvKiBSZXBsYWNlIGl0IHdpdGggTlVMICovCisgICAgICAgIH0KKyAgICAg ICAgaWYgKCFxdWlldCkKKyAgICAgICAgICBwcmludGYoIlJlbW90ZSBzeXN0ZW0gdHlwZSBpcyAl cy5cbiIsZnRwX3JlcGx5X3N0cis0KTsKKyAgICAgICAgY2tzdHJuY3B5KGZ0cF9zcnZ0eXAsZnRw X3JlcGx5X3N0cis0LFNSVk5BTUxFTik7CisgICAgICAgIGlmIChjcCkgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUHV0IGJhY2sgc2F2ZWQgY2hhciAqLworICAgICAgICAgICpjcCA9IGM7Cisg ICAgfQorICAgIGFsaWtlID0gIWNrc3RyY21wKGZ0cF9zcnZ0eXAsbXlvc3R5cGUsLTEsMCk7CisK KyAgICBpZiAoIWNrc3RyY21wKGZ0cF9zcnZ0eXAsIlVOSVgiLC0xLDApKSBzZXJ2ZXJ0eXBlID0g U1lTX1VOSVg7CisgICAgZWxzZSBpZiAoIWNrc3RyY21wKGZ0cF9zcnZ0eXAsIldJTjMyIiwtMSww KSkgc2VydmVydHlwZSA9IFNZU19XSU4zMjsKKyAgICBlbHNlIGlmICghY2tzdHJjbXAoZnRwX3Ny dnR5cCwiT1MvMiIsLTEsMCkpIHNlcnZlcnR5cGUgPSBTWVNfV0lOMzI7CisgICAgZWxzZSBpZiAo IWNrc3RyY21wKGZ0cF9zcnZ0eXAsIlZNUyIsLTEsMCkpIHNlcnZlcnR5cGUgPSBTWVNfVk1TOwor ICAgIGVsc2UgaWYgKCFja3N0cmNtcChmdHBfc3J2dHlwLCJET1MiLC0xLDApKSBzZXJ2ZXJ0eXBl ID0gU1lTX0RPUzsKKyAgICBlbHNlIGlmICghY2tzdHJjbXAoZnRwX3NydnR5cCwiVE9QUzIwIiwt MSwwKSkgc2VydmVydHlwZSA9IFNZU19UT1BTMjA7CisgICAgZWxzZSBpZiAoIWNrc3RyY21wKGZ0 cF9zcnZ0eXAsIlRPUFMxMCIsLTEsMCkpIHNlcnZlcnR5cGUgPSBTWVNfVE9QUzEwOworCisjaWZk ZWYgRlRQX1BST1hZCisgICAgdW5peF9wcm94eSA9IDA7CisgICAgaWYgKHNlcnZlcnR5cGUgPT0g U1lTX1VOSVggJiYgcHJveHkpIHVuaXhfcHJveHkgPSAxOworI2VuZGlmIC8qIEZUUF9QUk9YWSAq LworCisgICAgaWYgKGZ0cF9jbWRsaW4gJiYgZnRwX3hmZXJtb2RlID09IFhNT0RFX00pCisgICAg ICBmdHBfdHlwID0gYmluYXJ5OyAgICAgICAgICAgICAgICAgLyogVHlwZSBnaXZlbiBvbiBjb21t YW5kIGxpbmUgKi8KKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBP dGhlcndpc2Ugc2V0IGl0IGF1dG9tYXRpY2FsbHkgKi8KKyAgICAgIGZ0cF90eXAgPSBhbGlrZSA/ IEZUVF9CSU4gOiBGVFRfQVNDOworICAgIGNoYW5nZXR5cGUoZnRwX3R5cCwwKTsgICAgICAgICAg ICAgIC8qIENoYW5nZSB0byB0aGlzIHR5cGUgKi8KKyAgICBnX2Z0cF90eXAgPSBmdHBfdHlwOyAg ICAgICAgICAgICAgICAvKiBNYWtlIGl0IHRoZSBnbG9iYWwgdHlwZSAqLworICAgIGlmICghcXVp ZXQpCisgICAgICBwcmludGYoIkRlZmF1bHQgdHJhbnNmZXIgbW9kZSBpcyAlc1xuIiwKKyAgICAg ICAgICAgICBmdHBfdHlwID8gIkJJTkFSWSIgOiAiVEVYVCAoXCJBU0NJSVwiKSIKKyAgICAgICAg ICAgICApOworICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQkJLyogSW5pdCBzZXJ2ZXIgRkVB VHVyZSB0YWJsZSAqLworICAgICAgc2Z0dGFiW2ldID0gMDsKKyAgICBpZiAoIW5vaW5pdCkgewor ICAgICAgICBuID0gZnRwY21kKCJNT0RFIFMiLE5VTEwsMCwwLDApOyAvKiBXZSBhbHdheXMgc2Vu ZCBpbiBTdHJlYW0gbW9kZSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKG4gIT0gUkVQ TFlfQ09NUExFVEUpCisgICAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiBTZXJ2ZXIgZG9lcyBub3Qg YWNjZXB0IE1PREUgUyhUUkVBTSlcbiIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg biA9IGZ0cGNtZCgiU1RSVSBGIixOVUxMLDAsMCwwKTsgLyogU1RSVSBGaWxlIChub3QgUmVjb3Jk IG9yIFBhZ2UpICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAobiAhPSBSRVBMWV9DT01Q TEVURSkKKyAgICAgICAgICBwcmludGYoIldBUk5JTkc6IFNlcnZlciBkb2VzIG5vdCBhY2NlcHQg U1RSVSBGKElMRSlcbiIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlpZiAoZmVhdG9rKSB7CisJ ICAgIG4gPSBmdHBjbWQoIkZFQVQiLE5VTEwsMCwwLDApOyAvKiBBc2sgc2VydmVyIGFib3V0IGZl YXR1cmVzICovCisJICAgIGlmIChuID09IFJFUExZX0NPTVBMRVRFKSB7CisJCWRlYnVnKEYxMDEs ImZ0cF9pbml0IEZFQVQiLCIiLHNmdHRhYlswXSk7CisJCWlmIChkZWJsb2cgfHwgZnRwX2RlYikg eworCQkgICAgaW50IGk7CisJCSAgICBmb3IgKGkgPSAxOyBpIDwgMTYgJiYgaSA8IG5mZWF0dGFi OyBpKyspIHsKKwkJCWRlYnVnKEYxMTEsImZ0cF9pbml0IEZFQVQiLGZlYXR0YWJbaV0ua3dkLHNm dHRhYltpXSk7CisJCQlpZiAoZnRwX2RlYikKKwkJCSAgcHJpbnRmKCIgIFNlcnZlciAlcyAlc1xu IiwKKwkJCQkgc2Z0dGFiW2ldID8gInN1cHBvcnRzIiA6ICJkb2VzIG5vdCBzdXBwb3J0IiwKKwkJ CQkgZmVhdHRhYltpXS5rd2QKKwkJCQkgKTsKKwkJICAgIH0KKwkJICAgIC8qIERlYWwgd2l0aCBk aXNhYmxlZCBNTFNUIG9wdHMgaGVyZSBpZiBuZWNlc3NhcnkgKi8KKwkJICAgIC8qIEJ1dCB3aHkg d291bGQgaXQgYmU/ICovCisJCX0KKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3N0YXRpYyBpbnQK K2Z0cF9sb2dpbihob3N0KSBjaGFyICogaG9zdDsgeyAgICAgICAgICAvKiAoYWxzbyBjYWxsZWQg ZnJvbSBja3V1c3kuYykgKi8KKyAgICBzdGF0aWMgY2hhciBmdHBwYXNzW1BBU1NCVUZTSVpdPSIi OworICAgIGNoYXIgdG1wW1BBU1NCVUZTSVpdOworICAgIGNoYXIgKnVzZXIgPSBOVUxMLCAqcGFz cyA9IE5VTEwsICphY2N0ID0gTlVMTDsKKyAgICBpbnQgbiwgYWZsYWcgPSAwOworICAgIGV4dGVy biBjaGFyIHVpZGJ1ZltdOworICAgIGV4dGVybiBjaGFyIHB3YnVmW107CisgICAgZXh0ZXJuIGlu dCAgcHdmbGcsIHB3Y3J5cHQ7CisKKyAgICBkZWJ1ZyhGMTExLCJmdHBfbG9naW4iLGZ0cF9sb2du YW1lLGZ0cF9sb2cpOworCisgICAgaWYgKCFja3N0cmNtcChmdHBfbG9nbmFtZSwiYW5vbnltb3Vz IiwtMSwwKSkKKyAgICAgIGFub255bW91cyA9IDE7CisgICAgaWYgKCFja3N0cmNtcChmdHBfbG9n bmFtZSwiZnRwIiwtMSwwKSkKKyAgICAgIGFub255bW91cyA9IDE7CisKKyNpZmRlZiBGVFBfU1JQ CisgICAgaWYgKGF1dGhfdHlwZSAmJiAhc3RyY21wKGF1dGhfdHlwZSwgIlNSUCIpKSB7CisgICAg ICAgIHVzZXIgPSBzcnBfdXNlcjsKKyAgICAgICAgcGFzcyA9IHNycF9wYXNzOworICAgICAgICBh Y2N0ID0gc3JwX2FjY3Q7CisgICAgfSBlbHNlCisjZW5kaWYgLyogRlRQX1NSUCAqLworICAgICAg aWYgKGFub255bW91cykgeworICAgICAgICAgIHVzZXIgPSAiYW5vbnltb3VzIjsKKyAgICAgICAg ICBpZiAoZnRwX3RtcCkgewkJLyogVGhleSBnYXZlIGEgcGFzc3dvcmQgKi8KKyAgICAgICAgICAg ICAgcGFzcyA9IGZ0cF90bXA7CisgICAgICAgICAgfSBlbHNlIGlmIChmdHBfYXB3KSB7CQkvKiBT RVQgRlRQIEFOT05ZTU9VUy1QQVNTV09SRCAqLworCSAgICAgIHBhc3MgPSBmdHBfYXB3OworCSAg fSBlbHNlIHsJCQkvKiBTdXBwbHkgdXNlckBob3N0ICovCisJICAgICAgY2ttYWttc2codG1wLFBB U1NCVUZTSVosd2hvYW1pKCksIkAiLG15aG9zdCxOVUxMKTsKKwkgICAgICBwYXNzID0gdG1wOwor ICAgICAgICAgIH0KKwkgIGRlYnVnKEYxMTAsImZ0cCBhbm9ueW1vdXMiLHBhc3MsMCk7CisgICAg ICB9IGVsc2UgeworI2lmZGVmIFVTRV9SVVNFUlBBU1MKKyAgICAgICAgICBpZiAocnVzZXJwYXNz KGhvc3QsICZ1c2VyLCAmcGFzcywgJmFjY3QpIDwgMCkgeworICAgICAgICAgICAgICBmdHBjb2Rl ID0gLTE7CisgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICB9CisjZW5kaWYgLyog VVNFX1JVU0VSUEFTUyAqLworICAgICAgICAgIGlmIChmdHBfbG9nbmFtZSkgeworICAgICAgICAg ICAgICB1c2VyID0gZnRwX2xvZ25hbWU7CisgICAgICAgICAgICAgIHBhc3MgPSBmdHBfdG1wOwor ICAgICAgICAgIH0gZWxzZSBpZiAodWlkYnVmWzBdICYmIChmdHBfdG1wIHx8IHB3YnVmWzBdICYm IHB3ZmxnKSkgeworICAgICAgICAgICAgICB1c2VyID0gdWlkYnVmOworICAgICAgICAgICAgICBp ZiAoZnRwX3RtcCkgeworICAgICAgICAgICAgICAgICAgcGFzcyA9IGZ0cF90bXA7CisgICAgICAg ICAgICAgIH0gZWxzZSBpZiAocHdidWZbMF0gJiYgcHdmbGcpIHsKKyAgICAgICAgICAgICAgICAg IGNrc3RybmNweShmdHBwYXNzLHB3YnVmLFBBU1NCVUZTSVopOworI2lmZGVmIE9TMgorICAgICAg ICAgICAgICAgICAgaWYgKCBwd2NyeXB0ICkKKyAgICAgICAgICAgICAgICAgICAgICBja19lbmNy eXB0KChjaGFyICopZnRwcGFzcyk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAg ICBwYXNzID0gZnRwcGFzczsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAg ICBhY2N0ID0gZnRwX2FjYzsKKyAgICAgICAgICB3aGlsZSAodXNlciA9PSBOVUxMKSB7CisgICAg ICAgICAgICAgIGNoYXIgKm15bmFtZSwgcHJvbXB0W1BST01QVFNJWl07CisgICAgICAgICAgICAg IGludCBvazsKKworICAgICAgICAgICAgICBteW5hbWUgPSB3aG9hbWkoKTsKKyAgICAgICAgICAg ICAgaWYgKG15bmFtZSkKKyAgICAgICAgICAgICAgICBja21ha3htc2cocHJvbXB0LFBST01QVFNJ WiwiIE5hbWUgKCIsaG9zdCwiOiIsbXluYW1lLCIpOiAiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIGNrbWFrbXNnKHByb21wdCxQUk9NUFRTSVosIiBOYW1lICgi LGhvc3QsIik6ICIsTlVMTCk7CisgICAgICAgICAgICAgIHRtcFswXSA9ICdcMCc7CisgICAgICAg ICAgICAgIAorICAgICAgICAgICAgICBvayA9IHVxX3R4dChOVUxMLHByb21wdCwxLE5VTEwsdG1w LFBBU1NCVUZTSVosTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9VUV9U SU1FT1VUKTsKKyAgICAgICAgICAgICAgaWYgKCFvayB8fCAqdG1wID09ICdcMCcpCisgICAgICAg ICAgICAgICAgdXNlciA9IG15bmFtZTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgIHVzZXIgPSBicnN0cmlwKHRtcCk7CisgICAgICAgICAgfQorICAgICAgfQorICAgIG4gPSBm dHBjbWQoIlVTRVIiLHVzZXIsLTEsLTEsZnRwX3ZibSk7CisgICAgaWYgKG4gPT0gUkVQTFlfQ09N UExFVEUpIHsKKyAgICAgICAgLyogZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc2VuZCBhIGR1bW15 IHBhc3N3b3JkICovCisgICAgICAgIGlmIChmdHBjbWQoIlBXRCIsTlVMTCwwLDAsMCkgIT0gUkVQ TFlfQ09NUExFVEUpCisgICAgICAgICAgZnRwY21kKCJQQVNTIGR1bW15IixOVUxMLDAsMCwxKTsK KyAgICB9IGVsc2UgaWYgKG4gPT0gUkVQTFlfQ09OVElOVUUpIHsKKyNpZmRlZiBDS19FTkNSWVBU SU9OCisgICAgICAgIGludCBvbGRmdHBfY3BsOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K KworICAgICAgICBpZiAocGFzcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgb2s7CisgICAg ICAgICAgICBzZXRpbnQoKTsKKyAgICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwsIiBQYXNzd29y ZDogIiwyLE5VTEwsZnRwcGFzcyxQQVNTQlVGU0laLE5VTEwsCisgICAgICAgICAgICAgICAgICAg ICAgICBERUZBVUxUX1VRX1RJTUVPVVQpOworICAgICAgICAgICAgaWYgKG9rKQorICAgICAgICAg ICAgICAgIHBhc3MgPSBicnN0cmlwKGZ0cHBhc3MpOworICAgICAgICB9CisKKyNpZmRlZiBDS19F TkNSWVBUSU9OCisgICAgICAgIG9sZGZ0cF9jcGwgPSBmdHBfY3BsOworICAgICAgICBmdHBfY3Bs ID0gRlBMX1BSVjsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgIG4gPSBmdHBj bWQoIlBBU1MiLHBhc3MsLTEsLTEsMSk7CisgICAgICAgIGlmICghYW5vbnltb3VzICYmIHBhc3Mp IHsKKyAgICAgICAgICAgIGNoYXIgKiBwID0gcGFzczsKKyAgICAgICAgICAgIHdoaWxlICgqcCsr KSAqKHAtMSkgPSBOVUw7CisgICAgICAgICAgICBtYWtlc3RyKCZmdHBfdG1wLE5VTEwpOworICAg ICAgICB9CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAvKiBsZXZlbCBtYXkgaGF2ZSBj aGFuZ2VkICovCisgICAgICAgIGlmIChmdHBfY3BsID09IEZQTF9QUlYpCisgICAgICAgICAgZnRw X2NwbCA9IG9sZGZ0cF9jcGw7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgIH0KKyAg ICBpZiAobiA9PSBSRVBMWV9DT05USU5VRSkgeworICAgICAgICBhZmxhZysrOworICAgICAgICBp ZiAoYWNjdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0aWMgY2hhciBmdHBhY2N0WzgwXTsK KyAgICAgICAgICAgIGludCBvazsKKyAgICAgICAgICAgIHNldGludCgpOworICAgICAgICAgICAg b2sgPSB1cV90eHQoTlVMTCwiIEFjY291bnQ6ICIsMixOVUxMLGZ0cGFjY3QsODAsTlVMTCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfVVFfVElNRU9VVCk7CisgICAgICAgICAgICBp ZiAob2spCisgICAgICAgICAgICAgICAgYWNjdCA9IGJyc3RyaXAoZnRwYWNjdCk7CisgICAgICAg IH0KKyAgICAgICAgbiA9IGZ0cGNtZCgiQUNDVCIsYWNjdCwtMSwtMSxmdHBfdmJtKTsKKyAgICB9 CisgICAgaWYgKG4gIT0gUkVQTFlfQ09NUExFVEUpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs ICJGVFAgbG9naW4gZmFpbGVkLlxuIik7CisgICAgICAgIGlmIChoYXZldXJsKQorICAgICAgICAg IGRvZXhpdChCQURfRVhJVCwtMSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgaWYg KCFhZmxhZyAmJiBhY2N0ICE9IE5VTEwpIHsKKyAgICAgICAgZnRwY21kKCJBQ0NUIixhY2N0LC0x LC0xLGZ0cF92Ym0pOworICAgIH0KKyAgICBtYWtlc3RyKCZmdHBfbG9nbmFtZSx1c2VyKTsKKyAg ICBsb2dnZWRpbiA9IDE7CisjaWZkZWYgTE9DVVMKKyAgICAvKiBVbnByZWZpeGVkIGZpbGUgbWFu YWdlbWVudCBjb21tYW5kcyBnbyB0byBzZXJ2ZXIgKi8KKyAgICBpZiAoYXV0b2xvY3VzICYmICFm dHBfY21kbGluKSB7CisJc2V0bG9jdXMoMCwxKTsKKyAgICB9CisjZW5kaWYgLyogTE9DVVMgKi8K KyAgICBmdHBfaW5pdCgpOworCisgICAgaWYgKGFub255bW91cyAmJiAhcXVpZXQpIHsKKyAgICAg ICAgcHJpbnRmKCIgTG9nZ2VkIGluIGFzIGFub255bW91cyAoJXMpXG4iLHBhc3MpOworICAgICAg ICBtZW1zZXQocGFzcywgMCwgc3RybGVuKHBhc3MpKTsKKyAgICB9CisgICAgaWYgKGZ0cF9yZGly KSB7CisgICAgICAgIGlmIChkb2Z0cGN3ZChmdHBfcmRpciwtMSkgPCAxKQorICAgICAgICAgIGRv ZXhpdChCQURfRVhJVCwtMSk7CisgICAgfQorCisjaWZkZWYgRlRQX1BST1hZCisgICAgaWYgKHBy b3h5KQorICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIEZUUF9QUk9YWSAqLworICAgIHJldHVy bigxKTsKK30KKworc3RhdGljIGludAorZnRwX3Jlc2V0KCkgeworICAgIGludCByYzsKKyNpZmRl ZiBCU0RTRUxFQ1QKKyAgICBpbnQgbmZuZCA9IDE7CisgICAgZmRfc2V0IG1hc2s7CisgICAgRkRf WkVSTygmbWFzayk7CisgICAgd2hpbGUgKG5mbmQgPiAwKSB7CisgICAgICAgIEZEX1NFVChjc29j a2V0LCAmbWFzayk7CisgICAgICAgIGlmICgobmZuZCA9IGVtcHR5KCZtYXNrLDApKSA8IDApIHsK KyAgICAgICAgICAgIHBlcnJvcigicmVzZXQiKTsKKyAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsK KyAgICAgICAgICAgIGxvc3RwZWVyKCk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAg IH0gZWxzZSBpZiAobmZuZCkgeworICAgICAgICAgICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJt LDApOworICAgICAgICB9CisgICAgfQorI2Vsc2UgLyogQlNEU0VMRUNUICovCisjaWZkZWYgSUJN U0VMRUNUCisgICAgaW50IG5mbmQgPSAxOworICAgIHdoaWxlIChuZm5kID4gMCkgeworICAgICAg ICBpZiAoKG5mbmQgPSBlbXB0eSgmY3NvY2tldCwxLDApKSA8IDApIHsKKyAgICAgICAgICAgIHBl cnJvcigicmVzZXQiKTsKKyAgICAgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgICAgIGxv c3RwZWVyKCk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0gZWxzZSBpZiAobmZu ZCkgeworICAgICAgICAgICAgZ2V0cmVwbHkoMCwtMSwtMSxmdHBfdmJtLDApOworICAgICAgICB9 CisgICAgfQorI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlmIC8qIEJTRFNFTEVDVCAqLwor ICAgIHJjID0gKGZ0cGNtZCgiUkVJTiIsTlVMTCwwLDAsZnRwX3ZibSkgPT0gUkVQTFlfQ09NUExF VEUpOworICAgIGlmIChyYyA+IDApCisgICAgICBsb2dnZWRpbiA9IDA7CisgICAgcmV0dXJuKHJj KTsKK30KKworc3RhdGljIGludAorZnRwX3JlbmFtZShmcm9tLCB0bykgY2hhciAqIGZyb20sICog dG87IHsKKyAgICBpbnQgbGNzID0gLTEsIHJjcyA9IC0xOworI2lmbmRlZiBOT0NTRVRTCisgICAg aWYgKGZ0cF94bGEpIHsKKyAgICAgICAgbGNzID0gZnRwX2NzbDsKKyAgICAgICAgaWYgKGxjcyA8 IDApIGxjcyA9IGZjaGFyc2V0OworICAgICAgICByY3MgPSBmdHBfY3N4OworICAgICAgICBpZiAo cmNzIDwgMCkgcmNzID0gZnRwX2NzcjsKKyAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAg IGlmIChmdHBjbWQoIlJORlIiLGZyb20sbGNzLHJjcyxmdHBfdmJtKSA9PSBSRVBMWV9DT05USU5V RSkgeworICAgICAgICByZXR1cm4oZnRwY21kKCJSTlRPIix0byxsY3MscmNzLGZ0cF92Ym0pID09 IFJFUExZX0NPTVBMRVRFKTsKKyAgICB9CisgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmFpbHVyZSAqLworfQorCitzdGF0aWMgaW50CitmdHBfdW1hc2sobWFzaykg Y2hhciAqIG1hc2s7IHsKKyAgICBpbnQgcmM7CisgICAgcmMgPSAoZnRwY21kKCJTSVRFIFVNQVNL IixtYXNrLC0xLC0xLDEpID09IFJFUExZX0NPTVBMRVRFKTsKKyAgICByZXR1cm4ocmMpOworfQor CitzdGF0aWMgaW50CitmdHBfdXNlcih1c2VyLHBhc3MsYWNjdCkgY2hhciAqIHVzZXIsICogcGFz cywgKiBhY2N0OyB7CisgICAgaW50IG4gPSAwLCBhZmxhZyA9IDA7CisgICAgY2hhciBwd2RbUFdE U0laXTsKKworICAgIGlmICghYXV0aF90eXBlICYmIGZ0cF9hdXQpIHsKKyNpZmRlZiBGVFBfU1JQ CisgICAgICAgIGlmIChja19zcnBfaXNfaW5zdGFsbGVkKCkpIHsKKyAgICAgICAgICAgIGlmIChz cnBfZnRwX2F1dGgoIE5VTEwsIHVzZXIsIHBhc3MpKSB7CisgICAgICAgICAgICAgICAgbWFrZXN0 cigmcGFzcyxzcnBfcGFzcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBG VFBfU1JQICovCisgICAgfQorICAgIG4gPSBmdHBjbWQoIlVTRVIiLHVzZXIsLTEsLTEsZnRwX3Zi bSk7CisgICAgaWYgKG4gPT0gUkVQTFlfQ09NUExFVEUpCisgICAgICBuID0gZnRwY21kKCJQQVNT IGR1bW15IixOVUxMLDAsMCwxKTsKKyAgICBlbHNlIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7 CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICBpbnQgb2xkZnRwX2NwbDsKKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisgICAgICAgIGlmIChwYXNzID09IE5VTEwgfHwgIXBhc3NbMF0p IHsKKyAgICAgICAgICAgIGludCBvazsKKyAgICAgICAgICAgIHB3ZFswXSA9ICdcMCc7CisgICAg ICAgICAgICBzZXRpbnQoKTsKKyAgICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwsIiBQYXNzd29y ZDogIiwyLE5VTEwscHdkLFBXRFNJWixOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgREVG QVVMVF9VUV9USU1FT1VUKTsKKyAgICAgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgICAgICBw YXNzID0gYnJzdHJpcChwd2QpOworICAgICAgICB9CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisg ICAgICAgIGlmICgob2xkZnRwX2NwbCA9IGZ0cF9jcGwpID09IFBST1RfUykKKyAgICAgICAgICBm dHBfY3BsID0gUFJPVF9QOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgbiA9 IGZ0cGNtZCgiUEFTUyIscGFzcywtMSwtMSwxKTsKKyAgICAgICAgbWVtc2V0KHBhc3MsIDAsIHN0 cmxlbihwYXNzKSk7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAvKiBsZXZlbCBtYXkg aGF2ZSBjaGFuZ2VkICovCisgICAgICAgIGlmIChmdHBfY3BsID09IFBST1RfUCkKKyAgICAgICAg ICBmdHBfY3BsID0gb2xkZnRwX2NwbDsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAg fQorICAgIGlmIChuID09IFJFUExZX0NPTlRJTlVFKSB7CisgICAgICAgIGlmIChhY2N0ID09IE5V TEwgfHwgIWFjY3RbMF0pIHsKKyAgICAgICAgICAgIGludCBvazsKKyAgICAgICAgICAgIHB3ZFsw XSA9ICdcMCc7CisgICAgICAgICAgICBzZXRpbnQoKTsKKyAgICAgICAgICAgIG9rID0gdXFfdHh0 KE5VTEwsIiBBY2NvdW50OiAiLDIsTlVMTCxwd2QsUFdEU0laLE5VTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICBERUZBVUxUX1VRX1RJTUVPVVQpOworICAgICAgICAgICAgaWYgKG9rKQorICAg ICAgICAgICAgICAgIGFjY3QgPSBwd2Q7CisgICAgICAgIH0KKyAgICAgICAgbiA9IGZ0cGNtZCgi QUNDVCIsYWNjdCwtMSwtMSxmdHBfdmJtKTsKKyAgICAgICAgYWZsYWcrKzsKKyAgICB9CisgICAg aWYgKG4gIT0gUkVQTFlfQ09NUExFVEUpIHsKKyAgICAgICAgcHJpbnRmKCJMb2dpbiBmYWlsZWQu XG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoIWFmbGFnICYmIGFjY3Qg IT0gTlVMTCAmJiBhY2N0WzBdKSB7CisgICAgICAgIG4gPSBmdHBjbWQoIkFDQ1QiLGFjY3QsLTEs LTEsZnRwX3ZibSk7CisgICAgfQorICAgIGlmIChuID09IFJFUExZX0NPTVBMRVRFKSB7CisgICAg ICAgIG1ha2VzdHIoJmZ0cF9sb2duYW1lLHVzZXIpOworICAgICAgICBsb2dnZWRpbiA9IDE7Cisg ICAgICAgIGZ0cF9pbml0KCk7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisgICAgcmV0dXJu KDApOworfQorCitjaGFyICoKK2Z0cF9hdXRodHlwZSgpIHsKKyAgICBpZiAoIWNvbm5lY3RlZCkK KyAgICAgIHJldHVybigiTlVMTCIpOworICAgIHJldHVybihhdXRoX3R5cGUgPyBhdXRoX3R5cGUg OiAiTlVMTCIpOworfQorCitjaGFyICoKK2Z0cF9jcGxfbW9kZSgpIHsKKyAgICBzd2l0Y2ggKGZ0 cF9jcGwpIHsKKyAgICAgIGNhc2UgRlBMX0NMUjoKKyAgICAgICAgcmV0dXJuKCJjbGVhciIpOwor ICAgICAgY2FzZSBGUExfU0FGOgorICAgICAgICByZXR1cm4oInNhZmUiKTsKKyAgICAgIGNhc2Ug RlBMX1BSVjoKKyAgICAgICAgcmV0dXJuKCJwcml2YXRlIik7CisgICAgICBjYXNlIEZQTF9DT046 CisgICAgICAgIHJldHVybigiY29uZmlkZW50aWFsIik7CisgICAgICBkZWZhdWx0OgorICAgICAg ICByZXR1cm4oIihlcnJvcikiKTsKKyAgICB9Cit9CisKK2NoYXIgKgorZnRwX2RwbF9tb2RlKCkg eworICAgIHN3aXRjaCAoZnRwX2RwbCkgeworICAgICAgY2FzZSBGUExfQ0xSOgorICAgICAgICBy ZXR1cm4oImNsZWFyIik7CisgICAgICBjYXNlIEZQTF9TQUY6CisgICAgICAgIHJldHVybigic2Fm ZSIpOworICAgICAgY2FzZSBGUExfUFJWOgorICAgICAgICByZXR1cm4oInByaXZhdGUiKTsKKyAg ICAgIGNhc2UgRlBMX0NPTjoKKyAgICAgICAgcmV0dXJuKCJjb25maWRlbnRpYWwiKTsKKyAgICAg IGRlZmF1bHQ6CisgICAgICAgIHJldHVybigiKGVycm9yKSIpOworICAgIH0KK30KKworCisvKiBy ZW1vdGVfZmlsZXMoKSAqLworLyoKKyAgIFJldHVybnMgbmV4dCByZW1vdGUgZmlsZW5hbWUgb24g c3VjY2VzczsKKyAgIE5VTEwgb24gZXJyb3Igb3Igbm8gbW9yZSBmaWxlcyB3aXRoIGdsb2JhbCBy ZnJjIHNldCB0bzoKKyAgICAgLTE6IEJhZCBhcmd1bWVudAorICAgICAtMjogU2VydmVyIGVycm9y IHJlc3BvbnNlIHRvIE5MU1QsIGUuZy4gZmlsZSBub3QgZm91bmQKKyAgICAgLTM6IE5vIG1vcmUg ZmlsZXMKKyAgICAgLTk6IEludGVybmFsIGVycm9yCisqLworI2RlZmluZSBGVFBOQU1CVUZMRU4g Q0tNQVhQQVRIKzEwMjQKKworLyogQ2hlY2s6IGNrbWF4ZmlsZXMgQ0tNQVhPUEVOICovCisKKyNk ZWZpbmUgTUxTREVQVEggMTI4CQkJLyogU3RhY2sgb2Ygb3BlbiB0ZW1wIGZpbGVzICovCitzdGF0 aWMgaW50IG1sc2RlcHRoID0gMDsJCS8qIFRlbXAgZmlsZSBzdGFjayBkZXB0aCAqLworc3RhdGlj IEZJTEUgKiB0bXBmaWxwdHJbTUxTREVQVEgrMV0gPSB7IE5VTEwsIE5VTEwgfTsgLyogVGVtcCBm aWxlIHBvaW50ZXJzICovCitzdGF0aWMgY2hhciAqIHRtcGZpbG5hbVtNTFNERVBUSCsxXSA9IHsg TlVMTCwgTlVMTCB9OyAvKiBUZW1wIGZpbGUgbmFtZXMgKi8KKworc3RhdGljIFZPSUQKK21sc3Jl c2V0KCkgewkJCQkvKiBSZXNldCBNR0VUIHRlbXAtZmlsZSBzdGFjayAqLworICAgIGludCBpOwor ICAgIGZvciAoaSA9IDA7IGkgPD0gbWxzZGVwdGg7IGkrKykgeworCWlmICh0bXBmaWxwdHJbaV0p IHsKKwkgICAgZmNsb3NlKHRtcGZpbHB0cltpXSk7CisJICAgIHRtcGZpbHB0cltpXSA9IE5VTEw7 CisJICAgIGlmICh0bXBmaWxuYW1baV0pIHsKKyNpZmRlZiBPUzIKKwkJdW5saW5rKHRtcGZpbG5h bVtpXSk7CisjZW5kaWYgLyogT1MyICovCisJCWZyZWUodG1wZmlsbmFtW2ldKTsKKwkgICAgfQor CX0KKyAgICB9CisgICAgbWxzZGVwdGggPSAwOworfQorCitzdGF0aWMgQ0hBUiAqCisjaWZkZWYg Q0tfQU5TSUMKK3JlbW90ZV9maWxlcyhpbnQgbmV3X3F1ZXJ5LCBDSEFSICogYXJnLCBDSEFSICog cGF0dGVybiwgaW50IHByb3h5X3N3aXRjaCkKKyNlbHNlIC8qIENLX0FOU0lDICovCityZW1vdGVf ZmlsZXMobmV3X3F1ZXJ5LCBhcmcsIHBhdHRlcm4sIHByb3h5X3N3aXRjaCkKKyAgICBpbnQgbmV3 X3F1ZXJ5OworICAgIENIQVIgKiBhcmc7CQkJCS8qIFRoYXQgd2Ugc2VuZCB0byB0aGUgc2VydmVy ICovCisgICAgQ0hBUiAqIHBhdHRlcm47CQkJLyogVGhhdCB3ZSB1c2UgbG9jYWxseSAqLworICAg IGludCBwcm94eV9zd2l0Y2g7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHJlbW90ZV9maWxl cyAqLyB7CisgICAgc3RhdGljIENIQVIgYnVmW0ZUUE5BTUJVRkxFTl07CisgICAgQ0hBUiAqY3As ICp3aGljaGFyZzsKKyAgICBjaGFyICogY2R0byA9IE5VTEw7CisgICAgY2hhciAqIHA7CisgICAg aW50IGksIHgsIGZvcmNlZCA9IDA7CisgICAgaW50IGxjcyA9IDAsIHJjcyA9IDAsIHhsYXRlID0g MDsKKworICAgIGRlYnVnKEYxMDEsImZ0cCByZW1vdGVfZmlsZXMgbmV3X3F1ZXJ5IiwiIixuZXdf cXVlcnkpOworICAgIGRlYnVnKEYxMTAsImZ0cCByZW1vdGVfZmlsZXMgYXJnIixhcmcsMCk7Cisg ICAgZGVidWcoRjExMCwiZnRwIHJlbW90ZV9maWxlcyBwYXR0ZXJuIixwYXR0ZXJuLDApOworCisg ICAgcmZyYyA9IC0xOworICAgIGlmIChwYXR0ZXJuKQkJCS8qIFRyZWF0IGVtcHR5IHBhdHRlcm4g c2FtZSBhcyBOVUxMICovCisgICAgICBpZiAoISpwYXR0ZXJuKQorCXBhdHRlcm4gPSBOVUxMOwor ICAgIGlmIChhcmcpCQkJCS8qIERpdHRvIGZvciBhcmcgKi8KKyAgICAgIGlmICghKmFyZykKKwlh cmcgPSBOVUxMOworCisgIGFnYWluOgorCisgICAgaWYgKG5ld19xdWVyeSkgeworICAgICAgICBp ZiAodG1wZmlscHRyW21sc2RlcHRoXSkgeworICAgICAgICAgICAgZmNsb3NlKHRtcGZpbHB0cltt bHNkZXB0aF0pOworICAgICAgICAgICAgdG1wZmlscHRyW21sc2RlcHRoXSA9IE5VTEw7CisjaWZk ZWYgT1MyCisgICAgICAgICAgICBpZiAoIWZ0cF9kZWIgJiYgIWRlYmxvZykKKyAgICAgICAgICAg ICAgdW5saW5rKHRtcGZpbG5hbVttbHNkZXB0aF0pOworI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICB9CisgICAgfQorICAgIGlmICh0bXBmaWxwdHJbbWxzZGVwdGhdID09IE5VTEwpIHsKKyAgICAg ICAgZXh0ZXJuIGNoYXIgKiB0ZW1wZGlyOworICAgICAgICBjaGFyICogcDsKKyAgICAgICAgZGVi dWcoRjExMCwiZnRwIHJlbW90ZV9maWxlcyB0ZW1wZGlyIix0ZW1wZGlyLDApOworICAgICAgICBp ZiAodGVtcGRpcikgeworICAgICAgICAgICAgcCA9IHRlbXBkaXI7CisgICAgICAgIH0gZWxzZSB7 CisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAgICAgICAgIHAgPSBnZXRlbnYoIks5NVRNUCIp OworI2Vsc2UKKyAgICAgICAgICAgIHAgPSBnZXRlbnYoIksyVE1QIik7CisjZW5kaWYgLyogTlQg Ki8KKyAgICAgICAgICAgIGlmICghcCkKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAg cCA9IGdldGVudigiQ0tfVE1QIik7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAg IHAgPSBnZXRlbnYoIlRNUERJUiIpOworICAgICAgICAgICAgaWYgKCFwKSBwID0gZ2V0ZW52KCJU RU1QIik7CisgICAgICAgICAgICBpZiAoIXApIHAgPSBnZXRlbnYoIlRNUCIpOworI2lmZGVmIE9T Mk9SVU5JWAorICAgICAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0g c3RybGVuKHApOworICAgICAgICAgICAgICAgIGlmIChwW2xlbi0xXSAhPSAnLycKKyNpZmRlZiBP UzIKKyAgICAgICAgICAgICAgICAgICAgJiYgcFtsZW4tMV0gIT0gJ1xcJworI2VuZGlmIC8qIE9T MiAqLworICAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRp YyBjaGFyIGZvb1tDS01BWFBBVEhdOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm9v LHAsQ0tNQVhQQVRIKTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGZvbywiLyIsQ0tN QVhQQVRIKTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IGZvbzsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UKKyNlbHNlIC8qIE9TMk9SVU5JWCAqLworICAgICAgICAgICAg aWYgKCFwKQorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2lmZGVmIFVOSVggICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFN5c3RlbXMgdGhhdCBoYXZlIGEgc3RhbmRhcmQgKi8KKyAgICAg ICAgICAgICAgICBwID0gIi90bXAvIjsgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgZGlyZWN0b3J5 Li4uICovCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAgICAgICBwID0gIjpUTVA6 IjsKKyNlbHNlCisgICAgICAgICAgICBwID0gIiI7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K KyNlbmRpZiAvKiBVTklYICovCisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwiZnRwIHJl bW90ZV9maWxlcyBwIixwLDApOworCisJLyogR2V0IHRlbXAgZmlsZSAqLworCisJaWYgKCh0bXBm aWxuYW1bbWxzZGVwdGhdID0gKGNoYXIgKiltYWxsb2MoQ0tNQVhQQVRIKzEpKSkgeworCSAgICBj a21ha21zZygoY2hhciAqKXRtcGZpbG5hbVttbHNkZXB0aF0sCisJCSAgICAgQ0tNQVhQQVRIKzEs cCwiY2tYWFhYWFgiLE5VTEwsTlVMTCk7CisJfSBlbHNlIHsKKwkgICAgcHJpbnRmKCI/TWFsbG9j IGZhaWx1cmU6IHJlbW90ZV9maWxlcygpXG4iKTsKKwkgICAgcmV0dXJuKE5VTEwpOworCX0KKwor I2lmZGVmIE5UCisJeworCSAgICBjaGFyICogdG1wZmlsID0gbWt0ZW1wKChjaGFyICopdG1wZmls bmFtW21sc2RlcHRoXSk7CisJICAgIGlmICggdG1wZmlsICkKKwkJY2tzdHJuY3B5KHRtcGZpbG5h bVttbHNkZXB0aF0sdG1wZmlsLENLTUFYUEFUSCsxKTsKKwl9CisjZWxzZSAvKiBOVCAqLworI2lm ZGVmIE1LVEVNUAorI2lmZGVmIE1LU1RFTVAKKwl4ID0gbWtzdGVtcCgoY2hhciAqKXRtcGZpbG5h bVttbHNkZXB0aF0pOworCWlmICh4ID4gLTEpIGNsb3NlKHgpOwkJLyogV2UganVzdCB3YW50IHRo ZSBuYW1lLiAqLworI2Vsc2UKKyAgICAgICAgbWt0ZW1wKChjaGFyICopdG1wZmlsbmFtW21sc2Rl cHRoXSk7CisjZW5kaWYgLyogTUtTVEVNUCAqLworICAgICAgICAvKiBpZiBubyBta3RtcG5hbSgp IHRoZSBuYW1lIHdpbGwganVzdCBiZSAiY2tYWFhYWFgiLi4uICovCisjZW5kaWYgLyogTUtURU1Q ICovCisjZW5kaWYgLyogTlQgKi8KKworCWRlYnVnKEYxMTEsImZ0cCByZW1vdGVfZmlsZXMgdG1w ZmlsbmFtW21sc2RlcHRoXSIsCisJICAgICAgdG1wZmlsbmFtW21sc2RlcHRoXSxtbHNkZXB0aCk7 CisKKyNpZmRlZiBGVFBfUFJPWFkKKyAgICAgICAgaWYgKHByb3h5X3N3aXRjaCkgeworICAgICAg ICAgICAgcHN3aXRjaCghcHJveHkpOworICAgICAgICB9CisjZW5kaWYgLyogRlRQX1BST1hZICov CisKKyAgICAgICAgZGVidWcoRjEwMSwiZnRwIHJlbW90ZV9maWxlcyBmdHBfeGxhIiwiIixmdHBf eGxhKTsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRwIHJlbW90ZV9maWxlcyBmdHBfY3NsIiwiIixm dHBfY3NsKTsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRwIHJlbW90ZV9maWxlcyBmdHBfY3NyIiwi IixmdHBfY3NyKTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgICAgIHhsYXRlID0gZnRwX3hsYTsg ICAgICAgICAgICAgICAgLyogU0VUIEZUUCBDSEFSQUNURVItU0VULVRSQU5TTEFUSU9OICovCisg ICAgICAgIGlmICh4bGF0ZSkgeyAgICAgICAgICAgICAgICAgICAgLyogT04/ICovCisgICAgICAg ICAgICBsY3MgPSBmdHBfY3NsOyAgICAgICAgICAgICAgLyogTG9jYWwgY2hhcnNldCAqLworICAg ICAgICAgICAgaWYgKGxjcyA8IDApIGxjcyA9IGZjaGFyc2V0OworICAgICAgICAgICAgaWYgKGxj cyA8IDApIHhsYXRlID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoeGxhdGUpIHsgICAgICAg ICAgICAgICAgICAgIC8qIFN0aWxsIE9OPyAqLworICAgICAgICAgICAgcmNzID0gZnRwX2NzeDsg ICAgICAgICAgICAgIC8qIFJlbW90ZSAoU2VydmVyKSBjaGFyc2V0ICovCisgICAgICAgICAgICBp ZiAocmNzIDwgMCkgcmNzID0gZnRwX2NzcjsKKyAgICAgICAgICAgIGlmIChyY3MgPCAwKSB4bGF0 ZSA9IDA7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKwlmb3JjZWQgPSBtZ2V0 Zm9yY2VkOwkJLyogTUdFVCBtZXRob2QgZm9yY2VkPyAqLworCWlmICghZm9yY2VkIHx8ICFtZ2V0 bWV0aG9kKQkvKiBOb3QgZm9yY2VkLi4uICovCisJICBtZ2V0bWV0aG9kID0gKHNmdHRhYlswXSAm JiBzZnR0YWJbU0ZUX01MU1RdKSA/IC8qIHNvIHBpY2sgb25lICovCisJICAgICAgU05EX01MUyA6 CisJICAgICAgU05EX05MUzsgCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKyAgVXNlcidzIENvbW1hbmQ6ICAgICAgICAgICAgICAgICBSZXN1bHQ6CisgICAg bWdldCAvbmxzdCAgICAgICAgICAgICAgICAgICAgIE5MU1QgKE5VTEwpCisgICAgbWdldCAvbmxz dCBmb28gICAgICAgICAgICAgICAgIE5MU1QgZm9vCisgICAgbWdldCAvbmxzdCAqLnR4dCAgICAg ICAgICAgICAgIE5MU1QgKi50eHQgCisgICAgbWdldCAvbmxzdCAvbWF0Y2g6Ki50eHQgICAgICAg IE5MU1QgKE5VTEwpCisgICAgbWdldCAvbmxzdCAvbWF0Y2g6Ki50eHQgIGZvbyAgIE5MU1QgZm9v ICAgCisgICAgbWdldCAvbWxzZCAgICAgICAgICAgICAgICAgICAgIE1MU0QgKE5VTEwpCisgICAg bWdldCAvbWxzZCBmb28gICAgICAgICAgICAgICAgIE1MU0QgZm9vCisgICAgbWdldCAvbWxzZCAq LnR4dCAgICAgICAgICAgICAgIE1MU0QgKE5VTEwpCisgICAgbWdldCAvbWxzZCAvbWF0Y2g6Ki50 eHQgICAgICAgIE1MU0QgKE5VTEwpCisgICAgbWdldCAvbWxzZCAvbWF0Y2g6Ki50eHQgIGZvbyAg IE1MU0QgZm9vCisqLworCXggPSAtMTsKKwl3aGlsZSAoeCA8IDApIHsKKwkgICAgaWYgKHBhdHRl cm4pIHsJCS8qIERvbid0IHNpbXBsaWZ5IHRoaXMhICovCisJCXdoaWNoYXJnID0gYXJnOworCSAg ICB9IGVsc2UgaWYgKG1nZXRtZXRob2QgPT0gU05EX01MUykgeworCQlpZiAoYXJnKQorCQkgIHdo aWNoYXJnID0gaXN3aWxkKChjaGFyICopYXJnKSA/IE5VTEwgOiBhcmc7CisJCWVsc2UKKwkJICB3 aGljaGFyZyA9IE5VTEw7CisJICAgIH0gZWxzZSB7CisJCXdoaWNoYXJnID0gYXJnOworCSAgICB9 CisJICAgIGRlYnVnKEYxMTAsImZ0cCByZW1vdGVfZmlsZXMgbWdldG1ldGhvZCIsCisJCSAgbWdl dG1ldGhvZCA9PSBTTkRfTUxTID8gIk1MU0QiIDogIk5MU1QiLCAwKTsKKwkgICAgZGVidWcoRjEx MCwiZnRwIHJlbW90ZV9maWxlcyB3aGljaGFyZyIsd2hpY2hhcmcsMCk7CisKKwkgICAgeCA9IHJl Y3ZyZXF1ZXN0KChtZ2V0bWV0aG9kID09IFNORF9NTFMpID8gIk1MU0QiIDogIk5MU1QiLAorCQkJ ICAgIChjaGFyICopdG1wZmlsbmFtW21sc2RlcHRoXSwKKwkJCSAgICAoY2hhciAqKXdoaWNoYXJn LAorCQkJICAgICJ3YiIsCisJCQkgICAgMCwKKwkJCSAgICAwLAorCQkJICAgIE5VTEwsCisJCQkg ICAgeGxhdGUsCisJCQkgICAgbGNzLAorCQkJICAgIHJjcworCQkJICAgICk7CisJICAgIGlmICh4 IDwgMCkgewkJLyogQ2hvc2VuIG1ldGhvZCB3YXNuJ3QgYWNjZXB0ZWQgKi8KKwkJaWYgKGZvcmNl ZCkgeworCQkgICAgaWYgKGZ0cGNvZGUgPiA1MDAgJiYgZnRwY29kZSA8IDUwNSAmJiAhcXVpZXQp CisJCSAgICAgIHByaW50ZigiPyVzOiBOb3Qgc3VwcG9ydGVkIGJ5IHNlcnZlclxuIiwKKwkJCSAg ICAgbWdldG1ldGhvZCA9PSBTTkRfTUxTID8gIk1MU0QiIDogIk5MU1QiCisJCQkgICAgICk7CisJ CSAgICByZnJjID0gLTI7CQkvKiBGYWlsICovCisJCSAgICByZXR1cm4oTlVMTCk7CisJCX0KKwkJ LyogTm90IGZvcmNlZCAtIGlmIE1MU0QgZmFpbGVkLCB0cnkgTkxTVCAqLworCQlpZiAobWdldG1l dGhvZCA9PSBTTkRfTUxTKSB7ICAvKiBTZXJ2ZXIgbGllZCBhYm91dCBNTFNUICovCisJCSAgICBz ZnR0YWJbU0ZUX01MU1RdID0gMDsgICAgIC8qIFNvIGRpc2FibGUgaXQgKi8KKwkJICAgIG1sc3Rv ayA9IDA7CQkgICAgICAvKiBhbmQgKi8KKwkJICAgIG1nZXRtZXRob2QgPSBTTkRfTkxTOyAgICAg LyogdHJ5IE5MU1QgKi8KKwkJICAgIGNvbnRpbnVlOworCQl9CisJCXJmcmMgPSAtMjsKKwkJcmV0 dXJuKE5VTEwpOworCSAgICB9CisJfQorI2lmZGVmIEZUUF9QUk9YWQorICAgICAgICBpZiAocHJv eHlfc3dpdGNoKSB7CisgICAgICAgICAgICBwc3dpdGNoKCFwcm94eSk7CisgICAgICAgIH0KKyNl bmRpZiAvKiBGVFBfUFJPWFkgKi8KKyAgICAgICAgdG1wZmlscHRyW21sc2RlcHRoXSA9IGZvcGVu KChjaGFyICopdG1wZmlsbmFtW21sc2RlcHRoXSwgInIiKTsKKyNpZm5kZWYgT1MyCisJaWYgKHRt cGZpbHB0clttbHNkZXB0aF0pIHsKKwkgICAgaWYgKCFmdHBfZGViICYmICFkZWJsb2cpCisJICAg ICAgdW5saW5rKHRtcGZpbG5hbVttbHNkZXB0aF0pOworCX0KKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgIG5vdGVtcDoKKyAgICAgICAgaWYgKCF0bXBmaWxwdHJbbWxzZGVwdGhdKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJmdHAgcmVtb3RlX2ZpbGVzIG9wZW4gZmFpbCIsdG1wZmlsbmFtW21s c2RlcHRoXSwwKTsKKyAgICAgICAgICAgIGlmICgoIWRweWFjdGl2ZSB8fCBmdHBfZGViKSkKKyAg ICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgZmluZCBsaXN0IG9mIHJlbW90ZSBmaWxlcywgb29w c1xuIik7CisgICAgICAgICAgICByZnJjID0gLTk7CisgICAgICAgICAgICByZXR1cm4oTlVMTCk7 CisgICAgICAgIH0KKwlpZiAoZnRwX2RlYikKKwkgIHByaW50ZigiTElTVEZJTEU6ICVzXG4iLHRt cGZpbG5hbVttbHNkZXB0aF0pOworICAgIH0KKyAgICBidWZbMF0gPSBOVUw7CisgICAgYnVmW0ZU UE5BTUJVRkxFTi0xXSA9IE5VTDsKKyAgICBidWZbRlRQTkFNQlVGTEVOLTJdID0gTlVMOworCisg ICAgLyogV2UgaGF2ZSB0byByZWRvIGFsbCB0aGlzIGJlY2F1c2UgdGhlIGZpcnN0IHRpbWUgd2Fz IG9ubHkgZm9yICovCisgICAgLyogZm9yIGdldHRpbmcgdGhlIGZpbGUgbGlzdCwgbm93IGl0J3Mg Zm9yIGdldHRpbmcgZWFjaCBmaWxlICovCisKKyAgICBpZiAoYXJnICYmIG1nZXRtZXRob2QgPT0g U05EX01MUykgewkvKiBNTFNEICovCisJaWYgKCFwYXR0ZXJuICYmIGlzd2lsZCgoY2hhciAqKWFy ZykpIHsKKwkgICAgcGF0dGVybiA9IGFyZzsJCS8qIFdpbGQgYXJnIGlzIHJlYWxseSBhIHBhdHRl cm4gKi8KKwkgICAgaWYgKHBhdHRlcm4pCisJICAgICAgaWYgKCEqcGF0dGVybikKKwkJcGF0dGVy biA9IE5VTEw7CisJICAgIGFyZyA9IE5VTEw7CQkJLyogYW5kIG5vdCBhbiBhcmcgKi8KKwl9CisJ aWYgKG5ld19xdWVyeSkgewkJLyogSW5pdGlhbCBxdWVyeT8gKi8KKwkgICAgY2R0byA9IChjaGFy ICopYXJnOwkJLyogKG5vbndpbGQpIGFyZyBnaXZlbj8gKi8KKwkgICAgaWYgKGNkdG8pCisJICAg ICAgaWYgKCEqY2R0bykKKwkJY2R0byA9IE5VTEw7CisJICAgIGlmIChjZHRvKQkJCS8qIElmIHNv LCB0aGVuIENEIHRvIGl0ICovCisJICAgICAgZG9mdHBjd2QoY2R0bywwKTsKKwl9CisgICAgfQor ICAgIG5ld19xdWVyeSA9IDA7CisKKyAgICBpZiAoZmdldHMoKGNoYXIgKilidWYsIEZUUE5BTUJV RkxFTiwgdG1wZmlscHRyW21sc2RlcHRoXSkgPT0gTlVMTCkgeworICAgICAgICBmY2xvc2UodG1w ZmlscHRyW21sc2RlcHRoXSk7CisgICAgICAgIHRtcGZpbHB0clttbHNkZXB0aF0gPSBOVUxMOwor CisjaWZkZWYgT1MyCisgICAgICAgIGlmICghZnRwX2RlYiAmJiAhZGVibG9nKQorICAgICAgICAg IHVubGluayh0bXBmaWxuYW1bbWxzZGVwdGhdKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg aWYgKGZ0cF9kZWIgJiYgIWRlYmxvZykgeworICAgICAgICAgICAgcHJpbnRmKCIoVGVtcG9yYXJ5 IGZpbGUgJXMgTk9UIGRlbGV0ZWQpXG4iLAorCQkgICAoY2hhciAqKXRtcGZpbG5hbVttbHNkZXB0 aF0pOworICAgICAgICB9CisJaWYgKG1sc2RlcHRoIDw9IDApIHsJCS8qIEVPRiBhdCBkZXB0aCAw ICovCisJICAgIHJmcmMgPSAtMzsJCQkvKiBtZWFucyB3ZSdyZSBkb25lICovCisJICAgIHJldHVy bihOVUxMKTsKKwl9CisJcHJpbnRmKCJQT1BQSU5HKCVkKS4uLlxuIixtbHNkZXB0aC0xKTsgCisJ aWYgKHRtcGZpbG5hbVttbHNkZXB0aF0pIGZyZWUodG1wZmlsbmFtW21sc2RlcHRoXSk7CisJbWxz ZGVwdGgtLTsKKwlkb2Z0cGNkdXAoKTsKKwl6Y2hkaXIoIi4uIik7CQkJLyogPC0tIE5vdCBwb3J0 YWJsZSAqLworCWdvdG8gYWdhaW47CisgICAgfQorICAgIGlmIChidWZbRlRQTkFNQlVGTEVOLTFd KSB7CisJcHJpbnRmKCI/QlVGRkVSIE9WRVJGTE9XIC0tIEZUUCBOTFNUIG9yIE1MU0Qgc3RyaW5n IGxvbmdlciB0aGFuICVkXG4iLAorCSAgICAgICBGVFBOQU1CVUZMRU4KKwkgICAgICAgKTsKKwlk ZWJ1ZyhGMTAxLCJyZW1vdGVfZmlsZXMgYnVmZmVyIG92ZXJydW4iLCIiLEZUUE5BTUJVRkxFTik7 CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICAvKiBkZWJ1ZyhGMTEwLCJmdHAgcmVtb3RlX2Zp bGVzIGJ1ZiAxIixidWYsMCk7ICovCisgICAgaWYgKChjcCA9IChDSEFSICopY2tzdHJjaHIoKGNo YXIgKilidWYsJ1xuJykpICE9IE5VTEwpCisgICAgICAqY3AgPSAnXDAnOworICAgIGlmICgoY3Ag PSAoQ0hBUiAqKWNrc3RyY2hyKChjaGFyICopYnVmLCdccicpKSAhPSBOVUxMKQorICAgICAgKmNw ID0gJ1wwJzsKKyAgICBkZWJ1ZyhGMTEwLCJmdHAgcmVtb3RlX2ZpbGVzIGJ1ZiIsYnVmLDApOwor ICAgIHJmcmMgPSAwOworCisgICAgaWYgKGZ0cF9kZWIpCisgICAgICBwcmludGYoIlslc11cbiIs KGNoYXIgKilidWYpOworCisgICAgaGF2ZXNpemUgPSAoQ0tfT0ZGX1QpLTE7CQkvKiBJbml0aWFs aXplIGZpbGUgZmFjdHMuLi4gKi8KKyAgICBoYXZldHlwZSA9IDA7CisgICAgbWFrZXN0cigmaGF2 ZW1kdG0sTlVMTCk7CisgICAgcCA9IChjaGFyICopYnVmOworCisgICAgaWYgKG1nZXRtZXRob2Qg PT0gU05EX05MUykgewkvKiBOTFNULi4uICovCisJaWYgKHBhdHRlcm4pIHsKKwkgICAgaWYgKCFj a21hdGNoKChjaGFyICopcGF0dGVybixwLChzZXJ2ZXJ0eXBlID09IFNZU19VTklYKSwxKSkKKwkg ICAgICBnb3RvIGFnYWluOworCX0KKyAgICB9IGVsc2UgewkJCQkvKiBNTFNELi4uICovCisJcCA9 IHBhcnNlZmFjdHMoKGNoYXIgKilidWYpOworCXN3aXRjaCAoaGF2ZXR5cGUpIHsKKwkgIGNhc2Ug RlRZUF9GSUxFOgkJLyogRmlsZTogR2V0IGl0IGlmIGl0IG1hdGNoZXMgKi8KKwkgICAgaWYgKHBh dHRlcm4pIHsKKwkJaWYgKCFja21hdGNoKChjaGFyICopcGF0dGVybixwLChzZXJ2ZXJ0eXBlID09 IFNZU19VTklYKSwxKSkKKwkJICBnb3RvIGFnYWluOworCSAgICB9CisJICAgIGJyZWFrOworCSAg Y2FzZSBGVFlQX0NESVI6CQkvKiBDdXJyZW50IGRpcmVjdG9yeSAqLworCSAgY2FzZSBGVFlQX1BE SVI6CQkvKiBQYXJlbnQgZGlyZWN0b3J5ICovCisJICAgIGdvdG8gYWdhaW47CQkJLyogU2tpcCAq LworCSAgY2FzZSBGVFlQX0RJUjoJCS8qIChTdWIpRGlyZWN0b3J5ICovCisJICAgIGlmICghcmVj dXJzaXZlKQkJLyogSWYgbm90IC9SRUNVUlNJVkUgKi8KKwkgICAgICBnb3RvIGFnYWluOwkJLyog U2tpcCAqLworCSAgICBpZiAobWxzZGVwdGggPCBNTFNERVBUSCkgeworCQljaGFyICogcDIgPSBO VUxMOworCQltbHNkZXB0aCsrOworCQlwcmludGYoIlJFQ1VSU0lORyBbJXNdKCVkKS4uLlxuIixw LG1sc2RlcHRoKTsgCisJCWlmIChkb2Z0cGN3ZChwLDApID4gMCkgeworCQkgICAgaW50IHg7CisJ CSAgICBpZiAoIWNrc3RyY2hyKHAsJy8nKSkgeworCQkJLyogem1rZGlyKCkgbmVlZHMgZGlyc2Vw ICovCisJCQlpZiAoKHAyID0gKGNoYXIgKiltYWxsb2MoKGludClzdHJsZW4ocCkgKyAyKSkpIHsK KwkJCSAgICBzdHJjcHkocDIscCk7CS8qIFNBRkUgKi8KKwkJCSAgICBzdHJjYXQocDIsIi8iKTsJ LyogU0FGRSAqLworCQkJICAgIHAgPSBwMjsKKwkJCX0KKwkJICAgIH0KKyNpZmRlZiBOT01LRElS CisJCSAgICB4ID0gLTE7CisjZWxzZQorCQkgICAgeCA9IHpta2RpcihwKTsKKyNlbmRpZiAvKiBO T01LRElSICovCisJCSAgICBpZiAoeCA+IC0xKSB7CisJCQl6Y2hkaXIocCk7CisJCQlwID0gKGNo YXIgKilyZW1vdGVfZmlsZXMoMSxhcmcscGF0dGVybiwwKTsKKwkJCWlmIChwMikgZnJlZShwMik7 CisJCSAgICB9IGVsc2UgeworCQkJcHJpbnRmKCI/bWtkaXIgZmFpbGVkOiBbJXNdIERlcHRoPSVk XG4iLAorCQkJICAgICAgIHAsCisJCQkgICAgICAgbWxzZGVwdGgKKwkJCSAgICAgICApOworCQkJ bWxzcmVzZXQoKTsKKwkJCWlmIChwMikgZnJlZShwMik7CisJCQlyZXR1cm4oTlVMTCk7CisJCSAg ICB9CisJCX0gZWxzZSB7CisJCSAgICBwcmludGYoIj9DV0QgZmFpbGVkOiBbJXNdIERlcHRoPSVk XG4iLHAsbWxzZGVwdGgpOworCQkgICAgbWxzcmVzZXQoKTsKKwkJICAgIHJldHVybihOVUxMKTsK KwkJfQorCSAgICB9IGVsc2UgeworCQlwcmludGYoIk1BWCBESVJFQ1RPUlkgU1RBQ0sgREVQVEgg RVhDRUVERUQ6ICVkXG4iLAorCQkgICAgICAgbWxzZGVwdGgKKwkJICAgICAgICk7CisJCW1sc3Jl c2V0KCk7CisJCXJldHVybihOVUxMKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyNpZmRlZiBERUJV RworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJyZW1vdGVfZmlsZXMgaGF2ZXNpemUi LCIiLGhhdmVzaXplKTsKKwlkZWJ1ZyhGMTAxLCJyZW1vdGVfZmlsZXMgaGF2ZXR5cGUiLCIiLGhh dmV0eXBlKTsKKwlkZWJ1ZyhGMTEwLCJyZW1vdGVfZmlsZXMgaGF2ZW1kdG0iLGhhdmVtZHRtLDAp OwkKKwlkZWJ1ZyhGMTEwLCJyZW1vdGVfZmlsZXMgbmFtZSIscCwwKTsJCisgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisgICAgcmV0dXJuKChDSEFSICopcCk7Cit9CisKKy8qIE4gTyBUICBQIE8g UiBUIEEgQiBMIEUgISEhICovCisKKyNpZiAoU0laRU9GX1NIT1JUID09IDQpCit0eXBlZGVmIHVu c2lnbmVkIHNob3J0IGZ0cF91aW50MzI7Cit0eXBlZGVmIHNob3J0IGZ0cF9pbnQzMjsKKyNlbHNl CisjaWYgKFNJWkVPRl9JTlQgPT0gNCkKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZ0cF91aW50MzI7 Cit0eXBlZGVmIGludCBmdHBfaW50MzI7CisjZWxzZQorI2lmIChTSVpFT0ZfTE9ORyA9PSA0KQor dHlwZWRlZiBVTE9ORyBmdHBfdWludDMyOwordHlwZWRlZiBsb25nIGZ0cF9pbnQzMjsKKyNlbmRp ZgorI2VuZGlmCisjZW5kaWYKKworLyogUGVyaGFwcyB1c2UgdGhlc2UgaW4gZ2VuZXJhbCwgY2Vy dGFpbmx5IHVzZSB0aGVtIGZvciBHU1NBUEkgKi8KKworI2lmbmRlZiBsb29waW5nX3dyaXRlCisj ZGVmaW5lIGZ0cF9pbnQzMiBpbnQKKyNkZWZpbmUgZnRwX3VpbnQzMiB1bnNpZ25lZCBpbnQKK3N0 YXRpYyBpbnQKK2xvb3Bpbmdfd3JpdGUoZmQsIGJ1ZiwgbGVuKQorICAgIGludCBmZDsKKyAgICBy ZWdpc3RlciBDT05TVCBjaGFyICpidWY7CisgICAgaW50IGxlbjsKK3sKKyAgICBpbnQgY2M7Cisg ICAgcmVnaXN0ZXIgaW50IHdybGVuID0gbGVuOworICAgIGRvIHsKKyAgICAgICAgY2MgPSBzZW5k KGZkLCAoU0VOREFSRzJUWVBFKWJ1Ziwgd3JsZW4sIDApOworICAgICAgICBpZiAoY2MgPCAwKSB7 CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICAgICAgcmV0dXJuKGNjKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IGJ1ZiArPSBjYzsKKyAgICAgICAgICAgIHdybGVuIC09IGNjOworICAgICAgICB9CisgICAgfSB3 aGlsZSAod3JsZW4gPiAwKTsKKyAgICByZXR1cm4obGVuKTsKK30KKyNlbmRpZgorI2lmbmRlZiBs b29waW5nX3JlYWQKK3N0YXRpYyBpbnQKK2xvb3BpbmdfcmVhZChmZCwgYnVmLCBsZW4pCisgICAg aW50IGZkOworICAgIHJlZ2lzdGVyIGNoYXIgKmJ1ZjsKKyAgICByZWdpc3RlciBpbnQgbGVuOwor eworICAgIGludCBjYywgbGVuMiA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGNjID0gcmVjdihm ZCwgKGNoYXIgKilidWYsIGxlbiwwKTsKKyAgICAgICAgaWYgKGNjIDwgMCkgeworICAgICAgICAg ICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgIHJldHVybihjYyk7ICAgICAgICAgICAgICAgICAvKiBlcnJubyBpcyBhbHJlYWR5IHNldCAq LworICAgICAgICB9IGVsc2UgaWYgKGNjID09IDApIHsKKyAgICAgICAgICAgIHJldHVybihsZW4y KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZiArPSBjYzsKKyAgICAgICAgICAg IGxlbjIgKz0gY2M7CisgICAgICAgICAgICBsZW4gLT0gY2M7CisgICAgICAgIH0KKyAgICB9IHdo aWxlIChsZW4gPiAwKTsKKyAgICByZXR1cm4obGVuMik7Cit9CisjZW5kaWYgLyogbG9vcGluZ19y ZWFkICovCisKKyNkZWZpbmUgRVJSIC0yCisKKyNpZmRlZiBDT01NRU5UCitzdGF0aWMKK3NlY3Vy ZV9wdXRieXRlKGZkLCBjKSBpbnQgZmQ7IENIQVIgYzsgeworICAgIGludCByZXQ7CisKKyAgICB1 Y2J1Zltub3V0KytdID0gYzsKKyAgICBpZiAobm91dCA9PSAobWF4YnVmID8gbWF4YnVmIDogYWN0 dWFsYnVmKSAtIEZVREdFX0ZBQ1RPUikgeworICAgICAgICBub3V0ID0gMDsKKyAgICAgICAgaWYg KCFmdHBpc3NlY3VyZSgpKQorICAgICAgICAgIHJldCA9IHNlbmQoZmQsIChTRU5EQVJHMlRZUEUp dWNidWYsCisgICAgICAgICAgICAgICAgICAgICAobWF4YnVmID8gbWF4YnVmIDogYWN0dWFsYnVm KSAtIEZVREdFX0ZBQ1RPUiwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXQgPSBzZWN1 cmVfcHV0YnVmKGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNidWYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobWF4YnVmID8gbWF4YnVmIDogYWN0dWFsYnVmKSAt IEZVREdFX0ZBQ1RPUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg cmV0dXJuKHJldD9yZXQ6Yyk7CisgICAgfQorICAgIHJldHVybihjKTsKK30KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKy8qIHJldHVybnM6CisgKiAgICAgICAwICBvbiBzdWNjZXNzCisgKiAgICAg IC0xICBvbiBlcnJvciAoZXJybm8gc2V0KQorICogICAgICAtMiAgb24gc2VjdXJpdHkgZXJyb3IK KyAqLworc3RhdGljIGludAorc2VjdXJlX2ZsdXNoKGZkKSBpbnQgZmQ7IHsKKyAgICBpbnQgcmMg PSAwOworICAgIGludCBsZW4gPSAwOworCisgICAgaWYgKG5vdXQgPiAwKSB7CisgICAgICAgIGxl biA9IG5vdXQ7CisgICAgICAgIGlmICghZnRwaXNzZWN1cmUoKSkgeworICAgICAgICAgICAgcmMg PSBzZW5kKGZkLCAoU0VOREFSRzJUWVBFKXVjYnVmLCBub3V0LCAwKTsKKyAgICAgICAgICAgIG5v dXQgPSAwOworICAgICAgICAgICAgZ290byB4Zmx1c2g7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICByYyA9IHNlY3VyZV9wdXRidWYoZmQsIHVjYnVmLCBub3V0KTsKKyAgICAgICAgICAg IGlmIChyYykKKyAgICAgICAgICAgICAgZ290byB4Zmx1c2g7CisgICAgICAgIH0KKyAgICB9Cisg ICAgcmMgPSAoIWZ0cGlzc2VjdXJlKCkpID8gMCA6IHNlY3VyZV9wdXRidWYoZmQsIChDSEFSICop IiIsIG5vdXQgPSAwKTsKKworICB4Zmx1c2g6CisgICAgaWYgKHJjID4gLTEgJiYgbGVuID4gMCAm JiBmZGlzcGxhICE9IFhZRkRfQikgeworCXNwYWNrZXRzKys7CisgICAgICAgIHNwa3RsID0gbGVu OworICAgICAgICBmdHNjcmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClzcGFja2V0cyxOVUxMKTsK KyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIChub3QgdXNlZCkgKi8KKy8qIHJldHVybnM6CisgKiAgICAgIGM+PTAg IG9uIHN1Y2Nlc3MKKyAqICAgICAgLTEgICAgb24gZXJyb3IKKyAqICAgICAgLTIgICAgb24gc2Vj dXJpdHkgZXJyb3IKKyAqLworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitzZWN1cmVfcHV0 YyhjaGFyIGMsIGludCBmZCkKKyNlbHNlCitzZWN1cmVfcHV0YyhjLCBmZCkgY2hhciBjOyBpbnQg ZmQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNlY3VyZV9wdXRjICovIHsKKyAgICByZXR1 cm4oc2VjdXJlX3B1dGJ5dGUoZmQsIChDSEFSKSBjKSk7Cit9CisjZW5kaWYgLyogQ09NTUVOVCAq LworCisvKiByZXR1cm5zOgorICogICAgICBuYnl0ZSBvbiBzdWNjZXNzCisgKiAgICAgIC0xICBv biBlcnJvciAoZXJybm8gc2V0KQorICogICAgICAtMiAgb24gc2VjdXJpdHkgZXJyb3IKKyAqLwor c3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitzZWN1cmVfd3JpdGUoaW50IGZkLCBDSEFSICog YnVmLCB1bnNpZ25lZCBpbnQgbmJ5dGUpCisjZWxzZQorc2VjdXJlX3dyaXRlKGZkLCBidWYsIG5i eXRlKQorICAgIGludCBmZDsKKyAgICBDSEFSICogYnVmOworICAgIHVuc2lnbmVkIGludCBuYnl0 ZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCByZXQ7CisKKyNpZmRlZiBGVFBf VElNRU9VVCAgICAKKyAgICBmdHBfdGltZWRfb3V0ID0gMDsKKyAgICBpZiAoY2hlY2tfZGF0YV9j b25uZWN0aW9uKGZkLDEpIDwgMCkgeworCWZ0cF90aW1lZF9vdXQgPSAxOworCXJldHVybigtMyk7 CisgICAgfQorI2VuZGlmCS8qIEZUUF9USU1FT1VUICovCisKKyAgICBpZiAoIWZ0cGlzc2VjdXJl KCkpIHsKKyAgICAgICAgaWYgKG5vdXQgPiAwKSB7CisgICAgICAgICAgICBpZiAoKHJldCA9IHNl bmQoZmQsIChTRU5EQVJHMlRZUEUpdWNidWYsIG5vdXQsIDApKSA8IDApCisgICAgICAgICAgICAg IHJldHVybihyZXQpOworICAgICAgICAgICAgbm91dCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuKHNlbmQoZmQsKFNFTkRBUkcyVFlQRSlidWYsbmJ5dGUsMCkpOworICAgIH0gZWxzZSB7 CisgICAgICAgIGludCB1Y2J1ZmxlbiA9IChtYXhidWYgPyBtYXhidWYgOiBhY3R1YWxidWYpIC0g RlVER0VfRkFDVE9SOworICAgICAgICBpbnQgYnNlbnQgPSAwOworCisgICAgICAgIHdoaWxlIChi c2VudCA8IG5ieXRlKSB7CisgICAgICAgICAgICBpbnQgYjJjcCA9ICgobmJ5dGUgLSBic2VudCkg PiAodWNidWZsZW4gLSBub3V0KSA/CisgICAgICAgICAgICAgICAgICAgICAgICAodWNidWZsZW4g LSBub3V0KSA6IChuYnl0ZSAtIGJzZW50KSk7CisjaWZkZWYgREVCVUcKKwkgICAgaWYgKGRlYmxv ZykgeworCQlkZWJ1ZyhGMTAxLCJzZWN1cmVfd3JpdGUgdWNidWZsZW4iLCIiLHVjYnVmbGVuKTsK KwkJZGVidWcoRjEwMSwic2VjdXJlX3dyaXRlIHVjYnVmc2l6IiwiIix1Y2J1ZnNpeik7CisJCWRl YnVnKEYxMDEsInNlY3VyZV93cml0ZSBic2VudCIsIiIsYnNlbnQpOworCQlkZWJ1ZyhGMTAxLCJz ZWN1cmVfd3JpdGUgYjJjcCIsIiIsYjJjcCk7CisJICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLwor ICAgICAgICAgICAgbWVtY3B5KCZ1Y2J1Zltub3V0XSwmYnVmW2JzZW50XSxiMmNwKTsKKyAgICAg ICAgICAgIG5vdXQgKz0gYjJjcDsKKyAgICAgICAgICAgIGJzZW50ICs9IGIyY3A7CisKKyAgICAg ICAgICAgIGlmIChub3V0ID09IHVjYnVmbGVuKSB7CisgICAgICAgICAgICAgICAgbm91dCA9IDA7 CisgICAgICAgICAgICAgICAgcmV0ID0gc2VjdXJlX3B1dGJ1ZihmZCwgdWNidWYsIHVjYnVmbGVu KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVy bihyZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybihic2VudCk7 CisgICAgfQorfQorCisvKiByZXR1cm5zOgorICogICAgICAgMCAgb24gc3VjY2VzcworICogICAg ICAtMSAgb24gZXJyb3IgKGVycm5vIHNldCkKKyAqICAgICAgLTIgIG9uIHNlY3VyaXR5IGVycm9y CisgKi8KK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworc2VjdXJlX3B1dGJ1ZihpbnQgZmQs IENIQVIgKiBidWYsIHVuc2lnbmVkIGludCBuYnl0ZSkKKyNlbHNlCitzZWN1cmVfcHV0YnVmKGZk LCBidWYsIG5ieXRlKSBpbnQgZmQ7IENIQVIgKiBidWY7IHVuc2lnbmVkIGludCBuYnl0ZTsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHN0YXRpYyBjaGFyICpvdXRidWYgPSBOVUxMOyAg ICAgICAgIC8qIG91dHB1dCBjaXBoZXJ0ZXh0ICovCisjaWZkZWYgRlRQX1NFQ1VSSVRZCisgICAg c3RhdGljIHVuc2lnbmVkIGludCBidWZzaXplID0gMDsgICAgLyogc2l6ZSBvZiBvdXRidWYgKi8K KyNlbmRpZiAvKiBGVFBfU0VDVVJJVFkgKi8KKyAgICBmdHBfaW50MzIgbGVuZ3RoICAgPSAwOwor ICAgIGZ0cF91aW50MzIgbmV0X2xlbiA9IDA7CisKKyAgICAvKiBPdGhlciBhdXRoIHR5cGVzIGdv IGhlcmUgLi4uICovCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHNzbF9mdHBfZGF0YV9hY3RpdmVf ZmxhZykgeworICAgICAgICBpbnQgY291bnQsIGVycm9yOworCisgICAgICAgIC8qIHRoZXJlIGlz IG5vIG5lZWQgdG8gc2VuZCBhbiBlbXB0eSBidWZmZXIgd2hlbiB1c2luZyBTU0wvVExTICovCisg ICAgICAgIGlmICggbmJ5dGUgPT0gMCApCisJICByZXR1cm4oMCk7CisKKyAgICAgICAgY291bnQg PSBTU0xfd3JpdGUoc3NsX2Z0cF9kYXRhX2NvbiwgYnVmLCBuYnl0ZSk7CisgICAgICAgIGVycm9y ID0gU1NMX2dldF9lcnJvcihzc2xfZnRwX2RhdGFfY29uLGNvdW50KTsKKyAgICAgICAgc3dpdGNo IChlcnJvcikgeworICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICBy ZXR1cm4oMCk7CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAg ICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lT Q0FMTDoKKyNpZmRlZiBOVAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBnbGUg PSBHZXRMYXN0RXJyb3IoKTsKKwkJaWYgKGdsZSA9PSAwKQorCQkgIHJldHVybigwKTsKKwkJZGVi dWcoRjExMSwic2VjdXJlX3B1dGJ1ZiIsIlNTTF9FUlJPUl9TWVNDQUxMIixnbGUpOworICAgICAg ICAgICAgfQorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9Y NTA5X0xPT0tVUDoKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CisgICAgICAgICAgY2Fz ZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg IFNTTF9zaHV0ZG93bihzc2xfZnRwX2RhdGFfY29uKTsKKyAgICAgICAgICAgIFNTTF9mcmVlKHNz bF9mdHBfZGF0YV9jb24pOworICAgICAgICAgICAgc3NsX2Z0cF9kYXRhX2FjdGl2ZV9mbGFnID0g MDsKKyAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9jb24gPSBOVUxMOworI2lmZGVmIFRDUElQTElC CisgICAgICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLwor I2lmZGVmIFVTRV9TSFVURE9XTgorICAgICAgICAgICAgc2h1dGRvd24oZGF0YSwgMSsxKTsKKyNl bmRpZiAvKiBVU0VfU0hVVERPV04gKi8KKyAgICAgICAgICAgIGNsb3NlKGRhdGEpOworI2VuZGlm IC8qIFRDUElQTElCICovCisgICAgICAgICAgICBkYXRhID0gLTE7CisgICAgICAgICAgICBnbG9i YWxkaW4gPSBkYXRhOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4oLTEpOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIEZUUF9T UlAKKyAgICBpZiAoY2tfc3JwX2lzX2luc3RhbGxlZCgpICYmIChzdHJjbXAoYXV0aF90eXBlLCAi U1JQIikgPT0gMCkpIHsKKyAgICAgICAgaWYgKGJ1ZnNpemUgPCBuYnl0ZSArIEZVREdFX0ZBQ1RP UikgeworICAgICAgICAgICAgaWYgKG91dGJ1Zj8KKyAgICAgICAgICAgICAgICAob3V0YnVmID0g cmVhbGxvYyhvdXRidWYsICh1bnNpZ25lZCkgKG5ieXRlICsgRlVER0VfRkFDVE9SKSkpOgorICAg ICAgICAgICAgICAgIChvdXRidWYgPSBtYWxsb2MoKHVuc2lnbmVkKSAobmJ5dGUgKyBGVURHRV9G QUNUT1IpKSkpIHsKKyAgICAgICAgICAgICAgICBidWZzaXplID0gbmJ5dGUgKyBGVURHRV9GQUNU T1I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZnNpemUgPSAwOwor ICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJvcigiJXMgKGluIG1hbGxvYyBvZiBQUk9UIGJ1ZmZl cikiLCBja19lcnJzdHIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKEVSUik7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKChsZW5ndGggPQorICAgICAgICAgICAgIHNy cF9lbmNvZGUoZnRwX2RwbCA9PSBGUExfUFJWLAorICAgICAgICAgICAgICAgICAgICAgICAgKENI QVIgKikgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIgKikgb3V0YnVmLAorICAg ICAgICAgICAgICAgICAgICAgICAgbmJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAg ICAgICAgICAgICApIDwgMCkgeworICAgICAgICAgICAgc2VjdXJlX2Vycm9yICgic3JwX2VuY29k ZSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBFUlI7CisgICAgICAgIH0KKyAgICB9Cisj ZW5kaWYgLyogRlRQX1NSUCAqLworI2lmZGVmIEZUUF9LUkI0CisgICAgaWYgKGNrX2tyYjRfaXNf aW5zdGFsbGVkKCkgJiYgKHN0cmNtcChhdXRoX3R5cGUsICJLRVJCRVJPU19WNCIpID09IDApKSB7 CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBteWFkZHIsIGhpc2FkZHI7CisgICAgICAgIEdT T0NLTkFNRV9UIGxlbjsKKyAgICAgICAgbGVuID0gc2l6ZW9mKG15YWRkcik7CisgICAgICAgIGlm IChnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciopJm15YWRkciwgJmxlbikgPCAwKSB7 CisgICAgICAgICAgICBzZWN1cmVfZXJyb3IoInNlY3VyZV9wdXRidWY6IGdldHNvY2tuYW1lIGZh aWxlZCIpOworICAgICAgICAgICAgcmV0dXJuKEVSUik7CisgICAgICAgIH0KKyAgICAgICAgbGVu ID0gc2l6ZW9mKGhpc2FkZHIpOworICAgICAgICBpZiAoZ2V0cGVlcm5hbWUoZmQsIChzdHJ1Y3Qg c29ja2FkZHIqKSZoaXNhZGRyLCAmbGVuKSA8IDApIHsKKyAgICAgICAgICAgIHNlY3VyZV9lcnJv cigic2VjdXJlX3B1dGJ1ZjogZ2V0cGVlcm5hbWUgZmFpbGVkIik7CisgICAgICAgICAgICByZXR1 cm4oRVJSKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnVmc2l6ZSA8IG5ieXRlICsgRlVER0Vf RkFDVE9SKSB7CisgICAgICAgICAgICBpZiAob3V0YnVmID8KKyAgICAgICAgICAgICAgICAob3V0 YnVmID0gcmVhbGxvYyhvdXRidWYsICh1bnNpZ25lZCkgKG5ieXRlICsgRlVER0VfRkFDVE9SKSkp OgorICAgICAgICAgICAgICAgICAob3V0YnVmID0gbWFsbG9jKCh1bnNpZ25lZCkgKG5ieXRlICsg RlVER0VfRkFDVE9SKSkpKSB7CisgICAgICAgICAgICAgICAgYnVmc2l6ZSA9IG5ieXRlICsgRlVE R0VfRkFDVE9SOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZzaXpl ID0gMDsKKyAgICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoIiVzIChpbiBtYWxsb2Mgb2YgUFJP VCBidWZmZXIpIiwgY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgICAgIHJldHVybihFUlIpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmdHBfZHBsID09IEZQTF9QUlYp IHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGtyYl9ta19wcml2KGJ1ZiwgKENIQVIgKikgb3V0YnVm LCBuYnl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9zY2hlZCwKKyNp ZmRlZiBLUkI1MjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cF9jcmVkLnNl c3Npb24sCisjZWxzZSAvKiBLUkI1MjQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZmdHBfY3JlZC5zZXNzaW9uLAorI2VuZGlmIC8qIEtSQjUyNCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJm15YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZoaXNhZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVuZ3RoID0ga3JiX21rX3NhZmUoYnVmLCAoQ0hB UiAqKSBvdXRidWYsIG5ieXRlLAorI2lmZGVmIEtSQjUyNAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbHNlIC8qIEtSQjUyNCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ0cF9jcmVkLnNlc3Npb24sCisjZW5kaWYgLyog S1JCNTI0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlhZGRyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhpc2FkZHIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlbmd0aCA9PSAtMSkg eworICAgICAgICAgICAgc2VjdXJlX2Vycm9yKCJrcmJfbWtfJXMgZmFpbGVkIGZvciBLRVJCRVJP U19WNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2RwbCA9PSBGUExfUFJWID8gInBy aXYiIDogInNhZmUiKTsKKyAgICAgICAgICAgIHJldHVybihFUlIpOworICAgICAgICB9CisgICAg fQorI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZkZWYgRlRQX0dTU0FQSQorICAgIGlmIChja19n c3NhcGlfaXNfaW5zdGFsbGVkKCkgJiYgKHN0cmNtcChhdXRoX3R5cGUsICJHU1NBUEkiKSA9PSAw KSkgeworICAgICAgICBnc3NfYnVmZmVyX2Rlc2MgaW5fYnVmLCBvdXRfYnVmOworICAgICAgICBP TV91aW50MzIgbWFqX3N0YXQsIG1pbl9zdGF0OworICAgICAgICBpbnQgY29uZl9zdGF0ZTsKKwor ICAgICAgICBpbl9idWYudmFsdWUgPSBidWY7CisgICAgICAgIGluX2J1Zi5sZW5ndGggPSBuYnl0 ZTsKKyAgICAgICAgbWFqX3N0YXQgPSBnc3Nfc2VhbCgmbWluX3N0YXQsIGdjb250ZXh0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChmdHBfZHBsID09IEZQTF9QUlYpLCAvKiBjb25maWRl bnRpYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19RT1BfREVGQVVMVCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5fYnVmLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZjb25mX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRf YnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKG1hal9zdGF0 ICE9IEdTU19TX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAvKiBnZW5lcmFsbHkgbmVlZCB0byBk ZWFsICovCisgICAgICAgICAgICAvKiBpZS4gc2hvdWxkIGxvb3AsIGJ1dCBmb3Igbm93IGp1c3Qg ZmFpbCAqLworICAgICAgICAgICAgdXNlcl9nc3NfZXJyb3IobWFqX3N0YXQsIG1pbl9zdGF0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwX2RwbCA9PSBGUExfUFJWPworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkdTU0FQSSBzZWFsIGZhaWxlZCI6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAiR1NTQVBJIHNpZ24gZmFpbGVkIik7CisgICAgICAgICAgICByZXR1cm4oRVJS KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnVmc2l6ZSA8IG91dF9idWYubGVuZ3RoKSB7Cisg ICAgICAgICAgICBpZiAob3V0YnVmID8KKyAgICAgICAgICAgICAgICAob3V0YnVmID0gcmVhbGxv YyhvdXRidWYsICh1bnNpZ25lZCkgb3V0X2J1Zi5sZW5ndGgpKToKKyAgICAgICAgICAgICAgICAo b3V0YnVmID0gbWFsbG9jKCh1bnNpZ25lZCkgb3V0X2J1Zi5sZW5ndGgpKSkgeworICAgICAgICAg ICAgICAgIGJ1ZnNpemUgPSBvdXRfYnVmLmxlbmd0aDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgYnVmc2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgc2VjdXJlX2Vycm9y KCIlcyAoaW4gbWFsbG9jIG9mIFBST1QgYnVmZmVyKSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNrX2VycnN0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtZW1jcHkob3V0YnVmLCBvdXRfYnVmLnZhbHVl LCBsZW5ndGg9b3V0X2J1Zi5sZW5ndGgpOworICAgICAgICBnc3NfcmVsZWFzZV9idWZmZXIoJm1p bl9zdGF0LCAmb3V0X2J1Zik7CisgICAgfQorI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KKyAgICBu ZXRfbGVuID0gaHRvbmwoKFVMT05HKSBsZW5ndGgpOworICAgIGlmIChsb29waW5nX3dyaXRlKGZk LCAoY2hhciAqKSZuZXRfbGVuLCA0KSA9PSAtMSkKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYg KGxvb3Bpbmdfd3JpdGUoZmQsIG91dGJ1ZiwgbGVuZ3RoKSAhPSBsZW5ndGgpCisgICAgICByZXR1 cm4oLTEpOworICAgIHJldHVybigwKTsKK30KKworCisvKiBmYyA9IDAgbWVhbnMgdG8gZ2V0IGEg Ynl0ZTsgbm9uemVybyBtZWFucyB0byBpbml0aWFsaXplIGJ1ZmZlciBwb2ludGVycyAqLworCitz dGF0aWMgaW50CitzZWN1cmVfZ2V0Ynl0ZShmZCxmYykgaW50IGZkLGZjOyB7CisgICAgLyogbnVt YmVyIG9mIGNoYXJzIGluIHVjYnVmLCBwb2ludGVyIGludG8gdWNidWYgKi8KKyAgICBzdGF0aWMg dW5zaWduZWQgaW50IG5pbiA9IDAsIGJ1ZnAgPSAwOworICAgIGludCBrZXJyb3I7CisgICAgZnRw X3VpbnQzMiBsZW5ndGg7CisKKyAgICBpZiAoZmMpIHsKKwluaW4gPSBidWZwID0gMDsKKwl1Y2J1 ZlswXSA9IE5VTDsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChuaW4gPT0gMCkgeworICAg ICAgICBpZiAoaXNjYW5jZWxlZCgpKQorICAgICAgICAgIHJldHVybigtOSk7CisKKyNpZmRlZiBG VFBfVElNRU9VVAorCWlmIChjaGVja19kYXRhX2Nvbm5lY3Rpb24oZmQsMCkgPCAwKQorCSAgcmV0 dXJuKC0zKTsKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAqLworCisjaWZkZWYgQ0tfU1NMCisgICAg ICAgIGlmIChzc2xfZnRwX2RhdGFfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgIGludCBjb3Vu dCwgZXJyb3I7CisgICAgICAgICAgICBjb3VudCA9IFNTTF9yZWFkKHNzbF9mdHBfZGF0YV9jb24s IHVjYnVmLCB1Y2J1ZnNpeik7CisgICAgICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJyb3Ioc3Ns X2Z0cF9kYXRhX2Nvbixjb3VudCk7CisjaWZkZWYgREVCVUcKKwkgICAgaWYgKGVycm9yICE9IFNT TF9FUlJPUl9OT05FKQorCSAgICAgIGRlYnVnKEYxMDEsImZ0cCBzZWN1cmVfZ2V0Ynl0ZSBlcnJv ciIsIiIsZXJyb3IpOworCSAgICBpZiAoY291bnQgPT0gMCkKKwkgICAgICBkZWJ1ZyhGMTAxLCJm dHAgc2VjdXJlX2dldGJ5dGUgY291bnQiLCIiLGNvdW50KTsKKyNlbmRpZgkvKiBERUJVRyAqLwor ICAgICAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJP Ul9OT05FOgorCQlpZiAoY291bnQgPiAwKSB7CisJCSAgICBuaW4gPSBidWZwID0gY291bnQ7CisJ CSAgICBycGFja2V0cysrOworCQkgICAgcGt0bnVtKys7CisJCSAgICBpZiAoZmRpc3BsYSAhPSBY WUZEX0IpIHsKKwkJCXJwa3RsID0gY291bnQ7CisJCQlmdHNjcmVlbihTQ1JfUFQsJ0QnLChDS19P RkZfVClycGFja2V0cyxOVUxMKTsKKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQl9CisgICAgICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfUkVBRDoKKyAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoK KyNpZmRlZiBOVAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGds ZSA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOVCAqLwor ICAgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgorICAgICAgICAg ICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CisgICAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pF Uk9fUkVUVVJOOgorICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5pbiA9 IGJ1ZnAgPSBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgU1NMX3NodXRkb3duKHNzbF9mdHBf ZGF0YV9jb24pOworICAgICAgICAgICAgICAgIFNTTF9mcmVlKHNzbF9mdHBfZGF0YV9jb24pOwor ICAgICAgICAgICAgICAgIHNzbF9mdHBfZGF0YV9hY3RpdmVfZmxhZyA9IDA7CisgICAgICAgICAg ICAgICAgc3NsX2Z0cF9kYXRhX2NvbiA9IE5VTEw7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAg ICAgICAgICBzb2NrZXRfY2xvc2UoZGF0YSk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworI2lmZGVm IFVTRV9TSFVURE9XTgorICAgICAgICAgICAgICAgIHNodXRkb3duKGRhdGEsIDErMSk7CisjZW5k aWYgLyogVVNFX1NIVVRET1dOICovCisgICAgICAgICAgICAgICAgY2xvc2UoZGF0YSk7CisjZW5k aWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgICAgICBkYXRhID0gLTE7CisgICAgICAgICAg ICAgICAgZ2xvYmFsZGluID0gZGF0YTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgewor ICAgICAgICAgICAgICBrZXJyb3IgPSBsb29waW5nX3JlYWQoZmQsIChjaGFyICopJmxlbmd0aCwg c2l6ZW9mKGxlbmd0aCkpOworICAgICAgICAgICAgICBpZiAoa2Vycm9yICE9IHNpemVvZihsZW5n dGgpKSB7CisgICAgICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoIkNvdWxkbid0IHJlYWQgUFJP VCBidWZmZXIgbGVuZ3RoOiAlZC8lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg a2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9PSAtMSA/IGNr X2VycnN0cigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicHJlbWF0dXJlIEVP RiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAg cmV0dXJuKEVSUik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZGVidWcoRjEwMSwi c2VjdXJlX2dldGJ5dGUgbGVuZ3RoIiwiIixsZW5ndGgpOworICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJzZWN1cmVfZ2V0Ynl0ZSBudG9obChsZW5ndGgpIiwiIixudG9obChsZW5ndGgpKTsKKwor ICAgICAgICAgICAgICBsZW5ndGggPSAoVUxPTkcpIG50b2hsKGxlbmd0aCk7CisgICAgICAgICAg ICAgIGlmIChsZW5ndGggPiBtYXhidWYpIHsKKyAgICAgICAgICAgICAgICAgIHNlY3VyZV9lcnJv cigiTGVuZ3RoICglZCkgb2YgUFJPVCBidWZmZXIgPiBQQlNaPSV1IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWF4YnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICAgIHJldHVybihFUlIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICgoa2Vy cm9yID0gbG9vcGluZ19yZWFkKGZkLCB1Y2J1ZiwgbGVuZ3RoKSkgIT0gbGVuZ3RoKSB7CisgICAg ICAgICAgICAgICAgICBzZWN1cmVfZXJyb3IoIkNvdWxkbid0IHJlYWQgJXUgYnl0ZSBQUk9UIGJ1 ZmZlcjogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJyb3IgPT0gLTEgPyBja19lcnJzdHIoKSA6ICJw cmVtYXR1cmUgRU9GIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICAgICAgICByZXR1cm4oRVJSKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg IC8qIE90aGVyIGF1dGggdHlwZXMgZ28gaGVyZSAuLi4gKi8KKyNpZmRlZiBGVFBfU1JQCisgICAg ICAgICAgICAgIGlmIChzdHJjbXAoYXV0aF90eXBlLCAiU1JQIikgPT0gMCkgeworICAgICAgICAg ICAgICAgICAgaWYgKChuaW4gPSBidWZwID0gc3JwX2RlY29kZSAoZnRwX2RwbCA9PSBGUExfUFJW LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENIQVIg KikgdWNidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1Y2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQorICAgICAgICAgICAgICAgICAgICAgICApID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAg ICAgc2VjdXJlX2Vycm9yICgic3JwX2VuY29kZSBmYWlsZWQiICk7CisgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIEVSUjsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIEZUUF9TUlAgKi8KKyNpZmRlZiBGVFBfS1JCNAorICAgICAgICAgICAgICBpZiAo c3RyY21wKGF1dGhfdHlwZSwgIktFUkJFUk9TX1Y0IikgPT0gMCkgeworICAgICAgICAgICAgICAg ICAgc3RydWN0IHNvY2thZGRyX2luIG15YWRkciwgaGlzYWRkcjsKKyAgICAgICAgICAgICAgICAg IEdTT0NLTkFNRV9UIGxlbjsKKyAgICAgICAgICAgICAgICAgIGxlbiA9IHNpemVvZihteWFkZHIp OworICAgICAgICAgICAgICAgICAgaWYgKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRy KikmbXlhZGRyLCAmbGVuKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVfZXJy b3IoInNlY3VyZV9wdXRidWY6IGdldHNvY2tuYW1lIGZhaWxlZCIpOworICAgICAgICAgICAgICAg ICAgICAgIHJldHVybihFUlIpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgbGVuID0gc2l6ZW9mKGhpc2FkZHIpOworICAgICAgICAgICAgICAgICAgaWYgKGdldHBlZXJu YW1lKGZkLCAoc3RydWN0IHNvY2thZGRyKikmaGlzYWRkciwgJmxlbikgPCAwKSB7CisgICAgICAg ICAgICAgICAgICAgICAgc2VjdXJlX2Vycm9yKCJzZWN1cmVfcHV0YnVmOiBnZXRwZWVybmFtZSBm YWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oRVJSKTsKKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGlmIChmdHBfZHBsKSB7CisgICAgICAgICAgICAg ICAgICAgICAga2Vycm9yID0ga3JiX3JkX3ByaXYodWNidWYsIGxlbmd0aCwgZnRwX3NjaGVkLAor I2lmZGVmIEtSQjUyNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZ0cF9jcmVkLnNlc3Npb24sCisjZWxzZSAvKiBLUkI1MjQgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbmRpZiAvKiBL UkI1MjQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGlz YWRkciwgJm15YWRkciwgJmZ0cF9tc2dfZGF0YSk7CisgICAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICAgIGtlcnJvciA9IGtyYl9yZF9zYWZlKHVjYnVmLCBsZW5n dGgsCisjaWZkZWYgS1JCNTI0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnRwX2NyZWQuc2Vzc2lvbiwKKyNlbHNlIC8qIEtSQjUyNCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdHBfY3JlZC5zZXNzaW9uLAorI2VuZGlm IC8qIEtSQjUyNCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZoaXNhZGRyLCAmbXlhZGRyLCAmZnRwX21zZ19kYXRhKTsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgIGlmIChrZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICBz ZWN1cmVfZXJyb3IoImtyYl9yZF8lcyBmYWlsZWQgZm9yIEtFUkJFUk9TX1Y0ICglcykiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHBfZHBsID09IEZQTF9QUlYgPyAicHJp diIgOiAic2FmZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYl9nZXRf ZXJyX3RleHQoa2Vycm9yKSk7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKEVSUik7Cisg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBtZW1jcHkodWNidWYsZnRwX21z Z19kYXRhLmFwcF9kYXRhLGZ0cF9tc2dfZGF0YS5hcHBfbGVuZ3RoKTsKKyAgICAgICAgICAgICAg ICAgIG5pbiA9IGJ1ZnAgPSBmdHBfbXNnX2RhdGEuYXBwX2xlbmd0aDsKKyAgICAgICAgICAgICAg fQorI2VuZGlmIC8qIEZUUF9LUkI0ICovCisjaWZkZWYgRlRQX0dTU0FQSQorICAgICAgICAgICAg ICBpZiAoc3RyY21wKGF1dGhfdHlwZSwgIkdTU0FQSSIpID09IDApIHsKKyAgICAgICAgICAgICAg ICAgIGdzc19idWZmZXJfZGVzYyB4bWl0X2J1ZiwgbXNnX2J1ZjsKKyAgICAgICAgICAgICAgICAg IE9NX3VpbnQzMiBtYWpfc3RhdCwgbWluX3N0YXQ7CisgICAgICAgICAgICAgICAgICBpbnQgY29u Zl9zdGF0ZTsKKworICAgICAgICAgICAgICAgICAgeG1pdF9idWYudmFsdWUgPSB1Y2J1ZjsKKyAg ICAgICAgICAgICAgICAgIHhtaXRfYnVmLmxlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgICAgICAg ICAgIGNvbmZfc3RhdGUgPSAoZnRwX2RwbCA9PSBGUExfUFJWKTsKKyAgICAgICAgICAgICAgICAg IC8qIGRlY3J5cHQvdmVyaWZ5IHRoZSBtZXNzYWdlICovCisgICAgICAgICAgICAgICAgICBtYWpf c3RhdCA9IGdzc191bnNlYWwoJm1pbl9zdGF0LCBnY29udGV4dCwgJnhtaXRfYnVmLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2dfYnVmLCAmY29uZl9zdGF0ZSwg TlVMTCk7CisgICAgICAgICAgICAgICAgICBpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09NUExFVEUp IHsKKyAgICAgICAgICAgICAgICAgICAgICB1c2VyX2dzc19lcnJvcihtYWpfc3RhdCwgbWluX3N0 YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ0cF9kcGwgPT0gRlBM X1BSVik/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB1bnNl YWxpbmcgRU5DIG1lc3NhZ2UiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJmYWlsZWQgdW5zZWFsaW5nIE1JQyBtZXNzYWdlIik7CisgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIEVSUjsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIG1lbWNw eSh1Y2J1ZiwgbXNnX2J1Zi52YWx1ZSwgbmluID0gYnVmcCA9IG1zZ19idWYubGVuZ3RoKTsKKyAg ICAgICAgICAgICAgICAgIGdzc19yZWxlYXNlX2J1ZmZlcigmbWluX3N0YXQsICZtc2dfYnVmKTsK KyAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIEZUUF9HU1NBUEkgKi8KKyAgICAgICAgICAgICAg LyogT3RoZXIgYXV0aCB0eXBlcyBnbyBoZXJlIC4uLiAqLworCisgICAgICAgICAgICAgIC8qIFVw ZGF0ZSBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgKi8KKyAgICAgICAgICAgICAgcnBhY2tldHMrKzsK KyAgICAgICAgICAgICAgcGt0bnVtKys7CisgICAgICAgICAgICAgIGlmIChmZGlzcGxhICE9IFhZ RkRfQikgeworICAgICAgICAgICAgICAgICAgcnBrdGwgPSBuaW47CisgICAgICAgICAgICAgICAg ICBmdHNjcmVlbihTQ1JfUFQsJ0QnLChDS19PRkZfVClycGFja2V0cyxOVUxMKTsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5pbiA9PSAwKQorICAgICAgcmV0 dXJuKEVPRik7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVjYnVmW2J1ZnAgLSBuaW4tLV0pOwor fQorCisvKiBzZWN1cmVfZ2V0YyhmZCxmYykKKyAqIENhbGwgd2l0aDoKKyAqICAgZmQgPSBmaWxl IGRlc2NyaXB0b3IgZm9yIGNvbm5lY3Rpb24uCisgKiAgIGZjID0gMCB0byBnZXQgYSBjaGFyYWN0 ZXIsIGZjICE9IDAgdG8gaW5pdGlhbGl6ZSBidWZmZXIgcG9pbnRlcnMuCisgKiBSZXR1cm5zOgor ICogICBjPj0wIG9uIHN1Y2Nlc3MgKGNoYXJhY3RlciB2YWx1ZSkKKyAqICAgLTEgICBvbiBFT0YK KyAqICAgLTIgICBvbiBzZWN1cml0eSBlcnJvcgorICogICAtMyAgIG9uIHRpbWVvdXQgKGlmIGJ1 aWx0IHdpdGggRlRQX1RJTUVPVVQgZGVmaW5lZCkKKyAqLworc3RhdGljIGludAorc2VjdXJlX2dl dGMoZmQsZmMpIGludCBmZCxmYzsgewkJLyogZmlsZSBkZXNjcmlwdG9yLCBmdW5jdGlvbiBjb2Rl ICovCisKKyAgICBpZiAoIWZ0cGlzc2VjdXJlKCkpIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk IGludCBuaW4gPSAwLCBidWZwID0gMDsKKwlpZiAoZmMpIHsKKwkgICAgbmluID0gYnVmcCA9IDA7 CisJICAgIHVjYnVmWzBdID0gTlVMOworCSAgICByZXR1cm4oMCk7CisJfQorICAgICAgICBpZiAo bmluID09IDApIHsKKyAgICAgICAgICAgIGlmIChpc2NhbmNlbGVkKCkpCisgICAgICAgICAgICAg IHJldHVybigtOSk7CisKKyNpZmRlZiBGVFBfVElNRU9VVAorCSAgICBpZiAoY2hlY2tfZGF0YV9j b25uZWN0aW9uKGZkLDApIDwgMCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInNlY3Vy ZV9nZXRjIFRJTUVPVVQiLCIiLDApOworICAgICAgICAgICAgICAgIG5pbiA9IGJ1ZnAgPSAwOwor CQlmdHBfdGltZWRfb3V0ID0gMTsKKwkJcmV0dXJuKC0zKTsKKwkgICAgfQkJCisjZW5kaWYJLyog RlRQX1RJTUVPVVQgKi8KKworICAgICAgICAgICAgbmluID0gYnVmcCA9IHJlY3YoZmQsKGNoYXIg Kil1Y2J1ZixhY3R1YWxidWYsMCk7CisgICAgICAgICAgICBpZiAoKG5pbiA9PSAwKSB8fCAobmlu ID09ICh1bnNpZ25lZCBpbnQpLTEpKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwic2Vj dXJlX2dldGMgcmVjdiBlcnJubyIsY2tpdG9hKG5pbiksZXJybm8pOworICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsInNlY3VyZV9nZXRjIHJldHVybnMgRU9GIiwiIixFT0YpOworICAgICAgICAg ICAgICAgIG5pbiA9IGJ1ZnAgPSAwOworICAgICAgICAgICAgICAgIHJldHVybihFT0YpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjEwMSwiZnRwIHNlY3VyZV9nZXRjIHJlY3Yi LCIiLG5pbik7CisgICAgICAgICAgICBja2hleGR1bXAoImZ0cCBzZWN1cmVfZ2V0YyByZWN2Iix1 Y2J1ZiwxNik7CisgICAgICAgICAgICBycGFja2V0cysrOworICAgICAgICAgICAgcGt0bnVtKys7 CisgICAgICAgICAgICBpZiAoZmRpc3BsYSAhPSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBy cGt0bCA9IG5pbjsKKyAgICAgICAgICAgICAgICBmdHNjcmVlbihTQ1JfUFQsJ0QnLChDS19PRkZf VClycGFja2V0cyxOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1 cm4odWNidWZbYnVmcCAtIG5pbi0tXSk7CisgICAgfSBlbHNlCisgICAgICByZXR1cm4oc2VjdXJl X2dldGJ5dGUoZmQsZmMpKTsKK30KKworLyogcmV0dXJuczoKKyAqICAgICBuPjAgIG9uIHN1Y2Nl c3MgKG4gPT0gIyBvZiBieXRlcyByZWFkKQorICogICAgICAgMCAgb24gRU9GCisgKiAgICAgIC0x ICBvbiBlcnJvciAoZXJybm8gc2V0KSwgb25seSBmb3IgRlBMX0NMUgorICogICAgICAtMiAgb24g c2VjdXJpdHkgZXJyb3IKKyAqLworc3RhdGljIGludAorc2VjdXJlX3JlYWQoZmQsIGJ1ZiwgbmJ5 dGUpIGludCBmZDsgY2hhciAqYnVmOyBpbnQgbmJ5dGU7IHsKKyAgICBzdGF0aWMgaW50IGMgPSAw OworICAgIGludCBpOworCisgICAgZGVidWcoRjEwMSwic2VjdXJlX3JlYWQgYnl0ZXMgcmVxdWVz dGVkIiwiIixuYnl0ZSk7CisgICAgaWYgKGMgPT0gRU9GKQorICAgICAgcmV0dXJuKGMgPSAwKTsK KyAgICBmb3IgKGkgPSAwOyBuYnl0ZSA+IDA7IG5ieXRlLS0pIHsKKyAgICAgICAgYyA9IHNlY3Vy ZV9nZXRjKGZkLDApOworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIC05OiAg ICAgICAgICAgICAgICAgICAgICAvKiBDYW5jZWxlZCBmcm9tIGtleWJvYXJkICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJmdHAgc2VjdXJlX3JlYWQgaW50ZXJydXB0ZWQiLCIiLGMpOworICAg ICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgIGNhc2UgRVJSOgorICAgICAgICAgICAgZGVi dWcoRjEwMSwiZnRwIHNlY3VyZV9yZWFkIGVycm9yIiwiIixjKTsKKyAgICAgICAgICAgIHJldHVy bihjKTsKKyAgICAgICAgICBjYXNlIEVPRjoKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImZ0cCBz ZWN1cmVfcmVhZCBFT0YiLCIiLGMpOworICAgICAgICAgICAgaWYgKCFpKQorICAgICAgICAgICAg ICBjID0gMDsKKyAgICAgICAgICAgIHJldHVybihpKTsKKyNpZmRlZiBGVFBfVElNRU9VVAorICAg ICAgICAgIGNhc2UgLTM6CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJmdHAgc2VjdXJlX3JlYWQg dGltZW91dCIsIiIsYyk7CisJICAgIHJldHVybihjKTsKKyNlbmRpZgkvKiBGVFBfVElNRU9VVCAq LworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBidWZbaSsrXSA9IGM7CisgICAgICAg IH0KKyAgICB9CisgICAgcmV0dXJuKGkpOworfQorCisjaWZkZWYgVVNFX1JVU0VSUEFTUworLyog QkVHSU5fUlVTRVJQQVNTCisgKgorICogQ29weXJpZ2h0IChjKSAxOTg1IFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogICAgICBDYWxpZm9ybmlhLCBCZXJr ZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl IFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENP TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRT IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor I2lmbmRlZiBsaW50CitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcnVzZXJwYXNzLmMgNS4z IChCZXJrZWxleSkgMy8xLzkxIjsKKyNlbmRpZiAvKiBub3QgbGludCAqLworCisjaWZuZGVmIE1B WEhPU1ROQU1FTEVOCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOIDY0CisjZW5kaWYKKworY2hhciAq IHJlbnZsb29rKCk7CitzdGF0aWMgRklMRSAqIGNmaWxlOworCisjZGVmaW5lIERFRkFVTFQgMQor I2RlZmluZSBMT0dJTiAgIDIKKyNkZWZpbmUgUEFTU1dEICAzCisjZGVmaW5lIEFDQ09VTlQgNAor I2RlZmluZSBNQUNERUYgIDUKKyNkZWZpbmUgSUQgICAgICAxMAorI2RlZmluZSBNQUNIICAgIDEx CisKK3N0YXRpYyBjaGFyIHRva3ZhbFsxMDBdOworCitzdGF0aWMgc3RydWN0IHRva3RhYiB7Cisg ICAgY2hhciAqdG9rc3RyOworICAgIGludCB0dmFsOworfSB0b2t0YWJbXT0geworICAgICJkZWZh dWx0IiwgIERFRkFVTFQsCisgICAgImxvZ2luIiwgICAgTE9HSU4sCisgICAgInBhc3N3b3JkIiwg UEFTU1dELAorICAgICJwYXNzd2QiLCAgIFBBU1NXRCwKKyAgICAiYWNjb3VudCIsICBBQ0NPVU5U LAorICAgICJtYWNoaW5lIiwgIE1BQ0gsCisgICAgIm1hY2RlZiIsICAgTUFDREVGLAorICAgIDAs ICAgICAgICAgIDAKK307CisKK3N0YXRpYyBpbnQKK3Rva2VuKCkgeworICAgIGNoYXIgKmNwOwor ICAgIGludCBjOworICAgIHN0cnVjdCB0b2t0YWIgKnQ7CisKKyAgICBpZiAoZmVvZihjZmlsZSkp CisgICAgICByZXR1cm4oMCk7CisgICAgd2hpbGUgKChjID0gZ2V0YyhjZmlsZSkpICE9IEVPRiAm JgorICAgICAgICAgICAoYyA9PSAnXG4nIHx8IGMgPT0gJ1x0JyB8fCBjID09ICcgJyB8fCBjID09 ICcsJykpCisgICAgICBjb250aW51ZTsKKyAgICBpZiAoYyA9PSBFT0YpCisgICAgICByZXR1cm4o MCk7CisgICAgY3AgPSB0b2t2YWw7CisgICAgaWYgKGMgPT0gJyInKSB7CisgICAgICAgIHdoaWxl ICgoYyA9IGdldGMoY2ZpbGUpKSAhPSBFT0YgJiYgYyAhPSAnIicpIHsKKyAgICAgICAgICAgIGlm IChjID09ICdcXCcpCisgICAgICAgICAgICAgIGMgPSBnZXRjKGNmaWxlKTsKKyAgICAgICAgICAg ICpjcCsrID0gYzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgICpjcCsrID0gYzsK KyAgICAgICAgd2hpbGUgKChjID0gZ2V0YyhjZmlsZSkpICE9IEVPRgorICAgICAgICAgICAgICAg JiYgYyAhPSAnXG4nICYmIGMgIT0gJ1x0JyAmJiBjICE9ICcgJyAmJiBjICE9ICcsJykgeworICAg ICAgICAgICAgaWYgKGMgPT0gJ1xcJykKKyAgICAgICAgICAgICAgYyA9IGdldGMoY2ZpbGUpOwor ICAgICAgICAgICAgKmNwKysgPSBjOworICAgICAgICB9CisgICAgfQorICAgICpjcCA9IDA7Cisg ICAgaWYgKHRva3ZhbFswXSA9PSAwKQorICAgICAgcmV0dXJuKDApOworICAgIGZvciAodCA9IHRv a3RhYjsgdC0+dG9rc3RyOyB0KyspCisgICAgICBpZiAoIXN0cmNtcCh0LT50b2tzdHIsIHRva3Zh bCkpCisgICAgICAgIHJldHVybih0LT50dmFsKTsKKyAgICByZXR1cm4oSUQpOworfQorCitydXNl cnBhc3MoaG9zdCwgYW5hbWUsIGFwYXNzLCBhYWNjdCkKKyAgICBjaGFyICpob3N0LCAqKmFuYW1l LCAqKmFwYXNzLCAqKmFhY2N0OworeworICAgIGNoYXIgKmhkaXIsIGJ1ZltGVFBfQlVGU0laXSwg KnRtcDsKKyAgICBjaGFyIG15bmFtZVtNQVhIT1NUTkFNRUxFTl0sICpteWRvbWFpbjsKKyAgICBp bnQgdCwgaSwgYywgdXNlZGVmYXVsdCA9IDA7CisjaWZkZWYgTlQKKyAgICBzdHJ1Y3QgX3N0YXQg c3RiOworI2Vsc2UgLyogTlQgKi8KKyAgICBzdHJ1Y3Qgc3RhdCBzdGI7CisjZW5kaWYgLyogTlQg Ki8KKworICAgIGhkaXIgPSBnZXRlbnYoIkhPTUUiKTsKKyAgICBpZiAoaGRpciA9PSBOVUxMKQor ICAgICAgICBoZGlyID0gIi4iOworICAgIGNrbWFrbXNnKGJ1ZixGVFBfQlVGU0laLGhkaXIsIi8u bmV0cmMiLE5VTEwsTlVMTCk7CisgICAgY2ZpbGUgPSBmb3BlbihidWYsICJyIik7CisgICAgaWYg KGNmaWxlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkKKyAgICAgICAg ICBwZXJyb3IoYnVmKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoZ2V0aG9z dG5hbWUobXluYW1lLCBNQVhIT1NUTkFNRUxFTikgPCAwKQorICAgICAgbXluYW1lWzBdID0gJ1ww JzsKKyAgICBpZiAoKG15ZG9tYWluID0gY2tzdHJjaHIobXluYW1lLCAnLicpKSA9PSBOVUxMKQor ICAgICAgbXlkb21haW4gPSAiIjsKKworICBuZXh0OgorICAgIHdoaWxlICgodCA9IHRva2VuKCkp KSBzd2l0Y2godCkgeworCisgICAgICBjYXNlIERFRkFVTFQ6CisgICAgICAgIHVzZWRlZmF1bHQg PSAxOworICAgICAgICAvKiBGQUxMIFRIUk9VR0ggKi8KKworICAgICAgY2FzZSBNQUNIOgorICAg ICAgICBpZiAoIXVzZWRlZmF1bHQpIHsKKyAgICAgICAgICAgIGlmICh0b2tlbigpICE9IElEKQor ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBB bGxvdyBtYXRjaCBlaXRoZXIgZm9yIHVzZXIncyBpbnB1dCBob3N0IG5hbWUKKyAgICAgICAgICAg ICAqIG9yIG9mZmljaWFsIGhvc3RuYW1lLiAgQWxzbyBhbGxvdyBtYXRjaCBvZgorICAgICAgICAg ICAgICogaW5jb21wbGV0ZWx5LXNwZWNpZmllZCBob3N0IGluIGxvY2FsIGRvbWFpbi4KKyAgICAg ICAgICAgICAqLworICAgICAgICAgICAgaWYgKGNrc3RyY21wKGhvc3QsIHRva3ZhbCwtMSwxKSA9 PSAwKQorICAgICAgICAgICAgICBnb3RvIG1hdGNoOworICAgICAgICAgICAgaWYgKGNrc3RyY21w KGZ0cF9ob3N0LCB0b2t2YWwsLTEsMCkgPT0gMCkKKyAgICAgICAgICAgICAgZ290byBtYXRjaDsK KyAgICAgICAgICAgIGlmICgodG1wID0gY2tzdHJjaHIoZnRwX2hvc3QsICcuJykpICE9IE5VTEwg JiYKKyAgICAgICAgICAgICAgICBja3N0cmNtcCh0bXAsIG15ZG9tYWluLC0xLDEpID09IDAgJiYK KyAgICAgICAgICAgICAgICBja3N0cmNtcChmdHBfaG9zdCwgdG9rdmFsLCB0bXAtZnRwX2hvc3Qs MCkgPT0gMCAmJgorICAgICAgICAgICAgICAgIHRva3ZhbFt0bXAgLSBmdHBfaG9zdF0gPT0gJ1ww JykKKyAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgIGlmICgodG1wID0gY2tz dHJjaHIoaG9zdCwgJy4nKSkgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgIGNrc3RyY21wKHRt cCwgbXlkb21haW4sLTEsMSkgPT0gMCAmJgorICAgICAgICAgICAgICAgIGNrc3RyY21wKGhvc3Qs IHRva3ZhbCwgdG1wIC0gaG9zdCwgMCkgPT0gMCAmJgorICAgICAgICAgICAgICAgIHRva3ZhbFt0 bXAgLSBob3N0XSA9PSAnXDAnKQorICAgICAgICAgICAgICBnb3RvIG1hdGNoOworICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgbWF0Y2g6CisgICAgICAgIHdoaWxlICgo dCA9IHRva2VuKCkpICYmIHQgIT0gTUFDSCAmJiB0ICE9IERFRkFVTFQpIHN3aXRjaCh0KSB7CisK KyAgICAgICAgICBjYXNlIExPR0lOOgorICAgICAgICAgICAgaWYgKHRva2VuKCkpCisgICAgICAg ICAgICAgIGlmICgqYW5hbWUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgKmFuYW1lID0gbWFs bG9jKCh1bnNpZ25lZCkgc3RybGVuKHRva3ZhbCkgKyAxKTsKKyAgICAgICAgICAgICAgICAgIHN0 cmNweSgqYW5hbWUsIHRva3ZhbCk7ICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcCgqYW5hbWUsIHRva3ZhbCkpCisgICAg ICAgICAgICAgICAgICAgIGdvdG8gbmV4dDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBQQVNTV0Q6CisgICAgICAgICAgICBpZiAoc3RyY21wKCph bmFtZSwgImFub255bW91cyIpICYmCisgICAgICAgICAgICAgICAgZnN0YXQoZmlsZW5vKGNmaWxl KSwgJnN0YikgPj0gMCAmJgorICAgICAgICAgICAgICAgIChzdGIuc3RfbW9kZSAmIDA3NykgIT0g MCkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgLSAubmV0cmMgZmls ZSBub3QgY29ycmVjdCBtb2RlLlxuIik7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJSZW1vdmUgcGFzc3dvcmQgb3IgY29ycmVjdCBtb2RlLlxuIik7CisgICAgICAgICAgICAgICAg Z290byBiYWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4oKSAmJiAqYXBh c3MgPT0gMCkgeworICAgICAgICAgICAgICAgICphcGFzcyA9IG1hbGxvYygodW5zaWduZWQpIHN0 cmxlbih0b2t2YWwpICsgMSk7CisgICAgICAgICAgICAgICAgc3RyY3B5KCphcGFzcywgdG9rdmFs KTsgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBBQ0NPVU5UOgorICAgICAgICAgICAgaWYgKGZzdGF0KGZpbGVubyhj ZmlsZSksICZzdGIpID49IDAKKyAgICAgICAgICAgICAgICAmJiAoc3RiLnN0X21vZGUgJiAwNzcp ICE9IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIC0gLm5ldHJj IGZpbGUgbm90IGNvcnJlY3QgbW9kZS5cbiIpOworICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiUmVtb3ZlIGFjY291bnQgb3IgY29ycmVjdCBtb2RlLlxuIik7CisgICAgICAgICAgICAg ICAgZ290byBiYWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4oKSAmJiAq YWFjY3QgPT0gMCkgeworICAgICAgICAgICAgICAgICphYWNjdCA9IG1hbGxvYygodW5zaWduZWQp IHN0cmxlbih0b2t2YWwpICsgMSk7CisgICAgICAgICAgICAgICAgc3RyY3B5KCphYWNjdCwgdG9r dmFsKTsgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJV bmtub3duIC5uZXRyYyBrZXl3b3JkICVzXG4iLCB0b2t2YWwpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgZ290byBkb25lOworICAgIH0KKworICBkb25lOgorICAgIGZj bG9zZShjZmlsZSk7CisgICAgcmV0dXJuKDApOworCisgIGJhZDoKKyAgICBmY2xvc2UoY2ZpbGUp OworICAgIHJldHVybigtMSk7Cit9CisjZW5kaWYgLyogVVNFX1JVU0VSUEFTUyAqLworCitzdGF0 aWMgY2hhciAqcmFkaXhOID0KKyAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hp amtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOworCitzdGF0aWMgY2hhciBwYWQgPSAnPSc7 CisKK3N0YXRpYyBpbnQKK3JhZGl4X2VuY29kZShpbmJ1Ziwgb3V0YnVmLCBpbmxlbiwgb3V0bGVu LCBkZWNvZGUpCisgICAgQ0hBUiBpbmJ1ZltdLCBvdXRidWZbXTsKKyAgICBpbnQgaW5sZW4sICpv dXRsZW4sIGRlY29kZTsKK3sKKyAgICBpbnQgaSwgaiwgRCA9IDA7CisgICAgY2hhciAqcDsKKyAg ICBDSEFSIGMgPSBOVUw7CisKKyAgICBpZiAoZGVjb2RlKSB7CisgICAgICAgIGZvciAoaSA9IDAs IGogPSAwOyBpbmJ1ZltpXSAmJiBpbmJ1ZltpXSAhPSBwYWQ7IGkrKykgeworICAgICAgICAgICAg aWYgKChwID0gY2tzdHJjaHIocmFkaXhOLCBpbmJ1ZltpXSkpID09IE5VTEwpCisgICAgICAgICAg ICAgIHJldHVybigxKTsKKyAgICAgICAgICAgIEQgPSBwIC0gcmFkaXhOOworICAgICAgICAgICAg c3dpdGNoIChpJjMpIHsKKyAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIG91 dGJ1ZltqXSA9IEQ8PDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh c2UgMToKKyAgICAgICAgICAgICAgICBvdXRidWZbaisrXSB8PSBEPj40OworICAgICAgICAgICAg ICAgIG91dGJ1ZltqXSA9IChEJjE1KTw8NDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG91dGJ1ZltqKytdIHw9IEQ+PjI7Cisg ICAgICAgICAgICAgICAgb3V0YnVmW2pdID0gKEQmMyk8PDY7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBvdXRidWZbaisrXSB8 PSBEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGogPT0gKm91dGxlbikKKyAgICAg ICAgICAgICAgcmV0dXJuKDQpOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoaSYzKSB7Cisg ICAgICAgICAgY2FzZSAxOiByZXR1cm4oMyk7CisgICAgICAgICAgY2FzZSAyOiBpZiAoRCYxNSkg cmV0dXJuKDMpOworICAgICAgICAgICAgaWYgKHN0cmNtcCgoY2hhciAqKSZpbmJ1ZltpXSwgIj09 IikpIHJldHVybigyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzogaWYg KEQmMykgcmV0dXJuKDMpOworICAgICAgICAgICAgaWYgKHN0cmNtcCgoY2hhciAqKSZpbmJ1Zltp XSwgIj0iKSkgIHJldHVybigyKTsKKyAgICAgICAgfQorICAgICAgICAqb3V0bGVuID0gajsKKyAg ICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGlubGVuOyBpKyspIHsK KyAgICAgICAgICAgIHN3aXRjaCAoaSUzKSB7CisgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAg ICAgICAgICAgICBvdXRidWZbaisrXSA9IHJhZGl4TltpbmJ1ZltpXT4+Ml07CisgICAgICAgICAg ICAgICAgYyA9IChpbmJ1ZltpXSYzKTw8NDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG91dGJ1ZltqKytdID0gcmFkaXhOW2N8 aW5idWZbaV0+PjRdOworICAgICAgICAgICAgICAgIGMgPSAoaW5idWZbaV0mMTUpPDwyOworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAg ICAgb3V0YnVmW2orK10gPSByYWRpeE5bY3xpbmJ1ZltpXT4+Nl07CisgICAgICAgICAgICAgICAg b3V0YnVmW2orK10gPSByYWRpeE5baW5idWZbaV0mNjNdOworICAgICAgICAgICAgICAgIGMgPSAw OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGogPT0gKm91dGxlbikKKyAgICAgICAg ICAgICAgcmV0dXJuKDQpOworICAgICAgICB9CisgICAgICAgIGlmIChpJTMpIG91dGJ1ZltqKytd ID0gcmFkaXhOW2NdOworICAgICAgICBzd2l0Y2ggKGklMykgeworICAgICAgICAgIGNhc2UgMTog b3V0YnVmW2orK10gPSBwYWQ7CisgICAgICAgICAgY2FzZSAyOiBvdXRidWZbaisrXSA9IHBhZDsK KyAgICAgICAgfQorICAgICAgICBvdXRidWZbKm91dGxlbiA9IGpdID0gJ1wwJzsKKyAgICB9Cisg ICAgcmV0dXJuKDApOworfQorCitzdGF0aWMgY2hhciAqCityYWRpeF9lcnJvcihlKSBpbnQgZTsK K3sKKyAgICBzd2l0Y2ggKGUpIHsKKyAgICAgIGNhc2UgMDogIHJldHVybigiU3VjY2VzcyIpOwor ICAgICAgY2FzZSAxOiAgcmV0dXJuKCJCYWQgY2hhcmFjdGVyIGluIGVuY29kaW5nIik7CisgICAg ICBjYXNlIDI6ICByZXR1cm4oIkVuY29kaW5nIG5vdCBwcm9wZXJseSBwYWRkZWQiKTsKKyAgICAg IGNhc2UgMzogIHJldHVybigiRGVjb2RlZCAjIG9mIGJpdHMgbm90IGEgbXVsdGlwbGUgb2YgOCIp OworICAgICAgY2FzZSA0OiAgcmV0dXJuKCJPdXRwdXQgYnVmZmVyIHRvbyBzbWFsbCIpOworICAg ICAgZGVmYXVsdDogcmV0dXJuKCJVbmtub3duIGVycm9yIik7CisgICAgfQorfQorLyogRU5EX1JV U0VSUEFTUyAqLworCisjaWZkZWYgRlRQX1NSUAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKKyB8ICAgUGFja2FnZTogc3JwZnRwICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgICBBdXRob3I6IEV1 Z2VuZSBKaG9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor LyoKKyAqIENvcHlyaWdodCAoYykgMTk5Ny0xOTk5ICBUaGUgU3RhbmZvcmQgU1JQIEF1dGhlbnRp Y2F0aW9uIFByb2plY3QKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMtSVMi IEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUywgSU1QTElFRCBP UiBPVEhFUldJU0UsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQorICogV0FSUkFO VFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFNUQU5GT1JEIEJFIExJQUJMRSBGT1IgQU5ZIFNQ RUNJQUwsIElOQ0lERU5UQUwsCisgKiBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg T0YgQU5ZIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKKyAqIFJFU1VMVElORyBGUk9N IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgT1IgTk9UIEFEVklTRUQgT0YK KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBEQU1BR0UsIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9S IFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogSW4gYWRkaXRpb24sIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucyBhcHBseToKKyAqCisgKiAxLiBBbnkgc29mdHdhcmUgdGhhdCBp bmNvcnBvcmF0ZXMgdGhlIFNSUCBhdXRoZW50aWNhdGlvbiB0ZWNobm9sb2d5CisgKiAgICBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWdtZW50OgorICogICAgIlRoaXMgcHJvZHVj dCB1c2VzIHRoZSAnU2VjdXJlIFJlbW90ZSBQYXNzd29yZCcgY3J5cHRvZ3JhcGhpYworICogICAg IGF1dGhlbnRpY2F0aW9uIHN5c3RlbSBkZXZlbG9wZWQgYnkgVG9tIFd1ICh0andAQ1MuU3RhbmZv cmQuRURVKS4iCisgKgorICogMi4gQW55IHNvZnR3YXJlIHRoYXQgaW5jb3Jwb3JhdGVzIGFsbCBv ciBwYXJ0IG9mIHRoZSBTUlAgZGlzdHJpYnV0aW9uCisgKiAgICBpdHNlbGYgbXVzdCBhbHNvIGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFRvbSBXdSBhbmQgRXVnZW5lCisgKiAgICAg SmhvbmcgZm9yIHRoZSBTUlAgRGlzdHJpYnV0aW9uIChodHRwOi8vc3JwLnN0YW5mb3JkLmVkdS9z cnAvKS4iCisgKgorICogMy4gUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBvciBiaW5hcnkgZm9y bSBtdXN0IHJldGFpbiBhbiBpbnRhY3QgY29weQorICogICAgb2YgdGhpcyBjb3B5cmlnaHQgbm90 aWNlIGFuZCBsaXN0IG9mIGNvbmRpdGlvbnMuCisgKi8KKworI2RlZmluZSBTUlBfUFJPVF9WRVJT SU9OICAgICAgICAxCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjZGVmaW5lIFNSUF9ERUZBVUxU X0NJUEhFUiAgICAgIENJUEhFUl9JRF9DQVNUNV9DQkMKKyNlbHNlCisjZGVmaW5lIFNSUF9ERUZB VUxUX0NJUEhFUiAgICAgIENJUEhFUl9JRF9OT05FCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LworCisjZGVmaW5lIFNSUF9ERUZBVUxUX0hBU0ggICAgICAgIEhBU0hfSURfU0hBCisKK0NIQVIg c3JwX3ByZWZfY2lwaGVyID0gQ0lQSEVSX0lEX0RFUzNfRUNCOworQ0hBUiBzcnBfcHJlZl9oYXNo ID0gSEFTSF9JRF9TSEE7CisKK3N0YXRpYyBzdHJ1Y3QgdF9jbGllbnQgKnRjID0gTlVMTDsKK3N0 YXRpYyBDSEFSICpza2V5ID0gTlVMTDsKK3N0YXRpYyBrcnlwdG9fY29udGV4dCAqaW5jcnlwdCA9 IE5VTEw7CitzdGF0aWMga3J5cHRvX2NvbnRleHQgKm91dGNyeXB0ID0gTlVMTDsKKwordHlwZWRl ZiB1bnNpZ25lZCBpbnQgc3JwX3VpbnQzMjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IHNycF9zZWxjaXBoZXI6 IHNlbGVjdCBjaXBoZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KK3N0YXRpYyBpbnQKK3NycF9zZWxjaXBoZXIgKGNuYW1lKSBjaGFyICpjbmFtZTsgeworICAg IGNpcGhlcl9kZXNjICpjZDsKKworICAgIGlmICghKGNkID0gY2lwaGVyX2dldGRlc2NieW5hbWUg KGNuYW1lKSkpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIENIQVIgKmxpc3QgPSBjaXBoZXJf Z2V0bGlzdCAoKTsKKworICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJmdHA6IHN1cHBvcnRlZCBj aXBoZXJzOlxuXG4iKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAobGlzdCk7IGkr KykKKyAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAgJXNcbiIsIChjaXBoZXJfZ2V0ZGVz Y2J5aWQobGlzdFtpXSkpLT5uYW1lKTsKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsK KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzcnBfcHJlZl9jaXBoZXIgPSBjZC0+aWQ7 CisgICAgcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBzcnBfc2VsaGFzaDogc2VsZWN0IGhh c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0 aWMgaW50CitzcnBfc2VsaGFzaCAoaG5hbWUpIGNoYXIgKmhuYW1lOyB7CisgICAgaGFzaF9kZXNj ICpoZDsKKworICAgIGlmICghKGhkID0gaGFzaF9nZXRkZXNjYnluYW1lIChobmFtZSkpKSB7Cisg ICAgICAgIGludCBpOworICAgICAgICBDSEFSICpsaXN0ID0gaGFzaF9nZXRsaXN0ICgpOworCisg ICAgICAgIGZwcmludGYgKHN0ZGVyciwgImZ0cDogc3VwcG9ydGVkIGhhc2ggZnVuY3Rpb25zOlxu XG4iKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbiAobGlzdCk7IGkrKykKKyAgICAg ICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAgJXNcbiIsIChoYXNoX2dldGRlc2NieWlkKGxpc3Rb aV0pKS0+bmFtZSk7CisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuIik7CisgICAgICAgIHJl dHVybiAtMTsKKyAgICB9CisgICAgc3JwX3ByZWZfaGFzaCA9IGhkLT5pZDsKKyAgICByZXR1cm4g MDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKKyB8IHNycF91c2VycGFzczogZ2V0IHVzZXJuYW1lIGFuZCBwYXNz d29yZCAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3NycF91 c2VycGFzcyAoaG9zdCkgY2hhciAqaG9zdDsgeworICAgIGNoYXIgdG1wW0JVRlNJWl0sIHByb21w dFtQUk9NUFRTSVpdOworICAgIGNoYXIgKnVzZXI7CisKKyAgICB1c2VyID0gTlVMTDsKKyNpZmRl ZiBVU0VfUlVTRVJQQVNTCisgICAgcnVzZXJwYXNzIChob3N0LCAmdXNlciwgJnNycF9wYXNzLCAm c3JwX2FjY3QpOworI2VuZGlmIC8qIFVTRV9SVVNFUlBBU1MgKi8KKworICAgIHdoaWxlICh1c2Vy ID09IE5VTEwpICAgICB7CisgICAgICAgIGNoYXIgKm15bmFtZTsKKyAgICAgICAgaW50IG9rOwor CisgICAgICAgIG15bmFtZSA9IHdob2FtaSgpOworICAgICAgICBpZiAoIW15bmFtZSkgbXluYW1l ID0gIiI7CisgICAgICAgIGlmIChteW5hbWVbMF0pCisgICAgICAgICAgY2ttYWt4bXNnKHByb21w dCxQUk9NUFRTSVosIiBOYW1lICgiLGhvc3QsIjoiLG15bmFtZSwiKTogIiwKKyAgICAgICAgICAg ICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgIGVs c2UKKyAgICAgICAgICBja21ha21zZyhwcm9tcHQsUFJPTVBUU0laLCIgTmFtZSAoIixob3N0LCIp OiAiLE5VTEwpOworICAgICAgICB0bXBbMF0gPSAnXDAnOworICAgICAgICBvayA9IHVxX3R4dChO VUxMLHByb21wdCwxLE5VTEwsdG1wLEJVRlNJWixOVUxMLAorICAgICAgICAgICAgICAgICAgICBE RUZBVUxUX1VRX1RJTUVPVVQpOworICAgICAgICBpZiAoIW9rIHx8ICp0bXAgPT0gJ1wwJykKKyAg ICAgICAgICB1c2VyID0gbXluYW1lOworICAgICAgICBlbHNlCisgICAgICAgICAgdXNlciA9IGJy c3RyaXAodG1wKTsKKyAgICB9CisgICAgY2tzdHJuY3B5IChzcnBfdXNlciwgdXNlcixCVUZTSVop OworICAgIHJldHVybigwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IHNycF9yZXNldDogcmVzZXQgc3Jw IGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0 YXRpYyBpbnQKK3NycF9yZXNldCAoKSB7CisgICAgaWYgKHRjKSB7IHRfY2xpZW50Y2xvc2UgKHRj KTsgdGMgPSBOVUxMOyB9CisgICAgaWYgKGluY3J5cHQpIHsga3J5cHRvX2RlbGV0ZSAoaW5jcnlw dCk7IGluY3J5cHQgPSBOVUxMOyB9CisgICAgaWYgKG91dGNyeXB0KSB7IGtyeXB0b19kZWxldGUg KG91dGNyeXB0KTsgb3V0Y3J5cHQgPSBOVUxMOyB9CisgICAgcmV0dXJuKDApOworfQorCisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKworIHwgc3JwX2Z0cF9hdXRoOiBwZXJmb3JtIHNycCBhdXRoZW50aWNhdGlvbiAgICAgICAg ICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3NycF9mdHBfYXV0aCho b3N0LCB1c2VyLCBwYXNzKQorICAgIGNoYXIgKmhvc3Q7CisgICAgY2hhciAqdXNlcjsKKyAgICBj aGFyICpwYXNzOworeworICAgIHN0cnVjdCB0X251bSAqd3A7CisgICAgc3RydWN0IHRfbnVtIE47 CisgICAgc3RydWN0IHRfbnVtIGc7CisgICAgc3RydWN0IHRfbnVtIHM7CisgICAgc3RydWN0IHRf bnVtIHlwOworICAgIENIQVIgYnVmW0ZUUF9CVUZTSVpdOworICAgIENIQVIgdG1wW0ZUUF9CVUZT SVpdOworICAgIENIQVIgKmJwLCAqY3A7CisgICAgaW50IG4sIGUsIGNsZW4sIGJsZW4sIGxlbiwg aTsKKyAgICBDSEFSIGNpZCA9IDA7CisgICAgQ0hBUiBoaWQgPSAwOworCisgICAgc3JwX3Bhc3Mg PSBzcnBfYWNjdCA9IDA7CisKKyAgICBuID0gZnRwY21kKCJBVVRIIFNSUCIsTlVMTCwwLDAsZnRw X3ZibSk7CisgICAgaWYgKG4gIT0gUkVQTFlfQ09OVElOVUUpIHsKKyAgICAgICAgaWYgKGZ0cF9k ZWIpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNSUCByZWplY3RlZCBhcyBhbiBhdXRo ZW50aWNhdGlvbiB0eXBlXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgcHJvdG9jb2wgdmVyc2lvbiAqLworICAg ICAgICBDSEFSIHZlcnNbNF07CisgICAgICAgIG1lbXNldCAodmVycywgMCwgNCk7CisgICAgICAg IHZlcnNbM10gPSBTUlBfUFJPVF9WRVJTSU9OOworICAgICAgICBpZiAoIXF1aWV0KQorICAgICAg ICAgIHByaW50ZiAoIlNSUCBhY2NlcHRlZCBhcyBhdXRoZW50aWNhdGlvbiB0eXBlLlxuIik7Cisg ICAgICAgIGJwID0gdG1wOyBibGVuID0gMDsKKyAgICAgICAgc3JwX3B1dCAodmVycywgJmJwLCA0 LCAmYmxlbik7CisgICAgICAgIGxlbiA9IEZUUF9CVUZTSVo7CisgICAgICAgIGlmIChlID0gcmFk aXhfZW5jb2RlICh0bXAsIGJ1ZiwgYmxlbiwgJmxlbiwgUkFESVhfRU5DT0RFKSkKKyAgICAgICAg ICBnb3RvIGVuY29kZV9lcnJvcjsKKyAgICAgICAgcmVwbHlfcGFyc2UgPSAiQURBVD0iOworICAg ICAgICBuID0gZnRwY21kKCJBREFUIixidWYsLTEsLTEsMCk7CisgICAgfQorICAgIGlmIChuID09 IFJFUExZX0NPTlRJTlVFKSB7ICAgICAgICAgIC8qIEdldCBwcm90b2NvbCB2ZXJzaW9uICovCisg ICAgICAgIGJwID0gYnVmOworICAgICAgICBpZiAoIXJlcGx5X3BhcnNlKQorICAgICAgICAgIGdv dG8gZGF0YV9lcnJvcjsKKyAgICAgICAgYmxlbiA9IEZUUF9CVUZTSVo7CisgICAgICAgIGlmIChl ID0gcmFkaXhfZW5jb2RlKHJlcGx5X3BhcnNlLCBicCwgMCwgJmJsZW4sIFJBRElYX0RFQ09ERSkp CisgICAgICAgICAgZ290byBkZWNvZGVfZXJyb3I7CisgICAgICAgIGlmIChzcnBfZ2V0ICgmYnAs ICZjcCwgJmJsZW4sICZjbGVuKSAhPSA0KQorICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKKwor ICAgICAgICBpZiAoaG9zdCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB1c2VybmFtZS9w YXNzd29yZCBpZiBuZWVkZWQgKi8KKyAgICAgICAgICAgIHNycF91c2VycGFzcyAoaG9zdCk7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBja3N0cm5jcHkgKHNycF91c2VyLCB1c2VyLCBC VUZTSVopOworICAgICAgICAgICAgc3JwX3Bhc3MgPSBwYXNzOworICAgICAgICB9CisgICAgICAg IGJwID0gdG1wOyBibGVuID0gMDsgICAgICAgICAgICAgLyogU2VuZCB1c2VybmFtZSAqLworICAg ICAgICBzcnBfcHV0IChzcnBfdXNlciwgJmJwLCBzdHJsZW4gKHNycF91c2VyKSwgJmJsZW4pOwor ICAgICAgICBsZW4gPSBGVFBfQlVGU0laOworICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAo dG1wLCBidWYsIGJsZW4sICZsZW4sIFJBRElYX0VOQ09ERSkpCisgICAgICAgICAgZ290byBlbmNv ZGVfZXJyb3I7CisgICAgICAgIHJlcGx5X3BhcnNlID0gIkFEQVQ9IjsKKyAgICAgICAgbiA9IGZ0 cGNtZCgiQURBVCIsYnVmLC0xLC0xLDApOworICAgIH0KKyAgICBpZiAobiA9PSBSRVBMWV9DT05U SU5VRSkgeyAgICAgICAgICAvKiBHZXQgTiwgZyBhbmQgcyAqLworICAgICAgICBicCA9IGJ1ZjsK KyAgICAgICAgaWYgKCFyZXBseV9wYXJzZSkKKyAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Cisg ICAgICAgIGJsZW4gPSBGVFBfQlVGU0laOworICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAo cmVwbHlfcGFyc2UsIGJwLCAwLCAmYmxlbiwgUkFESVhfREVDT0RFKSkKKyAgICAgICAgICBnb3Rv IGRlY29kZV9lcnJvcjsKKyAgICAgICAgaWYgKHNycF9nZXQgKCZicCwgJihOLmRhdGEpLCAmYmxl biwgJihOLmxlbikpIDwgMCkKKyAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7CisgICAgICAgIGlm IChzcnBfZ2V0ICgmYnAsICYoZy5kYXRhKSwgJmJsZW4sICYoZy5sZW4pKSA8IDApCisgICAgICAg ICAgZ290byBkYXRhX2Vycm9yOworICAgICAgICBpZiAoc3JwX2dldCAoJmJwLCAmKHMuZGF0YSks ICZibGVuLCAmKHMubGVuKSkgPCAwKQorICAgICAgICAgIGdvdG8gZGF0YV9lcnJvcjsKKyAgICAg ICAgaWYgKCh0YyA9IHRfY2xpZW50b3BlbiAoc3JwX3VzZXIsICZOLCAmZywgJnMpKSA9PSBOVUxM KSB7CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJVbmFibGUgdG8gb3BlbiBTUlAgY2xp ZW50IHN0cnVjdHVyZS5cbiIpOworICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKyAg ICAgICAgd3AgPSB0X2NsaWVudGdlbmV4cCAodGMpOyAgICAgICAvKiBTZW5kIHdwICovCisgICAg ICAgIGJwID0gdG1wOyBibGVuID0gMDsKKyAgICAgICAgc3JwX3B1dCAod3AtPmRhdGEsICZicCwg d3AtPmxlbiwgJmJsZW4pOworICAgICAgICBsZW4gPSBGVFBfQlVGU0laOworICAgICAgICBpZiAo ZSA9IHJhZGl4X2VuY29kZSAodG1wLCBidWYsIGJsZW4sICZsZW4sIFJBRElYX0VOQ09ERSkpCisg ICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7CisgICAgICAgIHJlcGx5X3BhcnNlID0gIkFEQVQ9 IjsKKyAgICAgICAgbiA9IGZ0cGNtZCgiQURBVCIsYnVmLC0xLC0xLDApOworICAgIH0KKyAgICBp ZiAobiA9PSBSRVBMWV9DT05USU5VRSkgeyAgICAgICAgICAvKiBHZXQgeXAgKi8KKyAgICAgICAg YnAgPSBidWY7CisgICAgICAgIGlmICghcmVwbHlfcGFyc2UpCisgICAgICAgICAgZ290byBkYXRh X2Vycm9yOworICAgICAgICBibGVuID0gRlRQX0JVRlNJWjsKKyAgICAgICAgaWYgKGUgPSByYWRp eF9lbmNvZGUgKHJlcGx5X3BhcnNlLCBicCwgMCwgJmJsZW4sIFJBRElYX0RFQ09ERSkpCisgICAg ICAgICAgZ290byBkZWNvZGVfZXJyb3I7CisgICAgICAgIGlmIChzcnBfZ2V0ICgmYnAsICYoeXAu ZGF0YSksICZibGVuLCAmKHlwLmxlbikpIDwgMCkKKyAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7 CisgICAgICAgIGlmICghc3JwX3Bhc3MpIHsKKyAgICAgICAgICAgIHN0YXRpYyBjaGFyIGZ0cHBh c3NbUEFTU0JVRlNJWl07CisgICAgICAgICAgICBpbnQgb2s7CisgICAgICAgICAgICBzZXRpbnQo KTsKKyAgICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwsIiBTUlAgUGFzc3dvcmQ6ICIsMixOVUxM LGZ0cHBhc3MsUEFTU0JVRlNJWixOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVM VF9VUV9USU1FT1VUKTsKKyAgICAgICAgICAgIGlmIChvaykKKwkgICAgICBzcnBfcGFzcyA9IGJy c3RyaXAoZnRwcGFzcyk7CisgICAgICAgIH0KKyAgICAgICAgdF9jbGllbnRwYXNzd2QgKHRjLCBz cnBfcGFzcyk7CisgICAgICAgIG1lbXNldCAoc3JwX3Bhc3MsIDAsIHN0cmxlbiAoc3JwX3Bhc3Mp KTsKKyAgICAgICAgc2tleSA9IHRfY2xpZW50Z2V0a2V5ICh0YywgJnlwKTsgLyogU2VuZCByZXNw b25zZSAqLworICAgICAgICBicCA9IHRtcDsgYmxlbiA9IDA7CisgICAgICAgIHNycF9wdXQgKHRf Y2xpZW50cmVzcG9uc2UgKHRjKSwgJmJwLCAyMCwgJmJsZW4pOworICAgICAgICBsZW4gPSBGVFBf QlVGU0laOworICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAodG1wLCBidWYsIGJsZW4sICZs ZW4sIFJBRElYX0VOQ09ERSkpCisgICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7CisgICAgICAg IHJlcGx5X3BhcnNlID0gIkFEQVQ9IjsKKyAgICAgICAgbiA9IGZ0cGNtZCgiQURBVCIsYnVmLC0x LC0xLDApOworICAgIH0KKyAgICBpZiAobiA9PSBSRVBMWV9DT05USU5VRSkgeyAgICAgICAgICAv KiBHZXQgcmVzcG9uc2UgKi8KKyAgICAgICAgYnAgPSBidWY7CisgICAgICAgIGlmICghcmVwbHlf cGFyc2UpCisgICAgICAgICAgZ290byBkYXRhX2Vycm9yOworICAgICAgICBibGVuID0gRlRQX0JV RlNJWjsKKyAgICAgICAgaWYgKGUgPSByYWRpeF9lbmNvZGUgKHJlcGx5X3BhcnNlLCBicCwgMCwg JmJsZW4sIFJBRElYX0RFQ09ERSkpCisgICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7CisgICAg ICAgIGlmIChzcnBfZ2V0ICgmYnAsICZjcCwgJmJsZW4sICZjbGVuKSAhPSAyMCkKKyAgICAgICAg ICBnb3RvIGRhdGFfZXJyb3I7CisgICAgICAgIGlmICh0X2NsaWVudHZlcmlmeSAodGMsIGNwKSkg eworICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiV0FSTklORzogYmFkIHJlc3BvbnNlIHRv IGNsaWVudCBjaGFsbGVuZ2UuXG4iKTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICB9 CisgICAgICAgIGJwID0gdG1wOyBibGVuID0gMDsgICAgICAgICAgICAgLyogU2VuZCBub3RoaW5n ICovCisgICAgICAgIHNycF9wdXQgKCJcMCIsICZicCwgMSwgJmJsZW4pOworICAgICAgICBsZW4g PSBGVFBfQlVGU0laOworICAgICAgICBpZiAoZSA9IHJhZGl4X2VuY29kZSAodG1wLCBidWYsIGJs ZW4sICZsZW4sIFJBRElYX0VOQ09ERSkpCisgICAgICAgICAgZ290byBlbmNvZGVfZXJyb3I7Cisg ICAgICAgIHJlcGx5X3BhcnNlID0gIkFEQVQ9IjsKKyAgICAgICAgbiA9IGZ0cGNtZCgiQURBVCIs YnVmLC0xLC0xLDApOworICAgIH0KKyAgICBpZiAobiA9PSBSRVBMWV9DT05USU5VRSkgeyAgICAg ICAgICAvKiBHZXQgY2lwaGVyICYgaGFzaCBsaXN0cywgc2VxbnVtICovCisgICAgICAgIENIQVIg c2VxbnVtWzRdOworICAgICAgICBDSEFSICpjbGlzdDsKKyAgICAgICAgQ0hBUiAqaGxpc3Q7Cisg ICAgICAgIENIQVIgKnAxOworICAgICAgICBpbnQgY2xpc3RfbGVuLCBobGlzdF9sZW47CisgICAg ICAgIGJwID0gYnVmOworICAgICAgICBpZiAoIXJlcGx5X3BhcnNlKQorICAgICAgICAgIGdvdG8g ZGF0YV9lcnJvcjsKKyAgICAgICAgYmxlbiA9IEZUUF9CVUZTSVo7CisgICAgICAgIGlmIChlID0g cmFkaXhfZW5jb2RlIChyZXBseV9wYXJzZSwgYnAsIDAsICZibGVuLCBSQURJWF9ERUNPREUpKQor ICAgICAgICAgIGdvdG8gZW5jb2RlX2Vycm9yOworICAgICAgICBpZiAoc3JwX2dldCAoJmJwLCAm Y2xpc3QsICZibGVuLCAmY2xpc3RfbGVuKSA8IDApCisgICAgICAgICAgZ290byBkYXRhX2Vycm9y OworICAgICAgICBpZiAoc3JwX2dldCAoJmJwLCAmaGxpc3QsICZibGVuLCAmaGxpc3RfbGVuKSA8 IDApCisgICAgICAgICAgZ290byBkYXRhX2Vycm9yOworICAgICAgICBpZiAoc3JwX2dldCAoJmJw LCAmY3AsICZibGVuLCAmY2xlbikgIT0gNCkKKyAgICAgICAgICBnb3RvIGRhdGFfZXJyb3I7Cisg ICAgICAgIG1lbWNweSAoc2VxbnVtLCBjcCwgNCk7CisgICAgICAgIGlmIChjaXBoZXJfc3VwcG9y dGVkIChjbGlzdCwgc3JwX3ByZWZfY2lwaGVyKSkgLyogQ2hvb3NlIGNpcGhlciAqLworICAgICAg ICAgIGNpZCA9IHNycF9wcmVmX2NpcGhlcjsKKyAgICAgICAgaWYgKCFjaWQgJiYgY2lwaGVyX3N1 cHBvcnRlZCAoY2xpc3QsIFNSUF9ERUZBVUxUX0NJUEhFUikpCisgICAgICAgICAgY2lkID0gU1JQ X0RFRkFVTFRfQ0lQSEVSOworICAgICAgICBpZiAoIWNpZCkgeworICAgICAgICAgICAgQ0hBUiAq bG9jbGlzdCA9IGNpcGhlcl9nZXRsaXN0ICgpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IHN0cmxlbiAobG9jbGlzdCk7IGkrKykKKyAgICAgICAgICAgICAgaWYgKGNpcGhlcl9zdXBwb3J0 ZWQgKGNsaXN0LCBsb2NsaXN0W2ldKSkgeworICAgICAgICAgICAgICAgICAgY2lkID0gbG9jbGlz dFtpXTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgaWYgKCFjaWQpIHsKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlVu YWJsZSB0byBhZ3JlZSBvbiBjaXBoZXIuXG4iKTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAg ICAgICB9CisgICAgICAgIC8qIENob29zZSBoYXNoICovCisKKyAgICAgICAgaWYgKHNycF9wcmVm X2hhc2ggJiYgaGFzaF9zdXBwb3J0ZWQgKGhsaXN0LCBzcnBfcHJlZl9oYXNoKSkKKyAgICAgICAg ICBoaWQgPSBzcnBfcHJlZl9oYXNoOworCisgICAgICAgIGlmICghaGlkICYmIGhhc2hfc3VwcG9y dGVkIChobGlzdCwgU1JQX0RFRkFVTFRfSEFTSCkpCisgICAgICAgICAgaGlkID0gU1JQX0RFRkFV TFRfSEFTSDsKKworICAgICAgICBpZiAoIWhpZCkgeworICAgICAgICAgICAgQ0hBUiAqbG9jbGlz dCA9IGhhc2hfZ2V0bGlzdCAoKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJsZW4g KGxvY2xpc3QpOyBpKyspCisgICAgICAgICAgICAgIGlmIChoYXNoX3N1cHBvcnRlZCAoaGxpc3Qs IGxvY2xpc3RbaV0pKSB7CisgICAgICAgICAgICAgICAgICBoaWQgPSBsb2NsaXN0W2ldOworICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBpZiAoIWhpZCkgeworICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiVW5hYmxlIHRvIGFn cmVlIG9uIGhhc2guXG4iKTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICB9CisgICAg ICAgIC8qIFNldCBpbmNyeXB0ICovCisKKyAgICAgICAgaWYgKCEoaW5jcnlwdCA9IGtyeXB0b19u ZXcgKGNpZCwgaGlkLCBza2V5LCAyMCwgTlVMTCwgMCwgc2VxbnVtLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgS1JZUFRPX0RFQ09ERSkpKQorICAgICAgICAgIGdvdG8gYmFk OworCisgICAgICAgIC8qIEdlbmVyYXRlIHJhbmRvbSBudW1iZXIgZm9yIG91dGtleSBhbmQgb3V0 c2VxbnVtICovCisKKyAgICAgICAgdF9yYW5kb20gKHNlcW51bSwgNCk7CisKKyAgICAgICAgLyog U2VuZCBjaWQsIGhpZCwgb3V0a2V5LCBvdXRzZXFudW0gKi8KKworICAgICAgICBicCA9IHRtcDsg YmxlbiA9IDA7CisgICAgICAgIHNycF9wdXQgKCZjaWQsICZicCwgMSwgJmJsZW4pOworICAgICAg ICBzcnBfcHV0ICgmaGlkLCAmYnAsIDEsICZibGVuKTsKKyAgICAgICAgc3JwX3B1dCAoc2VxbnVt LCAmYnAsIDQsICZibGVuKTsKKyAgICAgICAgbGVuID0gRlRQX0JVRlNJWjsKKyAgICAgICAgaWYg KGUgPSByYWRpeF9lbmNvZGUgKHRtcCwgYnVmLCBibGVuLCAmbGVuLCBSQURJWF9FTkNPREUpKQor ICAgICAgICAgIGdvdG8gZW5jb2RlX2Vycm9yOworICAgICAgICByZXBseV9wYXJzZSA9ICJBREFU PSI7CisgICAgICAgIG4gPSBmdHBjbWQoIkFEQVQiLGJ1ZiwtMSwtMSwwKTsKKworICAgICAgICAv KiBTZXQgb3V0Y3J5cHQgKi8KKworICAgICAgICBpZiAoIShvdXRjcnlwdCA9IGtyeXB0b19uZXcg KGNpZCwgaGlkLCBza2V5KzIwLCAyMCwgTlVMTCwgMCwgc2VxbnVtLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEtSWVBUT19FTkNPREUpKSkKKyAgICAgICAgICBnb3RvIGJh ZDsKKworICAgICAgICB0X2NsaWVudGNsb3NlICh0Yyk7CisgICAgICAgIHRjID0gTlVMTDsKKyAg ICB9CisgICAgaWYgKG4gIT0gUkVQTFlfQ09NUExFVEUpCisgICAgICBnb3RvIGJhZDsKKworICAg IGlmIChmdHBfdmJtKSB7CisgICAgICAgIGlmIChmdHBfZGViKQorICAgICAgICAgIHByaW50Zigi XG4iKTsKKyAgICAgICAgcHJpbnRmICgiU1JQIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZC5cbiIp OworICAgICAgICBwcmludGYgKCJVc2luZyBjaXBoZXIgJXMgYW5kIGhhc2ggZnVuY3Rpb24gJXMu XG4iLAorICAgICAgICAgICAgICAgIChjaXBoZXJfZ2V0ZGVzY2J5aWQoY2lkKSktPm5hbWUsCisg ICAgICAgICAgICAgICAgKGhhc2hfZ2V0ZGVzY2J5aWQoaGlkKSktPm5hbWUKKyAgICAgICAgICAg ICAgICApOworICAgIH0KKyAgICByZXBseV9wYXJzZSA9IE5VTEw7CisgICAgYXV0aF90eXBlID0g IlNSUCI7CisgICAgcmV0dXJuKDEpOworCisgIGVuY29kZV9lcnJvcjoKKyAgICBmcHJpbnRmIChz dGRlcnIsICJCYXNlIDY0IGVuY29kaW5nIGZhaWxlZDogJXMuXG4iLCByYWRpeF9lcnJvciAoZSkp OworICAgIGdvdG8gYmFkOworCisgIGRlY29kZV9lcnJvcjoKKyAgICBmcHJpbnRmIChzdGRlcnIs ICJCYXNlIDY0IGRlY29kaW5nIGZhaWxlZDogJXMuXG4iLCByYWRpeF9lcnJvciAoZSkpOworICAg IGdvdG8gYmFkOworCisgIGRhdGFfZXJyb3I6CisgICAgZnByaW50ZiAoc3RkZXJyLCAiVW5hYmxl IHRvIHVubWFyc2hhbCBhdXRoZW50aWNhdGlvbiBkYXRhLlxuIik7CisgICAgZ290byBiYWQ7CisK KyAgYmFkOgorICAgIGZwcmludGYgKHN0ZGVyciwgIlNSUCBhdXRoZW50aWNhdGlvbiBmYWlsZWQs IHRyeWluZyByZWd1bGFyIGxvZ2luLlxuIik7CisgICAgcmVwbHlfcGFyc2UgPSBOVUxMOworICAg IHJldHVybigwKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8IHNycF9wdXQ6IHB1dCBpdGVtIHRvIHNlbmQg YnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBp bnQKK3NycF9wdXQgKGluLCBvdXQsIGlubGVuLCBvdXRsZW4pCisgICAgQ0hBUiAqaW47CisgICAg Q0hBUiAqKm91dDsKKyAgICBpbnQgaW5sZW47CisgICAgaW50ICpvdXRsZW47Cit7CisgICAgc3Jw X3VpbnQzMiBuZXRfbGVuOworCisgICAgbmV0X2xlbiA9IGh0b25sIChpbmxlbik7CisgICAgbWVt Y3B5ICgqb3V0LCAmbmV0X2xlbiwgNCk7CisKKyAgICAqb3V0ICs9IDQ7ICpvdXRsZW4gKz0gNDsK KworICAgIG1lbWNweSAoKm91dCwgaW4sIGlubGVuKTsKKworICAgICpvdXQgKz0gaW5sZW47ICpv dXRsZW4gKz0gaW5sZW47CisgICAgcmV0dXJuKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgc3JwX2dl dDogZ2V0IGl0ZW0gZnJvbSByZWNlaXZlIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgIHwK KyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLworc3RhdGljIGludAorc3JwX2dldCAoaW4sIG91dCwgaW5sZW4sIG91dGxlbikK KyAgICBDSEFSICoqaW47CisgICAgQ0hBUiAqKm91dDsKKyAgICBpbnQgKmlubGVuOworICAgIGlu dCAqb3V0bGVuOworeworICAgIHNycF91aW50MzIgbmV0X2xlbjsKKworICAgIGlmICgqaW5sZW4g PCA0KSByZXR1cm4gLTE7CisKKyAgICBtZW1jcHkgKCZuZXRfbGVuLCAqaW4sIDQpOyAqaW5sZW4g LT0gNDsgKmluICs9IDQ7CisgICAgKm91dGxlbiA9IG50b2hsIChuZXRfbGVuKTsKKworICAgIGlm ICgqaW5sZW4gPCAqb3V0bGVuKSByZXR1cm4gLTE7CisKKyAgICAqb3V0ID0gKmluOyAqaW5sZW4g LT0gKm91dGxlbjsgKmluICs9ICpvdXRsZW47CisKKyAgICByZXR1cm4gKm91dGxlbjsKK30KKwor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKKyB8IHNycF9lbmNvZGU6IGVuY29kZSBjb250cm9sIG1lc3NhZ2UgICAgICAgICAg ICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQKK3NycF9lbmNvZGUgKHBy aXZhdGUsIGluLCBvdXQsIGxlbikKKyAgICBpbnQgcHJpdmF0ZTsKKyAgICBDSEFSICppbjsKKyAg ICBDSEFSICpvdXQ7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIGlmIChwcml2YXRlKQorICAg ICAgcmV0dXJuIGtyeXB0b19tc2dfcHJpdiAob3V0Y3J5cHQsIGluLCBvdXQsIGxlbik7CisgICAg ZWxzZQorICAgICAgcmV0dXJuIGtyeXB0b19tc2dfc2FmZSAob3V0Y3J5cHQsIGluLCBvdXQsIGxl bik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rCisgfCBzcnBfZGVjb2RlOiBkZWNvZGUgY29udHJvbCBtZXNzYWdl ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50CitzcnBf ZGVjb2RlIChwcml2YXRlLCBpbiwgb3V0LCBsZW4pCisgICAgaW50IHByaXZhdGU7CisgICAgQ0hB UiAqaW47CisgICAgQ0hBUiAqb3V0OworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICBpZiAocHJp dmF0ZSkKKyAgICAgIHJldHVybiBrcnlwdG9fbXNnX3ByaXYgKGluY3J5cHQsIGluLCBvdXQsIGxl bik7CisgICAgZWxzZQorICAgICAgcmV0dXJuIGtyeXB0b19tc2dfc2FmZSAoaW5jcnlwdCwgaW4s IG91dCwgbGVuKTsKK30KKworI2VuZGlmIC8qIEZUUF9TUlAgKi8KKworCisKKyNpZmRlZiBOT1Rf VVNFRAorLyoKKyAgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGZyb20gdGhlIFVuaXggRlRQIGNsaWVu dC4gIEJlIHN1cmUgdG8KKyAgbWFrZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgbm90 IGxvc3QuICBFc3BlY2lhbGx5CisgIHRoZSBQcm94eSBzdHVmZiBldmVuIHRob3VnaCB3ZSBoYXZl IG5vdCB5ZXQgaW1wbGVtZW50ZWQgaXQuCisqLworCisvKiBTZW5kIG11bHRpcGxlIGZpbGVzICAq LworCitzdGF0aWMgaW50CitmdHBfbXB1dChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFy Z3Y7IHsKKyAgICByZWdpc3RlciBpbnQgaTsKKyAgICBzaWdfdCBvbGRpbnRyOworICAgIGludCBv aW50ZXI7CisgICAgY2hhciAqdHA7CisgICAgc2lndHlwZSBtY2FuY2VsKCk7CisKKyAgICBpZiAo YXJnYyA8IDIgJiYgIWFub3RoZXIoJmFyZ2MsICZhcmd2LCAibG9jYWwtZmlsZXMiKSkgeworICAg ICAgICBwcmludGYoInVzYWdlOiAlcyBsb2NhbC1maWxlc1xuIiwgYXJndlswXSk7CisgICAgICAg IGZ0cGNvZGUgPSAtMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtbmFtZSA9IGFyZ3Zb MF07CisgICAgbWZsYWcgPSAxOworICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBtY2FuY2Vs KTsKKworICAgIC8qIFJlcGxhY2Ugd2l0aCBjYWxscyB0byBjY19leGVjdXRlKCkgKi8KKyAgICBz ZXRqbXAoamNhbmNlbCk7CisjaWZkZWYgRlRQX1BST1hZCisgICAgaWYgKHByb3h5KSB7CisgICAg ICAgIGNoYXIgKmNwLCAqdHAyLCB0bXBidWZbQ0tNQVhQQVRIXTsKKworICAgICAgICB3aGlsZSAo KGNwID0gcmVtZ2xvYihhcmd2LDApKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoKmNwID09 IDApIHsKKyAgICAgICAgICAgICAgICBtZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWZsYWcgJiYgY29uZmlybShhcmd2 WzBdLCBjcCkpIHsKKyAgICAgICAgICAgICAgICB0cCA9IGNwOworICAgICAgICAgICAgICAgIGlm IChtY2FzZSkgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnRwICYmICFpc2xvd2VyKCp0 cCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRwKys7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEqdHApIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHRwID0gY3A7CisgICAgICAgICAgICAgICAgICAgICAgICB0cDIgPSB0bXBidWY7CisgICAg ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCp0cDIgPSAqdHApICE9IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcigqdHAyKSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqdHAyID0gJ2EnICsgKnRwMiAtICdBJzsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHArKzsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0cDIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0cCA9IHRtcGJ1ZjsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG50ZmxhZykgeworICAgICAg ICAgICAgICAgICAgICB0cCA9IGRvdHJhbnModHApOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBpZiAobWFwZmxhZykgeworICAgICAgICAgICAgICAgICAgICB0cCA9IGRvbWFw KHRwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VuZHJlcXVlc3QoKHN1 bmlxdWUpID8gIlNUT1UiIDogIlNUT1IiLCBjcCwgdHAsIDAsIC0xLCAtMSwgMCk7CisgICAgICAg ICAgICAgICAgaWYgKCFtZmxhZyAmJiBmcm9tYXR0eSkgeworICAgICAgICAgICAgICAgICAgICBv aW50ZXIgPSBpbnRlcmFjdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSAx OworICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgiQ29udGludWUgd2l0aCIsIm1wdXQi KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWZsYWcrKzsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2lnbmFsKFNJR0lO VCwgb2xkaW50cik7CisgICAgICAgIG1mbGFnID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K KyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KKyAgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7 CisgICAgICAgIHJlZ2lzdGVyIGNoYXIgKipjcHAsICoqZ2FyZ3M7CisKKyAgICAgICAgaWYgKG1m bGFnICYmIGNvbmZpcm0oYXJndlswXSwgYXJndltpXSkpIHsKKyAgICAgICAgICAgIHRwID0gYXJn dltpXTsKKyAgICAgICAgICAgIHNlbmRyZXF1ZXN0KChmdHBfdXNuKSA/ICJTVE9VIiA6ICJTVE9S IiwgYXJndltpXSwgdHAsIDAsLTEsLTEsIDApOworICAgICAgICAgICAgaWYgKCFtZmxhZyAmJiBm cm9tYXR0eSkgeworICAgICAgICAgICAgICAgIG9pbnRlciA9IGludGVyYWN0aXZlOworICAgICAg ICAgICAgICAgIGludGVyYWN0aXZlID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgi Q29udGludWUgd2l0aCIsIm1wdXQiKSkgeworICAgICAgICAgICAgICAgICAgICBtZmxhZysrOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKworICAgICAgICBn YXJncyA9IGZ0cGdsb2IoYXJndltpXSk7CisgICAgICAgIGlmIChnbG9iZXJyICE9IE5VTEwpIHsK KyAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIGdsb2JlcnIpOworICAgICAgICAgICAgaWYgKGdh cmdzKSB7CisgICAgICAgICAgICAgICAgYmxrZnJlZShnYXJncyk7CisgICAgICAgICAgICAgICAg ZnJlZSgoY2hhciAqKWdhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICB9CisgICAgICAgIGZvciAoY3BwID0gZ2FyZ3M7IGNwcCAmJiAqY3BwICE9IE5V TEw7IGNwcCsrKSB7CisgICAgICAgICAgICBpZiAobWZsYWcgJiYgY29uZmlybShhcmd2WzBdLCAq Y3BwKSkgeworICAgICAgICAgICAgICAgIHRwID0gKmNwcDsKKyAgICAgICAgICAgICAgICBzZW5k cmVxdWVzdCgoc3VuaXF1ZSkgPyAiU1RPVSI6IlNUT1IiLCAqY3BwLCB0cCwgMCwgLTEsIC0xLCAw KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1mbGFnICYmIGZyb21hdHR5KSB7CisgICAgICAgICAg ICAgICAgICAgIG9pbnRlciA9IGludGVyYWN0aXZlOworICAgICAgICAgICAgICAgICAgICBpbnRl cmFjdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJDb250aW51ZSB3 aXRoIiwibXB1dCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtZmxhZysrOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gb2ludGVy OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp ZiAoZ2FyZ3MgIT0gTlVMTCkgeworICAgICAgICAgICAgYmxrZnJlZShnYXJncyk7CisgICAgICAg ICAgICBmcmVlKChjaGFyICopZ2FyZ3MpOworICAgICAgICB9CisgICAgfQorICAgIHNpZ25hbChT SUdJTlQsIG9sZGludHIpOworICAgIG1mbGFnID0gMDsKK30KKworLyogR2V0IG11bHRpcGxlIGZp bGVzICovCisKK3N0YXRpYyBpbnQKK2Z0cF9tZ2V0KGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFy ICoqYXJndjsgeworICAgIGludCByYyA9IC0xOworICAgIHNpZ190IG9sZGludHI7CisgICAgaW50 IG9pbnRlcjsKKyAgICBjaGFyICpjcCwgKnRwLCAqdHAyLCB0bXBidWZbQ0tNQVhQQVRIXTsKKyAg ICBzaWd0eXBlIG1jYW5jZWwoKTsKKworICAgIGlmIChhcmdjIDwgMiAmJiAhYW5vdGhlcigmYXJn YywgJmFyZ3YsICJyZW1vdGUtZmlsZXMiKSkgeworICAgICAgICBwcmludGYoInVzYWdlOiAlcyBy ZW1vdGUtZmlsZXNcbiIsIGFyZ3ZbMF0pOworICAgICAgICBmdHBjb2RlID0gLTE7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorICAgIG1uYW1lID0gYXJndlswXTsKKyAgICBtZmxhZyA9IDE7 CisgICAgb2xkaW50ciA9IHNpZ25hbChTSUdJTlQsbWNhbmNlbCk7CisgICAgLyogUmVwbGFjZSB3 aXRoIGNhbGxzIHRvIGNjX2V4ZWN1dGUoKSAqLworICAgIHNldGptcChqY2FuY2VsKTsKKyAgICB3 aGlsZSAoKGNwID0gcmVtZ2xvYihhcmd2LHByb3h5KSkgIT0gTlVMTCkgeworICAgICAgICBpZiAo KmNwID09ICdcMCcpIHsKKyAgICAgICAgICAgIG1mbGFnID0gMDsKKyAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChtZmxhZyAmJiBjb25maXJtKGFyZ3ZbMF0sIGNw KSkgeworICAgICAgICAgICAgdHAgPSBjcDsKKyAgICAgICAgICAgIGlmIChtY2FzZSkgeworICAg ICAgICAgICAgICAgIHdoaWxlICgqdHAgJiYgIWlzbG93ZXIoKnRwKSkgeworICAgICAgICAgICAg ICAgICAgICB0cCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoISp0 cCkgeworICAgICAgICAgICAgICAgICAgICB0cCA9IGNwOworICAgICAgICAgICAgICAgICAgICB0 cDIgPSB0bXBidWY7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoKnRwMiA9ICp0cCkgIT0g MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoKnRwMikpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqdHAyID0gJ2EnICsgKnRwMiAtICdBJzsKKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRwKys7CisgICAgICAg ICAgICAgICAgICAgICAgICB0cDIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cCA9IHRtcGJ1ZjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHJjID0gKHJlY3ZyZXF1ZXN0KCJSRVRSIiwgdHAsIGNwLCAid2IiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRwICE9IGNwIHx8ICFpbnRlcmFjdGl2ZSkgPT0gMCww LE5VTEwsMCwwLDApOworICAgICAgICAgICAgaWYgKCFtZmxhZyAmJiBmcm9tYXR0eSkgeworICAg ICAgICAgICAgICAgIG9pbnRlciA9IGludGVyYWN0aXZlOworICAgICAgICAgICAgICAgIGludGVy YWN0aXZlID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgiQ29udGludWUgd2l0aCIs Im1nZXQiKSkgeworICAgICAgICAgICAgICAgICAgICBtZmxhZysrOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKyAgICBzaWduYWwoU0lHSU5ULG9sZGludHIpOworICAgIG1mbGFn ID0gMDsKKyAgICByZXR1cm4ocmMpOworfQorCisvKiBEZWxldGUgbXVsdGlwbGUgZmlsZXMgKi8K Kworc3RhdGljIGludAorbWRlbGV0ZShhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7 IHsKKyAgICBzaWdfdCBvbGRpbnRyOworICAgIGludCBvaW50ZXI7CisgICAgY2hhciAqY3A7Cisg ICAgc2lndHlwZSBtY2FuY2VsKCk7CisKKyAgICBpZiAoYXJnYyA8IDIgJiYgIWFub3RoZXIoJmFy Z2MsICZhcmd2LCAicmVtb3RlLWZpbGVzIikpIHsKKyAgICAgICAgcHJpbnRmKCJ1c2FnZTogJXMg cmVtb3RlLWZpbGVzXG4iLCBhcmd2WzBdKTsKKyAgICAgICAgZnRwY29kZSA9IC0xOworICAgICAg ICByZXR1cm4oLTEpOworICAgIH0KKyAgICBtbmFtZSA9IGFyZ3ZbMF07CisgICAgbWZsYWcgPSAx OworICAgIG9sZGludHIgPSBzaWduYWwoU0lHSU5ULCBtY2FuY2VsKTsKKyAgICAvKiBSZXBsYWNl IHdpdGggY2FsbHMgdG8gY2NfZXhlY3V0ZSgpICovCisgICAgc2V0am1wKGpjYW5jZWwpOworICAg IHdoaWxlICgoY3AgPSByZW1nbG9iKGFyZ3YsMCkpICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKCpj cCA9PSAnXDAnKSB7CisgICAgICAgICAgICBtZmxhZyA9IDA7CisgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWZsYWcgJiYgY29uZmlybShhcmd2WzBdLCBjcCkp IHsKKyAgICAgICAgICAgIHJjID0gKGZ0cGNtZCgiREVMRSIsY3AsLTEsLTEsZnRwX3ZibSkgPT0g UkVQTFlfQ09NUExFVEUpOworICAgICAgICAgICAgaWYgKCFtZmxhZyAmJiBmcm9tYXR0eSkgewor ICAgICAgICAgICAgICAgIG9pbnRlciA9IGludGVyYWN0aXZlOworICAgICAgICAgICAgICAgIGlu dGVyYWN0aXZlID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoY29uZmlybSgiQ29udGludWUgd2l0 aCIsICJtZGVsZXRlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgbWZsYWcrKzsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSBvaW50ZXI7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgc2lnbmFsKFNJR0lOVCwgb2xkaW50cik7Cisg ICAgbWZsYWcgPSAwOworICAgIHJldHVybihyYyk7Cit9CisKKy8qIEdldCBhIGRpcmVjdG9yeSBs aXN0aW5nIG9mIG11bHRpcGxlIHJlbW90ZSBmaWxlcyAqLworCitzdGF0aWMgaW50CittbHMoYXJn YywgYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OyB7CisgICAgc2lnX3Qgb2xkaW50cjsKKyAg ICBpbnQgb2ludGVyLCBpOworICAgIGNoYXIgKmNtZCwgbW9kZVsxXSwgKmRlc3Q7CisgICAgc2ln dHlwZSBtY2FuY2VsKCk7CisgICAgaW50IHJjID0gLTE7CisKKyAgICBpZiAoYXJnYyA8IDIgJiYg IWFub3RoZXIoJmFyZ2MsICZhcmd2LCAicmVtb3RlLWZpbGVzIikpCisgICAgICBnb3RvIHVzYWdl OworICAgIGlmIChhcmdjIDwgMyAmJiAhYW5vdGhlcigmYXJnYywgJmFyZ3YsICJsb2NhbC1maWxl IikpIHsKKyAgICAgIHVzYWdlOgorICAgICAgICBwcmludGYoInVzYWdlOiAlcyByZW1vdGUtZmls ZXMgbG9jYWwtZmlsZVxuIiwgYXJndlswXSk7CisgICAgICAgIGZ0cGNvZGUgPSAtMTsKKyAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZGVzdCA9IGFyZ3ZbYXJnYyAtIDFdOworICAgIGFy Z3ZbYXJnYyAtIDFdID0gTlVMTDsKKyAgICBpZiAoc3RyY21wKGRlc3QsICItIikgJiYgKmRlc3Qg IT0gJ3wnKQorICAgICAgaWYgKCFnbG9idWxpemUoJmRlc3QpIHx8CisgICAgICAgICAgIWNvbmZp cm0oIm91dHB1dCB0byBsb2NhbC1maWxlOiIsIGRlc3QpKSB7CisgICAgICAgICAgZnRwY29kZSA9 IC0xOworICAgICAgICAgIHJldHVybigtMSk7CisgICAgICB9CisgICAgY21kID0gYXJndlswXVsx XSA9PSAnbCcgPyAiTkxTVCIgOiAiTElTVCI7CisgICAgbW5hbWUgPSBhcmd2WzBdOworICAgIG1m bGFnID0gMTsKKyAgICBvbGRpbnRyID0gc2lnbmFsKFNJR0lOVCwgbWNhbmNlbCk7CisgICAgLyog UmVwbGFjZSB3aXRoIGNhbGxzIHRvIGNjX2V4ZWN1dGUoKSAqLworICAgIHNldGptcChqY2FuY2Vs KTsKKyAgICBmb3IgKGkgPSAxOyBtZmxhZyAmJiBpIDwgYXJnYy0xOyArK2kpIHsKKyAgICAgICAg Km1vZGUgPSAoaSA9PSAxKSA/ICd3JyA6ICdhJzsKKyAgICAgICAgcmMgPSByZWN2cmVxdWVzdChj bWQsIGRlc3QsIGFyZ3ZbaV0sIG1vZGUsIDAsMCxOVUxMLDAsMCwwKTsKKyAgICAgICAgaWYgKCFt ZmxhZyAmJiBmcm9tYXR0eSkgeworICAgICAgICAgICAgb2ludGVyID0gaW50ZXJhY3RpdmU7Cisg ICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IDE7CisgICAgICAgICAgICBpZiAoY29uZmlybSgiQ29u dGludWUgd2l0aCIsIGFyZ3ZbMF0pKSB7CisgICAgICAgICAgICAgICAgbWZsYWcgKys7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpbnRlcmFjdGl2ZSA9IG9pbnRlcjsKKyAgICAgICAgfQor ICAgIH0KKyAgICBzaWduYWwoU0lHSU5ULCBvbGRpbnRyKTsKKyAgICBtZmxhZyA9IDA7CisgICAg cmV0dXJuKHJjKTsKK30KKworc3RhdGljIGNoYXIgKgorcmVtZ2xvYihhcmd2LGRvc3dpdGNoKSBj aGFyICphcmd2W107IGludCBkb3N3aXRjaDsgeworICAgIGNoYXIgdGVtcFsxNl07CisgICAgc3Rh dGljIGNoYXIgYnVmW0NLTUFYUEFUSF07CisgICAgc3RhdGljIEZJTEUgKmZ0ZW1wID0gTlVMTDsK KyAgICBzdGF0aWMgY2hhciAqKmFyZ3M7CisgICAgaW50IG9sZGhhc2g7CisgICAgY2hhciAqY3As ICptb2RlOworCisgICAgaWYgKCFtZmxhZykgeworICAgICAgICBpZiAoIWRvZ2xvYikgeworICAg ICAgICAgICAgYXJncyA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo ZnRlbXApIHsKKyAgICAgICAgICAgICAgICAodm9pZCkgZmNsb3NlKGZ0ZW1wKTsKKyAgICAgICAg ICAgICAgICBmdGVtcCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoIWRvZ2xvYikgeworICAgICAgICBpZiAoYXJn cyA9PSBOVUxMKQorICAgICAgICAgIGFyZ3MgPSBhcmd2OworICAgICAgICBpZiAoKGNwID0gKisr YXJncykgPT0gTlVMTCkKKyAgICAgICAgICBhcmdzID0gTlVMTDsKKyAgICAgICAgcmV0dXJuKGNw KTsKKyAgICB9CisgICAgaWYgKGZ0ZW1wID09IE5VTEwpIHsKKyAgICAgICAgKHZvaWQpIHN0cmNw eSh0ZW1wLCBfUEFUSF9UTVApOworI2lmZGVmIE1LVEVNUAorI2lmbmRlZiBNS1NURU1QCisgICAg ICAgICh2b2lkKSBta3RlbXAodGVtcCk7CisjZW5kaWYgLyogTUtTVEVNUCAqLworI2VuZGlmIC8q IE1LVEVNUCAqLworICAgICAgICB2ZXJib3NlID0gMDsKKyAgICAgICAgb2xkaGFzaCA9IGhhc2gs IGhhc2ggPSAwOworI2lmZGVmIEZUUF9QUk9YWQorICAgICAgICBpZiAoZG9zd2l0Y2gpIHsKKyAg ICAgICAgICAgIHBzd2l0Y2goIXByb3h5KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEZUUF9QUk9Y WSAqLworICAgICAgICBmb3IgKG1vZGUgPSAid2IiOyAqKythcmd2ICE9IE5VTEw7IG1vZGUgPSAi YWIiKQorICAgICAgICAgIHJlY3ZyZXF1ZXN0ICgiTkxTVCIsIHRlbXAsICphcmd2LCBtb2RlLCAw KTsKKyNpZmRlZiBGVFBfUFJPWFkKKyAgICAgICAgaWYgKGRvc3dpdGNoKSB7CisgICAgICAgICAg ICBwc3dpdGNoKCFwcm94eSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBGVFBfUFJPWFkgKi8KKyAg ICAgICAgaGFzaCA9IG9sZGhhc2g7CisgICAgICAgIGZ0ZW1wID0gZm9wZW4odGVtcCwgInIiKTsK KyAgICAgICAgdW5saW5rKHRlbXApOworICAgICAgICBpZiAoZnRlbXAgPT0gTlVMTCAmJiAoIWRw eWFjdGl2ZSB8fCBmdHBfZGViKSkgeworICAgICAgICAgICAgcHJpbnRmKCJDYW4ndCBmaW5kIGxp c3Qgb2YgcmVtb3RlIGZpbGVzLCBvb3BzXG4iKTsKKyAgICAgICAgICAgIHJldHVybihOVUxMKTsK KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmdldHMoYnVmLCBDS01BWFBBVEgsIGZ0ZW1wKSA9 PSBOVUxMKSB7CisgICAgICAgIGZjbG9zZShmdGVtcCksIGZ0ZW1wID0gTlVMTDsKKyAgICAgICAg cmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoKGNwID0gY2tzdHJjaHIoYnVmLCdcbicpKSAh PSBOVUxMKQorICAgICAgKmNwID0gJ1wwJzsKKyAgICByZXR1cm4oYnVmKTsKK30KKyNlbmRpZiAv KiBOT1RfVVNFRCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAodG9wIG9mIGZpbGUpICovCisjZW5k aWYgLyogU1lTRlRQICh0b3Agb2YgZmlsZSkgKi8KKyNlbmRpZiAvKiBOT0ZUUCAodG9wIG9mIGZp bGUpICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja2NrZXIuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tja2Vy LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwZjY2NgotLS0gL2Rldi9u dWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tja2VyLmgK QEAgLTAsMCArMSwxNDI1IEBACisvKiBja2NrZXIuaCAtLSBTeW1ib2wgYW5kIG1hY3JvIGRlZmlu aXRpb25zIGZvciBDLUtlcm1pdCAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZk Y0Bjb2x1bWJpYS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0 aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5 LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3 IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlO Ry5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9k dWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKyNpZm5kZWYgQ0tDS0VS X0gKKyNkZWZpbmUgQ0tDS0VSX0gKKworI2RlZmluZSBJX0FNX0tFUk1JVCAgMAkJCS8qIFBlcnNv bmFsaXRpZXMgKi8KKyNkZWZpbmUgSV9BTV9URUxORVQgIDEKKyNkZWZpbmUgSV9BTV9STE9HSU4g IDIKKyNkZWZpbmUgSV9BTV9JS1NEICAgIDMKKyNkZWZpbmUgSV9BTV9GVFAgICAgIDQKKyNkZWZp bmUgSV9BTV9IVFRQICAgIDUKKyNkZWZpbmUgSV9BTV9TU0hTVUIgIDYKKyNkZWZpbmUgSV9BTV9T U0ggICAgIDcKKworI2lmbmRlZiBOT1NUUkVBTUlORworI2lmbmRlZiBTVFJFQU1JTkcKKyNkZWZp bmUgU1RSRUFNSU5HCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisjZW5kaWYgLyogTk9TVFJFQU1J TkcgKi8KKy8qCisgIElmIE5FV0RFRkFVTFRTIGlzIGRlZmluZWQgdGhlbjoKKyAgIC0gUkVDRUlW RSBQQUNLRVQtTEVOR1RIIGlzIDQwOTUgcmF0aGVyIHRoYW4gOTAKKyAgIC0gV0lORE9XIGlzIDMw IHJhdGhlciB0aGFuIDEKKyAgIC0gQkxPQ0stQ0hFQ0sgaXMgMyByYXRoZXIgdGhhbiAxCisgICAt IEZJTEUgVFlQRSBpcyBCSU5BUlkgcmF0aGVyIHRoYW4gVEVYVAorKi8KKyNpZmRlZiBCSUdCVUZP SwkJCQkvKiAod2FzIE9TMikgKi8KKyNpZm5kZWYgTkVXREVGQVVMVFMKKyNkZWZpbmUgTkVXREVG QVVMVFMKKyNlbmRpZiAvKiBORVdERUZBVUxUUyAqLworI2VuZGlmIC8qIEJJR0JVRk9LICovCisK KyNpZmRlZiBOT0lDUAkJCQkvKiBObyBJbnRlcmFjdGl2ZSBDb21tYW5kIFBhcnNlciAqLworI2lm bmRlZiBOT1NQTAkJCQkvKiBpbXBsaWVzLi4uICovCisjZGVmaW5lIE5PU1BMCQkJCS8qIE5vIFNj cmlwdCBQcm9ncmFtbWluZyBMYW5ndWFnZSAqLworI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVm IE5PQ1NFVFMJCQkJLyogTm8gY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBO T0NTRVRTCQkJCS8qIGJlY2F1c2UgdGhlIG9ubHkgd2F5IHRvIHNldCBpdCB1cCAqLworI2VuZGlm IC8qIE5PQ1NFVFMgKi8JCQkvKiBpcyB3aXRoIGludGVyYWN0aXZlIGNvbW1hbmRzICovCisjZW5k aWYgLyogTk9JQ1AgKi8KKworI2lmZGVmIHBkcDExCQkJCS8qIFRoZXJlIGlzIGEgbWF4aW11bSBu dW1iZXIgb2YgKi8KKyNpZm5kZWYgTk9DS1NQRUVECQkJLyogb2YgLUQncyBhbGxvd2VkIG9uIHRo ZSBDQyAqLworI2RlZmluZSBOT0NLU1BFRUQJCQkvKiBjb21tYW5kIGxpbmUsIHNvIHNvbWUgb2Yg dGhlbSAqLworI2VuZGlmIC8qIE5PQ0tTUEVFRCAqLwkJCS8qIGhhdmUgdG8gZ28gaGVyZS4uLiAq LworI2lmbmRlZiBOT1JFRElSRUNUCisjZGVmaW5lIE5PUkVESVJFQ1QKKyNlbmRpZiAvKiBOT1JF RElSRUNUICovCisjaWZkZWYgV0hBVEFNSQorI3VuZGVmIFdIQVRBTUkKKyNlbmRpZiAvKiBXSEFU QU1JICovCisjZW5kaWYgLyogcGRwMTEgKi8KKworI2lmZGVmIFVJREJVRkxFTgorI2RlZmluZSBM T0dJTkxFTiBVSURCVUZMRU4KKyNlbHNlCisjZGVmaW5lIExPR0lOTEVOIDMyCQkJLyogTGVuZ3Ro IG9mIHNlcnZlciBsb2dpbiBmaWVsZCAqLworI2VuZGlmIC8qIFVJREJVRkxFTiAqLworCisvKiBC ZWxsIHZhbHVlcyAqLworCisjZGVmaW5lIFhZQl9OT05FICAwCQkJLyogTm8gYmVsbCAqLworI2Rl ZmluZSBYWUJfQVVEICAgMQkJCS8qIEF1ZGlibGUgYmVsbCAqLworI2RlZmluZSBYWUJfVklTICAg MgkJCS8qIFZpc2libGUgYmVsbCAqLworI2RlZmluZSBYWUJfQkVFUCAgMAkJCS8qIEF1ZGlibGUg QmVlcCAqLworI2RlZmluZSBYWUJfU1lTICAgNAkJCS8qIEF1ZGlibGUgU3lzdGVtIFNvdW5kcyAq LworCisvKiBGaWxlIHN0YXR1cyBiaXRzICovCisKKyNkZWZpbmUgRlNfT0sgICAxCQkJLyogRmls ZSB0cmFuc2ZlcnJlZCBPSyAqLworI2RlZmluZSBGU19SRUZVIDIJCQkvKiBGaWxlIHdhcyByZWZ1 c2VkICovCisjZGVmaW5lIEZTX0RJU0MgNAkJCS8qIEZpbGUgd2FzIGRpc2NhcmRlZCAqLworI2Rl ZmluZSBGU19JTlRSIDgJCQkvKiBUcmFuc2ZlciB3YXMgaW50ZXJydXB0ZWQgYnkgdXNlciAqLwor I2RlZmluZSBGU19FUlIgIDE2CQkJLyogRmF0YWwgZXJyb3IgZHVyaW5nIHRyYW5zZmVyICovCisK Ky8qIENvbnRyb2wtY2hhcmFjdGVyICh1bilwcmVmaXhpbmcgb3B0aW9ucyAqLworCisjZGVmaW5l IFBYX0FMTCAgMAkJCS8qIFByZWZpeCBhbGwgY29udHJvbCBjaGFycyAqLworI2RlZmluZSBQWF9D QVUgIDEJCQkvKiBVbnByZWZpeCBjYXV0aW91c2x5ICovCisjZGVmaW5lIFBYX1dJTCAgMgkJCS8q IFVucHJlZml4IHdpdGggd2lsZCBhYmFuZG9uICovCisjZGVmaW5lIFBYX05PTiAgMwkJCS8qIFVu cHJlZml4IGFsbCAoPSBwcmVmaXggbm9uZSkgKi8KKworLyogRGVzdGluYXRpb24gY29kZXMgKi8K KworI2RlZmluZSAgREVTVF9EIDAJLyogIERJU0sgKi8KKyNkZWZpbmUgIERFU1RfUyAxCS8qICBT Q1JFRU4gKi8KKyNkZWZpbmUgIERFU1RfUCAyCS8qICBQUklOVEVSICovCisjZGVmaW5lICBERVNU X04gMwkvKiAgTk9XSEVSRSAoY2FsaWJyYXRpb24gcnVuKSAqLworCisvKiBGaWxlIHRyYW5zZmVy IHByb3RvY29scyAqLworCisjZGVmaW5lICBQUk9UT19LICAgIDAJLyogICBLZXJtaXQgICAqLwor I2lmZGVmIENLX1hZWgorI2RlZmluZSAgUFJPVE9fWCAgICAxCS8qICAgWE1PREVNICAgICAqLwor I2RlZmluZSAgUFJPVE9fWEMgICAyCS8qICAgWE1PREVNLUNSQyAqLworI2RlZmluZSAgUFJPVE9f WSAgICAzCS8qICAgWU1PREVNICAgICAqLworI2RlZmluZSAgUFJPVE9fRyAgICA0CS8qICAgWU1P REVNLWcgKi8KKyNkZWZpbmUgIFBST1RPX1ogICAgNQkvKiAgIFpNT0RFTSAgICovCisjZGVmaW5l ICBQUk9UT19PICAgIDYgICAvKiAgIE9USEVSICAgICovCisjZGVmaW5lICBOUFJPVE9TICAgIDcg ICAvKiAgIEhvdyBtYW55ICovCisjZWxzZQorI2RlZmluZSAgTlBST1RPUyAgICAxICAgLyogICBI b3cgbWFueSAqLworI2VuZGlmIC8qIENLX1hZWiAqLworCitzdHJ1Y3QgY2tfcCB7CQkJCS8qIEMt S2VybWl0IFByb3RvY29sIGluZm8gc3RydWN0dXJlICovCisgICAgY2hhciAqIHBfbmFtZTsJCQkv KiBQcm90b2NvbCBuYW1lICovCisgICAgaW50IHJwa3RsZW47CQkJLyogUGFja2V0IGxlbmd0aCAt IHJlY2VpdmUgKi8KKyAgICBpbnQgc3BrdGxlbjsJCQkvKiBQYWNrZXQgbGVuZ3RoIC0gc2VuZCAq LworICAgIGludCBzcGt0ZmxnOwkJCS8qIC4uLiAqLworICAgIGludCB3aW5zaXplOwkJCS8qIFdp bmRvdyBzaXplICovCisgICAgaW50IHByZWZpeDsJCQkJLyogQ29udHJvbC1jaGFyIHByZWZpeGlu ZyBvcHRpb25zICovCisgICAgaW50IGZuY2E7CQkJCS8qIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rp b24gKi8KKyAgICBpbnQgZm5jbjsJCQkJLyogRmlsZW5hbWUgY29udmVyc2lvbiAqLworICAgIGlu dCBmbnNwOwkJCQkvKiBTZW5kIGZpbGVuYW1lIHBhdGggc3RyaXBwaW5nICovCisgICAgaW50IGZu cnA7CQkJCS8qIFJlY2VpdmUgZmlsZW5hbWUgcGF0aCBzdHJpcHBpbmcgKi8KKyAgICBjaGFyICog aF9iX2luaXQ7CQkvKiBIb3N0IHJlY2VpdmUgaW5pdGlhdGlvbiBzdHJpbmcgLSB0ZXh0ICAgKi8K KyAgICBjaGFyICogaF90X2luaXQ7CQkvKiBIb3N0IHJlY2VpdmUgaW5pdGlhdGlvbiBzdHJpbmcg LSBiaW5hcnkgKi8KKyAgICBjaGFyICogaF94X2luaXQ7CQkvKiBIb3N0IHNlcnZlciBzdHJpbmcg Ki8KKyAgICBjaGFyICogcF9iX3NjbWQ7CQkvKiBTRU5EIGNtZCBmb3IgZXh0ZXJuYWwgcHJvdG9j b2wgLSB0ZXh0ICAgKi8KKyAgICBjaGFyICogcF90X3NjbWQ7CQkvKiBTRU5EIGNtZCBmb3IgZXh0 ZXJuYWwgcHJvdG9jb2wgLSBiaW5hcnkgKi8KKyAgICBjaGFyICogcF9iX3JjbWQ7CQkvKiBSRUNW IGNtZCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgLSB0ZXh0ICAgKi8KKyAgICBjaGFyICogcF90X3Jj bWQ7CQkvKiBSRUNWIGNtZCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgLSBiaW5hcnkgKi8KK307CisK K3N0cnVjdCBmaWxlbGlzdCB7CQkJLyogU2VuZC1maWxlIGxpc3QgZWxlbWVudCAqLworICAgIGNo YXIgKiBmbF9uYW1lOwkJCS8qIEZpbGVuYW1lICovCisgICAgaW50IGZsX21vZGU7CQkJLyogVHJh bnNmZXIgbW9kZSAqLworICAgIGNoYXIgKiBmbF9hbGlhczsJCQkvKiBOYW1lIHRvIHNlbmQgdGhl IGZpbGUgdW5kZXIgKi8KKyAgICBzdHJ1Y3QgZmlsZWxpc3QgKiBmbF9uZXh0OwkJLyogUG9pbnRl ciB0byBuZXh0IGVsZW1lbnQgKi8KK307CisKKy8qIEtlcm1pdCBzeXN0ZW0gSURzIGFuZCBhc3Nv Y2lhdGVkIHByb3BlcnRpZXMuLi4gKi8KKworc3RydWN0IHN5c2RhdGEgeworICAgIGNoYXIgKnNp ZF9jb2RlOwkvKiBLZXJtaXQgc3lzdGVtIElEIGNvZGUgKi8KKyAgICBjaGFyICpzaWRfbmFtZTsJ LyogRGVzY3JpcHRpdmUgbmFtZSAqLworICAgIHNob3J0IHNpZF91bml4bGlrZTsJLyogVHJlZS1z dHJ1Y3R1cmVkIGRpcmVjdG9yeSB3aXRoIHNlcGFyYXRvcnMgKi8KKyAgICBjaGFyICBzaWRfZGly c2VwOwkvKiBEaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3RlciBpZiB1bml4bGlrZSAqLworICAg IHNob3J0IHNpZF9kZXY7CS8qIENhbiBzdGFydCB3aXRoIGRldjogKi8KKyAgICBzaG9ydCBzaWRf Y2FzZTsJLyogQml0IG1hcHBlZDogMSA9IGNhc2UgbWF0dGVycywgMiA9IGNhc2UgcHJlc2VydmVk ICovCisgICAgc2hvcnQgc2lkX3JlY2ZtOyAgICAvKiBUZXh0IHJlY29yZCBzZXBhcmF0b3IgKi8K Ky8qCisgICAwID0gdW5rbm93biBvciBub25zdHJlYW0KKyAgIDEgPSBjcgorICAgMiA9IGxmCisg ICAzID0gY3JsZgorKi8KK307CisKK3N0cnVjdCBzc2hfcGYgewkJCQkvKiBTU0ggcG9ydCBmb3J3 YXJkaW5nICovCisgICAgaW50ICAgIHAxOwkJCQkvKiBwb3J0IHRvIGJlIGZvcndhcmRlZCAqLwor ICAgIGNoYXIgKiBob3N0OwkJCS8qIGhvc3QgKi8KKyAgICBpbnQgICAgcDI7CQkJCS8qIHBvcnQg Ki8KK307CisKKyNkZWZpbmUgU0VUX09OICAgMQkvKiBHZW5lcmFsIHZhbHVlcyBmb3Igc2V0dGlu Z3MgdGhhdCBjYW4gYmUgT04gKi8KKyNkZWZpbmUgU0VUX09GRiAgMAkJCS8qIE9GRiwgKi8KKyNk ZWZpbmUgU0VUX0FVVE8gMgkJCS8qIG9yIEFVVE8gKi8KKworI2RlZmluZSBQQVRIX09GRiAwCS8q IFBhdGhuYW1lcyBvZmYgKHRvIGJlIHN0cmlwcGVkKSAqLworI2RlZmluZSBQQVRIX1JFTCAxICAg ICAgLyogUGF0aG5hbWVzIG9uLCBsZWZ0IHJlbGF0aXZlIGlmIHBvc3NpYmxlICovCisjZGVmaW5l IFBBVEhfQUJTIDIgICAgICAvKiBQYXRobmFtZXMgYWJzb2x1dGUgYWx3YXlzICovCisjZGVmaW5l IFBBVEhfQVVUTyA0CS8qIFBhdGhuYW1lcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgKi8KKworLyog R0VUIE9wdGlvbnMgKi8KKworI2RlZmluZSBHT1BUX0RFTCAxCQkJLyogRGVsZXRlIHNvdXJjZSBm aWxlICovCisjZGVmaW5lIEdPUFRfUkVDIDIJCQkvKiBSZWN1cnNpdmUgKi8KKyNkZWZpbmUgR09Q VF9SRVMgNAkJCS8qIFJlY292ZXIgKFJlc2VuZCkgKi8KKyNkZWZpbmUgR09QVF9DTUQgOAkJCS8q IEZpbGVuYW1lIGlzIGEgQ29tbWFuZCAqLworCisvKiBHRVQgVHJhbnNmZXIgTW9kZXMgKi8KKwor I2RlZmluZSBHTU9EX1RYVCAwCQkJLyogVGV4dCAqLworI2RlZmluZSBHTU9EX0JJTiAxCQkJLyog QmluYXJ5ICovCisjZGVmaW5lIEdNT0RfQVVUIDIJCQkvKiBBdXRvICovCisjZGVmaW5lIEdNT0Rf TEJMIDMJCQkvKiBMYWJlbGVkICovCisKKy8qIEdFVCBGaWxlbmFtZSBPcHRpb25zICovCisKKyNk ZWZpbmUgR05BTV9MSVQgMAkJCS8qIExpdGVyYWwgKi8KKyNkZWZpbmUgR05BTV9DTlYgMQkJCS8q IENvbnZlcnRlZCAqLworCisvKiBHRVQgUGF0aG5hbWUgT3B0aW9ucyAqLworCisjZGVmaW5lIEdQ VEhfT0ZGIDAJCQkvKiBQYXRobmFtZXMgT2ZmICovCisjZGVmaW5lIEdQVEhfUkVMIDEJCQkvKiBQ YXRobmFtZXMgUmVsYXRpdmUgKi8KKyNkZWZpbmUgR1BUSF9BQlggMgkJCS8qIFBhdGhuYW1lcyBB YnNvbHV0ZSAqLworCisjaWZuZGVmIE5PU1BMCisvKgorICBUaGUgSUYgUkVNT1RFLU9OTFkgY29t bWFuZCBpcyBhdmFpbGFibGUgb25seSBpbiB2ZXJzaW9ucworICB0aGF0IGFjdHVhbGx5IGNhbiBi ZSB1c2VkIGluIHJlbW90ZSBtb2RlLCBhbmQgb25seSBpZiB3ZSBoYXZlCisgIGFuIGludGVyYWN0 aXZlIGNvbW1hbmQgcGFyc2VyLgorKi8KKyNkZWZpbmUgQ0tfSUZSTworI2lmZGVmIE1BQworI3Vu ZGVmIENLX0lGUk8KKyNlbHNlCisjaWZkZWYgR0VNRE9TCisjdW5kZWYgQ0tfSUZSTworI2VuZGlm IC8qIEdFTURPUyAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKy8q IFN5c3RlbXMgd2hvc2UgQ09OTkVDVCBtb2R1bGVzIGNhbiBleGVjdXRlIEFwcGxpY2F0aW9uIFBy b2dyYW0gQ29tbWFuZHMgKi8KKworI2lmZGVmIE5PU1BMCQkJCS8qIFNjcmlwdCBwcm9ncmFtbWlu ZyBsYW5ndWFnZSAqLworI2lmZGVmIENLX0FQQwkJCQkvKiBpcyByZXF1aXJlZCBmb3IgQVBDLiAq LworI3VuZGVmIENLX0FQQworI2VuZGlmIC8qIENLX0FQQyAqLworI2lmbmRlZiBOT0FQQworI2Rl ZmluZSBOT0FQQworI2VuZGlmIC8qIE5PQVBDICovCisjaWZuZGVmIE5PQVVUT0RMCisjZGVmaW5l IE5PQVVUT0RMCisjZW5kaWYgLyogTk9BVVRPREwgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisj aWZuZGVmIE5PQVBDCQkJCS8qIFVubGVzcyB0aGV5IHNhaWQgTk8gQVBDICovCisjaWZuZGVmIENL X0FQQwkJCQkvKiBBbmQgdGhleSBkaWRuJ3QgYWxyZWFkeSBkZWZpbmUgaXQgKi8KKyNpZmRlZiBP UzIJCQkJLyogT1MvMiBnZXRzIGl0ICovCisjZGVmaW5lIENLX0FQQworI2VuZGlmIC8qIE9TMiAq LworI2lmZGVmIFVOSVgJCQkJLyogVU5JWCBnZXRzIGl0ICovCisjZGVmaW5lIENLX0FQQworI2Vu ZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBWTVMJCQkJLyogVk1TIHRvbyAqLworI2RlZmluZSBDS19B UEMKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNlbmRpZiAvKiBOT0FQ QyAqLworCisjaWZkZWYgQ0tfQVBDCQkJCS8qIEFQQyBidWZmZXIgbGVuZ3RoICovCisjaWZuZGVm IEFQQ0JVRkxFTgkJCS8qIFNob3VsZCBiZSBubyBiaWdnZXIgdGhhbiAqLworI2lmZGVmIE5PU1BM CQkJCS8qIGNvbW1hbmQgYnVmZmVyIGxlbmd0aCAqLworI2RlZmluZSBBUENCVUZMRU4gNjA4CQkJ LyogKHNlZSBja3VjbWQuaCkgYnV0IHdlIGNhbid0ICovCisjZWxzZQkJCQkJLyogcmVmZXJlbmNl IGNrdWNtZC5oIHN5bWJvbHMgaGVyZSAqLworI2RlZmluZSBBUENCVUZMRU4gNDA5NgorI2VuZGlm IC8qIE5PU1BMICovCisjZW5kaWYgLyogQVBDQlVGTEVOICovCisjZGVmaW5lIEFQQ19PRkYgICAw CS8qIEFQQyBPRkYgKGRpc2FibGVkKSAqLworI2RlZmluZSBBUENfT04gICAgMQkvKiBBUEMgT04g KGVuYWJsZWQgZm9yIG5vbi1kYW5nZXJvdXMgY29tbWFuZHMpICovCisjZGVmaW5lIEFQQ19VTkNI ICAyCS8qIEFQQyBVTkNIRUNLRUQgKGVuYWJsZWQgZm9yIEFMTCBjb21tYW5kcykgYml0bWFzayAq LworI2RlZmluZSBBUENfTk9JTlAgNCAgICAgLyogQVBDIChlbmFibGVkIHdpdGggbm8gaW5wdXQg YWxsb3dlZCAtIGJpdG1hc2spICovCisjZGVmaW5lIEFQQ19JTkFDVElWRSAwCS8qIEFQQyBub3Qg aW4gdXNlICovCisjZGVmaW5lIEFQQ19SRU1PVEUgICAxCS8qIEFQQyBpbiB1c2UgZnJvbSBSZW1v dGUgKi8KKyNkZWZpbmUgQVBDX0xPQ0FMICAgIDIJLyogQVBDIGJlaW5nIHVzZWQgZnJvbSB3aXRo aW4gS2VybWl0ICovCisjaWZuZGVmIE5PQVVUT0RMCisjaWZuZGVmIENLX0FVVE9ETAkvKiBBdXRv ZG93bmxvYWQgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0tfQVVUT0RMCisjZWxzZQorI2lmZGVm IFVOSVgKKyNkZWZpbmUgQ0tfQVVUT0RMCisjZWxzZQorI2lmZGVmIFZNUworI2RlZmluZSBDS19B VVRPREwKKyNlbHNlCisjaWZkZWYgQ0tfQVVUT0RMCisjdW5kZWYgQ0tfQVVUT0RMCisjZW5kaWYg LyogQ0tfQVVUT0RMICAqLworI2VuZGlmIC8qIE5PQVVUT0RMICovCisjZW5kaWYgLyogVk1TICov CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX0FVVE9E TCAqLworCisjZWxzZSAgLyogQ0tfQVBDIG5vdCBkZWZpbmVkICovCisKKyNpZmRlZiBOT0lDUAor I2lmZGVmIFVOSVgKKyNpZm5kZWYgQ0tfQVVUT0RMCisjZGVmaW5lIENLX0FVVE9ETAorI2VuZGlm IC8qIENLX0FVVE9ETCAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbHNlICAvKiBOb3QgTk9JQ1Au Li4gKi8KKyNpZmRlZiBDS19BVVRPREwKKyN1bmRlZiBDS19BVVRPREwKKyNlbmRpZiAvKiBDS19B VVRPREwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZk ZWYgTk9BVVRPREwKKyNpZmRlZiBDS19BVVRPREwKKyN1bmRlZiBDS19BVVRPREwKKyNlbmRpZiAv KiBDS19BVVRPREwgKi8KKyNlbmRpZiAvKiBOT0FVVE9ETCAqLworCisvKiBDb2RlcyBmb3Igd2hh dCB3ZSBhcmUgZG9pbmcgbm93IC0gYml0IG1hc2sgdmFsdWVzICovCisKKyNkZWZpbmUgV19OT1RI SU5HICAgIDAJCQkvKiBOb3RoaW5nICovCisjZGVmaW5lIFdfSU5JVCAgICAgICAxCQkJLyogSW5p dGlhbGl6aW5nIHByb3RvY29sICovCisjZGVmaW5lIFdfU0VORCAgICAgICAyCQkJLyogU0VORGlu ZyBvciBNQUlMaW5nICovCisjZGVmaW5lIFdfUkVDViAgICAgICA0CQkJLyogUkVDRUlWRWluZyBv ciBHRVR0aW5nICovCisjZGVmaW5lIFdfUkVNTyAgICAgICA4CQkJLyogRG9pbmcgYSBSRU1PVEUg Y29tbWFuZCAqLworI2RlZmluZSBXX0NPTk5FQ1QgICAxNgkJCS8qIENPTk5FQ1QgbW9kZSAqLwor I2RlZmluZSBXX0NPTU1BTkQgICAzMgkJCS8qIENvbW1hbmQgbW9kZSAqLworI2RlZmluZSBXX0RJ QUxJTkcgICA2NAkJCS8qIERpYWxpbmcgYSBtb2RlbSAqLworI2RlZmluZSBXX0ZUUCAgICAgIDEy OAkJCS8qIEZUUCAqLworI2RlZmluZSBXX0ZUX0RFTEUgICA2NAkJCS8qIEZUUCBNREVMRVRFICov CisjZGVmaW5lIFdfS0VSTUlUIChXX0lOSVR8V19TRU5EfFdfUkVDVnxXX1JFTU8pIC8qIEtlcm1p dCBwcm90b2NvbCAqLworI2RlZmluZSBXX1hGRVIgKFdfSU5JVHxXX1NFTkR8V19SRUNWfFdfUkVN T3xXX0ZUUCkgLyogRmlsZSB4ZmVyIGFueSBwcm90b2NvbCAqLworCisjaWZuZGVmIE5PV0hBVEFN SQorI2lmbmRlZiBXSEFUQU1JCisjZGVmaW5lIFdIQVRBTUkKKyNlbmRpZiAvKiBXSEFUQU1JICov CisjZW5kaWYgLyogTk9XSEFUQU1JICovCisKKyNpZmRlZiBXSEFUQU1JCQkJCS8qIEJpdCBtYXNr IHBvc2l0aW9ucyBmb3IgV0hBVEFNSSAqLworI2RlZmluZSBXTUlfU0VSVkUgICAxCQkJLyogU2Vy dmVyIG1vZGUgKi8KKyNkZWZpbmUgV01JX0ZNT0RFICAgMgkJCS8qIEZpbGUgdHJhbnNmZXIgbW9k ZSAqLworI2RlZmluZSBXTUlfRk5BTUUgICA0CQkJLyogRmlsZSBuYW1lIGNvbnZlcnNpb24gKi8K KyNkZWZpbmUgV01JX1NUUkVBTSAgOAkJCS8qIEkgaGF2ZSBhIHJlbGlhYmxlIHRyYW5zcG9ydCAq LworI2RlZmluZSBXTUlfQ0xFQVIgIDE2CQkJLyogSSBoYXZlIGEgY2xlYXIgY2hhbm5lbCAqLwor I2RlZmluZSBXTUlfRkxBRyAgIDMyCQkJLyogRmxhZyB0aGF0IFdIQVRBTUkgZmllbGQgaXMgdmFs aWQgKi8KKy8qIFdIQVRBTUkyIGJpdHMuLi4gKi8KKyNkZWZpbmUgV01JMl9YTU9ERSAgMQkJCS8q IFRyYW5zZmVyIG1vZGUgYXV0bygwKS9tYW51YWwoMSkgKi8KKyNkZWZpbmUgV01JMl9SRUNVICAg MgkJCS8qIFRyYW5zZmVyIGlzIHJlY3Vyc2l2ZSAqLworI2RlZmluZSBXTUkyX0ZMQUcgIDMyCQkJ LyogRmxhZyB0aGF0IFdIQVRBTUkyIGZpZWxkIGlzIHZhbGlkICovCisjZW5kaWYgLyogV0hBVEFN SSAqLworCisvKiBUZXJtaW5hbCB0eXBlcyAqLworI2RlZmluZSBWVDEwMCAgICAgMAkJCS8qIEFs c28gZm9yIFZUNTIgbW9kZSAqLworI2RlZmluZSBURUtUUk9OSVggMQorCisvKiBOb3JtYWwgcGFj a2V0IGFuZCB3aW5kb3cgc2l6ZSAqLworCisjZGVmaW5lIE1BWFBBQ0sgOTQJCQkvKiBNYXhpbXVt IHVuZXh0ZW5kZWQgcGFja2V0IHNpemUgKi8KKwkJCQkJLyogQ2FuJ3QgYmUgbW9yZSB0aGFuIDk0 LiAqLworI2lmZGVmIHBkcDExCQkJCS8qIE1heGltdW0gc2xpZGluZyB3aW5kb3cgc2xvdHMgKi8K KyNkZWZpbmUgTUFYV1MgIDgKKyNlbHNlCisjZGVmaW5lIE1BWFdTIDMyCQkJLyogQ2FuJ3QgYmUg bW9yZSB0aGFuIDMyLiAqLworI2VuZGlmIC8qIHBkcDExICovCisKKy8qIE1heGltdW0gbG9uZyBw YWNrZXQgc2l6ZSBmb3Igc2VuZGluZyBwYWNrZXRzICovCisvKiBPdmVycmlkZSB0aGVzZSBmcm9t IGNjIGNvbW1hbmQgbGluZSB2aWEgLURNQVhTUD1ubm4gKi8KKworI2lmZGVmIElSSVgJCQkJLyog SXJpeCA2LjQgYW5kIGVhcmxpZXIgaGFzICovCisjaWZuZGVmIE1BWFNQCQkJCS8qIFRlbG5ldCBz ZXJ2ZXIgYnVnICovCisjaWZkZWYgSVJJWDY1CisjZGVmaW5lIE1BWFNQIDkwMjQKKyNlbHNlCisj ZGVmaW5lIE1BWFNQIDQwMDAKKyNlbmRpZiAvKiBJUklYNjUgKi8KKyNlbmRpZiAvKiBNQVhTUCAq LworI2VuZGlmIC8qIElSSVggKi8KKworI2lmZGVmIERZTkFNSUMKKyNpZm5kZWYgTUFYU1AKKyNk ZWZpbmUgTUFYU1AgOTAyNAorI2VuZGlmIC8qIE1BWFNQICovCisjZWxzZSAgLyogbm90IERZTkFN SUMgKi8KKyNpZm5kZWYgTUFYU1AKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBNQVhTUCAxMDI0Cisj ZWxzZQorI2RlZmluZSBNQVhTUCAyMDQ4CisjZW5kaWYgLyogcGRwMTEgKi8KKyNlbmRpZiAvKiBN QVhTUCAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworLyogTWF4aW11bSBsb25nIHBhY2tldCBz aXplIGZvciByZWNlaXZpbmcgcGFja2V0cyAqLworLyogT3ZlcnJpZGUgdGhlc2UgZnJvbSBjYyBj b21tYW5kIGxpbmUgdmlhIC1ETUFYUlA9bm5uICovCisKKyNpZmRlZiBEWU5BTUlDCisjaWZuZGVm IE1BWFJQCisjZGVmaW5lIE1BWFJQIDkwMjQKKyNlbmRpZiAvKiBNQVhSUCAqLworI2Vsc2UgIC8q IG5vdCBEWU5BTUlDICovCisjaWZuZGVmIE1BWFJQCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgTUFY UlAgMTAyNAorI2Vsc2UKKyNkZWZpbmUgTUFYUlAgMjA0OAorI2VuZGlmIC8qIHBkcDExICovCisj ZW5kaWYgLyogTUFYUlAgKi8KKyNlbmRpZiAvKiBEWU5BTUlDICovCisvKgorICBEZWZhdWx0IHNp emVzIGZvciB3aW5kb3dlZCBwYWNrZXQgYnVmZmVycy4KKyAgT3ZlcnJpZGUgdGhlc2UgZnJvbSBj YyBjb21tYW5kIGxpbmUgdmlhIC1EU0JTSVo9bm5uLCAtRFJCU0laPW5ubi4KKyAgT3IganVzdCAt REJJR0JVRk9LLgorKi8KKyNpZm5kZWYgTUFYR0VUUEFUSAkJCS8qIE1heGltdW0gbnVtYmVyIG9m IGRpcmVjdG9yaWVzICovCisjaWZkZWYgQklHQlVGT0sJCQkJLyogZm9yIEdFVCBwYXRoLi4uICov CisjZGVmaW5lIE1BWEdFVFBBVEggMTI4CisjZWxzZQorI2RlZmluZSBNQVhHRVRQQVRIIDE2Cisj ZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBNQVhHRVRQQVRIICovCisKKyNpZm5kZWYg Tk9TUEwJCQkJLyogUXVlcnkgYnVmZmVyIGxlbmd0aCAqLworI2lmZGVmIE9TMgorI2RlZmluZSBR QlVGTCA0MDk1CisjZWxzZQorI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIFFCVUZMIDQwOTUKKyNl bHNlCisjZGVmaW5lIFFCVUZMIDEwMjMKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBEWU5BTUlDCisjaWZuZGVmIFNC U0laCisjaWZkZWYgQklHQlVGT0sJCQkJLyogSWYgYmlnIGJ1ZmZlcnMgYXJlIHNhZmUuLi4gKi8K KyNkZWZpbmUgU0JTSVogMjkwMDAwCQkJLyogQWxsb3cgZm9yIDEwIHggOTAyNCBvciAyMCB4IDQw OTYgKi8KKyNlbHNlCQkJCQkvKiBPdGhlcndpc2UuLi4gKi8KKyNpZmRlZiBwZHAxMQorI2RlZmlu ZSBTQlNJWiAzMDIwCisjZWxzZQorI2RlZmluZSBTQlNJWiA5MDUwCQkJLyogQWxsb3cgZm9yIDMg eCAzMDAwLCBldGMuICovCisjZW5kaWYgLyogcGRwMTEgKi8KKyNlbmRpZiAvKiBCSUdCVUZPSyAq LworI2VuZGlmIC8qIFNCU0laICovCisKKyNpZm5kZWYgUkJTSVoKKyNpZmRlZiBCSUdCVUZPSwor I2RlZmluZSBSQlNJWiAyOTAwMDAKKyNlbHNlCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgUkJTSVog MzAyMAorI2Vsc2UKKyNkZWZpbmUgUkJTSVogOTA1MAorI2VuZGlmIC8qIHBkcDExICovCisjZW5k aWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBSQlNJWiAqLworI2Vsc2UgIC8qIG5vdCBEWU5B TUlDICovCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgU0JTSVogMzAyMAorI2RlZmluZSBSQlNJWiAz MDIwCisjZWxzZQorI2lmbmRlZiBTQlNJWgorI2RlZmluZSBTQlNJWiAoTUFYU1AgKiAoTUFYV1Mg KyAxKSkKKyNlbmRpZiAvKiBTQlNJWiAqLworI2lmbmRlZiBSQlNJWgorI2RlZmluZSBSQlNJWiAo TUFYUlAgKiAoTUFYV1MgKyAxKSkKKyNlbmRpZiAvKiBSQlNJWiAqLworI2VuZGlmIC8qIHBkcDEx ICovCisjZW5kaWYgLyogRFlOQU1JQyAqLworCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgUEtU TVNHTEVOIDEwMjMKKyNlbHNlCisjZGVmaW5lIFBLVE1TR0xFTiA4MAorI2VuZGlmIC8qIEJJR0JV Rk9LICovCisKKy8qIEtlcm1pdCBwYXJhbWV0ZXJzIGFuZCBkZWZhdWx0cyAqLworCisjZGVmaW5l IENUTFEJICAgJyMnCQkJLyogQ29udHJvbCBjaGFyIHByZWZpeCBJIHdpbGwgdXNlICovCisjZGVm aW5lIE1ZRUJRCSAgICcmJwkJCS8qIDh0aC1CaXQgcHJlZml4IGNoYXIgSSB3aWxsIHVzZSAqLwor I2RlZmluZSBNWVJQVFEJICAgJ34nCQkJLyogUmVwZWF0IGNvdW50IHByZWZpeCBJIHdpbGwgdXNl ICovCisKKyNkZWZpbmUgTUFYVFJZCSAgICAxMAkJCS8qIFRpbWVzIHRvIHJldHJ5IGEgcGFja2V0 ICovCisjZGVmaW5lIE1ZUEFETgkgICAgMAkJCS8qIEhvdyBtYW55IHBhZGRpbmcgY2hhcnMgSSBu ZWVkICovCisjZGVmaW5lIE1ZUEFEQwkgICAgJ1wwJwkJLyogV2hpY2ggcGFkZGluZyBjaGFyYWN0 ZXIgSSBuZWVkICovCisKKyNkZWZpbmUgRE1ZVElNCSAgICA4CQkJLyogSW5pdGlhbCB0aW1lb3V0 IGludGVydmFsIHRvIHVzZS4gKi8KKyNkZWZpbmUgVVJUSU1FCSAgICAxNQkJCS8qIFRpbWVvdXQg aW50ZXJ2YWwgdG8gdXNlIG9uIG1lLiAqLworI2RlZmluZSBEU1JWVElNICAgICAwCQkJLyogRGVm YXVsdCBzZXJ2ZXIgY21kIHdhaXQgdGltZW91dC4gKi8KKworI2RlZmluZSBERUZUUk4JICAgIDAJ CQkvKiBEZWZhdWx0IGxpbmUgdHVybmFyb3VuZCBoYW5kc2hha2UgKi8KKworI2RlZmluZSBNWUVP TAkgICAgQ1IJCQkvKiBJbmNvbWluZyBwYWNrZXQgdGVybWluYXRvci4gKi8KKworI2lmZGVmIE5F V0RFRkFVTFRTCisjZGVmaW5lIERSUFNJWgkgIDQwOTUJCQkvKiBEZWZhdWx0IGluY29taW5nIHBh Y2tldCBzaXplLiAqLworI2RlZmluZSBERldTSVogICAgICAzMAkJCS8qIERlZmF1bHQgd2luZG93 IHNpemUgKi8KKyNkZWZpbmUgREZCQ1QgICAgICAgIDMJCQkvKiBEZWZhdWx0IGJsb2NrLWNoZWNr IHR5cGUgKi8KKyNlbHNlCisjZGVmaW5lIERSUFNJWgkgICAgOTAJCQkvKiBEZWZhdWx0IGluY29t aW5nIHBhY2tldCBzaXplLiAqLworI2RlZmluZSBERldTSVogICAgICAgMQkJCS8qIERlZmF1bHQg d2luZG93IHNpemUgKi8KKyNkZWZpbmUgREZCQ1QgICAgICAgIDMJCQkvKiBEZWZhdWx0IGJsb2Nr LWNoZWNrIHR5cGUgKi8KKyNlbmRpZiAvKiBORVdERUZBVUxUUyAqLworCisvKiBUaGUgSFAtVVgg NSBhbmQgNiBUZWxuZXQgc2VydmVycyBjYW4gb25seSBzd2FsbG93IDUxMyBieXRlcyBhdCBvbmNl ICovCisKKyNpZmRlZiBIUFVYNQorI2lmZGVmIERSUFNJWgorI3VuZGVmIERSUFNJWgorI2VuZGlm IC8qIERSUFNJWiAqLworI2RlZmluZSBEUlBTSVogNTAwCisjZWxzZQorI2lmZGVmIEhQVVg2Cisj aWZkZWYgRFJQU0laCisjdW5kZWYgRFJQU0laCisjZW5kaWYgLyogRFJQU0laICovCisjZGVmaW5l IERSUFNJWiA1MDAKKyNlbmRpZiAvKiBIUFVYNiAqLworI2VuZGlmIC8qIEhQVVg1ICovCisKKyNk ZWZpbmUgRFNQU0laCSAgICA5MAkJCS8qIERlZmF1bHQgb3V0Ym91bmQgcGFja2V0IHNpemUuICov CisjZGVmaW5lIERERUxBWSAgICAgIDEJCQkvKiBEZWZhdWx0IGRlbGF5LiAqLworI2RlZmluZSBE U1BFRUQJICAgIDk2MDAJCS8qIERlZmF1bHQgbGluZSBzcGVlZC4gKi8KKworI2lmZGVmIE9TMgkJ CQkvKiBEZWZhdWx0IENPTk5FQ1QtbW9kZSAqLworI2RlZmluZSBERkVTQyAyOQkJCS8qIGVzY2Fw ZSBjaGFyYWN0ZXIgKi8KKyNlbHNlCisjaWZkZWYgTkVYVAkJCQkvKiBDdHJsLV0gZm9yIFBDIGFu ZCBOZVhUICovCisjZGVmaW5lIERGRVNDIDI5CisjZWxzZQorI2lmZGVmIEdFTURPUwkJCQkvKiBB bmQgQXRhcmkgU1QgKi8KKyNkZWZpbmUgREZFU0MgMjkKKyNlbHNlCisjZGVmaW5lIERGRVNDIDI4 CQkJLyogQ3RybC1iYWNrc2xhc2ggZm9yIG90aGVycyAqLworI2VuZGlmIC8qIEdFTURPUyAqLwor I2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5PUFVTSAkJCQkv KiBOT1BVU0ggaW1wbGllcyBOT0pDICovCisjaWZuZGVmIE5PSkMJCQkJLyogKG5vIGpvYiBjb250 cm9sKSAqLworI2RlZmluZSBOT0pDCisjZW5kaWYgLyogTk9KQyAqLworI2VuZGlmIC8qIE5PUFVT SCAqLworCisjaWZkZWYgVU5JWAkJCQkvKiBEZWZhdWx0IGZvciBTRVQgU1VTUEVORCAqLworI2lm ZGVmIE5PSkMJCQkJLyogVU5JWCBidXQgam9iIGNvbnRyb2wgZGlzYWJsZWQgKi8KKyNkZWZpbmUg REZTVVNQICAgICAgMAorI2Vsc2UJCQkJCS8qIFVOSVgsIGpvYiBjb250cm9sIGVuYWJsZWQuICov CisjZGVmaW5lIERGU1VTUCAgICAgIDEKKyNlbmRpZiAvKiBOT0pDICovCisjZWxzZQorI2RlZmlu ZSBERlNVU1AgICAgICAwCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZuZGVmIERGQ0RNU0cKKyNp ZmRlZiBVTklYT1JPU0sKKyNkZWZpbmUgREZDRE1TRyAie3suLy5yZWFkbWV9e1JFQURNRS5UWFR9 e1JFQUQuTUV9fSIKKyNlbHNlCisjZGVmaW5lIERGQ0RNU0cgInt7UkVBRE1FLlRYVH17UkVBRC5N RX19IgorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2VuZGlmIC8qIERGQ0RNU0cgKi8KKworI2Rl ZmluZSBOU05ERVhDRVBUIDY0CQkvKiBNYXggcGF0dGVybnMgZm9yIC9FWENFUFQ6IGxpc3QgKi8K KworLyogRmlsZXMgKi8KKworI2RlZmluZSBaQ1RFUk0gICAgICAwCSAgICAJLyogQ29uc29sZSB0 ZXJtaW5hbCAqLworI2RlZmluZSBaU1RESU8gICAgICAxCQkvKiBTdGFuZGFyZCBpbnB1dC9vdXRw dXQgKi8KKyNkZWZpbmUgWklGSUxFCSAgICAyCQkvKiBDdXJyZW50IGlucHV0IGZpbGUgKFNFTkQs IGV0YykgKGluKSAqLworI2RlZmluZSBaT0ZJTEUgICAgICAzCSAgICAJLyogQ3VycmVudCBvdXRw dXQgZmlsZSAoUkVDRUlWRSwgR0VUKSAob3V0KSAqLworI2RlZmluZSBaREZJTEUgICAgICA0CSAg ICAJLyogQ3VycmVudCBkZWJ1Z2dpbmcgbG9nIGZpbGUgKG91dCkgKi8KKyNkZWZpbmUgWlRGSUxF ICAgICAgNQkgICAgCS8qIEN1cnJlbnQgdHJhbnNhY3Rpb24gbG9nIGZpbGUgKG91dCkgKi8KKyNk ZWZpbmUgWlBGSUxFICAgICAgNgkgICAgCS8qIEN1cnJlbnQgcGFja2V0IGxvZyBmaWxlIChvdXQp ICovCisjZGVmaW5lIFpTRklMRSAgICAgIDcJCS8qIEN1cnJlbnQgc2Vzc2lvbiBsb2cgZmlsZSAo b3V0KSAqLworI2RlZmluZSBaU1lTRk4JICAgIDgJCS8qIElucHV0L091dHB1dCBmcm9tIGEgc3lz dGVtIGZ1bmN0aW9uICovCisjZGVmaW5lIFpSRklMRSAgICAgIDkgICAgICAgICAgIC8qIExvY2Fs IGZpbGUgZm9yIFJFQUQgKGluKSAqLworI2RlZmluZSBaV0ZJTEUgICAgIDEwICAgICAgICAgICAv KiBMb2NhbCBmaWxlIGZvciBXUklURSAob3V0KSAqLworI2RlZmluZSBaTUZJTEUgICAgIDExCQkv KiBNaXNjZWxsYW5lb3VzIGZpbGUsIGUuZy4gZm9yIFhMQVRFICovCisjZGVmaW5lIFpESUZJTCAg ICAgMTIJCS8qIERJQUwgbG9nICovCisjZGVmaW5lIFpORklMUyAgICAgMTMJICAgIAkvKiBIb3cg bWFueSBkZWZpbmVkIGZpbGUgbnVtYmVycyAqLworCisjaWZkZWYgQ0tDSEFOTkVMSU8KKworLyog RmlsZSBtb2RlcyAqLworCisjZGVmaW5lIEZNX1JFQSAgICAgIDEJCQkvKiBSZWFkICovCisjZGVm aW5lIEZNX1dSSSAgICAgIDIJCQkvKiBXcml0ZSAqLworI2RlZmluZSBGTV9BUFAgICAgICA0CQkJ LyogQXBwZW5kICovCisjZGVmaW5lIEZNX1JXQSAgICAgIDcJCQkvKiBSZWFkL1dyaXRlL0FwcGVu ZCBtYXNrICovCisjZGVmaW5lIEZNX0JJTiAgICAgIDgJCQkvKiBCaW5hcnkgKi8KKyNkZWZpbmUg Rk1fUldCICAgICAxNQkJCS8qIFJlYWQvV3JpdGUvQXBwZW5kL0JpbmFyeSBtYXNrICovCisjZGVm aW5lIEZNX0NNRCAgICAgMTYJCQkvKiBDb21tYW5kICovCisjZGVmaW5lIEZNX0VPRiAgICAgNjQJ CQkvKiAoc3RhdHVzKSBBdCBFT0YgKi8KKworLyogRmlsZSBlcnJvcnMgKi8KKworI2RlZmluZSBG WF9ORVIgICAgICAwCQkJLyogTm8gZXJyb3IgKi8KKyNkZWZpbmUgRlhfU1lTICAgICAtMQkJCS8q IFN5c3RlbSBlcnJvciAqLworI2RlZmluZSBGWF9FT0YgICAgIC0yCQkJLyogRW5kIG9mIGZpbGUg Ki8KKyNkZWZpbmUgRlhfTk9QICAgICAtMwkJCS8qIENoYW5uZWwgbm90IG9wZW4gKi8KKyNkZWZp bmUgRlhfQ0hOICAgICAtNAkJCS8qIENoYW5uZWwgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lIEZY X1JORyAgICAgLTUJCQkvKiBBcmd1bWVudCByYW5nZSBlcnJvciAqLworI2RlZmluZSBGWF9GTkYg ICAgIC02CQkJLyogRmlsZSBub3QgZm91bmQgKi8KKyNkZWZpbmUgRlhfQkZOICAgICAtNwkJCS8q IEJhZCBvciBtaXNzaW5nIGZpbGVuYW1lICovCisjZGVmaW5lIEZYX05NRiAgICAgLTgJCQkvKiBO byBtb3JlIGZpbGVzICovCisjZGVmaW5lIEZYX0ZPUCAgICAgLTkJCQkvKiBGb3JiaWRkZW4gb3Bl cmF0aW9uICovCisjZGVmaW5lIEZYX0FDQyAgICAtMTAJCQkvKiBBY2Nlc3MgZGVuaWVkICovCisj ZGVmaW5lIEZYX0JPTSAgICAtMTEJCQkvKiBCYWQgY29tYmluYXRpb24gb2Ygb3BlbiBtb2RlcyAq LworI2RlZmluZSBGWF9PRkwgICAgLTEyCQkJLyogQnVmZmVyIG92ZXJmbG93ICovCisjZGVmaW5l IEZYX0xOVSAgICAtMTMJCQkvKiBDdXJyZW50IGxpbmUgbnVtYmVyIHVua25vd24gKi8KKyNkZWZp bmUgRlhfUk9PICAgIC0xNAkJCS8qIFNldCBSb290IHZpb2xhdGlvbiAqLworI2RlZmluZSBGWF9O WUkgICAgLTk5CQkJLyogRmVhdHVyZSBub3QgaW1wbGVtZW50ZWQgeWV0ICovCisjZGVmaW5lIEZY X1VOSyAgIC05OTkJCQkvKiBVbmtub3duIGVycm9yICovCisKK19QUk9UT1RZUCggaW50IHpfb3Bl biwgKGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgel9jbG9zZSwgKGludCkgKTsKK19Q Uk9UT1RZUCggaW50IHpfb3V0LCAoaW50LCBjaGFyICosIGludCwgaW50KSApOworX1BST1RPVFlQ KCBpbnQgel9pbiwgKGludCwgY2hhciAqLCBpbnQsIGludCwgaW50KSApOworX1BST1RPVFlQKCBp bnQgel9mbHVzaCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHpfc2VlaywgKGludCwgQ0tfT0ZG X1QpICk7CitfUFJPVE9UWVAoIGludCB6X2xpbmUsIChpbnQsIENLX09GRl9UKSApOworX1BST1RP VFlQKCBpbnQgel9nZXRtb2RlLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgel9nZXRmbnVtLCAo aW50KSApOworX1BST1RPVFlQKCBDS19PRkZfVCB6X2dldHBvcywgKGludCkgKTsKK19QUk9UT1RZ UCggQ0tfT0ZGX1Qgel9nZXRsaW5lLCAoaW50KSApOworX1BST1RPVFlQKCBDS19PRkZfVCB6X2Nv dW50LCAoaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiB6X2dldG5hbWUsIChpbnQpICk7 CitfUFJPVE9UWVAoIGNoYXIgKiBja2ZlcnJvciwgKGludCkgKTsKKyNlbmRpZiAvKiBDS0NIQU5O RUxJTyAqLworCitfUFJPVE9UWVAoIGludCBzY2FuZmlsZSwgKGNoYXIgKiwgaW50ICosIGludCkg KTsKK19QUk9UT1RZUCggaW50IHNjYW5zdHJpbmcsIChjaGFyICopICk7CisKKy8qICBCdWZmZXJl ZCBmaWxlIGkvbyAuLi4gICovCisjaWZkZWYgT1MyCQkJCS8qIEstOTUgKi8KKyNkZWZpbmUgSU5C VUZTSVpFIDMyNzY4CisjZGVmaW5lIE9CVUZTSVpFIDMyNzY4CisjZWxzZQorI2lmZGVmIHBkcDEx CisjZGVmaW5lIElOQlVGU0laRSA1MTIKKyNkZWZpbmUgT0JVRlNJWkUgNTEyCisjZWxzZQorLyog SW4gVk1TLCBhbGxvdyBmb3IgbG9uZ2VzdCBwb3NzaWJsZSBSTVMgcmVjb3JkICovCisjaWZkZWYg Vk1TCisjZGVmaW5lIElOQlVGU0laRSAzMjc2OAkJCS8qIEZpbGUgaW5wdXQgYnVmZmVyIHNpemUg Ki8KKyNkZWZpbmUgT0JVRlNJWkUgMzI3NjgJCQkvKiBGaWxlIG91dHB1dCBidWZmZXIgc2l6ZSAq LworI2Vsc2UgIC8qIE5vdCBWTVMgKi8KKyNpZmRlZiBTVFJBVFVTCisjaWZkZWYgRFlOQU1JQwor I2RlZmluZSBJTkJVRlNJWkUgMzI3NjcJCQkvKiBGaWxlIGlucHV0IGJ1ZmZlciBzaXplICovCisj ZGVmaW5lIE9CVUZTSVpFIDMyNzY3CQkJLyogRmlsZSBvdXRwdXQgYnVmZmVyIHNpemUgKi8KKyNl bHNlIC8qIFNUUkFUVVMsIG5vdCBEWU5BTUlDICovCisjZGVmaW5lIElOQlVGU0laRSA0MDk2CQkJ LyogRmlsZSBpbnB1dCBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBPQlVGU0laRSA0MDk2CQkJLyog RmlsZSBvdXRwdXQgYnVmZmVyIHNpemUgKi8KKyNlbmRpZiAvKiBEWU5BTUlDICovCisjZWxzZSAv KiBub3QgU1RSQVRVUyAqLworI2lmZGVmIEJJR0JVRk9LCQkJCS8qIFN5c3RlbXMgd2hlcmUgbWVt b3J5IGlzICovCisjZGVmaW5lIElOQlVGU0laRSAzMjc2OAkJCS8qIG5vdCBhIHByb2JsZW0uLi4g Ki8KKyNkZWZpbmUgT0JVRlNJWkUgMzI3NjgKKyNlbHNlIC8qIE5vdCBCSUdCVUZPSyAqLworI2Rl ZmluZSBJTkJVRlNJWkUgMTAyNAorI2RlZmluZSBPQlVGU0laRSAxMDI0CisjZW5kaWYgLyogQklH QlVGT0sgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYg LyogcGRwMTEgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworLyogRmlsZS10cmFuc2ZlciBjaGFyYWN0 ZXIgaW4vb3V0IG1hY3JvcyBmb3IgYnVmZmVyZWQgaS9vICovCisKKy8qIEdldCB0aGUgbmV4dCBm aWxlIGJ5dGUgKi8KKyNpZm5kZWYgQ0tDTUFJCisjaWZuZGVmIE5PWEZFUgorZXh0ZXJuIGNoYXIg Kiogc25kYXJyYXk7CisjZW5kaWYgLyogTk9YRkVSICovCisjZW5kaWYgLyogQ0tDTUFJICovCisj aWZkZWYgTk9TUEwKKyNkZWZpbmUgem1pbmNoYXIoKSAoKCgtLXppbmNudCk+PTApID8gKChpbnQp KCp6aW5wdHIrKykgJiAwMzc3KSA6IHppbmZpbGwoKSkKKyNlbHNlCisjaWZkZWYgTk9YRkVSCisj ZGVmaW5lIHptaW5jaGFyKCkgKCgoLS16aW5jbnQpPj0wKSA/ICgoaW50KSgqemlucHRyKyspICYg MDM3NykgOiB6aW5maWxsKCkpCisjZWxzZQorI2RlZmluZSB6bWluY2hhcigpIFwKKyhzbmRhcnJh eT9hZ25ieXRlKCk6KCgoLS16aW5jbnQpPj0wKSA/ICgoaW50KSgqemlucHRyKyspICYgMDM3Nykg OiB6aW5maWxsKCkpKQorI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIE5PU1BMICovCisK Ky8qIFN0dWZmIGEgY2hhcmFjdGVyIGludG8gdGhlIGlucHV0IGJ1ZmZlciAqLworI2RlZmluZSB6 bXN0dWZmKGMpIHppbnB0ci0tLCAqemlucHRyID0gYywgemluY250KysKKworLyogUHV0IGEgY2hh cmFjdGVyIHRvIGEgZmlsZSAqLworI2RlZmluZSB6bWNob3V0KGMpIFwKKygoKnpvdXRwdHIrKz0o Y2hhcikoYykpLCgoKCsrem91dGNudCk+PXpvYnVmc2l6ZSk/em91dGR1bXAoKTowKSkKKworLyog U2NyZWVuIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFhZRkRfTiAwCQkJLyogRmlsZSB0cmFuc2Zl ciBkaXNwbGF5OiBOb25lLCBPZmYgKi8KKyNkZWZpbmUgWFlGRF9SIDEJCQkvKiBSZWd1bGFyLCBE b3RzICovCisjZGVmaW5lIFhZRkRfQyAyCQkJLyogQ3Vyc29yLXBvc2l0aW9uaW5nIChlLmcuIGN1 cnNlcykgKi8KKyNkZWZpbmUgWFlGRF9TIDMJCQkvKiBDUlQgU2NyZWVuICovCisjZGVmaW5lIFhZ RkRfQiA0CQkJLyogQnJpZWYgKi8KKyNkZWZpbmUgWFlGRF9HIDUgICAgICAgICAgICAgICAgICAg ICAgICAvKiBHVUkgKi8KKworI2lmZGVmIE5PRElTUExBWQorI2RlZmluZSB4eHNjcmVlbihhLGIs YyxkKQorI2RlZmluZSBja3NjcmVlbihhLGIsYyxkKQorI2Vsc2UKK19QUk9UT1RZUCggVk9JRCBj a3NjcmVlbiwgKGludCwgY2hhciwgQ0tfT0ZGX1QsIGNoYXIgKikgKTsKKyNpZmRlZiBWTVMKKyNk ZWZpbmUgeHhzY3JlZW4oYSxiLGMsZCkgXAoraWYgKGxvY2FsICYmIGZkaXNwbGEgIT0gWFlGRF9O KSBcCitja3NjcmVlbigoaW50KWEsKGNoYXIpYiwoQ0tfT0ZGX1QpYywoY2hhciAqKWQpCisjZWxz ZQorI2RlZmluZSB4eHNjcmVlbihhLGIsYyxkKSBcCitpZiAobG9jYWwgJiYgIWJhY2tncmQgJiYg ZmRpc3BsYSAhPSBYWUZEX04pIFwKK2Nrc2NyZWVuKChpbnQpYSwoY2hhciliLChDS19PRkZfVClj LChjaGFyICopZCkKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBOT0RJU1BMQVkgKi8KKwor I2RlZmluZSBTQ1JfRk4gMSAgICAJLyogZmlsZW5hbWUgKi8KKyNkZWZpbmUgU0NSX0FOIDIgICAg CS8qIGFzLW5hbWUgKi8KKyNkZWZpbmUgU0NSX0ZTIDMgCS8qIGZpbGUtc2l6ZSAqLworI2RlZmlu ZSBTQ1JfWEQgNCAgICAJLyogeC1wYWNrZXQgZGF0YSAqLworI2RlZmluZSBTQ1JfU1QgNSAgICAg IAkvKiBGaWxlIHN0YXR1czogKi8KKyNkZWZpbmUgICBTVF9PSyAgIDAgICAJLyogIFRyYW5zZmVy cmVkIE9LICovCisjZGVmaW5lICAgU1RfRElTQyAxIAkvKiAgRGlzY2FyZGVkICovCisjZGVmaW5l ICAgU1RfSU5UICAyICAgICAvKiAgSW50ZXJydXB0ZWQgKi8KKyNkZWZpbmUgICBTVF9TS0lQIDMg CS8qICBTa2lwcGVkICovCisjZGVmaW5lICAgU1RfRVJSICA0IAkvKiAgRmF0YWwgRXJyb3IgKi8K KyNkZWZpbmUgICBTVF9SRUZVIDUgICAgIC8qICBSZWZ1c2VkICh1c2UgQXR0cmlidXRlIGNvZGVz IGZvciByZWFzb24pICovCisjZGVmaW5lICAgU1RfSU5DICA2CS8qICBJbmNvbXBsZXRlbHkgcmVj ZWl2ZWQgKi8KKyNkZWZpbmUgICBTVF9NU0cgIDcJLyogIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAq LworI2RlZmluZSAgIFNUX1NJTSAgOAkvKiAgVHJhbnNmZXIgc2ltdWxhdGVkIChlLmcuIHdvdWxk IGJlIHNlbnQpICovCisjZGVmaW5lIFNDUl9QTiA2ICAgIAkvKiBwYWNrZXQgbnVtYmVyICovCisj ZGVmaW5lIFNDUl9QVCA3ICAgIAkvKiBwYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCisjZGVm aW5lIFNDUl9UQyA4ICAgIAkvKiB0cmFuc2FjdGlvbiBjb21wbGV0ZSAqLworI2RlZmluZSBTQ1Jf RU0gOSAgICAJLyogZXJyb3IgbWVzc2FnZSAqLworI2RlZmluZSBTQ1JfV00gMTAgICAJLyogd2Fy bmluZyBtZXNzYWdlICovCisjZGVmaW5lIFNDUl9UVSAxMQkvKiBhcmJpdHJhcnkgdW5kZWxpbWl0 ZWQgdGV4dCAqLworI2RlZmluZSBTQ1JfVE4gMTIgICAJLyogYXJiaXRyYXJ5IG5ldyB0ZXh0LCBk ZWxpbWl0ZWQgYXQgYmVnaW5uaW5nICovCisjZGVmaW5lIFNDUl9UWiAxMyAgIAkvKiBhcmJpdHJh cnkgdGV4dCwgZGVsaW1pdGVkIGF0IGVuZCAqLworI2RlZmluZSBTQ1JfUUUgMTQJLyogcXVhbnRp dHkgZXF1YWxzIChlLmcuICJmb286IDciKSAqLworI2RlZmluZSBTQ1JfQ1cgMTUJLyogY2xvc2Ug c2NyZWVuIHdpbmRvdyAqLworI2RlZmluZSBTQ1JfQ0QgMTYgICAgICAgLyogZGlzcGxheSBjdXJy ZW50IGRpcmVjdG9yeSAqLworI2RlZmluZSBTQ1JfTVMgMTcJLyogbWVzc2FnZSBmcm9tIGNsaWVu dCAqLworCisvKiBTa2lwIHJlYXNvbnMgKi8KKworI2RlZmluZSBTS1BfREFUIDEJCQkvKiBEYXRl LVRpbWUgKE9sZGVyKSAqLworI2RlZmluZSBTS1BfRVFVIDIJCQkvKiBEYXRlLVRpbWUgKEVxdWFs KSAqLworI2RlZmluZSBTS1BfVFlQIDMJCQkvKiBUeXBlICovCisjZGVmaW5lIFNLUF9TSVogNAkJ CS8qIFNpemUgKi8KKyNkZWZpbmUgU0tQX05BTSA1CQkJLyogTmFtZSBjb2xsaXNpb24gKi8KKyNk ZWZpbmUgU0tQX0VYTCA2CQkJLyogRXhjZXB0aW9uIGxpc3QgKi8KKyNkZWZpbmUgU0tQX0RPVCA3 CQkJLyogRG90IGZpbGUgKi8KKyNkZWZpbmUgU0tQX0JLVSA4CQkJLyogQmFja3VwIGZpbGUgKi8K KyNkZWZpbmUgU0tQX1JFUyA5CQkJLyogUmVjb3Zlcnkgbm90IG5lZWRlZCAqLworI2RlZmluZSBT S1BfQUNDIDEwCQkJLyogQWNjZXNzIGRlbmllZCAqLworI2RlZmluZSBTS1BfTlJGIDExCQkJLyog Tm90IGEgcmVndWxhciBmaWxlICovCisjZGVmaW5lIFNLUF9TSU0gMTIJCQkvKiBTaW11bGF0aW9u IChXT1VMRCBCRSBTRU5UKSAqLworI2RlZmluZSBTS1BfWFVQIDEzIC8qIFNpbXVsYXRpb246IFdv dWxkIGJlIHNlbnQgYmVjYXVzZSByZW1vdGUgZmlsZSBvbGRlciAqLworI2RlZmluZSBTS1BfWE5Y IDE0IC8qIFNpbXVsYXRpb246IGRpdHRvLCBiZWNhdXNlIHJlbW90ZSBmaWxlIGRvZXMgbm90IGV4 aXN0ICovCisKKy8qIE1hY3JvcyAqLworCisjaWZuZGVmIENLQ01BSQorZXh0ZXJuIGludCB0Y3Bf aW5jb21pbmc7CQkvKiBVc2VkIGJ5IEVOQUJMRSBtYWNybyAqLworI2VuZGlmIC8qIENLQ01BSSAq LworCisjaWZuZGVmIFRDUFNPQ0tFVAorLyoKKyAgRU5BQkxFRCB0ZWxscyB3aGV0aGVyIGEgc2Vy dmVyLXNpZGUgc2VydmljZSBpcyBlbmFibGVkLgorICAwID0gZGlzYWJsZWQsIDEgPSBsb2NhbCwg MiA9IHJlbW90ZS4KKyAgQSAic2V0IGhvc3QgKiIgY29ubmVjdGlvbiBpcyB0ZWNobmljYWxseSBs b2NhbCBidXQgbG9naWNhbGx5IHJlbW90ZQorKi8KKyNkZWZpbmUgRU5BQkxFRCh4KSAoKGxvY2Fs ICYmICh4ICYgMSkpIHx8ICghbG9jYWwgJiYgKHggJiAyKSkpCisjZWxzZQorI2RlZmluZSBFTkFC TEVEKHgpICgoKGxvY2FsICYmICF0Y3BfaW5jb21pbmcpICYmICh4ICYgMSkpIHx8IFwKKygoIWxv Y2FsIHx8IHRjcF9pbmNvbWluZykgJiYgKHgmMikpKQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor CisvKiBUaGVzZSBhcmUgZnJvbSB0aGUgYm9vayAqLworCisjZGVmaW5lIHRvY2hhcihjaCkgICgo KGNoKSArIFNQICkgJiAweEZGICkJLyogTnVtYmVyIHRvIGNoYXJhY3RlciAqLworI2RlZmluZSB4 dW5jaGFyKGNoKSAoKChjaCkgLSBTUCApICYgMHhGRiApCS8qIENoYXJhY3RlciB0byBudW1iZXIg Ki8KKyNkZWZpbmUgY3RsKGNoKSAgICAgKCgoY2gpIF4gNjQgKSAmIDB4RkYgKQkvKiBDb250cm9s L1VuY29udHJvbCB0b2dnbGUgKi8KKyNkZWZpbmUgdW5wYXIoY2gpICAgKCgoY2gpICYgMTI3KSAm IDB4RkYgKQkvKiBDbGVhciBwYXJpdHkgYml0ICovCisKKyNpZm5kZWYgTk9MT0NBTAkJCQkvKiBD T05ORUNUIHJldHVybiBzdGF0dXMgY29kZXMgKi8KKworLyogVXNlcnMgd2lsbCBzZWUgdGhlIG51 bWJlcnMgc28gdGhleSBjYW4ndCBiZSBjaGFuZ2VkICovCisvKiBOdW1iZXJzID49IDEwMCBpbmRp Y2F0ZSBjb25uZWN0aW9uIGxvc3MgKi8KKworI2RlZmluZSBDU1hfTk9ORSAgICAgICAgMAkJLyog Tm8gQ09OTkVDVCB5ZXQgc28gbm8gc3RhdHVzICovCisjZGVmaW5lIENTWF9FU0NBUEUgICAgICAx CQkvKiBVc2VyIEVzY2FwZWQgYmFjayAqLworI2RlZmluZSBDU1hfVFJJR0dFUiAgICAgMgkJLyog VHJpZ2dlciB3YXMgZW5jb3VudGVyZWQgKi8KKyNkZWZpbmUgQ1NYX0lLU0QgICAgICAgIDMJCS8q IElLU0QgYXV0b3N5bmNocm9uaXphdGlvbiAqLworI2RlZmluZSBDU1hfQVBDICAgICAgICAgNAkJ LyogQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kICovCisjZGVmaW5lIENTWF9JRExFICAgICAg ICA1CQkvKiBJZGxlIGxpbWl0IGV4Y2VlZGVkICovCisjZGVmaW5lIENTWF9UTl9FUlIgICAgICA2 CQkvKiBUZWxuZXQgRXJyb3IgKi8KKyNkZWZpbmUgQ1NYX01BQ1JPICAgICAgIDcgICAgICAgICAg ICAgICAvKiBNYWNybyBib3VuZCB0byBrZXlzdHJva2UgKi8KKyNkZWZpbmUgQ1NYX1RJTUUgICAg ICAgIDggICAgICAgICAgICAgICAvKiBUaW1lIExpbWl0IGV4Y2VlZGVkICovCisjZGVmaW5lIENT WF9JTlRFUk5BTCAgMTAwCQkvKiBJbnRlcm5hbCBlcnJvciAqLworI2RlZmluZSBDU1hfQ0FSUklF UiAgIDEwMQkJLyogQ2FycmllciByZXF1aXJlZCBidXQgbm90IGRldGVjdGVkICovCisjZGVmaW5l IENTWF9JT0VSUk9SICAgMTAyCQkvKiBJL08gZXJyb3Igb24gY29ubmVjdGlvbiAqLworI2RlZmlu ZSBDU1hfSE9TVERJU0MgIDEwMwkJLyogRGlzY29ubmVjdGVkIGJ5IGhvc3QgKi8KKyNkZWZpbmUg Q1NYX1VTRVJESVNDICAxMDQJCS8qIERpc2Nvbm5lY3RlZCBieSB1c2VyICovCisjZGVmaW5lIENT WF9TRVNTSU9OICAgMTA1CQkvKiBTZXNzaW9uIExpbWl0IGV4Y2VlZGVkICovCisjZGVmaW5lIENT WF9UTl9QT0wgICAgMTA2CQkvKiBSZWplY3RlZCBkdWUgdG8gVGVsbmV0IFBvbGljeSAqLworI2Rl ZmluZSBDU1hfS0lMTF9TSUcgIDEwNyAgICAgICAgICAgICAgIC8qIFJlY2VpdmVkIEtpbGwgU2ln bmFsICovCisKKy8qIFNFVCBURVJNSU5BTCBJRExFLUFDVElPTiB2YWx1ZXMgKi8KKworI2RlZmlu ZSBJRExFX1JFVCAgMAkJCS8qIFJldHVybiB0byBwcm9tcHQgKi8KKyNkZWZpbmUgSURMRV9FWElU IDEJCQkvKiBFeGl0IGZyb20gS2VybWl0ICovCisjZGVmaW5lIElETEVfSEFORyAyCQkJLyogSGFu Z3VwIHRoZSBjb25uZWN0aW9uICovCisjZGVmaW5lIElETEVfT1VUICAzCQkJLyogT1VUUFVUIGEg c3RyaW5nICovCisjZGVmaW5lIElETEVfVE5PUCA0CQkJLyogVEVMTkVUIE5PUCAqLworI2RlZmlu ZSBJRExFX1RBWVQgNQkJCS8qIFRFTE5FVCBBWVQgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisK Ky8qIE1vZGVtIGFuZCBkaWFsaW5nIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgTk9ESUFMCisK Ky8qIE1vZGVtIGNhcGFiaWxpdGllcyAoYml0IHZhbHVlcykgKi8KKyNkZWZpbmUgQ0tEX0FUICAg MQkJCS8qIEhheWVzIEFUIGNvbW1hbmRzIGFuZCByZXNwb25zZXMgKi8KKyNkZWZpbmUgQ0tEX1Yy NSAgMgkJCS8qIFYuMjViaXMgY29tbWFuZHMgYW5kIHJlc3BvbnNlcyAqLworI2RlZmluZSBDS0Rf U0IgICA0CQkJLyogU3BlZWQgYnVmZmVyaW5nICovCisjZGVmaW5lIENLRF9FQyAgIDgJCQkvKiBF cnJvciBjb3JyZWN0aW9uICovCisjZGVmaW5lIENLRF9EQyAgMTYJCQkvKiBEYXRhIGNvbXByZXNz aW9uICovCisjZGVmaW5lIENLRF9IVyAgMzIJCQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8K KyNkZWZpbmUgQ0tEX1NXICA2NAkJCS8qIChMb2NhbCkgc29mdHdhcmUgZmxvdyBjb250cm9sICov CisjZGVmaW5lIENLRF9LUyAxMjgJCQkvKiBLZXJtaXQgc3Bvb2ZpbmcgKi8KKyNkZWZpbmUgQ0tE X1RCIDI1NgkJCS8qIE1hZGUgYnkgVGVsZWJpdCAqLworI2RlZmluZSBDS0RfSUQgNTEyCQkJLyog SGFzIENhbGxlciBJRCAqLworCisvKiBESUFMIGNvbW1hbmQgcmVzdWx0IGNvZGVzICovCisjZGVm aW5lIERJQV9VTksgICAtMQkJCS8qIE5vIERJQUwgY29tbWFuZCBnaXZlbiB5ZXQgKi8KKyNkZWZp bmUgRElBX09LICAgICAwCQkJLyogRElBTCBzdWNjZWVkZWQgKi8KKyNkZWZpbmUgRElBX05PTU8g ICAxCQkJLyogTW9kZW0gdHlwZSBub3Qgc3BlY2lmaWVkICovCisjZGVmaW5lIERJQV9OT0xJICAg MgkJCS8qIENvbW11bmljYXRpb24gbGluZSBub3Qgc3BlYydkICovCisjZGVmaW5lIERJQV9PUEVO ICAgMwkJCS8qIExpbmUgY2FuJ3QgYmUgb3BlbmVkICovCisjZGVmaW5lIERJQV9OT1NQICAgNAkJ CS8qIFNwZWVkIG5vdCBzcGVjaWZpZWQgKi8KKyNkZWZpbmUgRElBX0hBTkcgICA1CQkJLyogSGFu Z3VwIGZhaWx1cmUgKi8KKyNkZWZpbmUgRElBX0lFICAgICA2CQkJLyogSW50ZXJuYWwgZXJyb3Ig KG1hbGxvYywgZXRjKSAqLworI2RlZmluZSBESUFfSU8gICAgIDcJCQkvKiBJL08gZXJyb3IgKi8K KyNkZWZpbmUgRElBX1RJTU8gICA4CQkJLyogRGlhbCB0aW1lb3V0IGV4cGlyZWQgKi8KKyNkZWZp bmUgRElBX0lOVFIgICA5CQkJLyogRGlhbGluZyBpbnRlcnJ1cHRlZCBieSB1c2VyICovCisjZGVm aW5lIERJQV9OUkRZICAxMAkJCS8qIE1vZGVtIG5vdCByZWFkeSAqLworI2RlZmluZSBESUFfUEFS VCAgMTEJCQkvKiBQYXJ0aWFsIGRpYWwgY29tbWFuZCBPSyAqLworI2RlZmluZSBESUFfRElSICAg MTIJCQkvKiBEaWFsaW5nIGRpcmVjdG9yeSBlcnJvciAqLworI2RlZmluZSBESUFfSFVQICAgMTMJ CQkvKiBNb2RlbSB3YXMgaHVuZyB1cCBPSyAqLworI2RlZmluZSBESUFfTlJTUCAgMTkJCQkvKiBO byByZXNwb25zZSBmcm9tIG1vZGVtICovCisjZGVmaW5lIERJQV9FUlIgICAyMAkJCS8qIE1vZGVt IGNvbW1hbmQgZXJyb3IgKi8KKyNkZWZpbmUgRElBX05PSU4gIDIxCQkJLyogRmFpbHVyZSB0byBp bml0aWFsaXplIG1vZGVtICovCisjZGVmaW5lIERJQV9CVVNZICAyMgkJCS8qIFBob25lIGJ1c3kg Ki8KKyNkZWZpbmUgRElBX05PQ0EgIDIzCQkJLyogTm8gY2FycmllciAqLworI2RlZmluZSBESUFf Tk9EVCAgMjQJCQkvKiBObyBkaWFsdG9uZSAqLworI2RlZmluZSBESUFfUklORyAgMjUJCQkvKiBS aW5nLCBpbmNvbWluZyBjYWxsICovCisjZGVmaW5lIERJQV9OT0FOICAyNgkJCS8qIE5vIGFuc3dl ciAqLworI2RlZmluZSBESUFfRElTQyAgMjcJCQkvKiBEaXNjb25uZWN0ZWQgKi8KKyNkZWZpbmUg RElBX1ZPSUMgIDI4CQkJLyogQW5zd2VyZWQgYnkgdm9pY2UgKi8KKyNkZWZpbmUgRElBX05PQUMg IDI5CQkJLyogQWNjZXNzIGRlbmllZCwgZm9yYmlkZGVuIGNhbGwgKi8KKyNkZWZpbmUgRElBX0JM Q0sgIDMwCQkJLyogQmxhY2tsaXN0ZWQgKi8KKyNkZWZpbmUgRElBX0RFTEEgIDMxCQkJLyogRGVs YXllZCAqLworI2RlZmluZSBESUFfRkFYICAgMzIJCQkvKiBGYXggKi8KKyNkZWZpbmUgRElBX0RJ R0kgIDMzICAgICAgICAgICAgICAgICAgICAvKiBEaWdpdGFsIExpbmUgKi8KKyNkZWZpbmUgRElB X1RBUEkgIDM0CQkJLyogVEFQSSBkaWFsaW5nIGZhaWx1cmUgKi8KKyNkZWZpbmUgRElBX1VFUlIg IDk4CQkJLyogVW5rbm93biBlcnJvciAqLworI2RlZmluZSBESUFfVU5TUCAgOTkJCS8qIFVuc3Bl Y2lmaWVkIGZhaWx1cmUgZGV0ZWN0ZWQgYnkgbW9kZW0gKi8KKworI2RlZmluZSBNRE1JTkYJc3Ry dWN0IG1kbWluZgorCitNRE1JTkYgewkJCS8qIFN0cnVjdHVyZSBmb3IgbW9kZW0tc3BlY2lmaWMg aW5mb3JtYXRpb24gKi8KKworICAgIGNoYXIgKiBuYW1lOwkJLyogRGVzY3JpcHRpdmUgbmFtZSAq LworICAgIGNoYXIgKiBwdWxzZTsJCS8qIENvbW1hbmQgdG8gZm9yY2UgcHVsc2UgZGlhbGluZyAq LworICAgIGNoYXIgKiB0b25lOwkJLyogQ29tbWFuZCB0byBmb3JjZSB0b25lIGRpYWxpbmcgKi8K KyAgICBpbnQgICAgZGlhbF90aW1lOwkJLyogVGltZSBtb2RlbSBhbGxvd3MgZm9yIGRpYWxpbmcg KHNlY3MpICovCisgICAgY2hhciAqIHBhdXNlX2NoYXJzOwkJLyogQ2hhcmFjdGVyKHMpIHRvIHRl bGwgbW9kZW0gdG8gcGF1c2UgKi8KKyAgICBpbnQJICAgcGF1c2VfdGltZTsJCS8qIFRpbWUgYXNz b2NpYXRlZCB3aXRoIHBhdXNlIGNoYXJzIChzZWNzKSAqLworICAgIGNoYXIgKiB3YWtlX3N0cjsJ CS8qIFN0cmluZyB0byB3YWtldXAgbW9kZW0gJiBwdXQgaW4gY21kIG1vZGUgKi8KKyAgICBpbnQJ ICAgd2FrZV9yYXRlOwkJLyogRGVsYXkgYmV0d2VlbiB3YWtlX3N0ciBjaGFyYWN0ZXJzIChtc2Vj cykgKi8KKyAgICBjaGFyICogd2FrZV9wcm9tcHQ7CQkvKiBTdHJpbmcgcHJvbXB0IGFmdGVyIHdh a2Vfc3RyICovCisgICAgY2hhciAqIGRtb2RlX3N0cjsJCS8qIFN0cmluZyB0byBwdXQgbW9kZW0g aW4gZGlhbGluZyBtb2RlICovCisgICAgY2hhciAqIGRtb2RlX3Byb21wdDsJLyogU3RyaW5nIHBy b21wdCBmb3IgZGlhbGluZyBtb2RlICovCisgICAgY2hhciAqIGRpYWxfc3RyOwkJLyogRGlhbGlu ZyBzdHJpbmcsIHdpdGggIiVzIiBmb3IgbnVtYmVyICovCisgICAgaW50ICAgIGRpYWxfcmF0ZTsJ CS8qIEludGVyY2hhciBkZWxheSB0byBtb2RlbSAobXNlYykgKi8KKyAgICBpbnQgICAgZXNjX3Rp bWU7CQkvKiBFc2NhcGUgc2VxdWVuY2UgZ3VhcmQgdGltZSAobXNlYykgKi8KKyAgICBpbnQgICAg ZXNjX2NoYXI7CQkvKiBFc2NhcGUgY2hhcmFjdGVyICovCisgICAgY2hhciAqIGh1cF9zdHI7CQkv KiBIYW5ndXAgc3RyaW5nICovCisgICAgY2hhciAqIGh3ZmNfc3RyOwkJLyogSGFyZHdhcmUgZmxv dyBjb250cm9sIHN0cmluZyAqLworICAgIGNoYXIgKiBzd2ZjX3N0cjsJCS8qIFNvZnR3YXJlIGZs b3cgY29udHJvbCBzdHJpbmcgKi8KKyAgICBjaGFyICogbm9mY19zdHI7CQkvKiBObyBmbG93IGNv bnRyb2wgc3RyaW5nICovCisgICAgY2hhciAqIGVjX29uX3N0cjsJCS8qIEVycm9yIGNvcnJlY3Rp b24gb24gc3RyaW5nICovCisgICAgY2hhciAqIGVjX29mZl9zdHI7CQkvKiBFcnJvciBjb3JyZWN0 aW9uIG9mZiBzdHJpbmcgKi8KKyAgICBjaGFyICogZGNfb25fc3RyOwkJLyogRGF0YSBjb21wcmVz c2lvbiBvbiBzdHJpbmcgKi8KKyAgICBjaGFyICogZGNfb2ZmX3N0cjsJCS8qIERhdGEgY29tcHJl c3Npb24gb2ZmIHN0cmluZyAqLworICAgIGNoYXIgKiBhYV9vbl9zdHI7CQkvKiBBdXRvYW5zd2Vy IG9uIHN0cmluZyAqLworICAgIGNoYXIgKiBhYV9vZmZfc3RyOwkJLyogQXV0b2Fuc3dlciBvZmYg c3RyaW5nICovCisgICAgY2hhciAqIHNiX29uX3N0cjsJCS8qIFNwZWVkIGJ1ZmZlcmluZyBvbiBz dHJpbmcgKi8KKyAgICBjaGFyICogc2Jfb2ZmX3N0cjsJCS8qIFNwZWVkIGJ1ZmZlcmluZyBvZmYg c3RyaW5nICovCisgICAgY2hhciAqIHNwX29uX3N0cjsJCS8qIFNwZWFrZXIgb24gc3RyaW5nICov CisgICAgY2hhciAqIHNwX29mZl9zdHI7CQkvKiBTcGVha2VyIG9mZiBzdHJpbmcgKi8KKyAgICBj aGFyICogdm9sMV9zdHI7CQkvKiBWb2x1bWUgbG93IHN0cmluZyAqLworICAgIGNoYXIgKiB2b2wy X3N0cjsJCS8qIFZvbHVtZSBtZWQgc3RyaW5nICovCisgICAgY2hhciAqIHZvbDNfc3RyOwkJLyog Vm9sdW1lIGhpZ2ggc3RyaW5nICovCisgICAgY2hhciAqIGlnbm9yZWR0OwkJLyogSWdub3JlIGRp YWx0b25lIHN0cmluZyAqLworICAgIGNoYXIgKiBpbmkyOwkJLyogTGFzdC1taW51dGUgaW5pdCBz dHJpbmcgKi8KKyAgICBsb25nICAgbWF4X3NwZWVkOwkJLyogTWF4aW11bSBpbnRlcmZhY2Ugc3Bl ZWQgKi8KKyAgICBsb25nICAgY2FwYXM7CQkvKiBDYXBhYmlsaXR5IGJpdHMgKi8KKyAgICAvKiBm dW5jdGlvbiB0byByZWFkIG1vZGVtJ3MgcmVzcG9uc2Ugc3RyaW5nIHRvIGEgbm9uLWRpYWxpbmcg Y29tbWFuZCAqLworICAgIF9QUk9UT1RZUCggaW50ICgqb2tfZm4pLCAoaW50LGludCkgKTsKK307 CisjZW5kaWYgLyogTk9ESUFMICovCisKKy8qIFN5bWJvbHMgZm9yIEZpbGUgQXR0cmlidXRlcyAq LworCisjZGVmaW5lIEFUX1hBTEwgIDAJCQkvKiBBbGwgb2YgdGhlbSAqLworI2RlZmluZSBBVF9B TExZICAxCQkJLyogQWxsIG9mIHRoZW0gb24gKFllcykgKi8KKyNkZWZpbmUgQVRfQUxMTiAgMgkJ CS8qIEFsbCBvZiB0aGVtIG9mZiAobm8pICovCisjZGVmaW5lIEFUX0xFTksgIDMJCQkvKiBMZW5n dGggaW4gSyAqLworI2RlZmluZSBBVF9GVFlQICA0CQkJLyogRmlsZSBUeXBlICovCisjZGVmaW5l IEFUX0RBVEUgIDUJCQkvKiBDcmVhdGlvbiBkYXRlICovCisjZGVmaW5lIEFUX0NSRUEgIDYJCQkv KiBDcmVhdG9yICovCisjZGVmaW5lIEFUX0FDQ1QgIDcJCQkvKiBBY2NvdW50ICovCisjZGVmaW5l IEFUX0FSRUEgIDgJCQkvKiBBcmVhICovCisjZGVmaW5lIEFUX1BTV0QgIDkJCQkvKiBQYXNzd29y ZCBmb3IgYXJlYSAqLworI2RlZmluZSBBVF9CTEtTIDEwCQkJLyogQmxvY2tzaXplICovCisjZGVm aW5lIEFUX0FDQ0UgMTEJCQkvKiBBY2Nlc3MgKi8KKyNkZWZpbmUgQVRfRU5DTyAxMgkJCS8qIEVu Y29kaW5nICovCisjZGVmaW5lIEFUX0RJU1AgMTMJCQkvKiBEaXNwb3NpdGlvbiAqLworI2RlZmlu ZSBBVF9MUFJPIDE0CQkJLyogTG9jYWwgUHJvdGVjdGlvbiAqLworI2RlZmluZSBBVF9HUFJPIDE1 CQkJLyogR2VuZXJpYyBQcm90ZWN0aW9uICovCisjZGVmaW5lIEFUX1NZU0kgMTYJCQkvKiBTeXN0 ZW0gSUQgKi8KKyNkZWZpbmUgQVRfUkVDRiAxNwkJCS8qIFJlY29yZCBGb3JtYXQgKi8KKyNkZWZp bmUgQVRfU1lTUCAxOAkJCS8qIFN5c3RlbS1EZXBlbmRlbnQgUGFyYW1ldGVycyAqLworI2RlZmlu ZSBBVF9MRU5CIDE5CQkJLyogTGVuZ3RoIGluIEJ5dGVzICovCisjZGVmaW5lIEFUX0VPQSAgMjAJ CQkvKiBFbmQgb2YgQXR0cmlidXRlcyAqLworCisvKiBLZXJtaXQgcGFja2V0IGluZm9ybWF0aW9u IHN0cnVjdHVyZSAqLworCitzdHJ1Y3QgcGt0aW5mbyB7CQkJLyogUGFja2V0IGluZm9ybWF0aW9u IHN0cnVjdHVyZSAqLworICAgIENIQVIgKmJmX2FkcjsJCQkvKiAgYnVmZmVyIGFkZHJlc3MgKi8K KyAgICBpbnQgICBiZl9sZW47CQkJLyogIGJ1ZmZlciBsZW5ndGggKi8KKyAgICBDSEFSICpwa19h ZHI7CQkJLyogUGFja2V0IGFkZHJlc3Mgd2l0aGluIGJ1ZmZlciAqLworICAgIGludCAgIHBrX2xl bjsJCQkvKiAgbGVuZ3RoIG9mIGRhdGEgd2l0aGluIGJ1ZmZlciAqLworICAgIGludCAgIHBrX3R5 cDsJCQkvKiAgcGFja2V0IHR5cGUgKi8KKyAgICBpbnQgICBwa19zZXE7CQkJLyogIHBhY2tldCBz ZXF1ZW5jZSBudW1iZXIgKi8KKyAgICBpbnQgICBwa19ydHI7CQkJLyogIHJldHJhbnNtaXNzaW9u IGNvdW50ICovCit9OworCisvKiBTZW5kIE1vZGVzIChpbmRpY2F0aW5nIHdoaWNoIHR5cGUgb2Yg U0VORCBjb21tYW5kIHdhcyB1c2VkKSAqLworCisjZGVmaW5lIFNNX1NFTkQgICAgIDAKKyNkZWZp bmUgU01fTVNFTkQgICAgMQorI2RlZmluZSBTTV9SRVNFTkQgICAyCisjZGVmaW5lIFNNX1BTRU5E ICAgIDMKKyNkZWZpbmUgU01fTUFJTCAgICAgNAorI2RlZmluZSBTTV9QUklOVCAgICA1CisKKyNk ZWZpbmUgT1BUQlVGTEVOIDI1NgorCisvKiBGaWxlLXJlbGF0ZWQgc3ltYm9scyBhbmQgc3RydWN0 dXJlcyAqLworLyogVXNlZCBieSBTRVQgRklMRSBjb21tYW5kIGJ1dCBhbHNvIGJ5IHByb3RvY29s IGFuZCBpL28gbW9kdWxlcyAqLworCisjZGVmaW5lIFhNT0RFX0EgMAkvKiBUcmFuc2ZlciBtb2Rl IEF1dG9tYXRpYyAqLworI2RlZmluZSBYTU9ERV9NIDEJLyogVHJhbnNmZXIgbW9kZSBNYW51YWwg ICAgKi8KKworI2RlZmluZSAgIFhZRklMTiAwICAJLyogIE5hbWluZyAgKi8KKyNkZWZpbmUgICAg IFhZRk5fTCAwCS8qICAgIExpdGVyYWwgKi8KKyNkZWZpbmUgICAgIFhZRk5fQyAxCS8qICAgIENv bnZlcnRlZCAqLworI2RlZmluZSAgIFhZRklMVCAxICAJLyogIFR5cGUgICAgKi8KKyNkZWZpbmUg ICAgIFhZRlRfVCAwICAgIC8qICAgIFRleHQgICovCisjZGVmaW5lICAgICBYWUZUX0IgMSAgICAv KiAgICBCaW5hcnkgKi8KKyNkZWZpbmUgICAgIFhZRlRfSSAyICAgIC8qICAgIEltYWdlIG9yIEJs b2NrIChWTVMpICovCisjZGVmaW5lICAgICBYWUZUX0wgMwkvKiAgICBMYWJlbGVkICh0YWdnZWQg YmluYXJ5KSAoVk1TIG9yIE9TLzIpICovCisjZGVmaW5lICAgICBYWUZUX1UgNCAgICAvKiAgICBC aW5hcnkgVW5kZWZpbmVkIChWTVMpICovCisjZGVmaW5lICAgICBYWUZUX00gNQkvKiAgICBNYWNC aW5hcnkgKE1hY2ludG9zaCkgKi8KKyNkZWZpbmUgICAgIFhZRlRfWCA2CS8qICAgIFRFTkVYIChG VFAgVFlQRSBMIDgpICovCisjZGVmaW5lICAgICBYWUZUX0QgOTkgICAvKiAgICBEZWJ1ZyAoZm9y IHNlc3Npb24gbG9ncykgKi8KKyNkZWZpbmUgICBYWUZJTFcgMiAgICAgIC8qICBXYXJuaW5nICov CisjZGVmaW5lICAgWFlGSUxEIDMgICAgICAvKiAgRGlzcGxheSAqLworI2RlZmluZSAgIFhZRklM QyA0ICAgICAgLyogIENoYXJhY3RlciBzZXQgKi8KKyNkZWZpbmUgICBYWUZJTEYgNSAgICAgIC8q ICBSZWNvcmQgRm9ybWF0ICovCisjZGVmaW5lICAgICBYWUZGX1MgIDAgICAvKiAgICBTdHJlYW0g Ki8KKyNkZWZpbmUgICAgIFhZRkZfViAgMSAgIC8qICAgIFZhcmlhYmxlICovCisjZGVmaW5lICAg ICBYWUZGX1ZCIDIgICAvKiAgICBWYXJpYWJsZSB3aXRoIFJDVydzICovCisjZGVmaW5lICAgICBY WUZGX0YgIDMgICAvKiAgICBGaXhlZCBsZW5ndGggKi8KKyNkZWZpbmUgICAgIFhZRkZfVSAgNCAg IC8qICAgIFVuZGVmaW5lZCAqLworI2RlZmluZSAgIFhZRklMUiA2ICAgICAgLyogIFJlY29yZCBs ZW5ndGggKi8KKyNkZWZpbmUgICBYWUZJTE8gNyAgICAgIC8qICBPcmdhbml6YXRpb24gKi8KKyNk ZWZpbmUgICAgIFhZRk9fUyAwICAgIC8qICAgIFNlcXVlbnRpYWwgKi8KKyNkZWZpbmUgICAgIFhZ Rk9fSSAxICAgIC8qICAgIEluZGV4ZWQgKi8KKyNkZWZpbmUgICAgIFhZRk9fUiAyICAgIC8qICAg IFJlbGF0aXZlICovCisjZGVmaW5lICAgWFlGSUxQIDggICAgICAvKiAgUHJpbnRlciBjYXJyaWFn ZSBjb250cm9sICovCisjZGVmaW5lICAgICBYWUZQX04gMCAgICAvKiAgICBOZXdsaW5lIChpbWJl ZGRlZCBjb250cm9sIGNoYXJhY3RlcnMpICovCisjZGVmaW5lICAgICBYWUZQX0YgMSAgICAvKiAg ICBGT1JUUkFOIChzcGFjZSwgMSwgKywgZXRjLCBpbiBjb2x1bW4gMSAqLworI2RlZmluZSAgICAg WFlGUF9QIDIgICAgLyogICAgU3BlY2lhbCBwcmludGVyIGNhcnJpYWdlIGNvbnRyb2xzICovCisj ZGVmaW5lICAgICBYWUZQX1ggNCAgICAvKiAgICBOb25lICovCisjZGVmaW5lICAgWFlGSUxYIDkg ICAgICAvKiAgQ29sbGlzaW9uIEFjdGlvbiAqLworI2RlZmluZSAgICAgWFlGWF9BIDMgICAgLyog ICAgQXBwZW5kICovCisjZGVmaW5lICAgICBYWUZYX1EgNSAgICAvKiAgICBBc2sgKi8KKyNkZWZp bmUgICAgIFhZRlhfQiAyICAgIC8qICAgIEJhY2t1cCAqLworI2RlZmluZSAgICAgWFlGWF9EIDQg ICAgLyogICAgRGlzY2FyZCAqLworI2RlZmluZSAgICAgWFlGWF9SIDAgICAgLyogICAgUmVuYW1l ICovCisjZGVmaW5lICAgICBYWUZYX1ggMSAgICAvKiAgICBSZXBsYWNlICovCisjZGVmaW5lICAg ICBYWUZYX1UgNiAgICAvKiAgICBVcGRhdGUgKi8KKyNkZWZpbmUgICAgIFhZRlhfTSA3ICAgIC8q ICAgIE1vZHRpbWVzIGRpZmZlciAqLworI2RlZmluZSAgIFhZRklMQiAxMCAgICAgLyogIEJsb2Nr c2l6ZSAqLworI2RlZmluZSAgIFhZRklMWiAxMSAgICAgLyogIERpc3Bvc2l0aW9uICovCisjZGVm aW5lICAgICBYWUZaX04gMCAgICAvKiAgICBOZXcsIENyZWF0ZSAqLworI2RlZmluZSAgICAgWFlG Wl9BIDEgICAgLyogICAgTmV3LCBhcHBlbmQgaWYgZmlsZSBleGlzdHMsIGVsc2UgY3JlYXRlICov CisjZGVmaW5lICAgICBYWUZaX08gMiAgICAvKiAgICBPbGQsIGZpbGUgbXVzdCBleGlzdCAqLwor I2RlZmluZSAgIFhZRklMUyAxMiAgICAgLyogIEZpbGUgQnl0ZSBTaXplICovCisjZGVmaW5lICAg WFlGSUxMIDEzICAgICAvKiAgRmlsZSBMYWJlbCAoVk1TKSAqLworI2RlZmluZSAgIFhZRklMSSAx NCAgICAgLyogIEZpbGUgSW5jb21wbGV0ZSAqLworI2RlZmluZSAgIFhZRklMUSAxNSAgICAgLyog IEZpbGUgcGF0aCBhY3Rpb24gKHN0cmlwIG9yIG5vdCkgKi8KKyNkZWZpbmUgICBYWUZJTEcgMTYg ICAgIC8qICBGaWxlIGRvd25sb2FkIGRpcmVjdG9yeSAqLworI2RlZmluZSAgIFhZRklMQSAxNyAg ICAgLyogIExpbmUgdGVybWluYXRvciBmb3IgbG9jYWwgdGV4dCBmaWxlcyAqLworI2RlZmluZSAg ICAgWFlGQV9MIDAxMiAgLyogICAgTEYgKGFzIGluIFVOSVgpICovCisjZGVmaW5lICAgICBYWUZB X0MgMDE1ICAvKiAgICBDUiAoYXMgaW4gT1MtOSBvciBNYWMgT1MpICovCisjZGVmaW5lICAgICBY WUZBXzIgMDAwICAvKiAgQ1JMRiAtLSBOb3RlOiB0aGlzIG11c3QgYmUgZGVmaW5lZCBhcyAwICov CisjZGVmaW5lICAgWFlGSUxZIDE4ICAgICAvKiAgRGVzdGluYXRpb24gKi8KKyNkZWZpbmUgICBY WUZJTFYgMTkJLyogIEVPRiBEZXRlY3Rpb24gTWV0aG9kICovCisjZGVmaW5lICAgICBYWUVPRl9M IDAgICAvKiAgICBGaWxlIGxlbmd0aCAqLworI2RlZmluZSAgICAgWFlFT0ZfWiAxICAgLyogICAg Q3RybC1aIGluIGZpbGUgKi8KKyNkZWZpbmUgICBYWUZJTEggICAyMCAgIC8qICBPVVRQVVQgcGFy YW1ldGVycyAtIGJ1ZmZlcmVkLCBibG9ja2luZywgZXRjICovCisjZGVmaW5lICAgWFlGSUJQICAg MjEJLyogIEJJTkFSWS1QQVRURVJOICovCisjZGVmaW5lICAgWFlGSVRQICAgMjIgICAvKiAgVEVY VC1QQVRURVJOICovCisjZGVmaW5lICAgWFlGSVBBICAgMjMgICAvKiAgUEFUVEVSTlMgT04vT0ZG ICovCisjZGVmaW5lICAgWFlGSUxVICAgMjQgICAvKiAgVUNTIC4uLiAqLworI2RlZmluZSAgIFhZ Rl9QUk0gIDI1ICAgLyogIFBFUk1JU1NJT05TLCBQUk9URUNUSU9OICovCisjZGVmaW5lICAgWFlG X0lOU1AgMjYgICAvKiAgSU5TUEVDVElPTiAoU0NBTikgKi8KKyNkZWZpbmUgICBYWUZfREZMVCAy NyAgIC8qICBERUZBVUxUIChjaGFyYWN0ZXIgc2V0cykgKi8KKyNkZWZpbmUgICBYWUZfU1NQQSAy OCAgIC8qICBTVFJJTkdTUEFDRSAqLworI2RlZmluZSAgIFhZRl9MU0laIDI5ICAgLyogIExJU1RT SVpFICovCisKKy8qIEZpbGUgVHlwZSAocmV0dXJuIGNvZGUpIGRlZmluaXRpb25zIGFuZCBjb3Jy ZXNwb25kaW5nIG5hbWUgc3RyaW5ncyAqLworCisjZGVmaW5lIEZUXzdCSVQgMAkJCS8qIDctYml0 IHRleHQgKi8KKyNkZWZpbmUgRlRfOEJJVCAxCQkJLyogOC1iaXQgdGV4dCAqLworI2RlZmluZSBG VF9VVEY4IDIJCQkvKiBVVEY4ICovCisjZGVmaW5lIEZUX1VDUzIgMwkJCS8qIFVDUzIgKi8KKyNk ZWZpbmUgRlRfVEVYVCA0CQkJLyogVW5rbm93biB0ZXh0ICovCisjZGVmaW5lIEZUX0JJTiAgNQkJ CS8qIEJpbmFyeSAqLworI2RlZmluZSBTQ0FORklMRUJVRiA0OTE1MgkJLyogU2l6ZSBvZiBmaWxl IHNjYW4gKDQ4SykgKi8KKworLyogQ29ubmVjdGlvbiBjbG9zZWQgcmVhc29ucyAqLworCisjZGVm aW5lIFdDX1JFTU8gICAwCQkJLyogQ2xvc2VkIGJ5IHJlbW90ZSAqLworI2RlZmluZSBXQ19DTE9T ICAgMQkJCS8qIENsb3NlZCBmcm9tIG91ciBlbmQgKi8KKyNkZWZpbmUgV0NfVEVMT1BUIDIJCQkv KiBUZWxuZXQgbmVnb3RpYXRpb24gZmFpbHVyZSAqLworCisjaWZkZWYgQklHQlVGT0sKKyNkZWZp bmUgRlRQQVRURVJOUyAyNTYKKyNlbHNlCisjZGVmaW5lIEZUUEFUVEVSTlMgNjQKKyNlbmRpZiAv KiBCSUdCVUZPSyAqLworCisjZGVmaW5lIFNZU19VTksgICAgMAkJCS8qIFNlbGVjdGVkIHNlcnZl ciBzeXN0ZW0gdHlwZXMgKi8KKyNkZWZpbmUgU1lTX1VOSVggICAxCisjZGVmaW5lIFNZU19XSU4z MiAgMgorI2RlZmluZSBTWVNfVk1TICAgIDMKKyNkZWZpbmUgU1lTX09TMiAgICA0CisjZGVmaW5l IFNZU19ET1MgICAgNQorI2RlZmluZSBTWVNfVE9QUzEwIDYKKyNkZWZpbmUgU1lTX1RPUFMyMCA3 CisjZGVmaW5lIFNZU19WT1MgICAgOAorI2RlZmluZSBTWVNfREcgICAgIDkKKyNkZWZpbmUgU1lT X09TSyAgICAxMAorI2RlZmluZSBTWVNfTUFYICAgIDExCisKKyNpZmRlZiBDS19TTUFMTAorI2Rl ZmluZSBQV0JVRkwgNjMKKyNlbHNlCisjZGVmaW5lIFBXQlVGTCAyNTUKKyNlbmRpZiAvKiBDS19T TUFMTCAqLworCisjaWZkZWYgT1MyCitzdHJ1Y3QgdHRfaW5mb19yZWMgewkJCS8qIFRlcm1pbmFs IGVtdWxhdGlvbiBpbmZvICovCisgICAgY2hhciAgKnhfbmFtZTsKKyAgICBjaGFyICp4X2FsaWFz ZXNbNF07CisgICAgY2hhciAgKnhfaWQ7Cit9OworI2VuZGlmIC8qIE9TMiAqLworCisvKiBCRUVQ IFRZUEVTICovCisjZGVmaW5lIEJQX0JFTCAgMAkJCS8qIFRlcm1pbmFsIGJlbGwgKi8KKyNkZWZp bmUgQlBfTk9URSAxCQkJLyogSW5mbyAqLworI2RlZmluZSBCUF9XQVJOIDIJCQkvKiBXYXJuaW5n ICovCisjZGVmaW5lIEJQX0ZBSUwgMwkJCS8qIEVycm9yICovCisKKyNpZm5kZWYgTk9JS1NECisj aWZkZWYgSUtTREIJCQkJLyogSUtTRCBEYXRhYmFzZSBkZWZpbml0aW9ucyAqLworCisvKiBGaWVs ZCB2YWx1ZXMgKi8KKworI2RlZmluZSBEQkZfSU5VU0UgICAgMQkJCS8qIEZsYWcgYml0cy4uLiBJ biB1c2UgKi8KKyNkZWZpbmUgREJGX1VTRVIgICAgIDIJCQkvKiBSZWFsIHVzZXIgKHZlcnN1cyBh bm9ueW1vdXMpICovCisjZGVmaW5lIERCRl9MT0dHRUQgICA0CQkJLyogTG9nZ2VkIGluICh2ZXJz dXMgbm90KSAqLworCisvKiBEYXRhIERlZmluaXRpb25zLi4uICovCisKKy8qIE51bWVyaWMgZmll bGRzLCBoZXgsIHJpZ2h0IGp1c3RpZmllZCwgMC1maWxsZWQgb24gbGVmdCAqLworCisjZGVmaW5l IGRiX0ZMQUdTICAgICAwCQkJLyogRmllbGQgMDogRmxhZ3MgKi8KKyNkZWZpbmUgREJfRkxBR1Mg ICAgIDAJCQkvKiBPZmZzZXQ6IDAgKi8KKyNkZWZpbmUgZEJfRkxBR1MgICAgIDQJCQkvKiBMZW5n dGg6IDQgKGhleCBkaWdpdHMpICovCisKKyNkZWZpbmUgZGJfQVRZUEUgICAgIDEJCQkvKiBGaWVs ZCAxOiBBdXRoZW50aWNhdGlvbiB0eXBlICovCisjZGVmaW5lIERCX0FUWVBFICAgICA0CQkJLyog NCBoZXggZGlnaXRzICovCisjZGVmaW5lIGRCX0FUWVBFICAgICA0CisKKyNkZWZpbmUgZGJfQU1P REUgICAgIDIJCQkvKiBGaWVsZCAyOiBBdXRoZW50aWNhdGlvbiBtb2RlICovCisjZGVmaW5lIERC X0FNT0RFICAgICA4CQkJLyogNCBoZXggZGlnaXRzICovCisjZGVmaW5lIGRCX0FNT0RFICAgICA0 CisKKyNkZWZpbmUgZGJfU1RBVEUgICAgIDMJCQkvKiBGaWVsZCAzOiBTdGF0ZSAtIDQgaGV4IGRp Z2l0cyovCisjZGVmaW5lIERCX1NUQVRFICAgIDEyCQkJLyogNCBoZXggZGlnaXRzICovCisjZGVm aW5lIGRCX1NUQVRFICAgICA0CisKKyNkZWZpbmUgZGJfTVlQSUQgICAgIDQJCQkvKiBGaWVsZCA0 OiBNeSBQSUQgKi8KKyNkZWZpbmUgREJfTVlQSUQgICAgMTYJCQkvKiAxNiBoZXggZGlnaXRzIGxl ZnQgcGFkZGVkIHdpdGggMCAqLworI2RlZmluZSBkQl9NWVBJRCAgICAxNgorCisjZGVmaW5lIGRi X1NBRERSICAgICA1CQkJLyogRmllbGQgNTogU2VydmVyIChteSkgSVAgYWRkcmVzcyAqLworI2Rl ZmluZSBEQl9TQUREUiAgICAzMgkJCS8qIDE2IGhleCBkaWdpdHMgbGVmdCBwYWRkZWQgd2l0aCAw ICovCisjZGVmaW5lIGRCX1NBRERSICAgIDE2CisKKyNkZWZpbmUgZGJfQ0FERFIgICAgIDYJCQkv KiBGaWVsZCA2OiBDbGllbnQgSVAgYWRkcmVzcyAqLworI2RlZmluZSBEQl9DQUREUiAgICA0OAkJ CS8qIDE2IGhleCBkaWdpdHMgbGVmdCBwYWRkZWQgd2l0aCAwICovCisjZGVmaW5lIGRCX0NBRERS ICAgIDE2CisKKy8qIERhdGUtdGltZSBmaWVsZHMgKDE3IHJpZ2h0LWFkanVzdGVkIGluIDE4IGZv ciBZMTBLIHJlYWRpbmVzcykgKi8KKworI2RlZmluZSBkYl9TVEFSVCAgICAgNwkJCS8qIEZpZWxk IDc6IFNlc3Npb24gc3RhcnQgZGF0ZS10aW1lICovCisjZGVmaW5lIERCX1NUQVJUICAgIDY1CQkJ LyogNjQgaXMgbGVhZGluZyBzcGFjZSBmb3IgWTEwSyAqLworI2RlZmluZSBkQl9TVEFSVCAgICAx NworCisjZGVmaW5lIGRiX0xBU1RVICAgICA4CQkJLyogRmllbGQgODogTGFzdCBsYXN0dSBkYXRl LXRpbWUgKi8KKyNkZWZpbmUgREJfTEFTVFUgICAgODMJCQkvKiA4MiBpcyBsZWFkaW5nIHNwYWNl IGZvciBZMTBLICovCisjZGVmaW5lIGRCX0xBU1RVICAgIDE3CisKKyNkZWZpbmUgZGJfVUxFTiAg ICAgIDkJCQkvKiBGaWVsZCA5OiBMZW5ndGggb2YgVXNlcm5hbWUgKi8KKyNkZWZpbmUgREJfVUxF TiAgICAxMDAJCQkvKiA0IGhleCBkaWdpdHMgKi8KKyNkZWZpbmUgZEJfVUxFTiAgICAgIDQKKwor I2RlZmluZSBkYl9ETEVOICAgICAxMAkJCS8qIEZpZWxkIDEwOiBMZW5ndGggb2YgRGlyZWN0b3J5 ICovCisjZGVmaW5lIERCX0RMRU4gICAgMTA0CQkJLyogNCBoZXggZGlnaXRzICovCisjZGVmaW5l IGRCX0RMRU4gICAgICA0CisKKyNkZWZpbmUgZGJfSUxFTiAgICAgMTEJCQkvKiBGaWVsZCAxMTog TGVuZ3RoIG9mIEluZm8gKi8KKyNkZWZpbmUgREJfSUxFTiAgICAxMDgJCQkvKiA0IGhleCBkaWdp dHMgKi8KKyNkZWZpbmUgZEJfSUxFTiAgICAgIDQKKworI2RlZmluZSBkYl9QQUQxICAgICAxMgkJ CS8qIEZpZWxkIDEyOiAoUmVzZXJ2ZWQpICovCisjZGVmaW5lIERCX1BBRDEgICAgMTEyCQkJLyog ZmlsbGVkIHdpdGggc3BhY2VzICovCisjZGVmaW5lIGRCX1BBRDEgICAgOTEyCisKKy8qIFN0cmlu ZyBmaWVsZHMsIGFsbCByaWdodC1wYWRkZWQgd2l0aCBibGFua3MgKi8KKworI2RlZmluZSBkYl9V U0VSICAgICAxMwkJCS8qIEZpZWxkIDEzOiBVc2VybmFtZSAqLworI2RlZmluZSBEQl9VU0VSICAg MTAyNAkJCS8qIHJpZ2h0LXBhZGRlZCB3aXRoIHNwYWNlcyAqLworI2RlZmluZSBkQl9VU0VSICAg MTAyNAorCisjZGVmaW5lIGRiX0RJUiAgICAgIDE0CQkJLyogRmllbGQgMTQ6IEN1cnJlbnQgZGly ZWN0b3J5ICovCisjZGVmaW5lIERCX0RJUiAgICAyMDQ4CQkJLyogcmlnaHQtcGFkZGVkIHdpdGgg c3BhY2VzICovCisjZGVmaW5lIGRCX0RJUiAgICAxMDI0CisKKyNkZWZpbmUgZGJfSU5GTyAgICAg MTUJCQkvKiBGaWVsZCAxNTogU3RhdGUtc3BlY2lmaWMgaW5mbyAqLworI2RlZmluZSBEQl9JTkZP ICAgMzA3MgkJCS8qIHJpZ2h0LXBhZGRlZCB3aXRoIHNwYWNlcyAqLworI2RlZmluZSBkQl9JTkZP ICAgMTAyNAorCisjZGVmaW5lIERCX1JFQ0wgICA0MDk2CQkJLyogRGF0YWJhc2UgcmVjb3JkIGxl bmd0aCAqLworCisvKiBPZmZzZXQsIGxlbmd0aCwgYW5kIHR5cGUgb2YgZWFjaCBmaWVsZCB0aHJ1 IGl0cyBkYl9YWFggc3ltYm9sICovCisKKyNkZWZpbmUgREJUX0hFWCAxCQkJLyogSGV4YWRlY2lt YWwgbnVtYmVyICovCisjZGVmaW5lIERCVF9TVFIgMgkJCS8qIFN0cmluZyAqLworI2RlZmluZSBE QlRfREFUIDMJCQkvKiBEYXRlLVRpbWUgeXl5eW1tZGQgaGg6bW06c3MgKi8KKyNkZWZpbmUgREJU X1VORCA5CQkJLyogVW5kZWZpbmVkIGFuZCBibGFuayAqLworCitzdHJ1Y3QgaWtzZGJmbGQgewor ICAgIGludCBvZmY7CQkJCS8qIFBvc2l0aW9uIChvZmZzZXQpICovCisgICAgaW50IGxlbjsJCQkJ LyogTGVuZ3RoIChieXRlcykgKi8KKyAgICBpbnQgdHlwOwkJCQkvKiBEYXRhIHR5cGUgKi8KK307 CitfUFJPVE9UWVAoaW50IGRiaW5pdCwgKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgaW5pdHNsb3Qs IChpbnQpKTsKK19QUk9UT1RZUChpbnQgZ2V0c2xvdCwgKHZvaWQpKTsKK19QUk9UT1RZUChpbnQg ZnJlZXNsb3QsIChpbnQpKTsKK19QUk9UT1RZUChpbnQgdXBkc2xvdCwgKGludCkpOworX1BST1RP VFlQKGludCBzbG90c3RhdGUsIChpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICopKTsKK19QUk9U T1RZUChpbnQgc2xvdGRpciwgKGNoYXIgKiwgY2hhciAqKSk7CisjZW5kaWYgLyogSUtTREIgKi8K KyNlbmRpZiAvKiBOT0lLU0QgKi8KKworLyogQU5TSSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3Ig cHJvdG9jb2wtcmVsYXRlZCBmdW5jdGlvbnMuICovCisKK19QUk9UT1RZUCggaW50IGlucHV0LCAo dm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGluaWJ1ZnMsIChpbnQsIGludCkgKTsKK19QUk9UT1RZ UCggaW50IG1ha2VidWYsIChpbnQsIGludCwgQ0hBUiBbXSwgc3RydWN0IHBrdGluZm8gKikgKTsK K19QUk9UT1RZUCggaW50IG1rc2J1ZiwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IG1rcmJ1Ziwg KGludCkgKTsKK19QUk9UT1RZUCggaW50IHNwYWNrLCAoY2hhciwgaW50LCBpbnQsIENIQVIgKikg KTsKK19QUk9UT1RZUCggVk9JRCBwcm90bywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBycGFj aywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBhY2ssICh2b2lkKSApOworX1BST1RPVFlQKCBp bnQgbmFjaywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGFja24sIChpbnQpICk7CitfUFJPVE9U WVAoIGludCBhY2sxLCAoQ0hBUiAqKSApOworX1BST1RPVFlQKCBpbnQgYWNrbnMsIChpbnQsIENI QVIgKikgKTsKKyNpZmRlZiBTVFJFQU1JTkcKK19QUk9UT1RZUCggaW50IGZhc3RhY2ssICh2b2lk KSApOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworX1BST1RPVFlQKCBpbnQgcmVzZW5kLCAoaW50 KSApOworX1BST1RPVFlQKCBpbnQgZXJycGt0LCAoQ0hBUiAqKSApOworX1BST1RPVFlQKCBWT0lE IGxvZ3BrdCwgKGNoYXIsIGludCwgQ0hBUiAqLCBpbnQpICk7CitfUFJPVE9UWVAoIENIQVIgZG9w YXIsIChDSEFSKSApOworX1BST1RPVFlQKCBpbnQgY2hrMSwgKENIQVIgKiwgaW50KSApOworX1BS T1RPVFlQKCB1bnNpZ25lZCBpbnQgY2hrMiwgKENIQVIgKiwgaW50KSApOworX1BST1RPVFlQKCB1 bnNpZ25lZCBpbnQgY2hrMywgKENIQVIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgc2lwa3Qs IChjaGFyKSApOworX1BST1RPVFlQKCBpbnQgc29wa3QsICh2b2lkKSApOworX1BST1RPVFlQKCBp bnQgc2luaXQsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHJpbml0LCAoQ0hBUiAqKSApOwor X1BST1RPVFlQKCBpbnQgc3BhciwgKENIQVIgKikgKTsKK19QUk9UT1RZUCggaW50IHJjdmZpbCwg KGNoYXIgKikgKTsKK19QUk9UT1RZUCggQ0hBUiAqIHJwYXIsICh2b2lkKSApOworX1BST1RPVFlQ KCBpbnQgZ25maWxlLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGdldHNidWYsIChpbnQpICk7 CitfUFJPVE9UWVAoIGludCBnZXRyYnVmLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGZyZWVz YnVmLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgZnJlZXJidWYsIChpbnQpICk7CitfUFJPVE9U WVAoIGludCBkdW1wc2J1ZiwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBkdW1wcmJ1ZiwgKHZv aWQpICk7CitfUFJPVE9UWVAoIFZPSUQgZnJlZXJwa3QsIChpbnQpICk7CitfUFJPVE9UWVAoIGlu dCBjaGt3aW4sIChpbnQsIGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgcnNhdHRyLCAoQ0hB UiAqKSApOworX1BST1RPVFlQKCBjaGFyICpnZXRyZWFzb24sIChjaGFyICopICk7CitfUFJPVE9U WVAoIGludCBzY21kLCAoY2hhciwgQ0hBUiAqKSApOworX1BST1RPVFlQKCBpbnQgZW5jc3RyLCAo Q0hBUiAqKSApOworX1BST1RPVFlQKCBpbnQgZGVjb2RlLCAoQ0hBUiAqLCBpbnQgKCopKGNoYXIp LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBiZGVjb2RlLCAoQ0hBUiAqLCBpbnQgKCopKGNoYXIp KSApOworX1BST1RPVFlQKCBpbnQgZm5wYXJzZSwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50 IHN5c2NtZCwgKGNoYXIgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgY3dkLCAoY2hhciAq KSApOworX1BST1RPVFlQKCBpbnQgcmVtc2V0LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQg aW5pdGF0dHIsIChzdHJ1Y3QgemF0dHIgKikgKTsKK19QUk9UT1RZUCggaW50IGdhdHRyLCAoQ0hB UiAqLCBzdHJ1Y3QgemF0dHIgKikgKTsKK19QUk9UT1RZUCggaW50IGFkZWJ1LCAoY2hhciAqLCBz dHJ1Y3QgemF0dHIgKikgKTsKK19QUk9UT1RZUCggaW50IGNhbm5lZCwgKENIQVIgKikgKTsKK19Q Uk9UT1RZUCggaW50IG9wZW50LCAoc3RydWN0IHphdHRyICopICk7CitfUFJPVE9UWVAoIGludCBj a29wZW54LCAoc3RydWN0IHphdHRyICopICk7CitfUFJPVE9UWVAoIGludCBvcGVuYSwgKGNoYXIg Kiwgc3RydWN0IHphdHRyICopICk7CitfUFJPVE9UWVAoIGludCBvcGVuaSwgKGNoYXIgKikgKTsK K19QUk9UT1RZUCggaW50IG9wZW5vLCAoY2hhciAqLCBzdHJ1Y3QgemF0dHIgKiwgc3RydWN0IGZp bGluZm8gKikgKTsKK19QUk9UT1RZUCggaW50IG9wZW5jLCAoaW50LCBjaGFyICopICk7CitfUFJP VE9UWVAoIGludCByZW9mLCAoY2hhciAqLCBzdHJ1Y3QgemF0dHIgKikgKTsKK19QUk9UT1RZUCgg Vk9JRCByZW90LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNmaWxlLCAoaW50KSApOworX1BS T1RPVFlQKCBpbnQgc2F0dHIsIChpbnQsIGludCkgKTsKK19QUk9UT1RZUCggaW50IHNkYXRhLCAo dm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNlb2YsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBz eGVvZiwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHNlb3QsICh2b2lkKSApOworX1BST1RPVFlQ KCBpbnQgd2luZG93LCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgY2xzaWYsICh2b2lkKSApOwor X1BST1RPVFlQKCBpbnQgY2xzb2YsIChpbnQpICk7CitfUFJPVE9UWVAoIENIQVIgc2V0Z2VuLCAo Y2hhciwgY2hhciAqLCBjaGFyICosIGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IGdldHBrdCwg KGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgbWF4ZGF0YSwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCBwdXRzcnYsIChjaGFyKSApOworX1BST1RPVFlQKCBpbnQgcHV0dHJtLCAoY2hhcikg KTsKK19QUk9UT1RZUCggaW50IHB1dHF1ZSwgKGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBwdXRm aWwsIChjaGFyKSApOworX1BST1RPVFlQKCBpbnQgcHV0bWZpbCwgKGNoYXIpICk7CitfUFJPVE9U WVAoIGludCB6cHV0ZmlsLCAoY2hhcikgKTsKK19QUk9UT1RZUCggVk9JRCB6ZHN0dWZmLCAoQ0hB UikgKTsKK19QUk9UT1RZUCggaW50IHRpbml0LCAoaW50KSApOworX1BST1RPVFlQKCBWT0lEIHBr dGluaXQsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHJlc2V0YywgKHZvaWQpICk7CitfUFJP VE9UWVAoIFZPSUQgeHNpbml0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGFkanBrbCwgKGlu dCxpbnQsaW50KSApOworX1BST1RPVFlQKCBpbnQgY2hrdGltbywgKGludCxpbnQpICk7CitfUFJP VE9UWVAoIGludCBueHRwa3QsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHJjYWxjcHN6LCAo dm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNyaW5pdCwgKGludCwgaW50LCBpbnQpICk7CitfUFJP VE9UWVAoIFZPSUQgdHN0YXRzLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBmc3RhdHMsICh2 b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGludG1zZywgKGxvbmcpICk7CitfUFJPVE9UWVAoIFZP SUQgZXJtc2csIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBjaGtpbnQsICh2b2lkKSApOwor X1BST1RPVFlQKCBWT0lEIHNkZWJ1LCAoaW50KSApOworX1BST1RPVFlQKCBWT0lEIHJkZWJ1LCAo Q0hBUiAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBkYmNociwgKCBpbnQgKSApOworI2lm ZGVmIENPTU1FTlQKK19QUk9UT1RZUCggU0lHVFlQIHN0cHRyYXAsIChpbnQsIGludCkgKTsKK19Q Uk9UT1RZUCggU0lHVFlQIHRyYXAsIChpbnQsIGludCkgKTsKKyNlbHNlCitfUFJPVE9UWVAoIFNJ R1RZUCBzdHB0cmFwLCAoaW50KSApOworX1BST1RPVFlQKCBTSUdUWVAgdHJhcCwgKGludCkgKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCitfUFJPVE9UWVAoIGNoYXIgKiBja19lcnJzdHIsICh2b2lk KSApOworI2lmbmRlZiBOT1hGRVIKK19QUk9UT1RZUCggaW50IGFnbmJ5dGUsICh2b2lkKSApOwor I2VuZGlmIC8qIE5PWEZFUiAqLworX1BST1RPVFlQKCBpbnQgeGduYnl0ZSwgKGludCwgaW50LCBp bnQgKCopKHZvaWQpKSApOworX1BST1RPVFlQKCBpbnQgeHBuYnl0ZSwgKGludCwgaW50LCBpbnQs IGludCAoKikoY2hhcikpICk7CisKKy8qIFVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBuZWVkZWQg YnkgbWFpbiBwcm9ncmFtLCBldGMuICovCisKK19QUk9UT1RZUCggaW50IGRvY29uZWN0LCAoaW50 LGludCkgKTsKK19QUk9UT1RZUCggVk9JRCBzZXRmbG93LCAodm9pZCkgKTsKK19QUk9UT1RZUCgg Vk9JRCBwcmVzY2FuLCAoaW50KSApOworX1BST1RPVFlQKCBWT0lEIHNldGludCwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIFZPSUQgZG9pbml0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBkb2Zh c3QsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGNtZGluaSwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCBkb3Rha2UsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBjbWRsaW4sICh2b2lk KSApOworI2lmZGVmIE9TMgorX1BST1RPVFlQKCBpbnQgY29uZWN0LCAoaW50KSApOworI2Vsc2Ug LyogT1MyICovCitfUFJPVE9UWVAoIGludCBjb25lY3QsICh2b2lkKSApOworI2VuZGlmIC8qIE9T MiAqLworX1BST1RPVFlQKCBpbnQgY2tjZ2V0YywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGNr Y3B1dGMsIChpbnQpICk7CitfUFJPVE9UWVAgKGludCBtZG1odXAsICh2b2lkKSApOworX1BST1RP VFlQKCBWT0lEIGhlcmFsZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgZml4Y21kLCAodm9p ZCkgKTsKK19QUk9UT1RZUCggaW50IGRvYXJnLCAoY2hhcikgKTsKK19QUk9UT1RZUCggaW50IGRv eGFyZywgKGNoYXIgKiosIGludCkgKTsKK19QUk9UT1RZUCggVk9JRCB1c2FnZSwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIFZPSUQgZG9jbGVhbiwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHNuZGhs cCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBzbmRzdHJpbmcsIChjaGFyICopICk7CitfUFJP VE9UWVAoIFZPSUQgY2tob3N0LCAoY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBnZXR0 Y3MsIChpbnQsIGludCkgKTsKK19QUk9UT1RZUCggVk9JRCBnZXRkaWFsZW52LCAodm9pZCkgKTsK K19QUk9UT1RZUCggVk9JRCBzZXRwcmVmaXgsIChpbnQpICk7CitfUFJPVE9UWVAoVk9JRCBpbml0 cHJvdG8sKGludCxjaGFyICosY2hhciAqLGNoYXIgKixjaGFyICosY2hhciAqLGNoYXIqLGNoYXIq KSk7CitfUFJPVE9UWVAoIFZPSUQgaW5pdHBhdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQg aW5pdGNzZXRzLCAodm9pZCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGdldHN5c2lkLCAoY2hhciAq KSApOworX1BST1RPVFlQKCBpbnQgZ2V0c3lzaXgsIChjaGFyICopICk7CisjaWZkZWYgQ0tfVElN RVJTCitfUFJPVE9UWVAoIFZPSUQgcnR0aW5pdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBn ZXRydHQsIChpbnQsIGludCkgKTsKKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKworX1BST1RPVFlQ KCBpbnQgaXNfYV90dHksIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBzbmRkaXIsIChjaGFyICop ICk7CitfUFJPVE9UWVAoIGludCBzbmRkZWwsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBz bmR0eXBlLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgZG9vdXRwdXQsIChjaGFyICosIGlu dCkgKTsKK19QUk9UT1RZUCggaW50IGlzYWJzb2x1dGUsIChjaGFyICopICk7CitfUFJPVE9UWVAo IFZPSUQgd2hvYXJld2UsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgY2tta2RpciwgKGludCwg Y2hhciAqLCBjaGFyICoqLCBpbnQsIGludCkgKTsKK19QUk9UT1RZUCggaW50IGF1dG9leGl0Y2hr LCAoQ0hBUikgKTsKK19QUk9UT1RZUCggVk9JRCBmY3BzLCAodm9pZCkgKTsKKyNpZmRlZiBPUzIK K19QUk9UT1RZUCggVk9JRCBsb2djaGFyLCAodW5zaWduZWQgc2hvcnQpICk7CisjZWxzZSAvKiBP UzIgKi8KK19QUk9UT1RZUCggVk9JRCBsb2djaGFyLCAoY2hhcikgKTsKKyNlbmRpZiAvKiBPUzIg Ki8KK19QUk9UT1RZUCggVk9JRCBsb2dzdHIsIChjaGFyICosIGludCkgKTsKKworX1BST1RPVFlQ KCBWT0lEIGRvbG9nZW5kLCAodm9pZCkgKTsKKyNpZmRlZiBOT0xPQ0FMCisjZGVmaW5lIGRvbG9n c2hvdygpCisjZWxzZQorX1BST1RPVFlQKCBsb25nIGRvbG9nc2hvdywgKGludCkgKTsKKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBOT0RJU1BMQVkKKyNkZWZpbmUgZnhkaW5pdChhKQor I2Vsc2UKK19QUk9UT1RZUCggVk9JRCBmeGRpbml0LCAoaW50KSApOworI2VuZGlmIC8qIE5PRElT UExBWSAqLworCitfUFJPVE9UWVAoIGludCBmaWxlc2VsZWN0LCAoY2hhciAqLAorCQkJICAgIGNo YXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwKKwkJCSAgICBDS19PRkZfVCwgQ0tfT0ZGX1Qs CisJCQkgICAgaW50LCBpbnQsCisJCQkgICAgY2hhciAqKikgKTsKK19QUk9UT1RZUCggY2hhciAq IHdob2FtaSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBzaG9lc2MsIChpbnQpICk7CisKKyNp ZmRlZiBDS19BUEMKK19QUk9UT1RZUCggaW50IGNoa3Nwa3QsIChjaGFyICopICk7CitfUFJPVE9U WVAoIGludCBrc3RhcnQsIChDSEFSKSApOworX1BST1RPVFlQKCBWT0lEIGF1dG9kb3duLCAoaW50 KSk7CisjaWZkZWYgQ0tfWFlaCitfUFJPVE9UWVAoIGludCB6c3RhcnQsIChDSEFSKSApOworI2Vu ZGlmIC8qIENLX1hZWiAqLworI2lmZGVmIE9TMgorX1BST1RPVFlQKHZvaWQgYXBjX2NvbW1hbmQs IChpbnQsIGNoYXIqKSk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfQVBDICovCisK Ky8qIFVzZXIgUXVlcnkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgKi8KKworc3RydWN0 IHR4dGJveCB7CisgICAgY2hhciAqIHRfYnVmOwkJCS8qIERlc3RpbmF0aW9uIGJ1ZmZlciBhZGRy ZXNzICovCisgICAgaW50ICAgIHRfbGVuOwkJCS8qIERlc3RpbmF0aW9uIGJ1ZmZlciBsZW5ndGgg Ki8KKyAgICBjaGFyICogdF9sYmw7CQkJLyogTGFiZWwgZm9yIHRoaXMgZmllbGQgKi8KKyAgICBj aGFyICogdF9kZmx0OwkJCS8qIERlZmF1bHQgcmVzcG9uc2UgZm9yIHRoaXMgZmllbGQgKi8KKyAg ICBpbnQgICAgdF9lY2hvOwkJCS8qIDAgPSBubywgMSA9IHllcywgMiA9IGFzdGVyaXNrcyAqLwor fTsKKworI2RlZmluZSBERUZBVUxUX1VRX1RJTUVPVVQgIDAKK19QUk9UT1RZUChpbnQgdXFfb2ss IChjaGFyICosY2hhciAqLGludCxjaGFyICoqLGludCkgKTsKK19QUk9UT1RZUChpbnQgdXFfdHh0 LCAoY2hhciAqLGNoYXIgKixpbnQsY2hhciAqKixjaGFyICosaW50LGNoYXIgKixpbnQpKTsKK19Q Uk9UT1RZUChpbnQgdXFfbXR4dCwgKGNoYXIgKixjaGFyICoqLGludCxzdHJ1Y3QgdHh0Ym94W10p ICk7CitfUFJPVE9UWVAoaW50IHVxX2ZpbGUsIChjaGFyICosY2hhciAqLGludCxjaGFyICoqLGNo YXIgKixjaGFyICosaW50KSk7CisKKyNpZmRlZiBDS19VUkwKK3N0cnVjdCB1cmxvcHQgeworICAg IGNoYXIgKiBuYW07CisgICAgY2hhciAqIHZhbDsKK307CisjZGVmaW5lIE1BWF9VUkxfT1BUUyAg ICAxNgorc3RydWN0IHVybGRhdGEgeworICAgIGNoYXIgKiBzYXY7CQkJLyogVGhlIFVSTCBpdHNl bGYgKi8KKyAgICBjaGFyICogc3ZjOwkJCS8qIFNlcnZpY2UgKi8KKyAgICBjaGFyICogdXNyOwkJ CS8qIFVzZXIgKi8KKyAgICBjaGFyICogcHN3OwkJCS8qIFBhc3N3b3JkICovCisgICAgY2hhciAq IGhvczsJCQkvKiBIb3N0ICovCisgICAgY2hhciAqIHBvcjsJCQkvKiBQb3J0ICovCisgICAgY2hh ciAqIHB0aDsJCQkvKiBQYXRoICovCisgICAgaW50ICAgIG5vcHRzOyAgICAgICAgICAgICAgIC8q IG51bWJlciBvZiBvcHRpb25zICovCisgICAgc3RydWN0IHVybG9wdCBvcHRbTUFYX1VSTF9PUFRT XTsgICAvKiBvcHRpb25zICovCit9OworX1BST1RPVFlQKGludCB1cmxwYXJzZSwgKGNoYXIgKiwg c3RydWN0IHVybGRhdGEgKikpOworI2VuZGlmIC8qIENLX1VSTCAqLworCisjZW5kaWYgLyogQ0tD S0VSX0ggKi8KKworLyogRW5kIG9mIGNrY2tlci5oICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NsaWIuYyBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNTFiOWYwNgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tjbGliLmMKQEAgLTAsMCArMSwzMzE5IEBACitjaGFyICogY2ts aWJ2ID0gIkMtS2VybWl0IGxpYnJhcnksIDkuMC4wNTIsIDI5IEp1biAyMDExIjsKKworI2RlZmlu ZSBDS0NMSUJfQworCisvKiBDIEsgQyBMIEkgQiAuIEMgIC0tICBDLUtlcm1pdCBMaWJyYXJ5IHJv dXRpbmVzLiAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5l ZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMs IE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDExLAorICAgIFRydXN0 ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAg QWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBv ciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNj bGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qCisgIEdlbmVyYWwtcHVycG9zZSwgc3lz dGVtL3BsYXRmb3JtL2NvbXBpbGVyLWluZGVwZW5kZW50IHJvdXRpbmVzIGZvciB1c2UKKyAgYnkg YWxsIG1vZHVsZXMuICBNYW55IGFyZSByZXBsYWNlbWVudHMgZm9yIGNvbW1vbmx5IHVzZWQgQyBs aWJyYXJ5CisgIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgZm91bmQgb24gZXZlcnkgcGxhdGZvcm0s IGFuZC9vciB0aGF0IGxhY2sgbmVlZGVkCisgIGZ1bmN0aW9uYWxpdHkgKGUuZy4gY2FzZWxlc3Mg c3RyaW5nIHNlYXJjaC9jb21wYXJlKSBvciBzYWZldHkgZmVhdHVyZXMuCisKKyAgICBja3N0cm5j cHkoKSAgLSBTaW1pbGFyIHRvIHN0cm5jcHkoKSBidXQgZGlmZmVyZW50IChzZWUgY29tbWVudHMp LgorICAgIGNrc3RybmNhdCgpICAtIFNpbWlsYXIgdG8gc3RybmNhdCgpIGJ1dCBkaWZmZXJlbnQg KHNlZSBjb21tZW50cykuCisgICAgY2hhcnRvc3RyKCkgIC0gQ29udmVydHMgYSBjaGFyIHRvIGEg c3RyaW5nIChzZWxmIG9yIGN0cmwgY2hhciBuYW1lKS4KKyAgICBja3N0cmNocigpICAgLSBQb3J0 YWJsZSBzdHJjaHIoKS4KKyAgICBja3N0cnBicmsoKSAgLSBQb3J0YWJsZSBzdHJwYnJrKCkuCisg ICAgY2tsb3dlcigpICAgIC0gTG93ZXJjYXNlIGEgc3RyaW5nIChpbiBwbGFjZSkuCisgICAgY2t1 cHBlcigpICAgIC0gVXBwZXJjYXNlIGEgc3RyaW5nIChpbiBwbGFjZSkuCisgICAgY2tpbmRleCgp ICAgIC0gTGVmdCBvciByaWdodCBpbmRleC4KKyAgICBja3N0cnN0cigpICAgLSBQb3J0YWJsZSBz dHJzdHIoKS4KKyAgICBja2l0b2EoKSAgICAgLSBDb252ZXJ0cyBpbnQgdG8gc3RyaW5nLgorICAg IGNrdWl0b2EoKSAgICAtIENvbnZlcnRzIHVuc2lnbmVkIGludCB0byBzdHJpbmcuCisgICAgY2ts dG9hKCkgICAgIC0gQ29udmVydHMgbG9uZyB0byBzdHJpbmcuCisgICAgY2t1bHRvYSgpICAgIC0g Q29udmVydHMgdW5zaWduZWQgbG9uZyB0byBzdHJpbmcuCisgICAgY2tmc3RvYSgpICAgIC0gQ29u dmVydHMgb2ZmX3QtdHlwZSBpbnRlZ2VyIChsb25nIG9yIGxvbmcgbG9uZykgdG8gc3RyaW5nLgor ICAgIGNrYXRvZnMoKSAgICAtIENvbnZlcnRzIGEgbnVtZXJpYyBzdHJpbmcgdG8gYW4gb2ZmX3Qt dHlwZSBpbnRlZ2VyLgorICAgIGNrY3RvYSgpICAgICAtIENvbnZlcnRzIGNoYXIgdG8gc3RyaW5n LgorICAgIGNrbWFrbXNnKCkgICAtIENvbnN0cnVjdHMgYSBtZXNzYWdlIGZyb20gNCBzb3VyY2Ug c3RyaW5ncy4KKyAgICBja21ha3htc2coKSAgLSBDb25zdHJ1Y3RzIGEgbWVzc2FnZSBmcm9tIDEy IHNvdXJjZSBzdHJpbmdzLgorICAgIGNrbWF0Y2goKSAgICAtIFBhdHRlcm4gbWF0Y2hpbmcuCisg ICAgY2ttZW1jcHkoKSAgIC0gUG9ydGFibGUgbWVtY3B5KCkuCisgICAgY2tyY2hhcigpICAgIC0g UmlnaHRtb3N0IGNoYXJhY3RlciBvZiBhIHN0cmluZy4KKyAgICBja3N0cmNtcCgpICAgLSBQb3Nz aWJseSBjYXNlbGVzcyBzdHJpbmcgY29tcGFyaXNvbi4KKyAgICBja3N0cnByZSgpICAgLSBDYXNl bGVzcyBzdHJpbmcgcHJlZml4IGNvbXBhcmlzb24uCisgICAgc2hfc29ydCgpICAgIC0gU29ydHMg YW4gYXJyYXkgb2Ygc3RyaW5ncywgbWFueSBvcHRpb25zLgorICAgIGJyc3RyaXAoKSAgICAtIFN0 cmlwcyBlbmNsb3NpbmcgYnJhY2VzIChhbmQgZG91YmxlcXVvdGVzKS4KKyAgICBtYWtlbGlzdCgp ICAgLSBTcGxpdHMgInt7aXRlbX17aXRlbX0uLi59IiBpbnRvIGFuIGFycmF5LgorICAgIG1ha2Vz dHIoKSAgICAtIENhcmVmdWwgbWFsbG9jKCkgZnJvbnQgZW5kLgorICAgIHhtYWtlc3RyKCkgICAt IGRpdHRvIChzZWUgY29tbWVudHMpLgorICAgIGNrcmFkaXgoKSAgICAtIENvbnZlcnQgbnVtYmVy IHJhZGl4ICgyLTM2KS4KKyAgICBiOHRvYjY0KCkgICAgLSBDb252ZXJ0IGRhdGEgdG8gYmFzZSA2 NC4KKyAgICBiNjR0b2I4KCkgICAgLSBDb252ZXJ0IGJhc2UgNjQgdG8gZGF0YS4KKyAgICBjaGtu dW0oKSAgICAgLSBDaGVja3MgaWYgc3RyaW5nIGlzIGEgKHBvc3NpYmx5IHNpZ25lZCkgaW50ZWdl ci4KKyAgICByZGlnaXRzKCkgICAgLSBDaGVja3MgaWYgc3RyaW5nIGlzIGNvbXBvc2VkIG9ubHkg b2YgZGVjaW1hbCBkaWdpdHMuCisgICAgaXNmbG9hdCgpICAgIC0gQ2hlY2tzIGlmIHN0cmluZyBp cyBhIHZhbGlkIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKyAgICBja3JvdW5kKCkgICAgLSBSb3Vu ZHMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZGVzaXJlZCBwcmVjaXNpb24uCisgICAgcGFy bmFtKCkgICAgIC0gUmV0dXJucyBwYXJpdHkgbmFtZSBzdHJpbmcuCisgICAgaGhtbXNzKCkgICAg IC0gQ29udmVydHMgc2Vjb25kcyB0byBoaDptbTpzcyBzdHJpbmcuCisgICAgbHNldCgpICAgICAg IC0gV3JpdGUgZml4ZWQtbGVuZ3RoIGZpZWxkIGxlZnQtYWRqdXN0ZWQgaW50byBhIHJlY29yZC4K KyAgICByc2V0KCkgICAgICAgLSBXcml0ZSBmaXhlZC1sZW5ndGggZmllbGQgcmlnaHQtYWRqdXN0 ZWQgaW50byBhIHJlY29yZC4KKyAgICB1bG9uZ3RvaGV4KCkgLSBDb252ZXJ0cyBhbiB1bnNpZ25l ZCBsb25nIHRvIGEgaGV4IHN0cmluZy4KKyAgICBoZXh0b3Vsb25nKCkgLSBDb252ZXJ0cyBhIGhl eCBzdHJpbmcgdG8gYW4gdW5zaWduZWQgbG9uZy4KKyAgICBja3NwbGl0KCkgICAgLSBTcGxpdHMg YSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiB3b3Jkcy4KKyAgICBpc3BhdHRlcm4oKSAgLSBUZWxs cyBpZiBhcmd1bWVudCBzdHJpbmcgaXMgYSBwYXR0ZXJuLgorCisgIFByb3RvdHlwZXMgYXJlIGlu IGNrY2xpYi5oLgorCisgIE5vdGU6IFRoaXMgbW9kdWxlIHNob3VsZCBub3QgY29udGFpbiBhbnkg ZXh0ZXJuIGRlY2xhcmF0aW9ucy4KKyovCisjaW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVkZSAi Y2tjZGViLmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCisKKy8qIFB1YmxpYyB2YXJpYWJsZXMgKi8K KworaW50IGRibHF1byA9IDE7IC8qIE5vbnplcm8gaWYgZG91YmxlcXVvdGVzIGNhbiBiZSB1c2Vk IGZvciBncm91cGluZyAqLworCitjaGFyICoKK2NjbnRhYltdID0gewkvKiBOYW1lcyBvZiBBU0NJ SSAoQzApIGNvbnRyb2wgY2hhcmFjdGVycyAwLTMxICovCisgICAgIk5VTCIsICJTT0giLCAiU1RY IiwgIkVUWCIsICJFT1QiLCAiRU5RIiwgIkFDSyIsICJCRUwiLAorICAgICJCUyIsICAiSFQiLCAg IkxGIiwgICJWVCIsICAiRkYiLCAgIkNSIiwgICJTTyIsICAiU0kiLAorICAgICJETEUiLCAiREMx IiwgIkRDMiIsICJEQzMiLCAiREM0IiwgIk5BSyIsICJTWU4iLCAiRVRCIiwKKyAgICAiQ0FOIiwg IkVNIiwgICJTVUIiLCAiRVNDIiwgIkZTIiwgICJHUyIsICAiUlMiLCAgIlVTIgorfTsKKworY2hh ciAqCitjMXRhYltdID0gewkvKiBOYW1lcyBvZiBJU08gNjQyOSAoQzEpIGNvbnRyb2wgY2hhcmFj dGVycyAwLTMyICovCisgICAgIlhYWCIsICJYWFgiLCAiQlBIIiwgIk5CSCIsICJJTkQiLCAiTkVM IiwgIlNTQSIsICJFU0EiLAorICAgICJIVFMiLCAiSFRKIiwgIlZUUyIsICJQTEQiLCAiUExVIiwg IlJJIiwgICJTUzIiLCAiU1MzIiwKKyAgICAiRENTIiwgIlBVMSIsICJQVTIiLCAiU1RTIiwgIkND SCIsICJNVyIsICAiU1BBIiwgIkVQQSIsCisgICAgIlNPUyIsICJYWFgiLCAiU0NJIiwgIkNTSSIs ICJTVCIsICAiT1NDIiwgIlBNIiwgICJBUEMiLCAiTkJTIgorfTsKKworI2RlZmluZSBSWFJFU1VM VCAxMjcKK3N0YXRpYyBjaGFyIHJ4ZGlnaXRzW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1O T1BRUlNUVVZXWFlaIjsKK3N0YXRpYyBjaGFyIHJ4cmVzdWx0W1JYUkVTVUxUKzFdOworCisvKiAg QyBLIFMgVCBSIE4gQyBQIFkgKi8KKworLyoKKyAgQ29waWVzIGEgTlVMLXRlcm1pbmF0ZWQgc3Ry aW5nIGludG8gYSBidWZmZXIgd2hvc2UgdG90YWwgbGVuZ3RoIGlzIGdpdmVuLAorICBlbnN1cmlu ZyB0aGF0IHRoZSByZXN1bHQgaXMgTlVMLXRlcm1pbmF0ZWQgZXZlbiBpZiBpdCBoYXMgdG8gYmUg dHJ1bmNhdGVkLgorCisgIENhbGwgd2l0aDoKKyAgICBkZXN0ID0gcG9pbnRlciB0byBkZXN0aW5h dGlvbiBidWZmZXIKKyAgICBzcmMgID0gcG9pbnRlciB0byBzb3VyY2Ugc3RyaW5nCisgICAgbGVu ICA9IGxlbmd0aCBvZiBkZXN0aW5hdGlvbiBidWZmZXIgKHRoZSBhY3R1YWwgbGVuZ3RoLCBub3Qg b25lIGxlc3MpLgorCisgIFJldHVybnM6CisgICAgaW50LCBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNv cGllZCwgMCBvciBtb3JlLgorCisgIE5PVEU6IFRoaXMgaXMgTk9UIGEgcmVwbGFjZW1lbnQgZm9y IHN0cm5jcHkoKToKKyAgIC4gc3RybmNweSgpIGRvZXMgbm90IHJlcXVpcmUgaXRzIHNvdXJjZSBz dHJpbmcgdG8gYmUgTlVMLXRlcm1pbmF0ZWQuCisgICAuIHN0cm5jcHkoKSBkb2VzIG5vdCBuZWNl c3NhcmlseSBOVUwtdGVybWluYXRlIGl0cyByZXN1bHQuCisgICAuIHN0cm5jcHkoKSByaWdodC1w YWRzIGRlc3Qgd2l0aCBOVUxzIGlmIGl0IGlzIGxvbmdlciB0aGFuIHNyYy4KKyAgIC4gc3RybmNw eSgpIHRyZWF0cyB0aGUgbGVuZ3RoIGFyZ3VtZW50IGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8g Y29weS4KKyAgIC4gY2tzdHJuY3B5KCkgdHJlYXRzIHRoZSBsZW5ndGggYXJndW1lbnQgYXMgdGhl IHNpemUgb2YgdGhlIGRlc3QgYnVmZmVyLgorICAgLiBja3N0cm5jcHkoKSBkb2Vzbid0IGR1bXAg Y29yZSBpZiBnaXZlbiBOVUxMIHN0cmluZyBwb2ludGVycy4KKyAgIC4gY2tzdHJuY3B5KCkgcmV0 dXJucyBhIG51bWJlci4KKworICBVc2UgY2tzdHJuY3B5KCkgd2hlbiB5b3Ugd2FudCB0bzoKKyAg IC4gQ29weSBhbiBlbnRpcmUgc3RyaW5nIGludG8gYSBidWZmZXIgd2l0aG91dCBvdmVycnVuLgor ICAgLiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGJhY2suCisKKyAgVXNlIHN0cm5jcHko KSB3aGVuIHlvdSB3YW50IHRvOgorICAgLiBDb3B5IGEgcGllY2Ugb2YgYSBzdHJpbmcuCisqLwor aW50CisjaWZkZWYgQ0tfQU5TSUMKK2Nrc3RybmNweShjaGFyICogZGVzdCwgY29uc3QgY2hhciAq IHNyYywgaW50IGxlbikKKyNlbHNlCitja3N0cm5jcHkoZGVzdCxzcmMsbGVuKSBjaGFyICogZGVz dCwgKiBzcmM7IGludCBsZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpbnQgaTsK KyAgICBpZiAobGVuIDwgMSB8fCAhc3JjIHx8ICFkZXN0KSB7CS8qIE5vdGhpbmcgb3Igbm93aGVy ZSB0byBjb3B5ICovCisJaWYgKGRlc3QpICpkZXN0ID0gTlVMOworCXJldHVybigwKTsKKyAgICB9 CisjaWZuZGVmIE5PQ0tTVFJOQ1BZCisgICAgZm9yIChpID0gMDsgc3JjW2ldICYmIChpIDwgbGVu LTEpOyBpKyspIC8qIEFyZ3MgT0ssIGNvcHkgKi8KKyAgICAgIGRlc3RbaV0gPSBzcmNbaV07Cisg ICAgZGVzdFtpXSA9IE5VTDsKKyNlbHNlCisgICAgaSA9IHN0cmxlbihzcmMpOworICAgIGlmIChp ID4gbGVuKSBpID0gbGVuOworICAgIHN0cm5jcHkoZGVzdCxzcmMsaSk7CisgICAgZGVzdFtsZW5d ID0gTlVMOworI2VuZGlmIC8qIE5PQ0tTVFJOQ1BZICovCisgICAgcmV0dXJuKGkpOworfQorCisv KiAgQyBLIFMgVCBSIE4gQyBBIFQgKi8KKworLyoKKyAgQXBwZW5kcyBhIE5VTC10ZXJtaW5hdGVk IHN0cmluZyB0byBhIGJ1ZmZlciB3aG9zZSB0b3RhbCBsZW5ndGggaXMgZ2l2ZW4sCisgIGVuc3Vy aW5nIHRoYXQgdGhlIHJlc3VsdCBpcyBOVUwtdGVybWluYXRlZCBldmVuIGlmIGl0IGhhZCB0byBi ZSB0cnVuY2F0ZWQuCisKKyAgQ2FsbCB3aXRoOgorICAgIGRlc3QgPSBwb2ludGVyIHRvIGRlc3Rp bmF0aW9uIGJ1ZmZlciBjb250YWluaW5nIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZworICAgIHNy YyAgPSBwb2ludGVyIHRvIG51bGwtdGVybWluYXRlZCBzb3VyY2Ugc3RyaW5nCisgICAgbGVuICA9 IGxlbmd0aCBvZiBkZXN0aW5hdGlvbiBidWZmZXIgKHRoZSBhY3R1YWwgbGVuZ3RoLCBub3Qgb25l IGxlc3MpLgorCisgIFJldHVybnM6CisgICAgaW50LCBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGll ZCwgMCBvciBtb3JlLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitja3N0cm5jYXQoY2hhciAq IGRlc3QsIGNvbnN0IGNoYXIgKiBzcmMsIGludCBsZW4pCisjZWxzZQorY2tzdHJuY2F0KGRlc3Qs c3JjLGxlbikgY2hhciAqIGRlc3QsICogc3JjOyBpbnQgbGVuOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgcmVnaXN0ZXIgaW50IGksIGo7CisjaWZkZWYgTk9DS1NUUk5DUFkKKyAgICBy ZWdpc3RlciBjaGFyICogczEsICogczI7CisjZW5kaWYgLyogTk9DS1NUUk5DUFkgKi8KKyAgICBp ZiAobGVuIDwgMSB8fCAhc3JjIHx8ICFkZXN0KSB7CS8qIE5vdGhpbmcgb3Igbm93aGVyZSB0byBj b3B5ICovCisJaWYgKGRlc3QpICpkZXN0ID0gTlVMOworCXJldHVybigwKTsKKyAgICB9CisjaWZu ZGVmIE5PQ0tTVFJOQ1BZCisgICAgLyogQXJncyBPSywgY29weSAqLworICAgIGZvciAoaSA9IDAs IGogPSBzdHJsZW4oZGVzdCk7IHNyY1tpXSAmJiAoaSA8IGxlbi1qLTEpOyBpKyspCisgICAgICBk ZXN0W2kral0gPSBzcmNbaV07CisgICAgZGVzdFtpK2pdID0gTlVMOworI2Vsc2UKKyAgICBqID0g MDsKKyAgICBzMSA9IGRlc3Q7CisgICAgd2hpbGUgKCpzMSsrKSBqKys7CQkJLyogaiA9IHN0cmxl bihkZXN0KTsgKi8KKyAgICBzMS0tOwkJCQkvKiAoYmFjayB1cCBvdmVyIE5VTCkgKi8KKworICAg IGkgPSAwOworICAgIHMyID0gKGNoYXIgKilzcmM7CisgICAgd2hpbGUgKCpzMisrKSBpKys7CQkJ LyogaSA9IHN0cmxlbihzcmMpOyAqLworCisgICAgaWYgKGkgPiAobGVuLWopKQorICAgICAgaSA9 IGxlbiAtIGo7CisgICAgaWYgKGkgPD0gMCkKKyAgICAgIHJldHVybigwKTsKKworI2lmZGVmIENP TU1FTlQKKyAgICBzdHJuY3B5KCZkZXN0W2pdLHNyYyxpKTsKKyNlbHNlCisgICAgaiA9IGk7CQkJ CS8qIFRoaXMgc2hvdWxkIGJlIGEgYml0IGZhc3Rlci4uLiAgICAqLworICAgIHMyID0gKGNoYXIg KilzcmM7CQkgICAgICAgLyogZGVwZW5kcyBvbiBzdHJjcHkgaW1wbGVtZW50YXRpb247ICovCisg ICAgd2hpbGUgKCgqczErKyA9ICpzMisrKSAmJiBqLS0pCS8qIGF0IGxlYXN0IGl0IHNob3VsZG4n dCBiZSBzbG93ZXIuICAqLworICAgICAgOworICAgIGRlc3RbbGVuLTFdID0gTlVMOwkJCS8qIElu IGNhc2Ugb2YgZWFybHkgZXhpdC4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNlbmRpZiAv KiBOT0NLU1RSTkNQWSAqLworICAgIHJldHVybihpKTsKK30KKworLyogIEMgSyBNIEEgSyBNIFMg RyAgKi8KKworLyoKKyAgIENvbnN0cnVjdHMgYSBtZXNzYWdlIGZyb20gdXAgdG8gNCBwaWVjZXMg d2l0aCBsZW5ndGggY2hlY2tpbmcuCisgICBSZXN1bHQgaXMgYWx3YXlzIE5VTCB0ZXJtaW5hdGVk LiAgQ2FsbCB3aXRoOgorICAgICBidWY6IFBvaW50ZXIgdG8gYnVmZmVyIGZvciBjb25zdHJ1Y3Rp bmcgbWVzc2FnZS4KKyAgICAgbGVuOiBMZW5ndGggb2YgYnVmZmVyLgorICAgICBzMS1zNDogU3Ry aW5nIHBvaW50ZXJzIChjYW4gYmUgTlVMTCkuCisgICBSZXR1cm5zOgorICAgICAwOiBOb3RoaW5n IHdhcyBjb3BpZWQuCisgICAgIG46IChwb3NpdGl2ZSBudW1iZXIpIG4gYnl0ZXMgY29waWVkLCBh bGwgYXJncyBjb3BpZWQgc3VjY2Vzc2Z1bGx5LgorICAgIC1uOiBuIGJ5dGVzIHdlcmUgY29waWVk LCBkZXN0aW5hdGlvbiBidWZmZXIgbm90IGJpZyBlbm91Z2ggZm9yIGFsbC4KKyAgIEFsc28gc2Vl OgorICAgICBja21ha3htc2coKSAtLSBhY2NlcHRzIDEyIHN0cmluZyBhcmdzLgorICAgICBja2l0 b2EoKSwgY2tsdG9hKCksIGNrY3RvYSgpLCBja2l0b3goKSwgZXRjLgorICAgICBVc2UgY2ttYWtb eF1tc2coKSBwbHVzIGNrP3RvPygpIGFzIGEgc2FmZSByZXBsYWNlbWVudCBmb3Igc3ByaW50Zigp LgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitja21ha21zZyhjaGFyICogYnVmLCBpbnQgbGVu LCBjaGFyICpzMSwgY2hhciAqczIsIGNoYXIgKnMzLCBjaGFyICpzNCkKKyNlbHNlIC8qIENLX0FO U0lDICovCitja21ha21zZyhidWYsbGVuLHMxLHMyLHMzLHM0KSBjaGFyICpidWYsICpzMSwgKnMy LCAqczMsICpzNDsgaW50IGxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCBp LCBuID0gMCwgbSA9IDA7CisgICAgY2hhciAqczsKKyAgICBjaGFyICpwLCAqYVs0XTsKKworICAg IGlmICghYnVmKSByZXR1cm4obik7CQkvKiBObyBkZXN0aW5hdGlvbiAqLworICAgIGlmIChsZW4g PCAxKSByZXR1cm4obik7CQkvKiBObyBzaXplICovCisKKyAgICBzID0gYnVmOwkJCQkvKiBQb2lu dCB0byBkZXN0aW5hdGlvbiAqLworICAgIGFbMF0gPSBzMTsgYVsxXSA9IHMyOyBhWzJdID0gczM7 IGFbM10gPSBzNDsJLyogQXJyYXkgb2Ygc291cmNlIHN0cmluZ3MgKi8KKyAgICBmb3IgKGkgPSAw OyBpIDwgNDsgaSsrKSB7CQkvKiBMb29wIHRocnUgYXJyYXkgKi8KKwlwID0gYVtpXTsJCQkvKiBQ b2ludCB0byB0aGlzIGVsZW1lbnQgKi8KKwlpZiAocCkgewkJCS8qIElmIHBvaW50ZXIgbm90IG51 bGwgKi8KKwkgICAgbiA9IGNrc3RybmNweShzLHAsbGVuKTsJLyogQ29weSBzYWZlbHkgKi8KKwkg ICAgbSArPSBuOwkJCS8qIEFjY3VtdWxhdGUgdG90YWwgKi8KKwkgICAgaWYgKHBbbl0pCQkJLyog RGlkbid0IGdldCB3aG9sZSB0aGluZz8gKi8KKwkgICAgICByZXR1cm4oLW0pOwkJLyogcmV0dXJu IGluZGljYXRpbmcgYnVmZmVyIGZ1bGwgKi8KKwkgICAgbGVuIC09IG47CQkJLyogRGVkdWN0IGZy b20gc3BhY2UgbGVmdCAqLworCSAgICBzICs9IG47CQkJLyogT3RoZXJ3aXNlIGFkdmFuY2UgZGVz dCBwb2ludGVyICovCisJfQorICAgIH0KKyAgICByZXR1cm4obSk7CQkJCS8qIFJldHVybiB0b3Rh bCBieXRlcyBjb3BpZWQgKi8KK30KKworCisvKiAgQyBLIE0gQSBLIFggTSBTIEcgICovCisKKy8q ICBFeGFjdGx5IGxpa2UgY2ttYWttc2coKSwgYnV0IGFjY2VwdHMgMTIgc3RyaW5nIGFyZ3VtZW50 cy4gKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrbWFreG1zZyhjaGFyICogYnVmLCBpbnQg bGVuLAorCSAgY2hhciAqczEsIGNoYXIgKnMyLCBjaGFyICpzMywgY2hhciAgKnM0LCBjaGFyICAq czUsIGNoYXIgKnM2LAorCSAgY2hhciAqczcsIGNoYXIgKnM4LCBjaGFyICpzOSwgY2hhciAqczEw LCBjaGFyICpzMTEsIGNoYXIgKnMxMikKKyNlbHNlIC8qIENLX0FOU0lDICovCitja21ha3htc2co YnVmLGxlbixzMSxzMixzMyxzNCxzNSxzNixzNyxzOCxzOSxzMTAsczExLHMxMikKKyAgY2hhciAq YnVmLCAqczEsICpzMiwgKnMzLCAqczQsICpzNSwgKnM2LCAqczcsICpzOCwgKnM5LCAqczEwLCAq czExLCAqczEyOworICBpbnQgbGVuOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50 IGksIG4gPSAwLCBtID0gMDsKKyAgICBjaGFyICpzOworICAgIGNoYXIgKnAsICphWzEyXTsKKwor CisgICAgaWYgKCFidWYpIHJldHVybihuKTsJCS8qIE5vIGRlc3RpbmF0aW9uICovCisgICAgaWYg KGxlbiA8IDEpIHJldHVybihuKTsJCS8qIE5vIHNpemUgKi8KKworICAgIHMgPSBidWY7CQkJCS8q IFBvaW50IHRvIGRlc3RpbmF0aW9uICovCisgICAgYVswXSA9IHMxOyBhWzFdID0gIHMyOyBhWzJd ICA9IHMzOyAgYVszXSA9IHM0OyAvKiBTb3VyY2Utc3RyaW5nIGFycmF5ICovCisgICAgYVs0XSA9 IHM1OyBhWzVdID0gIHM2OyBhWzZdICA9IHM3OyAgYVs3XSA9IHM4OworICAgIGFbOF0gPSBzOTsg YVs5XSA9IHMxMDsgYVsxMF0gPSBzMTE7IGFbMTFdID0gczEyOworICAgIGZvciAoaSA9IDA7IGkg PCAxMjsgaSsrKSB7CQkvKiBMb29wIHRocnUgYXJyYXkgKi8KKwlwID0gYVtpXTsJCQkvKiBQb2lu dCB0byB0aGlzIGVsZW1lbnQgKi8KKwlpZiAocCkgewkJCS8qIElmIHBvaW50ZXIgbm90IG51bGwg Ki8KKwkgICAgbiA9IGNrc3RybmNweShzLHAsbGVuKTsJLyogQ29weSBzYWZlbHkgKi8KKwkgICAg bSArPSBuOwkJCS8qIEFjY3VtdWxhdGUgdG90YWwgKi8KKwkgICAgaWYgKHBbbl0pCQkJLyogRGlk bid0IGdldCB3aG9sZSB0aGluZz8gKi8KKwkgICAgICByZXR1cm4oLW0pOwkJLyogcmV0dXJuIGlu ZGljYXRpbmcgYnVmZmVyIGZ1bGwgKi8KKwkgICAgbGVuIC09IG47CQkJLyogRGVkdWN0IGZyb20g c3BhY2UgbGVmdCAqLworCSAgICBzICs9IG47CQkJLyogT3RoZXJ3aXNlIGFkdmFuY2UgZGVzdCBw b2ludGVyICovCisJfQorICAgIH0KKyAgICByZXR1cm4obSk7CQkJCS8qIFJldHVybiB0b3RhbCBi eXRlcyBjb3BpZWQgKi8KK30KKworLyogIEMgSCBBIFIgVCBPIFMgVCBSICAqLworCisvKiAgQ29u dmVydHMgYSBjaGFyYWN0ZXIgdG8gYSBzdHJpbmcsIGludGVycHJldGluZyBjb250cm9scy4gICov CisKK2NoYXIgKgorY2hhcnRvc3RyKHgpIGludCB4OyB7CQkJLyogQ2FsbCB3aXRoIGNoYXIgeCAq LworICAgIHN0YXRpYyBjaGFyIGJ1ZlsyXTsJCQkvKiBSZXR1cm5zIHN0cmluZyBwb2ludGVyLiAq LworICAgIGlmICh4IDwgMzIpCisgICAgICByZXR1cm4oY2NudGFiW3hdKTsKKyAgICBpZiAoeCA9 PSAxMjcpCisgICAgICByZXR1cm4oIkRFTCIpOworICAgIGlmICh4ID4gMTI3ICYmIHggPCAxNjEp CisgICAgICByZXR1cm4oYzF0YWJbeCAtIDEyOF0pOworICAgIGlmICh4ID09IDB4QUQpCisgICAg ICByZXR1cm4oIlNIWSIpOworICAgIGJ1ZlsxXSA9IE5VTDsKKyAgICBidWZbMF0gPSAodW5zaWdu ZWQpKHggJiAweGZmKTsKKyAgICByZXR1cm4oKGNoYXIgKilidWYpOworfQorCisvKiAgQyBLIFIg QyBIIEEgUiAqLworCisvKiAgUmV0dXJucyB0aGUgcmlnaHRtb3N0IGNoYXJhY3RlciBvZiB0aGUg Z2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLworCitpbnQKK2NrcmNoYXIocykgY2hhciAq IHM7IHsKKyAgICByZWdpc3RlciBDSEFSIGMgPSAnXDAnLCAqcDsKKyAgICBwID0gKENIQVIgKilz OworICAgIGlmICghcCkgcCA9IChDSEFSICopIiI7CQkvKiBOdWxsIHBvaW50ZXIgPT0gZW1wdHkg c3RyaW5nICovCisgICAgaWYgKCEqcCkgcmV0dXJuKDApOworICAgIHdoaWxlICgqcCkJCQkJLyog Q3Jhd2wgdG8gZW5kIG9mIHN0cmluZyAqLworICAgICAgYyA9ICpwKys7CisgICAgcmV0dXJuKCh1 bnNpZ25lZCkoYyAmIDB4ZmYpKTsJLyogUmV0dXJuIGZpbmFsIGNoYXJhY3RlciAqLworfQorCisv KiAgQyBLIFMgVCBSIEMgSCBSICAqLworCisvKiAgUmVwbGFjZW1lbnQgZm9yIHN0cmNocigpLCB3 aGljaCBpcyBub3QgdW5pdmVyc2FsLiAgKi8KKy8qICBDYWxsIHdpdGg6CisgICAgIHMgPSBwb2lu dGVyIHRvIHN0cmluZyB0byBsb29rIGluLgorICAgICBjID0gY2hhcmFjdGVyIHRvIGxvb2sgZm9y LgorICAgIFJldHVybnM6CisgICAgIE5VTEwgaWYgYyBub3QgZm91bmQgaW4gcyBvciB1cG9uIGFu eSBraW5kIG9mIGVycm9yLCBvcjoKKyAgICAgcG9pbnRlciB0byBmaXJzdCBvY2N1cnJlbmNlIG9m IGMgaW4gcywgc2VhcmNoaW5nIGZyb20gbGVmdCB0byByaWdodC4KKyovCitjaGFyICoKKyNpZmRl ZiBDS19BTlNJQworY2tzdHJjaHIoY2hhciAqIHMsIGNoYXIgYykKKyNlbHNlCitja3N0cmNocihz LGMpIGNoYXIgKnMsIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNrc3RyY2hyICovIHsK KyAgICBpZiAoIXMpCisgICAgICByZXR1cm4oTlVMTCk7CisgICAgd2hpbGUgKCpzICYmICpzICE9 IGMpCisgICAgICBzKys7CisgICAgcmV0dXJuKCgqcyA9PSBjKSA/IHMgOiBOVUxMKTsKK30KKwor LyogIEMgSyBTIFQgUiBSIEMgSCBSICAqLworCisvKiAgUmVwbGFjZW1lbnQgZm9yIHN0cnJjaHIo KSwgd2hpY2ggaXMgbm90IHVuaXZlcnNhbC4gICovCisvKiAgQ2FsbCB3aXRoOgorICAgICBzID0g cG9pbnRlciB0byBzdHJpbmcgdG8gbG9vayBpbi4KKyAgICAgYyA9IGNoYXJhY3RlciB0byBsb29r IGZvci4KKyAgICBSZXR1cm5zOgorICAgICBOVUxMIGlmIGMgbm90IGZvdW5kIGluIHMgb3IgdXBv biBhbnkga2luZCBvZiBlcnJvciwgb3I6CisgICAgIHBvaW50ZXIgdG8gZmlyc3Qgb2NjdXJyZW5j ZSBvZiBjIGluIHMsIHNlYXJjaGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuCisqLworY2hhciAqCisj aWZkZWYgQ0tfQU5TSUMKK2Nrc3RycmNocihjaGFyICogcywgY2hhciBjKQorI2Vsc2UKK2Nrc3Ry cmNocihzLGMpIGNoYXIgKnMsIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNrc3RyY2hy ICovIHsKKyAgICBjaGFyICogczIgPSBOVUxMOworICAgIGlmICghcykKKyAgICAgIHJldHVybihO VUxMKTsKKyAgICB3aGlsZSAoKnMpIHsKKwlpZiAoKnMgPT0gYykKKwkgIHMyID0gczsKKwlzKys7 CisgICAgfQorICAgIHJldHVybihzMik7Cit9CisKKworLyogQyBLIFMgVCBSIFAgQiBSIEsgIC0t ICBQb3J0YWJsZSByZXBsYWNlbWVudCBmb3Igc3RycGJyaygpICAqLworCisvKiBSZXR1cm5zIHBv aW50ZXIgdG8gZmlyc3QgY2hhciBpbiBzMSB0aGF0IGlzIGFsc28gaW4gczIsIG9yIE5VTEwgKi8K KworY2hhciAqCitja3N0cnBicmsoczEsIHMyKSBjaGFyICogczEsICogczI7IHsKKyAgICBjaGFy IGMxLCBjMiwgKiBzMzsKKyAgICBpZiAoIXMxIHx8ICFzMikgcmV0dXJuKE5VTEwpOworICAgIGlm ICghKnMxIHx8ICEqczIpIHJldHVybihOVUxMKTsKKyAgICB3aGlsZSAoKGMxID0gKnMxKyspKSB7 CisJczMgPSBzMjsKKwl3aGlsZSAoKGMyID0gKnMzKyspKSB7CisJICAgIGlmIChjMiA9PSBjMSkK KwkgICAgICByZXR1cm4oczEtMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oTlVMTCk7Cit9CisK Ky8qICBDIEsgTCBPIFcgRSBSICAtLSAgTG93ZXJjYXNlIGEgc3RyaW5nIElOIFBMQUNFICovCisK Ky8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nICovCisKK2ludAorY2tsb3dlcihz KSBjaGFyICpzOyB7CisgICAgaW50IG4gPSAwOworICAgIGlmICghcykgcmV0dXJuKDApOworICAg IHdoaWxlICgqcykgeworICAgICAgICBpZiAoaXN1cHBlcigqcykpICpzID0gKGNoYXIpIHRvbG93 ZXIoKnMpOworICAgICAgICBzKyssIG4rKzsKKyAgICB9CisgICAgcmV0dXJuKG4pOworfQorCisv KiAgQyBLIFUgUCBQIEUgUiAgLS0gIFVwcGVyY2FzZSBhIHN0cmluZyBJTiBQTEFDRSAqLworCisv KiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAqLworCitpbnQKK2NrdXBwZXIocykg Y2hhciAqczsgeworICAgIGludCBuID0gMDsKKyAgICBpZiAoIXMpIHJldHVybigwKTsKKyAgICB3 aGlsZSAoKnMpIHsKKyAgICAgICAgaWYgKGlzbG93ZXIoKnMpKSAqcyA9IChjaGFyKSB0b3VwcGVy KCpzKTsKKyAgICAgICAgcysrLCBuKys7CisgICAgfQorICAgIHJldHVybihuKTsKK30KKworLyog IEMgSyBMIFQgTyBBICAtLSAgTG9uZyB0byBzdHJpbmcgIC0tICBGT1IgRElTQ0lQTElORUQgVVNF IE9OTFkgICovCisKKyNkZWZpbmUgTlVNQlVGIDEwMjQKK3N0YXRpYyBjaGFyIG51bWJ1ZltOVU1C VUYrMzJdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGludCBudW1icCA9IDA7CisvKgorICBja2x0 b2EoKSBhbmQgY2tpdG9hKCkgYXJlIGxpa2UgYXRvbCgpIGFuZCBhdG9pKCkgaW4gdGhlIHJldmVy c2UgZGlyZWN0aW9uLAorICByZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgcmVwcmVz ZW50YXRpb24gb2YgdGhlIGdpdmVuIG51bWJlciB3aXRob3V0CisgIHRoZSBjYWxsZXIgaGF2aW5n IHRvIHdvcnJ5IGFib3V0IGFsbG9jYXRpbmcgb3IgZGVmaW5pbmcgYSBidWZmZXIgZmlyc3QuCisg IFRoZXkgbWFuYWdlIHRoZWlyIG93biBpbnRlcm5hbCBidWZmZXIsIHNvIHN1Y2Nlc3NpdmUgY2Fs bHMgcmV0dXJuIGRpZmZlcmVudAorICBwb2ludGVycy4gIEhvd2V2ZXIsIHRvIGtlZXAgbWVtb3J5 IGNvbnN1bXB0aW9uIGZyb20gZ3Jvd2luZyB3aXRob3V0IGJvdW5kLAorICB0aGUgYnVmZmVyIHJl Y3ljbGVzIGl0c2VsZi4gIFNvIGFmdGVyIHNldmVyYWwgaHVuZHJlZCBjYWxscyAoZGVwZW5kaW5n IG9uCisgIHRoZSBzaXplIG9mIHRoZSBudW1iZXJzKSwgc29tZSBvZiB0aGUgZWFybGllciBwb2lu dGVycyBtaWdodCB3ZWxsIGZpbmQKKyAgdGhlbXNlbHZlcyByZWZlcmVuY2luZyBzb21ldGhpbmcg ZGlmZmVyZW50LiAgTW9yYWw6IFlvdSBjYW4ndCB3aW4gaW4gQy4KKyAgVGhlcmVmb3JlLCB0aGVz ZSByb3V0aW5lcyBhcmUgaW50ZW5kZWQgbWFpbmx5IGZvciBnZW5lcmF0aW5nIG51bWVyaWMgc3Ry aW5ncworICBmb3Igc2hvcnQtdGVybSB1c2UsIGUuZy4gZm9yIHBhc3NpbmcgbnVtYmVycyBpbiBz dHJpbmcgZm9ybSBhcyBwYXJhbWV0ZXJzIHRvCisgIGZ1bmN0aW9ucy4gIEZvciBsb25nLXRlcm0g dXNlLCB0aGUgcmVzdWx0IG11c3QgYmUgY29waWVkIHRvIGEgc2FmZSBwbGFjZS4KKyovCitjaGFy ICoKKyNpZmRlZiBDS19BTlNJQworY2tsdG9hKGxvbmcgbikKKyNlbHNlCitja2x0b2EobikgbG9u ZyBuOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBja2x0b2EgKi8geworICAgIGNoYXIgYnVm WzMyXTsJCQkvKiBJbnRlcm5hbCB3b3JraW5nIGJ1ZmZlciAqLworICAgIGNoYXIgKiBwLCAqIHMs ICogcTsKKyAgICBpbnQgaywgeCwgbGVuID0gMCwgc2lnbiA9IDA7CisgICAgaWYgKG4gPCAwTCkg ewkJCS8qIFNpZ24gKi8KKwluID0gMEwgLSBuOworCXNpZ24gPSAxOworICAgIH0KKyAgICBidWZb MzFdID0gTlVMOworICAgIGZvciAoayA9IDMwOyBrID4gMDsgay0tKSB7CQkvKiBDb252ZXJ0IG51 bWJlciB0byBzdHJpbmcgKi8KKwl4ID0gbiAlIDEwTDsKKwlidWZba10gPSB4ICsgJzAnOworCW4g PSBuIC8gMTBMOworCWlmICghbikKKwkgIGJyZWFrOworICAgIH0KKyAgICBpZiAoc2lnbikgYnVm Wy0ta10gPSAnLSc7CQkvKiBBZGQgc2lnbiBpZiBuZWNlc3NhcnkgKi8KKyAgICBsZW4gPSAzMSAt IGs7CisgICAgaWYgKGxlbiArIG51bWJwID4gTlVNQlVGKQorICAgICAgbnVtYnAgPSAwOworICAg IHAgPSBudW1idWYgKyBudW1icDsKKyAgICBxID0gcDsKKyAgICBzID0gYnVmICsgazsKKyAgICB3 aGlsZSAoKCpwKysgPSAqcysrKSkgOwkJLyogQ29weSAqLworICAgICpwKysgPSBOVUw7CisgICAg bnVtYnAgKz0gbGVuKzE7CisgICAgcmV0dXJuKHEpOwkJCQkvKiBSZXR1cm4gcG9pbnRlciAqLwor fQorCisvKiAgQyBLIFUgTCBUIE8gQSAgLS0gIFVuc2lnbmVkIGxvbmcgdG8gc3RyaW5nICAqLwor CitjaGFyICoKKyNpZmRlZiBDS19BTlNJQworY2t1bHRvYSh1bnNpZ25lZCBsb25nIG4pCisjZWxz ZQorY2t1bHRvYShuKSB1bnNpZ25lZCBsb25nIG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8q IGNrdWx0b2EgKi8geworICAgIGNoYXIgYnVmWzMyXTsJCQkvKiBJbnRlcm5hbCB3b3JraW5nIGJ1 ZmZlciAqLworICAgIGNoYXIgKiBwLCAqIHMsICogcTsKKyAgICBpbnQgaywgeCwgbGVuID0gMDsK KyAgICBidWZbMzFdID0gTlVMOworICAgIGZvciAoayA9IDMwOyBrID4gMDsgay0tKSB7CQkvKiBD b252ZXJ0IG51bWJlciB0byBzdHJpbmcgKi8KKwl4ID0gbiAlIDEwTDsKKwlidWZba10gPSB4ICsg JzAnOworCW4gPSBuIC8gMTBMOworCWlmICghbikKKwkgIGJyZWFrOworICAgIH0KKyAgICBsZW4g PSAzMSAtIGs7CisgICAgaWYgKGxlbiArIG51bWJwID4gTlVNQlVGKQorICAgICAgbnVtYnAgPSAw OworICAgIHAgPSBudW1idWYgKyBudW1icDsKKyAgICBxID0gcDsKKyAgICBzID0gYnVmICsgazsK KyAgICB3aGlsZSAoKCpwKysgPSAqcysrKSkgOwkJLyogQ29weSAqLworICAgIG51bWJwICs9IGxl bisxOworICAgIHJldHVybihxKTsJCQkJLyogUmV0dXJuIHBvaW50ZXIgKi8KK30KKworY2hhciAq CisjaWZkZWYgQ0tfQU5TSUMKK2NrbHRveChsb25nIG4pCQkJCS8qIExvbmcgaW50IHRvICIweC4u IiBoZXggc3RyaW5nICovCisjZWxzZQorY2tsdG94KG4pIGxvbmcgbjsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworLyogY2tsdG94ICovIHsKKyAgICBjaGFyIGJ1ZlszMl07CQkJLyogSW50ZXJuYWwg d29ya2luZyBidWZmZXIgKi8KKyAgICBjaGFyICpwLCAqcSwgKnMsICpicCA9IGJ1ZiArIDI7Cisg ICAgaW50IGs7CisgICAgYnVmWzBdID0gJzAnOworICAgIGJ1ZlsxXSA9ICd4JzsKKyAgICBzcHJp bnRmKGJwLCAiJWx4Iiwgbik7CisgICAgayA9IHN0cmxlbihicCk7CisgICAgaWYgKGsmMSkgewor CXNwcmludGYoYnAsICIwJWx4Iiwgbik7CisJaysrOworICAgIH0KKyAgICBrICs9IDI7CQkJCS8q ICIweCIgKi8KKyAgICBpZiAobnVtYnAgKyBrID49IE5VTUJVRikKKyAgICAgIG51bWJwID0gMDsK KyAgICBwID0gbnVtYnVmICsgbnVtYnA7CisgICAgcSA9IHA7CisgICAgcyA9IGJ1ZjsKKyAgICB3 aGlsZSAoKCpwKysgPSAqcysrKSkgOwkJLyogQ29weSAqLworICAgICpwKysgPSBOVUw7CisgICAg bnVtYnAgKz0gaysxOworICAgIHJldHVybihxKTsJCQkJLyogUmV0dXJuIHBvaW50ZXIgKi8KK30K KworCisvKiAgQyBLIEYgUyBUIE8gQSAgLS0gIEZpbGUgU2l6ZSAob3Igb2Zmc2V0KSB0byBzdHJp bmcgICovCisKKy8qIFRoaXMgaXMganVzdCBsaWtlIGNrbHRvYSgpIGV4Y2VwdCBmb3IgdGhlIGRh dGEgdHlwZSBvZiB0aGUgYXJndW1lbnQuICovCisvKiBJdCdzIG1haW5seSBmb3IgcHJpbnRpbmcg ZmlsZSBzaXplcyB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZWlyIGRhdGEgKi8KKy8qIHR5cGUs IHNvIHdlIGRvbid0IGhhdmUgdG8gaGFyZHdhcmUgIiVsZCIgb3IgIiVsbGQiIGludG8gcHJpbnRm KClzLiAqLworLyogV29ya3MgZm9yIDMyIG9yIDY0IGJpdHMsIGFjY29yZGluZyB0byBDS19PRkZf VCBkZWZpbml0aW9uLiAqLworCitjaGFyICoKKyNpZmRlZiBDS19BTlNJQworY2tmc3RvYShDS19P RkZfVCBuKQorI2Vsc2UKK2NrZnN0b2EobikgQ0tfT0ZGX1QgbjsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogY2tmc3RvYSAqLyB7CisgICAgY2hhciBidWZbMzJdOwkJCS8qIEludGVybmFsIHdv cmtpbmcgYnVmZmVyICovCisgICAgY2hhciAqIHAsICogcywgKiBxOworICAgIGludCBrLCB4LCBs ZW4gPSAwLCBzaWduID0gMDsKKworICAgIGlmIChuIDwgKENLX09GRl9UKTApIHsJCS8qIFNpZ24g Ki8KKwluID0gKENLX09GRl9UKTAgLSBuOworCXNpZ24gPSAxOworICAgIH0KKyAgICBidWZbMzFd ID0gTlVMOwkJCS8qIDJeNjMtMSBpcyBhYm91dCAyMCBkZWNpbWFsIGRpZ2l0cyAqLworICAgIGZv ciAoayA9IDMwOyBrID4gMDsgay0tKSB7CQkvKiBDb252ZXJ0IG51bWJlciB0byBzdHJpbmcgKi8K Kwl4ID0gbiAlIChDS19PRkZfVCkxMDsKKwlpZiAoeCA8IDApIHsKKwkgICAgLyogeCArPSAxMDsg Ki8KKwkgICAgY2tzdHJuY3B5KCZidWZbMjNdLCJPVkVSRkxPVyIsMzIpOworCSAgICBzaWduID0g MDsKKwkgICAgayA9IDIzOworCSAgICBicmVhazsKKwl9CisJYnVmW2tdID0geCArICcwJzsKKwlu ID0gbiAvIChDS19PRkZfVCkxMDsKKwlpZiAoIW4pCisJICBicmVhazsKKyAgICB9CisgICAgaWYg KHNpZ24pIGJ1ZlstLWtdID0gJy0nOwkJLyogQWRkIHNpZ24gaWYgbmVjZXNzYXJ5ICovCisgICAg bGVuID0gMzEgLSBrOworICAgIGlmIChsZW4gKyBudW1icCA+IE5VTUJVRikKKyAgICAgIG51bWJw ID0gMDsKKyAgICBwID0gbnVtYnVmICsgbnVtYnA7CisgICAgcSA9IHA7CisgICAgcyA9IGJ1ZiAr IGs7CisgICAgd2hpbGUgKCgqcCsrID0gKnMrKykpIDsJCS8qIENvcHkgKi8KKyAgICAqcCsrID0g TlVMOworICAgIG51bWJwICs9IGxlbisxOworICAgIHJldHVybihxKTsJCQkJLyogUmV0dXJuIHBv aW50ZXIgKi8KK30KKworLyogIEMgSyBBIFQgTyBGIFMgIC0tICBTdHJpbmcgdG8gRmlsZSBTaXpl IChvciBvZmZzZXQpICovCisKKy8qIFRoaXMgaXMgdGhlIGludmVyc2Ugb2YgY2tmc3RvYSgpLCBh IHJlcGxhY2VtZW50IGZvciBhdG9sKCkgdGhhdCB3b3JrcyAqLworLyogZm9yIGVpdGhlciAzMi1i aXQgb3IgNjQtYml0IGFyZ3VtZW50cywgYWNjb3JkaW5nIHRvIENLX09GRl9UIGRlZmluaXRpb24u ICovCisvKiBMaWtlIGF0b2woKSwgdGhlcmUgaXMgbm8gZXJyb3IgaW5kaWNhdGlvbi4gKi8KKwor Q0tfT0ZGX1QKKyNpZmRlZiBDS19BTlNJQworY2thdG9mcyhjaGFyICogcykKKyNlbHNlCitja2F0 b2ZzKHMpIGNoYXIgKiBzOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBja2F0b2ZzICovIHsK KyAgICBDS19PRkZfVCByZXN1bHQgPSAoQ0tfT0ZGX1QpMDsKKyAgICBpbnQgbWludXMgPSAwOwor ICAgIHdoaWxlICgqcyAmJiAoKnMgPT0gU1AgfHwgKnMgPT0gSFQpKSBzKys7CisgICAgaWYgKCpz ID09ICcrJykgcysrOworICAgIGlmICgqcyA9PSAnLScpIHsKKwltaW51cyA9IDE7CisJcysrOwor ICAgIH0KKyAgICB3aGlsZSAoaXNkaWdpdCgqcykpIHsKKwlyZXN1bHQgPSAocmVzdWx0ICogKENL X09GRl9UKTEwKSArIChDS19PRkZfVCkoKnMgLSAnMCcpOworCXMrKzsKKyAgICB9CisgICAgcmV0 dXJuKG1pbnVzID8gLXJlc3VsdCA6IHJlc3VsdCk7Cit9CisKKy8qICBDIEsgSSBUIE8gQSAgLS0g IEludCB0byBzdHJpbmcgIC0tIEZPUiBESVNDSVBMSU5FRCBVU0UgT05MWSAgKi8KKworY2hhciAq Citja2l0b2EobikgaW50IG47IHsJCQkvKiBTZWUgY29tbWVudHMgd2l0aCBja2x0b2EoKS4gKi8K KyAgICBsb25nIG5uOworICAgIG5uID0gbjsKKyAgICByZXR1cm4oY2tsdG9hKG5uKSk7Cit9CisK KworY2hhciAqCQkJCQkvKiBVbnNpZ25lZCBpbnQgdG8gc3RyaW5nICovCitja3VpdG9hKG4pIHVu c2lnbmVkIGludCBuOyB7CisgICAgdW5zaWduZWQgbG9uZyBubjsKKyAgICBubiA9IG47CisgICAg cmV0dXJuKGNrdWx0b2Eobm4pKTsKK30KKworY2hhciAqCitja2l0b3gobikgaW50IG47IHsJCQkv KiBJbnQgdG8gaGV4ICovCisgICAgbG9uZyBubjsKKyAgICBubiA9IG47CisgICAgcmV0dXJuKGNr bHRveChubikpOworfQorCitjaGFyICoKKyNpZmRlZiBDS19BTlNJQworY2tjdG9hKGNoYXIgYykJ CQkJLyogQ2hhciB0byBzdHJpbmcgKi8KKyNlbHNlCitja2N0b2EoYykgY2hhciBjOworI2VuZGlm CisvKiBja2N0b2EgKi8geworICAgIHN0YXRpYyBjaGFyIGJ1ZlszMl07CisgICAgc3RhdGljIGlu dCBjdXJyZW50ID0gMDsKKyAgICBpZiAoY3VycmVudCA+PSAzMCkKKyAgICAgIGN1cnJlbnQgPSAw OworICAgIGJ1ZltjdXJyZW50KytdID0gYzsKKyAgICBidWZbY3VycmVudCsrXSA9ICdcMCc7Cisg ICAgcmV0dXJuKChjaGFyICopKGJ1ZiArIGN1cnJlbnQgLSAyKSk7Cit9CisKK2NoYXIgKgorI2lm ZGVmIENLX0FOU0lDCitja2N0b3goQ0hBUiBjLCBpbnQgZmxhZykJCS8qIFVuc2lnbmVkIGNoYXIg dG8gaGV4ICovCisjZWxzZQorY2tjdG94KGMsIGZsYWcpIENIQVIgYzsgaW50IGZsYWc7CisjZW5k aWYKKy8qIGNrY3RveCAqLyB7CisgICAgc3RhdGljIGNoYXIgYnVmWzQ4XTsKKyAgICBzdGF0aWMg aW50IGN1cnJlbnQgPSAwOworICAgIGludCB4OworICAgIGNoYXIgaDsKKyAgICBpZiAoY3VycmVu dCA+IDQ1KQorICAgICAgY3VycmVudCA9IDA7CisgICAgeCA9IChjID4+IDQpICYgMHgwZjsKKyAg ICBoID0gcnhkaWdpdHNbeF07CisgICAgaWYgKCFmbGFnICYmIGlzdXBwZXIocnhkaWdpdHNbeF0p KQorICAgICAgaCA9IHRvbG93ZXIocnhkaWdpdHNbeF0pOworICAgIGJ1ZltjdXJyZW50KytdID0g aDsKKyAgICB4ID0gYyAmIDB4MGY7CisgICAgaCA9IHJ4ZGlnaXRzW3hdOworICAgIGlmICghZmxh ZyAmJiBpc3VwcGVyKHJ4ZGlnaXRzW3hdKSkKKyAgICAgIGggPSB0b2xvd2VyKHJ4ZGlnaXRzW3hd KTsKKyAgICBidWZbY3VycmVudCsrXSA9IGg7CisgICAgYnVmW2N1cnJlbnQrK10gPSAnXDAnOwor ICAgIHJldHVybigoY2hhciAqKShidWYgKyBjdXJyZW50IC0gMykpOworfQorCisvKiAgQyBLIEkg TiBEIEUgWCAgLS0gIEMtS2VybWl0J3MgaW5kZXggZnVuY3Rpb24gICovCisvKgorICBXZSBjYW4n dCBkZXBlbmQgb24gQyBsaWJyYXJpZXMgdG8gaGF2ZSBvbmUsIHNvIGhlcmUgaXMgb3VyIG93bi4K KyAgQ2FsbCB3aXRoOgorICAgIHMxIC0gU3RyaW5nIHRvIGxvb2sgZm9yLgorICAgIHMyIC0gU3Ry aW5nIHRvIGxvb2sgaW4uCisgICAgIHQgLSBPZmZzZXQgZnJvbSByaWdodCBvciBsZWZ0IG9mIHMy LCAwIGJhc2VkOyAtMSBmb3IgcmlnaHRtb3N0IGNoYXIgaW4gczIuCisgICAgIHIgLSAwIGZvciBs ZWZ0LXRvLXJpZ2h0IHNlYXJjaCwgbm9uLTAgZm9yIHJpZ2h0LXRvLWxlZnQuCisgIGljYXNlICAw IGZvciBjYXNlIGluZGVwZW5kZW5jZSwgbm9uLTAgaWYgYWxwaGFiZXRpYyBjYXNlIG1hdHRlcnMu CisgIFJldHVybnMgMCBpZiBzdHJpbmcgbm90IGZvdW5kLCBvdGhlcndpc2UgYSAxLWJhc2VkIHJl c3VsdC4KKyAgQWxzbyByZXR1cm5zIDAgb24gYW55IGtpbmQgb2YgZXJyb3IsIGUuZy4ganVuayBw YXJhbWV0ZXJzLgorKi8KK2ludAorY2tpbmRleChzMSxzMix0LHIsaWNhc2UpIGNoYXIgKnMxLCAq czI7IGludCB0LCByLCBpY2FzZTsgeworICAgIGludCBsZW4xID0gMCwgbGVuMiA9IDAsIGksIGos IHgsIG90ID0gdDsgLyogb3QgPSBvcmlnaW5hbCB0ICovCisgICAgY2hhciAqIHM7CisKKyAgICBp ZiAoIXMxIHx8ICFzMikgcmV0dXJuKDApOworICAgIHMgPSBzMTsKKyAgICB3aGlsZSAoKnMrKykg bGVuMSsrOwkJLyogbGVuZ3RoIG9mIHN0cmluZyB0byBsb29rIGZvciAqLworICAgIHMgPSBzMjsK KyAgICB3aGlsZSAoKnMrKykgbGVuMisrOwkJLyogbGVuZ3RoIG9mIHN0cmluZyB0byBsb29rIGlu ICovCisgICAgcyA9IHMyOworICAgIGlmICh0IDwgMCkgdCA9IGxlbjIgLSAxOworCisgICAgaiA9 IGxlbjIgLSBsZW4xOwkJCS8qIGxlbmd0aCBkaWZmZXJlbmNlICovCisKKyAgICBpZiAoaiA8IDAg fHwgKHIgPT0gMCAmJiB0ID4gaikpCS8qIHNlYXJjaCBzdHJpbmcgaXMgbG9uZ2VyICovCisgICAg ICByZXR1cm4oMCk7CisgICAgaWYgKHIgPT0gMCkgewkJCS8qIEluZGV4ICovCisJcyA9IHMyICsg dDsJCQkvKiBQb2ludCB0byBiZWdpbm5pbmcgb2YgdGFyZ2V0ICovCisJZm9yIChpID0gMDsgaSA8 PSAoaiAtIHQpOyBpKyspIHsgLyogTm93IGNvbXBhcmUgKi8KKwkgICAgeCA9IGNrc3RyY21wKHMx LHMrKyxsZW4xLGljYXNlKTsKKwkgICAgaWYgKCF4KQorCSAgICAgIHJldHVybihpKzErdCk7CisJ fQorICAgIH0gZWxzZSB7CQkJCS8qIFJldmVyc2UgSW5kZXggKi8KKyAgICAgICAgaSA9IGxlbjIg LSBsZW4xOwkJLyogV2hlcmUgdG8gc3RhcnQgbG9va2luZyAqLworICAgICAgICBpZiAob3QgPiAw KQkJCS8qIEZpZ3VyZSBpbiBvZmZzZXQgaWYgYW55ICovCisJICBpIC09IHQ7CisJZm9yIChqID0g aTsgaiA+IC0xOyBqLS0pIHsKKwkgICAgaWYgKCFja3N0cmNtcChzMSwmczJbal0sbGVuMSxpY2Fz ZSkpCisJICAgICAgcmV0dXJuKGorMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisK Ky8qICBDIEsgUyBUIFIgUyBUIFIgIC0tICBQb3J0YWJsZSByZXBsYWNlbWVudCBmb3Igc3Ryc3Ry KCkgICovCisKKy8qICBSZXR1cm5zIHBvaW50ZXIgdG8gZmlyc3Qgb2NjdXJyZW5jZSBvZiBzMSBp biBzMiwgb3IgTlVMTCAqLworCitjaGFyICoKK2Nrc3Ryc3RyKHMxLCBzMikgY2hhciAqIHMxLCAq IHMyOyB7CisgICAgaW50IGs7CisgICAgayA9IGNraW5kZXgoczIsczEsMCwwLDEpOworICAgIHJl dHVybigoayA8IDEpID8gTlVMTCA6ICZzMVtrLTFdKTsKK30KKworCisvKiAgQiBSIFMgVCBSIEkg UCAgLS0gIFN0cmlwIGVuY2xvc2luZyBicmFjZXMgZnJvbSBhcmcgc3RyaW5nLCBpbiBwbGFjZS4g Ki8KKy8qCisgIENhbGwgd2l0aDoKKyAgICBQb2ludGVyIHRvIHN0cmluZyB0aGF0IGNhbiBiZSBw b2tlZC4KKyAgUmV0dXJuczoKKyAgICBQb2ludGVyIHRvIHN0cmluZyB3aXRob3V0IGVuY2xvc2lu ZyBicmFjZXMuCisgICAgSWYgb3JpZ2luYWwgc3RyaW5nIHdhcyBub3QgYnJhY2VkLCB0aGlzIGlz IHRoZSBhcmcgcG9pbnRlcjsKKyAgICBvdGhlcndpc2UgaXQgaXMgMSArIHRoZSBhcmcgcG9pbnRl ciwgd2l0aCB0aGUgbWF0Y2hpbmcgY2xvc2luZworICAgIGJyYWNlIHplcm8nZCBvdXQuICBJZiB0 aGUgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgYnJhY2UgYnV0IGRvZXMKKyAgICBub3QgZW5kIHdpdGgg YSBtYXRjaGluZyBicmFjZSwgdGhlIG9yaWdpbmFsIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsCisg ICAgc3RyaW5nIGlzIHJldHVybmVkLiAgSWYgdGhlIGFyZyBwb2ludGVyIGlzIE5VTEwsIGEgcG9p bnRlciB0byBhbgorICAgIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKyovCisjaWZkZWYgQ09N TUVOVAorCisvKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBoYW5kbGluZyBvbmx5IGJy YWNlcyAqLworCitjaGFyICoKK2Jyc3RyaXAocCkgY2hhciAqcDsgeworICAgIGlmICghcCkgcmV0 dXJuKCIiKTsKKyAgICBpZiAoKnAgPT0gJ3snKSB7CisJaW50IHg7CisJeCA9IChpbnQpc3RybGVu KHApIC0gMTsKKwlpZiAocFt4XSA9PSAnfScpIHsKKwkgICAgcFt4XSA9IE5VTDsKKwkgICAgcCsr OworCX0KKyAgICB9CisgICAgcmV0dXJuKHApOworfQorCisjZWxzZQorLyogTmV3IHZlcnNpb24g aGFuZGxlcyBicmFjZXMgYW5kIGRvdWJsZXF1b3RlcyAqLworLyogV0FSTklORzogdGhpcyBmdW5j dGlvbiB3cml0ZXMgaW50byBpdHMgYXJndW1lbnQsIGl0IGFsd2F5cyBoYXMuICovCisKK2NoYXIg KgorYnJzdHJpcChwKSBjaGFyICpwOyB7CisgICAgaWYgKCFwKSByZXR1cm4oIiIpOworICAgIGlm ICgqcCA9PSAneycgfHwgKCpwID09ICciJyAmJiBkYmxxdW8pKSB7CisJaW50IHg7CisJeCA9IChp bnQpc3RybGVuKHApIC0gMTsKKwlpZiAoeCA+IDApIHsKKwkgICAgaWYgKCgqcCA9PSAneycgJiYg cFt4XSA9PSAnfScpIHx8CisJCSgqcCA9PSAnIicgJiYgcFt4XSA9PSAnIicpKSB7CisJCWlmICh4 ID4gMCAmJiBwW3gtMV0gIT0gQ01EUSkgeworCQkgICAgcFt4XSA9IE5VTDsKKwkJICAgIHArKzsK KwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4ocCk7Cit9CisjZW5kaWYgLyogQ09N TUVOVCAqLworCisjaWZkZWYgQ09NTUVOVAorCisvKiBFdmVuIG5ld2VyIGV4cGVyaW1lbnRhbCB2 ZXJzaW9uIC0tIGJyZWFrcyBtYW55IHRoaW5ncyAqLworCitjaGFyICoKK2Zuc3RyaXAocCkgY2hh ciAqcDsgeworICAgIGludCBpLCBqLCBrLCBuLCBsZW47CisgICAgZXh0ZXJuIGludCBjbWRfcXVv dGluZzsJCS8qIEJhZCAtIG5vIGV4dGVybnMgYWxsb3dlZCEgKi8KKworICAgIGlmICghcCkKKyAg ICAgIHJldHVybigiIik7CisKKyAgICBpZiAoKnAgPT0gJ3snKSB7CisgICAgICAgIGxlbiA9IHN0 cmxlbihwKTsKKyAgICAgICAgbiA9IDA7CisKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsg aisrICkgeworICAgICAgICAgICAgaWYgKHBbal0gPT0gJ3snICYmCisJCSghY21kX3F1b3Rpbmcg fHwgaiA9PSAwIHx8IHBbai0xXSAhPSBDTURRKSkgeworICAgICAgICAgICAgICAgIGZvciAobiA9 IDEsIGkgPSBqKzE7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBb aV0gPT0gJ3snICYmICghY21kX3F1b3RpbmcgfHwgcFtpLTFdICE9IENNRFEpKQorCQkgICAgICBu Kys7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBbaV0gPT0gJ30nICYmICghY21kX3F1 b3RpbmcgfHwgcFtpLTFdICE9IENNRFEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo LS1uID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSBqOyBrIDwg aSAtIDE7IGsrKykKKwkJCSAgICAgIHBba10gPSBwW2srMV07CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm9yICg7IGkgPCBsZW47IGkrKyApCisJCQkgICAgICBwW2ktMV0gPSBwW2krMV07 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDI7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaiA9IGkgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGlmIChuID09IDEpIHsgLyogSW1wbGllZCByaWdodCBicmFjZSBhdCBlbmQg b2YgZmllbGQgKi8KKyAgICAgICAgICAgIGZvciAoayA9IGo7IGsgPCBsZW47IGsrKykKKwkgICAg ICBwW2tdID0gcFtrKzFdOworICAgICAgICAgICAgbGVuIC09IDE7CisgICAgICAgIH0KKyAgICB9 IGVsc2UgaWYgKCpwID09ICciJykgeworICAgICAgICBsZW4gPSBzdHJsZW4ocCk7CisgICAgICAg IG4gPSAwOworCisgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW47IGorKykgeworICAgICAgICAg ICAgaWYgKHBbal0gPT0gJyInICYmCisJCSghY21kX3F1b3RpbmcgfHwgaiA9PSAwIHx8IHBbai0x XSAhPSBDTURRKSkgeworICAgICAgICAgICAgICAgIG4rKzsKKworICAgICAgICAgICAgICAgIGZv ciAoaSA9IGogKyAxOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBb aV0gPT0gJyInICYmICghY21kX3F1b3RpbmcgfHwgcFtpLTFdICE9IENNRFEpKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBuLS07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9 IGo7IGsgPCBpIC0gMTsgaysrKQorCQkJICBwW2tdID0gcFtrKzFdOworICAgICAgICAgICAgICAg ICAgICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykKKwkJCSAgcFtpLTFdID0gcFtpKzFdOworICAg ICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBq ID0gaSAtIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG4gPT0gMSkgeyAvKiBJbXBsaWVkIGRv dWJsZSBxdW90ZSBhdCBlbmQgb2YgZmllbGQgKi8KKyAgICAgICAgICAgIGZvciAoayA9IGo7IGsg PCBsZW47IGsrKyApCisJICAgICAgcFtrXSA9IHBbaysxXTsKKyAgICAgICAgICAgIGxlbiAtPSAx OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybihwKTsKK30KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKyNpZmRlZiBDT01NRU5UCisvKgorICBOb3QgdXNlZCAtLSBOb3RlOiB0aGVzZSBub3Qg b25seSB3cml0ZSBpbnRvIHRoZWlyIGFyZywgYnV0IHdyaXRlIHBhc3QKKyAgcGFzdCB0aGUgZW5k LgorKi8KK2NoYXIgKgorYnJhY2UoZm4pIGNoYXIgKmZuOyB7CisgICAgaW50IHNwYWNlcyA9IDA7 CisgICAgY2hhciAqIHAsIGNoLCBjaDI7CisgICAgZm9yIChwID0gZm47ICpwOyBwKyspIHsKKwlp ZiAoKnAgPT0gU1ApIHsKKwkgICAgc3BhY2VzID0gMTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0K KyAgICBpZiAoc3BhY2VzKSB7CisgICAgICAgIHAgPSBmbjsKKyAgICAgICAgY2ggPSAqcDsKKyAg ICAgICAgKnAgPSAneyc7CisgICAgICAgIHArKzsKKworICAgICAgICB3aGlsZSAoKnApIHsKKyAg ICAgICAgICAgIGNoMiA9ICpwOworICAgICAgICAgICAgKnAgPSBjaDsKKyAgICAgICAgICAgIGNo ID0gY2gyOworICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgICpwID0gY2g7Cisg ICAgICAgIHArKzsKKyAgICAgICAgKnAgPSAnfSc7CisgICAgICAgIHArKzsKKyAgICAgICAgKnAg PSAnXDAnOworICAgIH0KKyAgICByZXR1cm4oZm4pOworfQorI2VuZGlmIC8qIENPTU1FTlQgKi8K KworLyogZCBxIHUgbyB0IGUgIC0tICBQdXRzIGRvdWJsZXF1b3RlcyBhcm91bmQgYXJnIGluIHBs YWNlLiAqLworLyoKKyAgIENhbGwgd2l0aDoKKyAgICAgUG9pbnRlciB0byBidWZmZXIgYW5kIGl0 cyB0b3RhbCBsZW5ndGggYW5kIGZsYWcgPSAwIHRvIHVzZQorICAgICBkb3VibGVxdW90ZXMsIDEg dG8gdXNlIGJyYWNlcy4KKyAgIFJldHVybnM6CisgICAgIE51bWJlcjogbGVuZ3RoIG9mIHJlc3Vs dC4KKyovCitpbnQKK2RxdW90ZShmbiwgbGVuLCBmbGFnKSBjaGFyICpmbjsgaW50IGxlbjsgaW50 IGZsYWc7IHsKKyAgICBpbnQgc3BhY2VzID0gMCwgayA9IDA7CisgICAgY2hhciAqIHAsIGNoLCBj aDI7CisgICAgaWYgKCFmbikKKyAgICAgIHJldHVybigwKTsKKworICAgIGsgPSBzdHJsZW4oZm4p OworICAgIGZvciAocCA9IGZuOyAqcDsgcCsrKSB7CisJaWYgKCpwID09IFNQKSB7CisgICAgICAg ICAgICBzcGFjZXMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg ICAgaWYgKHNwYWNlcykgeworCWlmIChrICsgMiA+PSBsZW4pCisJICByZXR1cm4oayk7CisgICAg ICAgIHAgPSBmbjsKKyAgICAgICAgY2ggPSAqcDsKKyAgICAgICAgKnAgPSBmbGFnID8gJ3snIDog JyInOworICAgICAgICBwKys7CisKKyAgICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAgICBj aDIgPSAqcDsKKyAgICAgICAgICAgICpwID0gY2g7CisgICAgICAgICAgICBjaCA9IGNoMjsKKyAg ICAgICAgICAgIHArKzsKKyAgICAgICAgfQorICAgICAgICAqcCA9IGNoOworICAgICAgICBwKys7 CisgICAgICAgICpwID0gZmxhZyA/ICd9JyA6ICciJzsKKyAgICAgICAgcCsrOworICAgICAgICAq cCA9ICdcMCc7CisgICAgfQorICAgIHJldHVybihrKzIpOworfQorCisKKy8qICBVIE4gVCBBIEIg SSBGIFkgIC0tLSAgVW50YWJpZnkgczEgaW50byBzMiwgYXNzdW1pbmcgdGFicyBldmVyeSA4IHNw YWNlICovCisKK2ludAordW50YWJpZnkoczEsczIsbWF4KSBjaGFyICogczEsICogczI7IGludCBt YXg7IHsKKyAgICBpbnQgaSwgaiwgaywgeCwgejsKKyAgICB4ID0gc3RybGVuKHMxKTsKKyAgICBm b3IgKGkgPSAwLCBrID0gMDsgayA8IHg7IGsrKykgeworCWlmIChzMVtrXSAhPSAnXHQnKSB7CisJ ICAgIGlmIChpID49IG1heC0xKSB7CisJCXMyW21heC0xXSA9ICdcMCc7CisJCXJldHVybigtMSk7 CisJICAgIH0KKwkgICAgczJbaSsrXSA9IHMxW2tdOworCSAgICBjb250aW51ZTsKKwl9CisJeiA9 IDggLSBpJTg7CisJaWYgKHogPT0gMCkgeiA9IDg7CisJZm9yIChqID0gMDsgaiA8IHogJiYgaSA8 IG1heDsgaisrKQorCSAgczJbaSsrXSA9ICcgJzsKKyAgICB9CisgICAgczJbaV0gPSAnXDAnOwor ICAgIHJldHVybigwKTsKK30KKworCisvKiAgTSBBIEsgRSBMIEkgUyBUICAtLS0gIEJyZWFrcyB7 e3MxfXtzMn0uLntzbn19IGludG8gYW4gYXJyYXkgb2Ygc3RyaW5ncyAqLworLyoKKyAgQ2FsbCB3 aXRoOgorICAgIHMgICAgPSBwb2ludGVyIHRvIHN0cmluZyB0byBicmVhayB1cC4KKyAgICBsaXN0 ID0gYXJyYXkgb2Ygc3RyaW5nIHBvaW50ZXJzLgorICAgIGxlbiAgPSBudW1iZXIgb2YgZWxlbWVu dHMgaW4gYXJyYXkuCisgIE5PVEU6IFRoZSBhcnJheSBtdXN0IGJlIHByZWluaXRpYWxpemVkIHRv IGFsbCBOVUxMIHBvaW50ZXJzLgorICBJZiBhbnkgYXJyYXkgZWxlbWVudCBpcyBub3QgTlVMTCwg aXQgaXMgYXNzdW1lZCB0byBoYXZlIGJlZW4gbWFsbG9jJ2QKKyAgYW5kIGlzIHRoZXJlZm9yZSBm cmVlZC4gIERvIE5PVCBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBhbiB1bmluaXRpYWxpemVkCisg IGFycmF5LCBvciB3aXRoIGFuIGFycmF5IHRoYXQgaGFzIGhhZCBhbnkgc3RhdGljIGVsZW1lbnRz IGFzc2lnbmVkIHRvIGl0LgorKi8KK1ZPSUQKK21ha2VsaXN0KHMsbGlzdCxsZW4pIGNoYXIgKiBz OyBjaGFyICpsaXN0W107IGludCBsZW47IHsKKyAgICBpbnQgaSwgbiwgcSwgYmMgPSAwOworICAg IGNoYXIgKnAgPSBOVUxMLCAqczIgPSBOVUxMOworICAgIGRlYnVnKEYxMTAsIm1ha2VsaXN0IHMi LHMsMCk7CisgICAgaWYgKCFzKSB7CQkJCS8qIENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmlu ZyAqLworCWxpc3RbMF0gPSBOVUxMOworCXJldHVybjsKKyAgICB9CisgICAgbiA9IHN0cmxlbihz KTsKKyAgICBpZiAobiA9PSAwKSB7CisJbGlzdFswXSA9IE5VTEw7CisJcmV0dXJuOworICAgIH0K KyAgICBpZiAoKHMyID0gKGNoYXIgKiltYWxsb2MobisxKSkpIHsJLyogU2FmZSBjb3B5IGZvciBw b2tpbmcgKi8KKwlzdHJjcHkoczIscyk7CQkJLyogKG5vIG5lZWQgZm9yIGNrc3RybmNweSBoZXJl KSAqLworCXMgPSBzMjsKKyAgICB9CisgICAgcyA9IGJyc3RyaXAocyk7CQkJLyogU3RyaXAgYnJh Y2VzICovCisgICAgbiA9IHN0cmxlbihzKTsJCQkvKiBHZXQgbGVuZ3RoICovCisgICAgaWYgKCpz ICE9ICd7JykgewkJCS8qIE91dGVyIGJyYWNlcyBvbmx5ICovCisJaWYgKChwID0gKGNoYXIgKilt YWxsb2MobisxKSkpIHsgLyogU28ganVzdCBvbmUgcGF0dGVybiAqLworCSAgICBzdHJjcHkocCxz KTsJCS8qIChubyBuZWVkIGZvciBja3N0cm5jcHkgaGVyZSkgKi8KKwkgICAgaWYgKGxpc3RbMF0p CisJICAgICAgZnJlZShsaXN0WzBdKTsKKwkgICAgbGlzdFswXSA9IHA7CisJfQorCWlmIChzMikg ZnJlZShzMik7CisJcmV0dXJuOworICAgIH0KKyAgICBxID0gMDsJCQkJLyogSW5uZXIgb25lcyB0 b28gKi8KKyAgICBpID0gMDsJCQkJLyogc28gYSBsaXN0IG9mIHBhdHRlcm5zLiAqLworICAgIG4g PSAwOworICAgIHdoaWxlICgqcyAmJiBpIDwgbGVuKSB7CisJaWYgKCpzID09IENNRFEpIHsJCS8q IFF1b3RlLi4uICovCisJICAgIHEgPSAxOworCSAgICBzKys7CisJICAgIG4rKzsKKwkgICAgY29u dGludWU7CisJfQorCWlmICgqcyA9PSAneycgJiYgIXEpIHsJCS8qIE9wZW5pbmcgYnJhY2UgKi8K KwkgICAgaWYgKGJjKysgPT0gMCkgewkJLyogQmVnaW5uaW5nIG9mIGEgZ3JvdXAgKi8KKwkJcCA9 ICsrczsKKwkJbiA9IDA7CisJICAgIH0gZWxzZSB7CQkJLyogSXQncyBhIGJyYWNlIGluc2lkZSB0 aGUgZ3JvdXAgKi8KKwkJbisrOworCQlzKys7CisJICAgIH0KKwkgICAgY29udGludWU7CisJfSBl bHNlIGlmICgqcyA9PSAnfScgJiYgIXEpIHsJLyogQ2xvc2luZyBicmFjZSAqLworCSAgICBpZiAo LS1iYyA9PSAwKSB7CQkvKiBFbmQgb2YgYSBncm91cCAqLworCQkqcysrID0gTlVMOworCQlkZWJ1 ZyhGMTExLCJtYWtlbGlzdCBlbGVtZW50IixwLGkpOworCQlpZiAobGlzdFtpXSkKKwkJICBmcmVl KGxpc3RbaV0pOworCQlpZiAoKGxpc3RbaV0gPSAoY2hhciAqKW1hbGxvYyhuKzEpKSkgeworCQkg ICAgY2tzdHJuY3B5KGxpc3RbaV0scCxuKzEpOyAvKiBOb3RlOiBuKzEgKi8KKwkJICAgIGkrKzsK KwkJfQorCQl3aGlsZSAoKnMgPT0gU1ApIHMrKzsKKwkJcCA9IHM7CisJCW4gPSAwOworCQljb250 aW51ZTsKKwkgICAgfSBlbHNlIHsJCQkvKiBXaXRoaW4gYSBncm91cCAqLworCQluKys7CisJCXMr KzsKKwkgICAgfQorCX0gZWxzZSB7CQkJLyogUmVndWxhciBjaGFyYWN0ZXIgKi8KKwkgICAgcSA9 IDA7CisJICAgIHMrKzsKKwkgICAgbisrOworCX0KKyAgICB9CisgICAgaWYgKCpwICYmIGkgPCBs ZW4pIHsJCS8qIExhc3Qgb25lICovCisJaWYgKGxpc3RbaV0pCisJICBmcmVlKGxpc3RbaV0pOwor CWlmICgobGlzdFtpXSA9IChjaGFyICopbWFsbG9jKG4rMSkpKSB7CisJICAgIGNrc3RybmNweShs aXN0W2ldLHAsbisxKTsKKwkgICAgZGVidWcoRjExMSwibWFrZWxpc3QgbGFzdCBlbGVtZW50Iixw LGkpOworCX0KKyAgICB9CisgICAgaSsrOwkJCQkvKiBDbGVhciBvdXQgdGhlIHJlc3Qgb2YgdGhl IGxpc3QgKi8KKyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKykgeworCWlmIChsaXN0W2ldKQorCSAg ZnJlZSAobGlzdFtpXSk7CisJbGlzdFtpXSA9IE5VTEw7CisgICAgfQorICAgIGlmIChzMikgZnJl ZShzMik7Cit9CisKKy8qCisgICBNIEEgSyBFIFMgVCBSICAtLSAgQ3JlYXRlcyBhIGR5bmFtaWNh bGx5IGFsbG9jYXRlZCBzdHJpbmcuCisKKyAgIE1ha2VzIGEgbmV3IGNvcHkgb2Ygc3RyaW5nIHMg YW5kIHNldHMgcG9pbnRlciBwIHRvIGl0cyBhZGRyZXNzLgorICAgSGFuZGxlcyBkZWdlbmVyYXRl IGNhc2VzLCBsaWtlIHdoZW4gYnVmZmVycyBvdmVybGFwIG9yIGFyZSB0aGUgc2FtZSwKKyAgIG9u ZSBvciBib3RoIGFyZ3VtZW50cyBhcmUgTlVMTCwgZXRjLgorCisgICBUaGUgc291cmNlIHN0cmlu ZyBpcyBhc3N1bWVkIHRvIGJlIE5VTC10ZXJtaW5hdGVkLiAgVGhlcmVmb3JlIGl0IGNhbiBub3QK KyAgIGJlIGEgVUNTLTIgc3RyaW5nIG9yIGFyYml0cmFyeSBiaW5hcnkgZGF0YS4KKworICAgVGhl IHRhcmdldCBwb2ludGVyIG11c3QgYmUgZWl0aGVyIE5VTEwgb3IgZWxzZSBhIHBvaW50ZXIgdG8g YSBwcmV2aW91c2x5CisgICBtYWxsb2MnZWQgYnVmZmVyLiAgSWYgbm90LCBleHBlY3QgYSBjb3Jl IGR1bXAgb3Igc2VnbWVudGF0aW9uIGZhdWx0LgorCisgICBOb3RlOiBUaGUgY2FsbGVyIGNhbiB0 ZWxsIHdoZXRoZXIgdGhpcyByb3V0aW5lIGZhaWxlZCBhcyBmb2xsb3dzOgorCisgICAgIG1hbGxv YygmcCxxKTsKKyAgICAgaWYgKHEgJiAhcCkgeyBtYWtlc3RyKCkgZmFpbGVkIH07CisKKyAgIFJl YWxseSB0aGlzIHJvdXRpbmUgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYSBsZW5ndGgsIGJ1dCBzaW5j ZSBpdCBkb2Vzbid0CisgICB3ZSBzZXQgdGhlIGdsb2JhbCB2YXJpYWJsZSBtYWtlc3RybGVuIHRv IHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBzdHJpbmcuCisqLworaW50IG1ha2VzdHJsZW4gPSAw OworCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK21ha2VzdHIoY2hhciAqKnAsIGNvbnN0IGNoYXIg KnMpCisjZWxzZQorbWFrZXN0cihwLHMpIGNoYXIgKipwLCAqczsKKyNlbmRpZgorLyogbWFrZXN0 ciAqLyB7CisgICAgaW50IHggPSAwOworICAgIGNoYXIgKnEgPSBOVUxMOworI2lmZGVmIENLX0FO U0lDCisgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqIHMyOworI2Vsc2UKKyAgICByZWdpc3RlciBj aGFyICogczI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICByZWdpc3RlciBjaGFyICogcTI7 CisKKyAgICBpZiAoKnAgPT0gcykJCQkvKiBUaGUgdHdvIHBvaW50ZXJzIGFyZSB0aGUgc2FtZS4g Ki8KKyAgICAgIHJldHVybjsJCQkJLyogRG9uJ3QgZG8gYW55dGhpbmcuICovCisKKyAgICBpZiAo IXMpIHsJCQkJLyogTmV3IGRlZmluaXRpb24gaXMgbnVsbD8gKi8KKwlpZiAoKnApCQkJCS8qIEZy ZWUgb2xkIHN0b3JhZ2UuICovCisJICBmcmVlKCpwKTsKKwkqcCA9IE5VTEw7CQkJLyogUmV0dXJu IG51bGwgcG9pbnRlci4gKi8KKwltYWtlc3RybGVuID0gMDsKKwlyZXR1cm47CisgICAgfQorICAg IHMyID0gczsJCQkJLyogTWF5YmUgbmV3IHN0cmluZyB3aWxsIGZpdCAqLworCisjaWZkZWYgQ09N TUVOVAorLyoKKyAgVGhpcyBpcyBhIGZhaXJseSBiaWcgd2luLCBhbGxvd2luZyB1cyB0byBza2lw IHRoZSBtYWxsb2MoKSBhbmQgZnJlZSBpZiB0aGUKKyAgZGVzdGluYXRpb24gc3RyaW5nIGFscmVh ZHkgZXhpc3RzIGFuZCBpcyBub3Qgc2hvcnRlciB0aGFuIHRoZSBzb3VyY2Ugc3RyaW5nLgorICBC dXQgaXQgZG9lc24ndCBhbGxvdyBmb3IgcG9zc2libGUgb3ZlcmxhcCBvZiBzb3VyY2UgYW5kIGRl c3RpbmF0aW9uLgorKi8KKyAgICBpZiAoKnApIHsJCQkJLyogaW50byBvbGQgc3RvcmFnZS4uLiAq LworCWNoYXIgKiBwMiA9ICpwOworCWNoYXIgYzsKKwl3aGlsZSAoYyA9ICpwMikgeworCSAgICBp ZiAoISgqcDIrKyA9ICpzMisrKSkKKwkgICAgICBicmVhazsKKwkgICAgeCsrOworCX0KKwltYWtl c3RybGVuID0geDsKKwlpZiAoYykgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICov CisKKy8qIERpZG4ndCBmaXQgKi8KKworICAgIHggPSAwOworICAgIHdoaWxlICgqczIrKykgeCsr OwkJCS8qIEdldCAocmVzdCBvZikgbGVuZ3RoIG9mIHMuICAqLworCisgICAgaWYgKHggPj0gMCkg ewkJCS8qIEdldCBsZW5ndGgsIGV2ZW4gb2YgZW1wdHkgc3RyaW5nLiAqLworCXEgPSBtYWxsb2Mo eCsxKTsJCS8qIEdldCBhbmQgcG9pbnQgdG8gdGVtcCBzdG9yYWdlLiAqLworCWlmIChxKSB7CisJ ICAgIG1ha2VzdHJsZW4gPSB4OwkJLyogUmVtZW1iZXIgbGVuZ3RoIGZvciBzdGF0cyAqLworCSAg ICBzMiA9IHM7CQkJLyogUG9pbnQgYmFjayB0byBiZWdpbm5pbmcgb2Ygc291cmNlICovCisJICAg IHEyID0gcTsJCQkvKiBDb3B5IGRlc3QgcG9pbnRlciB0byBpbmNyZW1lbnQuLi4gKi8KKwkgICAg d2hpbGUgKCgqcTIrKyA9ICpzMisrKSkgOwkvKiBJbnN0ZWFkIG9mIGNhbGxpbmcgc3RyY3B5KCku ICovCisvKgorICBOb3RlOiBIUCBmbGV4ZWxpbnQgc2F5cyB0aGF0IHRoZSBhYm92ZSBsb29wIGNh biByZXN1bHQgaW4gY3JlYXRpb24gKCsrKSBhbmQKKyAgYWNjZXNzICgqKSBvZiBvdXQtb2YtYm91 bmRzIHBvaW50ZXJzLiAgSSByZWFsbHkgZG9uJ3Qgc2VlIGl0LgorKi8KKwl9CisjaWZkZWYgREVC VUcKKwllbHNlIHsJCQkJLyogVGhpcyB3b3VsZCBiZSBhIHJlYWxseSBiYWQgZXJyb3IgKi8KKwkg ICAgY2hhciB0bXBbMjRdOwkJLyogU28gZ2V0IGEgZ29vZCByZWNvcmQgb2YgaXQuICovCisJICAg IGlmICh4ID4gMjMpIHsKKwkJY2tzdHJuY3B5KHRtcCxzLDIwKTsKKwkJc3RyY3B5KHRtcCsyMCwi Li4uIik7CisJCXRtcFsyM10gPSBOVUw7CisJICAgIH0gZWxzZSB7CisJCXN0cmNweSh0bXAscyk7 CQkvKiBXZSBhbHJlYWR5IGNoZWNrZWQgdGhlIGxlbmd0aCAqLworCSAgICB9CisJICAgIGRlYnVn KEYxMTAsIk1BS0VTVFIgTUFMTE9DIEZBSUxVUkUgIix0bXAsMCk7CisJfQorI2VuZGlmIC8qIERF QlVHICovCisgICAgfSBlbHNlCisgICAgICBxID0gTlVMTDsJCQkJLyogTGVuZ3RoIG9mIHN0cmlu ZyBpcyB6ZXJvICovCisKKyAgICBpZiAoKnApCQkJCS8qIE5vdyBmcmVlIHRoZSBvcmlnaW5hbCBz dG9yYWdlLiAqLworICAgICAgZnJlZSgqcCk7CisgICAgKnAgPSBxOworfQorCisvKiAgWCBNIEEg SyBFIFMgVCBSICAtLSAgTm9uLWRlc3RydWN0aXZlIG1ha2VzdHIoKSBpZiBzIGlzIE5VTEwuICAq LworCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK3htYWtlc3RyKGNoYXIgKipwLCBjb25zdCBjaGFy ICpzKQorI2Vsc2UKK3htYWtlc3RyKHAscykgY2hhciAqKnAsICpzOworI2VuZGlmCisvKiB4bWFr ZXN0ciAqLyB7CisgICAgaWYgKHMpIG1ha2VzdHIocCxzKTsKK30KKworI2lmbmRlZiBVU0VfTUVN Q1BZCisvKiBDIEsgTSBFIE0gQyBQIFkgIC0tICBQb3J0YWJsZSAoYnV0IHNsb3cpIG1lbWNweSgp ICovCisKKy8qIENvcGllcyBuIGJ5dGVzIGZyb20gcyB0byBwLCBhbGxvd2luZyBmb3Igb3Zlcmxh cC4gKi8KKy8qIEZvciB1c2Ugd2hlbiByZWFsIG1lbWNweSgpIG5vdCBhdmFpbGFibGUuICovCisK K1ZPSUQKK2NrbWVtY3B5KHAscyxuKSBjaGFyICpwLCAqczsgaW50IG47IHsKKyAgICBjaGFyICog cSA9IE5VTEw7CisgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IHg7CisKKyAgICBpZiAoIXMg fHwgIXAgfHwgbiA8PSAwIHx8IHAgPT0gcykJLyogVmVyaWZ5IGFyZ3MgKi8KKyAgICAgIHJldHVy bjsKKyAgICB4ID0gcCAtIHM7CQkJCS8qIENoZWNrIGZvciBvdmVybGFwICovCisgICAgaWYgKHgg PCAwKQorICAgICAgeCA9IDAgLSB4OworICAgIGlmICh4IDwgbikgewkJCS8qIFRoZXkgb3Zlcmxh cCAqLworCXEgPSBwOworCWlmICghKHAgPSAoY2hhciAqKW1hbGxvYyhuKSkpCS8qIFNvIHVzZSBh IHRlbXBvcmFyeSBidWZmZXIgKi8KKwkgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykJCS8qIENvcHkgbiBieXRlcyAqLworICAgICAgcFtpXSA9IHNbaV07CisgICAg aWYgKHEpIHsJCQkJLyogSWYgd2UgdXNlZCBhIHRlbXBvcmFyeSBidWZmZXIgKi8KKwlmb3IgKGkg PSAwOyBpIDwgbjsgaSsrKQkJLyogY29weSBmcm9tIGl0IHRvIGRlc3RpbmF0aW9uICovCisJICBx W2ldID0gcFtpXTsKKwlpZiAocCkgZnJlZShwKTsJCQkvKiBhbmQgZnJlZSB0aGUgdGVtcG9yYXJ5 IGJ1ZmZlciAqLworICAgIH0KK30KKyNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCisKKworLyogIEMg SyBTIFQgUiBDIE0gUCAgLS0gIFN0cmluZyBjb21wYXJpc29uIHdpdGggY2FzZS1tYXR0ZXJzIHNl bGVjdGlvbiAqLworLyoKKyAgQ2FsbCB3aXRoIHBvaW50ZXJzIHRvIHRoZSB0d28gc3RyaW5ncywg czEgYW5kIHMyLCBhIGxlbmd0aCwgbiwKKyAgYW5kIGMgPT0gMCBmb3IgY2FzZWxlc3MgY29tcGFy aXNvbiwgbm9uemVybyBmb3IgY2FzZSBtYXR0ZXJzLgorICBDYWxsIHdpdGggbiA9PSAtMSB0byBj b21wYXJlIHdpdGhvdXQgYSBsZW5ndGggbGltaXQuCisgIENvbXBhcmVzIHVwIHRvIG4gY2hhcmFj dGVycyBvZiB0aGUgdHdvIHN0cmluZ3MgYW5kIHJldHVybnM6CisgICAgMSBpZiBzMSA+IHMyCisg ICAgMCBpZiBzMSA9IHMyCisgICAtMSBpZiBzMSA8IHMyCisgIE5vdGU6IGNhc2UgaGFuZGxpbmcg aXMgb25seSBhcyBnb29kIGFzIGlzdXBwZXIoKSBhbmQgdG9sb3dlcigpLgorKi8KK2ludAorY2tz dHJjbXAoczEsczIsbixjKSBjaGFyICpzMSwgKnMyOyByZWdpc3RlciBpbnQgbiwgYzsgeworICAg IHJlZ2lzdGVyIENIQVIgdDEsIHQyOworICAgIGlmIChuID09IDApIHJldHVybigwKTsKKyAgICBp ZiAoIXMxKSBzMSA9ICIiOwkJCS8qIFdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVycy4gKi8KKyAg ICBpZiAoIXMyKSBzMiA9ICIiOworICAgIGlmICghKnMxKSByZXR1cm4oKnMyID8gLTEgOiAwKTsK KyAgICBpZiAoISpzMikgcmV0dXJuKDEpOworICAgIHdoaWxlIChuLS0pIHsKKwl0MSA9IChDSEFS KSAqczErKzsJCS8qIEdldCBuZXh0IGNoYXJhY3RlciBmcm9tIGVhY2guICovCisJdDIgPSAoQ0hB UikgKnMyKys7CisJaWYgKCF0MSkgcmV0dXJuKHQyID8gLTEgOiAwKTsKKwlpZiAoIXQyKSByZXR1 cm4oMSk7CisJaWYgKCFjKSB7CQkJLyogSWYgY2FzZSBkb2Vzbid0IG1hdHRlciAqLworCSAgICBp ZiAoaXN1cHBlcih0MSkpIHQxID0gdG9sb3dlcih0MSk7IC8qIENvbnZlcnQgY2FzZS4gKi8KKwkg ICAgaWYgKGlzdXBwZXIodDIpKSB0MiA9IHRvbG93ZXIodDIpOworCX0KKwlpZiAodDEgPCB0Mikg cmV0dXJuKC0xKTsJLyogczEgPCBzMiAqLworCWlmICh0MSA+IHQyKSByZXR1cm4oMSk7CQkvKiBz MSA+IHMyICovCisgICAgfQorICAgIHJldHVybigwKTsJCQkJLyogVGhleSdyZSBlcXVhbCAqLwor fQorCisvKiAgQyBLIFMgVCBSIFAgUiBFICAtLSAgQ2FzZWxlc3Mgc3RyaW5nIHByZWZpeCBjb21w YXJpc29uICAqLworCisvKiBSZXR1cm5zIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyIGluIHRo ZSAyIHN0cmluZ3MgdGhhdCBkb2Vzbid0IG1hdGNoICovCisKK2ludAorY2tzdHJwcmUoczEsczIp IGNoYXIgKnMxLCAqczI7IHsKKyAgICBDSEFSIHQxLCB0MjsKKyAgICBpbnQgbiA9IDA7CisgICAg aWYgKCFzMSkgczEgPSAiIjsKKyAgICBpZiAoIXMyKSBzMiA9ICIiOworICAgIHdoaWxlICgxKSB7 CisJdDEgPSAoQ0hBUikgKnMxKys7CisJdDIgPSAoQ0hBUikgKnMyKys7CisJaWYgKCF0MSB8fCAh dDIpIHJldHVybihuKTsKKwlpZiAoaXN1cHBlcih0MSkpIHQxID0gdG9sb3dlcih0MSk7CisJaWYg KGlzdXBwZXIodDIpKSB0MiA9IHRvbG93ZXIodDIpOworCWlmICh0MSAhPSB0MikKKwkgIHJldHVy bihuKTsKKwluKys7CisgICAgfQorfQorCisjZGVmaW5lIEdMT0JCSU5HCisKKy8qICBDIEsgTSBB IFQgQyBIICAtLSAgTWF0Y2ggYSBzdHJpbmcgYWdhaW5zdCBhIHBhdHRlcm4gICovCisvKgorICBD YWxsIHdpdGg6CisgICAgcGF0dGVybiB0byBiZSBtYXRjaGVkLgorICAgIHN0cmluZyB0byBsb29r IGZvciB0aGUgcGF0dGVybiBpbi4KKyAgICBpY2FzZSBpcyAxIGlmIGNhc2Utc2Vuc2l0aXZlLCAw IG90aGVyd2lzZS4KKyAgICBvcHRzIGlzIGEgYml0bWFzazoKKyAgICAgIEJpdCAwICg9MSk6CisJ MSA9IE1hdGNoIHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCAnLicKKwkwID0gRG9uJ3QgbWF0Y2ggdGhl bSAodXNlZCB3aXRoIFVOSVggZmlsZW5hbWVzKS4KKyAgICAgIEJpdCAxICg9Mik6CisJMSA9IEZp bGUgZ2xvYmJpbmcgKGRpcnNlcHMgYXJlIGZlbmNlcyk7CisJMCA9IERpcnNlcHMgYXJlIG5vdCBm ZW5jZXMuCisgICAgICBCaXQgMiAoPTQpOgorCTEgPSBBbGxvdyBeIGFuZCAkIGFuY2hvcnMgYXQg YmVnaW5uaW5nIGFuZCBlbmQgb2YgcGF0dGVybi4KKwkwID0gRG9uJ3QgYWxsb3cgdGhlbSAobm9y bWFsIGNhc2UgZm9yIGZpbGVuYW1lIG1hdGNoaW5nKS4KKyAgICAgIEJpdCAzIChhbmQgYmV5b25k KTogVW5kZWZpbmVkLgorICBXb3JrcyBvbmx5IHdpdGggTlVMLXRlcm1pbmF0ZWQgc3RyaW5ncy4K KyAgUGF0dGVybiBtYXkgY29udGFpbiBhbnkgbnVtYmVyIG9mID8gYW5kL29yICouCisgIElmIENL UkVHRVggaXMgZGVmaW5lZCwgYWxzbyBbYWJjXSwgW2Etel0sIGFuZC9vciB7c3RyaW5nLHN0cmlu ZywuLi59LgorICAoTm90ZTogUkVHRVggaXMgYSBtaXNub21lciwgc2VlIGJlbG93LikKKworICBS ZXR1cm5zOgorICAgIDAgaWYgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHBhdHRlcm4sCisgICAgPj0g MSwgdGhlIDEtYmFzZWQgcG9zaXRpb24gaW4gdGhlIHN0cmluZyB3aGVyZSB0aGUgbWF0Y2ggd2Fz IGZvdW5kLgorCisgIFRvIGJlIGRvbmU6CisgICAgRmluZCBhIHdheSB0byBpZGVudGlmeSB0aGUg cGllY2Ugb2YgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQgdGhlIHBhdHRlcm4sCisgICAgYXMgaW4g U25vYm9sICJMSU5FIChQQVQgLiBSRVNVTFQpIi4gIFRoaXMgaXMgbm93IHBhcnRpYWxseSBkb25l IGJ5CisgICAgc2V0dGluZyBtYXRjaHBvcyBhbmQgbWF0Y2hlbmQgKGV4Y2VwdCBtYXRjaGVuZCBu ZWVkcyBzb21lIHR1bmluZykuICBCdXQKKyAgICB0aGVzZSBhcmUgdXNlbGVzcyB1bmxlc3MgYSBj b3B5IG9mIHRoZSBzdHJpbmcgaXMga2VwdCwgb3IgYSBjb3B5IG9mIHRoZQorICAgIG1hdGNoaW5n IHBhcnQgaXMgbWFkZS4gIEJ1dCB0aGF0IHdvdWxkIGJlIHRvbyBjb3N0bHkgaW4gcGVyZm9ybWFu Y2UgLS0KKyAgICB0aGlzIHJvdXRpbmUgaGFzIHRvIGJlIGZhc3QgYmVjYXVzZSBpdCdzIHVzZWQg Zm9yIHdpbGRjYXJkIGV4cGFuc2lvbi4KKworICBOb3RlOgorICAgIFBhdHRlcm5zIGFyZSBub3Qg dGhlIHNhbWUgYXMgcmVndWxhciBleHByZXNzaW9ucywgaW4gd2hpY2ggJyonIG1lYW5zCisgICAg MCBvciBtb3JlIHJlcGV0aXRpb25zIG9mIHRoZSBwcmVjZWRpbmcgaXRlbS4gIEZvciBleGFtcGxl ICJhKmIiIGFzIGEKKyAgICBwYXR0ZXJuIG1hdGNoZXMgYW55IHN0cmluZyB0aGF0IHN0YXJ0cyB3 aXRoICdhJyBhbmQgZW5kcyB3aXRoICdiJzsgYXMgYQorICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBp dCBtYXRjaGVzIGFueSBzdHJpbmcgb2YgemVybyBvciBtb3JlIGEncyBmb2xsb3dlZCBieQorICAg IG9uZSBiLiAgUmVndWxhciBleHByZXNzaW9ucyBhcmUgZXNwZWNpYWxseSB1c2VmdWwgaW4gbWF0 Y2hpbmcgc3RyaW5ncyBvZgorICAgIChzYXkpIGRpZ2l0cywgb3IgbGV0dGVycywgZS5nLiAiWzAt OV0qIiBtYXRjaGVzIGFueSBzdHJpbmcgb2YgZGlnaXRzLgorICAgIFNvIGZhciwgS2VybWl0IGRv ZXNuJ3QgZG8gdGhpcy4KKyovCitzdGF0aWMgY2hhciAqIG15cGF0ID0gTlVMTDsJCS8qIEZvciBy ZXdyaXRpbmcgcGF0dGVybiAqLworc3RhdGljIGludCBtYXRjaHBvcyA9IDA7CitpbnQgbWF0Y2hl bmQgPSAwOworc3RhdGljIGludCBtYXRjaGRlcHRoID0gMDsKK3N0YXRpYyBpbnQgc3RyaW5ncG9z ID0gMDsKK3N0YXRpYyBjaGFyICogb3N0cmluZyA9IE5VTEw7CisKKyNkZWZpbmUgTUFUQ0hSRVRV Uk4oeCx5KSB7IHJjPXk7IHdoZXJlPXg7IGdvdG8geGNrbWF0Y2g7IH0KK3N0YXRpYyBjaGFyICog bGFzdHBhdCA9IE5VTEw7CisKK3N0YXRpYyBpbnQgeHhmbGFnID0gMDsJCQkvKiBHbG9iYWwgYmFp bG91dCBmbGFnIGZvciBja21hdGNoKCkgKi8KKworaW50Citpc3BhdHRlcm4ocykgY2hhciAqIHM7 IHsKKyAgICBpbnQgcXVvdGUgPSAwLCBzYmZsYWcgPSAwLCBzYiA9IDAsIGNiZmxhZyA9IDAsIGNi ID0gMDsKKyAgICAKKyAgICBjaGFyIGMgPSAwOworICAgIGlmICgqcyA9PSAnXicpIHJldHVybigx KTsKKyAgICB3aGlsZSAoKGMgPSAqcysrKSkgeworCWlmIChxdW90ZSkgeworCSAgICBxdW90ZSA9 IDA7CisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAoYyA9PSAnXFwnKSB7CisJICAgIHF1b3RlID0g MTsKKwkgICAgY29udGludWU7CisJfQorCWlmIChjID09ICcqJykgcmV0dXJuKDEpOworCWlmIChj ID09ICc/JykgcmV0dXJuKDEpOworCS8qIFVucXVvdGVkIGJyYWNrZXRzIG9yIGJyYWNlcyBtdXN0 IG1hdGNoICovCisJaWYgKGMgPT0gJ1snKSB7IHNiZmxhZysrOyBzYisrOyBjb250aW51ZTsgfQor CWlmIChjID09ICddJykgeyBzYi0tOyBjb250aW51ZTsgfQorCWlmIChjID09ICd7JykgeyBjYmZs YWcrKzsgY2IrKzsgY29udGludWU7IH0KKwlpZiAoYyA9PSAnfScpIHsgY2ItLTsgY29udGludWU7 IH0KKwlpZiAoISpzICYmIGMgPT0gJyQnKSByZXR1cm4oMSk7CisgICAgfQorICAgIHJldHVybihz YmZsYWcgfHwgY2JmbGFnKTsKK30KKworaW50Citja21hdGNoKHBhdHRlcm4sIHN0cmluZywgaWNh c2UsIG9wdHMpIGNoYXIgKnBhdHRlcm4sKnN0cmluZzsgaW50IGljYXNlLCBvcHRzOyB7CisgICAg aW50IHEgPSAwLCBpID0gMCwgayA9IC0xLCB4LCBmbGFnID0gMDsKKyAgICBpbnQgcmMgPSAwOwkJ CQkvKiBSZXR1cm4gY29kZSAqLworICAgIGludCBoYXZlc3RhciA9IDA7CisgICAgaW50IHdoZXJl ID0gLTE7CisgICAgQ0hBUiBjcDsJCQkJLyogQ3VycmVudCBjaGFyYWN0ZXIgZnJvbSBwYXR0ZXJu ICovCisgICAgQ0hBUiBjczsJCQkJLyogQ3VycmVudCBjaGFyYWN0ZXIgZnJvbSBzdHJpbmcgKi8K KyAgICBjaGFyICogcGF0c3RhcnQ7CQkJLyogU3RhcnQgb2YgcGF0dGVybiAqLworICAgIGludCBw bGVuLCBkb3QsIGdsb2JiaW5nLCB4c3RhciA9IDA7CisgICAgaW50IGJyb25seSA9IDA7CQkJLyog V2hvbGUgcGF0dGVybiBpcyB7YSxiLGMsLi4ufSAqLworCisgICAgZGVidWcoRjExMSwiQ0tNQVRD SCBFTlRSWSBwYXQgb3B0IixwYXR0ZXJuLG9wdHMpOworICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0gg RU5UUlkgc3RyIGRlcCIsc3RyaW5nLG1hdGNoZGVwdGgpOworICAgIC8qIGRlYnVnKEYxMDEsIkNL TUFUQ0ggRU5UUlkgaWNhc2UiLCIiLGljYXNlKTsgKi8KKworICAgIGdsb2JiaW5nID0gb3B0cyAm IDI7CisKKyAgICBpZiAoIXN0cmluZykgc3RyaW5nID0gIiI7CisgICAgaWYgKCFwYXR0ZXJuKSBw YXR0ZXJuID0gIiI7CisKKyAgICBpZiAoISpwYXR0ZXJuKSB7CQkJLyogRW1wdHkgcGF0dGVybiBt YXRjaGVzIGFueXRoaW5nICovCisJbWF0Y2hkZXB0aCsrOwkJCS8qIChpdCB3YXNuJ3QgaW5jcmVt ZW50ZWQgeWV0KSAqLworCU1BVENIUkVUVVJOKDAsMSk7CisgICAgfSBlbHNlIGlmICghKnN0cmlu ZykgeworCU1BVENIUkVUVVJOKDAsMCk7CisgICAgfQorICAgIHBhdHN0YXJ0ID0gcGF0dGVybjsJ CQkvKiBSZW1lbWJlciBiZWdpbm5pbmcgb2YgcGF0dGVybiAqLworCisgICAgaWYgKG1hdGNoZGVw dGggPT0gMCkgewkJLyogVG9wLWxldmVsIGNhbGw/ICovCisJeHhmbGFnID0gMDsKKwlzdHJpbmdw b3MgPSAwOwkJCS8qIFJlc2V0IGluZGljZXMgZXRjLiAqLworCW1hdGNocG9zID0gMDsKKwltYXRj aGVuZCA9IDA7CisJb3N0cmluZyA9IHN0cmluZzsKKwlsYXN0cGF0ID0gcGF0dGVybjsKKwlpZiAo KnBhdHRlcm4gPT0gJ3snKQkJLyogRW50aXJlIHBhdHRlcm4gaXMge2EsYi5jfSAqLworCSAgYnJv bmx5ID0gMTsJCQkvKiBNYXliZSAqLworCWRvdCA9IChvcHRzICYgMSkgfHwJCS8qIE1hdGNoIGxl YWRpbmcgZG90IChpZiBmaWxlKSAqLworCSAgICAoKG9wdHMgJiAyKSA9PSAwKSB8fAkvKiBhbHdh eXMgaWYgbm90IGZpbGUgKi8KKwkgICAgKHBhdHRlcm5bMF0gPT0gJy4nKTsJLyogb3IgaWYgcGF0 dGVybiBzdGFydHMgd2l0aCAnLicgKi8KKworCXBsZW4gPSBzdHJsZW4ocGF0dGVybik7CQkvKiBM ZW5ndGggb2YgcGF0dGVybiAqLworLyogVGhpcyB3b3VsZCBiZSB1c2VkIGluIGNhbGN1bGF0aW5n IGxlbmd0aCBvZiBtYXRjaGluZyBzZWdtZW50ICovCisJaWYgKHBsZW4gPiAwKQkJCS8qIFVzZXIn cyBwYXR0ZXJuIGVuZHMgd2l0aCAnKicgKi8KKwkgIGlmIChwYXR0ZXJuW3BsZW4gLSAxXSA9PSAn KicpCisJICAgIHhzdGFyID0gMTsKKwlpZiAocGF0dGVyblswXSA9PSAnKicpIHsJLyogVXNlcidz IHBhdHRlcm4gc3RhcnRzIHdpdGggJyonICovCisJICAgIG1hdGNocG9zID0gMTsKKwkgICAgZGVi dWcoRjExMSwiQ0tNQVRDSCAxIixzdHJpbmcsIG1hdGNocG9zKTsKKwl9CisJaWYgKG9wdHMgJiA0 KSB7CQkJLyogXi4uJCBhbGxvd2VkICh0b3AgbGV2ZWwgb25seSkgKi8KKwkgICAgLyogUmV3cml0 ZSBwYXR0ZXJuIHRvIGFjY291bnQgZm9yIF4uLiQgYW5jaG9yaW5nLi4uICovCisKKwkgICAgaWYg KG15cGF0KSBmcmVlKG15cGF0KTsJLyogR2V0IHNwYWNlIGZvciAiKnBhdHRlcm4qIiAqLworCSAg ICBteXBhdCA9IChjaGFyICopbWFsbG9jKHBsZW4gKyA0KTsKKwkgICAgaWYgKG15cGF0KSB7CQkv KiBHb3Qgc3BhY2U/ICovCisJCWNoYXIgKiBzID0gcGF0dGVybiwgKiBwID0gbXlwYXQ7IC8qIFNl dCB3b3JraW5nIHBvaW50ZXJzICovCisJCWlmICgqcyA9PSAnXicpIHsJLyogRmlyc3Qgc291cmNl IGNoYXIgaXMgXiAqLworCQkgICAgcysrOwkJLyogc28gc2tpcCBwYXN0IGl0ICovCisJCX0gZWxz ZSBpZiAoKnMgIT0gJyonKSB7CS8qIG90aGVyd2lzZSAqLworCQkgICAgKnArKyA9ICcqJzsJCS8q IHByZXBlbmQgJyonIHRvIHBhdHRlcm4gKi8KKwkJfQorCQl3aGlsZSAoKnMpIHsJCS8qIENvcHkg cmVzdCBvZiBwYXR0ZXJuICovCisJCSAgICBpZiAoISoocysxKSkgewkvKiBGaW5hbCBwYXR0ZXJu IGNoYXJhY3Rlcj8gKi8KKwkJCWlmICgqcyAhPSAnJCcpIHsgLyogSWYgaXQncyBub3QgJyQnICov CisJCQkgICAgKnArKyA9ICpzOwkvKiBDb3B5IGl0IGludG8gdGhlIHBhdHRlcm4gKi8KKwkJCSAg ICBpZiAoKnMrKyAhPSAnKicpIC8qIEFuZCBpZiBpdCdzIGFsc28gbm90ICcqJyAqLworCQkJICAg ICAgKnArKyA9ICcqJzsgLyogYXBwZW5kICcqJy4gKi8KKwkJCX0KKwkJCWJyZWFrOwkJLyogRG9u ZSAqLworCQkgICAgfSBlbHNlCQkvKiBOb3QgZmluYWwgY2hhcmFjdGVyICovCisJCSAgICAgICpw KysgPSAqcysrOwkvKiBKdXN0IGNvcHkgaXQgKi8KKwkJfQorCQkqcCA9IE5VTDsJCS8qIFRlcm1p bmF0ZSB0aGUgbmV3IHBhdHRlcm4gKi8KKwkJcGF0dGVybiA9IG15cGF0OwkvKiBNYWtlIHRoZSBz d2l0Y2ggKi8KKwkgICAgfQorCSAgICBkZWJ1ZyhGMTEwLCJDS01BVENIIElOSVQgcGF0IixwYXR0 ZXJuLDApOworCX0KKyAgICB9CisgICAgbWF0Y2hkZXB0aCsrOwkJCS8qIE5vdyBpbmNyZW1lbnQg Y2FsbCBkZXB0aCAqLworCisjaWZkZWYgVU5JWAorICAgIGlmICghZG90KSB7CQkJCS8qIEZvciBV TklYIGZpbGUgZ2xvYmJpbmcgKi8KKwlpZiAoKnN0cmluZyA9PSAnLicgJiYgKnBhdHRlcm4gIT0g Jy4nICYmICFtYXRjaGRvdCkgeworCSAgICBpZiAoCisjaWZkZWYgQ0tSRUdFWAorCQkqcGF0dGVy biAhPSAneycgJiYgKnBhdHRlcm4gIT0gJ1snCisjZWxzZQorCQkxCisjZW5kaWYgLyogQ0tSRUdF WCAqLworCQkpIHsKKwkJZGVidWcoRjExMCwiY2ttYXRjaCBza2lwIixzdHJpbmcsMCk7CisJCU1B VENIUkVUVVJOKDEsMCk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIFVOSVggKi8KKyAg ICB3aGlsZSAoMSkgeworCWsrKzsKKwljcCA9ICpwYXR0ZXJuOwkJCS8qIENoYXJhY3RlciBmcm9t IHBhdHRlcm4gKi8KKwljcyA9ICpzdHJpbmc7CQkJLyogQ2hhcmFjdGVyIGZyb20gc3RyaW5nICov CisKKyNpZmRlZiBDT01NRU5UCisJZGVidWcoRjAwMCwiQ0tNQVRDSCBwYXQgY3AiLHBhdHRlcm4s Y3ApOworCWRlYnVnKEYwMDAsIkNLTUFUQ0ggc3RyIGNzIixzdHJpbmcsY3MpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworCWlmICghY3MpIHsJCQkvKiBFbmQgb2Ygc3RyaW5nIC0gZG9uZS4gKi8K KwkgICAgeCA9ICghY3AgfHwgKGNwID09ICcqJyAmJiAhKihwYXR0ZXJuKzEpKSkgPyAxIDogMDsK KwkgICAgaWYgKHgpIHsKKwkJaWYgKCFtYXRjaHBvcykgeworCQkgICAgbWF0Y2hwb3MgPSBzdHJp bmdwb3M7CisJCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIEEiLHN0cmluZywgbWF0Y2hwb3MpOwor CQl9CisJCW1hdGNoZW5kID0gc3RyaW5ncG9zOworCQlNQVRDSFJFVFVSTigyLG1hdGNocG9zKTsK KwkgICAgfQorCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIFpFUk8gZCIsc3RyaW5nLCBtYXRjaHBv cyk7CisJICAgIG1hdGNocG9zID0gMDsKKwkgICAgTUFUQ0hSRVRVUk4oMTYsbWF0Y2hwb3MpOwor CX0KKyAgICAgICAgaWYgKCFpY2FzZSkgewkJCS8qIElmIGlnbm9yaW5nIGNhc2UgKi8KKwkgICAg aWYgKGlzdXBwZXIoY3ApKQkJLyogY29udmVydCBib3RoIHRvIGxvd2VyY2FzZS4gKi8KKwkgICAg ICBjcCA9IHRvbG93ZXIoY3ApOworCSAgICBpZiAoaXN1cHBlcihjcykpCisJICAgICAgY3MgPSB0 b2xvd2VyKGNzKTsKKyAgICAgICAgfQorCWlmIChxKSB7CQkJLyogVGhpcyBjaGFyYWN0ZXIgd2Fz IHF1b3RlZCAqLworCSAgICBkZWJ1ZyhGMDAwLCJDS01BVENIIFFVT1RFRCIscGF0dGVybixjcCk7 CisJICAgIHEgPSAwOwkJCS8qIFR1cm4gb2ZmIHF1b3RlIGZsYWcgKi8KKworCSAgICBpZiAoY3Mg PT0gY3ApIHsJCS8qIENvbXBhcmUgZGlyZWN0bHkgKi8KKwkJaWYgKCFtYXRjaHBvcykgewkvKiBN YXRjaGVzICovCisJCSAgICBtYXRjaHBvcyA9IHN0cmluZ3BvczsKKwkJICAgIGRlYnVnKEYxMTEs IkNLTUFUQ0ggXFwgbmV3IG1hdGNoIixzdHJpbmcsIG1hdGNocG9zKTsKKwkJfQorCQlwYXR0ZXJu Kys7CisJICAgIH0gZWxzZSB7CQkJLyogRG9lc24ndCBtYXRjaCAqLworCQlwYXR0ZXJuID0gbGFz dHBhdDsJLyogQmFjayB1cCB0aGUgcGF0dGVybiAqLworCQltYXRjaHBvcyA9IDA7CisJCWRlYnVn KEYxMTEsIkNLTUFUQ0ggXFwgbm8gbWF0Y2giLHBhdHRlcm4sIG1hdGNocG9zKTsKKwkgICAgfQor CSAgICBzdHJpbmcrKzsKKwkgICAgc3RyaW5ncG9zKys7CisJICAgIGNvbnRpbnVlOworCX0KKwlp ZiAoY3AgPT0gQ01EUSAmJiAhcSkgewkJLyogUXVvdGUgaW4gcGF0dGVybiAqLworCSAgICBkZWJ1 ZyhGMDAwLCJDS01BVENIIFFVT1RFIixwYXR0ZXJuLGNwKTsKKwkgICAgcSA9IDE7CQkJLyogU2V0 IGZsYWcgKi8KKwkgICAgcGF0dGVybisrOwkJCS8qIEFkdmFuY2UgdG8gbmV4dCBwYXR0ZXJuIGNo YXJhY3RlciAqLworCSAgICBjb250aW51ZTsJCQkvKiBhbmQgY29udGludWUuICovCisJfQorCWlm IChjcyAmJiBjcCA9PSAnPycpIHsJCS8qICc/JyBtYXRjaGVzIGFueSBjaGFyICovCisJICAgIGlm ICghbWF0Y2hwb3MpIHsKKwkJbWF0Y2hwb3MgPSBzdHJpbmdwb3M7CisJCWRlYnVnKEYxMTEsIkNL TUFUQ0ggRCIsc3RyaW5nLCBtYXRjaHBvcyk7CisJICAgIH0KKwkgICAgZGVidWcoRjExMCwiQ0tN QVRDSCA/IHBhdCIscGF0dGVybiwwKTsKKwkgICAgZGVidWcoRjExMCwiQ0tNQVRDSCA/IHN0ciIs c3RyaW5nLDApOworCSAgICBwYXR0ZXJuKys7CisJICAgIHN0cmluZysrOworCSAgICBzdHJpbmdw b3MrKzsKKwkgICAgY29udGludWU7CisjaWZkZWYgQ0tSRUdFWAorCX0gZWxzZSBpZiAoY3AgPT0g J1snKSB7CQkvKiBIYXZlIGJyYWNrZXQgKi8KKwkgICAgaW50IHEgPSAwOwkJCS8qIE15IG93biBw cml2YXRlIHEgKi8KKwkgICAgY2hhciAqIHBzYXZlID0gTlVMTDsJLyogYW5kIGJhY2t1cCBwb2lu dGVyICovCisJICAgIENIQVIgY2xpc3RbMjU2XTsJCS8qIENoYXJhY3RlciBsaXN0IGZyb20gYnJh Y2tldHMgKi8KKwkgICAgQ0hBUiBjLCBjMSwgYzI7CisKKwkgICAgZm9yIChpID0gMDsgaSA8IDI1 NjsgaSsrKQkvKiBtZW1zZXQoKSBldGMgbm90IHBvcnRhYmxlICovCisJICAgICAgY2xpc3RbaV0g PSBOVUw7CisJICAgIHBzYXZlID0gKytwYXR0ZXJuOwkJLyogV2hlcmUgcGF0dGVybiBzdGFydHMg Ki8KKwkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCBbXSAiLHBhdHRlcm4tMSwgbWF0Y2hwb3MpOwor CSAgICBmb3IgKGZsYWcgPSAwOyAhZmxhZzsgcGF0dGVybisrKSB7IC8qIExvb3AgdGhydSBwYXR0 ZXJuICovCisJCWMgPSAoQ0hBUikqcGF0dGVybjsJLyogQ3VycmVudCBjaGFyICovCisJCWRlYnVn KEYwMDAsIj4+PiBwYXR0ZXJuIGNoYXIiLCIiLGMpOworCQlpZiAocSkgewkJLyogUXVvdGUgd2l0 aGluIGJyYWNrZXRzICovCisJCSAgICBxID0gMDsKKwkJICAgIGNsaXN0W2NdID0gMTsKKwkJICAg IGNvbnRpbnVlOworCQl9CisJCWlmICghaWNhc2UpCQkvKiBDYXNlIGNvbnZlcnNpb24gKi8KKwkJ ICBpZiAoaXN1cHBlcihjKSkKKwkJICAgIGMgPSB0b2xvd2VyKGMpOworCQlzd2l0Y2ggKGMpIHsJ CS8qIEhhbmRsZSB1bnF1b3RlZCBjaGFyYWN0ZXIgKi8KKwkJICBjYXNlIE5VTDoJCS8qIEVuZCBv ZiBzdHJpbmcgKi8KKwkJICAgIE1BVENIUkVUVVJOKDQsMCk7CS8qIE5vIG1hdGNoaW5nICddJyBz byBmYWlsICovCisJCSAgY2FzZSBDTURROgkJLyogTmV4dCBjaGFyIGlzIHF1b3RlZCAqLworCQkg ICAgcSA9IDE7CQkvKiBTZXQgZmxhZyAqLworCQkgICAgY29udGludWU7CQkvKiBhbmQgY29udGlu dWUuICovCisJCSAgY2FzZSAnLSc6CQkvKiBBIHJhbmdlIGlzIHNwZWNpZmllZCAqLworCQkgICAg YzEgPSAocGF0dGVybiA+IHBzYXZlKSA/IChDSEFSKSoocGF0dGVybi0xKSA6IE5VTDsKKwkJICAg IGMyID0gKENIQVIpKihwYXR0ZXJuKzEpOyAvKiBJR05PUkUgT1VULU9GLUJPVU5EUyBXQVJOSU5H ICovCisJCSAgICBpZiAoYzIgPT0gJ10nKSBjMiA9IE5VTDsgLyogKGl0IGNhbid0IGhhcHBlbikg Ki8KKwkJICAgIGlmIChjMSA9PSBOVUwpIGMxID0gYzI7CisJCSAgICBmb3IgKGMgPSBjMTsgYyA8 PSBjMjsgYysrKSB7CisJCQljbGlzdFtjXSA9IDE7CisJCQlpZiAoIWljYXNlKSB7CisJCQkgICAg aWYgKGlzbG93ZXIoYykpIHsKKwkJCQljbGlzdFt0b3VwcGVyKGMpXSA9IDE7CisJCQkgICAgfSBl bHNlIGlmIChpc3VwcGVyKGMpKSB7CisJCQkJY2xpc3RbdG9sb3dlcihjKV0gPSAxOworCQkJICAg IH0KKwkJCX0KKwkJICAgIH0KKwkJICAgIGNvbnRpbnVlOworCQkgIGNhc2UgJ10nOgkJLyogRW5k IG9mIGJyYWNrZXRlZCBzZXF1ZW5jZSAqLworCQkgICAgZmxhZyA9IDE7CQkvKiBEb25lIHdpdGgg Rk9SIGxvb3AgKi8KKwkJICAgIGJyZWFrOwkJLyogQ29tcGFyZSB3aGF0IHdlIGhhdmUgKi8KKwkJ ICBkZWZhdWx0OgkJLyogSnVzdCBhIGNoYXIgKi8KKwkJICAgIGNsaXN0W2NdID0gMTsJLyogUmVj b3JkIGl0ICovCisJCSAgICBpZiAoIWljYXNlKSB7CisJCQlpZiAoaXNsb3dlcihjKSkgeworCQkJ ICAgIGNsaXN0W3RvdXBwZXIoYyldID0gMTsKKwkJCX0gZWxzZSBpZiAoaXN1cHBlcihjKSkgewor CQkJICAgIGNsaXN0W3RvbG93ZXIoYyldID0gMTsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGNvbnRp bnVlOworCQl9CisJICAgIH0KKwkgICAgZGVidWcoRjAwMCwiPj4+IGNzIiwiIixjcyk7CisJICAg IGRlYnVnKEYxMDEsIj4+PiBjbGlzdFtjc10iLCIiLGNsaXN0W2NzXSk7CisJICAgIGRlYnVnKEYw MDAsIj4+PiBzdHJpbmciLHN0cmluZywqc3RyaW5nKTsKKworCSAgICBpZiAoIWNsaXN0Wyh1bnNp Z25lZCljc10pIHsJLyogTm8gbWF0Y2g/ICovCisJCWlmICghKnN0cmluZykgewkJLyogVGhpcyBj bGF1c2UgMTYgSnVuIDIwMDUgKi8KKwkJICAgIE1BVENIUkVUVVJOKDUsMCk7CS8qIE5vcGUsIGRv bmUuICovCisJCX0KKy8qCisgIFdlIG5lZWQgdG8gZmFpbCBoZXJlIGlmIHRoZSBbY2xpc3RdIGlz IG5vdCBhbGxvd2VkIHRvIGZsb2F0LgorICBUaGUgW2NsaXN0XSBpcyBub3QgYWxsb3dlZCB0byBm bG9hdCBpZiBpdCBpcyBub3QgcHJlY2VkZWQKKyAgYnkgYW4gYXN0ZXJpc2ssIHJpZ2h0PyAgMzAg RGVjIDIwMDUuCisqLworCQlpZiAoIWhhdmVzdGFyKSB7CisJCSAgICBNQVRDSFJFVFVSTig1MDAs MCk7CisJCX0KKwkJc3RyaW5nKys7CQkvKiBGcm9tIGhlcmUgdG8gZW5kIGFkZGVkIDIwMDUvNi8x NSAqLworCQlzdHJpbmdwb3MrKzsKKwkJcGF0dGVybiA9IGxhc3RwYXQ7CS8qIEJhY2sgdXAgcGF0 dGVybiAqLworCQlrID0gY2ttYXRjaChwYXR0ZXJuLHN0cmluZyxpY2FzZSxvcHRzKTsKKwkJaWYg KHh4ZmxhZykgTUFUQ0hSRVRVUk4oMCwwKTsKKwkJaWYgKCFtYXRjaHBvcyAmJiBrID4gMCkKKwkJ ICBtYXRjaHBvcyA9IHN0cmluZ3BvczsKKwkJTUFUQ0hSRVRVUk4oNSwgKCpzdHJpbmcpID8gbWF0 Y2hwb3MgOiAwKTsKKwkgICAgfQorCSAgICBpZiAoIW1hdGNocG9zKSB7CisJCW1hdGNocG9zID0g c3RyaW5ncG9zOworCQlkZWJ1ZyhGMTExLCJDS01BVENIIFtdIG1hdGNoIixzdHJpbmcsIG1hdGNo cG9zKTsKKwkgICAgfQorCSAgICBzdHJpbmcrKzsJCQkvKiBZZXMsIGFkdmFuY2Ugc3RyaW5nIHBv aW50ZXIgKi8KKwkgICAgc3RyaW5ncG9zKys7CisJICAgIGNvbnRpbnVlOwkJCS8qIGFuZCBnbyBv bi4gKi8KKwl9IGVsc2UgaWYgKGNwID09ICd7JykgewkJLyogQnJhY2VzIGVuY2xvc2luZyBsaXN0 IG9mIHN0cmluZ3MgKi8KKwkgICAgY2hhciAqIHAsICogcywgKiBzMiwgKiBidWYgPSBOVUxMOwor CSAgICBpbnQgbiwgYmMgPSAwOworCSAgICBpbnQgbGVuID0gMDsKKwkgICAgZGVidWcoRjExMSwi Q0tNQVRDSCB7fSAiLHN0cmluZywgbWF0Y2hwb3MpOworCSAgICBmb3IgKHAgPSBwYXR0ZXJuKys7 ICpwOyBwKyspIHsKKwkJaWYgKCpwID09ICd7JykgYmMrKzsKKwkJaWYgKCpwID09ICd9JykgYmMt LTsKKwkJaWYgKGJjIDwgMSkgYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKGJjICE9IDApIHsJCS8q IEJyYWNlcyBkb24ndCBtYXRjaCAqLworCQlNQVRDSFJFVFVSTig2LDApOwkvKiBGYWlsICovCisJ ICAgIH0gZWxzZSB7CQkJLyogQnJhY2VzIGRvIG1hdGNoICovCisJCWludCBxID0gMCwgZG9uZSA9 IDA7CisJCWxlbiA9ICpwID8gc3RybGVuKHArMSkgOiAwOyAvKiBMZW5ndGggb2YgcmVzdCBvZiBw YXR0ZXJuICovCisJCWlmIChsZW4pCisJCSAgYnJvbmx5ID0gMDsKKwkJaWYgKGJyb25seSAmJiAo bWF0Y2hkZXB0aCAhPSAxKSkKKwkJICBicm9ubHkgPSAwOworCQluID0gcCAtIHBhdHRlcm47CSAg ICAvKiBTaXplIG9mIGxpc3QgaW4gYnJhY2VzICovCisJCWlmICgoYnVmID0gKGNoYXIgKiltYWxs b2MobisxKSkpIHsgLyogQ29weSBzbyB3ZSBjYW4gcG9rZSBpdCAqLworCQkgICAgY2hhciAqIHRw ID0gTlVMTDsKKwkJICAgIGludCBrLCBzb2ZhcjsKKwkJICAgIGNrc3RybmNweShidWYscGF0dGVy bixuKzEpOworCQkgICAgc29mYXIgPSBzdHJpbmcgLSBvc3RyaW5nIC0gbWF0Y2hwb3MgKyAxOwor CQkgICAgaWYgKHNvZmFyIDwgMCkgc29mYXIgPSAwOworCQkgICAgZGVidWcoRjExMSwiQ0tNQVRD SCAuLiBzdHJpbmciLHN0cmluZyxzb2Zhcik7CisJCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIC4u IG9zdHJpbmciLG9zdHJpbmcsc29mYXIpOworCQkgICAgbiA9IDA7CisJCSAgICBmb3IgKHMgPSBz MiA9IGJ1ZjsgMTsgcysrKSB7IC8qIExvb3AgdGhyb3VnaCBzZWdtZW50cyAqLworCQkJbisrOwor CQkJaWYgKHEpIHsJLyogVGhpcyBjaGFyIGlzIHF1b3RlZCAqLworCQkJICAgIHEgPSAwOworCQkJ ICAgIGlmICghKnMpCisJCQkgICAgICBkb25lID0gMTsKKwkJCSAgICBjb250aW51ZTsKKwkJCX0K KwkJCWlmICgqcyA9PSBDTURRICYmICFxKSB7CS8qIFF1b3RlIG5leHQgY2hhciAqLworCQkJICAg IHEgPSAxOworCQkJICAgIGNvbnRpbnVlOworCQkJfQorCQkJaWYgKCEqcyB8fCAqcyA9PSAnLCcp IHsJLyogRW5kIG9mIHRoaXMgc2VnbWVudCAqLworCQkJICAgIGludCB0cGxlbiA9IDA7CisJCQkg ICAgaWYgKCEqcykJLyogSWYgZW5kIG9mIGJ1ZmZlciAqLworCQkJICAgICAgZG9uZSA9IDE7CS8q IHRoZW4gZW5kIG9mIGxhc3Qgc2VnbWVudCAqLworCQkJICAgICpzID0gTlVMOwkvKiBPdmVyd3Jp dGUgY29tbWEgd2l0aCBOVUwgKi8KKwkJCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIIHt9IHNlZ21l bnQiLHMyLGRvbmUpOworCQkJICAgIHRwbGVuID0gbiArIGxlbiArIHNvZmFyICsgMjsKKwkJCSAg ICBpZiAoISpzMikgewkvKiBFbXB0eSBzZWdtZW50LCBubyBhZHZhbmNlbWVudCAqLworCQkJCWsg PSAwOworCQkJICAgIH0gZWxzZSBpZiAoKHRwID0gKGNoYXIgKiltYWxsb2ModHBsZW4pKSkgewor CQkJCWludCBzYXZwb3MsIG9wdHMyOworCQkJCWNoYXIgKiBwcDsKKwkJCQlwcCA9IG1hdGNocG9z ID4gMCA/CisJCQkJICAgICZvc3RyaW5nW21hdGNocG9zLTFdIDoKKwkJCQkgICAgb3N0cmluZzsK KwkJCQlpZiAoYnJvbmx5KSB7CisJCQkJICAgIGlmIChtYXRjaHBvcyA+IDApCisJCQkJICAgICAg Y2tzdHJuY3B5KHRwLHBwLHNvZmFyKzEpOworCQkJCSAgICBlbHNlCisJCQkJICAgICAgY2tzdHJu Y3B5KHRwLHBwLHNvZmFyKTsKKwkJCQl9IGVsc2UgeworCQkJCSAgICB0cFswXSA9ICcqJzsKKwkJ CQkgICAgdHBbMV0gPSBOVUw7CisJCQkJICAgIGlmIChtYXRjaHBvcyA+IDApCisJCQkJICAgICAg Y2tzdHJuY3B5KCZ0cFsxXSxwcCxzb2ZhcisxKTsKKwkJCQkgICAgZWxzZQorCQkJCSAgICAgIGNr c3RybmNweSgmdHBbMV0scHAsc29mYXIpOworCQkJCX0KKwkJCQlja3N0cm5jYXQodHAsczIsdHBs ZW4pOyAvKiBDdXJyZW50IHNlZ21lbnQgKi8KKwkJCQlja3N0cm5jYXQodHAscCsxLHRwbGVuKTsg LyogcmVzdCBvZiBwYXR0ZXJuICovCisKKwkJCQlkZWJ1ZyhGMTAxLCJDS01BVENIIHt9IG1hdGNo cG9zIiwiIixtYXRjaHBvcyk7CisJCQkJc2F2cG9zID0gbWF0Y2hwb3M7CisJCQkJbWF0Y2hwb3Mg PSAwOworI2lmZGVmIERFQlVHCisJCQkJaWYgKGRlYmxvZykgeworCQkJCSAgICBkZWJ1ZyhGMTEx LCJDS01BVENIIHt9IHRwIix0cCxtYXRjaHBvcyk7CisJCQkJICAgIGRlYnVnKEYxMTEsIkNLTUFU Q0gge30gc3RyaW5nIiwKKwkJCQkJICBzdHJpbmcsbWF0Y2hwb3MpOworCQkJCSAgICBkZWJ1ZyhG MTExLCJDS01BVENIIHt9IG9zdHJpbmciLAorCQkJCQkgIG9zdHJpbmcsc2F2cG9zKTsKKwkJCQl9 CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCQkvKiBJZiBzZWdtZW50IHN0YXJ0cyB3aXRoIGRvdCAq LworCQkJCS8qIHRoZW4gc2V0IG1hdGNoZG90IG9wdGlvbi4uICovCisJCQkJb3B0czIgPSBvcHRz OworCQkJCWlmICgqczIgPT0gJy4nKSBvcHRzMiB8PSAxOworCQkJCWRlYnVnKEYxMTEsIkNLTUFU Q0gge30gcmVjdXJzaW5nIixzMixvcHRzMik7CisJCQkJayA9IGNrbWF0Y2godHAsCisJCQkJCSAg ICAoc3RyaW5nID4gb3N0cmluZykgPworCQkJCQkgICAgJm9zdHJpbmdbc2F2cG9zLTFdIDogc3Ry aW5nLAorCQkJCQkgICAgaWNhc2Usb3B0czIpOworI2lmZGVmIERFQlVHCisJCQkJaWYgKGRlYmxv ZykgeworCQkJCSAgICBkZWJ1ZyhGMTAxLCJDS01BVENIIHt9IGsiLCIiLGspOworCQkJCSAgICBk ZWJ1ZyhGMTAxLCJDS01BVENIIHt9IHNhdnBvcyIsIiIsc2F2cG9zKTsKKwkJCQl9CisjZW5kaWYg LyogREVCVUcgKi8KKwkJCQlmcmVlKHRwKTsKKwkJCQl0cCA9IE5VTEw7CisJCQkJaWYgKHh4Zmxh ZykgTUFUQ0hSRVRVUk4oMCwwKTsKKwkJCQlpZiAoayA9PSAwKSB7CisJCQkJICAgIG1hdGNocG9z ID0gc2F2cG9zOworCQkJCX0KKwkJCQlpZiAoayA+IDApIHsgLyogSWYgaXQgbWF0Y2hlZCB3ZSdy ZSBkb25lICovCisJCQkJICAgIE1BVENIUkVUVVJOKDcsayk7CisJCQkJfQorCQkJICAgIH0gZWxz ZSB7CS8qIE1hbGxvYyBmYWlsdXJlICovCisJCQkJTUFUQ0hSRVRVUk4oMTQsMCk7CisJCQkgICAg fQorCQkJICAgIGlmIChrKSB7CS8qIFN1Y2Nlc3NmdWwgY29tcGFyaXNvbiAqLworCQkJCWlmICgh bWF0Y2hwb3MpIHsKKwkJCQkgICAgbWF0Y2hwb3MgPSBzdHJpbmdwb3M7CisJCQkJICAgIGRlYnVn KEYxMTEsIkNLTUFUQ0gge30gbWF0Y2giLAorCQkJCQkgIHN0cmluZywgbWF0Y2hwb3MpOworCQkJ CX0KKwkJCQlzdHJpbmcgKz0gbi0xOyAvKiBBZHZhbmNlIHBvaW50ZXJzICovCisJCQkJcGF0dGVy biA9IHArMTsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQkgICAgaWYgKGRvbmUpCS8qIElmIG5v IG1vcmUgc2VnbWVudHMgKi8KKwkJCSAgICAgIGJyZWFrOwkvKiBicmVhayBvdXQgb2Ygc2VnbWVu dCBsb29wLiAqLworCQkJICAgIHMyID0gcysxOwkvKiBPdGhlcndpc2UsIG9uIHRvIG5leHQgc2Vn bWVudCAqLworCQkJICAgIG4gPSAwOworCQkJfQorCQkgICAgfQorCQkgICAgZnJlZShidWYpOwor CQl9CisJICAgIH0KKyNlbmRpZiAvKiBDS1JFR0VYICovCisJfSBlbHNlIGlmIChjcCA9PSAnKicp IHsJCS8qIFBhdHRlcm4gY2hhciBpcyBhc3RlcmlzayAqLworCSAgICBjaGFyICogcHNhdmU7CisJ ICAgIGNoYXIgKiBwLCAqIHMgPSBOVUxMOwkvKiBtZWFuaW5nIG1hdGNoIGFueXRoaW5nICovCisJ ICAgIGludCBrLCBuLCBxID0gMDsKKwkgICAgaGF2ZXN0YXIrKzsJCQkvKiBUaGUgcmVzdCBjYW4g ZmxvYXQgKi8KKwkgICAgd2hpbGUgKCpwYXR0ZXJuID09ICcqJykJLyogQ29sbGFwc2Ugc3VjY2Vz c2l2ZSBhc3Rlcmlza3MgKi8KKwkgICAgICBwYXR0ZXJuKys7CisJICAgIHBzYXZlID0gcGF0dGVy bjsJCS8qIEZpcnN0IG5vbi1hc3RlcmlzayBhZnRlciBhc3RlcmlzayAqLworCSAgICBsYXN0cGF0 ID0gcGF0dGVybiAtIDE7CS8qIERpdHRvLCBnbG9iYWwgKi8KKwkgICAgZGVidWcoRjExMSwiQ0tN QVRDSCAqICIsc3RyaW5nLG1hdGNocG9zKTsKKwkgICAgZm9yIChuID0gMCwgcCA9IHBzYXZlOyAq cDsgcCsrLG4rKykgeyAvKiBGaW5kIG5leHQgbWV0YSBjaGFyICovCisJCWlmICghcSkgeworCQkg ICAgaWYgKCpwID09ICc/JyB8fCAqcCA9PSAnKicgfHwgKnAgPT0gQ01EUQorI2lmZGVmIENLUkVH RVgKKwkJCXx8ICpwID09ICdbJyB8fCAqcCA9PSAneycKKyNlbmRpZiAvKiBDS1JFR0VYICovCisJ CQkpCisJCSAgICAgIGJyZWFrOworI2lmZGVmIEdMT0JCSU5HCisJCSAgICBpZiAoZ2xvYmJpbmcK KyNpZmRlZiBVTklYT1JPU0sKKwkJCSYmICpwID09ICcvJworI2Vsc2UKKyNpZmRlZiBWTVMKKwkJ CSYmICgqcCA9PSAnLicgfHwgKnAgPT0gJ10nIHx8CisJCQkgICAgKnAgPT0gJzwnIHx8ICpwID09 ICc+JyB8fAorCQkJICAgICpwID09ICc6JyB8fCAqcCA9PSAnOycpCisjZWxzZQorI2lmZGVmIGRh dGFnZW5lcmFsCisJCQkmJiAqcCA9PSAnOicKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworCQkJJiYg KnAgPT0gJz4nCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisJCQkpCisJCSAgICAg IGJyZWFrOworI2VuZGlmIC8qIEdMT0JCSU5HICovCisJCX0KKwkgICAgfQorCSAgICBkZWJ1ZyhG MTExLCJDS01BVENIICogbiBzdHJpbmciLHN0cmluZyxuKTsKKwkgICAgZGVidWcoRjExMSwiQ0tN QVRDSCAqIG4gcGF0dHJuIixwYXR0ZXJuLG4pOworCSAgICBkZWJ1ZyhGMTExLCJDS01BVENIICog biBwIixwLG4pOworCSAgICBpZiAobiA+IDApIHsJCS8qIExpdGVyYWwgc3RyaW5nIHRvIG1hdGNo ICAqLworCQlzID0gKGNoYXIgKiltYWxsb2MobisxKTsKKwkJaWYgKHMpIHsKKwkJICAgIGNrc3Ry bmNweShzLHBzYXZlLG4rMSk7IC8qIENvcHkgY3V6IG5vIHBva2luZyBvcmlnaW5hbCAqLworCQkg ICAgaWYgKCpwKSB7CisJCQlrID0gY2tpbmRleChzLHN0cmluZywwLDAsaWNhc2UpOyAvKiAxLWJh c2VkIGluZGV4KCkgKi8KKwkJCWRlYnVnKEYxMTAsIkNLTUFUQ0ggKiBJbmRleCgpIHN0cmluZyIs c3RyaW5nLDApOworCQkJZGVidWcoRjExMCwiQ0tNQVRDSCAqIEluZGV4KCkgcGF0dHJuIixzLDAp OworCQkJZGVidWcoRjEwMSwiQ0tNQVRDSCAqIEluZGV4KCkgcmVzdWx0IiwiIixrKTsKKwkJICAg IH0gZWxzZSB7CQkvKiBTdHJpbmcgaXMgcmlnaHQtYW5jaG9yZWQgKi8KKwkJCWsgPSBja2luZGV4 KHMsc3RyaW5nLC0xLDEsaWNhc2UpOyAvKiByaW5kZXgoKSAqLworCQkJZGVidWcoRjExMSwiQ0tN QVRDSCAqIFJpbmRleCgpIixzdHJpbmcsayk7CisJCQlkZWJ1ZyhGMTEwLCJDS01BVENIICogUmlu ZGV4KCkgcGF0dHJuIixzLDApOworCQkJZGVidWcoRjEwMSwiQ0tNQVRDSCAqIFJpbmRleCgpIHJl c3VsdCIsIiIsayk7CisJCSAgICB9CisJCSAgICBmcmVlKHMpOworCQkgICAgaWYgKGsgPCAxKSB7 CisJCQlNQVRDSFJFVFVSTig4LDApOworCQkgICAgfQorCQkgICAgZGVidWcoRjExMSwiQ0tNQVRD SCAqIHN0cmluZ3BvcyBtYXRjaHBvcyIsCisJCQkgIGNraXRvYShzdHJpbmdwb3MpLCBtYXRjaHBv cyk7CisJCSAgICBpZiAoIW1hdGNocG9zKSB7CisJCQltYXRjaHBvcyA9IHN0cmluZyAtIG9zdHJp bmcgKyBrOworCQkJZGVidWcoRjExMSwiQ0tNQVRDSCAqIG5ldyBtYXRjaCAiLCBzdHJpbmcsIG1h dGNocG9zKTsKKwkJICAgIH0KKwkJICAgIHN0cmluZyArPSBrICsgbiAtIDE7CisJCSAgICBzdHJp bmdwb3MgKz0gayArIG4gLSAxOworCQkgICAgcGF0dGVybiArPSBuOworCQkgICAgZGVidWcoRjEx MSwiQ0tNQVRDSCAqIG5ldyBzdHJpbmciLCBzdHJpbmcsIHN0cmluZ3Bvcyk7CisJCSAgICBkZWJ1 ZyhGMTEwLCJDS01BVENIICogbmV3IHBhdHRybiIsIHBhdHRlcm4sIDApOworCQkgICAgY29udGlu dWU7CisJCX0KKwkgICAgfSBlbHNlIGlmICghKnApIHsJCS8qIEFzdGVyaXNrIGF0IGVuZCBtYXRj aGVzIHRoZSByZXN0ICovCisJCWlmICghZ2xvYmJpbmcpIHsJLyogKGlmIG5vdCBmaWxlbmFtZSBn bG9iYmluZykgKi8KKwkJICAgIGlmICghbWF0Y2hwb3MpIHsKKwkJCW1hdGNocG9zID0gc3RyaW5n cG9zOworCQkJZGVidWcoRjExMSwiQ0tNQVRDSCAqJCAiLHN0cmluZywgbWF0Y2hwb3MpOworCQkg ICAgfQorCQkgICAgbWF0Y2hlbmQgPSBzdHJpbmdwb3M7CisJCSAgICBNQVRDSFJFVFVSTig5LG1h dGNocG9zKTsKKwkJfQorI2lmZGVmIEdMT0JCSU5HCisJCXdoaWxlICgqc3RyaW5nKSB7CisJCSAg ICBpZiAoZ2xvYmJpbmcJLyogRmlsZXNwZWMgc28gZG9uJ3QgY3Jvc3MgZmllbGRzICovCisjaWZk ZWYgT1MyCisJCQkmJiAqc3RyaW5nID09ICcvJyB8fCAqc3RyaW5nID09ICdcXCcgfHwKKwkJCSpz dHJpbmcgPT0gJzonCisjZWxzZQorI2lmZGVmIFVOSVhPUk9TSworCQkJJiYgKnN0cmluZyA9PSAn LycKKyNlbHNlCisjaWZkZWYgVk1TCisJCQkmJiAoKnN0cmluZyA9PSAnLicgfHwgKnN0cmluZyA9 PSAnXScgfHwKKwkJCSAgICAqc3RyaW5nID09ICc8JyB8fCAqc3RyaW5nID09ICc+JyB8fAorCQkJ ICAgICpzdHJpbmcgPT0gJzonIHx8ICpzdHJpbmcgPT0gJzsnKQorI2Vsc2UKKyNpZmRlZiBkYXRh Z2VuZXJhbAorCQkJJiYgKnN0cmluZyA9PSAnOicKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworCQkJ JiYgKnN0cmluZyA9PSAnPicKKyNlbHNlCisJCQkmJiAqc3RyaW5nID09ICcvJyAvKiAoY2F0Y2gt YWxsKSAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwor I2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2VuZGlmIC8qIE9TMiAq LworCQkJKSB7CisJCQltYXRjaGVuZCA9IHN0cmluZ3BvczsKKwkJCU1BVENIUkVUVVJOKDEwLDAp OworCQkgICAgfQorCQkgICAgaWYgKCFtYXRjaHBvcykgeworCQkJbWF0Y2hwb3MgPSBzdHJpbmdw b3M7CisJCQlkZWJ1ZyhGMTExLCJDS01BVENIICokIG1hdGNoIixzdHJpbmcsIG1hdGNocG9zKTsK KwkJICAgIH0KKwkJICAgIHN0cmluZysrOworCQkgICAgc3RyaW5ncG9zKys7CisJCX0KKyNlbmRp ZiAvKiBHTE9CQklORyAqLworCQlpZiAoIW1hdGNocG9zKSB7CisJCSAgICBtYXRjaHBvcyA9IHN0 cmluZ3BvczsKKwkJICAgIGRlYnVnKEYxMTEsIkNLTUFUQ0ggKiogbWF0Y2giLHN0cmluZywgbWF0 Y2hwb3MpOworCQl9CisJCW1hdGNoZW5kID0gc3RyaW5ncG9zOworCQlNQVRDSFJFVFVSTigxMSxt YXRjaHBvcyk7CisKKwkgICAgfSBlbHNlIHsJCQkvKiBBIG1ldGEgY2hhciBmb2xsb3dzIGFzdGVy aXNrICovCisJCWlmICghKnN0cmluZykKKwkJICBNQVRDSFJFVFVSTigxNywgbWF0Y2hwb3MgPSAw KTsKKyNpZmRlZiBDT01NRU5UCisJCS8qIFRoaXMgaXMgbW9yZSBlbGVnYW50IGJ1dCBpdCBkb2Vz bid0IHdvcmsuICovCisJCXAtLTsKKwkJc3RyaW5nKys7CisJCXN0cmluZ3BvcysrOworCQlrID0g Y2ttYXRjaChwLHN0cmluZyxpY2FzZSxvcHRzKTsKKyNlbHNlCisJCXdoaWxlICgqc3RyaW5nICYm ICgoayA9IGNrbWF0Y2gocCxzdHJpbmcsaWNhc2Usb3B0cykpIDwgMSkpIHsKKwkJICAgIGlmICh4 eGZsYWcpIE1BVENIUkVUVVJOKDAsMCk7CisJCSAgICBzdHJpbmcrKzsKKwkJICAgIHN0cmluZ3Bv cysrOworCQl9CisJCWlmICghKnN0cmluZyAmJiBrIDwgMSkgeworLyoKKyAgRGVmaW5pdGVseSBu byBtYXRjaCBzbyB3ZSBzZXQgYSBnbG9iYWwgZmxhZyB0byBpbmliaXQgZnVydGhlciBiYWNraW5n IHVwCisgIGFuZCByZXRyeWluZyBieSBwcmV2aW91cyBpbmNhcm5hdGlvbnMsIHNpbmNlIHRoZXkg ZG9uJ3Qgc2VlIHRoYXQgdGhlIHN0cmluZworICBhbmQvb3IgcGF0dGVybiwgd2hpY2ggYXJlIG9u IHRoZSBzdGFjaywgaGF2ZSBiZWVuIGV4aGF1c3RlZCBhdCB0aGlzIGxldmVsLgorKi8KKwkJICAg IHh4ZmxhZysrOworCQkgICAgZGVidWcoRjExMSwiQ0tNQVRDSCBERUZJTklURUxZIE5PIE1BVENI IixwLGspOworCQkgICAgTUFUQ0hSRVRVUk4oOTEsMCk7CisJCX0KKyNlbmRpZgkvKiBDT01NRU5U ICovCisJCWRlYnVnKEYxMTEsIkNLTUFUQ0ggKjxtZXRhPiBrIixzdHJpbmcsIGspOworCQlpZiAo IW1hdGNocG9zICYmIGsgPiAwKSB7CisJCSAgICBtYXRjaHBvcyA9IHN0cmluZ3BvczsKKwkJICAg IGRlYnVnKEYxMTEsIkNLTUFUQ0ggKjxtZXRhPiBtYXRjaHBvcyIsc3RyaW5nLCBtYXRjaHBvcyk7 CisJCX0KKwkJTUFUQ0hSRVRVUk4oMTIsICgqc3RyaW5nKSA/IG1hdGNocG9zIDogMCk7CisJICAg IH0KKwl9IGVsc2UgaWYgKGNzID09IGNwKSB7CisJICAgIHBhdHRlcm4rKzsKKwkgICAgc3RyaW5n Kys7CisJICAgIHN0cmluZ3BvcysrOworCSAgICBpZiAoIW1hdGNocG9zKSB7CisJCW1hdGNocG9z ID0gc3RyaW5ncG9zOworCQlkZWJ1ZyhGMTExLCJDS01BVENIIGNzPWNwIixzdHJpbmcsIG1hdGNo cG9zKTsKKwkgICAgfQorCSAgICBjb250aW51ZTsKKwl9IGVsc2UgeworCSAgICBNQVRDSFJFVFVS TigxMywwKTsKKwl9CisgICAgfQorICB4Y2ttYXRjaDoKKyAgICB7CisjaWZkZWYgREVCVUcKKwlj aGFyIG1zZ2J1ZlsyNTZdOworI2VuZGlmIC8qIERFQlVHICovCisJaWYgKG1hdGNoZGVwdGggPiAw KQorCSAgbWF0Y2hkZXB0aC0tOworCW1hdGNocG9zID0gcmM7CisjaWZkZWYgREVCVUcKKwlja21h a3htc2cobXNnYnVmLDI1NiwKKwkJICAiQ0tNQVRDSCBSRVRVUk5bIiwKKwkJICBja2l0b2Eod2hl cmUpLAorCQkgICJdIG1hdGNocG9zPSIsCisJCSAgY2tpdG9hKG1hdGNocG9zKSwKKwkJICAiIG1h dGNoZGVwdGg9IiwKKwkJICBja2l0b2EobWF0Y2hkZXB0aCksCisJCSAgIiBwYXQ9IixwYXR0ZXJu LAorCQkgICIgc3RyaW5nPSIsc3RyaW5nLE5VTEwsTlVMTAorCQkgICk7CisJZGVidWcoRjExMCxt c2didWYsc3RyaW5nLDApOworI2VuZGlmIC8qIERFQlVHICovCisJcmV0dXJuKHJjKTsKKyAgICB9 Cit9CisKKworI2lmZGVmIENLRkxPQVQKKy8qICBJIFMgRiBMIE8gQSBUICAtLSBWZXJpZnkgdGhh dCBhcmcgcmVwcmVzZW50cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAqLworCisvKgorICBQb3J0 YWJsZSByZXBsYWNlbWVudCBmb3IgYXRvZigpLCBzdHJ0b2QoKSwgc2NhbmYoKSwgZXRjLgorCisg IENhbGwgd2l0aDoKKyAgICBzID0gcG9pbnRlciB0byBzdHJpbmcKKyAgICBmbGFnID09IDAgbWVh bnMgZW50aXJlIHN0cmluZyBtdXN0IGJlIGEgKGZsb2F0aW5nLXBvaW50aW5nKSBudW1iZXIuCisg ICAgZmxhZyAhPSAwIG1lYW5zIHRvIHRlcm1pbmF0ZSBzY2FuIG9uIGZpcnN0IGNoYXJhY3RlciB0 aGF0IGlzIG5vdCBsZWdhbC4KKworICBSZXR1cm5zOgorICAgIDEgaWYgcmVzdWx0IGlzIGEgbGVn YWwgbnVtYmVyOworICAgIDIgaWYgcmVzdWx0IGhhcyBhIGZyYWN0aW9uYWwgcGFydDsKKyAgICAw IGlmIG5vdCBvciBpZiBzdHJpbmcgZW1wdHkuCisKKyAgU2lkZSBlZmZlY3Q6CisgICAgU2V0cyBn bG9iYWwgZmxvYXR2YWwgdG8gZmxvYXRpbmctcG9pbnQgdmFsdWUgaWYgc3VjY2Vzc2Z1bC4KKwor ICBOdW1iZXIgbmVlZCBub3QgY29udGFpbiBhIGRlY2ltYWwgcG9pbnQgLS0gaW50ZWdlciBpcyBz dWJjYXNlIG9mIGZsb2F0LgorICBTY2llbnRpZmljIG5vdGF0aW9uIG5vdCBzdXBwb3J0ZWQuCisq LworQ0tGTE9BVCBmbG9hdHZhbCA9IDAuMDsJCQkvKiBGb3IgcmV0dXJuaW5nIHZhbHVlICovCisK K2ludAoraXNmbG9hdChzLGZsYWcpIGNoYXIgKnM7IGludCBmbGFnOyB7CisgICAgaW50IHN0YXRl ID0gMDsKKyAgICBpbnQgc2lnbiA9IDA7CisgICAgY2hhciBjOworICAgIENLRkxPQVQgZCA9IDAu MCwgZiA9IDAuMDsKKworICAgIGlmICghcykgcmV0dXJuKDApOworICAgIGlmICghKnMpIHJldHVy bigwKTsKKworICAgIHdoaWxlIChpc3NwYWNlKCpzKSkgcysrOworCisgICAgaWYgKCpzID09ICct JykgewkJCS8qIEhhbmRsZSBvcHRpb25hbCBzaWduICovCisJc2lnbiA9IDE7CisJcysrOworICAg IH0gZWxzZSBpZiAoKnMgPT0gJysnKQorICAgICAgcysrOworICAgIHdoaWxlICgoYyA9ICpzKysp KSB7CQkvKiBIYW5kbGUgbnVtZXJpYyBwYXJ0ICovCisJc3dpdGNoIChzdGF0ZSkgeworCSAgY2Fz ZSAwOgkJCS8qIE1hbnRpc3NhLi4uICovCisJICAgIGlmIChpc2RpZ2l0KGMpKSB7CisJCWYgPSBm ICogMTAuMCArIChDS0ZMT0FUKShjIC0gJzAnKTsKKwkJY29udGludWU7CisJICAgIH0gZWxzZSBp ZiAoYyA9PSAnLicpIHsKKwkJc3RhdGUgPSAxOworCQlkID0gMS4wOworCQljb250aW51ZTsKKwkg ICAgfQorCSAgICBpZiAoZmxhZykJCQkvKiBOb3QgZGlnaXQgb3IgcGVyaW9kICovCisJICAgICAg Z290byBkb25lOwkJLyogYnJlYWsgaWYgZmxhZyAhPSAwICovCisJICAgIHJldHVybigwKTsJCQkv KiBvdGhlcndpc2UgZmFpbC4gKi8KKwkgIGNhc2UgMToJCQkvKiBGcmFjdGlvbi4uLiAqLworCSAg ICBpZiAoaXNkaWdpdChjKSkgeworCQlkICo9IDEwLjA7CisJCWYgKz0gKENLRkxPQVQpKGMgLSAn MCcpIC8gZDsKKwkJY29udGludWU7CisJICAgIH0KKwkgIGRlZmF1bHQ6CisJICAgIGlmIChmbGFn KQkJCS8qIElsbGVnYWwgY2hhcmFjdGVyICovCisJICAgICAgZ290byBkb25lOwkJLyogQnJlYWsg Ki8KKwkgICAgcmV0dXJuKDApOwkJCS8qIG9yIGZhaWwsIGRlcGVuZGluZyBvbiBmbGFnICovCisJ fQorICAgIH0KKyAgZG9uZToKKyAgICBpZiAoc2lnbikgZiA9IDAuMCAtIGY7CQkvKiBBcHBseSBz aWduIHRvIHJlc3VsdCAqLworICAgIGZsb2F0dmFsID0gZjsJCQkvKiBTZXQgcmVzdWx0ICovCisg ICAgcmV0dXJuKGQgPyAyIDogMSk7CQkJLyogU3VjY2VlZCAqLworfQorCisvKgorICBjIGsgciBv IHUgbiBkICAtLSAgUm91bmRzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIG9yIGFuIGludGVnZXIu CisKKyAgZnBudW06CisgICAgRmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIHJvdW5kLgorICBwbGFj ZXM6CisgICAgUG9zaXRpdmUuLi5UbyBob3cgbWFueSBkZWNpbWFsIHBsYWNlcy4KKyAgICBaZXJv Li4uLi4uLlJvdW5kIHRvIGludGVnZXIuCisgICAgTmVnYXRpdmUuLi4tMSA9IG5lYXJlc3QgdGVu LCAtMiA9IG5lYXJlc3QgMTAwLCAtMyA9IG5lYXJlc3QgdGhvdXNhbmQsIGV0Yy4KKyAgb2J1Zgor ICAgIE91dHB1dCBidWZmZXIgZm9yIHN0cmluZyByZXN1bHQgaWYgZGVzaXJlZC4KKyAgb2J1Zmxl biAgICAKKyAgICBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlci4KKyAgUmV0dXJuczoKKyAgICBSZXN1 bHQgYXMgQ0tGTE9BVCAod2hpY2ggaXMgbm90IGdvaW5nIHRvIGJlIGFzIGV4YWN0IGFzIHRoZSBz dHJpbmcgcmVzdWx0KQorICAgIEFuZCB0aGUgZXhhY3QgcmVzdWx0IGluIHRoZSBzdHJpbmcgb3V0 cHV0IGJ1ZmZlciwgaWYgb25lIHdhcyBzcGVjaWZpZWQuCisqLworQ0tGTE9BVAorI2lmZGVmIENL X0FOU0lDCitja3JvdW5kKENLRkxPQVQgZnBudW0sIGludCBwbGFjZXMsIGNoYXIgKm9idWYsIGlu dCBvYnVmbGVuKQorI2Vsc2UKK2Nrcm91bmQoZnBudW0scGxhY2VzLG9idWYsb2J1ZmxlbikKKyBD S0ZMT0FUIGZwbnVtOyBpbnQgcGxhY2VzLCBvYnVmbGVuOyBjaGFyICpvYnVmOworI2VuZGlmIC8q IENLX0FOU0lDICovCisvKiBja3JvdW5kICAqLyB7CisgICAgY2hhciAqcywgKnMyLCAqZDsKKyAg ICBpbnQgaSwgcCwgbGVuLCB4LCBuLCBkaWdpdHM7CisgICAgaW50IGNhcnJ5ID0gMDsKKyAgICBp bnQgbWludXMgPSAwOworICAgIGNoYXIgYnVmWzIwMF07CisgICAgY2hhciAqIG51bWJlcjsKKyAg ICBDS0ZMT0FUIHZhbHVlOworICAgIGV4dGVybiBpbnQgZnBfZGlnaXRzOworCisgICAgc3ByaW50 ZihidWYsIiUyMDAuMTAwZiIsZnBudW0pOwkvKiBNYWtlIHN0cmluZyB2ZXJzaW9uIHRvIHdvcmsg d2l0aCAqLworICAgIG51bWJlciA9IChjaGFyICopIGJ1ZjsJCS8qIE1ha2UgcG9pbnRlciB0byBp dCAqLworCisgICAgcCA9IHBsYWNlczsJCQkJLyogUHJlY2lzaW9uICovCisgICAgZCA9IChjaGFy ICopMDsJCQkvKiBQb2ludGVyIHRvIGRlY2ltYWwgb3Igc3RyaW5nIGVuZCAqLworCisgICAgcyA9 IG51bWJlcjsJCQkJLyogRml4IG51bWJlci4uLiAqLworICAgIHdoaWxlICgqcyA9PSAnICcgfHwg KnMgPT0gJ1wwMTEnKSBzKys7IC8qIFN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworICAgIGlm ICgqcyA9PSAnKycpIHMrKzsJCQkgICAvKiBTa2lwIGxlYWRpbmcgcGx1cyBzaWduKi8KKyAgICBu dW1iZXIgPSBzOwkJCQkgICAvKiBTdGFydCBvZiBudW1iZXIgKi8KKyAgICBpZiAoKnMgPT0gJy0n KSB7IG1pbnVzKys7IG51bWJlcisrOyBzKys7IH0gLyogUmVtZW1iZXIgaWYgbmVnYXRpdmUgKi8K KworICAgIHMgPSBudW1iZXI7CQkJCS8qIERvbid0IGFsbG93IGZhbHNlIHByZWNpc2lvbiAqLwor ICAgIG4gPSAwOworICAgIHdoaWxlICgqcyAmJiAqcyAhPSAnLicpIHMrKywgbisrOyAgIC8qIEZp bmQgZGVjaW1hbCAqLworCisgICAgaWYgKHAgKyBuID4gZnBfZGlnaXRzKQkJLyogVG9vIG1hbnkg ZGlnaXRzICovCisgICAgICBwID0gZnBfZGlnaXRzIC0gbjsJCS8qIERvbid0IGFzayBmb3IgYm9n dXMgcHJlY2lzaW9uICovCisgICAgaWYgKHAgPCAwKSBwID0gMDsJCQkvKiBCdXQgZG9uJ3QgYXNr IGZvciBsZXNzIHRoYW4gemVybyAqLworICAgIGlmIChuID4gZnBfZGlnaXRzKQkJCS8qIEludGVn ZXIgcGFydCBoYXMgdG9vIG1hbnkgZGlnaXRzICovCisgICAgICAqcyA9IDA7CQkJCS8qIGJ1dCB3 ZSBjYW4ndCB0cnVuY2F0ZSBpdCAqLworICAgIGVsc2UJCQkJLyogTWFnbml0dWRlIGlzIE9LICov CisgICAgICBudW1iZXJbZnBfZGlnaXRzKzFdID0gMDsJCS8qIFRydW5jYXRlIGZyYWN0aW9uYWwg cGFydC4gKi8KKworICAgIGxlbiA9IChpbnQpc3RybGVuKG51bWJlcik7CQkvKiBMZW5ndGggb2Yg bm9uLWJvZ3VzIG51bWJlciAqLworICAgIGQgPSBzOwkJCQkvKiBQb2ludGVyIHRvIGRlY2ltYWwg cG9pbnQgKi8KKyAgICBpZiAocCA+IDApIHsJCQkvKiBSb3VuZGluZyB0aGUgZnJhY3Rpb25hbCBw YXJ0ICovCisJaWYgKG4gKyBwIDwgbGVuKSB7CQkvKiBJZiBpdCdzIG5vdCBhbHJlYWR5IHNob3J0 ZXIgKi8KKwkgICAgaWYgKCpzID09ICcuJykgcysrOwkJLyogU2tpcCBwYXN0IGRlY2ltYWwgKi8K KwkgICAgcyArPSBwOwkJCS8qIEdvIHRvIGRlc2lyZWQgc3BvdCAqLworCSAgICBpZiAoKnMgPiAn NCcgJiYgKnMgPD0gJzknKQkvKiBDaGVjayB2YWx1ZSBvZiBkaWdpdCAqLworCSAgICAgIGNhcnJ5 ID0gMTsKKwkgICAgKnMgPSAwOwkJCS8qIEFuZCBlbmQgdGhlIHN0cmluZyAqLyAKKwkgICAgcy0t OwkJCS8qIFBvaW50IHRvIGxhc3QgZGlnaXQgKi8KKwl9CisgICAgfSBlbHNlIGlmIChwID09IDAp IHsJCS8qIFJvdW5kaW5nIHRvIGludGVnZXIgKi8KKwlpZiAoKnMgPT0gJy4nKSB7CisJICAgICpz ID0gMDsJCQkvKiBlcmFzZSB0aGUgZGVjaW1hbCBwb2ludCAqLworCSAgICBpZiAoKihzKzEpKSB7 CQkvKiBhbmQgdGhlcmUgaXMgYSBmYWN0aW9uYWwgcGFydCAqLworCQlpZiAoKihzKzEpID4gJzQn ICYmICoocysxKSA8PSAnOScpIC8qIENoZWNrIGZvciBjYXJyeSAqLworCQkgIGNhcnJ5ID0gMTsK KwkgICAgfQorCSAgICBzLS07CQkJLyogUG9pbnQgdG8gbGFzdCBkaWdpdCAqLworCX0KKyAgICB9 IGVsc2UgewkJCQkvKiBSb3VuZGluZyB0aGUgaW50ZWdlciBwYXJ0ICovCisJaWYgKHMgKyBwID4g bnVtYmVyKSB7CQkvKiBhcyBpbiAidGhlIG5lYXJlc3QgaHVuZHJlZCIgKi8KKwkgICAgcyArPSBw OwkJCS8qIEdvIGxlZnQgdG8gZGVzaXJlZCBkaWdpdCAqLworCSAgICAqZCA9IDA7CQkJLyogRGlz Y2FyZCBmcmFjdGlvbiAqLworCSAgICBjYXJyeSA9IDA7CisJICAgIGlmICgqcyA+ICc0JykJCS8q IENoZWNrIGZpcnN0IGRpZ2l0IG9mIGZyYWN0aW9uICovCisJICAgICAgY2FycnkgPSAxOwkJLyog YW5kIHNldCBjYXJyeSBmbGFnICovCisJICAgIHMyID0gczsKKwkgICAgd2hpbGUgKHMyIDwgZCkJ CS8qIEZpbGwgaW4gdGhlIHJlc3Qgd2l0aCB6ZXJvcyAqLworCSAgICAgICpzMisrID0gJzAnOwor CSAgICBzLS07CQkJLyogUG9pbnQgdG8gbGFzdCBkaWdpdCAqLworCX0KKyAgICB9CisgICAgaWYg KGNhcnJ5KSB7CQkJLyogSGFuZGxlIGNhcnJ5LCBpZiBhbnkgKi8KKyAgICAgICAgd2hpbGUgKHMg Pj0gbnVtYmVyKSB7CisgICAgICAgICAgICBpZiAoKnMgPT0gJy4nKSB7CQkvKiBTa2lwIGJhY2t3 YXJkcyBvdmVyIGRlY2ltYWwgKi8KKyAgICAgICAgICAgICAgICBzLS07CisgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcyArPSAxOwkJCS8qIEFk ZCAxIHRvIGN1cnJlbnQgZGlnaXQgKi8KKyAgICAgICAgICAgIGNhcnJ5ID0gMDsKKyAgICAgICAg ICAgIGlmICgqcyA8PSAnOScpIAkJLyogSWYgcmVzdWx0IGlzIDkgb3IgbGVzcyAqLworCSAgICAg IGJyZWFrOwkJCS8qIHdlJ3JlIGRvbmUgKi8KKyAgICAgICAgICAgICpzID0gJzAnOwkJCS8qIE90 aGVyd2lzZSBwdXQgMCAqLworICAgICAgICAgICAgY2FycnkgPSAxOwkJCS8qIGNhcnJ5IHRoZSAx ICovCisgICAgICAgICAgICBzLS07CQkJLyogYW5kIGJhY2sgdXAgdG8gbmV4dCBkaWdpdCAqLwor CX0KKyAgICB9CisjaWZkZWYgX19hbHBoYQorICAgIHNzY2FuZihudW1iZXIsIiVmIiwmdmFsdWUp OwkJLyogQ29udmVydCBiYWNrIHRvIGZsb2F0aW5nIHBvaW50ICovCisjZWxzZQorICAgIHNzY2Fu ZihudW1iZXIsIiVsZiIsJnZhbHVlKTsgICAgICAgIC8qIENvbnZlcnQgYmFjayB0byBmbG9hdGlu ZyBwb2ludCAqLworI2VuZGlmCisgICAgaWYgKG9idWYpIHN0cm5jcHkob2J1ZixudW1iZXIsb2J1 Zmxlbik7IC8qIFNldCBzdHJpbmcgcmVzdWx0ICovCisgICAgcmV0dXJuKHZhbHVlKTsJCQkgICAg LyogUmV0dXJuIGZsb2F0aW5nLXBvaW50IHJlc3VsdCAqLworfQorCisjZW5kaWYgLyogQ0tGTE9B VCAqLworCisvKiBTb3J0aW5nIHJvdXRpbmVzLi4uICovCisKKy8qIFMgSCBfIFMgTyBSIFQgIC0t ICBTaGVsbCBzb3J0IC0tIHNvcnRzIHN0cmluZyBhcnJheSBzIGluIHBsYWNlLiAqLworCisvKgor ICBIaWdobHkgZGVmZW5zaXZlIGFuZCByZWxhdGl2ZWx5IHF1aWNrLgorICBVc2VzIHNoZWxsIHNv cnQgYWxnb3JpdGhtLgorCisgIEFyZ3M6CisgICBzID0gcG9pbnRlciB0byBhcnJheSBvZiBzdHJp bmdzLgorICAgcCA9IHBvaW50ZXIgdG8gYSBzZWNvbmQgYXJyYXkgdG8gc29ydCBpbiBwYXJhbGxl bCBzLCBvciBOVUxMIGZvciBub25lLgorICAgbiA9IG51bWJlciBvZiBlbGVtZW50cyBpbiBzLgor ICAgayA9IHBvc2l0aW9uIG9mIGtleS4KKyAgIHIgPSBhc2NlbmRpbmcgbGV4aWNhbCBvcmRlciBp ZiB6ZXJvLCByZXZlcnNlIGxleGljYWwgb3JkZXIgaWYgbm9uemVyby4KKyAgIGMgPSAwIGZvciBj YXNlIGluZGVwZW5kZW5jZSwgMSBmb3IgY2FzZSBtYXR0ZXJzLCAyIGZvciBudW1lcmljLgorCisg IElmIGsgaXMgcGFzdCB0aGUgcmlnaHQgZW5kIG9mIGEgc3RyaW5nLCB0aGUgc3RyaW5nIGlzIGNv bnNpZGVyZWQgZW1wdHkKKyAgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuCisKKyAgSGludDoKKyAg IFRvIHNvcnQgYSBwaWVjZSBvZiBhbiBhcnJheSwgY2FsbCB3aXRoIHMgcG9pbnRpbmcgdG8gdGhl IGZpcnN0IGVsZW1lbnQKKyAgIGFuZCBuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc29ydC4K KworICBSZXR1cm4gdmFsdWU6CisgICBOb25lLiAgQWx3YXlzIHN1Y2NlZWRzLCB1bmxlc3MgYW55 IG9mIHNbMF0uLnNbbi0xXSBhcmUgYmFkIHBvaW50ZXJzLAorICAgaW4gd2hpY2ggY2FzZSBtZW1v cnkgdmlvbGF0aW9ucyBhcmUgcG9zc2libGUsIGJ1dCBDIG9mZmVycyBubyBkZWZlbnNlCisgICBh Z2FpbnN0IHRoaXMsIHNvIG5vIHdheSB0byBncmFjZWZ1bGx5IHJldHVybiBhbiBlcnJvciBjb2Rl LgorKi8KK1ZPSUQKK3NoX3NvcnQocyxwLG4sayxyLGMpIGNoYXIgKipzLCAqKnA7IGludCBuLCBr LCByLCBjOyB7CisgICAgaW50IG0sIGksIGosIHg7CisgICAgY2hhciAqdCwgKnQxLCAqdDIsICp1 ID0gTlVMTDsKKyNpZmRlZiBDS0ZMT0FUCisgICAgQ0tGTE9BVCBmMSwgZjI7CisjZWxzZQorICAg IGxvbmcgbjEsIG4yOworI2VuZGlmIC8qIENLRkxPQVQgKi8KKworICAgIGlmICghcykgcmV0dXJu OwkJCS8qIE5vdGhpbmcgdG8gc29ydD8gKi8KKyAgICBpZiAobiA8IDIpIHJldHVybjsJCQkvKiBO b3QgZW5vdWdoIGVsZW1lbnRzIHRvIHNvcnQ/ICovCisgICAgaWYgKGsgPCAwKSBrID0gMDsJCQkv KiBLZXkgKi8KKworICAgIG0gPSBuOwkJCQkvKiBJbml0aWFsIGdyb3VwIHNpemUgaXMgd2hvbGUg YXJyYXkgKi8KKyAgICB3aGlsZSAoMSkgeworCW0gPSBtIC8gMjsJCQkvKiBEaXZpZGUgZ3JvdXAg c2l6ZSBpbiBoYWxmICovCisJaWYgKG0gPCAxKQkJCS8qIFNtYWxsIGFzIGNhbiBiZSwgc28gZG9u ZSAqLworCSAgYnJlYWs7CisJZm9yIChqID0gMDsgaiA8IG4tbTsgaisrKSB7CS8qIFNvcnQgZWFj aCBncm91cCAqLworCSAgICB0ID0gdDIgPSBzW2orbV07CQkvKiBDb21wYXJlIHRoaXMgb25lLi4u ICovCisJICAgIGlmICghdCkJCQkvKiBCdXQgaWYgaXQncyBOVUxMICovCisJICAgICAgdDIgPSAi IjsJCQkvKiBtYWtlIGl0IHRoZSBlbXB0eSBzdHJpbmcgKi8KKwkgICAgaWYgKHApCQkJLyogSGFu ZGxlIHBhcmFsbGVsIGFycmF5LCBpZiBhbnkgKi8KKwkgICAgICB1ID0gcFtqK21dOworCSAgICBp ZiAoayA+IDAgJiYgKnQyKSB7CisJCWlmICgoaW50KXN0cmxlbih0MikgPCBrKSAvKiBJZiBrZXkg dG9vIGJpZyAqLworCQkgIHQyID0gIiI7CQkvKiBtYWtlIGtleSB0aGUgZW1wdHkgc3RyaW5nICov CisJCWVsc2UJCQkvKiBLZXkgaXMgaW4gc3RyaW5nICovCisJCSAgdDIgPSB0ICsgazsJCS8qIHNv IHBvaW50IHRvIGtleSBwb3NpdGlvbiAqLworCSAgICB9CisJICAgIGZvciAoaSA9IGo7IGkgPj0g MDsgaSAtPSBtKSB7IC8qIExvb3AgdGhydSBjb21wYXJhbmRzIHNbaS4uXSovCisJCXQxID0gc1tp XTsKKwkJaWYgKCF0MSkJCS8qIFNhbWUgZGVhbCAqLworCQkgIHQxID0gIiI7CisJCWlmIChrID4g MCAmJiAqdDEpIHsKKwkJICAgIGlmICgoaW50KXN0cmxlbih0MSkgPCBrKQorCQkgICAgICB0MSA9 ICIiOworCQkgICAgZWxzZQorCQkgICAgICB0MSA9IHNbaV0razsKKwkJfQorCQlpZiAoYyA9PSAy KSB7CQkvKiBOdW1lcmljIGNvbXBhcmlzb24gKi8KKwkJICAgIHggPSAwOworI2lmZGVmIENLRkxP QVQKKwkJICAgIGYyID0gMC4wOworCQkgICAgZjEgPSAwLjA7CisJCSAgICBpZiAoaXNmbG9hdCh0 MSwxKSkgeworCQkJZjEgPSBmbG9hdHZhbDsKKwkJCWlmIChpc2Zsb2F0KHQyLDEpKQorCQkJICBm MiA9IGZsb2F0dmFsOworCQkJZWxzZQorCQkJICBmMSA9IDAuMDsKKwkJICAgIH0KKwkJICAgIGlm IChmMiA8IGYxKQorCQkgICAgICB4ID0gMTsKKwkJICAgIGVsc2UKKwkJICAgICAgeCA9IC0xOwor I2Vsc2UKKwkJICAgIG4yID0gMEw7CisJCSAgICBuMSA9IDBMOworCQkgICAgaWYgKHJkaWdpdHMo dDEpKSB7CisJCQluMSA9IGF0b2wodDEpOworCQkJaWYgKHJkaWdpdHModDIpKQorCQkJICBuMiA9 IGF0b2wodDIpOworCQkJZWxzZQorCQkJICBuMSA9IDBMOworCQkgICAgfQorCQkgICAgaWYgKG4y IDwgbjEpCisJCSAgICAgIHggPSAxOworCQkgICAgZWxzZQorCQkgICAgICB4ID0gLTE7CisjZW5k aWYgLyogQ0tGTE9BVCAqLworCQl9IGVsc2UgeworCQkgICAgeCA9IGNrc3RyY21wKHQxLHQyLC0x LGMpOyAvKiBDb21wYXJlICovCisJCX0KKwkJaWYgKHIgPT0gMCAmJiB4IDwgMCkKKwkJICBicmVh azsKKwkJaWYgKHIgIT0gMCAmJiB4ID4gMCkKKwkJICBicmVhazsKKwkJc1tpK21dID0gc1tpXTsK KwkJaWYgKHApIHBbaSttXSA9IHBbaV07CisJICAgIH0KKwkgICAgc1tpK21dID0gdDsKKwkgICAg aWYgKHApIHBbaSttXSA9IHU7CisJfQorICAgIH0KK30KKworCisvKiBDIEsgUiBBIEQgSSBYICAt LSAgUmFkaXggY29udmVydGVyICovCisvKgorICAgQ2FsbCB3aXRoOgorICAgICBzOiAgIGEgbnVt YmVyIGluIHN0cmluZyBmb3JtYXQuCisgICAgIGluOiAgaW50LCBzcGVjaWZ5aW5nIHRoZSByYWRp eCBvZiBzLCAyLTM2LgorICAgICBvdXQ6IGludCwgc3BlY2lmeWluZyB0aGUgcmFkaXggdG8gY29u dmVydCB0bywgMi0zNi4KKyAgIFJldHVybnM6CisgICAgIE5VTEwgb24gZXJyb3IgKGlsbGVnYWwg cmFkaXgsIGlsbGVnYWwgbnVtYmVyLCBldGMuKS4KKyAgICAgIi0xIiBvbiBvdmVyZmxvdyAobnVt YmVyIHRvbyBiaWcgZm9yIHVuc2lnbmVkIGxvbmcpLgorICAgICBPdGhlcndpc2U6IFBvaW50ZXIg dG8gcmVzdWx0LgorKi8KK2NoYXIgKgorY2tyYWRpeChzLGluLG91dCkgY2hhciAqIHM7IGludCBp biwgb3V0OyB7CisgICAgY2hhciBjLCAqciA9IHJ4cmVzdWx0OworICAgIGludCBkLCBtaW51cyA9 IDA7CisjaWZkZWYgQ09NTUVOVAorICAgIHVuc2lnbmVkIGxvbmcgenogPSAwTDsKKyAgICBsb25n IHogPSAwTDsKKyNlbHNlCisgICAgLyoKKyAgICAgIFRvIGdldCA2NCBiaXRzIG9uIDMyLWJpdCBo YXJkd2FyZSB3ZSB1c2Ugb2ZmX3QsIGJ1dCB0aGVyZQorICAgICAgaXMgbm8gdW5zaWduZWQgdmVy c2lvbiBvZiBvZmZfdCwgc28gd2UgbG9zZSB0aGUgYWJpbGl0eSB0bworICAgICAgZGV0ZWN0IG92 ZXJmbG93LgorICAgICovCisgICAgQ0tfT0ZGX1QgenogPSAoQ0tfT0ZGX1QpMDsKKyAgICBDS19P RkZfVCB6ID0gKENLX09GRl9UKTA7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgaWYgKGlu IDwgMiB8fCBpbiA+IDM2KQkJLyogVmVyaWZ5IGxlZ2FsIGlucHV0IHJhZGl4ICovCisgICAgICBy ZXR1cm4oTlVMTCk7CisgICAgaWYgKG91dCA8IDIgfHwgb3V0ID4gMzYpCQkvKiBhbmQgb3V0cHV0 IHJhZGl4LiAqLworICAgICAgcmV0dXJuKE5VTEwpOworICAgIGlmICgqcyA9PSAnKycpIHsJCQkv KiBHZXQgc2lnbiBpZiBhbnkgKi8KKwlzKys7CisgICAgfSBlbHNlIGlmICgqcyA9PSAnLScpIHsK KwltaW51cysrOworCXMrKzsKKyAgICB9CisgICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09ICcw JykJLyogVHJpbSBsZWFkaW5nIGJsYW5rcyBvciAwJ3MgKi8KKyAgICAgIHMrKzsKKy8qCisgIEZv ciBkZXRlY3Rpbmcgb3ZlcmZsb3csIHdlIHVzZSBhIHNpZ25lZCBjb3B5IG9mIHRoZSB1bnNpZ25l ZCBsb25nCisgIGFjY3VtdWxhdG9yLiAgSWYgaXQgZ29lcyBuZWdhdGl2ZSwgd2Uga25vdyB3ZSds bCBvdmVyZmxvdyBORVhUIHRpbWUKKyAgdGhyb3VnaCB0aGUgbG9vcC4KKyovCisgICAgZm9yICg7 ICpzOyAgcysrKSB7CQkJLyogQ29udmVydCBmcm9tIGlucHV0IHJhZGl4IHRvICovCisJYyA9ICpz OwkJCQkvKiB1bnNpZ25lZCBsb25nICovCisJaWYgKGlzbG93ZXIoYykpIGMgPSB0b3VwcGVyKGMp OworCWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKKwkgIGQgPSBjIC0gJzAnOworCWVsc2UgaWYg KGMgPj0gJ0EnICYmIGMgPD0gJ1onKQorCSAgZCA9IGMgLSAnQScgKyAxMDsKKwllbHNlCisJICBy ZXR1cm4oTlVMTCk7CisJaWYgKGQgPj0gaW4pCQkJLyogQ2hlY2sgZm9yIGlsbGVnYWwgZGlnaXQg Ki8KKwkgIHJldHVybihOVUxMKTsKKwl6eiA9IHp6ICogaW4gKyBkOworCWlmICh6IDwgMEwpCQkJ LyogQ2xldmVyKD8pIG92ZXJmbG93IGRldGVjdG9yICovCisJICByZXR1cm4oIi0xIik7CisgICAg ICAgIHogPSB6ejsKKyAgICB9CisgICAgaWYgKCF6eikgcmV0dXJuKCIwIik7CisgICAgciA9ICZy eHJlc3VsdFtSWFJFU1VMVF07CQkvKiBDb252ZXJ0IGZyb20gdW5zaWduZWQgbG9uZyAqLworICAg ICpyLS0gPSBOVUw7CQkJCS8qIHRvIG91dHB1dCByYWRpeC4gKi8KKyAgICB3aGlsZSAoenogPiAw ICYmIHIgPiByeHJlc3VsdCkgeworCWQgPSB6eiAlICh1bnNpZ25lZClvdXQ7CisJKnItLSA9IHJ4 ZGlnaXRzW2RdOworCXp6ID0genogLyAodW5zaWduZWQpb3V0OworICAgIH0KKyAgICBpZiAobWlu dXMpICpyLS0gPSAnLSc7CQkvKiBSZXBsYWNlIG9yaWdpbmFsIHNpZ24gKi8KKyAgICByZXR1cm4o KGNoYXIgKikocisxKSk7Cit9CisKKyNpZm5kZWYgTk9CNjQKKy8qIEJhc2UtNjQgY29udmVyc2lv biByb3V0aW5lcyAqLworCitzdGF0aWMgY2hhciBiNjRbXSA9IHsJCQkvKiBFbmNvZGluZyB2ZWN0 b3IgKi8KKyNpZmRlZiBwZHAxMQorICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZn aGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iCisjZWxzZQorICAnQScsJ0InLCdDJywn RCcsJ0UnLCdGJywnRycsJ0gnLCdJJywnSicsJ0snLCdMJywnTScsJ04nLCdPJywnUCcsJ1EnLCdS JywnUycsCisgICdUJywnVScsJ1YnLCdXJywnWCcsJ1knLCdaJywnYScsJ2InLCdjJywnZCcsJ2Un LCdmJywnZycsJ2gnLCdpJywnaicsJ2snLCdsJywKKyAgJ20nLCduJywnbycsJ3AnLCdxJywncics J3MnLCd0JywndScsJ3YnLCd3JywneCcsJ3knLCd6JywnMCcsJzEnLCcyJywnMycsJzQnLAorICAn NScsJzYnLCc3JywnOCcsJzknLCcrJywnLycsJz0nLCdcMCcKKyNlbmRpZiAvKiBwZHAxMSAqLwor fTsKK3N0YXRpYyBpbnQgYjY0dGJsW10gPSB7CQkJLyogRGVjb2RpbmcgdmVjdG9yICovCisgICAg LTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAt MiwgLTIsCisgICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAt MiwgLTIsIC0yLCAtMiwgLTIsCisgICAgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt MSwgLTEsIC0xLCA2MiwgLTEsIC0xLCAtMSwgNjMsCisgICAgNTIsIDUzLCA1NCwgNTUsIDU2LCA1 NywgNTgsIDU5LCA2MCwgNjEsIC0xLCAtMSwgLTEsIC0yLCAtMSwgLTEsCisgICAgLTEsICAwLCAg MSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsCisg ICAgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAtMSwgLTEsIC0x LCAtMSwgLTEsCisgICAgLTEsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1 LCAzNiwgMzcsIDM4LCAzOSwgNDAsCisgICAgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4 LCA0OSwgNTAsIDUxLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs CisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEs IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEKK307CisKKy8qCisgICBCIDggVCBPIEIgNiA0ICAtLSAgQ29udmVydHMg OC1iaXQgZGF0YSB0byBCYXNlNjQgZW5jb2RpbmcuCisKKyAgIENhbGwgd2l0aDoKKyAgICAgcyAg ID0gUG9pbnRlciB0byA4LWJpdCBkYXRhOworICAgICBuICAgPSBOdW1iZXIgb2Ygc291cmNlIGJ5 dGVzIHRvIGVuY29kZSAoU0VFIE5PVEUpLgorICAgICAgICAgICBJZiBpdCdzIGEgbnVsbC10ZXJt aW5hdGVkIHN0cmluZywgeW91IGNhbiB1c2UgLTEgaGVyZS4KKyAgICAgb3V0ID0gQWRkcmVzcyBv ZiBvdXRwdXQgYnVmZmVyLgorICAgICBsZW4gPSBMZW5ndGggb2Ygb3V0cHV0IGJ1ZmZlciAoc2hv dWxkID4gNC8zIGxvbmdlciB0aGFuIGlucHV0KS4KKworICAgUmV0dXJuczoKKyAgICAgPj0gMCBp ZiBPSywgbnVtYmVyIG9mIGJ5dGVzIHBsYWNlZCBpbiBvdXRwdXQgYnVmZmVyLAorICAgICAgICAg IHdpdGggdGhlIHN1YnNlcXVlbnQgYnl0ZSBzZXQgdG8gTlVMIGlmIHNwYWNlIHBlcm1pdHMuCisg ICAgIC0xIG9uIGVycm9yIChvdXRwdXQgYnVmZmVyIHNwYWNlIGV4aGF1c3RlZCkuCisKKyAgIE5P VEU6CisgICAgIElmIHRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgY2FsbGVkIHJlcGVhdGVkbHksIGUu Zy4gdG8gZW5jb2RlIGEgZGF0YQorICAgICBzdHJlYW0gYSBjaHVuayBhdCBhIHRpbWUsIHRoZSBz b3VyY2UgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzCisgICAgIGluIGFsbCBjYWxscyBi dXQgdGhlIGZpbmFsIG9uZSB0byBhdm9pZCB0aGUgZ2VuZXJhdGlvbiBvZiBleHRyYW5lb3VzCisg ICAgIHBhZCBjaGFyYWN0ZXJzIHRoYXQgd291bGQgdGhyb3cgdGhlIGRlY29kZXIgb3V0IG9mIHN5 bmMuICBXaGVuIGVuY29kaW5nCisgICAgIG9ubHkgYSBzaW5nbGUgc3RyaW5nLCB0aGlzIGlzIG5v dCBhIGNvbnNpZGVyYXRpb24uICBObyBpbnRlcm5hbCBzdGF0ZQorICAgICBpcyBrZXB0LCBzbyB0 aGVyZSBpcyBubyByZXNldCBmdW5jdGlvbi4KKyovCitpbnQKK2I4dG9iNjQocyxuLG91dCxsZW4p IGNoYXIgKiBzLCogb3V0OyBpbnQgbiwgbGVuOyB7CisgICAgaW50IGIzLCBiNCwgaSwgeCA9IDA7 CisgICAgdW5zaWduZWQgaW50IHQ7CisKKyAgICBpZiAobiA8IDApIG4gPSBzdHJsZW4ocyk7CisK KyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSArPSAzLHggKz0gNCkgeyAvKiBMb29wIHRocm91Z2gg c291cmNlIGJ5dGVzICovCisJYjMgPSBiNCA9IDA7CisJdCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVk KSgodW5zaWduZWQgaW50KXNbaV0gJiAweGZmKSA8PCA4KTsKKwlpZiAobiAtIDEgPiBpKSB7CQkv KiBEbyB3ZSBoYXZlIGFub3RoZXIgYWZ0ZXIgdGhpcz8gKi8KKyAgICAgICAgICAgIHQgfD0gKHVu c2lnbmVkKShzW2krMV0gJiAweGZmKTsgLyogWWVzLCBPUiBpdCBpbiAqLworICAgICAgICAgICAg YjMgPSAxOwkJCS8qIEFuZCByZW1lbWJlciAqLworICAgICAgICB9CisgICAgICAgIHQgPDw9IDg7 CQkJLyogTW92ZSBvdmVyICovCisgICAgICAgIGlmIChuIC0gMiA+IGkpIHsJCS8qIEFub3RoZXIg b25lIGFmdGVyIHRoYXQ/ICovCisgICAgICAgICAgICB0IHw9ICh1bnNpZ25lZCkoc1tpKzJdICYg MHhmZik7IC8qIFllcywgT1IgaXQgaW4gKi8KKyAgICAgICAgICAgIGI0ID0gMTsJCQkvKiBhbmQg cmVtZW1iZXIgKi8KKyAgICAgICAgfQorCWlmICh4ICsgNCA+IGxlbikJCS8qIENoZWNrIG91dHB1 dCBzcGFjZSAqLworCSAgcmV0dXJuKC0xKTsKKwlvdXRbeCszXSA9IGI2NFtiNCA/ICh0ICYgMHgz ZikgOiA2NF07IC8qIDY0ID0gY29kZSBmb3IgJz0nICovCisgICAgICAgIHQgPj49IDY7CisgICAg ICAgIG91dFt4KzJdID0gYjY0W2IzID8gKHQgJiAweDNmKSA6IDY0XTsKKyAgICAgICAgdCA+Pj0g NjsKKyAgICAgICAgb3V0W3grMV0gPSBiNjRbdCAmIDB4M2ZdOworICAgICAgICB0ID4+PSA2Owor ICAgICAgICBvdXRbeF0gICA9IGI2NFt0ICYgMHgzZl07CisgICAgfQorICAgIGlmICh4IDwgbGVu KSBvdXRbeF0gPSBOVUw7CQkvKiBOdWxsLXRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisgICAgcmV0 dXJuKHgpOworfQorCisKKy8qCisgICBCIDYgNCBUIE8gQiA4ICAtLSAgQ29udmVydHMgQmFzZTY0 IHN0cmluZyB0byA4LWJpdCBkYXRhLgorCisgICBDYWxsIHdpdGg6CisgICAgIHMgICA9IHBvaW50 ZXIgdG8gQmFzZTY0IHN0cmluZyAod2hpdGVzcGFjZSBpZ25vcmVkKS4KKyAgICAgbiAgID0gbGVu Z3RoIG9mIHN0cmluZywgb3IgLTEgaWYgbnVsbCB0ZXJtaW5hdGVkLCBvciAwIHRvIHJlc2V0Lgor ICAgICBvdXQgPSBhZGRyZXNzIG9mIG91dHB1dCBidWZmZXIuCisgICAgIGxlbiA9IGxlbmd0aCBv ZiBvdXRwdXQgYnVmZmVyLgorCisgICBSZXR1cm5zOgorICAgICA+PSAwIGlmIE9LLCBudW1iZXIg b2YgYnl0ZXMgcGxhY2VkIGluIG91dHB1dCBidWZmZXIsCisgICAgICAgICAgd2l0aCB0aGUgc3Vi c2VxdWVudCBieXRlIHNldCB0byBOVUwgaWYgc3BhY2UgcGVybWl0cy4KKyAgICAgPCAgMCBvbiBl cnJvcjoKKyAgICAgICAtMSA9IG91dHB1dCBidWZmZXIgdG9vIHNtYWxsIGZvciBpbnB1dC4KKyAg ICAgICAtMiA9IGlucHV0IGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4KKyAgICAgICAtMyA9 IGludGVybmFsIGNvZGluZyBlcnJvci4KKworICAgTk9URToKKyAgICAgQ2FuIGJlIGNhbGxlZCBy ZXBlYXRlZGx5IHRvIGRlY29kZSBhIEJhc2U2NCBzdHJlYW0sIG9uZSBjaHVuayBhdCBhCisgICAg IHRpbWUuICBIb3dldmVyLCBpZiBpdCBpcyB0byBiZSBjYWxsZWQgZm9yIG11bHRpcGxlIHN0cmVh bXMgaW4KKyAgICAgc3VjY2Vzc2lvbiwgaXRzIGludGVybmFsIHN0YXRlIG11c3QgYmUgcmVzZXQg YXQgdGhlIGJlZ2lubmluZyBvZgorICAgICB0aGUgbmV3IHN0cmVhbS4KKyovCitpbnQKK2I2NHRv YjgocyxuLG91dCxsZW4pIGNoYXIgKiBzLCogb3V0OyBpbnQgbiwgbGVuOyB7IC8qIERlY29kZSAq LworICAgIHN0YXRpYyBpbnQgYml0cyA9IDA7CisgICAgc3RhdGljIHVuc2lnbmVkIGludCByID0g MDsKKyAgICBpbnQgaSwgayA9IDAsIHgsIHQ7CisgICAgdW5zaWduZWQgY2hhciBjOworCisgICAg aWYgKG4gPT0gMCkgewkJCS8qIFJlc2V0IHN0YXRlICovCisJYml0cyA9IDA7CisJciA9IDA7CisJ cmV0dXJuKDApOworICAgIH0KKyAgICB4ID0gKG4gPCAwKSA/IHN0cmxlbihzKSA6IG47CS8qIFNv dXJjZSBsZW5ndGggKi8KKworICAgIG4gPSAoKHggKyAzKSAvIDQpICogMzsJCS8qIENvbXB1dGUg ZGVzdGluYXRpb24gbGVuZ3RoICovCisgICAgaWYgKHggPiAwICYmIHNbeC0xXSA9PSAnPScpIG4t LTsJLyogQWNjb3VudCBmb3IgcGFkZGluZyAqLworICAgIGlmICh4ID4gMSAmJiBzW3gtMl0gPT0g Jz0nKSBuLS07CisgICAgaWYgKG4gPiBsZW4pCQkJLyogRGVzdGluYXRpb24gbm90IGJpZyBlbm91 Z2ggKi8KKyAgICAgIHJldHVybigtMSk7CQkJLyogRmFpbCAqLworCisgICAgZm9yIChpID0gMDsg aSA8IHg7IGkrKykgewkJLyogTG9vcCB0aHJ1IHNvdXJjZSAqLworCWMgPSAoQ0hBUilzW2ldOwkJ CS8qIE5leHQgY2hhciAqLworICAgICAgICB0ID0gYjY0dGJsW2NdOwkJCS8qIENvZGUgZm9yIHRo aXMgY2hhciAqLworCWlmICh0ID09IC0yKSB7CQkJLyogV2hpdGVzcGFjZSBvciBDdHJsICovCisJ ICAgIG4tLTsJCQkvKiBJZ25vcmUgKi8KKwkgICAgY29udGludWU7CisJfSBlbHNlIGlmICh0ID09 IC0xKSB7CQkvKiBJbGxlZ2FsIGNvZGUgKi8KKwkgICAgcmV0dXJuKC0yKTsJCQkvKiBGYWlsLiAq LworCX0gZWxzZSBpZiAodCA+IDYzIHx8IHQgPCAwKQkvKiBJbGxlZ2FsIHZhbHVlICovCisJICBy ZXR1cm4oLTMpOwkJCS8qIGZhaWwuICovCisJYml0cyArPSA2OwkJCS8qIENvdW50IGJpdHMgKi8K KwlyIDw8PSA2OwkJCS8qIE1ha2Ugc3BhY2UgKi8KKwlyIHw9ICh1bnNpZ25lZCkgdDsJCS8qIE9S IGluIG5ldyBjb2RlICovCisJaWYgKGJpdHMgPj0gOCkgewkJLyogSGF2ZSBhIGJ5dGUgeWV0PyAq LworCSAgICBiaXRzIC09IDg7CQkJLyogT3V0cHV0IGl0ICovCisJICAgIGMgPSAodW5zaWduZWQp ICgociA+PiBiaXRzKSAmIDB4ZmYpOworCSAgICBvdXRbaysrXSA9IGM7CisJfQorICAgIH0KKyAg ICBpZiAoayA8IGxlbikgb3V0W2tdID0gTlVMOwkJLyogTnVsbC10ZXJtaW5hdGUgaW4gY2FzZSBp dCdzICovCisgICAgcmV0dXJuKGspOwkJCQkvKiBhIHRleHQgc3RyaW5nICovCit9CisjZW5kaWYg LyogTk9CNjQgKi8KKworLyogQyBIIEsgTiBVIE0gIC0tICBTZWUgaWYgYXJndW1lbnQgc3RyaW5n IGlzIGFuIGludGVnZXIgICovCisKKy8qIFJldHVybnMgMSBpZiBPSywgemVybyBpZiBub3QgT0sg Ki8KKy8qIElmIE9LLCBzdHJpbmcgc2hvdWxkIGJlIGFjY2VwdGFibGUgdG8gYXRvaSgpIG9yIGF0 b2woKSBvciBja2F0b2ZzKCkgKi8KKy8qIEFsbG93cyBsZWFkaW5nIHNwYWNlLCBzaWduICovCisK K2ludAorY2hrbnVtKHMpIGNoYXIgKnM7IHsJCQkvKiBDaGVjayBOdW1lcmljIFN0cmluZyAqLwor ICAgIGludCB4ID0gMDsJCQkJLyogRmxhZyBmb3IgcGFzdCBsZWFkaW5nIHNwYWNlICovCisgICAg aW50IHkgPSAwOwkJCQkvKiBGbGFnIGZvciBkaWdpdCBzZWVuICovCisgICAgY2hhciBjOworICAg IGRlYnVnKEYxMTAsImNoa251bSIscywwKTsKKyAgICBpZiAoIXMpIHJldHVybigwKTsKKyAgICBp ZiAoISpzKSByZXR1cm4oMCk7CisgICAgd2hpbGUgKChjID0gKnMrKykpIHsJCS8qIEZvciBlYWNo IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nICovCisJc3dpdGNoIChjKSB7CisJICBjYXNlIFNQOgkJ CS8qIEFsbG93IGxlYWRpbmcgc3BhY2VzICovCisJICBjYXNlIEhUOgorCSAgICBpZiAoeCA9PSAw KSBjb250aW51ZTsKKwkgICAgZWxzZSByZXR1cm4oMCk7CisJICBjYXNlICcrJzoJCQkvKiBBbGxv dyBsZWFkaW5nIHNpZ24gKi8KKwkgIGNhc2UgJy0nOgorCSAgICBpZiAoeCA9PSAwKSB4ID0gMTsK KwkgICAgZWxzZSByZXR1cm4oMCk7CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoJCQkvKiBBZnRl ciB0aGF0LCBvbmx5IGRlY2ltYWwgZGlnaXRzICovCisJICAgIGlmIChjID49ICcwJyAmJiBjIDw9 ICc5JykgeworCQl4ID0geSA9IDE7CisJCWNvbnRpbnVlOworCSAgICB9IGVsc2UgcmV0dXJuKDAp OworCX0KKyAgICB9CisgICAgcmV0dXJuKHkpOworfQorCisKKy8qICBSIEQgSSBHIEkgVCBTICAt LSBWZXJpZnkgdGhhdCBhbGwgY2hhcmFjdGVycyBpbiBhcmcgQVJFIERJR0lUUyAgKi8KKworLyog IFJldHVybnMgMSBpZiBzbywgMCBpZiBub3Qgb3IgaWYgc3RyaW5nIGlzIGVtcHR5ICovCisKK2lu dAorcmRpZ2l0cyhzKSBjaGFyICpzOyB7CisgICAgaWYgKCFzKSByZXR1cm4oMCk7CisgICAgZG8g eworICAgICAgICBpZiAoIWlzZGlnaXQoKnMpKSByZXR1cm4oMCk7CisgICAgICAgIHMrKzsKKyAg ICB9IHdoaWxlICgqcyk7CisgICAgcmV0dXJuKDEpOworfQorCisvKiAgUCBBIFIgTiBBIE0gIC0t ICBSZXR1cm4gcGFyaXR5IG5hbWUgKi8KKworY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK3Bhcm5h bShjaGFyIGMpCisjZWxzZQorcGFybmFtKGMpIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogcGFybmFtICovIHsKKyAgICBzd2l0Y2ggKGMpIHsKKwljYXNlICdlJzogcmV0dXJuKCJl dmVuIik7CisJY2FzZSAnbyc6IHJldHVybigib2RkIik7CisJY2FzZSAnbSc6IHJldHVybigibWFy ayIpOworCWNhc2UgJ3MnOiByZXR1cm4oInNwYWNlIik7CisJY2FzZSAwOiAgIHJldHVybigibm9u ZSIpOworCWRlZmF1bHQ6ICByZXR1cm4oImludmFsaWQiKTsKKyAgICB9Cit9CisKK2NoYXIgKgkJ CQkJLyogQ29udmVydCBzZWNvbmRzIHRvIGhoOm1tOnNzICovCisjaWZkZWYgQ0tfQU5TSUMKK2ho bW1zcyhsb25nIHgpCisjZWxzZQoraGhtbXNzKHgpIGxvbmcgeDsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogaGhtbXNzKHgpICovIHsKKyAgICBzdGF0aWMgY2hhciBidWZbMTBdOworICAgIGxv bmcgcywgaCwgbTsKKyAgICBoID0geCAvIDM2MDBMOwkJCS8qIEhvdXJzICovCisgICAgeCA9IHgg JSAzNjAwTDsKKyAgICBtID0geCAvIDYwTDsJCQkvKiBNaW51dGVzICovCisgICAgcyA9IHggJSA2 MEw7CQkJLyogU2Vjb25kcyAqLworICAgIGlmICh4ID4gLTFMKQorICAgICAgc3ByaW50ZihidWYs IiUwMmxkOiUwMmxkOiUwMmxkIixoLG0scyk7CisgICAgZWxzZQorICAgICAgYnVmWzBdID0gTlVM OworICAgIHJldHVybigoY2hhciAqKWJ1Zik7Cit9CisKKy8qIEwgUyBFIFQgIC0tICBTZXQgcyBp bnRvIHAsIHJpZ2h0IHBhZGRpbmcgdG8gbGVuZ3RoIG4gd2l0aCBjaGFyIGM7ICovCisvKgorICAg cyBpcyBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgIElmIGxlbmd0aChzKSA+IG4sIG9ubHkg biBieXRlcyBhcmUgbW92ZWQuCisgICBUaGUgcmVzdWx0IGlzIE5PVCBOVUwgdGVybWluYXRlZCB1 bmxlc3MgYyA9PSBOVUwgYW5kIGxlbmd0aChzKSA8IG4uCisgICBUaGUgaW50ZW5kZWQgb2YgdGhp cyByb3V0aW5lIGlzIGZvciBmaWxsaW5nIGluIGZpeGVkLWxlbmd0aCByZWNvcmQgZmllbGRzLgor Ki8KK1ZPSUQKK2xzZXQocCxzLG4sYykgY2hhciAqczsgY2hhciAqcDsgaW50IG47IGludCBjOyB7 CisgICAgaW50IHg7CisjaWZuZGVmIFVTRV9NRU1DUFkKKyAgICBpbnQgaTsKKyNlbmRpZiAvKiBV U0VfTUVNQ1BZICovCisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgeCA9IHN0cmxlbihzKTsKKyAg ICBpZiAoeCA+IG4pIHggPSBuOworI2lmZGVmIFVTRV9NRU1DUFkKKyAgICBtZW1jcHkocCxzLHgp OworICAgIGlmIChuID4geCkKKyAgICAgIG1lbXNldChwK3gsYyxuLXgpOworI2Vsc2UKKyAgICBm b3IgKGkgPSAwOyBpIDwgeDsgaSsrKQorICAgICAgKnArKyA9ICpzKys7CisgICAgZm9yICg7IGkg PCBuOyBpKyspCisgICAgICAqcCsrID0gYzsKKyNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCit9CisK Ky8qIFIgUyBFIFQgIC0tICBSaWdodC1hZGp1c3QgcyBpbiBwLCBsZWZ0IHBhZGRpbmcgdG8gbGVu Z3RoIG4gd2l0aCBjaGFyIGMgKi8KKworVk9JRAorcnNldChwLHMsbixjKSBjaGFyICpzOyBjaGFy ICpwOyBpbnQgbjsgaW50IGM7IHsKKyAgICBpbnQgeDsKKyNpZm5kZWYgVVNFX01FTUNQWQorICAg IGludCBpOworI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAg ICB4ID0gc3RybGVuKHMpOworICAgIGlmICh4ID4gbikgeCA9IG47CisjaWZkZWYgVVNFX01FTUNQ WQorICAgIG1lbXNldChwLGMsbi14KTsKKyAgICBtZW1jcHkocCtuLXgscyx4KTsKKyNlbHNlCisg ICAgZm9yIChpID0gMDsgaSA8IChuIC0geCk7IGkrKykKKyAgICAgICpwKysgPSBjOworICAgIGZv ciAoOyBpIDwgbjsgaSsrKQorICAgICAgKnArKyA9ICpzKys7CisjZW5kaWYgLyogVVNFX01FTUNQ WSAqLworfQorCisvKiAgVSBMIE8gTiBHIFQgTyBIIEUgWCAgLS0gIFVuc2lnbmVkIGxvbmcgdG8g aGV4ICAqLworCisvKgorICBDb252ZXJ0cyB1bnNpZ25lZCBsb25nIGFyZyB0byBoZXggYW5kIHJl dHVybnMgc3RyaW5nIHBvaW50ZXIgdG8KKyAgcmlnaHRtb3N0IG4gaGV4IGRpZ2l0cyBsZWZ0IHBh ZGRlZCB3aXRoIDAncy4gIEFsbG93cyBmb3IgbG9uZ3MKKyAgdXAgdG8gNjQgYml0cy4gIFJldHVy bnMgcG9pbnRlciB0byByZXN1bHQuCisqLworY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK3Vsb25n dG9oZXgoIHVuc2lnbmVkIGxvbmcgeiwgaW50IG4gKQorI2Vsc2UKK3Vsb25ndG9oZXgoeixuKSB1 bnNpZ25lZCBsb25nIHo7IGludCBuOyAKKyNlbmRpZgkvKiBDS19BTlNJQyAqLworLyogdWxvbmd0 b2hleCAqLyB7CisgICAgc3RhdGljIGNoYXIgaGV4YnVmWzE3XTsKKyAgICBpbnQgaSA9IDE2LCB4 LCBrID0gMDsKKyAgICBoZXhidWZbMTZdID0gJ1wwJzsKKyAgICBpZiAobiA+IDE2KSBuID0gMTY7 CisgICAgayA9IDIgKiAoc2l6ZW9mKGxvbmcpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KSB7CisJaWYgKGkgPiBrIHx8IHogPT0gMCkgeworCSAgICBoZXhidWZbMTUtaV0gPSAnMCc7CisJ fSBlbHNlIHsKKwkgICAgeCA9IHogJiAweDBmOworCSAgICB6ID0geiA+PiA0OworCSAgICBoZXhi dWZbMTUtaV0gPSB4ICsgKCh4IDwgMTApID8gJzAnIDogMHgzNyk7CisJfQorICAgIH0KKyAgICBy ZXR1cm4oKGNoYXIgKikoJmhleGJ1ZlsxNi1pXSkpOworfQorCisvKiAgSCBFIFggVCBPIFUgTCBP IE4gRyAgLS0gIEhleCBzdHJpbmcgdG8gdW5zaWduZWQgbG9uZyAgKi8KKworLyoKKyAgQ29udmVy dHMgbiBjaGFycyBmcm9tIHMgZnJvbSBoZXggdG8gdW5zaWduZWQgbG9uZy4KKyAgUmV0dXJuczoK KyAgIDBMIG9yIHBvc2l0aXZlLCBnb29kIHJlc3VsdCAoMEwgaXMgcmV0dXJuZWQgaWYgYXJnIGlz IE5VTEwgb3IgZW1wdHkpLgorICAtMUwgb24gZXJyb3I6IG5vbi1oZXggYXJnIG9yIG92ZXJmbG93 LgorKi8KK2xvbmcKK2hleHRvdWxvbmcocyxuKSBjaGFyICpzOyBpbnQgbjsgeworICAgIGNoYXIg YnVmWzY0XTsKKyAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDBMOworICAgIGludCBkLCBjb3Vu dCA9IDA7CisgICAgaW50IGZsYWcgPSAwOworICAgIGlmICghcykgcyA9ICIiOworICAgIGlmICgh KnMpIHsKKwlyZXR1cm4oMEwpOworICAgIH0KKyAgICBpZiAobiA8IDEpCisgICAgICByZXR1cm4o MEwpOworICAgIGlmIChuID4gNjMpIG4gPSA2MzsKKyAgICBzdHJuY3B5KGJ1ZixzLG4pOworICAg IGJ1ZltuXSA9ICdcMCc7CisgICAgcyA9IGJ1ZjsKKyAgICB3aGlsZSAoKnMpIHsKKwlkID0gKnMr KzsKKwlpZiAoKGQgPT0gJzAnIHx8IGQgPT0gJyAnKSkgeworCSAgICBpZiAoIWZsYWcpCisJICAg ICAgY29udGludWU7CisJfSBlbHNlIHsKKwkgICAgZmxhZyA9IDE7CisJfQorCWlmIChpc2xvd2Vy KGQpKQorCSAgZCA9IHRvdXBwZXIoZCk7CisJaWYgKGQgPj0gJzAnICYmIGQgPD0gJzknKSB7CisJ ICAgIGQgLT0gMHgzMDsKKwl9IGVsc2UgaWYgKGQgPj0gJ0EnICYmIGQgPD0gJ0YnKSB7CisJICAg IGQgLT0gMHgzNzsKKwl9IGVsc2UgeworCSAgICByZXR1cm4oLTFMKTsKKwl9CisJaWYgKCsrY291 bnQgPiAoc2l6ZW9mKGxvbmcpICogMikpCisJICByZXR1cm4oLTFMKTsKKwlyZXN1bHQgPSAocmVz dWx0IDw8IDQpIHwgKGQgJiAweDBmKTsKKyAgICB9CisgICAgcmV0dXJuKHJlc3VsdCk7Cit9CisK Ky8qCisgIGMgayBzIHAgbCBpIHQgIC0tICBTcGxpdHMgYSBzdHJpbmcgaW50byB3b3Jkcywgb3I6 CisgICAgICAgICAgICAgICAgICAgICBleHRyYWN0cyBhIGdpdmVuIHdvcmQgZnJvbSBhIHN0cmlu Zy4KKworICBBbGxvd3MgZm9yIGdyb3VwaW5nLgorICBPcGVyYXRlcyBvbiBhIGNvcHkgb2YgdGhl IHN0cmluZzsgZG9lcyBub3QgYWx0ZXIgdGhlIG9yaWdpbmFsIHN0cmluZy4KKyAgQWxsIHN0cmlu Z3MgTlVMLXRlcm1pbmF0ZWQuCisKKyAgQ2FsbCB3aXRoOgorICAgIGZjID0gZnVuY3Rpb24gY29k ZToKKyAgICAgICAgIDEgPSBzcGxpdCwgMCA9IHdvcmQuCisgICAgbjEgPSBkZXNpcmVkIHdvcmQg bnVtYmVyIGlmIGZjID09IDAuCisgICAgczEgPSBzb3VyY2Ugc3RyaW5nLgorICAgIHMyID0gYnJl YWsgc3RyaW5nIChOVUxMIHRvIGFjY2VwdCBkZWZhdWx0ID0gYWxsIG5vbi1hbHBoYW51bSkuCisg ICAgczMgPSBpbmNsdWRlIHN0cmluZyAoTlVMTCB0byBhY2NlcHQgZGVmYXVsdCA9IGFsbCBhbHBo YW51bSkuCisgICAgbjIgPSBncm91cGluZyBtYXNrIChPUiBkZXNpcmVkIG9uZXMgdG9nZXRoZXIp OgorICAgICAgICAgMSA9IGRvdWJsZXF1b3RlcywgIDIgPSBicmFjZXMsICAgIDQgPSBhcG9zdHJv cGhlcywKKyAgICAgICAgIDggPSBwYXJlbnMsICAgICAgIDE2ID0gYnJhY2tldHMsIDMyID0gYW5n bGUgYnJhY2tldHMsCisgICAgICAgIC0xID0gNjMgPSBhbGwgb2YgdGhlc2UuCisgICAgbjMgPSBn cm91cCBxdW90ZSBjaGFyYWN0ZXIsIEFTQ0lJIHZhbHVlLCB1c2VkIGFuZCB0ZXN0ZWQgb25seSBm b3IKKyAgICAgICAgIExJU1AgcXVvdGUsIGUuZy4gKGEgJ2IgYyAnKGQgZSBmKSkuCisgICAgbjQg PSAwIHRvIGNvbGxhcHNlIGFkamFjZW50IHNlcGFyYXRvcnM7CisgICAgICAgICBub256ZXJvIG5v dCB0byBjb2xsYXBzZSB0aGVtLgorCisgIFJldHVybnM6CisgICAgUG9pbnRlciB0byBzdHJ1Y3Qg c3RyaW5nYXJyYXksIHdpdGggc2l6ZToKKyAgICAgIC0xID0gbWVtb3J5IGFsbG9jYXRpb24gZXJy b3IuCisgICAgICAtMiA9IHRvbyBtYW55IHdvcmRzIGluIHN0cmluZy4KKyAgICAgICBuID0gbnVt YmVyIG9mIHdvcmRzICgwIG9yIG1vcmUpLgorCisgIFdpdGg6CisgICAgd29yZGFycmF5ID0gYXJy YXkgb2YgcG9pbnRlcnMgdG8gbiB3b3JkcyAobiA9PSAxIGlmIGZjID09IDApLCAxLWJhc2VkLgor ICAgIEVhY2ggcG9pbnRlciBpcyB0byBhIG1hbGxvYydkIHN0cmluZy4gIFRoaXMgYXJyYXkgaXMg cmVjeWNsZWQgdXBvbiBlYWNoCisgICAgY2FsbDsgaWYgeW91IG5lZWQgdG8ga2VlcCB0aGUgc3Ry aW5ncywgbWFrZSBjb3BpZXMgb2YgdGhlbS4gIFRoaXMgcm91dGluZQorICAgIG11c3QgaGF2ZSBj b250cm9sIG9mIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbi4KKworICBJZiBhIGdpdmVuIGNo YXJhY3RlciBpcyBpbmNsdWRlZCBpbiB0aGUgaW5jbHVkZSBsaXN0LCBpdCBpcyBub3QgdHJlYXRl ZAorICBhcyBhIHNlcGFyYXRvciBvciBhcyBhIGdyb3VwaW5nIGNoYXJhY3Rlci4KKworICBHcm91 cHMgbWF5IGJlIG5lc3RlZCBvbmx5IGlmIHRoZXkgYXJlIGZvcm1lZCB3aXRoIGJyYWNlcywgcGFy ZW5zLCBvcgorICBicmFja2V0cywgYnV0IG5vdCB3aXRoIHF1b3RlcyBvciBhcG9zdHJvcGhlcyBz aW5jZSBBU0NJSSBxdW90ZXMgaGF2ZSBubworICBpbnRyaW5zaWMgaGFuZGVkbmVzcy4gIEdyb3Vw LXN0YXJ0IGFuZCBlbmQgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcworICBzZXBhcmF0b3JzIGV2 ZW4gaW4gdGhlIGFic2VuY2Ugb2Ygb3RoZXIgc2VwYXJhdG9ycywgc28gYSBzdHJpbmcgc3VjaCBh cworICAiYXtifWMiIHJlc3VsdHMgaW4gdGhyZWUgd29yZHMsIG5vdCBvbmUuCisKKyAgU2FtcGxl IGNhbGwgdG8gc3BsaXQgYSBzdHJpbmcgaW50byBhbiBhcnJheToKKyAgICBzdHJ1Y3Qgc3RyaW5n YXJyYXkgKiBxOworICAgIHEgPSBja3NwbGl0KDEsMCxzMSxzMixzMywtMSwwKTsKKyAgICAgICAg cS0+YV9zaXplID0gc2l6ZSAoPj0wKSBvciBmYWlsdXJlIGNvZGUgKDwwKQorICAgICAgICBxLT5h X2hlYWQgPSBwb2ludGVyIHRvIGFycmF5IChlbGVtZW50cyAwIHRocnUgcS0+YXNpemUgLSAxKS4K KworICBTYW1wbGUgY2FsbCB0byBleHRyYWN0IHdvcmQgbiBmcm9tIGEgc3RyaW5nOgorICAgIHN0 cnVjdCBzdHJpbmdhcnJheSAqIHE7CisgICAgcSA9IGNrc3BsaXQoMCxuLHMxLHMyLHMzLC0xLDAp OworICAgICAgICBxLT5hX3NpemUgPSBzaXplICgxKSBvciBmYWlsdXJlIGNvZGUgKDwwKQorICAg ICAgICBxLT5hX2hlYWQgPSBwb2ludGVyIHRvIGFycmF5IChlbGVtZW50IDEgaXMgdGhlIGRlc2ly ZWQgd29yZCkuCisqLworCisvKiBTdGF0ZXMgKi8KKworI2RlZmluZSBTVF9CVyAgMAkJCS8qIEJl dHdlZW4gV29yZHMgKi8KKyNkZWZpbmUgU1RfSVcgIDEJCQkvKiBJbiBXb3JkICovCisjZGVmaW5l IFNUX0lHICAyCQkJLyogU3RhcnQgR3JvdXAgKi8KKworLyogQ2hhcmFjdGVyIENsYXNzZXMgKGJp dG1hcCkgKi8KKworI2RlZmluZSBDTF9TRVAgMQkJCS8qIFNlcGFyYXRvciAqLworI2RlZmluZSBD TF9PUE4gMgkJCS8qIEdyb3VwIE9wZW4gKi8KKyNkZWZpbmUgQ0xfQ0xTIDQJCQkvKiBHcm91cCBD bG9zZSAqLworI2RlZmluZSBDTF9EQVQgOAkJCS8qIERhdGEgKi8KKyNkZWZpbmUgQ0xfUVVPIDE2 CQkJLyogR3JvdXAgcXVvdGUgKi8KKworI2lmZGVmIEJJR0JVRk9LCisjaWZuZGVmIE1BWFdPUkRT CisjZGVmaW5lIE1BWFdPUkRTIDQwOTYJCQkvKiBNYXggbnVtYmVyIG9mIHdvcmRzICovCisjZW5k aWYgLyogTUFYV09SRFMgKi8KKyNpZm5kZWYgTkVTVE1BWAorI2RlZmluZSBORVNUTUFYIDY0CQkJ LyogTWF4aW11bSBuZXN0aW5nIGxldmVsICovCisjZW5kaWYgLyogTkVTVE1BWCAqLworI2Vsc2UK KyNpZm5kZWYgTUFYV09SRFMKKyNkZWZpbmUgTUFYV09SRFMgMTI4CQkJLyogTWF4IG51bWJlciBv ZiB3b3JkcyAqLworI2VuZGlmIC8qIE1BWFdPUkRTICovCisjaWZuZGVmIE5FU1RNQVgKKyNkZWZp bmUgTkVTVE1BWCAxNgkJCS8qIE1heGltdW0gbmVzdGluZyBsZXZlbCAqLworI2VuZGlmIC8qIE5F U1RNQVggKi8KKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworCisvKiBzdGF0aWMgKi8gY2hhciAqKiB3 b3JkYXJyYXkgPSBOVUxMOwkvKiBSZXN1bHQgYXJyYXkgb2Ygd29yZCBwb2ludGVycyAqLworCitz dGF0aWMgc3RydWN0IHN0cmluZ2FycmF5IGNrX3N2YWwgPSAgewkvKiBSZXR1cm4gdmFsdWUgc3Ry dWN0dXJlICovCisgICAgTlVMTCwJCQkJLyogUG9pbnRlciB0byBhcnJheSAqLworICAgIDAJCQkJ CS8qIFNpemUgKi8KK307CitzdGF0aWMgaW50ICogd29yZHNpemUgPSBOVUxMOworCitzdGF0aWMg Vk9JRAorc2V0d29yZChuLHMsbGVuKSBpbnQgbiwgbGVuOyBjaGFyICogczsgeworICAgIHJlZ2lz dGVyIGNoYXIgKiBwOworICAgIHJlZ2lzdGVyIGludCBpLCBrOworCisgICAgaWYgKCFzKSBzID0g IiI7CisKKyAgICBpZiAoIXdvcmRhcnJheSkgewkJCS8qIEFsbG9jYXRlIHJlc3VsdCBhcnJheSAo b25seSBvbmNlKSAqLworCWlmICghKHdvcmRhcnJheSA9IChjaGFyICoqKW1hbGxvYygoTUFYV09S RFMrMSkgKiBzaXplb2YoY2hhciAqKSkpKQorCSAgcmV0dXJuOworCWlmICghKHdvcmRzaXplID0g KGludCAqKW1hbGxvYygoTUFYV09SRFMrMSkgKiBzaXplb2YoaW50KSkpKQorCSAgcmV0dXJuOwor CWZvciAoaSA9IDA7IGkgPD0gTUFYV09SRFM7IGkrKykJeyAvKiBJbml0aWFsaXplIHJlc3VsdCBh cnJheSAqLworCSAgICB3b3JkYXJyYXlbaV0gPSBOVUxMOworCSAgICB3b3Jkc2l6ZVtpXSA9IDA7 CisJfQorICAgIH0KKyAgICBpZiAod29yZHNpemVbbl0gPCBsZW4gLyogfHwgIXdvcmRhcnJheVtu XSAqLyApIHsKKwlrID0gKGxlbiA8IDE2KSA/IDE2IDogbGVuICsgKGxlbiAvIDQpOworCXdvcmRh cnJheVtuXSA9IChjaGFyICopIG1hbGxvYyhrKzEpOworCXdvcmRzaXplW25dID0gKHdvcmRhcnJh eVtuXSkgPyBrIDogMDsKKwlpZiAod29yZGFycmF5W25dKSB7CisJICAgIHAgPSB3b3JkYXJyYXlb bl07CisJICAgIHdoaWxlICgoKnArKyA9ICpzKyspICYmIGstLSA+IDApIDsKKwl9CisgICAgfSBl bHNlIGlmIChsZW4gPiAwKSB7CisJayA9IHdvcmRzaXplW25dOwkJLyogKEluIGNhc2UgbGVuIGFy ZyBpcyBhIGxpZSkgKi8KKwlwID0gd29yZGFycmF5W25dOworCXdoaWxlICgoKnArKyA9ICpzKysp ICYmIGstLSA+IDApIHsKKyNpZmRlZiBDT01NRU5UCisJICAgIGlmICgoKihzLTEpID09IENNRFEp ICYmICpzICE9IENNRFEpIHsKKwkJaysrOworCQlwLS07CisJICAgIH0KKyNlbmRpZiAvKiBDT01N RU5UICovCisJfQorICAgIH0gZWxzZSBpZiAod29yZGFycmF5W25dKSB7CisJd29yZGFycmF5W25d WzBdID0gTlVMOworICAgIH0KK30KKworc3RhdGljIGNoYXIgKiBzcGxpdGJ1ZiA9IE5VTEw7Citz dGF0aWMgaW50IG5zcGxpdGJ1ZiA9IDA7CisKKy8qIG40ID0gMSB0byBOT1QgY29sbGFwc2UgYWRq YWNlbnQgc2VwYXJhdG9ycyAqLworCisKK3N0cnVjdCBzdHJpbmdhcnJheSAqCitja3NwbGl0KGZj LG4xLHMxLHMyLHMzLG4yLG4zLG40KSBpbnQgZmMsbjEsbjIsbjMsbjQ7IGNoYXIgKnMxLCAqczIs ICpzMzsgeworICAgIGludCBzcGxpdHRpbmcgPSAwOwkJCS8qIFdoYXQgSSB3YXMgYXNrZWQgdG8g ZG8gKi8KKyAgICBpbnQgaSwgaywga28gPSAwLCBuLCB4LCBtYXggPSBNQVhXT1JEUzsgLyogV29y a2VycyAqLworICAgIGNoYXIgKiBzID0gTlVMTCwgKiBzcywgKiBwOwkJLyogV29ya2VycyAqLwor ICAgIGNoYXIgKiBzZXAgPSAiIjsJCQkvKiBEZWZhdWx0IGJyZWFrIHNldCAqLworICAgIGNoYXIg KiBub3RzZXAgPSAiIjsJCQkvKiBEZWZhdWx0IGluY2x1ZGUgc2V0ICovCisgICAgaW50ICAgIGdy b3VwaW5nID0gMDsJCS8qIEdyb3VwaW5nIG9wdGlvbiAqLworICAgIGNoYXIgKiBncl9vcG4gPSAi XCJ7JyhbPCI7CQkvKiBHcm91cCBvcGVuIGJyYWNrZXRzICovCisgICAgY2hhciAqIGdyX2NscyA9 ICJcIn0nKV0+IjsJCS8qIEdyb3VwIGNsb3NlIGJyYWNrZXRzICovCisgICAgaW50ICAgIGdyX3N0 a1tORVNUTUFYXTsJCS8qIE5lc3RpbmcgYnJhY2tldCBzdGFjayAqLworICAgIGludCAgICBncl9s dmwgPSAwOwkJCS8qIE5lc3RpbmcgbGV2ZWwgKi8KKyAgICBpbnQgICAgd29yZG51bSA9IDA7CQkJ LyogQ3VycmVudCB3b3JkIG51bWJlciAqLworICAgIENIQVIgICBjID0gJ0EnOwkJCS8qIEN1cnJl bnQgY2hhciAoZHVtbXkgc3RhcnQgdmFsdWUpICovCisgICAgaW50ICAgIGNsYXNzID0gMDsJCQkv KiBDdXJyZW50IGNoYXJhY3RlciBjbGFzcyAqLworICAgIGludCAgICBzdGF0ZSA9IFNUX0JXOwkJ LyogQ3VycmVudCBGU0Egc3RhdGUgKi8KKyAgICBpbnQgICAgbGVuID0gMDsJCQkvKiBMZW5ndGgg b2YgY3VycmVudCB3b3JkICovCisgICAgaW50ICAgIHNsZW4gPSAwOwkJCS8qIExlbmd0aCBvZiBz MSAqLworICAgIGludCAgICBncXVvdGUgPSAwOwkJCS8qIFF1b3RlZCBncm91cCAqLworICAgIGlu dCAgICBjcXVvdGUgPSAwOwkJCS8qIFF1b3RlZCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgICAgY29s bGFwc2UgPSAxOwkJLyogQ29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9ycyAqLworICAgIGludCAg ICBhbGwgPSAwOwkJCS8qIHMzID09IEFMTCAqLworICAgIGludCAgICBjc3YgPSAwOwkJCS8qIHMz ID09IENTViAqLworICAgIGludCAgICB0c3YgPSAwOwkJCS8qIHMzID09IFRTViAqLworICAgIGlu dCAgICBwcmV2c3RhdGUgPSAtMTsKKworICAgIHVuc2lnbmVkIGludCBoZXg4MCA9IDEyODsKKyAg ICB1bnNpZ25lZCBpbnQgaGV4ZmYgPSAyNTU7CisgICAgQ0hBUiBub3RzZXBidWZbMjU2XTsKKwor ICAgIG5vdHNlcGJ1ZlswXSA9IE5VTDsJCQkvKiBLZWVwIHNldCBmb3IgIkFMTCIgKi8KKyAgICBp ZiAobjQpIGNvbGxhcHNlID0gMDsJCS8qIERvbid0IGNvbGxhcHNlICovCisKKyAgICBmb3IgKGkg PSAwOyBpIDwgTkVTVE1BWDsgaSsrKQkvKiBJbml0aWFsaXplIG5lc3Rpbmcgc3RhY2sgKi8KKyAg ICAgIGdyX3N0a1tpXSA9IDA7CisKKyAgICBzZXR3b3JkKDEsTlVMTCwwKTsKKyAgICBja19zdmFs LmFfaGVhZCA9IHdvcmRhcnJheTsJCS8qIEluaXRpYWxpemUgcmV0dXJuIHZhbHVlIHN0cnVjdCAq LworICAgIGNrX3N2YWwuYV9zaXplID0gMDsKKworICAgIGlmICghczEpIHMxID0gIiI7CQkJLyog czEgPSBzb3VyY2Ugc3RyaW5nICovCisgICAgaWYgKCEqczEpIHsJCQkJLyogSWYgbm9uZSwgbm90 aGluZyB0byBkbyAqLworCXJldHVybigmY2tfc3ZhbCk7CisgICAgfQorICAgIHNwbGl0dGluZyA9 IGZjOwkJCS8qIE91ciBqb2IgKi8KKyAgICBpZiAoc3BsaXR0aW5nKSB7CQkJLyogSWYgc3BsaXR0 aW5nIG4gPSB3b3JkIGNvdW50ICovCisJbiA9IDA7CQkJCS8qIEluaXRpYWxpemUgaXQgKi8KKyAg ICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2UgKi8KKyNpZmRlZiBDT01NRU5UCisJaWYgKG4xIDwg MSkgewkJCS8qIElmIDAgKG9yIGxlc3MpICovCisJICAgIGNrX3N2YWwuYV9zaXplID0gMDsJCS8q IG5vdGhpbmcgdG8gZG8uICovCisJICAgIHJldHVybigmY2tfc3ZhbCk7CisJfQorI2Vsc2UKKwlp ZiAobjEgPT0gMCkgewkJCS8qIElmIDAgKi8KKwkgICAgY2tfc3ZhbC5hX3NpemUgPSAwOwkJLyog bm90aGluZyB0byBkby4gKi8KKwkgICAgcmV0dXJuKCZja19zdmFsKTsKKwl9CisjZW5kaWYJLyog Q09NTUVOVCAqLworCW4gPSBuMTsJCQkJLyogbiA9IGRlc2lyZWQgd29yZCBudW1iZXIuICovCisg ICAgfQorICAgIHNsZW4gPSAwOwkJCQkvKiBHZXQgbGVuZ3RoIG9mIHMxICovCisgICAgZGVidWco RjExMSwiY2tzcGxpdCIsczEsbik7CisKKyAgICBwID0gczE7CisKKyNpZmRlZiBDT01NRU5UCisg ICAgd2hpbGUgKCpwKyspIHNsZW4rKzsJCS8qIE1ha2UgcG9rZWFibGUgY29weSBvZiBzMSAqLwor ICAgIGlmICghc3BsaXRidWYgfHwgc2xlbiA+IG5zcGxpdGJ1ZikgeyAvKiBBbGxvY2F0ZSBidWZm ZXIgaWYgbmVlZGVkICovCisJaW50IHh4OworCWlmIChzcGxpdGJ1ZikKKwkgIGZyZWUoc3BsaXRi dWYpOworCXh4ID0gKHNsZW4gPCAyNTUpID8gMjU1IDogeHggKyAoeHggLyA0KTsKKwlkZWJ1ZyhG MTAxLCJja3NwbGl0IHNwbGl0YnVmIiwiIix4eCk7CisJc3BsaXRidWYgPSAoY2hhciAqKW1hbGxv Yyh4eCsxKTsKKwlpZiAoIXNwbGl0YnVmKSB7CQkvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJl Li4uICovCisJICAgIGNrX3N2YWwuYV9zaXplID0gLTE7CisJICAgIHJldHVybigmY2tfc3ZhbCk7 CisJfQorCW5zcGxpdGJ1ZiA9IHh4OwkJCS8qIFJlbWVtYmVyIHNpemUgb2YgYnVmZmVyICovCisg ICAgfQorI2Vsc2UKKy8qCisgIFRoZSBpZGVhIGlzIHRvIGp1c3QgY29weSB0aGUgc3RyaW5nIGlu dG8gc3BsaXRidWYgKGlmIGl0IGV4aXN0cykuICBUaGlzCisgIGdpdmVzIHVzIGJvdGggdGhlIGNv cHkgYW5kIHRoZSBsZW5ndGggc28gd2Ugb25seSBuZWVkIHRvIGdyb3ZlbCB0aHJvdWdoIHRoZQor ICBzdHJpbmcgb25jZSBpbiBtb3N0IGNhc2VzLiAgT25seSB3aGVuIHNwbGl0YnVmIGRvZXNuJ3Qg ZXhpc3Qgb3IgaXMgdG9vIHNob3J0CisgIGRvIHdlIHJlLW1hbGxvYygpLCB3aGljaCBzaG91bGQg YmUgdmVyeSBpbmZyZXF1ZW50IHNvIHdobyBjYXJlcyBpZiB3ZSBoYXZlCisgIHRvIGdvIHRocm91 Z2ggdGhlIHN0cmluZyBhZ2FpbiBpbiB0aGF0IGNhc2UuCisqLworICAgIHAgPSBzMTsKKyAgICBz ID0gc3BsaXRidWY7CisgICAgaWYgKHNwbGl0YnVmKSB7CQkJLyogTWFrZSBwb2tlYWJsZSBjb3B5 IG9mIHMxICovCisJd2hpbGUgKCgqcysrID0gKnArKykgJiYgKHNsZW4rKyA8IG5zcGxpdGJ1Zikp IC8qIFRyeSB0byBjb3B5ICovCisJICA7CisgICAgfQorICAgIGlmICghc3BsaXRidWYgfHwgc2xl biA+PSBuc3BsaXRidWYpIHsgLyogTmVlZCB0byBkbyBtb3JlLi4uICovCisJaW50IHh4OworCWlm IChzcGxpdGJ1ZikJCQkvKiBGcmVlIHByZXZpb3VzIGJ1ZiBpZiBhbnkgKi8KKwkgIGZyZWUoc3Bs aXRidWYpOworCXdoaWxlICgqcCsrKSBzbGVuKys7CQkvKiBHZXQgKHJlc3Qgb2YpIGxlbmd0aCAq LworCXh4ID0gKHNsZW4gPCAyNTUpID8gMjU1IDogc2xlbiArIChzbGVuIC8gNCk7IC8qIFNpemUg b2YgbmV3IGJ1ZmZlciAqLworCXNwbGl0YnVmID0gKGNoYXIgKiltYWxsb2MoeHgrMSk7IC8qIEFs bG9jYXRlIGl0ICovCisJaWYgKCFzcGxpdGJ1ZikgewkJIC8qIE1lbW9yeSBhbGxvY2F0aW9uIGZh aWx1cmUuLi4gKi8KKwkgICAgY2tfc3ZhbC5hX3NpemUgPSAtMTsKKwkgICAgcmV0dXJuKCZja19z dmFsKTsKKwl9CisJbnNwbGl0YnVmID0geHg7CQkJLyogUmVtZW1iZXIgKG5ldykgYnVmZmVyIHNp emUgKi8KKwlzID0gc3BsaXRidWY7CisJcCA9IHMxOworCXdoaWxlICgoKnMrKyA9ICpwKyspKSA7 CisgICAgfQorCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHMgPSBzcGxpdGJ1ZjsKKyAgICBz ZXAgPSBzMjsJCQkJLyogczIgPSBicmVhayBzZXQgKi8KKyAgICBpZiAoIXNlcCkgc2VwID0gIiI7 CisgICAgbm90c2VwID0gczM7CQkJLyogczMgPSBpbmNsdWRlIHNldCAqLworICAgIGlmICghbm90 c2VwKSB7CisJbm90c2VwID0gIiI7CisgICAgfSBlbHNlIGlmICgoYWxsID0gIWNrc3RyY21wKG5v dHNlcCwiQUxMIiwzLDEpKSB8fAorCSAgICAgICAoY3N2ID0gIWNrc3RyY21wKG5vdHNlcCwiQ1NW IiwzLDEpKSB8fAorCSAgICAgICAodHN2ID0gIWNrc3RyY21wKG5vdHNlcCwiVFNWIiwzLDEpKSkg eworCWludCBpLCBmbGFnOyBDSEFSIGM7CisJaW50IG4gPSAwOworCWNoYXIgKiBzczsKKwlpZiAo IWFsbCAmJiAoY3N2IHx8IHRzdikpIHsKKwkgICAgYWxsID0gMTsKKwkgICAgY29sbGFwc2UgPSAw OworCX0KKwlpZiAoY3N2IHx8IHRzdikgeworCSAgICBhbGwgPSAxOworCSAgICBjb2xsYXBzZSA9 IDA7CisJfQorCWZvciAoaSA9IDE7IGkgPCAyNTY7IGkrKykgeworCSAgICBmbGFnID0gMDsKKwkg ICAgc3MgPSBzZXA7CisJICAgIHdoaWxlIChjID0gKnNzKysgJiYgIWZsYWcpIHsKKwkJaWYgKGMg PT0gaSkgZmxhZysrOworCSAgICB9CisJICAgIGlmICghZmxhZykgbm90c2VwYnVmW24rK10gPSBj OworCX0KKwlub3RzZXBidWZbbl0gPSBOVUw7CisJbm90c2VwID0gKGNoYXIgKilub3RzZXBidWY7 CisJZGVidWcoRjExMCwiQ0tNQVRDSCBOT1RTRVBCVUYgQUxMIixub3RzZXAsMCk7CisgICAgfQor ICAgIGlmICgqcyAmJiBjc3YpIHsJCQkvKiBGb3IgQ1NWIHNraXAgbGVhZGluZyB3aGl0ZXNwYWNl ICovCisgICAgICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkKKwkgIHMrKzsKKwljID0g KnM7CisgICAgfQorICAgIGlmIChuMiA9PSAwICYmIGNzdikgbjIgPSAxOwkJLyogQ1NWIGltcGxp ZXMgZG91YmxlcXVvdGUgZ3JvdXBpbmcgKi8KKyAgICBpZiAobjIgPCAwKSBuMiA9IDYzOwkJLyog bjIgPSBncm91cGluZyBtYXNrICovCisgICAgZ3JvdXBpbmcgPSBuMjsKKyAgICBwID0gIiI7CQkJ CS8qIFBvaW50ZXIgdG8gY3VycmVudCB3b3JkICovCisgICAgd2hpbGUgKGMpIHsJCQkJLyogTG9v cCB0aHJvdWdoIHN0cmluZyAqLworCWMgPSAqczsKKwljbGFzcyA9IDA7CisJaWYgKCFjc3YgJiYg IXRzdikgewkJLyogZmRjIDIwMTAtMTItMzAgKi8KKwkgICAgLyogSW4gQ1NWIGFuZCBUU1Ygc3Bs aXR0aW5nLCBiYWNrc2xhc2ggaXMgbm90IHNwZWNpYWwgKi8KKwkgICAgaWYgKCFjcXVvdGUgJiYg YyA9PSBDTURRKSB7CS8qIElmIENNRFEgKi8KKwkJY3F1b3RlKys7CQkvKiBuZXh0IG9uZSBpcyBx dW90ZWQgKi8KKwkJZ290byBuZXh0YzsJCS8qIGdvIGdldCBpdCAqLworCSAgICB9CisKKwl9CisJ aWYgKGNxdW90ZSAmJiBjID09IENNRFEpIHsJLyogUXVvdGVkIENNRFEgaXMgc3BlY2lhbCAqLwor CSAgICBpZiAoc3RhdGUgIT0gU1RfQlcpIHsJLyogYmVjYXVzZSBpdCBjYW4gc3RpbGwgc2VwYXJh dGUgKi8KKwkJY2hhciAqIHMyID0gcy0xOworCQl3aGlsZSAoczIgPiBwKSB7ICpzMiA9ICooczIt MSk7IHMyLS07IH0KKwkJcCsrOworCSAgICB9CisJICAgIGNxdW90ZSA9IDA7CisJfQorCWlmIChj cXVvdGUpIHsJCQkvKiBPdGhlciBxdW90ZWQgY2hhcmFjdGVyICovCisJICAgIGlmIChzdGF0ZSAh PSBTVF9CVykgewkvKiBjYW4ndCBzZXBhcmF0ZSBvciBncm91cCAqLworCQljaGFyICogczIgPSBz LTE7CisJCXdoaWxlIChzMiA+IHApIHsgKnMyID0gKihzMi0xKTsgczItLTsgfQorCQlwKys7CisJ ICAgIH0KKwkgICAgY2xhc3MgPSBDTF9EQVQ7CQkvKiBzbyB0cmVhdCBpdCBhcyBkYXRhICovCisJ ICAgIGNxdW90ZSA9IDA7CisJICAgIHggPSAxOworCX0gZWxzZSB7CQkJLyogQ2hhcmFjdGVyIGlz IG5vdCBxdW90ZWQgKi8KKwkgICAgaWYgKCFhbGwgJiYgYyA8IFNQKSB7CS8qIEdldCBpdHMgY2xh c3MgKi8KKwkJeCA9IDA7CQkJLyogeCA9PSAwIG1lYW5zICJpcyBzZXBhcmF0b3IiICovCisJICAg IH0gZWxzZSBpZiAoKnNlcCkgewkJLyogQnJlYWsgc2V0IGdpdmVuICovCisJCXNzID0gc2VwOwor CQl3aGlsZSAoKnNzICYmICpzcyAhPSBjKSBzcysrOyAvKiAoaW5zdGVhZCBvZiBja3N0cmNocigp KSAqLworCQl4ID0gKCpzcyAhPSBjKTsKKwkgICAgfSBlbHNlIHsJCQkvKiBEZWZhdWx0IGJyZWFr IHNldCBpcyAqLworCQl4ID0gKChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgLyogYWxsIGJ1dCBh bHBoYW51bWVyaWNzICovCisJCSAgICAgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fAorCQkgICAg IChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwKKwkJICAgICAoKHVuc2lnbmVkIGludCljID49IGhl eDgwICYmICh1bnNpZ25lZCBpbnQpYyA8PSBoZXhmZikKKwkJICAgICApOworCSAgICB9CisJICAg IGlmICh4ID09IDAgJiYgKm5vdHNlcCAmJiBjKSB7IC8qIEluY2x1ZGUgc2V0IGlmIGdpdmVuICov CisJCXNzID0gbm90c2VwOworCQl3aGlsZSAoKnNzICYmICpzcyAhPSBjKSBzcysrOyAvKiAoaW5z dGVhZCBvZiBja3N0cmNocigpKSAqLworCQl4ID0gKCpzcyA9PSBjKTsKKwkgICAgfQorCSAgICBp ZiAoYyA9PSBuMyAmJiBncm91cGluZyAmJiBzdGF0ZSA9PSBTVF9CVykgeyAvKiBHcm91cCBxdW90 ZT8gKi8KKwkJY2xhc3MgPSBDTF9RVU87CisJICAgIH0gZWxzZSB7CisJCWNsYXNzID0geCA/IENM X0RBVCA6IENMX1NFUDsgLyogQ2xhc3MgPSBkYXRhIG9yIHNlcGFyYXRvciAqLworCSAgICB9CisJ ICAgIGlmIChncm91cGluZykgewkJLyogR3JvdXBpbmc/ICovCisJCWludCBqOwkJCS8qIExvb2sg Zm9yIGdyb3VwIHN0YXJ0ICovCisJCWZvciAoayA9IDA7IGsgPCA2OyBrKyspIHsgLyogR3JvdXAt c3RhcnQgY2hhcj8gKi8KKwkJICAgIGogPSAxIDw8IGs7CQkvKiBHZXQgaXRzIG1hc2sgYml0IHZh bHVlICovCisJCSAgICBpZiAoZ3JvdXBpbmcgJiBqKSB7CisJCQlpZiAoYyA9PSBncl9vcG5ba10p IHsgLyogU2VsZWN0ZWQgZ3JvdXAgb3BlbmVyPyAqLworCQkJICAgIGtvID0gazsKKwkJCSAgICBj bGFzcyB8PSBDTF9PUE47CisJCQkgICAgaWYgKGMgPT0gJyInIHx8IGMgPT0gJ1wnJykgeyAvKiBU aGVzZSBjYW4gYWxzbyAqLworCQkJCWNsYXNzIHw9IENMX0NMUzsgICAgICAgICAvKiBiZSBjbG9z ZXJzICovCisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJfSBlbHNlIGlmIChjID09IGdyX2Nsc1tr XSkgeyAvKiBHcm91cCBjbG9zZXI/ICovCisJCQkgICAgY2xhc3MgfD0gQ0xfQ0xTOworCQkJICAg IGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisJZGVidWcoRjAwMCwiY2tz cGxpdCBjaGFyIixzLGMpOworCWRlYnVnKEYxMDEsImNrc3BsaXQgc3RhdGUiLCIiLHN0YXRlKTsK KwlkZWJ1ZyhGMTAxLCJja3NwbGl0IGNsYXNzIiwiIixjbGFzcyk7CisKKwlzd2l0Y2ggKHN0YXRl KSB7CQkvKiBTdGF0ZSBzd2l0Y2hlci4uLiAqLworCSAgY2FzZSBTVF9CVzoJCQkvKiBCRVRXRUVO V09SRFMgKi8KKwkgICAgaWYgKGNsYXNzICYgQ0xfT1BOKSB7CS8qIEdyb3VwIG9wZW5lciAqLwor CQlpZiAoZ3JfbHZsID09IDAgJiYgIWdxdW90ZSkgeyAvKiBJZiBub3QgaW4gZ3JvdXAgKi8KKwkJ ICAgIHAgPSBzOwkJLyogcG9pbnQgdG8gYmVnaW5uaW5nIG9mIHdvcmQgKi8KKwkJfQorCQlncl9s dmwrKzsJCS8qIFB1c2ggY2xvc2VyIG9uIG5lc3Rpbmcgc3RhY2sgKi8KKwkJaWYgKGdyX2x2bCA+ PSBORVNUTUFYKQorCQkgIGdvdG8geHhzcGxpdDsKKwkJZ3Jfc3RrW2dyX2x2bF0gPSBncl9jbHNb a29dOworCQlwcmV2c3RhdGUgPSBzdGF0ZTsKKwkJc3RhdGUgPSBTVF9JRzsJCS8qIFN3aXRjaCB0 byBJTkdST1VQIHN0YXRlICovCisJICAgIH0gZWxzZSBpZiAoY2xhc3MgJiBDTF9EQVQpIHsgLyog RGF0YSBjaGFyYWN0ZXIgKi8KKwkJZ3JfbHZsID0gMDsJCS8qIENsZWFyIGdyb3VwIG5lc3Rpbmcg c3RhY2sgKi8KKwkJZ3Jfc3RrW2dyX2x2bF0gPSAwOworCQlsZW4gPSAwOworCQlwID0gczsJCQkv KiBQb2ludCB0byBiZWdpbm5pbmcgb2Ygd29yZCAqLworCQlpZiAoZ3F1b3RlKSB7CQkvKiBBZGp1 c3QgZm9yIHF1b3RlICovCisJCSAgICBsZW4rKzsKKwkJICAgIHAtLTsKKwkJICAgIGdxdW90ZSA9 IDA7CisJCX0KKwkJcHJldnN0YXRlID0gc3RhdGU7CisJCXN0YXRlID0gU1RfSVc7CQkvKiBTd2l0 Y2ggdG8gSU5XT1JEIHN0YXRlICovCisJICAgIH0gZWxzZSBpZiAoY2xhc3MgJiBDTF9RVU8pIHsg LyogR3JvdXAgcXVvdGUgKi8KKwkJZ3F1b3RlID0gZ3JfbHZsKzE7CS8qIFJlbWVtYmVyIHF1b3Rl ZCBsZXZlbCAqLworCQlwID0gcyAtIDE7CisJCWxlbiA9IDE7CisJICAgIH0KKwkgICAgaWYgKGNv bGxhcHNlKQorCSAgICAgIGJyZWFrOworCisJICBjYXNlIFNUX0lXOgkJCS8qIElOV09SRCAoYnV0 IG5vdCBpbiBhIGdyb3VwKSAqLworCSAgICBpZiAoY2xhc3MgJiBDTF9TRVApIHsJLyogRW5kcyBv biBhbnkga2luZCBvZiBzZXBhcmF0b3IgKi8KKwkJKnMgPSBOVUw7CQkvKiBUZXJtaW5hdGUgdGhp cyB3b3JkICovCisJCWlmIChjc3YpIHsJCS8qIElmIGNvbW1hLXNlcGFyYXRlZCBsaXN0ICovCisJ CSAgICBjaGFyICogczIgPSBzOwkvKiBkaXNjYXJkIHN1cnJvdW5kaW5nIHNwYWNlcyAqLworCQkg ICAgd2hpbGUgKHMyID4gc3BsaXRidWYpIHsgLyogZmlyc3QgYmFja3dhcmRzLi4uICovCisJCQlz Mi0tOworCQkJaWYgKCpzMiA9PSBTUCB8fCAqczIgPT0gSFQpCisJCQkgICpzMiA9IE5VTDsKKwkJ CWVsc2UKKwkJCSAgYnJlYWs7CisJCSAgICB9CisJCSAgICBzMiA9IHMrMTsJCS8qIFRoZW4gZm9y d2FyZHMuLi4gKi8KKwkJICAgIHdoaWxlICgqczIgJiYgKCpzMiA9PSBTUCB8fCAqczIgPT0gSFQp KQorCQkgICAgICAqczIrKzsKKwkJICAgIHMgPSBzMi0xOworCQl9CisJCWlmICghY3N2IHx8IHBy ZXZzdGF0ZSAhPSBTVF9JRykgeworCQkgICAgd29yZG51bSsrOwkJICAgICAgLyogQ291bnQgaXQg Ki8KKwkJICAgIGlmIChzcGxpdHRpbmcgfHwgbiA8IDApIHsgLyogRGlzcG9zZSBvZiBpdCBhcHBy b3ByaWF0ZWx5ICovCisJCQlpZiAod29yZG51bSA+IG1heCkgeyAgLyogQWRkIHRvIGFycmF5IGlm IHNwbGl0dGluZyAqLworCQkJICAgIGNrX3N2YWwuYV9zaXplID0gLTI7CisJCQkgICAgcmV0dXJu KCZja19zdmFsKTsKKwkJCX0KKwkJCS8qIFRoaXMgaW5lbGVnYW50IGJpdCBjb3JyZWN0cyBhbiBl ZGdlIGNvbmRpdGlvbiAqLworCQkJaWYgKGNzdiAmJiAhKnAgJiYgKCFjIHx8ICEqKHMrMSkpKSB7 CisJCQkgICAgd29yZG51bS0tOworCQkJfSBlbHNlIHsKKwkJCSAgICBzZXR3b3JkKHdvcmRudW0s cCxsZW4pOworCQkJfQorCQkgICAgfSBlbHNlIGlmICh3b3JkbnVtID09IG4pIHsgLyogU2VhcmNo aW5nIGZvciB3b3JkIG4gKi8KKwkJCXNldHdvcmQoMSxwLGxlbik7CisJCQlja19zdmFsLmFfc2l6 ZSA9IDE7CisJCQlyZXR1cm4oJmNrX3N2YWwpOworCQkgICAgfQorCQl9CisJCXByZXZzdGF0ZSA9 IHN0YXRlOworCQlzdGF0ZSA9IFNUX0JXOwkJLyogU3dpdGNoIHRvIEJFVFdFRU5XT1JEUyBzdGF0 ZSAqLworCQlsZW4gPSAwOworCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlIFNUX0lHOgkJ CS8qIElOR1JPVVAgKi8KKwkgICAgaWYgKGNsYXNzICYgQ0xfQ0xTKSB7CS8qIEhhdmUgZ3JvdXAg Y2xvc2VyPyAqLworCQlpZiAoY3N2KSB7CisJCSAgICBpZiAoKihzKzEpID09IGMpIHsKKwkJCWNo YXIgKnMyID0gczsKKwkJCXdoaWxlICgoKnMyID0gKihzMisxKSkpIHMyKys7CisJCQlzKys7CisJ CQljID0gKnM7CisJCSAgICB9CisJCX0KKwkJaWYgKGMgPT0gZ3Jfc3RrW2dyX2x2bF0pIHsgLyog RG9lcyBpdCBtYXRjaCBjdXJyZW50IG9wZW5lcj8gKi8KKwkJICAgIGdyX2x2bC0tOwkJICAgLyog WWVzLCBwb3Agc3RhY2sgKi8KKwkJICAgIGlmIChncl9sdmwgPCAwKQkgICAvKiBEb24ndCBwb3Ag aXQgdG9vIG11Y2ggKi8KKwkJICAgICAgZ3JfbHZsID0gMDsKKwkJICAgIGlmIChncl9sdmwgPT0g MCkgewkvKiBJZiBhdCB0b3Agb2Ygc3RhY2sgKi8KKwkJCWlmIChncXVvdGUpCisJCQkgIHMrKzsK KwkJCWMgPSAqczsKKwkJCSpzID0gTlVMOwkvKiB3ZSBoYXZlIHdvcmQuICovCisJCQl3b3JkbnVt Kys7CS8qIENvdW50IGFuZCBkaXNwb3NlIG9mIGl0LiAqLworCQkJbGVuLS07CisJCQlpZiAoc3Bs aXR0aW5nIHx8IG4gPCAwKSB7CisJCQkgICAgaWYgKHdvcmRudW0gPiBtYXgpIHsKKwkJCQlja19z dmFsLmFfc2l6ZSA9IC0yOworCQkJCXJldHVybigmY2tfc3ZhbCk7CisJCQkgICAgfQorCQkJICAg IHNldHdvcmQod29yZG51bSxwKzEsbGVuKTsKKwkJCX0gZWxzZSBpZiAod29yZG51bSA9PSBuKSB7 CisJCQkgICAgc2V0d29yZCgxLHArMSxsZW4pOworCQkJICAgIGNrX3N2YWwuYV9zaXplID0gMTsK KwkJCSAgICByZXR1cm4oJmNrX3N2YWwpOworCQkJfQorCQkJcHJldnN0YXRlID0gc3RhdGU7CisJ CQlzdGF0ZSA9IFNUX0JXOwkvKiBTd2l0Y2ggdG8gQkVUV0VFTldPUkRTIHN0YXRlICovCisJCQls ZW4gPSAwOworCQkgICAgfQorCQkgICAgaWYgKGdyX2x2bCA8IGdxdW90ZSkKKwkJICAgICAgZ3F1 b3RlID0gMDsKKwkJfQorCSAgICB9IGVsc2UgaWYgKGNsYXNzICYgQ0xfT1BOKSB7IC8qIEhhdmUg Z3JvdXAgb3BlbmVyICovCisJCWdyX2x2bCsrOwkJIC8qIFB1c2ggb24gbmVzdGluZyBzdGFjayAq LworCQlpZiAoZ3JfbHZsID49IE5FU1RNQVgpIGdvdG8geHhzcGxpdDsKKwkJZ3Jfc3RrW2dyX2x2 bF0gPSBncl9jbHNba29dOworCSAgICB9CisJfSAvKiBzd2l0Y2ggKi8KKworICAgICAgbmV4dGM6 CisJcysrOwkJCQkvKiBOZXh0IGNoYXIgKi8KKwlpZiAoc3RhdGUpCisJICBsZW4rKzsKKyAgICB9 IC8qIHdoaWxlIChjKSAqLworCisgICAgaWYgKGdyX2x2bCA+IDApIHsJCQkvKiBJbiBjYXNlIG9m IGFuIHVuY2xvc2VkIGdyb3VwICovCisJaWYgKHNwbGl0dGluZyB8fCBuIDwgMCkgewkvKiBtYWtl IGl0IHRoZSBsYXN0IHdvcmQuICovCisJICAgIGlmICgrK3dvcmRudW0gPiBtYXgpIHsKKwkJY2tf c3ZhbC5hX3NpemUgPSAtMjsKKwkJcmV0dXJuKCZja19zdmFsKTsKKwkgICAgfQorCSAgICBzZXR3 b3JkKHdvcmRudW0scCsxLGxlbik7CisJfSBlbHNlIGlmICh3b3JkbnVtID09IG4pIHsJLyogQ291 bnRpbmcgZnJvbSBsZWZ0ICovCisJICAgIHNldHdvcmQoMSxwKzEsbGVuKTsKKwkgICAgY2tfc3Zh bC5hX3NpemUgPSAxOworCSAgICByZXR1cm4oJmNrX3N2YWwpOworCX0gZWxzZSAJaWYgKG4gPCAw ICYmICh3b3JkbnVtICsgbiA+IC0xKSkgeyAvKiBDb3VudGluZyBmcm9tIHJpZ2h0ICovCisJICAg IGNoYXIgKiBzID0gd29yZGFycmF5W3dvcmRudW0gKyBuICsgMV07CisJICAgIGlmICghcykgcyA9 ICIiOworCSAgICBzZXR3b3JkKDEscyxzdHJsZW4ocykpOworCSAgICBja19zdmFsLmFfc2l6ZSA9 IDE7CisJICAgIHJldHVybigmY2tfc3ZhbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFz cGxpdHRpbmcpIHsJCQkvKiBGd29yZC4uLiAqLworCWlmIChuIDwgMCAmJiAod29yZG51bSArIG4g PiAtMSkpIHsgLyogQ291bnRpbmcgZnJvbSByaWdodCAqLworCSAgICBjaGFyICogcyA9IHdvcmRh cnJheVt3b3JkbnVtICsgbiArIDFdOworCSAgICBpZiAoIXMpIHMgPSAiIjsKKwkgICAgc2V0d29y ZCgxLHMsc3RybGVuKHMpKTsKKwkgICAgY2tfc3ZhbC5hX3NpemUgPSAxOworCSAgICByZXR1cm4o JmNrX3N2YWwpOworICAgICAgICB9CisJc2V0d29yZCgxLE5VTEwsMCk7CQkvKiBGcm9tIGxlZnQu Li4gKi8KKwlja19zdmFsLmFfc2l6ZSA9IDA7CQkvKiBidXQgdGhlcmUgd2VyZW4ndCBuIHdvcmRz ICovCisJcmV0dXJuKCZja19zdmFsKTsKKyAgICB9IGVsc2UgewkJCQkvKiBTdWNjZWVkIG90aGVy d2lzZSAqLworCWNrX3N2YWwuYV9zaXplID0gd29yZG51bTsKKy8qIAorICBBbHdheXMgcHV0IGEg bnVsbCBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5LiAgSXQgZG9lcyBubyBoYXJtIGlu CisgIHRoZSBub3JtYWwgY2FzZSwgYW5kIGl0J3MgcmVxdWlyZWQgaWYgd2UncmUgbWFraW5nIGFu IGFyZ3ZbXSBhcnJheSB0byAKKyAgcGFzcyB0byBleGVjdnAoKS4gIFRoaXMgZWxlbWVudCBpcyBu b3QgaW5jbHVkZWQgaW4gdGhlIGNvdW50LgorKi8KKwlpZiAod29yZG51bSA8IE1BWFdPUkRTKQor ICAgICAgICAgIHNldHdvcmQod29yZG51bSsxLE5VTEwsMCk7CisgICAgfQorI2lmZGVmIERFQlVH CisgICAgaWYgKGRlYmxvZykgeworCWZvciAoaSA9IDE7IGkgPD0gd29yZG51bTsgaSsrKQorCSAg ZGVidWcoRjExMSwiY2tzcGxpdCByZXN1bHQiLHdvcmRhcnJheVtpXSxpKTsKKyAgICB9CisjZW5k aWYgLyogREVCVUcgKi8KKyAgICByZXR1cm4oJmNrX3N2YWwpOworCisgIHh4c3BsaXQ6CQkJCS8q IEVycm9yIHJldHVybiAqLworICAgIGNrX3N2YWwuYV9zaXplID0gLTI7CisgICAgcmV0dXJuKCZj a19zdmFsKTsKK30KKworLyoKKyAgY2toZXhieXRldG9pbnQoKSBleHBlY3RzIGEgc3RyaW5nIG9m IHR3byBoZXggY2hhcmFjdGVycywKKyAgcmV0dXJucyB0aGUgaW50IGVxdWl2YWxlbnQgb3IgLTEg b24gZXJyb3IuCisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NraGV4Ynl0ZXRvaW50KCBjaGFy ICogcyApCisjZWxzZQorY2toZXhieXRldG9pbnQocykgY2hhciAqIHM7CisjZW5kaWYJLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBpbnQgaSwgY1syXTsKKyAgICBpZiAoIXMpIHJldHVybigtMSk7Cisg ICAgaWYgKChpbnQpc3RybGVuKHMpICE9IDIpIHJldHVybigtMSk7CisgICAgZm9yIChpID0gMDsg aSA8IDI7IGkrKykgeworCWNbaV0gPSAqcysrOworCWlmICghY1tpXSkgcmV0dXJuKC0xKTsKKwlp ZiAoaXNsb3dlcihjW2ldKSkgY1tpXSA9IHRvdXBwZXIoY1tpXSk7CisJaWYgKGNbaV0gPj0gJzAn ICYmIGNbaV0gPD0gJzknKSB7CisJICAgIGNbaV0gLT0gMHgzMDsKKwl9IGVsc2UgaWYgKGNbaV0g Pj0gJ0EnICYmIGNbaV0gPD0gJ0YnKSB7CisJICAgIGNbaV0gLT0gMHgzNzsKKwl9IGVsc2Ugewor CSAgICByZXR1cm4oLTEpOworCX0KKyAgICB9CisgICAgcmV0dXJuKGNbMF0gKiAxNiArIGNbMV0p OworfQorCisKKy8qIEVuZCBvZiBja2NsaWIuYyAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbGliLmggYi9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrY2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmFmMDljMGUKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrY2xpYi5oCkBAIC0wLDAgKzEsMTA0IEBACisvKiBja2NsaWIuaCAt LSBDLUtlcm1pdCBsaWJyYXJ5IHJvdXRpbmUgcHJvdG90eXBlcyAqLworLyoKKyAgQXV0aG9yOiBG cmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBB Y2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdo dCAoQykgMjAwMiwgMjAwOSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGlu IHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhl IEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4g dGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLwor I2lmbmRlZiBDS0NMSUJfSAorI2RlZmluZSBDS0NMSUJfSAorCitzdHJ1Y3Qgc3RyaW5nYXJyYXkg eworICAgIGNoYXIgKiogYV9oZWFkOworICAgIGludCBhX3NpemU7Cit9OworCisjaWZkZWYgQ0tf QU5TSUMKK19QUk9UT1RZUCggaW50IGNrc3RybmNweSwgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBp bnQpICk7CitfUFJPVE9UWVAoIGludCBja3N0cm5jYXQsIChjaGFyICosIGNvbnN0IGNoYXIgKiwg aW50KSApOworI2Vsc2UKK19QUk9UT1RZUCggaW50IGNrc3RybmNweSwgKGNoYXIgKiwgY2hhciAq LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBja3N0cm5jYXQsIChjaGFyICosIGNoYXIgKiwgaW50 KSApOworI2VuZGlmIC8qIENLX0FOU0lDICovCisKK19QUk9UT1RZUCggaW50IGNrbWFrbXNnLCAg KGNoYXIgKiwgaW50LCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9U WVAoIGludCBja21ha3htc2csIChjaGFyICosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNo YXIgKiwgY2hhciAqKSApOworCitfUFJPVE9UWVAoIGNoYXIgKiBja3N0cnBicmssIChjaGFyICos IGNoYXIgKikgKTsKK19QUk9UT1RZUCggY2hhciAqIGNrc3Ryc3RyLCAoY2hhciAqLCBjaGFyICop ICk7CitfUFJPVE9UWVAoIGNoYXIgKiBjaGFydG9zdHIsIChpbnQpICk7CitfUFJPVE9UWVAoIGlu dCBja2xvd2VyLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgY2t1cHBlciwgKGNoYXIgKikg KTsKK19QUk9UT1RZUCggaW50IGNraW5kZXgsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQsIGlu dCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGNrY3RvYSwgKGNoYXIpICk7CitfUFJPVE9UWVAoIGNo YXIgKiBja2N0b3gsIChDSEFSLCBpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBja2l0b2EsIChp bnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBja3VpdG9hLCAodW5zaWduZWQgaW50KSApOworX1BS T1RPVFlQKCBjaGFyICogY2tsdG9hLCAobG9uZykgKTsKK19QUk9UT1RZUCggY2hhciAqIGNrdWx0 b2EsICh1bnNpZ25lZCBsb25nKSApOworX1BST1RPVFlQKCBjaGFyICogY2tmc3RvYSwgKENLX09G Rl9UKSApOworX1BST1RPVFlQKCBDS19PRkZfVCBja2F0b2ZzLCAoY2hhciAqKSApOworX1BST1RP VFlQKCBjaGFyICogY2tpdG94LCAoaW50KSApOworX1BST1RPVFlQKCBjaGFyICogY2tsdG94LCAo bG9uZykgKTsKK19QUk9UT1RZUCggaW50IGlzcGF0dGVybiwgKGNoYXIgKikgKTsKK19QUk9UT1RZ UCggaW50IGNrbWF0Y2gsIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQgKSApOworX1BST1RPVFlQ KCBWT0lEIGNrbWVtY3B5LCAoY2hhciAqLCBjaGFyICosIGludCkgKTsKK19QUk9UT1RZUCggY2hh ciAqIGNrc3RyY2hyLCAoY2hhciAqLCBjaGFyKSApOworX1BST1RPVFlQKCBjaGFyICogY2tzdHJy Y2hyLCAoY2hhciAqLCBjaGFyKSApOworX1BST1RPVFlQKCBpbnQgY2tyY2hhciwgKGNoYXIgKikg KTsKK19QUk9UT1RZUCggaW50IGNrc3RyY21wLCAoY2hhciAqLCBjaGFyICosIGludCwgaW50KSAp OworI2RlZmluZSB4eHN0cmNtcChhLGIsYykgY2tzdHJjbXAoYSxiLGMsMCkKK19QUk9UT1RZUCgg aW50IGNrc3RycHJlLCAoY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9UWVAoIFZPSUQgc2hfc29y dCwgKGNoYXIgKiosIGNoYXIgKiosIGludCwgaW50LCBpbnQsIGludCkgKTsKK19QUk9UT1RZUCgg Y2hhciAqIGJyc3RyaXAsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGNoYXIgKiBmbnN0cmlwLCAo Y2hhciAqKSApOworI2lmZGVmIENPTU1FTlQKK19QUk9UT1RZUCggY2hhciAqIGJyYWNlLCAoY2hh ciAqKSApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK19QUk9UT1RZUCggaW50IGRxdW90ZSwgKGNo YXIgKiwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCB1bnRhYmlmeSwgKGNoYXIgKiwgY2hh ciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgbWFrZWxpc3QsIChjaGFyICosIGNoYXIgKltd LCBpbnQpICk7CisjaWZuZGVmIENLX0FOU0lDCitfUFJPVE9UWVAoIFZPSUQgbWFrZXN0ciwgKGNo YXIgKiosIGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCB4bWFrZXN0ciwgKGNoYXIgKiosIGNo YXIgKikgKTsKKyNlbHNlIC8qIENLX0FOU0lDICovCitfUFJPVE9UWVAoIFZPSUQgbWFrZXN0ciwg KGNoYXIgKiosIGNvbnN0IGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCB4bWFrZXN0ciwgKGNo YXIgKiosIGNvbnN0IGNoYXIgKikgKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworX1BST1RPVFlQ KCBpbnQgY2hrbnVtLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgcmRpZ2l0cywgKGNoYXIg KikgKTsKK19QUk9UT1RZUCggY2hhciAqIGNrcmFkaXgsIChjaGFyICosaW50LGludCkgKTsKKwor LyogQmFzZS02NCBjb252ZXJzaW9uIG5lZWRlZCBmb3Igc2NyaXB0IHByb2dyYW1taW5nIGFuZCBI VFRQICovCisKKyNpZm5kZWYgTk9CNjQKK19QUk9UT1RZUCggaW50IGI4dG9iNjQsIChjaGFyICos aW50LGNoYXIgKixpbnQpKTsKK19QUk9UT1RZUCggaW50IGI2NHRvYjgsIChjaGFyICosaW50LGNo YXIgKixpbnQpKTsKKyNlbmRpZiAvKiBOT0I2NCAqLworCisjaWZkZWYgQ0tGTE9BVAorX1BST1RP VFlQKCBpbnQgaXNmbG9hdCwgKGNoYXIgKixpbnQpICk7CisjaWZuZGVmIENLQ0xJQl9DCisjaWZu ZGVmIENLV0FSVF9DCitleHRlcm4gQ0tGTE9BVCBmbG9hdHZhbDsKKyNlbmRpZiAvKiBDS1dBUlRf QyAqLworI2VuZGlmIC8qIENLQ0xJQl9DICovCisjZW5kaWYgLyogQ0tGTE9BVCAqLworCitfUFJP VE9UWVAoIGNoYXIgKiBwYXJuYW0sIChjaGFyKSApOworX1BST1RPVFlQKCBjaGFyICpoaG1tc3Ms IChsb25nKSApOworCitfUFJPVE9UWVAoIFZPSUQgbHNldCwgKGNoYXIgKiwgY2hhciAqLCBpbnQs IGludCkgKTsKK19QUk9UT1RZUCggVk9JRCByc2V0LCAoY2hhciAqLCBjaGFyICosIGludCwgaW50 KSApOworX1BST1RPVFlQKCBjaGFyICogdWxvbmd0b2hleCwgKHVuc2lnbmVkIGxvbmcsIGludCkg KTsKK19QUk9UT1RZUCggbG9uZyBoZXh0b3Vsb25nLCAoY2hhciAqLCBpbnQpICk7CitfUFJPVE9U WVAoIHN0cnVjdCBzdHJpbmdhcnJheSAqIGNrc3BsaXQsIChpbnQsaW50LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLGNoYXIgKixjaGFyICosaW50LGlu dCxpbnQpICk7CisKK19QUk9UT1RZUCggaW50IGNraGV4Ynl0ZXRvaW50LCAoY2hhciAqKSApOwor I2VuZGlmIC8qIENLQ0xJQl9IICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja2NtYWkuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2tjbWFpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1 ZDBhMAotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2tjbWFpLmMKQEAgLTAsMCArMSwzNTgwIEBACisjZGVmaW5lIEVESVREQVRFICAiMjAg QXVnIDIwMTEiCQkvKiBMYXN0IGVkaXQgZGF0ZSBkZCBtbW0geXl5eSAqLworI2RlZmluZSBFRElU TkRBVEUgIjIwMTEwODIwIgkJLyogS2VlcCB0aGVtIGluIHN5bmMgKi8KKy8qIFNhdCBBdWcgMjAg MTc6MjA6MTcgMjAxMSAqLworCisvKiBja2NtYWkuYyAtIE1haW4gcHJvZ3JhbSBmb3IgQy1LZXJt aXQgcGx1cyBzb21lIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zICovCisKKy8qCisgIGNrY3N5bS5o IGlzIHVzZWQgZm9yIGZvciBkZWZpbmluZyBzeW1ib2xzIHRoYXQgbm9ybWFsbHkgd291bGQgYmUg ZGVmaW5lZAorICB1c2luZyAtRCBvciAtZCBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLCBmb3IgdXNl IHdpdGggY29tcGlsZXJzIHRoYXQgZG9uJ3QKKyAgc3VwcG9ydCB0aGlzIGZlYXR1cmUuICBNdXN0 IGNvbWUgYmVmb3JlIGFueSB0ZXN0cyBmb3IgcHJlcHJvY2Vzc29yIHN5bWJvbHMuCisqLworI2lu Y2x1ZGUgImNrY3N5bS5oIgorLyoKKyAgQ29uc29saWRhdGVkIHByb2dyYW0gQy1LZXJtaXQgdmVy c2lvbiBpbmZvcm1hdGlvbiBmb3IgYWxsIHBsYXRmb3JtcworICAoYnV0IGZvciBVTklYIGFsc28g c2VlIGNrdXZlci5oKS4gIFNlZSBtYWtldmVyKCkgYmVsb3cgZm9yIGhvdyB0aGV5IGFyZSB1c2Vk LgorKi8KKyNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAvKiBVbmNvbW1lbnQgdGhp cyBmb3IgcmVhbCBLOTUgdmVyc2lvbiAqLworI2lmbmRlZiBPUzIJCQkJLyogT1MyIGFjdHVhbGx5 IG1lYW5zIEtlcm1pdCA5NS4gKi8KKyNpZm5kZWYgQkVUQVRFU1QJCQkvKiBJdCdzIGJlY2F1c2Ug S2VybWl0IDk1IHN0YXJ0ZWQgKi8KKyNkZWZpbmUgQkVUQVRFU1QJCQkvKiBvdXQgYXMgQy1LZXJt aXQgZm9yIE9TLzIuICovCisjZW5kaWYgLyogQkVUQVRFU1QgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBCRVRBVEVTVAorI2lmZGVmIE9TMgorI2lm ZGVmIF9fREFURV9fCisjZGVmaW5lIEJFVEFEQVRFCisjZW5kaWYgLyogX19EQVRFX18gKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBCRVRBVEVTVCAqLworCitjaGFyICogY2tfY3J5ZWFy ID0gIjIwMTEiOyAJCS8qIEMtS2VybWl0IGNvcHlyaWdodCB5ZWFyICovCisKKyNpZm5kZWYgTUFD CQkJCS8qIE1BQyA9IEtlcm1pdCBmb3IgTUFDIE9TIDYsIDcsIC4uLiAqLworLyoKKyAgTm90ZTog aW5pdGlhbGl6ZSBja19zX3Rlc3QgdG8gIiIgaWYgdGhpcyBpcyBub3QgYSB0ZXN0IHZlcnNpb24u CisgIFVzZSAoKmNrX3NfdGVzdCAhPSAnXDAnKSB0byBkZWNpZGUgd2hldGhlciB0byBwcmludCB0 ZXN0LXJlbGF0ZWQgbWVzc2FnZXMuCisqLworCisjaWZuZGVmIEJFVEFURVNUCisjaWZuZGVmIE9T MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVU5JWCwgVk1TLCBldGMuLi4gKGkuZS4g Qy1LZXJtaXQpICovCitjaGFyICpja19zX3Rlc3QgPSAiIjsJCQkvKiAiRGV2IiwiQWxwaGEiLCJC ZXRhIiwiUkMiLCBvciAiIiAqLworY2hhciAqY2tfc190dmVyID0gIiI7CQkJLyogVGVzdCB2ZXJz aW9uIG51bWJlciBvciAiIiAqLworI2Vsc2UgIC8qIE9TMiAqLworY2hhciAqY2tfc190ZXN0ID0g IiI7CQkJLyogKGkuZS4gSzk1KSAqLworY2hhciAqY2tfc190dmVyID0gIiI7CisjZW5kaWYgLyog T1MyICovCisjZWxzZQorY2hhciAqY2tfc190ZXN0ID0gIiI7CQkJLyogRGV2ZWxvcG1lbnQgKi8K K2NoYXIgKmNrX3NfdHZlciA9ICIiOworI2VuZGlmIC8qIEJFVEFURVNUICovCisjZWxzZSAvKiBN QUMgKi8KK2NoYXIgKmNrX3NfdGVzdCA9ICJQcmUtQWxwaGEiOyAgICAgICAgICAvKiBNYWMgS2Vy bWl0IGlzIGFsd2F5cyBhIHRlc3QuLi4gKi8KK2NoYXIgKmNrX3NfdHZlciA9ICIiOwkJCS8qIChw cmUgTWFjIE9TIFggMTAsIHRoYXQgaXMhKSAqLworI2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYg QkVUQURBVEUgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSBvZiB0aGlzIHZlcnNpb24g b3IgZWRpdCAqLworY2hhciAqY2tfc19kYXRlID0gX19EQVRFX187ICAgICAgICAgICAgIC8qIENv bXBpbGF0aW9uIGRhdGUgKi8KKyNlbHNlCitjaGFyICpja19zX2RhdGUgPSBFRElUREFURTsJCS8q IFNlZSB0b3AgKi8KKworI2VuZGlmIC8qIEJFVEFEQVRFICovCitjaGFyICpidWlsZGlkID0gRURJ VE5EQVRFOwkJLyogU2VlIHRvcCAqLworCisjaWZkZWYgVU5JWAorc3RhdGljIGNoYXIgc2Njc2lk W10gPSAiQCgjKUMtS2VybWl0IDkuMC4zMDIiOworI2VuZGlmIC8qIFVOSVggKi8KKworLyoKKyAg VGhlIEMtS2VybWl0IFZlcnNpb24gbnVtYmVyIGlzIG1ham9yLm1pbm9yLmVkaXQgKGludGVnZXJz KS4KKyAgTWFqb3IgdmVyc2lvbiBhbHdheXMgZ29lcyB1cC4KKyAgTWlub3IgdmVyc2lvbiBpcyBo aXN0b3JpY2FsLCBoYXNuJ3QgYmVlbiB1c2VkIHNpbmNlIEMtS2VybWl0IDcuMS4KKyAgRWRpdCBp cyBzZXF1ZW50aWFsLCBhbHdheXMgZ29lcyB1cCwgYnV0IHRoZXJlIGNhbiBiZSBnYXBzLgorICBG b3IgZXhhbXBsZSB0aGVyZSBtaWdodCBiZSBtYW55IGVkaXRzIGJldHdlZW4gcmVsZWFzZXMuCisg IElmIHRoZSBtYWpvciBnb2VzIHRvIDEwLCBzb21lIHZlcnNpb24tbnVtYmVyLWJhc2VkIGZlYXR1 cmUgdGVzdHMKKyAgY291bGQgZmFpbC4gIEl0IG1pZ2h0IGJlIGJldHRlciB0byB1c2UgdGhlIG1p bm9yIHZlcnNpb24gZmllbGQKKyAgZm9yIGZ1dHVyZSByZWxlYXNlcy4KKyovCisKK2NoYXIgKmNr X3NfdmVyID0gIjkuMC4zMDIiOyAgICAgICAgICAgICAvKiBDLUtlcm1pdCB2ZXJzaW9uIHN0cmlu ZyAqLworbG9uZyAgY2tfbF92ZXIgPSAgOTAwMzAyTDsgICAgICAgICAgICAgIC8qIEMtS2VybWl0 IHZlcnNpb24gbnVtYmVyICovCisKKyNpZmRlZiBPUzIKK2NoYXIgKmNrX3NfeHZlciA9ICIzLjAu MCI7CQkvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24gc3RyaW5nICovCitsb25nICBja19sX3h2 ZXIgPSAzMDAwTDsgICAgICAgICAgICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJzaW9uIG51 bWJlciAqLworI2Vsc2UKKyNpZmRlZiBNQUMKK2NoYXIgKmNrX3NfeHZlciA9ICIwLjk5NSI7ICAg ICAgICAgICAgICAvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24gc3RyaW5nICovCitsb25nICBj a19sX3h2ZXIgPSA5OTVMOyAgICAgICAgICAgICAgICAgLyogUHJvZHVjdC1zcGVjaWZpYyB2ZXJz aW9uIG51bWJlciAqLworI2Vsc2UKK2NoYXIgKmNrX3NfeHZlciA9ICIiOyAgICAgICAgICAgICAg ICAgICAvKiBEb24ndCB0b3VjaCB0aGVzZS4uLiAqLworbG9uZyAgY2tfbF94dmVyID0gMEw7ICAg ICAgICAgICAgICAgICAgIC8qIHRoZXkgYXJlIGNvbXB1dGVkIGF0IHJ1bnRpbWUgKi8KKyNlbmRp ZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE9TMgorI2lmZGVmIElLU0RP TkxZCisjaWZkZWYgTlQKK2NoYXIgKmNrX3NfbmFtZSA9ICJJS1MtTlQiOworI2Vsc2UgLyogTlQg Ki8KK2NoYXIgKmNrX3NfbmFtZSA9ICJJS1MtT1MvMiI7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNl IC8qIElLU0RPTkxZICovCitjaGFyICpja19zX25hbWUgPSAiS2VybWl0IDk1IjsgICAgICAgICAg LyogUHJvZ3JhbSBuYW1lICovCisjZW5kaWYgLyogSUtTRE9OTFkgKi8KKyNlbHNlCisjaWZkZWYg TUFDCitjaGFyICpja19zX25hbWUgPSAiTWFjIEtlcm1pdCI7CisjZWxzZQorY2hhciAqY2tfc19u YW1lID0gIkMtS2VybWl0IjsKKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwor Y2hhciAqY2tfc193aG8gPSAiIjsgICAgICAgICAgICAgICAgICAgIC8qIFdoZXJlIGN1c3RvbWl6 ZWQsICIiID0gbm90LiAqLworY2hhciAqY2tfcGF0Y2ggPSAiIjsgICAgICAgICAgICAgICAgICAg IC8qIFBhdGNoIGluZm8sIGlmIGFueS4gKi8KKworI2RlZmluZSBDS1ZFUkxFTiAxMjgKK2NoYXIg dmVyc2lveFtDS1ZFUkxFTl07ICAgICAgICAgICAgICAgICAvKiBWZXJzaW9uIHN0cmluZyBidWZm ZXIgICovCitjaGFyICp2ZXJzaW8gPSB2ZXJzaW94OyAgICAgICAgICAgICAgICAgLyogVGhlc2Ug YXJlIGZpbGxlZCBpbiBhdCAqLworbG9uZyB2ZXJudW0sIHh2ZXJudW07ICAgICAgICAgICAgICAg ICAgIC8qIHJ1bnRpbWUgZnJvbSBhYm92ZS4gICAgKi8KKworI2RlZmluZSBDS0NNQUkKKworI2lu Y2x1ZGUgImNrY2FzYy5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGNoYXJhY3RlciBz eW1ib2xzICovCisjaW5jbHVkZSAiY2tjZGViLmgiICAgICAgICAgICAgICAgICAgICAgLyogRGVi dWcgJiBvdGhlciBzeW1ib2xzICovCisKK2NoYXIgKiBteW5hbWUgPSBOVUxMOyAgICAgICAgICAg ICAgICAgICAvKiBUaGUgbmFtZSBJIGFtIGNhbGxlZCBieSAqLworI2lmbmRlZiBPUzIKK2NoYXIg KiBleGVkaXIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgSSB3YXMgZXhl Y3V0ZWQgZnJvbSAqLworI2VuZGlmIC8qIE9TMiAqLworY2hhciAqIG15aG9tZSA9IE5VTEw7CQkJ LyogSG9tZSBkaXJlY3Rvcnkgb3ZlcnJpZGUgKi8KKworLyogIEMgSyBDIE0gQSBJICAtLSAgQy1L ZXJtaXQgTWFpbiBwcm9ncmFtICAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogKGZk Y0Bjb2x1bWJpYS5lZHUpLAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBjaXR5IG9mIE5l dyBZb3JrLAorICBDb21wdXRlciBDZW50ZXIgLyBDZW50ZXIgZm9yIENvbXB1dGluZyBBY3Rpdml0 aWVzIC8gSW5mb3JtYXRpb24gVGVjaG5vbG9neS4KKyAgSSBhbSBubyBsb25nZXIgYXQgQ29sdW1i aWEgVSBhcyBvZiAxIEp1bHkgMjAxMSwgYnV0IHRoZSBlbWFpbCBhZGRyZXNzCisgIHNob3VsZCBz dGlsbCB3b3JrLiAgVGhlIEtlcm1pdCB3ZWJzaXRlIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1 IHNob3VsZAorICBzdGlsbCBiZSBhdmFpbGFibGUgYW5kIHVuZGVyIG15IGNvbnRyb2wsIGFzIHdl bGwgYXMgdGhlIEtlcm1pdCBGVFAgc2l0ZSwKKyAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvLgorCitDT1BZUklHSFQgTk9USUNFOgorKi8KKworY2hhciAqY29weXJpZ2h0W10gPSB7 CisKKyNpZmRlZiBwZHAxMQorIkNvcHlyaWdodCAoQykgMTk4NSwgJXMsIFRydXN0ZWVzIG9mIENv bHVtYmlhIFVuaXZlcnNpdHksIE5ZQy4iLAorIkFsbCByaWdodHMgcmVzZXJ2ZWQuIiwKKyIgIiwK KyNlbHNlCisiQ29weXJpZ2h0IChDKSAxOTg1LCAlcywiLAorIiAgVGhlIFRydXN0ZWVzIG9mIENv bHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuIiwKKyIgIEFsbCByaWdo dHMgcmVzZXJ2ZWQuIiwKKyIgIiwKKyJSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQiLAorIm1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyIsCisiYXJlIG1l dDoiLAorIiAiLAorIiArIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0IiwKKyIgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIiwKKyIgIiwKKyIgKyBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCIs CisiICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluIiwKKyIgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIiwKKyIgICBkaXN0cmlidXRpb24uIiwKKyIgIiwKKyIgKyBO ZWl0aGVyIHRoZSBuYW1lIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBp dHMiLAorIiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCIsCisiICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiIsCisiICIsCisiVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyIsCisiXCJB UyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCIsCisiTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIiwKKyJBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCIsCisiSE9MREVSIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCIsCisiU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCIsCisiTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIiwKKyJEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkiLAorIlRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQiLAorIihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSIsCisiT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iLAorI2VuZGlmIC8qIHBkcDEx ICovCisKKyNpZmRlZiBPUzIKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSwgU2Vj dXJlIEVuZHBvaW50cyBJbmMsIE5ldyBZb3JrIE5ZIFVTQS4iLAorIlBvcnRpb25zIENvcHlyaWdo dCAoQykgMTk5NSwgT3kgT25saW5lIFNvbHV0aW9ucyBMdGQuLCBKeXZhc2t5bGEsIEZpbmxhbmQu IiwKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisiUG9ydGlv bnMgQ29weXJpZ2h0IChDKSAxOTkwLCBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9s b2d5LiIsCisjaWZkZWYgQ0tfRU5DUllQVElPTgorIlBvcnRpb25zIENvcHlyaWdodCAoQykgMTk5 MSwgMTk5MyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIiwKKyJQb3J0 aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUgYnkgQVQmVC4i LAorIlBvcnRpb25zIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NywgRXJpYyBZb3VuZyA8ZWF5QGNy eXB0b3NvZnQuY29tPi4iLAorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDS19T UlAKKyJQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTcsIFN0YW5mb3JkIFVuaXZlcnNpdHkuIiwK KyNlbmRpZiAvKiBDS19TUlAgKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisj aWZuZGVmIHBkcDExCisiICIsCisiRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHZpc2l0IHRoZSBL ZXJtaXQgUHJvamVjdCB3ZWJzaXRlOiIsCisiaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 LyAuIiwKKyNlbmRpZiAvKiBwZHAxMSAqLworIiJ9OworCisvKiBXaW5kb3dzIElLU0QgY29weXJp Z2h0IHVzZWQgdG8gYmUgc2VwYXJhdGUgKi8KK2NoYXIgKndpa3NkY3ByID0gKGNoYXIgKikgY29w eXJpZ2h0OworCisKKy8qCitET0NVTUVOVEFUSU9OOgorCisgIlVzaW5nIEMtS2VybWl0IiBieSBG cmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwKKyAgRGlnaXRhbCBQcmVzcyAv IEJ1dHRlcndvcnRoLUhlaW5lbWFubiwgV29idXJuIE1BLCBVU0EuCisgIFNlY29uZCBlZGl0aW9u ICgxOTk3KSwgSVNCTiAxLTU1NTU4LTE2NC0xLgorICBPcmRlciBmcm9tIERpZ2l0YWwgUHJlc3M6 ICAgICsxICg4MDApIDM2Ni0yNjY1CisgIE9yIGZyb20gQ29sdW1iaWEgVW5pdmVyc2l0eTogKzEg KDIxMikgODU0LTM3MDMKKworRm9yIEtlcm1pdCA5NSwgYWxzbzoKKworICAiS2VybWl0IDk1IiBi eSBDaHJpc3RpbmUgTS4gR2lhbm9uZSBhbmQgRnJhbmsgZGEgQ3J1eiwKKyAgTWFubmluZyBQdWJs aWNhdGlvbnMsIEdyZWVud2ljaCBDVCwgVVNBICgxOTk4KSAtIE9ubGluZS4KKworQUNLTk9XTEVE R01FTlRTOgorCisgIFRoZSBLZXJtaXQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbCB3YXMgZGV2ZWxv cGVkIGF0IHRoZSBDb2x1bWJpYSBVbml2ZXJzaXR5CisgIENlbnRlciBmb3IgQ29tcHV0aW5nIEFj dGl2aXRpZXMgKENVQ0NBKSwgd2hpY2ggd2FzIHNpbmNlIHJlbmFtZWQgdG8gQ29sdW1iaWEKKyAg VW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zIChBY0lTKSBhbmQgYWZ0ZXIg dGhhdCBDb2x1bWJpYQorICBVbml2ZXJzaXR5IEluZm9ybWF0aW9uIFRlY2hub2xvZ3kgKENVSVQp LiAgS2VybWl0IGlzIG5hbWVkIGFmdGVyIEtlcm1pdCB0aGUKKyAgRnJvZywgc3RhciBvZiB0aGUg dGVsZXZpc2lvbiBzZXJpZXMgVEhFIE1VUFBFVCBTSE9XOyB0aGUgbmFtZSBpcyB1c2VkIGJ5Cisg IHBlcm1pc3Npb24gb2YgSGVuc29uIEFzc29jaWF0ZXMsIEluYy4KKworICBUaGFua3MgdG8gYXQg bGVhc3QgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhp cworICBwcm9ncmFtIG92ZXIgdGhlIHllYXJzLCBhbmQgYXBvbG9naWVzIHRvIGFueW9uZSB3aG8g d2FzIGluYWR2ZXJ0YW50bHkKKyAgb21pdHRlZDoKKworICAgQ2hyaXMgQWRpZSwgRWRpbmJ1cmdo IFUsIFNjb3RsYW5kIChPUy8yKQorICAgUm9iZXJ0IEFkc2V0dCwgVW5pdmVyc2l0eSBvZiBXYXRl cmxvbywgQ2FuYWRhCisgICBMYXJyeSBBZnJpbiwgQ2xlbXNvbiBVCisgICBSdXNzIEFsbGJlcnks IFN0YW5mb3JkIFUKKyAgIEplZmZyZXkgQWx0bWFuLCBDb2x1bWJpYSBVbml2ZXJzaXR5CisgICBH cmVnIEFuZHJld3MsIFRlbGViaXQgQ29ycAorICAgQmFycnkgQXJjaGVyLCBVIG9mIE1pc3NvdXJp CisgICBSb2JlcnQgQW5kZXJzc29uLCBJbnRlcm5hdGlvbmFsIFN5c3RlbXMgQS9TLCBPc2xvLCBO b3J3YXkKKyAgIENocmlzIEFybXN0cm9uZywgQnJvb2toYXZlbiBOYXRpb25hbCBMYWIgKE9TLzIp CisgICBXaWxsaWFtIEJhZGVyLCBTb2Z0d2FyZSBDb25zdWx0aW5nIFNlcnZpY2VzLCBOYXphcmV0 aCwgUEEKKyAgIEZ1YXQgQmFyYW4sIENvbHVtYmlhIFUKKyAgIFN0YW4gQmFyYmVyLCBSaWNlIFUK KyAgIEppbSBCYXJib3VyLCBVIG9mIENvbG9yYWRvCisgICBEb25uIEJhdW1nYXJ0bmVyLCBEZWxs CisgICBJYW4gQmVja3dpdGgsIERlYmlhbiBQcm9qZWN0CisgICBOZWxzb24gQmVlYmUsIFUgb2Yg VXRhaAorICAgR2VycnkgQmVsYW5nZXIsIENvZ25pdHJvbmljcworICAgS2FybCBCZXJyeSwgVU1C CisgICBNYXJrIEJlcnJ5bWFuLCBTQUlDCisgICBEZWFuIFcgQmV0dGluZ2VyLCBTVU5ZCisgICBH YXJ5IEJpbGt1cworICAgUGV0ZXIgQmluZGVydXAsIERlbm1hcmsKKyAgIERhdmlkIEJvbGVuLCBB ZHZhbmNlZCBOZXR3b3JrcyBhbmQgU2VydmljZXMsIEluYy4KKyAgIEpvb3AgQm9uZW4KKyAgIE1h cmMgQm91Y2hlciwgVSBvZiBNb250cmVhbAorICAgQ2hhcmxlcyBCcm9va3MsIEVETgorICAgQm9i IEJyb3duCisgICBNaWtlIEJyb3duLCBQdXJkdWUgVQorICAgUm9iIEJyb3duCisgICBKYWNrIEJy eWFucywgQ2FsaWZvcm5pYSBTdGF0ZSBVIGF0IExvbmcgQmVhY2gKKyAgIE1hcmsgQnVkYSwgREVD IChWTVMpCisgICBGZXJuYW5kbyBDYWJyYWwsIFBhZHJhbyBpWCwgQnJhc2lsaWEKKyAgIEJqb3Ju IENhcmxzc29uLCBTdG9ja2hvbG0gVW5pdmVyc2l0eSBDb21wdXRlciBDZW50cmUgUVosIFN3ZWRl bgorICAgQmlsbCBDYXRjaGluZ3MsIChmb3JtZXJseSBvZikgQ29sdW1iaWEgVQorICAgQm9iIENh dHRhbmksIENvbHVtYmlhIFUgQ1MgRGVwdAorICAgRGF2aWRlIENlcnZvbmUsIFJvY2hlc3RlciBV CisgICBTZXRoIENoYWlrbGluLCBEZW5tYXJrCisgICBKb2huIENoYW5kbGVyLCBIYXJ2YXJkIFUg LyBTbWl0aHNvbmlhbiBBc3Ryb25vbWljYWwgT2JzZXJ2YXRvcnkKKyAgIEJlcm5hcmQgQ2hlbiwg VUNMQQorICAgQW5kcmV3IEEgQ2hlcm5vdiwgUkVMQ09NIFRlYW0sIE1vc2NvdworICAgSm9obiBM IENobWllbGV3c2tpLCBBVCZULCBMaXNsZSwgSUwKKyAgIEhvd2FyZCBDaHUsIFUgb2YgTWljaGln YW4KKyAgIEJpbGwgQ29hbHNvbiwgTWNEb25uZWxsIERvdWdsYXMKKyAgIEJlcnRpZSBDb29wZXJz bWl0aCwgTG9uZG9uCisgICBDaHJpc3RpYW4gQ29ydGkKKyAgIENoZXQgQ3JlaWRlciwgVSBvZiBX ZXN0ZXJuIE9udGFyaW8KKyAgIEFsYW4gQ3Jvc3N3ZWxsLCBDb2x1bWJpYSBVCisgICBKZWZmIERh bWVucywgKGZvcm1lcmx5IG9mKSBDb2x1bWJpYSBVCisgICBNYXJrIERhdmllcywgQmF0aCBVLCBV SworICAgU2luLWl0aXJvdSBEZXphd2EsIEZ1amlmaWxtLCBKYXBhbgorICAgSm9lIFIuIERvdXBu aWssIFV0YWggU3RhdGUgVQorICAgRnJhbmsgRHJlYW5vLCBIb25leXdlbGwKKyAgIEpvaG4gRHVu bGFwLCBVIG9mIFdhc2hpbmd0b24KKyAgIEFsZXggRHVwdXksIFNNQVJULkNPTQorICAgRGF2aWQg RHljaywgSm9obiBGbHVrZSBNZmcgQ28uCisgICBTdGVmYWFuIEEuIEVlY2tlbHMsIEV1cm9rb20s IEx1eGVtYm91cmcKKyAgIE5pY2sgRWZ0aHltaW91CisgICBQYXVsIEVnZ2VydCwgVHdpbiBTdW4s IEluYy4sIEVsIFNlZ3VuZG8sIENBCisgICBCZXJuaWUgRWliZW4sIERFQworICAgUGV0ZXIgRWlj aGhvcm4sIEFzc3lzdCBJbnRlcm5hdGlvbmFsCisgICBLcmlzdG9mZmVyIEVyaWtzc29uLCBQZXJp ZG90IEtvbnN1bHQgQUIsIE9lcmVicm8sIFN3ZWRlbgorICAgSm9obiBSLiBFdmFucywgSVJTLCBL YW5zYXMgQ2l0eQorICAgR2xlbm4gRXZlcmhhcnQsIFJDQSBMYWJzCisgICBDaGFybGllIEZpbmFu LCBDcmF5IFJlc2VhcmNoCisgICBIZXJtIEZpc2NoZXIsIEVuY2lubywgQ0EgKGV4dGVuc2l2ZSBj b250cmlidXRpb25zIHRvIHZlcnNpb24gNC4wKQorICAgQ2FybCBGb25naGVpc2VyLCBDV1JVCisg ICBNaWtlIEZyZWVtYW4sIEJvbm5ldmlsbGUgUG93ZXIgQXV0aG9yaXR5CisgICBDYXJsIEZyaWVk YmVyZworICAgTWFyY2VsbG8gRnJ1dGlnLCBDYXRob2xpYyBVbml2ZXJzaXR5LCBTYW8gUGF1bG8s IEJyYXppbCAoWC4yNSBzdXBwb3J0KQorICAgSGlyb2Z1bWkgRnVqaWksIEphcGFuIE5hdCdsIExh YiBmb3IgSGlnaCBFbmVyZ3kgUGh5c2ljcywgVG9reW8gKEthbmppKQorICAgQ2h1Y2sgRnVsbGVy LCBXZXN0aW5naG91c2UgQ29ycG9yYXRlIENvbXB1dGVyIFNlcnZpY2VzCisgICBBbmR5IEZ5ZmUs IENhbHRlY2gKKyAgIENocmlzdGluZSBNLiBHaWFub25lLCBDb2x1bWJpYSBVCisgICBKb2huIEdp bG1vcmUsIFVDIEJlcmtlbGV5CisgICBNYWRodXN1ZGFuIEdpeXlhcnB1cmFtLCBIUAorICAgUmFp bmVyIEdsYXNjaGljaywgU2llbWVucyBBRywgUGFkZXJib3JuCisgICBXaWxsaWFtIEguIEdsYXNz CisgICBHZXJtYW4gR29sZHN6bWlkdCwgSUJNCisgICBDaHVjayBHb29kaGFydCwgTkFTQQorICAg QWxpc3RhaXIgR29ybWFuLCBOZXcgWmVhbGFuZAorICAgUmljaGFyZCBHcmF0aW9uLCBBREZBLCBB dXN0cmFsaWEKKyAgIENocmlzIEdyZWVuLCBFc3NleCBVLCBVSworICAgQWxhbiBHcmllZywgRHVu ZGVlIFRlY2gsIFNjb3RsYW5kCisgICBZZWt0YSBHdXJzZWwsIE1JVAorICAgSmltIEd1eXRvbiwg UmFuZCBDb3JwCisgICBNaWNoYWVsIEhhZXJ0ZWwKKyAgIEJydW5vIEhhaWJsZQorICAgQm9iIEhh aW4sIFVNTgorICAgTWFyaW9uIEhha2Fuc29uLCBPUlNUCisgICBSaWNoYXJkIEhhbWlsdG9uCisg ICBKb2huIEhhbWlsc3RvbiwgSW93YSBTdGF0ZSBVCisgICBTaW1vbiBIYW5pYSwgTmV0aGVybGFu ZHMKKyAgIFN0YW4gSGFua3MsIFJpY2UgVS4KKyAgIEtlbiBIYXJyZW5zdGVpbiwgU1JJCisgICBF dWdlbmlhIEhhcnJpcywgRGF0YSBHZW5lcmFsIChBT1MvVlMpCisgICBEYXZpZCBIYXJyaXNvbiwg S2luZ3N0b24gV2FycmVuIENvcnAKKyAgIEx1Y2FzIEhhcnQsIE9yZWdvbiBTdGF0ZSBVbml2ZXJz aXR5CisgICBKYW1lcyBIYXJ2ZXksIEluZGlhbmEvUHVyZHVlIFUgKFZNUykKKyAgIFJvYiBIZWFs ZXkKKyAgIENodWNrIEhlZHJpY2ssIFJ1dGdlcnMgVQorICAgUm9uIEhlaWJ5LCBUZWNobmljYWwg U3lzdGVtcyBEaXZpc2lvbiwgTW90b3JvbGEgQ29tcHV0ZXIgR3JvdXAKKyAgIFN0ZXZlIEhlbW1p bmdlciwgVGVrdHJvbml4CisgICBDaHJpc3RpYW4gSGVtc2luZywgUldUSCBBYWNoZW4sIEdlcm1h bnkgKE9TLTkpCisgICBSYW5kb2xwaCBIZXJiZXIsIFVTIERPRSwKKyAgIEFuZHJldyBIZXJiZXJ0 LCBNb25hc2ggVW5pdiwgQXVzdHJhbGlhCisgICBNYXJjdXMgSGVyYmVydCwgR2VybWFueQorICAg TWlrZSBIaWNrZXksIElUSQorICAgRGFuIEhpbGRlYnJhbmQsIFFOWCBTb2Z0d2FyZSBTeXN0ZW1z IEluYywgS2FuYXRhLCBPTiAoUU5YKQorICAgUiBFIEhpbGwKKyAgIFN0ZXBoYW4gSG9mZm1hbi1F bWRlbgorICAgU3ZlbiBIb2xtc3Ryb20sIEFCQiBVdGlsaXRpZXMgQUIsIFN3ZWRlbgorICAgQmls bCBIb21lciwgQ3JheSBSZXNlYXJjaAorICAgUmF5IEh1bnRlciwgVGhlIFdvbGxvbmdvbmcgR3Jv dXAKKyAgIFJhbmR5IEh1bnR6aWdlciwgTmF0aW9uYWwgTGlicmFyeSBvZiBNZWRpY2luZQorICAg TGFycnkgSmFjb2JzLCBUcmFuc2FyYworICAgU3RldmUgSmVua2lucywgTGFuY2FzdGVyIFVuaXZl cnNpdHksIFVLCisgICBEYXZlIEpvaG5zb24sIEdyYWRpZW50IFRlY2hub2xvZ2llcworICAgTWFy ayBCIEpvaG5zb24sIEFwcGxlIENvbXB1dGVyCisgICBKeWtlIEpva2luZW4sIFRhbXBlcmUgVW5p dmVyc2l0eSBvZiBUZWNobm9sb2d5LCBGaW5sYW5kIChRTlgpCisgICBFcmljIEYgSm9uZXMsIEFU JlQKKyAgIEx1a2UgSm9uZXMsIEFUJlQKKyAgIFBldGVyIEpvbmVzLCBVIG9mIFF1ZWJlYyBNb250 cmVhbAorICAgUGhpbCBKdWxpYW4sIFNBUyBJbnN0aXR1dGUKKyAgIFBldGVyIEthYmFsLCBVIG9m IFF1ZWJlYworICAgTWljIEthY3ptYXJjemlrLCBVIG9mIFRleGFzIGF0IEF1c3RpbgorICAgU2Vy Z2V5IEthcnRhc2hvZmYsIEluc3QuIG9mIFByZWNpc2UgTWVjaGFuaWNzICYgQ29tcHV0ZXIgRXF1 aXBtZW50LCBNb3Njb3cKKyAgIEhvd2llIEtheWUsIENvbHVtYmlhIFUKKyAgIFJvYiBLZWRvaW4s IExpbm90eXBlIENvLCBIYXVwcGF1Z2UsIE5ZIChPUy8yKQorICAgUGhpbCBLZWVnc3RyYQorICAg TWFyayBLZW5uZWR5LCBJQk0KKyAgIFRlcnJ5IEtlbm5lZHksIFN0IFBldGVyJ3MgQ29sbGVnZSwg SmVyc2V5IENpdHksIE5KIChWTVMgYW5kIG1vcmUpCisgICAiQ2FybG8gS2lkIiwgVGVjaG5pY2Fs IFVuaXZlcnNpdHkgb2YgRGVsZnQsIE5ldGhlcmxhbmRzCisgICBUaW0gS2llbnR6bGUKKyAgIFBh dWwgS2ltb3RvLCBDb3JuZWxsIFUKKyAgIERvdWdsYXMgS2luZ3N0b24sIG1vcmdhbi5jb20KKyAg IExhd3JlbmNlIEtpcmJ5LCBXaWx0c2hpcmUsIFVLCisgICBUb20gS2xvb3MsIFNlcXVlbnQgQ29t cHV0ZXIgU3lzdGVtcworICAgR3VlbnRlciBLbmF1ZgorICAgSmltIEtudXRzb24sIFUgb2YgVGV4 YXMgYXQgQXVzdGluCisgICBKb2huIFQuIEtvaGwgKEJTREkpCisgICBTY290dCBLcmFtZXIsIFNS SSBJbnRlcm5hdGlvbmFsLCBNZW5sbyBQYXJrLCBDQQorICAgSm9obiBLcmF5bmFjaywgVVMgUG9z dGFsIFNlcnZpY2UKKyAgIERhdmlkIEtyaWNrZXIsIEVuY29yZSBDb21wdXRlcgorICAgVGhvbWFz IEtydWVnZXIsIFVXTQorICAgQm8gS3VsbG1hciwgQUJDIEtsdWJiZW4sIFN0b2NraG9sbSwgYW5k IENlbnRyYWwgQmFuayBvZiBTd2VkZW4sIEtpc3RhCisgICBSLiBCcmFkIEt1bW1lciwgQVQmVCBC ZWxsIExhYnMsIEF0bGFudGEsIEdBCisgICBKb2huIEt1bnplLCBVQyBCZXJrZWxleQorICAgRGF2 aWQgTGFuZSwgQlNTSSAvIEJlbGxTb3V0aCAoU3RyYXR1cyBWT1MsIFguMjUpCisgICBCb2IgTGFy c29uLCBVU0MgKE9TLTkpCisgICBCZXJ0IExhdmVybWFuLCBHcm9uaW5nZW4gVSwgTmV0aGVybGFu ZHMKKyAgIFN0ZXZlIExheXRvbgorICAgRGF2aWQgTGF3eWVyLCBVQyBJcnZpbmUKKyAgIEphc29u IExlaHIKKyAgIERhdmlkIExlVmluZSwgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBDb3Jwb3JhdGlv bgorICAgRGFuaWVsIFMuIExld2FydCwgVUlVQworICAgUy5PLiBMaWRpZSwgTGVoaWdoIFUKKyAg IFRvciBMaWxscXZpc3QsIEhlbHNpbmtpIFUsIEZpbmxhbmQKKyAgIERhdmlkLU1pY2hhZWwgTGlu Y2tlLCBVIG9mIFN0IEdhbGxlbiwgU3dpdHplcmxhbmQKKyAgIFJvYmVydCBMaXBlIChmb3IgU0NP IG1ha2VmaWxlIGVudHJpZXMgJiBhZHZpY2UpCisgICBEZWFuIExvbmcKKyAgIE1pa2UgTG9uZywg QW5hbG9nIERldmljZXMsIE5vcndvb2QgTUEKKyAgIEtldmluIExvd2V5LCBVIG9mIFNhc2thdGNo ZXdhbiAoT1MvMikKKyAgIEFuZHkgTG93cnksIENvbHVtYmlhIFUKKyAgIEphbWVzIEx1bW1lbCwg Q2FwcmljYSBUZWxlY29tcHV0aW5nIFJlc291cmNlcyAoUU5YKQorICAgTGV3aXMgTWNDYXJ0aHkK KyAgIERhdmlkIE1hY0tlbnppZSwgRW52aXJvbm1lbnRhbCBEZWZlbnNlIEZ1bmQsIFUgb2YgTWFy eWxhbmQKKyAgIEpvaG4gTWFja2luLCBVbml2ZXJzaXR5IG9mIFNpZG5leSwgQXVzdHJhbGlhCisg ICBNYXJ0aW4gTWFjbGFyZW4sIEJhdGggVSwgVUsKKyAgIENocmlzIE1haW8sIENvbHVtYmlhIFUg Q1MgRGVwdAorICAgTW9udHNlcnJhdCBNYW5lLCBIUCwgR3Jlbm9ibGUsIEZyYW5jZQorICAgRnVs dmlvIE1hcmlubywgT2xpdmV0dGksIEl2cmVhLCBJdGFseQorICAgQXJ0aHVyIE1hcnNoLCBkaXJj c2Eub3JnLmF1CisgICBQZXRlciBNYXV6ZXksIEx1Y2VudCBUZWNobm9sb2dpZXMKKyAgIFR5ZSBN Y1F1ZWVuLCBVdGFoIFN0YXRlIFUKKyAgIFRlZCBNZWRpbgorICAgSGVsbG11dGggTWljaGFlbGlz LCBIYW5zZWF0aXNjaGVyIENvbXB1dGVyc2VydmljZSBHbWJILCBIYW1idXJnLCBHZXJtYW55Cisg ICBMZXNsaWUgTWlrZXNlbGwsIEFtZXJpY2FuIEZhcm0gQnVyZWF1CisgICBUb2RkIE1pbGxlciwg Q291cnRlc2FuIENvbnN1bHRpbmcKKyAgIEdhcnkgTWlsbHMKKyAgIE1hcnRpbiBNaW5vdywgREVD IChWTVMpCisgICBQYXdhbiBNaXNyYSwgQmVsbGNvcmUKKyAgIEtlbiBNaXppYWxrbywgSUJNLCBN YW5hc3NhcywgVkEKKyAgIFdvbGZnYW5nIE1vZWxsZXIsIERFQ1VTIEdlcm1hbnkKKyAgIFJheSBN b29keSwgUHVyZHVlIFUKKyAgIEJydWNlIEogTW9vcmUsIEFsbGVuLUJyYWRsZXkgQ28sIEhpZ2hs YW5kIEhlaWdodHMsIE9IIChBdGFyaSBTVCkKKyAgIFN0ZXZlIE1vcmxleSwgQ29udmV4CisgICBQ ZXRlciBNb3NzZWwsIENvbHVtYmlhIFUKKyAgIFRvbnkgTW92c2hvbiwgTllVCisgICBMb3UgTXVj Y2lvbGksIFN3YW5zb24gQW5hbHlzaXMgU3lzdGVtcworICAgRGFuIE11cnBoeQorICAgTmVhbCBQ LiBNdXJwaHksIEhhcnNvZiBTeXN0ZW1zLCBXb25kZXIgTGFrZSBJTAorICAgR2FyeSBNdXNzYXIK KyAgIEpvaG4gTmFsbCwgRlNVCisgICBKYWNrIE5lbHNvbiwgVSBvZiBQaXR0c2J1cmdoCisgICBK aW0gTm9ibGUsIFBsYW5uaW5nIFJlc2VhcmNoIENvcnBvcmF0aW9uIChNYWNpbnRvc2gpCisgICBJ YW4gTydCcmllbiwgQmF0aCBVLCBVSworICAgTWVsaXNzYSBPJ05laWxsLCBTRlUKKyAgIEpvaG4g T3dlbnMKKyAgIFRob21hcyBQaW5rbCwgSGVhbHRoIEJ1c2luZXNzIFN5c3RlbXMgSW5jLgorICAg TWljaGFlbCBQaW5zLCBJb3dhIENvbXB1dGVyIEFpZGVkIEVuZ2luZWVyaW5nIE5ldHdvcmsKKyAg IEFuZHJlJyBQaXJhcmQsIFVuaXZlcnNpdHkgb2YgTGllZ2UsIEJlbGdpdW0KKyAgIFBhdWwgUGxh Y2V3YXksIE9oaW8gU3RhdGUgVQorICAgUGlldCBXLiBQbG9tcCwgSUNDRSwgR3JvbmluZ2VuIFVu aXZlcnNpdHksIE5ldGhlcmxhbmRzCisgICBLZW4gUG91bHRvbiwgSFAgTGFicworICAgTWFuZnJl ZCBQcmFuZ2UsIE9ha2xhbmQgVQorICAgQ2hyaXN0b3BoZXIgUHJhdHQsIEFQViBCYWtlciwgVUsK KyAgIEZyYW5rIFByaW5kbGUsIE5BREMKKyAgIFRvbnkgUXVlcnViaW4sIFUgb2YgSGF3YWlpCisg ICBKZWFuLVBpZXJyZSBSYWRsZXkKKyAgIEFudG9uIFJhbmcKKyAgIE1pa2UgUmVjaHRtYW4KKyAg IFNjb3R0IFJpYmUKKyAgIEFsYW4gUm9iaWV0dGUsIE94Zm9yZCBVbml2ZXJzaXR5LCBVSworICAg TWljaGVsIFJvYml0YWlsbGUsIFUgb2YgTW9udHJlYWwgKE1hYykKKyAgIEh1dyBSb2dlcnMsIFNj aHdlaXplcmlzY2hlIEtyZWRpdGFuc3RhbHQsIFp1ZXJpY2gKKyAgIE5pZ2VsIFJvbGVzLCBDYW1i cmlkZ2UsIEVuZ2xhbmQKKyAgIEthaSBVd2UgUm9tbWVsLCBUZWNobmlzY2hlIFVuaXZlcnNpdGFl dCBNdWVuY2hlbiAoT1MvMikKKyAgIExhcnJ5IFJvc2VubWFuIChBbWlnYSkKKyAgIEpheSBSb3Vt YW4sIFUgb2YgTWljaGlnYW4KKyAgIEphY2sgUm91c2UsIFNBUyBJbnN0aXR1dGUgKERhdGEgR2Vu ZXJhbCBhbmQvb3IgQXBvbGxvKQorICAgU3RldyBSdWJlbnN0ZWluLCBIYXJ2YXJkIFUgKFZNUykK KyAgIEdlcmhhcmQgUnVlY2tsZSwgRkggRGFybXN0YWR0LCBGYi4gRS9BdXRvbWF0aXNpZXJ1bmdz dGVjaG5paworICAgSm9obiBTYW50b3MsIEVHJkgKKyAgIEJpbGwgU2NoaWxpdCwgQ29sdW1iaWEg VQorICAgVWxsaSBTY2hsdWV0ZXIsIFJXVEggQWFjaGVuLCBHZXJtYW55IChPUy05LCBldGMpCisg ICBNaWNoYWVsIFNjaG1pZHQsIFUgb2YgUGFkZXJib3JuLCBHZXJtYW55CisgICBFcmljIFNjaG5v ZWJlbGVuLCBDb252ZXgKKyAgIEJlbm4gU2NocmVpYmVyLCBERUMKKyAgIERhbiBTY2h1bGxtYW4s IERFQyAobW9kZW1zLCBESUFMIGNvbW1hbmQsIGV0YykKKyAgIEpvaG4gU2NodWx0eiwgM00KKyAg IFN0ZXZlbiBTY2h1bHR6LCBDb250ZWwgKFBEUC0xMSkKKyAgIFN0ZXZlbiBTY2h3ZWRhCisgICBB UFBQIFNjb3JlciwgTGVlZHMgUG9seXRlY2huaWMsIFVLCisgICBHb3Jkb24gU2NvdHQsIE1pY3Jv IEZvY3VzLCBOZXdidXJ5IFVLCisgICBHaXNiZXJ0IFcuIFNlbGtlLCBXSWRPLCBCb25uLCBHZXJt YW55CisgICBLaWphbCBTaGFoCisgICBEYXZpZCBTaW5nZXIsIElCTSBBbG1hZGVuIFJlc2VhcmNo IExhYnMKKyAgIERhdmlkIFNpemVsYW5kLCBVIG9mIExvbmRvbiBNZWRpY2FsIFNjaG9vbAorICAg RnJpZHJpayBTa3VsYXNvbiwgSWNlbGFuZAorICAgUmljayBTbGFka2V5IChMaW51eCkKKyAgIERh dmUgU2xhdGUKKyAgIEJyYWRsZXkgU21pdGgsIFVDTEEKKyAgIEZyZWQgU21pdGgsIE1lcmsgLyBD b21wdXRyaXRpb24KKyAgIFJpY2hhcmQgUyBTbWl0aCwgQ2FsIFN0YXRlCisgICBSeWFuIFN0YW5p c2ZlciwgVU5UCisgICBCZXJ0aWwgU3RlbnN0cm9lbSwgU3RvY2tob2xtIFVuaXZlcnNpdHkgQ29t cHV0ZXIgQ2VudHJlIChRWiksIFN3ZWRlbgorICAgSmFtZXMgU3R1cmRldmFudCwgQ0FQIEdFTUVO SSBBTUVSSUNBLCBNaW5uZWFwb2xpcworICAgUGV0ZXIgU3ZhbmJlcmcsIFJveWFsIFRlY2huLiBI UywgU3dlZGVuCisgICBKYW1lcyBSLiBTd2Vuc29uLCBBY2N1LVdlYXRoZXIsIEluYy4KKyAgIFRl ZCBUJ3NvLCBNSVQgKExpbnV4KQorICAgQW5keSBUYW5lbmJhdW0sIFZyaWplIFUsIEFtc3RlcmRh bSwgTmV0aGVybGFuZHMKKyAgIFNldGggVGhlcmlhdWx0LCBDb2x1bWJpYSBVCisgICBHbGVuIFRo b2JlCisgICBNYXJra3UgVG9pamFsYSwgSGVsc2lua2kgVSBvZiBUZWNobm9sb2d5CisgICBUZWVt dSBUb3JtYSwgSGVsc2lua2kgVSBvZiBUZWNobm9sb2d5CisgICBMaW51cyBUb3J2YWxkcywgSGVs c2lua2kKKyAgIFJpY2sgVHJveGVsLCBOSUgKKyAgIFdhcnJlbiBUdWNrZXIsIFRyaWRvbSBDb3Jw LCBNb3VudGFpbiBQYXJrLCBHQQorICAgRGF2ZSBUd2V0ZW4sIEFNRVMtTkFTCisgICBHIFVkZGVi b3JnLCBTd2VkZW4KKyAgIFdhbHRlciBVbmRlcndvb2QsIEZvcmQgQWVyb3NwYWNlCisgICBQaWV0 ZXIgVmFuIERlciBMaW5kZW4sIENlbnRyZSBNb25kaWFsLCBQYXJpcworICAgR2UgdmFuIEdlbGRv cnAsIE5ldGhlcmxhbmRzCisgICBGcmVkIHZhbiBLZW1wZW4sIE1JTklYIFVzZXIgR3JvdXAsIFZv b3Job3V0LCBOZXRoZXJsYW5kcworICAgV2F5bmUgVmFuIFBlbHQsIEdFL0NSRAorICAgTWFyayBW YXNvbGwsIE9rbGFob21hIFN0YXRlIFUgKFY3IFVOSVgpCisgICBLb25zdGFudGluIFZpbm9ncmFk b3YsIElDU1RJLCBNb3Njb3cKKyAgIFBhdWwgVml4aWUsIERFQworICAgQmVybmllIFZvbHosIFBy b2Nlc3MgU29mdHdhcmUKKyAgIEVkdWFyZCBWb3BpY2thLCBQcmFndWUgVW5pdmVyc2l0eSBvZiBF Y29ub21pY3MsIEN6ZWNoIFJlcHVibGljCisgICBNYXJ0aW4gVm9ybGFlbmRlcgorICAgRGltaXRy aSBWdWxpcywgQ1VOWQorICAgUm9nZXIgV2FsbGFjZSwgUmF5dGhlb24KKyAgIFN0ZXBoZW4gV2Fs dG9uLCBDYWxpZiBTdGF0ZSBVLCBOb3J0aHJpZGdlIChBbWlnYSkKKyAgIEphbWllIFdhdHNvbiwg QWRhc29mdCwgU3dpdHplcmxhbmQgKEFJWCkKKyAgIFJpY2sgV2F0c29uLCBVIG9mIFRleGFzIChN YWNpbnRvc2gpCisgICBFcmljIFdlYXZlciwgQ29sdW1iaWEgVQorICAgU2NvdHQgV2Vpa2FydCAo QXNzb2NpYXRpb24gZm9yIFByb2dyZXNzaXZlIENvbW11bmljYXRpb25zKQorICAgUm9iZXJ0IFdl aW5lciwgUHJvZ3JhbW1pbmcgUGx1cywgTmV3IFlvcmsgQ2l0eQorICAgTGF1cmVuIFdlaW5zdGVp biwgVm9ydGV4IFRlY2hubG9neQorICAgRGF2aWQgV2V4ZWxibGF0LCBBVCZUCisgICBDbGFyayBX aWVyZGEsIElsbHVtaW5hdGkgT25saW5lCisgICBKb2FjaGltIFdpZXNlbCwgVSBvZiBLYXJsc3J1 aGUKKyAgIExvbiBXaWxsZXR0LCBVIG9mIFV0YWgKKyAgIE1pY2hhZWwgV2lsbGlhbXMsIFVDTEEK KyAgIE5hdGUgV2lsbGlhbXMsIFUgb2YgTW9udGFuYQorICAgRGF2aWQgV2lsc29uCisgICBKb2Vs bGVuIFdpbmRzb3IsIFUgb2YgQXJpem9uYQorICAgUGF0cmljayBXb2xmZSwgS3VjayAmIEFzc29j aWF0ZXMsIEluYy4KKyAgIEdyZWdnIFdvbmRlcmx5LCBPa2xhaG9tYSBTdGF0ZSBVIChWNyBVTklY KQorICAgRmFycmVsbCBXb29kcywgQ29uY3VycmVudCAoZm9ybWVybHkgTWFzc2NvbXApCisgICBE YXZlIFdvb2xsZXksIENBUCBDb21tdW5pY2F0aW9uIFN5c3RlbXMsIExvbmRvbgorICAgSmFjayBX b29sbGV5LCBTQ1QgQ29ycAorICAgRnJhbmsgV29ydG5lcgorICAgS2VuIFlhcCwgZm9ybWVybHkg b2YgVSBvZiBSb2NoZXN0ZXIKKyAgIEpvaG4gWmVlZmYsIEFubiBBcmJvciwgTUkKKyovCisKKyNp bmNsdWRlICJja2NrZXIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQgc3ltYm9scyAq LworI2luY2x1ZGUgImNrY25ldC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgc3lt Ym9scyAqLworCisjaWZkZWYgQ0tfU1NMCisjaW5jbHVkZSAiY2tfc3NsLmgiCisjZW5kaWYgLyog Q0tfU1NMICovCisKKyNpZm5kZWYgTk9TUEwKKyNpbmNsdWRlICJja3V1c3IuaCIKKyNlbmRpZiAv KiBOT1NQTCAqLworCisjaWZkZWYgT1MyT05MWQorI2RlZmluZSBJTkNMX1ZJTyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KKyNpbmNsdWRlIDxvczIuaD4K KyN1bmRlZiBDT01NRU5UCisjZW5kaWYgLyogT1MyT05MWSAqLworCisjaWZkZWYgTlQKKyNpbmNs dWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbnRhcC5oIgor I2VuZGlmIC8qIE5UICovCisKKyNpZm5kZWYgTk9TRVJWRVIKKy8qIFRleHQgbWVzc2FnZSBkZWZp bml0aW9ucy4uIGVhY2ggc2hvdWxkIGJlIDI1NiBjaGFycyBsb25nLCBvciBsZXNzLiAqLworI2lm ZGVmIE1JTklYCitjaGFyICpzcnZ0eHQgPSAiXHJcblwKK0VudGVyaW5nIHNlcnZlciBtb2RlLlxy XG5cMCI7CisjZWxzZQorI2lmZGVmIE9MRE1TRworLyoKKyAgSXQgc2VlbXMgdGhlcmUgd2FzIGEg bGFyZ2UgaW5zdGFsbGF0aW9uIHRoYXQgd2FzIHVzaW5nIEMtS2VybWl0IDVBKDE2NSkKKyAgb3Ig dGhlcmVhYm91dHMsIHdoaWNoIGhhZCBkZXBsb3llZCB0aG91c2FuZHMgb2YgTVMtRE9TIEtlcm1p dCBzY3JpcHRzIGluCisgIHNjYXR0ZXJlZCBsb2NhdGlvbnMgdGhhdCBsb29rZWQgZm9yIHN0cmlu Z3MgaW4gdGhlIG9sZCBzZXJ2ZXIgbWVzc2FnZSwKKyAgd2hpY2ggY2hhbmdlZCBpbiA1QSgxODMp LCBBdWd1c3QgMTk5Mi4KKyovCitjaGFyICpzcnZ0eHQgPSAiXHJcblwKK0MtS2VybWl0IHNlcnZl ciBzdGFydGluZy4gIFJldHVybiB0byB5b3VyIGxvY2FsIG1hY2hpbmUgYnkgdHlwaW5nXHJcblwK K2l0cyBlc2NhcGUgc2VxdWVuY2UgZm9yIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24sIGFuZCBpc3N1 ZSBmdXJ0aGVyXHJcblwKK2NvbW1hbmRzIGZyb20gdGhlcmUuICBUbyBzaHV0IGRvd24gdGhlIEMt S2VybWl0IHNlcnZlciwgaXNzdWUgdGhlXHJcblwKK0ZJTklTSCBvciBCWUUgY29tbWFuZCBhbmQg dGhlbiByZWNvbm5lY3QuXG5cCitcclxuXDAiOworI2Vsc2UKKyNpZmRlZiBPU0sKK2NoYXIgKnNy dnR4dCA9ICJcclwwMTJcCitFbnRlcmluZyBzZXJ2ZXIgbW9kZS4gIElmIHlvdXIgbG9jYWwgS2Vy bWl0IHNvZnR3YXJlIGlzIG1lbnUgZHJpdmVuLCB1c2VcclwwMTJcCit0aGUgbWVudXMgdG8gc2Vu ZCBjb21tYW5kcyB0byB0aGUgc2VydmVyLiAgT3RoZXJ3aXNlLCBlbnRlciB0aGUgZXNjYXBlXHJc MDEyXAorc2VxdWVuY2UgdG8gcmV0dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IHByb21wdCBhbmQg aXNzdWUgY29tbWFuZHMgZnJvbVxyXDAxMlwKK3RoZXJlLiBVc2UgU0VORCBhbmQgR0VUIGZvciBm aWxlIHRyYW5zZmVyLiBVc2UgUkVNT1RFIEhFTFAgZm9yIGEgbGlzdCBvZlxyXDAxMlwKK290aGVy IGF2YWlsYWJsZSBzZXJ2aWNlcy4gIFVzZSBCWUUgb3IgRklOSVNIIHRvIGVuZCBzZXJ2ZXIgbW9k ZS5cclwwMTJcMCI7CisjZWxzZSAvKiBVTklYLCBWTVMsIEFPUy9WUywgYW5kIGFsbCBvdGhlcnMg Ki8KK2NoYXIgKnNydnR4dCA9ICJcclxuXAorRW50ZXJpbmcgc2VydmVyIG1vZGUuICBJZiB5b3Vy IGxvY2FsIEtlcm1pdCBzb2Z0d2FyZSBpcyBtZW51IGRyaXZlbiwgdXNlXHJcblwKK3RoZSBtZW51 cyB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBzZXJ2ZXIuICBPdGhlcndpc2UsIGVudGVyIHRoZSBl c2NhcGVcclxuXAorc2VxdWVuY2UgdG8gcmV0dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IHByb21w dCBhbmQgaXNzdWUgY29tbWFuZHMgZnJvbVxyXG5cCit0aGVyZS4gIFVzZSBTRU5EIGFuZCBHRVQg Zm9yIGZpbGUgdHJhbnNmZXIuICBVc2UgUkVNT1RFIEhFTFAgZm9yIGEgbGlzdCBvZlxyXG5cCitv dGhlciBhdmFpbGFibGUgc2VydmljZXMuICBVc2UgQllFIG9yIEZJTklTSCB0byBlbmQgc2VydmVy IG1vZGUuXHJcblwwIjsKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPTERNU0cgKi8KKyNl bmRpZiAvKiBNSU5JWCAqLworI2Vsc2UgIC8qIHNlcnZlciBtb2RlIGRpc2FibGVkICovCitjaGFy ICpzcnZ0eHQgPSAiIjsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCitpbnQgaW5pdGZsZyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogc3lzaW5pdCgpIGhhcyBleGVjdXRlZC4uLiAqLwor aW50IGhvd2NhbGxlZCA9IElfQU1fS0VSTUlUOyAgICAgICAgICAgIC8qIEhvdyBJIHdhcyBjYWxs ZWQgKi8KK2ludCBobXRvcGxpbmUgPSAwOworaW50IHF1aXR0aW5nID0gMDsJCQkvKiBJJ20gaW4g dGhlIGFjdCBvZiBxdWl0dGluZyAqLworCisjaWZkZWYgSUtTRENPTkYKK2NoYXIgKiBpa3NkY29u ZiA9IElLU0RDT05GOyAgICAgICAgICAgICAvKiBJS1NEIGNvbmZpZ3VyYXRpb24gZmlsZSAqLwor aW50ICAgIGlrc2RjZiAgID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBJS1NEIGMuZi4g YmVlbiBwcm9jZXNzZWQ/ICovCisjZW5kaWYgLyogSUtTRENPTkYgKi8KKworaW50IHNydmNkbXNn ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFtTZXJ2ZXJdIENEIG1lc3NhZ2UgKi8KK2No YXIgKiBjZG1zZ2ZpbGVbOF0gPSB7IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCB9OworY2hhciAqIGNkbXNnc3RyID0gTlVMTDsKK2NoYXIgKiBja2NkcGF0aCA9IE5VTEw7 CisKKyNpZmRlZiBOTENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0LWZpbGUg bGluZSB0ZXJtaW5hdG9yICovCitDSEFSIGZlb2wgPSBOTENIQVI7CisjZWxzZQorQ0hBUiBmZW9s ID0gMDsKKyNlbmRpZiAvKiBOTENIQVIgKi8KKworaW50IGZibGtzaXogPSBEQkxLU0laOyAgICAg ICAgICAvKiBGaWxlIGJsb2Nrc2l6ZSAqLworaW50IGZyZWNsID0gRExSRUNMOyAgICAgICAgICAg ICAvKiBGaWxlIHJlY29yZCBsZW5ndGggKi8KK2ludCBmcmVjZm0gPSBYWUZGX1M7ICAgICAgICAg ICAgLyogRmlsZSByZWNvcmQgZm9ybWF0IChkZWZhdWx0ID0gc3RyZWFtKSAqLworaW50IGZvcmcg PSBYWUZPX1M7ICAgICAgICAgICAgICAvKiBGaWxlIG9yZ2FuaXphdGlvbiAoc2VxdWVudGlhbCkg Ki8KK2ludCBmY2N0cmwgPSBYWUZQX047ICAgICAgICAgICAgLyogRmlsZSBjYXJyaWFnZSBjb250 cm9sIChjdHJsIGNoYXJzKSAqLworaW50IGZpbGVjYXNlID0gRklMRUNBU0U7ICAgICAgICAvKiBD YXNlIG1hdHRlcnMgaW4gZmlsZW5hbWVzICovCitpbnQgc3RhdGhhY2sgPSAxOyAgICAgICAgICAg ICAgIC8qIEZhc3QgZGlyZWN0b3J5IGxvb2t1cHMgYnkgZGVmYXVsdCAqLworCitjaGFyIHVpZGJ1 ZltVSURCVUZMRU5dID0geyBOVUwsIE5VTCB9OyAgLyogVXNlciBJRCBidWZmZXIgKi8KK2ludCBj ZmlsZWYgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcHBsaWNhdGlvbiAoImtlcmJh bmciKSBmaWxlIGZsYWcgKi8KK2NoYXIgY21kZmlsW0NLTUFYUEFUSCArIDFdID0geyBOVUwsIE5V TCB9OyAvKiBBcHBsaWNhdGlvbiBmaWxlIG5hbWUgKi8KK2ludCBoYXZldXJsID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBVUkwgZ2l2ZW4gb24gY29tbWFuZCBsaW5lICovCisKKyNpZm5k ZWYgTk9YRkVSCisvKiBNdWx0aS1wcm90b2NvbCBzdXBwb3J0ICovCisKK3N0cnVjdCBja19wIHB0 YWJbTlBST1RPU10gPSB7ICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBLZXJtaXQgcGFydCAu Li4gKi8KKyAgeyAiS2VybWl0IiwKKyAgICBEUlBTSVosICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZWNlaXZlIHBhY2tldCBzaXplICovCisgICAgRFNQU0laLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2VuZCBwYWNrZXQgc2l6ZSAqLworICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQtcGFja2V0LXNpemUtc2V0IGZsYWcgKi8KKyAg ICBERldTSVosICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSAqLwor CisjaWZkZWYgTkVXREVGQVVMVFMKKyAgICBQWF9DQVUsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb250cm9sIGNoYXIgdW5wcmVmaXhpbmcuLi4gKi8KKyNlbHNlCisgICAgUFhfQUxM LAorI2VuZGlmIC8qIE5FV0RFRkFVTFRTICovCisKKyNpZmRlZiBWTVMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24gKi8KKyAg ICBYWUZYX1gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRVBMQUNFIGZvciBWQVgv Vk1TICovCisjZWxzZQorICAgIFhZRlhfQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEJBQ0tVUCBmb3IgZXZlcnlib2R5IGVsc2UgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVm IE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZpbGUgbmFtZSBj b252ZXJzaW9uICovCisgICAgWFlGTl9MLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGl0ZXJhbCBmb3IgT1MyICovCisjZWxzZQorICAgIFhZRk5fQywgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENvbnZlcnRlZCBmb3Igb3RoZXJzICovCisjZW5kaWYgLyogT1MyICovCisK KyAgICBQQVRIX09GRiwgICAgICAgICAgICAgICAgICAgLyogU2VuZCBwYXRobmFtZXMgT0ZGICov CisgICAgUEFUSF9BVVRPLCAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgcGF0aG5hbWVzIEFV VE8gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogSG9zdCByZWNlaXZlIGlu aXRpYXRpb24gc3RyaW5nIChiaW5hcnkpICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAg ICAgIC8qIEhvc3QgcmVjZWl2ZSBpbml0aWF0aW9uIHN0cmluZyAodGV4dCkgICAqLworICAgIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3N0IHNlcnZlciBzdHJpbmcgKi8KKyAgICBO VUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9jb2wgc2VuZCBjb21t YW5kIChiaW5hcnkpICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVy bmFsIHByb3RvY29sIHNlbmQgY29tbWFuZCAodGV4dCkgICAqLworICAgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBwcm90b2NvbCByZWNlaXZlIGNvbW1hbmQgKGJpbikg Ki8KKyAgICBOVUxMIH0gICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9jb2wg cmVjZWl2ZSBjb21tYW5kICh0eHQpICovCisjaWZkZWYgQ0tfWFlaCissCit7IlhNT0RFTSIsICAg IDEyOCwxMjgsLTEsLTEsICAgMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTH0sCit7IlhNT0RFTS1DUkMiLDEyOCwxMjgsLTEsLTEsICAtMSwtMSwtMSwwLDAsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCit7IllNT0RFTSIsICAgLTEsIC0xLC0x LC0xLCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0s Cit7IllNT0RFTS1nIiwgLTEsIC0xLC0xLC0xLCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCit7IlpNT0RFTSIsICAgLTEsIC0xLC0xLC0xLFBYX1dJ TCwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH0sCit7Ik90aGVy IiwgICAgLTEsIC0xLC0xLC0xLCAgICAtMSwtMSwtMSwwLDAsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTH0KKyNlbmRpZiAvKiBDS19YWVogKi8KK307CisKKy8qIERlY2xhcmF0aW9u cyBmb3IgU2VuZC1Jbml0IFBhcmFtZXRlcnMgKi8KKworaW50IHNwc2l6ID0gRFNQU0laLCAgICAg ICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgcGFja2V0IHNpemUgdG8gc2VuZCAqLworICAgIHNw bWF4ID0gRFNQU0laLCAgICAgICAgICAgICAgICAgICAgIC8qIEJpZ2dlc3QgcGFja2V0IHNpemUg d2UgY2FuIHNlbmQgKi8KKyAgICBsYXN0c3BtYXggPSBEU1BTSVosICAgICAgICAgICAgICAgICAv KiBTZW5kLXBhY2tldCBzaXplIGxhc3QgdXNlZCAqLworICAgIHNwc2l6ciA9IERTUFNJWiwgICAg ICAgICAgICAgICAgICAgIC8qIFNlbmQtcGFja2V0IHNpemUgcmVxdWVzdGVkICovCisgICAgc3Bz aXpmID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0byBvdmVycmlkZSBzaXpl IG5lZ290aWF0aW9uICovCisgICAgcnBzaXogPSBEUlBTSVosICAgICAgICAgICAgICAgICAgICAg LyogQmlnZ2VzdCB3ZSB3YW50IHRvIHJlY2VpdmUgKi8KKyAgICB1cnBzaXogPSBEUlBTSVosICAg ICAgICAgICAgICAgICAgICAvKiBVc2VyLXJlcXVlc3RlZCByZWNlaXZlIHBrdCBzaXplICovCisg ICAgbWF4cnBzID0gTUFYUlAsICAgICAgICAgICAgICAgICAgICAgLyogTWF4aW11bSBpbmNvbWlu ZyBsb25nIHBhY2tldCBzaXplICovCisgICAgbWF4c3BzID0gTUFYU1AsICAgICAgICAgICAgICAg ICAgICAgLyogTWF4aW11bSBvdXRib3VuZCBsLnAuIHNpemUgKi8KKyAgICBtYXh0cnkgPSBNQVhU UlksICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIHJldHJpZXMgcGVyIHBhY2tldCAqLwor ICAgIHdzbG90cyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBzaXplIGN1 cnJlbnRseSBpbiB1c2UgKi8KKyAgICB3c2xvdHIgPSBERldTSVosICAgICAgICAgICAgICAgICAg ICAvKiBXaW5kb3cgc2l6ZSBmcm9tIFNFVCBXSU5ET1cgKi8KKyAgICB3c2xvdG4gPSAxLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgc2l6ZSBuZWdvdGlhdGVkIGluIFMtcGt0ICov CisgICAgdGltZW91dHMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHN0YXRpc3Rp Y3MgcmVwb3J0aW5nICovCisgICAgc3BhY2tldHMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg LyogIC4uLiAqLworICAgIHJwYWNrZXRzID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qICAu Li4gKi8KKyAgICByZXRyYW5zID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICov CisgICAgY3J1bmNoZWQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAg IHdtYXggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KKyAgICB3Y3Vy ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCisgICAgc3J2aWRsID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGlkbGUgdGltZW91dCAqLworICAg IHNydmRpcyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBmaWxlIHhmZXIg ZGlzcGxheSAqLworICAgIHNydnRpbSA9IERTUlZUSU0sICAgICAgICAgICAgICAgICAgIC8qIFNl cnZlciBjb21tYW5kIHdhaXQgdGltZW91dCAqLworICAgIHNydnBpbmcgPSAxLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNlcnZlciBrZWVwYWxpdmUgKi8KKy8qCisgIHRpbWludCBpcyB0aGUg dGltZW91dCBpbnRlcnZhbCBJIHVzZSB3aGVuIHdhaXRpbmcgZm9yIGEgcGFja2V0LgorICBwa3R0 aW0gaXMgdGhlIFNFVCBSRUNFSVZFIFRJTUVPVVQgdmFsdWUsIHNlbnQgdG8gdGhlIG90aGVyIEtl cm1pdC4KKyAgcnRpbW8gaXMgdGhlIFNFVCBTRU5EIFRJTUVPVVQgdmFsdWUuICBydGltbyBpcyB0 aGUgaW5pdGlhbCB2YWx1ZSBvZgorICB0aW1pbnQuICB0aW1pbnQgaXMgY2hhbmdlZCBieSB0aGUg dmFsdWUgaW4gdGhlIGluY29taW5nIG5lZ290aWF0aW9uCisgIHBhY2tldCB1bmxlc3MgYSBTRVQg U0VORCBUSU1FT1VUIGNvbW1hbmQgd2FzIGdpdmVuLgorKi8KKyAgICB0aW1pbnQgPSBETVlUSU0s ICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0IGludGVydmFsIEkgdXNlICovCisgICAgcGt0 dGltID0gVVJUSU1FLCAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCBJIHdhbnQgeW91IHRv IHVzZSAqLworICAgIHJ0aW1vID0gRE1ZVElNLCAgICAgICAgICAgICAgICAgICAgIC8qIE5vcm1h bCBwYWNrZXQgd2FpdCB0aW1lb3V0ICovCisgICAgdGltZWYgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmxhZyB0byBvdmVycmlkZSB3aGF0IHlvdSBhc2sgKi8KKyNpZmRlZiBDS19U SU1FUlMKKyAgICBydHRmbGcgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZHlu YW1pYyByb3VuZC10cmlwIHRpbWVycyAqLworI2Vsc2UKKyAgICBydHRmbGcgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBVc2UgZml4ZWQgdGltZXIgKi8KKyNlbmRpZiAvKiBDS19USU1F UlMgKi8KKyAgICBtaW50aW1lID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBNaW5pbXVt IHRpbWVvdXQgKi8KKyAgICBtYXh0aW1lID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBN YXhpbXVtIHRpbWVvdXQgKi8KKworICAgIG5wYWQgPSBNWVBBRE4sICAgICAgICAgICAgICAgICAg ICAgIC8qIEhvdyBtdWNoIHBhZGRpbmcgdG8gc2VuZCAqLworICAgIG15cGFkbiA9IE1ZUEFETiwg ICAgICAgICAgICAgICAgICAgIC8qIEhvdyBtdWNoIHBhZGRpbmcgdG8gYXNrIGZvciAqLworICAg IGJjdHIgPSBERkJDVCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2NrIGNoZWNrIHR5cGUg cmVxdWVzdGVkICovCisgICAgYmN0dSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog QmxvY2sgY2hlY2sgdHlwZSB1c2VkICovCisgICAgYmN0bCA9IDEsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQmxvY2sgY2hlY2sgbGVuZ3RoICovCisgICAgYmN0ZiA9IDAsCQkJCS8qIEJs b2NrIGNoZWNrIHR5cGUgMyBmb3JjZWQgb24gYWxsICovCisgICAgY19zYXZlID0gLTEsICAgICAg ICAgICAgICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgc2F2aW5nIGFuZCByZXN0b3JpbmcgKi8K KyAgICBzc19zYXZlID0gLTEsICAgICAgICAgICAgICAgICAgICAgICAvKiBTbG93LXN0YXJ0IHNh dmluZyBhbmQgcmVzdG9yaW5nICovCisgICAgZWJxID0gIE1ZRUJRLCAgICAgICAgICAgICAgICAg ICAgICAgLyogOHRoIGJpdCBwcmVmaXggKi8KKyAgICBlYnFmbGcgPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA4dGgtYml0IHF1b3RpbmcgZmxhZyAqLworICAgIHJxZiA9IC0xLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdXNlZCBpbiA4YnEgbmVnb3RpYXRpb24gKi8K KyAgICBycSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlZCA4YnEg YmlkICovCisgICAgc3EgPSAnWScsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VudCA4 YnEgYmlkICovCisgICAgcnB0ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVw ZWF0IGNvdW50ICovCisgICAgcnB0cSA9IE1ZUlBUUSwgICAgICAgICAgICAgICAgICAgICAgLyog UmVwZWF0IHByZWZpeCAqLworICAgIHJwdGZsZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJlcGVhdCBwcm9jZXNzaW5nIGZsYWcgKi8KKyAgICBycHRlbmEgPSAxLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXBlYXQgcHJvY2Vzc2luZyBlbmFibGVkICovCisgICAgeGZyY2Fu ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgY2FuY2VsbGF0aW9uIGVu YWJsZWQgKi8KKyAgICB4ZnJpbnQgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFu c2ZlciBpbnRlcnJ1cHRpb24gZW5hYmxlZCAqLworICAgIHhmcmNociA9IDMsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGNhbmNlbCBjaGFyID0gQ3RybC1DICovCisgICAgeGZy bnVtID0gMywgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVlZCB0aHJlZSBvZiB0aGVtIGJ5 IGRlZmF1bHQgKi8KKyAgICBnX3hmcnhsYSA9IC0xOworICAgIGNoYXIgKiB4ZnJtc2cgPSBOVUxM OyAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZm9yIGYudC4gZGlzcGxheSBzY3JlZW4gKi8KKyNl bmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIE5PQ1NFVFMKK2ludCB4ZnJ4bGEgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uICovCisjZWxz ZQoraW50IHhmcnhsYSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZWQgb3Ig ZGlzYWJsZWQgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKK2ludCBoYXZlbGZzID0gMDsJCQkv KiBMYXJnZSBmaWxlIHN1cHBvcnQgYXZhaWxhYmxlICovCisKKyNpZm5kZWYgTk9YRkVSCitpbnQg ZXBrdGZsZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRS1QQUNLRVQgY29tbWFuZCBh Y3RpdmUgKi8KKworaW50IGNhcGFzICA9IDksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBv c2l0aW9uIG9mIENhcGFiaWxpdGllcyAqLworICAgIGxwY2FwYiA9IDIsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIExvbmcgUGFja2V0IGNhcGFiaWxpdHkgKi8KKyAgICBscGNhcHIgPSAxLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVkICovCisgICAgbHBjYXB1ID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQgKi8KKyAgICBzd2NhcGIgPSA0LCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTbGlkaW5nIFdpbmRvdyBjYXBhYmlsaXR5ICovCisgICAg c3djYXByID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHJlcXVlc3RlZCAoYWxsb3dl ZCkgKi8KKyAgICBzd2NhcHUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgdXNlZCAq LworICAgIGF0Y2FwYiA9IDgsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF0dHJpYnV0ZSBj YXBhYmlsaXR5ICovCisgICAgYXRjYXByID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyog IHJlcXVlc3RlZCAqLworICAgIGF0Y2FwdSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICB1c2VkICovCisgICAgcnNjYXBiID0gMTYsICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVT RU5EIGNhcGFiaWxpdHkgKi8KKyAgICByc2NhcHIgPSAxLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAgcmVxdWVzdGVkIGJ5IGRlZmF1bHQgKi8KKyAgICByc2NhcHUgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAgdXNlZCAqLworICAgIGxzY2FwYiA9IDMyLCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIExvY2tpbmcgU2hpZnQgY2FwYWJpbGl0eSAqLworICAgIGxzY2FwciA9IDEs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1ZXN0ZWQgYnkgZGVmYXVsdCAqLworICAg IGxzY2FwdSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB1c2VkICovCisKKy8qIEZs YWdzIGZvciB3aGV0aGVyIHRvIHVzZSBwYXJ0aWN1bGFyIGF0dHJpYnV0ZXMgKi8KKworaW50IGF0 ZW5jaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY29kaW5nIGluICovCisgICAg YXRlbmNvID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5jb2Rpbmcgb3V0ICovCisg ICAgYXRkYXRpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSBpbiAqLworICAg IGF0ZGF0byA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGUgb3V0ICovCisgICAg YXRkaXNpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcG9zaXRpb24gaW4vb3V0 ICovCisgICAgYXRkaXNvID0gMSwKKyAgICBhdGxlbmkgPSAxLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBMZW5ndGggaW4vb3V0IChib3RoIGtpbmRzKSAqLworICAgIGF0bGVubyA9IDEsCisg ICAgYXRibGtpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmxvY2tzaXplIGluL291 dCAqLworICAgIGF0YmxrbyA9IDEsCisgICAgYXR0eXBpID0gMSwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmlsZSB0eXBlIGluL291dCAqLworICAgIGF0dHlwbyA9IDEsCisgICAgYXRzaWRp ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIElEIGluL291dCAqLworICAg IGF0c2lkbyA9IDEsCisgICAgYXRzeXNpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBT eXN0ZW0tZGVwZW5kZW50IHBhcmFtZXRlcnMgaW4vb3V0ICovCisgICAgYXRzeXNvID0gMTsKKwor aW50IGRpc3BvcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3Bvc2l0aW9uICov CisKKyNpZmRlZiBDS19QRVJNUworaW50IGF0bHByaSA9IDEsCisgICAgYXRscHJvID0gMSwKKyAg ICBhdGdwcmkgPSAxLAorICAgIGF0Z3BybyA9IDE7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKwor aW50IGF0ZnJtaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCBGb3JtYXQg aW4vb3V0ICovCisgICAgYXRmcm1vID0gMTsKKworI2lmZGVmIFNUUkFUVVMKK2ludCBhdGNyZWkg PSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDcmVhdG9yIElEIGluL291dCAqLworICAg IGF0Y3JlbyA9IDEsCisgICAgYXRhY3RpID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyog QWNjb3VudCBpbi9vdXQgKi8KKyAgICBhdGFjdG8gPSAxOworI2VuZGlmIC8qIFNUUkFUVVMgKi8K KworaW50IHNwcm1sZW4gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQvUmVjZWl2 ZSBwcm90b2NvbCBwYXJhbWV0ZXIgKi8KK2ludCBycHJtbGVuID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBzdHJpbmcgbGVuZ3RoIGxpbWl0cyAqLworaW50IHNlbmRpcGt0cyA9IDE7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgSSBwYWNrZXRzICovCisKK0NIQVIgcGFkY2ggPSBN WVBBREMsICAgICAgICAgICAgICAgICAgICAvKiBQYWRkaW5nIGNoYXJhY3RlciB0byBzZW5kICov CisgICAgbXlwYWRjID0gTVlQQURDLCAgICAgICAgICAgICAgICAgICAgLyogUGFkZGluZyBjaGFy YWN0ZXIgdG8gYXNrIGZvciAqLworICAgIHNlb2wgPSBNWUVPTCwgICAgICAgICAgICAgICAgICAg ICAgIC8qIEVuZC1PZi1MaW5lIGNoYXJhY3RlciB0byBzZW5kICovCisgICAgZW9sID0gTVlFT0ws ICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kLU9mLUxpbmUgY2hhcmFjdGVyIHRvIGxvb2sg Zm9yICovCisgICAgY3RscSA9IENUTFEsICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJv bCBwcmVmaXggaW4gaW5jb21pbmcgZGF0YSAqLworICAgIG15Y3RscSA9IENUTFEsICAgICAgICAg ICAgICAgICAgICAgIC8qIE91dGJvdW5kIGNvbnRyb2wgY2hhcmFjdGVyIHByZWZpeCAqLworICAg IG15cnB0cSA9IE1ZUlBUUTsgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdCBwcmVmaXggSSB3 YW50IHRvIHVzZSAqLworCitpbnQgcnB0bWluID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVwZWF0LWNvdW50IG1pbmltdW0gKi8KKworaW50IHVzZXBpcGVzID0gMCwgICAgICAgICAg ICAgICAgICAgICAgIC8qIFVzZWQgZm9yIHhmZXIgdG8vZnJvbSBwaXBlcyAqLworICAgIGdfdXNl cGlwZXMgPSAtMTsKKworY2hhciAqIGZpbGVmaWxlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8q IEZpbGUgY29udGFpbmluZyBsaXN0IG9mIGZpbGVuYW1lcyAqLworLyogQ0QgbWVzc2FnZSBmaWxl bmFtZSBsaXN0ICovCisKK2NoYXIgd2hvYXJldVsxNl0gPSB7IE5VTCwgTlVMIH07ICAgICAgICAv KiBTeXN0ZW0gSUQgb2Ygb3RoZXIgS2VybWl0ICovCitpbnQgc3lzaW5kZXggPSAtMTsgICAgICAg ICAgICAgICAgICAgICAgLyogYW5kIGluZGV4IHRvIGl0cyBzeXN0ZW0gSUQgc3RydWN0ICovCitp bnQgbXlpbmRleCAgPSAtMTsKK2ludCB3ZWFyZWFsaWtlID0gMDsgICAgICAgICAgICAgICAgICAg ICAvKiAyIEtlcm1pdHMgaGF2ZSBjb21wYXRpYmxlIHN5c2lkcyAqLworY2hhciAqIGNrc3lzaWQg PSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE15IHN5c3RlbSBJRCAqLworI2lmZGVmIFVOSVgK KyAgICAiVTEiCisjZWxzZQorI2lmZGVmIFZNUworICAgICJENyIKKyNlbHNlCisjaWZkZWYgT1NL CisgICAgIlVEIgorI2Vsc2UKKyNpZmRlZiBBTUlHQQorICAgICJMMyIKKyNlbHNlCisjaWZkZWYg TUFDCisgICAgIkEzIgorI2Vsc2UKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorICAgICJVTiIKKyNl bHNlIC8qIE5UICovCisgICAgIlVPIgorI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBPUzIgKi8K KyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICJGMyIKKyNlbHNlCisjaWZkZWYgR0VNRE9TCisgICAg IksyIgorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisgICAgIk1WIgorI2Vsc2UKKyAgICAiIgorI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNlbmRpZiAvKiBkYXRhZ2Vu ZXJhbCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIEFN SUdBICovCisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5J WCAqLworICAgIDsKKworaW50IG9vcHRzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE8tUGFja2V0IE9wdGlvbnMgKi8KK2ludCBvbW9kZSA9IC0xOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBPLVBhY2tldCBUcmFuc2ZlciBNb2RlICovCitpbnQgb25hbWUgPSAtMTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgRmlsZW5hbWUgT3B0aW9ucyAqLworaW50IG9w YXRoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IFBhdGhuYW1lIE9w dGlvbnMgKi8KKworc3RydWN0IHphdHRyIGlhdHRyOyAgICAgICAgICAgICAgICAgICAgIC8qIElu Y29taW5nIGZpbGUgYXR0cmlidXRlcyAqLworCisjaWZkZWYgVk1TCisvKiBWTVMgbGFiZWxlZCBm aWxlIGRlZmF1bHQgb3B0aW9ucyAtIG5hbWUgb25seS4gKi8KK2ludCBsZl9vcHRzID0gTEJMX05B TTsKKyNlbHNlCisjaWZkZWYgT1MyCisvKiBPUy8yIGxhYmVsZWQgZmlsZSBkZWZhdWx0IG9wdGlv bnMsIGFsbCBhdHRyaWJ1dGVzIGJ1dCBhcmNoaXZlZC4gKi8KK3Vuc2lnbmVkIGxvbmcgaW50IGxm X29wdHMgPSBMQkxfRVhUfExCTF9ISUR8TEJMX1JPfExCTF9TWVM7CisjZWxzZQoraW50IGxmX29w dHMgPSAwOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFZNUyAqLworCisvKiBQYWNrZXQt cmVsYXRlZCB2YXJpYWJsZXMgKi8KKworaW50IHBrdG51bSA9IDAsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEN1cnJlbnQgcGFja2V0IG51bWJlciAqLworICAgIHNuZHR5cCA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgb2YgcGFja2V0IGp1c3Qgc2VudCAqLworICAgIHJj dnR5cCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgb2YgcGFja2V0IGp1c3Qg cmVjZWl2ZWQgKi8KKyAgICByc24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZWNlaXZlZCBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyICovCisgICAgcmxuLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZWQgcGFja2V0IGxlbmd0aCAqLworICAgIHNpemUs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgc2l6ZSBvZiBvdXRwdXQg cGt0IGRhdGEgKi8KKyAgICBvc2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmV2aW91cyBvdXRwdXQgcGFja2V0IGRhdGEgc2l6ZSAqLworICAgIG1heHNpemUsICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1heCBzaXplIGZvciBidWlsZGluZyBkYXRhIGZpZWxkICov CisgICAgc3BrdGwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIHBhY2tl dCBiZWluZyBzZW50ICovCisgICAgcnBrdGwgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTGVuZ3RoIG9mIHBhY2tldCBqdXN0IHJlY2VpdmVkICovCisgICAgcGt0cGF1cyA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJwYWNrZXQgcGF1c2UgaW50ZXJ2YWwsIG1zZWMg Ki8KKyAgICBycHJpbnRmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUgUFJJ TlQgZmxhZyAqLworICAgIHJtYWlsZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1B SUwgZmxhZyAqLworICAgIHhmZXJzdGF0ID0gLTEsICAgICAgICAgICAgICAgICAgICAgIC8qIFN0 YXR1cyBvZiBsYXN0IHRyYW5zYWN0aW9uICovCisgICAgZmlsZXN0YXR1cyA9IDA7ICAgICAgICAg ICAgICAgICAgICAgLyogU3RhdHVzIG9mIGxhc3QgZmlsZSB0cmFuc2ZlciAqLworCitDSEFSIHBr dG1zZ2J1ZltQS1RNU0dMRU4rMV07CitDSEFSICplcGt0bXNnID0gcGt0bXNnYnVmOworCisjaWZk ZWYgcGRwMTEKK2ludCBzcnZjbWRsZW4gPSBNQVhSUDsgICAgICAgICAgICAgICAgICAvKiBzcnZj bWQgYnVmZmVyIGxlbmd0aCAqLworI2Vsc2UKKyNpZmRlZiBEWU5BTUlDCitpbnQgc3J2Y21kbGVu ID0gTUFYUlA7CisjZWxzZQoraW50IHNydmNtZGxlbiA9IDA7CisjZW5kaWYgLyogRFlOQU1JQyAq LworI2VuZGlmIC8qIHBkcDExICovCisKK0NIQVIKKyNpZmRlZiBwZHAxMQorICAgIHNydmNtZGJ1 ZltNQVhSUCs0XSwKKyAgICAqc3J2Y21kID0gc3J2Y21kYnVmLAorI2Vsc2UKKyNpZmRlZiBEWU5B TUlDCisgICAgKnNydmNtZCA9IChDSEFSICopMCwgICAgICAgICAgICAgICAgLyogV2hlcmUgdG8g ZGVjb2RlIHNlcnZlciBjb21tYW5kICovCisjZWxzZQorICAgIHNydmNtZGJ1ZltNQVhSUCs0XSwK KyAgICAqc3J2Y21kID0gc3J2Y21kYnVmLAorI2VuZGlmIC8qIERZTkFNSUMgKi8KKyNlbmRpZiAv KiBwZHAxMSAqLworICAgIHBhZGJ1Zls5Nl0sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1 ZmZlciBmb3Igc2VuZC1wYWRkaW5nICovCisgICAgKnJlY3BrdCwKKyAgICAqcmRhdGFwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHJlY2VpdmVkIHBhY2tldCBkYXRh ICovCisgICAgKmRhdGEgPSAoQ0hBUiAqKTAsICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0 byBzZW5kLXBhY2tldCBkYXRhICovCisgICAgKnNydnB0ciwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUG9pbnRlciB0byBzcnZjbWQgKi8KKyAgICBteXN0Y2ggPSBTT0gsICAgICAgICAg ICAgICAgICAgICAgICAvKiBPdXRib3VuZCBwYWNrZXQtc3RhcnQgY2hhcmFjdGVyICovCisgICAg c3RjaHIgPSBTT0g7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jb21pbmcgcGFja2V0LXN0 YXJ0IGNoYXJhY3RlciAqLworCisvKiBGaWxlLXJlbGF0ZWQgdmFyaWFibGVzICovCisKKyNpZm5k ZWYgTk9NU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aXBsZSBTRU5EICovCitz dHJ1Y3QgZmlsZWxpc3QgKiBmaWxlaGVhZCA9IE5VTEw7ICAgICAgLyogU0VORCBsaXN0ICovCitz dHJ1Y3QgZmlsZWxpc3QgKiBmaWxldGFpbCA9IE5VTEw7CitzdHJ1Y3QgZmlsZWxpc3QgKiBmaWxl bmV4dCA9IE5VTEw7CitpbnQgYWRkbGlzdCA9IDA7CisjZW5kaWYgLyogTk9NU0VORCAqLworCitj aGFyIGZpbG5hbVtDS01BWFBBVEggKyAxXTsgICAgICAgICAgICAgLyogTmFtZSBvZiBjdXJyZW50 IGZpbGUuICovCitjaGFyIG9maWxuYW1bQ0tNQVhQQVRIICsgMV07ICAgICAgICAgICAgLyogT3Jp Z2luYWwgbmFtZS4gKi8KKworaW50IHBpcGVzZW5kID0gMDsgICAgICAgICAgICAgICAgICAgICAg IC8qIE5vbnplcm8gaWYgc2VuZGluZyBmcm9tIHBpcGUgKi8KKyNpZmRlZiBQSVBFU0VORAorY2hh ciAqIHNuZGZpbHRlciA9IE5VTEw7ICAgICAgICAgICAgICAgIC8qIFNlbmQgYW5kIHJlY2VpdmUg ZmlsdGVycyAqLworY2hhciAqIHJjdmZpbHRlciA9IE5VTEw7CisjZW5kaWYgLyogUElQRVNFTkQg Ki8KKworY2hhciAqKiBzbmRhcnJheSA9IE5VTEw7ICAgICAgICAgICAgICAgIC8qIFNFTkQgL0FS UkFZIHBvaW50ZXIgYW5kIHJhbmdlICovCisjaWZuZGVmIE5PU1BMCitpbnQgc25keGxvID0gLTEs IHNuZHhoaSA9IC0xLCBzbmR4aW4gPSAtMTsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZuZGVmIE5PU0VSVkVSCitpbnQgbmdldHBhdGggPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgLyogR0VUIHNlYXJjaCBwYXRoICovCitpbnQgZnJvbWdldHBhdGggPSAw OworY2hhciAqIGdldHBhdGhbTUFYR0VUUEFUSF07CitjaGFyICogeF91c2VyID0gTlVMTDsgICAg ICAgICAgICAgICAgICAgLyogU2VydmVyIGxvZ2luIGluZm9ybWF0aW9uICovCitjaGFyICogeF9w YXNzd2QgPSBOVUxMOworY2hhciAqIHhfYWNjdCA9IE5VTEw7CisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KKworaW50IHhfbG9naW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvZ2luIHJl cXVpcmVkICovCitpbnQgeF9sb2dnZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVXNl ciBpcyBsb2dnZWQgaW4gKi8KKworZXh0ZXJuIGludCB0aW1lbGltaXQ7CisKKyNpZmRlZiBDS19M T0dJTgoraW50IGxvZ2ludGltbyA9IDMwMDsgICAgICAgICAgICAgICAgICAgIC8qIExvZ2luIHRp bWVvdXQgKi8KK2NoYXIgKiB1c2VyZmlsZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBGb3Ji aWRkZW4gdXNlciBmaWxlICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNpZmRlZiBJS1NECitj aGFyICogYW5vbmZpbGUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogQW5vbnltb3VzIGxvZ2lu IGluaXQgZmlsZSAqLworY2hhciAqIGFub25yb290ID0gTlVMTDsgICAgICAgICAgICAgICAgIC8q IEFub255bW91cyBmaWxlLXN5c3RlbSByb290ICovCitpbnQgaWtzX3RpbW8gID0gMzAwOyAgICAg ICAgICAgICAgICAgICAgLyogNSBtaW51dGVzIGlkbGUgdGltbyAqLworaW50IGlrc19yZXRyeSA9 IDM7ICAgICAgICAgICAgICAgICAgICAgIC8qIDMgYXR0ZW1wdHMgYXQgbG9naW4gKi8KKyNlbmRp ZiAvKiBJS1NEICovCisKKyNpZmRlZiBDS1NZU0xPRworZXh0ZXJuIFZPSUQgenN5c2xvZygpOwor ZXh0ZXJuIGludCBja3hsb2dnaW5nLCBja3hzeXNsb2c7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KworQ0tfT0ZGX1QgZnNpemUgPSAoQ0tfT0ZGX1QpMCwJCS8qIFNpemUgb2YgY3VycmVudCBmaWxl ICovCisgc2VuZHN0YXJ0ID0gKENLX09GRl9UKTAsCQkvKiBTRU5EIHN0YXJ0IHBvc2l0aW9uICov CisgY2FsaWJyYXRlID0gKENLX09GRl9UKTA7CQkvKiBOb256ZXJvIGlmIGNhbGlicmF0aW9uIHJ1 biAqLworCitpbnQgbnp4b3B0cyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3B0aW9u cyBmb3Igbnp4cGFuZCgpICovCitpbnQgbmZpbHMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTnVtYmVyIG9mIGZpbGVzIGluIGZpbGUgZ3JvdXAgKi8KK2ludCB3aWxkZW5hID0gMTsJ CQkvKiBXaWxkY2FyZCBleHBhbnNpb24gZW5hYmxlZCAqLworI2lmZGVmIFVOSVgKK2ludCB3aWxk eHBhbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBXaG8gZXhwYW5kcyB3aWxkY2FyZHMs IDA9S2VybWl0Li4gKi8KKyNlbHNlIC8qIFVOSVggKi8KKyNpZmRlZiBTVFJBVFVTCitpbnQgd2ls ZHhwYW5kID0gMTsJCQkvKiAxPVNoZWxsLiAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRp ZiAvKiBVTklYICovCisjaWZkZWYgVU5JWE9ST1NLCitpbnQgbWF0Y2hkb3QgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBtYXRjaCBkb3QgZmlsZXMgKi8KKyNlbHNlCitp bnQgbWF0Y2hkb3QgPSAxOworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworaW50IG1hdGNoZmlmbyA9 IDA7CQkJLyogV2hldGhlciB0byBtYXRjaCBGSUZPICJmaWxlcyIgKi8KK2ludCBjbGZpbHMgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBjb21tYW5kLWxpbmUgZmlsZXMg Ki8KK2ludCBzdGF5ZmxnID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciAi c3RheSIsIGkuZS4gIi1TIiAqLworaW50IHhmaW5pc2ggPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZsYWcgZm9yIEZJTklTSCA9IEVYSVQgKi8KK2xvbmcgenR1c2VjID0gLTFMOyAgICAg ICAgICAgICAgICAgICAgICAvKiBVc2VkIHdpdGggenRpbWUoKSAqLworbG9uZyB6dG1zZWMgPSAt MUw7ICAgICAgICAgICAgICAgICAgICAgIC8qIERpdHRvICovCisKKy8qIENvbW11bmljYXRpb24g ZGV2aWNlIC8gY29ubmVjdGlvbiB2YXJpYWJsZXMgKi8KKworY2hhciB0dG5hbWVbVFROQU1MRU4r MV07ICAgICAgICAgICAgICAgIC8qIE5hbWUgb2YgY29tbXVuaWNhdGlvbiBkZXZpY2UgKi8KKwor I2lmZGVmIE1BQworaW50IGNvbm5lY3RlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRy dWUgaWYgY29ubmVjdGVkICovCitpbnQgc3RhcnRjb25uZWN0ZWQ7ICAgICAgICAgICAgICAgICAg ICAgLyogaW5pdGlhbCBzdGF0ZSBvZiBjb25uZWN0ZWQgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKwor bG9uZyBzcGVlZCA9IC0xTDsgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW11bmljYXRpb24g ZGV2aWNlIHNwZWVkICovCitpbnQgd2FzY2xvc2VkID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogQ29ubmVjdGlvbiB3YXMganVzdCBjbG9zZWQgKi8KK2ludCB3aHljbG9zZWQgPSBXQ19SRU1P OyAgICAgICAgICAgICAgICAvKiB3aHkgaXQgd2FzIGNsb3NlZCAqLworaW50IHFueHBvcnRsb2Nr ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFFOWCBwb3J0IGxvY2tpbmcgb24vb2ZmICovCisK KyNpZm5kZWYgQ0xTT05ESVNDCisjZGVmaW5lIENMU09ORElTQyAwCisjZW5kaWYgLyogQ0xTT05E SVNDICovCisKK2ludCBjeGZsb3dbQ1hUX01BWCsxXTsgICAgICAgICAgICAgICAgICAvKiBTZWUg aW5pdGZsb3coKSAqLworCisjaWZuZGVmIE5PU0hPVworY2hhciAqIGZsb25hbWVbXSA9IHsgICAg ICAgICAgICAgICAgICAgIC8qIEZsb3cgY29udHJvbCBuYW1lcyAqLworICAibm9uZSIsICJ4b24v eG9mZiIsICJydHMvY3RzIiwgImR0ci9jZCIsICJldHgvYWNrIiwgInN0cmluZyIsCisgICJ4eHgx IiwgInh4eDIiLCAiZHRyL2N0cyIsICJrZWVwIiwgImF1dG8iCit9OworaW50IG5mbG9uYW1lID0g KHNpemVvZihmbG9uYW1lKSAvIHNpemVvZihjaGFyICopKTsKKworY2hhciAqIGN4bmFtZVtdID0g eyAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gdHlwZSBuYW1lcyAqLworICAicmVt b3RlIiwgImRpcmVjdC1zZXJpYWwiLCAibW9kZW0iLCAidGNwL2lwIiwgInguMjUiLCAiZGVjbmV0 IiwKKyAgImxhdCIsICJuZXRiaW9zIiwgIm5hbWVkLXBpcGUiLCAic3NoIiwgInBpcGUiCit9Owor aW50IG5jeG5hbWUgPSAoc2l6ZW9mKGN4bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7CisjZW5kaWYg LyogTk9TSE9XICovCisKK2ludCBwYXJpdHkgPSBERUZQQVIsICAgICAgICAgICAgICAgICAgICAv KiBQYXJpdHkgc3BlY2lmaWVkLCAwLCdlJywnbycsZXRjICovCisgICAgaHdwYXJpdHkgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgLyogSGFyZHdhcmUgcGFyaXR5IGZvciBzZXJpYWwgcG9ydCAq LworICAgIHN0b3BiaXRzID0gLTEsICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3AgYml0cyBm b3Igc2VyaWFsIHBvcnQgKi8KKyAgICBjbHNvbmRpc2MgPSBDTFNPTkRJU0MsICAgICAgICAgICAg ICAvKiBTZXJpYWwgcG9ydCBjbG9zZSBvbiBkaXNjb25uZWN0ICovCisgICAgYXV0b3BhciA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0b21hdGljIHBhcml0eSBjaGFuZ2UgZmxhZyAq LworICAgIHNvc2kgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNoaWZ0LUluL091 dCBmbGFnICovCisgICAgZmxvdyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxv dyBjb250cm9sIChzZWUgaW5pdGZsb3coKSkgKi8KKyAgICBhdXRvZmxvdyA9IDEsICAgICAgICAg ICAgICAgICAgICAgICAvKiBBdXRvbWF0aWMgZmxvdyBjb250cm9sICovCisgICAgdHVybiA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGluZSB0dXJuYXJvdW5kIGhhbmRzaGFrZSBm bGFnICovCisgICAgdHVybmNoID0gWE9OLCAgICAgICAgICAgICAgICAgICAgICAgLyogTGluZSB0 dXJuYXJvdW5kIGNoYXJhY3RlciAqLworICAgIGR1cGxleCA9IDAsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIER1cGxleCwgZnVsbCBieSBkZWZhdWx0ICovCisgICAgZXNjYXBlID0gREZFU0Ms ICAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBlIGNoYXJhY3RlciBmb3IgY29ubmVjdCAqLwor ICAgIGNrZGVsYXkgPSBEREVMQVksICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgZGVsYXkg YmVmb3JlIHNlbmRpbmcgKi8KKyAgICB0bmxtID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUZXJtaW5hbCBuZXdsaW5lIG1vZGUgKi8KKworLyogTmV0d29ya3MgZm9yIFNFVCBIT1NU ICovCisKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBNWUhPU1RMIDEwMjQKKyNlbHNlCisjZGVm aW5lIE1ZSE9TVEwgMTAwCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKworY2hhciBteWhvc3RbTVlI T1NUTF07ICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGhvc3QgbmFtZSAqLworaW50IG5ldHdv cmsgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgdnMgc2VyaWFsIGNvbm5l Y3Rpb24gKi8KK2ludCBpbnNlcnZlciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSdW5u aW5nIGFzIGFuIEludGVybmV0IHNlcnZlciAqLworaW50IGlzZ3Vlc3QgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFVzZXIgaXMgYW5vbnltb3VzICovCitjaGFyICogY2xpZW50aG9zdCA9 IE5VTEw7ICAgICAgICAgICAgICAgLyogUGVlciBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLworaW50 IHRjcF9pbmNvbWluZyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEluY29taW5nIFRDUCBjb25u ZWN0aW9uPyAqLworCisjaWZkZWYgTkVUQ09OTgorI2lmZGVmIFRDUFNPQ0tFVAoraW50IG5ldHR5 cGUgPSBORVRfVENQQjsgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbmV0d29yayB0eXBlICov CisjZWxzZQorI2lmZGVmIFNVTlgyNQoraW50IG5ldHR5cGUgPSBORVRfU1gyNTsKKyNlbHNlCisj aWZkZWYgSUJNWDI1CitpbnQgbmV0dHlwZSA9IE5FVF9JWDI1OworI2Vsc2UKKyNpZmRlZiBIUFgy NQoraW50IG5ldHR5cGUgPSBORVRfSFgyNTsKKyNlbHNlCisjaWZkZWYgU1RSQVRVU1gyNQoraW50 IG5ldHR5cGUgPSBORVRfVlgyNTsKKyNlbHNlCisjaWZkZWYgREVDTkVUCitpbnQgbmV0dHlwZSA9 IE5FVF9ERUM7CisjZWxzZQorI2lmZGVmIFNVUEVSTEFUCitpbnQgbmV0dHlwZSA9IE5FVF9TTEFU OworI2Vsc2UKK2ludCBuZXR0eXBlID0gTkVUX05PTkU7CisjZW5kaWYgLyogU1VQRVJMQVQgKi8K KyNlbmRpZiAvKiBERUNORVQgKi8KKyNlbmRpZiAvKiBTVFJBVFVTWDI1ICovCisjZW5kaWYgLyog SFBYMjUgKi8KKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNlbmRpZiAvKiBTVU5YMjUgKi8KKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbHNlICAvKiBORVRDT05OICovCitpbnQgbmV0dHlwZSA9IE5F VF9OT05FOworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmZGVmIEFOWVgyNQoraW50IHJldmNh bGwgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFguMjUgcmV2ZXJzZSBjYWxsIG5vdCBz ZWxlY3RlZCAqLworaW50IGNsb3NnciAgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFgu MjUgY2xvc2VkIHVzZXIgZ3JvdXAgICovCitpbnQgY3VkYXRhID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0YSBub3Qgc3BlY2lmaWVkICovCitjaGFyIHVk YXRhW01BWENVREFUQV07ICAgICAgICAgICAgICAgICAgLyogWC4yNSBjYWxsIHVzZXIgZGF0YSAq LworCisjaWZkZWYgSUJNWDI1CisvKgorICBJIHdhcyB1bmFibGUgdG8gZmluZCBhbnkgcHJlLWRl ZmluZWQgTUFYIHZhbHVlcyBmb3IgeDI1IGFkZHJlc3NlcyAtIHRoZQorICBhZGRyZXNzZXMgdGhh dCBJJ3ZlIHNlZW4gaGF2ZSBiZWVuIGFyb3VuZCAxMC0xMiBjaGFyYWN0ZXJzIDMyIGlzIHByb2Jh Ymx5CisgIGVub3VnaCwgNjQgaXMgaG9wZWZ1bGx5IHNhZmUgZm9yIGV2ZXJ5b25lLgorKi8KKyAg ICB4MjVhZGRyX3QgbG9jYWxfbnVhID0geydcMCd9OyAgICAgICAvKiBsb2NhbCB4LjI1IGFkZHJl c3MgKi8KKyAgICB4MjVhZGRyX3QgcmVtb3RlX251YSA9IHsnXDAnfTsgICAgICAvKiByZW1vdGUg eC4yNSBhZGRyZXNzICovCisgICAgY2hhciB4MjVuYW1lWzMyXSA9IHsnXDAnfTsgICAgICAgICAg LyogeDI1IGRldmljZSBuYW1lLCBzeDI1YTAgb3Igc3gyNWExICovCisgICAgY2hhciB4MjVkZXZb NjRdID0gICIvZGV2L3gyNXBrdCI7ICAgLyogeDI1IGRldmljZSBpbiAvZGV2ICovCisgICAgaW50 IHgyNXBvcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogcG9ydCB1c2VkIGZvciBYLjI1IC0g QUlYIG9ubHkgKi8KKyNlbmRpZiAvKiBJQk1YMjUgKi8KKworI2lmbmRlZiBJQk1YMjUKKy8qCisg IFRoaXMgY29uZGl0aW9uIGlzIHVucmVsYXRlZCB0byB0aGUgYWJvdmUgSUJNWDI1IGNvbmRpdGlv bi4KKyAgSUJNIFguMjUgZG9lc24ndCBoYXZlIFBBRCBzdXBwb3J0LgorKi8KKyAgICBDSEFSIHBh ZHBhcm1zW01BWFBBRFBBUk1TKzFdOyAvKiBYLjMgcGFyYW1ldGVycyAqLworI2VuZGlmIC8qIElC TVgyNSAqLworI2VuZGlmIC8qIEFOWVgyNSAqLworCisvKiBPdGhlciBpdGVtcyAqLworCitpbnQg aXNpbnRlcnJ1cHRlZCA9IDA7ICAgICAgICAgICAgICAgICAgLyogVXNlZCBpbiBleGNlcHRpb24g aGFuZGxpbmcgKi8KK2ludCB3aGF0ID0gV19JTklUOyAgICAgICAgICAgICAgICAgICAgICAvKiBX aGF0IEkgYW0gZG9pbmcgKi8KK2ludCBsYXN0eGZlciA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBMYXN0IHRyYW5zZmVyIChzZW5kIG9yIHJlY2VpdmUpICovCisKK2V4dGVybiBpbnQgbWRt dHlwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSAoL25ldHdvcmspIHR5cGUgKi8KKwor I2lmZGVmIE5UCitleHRlcm4gaW50IFN0YXJ0ZWRGcm9tRGlhbGVyOworI2lmZGVmIE5UU0lHCitl eHRlcm4gaW50IFRsc0luZGV4OworI2VuZGlmIC8qIE5UU0lHICovCisjaWZkZWYgTlRBU00KK3Vu c2lnbmVkIGxvbmcgRVNQVG9SZXN0b3JlOyAgICAgICAgICAgICAvKiBEaXR0byAqLworI2VuZGlm IC8qIE5UQVNNICovCisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVmIE9TMlBNCitpbnQgb3MycG0g PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiBQcmVzZW50YXRpb24gTWFuYWdl ciBmbGFnICovCisjZW5kaWYgLyogT1MyUE0gKi8KKworLyogVGVybWluYWwgc2NyZWVuIHNpemUs IGlmIGtub3duLCAtMSBtZWFucyB1bmtub3duLiAqLworCisjaWZkZWYgT1MyCisjaW5jbHVkZSAi Y2tvY29uLmgiCisjaWZkZWYgS1VJCitpbnQgdHRfcm93c1tWTlVNXSA9IHsyNCwyNCwyNSwxfTsg ICAgICAgLyogUm93cyAoaGVpZ2h0KSAqLworaW50IHR0X2NvbHNbVk5VTV0gPSB7ODAsODAsODAs ODB9OyAgICAgIC8qIENvbHVtbnMgKHdpZHRoKSAqLworaW50IGNtZF9yb3dzID0gMjQsIGNtZF9j b2xzID0gODA7ICAgICAgIC8qIENvbW1hbmQvY29uc29sZSBzY3JlZW4gZGltZW5zaW9ucyAqLwor I2Vsc2UgLyogS1VJICovCitpbnQgdHRfcm93c1tWTlVNXSA9IHstMSwyNCwyNSwxfTsgICAgICAg LyogUm93cyAoaGVpZ2h0KSAqLworaW50IHR0X2NvbHNbVk5VTV0gPSB7LTEsODAsODAsODB9OyAg ICAgIC8qIENvbHVtbnMgKHdpZHRoKSAqLworaW50IGNtZF9yb3dzID0gLTEsIGNtZF9jb2xzID0g LTE7ICAgICAgIC8qIENvbW1hbmQvY29uc29sZSBzY3JlZW4gZGltZW5zaW9ucyAqLworI2VuZGlm IC8qIEtVSSAqLworaW50IGs5NXN0ZGlvID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0 ZGlvIHRocmVhZHMgKi8KK2ludCB0dF9iZWxsID0gWFlCX0FVRCB8IFhZQl9TWVM7ICAgICAgICAv KiBCRUxMIEFVRElCTEUgKHN5c3RlbSBzb3VuZHMpICovCisjZWxzZSAvKiBPUzIgKi8KK2ludCB0 dF9yb3dzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSb3dzIChoZWlnaHQpICovCitp bnQgdHRfY29scyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29sdW1ucyAod2lkdGgp ICovCitpbnQgY21kX3Jvd3MgPSAyNCwgY21kX2NvbHMgPSA4MDsgICAgICAgLyogQ29tbWFuZC9j b25zb2xlIHNjcmVlbiBkaW1lbnNpb25zICovCitpbnQgdHRfYmVsbCA9IFhZQl9BVUQ7ICAgICAg ICAgICAgICAgICAgLyogQkVMTCBPTiAqLworI2VuZGlmIC8qIE9TMiAqLworCitpbnQgdHRfcHJp bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNwYXJlbnQgcHJpbnQgZGlzYWJs ZWQgKi8KK2ludCB0dF9lc2NhcGUgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBFc2NhcGlu ZyBiYWNrIGlzIGVuYWJsZWQgKi8KK2ludCB0dF9zY3JvbGwgPSAxOyAgICAgICAgICAgICAgICAg ICAgICAvKiBTY3JvbGxpbmcgb3BlcmF0aW9ucyBhcmUgZW5hYmxlZCAqLworCitpbnQgdG5fZXhp dCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBvbiBkaXNjb25uZWN0ICovCisK K2ludCBleGl0b25jbG9zZSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IG9uIGNsb3Nl ICovCitpbnQgZXhpdGhhbmd1cCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogSGFuZ3VwIG9u IGV4aXQgKi8KK2ludCBoYXZlbGluZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQg TElORSBvciBTRVQgSE9TVCBpbiBlZmZlY3QgKi8KK2ludCB0bGV2ZWwgPSAtMTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUYWtlLWZpbGUgY29tbWFuZCBsZXZlbCAqLworaW50IGhpbnRzID0g MTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gZ2l2ZSBoaW50cyAqLwor CisjaWZkZWYgTk9MT0NBTAoraW50IHJlbW9ubHkgPSAxOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJlbW90ZS1tb2RlLW9ubHkgYWR2aXNvcnkgKC1SKSAqLworaW50IG5vbG9jYWwgPSAxOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbW90ZS1vbmx5IHN0cmljdGx5IGVuZm9yY2VkICov CisjZWxzZQoraW50IHJlbW9ubHkgPSAwOworaW50IG5vbG9jYWwgPSAwOworaW50IGN4X3N0YXR1 cyA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1QgcmV0dXJuIHN0YXR1cyAqLwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBjbWRsdmw7 ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGV2ZWwgKi8KK2V4dGVybiBpbnQgbWFj bHZsOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyBpbnZvY2F0aW9uIGxldmVsICovCisj ZW5kaWYgLyogTk9TUEwgKi8KKworaW50IHByb3RvY29sICA9IFBST1RPX0s7ICAgICAgICAgICAg ICAgIC8qIEZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgPSBLZXJtaXQgKi8KKworI2lmZGVmIE5FV0RF RkFVTFRTCitpbnQgcHJlZml4aW5nID0gUFhfQ0FVOworI2Vsc2UKK2ludCBwcmVmaXhpbmcgPSBQ WF9BTEw7CisjZW5kaWYgLyogTkVXREVGQVVMVFMgKi8KKworZXh0ZXJuIHNob3J0IGN0bHBbXTsg ICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wtcHJlZml4IHRhYmxlICovCisKK2ludCBjYXJy aWVyID0gQ0FSX0FVVDsgICAgICAgICAgICAgICAgICAvKiBQYXkgYXR0ZW50aW9uIHRvIGNhcnJp ZXIgc2lnbmFsICovCitpbnQgY2R0aW1vID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog Q2FycmllciB3YWl0IHRpbWVvdXQgKi8KK2ludCB4aXRzdGEgPSBHT09EX0VYSVQ7ICAgICAgICAg ICAgICAgICAvKiBQcm9ncmFtIGV4aXQgc3RhdHVzICovCisKKyNpZmRlZiBWTVMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb24g Ki8KK2ludCBmbmNhY3QgPSBYWUZYX1g7ICAgICAgICAgICAgICAgICAgICAvKiBSRVBMQUNFIGZv ciBWTVMgKi8KKyNlbHNlCitpbnQgZm5jYWN0ID0gWFlGWF9COyAgICAgICAgICAgICAgICAgICAg LyogQkFDS1VQIGZvciBldmVyeWJvZHkgZWxzZSAqLworI2VuZGlmIC8qIFZNUyAqLworCitpbnQg Zm5jc2F2ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyAmIHJlc3Rv cmluZyB0aGUgYWJvdmUgKi8KK2ludCBiZ3NldCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBCQUNLR1JPVU5EIG1vZGUgc2V0IGV4cGxpY2l0bHkgKi8KKworaW50IGNtZGludCA9IDE7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdHMgYXJlIGFsbG93ZWQgKi8KKyNp ZmRlZiBVTklYCitpbnQgeHN1c3BlbmQgPSBERlNVU1A7CQkJLyogV2hldGhlciBTVVNQRU5EIGNv bW1hbmQsIGV0YywgKi8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBpcyB0byBiZSBhbGxvd2VkLiAqLworaW50IHhzdXNwZW5kID0gMDsKKyNlbmRpZiAvKiBVTklY ICovCisKKy8qIFN0YXRpc3RpY3MgdmFyaWFibGVzICovCisKK0NLX09GRl9UCisgICAgZmxjaSwg ICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlcnMgZnJvbSBsaW5lLCBjdXJyZW50IGZp bGUgKi8KKyAgICBmbGNvLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcnMgdG8gbGluZSwg Y3VycmVudCBmaWxlICAqLworICAgIHRsY2ksICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFy cyBmcm9tIGxpbmUgaW4gdHJhbnNhY3Rpb24gKi8KKyAgICB0bGNvLCAgICAgICAgICAgICAgICAg ICAgICAgLyogQ2hhcnMgdG8gbGluZSBpbiB0cmFuc2FjdGlvbiAqLworICAgIGZmYywgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDaGFycyB0by9mcm9tIGN1cnJlbnQgZmlsZSAqLworICAgIHRm YzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyB0by9mcm9tIGZpbGVzIGluIHRyYW5z YWN0aW9uICovCisKK2xvbmcgZmlsY250LCAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9m IGZpbGVzIGluIHRyYW5zYWN0aW9uICovCisgICAgZmlscmVqLCAgICAgICAgICAgICAgICAgICAg IC8qIE51bWJlciBvZiBmaWxlcyByZWplY3RlZCBpbiB0cmFuc2FjdGlvbiAqLworICAgIGNwcyA9 IDBMLCAgICAgICAgICAgICAgICAgICAvKiBDaGFycy9zZWMgbGFzdCB0cmFuc2ZlciAqLworICAg IHBlYWtjcHMgPSAwTCwgICAgICAgICAgICAgICAvKiBQZWFrIGNoYXJzL3NlYyBsYXN0IHRyYW5z ZmVyICovCisgICAgY2N1LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgY2hhcnMg dW5wcmVmaXhlZCBpbiB0cmFuc2FjdGlvbiAqLworICAgIGNjcCwgICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb250cm9sIGNoYXJzIHByZWZpeGVkIGluIHRyYW5zYWN0aW9uICovCisgICAgcnB0 bjsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdGVkIGNoYXJhY3RlcnMgY29tcHJlc3Nl ZCAqLworCitpbnQgdHNlY3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25k cyBmb3IgdHJhbnNhY3Rpb24gKi8KK2ludCBmc2VjcyA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQZXItZmlsZSB0aW1lciAqLworCisjaWZkZWYgR0ZUSU1FUgorQ0tGTE9BVAorICBm cGZzZWNzID0gMC4wLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsb2F0aW5nIHBvaW50IHBl ci1maWxlIHRpbWVyICovCisgIGZwdHNlY3MgPSAwLjA7ICAgICAgICAgICAgICAgICAgICAgICAg LyogYW5kIHBlci10cmFuc2FjdGlvbiB0aW1lciAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwor LyogRmxhZ3MgKi8KKworaW50IGRlYmxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERlYnVnIGxvZyBpcyBvcGVuICovCisgICAgZGVib2sgPSAxLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRGVidWcgbG9nIGlzIG5vdCBkaXNhYmxlZCAqLworICAgIGRlYnhsZW4gPSA1NCwg ICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbGVuZ3RoIGZvciBkZWJ1ZyBzdHJpbmdz ICovCisgICAgZGVic2VzID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Ig REVCVUcgU0VTU0lPTiAqLworICAgIGRlYnRpbSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEluY2x1ZGUgdGltZXN0YW1wIGluIGRlYnVnIGxvZyAqLworICAgIGRlYm1zZyA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERlYnVnIG1lc3NhZ2VzIG9uL29mZiAqLworICAgIHBr dGxvZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIHBhY2tldCBsb2dn aW5nICovCisgICAgc2VzbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vzc2lv biBsb2dnaW5nICovCisgICAgZGlhbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyog RElBTCBsb2dnaW5nICovCisgICAgdHJhbG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAg LyogVHJhbnNhY3Rpb24gbG9nZ2luZyAqLworICAgIHRsb2dmbXQgPSAxLCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGxvZyBmb3JtYXQgKHZlcmJvc2UpICovCisgICAgdGxv Z3NlcCA9IChpbnQpJywnLCAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gbG9nIGZpZWxk IHNlcGFyYXRvciAqLworICAgIGRpc3BsYSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IEZpbGUgdHJhbnNmZXIgZGlzcGxheSBvbi9vZmYgKi8KKyAgICBzdGRvdWYgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBvdXRwdXQgdG8gc3Rkb3V0ICovCisgICAgc3Rk aW5mID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgaW5wdXQgZnJvbSBz dGRpbiAqLworICAgIHhmbGcgICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg Zm9yIFggaW5zdGVhZCBvZiBGIHBhY2tldCAqLworICAgIGhjZmxnICA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERvaW5nIEhvc3QgY29tbWFuZCAqLworICAgIGRlc3QgICA9IERFU1Rf RCwgICAgICAgICAgICAgICAgICAgIC8qIERlc3RpbmF0aW9uIGZvciBwYWNrZXQgZGF0YSAqLwor ICAgIHpjaGtvZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHpjaGtvKCkgc2hvdWxk IHdvcmsgZm9yIGRpcnMgdG9vPyAqLworICAgIHpjaGtpZCA9IDAsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHpjaGtpKCkgc2hvdWxkIHdvcmsgZm9yIGRpcnMgdG9vPyAqLworCisvKiBJZiB5 b3UgY2hhbmdlIHRoaXMsIGFsc28gc2VlIHN0cnVjdCBwdGFiIGFib3ZlLi4uICovCisKKyNpZmRl ZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBmaWxlIG5hbWUg Y29udmVyc2lvbiAqLworICAgIGZuY252ICA9IFhZRk5fTCwgICAgICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgaXMgTGl0ZXJhbCBpbiBPUy8yLCAqLworICAgIGZfc2F2ZSA9IFhZRk5fTCwgICAg ICAgICAgICAgICAgICAgIC8qIChzYXZlZCBjb3B5IG9mIHNhbWUpICovCisjZWxzZQorICAgIGZu Y252ICA9IFhZRk5fQywgICAgICAgICAgICAgICAgICAgIC8qIGVsc2V3aGVyZSBDb252ZXJ0IHRo ZW0gKi8KKyAgICBmX3NhdmUgPSBYWUZOX0MsICAgICAgICAgICAgICAgICAgICAvKiAoZGl0dG8p ICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICBmbnNwYXRoID0gUEFUSF9PRkYsICAgICAgICAg ICAgICAgICAvKiBTZW5kIGZpbGUgcGF0aCAqLworICAgIGZucnBhdGggPSBQQVRIX0FVVE8sICAg ICAgICAgICAgICAgIC8qIFJlY2VpdmUgZmlsZSBwYXRoICovCisgICAgZmFja3BhdGggPSAxLCAg ICAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBiYWNrIHBhdGggaW4gQUNLIHRvIEYgKi8KKyAg ICBiaW5hcnkgPSBYWUZUX0IsICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGZpbGUgdHJh bnNmZXIgbW9kZSAqLworICAgIGJfc2F2ZSA9IFhZRlRfQiwgICAgICAgICAgICAgICAgICAgIC8q IFNhdmVkIGZpbGUgbW9kZSAqLworICAgIGVvZm1ldGhvZCA9IDAsICAgICAgICAgICAgICAgICAg ICAgIC8qIEVPRiBkZXRlY3Rpb24gbWV0aG9kIChsZW5ndGgpICovCisKKyNpZmRlZiBPUzIKKyAg ICBjdXJzb3Jfc2F2ZSA9IC0xLCAgICAgICAgICAgICAgICAgICAvKiBDdXJzb3Igc3RhdGUgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKworICAgIHhmZXJtb2RlID0gWE1PREVfQSwgICAgICAgICAgICAg ICAgIC8qIFRyYW5zZmVyIG1vZGUsIG1hbnVhbCBvciBhdXRvICovCisgICAgeGZpbGV0eXBlID0g LTEsICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgb25seSB0ZXh0IChvciBiaW5hcnkp ICovCisgICAgcmVjdXJzaXZlID0gMCwgICAgICAgICAgICAgICAgICAgICAgLyogUmVjdXJzaXZl IGRpcmVjdG9yeSB0cmF2ZXJzYWwgKi8KKyAgICBub2xpbmtzICAgPSAyLCAgICAgICAgICAgICAg ICAgICAgICAvKiBEb24ndCBmb2xsb3cgc3ltYm9saWMgbGlua3MgKi8KKyAgICBza2lwYnVwICAg PSAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIGJhY2t1cCBmaWxlcyB3aGVuIHNlbmRp bmcgKi8KKyAgICBzZW5kbW9kZSA9IFNNX1NFTkQsICAgICAgICAgICAgICAgICAvKiBXaGljaCB0 eXBlIG9mIFNFTkQgb3BlcmF0aW9uICovCisgICAgc2xvc3RhcnQgID0gMSwgICAgICAgICAgICAg ICAgICAgICAgLyogU2xvdyBzdGFydCAoZ3JvdyBwYWNrZXQgbGVuZ3RocykgKi8KKyAgICBjbWFz ayAgPSAwMzc3LCAgICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUICh0ZXJtaW5hbCkgYnl0 ZSBtYXNrICovCisgICAgZm1hc2sgID0gMDM3NywgICAgICAgICAgICAgICAgICAgICAgLyogRmls ZSBieXRlIG1hc2sgKi8KKyAgICBja3dhcm4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGbGFnIGZvciBmaWxlIHdhcm5pbmcgKi8KKyAgICBxdWlldCAgPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBCZSBxdWlldCBkdXJpbmcgZmlsZSB0cmFuc2ZlciAqLworICAgIGxvY2Fs ICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSBsb2NhbCBtb2RlLCAwID0gcmVt b3RlIG1vZGUgKi8KKyAgICBjeHR5cGUgPSBDWFRfUkVNT1RFLCAgICAgICAgICAgICAgICAvKiBD b25uZWN0aW9uIHR5cGUgKi8KKyAgICBzZXJ2ZXIgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBGbGFnIGZvciBJIEFtIFNlcnZlciAqLworICAgIHF1ZXJ5ID0gMCwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZsYWcgZm9yIFF1ZXJ5IGFjdGl2ZSAqLworICAgIGp1c3RvbmUgPSAw LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciBzaG91bGQgZG8gSnVzdCBPbmUgY29t bWFuZCAqLworICAgIHVyc2VydmVyID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg Zm9yIFlvdSBBcmUgU2VydmVyICovCisgICAgYnllX2FjdGl2ZSA9IDAsICAgICAgICAgICAgICAg ICAgICAgLyogRmxhZyBmb3IgQllFIGNvbW1hbmQgYWN0aXZlICovCisgICAgZGlyYWN0aXZlID0g MCwgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgRElSRUNUT1JZIGNvbW1hbmQgYWN0 aXZlICovCisgICAgY2RhY3RpdmUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBm b3IgQ0QgY29tbWFuZCBhY3RpdmUgKi8KKyAgICBjZmxnICAgPSAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDb25uZWN0IGJlZm9yZSB0cmFuc2FjdGlvbiAqLworICAgIGNuZmxnICA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3QgYWZ0ZXIgdHJhbnNhY3Rpb24gKi8K KyAgICBjeHNlZW4gPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBjYW5j ZWxsaW5nIGEgZmlsZSAqLworICAgIGN6c2VlbiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZsYWcgZm9yIGNhbmNlbGxpbmcgZmlsZSBncm91cCAqLworICAgIGZhdGFsaW8gPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZhdGFsIGkvbyBlcnJvciAqLworICAg IGRpc2NhcmQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZpbGUgdG8g YmUgZGlzY2FyZGVkICovCisgICAga2VlcCA9IFNFVF9BVVRPLCAgICAgICAgICAgICAgICAgICAg LyogS2VlcCBpbmNvbXBsZXRlIGZpbGVzID0gQVVUTyAqLworICAgIHVua2NzID0gMSwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEtlZXAgZmlsZSB3L3Vua25vd24gY2hhcmFjdGVyIHNldCAq LworI2lmZGVmIFZNUworICAgIGZpbGVwZWVrID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8q IEluc3BlY3Rpb24gb2YgZmlsZXMgKi8KKyNlbHNlCisjaWZkZWYgZGF0Z2VuZXJhbAorICAgIGZp bGVwZWVrID0gMCwKKyNlbHNlCisgICAgZmlsZXBlZWsgPSAxLAorI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCisjZW5kaWYgLyogVk1TICovCisgICAgbmFrc3RhdGUgPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgLyogSW4gYSBzdGF0ZSB3aGVyZSB3ZSBjYW4gc2VuZCBOQUtzICovCisgICAgZGJs Y2hhciA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHRvIGRvdWJsZSB3 aGVuIHNlbmRpbmcgKi8KKyAgICBtb3ZpbmcgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBNT1ZFID0gc2VuZCwgdGhlbiBkZWxldGUgKi8KKyAgICByZWxpYWJsZSA9IFNFVF9BVVRPLCAg ICAgICAgICAgICAgICAvKiBOb256ZXJvIGlmIHRyYW5zcG9ydCBpcyByZWxpYWJsZSAqLworICAg IHhyZWxpYWJsZSA9IC0xLAorICAgIHNldHJlbGlhYmxlID0gMCwKKyAgICB1cmNsZWFyID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOb256ZXJvIGZvciBjbGVhciBjaGFubmVsIHRvIHlv dSAqLworICAgIGNsZWFycnEgPSBTRVRfQVVUTywgICAgICAgICAgICAgICAgIC8qIFNFVCBDTEVB UkNIQU5FTCB2YWx1ZSAqLworICAgIGNsZWFyZWQgPSAwLAorICAgIHN0cmVhbWluZyA9IDAsICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gaWYgc3RyZWFtaW5nIGlzIGFjdGl2ZSAqLwor ICAgIHN0cmVhbW9rID0gMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gaWYgc3Ry ZWFtaW5nIG5lZ290aWF0ZWQgKi8KKyAgICBzdHJlYW1ycSA9IFNFVF9BVVRPLCAgICAgICAgICAg ICAgICAvKiBTRVQgU1RSRUFNSU5HIHZhbHVlICovCisgICAgc3RyZWFtZWQgPSAtMTsgICAgICAg ICAgICAgICAgICAgICAgLyogV2hldGhlciB3ZSBzdHJlYW1lZCBsYXN0IHRpbWUgKi8KKworY2hh ciAqIHNuZF9tb3ZlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIE1vdmUgZmlsZSBhZnRlciBz ZW5kaW5nIGl0ICovCitjaGFyICogc25kX3JlbmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAgLyog UmVuYW1lIGZpbGUgYWZ0ZXIgc2VuZGluZyBpdCAqLworY2hhciAqIHJjdl9tb3ZlID0gTlVMTDsg ICAgICAgICAgICAgICAgIC8qIE1vdmUgZmlsZSBhZnRlciByZWNlaXZpbmcgaXQgKi8KK2NoYXIg KiByY3ZfcmVuYW1lID0gTlVMTDsgICAgICAgICAgICAgICAvKiBSZW5hbWUgZmlsZSBhZnRlciBy ZWNlaXZpbmcgaXQgKi8KKworY2hhciAqIGdfc25kX21vdmUgPSBOVUxMOworY2hhciAqIGdfc25k X3JlbmFtZSA9IE5VTEw7CitjaGFyICogZ19yY3ZfbW92ZSA9IE5VTEw7CitjaGFyICogZ19yY3Zf cmVuYW1lID0gTlVMTDsKKworI2lmZGVmIENLX1RSSUdHRVIKK2NoYXIgKnR0X3RyaWdnZXJbVFJJ R0dFUlNdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwgfTsKK0NI QVIgKnR0X3RybWF0Y2hbVFJJR0dFUlNdID0geyBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwgfTsKK2NoYXIgKnRyaWdnZXJ2YWwgPSBOVUxMOworI2VuZGlmIC8qIENLX1RS SUdHRVIgKi8KKworaW50IGNreGxvZ2dpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZs YWcgZm9yIHN5c2xvZ2dpbmcgYWN0aXZlICovCitpbnQgaWtkYm9wZW4gPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyBmb3IgSUtTRCBkYXRhYmFzZSBhY3RpdmUgKi8KK2ludCBkYmlu aXRlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBJS1NEQiByZWNvcmQg aW5pdCdkICovCisjaWZuZGVmIENLU1lTTE9HCitpbnQgY2t4c3lzbG9nID0gMDsgICAgICAgICAg ICAgICAgICAgICAgLyogTG9nZ2luZyBsZXZlbCAwICovCisjZWxzZQorI2lmZGVmIFNZU0xPR0xF VkVMCitpbnQgY2t4c3lzbG9nID0gU1lTTE9HTEVWRUw7ICAgICAgICAgICAgLyogTG9nZ2luZyBs ZXZlbCBzcGVjaWZpZWQgKi8KKyNlbHNlCitpbnQgY2t4c3lzbG9nID0gU1lTTEdfREY7ICAgICAg ICAgICAgICAgLyogRGVmYXVsdCBsb2dnaW5nIGxldmVsICovCisjZW5kaWYgLyogU1lTTE9HTEVW RUwgKi8KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisjaWZuZGVmIE5PSEVMUAorI2lmbmRlZiBO T0NNREwKK19QUk9UT1RZUCggVk9JRCBpbmlvcHRobHAsICh2b2lkKSApOyAgICAvKiBDb21tYW5k LWxpbmUgaGVscCBpbml0aWFsaXplciAqLworI2VuZGlmIC8qIE5PQ01ETCAqLworI2VuZGlmIC8q IE5PSEVMUCAqLworCitfUFJPVE9UWVAoIFZPSUQgZ2V0ZXhlZGlyLCAodm9pZCkgKTsKK19QUk9U T1RZUCggaW50IHB1dG5vdGhpbmcsIChjaGFyKSApOworCisjaWZkZWYgSUtTRAorX1BST1RPVFlQ KCBWT0lEIGRvaWtzZGluaXQsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGlrc2Rpbml0LCAo dm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBkb2lrbG9nLCAodm9pZCkgKTsKK19QUk9UT1RZUCgg aW50IGRiaW5pdCwgKHZvaWQpICk7CisjZW5kaWYgLyogSUtTRCAqLworCisvKiBWYXJpYWJsZXMg cGFzc2VkIGZyb20gY29tbWFuZCBwYXJzZXIgdG8gcHJvdG9jb2wgbW9kdWxlICovCisKKyNpZm5k ZWYgTk9TUEwKKyNpZm5kZWYgTk9JQ1AKKyNpZmRlZiBDS19BUEMKK19QUk9UT1RZUCggVk9JRCBh cGNvbmVjdCwgKHZvaWQpICk7CisjZW5kaWYgLyogQ0tfQVBDICovCisjaWZkZWYgT1MyCitleHRl cm4gaW50IGluaXR2aWs7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNl bmRpZiAvKiBOT1NQTCAqLworY2hhciAqY2xjbWRzID0gTlVMTDsgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgdG8gY29tbWFuZC1saW5lIGNvbW1hbmRzICovCisKKyNpZm5kZWYgTk9TRVRL RVkKK2V4dGVybiBLRVkgKmtleW1hcDsKK2V4dGVybiBNQUNSTyAqbWFjcm90YWI7CisjZW5kaWYg LyogTk9TRVRLRVkgKi8KKworI2lmbmRlZiBOT1BVU0gKK2ludCBub3B1c2ggPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQVVNIIGVuYWJsZWQgKi8KKyNlbHNlCitpbnQgbm9wdXNoID0g MTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFVTSCBkaXNhYmxlZCAqLworI2VuZGlmIC8q IE5PUFVTSCAqLworCitDSEFSIHNzdGF0ZSAgPSAoQ0hBUikgMDsgICAgICAgICAgICAgICAgLyog U3RhcnRpbmcgc3RhdGUgZm9yIGF1dG9tYXRvbiAqLworQ0hBUiB6c3RhdGUgID0gKENIQVIpIDA7 ICAgICAgICAgICAgICAgIC8qIEZvciByZW1lbWJlcmluZyBzc3RhdGUgKi8KK2NoYXIgKiBwcmlu dGVybmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAvKiBOVUxMIGlmIHByaW50ZXIgbm90IHJlZGly ZWN0ZWQgKi8KK2ludCBwcmludHBpcGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Ig U0VUIFBSSU5URVIgKi8KK2ludCBub3ByaW50ZXIgPSAwOworCisjaWZuZGVmIE5PWEZFUgorY2hh ciAqY21hcmcgID0gIiI7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gY29tbWFu ZCBkYXRhICovCitjaGFyICpjbWFyZzIgPSAiIjsgICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnRlciB0byAybmQgY29tbWFuZCBkYXRhICovCitjaGFyICoqY21saXN0OyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnRlciB0byBmaWxlIGxpc3QgaW4gYXJndiAqLworCisjaWZkZWYg Q0tfQVVUT0RMICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0b2Rvd25sb2FkICovCitpbnQg YXV0b2RsID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlZCBieSBkZWZhdWx0 ICovCisjZWxzZQoraW50IGF1dG9kbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChv ciBpZiBub3QgaW1wbGVtZW50ZWQpLiAqLworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworaW50IGFk bF9lcnIgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSBzdG9wIG9uIGVycm9yICov CisjaWZkZWYgS1VJCitpbnQgYWRsX2FzayA9IDE7CQkJLyogMSA9IGZpbGUgZGlhbG9nIG9uIGF1 dG9kb3dubG9hZCAqLworI2Vsc2UKK2ludCBhZGxfYXNrID0gMDsJCQkvKiAwID0gbm8gZmlsZSBk aWFsb2cgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBPUzIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBVVRPRE9XTkxPQUQgcGFyYW1ldGVycyAqLworaW50IGFkbF9rbW9kZSA9 IEFETF9QQUNLLCAgICAgICAgICAgICAgIC8qIE1hdGNoIFBhY2tldCB0byBzaWduYWwgZG93bmxv YWQgKi8KKyAgICBhZGxfem1vZGUgPSBBRExfUEFDSzsKK2NoYXIgKiBhZGxfa3N0ciA9IE5VTEw7 ICAgICAgICAgICAgICAgICAvKiBLRVJNSVQgRG93bmxvYWQgU3RyaW5nICovCitjaGFyICogYWRs X3pzdHIgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogWk1PREVNIERvd25sb2FkIFN0cmluZyAq LworI2VuZGlmIC8qIE9TMiAqLworCitpbnQgcmVtZmlsZSA9IDAsIHJlbXBpcGUgPSAwLCByZW1h cHBkID0gMDsgLyogUkVNT1RFIG91dHB1dCByZWRpcmVjdGlvbiAqLworY2hhciAqIHJlbWRlc3Qg PSBOVUxMOworCisjaWZuZGVmIE5PU0VSVkVSCisvKgorICBTZXJ2ZXIgc2VydmljZXM6CisgICAw ID0gZGlzYWJsZWQKKyAgIDEgPSBlbmFibGVkIGluIGxvY2FsIG1vZGUKKyAgIDIgPSBlbmFibGVk IGluIHJlbW90ZSBtb2RlCisgICAzID0gZW5hYmxlZCBpbiBib3RoIGxvY2FsIGFuZCByZW1vdGUg bW9kZXMKKyAgb25seSBhcyBpbml0aWFsIChkZWZhdWx0KSB2YWx1ZXMuCisqLworaW50IGVuX3hp dCA9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYSVQgKi8KK2ludCBlbl9jd2QgPSAz OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDRC9DV0QgKi8KK2ludCBlbl9jcHkgPSAzOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDT1BZICAgKi8KK2ludCBlbl9kZWwgPSAyOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBERUxFVEUgKi8KK2ludCBlbl9ta2QgPSAzOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBNS0RJUiAqLworaW50IGVuX3JtZCA9IDI7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFJNRElSICovCitpbnQgZW5fZGlyID0gMzsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRElSRUNUT1JZICovCitpbnQgZW5fZmluID0gMzsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRklOSVNIICovCitpbnQgZW5fZ2V0ID0gMzsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogR0VUICovCisjaWZuZGVmIE5PUFVTSAoraW50IGVuX2hvcyA9IDI7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhPU1QgZW5hYmxlZCAqLworI2Vsc2UKK2ludCBlbl9ob3MgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIT1NUIGRpc2FibGVkICovCisjZW5kaWYgLyog Tk9QVVNIICovCitpbnQgZW5fcmVuID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVO QU1FICovCitpbnQgZW5fc2VuID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VORCAq LworaW50IGVuX3NldCA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCAqLworaW50 IGVuX3NwYSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNQQUNFICovCitpbnQgZW5f dHlwID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFlQRSAqLworaW50IGVuX3dobyA9 IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdITyAqLworI2lmZGVmIGRhdGFnZW5lcmFs CisvKiBEYXRhIEdlbmVyYWwgQU9TL1ZTIGNhbid0IGRvIHRoaXMgKi8KK2ludCBlbl9ieWUgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCWUUgKi8KKyNlbHNlCitpbnQgZW5fYnllID0g MjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUENzIGluIGxvY2FsIG1vZGUuLi4gKi8KKyNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworaW50IGVuX2FzZyA9IDM7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEFTU0lHTiAqLworaW50IGVuX3F1ZSA9IDM7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFFVRVJZICovCitpbnQgZW5fcmV0ID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAg LyogUkVUUklFVkUgKi8KK2ludCBlbl9tYWkgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBNQUlMICovCitpbnQgZW5fcHJpID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUFJJ TlQgKi8KK2ludCBlbl9lbmEgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFTkFCTEUg Ki8KKyNlbHNlCitpbnQgZW5feGl0ID0gMCwgZW5fY3dkID0gMCwgZW5fY3B5ID0gMCwgZW5fZGVs ID0gMCwgZW5fbWtkID0gMCwgZW5fcm1kID0gMCwKKyAgICBlbl9kaXIgPSAwLCBlbl9maW4gPSAw LCBlbl9nZXQgPSAwLCBlbl9ob3MgPSAwLCBlbl9yZW4gPSAwLCBlbl9zZW4gPSAwLAorICAgIGVu X3NldCA9IDAsIGVuX3NwYSA9IDAsIGVuX3R5cCA9IDAsIGVuX3dobyA9IDAsIGVuX2J5ZSA9IDAs IGVuX2FzZyA9IDAsCisgICAgZW5fcXVlID0gMCwgZW5fcmV0ID0gMCwgZW5fbWFpID0gMCwgZW5f cHJpID0gMCwgZW5fZW5hID0gMDsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworI2VuZGlmIC8qIE5P WEZFUiAqLworCisvKiBNaXNjZWxsYW5lb3VzICovCisKK2NoYXIgKip4YXJndjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBHbG9iYWwgY29waWVzIG9mIGFyZ3YgKi8KK2ludCB4YXJnYzsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgYXJnYyAgKi8KK2ludCB4YXJnczsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbiBpbW11dGFibGUgY29weSBvZiBhcmdj ICovCitjaGFyICp4YXJnMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIG9mIGFy Z3ZbMF0gKi8KK2NoYXIgKnBpcGVkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2lu dGVyIHRvIC1QIChwaXBlKSBkYXRhICovCisKK2V4dGVybiBjaGFyICpkZnR0eTsgICAgICAgICAg ICAgICAgICAgICAvKiBEZWZhdWx0IHR0eSBuYW1lIGZyb20gY2s/dGlvLmMgKi8KK2V4dGVybiBp bnQgZGZsb2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGxvY2F0aW9uOiByZW1v dGUvbG9jYWwgKi8KK2V4dGVybiBpbnQgZGZwcnR5OyAgICAgICAgICAgICAgICAgICAgICAvKiBE ZWZhdWx0IHBhcml0eSAqLworZXh0ZXJuIGludCBkZmZsb3c7ICAgICAgICAgICAgICAgICAgICAg IC8qIERlZmF1bHQgZmxvdyBjb250cm9sICovCisKKyNpZmRlZiBUTkNPREUKK2V4dGVybiBpbnQg dG5fZGViOworI2VuZGlmIC8qIFROQ09ERSAqLworLyoKKyAgQnVmZmVyZWQgZmlsZSBpbnB1dCBh bmQgb3V0cHV0IGJ1ZmZlcnMuICBTZWUgZ2V0cGt0KCkgaW4gY2tjZm5zLmMKKyAgYW5kIHpvdXRk dW1wKCkgaW4gdGhlIHN5c3RlbS1kZXBlbmRlbnQgZmlsZSBpL28gbW9kdWxlICh1c3VhbGx5IGNr P2Zpby5jKS4KKyovCisjaWZuZGVmIERZTkFNSUMKKy8qIE5vdyB3ZSBhbGxvY2F0ZSB0aGVtIGR5 bmFtaWNhbGx5LCBzZWUgZ2V0aW9icygpIGJlbG93LiAqLworY2hhciB6aW5idWZmZXJbSU5CVUZT SVpFXSwgem91dGJ1ZmZlcltPQlVGU0laRV07CisjZW5kaWYgLyogRFlOQU1JQyAqLworY2hhciAq emlucHRyLCAqem91dHB0cjsKK2ludCB6aW5jbnQsIHpvdXRjbnQ7CitpbnQgem9idWZzaXplID0g T0JVRlNJWkU7CitpbnQgem9mYnVmZmVyID0gMTsKK2ludCB6b2ZibG9jayAgPSAxOworCisjaWZk ZWYgU0VTTElNSVQKK2ludCBzZXNsaW1pdCA9IDA7CisjZW5kaWYgLyogU0VTTElNSVQgKi8KKwor I2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisjaW5jbHVkZSAiY2t1YXRoLmgiCisjZW5kaWYgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KKworX1BST1RPVFlQKCBpbnQgZ2V0aW9icywgKFZPSUQpICk7 CisKKy8qICBNIEEgSSBOICAtLSAgQy1LZXJtaXQgbWFpbiBwcm9ncmFtICAqLworCisjaW5jbHVk ZSA8c2lnbmFsLmg+CisKKyNpZm5kZWYgVk1TCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmCisK KyNpZm5kZWYgTk9DQ1RSQVAKKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNpbmNsdWRlICJja2NzaWcu aCIKK2Nram1wYnVmIGNtamJ1ZjsKKyNpZmRlZiBHRU1ET1MgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTcGVjaWFsIGZvciBBdGFyaSBTVCAqLworY2NfY2xlYW4oKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FuJ3QgYmUgcmlnaHQ/ICovCisjZW5kaWYgLyogR0VN RE9TICovCisjZW5kaWYgLyogTk9DQ1RSQVAgKi8KKworI2lmbmRlZiBOT1hGRVIKKy8qIEluZm8g YXNzb2NpYXRlZCB3aXRoIGEgc3lzdGVtIElEICovCisKK3N0cnVjdCBzeXNkYXRhIHN5c2lkbGlz dFtdID0geyAgICAgICAgICAvKiBBZGQgb3RoZXJzIGFzIG5lZWRlZC4uLiAqLworICB7ICIwIiwg ICJhbm9ueW1vdXMiLCAgICAwLCBOVUwsICAwLCAwLCAwIH0sCisgIHsgIkExIiwgIkFwcGxlIElJ IiwgICAgIDAsIE5VTCwgIDAsIDAsIDMgfSwgLyogZml4IHRoaXMgKi8KKyAgeyAiQTMiLCAiTWFj aW50b3NoIiwgICAgMSwgJzonLCAgMCwgMiwgMSB9LAorICB7ICJENyIsICJWTVMiLCAgICAgICAg ICAwLCAnXScsICAxLCAwLCAwIH0sCisgIHsgIkRBIiwgIlJTVFMvRSIsICAgICAgIDAsICddJywg IDEsIDAsIDMgfSwgLyogKGkgdGhpbmsuLi4pICovCisgIHsgIkRCIiwgIlJUMTEiLCAgICAgICAg IDAsIE5VTCwgIDEsIDAsIDMgfSwgLyogKG1heWJlLi4uKSAqLworICB7ICJGMyIsICJBT1MvVlMi LCAgICAgICAxLCAnOicsICAwLCAwLCAyIH0sCisgIHsgIkkxIiwgIlZNL0NNUyIsICAgICAgIDAs IE5VTCwgIDAsIDAsIDAgfSwKKyAgeyAiSTIiLCAiTVZTL1RTTyIsICAgICAgMCwgTlVMLCAgMCwg MCwgMCB9LAorICB7ICJJNCIsICJNVVNJQyIsICAgICAgICAwLCBOVUwsICAwLCAwLCAwIH0sCisg IHsgIkk3IiwgIkNJQ1MiLCAgICAgICAgIDAsIE5VTCwgIDAsIDAsIDAgfSwKKyAgeyAiSTkiLCAi TVZTL1JPU0NPRSIsICAgMCwgTlVMLCAgMCwgMCwgMCB9LAorICB7ICJLMiIsICJBdGFyaSBTVCIs ICAgICAxLCAnXFwnLCAxLCAwLCAzIH0sCisgIHsgIkwzIiwgIkFtaWdhIiwgICAgICAgIDEsICcv JywgIDEsIDAsIDIgfSwKKyAgeyAiTVYiLCAiU3RyYXR1cyBWT1MiLCAgMSwgJz4nLCAgMCwgMSwg MCB9LAorICB7ICJOMyIsICJBcG9sbG8gQWVnaXMiLCAxLCAnLycsICAwLCAzLCAyIH0sCisgIHsg IlUxIiwgIlVOSVgiLCAgICAgICAgIDEsICcvJywgIDAsIDMsIDIgfSwKKyAgeyAiVTgiLCAiTVMt RE9TIiwgICAgICAgMSwgJ1xcJywgMSwgMCwgMyB9LAorICB7ICJVRCIsICJPUy05IiwgICAgICAg ICAxLCAnLycsICAwLCAzLCAyIH0sCisgIHsgIlVOIiwgIldpbmRvd3MtMzIiLCAgIDEsICdcXCcs IDEsIDIsIDMgfSwKKyAgeyAiVU8iLCAiT1MvMiIsICAgICAgICAgMSwgJ1xcJywgMSwgMiwgMyB9 Cit9Oworc3RhdGljIGludCBueHhzeXNpZHMgPSAoc2l6ZW9mKHN5c2lkbGlzdCkgLyBzaXplb2Yo c3RydWN0IHN5c2RhdGEpKTsKKworLyogR2l2ZW4gYSBLZXJtaXQgc3lzdGVtIElEIGNvZGUsIHJl dHVybiB0aGUgYXNzb2NpYXRlZCBuYW1lIHN0cmluZyAqLworLyogYW5kIHNvbWUgcHJvcGVydGll cyBvZiB0aGUgZmlsZW5hbWVzLi4uICovCisKK2NoYXIgKgorZ2V0c3lzaWQocykgY2hhciAqIHM7 IHsgICAgICAgICAgICAgICAgIC8qIEdldCBzeXN0ZW0tdHlwZSBuYW1lICovCisgICAgaW50IGk7 CisgICAgaWYgKCFzKSByZXR1cm4oIiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBueHhzeXNpZHM7 IGkrKykKKyAgICAgIGlmICghc3RyY21wKHN5c2lkbGlzdFtpXS5zaWRfY29kZSxzKSkKKyAgICAg ICAgcmV0dXJuKHN5c2lkbGlzdFtpXS5zaWRfbmFtZSk7CisgICAgcmV0dXJuKHMpOworfQorCitp bnQKK2dldHN5c2l4KHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAgICAvKiBHZXQgc3lzdGVt LXR5cGUgaW5kZXggKi8KKyAgICBpbnQgaTsKKyAgICBpZiAoIXMpIHJldHVybigtMSk7CisgICAg Zm9yIChpID0gMDsgaSA8IG54eHN5c2lkczsgaSsrKQorICAgICAgaWYgKCFzdHJjbXAoc3lzaWRs aXN0W2ldLnNpZF9jb2RlLHMpKQorICAgICAgICByZXR1cm4oaSk7CisgICAgcmV0dXJuKC0xKTsK K30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworLyogVGVsbCBpZiBhIHBhdGhuYW1lIGlzIGFic29s dXRlICh2ZXJzdXMgcmVsYXRpdmUpICovCisvKiBUaGlzIHNob3VsZCBiZSBwYXJjZWxlZCBvdXQg dG8gZWFjaCBvZiB0aGUgY2sqZmlvLmMgbW9kdWxlcy4uLiAqLworLyogVk1TIGlzYWJzb2x1dGUo KSBpcyBub3cgaW4gY2t2ZmlvLmMuICovCisjaWZuZGVmIFZNUworaW50Citpc2Fic29sdXRlKHBh dGgpIGNoYXIgKiBwYXRoOyB7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgeDsKKyAgICBpZiAo IXBhdGgpCisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKCEqcGF0aCkKKyAgICAgIHJldHVybigw KTsKKyAgICB4ID0gKGludCkgc3RybGVuKHBhdGgpOworICAgIGRlYnVnKEYxMTEsImlzYWJzb2x1 dGUiLHBhdGgseCk7CisjaWZkZWYgVU5JWAorICAgIGlmICgqcGF0aCA9PSAnLycKKyNpZmRlZiBE VElMREUKKyAgICAgICAgfHwgKnBhdGggPT0gJ34nCisjZW5kaWYgLyogRFRJTERFICovCisgICAg ICAgICkKKyAgICAgIHJjID0gMTsKKyNlbHNlIC8qIGRlZiBVTklYICovCisjaWZkZWYgT1MyCisg ICAgaWYgKCpwYXRoID09ICcvJyB8fCAqcGF0aCA9PSAnXFwnKQorICAgICAgcmMgPSAxOworICAg IGVsc2UgaWYgKGlzYWxwaGEoKnBhdGgpICYmIHggPiAyKQorICAgICAgaWYgKCoocGF0aCsxKSA9 PSAnOicgJiYgKCoocGF0aCArMikgPT0gJy8nIHx8ICoocGF0aCsyKSA9PSAnXFwnKSkKKyAgICAg ICAgcmMgPSAxOworI2Vsc2UgLyogZGVmIE9TMiAqLworI2lmZGVmIEFNSUdBCisgICAgaWYgKCpw YXRoID09ICcvJworI2lmZGVmIERUSUxERQorICAgICAgICB8fCAqcGF0aCA9PSAnficKKyNlbmRp ZiAvKiBEVElMREUgKi8KKyAgICAgICAgKQorICAgICAgcmMgPSAxOworI2Vsc2UgLyogZGVmIEFN SUdBICovCisjaWZkZWYgT1NLCisgICAgaWYgKCpwYXRoID09ICcvJworI2lmZGVmIERUSUxERQor ICAgICAgICB8fCAqcGF0aCA9PSAnficKKyNlbmRpZiAvKiBEVElMREUgKi8KKyAgICAgICAgKQor ICAgICAgcmMgPSAxOworI2Vsc2UgLyogZGVmIE9TSyAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisg ICAgaWYgKCpwYXRoID09ICc6JykKKyAgICAgIHJjID0gMTsKKyNlbHNlIC8qIGRlZiBkYXRhZ2Vu ZXJhbCAqLworI2lmZGVmIE1BQworICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZpbGwgaW4gbGF0ZXIuLi4gKi8KKyNlbHNlIC8qIGRlZiBNQUMgKi8KKyNpZmRlZiBT VFJBVFVTCisgICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsbCBp biBsYXRlci4uLiAqLworI2Vsc2UgLyogZGVmIFNUUkFUVVMgKi8KKyNpZmRlZiBHRU1ET1MKKyAg ICBpZiAoKnBhdGggPT0gJy8nIHx8ICpwYXRoID09ICdcXCcpCisgICAgICByYyA9IDE7CisgICAg ZWxzZSBpZiAoaXNhbHBoYSgqcGF0aCkgJiYgeCA+IDEpCisgICAgICBpZiAoKihwYXRoKzEpID09 ICc6JykKKyAgICAgICAgcmMgPSAxOworI2VuZGlmIC8qIEdFTURPUyAqLworI2VuZGlmIC8qIFNU UkFUVVMgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2Vu ZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIEFNSUdBICovCisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogVU5JWCAqLworICAgIGRlYnVnKEYxMDEsImlzYWJzb2x1dGUgcmMiLCIiLHJjKTsKKyAg ICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIG5kZWYgVk1TICovCisKKy8qICBTZWUgaWYgSSBo YXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGtleWJvYXJkICAqLworCitpbnQKK2lzX2FfdHR5KG4p IGludCBuOyB7CisjaWZkZWYgVU5JWAorICAgIGV4dGVybiBpbnQgdHRmZGZsZzsKKyAgICBpZiAo dHRmZGZsZyA+IDApCisgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVm IEtVSQorICAgIHJldHVybiAxOworI2Vsc2UgLyogS1VJICovCisjaWZkZWYgTlQKKyAgICBpZiAo aXNXaW45NSgpKQorICAgICAgcmV0dXJuKDEpOworICAgIGVsc2UKKyAgICAgIHJldHVybihfaXNh dHR5KG4pKTsKKyNlbHNlCisjaWZkZWYgSUtTRAorICAgaWYgKGluc2VydmVyKQorICAgICByZXR1 cm4oMSk7CisgICBlbHNlCisjZW5kaWYgLyogSUtTRCAqLworICAgICByZXR1cm4oaXNhdHR5KG4p KTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIEtVSSAqLworfQorCisjaWZuZGVmIE5PWEZF UgorVk9JRAoraW5pdHhsaXN0KCkgeworICAgIGV4dGVybiBjaGFyICogc25kZXhjZXB0W10sICog cmN2ZXhjZXB0W107CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IE5TTkRFWENFUFQ7 IGkrKykgeworCXNuZGV4Y2VwdFtpXSA9IE5VTEw7CisJcmN2ZXhjZXB0W2ldID0gTlVMTDsKKyAg ICB9Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisKKy8qIEluaXRpYWxpemUgZmxvdyBjb250cm9s IHRhYmxlICovCisKK1ZPSUQKK2luaXRmbG93KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEZWZhdWx0IHZhbHVlcyBmb3IgZmxvdyBjb250cm9sICovCisjaWZkZWYgVk1TICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGVhY2gga2luZCBvZiBjb25uZWN0aW9uLiAq LworICAgIC8qIFRoZSBWTVMgdGVsbmV0IHRlcm1pbmFsIGRyaXZlciB0cmVhdHMgIm5vbmUiIGFz IHJlcXVlc3QgdG8gbG9zZSBjaGFycyAqLworICAgIGN4Zmxvd1tDWFRfUkVNT1RFXSAgPSBGTE9f WE9OWDsgICAgIC8qIFJlbW90ZSBtb2RlLi4uICovCisjZWxzZQorI2lmZGVmIEhQVVgKKyAgICAv KiBEaXR0byBmb3IgSFAtVVggKi8KKyAgICBjeGZsb3dbQ1hUX1JFTU9URV0gID0gRkxPX1hPTlg7 ICAgICAvKiBSZW1vdGUgbW9kZS4uLiAqLworI2Vsc2UKKyAgICAvKiBUaGUgdGVtcHRhdGlvbiBp cyB0byBtYWtlIHRoaXMgb25lIEZMT19LRUVQIGJ1dCBkb24ndCEhISAqLworICAgIC8qIEl0IHRv dGFsbHkgd3JlY2tzIGJpbmFyeS1maWxlIHRyYW5zZmVyIHdoZW4gY29taW5nIGluIHZpYSBUZWxu ZXQuICovCisgICAgLyogSW4gVU5JWCBhdCBsZWFzdC4uLiAqLworICAgIGN4Zmxvd1tDWFRfUkVN T1RFXSAgPSBGTE9fTk9ORTsKKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogVk1TICovCisK KyNpZmRlZiBWTVMKKyAgICBjeGZsb3dbQ1hUX0RJUkVDVF0gID0gRkxPX1hPTlg7ICAgICAvKiBE aXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb25zLi4uICovCisjZWxzZQorICAgIGN4Zmxvd1tDWFRfRElS RUNUXSAgPSBGTE9fTk9ORTsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIENLX1JUU0NUUwor ICAgIGN4Zmxvd1tDWFRfTU9ERU1dICAgPSBGTE9fUlRTQzsgICAgIC8qIE1vZGVtIGNvbm5lY3Rp b25zLi4uICovCisjZWxzZQorI2lmZGVmIFZNUworICAgIGN4Zmxvd1tDWFRfTU9ERU1dICAgPSBG TE9fWE9OWDsKKyNlbHNlCisgICAgY3hmbG93W0NYVF9NT0RFTV0gICA9IEZMT19OT05FOworI2Vu ZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLX1JUU0NUUyAqLworCisjaWZkZWYgVk1TCisgICAg Y3hmbG93W0NYVF9UQ1BJUF0gICA9IEZMT19YT05YOyAgICAgLyogVENQL0lQIGNvbm5lY3Rpb25z Li4uICovCisjZWxzZQorICAgIGN4Zmxvd1tDWFRfVENQSVBdICAgPSBGTE9fTk9ORTsKKyNlbmRp ZiAvKiBWTVMgKi8KKworICAgIGN4Zmxvd1tDWFRfU1NIXSAgICAgPSBGTE9fTk9ORTsKKyAgICBj eGZsb3dbQ1hUX1gyNV0gICAgID0gRkxPX05PTkU7ICAgICAvKiBPdGhlciBraW5kcyBvZiBuZXR3 b3Jrcy4uLiAqLworICAgIGN4Zmxvd1tDWFRfREVDTkVUXSAgPSBGTE9fWE9OWDsKKyAgICBjeGZs b3dbQ1hUX0xBVF0gICAgID0gRkxPX1hPTlg7CisgICAgY3hmbG93W0NYVF9ORVRCSU9TXSA9IEZM T19OT05FOworICAgIGN4Zmxvd1tDWFRfTlBJUEVdICAgPSBGTE9fTk9ORTsKKyAgICBjeGZsb3db Q1hUX1BJUEVdICAgID0gRkxPX05PTkU7CisgICAgZmxvdyA9IGN4Zmxvd1tjeHR5cGVdOyAgICAg ICAgICAgICAgLyogSW5pdGlhbCBmbG93IHNldHRpbmcuICovCisgICAgZGVidWcoRjEwMSwiaW5p dGZsb3ciLCIiLGZsb3cpOworfQorCisjaWZuZGVmIE5PWEZFUgorLyogSW5pdGlhbGl6ZSBmaWxl IHRyYW5zZmVyIHByb3RvY29scyAqLworCitWT0lECitpbml0cHJvdG8oeSwgdXBic3RyLCB1cHRz dHIsIHNydnN0ciwgc25kYnN0ciwgc25kdHN0ciwgcmN2YnN0ciwgcmN2dHN0cikKKyAgICBpbnQg eTsKKyAgICBjaGFyICogdXBic3RyLCAqIHVwdHN0ciwgKiBzcnZzdHIsICogc25kYnN0ciwgKiBz bmR0c3RyLCAqIHJjdmJzdHIsCisgICAgKiByY3Z0c3RyOworLyogaW5pdHByb3RvICovIHsKKwor ICAgIGlmICh1cGJzdHIpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgbnVsbCBz dHJpbmdzICovCisgICAgICBpZiAoISp1cGJzdHIpICAgICAgICAgICAgICAgICAgICAgLyogdG8g bnVsbCBwb2ludGVycyAqLworICAgICAgICB1cGJzdHIgPSBOVUxMOworCisgICAgaWYgKHVwdHN0 cikgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBudWxsIHN0cmluZ3MgKi8KKyAg ICAgIGlmICghKnVwdHN0cikgICAgICAgICAgICAgICAgICAgICAvKiB0byBudWxsIHBvaW50ZXJz ICovCisgICAgICAgIHVwdHN0ciA9IE5VTEw7CisKKyAgICBpZiAoc25kYnN0cikKKyAgICAgIGlm ICghKnNuZGJzdHIpCisgICAgICAgIHNuZGJzdHIgPSBOVUxMOworCisgICAgaWYgKHNuZHRzdHIp CisgICAgICBpZiAoISpzbmR0c3RyKQorICAgICAgICBzbmR0c3RyID0gTlVMTDsKKworICAgIGlm IChyY3Zic3RyKQorICAgICAgaWYgKCEqcmN2YnN0cikKKyAgICAgICAgcmN2YnN0ciA9IE5VTEw7 CisKKyAgICBpZiAocmN2dHN0cikKKyAgICAgIGlmICghKnJjdnRzdHIpCisgICAgICAgIHJjdnRz dHIgPSBOVUxMOworCisgICAgaWYgKHNydnN0cikKKyAgICAgIGlmICghKnNydnN0cikKKyAgICAg ICAgc3J2c3RyID0gTlVMTDsKKworICAgIHByb3RvY29sID0geTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNldCBwcm90b2NvbCAqLworCisgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnJwa3RsZW4g PiAtMSkKKyAgICAgIHVycHNpeiA9IHB0YWJbcHJvdG9jb2xdLnJwa3RsZW47CisgICAgaWYgKHB0 YWJbcHJvdG9jb2xdLnNwa3RmbGcgPiAtMSkKKyAgICAgIHNwc2l6ZiA9IHB0YWJbcHJvdG9jb2xd LnNwa3RmbGc7CisgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnNwa3RsZW4gPiAtMSkgeworICAgICAg ICBzcHNpeiA9IHB0YWJbcHJvdG9jb2xdLnNwa3RsZW47CisgICAgICAgIGRlYnVnKEYxMDEsImlu aXRwcm90byBzcHNpeiIsIiIsc3BzaXopOworICAgICAgICBpZiAoc3BzaXpmKSB7CisgICAgICAg ICAgICBzcHNpenIgPSBzcG1heCA9IHNwc2l6OworICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5p dHByb3RvIHNwc2l6ciIsIiIsc3BzaXpyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocHRh Yltwcm90b2NvbF0ud2luc2l6ZSA+IC0xKQorICAgICAgd3Nsb3RyID0gcHRhYltwcm90b2NvbF0u d2luc2l6ZTsKKyAgICBpZiAocHRhYltwcm90b2NvbF0ucHJlZml4ID4gLTEpCisgICAgICBwcmVm aXhpbmcgPSBwdGFiW3Byb3RvY29sXS5wcmVmaXg7CisgICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZu Y2EgPiAtMSkKKyAgICAgIGZuY2FjdCAgPSBwdGFiW3Byb3RvY29sXS5mbmNhOworICAgIGlmIChw dGFiW3Byb3RvY29sXS5mbmNuID4gLTEpCisgICAgICBmbmNudiAgID0gcHRhYltwcm90b2NvbF0u Zm5jbjsKKyAgICBpZiAocHRhYltwcm90b2NvbF0uZm5zcCA+IC0xKQorICAgICAgZm5zcGF0aCA9 IHB0YWJbcHJvdG9jb2xdLmZuc3A7CisgICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZucnAgPiAtMSkK KyAgICAgIGZucnBhdGggPSBwdGFiW3Byb3RvY29sXS5mbnJwOworCisgICAgbWFrZXN0cigmKHB0 YWJbcHJvdG9jb2xdLmhfYl9pbml0KSx1cGJzdHIpOworICAgIG1ha2VzdHIoJihwdGFiW3Byb3Rv Y29sXS5oX3RfaW5pdCksdXB0c3RyKTsKKyAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0uaF94 X2luaXQpLHNydnN0cik7CisgICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfYl9zY21kKSxz bmRic3RyKTsKKyAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF90X3NjbWQpLHNuZHRzdHIp OworICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX2JfcmNtZCkscmN2YnN0cik7CisgICAg bWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfdF9yY21kKSxyY3Z0c3RyKTsKK30KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0NNREwKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZG9j bWRsaW5lKHZvaWQgKiB0aHJlYWRpbmZvKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2RvY21kbGlu ZSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eworI2lmZGVmIE5UU0lHCisgICAgc2V0aW50KCk7CisgICAgaWYgKHRocmVhZGluZm8pIHsgICAg ICAgICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICBUbHNT ZXRWYWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKKyAgICAgICBkZWJ1ZyggRjEwMCwgImRvY21k bGluZSBjYWxsZWQgd2l0aCB0aHJlYWRpbmZvIGJsb2NrIiwgIiIsIDAgKTsKKyAgICB9IGVsc2UK KyAgICAgIGRlYnVnKCBGMTAwLCAiZG9jbWRsaW5lIHRocmVhZGluZm8gaXMgTlVMTCIsIiIsMCk7 CisjZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIE5UCisjaWZkZWYg SUtTRAorICAgIGlmIChpbnNlcnZlcikKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBJ S1NEICovCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIHByb3Rv KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRha2UgYW55IHJlcXVlc3RlZCBhY3Rp b24sIHRoZW4gKi8KKyAgICBpZiAoIXF1aWV0KSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBw dXQgY3Vyc29yIGJhY2sgYXQgbGVmdCBtYXJnaW4sICovCisgICAgICBjb25vbGwoIiIpOworI2lm bmRlZiBOT0xPQ0FMCisgICAgaWYgKGNuZmxnKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog UmUtY29ubmVjdCBpZiByZXF1ZXN0ZWQgKi8KKyAgICAgICAgY25mbGcgPSAwOworICAgICAgICBk b2NvbmVjdCgwLDApOworICAgICAgICBpZiAodHRjaGsoKSA8IDApCisgICAgICAgICAgZG9sb2dl bmQoKTsKKyAgICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgTlRTSUcKKyAgICAg Y2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgIHJldHVybjsK K30KKwordm9pZAoraWtzbG9naW4oKSB7CisgICAgaWYgKHNzdGVsbmV0CisjaWZkZWYgSUtTRAor ICAgICAgICB8fCBpbnNlcnZlciAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmV0IHNlcnZl ciAqLworI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgKSB7CisgICAgICAgIGNoYXIgKnM7Cisg ICAgICAgIGV4dGVybiBpbnQgZmRpc3BsYTsgICAgICAgICAgICAgLyogRmlsZS10cmFuc2ZlciBk aXNwbGF5IGZvcm1hdCAqLworICAgICAgICBleHRlcm4gY2hhciAqIGlrcHJvbXB0OyAgICAgICAg IC8qIElLU0QgcHJvbXB0ICovCisKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKyAgICAg ICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICB4X2xvZ2luID0gMTsgICAgICAgICAgICAg ICAgLyogTG9naW4gcmVxdWlyZWQgKi8KKyAgICAgICAgICAgIHhfbG9nZ2VkID0gMDsgICAgICAg ICAgICAgICAvKiBOb3QgbG9nZ2VkIGluIHlldCAqLworICAgICAgICAgICAgY21zZXRwKGlrcHJv bXB0KTsgICAgICAgICAgIC8qIFNldCB1cCBJS1NEJ3MgcHJvbXB0ICovCisjaWZuZGVmIE5PU0VS VkVSCisgICAgICAgICAgICBlbl9tYWkgPSAwOyAgICAgICAgICAgICAgICAgLyogTUFJTCBpcyBk aXNhYmxlZCAqLworICAgICAgICAgICAgZW5fd2hvID0gMDsgICAgICAgICAgICAgICAgIC8qIFJF TU9URSBXSE8gaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgICAgIGVuX2hvcyA9IDA7ICAgICAgICAg ICAgICAgICAvKiBSRU1PVEUgSE9TVCBpcyBkaXNhYmxlZCAqLworICAgICAgICAgICAgZW5fcHJp ID0gMDsgICAgICAgICAgICAgICAgIC8qIFBSSU5UIGlzIGRpc2FibGVkICovCisjZW5kaWYgLyog Tk9TRVJWRVIgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHhfbG9naW4gPSAwOyAg ICAgICAgICAgICAgICAvKiBMb2dpbiBub3QgcmVxdWlyZWQgKi8KKyAgICAgICAgICAgIHhfbG9n Z2VkID0gMTsgICAgICAgICAgICAgICAvKiBBbHJlYWR5IGxvZ2dlZCBpbiAqLworICAgICAgICB9 CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIG5vbG9j YWwgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogU0VUIExJTkUvSE9TVCBub3QgYWxsb3dlZCAq LworICAgICAgICBmZGlzcGxhID0gWFlGRF9OOyAgICAgICAgICAgICAgIC8qIE5vIGZpbGUtdHJh bnNmZXIgZGlzcGxheSAqLworI2lmZGVmIE5FVENPTk4KKyAgICAgICAgY2xpZW50aG9zdCA9IGNr Z2V0cGVlcigpOyAgICAgICAvKiBHZXQgY2xpZW50J3MgaG9zdG5hbWUgKi8KKyAgICAgICAgZGVi dWcoRjExMCwiaWtzbG9naW4gY2xpZW50aG9zdCIsY2xpZW50aG9zdCwwKTsKKyNlbmRpZiAvKiBO RVRDT05OICovCisgICAgICAgIHp0aW1lKCZzKTsgICAgICAgICAgICAgICAgICAgICAgLyogR2V0 IGN1cnJlbnQgZGF0ZSBhbmQgdGltZSAqLworCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBDS19B VVRIRU5USUNBVElPTgorICAgICAgICBpZiAoeF9sb2dpbikgeworICAgICAgICAgICAgeF9sb2dn ZWQgPSBja190bl9hdXRoX3ZhbGlkKCk7IC8qIERpZCBUZWxuZXQgQXV0aCBzdWNjZWVkPyAqLwor ICAgICAgICAgICAgZGVidWcoRjExMSwiaWtzbG9naW4iLCJ4X2xvZ2dlZCIseF9sb2dnZWQpOwor CisjaWZkZWYgTlQKKyAgICAgICAgICAgIC8qIE9uIFdpbmRvd3MgOXgsIHdlIGRvIG5vdCBoYXZl IHRoZSBhYmlsaXR5IGluICAqLworICAgICAgICAgICAgLyogenZ1c2VyKCkgYXQgcHJlc2VudCB0 byBkZXRlcm1pbmUgaWYgdGhlIG5hbWUgICovCisgICAgICAgICAgICAvKiBhcHByb3ZlZCBpbiBh IEtlcmJlcm9zIHByaW5jaXBhbCBpcyByZWFsbHkgYSAgKi8KKyAgICAgICAgICAgIC8qIGFuIGFj Y291bnQgaW4gdGhlIFdpbmRvd3MgQWNjZXNzIENvbnRyb2wgTGlzdCAqLworICAgICAgICAgICAg aWYgKGlzV2luOTUoKSAmJiB4X2xvZ2dlZCA9PSBBVVRIX1ZBTElECisgICAgICAgICAgICAgICAg ICYmIChja190bl9hdXRoZW50aWNhdGVkKCkgIT0gQVVUSFRZUEVfTlRMTSkKKyNpZmRlZiBDS19T UlAKKyAgICAgICAgICAgICAgICAgJiYgKGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSAhPSBBVVRIVFlQ RV9TUlApCisjZW5kaWYgLyogQ0tfU1JQICovCisgICAgICAgICAgICAgICAgICkgeworICAgICAg ICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKKyAgICAgICAgICAgICAgICB4X2xv Z2dlZCA9IEFVVEhfVVNFUjsKKyAgICAgICAgICAgICAgICBwcmludGYoIldBUk5JTkc6XHJcbiIp OworICAgICAgICAgICAgICAgIHByaW50ZigKKyIgVGhlIFRlbG5ldCBhdXRoZW50aWNhdGlvbiBt ZXRob2QgdXNlZCBjYW5ub3QgcHJvdmlkZSBmb3IgYXV0b21hdGVkXHJcbiIpOworICAgICAgICAg ICAgICAgIHByaW50ZigKKyIgbG9naW4gdG8gV2luZG93cyA5NSBvciBXaW5kb3dzIDk4LiAgQSBw YXNzd29yZCBtdXN0IGJlIGVudGVyZWRcclxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKAor IiBsb2NhbGx5IHRvIHZhbGlkYXRlIHlvdXIgdXNlcmlkLiAgVGVsbmV0IGF1dGhlbnRpY2F0aW9u IChhbmQgZW5jcnlwdGlvbilcclxuIgorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgcHJpbnRmKAorIiBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSB0aGUgaG9zdCAoYW5kIHByb3Rl Y3QgdGhlIHByaXZhY3kgb2YgeW91ciBwYXNzd29yZC4pXAorXHJcbiIKKyAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisKKyAgICAgICAgICAgIGlmICh4 X2xvZ2dlZCA9PSBBVVRIX1ZBTElEKSB7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAg aWYgKChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgorICAgICAgICAgICAg ICAgICAgICAoIVRFTE9QVF9VKFRFTE9QVF9BVVRIRU5USUNBVElPTikgfHwKKyAgICAgICAgICAg ICAgICAgICAgIGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9OVUxMIHx8CisgICAg ICAgICAgICAgICAgICAgICBja190bl9hdXRoZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfQVVUTykK KyAgICAgICAgICAgICAgICAgICAgKSB7CisjaWZkZWYgU1NMX0tSQjUKKyAgICAgICAgICAgICAg ICAgICAgaWYgKHRsc19pc19rcmI1KDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgS2VyYmVyb3MgNVxyXG4iKTsKKyNpZmRlZiBDS1NZU0xP RworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19MSSAmJiBj a3hsb2dnaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pV c2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N5 c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVkFMSUQiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJLZXJiZXJvcyA1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tT WVNMT0cgKi8KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogU1NMX0tSQjUg Ki8KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRm KCJBdXRoZW50aWNhdGVkIHVzaW5nIFguNTA5IGNlcnRpZmljYXRlXHJcbiIpOworI2lmZGVmIENL U1lTTE9HCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0xJ ICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hh ciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9WQUxJRCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlguNTA5IGNlcnRpZmljYXRlIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisj ZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyAlc1xyXG4iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNrX3RuX2F1dGhlbnRp Y2F0ZWQoKSkpOworI2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGNr eHN5c2xvZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAgICAgICAg ICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9WQUxJRCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tfdG5fYXV0aGVu dGljYXRlZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFt ZUF1dGhlbnRpY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB6dnVzZXIodWlkYnVmKTsKKyAgICAgICAgICAgICAg ICBpZiAoenZwYXNzKCIiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgeF9sb2dnZWQgPSAwOwor ICAgICAgICAgICAgfSBlbHNlIGlmICh4X2xvZ2dlZCA9PSBBVVRIX1VTRVIgJiYgIXN0cmNtcCh1 aWRidWYsImFub255bW91cyIpKSB7CisgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2Vy TmFtZUF1dGhlbnRpY2F0ZWRbXTsKKyAgICAgICAgICAgICAgICB6dnVzZXIodWlkYnVmKTsKKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzelVzZXJOYW1lQXV0aGVudGljYXRlZCIsCisgICAg ICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsMCk7CisgICAgICAgICAg ICAgICAgaWYgKHp2cGFzcyhzelVzZXJOYW1lQXV0aGVudGljYXRlZCkgPT0gMCkgeworICAgICAg ICAgICAgICAgICAgLyogQW5vbnltb3VzIGxvZ2luIGZhaWxlZC4gIEZvcmNlIGEgdXNlcm5hbWUg cHJvbXB0LiAqLworICAgICAgICAgICAgICAgICAgeF9sb2dnZWQgPSAwOworICAgICAgICAgICAg ICAgICAgdWlkYnVmWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVm IENLX1NTTAorICAgICAgICAgICAgICAgICAgICBpZiAoKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNf YWN0aXZlX2ZsYWcpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoIVRFTE9QVF9VKFRFTE9Q VF9BVVRIRU5USUNBVElPTikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBja190bl9hdXRo ZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfTlVMTCB8fAorICAgICAgICAgICAgICAgICAgICAgICAg IGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9BVVRPKSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nIFguNTA5IGNlcnRpZmljYXRl XHJcbiIpOworI2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2t4 c3lzbG9nID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9VU0VSIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWC41MDkgY2VydGlmaWNhdGUiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNh dGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAgICAgICAgICAg ICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyAlc1xy XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190 bl9hdXRoZW50aWNhdGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor I2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cg Pj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1VTRVIiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190bl9hdXRoZW50aWNhdGVkKCkp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhl bnRpY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor I2lmZGVmIENLU1lTTE9HCisgICAgICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19M SSAmJiBja3hsb2dnaW5nICYmCisgICAgICAgICAgICAgICAgICAgIHhfbG9nZ2VkID09IEFVVEhf VVNFUikgeworICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVu dGljYXRlZFtdOworICAgICAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFV VEhfVVNFUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tf dG5fYXV0aGVudGljYXRlZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2Vy TmFtZUF1dGhlbnRpY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgICAgICAgICB4X2xv Z2dlZCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoIih1bmtub3duKSIsdWlkYnVm KQorI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgICAgIHx8ICFzdHJpY21wKCJhZG1pbmlzdHJh dG9yIix1aWRidWYpCisjaWZkZWYgVU5JWAorICAgICAgICAgICAgICAgICAgICB8fCAhc3RyY21w KCJyb290Iix1aWRidWYpCisjZWxzZQorI2lmZGVmIFBsYW45CisgICAgICAgICAgICAgICAgICAg IHx8ICFzdHJjbXAoInJvb3QiLHVpZGJ1ZikKKyNlbHNlCisjaWZkZWYgT1NLCisgICAgICAgICAg ICAgICAgICAgIHx8ICFzdHJjbXAoInJvb3QiLHVpZGJ1ZikKKyNlbmRpZiAvKiBPU0sgKi8KKyNl bmRpZiAvKiBQbGFuOSAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBOVCAqLworICAg ICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICB1aWRidWZbMF0gPSAnXDAnOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8K KyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2 ZXIpCisgICAgICAgICAgcHJpbnRmKCJcclxuSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgcmVhZHkg YXQgJXMlc1xyXG4iLHMsdmVyc2lvKTsKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIElLU0QgKi8K KyAgICAgICAgICBwcmludGYoIlxyXG5DLUtlcm1pdCByZWFkeSBhdCAlcyVzXHJcbiIscyx2ZXJz aW8pOworICAgICAgICBpZiAoKm15aG9zdCkKKyAgICAgICAgICBwcmludGYoIiVzXHJcbiIsIG15 aG9zdCk7CisgICAgICAgIHByaW50ZigiXHJcbiIpOworICAgIH0KKyNpZmRlZiBDS19MT0dJTgor I2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAg IGV4dGVybiBpbnQgYXJnX3g7ICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgJy14JyBvbiBjb21t YW5kIGxpbmUgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBtdGFiICpt YWN0YWI7ICAgICAgICAgLyogRm9yIE9OX0xPR0lOIG1hY3JvLiAqLworICAgICAgICBleHRlcm4g aW50IG5tYWM7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgICAgICBkZWJ1ZyhGMTEwLCJNQUlO IGNsaWVudGhvc3QiLGNsaWVudGhvc3QsMCk7CisgICAgICAgIHNydmlkbCA9IHRpbWVsaW1pdCA9 IGxvZ2ludGltbzsgLyogRm9yIGludGVyYWN0aXZlIGxvZ2luICovCisgICAgICAgIHJ0aW1lcigp OyAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGltZXIgKi8KKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IGlrc19yZXRyeSAmJiAheF9sb2dnZWQ7IGkrKykgeyAvKiBDb3VudCByZXRyaWVz ICovCisgICAgICAgICAgICBpZiAoZ3RpbWVyKCkgPiBsb2dpbnRpbW8pCisgICAgICAgICAgICAg IGJyZWFrOworI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgdG5fd2FpdCgibG9naW4gbG9vcCIp OworICAgICAgICAgICAgdG5fcHVzaCgpOworI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICAg ICAgZGVidWcoRjEwMSwiTUFJTiBMT0dJTiB0cnkiLCIiLGkpOworICAgICAgICAgICAgd2hhdCA9 IFdfTk9USElORzsgICAgICAgICAgIC8qIEJlY2F1c2UgcHJvdG8oKSBjaGFuZ2VzIHRoaXMgKi8K KworI2lmZGVmIElLU19PUFRJT04KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIk1BSU4gTE9HSU4i LAorICAgICAgICAgICAgICAgICAgIlRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVf c3RhcnQiLAorICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1p dC5tZV9zdGFydAorICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIC8qIEtlcm1pdCBz ZXJ2ZXIgbmVnb3RpYXRlZCAqLworICAgICAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfS0VS TUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJJS1NE IHN0YXJ0aW5nIGluIHNlcnZlciBtb2RlIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBhcmdfeCA9 IDE7ICAgICAgICAgICAgICAvKiBFbnRlciBzZXJ2ZXIgbW9kZSAqLworICAgICAgICAgICAgICAg IHNzdGF0ZSA9ICd4JzsKKyNpZmRlZiBJS1NEUE9QQkFDSworICAgICAgICAgICAgICAgIGp1c3Rv bmUgPSAxOyAgICAgICAgICAgIC8qIEV4ZWN1dGUgb25lIGNvbW1hbmQgYXQgYSB0aW1lLiAqLwor I2VuZGlmIC8qIElLU0RQT1BCQUNLICovCisgICAgICAgICAgICAgICAgcHJvdG8oKTsgICAgICAg ICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLworI2lmZGVmIE5UU0lH CisgICAgICAgICAgICAgICAgY2tfaWgoKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICAg ICAgICAgIGlmICh4X2xvZ2dlZCkgICAgICAgICAgIC8qIExvZ2dlZCBpbiAqLworICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg LyogTm90IGluIGNsaWVudC9zZXJ2ZXIgbW9kZSAqLworI2VuZGlmIC8qIElLU19PUFRJT04gKi8K KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJJS1NEIHN0YXJ0aW5nIHdpdGggVXNlcm5hbWUg cHJvbXB0IiwiIiwwKTsKKyAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9IGNreGxvZ2luKChDSEFS ICopdWlkYnVmLE5VTEwsTlVMTCwxKTsKKyAgICAgICAgICAgICAgICBpZiAoc3N0YXRlKSB7ICAg ICAgICAgICAvKiBSZWNlaXZlZCBhIHBhY2tldCBhdCBwcm9tcHQgKi8KKyNpZmRlZiBJS1NEUE9Q QkFDSworICAgICAgICAgICAgICAgICAgICBqdXN0b25lID0gMTsgICAgICAgIC8qIEdvIGhhbmRs ZSBpdCAqLworI2VuZGlmIC8qIElLU0RQT1BCQUNLICovCisgICAgICAgICAgICAgICAgICAgIHBy b3RvKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgheF9sb2dnZWQp IHsgICAgICAgIC8qIEluIGNhc2Ugd2UgYXJlIGF0IHRoZSBwcm9tcHQuLi4gKi8KKyAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCJBY2Nlc3MgZGVuaWVkLlxuIik7CisgICAgICAgICAgICAgICAg ICAgIHVpZGJ1ZlswXSA9ICdcMCc7ICAgLyogRm9yZ2V0IHRoZSBuYW1lIGlmIHdlIGhhdmUgb25l ICovCisgICAgICAgICAgICAgICAgfQorI2lmZGVmIElLU19PUFRJT04KKyAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgICAgIH0KKyAgICAgICAgc3J2aWRsID0gdGlt ZWxpbWl0ID0gaWtzX3RpbW87ICAvKiBSZXNldCBjb21tYW5kIHRpbWVsaW1pdCAqLworICAgICAg ICBkZWJ1ZyhGMTAxLCJNQUlOIExPR0lOIiwiIix4X2xvZ2dlZCk7CisgICAgICAgIGlmICgheF9s b2dnZWQpIHsgICAgICAgICAgICAgICAgLyogTG9naW5zIGZhaWxlZC4gKi8KKyAgICAgICAgICAg IGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KQorICAgICAgICAg ICAgICBlcnJwa3QoKENIQVIgKikiTG9naW4gVGltZW91dCIpOworICAgICAgICAgICAgbXNsZWVw KDUwMCk7CisgICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMCk7CisgICAgICAgIH0KKyAgICAg ICAgd2hhdCA9IFdfTk9USElORzsgICAgICAgICAgICAgICAvKiBTdGF5IGluIGtub3duIHN0YXRl ICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgICAgIGlmIChpc2d1ZXN0KSB7CisgICAgICAgICAg ICBlbl9wcmkgPSAwOyAgICAgICAgICAgICAgICAgLyogTm8gcHJpbnRpbmcgZm9yIGFub255bW91 cyB1c2VycyAqLworICAgICAgICAgICAgZW5fbWFpID0gMDsgICAgICAgICAgICAgICAgIC8qIE5v IGVtYWlsIGZvciBhbm9ueW1vdXMgdXNlcnMgKi8KKyAgICAgICAgICAgIGVuX21rZCA9IDA7ICAg ICAgICAgICAgICAgICAvKiBPciBkaXJlY3RvcnkgY3JlYXRpb24gKi8KKyAgICAgICAgICAgIGVu X3JtZCA9IDA7ICAgICAgICAgICAgICAgICAvKiBPciBkaXJlY3RvcnkgcmVtb3ZhbCAqLworICAg ICAgICAgICAgZW5fZW5hID0gMDsgICAgICAgICAgICAgICAgIC8qIE9yIEVOQUJMaW5nIERJU0FC TEVkIGl0ZW1zICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisjaWZuZGVm IE5PU1BMCisvKgorICBJZiBhIG1hY3JvIG5hbWVkICJvbl9sb2dpbiIgaXMgZGVmaW5lZCwgZXhl Y3V0ZSBpdC4gIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhlCisgIG1hY3JvIHRhYmxlIHNvIHRoZSB1 c2VyIGNhbm5vdCBzZWUgd2hhdCBpdCBkb2VzLiAgRXhlY3V0ZSBpdCBhcyBwYXJ0IG9mIHRoZQor ICBpa3NkLmNvbmYgZmlsZS4KKyovCisgICAgICAgIGlmIChubWFjKSB7ICAgICAgICAgICAgICAg ICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLworICAgICAgICAgICAgaW50IGs7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFllcyAqLworICAgICAgICAgICAgY2hhciAqIGNtZCA9ICJvbl9s b2dpbiI7ICAgIC8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9yICovCisgICAgICAgICAgICBrID0g bWxvb2sobWFjdGFiLGNtZCxubWFjKTsgLyogTG9vayB1cCAib25fbG9naW4iICovCisgICAgICAg ICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCisjaWZkZWYg SUtTRENPTkYKKyAgICAgICAgICAgICAgICBpbnQgc2F2ZWQgPSBpa3NkY2Y7CisgICAgICAgICAg ICAgICAgaWtzZGNmID0gMDsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworICAgICAgICAgICAgICAg IGlmIChkb2RvKGssIiIsMCkgPiAtMSkgIC8qIHNldCBpdCB1cCwgKi8KKyAgICAgICAgICAgICAg ICAgIHBhcnNlcigxKTsgICAgICAgICAgICAvKiBleGVjdXRlIGl0ICovCisjaWZkZWYgSUtTRENP TkYKKyAgICAgICAgICAgICAgICBpa3NkY2YgPSBzYXZlZDsKKyNlbmRpZiAvKiBJS1NEQ09ORiAq LworICAgICAgICAgICAgICAgIGRlbG1hYyhjbWQsMSk7ICAgICAgICAgIC8qIGFuZCBkZWxldGUg aXQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAg fSAvKiBpZiAoaW5zZXJ2ZXIpICovCisjZWxzZSAvKiBDS19MT0dJTiAqLworICAgIGlmIChpbnNl cnZlcikKKyAgICAgICAgc3J2aWRsID0gdGltZWxpbWl0ID0gaWtzX3RpbW87ICAvKiBTZXQgaWRs ZSBsaW1pdHMgZm9yIElLUyAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtT RCAqLworfQorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWxjbWRsaW5lKHZvaWQgKiBmb28p CisjZWxzZSAvKiBDS19BTlNJQyAqLworZmFpbGNtZGxpbmUoZm9vKSBWT0lEICogZm9vOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7CisjaWZkZWYgR0VNRE9TCisgICAgY2NfY2xlYW4oKTsKKyNl bmRpZiAvKiBHRU1ET1MgKi8KKyNpZm5kZWYgTk9MT0NBTAorICAgIGlmIChjbmZsZykgZG9jb25l Y3QoMCwwKTsgICAgICAgICAgIC8qIGNvbm5lY3QgYWdhaW4gaWYgcmVxdWVzdGVkLiAqLworICAg IGlmICh0dGNoaygpIDwgMCkKKyAgICAgIGRvbG9nZW5kKCk7CisjZW5kaWYgLyogTk9MT0NBTCAq LworfQorI2VuZGlmIC8qIE5PQ01ETCAqLworCisjaWZuZGVmIE5PSUNQCitWT0lECisjaWZkZWYg Q0tfQU5TSUMKK2RvdGFrZWluaSh2b2lkICogdGhyZWFkaW5mbykgICAgICAgICAgICAvKiBFeGVj dXRlIGluaXQgZmlsZS4gKi8KKyNlbHNlICAvKiBDS19BTlNJQyAqLworZG90YWtlaW5pKHRocmVh ZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOyAvKiBFeGVjdXRlIGluaXQgZmlsZS4gKi8KKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworLyogZG90YWtlaW5pICovIHsKKyNpZmRlZiBOVFNJRworICAgIHNl dGludCgpOworICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAgICAgICAgIC8qIFRocmVh ZCBsb2NhbCBzdG9yYWdlLi4uICovCisgICAgICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFk aW5mbyk7CisgICAgICAgZGVidWcoRjEwMCwgImRvdGFrZWluaSBjYWxsZWQgd2l0aCB0aHJlYWRp bmZvIGJsb2NrIiwiIiwgMCk7CisgICAgfSBlbHNlCisgICAgICBkZWJ1ZyhGMTAwLCAiZG90YWtl aW5pIC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOworI2VuZGlmIC8qIE5UU0lHICovCisj aWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAorI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIp CisgICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8qIE5UICov CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICBjbWRpbmkoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTZXRzIHRsZXZlbCAqLworCisgICAgZGVidWcoRjExMSwiZG90YWtlaW5pIiwi aW5zZXJ2ZXIiLGluc2VydmVyKTsKKyAgICBkZWJ1ZyhGMTExLCJkb3Rha2VpbmkiLCJzc3RlbG5l dCIsc3N0ZWxuZXQpOworCisjaWZkZWYgQ09NTUVOVAorLyogV3JvbmcgcGxhY2UgZm9yIHRoaXMu Li4gKi8KKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfRkFTVAorICAgIGRvZmFzdCgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ5IG5vdyBGQVNUIGRlZmF1bHRzIHNob3VsZCBiZSBP SyAqLworI2VuZGlmIC8qIENLX0ZBU1QgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyAgICBkb2luaXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBOb3cgZG8gdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJtYWlu IGV4ZWN1dGluZyBpbml0IGZpbGUiLCIiLHRsZXZlbCk7CisgICAgd2hpbGUgKHRsZXZlbCA+IC0x KSB7CisgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMSk7ICAgICAgLyogRXhlY3V0ZSBv bmUgY29tbWFuZCBhdCBhIHRpbWUuICovCisgICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7ICAg ICAgICAgICAgLyogRW50ZXIgcHJvdG9jb2wgaWYgcmVxdWVzdGVkLiAqLworI2lmZGVmIE5UU0lH CisgICAgICAgIGNrX2loKCk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICB9CisgICAgZGVidWco RjEwMSwibWFpbiBleGl0cyBpbml0IGZpbGUiLCIiLHRsZXZlbCk7CisKKyNpZmRlZiBOVFNJRwor ICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgcmV0 dXJuOworfQorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWx0YWtlaW5pKHZvaWQgKiB0aHJl YWRpbmZvKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2ZhaWx0YWtlaW5pKHRocmVhZGluZm8pIFZP SUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBmYWlsdGFrZWluaSAq LyB7CisjaWZkZWYgR0VNRE9TCisgICAgY2NfY2xlYW4oKTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQXRhcmk6IENsZWFuIHVwIGFmdGVyIF5DLXRyYXAuICovCisjZW5kaWYgLyogR0VNRE9T ICovCisgICAgZml4Y21kKCk7CisgICAgaWYgKCFjZmlsZWYpIHsKKyAgICAgICAgY29ub2xsKCJJ bnRlcnJ1cHRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb3IgXAorY29tbWFuZC1saW5lIHByb2Nl c3NpbmcuIik7CisgICAgICAgIGNvbm9sbCgiQy1LZXJtaXQgcXVpdHRpbmcuLi4iKTsKKyAgICB9 CisgICAgZG9leGl0KEJBRF9FWElULC0xKTsgICAgICAgICAgICAgICAgLyogRXhpdCB3aXRoIGJh ZCBzdGF0dXMuICovCit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZG9pY3Aodm9pZCAqIHRo cmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZG9pY3AodGhyZWFkaW5mbykgVk9JRCAq IHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvaWNwICovIHsKKyNpZmRl ZiBOVFNJRworICAgIHNldGludCgpOworICAgIGlmICh0aHJlYWRpbmZvKSB7ICAgICAgICAgICAg ICAgICAgIC8qIFRocmVhZCBsb2NhbCBzdG9yYWdlLi4uICovCisgICAgICAgaWYgKCFUbHNTZXRW YWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKSkKKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2ljcCBU bHNTZXRWYWx1ZSBmYWlsZWQiLCIiLEdldExhc3RFcnJvcigpKTsKKyAgICAgICBkZWJ1ZyhGMTAx LCAiZG9pY3AgYSB0aHJlYWRpbmZvIGJsb2NrIC0gVGxzSW5kZXgiLCAiIiwgVGxzSW5kZXgpOwor ICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMDAsICJkb2ljcCByZWNlaXZlZCBhIG51bGwg dGhyZWFkaW5mbyIsICIiLCAwKTsKKyAgICB9CisjZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBD S19MT0dJTgorI2lmZGVmIE5UCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikKKyAgICAg IHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogTlQgKi8KKyNlbmRp ZiAvKiBDS19MT0dJTiAqLworI2lmZGVmIE1BQworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGV4 dGVybiBjaGFyICpsZmlsZXM7ICAgICAgICAgICAgLyogRmFrZSBwb2ludGVyIGNhc3QgKi8KKwor ICAgICAgICBpZiAoY29ubmVjdGVkKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9pY3A6 IGNhbGxpbmcgbWFjcGFyc2VyIiwgIiIsIDApOworICAgICAgICAgICAgc3N0YXRlID0gbmV3cGFy c2VyKDEsIDEsIDBMKTsKKworICAgICAgICAgICAgLyogaWdub3JlIG51bGwgY29tbWFuZCBzdGF0 ZSAqLworICAgICAgICAgICAgaWYgKHNzdGF0ZSA9PSAnbicpCisgICAgICAgICAgICAgIHNzdGF0 ZSA9ICdcMCc7CisKKyAgICAgICAgICAgIGlmIChzc3RhdGUpCisgICAgICAgICAgICAgIHByb3Rv KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogcHJv Y2VzcyB0YWtlIGZpbGVzIHRoZSBmaW5kZXIgZ2F2ZSB1cy4KKyAgICAgICAgICAgICAqLworICAg ICAgICAgICAgaWYgKCh0bGV2ZWwgPT0gLTEpICYmIGxmaWxlcykKKyAgICAgICAgICAgICAgc3Rh cnRsZmlsZSgpOworCisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCAiZG9pY3A6IGNhbGxpbmcgcGFy c2VyIiwgIiIsIDApOworICAgICAgICAgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigwKTsKKyAg ICAgICAgICAgIGlmIChzc3RhdGUgPT0gJ2MnKSAgICAgICAgICAvKiBpZiBNQUMgY29ubmVjdCAq LworICAgICAgICAgICAgICBzc3RhdGUgPSAwOworICAgICAgICAgICAgaWYgKHNzdGF0ZSkKKyAg ICAgICAgICAgICAgcHJvdG8oKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlIC8qIE5vdCBNQUMg Ki8KKworI2lmbmRlZiBOT1NQTAorLyoKKyAgSWYgaW50ZXJhY3RpdmUgY29tbWFuZHMgd2VyZSBn aXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lICh1c2luZyB0aGUKKyAgLUMgImNvbW1hbmQsIGNvbW1h bmQsIC4uLiIgb3B0aW9uKSwgYXNzaWduIHRoZW0gdG8gYSBtYWNybyBjYWxsZWQKKyAgImNsX2Nv bW1hbmRzIiwgdGhlbiBleGVjdXRlIHRoZSBtYWNybyBhbmQgbGVhdmUgaXQgZGVmaW5lZCBmb3IK KyAgc3Vic2VxdWVudCByZS1leGVjdXRpb24gaWYgZGVzaXJlZC4KKyovCisgICAgaWYgKGNsY21k cykgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIC1DIGNvbW1hbmRzICovCisg ICAgICAgIGludCB4OworICAgICAgICB4ID0gYWRkbWFjKCJjbF9jb21tYW5kcyIsY2xjbWRzKTsg LyogUHV0IG1hY3JvIGluIHRhYmxlICovCisgICAgICAgIGlmICh4ID4gLTEpIHsgICAgICAgICAg ICAgICAgICAgLyogSWYgc3VjY2Vzc2Z1bCwgKi8KKyAgICAgICAgICAgIGRvZG8oeCxOVUxMLENG X0NNREwpOyAgICAgICAvKiBzZXQgdXAgZm9yIG1hY3JvIGV4ZWN1dGlvbiAqLworICAgICAgICAg ICAgd2hpbGUgKG1hY2x2bCA+IC0xKSB7ICAgICAgIC8qIExvb3AgZ2V0dGluZyBtYWNybyBjb21t YW5kcy4gKi8KKyAgICAgICAgICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDEpOworICAg ICAgICAgICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7ICAgIC8qIEVudGVyIHByb3RvY29sIGlm IHJlcXVlc3RlZC4gKi8KKyNpZmRlZiBOVFNJRworICAgICAgICAgICAgICAgIGNrX2loKCk7Cisj ZW5kaWYgLyogTlRTSUcgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWJ1 ZyhGMTAwLCJkb2ljcCBjYWxsaW5nIGhlcmFsZCIsIiIsMCk7CisgICAgICAgIGhlcmFsZCgpOwor ICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHdoaWxlKDEpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIExvb3AgZ2V0dGluZyBjb21tYW5kcy4gKi8KKyAgICAgICAgc3N0YXRlID0g KENIQVIpIHBhcnNlcigwKTsKKyAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsgICAgICAgICAg ICAvKiBFbnRlciBwcm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCisjaWZkZWYgTlRTSUcKKyAgICAg ICBja19paCgpOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgfQorI2lmZGVmIE5UU0lHCisgICAg Y2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyNlbmRpZiAvKiBN QUMgKi8KK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitmYWlsaWNwKHZvaWQgKiB0aHJlYWRp bmZvKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2ZhaWxpY3AodGhyZWFkaW5mbykgVk9JRCAqIHRo cmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBHRU1ET1MKKyAgICBj Y19jbGVhbigpOworI2VuZGlmIC8qIEdFTURPUyAqLworICAgIGZpeGNtZCgpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFBvcCBjb21tYW5kIHN0YWNrcywgZXRjLiAqLworICAgIGNsY21k cyA9IE5VTEw7CisgICAgZGVidWcoRjEwMCwiY2tjbWFpIGdvdCBpbnRlcnJ1cHQiLCIiLDApOwor fQorI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9JQ1AKK1ZPSUQKKyNpZmRlZiBDS19B TlNJQworZG9jbWRmaWxlKHZvaWQgKiB0aHJlYWRpbmZvKSAgICAgICAgICAgIC8qIEV4ZWN1dGUg YXBwbGljYXRpb24gZmlsZSAqLworI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2RvY21kZmlsZSh0aHJl YWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9j bWRmaWxlICovIHsKKyNpZmRlZiBOVFNJRworICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7CisgICAg c2V0aW50KCk7CisgICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAgICAgICAgLyogVGhy ZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICAgVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhy ZWFkaW5mbyk7CisgICAgICAgIGRlYnVnKEYxMDAsICJkb2NtZGZpbGUgY2FsbGVkIHdpdGggdGhy ZWFkaW5mbyBibG9jayIsIiIsIDApOworICAgIH0gZWxzZSBkZWJ1ZyhGMTAwLCAiZG9jbWRmaWxl IC0gdGhyZWFkaW5mbyBpcyBOVUxMIiwgIiIsIDApOworI2VuZGlmIC8qIE5UU0lHICovCisjaWZk ZWYgQ0tfTE9HSU4KKyNpZmRlZiBJS1NECisjaWZkZWYgTlQKKyAgICBpZiAoaW5zZXJ2ZXIpCisg ICAgICBzZXRudGNyZWRzKCk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBJS1NEICovCisj ZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICBkZWJ1ZyhGMTEwLCJtYWluIGNtZGZpbCIsY21kZmls LDApOworI2lmbmRlZiBOT1NQTAorICAgIGFkZG1hYygiXFwlMCIsY21kZmlsKTsKKyNlbmRpZiAv KiBOT1NQTCAqLworICAgIGRvdGFrZShjbWRmaWwpOwkJCS8qIFNldCB1cCB0aGUgY29tbWFuZCBm aWxlICovCisgICAgaWYgKHRsZXZlbCA+IC0xKQkJCS8qIFJlbWVtYmVyIHdlIGRpZCB0aGlzICov CisgICAgICBjZmlsZWYgPSAxOworICAgIHdoaWxlICh0bGV2ZWwgPiAtMSkgeyAgICAgICAgICAg ICAgIC8qIEV4ZWN1dGUgaXQgdW50aWwgaXQgcnVucyBvdXQuICovCisgICAgICAgIHNzdGF0ZSA9 IHBhcnNlcigxKTsgICAgICAgICAgICAgLyogTG9vcCBnZXR0aW5nIGNvbW1hbmRzLiAqLworICAg ICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAgICAgICAgIC8qIEVudGVyIHByb3RvY29sIGlm IHJlcXVlc3RlZC4gKi8KKyNpZmRlZiBOVFNJRworICAgICAgICBja19paCgpOworI2VuZGlmIC8q IE5UU0lHICovCisgICAgfQorCisjaWZkZWYgTlRTSUcKKyAgICBja1RocmVhZEVuZCh0aHJlYWRp bmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgIHJldHVybjsKK30KKworVk9JRAorI2lmZGVm IENLX0FOU0lDCitmYWlsY21kZmlsZSh2b2lkICogdGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FO U0lDICovCitmYWlsY21kZmlsZSh0aHJlYWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworLyogZmFpbGNtZGZpbGUgKi8geworI2lmZGVmIEdFTURPUworICAg IGNjX2NsZWFuKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF0YXJpOiBDbGVhbiB1cCBh ZnRlciBeQy10cmFwLiAqLworI2VuZGlmIC8qIEdFTURPUyAqLworICAgIGZpeGNtZCgpOworICAg IGlmICghY2ZpbGVmKSB7CisJY29ub2xsKCJJbnRlcnJ1cHRlZCBkdXJpbmcgaW5pdGlhbGl6YXRp b24gb3IgXAorY29tbWFuZC1saW5lIHByb2Nlc3NpbmcuIik7CisJY29ub2xsKCJDLUtlcm1pdCBx dWl0dGluZy4uLiIpOworICAgIH0KKyAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOyAgICAgICAgICAg ICAgICAvKiBFeGl0IHdpdGggYmFkIHN0YXR1cy4gKi8KK30KKyNlbmRpZiAvKiBOT0lDUCAqLwor CisjaWZuZGVmIE5PWEZFUgorVk9JRAorc2V0cHJlZml4KHopIGludCB6OyB7ICAgICAgICAgICAg ICAgICAgIC8qIEluaXRpYWwgY29udHJvbC1jaGFyIHByZWZpeGluZyAqLworI2lmZGVmIENLX1NQ RUVECisgICAgaW50IGksIHZhbDsKKworICAgIHByZWZpeGluZyA9IHo7CisgICAgcHRhYltwcm90 b2NvbF0ucHJlZml4ID0gcHJlZml4aW5nOworICAgIGRlYnVnKEYxMDEsInNldHByZWZpeCIsIiIs cHJlZml4aW5nKTsKKyAgICBzd2l0Y2ggKHopIHsKKyAgICAgIGNhc2UgUFhfQUxMOiAgICAgICAg ICAgICAgICAgICAgICAvKiBBbGwgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIC8qIERvbid0 IGxldCBDbGVhci1DaGFubmVsIGJlIGRlcGVuZGVudCBvbiBwcmVmaXhpbmcgKi8KKyAgICAgICAg Y2xlYXJycSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBjbGVhcmNoYW5uZWws IGZhbGwgdGhydSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgIGNhc2UgUFhfTk9OOiAg ICAgICAgICAgICAgICAgICAgICAvKiBOb25lICovCisgICAgICAgIHZhbCA9ICh6ID09IFBYX0FM TCkgPyAxIDogMDsKKyAgICAgICAgZm9yIChpID0KKyNpZmRlZiBVTlBSRUZJWFpFUk8KKyAgICAg ICAgICAgICAwCisjZWxzZQorICAgICAgICAgICAgIDEKKyNlbmRpZiAvKiBVTlBSRUZJWFpFUk8g Ki8KKyAgICAgICAgICAgICA7IGkgPCAzMjsgaSsrKQorICAgICAgICAgIGN0bHBbaV0gPSB2YWw7 CisgICAgICAgIGZvciAoaSA9IDEyNzsgaSA8IDE2MDsgaSsrKSBjdGxwW2ldID0gdmFsOworICAg ICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0gdmFsOworICAgICAgICBpZiAoeiA9PSBQWF9OT04p IHsgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSBuZXZlciBzYWZlICovCisgICAgICAgICAgICBp ZiAobmV0d29yaykgeyAgICAgICAgICAgICAgLyogQXNzdW1lIG5ldHdvcmsgPSB0ZWxuZXQgb3Ig cmxvZ2luICovCisgICAgICAgICAgICAgICAgY3RscFtDUl0gPSAxOyAgICAgICAgICAgLyogUHJl Zml4IENSIGJlY2F1c2Ugb2YgTlZUIHJ1bGVzICovCisgICAgICAgICAgICAgICAgY3RscFtYT05d ID0gY3RscFtYT0ZGXSA9IDE7IC8qIEJlY2F1c2Ugb2YgVGVsbmV0IHNlcnZlciAqLworICAgICAg ICAgICAgICAgIGN0bHBbMTI3XSA9IGN0bHBbMjU1XSA9IDE7ICAvKiBUZWxuZXQgSUFDICovCisg ICAgICAgICAgICAgICAgY3RscFtteXN0Y2hdID0gY3RscFtteXN0Y2grMTI4XSA9IDE7IC8qIEtl cm1pdCBwYWNrZXQgc3RhcnQgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgY3RscFtDUl0gPSBjdGxwWzI1NV0gPSBjdGxwW215c3RjaF0gPSBjdGxwW215c3RjaCsxMjhd ID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCkgICAgICAgLyogWG9u L1hvZmYgZm9yY2VzIHByZWZpeGluZyAqLworICAgICAgICAgICAgICAgICAgY3RscFtYT05dID0g Y3RscFtYT0ZGXSA9IGN0bHBbWE9OKzEyOF0gPSBjdGxwW1hPRkYrMTI4XSA9IDE7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFhfQ0FVOiAg ICAgICAgICAgICAgICAgICAgICAvKiBDYXV0aW91cyBvciBNaW5pbWFsICovCisjaWZkZWYgQ09N TUVOVAorICAgICAgICAvKiBEb24ndCBsZXQgQ0xFQVItQ0hBTk5FTCBiZSBkZXBlbmRlbnQgb24g UHJlZml4aW5nICovCisgICAgICAgIGNsZWFycnEgPSAwOyAgICAgICAgICAgICAgICAgICAgLyog VHVybiBvZmYgY2xlYXJjaGFubmVsICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgY2Fz ZSBQWF9XSUw6ICAgICAgICAgICAgICAgICAgICAgIC8qIE1pbmltYWwgKCJ3aWxkIikgKi8KKyAg ICAgICAgY3RscFswXSA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5vdCBpbmNsdWRl IDAgKi8KKyAgICAgICAgZm9yIChpID0gMTsgaSA8IDMyOyBpKyspCisgICAgICAgICAgY3RscFtp XSA9IDA7CisgICAgICAgIGZvciAoaSA9IDEyNzsgaSA8IDE2MDsgaSsrKQorICAgICAgICAgIGN0 bHBbaV0gPSAwOworICAgICAgICBjdGxwW215c3RjaF0gPSBjdGxwW215c3RjaCsxMjhdID0gMTsg LyogS2VybWl0IHN0YXJ0IG9mIHBhY2tldCAqLworICAgICAgICBpZiAoc2VvbCAhPSAxMykKKyAg ICAgICAgICBjdGxwW3Nlb2xdID0gY3RscFtzZW9sKzEyOF0gPSAxOyAvKiBLZXJtaXQgZW5kICov CisgICAgICAgIGN0bHBbMTNdID0gY3RscFsxNDFdID0gMTsgICAgICAgLyogSW4gY2FzZSBvZiBU RUxORVQgKE5WVCBydWxlcykgKi8KKyAgICAgICAgY3RscFsodW5zaWduZWQpMjU1XSA9IDE7ICAg ICAgICAvKiBEaXR0byAqLworCisgICAgICAgIC8qIF5ELCBeSiwgXk0sIG9yIF5VIGZvbGxvd2Vk IGJ5IHRpbGRlIHRyaWdnZXIgUmxvZ2luIGVzY2FwZSAqLworCisgICAgICAgIGN0bHBbNF0gID0g Y3RscFs0KzEyOF0gID0gMTsgICAgLyogSW4gY2FzZSBvZiBSTE9HSU4gKi8KKyAgICAgICAgY3Rs cFsxMF0gPSBjdGxwWzEwKzEyOF0gPSAxOyAgICAvKiBJbiBjYXNlIG9mIFJMT0dJTiAqLworICAg ICAgICBjdGxwWzIxXSA9IGN0bHBbMjErMTI4XSA9IDE7ICAgIC8qIEluIGNhc2Ugb2YgUkxPR0lO ICovCisKKyAgICAgICAgaWYgKGZsb3cgPT0gRkxPX1hPTlggfHwgICAgICAgICAvKiBYb24vWG9m ZiBmb3JjZXMgcHJlZml4aW5nIHRoZXNlICovCisgICAgICAgICAgICBwcmVmaXhpbmcgPT0gUFhf Q0FVIHx8ICAgICAgLyogU28gZG9lcyBDQVVUSU9VUyAqLworICAgICAgICAgICAgbmV0d29yaykg ICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmtzIHRvby4uLiAqLworICAgICAgICAgIGN0bHBb WE9OXSA9IGN0bHBbWE9GRl0gPSBjdGxwW1hPTisxMjhdID0gY3RscFtYT0ZGKzEyOF0gPSAxOwor ICAgICAgICBpZiAocHJlZml4aW5nID09IFBYX0NBVSkgeyAgICAgIC8qIENhdXRpb3VzIC0gYWRk IHNvbWUgbW9yZSAqLworI2lmZGVmIFVOUFJFRklYWkVSTworICAgICAgICAgICAgY3RscFswXSA9 IDE7CisjZW5kaWYgLyogVU5QUkVGSVhaRVJPICovCisgICAgICAgICAgICBjdGxwWzNdICAgPSBj dGxwWzE2XSAgPSAxOyAgICAgICAgICAgICAvKiBeQywgRExFICovCisgICAgICAgICAgICBjdGxw WzE0XSAgPSBjdGxwWzE1XSAgPSAxOyAgICAgICAgICAgICAvKiBTTy9TSSAqLworICAgICAgICAg ICAgY3RscFsyNF0gID0gY3RscFsyNV0gID0gMTsgICAgICAgICAgICAgLyogVk1TIG1pZ2h0IG5l ZWQgdGhlc2UgKi8KKyAgICAgICAgICAgIGN0bHBbMjZdICA9IGN0bHBbMjYrMTI4XSA9IDE7ICAg ICAgICAgIC8qIFVOSVggc3VzcGVuZCAqLworICAgICAgICAgICAgY3RscFsyOF0gID0gY3RscFsy OV0gID0gY3RscFszMF0gID0gMTsgLyogQXNzb3J0ZWQgZXNjIGNoYXJzICovCisgICAgICAgICAg ICBjdGxwWzEzMV0gPSBjdGxwWzE0MV0gPSBjdGxwWzE0NF0gPSAxOyAvKiBhbmQgOC1iaXQgdmVy c2lvbnMgKi8KKyAgICAgICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1NV0gPSBjdGxwWzE1Nl0gPSBj dGxwWzE1N10gPSBjdGxwWzE1OF0gPSAxOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg IH0KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCitWT0lE CittYWtldmVyKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSB2ZXJzaW9u IHN0cmluZyBmcm9tIHBpZWNlcyAqLworICAgIGludCB4LCB5OworICAgIGNoYXIgKiBzOworI2lm bmRlZiBPUzIKKyNpZm5kZWYgTUFDCisgICAgY2tfc194dmVyID0gY2tfc192ZXI7ICAgICAgICAg ICAgICAgLyogRmlsbCBpbiBDLUtlcm1pdCB2ZXJzaW9uIG51bWJlciAqLworICAgIGNrX2xfeHZl ciA9IGNrX2xfdmVyOyAgICAgICAgICAgICAgIC8qIGZvciBVTklYLCBWTVMsIGV0Yy4gKi8KKyNl bmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB4ID0gc3RybGVuKGNrX3NfbmFt ZSk7CisgICAgeSA9IHN0cmxlbihja19zX3h2ZXIpOworICAgIGlmICh5ICsgeCArIDEgPCBDS1ZF UkxFTikgeworICAgICAgICBja21ha21zZyh2ZXJzaW8sQ0tWRVJMRU4sY2tfc19uYW1lLCIgIixj a19zX3h2ZXIsTlVMTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2tzdHJuY3B5KHZlcnNpbywi Qy1LZXJtaXQiLENLVkVSTEVOKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB4ICs9IHkg KyAxOworICAKKyAgICBzID0gIiBPUEVOIFNPVVJDRToiOwkJLyogQy1LZXJtaXQgOS4wIGFuZCBs YXRlciAqLworICAgIHkgPSBzdHJsZW4ocyk7CisgICAgaWYgKENLVkVSTEVOIDwgeCArIHkgKyAx KQorICAgICAgcmV0dXJuOworICAgIGNrc3RybmNhdCh2ZXJzaW8scyxDS1ZFUkxFTik7CisKKyAg ICB4ICs9IHkgKyAxOworICAgIGlmICgqY2tfc193aG8pIHsKKyAgICAgICAgeSA9IHN0cmxlbihj a19zX3dobyk7CisgICAgICAgIGlmIChDS1ZFUkxFTiA8IHggKyB5ICsgMSkKKyAgICAgICAgICBy ZXR1cm47CisgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sIi0iLENLVkVSTEVOKTsKKyAgICAgICAg Y2tzdHJuY2F0KHZlcnNpbyxja19zX3dobyxDS1ZFUkxFTik7CisgICAgfQorICAgIHggKz0geSAr IDE7CisgICAgeSA9IHN0cmxlbihja19zX3Rlc3QpOworICAgIGlmICh5ID4gMCAmJiB5ICsgeCAr IDEgPCBDS1ZFUkxFTikgeworICAgICAgICBja3N0cm5jYXQodmVyc2lvLCIgIixDS1ZFUkxFTik7 CisgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tfc190ZXN0LENLVkVSTEVOKTsKKyAgICAgICAg eCArPSB5ICsgMTsKKyAgICAgICAgeSA9IHN0cmxlbihja19zX3R2ZXIpOworICAgICAgICBpZiAo eSA+IDAgJiYgeSArIHggKyAxIDwgQ0tWRVJMRU4pIHsKKyAgICAgICAgICAgIGNrc3RybmNhdCh2 ZXJzaW8sIi4iLENLVkVSTEVOKTsKKyAgICAgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tfc190 dmVyLENLVkVSTEVOKTsKKyAgICAgICAgICAgIHggKz0geSArIDE7CisgICAgICAgIH0KKyAgICB9 CisgICAgeSA9IHN0cmxlbihja19zX2RhdGUpOworICAgIGlmICh5ID4gMCAmJiB5ICsgeCArIDIg PCBDS1ZFUkxFTikgeworICAgICAgICBja3N0cm5jYXQodmVyc2lvLCIsICIsQ0tWRVJMRU4pOwor ICAgICAgICBja3N0cm5jYXQodmVyc2lvLGNrX3NfZGF0ZSxDS1ZFUkxFTik7CisgICAgfQorICAg IHZlcm51bSA9IGNrX2xfdmVyOworICAgIHh2ZXJudW0gPSBja19sX3h2ZXI7CisgICAgZGVidWco RjExMCwiS2VybWl0IHZlcnNpb24iLHZlcnNpbywwKTsKK30KKwordW5pb24gY2tfc2hvcnQgc2hv cnRieXRlczsgICAgICAgICAgICAgIC8qIEZvciBkZXRlcm1pbmluZyBieXRlIG9yZGVyICovCitp bnQgYnl0ZW9yZGVyID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogMCA9IEJpZyBFbmRpYW47 IDEgPSBMaXR0bGUgRW5kaWFuICovCitpbnQgYmlnZW5kaWFuID0gMTsKKy8qIE5PVEU6IE1VU1Qg QkUgMCBvciAxIC0gbm90aGluZyBlbHNlICovCisKKyNpZm5kZWYgTk9TUEwKKyNkZWZpbmUgU0NS SVBUTEVOIDEwMjQwCisjZW5kaWYJLyogTk9TUEwgKi8KKworI2lmZGVmIE5FVENPTk4KKyNpZm5k ZWYgTk9DTURMCisjaWZuZGVmIE5PVVJMCitWT0lECitkb3VybCgpIHsKKyAgICBpbnQgcmMgPSAw OworICAgIGNoYXIgKiBwb3J0ID0gTlVMTDsKKyAgICBleHRlcm4gaW50IHR0bnByb3RvOworICAg IGV4dGVybiBzdHJ1Y3QgdXJsZGF0YSBnX3VybDsKKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBO T1RFOiBkZWJ1ZygpIGRvZXNuJ3Qgd29yayB5ZXQgLSBtdXN0IHVzZSBwcmludGYncyAqLworICAg IHByaW50ZigiVVJMOiAgJXNcbiIsZ191cmwuc2F2ID8gZ191cmwuc2F2IDogIihub25lKSIpOwor ICAgIHByaW50ZigiVHlwZTogJXNcbiIsZ191cmwuc3ZjID8gZ191cmwuc3ZjIDogIihub25lKSIp OworICAgIHByaW50ZigiVXNlcjogJXNcbiIsZ191cmwudXNyID8gZ191cmwudXNyIDogIihub25l KSIpOworICAgIHByaW50ZigiUGFzczogJXNcbiIsZ191cmwucHN3ID8gZ191cmwucHN3IDogIihu b25lKSIpOworICAgIHByaW50ZigiSG9zdDogJXNcbiIsZ191cmwuaG9zID8gZ191cmwuaG9zIDog Iihub25lKSIpOworLyogIHByaW50ZigiUG9ydDogJXNcbiIsZ191cmwucG9yID8gZ191cmwucG9y IDogIihub25lKSIpOyAqLworICAgIHByaW50ZigiUGF0aDogJXNcbiIsZ191cmwucHRoID8gZ191 cmwucHRoIDogIihub25lKSIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmICghY2tz dHJjbXAoZ191cmwuc3ZjLCJpa3NkIiwtMSwwKSB8fAorICAgICAgICAhY2tzdHJjbXAoZ191cmwu c3ZjLCJrZXJtaXQiLC0xLDApKSB7CisgICAgICAgIGV4dGVybiBjaGFyIHB3YnVmW107CisgICAg ICAgIGV4dGVybiBpbnQgcHdmbGc7CisjaWZkZWYgT1MyCisgICAgICAgIGV4dGVybiBpbnQgcHdj cnlwdDsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgICBpZiAoIWdfdXJsLmhvcykgeworICAg ICAgICAgICAgcHJpbnRmKCI/SW5jb21wbGV0ZSBJS1NEIFVSTFxuIik7CisgICAgICAgICAgICBk b2V4aXQoQkFEX0VYSVQsMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFnX3VybC51c3IpCisg ICAgICAgICAgICBtYWtlc3RyKCZnX3VybC51c3IsImFub255bW91cyIpOworICAgICAgICBpZiAo IWdfdXJsLnBzdykgeworICAgICAgICAgICAgY2hhciAqIHRtcGJ1ZiA9IE5VTEw7CisgICAgICAg ICAgICBpZiAoISh0bXBidWYgPSAoY2hhciAqKW1hbGxvYygxMDI0KSkpCisgICAgICAgICAgICAg ICAgZmF0YWwoImRvdXJsOiBvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICBpZiAoIWNrc3Ry Y21wKGdfdXJsLnVzciwiYW5vbnltb3VzIiwtMSwwKSkgeworICAgICAgICAgICAgICAgIGNrbWFr bXNnKHRtcGJ1ZiwxMDI0LHVpZGJ1ZiwiQCIsbXlob3N0LE5VTEwpOworICAgICAgICAgICAgICAg IG1ha2VzdHIoJmdfdXJsLnBzdyx0bXBidWYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICByZWFkcGFzcygiIFBhc3N3b3JkOiIsdG1wYnVmLDEwMjQpOworICAgICAgICAg ICAgICAgIG1ha2VzdHIoJmdfdXJsLnBzdyx0bXBidWYpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZnJlZSh0bXBidWYpOworICAgICAgICB9CisgICAgICAgIHBvcnQgPSAia2VybWl0IjsK KyAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7CisgICAgICAgIG5ldHR5cGUgPSBORVRfVENQ QjsKKyAgICAgICAgbWRtdHlwID0gLW5ldHR5cGU7CisgICAgICAgIGxvY2FsID0gLTE7CisgICAg ICAgIGNrc3RybmNweSh1aWRidWYsZ191cmwudXNyLFVJREJVRkxFTik7CisgICAgICAgIGlmIChn X3VybC5wc3cpIHsKKyAgICAgICAgICAgIGNrc3RybmNweShwd2J1ZixnX3VybC5wc3csUFdCVUZM KTsKKyAgICAgICAgICAgIHB3ZmxnID0gMTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIHB3Y3J5 cHQgPSAwOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKHR0 bmFtZSwKKyAgICAgICAgICAgICAgICAgVFROQU1MRU4sCisgICAgICAgICAgICAgICAgIGdfdXJs LmhvcywKKyAgICAgICAgICAgICAgICAgIjoiLAorICAgICAgICAgICAgICAgICBnX3VybC5wb3Ig PyBnX3VybC5wb3IgOiBwb3J0LAorICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAg ICAgICk7CisgICAgICAgIHJjID0gdHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApOworICAg ICAgICBpZiAocmMgPiAtMSkgeworICAgICAgICAgICAgbmV0d29yayA9IDE7CisgICAgICAgICAg ICBleGl0b25jbG9zZSA9IDE7CisjaWZkZWYgQ0tMT0dESUFMCisgICAgICAgICAgICBkb2xvZ25l dCgpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgcHJpbnRmKCI/Q29ubmVjdGlvbiBmYWlsZWQ6ICVzXG4iLGdfdXJsLnNhdik7CisgICAgICAg ICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7CisgICAgICAgIH0KKyAgICAgICAgLyogQWxzbyBuZWVk IHRvIGNoZWNrIGhlcmUgZm9yIHNlY3VyZSBhdXRoZW50aWNhdGlvbiBhbHJlYWR5IGRvbmUgKi8K KworI2lmZGVmIE5PU1BMCisgICAgICAgIGNmbGcgPSAxOworI2Vsc2UKKwl7CisgICAgICAgICAg ICBjaGFyICogc2NyaXB0ID0gTlVMTDsKKyAgICAgICAgICAgIGlmICghKHNjcmlwdCA9IChjaGFy ICopbWFsbG9jKFNDUklQVExFTikpKQorICAgICAgICAgICAgICBmYXRhbCgiZG91cmw6IG91dCBv ZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIGlmICghZ191cmwucHRoKSB7ICAgICAgICAgICAvKiBX cml0ZSB0aGUgYXBwcm9wcmlhdGUgc2NyaXB0ICovCisJCWNmbGcgPSAxOworICAgICAgICAgICAg ICAgIGNrbWFreG1zZyhzY3JpcHQsU0NSSVBUTEVOLAorCQkJICAiaWYgbm90IGVxIHtcXHYoYXV0 aHN0YXRlKX0ge3VzZXJ9ICIsCisJCQkgICJpZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7dmFs aWR9IHsgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZSBsb2dpbiAiLCAvKiBO byBwYXRoICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdXJsLnVzciwgICAgICAgLyog SnVzdCBsb2cgaW4gYW5kIENPTk5FQ1QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAi LAorICAgICAgICAgICAgICAgICAgICAgICAgICBnX3VybC5wc3csCisgICAgICAgICAgICAgICAg ICAgICAgICAgICIsIGlmIGZhaWwgZXhpdCAxIHtJS1NEIGxvZ2luIGZhaWxlZH0gfSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICIsIGNvbm5lY3QiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKwkJLyogcHJpbnRmKCJDTENNRFMgMTogJXNcbiIs c2NyaXB0KTsgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogZG9l cyB0aGUgcGF0aCBzcGVjaWZ5IGEgZmlsZSBvciBhIGRpcmVjdG9yeT8gKi8KKyAgICAgICAgICAg ICAgICBpbnQgbGVuID0gc3RybGVuKGdfdXJsLnB0aCk7CisgICAgICAgICAgICAgICAgaWYgKElT RElSU0VQKGdfdXJsLnB0aFtsZW4tMV0pKSB7CisJCSAgICBja21ha3htc2coc2NyaXB0LFNDUklQ VExFTiwgLyogRGlyZWN0b3J5IG5hbWUgZ2l2ZW4gKi8KKwkJCSAgICAgICJpZiBub3QgZXEge1xc dihhdXRoc3RhdGUpfSB7dXNlcn0gXAoraWYgbm90IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3ZhbGlk fSB7IHJlbW90ZSBsb2dpbiAiLAorCQkJICAgICAgZ191cmwudXNyLAorCQkJICAgICAgIiAiLAor CQkJICAgICAgZ191cmwucHN3LAorCQkJICAgICAgIiwgaWYgZmFpbCBleGl0IDEge0lLU0QgbG9n aW4gZmFpbGVkfSB9IiwKKwkJCSAgICAgICIsIHNldCBtYWNybyBlcnJvciBvbiIsCisJCQkgICAg ICAiLCBzZXQgeGZlciBkaXNwbCBicmllZiIsCisJCQkgICAgICAiLCBzZXQgeGZlciBiZWxsIG9m ZiIsCisJCQkgICAgICAiLCByZW1vdGUgY2QgIiwKKwkJCSAgICAgIGdfdXJsLnB0aCwKKwkJCSAg ICAgICIsIGxpbmVvdXQgZGlyZWN0b3J5IiwKKwkJCSAgICAgICIsIGNvbm5lY3QiCisJCQkgICAg ICApOworCQkgICAgLyogcHJpbnRmKCJDTENNRFMgMjogJXNcbiIsc2NyaXB0KTsgKi8KKwkJfSBl bHNlIHsKKwkJICAgIGNrbWFreG1zZyhzY3JpcHQsU0NSSVBUTEVOLCAvKiBQYXRoIGdpdmVuLCB0 cnkgdG8gR0VUICovCisJCQkgICAgICAiaWYgbm90IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3VzZXJ9 IFwKK2lmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9IHt2YWxpZH0geyByZW1vdGUgbG9naW4gIiwK KwkJCSAgICAgIGdfdXJsLnVzciwKKwkJCSAgICAgICIgIiwKKwkJCSAgICAgIGdfdXJsLnBzdywK KwkJCSAgICAgICIsIGlmIGZhaWwgZXhpdCAxIHtJS1NEIGxvZ2luIGZhaWxlZH0gfSIsCisJCQkg ICAgICAiLCBzZXQgeGZlciBkaXNwbCBicmllZiIsCisJCQkgICAgICAiLCBzZXQgeGZlciBiZWxs IG9mZiIsCisJCQkgICAgICAiLCBnZXQgIiwKKwkJCSAgICAgIGdfdXJsLnB0aCwKKwkJCSAgICAg ICIsIC5yYyA6PSBcXHYoc3RhdHVzKSIsCisJCQkgICAgICAiLCBpZiBvcGVuIGNvbm5lY3Rpb24g YnllIiwKKwkJCSAgICAgICIsIGV4aXQgXFxtKHJjKSIKKwkJCSAgICAgICk7CisJCSAgICAvKiBw cmludGYoIkNMQ01EUyAyOiAlc1xuIixzY3JpcHQpOyAqLworCQl9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBjbGNtZHMgPSBzY3JpcHQ7CQkvKiBNYWtlIHRoaXMgb3VyIC1DIGNtZGxpbmUg bWFjcm8gKi8KKwkgICAgLyogcHJpbnRmKCJIQVZFVVJMPSVkXG4iLGhhdmV1cmwpOyAqLworICAg ICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY2tz dHJjbXAoZ191cmwuc3ZjLCJ0ZWxuZXQiLC0xLDApICYmCisjaWZkZWYgU1NIQlVJTFRJTgorICAg ICAgICAgICAgY2tzdHJjbXAoZ191cmwuc3ZjLCJzc2giLC0xLDApICYmCisjZW5kaWYgLyogU1NI QlVJTFRJTiAqLworICAgICAgICAgICAgY2tzdHJjbXAoZ191cmwuc3ZjLCJmdHAiLC0xLDApKSB7 CisgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgJXMgVVJMcyBub3Qgc3VwcG9ydGVkXG4iLAor ICAgICAgICAgICAgICAgICAgIGdfdXJsLnN2YyA/IGdfdXJsLnN2YyA6ICIiKTsKKyAgICAgICAg ICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAvKiBO T0NNREwgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisjZW5kaWYgLyogTk9VUkwgKi8KKworLyoK KyAgbWFpbigpLi4uCisKKyAgSWYgeW91IGdldCBjb21wbGFpbnRzIGFib3V0ICJtYWluOiByZXR1 cm4gdHlwZSBpcyBub3QgYmxhaCIsCisgIGRlZmluZSBNQUlOVFlQRSBvbiB0aGUgQ0MgY29tbWFu ZCBsaW5lLCBlLmcuICJDRkxBR1M9LURNQUlOVFlQRT1ibGFoIgorICAod2hlcmUgImJsYWgiIGlz IGludCwgbG9uZywgb3Igd2hhdGV2ZXIpLgorCisgIElmIHRoZSBjb21wbGFpbnQgaXMgIkF0dGVt cHQgdG8gcmV0dXJuIGEgdmFsdWUgZnJvbSBhIGZ1bmN0aW9uIG9mIHR5cGUgdm9pZCIKKyAgdGhl biBhZGQgLURNQUlOSVNWT0lELgorKi8KKyNpZm5kZWYgTUFJTlRZUEUKKyNpZm5kZWYgTUFJTklT Vk9JRAorI2RlZmluZSBNQUlOVFlQRSBpbnQKKyNlbmRpZiAvKiBNQUlOSVNWT0lEICovCisjZW5k aWYgLyogTUFJTlRZUEUgKi8KKworI2lmZGVmIE1BSU5JU1ZPSUQKKyNpZm5kZWYgTUFJTlRZUEUK KyNkZWZpbmUgTUFJTlRZUEUgdm9pZAorI2VuZGlmIC8qIE1BSU5UWVBFICovCisjZW5kaWYgLyog TUFJTklTVk9JRCAqLworCisjaWZkZWYgYWVnaXMKKy8qIE9uIHRoZSBBcG9sbG8sIGludGVyY2Vw dCBtYWluIHRvIGluc2VydCBhIGNsZWFudXAgaGFuZGxlciAqLworaW50Citja2NtYWkoYXJnYyxh cmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7CisjZWxzZQorI2lmZGVmIE1BQyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1hY2ludG9zaCAqLworaW50CittYWluICh2b2lkKQorI2Vs c2UKKyNpZmRlZiBfX0dOVUNfXyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHQ0MgY29tcGls ZXIgKi8KK2ludAorbWFpbihhcmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKKyNlbHNl CisjaWZkZWYgX19ERUNDICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVDIEFscGhhIHdp dGggREVDIEMgY29tcGlsZXIgKi8KKyNpZmRlZiBfX0FMUEhBCitpbnQKK21haW4oYXJnYyxhcmd2 KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7CisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogREVDIEMgY29tcGlsZXIsIG5vdCBBbHBoYSAqLworI2RlZmluZSBNQUlOSVNW T0lECitWT0lECittYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OworI2VuZGlm ICAvKiBfX0FMUEhBICovCisjZWxzZQorI2lmZGVmIFNUUkFUVVMgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFN0cmF0dXMgVk9TICovCitpbnQKK21haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsg Y2hhciAqKmFyZ3Y7CisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Sy05NSAqLworI2lmZGVmIE9TMgorI2lmZGVmIEtVSQorI2RlZmluZSBNQUlOSVNWT0lECit2b2lk CitNYWluKCBpbnQgYXJnYywgY2hhciAqKiBhcmd2ICkKKyNlbHNlIC8qIEtVSSAqLworI2RlZmlu ZSBNQUlOSVNWT0lECitWT0lECittYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2 OworI2VuZGlmIC8qIEtVSSAqLworI2Vsc2UgIC8qIE5vdCBLOTUgKi8KK01BSU5UWVBFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgb3RoZXJzLi4uICovCittYWluKGFyZ2Ms YXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2OworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyNlbmRpZiAvKiBfX0dOVUNfXyAqLwor I2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIGFlZ2lzICovCisKKy8qIG1haW4gKi8geworCisg ICAgY2hhciAqcDsKKworI2lmbmRlZiBOT1NFVEtFWQorICAgIGludCBpOworI2VuZGlmIC8qIE5P U0VUS0VZICovCisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIHNob3J0ICpwZmhhID0gMDE2MDAw MDAwMDM2OyAgICAgICAgIC8qIEdldCBhcm91bmQgTEFOR19SVCBwcm9ibGVtICovCisgICAgKnBm aGEgPSAoc2hvcnQpIDA7ICAgICAgICAgICAgICAgICAgLyogTm8gdXNlciBwcm90ZWN0aW9uIGZh dWx0IGhhbmRsZXIgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisgICAgaW50IHVuYnVm ID0gMDsJCQkvKiBub256ZXJvIGZvciB1bmJ1ZmZlcmVkIHN0ZG91dCAqLworCisvKiBzZXRidWYg aGFzIHRvIGJlIGNhbGxlZCBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yIGJlZm9yZSBpdCBpcyB1c2Vk ICovCisKKyNpZmRlZiBVTklYCisjaWZkZWYgTk9OT1NFVEJVRgkJCS8qIFVuYnVmZmVyZWQgY29u c29sZSBpL28gKi8KKyAgICB1bmJ1ZisrOwkJCQkvKiBhcyBhIGNvbXBpbGUtdGltZSBvcHRpb24g Ki8KKyNlbmRpZgkvKiBOT05PU0VUQlVGICovCisgICAgaWYgKCF1bmJ1ZikgewkJCS8qIE9yIGFz IGEgY29tbWFuZC1saW5lIHNlbGVjdGlvbiAqLworCWludCBpLCBuOwkJCS8qIFdlIGhhdmUgdG8g cHJlLXByZS1zY2FuIGZvciAqLworCWNoYXIgKiBzOwkJCS8qIHRoaXMgb25lLiAqLworCWZvciAo aSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkgICAgcyA9IGFyZ3ZbaV07CisJICAgIGlmICghcykg biA9IDA7IGVsc2UgbiA9IChpbnQpc3RybGVuKHMpOworCSAgICBpZiAobiA+IDQpIHsKKwkJaWYg KCFja3N0cmNtcCgiLS11bmJ1ZmZlcmVkIixzLG4sMCkpIHsKKwkJICAgIHVuYnVmKys7CisJCSAg ICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiAodW5idWYpCisgICAgICBz ZXRidWYoc3Rkb3V0LE5VTEwpOworI2VuZGlmCS8qIFVOSVggKi8KKworLyogRG8gc29tZSBpbml0 aWFsaXphdGlvbiAqLworCisjaWZkZWYgVk1TCisjaWZkZWYgX19ERUNDCisgICAgLyogR2V0IHNv bWUgUk1TIGRlZmF1bHQgc2V0dGluZ3MuICovCisgICAgZ2V0X3Jtc19kZWZhdWx0cygpOworI2Vu ZGlmIC8qIGRlZiBfX0RFQ0MgKi8KKyNlbmRpZiAvKiBkZWYgVk1TICovCisKKyNpZm5kZWYgTUFD CisgICAgeGFyZ2MgPSB4YXJncyA9IGFyZ2M7ICAgICAgICAgICAgICAgLyogTWFrZSBnbG9iYWwg Y29waWVzIG9mIGFyZ2MgKi8KKyAgICB4YXJndiA9IGFyZ3Y7ICAgICAgICAgICAgICAgICAgICAg ICAvKiAuLi5hbmQgYXJndi4gKi8KKyAgICB4YXJnMCA9IGFyZ3ZbMF07CisjaWZkZWYgTlQKKyAg ICBzZXRPU1ZlcigpOworI2VuZGlmIC8qIE5UICovCisgICAgenN0cmlwKGFyZ3ZbMF0sJnApOyAg ICAgICAgICAgICAgICAgLyogR2V0IG5hbWUgd2Ugd2VyZSBpbnZva2VkIHdpdGggKi8KKyAgICBt YWtlc3RyKCZteW5hbWUscCk7CisgICAgaWYgKCFja3N0cmNtcChteW5hbWUsInRlbG5ldCIsLTEs MCkpICAgICAgIGhvd2NhbGxlZCA9IElfQU1fVEVMTkVUOworI2lmZGVmIENLX0tFUkJFUk9TCisg ICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwia3RlbG5ldCIsLTEsMCkpIGhvd2NhbGxlZCA9 IElfQU1fVEVMTkVUOworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisgICAgZWxzZSBpZiAoIWNr c3RyY21wKG15bmFtZSwicmxvZ2luIiwtMSwwKSkgIGhvd2NhbGxlZCA9IElfQU1fUkxPR0lOOwor ICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImlrc2QiLC0xLDApKSAgICBob3djYWxsZWQg PSBJX0FNX0lLU0Q7CisjaWZkZWYgTkVXRlRQCisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFt ZSwiZnRwIiwtMSwwKSkgICAgIGhvd2NhbGxlZCA9IElfQU1fRlRQOworI2VuZGlmIC8qIE5FV0ZU UCAqLworI2lmbmRlZiBOT0hUVFAKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJodHRw IiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9IVFRQOworI2VuZGlmIC8qIE5PSFRUUCAqLwor I2lmZGVmIE9TMgorICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInRlbG5ldC5leGUiLC0x LDApKSAgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7CisjaWZkZWYgU1NIQlVJTFRJTgorICAgIGVs c2UgaWYgKCFja3N0cmNtcChteW5hbWUsInNzaCIsLTEsMCkpICBob3djYWxsZWQgPSBJX0FNX1NT SDsKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJzc2guZXhlIiwtMSwwKSkgIGhvd2Nh bGxlZCA9IElfQU1fU1NIOworI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBDS19LRVJC RVJPUworICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsImt0ZWxuZXQuZXhlIiwtMSwwKSkg aG93Y2FsbGVkID0gSV9BTV9URUxORVQ7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICBl bHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJybG9naW4uZXhlIiwtMSwwKSkgIGhvd2NhbGxlZCA9 IElfQU1fUkxPR0lOOworI2lmZGVmIE5UCisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwi aWtzZG50IiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9JS1NEOworICAgIGVsc2UgaWYgKCFj a3N0cmNtcChteW5hbWUsImlrc2RudC5leGUiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FNX0lL U0Q7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBORVdGVFAKKyAgICBlbHNlIGlmICghY2tzdHJj bXAobXluYW1lLCJmdHAuZXhlIiwtMSwwKSkgICAgIGhvd2NhbGxlZCA9IElfQU1fRlRQOworI2Vu ZGlmIC8qIE5FV0ZUUCAqLworI2lmbmRlZiBOT0hUVFAKKyAgICBlbHNlIGlmICghY2tzdHJjbXAo bXluYW1lLCJodHRwLmV4ZSIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElfQU1fSFRUUDsKKyNlbmRp ZiAvKiBOT0hUVFAgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBlbHNlIGlmICghY2tzdHJjbXAo bXluYW1lLCJrZXJtaXQtc3Noc3ViIiwtMSwwKSkgaG93Y2FsbGVkID0gSV9BTV9TU0hTVUI7CisK KyNpZm5kZWYgTk9JQ1AKKyAgICBjbWRpbmkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBNdXN0IGNvbWUgYmVmb3JlIHByZXNjYW4gKi8KKyAgICBkZWJ1ZyhGMTAwLCJtYWluIGNtZGlu aSgpIGRvbmUiLCIiLDApOworI2VuZGlmIC8qIE5PSUNQICovCisgICAgcHJlc2NhbigwKTsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUHJlLUNoZWNrIGZvciBkZWJ1Z2dpbmcsIGV0YyAqLwor I2VuZGlmIC8qIE1BQyAqLworICAgIGRlYnVnKEYxMDEsIk1BSU4gZmVvbCIsIiIsZmVvbCk7Cisg ICAgbWFrZXZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHV0IHRvZ2V0aGVyIHZl cnNpb24gc3RyaW5ncyAqLworI2lmbmRlZiBOT1NFVEtFWSAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFsbG9jYXRlICYgaW5pdGlhbGl6ZSB0aGUga2V5bWFwICovCisgICAgLyogVGhpcyBjb2Rl IGhhcyBiZWVuIG1vdmVkIHRvIGJlZm9yZSBzeXNpbml0KCkgZm9yIEs5NUcgKi8KKyAgICBpZiAo IShrZXltYXAgPSAoS0VZICopIG1hbGxvYyhzaXplb2YoS0VZKSpLTVNJWkUpKSkKKyAgICAgIGZh dGFsKCJtYWluOiBubyBtZW1vcnkgZm9yIGtleW1hcCIpOworICAgIGlmICghKG1hY3JvdGFiID0g KE1BQ1JPICopIG1hbGxvYyhzaXplb2YoTUFDUk8pKktNU0laRSkpKQorICAgICAgZmF0YWwoIm1h aW46IG5vIG1lbW9yeSBmb3IgbWFjcm90YWIiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgS01TSVpF OyBpKyspIHsKKyAgICAgICBrZXltYXBbaV0gPSAoS0VZKSBpOworICAgICAgIG1hY3JvdGFiW2ld ID0gTlVMTDsKKyAgICB9CisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKworICAgIHNob3J0Ynl0ZXMu eF9zaG9ydCA9IDB4QUJDRDsgICAgICAgIC8qIEdldCBFbmRpYW5uZXNzICovCisgICAgaWYgKHNo b3J0Ynl0ZXMueF9jaGFyWzBdID09IDB4Q0QpIHsgLyogMCA9IEJpZyBFbmRpYW4gKi8KKyAgICAg ICAgYnl0ZW9yZGVyID0gMTsgICAgICAgICAgICAgICAgICAvKiAxID0gTGl0dGxlIEVuZGlhbiAq LworICAgICAgICBiaWdlbmRpYW4gPSAwOyAgICAgICAgICAgICAgICAgIC8qIChmb3IgY2xhcml0 eSBpbiBwcm9ncmFtbWluZykgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBieXRlb3JkZXIgPSAw OyAgICAgICAgICAgICAgICAgIC8qIEJpZyBFbmRpYW4gKi8KKyAgICAgICAgYmlnZW5kaWFuID0g MTsKKyAgICB9CisgICAgaWYgKHNpemVvZihDS19PRkZfVCkgPT0gOCkJCS8qIExhcmdlIGZpbGVz IGFuZCBpbnRzPyAqLworICAgICAgaGF2ZWxmcyA9IDE7CisKKyAgICBpZiAoc3lzaW5pdCgpIDwg MCkgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0tZGVwZW5kZW50IGluaXRpYWxpemF0aW9uLiAq LworICAgICAgZmF0YWwoIkNhbid0IGluaXRpYWxpemUhIik7CisgICAgZWxzZQorICAgICAgaW5p dGZsZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHdlIGRpZC4gKi8KKyAg ICBkZWJ1ZyhGMTExLCJja2NtYWkgbXluYW1lIixteW5hbWUsaG93Y2FsbGVkKTsKKworI2lmZGVm IFVOSVgKKyAgICBnZXRleGVkaXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21wdXRl IGV4ZWRpciB2YXJpYWJsZSAqLworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIENLU1lTTE9H CisjaWZkZWYgU1lTTE9HTEVWRUwKKy8qCisgIElmIGJ1aWx0IHdpdGggLURTWVNMT0dMRVZFTCBv biBjYyBjb21tYW5kIGxpbmUsIHRoaXMgbWVhbnMgd2UgYWx3YXlzCisgIGRvIHN5c2xvZ2dpbmcg YXQgdGhlIGluZGljYXRlZCBsZXZlbC4KKyovCisgICAgenN5c2xvZygpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogT3BlbiBzeXNsb2cgKi8KKyNlbHNlIC8qIFNZU0xPR0xFVkVMICovCisj aWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikKKyAgICAgIHpzeXNsb2coKTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPcGVuIHN5c2xvZyAqLworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRp ZiAvKiBTWVNMT0dMRVZFTCAqLworI2VuZGlmIC8qIENLU1lTTE9HICovCisKKyNpZmRlZiBDS19L RVJCRVJPUworICAgIGluaV9rZXJiKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgS2VyYmVyb3MgZGF0YSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjaWZkZWYg Q0tfU1NMCisgICAgc3NsX29uY2VfaW5pdCgpOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVm IFROQ09ERQorICAgIHRuX3NldF9tb2RlcygpOyAgICAgICAgICAgICAgICAgICAgIC8qIEluaXQg VGVsbmV0IE9wdGlvbiB0YWJsZXMgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIENL X1RUR1dTSVogICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgc2NyZWVuIGRpbWVu c2lvbnMgKi8KKyNpZmRlZiBPUzIKKyAgICB0dGdjd3N6KCk7CisjZWxzZSAvKiBPUzIgKi8KKyAg ICBpZiAodHRnd3NpeigpID4gMCkgeworICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29s cyA+IDApIHsKKyAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKKyAgICAgICAgICAgIGNt ZF9jb2xzID0gdHRfY29sczsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBDS19UVEdXU0laICovCisKKyNpZm5kZWYgT1MyCisjaWZkZWYgVENQU09DS0VUCisj aWZkZWYgQ0tfU09DS1MKKyAgICBTT0NLU2luaXQoYXJndlswXSk7ICAgICAgICAgICAgICAgICAv KiBJbnRlcm5ldCByZWxheSBwYWNrYWdlLi4uICovCisjZW5kaWYgLyogQ0tfU09DS1MgKi8KKyNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGluaXRmbG93KCk7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZmxvdy1jb250cm9sIHRhYmxl ICovCisKKyNpZm5kZWYgTk9JQ1AKKyNpZmRlZiBDS0ZMT0FUCisgICAgaW5pdGZsb2F0KCk7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogRGVkdWNlIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbiAq LworI2VuZGlmIC8qIENLRkxPQVQgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5P WEZFUgorICAgIGluaXR4bGlzdCgpOwkJCS8qIEluaXQgZXhjZXB0aW9uIGxpc3RzICovCisKKyNp ZmRlZiBDS19YWVogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHByb3Rv Y29scy4uLiAgKi8KKworI2lmZGVmIFhZWl9JTlRFUk5BTCAvKiBYWVpNT0RFTSBhcmUgaW50ZXJu YWwgLi4uICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogQ2FuJ3QgZG8gdGhpcyBmb3IgWE1P REVNIGJlY2F1c2UgaWYgZmlsZW5hbWUgY29udGFpbnMgYSAiQyIgZXRjLi4uICovCisgICAgaW5p dHByb3RvKFBST1RPX1gsICJyeCAlcyIsInJ4ICVzIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCk7CisgICAgaW5pdHByb3RvKFBST1RPX1hDLCJyYyAlcyIsInJjICVzIiwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCk7CisjZWxzZSAvKiBDT01NRU5UICovCisgICAgaW5pdHByb3Rv KFBST1RPX1gsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICAg IGluaXRwcm90byhQUk9UT19YQyxOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaW5pdHByb3RvKFBST1RPX1ksICJyYiIs InJiIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgaW5pdHByb3RvKFBST1RP X0csICJyYiIsInJiIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgaW5pdHBy b3RvKFBST1RPX1osICJyeiIsInJ6IiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Cisg ICBpbml0cHJvdG8oUFJPVE9fSywia2VybWl0IC1pciIsImtlcm1pdCAtciIsImtlcm1pdCAteCIs TlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgLyogS2VybWl0IE11c3QgYmUgbGFzdCAqLworCisj ZWxzZSAvKiBYWVpNT0RFTSBhcmUgZXh0ZXJuYWwgcHJvdG9jb2xzIC4uLiAqLworCisgLyogICAg ICAgICAgICAgICAgICBzMSAgICAgIHMyICAgICBzMyAgICBzNCAgICAgIHM1ICAgICAgICAgczYg ICAgICBzNyAgICAgKi8KKyBpbml0cHJvdG8oUFJPVE9fWCwgInJ4ICVzIiwicnggJXMiLE5VTEws InN4ICVzIiwic3ggLWEgJXMiLCJyeCAlcyIsICJyeCAlcyIpOworIGluaXRwcm90byhQUk9UT19Y QywicmMgJXMiLCJyYyAlcyIsTlVMTCwic3ggJXMiLCJzeCAtYSAlcyIsInJjICVzIiwgInJjICVz Iik7CisgaW5pdHByb3RvKFBST1RPX1ksICJyYiIsICAgInJiIiwgICBOVUxMLCJzYiAlcyIsInNi IC1hICVzIiwicmIiLCAgICAicmIiICAgKTsKKyBpbml0cHJvdG8oUFJPVE9fRywgInJiIiwgICAi cmIiLCAgIE5VTEwsInNiICVzIiwic2IgLWEgJXMiLCJyYiIsICAgICJyYiIgICApOworIGluaXRw cm90byhQUk9UT19aLCAicnoiLCAgICJyeiIsICAgTlVMTCwic3ogJXMiLCJzeiAtYSAlcyIsInJ6 IiwgICAgInJ6IiAgICk7CisgaW5pdHByb3RvKFBST1RPX0ssICJrZXJtaXQgLWlyIiwia2VybWl0 IC1yIiwia2VybWl0IC14IixOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAvKiBLZXJtaXQgbXVzdCBi ZSBsYXN0ICovCisKKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KKworI2Vsc2UgIC8qIE5vIFhZ Wk1PREVNIHN1cHBvcnQgKi8KKworICAgaW5pdHByb3RvKFBST1RPX0ssImtlcm1pdCAtaXIiLCJr ZXJtaXQgLXIiLCJrZXJtaXQgLXgiLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworCisjZW5kaWYgLyog Q0tfWFlaICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICBjb25ub2koKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb25zb2xlIGludGVycnVwdHMgb2ZmICovCisKKyNpZm5kZWYg Tk9YRkVSCisjaWZkZWYgT1MyCisgICAgLyogSW5pdGlhbGl6ZSBLZXJtaXQgYW5kIFptb2RlbSBB dXRvLURvd25sb2FkIFN0cmluZ3MgKi8KKyAgICBhZGxfa3N0ciA9IHN0cmR1cCgiS0VSTUlUIFJF QURZIFRPIFNFTkQuLi4iKTsKKyAgICBhZGxfenN0ciA9IHN0cmR1cCgicnpcciIpOworI2VuZGlm IC8qIE9TMiAqLworCisjaWZkZWYgUEFUVEVSTlMKKyAgICBpbml0cGF0KCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGZpbGVuYW1lIHBhdHRlcm5zICovCisjZW5kaWYg LyogUEFUVEVSTlMgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0NTRVRTCisg ICAgaW5pdGNzZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjaGFy YWN0ZXIgc2V0cyAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBOT0lDUAorI2lm ZGVmIERGQ0RNU0cKKyAgICBtYWtlc3RyKCZjZG1zZ3N0cixERkNETVNHKTsKKyAgICBtYWtlbGlz dChjZG1zZ3N0cixjZG1zZ2ZpbGUsOCk7ICAgICAvKiBJbml0aWFsaXplIENEIG1lc3NhZ2UgZmls ZW5hbWVzICovCisjZW5kaWYgLyogREZDRE1TRyAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKyAg ICBzc3RhdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBkZWZhdWx0IHN0YXJ0 IHN0YXRlLiAqLworI2lmZGVmIERZTkFNSUMKKyAgICBpZiAoZ2V0aW9icygpIDwgMCkKKyAgICAg IGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBpL28gYnVmZmVycyEiKTsKKyNlbmRpZiAvKiBEWU5BTUlD ICovCisKKyNpZm5kZWYgTk9TUEwKKyNpZm5kZWYgTk9SQU5ET00KKyAgICB7CisgICAgICAgIGNo YXIgc3RhY2tkYXRhWzI1Nl07CisgICAgICAgIHVuc2lnbmVkIGludCBjID0gMTIzNCwgbjsKKyAg ICAgICAgLyogdHJ5IHRvIG1ha2UgYSByYW5kb20gdW5zaWduZWQgaW50IHRvIGZlZWQgc3JhbmQo KSAqLworI2lmbmRlZiBWTVMKKwkvKiB0aW1lLmggYW5kIE11bHRpTmV0IGRvIG5vdCBnZXQgYWxv bmcgKi8KKyAgICAgICAgYyA9IHRpbWUoTlVMTCk7CisjZW5kaWYgLyogVk1TICovCisgICAgICAg IGMgKj0gZ2V0cGlkKCk7CisJLyogUmVmZXJlbmNlZCBiZWZvcmUgc2V0Li4uIERFTElCRVJBVEVM WSAqLworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHN0YWNrZGF0YSk7IG4rKykgLyog SUdOT1JFIFdBUk5JTkcgKi8KKwkgIGMgKz0gc3RhY2tkYXRhW25dOwkJLyogREVMSUJFUkFURUxZ IFVTRUQgQkVGT1JFIFNFVCAqLworICAgICAgICBzcmFuZCgodW5zaWduZWQgaW50KWMpOworICAg IH0KKyNlbmRpZiAvKiBOT1JBTkRPTSAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICBja2hv c3QobXlob3N0LE1ZSE9TVEwpOyAgICAgICAgICAgICAvKiBOYW1lIG9mIGxvY2FsIGhvc3QgKi8K KyAgICBkZWJ1ZyhGMTEwLCJtYWluIGNraG9zdCIsbXlob3N0LDApOworI2lmZGVmIElLU0QKKyAg ICBpZiAoIWluc2VydmVyKSB7CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICBja3N0cm5jcHko dHRuYW1lLGRmdHR5LFRUTkFNTEVOKTsgLyogU2V0IHVwIGRlZmF1bHQgdHR5IG5hbWUuICovCisg ICAgICAgIGxvY2FsID0gbm9sb2NhbCA/IDAgOiBkZmxvYzsgICAgLyogQW5kIHdoZXRoZXIgaXQn cyBsb2NhbCBvciByZW1vdGUuICovCisgICAgICAgIHBhcml0eSA9IGRmcHJ0eTsgICAgICAgICAg ICAgICAgLyogU2V0IGluaXRpYWwgcGFyaXR5LCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAg bXlpbmRleCA9IGdldHN5c2l4KGNrc3lzaWQpOyAgICAvKiBTeXN0ZW0gaW5kZXggKi8KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgaWYgKGxvY2FsKSBpZiAodHRvcGVuKHR0bmFtZSwmbG9j YWwsMCwwKSA8IDApIHsKKyNpZm5kZWYgT1MyCisgICAgICAgICAgICBjb25vbCgiQ2FuJ3Qgb3Bl biBkZXZpY2U6ICIpOworICAgICAgICAgICAgY29ub2xsKHR0bmFtZSk7CisjZW5kaWYgLyogT1My ICovCisgICAgICAgICAgICBsb2NhbCA9IDA7CisgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1l LENUVE5BTSxUVE5BTUxFTik7CisgICAgICAgIH0KKyAgICAgICAgc2V0ZmxvdygpOyAgICAgICAg ICAgICAgICAgICAgICAvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCisgICAgICAg IHNwZWVkID0gdHRnc3BkKCk7ICAgICAgICAgICAgICAgLyogR2V0IHRyYW5zbWlzc2lvbiBzcGVl ZC4gKi8KKyNpZmRlZiBJS1NECisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIEFO WVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBYLjI1IGltcGxlbWVudGF0aW9u cyAqLworI2lmbmRlZiBJQk1YMjUgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4Y2VwdCBJ Qk0gaGF2ZSBQQUQgc3VwcG9ydCAqLworICAgIGluaXRwYWQoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEluaXRpYWxpemUgWC4yNSBQQUQgKi8KKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNl bmRpZiAvKiBBTllYMjUgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAoaW5pYnVmcyhTQlNJ WixSQlNJWikgPCAwKSAgICAgICAvKiBBbGxvY2F0ZSBwYWNrZXQgYnVmZmVycyAqLworICAgICAg ZmF0YWwoIkNhbid0IGFsbG9jYXRlIHBhY2tldCBidWZmZXJzISIpOworI2lmbmRlZiBOT0NLU1BF RUQKKyAgICBzZXRwcmVmaXgocHJlZml4aW5nKTsgICAgICAgICAgICAgICAvKiBTZXQgdXAgY29u dHJvbCBjaGFyIHByZWZpeGluZyAqLworI2VuZGlmIC8qIE5PQ0tTUEVFRCAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZuZGVmIE5PSUNQCisgICAgaWYgKHNzdGVsbmV0CisjaWZkZWYgSUtT RAorICAgICAgICB8fCBpbnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgKSB7Cisg ICAgICAgIGludCBvbiA9IDEsIHggPSAwOworICAgICAgICBleHRlcm4gaW50IGNreGVjaCwgdHRu ZXQsIHR0bnByb3RvLCBjbWRtc2s7CisjaWZkZWYgU09fU05EQlVGCisgICAgICAgIGV4dGVybiBp bnQgdGNwX3NlbmRidWY7CisjZW5kaWYKKyNpZmRlZiBTT19SQ1ZCVUYKKyAgICAgICAgZXh0ZXJu IGludCB0Y3BfcmVjdmJ1ZjsKKyNlbmRpZgorI2lmZGVmIFNPX0tFRVBBTElWRQorICAgICAgICBl eHRlcm4gaW50IHRjcF9rZWVwYWxpdmU7CisjZW5kaWYKKyNpZmRlZiBTT19MSU5HRVIKKyAgICAg ICAgZXh0ZXJuIGludCB0Y3BfbGluZ2VyLCB0Y3BfbGluZ2VyX3RtbzsKKyNlbmRpZiAvKiBTT19M SU5HRVIgKi8KKyNpZmRlZiBTT19ET05UUk9VVEUKKyAgICAgICAgZXh0ZXJuIGludCB0Y3BfZG9u dHJvdXRlOworI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLworI2lmZGVmIFRDUF9OT0RFTEFZCisg ICAgICAgIGV4dGVybiBpbnQgdGNwX25vZGVsYXk7CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8K KyNpZmRlZiBJS1NECisgICAgICAgIGV4dGVybiBpbnQgaWtsb2dvcGVuOworI2VuZGlmIC8qIElL U0QgKi8KKyAgICAgICAgZXh0ZXJuIGludCB0dG1kbTsKKworI2lmZGVmIFVOSVgKKyAgICAgICAg aWYgKGlzYXR0eSgwKSkKKyAgICAgICAgICBmYXRhbCgiSW50ZXJuZXQgS2VybWl0IFNlcnZpY2Ug Y2Fubm90IGJlIHN0YXJ0ZWQgYXQgYSB0ZXJtaW5hbC4iKTsKKyNlbmRpZiAvKiBVTklYICovCisK KyAgICAgICAgcmVsaWFibGUgPSB4cmVsaWFibGUgPSBTRVRfT047ICAvKiBJS1NEIGhhcyByZWxp YWJsZSBjb25uZWN0aW9uICovCisjaWZuZGVmIFZNUworICAgICAgICBmbG93ID0gMDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vIGZsb3cgY29udHJvbCBuZWVkZWQgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKyAgICAgICAgYmdzZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgaW4g YmFja2dyb3VuZCAqLworICAgICAgICBub3B1c2ggPSAxOyAgICAgICAgICAgICAgICAgICAgIC8q IE5vIGV4dGVybmFsIHByb2Nlc3NlcyAqLworICAgICAgICBwYXJpdHkgPSAwOyAgICAgICAgICAg ICAgICAgICAgIC8qIDggYml0cyAuLi4gKi8KKyAgICAgICAgY21kbXNrID0gMHhmZjsgICAgICAg ICAgICAgICAgICAvKiBhbGwgdGhlIHdheSAqLworICAgICAgICBjbWFzayA9IDB4ZmY7CisKKyNp ZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikgeyAgICAgICAgICAgICAgICAgLyogSWYg SUtTRCAqLworICAgICAgICAgICAgZG9pa3NkaW5pdCgpOyAgICAgICAgICAgICAgIC8qIEV4ZWN1 dGUgSUtTRCBjb25maWd1cmF0aW9uIGZpbGUgKi8KKyAgICAgICAgICAgIHdoaWxlICh0bGV2ZWwg PiAtMSkKKyAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAvKiAoSWdub3Jl IGFueSBmaWxlLXhmZXIgY29tbWFuZHMpICovCisgICAgICAgICAgICBpa3NkY2YgPSAxOyAgICAg ICAgICAgICAgICAgLyogSUtTRCBjLmYuIGhhcyBiZWVuIHByb2Nlc3NlZCAqLworICAgICAgICB9 CisgICAgICAgIGlmICghaWtsb2dvcGVuKSAoVk9JRCkgZG9pa2xvZygpOyAvKiBPcGVuIEtlcm1p dC1zcGVjaWZpYyBsb2cgKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKyNpZmRlZiBVTklYCisgICAg ICAgIHNldGJ1ZihzdGRvdXQsTlVMTCk7ICAgICAgICAgICAgLyogRG9uJ3QgYnVmZmVyIHRoZSBv dXRwdXQgKi8KKyAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwiMCIsVFROQU1MRU4pOyAvKiBub3Qg Ii9kZXYvdHR5Ii4uLiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgbG9jYWwgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAvKiBXZSBhcmUgaW4gcmVtb3RlIG1vZGUgKi8KKyAgICAgICAg Y2t4ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBXZSB3aWxsIGVjaG8gKi8KKyNpZmRl ZiBPUzIKKyAgICAgICAgbmV0dHlwZSA9IE5FVF9UQ1BCOyAgICAgICAgICAgICAvKiBTbyB0dG9w ZW4oKSB0cmVhdHMgdGhlIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgbWRtdHlwID0gLW5ldHR5cGU7 ICAgICAgICAgICAgICAvKiBhcyBhIG5ldHdvcmsgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgZGVidWcoRjEwMCwibWFpbiBhYm91dCB0byBjYWxsIHR0b3BlbigpIGluc2VydmVyIiwiIiww KTsKKyAgICAgICAgaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG1kbXR5cCwwKSA8IDApIHsgLyog T3BlbiBjb21tIGNoYW5uZWwgKi8KKyAgICAgICAgICAgIGZhdGFsKCJjYW4ndCBpbml0aWFsaXpl IGkvbyIpOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAgIGxvY2FsID0gMDsKKyAgICAg ICAgbmV0d29yayA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIHVzZSBuZXR3b3JraW5n IGNvZGUgKi8KKyNlbHNlICAvKiBPUzIgKi8KKyAgICAgICAgbmV0d29yayA9IDA7ICAgICAgICAg ICAgICAgICAgICAvKiBEb2VzIG5vdCB1c2UgbmV0d29ya2luZyBjb2RlICovCisjZW5kaWYgLyog T1MyICovCisgICAgICAgIHR0bWRtID0gLTE7ICAgICAgICAgICAgICAgICAgICAgLyogRG9lcyBu b3QgdXNlIGEgbW9kZW0gKi8KKyAgICAgICAgc3N0ZWxuZXQgPSAxOyAgICAgICAgICAgICAgICAg ICAvKiBEbyBzZXJ2ZXItc2lkZSBUZWxuZXQgbmVnb3RhdGlvbnMgKi8KKyAgICAgICAgZGVidWco RjExMSwiTUFJTiIsInNzdGVsbmV0Iixzc3RlbG5ldCk7CisgICAgICAgIHR0bmV0ID0gTkVUX1RD UEI7ICAgICAgICAgICAgICAgLyogTmV0d29yayB0eXBlIGlzIFRDUCBzb2NrZXRzICovCisgICAg ICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOyAgICAgICAgICAgLyogTmV0d29yZCBwcm90b2NvbCBp cyBUZWxuZXQgKi8KKyNpZmRlZiBJS1NEQgorICAgICAgICBkYmluaXQoKTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIEluaXRpYWxpemUgZGF0YWJhc2UgcmVjb3JkICovCisjZW5kaWYgLyogSUtT REIgKi8KKyNpZm5kZWYgT1MyCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgLyog QmVmb3JlIGluaXRpYWxpemF0aW5nIFRlbG5ldC9SbG9naW4gbmVnb3RpYXRpb25zLCBpbml0IEtl cmJlcm9zICovCisgICAgICAgIGNrX2F1dGhfaW5pdChja2dldHBlZXIoKSwiIiwiIiwwKTsKKyNl bmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisjaWZkZWYgTk9OX0JMT0NLX0lPCisgICAg ICAgIG9uID0gMTsKKyAgICAgICAgeCA9IHNvY2tldF9pb2N0bCgwLEZJT05CSU8sJm9uKTsKKyAg ICAgICAgZGVidWcoRjEwMSwibWFpbiBGSU9OQklPIiwiIix4KTsKKyNlbmRpZiAvKiBOT05fQkxP Q0tfSU8gKi8KKyNpZmRlZiBTT19PT0JJTkxJTkUKKyAgICAgICAgb24gPSAxOworICAgICAgICB4 ID0gc2V0c29ja29wdCgwLCBTT0xfU09DS0VULCBTT19PT0JJTkxJTkUsIChjaGFyICopJm9uLCBz aXplb2Yob24pKTsKKyAgICAgICAgZGVidWcoRjEwMSwibWFpbiBTT19PT0JJTkxJTkUiLCIiLHgp OworI2VuZGlmIC8qIFNPX09PQklOTElORSAqLworCisjaWZuZGVmIE5PVENQT1BUUworI2lmbmRl ZiBkYXRhZ2VuZXJhbAorI2lmZGVmIFNPTF9TT0NLRVQKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAg ICAgICBub19kZWxheSgwLHRjcF9ub2RlbGF5KTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLwor I2lmZGVmIFNPX0tFRVBBTElWRQorICAgICAgICBrZWVwYWxpdmUoMCx0Y3Bfa2VlcGFsaXZlKTsK KyNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KKyNpZmRlZiBTT19MSU5HRVIKKyAgICAgICAgY2tf bGluZ2VyKDAsdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW8pOworI2VuZGlmIC8qIFNPX0xJTkdF UiAqLworI2lmZGVmIFNPX0RPTlRST1VURQorICAgICAgICBkb250cm91dGUoMCx0Y3BfZG9udHJv dXRlKTsKKyNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KKyNpZmRlZiBTT19TTkRCVUYKKyAgICAg ICAgc2VuZGJ1ZigwLHRjcF9zZW5kYnVmKTsKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KKyNpZmRl ZiBTT19SQ1ZCVUYKKyAgICAgICAgcmVjdmJ1ZigwLHRjcF9yZWN2YnVmKTsKKyNlbmRpZiAvKiBT T19SQ1ZCVUYgKi8KKyNlbmRpZiAvKiBTT0xfU09DS0VUICovCisjZW5kaWYgLyogZGF0YWdlbmVy YWwgKi8KKyNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KKworI2lmZGVmIENLX1NTTAorICAgICAgICBp ZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7CisgICAgICAgICAgICBpZiAoIXNzbF90bl9p bml0KFNTTF9TRVJWRVIpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJpb19lcnIgIT0gTlVMTCkg eworICAgICAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsImRvX3NzbGVheV9pbml0 KCkgZmFpbGVkXHJcbiIpOworICAgICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3JzKGJp b19lcnIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZm bHVzaChzdGRlcnIpOworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiZG9fc3Ns ZWF5X2luaXQoKSBmYWlsZWRcclxuIik7CisgICAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9l cnJvcnNfZnAoc3RkZXJyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3dp dGNoICh0dG5wcm90bykgeworCQkgIGNhc2UgTlBfU1NMOgorCQkgIGNhc2UgTlBfVExTOgorICAJ CSAgY2FzZSBOUF9TU0xfUkFXOgorCQkgIGNhc2UgTlBfVExTX1JBVzoKKwkJICBjYXNlIE5QX1NT TF9URUxORVQ6CisJCSAgY2FzZSBOUF9UTFNfVEVMTkVUOgorICAgICAgICAgICAgICAgICAgICBk b2V4aXQoQkFEX0VYSVQsMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8q IG90aGVyd2lzZSB3ZSB3aWxsIGNvbnRpbnVlIHRvIGFjY2VwdCB0aGUgY29ubmVjdGlvbiAgICov CisgICAgICAgICAgICAgICAgLyogd2l0aG91dCBTU0wgb3IgVExTIHN1cHBvcnQgdW5sZXNzIHJl cXVpcmVkLiAqLworICAgICAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9TX01FX01PREUoVEVM T1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQorICAgICAgICAgICAgICAgICAgICBURUxPUFRf REVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOworICAgICAgICAgICAg ICAgIGlmICggVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19N VSApCisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJU X1RMUykgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfQ19NRV9N T0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKKyAgICAgICAgICAgICAgICAgICAg VEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKKyAgICAg ICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0g VE5fTkdfTVUgKQorICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9Q VF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIGlmICggY2tfc3NsX2luY29taW5nKDApIDwgMCApIHsKKyAgICAgICAgICAgICAgICAg ICAgZG9leGl0KEJBRF9FWElULDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZkZWYgVE5DT0RFCisgICAgICAg IHRuX2luaSgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgVGVsbmV0IG5lZ290aWF0 aW9uIG5vdyAqLworI2VuZGlmIC8qIFROQ09ERSAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIH0K KyAgICBkZWJ1ZyhGMTAxLCJtYWluIGFyZ2MgYWZ0ZXIgcHJlc2NhbigpIiwiIixhcmdjKTsKKwor ICAgIC8qIE5vdyBwcm9jZXNzIGFueSByZWxldmFudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8K KworI2lmbmRlZiBOT0RJQUwKKyAgICBnZXRkaWFsZW52KCk7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBEaWFsaW5nICovCisjaWZkZWYgTkVUQ09OTgorICAgIG5kaW5pdCgpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbmV0d29yayBkaXJlY3RvcnkgaW5mbyAqLwor ICAgIGdldG5ldGVudigpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgZGlyZWN0 b3JpZXMgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNp Zm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfRkFTVAorICAgIGRvZmFzdCgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJ5IG5vdyBGQVNUIGRlZmF1bHRzIHNob3VsZCBiZSBPSyAqLworI2Vu ZGlmIC8qIENLX0ZBU1QgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0NNREwK KyAgICBpa3Nsb2dpbigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSUtTRCBMb2dpbiBh bmQgb3RoZXIgc3R1ZmYgKi8KKyNpZmRlZiBJS1NECisjaWZkZWYgTlQKKyAgICBpZiAoIGluc2Vy dmVyICkKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIElL U0QgKi8KKyNlbmRpZiAvKiBOT0NNREwgKi8KKworICAgIGlmIChob3djYWxsZWQgPT0gSV9BTV9T U0hTVUIpIHsKKyAgICAgICAgcmVsaWFibGUgPSAxOwkJCS8qIFdlIHNheSB0aGUgY29ubmVjdGlv biBpcyByZWxpYWJsZSAqLworICAgICAgICB4cmVsaWFibGUgPSAxOwkJCS8qIEFuZCB0aGF0IHdl IHNhaWQgaXQgd2FzICovCisgICAgICAgIHNldHJlbGlhYmxlID0gMTsJCS8qIEFuZCBwcmV0ZW5k IHRoZSAidXNlciIgZGlkIHRvbyAqLworICAgICAgICB4ZmluaXNoID0gMTsJCQkvKiBGb3IgUkVN T1RFIEhFTFAgcmVzcG9uc2UgKi8KKyAgICAgICAgbWRtdHlwID0gMDsJCQkvKiBGb3IgdHRvcGVu KCkgKi8KKyAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwiMCIsVFROQU1MRU4rMSk7ICAvKiBVc2Ug ZmlsZSBkZXNjcmlwdG9yIDAgKi8KKyAgICAgICAgbG9jYWwgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBBbmQgZm9yY2UgcmVtb3RlIG1vZGUgKi8KKyAgICAgICAgdHRvcGVuKHR0bmFt ZSwmbG9jYWwsbWRtdHlwLDApOyAvKiBPcGVuIHRoZSAiY29ubmVjdGlvbiIgKi8KKyAgICAgICAg c3N0YXRlID0gJ3gnOwkJCS8qIEluaXRpYWwgc3RhdGUgaXMgU2VydmVyICovCisgICAgICAgIHBy b3RvKCk7CQkJLyogRW50ZXIgcHJvdG9jb2wgKi8KKyAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4 aXRzdGEpOwkvKiBFeGl0IHdoZW4gZG9uZSAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJob3dj YWxsZWQiLG15bmFtZSxob3djYWxsZWQpOworCisjaWZkZWYgTk9DQ1RSQVAKKyAgICBkb3Rha2Vp bmkoMCk7CisjZWxzZSAvKiBOT0NDVFJBUCAqLworICAgIGRlYnVnKEYxMDAsIm1haW4gYWJvdXQg dG8gY2NfZXhlY3V0ZSIsIiIsMCk7CisgICAgc2V0aW50KCk7CisgICAgY2NfZXhlY3V0ZSggY2tq YWRkcihjbWpidWYpLCBkb3Rha2VpbmksIGZhaWx0YWtlaW5pICk7CisjZW5kaWYgLyogTk9DQ1RS QVAgKi8KKworICAgIGRlYnVnKEYxMTEsIm1haW4gMiBjZmlsZWYiLGNtZGZpbCxjZmlsZWYpOwor ICAgIGlmIChjbWRmaWxbMF0pIHsgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGdvdCBvbmUg KHNlZSBwcmVzY2FuKCkpLi4uICovCisjaWZkZWYgTk9DQ1RSQVAKKyAgICAgICAgZG9jbWRmaWxl KDApOyAgICAgICAgICAgICAgICAgICAvKiBleGVjdXRlIGl0LiAqLworI2Vsc2UgLyogTk9DQ1RS QVAgKi8KKyAgICAgICAgc2V0aW50KCk7CisgICAgICAgIGNjX2V4ZWN1dGUoIGNramFkZHIoY21q YnVmKSwgZG9jbWRmaWxlLCBmYWlsY21kZmlsZSApOworI2VuZGlmIC8qIE5PQ0NUUkFQICovCisg ICAgfQorI2lmbmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXNlcnZl IG5hbWUgc28gd2UgY2FuIGRlbGV0ZSBpdCAqLworICAgICpjbWRmaWwgPSAnXDAnOyAgICAgICAg ICAgICAgICAgICAgIC8qIERvbmUsIG51bGxpZnkgdGhlIGZpbGUgbmFtZSAqLworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9DTURMCisvKiBMb29rIGZv ciBhIFVOSVgtc3R5bGUgY29tbWFuZCBsaW5lLi4uICovCisKKyAgICB3aGF0ID0gV19OT1RISU5H OworCisgICAgZGVidWcoRjEwMSwibWFpbiBhcmdjIiwiIixhcmdjKTsKKyNpZm5kZWYgTk9IRUxQ CisgICAgaW5pb3B0aGxwKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBj bWRsaW5lIGFyZyBoZWxwICovCisjZW5kaWYgLyogTk9IRUxQICovCisgICAgaWYgKAorI2lmZGVm IENPTU1FTlQKKyAgICAgICAgIWNmaWxlZiAmJgorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAg ICAgYXJnYyA+IDEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGxpbmUgYXJndW1l bnRzPyAqLworICAgICAgICBzc3RhdGUgPSAoQ0hBUikgY21kbGluKCk7ICAgICAgIC8qIFllcywg cGFyc2UuICovCisjaWZkZWYgTkVUQ09OTgorI2lmbmRlZiBOT1VSTAorICAgICAgICBpZiAoaGF2 ZXVybCkgeyAgICAgICAgICAgICAgICAgIC8qIFdhcyBhIFVSTCBnaXZlbj8gKi8KKyAgICAgICAg ICAgIGRvdXJsKCk7ICAgICAgICAgICAgICAgICAgICAvKiBpZiBzbywgZG8gaXQuICovCisgICAg ICAgIH0KKyNlbmRpZiAvKiBOT1VSTCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZm5kZWYg Tk9YRkVSCisgICAgICAgIHpzdGF0ZSA9IHNzdGF0ZTsgICAgICAgICAgICAgICAgLyogUmVtZW1i ZXIgc3N0YXRlIGFyb3VuZCBwcm90b2NvbCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJtYWluIHpz dGF0ZSIsIiIsenN0YXRlKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0xPQ0FM CisgICAgICAgIGlmIChjZmxnKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdCBmaXJz dCBpZiByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICAgIGRvY29uZWN0KDAsMCk7CisgICAgICAgICAg ICBpZiAodHRjaGsoKSA8IDApCisgICAgICAgICAgICAgIGRvbG9nZW5kKCk7CisgICAgICAgICAg ICBjZmxnID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBO T1hGRVIKKyAgICAgICAgaWYgKHNzdGF0ZSkgeworI2lmbmRlZiBOT0xPQ0FMCisgICAgICAgICAg ICBpZiAoZGlzcGxhKSBjb25jYigoY2hhcillc2NhcGUpOyAvKiAoZm9yIGNvbnNvbGUgImludGVy cnVwdHMiKSAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBOT0NDVFJBUAorICAgICAg ICAgICAgZG9jbWRsaW5lKDEpOworI2Vsc2UgLyogTk9DQ1RSQVAgKi8KKyAgICAgICAgICAgIHNl dGludCgpOworICAgICAgICAgICAgY2NfZXhlY3V0ZSggY2tqYWRkcihjbWpidWYpLCBkb2NtZGxp bmUsIGZhaWxjbWRsaW5lICk7CisjZW5kaWYgLyogTk9DQ1RSQVAgKi8KKyAgICAgICAgfQorI2Vu ZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PSUNQCisvKgorICBJZiBhIGNvbW1hbmQtbGlu ZSBhY3Rpb24gYXJndW1lbnQgd2FzIGdpdmVuIGFuZCAtUyAoInN0YXkiKSB3YXMgbm90IGdpdmVu LAorICBleGl0IG5vdy4KKyovCisgICAgICAgIGlmICgoY2ZsZyB8fCBjbmZsZyB8fCB6c3RhdGUp ICYmICFzdGF5ZmxnKQorI2VuZGlmIC8qIE5PSUNQICovCisgICAgICAgICAgZG9leGl0KEdPT0Rf RVhJVCx4aXRzdGEpOyAgICAgLyogRXhpdCB3aXRoIGdvb2Qgc3RhdHVzICovCisKKyNpZm5kZWYg Tk9MT0NBTAorI2lmbmRlZiBOT0lDUAorICAgICAgICBpZiAobG9jYWwpIHsKKyNpZmRlZiBORVRD T05OCisgICAgICAgICAgICBpZiAoKGNmbGcgfHwgY25mbGcpICYmIHRuX2V4aXQgJiYgdHRjaGso KSA8IDApCisgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgLyogRXhpdCB3 aXRoIGdvb2Qgc3RhdHVzICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgICAgICAgICAgaWYg KGV4aXRvbmNsb3NlICYmICFuZXR3b3JrICYmCisgICAgICAgICAgICAgICAgKGNhcnJpZXIgIT0g Q0FSX09GRiAmJiAodHRnbWRtKCkgJiBCTV9EQ0QpID09IDApKQorICAgICAgICAgICAgICBkb2V4 aXQoR09PRF9FWElULHhpdHN0YSk7IC8qIEV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLworICAgICAg ICAgICAgaWYgKGV4aXRvbmNsb3NlICYmIG5ldHdvcmsgJiYgdHRjaGsoKSA8IDApCisgICAgICAg ICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgLyogRXhpdCB3aXRoIGdvb2Qgc3RhdHVz ICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8K KyAgICB9CisjZW5kaWYgLyogTk9DTURMICovCisKKyNpZmRlZiBOT0lDUCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBObyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciAqLworI2lmbmRl ZiBOT0NNREwKKyAgICBlbHNlIHsKKworICAgICAgICAvKiBDb21tYW5kLWxpbmUtb25seSB2ZXJz aW9uICovCisgICAgICAgIGZhdGFsKCI/Tm8gY29tbWFuZC1saW5lIG9wdGlvbnMgZ2l2ZW4gLSB0 eXBlICdrZXJtaXQgLWgnIGZvciBoZWxwIik7CisgICAgfQorI2Vsc2UgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5laXRoZXIgb25lISAqLworICAgICAgICBzc3RhdGUgPSAn eCc7CisgICAgICAgIGp1c3RvbmUgPSAwOworICAgICAgICBwcm90bygpOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNvIGdvIGludG8gc2VydmVyIG1vZGUgKi8KKyAgICAgICAgZG9leGl0KEdP T0RfRVhJVCx4aXRzdGEpOyAgICAgICAvKiBleGl0IHdpdGggZ29vZCBzdGF0dXMgKi8KKworI2Vu ZGlmIC8qIE5PQ01ETCAqLworI2Vsc2UgLyogbm90IE5PSUNQICovCisvKgorICBJZiBubyBhY3Rp b24gcmVxdWVzdGVkIG9uIGNvbW1hbmQgbGluZSwgb3IgaWYgLVMgKCJzdGF5Iikgd2FzIGluY2x1 ZGVkLAorICBlbnRlciB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzZXIuCisqLworICAgIGlm ICghY2xjbWRzKQorICAgICAgaGVyYWxkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERp c3BsYXkgcHJvZ3JhbSBoZXJhbGQuICovCisKKyNpZmRlZiBOT0NDVFJBUAorICAgIGRlYnVnKEYx MDAsIm1haW4gTk9DQ1RSQVAgc2V0dGluZyBpbnRlcnJ1cHQgdHJhcCIsIiIsMCk7CisgICAgc2V0 aW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHVwIGNvbW1hbmQgaW50ZXJy dXB0IHRyYXBzICovCisgICAgZG9pY3AoTlVMTCk7CisjZWxzZSAvKiBOT0NDVFJBUCAqLworICAg IHdoaWxlICgxKSB7CisgICAgICAgIGRlYnVnKEYxMDAsIm1haW4gc2V0dGluZyBpbnRlcnJ1cHQg dHJhcCIsIiIsMCk7CisgICAgICAgIHNldGludCgpOyAgICAgICAgICAgICAgICAgICAgICAgLyog U2V0IHVwIGNvbW1hbmQgaW50ZXJydXB0IHRyYXBzICovCisgICAgICAgIGlmICghY2NfZXhlY3V0 ZShja2phZGRyKGNtamJ1ZiksIGRvaWNwLCBmYWlsaWNwKSkKKyAgICAgICAgICBicmVhazsKKyAg ICB9CisjZW5kaWYgLyogTk9DQ1RSQVAgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2lmbmRlZiBN QUlOSVNWT0lECisgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIE1BSU5JU1ZPSUQgKi8KK30KKwor I2lmZGVmIERZTkFNSUMKKy8qIEFsbG9jYXRlIGZpbGUgaS9vIGJ1ZmZlcnMgKi8KKworY2hhciAq emluYnVmZmVyID0gTlVMTCwgKnpvdXRidWZmZXIgPSBOVUxMOworCitpbnQKK2dldGlvYnMoKSB7 CisgICAgemluYnVmZmVyID0gKGNoYXIgKiltYWxsb2MoSU5CVUZTSVpFKTsKKyAgICBpZiAoIXpp bmJ1ZmZlcikgcmV0dXJuKC0xKTsKKyAgICB6b3V0YnVmZmVyID0gKGNoYXIgKiltYWxsb2Moem9i dWZzaXplKTsKKyAgICBkZWJ1ZyhGMTAxLCJ6b3V0YnVmZmVyIG1hbGxvYyIsIiIsem9idWZzaXpl KTsKKyAgICBpZiAoIXpvdXRidWZmZXIpIHJldHVybigtMSk7CisgICAgZGVidWcoRjEwMCwiZ2V0 aW9icyBvayIsIiIsMCk7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIERZTkFNSUMgKi8K CmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY21h aS5jLmM5OSBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjbWFpLmMu Yzk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjQwZTUKLS0tIC9kZXYv bnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY21haS5j LmM5OQpAQCAtMCwwICsxLDM1NzYgQEAKKyNkZWZpbmUgRURJVERBVEUgICIyMCBBdWcgMjAxMSIJ CS8qIExhc3QgZWRpdCBkYXRlIGRkIG1tbSB5eXl5ICovCisjZGVmaW5lIEVESVROREFURSAiMjAx MTA4MjAiCQkvKiBLZWVwIHRoZW0gaW4gc3luYyAqLworLyogU2F0IEF1ZyAyMCAxNzoyMDoxNyAy MDExICovCisKKy8qIGNrY21haS5jIC0gTWFpbiBwcm9ncmFtIGZvciBDLUtlcm1pdCBwbHVzIHNv bWUgbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgKi8KKworLyoKKyAgY2tjc3ltLmggaXMgdXNlZCBm b3IgZm9yIGRlZmluaW5nIHN5bWJvbHMgdGhhdCBub3JtYWxseSB3b3VsZCBiZSBkZWZpbmVkCisg IHVzaW5nIC1EIG9yIC1kIG9uIHRoZSBjYyBjb21tYW5kIGxpbmUsIGZvciB1c2Ugd2l0aCBjb21w aWxlcnMgdGhhdCBkb24ndAorICBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gIE11c3QgY29tZSBiZWZv cmUgYW55IHRlc3RzIGZvciBwcmVwcm9jZXNzb3Igc3ltYm9scy4KKyovCisjaW5jbHVkZSAiY2tj c3ltLmgiCisvKgorICBDb25zb2xpZGF0ZWQgcHJvZ3JhbSBDLUtlcm1pdCB2ZXJzaW9uIGluZm9y bWF0aW9uIGZvciBhbGwgcGxhdGZvcm1zCisgIChidXQgZm9yIFVOSVggYWxzbyBzZWUgY2t1dmVy LmgpLiAgU2VlIG1ha2V2ZXIoKSBiZWxvdyBmb3IgaG93IHRoZXkgYXJlIHVzZWQuCisqLworI2lm ZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgIC8qIFVuY29tbWVudCB0aGlzIGZvciByZWFs IEs5NSB2ZXJzaW9uICovCisjaWZuZGVmIE9TMgkJCQkvKiBPUzIgYWN0dWFsbHkgbWVhbnMgS2Vy bWl0IDk1LiAqLworI2lmbmRlZiBCRVRBVEVTVAkJCS8qIEl0J3MgYmVjYXVzZSBLZXJtaXQgOTUg c3RhcnRlZCAqLworI2RlZmluZSBCRVRBVEVTVAkJCS8qIG91dCBhcyBDLUtlcm1pdCBmb3IgT1Mv Mi4gKi8KKyNlbmRpZiAvKiBCRVRBVEVTVCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworI2lmZGVmIEJFVEFURVNUCisjaWZkZWYgT1MyCisjaWZkZWYgX19EQVRF X18KKyNkZWZpbmUgQkVUQURBVEUKKyNlbmRpZiAvKiBfX0RBVEVfXyAqLworI2VuZGlmIC8qIE9T MiAqLworI2VuZGlmIC8qIEJFVEFURVNUICovCisKK2NoYXIgKiBja19jcnllYXIgPSAiMjAxMSI7 IAkJLyogQy1LZXJtaXQgY29weXJpZ2h0IHllYXIgKi8KKworI2lmbmRlZiBNQUMJCQkJLyogTUFD ID0gS2VybWl0IGZvciBNQUMgT1MgNiwgNywgLi4uICovCisvKgorICBOb3RlOiBpbml0aWFsaXpl IGNrX3NfdGVzdCB0byAiIiBpZiB0aGlzIGlzIG5vdCBhIHRlc3QgdmVyc2lvbi4KKyAgVXNlICgq Y2tfc190ZXN0ICE9ICdcMCcpIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHByaW50IHRlc3QtcmVsYXRl ZCBtZXNzYWdlcy4KKyovCisKKyNpZm5kZWYgQkVUQVRFU1QKKyNpZm5kZWYgT1MyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBVTklYLCBWTVMsIGV0Yy4uLiAoaS5lLiBDLUtlcm1pdCkg Ki8KK2NoYXIgKmNrX3NfdGVzdCA9ICIiOwkJCS8qICJEZXYiLCJBbHBoYSIsIkJldGEiLCJSQyIs IG9yICIiICovCitjaGFyICpja19zX3R2ZXIgPSAiIjsJCQkvKiBUZXN0IHZlcnNpb24gbnVtYmVy IG9yICIiICovCisjZWxzZSAgLyogT1MyICovCitjaGFyICpja19zX3Rlc3QgPSAiIjsJCQkvKiAo aS5lLiBLOTUpICovCitjaGFyICpja19zX3R2ZXIgPSAiIjsKKyNlbmRpZiAvKiBPUzIgKi8KKyNl bHNlCitjaGFyICpja19zX3Rlc3QgPSAiIjsJCQkvKiBEZXZlbG9wbWVudCAqLworY2hhciAqY2tf c190dmVyID0gIiI7CisjZW5kaWYgLyogQkVUQVRFU1QgKi8KKyNlbHNlIC8qIE1BQyAqLworY2hh ciAqY2tfc190ZXN0ID0gIlByZS1BbHBoYSI7ICAgICAgICAgIC8qIE1hYyBLZXJtaXQgaXMgYWx3 YXlzIGEgdGVzdC4uLiAqLworY2hhciAqY2tfc190dmVyID0gIiI7CQkJLyogKHByZSBNYWMgT1Mg WCAxMCwgdGhhdCBpcyEpICovCisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBCRVRBREFURSAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlIG9mIHRoaXMgdmVyc2lvbiBvciBlZGl0ICov CitjaGFyICpja19zX2RhdGUgPSBfX0RBVEVfXzsgICAgICAgICAgICAgLyogQ29tcGlsYXRpb24g ZGF0ZSAqLworI2Vsc2UKK2NoYXIgKmNrX3NfZGF0ZSA9IEVESVREQVRFOwkJLyogU2VlIHRvcCAq LworCisjZW5kaWYgLyogQkVUQURBVEUgKi8KK2NoYXIgKmJ1aWxkaWQgPSBFRElUTkRBVEU7CQkv KiBTZWUgdG9wICovCisKKyNpZmRlZiBVTklYCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMp Qy1LZXJtaXQgOS4wLjMwMiI7CisjZW5kaWYgLyogVU5JWCAqLworCisvKgorICBUaGUgQy1LZXJt aXQgVmVyc2lvbiBudW1iZXIgaXMgbWFqb3IubWlub3IuZWRpdCAoaW50ZWdlcnMpLgorICBNYWpv ciB2ZXJzaW9uIGFsd2F5cyBnb2VzIHVwLgorICBNaW5vciB2ZXJzaW9uIGlzIGhpc3RvcmljYWws IGhhc24ndCBiZWVuIHVzZWQgc2luY2UgQy1LZXJtaXQgNy4xLgorICBFZGl0IGlzIHNlcXVlbnRp YWwsIGFsd2F5cyBnb2VzIHVwLCBidXQgdGhlcmUgY2FuIGJlIGdhcHMuCisgIEZvciBleGFtcGxl IHRoZXJlIG1pZ2h0IGJlIG1hbnkgZWRpdHMgYmV0d2VlbiByZWxlYXNlcy4KKyAgSWYgdGhlIG1h am9yIGdvZXMgdG8gMTAsIHNvbWUgdmVyc2lvbi1udW1iZXItYmFzZWQgZmVhdHVyZSB0ZXN0cwor ICBjb3VsZCBmYWlsLiAgSXQgbWlnaHQgYmUgYmV0dGVyIHRvIHVzZSB0aGUgbWlub3IgdmVyc2lv biBmaWVsZAorICBmb3IgZnV0dXJlIHJlbGVhc2VzLgorKi8KKworY2hhciAqY2tfc192ZXIgPSAi OS4wLjMwMiI7ICAgICAgICAgICAgIC8qIEMtS2VybWl0IHZlcnNpb24gc3RyaW5nICovCitsb25n ICBja19sX3ZlciA9ICA5MDAzMDJMOyAgICAgICAgICAgICAgLyogQy1LZXJtaXQgdmVyc2lvbiBu dW1iZXIgKi8KKworI2lmZGVmIE9TMgorY2hhciAqY2tfc194dmVyID0gIjMuMC4wIjsJCS8qIFBy b2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBzdHJpbmcgKi8KK2xvbmcgIGNrX2xfeHZlciA9IDMwMDBM OyAgICAgICAgICAgICAgICAvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24gbnVtYmVyICovCisj ZWxzZQorI2lmZGVmIE1BQworY2hhciAqY2tfc194dmVyID0gIjAuOTk1IjsgICAgICAgICAgICAg IC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBzdHJpbmcgKi8KK2xvbmcgIGNrX2xfeHZlciA9 IDk5NUw7ICAgICAgICAgICAgICAgICAvKiBQcm9kdWN0LXNwZWNpZmljIHZlcnNpb24gbnVtYmVy ICovCisjZWxzZQorY2hhciAqY2tfc194dmVyID0gIiI7ICAgICAgICAgICAgICAgICAgIC8qIERv bid0IHRvdWNoIHRoZXNlLi4uICovCitsb25nICBja19sX3h2ZXIgPSAwTDsgICAgICAgICAgICAg ICAgICAgLyogdGhleSBhcmUgY29tcHV0ZWQgYXQgcnVudGltZSAqLworI2VuZGlmIC8qIE1BQyAq LworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgSUtTRE9OTFkKKyNpZmRl ZiBOVAorY2hhciAqY2tfc19uYW1lID0gIklLUy1OVCI7CisjZWxzZSAvKiBOVCAqLworY2hhciAq Y2tfc19uYW1lID0gIklLUy1PUy8yIjsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogSUtTRE9O TFkgKi8KK2NoYXIgKmNrX3NfbmFtZSA9ICJLZXJtaXQgOTUiOyAgICAgICAgICAvKiBQcm9ncmFt IG5hbWUgKi8KKyNlbmRpZiAvKiBJS1NET05MWSAqLworI2Vsc2UKKyNpZmRlZiBNQUMKK2NoYXIg KmNrX3NfbmFtZSA9ICJNYWMgS2VybWl0IjsKKyNlbHNlCitjaGFyICpja19zX25hbWUgPSAiQy1L ZXJtaXQiOworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLworCitjaGFyICpja19z X3dobyA9ICIiOyAgICAgICAgICAgICAgICAgICAgLyogV2hlcmUgY3VzdG9taXplZCwgIiIgPSBu b3QuICovCitjaGFyICpja19wYXRjaCA9ICIiOyAgICAgICAgICAgICAgICAgICAgLyogUGF0Y2gg aW5mbywgaWYgYW55LiAqLworCisjZGVmaW5lIENLVkVSTEVOIDEyOAorY2hhciB2ZXJzaW94W0NL VkVSTEVOXTsgICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gc3RyaW5nIGJ1ZmZlciAgKi8KK2No YXIgKnZlcnNpbyA9IHZlcnNpb3g7ICAgICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgZmlsbGVk IGluIGF0ICovCitsb25nIHZlcm51bSwgeHZlcm51bTsgICAgICAgICAgICAgICAgICAgLyogcnVu dGltZSBmcm9tIGFib3ZlLiAgICAqLworCisjZGVmaW5lIENLQ01BSQorCisjaW5jbHVkZSAiY2tj YXNjLmgiICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhcmFjdGVyIHN5bWJvbHMgKi8K KyNpbmNsdWRlICJja2NkZWIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBEZWJ1ZyAmIG90aGVy IHN5bWJvbHMgKi8KKworY2hhciAqIG15bmFtZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8q IFRoZSBuYW1lIEkgYW0gY2FsbGVkIGJ5ICovCisjaWZuZGVmIE9TMgorY2hhciAqIGV4ZWRpciA9 IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBJIHdhcyBleGVjdXRlZCBmcm9t ICovCisjZW5kaWYgLyogT1MyICovCitjaGFyICogbXlob21lID0gTlVMTDsJCQkvKiBIb21lIGRp cmVjdG9yeSBvdmVycmlkZSAqLworCisvKiAgQyBLIEMgTSBBIEkgIC0tICBDLUtlcm1pdCBNYWlu IHByb2dyYW0gICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlh LmVkdSksCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIGNpdHkgb2YgTmV3IFlvcmssCisg IENvbXB1dGVyIENlbnRlciAvIENlbnRlciBmb3IgQ29tcHV0aW5nIEFjdGl2aXRpZXMgLyBJbmZv cm1hdGlvbiBUZWNobm9sb2d5LgorICBJIGFtIG5vIGxvbmdlciBhdCBDb2x1bWJpYSBVIGFzIG9m IDEgSnVseSAyMDExLCBidXQgdGhlIGVtYWlsIGFkZHJlc3MKKyAgc2hvdWxkIHN0aWxsIHdvcmsu ICBUaGUgS2VybWl0IHdlYnNpdGUgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUgc2hvdWxkCisg IHN0aWxsIGJlIGF2YWlsYWJsZSBhbmQgdW5kZXIgbXkgY29udHJvbCwgYXMgd2VsbCBhcyB0aGUg S2VybWl0IEZUUCBzaXRlLAorICBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC8uCisK K0NPUFlSSUdIVCBOT1RJQ0U6CisqLworCitjaGFyICpjb3B5cmlnaHRbXSA9IHsKKworI2lmZGVm IHBkcDExCisiQ29weXJpZ2h0IChDKSAxOTg1LCAlcywgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5p dmVyc2l0eSwgTllDLiIsCisiQWxsIHJpZ2h0cyByZXNlcnZlZC4iLAorIiAiLAorI2Vsc2UKKyJD b3B5cmlnaHQgKEMpIDE5ODUsICVzLCIsCisiICBUaGUgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5p dmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4iLAorIiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4iLAorIiAiLAorIlJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dCIsCisibW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIiwKKyJhcmUgbWV0OiIsCisiICIs CisiICsgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQiLAorIiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4iLAorIiAiLAorIiArIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IiwKKyIgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4iLAorIiAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUiLAorIiAgIGRpc3RyaWJ1dGlvbi4iLAorIiAiLAorIiArIE5laXRoZXIgdGhl IG5hbWUgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyIsCisiICAg Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIiwKKyIgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIiwKKyIgIiwKKyJUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIiwKKyJcIkFTIElTXCIgQU5E IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIiwK KyJMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IiLAorIkEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIiwKKyJIT0xERVIgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIiwKKyJTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg Tk9UIiwKKyJMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOyBMT1NTIE9GIFVTRSwiLAorIkRBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSIsCisiVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCIsCisi KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIiwKKyJPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIsCisjZW5kaWYgLyogcGRwMTEgKi8KKworI2lm ZGVmIE9TMgorIlBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMi0yMDA1LCBTZWN1cmUgRW5kcG9p bnRzIEluYywgTmV3IFlvcmsgTlkgVVNBLiIsCisiUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAxOTk1 LCBPeSBPbmxpbmUgU29sdXRpb25zIEx0ZC4sIEp5dmFza3lsYSwgRmlubGFuZC4iLAorI2VuZGlm IC8qIE9TMiAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyJQb3J0aW9ucyBDb3B5cmln aHQgKEMpIDE5OTAsIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuIiwKKyNp ZmRlZiBDS19FTkNSWVBUSU9OCisiUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkzIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4iLAorIlBvcnRpb25zIENvcHly aWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSBieSBBVCZULiIsCisiUG9ydGlv bnMgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCBFcmljIFlvdW5nIDxlYXlAY3J5cHRvc29mdC5j b20+LiIsCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX1NSUAorIlBvcnRp b25zIENvcHlyaWdodCAoQykgMTk5NywgU3RhbmZvcmQgVW5pdmVyc2l0eS4iLAorI2VuZGlmIC8q IENLX1NSUCAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNpZm5kZWYgcGRw MTEKKyIgIiwKKyJGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgdmlzaXQgdGhlIEtlcm1pdCBQcm9q ZWN0IHdlYnNpdGU6IiwKKyJodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvIC4iLAorI2Vu ZGlmIC8qIHBkcDExICovCisiIn07CisKKy8qIFdpbmRvd3MgSUtTRCBjb3B5cmlnaHQgdXNlZCB0 byBiZSBzZXBhcmF0ZSAqLworY2hhciAqd2lrc2RjcHIgPSAoY2hhciAqKSBjb3B5cmlnaHQ7CisK KworLyoKK0RPQ1VNRU5UQVRJT046CisKKyAiVXNpbmcgQy1LZXJtaXQiIGJ5IEZyYW5rIGRhIENy dXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLAorICBEaWdpdGFsIFByZXNzIC8gQnV0dGVyd29y dGgtSGVpbmVtYW5uLCBXb2J1cm4gTUEsIFVTQS4KKyAgU2Vjb25kIGVkaXRpb24gKDE5OTcpLCBJ U0JOIDEtNTU1NTgtMTY0LTEuCisgIE9yZGVyIGZyb20gRGlnaXRhbCBQcmVzczogICAgKzEgKDgw MCkgMzY2LTI2NjUKKyAgT3IgZnJvbSBDb2x1bWJpYSBVbml2ZXJzaXR5OiArMSAoMjEyKSA4NTQt MzcwMworCitGb3IgS2VybWl0IDk1LCBhbHNvOgorCisgICJLZXJtaXQgOTUiIGJ5IENocmlzdGlu ZSBNLiBHaWFub25lIGFuZCBGcmFuayBkYSBDcnV6LAorICBNYW5uaW5nIFB1YmxpY2F0aW9ucywg R3JlZW53aWNoIENULCBVU0EgKDE5OTgpIC0gT25saW5lLgorCitBQ0tOT1dMRURHTUVOVFM6CisK KyAgVGhlIEtlcm1pdCBmaWxlIHRyYW5zZmVyIHByb3RvY29sIHdhcyBkZXZlbG9wZWQgYXQgdGhl IENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgQ2VudGVyIGZvciBDb21wdXRpbmcgQWN0aXZpdGllcyAo Q1VDQ0EpLCB3aGljaCB3YXMgc2luY2UgcmVuYW1lZCB0byBDb2x1bWJpYQorICBVbml2ZXJzaXR5 IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMgKEFjSVMpIGFuZCBhZnRlciB0aGF0IENvbHVt YmlhCisgIFVuaXZlcnNpdHkgSW5mb3JtYXRpb24gVGVjaG5vbG9neSAoQ1VJVCkuICBLZXJtaXQg aXMgbmFtZWQgYWZ0ZXIgS2VybWl0IHRoZQorICBGcm9nLCBzdGFyIG9mIHRoZSB0ZWxldmlzaW9u IHNlcmllcyBUSEUgTVVQUEVUIFNIT1c7IHRoZSBuYW1lIGlzIHVzZWQgYnkKKyAgcGVybWlzc2lv biBvZiBIZW5zb24gQXNzb2NpYXRlcywgSW5jLgorCisgIFRoYW5rcyB0byBhdCBsZWFzdCB0aGUg Zm9sbG93aW5nIHBlb3BsZSBmb3IgdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGlzCisgIHByb2dy YW0gb3ZlciB0aGUgeWVhcnMsIGFuZCBhcG9sb2dpZXMgdG8gYW55b25lIHdobyB3YXMgaW5hZHZl cnRhbnRseQorICBvbWl0dGVkOgorCisgICBDaHJpcyBBZGllLCBFZGluYnVyZ2ggVSwgU2NvdGxh bmQgKE9TLzIpCisgICBSb2JlcnQgQWRzZXR0LCBVbml2ZXJzaXR5IG9mIFdhdGVybG9vLCBDYW5h ZGEKKyAgIExhcnJ5IEFmcmluLCBDbGVtc29uIFUKKyAgIFJ1c3MgQWxsYmVyeSwgU3RhbmZvcmQg VQorICAgSmVmZnJleSBBbHRtYW4sIENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgIEdyZWcgQW5kcmV3 cywgVGVsZWJpdCBDb3JwCisgICBCYXJyeSBBcmNoZXIsIFUgb2YgTWlzc291cmkKKyAgIFJvYmVy dCBBbmRlcnNzb24sIEludGVybmF0aW9uYWwgU3lzdGVtcyBBL1MsIE9zbG8sIE5vcndheQorICAg Q2hyaXMgQXJtc3Ryb25nLCBCcm9va2hhdmVuIE5hdGlvbmFsIExhYiAoT1MvMikKKyAgIFdpbGxp YW0gQmFkZXIsIFNvZnR3YXJlIENvbnN1bHRpbmcgU2VydmljZXMsIE5hemFyZXRoLCBQQQorICAg RnVhdCBCYXJhbiwgQ29sdW1iaWEgVQorICAgU3RhbiBCYXJiZXIsIFJpY2UgVQorICAgSmltIEJh cmJvdXIsIFUgb2YgQ29sb3JhZG8KKyAgIERvbm4gQmF1bWdhcnRuZXIsIERlbGwKKyAgIElhbiBC ZWNrd2l0aCwgRGViaWFuIFByb2plY3QKKyAgIE5lbHNvbiBCZWViZSwgVSBvZiBVdGFoCisgICBH ZXJyeSBCZWxhbmdlciwgQ29nbml0cm9uaWNzCisgICBLYXJsIEJlcnJ5LCBVTUIKKyAgIE1hcmsg QmVycnltYW4sIFNBSUMKKyAgIERlYW4gVyBCZXR0aW5nZXIsIFNVTlkKKyAgIEdhcnkgQmlsa3Vz CisgICBQZXRlciBCaW5kZXJ1cCwgRGVubWFyaworICAgRGF2aWQgQm9sZW4sIEFkdmFuY2VkIE5l dHdvcmtzIGFuZCBTZXJ2aWNlcywgSW5jLgorICAgSm9vcCBCb25lbgorICAgTWFyYyBCb3VjaGVy LCBVIG9mIE1vbnRyZWFsCisgICBDaGFybGVzIEJyb29rcywgRUROCisgICBCb2IgQnJvd24KKyAg IE1pa2UgQnJvd24sIFB1cmR1ZSBVCisgICBSb2IgQnJvd24KKyAgIEphY2sgQnJ5YW5zLCBDYWxp Zm9ybmlhIFN0YXRlIFUgYXQgTG9uZyBCZWFjaAorICAgTWFyayBCdWRhLCBERUMgKFZNUykKKyAg IEZlcm5hbmRvIENhYnJhbCwgUGFkcmFvIGlYLCBCcmFzaWxpYQorICAgQmpvcm4gQ2FybHNzb24s IFN0b2NraG9sbSBVbml2ZXJzaXR5IENvbXB1dGVyIENlbnRyZSBRWiwgU3dlZGVuCisgICBCaWxs IENhdGNoaW5ncywgKGZvcm1lcmx5IG9mKSBDb2x1bWJpYSBVCisgICBCb2IgQ2F0dGFuaSwgQ29s dW1iaWEgVSBDUyBEZXB0CisgICBEYXZpZGUgQ2Vydm9uZSwgUm9jaGVzdGVyIFUKKyAgIFNldGgg Q2hhaWtsaW4sIERlbm1hcmsKKyAgIEpvaG4gQ2hhbmRsZXIsIEhhcnZhcmQgVSAvIFNtaXRoc29u aWFuIEFzdHJvbm9taWNhbCBPYnNlcnZhdG9yeQorICAgQmVybmFyZCBDaGVuLCBVQ0xBCisgICBB bmRyZXcgQSBDaGVybm92LCBSRUxDT00gVGVhbSwgTW9zY293CisgICBKb2huIEwgQ2htaWVsZXdz a2ksIEFUJlQsIExpc2xlLCBJTAorICAgSG93YXJkIENodSwgVSBvZiBNaWNoaWdhbgorICAgQmls bCBDb2Fsc29uLCBNY0Rvbm5lbGwgRG91Z2xhcworICAgQmVydGllIENvb3BlcnNtaXRoLCBMb25k b24KKyAgIENocmlzdGlhbiBDb3J0aQorICAgQ2hldCBDcmVpZGVyLCBVIG9mIFdlc3Rlcm4gT250 YXJpbworICAgQWxhbiBDcm9zc3dlbGwsIENvbHVtYmlhIFUKKyAgIEplZmYgRGFtZW5zLCAoZm9y bWVybHkgb2YpIENvbHVtYmlhIFUKKyAgIE1hcmsgRGF2aWVzLCBCYXRoIFUsIFVLCisgICBTaW4t aXRpcm91IERlemF3YSwgRnVqaWZpbG0sIEphcGFuCisgICBKb2UgUi4gRG91cG5paywgVXRhaCBT dGF0ZSBVCisgICBGcmFuayBEcmVhbm8sIEhvbmV5d2VsbAorICAgSm9obiBEdW5sYXAsIFUgb2Yg V2FzaGluZ3RvbgorICAgQWxleCBEdXB1eSwgU01BUlQuQ09NCisgICBEYXZpZCBEeWNrLCBKb2hu IEZsdWtlIE1mZyBDby4KKyAgIFN0ZWZhYW4gQS4gRWVja2VscywgRXVyb2tvbSwgTHV4ZW1ib3Vy ZworICAgTmljayBFZnRoeW1pb3UKKyAgIFBhdWwgRWdnZXJ0LCBUd2luIFN1biwgSW5jLiwgRWwg U2VndW5kbywgQ0EKKyAgIEJlcm5pZSBFaWJlbiwgREVDCisgICBQZXRlciBFaWNoaG9ybiwgQXNz eXN0IEludGVybmF0aW9uYWwKKyAgIEtyaXN0b2ZmZXIgRXJpa3Nzb24sIFBlcmlkb3QgS29uc3Vs dCBBQiwgT2VyZWJybywgU3dlZGVuCisgICBKb2huIFIuIEV2YW5zLCBJUlMsIEthbnNhcyBDaXR5 CisgICBHbGVubiBFdmVyaGFydCwgUkNBIExhYnMKKyAgIENoYXJsaWUgRmluYW4sIENyYXkgUmVz ZWFyY2gKKyAgIEhlcm0gRmlzY2hlciwgRW5jaW5vLCBDQSAoZXh0ZW5zaXZlIGNvbnRyaWJ1dGlv bnMgdG8gdmVyc2lvbiA0LjApCisgICBDYXJsIEZvbmdoZWlzZXIsIENXUlUKKyAgIE1pa2UgRnJl ZW1hbiwgQm9ubmV2aWxsZSBQb3dlciBBdXRob3JpdHkKKyAgIENhcmwgRnJpZWRiZXJnCisgICBN YXJjZWxsbyBGcnV0aWcsIENhdGhvbGljIFVuaXZlcnNpdHksIFNhbyBQYXVsbywgQnJhemlsIChY LjI1IHN1cHBvcnQpCisgICBIaXJvZnVtaSBGdWppaSwgSmFwYW4gTmF0J2wgTGFiIGZvciBIaWdo IEVuZXJneSBQaHlzaWNzLCBUb2t5byAoS2FuamkpCisgICBDaHVjayBGdWxsZXIsIFdlc3Rpbmdo b3VzZSBDb3Jwb3JhdGUgQ29tcHV0ZXIgU2VydmljZXMKKyAgIEFuZHkgRnlmZSwgQ2FsdGVjaAor ICAgQ2hyaXN0aW5lIE0uIEdpYW5vbmUsIENvbHVtYmlhIFUKKyAgIEpvaG4gR2lsbW9yZSwgVUMg QmVya2VsZXkKKyAgIE1hZGh1c3VkYW4gR2l5eWFycHVyYW0sIEhQCisgICBSYWluZXIgR2xhc2No aWNrLCBTaWVtZW5zIEFHLCBQYWRlcmJvcm4KKyAgIFdpbGxpYW0gSC4gR2xhc3MKKyAgIEdlcm1h biBHb2xkc3ptaWR0LCBJQk0KKyAgIENodWNrIEdvb2RoYXJ0LCBOQVNBCisgICBBbGlzdGFpciBH b3JtYW4sIE5ldyBaZWFsYW5kCisgICBSaWNoYXJkIEdyYXRpb24sIEFERkEsIEF1c3RyYWxpYQor ICAgQ2hyaXMgR3JlZW4sIEVzc2V4IFUsIFVLCisgICBBbGFuIEdyaWVnLCBEdW5kZWUgVGVjaCwg U2NvdGxhbmQKKyAgIFlla3RhIEd1cnNlbCwgTUlUCisgICBKaW0gR3V5dG9uLCBSYW5kIENvcnAK KyAgIE1pY2hhZWwgSGFlcnRlbAorICAgQnJ1bm8gSGFpYmxlCisgICBCb2IgSGFpbiwgVU1OCisg ICBNYXJpb24gSGFrYW5zb24sIE9SU1QKKyAgIFJpY2hhcmQgSGFtaWx0b24KKyAgIEpvaG4gSGFt aWxzdG9uLCBJb3dhIFN0YXRlIFUKKyAgIFNpbW9uIEhhbmlhLCBOZXRoZXJsYW5kcworICAgU3Rh biBIYW5rcywgUmljZSBVLgorICAgS2VuIEhhcnJlbnN0ZWluLCBTUkkKKyAgIEV1Z2VuaWEgSGFy cmlzLCBEYXRhIEdlbmVyYWwgKEFPUy9WUykKKyAgIERhdmlkIEhhcnJpc29uLCBLaW5nc3RvbiBX YXJyZW4gQ29ycAorICAgTHVjYXMgSGFydCwgT3JlZ29uIFN0YXRlIFVuaXZlcnNpdHkKKyAgIEph bWVzIEhhcnZleSwgSW5kaWFuYS9QdXJkdWUgVSAoVk1TKQorICAgUm9iIEhlYWxleQorICAgQ2h1 Y2sgSGVkcmljaywgUnV0Z2VycyBVCisgICBSb24gSGVpYnksIFRlY2huaWNhbCBTeXN0ZW1zIERp dmlzaW9uLCBNb3Rvcm9sYSBDb21wdXRlciBHcm91cAorICAgU3RldmUgSGVtbWluZ2VyLCBUZWt0 cm9uaXgKKyAgIENocmlzdGlhbiBIZW1zaW5nLCBSV1RIIEFhY2hlbiwgR2VybWFueSAoT1MtOSkK KyAgIFJhbmRvbHBoIEhlcmJlciwgVVMgRE9FLAorICAgQW5kcmV3IEhlcmJlcnQsIE1vbmFzaCBV bml2LCBBdXN0cmFsaWEKKyAgIE1hcmN1cyBIZXJiZXJ0LCBHZXJtYW55CisgICBNaWtlIEhpY2tl eSwgSVRJCisgICBEYW4gSGlsZGVicmFuZCwgUU5YIFNvZnR3YXJlIFN5c3RlbXMgSW5jLCBLYW5h dGEsIE9OIChRTlgpCisgICBSIEUgSGlsbAorICAgU3RlcGhhbiBIb2ZmbWFuLUVtZGVuCisgICBT dmVuIEhvbG1zdHJvbSwgQUJCIFV0aWxpdGllcyBBQiwgU3dlZGVuCisgICBCaWxsIEhvbWVyLCBD cmF5IFJlc2VhcmNoCisgICBSYXkgSHVudGVyLCBUaGUgV29sbG9uZ29uZyBHcm91cAorICAgUmFu ZHkgSHVudHppZ2VyLCBOYXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lCisgICBMYXJyeSBKYWNv YnMsIFRyYW5zYXJjCisgICBTdGV2ZSBKZW5raW5zLCBMYW5jYXN0ZXIgVW5pdmVyc2l0eSwgVUsK KyAgIERhdmUgSm9obnNvbiwgR3JhZGllbnQgVGVjaG5vbG9naWVzCisgICBNYXJrIEIgSm9obnNv biwgQXBwbGUgQ29tcHV0ZXIKKyAgIEp5a2UgSm9raW5lbiwgVGFtcGVyZSBVbml2ZXJzaXR5IG9m IFRlY2hub2xvZ3ksIEZpbmxhbmQgKFFOWCkKKyAgIEVyaWMgRiBKb25lcywgQVQmVAorICAgTHVr ZSBKb25lcywgQVQmVAorICAgUGV0ZXIgSm9uZXMsIFUgb2YgUXVlYmVjIE1vbnRyZWFsCisgICBQ aGlsIEp1bGlhbiwgU0FTIEluc3RpdHV0ZQorICAgUGV0ZXIgS2FiYWwsIFUgb2YgUXVlYmVjCisg ICBNaWMgS2Fjem1hcmN6aWssIFUgb2YgVGV4YXMgYXQgQXVzdGluCisgICBTZXJnZXkgS2FydGFz aG9mZiwgSW5zdC4gb2YgUHJlY2lzZSBNZWNoYW5pY3MgJiBDb21wdXRlciBFcXVpcG1lbnQsIE1v c2NvdworICAgSG93aWUgS2F5ZSwgQ29sdW1iaWEgVQorICAgUm9iIEtlZG9pbiwgTGlub3R5cGUg Q28sIEhhdXBwYXVnZSwgTlkgKE9TLzIpCisgICBQaGlsIEtlZWdzdHJhCisgICBNYXJrIEtlbm5l ZHksIElCTQorICAgVGVycnkgS2VubmVkeSwgU3QgUGV0ZXIncyBDb2xsZWdlLCBKZXJzZXkgQ2l0 eSwgTkogKFZNUyBhbmQgbW9yZSkKKyAgICJDYXJsbyBLaWQiLCBUZWNobmljYWwgVW5pdmVyc2l0 eSBvZiBEZWxmdCwgTmV0aGVybGFuZHMKKyAgIFRpbSBLaWVudHpsZQorICAgUGF1bCBLaW1vdG8s IENvcm5lbGwgVQorICAgRG91Z2xhcyBLaW5nc3RvbiwgbW9yZ2FuLmNvbQorICAgTGF3cmVuY2Ug S2lyYnksIFdpbHRzaGlyZSwgVUsKKyAgIFRvbSBLbG9vcywgU2VxdWVudCBDb21wdXRlciBTeXN0 ZW1zCisgICBHdWVudGVyIEtuYXVmCisgICBKaW0gS251dHNvbiwgVSBvZiBUZXhhcyBhdCBBdXN0 aW4KKyAgIEpvaG4gVC4gS29obCAoQlNESSkKKyAgIFNjb3R0IEtyYW1lciwgU1JJIEludGVybmF0 aW9uYWwsIE1lbmxvIFBhcmssIENBCisgICBKb2huIEtyYXluYWNrLCBVUyBQb3N0YWwgU2Vydmlj ZQorICAgRGF2aWQgS3JpY2tlciwgRW5jb3JlIENvbXB1dGVyCisgICBUaG9tYXMgS3J1ZWdlciwg VVdNCisgICBCbyBLdWxsbWFyLCBBQkMgS2x1YmJlbiwgU3RvY2tob2xtLCBhbmQgQ2VudHJhbCBC YW5rIG9mIFN3ZWRlbiwgS2lzdGEKKyAgIFIuIEJyYWQgS3VtbWVyLCBBVCZUIEJlbGwgTGFicywg QXRsYW50YSwgR0EKKyAgIEpvaG4gS3VuemUsIFVDIEJlcmtlbGV5CisgICBEYXZpZCBMYW5lLCBC U1NJIC8gQmVsbFNvdXRoIChTdHJhdHVzIFZPUywgWC4yNSkKKyAgIEJvYiBMYXJzb24sIFVTQyAo T1MtOSkKKyAgIEJlcnQgTGF2ZXJtYW4sIEdyb25pbmdlbiBVLCBOZXRoZXJsYW5kcworICAgU3Rl dmUgTGF5dG9uCisgICBEYXZpZCBMYXd5ZXIsIFVDIElydmluZQorICAgSmFzb24gTGVocgorICAg RGF2aWQgTGVWaW5lLCBOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvcnBvcmF0aW9uCisgICBEYW5p ZWwgUy4gTGV3YXJ0LCBVSVVDCisgICBTLk8uIExpZGllLCBMZWhpZ2ggVQorICAgVG9yIExpbGxx dmlzdCwgSGVsc2lua2kgVSwgRmlubGFuZAorICAgRGF2aWQtTWljaGFlbCBMaW5ja2UsIFUgb2Yg U3QgR2FsbGVuLCBTd2l0emVybGFuZAorICAgUm9iZXJ0IExpcGUgKGZvciBTQ08gbWFrZWZpbGUg ZW50cmllcyAmIGFkdmljZSkKKyAgIERlYW4gTG9uZworICAgTWlrZSBMb25nLCBBbmFsb2cgRGV2 aWNlcywgTm9yd29vZCBNQQorICAgS2V2aW4gTG93ZXksIFUgb2YgU2Fza2F0Y2hld2FuIChPUy8y KQorICAgQW5keSBMb3dyeSwgQ29sdW1iaWEgVQorICAgSmFtZXMgTHVtbWVsLCBDYXByaWNhIFRl bGVjb21wdXRpbmcgUmVzb3VyY2VzIChRTlgpCisgICBMZXdpcyBNY0NhcnRoeQorICAgRGF2aWQg TWFjS2VuemllLCBFbnZpcm9ubWVudGFsIERlZmVuc2UgRnVuZCwgVSBvZiBNYXJ5bGFuZAorICAg Sm9obiBNYWNraW4sIFVuaXZlcnNpdHkgb2YgU2lkbmV5LCBBdXN0cmFsaWEKKyAgIE1hcnRpbiBN YWNsYXJlbiwgQmF0aCBVLCBVSworICAgQ2hyaXMgTWFpbywgQ29sdW1iaWEgVSBDUyBEZXB0Cisg ICBNb250c2VycmF0IE1hbmUsIEhQLCBHcmVub2JsZSwgRnJhbmNlCisgICBGdWx2aW8gTWFyaW5v LCBPbGl2ZXR0aSwgSXZyZWEsIEl0YWx5CisgICBBcnRodXIgTWFyc2gsIGRpcmNzYS5vcmcuYXUK KyAgIFBldGVyIE1hdXpleSwgTHVjZW50IFRlY2hub2xvZ2llcworICAgVHllIE1jUXVlZW4sIFV0 YWggU3RhdGUgVQorICAgVGVkIE1lZGluCisgICBIZWxsbXV0aCBNaWNoYWVsaXMsIEhhbnNlYXRp c2NoZXIgQ29tcHV0ZXJzZXJ2aWNlIEdtYkgsIEhhbWJ1cmcsIEdlcm1hbnkKKyAgIExlc2xpZSBN aWtlc2VsbCwgQW1lcmljYW4gRmFybSBCdXJlYXUKKyAgIFRvZGQgTWlsbGVyLCBDb3VydGVzYW4g Q29uc3VsdGluZworICAgR2FyeSBNaWxscworICAgTWFydGluIE1pbm93LCBERUMgKFZNUykKKyAg IFBhd2FuIE1pc3JhLCBCZWxsY29yZQorICAgS2VuIE1pemlhbGtvLCBJQk0sIE1hbmFzc2FzLCBW QQorICAgV29sZmdhbmcgTW9lbGxlciwgREVDVVMgR2VybWFueQorICAgUmF5IE1vb2R5LCBQdXJk dWUgVQorICAgQnJ1Y2UgSiBNb29yZSwgQWxsZW4tQnJhZGxleSBDbywgSGlnaGxhbmQgSGVpZ2h0 cywgT0ggKEF0YXJpIFNUKQorICAgU3RldmUgTW9ybGV5LCBDb252ZXgKKyAgIFBldGVyIE1vc3Nl bCwgQ29sdW1iaWEgVQorICAgVG9ueSBNb3ZzaG9uLCBOWVUKKyAgIExvdSBNdWNjaW9saSwgU3dh bnNvbiBBbmFseXNpcyBTeXN0ZW1zCisgICBEYW4gTXVycGh5CisgICBOZWFsIFAuIE11cnBoeSwg SGFyc29mIFN5c3RlbXMsIFdvbmRlciBMYWtlIElMCisgICBHYXJ5IE11c3NhcgorICAgSm9obiBO YWxsLCBGU1UKKyAgIEphY2sgTmVsc29uLCBVIG9mIFBpdHRzYnVyZ2gKKyAgIEppbSBOb2JsZSwg UGxhbm5pbmcgUmVzZWFyY2ggQ29ycG9yYXRpb24gKE1hY2ludG9zaCkKKyAgIElhbiBPJ0JyaWVu LCBCYXRoIFUsIFVLCisgICBNZWxpc3NhIE8nTmVpbGwsIFNGVQorICAgSm9obiBPd2VucworICAg VGhvbWFzIFBpbmtsLCBIZWFsdGggQnVzaW5lc3MgU3lzdGVtcyBJbmMuCisgICBNaWNoYWVsIFBp bnMsIElvd2EgQ29tcHV0ZXIgQWlkZWQgRW5naW5lZXJpbmcgTmV0d29yaworICAgQW5kcmUnIFBp cmFyZCwgVW5pdmVyc2l0eSBvZiBMaWVnZSwgQmVsZ2l1bQorICAgUGF1bCBQbGFjZXdheSwgT2hp byBTdGF0ZSBVCisgICBQaWV0IFcuIFBsb21wLCBJQ0NFLCBHcm9uaW5nZW4gVW5pdmVyc2l0eSwg TmV0aGVybGFuZHMKKyAgIEtlbiBQb3VsdG9uLCBIUCBMYWJzCisgICBNYW5mcmVkIFByYW5nZSwg T2FrbGFuZCBVCisgICBDaHJpc3RvcGhlciBQcmF0dCwgQVBWIEJha2VyLCBVSworICAgRnJhbmsg UHJpbmRsZSwgTkFEQworICAgVG9ueSBRdWVydWJpbiwgVSBvZiBIYXdhaWkKKyAgIEplYW4tUGll cnJlIFJhZGxleQorICAgQW50b24gUmFuZworICAgTWlrZSBSZWNodG1hbgorICAgU2NvdHQgUmli ZQorICAgQWxhbiBSb2JpZXR0ZSwgT3hmb3JkIFVuaXZlcnNpdHksIFVLCisgICBNaWNoZWwgUm9i aXRhaWxsZSwgVSBvZiBNb250cmVhbCAoTWFjKQorICAgSHV3IFJvZ2VycywgU2Nod2VpemVyaXNj aGUgS3JlZGl0YW5zdGFsdCwgWnVlcmljaAorICAgTmlnZWwgUm9sZXMsIENhbWJyaWRnZSwgRW5n bGFuZAorICAgS2FpIFV3ZSBSb21tZWwsIFRlY2huaXNjaGUgVW5pdmVyc2l0YWV0IE11ZW5jaGVu IChPUy8yKQorICAgTGFycnkgUm9zZW5tYW4gKEFtaWdhKQorICAgSmF5IFJvdW1hbiwgVSBvZiBN aWNoaWdhbgorICAgSmFjayBSb3VzZSwgU0FTIEluc3RpdHV0ZSAoRGF0YSBHZW5lcmFsIGFuZC9v ciBBcG9sbG8pCisgICBTdGV3IFJ1YmVuc3RlaW4sIEhhcnZhcmQgVSAoVk1TKQorICAgR2VyaGFy ZCBSdWVja2xlLCBGSCBEYXJtc3RhZHQsIEZiLiBFL0F1dG9tYXRpc2llcnVuZ3N0ZWNobmlrCisg ICBKb2huIFNhbnRvcywgRUcmSAorICAgQmlsbCBTY2hpbGl0LCBDb2x1bWJpYSBVCisgICBVbGxp IFNjaGx1ZXRlciwgUldUSCBBYWNoZW4sIEdlcm1hbnkgKE9TLTksIGV0YykKKyAgIE1pY2hhZWwg U2NobWlkdCwgVSBvZiBQYWRlcmJvcm4sIEdlcm1hbnkKKyAgIEVyaWMgU2Nobm9lYmVsZW4sIENv bnZleAorICAgQmVubiBTY2hyZWliZXIsIERFQworICAgRGFuIFNjaHVsbG1hbiwgREVDIChtb2Rl bXMsIERJQUwgY29tbWFuZCwgZXRjKQorICAgSm9obiBTY2h1bHR6LCAzTQorICAgU3RldmVuIFNj aHVsdHosIENvbnRlbCAoUERQLTExKQorICAgU3RldmVuIFNjaHdlZGEKKyAgIEFQUFAgU2NvcmVy LCBMZWVkcyBQb2x5dGVjaG5pYywgVUsKKyAgIEdvcmRvbiBTY290dCwgTWljcm8gRm9jdXMsIE5l d2J1cnkgVUsKKyAgIEdpc2JlcnQgVy4gU2Vsa2UsIFdJZE8sIEJvbm4sIEdlcm1hbnkKKyAgIEtp amFsIFNoYWgKKyAgIERhdmlkIFNpbmdlciwgSUJNIEFsbWFkZW4gUmVzZWFyY2ggTGFicworICAg RGF2aWQgU2l6ZWxhbmQsIFUgb2YgTG9uZG9uIE1lZGljYWwgU2Nob29sCisgICBGcmlkcmlrIFNr dWxhc29uLCBJY2VsYW5kCisgICBSaWNrIFNsYWRrZXkgKExpbnV4KQorICAgRGF2ZSBTbGF0ZQor ICAgQnJhZGxleSBTbWl0aCwgVUNMQQorICAgRnJlZCBTbWl0aCwgTWVyayAvIENvbXB1dHJpdGlv bgorICAgUmljaGFyZCBTIFNtaXRoLCBDYWwgU3RhdGUKKyAgIFJ5YW4gU3RhbmlzZmVyLCBVTlQK KyAgIEJlcnRpbCBTdGVuc3Ryb2VtLCBTdG9ja2hvbG0gVW5pdmVyc2l0eSBDb21wdXRlciBDZW50 cmUgKFFaKSwgU3dlZGVuCisgICBKYW1lcyBTdHVyZGV2YW50LCBDQVAgR0VNRU5JIEFNRVJJQ0Es IE1pbm5lYXBvbGlzCisgICBQZXRlciBTdmFuYmVyZywgUm95YWwgVGVjaG4uIEhTLCBTd2VkZW4K KyAgIEphbWVzIFIuIFN3ZW5zb24sIEFjY3UtV2VhdGhlciwgSW5jLgorICAgVGVkIFQnc28sIE1J VCAoTGludXgpCisgICBBbmR5IFRhbmVuYmF1bSwgVnJpamUgVSwgQW1zdGVyZGFtLCBOZXRoZXJs YW5kcworICAgU2V0aCBUaGVyaWF1bHQsIENvbHVtYmlhIFUKKyAgIEdsZW4gVGhvYmUKKyAgIE1h cmtrdSBUb2lqYWxhLCBIZWxzaW5raSBVIG9mIFRlY2hub2xvZ3kKKyAgIFRlZW11IFRvcm1hLCBI ZWxzaW5raSBVIG9mIFRlY2hub2xvZ3kKKyAgIExpbnVzIFRvcnZhbGRzLCBIZWxzaW5raQorICAg UmljayBUcm94ZWwsIE5JSAorICAgV2FycmVuIFR1Y2tlciwgVHJpZG9tIENvcnAsIE1vdW50YWlu IFBhcmssIEdBCisgICBEYXZlIFR3ZXRlbiwgQU1FUy1OQVMKKyAgIEcgVWRkZWJvcmcsIFN3ZWRl bgorICAgV2FsdGVyIFVuZGVyd29vZCwgRm9yZCBBZXJvc3BhY2UKKyAgIFBpZXRlciBWYW4gRGVy IExpbmRlbiwgQ2VudHJlIE1vbmRpYWwsIFBhcmlzCisgICBHZSB2YW4gR2VsZG9ycCwgTmV0aGVy bGFuZHMKKyAgIEZyZWQgdmFuIEtlbXBlbiwgTUlOSVggVXNlciBHcm91cCwgVm9vcmhvdXQsIE5l dGhlcmxhbmRzCisgICBXYXluZSBWYW4gUGVsdCwgR0UvQ1JECisgICBNYXJrIFZhc29sbCwgT2ts YWhvbWEgU3RhdGUgVSAoVjcgVU5JWCkKKyAgIEtvbnN0YW50aW4gVmlub2dyYWRvdiwgSUNTVEks IE1vc2NvdworICAgUGF1bCBWaXhpZSwgREVDCisgICBCZXJuaWUgVm9seiwgUHJvY2VzcyBTb2Z0 d2FyZQorICAgRWR1YXJkIFZvcGlja2EsIFByYWd1ZSBVbml2ZXJzaXR5IG9mIEVjb25vbWljcywg Q3plY2ggUmVwdWJsaWMKKyAgIE1hcnRpbiBWb3JsYWVuZGVyCisgICBEaW1pdHJpIFZ1bGlzLCBD VU5ZCisgICBSb2dlciBXYWxsYWNlLCBSYXl0aGVvbgorICAgU3RlcGhlbiBXYWx0b24sIENhbGlm IFN0YXRlIFUsIE5vcnRocmlkZ2UgKEFtaWdhKQorICAgSmFtaWUgV2F0c29uLCBBZGFzb2Z0LCBT d2l0emVybGFuZCAoQUlYKQorICAgUmljayBXYXRzb24sIFUgb2YgVGV4YXMgKE1hY2ludG9zaCkK KyAgIEVyaWMgV2VhdmVyLCBDb2x1bWJpYSBVCisgICBTY290dCBXZWlrYXJ0IChBc3NvY2lhdGlv biBmb3IgUHJvZ3Jlc3NpdmUgQ29tbXVuaWNhdGlvbnMpCisgICBSb2JlcnQgV2VpbmVyLCBQcm9n cmFtbWluZyBQbHVzLCBOZXcgWW9yayBDaXR5CisgICBMYXVyZW4gV2VpbnN0ZWluLCBWb3J0ZXgg VGVjaG5sb2d5CisgICBEYXZpZCBXZXhlbGJsYXQsIEFUJlQKKyAgIENsYXJrIFdpZXJkYSwgSWxs dW1pbmF0aSBPbmxpbmUKKyAgIEpvYWNoaW0gV2llc2VsLCBVIG9mIEthcmxzcnVoZQorICAgTG9u IFdpbGxldHQsIFUgb2YgVXRhaAorICAgTWljaGFlbCBXaWxsaWFtcywgVUNMQQorICAgTmF0ZSBX aWxsaWFtcywgVSBvZiBNb250YW5hCisgICBEYXZpZCBXaWxzb24KKyAgIEpvZWxsZW4gV2luZHNv ciwgVSBvZiBBcml6b25hCisgICBQYXRyaWNrIFdvbGZlLCBLdWNrICYgQXNzb2NpYXRlcywgSW5j LgorICAgR3JlZ2cgV29uZGVybHksIE9rbGFob21hIFN0YXRlIFUgKFY3IFVOSVgpCisgICBGYXJy ZWxsIFdvb2RzLCBDb25jdXJyZW50IChmb3JtZXJseSBNYXNzY29tcCkKKyAgIERhdmUgV29vbGxl eSwgQ0FQIENvbW11bmljYXRpb24gU3lzdGVtcywgTG9uZG9uCisgICBKYWNrIFdvb2xsZXksIFND VCBDb3JwCisgICBGcmFuayBXb3J0bmVyCisgICBLZW4gWWFwLCBmb3JtZXJseSBvZiBVIG9mIFJv Y2hlc3RlcgorICAgSm9obiBaZWVmZiwgQW5uIEFyYm9yLCBNSQorKi8KKworI2luY2x1ZGUgImNr Y2tlci5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBzeW1ib2xzICovCisjaW5jbHVk ZSAiY2tjbmV0LmgiICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzeW1ib2xzICovCisK KyNpZmRlZiBDS19TU0wKKyNpbmNsdWRlICJja19zc2wuaCIKKyNlbmRpZiAvKiBDS19TU0wgKi8K KworI2lmbmRlZiBOT1NQTAorI2luY2x1ZGUgImNrdXVzci5oIgorI2VuZGlmIC8qIE5PU1BMICov CisKKyNpZmRlZiBPUzJPTkxZCisjZGVmaW5lIElOQ0xfVklPICAgICAgICAgICAgICAgICAgICAg ICAgLyogTmVlZGVkIGZvciBja29jb24uaCAqLworI2luY2x1ZGUgPG9zMi5oPgorI3VuZGVmIENP TU1FTlQKKyNlbmRpZiAvKiBPUzJPTkxZICovCisKKyNpZmRlZiBOVAorI2luY2x1ZGUgPHdpbmRv d3MuaD4KKyNpbmNsdWRlIDx0YXBpLmg+CisjaW5jbHVkZSAiY2tudGFwLmgiCisjZW5kaWYgLyog TlQgKi8KKworI2lmbmRlZiBOT1NFUlZFUgorLyogVGV4dCBtZXNzYWdlIGRlZmluaXRpb25zLi4g ZWFjaCBzaG91bGQgYmUgMjU2IGNoYXJzIGxvbmcsIG9yIGxlc3MuICovCisjaWZkZWYgTUlOSVgK K2NoYXIgKnNydnR4dCA9ICJcclxuXAorRW50ZXJpbmcgc2VydmVyIG1vZGUuXHJcblwwIjsKKyNl bHNlCisjaWZkZWYgT0xETVNHCisvKgorICBJdCBzZWVtcyB0aGVyZSB3YXMgYSBsYXJnZSBpbnN0 YWxsYXRpb24gdGhhdCB3YXMgdXNpbmcgQy1LZXJtaXQgNUEoMTY1KQorICBvciB0aGVyZWFib3V0 cywgd2hpY2ggaGFkIGRlcGxveWVkIHRob3VzYW5kcyBvZiBNUy1ET1MgS2VybWl0IHNjcmlwdHMg aW4KKyAgc2NhdHRlcmVkIGxvY2F0aW9ucyB0aGF0IGxvb2tlZCBmb3Igc3RyaW5ncyBpbiB0aGUg b2xkIHNlcnZlciBtZXNzYWdlLAorICB3aGljaCBjaGFuZ2VkIGluIDVBKDE4MyksIEF1Z3VzdCAx OTkyLgorKi8KK2NoYXIgKnNydnR4dCA9ICJcclxuXAorQy1LZXJtaXQgc2VydmVyIHN0YXJ0aW5n LiAgUmV0dXJuIHRvIHlvdXIgbG9jYWwgbWFjaGluZSBieSB0eXBpbmdcclxuXAoraXRzIGVzY2Fw ZSBzZXF1ZW5jZSBmb3IgY2xvc2luZyB0aGUgY29ubmVjdGlvbiwgYW5kIGlzc3VlIGZ1cnRoZXJc clxuXAorY29tbWFuZHMgZnJvbSB0aGVyZS4gIFRvIHNodXQgZG93biB0aGUgQy1LZXJtaXQgc2Vy dmVyLCBpc3N1ZSB0aGVcclxuXAorRklOSVNIIG9yIEJZRSBjb21tYW5kIGFuZCB0aGVuIHJlY29u bmVjdC5cblwKK1xyXG5cMCI7CisjZWxzZQorI2lmZGVmIE9TSworY2hhciAqc3J2dHh0ID0gIlxy XDAxMlwKK0VudGVyaW5nIHNlcnZlciBtb2RlLiAgSWYgeW91ciBsb2NhbCBLZXJtaXQgc29mdHdh cmUgaXMgbWVudSBkcml2ZW4sIHVzZVxyXDAxMlwKK3RoZSBtZW51cyB0byBzZW5kIGNvbW1hbmRz IHRvIHRoZSBzZXJ2ZXIuICBPdGhlcndpc2UsIGVudGVyIHRoZSBlc2NhcGVcclwwMTJcCitzZXF1 ZW5jZSB0byByZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgcHJvbXB0IGFuZCBpc3N1ZSBjb21t YW5kcyBmcm9tXHJcMDEyXAordGhlcmUuIFVzZSBTRU5EIGFuZCBHRVQgZm9yIGZpbGUgdHJhbnNm ZXIuIFVzZSBSRU1PVEUgSEVMUCBmb3IgYSBsaXN0IG9mXHJcMDEyXAorb3RoZXIgYXZhaWxhYmxl IHNlcnZpY2VzLiAgVXNlIEJZRSBvciBGSU5JU0ggdG8gZW5kIHNlcnZlciBtb2RlLlxyXDAxMlww IjsKKyNlbHNlIC8qIFVOSVgsIFZNUywgQU9TL1ZTLCBhbmQgYWxsIG90aGVycyAqLworY2hhciAq c3J2dHh0ID0gIlxyXG5cCitFbnRlcmluZyBzZXJ2ZXIgbW9kZS4gIElmIHlvdXIgbG9jYWwgS2Vy bWl0IHNvZnR3YXJlIGlzIG1lbnUgZHJpdmVuLCB1c2VcclxuXAordGhlIG1lbnVzIHRvIHNlbmQg Y29tbWFuZHMgdG8gdGhlIHNlcnZlci4gIE90aGVyd2lzZSwgZW50ZXIgdGhlIGVzY2FwZVxyXG5c CitzZXF1ZW5jZSB0byByZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgcHJvbXB0IGFuZCBpc3N1 ZSBjb21tYW5kcyBmcm9tXHJcblwKK3RoZXJlLiAgVXNlIFNFTkQgYW5kIEdFVCBmb3IgZmlsZSB0 cmFuc2Zlci4gIFVzZSBSRU1PVEUgSEVMUCBmb3IgYSBsaXN0IG9mXHJcblwKK290aGVyIGF2YWls YWJsZSBzZXJ2aWNlcy4gIFVzZSBCWUUgb3IgRklOSVNIIHRvIGVuZCBzZXJ2ZXIgbW9kZS5cclxu XDAiOworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9MRE1TRyAqLworI2VuZGlmIC8qIE1J TklYICovCisjZWxzZSAgLyogc2VydmVyIG1vZGUgZGlzYWJsZWQgKi8KK2NoYXIgKnNydnR4dCA9 ICIiOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKK2ludCBpbml0ZmxnID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBzeXNpbml0KCkgaGFzIGV4ZWN1dGVkLi4uICovCitpbnQgaG93Y2Fs bGVkID0gSV9BTV9LRVJNSVQ7ICAgICAgICAgICAgLyogSG93IEkgd2FzIGNhbGxlZCAqLworaW50 IGhtdG9wbGluZSA9IDA7CitpbnQgcXVpdHRpbmcgPSAwOwkJCS8qIEknbSBpbiB0aGUgYWN0IG9m IHF1aXR0aW5nICovCisKKyNpZmRlZiBJS1NEQ09ORgorY2hhciAqIGlrc2Rjb25mID0gSUtTRENP TkY7ICAgICAgICAgICAgIC8qIElLU0QgY29uZmlndXJhdGlvbiBmaWxlICovCitpbnQgICAgaWtz ZGNmICAgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogSGFzIElLU0QgYy5mLiBiZWVuIHByb2Nl c3NlZD8gKi8KKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworCitpbnQgc3J2Y2Rtc2cgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgLyogW1NlcnZlcl0gQ0QgbWVzc2FnZSAqLworY2hhciAqIGNkbXNn ZmlsZVs4XSA9IHsgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMIH07Citj aGFyICogY2Rtc2dzdHIgPSBOVUxMOworY2hhciAqIGNrY2RwYXRoID0gTlVMTDsKKworI2lmZGVm IE5MQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQtZmlsZSBsaW5lIHRlcm1p bmF0b3IgKi8KK0NIQVIgZmVvbCA9IE5MQ0hBUjsKKyNlbHNlCitDSEFSIGZlb2wgPSAwOworI2Vu ZGlmIC8qIE5MQ0hBUiAqLworCitpbnQgZmJsa3NpeiA9IERCTEtTSVo7ICAgICAgICAgIC8qIEZp bGUgYmxvY2tzaXplICovCitpbnQgZnJlY2wgPSBETFJFQ0w7ICAgICAgICAgICAgIC8qIEZpbGUg cmVjb3JkIGxlbmd0aCAqLworaW50IGZyZWNmbSA9IFhZRkZfUzsgICAgICAgICAgICAvKiBGaWxl IHJlY29yZCBmb3JtYXQgKGRlZmF1bHQgPSBzdHJlYW0pICovCitpbnQgZm9yZyA9IFhZRk9fUzsg ICAgICAgICAgICAgIC8qIEZpbGUgb3JnYW5pemF0aW9uIChzZXF1ZW50aWFsKSAqLworaW50IGZj Y3RybCA9IFhZRlBfTjsgICAgICAgICAgICAvKiBGaWxlIGNhcnJpYWdlIGNvbnRyb2wgKGN0cmwg Y2hhcnMpICovCitpbnQgZmlsZWNhc2UgPSBGSUxFQ0FTRTsgICAgICAgIC8qIENhc2UgbWF0dGVy cyBpbiBmaWxlbmFtZXMgKi8KK2ludCBzdGF0aGFjayA9IDE7ICAgICAgICAgICAgICAgLyogRmFz dCBkaXJlY3RvcnkgbG9va3VwcyBieSBkZWZhdWx0ICovCisKK2NoYXIgdWlkYnVmW1VJREJVRkxF Tl0gPSB7IE5VTCwgTlVMIH07ICAvKiBVc2VyIElEIGJ1ZmZlciAqLworaW50IGNmaWxlZiA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFwcGxpY2F0aW9uICgia2VyYmFuZyIpIGZpbGUg ZmxhZyAqLworY2hhciBjbWRmaWxbQ0tNQVhQQVRIICsgMV0gPSB7IE5VTCwgTlVMIH07IC8qIEFw cGxpY2F0aW9uIGZpbGUgbmFtZSAqLworaW50IGhhdmV1cmwgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFVSTCBnaXZlbiBvbiBjb21tYW5kIGxpbmUgKi8KKworI2lmbmRlZiBOT1hGRVIK Ky8qIE11bHRpLXByb3RvY29sIHN1cHBvcnQgKi8KKworc3RydWN0IGNrX3AgcHRhYltOUFJPVE9T XSA9IHsgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIEtlcm1pdCBwYXJ0IC4uLiAqLworICB7 ICJLZXJtaXQiLAorICAgIERSUFNJWiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl Y2VpdmUgcGFja2V0IHNpemUgKi8KKyAgICBEU1BTSVosICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTZW5kIHBhY2tldCBzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2VuZC1wYWNrZXQtc2l6ZS1zZXQgZmxhZyAqLworICAgIERGV1NJWiwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBzaXplICovCisKKyNpZmRlZiBO RVdERUZBVUxUUworICAgIFBYX0NBVSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENv bnRyb2wgY2hhciB1bnByZWZpeGluZy4uLiAqLworI2Vsc2UKKyAgICBQWF9BTEwsCisjZW5kaWYg LyogTkVXREVGQVVMVFMgKi8KKworI2lmZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERlZmF1bHQgZmlsZW5hbWUgY29sbGlzaW9uIGFjdGlvbiAqLworICAgIFhZRlhfWCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFUExBQ0UgZm9yIFZBWC9WTVMgKi8KKyNl bHNlCisgICAgWFlGWF9CLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQkFDS1VQIGZv ciBldmVyeWJvZHkgZWxzZSAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgT1MyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZmlsZSBuYW1lIGNvbnZlcnNpb24g Ki8KKyAgICBYWUZOX0wsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaXRlcmFsIGZv ciBPUzIgKi8KKyNlbHNlCisgICAgWFlGTl9DLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ29udmVydGVkIGZvciBvdGhlcnMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIFBBVEhf T0ZGLCAgICAgICAgICAgICAgICAgICAvKiBTZW5kIHBhdGhuYW1lcyBPRkYgKi8KKyAgICBQQVRI X0FVVE8sICAgICAgICAgICAgICAgICAgLyogUmVjZWl2ZSBwYXRobmFtZXMgQVVUTyAqLworICAg IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3N0IHJlY2VpdmUgaW5pdGlhdGlvbiBz dHJpbmcgKGJpbmFyeSkgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogSG9z dCByZWNlaXZlIGluaXRpYXRpb24gc3RyaW5nICh0ZXh0KSAgICovCisgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhvc3Qgc2VydmVyIHN0cmluZyAqLworICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBwcm90b2NvbCBzZW5kIGNvbW1hbmQgKGJpbmFy eSkgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZXJuYWwgcHJvdG9j b2wgc2VuZCBjb21tYW5kICh0ZXh0KSAgICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAg ICAgIC8qIEV4dGVybmFsIHByb3RvY29sIHJlY2VpdmUgY29tbWFuZCAoYmluKSAqLworICAgIE5V TEwgfSAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBwcm90b2NvbCByZWNlaXZlIGNv bW1hbmQgKHR4dCkgKi8KKyNpZmRlZiBDS19YWVoKKywKK3siWE1PREVNIiwgICAgMTI4LDEyOCwt MSwtMSwgICAxLC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMfSwK K3siWE1PREVNLUNSQyIsMTI4LDEyOCwtMSwtMSwgIC0xLC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMfSwKK3siWU1PREVNIiwgICAtMSwgLTEsLTEsLTEsICAgIC0x LC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMfSwKK3siWU1PREVN LWciLCAtMSwgLTEsLTEsLTEsICAgIC0xLC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMfSwKK3siWk1PREVNIiwgICAtMSwgLTEsLTEsLTEsUFhfV0lMLC0xLC0xLDAs MCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMfSwKK3siT3RoZXIiLCAgICAtMSwg LTEsLTEsLTEsICAgIC0xLC0xLC0xLDAsMCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMfQorI2VuZGlmIC8qIENLX1hZWiAqLworfTsKKworLyogRGVjbGFyYXRpb25zIGZvciBTZW5k LUluaXQgUGFyYW1ldGVycyAqLworCitpbnQgc3BzaXogPSBEU1BTSVosICAgICAgICAgICAgICAg ICAgICAgLyogQ3VycmVudCBwYWNrZXQgc2l6ZSB0byBzZW5kICovCisgICAgc3BtYXggPSBEU1BT SVosICAgICAgICAgICAgICAgICAgICAgLyogQmlnZ2VzdCBwYWNrZXQgc2l6ZSB3ZSBjYW4gc2Vu ZCAqLworICAgIGxhc3RzcG1heCA9IERTUFNJWiwgICAgICAgICAgICAgICAgIC8qIFNlbmQtcGFj a2V0IHNpemUgbGFzdCB1c2VkICovCisgICAgc3BzaXpyID0gRFNQU0laLCAgICAgICAgICAgICAg ICAgICAgLyogU2VuZC1wYWNrZXQgc2l6ZSByZXF1ZXN0ZWQgKi8KKyAgICBzcHNpemYgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRvIG92ZXJyaWRlIHNpemUgbmVnb3RpYXRp b24gKi8KKyAgICBycHNpeiA9IERSUFNJWiwgICAgICAgICAgICAgICAgICAgICAvKiBCaWdnZXN0 IHdlIHdhbnQgdG8gcmVjZWl2ZSAqLworICAgIHVycHNpeiA9IERSUFNJWiwgICAgICAgICAgICAg ICAgICAgIC8qIFVzZXItcmVxdWVzdGVkIHJlY2VpdmUgcGt0IHNpemUgKi8KKyAgICBtYXhycHMg PSBNQVhSUCwgICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIGluY29taW5nIGxvbmcgcGFj a2V0IHNpemUgKi8KKyAgICBtYXhzcHMgPSBNQVhTUCwgICAgICAgICAgICAgICAgICAgICAvKiBN YXhpbXVtIG91dGJvdW5kIGwucC4gc2l6ZSAqLworICAgIG1heHRyeSA9IE1BWFRSWSwgICAgICAg ICAgICAgICAgICAgIC8qIE1heGltdW0gcmV0cmllcyBwZXIgcGFja2V0ICovCisgICAgd3Nsb3Rz ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IHNpemUgY3VycmVudGx5IGlu IHVzZSAqLworICAgIHdzbG90ciA9IERGV1NJWiwgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRv dyBzaXplIGZyb20gU0VUIFdJTkRPVyAqLworICAgIHdzbG90biA9IDEsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFdpbmRvdyBzaXplIG5lZ290aWF0ZWQgaW4gUy1wa3QgKi8KKyAgICB0aW1l b3V0cyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Igc3RhdGlzdGljcyByZXBvcnRp bmcgKi8KKyAgICBzcGFja2V0cyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICov CisgICAgcnBhY2tldHMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAg IHJldHJhbnMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KKyAgICBjcnVu Y2hlZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiAgLi4uICovCisgICAgd21heCA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAgIHdjdXIgPSAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KKyAgICBzcnZpZGwgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgaWRsZSB0aW1lb3V0ICovCisgICAgc3J2ZGlzID0g MSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGZpbGUgeGZlciBkaXNwbGF5ICov CisgICAgc3J2dGltID0gRFNSVlRJTSwgICAgICAgICAgICAgICAgICAgLyogU2VydmVyIGNvbW1h bmQgd2FpdCB0aW1lb3V0ICovCisgICAgc3J2cGluZyA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgLyogU2VydmVyIGtlZXBhbGl2ZSAqLworLyoKKyAgdGltaW50IGlzIHRoZSB0aW1lb3V0IGlu dGVydmFsIEkgdXNlIHdoZW4gd2FpdGluZyBmb3IgYSBwYWNrZXQuCisgIHBrdHRpbSBpcyB0aGUg U0VUIFJFQ0VJVkUgVElNRU9VVCB2YWx1ZSwgc2VudCB0byB0aGUgb3RoZXIgS2VybWl0LgorICBy dGltbyBpcyB0aGUgU0VUIFNFTkQgVElNRU9VVCB2YWx1ZS4gIHJ0aW1vIGlzIHRoZSBpbml0aWFs IHZhbHVlIG9mCisgIHRpbWludC4gIHRpbWludCBpcyBjaGFuZ2VkIGJ5IHRoZSB2YWx1ZSBpbiB0 aGUgaW5jb21pbmcgbmVnb3RpYXRpb24KKyAgcGFja2V0IHVubGVzcyBhIFNFVCBTRU5EIFRJTUVP VVQgY29tbWFuZCB3YXMgZ2l2ZW4uCisqLworICAgIHRpbWludCA9IERNWVRJTSwgICAgICAgICAg ICAgICAgICAgIC8qIFRpbWVvdXQgaW50ZXJ2YWwgSSB1c2UgKi8KKyAgICBwa3R0aW0gPSBVUlRJ TUUsICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0IEkgd2FudCB5b3UgdG8gdXNlICovCisg ICAgcnRpbW8gPSBETVlUSU0sICAgICAgICAgICAgICAgICAgICAgLyogTm9ybWFsIHBhY2tldCB3 YWl0IHRpbWVvdXQgKi8KKyAgICB0aW1lZiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGbGFnIHRvIG92ZXJyaWRlIHdoYXQgeW91IGFzayAqLworI2lmZGVmIENLX1RJTUVSUworICAg IHJ0dGZsZyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBkeW5hbWljIHJvdW5k LXRyaXAgdGltZXJzICovCisjZWxzZQorICAgIHJ0dGZsZyA9IDAsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFVzZSBmaXhlZCB0aW1lciAqLworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworICAg IG1pbnRpbWUgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1pbmltdW0gdGltZW91dCAq LworICAgIG1heHRpbWUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heGltdW0gdGlt ZW91dCAqLworCisgICAgbnBhZCA9IE1ZUEFETiwgICAgICAgICAgICAgICAgICAgICAgLyogSG93 IG11Y2ggcGFkZGluZyB0byBzZW5kICovCisgICAgbXlwYWRuID0gTVlQQUROLCAgICAgICAgICAg ICAgICAgICAgLyogSG93IG11Y2ggcGFkZGluZyB0byBhc2sgZm9yICovCisgICAgYmN0ciA9IERG QkNULCAgICAgICAgICAgICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgdHlwZSByZXF1ZXN0ZWQg Ki8KKyAgICBiY3R1ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCbG9jayBjaGVj ayB0eXBlIHVzZWQgKi8KKyAgICBiY3RsID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBCbG9jayBjaGVjayBsZW5ndGggKi8KKyAgICBiY3RmID0gMCwJCQkJLyogQmxvY2sgY2hlY2sg dHlwZSAzIGZvcmNlZCBvbiBhbGwgKi8KKyAgICBjX3NhdmUgPSAtMSwgICAgICAgICAgICAgICAg ICAgICAgICAvKiBCbG9jayBjaGVjayBzYXZpbmcgYW5kIHJlc3RvcmluZyAqLworICAgIHNzX3Nh dmUgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsb3ctc3RhcnQgc2F2aW5nIGFuZCBy ZXN0b3JpbmcgKi8KKyAgICBlYnEgPSAgTVlFQlEsICAgICAgICAgICAgICAgICAgICAgICAvKiA4 dGggYml0IHByZWZpeCAqLworICAgIGVicWZsZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDh0aC1iaXQgcXVvdGluZyBmbGFnICovCisgICAgcnFmID0gLTEsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyB1c2VkIGluIDhicSBuZWdvdGlhdGlvbiAqLworICAgIHJxID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmVkIDhicSBiaWQgKi8KKyAg ICBzcSA9ICdZJywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW50IDhicSBiaWQgKi8K KyAgICBycHQgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXQgY291bnQg Ki8KKyAgICBycHRxID0gTVlSUFRRLCAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXQgcHJl Zml4ICovCisgICAgcnB0ZmxnID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0 IHByb2Nlc3NpbmcgZmxhZyAqLworICAgIHJwdGVuYSA9IDEsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlcGVhdCBwcm9jZXNzaW5nIGVuYWJsZWQgKi8KKyAgICB4ZnJjYW4gPSAxLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBjYW5jZWxsYXRpb24gZW5hYmxlZCAqLwor ICAgIHhmcmludCA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGludGVy cnVwdGlvbiBlbmFibGVkICovCisgICAgeGZyY2hyID0gMywgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVHJhbnNmZXIgY2FuY2VsIGNoYXIgPSBDdHJsLUMgKi8KKyAgICB4ZnJudW0gPSAzLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRocmVlIG9mIHRoZW0gYnkgZGVmYXVsdCAq LworICAgIGdfeGZyeGxhID0gLTE7CisgICAgY2hhciAqIHhmcm1zZyA9IE5VTEw7ICAgICAgICAg ICAgICAgLyogTWVzc2FnZSBmb3IgZi50LiBkaXNwbGF5IHNjcmVlbiAqLworI2VuZGlmIC8qIE5P WEZFUiAqLworCisjaWZkZWYgTk9DU0VUUworaW50IHhmcnhsYSA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gKi8KKyNlbHNlCitpbnQgeGZy eGxhID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5hYmxlZCBvciBkaXNhYmxlZCAq LworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworaW50IGhhdmVsZnMgPSAwOwkJCS8qIExhcmdlIGZp bGUgc3VwcG9ydCBhdmFpbGFibGUgKi8KKworI2lmbmRlZiBOT1hGRVIKK2ludCBlcGt0ZmxnID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFLVBBQ0tFVCBjb21tYW5kIGFjdGl2ZSAqLwor CitpbnQgY2FwYXMgID0gOSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9zaXRpb24gb2Yg Q2FwYWJpbGl0aWVzICovCisgICAgbHBjYXBiID0gMiwgICAgICAgICAgICAgICAgICAgICAgICAg LyogTG9uZyBQYWNrZXQgY2FwYWJpbGl0eSAqLworICAgIGxwY2FwciA9IDEsICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICByZXF1ZXN0ZWQgKi8KKyAgICBscGNhcHUgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAgdXNlZCAqLworICAgIHN3Y2FwYiA9IDQsICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNsaWRpbmcgV2luZG93IGNhcGFiaWxpdHkgKi8KKyAgICBzd2NhcHIgPSAx LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVkIChhbGxvd2VkKSAqLworICAg IHN3Y2FwdSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB1c2VkICovCisgICAgYXRj YXBiID0gOCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXR0cmlidXRlIGNhcGFiaWxpdHkg Ki8KKyAgICBhdGNhcHIgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgcmVxdWVzdGVk ICovCisgICAgYXRjYXB1ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQgKi8K KyAgICByc2NhcGIgPSAxNiwgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRVNFTkQgY2FwYWJp bGl0eSAqLworICAgIHJzY2FwciA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICByZXF1 ZXN0ZWQgYnkgZGVmYXVsdCAqLworICAgIHJzY2FwdSA9IDAsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qICB1c2VkICovCisgICAgbHNjYXBiID0gMzIsICAgICAgICAgICAgICAgICAgICAgICAg LyogTG9ja2luZyBTaGlmdCBjYXBhYmlsaXR5ICovCisgICAgbHNjYXByID0gMSwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogIHJlcXVlc3RlZCBieSBkZWZhdWx0ICovCisgICAgbHNjYXB1ID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHVzZWQgKi8KKworLyogRmxhZ3MgZm9yIHdo ZXRoZXIgdG8gdXNlIHBhcnRpY3VsYXIgYXR0cmlidXRlcyAqLworCitpbnQgYXRlbmNpID0gMSwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5jb2RpbmcgaW4gKi8KKyAgICBhdGVuY28gPSAx LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmNvZGluZyBvdXQgKi8KKyAgICBhdGRhdGkg PSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlIGluICovCisgICAgYXRkYXRvID0g MSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSBvdXQgKi8KKyAgICBhdGRpc2kgPSAx LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwb3NpdGlvbiBpbi9vdXQgKi8KKyAgICBh dGRpc28gPSAxLAorICAgIGF0bGVuaSA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExl bmd0aCBpbi9vdXQgKGJvdGgga2luZHMpICovCisgICAgYXRsZW5vID0gMSwKKyAgICBhdGJsa2kg PSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCbG9ja3NpemUgaW4vb3V0ICovCisgICAg YXRibGtvID0gMSwKKyAgICBhdHR5cGkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIHR5cGUgaW4vb3V0ICovCisgICAgYXR0eXBvID0gMSwKKyAgICBhdHNpZGkgPSAxLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gSUQgaW4vb3V0ICovCisgICAgYXRzaWRvID0g MSwKKyAgICBhdHN5c2kgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBl bmRlbnQgcGFyYW1ldGVycyBpbi9vdXQgKi8KKyAgICBhdHN5c28gPSAxOworCitpbnQgZGlzcG9z ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcG9zaXRpb24gKi8KKworI2lmZGVm IENLX1BFUk1TCitpbnQgYXRscHJpID0gMSwKKyAgICBhdGxwcm8gPSAxLAorICAgIGF0Z3ByaSA9 IDEsCisgICAgYXRncHJvID0gMTsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCitpbnQgYXRmcm1p ID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjb3JkIEZvcm1hdCBpbi9vdXQgKi8K KyAgICBhdGZybW8gPSAxOworCisjaWZkZWYgU1RSQVRVUworaW50IGF0Y3JlaSA9IDEsICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENyZWF0b3IgSUQgaW4vb3V0ICovCisgICAgYXRjcmVvID0g MSwKKyAgICBhdGFjdGkgPSAxLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBY2NvdW50IGlu L291dCAqLworICAgIGF0YWN0byA9IDE7CisjZW5kaWYgLyogU1RSQVRVUyAqLworCitpbnQgc3By bWxlbiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogU2VuZC9SZWNlaXZlIHByb3RvY29s IHBhcmFtZXRlciAqLworaW50IHJwcm1sZW4gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgIC8q IHN0cmluZyBsZW5ndGggbGltaXRzICovCitpbnQgc2VuZGlwa3RzID0gMTsgICAgICAgICAgICAg ICAgICAgICAgLyogU2VuZCBJIHBhY2tldHMgKi8KKworQ0hBUiBwYWRjaCA9IE1ZUEFEQywgICAg ICAgICAgICAgICAgICAgIC8qIFBhZGRpbmcgY2hhcmFjdGVyIHRvIHNlbmQgKi8KKyAgICBteXBh ZGMgPSBNWVBBREMsICAgICAgICAgICAgICAgICAgICAvKiBQYWRkaW5nIGNoYXJhY3RlciB0byBh c2sgZm9yICovCisgICAgc2VvbCA9IE1ZRU9MLCAgICAgICAgICAgICAgICAgICAgICAgLyogRW5k LU9mLUxpbmUgY2hhcmFjdGVyIHRvIHNlbmQgKi8KKyAgICBlb2wgPSBNWUVPTCwgICAgICAgICAg ICAgICAgICAgICAgICAvKiBFbmQtT2YtTGluZSBjaGFyYWN0ZXIgdG8gbG9vayBmb3IgKi8KKyAg ICBjdGxxID0gQ1RMUSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIHByZWZpeCBp biBpbmNvbWluZyBkYXRhICovCisgICAgbXljdGxxID0gQ1RMUSwgICAgICAgICAgICAgICAgICAg ICAgLyogT3V0Ym91bmQgY29udHJvbCBjaGFyYWN0ZXIgcHJlZml4ICovCisgICAgbXlycHRxID0g TVlSUFRROyAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0IHByZWZpeCBJIHdhbnQgdG8gdXNl ICovCisKK2ludCBycHRtaW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBlYXQt Y291bnQgbWluaW11bSAqLworCitpbnQgdXNlcGlwZXMgPSAwLCAgICAgICAgICAgICAgICAgICAg ICAgLyogVXNlZCBmb3IgeGZlciB0by9mcm9tIHBpcGVzICovCisgICAgZ191c2VwaXBlcyA9IC0x OworCitjaGFyICogZmlsZWZpbGUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogRmlsZSBjb250 YWluaW5nIGxpc3Qgb2YgZmlsZW5hbWVzICovCisvKiBDRCBtZXNzYWdlIGZpbGVuYW1lIGxpc3Qg Ki8KKworY2hhciB3aG9hcmV1WzE2XSA9IHsgTlVMLCBOVUwgfTsgICAgICAgIC8qIFN5c3RlbSBJ RCBvZiBvdGhlciBLZXJtaXQgKi8KK2ludCBzeXNpbmRleCA9IC0xOyAgICAgICAgICAgICAgICAg ICAgICAvKiBhbmQgaW5kZXggdG8gaXRzIHN5c3RlbSBJRCBzdHJ1Y3QgKi8KK2ludCBteWluZGV4 ICA9IC0xOworaW50IHdlYXJlYWxpa2UgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIDIgS2Vy bWl0cyBoYXZlIGNvbXBhdGlibGUgc3lzaWRzICovCitjaGFyICogY2tzeXNpZCA9ICAgICAgICAg ICAgICAgICAgICAgICAgLyogTXkgc3lzdGVtIElEICovCisjaWZkZWYgVU5JWAorICAgICJVMSIK KyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkQ3IgorI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICAiVUQi CisjZWxzZQorI2lmZGVmIEFNSUdBCisgICAgIkwzIgorI2Vsc2UKKyNpZmRlZiBNQUMKKyAgICAi QTMiCisjZWxzZQorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisgICAgIlVOIgorI2Vsc2UgLyogTlQg Ki8KKyAgICAiVU8iCisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIGRh dGFnZW5lcmFsCisgICAgIkYzIgorI2Vsc2UKKyNpZmRlZiBHRU1ET1MKKyAgICAiSzIiCisjZWxz ZQorI2lmZGVmIFNUUkFUVVMKKyAgICAiTVYiCisjZWxzZQorICAgICIiCisjZW5kaWYgLyogU1RS QVRVUyAqLworI2VuZGlmIC8qIEdFTURPUyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyNl bmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklYICovCisgICAg OworCitpbnQgb29wdHMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQg T3B0aW9ucyAqLworaW50IG9tb2RlID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8t UGFja2V0IFRyYW5zZmVyIE1vZGUgKi8KK2ludCBvbmFtZSA9IC0xOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPLVBhY2tldCBGaWxlbmFtZSBPcHRpb25zICovCitpbnQgb3BhdGggPSAtMTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgUGF0aG5hbWUgT3B0aW9ucyAqLwor CitzdHJ1Y3QgemF0dHIgaWF0dHI7ICAgICAgICAgICAgICAgICAgICAgLyogSW5jb21pbmcgZmls ZSBhdHRyaWJ1dGVzICovCisKKyNpZmRlZiBWTVMKKy8qIFZNUyBsYWJlbGVkIGZpbGUgZGVmYXVs dCBvcHRpb25zIC0gbmFtZSBvbmx5LiAqLworaW50IGxmX29wdHMgPSBMQkxfTkFNOworI2Vsc2UK KyNpZmRlZiBPUzIKKy8qIE9TLzIgbGFiZWxlZCBmaWxlIGRlZmF1bHQgb3B0aW9ucywgYWxsIGF0 dHJpYnV0ZXMgYnV0IGFyY2hpdmVkLiAqLwordW5zaWduZWQgbG9uZyBpbnQgbGZfb3B0cyA9IExC TF9FWFR8TEJMX0hJRHxMQkxfUk98TEJMX1NZUzsKKyNlbHNlCitpbnQgbGZfb3B0cyA9IDA7Cisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisKKy8qIFBhY2tldC1yZWxhdGVkIHZh cmlhYmxlcyAqLworCitpbnQgcGt0bnVtID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyog Q3VycmVudCBwYWNrZXQgbnVtYmVyICovCisgICAgc25kdHlwID0gMCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogVHlwZSBvZiBwYWNrZXQganVzdCBzZW50ICovCisgICAgcmN2dHlwID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBvZiBwYWNrZXQganVzdCByZWNlaXZlZCAq LworICAgIHJzbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY2VpdmVkIHBh Y2tldCBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICBybG4sICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZWNlaXZlZCBwYWNrZXQgbGVuZ3RoICovCisgICAgc2l6ZSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBzaXplIG9mIG91dHB1dCBwa3QgZGF0YSAq LworICAgIG9zaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZpb3VzIG91 dHB1dCBwYWNrZXQgZGF0YSBzaXplICovCisgICAgbWF4c2l6ZSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTWF4IHNpemUgZm9yIGJ1aWxkaW5nIGRhdGEgZmllbGQgKi8KKyAgICBzcGt0 bCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggcGFja2V0IGJlaW5nIHNl bnQgKi8KKyAgICBycGt0bCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGgg b2YgcGFja2V0IGp1c3QgcmVjZWl2ZWQgKi8KKyAgICBwa3RwYXVzID0gMCwgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJbnRlcnBhY2tldCBwYXVzZSBpbnRlcnZhbCwgbXNlYyAqLworICAgIHJw cmludGYsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBQUklOVCBmbGFnICov CisgICAgcm1haWxmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTUFJTCBmbGFnICov CisgICAgeGZlcnN0YXQgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgLyogU3RhdHVzIG9mIGxh c3QgdHJhbnNhY3Rpb24gKi8KKyAgICBmaWxlc3RhdHVzID0gMDsgICAgICAgICAgICAgICAgICAg ICAvKiBTdGF0dXMgb2YgbGFzdCBmaWxlIHRyYW5zZmVyICovCisKK0NIQVIgcGt0bXNnYnVmW1BL VE1TR0xFTisxXTsKK0NIQVIgKmVwa3Rtc2cgPSBwa3Rtc2didWY7CisKKyNpZmRlZiBwZHAxMQor aW50IHNydmNtZGxlbiA9IE1BWFJQOyAgICAgICAgICAgICAgICAgIC8qIHNydmNtZCBidWZmZXIg bGVuZ3RoICovCisjZWxzZQorI2lmZGVmIERZTkFNSUMKK2ludCBzcnZjbWRsZW4gPSBNQVhSUDsK KyNlbHNlCitpbnQgc3J2Y21kbGVuID0gMDsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisjZW5kaWYg LyogcGRwMTEgKi8KKworQ0hBUgorI2lmZGVmIHBkcDExCisgICAgc3J2Y21kYnVmW01BWFJQKzRd LAorICAgICpzcnZjbWQgPSBzcnZjbWRidWYsCisjZWxzZQorI2lmZGVmIERZTkFNSUMKKyAgICAq c3J2Y21kID0gKENIQVIgKikwLCAgICAgICAgICAgICAgICAvKiBXaGVyZSB0byBkZWNvZGUgc2Vy dmVyIGNvbW1hbmQgKi8KKyNlbHNlCisgICAgc3J2Y21kYnVmW01BWFJQKzRdLAorICAgICpzcnZj bWQgPSBzcnZjbWRidWYsCisjZW5kaWYgLyogRFlOQU1JQyAqLworI2VuZGlmIC8qIHBkcDExICov CisgICAgcGFkYnVmWzk2XSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBz ZW5kLXBhZGRpbmcgKi8KKyAgICAqcmVjcGt0LAorICAgICpyZGF0YXAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gcmVjZWl2ZWQgcGFja2V0IGRhdGEgKi8KKyAgICAq ZGF0YSA9IChDSEFSICopMCwgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHNlbmQtcGFj a2V0IGRhdGEgKi8KKyAgICAqc3J2cHRyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIHNydmNtZCAqLworICAgIG15c3RjaCA9IFNPSCwgICAgICAgICAgICAgICAgICAg ICAgIC8qIE91dGJvdW5kIHBhY2tldC1zdGFydCBjaGFyYWN0ZXIgKi8KKyAgICBzdGNociA9IFNP SDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbmNvbWluZyBwYWNrZXQtc3RhcnQgY2hhcmFj dGVyICovCisKKy8qIEZpbGUtcmVsYXRlZCB2YXJpYWJsZXMgKi8KKworI2lmbmRlZiBOT01TRU5E ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFNFTkQgKi8KK3N0cnVjdCBmaWxl bGlzdCAqIGZpbGVoZWFkID0gTlVMTDsgICAgICAvKiBTRU5EIGxpc3QgKi8KK3N0cnVjdCBmaWxl bGlzdCAqIGZpbGV0YWlsID0gTlVMTDsKK3N0cnVjdCBmaWxlbGlzdCAqIGZpbGVuZXh0ID0gTlVM TDsKK2ludCBhZGRsaXN0ID0gMDsKKyNlbmRpZiAvKiBOT01TRU5EICovCisKK2NoYXIgZmlsbmFt W0NLTUFYUEFUSCArIDFdOyAgICAgICAgICAgICAvKiBOYW1lIG9mIGN1cnJlbnQgZmlsZS4gKi8K K2NoYXIgb2ZpbG5hbVtDS01BWFBBVEggKyAxXTsgICAgICAgICAgICAvKiBPcmlnaW5hbCBuYW1l LiAqLworCitpbnQgcGlwZXNlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uemVy byBpZiBzZW5kaW5nIGZyb20gcGlwZSAqLworI2lmZGVmIFBJUEVTRU5ECitjaGFyICogc25kZmls dGVyID0gTlVMTDsgICAgICAgICAgICAgICAgLyogU2VuZCBhbmQgcmVjZWl2ZSBmaWx0ZXJzICov CitjaGFyICogcmN2ZmlsdGVyID0gTlVMTDsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCitjaGFy ICoqIHNuZGFycmF5ID0gTlVMTDsgICAgICAgICAgICAgICAgLyogU0VORCAvQVJSQVkgcG9pbnRl ciBhbmQgcmFuZ2UgKi8KKyNpZm5kZWYgTk9TUEwKK2ludCBzbmR4bG8gPSAtMSwgc25keGhpID0g LTEsIHNuZHhpbiA9IC0xOworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9YRkVSICov CisKKyNpZm5kZWYgTk9TRVJWRVIKK2ludCBuZ2V0cGF0aCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBHRVQgc2VhcmNoIHBhdGggKi8KK2ludCBmcm9tZ2V0cGF0aCA9IDA7CitjaGFyICog Z2V0cGF0aFtNQVhHRVRQQVRIXTsKK2NoYXIgKiB4X3VzZXIgPSBOVUxMOyAgICAgICAgICAgICAg ICAgICAvKiBTZXJ2ZXIgbG9naW4gaW5mb3JtYXRpb24gKi8KK2NoYXIgKiB4X3Bhc3N3ZCA9IE5V TEw7CitjaGFyICogeF9hY2N0ID0gTlVMTDsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCitpbnQg eF9sb2dpbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9naW4gcmVxdWlyZWQgKi8K K2ludCB4X2xvZ2dlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VyIGlzIGxvZ2dl ZCBpbiAqLworCitleHRlcm4gaW50IHRpbWVsaW1pdDsKKworI2lmZGVmIENLX0xPR0lOCitpbnQg bG9naW50aW1vID0gMzAwOyAgICAgICAgICAgICAgICAgICAgLyogTG9naW4gdGltZW91dCAqLwor Y2hhciAqIHVzZXJmaWxlID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEZvcmJpZGRlbiB1c2Vy IGZpbGUgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2lmZGVmIElLU0QKK2NoYXIgKiBhbm9u ZmlsZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAvKiBBbm9ueW1vdXMgbG9naW4gaW5pdCBmaWxl ICovCitjaGFyICogYW5vbnJvb3QgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogQW5vbnltb3Vz IGZpbGUtc3lzdGVtIHJvb3QgKi8KK2ludCBpa3NfdGltbyAgPSAzMDA7ICAgICAgICAgICAgICAg ICAgICAvKiA1IG1pbnV0ZXMgaWRsZSB0aW1vICovCitpbnQgaWtzX3JldHJ5ID0gMzsgICAgICAg ICAgICAgICAgICAgICAgLyogMyBhdHRlbXB0cyBhdCBsb2dpbiAqLworI2VuZGlmIC8qIElLU0Qg Ki8KKworI2lmZGVmIENLU1lTTE9HCitleHRlcm4gVk9JRCB6c3lzbG9nKCk7CitleHRlcm4gaW50 IGNreGxvZ2dpbmcsIGNreHN5c2xvZzsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCitDS19PRkZf VCBmc2l6ZSA9IChDS19PRkZfVCkwLAkJLyogU2l6ZSBvZiBjdXJyZW50IGZpbGUgKi8KKyBzZW5k c3RhcnQgPSAoQ0tfT0ZGX1QpMCwJCS8qIFNFTkQgc3RhcnQgcG9zaXRpb24gKi8KKyBjYWxpYnJh dGUgPSAoQ0tfT0ZGX1QpMDsJCS8qIE5vbnplcm8gaWYgY2FsaWJyYXRpb24gcnVuICovCisKK2lu dCBuenhvcHRzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcHRpb25zIGZvciBuenhw YW5kKCkgKi8KK2ludCBuZmlscyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1i ZXIgb2YgZmlsZXMgaW4gZmlsZSBncm91cCAqLworaW50IHdpbGRlbmEgPSAxOwkJCS8qIFdpbGRj YXJkIGV4cGFuc2lvbiBlbmFibGVkICovCisjaWZkZWYgVU5JWAoraW50IHdpbGR4cGFuZCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFdobyBleHBhbmRzIHdpbGRjYXJkcywgMD1LZXJtaXQu LiAqLworI2Vsc2UgLyogVU5JWCAqLworI2lmZGVmIFNUUkFUVVMKK2ludCB3aWxkeHBhbmQgPSAx OwkJCS8qIDE9U2hlbGwuICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFVOSVgg Ki8KKyNpZmRlZiBVTklYT1JPU0sKK2ludCBtYXRjaGRvdCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBXaGV0aGVyIHRvIG1hdGNoIGRvdCBmaWxlcyAqLworI2Vsc2UKK2ludCBtYXRjaGRv dCA9IDE7CisjZW5kaWYgLyogVU5JWE9ST1NLICovCitpbnQgbWF0Y2hmaWZvID0gMDsJCQkvKiBX aGV0aGVyIHRvIG1hdGNoIEZJRk8gImZpbGVzIiAqLworaW50IGNsZmlscyA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGNvbW1hbmQtbGluZSBmaWxlcyAqLworaW50IHN0 YXlmbGcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yICJzdGF5IiwgaS5l LiAiLVMiICovCitpbnQgeGZpbmlzaCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxh ZyBmb3IgRklOSVNIID0gRVhJVCAqLworbG9uZyB6dHVzZWMgPSAtMUw7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFVzZWQgd2l0aCB6dGltZSgpICovCitsb25nIHp0bXNlYyA9IC0xTDsgICAgICAg ICAgICAgICAgICAgICAgLyogRGl0dG8gKi8KKworLyogQ29tbXVuaWNhdGlvbiBkZXZpY2UgLyBj b25uZWN0aW9uIHZhcmlhYmxlcyAqLworCitjaGFyIHR0bmFtZVtUVE5BTUxFTisxXTsgICAgICAg ICAgICAgICAgLyogTmFtZSBvZiBjb21tdW5pY2F0aW9uIGRldmljZSAqLworCisjaWZkZWYgTUFD CitpbnQgY29ubmVjdGVkID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogVHJ1ZSBpZiBjb25u ZWN0ZWQgKi8KK2ludCBzdGFydGNvbm5lY3RlZDsgICAgICAgICAgICAgICAgICAgICAvKiBpbml0 aWFsIHN0YXRlIG9mIGNvbm5lY3RlZCAqLworI2VuZGlmIC8qIE1BQyAqLworCitsb25nIHNwZWVk ID0gLTFMOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbXVuaWNhdGlvbiBkZXZpY2Ugc3Bl ZWQgKi8KK2ludCB3YXNjbG9zZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0 aW9uIHdhcyBqdXN0IGNsb3NlZCAqLworaW50IHdoeWNsb3NlZCA9IFdDX1JFTU87ICAgICAgICAg ICAgICAgIC8qIHdoeSBpdCB3YXMgY2xvc2VkICovCitpbnQgcW54cG9ydGxvY2sgPSAwOyAgICAg ICAgICAgICAgICAgICAgLyogUU5YIHBvcnQgbG9ja2luZyBvbi9vZmYgKi8KKworI2lmbmRlZiBD TFNPTkRJU0MKKyNkZWZpbmUgQ0xTT05ESVNDIDAKKyNlbmRpZiAvKiBDTFNPTkRJU0MgKi8KKwor aW50IGN4Zmxvd1tDWFRfTUFYKzFdOyAgICAgICAgICAgICAgICAgIC8qIFNlZSBpbml0Zmxvdygp ICovCisKKyNpZm5kZWYgTk9TSE9XCitjaGFyICogZmxvbmFtZVtdID0geyAgICAgICAgICAgICAg ICAgICAgLyogRmxvdyBjb250cm9sIG5hbWVzICovCisgICJub25lIiwgInhvbi94b2ZmIiwgInJ0 cy9jdHMiLCAiZHRyL2NkIiwgImV0eC9hY2siLCAic3RyaW5nIiwKKyAgInh4eDEiLCAieHh4MiIs ICJkdHIvY3RzIiwgImtlZXAiLCAiYXV0byIKK307CitpbnQgbmZsb25hbWUgPSAoc2l6ZW9mKGZs b25hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOworCitjaGFyICogY3huYW1lW10gPSB7ICAgICAgICAg ICAgICAgICAgICAgLyogQ29ubmVjdGlvbiB0eXBlIG5hbWVzICovCisgICJyZW1vdGUiLCAiZGly ZWN0LXNlcmlhbCIsICJtb2RlbSIsICJ0Y3AvaXAiLCAieC4yNSIsICJkZWNuZXQiLAorICAibGF0 IiwgIm5ldGJpb3MiLCAibmFtZWQtcGlwZSIsICJzc2giLCAicGlwZSIKK307CitpbnQgbmN4bmFt ZSA9IChzaXplb2YoY3huYW1lKSAvIHNpemVvZihjaGFyICopKTsKKyNlbmRpZiAvKiBOT1NIT1cg Ki8KKworaW50IHBhcml0eSA9IERFRlBBUiwgICAgICAgICAgICAgICAgICAgIC8qIFBhcml0eSBz cGVjaWZpZWQsIDAsJ2UnLCdvJyxldGMgKi8KKyAgICBod3Bhcml0eSA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAvKiBIYXJkd2FyZSBwYXJpdHkgZm9yIHNlcmlhbCBwb3J0ICovCisgICAgc3Rv cGJpdHMgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgLyogU3RvcCBiaXRzIGZvciBzZXJpYWwg cG9ydCAqLworICAgIGNsc29uZGlzYyA9IENMU09ORElTQywgICAgICAgICAgICAgIC8qIFNlcmlh bCBwb3J0IGNsb3NlIG9uIGRpc2Nvbm5lY3QgKi8KKyAgICBhdXRvcGFyID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBdXRvbWF0aWMgcGFyaXR5IGNoYW5nZSBmbGFnICovCisgICAgc29z aSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQtSW4vT3V0IGZsYWcgKi8K KyAgICBmbG93ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbG93IGNvbnRyb2wg KHNlZSBpbml0ZmxvdygpKSAqLworICAgIGF1dG9mbG93ID0gMSwgICAgICAgICAgICAgICAgICAg ICAgIC8qIEF1dG9tYXRpYyBmbG93IGNvbnRyb2wgKi8KKyAgICB0dXJuID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBMaW5lIHR1cm5hcm91bmQgaGFuZHNoYWtlIGZsYWcgKi8KKyAg ICB0dXJuY2ggPSBYT04sICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIHR1cm5hcm91bmQg Y2hhcmFjdGVyICovCisgICAgZHVwbGV4ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyog RHVwbGV4LCBmdWxsIGJ5IGRlZmF1bHQgKi8KKyAgICBlc2NhcGUgPSBERkVTQywgICAgICAgICAg ICAgICAgICAgICAvKiBFc2NhcGUgY2hhcmFjdGVyIGZvciBjb25uZWN0ICovCisgICAgY2tkZWxh eSA9IERERUxBWSwgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCBkZWxheSBiZWZvcmUgc2Vu ZGluZyAqLworICAgIHRubG0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1p bmFsIG5ld2xpbmUgbW9kZSAqLworCisvKiBOZXR3b3JrcyBmb3IgU0VUIEhPU1QgKi8KKworI2lm ZGVmIEJJR0JVRk9LCisjZGVmaW5lIE1ZSE9TVEwgMTAyNAorI2Vsc2UKKyNkZWZpbmUgTVlIT1NU TCAxMDAKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworCitjaGFyIG15aG9zdFtNWUhPU1RMXTsgICAg ICAgICAgICAgICAgICAgLyogTG9jYWwgaG9zdCBuYW1lICovCitpbnQgbmV0d29yayA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayB2cyBzZXJpYWwgY29ubmVjdGlvbiAqLwor aW50IGluc2VydmVyID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJ1bm5pbmcgYXMgYW4g SW50ZXJuZXQgc2VydmVyICovCitpbnQgaXNndWVzdCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogVXNlciBpcyBhbm9ueW1vdXMgKi8KK2NoYXIgKiBjbGllbnRob3N0ID0gTlVMTDsgICAg ICAgICAgICAgICAvKiBQZWVyIGhvc3QgbmFtZSBvciBhZGRyZXNzICovCitpbnQgdGNwX2luY29t aW5nID0gMDsgICAgICAgICAgICAgICAgICAgLyogSW5jb21pbmcgVENQIGNvbm5lY3Rpb24/ICov CisKKyNpZmRlZiBORVRDT05OCisjaWZkZWYgVENQU09DS0VUCitpbnQgbmV0dHlwZSA9IE5FVF9U Q1BCOyAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBuZXR3b3JrIHR5cGUgKi8KKyNlbHNlCisj aWZkZWYgU1VOWDI1CitpbnQgbmV0dHlwZSA9IE5FVF9TWDI1OworI2Vsc2UKKyNpZmRlZiBJQk1Y MjUKK2ludCBuZXR0eXBlID0gTkVUX0lYMjU7CisjZWxzZQorI2lmZGVmIEhQWDI1CitpbnQgbmV0 dHlwZSA9IE5FVF9IWDI1OworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTWDI1CitpbnQgbmV0dHlwZSA9 IE5FVF9WWDI1OworI2Vsc2UKKyNpZmRlZiBERUNORVQKK2ludCBuZXR0eXBlID0gTkVUX0RFQzsK KyNlbHNlCisjaWZkZWYgU1VQRVJMQVQKK2ludCBuZXR0eXBlID0gTkVUX1NMQVQ7CisjZWxzZQor aW50IG5ldHR5cGUgPSBORVRfTk9ORTsKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworI2VuZGlmIC8q IERFQ05FVCAqLworI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KKyNlbmRpZiAvKiBIUFgyNSAqLwor I2VuZGlmIC8qIElCTVgyNSAqLworI2VuZGlmIC8qIFNVTlgyNSAqLworI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworI2Vsc2UgIC8qIE5FVENPTk4gKi8KK2ludCBuZXR0eXBlID0gTkVUX05PTkU7Cisj ZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZkZWYgQU5ZWDI1CitpbnQgcmV2Y2FsbCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogWC4yNSByZXZlcnNlIGNhbGwgbm90IHNlbGVjdGVkICov CitpbnQgY2xvc2dyICA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogWC4yNSBjbG9zZWQg dXNlciBncm91cCAgKi8KK2ludCBjdWRhdGEgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBYLjI1IGNhbGwgdXNlciBkYXRhIG5vdCBzcGVjaWZpZWQgKi8KK2NoYXIgdWRhdGFbTUFYQ1VE QVRBXTsgICAgICAgICAgICAgICAgICAvKiBYLjI1IGNhbGwgdXNlciBkYXRhICovCisKKyNpZmRl ZiBJQk1YMjUKKy8qCisgIEkgd2FzIHVuYWJsZSB0byBmaW5kIGFueSBwcmUtZGVmaW5lZCBNQVgg dmFsdWVzIGZvciB4MjUgYWRkcmVzc2VzIC0gdGhlCisgIGFkZHJlc3NlcyB0aGF0IEkndmUgc2Vl biBoYXZlIGJlZW4gYXJvdW5kIDEwLTEyIGNoYXJhY3RlcnMgMzIgaXMgcHJvYmFibHkKKyAgZW5v dWdoLCA2NCBpcyBob3BlZnVsbHkgc2FmZSBmb3IgZXZlcnlvbmUuCisqLworICAgIHgyNWFkZHJf dCBsb2NhbF9udWEgPSB7J1wwJ307ICAgICAgIC8qIGxvY2FsIHguMjUgYWRkcmVzcyAqLworICAg IHgyNWFkZHJfdCByZW1vdGVfbnVhID0geydcMCd9OyAgICAgIC8qIHJlbW90ZSB4LjI1IGFkZHJl c3MgKi8KKyAgICBjaGFyIHgyNW5hbWVbMzJdID0geydcMCd9OyAgICAgICAgICAvKiB4MjUgZGV2 aWNlIG5hbWUsIHN4MjVhMCBvciBzeDI1YTEgKi8KKyAgICBjaGFyIHgyNWRldls2NF0gPSAgIi9k ZXYveDI1cGt0IjsgICAvKiB4MjUgZGV2aWNlIGluIC9kZXYgKi8KKyAgICBpbnQgeDI1cG9ydCA9 IDA7ICAgICAgICAgICAgICAgICAgICAvKiBwb3J0IHVzZWQgZm9yIFguMjUgLSBBSVggb25seSAq LworI2VuZGlmIC8qIElCTVgyNSAqLworCisjaWZuZGVmIElCTVgyNQorLyoKKyAgVGhpcyBjb25k aXRpb24gaXMgdW5yZWxhdGVkIHRvIHRoZSBhYm92ZSBJQk1YMjUgY29uZGl0aW9uLgorICBJQk0g WC4yNSBkb2Vzbid0IGhhdmUgUEFEIHN1cHBvcnQuCisqLworICAgIENIQVIgcGFkcGFybXNbTUFY UEFEUEFSTVMrMV07IC8qIFguMyBwYXJhbWV0ZXJzICovCisjZW5kaWYgLyogSUJNWDI1ICovCisj ZW5kaWYgLyogQU5ZWDI1ICovCisKKy8qIE90aGVyIGl0ZW1zICovCisKK2ludCBpc2ludGVycnVw dGVkID0gMDsgICAgICAgICAgICAgICAgICAvKiBVc2VkIGluIGV4Y2VwdGlvbiBoYW5kbGluZyAq LworaW50IHdoYXQgPSBXX0lOSVQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdoYXQgSSBhbSBk b2luZyAqLworaW50IGxhc3R4ZmVyID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIExhc3Qg dHJhbnNmZXIgKHNlbmQgb3IgcmVjZWl2ZSkgKi8KKworZXh0ZXJuIGludCBtZG10eXA7ICAgICAg ICAgICAgICAgICAgICAgIC8qIE1vZGVtICgvbmV0d29yaykgdHlwZSAqLworCisjaWZkZWYgTlQK K2V4dGVybiBpbnQgU3RhcnRlZEZyb21EaWFsZXI7CisjaWZkZWYgTlRTSUcKK2V4dGVybiBpbnQg VGxzSW5kZXg7CisjZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBOVEFTTQordW5zaWduZWQgbG9u ZyBFU1BUb1Jlc3RvcmU7ICAgICAgICAgICAgIC8qIERpdHRvICovCisjZW5kaWYgLyogTlRBU00g Ki8KKyNlbmRpZiAvKiBOVCAqLworCisjaWZkZWYgT1MyUE0KK2ludCBvczJwbSA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPUy8yIFByZXNlbnRhdGlvbiBNYW5hZ2VyIGZsYWcgKi8K KyNlbmRpZiAvKiBPUzJQTSAqLworCisvKiBUZXJtaW5hbCBzY3JlZW4gc2l6ZSwgaWYga25vd24s IC0xIG1lYW5zIHVua25vd24uICovCisKKyNpZmRlZiBPUzIKKyNpbmNsdWRlICJja29jb24uaCIK KyNpZmRlZiBLVUkKK2ludCB0dF9yb3dzW1ZOVU1dID0gezI0LDI0LDI1LDF9OyAgICAgICAvKiBS b3dzIChoZWlnaHQpICovCitpbnQgdHRfY29sc1tWTlVNXSA9IHs4MCw4MCw4MCw4MH07ICAgICAg LyogQ29sdW1ucyAod2lkdGgpICovCitpbnQgY21kX3Jvd3MgPSAyNCwgY21kX2NvbHMgPSA4MDsg ICAgICAgLyogQ29tbWFuZC9jb25zb2xlIHNjcmVlbiBkaW1lbnNpb25zICovCisjZWxzZSAvKiBL VUkgKi8KK2ludCB0dF9yb3dzW1ZOVU1dID0gey0xLDI0LDI1LDF9OyAgICAgICAvKiBSb3dzICho ZWlnaHQpICovCitpbnQgdHRfY29sc1tWTlVNXSA9IHstMSw4MCw4MCw4MH07ICAgICAgLyogQ29s dW1ucyAod2lkdGgpICovCitpbnQgY21kX3Jvd3MgPSAtMSwgY21kX2NvbHMgPSAtMTsgICAgICAg LyogQ29tbWFuZC9jb25zb2xlIHNjcmVlbiBkaW1lbnNpb25zICovCisjZW5kaWYgLyogS1VJICov CitpbnQgazk1c3RkaW8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogU3RkaW8gdGhyZWFk cyAqLworaW50IHR0X2JlbGwgPSBYWUJfQVVEIHwgWFlCX1NZUzsgICAgICAgIC8qIEJFTEwgQVVE SUJMRSAoc3lzdGVtIHNvdW5kcykgKi8KKyNlbHNlIC8qIE9TMiAqLworaW50IHR0X3Jvd3MgPSAt MTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJvd3MgKGhlaWdodCkgKi8KK2ludCB0dF9jb2xz ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb2x1bW5zICh3aWR0aCkgKi8KK2ludCBj bWRfcm93cyA9IDI0LCBjbWRfY29scyA9IDgwOyAgICAgICAvKiBDb21tYW5kL2NvbnNvbGUgc2Ny ZWVuIGRpbWVuc2lvbnMgKi8KK2ludCB0dF9iZWxsID0gWFlCX0FVRDsgICAgICAgICAgICAgICAg ICAvKiBCRUxMIE9OICovCisjZW5kaWYgLyogT1MyICovCisKK2ludCB0dF9wcmludCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc3BhcmVudCBwcmludCBkaXNhYmxlZCAqLworaW50 IHR0X2VzY2FwZSA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIEVzY2FwaW5nIGJhY2sgaXMg ZW5hYmxlZCAqLworaW50IHR0X3Njcm9sbCA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNj cm9sbGluZyBvcGVyYXRpb25zIGFyZSBlbmFibGVkICovCisKK2ludCB0bl9leGl0ID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IG9uIGRpc2Nvbm5lY3QgKi8KKworaW50IGV4aXRv bmNsb3NlID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgb24gY2xvc2UgKi8KK2ludCBl eGl0aGFuZ3VwID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBIYW5ndXAgb24gZXhpdCAqLwor aW50IGhhdmVsaW5lID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBMSU5FIG9yIFNF VCBIT1NUIGluIGVmZmVjdCAqLworaW50IHRsZXZlbCA9IC0xOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRha2UtZmlsZSBjb21tYW5kIGxldmVsICovCitpbnQgaGludHMgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBnaXZlIGhpbnRzICovCisKKyNpZmRlZiBO T0xPQ0FMCitpbnQgcmVtb25seSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtb3Rl LW1vZGUtb25seSBhZHZpc29yeSAoLVIpICovCitpbnQgbm9sb2NhbCA9IDE7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmVtb3RlLW9ubHkgc3RyaWN0bHkgZW5mb3JjZWQgKi8KKyNlbHNlCitp bnQgcmVtb25seSA9IDA7CitpbnQgbm9sb2NhbCA9IDA7CitpbnQgY3hfc3RhdHVzID0gMDsgICAg ICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVCByZXR1cm4gc3RhdHVzICovCisjZW5kaWYgLyog Tk9MT0NBTCAqLworCisjaWZuZGVmIE5PU1BMCitleHRlcm4gaW50IGNtZGx2bDsgICAgICAgICAg ICAgICAgICAgICAgLyogQ29tbWFuZCBsZXZlbCAqLworZXh0ZXJuIGludCBtYWNsdmw7ICAgICAg ICAgICAgICAgICAgICAgIC8qIE1hY3JvIGludm9jYXRpb24gbGV2ZWwgKi8KKyNlbmRpZiAvKiBO T1NQTCAqLworCitpbnQgcHJvdG9jb2wgID0gUFJPVE9fSzsgICAgICAgICAgICAgICAgLyogRmls ZSB0cmFuc2ZlciBwcm90b2NvbCA9IEtlcm1pdCAqLworCisjaWZkZWYgTkVXREVGQVVMVFMKK2lu dCBwcmVmaXhpbmcgPSBQWF9DQVU7CisjZWxzZQoraW50IHByZWZpeGluZyA9IFBYX0FMTDsKKyNl bmRpZiAvKiBORVdERUZBVUxUUyAqLworCitleHRlcm4gc2hvcnQgY3RscFtdOyAgICAgICAgICAg ICAgICAgICAgLyogQ29udHJvbC1wcmVmaXggdGFibGUgKi8KKworaW50IGNhcnJpZXIgPSBDQVJf QVVUOyAgICAgICAgICAgICAgICAgIC8qIFBheSBhdHRlbnRpb24gdG8gY2FycmllciBzaWduYWwg Ki8KK2ludCBjZHRpbW8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDYXJyaWVyIHdh aXQgdGltZW91dCAqLworaW50IHhpdHN0YSA9IEdPT0RfRVhJVDsgICAgICAgICAgICAgICAgIC8q IFByb2dyYW0gZXhpdCBzdGF0dXMgKi8KKworI2lmZGVmIFZNUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERlZmF1bHQgZmlsZW5hbWUgY29sbGlzaW9uIGFjdGlvbiAqLworaW50IGZu Y2FjdCA9IFhZRlhfWDsgICAgICAgICAgICAgICAgICAgIC8qIFJFUExBQ0UgZm9yIFZNUyAqLwor I2Vsc2UKK2ludCBmbmNhY3QgPSBYWUZYX0I7ICAgICAgICAgICAgICAgICAgICAvKiBCQUNLVVAg Zm9yIGV2ZXJ5Ym9keSBlbHNlICovCisjZW5kaWYgLyogVk1TICovCisKK2ludCBmbmNzYXYgPSAt MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Igc2F2aW5nICYgcmVzdG9yaW5nIHRoZSBh Ym92ZSAqLworaW50IGJnc2V0ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJBQ0tH Uk9VTkQgbW9kZSBzZXQgZXhwbGljaXRseSAqLworCitpbnQgY21kaW50ID0gMTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogSW50ZXJydXB0cyBhcmUgYWxsb3dlZCAqLworI2lmZGVmIFVOSVgK K2ludCB4c3VzcGVuZCA9IERGU1VTUDsJCQkvKiBXaGV0aGVyIFNVU1BFTkQgY29tbWFuZCwgZXRj LCAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzIHRvIGJl IGFsbG93ZWQuICovCitpbnQgeHN1c3BlbmQgPSAwOworI2VuZGlmIC8qIFVOSVggKi8KKworLyog U3RhdGlzdGljcyB2YXJpYWJsZXMgKi8KKworQ0tfT0ZGX1QKKyAgICBmbGNpLCAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2hhcmFjdGVycyBmcm9tIGxpbmUsIGN1cnJlbnQgZmlsZSAqLworICAg IGZsY28sICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyB0byBsaW5lLCBjdXJyZW50IGZp bGUgICovCisgICAgdGxjaSwgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJzIGZyb20gbGlu ZSBpbiB0cmFuc2FjdGlvbiAqLworICAgIHRsY28sICAgICAgICAgICAgICAgICAgICAgICAvKiBD aGFycyB0byBsaW5lIGluIHRyYW5zYWN0aW9uICovCisgICAgZmZjLCAgICAgICAgICAgICAgICAg ICAgICAgIC8qIENoYXJzIHRvL2Zyb20gY3VycmVudCBmaWxlICovCisgICAgdGZjOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENoYXJzIHRvL2Zyb20gZmlsZXMgaW4gdHJhbnNhY3Rpb24gKi8K KworbG9uZyBmaWxjbnQsICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgZmlsZXMgaW4g dHJhbnNhY3Rpb24gKi8KKyAgICBmaWxyZWosICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVy IG9mIGZpbGVzIHJlamVjdGVkIGluIHRyYW5zYWN0aW9uICovCisgICAgY3BzID0gMEwsICAgICAg ICAgICAgICAgICAgIC8qIENoYXJzL3NlYyBsYXN0IHRyYW5zZmVyICovCisgICAgcGVha2NwcyA9 IDBMLCAgICAgICAgICAgICAgIC8qIFBlYWsgY2hhcnMvc2VjIGxhc3QgdHJhbnNmZXIgKi8KKyAg ICBjY3UsICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBjaGFycyB1bnByZWZpeGVk IGluIHRyYW5zYWN0aW9uICovCisgICAgY2NwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENv bnRyb2wgY2hhcnMgcHJlZml4ZWQgaW4gdHJhbnNhY3Rpb24gKi8KKyAgICBycHRuOyAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVwZWF0ZWQgY2hhcmFjdGVycyBjb21wcmVzc2VkICovCisKK2lu dCB0c2VjcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmRzIGZvciB0cmFu c2FjdGlvbiAqLworaW50IGZzZWNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBl ci1maWxlIHRpbWVyICovCisKKyNpZmRlZiBHRlRJTUVSCitDS0ZMT0FUCisgIGZwZnNlY3MgPSAw LjAsICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxvYXRpbmcgcG9pbnQgcGVyLWZpbGUgdGlt ZXIgKi8KKyAgZnB0c2VjcyA9IDAuMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcGVy LXRyYW5zYWN0aW9uIHRpbWVyICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisvKiBGbGFncyAq LworCitpbnQgZGVibG9nID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVidWcgbG9n IGlzIG9wZW4gKi8KKyAgICBkZWJvayA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBE ZWJ1ZyBsb2cgaXMgbm90IGRpc2FibGVkICovCisgICAgZGVieGxlbiA9IDU0LCAgICAgICAgICAg ICAgICAgICAgICAgLyogRGVmYXVsdCBsZW5ndGggZm9yIGRlYnVnIHN0cmluZ3MgKi8KKyAgICBk ZWJzZXMgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBERUJVRyBTRVNT SU9OICovCisgICAgZGVidGltID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jbHVk ZSB0aW1lc3RhbXAgaW4gZGVidWcgbG9nICovCisgICAgZGVibXNnID0gMCwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRGVidWcgbWVzc2FnZXMgb24vb2ZmICovCisgICAgcGt0bG9nID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgcGFja2V0IGxvZ2dpbmcgKi8KKyAg ICBzZXNsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXNzaW9uIGxvZ2dpbmcg Ki8KKyAgICBkaWFsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIGxvZ2dp bmcgKi8KKyAgICB0cmFsb2cgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2Fj dGlvbiBsb2dnaW5nICovCisgICAgdGxvZ2ZtdCA9IDEsICAgICAgICAgICAgICAgICAgICAgICAg LyogVHJhbnNhY3Rpb24gbG9nIGZvcm1hdCAodmVyYm9zZSkgKi8KKyAgICB0bG9nc2VwID0gKGlu dCknLCcsICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBsb2cgZmllbGQgc2VwYXJhdG9y ICovCisgICAgZGlzcGxhID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFu c2ZlciBkaXNwbGF5IG9uL29mZiAqLworICAgIHN0ZG91ZiA9IDAsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZsYWcgZm9yIG91dHB1dCB0byBzdGRvdXQgKi8KKyAgICBzdGRpbmYgPSAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBpbnB1dCBmcm9tIHN0ZGluICovCisg ICAgeGZsZyAgID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgWCBpbnN0 ZWFkIG9mIEYgcGFja2V0ICovCisgICAgaGNmbGcgID0gMCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRG9pbmcgSG9zdCBjb21tYW5kICovCisgICAgZGVzdCAgID0gREVTVF9ELCAgICAgICAg ICAgICAgICAgICAgLyogRGVzdGluYXRpb24gZm9yIHBhY2tldCBkYXRhICovCisgICAgemNoa29k ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogemNoa28oKSBzaG91bGQgd29yayBmb3Ig ZGlycyB0b28/ICovCisgICAgemNoa2lkID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyog emNoa2koKSBzaG91bGQgd29yayBmb3IgZGlycyB0b28/ICovCisKKy8qIElmIHlvdSBjaGFuZ2Ug dGhpcywgYWxzbyBzZWUgc3RydWN0IHB0YWIgYWJvdmUuLi4gKi8KKworI2lmZGVmIE9TMiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGZpbGUgbmFtZSBjb252ZXJzaW9u ICovCisgICAgZm5jbnYgID0gWFlGTl9MLCAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBp cyBMaXRlcmFsIGluIE9TLzIsICovCisgICAgZl9zYXZlID0gWFlGTl9MLCAgICAgICAgICAgICAg ICAgICAgLyogKHNhdmVkIGNvcHkgb2Ygc2FtZSkgKi8KKyNlbHNlCisgICAgZm5jbnYgID0gWFlG Tl9DLCAgICAgICAgICAgICAgICAgICAgLyogZWxzZXdoZXJlIENvbnZlcnQgdGhlbSAqLworICAg IGZfc2F2ZSA9IFhZRk5fQywgICAgICAgICAgICAgICAgICAgIC8qIChkaXR0bykgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKworICAgIGZuc3BhdGggPSBQQVRIX09GRiwgICAgICAgICAgICAgICAgIC8q IFNlbmQgZmlsZSBwYXRoICovCisgICAgZm5ycGF0aCA9IFBBVEhfQVVUTywgICAgICAgICAgICAg ICAgLyogUmVjZWl2ZSBmaWxlIHBhdGggKi8KKyAgICBmYWNrcGF0aCA9IDEsICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZW5kIGJhY2sgcGF0aCBpbiBBQ0sgdG8gRiAqLworICAgIGJpbmFyeSA9 IFhZRlRfQiwgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgZmlsZSB0cmFuc2ZlciBtb2Rl ICovCisgICAgYl9zYXZlID0gWFlGVF9CLCAgICAgICAgICAgICAgICAgICAgLyogU2F2ZWQgZmls ZSBtb2RlICovCisgICAgZW9mbWV0aG9kID0gMCwgICAgICAgICAgICAgICAgICAgICAgLyogRU9G IGRldGVjdGlvbiBtZXRob2QgKGxlbmd0aCkgKi8KKworI2lmZGVmIE9TMgorICAgIGN1cnNvcl9z YXZlID0gLTEsICAgICAgICAgICAgICAgICAgIC8qIEN1cnNvciBzdGF0ZSAqLworI2VuZGlmIC8q IE9TMiAqLworCisgICAgeGZlcm1vZGUgPSBYTU9ERV9BLCAgICAgICAgICAgICAgICAgLyogVHJh bnNmZXIgbW9kZSwgbWFudWFsIG9yIGF1dG8gKi8KKyAgICB4ZmlsZXR5cGUgPSAtMSwgICAgICAg ICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBvbmx5IHRleHQgKG9yIGJpbmFyeSkgKi8KKyAgICBy ZWN1cnNpdmUgPSAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBSZWN1cnNpdmUgZGlyZWN0b3J5 IHRyYXZlcnNhbCAqLworICAgIG5vbGlua3MgICA9IDIsICAgICAgICAgICAgICAgICAgICAgIC8q IERvbid0IGZvbGxvdyBzeW1ib2xpYyBsaW5rcyAqLworICAgIHNraXBidXAgICA9IDAsICAgICAg ICAgICAgICAgICAgICAgIC8qIFNraXAgYmFja3VwIGZpbGVzIHdoZW4gc2VuZGluZyAqLworICAg IHNlbmRtb2RlID0gU01fU0VORCwgICAgICAgICAgICAgICAgIC8qIFdoaWNoIHR5cGUgb2YgU0VO RCBvcGVyYXRpb24gKi8KKyAgICBzbG9zdGFydCAgPSAxLCAgICAgICAgICAgICAgICAgICAgICAv KiBTbG93IHN0YXJ0IChncm93IHBhY2tldCBsZW5ndGhzKSAqLworICAgIGNtYXNrICA9IDAzNzcs ICAgICAgICAgICAgICAgICAgICAgIC8qIENPTk5FQ1QgKHRlcm1pbmFsKSBieXRlIG1hc2sgKi8K KyAgICBmbWFzayAgPSAwMzc3LCAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGJ5dGUgbWFz ayAqLworICAgIGNrd2FybiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9y IGZpbGUgd2FybmluZyAqLworICAgIHF1aWV0ICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEJlIHF1aWV0IGR1cmluZyBmaWxlIHRyYW5zZmVyICovCisgICAgbG9jYWwgID0gMCwgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMSA9IGxvY2FsIG1vZGUsIDAgPSByZW1vdGUgbW9kZSAq LworICAgIGN4dHlwZSA9IENYVF9SRU1PVEUsICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24g dHlwZSAqLworICAgIHNlcnZlciA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg Zm9yIEkgQW0gU2VydmVyICovCisgICAgcXVlcnkgPSAwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmxhZyBmb3IgUXVlcnkgYWN0aXZlICovCisgICAganVzdG9uZSA9IDAsICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2VydmVyIHNob3VsZCBkbyBKdXN0IE9uZSBjb21tYW5kICovCisg ICAgdXJzZXJ2ZXIgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgWW91IEFy ZSBTZXJ2ZXIgKi8KKyAgICBieWVfYWN0aXZlID0gMCwgICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBCWUUgY29tbWFuZCBhY3RpdmUgKi8KKyAgICBkaXJhY3RpdmUgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIGZvciBESVJFQ1RPUlkgY29tbWFuZCBhY3RpdmUgKi8KKyAg ICBjZGFjdGl2ZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBDRCBjb21t YW5kIGFjdGl2ZSAqLworICAgIGNmbGcgICA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENvbm5lY3QgYmVmb3JlIHRyYW5zYWN0aW9uICovCisgICAgY25mbGcgID0gMCwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29ubmVjdCBhZnRlciB0cmFuc2FjdGlvbiAqLworICAgIGN4c2Vl biA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGNhbmNlbGxpbmcgYSBm aWxlICovCisgICAgY3pzZWVuID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBm b3IgY2FuY2VsbGluZyBmaWxlIGdyb3VwICovCisgICAgZmF0YWxpbyA9IDAsICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyBmb3IgZmF0YWwgaS9vIGVycm9yICovCisgICAgZGlzY2FyZCA9 IDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZmlsZSB0byBiZSBkaXNjYXJk ZWQgKi8KKyAgICBrZWVwID0gU0VUX0FVVE8sICAgICAgICAgICAgICAgICAgICAvKiBLZWVwIGlu Y29tcGxldGUgZmlsZXMgPSBBVVRPICovCisgICAgdW5rY3MgPSAxLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogS2VlcCBmaWxlIHcvdW5rbm93biBjaGFyYWN0ZXIgc2V0ICovCisjaWZkZWYg Vk1TCisgICAgZmlsZXBlZWsgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogSW5zcGVjdGlv biBvZiBmaWxlcyAqLworI2Vsc2UKKyNpZmRlZiBkYXRnZW5lcmFsCisgICAgZmlsZXBlZWsgPSAw LAorI2Vsc2UKKyAgICBmaWxlcGVlayA9IDEsCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyAgICBuYWtzdGF0ZSA9IDAsICAgICAgICAgICAgICAgICAgICAgICAv KiBJbiBhIHN0YXRlIHdoZXJlIHdlIGNhbiBzZW5kIE5BS3MgKi8KKyAgICBkYmxjaGFyID0gLTEs ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgdG8gZG91YmxlIHdoZW4gc2VuZGlu ZyAqLworICAgIG1vdmluZyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1PVkUgPSBz ZW5kLCB0aGVuIGRlbGV0ZSAqLworICAgIHJlbGlhYmxlID0gU0VUX0FVVE8sICAgICAgICAgICAg ICAgIC8qIE5vbnplcm8gaWYgdHJhbnNwb3J0IGlzIHJlbGlhYmxlICovCisgICAgeHJlbGlhYmxl ID0gLTEsCisgICAgc2V0cmVsaWFibGUgPSAwLAorICAgIHVyY2xlYXIgPSAwLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vbnplcm8gZm9yIGNsZWFyIGNoYW5uZWwgdG8geW91ICovCisgICAg Y2xlYXJycSA9IFNFVF9BVVRPLCAgICAgICAgICAgICAgICAgLyogU0VUIENMRUFSQ0hBTkVMIHZh bHVlICovCisgICAgY2xlYXJlZCA9IDAsCisgICAgc3RyZWFtaW5nID0gMCwgICAgICAgICAgICAg ICAgICAgICAgLyogTm9uemVybyBpZiBzdHJlYW1pbmcgaXMgYWN0aXZlICovCisgICAgc3RyZWFt b2sgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogTm9uemVybyBpZiBzdHJlYW1pbmcgbmVn b3RpYXRlZCAqLworICAgIHN0cmVhbXJxID0gU0VUX0FVVE8sICAgICAgICAgICAgICAgIC8qIFNF VCBTVFJFQU1JTkcgdmFsdWUgKi8KKyAgICBzdHJlYW1lZCA9IC0xOyAgICAgICAgICAgICAgICAg ICAgICAvKiBXaGV0aGVyIHdlIHN0cmVhbWVkIGxhc3QgdGltZSAqLworCitjaGFyICogc25kX21v dmUgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogTW92ZSBmaWxlIGFmdGVyIHNlbmRpbmcgaXQg Ki8KK2NoYXIgKiBzbmRfcmVuYW1lID0gTlVMTDsgICAgICAgICAgICAgICAvKiBSZW5hbWUgZmls ZSBhZnRlciBzZW5kaW5nIGl0ICovCitjaGFyICogcmN2X21vdmUgPSBOVUxMOyAgICAgICAgICAg ICAgICAgLyogTW92ZSBmaWxlIGFmdGVyIHJlY2VpdmluZyBpdCAqLworY2hhciAqIHJjdl9yZW5h bWUgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIFJlbmFtZSBmaWxlIGFmdGVyIHJlY2VpdmluZyBp dCAqLworCitjaGFyICogZ19zbmRfbW92ZSA9IE5VTEw7CitjaGFyICogZ19zbmRfcmVuYW1lID0g TlVMTDsKK2NoYXIgKiBnX3Jjdl9tb3ZlID0gTlVMTDsKK2NoYXIgKiBnX3Jjdl9yZW5hbWUgPSBO VUxMOworCisjaWZkZWYgQ0tfVFJJR0dFUgorY2hhciAqdHRfdHJpZ2dlcltUUklHR0VSU10gPSB7 IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCB9OworQ0hBUiAqdHRfdHJt YXRjaFtUUklHR0VSU10gPSB7IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCB9OworY2hhciAqdHJpZ2dlcnZhbCA9IE5VTEw7CisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwor CitpbnQgY2t4bG9nZ2luZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Igc3lz bG9nZ2luZyBhY3RpdmUgKi8KK2ludCBpa2Rib3BlbiA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBGbGFnIGZvciBJS1NEIGRhdGFiYXNlIGFjdGl2ZSAqLworaW50IGRiaW5pdGVkID0gMDsg ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIElLU0RCIHJlY29yZCBpbml0J2QgKi8K KyNpZm5kZWYgQ0tTWVNMT0cKK2ludCBja3hzeXNsb2cgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBMb2dnaW5nIGxldmVsIDAgKi8KKyNlbHNlCisjaWZkZWYgU1lTTE9HTEVWRUwKK2ludCBj a3hzeXNsb2cgPSBTWVNMT0dMRVZFTDsgICAgICAgICAgICAvKiBMb2dnaW5nIGxldmVsIHNwZWNp ZmllZCAqLworI2Vsc2UKK2ludCBja3hzeXNsb2cgPSBTWVNMR19ERjsgICAgICAgICAgICAgICAv KiBEZWZhdWx0IGxvZ2dpbmcgbGV2ZWwgKi8KKyNlbmRpZiAvKiBTWVNMT0dMRVZFTCAqLworI2Vu ZGlmIC8qIENLU1lTTE9HICovCisKKyNpZm5kZWYgTk9IRUxQCisjaWZuZGVmIE5PQ01ETAorX1BS T1RPVFlQKCBWT0lEIGluaW9wdGhscCwgKHZvaWQpICk7ICAgIC8qIENvbW1hbmQtbGluZSBoZWxw IGluaXRpYWxpemVyICovCisjZW5kaWYgLyogTk9DTURMICovCisjZW5kaWYgLyogTk9IRUxQICov CisKK19QUk9UT1RZUCggVk9JRCBnZXRleGVkaXIsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQg cHV0bm90aGluZywgKGNoYXIpICk7CisKKyNpZmRlZiBJS1NECitfUFJPVE9UWVAoIFZPSUQgZG9p a3NkaW5pdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgaWtzZGluaXQsICh2b2lkKSApOwor X1BST1RPVFlQKCBWT0lEIGRvaWtsb2csICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZGJpbml0 LCAodm9pZCkgKTsKKyNlbmRpZiAvKiBJS1NEICovCisKKy8qIFZhcmlhYmxlcyBwYXNzZWQgZnJv bSBjb21tYW5kIHBhcnNlciB0byBwcm90b2NvbCBtb2R1bGUgKi8KKworI2lmbmRlZiBOT1NQTAor I2lmbmRlZiBOT0lDUAorI2lmZGVmIENLX0FQQworX1BST1RPVFlQKCBWT0lEIGFwY29uZWN0LCAo dm9pZCkgKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNpZmRlZiBPUzIKK2V4dGVybiBpbnQgaW5p dHZpazsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8qIE5P U1BMICovCitjaGFyICpjbGNtZHMgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRl ciB0byBjb21tYW5kLWxpbmUgY29tbWFuZHMgKi8KKworI2lmbmRlZiBOT1NFVEtFWQorZXh0ZXJu IEtFWSAqa2V5bWFwOworZXh0ZXJuIE1BQ1JPICptYWNyb3RhYjsKKyNlbmRpZiAvKiBOT1NFVEtF WSAqLworCisjaWZuZGVmIE5PUFVTSAoraW50IG5vcHVzaCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBVU0ggZW5hYmxlZCAqLworI2Vsc2UKK2ludCBub3B1c2ggPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQVVNIIGRpc2FibGVkICovCisjZW5kaWYgLyogTk9QVVNIICov CisKK0NIQVIgc3N0YXRlICA9IChDSEFSKSAwOyAgICAgICAgICAgICAgICAvKiBTdGFydGluZyBz dGF0ZSBmb3IgYXV0b21hdG9uICovCitDSEFSIHpzdGF0ZSAgPSAoQ0hBUikgMDsgICAgICAgICAg ICAgICAgLyogRm9yIHJlbWVtYmVyaW5nIHNzdGF0ZSAqLworY2hhciAqIHByaW50ZXJuYW1lID0g TlVMTDsgICAgICAgICAgICAgIC8qIE5VTEwgaWYgcHJpbnRlciBub3QgcmVkaXJlY3RlZCAqLwor aW50IHByaW50cGlwZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBTRVQgUFJJTlRF UiAqLworaW50IG5vcHJpbnRlciA9IDA7CisKKyNpZm5kZWYgTk9YRkVSCitjaGFyICpjbWFyZyAg PSAiIjsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBjb21tYW5kIGRhdGEgKi8K K2NoYXIgKmNtYXJnMiA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIDJu ZCBjb21tYW5kIGRhdGEgKi8KK2NoYXIgKipjbWxpc3Q7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIGZpbGUgbGlzdCBpbiBhcmd2ICovCisKKyNpZmRlZiBDS19BVVRPREwg ICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRvZG93bmxvYWQgKi8KK2ludCBhdXRvZGwgPSAx OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbHNl CitpbnQgYXV0b2RsID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogKG9yIGlmIG5vdCBp bXBsZW1lbnRlZCkuICovCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCitpbnQgYWRsX2VyciA9IDE7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSA9IHN0b3Agb24gZXJyb3IgKi8KKyNpZmRlZiBL VUkKK2ludCBhZGxfYXNrID0gMTsJCQkvKiAxID0gZmlsZSBkaWFsb2cgb24gYXV0b2Rvd25sb2Fk ICovCisjZWxzZQoraW50IGFkbF9hc2sgPSAwOwkJCS8qIDAgPSBubyBmaWxlIGRpYWxvZyAqLwor I2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFVVE9ET1dOTE9BRCBwYXJhbWV0ZXJzICovCitpbnQgYWRsX2ttb2RlID0gQURMX1BBQ0ss ICAgICAgICAgICAgICAgLyogTWF0Y2ggUGFja2V0IHRvIHNpZ25hbCBkb3dubG9hZCAqLworICAg IGFkbF96bW9kZSA9IEFETF9QQUNLOworY2hhciAqIGFkbF9rc3RyID0gTlVMTDsgICAgICAgICAg ICAgICAgIC8qIEtFUk1JVCBEb3dubG9hZCBTdHJpbmcgKi8KK2NoYXIgKiBhZGxfenN0ciA9IE5V TEw7ICAgICAgICAgICAgICAgICAvKiBaTU9ERU0gRG93bmxvYWQgU3RyaW5nICovCisjZW5kaWYg LyogT1MyICovCisKK2ludCByZW1maWxlID0gMCwgcmVtcGlwZSA9IDAsIHJlbWFwcGQgPSAwOyAv KiBSRU1PVEUgb3V0cHV0IHJlZGlyZWN0aW9uICovCitjaGFyICogcmVtZGVzdCA9IE5VTEw7CisK KyNpZm5kZWYgTk9TRVJWRVIKKy8qCisgIFNlcnZlciBzZXJ2aWNlczoKKyAgIDAgPSBkaXNhYmxl ZAorICAgMSA9IGVuYWJsZWQgaW4gbG9jYWwgbW9kZQorICAgMiA9IGVuYWJsZWQgaW4gcmVtb3Rl IG1vZGUKKyAgIDMgPSBlbmFibGVkIGluIGJvdGggbG9jYWwgYW5kIHJlbW90ZSBtb2RlcworICBv bmx5IGFzIGluaXRpYWwgKGRlZmF1bHQpIHZhbHVlcy4KKyovCitpbnQgZW5feGl0ID0gMjsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRVhJVCAqLworaW50IGVuX2N3ZCA9IDM7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENEL0NXRCAqLworaW50IGVuX2NweSA9IDM7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENPUFkgICAqLworaW50IGVuX2RlbCA9IDI7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERFTEVURSAqLworaW50IGVuX21rZCA9IDM7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE1LRElSICovCitpbnQgZW5fcm1kID0gMjsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUk1ESVIgKi8KK2ludCBlbl9kaXIgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBESVJFQ1RPUlkgKi8KK2ludCBlbl9maW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGSU5JU0ggKi8KK2ludCBlbl9nZXQgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBH RVQgKi8KKyNpZm5kZWYgTk9QVVNICitpbnQgZW5faG9zID0gMjsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSE9TVCBlbmFibGVkICovCisjZWxzZQoraW50IGVuX2hvcyA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhPU1QgZGlzYWJsZWQgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8K K2ludCBlbl9yZW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU5BTUUgKi8KK2lu dCBlbl9zZW4gPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRU5EICovCitpbnQgZW5f c2V0ID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUICovCitpbnQgZW5fc3BhID0g MzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1BBQ0UgKi8KK2ludCBlbl90eXAgPSAzOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUWVBFICovCitpbnQgZW5fd2hvID0gMzsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogV0hPICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKy8qIERhdGEg R2VuZXJhbCBBT1MvVlMgY2FuJ3QgZG8gdGhpcyAqLworaW50IGVuX2J5ZSA9IDA7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEJZRSAqLworI2Vsc2UKK2ludCBlbl9ieWUgPSAyOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQQ3MgaW4gbG9jYWwgbW9kZS4uLiAqLworI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCitpbnQgZW5fYXNnID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyog QVNTSUdOICovCitpbnQgZW5fcXVlID0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUVVF UlkgKi8KK2ludCBlbl9yZXQgPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRVRSSUVW RSAqLworaW50IGVuX21haSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1BSUwgKi8K K2ludCBlbl9wcmkgPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQUklOVCAqLworaW50 IGVuX2VuYSA9IDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVOQUJMRSAqLworI2Vsc2UK K2ludCBlbl94aXQgPSAwLCBlbl9jd2QgPSAwLCBlbl9jcHkgPSAwLCBlbl9kZWwgPSAwLCBlbl9t a2QgPSAwLCBlbl9ybWQgPSAwLAorICAgIGVuX2RpciA9IDAsIGVuX2ZpbiA9IDAsIGVuX2dldCA9 IDAsIGVuX2hvcyA9IDAsIGVuX3JlbiA9IDAsIGVuX3NlbiA9IDAsCisgICAgZW5fc2V0ID0gMCwg ZW5fc3BhID0gMCwgZW5fdHlwID0gMCwgZW5fd2hvID0gMCwgZW5fYnllID0gMCwgZW5fYXNnID0g MCwKKyAgICBlbl9xdWUgPSAwLCBlbl9yZXQgPSAwLCBlbl9tYWkgPSAwLCBlbl9wcmkgPSAwLCBl bl9lbmEgPSAwOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisjZW5kaWYgLyogTk9YRkVSICovCisK Ky8qIE1pc2NlbGxhbmVvdXMgKi8KKworY2hhciAqKnhhcmd2OyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEdsb2JhbCBjb3BpZXMgb2YgYXJndiAqLworaW50IHhhcmdjOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBhcmdjICAqLworaW50IHhhcmdzOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFuIGltbXV0YWJsZSBjb3B5IG9mIGFyZ2MgKi8KK2NoYXIg KnhhcmcwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgb2YgYXJndlswXSAqLwor Y2hhciAqcGlwZWRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gLVAg KHBpcGUpIGRhdGEgKi8KKworZXh0ZXJuIGNoYXIgKmRmdHR5OyAgICAgICAgICAgICAgICAgICAg IC8qIERlZmF1bHQgdHR5IG5hbWUgZnJvbSBjaz90aW8uYyAqLworZXh0ZXJuIGludCBkZmxvYzsg ICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbG9jYXRpb246IHJlbW90ZS9sb2NhbCAq LworZXh0ZXJuIGludCBkZnBydHk7ICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcGFy aXR5ICovCitleHRlcm4gaW50IGRmZmxvdzsgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVs dCBmbG93IGNvbnRyb2wgKi8KKworI2lmZGVmIFROQ09ERQorZXh0ZXJuIGludCB0bl9kZWI7Cisj ZW5kaWYgLyogVE5DT0RFICovCisvKgorICBCdWZmZXJlZCBmaWxlIGlucHV0IGFuZCBvdXRwdXQg YnVmZmVycy4gIFNlZSBnZXRwa3QoKSBpbiBja2NmbnMuYworICBhbmQgem91dGR1bXAoKSBpbiB0 aGUgc3lzdGVtLWRlcGVuZGVudCBmaWxlIGkvbyBtb2R1bGUgKHVzdWFsbHkgY2s/ZmlvLmMpLgor Ki8KKyNpZm5kZWYgRFlOQU1JQworLyogTm93IHdlIGFsbG9jYXRlIHRoZW0gZHluYW1pY2FsbHks IHNlZSBnZXRpb2JzKCkgYmVsb3cuICovCitjaGFyIHppbmJ1ZmZlcltJTkJVRlNJWkVdLCB6b3V0 YnVmZmVyW09CVUZTSVpFXTsKKyNlbmRpZiAvKiBEWU5BTUlDICovCitjaGFyICp6aW5wdHIsICp6 b3V0cHRyOworaW50IHppbmNudCwgem91dGNudDsKK2ludCB6b2J1ZnNpemUgPSBPQlVGU0laRTsK K2ludCB6b2ZidWZmZXIgPSAxOworaW50IHpvZmJsb2NrICA9IDE7CisKKyNpZmRlZiBTRVNMSU1J VAoraW50IHNlc2xpbWl0ID0gMDsKKyNlbmRpZiAvKiBTRVNMSU1JVCAqLworCisjaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KKyNpbmNsdWRlICJja3VhdGguaCIKKyNlbmRpZiAvKiBDS19BVVRIRU5U SUNBVElPTiAqLworCitfUFJPVE9UWVAoIGludCBnZXRpb2JzLCAoVk9JRCkgKTsKKworLyogIE0g QSBJIE4gIC0tICBDLUtlcm1pdCBtYWluIHByb2dyYW0gICovCisKKyNpbmNsdWRlIDxzaWduYWwu aD4KKworI2lmbmRlZiBOT0NDVFJBUAorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgImNr Y3NpZy5oIgorY2tqbXBidWYgY21qYnVmOworI2lmZGVmIEdFTURPUyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNwZWNpYWwgZm9yIEF0YXJpIFNUICovCitjY19jbGVhbigpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBjYW4ndCBiZSByaWdodD8gKi8KKyNlbmRpZiAv KiBHRU1ET1MgKi8KKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworCisjaWZuZGVmIE5PWEZFUgorLyog SW5mbyBhc3NvY2lhdGVkIHdpdGggYSBzeXN0ZW0gSUQgKi8KKworc3RydWN0IHN5c2RhdGEgc3lz aWRsaXN0W10gPSB7ICAgICAgICAgIC8qIEFkZCBvdGhlcnMgYXMgbmVlZGVkLi4uICovCisgIHsg IjAiLCAgImFub255bW91cyIsICAgIDAsIE5VTCwgIDAsIDAsIDAgfSwKKyAgeyAiQTEiLCAiQXBw bGUgSUkiLCAgICAgMCwgTlVMLCAgMCwgMCwgMyB9LCAvKiBmaXggdGhpcyAqLworICB7ICJBMyIs ICJNYWNpbnRvc2giLCAgICAxLCAnOicsICAwLCAyLCAxIH0sCisgIHsgIkQ3IiwgIlZNUyIsICAg ICAgICAgIDAsICddJywgIDEsIDAsIDAgfSwKKyAgeyAiREEiLCAiUlNUUy9FIiwgICAgICAgMCwg J10nLCAgMSwgMCwgMyB9LCAvKiAoaSB0aGluay4uLikgKi8KKyAgeyAiREIiLCAiUlQxMSIsICAg ICAgICAgMCwgTlVMLCAgMSwgMCwgMyB9LCAvKiAobWF5YmUuLi4pICovCisgIHsgIkYzIiwgIkFP Uy9WUyIsICAgICAgIDEsICc6JywgIDAsIDAsIDIgfSwKKyAgeyAiSTEiLCAiVk0vQ01TIiwgICAg ICAgMCwgTlVMLCAgMCwgMCwgMCB9LAorICB7ICJJMiIsICJNVlMvVFNPIiwgICAgICAwLCBOVUws ICAwLCAwLCAwIH0sCisgIHsgIkk0IiwgIk1VU0lDIiwgICAgICAgIDAsIE5VTCwgIDAsIDAsIDAg fSwKKyAgeyAiSTciLCAiQ0lDUyIsICAgICAgICAgMCwgTlVMLCAgMCwgMCwgMCB9LAorICB7ICJJ OSIsICJNVlMvUk9TQ09FIiwgICAwLCBOVUwsICAwLCAwLCAwIH0sCisgIHsgIksyIiwgIkF0YXJp IFNUIiwgICAgIDEsICdcXCcsIDEsIDAsIDMgfSwKKyAgeyAiTDMiLCAiQW1pZ2EiLCAgICAgICAg MSwgJy8nLCAgMSwgMCwgMiB9LAorICB7ICJNViIsICJTdHJhdHVzIFZPUyIsICAxLCAnPicsICAw LCAxLCAwIH0sCisgIHsgIk4zIiwgIkFwb2xsbyBBZWdpcyIsIDEsICcvJywgIDAsIDMsIDIgfSwK KyAgeyAiVTEiLCAiVU5JWCIsICAgICAgICAgMSwgJy8nLCAgMCwgMywgMiB9LAorICB7ICJVOCIs ICJNUy1ET1MiLCAgICAgICAxLCAnXFwnLCAxLCAwLCAzIH0sCisgIHsgIlVEIiwgIk9TLTkiLCAg ICAgICAgIDEsICcvJywgIDAsIDMsIDIgfSwKKyAgeyAiVU4iLCAiV2luZG93cy0zMiIsICAgMSwg J1xcJywgMSwgMiwgMyB9LAorICB7ICJVTyIsICJPUy8yIiwgICAgICAgICAxLCAnXFwnLCAxLCAy LCAzIH0KK307CitzdGF0aWMgaW50IG54eHN5c2lkcyA9IChzaXplb2Yoc3lzaWRsaXN0KSAvIHNp emVvZihzdHJ1Y3Qgc3lzZGF0YSkpOworCisvKiBHaXZlbiBhIEtlcm1pdCBzeXN0ZW0gSUQgY29k ZSwgcmV0dXJuIHRoZSBhc3NvY2lhdGVkIG5hbWUgc3RyaW5nICovCisvKiBhbmQgc29tZSBwcm9w ZXJ0aWVzIG9mIHRoZSBmaWxlbmFtZXMuLi4gKi8KKworY2hhciAqCitnZXRzeXNpZChzKSBjaGFy ICogczsgeyAgICAgICAgICAgICAgICAgLyogR2V0IHN5c3RlbS10eXBlIG5hbWUgKi8KKyAgICBp bnQgaTsKKyAgICBpZiAoIXMpIHJldHVybigiIik7CisgICAgZm9yIChpID0gMDsgaSA8IG54eHN5 c2lkczsgaSsrKQorICAgICAgaWYgKCFzdHJjbXAoc3lzaWRsaXN0W2ldLnNpZF9jb2RlLHMpKQor ICAgICAgICByZXR1cm4oc3lzaWRsaXN0W2ldLnNpZF9uYW1lKTsKKyAgICByZXR1cm4ocyk7Cit9 CisKK2ludAorZ2V0c3lzaXgocykgY2hhciAqczsgeyAgICAgICAgICAgICAgICAgIC8qIEdldCBz eXN0ZW0tdHlwZSBpbmRleCAqLworICAgIGludCBpOworICAgIGlmICghcykgcmV0dXJuKC0xKTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgbnh4c3lzaWRzOyBpKyspCisgICAgICBpZiAoIXN0cmNtcChz eXNpZGxpc3RbaV0uc2lkX2NvZGUscykpCisgICAgICAgIHJldHVybihpKTsKKyAgICByZXR1cm4o LTEpOworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisvKiBUZWxsIGlmIGEgcGF0aG5hbWUgaXMg YWJzb2x1dGUgKHZlcnN1cyByZWxhdGl2ZSkgKi8KKy8qIFRoaXMgc2hvdWxkIGJlIHBhcmNlbGVk IG91dCB0byBlYWNoIG9mIHRoZSBjaypmaW8uYyBtb2R1bGVzLi4uICovCisvKiBWTVMgaXNhYnNv bHV0ZSgpIGlzIG5vdyBpbiBja3ZmaW8uYy4gKi8KKyNpZm5kZWYgVk1TCitpbnQKK2lzYWJzb2x1 dGUocGF0aCkgY2hhciAqIHBhdGg7IHsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCB4OworICAg IGlmICghcGF0aCkKKyAgICAgIHJldHVybigwKTsKKyAgICBpZiAoISpwYXRoKQorICAgICAgcmV0 dXJuKDApOworICAgIHggPSAoaW50KSBzdHJsZW4ocGF0aCk7CisgICAgZGVidWcoRjExMSwiaXNh YnNvbHV0ZSIscGF0aCx4KTsKKyNpZmRlZiBVTklYCisgICAgaWYgKCpwYXRoID09ICcvJworI2lm ZGVmIERUSUxERQorICAgICAgICB8fCAqcGF0aCA9PSAnficKKyNlbmRpZiAvKiBEVElMREUgKi8K KyAgICAgICAgKQorICAgICAgcmMgPSAxOworI2Vsc2UgLyogZGVmIFVOSVggKi8KKyNpZmRlZiBP UzIKKyAgICBpZiAoKnBhdGggPT0gJy8nIHx8ICpwYXRoID09ICdcXCcpCisgICAgICByYyA9IDE7 CisgICAgZWxzZSBpZiAoaXNhbHBoYSgqcGF0aCkgJiYgeCA+IDIpCisgICAgICBpZiAoKihwYXRo KzEpID09ICc6JyAmJiAoKihwYXRoICsyKSA9PSAnLycgfHwgKihwYXRoKzIpID09ICdcXCcpKQor ICAgICAgICByYyA9IDE7CisjZWxzZSAvKiBkZWYgT1MyICovCisjaWZkZWYgQU1JR0EKKyAgICBp ZiAoKnBhdGggPT0gJy8nCisjaWZkZWYgRFRJTERFCisgICAgICAgIHx8ICpwYXRoID09ICd+Jwor I2VuZGlmIC8qIERUSUxERSAqLworICAgICAgICApCisgICAgICByYyA9IDE7CisjZWxzZSAvKiBk ZWYgQU1JR0EgKi8KKyNpZmRlZiBPU0sKKyAgICBpZiAoKnBhdGggPT0gJy8nCisjaWZkZWYgRFRJ TERFCisgICAgICAgIHx8ICpwYXRoID09ICd+JworI2VuZGlmIC8qIERUSUxERSAqLworICAgICAg ICApCisgICAgICByYyA9IDE7CisjZWxzZSAvKiBkZWYgT1NLICovCisjaWZkZWYgZGF0YWdlbmVy YWwKKyAgICBpZiAoKnBhdGggPT0gJzonKQorICAgICAgcmMgPSAxOworI2Vsc2UgLyogZGVmIGRh dGFnZW5lcmFsICovCisjaWZkZWYgTUFDCisgICAgcmMgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsbCBpbiBsYXRlci4uLiAqLworI2Vsc2UgLyogZGVmIE1BQyAqLworI2lm ZGVmIFNUUkFUVVMKKyAgICByYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxsIGluIGxhdGVyLi4uICovCisjZWxzZSAvKiBkZWYgU1RSQVRVUyAqLworI2lmZGVmIEdFTURP UworICAgIGlmICgqcGF0aCA9PSAnLycgfHwgKnBhdGggPT0gJ1xcJykKKyAgICAgIHJjID0gMTsK KyAgICBlbHNlIGlmIChpc2FscGhhKCpwYXRoKSAmJiB4ID4gMSkKKyAgICAgIGlmICgqKHBhdGgr MSkgPT0gJzonKQorICAgICAgICByYyA9IDE7CisjZW5kaWYgLyogR0VNRE9TICovCisjZW5kaWYg LyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICov CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBVTklYICovCisgICAgZGVidWcoRjEwMSwiaXNhYnNvbHV0ZSByYyIsIiIscmMp OworICAgIHJldHVybihyYyk7Cit9CisjZW5kaWYgLyogbmRlZiBWTVMgKi8KKworLyogIFNlZSBp ZiBJIGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUga2V5Ym9hcmQgICovCisKK2ludAoraXNfYV90 dHkobikgaW50IG47IHsKKyNpZmRlZiBVTklYCisgICAgZXh0ZXJuIGludCB0dGZkZmxnOworICAg IGlmICh0dGZkZmxnID4gMCkKKyAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBVTklYICovCisj aWZkZWYgS1VJCisgICAgcmV0dXJuIDE7CisjZWxzZSAvKiBLVUkgKi8KKyNpZmRlZiBOVAorICAg IGlmIChpc1dpbjk1KCkpCisgICAgICByZXR1cm4oMSk7CisgICAgZWxzZQorICAgICAgcmV0dXJu KF9pc2F0dHkobikpOworI2Vsc2UKKyNpZmRlZiBJS1NECisgICBpZiAoaW5zZXJ2ZXIpCisgICAg IHJldHVybigxKTsKKyAgIGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisgICAgIHJldHVybihpc2F0 dHkobikpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogS1VJICovCit9CisKKyNpZm5kZWYg Tk9YRkVSCitWT0lECitpbml0eGxpc3QoKSB7CisgICAgZXh0ZXJuIGNoYXIgKiBzbmRleGNlcHRb XSwgKiByY3ZleGNlcHRbXTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlNOREVY Q0VQVDsgaSsrKSB7CisJc25kZXhjZXB0W2ldID0gTlVMTDsKKwlyY3ZleGNlcHRbaV0gPSBOVUxM OworICAgIH0KK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworLyogSW5pdGlhbGl6ZSBmbG93IGNv bnRyb2wgdGFibGUgKi8KKworVk9JRAoraW5pdGZsb3coKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERlZmF1bHQgdmFsdWVzIGZvciBmbG93IGNvbnRyb2wgKi8KKyNpZmRlZiBWTVMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgZWFjaCBraW5kIG9mIGNvbm5lY3Rp b24uICovCisgICAgLyogVGhlIFZNUyB0ZWxuZXQgdGVybWluYWwgZHJpdmVyIHRyZWF0cyAibm9u ZSIgYXMgcmVxdWVzdCB0byBsb3NlIGNoYXJzICovCisgICAgY3hmbG93W0NYVF9SRU1PVEVdICA9 IEZMT19YT05YOyAgICAgLyogUmVtb3RlIG1vZGUuLi4gKi8KKyNlbHNlCisjaWZkZWYgSFBVWAor ICAgIC8qIERpdHRvIGZvciBIUC1VWCAqLworICAgIGN4Zmxvd1tDWFRfUkVNT1RFXSAgPSBGTE9f WE9OWDsgICAgIC8qIFJlbW90ZSBtb2RlLi4uICovCisjZWxzZQorICAgIC8qIFRoZSB0ZW1wdGF0 aW9uIGlzIHRvIG1ha2UgdGhpcyBvbmUgRkxPX0tFRVAgYnV0IGRvbid0ISEhICovCisgICAgLyog SXQgdG90YWxseSB3cmVja3MgYmluYXJ5LWZpbGUgdHJhbnNmZXIgd2hlbiBjb21pbmcgaW4gdmlh IFRlbG5ldC4gKi8KKyAgICAvKiBJbiBVTklYIGF0IGxlYXN0Li4uICovCisgICAgY3hmbG93W0NY VF9SRU1PVEVdICA9IEZMT19OT05FOworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKworI2lmZGVmIFZNUworICAgIGN4Zmxvd1tDWFRfRElSRUNUXSAgPSBGTE9fWE9OWDsgICAg IC8qIERpcmVjdCBzZXJpYWwgY29ubmVjdGlvbnMuLi4gKi8KKyNlbHNlCisgICAgY3hmbG93W0NY VF9ESVJFQ1RdICA9IEZMT19OT05FOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgQ0tfUlRT Q1RTCisgICAgY3hmbG93W0NYVF9NT0RFTV0gICA9IEZMT19SVFNDOyAgICAgLyogTW9kZW0gY29u bmVjdGlvbnMuLi4gKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgY3hmbG93W0NYVF9NT0RFTV0g ICA9IEZMT19YT05YOworI2Vsc2UKKyAgICBjeGZsb3dbQ1hUX01PREVNXSAgID0gRkxPX05PTkU7 CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ0tfUlRTQ1RTICovCisKKyNpZmRlZiBWTVMK KyAgICBjeGZsb3dbQ1hUX1RDUElQXSAgID0gRkxPX1hPTlg7ICAgICAvKiBUQ1AvSVAgY29ubmVj dGlvbnMuLi4gKi8KKyNlbHNlCisgICAgY3hmbG93W0NYVF9UQ1BJUF0gICA9IEZMT19OT05FOwor I2VuZGlmIC8qIFZNUyAqLworCisgICAgY3hmbG93W0NYVF9TU0hdICAgICA9IEZMT19OT05FOwor ICAgIGN4Zmxvd1tDWFRfWDI1XSAgICAgPSBGTE9fTk9ORTsgICAgIC8qIE90aGVyIGtpbmRzIG9m IG5ldHdvcmtzLi4uICovCisgICAgY3hmbG93W0NYVF9ERUNORVRdICA9IEZMT19YT05YOworICAg IGN4Zmxvd1tDWFRfTEFUXSAgICAgPSBGTE9fWE9OWDsKKyAgICBjeGZsb3dbQ1hUX05FVEJJT1Nd ID0gRkxPX05PTkU7CisgICAgY3hmbG93W0NYVF9OUElQRV0gICA9IEZMT19OT05FOworICAgIGN4 Zmxvd1tDWFRfUElQRV0gICAgPSBGTE9fTk9ORTsKKyAgICBmbG93ID0gY3hmbG93W2N4dHlwZV07 ICAgICAgICAgICAgICAvKiBJbml0aWFsIGZsb3cgc2V0dGluZy4gKi8KKyAgICBkZWJ1ZyhGMTAx LCJpbml0ZmxvdyIsIiIsZmxvdyk7Cit9CisKKyNpZm5kZWYgTk9YRkVSCisvKiBJbml0aWFsaXpl IGZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzICovCisKK1ZPSUQKK2luaXRwcm90byh5LCB1cGJzdHIs IHVwdHN0ciwgc3J2c3RyLCBzbmRic3RyLCBzbmR0c3RyLCByY3Zic3RyLCByY3Z0c3RyKQorICAg IGludCB5OworICAgIGNoYXIgKiB1cGJzdHIsICogdXB0c3RyLCAqIHNydnN0ciwgKiBzbmRic3Ry LCAqIHNuZHRzdHIsICogcmN2YnN0ciwKKyAgICAqIHJjdnRzdHI7CisvKiBpbml0cHJvdG8gKi8g eworCisgICAgaWYgKHVwYnN0cikgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBu dWxsIHN0cmluZ3MgKi8KKyAgICAgIGlmICghKnVwYnN0cikgICAgICAgICAgICAgICAgICAgICAv KiB0byBudWxsIHBvaW50ZXJzICovCisgICAgICAgIHVwYnN0ciA9IE5VTEw7CisKKyAgICBpZiAo dXB0c3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IG51bGwgc3RyaW5ncyAq LworICAgICAgaWYgKCEqdXB0c3RyKSAgICAgICAgICAgICAgICAgICAgIC8qIHRvIG51bGwgcG9p bnRlcnMgKi8KKyAgICAgICAgdXB0c3RyID0gTlVMTDsKKworICAgIGlmIChzbmRic3RyKQorICAg ICAgaWYgKCEqc25kYnN0cikKKyAgICAgICAgc25kYnN0ciA9IE5VTEw7CisKKyAgICBpZiAoc25k dHN0cikKKyAgICAgIGlmICghKnNuZHRzdHIpCisgICAgICAgIHNuZHRzdHIgPSBOVUxMOworCisg ICAgaWYgKHJjdmJzdHIpCisgICAgICBpZiAoISpyY3Zic3RyKQorICAgICAgICByY3Zic3RyID0g TlVMTDsKKworICAgIGlmIChyY3Z0c3RyKQorICAgICAgaWYgKCEqcmN2dHN0cikKKyAgICAgICAg cmN2dHN0ciA9IE5VTEw7CisKKyAgICBpZiAoc3J2c3RyKQorICAgICAgaWYgKCEqc3J2c3RyKQor ICAgICAgICBzcnZzdHIgPSBOVUxMOworCisgICAgcHJvdG9jb2wgPSB5OyAgICAgICAgICAgICAg ICAgICAgICAgLyogU2V0IHByb3RvY29sICovCisKKyAgICBpZiAocHRhYltwcm90b2NvbF0ucnBr dGxlbiA+IC0xKQorICAgICAgdXJwc2l6ID0gcHRhYltwcm90b2NvbF0ucnBrdGxlbjsKKyAgICBp ZiAocHRhYltwcm90b2NvbF0uc3BrdGZsZyA+IC0xKQorICAgICAgc3BzaXpmID0gcHRhYltwcm90 b2NvbF0uc3BrdGZsZzsKKyAgICBpZiAocHRhYltwcm90b2NvbF0uc3BrdGxlbiA+IC0xKSB7Cisg ICAgICAgIHNwc2l6ID0gcHRhYltwcm90b2NvbF0uc3BrdGxlbjsKKyAgICAgICAgZGVidWcoRjEw MSwiaW5pdHByb3RvIHNwc2l6IiwiIixzcHNpeik7CisgICAgICAgIGlmIChzcHNpemYpIHsKKyAg ICAgICAgICAgIHNwc2l6ciA9IHNwbWF4ID0gc3BzaXo7CisgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJpbml0cHJvdG8gc3BzaXpyIiwiIixzcHNpenIpOworICAgICAgICB9CisgICAgfQorICAgIGlm IChwdGFiW3Byb3RvY29sXS53aW5zaXplID4gLTEpCisgICAgICB3c2xvdHIgPSBwdGFiW3Byb3Rv Y29sXS53aW5zaXplOworICAgIGlmIChwdGFiW3Byb3RvY29sXS5wcmVmaXggPiAtMSkKKyAgICAg IHByZWZpeGluZyA9IHB0YWJbcHJvdG9jb2xdLnByZWZpeDsKKyAgICBpZiAocHRhYltwcm90b2Nv bF0uZm5jYSA+IC0xKQorICAgICAgZm5jYWN0ICA9IHB0YWJbcHJvdG9jb2xdLmZuY2E7CisgICAg aWYgKHB0YWJbcHJvdG9jb2xdLmZuY24gPiAtMSkKKyAgICAgIGZuY252ICAgPSBwdGFiW3Byb3Rv Y29sXS5mbmNuOworICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbnNwID4gLTEpCisgICAgICBmbnNw YXRoID0gcHRhYltwcm90b2NvbF0uZm5zcDsKKyAgICBpZiAocHRhYltwcm90b2NvbF0uZm5ycCA+ IC0xKQorICAgICAgZm5ycGF0aCA9IHB0YWJbcHJvdG9jb2xdLmZucnA7CisKKyAgICBtYWtlc3Ry KCYocHRhYltwcm90b2NvbF0uaF9iX2luaXQpLHVwYnN0cik7CisgICAgbWFrZXN0cigmKHB0YWJb cHJvdG9jb2xdLmhfdF9pbml0KSx1cHRzdHIpOworICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29s XS5oX3hfaW5pdCksc3J2c3RyKTsKKyAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF9iX3Nj bWQpLHNuZGJzdHIpOworICAgIG1ha2VzdHIoJihwdGFiW3Byb3RvY29sXS5wX3Rfc2NtZCksc25k dHN0cik7CisgICAgbWFrZXN0cigmKHB0YWJbcHJvdG9jb2xdLnBfYl9yY21kKSxyY3Zic3RyKTsK KyAgICBtYWtlc3RyKCYocHRhYltwcm90b2NvbF0ucF90X3JjbWQpLHJjdnRzdHIpOworfQorI2Vu ZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PQ01ETAorVk9JRAorI2lmZGVmIENLX0FOU0lD Citkb2NtZGxpbmUodm9pZCAqIHRocmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZG9j bWRsaW5lKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisjaWZkZWYgTlRTSUcKKyAgICBzZXRpbnQoKTsKKyAgICBpZiAodGhyZWFkaW5mbykg eyAgICAgICAgICAgICAgICAgICAvKiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAg IFRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAgICAgIGRlYnVnKCBGMTAwLCAi ZG9jbWRsaW5lIGNhbGxlZCB3aXRoIHRocmVhZGluZm8gYmxvY2siLCAiIiwgMCApOworICAgIH0g ZWxzZQorICAgICAgZGVidWcoIEYxMDAsICJkb2NtZGxpbmUgdGhyZWFkaW5mbyBpcyBOVUxMIiwi IiwwKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyNp ZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlm IC8qIElLU0QgKi8KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAg cHJvdG8oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFrZSBhbnkgcmVxdWVzdGVk IGFjdGlvbiwgdGhlbiAqLworICAgIGlmICghcXVpZXQpICAgICAgICAgICAgICAgICAgICAgICAg IC8qIHB1dCBjdXJzb3IgYmFjayBhdCBsZWZ0IG1hcmdpbiwgKi8KKyAgICAgIGNvbm9sbCgiIik7 CisjaWZuZGVmIE5PTE9DQUwKKyAgICBpZiAoY25mbGcpIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZS1jb25uZWN0IGlmIHJlcXVlc3RlZCAqLworICAgICAgICBjbmZsZyA9IDA7CisgICAg ICAgIGRvY29uZWN0KDAsMCk7CisgICAgICAgIGlmICh0dGNoaygpIDwgMCkKKyAgICAgICAgICBk b2xvZ2VuZCgpOworICAgIH0KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBOVFNJRwor ICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgcmV0 dXJuOworfQorCit2b2lkCitpa3Nsb2dpbigpIHsKKyAgICBpZiAoc3N0ZWxuZXQKKyNpZmRlZiBJ S1NECisgICAgICAgIHx8IGluc2VydmVyICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuZXQg c2VydmVyICovCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICApIHsKKyAgICAgICAgY2hhciAq czsKKyAgICAgICAgZXh0ZXJuIGludCBmZGlzcGxhOyAgICAgICAgICAgICAvKiBGaWxlLXRyYW5z ZmVyIGRpc3BsYXkgZm9ybWF0ICovCisgICAgICAgIGV4dGVybiBjaGFyICogaWtwcm9tcHQ7ICAg ICAgICAgLyogSUtTRCBwcm9tcHQgKi8KKworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgor ICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHhfbG9naW4gPSAxOyAgICAgICAg ICAgICAgICAvKiBMb2dpbiByZXF1aXJlZCAqLworICAgICAgICAgICAgeF9sb2dnZWQgPSAwOyAg ICAgICAgICAgICAgIC8qIE5vdCBsb2dnZWQgaW4geWV0ICovCisgICAgICAgICAgICBjbXNldHAo aWtwcm9tcHQpOyAgICAgICAgICAgLyogU2V0IHVwIElLU0QncyBwcm9tcHQgKi8KKyNpZm5kZWYg Tk9TRVJWRVIKKyAgICAgICAgICAgIGVuX21haSA9IDA7ICAgICAgICAgICAgICAgICAvKiBNQUlM IGlzIGRpc2FibGVkICovCisgICAgICAgICAgICBlbl93aG8gPSAwOyAgICAgICAgICAgICAgICAg LyogUkVNT1RFIFdITyBpcyBkaXNhYmxlZCAqLworICAgICAgICAgICAgZW5faG9zID0gMDsgICAg ICAgICAgICAgICAgIC8qIFJFTU9URSBIT1NUIGlzIGRpc2FibGVkICovCisgICAgICAgICAgICBl bl9wcmkgPSAwOyAgICAgICAgICAgICAgICAgLyogUFJJTlQgaXMgZGlzYWJsZWQgKi8KKyNlbmRp ZiAvKiBOT1NFUlZFUiAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeF9sb2dpbiA9 IDA7ICAgICAgICAgICAgICAgIC8qIExvZ2luIG5vdCByZXF1aXJlZCAqLworICAgICAgICAgICAg eF9sb2dnZWQgPSAxOyAgICAgICAgICAgICAgIC8qIEFscmVhZHkgbG9nZ2VkIGluICovCisgICAg ICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAg bm9sb2NhbCA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTElORS9IT1NUIG5vdCBhbGxv d2VkICovCisgICAgICAgIGZkaXNwbGEgPSBYWUZEX047ICAgICAgICAgICAgICAgLyogTm8gZmls ZS10cmFuc2ZlciBkaXNwbGF5ICovCisjaWZkZWYgTkVUQ09OTgorICAgICAgICBjbGllbnRob3N0 ID0gY2tnZXRwZWVyKCk7ICAgICAgIC8qIEdldCBjbGllbnQncyBob3N0bmFtZSAqLworICAgICAg ICBkZWJ1ZyhGMTEwLCJpa3Nsb2dpbiBjbGllbnRob3N0IixjbGllbnRob3N0LDApOworI2VuZGlm IC8qIE5FVENPTk4gKi8KKyAgICAgICAgenRpbWUoJnMpOyAgICAgICAgICAgICAgICAgICAgICAv KiBHZXQgY3VycmVudCBkYXRlIGFuZCB0aW1lICovCisKKyNpZmRlZiBDS19MT0dJTgorI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgIGlmICh4X2xvZ2luKSB7CisgICAgICAgICAgICB4 X2xvZ2dlZCA9IGNrX3RuX2F1dGhfdmFsaWQoKTsgLyogRGlkIFRlbG5ldCBBdXRoIHN1Y2NlZWQ/ ICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJpa3Nsb2dpbiIsInhfbG9nZ2VkIix4X2xvZ2dl ZCk7CisKKyNpZmRlZiBOVAorICAgICAgICAgICAgLyogT24gV2luZG93cyA5eCwgd2UgZG8gbm90 IGhhdmUgdGhlIGFiaWxpdHkgaW4gICovCisgICAgICAgICAgICAvKiB6dnVzZXIoKSBhdCBwcmVz ZW50IHRvIGRldGVybWluZSBpZiB0aGUgbmFtZSAgKi8KKyAgICAgICAgICAgIC8qIGFwcHJvdmVk IGluIGEgS2VyYmVyb3MgcHJpbmNpcGFsIGlzIHJlYWxseSBhICAqLworICAgICAgICAgICAgLyog YW4gYWNjb3VudCBpbiB0aGUgV2luZG93cyBBY2Nlc3MgQ29udHJvbCBMaXN0ICovCisgICAgICAg ICAgICBpZiAoaXNXaW45NSgpICYmIHhfbG9nZ2VkID09IEFVVEhfVkFMSUQKKyAgICAgICAgICAg ICAgICAgJiYgKGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSAhPSBBVVRIVFlQRV9OVExNKQorI2lmZGVm IENLX1NSUAorICAgICAgICAgICAgICAgICAmJiAoY2tfdG5fYXV0aGVudGljYXRlZCgpICE9IEFV VEhUWVBFX1NSUCkKKyNlbmRpZiAvKiBDS19TUlAgKi8KKyAgICAgICAgICAgICAgICAgKSB7Cisg ICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1VTRVIpOworICAgICAgICAgICAgICAg IHhfbG9nZ2VkID0gQVVUSF9VU0VSOworICAgICAgICAgICAgICAgIHByaW50ZigiV0FSTklORzpc clxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorIiBUaGUgVGVsbmV0IGF1dGhlbnRpY2F0 aW9uIG1ldGhvZCB1c2VkIGNhbm5vdCBwcm92aWRlIGZvciBhdXRvbWF0ZWRcclxuIik7CisgICAg ICAgICAgICAgICAgcHJpbnRmKAorIiBsb2dpbiB0byBXaW5kb3dzIDk1IG9yIFdpbmRvd3MgOTgu ICBBIHBhc3N3b3JkIG11c3QgYmUgZW50ZXJlZFxyXG4iKTsKKyAgICAgICAgICAgICAgICBwcmlu dGYoCisiIGxvY2FsbHkgdG8gdmFsaWRhdGUgeW91ciB1c2VyaWQuICBUZWxuZXQgYXV0aGVudGlj YXRpb24gKGFuZCBlbmNyeXB0aW9uKVxyXG4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgICAgICBwcmludGYoCisiIGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBob3N0IChhbmQg cHJvdGVjdCB0aGUgcHJpdmFjeSBvZiB5b3VyIHBhc3N3b3JkLilcCitcclxuIgorICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKworICAgICAgICAgICAg aWYgKHhfbG9nZ2VkID09IEFVVEhfVkFMSUQpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAg ICAgICBpZiAoKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCisgICAgICAg ICAgICAgICAgICAgICghVEVMT1BUX1UoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSB8fAorICAgICAg ICAgICAgICAgICAgICAgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX05VTEwgfHwK KyAgICAgICAgICAgICAgICAgICAgIGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9B VVRPKQorICAgICAgICAgICAgICAgICAgICApIHsKKyNpZmRlZiBTU0xfS1JCNQorICAgICAgICAg ICAgICAgICAgICBpZiAodGxzX2lzX2tyYjUoMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiQXV0aGVudGljYXRlZCB1c2luZyBLZXJiZXJvcyA1XHJcbiIpOworI2lmZGVmIENL U1lTTE9HCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0xJ ICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hh ciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAiQVVUSF9WQUxJRCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIDUiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAv KiBDS1NZU0xPRyAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBTU0xf S1JCNSAqLworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgWC41MDkgY2VydGlmaWNhdGVcclxuIik7CisjaWZk ZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfTEkgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVy biBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1ZBTElEIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiWC41MDkgY2VydGlmaWNhdGUiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5nICVzXHJc biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhUWVBFX05BTUUoY2tfdG5fYXV0 aGVudGljYXRlZCgpKSk7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWRbXTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1ZBTElEIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShja190bl9h dXRoZW50aWNhdGVkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVz ZXJOYW1lQXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHp2dXNlcih1aWRidWYpOworICAgICAgICAg ICAgICAgIGlmICh6dnBhc3MoIiIpID09IDApCisgICAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9 IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHhfbG9nZ2VkID09IEFVVEhfVVNFUiAmJiAhc3Ry Y21wKHVpZGJ1ZiwiYW5vbnltb3VzIikpIHsKKyAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBz elVzZXJOYW1lQXV0aGVudGljYXRlZFtdOworICAgICAgICAgICAgICAgIHp2dXNlcih1aWRidWYp OworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInN6VXNlck5hbWVBdXRoZW50aWNhdGVkIiwK KyAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZCwwKTsKKyAgICAg ICAgICAgICAgICBpZiAoenZwYXNzKHN6VXNlck5hbWVBdXRoZW50aWNhdGVkKSA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgICAvKiBBbm9ueW1vdXMgbG9naW4gZmFpbGVkLiAgRm9yY2UgYSB1c2Vy bmFtZSBwcm9tcHQuICovCisgICAgICAgICAgICAgICAgICB4X2xvZ2dlZCA9IDA7CisgICAgICAg ICAgICAgICAgICB1aWRidWZbMF0gPSAnXDAnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisj aWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgIGlmICgoc3NsX2FjdGl2ZV9mbGFnIHx8 IHRsc19hY3RpdmVfZmxhZykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICghVEVMT1BUX1Uo VEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGNrX3Ru X2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9OVUxMIHx8CisgICAgICAgICAgICAgICAgICAg ICAgICAgY2tfdG5fYXV0aGVudGljYXRlZCgpID09IEFVVEhUWVBFX0FVVE8pKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0ZWQgdXNpbmcgWC41MDkgY2VydGlm aWNhdGVcclxuIik7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm IChja3hzeXNsb2cgPj0gU1lTTEdfTEkgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDEsICJBVVRIX1VTRVIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYLjUwOSBjZXJ0aWZpY2F0 ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZUF1dGhl bnRpY2F0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJBdXRoZW50aWNhdGVkIHVzaW5n ICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1F KGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19MSSAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBja3N5c2xvZyhTWVNMR19MSSwgMSwgIkFVVEhfVVNFUiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGNrX3RuX2F1dGhlbnRpY2F0 ZWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1l QXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz ZSB7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX0xJICYmIGNreGxvZ2dpbmcgJiYKKyAgICAgICAgICAgICAgICAgICAgeF9sb2dnZWQgPT0g QVVUSF9VU0VSKSB7CisgICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVB dXRoZW50aWNhdGVkW107CisgICAgICAgICAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAx LCAiQVVUSF9VU0VSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFN RShja190bl9hdXRoZW50aWNhdGVkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz elVzZXJOYW1lQXV0aGVudGljYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAgICAgICAg IHhfbG9nZ2VkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcCgiKHVua25vd24pIix1 aWRidWYpCisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgICAgfHwgIXN0cmljbXAoImFkbWlu aXN0cmF0b3IiLHVpZGJ1ZikKKyNpZmRlZiBVTklYCisgICAgICAgICAgICAgICAgICAgIHx8ICFz dHJjbXAoInJvb3QiLHVpZGJ1ZikKKyNlbHNlCisjaWZkZWYgUGxhbjkKKyAgICAgICAgICAgICAg ICAgICAgfHwgIXN0cmNtcCgicm9vdCIsdWlkYnVmKQorI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICAg ICAgICAgICAgICAgICAgfHwgIXN0cmNtcCgicm9vdCIsdWlkYnVmKQorI2VuZGlmIC8qIE9TSyAq LworI2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE5UICov CisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgIHVpZGJ1ZlswXSA9ICdc MCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElP TiAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChp bnNlcnZlcikKKyAgICAgICAgICBwcmludGYoIlxyXG5JbnRlcm5ldCBLZXJtaXQgU2VydmljZSBy ZWFkeSBhdCAlcyVzXHJcbiIscyx2ZXJzaW8pOworICAgICAgICBlbHNlCisjZW5kaWYgLyogSUtT RCAqLworICAgICAgICAgIHByaW50ZigiXHJcbkMtS2VybWl0IHJlYWR5IGF0ICVzJXNcclxuIixz LHZlcnNpbyk7CisgICAgICAgIGlmICgqbXlob3N0KQorICAgICAgICAgIHByaW50ZigiJXNcclxu IiwgbXlob3N0KTsKKyAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAgfQorI2lmZGVmIENLX0xP R0lOCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICBpbnQgaTsKKyAg ICAgICAgZXh0ZXJuIGludCBhcmdfeDsgICAgICAgICAgICAgICAvKiBGbGFnIGZvciAnLXgnIG9u IGNvbW1hbmQgbGluZSAqLworI2lmbmRlZiBOT1NQTAorICAgICAgICBleHRlcm4gc3RydWN0IG10 YWIgKm1hY3RhYjsgICAgICAgICAvKiBGb3IgT05fTE9HSU4gbWFjcm8uICovCisgICAgICAgIGV4 dGVybiBpbnQgbm1hYzsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgICAgIGRlYnVnKEYxMTAs Ik1BSU4gY2xpZW50aG9zdCIsY2xpZW50aG9zdCwwKTsKKyAgICAgICAgc3J2aWRsID0gdGltZWxp bWl0ID0gbG9naW50aW1vOyAvKiBGb3IgaW50ZXJhY3RpdmUgbG9naW4gKi8KKyAgICAgICAgcnRp bWVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aW1lciAqLworICAgICAgICBm b3IgKGkgPSAwOyBpIDwgaWtzX3JldHJ5ICYmICF4X2xvZ2dlZDsgaSsrKSB7IC8qIENvdW50IHJl dHJpZXMgKi8KKyAgICAgICAgICAgIGlmIChndGltZXIoKSA+IGxvZ2ludGltbykKKyAgICAgICAg ICAgICAgYnJlYWs7CisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICB0bl93YWl0KCJsb2dpbiBs b29wIik7CisgICAgICAgICAgICB0bl9wdXNoKCk7CisjZW5kaWYgLyogVE5DT0RFICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJNQUlOIExPR0lOIHRyeSIsIiIsaSk7CisgICAgICAgICAgICB3 aGF0ID0gV19OT1RISU5HOyAgICAgICAgICAgLyogQmVjYXVzZSBwcm90bygpIGNoYW5nZXMgdGhp cyAqLworCisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAgICAgZGVidWcoRjExMSwiTUFJTiBM T0dJTiIsCisgICAgICAgICAgICAgICAgICAiVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1p dC5tZV9zdGFydCIsCisgICAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCku a2VybWl0Lm1lX3N0YXJ0CisgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgLyogS2Vy bWl0IHNlcnZlciBuZWdvdGlhdGVkICovCisgICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9Q VF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs IklLU0Qgc3RhcnRpbmcgaW4gc2VydmVyIG1vZGUiLCIiLDApOworICAgICAgICAgICAgICAgIGFy Z194ID0gMTsgICAgICAgICAgICAgIC8qIEVudGVyIHNlcnZlciBtb2RlICovCisgICAgICAgICAg ICAgICAgc3N0YXRlID0gJ3gnOworI2lmZGVmIElLU0RQT1BCQUNLCisgICAgICAgICAgICAgICAg anVzdG9uZSA9IDE7ICAgICAgICAgICAgLyogRXhlY3V0ZSBvbmUgY29tbWFuZCBhdCBhIHRpbWUu ICovCisjZW5kaWYgLyogSUtTRFBPUEJBQ0sgKi8KKyAgICAgICAgICAgICAgICBwcm90bygpOyAg ICAgICAgICAgICAgICAvKiBFbnRlciBwcm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCisjaWZkZWYg TlRTSUcKKyAgICAgICAgICAgICAgICBja19paCgpOworI2VuZGlmIC8qIE5UU0lHICovCisgICAg ICAgICAgICAgICAgaWYgKHhfbG9nZ2VkKSAgICAgICAgICAgLyogTG9nZ2VkIGluICovCisgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAvKiBOb3QgaW4gY2xpZW50L3NlcnZlciBtb2RlICovCisjZW5kaWYgLyogSUtTX09QVElP TiAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIklLU0Qgc3RhcnRpbmcgd2l0aCBVc2Vy bmFtZSBwcm9tcHQiLCIiLDApOworICAgICAgICAgICAgICAgIHhfbG9nZ2VkID0gY2t4bG9naW4o KENIQVIgKil1aWRidWYsTlVMTCxOVUxMLDEpOworICAgICAgICAgICAgICAgIGlmIChzc3RhdGUp IHsgICAgICAgICAgIC8qIFJlY2VpdmVkIGEgcGFja2V0IGF0IHByb21wdCAqLworI2lmZGVmIElL U0RQT1BCQUNLCisgICAgICAgICAgICAgICAgICAgIGp1c3RvbmUgPSAxOyAgICAgICAgLyogR28g aGFuZGxlIGl0ICovCisjZW5kaWYgLyogSUtTRFBPUEJBQ0sgKi8KKyAgICAgICAgICAgICAgICAg ICAgcHJvdG8oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCF4X2xv Z2dlZCkgeyAgICAgICAgLyogSW4gY2FzZSB3ZSBhcmUgYXQgdGhlIHByb21wdC4uLiAqLworICAg ICAgICAgICAgICAgICAgICBwcmludGYoIkFjY2VzcyBkZW5pZWQuXG4iKTsKKyAgICAgICAgICAg ICAgICAgICAgdWlkYnVmWzBdID0gJ1wwJzsgICAvKiBGb3JnZXQgdGhlIG5hbWUgaWYgd2UgaGF2 ZSBvbmUgKi8KKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAg ICAgfQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyAgICAgICAgfQorICAgICAgICBzcnZpZGwg PSB0aW1lbGltaXQgPSBpa3NfdGltbzsgIC8qIFJlc2V0IGNvbW1hbmQgdGltZWxpbWl0ICovCisg ICAgICAgIGRlYnVnKEYxMDEsIk1BSU4gTE9HSU4iLCIiLHhfbG9nZ2VkKTsKKyAgICAgICAgaWYg KCF4X2xvZ2dlZCkgeyAgICAgICAgICAgICAgICAvKiBMb2dpbnMgZmFpbGVkLiAqLworICAgICAg ICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpCisgICAg ICAgICAgICAgIGVycnBrdCgoQ0hBUiAqKSJMb2dpbiBUaW1lb3V0Iik7CisgICAgICAgICAgICBt c2xlZXAoNTAwKTsKKyAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwwKTsKKyAgICAgICAgfQor ICAgICAgICB3aGF0ID0gV19OT1RISU5HOyAgICAgICAgICAgICAgIC8qIFN0YXkgaW4ga25vd24g c3RhdGUgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAgICAgaWYgKGlzZ3Vlc3QpIHsKKyAgICAg ICAgICAgIGVuX3ByaSA9IDA7ICAgICAgICAgICAgICAgICAvKiBObyBwcmludGluZyBmb3IgYW5v bnltb3VzIHVzZXJzICovCisgICAgICAgICAgICBlbl9tYWkgPSAwOyAgICAgICAgICAgICAgICAg LyogTm8gZW1haWwgZm9yIGFub255bW91cyB1c2VycyAqLworICAgICAgICAgICAgZW5fbWtkID0g MDsgICAgICAgICAgICAgICAgIC8qIE9yIGRpcmVjdG9yeSBjcmVhdGlvbiAqLworICAgICAgICAg ICAgZW5fcm1kID0gMDsgICAgICAgICAgICAgICAgIC8qIE9yIGRpcmVjdG9yeSByZW1vdmFsICov CisgICAgICAgICAgICBlbl9lbmEgPSAwOyAgICAgICAgICAgICAgICAgLyogT3IgRU5BQkxpbmcg RElTQUJMRWQgaXRlbXMgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyNp Zm5kZWYgTk9TUEwKKy8qCisgIElmIGEgbWFjcm8gbmFtZWQgIm9uX2xvZ2luIiBpcyBkZWZpbmVk LCBleGVjdXRlIGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKKyAgbWFjcm8gdGFibGUgc28g dGhlIHVzZXIgY2Fubm90IHNlZSB3aGF0IGl0IGRvZXMuICBFeGVjdXRlIGl0IGFzIHBhcnQgb2Yg dGhlCisgIGlrc2QuY29uZiBmaWxlLgorKi8KKyAgICAgICAgaWYgKG5tYWMpIHsgICAgICAgICAg ICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCisgICAgICAgICAgICBpbnQgazsg ICAgICAgICAgICAgICAgICAgICAgLyogWWVzICovCisgICAgICAgICAgICBjaGFyICogY21kID0g Im9uX2xvZ2luIjsgICAgLyogTVNWQyAyLnggY29tcGlsZXIgZXJyb3IgKi8KKyAgICAgICAgICAg IGsgPSBtbG9vayhtYWN0YWIsY21kLG5tYWMpOyAvKiBMb29rIHVwICJvbl9sb2dpbiIgKi8KKyAg ICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyNp ZmRlZiBJS1NEQ09ORgorICAgICAgICAgICAgICAgIGludCBzYXZlZCA9IGlrc2RjZjsKKyAgICAg ICAgICAgICAgICBpa3NkY2YgPSAwOworI2VuZGlmIC8qIElLU0RDT05GICovCisgICAgICAgICAg ICAgICAgaWYgKGRvZG8oaywiIiwwKSA+IC0xKSAgLyogc2V0IGl0IHVwLCAqLworICAgICAgICAg ICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgIC8qIGV4ZWN1dGUgaXQgKi8KKyNpZmRlZiBJ S1NEQ09ORgorICAgICAgICAgICAgICAgIGlrc2RjZiA9IHNhdmVkOworI2VuZGlmIC8qIElLU0RD T05GICovCisgICAgICAgICAgICAgICAgZGVsbWFjKGNtZCwxKTsgICAgICAgICAgLyogYW5kIGRl bGV0ZSBpdCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8K KyAgICB9IC8qIGlmIChpbnNlcnZlcikgKi8KKyNlbHNlIC8qIENLX0xPR0lOICovCisgICAgaWYg KGluc2VydmVyKQorICAgICAgICBzcnZpZGwgPSB0aW1lbGltaXQgPSBpa3NfdGltbzsgIC8qIFNl dCBpZGxlIGxpbWl0cyBmb3IgSUtTICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAv KiBJS1NEICovCit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZmFpbGNtZGxpbmUodm9pZCAq IGZvbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitmYWlsY21kbGluZShmb28pIFZPSUQgKiBmb287 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBHRU1ET1MKKyAgICBjY19jbGVhbigp OworI2VuZGlmIC8qIEdFTURPUyAqLworI2lmbmRlZiBOT0xPQ0FMCisgICAgaWYgKGNuZmxnKSBk b2NvbmVjdCgwLDApOyAgICAgICAgICAgLyogY29ubmVjdCBhZ2FpbiBpZiByZXF1ZXN0ZWQuICov CisgICAgaWYgKHR0Y2hrKCkgPCAwKQorICAgICAgZG9sb2dlbmQoKTsKKyNlbmRpZiAvKiBOT0xP Q0FMICovCit9CisjZW5kaWYgLyogTk9DTURMICovCisKKyNpZm5kZWYgTk9JQ1AKK1ZPSUQKKyNp ZmRlZiBDS19BTlNJQworZG90YWtlaW5pKHZvaWQgKiB0aHJlYWRpbmZvKSAgICAgICAgICAgIC8q IEV4ZWN1dGUgaW5pdCBmaWxlLiAqLworI2Vsc2UgIC8qIENLX0FOU0lDICovCitkb3Rha2Vpbmko dGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87IC8qIEV4ZWN1dGUgaW5pdCBmaWxlLiAqLwor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb3Rha2VpbmkgKi8geworI2lmZGVmIE5UU0lHCisg ICAgc2V0aW50KCk7CisgICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAgICAgICAgICAgICAgLyog VGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0 aHJlYWRpbmZvKTsKKyAgICAgICBkZWJ1ZyhGMTAwLCAiZG90YWtlaW5pIGNhbGxlZCB3aXRoIHRo cmVhZGluZm8gYmxvY2siLCIiLCAwKTsKKyAgICB9IGVsc2UKKyAgICAgIGRlYnVnKEYxMDAsICJk b3Rha2VpbmkgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7CisjZW5kaWYgLyogTlRTSUcg Ki8KKyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIE5UCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNl cnZlcikKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyog TlQgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIGNtZGluaSgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNldHMgdGxldmVsICovCisKKyAgICBkZWJ1ZyhGMTExLCJkb3Rha2Vp bmkiLCJpbnNlcnZlciIsaW5zZXJ2ZXIpOworICAgIGRlYnVnKEYxMTEsImRvdGFrZWluaSIsInNz dGVsbmV0Iixzc3RlbG5ldCk7CisKKyNpZmRlZiBDT01NRU5UCisvKiBXcm9uZyBwbGFjZSBmb3Ig dGhpcy4uLiAqLworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19GQVNUCisgICAgZG9mYXN0KCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQnkgbm93IEZBU1QgZGVmYXVsdHMgc2hvdWxk IGJlIE9LICovCisjZW5kaWYgLyogQ0tfRkFTVCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGRvaW5pdCgpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vdyBkbyB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSAqLworICAgIGRlYnVnKEYxMDEs Im1haW4gZXhlY3V0aW5nIGluaXQgZmlsZSIsIiIsdGxldmVsKTsKKyAgICB3aGlsZSAodGxldmVs ID4gLTEpIHsKKyAgICAgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigxKTsgICAgICAvKiBFeGVj dXRlIG9uZSBjb21tYW5kIGF0IGEgdGltZS4gKi8KKyAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8o KTsgICAgICAgICAgICAvKiBFbnRlciBwcm90b2NvbCBpZiByZXF1ZXN0ZWQuICovCisjaWZkZWYg TlRTSUcKKyAgICAgICAgY2tfaWgoKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgIH0KKyAgICBk ZWJ1ZyhGMTAxLCJtYWluIGV4aXRzIGluaXQgZmlsZSIsIiIsdGxldmVsKTsKKworI2lmZGVmIE5U U0lHCisgICAgY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAg ICByZXR1cm47Cit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworZmFpbHRha2Vpbmkodm9pZCAq IHRocmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZmFpbHRha2VpbmkodGhyZWFkaW5m bykgVk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZhaWx0YWtl aW5pICovIHsKKyNpZmRlZiBHRU1ET1MKKyAgICBjY19jbGVhbigpOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBBdGFyaTogQ2xlYW4gdXAgYWZ0ZXIgXkMtdHJhcC4gKi8KKyNlbmRpZiAvKiBH RU1ET1MgKi8KKyAgICBmaXhjbWQoKTsKKyAgICBpZiAoIWNmaWxlZikgeworICAgICAgICBjb25v bGwoIkludGVycnVwdGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBvciBcCitjb21tYW5kLWxpbmUg cHJvY2Vzc2luZy4iKTsKKyAgICAgICAgY29ub2xsKCJDLUtlcm1pdCBxdWl0dGluZy4uLiIpOwor ICAgIH0KKyAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOyAgICAgICAgICAgICAgICAvKiBFeGl0IHdp dGggYmFkIHN0YXR1cy4gKi8KK30KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitkb2ljcCh2b2lk ICogdGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitkb2ljcCh0aHJlYWRpbmZvKSBW T0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9pY3AgKi8gewor I2lmZGVmIE5UU0lHCisgICAgc2V0aW50KCk7CisgICAgaWYgKHRocmVhZGluZm8pIHsgICAgICAg ICAgICAgICAgICAgLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKyAgICAgICBpZiAoIVRs c1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pKQorICAgICAgICAgIGRlYnVnKEYxMDEsImRv aWNwIFRsc1NldFZhbHVlIGZhaWxlZCIsIiIsR2V0TGFzdEVycm9yKCkpOworICAgICAgIGRlYnVn KEYxMDEsICJkb2ljcCBhIHRocmVhZGluZm8gYmxvY2sgLSBUbHNJbmRleCIsICIiLCBUbHNJbmRl eCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjEwMCwgImRvaWNwIHJlY2VpdmVkIGEg bnVsbCB0aHJlYWRpbmZvIiwgIiIsIDApOworICAgIH0KKyNlbmRpZiAvKiBOVFNJRyAqLworI2lm ZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKQor ICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIElLU0QgKi8KKyNlbmRpZiAvKiBOVCAqLwor I2VuZGlmIC8qIENLX0xPR0lOICovCisjaWZkZWYgTUFDCisgICAgd2hpbGUgKDEpIHsKKyAgICAg ICAgZXh0ZXJuIGNoYXIgKmxmaWxlczsgICAgICAgICAgICAvKiBGYWtlIHBvaW50ZXIgY2FzdCAq LworCisgICAgICAgIGlmIChjb25uZWN0ZWQpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsICJk b2ljcDogY2FsbGluZyBtYWNwYXJzZXIiLCAiIiwgMCk7CisgICAgICAgICAgICBzc3RhdGUgPSBu ZXdwYXJzZXIoMSwgMSwgMEwpOworCisgICAgICAgICAgICAvKiBpZ25vcmUgbnVsbCBjb21tYW5k IHN0YXRlICovCisgICAgICAgICAgICBpZiAoc3N0YXRlID09ICduJykKKyAgICAgICAgICAgICAg c3N0YXRlID0gJ1wwJzsKKworICAgICAgICAgICAgaWYgKHNzdGF0ZSkKKyAgICAgICAgICAgICAg cHJvdG8oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg KiBwcm9jZXNzIHRha2UgZmlsZXMgdGhlIGZpbmRlciBnYXZlIHVzLgorICAgICAgICAgICAgICov CisgICAgICAgICAgICBpZiAoKHRsZXZlbCA9PSAtMSkgJiYgbGZpbGVzKQorICAgICAgICAgICAg ICBzdGFydGxmaWxlKCk7CisKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsICJkb2ljcDogY2FsbGlu ZyBwYXJzZXIiLCAiIiwgMCk7CisgICAgICAgICAgICBzc3RhdGUgPSAoQ0hBUikgcGFyc2VyKDAp OworICAgICAgICAgICAgaWYgKHNzdGF0ZSA9PSAnYycpICAgICAgICAgIC8qIGlmIE1BQyBjb25u ZWN0ICovCisgICAgICAgICAgICAgIHNzdGF0ZSA9IDA7CisgICAgICAgICAgICBpZiAoc3N0YXRl KQorICAgICAgICAgICAgICBwcm90bygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UgLyogTm90 IE1BQyAqLworCisjaWZuZGVmIE5PU1BMCisvKgorICBJZiBpbnRlcmFjdGl2ZSBjb21tYW5kcyB3 ZXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgKHVzaW5nIHRoZQorICAtQyAiY29tbWFuZCwg Y29tbWFuZCwgLi4uIiBvcHRpb24pLCBhc3NpZ24gdGhlbSB0byBhIG1hY3JvIGNhbGxlZAorICAi Y2xfY29tbWFuZHMiLCB0aGVuIGV4ZWN1dGUgdGhlIG1hY3JvIGFuZCBsZWF2ZSBpdCBkZWZpbmVk IGZvcgorICBzdWJzZXF1ZW50IHJlLWV4ZWN1dGlvbiBpZiBkZXNpcmVkLgorKi8KKyAgICBpZiAo Y2xjbWRzKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgLUMgY29tbWFuZHMg Ki8KKyAgICAgICAgaW50IHg7CisgICAgICAgIHggPSBhZGRtYWMoImNsX2NvbW1hbmRzIixjbGNt ZHMpOyAvKiBQdXQgbWFjcm8gaW4gdGFibGUgKi8KKyAgICAgICAgaWYgKHggPiAtMSkgeyAgICAg ICAgICAgICAgICAgICAvKiBJZiBzdWNjZXNzZnVsLCAqLworICAgICAgICAgICAgZG9kbyh4LE5V TEwsQ0ZfQ01ETCk7ICAgICAgIC8qIHNldCB1cCBmb3IgbWFjcm8gZXhlY3V0aW9uICovCisgICAg ICAgICAgICB3aGlsZSAobWFjbHZsID4gLTEpIHsgICAgICAgLyogTG9vcCBnZXR0aW5nIG1hY3Jv IGNvbW1hbmRzLiAqLworICAgICAgICAgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMSk7 CisgICAgICAgICAgICAgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsgICAgLyogRW50ZXIgcHJvdG9j b2wgaWYgcmVxdWVzdGVkLiAqLworI2lmZGVmIE5UU0lHCisgICAgICAgICAgICAgICAgY2tfaWgo KTsKKyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGRlYnVnKEYxMDAsImRvaWNwIGNhbGxpbmcgaGVyYWxkIiwiIiwwKTsKKyAgICAgICAgaGVyYWxk KCk7CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgd2hpbGUoMSkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTG9vcCBnZXR0aW5nIGNvbW1hbmRzLiAqLworICAgICAgICBzc3Rh dGUgPSAoQ0hBUikgcGFyc2VyKDApOworICAgICAgICBpZiAoc3N0YXRlKSBwcm90bygpOyAgICAg ICAgICAgIC8qIEVudGVyIHByb3RvY29sIGlmIHJlcXVlc3RlZC4gKi8KKyNpZmRlZiBOVFNJRwor ICAgICAgIGNrX2loKCk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICB9CisjaWZkZWYgTlRTSUcK KyAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2VuZGlm IC8qIE1BQyAqLworfQorCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWxpY3Aodm9pZCAqIHRo cmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZmFpbGljcCh0aHJlYWRpbmZvKSBWT0lE ICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworI2lmZGVmIEdFTURPUwor ICAgIGNjX2NsZWFuKCk7CisjZW5kaWYgLyogR0VNRE9TICovCisgICAgZml4Y21kKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUG9wIGNvbW1hbmQgc3RhY2tzLCBldGMuICovCisgICAg Y2xjbWRzID0gTlVMTDsKKyAgICBkZWJ1ZyhGMTAwLCJja2NtYWkgZ290IGludGVycnVwdCIsIiIs MCk7Cit9CisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0lDUAorVk9JRAorI2lmZGVm IENLX0FOU0lDCitkb2NtZGZpbGUodm9pZCAqIHRocmVhZGluZm8pICAgICAgICAgICAgLyogRXhl Y3V0ZSBhcHBsaWNhdGlvbiBmaWxlICovCisjZWxzZSAvKiBDS19BTlNJQyAqLworZG9jbWRmaWxl KHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiBkb2NtZGZpbGUgKi8geworI2lmZGVmIE5UU0lHCisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsK KyAgICBzZXRpbnQoKTsKKyAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAgICAv KiBUaHJlYWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRl eCx0aHJlYWRpbmZvKTsKKyAgICAgICAgZGVidWcoRjEwMCwgImRvY21kZmlsZSBjYWxsZWQgd2l0 aCB0aHJlYWRpbmZvIGJsb2NrIiwiIiwgMCk7CisgICAgfSBlbHNlIGRlYnVnKEYxMDAsICJkb2Nt ZGZpbGUgLSB0aHJlYWRpbmZvIGlzIE5VTEwiLCAiIiwgMCk7CisjZW5kaWYgLyogTlRTSUcgKi8K KyNpZmRlZiBDS19MT0dJTgorI2lmZGVmIElLU0QKKyNpZmRlZiBOVAorICAgIGlmIChpbnNlcnZl cikKKyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIElLU0Qg Ki8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIGRlYnVnKEYxMTAsIm1haW4gY21kZmlsIixj bWRmaWwsMCk7CisjaWZuZGVmIE5PU1BMCisgICAgYWRkbWFjKCJcXCUwIixjbWRmaWwpOworI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgZG90YWtlKGNtZGZpbCk7CQkJLyogU2V0IHVwIHRoZSBjb21t YW5kIGZpbGUgKi8KKyAgICBpZiAodGxldmVsID4gLTEpCQkJLyogUmVtZW1iZXIgd2UgZGlkIHRo aXMgKi8KKyAgICAgIGNmaWxlZiA9IDE7CisgICAgd2hpbGUgKHRsZXZlbCA+IC0xKSB7ICAgICAg ICAgICAgICAgLyogRXhlY3V0ZSBpdCB1bnRpbCBpdCBydW5zIG91dC4gKi8KKyAgICAgICAgc3N0 YXRlID0gcGFyc2VyKDEpOyAgICAgICAgICAgICAvKiBMb29wIGdldHRpbmcgY29tbWFuZHMuICov CisgICAgICAgIGlmIChzc3RhdGUpIHByb3RvKCk7ICAgICAgICAgICAgLyogRW50ZXIgcHJvdG9j b2wgaWYgcmVxdWVzdGVkLiAqLworI2lmZGVmIE5UU0lHCisgICAgICAgIGNrX2loKCk7CisjZW5k aWYgLyogTlRTSUcgKi8KKyAgICB9CisKKyNpZmRlZiBOVFNJRworICAgIGNrVGhyZWFkRW5kKHRo cmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgcmV0dXJuOworfQorCitWT0lECisj aWZkZWYgQ0tfQU5TSUMKK2ZhaWxjbWRmaWxlKHZvaWQgKiB0aHJlYWRpbmZvKQorI2Vsc2UgLyog Q0tfQU5TSUMgKi8KK2ZhaWxjbWRmaWxlKHRocmVhZGluZm8pIFZPSUQgKiB0aHJlYWRpbmZvOwor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBmYWlsY21kZmlsZSAqLyB7CisjaWZkZWYgR0VNRE9T CisgICAgY2NfY2xlYW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXRhcmk6IENsZWFu IHVwIGFmdGVyIF5DLXRyYXAuICovCisjZW5kaWYgLyogR0VNRE9TICovCisgICAgZml4Y21kKCk7 CisgICAgaWYgKCFjZmlsZWYpIHsKKwljb25vbGwoIkludGVycnVwdGVkIGR1cmluZyBpbml0aWFs aXphdGlvbiBvciBcCitjb21tYW5kLWxpbmUgcHJvY2Vzc2luZy4iKTsKKwljb25vbGwoIkMtS2Vy bWl0IHF1aXR0aW5nLi4uIik7CisgICAgfQorICAgIGRvZXhpdChCQURfRVhJVCwtMSk7ICAgICAg ICAgICAgICAgIC8qIEV4aXQgd2l0aCBiYWQgc3RhdHVzLiAqLworfQorI2VuZGlmIC8qIE5PSUNQ ICovCisKKyNpZm5kZWYgTk9YRkVSCitWT0lECitzZXRwcmVmaXgoeikgaW50IHo7IHsgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbCBjb250cm9sLWNoYXIgcHJlZml4aW5nICovCisjaWZkZWYg Q0tfU1BFRUQKKyAgICBpbnQgaSwgdmFsOworCisgICAgcHJlZml4aW5nID0gejsKKyAgICBwdGFi W3Byb3RvY29sXS5wcmVmaXggPSBwcmVmaXhpbmc7CisgICAgZGVidWcoRjEwMSwic2V0cHJlZml4 IiwiIixwcmVmaXhpbmcpOworICAgIHN3aXRjaCAoeikgeworICAgICAgY2FzZSBQWF9BTEw6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEFsbCAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgLyog RG9uJ3QgbGV0IENsZWFyLUNoYW5uZWwgYmUgZGVwZW5kZW50IG9uIHByZWZpeGluZyAqLworICAg ICAgICBjbGVhcnJxID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGNsZWFyY2hh bm5lbCwgZmFsbCB0aHJ1ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgY2FzZSBQWF9O T046ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgKi8KKyAgICAgICAgdmFsID0gKHogPT0g UFhfQUxMKSA/IDEgOiAwOworICAgICAgICBmb3IgKGkgPQorI2lmZGVmIFVOUFJFRklYWkVSTwor ICAgICAgICAgICAgIDAKKyNlbHNlCisgICAgICAgICAgICAgMQorI2VuZGlmIC8qIFVOUFJFRklY WkVSTyAqLworICAgICAgICAgICAgIDsgaSA8IDMyOyBpKyspCisgICAgICAgICAgY3RscFtpXSA9 IHZhbDsKKyAgICAgICAgZm9yIChpID0gMTI3OyBpIDwgMTYwOyBpKyspIGN0bHBbaV0gPSB2YWw7 CisgICAgICAgIGN0bHBbKHVuc2lnbmVkKTI1NV0gPSB2YWw7CisgICAgICAgIGlmICh6ID09IFBY X05PTikgeyAgICAgICAgICAgICAgLyogVGhlc2UgYXJlIG5ldmVyIHNhZmUgKi8KKyAgICAgICAg ICAgIGlmIChuZXR3b3JrKSB7ICAgICAgICAgICAgICAvKiBBc3N1bWUgbmV0d29yayA9IHRlbG5l dCBvciBybG9naW4gKi8KKyAgICAgICAgICAgICAgICBjdGxwW0NSXSA9IDE7ICAgICAgICAgICAv KiBQcmVmaXggQ1IgYmVjYXVzZSBvZiBOVlQgcnVsZXMgKi8KKyAgICAgICAgICAgICAgICBjdGxw W1hPTl0gPSBjdGxwW1hPRkZdID0gMTsgLyogQmVjYXVzZSBvZiBUZWxuZXQgc2VydmVyICovCisg ICAgICAgICAgICAgICAgY3RscFsxMjddID0gY3RscFsyNTVdID0gMTsgIC8qIFRlbG5ldCBJQUMg Ki8KKyAgICAgICAgICAgICAgICBjdGxwW215c3RjaF0gPSBjdGxwW215c3RjaCsxMjhdID0gMTsg LyogS2VybWl0IHBhY2tldCBzdGFydCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICBjdGxwW0NSXSA9IGN0bHBbMjU1XSA9IGN0bHBbbXlzdGNoXSA9IGN0bHBbbXlzdGNo KzEyOF0gPSAxOworICAgICAgICAgICAgICAgIGlmIChmbG93ID09IEZMT19YT05YKSAgICAgICAv KiBYb24vWG9mZiBmb3JjZXMgcHJlZml4aW5nICovCisgICAgICAgICAgICAgICAgICBjdGxwW1hP Tl0gPSBjdGxwW1hPRkZdID0gY3RscFtYT04rMTI4XSA9IGN0bHBbWE9GRisxMjhdID0gMTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBQWF9D QVU6ICAgICAgICAgICAgICAgICAgICAgIC8qIENhdXRpb3VzIG9yIE1pbmltYWwgKi8KKyNpZmRl ZiBDT01NRU5UCisgICAgICAgIC8qIERvbid0IGxldCBDTEVBUi1DSEFOTkVMIGJlIGRlcGVuZGVu dCBvbiBQcmVmaXhpbmcgKi8KKyAgICAgICAgY2xlYXJycSA9IDA7ICAgICAgICAgICAgICAgICAg ICAvKiBUdXJuIG9mZiBjbGVhcmNoYW5uZWwgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAg ICBjYXNlIFBYX1dJTDogICAgICAgICAgICAgICAgICAgICAgLyogTWluaW1hbCAoIndpbGQiKSAq LworICAgICAgICBjdGxwWzBdID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGlu Y2x1ZGUgMCAqLworICAgICAgICBmb3IgKGkgPSAxOyBpIDwgMzI7IGkrKykKKyAgICAgICAgICBj dGxwW2ldID0gMDsKKyAgICAgICAgZm9yIChpID0gMTI3OyBpIDwgMTYwOyBpKyspCisgICAgICAg ICAgY3RscFtpXSA9IDA7CisgICAgICAgIGN0bHBbbXlzdGNoXSA9IGN0bHBbbXlzdGNoKzEyOF0g PSAxOyAvKiBLZXJtaXQgc3RhcnQgb2YgcGFja2V0ICovCisgICAgICAgIGlmIChzZW9sICE9IDEz KQorICAgICAgICAgIGN0bHBbc2VvbF0gPSBjdGxwW3Nlb2wrMTI4XSA9IDE7IC8qIEtlcm1pdCBl bmQgKi8KKyAgICAgICAgY3RscFsxM10gPSBjdGxwWzE0MV0gPSAxOyAgICAgICAvKiBJbiBjYXNl IG9mIFRFTE5FVCAoTlZUIHJ1bGVzKSAqLworICAgICAgICBjdGxwWyh1bnNpZ25lZCkyNTVdID0g MTsgICAgICAgIC8qIERpdHRvICovCisKKyAgICAgICAgLyogXkQsIF5KLCBeTSwgb3IgXlUgZm9s bG93ZWQgYnkgdGlsZGUgdHJpZ2dlciBSbG9naW4gZXNjYXBlICovCisKKyAgICAgICAgY3RscFs0 XSAgPSBjdGxwWzQrMTI4XSAgPSAxOyAgICAvKiBJbiBjYXNlIG9mIFJMT0dJTiAqLworICAgICAg ICBjdGxwWzEwXSA9IGN0bHBbMTArMTI4XSA9IDE7ICAgIC8qIEluIGNhc2Ugb2YgUkxPR0lOICov CisgICAgICAgIGN0bHBbMjFdID0gY3RscFsyMSsxMjhdID0gMTsgICAgLyogSW4gY2FzZSBvZiBS TE9HSU4gKi8KKworICAgICAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCB8fCAgICAgICAgIC8qIFhv bi9Yb2ZmIGZvcmNlcyBwcmVmaXhpbmcgdGhlc2UgKi8KKyAgICAgICAgICAgIHByZWZpeGluZyA9 PSBQWF9DQVUgfHwgICAgICAvKiBTbyBkb2VzIENBVVRJT1VTICovCisgICAgICAgICAgICBuZXR3 b3JrKSAgICAgICAgICAgICAgICAgICAgLyogTmV0d29ya3MgdG9vLi4uICovCisgICAgICAgICAg Y3RscFtYT05dID0gY3RscFtYT0ZGXSA9IGN0bHBbWE9OKzEyOF0gPSBjdGxwW1hPRkYrMTI4XSA9 IDE7CisgICAgICAgIGlmIChwcmVmaXhpbmcgPT0gUFhfQ0FVKSB7ICAgICAgLyogQ2F1dGlvdXMg LSBhZGQgc29tZSBtb3JlICovCisjaWZkZWYgVU5QUkVGSVhaRVJPCisgICAgICAgICAgICBjdGxw WzBdID0gMTsKKyNlbmRpZiAvKiBVTlBSRUZJWFpFUk8gKi8KKyAgICAgICAgICAgIGN0bHBbM10g ICA9IGN0bHBbMTZdICA9IDE7ICAgICAgICAgICAgIC8qIF5DLCBETEUgKi8KKyAgICAgICAgICAg IGN0bHBbMTRdICA9IGN0bHBbMTVdICA9IDE7ICAgICAgICAgICAgIC8qIFNPL1NJICovCisgICAg ICAgICAgICBjdGxwWzI0XSAgPSBjdGxwWzI1XSAgPSAxOyAgICAgICAgICAgICAvKiBWTVMgbWln aHQgbmVlZCB0aGVzZSAqLworICAgICAgICAgICAgY3RscFsyNl0gID0gY3RscFsyNisxMjhdID0g MTsgICAgICAgICAgLyogVU5JWCBzdXNwZW5kICovCisgICAgICAgICAgICBjdGxwWzI4XSAgPSBj dGxwWzI5XSAgPSBjdGxwWzMwXSAgPSAxOyAvKiBBc3NvcnRlZCBlc2MgY2hhcnMgKi8KKyAgICAg ICAgICAgIGN0bHBbMTMxXSA9IGN0bHBbMTQxXSA9IGN0bHBbMTQ0XSA9IDE7IC8qIGFuZCA4LWJp dCB2ZXJzaW9ucyAqLworICAgICAgICAgICAgY3RscFsodW5zaWduZWQpMjU1XSA9IGN0bHBbMTU2 XSA9IGN0bHBbMTU3XSA9IGN0bHBbMTU4XSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7 CisgICAgfQorI2VuZGlmIC8qIENLX1NQRUVEICovCit9CisjZW5kaWYgLyogTk9YRkVSICovCisK K1ZPSUQKK21ha2V2ZXIoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHZl cnNpb24gc3RyaW5nIGZyb20gcGllY2VzICovCisgICAgaW50IHgsIHk7CisgICAgY2hhciAqIHM7 CisjaWZuZGVmIE9TMgorI2lmbmRlZiBNQUMKKyAgICBja19zX3h2ZXIgPSBja19zX3ZlcjsgICAg ICAgICAgICAgICAvKiBGaWxsIGluIEMtS2VybWl0IHZlcnNpb24gbnVtYmVyICovCisgICAgY2tf bF94dmVyID0gY2tfbF92ZXI7ICAgICAgICAgICAgICAgLyogZm9yIFVOSVgsIFZNUywgZXRjLiAq LworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHggPSBzdHJsZW4oY2tf c19uYW1lKTsKKyAgICB5ID0gc3RybGVuKGNrX3NfeHZlcik7CisgICAgaWYgKHkgKyB4ICsgMSA8 IENLVkVSTEVOKSB7CisgICAgICAgIGNrbWFrbXNnKHZlcnNpbyxDS1ZFUkxFTixja19zX25hbWUs IiAiLGNrX3NfeHZlcixOVUxMKTsKKyAgICB9IGVsc2UgeworICAgICAgICBja3N0cm5jcHkodmVy c2lvLCJDLUtlcm1pdCIsQ0tWRVJMRU4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHgg Kz0geSArIDE7CisgIAorICAgIHMgPSAiIE9QRU4gU09VUkNFOiI7CQkvKiBDLUtlcm1pdCA5LjAg YW5kIGxhdGVyICovCisgICAgeSA9IHN0cmxlbihzKTsKKyAgICBpZiAoQ0tWRVJMRU4gPCB4ICsg eSArIDEpCisgICAgICByZXR1cm47CisgICAgY2tzdHJuY2F0KHZlcnNpbyxzLENLVkVSTEVOKTsK KworICAgIHggKz0geSArIDE7CisgICAgaWYgKCpja19zX3dobykgeworICAgICAgICB5ID0gc3Ry bGVuKGNrX3Nfd2hvKTsKKyAgICAgICAgaWYgKENLVkVSTEVOIDwgeCArIHkgKyAxKQorICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgY2tzdHJuY2F0KHZlcnNpbywiLSIsQ0tWRVJMRU4pOworICAg ICAgICBja3N0cm5jYXQodmVyc2lvLGNrX3Nfd2hvLENLVkVSTEVOKTsKKyAgICB9CisgICAgeCAr PSB5ICsgMTsKKyAgICB5ID0gc3RybGVuKGNrX3NfdGVzdCk7CisgICAgaWYgKHkgPiAwICYmIHkg KyB4ICsgMSA8IENLVkVSTEVOKSB7CisgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sIiAiLENLVkVS TEVOKTsKKyAgICAgICAgY2tzdHJuY2F0KHZlcnNpbyxja19zX3Rlc3QsQ0tWRVJMRU4pOworICAg ICAgICB4ICs9IHkgKyAxOworICAgICAgICB5ID0gc3RybGVuKGNrX3NfdHZlcik7CisgICAgICAg IGlmICh5ID4gMCAmJiB5ICsgeCArIDEgPCBDS1ZFUkxFTikgeworICAgICAgICAgICAgY2tzdHJu Y2F0KHZlcnNpbywiLiIsQ0tWRVJMRU4pOworICAgICAgICAgICAgY2tzdHJuY2F0KHZlcnNpbyxj a19zX3R2ZXIsQ0tWRVJMRU4pOworICAgICAgICAgICAgeCArPSB5ICsgMTsKKyAgICAgICAgfQor ICAgIH0KKyAgICB5ID0gc3RybGVuKGNrX3NfZGF0ZSk7CisgICAgaWYgKHkgPiAwICYmIHkgKyB4 ICsgMiA8IENLVkVSTEVOKSB7CisgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sIiwgIixDS1ZFUkxF Tik7CisgICAgICAgIGNrc3RybmNhdCh2ZXJzaW8sY2tfc19kYXRlLENLVkVSTEVOKTsKKyAgICB9 CisgICAgdmVybnVtID0gY2tfbF92ZXI7CisgICAgeHZlcm51bSA9IGNrX2xfeHZlcjsKKyAgICBk ZWJ1ZyhGMTEwLCJLZXJtaXQgdmVyc2lvbiIsdmVyc2lvLDApOworfQorCit1bmlvbiBja19zaG9y dCBzaG9ydGJ5dGVzOyAgICAgICAgICAgICAgLyogRm9yIGRldGVybWluaW5nIGJ5dGUgb3JkZXIg Ki8KK2ludCBieXRlb3JkZXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiAwID0gQmlnIEVu ZGlhbjsgMSA9IExpdHRsZSBFbmRpYW4gKi8KK2ludCBiaWdlbmRpYW4gPSAxOworLyogTk9URTog TVVTVCBCRSAwIG9yIDEgLSBub3RoaW5nIGVsc2UgKi8KKworI2lmbmRlZiBOT1NQTAorI2RlZmlu ZSBTQ1JJUFRMRU4gMTAyNDAKKyNlbmRpZgkvKiBOT1NQTCAqLworCisjaWZkZWYgTkVUQ09OTgor I2lmbmRlZiBOT0NNREwKKyNpZm5kZWYgTk9VUkwKK1ZPSUQKK2RvdXJsKCkgeworICAgIGludCBy YyA9IDA7CisgICAgY2hhciAqIHBvcnQgPSBOVUxMOworICAgIGV4dGVybiBpbnQgdHRucHJvdG87 CisgICAgZXh0ZXJuIHN0cnVjdCB1cmxkYXRhIGdfdXJsOworCisjaWZkZWYgQ09NTUVOVAorICAg IC8qIE5PVEU6IGRlYnVnKCkgZG9lc24ndCB3b3JrIHlldCAtIG11c3QgdXNlIHByaW50ZidzICov CisgICAgcHJpbnRmKCJVUkw6ICAlc1xuIixnX3VybC5zYXYgPyBnX3VybC5zYXYgOiAiKG5vbmUp Iik7CisgICAgcHJpbnRmKCJUeXBlOiAlc1xuIixnX3VybC5zdmMgPyBnX3VybC5zdmMgOiAiKG5v bmUpIik7CisgICAgcHJpbnRmKCJVc2VyOiAlc1xuIixnX3VybC51c3IgPyBnX3VybC51c3IgOiAi KG5vbmUpIik7CisgICAgcHJpbnRmKCJQYXNzOiAlc1xuIixnX3VybC5wc3cgPyBnX3VybC5wc3cg OiAiKG5vbmUpIik7CisgICAgcHJpbnRmKCJIb3N0OiAlc1xuIixnX3VybC5ob3MgPyBnX3VybC5o b3MgOiAiKG5vbmUpIik7CisvKiAgcHJpbnRmKCJQb3J0OiAlc1xuIixnX3VybC5wb3IgPyBnX3Vy bC5wb3IgOiAiKG5vbmUpIik7ICovCisgICAgcHJpbnRmKCJQYXRoOiAlc1xuIixnX3VybC5wdGgg PyBnX3VybC5wdGggOiAiKG5vbmUpIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYg KCFja3N0cmNtcChnX3VybC5zdmMsImlrc2QiLC0xLDApIHx8CisgICAgICAgICFja3N0cmNtcChn X3VybC5zdmMsImtlcm1pdCIsLTEsMCkpIHsKKyAgICAgICAgZXh0ZXJuIGNoYXIgcHdidWZbXTsK KyAgICAgICAgZXh0ZXJuIGludCBwd2ZsZzsKKyNpZmRlZiBPUzIKKyAgICAgICAgZXh0ZXJuIGlu dCBwd2NyeXB0OworI2VuZGlmIC8qIE9TMiAqLworCisgICAgICAgIGlmICghZ191cmwuaG9zKSB7 CisgICAgICAgICAgICBwcmludGYoIj9JbmNvbXBsZXRlIElLU0QgVVJMXG4iKTsKKyAgICAgICAg ICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdfdXJsLnVz cikKKyAgICAgICAgICAgIG1ha2VzdHIoJmdfdXJsLnVzciwiYW5vbnltb3VzIik7CisgICAgICAg IGlmICghZ191cmwucHN3KSB7CisgICAgICAgICAgICBjaGFyICogdG1wYnVmID0gTlVMTDsKKyAg ICAgICAgICAgIGlmICghKHRtcGJ1ZiA9IChjaGFyICopbWFsbG9jKDEwMjQpKSkKKyAgICAgICAg ICAgICAgICBmYXRhbCgiZG91cmw6IG91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIGlmICgh Y2tzdHJjbXAoZ191cmwudXNyLCJhbm9ueW1vdXMiLC0xLDApKSB7CisgICAgICAgICAgICAgICAg Y2ttYWttc2codG1wYnVmLDEwMjQsdWlkYnVmLCJAIixteWhvc3QsTlVMTCk7CisgICAgICAgICAg ICAgICAgbWFrZXN0cigmZ191cmwucHN3LHRtcGJ1Zik7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIHJlYWRwYXNzKCIgUGFzc3dvcmQ6Iix0bXBidWYsMTAyNCk7CisgICAg ICAgICAgICAgICAgbWFrZXN0cigmZ191cmwucHN3LHRtcGJ1Zik7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBmcmVlKHRtcGJ1Zik7CisgICAgICAgIH0KKyAgICAgICAgcG9ydCA9ICJrZXJt aXQiOworICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsKKyAgICAgICAgbmV0dHlwZSA9IE5F VF9UQ1BCOworICAgICAgICBtZG10eXAgPSAtbmV0dHlwZTsKKyAgICAgICAgbG9jYWwgPSAtMTsK KyAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZixnX3VybC51c3IsVUlEQlVGTEVOKTsKKyAgICAgICAg aWYgKGdfdXJsLnBzdykgeworICAgICAgICAgICAgY2tzdHJuY3B5KHB3YnVmLGdfdXJsLnBzdyxQ V0JVRkwpOworICAgICAgICAgICAgcHdmbGcgPSAxOworI2lmZGVmIE9TMgorICAgICAgICAgICAg cHdjcnlwdCA9IDA7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIH0KKyAgICAgICAgY2ttYWtt c2codHRuYW1lLAorICAgICAgICAgICAgICAgICBUVE5BTUxFTiwKKyAgICAgICAgICAgICAgICAg Z191cmwuaG9zLAorICAgICAgICAgICAgICAgICAiOiIsCisgICAgICAgICAgICAgICAgIGdfdXJs LnBvciA/IGdfdXJsLnBvciA6IHBvcnQsCisgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgcmMgPSB0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCk7 CisgICAgICAgIGlmIChyYyA+IC0xKSB7CisgICAgICAgICAgICBuZXR3b3JrID0gMTsKKyAgICAg ICAgICAgIGV4aXRvbmNsb3NlID0gMTsKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICAgICAgICAgIGRv bG9nbmV0KCk7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBwcmludGYoIj9Db25uZWN0aW9uIGZhaWxlZDogJXNcbiIsZ191cmwuc2F2KTsKKyAg ICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgfQorICAgICAgICAvKiBBbHNv IG5lZWQgdG8gY2hlY2sgaGVyZSBmb3Igc2VjdXJlIGF1dGhlbnRpY2F0aW9uIGFscmVhZHkgZG9u ZSAqLworCisjaWZkZWYgTk9TUEwKKyAgICAgICAgY2ZsZyA9IDE7CisjZWxzZQorCXsKKyAgICAg ICAgICAgIGNoYXIgKiBzY3JpcHQgPSBOVUxMOworICAgICAgICAgICAgaWYgKCEoc2NyaXB0ID0g KGNoYXIgKiltYWxsb2MoU0NSSVBUTEVOKSkpCisgICAgICAgICAgICAgIGZhdGFsKCJkb3VybDog b3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgaWYgKCFnX3VybC5wdGgpIHsgICAgICAgICAg IC8qIFdyaXRlIHRoZSBhcHByb3ByaWF0ZSBzY3JpcHQgKi8KKwkJY2ZsZyA9IDE7CisgICAgICAg ICAgICAgICAgY2ttYWt4bXNnKHNjcmlwdCxTQ1JJUFRMRU4sCisJCQkgICJpZiBub3QgZXEge1xc dihhdXRoc3RhdGUpfSB7dXNlcn0gIiwKKwkJCSAgImlmIG5vdCBlcSB7XFx2KGF1dGhzdGF0ZSl9 IHt2YWxpZH0geyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3RlIGxvZ2luICIs IC8qIE5vIHBhdGggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ191cmwudXNyLCAgICAg ICAvKiBKdXN0IGxvZyBpbiBhbmQgQ09OTkVDVCAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAiICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdXJsLnBzdywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIiwgaWYgZmFpbCBleGl0IDEge0lLU0QgbG9naW4gZmFpbGVkfSB9IiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgY29ubmVjdCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwpOworCQkvKiBwcmludGYoIkNMQ01EUyAxOiAl c1xuIixzY3JpcHQpOyAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv KiBkb2VzIHRoZSBwYXRoIHNwZWNpZnkgYSBmaWxlIG9yIGEgZGlyZWN0b3J5PyAqLworICAgICAg ICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oZ191cmwucHRoKTsKKyAgICAgICAgICAgICAgICBp ZiAoSVNESVJTRVAoZ191cmwucHRoW2xlbi0xXSkpIHsKKwkJICAgIGNrbWFreG1zZyhzY3JpcHQs U0NSSVBUTEVOLCAvKiBEaXJlY3RvcnkgbmFtZSBnaXZlbiAqLworCQkJICAgICAgImlmIG5vdCBl cSB7XFx2KGF1dGhzdGF0ZSl9IHt1c2VyfSBcCitpZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7 dmFsaWR9IHsgcmVtb3RlIGxvZ2luICIsCisJCQkgICAgICBnX3VybC51c3IsCisJCQkgICAgICAi ICIsCisJCQkgICAgICBnX3VybC5wc3csCisJCQkgICAgICAiLCBpZiBmYWlsIGV4aXQgMSB7SUtT RCBsb2dpbiBmYWlsZWR9IH0iLAorCQkJICAgICAgIiwgc2V0IG1hY3JvIGVycm9yIG9uIiwKKwkJ CSAgICAgICIsIHNldCB4ZmVyIGRpc3BsIGJyaWVmIiwKKwkJCSAgICAgICIsIHNldCB4ZmVyIGJl bGwgb2ZmIiwKKwkJCSAgICAgICIsIHJlbW90ZSBjZCAiLAorCQkJICAgICAgZ191cmwucHRoLAor CQkJICAgICAgIiwgbGluZW91dCBkaXJlY3RvcnkiLAorCQkJICAgICAgIiwgY29ubmVjdCIKKwkJ CSAgICAgICk7CisJCSAgICAvKiBwcmludGYoIkNMQ01EUyAyOiAlc1xuIixzY3JpcHQpOyAqLwor CQl9IGVsc2UgeworCQkgICAgY2ttYWt4bXNnKHNjcmlwdCxTQ1JJUFRMRU4sIC8qIFBhdGggZ2l2 ZW4sIHRyeSB0byBHRVQgKi8KKwkJCSAgICAgICJpZiBub3QgZXEge1xcdihhdXRoc3RhdGUpfSB7 dXNlcn0gXAoraWYgbm90IGVxIHtcXHYoYXV0aHN0YXRlKX0ge3ZhbGlkfSB7IHJlbW90ZSBsb2dp biAiLAorCQkJICAgICAgZ191cmwudXNyLAorCQkJICAgICAgIiAiLAorCQkJICAgICAgZ191cmwu cHN3LAorCQkJICAgICAgIiwgaWYgZmFpbCBleGl0IDEge0lLU0QgbG9naW4gZmFpbGVkfSB9IiwK KwkJCSAgICAgICIsIHNldCB4ZmVyIGRpc3BsIGJyaWVmIiwKKwkJCSAgICAgICIsIHNldCB4ZmVy IGJlbGwgb2ZmIiwKKwkJCSAgICAgICIsIGdldCAiLAorCQkJICAgICAgZ191cmwucHRoLAorCQkJ ICAgICAgIiwgLnJjIDo9IFxcdihzdGF0dXMpIiwKKwkJCSAgICAgICIsIGlmIG9wZW4gY29ubmVj dGlvbiBieWUiLAorCQkJICAgICAgIiwgZXhpdCBcXG0ocmMpIgorCQkJICAgICAgKTsKKwkJICAg IC8qIHByaW50ZigiQ0xDTURTIDI6ICVzXG4iLHNjcmlwdCk7ICovCisJCX0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGNsY21kcyA9IHNjcmlwdDsJCS8qIE1ha2UgdGhpcyBvdXIgLUMgY21k bGluZSBtYWNybyAqLworCSAgICAvKiBwcmludGYoIkhBVkVVUkw9JWRcbiIsaGF2ZXVybCk7ICov CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGlm IChja3N0cmNtcChnX3VybC5zdmMsInRlbG5ldCIsLTEsMCkgJiYKKyNpZmRlZiBTU0hCVUlMVElO CisgICAgICAgICAgICBja3N0cmNtcChnX3VybC5zdmMsInNzaCIsLTEsMCkgJiYKKyNlbmRpZiAv KiBTU0hCVUlMVElOICovCisgICAgICAgICAgICBja3N0cmNtcChnX3VybC5zdmMsImZ0cCIsLTEs MCkpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCAlcyBVUkxzIG5vdCBzdXBwb3J0ZWRc biIsCisgICAgICAgICAgICAgICAgICAgZ191cmwuc3ZjID8gZ191cmwuc3ZjIDogIiIpOworICAg ICAgICAgICAgZG9leGl0KEJBRF9FWElULDEpOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlm IC8qIE5PQ01ETCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNlbmRpZiAvKiBOT1VSTCAqLwor CisvKgorICBtYWluKCkuLi4KKworICBJZiB5b3UgZ2V0IGNvbXBsYWludHMgYWJvdXQgIm1haW46 IHJldHVybiB0eXBlIGlzIG5vdCBibGFoIiwKKyAgZGVmaW5lIE1BSU5UWVBFIG9uIHRoZSBDQyBj b21tYW5kIGxpbmUsIGUuZy4gIkNGTEFHUz0tRE1BSU5UWVBFPWJsYWgiCisgICh3aGVyZSAiYmxh aCIgaXMgaW50LCBsb25nLCBvciB3aGF0ZXZlcikuCisKKyAgSWYgdGhlIGNvbXBsYWludCBpcyAi QXR0ZW1wdCB0byByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgZnVuY3Rpb24gb2YgdHlwZSB2b2lkIgor ICB0aGVuIGFkZCAtRE1BSU5JU1ZPSUQuCisqLworI2lmbmRlZiBNQUlOVFlQRQorI2lmbmRlZiBN QUlOSVNWT0lECisjZGVmaW5lIE1BSU5UWVBFIGludAorI2VuZGlmIC8qIE1BSU5JU1ZPSUQgKi8K KyNlbmRpZiAvKiBNQUlOVFlQRSAqLworCisjaWZkZWYgTUFJTklTVk9JRAorI2lmbmRlZiBNQUlO VFlQRQorI2RlZmluZSBNQUlOVFlQRSB2b2lkCisjZW5kaWYgLyogTUFJTlRZUEUgKi8KKyNlbmRp ZiAvKiBNQUlOSVNWT0lEICovCisKKyNpZmRlZiBhZWdpcworLyogT24gdGhlIEFwb2xsbywgaW50 ZXJjZXB0IG1haW4gdG8gaW5zZXJ0IGEgY2xlYW51cCBoYW5kbGVyICovCitpbnQKK2NrY21haShh cmdjLGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKKyNlbHNlCisjaWZkZWYgTUFDICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFjaW50b3NoICovCitpbnQKK21haW4gKHZvaWQp CisjZWxzZQorI2lmZGVmIF9fR05VQ19fICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdDQyBj b21waWxlciAqLworaW50CittYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIgKiphcmd2Owor I2Vsc2UKKyNpZmRlZiBfX0RFQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUMgQWxw aGEgd2l0aCBERUMgQyBjb21waWxlciAqLworI2lmZGVmIF9fQUxQSEEKK2ludAorbWFpbihhcmdj LGFyZ3YpIGludCBhcmdjOyBjaGFyICoqYXJndjsKKyNlbHNlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBERUMgQyBjb21waWxlciwgbm90IEFscGhhICovCisjZGVmaW5lIE1B SU5JU1ZPSUQKK1ZPSUQKK21haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7Cisj ZW5kaWYgIC8qIF9fQUxQSEEgKi8KKyNlbHNlCisjaWZkZWYgU1RSQVRVUyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU3RyYXR1cyBWT1MgKi8KK2ludAorbWFpbihhcmdjLGFyZ3YpIGludCBh cmdjOyBjaGFyICoqYXJndjsKKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBLLTk1ICovCisjaWZkZWYgT1MyCisjaWZkZWYgS1VJCisjZGVmaW5lIE1BSU5JU1ZPSUQK K3ZvaWQKK01haW4oIGludCBhcmdjLCBjaGFyICoqIGFyZ3YgKQorI2Vsc2UgLyogS1VJICovCisj ZGVmaW5lIE1BSU5JU1ZPSUQKK1ZPSUQKK21haW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAq KmFyZ3Y7CisjZW5kaWYgLyogS1VJICovCisjZWxzZSAgLyogTm90IEs5NSAqLworTUFJTlRZUEUg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBvdGhlcnMuLi4gKi8KK21haW4o YXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7CisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIF9fREVDQyAqLworI2VuZGlmIC8qIF9fR05VQ19f ICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogYWVnaXMgKi8KKworLyogbWFpbiAqLyB7 CisKKyAgICBjaGFyICpwOworCisjaWZuZGVmIE5PU0VUS0VZCisgICAgaW50IGk7CisjZW5kaWYg LyogTk9TRVRLRVkgKi8KKworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgc2hvcnQgKnBmaGEgPSAw MTYwMDAwMDAwMzY7ICAgICAgICAgLyogR2V0IGFyb3VuZCBMQU5HX1JUIHByb2JsZW0gKi8KKyAg ICAqcGZoYSA9IChzaG9ydCkgMDsgICAgICAgICAgICAgICAgICAvKiBObyB1c2VyIHByb3RlY3Rp b24gZmF1bHQgaGFuZGxlciAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyAgICBpbnQg dW5idWYgPSAwOwkJCS8qIG5vbnplcm8gZm9yIHVuYnVmZmVyZWQgc3Rkb3V0ICovCisKKy8qIHNl dGJ1ZiBoYXMgdG8gYmUgY2FsbGVkIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IgYmVmb3JlIGl0IGlz IHVzZWQgKi8KKworI2lmZGVmIFVOSVgKKyNpZmRlZiBOT05PU0VUQlVGCQkJLyogVW5idWZmZXJl ZCBjb25zb2xlIGkvbyAqLworICAgIHVuYnVmKys7CQkJCS8qIGFzIGEgY29tcGlsZS10aW1lIG9w dGlvbiAqLworI2VuZGlmCS8qIE5PTk9TRVRCVUYgKi8KKyAgICBpZiAoIXVuYnVmKSB7CQkJLyog T3IgYXMgYSBjb21tYW5kLWxpbmUgc2VsZWN0aW9uICovCisJaW50IGksIG47CQkJLyogV2UgaGF2 ZSB0byBwcmUtcHJlLXNjYW4gZm9yICovCisJY2hhciAqIHM7CQkJLyogdGhpcyBvbmUuICovCisJ Zm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCSAgICBzID0gYXJndltpXTsKKwkgICAgaWYg KCFzKSBuID0gMDsgZWxzZSBuID0gKGludClzdHJsZW4ocyk7CisJICAgIGlmIChuID4gNCkgewor CQlpZiAoIWNrc3RyY21wKCItLXVuYnVmZmVyZWQiLHMsbiwwKSkgeworCQkgICAgdW5idWYrKzsK KwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmICh1bmJ1ZikKKyAg ICAgIHNldGJ1ZihzdGRvdXQsTlVMTCk7CisjZW5kaWYJLyogVU5JWCAqLworCisvKiBEbyBzb21l IGluaXRpYWxpemF0aW9uICovCisKKyNpZmRlZiBWTVMKKyNpZmRlZiBfX0RFQ0MKKyAgICAvKiBH ZXQgc29tZSBSTVMgZGVmYXVsdCBzZXR0aW5ncy4gKi8KKyAgICBnZXRfcm1zX2RlZmF1bHRzKCk7 CisjZW5kaWYgLyogZGVmIF9fREVDQyAqLworI2VuZGlmIC8qIGRlZiBWTVMgKi8KKworI2lmbmRl ZiBNQUMKKyAgICB4YXJnYyA9IHhhcmdzID0gYXJnYzsgICAgICAgICAgICAgICAvKiBNYWtlIGds b2JhbCBjb3BpZXMgb2YgYXJnYyAqLworICAgIHhhcmd2ID0gYXJndjsgICAgICAgICAgICAgICAg ICAgICAgIC8qIC4uLmFuZCBhcmd2LiAqLworICAgIHhhcmcwID0gYXJndlswXTsKKyNpZmRlZiBO VAorICAgIHNldE9TVmVyKCk7CisjZW5kaWYgLyogTlQgKi8KKyAgICB6c3RyaXAoYXJndlswXSwm cCk7ICAgICAgICAgICAgICAgICAvKiBHZXQgbmFtZSB3ZSB3ZXJlIGludm9rZWQgd2l0aCAqLwor ICAgIG1ha2VzdHIoJm15bmFtZSxwKTsKKyAgICBpZiAoIWNrc3RyY21wKG15bmFtZSwidGVsbmV0 IiwtMSwwKSkgICAgICAgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7CisjaWZkZWYgQ0tfS0VSQkVS T1MKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXluYW1lLCJrdGVsbmV0IiwtMSwwKSkgaG93Y2Fs bGVkID0gSV9BTV9URUxORVQ7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICBlbHNlIGlm ICghY2tzdHJjbXAobXluYW1lLCJybG9naW4iLC0xLDApKSAgaG93Y2FsbGVkID0gSV9BTV9STE9H SU47CisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwiaWtzZCIsLTEsMCkpICAgIGhvd2Nh bGxlZCA9IElfQU1fSUtTRDsKKyNpZmRlZiBORVdGVFAKKyAgICBlbHNlIGlmICghY2tzdHJjbXAo bXluYW1lLCJmdHAiLC0xLDApKSAgICAgaG93Y2FsbGVkID0gSV9BTV9GVFA7CisjZW5kaWYgLyog TkVXRlRQICovCisjaWZuZGVmIE5PSFRUUAorICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUs Imh0dHAiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FNX0hUVFA7CisjZW5kaWYgLyogTk9IVFRQ ICovCisjaWZkZWYgT1MyCisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwidGVsbmV0LmV4 ZSIsLTEsMCkpICBob3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKKyNpZmRlZiBTU0hCVUlMVElOCisg ICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwic3NoIiwtMSwwKSkgIGhvd2NhbGxlZCA9IElf QU1fU1NIOworICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInNzaC5leGUiLC0xLDApKSAg aG93Y2FsbGVkID0gSV9BTV9TU0g7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIENL X0tFUkJFUk9TCisgICAgZWxzZSBpZiAoIWNrc3RyY21wKG15bmFtZSwia3RlbG5ldC5leGUiLC0x LDApKSBob3djYWxsZWQgPSBJX0FNX1RFTE5FVDsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwor ICAgIGVsc2UgaWYgKCFja3N0cmNtcChteW5hbWUsInJsb2dpbi5leGUiLC0xLDApKSAgaG93Y2Fs bGVkID0gSV9BTV9STE9HSU47CisjaWZkZWYgTlQKKyAgICBlbHNlIGlmICghY2tzdHJjbXAobXlu YW1lLCJpa3NkbnQiLC0xLDApKSAgICBob3djYWxsZWQgPSBJX0FNX0lLU0Q7CisgICAgZWxzZSBp ZiAoIWNrc3RyY21wKG15bmFtZSwiaWtzZG50LmV4ZSIsLTEsMCkpICAgIGhvd2NhbGxlZCA9IElf QU1fSUtTRDsKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIE5FV0ZUUAorICAgIGVsc2UgaWYgKCFj a3N0cmNtcChteW5hbWUsImZ0cC5leGUiLC0xLDApKSAgICAgaG93Y2FsbGVkID0gSV9BTV9GVFA7 CisjZW5kaWYgLyogTkVXRlRQICovCisjaWZuZGVmIE5PSFRUUAorICAgIGVsc2UgaWYgKCFja3N0 cmNtcChteW5hbWUsImh0dHAuZXhlIiwtMSwwKSkgICAgaG93Y2FsbGVkID0gSV9BTV9IVFRQOwor I2VuZGlmIC8qIE5PSFRUUCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIGVsc2UgaWYgKCFja3N0 cmNtcChteW5hbWUsImtlcm1pdC1zc2hzdWIiLC0xLDApKSBob3djYWxsZWQgPSBJX0FNX1NTSFNV QjsKKworI2lmbmRlZiBOT0lDUAorICAgIGNtZGluaSgpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE11c3QgY29tZSBiZWZvcmUgcHJlc2NhbiAqLworICAgIGRlYnVnKEYxMDAsIm1haW4g Y21kaW5pKCkgZG9uZSIsIiIsMCk7CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICBwcmVzY2FuKDAp OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmUtQ2hlY2sgZm9yIGRlYnVnZ2luZywgZXRj ICovCisjZW5kaWYgLyogTUFDICovCisgICAgZGVidWcoRjEwMSwiTUFJTiBmZW9sIiwiIixmZW9s KTsKKyAgICBtYWtldmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQdXQgdG9nZXRo ZXIgdmVyc2lvbiBzdHJpbmdzICovCisjaWZuZGVmIE5PU0VUS0VZICAgICAgICAgICAgICAgICAg ICAgICAgLyogQWxsb2NhdGUgJiBpbml0aWFsaXplIHRoZSBrZXltYXAgKi8KKyAgICAvKiBUaGlz IGNvZGUgaGFzIGJlZW4gbW92ZWQgdG8gYmVmb3JlIHN5c2luaXQoKSBmb3IgSzk1RyAqLworICAg IGlmICghKGtleW1hcCA9IChLRVkgKikgbWFsbG9jKHNpemVvZihLRVkpKktNU0laRSkpKQorICAg ICAgZmF0YWwoIm1haW46IG5vIG1lbW9yeSBmb3Iga2V5bWFwIik7CisgICAgaWYgKCEobWFjcm90 YWIgPSAoTUFDUk8gKikgbWFsbG9jKHNpemVvZihNQUNSTykqS01TSVpFKSkpCisgICAgICBmYXRh bCgibWFpbjogbm8gbWVtb3J5IGZvciBtYWNyb3RhYiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBL TVNJWkU7IGkrKykgeworICAgICAgIGtleW1hcFtpXSA9IChLRVkpIGk7CisgICAgICAgbWFjcm90 YWJbaV0gPSBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworCisgICAgc2hvcnRi eXRlcy54X3Nob3J0ID0gMHhBQkNEOyAgICAgICAgLyogR2V0IEVuZGlhbm5lc3MgKi8KKyAgICBp ZiAoc2hvcnRieXRlcy54X2NoYXJbMF0gPT0gMHhDRCkgeyAvKiAwID0gQmlnIEVuZGlhbiAqLwor ICAgICAgICBieXRlb3JkZXIgPSAxOyAgICAgICAgICAgICAgICAgIC8qIDEgPSBMaXR0bGUgRW5k aWFuICovCisgICAgICAgIGJpZ2VuZGlhbiA9IDA7ICAgICAgICAgICAgICAgICAgLyogKGZvciBj bGFyaXR5IGluIHByb2dyYW1taW5nKSAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGJ5dGVvcmRl ciA9IDA7ICAgICAgICAgICAgICAgICAgLyogQmlnIEVuZGlhbiAqLworICAgICAgICBiaWdlbmRp YW4gPSAxOworICAgIH0KKyAgICBpZiAoc2l6ZW9mKENLX09GRl9UKSA9PSA4KQkJLyogTGFyZ2Ug ZmlsZXMgYW5kIGludHM/ICovCisgICAgICBoYXZlbGZzID0gMTsKKworICAgIGlmIChzeXNpbml0 KCkgPCAwKSAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBlbmRlbnQgaW5pdGlhbGl6YXRp b24uICovCisgICAgICBmYXRhbCgiQ2FuJ3QgaW5pdGlhbGl6ZSEiKTsKKyAgICBlbHNlCisgICAg ICBpbml0ZmxnID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgd2UgZGlkLiAq LworICAgIGRlYnVnKEYxMTEsImNrY21haSBteW5hbWUiLG15bmFtZSxob3djYWxsZWQpOworCisj aWZkZWYgVU5JWAorICAgIGdldGV4ZWRpcigpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENv bXB1dGUgZXhlZGlyIHZhcmlhYmxlICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgQ0tT WVNMT0cKKyNpZmRlZiBTWVNMT0dMRVZFTAorLyoKKyAgSWYgYnVpbHQgd2l0aCAtRFNZU0xPR0xF VkVMIG9uIGNjIGNvbW1hbmQgbGluZSwgdGhpcyBtZWFucyB3ZSBhbHdheXMKKyAgZG8gc3lzbG9n Z2luZyBhdCB0aGUgaW5kaWNhdGVkIGxldmVsLgorKi8KKyAgICB6c3lzbG9nKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPcGVuIHN5c2xvZyAqLworI2Vsc2UgLyogU1lTTE9HTEVWRUwg Ki8KKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKQorICAgICAgenN5c2xvZygpOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE9wZW4gc3lzbG9nICovCisjZW5kaWYgLyogSUtTRCAqLwor I2VuZGlmIC8qIFNZU0xPR0xFVkVMICovCisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKworI2lmZGVm IENLX0tFUkJFUk9TCisgICAgaW5pX2tlcmIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBLZXJiZXJvcyBkYXRhICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNp ZmRlZiBDS19TU0wKKyAgICBzc2xfb25jZV9pbml0KCk7CisjZW5kaWYgLyogQ0tfU1NMICovCisj aWZkZWYgVE5DT0RFCisgICAgdG5fc2V0X21vZGVzKCk7ICAgICAgICAgICAgICAgICAgICAgLyog SW5pdCBUZWxuZXQgT3B0aW9uIHRhYmxlcyAqLworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZk ZWYgQ0tfVFRHV1NJWiAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBzY3JlZW4g ZGltZW5zaW9ucyAqLworI2lmZGVmIE9TMgorICAgIHR0Z2N3c3ooKTsKKyNlbHNlIC8qIE9TMiAq LworICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7CisgICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0 dF9jb2xzID4gMCkgeworICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOworICAgICAgICAg ICAgY21kX2NvbHMgPSB0dF9jb2xzOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworI2lmbmRlZiBPUzIKKyNpZmRlZiBUQ1BTT0NL RVQKKyNpZmRlZiBDS19TT0NLUworICAgIFNPQ0tTaW5pdChhcmd2WzBdKTsgICAgICAgICAgICAg ICAgIC8qIEludGVybmV0IHJlbGF5IHBhY2thZ2UuLi4gKi8KKyNlbmRpZiAvKiBDS19TT0NLUyAq LworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaW5pdGZs b3coKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmbG93LWNvbnRyb2wg dGFibGUgKi8KKworI2lmbmRlZiBOT0lDUAorI2lmZGVmIENLRkxPQVQKKyAgICBpbml0ZmxvYXQo KTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWR1Y2UgZmxvYXRpbmctcG9pbnQgcHJlY2lz aW9uICovCisjZW5kaWYgLyogQ0tGTE9BVCAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5k ZWYgTk9YRkVSCisgICAgaW5pdHhsaXN0KCk7CQkJLyogSW5pdCBleGNlcHRpb24gbGlzdHMgKi8K KworI2lmZGVmIENLX1hZWiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg cHJvdG9jb2xzLi4uICAqLworCisjaWZkZWYgWFlaX0lOVEVSTkFMIC8qIFhZWk1PREVNIGFyZSBp bnRlcm5hbCAuLi4gKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBDYW4ndCBkbyB0aGlzIGZv ciBYTU9ERU0gYmVjYXVzZSBpZiBmaWxlbmFtZSBjb250YWlucyBhICJDIiBldGMuLi4gKi8KKyAg ICBpbml0cHJvdG8oUFJPVE9fWCwgInJ4ICVzIiwicnggJXMiLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMKTsKKyAgICBpbml0cHJvdG8oUFJPVE9fWEMsInJjICVzIiwicmMgJXMiLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyNlbHNlIC8qIENPTU1FTlQgKi8KKyAgICBpbml0 cHJvdG8oUFJPVE9fWCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 CisgICAgaW5pdHByb3RvKFBST1RPX1hDLE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpbml0cHJvdG8oUFJPVE9fWSwg InJiIiwicmIiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBpbml0cHJvdG8o UFJPVE9fRywgInJiIiwicmIiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBp bml0cHJvdG8oUFJPVE9fWiwgInJ6IiwicnoiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KTsKKyAgIGluaXRwcm90byhQUk9UT19LLCJrZXJtaXQgLWlyIiwia2VybWl0IC1yIiwia2VybWl0 IC14IixOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAvKiBLZXJtaXQgTXVzdCBiZSBsYXN0ICov CisKKyNlbHNlIC8qIFhZWk1PREVNIGFyZSBleHRlcm5hbCBwcm90b2NvbHMgLi4uICovCisKKyAv KiAgICAgICAgICAgICAgICAgIHMxICAgICAgczIgICAgIHMzICAgIHM0ICAgICAgczUgICAgICAg ICBzNiAgICAgIHM3ICAgICAqLworIGluaXRwcm90byhQUk9UT19YLCAicnggJXMiLCJyeCAlcyIs TlVMTCwic3ggJXMiLCJzeCAtYSAlcyIsInJ4ICVzIiwgInJ4ICVzIik7CisgaW5pdHByb3RvKFBS T1RPX1hDLCJyYyAlcyIsInJjICVzIixOVUxMLCJzeCAlcyIsInN4IC1hICVzIiwicmMgJXMiLCAi cmMgJXMiKTsKKyBpbml0cHJvdG8oUFJPVE9fWSwgInJiIiwgICAicmIiLCAgIE5VTEwsInNiICVz Iiwic2IgLWEgJXMiLCJyYiIsICAgICJyYiIgICApOworIGluaXRwcm90byhQUk9UT19HLCAicmIi LCAgICJyYiIsICAgTlVMTCwic2IgJXMiLCJzYiAtYSAlcyIsInJiIiwgICAgInJiIiAgICk7Cisg aW5pdHByb3RvKFBST1RPX1osICJyeiIsICAgInJ6IiwgICBOVUxMLCJzeiAlcyIsInN6IC1hICVz IiwicnoiLCAgICAicnoiICAgKTsKKyBpbml0cHJvdG8oUFJPVE9fSywgImtlcm1pdCAtaXIiLCJr ZXJtaXQgLXIiLCJrZXJtaXQgLXgiLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworIC8qIEtlcm1pdCBt dXN0IGJlIGxhc3QgKi8KKworI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworCisjZWxzZSAgLyog Tm8gWFlaTU9ERU0gc3VwcG9ydCAqLworCisgICBpbml0cHJvdG8oUFJPVE9fSywia2VybWl0IC1p ciIsImtlcm1pdCAtciIsImtlcm1pdCAteCIsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisKKyNlbmRp ZiAvKiBDS19YWVogKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgIGNvbm5vaSgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnNvbGUgaW50ZXJydXB0cyBvZmYgKi8KKworI2lm bmRlZiBOT1hGRVIKKyNpZmRlZiBPUzIKKyAgICAvKiBJbml0aWFsaXplIEtlcm1pdCBhbmQgWm1v ZGVtIEF1dG8tRG93bmxvYWQgU3RyaW5ncyAqLworICAgIGFkbF9rc3RyID0gc3RyZHVwKCJLRVJN SVQgUkVBRFkgVE8gU0VORC4uLiIpOworICAgIGFkbF96c3RyID0gc3RyZHVwKCJyelxyIik7Cisj ZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBQQVRURVJOUworICAgIGluaXRwYXQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgZmlsZW5hbWUgcGF0dGVybnMgKi8KKyNl bmRpZiAvKiBQQVRURVJOUyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PQ1NF VFMKKyAgICBpbml0Y3NldHMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXpl IGNoYXJhY3RlciBzZXRzICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZuZGVmIE5PSUNQ CisjaWZkZWYgREZDRE1TRworICAgIG1ha2VzdHIoJmNkbXNnc3RyLERGQ0RNU0cpOworICAgIG1h a2VsaXN0KGNkbXNnc3RyLGNkbXNnZmlsZSw4KTsgICAgIC8qIEluaXRpYWxpemUgQ0QgbWVzc2Fn ZSBmaWxlbmFtZXMgKi8KKyNlbmRpZiAvKiBERkNETVNHICovCisjZW5kaWYgLyogTk9JQ1AgKi8K KworICAgIHNzdGF0ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGRlZmF1bHQg c3RhcnQgc3RhdGUuICovCisjaWZkZWYgRFlOQU1JQworICAgIGlmIChnZXRpb2JzKCkgPCAwKQor ICAgICAgZmF0YWwoIkNhbid0IGFsbG9jYXRlIGkvbyBidWZmZXJzISIpOworI2VuZGlmIC8qIERZ TkFNSUMgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBOT1JBTkRPTQorICAgIHsKKyAgICAg ICAgY2hhciBzdGFja2RhdGFbMjU2XTsKKyAgICAgICAgdW5zaWduZWQgaW50IGMgPSAxMjM0LCBu OworICAgICAgICAvKiB0cnkgdG8gbWFrZSBhIHJhbmRvbSB1bnNpZ25lZCBpbnQgdG8gZmVlZCBz cmFuZCgpICovCisjaWZuZGVmIFZNUworCS8qIHRpbWUuaCBhbmQgTXVsdGlOZXQgZG8gbm90IGdl dCBhbG9uZyAqLworICAgICAgICBjID0gdGltZShOVUxMKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAg ICAgICAgYyAqPSBnZXRwaWQoKTsKKwkvKiBSZWZlcmVuY2VkIGJlZm9yZSBzZXQuLi4gREVMSUJF UkFURUxZICovCisgICAgICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2Yoc3RhY2tkYXRhKTsgbisr KSAvKiBJR05PUkUgV0FSTklORyAqLworCSAgYyArPSBzdGFja2RhdGFbbl07CQkvKiBERUxJQkVS QVRFTFkgVVNFRCBCRUZPUkUgU0VUICovCisgICAgICAgIHNyYW5kKCh1bnNpZ25lZCBpbnQpYyk7 CisgICAgfQorI2VuZGlmIC8qIE5PUkFORE9NICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAg IGNraG9zdChteWhvc3QsTVlIT1NUTCk7ICAgICAgICAgICAgIC8qIE5hbWUgb2YgbG9jYWwgaG9z dCAqLworICAgIGRlYnVnKEYxMTAsIm1haW4gY2tob3N0IixteWhvc3QsMCk7CisjaWZkZWYgSUtT RAorICAgIGlmICghaW5zZXJ2ZXIpIHsKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIGNrc3Ry bmNweSh0dG5hbWUsZGZ0dHksVFROQU1MRU4pOyAvKiBTZXQgdXAgZGVmYXVsdCB0dHkgbmFtZS4g Ki8KKyAgICAgICAgbG9jYWwgPSBub2xvY2FsID8gMCA6IGRmbG9jOyAgICAvKiBBbmQgd2hldGhl ciBpdCdzIGxvY2FsIG9yIHJlbW90ZS4gKi8KKyAgICAgICAgcGFyaXR5ID0gZGZwcnR5OyAgICAg ICAgICAgICAgICAvKiBTZXQgaW5pdGlhbCBwYXJpdHksICovCisjaWZuZGVmIE5PWEZFUgorICAg ICAgICBteWluZGV4ID0gZ2V0c3lzaXgoY2tzeXNpZCk7ICAgIC8qIFN5c3RlbSBpbmRleCAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICBpZiAobG9jYWwpIGlmICh0dG9wZW4odHRuYW1l LCZsb2NhbCwwLDApIDwgMCkgeworI2lmbmRlZiBPUzIKKyAgICAgICAgICAgIGNvbm9sKCJDYW4n dCBvcGVuIGRldmljZTogIik7CisgICAgICAgICAgICBjb25vbGwodHRuYW1lKTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgICAgIGxvY2FsID0gMDsKKyAgICAgICAgICAgIGNrc3RybmNweSh0 dG5hbWUsQ1RUTkFNLFRUTkFNTEVOKTsKKyAgICAgICAgfQorICAgICAgICBzZXRmbG93KCk7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRyb2wgKi8KKyAg ICAgICAgc3BlZWQgPSB0dGdzcGQoKTsgICAgICAgICAgICAgICAvKiBHZXQgdHJhbnNtaXNzaW9u IHNwZWVkLiAqLworI2lmZGVmIElLU0QKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisjaWZk ZWYgQU5ZWDI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsIFguMjUgaW1wbGVtZW50 YXRpb25zICovCisjaWZuZGVmIElCTVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhj ZXB0IElCTSBoYXZlIFBBRCBzdXBwb3J0ICovCisgICAgaW5pdHBhZCgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBYLjI1IFBBRCAqLworI2VuZGlmIC8qIElCTVgyNSAq LworI2VuZGlmIC8qIEFOWVgyNSAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChpbmlidWZz KFNCU0laLFJCU0laKSA8IDApICAgICAgIC8qIEFsbG9jYXRlIHBhY2tldCBidWZmZXJzICovCisg ICAgICBmYXRhbCgiQ2FuJ3QgYWxsb2NhdGUgcGFja2V0IGJ1ZmZlcnMhIik7CisjaWZuZGVmIE5P Q0tTUEVFRAorICAgIHNldHByZWZpeChwcmVmaXhpbmcpOyAgICAgICAgICAgICAgIC8qIFNldCB1 cCBjb250cm9sIGNoYXIgcHJlZml4aW5nICovCisjZW5kaWYgLyogTk9DS1NQRUVEICovCisjZW5k aWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9JQ1AKKyAgICBpZiAoc3N0ZWxuZXQKKyNpZmRl ZiBJS1NECisgICAgICAgIHx8IGluc2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAp IHsKKyAgICAgICAgaW50IG9uID0gMSwgeCA9IDA7CisgICAgICAgIGV4dGVybiBpbnQgY2t4ZWNo LCB0dG5ldCwgdHRucHJvdG8sIGNtZG1zazsKKyNpZmRlZiBTT19TTkRCVUYKKyAgICAgICAgZXh0 ZXJuIGludCB0Y3Bfc2VuZGJ1ZjsKKyNlbmRpZgorI2lmZGVmIFNPX1JDVkJVRgorICAgICAgICBl eHRlcm4gaW50IHRjcF9yZWN2YnVmOworI2VuZGlmCisjaWZkZWYgU09fS0VFUEFMSVZFCisgICAg ICAgIGV4dGVybiBpbnQgdGNwX2tlZXBhbGl2ZTsKKyNlbmRpZgorI2lmZGVmIFNPX0xJTkdFUgor ICAgICAgICBleHRlcm4gaW50IHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vOworI2VuZGlmIC8q IFNPX0xJTkdFUiAqLworI2lmZGVmIFNPX0RPTlRST1VURQorICAgICAgICBleHRlcm4gaW50IHRj cF9kb250cm91dGU7CisjZW5kaWYgLyogU09fRE9OVFJPVVRFICovCisjaWZkZWYgVENQX05PREVM QVkKKyAgICAgICAgZXh0ZXJuIGludCB0Y3Bfbm9kZWxheTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxB WSAqLworI2lmZGVmIElLU0QKKyAgICAgICAgZXh0ZXJuIGludCBpa2xvZ29wZW47CisjZW5kaWYg LyogSUtTRCAqLworICAgICAgICBleHRlcm4gaW50IHR0bWRtOworCisjaWZkZWYgVU5JWAorICAg ICAgICBpZiAoaXNhdHR5KDApKQorICAgICAgICAgIGZhdGFsKCJJbnRlcm5ldCBLZXJtaXQgU2Vy dmljZSBjYW5ub3QgYmUgc3RhcnRlZCBhdCBhIHRlcm1pbmFsLiIpOworI2VuZGlmIC8qIFVOSVgg Ki8KKworICAgICAgICByZWxpYWJsZSA9IHhyZWxpYWJsZSA9IFNFVF9PTjsgIC8qIElLU0QgaGFz IHJlbGlhYmxlIGNvbm5lY3Rpb24gKi8KKyNpZm5kZWYgVk1TCisgICAgICAgIGZsb3cgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgLyogTm8gZmxvdyBjb250cm9sIG5lZWRlZCAqLworI2VuZGlm IC8qIFZNUyAqLworICAgICAgICBiZ3NldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE5v dCBpbiBiYWNrZ3JvdW5kICovCisgICAgICAgIG5vcHVzaCA9IDE7ICAgICAgICAgICAgICAgICAg ICAgLyogTm8gZXh0ZXJuYWwgcHJvY2Vzc2VzICovCisgICAgICAgIHBhcml0eSA9IDA7ICAgICAg ICAgICAgICAgICAgICAgLyogOCBiaXRzIC4uLiAqLworICAgICAgICBjbWRtc2sgPSAweGZmOyAg ICAgICAgICAgICAgICAgIC8qIGFsbCB0aGUgd2F5ICovCisgICAgICAgIGNtYXNrID0gMHhmZjsK KworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7ICAgICAgICAgICAgICAgICAv KiBJZiBJS1NEICovCisgICAgICAgICAgICBkb2lrc2Rpbml0KCk7ICAgICAgICAgICAgICAgLyog RXhlY3V0ZSBJS1NEIGNvbmZpZ3VyYXRpb24gZmlsZSAqLworICAgICAgICAgICAgd2hpbGUgKHRs ZXZlbCA+IC0xKQorICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgIC8qIChJ Z25vcmUgYW55IGZpbGUteGZlciBjb21tYW5kcykgKi8KKyAgICAgICAgICAgIGlrc2RjZiA9IDE7 ICAgICAgICAgICAgICAgICAvKiBJS1NEIGMuZi4gaGFzIGJlZW4gcHJvY2Vzc2VkICovCisgICAg ICAgIH0KKyAgICAgICAgaWYgKCFpa2xvZ29wZW4pIChWT0lEKSBkb2lrbG9nKCk7IC8qIE9wZW4g S2VybWl0LXNwZWNpZmljIGxvZyAqLworI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIFVOSVgK KyAgICAgICAgc2V0YnVmKHN0ZG91dCxOVUxMKTsgICAgICAgICAgICAvKiBEb24ndCBidWZmZXIg dGhlIG91dHB1dCAqLworICAgICAgICBja3N0cm5jcHkodHRuYW1lLCIwIixUVE5BTUxFTik7IC8q IG5vdCAiL2Rldi90dHkiLi4uICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICBsb2NhbCA9 IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBpbiByZW1vdGUgbW9kZSAqLworICAg ICAgICBja3hlY2ggPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIFdlIHdpbGwgZWNobyAqLwor I2lmZGVmIE9TMgorICAgICAgICBuZXR0eXBlID0gTkVUX1RDUEI7ICAgICAgICAgICAgIC8qIFNv IHR0b3BlbigpIHRyZWF0cyB0aGUgY29ubmVjdGlvbiAqLworICAgICAgICBtZG10eXAgPSAtbmV0 dHlwZTsgICAgICAgICAgICAgIC8qIGFzIGEgbmV0d29yayAqLworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICBkZWJ1ZyhGMTAwLCJtYWluIGFib3V0IHRvIGNhbGwgdHRvcGVuKCkgaW5zZXJ2ZXIi LCIiLDApOworICAgICAgICBpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApIDwgMCkg eyAvKiBPcGVuIGNvbW0gY2hhbm5lbCAqLworICAgICAgICAgICAgZmF0YWwoImNhbid0IGluaXRp YWxpemUgaS9vIik7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgbG9jYWwgPSAwOwor ICAgICAgICBuZXR3b3JrID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgdXNlIG5ldHdv cmtpbmcgY29kZSAqLworI2Vsc2UgIC8qIE9TMiAqLworICAgICAgICBuZXR3b3JrID0gMDsgICAg ICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IHVzZSBuZXR3b3JraW5nIGNvZGUgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgdHRtZG0gPSAtMTsgICAgICAgICAgICAgICAgICAgICAvKiBE b2VzIG5vdCB1c2UgYSBtb2RlbSAqLworICAgICAgICBzc3RlbG5ldCA9IDE7ICAgICAgICAgICAg ICAgICAgIC8qIERvIHNlcnZlci1zaWRlIFRlbG5ldCBuZWdvdGF0aW9ucyAqLworICAgICAgICBk ZWJ1ZyhGMTExLCJNQUlOIiwic3N0ZWxuZXQiLHNzdGVsbmV0KTsKKyAgICAgICAgdHRuZXQgPSBO RVRfVENQQjsgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHR5cGUgaXMgVENQIHNvY2tldHMgKi8K KyAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7ICAgICAgICAgICAvKiBOZXR3b3JkIHByb3Rv Y29sIGlzIFRlbG5ldCAqLworI2lmZGVmIElLU0RCCisgICAgICAgIGRiaW5pdCgpOyAgICAgICAg ICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBkYXRhYmFzZSByZWNvcmQgKi8KKyNlbmRpZiAv KiBJS1NEQiAqLworI2lmbmRlZiBPUzIKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAg ICAvKiBCZWZvcmUgaW5pdGlhbGl6YXRpbmcgVGVsbmV0L1Jsb2dpbiBuZWdvdGlhdGlvbnMsIGlu aXQgS2VyYmVyb3MgKi8KKyAgICAgICAgY2tfYXV0aF9pbml0KGNrZ2V0cGVlcigpLCIiLCIiLDAp OworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNpZmRlZiBOT05fQkxPQ0tfSU8K KyAgICAgICAgb24gPSAxOworICAgICAgICB4ID0gc29ja2V0X2lvY3RsKDAsRklPTkJJTywmb24p OworICAgICAgICBkZWJ1ZyhGMTAxLCJtYWluIEZJT05CSU8iLCIiLHgpOworI2VuZGlmIC8qIE5P Tl9CTE9DS19JTyAqLworI2lmZGVmIFNPX09PQklOTElORQorICAgICAgICBvbiA9IDE7CisgICAg ICAgIHggPSBzZXRzb2Nrb3B0KDAsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwgKGNoYXIgKikm b24sIHNpemVvZihvbikpOworICAgICAgICBkZWJ1ZyhGMTAxLCJtYWluIFNPX09PQklOTElORSIs IiIseCk7CisjZW5kaWYgLyogU09fT09CSU5MSU5FICovCisKKyNpZm5kZWYgTk9UQ1BPUFRTCisj aWZuZGVmIGRhdGFnZW5lcmFsCisjaWZkZWYgU09MX1NPQ0tFVAorI2lmZGVmIFRDUF9OT0RFTEFZ CisgICAgICAgIG5vX2RlbGF5KDAsdGNwX25vZGVsYXkpOworI2VuZGlmIC8qIFRDUF9OT0RFTEFZ ICovCisjaWZkZWYgU09fS0VFUEFMSVZFCisgICAgICAgIGtlZXBhbGl2ZSgwLHRjcF9rZWVwYWxp dmUpOworI2VuZGlmIC8qIFNPX0tFRVBBTElWRSAqLworI2lmZGVmIFNPX0xJTkdFUgorICAgICAg ICBja19saW5nZXIoMCx0Y3BfbGluZ2VyLCB0Y3BfbGluZ2VyX3Rtbyk7CisjZW5kaWYgLyogU09f TElOR0VSICovCisjaWZkZWYgU09fRE9OVFJPVVRFCisgICAgICAgIGRvbnRyb3V0ZSgwLHRjcF9k b250cm91dGUpOworI2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLworI2lmZGVmIFNPX1NOREJVRgor ICAgICAgICBzZW5kYnVmKDAsdGNwX3NlbmRidWYpOworI2VuZGlmIC8qIFNPX1NOREJVRiAqLwor I2lmZGVmIFNPX1JDVkJVRgorICAgICAgICByZWN2YnVmKDAsdGNwX3JlY3ZidWYpOworI2VuZGlm IC8qIFNPX1JDVkJVRiAqLworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KKyNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworCisjaWZkZWYgQ0tfU1NMCisgICAg ICAgIGlmIChja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsKKyAgICAgICAgICAgIGlmICghc3Ns X3RuX2luaXQoU1NMX1NFUlZFUikpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlvX2VyciAhPSBO VUxMKSB7CisgICAgICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwiZG9fc3NsZWF5 X2luaXQoKSBmYWlsZWRcclxuIik7CisgICAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJv cnMoYmlvX2Vycik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJk b19zc2xlYXlfaW5pdCgpIGZhaWxlZFxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgRVJSX3By aW50X2Vycm9yc19mcChzdGRlcnIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBzd2l0Y2ggKHR0bnByb3RvKSB7CisJCSAgY2FzZSBOUF9TU0w6CisJCSAgY2FzZSBOUF9UTFM6 CisgIAkJICBjYXNlIE5QX1NTTF9SQVc6CisJCSAgY2FzZSBOUF9UTFNfUkFXOgorCQkgIGNhc2Ug TlBfU1NMX1RFTE5FVDoKKwkJICBjYXNlIE5QX1RMU19URUxORVQ6CisgICAgICAgICAgICAgICAg ICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgLyogb3RoZXJ3aXNlIHdlIHdpbGwgY29udGludWUgdG8gYWNjZXB0IHRoZSBjb25uZWN0aW9u ICAgKi8KKyAgICAgICAgICAgICAgICAvKiB3aXRob3V0IFNTTCBvciBUTFMgc3VwcG9ydCB1bmxl c3MgcmVxdWlyZWQuICovCisgICAgICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX1NfTUVfTU9E RShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCisgICAgICAgICAgICAgICAgICAgIFRF TE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAg ICAgICAgICAgaWYgKCBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFRO X05HX01VICkKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRf U1RBUlRfVExTKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9D X01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgIT0gVE5fTkdfTVUgKQorICAgICAgICAgICAgICAg ICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwor ICAgICAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfU1RBUlRfVExT KSAhPSBUTl9OR19NVSApCisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUo VEVMT1BUX1NUQVJUX1RMUykgPSBUTl9OR19SRjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgaWYgKCBja19zc2xfaW5jb21pbmcoMCkgPCAwICkgeworICAgICAgICAgICAg ICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBUTkNPREUKKyAg ICAgICAgdG5faW5pKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBUZWxuZXQgbmVn b3RpYXRpb24gbm93ICovCisjZW5kaWYgLyogVE5DT0RFICovCisjZW5kaWYgLyogT1MyICovCisg ICAgfQorICAgIGRlYnVnKEYxMDEsIm1haW4gYXJnYyBhZnRlciBwcmVzY2FuKCkiLCIiLGFyZ2Mp OworCisgICAgLyogTm93IHByb2Nlc3MgYW55IHJlbGV2YW50IGVudmlyb25tZW50IHZhcmlhYmxl cyAqLworCisjaWZuZGVmIE5PRElBTAorICAgIGdldGRpYWxlbnYoKTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIERpYWxpbmcgKi8KKyNpZmRlZiBORVRDT05OCisgICAgbmRpbml0KCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBuZXR3b3JrIGRpcmVjdG9yeSBpbmZv ICovCisgICAgZ2V0bmV0ZW52KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBk aXJlY3RvcmllcyAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8K KworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19GQVNUCisgICAgZG9mYXN0KCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQnkgbm93IEZBU1QgZGVmYXVsdHMgc2hvdWxkIGJlIE9LICov CisjZW5kaWYgLyogQ0tfRkFTVCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5P Q01ETAorICAgIGlrc2xvZ2luKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJS1NEIExv Z2luIGFuZCBvdGhlciBzdHVmZiAqLworI2lmZGVmIElLU0QKKyNpZmRlZiBOVAorICAgIGlmICgg aW5zZXJ2ZXIgKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYg LyogSUtTRCAqLworI2VuZGlmIC8qIE5PQ01ETCAqLworCisgICAgaWYgKGhvd2NhbGxlZCA9PSBJ X0FNX1NTSFNVQikgeworICAgICAgICByZWxpYWJsZSA9IDE7CQkJLyogV2Ugc2F5IHRoZSBjb25u ZWN0aW9uIGlzIHJlbGlhYmxlICovCisgICAgICAgIHhyZWxpYWJsZSA9IDE7CQkJLyogQW5kIHRo YXQgd2Ugc2FpZCBpdCB3YXMgKi8KKyAgICAgICAgc2V0cmVsaWFibGUgPSAxOwkJLyogQW5kIHBy ZXRlbmQgdGhlICJ1c2VyIiBkaWQgdG9vICovCisgICAgICAgIHhmaW5pc2ggPSAxOwkJCS8qIEZv ciBSRU1PVEUgSEVMUCByZXNwb25zZSAqLworICAgICAgICBtZG10eXAgPSAwOwkJCS8qIEZvciB0 dG9wZW4oKSAqLworICAgICAgICBja3N0cm5jcHkodHRuYW1lLCIwIixUVE5BTUxFTisxKTsgIC8q IFVzZSBmaWxlIGRlc2NyaXB0b3IgMCAqLworICAgICAgICBsb2NhbCA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEFuZCBmb3JjZSByZW1vdGUgbW9kZSAqLworICAgICAgICB0dG9wZW4o dHRuYW1lLCZsb2NhbCxtZG10eXAsMCk7IC8qIE9wZW4gdGhlICJjb25uZWN0aW9uIiAqLworICAg ICAgICBzc3RhdGUgPSAneCc7CQkJLyogSW5pdGlhbCBzdGF0ZSBpcyBTZXJ2ZXIgKi8KKyAgICAg ICAgcHJvdG8oKTsJCQkvKiBFbnRlciBwcm90b2NvbCAqLworICAgICAgICBkb2V4aXQoR09PRF9F WElULHhpdHN0YSk7CS8qIEV4aXQgd2hlbiBkb25lICovCisgICAgfQorICAgIGRlYnVnKEYxMTEs Imhvd2NhbGxlZCIsbXluYW1lLGhvd2NhbGxlZCk7CisKKyNpZmRlZiBOT0NDVFJBUAorICAgIGRv dGFrZWluaSgwKTsKKyNlbHNlIC8qIE5PQ0NUUkFQICovCisgICAgZGVidWcoRjEwMCwibWFpbiBh Ym91dCB0byBjY19leGVjdXRlIiwiIiwwKTsKKyAgICBzZXRpbnQoKTsKKyAgICBjY19leGVjdXRl KCBja2phZGRyKGNtamJ1ZiksIGRvdGFrZWluaSwgZmFpbHRha2VpbmkgKTsKKyNlbmRpZiAvKiBO T0NDVFJBUCAqLworCisgICAgZGVidWcoRjExMSwibWFpbiAyIGNmaWxlZiIsY21kZmlsLGNmaWxl Zik7CisgICAgaWYgKGNtZGZpbFswXSkgeyAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZ290 IG9uZSAoc2VlIHByZXNjYW4oKSkuLi4gKi8KKyNpZmRlZiBOT0NDVFJBUAorICAgICAgICBkb2Nt ZGZpbGUoMCk7ICAgICAgICAgICAgICAgICAgIC8qIGV4ZWN1dGUgaXQuICovCisjZWxzZSAvKiBO T0NDVFJBUCAqLworICAgICAgICBzZXRpbnQoKTsKKyAgICAgICAgY2NfZXhlY3V0ZSggY2tqYWRk cihjbWpidWYpLCBkb2NtZGZpbGUsIGZhaWxjbWRmaWxlICk7CisjZW5kaWYgLyogTk9DQ1RSQVAg Ki8KKyAgICB9CisjaWZuZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJl c2VydmUgbmFtZSBzbyB3ZSBjYW4gZGVsZXRlIGl0ICovCisgICAgKmNtZGZpbCA9ICdcMCc7ICAg ICAgICAgICAgICAgICAgICAgLyogRG9uZSwgbnVsbGlmeSB0aGUgZmlsZSBuYW1lICovCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0NNREwKKy8qIExv b2sgZm9yIGEgVU5JWC1zdHlsZSBjb21tYW5kIGxpbmUuLi4gKi8KKworICAgIHdoYXQgPSBXX05P VEhJTkc7CisKKyAgICBkZWJ1ZyhGMTAxLCJtYWluIGFyZ2MiLCIiLGFyZ2MpOworI2lmbmRlZiBO T0hFTFAKKyAgICBpbmlvcHRobHAoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFs aXplIGNtZGxpbmUgYXJnIGhlbHAgKi8KKyNlbmRpZiAvKiBOT0hFTFAgKi8KKyAgICBpZiAoCisj aWZkZWYgQ09NTUVOVAorICAgICAgICAhY2ZpbGVmICYmCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICAgICBhcmdjID4gMSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgbGluZSBh cmd1bWVudHM/ICovCisgICAgICAgIHNzdGF0ZSA9IChDSEFSKSBjbWRsaW4oKTsgICAgICAgLyog WWVzLCBwYXJzZS4gKi8KKyNpZmRlZiBORVRDT05OCisjaWZuZGVmIE5PVVJMCisgICAgICAgIGlm IChoYXZldXJsKSB7ICAgICAgICAgICAgICAgICAgLyogV2FzIGEgVVJMIGdpdmVuPyAqLworICAg ICAgICAgICAgZG91cmwoKTsgICAgICAgICAgICAgICAgICAgIC8qIGlmIHNvLCBkbyBpdC4gKi8K KyAgICAgICAgfQorI2VuZGlmIC8qIE5PVVJMICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lm bmRlZiBOT1hGRVIKKyAgICAgICAgenN0YXRlID0gc3N0YXRlOyAgICAgICAgICAgICAgICAvKiBS ZW1lbWJlciBzc3RhdGUgYXJvdW5kIHByb3RvY29sICovCisgICAgICAgIGRlYnVnKEYxMDEsIm1h aW4genN0YXRlIiwiIix6c3RhdGUpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5P TE9DQUwKKyAgICAgICAgaWYgKGNmbGcpIHsgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0 IGZpcnN0IGlmIHJlcXVlc3RlZCAqLworICAgICAgICAgICAgZG9jb25lY3QoMCwwKTsKKyAgICAg ICAgICAgIGlmICh0dGNoaygpIDwgMCkKKyAgICAgICAgICAgICAgZG9sb2dlbmQoKTsKKyAgICAg ICAgICAgIGNmbGcgPSAwOworICAgICAgICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZu ZGVmIE5PWEZFUgorICAgICAgICBpZiAoc3N0YXRlKSB7CisjaWZuZGVmIE5PTE9DQUwKKyAgICAg ICAgICAgIGlmIChkaXNwbGEpIGNvbmNiKChjaGFyKWVzY2FwZSk7IC8qIChmb3IgY29uc29sZSAi aW50ZXJydXB0cyIpICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIE5PQ0NUUkFQCisg ICAgICAgICAgICBkb2NtZGxpbmUoMSk7CisjZWxzZSAvKiBOT0NDVFJBUCAqLworICAgICAgICAg ICAgc2V0aW50KCk7CisgICAgICAgICAgICBjY19leGVjdXRlKCBja2phZGRyKGNtamJ1ZiksIGRv Y21kbGluZSwgZmFpbGNtZGxpbmUgKTsKKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworICAgICAgICB9 CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9JQ1AKKy8qCisgIElmIGEgY29tbWFu ZC1saW5lIGFjdGlvbiBhcmd1bWVudCB3YXMgZ2l2ZW4gYW5kIC1TICgic3RheSIpIHdhcyBub3Qg Z2l2ZW4sCisgIGV4aXQgbm93LgorKi8KKyAgICAgICAgaWYgKChjZmxnIHx8IGNuZmxnIHx8IHpz dGF0ZSkgJiYgIXN0YXlmbGcpCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICBkb2V4aXQo R09PRF9FWElULHhpdHN0YSk7ICAgICAvKiBFeGl0IHdpdGggZ29vZCBzdGF0dXMgKi8KKworI2lm bmRlZiBOT0xPQ0FMCisjaWZuZGVmIE5PSUNQCisgICAgICAgIGlmIChsb2NhbCkgeworI2lmZGVm IE5FVENPTk4KKyAgICAgICAgICAgIGlmICgoY2ZsZyB8fCBjbmZsZykgJiYgdG5fZXhpdCAmJiB0 dGNoaygpIDwgMCkKKyAgICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiBF eGl0IHdpdGggZ29vZCBzdGF0dXMgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisgICAgICAgICAg ICBpZiAoZXhpdG9uY2xvc2UgJiYgIW5ldHdvcmsgJiYKKyAgICAgICAgICAgICAgICAoY2Fycmll ciAhPSBDQVJfT0ZGICYmICh0dGdtZG0oKSAmIEJNX0RDRCkgPT0gMCkpCisgICAgICAgICAgICAg IGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgLyogRXhpdCB3aXRoIGdvb2Qgc3RhdHVzICovCisg ICAgICAgICAgICBpZiAoZXhpdG9uY2xvc2UgJiYgbmV0d29yayAmJiB0dGNoaygpIDwgMCkKKyAg ICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOyAvKiBFeGl0IHdpdGggZ29vZCBz dGF0dXMgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PSUNQICovCisjZW5kaWYgLyogTk9MT0NB TCAqLworICAgIH0KKyNlbmRpZiAvKiBOT0NNREwgKi8KKworI2lmZGVmIE5PSUNQICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyICovCisj aWZuZGVmIE5PQ01ETAorICAgIGVsc2UgeworCisgICAgICAgIC8qIENvbW1hbmQtbGluZS1vbmx5 IHZlcnNpb24gKi8KKyAgICAgICAgZmF0YWwoIj9ObyBjb21tYW5kLWxpbmUgb3B0aW9ucyBnaXZl biAtIHR5cGUgJ2tlcm1pdCAtaCcgZm9yIGhlbHAiKTsKKyAgICB9CisjZWxzZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVpdGhlciBvbmUhICovCisgICAgICAgIHNzdGF0 ZSA9ICd4JzsKKyAgICAgICAganVzdG9uZSA9IDA7CisgICAgICAgIHByb3RvKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogU28gZ28gaW50byBzZXJ2ZXIgbW9kZSAqLworICAgICAgICBkb2V4 aXQoR09PRF9FWElULHhpdHN0YSk7ICAgICAgIC8qIGV4aXQgd2l0aCBnb29kIHN0YXR1cyAqLwor CisjZW5kaWYgLyogTk9DTURMICovCisjZWxzZSAvKiBub3QgTk9JQ1AgKi8KKy8qCisgIElmIG5v IGFjdGlvbiByZXF1ZXN0ZWQgb24gY29tbWFuZCBsaW5lLCBvciBpZiAtUyAoInN0YXkiKSB3YXMg aW5jbHVkZWQsCisgIGVudGVyIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlci4KKyovCisg ICAgaWYgKCFjbGNtZHMpCisgICAgICBoZXJhbGQoKTsgICAgICAgICAgICAgICAgICAgICAgICAg LyogRGlzcGxheSBwcm9ncmFtIGhlcmFsZC4gKi8KKworI2lmZGVmIE5PQ0NUUkFQCisgICAgZGVi dWcoRjEwMCwibWFpbiBOT0NDVFJBUCBzZXR0aW5nIGludGVycnVwdCB0cmFwIiwiIiwwKTsKKyAg ICBzZXRpbnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdXAgY29tbWFuZCBp bnRlcnJ1cHQgdHJhcHMgKi8KKyAgICBkb2ljcChOVUxMKTsKKyNlbHNlIC8qIE5PQ0NUUkFQICov CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZGVidWcoRjEwMCwibWFpbiBzZXR0aW5nIGludGVy cnVwdCB0cmFwIiwiIiwwKTsKKyAgICAgICAgc2V0aW50KCk7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBTZXQgdXAgY29tbWFuZCBpbnRlcnJ1cHQgdHJhcHMgKi8KKyAgICAgICAgaWYgKCFjY19l eGVjdXRlKGNramFkZHIoY21qYnVmKSwgZG9pY3AsIGZhaWxpY3ApKQorICAgICAgICAgIGJyZWFr OworICAgIH0KKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworI2VuZGlmIC8qIE5PSUNQICovCisjaWZu ZGVmIE1BSU5JU1ZPSUQKKyAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogTUFJTklTVk9JRCAqLwor fQorCisjaWZkZWYgRFlOQU1JQworLyogQWxsb2NhdGUgZmlsZSBpL28gYnVmZmVycyAqLworCitj aGFyICp6aW5idWZmZXIgPSBOVUxMLCAqem91dGJ1ZmZlciA9IE5VTEw7CisKK2ludAorZ2V0aW9i cygpIHsKKyAgICB6aW5idWZmZXIgPSAoY2hhciAqKW1hbGxvYyhJTkJVRlNJWkUpOworICAgIGlm ICghemluYnVmZmVyKSByZXR1cm4oLTEpOworICAgIHpvdXRidWZmZXIgPSAoY2hhciAqKW1hbGxv Yyh6b2J1ZnNpemUpOworICAgIGRlYnVnKEYxMDEsInpvdXRidWZmZXIgbWFsbG9jIiwiIix6b2J1 ZnNpemUpOworICAgIGlmICghem91dGJ1ZmZlcikgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhGMTAw LCJnZXRpb2JzIG9rIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogRFlOQU1J QyAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Y2tjbWRiLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY21kYi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNWNlYmMKLS0tIC9kZXYvbnVs bAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY21kYi5jCkBA IC0wLDAgKzEsMzg3IEBACisvKgorICBDIEsgQyBNIEQgQiAuIEMgIC0tICBtYWxsb2MgZGVidWdn ZXIuCisqLworCisvKgorICBBdXRob3I6IEhvd2llIEtheWUsIENvbHVtYmlhIFVuaXZlcnNpdHkg Q2VudGVyIGZvciBDb21wdXRpbmcgQWN0aXZpdGllcy4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUs IDE5OTksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBv ZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBD T1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWku YyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKy8qIFVzZSB0aGUg cmVhbCBvbmVzIGluIHRoaXMgbW9kdWxlISAqLworI2lmZGVmIG1hbGxvYworI3VuZGVmIG1hbGxv YworI2VuZGlmIC8qIG1hbGxvYyAqLworI2lmZGVmIGNhbGxvYworI3VuZGVmIGNhbGxvYworI2Vu ZGlmIC8qIGNhbGxvYyAqLworI2lmZGVmIHJlYWxsb2MKKyN1bmRlZiByZWFsbG9jCisjZW5kaWYg LyogcmVhbGxvYyAqLworI2lmZGVmIGZyZWUKKyN1bmRlZiBmcmVlCisjZW5kaWYgLyogZnJlZSAq LworCisjaW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJj a2NkZWIuaCIKKworI2lmZGVmIENPSEVSRU5UCitfUFJPVE9UWVAgKCBGSUxFICogZmRvcGVuLCAo aW50LCBjaGFyICopICk7CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworLyoKKyAgbWVtZGVidWc6 CisgIHZhcmlhYmxlIHRvIGNvbnRyb2wgbWVtb3J5IGRlYnVnZ2luZy4KKyAgaWYgbWVtZGVidWcg PT0gIDEsIHRoZW4gYWN0aW9uIGlzIGFsd2F5cyB0YWtlbi4KKyAgaWYgbWVtZGVidWcgPT0gIDAs IHRoZW4gbm8gYWN0aW9uIGlzIHRha2VuLgorICBpZiBtZW1kZWJ1ZyA9PSAtMSwgdGhlbiB0aGUg dXNlciBpcyBhc2tlZCAod29ya3Mgd2VsbCB3aXRoIGdkYikuCisqLworaW50IG1lbWRlYnVnID0g LTE7CitpbnQgZGlzYWJsZWQgPSAwOworaW50IGluaXRlZCA9IDA7CisvKgorICBUbyB1c2UgdGhp cyBwYWNrYWdlLCBjb21waWxlIHlvdXIgcHJvZ3JhbSB3aXRoOgorICAtRG1hbGxvYz1kbWFsbG9j IC1EZnJlZT1kZnJlZSA9RGNhbGxvYz1kY2FsbG9jIC4uLiAtRE1ERUJVRworICBhbmQgdGhlbiBs aW5rIGl0IHdpdGggY2tjbWRiLmMuCisqLworI2lmZGVmIE1ERUJVRworCisjaWZuZGVmIE1fU0la RV9UCisjaWZkZWYgTkVYVAorI2RlZmluZSBNX1NJWkVfVCBzaXplX3QKKyNlbHNlCisjaWZkZWYg U1VOT1M0MQorI2RlZmluZSBNX1NJWkVfVCB1bnNpZ25lZAorI2Vsc2UKKyNkZWZpbmUgTV9TSVpF X1QgaW50CisjZW5kaWYgLyogU1VOT1M0MSAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAv KiBNX1NJWkVfVCAqLworCisjaWZkZWYgQ0tfQU5TSUMKK19QUk9UT1RZUCggdm9pZCBmcmVlLCAo dm9pZCAqKSApOworX1BST1RPVFlQKCB2b2lkICogbWFsbG9jLCAoc2l6ZV90KSApOworX1BST1RP VFlQKCB2b2lkICogcmVhbGxvYywgKHZvaWQgKiwgc2l6ZV90KSApOworI2Vsc2UKK19QUk9UT1RZ UCggVk9JRCBmcmVlLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBjaGFyICogbWFsbG9jLCAoTV9T SVpFX1QpICk7CitfUFJPVE9UWVAoIGNoYXIgKiByZWFsbG9jLCAoY2hhciAqLCBNX1NJWkVfVCkg KTsKKyNlbmRpZiAvKiBORVhUICovCisKK19QUk9UT1RZUCggVk9JRCBtX2luc2VydCwgKGNoYXIg KikgKTsKK19QUk9UT1RZUCggaW50IG1fZGVsZXRlLCAoY2hhciAqKSApOworCitfUFJPVE9UWVAo IGNoYXIgKiBkbWFsbG9jLCAoaW50KSApOworX1BST1RPVFlQKCBjaGFyICogZGNhbGxvYywgKGlu dCwgaW50KSApOworX1BST1RPVFlQKCBjaGFyICogZHJlYWxsb2MsIChjaGFyICosIGludCkgKTsK KworX1BST1RPVFlQKCBjaGFyICpzZXRfcmFuZ2VfY2hlY2ssIChjaGFyICosIGludCkgKTsKK19Q Uk9UT1RZUCggY2hhciAqY2hlY2tfcmFuZ2UsIChjaGFyICopICk7CitfUFJPVE9UWVAoIHN0YXRp YyBjaGFyICptYXliZV9jaGVja19yYW5nZSwgKGNoYXIgKikgKTsKKworX1BST1RPVFlQKCBzdGF0 aWMgVk9JRCBtYXliZV9xdWl0LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IGFz aywgKGNoYXIgKikgKTsKKworI2lmbmRlZiBtaW4KKyNkZWZpbmUgbWluKHgseSkgKCh4KSA8ICh5 KSA/ICh4KSA6ICh5KSkKKyNlbmRpZiAvKiBtaW4gKi8KKyNkZWZpbmUgUkFOR0UgIkFCQ0RFRkdI SUpLTE1OT1AiCisjZGVmaW5lIElOVFNJWkUgIHNpemVvZihpbnQpCisjZGVmaW5lIExPTkdTSVpF IHNpemVvZihsb25nKQorI2RlZmluZSBSU0laRSAgICBzaXplb2YoUkFOR0UpCisjZGVmaW5lIFJG Uk9OVCAgIG1pbigoUlNJWkUvMiksTE9OR1NJWkUpCisjZGVmaW5lIFJCQUNLICAgIG1pbigoUlNJ WkUtUkZST05UKSxMT05HU0laRSkKKworY2hhciAqCitkbWFsbG9jKHNpemUpIGludCBzaXplOyB7 CisgICAgY2hhciAqY3A7CisKKyAgICBjcCA9IG1hbGxvYyhzaXplICsgUlNJWkUgKyBJTlRTSVpF KTsKKyAgICBpZiAoY3ApIHsKKyAgICAgICAgY3AgPSBzZXRfcmFuZ2VfY2hlY2soY3AsIHNpemUp OworICAgICAgICBtX2luc2VydChjcCk7CisgICAgfQorICAgIHJldHVybihjcCk7Cit9CisKK2No YXIgKgorZGNhbGxvYyhuZWxlbSwgZWxzaXplKSBpbnQgbmVsZW0sIGVsc2l6ZTsgeworICAgIGNo YXIgKmNwOworCisgICAgY3AgPSBkbWFsbG9jKG5lbGVtICogZWxzaXplKTsKKyAgICBpZiAoY3Ap CisgICAgICAgIG1lbXNldChjcCwgMCwgbmVsZW0gKiBlbHNpemUpOworICAgIHJldHVybihjcCk7 Cit9CisKK2NoYXIgKgorZHJlYWxsb2MoYnAsc2l6ZSkgY2hhciAqYnA7IGludCBzaXplOyB7Cisg ICAgY2hhciAqY3A7CisKKyAgICBpZiAoYnAgPT0gTlVMTCkgeworICAgICAgICBtYXliZV9xdWl0 KCJGcmVlaW5nIE5VTEwgcG9pbnRlciIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZGVsZXRl KGJwKTsKKyAgICAgICAgY3AgPSBjaGVja19yYW5nZShicCk7CisgICAgfQorICAgIGNwID0gcmVh bGxvYyhjcCwgc2l6ZSArIFJTSVpFICsgSU5UU0laRSk7CisgICAgaWYgKGNwKSB7CisgICAgICAg IGNwID0gc2V0X3JhbmdlX2NoZWNrKGNwLCBzaXplKTsKKyAgICAgICAgbV9pbnNlcnQoY3ApOwor ICAgIH0KKyAgICByZXR1cm4oY3ApOworfQorCitWT0lECitkZnJlZShjcCkgY2hhciAqY3A7IHsK KyAgICBpZiAoY3AgPT0gTlVMTCkKKyAgICAgICAgbWF5YmVfcXVpdCgiRnJlZWluZyBOVUxMIHBv aW50ZXIiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3dpdGNoKG1fZGVsZXRlKGNwKSkgeworICAg ICAgICBjYXNlIDA6CisgICAgICAgICAgICBjcCA9IG1heWJlX2NoZWNrX3JhbmdlKGNwKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBjcCA9IGNoZWNr X3JhbmdlKGNwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNpZm5kZWYgQ0tfQU5TSUMKKyAgICByZXR1 cm4oZnJlZShjcCkpOworI2VuZGlmIC8qIENLX0FOU0lDICovCit9CisKK2NoYXIgKgorc2V0X3Jh bmdlX2NoZWNrKGNwLHNpemUpIGNoYXIgKmNwOyBpbnQgc2l6ZTsgeworICAgIHJlZ2lzdGVyIGlu dCBpOworICAgIGludCB0bXAgPSBzaXplOworCisgICAgZm9yKGkgPSAwOyBpIDwgSU5UU0laRTsg aSsrKSB7ICAgICAgLyogc2V0IHRoZSBzaXplIGluIHRoZSBzdHJpbmcgKi8KKyAgICAgICAgY3Bb aV0gPSB0bXAgJiAweGZmOworICAgICAgICB0bXAgPj49IDg7CisgICAgfQorICAgIGNwICs9IElO VFNJWkU7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNraXAgdGhlIHNpemUgKi8KKworICAgIGZv cihpID0gMDsgaSA8IFJGUk9OVDsgaSsrKSAgICAgICAgIC8qIHNldCB0aGUgZnJvbnQgb2YgdGhl IHJhbmdlIGNoZWNrICovCisgICAgICAgIGNwW2ldID0gUkFOR0VbaV07ICAgICAgICAgICAgICAg Lyogc3RyaW5nICovCisKKyAgICBjcCArPSBSRlJPTlQ7ICAgICAgICAgICAgICAgICAgICAgICAv KiBza2lwIHRoZSBmcm9udCByYW5nZSBjaGVjayAqLworCisgICAgZm9yKGkgPSAwOyBpIDwgUkJB Q0s7IGkrKykgICAgICAgICAgLyogc2V0IHRoZSBiYWNrIG9kZiB0aGUgcmFuZ2UgY2hlY2sgKi8K KyAgICAgICAgY3BbaStzaXplXSA9IFJBTkdFW2krUkZST05UXTsKKworICAgIHJldHVybihjcCk7 Cit9CisKKy8qCisgIFB1dCBjYWxscyB0byB0aGlzIHJvdXRpbmUgaW4geW91ciBjb2RlIGFueSBw bGFjZSB3aGVyZSB5b3Ugd2FudCB0bworICBjaGVjayB3aGV0aGVyIHlvdSd2ZSBjb3BpZWQgdG9v IG1hbnkgY2hhcmFjdGVycyBpbnRvIGEgbWFsbG9jJ2Qgc3BhY2UuCisqLworY2hhciAqCitjaGVj a19yYW5nZShjcCkgY2hhciAqY3A7IHsKKyAgICByZWdpc3RlciBjaGFyICpicCA9IGNwIC0gUkZS T05UIC0gSU5UU0laRTsKKyAgICBjaGFyICp4cCA9IGJwOworICAgIHJlZ2lzdGVyIGludCBpOwor ICAgIGludCBzaXplID0gMDsKKworICAgIGZvcihpID0gMCA7IGkgPCBJTlRTSVpFOyBpKyspIHsg ICAgIC8qIGdldCB0aGUgc2l6ZSBvdXQgb2YgdGhlIHN0cmluZyAqLworICAgICAgICBzaXplIDw8 PSA4OworICAgICAgICBzaXplIHw9IGJwW0lOVFNJWkUtaS0xXSAmIDB4ZmY7CisgICAgfQorICAg IGJwICs9IElOVFNJWkU7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBSRlJPTlQ7IGkrKykgICAgICAg ICAvKiBjaGVjayBmcm9udCByYW5nZSBjaGVjayAqLworICAgICAgICBpZiAoYnBbaV0gIT0gUkFO R0VbaV0pIHsKKyAgICAgICAgICAgIG1heWJlX3F1aXQoImxlZnRzaWRlIG1hbGxvYyBidWZmZXIg b3ZlcnJ1biIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBicCArPSBSRlJP TlQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIGZyb250IHJhbmdlIGNoZWNrICovCisK KyAgICBmb3IoaSA9IDA7IGkgPCBSQkFDSzsgaSsrKSAgICAgICAgICAvKiBjaGVjayBiYWNrIHJh bmdlIGNoZWNrICovCisgICAgICAgIGlmIChicFtpK3NpemVdICE9IFJBTkdFW2krUkZST05UXSkg eworICAgICAgICAgICAgbWF5YmVfcXVpdCgicmlnaHRzaWRlIG1hbGxvYyBidWZmZXIgb3ZlcnJ1 biIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICByZXR1cm4oeHApOworfQor CitzdGF0aWMgY2hhciAqCittYXliZV9jaGVja19yYW5nZShjcCkgY2hhciAqY3A7IHsKKyAgICBy ZWdpc3RlciBjaGFyICpicCA9IGNwIC0gUkZST05UIC0gSU5UU0laRTsKKyAgICBjaGFyICp4cCA9 IGJwOworICAgIHJlZ2lzdGVyIGludCBpOworICAgIGludCBzaXplID0gMDsKKworICAgIGZvcihp ID0gMCA7IGkgPCBJTlRTSVpFOyBpKyspIHsgICAgIC8qIGdldCB0aGUgc2l6ZSBvdXQgb2YgdGhl IHN0cmluZyAqLworICAgICAgICBzaXplIDw8PSA4OworICAgICAgICBzaXplIHw9IGJwW0lOVFNJ WkUtaS0xXSAmIDB4ZmY7CisgICAgfQorICAgIGJwICs9IElOVFNJWkU7CisKKyAgICBmb3IoaSA9 IDA7IGkgPCBSRlJPTlQ7IGkrKykgICAgICAgICAvKiBjaGVjayBmcm9udCByYW5nZSBjaGVjayAq LworICAgICAgICBpZiAoYnBbaV0gIT0gUkFOR0VbaV0pIHsKKyAgICAgICAgICAgIHJldHVybihj cCk7CisgICAgICAgIH0KKyAgICBicCArPSBSRlJPTlQ7ICAgICAgICAgICAgICAgICAgICAgICAv KiBza2lwIGZyb250IHJhbmdlIGNoZWNrICovCisKKyAgICBmb3IoaSA9IDA7IGkgPCBSQkFDSzsg aSsrKSAgICAgICAgICAvKiBjaGVjayBiYWNrIHJhbmdlIGNoZWNrICovCisgICAgICAgIGlmIChi cFtpK3NpemVdICE9IFJBTkdFW2krUkZST05UXSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsInJpZ2h0c2lkZSBtYWxsb2MgYnVmZmVyIG92ZXJydW5cbiIpOworICAgICAgICAgICAgYWJv cnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgcmV0dXJuKHhwKTsKK30K KworI2RlZmluZSBCVUNLRVRTIDEwMDAwCitjaGFyICptX3VzZWRbQlVDS0VUU107CitjaGFyICpt X3VzZWQyW0JVQ0tFVFNdOworCitWT0lECittX2luc2VydChjcCkgcmVnaXN0ZXIgY2hhciAqY3A7 IHsKKyAgICByZWdpc3RlciBpbnQgaTsKKworICAgIGlmIChkaXNhYmxlZCkKKyAgICAgICAgcmV0 dXJuOworCisgICAgZm9yKGkgPSAwOyBpIDwgQlVDS0VUUzsgaSsrKQorICAgICAgICBpZiAobV91 c2VkW2ldID09IDApIHsKKyAgICAgICAgICAgIG1fdXNlZFtpXSA9IGNwOworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICB9CisgICAgZGlzYWJsZWQgKys7Cit9CisKK3N0YXRpYyBWT0lECitt X2luc2VydDIoY3ApIHJlZ2lzdGVyIGNoYXIgKmNwOyB7CisgICAgcmVnaXN0ZXIgaW50IGk7CisK KyAgICBpZiAoZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IoaSA9IDA7IGkgPCBC VUNLRVRTOyBpKyspCisgICAgICAgIGlmIChtX3VzZWQyW2ldID09IDApIHsKKyAgICAgICAgICAg IG1fdXNlZDJbaV0gPSBjcDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIGRp c2FibGVkICsrOworfQorCitpbnQKK21fZGVsZXRlKGNwKSByZWdpc3RlciBjaGFyICpjcDsgewor ICAgIHJlZ2lzdGVyIGludCBpOworCisgICAgZm9yKGkgPSAwOyBpIDwgQlVDS0VUUzsgaSsrKQor ICAgICAgICBpZiAobV91c2VkW2ldID09IGNwKSB7CisgICAgICAgICAgICBtX3VzZWRbaV0gPSAw OworICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICB9CisgICAgZm9yKGkgPSAwOyBpIDwg QlVDS0VUUzsgaSsrKQorICAgICAgICBpZiAobV91c2VkMltpXSA9PSBjcCkgeworICAgICAgICAg ICAgbV91c2VkMltpXSA9IDA7CisgICAgICAgICAgICByZXR1cm4oMik7CisgICAgICAgIH0KKyAg ICBpZiAoZGlzYWJsZWQpCisgICAgICAgIHJldHVybigwKTsKKworICAgIG1heWJlX3F1aXQoIkZy ZWVpbmcgdW5tYWxsb2MnZWQgcG9pbnRlciIpOworICAgIHJldHVybigwKTsKK30KKworVk9JRAor bV9pbml0KCkgeworICAgIHJlZ2lzdGVyIGludCBpOworCisgICAgaW5pdGVkID0gMTsKKyAgICBk aXNhYmxlZCA9IDA7CisjaWZkZWYgTkVYVAorICAgIG1hbGxvY19kZWJ1ZygyKzQrOCsxNik7Cisj ZW5kaWYgLyogTkVYVCAqLworCisgICAgZm9yKGkgPSAwOyBpIDwgQlVDS0VUUzsgaSsrKQorICAg ICAgbV91c2VkW2ldID0gMDsKK30KKworVk9JRAorbV9kb25lKCkgeworICAgIHJlZ2lzdGVyIGlu dCBpLGo9MDsKKworICAgIGlmIChkaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvcihp ID0gMDsgaSA8IEJVQ0tFVFM7IGkrKykKKyAgICAgICAgaWYgKG1fdXNlZFtpXSAhPSAwKSB7Cisg ICAgICAgICAgICBpZiAobWVtZGVidWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoaiA9PSAwKQor ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwidW5mcmVlJ2VkIGJ1ZmZlcnMsIGlu ZGljZXM6ICIpOworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCIlZCwgIiwgaSk7Cisg ICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgaWYgKGop CisgICAgICAgIGZwcmludGYoc3RkZXJyLCJcbiIpOworICAgIGZvcihpID0gMDsgaSA8IEJVQ0tF VFM7IGkrKykKKyAgICAgICAgaWYgKG1fdXNlZDJbaV0gIT0gMCkgeworICAgICAgICAgICAgaWYg KG1lbWRlYnVnKSB7CisgICAgICAgICAgICAgICAgaWYgKGogPT0gMCkKKyAgICAgICAgICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsInVuZnJlZSdlZCByZWdpc3RlcmVkIGJ1ZmZlcnMsIGluZGlj ZXM6ICIpOworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCIlZCwgIiwgaSk7CisgICAg ICAgICAgICAgICAgaisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgaWYgKGopCisg ICAgICAgIGZwcmludGYoc3RkZXJyLCJcbiIpOworICAgIGlmIChqKQorICAgICAgICBtYXliZV9x dWl0KCJVbmZyZWUnZWQgbWFsbG9jIGJ1ZmZlcnMiKTsKK30KKworVk9JRAorbV9jaGVja3Jhbmdl cygpIHsKKyAgICBpbnQgaTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgQlVDS0VUUzsgaSsrKQor ICAgICAgICBpZiAobV91c2VkW2ldKQorICAgICAgICAgICAgY2hlY2tfcmFuZ2UobV91c2VkW2ld KTsKK30KKworc3RhdGljIFZPSUQKK21heWJlX3F1aXQoc3RyKSBjaGFyICpzdHI7IHsKKyAgICBk ZWJ1ZyhGMTAwLCJtZGVidWcgbWF5YmVfcXVpdCIsIiIsMCk7CisgICAgaWYgKG1lbWRlYnVnID09 IDApCisgICAgICAgIHJldHVybjsKKyAgICBmcHJpbnRmKHN0ZGVyciwiJXNcbiIsc3RyKTsKKyAg ICBpZiAobWVtZGVidWcgPT0gMSkKKyAgICAgICAgYWJvcnQoKTsKKyAgICBpZiAobWVtZGVidWcg PT0gLTEpCisgICAgICAgIGlmIChhc2soIlF1aXQ/ICIpKQorICAgICAgICAgICAgYWJvcnQoKTsK K30KKworc3RhdGljIGludAorYXNrKHN0cikgY2hhciAqc3RyOyB7CisgICAgY2hhciBidWZbMTAw XTsKKyAgICBGSUxFICppbjsKKyAgICBpbnQgZmQ7CisKKyAgICBmZCA9IGR1cChmaWxlbm8oc3Rk aW4pKTsKKyAgICBpbiA9IGZkb3BlbihmZCwgInIiKTsKKyAgICB3aGlsZSgxKSB7CisgICAgICAg IGZwcmludGYoc3RkZXJyLHN0cik7CisgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICBp ZiAoZmdldHMoYnVmLCA5OSwgaW4pID09IE5VTEwpIC8qIEVPRj8gKi8KKyAgICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgaWYgKGJ1ZlswXSA9PSAnbicgfHwgYnVmWzBdID09ICdOJykgewor ICAgICAgICAgICAgZmNsb3NlKGluKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoYnVmWzBdID09ICd5JyB8fCBidWZbMF0gPT0gJ1knKSB7CisgICAgICAg ICAgICBmY2xvc2UoaW4pOworICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICB9CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCJwbGVhc2UgYW5zd2VyIHkvbi5cbiIpOworICAgIH0KK30KKyNl bmRpZiAvKiBNREVCVUcgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tl cm1pdC05LjAuMzAyL2NrY25ldC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja2NuZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmIwMWE2 Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja2NuZXQuYwpAQCAtMCwwICsxLDE0NDQ3IEBACitjaGFyICpja25ldHYgPSAiTmV0d29yayBz dXBwb3J0LCA5LjAuMjk3LCAxNCBKdWwgMjAxMSI7CisKKy8qICBDIEsgQyBOIEUgVCAgLS0gIE5l dHdvcmsgc3VwcG9ydCAgKi8KKworLyoKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAorICAg IFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsu CisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQg ZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZv ciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qCisgIFJFTUlOREVSOiBBbnkg Y2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB0aGF0IG90aGVyIG1vZHVsZXMgZGVwZW5kIG11c3QK KyAgYWxzbyBiZSBtYWRlIHRvIGNrbG5ldC5jIChmb3IgVk9TKSB1bnRpbCBzdWNoIHRpbWUgYXMg Y2tsbmV0LmMgYW5kIHRoaXMKKyAgbW9kdWxlIGFyZSBtZXJnZWQgYmFjayB0b2dldGhlci4KKwor ICBOT1RFIFRPIENPTlRSSUJVVE9SUzogVGhpcyBmaWxlLCBhbmQgYWxsIHRoZSBvdGhlciBzaGFy ZWQgKGNrYyBhbmQgY2t1KQorICBDLUtlcm1pdCBzb3VyY2UgZmlsZXMsIG11c3QgYmUgY29tcGF0 aWJsZSB3aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQKKyAgb25seSAjaWZkZWYsICNl bHNlLCAjZW5kaWYsICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2UgZG8gbm90IHVzZSAjaWYs CisgIGxvZ2ljYWwgb3BlcmF0b3JzLCBvciBvdGhlciBwcmVwcm9jZXNzb3IgZmVhdHVyZXMgaW4g dGhpcyBtb2R1bGUuICBBbHNvLAorICBkb24ndCB1c2UgYW55IEFOU0kgQyBjb25zdHJ1Y3RzIGV4 Y2VwdCB3aXRoaW4gI2lmZGVmIENLX0FOU0lDLi4jZW5kaWYuCisKKyAgQXV0aG9yczoKKworICBG cmFuayBkYSBDcnV6IChmZGNAY29sdW1iaWEuZWR1KSwKKyAgICBDb2x1bWJpYSBVbml2ZXJzaXR5 IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCisgIEplZmZyZXkg RSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pIC0tIFByaW1hcnkgCisgICAg bWFpbnRhaW5lci9kZXZlbG9wZXIgc2luY2UgYWJvdXQgMTk5Ni4KKyAgbmV0b3BlbigpIHJvdXRp bmUgZm9yIFRDUC9JUCBvcmlnaW5hbGx5IGJ5IEtlbiBZYXAsIFJvY2hlc3RlciBVbml2ZXJzaXR5 CisgICAgKGtlbkBjcy5yb2NoZXN0ZXIuZWR1KSAobm8gbG9uZ2VyIGF0IHRoYXQgYWRkcmVzcyku CisgIE1pc3NpbmcgcGllY2VzIGZvciBFeGNlbGFuIHNvY2tldHMgbGlicmFyeSBmcm9tIFdpbGxp YW0gQmFkZXIuCisgIFRlbG5ldCBwcm90b2NvbCBieSBGcmFuayBkYSBDcnV6IGFuZCBKZWZmcmV5 IEFsdG1hbi4KKyAgUmxvZ2luIHByb3RvY29sIGJ5IEplZmZyZXkgRSBBbHRtYW4uCisgIFNTTCBz dXBwb3J0IGFkYXB0ZWQgYnkgSmVmZnJleSBFIEFsdG1hbiBmcm9tIHdvcmsgZG9uZSBieQorICAg IFRpbSBIdWRzb24gPHRqaEBjcnlwdG9zb2Z0LmNvbT4gKzYxIDcgMzI3ODE1ODEKKyAgVExTIHN1 cHBvcnQgYnkgSmVmZnJleSBFIEFsdG1hbi4KKyAgSFRUUCBzdXBwb3J0IGJ5IEplZmZyZXkgRSBB bHRtYW4uCisgIFRHViBNdWx0aU5ldCBjb2RlIGJ5IEZyYW5rIGRhIENydXouCisgIE11bHRpTmV0 IGNvZGUgYWRhcHRlZCB0byBXSU4vVENQIGJ5IFJheSBIdW50ZXIgb2YgVFdHLgorICBNdWx0aU5l dCBjb2RlIGFkYXB0ZWQgdG8gREVDIFRDUC9JUCBieSBMZWUgVGliYmVydCBvZiBERUMgYW5kIEZy YW5rIGRhIENydXouCisgIFRDUC9JUCBzdXBwb3J0IGFkYXB0ZWQgdG8gSUJNIFRDUC9JUCAxLjIu MSwyLjAgZm9yIE9TLzIgYnkgS2FpIFV3ZSBSb21tZWwuCisgIENNVS1PcGVuVk1TL0lQIG1vZGlm aWNhdGlvbnMgYnkgTWlrZSBPJ01hbGxleSwgRGlnaXRhbCAoREVDKS4KKyAgWC4yNSBzdXBwb3J0 IGJ5IE1hcmNlbGxvIEZydXRpZywgQ2F0aG9saWMgVW5pdmVyc2l0eSwKKyAgICBSaW8gZGUgSmFu ZWlybywgQnJhemlsIChmcnV0aWdAcm5wLmltcGEuYnIpIHdpdGggZml4ZXMgZnJvbQorICAgIFN0 ZWZhYW4gRWVja2VscywgRXVyb2tvbSwgTHV4ZW1ib3VyZy4KKyAgICBEYXZpZCBMYW5lIGFkZGVk IHN1cHBvcnQgZm9yIFN0cmF0dXMgVk9TIFguMjUgMTk5Ni4KKyAgICBTdGVwaGVuIFJpZWhtIGFk ZGVkIHN1cHBvcnQgZm9yIElCTSBBSVggWC4yNSBpbiBBcHJpbCAxOTk4LgorICBPdGhlciBjb250 cmlidXRpb25zIGFzIGluZGljYXRlZCBpbiB0aGUgY29kZS4KKyovCisjZGVmaW5lIENLQ05FVF9D CisjaW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVkZSAiY2tjZGViLmgiCisjaW5jbHVkZSAiY2tj a2VyLmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCisjaWZkZWYgSTM4NklYICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSGFzIHRvIGNvbWUgYmVmb3JlIGNrY25ldC5oIGluICovCisjaW5jbHVk ZSA8ZXJybm8uaD4gICAgICAgICAgICAgICAgICAgICAgLyogdGhpcyB2ZXJzaW9uLCBidXQgYWZ0 ZXIgaW4gb3RoZXJzICovCisjZW5kaWYgLyogSTM4NklYICovCisjaW5jbHVkZSAiY2tjbmV0Lmgi ICAgICAgICAgICAgICAgICAgICAgLyogd2hpY2ggaW5jbHVkZXMgY2tjdGVsLmggKi8KKyNpZmRl ZiBDS19TU0wKKyNpbmNsdWRlICJja19zc2wuaCIKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lm ZGVmIENLX0ROU19TUlYKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorI2luY2x1ZGUgPHdzaGVscGVy Lmg+CisjZWxzZSAvKiBOVCAqLworLyogIUVycm9yIE9TLzIgZG9lcyBub3Qgc3VwcG9ydCBETlMg U2VydmljZSBSZWNvcmRzLiAqLworI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBPUzIgKi8KKyNp bmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpZmRlZiBVU0VfTkFNRVNFUl9DT01QQVQKKyNpbmNsdWRl IDxhcnBhL25hbWVzZXJfY29tcGF0Lmg+CisjZW5kaWYJLyogVVNFX05BTUVTRVJfQ09NUEFUICov CisKKyNpZmRlZiBNSU5JWDMKKyNpbmNsdWRlIDxuZXQvZ2VuL3Jlc29sdi5oPgorI2luY2x1ZGUg PG5ldC9nZW4vbmFtZXNlci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNp bmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZiAvKiBNSU5JWCAzICovCisKKyNpZm5kZWYgUFMyQUlY MTAKKyNpZm5kZWYgQlNENAorI2lmbmRlZiBJMzg2SVgKKyNpZm5kZWYgUlRBSVgKKyNpbmNsdWRl IDxuZXRkYi5oPgorI2VuZGlmIC8qIFJUQUlYICovCisjZW5kaWYgLyogSTM4NklYICovCisjZW5k aWYgLyogQlNENCAqLworI2VuZGlmIC8qIFBTMkFJWDEwICovCisjZW5kaWYgLyogT1MyICovCisj aWZuZGVmIFRfU1JWCisjZGVmaW5lIFRfU1JWIDMzCisjZW5kaWYgLyogVF9TUlYgKi8KKyNpZm5k ZWYgVF9UWFQKKyNkZWZpbmUgVF9UWFQgMTYKKyNlbmRpZiAvKiBUX1RYVCAqLworCisvKiBmb3Ig b2xkIFVuaXhlcyBhbmQgZnJpZW5kcyAuLi4gKi8KKyNpZm5kZWYgTUFYSE9TVE5BTUVMRU4KKyNk ZWZpbmUgTUFYSE9TVE5BTUVMRU4gNjQKKyNlbmRpZiAvKiBNQVhIT1NUTkFNRUxFTiAqLworCisj ZGVmaW5lIE1BWF9ETlNfTkFNRUxFTiAoMTUqKE1BWEhPU1ROQU1FTEVOICsgMSkrMSkKKyNlbmRp ZiAvKiBDS19ETlNfU1JWICovCisKKyNpZmRlZiBOT05FVAorI2lmZGVmIFRDUElQTElCCisjdW5k ZWYgVENQSVBMSUIKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworI2VuZGlmIC8qIE5PTkVUICovCisK KyNpZm5kZWYgTk9NSEhPU1QKKyNpZmRlZiBkYXRhZ2VuZXJhbAorI2RlZmluZSBOT01ISE9TVAor I2Vsc2UKKyNpZmRlZiBIUFVYNVdJTlRDUAorI2RlZmluZSBOT01ISE9TVAorI2VuZGlmIC8qIEhQ VVg1V0lOVENQICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBOT01ISE9T VCAqLworCisjaWZkZWYgSU5BRERSWAorICBzdHJ1Y3QgaW5fYWRkciBpbmFkZHJ4OworI2VuZGlm IC8qIElOQUREUlggKi8KKworaW50IHR0bmV0ID0gTkVUX05PTkU7ICAgICAgICAgICAgICAgICAg IC8qIE5ldHdvcmsgdHlwZSAqLworaW50IHR0bnByb3RvID0gTlBfREVGQVVMVDsgICAgICAgICAg ICAgIC8qIE5ldHdvcmsgdmlydHVhbCB0ZXJtaW5hbCBwcm90b2NvbCAqLworCisvKiAwID0gZG9u J3QgbG93ZXJjYXNlIHVzZXJuYW1lIGZvciBSbG9naW4vVGVsbmV0IHByb3RvY29sICovCisvKiBu b256ZXJvID0gZG8gbG93ZXJjYXNlIGl0LiAgQWRkIGEgU0VUIGNvbW1hbmQgaWYgbmVjZXNzYXJ5 Li4uICovCisjaWZkZWYgVk1TCitpbnQgY2tfbGNuYW1lID0gMTsKKyNlbHNlCitpbnQgY2tfbGNu YW1lID0gMDsKKyNlbmRpZiAvKiBWTVMgKi8KKworZXh0ZXJuIGludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEV4dGVybmFsIHZhcmlhYmxlcyAqLworICBkdXBsZXgsIGRlYnNlcywg c2VzbG9nLCBzZXNzZnQsIHdhc2Nsb3NlZCwKKyAgdHR5ZmQsIHF1aWV0LCBtc2dmbGcsIHdoYXQs IG5ldHR5cGUsIHR0bWRtOworI2lmZGVmIElLU0QKK2V4dGVybiBpbnQgaW5zZXJ2ZXI7CisjZW5k aWYgLyogSUtTRCAqLworCitjaGFyIG15aXBhZGRyWzIwXSA9IHsgJ1wwJyB9OyAgICAgICAgICAg LyogR2xvYmFsIGNvcHkgb2YgbXkgSVAgYWRkcmVzcyAqLworY2hhciBob3N0aXBhZGRyWzY0XSA9 IHsgJ1wwJyB9OwkJLyogR2xvYmFsIGNvcHkgb2YgcmVtb3RlIElQIGFkZHJlc3MgKi8KKworI2lm ZGVmIE5FVENPTk4KKy8qIERvbid0IG5lZWQgYW55IG9mIHRoaXMgaWYgdGhlcmUgaXMgbm8gbmV0 d29yayBzdXBwb3J0LiAqLworCisjaWZuZGVmIE9TMgorLyogQ3VycmVudCBmZC1zd2FwcGluZyBo YWNrIGlzIG5vdCB0aHJlYWQtc2FmZSAqLworI2RlZmluZSBIVFRQX0JVRkZFUklORworI2VuZGlm CS8qIE9TMiAqLworCisjaWZkZWYgSFRUUF9CVUZGRVJJTkcKKyNkZWZpbmUgSFRUUF9JTkJVRkxF TiA4MTkyCitzdGF0aWMgY2hhciBodHRwX2luYnVmW0hUVFBfSU5CVUZMRU5dOworc3RhdGljIGlu dCBodHRwX2J1ZnAgPSAwLCBodHRwX2NvdW50OworI2VuZGlmCS8qIEhUVFBfQlVGRkVSSU5HICov CisKKy8qCisgIE5FVExFQlVGIGlzIChtdXN0IGJlKSBkZWZpbmVkIGZvciB0aG9zZSBwbGF0Zm9y bXMgdGhhdCBjYWxsIHRoaXMKKyAgbW9kdWxlIHRvIGRvIG5ldHdvcmsgaS9vIChlLmcuIG5ldGlu YygpLCBuZXR0Y2hrKCksIGV0YykgcmF0aGVyCisgIHRoYW4gZG9pbmcgaXQgdGhlbXNlbHZlcyAo dHRpbmMoKSwgdHRjaGsoKSwgZXRjKS4gIEluIHRoaXMgY2FzZQorICB0aGUgVGVsbmV0IGxvY2Fs LWVjaG8gYnVmZmVycyBhbmQgcm91dGluZXMgYXJlIGRlZmluZWQgYW5kIHJlZmVyZW5jZWQKKyAg aGVyZSwgcmF0aGVyIHRoYW4gaW4gdGhlIGNrP3Rpby5jIG1vZHVsZS4KKyovCisjaWZkZWYgTkVU TEVCVUYKKyNkZWZpbmUgTEVCVUZTSVogNDA5NgoraW50IHR0cHVzaCA9IC0xLCBsZV9kYXRhID0g MDsgICAgICAgICAgIC8qIFRoZXNlIGFyZSBzZWVuIGZyb20gb3V0c2lkZSAqLworc3RhdGljIENI QVIgbGVfYnVmW0xFQlVGU0laXTsgICAgICAgICAgIC8qIFRoZXNlIGFyZSB1c2VkIGludGVybmFs bHkgKi8KK3N0YXRpYyBpbnQgbGVfc3RhcnQgPSAwLCBsZV9lbmQgPSAwOworaW50IHR0X3B1c2hf aW5pdGVkID0gMDsKKyNlbmRpZiAvKiBORVRMRUJVRiAqLworCisjaWZkZWYgQ0tfU09DS1MgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU09DS1MgSW50ZXJuZXQgcmVsYXkgcGFja2FnZSAqLwor I2lmZGVmIENLX1NPQ0tTNSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNPQ0tTIDUgKi8KKyNk ZWZpbmUgYWNjZXB0ICBTT0NLU2FjY2VwdAorI2RlZmluZSBiaW5kICAgIFNPQ0tTYmluZAorI2Rl ZmluZSBjb25uZWN0IFNPQ0tTY29ubmVjdAorI2RlZmluZSBnZXRzb2NrbmFtZSBTT0NLU2dldHNv Y2tuYW1lCisjZGVmaW5lIGxpc3RlbiBTT0NLU2xpc3RlbgorI2Vsc2UgIC8qIE5vdCBTT0NLUyA1 ICovCisjZGVmaW5lIGFjY2VwdCAgUmFjY2VwdAorI2RlZmluZSBiaW5kICAgIFJiaW5kCisjZGVm aW5lIGNvbm5lY3QgUmNvbm5lY3QKKyNkZWZpbmUgZ2V0c29ja25hbWUgUmdldHNvY2tuYW1lCisj ZGVmaW5lIGxpc3RlbiBSbGlzdGVuCisjZW5kaWYgLyogQ0tfU09DS1M1ICovCisjZW5kaWYgLyog Q0tfU09DS1MgKi8KKworI2lmZGVmIERFQ19UQ1BJUAorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNs dWRlIDxpbmV0Lmg+CisjZW5kaWYgLyogREVDX1RDUElQICovCisKKy8qIEFsc28gc2VlIGNrY25l dC5oIC0tIGhtbW0sIHdoeSBkb24ndCB3ZSBhbHdheXMgaW5jbHVkZSBpbmV0Lmg/ICovCisKKyNp ZmRlZiBIUFVYCisjaWZuZGVmIEhQVVg3ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFBV WCA3LjAwIGRvZXNuJ3QgaGF2ZSBpdCAqLworI2lmbmRlZiBIUFVYNiAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEhQVVggNi4wMCBkb2Vzbid0IGhhdmUgaXQgKi8KKyNpbmNsdWRlIDxhcnBh L2luZXQuaD4gICAgICAgICAgICAgICAgICAvKiBGb3IgaW5ldF9udG9hKCkgcHJvdG90eXBlICov CisjZW5kaWYgLyogSFBVWDYgKi8KKyNlbmRpZiAvKiBIUFVYNyAqLworI2VuZGlmIC8qIEhQVVgg Ki8KKworI2lmZGVmIENNVV9UQ1BJUAorI2luY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZiAvKiBDTVVf VENQSVAgKi8KKworI2lmbmRlZiBOT0RDTFRJTUVWQUwKKyNpZmRlZiBEQ0xUSU1FVkFMICAgICAg ICAgICAgICAgICAgICAgICAvKiBVbml4V2FyZSA3ICovCitzdHJ1Y3QgdGltZXZhbCB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogQW5kIGRlZmluZSB0aGVzZSBvdXJzZWx2ZXMuICovCisgICAg bG9uZyB0dl9zZWM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogKHNlZSBjb21tZW50cyBpbiBj a3V0aW8uYykgKi8KKyAgICBsb25nIHR2X3VzZWM7Cit9Oworc3RydWN0IHRpbWV6b25lIHsKKyAg ICBpbnQgdHpfbWludXRlc3dlc3Q7CisgICAgaW50IHR6X2RzdHRpbWU7Cit9OworI2VuZGlmIC8q IERDTFRJTUVWQUwgKi8KKyNlbmRpZiAvKiBOT0RDTFRJTUVWQUwgKi8KKworI2lmZGVmIFdJTlRD UAorCisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8 c3lzL3RpbWUuaD4KKy8qCisgIFRoZSBXSU4vVENQIGNvZGUgcGF0aCBpcyB0aGUgc2FtZSBhcyB0 aGF0IGZvciBNdWx0aU5ldC4KKyAgT25seSB0aGUgcm91dGluZSBuYW1lcyBoYXZlIGNoYW5nZWQg Li4uCisqLworI2RlZmluZSBzb2NrZXRfcmVhZCAgICAgbmV0cmVhZAorI2RlZmluZSBzb2NrZXRf aW9jdGwgICAgaW9jdGwKKyNkZWZpbmUgc29ja2V0X3dyaXRlICAgIG5ldHdyaXRlCisjZGVmaW5l IHNvY2tldF9jbG9zZSAgICBuZXRjbG9zZQorCisjaWZkZWYgT0xEX1RXRyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBzb21lIHJvdXRpbmVzIGhhdmUgZXZvbHZlZCAqLworICAgICAgICBleHRl cm4gaW50IHZtc2Vycm5vLCB1ZXJybm87CisjZGVmaW5lIHNvY2tldF9lcnJubyAgICB1ZXJybm8K KyNkZWZpbmUgc29ja2V0X3BlcnJvciAgIHBlcnJvciAgICAgICAgIC8qIHdoaWNoIHVzZXMgZXJy bm8sIG5vdCB1ZXJybm8hICovCisjZWxzZQorI2RlZmluZSBzb2NrZXRfZXJybm8gICAgZXJybm8K KyNkZWZpbmUgc29ja2V0X3BlcnJvciAgIHdpbiRwZXJyb3IKKyNlbmRpZiAvKiBPTERfVFdHICov CisKKyNlbHNlIC8qIE5vdCBXSU5UQ1AgKi8KKworI2lmZGVmIE9TRjEzCisjaWZkZWYgQ0tfQU5T SUMKKyNpZmRlZiBfTk9fUFJPVE8KKyN1bmRlZiBfTk9fUFJPVE8KKyNlbmRpZiAvKiBfTk9fUFJP VE8gKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIE9TRjEzICovCisKKyNpZm5k ZWYgSTM4NklYCisjaWZuZGVmIEhQVVhQUkU2NQorI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJy b3IgbnVtYmVyIHN5bWJvbHMgKi8KKyNlbHNlCisjaWZuZGVmIEVSUk5PX0lOQ0xVREVECisjaW5j bHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLworI2VuZGlmCS8qIEVS Uk5PX0lOQ0xVREVEICovCisjZW5kaWYJLyogSFBVWFBSRTY1ICovCisjZW5kaWYgLyogSTM4NklY ICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4gICAgICAgICAgICAgICAgICAgICAvKiBFdmVyeWJv ZHkgbmVlZHMgdGhpcyAqLworCisjaWZkZWYgWklMT0cgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogWmlsb2cgaGFzIGRpZmZlcmVudCBuYW1lIGZvciB0aGlzICovCisjaW5jbHVkZSA8c2V0 cmV0Lmg+CisjZWxzZQorI2luY2x1ZGUgPHNldGptcC5oPgorI2VuZGlmIC8qIFpJTE9HICovCisK KyNlbmRpZiAvKiBXSU5UQ1AgKi8KKworI2lmZGVmIGRhdGFnZW5lcmFsICAgICAgICAgICAgICAg ICAgICAgIC8qIERhdGEgR2VuZXJhbCBBT1MvVlMgKi8KKyNpbmNsdWRlIDw6dXNyOmluY2x1ZGU6 dnNfdGNwX2Vycm5vLmg+CisjaW5jbHVkZSA8OnVzcjppbmNsdWRlOnN5czp2c190Y3BfdHlwZXMu aD4KKyNpZmRlZiBTRUxFQ1QKKy8qCisgIE5PVEU6IFRoaXMgY2FuIGJlIGNvbXBpbGVkIGFuZCBs aW5rZWQgT0sgd2l0aCBTRUxFQ1QgZGVmaW5lZAorICBidXQgaXQgZG9lc24ndCB3b3JrIGF0IGFs bC4gIEFueWJvZHkgd2hvIGNhcmVzIGFuZCBrbm93cyBob3cKKyAgdG8gZml4IGl0LCBmZWVsIGZy ZWUuCisqLworI2luY2x1ZGUgPDp1c3I6aW5jbHVkZTpzeXM6dnNfdGNwX3RpbWUuaD4KKyNlbmRp ZiAvKiBTRUxFQ1QgKi8KKyNpbmNsdWRlIDw6dXNyOmluY2x1ZGU6c3lzOnNvY2tldC5oPgorI2lu Y2x1ZGUgPDp1c3I6aW5jbHVkZTpuZXRpbmV0OmluLmg+CisjaW5jbHVkZSA8OnVzcjppbmNsdWRl Om5ldGRiLmg+CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworI2lmbmRlZiBzb2NrZXRfZXJy bm8KKyNkZWZpbmUgc29ja2V0X2Vycm5vIGVycm5vCisjZW5kaWYgLyogc29ja2V0X2Vycm5vICov CisKKyNpZmRlZiBUTkNPREUKK2V4dGVybiBpbnQgdG5fZGViOworI2VuZGlmIC8qIFROQ09ERSAq LworCitpbnQgdGNwX3JkbnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV2ZXJzZSBE TlMgbG9va3VwICovCisjaWZkZWYgREVDX1RDUElQX09MRAorICAgIFNFVF9PRkYgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIFVDWCAqLworI2Vs c2UKKyAgICAgU0VUX0FVVE8KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKyAgICAgIDsKKyNpZmRl ZiBDS19ETlNfU1JWCitpbnQgdGNwX2Ruc19zcnYgPSBTRVRfT0ZGOworI2VuZGlmIC8qIENLX0RO U19TUlYgKi8KKworX1BST1RPVFlQKCBjaGFyICogY21jdnRkYXRlLCAoY2hhciAqLCBpbnQpICk7 CisKKyNpZmRlZiBSTE9HQ09ERQorX1BST1RPVFlQKCBpbnQgcmxvZ19jdHJsLCAoQ0hBUiAqLCBp bnQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgcmxvZ19vb2IsIChDSEFSICosIGludCkgKTsK KyNpZm5kZWYgVENQSVBMSUIKK19QUk9UT1RZUCggc3RhdGljIFNJR1RZUCBybG9nb29iaCwgKCBp bnQgKSApOworI2VuZGlmIC8qIFRDUElQTElCICovCitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgcmxv Z19pbmksIChDSEFSICosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzb2NrYWRkcl9pbiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNvY2thZGRyX2luICopICk7CitpbnQgcmxvZ19tb2RlID0gUkxfQ09PS0VEOworaW50IHJs b2dfc3RvcHBlZCA9IDA7CitpbnQgcmxvZ19pbmJhbmQgPSAwOworI2VuZGlmIC8qIFJMT0dDT0RF ICovCisKKyNpZm5kZWYgTk9JQ1AKK2V4dGVybiBpbnQgZG9jb254OyAgICAgICAgICAgICAgICAg ICAgICAvKiBDT05ORUNULWNsYXNzIGNvbW1hbmQgYWN0aXZlICovCisjZW5kaWYgLyogTk9JQ1Ag Ki8KKworI2lmZGVmIElCTVgyNQorLyogVGhpcyB2YXJpYWJsZSBzaG91bGQgcHJvYmFibHkgYmUg Z2VuZXJhbGlzZWQgZm9yIHRydWUgY2xpZW50L3NlcnZlcgorICogc3VwcG9ydCAtIGllOiB0aGUg ZmQgb2YgdGhlIGxpc3RlbmluZyBzZXJ2ZXIsIGFjY2VwdGVkIGNhbGxzIHNob3VsZAorICogYmUg Zm9ya2VkIG9yIGF0IGxlYXN0IGhhbmRsZWQgdmlhIGEgc2Vjb25kIGZkIChmb3IgSUJNJ3MgWC4y NSAtCisgKiB0dHlmZCBhbHdheXMgaG9sZHMgdGhlIGFjdGl2ZSBmZCAtIGllIHRoZSBzZXJ2ZXIg YmVjb21lcyBpbmFjdGl2ZQorICogYXMgbG9uZyBhcyBhIGNsaWVudCBpcyBjb25uZWN0ZWQsIGFu ZCBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiB3aGVuIHRoZQorICogY29ubmVjdGlvbiBpcyBjbG9zZWQp CisgKi8KK2ludCB4MjVzZXJ2ZXJmZCA9IDA7ICAgICAgICAgICAgLyogZXh0ZXJuIGluIGNrY25l dC5oICovCitpbnQgeDI1c2Vxbm8gPSAwOyAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gc2Vx dWVuY2UgbnVtYmVyICovCitpbnQgeDI1bGFzdG1zZyA9IC0xOyAgICAgICAgICAgIC8qIEEgY2hl YXBza2F0ZSdzIHN0YXRlIHRhYmxlICovCisKKyNkZWZpbmUgWDI1X0NMT1NFRCAgICAgIDAgICAg ICAgLyogRGVmYXVsdCBzdGF0ZTogbm8gY29ubmVjdGlvbiwgbm8gU1RSRUFNICovCisjZGVmaW5l IFgyNV9TRVRVUCAgICAgICAxICAgICAgIC8qIFguMjUgaGFzIGJlZW4gc2V0IHVwIChubyBjb25u ZWN0aW9uKSAqLworI2RlZmluZSBYMjVfQ09OTkVDVEVEICAgMiAgICAgICAvKiBYLjI1IGNvbm5l Y3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQgKi8KK2ludCB4MjVfc3RhdGUgPSBYMjVfQ0xPU0VE OyAgICAgLyogRGVmYXVsdCBzdGF0ZSAqLworI2VuZGlmIC8qIElCTVgyNSAqLworCisjaWZuZGVm IERFQlVHCisjZGVmaW5lIGRlYmxvZyAwCisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIENL X05BV1MgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZ290aWF0ZSBBYm91dCBXaW5kb3cg U2l6ZSAqLworI2lmZGVmIFJMT0dDT0RFCitfUFJPVE9UWVAoIGludCBybG9nX25hd3MsICh2b2lk KSApOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogQ0tfTkFXUyAqLworCisjaWZk ZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHRlcm1pbmFsIHR5cGUg bmFtZSBzdHJpbmcgKi8KKyNpbmNsdWRlICJja3V1c3IuaCIKKyNpZm5kZWYgTlQKKyNpbmNsdWRl IDxvczIuaD4KKyN1bmRlZiBDT01NRU5UCisjZW5kaWYgLyogTlQgKi8KKyNpbmNsdWRlICJja29j b24uaCIKK2V4dGVybiBpbnQgdHRfdHlwZSwgbWF4X3R0OworZXh0ZXJuIHN0cnVjdCB0dF9pbmZv X3JlYyB0dF9pbmZvW107CitleHRlcm4gY2hhciB0dG5hbWVbXTsKKyNlbHNlCisjaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KKyNpbmNsdWRlICJja3V1c3IuaCIKKyNlbmRpZiAvKiBDS19BVVRIRU5U SUNBVElPTiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgTlQKK2V4dGVybiBpbnQgd2lu c29ja192ZXJzaW9uOworI2VuZGlmIC8qIE5UICovCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElP TgorI2luY2x1ZGUgImNrdWF0aC5oIgorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisK KyNpbmNsdWRlICJja2NzaWcuaCIKKworI2lmbmRlZiBPUzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZvciB0aW1lb3V0IGxvbmdqdW1wcyAqLworc3RhdGljIGNram1wYnVmIG5qYnVm OworI2VuZGlmIC8qIE9TMiAqLworCisjZGVmaW5lIE5BTUVDUFlMIDEwMjQgICAgICAgICAgICAg ICAgICAgLyogTG9jYWwgY29weSBvZiBob3N0bmFtZSAqLworY2hhciBuYW1lY29weVtOQU1FQ1BZ TF07ICAgICAgICAgICAgICAgIC8qIFJlZmVyZW5jZWQgYnkgY2tjdGVsLmMgKi8KK2NoYXIgbmFt ZWNvcHkyW05BTUVDUFlMXTsJCS8qIFJlZmVyZW5jZWQgYnkgY2tjdGVsLmMgKi8KKyNpZm5kZWYg Tk9IVFRQCitjaGFyIGh0dHBfaG9zdF9wb3J0W05BTUVDUFlMXTsgICAgICAgICAgLyogb3JpZyBo b3N0L3BvcnQgbmVjZXNzYXJ5IGZvciBodHRwICovCitjaGFyIGh0dHBfaXBbMjBdID0geyAnXDAn IH07ICAgICAgICAgICAgLyogaXAgYWRkcmVzcyBvZiBob3N0ICovCitjaGFyIGh0dHBfcG9ydCA9 IDA7CitpbnQgIGh0dHBfc3NsID0gMDsKK2NoYXIgKiBodHRwX2FnZW50ID0gMDsKK2ludCAgaHR0 cGZkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2NrZXQgZm9yIGh0dHAgY29ubmVj dGlvbnMgKi8KK2ludCAgaHR0cF9jb2RlID0gMDsKKyNkZWZpbmUgSFRUUEJVRkxFTiAgMTAyNAor Y2hhciBodHRwX3JlcGx5X3N0cltIVFRQQlVGTEVOXSA9ICIiOworI2VuZGlmIC8qIE5PSFRUUCAq LworCitjaGFyIGlwYWRkclsyMF0gPSB7ICdcMCcgfTsgICAgICAgICAgICAgLyogR2xvYmFsIGNv cHkgb2YgSVAgYWRkcmVzcyAqLwordW5zaWduZWQgbG9uZyBteXhpcGFkZHIgPSAwTDsgICAgICAg ICAgIC8qIERpdHRvIGFzIGEgbnVtYmVyICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworCitjaGFy ICp0Y3BfYWRkcmVzcyA9IE5VTEw7ICAgICAgICAgICAgICAgLyogUHJlZmVycmVkIElQIEFkZHJl c3MgKi8KK2V4dGVybiBjaGFyIHVpZGJ1ZltdOyAgICAgICAgICAgICAgICAgICAvKiBVc2VyIElE IGJ1ZmZlciAqLworZXh0ZXJuIGNoYXIgcHdidWZbXTsgICAgICAgICAgICAgICAgICAgIC8qIFBh c3N3b3JkIGJ1ZmZlciAqLworCisjaWZuZGVmIE5PSFRUUAorY2hhciAqIHRjcF9odHRwX3Byb3h5 ID0gTlVMTDsgICAgICAgICAgIC8qIE5hbWVbOnBvcnRdIG9mIGh0dHAgcHJveHkgc2VydmVyICov CitpbnQgICAgdGNwX2h0dHBfcHJveHlfZXJybm8gPSAwOworY2hhciAqIHRjcF9odHRwX3Byb3h5 X3VzZXIgPSBOVUxMOworY2hhciAqIHRjcF9odHRwX3Byb3h5X3B3ZCAgPSBOVUxMOworY2hhciAq IHRjcF9odHRwX3Byb3h5X2FnZW50ID0gTlVMTDsKKyNkZWZpbmUgSFRUUENQWUwgMTAyNAorc3Rh dGljIGNoYXIgcHJveHljb3B5W0hUVFBDUFlMXTsKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKworI2lm ZGVmIE9TMgorZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNbXTsKK2V4dGVybiBpbnQgdHRf c3RhdHVzW1ZOVU1dOworI2Vsc2UgLyogT1MyICovCitleHRlcm4gaW50IHR0X3Jvd3MsIHR0X2Nv bHM7ICAgICAgICAgICAgLyogRXZlcnlib2R5IGhhcyB0aGlzICovCisjZW5kaWYgLyogT1MyICov CisKK2V4dGVybiBpbnQgY21kX2NvbHMsIGNtZF9yb3dzOworCisjaWZkZWYgU1RSRUFNSU5HICAg ICAgICAgICAgICAgICAgICAgICAgLyogVXNlIGJsb2NraW5nIHdyaXRlcyBmb3Igc3RyZWFtaW5n ICovCitleHRlcm4gaW50IHN0cmVhbWluZzsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKworI2lm ZGVmIE5UCitleHRlcm4gaW50IFdTQVNhZmVUb0NhbmNlbDsKK2ludCB3aW45NXNlbGVjdGJ1ZyA9 IDA7ICAgICAgICAgICAgICAgICAvKiBGb3IgVENQL0lQIHN0YWNrcyB3aG9zZSBzZWxlY3QoKSAq LworLyogYWx3YXlzIGZhaWxzIG9uIHdyaXRlIHJlcXVlc3RzIHN1Y2ggYXMgQ2lzY28gYW5kIFF1 YXJ0ZXJkZWNrICovCisjZGVmaW5lIHN0cmljbXAgX3N0cmljbXAKKyNlbmRpZiAvKiBOVCAqLwor CisjaWZuZGVmIE5PVENQT1BUUworCisvKiBTa2lwIGFsbCB0aGlzIGlmIE5PVENQT1BUUyBzcGVj aWZpZWQuICovCisKKyNpZmRlZiBTT0xfU09DS0VUCisKKyNpZmRlZiBUQ1BfTk9ERUxBWQoraW50 IHRjcF9ub2RlbGF5ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIE5hZ2xlIGFsZ29yaXRobSBU Q1BfTk9ERUxBWSAqLworI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisKKyNpZmRlZiBTT19ET05U Uk9VVEUKK2ludCB0Y3BfZG9udHJvdXRlID0gMDsKKyNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8K KworI2lmZGVmIFNPX0xJTkdFUgoraW50IHRjcF9saW5nZXIgID0gMDsgICAgICAgICAgICAgICAg ICAgIC8qIFNPX0xJTkdFUiAqLworaW50IHRjcF9saW5nZXJfdG1vID0gMDsgICAgICAgICAgICAg ICAgIC8qIFNPX0xJTkdFUiB0aW1lb3V0ICovCisjZW5kaWYgLyogU09fTElOR0VSICovCisKKyNp ZmRlZiBIUFVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdXQgdGhlIGRhdGEgc3Ry dWN0dXJlcyAqLworI2lmbmRlZiBIUFVYOCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5l ZWRlZCBmb3IgbGluZ2VyIGFyZSBub3QgKi8KKyNpZm5kZWYgSFBVWDkgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBkZWZpbmVkIGluIEhQLVVYIHZlcnNpb25zICovCisjaWZuZGVmIEhQVVgx MCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpb3IgdG8gOC4wMC4gKi8KKyNpZmRlZiBT T19MSU5HRVIKKyN1bmRlZiBTT19MSU5HRVIKKyNlbmRpZiAvKiBTT19MSU5HRVIgKi8KKyNlbmRp ZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlmIC8qIEhQVVg4ICovCisj ZW5kaWYgLyogSFBVWCAqLworCisjaWZuZGVmIFNPX09PQklOTElORSAgICAgICAgICAgICAgICAg ICAgLyogSG9wZWZ1bGx5IG9ubHkgSFAtVVggNy4wICovCisjZGVmaW5lIFNPX09PQklOTElORSAw eDAxMDAKKyNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KKworI2lmbmRlZiBUQ1BTTkRCVUZTSVoK KyNpZmRlZiBWTVMKKyNpZmRlZiBfX2FscGhhCisjZGVmaW5lIFRDUFNOREJVRlNJWiAxNjM4NAor I2VuZGlmIC8qIF9fYWxwaGEgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBUQ1BTTkRC VUZTSVogKi8KKworI2lmbmRlZiBUQ1BTTkRCVUZTSVoKKyNkZWZpbmUgVENQU05EQlVGU0laIC0x CisjZW5kaWYgLyogVENQU05EQlVGU0laICovCisKKyNpZmRlZiBTT19TTkRCVUYKK2ludCB0Y3Bf c2VuZGJ1ZiA9IFRDUFNOREJVRlNJWjsKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KKworI2lmZGVm IFNPX1JDVkJVRgoraW50IHRjcF9yZWN2YnVmID0gLTE7CisjZW5kaWYgLyogU09fUkNWQlVGICov CisKKyNpZmRlZiBTT19LRUVQQUxJVkUKK2ludCB0Y3Bfa2VlcGFsaXZlID0gMTsKKyNlbmRpZiAv KiBTT19LRUVQQUxJVkUgKi8KKworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KKyNlbmRpZiAvKiBO T1RDUE9QVFMgKi8KKworI2lmbmRlZiBORVRDT05OCisvKgorICBOZXR3b3JrIHN1cHBvcnQgbm90 IGRlZmluZWQuCisgIER1bW15IGZ1bmN0aW9ucyBoZXJlIGluIGNhc2UgI2lmZGVmJ3MgZm9yZ290 dGVuIGVsc2V3aGVyZS4KKyovCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogT3BlbiBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KK25ldG9wZW4obmFtZSwgbGNsLCBuZXR0 KSBjaGFyICpuYW1lOyBpbnQgKmxjbCwgbmV0dDsgeworICAgIHJldHVybigtMSk7Cit9CitpbnQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgbmV0d29yayBjb25u ZWN0aW9uICovCituZXRjbG9zKCkgeworICAgIHJldHVybigtMSk7Cit9CitpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgbmV0d29yayBpbnB1dCBidWZmZXIg Ki8KK25ldHRjaGsoKSB7CisgICAgcmV0dXJuKC0xKTsKK30KK2ludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCBuZXR3b3JrIGlucHV0IGJ1ZmZlciAqLworbmV0 Zmx1aSgpIHsKKyAgICByZXR1cm4oLTEpOworfQoraW50ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNlbmQgbmV0d29yayBCUkVBSyAqLworbmV0YnJlYWsoKSB7CisgICAg cmV0dXJuKC0xKTsKK30KK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBJbnB1dCBjaGFyYWN0ZXIgZnJvbSBuZXR3b3JrICovCituZXRpbmModGltbykgaW50IHRpbW87 IHsKKyAgICByZXR1cm4oLTEpOworfQoraW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE91dHB1dCBjaGFyYWN0ZXIgdG8gbmV0d29yayAqLworI2lmZGVmIENLX0FOU0lD CituZXR0b2MoQ0hBUiBjKQorI2Vsc2UKK25ldHRvYyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKy8qIG5ldHRvYyAqLyB7CisgICAgcmV0dXJuKC0xKTsKK30KK2ludAorbmV0dG9s KHMsbikgQ0hBUiAqczsgaW50IG47IHsKKyAgICByZXR1cm4oLTEpOworfQorCisjZWxzZSAvKiBO RVRDT05OIGlzIGRlZmluZWQgKG11Y2ggb2YgdGhpcyBtb2R1bGUuLi4pICovCisKKyNpZmRlZiBO RVRMRUJVRgorVk9JRAorbGVfaW5pdCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IExvY2FsRWNob0luaXQoKSAqLworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBMRUJV RlNJWjsgaSsrKQorICAgICAgbGVfYnVmW2ldID0gJ1wwJzsKKyAgICBsZV9zdGFydCA9IDA7Cisg ICAgbGVfZW5kID0gMDsKKyAgICBsZV9kYXRhID0gMDsKKyAgICB0dF9wdXNoX2luaXRlZCA9IDE7 Cit9CisKK1ZPSUQKK2xlX2NsZWFuKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBM b2NhbEVjaG9DbGVhbnVwKCkgKi8KKyAgICBsZV9pbml0KCk7CisgICAgcmV0dXJuOworfQorCitp bnQKK2xlX2luYnVmKCkgeworICAgIGludCByYyA9IDA7CisgICAgaWYgKGxlX3N0YXJ0ICE9IGxl X2VuZCkgeworICAgICAgICByYyA9IChsZV9lbmQgLQorICAgICAgICAgICAgICBsZV9zdGFydCAr CisgICAgICAgICAgICAgIExFQlVGU0laKSAlIExFQlVGU0laOworICAgIH0KKyAgICByZXR1cm4o cmMpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworbGVfcHV0Y2hhcihDSEFSIGNoKQorI2Vs c2UKK2xlX3B1dGNoYXIoY2gpIENIQVIgY2g7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGxl X3B1dGNoYXIgKi8geworICAgIGlmICgobGVfc3RhcnQgLSBsZV9lbmQgKyBMRUJVRlNJWiklTEVC VUZTSVogPT0gMSkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJsZV9wdXRjaGFyIiwiYnVmZmVyIGlz IGZ1bGwiLDApOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBsZV9idWZbbGVfZW5k KytdID0gY2g7CisgICAgaWYgKGxlX2VuZCA9PSBMRUJVRlNJWikKKyAgICAgIGxlX2VuZCA9IDA7 CisgICAgbGVfZGF0YSA9IDE7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19B TlNJQworbGVfcHV0cyhDSEFSICogcywgaW50IG4pCisjZWxzZQorbGVfcHV0cyhzLG4pIENIQVIg KiBzOyBpbnQgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbGVfcHV0cyAqLyB7CisgICAg aW50IHJjID0gMDsKKyAgICBpbnQgaSA9IDA7CisgICAgQ0hBUiAqIHAgPSAoQ0hBUiAqKSJsZV9w dXRzIjsKKyAgICBja2hleGR1bXAocCxzLG4pOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKysp CisgICAgICByYyA9IGxlX3B1dGNoYXIoKGNoYXIpc1tpXSk7CisgICAgZGVidWcoRjEwMSwibGVf cHV0cyIsIiIscmMpOworICAgIHJldHVybihyYyk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lD CitsZV9wdXRzdHIoQ0hBUiAqIHMpCisjZWxzZQorbGVfcHV0c3RyKHMpIENIQVIgKiBzOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisvKiBsZV9wdXRzICovIHsKKyAgICBDSEFSICogcDsKKyAgICBp bnQgcmMgPSAwOworICAgIHAgPSAoQ0hBUiAqKSJsZV9wdXRzdHIiOworICAgIGNraGV4ZHVtcChw LHMsKGludClzdHJsZW4oKGNoYXIgKilzKSk7CisgICAgZm9yIChwID0gczsgKnAgJiYgIXJjOyBw KyspCisgICAgICByYyA9IGxlX3B1dGNoYXIoKnApOworICAgIHJldHVybihyYyk7Cit9CisKK2lu dAorI2lmZGVmIENLX0FOU0lDCitsZV9nZXRjaGFyKENIQVIgKiBwY2gpCisjZWxzZSAvKiBDS19B TlNJQyAqLworbGVfZ2V0Y2hhcihwY2gpIENIQVIgKiBwY2g7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KKy8qIGxlX2dhdGNoYXIgKi8geworICAgIGludCByYyA9IDA7CisgICAgaWYgKGxlX3N0YXJ0 ICE9IGxlX2VuZCkgeworICAgICAgICAqcGNoID0gbGVfYnVmW2xlX3N0YXJ0XTsKKyAgICAgICAg bGVfYnVmW2xlX3N0YXJ0XSA9IDA7CisgICAgICAgIGxlX3N0YXJ0Kys7CisKKyAgICAgICAgaWYg KGxlX3N0YXJ0ID09IExFQlVGU0laKQorICAgICAgICAgIGxlX3N0YXJ0ID0gMDsKKworICAgICAg ICBpZiAobGVfc3RhcnQgPT0gbGVfZW5kKSB7CisgICAgICAgICAgICBsZV9kYXRhID0gMDsKKyAg ICAgICAgfQorICAgICAgICByYysrOworICAgIH0gZWxzZSB7CisgICAgICAgICpwY2ggPSAwOwor ICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIE5FVExFQlVGICovCisKKyNpZmRl ZiBWTVMKKy8qCisgIEluIGVkaXQgMTkwLCB3ZSBtb3ZlZCB0bl9pbmkoKSB0byBiZSBjYWxsZWQg ZnJvbSB3aXRoaW4gbmV0b3BlbigpLgorICBCdXQgdG5faW5pKCkgY2FsbHMgdHRvbCgpLCBhbmQg dHRvbCgpIGNoZWNrcyB0byBzZWUgaWYgaXQncyBhIG5ldAorICBjb25uZWN0aW9uLCBidXQgdGhl IGZsYWcgZm9yIHRoYXQgaXNuJ3Qgc2V0IHVudGlsIGFmdGVyIG5ldG9wZW4oKQorICBpcyBmaW5p c2hlZC4gIFNpbmNlLCBpbiB0aGlzIG1vZHVsZSwgd2UgYXJlIGFsd2F5cyBkb2luZyBuZXR3b3Jr CisgIG91dHB1dCBhbnl3YXksIHdlIGp1c3QgY2FsbCBuZXR0b2woKSBkaXJlY3RseSwgaW5zdGVh ZCBvZiBnb2luZyB0aHJ1CisgIHR0b2woKS4gIE9ubHkgbmVlZGVkIGZvciBWTVMsIHNpbmNlIFVO SVgsIEFPUy9WUywgYW5kIFZPUyBjYW4gaGFuZGxlCisgIG5ldCBjb25uZWN0aW9ucyBqdXN0IGxp a2UgcmVndWxhciBjb25uZWN0aW9ucyBpbiB0dG9sKCksIGFuZCBPUy8yCisgIGhhcyBhIHNwZWNp YWwgcm91dGluZSBmb3IgdGhpcy4KKyovCisjZGVmaW5lIHR0b2wgbmV0dG9sCisjZW5kaWYgLyog Vk1TICovCisKK2ludCB0Y3BzcmZkID0gLTE7CisKKyNpZmRlZiBDS19LRVJCRVJPUworCitjaGFy ICoga3JiNV9kX3ByaW5jaXBhbCA9IE5VTEw7ICAgICAgICAgLyogRGVmYXVsdCBwcmluY2lwYWwg Ki8KK2NoYXIgKiBrcmI1X2RfaW5zdGFuY2UgPSBOVUxMOyAgICAgICAgICAvKiBEZWZhdWx0IGlu c3RhbmNlICovCitjaGFyICoga3JiNV9kX3JlYWxtID0gTlVMTDsgICAgICAgICAgICAgLyogRGVm YXVsdCByZWFsbSAqLworY2hhciAqIGtyYjVfZF9jYyA9IE5VTEw7ICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgY3JlZGVudGlhbHMgY2FjaGUgKi8KK2NoYXIgKiBrcmI1X2Rfc3J2ICAgPSBOVUxM OyAgICAgICAgICAgICAvKiBEZWZhdWx0IFNlcnZpY2UgKi8KK2ludCAgICBrcmI1X2RfbGlmZXRp bWUgPSA2MDA7ICAgICAgICAgICAvKiBEZWZhdWx0IGxpZmV0aW1lICgxMCBob3VycykgKi8KK2lu dCAgICBrcmI1X2RfZm9yd2FyZGFibGUgPSAwOyAgICAgICAgICAvKiBjcmVkcyBub3QgZm9yd2Fy ZGFibGUgKi8KK2ludCAgICBrcmI1X2RfcHJveGlhYmxlID0gMDsgICAgICAgICAgICAvKiBjcmVk cyBub3QgcHJveGlhYmxlICovCitpbnQgICAga3JiNV9kX3JlbmV3YWJsZSA9IDA7ICAgICAgICAg ICAgLyogY3JlZHMgbm90IHJlbmV3YWJsZSAoMCBtaW4pICovCitpbnQgICAga3JiNV9hdXRvZ2V0 ID0gMTsgICAgICAgICAgICAgICAgLyogQXV0b2dldCBUR1RzICovCitpbnQgICAga3JiNV9hdXRv ZGVsID0gMDsgICAgICAgICAgICAgICAgLyogQXV0byBkZWxldGUgVEdUcyAqLworaW50ICAgIGty YjVfZF9nZXRrNCA9IDA7ICAgICAgICAgICAgICAgIC8qIEs1IEtpbml0IGdldHMgSzQgVEdUcyAq LworaW50ICAgIGtyYjVfY2hlY2thZGRycyA9IDE7ICAgICAgICAgICAgIC8qIENoZWNrIFRHVCBB ZGRycyAqLworaW50ICAgIGtyYjVfZF9ub19hZGRyZXNzZXMgPSAwOyAgICAgICAgIC8qIERvIG5v dCBpbmNsdWRlIElQIEFkZHJlc3NlcyAqLworY2hhciAqIGtyYjVfZF9hZGRyc1tLUkI1X05VTV9P Rl9BRERSUysxXT17TlVMTCxOVUxMfTsgLyogQWRkcnMgdG8gaW5jbHVkZSAqLworaW50ICAgIGty YjVfZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgIC8qIExhc3QgSzUgZXJybm8gKi8KK2NoYXIg KiBrcmI1X2Vycm1zZyA9IE5VTEw7ICAgICAgICAgICAgICAvKiBMYXN0IEs1IGVycm1zZyAqLwor Y2hhciAqIGs1X2tleXRhYiA9IE5VTEw7CisKK2NoYXIgKiBrcmI0X2RfcHJpbmNpcGFsID0gTlVM TDsgICAgICAgICAvKiBEZWZhdWx0IHByaW5jaXBhbCAqLworY2hhciAqIGtyYjRfZF9yZWFsbSA9 IE5VTEw7ICAgICAgICAgICAgIC8qIERlZmF1bHQgcmVhbG0gKi8KK2NoYXIgKiBrcmI0X2Rfc3J2 ICAgPSBOVUxMOyAgICAgICAgICAgICAvKiBEZWZhdWx0IFNlcnZpY2UgKi8KK2ludCAgICBrcmI0 X2RfbGlmZXRpbWUgPSA2MDA7ICAgICAgICAgICAvKiBEZWZhdWx0IGxpZmV0aW1lICgxMCBob3Vy cykgKi8KK2ludCAgICBrcmI0X2RfcHJlYXV0aCA9IDE7ICAgICAgICAgICAgICAvKiBVc2UgcHJl YXV0aCByZXF1ZXN0cyAqLworY2hhciAqIGtyYjRfZF9pbnN0YW5jZSA9IE5VTEw7ICAgICAgICAg IC8qIERlZmF1bHQgaW5zdGFuY2UgKi8KK2ludCAgICBrcmI0X2F1dG9nZXQgPSAxOyAgICAgICAg ICAgICAgICAvKiBBdXRvZ2V0IFRHVHMgKi8KK2ludCAgICBrcmI0X2F1dG9kZWwgPSAwOyAgICAg ICAgICAgICAgICAvKiBBdXRvIGRlbGV0ZSBUR1RzICovCitpbnQgICAga3JiNF9jaGVja2FkZHJz ID0gMTsgICAgICAgICAgICAgLyogQ2hlY2sgVEdUIEFkZHJzICovCitjaGFyICogazRfa2V5dGFi ID0gTlVMTDsKKworaW50ICAgIGtyYjRfZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgIC8qIExh c3QgSzQgZXJybm8gKi8KK2NoYXIgKiBrcmI0X2Vycm1zZyA9IE5VTEw7ICAgICAgICAgICAgICAv KiBMYXN0IEs0IGVycm1zZyAqLworCitzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wID0geyAgICAg ICAgICAgLyogT3BlcmF0aW9uYWwgZGF0YSBzdHJ1Y3R1cmUgKi8KKyAgICAwLCBOVUxMICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAodmVyc2lvbiwgY2FjaGVmaWxlKSAqLworfTsKKwor c3RydWN0IGtyYjRfaW5pdF9kYXRhIGtyYjRfaW5pdCA9IHsgICAgIC8qIEtlcmJlcm9zIDQgSU5J VCBkYXRhIHN0cnVjdHVyZSAqLworICAgIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKK307CisK K3N0cnVjdCBrcmI1X2luaXRfZGF0YSBrcmI1X2luaXQgPSB7ICAgICAvKiBLZXJiZXJvcyA1IElO SVQgZGF0YSBzdHJ1Y3R1cmUgKi8KKyAgICAwLCAwLCAwLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCAwLCAwLAorICAgIHsgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSwKKyAgICAwCit9OworCitzdHJ1Y3Qg a3JiNV9saXN0X2NyZWRfZGF0YSBrcmI1X2xjID0geyAgLyogTGlzdCBDcmVkZW50aWFscyBkYXRh IHN0cnVjdHVyZSAqLworICAgIDAsIDAsIDAKK307CisKK2ludCBrcmJfYWN0aW9uID0gLTE7ICAg ICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyBhY3Rpb24gdG8gcGVyZm9ybSAqLworCisjaWZu ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCitjaGFyICoKK2NrX2tyYjRfZ2V0cmVhbG0oKSB7CisgICAg cmV0dXJuKCIiKTsKK30KK2NoYXIgKgorY2tfa3JiNV9nZXRyZWFsbShjYykgY2hhciAqIGNjOyB7 CisgICAgcmV0dXJuKCIiKTsKK30KK2NoYXIgKgorY2tfa3JiNF9nZXRwcmluY2lwYWwoKSB7Cisg ICAgcmV0dXJuKCIiKTsKK30KK2NoYXIgKgorY2tfa3JiNV9nZXRwcmluY2lwYWwoY2MpIGNoYXIg KiBjYzsgeworICAgIHJldHVybigiIik7Cit9CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04g Ki8KKworLyogIEkgTiBJIF8gSyBFIFIgQiAgLS0gIEluaXRpYWxpemUgS2VyYmVyb3MgZGF0YSAg Ki8KKworVk9JRAoraW5pX2tlcmIoKSB7CisgICAgaW50IGk7CisKKyAgICBrcmJfYWN0aW9uID0g LTE7ICAgICAgICAgICAgICAgICAgICAvKiBObyBhY3Rpb24gc3BlY2lmaWVkICovCisKKyAgICBr cmJfb3AudmVyc2lvbiA9IDA7ICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyB2ZXJzaW9uIChu b25lKSAqLworICAgIGtyYl9vcC5jYWNoZSA9IE5VTEw7ICAgICAgICAgICAgICAgIC8qIENhY2hl IGZpbGUgKG5vbmUpICovCisKKy8qIEtlcmJlcm9zIDUgKi8KKworICAgIGtyYjVfaW5pdC5mb3J3 YXJkYWJsZSA9IGtyYjVfZF9mb3J3YXJkYWJsZTsgLyogSW5pdCBzd2l0Y2ggdmFsdWVzLi4uICov CisgICAga3JiNV9pbml0LnByb3hpYWJsZSAgID0ga3JiNV9kX3Byb3hpYWJsZTsKKyAgICBrcmI1 X2luaXQubGlmZXRpbWUgICAgPSBrcmI1X2RfbGlmZXRpbWU7CisgICAga3JiNV9pbml0LnJlbmV3 ICAgICAgID0gMDsKKyAgICBrcmI1X2luaXQucmVuZXdhYmxlICAgPSBrcmI1X2RfcmVuZXdhYmxl OworICAgIGtyYjVfaW5pdC52YWxpZGF0ZSAgICA9IDA7CisgICAga3JiNV9pbml0Lm5vX2FkZHJl c3NlcyA9IGtyYjVfZF9ub19hZGRyZXNzZXM7CisgICAga3JiNV9pbml0LmdldGs0ICAgICAgID0g a3JiNV9kX2dldGs0OworICAgIGlmIChrcmI1X2luaXQucG9zdGRhdGUpIHsKKyAgICAgICAgZnJl ZShrcmI1X2luaXQucG9zdGRhdGUpOworICAgICAgICBrcmI1X2luaXQucG9zdGRhdGUgPSBOVUxM OworICAgIH0KKyAgICBpZiAoa3JiNV9pbml0LnNlcnZpY2UpIHsKKyAgICAgICAgZnJlZShrcmI1 X2luaXQuc2VydmljZSk7CisgICAgICAgIGtyYjVfaW5pdC5zZXJ2aWNlID0gTlVMTDsKKyAgICB9 CisgICAgaWYgKCFrcmI1X2RfY2MgfHwgIWtyYjVfZF9jY1swXSkgeyAgLyogU2V0IGRlZmF1bHQg Y2FjaGUgKi8KKyAgICAgICAgY2hhciAqIHA7CisgICAgICAgIHAgPSBja19rcmI1X2dldF9jY19u YW1lKCk7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZF9jYywocCAmJiBwWzBdKSA/IHAgOiBOVUxM KTsKKyAgICB9CisgICAgaWYgKCFrcmI1X2RfcmVhbG0gfHwgIWtyYjVfZF9yZWFsbVswXSkgeyAv KiBTZXQgZGVmYXVsdCByZWFsbSAqLworICAgICAgICBjaGFyICogcDsKKyAgICAgICAgcCA9IGNr X2tyYjVfZ2V0cmVhbG0oa3JiNV9kX2NjKTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9kX3JlYWxt LChwICYmIHBbMF0pID8gcCA6IE5VTEwpOworICAgIH0KKyAgICBtYWtlc3RyKCZrcmI1X2luaXQu aW5zdGFuY2Usa3JiNV9kX2luc3RhbmNlKTsKKyAgICBtYWtlc3RyKCZrcmI1X2luaXQucmVhbG0s a3JiNV9kX3JlYWxtKTsgLyogU2V0IHJlYWxtIGZyb20gZGVmYXVsdCAqLworICAgIGlmIChrcmI1 X2luaXQucGFzc3dvcmQpIHsKKyAgICAgICAgbWVtc2V0KGtyYjVfaW5pdC5wYXNzd29yZCwweEZG LHN0cmxlbihrcmI1X2luaXQucGFzc3dvcmQpKTsKKyAgICAgICAgZnJlZShrcmI1X2luaXQucGFz c3dvcmQpOworICAgICAgICBrcmI1X2luaXQucGFzc3dvcmQgPSBOVUxMOworICAgIH0KKyAgICBp ZiAoIWtyYjVfZF9wcmluY2lwYWwpIHsgICAgICAgICAgICAvKiBEZWZhdWx0IHByaW5jaXBhbCAq LworICAgICAgICAvKiBhIE51bGwgcHJpbmNpcGFsIGluZGljYXRlcyB0aGUgdXNlciBzaG91bGQg YmUgcHJvbXB0ZWQgKi8KKyAgICAgICAgY2hhciAqIHAgPSBja19rcmI1X2dldHByaW5jaXBhbChr cmI1X2RfY2MpOworICAgICAgICBpZiAoIXAgfHwgISgqcCkpCisgICAgICAgICAgcCA9IChjaGFy ICopdWlkYnVmOyAgICAgICAgICAgLyogUHJpbmNpcGFsID0gdXNlciAqLworICAgICAgICAgICAg ICAgIG1ha2VzdHIoJmtyYjVfZF9wcmluY2lwYWwsKHAgJiYgcFswXSkgPyBwIDogTlVMTCk7Cisg ICAgfQorICAgIG1ha2VzdHIoJmtyYjVfaW5pdC5wcmluY2lwYWwsa3JiNV9kX3ByaW5jaXBhbCk7 CisgICAgZm9yIChpID0gMDsgaSA8PSBLUkI1X05VTV9PRl9BRERSUzsgaSsrKSB7CisgICAgICAg IGlmIChrcmI1X2luaXQuYWRkcnNbaV0pCisgICAgICAgICAgZnJlZShrcmI1X2luaXQuYWRkcnNb aV0pOworICAgICAgICBrcmI1X2luaXQuYWRkcnNbaV0gPSBOVUxMOworICAgIH0KKyAgICBmb3Ig KGkgPSAwOyBpIDw9IEtSQjVfTlVNX09GX0FERFJTICYmIGtyYjVfZF9hZGRyc1tpXTsgaSsrKSB7 CisgICAgICAgIG1ha2VzdHIoJmtyYjVfaW5pdC5hZGRyc1tpXSxrcmI1X2RfYWRkcnNbaV0pOwor ICAgIH0KKworICAgIC8qIEtlcmJlcm9zIDQgKi8KKworICAgIGtyYjRfaW5pdC5saWZldGltZSA9 IGtyYjRfZF9saWZldGltZTsKKyAgICBrcmI0X2luaXQucHJlYXV0aCAgPSBrcmI0X2RfcHJlYXV0 aDsKKyAgICBtYWtlc3RyKCZrcmI0X2luaXQuaW5zdGFuY2Usa3JiNF9kX2luc3RhbmNlKTsKKyAg ICBpZiAoIWtyYjRfZF9yZWFsbSB8fCAha3JiNF9kX3JlYWxtWzBdKSB7LyogU2V0IGRlZmF1bHQg cmVhbG0gKi8KKyAgICAgICAgY2hhciAqIHA7CisgICAgICAgIHAgPSBja19rcmI0X2dldHJlYWxt KCk7CisgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNF9kX3JlYWxtLChwICYmIHBbMF0pID8g cCA6IE5VTEwpOworICAgIH0KKyAgICBtYWtlc3RyKCZrcmI0X2luaXQucmVhbG0sa3JiNF9kX3Jl YWxtKTsKKyAgICBpZiAoa3JiNF9pbml0LnBhc3N3b3JkKSB7CisgICAgICAgIG1lbXNldChrcmI0 X2luaXQucGFzc3dvcmQsMHhGRixzdHJsZW4oa3JiNF9pbml0LnBhc3N3b3JkKSk7CisgICAgICAg IGZyZWUoa3JiNF9pbml0LnBhc3N3b3JkKTsKKyAgICAgICAga3JiNF9pbml0LnBhc3N3b3JkID0g TlVMTDsKKyAgICB9CisgICAgaWYgKCFrcmI0X2RfcHJpbmNpcGFsKSB7ICAgICAgICAgICAgLyog RGVmYXVsdCBwcmluY2lwYWwgKi8KKyAgICAgICAgLyogYSBOdWxsIHByaW5jaXBhbCBpbmRpY2F0 ZXMgdGhlIHVzZXIgc2hvdWxkIGJlIHByb21wdGVkICovCisgICAgICAgIGNoYXIgKiBwID0gY2tf a3JiNF9nZXRwcmluY2lwYWwoKTsKKyAgICAgICAgaWYgKCFwIHx8ICEoKnApKQorICAgICAgICAg IHAgPSAoY2hhciAqKXVpZGJ1ZjsgICAgICAgICAgIC8qIFByaW5jaXBhbCA9IHVzZXIgKi8KKyAg ICAgICAgbWFrZXN0cigmKGtyYjRfZF9wcmluY2lwYWwpLChwICYmIHBbMF0pID8gcCA6IE5VTEwp OworICAgIH0KKyAgICBtYWtlc3RyKCYoa3JiNF9pbml0LnByaW5jaXBhbCksa3JiNF9kX3ByaW5j aXBhbCk7Cit9CisKKy8qICBEIE8gQSBVIFQgSCAgLS0gIEFVVEhFTlRJQ0FURSBhY3Rpb24gcm91 dGluZSAgKi8KKworaW50Citkb2F1dGgoY3gpIGludCBjeDsgeyAgICAgICAgICAgICAgICAgICAg LyogQVVUSEVOVElDQVRFIGFjdGlvbiByb3V0aW5lICovCisgICAgaW50IHJjID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUgKi8KKworI2lmZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCisjaWZkZWYgT1MyCisgICAgaWYgKCFja19zZWN1cml0eV9sb2FkZGxsKCkpICAgICAg ICAgLyogTG9hZCB2YXJpb3VzIERMTHMgKi8KKyAgICAgIHJldHVybihyYyk7CisjZW5kaWYgLyog T1MyICovCisgICAgaWYgKGtyYl9vcC52ZXJzaW9uID09IDQpIHsgICAgICAgICAgLyogVmVyc2lv biA9IDQgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIHNob19hdXRoKEFVVEhUWVBFX0tFUkJF Uk9TX1Y0KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlmICghY2tfa3JiNF9pc19p bnN0YWxsZWQoKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/S2VyYmVyb3MgNCBpcyBub3QgaW5z dGFsbGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgICBz d2l0Y2ggKGtyYl9hY3Rpb24pIHsgICAgICAgICAgIC8qIFBlcmZvcm0gVjQgZnVuY3Rpb25zICov CisgICAgICAgICAgY2FzZSBLUkJfQV9JTjogICAgICAgICAgICAgICAgLyogSU5JVCAqLworICAg ICAgICAgICAgcmMgfD0gIShja19rcmI0X2luaXRUR1QoJmtyYl9vcCwma3JiNF9pbml0KSA8IDAp OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBLUkJfQV9ERTogICAgICAgICAg ICAgICAgLyogREVTVFJPWSAqLworICAgICAgICAgICAgcmMgfD0gIShja19rcmI0X2Rlc3Ryb3ko JmtyYl9vcCkgPCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgS1JCX0Ff TEM6ICAgICAgICAgICAgICAgIC8qIExJU1QtQ1JFREVOVElBTFMgKi8KKyAgICAgICAgICAgIHJj IHw9ICEoY2tfa3JiNF9saXN0X2NyZWRzKCZrcmJfb3ApIDwgMCk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoa3JiX29wLnZlcnNpb24gPT0gNSkgeyAgICAg ICAgICAvKiBWNSBmdW5jdGlvbnMgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIHNob19hdXRo KEFVVEhUWVBFX0tFUkJFUk9TX1Y1KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlm ICghY2tfa3JiNV9pc19pbnN0YWxsZWQoKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/S2VyYmVy b3MgNSBpcyBub3QgaW5zdGFsbGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAg ICAgfQorICAgICAgICBzd2l0Y2ggKGtyYl9hY3Rpb24pIHsKKyAgICAgICAgICBjYXNlIEtSQl9B X0lOOiAgICAgICAgICAgICAgICAvKiBJTklUICovCisgICAgICAgICAgICByYyB8PSAhKGNrX2ty YjVfaW5pdFRHVCgma3JiX29wLCZrcmI1X2luaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAga3JiNV9pbml0LmdldGs0ID8gJmtyYjRfaW5pdCA6IDApIDwgMCk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEtSQl9BX0RFOiAgICAgICAgICAgICAgICAv KiBERVNUUk9ZICovCisgICAgICAgICAgICByYyB8PSAhKGNrX2tyYjVfZGVzdHJveSgma3JiX29w KSA8IDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBLUkJfQV9MQzogICAg ICAgICAgICAgICAgLyogTElTVC1DUkVERU5USUFMUyAqLworICAgICAgICAgICAgaWYgKGtyYl9v cC52ZXJzaW9uID09IDApCisgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAg IHJjIHw9ICEoY2tfa3JiNV9saXN0X2NyZWRzKCZrcmJfb3AsJmtyYjVfbGMpIDwgMCk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisjaWZuZGVmIE5PSUNQCisj aWZuZGVmIE5PU0hPVworICAgIHJjID0gc2hvX2F1dGgoMCk7ICAgICAgICAgICAgICAgICAgIC8q IFNob3cgYWxsICovCisjZW5kaWYgLyogTk9TSE9XICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNl bmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAgIHJldHVybihyYyk7Cit9CisjZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBPUzIKKyNpZm5k ZWYgTk9MSVNURU4gICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgaW5jb21pbmcgY29ubmVj dGlvbnMgKi8KKworI2lmbmRlZiBJTkFERFJfQU5ZCisjZGVmaW5lIElOQUREUl9BTlkgMAorI2Vu ZGlmIC8qIElOQUREUl9BTlkgKi8KKworX1BST1RPVFlQKCBpbnQgdHRidWZyLCAoIFZPSUQgKSAp OworX1BST1RPVFlQKCBpbnQgdGNwc3J2X29wZW4sIChjaGFyICosIGludCAqLCBpbnQsIGludCAp ICk7CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCB0Y3BzcnZfcG9ydCA9IDA7CisKKyNlbmRpZiAv KiBOT0xJU1RFTiAqLworI2VuZGlmIC8qIE9TMiAqLworCitzdGF0aWMgY2hhciBzdmNidWZbODBd OyAgICAgICAgICAgICAgICAgLyogVENQIHNlcnZpY2Ugc3RyaW5nICovCitzdGF0aWMgaW50IHN2 Y251bSA9IDA7ICAgICAgICAgICAgICAgICAgLyogVENQIHBvcnQgbnVtYmVyICovCisKKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKworLyoKKyAgVENQSVBMSUIgbWVhbnMgdXNlIHNlcGFyYXRlIHNv Y2tldCBjYWxscyBmb3IgaS9vLCB3aGlsZSBvbiBVTklYIHRoZQorICBub3JtYWwgZmlsZSBzeXN0 ZW0gY2FsbHMgYXJlIHVzZWQgZm9yIFRDUC9JUCBzb2NrZXRzIHRvby4KKyAgTWVhbnMgIkRFQ19U Q1BJUCBvciBNVUxUSU5FVCBvciBXSU5UQ1Agb3IgT1MyIG9yIEJFQk9YIiAoc2VlIGNrY25ldC5o KSwKKyovCisKKyNpZmRlZiBUQ1BJUExJQgorCisvKiBGb3IgYnVmZmVyZWQgbmV0d29yayByZWFk cy4uLiAqLworLyoKKyAgSWYgdGhlIGJ1ZmZlcmluZyBjb2RlIGlzIHdyaXR0ZW4gcmlnaHQsIGl0 IHNob3VsZG4ndCBtYXR0ZXIKKyAgaG93IGxvbmcgdGhpcyBidWZmZXIgaXMuCisqLworI2lmZGVm IE9TMgorI2lmZGVmIE5UCisjZGVmaW5lIFRUSUJVRkwgNjQyNDAgICAgICAgICAgICAgICAgICAg LyogNDQgKiAxNDYwIChNU1MpICovCisjZWxzZQorI2RlZmluZSBUVElCVUZMIDMyMTIwICAgICAg ICAgICAgICAgICAgIC8qIDIyICogMTQ2MCAoTVNTKSAqLworI2VuZGlmIC8qIE5UICovCisjZWxz ZSAvKiBPUzIgKi8KKyNkZWZpbmUgVFRJQlVGTCA4MTkxICAgICAgICAgICAgICAgICAgICAvKiBM ZXQncyB1c2UgOEsuICovCisjZW5kaWYgLyogT1MyICovCisKK0NIQVIgdHRpYnVmW1RUSUJVRkwr MV07CisKKy8qCisgIHNlbGVjdCgpIGlzIHVzZWQgaW4gcHJlZmVyZW5jZSB0byBhbGFybSgpL3Np Z25hbCgpLCBidXQgZGlmZmVyZW50IHN5c3RlbXMKKyAgdXNlIGRpZmZlcmVudCBmb3JtcyBvZiBz ZWxlY3QoKS4uLgorKi8KKyNpZm5kZWYgTk9TRUxFQ1QgICAgICAgICAvKiBPcHRpb24gdG8gb3Zl cnJpZGUgQlNEU0VMRUNUICovCisjaWZkZWYgQkVMTFYxMAorLyoKKyAgTm90ZTogQWx0aG91Z2gg QkVMTFYxMCBkb2VzIGhhdmUgVENQL0lQIHN1cHBvcnQsIGFuZCBkb2VzIHVzZSB0aGUgdW5pcXVl CisgIGZvcm0gb2Ygc2VsZWN0KCkgdGhhdCBpcyBldmlkZW50IGluIHRoaXMgbW9kdWxlIChhbmQg aW4gY2t1dGlvLmMpLCBpdCBkb2VzCisgIG5vdCBoYXZlIGEgc29ja2V0cyBsaWJyYXJ5IGFuZCBz byB3ZSBjYW4ndCBidWlsZCBLZXJtaXQgVENQL0lQIHN1cHBvcnQgZm9yCisgIGl0LiAgRm9yIHRo aXMsIHNvbWVib2R5IHdvdWxkIGhhdmUgdG8gd3JpdGUgVENQL0lQIHN0cmVhbXMgY29kZS4KKyov CisjZGVmaW5lIEJFTExTRUxFQ1QKKyNpZm5kZWYgRkRfU0VUU0laRQorI2RlZmluZSBGRF9TRVRT SVpFIDEyOAorI2VuZGlmIC8qIEZEX1NFVFNJWkUgKi8KKyNlbHNlCisjaWZkZWYgV0lOVENQICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVk1TIHdpdGggV29sbG9uZ29uZyBXSU4vVENQICov CisjaWZuZGVmIE9MRF9UV0cgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFdHIDMuMiBoYXMg b25seSBzZWxlY3QocmVhZCkgKi8KKyNkZWZpbmUgQlNEU0VMRUNUCisjZW5kaWYgLyogT0xEX1RX RyAqLworI2Vsc2UKKyNpZmRlZiBDTVVfVENQSVAgICAgICAgICAgICAgICAgICAgICAgICAvKiBM SUJDTVUgY2FuIGRvIHNlbGVjdCAqLworI2RlZmluZSBCU0RTRUxFQ1QKKyNlbHNlCisjaWZkZWYg REVDX1RDUElQCisjZGVmaW5lIEJTRFNFTEVDVAorI2Vsc2UKKyNpZmRlZiBPUzIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPUy8yIHdpdGggVENQL0lQICovCisjaWZkZWYgTlQKKyNk ZWZpbmUgQlNEU0VMRUNUCisjZWxzZSAvKiBOVCAqLworI2RlZmluZSBJQk1TRUxFQ1QKKyNlbmRp ZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworI2Vu ZGlmIC8qIENNVV9UQ1BJUCAqLworI2VuZGlmIC8qIFdJTlRDUCAqLworI2VuZGlmIC8qIEJFTExW MTAgKi8KKyNlbmRpZiAvKiBOT1NFTEVDVCAqLworLyoKKyAgT3RoZXJzIChUR1YsIFRDUHdhcmUs IC4uLikgdXNlIGFsYXJtKCkvc2lnbmFsKCkuICBUaGUgQlNEU0VMRUNUIGNhc2UgZG9lcyBub3QK KyAgY29tcGlsZSBhdCBhbGw7IHRoZSBJQk1TRUxFQ1QgY2FzZSBjb21waWxlcyBhbmQgbGlua3Mg YnV0IGNyYXNoZXMgYXQgcnVudGltZS4KKyAgTk9URTogSWYgYW55IG9mIHRoZXNlIGNhbiBiZSBj b252ZXJ0ZWQgdG8gc2VsZWN0KCksIHRoZXkgc2hvdWxkIGJlIGZvciB0d28KKyAgcmVhc29uczog KDEpIEl0J3MgYSBsb3QgZmFzdGVyOyAoMikgY2VydGFpbiBzb2NrZXRzIGxpYnJhcmllcyBkbyBu b3QgbGlrZQorICB0aGVpciBzb2NrZXRfcmVhZCgpIGNhbGxzIHRvIGJlIGludGVycnVwdGVkOyBz dWJzZXF1ZW50IHNvY2tldF9yZWFkKCkncyB0ZW5kCisgIHRvIGZhaWwgd2l0aCBFQlVTWS4gIFRo aXMgaGFwcGVuZWQgaW4gdGhlIFVDWCBjYXNlIGJlZm9yZSBpdCB3YXMgY29udmVydGVkCisgIHRv IHVzZSBzZWxlY3QoKS4KKyovCisjaWZuZGVmIE9TMgorI2lmbmRlZiBWTVMKK3N0YXRpYyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgdXNlZCBpbiBDS1ZUSU8u QyAqLworI2VuZGlmIC8qIFZNUyAqLyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBpbiBD S09ORVQuQyAgICAgICAgICAgICovCisjZW5kaWYgLyogT1MyICovCitpbnQKKyAgdHRpYnAgPSAw LAorICB0dGlibiA9IDA7CisvKgorICBSZWFkIGJ5dGVzIGZyb20gbmV0d29yayBpbnRvIGludGVy bmFsIGJ1ZmZlciB0dGlidWZbXS4KKyAgVG8gYmUgY2FsbGVkIHdoZW4gaW5wdXQgYnVmZmVyIGlz IGVtcHR5LCBpLmUuIHdoZW4gdHRpYm4gPT0gMC4KKworICBPdGhlciBuZXR3b3JrIHJlYWRpbmcg cm91dGluZXMsIGxpa2UgdHRpbmMsIHR0aW5sLCB0dHhpbiwgc2hvdWxkIGNoZWNrIHRoZQorICBp bnRlcm5hbCBidWZmZXIgZmlyc3QsIGFuZCBjYWxsIHRoaXMgcm91dGluZSBmb3IgYSByZWZpbGwg aWYgbmVjZXNzYXJ5LgorCisgIFJldHVybnMgLTEgb24gZXJyb3IsIDAgaWYgbm90aGluZyBoYXBw ZW5zLiAgV2hlbiBkYXRhIGlzIHJlYWQgc3VjY2Vzc2Z1bGx5LAorICByZXR1cm5zIG51bWJlciBv ZiBieXRlcyByZWFkLCBhbmQgc2V0cyBnbG9iYWwgdHRpYm4gdG8gdGhhdCBudW1iZXIgYW5kCisg IHR0aWJwICh0aGUgYnVmZmVyIHBvaW50ZXIpIHRvIHplcm8uCisqLworX1BST1RPVFlQKCBpbnQg dHRidWZyLCAoIFZPSUQgKSApOworaW50Cit0dGJ1ZnIoKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogVFQgQnVmZmVyIFJlYWQgKi8KKyAgICBpbnQgY291bnQ7CisKKyAgICBpZiAo dHRuZXQgIT0gTkVUX1RDUEIpICAgICAgICAgICAgICAvKiBGaXJzdCBtYWtlIHN1cmUgY3VycmVu dCBuZXQgaXMgKi8KKyAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBU Q1AvSVA7IGlmIG5vdCwgZG8gbm90aGluZy4gKi8KKworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RU Q1BJUE11dGV4KFNFTV9JTkRFRklOSVRFX1dBSVQpOworI2VuZGlmIC8qIE9TMiAqLworCisgICAg aWYgKHR0aWJuID4gMCkgeyAgICAgICAgICAgICAgICAgICAgLyogT3VyIGludGVybmFsIGJ1ZmZl ciBpcyBub3QgZW1wdHksICovCisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4 KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybih0dGlibik7ICAgICAgICAgICAg ICAgICAgLyogc28ga2VlcCB1c2luZyBpdC4gKi8KKyAgICB9CisKKyAgICBpZiAodHR5ZmQgPT0g LTEpIHsgICAgICAgICAgICAgICAgICAvKiBObyBjb25uZWN0aW9uLCBlcnJvciAqLworI2lmZGVm IE9TMgorICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAg ICAgICByZXR1cm4oLTIpOworICAgIH0KKworICAgIHR0aWJwID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEVsc2UgcmVzZXQgcG9pbnRlciB0byBiZWdpbm5pbmcgKi8KKworI2lmZGVm IFdJTlRDUAorICAgIGNvdW50ID0gNTEyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMg d29ya3MgZm9yIFdJTi9UQ1AgKi8KKyNlbHNlCisjaWZkZWYgREVDX1RDUElQCisgICAgY291bnQg PSA1MTI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVUNYICovCisjZWxzZQorI2lmZGVmIE9T MgorICAgIGNvdW50ID0gVFRJQlVGTDsKKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBNdWx0aW5ldCwgZXRjLiAqLworICAgIGNvdW50ID0gdHRjaGsoKTsgICAgICAg ICAgICAgICAgICAgIC8qIENoZWNrIG5ldHdvcmsgaW5wdXQgYnVmZmVyLCAqLworICAgIGlmICh0 dGlibiA+IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIHdoaWNoIGNhbiBwdXQgYSBjaGFyIHRo ZXJlISAqLworICAgICAgICBkZWJ1ZyhGMTExLCJ0dGJ1ZnIiLCJ0dGNoaygpIHJldHVybnMiLGNv dW50KTsKKyNpZmRlZiBPUzIKKyAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgcmV0dXJuKHR0aWJuKTsKKyAgICB9CisgICAgaWYgKGNvdW50IDwg MCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgZXJyb3IgLSBjb25uZWN0aW9uIGNsb3Nl ZCAqLworI2lmZGVmIE9TMgorICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICBlbHNlIGlmIChjb3VudCA+ IFRUSUJVRkwpICAgICAgICAgICAvKiBUb28gbWFueSB0byByZWFkICovCisgICAgICBjb3VudCA9 IFRUSUJVRkw7CisgICAgZWxzZSBpZiAoY291bnQgPT0gMCkgICAgICAgICAgICAgICAgLyogTm9u ZSwgc28gZm9yY2UgYmxvY2tpbmcgcmVhZCAqLworICAgICAgY291bnQgPSAxOworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworI2VuZGlmIC8qIFdJTlRDUCAqLworICAg IGRlYnVnKEYxMDEsInR0YnVmciBjb3VudCAxIiwiIixjb3VudCk7CisKKyNpZmRlZiBDS19TU0wK KyAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgeworICAgICAgICBp bnQgZXJyb3I7CisgICAgICBzc2xfcmVhZDoKKyAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykK KyAgICAgICAgICBjb3VudCA9IFNTTF9yZWFkKHNzbF9jb24sIHR0aWJ1ZiwgY291bnQpOworICAg ICAgICBlbHNlCisgICAgICAgICAgY291bnQgPSBTU0xfcmVhZCh0bHNfY29uLCB0dGlidWYsIGNv dW50KTsKKyAgICAgICAgZXJyb3IgPSBTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xf Y29uOnRsc19jb24sY291bnQpOworICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgICAg Y2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInR0YnVmciBTU0xf RVJST1JfTk9ORSIsImNvdW50Iixjb3VudCk7CisgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7 CisgICAgICAgICAgICAgICAgdHRpYnAgPSAwOyAgICAgICAgICAgICAgLyogUmVzZXQgYnVmZmVy IHBvaW50ZXIuICovCisgICAgICAgICAgICAgICAgdHRpYm4gPSBjb3VudDsKKyNpZmRlZiBPUzIK KyAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgICAgICAgIHJldHVybih0dGlibik7ICAgICAgICAgIC8qIFJldHVybiBidWZmZXIg Y291bnQuICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50IDwgMCkgeworI2lmZGVmIE9T MgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgbmV0Y2xvcygpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIFJlbGVh c2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgcmV0dXJu KC0yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRF OgorICAgICAgICAgICAgZGVidWcoRjEwMCwidHRidWZyIFNTTF9FUlJPUl9XQU5UX1dSSVRFIiwi IiwwKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgY2FzZSBT U0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgZGVidWcoRjEwMCwidHRidWZyIFNTTF9F UlJPUl9XQU5UX1JFQUQiLCIiLDApOworI2lmZGVmIE9TMgorICAgICAgICAgICAgUmVsZWFzZVRD UElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAgICAgICAgICAgaWYgKCBjb3Vu dCA9PSAwICkgeyAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKKyNpZmRl ZiBPUzIKKyAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgaW50IHJjID0gLTE7CisjaWZkZWYgTlQKKyAgICAgICAg ICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsInR0YnVmciBTU0xfRVJST1JfU1lTQ0FMTCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIkdldExhc3RFcnJvcigpIixnbGUpOworICAgICAgICAgICAgICAgICAgcmMgPSBvczJz b2NrZXRlcnJvcihnbGUpOworICAgICAgICAgICAgICAgICAgaWYgKHJjID09IC0xKQorICAgICAg ICAgICAgICAgICAgICAgIHJjID0gLTI7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMg PT0gLTIgKQorICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisjZW5kaWYgLyogTlQgKi8K KyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5k aWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICByZXR1cm4ocmMpOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsInR0YnVmciBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCIsIiIsMCk7 CisgICAgICAgICAgICBuZXRjbG9zKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgIFJlbGVh c2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICByZXR1cm4oLTIp OworICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICAgICAgaWYgKGJpb19l cnIhPU5VTEwpIHsKKyAgICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAg ICBleHRlcm4gY2hhciBzc2xfZXJyW107CisgICAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJp b19lcnIsInR0YnVmciBTU0xfRVJST1JfU1NMXG4iKTsKKyAgICAgICAgICAgICAgICAgIEVSUl9w cmludF9lcnJvcnMoYmlvX2Vycik7CisgICAgICAgICAgICAgICAgICBsZW4gPSBCSU9fcmVhZChi aW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgICAgICAgICAgIHNzbF9lcnJb bGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0dGJ1ZnIgU1NMX0VSUk9SX1NTTCIsc3NsX2VyciwwKTsK KyAgICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykgICAgICAgICAgICAgICAgICAK KyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7CisgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAs InR0YnVmciBTU0xfRVJST1JfU1NMIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgIGZmbHVzaChz dGRlcnIpOworICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsInR0YnVmciBTU0xfRVJS T1JfU1NMXG4iKTsKKyAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnNfZnAoc3RkZXJy KTsKKyAgICAgICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKwkgICAgICBuZXRjbG9zKCk7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgICBSZWxlYXNlVENQ SVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAg ICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAgICAgICAgICAgIGRlYnVnKEYx MDAsInR0YnVmciBTU0xfRVJST1JfWkVST19SRVRVUk4iLCIiLDApOworICAgICAgICAgICAgbmV0 Y2xvcygpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dGJ1ZnIgU1NMX0VSUk9SXz8/Pz8/Iiwi IiwwKTsKKyAgICAgICAgICAgICAgbmV0Y2xvcygpOworI2lmZGVmIE9TMgorICAgICAgICAgICAg ICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICBy ZXR1cm4oLTIpOworICAgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNp ZmRlZiBDT01NRU5UCisvKgorIFRoaXMgaXMgZm9yIG5vbmJsb2NraW5nIHJlYWRzLCB3aGljaCB3 ZSBkb24ndCBkbyBhbnkgbW9yZS4gIFRoaXMgY29kZSBkaWRuJ3QKKyB3b3JrIGFueXdheSwgaW4g dGhlIHNlbnNlIHRoYXQgYSBicm9rZW4gY29ubmVjdGlvbiB3YXMgbmV2ZXIgc2Vuc2VkLgorKi8K KyAgICBpZiAoKGNvdW50ID0gc29ja2V0X3JlYWQodHR5ZmQsJnR0aWJ1Zlt0dGlicCt0dGlibl0s Y291bnQpKSA8IDEpIHsKKyAgICAgICAgaWYgKGNvdW50ID09IC0xICYmIHNvY2tldF9lcnJubyA9 PSBFV09VTERCTE9DSykgeworICAgICAgICAgICAgZGVidWcoRjEwMCwidHRidWZyIGZpbmRzIG5v dGhpbmciLCIiLDApOworI2lmZGVmIE9TMgorICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgo KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInR0YnVmciBzb2NrZXRfcmVhZCBlcnJvciIs IiIsc29ja2V0X2Vycm5vKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11 dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAg ICB9CisKKyAgICB9IGVsc2UgaWYgKGNvdW50ID09IDApIHsKKyAgICAgICAgZGVidWcoRjEwMCwi dHRidWZyIHNvY2tldCBlb2YiLCIiLDApOworI2lmZGVmIE9TMgorICAgICAgICBSZWxlYXNlVENQ SVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm4oLTEpOworICAgIH0K KyNlbHNlIC8qIENPTU1FTlQgKi8KKworLyogVGhpcyBpcyBmb3IgYmxvY2tpbmcgcmVhZHMgKi8K KworI2lmbmRlZiBWTVMKKyNpZmRlZiBTT19PT0JJTkxJTkUKKyAgICB7CisgICAgICAgIGludCBv dXRvZmJhbmQgPSAwOworI2lmZGVmIEJFTExTRUxFQ1QKKyAgICAgICAgaWYgKHNlbGVjdCgxMjgs IE5VTEwsIE5VTEwsIGVmZHMsIDApID4gMCAmJiBGRF9JU1NFVCh0dHlmZCwgZWZkcykpCisgICAg ICAgICAgb3V0b2ZiYW5kID0gMTsKKyNlbHNlCisjaWZkZWYgQlNEU0VMRUNUCisgICAgICAgIGZk X3NldCBlZmRzOworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgRkRfWkVSTygm ZWZkcyk7CisgICAgICAgIEZEX1NFVCh0dHlmZCwgJmVmZHMpOworICAgICAgICB0di50dl9zZWMg ID0gdHYudHZfdXNlYyA9IDBMOworICAgICAgICBkZWJ1ZyhGMTAwLCJPdXQtb2YtQmFuZCBCU0RT RUxFQ1QiLCIiLDApOworI2lmZGVmIE5UCisgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDE7Cisj ZW5kaWYgLyogTlQgKi8KKyAgICAgICAgaWYgKHNlbGVjdChGRF9TRVRTSVpFLCBOVUxMLCBOVUxM LCAmZWZkcywgJnR2KSA+IDAgJiYKKyAgICAgICAgICAgIEZEX0lTU0VUKHR0eWZkLCAmZWZkcykp CisgICAgICAgICAgb3V0b2ZiYW5kID0gMTsKKyNpZmRlZiBOVAorICAgICAgICBXU0FTYWZlVG9D YW5jZWwgPSAwOworI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiAhQlNEU0VMRUNUICovCisjaWZk ZWYgSUJNU0VMRUNUCisvKiBJcyB1c2VkIGJ5IE9TLzIgLi4uICovCisvKiAuLi4gYW5kIGl0IGNh bWUgaW4gaGFuZHkhICBGb3Igb3VyIFRDUC9JUCBsYXllciwgaXQgYXZvaWRzIGFsbCB0aGUgZmRf c2V0ICovCisvKiBhbmQgdGltZXZhbCBzdHVmZiBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHBsYWNl IHdoZXJlIGl0IGlzIHVzZWQuICovCisgICAgICAgIGludCBzb2NrZXQgPSB0dHlmZDsKKyAgICAg ICAgZGVidWcoRjEwMCwiT3V0LW9mLUJhbmQgSUJNU0VMRUNUIiwiIiwwKTsKKyAgICAgICAgaWYg KChzZWxlY3QoJnNvY2tldCwgMCwgMCwgMSwgMEwpID09IDEpICYmIChzb2NrZXQgPT0gdHR5ZmQp KQorICAgICAgICAgIG91dG9mYmFuZCA9IDE7CisjZWxzZSAvKiAhSUJNU0VMRUNUICovCisvKgor ICBJZiB3ZSBjYW4ndCB1c2Ugc2VsZWN0KCksIHRoZW4gd2UgdXNlIHRoZSByZWd1bGFyIGFsYXJt KCkvc2lnbmFsKCkKKyAgdGltZW91dCBtZWNoYW5pc20uCisqLworICAgICAgZGVidWcoRjEwMSwi T3V0LW9mLUJhbmQgZGF0YSBub3Qgc3VwcG9ydGVkIiwiIiwwKTsKKyAgICAgIG91dG9mYmFuZCA9 IDA7CisKKyNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KKyNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KKyNl bmRpZiAvKiBCRUxMU0VMRUNUICovCisgICAgICBpZiAob3V0b2ZiYW5kKSB7CisgICAgICAgICAv KiBHZXQgdGhlIFVyZ2VudCBEYXRhICovCisgICAgICAgICAvKiBpZiBPT0JJTkxJTkUgaXMgZGlz YWJsZWQgdGhpcyBzaG91bGQgYmUgb25seSBhIHNpbmdsZSBieXRlICAgICAgKi8KKyAgICAgICAg IC8qIE1TIFdpbnNvY2sgaGFzIGEgYnVnIGluIFdpbmRvd3MgOTUuICBFeHRyYSBieXRlcyBhcmUg ZGVsaXZlcmVkICAqLworICAgICAgICAgLyogVGhhdCB3ZXJlIG5ldmVyIHNlbnQuICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgT1MyCisgICAgICAg ICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJVCk7CisjZW5kaWYgLyogT1My ICovCisgICAgICAgICAgY291bnQgPSBzb2NrZXRfcmVjdih0dHlmZCwmdHRpYnVmW3R0aWJwK3R0 aWJuXSxjb3VudCxNU0dfT09CKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICBSZWxlYXNlVENQSVBN dXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgIGlmIChjb3VudCA8PSAwKSB7Cisg ICAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCAidHRidWZyIHNvY2tldF9yZWN2IE1TR19PT0IiLCIiLGNvdW50KTsKKyAgICAg ICAgICAgICAgZGVidWcoRjEwMSwgInR0YnVmciBzb2NrZXRfZXJybm8iLCIiLHNfZXJybm8pOwor I2lmZGVmIE9TMk9OTFkKKyAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCAmJiAoc19lcnJubyA9 PSAwIHx8IHNfZXJybm8gPT0gMjMpKSB7CisgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBhcHBl YXIgaW4gT1MvMiAtIGRvbid0IGtub3cgd2h5ICAgKi8KKyAgICAgICAgICAgICAgICAgIC8qIGln bm9yZSBpdCBhbmQgcmVhZCBhcyBub3JtYWwgZGF0YSAgICAgICAqLworICAgICAgICAgICAgICAg ICAgLyogYW5kIGJyZWFrLCB0aGVuIHdlIHdpbGwgYXR0ZW1wdCB0byByZWFkICovCisgICAgICAg ICAgICAgICAgICAvKiB0aGUgcG9ydCB1c2luZyBub3JtYWwgcmVhZCgpIHRlY2huaXF1ZXMgKi8K KyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0YnVmciBoYW5kaW5nIGFzIGluLWJhbmQg ZGF0YSIsIiIsMCk7CisgICAgICAgICAgICAgICAgICBjb3VudCA9IDE7CisgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAg ICAvKiAqKiogKioqICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQ SVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgcmV0dXJuKC0y KTsKKyAgICAgICAgICAgICAgfQorI2Vsc2UgLyogT1MyT05MWSAqLworICAgICAgICAgICAgICBu ZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogKioqICoqKiAqLworI2lmZGVmIE9T MgorICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgICAgICByZXR1cm4oLTIpOworI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyAgICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiB3ZSBnb3Qgb3V0LW9mLWJhbmQgZGF0 YSAqLworICAgICAgICAgICAgICBja2hleGR1bXAoInR0YnVmciBvdXQtb2YtYmFuZCBjaGFycyIs JnR0aWJ1Zlt0dGlicCt0dGlibl0sY291bnQpOworI2lmZGVmIEJFVEFERUJVRworICAgICAgICAg ICAgICBibGVlcChCUF9OT1RFKTsKKyNlbmRpZiAvKiBCRVRBREVCVUcgKi8KKyNpZmRlZiBSTE9H Q09ERSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibGFoICovCisgICAgICAgICAgICAgIGlm ICh0dG5wcm90byA9PSBOUF9STE9HSU4gIHx8CisgICAgICAgICAgICAgICAgICB0dG5wcm90byA9 PSBOUF9LNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8CisgICAgICAgICAgICAg ICAgICAoKHR0bnByb3RvID09IE5QX0s1TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4p ICYmIAorICAgICAgICAgICAgICAgICAgIXJsb2dfaW5iYW5kKQorICAgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAg ICAgICAgV2hlbiB1cmdlbnQgZGF0YSBpcyByZWFkIHdpdGggTVNHX09PQiBhbmQgbm90IE9PQklO TElORQorICAgICAgICAgICAgICAgICAgICB0aGVuIHVyZ2VudCBkYXRhIGFuZCBub3JtYWwgZGF0 YSBhcmUgbm90IG1peGVkLiAgU28KKyAgICAgICAgICAgICAgICAgICAgdHJlYXQgdGhlIGVudGly ZSBidWZmZXIgYXMgdXJnZW50IGRhdGEuCisgICAgICAgICAgICAgICAgICAqLworICAgICAgICAg ICAgICAgICAgcmxvZ19vb2IoJnR0aWJ1Zlt0dGlicCt0dGlibl0sIGNvdW50KTsKKyNpZmRlZiBP UzIKKyAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1My ICovCisgICAgICAgICAgICAgICAgICByZXR1cm4gdHRidWZyKCk7CisgICAgICAgICAgICAgIH0g ZWxzZQorI2VuZGlmIC8qIFJMT0dDT0RFICovIC8qIGJsYWggKi8KKyNpZmRlZiBDT01NRU5UCisg ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgSSBoYXZlbid0IHdyaXR0ZW4gdGhpcyB5ZXQs IG5vciBkbyBJIGtub3cgd2hhdCBpdCBzaG91bGQgZG8KKyAgICAgICAgICAgICAqLworICAgICAg ICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9URUxORVQpIHsKKyAgICAgICAgICAgICAgICAg ICAgdG5fb29iKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJ UE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIEZvciBhbnkgcHJvdG9jb2xzIHdlIGRvbid0IGhh dmUgYSBzcGVjaWFsIG91dC1vZi1iYW5kICAqLworICAgICAgICAgICAgICAgICAgLyogaGFuZGxl ciBmb3IsIGp1c3QgcHV0IHRoZSBieXRlcyBpbiB0aGUgbm9ybWFsIGJ1ZmZlciAgICovCisgICAg ICAgICAgICAgICAgICAvKiBhbmQgcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgdHRpYnAgKz0gMDsgICAgICAg LyogUmVzZXQgYnVmZmVyIHBvaW50ZXIuICovCisgICAgICAgICAgICAgICAgICB0dGlibiArPSBj b3VudDsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgICAgICAgLyogR290IHNvbWUgYnl0ZXMu ICovCisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIgY291bnQgMiIsIiIsY291 bnQpOworICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkKKyAgICAgICAgICAgICAgICAg ICAgICB0dGlidWZbdHRpYnArdHRpYm5dID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsInR0YnVmciB0dGlidWYiLHR0aWJ1Zix0dGlicCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5k aWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICByZXR1cm4odHRpYm4pOyAgICAvKiBSZXR1 cm4gYnVmZmVyIGNvdW50LiAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg fQorICAgIH0KKyNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwor ICAgIGNvdW50ID0gc29ja2V0X3JlYWQodHR5ZmQsJnR0aWJ1Zlt0dGlicCt0dGlibl0sY291bnQp OworICAgIGlmIChjb3VudCA8PSAwKSB7CisgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vy cm5vOworICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIgc29ja2V0X3JlYWQiLCIiLGNvdW50KTsK KyAgICAgICAgZGVidWcoRjEwMSwidHRidWZyIHNvY2tldF9lcnJubyIsIiIsc19lcnJubyk7Cisj aWZkZWYgT1MyCisgICAgICAgIGlmIChjb3VudCA9PSAwIHx8IG9zMnNvY2tldGVycm9yKHNfZXJy bm8pIDwgMCkgeworICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgUmVsZWFzZVRD UElQTXV0ZXgoKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAg UmVsZWFzZVRDUElQTXV0ZXgoKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyNlbHNlIC8qIE9TMiAq LworICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICoqKiAqKiogKi8K KyAgICAgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisjZW5kaWYgLyog Q09NTUVOVCAqLyAvKiAoYmxvY2tpbmcgdnMgbm9uYmxvY2sgcmVhZHMuLi4pICovCisgICAgZWxz ZSB7CisgICAgICAgIHR0aWJwID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgYnVm ZmVyIHBvaW50ZXIuICovCisgICAgICAgIHR0aWJuICs9IGNvdW50OworI2lmZGVmIERFQlVHCisg ICAgICAgIGRlYnVnKEYxMDEsInR0YnVmciBjb3VudCAyIiwiIixjb3VudCk7IC8qIEdvdCBzb21l IGJ5dGVzLiAqLworICAgICAgICBpZiAoY291bnQgPiAwKQorICAgICAgICAgIHR0aWJ1Zlt0dGli cCt0dGlibl0gPSAnXDAnOworICAgICAgICBkZWJ1ZyhGMTExLCJ0dGJ1ZnIgdHRpYnVmIiwmdHRp YnVmW3R0aWJwXSx0dGlibik7CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIE9TMgorICAg ICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1 cm4odHRpYm4pOyAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBidWZmZXIgY291bnQuICovCisg ICAgfQorfQorI2VuZGlmIC8qIFRDUElQTElCICovCisKKyNpZm5kZWYgSUJNU0VMRUNUCisjaWZu ZGVmIEJFTExTRUxFQ1QKKyNpZm5kZWYgQlNEU0VMRUNUICAgICAgICAgICAgICAgLyogTm9uLVRD UElQTElCIGNhc2UgKi8KKyNpZmRlZiBTRUxFQ1QKKyNkZWZpbmUgQlNEU0VMRUNUCisjZW5kaWYg LyogU0VMRUNUICovCisjZW5kaWYgLyogQlNEU0VMRUNUICovCisjZW5kaWYgLyogQkVMTFNFTEVD VCAqLworI2VuZGlmIC8qIElCTVNFTEVDVCAqLworCisjZGVmaW5lIFRFTE5FVF9QT1JUIDIzICAg ICAgICAgIC8qIFNob3VsZCBkbyBsb29rdXAsIGJ1dCBpdCB3b24ndCBjaGFuZ2UgKi8KKyNkZWZp bmUgUkxPR0lOX1BPUlQgNTEzCisjZGVmaW5lIEtFUk1JVF9QT1JUIDE2NDkKKyNkZWZpbmUgS0xP R0lOX1BPUlQgNTQzCisjZGVmaW5lIEVLTE9HSU5fUE9SVCAyMTA1CisKKyNpZm5kZWYgTk9ORVQK Ky8qCisgIEMtS2VybWl0IG5ldHdvcmsgb3Blbi9jbG9zZSBmdW5jdGlvbnMgZm9yIEJTRC1zb2Nr ZXRzLgorICBNdWNoIG9mIHRoaXMgY29kZSBzaGFyZWQgYnkgU3VuTGluayBYLjI1LCB3aGljaCBh bHNvIHVzZXMgdGhlIHNvY2tldCBsaWJyYXJ5LgorKi8KKworLyogIE4gRSBUIE8gUCBOICAtLSAg T3BlbiBhIG5ldHdvcmsgY29ubmVjdGlvbi4gICovCisvKgorICBDYWxsIHdpdGg6CisgICAgbmFt ZSBvZiBob3N0IChvciBob3N0OnNlcnZpY2UpLAorICAgIGxjbCAtIGxvY2FsLW1vZGUgZmxhZyB0 byBiZSBzZXQgaWYgdGhpcyBmdW5jdGlvbiBzdWNjZWVkcywKKyAgICBuZXR3b3JrIHR5cGUgLSB2 YWx1ZSBkZWZpbmVkIGluIGNrdW5ldC5oLgorKi8KKyNpZmRlZiBUQ1BTT0NLRVQKK3N0cnVjdCBo b3N0ZW50ICoKKyNpZmRlZiBDS19BTlNJQworY2tfY29weWhvc3RlbnQoc3RydWN0IGhvc3RlbnQg KiBoKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2NrX2NvcHlob3N0ZW50KGgpIHN0cnVjdCBob3N0 ZW50ICogaDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIC8qCisgICAgICogIFRoZSBo b3N0ZW50IHN0cnVjdHVyZSBpcyBkeW5hbWljIGluIG5hdHVyZS4KKyAgICAgKiAgc3RydWN0ICBo b3N0ZW50IHsKKyAgICAgKiAgY2hhciAgICAqIGhfbmFtZTsKKyAgICAgKiAgY2hhciAgICAqICog aF9hbGlhc2VzOworICAgICAqICBzaG9ydCAgIGhfYWRkcnR5cGU7CisgICAgICogIHNob3J0ICAg aF9sZW5ndGg7CisgICAgICogIGNoYXIgICAgKiAqIGhfYWRkcl9saXN0OworICAgICAqICAjZGVm aW5lIGhfYWRkciAgaF9hZGRyX2xpc3RbMF0KKyAgICAgKi8KKyNkZWZpbmUgSE9TVEVOVENOVCA1 CisgICAgc3RhdGljIHN0cnVjdCBob3N0ZW50IGhvc3RzW0hPU1RFTlRDTlRdID0ge3tOVUxMLE5V TEwsMCwwLE5VTEx9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7TlVMTCxOVUxMLDAsMCxOVUxMfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAge05VTEwsTlVMTCwwLDAsTlVMTH0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtOVUxMLE5VTEwsMCwwLE5VTEx9LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7TlVMTCxOVUxMLDAs MCxOVUxMfX07CisgICAgc3RhdGljIGludCAgICBuZXh0ID0gMDsKKyAgICBpbnQgICAgaSxjbnQ7 CisgICAgY2hhciAqKiBwcDsKKworICAgIGlmICggaCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJu KE5VTEwpOworCisgICAgaWYgKG5leHQgPT0gSE9TVEVOVENOVCkKKyAgICAgICAgbmV4dCA9IDA7 CisKKyAgICBpZiAoIGhvc3RzW25leHRdLmhfbmFtZSApIHsKKyAgICAgICAgZnJlZShob3N0c1tu ZXh0XS5oX25hbWUpOworICAgICAgICBob3N0c1tuZXh0XS5oX25hbWUgPSBOVUxMOworICAgIH0K KyAgICBpZiAoIGhvc3RzW25leHRdLmhfYWxpYXNlcyApIHsKKyAgICAgICAgcHAgPSBob3N0c1tu ZXh0XS5oX2FsaWFzZXM7CisgICAgICAgIHdoaWxlICggKnBwICkgeworICAgICAgICAgICAgZnJl ZSgqcHApOworICAgICAgICAgICAgcHArKzsKKyAgICAgICAgfQorICAgICAgICBmcmVlKGhvc3Rz W25leHRdLmhfYWxpYXNlcyk7CisgICAgfQorI2lmZGVmIEhBRERSTElTVAorICAgIGlmICggaG9z dHNbbmV4dF0uaF9hZGRyX2xpc3QgKSB7CisgICAgICAgIHBwID0gaG9zdHNbbmV4dF0uaF9hZGRy X2xpc3Q7CisgICAgICAgIHdoaWxlICggKnBwICkgeworICAgICAgICAgICAgZnJlZSgqcHApOwor ICAgICAgICAgICAgcHArKzsKKyAgICAgICAgfQorICAgICAgICBmcmVlKGhvc3RzW25leHRdLmhf YWRkcl9saXN0KTsKKyAgICB9CisjZW5kaWYgLyogSEFERFJMSVNUICovCisKKyAgICBtYWtlc3Ry KCZob3N0c1tuZXh0XS5oX25hbWUsaC0+aF9uYW1lKTsKKyAgICBpZiAoaC0+aF9hbGlhc2VzKSB7 CisgICAgICAgIGZvciAoIGNudD0wLHBwPWgtPmhfYWxpYXNlczsgcHAgJiYgKnBwOyBwcCsrLGNu dCsrKSA7CisgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgY2FuIGdpdmUgd2FybmluZ3MgaW4gbm9u LUFOU0kgYnVpbGRzICovCisgICAgICAgIGhvc3RzW25leHRdLmhfYWxpYXNlcyA9IChjaGFyICoq KSBtYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiAoY250KzEpKTsKKyAgICAgICAgZm9yICggaT0wOyBp PGNudDsgaSsrKSB7CisgICAgICAgICAgICBob3N0c1tuZXh0XS5oX2FsaWFzZXNbaV0gPSBOVUxM OworICAgICAgICAgICAgbWFrZXN0cigmaG9zdHNbbmV4dF0uaF9hbGlhc2VzW2ldLGgtPmhfYWxp YXNlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgaG9zdHNbbmV4dF0uaF9hbGlhc2VzW2ldID0g TlVMTDsKKyAgICB9IGVsc2UKKyAgICAgICAgaG9zdHNbbmV4dF0uaF9hbGlhc2VzID0gTlVMTDsK KworICAgIGhvc3RzW25leHRdLmhfYWRkcnR5cGUgPSBoLT5oX2FkZHJ0eXBlOworICAgIGhvc3Rz W25leHRdLmhfbGVuZ3RoID0gaC0+aF9sZW5ndGg7CisKKyNpZmRlZiBIQUREUkxJU1QKKyNpZmRl ZiBoX2FkZHIKKyAgICBpZiAoaC0+aF9hZGRyX2xpc3QpIHsKKyAgICAgICAgZm9yICggY250PTAs cHA9aC0+aF9hZGRyX2xpc3Q7IHBwICYmICpwcDsgcHArKyxjbnQrKykgOworICAgICAgICAvKiBU aGUgZm9sbG93aW5nIGNhbiBnaXZlIHdhcm5pbmdzIG5vbi1BTlNJIGJ1aWxkcyAqLworICAgICAg ICBob3N0c1tuZXh0XS5oX2FkZHJfbGlzdCA9IChjaGFyICoqKSBtYWxsb2Moc2l6ZW9mKGNoYXIg KikgKiAoY250KzEpKTsKKyAgICAgICAgZm9yICggaT0wOyBpPGNudDsgaSsrKSB7CisgICAgICAg ICAgICBob3N0c1tuZXh0XS5oX2FkZHJfbGlzdFtpXSA9IG1hbGxvYyhoLT5oX2xlbmd0aCk7Cisg ICAgICAgICAgICBiY29weShoLT5oX2FkZHJfbGlzdFtpXSxob3N0c1tuZXh0XS5oX2FkZHJfbGlz dFtpXSxoLT5oX2xlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgaG9zdHNbbmV4dF0uaF9hZGRy X2xpc3RbaV0gPSBOVUxMOworICAgIH0gZWxzZQorICAgICAgICBob3N0c1tuZXh0XS5oX2FkZHJf bGlzdCA9IE5VTEw7CisjZWxzZQorICAgIGJjb3B5KGgtPmhfYWRkciwgJmhvc3RzW25leHRdLmhf YWRkciwgaC0+aF9sZW5ndGgpOworI2VuZGlmIC8qIGhfYWRkciAqLworI2Vsc2UgLyogSEFERFJM SVNUICovCisgICAgYmNvcHkoaC0+aF9hZGRyLCAmaG9zdHNbbmV4dF0uaF9hZGRyLCBoLT5oX2xl bmd0aCk7CisjZW5kaWYgLyogSEFERFJMSVNUICovCisKKyAgICByZXR1cm4oJmhvc3RzW25leHQr K10pOworfQorCisjaWZkZWYgRVhDRUxBTgorLyoKKyAgTW9zdCBvdGhlciBCU0Qgc29ja2V0cyBp bXBsZW1lbnRhdGlvbnMgZGVmaW5lIHRoZXNlIGluIGhlYWRlciBmaWxlcworICBhbmQgbGlicmFy aWVzLgorKi8KK3N0cnVjdCBzZXJ2ZW50IHsKKyAgICB1bnNpZ25lZCBzaG9ydCBzX3BvcnQ7Cit9 OworCitzdHJ1Y3QgaG9zdGVudCB7CisgICAgc2hvcnQgaF9hZGRydHlwZTsKKyAgICBzdHJ1Y3Qg aW5fYWRkciBoX2FkZHI7CisgICAgaW50IGhfbGVuZ3RoOworfTsKKworc3RydWN0IHNlcnZlbnQg KgorZ2V0c2VydmJ5bmFtZShzZXJ2aWNlLCBjb25uZWN0aW9uKSBjaGFyICpzZXJ2aWNlLCpjb25u ZWN0aW9uOyB7CisgICAgc3RhdGljIHN0cnVjdCBzZXJ2ZW50IHNlcnZyZWM7CisgICAgaW50IHBv cnQ7CisKKyAgICBwb3J0ID0gMDsKKyAgICBpZiAoc3RyY21wKHNlcnZpY2UsICJ0ZWxuZXQiKSA9 PSAwKSBwb3J0ID0gMjM7CisgICAgZWxzZSBpZiAoc3RyY21wKHNlcnZpY2UsICJzbXRwIikgPT0g MCkgcG9ydCA9IDI1OworICAgIGVsc2UgcG9ydCA9IGF0b2koc2VydmljZSk7CisKKyAgICBkZWJ1 ZyhGMTAxLCJnZXRzZXJ2YnluYW1lIHJldHVybiBwb3J0ICIsIiIscG9ydCk7CisKKyAgICBpZiAo cG9ydCA+IDApIHsKKyAgICAgICAgc2VydnJlYy5zX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAg ICAgcmV0dXJuKCZzZXJ2cmVjKTsKKyAgICB9CisgICAgcmV0dXJuKChzdHJ1Y3Qgc2VydmVudCAq KSBOVUxMKTsKK30KKworc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSkg Y2hhciAqaG9zdG5hbWU7IHsKKyAgICByZXR1cm4oKHN0cnVjdCBob3N0ZW50ICopIE5VTEwpOwor fQorCit1bnNpZ25lZCBsb25nCitpbmV0X2FkZHIobmFtZSkgY2hhciAqbmFtZTsgeworICAgIHVu c2lnbmVkIGxvbmcgYWRkcjsKKworICAgIGFkZHIgPSByaG9zdCgmbmFtZSk7CisgICAgZGVidWco RjExMSwiaW5ldF9hZGRyICIsbmFtZSwoaW50KWFkZHIpOworICAgIHJldHVybihhZGRyKTsKK30K KworY2hhciAqCitpbmV0X250b2EoaW4pIHN0cnVjdCBpbl9hZGRyIGluOyB7CisgICAgc3RhdGlj IGNoYXIgbmFtZVs4MF07CisgICAgY2ttYWt4bXNnKG5hbWUsIGNrdWl0b2EoaW4uc19uZXQpLCIu Iixja3VpdG9hKGluLnNfaG9zdCksIi4iLAorICAgICAgICAgICAgICAgY2t1aXRvYShpbi5zX2xo KSwiLiIsIGNrdWl0b2EoaW4uc19pbXBubykpOworICAgIHJldHVybihuYW1lKTsKK30KKyNlbHNl CisjaWZkZWYgREVDX1RDUElQICAgICAgICAgICAgICAgICAgICAgICAgLyogVUNYICovCisKK2lu dCB1Y3hfcG9ydF9idWcgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBFeHBsYWluZWQgYmVsb3cg Ki8KKworI2lmZGVmIE9MRElQCQkJCS8qIFZlcnkgb2xkIFZBWEMgb3IgR0NDICovCisvKgorICBO b3RlIHRoYXQgbXkgb2xkZXN0IFZBWCBDIChWMy4xLTA1MSkgZG9lcyBub3QgbmVlZCAob3Igd2Fu dCkgT0xESVAsCisgIGhlbmNlIHRoZSAiVmVyeSBvbGQiIGluIHRoZSBjb21tZW50IC0gU01TLCAy MDEwLzAzLzE1LgorKi8KKyNkZWZpbmUgZ2V0c2VydmJ5bmFtZSBteV9nZXRzZXJ2YnluYW1lCisK KyNpZmRlZiBDS19BTlNJQworZ2xvYmFscmVmIGludCAoKkMkJEdBX1VDWF9HRVRTRVJWQllOQU1F KSgpOworZXh0ZXJuIHZvaWQgQyQkVFJBTlNMQVRFKCk7CitleHRlcm4gdm9pZCBDJCRTT0NLX1RS QU5TTEFURSgpOworI2Vsc2UKK2dsb2JhbHJlZiBpbnQgKCpDJCRHQV9VQ1hfR0VUU0VSVkJZTkFN RSkoKTsKK2V4dGVybiBWT0lEIEMkJFRSQU5TTEFURSgpOworZXh0ZXJuIFZPSUQgQyQkU09DS19U UkFOU0xBVEUoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworCitzdHJ1Y3Qgc2VydmVudCAqCitt eV9nZXRzZXJ2YnluYW1lIChzZXJ2aWNlLCBwcm90bykgY2hhciAqc2VydmljZSwgKnByb3RvOyB7 CisgICAgc3RhdGljIHN0cnVjdCBzZXJ2ZW50IHNlbnQ7CisgICAgc3RydWN0IGlvc2IgeworICAg ICAgICB1bmlvbiB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXR1czsKKyAgICAgICAg ICAgIHVuc2lnbmVkIHNob3J0IHN0WzJdOworICAgICAgICB9IHNiOworICAgICAgICB1bnNpZ25l ZCBsb25nIHNwYXJlOworICAgIH0gczsKKyAgICBzdHJ1Y3QgeworICAgICAgICBzdHJ1Y3QgaW9z YiAqczsKKyAgICAgICAgY2hhciAqc2VydjsKKyAgICAgICAgY2hhciAqcHJvdDsKKyAgICB9IHBh cjsKKyAgICB1bnNpZ25lZCBsb25nIGU7CisgICAgY2hhciBzYnVmWzMwXSwgcGJ1ZlszMF07Cisg ICAgY2hhciAqcDsKKworICAgIGRlYnVnKEYxMTEsIlVDWCBnZXRzZXJ2YnluYW1lIixzZXJ2aWNl LChpbnQpQyQkR0FfVUNYX0dFVFNFUlZCWU5BTUUpOworCisgICAgcCA9IHNidWY7CisgICAgY2tz dHJuY3B5KHAsIHNlcnZpY2UsIDI5KTsKKyAgICB3aGlsZSAoKnAgPSB0b3VwcGVyKCpwKSwgKnAr Kykge30KKyAgICBwID0gcGJ1ZjsKKyAgICBja3N0cm5jcHkocCwgcHJvdG8sIDI5KTsKKyAgICB3 aGlsZSAoKnAgPSB0b3VwcGVyKCpwKSwgKnArKykge30KKworICAgIHBhci5zID0gJnM7CisKKyAg ICBwYXIuc2VydiA9ICIiOworICAgIHBhci5wcm90ID0gIiI7CisgICAgLyogcmVzZXQgZmlsZSBw b2ludGVyIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQhPyE/ICovCisgICAgZSA9ICgqQyQkR0FfVUNY X0dFVFNFUlZCWU5BTUUpKCZwYXIsICZzZW50LCBwYXIucyk7CisgICAgcGFyLnNlcnYgPSBzYnVm OworICAgIHBhci5wcm90ID0gcGJ1ZjsgICAgICAgICAgICAvKiB0aGF0IGlzIGRvbid0IGNhcmUg Ki8KKyAgICBlID0gKCpDJCRHQV9VQ1hfR0VUU0VSVkJZTkFNRSkoJnBhciwgJnNlbnQsIHBhci5z KTsKKyAgICBpZiAoKGxvbmcpZSA9PSAtMUwpCisgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAo KGUgJiAxKSA9PSAwTCkgeworICAgICAgICBDJCRUUkFOU0xBVEUoZSk7CisgICAgICAgIHJldHVy biBOVUxMOworICAgIH0KKyAgICBpZiAoKHMuc2Iuc3RbMF0gJiAxKSA9PSAwKSB7CisgICAgICAg IEMkJFNPQ0tfVFJBTlNMQVRFKCZzLnNiLnN0WzBdKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgfQorLyoKKyAgc2VudC5zX3BvcnQgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgYnkgVUNY IGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAgSG93ZXZlciwgVUNYIDIuMCB0aHJvdWdoIDIuMEMg ZGlkIG5vdCBkbyB0aGlzOyAyLjBEIGFuZCBsYXRlciBkbyBpdC4KKyAgQnV0IHRoZXJlIGlzIG5v IHdheSBvZiBrbm93aW5nIHdoaWNoIFVDWCB2ZXJzaW9uLCBzbyB3ZSBoYXZlIGEgdXNlci1zZXR0 YWJsZQorICBydW50aW1lIHZhcmlhYmxlLiAgTm90ZTogVUNYIDIuMCB3YXMgb25seSBmb3IgdGhl IFZBWC4KKyovCisgICAgZGVidWcoRjEwMSwiVUNYIGdldHNlcnZieW5hbWUgcG9ydCIsIiIsc2Vu dC5zX3BvcnQpOworICAgIGRlYnVnKEYxMDEsIlVDWCBnZXRzZXJ2YnluYW1lIG50b2hzKHBvcnQp IiwiIixudG9ocyhzZW50LnNfcG9ydCkpOworICAgIGlmICh1Y3hfcG9ydF9idWcpIHsKKyAgICAg ICAgc2VudC5zX3BvcnQgPSBodG9ucyhzZW50LnNfcG9ydCk7CisgICAgICAgIGRlYnVnKEYxMDAs IlVDWC1QT1JULUJVRyBPTjogc3dhcHBpbmcgYnl0ZXMiLCIiLDApOworICAgICAgICBkZWJ1ZyhG MTAxLCJVQ1ggc3dhcHBlZCBwb3J0IiwiIixzZW50LnNfcG9ydCk7CisgICAgICAgIGRlYnVnKEYx MDEsIlVDWCBzd2FwcGVkIG50b2hzKHBvcnQpIiwiIixudG9ocyhzZW50LnNfcG9ydCkpOworICAg IH0KKyAgICByZXR1cm4gJnNlbnQ7Cit9CisjZW5kaWYgLyogZGVmIE9MRElQICovCisjZW5kaWYg LyogREVDX1RDUElQICovCisjZW5kaWYgLyogRVhDRUxBTiAqLworCitpbnQKK2dldHRjcHBvcnQo KSB7CisgICAgcmV0dXJuKHN2Y251bSk7Cit9CisKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKwor I2lmbmRlZiBOT1RDUE9QVFMKKyNpZm5kZWYgZGF0YWdlbmVyYWwKK2ludAorY2tfbGluZ2VyKHNv Y2ssIG9ub2ZmLCB0aW1vKSBpbnQgc29jazsgaW50IG9ub2ZmOyBpbnQgdGltbzsgeworLyoKKyAg VGhlIGZvbGxvd2luZywgZnJvbSBXaWxsaWFtIEJhZGVyLCB0dXJucyBvZmYgdGhlIHNvY2tldCBs aW5nZXIgcGFyYW1ldGVyLAorICB3aGljaCBtYWtlcyBhIGNsb3NlKCkgYmxvY2sgdW50aWwgYWxs IGRhdGEgaXMgc2VudC4gICJJIGRvbid0IHRoaW5rIHRoYXQKKyAgZGlzYWJsaW5nIGxpbmdlciBj YW4gZXZlciBjYXVzZSBrZXJtaXQgdG8gbG9zZSBkYXRhLCBidXQgeW91IHRlbG5ldCB0byBhCisg IGZsYWt5IHNlcnZlciAob3IgdG8gb3VyIG1vZGVtIHNlcnZlciB3aGVuIHRoZSBtb2RlbSBpcyBp biB1c2UpLCBkaXNhYmxpbmcKKyAgbGluZ2VyIHByZXZlbnRzIGtlcm1pdCBmcm9tIGhhbmdpbmcg b24gdGhlIGNsb3NlIGlmIHlvdSB0cnkgdG8gZXhpdC4iCisKKyAgTW9kaWZpZWQgYnkgSmVmZiBB bHRtYW4gdG8gYmUgZ2VuZXJhbGx5IHVzZWZ1bC4KKyovCisjaWZkZWYgU09MX1NPQ0tFVAorI2lm ZGVmIFNPX0xJTkdFUgorICAgIHN0cnVjdCBsaW5nZXIgc2V0X2xpbmdlcl9vcHQ7CisgICAgc3Ry dWN0IGxpbmdlciBnZXRfbGluZ2VyX29wdDsKKyAgICBTT0NLT1BUX1QgeDsKKworI2lmZGVmIElL U0QKKyAgICBpZiAoIWluc2VydmVyKQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgIGlmIChzb2Nr ID09IC0xIHx8CisgICAgICAgIG5ldHR5cGUgIT0gTkVUX1RDUEEgJiYgbmV0dHlwZSAhPSBORVRf VENQQiAmJgorICAgICAgICBuZXR0eXBlICE9IE5FVF9TU0ggfHwgdHRtZG0gPj0gMCkgeworICAg ICAgICB0Y3BfbGluZ2VyID0gb25vZmY7CisgICAgICAgIHRjcF9saW5nZXJfdG1vID0gdGltbzsK KyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICB4ID0gc2l6ZW9mKGdldF9saW5nZXJfb3B0 KTsKKyAgICBpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19MSU5HRVIsCisgICAg ICAgICAgICAgICAgICAgIChjaGFyICopJmdldF9saW5nZXJfb3B0LCAmeCkpIHsKKyAgICAgICAg ZGVidWcoRjExMSwiVENQIGNrX2xpbmdlciBjYW4ndCBnZXQgU09fTElOR0VSIixja19lcnJzdHIo KSxlcnJubyk7CisgICAgfSBlbHNlIGlmICh4ICE9IHNpemVvZihnZXRfbGluZ2VyX29wdCkpIHsK KyNpZmRlZiBPUzIKKyAgICAgICAgc3RydWN0IF9saW5nZXIxNiB7CisgICAgICAgICAgICBzaG9y dCBzX2xpbmdlcjsKKyAgICAgICAgICAgIHNob3J0IHNfb25vZmY7CisgICAgICAgIH0gZ2V0X2xp bmdlcl9vcHQxNiwgc2V0X2xpbmdlcl9vcHQxNjsKKyAgICAgICAgaWYgKCB4ID09IHNpemVvZihn ZXRfbGluZ2VyX29wdDE2KSApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBzZXRsaW5n ZXIgd2FybmluZzogU09fTElOR0VSIiwibGVuIGlzIDE2LWJpdCIseCk7CisgICAgICAgICAgICBp ZiAoZ2V0c29ja29wdChzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tF VCwgU09fTElOR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmZ2V0X2xp bmdlcl9vcHQxNiwgJngpCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgZGVi dWcoRjExMSwKKyAgICAgICAgICAgICAgICAgICAgICAiVENQIGNrX2xpbmdlciBjYW4ndCBnZXQg U09fTElOR0VSIixja19lcnJzdHIoKSxlcnJubyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGdl dF9saW5nZXJfb3B0MTYuc19vbm9mZiAhPSBvbm9mZiB8fAorICAgICAgICAgICAgICAgICAgICAg ICBnZXRfbGluZ2VyX29wdDE2LnNfbGluZ2VyICE9IHRpbW8pCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgc2V0X2xpbmdlcl9vcHQxNi5zX29ub2ZmICA9IG9ub2ZmOworICAgICAgICAg ICAgICAgIHNldF9saW5nZXJfb3B0MTYuc19saW5nZXIgPSB0aW1vOworICAgICAgICAgICAgICAg IGlmIChzZXRzb2Nrb3B0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09M X1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT19MSU5HRVIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X2xpbmdlcl9vcHQxNiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X2xpbmdlcl9vcHQxNikpCisg ICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIGNrX2xpbmdlciBjYW4ndCBzZXQgU09fTElO R0VSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksCisgICAgICAgICAg ICAgICAgICAgICAgICAgIGVycm5vCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgICAgIHRjcF9saW5nZXIgPSBnZXRfbGluZ2VyX29wdDE2LnNfb25vZmY7Cisg ICAgICAgICAgICAgICAgICAgIHRjcF9saW5nZXJfdG1vID0gZ2V0X2xpbmdlcl9vcHQxNi5zX2xp bmdlcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIGNrX2xpbmdlciBuZXcgU09f TElOR0VSIiwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2xpbmdlcl9vcHQxNi5z X29ub2ZmKTsKKyAgICAgICAgICAgICAgICAgICAgdGNwX2xpbmdlciA9IHNldF9saW5nZXJfb3B0 MTYuc19vbm9mZjsKKyAgICAgICAgICAgICAgICAgICAgdGNwX2xpbmdlcl90bW8gPSBzZXRfbGlu Z2VyX29wdDE2LnNfbGluZ2VyOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsIlRDUCBja19saW5nZXIgU09fTElOR0VSIHVuY2hhbmdlZCIsIiIsCisgICAgICAgICAg ICAgICAgICAgICAgIGdldF9saW5nZXJfb3B0MTYuc19vbm9mZik7CisgICAgICAgICAgICAgICAg dGNwX2xpbmdlciA9IGdldF9saW5nZXJfb3B0MTYuc19vbm9mZjsKKyAgICAgICAgICAgICAgICB0 Y3BfbGluZ2VyX3RtbyA9IGdldF9saW5nZXJfb3B0MTYuc19saW5nZXI7CisgICAgICAgICAgICAg ICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgZGVidWcoRjExMSwiVENQIGNrX2xpbmdl ciBlcnJvcjogU09fTElOR0VSIiwibGVuIix4KTsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIGNr X2xpbmdlciBTT19MSU5HRVIiLAorICAgICAgICAgICAgICAiZXhwZWN0ZWQgbGVuIixzaXplb2Yo Z2V0X2xpbmdlcl9vcHQpKTsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIGNrX2xpbmdlciBTT19M SU5HRVIiLCJsaW5nZXJfb3B0Lmxfb25vZmYiLAorICAgICAgICAgICAgICBnZXRfbGluZ2VyX29w dC5sX29ub2ZmKTsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIGxpbmdlciBTT19MSU5HRVIiLCJs aW5nZXJfb3B0LmxfbGluZ2VyIiwKKyAgICAgICAgICAgICAgIGdldF9saW5nZXJfb3B0LmxfbGlu Z2VyKTsKKyAgICB9IGVsc2UgaWYgKGdldF9saW5nZXJfb3B0Lmxfb25vZmYgIT0gb25vZmYgfHwK KyAgICAgICAgICAgICAgIGdldF9saW5nZXJfb3B0LmxfbGluZ2VyICE9IHRpbW8pIHsKKyAgICAg ICAgc2V0X2xpbmdlcl9vcHQubF9vbm9mZiAgPSBvbm9mZjsKKyAgICAgICAgc2V0X2xpbmdlcl9v cHQubF9saW5nZXIgPSB0aW1vOworICAgICAgICBpZiAoc2V0c29ja29wdChzb2NrLAorICAgICAg ICAgICAgICAgICAgICAgICBTT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICBTT19M SU5HRVIsCisgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJnNldF9saW5nZXJfb3B0LAor ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X2xpbmdlcl9vcHQpKSkgeworICAgICAg ICAgICAgZGVidWcoRjExMSwiVENQIGNrX2xpbmdlciBjYW4ndCBzZXQgU09fTElOR0VSIixja19l cnJzdHIoKSxlcnJubyk7CisgICAgICAgICAgICB0Y3BfbGluZ2VyID0gZ2V0X2xpbmdlcl9vcHQu bF9vbm9mZjsKKyAgICAgICAgICAgIHRjcF9saW5nZXJfdG1vID0gZ2V0X2xpbmdlcl9vcHQubF9s aW5nZXI7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIGRlYnVnKEYxMDEsCisgICAg ICAgICAgICAgICAgICAgIlRDUCBja19saW5nZXIgbmV3IFNPX0xJTkdFUiIsCisgICAgICAgICAg ICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgc2V0X2xpbmdlcl9vcHQubF9vbm9mZgor ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgdGNwX2xpbmdlciA9IHNldF9saW5n ZXJfb3B0Lmxfb25vZmY7CisgICAgICAgICAgICAgdGNwX2xpbmdlcl90bW8gPSBzZXRfbGluZ2Vy X29wdC5sX2xpbmdlcjsKKyAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgIH0KKyAgICB9 IGVsc2UgeworICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgY2tfbGluZ2VyIFNPX0xJTkdFUiB1bmNo YW5nZWQiLCIiLAorICAgICAgICAgICAgICBnZXRfbGluZ2VyX29wdC5sX29ub2ZmKTsKKyAgICAg ICAgdGNwX2xpbmdlciA9IGdldF9saW5nZXJfb3B0Lmxfb25vZmY7CisgICAgICAgIHRjcF9saW5n ZXJfdG1vID0gZ2V0X2xpbmdlcl9vcHQubF9saW5nZXI7CisgICAgICAgIHJldHVybiAxOworICAg IH0KKyNlbHNlCisgICAgZGVidWcoRjEwMCwiVENQIGNrX2xpbmdlciBTT19MSU5HRVIgbm90IGRl ZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2Vsc2UKKyAgICBkZWJ1ZyhG MTAwLCJUQ1AgY2tfbGluZ2VyIFNPX1NPQ0tFVCBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYg LyogU09MX1NPQ0tFVCAqLworICAgIHJldHVybigwKTsKK30KKworaW50CitzZW5kYnVmKHNvY2ss c2l6ZSkgaW50IHNvY2s7IGludCBzaXplOyB7CisvKgorICBUaGUgZm9sbG93aW5nLCBmcm9tIFdp bGxpYW0gQmFkZXIsIGFsbG93cyBjaGFuZ2luZyBvZiBzb2NrZXQgYnVmZmVyIHNpemVzLAorICBp biBjYXNlIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLgorCisgIE1vZGlmaWVkIGJ5IEpl ZmYgQWx0bWFuIHRvIGJlIGdlbmVyYWxseSB1c2VmdWwuCisqLworI2lmZGVmIFNPTF9TT0NLRVQK KyNpZmRlZiBTT19TTkRCVUYKKyAgICBpbnQgaSwgajsKKyAgICBTT0NLT1BUX1QgeDsKKworI2lm ZGVmIElLU0QKKyAgICBpZiAoIWluc2VydmVyKQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgIGlm IChzb2NrID09IC0xIHx8CisgICAgICAgIG5ldHR5cGUgIT0gTkVUX1RDUEEgJiYgbmV0dHlwZSAh PSBORVRfVENQQiAmJiBuZXR0eXBlICE9IE5FVF9TU0gKKyAgICAgICAgICAgICAgICB8fCB0dG1k bSA+PSAwKSB7CisgICAgICAgIHRjcF9zZW5kYnVmID0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIDE7 CisgICAgfQorICAgIHggPSBzaXplb2YoaSk7CisgICAgaWYgKGdldHNvY2tvcHQoc29jaywgU09M X1NPQ0tFVCwgU09fU05EQlVGLCAoY2hhciAqKSZpLCAmeCkpIHsKKyAgICAgICAgZGVidWcoRjEx MSwiVENQIHNlbmRidWYgY2FuJ3QgZ2V0IFNPX1NOREJVRiIsY2tfZXJyc3RyKCksZXJybm8pOwor ICAgIH0gZWxzZSBpZiAoeCAhPSBzaXplb2YoaSkpIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgc2hv cnQgaTE2LGoxNjsKKyAgICAgICAgaWYgKHggPT0gc2l6ZW9mKGkxNikpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTEsIlRDUCBzZW5kYnVmIHdhcm5pbmc6IFNPX1NOREJVRiIsImxlbiBpcyAxNi1i aXQiLHgpOworICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopJmkxNiwgJngpCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwiVENQIHNlbmRidWYgY2FuJ3QgZ2V0IFNPX1NOREJVRiIsCisgICAg ICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksZXJybm8pOworICAgICAgICAgICAgfSBlbHNl IGlmIChzaXplIDw9IDApIHsKKyAgICAgICAgICAgICAgICB0Y3Bfc2VuZGJ1ZiA9IGkxNjsKKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBTT19TTkRCVUYgcmV0cmlldmVk IiwiIixpMTYpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfSBlbHNl IGlmIChpMTYgIT0gc2l6ZSkgeworICAgICAgICAgICAgICAgIGoxNiA9IHNpemU7CisgICAgICAg ICAgICAgICAgaWYgKHNldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPX1NOREJV RiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZqMTYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGoxNikpCisgICAgICAgICAgICAgICAgICAg ICkgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agc2VuZGJ1ZiBjYW4ndCBz ZXQgU09fU05EQlVGIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksZXJy bm8pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsIlRDUCBzZW5kYnVmIG9sZCBTT19TTkRCVUYiLCIiLGkxNik7CisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsIlRDUCBzZW5kYnVmIG5ldyBTT19TTkRCVUYiLCIiLGoxNik7Cisg ICAgICAgICAgICAgICAgICAgIHRjcF9zZW5kYnVmID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBTT19TTkRCVUYgdW5jaGFuZ2Vk IiwiIixpMTYpOworICAgICAgICAgICAgICAgIHRjcF9zZW5kYnVmID0gc2l6ZTsKKyAgICAgICAg ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigwKTsK KyAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agc2Vu ZGJ1ZiBlcnJvcjogU09fU05EQlVGIiwibGVuIix4KTsKKyAgICAgICAgZGVidWcoRjExMSwiVENQ IHNlbmRidWYgU09fU05EQlVGIiwiZXhwZWN0ZWQgbGVuIixzaXplb2YoaSkpOworICAgICAgICBk ZWJ1ZyhGMTExLCJUQ1Agc2VuZGJ1ZiBTT19TTkRCVUYiLCJpIixpKTsKKyAgICB9IGVsc2UgaWYg KHNpemUgPD0gMCkgeworICAgICAgICB0Y3Bfc2VuZGJ1ZiA9IGk7CisgICAgICAgIGRlYnVnKEYx MDEsIlRDUCBzZW5kYnVmIFNPX1NOREJVRiByZXRyaWV2ZWQiLCIiLGkpOworICAgICAgICByZXR1 cm4gMTsKKyAgICB9IGVsc2UgaWYgKGkgIT0gc2l6ZSkgeworICAgICAgICBqID0gc2l6ZTsKKyAg ICAgICAgaWYgKHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAoY2hhciAq KSZqLCBzaXplb2YoaikpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Agc2VuZGJ1ZiBj YW4ndCBzZXQgU09fU05EQlVGIixja19lcnJzdHIoKSxlcnJubyk7CisgICAgICAgICAgICB0Y3Bf c2VuZGJ1ZiA9IGk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJU Q1Agc2VuZGJ1ZiBvbGQgU09fU05EQlVGIiwiIixpKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs IlRDUCBzZW5kYnVmIG5ldyBTT19TTkRCVUYiLCIiLGopOworICAgICAgICAgICAgdGNwX3NlbmRi dWYgPSBzaXplOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug eworICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agc2VuZGJ1ZiBTT19TTkRCVUYgdW5jaGFuZ2VkIiwi IixpKTsKKyAgICAgICAgdGNwX3NlbmRidWYgPSBzaXplOworICAgICAgICByZXR1cm4gMTsKKyAg ICB9CisjZWxzZQorICAgIGRlYnVnKEYxMDAsIlRDUCBzZW5kYnVmIFNPX1NOREJVRiBub3QgZGVm aW5lZCIsIiIsMCk7CisjZW5kaWYgLyogU09fU05EQlVGICovCisjZWxzZQorICAgIGRlYnVnKEYx MDAsIlRDUCBzZW5kYnVmIFNPX1NPQ0tFVCBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyog U09MX1NPQ0tFVCAqLworICAgIHJldHVybigwKTsKK30KKworaW50CityZWN2YnVmKHNvY2ssc2l6 ZSkgaW50IHNvY2s7IGludCBzaXplOyB7CisvKgorICBUaGUgZm9sbG93aW5nLCBmcm9tIFdpbGxp YW0gQmFkZXIsIGFsbG93cyBjaGFuZ2luZyBvZiBzb2NrZXQgYnVmZmVyIHNpemVzLAorICBpbiBj YXNlIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLgorCisgIE1vZGlmaWVkIGJ5IEplZmYg QWx0bWFuIHRvIGJlIGdlbmVyYWxseSB1c2VmdWwuCisqLworI2lmZGVmIFNPTF9TT0NLRVQKKyNp ZmRlZiBTT19SQ1ZCVUYKKyAgICBpbnQgaSwgajsKKyAgICBTT0NLT1BUX1QgeDsKKworI2lmZGVm IElLU0QKKyAgICBpZiAoIWluc2VydmVyKQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgIGlmIChz b2NrID09IC0xIHx8CisJICBuZXR0eXBlICE9IE5FVF9UQ1BBICYmIG5ldHR5cGUgIT0gTkVUX1RD UEIgJiYKKwkgIG5ldHR5cGUgIT0gTkVUX1NTSCB8fCB0dG1kbSA+PSAwKSB7CisgICAgICAgIHRj cF9yZWN2YnVmID0gc2l6ZTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyAgICB4ID0gc2l6 ZW9mKGkpOworICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwg KGNoYXIgKikmaSwgJngpKSB7CisgICAgICAgIGRlYnVnKEYxMTEsIlRDUCByZWN2YnVmIGNhbid0 IGdldCBTT19SQ1ZCVUYiLGNrX2VycnN0cigpLGVycm5vKTsKKyAgICB9IGVsc2UgaWYgKHggIT0g c2l6ZW9mKGkpKSB7CisjaWZkZWYgT1MyCisgICAgICAgIHNob3J0IGkxNixqMTY7CisgICAgICAg IGlmICggeCA9PSBzaXplb2YoaTE2KSApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBy ZWN2YnVmIHdhcm5pbmc6IFNPX1JDVkJVRiIsImxlbiBpcyAxNi1iaXQiLHgpOworICAgICAgICAg ICAgaWYgKGdldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPTF9T T0NLRVQsIFNPX1JDVkJVRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJmkx NiwgJngpCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi VENQIHJlY3ZidWYgY2FuJ3QgZ2V0IFNPX1JDVkJVRiIsCisgICAgICAgICAgICAgICAgICAgICAg Y2tfZXJyc3RyKCksZXJybm8pOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaXplIDw9IDApIHsK KyAgICAgICAgICAgICAgICB0Y3BfcmVjdmJ1ZiA9IGkxNjsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJUQ1AgcmVjdmJ1ZiBTT19SQ1ZCVUYgcmV0cmlldmVkIiwiIixpMTYpOworICAgICAg ICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChpMTYgIT0gc2l6ZSkg eworICAgICAgICAgICAgICAgIGoxNiA9IHNpemU7CisgICAgICAgICAgICAgICAgaWYgKHNldHNv Y2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAoY2hhciAqKSZqMTYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGoxNikpKSB7CisgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsIlRDUCByZWN2YnVmIGNhbicgc2V0IFNPX1JDVkJVRiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLGVycm5vKTsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgcmVjdmJ1ZiBvbGQg U09fUkNWQlVGIiwiIixpMTYpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Ag cmVjdmJ1ZiBuZXcgU09fUkNWQlVGIiwiIixqMTYpOworICAgICAgICAgICAgICAgICAgICB0Y3Bf cmVjdmJ1ZiA9IHNpemU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwiVENQIHJlY3ZidWYgU09fUkNWQlVGIHVuY2hhbmdlZCIsIiIsaTE2KTsKKyAgICAgICAgICAg ICAgICB0Y3BfcmVjdmJ1ZiA9IHNpemU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYgZXJyb3I6IFNPX1JDVkJVRiIs ImxlbiIseCk7CisgICAgICAgIGRlYnVnKEYxMTEsIlRDUCByZWN2YnVmIFNPX1JDVkJVRiIsImV4 cGVjdGVkIGxlbiIsc2l6ZW9mKGkpKTsKKyAgICAgICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYg U09fUkNWQlVGIiwiaSIsaSk7CisgICAgfSBlbHNlIGlmIChzaXplIDw9IDApIHsKKyAgICAgICAg dGNwX3JlY3ZidWYgPSBpOworICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgcmVjdmJ1ZiBTT19SQ1ZC VUYgcmV0cmlldmVkIiwiIixpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIGlmIChp ICE9IHNpemUpIHsKKyAgICAgICAgaiA9IHNpemU7CisgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNv Y2ssIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgKGNoYXIgKikmaiwgc2l6ZW9mKGopKSkgeworICAg ICAgICAgICAgZGVidWcoRjExMSwiVENQIHJlY3ZidWYgY2FuJ3Qgc2V0IFNPX1JDVkJVRiIsY2tf ZXJyc3RyKCksZXJybm8pOworICAgICAgICAgICAgdGNwX3JlY3ZidWYgPSBpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQIHJlY3ZidWYgb2xkIFNPX1JDVkJV RiIsIiIsaSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgcmVjdmJ1ZiBuZXcgU09fUkNW QlVGIiwiIixqKTsKKyAgICAgICAgICAgIHRjcF9yZWN2YnVmID0gc2l6ZTsKKyAgICAgICAgICAg IHJldHVybiAxOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjEwMSwi VENQIHJlY3ZidWYgU09fUkNWQlVGIHVuY2hhbmdlZCIsIiIsaSk7CisgICAgICAgIHRjcF9yZWN2 YnVmID0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorI2Vsc2UKKyAgICBkZWJ1ZyhG MTAwLCJUQ1AgcmVjdmJ1ZiBTT19SQ1ZCVUYgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8q IFNPX1JDVkJVRiAqLworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJUQ1AgcmVjdmJ1ZiBTT19TT0NL RVQgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KKyAgICByZXR1 cm4gMDsKK30KKworaW50CitrZWVwYWxpdmUoc29jayxvbm9mZikgaW50IHNvY2s7IGludCBvbm9m ZjsgeworI2lmZGVmIFNPTF9TT0NLRVQKKyNpZmRlZiBTT19LRUVQQUxJVkUKKyAgICBpbnQgZ2V0 X2tlZXBhbGl2ZV9vcHQ7CisgICAgaW50IHNldF9rZWVwYWxpdmVfb3B0OworICAgIFNPQ0tPUFRf VCB4OworCisgICAgZGVidWcoRjExMSwiVENQIGtlZXBhbGl2ZSIsInNvY2siLHNvY2spOworICAg IGRlYnVnKEYxMTEsIlRDUCBrZWVwYWxpdmUiLCJuZXR0eXBlIixuZXR0eXBlKTsKKyAgICBkZWJ1 ZyhGMTExLCJUQ1Aga2VlcGFsaXZlIiwidHRtZG0iLHR0bWRtKTsKKworI2lmZGVmIElLU0QKKyAg ICBpZiAoIWluc2VydmVyKQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgIGlmIChzb2NrID09IC0x IHx8CisgICAgICAgIG5ldHR5cGUgIT0gTkVUX1RDUEEgJiYgbmV0dHlwZSAhPSBORVRfVENQQiAm JiBuZXR0eXBlICE9IE5FVF9TU0gKKyAgICAgICAgICAgICAgICB8fCB0dG1kbSA+PSAwKSB7Cisg ICAgICAgIHRjcF9rZWVwYWxpdmUgPSBvbm9mZjsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor ICAgIHggPSBzaXplb2YoZ2V0X2tlZXBhbGl2ZV9vcHQpOworICAgIGlmIChnZXRzb2Nrb3B0KHNv Y2ssCisgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLCAoY2hhciAq KSZnZXRfa2VlcGFsaXZlX29wdCwgJngpKSB7CisgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBrZWVw YWxpdmUgY2FuJ3QgZ2V0IFNPX0tFRVBBTElWRSIsY2tfZXJyc3RyKCksZXJybm8pOworICAgIH0g ZWxzZSBpZiAoeCAhPSBzaXplb2YoZ2V0X2tlZXBhbGl2ZV9vcHQpKSB7CisjaWZkZWYgT1MyCisg ICAgICAgIHNob3J0IGdldF9rZWVwYWxpdmVfb3B0MTY7CisgICAgICAgIHNob3J0IHNldF9rZWVw YWxpdmVfb3B0MTY7CisgICAgICAgIGlmICh4ID09IHNpemVvZihnZXRfa2VlcGFsaXZlX29wdDE2 KSkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiVENQIGtlZXBhbGl2ZSB3YXJuaW5nOiBTT19L RUVQQUxJVkUiLAorICAgICAgICAgICAgICAgICAgImxlbiBpcyAxNi1iaXQiLHgpOworICAgICAg ICAgICAgaWYgKGdldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNP TF9TT0NLRVQsIFNPX0tFRVBBTElWRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopJmdldF9rZWVwYWxpdmVfb3B0MTYsICZ4KQorICAgICAgICAgICAgICAgICkgeworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICAgICAgICAgIlRDUCBrZWVwYWxp dmUgY2FuJ3QgZ2V0IFNPX0tFRVBBTElWRSIsCisgICAgICAgICAgICAgICAgICAgICAgY2tfZXJy c3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgZXJybm8KKyAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRfa2VlcGFsaXZlX29wdDE2ICE9IG9ub2Zm KSB7CisgICAgICAgICAgICAgICAgc2V0X2tlZXBhbGl2ZV9vcHQxNiA9IG9ub2ZmOworICAgICAg ICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT19LRUVQ QUxJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X2tlZXBh bGl2ZV9vcHQxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X2tl ZXBhbGl2ZV9vcHQxNikpCisgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIGtlZXBhbGl2 ZSBjYW4ndCBjbGVhciBTT19LRUVQQUxJVkUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBj a19lcnJzdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgdGNwX2tlZXBhbGl2ZSA9IGdl dF9rZWVwYWxpdmVfb3B0MTY7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRDUCBrZWVw YWxpdmUgbmV3IFNPX0tFRVBBTElWRSIsIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNl dF9rZWVwYWxpdmVfb3B0MTYpOworICAgICAgICAgICAgICAgICAgICB0Y3Bfa2VlcGFsaXZlID0g c2V0X2tlZXBhbGl2ZV9vcHQxNjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJUQ1Aga2VlcGFsaXZlIFNPX0tFRVBBTElWRSB1bmNoYW5nZWQiLCIiLAorICAgICAg ICAgICAgICAgICAgICAgIGdldF9rZWVwYWxpdmVfb3B0MTYpOworICAgICAgICAgICAgICAgIHRj cF9rZWVwYWxpdmUgPSBvbm9mZjsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAq LworICAgICAgICBkZWJ1ZyhGMTExLCJUQ1Aga2VlcGFsaXZlIGVycm9yOiBTT19LRUVQQUxJVkUi LCJsZW4iLHgpOworICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAiVENQIGtlZXBh bGl2ZSBTT19LRUVQQUxJVkUiLAorICAgICAgICAgICAgICAiZXhwZWN0ZWQgbGVuIiwKKyAgICAg ICAgICAgICAgc2l6ZW9mKGdldF9rZWVwYWxpdmVfb3B0KQorICAgICAgICAgICAgICApOworICAg ICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAiVENQIGtlZXBhbGl2ZSBTT19LRUVQQUxJ VkUiLAorICAgICAgICAgICAgICAia2VlcGFsaXZlX29wdCIsCisgICAgICAgICAgICAgIGdldF9r ZWVwYWxpdmVfb3B0CisgICAgICAgICAgICAgICk7CisgICAgfSBlbHNlIGlmIChnZXRfa2VlcGFs aXZlX29wdCAhPSBvbm9mZikgeworICAgICAgICAgICAgc2V0X2tlZXBhbGl2ZV9vcHQgPSBvbm9m ZjsKKyAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2ssCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT19LRUVQ QUxJVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X2tlZXBhbGl2 ZV9vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNldF9rZWVwYWxpdmVf b3B0KSkKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAor ICAgICAgICAgICAgICAgICAgICAgICJUQ1Aga2VlcGFsaXZlIGNhbid0IGNsZWFyIFNPX0tFRVBB TElWRSIsCisgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksCisgICAgICAgICAgICAg ICAgICAgICAgZXJybm8KKyAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg IHRjcF9rZWVwYWxpdmUgPSBnZXRfa2VlcGFsaXZlX29wdDsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwKKyAgICAgICAgICAgICAgICAgICAgICAiVENQ IGtlZXBhbGl2ZSBuZXcgU09fS0VFUEFMSVZFIiwKKyAgICAgICAgICAgICAgICAgICAgICAiIiwK KyAgICAgICAgICAgICAgICAgICAgICBzZXRfa2VlcGFsaXZlX29wdAorICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICAgICAgdGNwX2tlZXBhbGl2ZSA9IG9ub2ZmOworICAgICAg ICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgZGVidWcoRjEwMSwiVENQIGtlZXBhbGl2ZSBTT19LRUVQQUxJVkUgdW5jaGFuZ2Vk IiwKKyAgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgZ2V0X2tlZXBhbGl2 ZV9vcHQKKyAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB0Y3Bfa2VlcGFsaXZlID0g b25vZmY7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICB9CisjZWxzZQorICAgIGRlYnVnKEYx MDAsIlRDUCBrZWVwYWxpdmUgU09fS0VFUEFMSVZFIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRp ZiAvKiBTT19LRUVQQUxJVkUgKi8KKyNlbHNlCisgICAgZGVidWcoRjEwMCwiVENQIGtlZXBhbGl2 ZSBTT19TT0NLRVQgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8K KyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorZG9udHJvdXRlKHNvY2ssb25vZmYpIGludCBzb2Nr OyBpbnQgb25vZmY7IHsKKyNpZmRlZiBTT0xfU09DS0VUCisjaWZkZWYgU09fRE9OVFJPVVRFCisg ICAgaW50IGdldF9kb250cm91dGVfb3B0OworICAgIGludCBzZXRfZG9udHJvdXRlX29wdDsKKyAg ICBTT0NLT1BUX1QgeDsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoIWluc2VydmVyKQorI2VuZGlm IC8qIElLU0QgKi8KKyAgICAgIGlmIChzb2NrID09IC0xIHx8CisgICAgICAgIG5ldHR5cGUgIT0g TkVUX1RDUEEgJiYgbmV0dHlwZSAhPSBORVRfVENQQiAmJiBuZXR0eXBlICE9IE5FVF9TU0gKKyAg ICAgICAgICAgICAgICB8fCB0dG1kbSA+PSAwKSB7CisgICAgICAgIHRjcF9kb250cm91dGUgPSBv bm9mZjsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHggPSBzaXplb2YoZ2V0X2RvbnRy b3V0ZV9vcHQpOworICAgIGlmIChnZXRzb2Nrb3B0KHNvY2ssCisgICAgICAgICAgICAgICAgICAg U09MX1NPQ0tFVCwgU09fRE9OVFJPVVRFLCAoY2hhciAqKSZnZXRfZG9udHJvdXRlX29wdCwgJngp KSB7CisgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBkb250cm91dGUgY2FuJ3QgZ2V0IFNPX0RPTlRS T1VURSIsY2tfZXJyc3RyKCksZXJybm8pOworICAgIH0gZWxzZSBpZiAoeCAhPSBzaXplb2YoZ2V0 X2RvbnRyb3V0ZV9vcHQpKSB7CisjaWZkZWYgT1MyCisgICAgICAgIHNob3J0IGdldF9kb250cm91 dGVfb3B0MTY7CisgICAgICAgIHNob3J0IHNldF9kb250cm91dGVfb3B0MTY7CisgICAgICAgIGlm ICh4ID09IHNpemVvZihnZXRfZG9udHJvdXRlX29wdDE2KSkgeworICAgICAgICAgICAgZGVidWco RjExMSwiVENQIGRvbnRyb3V0ZSB3YXJuaW5nOiBTT19ET05UUk9VVEUiLAorICAgICAgICAgICAg ICAgICAgImxlbiBpcyAxNi1iaXQiLHgpOworICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoc29j aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsIFNPX0RPTlRST1VURSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJmdldF9kb250cm91dGVfb3B0MTYs ICZ4KQorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCisg ICAgICAgICAgICAgICAgICAgICAgIlRDUCBkb250cm91dGUgY2FuJ3QgZ2V0IFNPX0RPTlRST1VU RSIsCisgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksCisgICAgICAgICAgICAgICAg ICAgICAgZXJybm8KKyAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBlbHNl IGlmIChnZXRfZG9udHJvdXRlX29wdDE2ICE9IG9ub2ZmKSB7CisgICAgICAgICAgICAgICAgc2V0 X2RvbnRyb3V0ZV9vcHQxNiA9IG9ub2ZmOworICAgICAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0 KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTT19ET05UUk9VVEUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXIgKikmc2V0X2RvbnRyb3V0ZV9vcHQxNiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2V0X2RvbnRyb3V0ZV9vcHQxNikpCisgICAgICAg ICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBjYW4ndCBjbGVhciBTT19ET05UUk9V VEUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBja19lcnJzdHIoKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZXJybm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgICAgICAgICAgdGNwX2RvbnRyb3V0ZSA9IGdldF9kb250cm91dGVfb3B0MTY7CisgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIlRDUCBkb250cm91dGUgbmV3IFNPX0RPTlRST1VURSIs IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9kb250cm91dGVfb3B0MTYpOworICAg ICAgICAgICAgICAgICAgICB0Y3BfZG9udHJvdXRlID0gc2V0X2RvbnRyb3V0ZV9vcHQxNjsKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1AgZG9udHJvdXRlIFNP X0RPTlRST1VURSB1bmNoYW5nZWQiLCIiLAorICAgICAgICAgICAgICAgICAgICAgIGdldF9kb250 cm91dGVfb3B0MTYpOworICAgICAgICAgICAgICAgIHRjcF9kb250cm91dGUgPSBvbm9mZjsKKyAg ICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy bigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJU Q1AgZG9udHJvdXRlIGVycm9yOiBTT19ET05UUk9VVEUiLCJsZW4iLHgpOworICAgICAgICBkZWJ1 ZyhGMTExLAorICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBTT19ET05UUk9VVEUiLAorICAg ICAgICAgICAgICAiZXhwZWN0ZWQgbGVuIiwKKyAgICAgICAgICAgICAgc2l6ZW9mKGdldF9kb250 cm91dGVfb3B0KQorICAgICAgICAgICAgICApOworICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAg ICAgICAgICAiVENQIGRvbnRyb3V0ZSBTT19ET05UUk9VVEUiLAorICAgICAgICAgICAgICAiZG9u dHJvdXRlX29wdCIsCisgICAgICAgICAgICAgIGdldF9kb250cm91dGVfb3B0CisgICAgICAgICAg ICAgICk7CisgICAgfSBlbHNlIGlmIChnZXRfZG9udHJvdXRlX29wdCAhPSBvbm9mZikgeworICAg ICAgICAgICAgc2V0X2RvbnRyb3V0ZV9vcHQgPSBvbm9mZjsKKyAgICAgICAgICAgIGlmIChzZXRz b2Nrb3B0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09MX1NPQ0tFVCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTT19ET05UUk9VVEUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNoYXIgKikmc2V0X2RvbnRyb3V0ZV9vcHQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHNldF9kb250cm91dGVfb3B0KSkKKyAgICAgICAgICAgICAgICAp IHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAgICAgICAgICJU Q1AgZG9udHJvdXRlIGNhbid0IGNsZWFyIFNPX0RPTlRST1VURSIsCisgICAgICAgICAgICAgICAg ICAgICAgY2tfZXJyc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgZXJybm8KKyAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHRjcF9kb250cm91dGUgPSBnZXRfZG9u dHJvdXRlX29wdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVidWco RjEwMSwKKyAgICAgICAgICAgICAgICAgICAgICAiVENQIGRvbnRyb3V0ZSBuZXcgU09fRE9OVFJP VVRFIiwKKyAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICBz ZXRfZG9udHJvdXRlX29wdAorICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgdGNwX2RvbnRyb3V0ZSA9IG9ub2ZmOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiVENQ IGRvbnRyb3V0ZSBTT19ET05UUk9VVEUgdW5jaGFuZ2VkIiwKKyAgICAgICAgICAgICAgICAgICIi LAorICAgICAgICAgICAgICAgICAgZ2V0X2RvbnRyb3V0ZV9vcHQKKyAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICB0Y3BfZG9udHJvdXRlID0gb25vZmY7CisgICAgICAgICAgICByZXR1 cm4gMTsKKyAgICB9CisjZWxzZQorICAgIGRlYnVnKEYxMDAsIlRDUCBkb250cm91dGUgU09fRE9O VFJPVVRFIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KKyNl bHNlCisgICAgZGVidWcoRjEwMCwiVENQIGRvbnRyb3V0ZSBTT19TT0NLRVQgbm90IGRlZmluZWQi LCIiLDApOworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2lu dAorbm9fZGVsYXkoc29jayxvbm9mZikgIGludCBzb2NrOyBpbnQgb25vZmY7IHsKKyNpZmRlZiBT T0xfU09DS0VUCisjaWZkZWYgVENQX05PREVMQVkKKyAgICBpbnQgZ2V0X25vZGVsYXlfb3B0Owor ICAgIGludCBzZXRfbm9kZWxheV9vcHQ7CisgICAgU09DS09QVF9UIHg7CisKKyNpZmRlZiBJS1NE CisgICAgaWYgKCFpbnNlcnZlcikKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICBpZiAoc29jayA9 PSAtMSB8fAorICAgICAgICBuZXR0eXBlICE9IE5FVF9UQ1BBICYmIG5ldHR5cGUgIT0gTkVUX1RD UEIgJiYgbmV0dHlwZSAhPSBORVRfU1NICisgICAgICAgICAgICAgICAgfHwgdHRtZG0gPj0gMCkg eworICAgICAgICB0Y3Bfbm9kZWxheSA9IG9ub2ZmOworICAgICAgICByZXR1cm4oMSk7CisgICAg fQorICAgIHggPSBzaXplb2YoZ2V0X25vZGVsYXlfb3B0KTsKKyAgICBpZiAoZ2V0c29ja29wdChz b2NrLElQUFJPVE9fVENQLFRDUF9OT0RFTEFZLAorICAgICAgICAgICAgICAgICAgIChjaGFyICop JmdldF9ub2RlbGF5X29wdCwmeCkpIHsKKyAgICAgICAgZGVidWcoRjExMSwKKyAgICAgICAgICAg ICAgIlRDUCBub19kZWxheSBjYW4ndCBnZXQgVENQX05PREVMQVkiLAorICAgICAgICAgICAgICBj a19lcnJzdHIoKSwKKyAgICAgICAgICAgICAgZXJybm8pOworICAgIH0gZWxzZSBpZiAoeCAhPSBz aXplb2YoZ2V0X25vZGVsYXlfb3B0KSkgeworI2lmZGVmIE9TMgorICAgICAgICBzaG9ydCBnZXRf bm9kZWxheV9vcHQxNjsKKyAgICAgICAgc2hvcnQgc2V0X25vZGVsYXlfb3B0MTY7CisgICAgICAg IGlmICh4ID09IHNpemVvZihnZXRfbm9kZWxheV9vcHQxNikpIHsKKyAgICAgICAgICAgIGRlYnVn KEYxMTEsIlRDUCBub19kZWxheSB3YXJuaW5nOiBUQ1BfTk9ERUxBWSIsImxlbiBpcyAxNi1iaXQi LHgpOworICAgICAgICAgICAgaWYgKGdldHNvY2tvcHQoc29jaywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopJmdldF9ub2RlbGF5X29wdDE2LCAmeCkKKyAgICAgICAgICAgICAgICAp IHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAgICAgICAgICJU Q1Agbm9fZGVsYXkgY2FuJ3QgZ2V0IFRDUF9OT0RFTEFZIiwKKyAgICAgICAgICAgICAgICAgICAg ICBja19lcnJzdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICBlcnJubyk7CisgICAgICAgICAg ICB9IGVsc2UgaWYgKGdldF9ub2RlbGF5X29wdDE2ICE9IG9ub2ZmKSB7CisgICAgICAgICAgICAg ICAgc2V0X25vZGVsYXlfb3B0MTYgPSBvbm9mZjsKKyAgICAgICAgICAgICAgICBpZiAoc2V0c29j a29wdChzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQUFJPVE9fVENQLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDUF9OT0RFTEFZLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjaGFyICopJnNldF9ub2RlbGF5X29wdDE2LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzZXRfbm9kZWxheV9vcHQxNikpCisgICAgICAg ICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAiVENQIG5vX2RlbGF5IGNhbid0IGNsZWFyIFRDUF9OT0RFTEFZ IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCksCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGVycm5vKTsKKyAgICAgICAgICAgICAgICAgICAgdGNwX25vZGVsYXkgPSBn ZXRfbm9kZWxheV9vcHQxNjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIG5vX2Rl bGF5IG5ldyBUQ1BfTk9ERUxBWSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBzZXRfbm9kZWxheV9vcHQxNik7CisgICAgICAgICAgICAg ICAgICAgIHRjcF9ub2RlbGF5ID0gb25vZmY7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiVENQIG5vX2RlbGF5IFRDUF9OT0RFTEFZIHVuY2hhbmdlZCIsIiIsCisg ICAgICAgICAgICAgICAgICAgICAgZ2V0X25vZGVsYXlfb3B0MTYpOworICAgICAgICAgICAgICAg IHRjcF9ub2RlbGF5ID0gb25vZmY7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAgICAgZGVidWcoRjExMSwiVENQIG5vX2RlbGF5IGVycm9yOiBUQ1BfTk9ERUxBWSIs ImxlbiIseCk7CisgICAgICAgIGRlYnVnKEYxMTEsIlRDUCBub19kZWxheSBUQ1BfTk9ERUxBWSIs ImV4cGVjdGVkIGxlbiIsCisgICAgICAgICAgICAgIHNpemVvZihnZXRfbm9kZWxheV9vcHQpKTsK KyAgICAgICAgZGVidWcoRjExMSwiVENQIG5vX2RlbGF5IFRDUF9OT0RFTEFZIiwibm9kZWxheV9v cHQiLGdldF9ub2RlbGF5X29wdCk7CisgICAgfSBlbHNlIGlmIChnZXRfbm9kZWxheV9vcHQgIT0g b25vZmYpIHsKKyAgICAgICAgc2V0X25vZGVsYXlfb3B0ID0gb25vZmY7CisgICAgICAgIGlmIChz ZXRzb2Nrb3B0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgIElQUFJPVE9fVENQLAorICAg ICAgICAgICAgICAgICAgICAgICBUQ1BfTk9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgKikmc2V0X25vZGVsYXlfb3B0LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo c2V0X25vZGVsYXlfb3B0KSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAg ICAgICAgICAiVENQIG5vX2RlbGF5IGNhbid0IGNsZWFyIFRDUF9OT0RFTEFZIiwKKyAgICAgICAg ICAgICAgICAgIGNrX2VycnN0cigpLAorICAgICAgICAgICAgICAgICAgZXJybm8KKyAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICB0Y3Bfbm9kZWxheSA9IGdldF9ub2RlbGF5X29wdDsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlRDUCBub19kZWxheSBu ZXcgVENQX05PREVMQVkiLCIiLHNldF9ub2RlbGF5X29wdCk7CisgICAgICAgICAgICB0Y3Bfbm9k ZWxheSA9IG9ub2ZmOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9IGVs c2UgeworICAgICAgICBkZWJ1ZyhGMTAxLCJUQ1Agbm9fZGVsYXkgVENQX05PREVMQVkgdW5jaGFu Z2VkIiwiIixnZXRfbm9kZWxheV9vcHQpOworICAgICAgICB0Y3Bfbm9kZWxheSA9IG9ub2ZmOwor ICAgICAgICByZXR1cm4oMSk7CisgICAgfQorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJUQ1Agbm9f ZGVsYXkgVENQX05PREVMQVkgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFRDUF9OT0RF TEFZICovCisjZWxzZQorICAgIGRlYnVnKEYxMDAsIlRDUCBub19kZWxheSBTT19TT0NLRVQgbm90 IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KKyAgICByZXR1cm4gMDsK K30KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworCisj aWZkZWYgU1VOWDI1CisjaWZuZGVmIFgyNV9XUl9GQUNJTElUWQorLyogRm9yIFNvbGFyaXMgMi4z IC8gU3VuTGluayA4LnggLSBzZWUgY29tbWVudHMgaW4gY2tjbmV0LmggKi8KK3ZvaWQKK2J6ZXJv KHMsbikgY2hhciAqczsgaW50IG47IHsKKyAgICBtZW1zZXQocywwLG4pOworfQorI2VuZGlmIC8q IFgyNV9XUl9GQUNJTElUWSAqLworI2VuZGlmIC8qIFNVTlgyNSAqLworCisjaWZkZWYgVENQU09D S0VUCisjaWZuZGVmIE9TMgorI2lmbmRlZiBOT0xJU1RFTgorCisjaWZkZWYgQlNEU0VMRUNUCisj aWZuZGVmIFZNUworI2lmbmRlZiBCRUxMVjEwCisjaWZuZGVmIGRhdGFnZW5lcmFsCisjaWZkZWYg aHA5MDAwczUwMCAgICAgICAgICAgICAgICAgICAgICAgLyogSFAtOTAwMC81MDAgSFAtVSA1LjIx ICovCisjaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKworLyoqKioqKiBUSElTIFNFQ1RJT04gQURE RUQgQlkgU1RFVkUgUkFOQ0UgLSBPUzkgTkVUV09SSyBTRVJWRVIKKyogICAgICAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqICAgICAg IER1ZSB0byBPUzkncyBMYWNrIG9mIGEgc2VsZWN0KCkgY2FsbCwgdGhlIGZvbGxvd2luZyBzZWVt cyB0byBiZQorKiAgICAgICBlbm91Z2ggdG8gZm9vbCB0aGUgcmVzdCBvZiB0aGUgY29kZSBpbnRv IGNvbXBpbGluZy4gVGhlIG9ubHkKKyogICAgICAgZWZmZWN0IHRoYXQgSSBjYW4gc2VlIGlzIHVz aW5nIGNvbnRyb2wgTCB0byByZWZyZXNoIHRoZSBzdGF0dXMKKyogICAgICAgZGlzcGxheSBnZXRz IHF1ZWQgdXAgdW50aWwgc29tZSBuZXR3b3JrIHBhY2tldHMgYXJyaXZlLgorKgorKiAgICAgICBU aGlzIHNvbHV0aW9uIGlzIGJ5IG5vIG1lYW5zIGVsZWdhbnQgYnV0IHdvcmtzIGVub3VnaCB0byBi ZQorKiAgICAgICBhICh0aGUpIHNvbHV0aW9uLgorKgorKiAgICAgICBBbHNvIHdpdGggdGhlIGRl ZmluZXMgSSBoYWQgc3BlY2lmaWVkIGluIG15IG1ha2VmaWxlIEkgaGFkIHRvCisqICAgICAgIGhh dmUgYW4gI2VuZGlmIHJpZ2h0IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgd2hlbiBjb21waWxpbmcu CisqICAgICAgIEkgZGlkIG5vdCBib3RoZXIgc3BlZGluZyB0aW1lIHRvIGZpbmQgb3V0IHdoeS4K KyoKKyogICAgICAgQ09QVFMgICA9IC10bz1vc2sgLWQ9T1NLIC1kPVRDUFNPQ0tFVCAtZD1TRUxF Q1QgLWQ9Vk9JRD12b2lkIC1kPVNJR19WIFwKKyogICAgICAgICAgLWQ9RFlOQU1JQyAtZD1QQVJT RU5TRSAtZD1LQU5KSSAtZD1NWUNVUlNFUyAtZD1aRkNEQVQgXAorKiAgICAgICAgICAtZD1DS19B UEMgLWQ9Q0tfUkVESVIgLWQ9UkVOQU1FIC1kPUNLX1RUWUZEIC1kPU5PT0xETU9ERU1TIFwKKyog ICAgICAgICAgLWQ9Q0tfQU5TSUMgLWQ9Q0tfWFlaIC10cD02ODA0MGQgLWw9bmV0ZGIubCAtbD1z b2NrbGliLmwgXAorKiAgICAgICAgICAtbD10ZXJtbGliLmwgLWw9bWF0aC5sIC1sPXN5c19jbGli LmwKKyoKKyogICAgICAgc3RldmVyQG96ZW1haWwuY29tLmF1CisqLworCisjaWZkZWYgIE9TSwor I2RlZmluZSBCU0RTRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBvbiBCU0Qg c2VsZWN0IGNvZGUgKi8KKyNkZWZpbmUgRkRfU0VUU0laRSAzMiAgICAgICAgICAgICAgICAgICAv KiBNYXggIyBvZiBwYXRocyBpbiBPUzkgKi8KKyNkZWZpbmUgRkRfWkVSTyhwKSAgICAgICAgICAg ICAgICAgICAgICAoKCpwKT0wKQorI2RlZmluZSBGRF9TRVQobixiKSAgICAgICAgICAgICAgICAg ICAgICgoKmIpfD0oMTw8KG4pKSkKKyNkZWZpbmUgRkRfSVNTRVQobixiKSAgICAgICAgICAgMSAg ICAgICAvKiBhbHdheXMgc2F5IGRhdGEgaXMgcmVhZHkgKi8KKyNkZWZpbmUgc2VsZWN0KGEsYixj LGQsZSkgICAgICAgMSAgICAgICAvKiBhbHdheXMgc2F5IDEgcGF0aCBoYXMgZGF0YSAqLwordHlw ZWRlZiBpbnQgICAgIGZkX3NldDsgICAgICAgICAgICAgICAgIC8qIGtlZXAgQlNEIENvZGUgSGFw cHkgKi8KK3N0cnVjdCB0aW1ldmFsIHtpbnQgdHZfc2VjLHR2X3VzZWM7fTsgICAvKiBrZWVwIEJT RCBDb2RlIEhhcHB5ICovCisKKy8qKioqKiogRU5EIE9GIE9TOSBNT0RTIEZST00gU1RFVkUgUkFO Q0UgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYgLyogT1NLICovCisKKyNpbmNs dWRlIDxzeXMvdGltZS5oPgorI2VuZGlmIC8qIGhwOTAwMHM1MDAgKi8KKyNlbmRpZiAvKiBkYXRh Z2VuZXJhbCAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRl ZiBTRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZiAvKiBTRUxFQ1RfSCAq LworI2VuZGlmIC8qIEJTRFNFTEVDVCAqLworCisjaWZkZWYgU0VMRUNUCisjaWZkZWYgQ0tfU0NP VjUKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNlbmRp ZiAvKiBTRUxFQ1QgKi8KKworI2lmZGVmIE5PVFVTRUQKKy8qIFQgQyBQIFMgTyBDIEsgRSBUIF8g TyBQIEUgTiAtLSBPcGVuIGEgcHJlZXhpc3Rpbmcgc29ja2V0IG51bWJlciAqLworCitpbnQKK3Rj cHNvY2tldF9vcGVuKG5hbWUsbGNsLG5ldHQsdGltbykgY2hhciAqIG5hbWU7IGludCAqIGxjbDsg aW50IG5ldHQ7IGludCB0aW1vIHsKKyAgICBpbnQgb24gPSAxOworICAgIHN0YXRpYyBzdHJ1Y3Qg c2VydmVudCAqc2VydmljZSwgc2VydnJlYzsKKyAgICBzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmhv c3Q7CisgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKKyAgICBzdGF0aWMKKyNp ZmRlZiBVQ1g1MAorICAgICAgdW5zaWduZWQKKyNlbmRpZiAvKiBVQ1g1MCAqLworICAgICAgaW50 IHNhZGRybGVuOworI2lmZGVmIEJTRFNFTEVDVAorICAgIGZkX3NldCByZmRzOworICAgIHN0cnVj dCB0aW1ldmFsIHR2OworI2Vsc2UKKyNpZmRlZiBCRUxMU0VMRUNUCisgICAgZmRfc2V0IHJmZHM7 CisjZWxzZQorICAgIGZkX3NldCByZmRzOworICAgIGZkX3NldCByZmRzOworICAgIHN0cnVjdCB0 aW1ldmFsIHsKKyAgICAgICAgbG9uZyB0dl9zZWM7CisgICAgICAgIGxvbmcgdHZfdXNlYzsKKyAg ICB9IHR2OworI2VuZGlmIC8qIEJFTExTRUxFQ1QgKi8KKyNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8K KworICAgIGRlYnVnKEYxMDEsInRjcHNvY2tldF9vcGVuIG5ldHQiLCIiLG5ldHQpOworICAgICpp cGFkZHIgPSAnXDAnOworCisgICAgaWYgKG5ldHQgIT0gTkVUX1RDUEIpCisgICAgICByZXR1cm4o LTEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogQlNEIHNvY2tldCBzdXBwb3J0ICovCisKKyAg ICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgcHJldmlv dXMgY29ubmVjdGlvbi4gKi8KKyAgICBja3N0cm5jcHkobmFtZWNvcHksIG5hbWUsIE5BTUVDUFlM KTsgLyogQ29weSB0aGUgaG9zdG5hbWUuICovCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIEplZmYn cyB2ZXJzaW9uIGZyb20gMzAgRGVjIDIwMDUgZG9lc24ndCBpbmhpYml0IFRlbG5ldCAqLworICAg IGlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcgJiYKKwl0dG5wcm90byAhPSBOUF9TU0xfUkFXICYm CisJdHRucHJvdG8gIT0gTlBfVExTX1JBVykKKyAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsgICAg ICAgICAgICAgICAvKiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQuICovCisjZWxzZQorICAgIC8q IGZkYydzIHZlcnNpb24gZnJvbSA0IERlYyAyMDA1IHdvcmtzIG9rICovCisgICAgaWYgKHR0bnBy b3RvICE9IE5QX1RDUFJBVykKKyAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsgICAgICAgICAgICAg ICAvKiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQuICovCisjZW5kaWYJLyogQ09NTUVOVCAqLwor ICAgIGRlYnVnKEYxMTAsInRjcHNvY2tldF9vcGVuIG5hbWVjb3B5IixuYW1lY29weSwwKTsKKwor ICAgIC8qIEFzc2lnbiB0aGUgc29ja2V0IG51bWJlciB0byB0dHlmZCBhbmQgdGhlbiBmaWxsIGlu IHRjcCBzdHJ1Y3R1cmVzICovCisgICAgdHR5ZmQgPSBhdG9pKCZuYW1lWzFdKTsKKyAgICBkZWJ1 ZyhGMTExLCJ0Y3Bzb2NrZXRfb3BlbiIsInR0eWZkIix0dHlmZCk7CisKKyNpZm5kZWYgTk9UQ1BP UFRTCisjaWZkZWYgU09MX1NPQ0tFVAorICAgIHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQs IFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7CisKKyNpZm5kZWYgZGF0YWdl bmVyYWwKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgIG5vX2RlbGF5KHR0eWZkLHRjcF9ub2RlbGF5 KTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLworI2lmZGVmIFNPX0tFRVBBTElWRQorICAgIGtl ZXBhbGl2ZSh0dHlmZCx0Y3Bfa2VlcGFsaXZlKTsKKyNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8K KyNpZmRlZiBTT19MSU5HRVIKKyAgICBja19saW5nZXIodHR5ZmQsdGNwX2xpbmdlciwgdGNwX2xp bmdlcl90bW8pOworI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2lmZGVmIFNPX1NOREJVRgorICAg IHNlbmRidWYodHR5ZmQsdGNwX3NlbmRidWYpOworI2VuZGlmIC8qIFNPX1NOREJVRiAqLworI2lm ZGVmIFNPX1JDVkJVRgorICAgIHJlY3ZidWYodHR5ZmQsdGNwX3JlY3ZidWYpOworI2VuZGlmIC8q IFNPX1JDVkJVRiAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogU09MX1NP Q0tFVCAqLworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworCisjaWZkZWYgTlRfVENQX09WRVJMQVBQ RUQKKyAgICBPdmVybGFwcGVkV3JpdGVJbml0KCk7CisgICAgT3ZlcmxhcHBlZFJlYWRJbml0KCk7 CisjZW5kaWYgLyogTlRfVENQX09WRVJMQVBQRUQgKi8KKworCisgICAgLyogR2V0IHRoZSBuYW1l IG9mIHRoZSBob3N0IHdlIGFyZSBjb25uZWN0ZWQgdG8gKi8KKworICAgIHNhZGRybGVuID0gc2l6 ZW9mKHNhZGRyKTsKKyAgICBnZXRwZWVybmFtZSh0dHlmZCwoc3RydWN0IHNvY2thZGRyICopJnNh ZGRyLCZzYWRkcmxlbik7CisKKyAgICBja3N0cm5jcHkoaXBhZGRyLChjaGFyICopaW5ldF9udG9h KHNhZGRyLnNpbl9hZGRyKSwyMCk7CisKKyAgICBpZiAodGNwX3JkbnMgPT0gU0VUX09OCisjaWZk ZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgfHwgdGNwX3JkbnMgPT0gU0VUX0FVVE8gJiYKKyAgICAg ICAgIChja19rcmI1X2lzX2luc3RhbGxlZCgpIHx8IGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkpCisj ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNpZm5kZWYgTk9IVFRQCisgICAgICAgICAgJiYgKHRj cF9odHRwX3Byb3h5ID09IE5VTEwpCisjZW5kaWYgLyogTk9IVFRQICovCisjaWZkZWYgQ0tfU1NM CisgICAgICAgICAgJiYgIShzc2xfb25seV9mbGFnIHx8IHRsc19vbmx5X2ZsYWcpCisjZW5kaWYg LyogQ0tfU1NMICovCisgICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmV2ZXJzZSBETlMgKi8KKyAgICAgICAgaWYgKCFxdWlldCkgeworICAgICAgICAgICAgcHJpbnRm KCIgUmV2ZXJzZSBETlMgTG9va3VwLi4uICIpOworICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7 CisgICAgICAgIH0KKyAgICAgICAgaG9zdCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikmc2FkZHIu c2luX2FkZHIsNCxQRl9JTkVUKTsKKyAgICAgICAgZGVidWcoRjExMCwidGNwc29ja2V0X29wZW4g Z2V0aG9zdGJ5YWRkciIsaG9zdCA/ICJPSyIgOiAiRkFJTEVEIiwwKTsKKyAgICAgICAgaWYgKGhv c3QpIHsKKyAgICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0KTsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsInRjcHNvY2tldF9vcGVuIGdldGhvc3RieWFkZHIgIT0gTlVMTCIsIiIs MCk7CisgICAgICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIo T0spXG4iKTsKKyAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGNrc3RybmNweShuYW1lLCBob3N0LT5oX25hbWUsIDgwKTsKKyAgICAgICAg ICAgIGNrc3RybmNhdChuYW1lLCAiOiIsIDgwKTsKKyAgICAgICAgICAgIGNrc3RybmNhdChuYW1l LGNrdWl0b2EobnRvaHMoc2FkZHIuc2luX3BvcnQpKSwgODApOworICAgICAgICAgICAgaWYgKCFx dWlldAorI2lmbmRlZiBOT0lDUAorICAgICAgICAgICAgICAgICYmICFkb2NvbngKKyNlbmRpZiAv KiBOT0lDUCAqLworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgcHJpbnRmKCIlcyBj b25uZWN0ZWQgb24gcG9ydCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBob3N0LT5oX25hbWUs CisgICAgICAgICAgICAgICAgICAgbnRvaHMoc2FkZHIuc2luX3BvcnQpCisgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgfSBlbHNlIGlmICghcXVpZXQpCisgICAgICAgICAgcHJpbnRmKCJG YWlsZWRcbiIpOworICAgIH0gZWxzZSBpZiAoIXF1aWV0KQorICAgICAgcHJpbnRmKCIoT0spXG4i KTsKKworICAgIGlmICh0Y3BfcmRucyAhPSBTRVRfT04gfHwgIWhvc3QpIHsKKyAgICAgICAgY2tz dHJuY3B5KG5hbWUsaXBhZGRyLDgwKTsKKyAgICAgICAgY2tzdHJuY2F0KG5hbWUsIjoiLDgwKTsK KyAgICAgICAgY2tzdHJuY2F0KG5hbWUsY2t1aXRvYShudG9ocyhzYWRkci5zaW5fcG9ydCkpLDgw KTsKKyAgICAgICAgaWYgKCFxdWlldAorI2lmZGVmIE5PSUNQCisgICAgICAgICAgICAmJiAhZG9j b254CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAgICkKKyAgICAgICAgICBwcmludGYo IiVzIGNvbm5lY3RlZCBvbiBwb3J0ICVkXG4iLGlwYWRkcixudG9ocyhzYWRkci5zaW5fcG9ydCkp OworICAgIH0KKyAgICBpZiAoIXF1aWV0KSBmZmx1c2goc3Rkb3V0KTsKKyAgICB0dG5ldCA9IG5l dHQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1AvSVAgKHNvY2tldHMpIG5ldHdvcmsgKi8K KworI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKG50b2hzKHNhZGRyLnNpbl9wb3J0KSA9PSA1MTMp CisgICAgICAgIHR0bnByb3RvID0gTlBfTE9HSU47CisgICAgZWxzZQorI2VuZGlmIC8qIFJMT0dD T0RFICovCisgICAgLyogQXNzdW1lIHRoZSBzZXJ2aWNlIGlzIFRFTE5FVC4gKi8KKyNpZmRlZiBD T01NRU5UCisgICAgICAvKiBKZWZmJ3MgY29kZSBmcm9tIDIwMDUvMTIvMzAgKi8KKyAgICAgIGlm ICh0dG5wcm90byAhPSBOUF9UQ1BfUkFXICYmCisJICB0dG5wcm90byAhPSBOUF9TU0xfUkFXICYm CisJICB0dG5wcm90byAhPSBOUF9UTFNfUkFXKQorI2Vsc2UKKyAgICAgIC8qIGZkYydzIGNvZGUg ZnJvbSAyMDA1LzEyLzA0ICovCisgICAgICBpZiAodHRucHJvdG8gIT0gTlBfVENQUkFXKQorI2Vu ZGlmCS8qIENPTU1FTlQgKi8KKwl0dG5wcm90byA9IE5QX1RFTE5FVDsJCS8qIFllcywgc2V0IGds b2JhbCBmbGFnLiAqLworI2lmZGVmIENLX1NFQ1VSSVRZCisgICAgLyogQmVmb3JlIEluaXRpYWxp emF0aW9uIFRlbG5ldC9SbG9naW4gTmVnb3RpYXRpb25zIEluaXQgS2VyYmVyb3MgKi8KKyAgICBj a19hdXRoX2luaXQoKHRjcF9yZG5zICYmIGhvc3QgJiYgaG9zdC0+aF9uYW1lICYmIGhvc3QtPmhf bmFtZVswXSkgPworICAgICAgICAgICAgICAgIGhvc3QtPmhfbmFtZSA6IGlwYWRkciwKKyAgICAg ICAgICAgICAgICBpcGFkZHIsCisgICAgICAgICAgICAgICAgdWlkYnVmLAorICAgICAgICAgICAg ICAgIHR0eWZkCisgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBDS19TRUNVUklUWSAqLwor ICAgIGlmICh0bl9pbmkoKSA8IDApICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0L1Jlc2V0IFRF TE5FVCBuZWdvdGlhdGlvbnMgKi8KKyAgICAgIGlmICh0dGNoaygpIDwgMCkgICAgICAgICAgICAg ICAgICAvKiBEaWQgaXQgZmFpbCBkdWUgdG8gY29ubmVjdCBsb3NzPyAqLworICAgICAgICByZXR1 cm4oLTEpOworCisgICAgaWYgKCpsY2wgPCAwKSAqbGNsID0gMTsgICAgICAgICAgICAgLyogTG9j YWwgbW9kZS4gKi8KKworICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERvbmUuICovCit9CisjZW5kaWYgLyogTk9UVVNFRCAqLworCisvKiAgVCBDIFAgUyBSIFYgXyBP IFAgRSBOICAtLSAgT3BlbiBhIFRDUC9JUCBTZXJ2ZXIgY29ubmVjdGlvbiAgKi8KKy8qCisgIENh bGxpbmcgY29udmVudGlvbnMgc2FtZSBhcyB0dG9wZW4oKSwgZXhjZXB0IHRoaXJkIGFyZ3VtZW50 IGlzIG5ldHdvcmsKKyAgdHlwZSByYXRoZXIgdGhhbiBtb2RlbSB0eXBlLgorKi8KK2ludAordGNw c3J2X29wZW4obmFtZSxsY2wsbmV0dCx0aW1vKSBjaGFyICogbmFtZTsgaW50ICogbGNsOyBpbnQg bmV0dDsgaW50IHRpbW87IHsKKyAgICBjaGFyICpwOworICAgIGludCBpLCB4OworICAgIFNPQ0tP UFRfVCBvbiA9IDE7CisgICAgaW50IHJlYWR5X3RvX2FjY2VwdCA9IDA7CisgICAgc3RhdGljIHN0 cnVjdCBzZXJ2ZW50ICpzZXJ2aWNlLCAqc2VydmljZTIsIHNlcnZyZWM7CisgICAgc3RhdGljIHN0 cnVjdCBob3N0ZW50ICpob3N0OworICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7 CisgICAgc3RydWN0IHNvY2thZGRyX2luIGxfYWRkcjsKKyAgICBHU09DS05BTUVfVCBsX3NsZW47 CisjaWZkZWYgVUNYNTAKKyAgICBzdGF0aWMgdV9pbnQgc2FkZHJsZW47CisjZWxzZQorICAgIHN0 YXRpYyBTT0NLT1BUX1Qgc2FkZHJsZW47CisjZW5kaWYgLyogVUNYNTAgKi8KKworI2lmZGVmIEJT RFNFTEVDVAorICAgIGZkX3NldCByZmRzOworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworI2Vsc2UK KyNpZmRlZiBCRUxMU0VMQ1QKKyAgICBmZF9zZXQgcmZkczsKKyNlbHNlCisgICAgZmRfc2V0IHJm ZHM7CisgICAgc3RydWN0IHRpbWV2YWwgeworICAgICAgICBsb25nIHR2X3NlYzsKKyAgICAgICAg bG9uZyB0dl91c2VjOworICAgIH0gdHY7CisjZW5kaWYgLyogQkVMTFNFTEVDVCAqLworI2VuZGlm IC8qIEJTRFNFTEVDVCAqLworI2lmZGVmIENLX1NTTAorICAgIGludCBzc2xfZmFpbGVkID0gMDsK KyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIG5ldHQi LCIiLG5ldHQpOworICAgICppcGFkZHIgPSAnXDAnOworCisgICAgaWYgKG5ldHQgIT0gTkVUX1RD UEIpCisgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogQlNEIHNvY2tl dCBzdXBwb3J0ICovCisKKyAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDbG9zZSBhbnkgcHJldmlvdXMgY29ubmVjdGlvbi4gKi8KKyAgICBja3N0cm5jcHkobmFtZWNv cHksIG5hbWUsIE5BTUVDUFlMKTsgLyogQ29weSB0aGUgaG9zdG5hbWUuICovCisgICAgLyogRG9u J3QgZG8gdGhpcy4gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgLyogZmRjICovCisgICAgaWYgKHR0 bnByb3RvICE9IE5QX1RDUFJBVykKKyAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsgICAgICAgICAg ICAgICAvKiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQuICovCisjZW5kaWYJLyogQ09NTUVOVCAq LworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBKZWZmICovCisgICAgaWYgKHR0bnByb3RvICE9IE5Q X1RDUF9SQVcgJiYKKwl0dG5wcm90byAhPSBOUF9TU0xfUkFXICYmCisJdHRucHJvdG8gIT0gTlBf VExTX1JBVykKKyAgICAgIHR0bnByb3RvID0gTlBfTk9ORTsgICAgICAgICAgICAgICAvKiBObyBw cm90b2NvbCBzZWxlY3RlZCB5ZXQuICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGRlYnVn KEYxMTAsInRjcHNydl9vcGVuIG5hbWVjb3B5IixuYW1lY29weSwwKTsKKworICAgIHAgPSBuYW1l Y29weTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBhIHNlcnZpY2UgcmVxdWVzdGVkPyAq LworICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICc6JykKKyAgICAgIHArKzsgLyogTG9v ayBmb3IgY29sb24gKi8KKyAgICBpZiAoKnAgPT0gJzonKSB7ICAgICAgICAgICAgICAgICAgICAv KiBIYXZlIGEgY29sb24gKi8KKyAgICAgICAgKnArKyA9ICdcMCc7ICAgICAgICAgICAgICAgICAg ICAvKiBHZXQgc2VydmljZSBuYW1lIG9yIG51bWJlciAqLworICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSB1c2Uga2VybWl0ICovCisgICAgICAgIHAg PSAia2VybWl0IjsKKyAgICB9CisgICAgZGVidWcoRjExMCwidGNwc3J2X29wZW4gc2VydmljZSBy ZXF1ZXN0ZWQiLHAsMCk7CisgICAgaWYgKGlzZGlnaXQoKnApKSB7ICAgICAgICAgICAgICAgICAg LyogVXNlIHNvY2tldCBudW1iZXIgd2l0aG91dCBsb29rdXAgKi8KKyAgICAgICAgc2VydmljZSA9 ICZzZXJ2cmVjOworICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucygodW5zaWduZWQgc2hv cnQpYXRvaShwKSk7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog T3RoZXJ3aXNlIGxvb2t1cCB0aGUgc2VydmljZSBuYW1lICovCisgICAgICAgIHNlcnZpY2UgPSBn ZXRzZXJ2YnluYW1lKHAsICJ0Y3AiKTsKKyAgICB9CisgICAgaWYgKCFzZXJ2aWNlICYmICFzdHJj bXAoImtlcm1pdCIscCkpIHsgLyogVXNlIEtlcm1pdCBzZXJ2aWNlIHBvcnQgKi8KKyAgICAgICAg c2VydmljZSA9ICZzZXJ2cmVjOworICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucygxNjQ5 KTsKKyAgICB9CisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAoc2VydmljZSAmJiAhc3RyY21wKCJs b2dpbiIscCkgJiYgc2VydmljZS0+c19wb3J0ICE9IGh0b25zKDUxMykpIHsKKyAgICAgICAgZnBy aW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIiAgV2FybmluZzogbG9naW4gc2VydmljZSBv biBwb3J0ICVkIGluc3RlYWQgb2YgcG9ydCA1MTNcbiIsCisgICAgICAgICAgICAgICAgIG50b2hz KHNlcnZpY2UtPnNfcG9ydCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgRWRpdCBTRVJW SUNFUyBmaWxlIGlmIFJMT0dJTiBmYWlscyB0byBjb25uZWN0LlxuIik7CisgICAgICAgIGRlYnVn KEYxMDEsInRjcHNydl9vcGVuIGxvZ2luIG9uIHBvcnQiLCIiLG50b2hzKHNlcnZpY2UtPnNfcG9y dCkpOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAgIGlmICghc2VydmljZSkgewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBmaW5kIHBvcnQgZm9yIHNlcnZpY2U6ICVz XG4iLCBwKTsKKyAgICAgICAgZGVidWcoRjExMSwidGNwc3J2X29wZW4gY2FuJ3QgZ2V0IHNlcnZp Y2UiLHAsZXJybm8pOworICAgICAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8q IHJhdGhlciB0aGFuIG1pc2xlYWQgKi8KKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAg ICAvKiBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBhIGxpc3RlbiBhY3RpdmUgYnV0IHBvcnQgaGFzIGNo YW5nZWQgdGhlbiBjbG9zZSAqLworCisgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gY2hlY2tp bmcgcHJldmlvdXMgY29ubmVjdGlvbiIsIiIsdGNwc3JmZCk7CisgICAgZGVidWcoRjEwMSwidGNw c3J2X29wZW4gcHJldmlvdXMgdGNwc3J2X3BvcnQiLCIiLHRjcHNydl9wb3J0KTsKKyAgICBpZiAo dGNwc3JmZCAhPSAtMSAmJgorICAgICAgICB0Y3BzcnZfcG9ydCAhPSBudG9ocygodW5zaWduZWQg c2hvcnQpc2VydmljZS0+c19wb3J0KSkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJ0Y3BzcnZfb3Bl biBjbG9zaW5nIHByZXZpb3VzIGNvbm5lY3Rpb24iLCIiLDApOworI2lmZGVmIFRDUElQTElCCisg ICAgICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsKKyNlbHNlCisgICAgICAgIGNsb3NlKHRjcHNy ZmQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgIHRjcHNyZmQgPSAtMTsKKyAgICB9 CisgICAgZGVidWcoRjEwMCwidGNwc3J2X29wZW4gdGNwc3JmZCIsIiIsdGNwc3JmZCk7CisgICAg aWYgKHRjcHNyZmQgPT0gLTEpIHsKKworICAgICAgICAvKiBTZXQgdXAgc29ja2V0IHN0cnVjdHVy ZSBhbmQgZ2V0IGhvc3QgYWRkcmVzcyAqLworCisgICAgICAgIGJ6ZXJvKChjaGFyICopJnNhZGRy LCBzaXplb2Yoc2FkZHIpKTsKKyAgICAgICAgZGVidWcoRjEwMCwidGNwc3J2X29wZW4gYnplcm8g b2siLCIiLDApOworICAgICAgICBzYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAg aWYgKHRjcF9hZGRyZXNzKSB7CisjaWZkZWYgSU5BRERSWAorICAgICAgICAgICAgaW5hZGRyeCA9 IGluZXRfYWRkcih0Y3BfYWRkcmVzcyk7CisgICAgICAgICAgICBzYWRkci5zaW5fYWRkci5zX2Fk ZHIgPSAqKHVuc2lnbmVkIGxvbmcgKikmaW5hZGRyeDsKKyNlbHNlCisgICAgICAgICAgICBzYWRk ci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOworI2VuZGlmIC8qIElO QUREUlggKi8KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgc2FkZHIuc2luX2FkZHIuc19hZGRy ID0gSU5BRERSX0FOWTsKKworICAgICAgICAvKiBHZXQgYSBmaWxlIGRlc2NyaXB0b3IgZm9yIHRo ZSBjb25uZWN0aW9uLiAqLworCisgICAgICAgIHNhZGRyLnNpbl9wb3J0ID0gc2VydmljZS0+c19w b3J0OworICAgICAgICBpcGFkZHJbMF0gPSAnXDAnOworCisgICAgICAgIGRlYnVnKEYxMDAsInRj cHNydl9vcGVuIGNhbGxpbmcgc29ja2V0IiwiIiwwKTsKKyAgICAgICAgaWYgKCh0Y3BzcmZkID0g c29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwKSB7CisgICAgICAgICAgICBwZXJy b3IoIlRDUCBzb2NrZXQgZXJyb3IiKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9v cGVuIHNvY2tldCBlcnJvciIsIiIsZXJybm8pOworICAgICAgICAgICAgcmV0dXJuICgtMSk7Cisg ICAgICAgIH0KKyAgICAgICAgZXJybm8gPSAwOworCisgICAgICAgIC8qIFNwZWNpZnkgdGhlIFBv cnQgbWF5IGJlIHJldXNlZCAqLworCisgICAgICAgIGRlYnVnKEYxMDAsInRjcHNydl9vcGVuIGNh bGxpbmcgc2V0c29ja29wdCIsIiIsMCk7CisgICAgICAgIHggPSBzZXRzb2Nrb3B0KHRjcHNyZmQs CisgICAgICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsU09fUkVVU0VBRERSLChjaGFyICop Jm9uLHNpemVvZiBvbik7CisgICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIHNldHNvY2tv cHQiLCIiLHgpOworCisgICAgICAgLyogTm93IGJpbmQgdG8gdGhlIHNvY2tldCAqLworICAgICAg ICBwcmludGYoIlxuQmluZGluZyBzb2NrZXQgdG8gcG9ydCAlZCAuLi5cbiIsCisgICAgICAgICAg ICAgICBudG9ocygodW5zaWduZWQgc2hvcnQpc2VydmljZS0+c19wb3J0KSk7CisgICAgICAgIGlm IChiaW5kKHRjcHNyZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsIHNpemVvZihzYWRkcikp IDwgMCkgeworICAgICAgICAgICAgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAgIC8qIFNhdmUg ZXJyb3IgY29kZSAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAgICAgICBzb2NrZXRfY2xvc2Uo dGNwc3JmZCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgY2xvc2UodGNwc3Jm ZCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgIHRjcHNyZmQgPSAtMTsKKyAg ICAgICAgICAgIHRjcHNydl9wb3J0ID0gMDsKKyAgICAgICAgICAgIHR0eWZkID0gLTE7CisgICAg ICAgICAgICB3YXNjbG9zZWQgPSAxOworICAgICAgICAgICAgZXJybm8gPSBpOyAgICAgICAgICAg ICAgICAgIC8qIGFuZCByZXBvcnQgdGhpcyBlcnJvciAqLworICAgICAgICAgICAgZGVidWcoRjEw MSwidGNwc3J2X29wZW4gYmluZCBlcnJubyIsIiIsZXJybm8pOworICAgICAgICAgICAgcHJpbnRm KCI/VW5hYmxlIHRvIGJpbmQgdG8gc29ja2V0IChlcnJubyA9ICVkKVxuIixlcnJubyk7CisgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMDAsInRjcHNy dl9vcGVuIGJpbmQgT0siLCIiLDApOworICAgICAgICBwcmludGYoIkxpc3RlbmluZyAuLi5cbiIp OworICAgICAgICBpZiAobGlzdGVuKHRjcHNyZmQsIDE1KSA8IDApIHsKKyAgICAgICAgICAgIGkg PSBlcnJubzsgICAgICAgICAgICAgICAgICAvKiBTYXZlIGVycm9yIGNvZGUgKi8KKyNpZmRlZiBU Q1BJUExJQgorICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHRjcHNyZmQpOworI2Vsc2UgLyogVENQ SVBMSUIgKi8KKyAgICAgICAgICAgIGNsb3NlKHRjcHNyZmQpOworI2VuZGlmIC8qIFRDUElQTElC ICovCisgICAgICAgICAgICB0Y3BzcmZkID0gLTE7CisgICAgICAgICAgICB0Y3BzcnZfcG9ydCA9 IDA7CisgICAgICAgICAgICB0dHlmZCA9IC0xOworICAgICAgICAgICAgd2FzY2xvc2VkID0gMTsK KyAgICAgICAgICAgIGVycm5vID0gaTsgICAgICAgICAgICAgICAgICAvKiBBbmQgcmVwb3J0IHRo aXMgZXJyb3IgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGxpc3RlbiBl cnJubyIsIiIsZXJybm8pOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAg ICAgICBkZWJ1ZyhGMTAwLCJ0Y3BzcnZfb3BlbiBsaXN0ZW4gT0siLCIiLDApOworICAgICAgICB0 Y3BzcnZfcG9ydCA9IG50b2hzKCh1bnNpZ25lZCBzaG9ydClzZXJ2aWNlLT5zX3BvcnQpOworICAg IH0KKworI2lmZGVmIENLX1NTTAorICAgIGlmIChja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsK KyAgICAgICAgaWYgKCFzc2xfdG5faW5pdChTU0xfU0VSVkVSKSkgeworICAgICAgICAgICAgc3Ns X2ZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoYmlvX2VyciE9TlVMTCkgeworICAgICAgICAg ICAgICAgIEJJT19wcmludGYoYmlvX2VyciwiZG9fc3NsZWF5X2luaXQoKSBmYWlsZWRcbiIpOwor ICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCJkb19zc2xlYXlfaW5pdCgpIGZhaWxlZFxuIik7CisgICAgICAgICAg ICAgICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKHRsc19vbmx5X2ZsYWcgfHwgc3NsX29ubHlfZmxhZykgeworI2lmZGVmIFRDUElQ TElCCisgICAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHR0eWZkKTsKKyAgICAgICAgICAgICAg ICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICAg ICAgICAgIGNsb3NlKHR0eWZkKTsKKyAgICAgICAgICAgICAgICBjbG9zZSh0Y3BzcmZkKTsKKyNl bmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICAgIHR0eWZkID0gLTE7CisgICAgICAg ICAgICAgICAgd2FzY2xvc2VkID0gMTsKKyAgICAgICAgICAgICAgICB0Y3BzcmZkID0gLTE7Cisg ICAgICAgICAgICAgICAgdGNwc3J2X3BvcnQgPSAwOworICAgICAgICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiB3ZSB3aWxsIGNvbnRpbnVlIHRvIGFj Y2VwdCB0aGUgY29ubmVjdGlvbiAgICovCisgICAgICAgICAgICAvKiB3aXRob3V0IFNTTCBvciBU TFMgc3VwcG9ydCB1bmxlc3MgcmVxdWlyZWQuICovCisgICAgICAgICAgICBpZiAoIFRFTE9QVF9E RUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKKyAgICAgICAgICAg ICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOwor ICAgICAgICAgICAgaWYgKCBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9 IFROX05HX01VICkKKyAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9T VEFSVF9UTFMpID0gVE5fTkdfUkY7CisgICAgICAgICAgICBpZiAoIFRFTE9QVF9ERUZfQ19NRV9N T0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01VICkKKyAgICAgICAgICAgICAgICBURUxP UFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOworICAgICAgICAg ICAgaWYgKCBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICE9IFROX05HX01V ICkKKyAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMp ID0gVE5fTkdfUkY7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAg ICBwcmludGYoIlxuV2FpdGluZyB0byBBY2NlcHQgYSBUQ1AvSVAgY29ubmVjdGlvbiBvbiBwb3J0 ICVkIC4uLlxuIiwKKyAgICAgICAgICAgbnRvaHMoKHVuc2lnbmVkIHNob3J0KXNlcnZpY2UtPnNf cG9ydCkpOworICAgIHNhZGRybGVuID0gc2l6ZW9mKHNhZGRyKTsKKworI2lmZGVmIEJTRFNFTEVD VAorICAgIHR2LnR2X3NlYyAgPSB0di50dl91c2VjID0gMEw7CisgICAgaWYgKHRpbW8gPCAwKQor ICAgICAgdHYudHZfdXNlYyA9IChsb25nKSAtdGltbyAqIDEwMDAwTDsKKyAgICBlbHNlCisgICAg ICB0di50dl9zZWMgPSB0aW1vOworICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIEJTRFNFTEVD VCIsIiIsdGltbyk7CisjZWxzZQorICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIG5vdCBCU0RT RUxFQ1QiLCIiLHRpbW8pOworI2VuZGlmIC8qIEJTRFNFTEVDVCAqLworCisgICAgaWYgKHRpbW8p IHsKKyAgICAgICAgd2hpbGUgKCFyZWFkeV90b19hY2NlcHQpIHsKKyNpZmRlZiBCU0RTRUxFQ1QK KyAgICAgICAgICAgIEZEX1pFUk8oJnJmZHMpOworICAgICAgICAgICAgRkRfU0VUKHRjcHNyZmQs ICZyZmRzKTsKKyAgICAgICAgICAgIHJlYWR5X3RvX2FjY2VwdCA9CisgICAgICAgICAgICAgICgo c2VsZWN0KEZEX1NFVFNJWkUsCisjaWZkZWYgSFBVWAorI2lmZGVmIEhQVVgxMDEwCisgICAgICAg ICAgICAgICAgICAgICAgIChmZF9zZXQgKikKKyNlbHNlCisKKyAgICAgICAgICAgICAgICAgICAg ICAgKGludCAqKQorI2VuZGlmIC8qIEhQVVgxMDEwICovCisjZWxzZQorI2lmZGVmIF9fREVDQwor I2lmZGVmIElOVFNFTEVDVAorICAgICAgICAgICAgICAgICAgICAgICAoaW50ICopCisjZWxzZSAv KiBkZWYgSU5UU0VMRUNUICovCisgICAgICAgICAgICAgICAgICAgICAgIChmZF9zZXQgKikKKyNl bmRpZiAvKiBkZWYgSU5UU0VMRUNUIFtlbHNlXSAqLworI2VuZGlmIC8qIF9fREVDQyAqLworI2Vu ZGlmIC8qIEhQVVggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgJnJmZHMsIE5VTEwsIE5VTEws ICZ0dikgPiAwKSAmJgorICAgICAgICAgICAgICAgRkRfSVNTRVQodGNwc3JmZCwgJnJmZHMpKTsK KyNlbHNlIC8qIEJTRFNFTEVDVCAqLworI2lmZGVmIElCTVNFTEVDVAorI2RlZmluZSBja19zbGVl cGludCAyNTAKKyAgICAgICAgICAgIHJlYWR5X3RvX2FjY2VwdCA9CisgICAgICAgICAgICAgIChz ZWxlY3QoJnRjcHNyZmQsIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgdGltbyA8IDAg PyAtdGltbyA6CisgICAgICAgICAgICAgICAgICAgICAgKHRpbW8gPiAwID8gdGltbyAqIDEwMDBM IDogY2tfc2xlZXBpbnQpKSA9PSAxCisgICAgICAgICAgICAgICApOworI2Vsc2UKKyNpZmRlZiBC RUxMU0VMRUNUCisgICAgICAgICAgICBGRF9aRVJPKHJmZHMpOworICAgICAgICAgICAgRkRfU0VU KHRjcHNyZmQsIHJmZHMpOworICAgICAgICAgICAgcmVhZHlfdG9fYWNjZXB0ID0KKyAgICAgICAg ICAgICAgKChzZWxlY3QoMTI4LCByZmRzLCBOVUxMLCBOVUxMLCB0aW1vIDwgMCA/IC10aW1vIDoK KyAgICAgICAgICAgICAgICAgICAgICAodGltbyA+IDAgPyB0aW1vICogMTAwMEwpKSA+IDApICYm CisgICAgICAgICAgICAgICBGRF9JU1NFVCh0Y3BzcmZkLCByZmRzKSk7CisjZWxzZQorLyogVHJ5 IHRoaXMgLSB3aGF0J3MgdGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbi4uLiAqLworCisgICAgICAg ICAgICBGRF9aRVJPKCZyZmRzKTsKKyAgICAgICAgICAgIEZEX1NFVCh0Y3BzcmZkLCAmcmZkcyk7 CisgICAgICAgICAgICByZWFkeV90b19hY2NlcHQgPQorICAgICAgICAgICAgICAoKHNlbGVjdChG RF9TRVRTSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAoZmRfc2V0ICopICZyZmRzLCBOVUxM LCBOVUxMLCAmdHYpID4gMCkgJiYKKyAgICAgICAgICAgICAgIEZEX0lTU0VUKHRjcHNyZmQsICZy ZmRzKSk7CisKKyNlbmRpZiAvKiBCRUxMU0VMRUNUICovCisjZW5kaWYgLyogSUJNU0VMRUNUICov CisjZW5kaWYgLyogQlNEU0VMRUNUICovCisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlYWR5 X3RvX2FjY2VwdCB8fCB0aW1vID09IDApIHsKKyAgICAgICAgaWYgKCh0dHlmZCA9IGFjY2VwdCh0 Y3BzcmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikm c2FkZHIsJnNhZGRybGVuKSkgPCAwKSB7CisgICAgICAgICAgICBpID0gZXJybm87ICAgICAgICAg ICAgICAgICAgLyogc2F2ZSBlcnJvciBjb2RlICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAg ICAgIHNvY2tldF9jbG9zZSh0Y3BzcmZkKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAg ICAgICBjbG9zZSh0Y3BzcmZkKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAg dHR5ZmQgPSAtMTsKKyAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7CisgICAgICAgICAgICB0Y3Bz cmZkID0gLTE7CisgICAgICAgICAgICB0Y3BzcnZfcG9ydCA9IDA7CisgICAgICAgICAgICBlcnJu byA9IGk7ICAgICAgICAgICAgICAgICAgLyogYW5kIHJlcG9ydCB0aGlzIGVycm9yICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBhY2NlcHQgZXJybm8iLCIiLGVycm5vKTsK KyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0c29ja29wdCh0 dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsK KworI2lmbmRlZiBOT1RDUE9QVFMKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyNpZmRlZiBTT0xfU09D S0VUCisjaWZkZWYgVENQX05PREVMQVkKKyAgICAgICAgbm9fZGVsYXkodHR5ZmQsdGNwX25vZGVs YXkpOworICAgICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBub19kZWxheSIsIiIsdGNwX25v ZGVsYXkpOworI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisjaWZkZWYgU09fS0VFUEFMSVZFCisg ICAgICAgIGtlZXBhbGl2ZSh0dHlmZCx0Y3Bfa2VlcGFsaXZlKTsKKyAgICAgICAgZGVidWcoRjEw MSwidGNwc3J2X29wZW4ga2VlcGFsaXZlIiwiIix0Y3Bfa2VlcGFsaXZlKTsKKyNlbmRpZiAvKiBT T19LRUVQQUxJVkUgKi8KKyNpZmRlZiBTT19MSU5HRVIKKyAgICAgICAgY2tfbGluZ2VyKHR0eWZk LHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vKTsKKyAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2 X29wZW4gbGluZ2VyIiwiIix0Y3BfbGluZ2VyX3Rtbyk7CisjZW5kaWYgLyogU09fTElOR0VSICov CisjaWZkZWYgU09fU05EQlVGCisgICAgICAgIHNlbmRidWYodHR5ZmQsdGNwX3NlbmRidWYpOwor I2VuZGlmIC8qIFNPX1NOREJVRiAqLworI2lmZGVmIFNPX1JDVkJVRgorICAgICAgICByZWN2YnVm KHR0eWZkLHRjcF9yZWN2YnVmKTsKKyNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KKyNlbmRpZiAvKiBT T0xfU09DS0VUICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBOT1RDUE9Q VFMgKi8KKworICAgICAgICB0dG5ldCA9IG5ldHQ7ICAgICAgICAgICAgICAgICAgIC8qIFRDUC9J UCAoc29ja2V0cykgbmV0d29yayAqLworICAgICAgICB0Y3BfaW5jb21pbmcgPSAxOyAgICAgICAg ICAgICAgIC8qIFRoaXMgaXMgYW4gaW5jb21pbmcgY29ubmVjdGlvbiAqLworICAgICAgICBzc3Rl bG5ldCA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIERvIHNlcnZlci1zaWRlIFRlbG5ldCBwcm90 b2NvbCAqLworCisgICAgICAgIC8qIFNlZSBpZiB0aGUgc2VydmljZSBpcyBURUxORVQuICovCisg ICAgICAgIHggPSAodW5zaWduZWQgc2hvcnQpc2VydmljZS0+c19wb3J0OworICAgICAgICBzZXJ2 aWNlMiA9IGdldHNlcnZieW5hbWUoInRlbG5ldCIsICJ0Y3AiKTsKKyAgICAgICAgaWYgKHNlcnZp Y2UyICYmIHggPT0gc2VydmljZTItPnNfcG9ydCkgeworI2lmZGVmIENPTU1FTlQKKwkgICAgLyog SmVmZiAyMDA1LzEyLzMwICovCisJICAgIGlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcgJiYgLyog WWVzLi4uICovCisJCSB0dG5wcm90byAhPSBOUF9TU0xfUkFXICYmCisJCSB0dG5wcm90byAhPSBO UF9UTFNfUkFXKSAvKiBhbmQgaWYgcmF3IHBvcnQgbm90IHJlcXVlc3RlZCAqLworI2Vsc2UKKwkg ICAgLyogZmRjIDIwMDUvMTIvMDQgKi8KKyAgICAgICAgICAgIGlmICh0dG5wcm90byAhPSBOUF9U Q1BSQVcpICAvKiBZZXMgYW5kIGlmIHJhdyBwb3J0IG5vdCByZXF1ZXN0ZWQgKi8KKyNlbmRpZgkv KiAgKi8KKyAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7CS8qIHNldCBwcm90b2Nv bCB0byBURUxORVQuICovCisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KGlwYWRkciwoY2hh ciAqKWluZXRfbnRvYShzYWRkci5zaW5fYWRkciksMjApOworICAgICAgICBpZiAodGNwX3JkbnMp IHsKKyAgICAgICAgICAgIGlmICghcXVpZXQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiBS ZXZlcnNlIEROUyBMb29rdXAuLi4gIik7CisgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaG9zdCA9IGdldGhvc3RieWFkZHIoKGNo YXIgKikmc2FkZHIuc2luX2FkZHIsNCxQRl9JTkVUKSkgeworICAgICAgICAgICAgICAgIGhvc3Qg PSBja19jb3B5aG9zdGVudChob3N0KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0Y3Bz cnZfb3BlbiBnZXRob3N0YnlhZGRyICE9IE5VTEwiLCIiLDApOworICAgICAgICAgICAgICAgIGlm ICghcXVpZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIoT0spXG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIG5hbWVbMF0gPSAnKic7CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KCZuYW1l WzFdLGhvc3QtPmhfbmFtZSw3OCk7CisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUsIjoi LDgwLXN0cmxlbihuYW1lKSk7CisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUscCw4MC1z dHJsZW4obmFtZSkpOworICAgICAgICAgICAgICAgIGlmICghcXVpZXQKKyNpZm5kZWYgTk9JQ1AK KyAgICAgICAgICAgICAgICAgICAgJiYgIWRvY29ueAorI2VuZGlmIC8qIE5PSUNQICovCisgICAg ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMgY29ubmVjdGVk IG9uIHBvcnQgJXNcbiIsaG9zdC0+aF9uYW1lLHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBpZiAoIXF1aWV0KSBwcmludGYoIkZhaWxlZC5cbiIpOworICAgICAgICAg ICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFxdWlldCkgcHJpbnRmKCIoT0spXG4iKTsKKworICAg ICAgICBpZiAoIXRjcF9yZG5zIHx8ICFob3N0KSB7CisgICAgICAgICAgICBja3N0cm5jcHkobmFt ZSxpcGFkZHIsODApOworICAgICAgICAgICAgY2tzdHJuY2F0KG5hbWUsIjoiLDgwKTsKKyAgICAg ICAgICAgIGNrc3RybmNhdChuYW1lLGNrdWl0b2EobnRvaHMoc2FkZHIuc2luX3BvcnQpKSw4MCk7 CisgICAgICAgICAgICBpZiAoIXF1aWV0CisjaWZuZGVmIE5PSUNQCisgICAgICAgICAgICAgICAg JiYgIWRvY29ueAorI2VuZGlmIC8qIE5PSUNQICovCisgICAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgICBwcmludGYoIiVzIGNvbm5lY3RlZCBvbiBwb3J0ICVkXG4iLGlwYWRkcixudG9ocyhz YWRkci5zaW5fcG9ydCkpOworICAgICAgICB9CisgICAgICAgIGlmICghcXVpZXQpIGZmbHVzaChz dGRvdXQpOworCisjaWZkZWYgQ0tfU0VDVVJJVFkKKyAgICAgICAgLyogQmVmb3JlIEluaXRpYWxp emF0aW9uIFRlbG5ldC9SbG9naW4gTmVnb3RpYXRpb25zIEluaXQgS2VyYmVyb3MgKi8KKyAgICAg ICAgY2tfYXV0aF9pbml0KCh0Y3BfcmRucyAmJiBob3N0ICYmIGhvc3QtPmhfbmFtZSAmJiBob3N0 LT5oX25hbWVbMF0pID8KKyAgICAgICAgICAgICAgICAgICAgIChjaGFyICopaG9zdC0+aF9uYW1l IDogaXBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgaXBhZGRyLAorICAgICAgICAgICAgICAg ICAgICAgdWlkYnVmLAorICAgICAgICAgICAgICAgICAgICAgdHR5ZmQKKyAgICAgICAgICAgICAg ICAgICAgICk7CisjZW5kaWYgLyogQ0tfU0VDVVJJVFkgKi8KKworI2lmZGVmIENLX1NTTAorICAg ICAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmICFzc2xfZmFpbGVkKSB7CisgICAg ICAgICAgICBpZiAoY2tfc3NsX2luY29taW5nKHR0eWZkKSA8IDApIHsKKyNpZmRlZiBUQ1BJUExJ QgorICAgICAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodHR5ZmQpOworICAgICAgICAgICAg ICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAg ICAgICAgICAgICAgICAgICBjbG9zZSh0dHlmZCk7CisgICAgICAgICAgICAgICAgICAgIGNsb3Nl KHRjcHNyZmQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgICAgIHR0 eWZkID0gLTE7CisgICAgICAgICAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7CisgICAgICAgICAg ICAgICAgICAgIHRjcHNyZmQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgdGNwc3J2X3BvcnQg PSAwOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICAg ICAgLyogRmluZCBvdXQgb3VyIG93biBJUCBhZGRyZXNzLiAqLworICAgICAgICBsX3NsZW4gPSBz aXplb2YobF9hZGRyKTsKKyAgICAgICAgYnplcm8oKGNoYXIgKikmbF9hZGRyLCBsX3NsZW4pOwor I2lmbmRlZiBFWENFTEFOCisgICAgICAgIGlmICghZ2V0c29ja25hbWUodHR5ZmQsIChzdHJ1Y3Qg c29ja2FkZHIgKikmbF9hZGRyLCAmbF9zbGVuKSkgeworICAgICAgICAgICAgY2hhciAqIHMgPSAo Y2hhciAqKWluZXRfbnRvYShsX2FkZHIuc2luX2FkZHIpOworICAgICAgICAgICAgY2tzdHJuY3B5 KG15aXBhZGRyLCBzLDIwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImdldHNvY2tuYW1lIixt eWlwYWRkciwwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEVYQ0VMQU4gKi8KKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworCisgICAgICAgIGlmICh0bl9pbmkoKSA8IDApICAgICAgICAgICAgICAg LyogU3RhcnQgVEVMTkVUIG5lZ290aWF0aW9ucy4gKi8KKyAgICAgICAgICBpZiAodHRjaGsoKSA8 IDApIHsgICAgICAgICAgICAvKiBEaXNjb25uZWN0ZWQ/ICovCisgICAgICAgICAgICAgIGkgPSBl cnJubzsgICAgICAgICAgICAgICAgLyogc2F2ZSBlcnJvciBjb2RlICovCisjaWZkZWYgVENQSVBM SUIKKyAgICAgICAgICAgICAgc29ja2V0X2Nsb3NlKHRjcHNyZmQpOworI2Vsc2UgLyogVENQSVBM SUIgKi8KKyAgICAgICAgICAgICAgY2xvc2UodGNwc3JmZCk7CisjZW5kaWYgLyogVENQSVBMSUIg Ki8KKyAgICAgICAgICAgICAgdHR5ZmQgPSAtMTsKKyAgICAgICAgICAgICAgd2FzY2xvc2VkID0g MTsKKyAgICAgICAgICAgICAgdGNwc3JmZCA9IC0xOworICAgICAgICAgICAgICB0Y3BzcnZfcG9y dCA9IDA7CisgICAgICAgICAgICAgIGVycm5vID0gaTsgICAgICAgICAgICAgICAgLyogYW5kIHJl cG9ydCB0aGlzIGVycm9yICovCisgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVu IGFjY2VwdCBlcnJubyIsIiIsZXJybm8pOworICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAg ICAgICAgIH0KKyAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gc2VydmljZSIsIiIseCk7 CisgICAgICAgIGlmICgqbGNsIDwgMCkgICAgICAgICAgICAgICAgICAgLyogU2V0IGxvY2FsIG1v ZGUuICovCisgICAgICAgICAgKmxjbCA9IDE7CisKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVm IEtSQjVfVTJVCisgICAgICAgIGlmICggdHRucHJvdG8gPT0gTlBfSzVVMlUgKSB7CisgICAgICAg ICAgICBpZiAoazVfdXNlcl90b191c2VyX3NlcnZlcl9hdXRoKCkgIT0gMCkgeworICAgICAgICAg ICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgLyogc2F2ZSBlcnJvciBjb2RlICovCisj aWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7Cisj ZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICAgIGNsb3NlKHRjcHNyZmQpOworI2Vu ZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgdHR5ZmQgPSAtMTsKKyAgICAgICAg ICAgICAgICB3YXNjbG9zZWQgPSAxOworICAgICAgICAgICAgICAgIHRjcHNyZmQgPSAtMTsKKyAg ICAgICAgICAgICAgICB0Y3BzcnZfcG9ydCA9IDA7CisgICAgICAgICAgICAgICAgZXJybm8gPSBp OyAgICAgICAgICAgICAgICAvKiBhbmQgcmVwb3J0IHRoaXMgZXJyb3IgKi8KKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBhY2NlcHQgZXJybm8iLCIiLGVycm5vKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5k aWYgLyogS1JCNV9VMlUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgICAgICByZXR1 cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCisgICAgfSBlbHNlIHsKKyAg ICAgICAgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAgICAgICAvKiBzYXZlIGVycm9yIGNvZGUg Ki8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICBzb2NrZXRfY2xvc2UodGNwc3JmZCk7CisjZWxz ZSAvKiBUQ1BJUExJQiAqLworICAgICAgICBjbG9zZSh0Y3BzcmZkKTsKKyNlbmRpZiAvKiBUQ1BJ UExJQiAqLworICAgICAgICB0dHlmZCA9IC0xOworICAgICAgICB3YXNjbG9zZWQgPSAxOworICAg ICAgICB0Y3BzcmZkID0gLTE7CisgICAgICAgIHRjcHNydl9wb3J0ID0gMDsKKyAgICAgICAgZXJy bm8gPSBpOyAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVwb3J0IHRoaXMgZXJyb3IgKi8K KyAgICAgICAgZGVidWcoRjEwMSwidGNwc3J2X29wZW4gYWNjZXB0IGVycm5vIiwiIixlcnJubyk7 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorfQorI2VuZGlmIC8qIE5PTElTVEVOICovCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogTk9ORVQg Ki8KKworI2lmZGVmIFRDUFNPQ0tFVAorY2hhciAqCitja25hbWUyYWRkcihuYW1lKSBjaGFyICog bmFtZTsKK3sKKyNpZmRlZiBIUFVYNQorICAgIHJldHVybigiIik7CisjZWxzZQorICAgIHN0cnVj dCBob3N0ZW50ICpob3N0OworCisgICAgaWYgKG5hbWUgPT0gTlVMTCB8fCAqbmFtZSA9PSAnXDAn KQorICAgICAgICByZXR1cm4oIiIpOworCisgICAgaG9zdCA9IGdldGhvc3RieW5hbWUobmFtZSk7 CisgICAgaWYgKCBob3N0ICkgeworICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7 CisgICAgICAgIHJldHVybihpbmV0X250b2EoKigoc3RydWN0IGluX2FkZHIgKikgaG9zdC0+aF9h ZGRyKSkpOworICAgIH0KKyAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIEhQVVg1ICovCit9CisK K2NoYXIgKgorY2thZGRyMm5hbWUoYWRkcikgY2hhciAqIGFkZHI7Cit7CisjaWZkZWYgSFBVWDUK KyAgICByZXR1cm4oIiIpOworI2Vsc2UKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsKKyAgICBz dHJ1Y3QgaW5fYWRkciBzaW5fYWRkcjsKKworICAgIGlmIChhZGRyID09IE5VTEwgfHwgKmFkZHIg PT0gJ1wwJykKKyAgICAgICAgcmV0dXJuKCIiKTsKKworICAgIHNpbl9hZGRyLnNfYWRkciA9IGlu ZXRfYWRkcihhZGRyKTsKKyAgICBob3N0ID0gZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSZzaW5fYWRk ciw0LEFGX0lORVQpOworICAgIGlmIChob3N0KSB7CisgICAgICAgIGhvc3QgPSBja19jb3B5aG9z dGVudChob3N0KTsKKyAgICAgICAgcmV0dXJuKChjaGFyICopaG9zdC0+aF9uYW1lKTsKKyAgICB9 CisgICAgcmV0dXJuKCIiKTsKKyNlbmRpZiAvKiBIUFVYNSAqLworfQorI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworCit1bnNpZ25lZCBsb25nIHBlZXJ4aXBhZGRyID0gMEw7CisKK2NoYXIgKgorY2tn ZXRwZWVyKCkgeworI2lmZGVmIFRDUFNPQ0tFVAorICAgIHN0YXRpYyBjaGFyIG5hbWVidWZbMjU2 XTsKKyAgICBzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmhvc3Q7CisgICAgc3RhdGljIHN0cnVjdCBz b2NrYWRkcl9pbiBzYWRkcjsKKyNpZmRlZiBHUEVFUk5BTUVfVAorICAgIHN0YXRpYyBHUEVFUk5B TUVfVCBzYWRkcmxlbjsKKyNlbHNlCisjaWZkZWYgUFRYCisgICAgc3RhdGljIHNpemVfdCBzYWRk cmxlbjsKKyNlbHNlCisjaWZkZWYgQUlYNDIKKyAgICAvKiBJdCdzIHNpemVfdCBpbiA0LjIgYnV0 IGludCBpbiA0LjEgYW5kIGVhcmxpZXIuICovCisgICAgLyogTm90ZTogdGhlIDQuMiBtYW4gcGFn ZSBsaWVzOyBiZWxpZXZlIHNvY2tldC5oLiAqLworICAgIHN0YXRpYyBzaXplX3Qgc2FkZHJsZW47 CisjZWxzZQorI2lmZGVmIFVOSVhXQVJFCisgICAgc3RhdGljIHNpemVfdCBzYWRkcmxlbjsKKyNl bHNlICAvKiBVTklYV0FSRSAqLworI2lmZGVmIERFQ19UQ1BJUAorLyogMjAxMC0wMy0wOCBTTVMu CisgKiBDb2luY2lkZW50YWxseSwgdGhlIGNvbmRpdGlvbiBmb3IgaW50ZWdlciBhcmd1bWVudHMg aW4gc2VsZWN0KCksCisgKiB3aGljaCBpcyBhY3R1YWxseSAiZGVmaW5lZCggX0RFQ0NfVjRfU09V UkNFKSIsIHdvcmtzIGZvciBhbiBpbnRlZ2VyCisgKiBhcmd1bWVudCBpbiBnZXRwZWVybmFtZSgp LiAgU2FkbHksIGR1ZSB0byBhIGxhY2sgb2YgZm9yZXNpZ2h0LAorICogImRlZmluZWQoIF9ERUND X1Y0X1NPVVJDRSkiIGRvZXNuJ3Qgd29yayB3aXRoIERFQyBDIFY0LjAsIHNvIHRoZQorICogdXNl ci1zcGVjaWZpZWQgSU5UU0VMRUNUIGlzIHVzZWQgaW5zdGVhZC4gIE1vc3QgbGlrZWx5LCAic2l6 ZV90IgorICogc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiAidW5zaWduZWQgaW50IiwgYnV0IEkn bSBhIGNvd2FyZC4KKyAqLworI2lmZGVmIElOVFNFTEVDVAorICAgIHN0YXRpYyBpbnQgc2FkZHJs ZW47CisjZWxzZSAvKiBkZWYgSU5UU0VMRUNUICovCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBz YWRkcmxlbjsKKyNlbmRpZiAvKiBkZWYgSU5UU0VMRUNUIFtlbHNlXSAqLworI2Vsc2UKKyNpZmRl ZiBNQUNPU1gxMAorICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2FkZHJsZW47CisjZWxzZQorI2lm ZGVmIENLXzY0QklUCisgICAgc3RhdGljIHNvY2tsZW5fdCBzYWRkcmxlbjsKKyNlbHNlCisgICAg c3RhdGljIGludCBzYWRkcmxlbjsKKyNlbmRpZgkvKiBDS182NEJJVCAqLworI2VuZGlmIC8qIE1B Q09TWDEwICovCisjZW5kaWYgLyogREVDX1RDUElQICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8K KyNlbmRpZiAvKiBBSVg0MiAqLworI2VuZGlmIC8qIFBUWCAqLworI2VuZGlmCS8qIEdQRUVSTkFN RV9UICovCisgICAgc2FkZHJsZW4gPSBzaXplb2Yoc2FkZHIpOworICAgIGlmIChnZXRwZWVybmFt ZSh0dHlmZCwoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCZzYWRkcmxlbikgPCAwKSB7CisgICAg ICAgIGRlYnVnKEYxMTEsImNrZ2V0cGVlciBmYWlsdXJlIixja2l0b2EodHR5ZmQpLGVycm5vKTsK KyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBob3N0ID0gZ2V0aG9zdGJ5YWRkcigo Y2hhciAqKSZzYWRkci5zaW5fYWRkciw0LEFGX0lORVQpOworICAgIGlmIChob3N0KSB7CisgICAg ICAgIGhvc3QgPSBja19jb3B5aG9zdGVudChob3N0KTsKKyAgICAgICAgY2tzdHJuY3B5KG5hbWVi dWYsKGNoYXIgKilob3N0LT5oX25hbWUsODApOworICAgIH0gZWxzZSB7CisgICAgICAgIGNrc3Ry bmNweShuYW1lYnVmLChjaGFyICopaW5ldF9udG9hKHNhZGRyLnNpbl9hZGRyKSw4MCk7CisgICAg fQorICAgIHBlZXJ4aXBhZGRyID0gbnRvaGwoc2FkZHIuc2luX2FkZHIuc19hZGRyKTsKKyAgICBk ZWJ1ZyhGMTExLCJja2dldHBlZXIiLG5hbWVidWYscGVlcnhpcGFkZHIpOworICAgIHJldHVybihu YW1lYnVmKTsKKyNlbHNlCisgICAgcmV0dXJuKE5VTEwpOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAq LworfQorCisvKiBHZXQgZnVsbHkgcXVhbGlmaWVkIElQIGhvc3RuYW1lICovCisKKyNpZm5kZWYg Tk9ORVQKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCitja2dldGZxaG9zdG5hbWUoY2hhciAqIG5h bWUpCisjZWxzZQorY2tnZXRmcWhvc3RuYW1lKG5hbWUpIGNoYXIgKiBuYW1lOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7CisjaWZkZWYgTk9DS0dFVEZRSE9TVAorCisgICAgcmV0dXJuKG5hbWUp OworCisjZWxzZSAvKiBJZiB0aGUgZm9sbG93aW5nIGNvZGUgZHVtcHMgY29yZSwgZGVmaW5lIE5P Q0tHRVRGUUhPU1QgYW5kIHJlYnVpbGQuICovCisKKyAgICBzdGF0aWMgY2hhciBuYW1lYnVmWzI1 Nl07CisgICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q9TlVMTDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJf aW4gcl9hZGRyOworICAgIGludCBpOworCisgICAgZGVidWcoRjExMCwiY2tnZXRmcWhuKCkiLG5h bWUsMCk7CisKKyAgICBja3N0cm5jcHkobmFtZWJ1ZixuYW1lLDI1Nik7CisgICAgbmFtZWJ1Zlsy NTVdID0gJ1wwJzsKKyAgICBpID0gY2tpbmRleCgiOiIsbmFtZWJ1ZiwwLDAsMCk7CisgICAgaWYg KGkpCisgICAgICBuYW1lYnVmW2ktMV0gPSAnXDAnOworCisgICAgYnplcm8oKGNoYXIgKikmcl9h ZGRyLCBzaXplb2Yocl9hZGRyKSk7CisKKyAgICBob3N0ID0gZ2V0aG9zdGJ5bmFtZShuYW1lYnVm KTsKKyAgICBpZiAoaG9zdCkgeworICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7 CisgICAgICAgIGRlYnVnKEYxMDAsImNrZ2V0ZnFobigpIGdldGhvc3RieW5hbWUgIT0gTlVMTCIs IiIsMCk7CisgICAgICAgIHJfYWRkci5zaW5fZmFtaWx5ID0gaG9zdC0+aF9hZGRydHlwZTsKKyNp ZmRlZiBIQUREUkxJU1QKKyNpZmRlZiBoX2FkZHIKKyAgICAgICAgLyogVGhpcyBpcyBmb3IgdHJ5 aW5nIG11bHRpcGxlIElQIGFkZHJlc3NlcyAtIHNlZSA8bmV0ZGIuaD4gKi8KKyAgICAgICAgaWYg KCEoaG9zdC0+aF9hZGRyX2xpc3QpKQorICAgICAgICAgIGdvdG8gZXhpdF9mdW5jOworICAgICAg ICBiY29weShob3N0LT5oX2FkZHJfbGlzdFswXSwKKyAgICAgICAgICAgICAgKGNhZGRyX3QpJnJf YWRkci5zaW5fYWRkciwKKyAgICAgICAgICAgICAgaG9zdC0+aF9sZW5ndGgKKyAgICAgICAgICAg ICAgKTsKKyNlbHNlCisgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3QpJnJfYWRk ci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOworI2VuZGlmIC8qIGhfYWRkciAqLworI2Vsc2Ug IC8qIEhBRERSTElTVCAqLworICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90KSZy X2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKKyNlbmRpZiAvKiBIQUREUkxJU1QgKi8K KyNpZmRlZiBDT01NRU5UCisjaWZuZGVmIEVYQ0VMQU4KKyAgICAgICAgZGVidWcoRjExMSwiQkNP UFkiLCJob3N0LT5oX2FkZHIiLGhvc3QtPmhfYWRkcik7CisjZW5kaWYgLyogRVhDRUxBTiAqLwor ICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIsIiAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyIiwK KyAgICAgICAgICAgICAgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkcik7CisjZW5kaWYJLyogQ09N TUVOVCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJCQ09QWSIsImhvc3QtPmhfbGVuZ3RoIixob3N0 LT5oX2xlbmd0aCk7CisKKyNpZmRlZiBOVAorICAgICAgICAvKiBXaW5kb3dzIDk1Lzk4IHJlcXVp cmVzIGEgMSBzZWNvbmQgd2FpdCBiZXR3ZWVuIGNhbGxzIHRvIE1pY3Jvc29mdCAqLworICAgICAg ICAvKiBwcm92aWRlZCBETlMgZnVuY3Rpb25zLiAgT3RoZXJ3aXNlLCB0aGUgVFRMIG9mIHRoZSBE TlMgcmVzcG9uc2UgKi8KKyAgICAgICAgLyogaXMgaWdub3JlZC4gKi8KKyAgICAgICAgaWYgKGlz V2luOTUoKSkKKyAgICAgICAgICBzbGVlcCgxKTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBo b3N0ID0gZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSZyX2FkZHIuc2luX2FkZHIsNCxQRl9JTkVUKTsK KyAgICAgICAgaWYgKGhvc3QpIHsKKyAgICAgICAgICAgIGhvc3QgPSBja19jb3B5aG9zdGVudCho b3N0KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImNrZ2V0ZnFobigpIGdldGhvc3RieWFkZHIg IT0gTlVMTCIsIiIsMCk7CisgICAgICAgICAgICBja3N0cm5jcHkobmFtZWJ1ZiwgaG9zdC0+aF9u YW1lLCAyNTYpOworICAgICAgICB9CisgICAgfQorCisjaWZkZWYgSEFERFJMSVNUCisjaWZkZWYg aF9hZGRyCisgIGV4aXRfZnVuYzoKKyNlbmRpZiAvKiBoX2FkZHIgKi8KKyNlbmRpZiAvKiBIQURE UkxJU1QgKi8KKworICAgIGlmIChpID4gMCkKKyAgICAgIGNrc3RybmNhdChuYW1lYnVmLCZuYW1l W2ktMV0sMjU2LXN0cmxlbihuYW1lYnVmKS1zdHJsZW4oJm5hbWVbaS0xXSkpOworICAgIGRlYnVn KEYxMTAsImNrZ2V0ZnFobigpIixuYW1lYnVmLDApOworICAgIHJldHVybihuYW1lYnVmKTsKKyNl bmRpZiAvKiBOT0NLR0VURlFIT1NUICovCit9CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworc2V0 bnByb3RvKGNoYXIgKiBwKQorI2Vsc2UKK3NldG5wcm90byhwKSBjaGFyICogcDsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIGlmICghaXNkaWdpdCgqcCkpIHsKKyAgICAgICAgaWYgKCFz dHJjbXAoImtlcm1pdCIscCkpCisgICAgICAgICAgdHRucHJvdG8gPSBOUF9LRVJNSVQ7CisgICAg ICAgIGVsc2UgaWYgKCFzdHJjbXAoInRlbG5ldCIscCkpCisgICAgICAgICAgdHRucHJvdG8gPSBO UF9URUxORVQ7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoImh0dHAiLHApKQorICAgICAgICAg IHR0bnByb3RvID0gTlBfVENQUkFXOworI2lmZGVmIFJMT0dDT0RFCisgICAgICAgIGVsc2UgaWYg KCFzdHJjbXAoImxvZ2luIixwKSkKKyAgICAgICAgICB0dG5wcm90byA9IE5QX1JMT0dJTjsKKyNl bmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAvKiBDb21tb25seSB1 c2VkIFNTTCBwb3J0cyAobWlnaHQgbm90IGJlIGluIHNlcnZpY2VzIGZpbGUpICovCisgICAgICAg IGVsc2UgaWYgKCFzdHJjbXAoImh0dHBzIixwKSkgeworICAgICAgICAgIHR0bnByb3RvID0gTlBf U1NMX1JBVzsKKyAgICAgICAgICBzc2xfb25seV9mbGFnID0gMTsKKyAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKCJzc2wtdGVsbmV0IixwKSkgeworICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVM TkVUOworICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOworICAgICAgICB9IGVsc2UgaWYgKCFz dHJjbXAoInRlbG5ldHMiLHApKSB7CisgICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7Cisg ICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wg Ki8KKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIFJMT0dDT0RFCisgICAgICAgIGVsc2UgaWYg KCFzdHJjbXAoImtsb2dpbiIscCkpIHsKKyAgICAgICAgICAgIGlmIChja19rcmI1X2lzX2luc3Rh bGxlZCgpKQorICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0s1TE9HSU47CisgICAgICAgICAg ICBlbHNlIGlmIChja19rcmI0X2lzX2luc3RhbGxlZCgpKQorICAgICAgICAgICAgICB0dG5wcm90 byA9IE5QX0s0TE9HSU47CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHR0bnByb3Rv ID0gTlBfUkxPR0lOOworICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoImVrbG9naW4iLHApKSB7 CisgICAgICAgICAgICBpZiAoY2tfa3JiNV9pc19pbnN0YWxsZWQoKSkKKyAgICAgICAgICAgICAg dHRucHJvdG8gPSBOUF9FSzVMT0dJTjsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNrX2tyYjRfaXNf aW5zdGFsbGVkKCkpCisgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs0TE9HSU47CisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfUkxPR0lOOworICAgICAg ICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAg ICAgICBlbHNlCisgICAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOworICAgIH0gZWxzZSB7Cisg ICAgICAgIHN3aXRjaCAoYXRvaShwKSkgeworICAgICAgICAgIGNhc2UgMjM6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFRlbG5ldCAqLworICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDUxMzoKKyAgICAgICAgICAgIHR0 bnByb3RvID0gTlBfUkxPR0lOOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAx NjQ5OgorICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9LRVJNSVQ7CisgICAgICAgICAgICBicmVh azsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICBjYXNlIDQ0MzoKKyNpZmRlZiBDT01NRU5UCisJ ICAgIC8qIEplZmYgMjAwNS8xMi8zMCAqLworICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9TU0xf UkFXOworI2Vsc2UKKwkgICAgLyogZmRjIDIwMDUvMTIvMDQgKi8KKyAgICAgICAgICAgIHR0bnBy b3RvID0gTlBfU1NMOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIHNzbF9vbmx5 X2ZsYWcgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAxNTE6CisgICAg ICAgICAgY2FzZSA5OTI6CisgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsKKyAgICAg ICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyog Q0tfU1NMICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgICBjYXNlIDU0MzoKKyAgICAg ICAgICAgIGlmIChja19rcmI1X2lzX2luc3RhbGxlZCgpKQorICAgICAgICAgICAgICB0dG5wcm90 byA9IE5QX0s1TE9HSU47CisgICAgICAgICAgICBlbHNlIGlmIChja19rcmI0X2lzX2luc3RhbGxl ZCgpKQorICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX0s0TE9HSU47CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfUkxPR0lOOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSAyMTA1OgorICAgICAgICAgICAgaWYgKGNrX2tyYjVfaXNfaW5z dGFsbGVkKCkpCisgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs1TE9HSU47CisgICAgICAg ICAgICBlbHNlIGlmIChja19rcmI0X2lzX2luc3RhbGxlZCgpKQorICAgICAgICAgICAgICB0dG5w cm90byA9IE5QX0VLNExPR0lOOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB0dG5w cm90byA9IE5QX1JMT0dJTjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0tFUkJF Uk9TICovCisgICAgICAgICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgLyogSFRUUCAq LworICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9UQ1BSQVc7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIGNrZ2V0c2VydmljZSgp IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBwb3J0IG51bWJlciBmb3IgYSBnaXZlbiAqLworLyog c2VydmljZSB0YWtpbmcgaW50byBhY2NvdW50IHRoZSB1c2Ugb2YgRE5TIFNSViByZWNvcmRzLiAg ICAgICAgICovCisKK3N0YXRpYyBzdHJ1Y3Qgc2VydmVudCBzZXJ2cmVjOworc3RhdGljIHN0cnVj dCBzZXJ2ZW50ICoKK2NrZ2V0c2VydmljZShob3N0bmFtZSwgc2VydmljZW5hbWUsIGlwLCBpcGxl bikKKyAgICBjaGFyICpob3N0bmFtZTsgY2hhciAqIHNlcnZpY2VuYW1lOyBjaGFyICogaXA7IGlu dCBpcGxlbjsKK3sKKyAgICBzdHJ1Y3Qgc2VydmVudCAqIHNlcnZpY2UgPSBOVUxMOworI2lmZGVm IENLX0ROU19TUlYKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBkbnNfYWRkcnMgPSBOVUxMOworICAg IGludCBkbnNfbmFkZHJzID0gMDsKKyNlbmRpZiAvKiBDS19ETlNfU1JWICovCisKKyAgICBpZiAo aXNkaWdpdCgqc2VydmljZW5hbWUpKSB7ICAgICAgICAvKiBVc2Ugc29ja2V0IG51bWJlciB3aXRo b3V0IGxvb2t1cCAqLworICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7CisgICAgICAgIHNlcnZp Y2UtPnNfcG9ydCA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydClhdG9pKHNlcnZpY2VuYW1lKSk7Cisg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIGxvb2t1 cCB0aGUgc2VydmljZSBuYW1lICovCisjaWZkZWYgQ0tfRE5TX1NSVgorICAgICAgICBpZiAodGNw X2Ruc19zcnYgJiYgIXF1aWV0KSB7CisgICAgICAgICAgICBwcmludGYoIiBETlMgU1JWIExvb2t1 cC4uLiAiKTsKKyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICB9CisgICAgICAg IGlmICh0Y3BfZG5zX3NydiAmJgorICAgICAgICAgICAgbG9jYXRlX3Nydl9kbnMoaG9zdG5hbWUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlbmFtZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ0Y3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRuc19hZGRy cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZkbnNfbmFkZHJzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIC8qIFVzZSB0aGUg Zmlyc3Qgb25lLiAgRXZlbnR1YWxseSB3ZSBzaG91bGQgY3ljbGUgdGhyb3VnaCBhbGwgKi8KKyAg ICAgICAgICAgIC8qIHRoZSByZXR1cm5lZCBJUCBhZGRyZXNzZXMgYW5kIHBvcnQgbnVtYmVycy4g Ki8KKyAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gTlVMTDsKKyNpZmRlZiBC RVRBREVCVUcKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgcHJpbnRmKCJcclxuIik7 CisgICAgICAgICAgICBmb3IgKCBpPTA7aTxkbnNfbmFkZHJzO2krKyApIHsKKyAgICAgICAgICAg ICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZkbnNfYWRkcnNbaV07CisgICAgICAg ICAgICAgICAgcHJpbnRmKCJkbnNfYWRkcnNbJWRdID0gJXMgJWRcclxuIiwgaSwKKyAgICAgICAg ICAgICAgICAgICAgICAgIChjaGFyICopaW5ldF9udG9hKHNpbi0+c2luX2FkZHIpLAorICAgICAg ICAgICAgICAgICAgICAgICAgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworICAgICAgICAgICAgfQor I2VuZGlmIC8qIEJFVEFERUJVRyAqLworICAgICAgICAgICAgc2luID0gKHN0cnVjdCBzb2NrYWRk cl9pbiAqKSAmZG5zX2FkZHJzWzBdOworICAgICAgICAgICAgaWYgKCBpcCAmJiBpcGxlbiA+IDAg KQorICAgICAgICAgICAgICAgIGNrc3RybmNweShpcCwoY2hhciAqKWluZXRfbnRvYShzaW4tPnNp bl9hZGRyKSxpcGxlbik7CisgICAgICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7CisgICAgICAg ICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBzaW4tPnNpbl9wb3J0OworCisgICAgICAgICAgICBmcmVl KGRuc19hZGRycyk7CisgICAgICAgICAgICBkbnNfYWRkcnMgPSBOVUxMOworICAgICAgICAgICAg ZG5zX25hZGRycyA9IDA7CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX0ROU19TUlYgKi8K KyAgICAgICAgICAgIHNlcnZpY2UgPSBnZXRzZXJ2YnluYW1lKHNlcnZpY2VuYW1lLCAidGNwIik7 CisgICAgfQorICAgIGlmICghc2VydmljZSkgeworICAgICAgICBpZiAoIWNrc3RyY21wKCJrZXJt aXQiLHNlcnZpY2VuYW1lLC0xLDApKSB7IC8qIEtlcm1pdCBzZXJ2aWNlIHBvcnQgKi8KKyAgICAg ICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKKyAgICAgICAgICAgIHNlcnZpY2UtPnNfcG9ydCA9 IGh0b25zKDE2NDkpOworICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgidGVsbmV0IixzZXJ2 aWNlbmFtZSwtMSwwKSkgeyAvKiBUZWxuZXQgcG9ydCAqLworICAgICAgICAgICAgc2VydmljZSA9 ICZzZXJ2cmVjOworICAgICAgICAgICAgc2VydmljZS0+c19wb3J0ID0gaHRvbnMoMjMpOworICAg ICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgiaHR0cCIsc2VydmljZW5hbWUsLTEsMCkpIHsKKyAg ICAgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKKyAgICAgICAgICAgIHNlcnZpY2UtPnNfcG9y dCA9IGh0b25zKDgwKTsKKyAgICAgICAgfQorI2lmZGVmIFJMT0dDT0RFCisgICAgICAgIGVsc2Ug aWYgKCFja3N0cmNtcCgibG9naW4iLHNlcnZpY2VuYW1lLC0xLDApKSB7CisgICAgICAgICAgICBz ZXJ2aWNlID0gJnNlcnZyZWM7CisgICAgICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucyg1 MTMpOworICAgICAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgLyogQ29tbW9ubHkgdXNlZCBTU0wgcG9ydHMgKG1pZ2h0IG5vdCBiZSBpbiBzZXJ2aWNl cyBmaWxlKSAqLworICAgICAgICBlbHNlIGlmICghY2tzdHJjbXAoImh0dHBzIixzZXJ2aWNlbmFt ZSwtMSwwKSkgeworICAgICAgICAgICAgc2VydmljZSA9ICZzZXJ2cmVjOworICAgICAgICAgICAg c2VydmljZS0+c19wb3J0ID0gaHRvbnMoNDQzKTsKKyAgICAgICAgfSBlbHNlIGlmICghY2tzdHJj bXAoInNzbC10ZWxuZXQiLHNlcnZpY2VuYW1lLC0xLDApKSB7CisgICAgICAgICAgICBzZXJ2aWNl ID0gJnNlcnZyZWM7CisgICAgICAgICAgICBzZXJ2aWNlLT5zX3BvcnQgPSBodG9ucygxNTEpOwor ICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgidGVsbmV0cyIsc2VydmljZW5hbWUsLTEsMCkp IHsKKyAgICAgICAgICAgIHNlcnZpY2UgPSAmc2VydnJlYzsKKyAgICAgICAgICAgIHNlcnZpY2Ut PnNfcG9ydCA9IGh0b25zKDk5Mik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNp ZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIFJMT0dDT0RFCisgICAgICAgIGVsc2UgaWYgKCFja3N0 cmNtcCgia2xvZ2luIixzZXJ2aWNlbmFtZSwtMSwwKSkgeworICAgICAgICAgICAgc2VydmljZSA9 ICZzZXJ2cmVjOworICAgICAgICAgICAgc2VydmljZS0+c19wb3J0ID0gaHRvbnMoNTQzKTsKKyAg ICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoImVrbG9naW4iLHNlcnZpY2VuYW1lLC0xLDApKSB7 CisgICAgICAgICAgICBzZXJ2aWNlID0gJnNlcnZyZWM7CisgICAgICAgICAgICBzZXJ2aWNlLT5z X3BvcnQgPSBodG9ucygyMTA1KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisj ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICB9CisgICAgcmV0dXJuKHNlcnZpY2UpOworfQor CisvKiAgTiBFIFQgTyBQIEUgTiAgLS0gIE9wZW4gYSBuZXR3b3JrIGNvbm5lY3Rpb24gICovCisv KgorICBDYWxsaW5nIGNvbnZlbnRpb25zIHNhbWUgYXMgdHRvcGVuKCksIGV4Y2VwdCB0aGlyZCBh cmd1bWVudCBpcyBuZXR3b3JrCisgIHR5cGUgcmF0aGVyIHRoYW4gbW9kZW0gdHlwZS4gIERlc2ln bmVkIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0dG9wZW4uCisqLworCisjZGVmaW5lIFhYTkFN RUxFTiAyNTYKK3N0YXRpYyBjaGFyIHh4bmFtZVtYWE5BTUVMRU5dOworCitpbnQKK25ldG9wZW4o bmFtZSwgbGNsLCBuZXR0KSBjaGFyICpuYW1lOyBpbnQgKmxjbCwgbmV0dDsgeworICAgIGNoYXIg KnA7CisgICAgaW50IGksIHgsIHJjX2luZXRfYWRkciA9IDAsIGRucyA9IDA7CisjaWZkZWYgVENQ U09DS0VUCisgICAgaW50IGlzY29ubmVjdCA9IDA7CisjaWZkZWYgU09fT09CSU5MSU5FCisgICAg aW50IG9uID0gMTsKKyNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KKyAgICBzdHJ1Y3Qgc2VydmVu dCAqc2VydmljZT1OVUxMOworICAgIHN0cnVjdCBob3N0ZW50ICpob3N0PU5VTEw7CisgICAgc3Ry dWN0IHNvY2thZGRyX2luIHJfYWRkcjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworICAg IHN0cnVjdCBzb2NrYWRkcl9pbiBsX2FkZHI7CisgICAgR1NPQ0tOQU1FX1QgbF9zbGVuOworI2lm ZGVmIEVYQ0VMQU4KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VuZF9zb2NrZXQ7CisjZW5kaWYg LyogRVhDRUxBTiAqLworCisjaWZkZWYgSU5BRERSWAorLyogaW5ldF9hZGRyKCkgaXMgb2YgdHlw ZSBzdHJ1Y3QgaW5fYWRkciAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgZXh0ZXJuIHN0cnVj dCBpbl9hZGRyIGluZXRfYWRkcigpOworI2Vsc2UKKyNpZmRlZiBIUFVYNVdJTlRDUAorICAgIGV4 dGVybiBzdHJ1Y3QgaW5fYWRkciBpbmV0X2FkZHIoKTsKKyNlbmRpZiAvKiBIUFVYNVdJTlRDUCAq LworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgc3RydWN0IGluX2FkZHIgaWF4OworI2Vs c2UKKyNpZmRlZiBJTkFERFJfTk9ORQorICAgIHN0cnVjdCBpbl9hZGRyIGlheDsKKyNlbHNlIC8q IElOQUREUl9OT05FICovCisgICAgbG9uZyBpYXg7CisjZW5kaWYgLyogSU5BRERSX05PTkUgKi8K KyNlbmRpZiAvKiBJTkFERFJYICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZmRlZiBD T01NRU5UCisvKiBUaGlzIGNhdXNlcyBiaWcgdHJvdWJsZSAqLworI2lmbmRlZiBJTkFERFJfTk9O RQorI2RlZmluZSBJTkFERFJfTk9ORSAweGZmZmZmZmZmCisjZW5kaWYgLyogSU5BRERSX05PTkUg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBTVU5YMjUgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb2RlIGZvciBTdW5MaW5rIFguMjUgc3VwcG9ydCAqLworI2RlZmluZSBY MjlQSUQgMSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFguMjkgUHJvdG9jb2wgSUQgKi8KK19Q Uk9UT1RZUChTSUdUWVAgeDI1b29iaCwgKGludCkgKTsKKyAgICBDT05OX0RCIHgyNWhvc3Q7Cisj aWZuZGVmIFgyNV9XUl9GQUNJTElUWQorICAgIEZBQ0lMSVRZIHgyNWZhY2lsOworI2Vsc2UKKyAg ICBGQUNJTElUWV9EQiB4MjVmYWNpbDsKKyNlbmRpZiAvKiBYMjVfV1JfRkFDSUxJVFkgKi8KKyAg ICBzdGF0aWMgaW50IG5lZWRoID0gMTsKKyAgICBQSURfVCBwaWQ7CisgICAgZXh0ZXJuIGludCBs aW5raWQsIGxjbiwgeDI1dmVyOworI2VuZGlmIC8qIFNVTlgyNSAqLworI2lmZGVmIEFOWVgyNQor ICAgIGV4dGVybiBpbnQgcmV2Y2FsbCwgY2xvc2dyLCBjdWRhdGE7CisgICAgZXh0ZXJuIGNoYXIg dWRhdGFbXTsKKyNlbmRpZiAvKiBBTllYMjUgKi8KKworI2lmZGVmIElCTVgyNSAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFZhcmlhYmxlcyBmb3IgSUJNIFgyNSAqLworICAgIGV4dGVybiBp bnQgeDI1cG9ydDsgICAgICAgICAgICAgICAgIC8qIExvZ2ljYWwgcG9ydCB0byB1c2UgKi8KKyAg ICBleHRlcm4geDI1YWRkcl90IGxvY2FsX251YTsgICAgICAgICAvKiBMb2NhbCBYLjI1IGFkZHJl c3MgKi8KKyAgICBleHRlcm4geDI1YWRkcl90IHJlbW90ZV9udWE7ICAgICAgICAvKiBSZW1vdGUg WC4yNSBhZGRyZXNzICovCisgICAgZXh0ZXJuIGNoYXIgeDI1bmFtZVtdOyAgICAgICAgICAgICAg LyogWDI1IGRldmljZSBuYW1lIChzeDI1YTApICovCisgICAgZXh0ZXJuIGNoYXIgeDI1ZGV2W107 ICAgICAgICAgICAgICAgLyogWDI1IGRldmljZSBmaWxlIC9kZXYveDI1cGt0ICovCisgICAgdWxv bmcgYmluZF9mbGFncyA9IDA7ICAgICAgICAgICAgICAgLyogRmxhZ3MgZm9yIGJpbmRpbmcgdGhl IFgyNSBzdHJlYW0gKi8KKyAgICB1bG9uZyB0b2tlbiA9IDA7ICAgICAgICAgICAgICAgICAgICAv KiBUZW1wb3JhcnkgcmV0dXJuIGNvZGUgKi8KKyNlbmRpZiAvKiBJQk1YMjUgKi8KKworICAgIGRl YnVnKEYxMDEsIm5ldG9wZW4gbmV0dCIsIiIsbmV0dCk7CisgICAgKmlwYWRkciA9ICdcMCc7ICAg ICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBJUCBhZGRyZXNzIHN0cmluZyAqLworCisj aWZkZWYgU1VOWDI1CisgICAgaWYgKG5ldHQgPT0gTkVUX1NYMjUpIHsgICAgICAgICAgICAgLyog SWYgbmV0d29yayB0eXBlIGlzIFguMjUgKi8KKyAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAg ICAgICAgICAgICAvKiBDbG9zZSBhbnkgcHJldmlvdXMgbmV0IGNvbm5lY3Rpb24gKi8KKyAgICAg ICAgdHRucHJvdG8gPSBOUF9OT05FOyAgICAgICAgICAgICAvKiBObyBwcm90b2NvbCBzZWxlY3Rl ZCB5ZXQgKi8KKworICAgICAgICAvKiBTZXQgdXAgaG9zdCBzdHJ1Y3R1cmUgKi8KKyAgICAgICAg Ynplcm8oKGNoYXIgKikmeDI1aG9zdCxzaXplb2YoeDI1aG9zdCkpOworICAgICAgICBpZiAoKHgy NWhvc3QuaG9zdGxlbiA9IHBreDEyMShuYW1lLHgyNWhvc3QuaG9zdCkpIDwgMCkgeworICAgICAg ICAgICAgZnByaW50ZiAoc3RkZXJyLCJJbnZhbGlkIFguMTIxIGhvc3QgYWRkcmVzcyAlc1xuIixu YW1lKTsKKyAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgICAgIHJldHVybiAoLTEpOwor ICAgICAgICB9CisgICAgICAgIHgyNWhvc3QuZGF0YWxlbiA9IFgyOVBJRExFTjsKKyAgICAgICAg eDI1aG9zdC5kYXRhWzBdID0gWDI5UElEOworCisgICAgICAgIC8qIFNldCBjYWxsIHVzZXIgZGF0 YSBpZiBzcGVjaWZpZWQgKi8KKyAgICAgICAgaWYgKGN1ZGF0YSkgeworICAgICAgICAgICAgY2tz dHJuY3B5KChjaGFyICopeDI1aG9zdC5kYXRhK1gyOVBJRExFTix1ZGF0YSwoaW50KXN0cmxlbih1 ZGF0YSkpOworICAgICAgICAgICAgeDI1aG9zdC5kYXRhbGVuICs9IChpbnQpc3RybGVuKHVkYXRh KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE9wZW4gU3VuTGluayBYLjI1IHNvY2tldCAqLwor ICAgICAgICBpZiAoIXF1aWV0ICYmICpuYW1lKSB7CisgICAgICAgICAgICBwcmludGYoIiBUcnlp bmcgJXMuLi4gIiwgbmFtZSk7CisgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAg fQorICAgICAgICBpZiAoKHR0eWZkID0gc29ja2V0KEFGX1gyNSwgU09DS19TVFJFQU0sIDApKSA8 IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gc29ja2V0IGVycm9yIiwiIixl cnJubyk7CisgICAgICAgICAgICBwZXJyb3IgKCJYLjI1IHNvY2tldCBlcnJvciIpOworICAgICAg ICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXR0aW5nIFguMjUg b3V0LW9mLWJhbmQgZGF0YSBoYW5kbGVyICovCisgICAgICAgIHBpZCA9IGdldHBpZCgpOworICAg ICAgICBpZiAoaW9jdGwodHR5ZmQsU0lPQ1NQR1JQLCZwaWQpKSB7CisgICAgICAgICAgICBwZXJy b3IoIlguMjUgc2V0IHByb2Nlc3MgZ3JvdXAgaWQgZXJyb3IiKTsKKyAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgIH0KKyAgICAgICAgKFZPSUQpIHNpZ25hbChTSUdVUkcseDI1b29iaCk7 CisKKyAgICAgICAgLyogU2V0IHJldmVyc2UgY2hhcmdlIGNhbGwgYW5kIGNsb3NlZCB1c2VyIGdy b3VwIGlmIHJlcXVlc3RlZCAqLworICAgICAgICBiemVybyAoKGNoYXIgKikmeDI1ZmFjaWwsc2l6 ZW9mKHgyNWZhY2lsKSk7CisKKyNpZm5kZWYgWDI1X1dSX0ZBQ0lMSVRZCisvKiAgTmV3IFN1bkxp bmsgKDcuMCBvciA4LjAsIG5vdCBzdXJlIHdoaWNoKS4uLiAqLworICAgICAgICB4MjVmYWNpbC50 eXBlID0gVF9SRVZFUlNFX0NIQVJHRTsgLyogUmV2ZXJzZSBDaGFyZ2UgKi8KKyAgICAgICAgeDI1 ZmFjaWwuZl9yZXZlcnNlX2NoYXJnZSA9IHJldmNhbGwgPyAxIDogMDsKKyAgICAgICAgaWYgKGlv Y3RsKHR0eWZkLFgyNV9TRVRfRkFDSUxJVFksJngyNWZhY2lsKSA8IDApIHsKKyAgICAgICAgICAg IHBlcnJvciAoIlNldHRpbmcgWC4yNSByZXZlcnNlIGNoYXJnZSIpOworICAgICAgICAgICAgcmV0 dXJuICgtMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNsb3NnciA+IC0xKSB7ICAgICAgICAg ICAgICAvKiBDbG9zZWQgVXNlciBHcm91cCAoT3V0Z29pbmcpICovCisgICAgICAgICAgICBiemVy byAoKGNoYXIgKikmeDI1ZmFjaWwsc2l6ZW9mKHgyNWZhY2lsKSk7CisgICAgICAgICAgICB4MjVm YWNpbC50eXBlID0gVF9DVUc7CisgICAgICAgICAgICB4MjVmYWNpbC5mX2N1Z19yZXEgPSBDVUdf UkVRX0FDUzsKKyAgICAgICAgICAgIHgyNWZhY2lsLmZfY3VnX2luZGV4ID0gY2xvc2dyOworICAg ICAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9TRVRfRkFDSUxJVFksJngyNWZhY2lsKSA8IDAp IHsKKyAgICAgICAgICAgICAgICBwZXJyb3IgKCJTZXR0aW5nIFguMjUgY2xvc2VkIHVzZXIgZ3Jv dXAiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorI2Vsc2UKKy8qICBPbGQgU3VuTGluayA2LjAgKG9yIDcuMD8pLi4uICovCisgICAgICAg IGlmIChyZXZjYWxsKSB4MjVmYWNpbC5yZXZlcnNlX2NoYXJnZSA9IHJldmNhbGw7CisgICAgICAg IGlmIChjbG9zZ3IgPiAtMSkgeworICAgICAgICAgICAgeDI1ZmFjaWwuY3VnX3JlcSA9IDE7Cisg ICAgICAgICAgICB4MjVmYWNpbC5jdWdfaW5kZXggPSBjbG9zZ3I7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9XUl9GQUNJTElUWSwmeDI1ZmFjaWwpIDwgMCkgeworICAg ICAgICAgICAgcGVycm9yICgiU2V0dGluZyBYLjI1IGZhY2lsaXRpZXMiKTsKKyAgICAgICAgICAg IHJldHVybiAoLTEpOworICAgICAgICB9CisjZW5kaWYgLyogWDI1X1dSX0ZBQ0lMSVRZICovCisK KyAgICAgICAgLyogIE5lZWQgWC4yNSBoZWFkZXIgd2l0aCBiaXRzIFEgYW5kIE0gKi8KKyAgICAg ICAgaWYgKGlvY3RsICh0dHlmZCxYMjVfSEVBREVSLCZuZWVkaCkgPCAwKSB7CisgICAgICAgICAg ICBwZXJyb3IgKCJTZXR0aW5nIFguMjUgaGVhZGVyIik7CisgICAgICAgICAgICByZXR1cm4gKC0x KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENvbm5lY3RzIHRvIHJlbW90ZSBob3N0IHZpYSBT dW5MaW5rIFguMjUgKi8KKyAgICAgICAgaWYgKGNvbm5lY3QodHR5ZmQsKHN0cnVjdCBzb2NrYWRk ciAqKSZ4MjVob3N0LHNpemVvZih4MjVob3N0KSkgPCAwKSB7CisgICAgICAgICAgICBpID0gZXJy bm87CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNvbm5lY3QgZXJybm8iLCIiLGkp OworICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoIm5ldG9wZW4g eDI1IGNvbm5lY3QiKTsKKyAgICAgICAgICAgICAgICB4MjVkaWFnKCk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICAoVk9JRCkgbmV0Y2xvcygpOworICAgICAgICAgICAgdHR5ZmQgPSAtMTsK KyAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7CisgICAgICAgICAgICB0dG5wcm90byA9IE5QX05P TkU7CisgICAgICAgICAgICBlcnJubyA9IGk7CisgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAg ICAgICAgfQorCisgICAgICAgIC8qIEdldCBYLjI1IGxpbmsgaWRlbnRpZmljYXRpb24gdXNlZCBm b3IgdGhlIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9HRVRfTElO SywmbGlua2lkKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvciAoIkdldHRpbmcgWC4yNSBsaW5r IGlkIik7CisgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIC8q IEdldCBYLjI1IGxvZ2ljYWwgY2hhbm5lbCBudW1iZXIgdXNlZCBmb3IgdGhlIGNvbm5lY3Rpb24g Ki8KKyAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9SRF9MQ0dOLCZsY24pIDwgMCkgeworICAg ICAgICAgICAgcGVycm9yICgiR2V0dGluZyBYLjI1IGxjbiIpOworICAgICAgICAgICAgcmV0dXJu ICgtMSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBHZXQgU3VuTGluayBYLjI1IHZlcnNpb24g Ki8KKyAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9WRVJTSU9OLCZ4MjV2ZXIpIDwgMCkgewor ICAgICAgICAgICAgcGVycm9yICgiR2V0dGluZyBTdW5MaW5rIFguMjUgdmVyc2lvbiIpOworICAg ICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgIH0KKyAgICAgICAgdHRuZXQgPSBuZXR0OyAg ICAgICAgICAgICAgICAgICAvKiBTdW5saW5rIFguMjUgbmV0d29yayAqLworICAgICAgICB0dG5w cm90byA9IE5QX1gzOyAgICAgICAgICAgICAgIC8qIFBBRCBYLjMsIFguMjgsIFguMjkgcHJvdG9j b2wgKi8KKyAgICAgICAgaWYgKGxjbCkgaWYgKCpsY2wgPCAwKSAqbGNsID0gMTsgLyogTG9jYWwg bW9kZSAqLworICAgICAgICByZXR1cm4oMCk7CisgICAgfSBlbHNlIC8qIE5vdGUgdGhhdCBTVU5Y MjUgc3VwcG9ydCBjYW4gY29leGlzdCB3aXRoIFRDUC9JUCBzdXBwb3J0LiAqLworI2VuZGlmIC8q IFNVTlgyNSAqLworCisjaWZkZWYgSUJNWDI1CisgICAgLyogcmllaG0gKi8KKyAgICBpZiAobmV0 dCA9PSBORVRfSVgyNSkgeyAgICAgICAgICAgICAvKiBJQk0gQUlYIFguMjUgKi8KKyAgICAgICAg bmV0Y2xvcygpOyAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgcHJldmlvdXMgbmV0 IGNvbm5lY3Rpb24gKi8KKyAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOyAgICAgICAgICAgICAv KiBObyBwcm90b2NvbCBzZWxlY3RlZCB5ZXQgKi8KKworICAgICAgICAvKiBmaW5kIG91dCB3aG8g d2UgYXJlIC0gdGhpcyBpcyBub3Qgc28gZWFzeSBvbiBBSVggKi8KKyAgICAgICAgLyogcmllaG06 IG5lZWQgdG8gd3JpdGUgdGhlIGNvZGUgdGhhdCBmaW5kcyB0aGlzIG91dAorICAgICAgICAgKiBh dXRvbWF0aWNhbGx5LCBvciBhdCBsZWFzdCBhbGxvdyBpdCB0byBiZSBjb25maWd1cmVkCisgICAg ICAgICAqIHNvbWVob3cKKyAgICAgICAgICovCisgICAgICAgIGlmICghbG9jYWxfbnVhWzBdICYm ICF4MjVsb2NhbF9udWEobG9jYWxfbnVhKSkgeworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgfQorCisgICAgICAgIC8qIEluaXRpYWxpc2UgdGhlIFgyNSBBUEkgKG9uY2UgcGVyIHBy b2Nlc3M/IG9uY2UgcGVyIGNvbm5lY3Rpb24/KSAqLworCisgICAgICAgIGRlYnVnKEYxMTAsICJP cGVuaW5nICIsIHgyNWRldiwgMCApOworICAgICAgICAvKiBzZXQgT19OREVMQVkgdG8gYWxsb3cg cG9sbGluZz8gKi8KKyAgICAgICAgaWYgKCh0dHlmZCA9IG9wZW4oeDI1ZGV2LCBPX1JEV1IpKSA8 IDApIHsKKyAgICAgICAgICAgIHBlcnJvciAoIlguMjUgZGV2aWNlIG9wZW4gZXJyb3IiKTsKKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW46IGRldmljZSBvcGVuIGVycm9yIiwiIixlcnJu byk7CisgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHB1 c2ggdGhlIE5QSSBvbnRvIHRoZSBTVFJFQU0gKi8KKyAgICAgICAgaWYgKGlvY3RsKHR0eWZkLElf UFVTSCwibnBpIikgPCAwICkgeworICAgICAgICAgICAgY2xvc2UodHR5ZmQpOworICAgICAgICAg ICAgdHR5ZmQgPSAtMTsKKyAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDE7CisgICAgICAgICAgICBw ZXJyb3IoICJrZXJtaXQ6IG5ldG9wZW4oKTogY291bGRuJ3QgcHVzaCBucGkgb24gdGhlIFgyNSBz dHJlYW0iICk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuOiBjYW4ndCBwdXNoIG5w aSBvbiB0aGUgWDI1IHN0cmVhbSIsIiIsZXJybm8pOworICAgICAgICAgICAgcmV0dXJuICgtMSk7 CisgICAgICAgIH0KKworICAgICAgICAvKiBzZXQgdXAgc2VydmVyIG1vZGUgLSBiaW5kIHRoZSB4 MjUgcG9ydCBhbmQgd2FpdCBmb3IKKyAgICAgICAgICogaW5jb21pbmcgY29ubmVjdGlvbnMKKyAg ICAgICAgICovCisgICAgICAgIGlmIChuYW1lWzBdID09ICcqJykgeyAgICAgICAgICAgLyogU2Vy dmVyICovCisgICAgICAgICAgICAvKiBzZXQgdXAgYSBzZXJ2ZXIgLSBzZWUgdGhlIHdhcm5pbmcg aW4geDI1YmluZCgpICovCisgICAgICAgICAgICBiaW5kX2ZsYWdzIHw9IFRPS0VOX1JFUVVFU1Q7 CisKKyAgICAgICAgICAgIC8qIGJpbmQga2VybWl0IHRvIHRoZSBsb2NhbCBYMjUgYWRkcmVzcyAq LworICAgICAgICAgICAgdG9rZW4gPSB4MjViaW5kKHR0eWZkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxvY2FsX251YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGF0YSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXN0cmxlbiggdWRhdGEgKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgy NXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZF9mbGFncworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAodG9rZW4gPCAwKSB7CisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbjogY291bGRuJ3QgYmluZCB0byBsb2NhbCBY MjUgYWRkcmVzcyIsIiIsMCk7CisgICAgICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAg ICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBDdXJyZW50 bHkgbm90IGNvbm5lY3RlZCB0byBhIHJlbW90ZSBob3N0ICovCisKKyAgICAgICAgICAgIHJlbW90 ZV9udWFbMF0gPSAnXDAnOworCisgICAgICAgICAgICAvKiBzdG9yZSB0aGUgZmQgc28gdGhhdCBp bmNvbWluZyBjYWxscyBjYW4gaGF2ZSB0aGVpciBvd24gZmQKKyAgICAgICAgICAgICAqIFRoaXMg aXMgYWxtb3N0IHN1cHBvcnQgZm9yIGEgdHJ1ZSBzZXJ2ZXIgKGllOiBhJ2xhIGZ0cGQpCisgICAg ICAgICAgICAgKiBidXQgd2UncmUgbm90IHF1aXRlIHRoZXJlIHlldC4KKyAgICAgICAgICAgICAq IHVzZWQgaW4gbmV0Y2xvcygpCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHgyNXNlcnZl cmZkID0gdHR5ZmQ7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogd2FpdCBmb3IgYW4g aW5jb21pbmcgY2FsbAorICAgICAgICAgICAgICogdGhpcyBzaG91bGQgaGFwcGVuIGluIHRoZSAi c2VydmVyIiBjb21tYW5kIGFuZCBub3QgaW4KKyAgICAgICAgICAgICAqIHRoZSAic2V0IGhvc3Qg KiIgY29tbWFuZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCh0dHlmZCA9IHgy NWdldGNhbGwodHR5ZmQpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGllbnQgKi8KKyAgICAgICAgICAgIC8qIEJpbmQg a2VybWl0IHRvIHRoZSBsb2NhbCBYMjUgYWRkcmVzcyAqLworICAgICAgICAgICAgdG9rZW4gPSB4 MjViaW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0eWZkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxvY2FsX251YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y2hhciAqKU5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyNXBvcnQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZF9mbGFncworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAodG9rZW4gPCAwKSB7CisgICAgICAgICAg ICAgICAgZGVidWcoRjEwMCwibmV0b3BlbjogY291bGRuJ3QgYmluZCB0byBsb2NhbCBYMjUgYWRk cmVzcyIsIiIsMCk7CisgICAgICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgICAgICB9CisvKiByaWVobTogdGhpcyBzaG91bGQgYmUgZG9u ZSB2aWEgdGhlIENPTk5FQ1QgY29tbWFuZCwgbm90IEhPU1QhICovCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgeDI1c2VydmVyZmQgPSAwOworICAgICAgICAgICAgICAgIC8qIGNhbGwg dGhlIHJlbW90ZSBob3N0ICovCisgICAgICAgICAgICAgICAgLyogbmFtZSA9PSBhZGRyZXNzIG9m IHJlbW90ZSBob3N0IGFzIGNoYXIqICovCisgICAgICAgICAgICAgICAgaWYgKHgyNWNhbGwodHR5 ZmQsIG5hbWUsIHVkYXRhKSA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRvcGVuOiBjb3VsZG4ndCBjb25uZWN0IHRv IHJlbW90ZSBYMjUgYWRkcmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAwKTsK KyAgICAgICAgICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdHJjcHkocmVtb3Rl X251YSwgbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdHRuZXQgPSBu ZXR0OyAgICAgICAgICAgICAgICAgICAvKiBBSVggWC4yNSBuZXR3b3JrICovCisgICAgICAgIGlm IChsY2wpIGlmICgqbGNsIDwgMCkgKmxjbCA9IDE7IC8qIExvY2FsIG1vZGUgKi8KKyAgICAgICAg cmV0dXJuKDApOworCisgICAgfSBlbHNlIC8qIE5vdGUgdGhhdCBJQk1YMjUgc3VwcG9ydCBjYW4g Y29leGlzdCB3aXRoIFRDUC9JUCBzdXBwb3J0LiAqLworI2VuZGlmIC8qIElCTVgyNSAqLworCisv KiAgIEFkZCBzdXBwb3J0IGZvciBvdGhlciBuZXR3b3JrcyBoZXJlLiAqLworCisgICAgICBpZiAo bmV0dCAhPSBORVRfVENQQikgcmV0dXJuKC0xKTsgLyogQlNEIHNvY2tldCBzdXBwb3J0ICovCisK KyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDbG9zZSBhbnkgcHJldmlvdXMgY29ubmVjdGlvbi4gKi8KKyAgICBja3N0cm5jcHkobmFt ZWNvcHksIG5hbWUsIE5BTUVDUFlMKTsgICAgICAgIC8qIENvcHkgdGhlIGhvc3RuYW1lLiAqLwor ICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gbmFtZWNvcHkiLG5hbWVjb3B5LDApOworCisjaWZuZGVm IE5PTElTVEVOCisgICAgaWYgKG5hbWVbMF0gPT0gJyonKQorICAgICAgcmV0dXJuKHRjcHNydl9v cGVuKG5hbWUsIGxjbCwgbmV0dCwgMCkpOworI2VuZGlmIC8qIE5PTElTVEVOICovCisKKyAgICBw ID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBXYXMgYSBzZXJ2aWNlIHJlcXVl c3RlZD8gKi8KKyAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOicpIHArKzsgLyogTG9v ayBmb3IgY29sb24gKi8KKyAgICBpZiAoKnAgPT0gJzonKSB7ICAgICAgICAgICAgICAgICAgICAv KiBIYXZlIGEgY29sb24gKi8KKyAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBuYW1lIGhhcyBj b2xvbiIsbmFtZWNvcHksMCk7CisgICAgICAgICpwKysgPSAnXDAnOyAgICAgICAgICAgICAgICAg ICAgLyogR2V0IHNlcnZpY2UgbmFtZSBvciBudW1iZXIgKi8KKyNpZmRlZiBDS19VUkwKKyAgICAg ICAgLyoKKyAgICAgICAgICAgSGVyZSB3ZSBoYXZlIHRvIGNoZWNrIGZvciB2YXJpb3VzIHBvcHVs YXIgc3ludGF4ZXM6CisgICAgICAgICAgIGhvc3Q6cG9ydCAob3VyIG9yaWdpbmFsIHN5bnRheCkK KyAgICAgICAgICAgVVJMIHN1Y2ggYXMgdGVsbmV0Omhvc3Qgb3IgdGVsbmV0Oi8vaG9zdC8KKyAg ICAgICAgICAgT3IgZXZlbiB0ZWxuZXQ6Ly91c2VyOnBhc3N3b3JkQGhvc3Q6cG9ydC9wYXRoLwor ICAgICAgICAgICBPciBhIG1hbGZvcm1lZCBVUkwgc3VjaCBhcyBnZW5lcmF0ZWQgYnkgTmV0c2Nh cGUgNC4wIGxpa2U6CisgICAgICAgICAgIHRlbG5ldDp0ZWxuZXQgb3IgdGVsbmV0Ojpob3N0Lgor ICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIFJFUExBQ0UgVEhJUyBDT0RFIFdJ VEggdXJscGFyc2UoKSBidXQgbm90IG9uIHRoZSBkYXkgb2YgdGhlCisgICAgICAgICAqIEMtS2Vy bWl0IDguMCBSRUxFQVNFLgorICAgICAgICAgKi8KKworICAgICAgICBpZiAoKnAgPT0gJzonKSAg ICAgICAgICAgICAgICAgIC8qIGEgc2Vjb25kIGNvbG9uICovCisgICAgICAgICAgKnArKyA9ICdc MCc7ICAgICAgICAgICAgICAgICAgLyogZ2V0IHJpZCBvZiB0aGF0IG9uZSB0b28gKi8KKyAgICAg ICAgd2hpbGUgKCpwID09ICcvJykgKnArKyA9ICdcMCc7ICAvKiBhbmQgc2xhc2hlcyAqLworICAg ICAgICB4ID0gc3RybGVuKHApOyAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiByZW1haW5k ZXIgKi8KKyAgICAgICAgaWYgKHBbeC0xXSA9PSAnLycpICAgICAgICAgICAgICAvKiBJZiB0aGVy ZSBpcyBhIHRyYWlsaW5nIHNsYXNoICovCisgICAgICAgICAgcFt4LTFdID0gJ1wwJzsgICAgICAg ICAgICAgICAgLyogcmVtb3ZlIGl0LiAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIG5h bWVjb3B5IGFmdGVyIHN0cmlwcGluZyIsbmFtZWNvcHksMCk7CisgICAgICAgIGRlYnVnKEYxMTAs Im5ldG9wZW4gcCBhZnRlciBzdHJpcHBpbmciLHAsMCk7CisgICAgICAgIHNlcnZpY2UgPSBnZXRz ZXJ2YnluYW1lKG5hbWVjb3B5LCJ0Y3AiKTsKKyAgICAgICAgaWYgKHNlcnZpY2UgfHwKKyNpZmRl ZiBSTE9HQ09ERQorICAgICAgICAgICAgIWNrc3RyY21wKCJybG9naW4iLG5hbWVjb3B5LE5BTUVD UFlMLDApIHx8CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAg ICAgICFja3N0cmNtcCgidGVsbmV0cyIsbmFtZWNvcHksTkFNRUNQWUwsMCkgfHwKKyNlbmRpZiAv KiBDS19TU0wgKi8KKyAgICAgICAgICAgICFja3N0cmNtcCgiaWtzZCIsbmFtZWNvcHksTkFNRUNQ WUwsMCkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgY2hhciB0ZW1waG9zdFsyNTZdLCB0 ZW1wc2VydmljZVs4MF0sIHRlbXBwYXRoWzI1Nl07CisgICAgICAgICAgICBjaGFyICogcSA9IHAs ICpyID0gcCwgKncgPSBwOworICAgICAgICAgICAgaW50IHVpZGZvdW5kPTA7CisgICAgICAgICAg ICBleHRlcm4gY2hhciBwd2J1ZltdOworICAgICAgICAgICAgZXh0ZXJuIGludCBwd2ZsZywgcHdj cnlwdDsKKworICAgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0RFRkFVTFQpCisgICAgICAg ICAgICAgIHNldG5wcm90byhuYW1lY29weSk7CisKKyAgICAgICAgICAgIC8qIENoZWNrIGZvciB1 c2VyaWQgYW5kIHBvc3NpYmx5IHBhc3N3b3JkICovCisgICAgICAgICAgICB3aGlsZSAoKnAgIT0g J1wwJyAmJiAqcCAhPSAnQCcpCisgICAgICAgICAgICAgICAgcCsrOyAvKiBsb29rIGZvciBAICov CisgICAgICAgICAgICBpZiAoKnAgPT0gJ0AnKSB7CisgICAgICAgICAgICAgICAgLyogZm91bmQg dXNlcm5hbWUgYW5kIHBlcmhhcHMgcGFzc3dvcmQgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJuZXRvcGVuIG5hbWVjb3B5IGZvdW5kIEAiLCIiLDApOworICAgICAgICAgICAgICAgICpw ID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgd2hpbGUgKCp3 ICE9ICdcMCcgJiYgKncgIT0gJzonKQorICAgICAgICAgICAgICAgICAgdysrOworICAgICAgICAg ICAgICAgIGlmICgqdyA9PSAnOicpCisgICAgICAgICAgICAgICAgICAqdysrID0gJ1wwJzsKKyAg ICAgICAgICAgICAgICAvKiByIG5vdyBwb2ludHMgdG8gdXNlcm5hbWUsIHNhdmUgaXQgYW5kIHRo ZSBwYXNzd29yZCAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gbmFtZWNv cHkgdXNlcm5hbWUiLHIsMCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBu YW1lY29weSBwYXNzd29yZCIsdywwKTsKKyAgICAgICAgICAgICAgICB1aWRmb3VuZD0xOworICAg ICAgICAgICAgICAgIGlmICggc3RyY21wKHVpZGJ1ZixyKSB8fCAqdyApCisgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNweShwd2J1Zix3LFBXQlVGTCsxKTsKKyAgICAgICAgICAgICAgICBja3N0 cm5jcHkodWlkYnVmLHIsVUlEQlVGTEVOKTsKKyAgICAgICAgICAgICAgICBwd2ZsZyA9IDE7Cisg ICAgICAgICAgICAgICAgcHdjcnlwdCA9IDA7CisgICAgICAgICAgICAgICAgcSA9IHA7ICAgICAg ICAgICAgICAgICAgLyogSG9zdCBhZnRlciB1c2VyIGFuZCBwd2QgKi8KKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgcCA9IHE7ICAgICAgICAgICAgICAgICAgLyogTm8gdXNl cm5hbWUgb3IgcGFzc3dvcmQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIE5vdyB3 ZSBtdXN0IGxvb2sgZm9yIHRoZSBvcHRpb25hbCBwb3J0LiAqLworICAgICAgICAgICAgZGVidWco RjExMCwibmV0b3BlbiB4IHAiLHAsMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVu IHggcSIscSwwKTsKKworICAgICAgICAgICAgLyogTG9vayBmb3IgdGhlIHBvcnQvc2VydmljZSBv ciBhIGZpbGUvZGlyZWN0b3J5IHBhdGggKi8KKyAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAn ICYmICpwICE9ICc6JyAmJiAqcCAhPSAnLycpCisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAg ICAgIGlmICgqcCA9PSAnOicpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVu IGZvdW5kIHBvcnQiLHEsMCk7CisgICAgICAgICAgICAgICAgKnArKyA9ICdcMCc7ICAgICAgICAg ICAgLyogRm91bmQgYSBwb3J0IG5hbWUgb3IgbnVtYmVyICovCisgICAgICAgICAgICAgICAgciA9 IHA7CisKKyAgICAgICAgICAgICAgICAvKiBMb29rIGZvciB0aGUgZW5kIG9mIHBvcnQvc2Vydmlj ZSBvciBhIGZpbGUvZGlyZWN0b3J5IHBhdGggKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKnAg IT0gJ1wwJyAmJiAqcCAhPSAnLycpCisgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAg ICAgICAgICBpZiAoKnAgPT0gJy8nKQorICAgICAgICAgICAgICAgICAgICAqcCsrID0gJ1wwJzsK KworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gcG9ydCIsciwwKTsKKyAgICAg ICAgICAgICAgICBja3N0cm5jcHkodGVtcHNlcnZpY2Usciw4MCk7CisgICAgICAgICAgICAgICAg Y2tzdHJuY3B5KHRlbXBob3N0LHEsMjU2KTsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkodGVt cHBhdGgscCwyNTYpOworICAgICAgICAgICAgICAgIGNrc3RybmNweShuYW1lY29weSx0ZW1waG9z dCxOQU1FQ1BZTCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiB0ZW1wc2Vy dmljZSIsdGVtcHNlcnZpY2UsMCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0b3Bl biB0ZW1waG9zdCIsdGVtcGhvc3QsMCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0 b3BlbiB0ZW1wcGF0aCIsdGVtcHBhdGgsMCk7CisKKyAgICAgICAgICAgICAgICAvKiBtb3ZlIHBv cnQvc2VydmljZSB0byBhIGJ1ZmZlciB0aGF0IHdvbid0IGdvIGF3YXkgKi8KKyAgICAgICAgICAg ICAgICB4ID0gc3RybGVuKG5hbWVjb3B5KTsKKyAgICAgICAgICAgICAgICBwID0gbmFtZWNvcHkg KyB4ICsgMTsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkocCwgdGVtcHNlcnZpY2UsIE5BTUVD UFlMIC0geCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEhhbmRs ZSBhIHBhdGggaWYgd2UgZm91bmQgb25lICovCisgICAgICAgICAgICAgICAgaWYgKCpwID09ICcv JykKKyAgICAgICAgICAgICAgICAgICAgKnArKyA9ICdcMCc7CisgICAgICAgICAgICAgICAgY2tz dHJuY3B5KHRlbXBwYXRoLHAsMjU2KTsKKworICAgICAgICAgICAgICAgIC8qIFdlIGRpZG4ndCBm aW5kIGFub3RoZXIgcG9ydCwgYnV0IGlmIHEgaXMgYSBzZXJ2aWNlICovCisgICAgICAgICAgICAg ICAgLyogdGhlbiBhc3N1bWUgdGhhdCBuYW1lY29weSBpcyBhY3R1YWxseSBhIGhvc3QuICAgICAg Ki8KKyAgICAgICAgICAgICAgICBpZiAoZ2V0c2VydmJ5bmFtZShxLCJ0Y3AiKSkgeworICAgICAg ICAgICAgICAgICAgICBwID0gcTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIFJM T0dDT0RFCisgICAgICAgICAgICAgICAgICAgIC8qIHJsb2dpbiBpcyBub3QgYSB2YWxpZCBzZXJ2 aWNlICovCisgICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoInJsb2dpbiIsbmFtZWNv cHksNiwwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5LCJs b2dpbiIsTkFNRUNQWUwpOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogUkxPR0NP REUgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogaWtzZCBpcyBub3QgYSB2YWxpZCBzZXJ2aWNl ICovCisgICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAoImlrc2QiLG5hbWVjb3B5LDYs MCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShuYW1lY29weSwia2VybWl0 IixOQU1FQ1BZTCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg LyogUmVjb25zdHJ1Y3QgbmFtZWNvcHkgKi8KKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5 KHRlbXBzZXJ2aWNlLG5hbWVjb3B5LDgwKTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5 KHRlbXBob3N0LHEsMjU2KTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5 LHRlbXBob3N0LE5BTUVDUFlMKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwibmV0 b3BlbiB0ZW1wc2VydmljZSIsdGVtcHNlcnZpY2UsMCk7CisgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsIm5ldG9wZW4gdGVtcGhvc3QiLHRlbXBob3N0LDApOworICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJuZXRvcGVuIHRlbXBwYXRoIix0ZW1wcGF0aCwwKTsKKworICAgICAg ICAgICAgICAgICAgICAvKiBtb3ZlIHBvcnQvc2VydmljZSB0byBhIGJ1ZmZlciB0aGF0IHdvbid0 IGdvIGF3YXkgKi8KKyAgICAgICAgICAgICAgICAgICAgeCA9IHN0cmxlbihuYW1lY29weSk7Cisg ICAgICAgICAgICAgICAgICAgIHAgPSBuYW1lY29weSArIHggKyAxOworICAgICAgICAgICAgICAg ICAgICBja3N0cm5jcHkocCwgdGVtcHNlcnZpY2UsIE5BTUVDUFlMIC0geCAtIDEpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIm5ldG9w ZW4gVVJMIHJlc3VsdDogaG9zdCIsbmFtZWNvcHksMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJuZXRvcGVuIFVSTCByZXN1bHQ6IHNlcnZpY2UiLHAsMCk7CisgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJuZXRvcGVuIFVSTCByZXN1bHQ6IHBhdGgiLHRlbXBwYXRoLDApOworCisjaWZkZWYgSUtT X0dFVAorICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBzZXQgYSBwYXRoIHNwZWNpZmllZCwgd2Ug bmVlZCB0byB0cnkgdG8gR0VUIGl0ICovCisgICAgICAgICAgICAvKiBCdXQgd2UgaGF2ZSBhbm90 aGVyIHByb2JsZW0sIHdlIGhhdmUgdG8gbG9naW4gZmlyc3QuICBIb3cgKi8KKyAgICAgICAgICAg IC8qIGRvIHdlIHNwZWNpZnkgdGhhdCBhIGxvZ2luIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIEdF VD8gICAqLworICAgICAgICAgICAgLyogVGhlIHVzZXIncyBuYW1lIGlmIHNwZWNpZmllZCBpcyBp biAndXNlcmlkJyBhbmQgdGhlICAgICAgICovCisgICAgICAgICAgICAvKiBwYXNzd29yZCBpZiBh bnkgaXMgaW4gJ3B3YnVmJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgIGlmICggdGVtcHBhdGhbMF0gKSB7CisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBhY3Rp b247CisgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBjbWFyZzsKKworICAgICAgICAgICAg ICAgIGlmICggIXVpZGZvdW5kICkgeworICAgICAgICAgICAgICAgICAgICAvKiBJZiBubyB1c2Vy aWQgd2FzIHNwZWNpZmllZCBhcyBwYXJ0IG9mIHRoZSBVUkwgYnV0CisgICAgICAgICAgICAgICAg ICAgICAqIGEgcGF0aCB3YXMgc3BlY2lmaWVkLCB0aGVuIHdlCisgICAgICAgICAgICAgICAgICAg ICAqIHNldCB0aGUgdXNlciBuYW1lIHRvIGFub255bW91cyBhbmQgdGhlIHBhc3N3b3JkCisgICAg ICAgICAgICAgICAgICAgICAqIHRvIHRoZSBjdXJyZW50IHVzZXJpZC4KKyAgICAgICAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShwd2J1Zix1aWRidWYsUFdC VUZMKTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHB3YnVmLCJAIixQV0JVRkwpOwor ICAgICAgICAgICAgICAgICAgICBwd2ZsZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIHB3Y3J5 cHQgPSAwOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLCJhbm9ueW1vdXMi LFVJREJVRkxFTik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyoKKyAg ICAgICAgICAgICAgICAgKiBJZiBhIGZpbGUgcGF0aCB3YXMgc3BlY2lmaWVkIHdlIHBlcmZvcm0g dGhlIEdFVAorICAgICAgICAgICAgICAgICAqIG9wZXJhdGlvbiBhbmQgdGhlbiB0ZXJtaW5hdGUg dGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgKiBJ ZiBhIGRpcmVjdG9yeSB3YXMgZ2l2ZW4gaW5zdGVhZCBvZiBhIGZpbGUsIHRoZW4KKyAgICAgICAg ICAgICAgICAgKiB3ZSBzaG91bGQgUkVNT1RFIENEIHRvIHRoZSBkaXJlY3RvcnkgYW5kIGxpc3Qg aXRzCisgICAgICAgICAgICAgICAgICogY29udGVudHMuICBCdXQgaG93IGRvIHdlIHRlbGwgdGhl IGRpZmZlcmVuY2U/CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbWFrZXN0 cigmY21hcmcsdGVtcHBhdGgpOworICAgICAgICAgICAgICAgIGFjdGlvbiA9ICdyJzsKKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBJS1NfR0VUICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19V UkwgKi8KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndp c2UgdXNlIHRlbG5ldCAqLworICAgICAgICBwID0gInRlbG5ldCI7CisgICAgfQorLyoKKyAgQnkg dGhlIHRpbWUgd2UgZ2V0IGhlcmUsIG5hbWVjb3B5W10gc2hvdWxkIGhvbGQgdGhlIG51bGwtdGVy bWluYXRlZAorICBob3N0bmFtZSBvciBhZGRyZXNzLCBhbmQgcCBzaG91bGQgcG9pbnQgdG8gdGhl IHNlcnZpY2UgbmFtZSBvciBudW1iZXIuCisqLworICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gaG9z dCIsbmFtZWNvcHksMCk7CisgICAgZGVidWcoRjExMCwibmV0b3BlbiBzZXJ2aWNlIHJlcXVlc3Rl ZCIscCwwKTsKKworICAgLyogVXNlIHRoZSBzZXJ2aWNlIHBvcnQgdG8gc2V0IHRoZSBkZWZhdWx0 IHByb3RvY29sIHR5cGUgaWYgbmVjZXNzYXJ5ICovCisgICAgaWYgKHR0bnByb3RvID09IE5QX0RF RkFVTFQpCisgICAgICAgc2V0bnByb3RvKHApOworCisgICAgY2tzdHJuY3B5KG5hbWVjb3B5Mixu YW1lY29weSxOQU1FQ1BZTCk7CisgICAgc2VydmljZSA9IGNrZ2V0c2VydmljZShuYW1lY29weSxw LG5hbWVjb3B5LE5BTUVDUFlMKTsKKyAgICBpZiAoIXNlcnZpY2UpIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICJDYW4ndCBmaW5kIHBvcnQgZm9yIHNlcnZpY2UgJXNcbiIsIHApOworI2lmZGVm IFRHVk9SV0lOCisgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY2FuJ3QgZ2V0IHNlcnZpY2Ui LCIiLHNvY2tldF9lcnJubyk7CisjZWxzZQorICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNh bid0IGdldCBzZXJ2aWNlIiwiIixlcnJubyk7CisjZW5kaWYgLyogVEdWT1JXSU4gKi8KKyAgICAg ICAgZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgIC8qIChyYXRoZXIgdGhhbiBtaXNsZWFkKSAq LworICAgICAgICByZXR1cm4oLTEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghY2tzdHJj bXAobmFtZWNvcHksbmFtZWNvcHkyLC0xLDApKQorCSAgbmFtZWNvcHkyWzBdID0gJ1wwJzsKKyAg ICAgICAgY2tzdHJuY3B5KHN2Y2J1Zixja3VpdG9hKG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpLHNp emVvZihzdmNidWYpKTsKKyAgICAgICAgZGVidWcoRjExMCwibmV0b3BlbiBzZXJ2aWNlIG9rIixz dmNidWYsMCk7CisgICAgfQorCisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAoc2VydmljZSAmJiAh c3RyY21wKCJsb2dpbiIscCkgJiYgc2VydmljZS0+c19wb3J0ICE9IGh0b25zKDUxMykpIHsKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIiAgV2FybmluZzogbG9naW4g c2VydmljZSBvbiBwb3J0ICVkIGluc3RlYWQgb2YgcG9ydCA1MTNcbiIsCisgICAgICAgICAgICAg ICAgIG50b2hzKHNlcnZpY2UtPnNfcG9ydCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIiAgRWRpdCBTRVJWSUNFUyBmaWxlIGlmIFJMT0dJTiBmYWlscyB0byBj b25uZWN0LlxuIik7CisgICAgICAgIGRlYnVnKEYxMDEsInRjcHNydl9vcGVuIGxvZ2luIG9uIHBv cnQiLCIiLG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09E RSAqLworCisjaWZuZGVmIE5PSFRUUAorICAgLyogRm9yIEhUVFAgY29ubmVjdGlvbnMgd2UgbXVz dCBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgaG9zdG5hbWUgYW5kICovCisgICAvKiBzZXJ2aWNlIHJl cXVlc3RlZCBzbyB3ZSBjYW4gaW5jbHVkZSB0aGVtIGluIHRoZSBIb3N0IGhlYWRlci4gICAgKi8K KyAgICBja21ha21zZyhodHRwX2hvc3RfcG9ydCxzaXplb2YoaHR0cF9ob3N0X3BvcnQpLG5hbWVj b3B5LCI6IiwKKyAgICAgICAgICAgICAgY2tpdG9hKG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpLE5V TEwpOworCisgICAgLyogJ25hbWVjb3B5JyBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgaG9zdCB0 byB3aGljaCB3ZSB3YW50IHRvIGNvbm5lY3QgKi8KKyAgICAvKiAnc3ZjYnVmJyAgIGNvbnRhaW5z IHRoZSBzZXJ2aWNlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAg IC8qICdzZXJ2aWNlLT5zX3BvcnQnIGNvbnRhaW5zIHRoZSBwb3J0IG51bWJlciBpbiBuZXR3b3Jr IGJ5dGUgb3JkZXIgICAgICovCisKKyAgICAvKiBJZiB3ZSBhcmUgdXNpbmcgYW4gaHR0cCBwcm94 eSwgd2UgbmVlZCB0byBjcmVhdGUgYSBidWZmZXIgY29udGFpbmluZyAqLworICAgIC8qICAgaG9z dG5hbWU6cG9ydC1udW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCisgICAgLyogdG8gcGFzcyB0byB0aGUgaHR0cF9jb25uZWN0KCkgZnVuY3Rpb24u ICBUaGVuIHdlIG5lZWQgdG8gcmVwbGFjZSAgICAgKi8KKyAgICAvKiAnbmFtZWNvcHknIHdpdGgg dGhlIG5hbWUgb2YgdGhlIHByb3h5IHNlcnZlciBhbmQgdGhlIHNlcnZpY2UtPnNfcG9ydCAqLwor ICAgIC8qIHdpdGggdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwcm94eSAoZGVmYXVsdCBwb3J0IDgw KS4gICAgICAgICAgICAgICAgICovCisKKyAgICBpZiAoIHRjcF9odHRwX3Byb3h5ICkgeworICAg ICAgICBja21ha21zZyhwcm94eWNvcHksc2l6ZW9mKHByb3h5Y29weSksbmFtZWNvcHksIjoiLAor ICAgICAgICAgICAgICAgICBja3VpdG9hKG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpLE5VTEwpOwor ICAgICAgICBja3N0cm5jcHkobmFtZWNvcHksdGNwX2h0dHBfcHJveHksTkFNRUNQWUwpOworCisg ICAgICAgIHAgPSBuYW1lY29weTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhcyBhIHNlcnZp Y2UgcmVxdWVzdGVkPyAqLworICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOicp IHArKzsgLyogTG9vayBmb3IgY29sb24gKi8KKyAgICAgICAgaWYgKCpwID09ICc6JykgeyAgICAg ICAgICAgICAgICAgICAgLyogSGF2ZSBhIGNvbG9uICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJuZXRvcGVuIG5hbWUgaGFzIGNvbG9uIixuYW1lY29weSwwKTsKKyAgICAgICAgICAgICpwKysg PSAnXDAnOyAgICAgICAgICAgICAgICAgICAgLyogR2V0IHNlcnZpY2UgbmFtZSBvciBudW1iZXIg Ki8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0cmNweSgrK3AsImh0dHAiKTsKKyAg ICAgICAgfQorCisgICAgICAgIHNlcnZpY2UgPSBja2dldHNlcnZpY2UobmFtZWNvcHkscCxuYW1l Y29weSxOQU1FQ1BZTCk7CisgICAgICAgIGlmICghc2VydmljZSkgeworICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJDYW4ndCBmaW5kIHBvcnQgZm9yIHNlcnZpY2UgJXNcbiIsIHApOworI2lm ZGVmIFRHVk9SV0lOCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNhbid0IGdldCBz ZXJ2aWNlIGZvciBwcm94eSIsIiIsc29ja2V0X2Vycm5vKTsKKyNlbHNlCisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJuZXRvcGVuIGNhbid0IGdldCBzZXJ2aWNlIGZvciBwcm94eSIsIiIsZXJybm8p OworI2VuZGlmIC8qIFRHVk9SV0lOICovCisgICAgICAgICAgICBlcnJubyA9IDA7ICAgICAgICAg ICAgICAgICAgLyogKHJhdGhlciB0aGFuIG1pc2xlYWQpICovCisgICAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICB9CisgICAgICAgIGNrc3RybmNweShwLGNrdWl0b2EobnRvaHMoc2Vydmlj ZS0+c19wb3J0KSksTkFNRUNQWUwtKHAtbmFtZWNvcHkpKTsKKworICAgIH0KKyNlbmRpZiAvKiBO T0hUVFAgKi8KKworICAgIC8qIFNldCB1cCBzb2NrZXQgc3RydWN0dXJlIGFuZCBnZXQgaG9zdCBh ZGRyZXNzICovCisKKyAgICBiemVybygoY2hhciAqKSZyX2FkZHIsIHNpemVvZihyX2FkZHIpKTsK KyAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGJ6ZXJvIG9rIiwiIiwwKTsKKy8qCisgICBOT1RFOiBP cmlnaW5hbGx5IHRoZSBpbmV0X2FkZHIoKSBjaGVjayB3YXMgI2lmZGVmIE5ULCBidXQgaXMgZW5h YmxlZCBmb3IKKyAgIGFsbCBhcyBvZiAyMCBTZXAgOTcsIHRvIGFsbG93IHBlb3BsZSB0byAic2V0 IGhvc3QiIHRvIGEgc3BlY2lmaWMgbnVtZXJpYyBJUAorICAgYWRkcmVzcyB3aXRob3V0IGdvaW5n IHRocm91Z2ggdGhlIG11bHRpaG9tZWQgaG9zdCBzZXF1ZW5jZSBhbmQgd2luZGluZyB1cAorICAg YXQgYSBkaWZmZXJlbnQgcGxhY2UgdGhhbiB0aGUgb25lIHJlcXVlc3RlZC4KKyovCisjaWZkZWYg SU5BRERSX05PTkUKKyAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIElOQUREUl9OT05FIGRlZmluZWQi LCIiLElOQUREUl9OT05FKTsKKyNlbHNlIC8qIElOQUREUl9OT05FICovCisgICAgZGVidWcoRjEw MCwibmV0b3BlbiBJTkFERFJfTk9ORSBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogSU5B RERSX05PTkUgKi8KKyNpZmRlZiBJTkFERFJYCisgICAgZGVidWcoRjEwMCwibmV0b3BlbiBJTkFE RFJYIGRlZmluZWQiLCIiLDApOworI2Vsc2UgLyogSU5BRERSWCAqLworICAgIGRlYnVnKEYxMDAs Im5ldG9wZW4gSU5BRERSWCBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogSU5BRERSWCAq LworCisjaWZuZGVmIE5PTUhIT1NUCisjaWZkZWYgSU5BRERSWAorICAgIGlheCA9IGluZXRfYWRk cihuYW1lY29weSk7CisgICAgZGVidWcoRjExMSwibmV0b3BlbiBpbmV0X2FkZHIiLG5hbWVjb3B5 LGlheC5zX2FkZHIpOworI2Vsc2UgLyogSU5BRERSWCAqLworI2lmZGVmIElOQUREUl9OT05FCisg ICAgaWF4LnNfYWRkciA9IGluZXRfYWRkcihuYW1lY29weSk7CisgICAgZGVidWcoRjExMSwibmV0 b3BlbiBpbmV0X2FkZHIiLG5hbWVjb3B5LGlheC5zX2FkZHIpOworI2Vsc2UgLyogSU5BRERSX05P TkUgKi8KKyNpZmRlZiBTT0xBUklTCisgICAgLyogSW4gU29sYXJpcyBpbmV0X2FkZHIoKSBpcyBv ZiB0eXBlIGluX2FkZHJfdCB3aGljaCBpcyB1aW50MzJfdCAqLworICAgIC8qICh1bnNpZ25lZCkg eWV0IGl0IHJldHVybnMgLTEgKHNpZ25lZCkgb24gZmFpbHVyZS4gKi8KKyAgICAvKiBJdCBtYWtl cyBhIGRpZmZlcmVuY2UgaW4gNjQtYml0IGJ1aWxkcy4gKi8KKyAgICByY19pbmV0X2FkZHIgPSBp bmV0X2FkZHIobmFtZWNvcHkpOwkvKiBBc3NpZ24gcmV0dXJuIGNvZGUgdG8gYW4gaW50ICovCisg ICAgaWF4ID0gKHVuc2lnbmVkKSByY19pbmV0X2FkZHI7CS8qIGFuZCBmcm9tIHRoZXJlIHRvIHdo YXRldmVyLi4gKi8KKyNlbHNlCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgaWF4ID0gKHVuc2ln bmVkIGludCkgaW5ldF9hZGRyKG5hbWVjb3B5KTsKKyNlbHNlCisgICAgaWF4ID0gLTFMOworI2Vu ZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogU09MQVJJUyAqLworICAgIGRlYnVnKEYx MTEsIm5ldG9wZW4gcmNfaW5ldF9hZGRyIixuYW1lY29weSxyY19pbmV0X2FkZHIpOworICAgIGRl YnVnKEYxMTEsIm5ldG9wZW4gaW5ldF9hZGRyIixuYW1lY29weSxpYXgpOworI2VuZGlmIC8qIElO QUREUl9OT05FICovCisjZW5kaWYgLyogSU5BRERSWCAqLworCisgICAgZG5zID0gMDsKKyAgICBp ZiAoCisvKiBUaGlzIG1pZ2h0IGdpdmUgd2FybmluZ3Mgb24gNjQtYml0IHBsYXRmb3JtcyBidXQg dGhleSBzaG91bGQgYmUgaGFybWxlc3MgKi8KKy8qIGJlY2F1c2UgSU5BRERSX05PTkUgc2hvdWxk IGJlIGFsbCAxJ3MgYW55d2F5LCB0aHVzIHRoZSBPUiBwYXJ0IGlzICovCisvKiBwcm9iYWJseSBz dXBlcmZsdW91cyAtLSBub3Qgc3VyZSB3aHkgaXQncyBldmVuIHRoZXJlLCBtYXliZSBpdCBzaG91 bGQgYmUgKi8KKy8qIHJlbW92ZWQuICovCisjaWZkZWYgU09MQVJJUworCXJjX2luZXRfYWRkciA9 PSAtMQorI2Vsc2UKKyNpZmRlZiBJTkFERFJfTk9ORQorICAgICAgICBpYXguc19hZGRyID09IElO QUREUl9OT05FIC8qIHx8IGlheC5zX2FkZHIgPT0gKHVuc2lnbmVkIGxvbmcpIC0xTCAqLworI2Vs c2UgLyogSU5BRERSX05PTkUgKi8KKyAgICAgICAgaWF4IDwgMAorI2VuZGlmIC8qIElOQUREUl9O T05FICovCisjZW5kaWYgLyogU09MQVJJUyAqLworICAgICAgICApIHsKKyAgICAgICAgaWYgKCFx dWlldCkgeworICAgICAgICAgICAgcHJpbnRmKCIgRE5TIExvb2t1cC4uLiAiKTsKKyAgICAgICAg ICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICB9CisgICAgICAgIGlmICgoaG9zdCA9IGdldGhv c3RieW5hbWUobmFtZWNvcHkpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJu ZXRvcGVuIGdldGhvc3RieW5hbWUgIT0gTlVMTCIsbmFtZWNvcHksMCk7CisgICAgICAgICAgICBo b3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7CisgICAgICAgICAgICBkbnMgPSAxOyAgICAgICAg ICAgICAgICAgICAgLyogUmVtZW1iZXIgd2UgcGVyZm9ybWVkIGRucyBsb29rdXAgKi8KKyAgICAg ICAgICAgIHJfYWRkci5zaW5fZmFtaWx5ID0gaG9zdC0+aF9hZGRydHlwZTsKKyAgICAgICAgICAg IGlmICh0Y3BfcmRucyAmJiBob3N0LT5oX25hbWUgJiYgaG9zdC0+aF9uYW1lWzBdCisjaWZuZGVm IE5PSFRUUAorICAgICAgICAgICAgICAgICAmJiAodGNwX2h0dHBfcHJveHkgPT0gTlVMTCkKKyNl bmRpZiAvKiBOT0hUVFAgKi8KKwkJKSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAg IGNrc3RybmNweSh4eG5hbWUsaG9zdC0+aF9uYW1lLFhYTkFNRUxFTik7CisJCWRlYnVnKEYxMTAs Im5ldG9wZW4geHhuYW1lWzFdIix4eG5hbWUsMCk7CisgICAgICAgICAgICAgICAgaWYgKChYWE5B TUVMRU4gLSAoaW50KXN0cmxlbihuYW1lKSkgPiAoKGludClzdHJsZW4oc3ZjYnVmKSsxKSl7Cisg ICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh4eG5hbWUsIjoiLFhYTkFNRUxFTiAtIChpbnQp c3RybGVuKHh4bmFtZSkpOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoeHhuYW1lLHN2 Y2J1ZixYWE5BTUVMRU4gLSAoaW50KXN0cmxlbih4eG5hbWUpKTsKKwkJICAgIGRlYnVnKEYxMTAs Im5ldG9wZW4geHhuYW1lWzJdIix4eG5hbWUsMCk7CisgICAgICAgICAgICAgICAgfQorCQluYW1l ID0gKGNoYXIgKil4eG5hbWU7CisjZWxzZQorICAgICAgICAgICAgICAgIGNrc3RybmNweShuYW1l LGhvc3QtPmhfbmFtZSw4MCk7ICAvKiBCYWQgQmFkIEJhZCAqLworICAgICAgICAgICAgICAgIGlm ICggKDgwLXN0cmxlbihuYW1lKSkgPiAoc3RybGVuKHN2Y2J1ZikrMSkgKSB7CisgICAgICAgICAg ICAgICAgICAgIGNrc3RybmNhdChuYW1lLCI6Iiw4MC1zdHJsZW4obmFtZSkpOworICAgICAgICAg ICAgICAgICAgICBja3N0cm5jYXQobmFtZSxzdmNidWYsODAtc3RybGVuKG5hbWUpKTsKKyAgICAg ICAgICAgICAgICB9CisjZW5kaWYJLyogQ09NTUVOVCAqLworICAgICAgICAgICAgfQorCSAgICBk ZWJ1ZyhGMTEwLCJuZXRvcGVuIG5hbWUgYWZ0ZXIgbG9va3VwIixuYW1lLDApOworCisjaWZkZWYg SEFERFJMSVNUCisjaWZkZWYgaF9hZGRyCisgICAgICAgICAgICAvKiBUaGlzIGlzIGZvciB0cnlp bmcgbXVsdGlwbGUgSVAgYWRkcmVzc2VzIC0gc2VlIDxuZXRkYi5oPiAqLworICAgICAgICAgICAg aWYgKCEoaG9zdC0+aF9hZGRyX2xpc3QpKQorICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAg ICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyX2xpc3RbMF0sCisgICAgICAgICAgICAgICAgICAo Y2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyLAorICAgICAgICAgICAgICAgICAgaG9zdC0+aF9sZW5n dGgKKyAgICAgICAgICAgICAgICAgICk7CisjZWxzZQorICAgICAgICAgICAgYmNvcHkoaG9zdC0+ aF9hZGRyLCAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyLCBob3N0LT5oX2xlbmd0aCk7CisjZW5k aWYgLyogaF9hZGRyICovCisjZWxzZSAgLyogSEFERFJMSVNUICovCisjaWZkZWYgSFBVWDYKKwkg ICAgcl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9ICh1X2xvbmcpaG9zdC0+aF9hZGRyOworI2Vsc2Ug IC8qIEhQVVg2ICovCisgICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90KSZy X2FkZHIuc2luX2FkZHIsIGhvc3QtPmhfbGVuZ3RoKTsKKyNlbmRpZgkvKiBIUFVYNiAqLworI2Vu ZGlmIC8qIEhBRERSTElTVCAqLworCisjaWZuZGVmIEhQVVg2CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJCQ09QWSIsImhvc3QtPmhfbGVuZ3RoIixob3N0LT5oX2xlbmd0aCk7CisjZW5kaWYJLyog SFBVWDYgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT01ISE9TVCAqLworCisgICAg ZGVidWcoRjEwMSwibmV0b3BlbiBkbnMiLCIiLGRucyk7CisKKyAgICBpZiAoIWRucykgeworI2lm ZGVmIElOQUREUlgKKy8qIGluZXRfYWRkcigpIGlzIG9mIHR5cGUgc3RydWN0IGluX2FkZHIgKi8K KyAgICAgICAgc3RydWN0IGluX2FkZHIgaW5hOworICAgICAgICB1bnNpZ25lZCBsb25nIHV1Owor ICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGdldGhvc3RieW5hbWUgPT0gTlVMTDogSU5BRERS WCIsIiIsMCk7CisgICAgICAgIGluYSA9IGluZXRfYWRkcihuYW1lY29weSk7CisgICAgICAgIHV1 ID0gKih1bnNpZ25lZCBpbnQgKikmaW5hOworI2Vsc2UgLyogTm90IElOQUREUlggKi8KKy8qIGlu ZXRfYWRkcigpIGlzIHVuc2lnbmVkIGxvbmcgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyB1dTsK KyAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbiBnZXRob3N0YnluYW1lID09IE5VTEw6IE5vdCBJ TkFERFJYIiwiIiwwKTsKKyAgICAgICAgdXUgPSBpbmV0X2FkZHIobmFtZWNvcHkpOworI2VuZGlm IC8qIElOQUREUlggKi8KKyAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiB1dSIsIiIsdXUpOwor ICAgICAgICBpZiAoCisjaWZkZWYgSU5BRERSX05PTkUKKyAgICAgICAgICAgICEodXUgPT0gSU5B RERSX05PTkUgfHwgdXUgPT0gKHVuc2lnbmVkIGludCkgLTFMKQorI2Vsc2UgICAvKiBJTkFERFJf Tk9ORSAqLworICAgICAgICAgICAgdXUgIT0gKCh1bnNpZ25lZCBsb25nKS0xKQorI2VuZGlmIC8q IElOQUREUl9OT05FICovCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIHJfYWRkci5zaW5f YWRkci5zX2FkZHIgPSB1dTsKKyAgICAgICAgICAgIHJfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5F VDsKKyAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBWTVMKKyAgICAgICAgICAgIGZwcmludGYoc3Rk b3V0LCAiXHJcbiIpOyAgICAvKiBjb21wbGV0ZSBhbnkgcHJldmlvdXMgbWVzc2FnZSAqLworI2Vu ZGlmIC8qIFZNUyAqLworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBnZXQgYWRk cmVzcyBmb3IgJXNcbiIsIG5hbWVjb3B5KTsKKyNpZmRlZiBUR1ZPUldJTgorICAgICAgICAgICAg ZGVidWcoRjEwMSwibmV0b3BlbiBjYW4ndCBnZXQgYWRkcmVzcyIsIiIsc29ja2V0X2Vycm5vKTsK KyNlbHNlCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGNhbid0IGdldCBhZGRyZXNz IiwiIixlcnJubyk7CisjZW5kaWYgLyogVEdWT1JXSU4gKi8KKyAgICAgICAgICAgIGVycm5vID0g MDsgICAgICAgICAgICAgICAgICAvKiBSYXRoZXIgdGhhbiBtaXNsZWFkICovCisgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogR2V0IGEgZmlsZSBkZXNj cmlwdG9yIGZvciB0aGUgY29ubmVjdGlvbi4gKi8KKworICAgIHJfYWRkci5zaW5fcG9ydCA9IHNl cnZpY2UtPnNfcG9ydDsKKyAgICBja3N0cm5jcHkoaXBhZGRyLChjaGFyICopaW5ldF9udG9hKHJf YWRkci5zaW5fYWRkciksMjApOworICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gdHJ5aW5nIixpcGFk ZHIsMCk7CisgICAgaWYgKCFxdWlldCAmJiAqaXBhZGRyKSB7CisgICAgICAgIHByaW50ZigiIFRy eWluZyAlcy4uLiAiLCBpcGFkZHIpOworICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICB9CisK KyAgICAvKiBMb29wIHRvIHRyeSBhZGRpdGlvbmFsIElQIGFkZHJlc3NlcywgaWYgYW55LiAqLwor CisgICAgZG8geworI2lmZGVmIEVYQ0VMQU4KKyAgICAgICAgc2VuZF9zb2NrZXQuc2luX2ZhbWls eSA9IEFGX0lORVQ7CisgICAgICAgIHNlbmRfc29ja2V0LnNpbl9hZGRyLnNfYWRkciA9IDA7Cisg ICAgICAgIHNlbmRfc29ja2V0LnNpbl9wb3J0ID0gMDsKKyAgICAgICAgaWYgKCh0dHlmZCA9IHNv Y2tldChTT0NLX1NUUkVBTSwgKHN0cnVjdCBzb2NrcHJvdG8gKikwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZzZW5kX3NvY2tldCwgU09fUkVVU0VBRERSKSkgPCAwKQorI2Vsc2UgIC8q IEVYQ0VMQU4gKi8KKyNpZmRlZiBOVAorI2lmZGVmIENPTU1FTlRfWAorICAgICAgIC8qCisgICAg ICAgICBNdXN0IG1ha2Ugc3VyZSB0aGF0IGFsbCBzb2NrZXRzIGFyZSBvcGVuZWQgaW4KKyAgICAg ICAgIE5vbi1vdmVybGFwcGVkIG1vZGUgc2luY2Ugd2UgdXNlIHRoZSBzdGFuZGFyZAorICAgICAg ICAgQyBSVEwgZnVuY3Rpb25zIHRvIHJlYWQgYW5kIHdyaXRlIGRhdGEuCisgICAgICAgICBCdXQg aXQgZG9lc24ndCBzZWVtIHRvIHdvcmsgYXMgcGxhbm5lZC4KKyAgICAgICAqLworICAgICAgICAg IHsKKyAgICAgICAgICAgICAgaW50IG9wdGlvblZhbHVlID0gU09fU1lOQ0hST05PVVNfTk9OQUxF UlQ7CisgICAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KElOVkFMSURfU09DS0VULCBTT0xfU09D S0VULCBTT19PUEVOVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikg Jm9wdGlvblZhbHVlLCBzaXplb2Yob3B0aW9uVmFsdWUpKQorICAgICAgICAgICAgICAgICAgIT0g Tk9fRVJST1IpCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICB9CisjZW5k aWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIE5UICovCisKKyAgICAgICAgaWYgKCh0dHlmZCA9 IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpIDwgMCkKKyNlbmRpZiAvKiBFWENFTEFO ICovCisgICAgICAgICAgICB7CisjaWZkZWYgRVhDRUxBTgorICAgICAgICAgICAgICAgIGV4cGVy cm9yKCJUQ1Agc29ja2V0IGVycm9yIik7CisjZWxzZQorI2lmZGVmIFZNUworICAgICAgICAgICAg ICAgIGZwcmludGYoc3Rkb3V0LCAiXHJcbiIpOyAvKiBjb21wbGV0ZSBhbnkgcHJldmlvdXMgc3Rk b3V0ICovCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgVEdWT1JXSU4KKyNpZmRlZiBPTERfVFdH CisgICAgICAgICAgICAgICAgZXJybm8gPSBzb2NrZXRfZXJybm87CisjZW5kaWYgLyogT0xEX1RX RyAqLworICAgICAgICAgICAgICAgIHNvY2tldF9wZXJyb3IoIlRDUCBzb2NrZXQgZXJyb3IiKTsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIHNvY2tldCBlcnJvciIsIiIsc29j a2V0X2Vycm5vKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcGVycm9yKCJUQ1Agc29ja2V0IGVy cm9yIik7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0b3BlbiBzb2NrZXQgZXJyb3Ii LCIiLGVycm5vKTsKKyNlbmRpZiAvKiBUR1ZPUldJTiAqLworI2VuZGlmIC8qIEVYQ0VMQU4gKi8K KyAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZXJy bm8gPSAwOworCisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAvKiBOb3QgcGFydCBvZiB0aGUgUkxP R0lOIFJGQywgYnV0IHRoZSBCU0QgaW1wbGVtZW50YXRpb24gICAgICovCisgICAgICAgLyogcmVx dWlyZXMgdGhhdCB0aGUgY2xpZW50IHBvcnQgYmUgYSBwcml2aWxpZ2VkIHBvcnQgKDwxMDI0KSAq LworICAgICAgIC8qIG9uIGEgVW5peCBzeXN0ZW0gdGhpcyB3b3VsZCByZXF1aXJlIFN1cGVyVXNl ciBwZXJtaXNzaW9ucyAgKi8KKyAgICAgICAvKiB0aGVyZWJ5IHNheWluZyB0aGF0IHRoZSByb290 IG9mIHRoZSBVbml4IHN5c3RlbSBoYXMgZ2l2ZW4gICovCisgICAgICAgLyogcGVybWlzc2lvbiBm b3IgdGhpcyBjb25uZWN0aW9uIHRvIGJlIGNyZWF0ZWQgICAgICAgICAgICAgICAqLworICAgICAg IGlmIChzZXJ2aWNlLT5zX3BvcnQgPT0gaHRvbnMoKHVuc2lnbmVkIHNob3J0KVJMT0dJTl9QT1JU KSkgeworICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbHBvcnQgPSAxMDI0OyAgLyog bWF4IHJlc2VydmVkIHBvcnQgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgaW50IHNfZXJybm87 CisjZW5kaWYgLyogT1MyICovCisKKyAgICAgICAgICAgbHBvcnQtLTsgICAgICAgICAgICAgICAg ICAgICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHJldXNlIGEgcG9ydCAqLworICAgICAgICAgICBp ZiAobHBvcnQgPT0gNTEyKQorICAgICAgICAgICAgIGxwb3J0ID0gMTAyMzsKKworICAgICAgICAg ICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgICAgIGlmICh0Y3BfYWRkcmVzcykg eworI2lmZGVmIElOQUREUlgKKyAgICAgICAgICAgICAgIGluYWRkcnggPSBpbmV0X2FkZHIodGNw X2FkZHJlc3MpOworICAgICAgICAgICAgICAgc2luLnNpbl9hZGRyLnNfYWRkciA9ICoodW5zaWdu ZWQgbG9uZyAqKSZpbmFkZHJ4OworI2Vsc2UKKyAgICAgICAgICAgICAgIHNpbi5zaW5fYWRkci5z X2FkZHIgPSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOworI2VuZGlmIC8qIElOQUREUlggKi8KKyAg ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgc2luLnNpbl9hZGRyLnNfYWRkciA9IElOQURE Ul9BTlk7CisgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICBzaW4uc2luX3Bv cnQgPSBodG9ucyhscG9ydCk7CisgICAgICAgICAgICAgICBpZiAoYmluZCh0dHlmZCwgKHN0cnVj dCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKSA+PSAwKQorICAgICAgICAgICAgICAgICBi cmVhazsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgIHNfZXJybm8gPSBzb2NrZXRfZXJybm87 CisgICAgICAgICAgICAgICBpZiAoc19lcnJubyAmJiAvKiBPUzIgYmluZCBmYWlscyB3aXRoIDAs IGlmIGFscmVhZHkgaW4gdXNlICovCisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgICBzX2Vy cm5vICE9IFdTQUVBRERSSU5VU0UKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgc19lcnJubyAh PSBTT0NFQUREUklOVVNFICYmCisgICAgICAgICAgICAgICAgICAgc19lcnJubyAhPSAoU09DRUFE RFJJTlVTRSAtIFNPQ0JBU0VFUlIpCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICAgICAg ICApCisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBUR1ZPUldJTgorICAgICAgICAgICAgICAgICBp ZiAoc29ja2V0X2Vycm5vICE9IEVBRERSSU5VU0UpCisjZWxzZQorICAgICAgICAgICAgICAgICBp ZiAoZXJybm8gIT0gRUFERFJJTlVTRSkKKyNlbmRpZiAvKiBUR1ZPUldJTiAqLworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICAgICAgICAgICAgIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiXG5CaW5kIGZhaWxlZCB3aXRoIGVycm5vICVkICBmb3IgcG9y dCAlZC5cbiIsCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzX2Vy cm5vCisjZWxzZQorI2lmZGVmIFRHVk9SV0lOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzb2NrZXRfZXJybm8KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJu bworI2VuZGlmIC8qIFRHVk9SV0lOICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAsIGxwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4g YmluZCBmYWlsZWQiLCIiLHNfZXJybm8pOworI2Vsc2UKKyNpZmRlZiBUR1ZPUldJTgorICAgICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gYmluZCBmYWlsZWQiLCIiLHNvY2tl dF9lcnJubyk7CisjaWZkZWYgT0xEX1RXRworICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9 IHNvY2tldF9lcnJubzsKKyNlbmRpZiAvKiBPTERfVFdHICovCisgICAgICAgICAgICAgICAgICAg ICAgIHNvY2tldF9wZXJyb3IoInJsb2dpbiBiaW5kIik7CisjZWxzZQorICAgICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gYmluZCBmYWlsZWQiLCIiLGVycm5vKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgcGVycm9yKCJybG9naW4gYmluZCIpOworI2VuZGlmIC8qIFRHVk9S V0lOICovCisjZW5kaWYgLyogT1MyICovCisjZWxzZSAgLyogQ09NTUVOVCAqLworI2lmZGVmIE9T MgorICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gYmluZCBzX2Vycm5v IiwiIixzX2Vycm5vKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCJybG9naW4gYmlu ZCIpOworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJc clxuIik7ICAvKiBjb21wbGV0ZSBhbnkgcHJldmlvdXMgbWVzc2FnZSAqLworI2VuZGlmIC8qIFZN UyAqLworI2lmZGVmIFRHVk9SV0lOCisgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs InJsb2dpbiBiaW5kIHNvY2tldF9lcnJubyIsIiIsc29ja2V0X2Vycm5vKTsKKyNpZmRlZiBPTERf VFdHCisgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gc29ja2V0X2Vycm5vOworI2VuZGlm IC8qIE9MRF9UV0cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0X3BlcnJvcigicmxv Z2luIGJpbmQiKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInJs b2dpbiBiaW5kIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAgICAgICAgICAgICAgIHBlcnJv cigicmxvZ2luIGJpbmQiKTsKKyNlbmRpZiAvKiBUR1ZPUldJTiAqLworI2VuZGlmIC8qIE9TMiAq LworICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gbG9jYWwgcG9ydCIs IiIsbHBvcnQpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg bmV0Y2xvcygpOworICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgbHBvcnQtLTsKKyAgICAgICAgICAgICAgIGlmIChs cG9ydCA9PSA1MTIgLyogbG93ZXN0IHJlc2VydmVkIHBvcnQgdG8gdXNlICovICkgeworICAgICAg ICAgICAgICAgICAgIHByaW50ZigiXG5ObyByZXNlcnZlZCBwb3J0cyBhdmFpbGFibGUuXG4iKTsK KyAgICAgICAgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9CisgICAgICAgICAgIGRlYnVnKEYx MDEsInJsb2dpbiBscG9ydCIsIiIsbHBvcnQpOworICAgICAgICAgICB0dG5wcm90byA9IE5QX1JM T0dJTjsKKyAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBSTE9HQ09ERSAgKi8KKworICAgICAgIC8q IElmIGEgc3BlY2lmaWMgVENQIGFkZHJlc3Mgb24gdGhlIGxvY2FsIGhvc3QgaXMgZGVzaXJlZCB3 ZSAqLworICAgICAgIC8qIG11c3QgYmluZCBpdCB0byB0aGUgc29ja2V0LiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAgaWYgKHRj cF9hZGRyZXNzKSB7CisgICAgICAgICAgICAgaW50IHNfZXJybm87CisKKyAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJuZXRvcGVuIGJpbmRpbmcgc29ja2V0IHRvIix0Y3BfYWRkcmVzcywwKTsKKyAg ICAgICAgICAgICBiemVybygoY2hhciAqKSZzaW4sc2l6ZW9mKHNpbikpOworICAgICAgICAgICAg IHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBJTkFERFJYCisgICAgICAgICAgICAg aW5hZGRyeCA9IGluZXRfYWRkcih0Y3BfYWRkcmVzcyk7CisgICAgICAgICAgICAgc2luLnNpbl9h ZGRyLnNfYWRkciA9ICoodW5zaWduZWQgbG9uZyAqKSZpbmFkZHJ4OworI2Vsc2UKKyAgICAgICAg ICAgICBzaW4uc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKHRjcF9hZGRyZXNzKTsKKyNlbmRp ZiAvKiBJTkFERFJYICovCisgICAgICAgICAgICAgc2luLnNpbl9wb3J0ID0gMDsKKyAgICAgICAg ICAgICBpZiAoYmluZCh0dHlmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4p KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgc19lcnJubyA9IHNvY2tldF9lcnJubzsgLyogU2F2 ZSBlcnJvciBjb2RlICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgICAgICAgc29ja2V0 X2Nsb3NlKHR0eWZkKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgIGNs b3NlKHR0eWZkKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgICAgICB0dHlm ZCA9IC0xOworICAgICAgICAgICAgICAgICB3YXNjbG9zZWQgPSAxOworICAgICAgICAgICAgICAg ICBlcnJubyA9IHNfZXJybm87ICAgICAgIC8qIGFuZCByZXBvcnQgdGhpcyBlcnJvciAqLworICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVuIGJpbmQgZXJybm8iLCIiLGVycm5vKTsK KyAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9 CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworLyogTm93IGNvbm5lY3QgdG8gdGhlIHNvY2tl dCBvbiB0aGUgb3RoZXIgZW5kLiAqLworCisjaWZkZWYgRVhDRUxBTgorICAgICAgICBpZiAoY29u bmVjdCh0dHlmZCwgJnJfYWRkcikgPCAwKQorI2Vsc2UKKyNpZmRlZiBOVAorICAgICAgICAgIFdT QVNhZmVUb0NhbmNlbCA9IDE7CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgaWYgKGNvbm5lY3Qo dHR5ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcl9hZGRyLCBzaXplb2Yocl9hZGRyKSkgPCAwKQor I2VuZGlmIC8qIEVYQ0VMQU4gKi8KKyAgICAgICAgICB7CisjaWZkZWYgTlQKKyAgICAgICAgICAg ICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIE9TMgorICAg ICAgICAgICAgICBpID0gc29ja2V0X2Vycm5vOworI2Vsc2UgLyogT1MyICovCisjaWZkZWYgVEdW T1JXSU4KKyAgICAgICAgICAgICAgaSA9IHNvY2tldF9lcnJubzsKKyNlbHNlCisgICAgICAgICAg ICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgLyogU2F2ZSBlcnJvciBjb2RlICovCisjZW5k aWYgLyogVEdWT1JXSU4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBSTE9HQ09ERQorICAg ICAgICAgICAgICBpZiAoCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgIGkgJiYgLyogT1My IGJpbmQgZmFpbHMgd2l0aCAwLCBpZiBhbHJlYWR5IGluIHVzZSAqLworI2lmZGVmIE5UCisgICAg ICAgICAgICAgICAgIGkgPT0gV1NBRUFERFJJTlVTRQorI2Vsc2UKKyAgICAgICAgICAgICAgICAg KGkgPT0gU09DRUFERFJJTlVTRSB8fAorICAgICAgICAgICAgICAgICBpID09IChTT0NFQUREUklO VVNFIC0gU09DQkFTRUVSUikpCisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLworI2lm ZGVmIFRHVk9SV0lOCisgICAgICAgICAgICAgICAgICBzb2NrZXRfZXJybm8gPT0gRUFERFJJTlVT RQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgIGVycm5vID09IEVBRERSSU5VU0UKKyNlbmRpZiAv KiBUR1ZPUldJTiAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgJiYgdHRu cHJvdG8gPT0gTlBfUkxPR0lOKSB7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgICAgICAg ICBzb2NrZXRfY2xvc2UodHR5ZmQpOyAvKiBDbG9zZSBpdC4gKi8KKyNlbHNlCisgICAgICAgICAg ICAgICAgICAgY2xvc2UodHR5ZmQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAg ICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgLyogVHJ5IGEgZGlmZmVyZW50IGxwb3J0ICov CisgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBIQUREUkxJ U1QKKyNpZmRlZiBoX2FkZHIKKyAgICAgICAgICAgICAgaWYgKGhvc3QgJiYgaG9zdC0+aF9hZGRy X2xpc3QgJiYgaG9zdC0+aF9hZGRyX2xpc3RbMV0pIHsKKyAgICAgICAgICAgICAgICAgIHBlcnJv cigiIik7CisgICAgICAgICAgICAgICAgICBob3N0LT5oX2FkZHJfbGlzdCsrOworICAgICAgICAg ICAgICAgICAgYmNvcHkoaG9zdC0+aF9hZGRyX2xpc3RbMF0sCisgICAgICAgICAgICAgICAgICAg ICAgICAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAg aG9zdC0+aF9sZW5ndGgpOworCisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoaXBhZGRyLChj aGFyICopaW5ldF9udG9hKHJfYWRkci5zaW5fYWRkciksMjApOworICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwibmV0b3BlbiBoX2FkZHJfbGlzdCIsaXBhZGRyLDApOworICAgICAgICAgICAg ICAgICAgaWYgKCFxdWlldCAmJiAqaXBhZGRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIgVHJ5aW5nICVzLi4uICIsIGlwYWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgZmZs dXNoKHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgVENQSVBMSUIKKyAgICAg ICAgICAgICAgICAgIHNvY2tldF9jbG9zZSh0dHlmZCk7IC8qIENsb3NlIGl0LiAqLworI2Vsc2UK KyAgICAgICAgICAgICAgICAgIGNsb3NlKHR0eWZkKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLwor ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBo X2FkZHIgKi8KKyNlbmRpZiAgLyogSEFERFJMSVNUICovCisgICAgICAgICAgICAgIG5ldGNsb3Mo KTsKKyAgICAgICAgICAgICAgdHR5ZmQgPSAtMTsKKyAgICAgICAgICAgICAgd2FzY2xvc2VkID0g MTsKKyAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOworICAgICAgICAgICAgICBlcnJu byA9IGk7ICAgICAgICAgICAgICAgIC8qIEFuZCByZXBvcnQgdGhpcyBlcnJvciAqLworI2lmZGVm IEVYQ0VMQU4KKyAgICAgICAgICAgICAgaWYgKGVycm5vKSBleHBlcnJvcigibmV0b3BlbiBjb25u ZWN0Iik7CisjZWxzZQorI2lmZGVmIFRHVk9SV0lOCisgICAgICAgICAgICAgIGRlYnVnKEYxMDEs Im5ldG9wZW4gY29ubmVjdCBlcnJvciIsIiIsc29ja2V0X2Vycm5vKTsKKyAgICAgICAgICAgICAg LyogaWYgKGVycm5vKSBzb2NrZXRfcGVycm9yKCJuZXRvcGVuIGNvbm5lY3QiKTsgKi8KKyNpZmRl ZiBPTERfVFdHCisgICAgICAgICAgICAgIGVycm5vID0gc29ja2V0X2Vycm5vOworI2VuZGlmIC8q IE9MRF9UV0cgKi8KKyAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICBz b2NrZXRfcGVycm9yKCJuZXRvcGVuIGNvbm5lY3QiKTsKKyNlbHNlIC8qIFRHVk9SV0lOICovCisg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldG9wZW4gY29ubmVjdCBlcnJubyIsIiIsZXJybm8p OworI2lmZGVmIFZNUworICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAg IHBlcnJvcigiXHJcbkZhaWxlZCIpOworI2Vsc2UKKyAgICAgICAgICAgICAgaWYgKCFxdWlldCkK KyAgICAgICAgICAgICAgICBwZXJyb3IoIkZhaWxlZCIpOworI2VuZGlmIC8qIFZNUyAqLworI2lm ZGVmIERFQ19UQ1BJUAorICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAg IHBlcnJvcigibmV0b3BlbiBjb25uZWN0Iik7CisjZW5kaWYgLyogREVDX1RDUElQICovCisjaWZk ZWYgQ01VX1RDUElQCisgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAg cGVycm9yKCJuZXRvcGVuIGNvbm5lY3QiKTsKKyNlbmRpZiAvKiBDTVVfVENQSVAgKi8KKyNlbmRp ZiAvKiBUR1ZPUldJTiAqLworI2VuZGlmIC8qIEVYQ0VMQU4gKi8KKyAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgICB9CisjaWZkZWYgTlQKKyAgICAgICAgV1NBU2FmZVRvQ2FuY2Vs ID0gMDsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBpc2Nvbm5lY3QgPSAxOworICAgIH0gd2hp bGUgKCFpc2Nvbm5lY3QpOworCisjaWZkZWYgTk9OX0JMT0NLX0lPCisgICAgb24gPSAxOworICAg IHggPSBzb2NrZXRfaW9jdGwodHR5ZmQsRklPTkJJTywmb24pOworICAgIGRlYnVnKEYxMDEsIm5l dG9wZW4gRklPTkJJTyIsIiIseCk7CisjZW5kaWYgLyogTk9OX0JMT0NLX0lPICovCisKKyNpZmRl ZiBOVF9UQ1BfT1ZFUkxBUFBFRAorICAgIE92ZXJsYXBwZWRXcml0ZUluaXQoKTsKKyAgICBPdmVy bGFwcGVkUmVhZEluaXQoKTsKKyNlbmRpZiAvKiBOVF9UQ1BfT1ZFUkxBUFBFRCAqLworCisgICAg dHRuZXQgPSBuZXR0OyAgICAgICAgICAgICAgICAgICAgICAgLyogVENQL0lQIChzb2NrZXRzKSBu ZXR3b3JrICovCisKKyNpZm5kZWYgTk9IVFRQCisgICAgLyogV2UgaGF2ZSBzdWNjZWVkZWQgaW4g Y29ubmVjdGluZyB0byB0aGUgSFRUUCBQUk9YWS4gIFNvIG5vdyB3ZSAgICovCisgICAgLyogbmVl ZCB0byBhdHRlbXB0IHRvIGNvbm5lY3QgdGhyb3VnaCB0aGUgcHJveHkgdG8gdGhlIGFjdHVhbCBo b3N0ICovCisgICAgLyogSWYgdGhhdCBpcyBzdWNjZXNzZnVsLCB3ZSBoYXZlIHRvIHByZXRlbmQg dGhhdCB3ZSBtYWRlIGEgZGlyZWN0ICovCisgICAgLyogY29ubmVjdGlvbiB0byB0aGUgYWN0dWFs IGhvc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBpZiAoIHRj cF9odHRwX3Byb3h5ICkgeworI2lmZGVmIE9TMgorICAgICAgICBjaGFyICogYWdlbnQgPSAiS2Vy bWl0IDk1IjsgICAgICAgICAgICAgLyogRGVmYXVsdCB1c2VyIGFnZW50ICovCisjZWxzZQorICAg ICAgICBjaGFyICogYWdlbnQgPSAiQy1LZXJtaXQiOworI2VuZGlmIC8qIE9TMiAqLworCisgICAg ICAgIGlmIChodHRwX2Nvbm5lY3QodHR5ZmQsCisJCQkgdGNwX2h0dHBfcHJveHlfYWdlbnQgPyB0 Y3BfaHR0cF9wcm94eV9hZ2VudCA6IGFnZW50LAorCQkJIE5VTEwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgdGNwX2h0dHBfcHJveHlfdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0 Y3BfaHR0cF9wcm94eV9wd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBwcm94eWNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICApIDwg MCkgeworICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgfQorCisgICAgICAgIGNrc3RybmNweShuYW1lY29weSxwcm94eWNvcHksTkFNRUNQWUwp OworICAgICAgICBwID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBXYXMgYSBz ZXJ2aWNlIHJlcXVlc3RlZD8gKi8KKyAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0g JzonKSBwKys7IC8qIExvb2sgZm9yIGNvbG9uICovCisgICAgICAgICpwID0gJ1wwJzsKKyAgICB9 CisjZW5kaWYgLyogTk9IVFRQICovCisKKyAgICAvKiBKZWZmIC0gRG9lcyB0aGlzIG5leHQgYmxv Y2sgb2YgY29kZSB0aGF0IHNldCdzIHRoZSBwcm90b2NvbCAqLworICAgIC8qIG5lZWQgdG8gYmUg aGVyZSBhbnltb3JlPyAgNS8xMC8yMDAwICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAg ICAvKiBUaGVyZSBhcmUgY2VydGFpbiBtYWdpYyBwb3J0IG51bWJlcnMgdGhhdCB3aGVuIHVzZWQg cmVxdWlyZSAqLworICAgIC8qIHRoZSB1c2Ugb2Ygc3BlY2lmaWMgcHJvdG9jb2xzLiAgQ2hlY2sg dGhpcyBub3cgYmVmb3JlIHdlICAgICovCisgICAgLyogc2V0IHRoZSBTT19PT0JJTkxJTkUgc3Rh dGUgb3Igd2UgbWlnaHQgZ2V0IGl0IHdyb25nLiAgICAgICAgKi8KKyAgICB4ID0gbnRvaHMoKHVu c2lnbmVkIHNob3J0KXNlcnZpY2UtPnNfcG9ydCk7CisgICAgc3ZjbnVtID0geDsKKyAgICAvKiBT ZWUgaWYgdGhlIHNlcnZpY2UgaXMgVEVMTkVULiAqLworICAgIGlmICh4ID09IFRFTE5FVF9QT1JU KSB7CisgICAgICAgIC8qIFllcywgc28gaWYgcmF3IHBvcnQgbm90IHJlcXVlc3RlZCAqLworI2lm ZGVmIENPTU1FTlQKKwkvKiBKZWZmIDIwMDUvMTIvMzAgKi8KKyAgICAgICAgaWYgKHR0bnByb3Rv ICE9IE5QX1RDUFJBVyAmJiB0dG5wcm90byAhPSBOUF9TU0xfUkFXICYmIAorCSAgICB0dG5wcm90 byAhPSBOUF9UTFNfUkFXICYmIHR0bnByb3RvICE9IE5QX05PTkUpCisjZWxzZQorCS8qIGZkYyAy MDA1LzEyLzA0ICovCisgICAgICAgIGlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcgJiYgdHRucHJv dG8gIT0gTlBfTk9ORSkKKyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgICAgICAgdHRucHJvdG8g PSBOUF9URUxORVQ7ICAgICAgICAgLyogU2VsZWN0IFRFTE5FVCBwcm90b2NvbC4gKi8KKyAgICB9 CisjaWZkZWYgUkxPR0NPREUKKyAgICBlbHNlIGlmICh4ID09IFJMT0dJTl9QT1JUKSB7CisgICAg ICAgIHR0bnByb3RvID0gTlBfUkxPR0lOOworICAgIH0KKyNpZmRlZiBDS19LRVJCRVJPUworICAg IC8qIFRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGRvIHRoaXMuICBJZiB0aGUgdXNlciBkaWRuJ3Qg dGVsbCAgICAqLworICAgIC8qIHdoaWNoIG9uZSB0byB1c2UgdXAgZnJvbnQuICBXZSBtYXkgZ3Vl c3Mgd3JvbmcgaWYgdGhlIHVzZXIgICAqLworICAgIC8qIGhhcyBib3RoIEtlcmJlcm9zIHZlcnNp b25zIGluc3RhbGxlZCBhbmQgdmFsaWQgVEdUcyBmb3IgZWFjaCAqLworICAgIGVsc2UgaWYgKHgg PT0gS0xPR0lOX1BPUlQgJiYKKyAgICAgICAgICAgICB0dG5wcm90byAhPSBOUF9LNExPR0lOICYm CisgICAgICAgICAgICAgdHRucHJvdG8gIT0gTlBfSzVMT0dJTikgeworICAgICAgICBpZiAoY2tf a3JiNV9pc19pbnN0YWxsZWQoKSAmJgorICAgICAgICAgICAgY2tfa3JiNV9pc190Z3RfdmFsaWQo KSkKKyAgICAgICAgICB0dG5wcm90byA9IE5QX0s1TE9HSU47CisgICAgICAgIGVsc2UgaWYgKGNr X2tyYjRfaXNfaW5zdGFsbGVkKCkgJiYgY2tfa3JiNF9pc190Z3RfdmFsaWQoKSkKKyAgICAgICAg ICB0dG5wcm90byA9IE5QX0s0TE9HSU47CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0dG5wcm90 byA9IE5QX0s0TE9HSU47CisgICAgfSBlbHNlIGlmICh4ID09IEVLTE9HSU5fUE9SVCAmJgorICAg ICAgICAgICAgICAgdHRucHJvdG8gIT0gTlBfRUs0TE9HSU4gJiYKKyAgICAgICAgICAgICAgIHR0 bnByb3RvICE9IE5QX0VLNUxPR0lOKSB7CisgICAgICAgIGlmIChja19rcmI1X2lzX2luc3RhbGxl ZCgpICYmIGNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkpCisgICAgICAgICAgdHRucHJvdG8gPSBOUF9F SzVMT0dJTjsKKyAgICAgICAgZWxzZSBpZiAoY2tfa3JiNF9pc19pbnN0YWxsZWQoKSAmJiBja19r cmI0X2lzX3RndF92YWxpZCgpKQorICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs0TE9HSU47Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICB0dG5wcm90byA9IE5QX0VLNExPR0lOOworICAgIH0KKyNl bmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgSUtT X09QVElPTgorICAgIGVsc2UgaWYgKHggPT0gS0VSTUlUX1BPUlQpIHsgICAgICAgIC8qIElLUyB1 c2VzIFRlbG5ldCBwcm90b2NvbCAqLworICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfTk9ORSkK KyAgICAgICAgICB0dG5wcm90byA9IE5QX0tFUk1JVDsKKyAgICB9CisjZW5kaWYgLyogSUtTX09Q VElPTiAqLworCisjaWZkZWYgU09fT09CSU5MSU5FCisvKgorICBUaGUgc3ltYm9sIFNPX09PQklO TElORSBpcyBub3Qga25vd24gdG8gVWx0cml4IDIuMC4KKyAgSXQgbWVhbnMgImxlYXZlIG91dCBv ZiBiYW5kIGRhdGEgaW5saW5lIi4gIFRoZSBub3JtYWwgdmFsdWUgaXMgMHgwMTAwLAorICBidXQg ZG9uJ3QgdHJ5IHRoaXMgb24gc3lzdGVtcyB3aGVyZSB0aGUgc3ltYm9sIGlzIHVuZGVmaW5lZC4K KyovCisvKgorICBOb3RlIGZyb20gSmVmZiBBbHRtYW46IDEyLzEzLzk1CisgIEluIGltcGxlbWVu dGluZyBybG9naW4gcHJvdG9jb2wgSSBoYXZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCBp dCBpcworICBhIHJlYWxseSBiYWQgaWRlYSB0byByZWFkIG91dC1vZi1iYW5kIGRhdGEgaW5saW5l LgorICBBdCBsZWFzdCBXaW5kb3dzIGFuZCBPUy8yIGRvZXMgbm90IGhhbmRsZSB0aGlzIHdlbGwu CisgIEFuZCBpZiB5b3UgbmVlZCB0byBrbm93IHRoYXQgZGF0YSBpcyBvdXQtb2YtYmFuZCwgdGhl biBpdCBiZWNvbWVzCisgIGFic29sdXRlbHkgcG9pbnRsZXNzLgorCisgIFRoZXJlZm9yZSwgYXQg bGVhc3Qgb24gT1MyIGFuZCBXaW5kb3dzIChOVCkgSSBoYXZlIGNoYW5nZWQgdGhlIHZhbHVlIG9m CisgIG9uIHRvIDAsIHNvIHRoYXQgb3V0LW9mLWJhbmQgZGF0YSBzdGF5cyBvdXQtb2YtYmFuZC4K KworICAxMi8xOC85NQorICBBY3R1YWxseSwgT09CIGRhdGEgc2hvdWxkIGJlIHJlYWQgaW5saW5l IHdoZW4gcG9zc2libGUuICBFc3BlY2lhbGx5IHdpdGgKKyAgcHJvdG9jb2xzIHRoYXQgZG9uJ3Qg Y2FyZSBhYm91dCB0aGUgVXJnZW50IGZsYWcuICBUaGlzIGlzIHRydWUgd2l0aCBUZWxuZXQuCisg IFdpdGggUmxvZ2luLCB5b3UgbmVlZCB0byBiZSBhYmxlIHRvIGNhdGNoIE9PQiBkYXRhLiAgSG93 ZXZlciwgdGhlIGJlc3QKKyAgd2F5IHRvIGRvIHRoaXMgaXMgdG8gc2V0IGEgc2lnbmFsIGhhbmRs ZXIgb24gU0lHVVJHLiAgVGhpcyBpc24ndCBwb3NzaWJsZQorICBvbiBPUy8yIGFuZCBXaW5kb3dz LiAgQnV0IGl0IGlzIGluIFVOSVguICBXZSB3aWxsIGFsc28gbmVlZCBPT0IgZGF0YSBmb3IKKyAg RlRQIHNvIGJldHRlciBjcmVhdGUgYSBnZW5lcmFsIG1lY2hhbmlzbS4KKworICBUaGUgcmVhc29u IGZvciBtYWtpbmcgT09CIGRhdGEgYmUgaW5saW5lIGlzIHRoYXQgdGhlIHN0YW5kYXJkIHR0aW5j L3R0b2MKKyAgY2FsbHMgY2FuIGJlIHVzZWQgZm9yIHJlYWRpbmcgdGhhdCBkYXRhIG9uIFVOSVgg c3lzdGVtcy4gIElmIHdlIGRpZG4ndAorICBoYXZlIHRoZSBPT0JJTkxJTkUgb3B0aW9uIHNldCB0 aGVuIHdlIHdvdWxkIGhhdmUgdG8gdXNlIHJlY3YoLE1TR19PT0IpCisgIHRvIHJlYWQgaXQuCisq LworI2lmZGVmIFJMT0dDT0RFCisjaWZkZWYgVENQSVBMSUIKKyAgICBpZiAodHRucHJvdG8gPT0g TlBfUkxPR0lOCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBf SzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTgorICAgICAgICB8fCB0dG5wcm90byA9 PSBOUF9LNUxPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCisjZW5kaWYgLyogQ0tfS0VS QkVST1MgKi8KKyAgICAgICkKKyAgICAgIG9uID0gMDsKKyNlbHNlIC8qIFRDUElQTElCICovCisg ICAgaWYgKHR0bnByb3RvID09IE5QX1JMT0dJTgorI2lmZGVmIENLX0tFUkJFUk9TCisgICAgICAg ICB8fCB0dG5wcm90byA9PSBOUF9LNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOCisg ICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxP R0lOCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICAgICAgICkgeworICAgICAgICBkZWJ1 ZyhGMTAwLCJJbnN0YWxsaW5nIHJsb2dvb2JoIG9uIFNJR1VSRyIsIiIsMCk7CisgICAgICAgIHNp Z25hbChTSUdVUkcsIHJsb2dvb2JoKTsKKyAgICAgICAgb24gPSAwOworICAgIH0gZWxzZSB7Cisg ICAgICAgIGRlYnVnKEYxMDAsIklnbm9yaW5nIFNJR1VSRyIsIiIsMCk7CisgICAgICAgIHNpZ25h bChTSUdVUkcsIFNJR19ERkwpOworICAgIH0KKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworI2VuZGlm IC8qIFJMT0dDT0RFICovCisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIHNldHNvY2tvcHQodHR5 ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7Cisj ZWxzZQorI2lmZGVmIEJTRDQzCisgICAgc2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09f T09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgT1NGMQor ICAgIHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAm b24sIHNpemVvZiBvbik7CisjZWxzZQorI2lmZGVmIFBPU0lYCisgICAgc2V0c29ja29wdCh0dHlm ZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNl bHNlCisjaWZkZWYgTU9UU1Y4OFI0CisgICAgc2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tFVCwg U09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgU09M QVJJUworLyoKKyAgTWF5YmUgdGhpcyBhcHBsaWVzIHRvIGFsbCBTVlI0IHZlcnNpb25zLCBidXQg dGhlIG90aGVyIChlbHNlKSB3YXkgaGFzIGJlZW4KKyAgY29tcGlsaW5nIGFuZCB3b3JraW5nIGZp bmUgb24gYWxsIHRoZSBvdGhlcnMsIHNvIGJlc3Qgbm90IHRvIGNoYW5nZSBpdC4KKyovCisgICAg c2V0c29ja29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwg c2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgT1NLCisgICAgc2V0c29ja29wdCh0dHlmZCwgU09M X1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisj aWZkZWYgT1MyCisgICAgeworICAgICAgICBpbnQgcmM7CisgICAgICAgIHJjID0gc2V0c29ja29w dCh0dHlmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPTF9TT0NLRVQsCisgICAgICAgICAg ICAgICAgICAgICAgICBTT19PT0JJTkxJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKSAmb24sCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Ygb24KKyAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgIGRlYnVnKEYxMTEsInNldHNvY2tvcHQgU09fT09CSU5M SU5FIixvbiA/ICJvbiIgOiAib2ZmIiAscmMpOworICAgIH0KKyNlbHNlCisjaWZkZWYgVk1TIC8q IG9yLCBhdCBsZWFzdCwgVk1TIHdpdGggZ2NjICovCisgICAgc2V0c29ja29wdCh0dHlmZCwgU09M X1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisj aWZkZWYgQ0xJWAorICAgIHNldHNvY2tvcHQodHR5ZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElO RSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7CisjZWxzZQorICAgIHNldHNvY2tvcHQodHR5ZmQs IFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwgJm9uLCBzaXplb2Ygb24pOworI2VuZGlmIC8qIENM SVggKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBPU0sg Ki8KKyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5kaWYgLyogTU9UU1Y4OFI0ICovCisjZW5kaWYg LyogUE9TSVggKi8KKyNlbmRpZiAvKiBCU0Q0MyAqLworI2VuZGlmIC8qIE9TRjEgKi8KKyNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFNPX09PQklOTElORSAqLworCisjaWZuZGVm IE5PVENQT1BUUworI2lmbmRlZiBkYXRhZ2VuZXJhbAorI2lmZGVmIFNPTF9TT0NLRVQKKyNpZmRl ZiBUQ1BfTk9ERUxBWQorICAgIG5vX2RlbGF5KHR0eWZkLHRjcF9ub2RlbGF5KTsKKyNlbmRpZiAv KiBUQ1BfTk9ERUxBWSAqLworI2lmZGVmIFNPX0tFRVBBTElWRQorICAgIGtlZXBhbGl2ZSh0dHlm ZCx0Y3Bfa2VlcGFsaXZlKTsKKyNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KKyNpZmRlZiBTT19M SU5HRVIKKyAgICBja19saW5nZXIodHR5ZmQsdGNwX2xpbmdlciwgdGNwX2xpbmdlcl90bW8pOwor I2VuZGlmIC8qIFNPX0xJTkdFUiAqLworI2lmZGVmIFNPX1NOREJVRgorICAgIHNlbmRidWYodHR5 ZmQsdGNwX3NlbmRidWYpOworI2VuZGlmIC8qIFNPX1NOREJVRiAqLworI2lmZGVmIFNPX1JDVkJV RgorICAgIHJlY3ZidWYodHR5ZmQsdGNwX3JlY3ZidWYpOworI2VuZGlmIC8qIFNPX1JDVkJVRiAq LworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2Vu ZGlmIC8qIE5PVENQT1BUUyAqLworCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgLyogRmluZCBv dXQgb3VyIG93biBJUCBhZGRyZXNzLiAqLworICAgIC8qIFdlIG5lZWQgdGhlIGxfYWRkciBzdHJ1 Y3R1cmUgZm9yIFtFXUtMT0dJTi4gKi8KKyAgICBsX3NsZW4gPSBzaXplb2YobF9hZGRyKTsKKyAg ICBiemVybygoY2hhciAqKSZsX2FkZHIsIGxfc2xlbik7CisjaWZuZGVmIEVYQ0VMQU4KKyAgICBp ZiAoIWdldHNvY2tuYW1lKHR0eWZkLCAoc3RydWN0IHNvY2thZGRyICopJmxfYWRkciwgJmxfc2xl bikpIHsKKyAgICAgICAgY2hhciAqIHMgPSAoY2hhciAqKWluZXRfbnRvYShsX2FkZHIuc2luX2Fk ZHIpOworICAgICAgICBja3N0cm5jcHkobXlpcGFkZHIsIHMsIDIwKTsKKyAgICAgICAgZGVidWco RjExMCwiZ2V0c29ja25hbWUiLG15aXBhZGRyLDApOworICAgIH0KKyNlbmRpZiAvKiBFWENFTEFO ICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworLyoKKyAgVGhpcyBpcyByZWFsbHkgb25s eSBuZWVkZWQgZm9yIEtlcmJlcm9zIElWIGJ1dCBpcyB1c2VmdWwgaW5mb3JtYXRpb24gaW4gYW55 CisgIGNhc2UuICBJZiB3ZSBjb25uZWN0IHRvIGEgbmFtZSB0aGF0IGlzIHJlYWxseSBhIHBvb2ws IHdlIG5lZWQgdG8gZ2V0IHRoZQorICBuYW1lIG9mIHRoZSBtYWNoaW5lIHdlIGFyZSBhY3R1YWxs eSBjb25uZWN0aW5nIHRvIGZvciBLNCB0byBhdXRoZW50aWNhdGUKKyAgcHJvcGVybHkuICBUaGlz IHdheSB3ZSBhbHNvIHVwZGF0ZSB0aGUgbmFtZXMgcHJvcGVybHkuCisKKyAgSG93ZXZlciwgaXQg aXMgYSBzZWN1cml0eSBob2xlIHdoZW4gdXNlZCB3aXRoIGluc2VjdXJlIEROUy4KKworICBOb3Rl OiBUaGlzIGRvZXMgbm90IHdvcmsgb24gV2luZG93cyA5NSBvciBXaW5kb3dzIE5UIDMuNXguICBU aGlzIGlzIGJlY2F1c2UKKyAgb2YgdGhlIE1pY3Jvc29mdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRo b3N0YnlhZGRyKCkgaW4gYm90aCBXaW5zb2NrIDEuMQorICBhbmQgV2luc29jayAyLjAgb24gdGhv c2UgcGxhdGZvcm1zLiAgVGhlaXIgYWxnb3JpdGhtIGlzOgorCisgIDEuIENoZWNrIHRoZSBIT1NU RU5UIGNhY2hlLgorICAyLiBDaGVjayB0aGUgSE9TVFMgZmlsZSBhdCAlU3lzdGVtUm9vdCVcU3lz dGVtMzJcRFJJVkVSU1xFVEMuCisgIDMuIERvIGEgRE5TIHF1ZXJ5IGlmIHRoZSBETlMgc2VydmVy IGlzIGNvbmZpZ3VyZWQgZm9yIG5hbWUgcmVzb2x1dGlvbi4KKyAgNC4gRG8gYW4gYWRkaXRpb25h bCBOZXRCSU9TIHJlbW90ZSBhZGFwdGVyIHN0YXR1cyB0byBhbiBJUCBhZGRyZXNzIGZvciBpdHMK KyAgICAgTmV0QklPUyBuYW1lIHRhYmxlLiBUaGlzIHN0ZXAgaXMgc3BlY2lmaWMgb25seSB0byB0 aGUgV2luZG93cyBOVCB2ZXJzaW9uCisgICAgIDMuNTEgaW1wbGVtZW50YXRpb24uCisKKyAgVGhl IHByb2JsZW0gaXMgdGhlIHVzZSBvZiB0aGUgSE9TVEVOVCBjYWNoZS4gIEl0IG1lYW5zIHRoYXQg Z2V0aG9zdGJ5YWRkcigpCisgIGNhbiBub3QgYmUgdXNlZCB0byByZXNvbHZlIHRoZSByZWFsIG5h bWUgb2YgbWFjaGluZSBpZiBpdCB3YXMgb3JpZ2luYWxseQorICBhY2Nlc3NlZCBieSBhbiBhbGlh cyB1c2VkIHRvIHJlcHJlc2VudCBhIGNsdXN0ZXIuCisqLworICAgICBpZiAoKHRjcF9yZG5zICYm IGRucyB8fCB0Y3BfcmRucyA9PSBTRVRfT04KKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICAg fHwgdGNwX3JkbnMgPT0gU0VUX0FVVE8gJiYKKyAgICAgICAgICAoY2tfa3JiNV9pc19pbnN0YWxs ZWQoKSB8fCBja19rcmI0X2lzX2luc3RhbGxlZCgpKQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICov CisgICAgICAgICApCisjaWZuZGVmIE5PSFRUUAorICAgICAgICAgICYmICh0Y3BfaHR0cF9wcm94 eSA9PSBOVUxMKQorI2VuZGlmIC8qIE5PSFRUUCAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAg ICYmICEoc3NsX29ubHlfZmxhZyB8fCB0bHNfb25seV9mbGFnKQorI2VuZGlmIC8qIENLX1NTTCAq LworICAgICAgICAgKSB7CisjaWZkZWYgTlQKKyAgICAgICAgaWYgKGlzV2luOTUoKSkKKyAgICAg ICAgICBzbGVlcCgxKTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBpZiAoIXF1aWV0KSB7Cisg ICAgICAgICAgICBwcmludGYoIiBSZXZlcnNlIEROUyBMb29rdXAuLi4gIik7CisgICAgICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaG9zdCA9IGdldGhvc3Ri eWFkZHIoKGNoYXIgKikmcl9hZGRyLnNpbl9hZGRyLDQsUEZfSU5FVCkpIHsKKyAgICAgICAgICAg IGNoYXIgKiBzOworICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0ZW50KGhvc3QpOworICAg ICAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbiBnZXRob3N0YnluYW1lICE9IE5VTEwiLCIiLDAp OworICAgICAgICAgICAgaWYgKCFxdWlldCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiKE9L KVxuIik7CisgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBzID0gaG9zdC0+aF9uYW1lOworICAgICAgICAgICAgaWYgKCFzKSB7ICAgICAg ICAgICAgICAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbi4uLiAqLworICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsIm5ldG9wZW4gaG9zdC0+aF9uYW1lIGlzIE5VTEwiLCIiLDApOworICAgICAgICAg ICAgICAgIHMgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFNvbWV0aGluZyBp cyB3cm9uZyB3aXRoIGluZXRfbnRvYSgpIG9uIEhQVVggMTAueHggKi8KKyAgICAgICAgICAgIC8q IFRoZSBjb21waWxlciBzYXlzICJJbnRlZ3JhbCB2YWx1ZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0 byAqLworICAgICAgICAgICAgLyogcG9pbnRlciBpbiBhc3NpZ25tZW50LiIgIFRoZSBwcm90b3R5 cGUgaXMgcmlnaHQgdGhlcmUgKi8KKyAgICAgICAgICAgIC8qIGluIDxhcnBhL2luZXQuaD4gc28g d2hhdCdzIHRoZSBwcm9ibGVtPyAqLworICAgICAgICAgICAgLyogRGl0dG8gaW4gSFAtVVggNS54 LCBidXQgbm90IDgueCBvciA5LnguLi4gKi8KKyAgICAgICAgICAgIGlmICghKnMpIHsgICAgICAg ICAgICAgICAgICAvKiBObyBuYW1lIHNvIHN1YnN0aXR1dGUgdGhlIGFkZHJlc3MgKi8KKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXRvcGVuIGhvc3QtPmhfbmFtZSBpcyBlbXB0eSIsIiIs MCk7CisgICAgICAgICAgICAgICAgcyA9IGluZXRfbnRvYShyX2FkZHIuc2luX2FkZHIpOyAvKiBD b252ZXJ0IGFkZHJlc3MgdG8gc3RyaW5nICovCisgICAgICAgICAgICAgICAgaWYgKCFzKSAgICAg ICAgICAgICAgICAgLyogVHJ1c3QgTm8gMSAqLworICAgICAgICAgICAgICAgICAgcyA9ICIiOwor ICAgICAgICAgICAgICAgIGlmICgqcykgeyAgICAgICAgICAgICAgIC8qIElmIGl0IHdvcmtlZCwg dXNlIHRoaXMgc3RyaW5nICovCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShpcGFkZHIs cywyMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHMgPSBpcGFkZHI7ICAg ICAgICAgICAgIC8qIE90aGVyd2lzZSBzdGljayB3aXRoIHRoZSBJUCAqLworICAgICAgICAgICAg ICAgIGlmICghKnMpICAgICAgICAgICAgICAgIC8qIG9yIGZhaWxpbmcgdGhhdCAqLworICAgICAg ICAgICAgICAgICAgcyA9IG5hbWVjb3B5OyAgICAgICAgIC8qIHRoZSBuYW1lIHdlIHdlcmUgY2Fs bGVkIHdpdGguICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnMpIHsgICAgICAg ICAgICAgICAgICAgLyogQ29weWluZyBpbnRvIG91ciBhcmd1bWVudD8gKi8KKyAgICAgICAgICAg ICAgICBja3N0cm5jcHkobmFtZSxzLDgwKTsgICAvKiBCYWQgQmFkIEJhZCAqLworICAgICAgICAg ICAgICAgIGlmICggKDgwLXN0cmxlbihuYW1lKSkgPiAoc3RybGVuKHN2Y2J1ZikrMSkgKSB7Cisg ICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChuYW1lLCI6Iiw4MC1zdHJsZW4obmFtZSkpOwor ICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobmFtZSxzdmNidWYsODAtc3RybGVuKG5hbWUp KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXF1 aWV0ICYmICpzCisjaWZuZGVmIE5PSUNQCisgICAgICAgICAgICAgICAgJiYgIWRvY29ueAorI2Vu ZGlmIC8qIE5PSUNQICovCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcHJp bnRmKCIgJXMgY29ubmVjdGVkIG9uIHBvcnQgJXNcbiIscyxwKTsKKyNpZmRlZiBCRVRBREVCVUcK KyAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIHNpbXBseSBmb3IgdGVzdGluZyB0aGUgRE5TIGVu dHJpZXMgKi8KKyAgICAgICAgICAgICAgICBpZiAoaG9zdC0+aF9hbGlhc2VzKSB7CisgICAgICAg ICAgICAgICAgICAgIGNoYXIgKiogYSA9IGhvc3QtPmhfYWxpYXNlczsKKyAgICAgICAgICAgICAg ICAgICAgd2hpbGUgKCphKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBhbGlh cyA9PiAlc1xuIiwqYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhKys7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQkVUQURFQlVHICovCisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXF1aWV0KSBw cmludGYoIkZhaWxlZC5cbiIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghcXVpZXQpIHBy aW50ZigiKE9LKVxuIik7CisgICAgaWYgKCFxdWlldCkgZmZsdXNoKHN0ZG91dCk7CisKKyAgICAv KiBUaGlzIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBkb25lIGJ1dCBqdXN0IGluIGNhc2UgKi8K KyAgICBja3N0cm5jcHkoaXBhZGRyLChjaGFyICopaW5ldF9udG9hKHJfYWRkci5zaW5fYWRkciks MjApOworCisjaWZkZWYgQ0tfU0VDVVJJVFkKKworICAgIC8qIEJlZm9yZSBJbml0aWFsaXphdGlv biBUZWxuZXQvUmxvZ2luIE5lZ290aWF0aW9ucyBJbml0IEtlcmJlcm9zICovCisjaWZuZGVmIE5P SFRUUAorICAgIGlmICh0Y3BfaHR0cF9wcm94eSkgeworICAgICAgICBmb3IgKGk9c3RybGVuKHBy b3h5Y29weSk7IGkgPj0gMCA7IGktLSkKKyAgICAgICAgICAgIGlmICggcHJveHljb3B5W2ldID09 ICc6JyApCisgICAgICAgICAgICAgICAgcHJveHljb3B5W2ldID0gJ1wwJzsKKyAgICB9CisjZW5k aWYgLyogTk9IVFRQICovCisgICAgY2tfYXV0aF9pbml0KAorI2lmbmRlZiBOT0hUVFAKKyAgICAg ICAgICAgICAgICAgdGNwX2h0dHBfcHJveHkgPyBwcm94eWNvcHkgOgorI2VuZGlmIC8qIE5PSFRU UCAqLworICAgICAgICAgICAgICAgICAodGNwX3JkbnMgJiYgaG9zdCAmJiBob3N0LT5oX25hbWUg JiYgaG9zdC0+aF9uYW1lWzBdKSA/CisgICAgICAgICAgICAgICAgIChjaGFyICopaG9zdC0+aF9u YW1lIDogKG5hbWVjb3B5MlswXSA/IG5hbWVjb3B5MiA6IAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChuYW1lY29weVswXSA/IG5hbWVjb3B5IDogaXBhZGRyKSksCisg ICAgICAgICAgICAgICAgIGlwYWRkciwKKyAgICAgICAgICAgICAgICAgdWlkYnVmLAorICAgICAg ICAgICAgICAgICB0dHlmZAorICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIENLX1NFQ1VS SVRZICovCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkg eworICAgICAgICBpZiAoIXNzbF90bl9pbml0KFNTTF9DTElFTlQpKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJuZXRvcGVuIHNzbF90bl9pbml0KCkgZmFpbGVkIiwiIiwwKTsKKyAgICAgICAg ICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7CisgICAgICAgICAgICAgICAgQklPX3ByaW50ZihiaW9f ZXJyLCJzc2xfdG5faW5pdCgpIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgRVJSX3ByaW50 X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsInNzbF90bl9p bml0KCkgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJyb3JzX2ZwKHN0 ZGVycik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGxzX29ubHlfZmxhZyB8fCBz c2xfb25seV9mbGFnKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0b3BlbiBzc2wv dGxzIHJlcXVpcmVkIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogd2Ug d2lsbCBjb250aW51ZSB0byBhY2NlcHQgdGhlIGNvbm5lY3Rpb24gICAqLworICAgICAgICAgICAg Lyogd2l0aG91dCBTU0wgb3IgVExTIHN1cHBvcnQgdW5sZXNzIHJlcXVpcmVkLiAqLworICAgICAg ICAgICAgaWYgKCBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9O R19NVSApCisgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJU X1RMUykgPSBUTl9OR19SRjsKKyAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9TX1VfTU9ERShU RUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCisgICAgICAgICAgICAgICAgVEVMT1BUX0RF Rl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOworICAgICAgICAgICAgaWYg KCBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSAhPSBUTl9OR19NVSApCisg ICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBU Tl9OR19SRjsKKyAgICAgICAgICAgIGlmICggVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfU1RB UlRfVExTKSAhPSBUTl9OR19NVSApCisgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9E RShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOworICAgICAgICB9IGVsc2UgaWYgKCBja19z c2xfb3V0Z29pbmcodHR5ZmQpIDwgMCApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImNrX3Nz bF9vdXRnb2luZygpIGZhaWxlZCIsIiIsMCk7CisgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAq LworCisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOCisjaWZk ZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfSzRMT0dJTiB8fCB0dG5w cm90byA9PSBOUF9FSzRMT0dJTgorICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8 IHR0bnByb3RvID09IE5QX0VLNUxPR0lOCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICAg ICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaW1pbGFyIGRlYWwgZm9yIHJs b2dpbiAqLworICAgICAgICBpZiAocmxvZ19pbmkoKCh0Y3BfcmRucyAmJiBob3N0ICYmIGhvc3Qt PmhfbmFtZSAmJiBob3N0LT5oX25hbWVbMF0pID8KKyAgICAgICAgICAgICAgICAgICAgICAoQ0hB UiAqKWhvc3QtPmhfbmFtZSA6IChDSEFSICopaXBhZGRyKSwKKyAgICAgICAgICAgICAgICAgICAg IHNlcnZpY2UtPnNfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICZsX2FkZHIsJnJfYWRkcgor ICAgICAgICAgICAgICAgICAgICAgKSA8IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInJs b2dpbiBpbml0aWFsaXphdGlvbiBmYWlsZWQiLCIiLDApOworICAgICAgICAgICAgbmV0Y2xvcygp OworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorI2VuZGlm IC8qIFJMT0dDT0RFICovCisgICAgaWYgKHRuX2luaSgpIDwgMCkgeyAgICAgICAgICAgICAgICAg LyogU3RhcnQgVGVsbmV0IG5lZ290aWF0aW9ucy4gKi8KKyAgICAgICAgbmV0Y2xvcygpOworICAg ICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIEdvbmUsIHNvIG9wZW4gZmFp bGVkLiAgKi8KKyAgICB9CisgICAgaWYgKHR0Y2hrKCkgPCAwKSB7CisgICAgICAgIG5ldGNsb3Mo KTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRl ZiBLUkI1X1UyVQorICAgaWYgKCB0dG5wcm90byA9PSBOUF9LNVUyVSApIHsKKyAgICAgICBpZiAo azVfdXNlcl90b191c2VyX2NsaWVudF9hdXRoKCkpIHsKKyAgICAgICAgICAgbmV0Y2xvcygpOwor ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgIH0KKyAgIH0KKyNlbmRpZiAvKiBLUkI1X1Uy VSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyAgICBkZWJ1ZyhGMTAxLCJuZXRvcGVu IHNlcnZpY2UiLCIiLHN2Y251bSk7CisgICAgZGVidWcoRjExMCwibmV0b3BlbiBuYW1lIixuYW1l LDApOworICAgIGRlYnVnKEYxMTAsIm5ldG9wZW4gaXBhZGRyIixpcGFkZHIsMCk7CisgICAgY2tz dHJuY3B5KGhvc3RpcGFkZHIsaXBhZGRyLDYzKTsKKworICAgIGlmIChsY2wpIGlmICgqbGNsIDwg MCkgICAgICAgICAgICAgIC8qIExvY2FsIG1vZGUuICovCisgICAgICAqbGNsID0gMTsKKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEb25lLiAqLworfQorCisvKiAgTiBFIFQgQyBMIE8gUyAgLS0gIENsb3NlIGN1cnJlbnQg bmV0d29yayBjb25uZWN0aW9uLiAgKi8KKworI2lmbmRlZiBOT0xPQ0FMCitfUFJPVE9UWVAoVk9J RCBzbHJlc3RvciwoVk9JRCkpOworI2lmZGVmIENLX1NTTAoraW50IHRsc19ub3Jlc3RvcmUgPSAw OworI2VuZGlmIC8qIENLX1NTTCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworaW50CituZXRj bG9zKCkgeworICAgIHN0YXRpYyBpbnQgY2xvc2VfaW5fcHJvZ3Jlc3MgPSAwOworICAgIGludCB4 ID0gMCwgeSwgejsKKyAgICBkZWJ1ZyhGMTAxLCJuZXRjbG9zIiwiIix0dHlmZCk7CisKKyNpZmRl ZiBORVRMRUJVRgorICAgIGlmICghdHRfcHVzaF9pbml0ZWQpCisgICAgICBsZV9pbml0KCk7Cisj ZW5kaWYgLyogTkVUTEVCVUYgKi8KKworICAgIGlmICh0dHlmZCA9PSAtMSkgICAgICAgICAgICAg ICAgICAgIC8qIFdhcyBvcGVuPyAqLworICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFdhc24ndC4gKi8KKworICAgIGlmIChjbG9zZV9pbl9wcm9ncmVzcykKKyAgICAg IHJldHVybigwKTsKKyAgICBjbG9zZV9pbl9wcm9ncmVzcyA9IDE7ICAgICAgICAgICAgICAvKiBS ZW1lbWJlciAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIGNhbGwg c2hvdWxkIG5vdCBiZSBoZXJlIHNpbmNlIHRoaXMgaXMgYSBkaXJlY3QgY2FsbCAqLworICAgIC8q IGZyb20gYW4gSS9PIHJvdXRpbmUgdG8gYSB1c2VyIGludGVyZmFjZSBsZXZlbCBmdW5jdGlvbi4g IEhvd2V2ZXIsICovCisgICAgLyogdGhlIHJlYWxpdHkgaXMgdGhhdCB3ZSBkbyBub3QgaGF2ZSBw dXJlIGludGVyZmFjZXMuICBJZiB3ZSBldmVyICAgKi8KKyAgICAvKiBkZWNpZGUgdG8gY2xlYW4g dGhpcyB1cCB0aGUgVUkgbGV2ZWwgc2hvdWxkIGFzc2lnbiB0aGlzIGZ1bmN0aW9uICAqLworICAg IC8qIHZpYSBhIHBvaW50ZXIgYXNzaWdubWVudC4gIC0gSmVmZiA5LzEwLzE5OTkgICAgICAgICAg ICAgICAgICAgICAgICovCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKCF0bHNfbm9yZXN0b3JlKQor I2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgc2xyZXN0b3IoKTsKKyNlbmRpZiAvKiBOT0xPQ0FM ICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJ VCk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICBpZiAodHR5ZmQgPiAtMSkgICAgICAgICAgICAgICAg ICAgICAvKiBXYXMuICovCisjZW5kaWYgLyogT1MyICovCisgICAgICB7CisjaWZkZWYgVk1TCisJ ICB5ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb24gbm9uYmxvY2tpbmcg cmVhZHMgKi8KKwkgIHogPSBzb2NrZXRfaW9jdGwodHR5ZmQsRklPTkJJTywmeSk7CisJICBkZWJ1 ZyhGMTExLCJuZXRjbG9zIEZJT05CSU8iLCJvbiIseik7CisjZW5kaWYgLyogVk1TICovCisjaWZk ZWYgVE5DT0RFCisgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1RFTE5FVCkgeworICAgICAg ICAgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0xPR09VVCkKKyNpZmRlZiBDT01NRU5UCisvKiBK ZWZmIDIwMDUvMTIvMzAgKi8KKyNpZmRlZiBDS19TU0wKKwkJICYmICFzc2xfcmF3X2ZsYWcgJiYg IXRsc19yYXdfZmxhZworI2VuZGlmCS8qIENLX1NTTCAqLworI2VuZGlmCS8qIENPTU1FTlQgKi8K KwkJKSB7CisJCS8qIFNlbmQgTE9HT1VUIG9wdGlvbiBiZWZvcmUgY2xvc2UgKi8KKwkJaWYgKHRu X3NvcHQoRE8sVEVMT1BUX0xPR09VVCkgPj0gMCkgeworCQkgICAgVEVMT1BUX1VOQU5TV0VSRURf RE8oVEVMT1BUX0xPR09VVCkgPSAxOworCQkgICAgLyogSXQgd291bGQgYmUgbmljZSB0byBjYWxs IHRuX3dhaXQgYnV0IHdlIGNhbid0ICovCisJCX0KKwkgICAgfQorICAgICAgICAgICAgdG5fcHVz aCgpOwkJCS8qIFBsYWNlIGFueSB3YWl0aW5nIGRhdGEgaW50byBpbnB1dCovCisgICAgICAgICAg fQorI2VuZGlmIC8qIFROQ09ERSAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgIGlmIChzc2xf YWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAg ICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwiY2FsbGluZyBTU0xfc2h1dGRvd25cbiIpOwor ICAgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsX2Nvbik7CisgICAgICAgICAgICAgIHNzbF9h Y3RpdmVfZmxhZyA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0bHNfYWN0aXZlX2Zs YWcpIHsKKyAgICAgICAgICAgICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorICAgICAgICAgICAgICAg IEJJT19wcmludGYoYmlvX2VyciwiY2FsbGluZyBTU0xfc2h1dGRvd25cbiIpOworICAgICAgICAg ICAgICBTU0xfc2h1dGRvd24odGxzX2Nvbik7CisgICAgICAgICAgICAgIHRsc19hY3RpdmVfZmxh ZyA9IDA7CisgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFZNUworICAg ICAgICAgIGNrX2NhbmNpbygpOyAgICAgICAgICAgICAgICAgIC8qIENhbmNlbCBhbnkgb3V0c3Rh bmRpbmcgcmVhZHMuICovCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAg ICAgICB4ID0gc29ja2V0X2Nsb3NlKHR0eWZkKTsgICAgICAvKiBDbG9zZSBpdC4gKi8KKyNlbHNl CisjaWZuZGVmIE9TMgorI2lmZGVmIElCTVgyNQorICAgICAgICBpZiAodHRuZXQgPT0gTkVUX0lY MjUpIHsKKyAgICAgICAgICAgIC8qIHJpZWhtOiBzaG91bGQgc2VuZCBhIGRpc2NfcmVxIC0gYnV0 IG9ubHkgaWYgbGluayBpcyBzdGlsbCBPSyAqLworICAgICAgICAgICAgeCA9IHgyNWNsZWFyKCk7 CisgICAgICAgICAgICBjbG9zZSh0dHlmZCk7CisgICAgICAgICAgICBpZiAoeDI1c2VydmVyZmQp IHsKKyAgICAgICAgICAgICAgICAgIC8qIHdlIHdlcmUgdGhlIHBhc3NpdmUgY2xpZW50IG9mIGEg c2VydmVyLCBub3cgd2UKKyAgICAgICAgICAgICAgICAgICAqIGdvIGJhY2sgdG8gYmVpbmcgdGhl IG5vcm1hbCBjbGllbnQuCisgICAgICAgICAgICAgICAgICAgKiBJIGhvcGUgdGhhdCBrZXJtaXQg Y2FuIGNvcGUgd2l0aCB0aGUgbG9naWMgdGhhdAorICAgICAgICAgICAgICAgICAgICogdGhlcmUg Y2FuIHN0aWxsIGJlIGEgY29ubmVjdGlvbiBhZnRlciBuZXRjbG9zCisgICAgICAgICAgICAgICAg ICAgKiBoYXMgYmVlbiBjYWxsZWQuCisgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg ICAgICAgIHR0eWZkID0geDI1c2VydmVyZmQ7CisgICAgICAgICAgICAgICAgICB4MjVzZXJ2ZXJm ZCA9IDA7CisgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICogbmVlZCB0 byBjbG9zZSB0aGUgc2VydmVyIGNvbm5lY3Rpb24gdG9vIC0gYmVjYXVzZQorICAgICAgICAgICAg ICAgICAgICogYWxsIGZpbGUgZGVzY3JpcHRvcnMgY29ubmVjdGVkIHRvIHRoZSBOUEkgaGF2ZSB0 aGUKKyAgICAgICAgICAgICAgICAgICAqIHNhbWUgc3RhdHVzLgorICAgICAgICAgICAgICAgICAg ICoKKyAgICAgICAgICAgICAgICAgICAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgYW55IHdhaXRpbmcg Y29ubmVjdGlvbnMgZ2V0CisgICAgICAgICAgICAgICAgICAgKiBsb3N0LCB0aGUgY2xpZW50IGRv ZXNuJ3QgcmVhbGlzZSwgYW5kIGhhbmdzLgorICAgICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHgyNV9z dGF0ZSA9IFgyNV9DTE9TRUQ7ICAgICAvKiByaWVobTogZGVhZCBjb2RlPyAqLworICAgICAgICB9 IGVsc2UKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyAgICAgICAgICB4ID0gY2xvc2UodHR5ZmQpOwor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICB9CisgICAgdHR5 ZmQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFyayBpdCBhcyBjbG9zZWQuICov CisgICAgd2FzY2xvc2VkID0gMTsKKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVENQSVBNdXRleCgp OworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIFROQ09ERQorI2lmZGVmIENLX0ZPUldBUkRfWAor ICAgIGZ3ZHhfY2xvc2VfYWxsKCk7ICAgICAgICAgICAgICAgICAgIC8qIFNodXQgZG93biBhbnkg Rm9yd2FyZCBYIHNvY2tldHMgKi8KKyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyAgICB0bl9y ZXNldCgpOyAgICAgICAgICAgICAgICAgICAvKiBUaGUgUmVzZXQgVGVsbmV0IE9wdGlvbiB0YWJs ZS4gICovCisgICAgZGVidWcoRjEwMCwibmV0Y2xvc2Ugc2V0dGluZyB0bl9pbml0ID0gMCIsIiIs MCk7CisgICAgdG5faW5pdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIg YWJvdXQgdGVsbmV0IHByb3RvY29sLi4uICovCisgICAgc3N0ZWxuZXQgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2xpZW50LXNpZGUgVGVsbmV0ICovCisjZW5kaWYgLyogVE5DT0RFICov CisgICAgKmlwYWRkciA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgLyogWmVybyB0aGUgSVAg YWRkcmVzcyBzdHJpbmcgKi8KKyAgICB0Y3BfaW5jb21pbmcgPSAwOyAgICAgICAgICAgICAgICAg ICAvKiBObyBsb25nZXIgaW5jb21pbmcgKi8KKyAgICAvKiBEb24ndCByZXNldCB0dG5wcm90byBz byB0aGF0IHdlIGNhbiByZW1lbWJlciB3aGljaCBwcm90b2NvbCBpcyBpbiB1c2UgKi8KKworI2lm ZGVmIFRDUElQTElCCisvKgorICBFbXB0eSB0aGUgaW50ZXJuYWwgYnVmZmVycyBzbyB0aGV5IHdv bid0IGJlIHVzZWQgYXMgaW52YWxpZCBpbnB1dCBvbgorICB0aGUgbmV4dCBjb25uZWN0IGF0dGVt cHQgKHJsb2dpbikuCisqLworICAgIHR0aWJwID0gMDsKKyAgICB0dGlibiA9IDA7CisjZW5kaWYg LyogVENQSVBMSUIgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworICAgIC8qIElmIHdlIGFyZSBhdXRv bWF0aWNhbGx5IGRlc3Ryb3lpbmcgS2VyYmVyb3MgY3JlZGVudGlhbHMgb24gQ2xvc2UgKi8KKyAg ICAvKiBkbyBpdCBub3cuICovCisjaWZkZWYgS1JCNAorICAgIGlmIChrcmI0X2F1dG9kZWwgPT0g S1JCX0RFTF9DTCkgeworICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9vcF9kYXRhIGtyYl9vcDsK KyAgICAgICAga3JiX29wLnZlcnNpb24gPSA0OworICAgICAgICBrcmJfb3AuY2FjaGUgPSBOVUxM OworICAgICAgICBja19rcmI0X2Rlc3Ryb3koJmtyYl9vcCk7CisgICAgfQorI2VuZGlmIC8qIEtS QjQgKi8KKyNpZmRlZiBLUkI1CisgICAgaWYgKGtyYjVfYXV0b2RlbCA9PSBLUkJfREVMX0NMKSB7 CisgICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wOworICAgICAgICBleHRl cm4gY2hhciAqIGtyYjVfZF9jYzsKKyAgICAgICAga3JiX29wLnZlcnNpb24gPSA1OworICAgICAg ICBrcmJfb3AuY2FjaGUgPSBrcmI1X2RfY2M7CisgICAgICAgIGNrX2tyYjVfZGVzdHJveSgma3Ji X29wKTsKKyAgICB9CisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICov CisgICAgY2xvc2VfaW5fcHJvZ3Jlc3MgPSAwOyAgICAgICAgICAgICAgLyogUmVtZW1iZXIgd2Ug YXJlIGRvbmUuICovCisgICAgcmV0dXJuKHgpOworfQorCisjaWZkZWYgT1MyCitpbnQKK29zMnNv Y2tldGVycm9yKCBpbnQgc19lcnJubyApIHsKKyNpZmRlZiBPUzJPTkxZCisgICAgaWYgKHNfZXJy bm8gPiAwICYmIHNfZXJybm8gPD0gU09DQkFTRUVSUikgeworICAgICAgICAvKiBpbiBPUy8yLCB0 aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aHJlYWRpbmcgaW4gdGhhdAorICAgICAgICAgKiB0aGUg dmFsdWUgb2YgZXJybm8gaXMgbm90IHRocmVhZCBzYWZlLiAgSXQgY2FuIGJlCisgICAgICAgICAq IHNldCB0byBhIHZhbHVlIGZyb20gYSBwcmV2aW91cyBsaWJyYXJ5IGNhbGwgYW5kIGlmCisgICAg ICAgICAqIGl0IHdhcyBub3QgY2xlYXJlZCBpdCB3aWxsIGFwcGVhciBoZXJlLiAgT25seSB0cmVh dAorICAgICAgICAgKiB2YWxpZCBzb2NrZXQgZXJyb3IgY29kZXMgYXMgZXJyb3JzIGluIHRoaXMg ZnVuY3Rpb24uCisgICAgICAgICAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJvczJzb2NrZXRlcnJv ciBlcnJuby5oIiwiIiwwKTsKKyAgICAgICAgc29ja2V0X2Vycm5vID0gMDsKKyAgICAgICAgcmV0 dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBPUzJPTkxZICovCisKKyAgICBzd2l0Y2ggKHNfZXJy bm8pIHsKKyAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOTyBFUlJP UiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJvczJzb2NrZXRlcnJvciBOT0VSUk9SIiwiIiwwKTsK KyAgICAgICAgcmV0dXJuKDApOworI2lmZGVmIE5UCisgICAgICBjYXNlIFdTQUVDT05OUkVTRVQ6 CisjZWxzZSAvKiBOVCAqLworICAgICAgY2FzZSBTT0NFQ09OTlJFU0VUOgorICAgICAgY2FzZSBT T0NFQ09OTlJFU0VUIC0gU09DQkFTRUVSUjoKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBkZWJ1 ZyhGMTAwLCJvczJzb2NrZXRlcnJvciBFQ09OUkVTRVQiLCIiLDApOworICAgICAgICB0bl9kZWJ1 ZygiRUNPTlJFU0VUIik7CisgICAgICAgIG5ldGNsb3MoKTsgICAgICAgICAgICAgIC8qICoqKiAq KiogKi8KKyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBpcyBi cm9rZW4uICovCisjaWZkZWYgTlQKKyAgICAgIGNhc2UgV1NBRUNPTk5BQk9SVEVEOgorI2Vsc2Ug LyogTlQgKi8KKyAgICAgIGNhc2UgU09DRUNPTk5BQk9SVEVEOgorICAgICAgY2FzZSBTT0NFQ09O TkFCT1JURUQgLSBTT0NCQVNFRVJSOgorI2VuZGlmIC8qIE5UICovCisgICAgICAgIGRlYnVnKEYx MDAsIm9zMnNvY2tldGVycm9yIEVDT05OQUJPUlRFRCIsIiIsMCk7CisgICAgICAgIHRuX2RlYnVn KCJFQ09OTkFCT1JURUQiKTsKKyAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgLyogKioq ICoqKiAqLworICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlz IGJyb2tlbi4gKi8KKyNpZmRlZiBOVAorICAgICAgY2FzZSBXU0FFTkVUUkVTRVQ6CisjZWxzZSAv KiBOVCAqLworICAgICAgY2FzZSBTT0NFTkVUUkVTRVQ6CisgICAgICBjYXNlIFNPQ0VORVRSRVNF VCAtIFNPQ0JBU0VFUlI6CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgZGVidWcoRjEwMCwib3My c29ja2V0ZXJyb3IgRU5FVFJFU0VUIiwiIiwwKTsKKyAgICAgICAgdG5fZGVidWcoIkVORVRSRVNF VCIpOworICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAvKiAqKiogKioqICovCisgICAg ICAgIHJldHVybigtMSk7ICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgYnJva2VuLiAqLwor I2lmZGVmIE5UCisgICAgICBjYXNlIFdTQUVOT1RDT05OOgorI2Vsc2UgLyogTlQgKi8KKyAgICAg IGNhc2UgU09DRU5PVENPTk46CisgICAgICBjYXNlIFNPQ0VOT1RDT05OIC0gU09DQkFTRUVSUjoK KyNlbmRpZiAvKiBOVCAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJvczJzb2NrZXRlcnJvciBFTk9U Q09OTiIsIiIsMCk7CisgICAgICAgIHRuX2RlYnVnKCJFTk9UQ09OTiIpOworICAgICAgICBuZXRj bG9zKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICoqKiAqKiogKi8KKyAgICAgICAgcmV0dXJu KC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlzIGJyb2tlbi4gKi8KKyNp ZmRlZiBOVAorICAgICAgY2FzZSBXU0FFU0hVVERPV046CisgICAgICAgIGRlYnVnKEYxMDAsIm9z MnNvY2tldGVycm9yIEVTSFVURE9XTiIsIiIsMCk7CisgICAgICAgIHRuX2RlYnVnKCJFU0hVVERP V04iKTsKKyAgICAgICAgbmV0Y2xvcygpOyAgICAgICAgICAgICAgICAgICAgICAvKiAqKiogKioq ICovCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlv biBpcyBicm9rZW4uICovCisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBOVAorICAgICAgY2FzZSBX U0FFV09VTERCTE9DSzoKKyNlbHNlCisgICAgICBjYXNlIFNPQ0VXT1VMREJMT0NLOgorICAgICAg Y2FzZSBTT0NFV09VTERCTE9DSyAtIFNPQ0JBU0VFUlI6CisjZW5kaWYgLyogTlQgKi8KKyAgICAg ICAgZGVidWcoRjEwMCwib3Myc29ja2V0ZXJyb3IgRVdPVUxEQkxPQ0siLCIiLDApOworICAgICAg ICByZXR1cm4oMCk7CisjaWZkZWYgTlQKKyAgICAgIGNhc2UgRVJST1JfSU9fSU5DT01QTEVURToK KyAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgIGNhc2UgRVJST1JfT1BFUkFUSU9O X0FCT1JURUQ6CisgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgZGVm YXVsdDoKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2Vu ZGlmIC8qIE9TMiAqLworCisvKiAgTiBFIFQgVCBDIEggSyAgLS0gIENoZWNrIGlmIG5ldHdvcmsg dXAsIGFuZCBob3cgbWFueSBieXRlcyBjYW4gYmUgcmVhZCAqLworLyoKKyAgUmV0dXJucyBudW1i ZXIgb2YgYnl0ZXMgd2FpdGluZywgb3IgLTEgaWYgY29ubmVjdGlvbiBoYXMgYmVlbiBkcm9wcGVk LgorKi8KK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBo b3cgbWFueSBieXRlcyBhcmUgcmVhZHkgKi8KK25ldHRjaGsoKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBmb3IgcmVhZGluZyBmcm9tIG5ldHdvcmsgKi8KKyNpZmRlZiBUQ1BJUExJ QgorICAgIGxvbmcgY291bnQgPSAwOworICAgIGludCB4ID0gMCwgejsKKyAgICBsb25nIHk7Cisg ICAgY2hhciBjOworICAgIGludCByYzsKKyNpZmRlZiBOVAorICAgIGV4dGVybiBpbnQgaW9ub2Js b2NrOyAgICAgICAgICAgICAgIC8qIEZvciBPdmVybGFwcGVkIEkvTyAqLworI2VuZGlmIC8qIE5U ICovCisKKyAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIGVudHJ5IHR0aWJuIiwiIix0dGlibik7Cisg ICAgZGVidWcoRjEwMSwibmV0dGNoayBlbnRyeSB0dGlicCIsIiIsdHRpYnApOworCisjaWZkZWYg TkVUTEVCVUYKKyAgICB7CisgICAgICAgIGludCBuID0gMDsKKyAgICAgICAgaWYgKHR0cHVzaCA+ PSAwKQorICAgICAgICAgIG4rKzsKKyAgICAgICAgbiArPSBsZV9pbmJ1ZigpOworICAgICAgICBp ZiAobiA+IDApCisgICAgICAgICAgcmV0dXJuKG4pOworICAgIH0KKyNlbmRpZiAvKiBORVRMRUJV RiAqLworCisjaWZuZGVmIE9TMgorI2lmbmRlZiBCRUJPWAorICAgIHNvY2tldF9lcnJubyA9IDA7 IC8qIFRoaXMgaXMgYSBmdW5jdGlvbiBjYWxsIGluIE5ULCBhbmQgQmVPUyAqLworI2VuZGlmIC8q IEJFQk9YICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAodHR5ZmQgPT0gLTEpIHsKKyAg ICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBzb2NrZXQgaXMgY2xvc2VkIiwiIiwwKTsKKyAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICB9CisvKgorICBOb3RlOiB0aGlzIHNvY2tldF9pb2N0bCgpIGNh bGwgZG9lcyBOT1QgcmV0dXJuIGFuIGVycm9yIGlmIHRoZQorICBjb25uZWN0aW9uIGhhcyBiZWVu IGJyb2tlbi4gIChBdCBsZWFzdCBub3QgaW4gTXVsdGlOZXQuKQorKi8KKyNpZmRlZiBDT01NRU5U CisvKiAgQW5vdGhlciB0cmljayB0aGF0IGNhbiBiZSB0cmllZCBoZXJlIGlzIHNvbWV0aGluZyBs aWtlIHRoaXM6ICovCisKKyAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKKyAgICAgICAgY2hh ciBkdW1teTsKKyAgICAgICAgeCA9IHJlYWQodHR5ZmQsJmR1bW15LDApOyAgICAgICAvKiBUcnkg dG8gcmVhZCBub3RoaW5nICovCisgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAg ICAgLyogIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIgKi8KKyAgICAgICAgICAgIHBlcnJvcigi VENQL0lQIik7ICAgICAgICAgICAvKiBvciBzb21lc3VjaC4uLiAqLworICAgICAgICAgICAgdHRj bG9zKDApOyAgICAgICAgICAgICAgICAgIC8qIENsb3NlIG91ciBlbmQgdG9vLiAqLworICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICov CisKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcpIHsKKyNpZm5kZWYg SUtTRE9OTFkKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKCBJc0Nvbm5lY3RNb2RlKCkgKSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrIChzc2xfYWN0aXZlX2ZsYWcpIHJldHVybnMi LCIiLGNvdW50KTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIElLU0RPTkxZICovCisgICAgICAgIGNvdW50ID0gU1NMX3BlbmRp bmcoc3NsX2Nvbik7CisgICAgICAgIGlmIChjb3VudCA8IDApIHsKKyAgICAgICAgICAgIGRlYnVn KEYxMTEsIm5ldHRjaGsiLCJTU0xfcGVuZGluZyBlcnJvciIsY291bnQpOworICAgICAgICAgICAg bmV0Y2xvcygpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoIGNvdW50ID4gMCApCisgICAgICAgICAgICByZXR1cm4oY291bnQpOyAgICAgICAgICAgICAg ICAgIC8qIERvbid0IHBlcmZvcm0gYSByZWFkICovCisgICAgfSBlbHNlIGlmICh0bHNfYWN0aXZl X2ZsYWcpIHsKKyNpZm5kZWYgSUtTRE9OTFkKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKCBJc0Nv bm5lY3RNb2RlKCkgKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0Y2hrICh0bHNfYWN0 aXZlX2ZsYWcpIHJldHVybnMiLCIiLGNvdW50KTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIElLU0RPTkxZICovCisgICAgICAg IGNvdW50ID0gU1NMX3BlbmRpbmcodGxzX2Nvbik7CisgICAgICAgIGlmIChjb3VudCA8IDApIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRjaGsiLCJUTFNfcGVuZGluZyBlcnJvciIsY291 bnQpOworICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoIGNvdW50ID4gMCApCisgICAgICAgICAgICByZXR1cm4oY291 bnQpOyAgICAgICAgICAgICAgICAgIC8qIERvbid0IHBlcmZvcm0gYSByZWFkICovCisgICAgfSBl bHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoc29ja2V0X2lvY3RsKHR0eWZkLEZJ T05SRUFELAorI2lmZGVmIENPTU1FTlQKKyAgICAvKiBOb3cgd2UndmUgY2hhbmdlZCB0aGUgaW9j dGwoLi4sLi4seCkgcHJvdG90eXBlIGZvciBERUNDIHRvICh2b2lkICopICovCisjaWZkZWYgX19E RUNDCisgICAgLyogTk9URTogIiZjb3VudCIgbWlnaHQgbmVlZCB0byBiZSAiKGNoYXIgKikmY291 bnQiIGluIHNvbWUgc2V0dGluZ3MuICovCisgICAgICAgICAgICAgICAgICAgICAvKiBDYXN0IG5l ZWRlZCBmb3IgREVDQyA0LjEgJiBsYXRlcj8gKi8KKyAgICAgICAgICAgICAgICAgICAgIC8qIE1h eWJlLCBidXQgX19ERUNDX1ZFUiBvbmx5IGV4aXN0cyBpbiA1LjAgYW5kIGxhdGVyICovCisgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKQorI2VuZGlmIC8qIF9fREVDQyAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgICZjb3VudAorICAgICAgICAgICAgICAg ICAgICAgKSA8IDApIHsKKyAgICAgICAgZGVidWcoRjEwMSwibmV0dGNoayBzb2NrZXRfaW9jdGwg ZXJyb3IiLCIiLHNvY2tldF9lcnJubyk7CisgICAgICAgIC8qIElmIHRoZSBjb25uZWN0aW9uIGlz IGdvbmUsIHRoZSBjb25uZWN0aW9uIGlzIGdvbmUuICovCisgICAgICAgIG5ldGNsb3MoKTsKKyNp ZmRlZiBOVF9UQ1BfT1ZFUkxBUFBFRAorICAgICAgICAvKiBJcyB0aGVyZSBhbnl0aGluZyBpbiB0 aGUgb3ZlcmxhcHBlZCBJL08gYnVmZmVycz8gKi8KKyAgICAgICAgY291bnQgKz0gT3ZlcmxhcHBl ZERhdGFXYWl0aW5nKCk7CisjZW5kaWYgLyogTlRfVENQX09WRVJMQVBQRUQgKi8KKyAgICAgICAg Y291bnQgKz0gdHRpYm47CisgICAgICAgIHJldHVybihjb3VudD4wP2NvdW50Oi0xKTsKKyAgICB9 CisgICAgZGVidWcoRjEwMSwibmV0dGNoayBjb3VudCIsIiIsY291bnQpOworI2lmZGVmIE5UX1RD UF9PVkVSTEFQUEVECisgICAgLyogSXMgdGhlcmUgYW55dGhpbmcgaW4gdGhlIG92ZXJsYXBwZWQg SS9PIGJ1ZmZlcnM/ICovCisgICAgY291bnQgKz0gT3ZlcmxhcHBlZERhdGFXYWl0aW5nKCk7Cisg ICAgZGVidWcoRjEwMSwibmV0dGNoayBjb3VudCB3L292ZXJsYXBwZWQiLCIiLGNvdW50KTsKKyNl bmRpZiAvKiBOVF9UQ1BfT1ZFUkxBUFBFRCAqLworCisjaWZkZWYgT1MyCisjaWZuZGVmIElLU0RP TkxZCisgICAgaWYgKCBJc0Nvbm5lY3RNb2RlKCkgKSB7CisgICAgICAgIGRlYnVnKEYxMDEsIm5l dHRjaGsgKEZJT05SRUFEKSByZXR1cm5zIiwiIixjb3VudCk7CisgICAgICAgIHJldHVybihjb3Vu dCk7CisgICAgfQorI2VuZGlmIC8qIElLU0RPTkxZICovCisjZW5kaWYgLyogT1MyICovCisKKy8q IEZvciB0aGUgc2FrZSBvZiBlZmZpY2llbmN5LCBpZiB0aGVyZSBpcyBzdGlsbCBkYXRhIGluIHRo ZSB0dGlidWYgKi8KKy8qIGRvIG5vdCBnbyB0byB0aGUgYm90aGVyIG9mIGNoZWNraW5nIHRvIHNl ZSBvZiB0aGUgY29ubmVjdGlvbiBpcyAgKi8KKy8qIHN0aWxsIHZhbGlkLiAgVGhlIGhhbmRsZSBp cyBzdGlsbCBnb29kLCBzbyBqdXN0IHJldHVybiB0aGUgY291bnQgKi8KKy8qIG9mIHRoZSBieXRl cyB0aGF0IHdlIGFscmVhZHkgaGF2ZSBsZWZ0IHRvIHByb2Nlc3MuICAgICAgICAgICAgICAgKi8K KyNpZmRlZiBPUzIKKyAgICBpZiAoIGNvdW50ID4gMCB8fCB0dGlibiA+IDAgKSB7CisgICAgICAg IGNvdW50Kz10dGlibjsKKyAgICAgICAgZGVidWcoRjEwMSwibmV0dGNoayAoY291bnQrdHRpYm4g PiAwKSByZXR1cm5zIiwiIixjb3VudCk7CisgICAgICAgIHJldHVybihjb3VudCk7CisgICAgfSBl bHNlIHsKKyAgICAgICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJVCk7Cisg ICAgICAgIGlmICggdHRpYm4gPT0gMCApCisgICAgICAgICAgICB0dGlicCA9IDA7ICAgICAgLyog cmVzZXQgZm9yIG5leHQgcmVhZCAqLworICAgIH0KKyNlbHNlIC8qIE9TMiAqLworICAgIGlmICgg Y291bnQgPiAwIHx8IHR0aWJuID4gMCApIHsKKyAgICAgICAgZGVidWcoRjEwMSwibmV0dGNoayBy ZXR1cm5zIiwiIixjb3VudCt0dGlibik7CisgICAgICAgIHJldHVybihjb3VudCt0dGlibik7Cisg ICAgfQorICAgIHR0aWJuID0gdHRpYnAgPSAwOworI2VuZGlmIC8qIE9TMiAqLworCisvKgorICBU aGUgZm9sbG93aW5nIGNvZGUgd29ya3Mgd2VsbCBpbiBtb3N0IHNldHRpbmdzLCBidXQgbWVzc2Vz IHRoaW5ncyB1cCBpbgorICBvdGhlcnMsIGluY2x1ZGluZyBDTVUvVGVrIFRDUC9JUCBhbmQgVUNY IDIuMCwgd2hlcmUgaXQgc29tZWhvdyBtYW5hZ2VzIHRvCisgIG1ha2UgaXQgaW1wb3NzaWJsZSB0 byBldmVyIG1ha2UgYSBuZXcgY29ubmVjdGlvbiB0byB0aGUgc2FtZSBob3N0IGFnYWluIHdpdGgK KyAgQ09OTkVDVCwgb25jZSBpdCBoYXMgYmVlbiBsb2dnZWQgb3V0IGZyb20gdGhlIGZpcnN0IHRp bWUuICBOb3QgZXZlbiBpZiB5b3UKKyAgSEFOR1VQIGZpcnN0LCBvciBTRVQgSE9TVDxDUj4sIG9y IFNFVCBMSU5FPENSPi4gIFJlcG9ydGVkbHksIGhvd2V2ZXIsIGl0CisgIGRvZXMgd29yayBPSyBp biBsYXRlciByZWxlYXNlcyBvZiBVQ1guICBCdXQgdGhlcmUgaXMgbm8gd2F5IHdlIGNhbgorICBh Y2NvbW1vZGF0ZSBib3RoIG9sZCBhbmQgbmV3IC0tIHdlIG1pZ2h0IGhhdmUgc3RhdGljIGxpbmtp bmcgb3IgZHluYW1pYworICBsaW5raW5nLCBldGMgZXRjLiAgSWYgd2UgaGF2ZSBzdGF0aWMsIEkg b25seSBoYXZlIGFjY2VzcyB0byAyLjAsIHdoZXJlIHRoaXMKKyAgZG9lc24ndCB3b3JrLCBldGMg ZXRjIGJsYWggYmxhaC4KKworICBJbiB0aGUgZm9sbG93aW5nIGxpbmVzLCB3ZSBkZWZpbmUgYSBz eW1ib2wgTk9DT1VOVCBmb3IgYnVpbGRzIHdoZXJlIHdlIHdhbnQKKyAgdG8gb21pdCB0aGlzIGNv ZGUuICBCeSBkZWZhdWx0LCBpdCBpcyBvbWl0dGVkIGZvciBDTVUvVGVrLiAgWW91IGNhbiBmb3Jj ZQorICBvbWlzc2lvbiBvZiBpdCBmb3Igb3RoZXIgY29tYmluYXRpb25zIGJ5IGRlZmluaW5nIE5P Q09VTlQgaW4gQ0ZMQUdTLiAgWW91CisgIGNhbiBmb3JjZSBpbmNsdXNpb24gb2YgdGhpcyBjb2Rl LCBldmVuIGZvciBDTVUvVGVrLCBieSBpbmNsdWRpbmcgTk9OT0NPVU5UCisgIGluIENGTEFHUy4K KyovCisjaWZkZWYgTk9OT0NPVU5UCisjaWZkZWYgTk9DT1VOVAorI3VuZGVmIE5PQ09VTlQKKyNl bmRpZiAvKiBOT0NPVU5UICovCisjZWxzZQorI2lmbmRlZiBOT0NPVU5UCisjaWZkZWYgQ01VX1RD UElQCisjZGVmaW5lIE5PQ09VTlQKKyNlbmRpZiAvKiBDTVVfVENQSVAgKi8KKyNlbmRpZiAvKiBO T0NPVU5UICovCisjZW5kaWYgLyogTk9OT0NPVU5UICovCisKKworICAgIC8qIEZyb20gdGhpcyBw b2ludCBmb3J3YXJkIHdlIGhhdmUgYSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiBpbiBLOTUKKyAg ICAgKiBkdWUgdG8gaXRzIHVzZSBvZiBtdWx0aXBsZSB0aHJlYWRzLiAgVGhlcmVmb3JlLCB3ZSBt dXN0IGVuc3VyZQorICAgICAqIHRoYXQgb25seSBvbmUgdGhyZWFkIGF0dGVtcHQgdG8gcmVhZC93 cml0ZSBmcm9tIHRoZSBzb2NrZXQgYXQgYQorICAgICAqIHRpbWUuICBPdGhlcndpc2UsIGl0IGlz IHBvc3NpYmxlIGZvciBhIGJ1ZmZlciB0byBiZSBvdmVyd3JpdHRlbi4KKyAgICAgKi8KKyAgICAv KiB3ZSBrbm93IG5vdyB0aGF0IGNvdW50ID49IDAgYW5kIHRoYXQgdHRpYm4gPT0gMCAqLworCisg ICAgaWYgKGNvdW50ID09IDAKKyNpZmRlZiBSTE9HQ09ERQorI2lmZGVmIENLX0tFUkJFUk9TCisg ICAgICAgICYmIHR0bnByb3RvICE9IE5QX0VLNExPR0lOICYmIHR0bnByb3RvICE9IE5QX0VLNUxP R0lOCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAg ICAgICApIHsKKyAgICAgICAgaW50IHNfZXJybm8gPSAwOworI2lmbmRlZiBOT0NPVU5UCisvKgor ICBIZXJlIHdlIG5lZWQgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgMCBjb3VudCBv biBhbiBhY3RpdmUKKyAgY29ubmVjdGlvbiwgYW5kIGEgMCBjb3VudCBiZWNhdXNlIHRoZSByZW1v dGUgZW5kIG9mIHRoZSBzb2NrZXQgYnJva2UgdGhlCisgIGNvbm5lY3Rpb24uICBUaGVyZSBpcyBu byBtZWNoYW5pc20gaW4gVEdWIE11bHRpTmV0IChvciBXSU4vVENQPykgdG8gcXVlcnkKKyAgdGhl IHN0YXR1cyBvZiB0aGUgY29ubmVjdGlvbiwgc28gd2UgaGF2ZSB0byBkbyBhIHJlYWQuICAtMSBt ZWFucyB0aGVyZSB3YXMKKyAgbm8gZGF0YSBhdmFpbGFibGUgKHNvY2tldF9lcnJubyA9PSBFV09V TERCTE9DSyksIDAgbWVhbnMgdGhlIGNvbm5lY3Rpb24gaXMKKyAgZG93bi4gIEJ1dCBpZiwgYnkg Y2hhbmNlLCB3ZSBhY3R1YWxseSBnZXQgYSBjaGFyYWN0ZXIsIHdlIGhhdmUgdG8gcHV0IGl0Cisg IHdoZXJlIGl0IHdvbid0IGJlIGxvc3QuCisqLworI2lmbmRlZiBOT05fQkxPQ0tfSU8KKyNpZmRl ZiBPUzIKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgUmVxdWVzdFNTTE11dGV4KFNFTV9JTkRFRklO SVRFX1dBSVQpOworI2VuZGlmIC8qIENLX1NTTCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICB5ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb24gbm9uYmxvY2tpbmcg cmVhZHMgKi8KKyAgICAgICAgeiA9IHNvY2tldF9pb2N0bCh0dHlmZCxGSU9OQklPLCZ5KTsKKyAg ICAgICAgZGVidWcoRjExMSwibmV0dGNoayBGSU9OQklPIiwib24iLHopOworI2lmZGVmIE9TMgor I2lmZGVmIENLX1NTTAorICAgICAgICBSZWxlYXNlU1NMTXV0ZXgoKTsKKyNlbmRpZiAvKiBDS19T U0wgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT05fQkxPQ0tfSU8gKi8KKyNpZmRl ZiBOVF9UQ1BfT1ZFUkxBUFBFRAorICAgICAgICBpb25vYmxvY2sgPSAxOyAgICAgICAgICAgICAg ICAgIC8qIEZvciBPdmVybGFwcGVkIEkvTyAqLworI2VuZGlmIC8qIE5UX1RDUF9PVkVSTEFQUEVE ICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmICggc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19h Y3RpdmVfZmxhZyApIHsKKyNpZmRlZiBPUzIKKwkgIHNzbF9yZWFkOgorICAgICAgICAgICAgeCA9 IFNTTF9yZWFkKCBzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAmdHRpYnVmW3R0aWJwK3R0aWJuXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgVFRJQlVGTC10dGlicC10dGlibiApOworICAgICAgICAgICAgc3dpdGNoIChTU0xfZ2V0 X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24seCkpIHsKKyAgICAgICAgICAg IGNhc2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dGNo ayBTU0xfRVJST1JfTk9ORSIsIngiLHgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJuZXR0Y2hrIFNTTF9FUlJPUl9XQU5UX1dSSVRFIiwiIiwwKTsKKyAgICAgICAgICAgICAg ICB4ID0gLTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNTTF9F UlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBTU0xf RVJST1JfV0FOVF9SRUFEIiwiIiwwKTsKKyAgICAgICAgICAgICAgICB4ID0gLTE7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAg ICAgICAgICAgICAgIGlmICggeCA9PSAwICkgeyAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICAg ICAgbmV0Y2xvcygpOworICAgICAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAg ICAgICAgICBnb3RvIG5ldHRjaGtfcmV0dXJuOworICAgICAgICAgICAgICB9IGVsc2UgeworI2lm ZGVmIE5UCisgICAgICAgICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7CisjZW5k aWYgLyogTlQgKi8KKyNpZm5kZWYgTk9OX0JMT0NLX0lPCisjaWZkZWYgT1MyCisjaWZkZWYgQ0tf U1NMCisJCSAgUmVxdWVzdFNTTE11dGV4KFNFTV9JTkRFRklOSVRFX1dBSVQpOworI2VuZGlmIC8q IENLX1NTTCAqLworI2VuZGlmIC8qIE9TMiAqLworCQkgIHkgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogVHVybiBvZmYgbm9uYmxvY2tpbmcgcmVhZHMgKi8KKwkJICB6ID0gc29ja2V0 X2lvY3RsKHR0eWZkLEZJT05CSU8sJnkpOworCQkgIGRlYnVnKEYxMTEsIm5ldHRjaGsgRklPTkJJ TyIsIm9mZiIseik7CisjaWZkZWYgT1MyCisjaWZkZWYgQ0tfU1NMCisJCSAgUmVsZWFzZVNTTE11 dGV4KCk7CisjZW5kaWYgLyogQ0tfU1NMICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyog Tk9OX0JMT0NLX0lPICovCisjaWZkZWYgTlRfVENQX09WRVJMQVBQRUQKKwkJICBpb25vYmxvY2sg PSAwOyAgICAgICAgICAgICAgICAgIC8qIEZvciBPdmVybGFwcGVkIEkvTyAqLworI2VuZGlmIC8q IE5UX1RDUF9PVkVSTEFQUEVEICovCisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsIm5ldHRjaGsgU1NMX0VSUk9SX1NZU0NBTEwiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICJHZXRMYXN0RXJyb3IoKSIsZ2xlKTsKKyAgICAgICAgICAgICAgICAgIHJjID0gb3Myc29j a2V0ZXJyb3IoZ2xlKTsKKyAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSAtMSkKKyAgICAgICAg ICAgICAgICAgICAgICByYyA9IC0yOworICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHJjID09 IC0yICkKKyAgICAgICAgICAgICAgICAgICAgICByYyA9IC0xOworCQkgIGdvdG8gbmV0dGNoa19y ZXR1cm47CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9P S1VQIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1NM X0VSUk9SX1NTTDoKKyAgICAgICAgICAgICAgICBpZiAoYmlvX2VyciE9TlVMTCkgeworICAgICAg ICAgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciBz c2xfZXJyW107CisgICAgICAgICAgICAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwibmV0dGNo aygpIFNTTF9FUlJPUl9TU0xcbiIpOworICAgICAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJy b3JzKGJpb19lcnIpOworICAgICAgICAgICAgICAgICAgICBsZW4gPSBCSU9fcmVhZChiaW9fZXJy LHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgICAgICAgICAgICAgc3NsX2VycltsZW4g PCBTU0xfRVJSX0JGU1ogPyBsZW4gOiBTU0xfRVJSX0JGU1pdID0gJ1wwJzsKKyAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwibmV0dGNoayBTU0xfRVJST1JfU1NMIixzc2xfZXJyLDApOwor ICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoc3NsX2Vycik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzc2xf ZGVidWdfZmxhZykgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0Y2hrIFNT TF9FUlJPUl9TU0wiLCIiLDApOworICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsK KyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIm5ldHRjaGsoKSBTU0xfRVJST1Jf U1NMXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIp OworICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgbmV0 Y2xvcygpOworICAgICAgICAgICAgICAgIHJjID0gLTE7CisJCWdvdG8gbmV0dGNoa19yZXR1cm47 CisjZWxzZQorICAgICAgICAgICAgICAgIHggPSAtMTsKKwkJYnJlYWs7CisjZW5kaWYKKyAgICAg ICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJuZXR0Y2hrIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiIsIiIsMCk7CisgICAgICAgICAgICAg ICAgbmV0Y2xvcygpOworICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAg Z290byBuZXR0Y2hrX3JldHVybjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg ICAgZGVidWcoRjEwMCwibmV0dGNoayBTU0xfRVJST1JfPz8/Pz8iLCIiLDApOworICAgICAgICAg ICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAg ICAgIGdvdG8gbmV0dGNoa19yZXR1cm47CisgICAgICAgICAgICB9CisjZWxzZSAvKiBPUzIgKi8K KwkgICAgLyogRG8gbm90IGJsb2NrICovCisJICAgIHggPSAtMTsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgIHsKKyNpZmRlZiBP UzIKKyAgICAgICAgeCA9IHNvY2tldF9yZWFkKHR0eWZkLCZ0dGlidWZbdHRpYnArdHRpYm5dLAor ICAgICAgICAgICAgICAgICAgICAgICAgIFRUSUJVRkwtdHRpYnAtdHRpYm4pOyAgLyogUmV0dXJu cyAtMSBpZiBubyBkYXRhICovCisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgeCA9IHNvY2tldF9y ZWFkKHR0eWZkLCZjLDEpOyAgICAvKiBSZXR1cm5zIC0xIGlmIG5vIGRhdGEgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgfQorICAgICAgICBzX2Vycm5vID0gc29ja2V0X2Vycm5vOyAgICAg ICAgIC8qIHNvY2tldF9lcnJubyBtYXkgYmUgYSBmdW5jdGlvbiAqLworICAgICAgICBkZWJ1ZyhG MTAxLCJuZXR0Y2hrIHNvY2tldF9yZWFkIiwiIix4KTsKKworI2lmbmRlZiBOT05fQkxPQ0tfSU8K KyNpZmRlZiBPUzIKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgUmVxdWVzdFNTTE11dGV4KFNFTV9J TkRFRklOSVRFX1dBSVQpOworI2VuZGlmIC8qIENLX1NTTCAqLworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICB5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIG5vbmJs b2NraW5nIHJlYWRzICovCisgICAgICAgIHogPSBzb2NrZXRfaW9jdGwodHR5ZmQsRklPTkJJTywm eSk7CisgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRjaGsgRklPTkJJTyIsIm9mZiIseik7CisjaWZk ZWYgT1MyCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIFJlbGVhc2VTU0xNdXRleCgpOworI2VuZGlm IC8qIENLX1NTTCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTl9CTE9DS19JTyAq LworI2lmZGVmIE5UX1RDUF9PVkVSTEFQUEVECisgICAgICAgIGlvbm9ibG9jayA9IDA7ICAgICAg ICAgICAgICAgICAgLyogRm9yIE92ZXJsYXBwZWQgSS9PICovCisjZW5kaWYgLyogTlRfVENQX09W RVJMQVBQRUQgKi8KKworICAgICAgICBpZiAoeCA9PSAtMSkgeworICAgICAgICAgICAgZGVidWco RjEwMSwibmV0dGNoayBzb2NrZXRfcmVhZCBlcnJubyIsIiIsc19lcnJubyk7CisjaWZkZWYgT1My CisgICAgICAgICAgICBpZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAwKSB7CisgICAgICAg ICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICBnb3RvIG5ldHRjaGtfcmV0dXJuOwor ICAgICAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICB9IGVsc2UgaWYgKHggPT0g MCkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0dGNoayBjb25uZWN0aW9uIGNsb3NlZCIs IiIsMCk7CisgICAgICAgICAgICBuZXRjbG9zKCk7ICAgICAgICAgICAgICAgICAgLyogKioqICoq KiAqLworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gbmV0dGNoa19yZXR1 cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPj0gMSkgeyAgICAgICAgICAgICAgICAgICAv KiBPb3BzLCBhY3R1YWxseSBnb3QgYSBieXRlPyAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAg LyogSW4gT1MvMiB3ZSByZWFkIGRpcmVjdGx5IGludG8gdHRpYnVmW10gKi8KKyAgICAgICAgICAg IGNraGV4ZHVtcCgibmV0dGNoayBnb3QgcmVhbCBkYXRhIiwmdHRpYnVmW3R0aWJwK3R0aWJuXSx4 KTsKKyAgICAgICAgICAgIHR0aWJuICs9IHg7CisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBDS19T U0wKKwkgICAgaWYgKCBzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnICkgeworCQlj a2hleGR1bXAoIm5ldHRjaGsgZ290IHJlYWwgZGF0YSIsJnR0aWJ1Zlt0dGlicCt0dGlibl0seCk7 CisJCXR0aWJuICs9IHg7CisJICAgIH0gZWxzZSAKKyNlbmRpZiAvKiBDS19TU0wgKi8KKwkgICAg eworCQlkZWJ1ZyhGMTAxLCJuZXR0Y2hrIHNvY2tldF9yZWFkIGNoYXIiLCIiLGMpOworCQlkZWJ1 ZyhGMTAxLCJuZXR0Y2hrIHR0aWJwIiwiIix0dGlicCk7CisJCWRlYnVnKEYxMDEsIm5ldHRjaGsg dHRpYm4iLCIiLHR0aWJuKTsKKy8qCisgIEluIHRoZSBjYXNlIG9mIE92ZXJsYXBwZWQgSS9PIHRo ZSBjaGFyYWN0ZXIgd291bGQgaGF2ZSBjb21lIGZyb20KKyAgdGhlIGJlZ2lubmluZyBvZiB0aGUg YnVmZmVyLCBzbyBwdXQgaXQgYmFjay4KKyovCisJCWlmICh0dGlicCA+IDApIHsKKwkJICAgIHR0 aWJwLS07CisJCSAgICB0dGlidWZbdHRpYnBdID0gYzsKKwkJICAgIHR0aWJuKys7CisJCX0gZWxz ZSB7CisJCSAgICB0dGlidWZbdHRpYnArdHRpYm5dID0gYzsKKwkJICAgIHR0aWJuKys7CisJCX0K KwkgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICB9CisjZWxzZSAvKiBOT0NPVU5UICov CisgICAgICAgIGlmICh0dG5ldCA9PSBORVRfVENQQikgeworICAgICAgICAgICAgY2hhciBkdW1t eTsKKyAgICAgICAgICAgIHggPSByZWFkKHR0eWZkLCZkdW1teSwwKTsgICAvKiBUcnkgdG8gcmVh ZCBub3RoaW5nICovCisgICAgICAgICAgICBpZiAoeCA8IDApIHsgICAgICAgICAgICAgICAgLyog IkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIgKi8KKyAgICAgICAgICAgICAgICBwZXJyb3IoIlRD UC9JUCIpOyAgICAgICAvKiBvciBzb21lc3VjaC4uLiAqLworICAgICAgICAgICAgICAgIHR0Y2xv cygwKTsgICAgICAgICAgICAgIC8qIENsb3NlIG91ciBlbmQgdG9vLiAqLworICAgICAgICAgICAg ICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgZ290byBuZXR0Y2hrX3JldHVybjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PQ09VTlQgKi8KKyAgICB9CisjaWZkZWYg Q0tfS0VSQkVST1MKKyNpZmRlZiBLUkI0CisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJv dG8gPT0gTlBfRUs0TE9HSU4pCisgICAgICBjb3VudCArPSBrcmI0X2Rlc19hdmFpbCh0dHlmZCk7 CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQor I2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKQorICAgICAg Y291bnQgKz0ga3JiNV9kZXNfYXZhaWwodHR5ZmQpOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisj aWZkZWYgS1JCNV9VMlUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpCisgICAgICBjb3Vu dCArPSBrcmI1X3UydV9hdmFpbCh0dHlmZCk7CisjZW5kaWYgLyogS1JCNV9VMlUgKi8KKyNlbmRp ZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworICAgIGRlYnVnKEYxMDEs Im5ldHRjaGsgcmV0dXJucyIsIiIsY291bnQrdHRpYm4pOworICAgIHJjID0gY291bnQgKyB0dGli bjsKKworICBuZXR0Y2hrX3JldHVybjoKKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVENQSVBNdXRl eCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgIHJldHVybihyYyk7CisKKyNlbHNlIC8qIE5vdCBU Q1BJUExJQiAqLworLyoKKyAgVU5JWCBqdXN0IHVzZXMgdHRjaGsoKSwgaW4gd2hpY2ggdGhlIGlv Y3RsKCkgY2FsbHMgb24gdGhlIGZpbGUgZGVzY3JpcHRvcgorICBzZWVtIHRvIHdvcmsgT0suCisq LworICAgIHJldHVybih0dGNoaygpKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworLyoKKyAgQnV0 IHdoYXQgYWJvdXQgWC4yNT8KKyovCit9CisKKyNpZm5kZWYgT1MyCitWT0lECituZXR0b3V0KGkp IGludCBpOyB7ICAgICAgICAgICAgICAgICAgICAgLyogQ2F0Y2ggdGhlIGFsYXJtIGludGVycnVw dHMgKi8KKyAgICBkZWJ1ZyhGMTAwLCJuZXR0b3V0IGNhdWdodCB0aW1lb3V0IiwiIiwwKTsKKyAg ICB0dGltb2ZmKCk7CisgICAgY2tsb25nam1wKG5qYnVmLCAtMSk7Cit9CisjZW5kaWYgLyogIU9T MiAqLworCisjaWZkZWYgVENQSVBMSUIKKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitkb25ldGlu Yyh2b2lkICogdGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitkb25ldGluYyh0aHJl YWRpbmZvKSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9u ZXRpbmMgKi8geworI2lmZGVmIE5UU0lHCisgICAgZXh0ZXJuIGludCBUbHNJbmRleDsKKyAgICBz ZXRpbnQoKTsKKyAgICBpZiAodGhyZWFkaW5mbykgeyAgICAgICAgICAgICAgICAgICAvKiBUaHJl YWQgbG9jYWwgc3RvcmFnZS4uLiAqLworICAgICAgICBUbHNTZXRWYWx1ZShUbHNJbmRleCx0aHJl YWRpbmZvKTsKKyAgICB9CisjZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBDS19MT0dJTgorI2lm ZGVmIE5UCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikKKyAgICAgIHNldG50Y3JlZHMo KTsKKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBDS19MT0dJ TiAqLworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICh0dGJ1ZnIoKSA8IDApICAgICAgICAg ICAgICAgLyogS2VlcCB0cnlpbmcgdG8gcmVmaWxsIGl0LiAqLworICAgICAgICAgIGJyZWFrOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbGwgd2UgZ2V0IGFuIGVycm9yLiAqLworICAgICAg ICBpZiAodHRpYm4gPiAwKSAgICAgICAgICAgICAgICAgIC8qIE9yIHdlIGdldCBhIGNoYXJhY3Rl ci4gKi8KKyAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisjZW5kaWYgLyogVENQSVBMSUIgKi8K KworVk9JRAorI2lmZGVmIENLX0FOU0lDCitmYWlsbmV0aW5jKHZvaWQgKiB0aHJlYWRpbmZvKQor I2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2ZhaWxuZXRpbmModGhyZWFkaW5mbykgVk9JRCAqIHRocmVh ZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZhaWxuZXRpbmMgKi8geworICAgIDsg LyogTm90aGluZyB0byBkbyBvbiBhbiBlcnJvciAqLworfQorCisvKiBOIEUgVCBYIEkgTiAtLSBJ bnB1dCBibG9jayBvZiBjaGFyYWN0ZXJzIGZyb20gbmV0d29yayAqLworCitpbnQKK25ldHhpbihu LGJ1ZikgaW50IG47IENIQVIgKiBidWY7IHsKKyAgICBpbnQgbGVuLCBpLCBqOworI2lmZGVmIFRD UElQTElCCisgICAgaW50IHJjOworI2VuZGlmIC8qIFRDUElQTElCICovCisKKyAgICBpZiAodHR5 ZmQgPT0gLTEpIHsKKyAgICAgICAgZGVidWcoRjEwMCwibmV0eGluIHNvY2tldCBpcyBjbG9zZWQi LCIiLDApOworICAgICAgICByZXR1cm4oLTIpOworICAgIH0KKyNpZmRlZiBDS19LRVJCRVJPUwor I2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRM T0dJTikgeworICAgICAgICBpZiAoKGxlbiA9IGtyYjRfZGVzX3JlYWQodHR5ZmQsYnVmLG4pKSA8 IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVy bihsZW4pOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8qIEtSQjQgKi8K KyNpZmRlZiBLUkI1CisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1 TE9HSU4pIHsKKyAgICAgICAgaWYgKChsZW4gPSBrcmI1X2Rlc19yZWFkKHR0eWZkLChjaGFyICop YnVmLG4sMCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBlbHNlCisgICAg ICAgICAgcmV0dXJuKGxlbik7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYg S1JCNV9VMlUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKKyAgICAgICAgaWYgKChs ZW4gPSBrcmI1X3UydV9yZWFkKHR0eWZkLChjaGFyICopYnVmLG4pKSA8IDApCisgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybihsZW4pOworICAgIH0K KyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19L RVJCRVJPUyAqLworCisjaWZkZWYgVENQSVBMSUIKKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VENQ SVBNdXRleChTRU1fSU5ERUZJTklURV9XQUlUKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBpZiAo dHRpYm4gPT0gMCkKKyAgICAgIGlmICgocmMgPSB0dGJ1ZnIoKSkgPD0gMCkgeworI2lmZGVmIE9T MgorICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICByZXR1cm4ocmMpOworICAgICAgfQorCisgICAgaWYgKHR0aWJuIDw9IG4pIHsKKyAgICAgICAg bGVuID0gdHRpYm47CisgICAgICAgIG1lbWNweShidWYsJnR0aWJ1Zlt0dGlicF0sbGVuKTsgICAg ICAgICAvKiBzYWZlICovCisgICAgICAgIHR0aWJwICs9IGxlbjsKKyAgICAgICAgdHRpYm4gPSAw OworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbWNweShidWYsJnR0aWJ1Zlt0dGlicF0sbik7ICAg ICAgICAgICAvKiBzYWZlICovCisgICAgICAgIHR0aWJwICs9IG47CisgICAgICAgIHR0aWJuIC09 IG47CisgICAgICAgIGxlbiA9IG47CisgICAgfQorI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUQ1BJ UE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgIGZv ciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgaWYgKChqID0gbmV0aW5jKDApKSA8IDAp IHsKKyAgICAgICAgICAgIGlmIChqIDwgLTEpCisgICAgICAgICAgICAgIHJldHVybihqKTsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg YnVmW2ldID0gajsKKyAgICB9CisgICAgbGVuID0gaTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLwor CisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAvKiBUaGlzIHdvdWxk IGJlIGdyZWF0IGlmIGl0IHdvcmtlZC4gIEJ1dCB3aGF0IGlmIHRoZSBidWZmZXIgd2UgcmVhZCAg Ki8KKyAgICAvKiBjb250YWlucyBhIHRlbG5ldCBuZWdvdGlhdGlvbiB0aGF0IGNoYW5nZXMgdGhl IHN0YXRlIG9mIHRoZSAgICAgICAgKi8KKyAgICAvKiBlbmNyeXB0aW9uLiAgSWYgc28sIHdlIHdv dWxkIGJlIGVpdGhlciBkZWNyeXB0aW5nIHVuZW5jcnlwdGVkIHRleHQgKi8KKyAgICAvKiBvciBu b3QgZGVjcnlwdGluZyBlbmNyeXB0ZWQgdGV4dC4gIFNvIHdlIG11c3QgbW92ZSB0aGlzIGNhbGwg dG8gICAgKi8KKyAgICAvKiBhbGwgZnVuY3Rpb25zIHRoYXQgY2FsbCB0dHhpbigpLiAgSW4gT1My IHRoYXQgbWVhbnMgb3MyX25ldHhpbigpICAgKi8KKyAgICAvKiB3aGVyZSB0aGUgVGVsbmV0IE5l Z290aWF0aW9ucyBhcmUgaGFuZGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBp ZiAodV9lbmNyeXB0KQorICAgICAgY2tfdG5fZGVjcnlwdChidWYsbGVuKTsKKyNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgcmV0dXJuKGxlbik7 Cit9CisKKy8qICBOIEUgVCBJIE4gQyAtLSAgSW5wdXQgY2hhcmFjdGVyIGZyb20gbmV0d29yayAq LworCisjaWZkZWYgTkVUTEVCVUYKKyNkZWZpbmUgTEVCVUYKKyNlbmRpZiAvKiBORVRMRUJVRiAq LworI2lmZGVmIFRUTEVCVUYKKyNkZWZpbmUgTEVCVUYKKyNlbmRpZiAvKiBUVExFQlVGICovCisj aWZuZGVmIExFQlVGCisjaWZkZWYgT1MyCisjZGVmaW5lIExFQlVGCisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogTEVCVUYgKi8KKworaW50CituZXRpbmModGltbykgaW50IHRpbW87IHsKKyNp ZmRlZiBUQ1BJUExJQgorICAgIGludCB4OyB1bnNpZ25lZCBjaGFyIGM7ICAgICAgICAgICAgIC8q IFRoZSBsb2NhbHMuICovCisKKyNpZmRlZiBORVRMRUJVRgorICAgIGlmICh0dHB1c2ggPj0gMCkg eworICAgICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMiLCJ0dHB1c2giLHR0cHVzaCk7CisgICAgICAg IGMgPSB0dHB1c2g7CisgICAgICAgIHR0cHVzaCA9IC0xOworICAgICAgICByZXR1cm4oYyk7Cisg ICAgfQorICAgIGlmIChsZV9kYXRhKSB7CisgICAgICAgIGlmIChsZV9nZXRjaGFyKChDSEFSICop JmMpID4gMCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwibmV0aW5jIGxlX2dldGNoYXIiLCJj IixjKTsKKyAgICAgICAgICAgIHJldHVybihjKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAv KiBORVRMRUJVRiAqLworCisgICAgaWYgKHR0eWZkID09IC0xKSB7CisgICAgICAgIGRlYnVnKEYx MDAsIm5ldGluYyBzb2NrZXQgaXMgY2xvc2VkIiwiIiwwKTsKKyAgICAgICAgcmV0dXJuKC0yKTsK KyAgICB9CisKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09E RQorICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworICAgICAgICBpZiAoKHggPSBr cmI0X2Rlc19yZWFkKHR0eWZkLCZjLDEpKSA9PSAwKQorICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgIGVsc2UgaWYgKHggPCAwKQorICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIGVs c2UKKyAgICAgICAgICByZXR1cm4oYyk7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisj ZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0 dG5wcm90byA9PSBOUF9FSzVMT0dJTikgeworICAgICAgICBpZiAoKHggPSBrcmI1X2Rlc19yZWFk KHR0eWZkLCZjLDEsMCkpID09IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgZWxz ZSBpZiAoeCA8IDApCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgIHJldHVybihjKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBLUkI1 X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAgICBpZiAoKHggPSBr cmI1X3UydV9yZWFkKHR0eWZkLCZjLDEpKSA9PSAwKQorICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgIGVsc2UgaWYgKHggPCAwKQorICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIGVs c2UKKyAgICAgICAgICByZXR1cm4oYyk7CisgICAgfQorI2VuZGlmIC8qIEtSQjVfVTJVICovCisj ZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBPUzIK KyAgICBSZXF1ZXN0VENQSVBNdXRleChTRU1fSU5ERUZJTklURV9XQUlUKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICBpZiAodHRpYm4gPiAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBTb21ldGhp bmcgaW4gaW50ZXJuYWwgYnVmZmVyPyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgZGVidWco RjEwMCwibmV0aW5jIGNoYXIgaW4gYnVmIiwiIiwwKTsgLyogWWVzLiAqLworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdWNj ZXNzLiAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsc2Ug bXVzdCByZWFkIGZyb20gbmV0d29yay4gKi8KKyAgICAgICAgeCA9IC0xOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBBc3N1bWUgZmFpbHVyZS4gKi8KKyNpZmRlZiBERUJVRworICAgICAgICBk ZWJ1ZyhGMTAxLCJuZXRpbmMgZ29lcyB0byBuZXQsIHRpbW8iLCIiLHRpbW8pOworI2VuZGlmIC8q IERFQlVHICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIC8qCisgICAgICAgICAqIEluIHRoZSBj YXNlIG9mIE9wZW5TU0wsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgc3RpbGwKKyAgICAg ICAgICogZGF0YSB3YWl0aW5nIGluIHRoZSBTU0wgc2Vzc2lvbiBidWZmZXJzIHRoYXQgaGFzIG5v dCB5ZXQKKyAgICAgICAgICogYmVlbiByZWFkIGJ5IEtlcm1pdC4gIElmIHRoaXMgaXMgdGhlIGNh c2Ugd2UgbXVzdCBwcm9jZXNzCisgICAgICAgICAqIGl0IHdpdGhvdXQgY2FsbGluZyBzZWxlY3Qo KSBiZWNhdXNlIHNlbGVjdCgpIHdpbGwgbm90IHJldHVybgorICAgICAgICAgKiB3aXRoIGFuIGlu ZGljYXRpb24gdGhhdCB0aGVyZSBpcyBkYXRhIHRvIGJlIHJlYWQgZnJvbSB0aGUKKyAgICAgICAg ICogc29ja2V0LiAgSWYgdGhlcmUgaXMgbm8gZGF0YSBwZW5kaW5nIGluIHRoZSBTU0wgc2Vzc2lv bgorICAgICAgICAgKiBidWZmZXJzIHRoZW4gZmFsbCB0aHJvdWdoIHRvIHRoZSBzZWxlY3QoKSBj b2RlIGFuZCB3YWl0IGZvcgorICAgICAgICAgKiBzb21lIGRhdGEgdG8gYXJyaXZlLgorICAgICAg ICAgKi8KKyAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykgeworICAgICAgICAgICAgeCA9IFNT TF9wZW5kaW5nKHNzbF9jb24pOworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwibmV0aW5jIiwiU1NMX3BlbmRpbmcgZXJyb3IiLHgpOworICAgICAg ICAgICAgICAgIG5ldGNsb3MoKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBSZWxlYXNl VENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB4ID4gMCApIHsKKyAgICAgICAgICAgICAgICBp ZiAoIHR0YnVmcigpID49IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSBuZXRpbmModGlt byk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4ID0gLTE7CisgICAgICAg IH0gZWxzZSBpZiAodGxzX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgICAgICB4ID0gU1NMX3BlbmRp bmcodGxzX2Nvbik7CisgICAgICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJuZXRpbmMiLCJUTFNfcGVuZGluZyBlcnJvciIseCk7CisgICAgICAgICAgICAg ICAgbmV0Y2xvcygpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11 dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgICAgIH0gZWxzZSBpZiAoIHggPiAwICkgeworICAgICAgICAgICAgICAgIGlmICggdHRi dWZyKCkgPj0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG5ldGluYyh0aW1vKTsKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHggPSAtMTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIENLX1NTTCAqLworI2lmbmRlZiBMRUJVRgorICAgICAgICBpZiAodGltbyA9PSAwKSB7 ICAgICAgICAgICAgICAgIC8qIFVudGltZWQgY2FzZS4gKi8KKyAgICAgICAgICAgIHdoaWxlICgx KSB7ICAgICAgICAgICAgICAgICAvKiBXYWl0IGZvcmV2ZXIgaWYgbmVjZXNzYXJ5LiAqLworICAg ICAgICAgICAgICAgIGlmICh0dGJ1ZnIoKSA8IDApICAgICAgIC8qIFJlZmlsbCBidWZmZXIuICov CisgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgLyogRXJyb3IsIGZhaWwu ICovCisgICAgICAgICAgICAgICAgaWYgKHR0aWJuID4gMCkgeyAgICAgICAgLyogU3VjY2Vzcy4g Ki8KKyAgICAgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUaW1lZCBjYXNlLi4uICovCisjZW5kaWYgLyogTEVCVUYg Ki8KKyAgICAgICAgICB7CisjaWZkZWYgTlRfVENQX09WRVJMQVBQRUQKKyAgICAgICAgICAgIC8q IFRoaXMgY29kZSBpcyBmb3IgdXNlIG9uIE5UIHdoZW4gd2UgYXJlIHVzaW5nICovCisgICAgICAg ICAgICAvKiBPdmVybGFwcGVkIEkvTyB0byBoYW5kbGUgcmVhZHMuICBJbiB0aGUgY2FzZSAqLwor ICAgICAgICAgICAgLyogb2Ygb3V0c3RhbmRpbmcgcmVhZHMgc2VsZWN0KCkgZG9lc24ndCB3b3Jr ICAgKi8KKworICAgICAgICAgICAgaWYgKFdhaXRGb3JPdmVybGFwcGVkUmVhZERhdGEodGltbykp IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo dHRidWZyKCkgPCAwKSAgIC8qIEtlZXAgdHJ5aW5nIHRvIHJlZmlsbCBpdC4gKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBUaWxsIHdlIGdldCBhbiBlcnJvci4g Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHR0aWJuID4gMCkgeyAgICAvKiBPciB3ZSBnZXQg YSBjaGFyYWN0ZXIuICovCisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorI2Vsc2UgLyogTlRfVENQX09WRVJMQVBQRUQgKi8KKyNp ZmRlZiBCU0RTRUxFQ1QKKyAgICAgICAgICAgIGZkX3NldCByZmRzOworICAgICAgICAgICAgc3Ry dWN0IHRpbWV2YWwgdHY7CisgICAgICAgICAgICBpbnQgdGltZW91dCA9IHRpbW8gPCAwID8gLXRp bW8gOiAxMDAwICogdGltbzsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldGluYyBCU0RTRUxF Q1QiLCIiLHRpbW8pOworCisgICAgICAgICAgICBmb3IgKCA7IHRpbWVvdXQgPj0gMDsgdGltZW91 dCAtPSAodGltbyA/IDEwMCA6IDApKSB7CisgICAgICAgICAgICAgICAgaW50IHJjOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldGluYyIsInRpbWVvdXQiLHRpbWVvdXQpOworICAgICAg ICAgICAgICAgIC8qIERvbid0IG1vdmUgc2VsZWN0KCkgaW5pdGlhbGl6YXRpb24gb3V0IG9mIHRo ZSBsb29wLiAqLworICAgICAgICAgICAgICAgIEZEX1pFUk8oJnJmZHMpOworICAgICAgICAgICAg ICAgIEZEX1NFVCh0dHlmZCwgJnJmZHMpOworICAgICAgICAgICAgICAgIHR2LnR2X3NlYyAgPSB0 di50dl91c2VjID0gMEw7CisgICAgICAgICAgICAgICAgaWYgKHRpbW8pCisgICAgICAgICAgICAg ICAgICB0di50dl91c2VjID0gKGxvbmcpIDEwMDAwMEw7CisgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgdHYudHZfc2VjID0gMzA7CisjaWZkZWYgTlQKKyAgICAgICAgICAg ICAgICBXU0FTYWZlVG9DYW5jZWwgPSAxOworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAg ICAgcmMgPSBzZWxlY3QoRkRfU0VUU0laRSwKKyNpZmRlZiBfX0RFQ0MKKyNpZmRlZiBJTlRTRUxF Q1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ICopCisjZWxzZSAvKiBkZWYgSU5U U0VMRUNUICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQorI2VuZGlm IC8qIGRlZiBJTlRTRUxFQ1QgW2Vsc2VdICovCisjZWxzZSAvKiBkZWYgX19ERUNDICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQorI2VuZGlmIC8qIGRlZiBfX0RFQ0Mg W2Vsc2VdICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJmZHMsIE5VTEwsIE5VTEws ICZ0dik7CisgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgICAgICAg ICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKKyAgICAgICAgICAgICAgICAgICAgZGVidWco RjExMSwibmV0aW5jIiwic2VsZWN0IixyYyk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MTEsIm5ldGluYyIsInNvY2tldF9lcnJubyIsc19lcnJubyk7CisgICAgICAgICAgICAgICAgICAg IGlmIChzX2Vycm5vKSB7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgICBSZWxl YXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXRpbmMiLCJzZWxlY3QiLHJjKTsKKyNpZmRl ZiBOVAorICAgICAgICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7CisjZW5kaWYgLyogTlQg Ki8KKyAgICAgICAgICAgICAgICBpZiAoIUZEX0lTU0VUKHR0eWZkLCAmcmZkcykpIHsKKyNpZmRl ZiBMRUJVRgorICAgICAgICAgICAgICAgICAgICBpZiAobGVfaW5idWYoKSA+IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTEVCVUYgKi8KKyAgICAg ICAgICAgICAgICAgICAgLyogSWYgd2FpdGluZyBmb3JldmVyIHdlIGhhdmUgbm8gd2F5IG9mIGtu b3dpbmcgaWYgdGhlICovCisgICAgICAgICAgICAgICAgICAgIC8qIHNvY2tldCBjbG9zZWQgc28g dHJ5IHdyaXRpbmcgYSAwLWxlbmd0aCBUQ1AgcGFja2V0ICAqLworICAgICAgICAgICAgICAgICAg ICAvKiB3aGljaCBzaG91bGQgZm9yY2UgYW4gZXJyb3IgaWYgdGhlIHNvY2tldCBpcyBjbG9zZWQg Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1vKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKHJjID0gc29ja2V0X3dyaXRlKHR0eWZkLCIiLDApKSA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJuZXRpbmMgc29ja2V0X3dyaXRlIGVycm9y IiwiIixzX2Vycm5vKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAob3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOyAvKiBDYWxsIGl0IGFuIGkv byBlcnJvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodHRidWZy KCkgPCAwKSB7IC8qIEtlZXAgdHJ5aW5nIHRvIHJlZmlsbCBpdC4gKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIHRpbWVvdXQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAg ICAgICAgICAvKiBUaWxsIHdlIGdldCBhbiBlcnJvci4gKi8KKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICBpZiAodHRpYm4gPiAwKSB7ICAgIC8qIE9yIHdlIGdldCBh IGNoYXJhY3Rlci4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAg ICAgICAgICAgICAgICAgdGltZW91dCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisjaWZkZWYgTlQKKyAgICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7CisjZW5kaWYg LyogTlQgKi8KKyNlbHNlIC8qICFCU0RTRUxFQ1QgKi8KKyNpZmRlZiBJQk1TRUxFQ1QKKy8qCisg IFdhcyB1c2VkIGJ5IE9TLzIsIGN1cnJlbnRseSBub3QgdXNlZCwgYnV0IG1pZ2h0IGNvbWUgaW4g aGFuZHkgc29tZSBkYXkuLi4KKyAgLi4uIGFuZCBpdCBjYW1lIGluIGhhbmR5ISAgRm9yIG91ciBU Q1AvSVAgbGF5ZXIsIGl0IGF2b2lkcyBhbGwgdGhlIGZkX3NldAorICBhbmQgdGltZXZhbCBzdHVm ZiBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGl0IGlzIHVzZWQuCisqLworICAg ICAgICAgICAgaW50IHNvY2tldCA9IHR0eWZkOworICAgICAgICAgICAgaW50IHRpbWVvdXQgPSB0 aW1vIDwgMCA/IC10aW1vIDogMTAwMCAqIHRpbW87CisKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs Im5ldGluYyBJQk1TRUxFQ1QiLCIiLHRpbW8pOworICAgICAgICAgICAgZm9yICggOyB0aW1lb3V0 ID49IDA7IHRpbWVvdXQgLT0gKHRpbW8gPyAxMDAgOiAwKSkgeworICAgICAgICAgICAgICAgIGlm IChzZWxlY3QoJnNvY2tldCwgMSwgMCwgMCwgMTAwTCkgPT0gMSkgeworICAgICAgICAgICAgICAg ICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR0YnVmcigpIDwg MCkgeyAvKiBLZWVwIHRyeWluZyB0byByZWZpbGwgaXQuICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGltZW91dCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OyAgICAgIC8qIFRpbGwgd2UgZ2V0IGFuIGVycm9yLiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR0aWJuID4gMCkgeyAvKiBPciB3ZSBn ZXQgYSBjaGFyYWN0ZXIuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDA7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IC0xOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2lmZGVmIExFQlVGCisgICAgICAgICAg ICAgICAgZWxzZSBpZiAobGVfaW5idWYoKSA+IDApICB7CisgICAgICAgICAgICAgICAgICAgIHRp bWVvdXQgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg fQorI2VuZGlmIC8qIExFQlVGICovCisgICAgICAgICAgICB9CisjZWxzZSAvKiAhSUJNU0VMRUNU ICovCisjaWZkZWYgV0lOU09DSworICAgICAgIC8qIEFjdHVhbGx5LCB1bmRlciBXaW5Tb2NrIHdl IGhhdmUgYSBiZXR0ZXIgbWVjaGFuaXNtIHRoYW4gc2VsZWN0KCkgKi8KKyAgICAgICAvKiBmb3Ig c2V0dGluZyB0aW1lb3V0cyAoU09fUkNWVElNRU8sIFNPX1NORFRJTUVPKSAqLworICAgICAgICAg ICAgU09DS0VUIHNvY2tldCA9IHR0eWZkOworICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0aW5j IE5UU0VMRUNUIiwiIix0aW1vKTsKKyAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHNvY2tldCwg U09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIChjaGFyICopJnRpbW8sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKHRpbW8pKSAgPT0gTk9fRVJST1IpCisgICAgICAgICAgICAgIHdo aWxlICgxKSB7CisgICAgICAgICAgICAgICAgICBpZiAodHRidWZyKCkgPCAwKSAgICAgLyogS2Vl cCB0cnlpbmcgdG8gcmVmaWxsIGl0LiAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsgICAg ICAgICAgICAgIC8qIFRpbGwgd2UgZ2V0IGFuIGVycm9yLiAqLworICAgICAgICAgICAgICAgICAg aWYgKHR0aWJuID4gMCkgeyAgICAgIC8qIE9yIHdlIGdldCBhIGNoYXJhY3Rlci4gKi8KKyAgICAg ICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorI2Vsc2UgLyogV0lOU09DSyAqLwor LyoKKyAgSWYgd2UgY2FuJ3QgdXNlIHNlbGVjdCgpLCB0aGVuIHdlIHVzZSB0aGUgcmVndWxhciBh bGFybSgpL3NpZ25hbCgpCisgIHRpbWVvdXQgbWVjaGFuaXNtLgorKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMDEsIm5ldGluYyBhbGFybSIsIiIsdGltbyk7CisgICAgICAgICAgICB4ID0gYWxybV9l eGVjdXRlKGNramFkZHIobmpidWYpLHRpbW8sbmV0dG91dCxkb25ldGluYyxmYWlsbmV0aW5jKTsK KyAgICAgICAgICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAvKiBUaW1lciBvZmYuICov CisjZW5kaWYgLyogV0lOU09DSyAqLworI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlmIC8q IEJTRFNFTEVDVCAqLworI2VuZGlmIC8qIE5UX1RDUF9PVkVSTEFQUEVEICovCisgICAgICAgIH0K KyAgICB9CisKKyNpZmRlZiBMRUJVRgorICAgIGlmIChsZV9pbmJ1ZigpID4gMCkgeyAgICAgICAg ICAgICAgIC8qIElmIGRhdGEgd2FzIGluc2VydGVkIGludG8gdGhlICovCisgICAgICAgIGlmIChs ZV9nZXRjaGFyKChDSEFSICopJmMpID4gMCkgey8qIExvY2FsIEVjaG8gYnVmZmVyIHdoaWxlIHRo ZSAgICovCisjaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhcyB0 YWtpbmcgcGxhY2UgZG8gbm90IG1peCAgICovCisgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgo KTsgICAgICAgICAgIC8qIHRoZSBsZSBkYXRhIHdpdGggdGhlIG5ldCBkYXRhICovCisjZW5kaWYg LyogT1MyICovCisgICAgICAgICAgcmV0dXJuKGMpOworICAgICAgICB9CisgICAgfQorI2VuZGlm IC8qIExFQlVGICovCisgICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog UmV0dXJuIC0xIGlmIHdlIGZhaWxlZC4gKi8KKyAgICAgICAgZGVidWcoRjEwMCwibmV0aW5jIHRp bWVkIG91dCIsIiIsMCk7CisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlICovCisgICAgICAgIGMgPSB0dGli dWZbdHRpYnBdOyAgICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBmaXJzdCBjaGFyIGluIHR0aWJ1 ZltdICovCisgICAgICAgIGlmIChkZWJsb2cpIHsKKyNpZm5kZWYgQ09NTUVOVAorICAgICAgICAg ICAgZGVidWcoRjEwMSwibmV0aW5jIHJldHVybmluZyIsIiIsYyk7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICAgICAgaWYgKGMgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsIm5ldGluYyAwIHR0aWJuIiwiIix0dGlibik7CisgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwibmV0aW5jIDAgdHRpYnAiLCIiLHR0aWJwKTsKKyNpZmRlZiBCRVRBREVCVUcKKyAgICAgICAg ICAgICAgICB7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgdHRf dHlwZV9tb2RlOworICAgICAgICAgICAgICAgICAgICBpZiAoICFJU1ZUTlQodHRfdHlwZV9tb2Rl KSApCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgIGNraGV4ZHVtcCgibmV0 aW5jICZ0dGJ1Zlt0dGlicF0iLCZ0dGlidWZbdHRpYnBdLHR0aWJuKTsKKyAgICAgICAgICAgICAg ICB9CisjZW5kaWYgLyogQkVUQURFQlVHICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgdHRpYnArKzsKKyAgICAgICAgdHRpYm4tLTsKKyNpZmRlZiBPUzIKKyAgICAgICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9O CisgICAgICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikpCisgICAgICAgICAgY2tf dG5fZGVjcnlwdCgmYywxKTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgIHJl dHVybihjKTsKKyAgICB9CisjZWxzZSAvKiBOb3QgdXNpbmcgVENQSVBMSUIgKi8KKyAgICByZXR1 cm4oLTEpOworI2VuZGlmIC8qIFRDUElQTElCICovCit9CisKKy8qICBOIEUgVCBUIE8gTCAgLS0g IE91dHB1dCBhIHN0cmluZyBvZiBieXRlcyB0byB0aGUgbmV0d29yayAgKi8KKy8qCisgIENhbGwg d2l0aCBzID0gcG9pbnRlciB0byBzdHJpbmcsIG4gPSBsZW5ndGguCisgIFJldHVybnMgbnVtYmVy IG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IKKyAgLTEgb24gaS9vIGVy cm9yLCAtMiBpZiBjYWxsZWQgaW1wcm9wZXJseS4KKyovCisKK2ludAorbmV0dG9sKHMsbikgQ0hB UiAqczsgaW50IG47IHsKKyNpZmRlZiBUQ1BJUExJQgorICAgIGludCBjb3VudCA9IDA7CisgICAg aW50IGxlbiA9IG47CisgICAgaW50IHRyeSA9IDA7CisKKyAgICBpZiAodHR5ZmQgPT0gLTEpIHsK KyAgICAgICAgZGVidWcoRjEwMCwibmV0dG9sIHNvY2tldCBpcyBjbG9zZWQiLCIiLDApOworICAg ICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIm5ldHRvbCBUQ1BJUExJQiB0 dG5ldCIsIiIsdHRuZXQpOworI2lmZGVmIENPTU1FTlQKKyAgICBja2hleGR1bXAoIm5ldHRvbCIs cyxuKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVm IEtSQjQKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikg eworICAgICAgICByZXR1cm4oa3JiNF9kZXNfd3JpdGUodHR5ZmQscyxuKSk7CisgICAgfQorI2Vu ZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyNpZmRl ZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgeworICAgICAgICBy ZXR1cm4oa3JiNV9kZXNfd3JpdGUodHR5ZmQscyxuLDApKTsKKyAgICB9CisjZW5kaWYgLyogUkxP R0NPREUgKi8KKyNpZmRlZiBLUkI1X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkg eworICAgICAgICByZXR1cm4oa3JiNV91MnVfd3JpdGUodHR5ZmQscyxuKSk7CisgICAgfQorI2Vu ZGlmIC8qIEtSQjVfVTJVICovCisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJF Uk9TICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKFRFTE9QVF9NRShURUxPUFRf RU5DUllQVElPTikpCisgICAgICBja190bl9lbmNyeXB0KHMsbik7CisjZW5kaWYgLyogQ0tfRU5D UllQVElPTiAqLworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0 bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgaW50IGVycm9yLCByOworICAgICAgICAvKiBXcml0 ZSB1c2luZyBTU0wgKi8KKyAgICAgIHNzbF9yZXRyeToKKyAgICAgICAgaWYgKHNzbF9hY3RpdmVf ZmxhZykKKyAgICAgICAgICByID0gU1NMX3dyaXRlKHNzbF9jb24sIHMsIGxlbiAvKiA+MTAyND8x MDI0OmxlbiAqLyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByID0gU1NMX3dyaXRlKHRsc19j b24sIHMsIGxlbiAvKiA+MTAyND8xMDI0OmxlbiAqLyk7CisgICAgICAgIHN3aXRjaCAoU1NMX2dl dF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLHIpKSB7CisgICAgICAgICAg Y2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvbCIsIlNT TF93cml0ZSIscik7CisgICAgICAgICAgICBpZiAoIHIgPT0gbGVuICkKKyAgICAgICAgICAgICAg ICByZXR1cm4obik7CisgICAgICAgICAgICAgcyArPSByOworICAgICAgICAgICAgIGxlbiAtPSBy OworICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OworICAgICAgICAgIGNhc2UgU1NMX0VSUk9S X1dBTlRfV1JJVEU6CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wgU1NMX0VSUk9SX1dB TlRfV1JJVEUiLCIiLDApOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wgU1NM X0VSUk9SX1dBTlRfUkVBRCIsIiIsMCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAg ICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisgICAgICAgICAgICAgIGlmICggciA9PSAwICkg eyAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgICAgICAg ICAgIHJldHVybigtMik7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICBpbnQgcmMgPSAtMTsKKyNpZmRlZiBOVAorICAgICAgICAgICAgICAgICAgaW50IGdsZSA9IEdl dExhc3RFcnJvcigpOworICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9sIFNTTF9F UlJPUl9TWVNDQUxMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiR2V0TGFzdEVycm9yKCki LGdsZSk7CisgICAgICAgICAgICAgICAgICByYyA9IG9zMnNvY2tldGVycm9yKGdsZSk7CisgICAg ICAgICAgICAgICAgICBpZiAocmMgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgcmMgPSAt MjsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCByYyA9PSAtMiApCisgICAgICAgICAgICAg ICAgICAgICAgcmMgPSAtMTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICAgICAgcmV0 dXJuKHJjKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRf WDUwOV9MT09LVVA6CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wgU1NMX0VSUk9SX1dB TlRfWDUwOV9MT09LVVAiLCIiLDApOworICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAg ICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6CisgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJuZXR0b2wgU1NMX0VSUk9SX1NTTCIsIiIsMCk7CisgICAgICAgICAgICAg IGlmIChiaW9fZXJyIT1OVUxMKSB7CisgICAgICAgICAgICAgICAgICBpbnQgbGVuOworICAgICAg ICAgICAgICAgICAgZXh0ZXJuIGNoYXIgc3NsX2VycltdOworICAgICAgICAgICAgICAgICAgQklP X3ByaW50ZihiaW9fZXJyLCJuZXR0b2woKSBTU0xfRVJST1JfU1NMXG4iKTsKKyAgICAgICAgICAg ICAgICAgIEVSUl9wcmludF9lcnJvcnMoYmlvX2Vycik7CisgICAgICAgICAgICAgICAgICBsZW4g PSBCSU9fcmVhZChiaW9fZXJyLHNzbF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgICAgICAg ICAgIHNzbF9lcnJbbGVuIDwgU1NMX0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdc MCc7CisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJuZXR0b2wgU1NMX0VSUk9SX1NTTCIs c3NsX2VyciwwKTsKKyAgICAgICAgICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoc3NsX2Vycik7CisgICAgICAgICAgICAgIH0gZWxzZSBp ZiAoc3NsX2RlYnVnX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRv bCBTU0xfRVJST1JfU1NMIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIp OworICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIm5ldHRvbCgpIFNTTF9FUlJPUl9T U0xcbiIpOworICAgICAgICAgICAgICAgICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOwor ICAgICAgICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICBuZXRjbG9zKCk7 CisgICAgICAgICAgICAgIHJldHVybigtMik7CisjZWxzZQorICAgICAgICAgICAgICByZXR1cm4o LTEpOworI2VuZGlmCisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJuZXR0b2wgU1NMX0VSUk9SX1pFUk9fUkVUVVJOIiwiIiwwKTsK KyAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRvbCBTU0xfRVJST1JfPz8/ Pz8iLCIiLDApOworICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAgICAgcmV0dXJuKC0y KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICBuZXR0b2xfcmV0 cnk6CisgICAgdHJ5Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jcmVhc2Ug dGhlIHRyeSBjb3VudGVyICovCisKKyAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKKyNpZmRl ZiBCU0RTRUxFQ1QKKyAgICAgICAgZmRfc2V0IHdmZHM7CisgICAgICAgIHN0cnVjdCB0aW1ldmFs IHR2OworCisgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvbCBCU0RTRUxFQ1QiLCIiLDApOworICAg ICAgICB0di50dl91c2VjID0gMEw7CisgICAgICAgIHR2LnR2X3NlYz0zMDsKKyNpZmRlZiBOVAor ICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAxOworI2VuZGlmIC8qIE5UICovCisjaWZkZWYgU1RS RUFNSU5HCisgICAgICBkb19zZWxlY3Q6CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAg IEZEX1pFUk8oJndmZHMpOworICAgICAgICBGRF9TRVQodHR5ZmQsICZ3ZmRzKTsKKyAgICAgICAg aWYgKHNlbGVjdChGRF9TRVRTSVpFLCBOVUxMLAorI2lmZGVmIF9fREVDQworI2lmbmRlZiBfX0RF Q0NfVkVSCisgICAgICAgICAgICAgICAgICAgIChpbnQgKikKKyNlbmRpZiAvKiBfX0RFQ0NfVkVS ICovCisjZW5kaWYgLyogX19ERUNDICovCisgICAgICAgICAgICAgICAgICAgJndmZHMsIE5VTEws ICZ0dikgPCAwKSB7CisgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvbCBzZWxlY3QgZmFpbGVkIiwiIixzX2Vycm5vKTsK KyNpZmRlZiBCRVRBREVCVUcKKyAgICAgICAgICAgIHByaW50ZigibmV0dG9sIHNlbGVjdCBmYWls ZWQ6ICVkXG4iLCBzX2Vycm5vKTsKKyNlbmRpZiAvKiBCRVRBREVCVUcgKi8KKyNpZmRlZiBOVAor ICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKKyAgICAgICAgICAgIGlmICghd2luOTVz ZWxlY3RidWcpCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoIUZEX0lTU0VUKHR0eWZkLCAmd2ZkcykpIHsKKyNpZmRlZiBT VFJFQU1JTkcKKyAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpCisgICAgICAgICAgICAgIGdvdG8g ZG9fc2VsZWN0OworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgICAgICAgICAgZGVidWcoRjEx MSwibmV0dG9sIiwiIUZEX0lTU0VUIix0dHlmZCk7CisjaWZkZWYgTlQKKyAgICAgICAgICAgIFdT QVNhZmVUb0NhbmNlbCA9IDA7CisgICAgICAgICAgICBpZiAoIXdpbjk1c2VsZWN0YnVnKQorI2Vu ZGlmIC8qIE5UICovCisgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyNpZmRl ZiBOVAorICAgICAgICBXU0FTYWZlVG9DYW5jZWwgPSAwOworI2VuZGlmIC8qIE5UICovCisjZWxz ZSAvKiBCU0RTRUxFQ1QgKi8KKyNpZmRlZiBJQk1TRUxFQ1QKKyAgICAgICAgeworICAgICAgICAg ICAgaW50IHRyaWVzID0gMDsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvbCBJQk1TRUxF Q1QiLCIiLDApOworICAgICAgICAgICAgd2hpbGUgKHNlbGVjdCgmdHR5ZmQsIDAsIDEsIDAsIDEw MDApICE9IDEpIHsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisgICAgICAgICAgICAgICAg aWYgKHRyaWVzKysgPj0gNjApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogaWYgYWZ0ZXIgNjAg c2Vjb25kcyB3ZSBjYW4ndCBnZXQgcGVybWlzc2lvbiB0byB3cml0ZSAqLworICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2wgc2VsZWN0IGZhaWxlZCIsIiIsc29ja2V0X2Vycm5v KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgaWYgKChjb3VudCA9IG5ldHRjaGsoKSkgPCAwKSB7CisgICAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvbCIsIm5ldHRjaGsoKSIsY291bnQpOworICAgICAg ICAgICAgICAgICAgICByZXR1cm4oY291bnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlmIC8qIEJTRFNF TEVDVCAqLworICAgICAgICBpZiAoKGNvdW50ID0gc29ja2V0X3dyaXRlKHR0eWZkLHMsbikpIDwg MCkgeworICAgICAgICAgICAgaW50IHNfZXJybm8gPSBzb2NrZXRfZXJybm87IC8qIG1heWJlIGEg ZnVuY3Rpb24gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvbCBzb2NrZXRfd3JpdGUg ZXJyb3IiLCIiLHNfZXJybm8pOworI2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKG9zMnNvY2tl dGVycm9yKHNfZXJybm8pIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAvKiBDYWxs IGl0IGFuIGkvbyBlcnJvciAqLworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCA8IG4pIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvbCBzb2NrZXRfd3JpdGUiLHMsY291bnQpOwor ICAgICAgICAgICAgaWYgKHRyeSA+IDI1KSB7CisgICAgICAgICAgICAgICAgLyogZG9uJ3QgdHJ5 IG1vcmUgdGhhbiAyNSB0aW1lcyAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRv bCB0cmllZCBtb3JlIHRoYW4gMjUgdGltZXMiLCIiLDApOworICAgICAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7CisgICAg ICAgICAgICAgICAgcyArPSBjb3VudDsKKyAgICAgICAgICAgICAgICBuIC09IGNvdW50OworICAg ICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjExMSwibmV0dG9sIHJldHJ5IixzLG4pOwor ICAgICAgICAgICAgZ290byBuZXR0b2xfcmV0cnk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTExLCJuZXR0b2wgc29ja2V0X3dyaXRlIixzLGNvdW50KTsKKyAgICAgICAg ICAgIHJldHVybihsZW4pOyAvKiBzdWNjZXNzIC0gcmV0dXJuIHRvdGFsIGxlbmd0aCAqLworICAg ICAgICB9CisgICAgfSBlbHNlCisgICAgICByZXR1cm4oLTIpOworI2Vsc2UKKyAgICBkZWJ1ZyhG MTAwLCJuZXR0b2wgVENQSVBMSUIgbm90IGRlZmluZWQiLCIiLDApOworICAgIHJldHVybigtMik7 CisjZW5kaWYgLyogVENQSVBMSUIgKi8KK30KKworLyogIE4gRSBUIFQgTyBDICAtLSAgIE91dHB1 dCBjaGFyYWN0ZXIgdG8gbmV0d29yayAqLworLyoKKyAgQ2FsbCB3aXRoIGNoYXJhY3RlciB0byBi ZSB0cmFuc21pdHRlZC4KKyAgUmV0dXJucyAwIGlmIHRyYW5zbWlzc2lvbiB3YXMgc3VjY2Vzc2Z1 bCwgb3IKKyAgLTEgdXBvbiBpL28gZXJyb3IsIG9yIC0yIGlmIGNhbGxlZCBpbXByb3Blcmx5Lgor Ki8KK2ludAorI2lmZGVmIENLX0FOU0lDCituZXR0b2MoQ0hBUiBjKQorI2Vsc2UKK25ldHRvYyhj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIG5ldHRvYyAqLyB7CisjaWZkZWYg VU5JWAorICAgIHJldHVybih0dG9jKGMpKTsKKyNlbHNlCisjaWZkZWYgVENQSVBMSUIKKyAgICB1 bnNpZ25lZCBjaGFyIGNjOworICAgIGlmICh0dHlmZCA9PSAtMSkgeworICAgICAgICBkZWJ1ZyhG MTAwLCJuZXR0b2Mgc29ja2V0IGlzIGNsb3NlZCIsIiIsMCk7CisgICAgICAgIHJldHVybiAtMTsK KyAgICB9CisgICAgY2MgPSBjOworICAgIGRlYnVnKEYxMDEsIm5ldHRvYyBjYyIsIiIsY2MpOwor CisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI0CisjaWZkZWYgUkxPR0NPREUKKyAgICBp ZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKKyAgICAgICAgcmV0dXJuKGtyYjRfZGVzX3dy aXRlKHR0eWZkLCZjYywxKT09MT8wOi0xKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8K KyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYg KHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgIHJldHVybihrcmI1X2Rlc193cml0 ZSh0dHlmZCwmY2MsMSwwKT09MT8wOi0xKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8K KyNpZmRlZiBLUkI1X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAg ICByZXR1cm4oa3JiNV91MnVfd3JpdGUodHR5ZmQsJmNjLDEpPT0xPzA6LTEpOworICAgIH0KKyNl bmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJC RVJPUyAqLworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICBpZiAoIFRFTE9QVF9NRShU RUxPUFRfRU5DUllQVElPTikgKQorICAgICAgICAgICAgY2tfdG5fZW5jcnlwdCgmY2MsMSk7Cisj ZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX1NTTAorICAgIGlmIChzc2xfYWN0 aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIGludCBsZW4sIGVycm9yOwor ICAgICAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KKyAgICAgIHNzbF9yZXRyeToKKyAgICAgICAg aWYgKHNzbF9hY3RpdmVfZmxhZykKKyAgICAgICAgICBsZW4gPSBTU0xfd3JpdGUoc3NsX2Nvbiwg JmNjLCAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGxlbiA9IFNTTF93cml0ZSh0bHNfY29u LCAmY2MsIDEpOworICAgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFn P3NzbF9jb246dGxzX2NvbixsZW4pKSB7CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToK KyAgICAgICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvYyIsIlNTTF93cml0ZSIsbGVuKTsKKyAgICAg ICAgICAgIHJldHVybihsZW4gPT0gMSA/IDAgOiAtMSk7CisgICAgICAgICAgY2FzZSBTU0xfRVJS T1JfV0FOVF9XUklURToKKyAgCSAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAg ICAgICAgICBpZiAoIGxlbiA9PSAwICkgeyAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICAgIG5l dGNsb3MoKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICBpbnQgcmMgPSAtMTsKKyNpZmRlZiBOVAorICAgICAg ICAgICAgICAgICAgaW50IGdsZSA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwibmV0dG9jIFNTTF9FUlJPUl9TWVNDQUxMIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAiR2V0TGFzdEVycm9yKCkiLGdsZSk7CisgICAgICAgICAgICAgICAgICByYyA9IG9z MnNvY2tldGVycm9yKGdsZSk7CisgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gLTEpCisgICAg ICAgICAgICAgICAgICAgICAgcmMgPSAtMjsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBy YyA9PSAtMiApCisgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyNlbmRpZiAvKiBOVCAq LworICAgICAgICAgICAgICAgICAgcmV0dXJuKHJjKTsKKyAgICAgICAgICAgICAgfQorICAgICAg ICBjYXNlIFNTTF9FUlJPUl9TU0w6CisgICAgICAgICAgICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7 CisgICAgICAgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNo YXIgc3NsX2VycltdOworICAgICAgICAgICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCJuZXR0 b2MoKSBTU0xfRVJST1JfU1NMXG4iKTsKKyAgICAgICAgICAgICAgICAgIEVSUl9wcmludF9lcnJv cnMoYmlvX2Vycik7CisgICAgICAgICAgICAgICAgICBsZW4gPSBCSU9fcmVhZChiaW9fZXJyLHNz bF9lcnIsU1NMX0VSUl9CRlNaKTsKKyAgICAgICAgICAgICAgICAgIHNzbF9lcnJbbGVuIDwgU1NM X0VSUl9CRlNaID8gbGVuIDogU1NMX0VSUl9CRlNaXSA9ICdcMCc7CisgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTEwLCJuZXR0b2MgU1NMX0VSUk9SX1NTTCIsc3NsX2VyciwwKTsKKyAgICAgICAg ICAgICAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoc3NsX2Vycik7CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3NsX2RlYnVnX2ZsYWcpIHsK KyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsIm5ldHRvYyBTU0xfRVJST1JfU1NMIiwiIiww KTsKKyAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsIm5ldHRvYygpIFNTTF9FUlJPUl9TU0xcbiIpOworICAgICAgICAgICAg ICAgICAgRVJSX3ByaW50X2Vycm9yc19mcChzdGRlcnIpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisgICAgICAgICAgY2FzZSBTU0xfRVJST1Jf WkVST19SRVRVUk46CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG5ldGNsb3MoKTsK KyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tf U1NMICovCisgICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7CisjaWZkZWYgQlNEU0VMRUNUCisg ICAgICAgIGZkX3NldCB3ZmRzOworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKworICAgICAg ICBkZWJ1ZyhGMTAxLCJuZXR0b2MgQlNEU0VMRUNUIiwiIiwwKTsKKyAgICAgICAgdHYudHZfdXNl YyA9IDBMOworICAgICAgICB0di50dl9zZWMgPSAzMDsKKworI2lmZGVmIFNUUkVBTUlORworICAg ICAgZG9fc2VsZWN0OgorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisgICAgICAgIEZEX1pFUk8o JndmZHMpOworICAgICAgICBGRF9TRVQodHR5ZmQsICZ3ZmRzKTsKKyAgICAgICAgaWYgKHNlbGVj dChGRF9TRVRTSVpFLCBOVUxMLAorI2lmZGVmIF9fREVDQworI2lmbmRlZiBfX0RFQ0NfVkVSCisg ICAgICAgICAgICAgICAgICAgKGludCAqKQorI2VuZGlmIC8qIF9fREVDQ19WRVIgKi8KKyNlbmRp ZiAvKiBfX0RFQ0MgKi8KKyAgICAgICAgICAgICAgICAgICAmd2ZkcywgTlVMTCwgJnR2KSA8IDAp IHsKKyAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAgICAgICAg ZGVidWcoRjEwMSwibmV0dG9jIHNlbGVjdCBmYWlsZWQiLCIiLHNfZXJybm8pOworI2lmZGVmIEJF VEFERUJVRworICAgICAgICAgICAgcHJpbnRmKCJuZXR0b2Mgc2VsZWN0IGZhaWxlZDogJWRcbiIs IHNfZXJybm8pOworI2VuZGlmIC8qIEJFVEFERUJVRyAqLworI2lmZGVmIE5UCisgICAgICAgICAg ICBXU0FTYWZlVG9DYW5jZWwgPSAwOworICAgICAgICAgICAgaWYgKCF3aW45NXNlbGVjdGJ1ZykK KyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9Cisg ICAgICAgIGlmICghRkRfSVNTRVQodHR5ZmQsICZ3ZmRzKSkgeworI2lmZGVmIFNUUkVBTUlORwor ICAgICAgICAgICAgaWYgKHN0cmVhbWluZykKKyAgICAgICAgICAgICAgZ290byBkb19zZWxlY3Q7 CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXR0b2Mi LCIhRkRfSVNTRVQiLHR0eWZkKTsKKyNpZmRlZiBOVAorICAgICAgICAgICAgV1NBU2FmZVRvQ2Fu Y2VsID0gMDsKKyAgICAgICAgICAgIGlmICghd2luOTVzZWxlY3RidWcpCisjZW5kaWYgLyogTlQg Ki8KKyAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorI2lmZGVmIE5UCisgICAg ICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIEJTRFNF TEVDVCAqLworI2lmZGVmIElCTVNFTEVDVAorICAgICAgICB7CisgICAgICAgICAgICBpbnQgdHJp ZXMgPSAwOworICAgICAgICAgICAgd2hpbGUgKHNlbGVjdCgmdHR5ZmQsIDAsIDEsIDAsIDEwMDAp ICE9IDEpIHsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQ7CisgICAgICAgICAgICAgICAgaWYg KHRyaWVzKysgPj0gNjApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogaWYgYWZ0ZXIgNjAgc2Vj b25kcyB3ZSBjYW4ndCBnZXQgcGVybWlzc2lvbiB0byB3cml0ZSAqLworICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJuZXR0b2Mgc2VsZWN0IGZhaWxlZCIsIiIsc29ja2V0X2Vycm5vKTsK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgaWYgKChjb3VudCA9IG5ldHRjaGsoKSkgPCAwKSB7CisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsIm5ldHRvYyIsIm5ldHRjaGsoKSIsY291bnQpOworICAgICAgICAg ICAgICAgICAgICByZXR1cm4oY291bnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorI2VuZGlmIC8qIElCTVNFTEVDVCAqLworI2VuZGlmIC8qIEJTRFNFTEVD VCAqLworICAgICAgICBpZiAoc29ja2V0X3dyaXRlKHR0eWZkLCZjYywxKSA8IDEpIHsKKyAgICAg ICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOyAgICAgICAgIC8qIG1heWJlIGEgZnVu Y3Rpb24gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIm5ldHRvYyBzb2NrZXRfd3JpdGUgZXJy b3IiLCIiLHNfZXJybm8pOworI2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKG9zMnNvY2tldGVy cm9yKHNfZXJybm8pIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgZGVidWco RjEwMSwibmV0dG9jIHNvY2tldF93cml0ZSIsIiIsIGNjKTsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0gZWxzZSByZXR1cm4oLTIpOworI2Vsc2UKKyAgICByZXR1cm4oLTIpOworI2VuZGlmIC8q IFRDUElQTElCICovCisjZW5kaWYgLyogVU5JWCAqLworfQorCisvKiAgTiBFIFQgRiBMIFUgSSAg LS0gIEZsdXNoIG5ldHdvcmsgaW5wdXQgYnVmZmVyICAqLworCisjaWZkZWYgVE5DT0RFCitzdGF0 aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK25ldGdldGMoaW50IHRpbW8pICAgICAgICAgICAgICAg ICAgICAgICAvKiBJbnB1dCBmdW5jdGlvbiB0byBwb2ludCB0by4uLiAqLworI2Vsc2UgIC8qIENL X0FOU0lDICovCituZXRnZXRjKHRpbW8pIGludCB0aW1vOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLi4uaW4gdGhlIHRu X2Rvb3AoKSBjYWxsICovCisjaWZkZWYgVENQSVBMSUIKKyAgICByZXR1cm4gbmV0aW5jKHRpbW8p OworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICByZXR1cm4gdHRpbmModGltbyk7CisjZW5kaWYg LyogVENQSVBMSUIgKi8KK30KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworaW50CituZXRmbHVpKCkg eworICAgIGludCBuOworICAgIGludCBjaDsKKyNpZmRlZiBORVRMRUJVRgorICAgIHR0cHVzaCA9 IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBwZWVrLWFoZWFkIGNoYXIg Ki8KKyAgICB3aGlsZSAobGVfZGF0YSAmJiAobGVfaW5idWYoKSA+IDApKSB7CisgICAgICAgIENI QVIgY2ggPSAnXDAnOworICAgICAgICBpZiAobGVfZ2V0Y2hhcigmY2gpID4gMCkgeworICAgICAg ICAgICAgZGVidWcoRjEwMSwidHRmbHVpIGxlX2luYnVmIGNoIiwiIixjaCk7CisgICAgICAgIH0K KyAgICB9CisjZW5kaWYgLyogTkVUTEVCVUYgKi8KKworI2lmZGVmIFRDUElQTElCCisjaWZkZWYg T1MyCisgICAgUmVxdWVzdFRDUElQTXV0ZXgoU0VNX0lOREVGSU5JVEVfV0FJVCk7CisjZW5kaWYg LyogT1MyICovCisjaWZkZWYgVE5DT0RFCisgICAgaWYgKHR0bnByb3RvID09IE5QX1RFTE5FVCkg eworICAgICAgICAvKiBOZXRmbHVpIG11c3QgcHJvY2VzcyBUZWxuZXQgbmVnb3RpYXRpb25zIG9y IGdldCBvdXQgb2Ygc3luYyAqLworICAgICAgICBpZiAoKG4gPSBuZXR0Y2hrKCkpIDw9IDApCisg ICAgICAgICAgZ290byBleGl0X2ZsdWk7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAg ICAgICAgICBjaCA9IG5ldGluYygxKTsKKyAgICAgICAgICAgIGlmIChjaCA9PSBJQUMpIHsKKyAg ICAgICAgICAgICAgICBleHRlcm4gaW50IGR1cGxleDsgIC8qIHRoaXMgcmVhbGx5IHNob3VsZG4n dCBiZSBoZXJlIGJ1dCAuLi4gKi8KKyAgICAgICAgICAgICAgICBpbnQgdHggPSB0bl9kb29wKChD SEFSKShjaCAmIDB4ZmYpLGR1cGxleCxuZXRnZXRjKTsKKyAgICAgICAgICAgICAgICBpZiAodHgg PT0gMSkgZHVwbGV4ID0gMTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0eCA9PSAyKSBkdXBs ZXggPSAwOworICAgICAgICAgICAgICAgIG4gPSBuZXR0Y2hrKCk7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICB7CisgICAgICAg IHR0aWJ1Zlt0dGlicCt0dGlibl0gPSAnXDAnOworICAgICAgICBkZWJ1ZyhGMTExLCJuZXRmbHVp IDEiLHR0aWJ1Zix0dGlibik7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICBpZiAoVEVM T1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7CisgICAgICAgICAgICBja190bl9kZWNyeXB0KCZ0 dGlidWZbdHRpYnBdLHR0aWJuKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KKyAgICAgICAgdHRpYm4gPSB0dGlicCA9IDA7ICAgICAgICAgICAgICAvKiBGbHVzaCBpbnRl cm5hbCBidWZmZXIgKkZJUlNUKiAqLworICAgICAgICBpZiAodHR5ZmQgPCAxKQorICAgICAgICAg IGdvdG8gZXhpdF9mbHVpOworICAgICAgICBpZiAoKG4gPSBuZXR0Y2hrKCkpID4gMCkgeyAgICAg IC8qIE5vdyBzZWUgd2hhdCdzIHdhaXRpbmcgb24gdGhlIG5ldCAqLworICAgICAgICAgICAgaWYg KG4gPiBUVElCVUZMKSBuID0gVFRJQlVGTDsgICAgICAgLyogYW5kIHNwb25nZSBpdCB1cCAqLwor ICAgICAgICAgICAgZGVidWcoRjEwMSwibmV0Zmx1aSAyIiwiIixuKTsgICAgICAgLyogLi4uICov CisgICAgICAgICAgICBuID0gc29ja2V0X3JlYWQodHR5ZmQsdHRpYnVmLG4pOyAvKiBpbnRvIG91 ciBidWZmZXIgKi8KKyAgICAgICAgICAgIGlmIChuID49IDApIHR0aWJ1ZltuXSA9ICdcMCc7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJuZXRmbHVpIDMiLHR0aWJ1ZixuKTsKKyNpZmRlZiBDS19F TkNSWVBUSU9OCisgICAgICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7 CisgICAgICAgICAgICAgICAgY2tfdG5fZGVjcnlwdCgmdHRpYnVmW3R0aWJwXSxuKTsKKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgICAgICB0dGlidWZb MF0gPSAnXDAnOworICAgICAgICB9CisgICAgfQorI2Vsc2UgIC8qICFUQ1BJUExJQiAqLworICAg IGlmICh0dHlmZCA8IDEpCisgICAgICBnb3RvIGV4aXRfZmx1aTsKKyNpZmRlZiBUTkNPREUKKyAg ICBpZiAodHRucHJvdG8gPT0gTlBfVEVMTkVUKSB7CisgICAgICAgIGlmICgobiA9IHR0Y2hrKCkp IDw9IDApCisgICAgICAgICAgZ290byBleGl0X2ZsdWk7CisgICAgICAgIHdoaWxlIChuLS0gPj0g MCkgeworICAgICAgICAgICAgLyogTmV0Zmx1aSBtdXN0IHByb2Nlc3MgVGVsbmV0IG5lZ290aWF0 aW9ucyBvciBnZXQgb3V0IG9mIHN5bmMgKi8KKyAgICAgICAgICAgIGNoID0gdHRpbmMoMSk7Cisg ICAgICAgICAgICBpZiAoY2ggPT0gSUFDKSB7CisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBk dXBsZXg7ICAvKiB0aGlzIHJlYWxseSBzaG91bGRuJ3QgYmUgaGVyZSBidXQgLi4uICovCisgICAg ICAgICAgICAgICAgaW50IHR4ID0gdG5fZG9vcCgoQ0hBUikoY2ggJiAweGZmKSxkdXBsZXgsbmV0 Z2V0Yyk7CisgICAgICAgICAgICAgICAgaWYgKHR4ID09IDEpIGR1cGxleCA9IDE7CisgICAgICAg ICAgICAgICAgZWxzZSBpZiAodHggPT0gMikgZHVwbGV4ID0gMDsKKyAgICAgICAgICAgICAgICBu ID0gdHRjaGsoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9IGVsc2UKKyNlbmRp ZiAvKiBUTkNPREUgKi8KKyAgICBpZiAoKG4gPSB0dGNoaygpKSA+IDApIHsKKyAgICAgICAgZGVi dWcoRjEwMSwibmV0Zmx1aSBub24tVENQSVBMSUIiLCIiLG4pOworICAgICAgICB3aGlsZSAoKG4t LSkgJiYgdHRpbmMoMSkgPiAtMSkgIC8qIERvbid0IHdvcnJ5LCB0dGluYygpIGlzIGJ1ZmZlcmVk ICovCisgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGl0IGhh bmRsZXMgdGhlIGRlY3J5cHRpb24uLi4gKi8KKyAgICB9CisjZW5kaWYgLyogVENQSVBMSUIgKi8K KyAgZXhpdF9mbHVpOgorI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5k aWYgLyogT1MyICovCisgICAgcmV0dXJuKDApOworfQorCisjaWZkZWYgQ0tfS0VSQkVST1MKKy8q IFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGVuY3J5cHRlZCBy bG9naW4gKi8KKy8qIFRoZXkgYXJlIGNhbGxlZCB3aXRoIG5ldHRvYygpIG9yIG5ldHRvbCgpIGFy ZSB0cmFuc21pdHRpbmcgICAgKi8KKy8qIGVuY3J5cHRlZCBkYXRhLiAgVGhleSBjYWxsIGEgZnVu Y3Rpb24gdG8gZW5jcnlwdCB0aGUgZGF0YSAgICAgKi8KKy8qIGFuZCB0aGF0IGZ1bmN0aW9uIG5l ZWRzIHRvIGJlIGFibGUgdG8gd3JpdGUgdG8vcmVhZCBmcm9tIHRoZSAgKi8KKy8qIG5ldHdvcmsg aW4gYW4gdW5pbXBlZGVkIG1hbm5lci4gIEhlbmNlLCB0aGVzZSB0d28gc2ltcGxlIGZucy4gKi8K K2ludAorbmV0X3dyaXRlKGZkLCBidWYsIGxlbikKKyAgICBpbnQgZmQ7CisgICAgcmVnaXN0ZXIg Y29uc3QgY2hhciAqYnVmOworICAgIGludCBsZW47Cit7CisgICAgaW50IGNjOworICAgIHJlZ2lz dGVyIGludCB3cmxlbiA9IGxlbjsKKyAgICBkbyB7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAg Y2MgPSBzb2NrZXRfd3JpdGUoZmQsIGJ1Ziwgd3JsZW4pOworI2Vsc2UKKyAgICAgICAgY2MgPSB3 cml0ZShmZCxidWYsd3JsZW4pOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgIGlmIChj YyA8IDApIHsKKyAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAg ICAgICAgZGVidWcoRjEwMSwibmV0X3dyaXRlIGVycm9yIiwiIixzX2Vycm5vKTsKKyNpZmRlZiBP UzIKKyAgICAgICAgICAgIGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj b250aW51ZTsKKyNlbHNlIC8qIE9TMiAqLworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRS KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJ1 ZiArPSBjYzsKKyAgICAgICAgICAgIHdybGVuIC09IGNjOworICAgICAgICB9CisgICAgfSB3aGls ZSAod3JsZW4gPiAwKTsKKyAgICByZXR1cm4obGVuKTsKK30KK2ludAorbmV0X3JlYWQoZmQsIGJ1 ZiwgbGVuKQorICAgIGludCBmZDsKKyAgICByZWdpc3RlciBjaGFyICpidWY7CisgICAgcmVnaXN0 ZXIgaW50IGxlbjsKK3sKKyAgICBpbnQgY2MsIGxlbjIgPSAwOworCisgICAgZG8geworI2lmZGVm IFRDUElQTElCCisgICAgICAgIGNjID0gc29ja2V0X3JlYWQoZmQsIGJ1ZiwgbGVuKTsKKyNlbHNl CisgICAgICAgIGNjID0gcmVhZChmZCxidWYsbGVuKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2Mg PCAwKSB7CisgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDEsIm5ldF9yZWFkIGVycm9yIiwiIixzX2Vycm5vKTsKKyNpZmRlZiBPUzIK KyAgICAgICAgICAgIGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCisgICAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHJldHVybihj Yyk7ICAgICAgICAgIC8qIGVycm5vIGlzIGFscmVhZHkgc2V0ICovCisgICAgICAgIH0KKyAgICAg ICAgZWxzZSBpZiAoY2MgPT0gMCkgeworICAgICAgICAgICAgbmV0Y2xvcygpOworICAgICAgICAg ICAgcmV0dXJuKGxlbjIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmICs9IGNj OworICAgICAgICAgICAgbGVuMiArPSBjYzsKKyAgICAgICAgICAgIGxlbiAtPSBjYzsKKyAgICAg ICAgfQorICAgIH0gd2hpbGUgKGxlbiA+IDApOworICAgIHJldHVybihsZW4yKTsKK30KKyNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlmIC8qIE5PTkVUICovCisKKy8qIGdldGxvY2FsaXBh ZGRyKCkgYXR0ZW1wdHMgdG8gcmVzb2x2ZSBhbiBJUCBBZGRyZXNzIGZvciB0aGUgbG9jYWwgbWFj aGluZS4KKyAqICAgSWYgdGhlIGhvc3QgaXMgbXVsdGktaG9tZWQgaXQgcmV0dXJucyBvbmx5IG9u ZSBhZGRyZXNzLgorICoKKyAqIFR3byB0ZWNobmlxdWVzIGFyZSB1c2VkLgorICogKDEpIGdldCB0 aGUgbG9jYWwgaG9zdCBuYW1lIGFuZCBwZXJmb3JtIGEgRE5TIGxvb2t1cCwgdGhlbiB0YWtlCisg KiAgICAgdGhlIGZpcnN0IGVudHJ5OworICogKDIpIG9wZW4gYSBVRFAgc29ja2V0LCB1c2UgaXQg dG8gY29ubmVjdCB0byBhIGZpY3RpdGlvdXMgaG9zdCAoaXQncyBPSywKKyAqICAgIG5vIGRhdGEg aXMgc2VudCksIHRoZW4gcmV0cmlldmUgdGhlIGxvY2FsIGFkZHJlc3MgZnJvbSB0aGUgc29ja2V0 LgorICogTm90ZTogdGhlIHNlY29uZCB0ZWNobmlxdWUgd29uJ3Qgd29yayBvbiBNaWNyb3NvZnQg c3lzdGVtcy4gIFNlZQorICogQXJ0aWNsZSBJRDogUTEyOTA2NSBQUkI6IEdldHNvY2tuYW1lKCkg UmV0dXJucyBJUCBBZGRyZXNzIDAuMC4wLjAgZm9yIFVEUAorICovCisKKy8qIFRlY2huaXF1ZSBu dW1iZXIgb25lIGNhbm5vdCB3b3JrIHJlbGlhYmx5IGlmIHRoZSBtYWNoaW5lIGlzIGEgbGFwdG9w CisgKiBhbmQgdGhlIGhvc3RuYW1lIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBoeXNpY2FsIGFkYXB0 ZXIgd2hpY2ggaXMgbm90CisgKiBpbnN0YWxsZWQgYW5kIGEgUFBQIGNvbm5lY3Rpb24gaXMgYmVp bmcgdXNlZCBpbnN0ZWFkLiAgVGhpcyBpcyBiZWNhdXNlCisgKiB0aGUgaG9zdG5hbWUgRE5TIGxv b2t1cCB3aWxsIHN1Y2NlZWQgZm9yIHRoZSBwaHlzaWNhbCBhZGFwdGVyIGV2ZW4gdGhvdWdoCisg KiBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHVzZSBpdC4gIEluIE5UNCBTUDQsIHRoZSBnZXRo b3N0YnluYW1lKCkKKyAqIHdoZW4gZ2l2ZW4gdGhlIHJlc3VsdCBvZiBnZXRob3N0bmFtZSgpIHJl dHVybnMgbm90IHRoZSByZWFsIEROUyBlbnRyaWVzCisgKiBmb3IgdGhhdCBuYW1lK2RvbWFpbi4g IEluc3RlYWQgaXQgcmV0dXJucyBhbGwgb2YgdGhlIHN0YXRpYyBhbmQgZHluYW1pYworICogSVAg YWRkcmVzc2VzIGFzc2lnbmVkIHRvIGFueSBwaHlzaWNhbCBvciB2aXJ0dWFsIGFkYXB0ZXIgZGVm aW5lZCBpbiB0aGUKKyAqIHN5c3RlbSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IGl0IGlz IGluc3RhbGxlZC4gIFRoZSBvcmRlciBvZiB0aGUKKyAqIGFkZHJlc3NlcyBpcyBmaXhlZCBhY2Nv cmRpbmcgdG8gdGhlIGJpbmRpbmcgb3JkZXIgaW4gdGhlIE5UIHJlZ2lzdHJ5LgorICovCisKKy8q CisgKiBJdCBhcHBlYXJzIHRoYXQgY2FsbGluZyBnZXRob3N0YnluYW1lKE5VTEwpIGlzIG1vcmUg cmVsaWFibGUgdGhhbgorICogY2FsbGluZyBnZXRob3N0YnluYW1lKGdldGhvc3RuYW1lKCkpIG9u IFdpbmRvd3MuICBTbyBvbiBXaW5kb3dzIHdlIHdpbGwKKyAqIG9ubHkgY2FsbCBnZXRob3N0Ynlu YW1lKE5VTEwpLgorICovCisKK2ludAorZ2V0bG9jYWxpcGFkZHIoKSB7CisjaWZuZGVmIGRhdGFn ZW5lcmFsCisgICAgc3RydWN0IHNvY2thZGRyX2luIGxfc2E7CisgICAgc3RydWN0IHNvY2thZGRy X2luIHJfc2E7CisgICAgR1NPQ0tOQU1FX1Qgc2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf aW4pOworICAgIGludCBzb2NrOworICAgIGludCByYzsKKyAgICBzdHJ1Y3QgaW5fYWRkciBsYWRk cjsKKworICAgIC8qIGlmIHN0aWxsIG5vdCByZXNvbHZlZCwgdGhlbiB0cnkgc2Vjb25kIHN0cmF0 ZWd5ICovCisgICAgLyogVGhpcyBzZWNvbmQgc3RyYXRlZ3kgZG9lcyBub3Qgd29yayBvbiBXaW5k b3dzICovCisKKyAgICBkZWJ1ZyhGMTAwLCJnZXRsb2NhbGlwYWRkciIsIiIsMCk7CisgICAgbWVt c2V0KCZsX3NhLDAsc2xlbik7CisgICAgbWVtc2V0KCZyX3NhLDAsc2xlbik7CisKKyAgICAvKiBn ZXQgYSBVRFAgc29ja2V0ICovCisgICAgc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFN LCAwKTsKKyAgICBpZiAoc29jayAhPSAtMSkgeworICAgICAgICAvKiBjb25uZWN0IHRvIGFyYmly YXJ5IHBvcnQgYW5kIGFkZHJlc3MgKE5PVCBsb29wYmFjaykgKi8KKyAgICAgICAgcl9zYS5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgcl9zYS5zaW5fcG9ydCA9IGh0b25zKElQUE9SVF9F Q0hPKTsKKworICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGlzIGFuICJpbGxlZ2FsIGNvbnZlcnNp b24iIGluIEFPUy9WUyAqLworICAgICAgICAvKiAoYW5kIHdobyBrbm93cyB3aGVyZSBlbHNlKSAq LworCisjaWZkZWYgSU5BRERSWAorICAgICAgICBpbmFkZHJ4ID0gaW5ldF9hZGRyKCIxMjguMTI3 LjUwLjEiKTsKKyAgICAgICAgcl9zYS5zaW5fYWRkci5zX2FkZHIgPSAqKHVuc2lnbmVkIGxvbmcg KikmaW5hZGRyeDsKKyNlbHNlCisgICAgICAgIHJfc2Euc2luX2FkZHIuc19hZGRyID0gaW5ldF9h ZGRyKCIxMjguMTI3LjUwLjEiKTsKKyNlbmRpZiAvKiBJTkFERFJYICovCisgICAgICAgIHJjID0g Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZyX3NhLCBzaXplb2Yoc3RydWN0IHNv Y2thZGRyKSk7CisgICAgICAgIGlmICghcmMpIHsgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0 IGxvY2FsIGFkZHJlc3MgKi8KKyAgICAgICAgICAgIGdldHNvY2tuYW1lKHNvY2ssKHN0cnVjdCBz b2NrYWRkciAqKSZsX3NhLCZzbGVuKTsKKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgc29j a2V0X2Nsb3NlKHNvY2spOyAgICAgICAgIC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGUgc29ja2V0ICov CisjZWxzZQorICAgICAgICAgICAgY2xvc2Uoc29jayk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8K KyAgICAgICAgICAgIGlmIChsX3NhLnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7Cisg ICAgICAgICAgICAgICAgbXl4aXBhZGRyID0gbnRvaGwobF9zYS5zaW5fYWRkci5zX2FkZHIpOwor ICAgICAgICAgICAgICAgIGNrc3RybmNweShteWlwYWRkciwoY2hhciAqKWluZXRfbnRvYShsX3Nh LnNpbl9hZGRyKSwyMCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZ2V0bG9jYWxpcGFk ZHIgc2V0dGluZyBidWYgdG8iLG15aXBhZGRyLDApOworICAgICAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZ2V0bG9jYWxp cGFkZHJzKG15aXBhZGRyLHNpemVvZihteWlwYWRkciksMCk7CisjZWxzZSAvKiBkYXRhZ2VuZXJh bCAqLworICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KK30KKworaW50 CitnZXRsb2NhbGlwYWRkcnMoYnVmLGJ1ZnN6LGluZGV4KQorICAgIGNoYXIgKiBidWY7CisgICAg aW50ICAgIGJ1ZnN6OworICAgIGludCAgICBpbmRleDsKKy8qIGdldGxvY2FsaXBhZGRycyAqLyB7 CisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgY2hhciBsb2NhbGhvc3RbMjU2XTsKKyAgICBzdHJ1 Y3QgaG9zdGVudCAqIGhvc3Q9TlVMTDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gbF9zYTsKKyAg ICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcl9zYTsKKyAgICBHU09DS05BTUVfVCBzbGVuID0gc2l6ZW9m KHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgaW50IHJjOworI2lmZGVmIENPTU1FTlQKKyAgICBp bnQgc29jazsKKyAgICBjaGFyIG1lc3NhZ2VCdWZbNjBdOworICAgIHN0cnVjdCBpbl9hZGRyIGxh ZGRyOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGRlYnVnKEYxMDAsImdldGxvY2FsaXBh ZGRycyIsIiIsMCk7CisgICAgbWVtc2V0KCZsX3NhLDAsc2xlbik7CisgICAgbWVtc2V0KCZyX3Nh LDAsc2xlbik7CisKKyAgICAvKiBpbml0IGxvY2FsIGFkZHJlc3MgKHRvIHplcm8pICovCisgICAg bF9zYS5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworCisjaWZkZWYgQ0tHSE5MSE9TVAor ICAgIHJjID0gZ2V0aG9zdG5hbWUobG9jYWxob3N0LCAyNTYpOworICAgIGRlYnVnKEYxMTAsImdl dGxvY2FsaXBhZGRycyBsb2NhbGhvc3QiLGxvY2FsaG9zdCwwKTsKKyNlbHNlCisgICAgLyogVGhp cyBkb2Vzbid0IHdvcmsgb24gc29tZSBwbGF0Zm9ybXMsIGUuZy4gU29sYXJpcyAqLworICAgIHJj ID0gMDsKKyAgICBsb2NhbGhvc3RbMF0gPSAnXDAnOworI2lmZGVmIE5UCisgICAgaWYgKCB3aW5z b2NrX3ZlcnNpb24gPCAyMCApIHsKKyAgICAgICAgcmMgPSBnZXRob3N0bmFtZShsb2NhbGhvc3Qs IDI1Nik7CisgICAgICAgIGRlYnVnKEYxMTAsImdldGxvY2FsaXBhZGRycyBsb2NhbGhvc3QiLGxv Y2FsaG9zdCwwKTsKKyAgICB9CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBDS0dITkxIT1NU ICovCisgICAgaWYgKCFyYykgeworICAgICAgICAvKiByZXNvbHZlIGhvc3QgbmFtZSBmb3IgbG9j YWwgYWRkcmVzcyAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRsb2NhbGlwYWRkcnMiLCJjYWxs aW5nIGdldGhvc3RieW5hbWUoKSIsMCk7CisgICAgICAgIGhvc3QgPSBnZXRob3N0YnluYW1lKGxv Y2FsaG9zdCk7CisgICAgICAgIC8qIGRlYnVnKEYxMTEsImdldGxvY2FsaXBhZGRycyIsImdldGhv c3RieW5hbWUoKSByZXR1cm5lZCIsaG9zdCk7ICovCisgICAgICAgIGlmIChob3N0KSB7CisjaWZk ZWYgSEFERFJMSVNUCisgICAgICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7Cisg ICAgICAgICAgICBpZiAoIGluZGV4IDwgMCB8fCBpbmRleCA+IDYzIHx8ICFob3N0LT5oX2FkZHJf bGlzdFtpbmRleF0gKSB7CisgICAgICAgICAgICAgICAgYnVmWzBdID0gJ1wwJzsKKyAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbF9zYS5zaW5f YWRkci5zX2FkZHIgPQorICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopIChob3N0LT5o X2FkZHJfbGlzdFtpbmRleF0pKTsKKyAgICAgICAgICAgIGNrc3RybmNweShidWYsKGNoYXIgKilp bmV0X250b2EobF9zYS5zaW5fYWRkciksMjApOworICAgICAgICAgICAgZGVidWcoRjExMCwiZ2V0 bG9jYWxpcGFkZHJzIHNldHRpbmcgYnVmIHRvIixidWYsMCk7CisKKyNpZmRlZiBDT01NRU5UCisg ICAgICAgICAgICAvKiBUaGlzIGlzIGZvciByZXBvcnRpbmcgbXVsdGlwbGUgSVAgQWRkcmVzcyAq LworICAgICAgICAgICAgd2hpbGUgKGhvc3QtPmhfYWRkcl9saXN0ICYmIGhvc3QtPmhfYWRkcl9s aXN0WzBdKSB7CisgICAgICAgICAgICAgICAgbF9zYS5zaW5fYWRkci5zX2FkZHIgPQorICAgICAg ICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKSAoaG9zdC0+aF9hZGRyX2xpc3RbMF0pKTsK KyAgICAgICAgICAgICAgICBja3N0cm5jcHkobWVzc2FnZUJ1ZiwKKyAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopaW5ldF9udG9hKGxfc2Euc2luX2FkZHIpLDYwKTsKKyAgICAgICAgICAg ICAgICBpZiAodGNwX2FkZHJlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAo bWVzc2FnZUJ1Zix0Y3BfYWRkcmVzcykpCisgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5 KG15aXBhZGRyLHRjcF9hZGRyZXNzLDIwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgZGVidWcoRjExMCwiZ2V0bG9jYWxpcGFkZHJzIGlwIGFkZHJlc3MgbGlzdCIsIG1lc3Nh Z2VCdWYsIDApOworICAgICAgICAgICAgICAgIGhvc3QtPmhfYWRkcl9saXN0Kys7CisgICAgICAg ICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2Vsc2UgICAvKiBIQUREUkxJU1QgKi8KKyAg ICAgICAgICAgIGlmIChpbmRleCAhPSAwKSB7CisgICAgICAgICAgICAgICAgYnVmWzBdID0gJ1ww JzsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgbF9zYS5zaW5fYWRkci5zX2FkZHIgPSAqKCh1bnNpZ25lZCBsb25nICopIChob3N0LT5oX2Fk ZHIpKTsKKyAgICAgICAgICAgIGNrc3RybmNweShidWYsKGNoYXIgKilpbmV0X250b2EobF9zYS5z aW5fYWRkciksYnVmc3opOworICAgICAgICAgICAgZGVidWcoRjExMCwiZ2V0bG9jYWxpcGFkZHJz IHNldHRpbmcgYnVmIHRvIixidWYsMCk7CisjZW5kaWYgIC8qIEhBRERSTElTVCAqLworICAgICAg ICAgICAgcmV0dXJuKDApOworICAgICAgICB9IGVsc2UgZGVidWcoRjExMCwKKyAgICAgICAgICAg ICAgICAgICAgICJnZXRsb2NhbGlwYWRkcnM6IGdldGhvc3RieW5hbWUoKSBmYWlsZWQiLAorICAg ICAgICAgICAgICAgICAgICAgbG9jYWxob3N0LAorICAgICAgICAgICAgICAgICAgICAgMAorICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICB9CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAg ICByZXR1cm4oLTEpOworfQorCisjaWZkZWYgUkxPR0NPREUgICAgICAgICAgICAgICAgIC8qIFRD UC9JUCBSTE9HSU4gcHJvdG9jb2wgc3VwcG9ydCBjb2RlICovCitpbnQKK3Jsb2dfbmF3cygpIHsK KyAgICBzdHJ1Y3QgcmxvZ19uYXdzIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpZFs0XTsKKyAg ICAgICAgdW5zaWduZWQgc2hvcnQgcm93cywgY29scywgeXBpeCwgeHBpeDsKKyAgICB9IG5hd3Ni dWY7CisKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpCisgICAgICByZXR1cm4gMDsKKyAgICBp ZiAodHRucHJvdG8gIT0gTlBfUkxPR0lOCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgJiYg dHRucHJvdG8gIT0gTlBfSzRMT0dJTgorICAgICAgICAmJiB0dG5wcm90byAhPSBOUF9FSzRMT0dJ TgorICAgICAgICAmJiB0dG5wcm90byAhPSBOUF9LNUxPR0lOCisgICAgICAgICYmIHR0bnByb3Rv ICE9IE5QX0VLNUxPR0lOCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICAgICAgICkKKyAg ICAgIHJldHVybiAwOworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9OQVdTKSkKKyAgICAgIHJl dHVybiAwOworCisgICAgZGVidWcoRjEwMCwicmxvZ2luIFdpbmRvdyBTaXplIHNlbnQiLCIiLDAp OworCisgICAgbmF3c2J1Zi5pZFswXSA9IG5hd3NidWYuaWRbMV0gPSAwMzc3OworICAgIG5hd3Ni dWYuaWRbMl0gPSBuYXdzYnVmLmlkWzNdID0gJ3MnOworI2lmZGVmIE9TMgorICAgIG5hd3NidWYu cm93cyA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydCkgKFZzY3JuR2V0SGVpZ2h0KFZURVJNKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAtKHR0X3N0YXR1c1tWVEVSTV0/MTowKSkpOworICAgIG5h d3NidWYuY29scyA9IGh0b25zKCh1bnNpZ25lZCBzaG9ydCkgVnNjcm5HZXRXaWR0aChWVEVSTSkp OworI2Vsc2UgLyogT1MyICovCisgICAgbmF3c2J1Zi5yb3dzID0gaHRvbnMoKHVuc2lnbmVkIHNo b3J0KSB0dF9yb3dzKTsKKyAgICBuYXdzYnVmLmNvbHMgPSBodG9ucygodW5zaWduZWQgc2hvcnQp IHR0X2NvbHMpOworI2VuZGlmIC8qIE9TMiAqLworICAgIG5hd3NidWYueXBpeCA9IGh0b25zKDAp OyAgICAgICAgICAgIC8qIHkgcGl4ZWxzICovCisKKyAgICBuYXdzYnVmLnhwaXggPSBodG9ucygw KTsgICAgICAgICAgICAvKiB4IHBpeGVscyAqLworICAgIGlmICh0dG9sKChDSEFSICopKCZuYXdz YnVmKSwgc2l6ZW9mKG5hd3NidWYpKSA8IDApCisgICAgICByZXR1cm4oLTEpOworICAgIHJldHVy bigwKTsKK30KKworI2lmZGVmIE9TMk9SVU5JWAorI2RlZmluZSBSTE9HT1VUQlVGCisjZW5kaWYg LyogT1MyICovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3Jsb2dfaW5pKENIQVIgKiBo b3N0bmFtZSwgaW50IHBvcnQsCisgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBsX2FkZHIs IHN0cnVjdCBzb2NrYWRkcl9pbiAqIHJfYWRkcikKKyNlbHNlIC8qIENLX0FOU0lDICovCitybG9n X2luaShob3N0bmFtZSwgcG9ydCwgbF9hZGRyLCByX2FkZHIpCisgICAgQ0hBUiAqIGhvc3RuYW1l OworICAgIGludCBwb3J0OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqIGxfYWRkcjsKKyAgICBz dHJ1Y3Qgc29ja2FkZHJfaW4gKiByX2FkZHI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHJs b2dfaW5pICovIHsKKworI2lmZGVmIFJMT0dPVVRCVUYKKyAgICBjaGFyIG91dGJ1Zls1MTJdOwor ICAgIGludCAgb3V0Ynl0ZXM9MDsKKyNlbmRpZiAvKiBSTE9HT1VUQlVGICovCisgICAgaW50IGZs YWcgPSAwOworI2RlZmluZSBURVJNTEVOIDE2CisjZGVmaW5lIENPTlNQRExFTiAxNgorICAgIENI QVIgbG9jYWx1c2VyW1VJREJVRkxFTisxXTsKKyAgICBDSEFSIHJlbW90ZXVzZXJbVUlEQlVGTEVO KzFdOworICAgIGludCB1c2VybGVuID0gMDsKKyAgICBDSEFSIHRlcm1fc3BlZWRbVEVSTUxFTitD T05TUERMRU4rMV07CisjaWZkZWYgQ09OR1NQRAorICAgIGxvbmcgY29uc3BkID0gLTFMOworI2Vu ZGlmIC8qIENPTkdTUEQgKi8KKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHR0X3R5cGUsIG1h eF90dDsKKyAgICBleHRlcm4gc3RydWN0IHR0X2luZm9fcmVjIHR0X2luZm9bXTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICBpbnQgaSwgbjsKKworICAgIGludCByYyA9IDA7CisgICAgdG5fcmVzZXQo KTsgICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FsbCB3aWxsIHJlc2V0IGFsbCBvZiB0aGUgVGVs bmV0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9wdGlvbnMgYW5kIHRo ZW4gcXVpdC4gIFdlIG5lZWQgdG8gZG8gICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHRoaXMgc2luY2Ugd2UgdXNlIHRoZSBUZWxuZXQgb3B0aW9ucyAgICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIGhvbGQgdmFyaW91cyBzdGF0ZSBpbmZvcm1h dGlvbiAgICAgICovCisgICAgZHVwbGV4ID0gMDsgICAgICAgICAgICAgICAgIC8qIFJsb2dpbiBp cyBhbHdheXMgcmVtb3RlIGVjaG8gKi8KKyAgICBybG9nX2luYmFuZCA9IDA7CisKKyNpZmRlZiBD S19UVEdXU0laCisvKgorICBCdXQgY29tcHV0ZSB0aGUgdmFsdWVzIGFueXdheSBiZWZvcmUgdGhl IGZpcnN0IHJlYWQgc2luY2UgdGhlIG91dC0KKyAgb2YtYmFuZCBOQVdTIHJlcXVlc3Qgd291bGQg YXJyaXZlIGJlZm9yZSB0aGUgZmlyc3QgZGF0YSBieXRlIChOVUxMKS4KKyovCisjaWZkZWYgT1My CisgICAgLyogQ29uc29sZSB0ZXJtaW5hbCBzY3JlZW4gcm93cyBhbmQgY29sdW1ucyAqLworICAg IGRlYnVnKEYxMDEsInJsb2dfaW5pIHR0X3Jvd3MgMSIsIiIsVnNjcm5HZXRIZWlnaHQoVlRFUk0p CisgICAgICAgICAgIC0odHRfc3RhdHVzW1ZURVJNXT8xOjApKTsKKyAgICBkZWJ1ZyhGMTAxLCJy bG9nX2luaSB0dF9jb2xzIDEiLCIiLFZzY3JuR2V0V2lkdGgoVlRFUk0pKTsKKyAgICAvKiBOb3Qg a25vd24geWV0ICovCisgICAgaWYgKFZzY3JuR2V0V2lkdGgoVlRFUk0pIDwgMCB8fAorICAgICAg ICBWc2NybkdldEhlaWdodChWVEVSTSktKHR0X3N0YXR1c1tWVEVSTV0/MTowKSA8IDApIHsKKyAg ICAgICAgdHRnd3NpeigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZ2V0IHNjcmVl biBkaW1lbnNpb25zICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsCisgICAgICAgICAgInJsb2df aW5pIHR0X3Jvd3MgMiIsCisgICAgICAgICAgIiIsCisgICAgICAgICAgVnNjcm5HZXRIZWlnaHQo VlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkKKyAgICAgICAgICApOworICAgIGRlYnVnKEYx MDEsInJsb2dfaW5pIHR0X2NvbHMgMiIsIiIsVnNjcm5HZXRXaWR0aChWVEVSTSkpOworI2Vsc2Ug LyogT1MyICovCisgICAgZGVidWcoRjEwMSwicmxvZ19pbmkgdHRfcm93cyAxIiwiIix0dF9yb3dz KTsKKyAgICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9jb2xzIDEiLCIiLHR0X2NvbHMpOworICAg IGlmICh0dF9yb3dzIDwgMCB8fCB0dF9jb2xzIDwgMCkgeyAgIC8qIE5vdCBrbm93biB5ZXQgKi8K KyAgICAgICAgdHRnd3NpeigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZmluZCBv dXQgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwicmxvZ19pbmkgdHRfcm93cyAyIiwiIix0dF9y b3dzKTsKKyAgICBkZWJ1ZyhGMTAxLCJybG9nX2luaSB0dF9jb2xzIDIiLCIiLHR0X2NvbHMpOwor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAgIHR0Zmx1aSgp OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGJ5IGZsdXNoaW5nIHRoZSBidWZm ZXJzICovCisKKyAgICBybG9nX21vZGUgPSBSTF9DT09LRUQ7CisKKyAgICAvKiBEZXRlcm1pbmUg dGhlIHVzZXIncyBsb2NhbCB1c2VybmFtZSAuLi4gKi8KKworICAgIGxvY2FsdXNlclswXSA9ICdc MCc7CisjaWZkZWYgTlQKKyAgICB7CisgICAgICAgIGNoYXIgbG9jYWx1aWRbVUlEQlVGTEVOKzFd OworICAgICAgICBja3N0cm5jcHkoKGNoYXIgKilsb2NhbHVzZXIsKGNoYXIgKilHZXRMb2NhbFVz ZXIoKSxVSURCVUZMRU4pOworICAgIH0KKworICAgIGlmICggIWxvY2FsdXNlclswXSApCisjZW5k aWYgLyogTlQgKi8KKyAgICB7CisgICAgICAgIGNoYXIgKiB1c2VyID0gZ2V0ZW52KCJVU0VSIik7 CisgICAgICAgIGlmICghdXNlcikKKyAgICAgICAgICB1c2VyID0gIiI7CisgICAgICAgIHVzZXJs ZW4gPSBzdHJsZW4odXNlcik7CisgICAgICAgIGRlYnVnKEYxMTEsInJsb2dpbiBnZXRlbnYoVVNF UikiLHVzZXIsdXNlcmxlbik7CisgICAgICAgIGNrc3RybmNweSgoY2hhciAqKWxvY2FsdXNlcix1 c2VyLFVJREJVRkxFTik7CisgICAgICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIGxvY2FsdXNlciAx Iixsb2NhbHVzZXIsMCk7CisgICAgfQorICAgIGlmICggIWxvY2FsdXNlclswXSApCisgICAgICAg IHN0cmNweSgoY2hhciAqKWxvY2FsdXNlciwidW5rbm93biIpOworICAgIGVsc2UgaWYgKGNrX2xj bmFtZSkgeworICAgICAgICBja2xvd2VyKChjaGFyICopbG9jYWx1c2VyKTsKKyAgICAgICAgZGVi dWcoRjExMCwicmxvZ19pbmkgbG9jYWx1c2VyIDIiLGxvY2FsdXNlciwwKTsKKyAgICB9CisKKyAg ICAvKiBBbmQgdGhlIHVzZXJuYW1lIHRvIGxvZ2luIHdpdGggKi8KKyAgICBpZiAodWlkYnVmWzBd KSB7CisgICAgICAgIGNrc3RybmNweSgoY2hhciAqKXJlbW90ZXVzZXIsdWlkYnVmLFVJREJVRkxF Tik7CisgICAgICAgIGRlYnVnKEYxMTAsInJsb2dfaW5pIHJlbW90ZXVzZXIgMSIscmVtb3RldXNl ciwwKTsKKyAgICB9IGVsc2UgaWYgKGxvY2FsdXNlclswXSkgeworICAgICAgICBja3N0cm5jcHko KGNoYXIgKilyZW1vdGV1c2VyLChjaGFyICopbG9jYWx1c2VyLFVJREJVRkxFTik7CisgICAgICAg IGRlYnVnKEYxMTAsInJsb2dfaW5pIHJlbW90ZXVzZXIgMiIscmVtb3RldXNlciwwKTsKKyAgICB9 IGVsc2UgeworICAgICAgICByZW1vdGV1c2VyWzBdID0gJ1wwJzsKKyAgICAgICAgZGVidWcoRjEx MCwicmxvZ19pbmkgcmVtb3RldXNlciAzIixyZW1vdGV1c2VyLDApOworICAgIH0KKyAgICBpZiAo Y2tfbGNuYW1lKQorICAgICAgY2tsb3dlcigoY2hhciAqKXJlbW90ZXVzZXIpOworICAgIGRlYnVn KEYxMTAsInJsb2dfaW5pIHJlbW90ZXVzZXIgNCIscmVtb3RldXNlciwwKTsKKworICAgIC8qIFRo ZSBjb21tYW5kIHRvIGlzc3VlIGlzIHRoZSB0ZXJtaW5hbCB0eXBlIGFuZCBzcGVlZCAqLworICAg IHRlcm1fc3BlZWRbMF0gPSAnXDAnOworICAgIGlmICh0bl90ZXJtKSB7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNFVCBURUxORVQgVEVSTUlOQUwtVFlQRSB2YWx1ZSAqLworICAgICAgICBpZiAo KnRuX3Rlcm0pIHsgICAgICAgICAgICAgICAgIC8qIChpZiBhbnkpIHRha2VzIHByZWNlZGVuY2Uu ICovCisgICAgICAgICAgICBja3N0cm5jcHkoKGNoYXIgKil0ZXJtX3NwZWVkLCB0bl90ZXJtLCBU RVJNTEVOKTsKKyAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICB9CisgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHRoZSBsb2NhbCB0ZXJtaW5h bCB0eXBlICovCisjaWZkZWYgT1MyCisgICAgICAgIC8qIEluIHRlcm1pbmFsLWVtdWxhdGluZyB2 ZXJzaW9ucywgaXQncyB0aGUgU0VUIFRFUk0gVFlQRSB2YWx1ZSAqLworICAgICAgICBja3N0cm5j cHkodGVybV9zcGVlZCwgKHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90dCkgPworICAg ICAgICAgICAgICAgIHR0X2luZm9bdHRfdHlwZV0ueF9uYW1lIDogIm5ldHdvcmsiLCBURVJNTEVO KTsKKyNlbHNlCisgICAgICAgIC8qIEluIHRoZSBvdGhlcnMsIHdlIGp1c3QgbG9vayBhdCB0aGUg VEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLworICAgICAgICB7CisgICAgICAgICAgICBjaGFy ICpwID0gZ2V0ZW52KCJURVJNIik7CisgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAg Y2tzdHJuY3B5KChjaGFyICopdGVybV9zcGVlZCxwLFRFUk1MRU4pOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICB0ZXJtX3NwZWVkWzBdID0gJ1wwJzsKKyNpZmRlZiBWTVMKKyAgICAg ICAgICAgIGZvciAocCA9IChjaGFyICopIHRlcm1fc3BlZWQ7ICpwOyBwKyspIHsKKyAgICAgICAg ICAgICAgICBpZiAoKnAgPT0gJy0nICYmICghc3RyY21wKHAsIi04MCIpIHx8ICFzdHJjbXAocCwi LTEzMiIpKSkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVsc2Ug aWYgKGlzdXBwZXIoKnApKQorICAgICAgICAgICAgICAgICAgKnAgPSB0b2xvd2VyKCpwKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICpwID0gJ1wwJzsKKyNlbmRpZiAvKiBWTVMgKi8KKyAg ICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKyAgICBuID0gc3RybGVuKChjaGFyICop dGVybV9zcGVlZCk7CisgICAgaWYgKG4gPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog V2UgaGF2ZSBhIHRlcm1pbmFsIHR5cGUgKi8KKyAgICAgICAgaWYgKCFmbGFnKSB7ICAgICAgICAg ICAgICAgICAgICAvKiBJZiBub3QgdXNlci1zcGVjaWZpZWQgKi8KKyAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBuOyBpKyspICAgICAvKiB0aGVuIGxvd2VyY2FzZSBpdC4gICAgKi8KKyAgICAg ICAgICAgICAgaWYgKGlzdXBwZXIodGVybV9zcGVlZFtpXSkpCisgICAgICAgICAgICAgICAgdGVy bV9zcGVlZFtpXSA9IHRvbG93ZXIodGVybV9zcGVlZFtpXSk7CisgICAgICAgIH0KKyAgICAgICAg ZGVidWcoRjExMCwicmxvZ19pbmkgdGVybV9zcGVlZCAxIix0ZXJtX3NwZWVkLDApOworCisjaWZk ZWYgQ09OR1NQRAorICAgICAgICAvKiBjb25zcGQoKSBpcyBub3QgeWV0IGRlZmluZWQgaW4gYWxs IGNrKnRpby5jIG1vZHVsZXMgKi8KKyAgICAgICAgY29uc3BkID0gY29uZ3NwZCgpOworICAgICAg ICBpZiAoY29uc3BkID4gMEwpIHsKKyAgICAgICAgICAgIGNrc3RybmNhdCgoY2hhciAqKXRlcm1f c3BlZWQsIi8iLHNpemVvZih0ZXJtX3NwZWVkKSk7CisgICAgICAgICAgICBja3N0cm5jYXQoKGNo YXIgKil0ZXJtX3NwZWVkLGNrbHRvYShjb25zcGQpLHNpemVvZih0ZXJtX3NwZWVkKSk7CisgICAg ICAgIH0gZWxzZQorI2VuZGlmIC8qIENPTkdTUEQgKi8KKyAgICAgICAgICBja3N0cm5jYXQoKGNo YXIgKil0ZXJtX3NwZWVkLCIvMTkyMDAiLHNpemVvZih0ZXJtX3NwZWVkKSk7CisgICAgICAgIGRl YnVnKEYxMTAsInJsb2dfaW5pIHRlcm1fc3BlZWQgMiIsdGVybV9zcGVlZCwwKTsKKyAgICB9IGVs c2UgeworICAgICAgICB0ZXJtX3NwZWVkWzBdID0gJ1wwJzsKKyAgICAgICAgZGVidWcoRjExMCwi cmxvZ19pbmkgdGVybV9zcGVlZCAzIix0ZXJtX3NwZWVkLDApOworICAgIH0KKworI2lmZGVmIENL X0tFUkJFUk9TCisgICAgaWYgKHR0bnByb3RvID09IE5QX0s0TE9HSU4gfHwgdHRucHJvdG8gPT0g TlBfRUs0TE9HSU4gfHwKKyAgICAgICAgdHRucHJvdG8gPT0gTlBfSzVMT0dJTiB8fCB0dG5wcm90 byA9PSBOUF9FSzVMT0dJTikgeworICAgICAgICBpbnQga3ZlciwgZW5jcnlwdCwgcmM7CisgICAg ICAgIHN3aXRjaCAodHRucHJvdG8pIHsKKyAgICAgICAgICBjYXNlIE5QX0s0TE9HSU46CisgICAg ICAgICAgICBrdmVyID0gNDsKKyAgICAgICAgICAgIGVuY3J5cHQgPSAwOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBOUF9FSzRMT0dJTjoKKyAgICAgICAgICAgIGt2ZXIgPSA0 OworICAgICAgICAgICAgZW5jcnlwdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICBjYXNlIE5QX0s1TE9HSU46CisgICAgICAgICAgICBrdmVyID0gNTsKKyAgICAgICAgICAgIGVu Y3J5cHQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBOUF9FSzVMT0dJ TjoKKyAgICAgICAgICAgIGt2ZXIgPSA1OworICAgICAgICAgICAgZW5jcnlwdCA9IDE7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGt2ZXIgPSAwOwor ICAgICAgICAgICAgZW5jcnlwdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmMgPSBja19rcmJf cmxvZ2luKGhvc3RuYW1lLCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWx1 c2VyLCByZW1vdGV1c2VyLCB0ZXJtX3NwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg bF9hZGRyLCByX2FkZHIsIGt2ZXIsIGVuY3J5cHQpOworICAgICAgICBpZiAoIXJjKSB7ICAgICAg ICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KKyAgICAgICAgICAgIFRFTE9QVF9NRShURUxP UFRfTkFXUykgPSAxOworICAgICAgICAgICAgcmMgPSBybG9nX25hd3MoKTsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4ocmMpOworICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICov CisgICAgaWYgKHR0bnByb3RvID09IE5QX1JMT0dJTikgeworI2lmZGVmIFJMT0dPVVRCVUYKKyAg ICAgICAgLyoKKyAgICAgICAgICogIFRoZSByY21kcyBzdGFydCB0aGUgY29ubmVjdGlvbiB3aXRo IGEgc2VyaWVzIG9mIGluaXQgZGF0YToKKyAgICAgICAgICoKKyAgICAgICAgICogICAgYSBwb3J0 IG51bWJlciB1cG9uIHdoaWNoIGNsaWVudCBpcyBsaXN0ZW5pbmcgZm9yIHN0ZGVyciBkYXRhCisg ICAgICAgICAqICAgIHRoZSB1c2VyJ3MgbmFtZSBvbiB0aGUgY2xpZW50IG1hY2hpbmUKKyAgICAg ICAgICogICAgdGhlIHVzZXIncyBuYW1lIG9uIHRoZSBzZXJ2ZXIgbWFjaGluZQorICAgICAgICAg KiAgICB0aGUgdGVybWluYWxfdHlwZS9zcGVlZCBvciBjb21tYW5kIHRvIGV4ZWN1dGUKKyAgICAg ICAgICovCisgICAgICAgIG91dGJ1ZltvdXRieXRlcysrXSA9IDA7CisgICAgICAgIHN0cmNweSgo Y2hhciAqKW91dGJ1ZitvdXRieXRlcywoY2hhciAqKWxvY2FsdXNlcik7CisgICAgICAgIG91dGJ5 dGVzICs9IHN0cmxlbigoY2hhciAqKWxvY2FsdXNlcikgKyAxOworICAgICAgICBzdHJjcHkoKGNo YXIgKilvdXRidWYrb3V0Ynl0ZXMsKGNoYXIgKilyZW1vdGV1c2VyKTsKKyAgICAgICAgb3V0Ynl0 ZXMgKz0gc3RybGVuKChjaGFyICopcmVtb3RldXNlcikgKyAxOworICAgICAgICBzdHJjcHkoKGNo YXIgKilvdXRidWYrb3V0Ynl0ZXMsKGNoYXIgKil0ZXJtX3NwZWVkKTsKKyAgICAgICAgb3V0Ynl0 ZXMgKz0gc3RybGVuKChjaGFyICopdGVybV9zcGVlZCkgKyAxOworICAgICAgICByYyA9IHR0b2wo KENIQVIgKilvdXRidWYsb3V0Ynl0ZXMpOworI2Vsc2UgLyogUkxPR09VVEJVRiAqLworICAgICAg ICB0dG9jKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgYW4gaW5pdGlhbCBOVUwg YXMgd2FrZS11cCAqLworICAgICAgICAvKiBTZW5kIGVhY2ggdmFyaWFibGUgd2l0aCB0aGUgdHJh aWxpbmcgTlVMICovCisgICAgICAgIHJjID0gdHRvbChsb2NhbHVzZXIsc3RybGVuKChjaGFyICop bG9jYWx1c2VyKSsxKTsKKyAgICAgICAgaWYgKHJjID4gMCkKKyAgICAgICAgICByYyA9IHR0b2wo cmVtb3RldXNlcixzdHJsZW4oKGNoYXIgKilyZW1vdGV1c2VyKSsxKTsKKyAgICAgICAgaWYgKHJj ID4gMCkKKyAgICAgICAgICByYyA9IHR0b2wodGVybV9zcGVlZCxzdHJsZW4oKGNoYXIgKil0ZXJt X3NwZWVkKSsxKTsKKyNlbmRpZiAvKiBSTE9HT1VUQlVGICovCisKKyAgICAgICAgLyogTm93IHdl IGFyZSBzdXBwb3NlZCB0byBnZXQgYmFjayBhIHNpbmdsZSBOVUwgYXMgY29uZmlybWF0aW9uICov CisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgcmMgPSB0dGluYyg2MCk7CisgICAgICAgIGRl YnVnKEYxMDEsInJsb2dpbiBmaXJzdCB0dGluYyIsIiIscmMpOworICAgICAgICBpZiAocmMgPiAw KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gdHRpbmMgMSIsIiIscmMpOworICAg ICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgIlJsb2dpbiBwcm90b2NvbCBlcnJvciAt IDB4JXggcmVjZWl2ZWQgaW5zdGVhZCBvZiAweDAwXG4iLCByYyk7CisgICAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICB9IGVsc2UgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgZGVidWco RjEwMSwicmxvZ2luIHR0aW5jIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAgICAvKiBwcmlu dGYoIk5ldHdvcmsgZXJyb3I6ICVkXG4iLCBlcnJubyk7ICovCisgICAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworLyogdHdvIGNvbnRy b2wgbWVzc2FnZXMgYXJlIGRlZmluZWQ6CisKKyAgIGEgZG91YmxlIGZsYWcgYnl0ZSBvZiAnbycg aW5kaWNhdGVzIGEgb25lLWJ5dGUgbWVzc2FnZSB3aGljaCBpcworICAgaWRlbnRpY2FsIHRvIHdo YXQgd2FzIG9uY2UgY2FycmllZCBvdXQgb2YgYmFuZC4KKworICAgYSBkb3VibGUgZmxhZyBieXRl IG9mICdxJyBpbmRpY2F0ZXMgYSB6ZXJvLWJ5dGUgbWVzc2FnZS4gIFRoaXMKKyAgIG1lc3NhZ2Ug aXMgaW50ZXJwcmV0ZWQgYXMgdHdvIFwzNzcgZGF0YSBieXRlcy4gIFRoaXMgaXMganVzdCBhCisg ICBxdW90ZSBydWxlIHNvIHRoYXQgYmluYXJ5IGRhdGEgZnJvbSB0aGUgc2VydmVyIGRvZXMgbm90 IGNvbmZ1c2UgdGhlCisgICBjbGllbnQuICAqLworCitpbnQgCitybG9nX2N0cmwoY3AsIG4pCisg ICAgIHVuc2lnbmVkIGNoYXIgKmNwOworICAgICBpbnQgbjsKK3sKKyAgICBpZiAoKG4gPj0gNSkg JiYgKGNwWzJdID09ICdvJykgJiYgKGNwWzNdID09ICdvJykpIHsKKyAgICAgICAgaWYgKHJsb2df b29iKCZjcFs0XSwxKSkKKyAgICAgICAgICAgIHJldHVybigtNSk7CisgICAgICAgIHJldHVybig1 KTsKKyAgICB9IGVsc2UgaWYgKChuID49IDQpICYmIChjcFsyXSA9PSAncScpICYmIChjcFszXSA9 PSAncScpKSB7CisgICAgICAgIC8qIHRoaXMgaXMgc29tZXdoYXQgb2YgYSBoYWNrICovCisgICAg ICAgIGNwWzJdID0gJ1wzNzcnOworICAgICAgICBjcFszXSA9ICdcMzc3JzsKKyAgICAgICAgcmV0 dXJuKDIpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbnQKK3Jsb2dfb29i KG9vYmRhdGEsIGNvdW50KSBDSEFSICogb29iZGF0YTsgaW50IGNvdW50OyB7CisgICAgaW50IGk7 CisgICAgaW50IGZsdXNoID0gMDsKKworICAgIGRlYnVnKEYxMTEsInJsb2dpbiBvdXRfb2ZfYmFu ZCIsImNvdW50Iixjb3VudCk7CisKKyAgICBmb3IgKGkgPSAwOyBpPGNvdW50OyBpKyspICAgewor ICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gb3V0X29mX2JhbmQiLCIiLG9vYmRhdGFbaV0pOwor ICAgICAgICAgICAgICAgIGlmIChvb2JkYXRhW2ldICYgMHgwMSkKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChvb2JkYXRhW2ldICYgMHgwMikgeyAvKiBG bHVzaCBCdWZmZXJlZCBEYXRhIG5vdCB5ZXQgZGlzcGxheWVkICovCisgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJybG9naW4gRmx1c2ggQnVmZmVyZWQgRGF0YSBjb21tYW5kIiwiIixvb2JkYXRhW2ld KTsKKworICAgICAgICAgICAgLyogT25seSBmbHVzaCB0aGUgZGF0YSBpZiBpbiBmYWN0IHdlIGFy ZSBpbiBhIG1vZGUgdGhhdCB3b24ndCAqLworICAgICAgICAgICAgLyogZ2V0IG91dCBvZiBzeW5j LiAgSWUsIG5vdCB3aGVuIHdlIGFyZSBpbiBwcm90b2NvbCBtb2RlLiAgICAqLworICAgICAgICAg ICAgc3dpdGNoICggd2hhdCApIHsKKyAgICAgICAgICAgIGNhc2UgV19OT1RISU5HOgorICAgICAg ICAgICAgY2FzZSBXX0NPTk5FQ1Q6CisgICAgICAgICAgICBjYXNlIFdfQ09NTUFORDoKKyAgICAg ICAgICAgICAgICBpZiAoIHJsb2dfaW5iYW5kICkKKyAgICAgICAgICAgICAgICAgICAgZmx1c2gg PSAxOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdHRmbHVpKCk7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgaWYgKG9vYmRhdGFbaV0gJiAweDEwKSB7ICAgICAgICAvKiBTd2l0Y2ggdG8gUkFXIG1vZGUg Ki8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBSYXcgTW9kZSBjb21tYW5kIiwiIixv b2JkYXRhW2ldKTsKKyAgICAgICAgICAgIHJsb2dfbW9kZSA9IFJMX1JBVzsKKyAgICAgICAgfQor CisgICAgICAgIGlmIChvb2JkYXRhW2ldICYgMHgyMCkgeyAgICAgICAgLyogU3dpdGNoIHRvIENP T0tFRCBtb2RlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gQ29va2VkIE1vZGUg Y29tbWFuZCIsIiIsb29iZGF0YVtpXSk7CisgICAgICAgICAgICBybG9nX21vZGUgPSBSTF9DT09L RUQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9vYmRhdGFbaV0gJiAweDgwKQorICAgICAgICB7 ICAgICAgICAvKiBTZW5kIFdpbmRvdyBTaXplIEluZm8gKi8KKyAgICAgICAgICAgIGRlYnVnKEYx MDEsInJsb2dpbiBXaW5kb3cgU2l6ZSBjb21tYW5kIiwiIixvb2JkYXRhW2ldKTsKKyAgICAgICAg ICAgIC8qIFJlbWVtYmVyIHRvIHNlbmQgV1MgSW5mbyB3aGVuIFdpbmRvdyBTaXplIGNoYW5nZXMg Ki8KKyAgICAgICAgICAgIGlmICggIVRFTE9QVF9NRShURUxPUFRfTkFXUykgKSB7CisgICAgICAg ICAgICAgICAgVEVMT1BUX01FKFRFTE9QVF9OQVdTKSA9IDE7CisgICAgICAgICAgICAgICAgcmxv Z19uYXdzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKGZs dXNoKTsKK30KKyNpZm5kZWYgVENQSVBMSUIKK3N0YXRpYyBTSUdUWVAKK3Jsb2dvb2JoKHNpZykg aW50IHNpZzsgeworI2lmZGVmIFNPTEFSSVMKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBPciBzaG91bGQgaXQgYmUgY2hhciBmb3IgYWxsPyAqLworI2Vsc2UKKyAg ICBDSEFSCisjZW5kaWYgLyogU09MQVJJUyAqLworICAgICAgb29iZGF0YTsKKworICAgIC8qIGlu dCAgY291bnQgPSAwOyAqLyAvKiAobm90IHVzZWQpICovCisKKyAgICB3aGlsZSAocmVjdih0dHlm ZCwgJm9vYmRhdGEsIDEsIE1TR19PT0IpIDwgMCkgeworICAgICAgLyoKKyAgICAgICAqIFdlIG5l ZWQgdG8gZG8gc29tZSBzcGVjaWFsIHByb2Nlc3NpbmcgaGVyZS4KKyAgICAgICAqIEp1c3QgaW4g Y2FzZSB0aGUgc29ja2V0IGlzIGJsb2NrZWQgZm9yIGlucHV0CisgICAgICAgKgorICAgICAgICov CisgICAgICAgIHN3aXRjaCAoZXJybm8pIHsKKyAgICAgICAgICBjYXNlIEVXT1VMREJMT0NLOgor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJybG9naW4gb3V0X29mX2JhbmQi LCIiLG9vYmRhdGEpOworICAgIGlmIChvb2JkYXRhID09IDB4MDIpIHsgICAgICAvKiBGbHVzaCBC dWZmZXJlZCBEYXRhIG5vdCB5ZXQgZGlzcGxheWVkICovCisgICAgICAgIGRlYnVnKEYxMDEsInJs b2dpbiBGbHVzaCBCdWZmZXJlZCBEYXRhIGNvbW1hbmQiLCIiLG9vYmRhdGEpOworICAgICAgICBu ZXRmbHVpKCk7CisgICAgfQorICAgIGlmIChvb2JkYXRhICYgMHgxMCkgeyAgICAgICAgICAgICAg IC8qIFN3aXRjaCB0byByYXcgbW9kZSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gUmF3 IE1vZGUgY29tbWFuZCIsIiIsb29iZGF0YSk7CisgICAgICAgIHJsb2dfbW9kZSA9IFJMX1JBVzsK KyAgICB9CisgICAgaWYgKG9vYmRhdGEgJiAweDIwKSB7ICAgICAgICAgICAgICAgLyogU3dpdGNo IHRvIGNvb2tlZCBtb2RlICovCisgICAgICAgIGRlYnVnKEYxMDEsInJsb2dpbiBDb29rZWQgTW9k ZSBjb21tYW5kIiwiIixvb2JkYXRhKTsKKyAgICAgICAgcmxvZ19tb2RlID0gUkxfQ09PS0VEOwor ICAgIH0KKyAgICBpZiAob29iZGF0YSAmIDB4ODApIHsgICAgICAgICAgICAgICAgIC8qIFNlbmQg V2luZG93IFNpemUgSW5mbyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJybG9naW4gV2luZG93IFNp emUgY29tbWFuZCIsIiIsb29iZGF0YSk7CisgICAgICAgIC8qIFJlbWVtYmVyIHRvIHNlbmQgV1Mg SW5mbyB3aGVuIFdpbmRvdyBTaXplIGNoYW5nZXMgKi8KKyAgICAgICAgaWYgKCAhVEVMT1BUX01F KFRFTE9QVF9OQVdTKSApIHsKKyAgICAgICAgICAgIFRFTE9QVF9NRShURUxPUFRfTkFXUykgPSAx OworICAgICAgICAgICAgcmxvZ19uYXdzKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYg LyogVENQSVBMSUIgKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworCisvKiBTZW5kIG5ldHdvcmsg QlJFQUsgKi8KKy8qCisgIFJldHVybnMgLTEgb24gZXJyb3IsIDAgaWYgbm90aGluZyBoYXBwZW5z LCAxIGlmIEJSRUFLIHNlbnQgc3VjY2Vzc2Z1bGx5LgorKi8KK2ludAorbmV0YnJlYWsoKSB7Cisg ICAgQ0hBUiBidWZbM107CisgICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7CisgICAgICAgIGlm ICh0dG5wcm90byA9PSBOUF9URUxORVQpIHsKKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAgIGJ1 ZlswXSA9IChDSEFSKSBJQUM7IGJ1ZlsxXSA9IChDSEFSKSBCUkVBSzsgYnVmWzJdID0gKENIQVIp IDA7CisgICAgICAgICAgICBpZiAoCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgbmV0dG9s KChjaGFyICopIGJ1ZiwgMikKKyNlbHNlCisgICAgICAgICAgICAgICAgdHRvbChidWYsIDIpCisj ZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgPCAyKQorICAgICAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSB7Cisg ICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgdG5fbXNnW107CisgICAgICAgICAgICAgICAgY2tt YWttc2codG5fbXNnLFROX01TR19MRU4sIlRFTE5FVCBTRU5UICIsVEVMQ01EKEJSRUFLKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLHRuX21zZywiIixCUkVBSyk7CisgICAgICAgICAgICAgICAgaWYgKGRlYnNlcyB8fCB0 bl9kZWIpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1 cm4oMSk7CisjZWxzZQorICAgICAgICAgICAgZGVidWcoRjEwMCwibmV0YnJlYWsgbm8gVE5DT0RF IiwiIiwwKTsKKyAgICAgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAg ICAgICAgfQorICAgICAgICAvKiBJbnNlcnQgb3RoZXIgVENQL0lQIHByb3RvY29scyBoZXJlICov CisgICAgfQorICAgIC8qIEluc2VydCBvdGhlciBuZXR3b3JrcyBoZXJlICovCisgICAgcmV0dXJu KDApOworfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworCisjaWZkZWYgTkVUQ09OTgorI2lmZGVm IFNVTlgyNQorLyoKKyAgU3VuTGluayBYLjI1IHN1cHBvcnQgYnkgTWFyY2VsbG8gRnJ1dGlnLCBD YXRob2xpYyBVbml2ZXJzaXR5LAorICBSaW8gZGUgSmFuZWlybywgQnJhemlsLCAxOTkwLgorKi8K KworLyogUEFEIFguMywgWC4yOCBhbmQgWC4yOSBzdXBwb3J0ICovCisKK3N0YXRpYyBDSEFSIHgy OWVycltNQVhQQURQQVJNUyszXSA9IHsgWDI5X0VSUk9SLCBJTlZBTElEX1BBRF9QQVJNLCAnXDAn IH07CisKKy8qIEluaXRpYWxpemUgUEFEICovCisKK2V4dGVybiBDSEFSIHBhZHBhcm1zW107CisK K1ZPSUQKK2luaXRwYWQoKSB7CisgIHBhZHBhcm1zW1BBRF9CUkVBS19DSEFSQUNURVJdICAgICAg ICA9IDA7ICAvKiBCcmVhayBjaGFyYWN0ZXIgKi8KKyAgcGFkcGFybXNbUEFEX0VTQ0FQRV0gICAg ICAgICAgICAgICAgID0gMTsgIC8qIEVzY2FwZSBwZXJtaXR0ZWQgKi8KKyAgcGFkcGFybXNbUEFE X0VDSE9dICAgICAgICAgICAgICAgICAgID0gMTsgIC8qIEtlcm1pdCBQQUQgZG9lcyBlY2hvICov CisgIHBhZHBhcm1zW1BBRF9EQVRBX0ZPUldBUkRfQ0hBUl0gICAgICA9IDI7ICAvKiBmb3J3YXJk IGNoYXJhY3RlciBDUiAqLworICBwYWRwYXJtc1tQQURfREFUQV9GT1JXQVJEX1RJTUVPVVRdICAg PSAwOyAgLyogbm8gdGltZW91dCBmb3J3YXJkIGNvbmRpdGlvbiAqLworICBwYWRwYXJtc1tQQURf RkxPV19DT05UUk9MX0JZX1BBRF0gICAgPSAwOyAgLyogbm90IHVzZWQgKi8KKyAgcGFkcGFybXNb UEFEX1NVUFBSRVNTSU9OX09GX1NJR05BTFNdID0gMTsgIC8qIGFsbG93IFBBRCBzZXJ2aWNlIHNp Z25hbHMgKi8KKyAgcGFkcGFybXNbUEFEX0JSRUFLX0FDVElPTl0gICAgICAgICAgID0gMjE7IC8q IGJyayBhY3Rpb246IElOVCBwayArIGJyayBpbmQqLworICBwYWRwYXJtc1tQQURfU1VQUFJFU1NJ T05fT0ZfREFUQV0gICAgPSAwOyAgLyogbm8gc3VwcmVzc2lvbiBvZiB1c2VyIGRhdGEgKi8KKyAg cGFkcGFybXNbUEFEX1BBRERJTkdfQUZURVJfQ1JdICAgICAgID0gMDsgIC8qIG5vIHBhZGRpbmcg YWZ0ZXIgQ1IgKi8KKyAgcGFkcGFybXNbUEFEX0xJTkVfRk9MRElOR10gICAgICAgICAgID0gMDsg IC8qIG5vIGxpbmUgZm9sZCAqLworICBwYWRwYXJtc1tQQURfTElORV9TUEVFRF0gICAgICAgICAg ICAgPSAwOyAgLyogbGluZSBzcGVlZCAtIGRvbid0IGNhcmUgKi8KKyAgcGFkcGFybXNbUEFEX0ZM T1dfQ09OVFJPTF9CWV9VU0VSXSAgID0gMDsgIC8qIGZsb3cgY29udCBvZiBQQUQgLSBub3QgdXNl ZCAqLworICBwYWRwYXJtc1tQQURfTEZfQUZURVJfQ1JdICAgICAgICAgICAgPSAwOyAgLyogbm8g TEYgaW5zZXJ0aW9uIGFmdGVyIENSICovCisgIHBhZHBhcm1zW1BBRF9QQURESU5HX0FGVEVSX0xG XSAgICAgICA9IDA7ICAvKiBubyBwYWRkaW5nIGFmdGVyIExGICovCisgIHBhZHBhcm1zW1BBRF9F RElUSU5HXSAgICAgICAgICAgICAgICA9IDE7ICAvKiBjYW4gZWRpdCAqLworICBwYWRwYXJtc1tQ QURfQ0hBUl9ERUxFVEVfQ0hBUl0gICAgICAgPSA4OyAgLyogY2hhcmFjdGVyIGRlbGV0ZSBjaGFy YWN0ZXIgKi8KKyAgcGFkcGFybXNbUEFEX0JVRkZFUl9ERUxFVEVfQ0hBUl0gICAgID0gMjE7IC8q IGJ1ZmZlciBkZWxldGUgY2hhcmFjdGVyICovCisgIHBhZHBhcm1zW1BBRF9CVUZGRVJfRElTUExB WV9DSEFSXSAgICA9IDE4OyAvKiBidWZmZXIgZGlzcGxheSBjaGFyYWN0ZXIgKi8KK30KKworLyog U2V0IFBBRCBwYXJhbWV0ZXJzICovCisKK1ZPSUQKK3NldHBhZChzLG4pIENIQVIgKnM7IGludCBu OyB7CisgICAgaW50IGk7CisgICAgQ0hBUiAqcHMgPSBzOworCisgICAgaWYgKG4gPCAxKSB7Cisg ICAgICAgIGluaXRwYWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoKnBzID4gTUFYUEFEUEFSTVMpCisgICAgICAgICAg ICAgIHgyOWVycltpKzJdID0gKnBzOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBw YWRwYXJtc1sqcHNdID0gKihwcysxKTsKKyAgICAgICAgICAgIHBzICs9IDI7CisgICAgICAgIH0K KyAgICB9Cit9CisKKy8qIFJlYWQgUEFEIHBhcmFtZXRlcnMgKi8KKworVk9JRAorcmVhZHBhZChz LG4scikgQ0hBUiAqczsgaW50IG47IENIQVIgKnI7IHsKKyAgICBpbnQgaTsKKyAgICBDSEFSICpw cyA9IHM7CisgICAgQ0hBUiAqcHIgPSByOworCisgICAgKnByKysgPSBYMjlfUEFSQU1FVEVSX0lO RElDQVRJT047CisgICAgaWYgKG4gPiAwKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBp KyssIHBzKyspIHsKKyAgICAgICAgICAgIGlmICgqcHMgPiBNQVhQQURQQVJNUykgeworICAgICAg ICAgICAgICAgIHgyOWVycltpKzJdID0gKnBzKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICpwcisrID0gKnBzOworICAgICAgICAgICAgICAgICpwcisrID0gcGFkcGFy bXNbKnBzKytdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg ICAgZm9yIChpID0gMTsgaSA8IE1BWFBBRFBBUk1TOyBpKyspIHsKKyAgICAgICAgICAgICpwcisr ID0gaTsKKyAgICAgICAgICAgICpwcisrID0gcGFkcGFybXNbaV07CisgICAgICAgIH0KKyAgICB9 Cit9CisKK2ludAorcWJpdHBrdChzLG4pIENIQVIgKnM7IGludCBuOyB7CisgICAgQ0hBUiAqcHMg PSBzOworICAgIGludCB4MjljbWQgPSAqcHM7CisgICAgQ0hBUiAqcHNhID0gcysxOworICAgIENI QVIgeDI5cmVzcFsoTUFYUEFEUEFSTVMqMikrMV07CisKKyAgICBzd2l0Y2ggKHgyOWNtZCkgewor CisgICAgICAgIGNhc2UgWDI5X1NFVF9QQVJNUzoKKyAgICAgICAgICAgIHNldHBhZCAocHMrMSxu LzIpOworICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKChjaGFyICopeDI5ZXJyKSA+IDIpIHsK KyAgICAgICAgICAgICAgICB0dG9sKHgyOWVyciwoaW50KXN0cmxlbigoY2hhciAqKXgyOWVycikp OworICAgICAgICAgICAgICAgIHgyOWVyclsyXSA9ICdcMCc7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICByZXR1cm4gKC0yKTsKKyAgICAgICAgY2FzZSBYMjlfUkVBRF9QQVJNUzoKKyAgICAg ICAgICAgIHJlYWRwYWQgKHBzKzEsbi8yLHgyOXJlc3ApOworICAgICAgICAgICAgc2V0cWJpdCAo KTsKKyAgICAgICAgICAgIHR0b2woeDI5cmVzcCwobj4xKT8obisxKTooMipNQVhQQURQQVJNUysx KSk7CisgICAgICAgICAgICBpZiAoKGludClzdHJsZW4oKGNoYXIgKil4MjllcnIpID4gMikgewor ICAgICAgICAgICAgICAgIHR0b2woeDI5ZXJyLChpbnQpc3RybGVuKChjaGFyICopeDI5ZXJyKSk7 CisgICAgICAgICAgICAgICAgeDI5ZXJyWzJdID0gJ1wwJzsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHJlc2V0cWJpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWDI5 X1NFVF9BTkRfUkVBRF9QQVJNUzoKKyAgICAgICAgICAgIHNldHBhZCAocHMrMSxuLzIpOworICAg ICAgICAgICAgcmVhZHBhZCAocHMrMSxuLzIseDI5cmVzcCk7CisgICAgICAgICAgICBzZXRxYml0 KCk7CisgICAgICAgICAgICB0dG9sKHgyOXJlc3AsKG4+MSk/KG4rMSk6KDIqTUFYUEFEUEFSTVMr MSkpOworICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKChjaGFyICopeDI5ZXJyKSA+IDIpIHsK KyAgICAgICAgICAgICAgICB0dG9sICh4MjllcnIsKGludClzdHJsZW4oKGNoYXIgKil4MjllcnIp KTsKKyAgICAgICAgICAgICAgICB4MjllcnIgWzJdID0gJ1wwJzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHJlc2V0cWJpdCgpOworICAgICAgICAgICAgcmV0dXJuICgtMik7CisgICAgICAg IGNhc2UgWDI5X0lOVklUQVRJT05fVE9fQ0xFQVI6CisgICAgICAgICAgICAoVk9JRCkgeDI1Y2xl YXIoKTsKKyAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICBjYXNlIFgyOV9JTkRJQ0FU SU9OX09GX0JSRUFLOgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAoMCk7 Cit9CisKKy8qIFBBRCBicmVhayBhY3Rpb24gcHJvY2Vzc29yICovCisKK1ZPSUQKK2JyZWFrYWN0 KCkgeworICAgIGV4dGVybiBjaGFyIHgyNW9idWZbTUFYT1gyNV07CisgICAgZXh0ZXJuIGludCBv YnVmbDsKKyAgICBleHRlcm4gaW50IGFjdGl2ZTsKKyAgICBleHRlcm4gdW5zaWduZWQgY2hhciB0 b3NlbmQ7CisgICAgc3RhdGljIENIQVIgaW5kYnJrWzNdID0geworICAgICAgICBYMjlfSU5ESUNB VElPTl9PRl9CUkVBSywKKyAgICAgICAgUEFEX1NVUFBSRVNTSU9OX09GX0RBVEEsCisgICAgICAg IDEKKyAgICB9OworICAgIENIQVIgaW50dWRhdCwgY2F1c2UsIGRpYWc7CisKKyAgICBpZiAoeDI1 c3RhdCgpIDwgMCkgcmV0dXJuOyAgLyogSWdub3JlIGlmIG5vIHZpcnR1YWwgY2FsbCBlc3RhYmxp c2hlZCAqLworCisgICAgaWYgKHBhZHBhcm1zW1BBRF9CUkVBS19BQ1RJT05dICE9IDApIC8qIEZv cndhcmQgY29uZGl0aW9uICovCisgICAgICAgIGlmICh0dG9sKChDSEFSICopeDI1b2J1ZixvYnVm bCkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IgKCJcclxuQ2FuJ3Qgc2VuZCBjaGFyYWN0ZXJz Iik7CisgICAgICAgICAgICBhY3RpdmUgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgYnplcm8gKHgyNW9idWYsc2l6ZW9mKHgyNW9idWYpKTsKKyAgICAgICAgICAgIG9idWZsID0g MDsKKyAgICAgICAgICAgIHRvc2VuZCA9IDA7CisgICAgICAgIH07CisKKyAgICBzd2l0Y2ggKHBh ZHBhcm1zW1BBRF9CUkVBS19BQ1RJT05dKSB7CisKKyAgICAgICBjYXNlIDAgOiBicmVhazsgICAg ICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovCisgICAgICAgY2FzZSAxIDogLyogc2VuZCBp bnRlcnJ1cHQgcGFja2V0IHdpdGggaW50ZXJydXB0IHVzZXIgZGF0YSBmaWVsZCA9IDEgKi8KKyAg ICAgICAgICAgICAgICBpbnR1ZGF0ID0gMTsKKyAgICAgICAgICAgICAgICB4MjVpbnRyIChpbnR1 ZGF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICBjYXNlIDIgOiAvKiBzZW5kIHJl c2V0IHBhY2tldCB3aXRoIGNhdXNlIGFuZCBkaWFnID0gMCAqLworICAgICAgICAgICAgICAgIGNh dXNlID0gZGlhZyA9IDA7CisgICAgICAgICAgICAgICAgeDI1cmVzZXQgKGNhdXNlLGRpYWcpOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgNSA6IC8qIHNlbmQgaW50ZXJydXB0 IHBhY2tldCB3aXRoIGludGVycnVwdCB1c2VyIGRhdGEgZmllbGQgPSAwICovCisgICAgICAgICAg ICAgICAgaW50dWRhdCA9IDA7CisgICAgICAgICAgICAgICAgeDI1aW50ciAoaW50dWRhdCk7Cisg ICAgICAgICAgICAgICAgc2V0cWJpdCAoKTsKKyAgICAgICAgICAgICAgICAvKiBzZW5kIGluZGlj YXRpb24gb2YgYnJlYWsgd2l0aG91dCBhIHBhcmFtZXRlciBmaWVsZCAqLworICAgICAgICAgICAg ICAgIHR0b2MoWDI5X0lORElDQVRJT05fT0ZfQlJFQUspOworICAgICAgICAgICAgICAgIHJlc2V0 cWJpdCAoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICBjYXNlIDggOiBhY3RpdmUg PSAwOyAgICAgICAgICAgICAvKiBsZWF2ZSBkYXRhIHRyYW5zZmVyICovCisgICAgICAgICAgICAg ICAgY29ub2wgKCJcclxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAy MTogLyogc2VuZCBpbnRlcnJ1cHQgcGFja2V0IHdpdGggaW50ZXJydXB0IHVzZXIgZGF0YSBmaWVs ZCA9IDAgKi8KKyAgICAgICAgICAgICAgICBpbnR1ZGF0ID0gMDsKKyAgICAgICAgICAgICAgICB4 MjVpbnRyIChpbnR1ZGF0KTsKKyAgICAgICAgICAgICAgICBzZXRwYWQgKGluZGJyaysxLDIpOyAg ICAvKiBzZXQgcGFkIHRvIGRpc2NhcmQgaW5wdXQgKi8KKyAgICAgICAgICAgICAgICBzZXRxYml0 ICgpOworICAgICAgICAgICAgICAgIC8qIHNlbmQgaW5kaWNhdGlvbiBvZiBicmVhayB3aXRoIHBh cmFtZXRlciBmaWVsZCAqLworICAgICAgICAgICAgICAgIHR0b2wgKGluZGJyayxzaXplb2YoaW5k YnJrKSk7CisgICAgICAgICAgICAgICAgcmVzZXRxYml0ICgpOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICB9Cit9CisKKy8qIFguMjUgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKworWDI1X0NB VVNFX0RJQUcgZGlhZzsKKworLyoKKyAgQ29udmVydCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcg cmVwcmVzZW50aW5nIGFuIFguMTIxIGFkZHJlc3MKKyAgdG8gYSBwYWNrZWQgQkNEIGZvcm0uCisq LworaW50Citwa3gxMjEoc3RyLGJjZCkgY2hhciAqc3RyOyBDSEFSICpiY2Q7IHsKKyAgICBpbnQg aSwgajsKKyAgICB1X2NoYXIgYzsKKworICAgIGkgPSBqID0gMDsKKyAgICB3aGlsZSAoc3RyW2ld KSB7CisgICAgICAgIGlmIChpID49IDE1IHx8IHN0ciBbaV0gPCAnMCcgfHwgc3RyIFtpXSA+ICc5 JykKKyAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgYyA9IHN0ciBbaV0gLSAnMCc7Cisg ICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICBiY2QgW2orK10gfD0gYzsKKyAgICAgICAgZWxz ZQorICAgICAgICAgIGJjZCBbal0gPSBjIDw8IDQ7CisgICAgICAgIGkrKzsKKyAgICB9CisgICAg cmV0dXJuIChpKTsKK30KKworLyogUmVhZHMgYW5kIHByaW50cyBYLjI1IGRpYWdub3N0aWMgKi8K KworaW50Cit4MjVkaWFnICgpIHsKKyAgICBpbnQgaTsKKworICAgIGJ6ZXJvICgoY2hhciAqKSZk aWFnLHNpemVvZihkaWFnKSk7CisgICAgaWYgKGlvY3RsKHR0eWZkLFgyNV9SRF9DQVVTRV9ESUFH LCZkaWFnKSkgeworICAgICAgICBwZXJyb3IgKCJSZWFkaW5nIFguMjUgZGlhZ25vc3RpYyIpOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAoZGlhZy5kYXRhbGVuID4gMCkgewor ICAgICAgICBwcmludGYgKCJYLjI1IERpYWdub3N0aWMgOiIpOworICAgICAgICBmb3IgKGkgPSAw OyBpIDwgKGludClkaWFnLmRhdGFsZW47IGkrKykKKyAgICAgICAgICBwcmludGYoIiAlMDJoIixk aWFnLmRhdGFbaV0pKworICAgICAgICBwcmludGYgKCJcclxuIik7CisgICAgfQorICAgIHJldHVy bigwKTsKK30KKworLyogWC4yNSBPdXQtb2YtQmFuZCBTaWduYWwgSGFuZGxlciAqLworCitTSUdU WVAKK3gyNW9vYmgoZm9vKSBpbnQgZm9vOyB7CisgICAgaW50IG9vYnR5cGU7CisgICAgdV9jaGFy IG9vYmRhdGE7CisgICAgaW50IHQ7CisKKyAgICAoVk9JRCkgc2lnbmFsKFNJR1VSRyx4MjVvb2Jo KTsKKyAgICBkbyB7CisgICAgICAgIGlmIChpb2N0bCh0dHlmZCxYMjVfT09CX1RZUEUsJm9vYnR5 cGUpKSB7CisgICAgICAgICAgICBwZXJyb3IgKCJHZXR0aW5nIHNpZ25hbCB0eXBlIik7CisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChvb2J0eXBlKSB7Cisg ICAgICAgICAgY2FzZSBJTlRfREFUQToKKyAgICAgICAgICAgIGlmIChyZWN2KHR0eWZkLChjaGFy ICopJm9vYmRhdGEsMSxNU0dfT09CKSA8IDApIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IgKCJS ZWNlaXZpbmcgWC4yNSBpbnRlcnJ1cHQgZGF0YSIpOworICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHQgPSBvb2JkYXRhOworICAgICAgICAgICAgcHJp bnRmICgiXHJcbkludGVycnVwdCByZWNlaXZlZCwgZGF0YSA9ICVkXHJcbiIsIHQpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBWQ19SRVNFVDoKKyAgICAgICAgICAgIHByaW50 ZiAoIlxyXG5WaXJ0dWFsIGNpcmN1aXQgcmVzZXRcclxuIik7CisgICAgICAgICAgICB4MjVkaWFn ICgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBOX1JFU0VUUzoKKyAgICAg ICAgICAgIHByaW50ZiAoIlxyXG5SZXNldCB0aW1lb3V0XHJcbiIpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBOX0NMRUFSUzoKKyAgICAgICAgICAgIHByaW50ZiAoIlxyXG5D bGVhciB0aW1lb3V0XHJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBN U0dfVE9PX0xPTkc6CisgICAgICAgICAgICBwcmludGYgKCJcclxuTWVzc2FnZSBkaXNjYXJkZWQs IHRvbyBsb25nXHJcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgIGlmIChvb2J0eXBlKSBwcmludGYoIlxyXG5Vbmtub3duIG9vYiB0eXBlICVk XHJcbiIsb29idHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hp bGUgKG9vYnR5cGUpOworfQorCisvKiBTZW5kIGEgWC4yNSBpbnRlcnJ1cHQgcGFja2V0ICovCisK K2ludAorI2lmZGVmIENLX0FOU0lDCit4MjVpbnRyKGNoYXIgaW50cikKKyNlbHNlCit4MjVpbnRy KGludHIpIGNoYXIgaW50cjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogeDI1aW50ciAqLyB7 CisgICAgaWYgKHNlbmQodHR5ZmQsJmludHIsMSxNU0dfT09CKSA8IDApIHJldHVybigtMSk7Cisg ICAgZGVidWcoRjEwMCwiWC4yNSBpbnRyIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8q IFJlc2V0IFguMjUgdmlydHVhbCBjaXJjdWl0ICovCitpbnQKKyNpZmRlZiBDS19BTlNJQworeDI1 cmVzZXQoY2hhciBjYXVzZSwgY2hhciBkaWFnbikKKyNlbHNlCit4MjVyZXNldChjYXVzZSwgZGlh Z24pIGNoYXIgY2F1c2U7IGNoYXIgZGlhZ247CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHgy NXJlc2V0ICovIHsKKyAgICBiemVybyAoKGNoYXIgKikmZGlhZyxzaXplb2YoZGlhZykpOworICAg IGRpYWcuZmxhZ3MgICA9IDA7CisgICAgZGlhZy5kYXRhbGVuID0gMjsKKyAgICBkaWFnLmRhdGFb MF0gPSBjYXVzZTsKKyAgICBkaWFnLmRhdGFbMV0gPSBkaWFnbjsKKyAgICBpZiAoaW9jdGwodHR5 ZmQsWDI1X1dSX0NBVVNFX0RJQUcsJmRpYWcpIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisgICAg ZGVidWcoRjEwMCwiWC4yNSByZXNldCIsIiIsMCk7CisgICAgcmV0dXJuKDApOworfQorCisvKiBD bGVhciBYLjI1IHZpcnR1YWwgY2lyY3VpdCAqLworaW50Cit4MjVjbGVhcigpIHsKKyAgICBpbnQg aTsKKyAgICBkZWJ1ZyhGMTAwLCJYLjI1IGNsZWFyIiwiIiwwKTsKKyAgICBiemVybyAoKGNoYXIg KikmZGlhZyxzaXplb2YoZGlhZykpOworICAgIGRpYWcuZmxhZ3MgPSAoMSA8PCBESUFHX1RZUEUp OworICAgIGRpYWcuZGF0YWxlbiA9IDI7CisgICAgZGlhZy5kYXRhWzBdID0gMDsKKyAgICBkaWFn LmRhdGFbMV0gPSAwOworICAgIGlvY3RsICh0dHlmZCxYMjVfV1JfQ0FVU0VfRElBRywmZGlhZyk7 IC8qIFNlbmQgQ2xlYXIgUmVxdWVzdCAqLworICAgIHJldHVybih0dGNsb3MoMCkpOyAgICAgICAg ICAgICAgICAgIC8qIENsb3NlIHNvY2tldCAqLworfQorCisvKiBYLjI1IHN0YXR1cyAqLworaW50 Cit4MjVzdGF0KCkgeworICAgIGlmICh0dHlmZCA9PSAtMSkgcmV0dXJuICgtMSk7CisgICAgcmV0 dXJuKDApOworfQorCisvKiBTZXQgUV9CSVQgb24gKi8KK1ZPSUQKK3NldHFiaXQoKSB7CisgICAg c3RhdGljIGludCBxYml0b24gPSAxIDw8IFFfQklUOworICAgIGlvY3RsICh0dHlmZCxYMjVfU0VO RF9UWVBFLCZxYml0b24pOworfQorCisvKiBTZXQgUV9CSVQgb2ZmICovCitWT0lECityZXNldHFi aXQoKSB7CisgICAgc3RhdGljIGludCBxYml0b2ZmID0gMDsKKyAgICBpb2N0bCAodHR5ZmQsWDI1 X1NFTkRfVFlQRSwmcWJpdG9mZik7Cit9CisKKy8qIFJlYWQgbiBjaGFyYWN0ZXJzIGZyb20gWC4y NSBjaXJjdWl0IGludG8gYnVmICovCisKK2ludAoreDI1eGluKG4sYnVmKSBpbnQgbjsgQ0hBUiAq YnVmOyB7CisgICAgcmVnaXN0ZXIgaW50IHgsIGM7CisgICAgaW50IHFwa3Q7CisKKyAgICBkbyB7 CisgICAgICAgIHggPSByZWFkKHR0eWZkLGJ1ZixuKTsKKyAgICAgICAgaWYgKGJ1ZlswXSAmICgx IDw8IFFfQklUKSkgeyAvKiBJZiBRX0JJVCBwYWNrZXQsIHByb2Nlc3MgaXQgKi8KKyAgICAgICAg ICAgIC8qIElmIHJldHVybiAtMSA6IGludml0YXRpb24gdG8gY2xlYXI7IC0yIDogUEFEIGNoYW5n ZXMgKi8KKyAgICAgICAgICAgIGlmICgoYz1xYml0cGt0KGJ1ZisxLHgtMikpIDwgMCkgcmV0dXJu KGMpOworICAgICAgICAgICAgcXBrdCA9IDE7CisgICAgICAgIH0gZWxzZSBxcGt0ID0gMDsKKyAg ICB9IHdoaWxlIChxcGt0KTsKKworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAvKiBE aXNhYmxlZCBieSBTdGVwaGVuIFJpZWhtIDE5LjEyLjk3ICovCisgICAgLyogQlVHIQorICAgICAq IGlmIGJ1ZltdIGlzIGZ1bGwsIHRoZW4gdGhpcyBudWxsIGxhbmRzIGluIG5pcnZhbmEhCisgICAg ICogSSB3YXMgdW5hYmxlIHRvIGZpbmQgYW55IGNvZGUgd2hpY2ggbmVlZHMgYSB0cmFpbGluZyBu dWxsIGluIGJ1ZltdCisgICAgICovCisgICAgaWYgKHggPiAwKSBidWZbeF0gPSAnXDAnOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAoeCA8IDEpIHggPSAtMTsKKyAgICBkZWJ1ZyhGMTAx LCJ4MjV4aW4geCIsIiIseCk7CisKKyAgICByZXR1cm4oeCk7Cit9CisKKyNpZmRlZiBDT01NRU5U IC8qIE5PIExPTkdFUiBORUVERUQhICovCisvKiBYLjI1IHJlYWQgYSBsaW5lICovCisKK2ludAor I2lmZGVmIFBBUlNFTlNFCisjaWZkZWYgQ0tfQU5TSUMKK3gyNWlubChDSEFSICpkZXN0LCBpbnQg bWF4LGludCB0aW1vLCBDSEFSIGVvbCwgQ0hBUiBzdGFydCkKKyNlbHNlCit4MjVpbmwoZGVzdCxt YXgsdGltbyxlb2wsc3RhcnQpIGludCBtYXgsdGltbzsgQ0hBUiAqZGVzdCwgZW9sLCBzdGFydDsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2Vsc2UgLyogbm90IFBBUlNFTlNFICovCisjaWZkZWYg Q0tfQU5TSUMKK3gyNWlubChDSEFSICpkZXN0LCBpbnQgbWF4LGludCB0aW1vLCBDSEFSIGVvbCkK KyNlbHNlCit4MjVpbmwoZGVzdCxtYXgsdGltbyxlb2wpIGludCBtYXgsdGltbzsgQ0hBUiAqZGVz dCwgZW9sOworI2VuZGlmIC8qIF9fU0RUQ19fICovCisjZW5kaWYgLypQQVJTRU5TRSAqLworIC8q IHgyNWlubCAqLyB7CisgICAgQ0hBUiAqcGRlc3Q7CisgICAgaW50IHBrdHlwZSwgZ290ZW9sLCBy ZXN0LCBuOworICAgIGludCBpLCBmbGFnID0gMDsKKyAgICBleHRlcm4gaW50IHR0cHJ0eSwgdHRw ZmxnOworICAgIGludCB0dHBtc2s7CisKKyAgICB0dHBtc2sgPSAodHRwcnR5KSA/IDAxNzcgOiAw Mzc3OyAgICAvKiBTZXQgcGFyaXR5IHN0cmlwcGluZyBtYXNrICovCisKKyAgICBkZWJ1ZyhGMTAx LCJ4MjVpbmwgbWF4IiwiIixtYXgpOworICAgIGRlYnVnKEYxMDEsIngyNWlubCBlb2wiLCIiLGVv bCk7CisgICAgcGRlc3QgID0gZGVzdDsKKyAgICByZXN0ICAgPSBtYXg7CisgICAgZ290ZW9sID0g MDsKKyAgICBkbyB7CisgICAgICAgIG4gPSByZWFkKHR0eWZkLHBkZXN0LHJlc3QpOworICAgICAg ICBuLS07CisgICAgICAgIHBrdHlwZSA9ICpwZGVzdCAmIDB4N2Y7CisgICAgICAgIHN3aXRjaCAo cGt0eXBlKSB7CisgICAgICAgICAgY2FzZSAxIDw8IFFfQklUOgorICAgICAgICAgICAgaWYgKHFi aXRwa3QocGRlc3QrMSwtLW4pIDwgMCkgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoZmxhZyA9PSAwKSB7IC8qIGlmIG5v dCBpbiBwYWNrZXQsIHNlYXJjaCBzdGFydCAqLworICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7 IChpIDwgbikgJiYKKyAgICAgICAgICAgICAgICAgICAgICEoZmxhZyA9ICgoZGVzdFtpXSAmIDB4 N2YpID09IHN0YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgICBpKyspOworICAgICAgICAgICAg ICAgIGlmIChmbGFnID09IDApIHsgLyogbm90IGZvdW5kLCBkaXNjYXJkIGp1bmsgKi8KKyAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwieDI1aW5sIHNraXBwaW5nIiwiIixuKTsKKyAgICAg ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgLyogZm91bmQsIGRpc2NhcmQganVuayBiZWZvcmUgc3RhcnQgKi8KKyAgICAgICAg ICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAgICAgICAgIG4gPSBuIC0gaSArIDE7Cisg ICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDE7IGsgPD0gbjsgaysrLCBpKyspIGRlc3Rba10g PSBkZXN0W2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGZvciAoaSA9IDA7IChpIDwgbikgJiYgLyogc2VhcmNoIGZvciBlb2wgKi8KKyAgICAgICAgICAg ICAgICAgIShnb3Rlb2w9KCgoKnBkZXN0ID0gKihwZGVzdCsxKSZ0dHBtc2spJjB4N2YpPT0gZW9s KSk7CisgICAgICAgICAgICAgICAgIGkrKyxwZGVzdCsrKTsKKyAgICAgICAgICAgICpwZGVzdCA9 ICdcMCc7CisgICAgICAgICAgICByZXN0IC09IG47CisgICAgICAgIH0KKyAgICB9IHdoaWxlICgo cmVzdCA+IDApICYmICghZ290ZW9sKSk7CisKKyAgICBpZiAoZ290ZW9sKSB7CisgICAgICAgIG4g PSBtYXggLSByZXN0OworICAgICAgICBkZWJ1ZyAoRjExMSwieDI1aW5sIFguMjUgZ290IiwoY2hh ciAqKSBkZXN0LG4pOworICAgICAgICBpZiAodGltbykgdHRpbW9mZigpOworICAgICAgICBpZiAo dHRwZmxnKysgPT0gMCAmJiB0dHBydHkgPT0gMCkgeworICAgICAgICAgICAgaWYgKCh0dHBydHkg PSBwYXJjaGsoZGVzdCxzdGFydCxuKSkgPiAwKSB7CisgICAgICAgICAgICAgICAgaW50IGo7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwieDI1aW5sIHNlbnNlcyBwYXJpdHkiLCIiLHR0cHJ0 eSk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwieDI1aW5sIHBhY2tldCBiZWZvcmUiLChj aGFyICopZGVzdCwwKTsKKyAgICAgICAgICAgICAgICB0dHBtc2sgPSAweDdmOworICAgICAgICAg ICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspCisgICAgICAgICAgICAgICAgICBkZXN0W2pd ICY9IDB4N2Y7IC8qIFN0cmlwIHBhcml0eSBmcm9tIHBhY2tldCAqLworICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsIngyNWlubCBwYWNrZXQgYWZ0ZXIgIixkZXN0LDApOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJjaGsiLCIiLHR0cHJ0eSk7 CisgICAgICAgICAgICAgICAgaWYgKHR0cHJ0eSA8IDApIHsgdHRwcnR5ID0gMDsgbiA9IC0xOyB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdHRpbW9mZigpOworICAgICAgICBy ZXR1cm4obik7CisgICAgfQorICAgIHR0aW1vZmYoKTsKKyAgICByZXR1cm4oLTEpOworfQorI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBTVU5YMjUgKi8KKworI2lmZGVmIElCTVgyNQor LyoKKyAqIElCTSBYMjUgc3VwcG9ydCAtIHVzaW5nIHRoZSBOUEkgc3RyZWFtcyBpbnRlcmZhY2UK KyAqIHdyaXR0ZW4gYnkgU3RlcGhlbiBSaWVobSwgcGMtcGx1cywgTXVuaWNoIEdlcm1hbnkKKyAq LworCisvKiByaWVobTogbWlzc2luZyBmdW5jdGlvbnMgLyBUT0RPIGxpc3QgKi8KKworLyoKKyAg eDI1aW50cigpIC0gU2VuZCBhbiBpbnRlcnJ1cHQgcGFja2V0CisqLworCisvKiByZXR1cm4gYW4g ZXJyb3IgbWVzc2FnZSBkZXBlbmRpbmcgb24gcGFja2V0IHR5cGUgKi8KK2NoYXIgKgoreDI1ZXJy KG4pIGludCBuOyB7CisgICAgc3RhdGljIGNoYXIgYnVmWzMwXTsKKyAgICBzd2l0Y2ggKG4pIHsK KyAgICAgIGNhc2UgTkJBREFERFI6ICAgICByZXR1cm4gImludmFsaWQgYWRkcmVzcyI7CisgICAg ICBjYXNlIE5CQURPUFQ6ICAgICAgcmV0dXJuICJpbnZhbGlkIG9wdGlvbnMiOworICAgICAgY2Fz ZSBOQUNDRVNTOiAgICAgIHJldHVybiAibm8gcGVybWlzc2lvbiI7CisgICAgICBjYXNlIE5OT0FE RFI6ICAgICAgcmV0dXJuICJ1bmFibGUgdG8gYWxsb2NhdGUgYWRkcmVzcyI7CisgICAgICBjYXNl IE5PVVRTVEFURTogICAgcmV0dXJuICJpbnZhbGlkIHN0YXRlIjsKKyAgICAgIGNhc2UgTkJBRFNF UTogICAgICByZXR1cm4gImludmFsaWQgc2VxdWVuY2UgbnVtYmVyIjsKKyAgICAgIGNhc2UgTlNZ U0VSUjogICAgICByZXR1cm4gInN5c3RlbSBlcnJvciI7CisgICAgICBjYXNlIE5CQUREQVRBOiAg ICAgcmV0dXJuICJpbnZhbGlkIGRhdGEgc2l6ZSI7CisgICAgICBjYXNlIE5CQURGTEFHOiAgICAg cmV0dXJuICJpbnZhbGlkIGZsYWciOworICAgICAgY2FzZSBOTk9UU1VQUE9SVDogIHJldHVybiAi dW5zdXBwb3J0ZWQgcHJpbWl0aXZlIjsKKyAgICAgIGNhc2UgTkJPVU5EOiAgICAgICByZXR1cm4g ImFkZHJlc3MgaW4gdXNlIjsKKyAgICAgIGNhc2UgTkJBRFFPU1BBUkFNOiByZXR1cm4gImJhZCBR T1MgcGFyYW1ldGVycyI7CisgICAgICBjYXNlIE5CQURRT1NUWVBFOiAgcmV0dXJuICJiYWQgUU9T IHR5cGUiOworICAgICAgY2FzZSBOQkFEVE9LRU46ICAgIHJldHVybiAiYmFkIHRva2VuIHZhbHVl IjsKKyAgICAgIGNhc2UgTk5PUFJPVE9JRDogICByZXR1cm4gInByb3RvY29sIGlkIGNvdWxkIG5v dCBiZSBhbGxvY2F0ZWQiOworICAgICAgY2FzZSBOT0REQ1VEOiAgICAgIHJldHVybiAib2RkIGxl bmd0aCBjYWxsIHVzZXIgZGF0YSI7CisgICAgICBkZWZhdWx0OgorICAgICAgICBja21ha21zZyhi dWYsc2l6ZW9mKGJ1ZiksIlVua25vd24gTlBJIGVycm9yICIsY2tpdG9hKG4pLE5VTEwsTlVMTCk7 CisgICAgICAgIHJldHVybiBidWY7CisgICAgfQorfQorCisvKiB0dXJuIGEgbWVhbmluZ2xlc3Mg cHJpbWl0aXZlIG51bWJlciBpbnRvIGEgbWVhbmluZ2Z1bCBwcmltaXRpdmUgbmFtZSAqLworY2hh ciAqCit4MjVwcmltKG4pIGludCBuOyB7CisgICAgc3RhdGljIGNoYXIgYnVmWzMwXTsKKyAgICBz d2l0Y2gobikgeworICAgICAgY2FzZSBOX0JJTkRfQUNLOiAgICAgcmV0dXJuICJOX0JJTkRfQUNL IjsKKyAgICAgIGNhc2UgTl9CSU5EX1JFUTogICAgIHJldHVybiAiTl9CSU5EX1JFUSI7CisgICAg ICBjYXNlIE5fQ09OTl9DT046ICAgICByZXR1cm4gIk5fQ09OTl9DT04iOworICAgICAgY2FzZSBO X0NPTk5fSU5EOiAgICAgcmV0dXJuICJOX0NPTk5fSU5EIjsKKyAgICAgIGNhc2UgTl9DT05OX1JF UTogICAgIHJldHVybiAiTl9DT05OX1JFUSI7CisgICAgICBjYXNlIE5fQ09OTl9SRVM6ICAgICBy ZXR1cm4gIk5fQ09OTl9SRVMiOworICAgICAgY2FzZSBOX0RBVEFDS19JTkQ6ICAgcmV0dXJuICJO X0RBVEFBQ0tfSU5EIjsKKyAgICAgIGNhc2UgTl9EQVRBQ0tfUkVROiAgIHJldHVybiAiTl9EQVRB QUNLX1JFUSI7CisgICAgICBjYXNlIE5fREFUQV9JTkQ6ICAgICByZXR1cm4gIk5fREFUQV9JTkQi OworICAgICAgY2FzZSBOX0RBVEFfUkVROiAgICAgcmV0dXJuICJOX0RBVEFfUkVRIjsKKyAgICAg IGNhc2UgTl9ESVNDT05fSU5EOiAgIHJldHVybiAiTl9ESVNDT05fSU5EIjsKKyAgICAgIGNhc2Ug Tl9ESVNDT05fUkVROiAgIHJldHVybiAiTl9ESVNDT05fUkVRIjsKKyAgICAgIGNhc2UgTl9FUlJP Ul9BQ0s6ICAgIHJldHVybiAiTl9FUlJPUl9BQ0siOworICAgICAgY2FzZSBOX0VYREFUQV9JTkQ6 ICAgcmV0dXJuICJOX0VYREFUQV9JTkQiOworICAgICAgY2FzZSBOX0VYREFUQV9SRVE6ICAgcmV0 dXJuICJOX0VYREFUQV9SRVEiOworICAgICAgY2FzZSBOX0lORk9fQUNLOiAgICAgcmV0dXJuICJO X0lORk9fQUNLIjsKKyAgICAgIGNhc2UgTl9JTkZPX1JFUTogICAgIHJldHVybiAiTl9JTkZPX1JF USI7CisgICAgICBjYXNlIE5fT0tfQUNLOiAgICAgICByZXR1cm4gIk5fT0tfQUNLIjsKKyAgICAg IGNhc2UgTl9PUFRNR01UX1JFUTogIHJldHVybiAiTl9PUFRNR01UX1JFUSI7CisgICAgICBjYXNl IE5fUkVTRVRfQ09OOiAgICByZXR1cm4gIk5fUkVTRVRfQ09OIjsKKyAgICAgIGNhc2UgTl9SRVNF VF9JTkQ6ICAgIHJldHVybiAiTl9SRVNFVF9JTkQiOworICAgICAgY2FzZSBOX1JFU0VUX1JFUTog ICAgcmV0dXJuICJOX1JFU0VUX1JFUSI7CisgICAgICBjYXNlIE5fUkVTRVRfUkVTOiAgICByZXR1 cm4gIk5fUkVTRVRfUkVTIjsKKyAgICAgIGNhc2UgTl9VREVSUk9SX0lORDogIHJldHVybiAiTl9V REVSUk9SX0lORCI7CisgICAgICBjYXNlIE5fVU5CSU5EX1JFUTogICByZXR1cm4gIk5fVU5CSU5E X1JFUSI7CisgICAgICBjYXNlIE5fVU5JVERBVEFfUkVROiByZXR1cm4gIk5fVU5JVERBVEFfUkVR IjsKKyAgICAgIGNhc2UgTl9VTklUREFUQV9JTkQ6IHJldHVybiAiTl9VTklUREFUQV9JTkQiOwor ICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2ttYWttc2coYnVmLHNpemVvZihidWYpLCJVTktOT1dO ICgiLGNraXRvYShuKSwiKSIsTlVMTCk7CisgICAgICAgIHJldHVybiBidWY7CisgICAgfQorfQor CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiB4MjVnZXRtc2coKQorICogRGVz Y3JpcHRpb246IGdldCBhIFNUUkVBTVMgbWVzc2FnZSwgYW5kIGNoZWNrIGl0IGZvciBlcnJvcnMK KyAqCisgKiBQYXJhbWV0ZXJzOgorICogZmQgICAgICAgICAgIC0gZmlsZSBkZXNjcmlwdG9yIHRv IHgyNSBkZXZpY2UgKG9wZW5lZCkKKyAqIGNvbnRyb2wgICAgICAtIGNvbnRyb2wgYnVmZmVyIChw cmUtYWxsb2NhdGVkKQorICogY3RsX3NpemUgICAgIC0gc2l6ZSBvZiBjb250cm9sIGJ1ZmZlcgor ICogZGF0YSAgICAgICAgIC0gZGF0YSBidWZmZXIgKHByZS1hbGxvY2F0ZWQpCisgKiBkYXRhX3Np emUgICAgLSBzaXplIG9mIGRhdGEgYnVmZmVyCisgKiBmbGFncyAgICAgICAgLSBmbGFncyBmb3Ig Z2V0bXNnKCkKKyAqIGV4cGVjdGVkICAgICAtIGV4cGVjdGVkIFByaW1pdGl2ZSB0eXBlCisgKgor ICogUmV0dXJuIFZhbHVlOgorICogICAgICA+PSAwICAgIE9LIChzaXplIG9mIGRhdGEgcmV0dXJu ZWQpCisgKiAgICAgIC0xICAgICAgZXJyb3IKKyAqCisgKi8KK2ludAoreDI1Z2V0bXNnKCBmZCwg Y29udHJvbCwgY3RsX3NpemUsIGRhdGEsIGRhdGFfc2l6ZSwgZ2V0X2ZsYWdzLCBleHBlY3RlZCAp CisgICAgaW50ICAgICAgICAgICAgICAgICBmZDsgICAgICAgICAgICAgLyogWDI1IGRldmljZSAo b3BlbmVkKSAqLworICAgIE5fbnBpX2N0bF90ICAgICAgICAgKmNvbnRyb2w7ICAgICAgIC8qIGNv bnRyb2wgYnVmZmVyIChwcmUtYWxsb2NhdGVkKSAqLworICAgIGludCAgICAgICAgICAgICAgICAg Y3RsX3NpemU7ICAgICAgIC8qIHNpemUgb2YgY29udHJvbCBidWZmZXIgKi8KKyAgICBOX25waV9k YXRhX3QgICAgICAgICpkYXRhOyAgICAgICAgICAvKiBkYXRhIGJ1ZmZlciAocHJlLWFsbG9jYXRl ZCkgKi8KKyAgICBpbnQgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZTsgICAgICAvKiBzaXplIG9m IGRhdGEgYnVmZmVyICovCisgICAgaW50ICAgICAgICAgICAgICAgICAqZ2V0X2ZsYWdzOyAgICAg LyogZ2V0bXNnKCkgZmxhZ3MgKi8KKyAgICBpbnQgICAgICAgICAgICAgICAgIGV4cGVjdGVkOyAg ICAgICAvKiBleHBlY3RlZCBwcmltaXRpdmUgdHlwZSAqLworLyogeDI1Z2V0bXNnICovIHsKKyAg ICBpbnQgICAgICAgICAgICAgICAgIHJjID0gMDsgICAgICAgICAvKiByZXR1cm4gY29kZSAqLwor ICAgIHN0cnVjdCBzdHJidWYgICAgICAgKmdldF9jdGw9TlVMTDsgIC8qIGdldG1zZyBjb250cm9s ICovCisgICAgc3RydWN0IHN0cmJ1ZiAgICAgICAqZ2V0X2RhdGE9TlVMTDsgLyogZ2V0bXNnIGRh dGEgKi8KKyAgICBpbnQgICAgICAgICAgICAgICAgIG1vcmUgPSAwOyAgICAgICAvKiBmbGFnIGZv ciBtb3JlIGRhdGEgZXRjICovCisgICAgaW50ICAgICAgICAgICAgICAgICBmaWxlX3N0YXR1cyA9 IC0xOyAvKiBmaWxlIGFzeW5jIHN0YXR1cyAqLworICAgIE5fbnBpX2N0bF90ICAgICAgICAgKiBy ZXN1bHQ7ICAgICAgIC8qIHBvaW50ZXIgdG8gc2ltcGxpZnkgc3dpdGNoKCkgKi8KKyAgICBpbnQg ICAgICAgICAgICAgICAgIHBhY2tldF90eXBlID0gLTE7IC8qIHVua25vd24gcGFja2V0IHRodXMg ZmFyICovCisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjVn ZXRtc2dcbiIgKTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgZGVidWcoIEYxMTAsICJ4MjVn ZXRtc2cgd2FpdGluZyBmb3IgcGFja2V0ICIsIHgyNXByaW0oIGV4cGVjdGVkICksIDApOworICAg IC8qIHByZXBhcmUgdGhlIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgZ2V0bXNnICovCisgICAgaWYg KGNvbnRyb2wpIHsKKyAgICAgICAgaWYgKChnZXRfY3RsID0gKHN0cnVjdCBzdHJidWYqKW1hbGxv YyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpKSA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgcGVycm9yKCJrZXJtaXQgeDI1Z2V0bXNnKCk6IGdldF9jdGwgbWFsbG9jIGZhaWxlZFxu Iik7CisgICAgICAgICAgICAgIGRlYnVnKCBGMTAwLCAieDI1Z2V0bXNnIG1hbGxvYyBmYWlsZWQg Zm9yIGdldF9jdGxcbiIsICIiLCAwKTsKKyAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgICB9CisgICAgICAgIC8qIGFsbG93IGdldG1zZyB0byByZXR1cm4gYW4gdW5leHBlY3RlZCBw YWNrZXQgdHlwZSAod2hpY2ggbWF5IGJlCisgICAgICAgICAqIGxhcmdlciB0aGFuIHRoZSBleHBl Y3RlZCBvbmUpCisgICAgICAgICAqLworICAgICAgICBnZXRfY3RsLT5tYXhsZW4gPSBOUElfTUFY X0NUTDsKKyAgICAgICAgZ2V0X2N0bC0+bGVuID0gMDsKKyAgICAgICAgZ2V0X2N0bC0+YnVmID0g KGNoYXIgKiljb250cm9sOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigKKyAia2VybWl0 IHgyNWdldG1zZygpOiBpbnRlcm5hbCBlcnJvci4gY29udHJvbCBidWZmZXIgTVVTVCBiZSBwcmUt YWxsb2NhdGVkIVxuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgZGVidWcoRjEwMCwieDI1 Z2V0bXNnIGludGVybmFsIGVycm9yLiBubyBidWZmZXIgcHJlLWFsbG9jYXRlZCIsIiIsMCk7Cisg ICAgICAgIHJldHVybiggLTEgKTsKKyAgICB9CisgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgaWYg KChnZXRfZGF0YSA9IChzdHJ1Y3Qgc3RyYnVmKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYp KSkgPT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBwZXJyb3IoImtlcm1pdCB4MjVn ZXRtc2coKTogZ2V0X2RhdGEgbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgICAgICBkZWJ1Zygg RjEwMCwgIngyNWdldG1zZyBtYWxsb2MgZmFpbGVkIGZvciBnZXRfZGF0YVxuIiwgIiIsIDApOwor ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBnZXRfZGF0YS0+bWF4 bGVuID0gKE5QSV9NQVhfREFUQSA8IGRhdGFfc2l6ZSApID8KKyAgICAgICAgICBOUElfTUFYX0RB VEEgOgorICAgICAgICAgICAgZGF0YV9zaXplOworICAgICAgICBnZXRfZGF0YS0+bGVuID0gMDsK KyAgICAgICAgZ2V0X2RhdGEtPmJ1ZiA9IChjaGFyICopZGF0YTsKKyAgICB9CisKKyAgICAvKiBn ZXQgYW4gWC4yNSBwYWNrZXQgLQorICAgICAqIGl0IG1heSBiZSBhbnkga2luZCBvZiBwYWNrZXQs IHNvIGNoZWNrIGZvciBzcGVjaWFsIGNhc2VzCisgICAgICogaXQgbWF5IGJlIHNwbGl0IGludG8g bXVsdGlwbGUgcGFydHMgLSBzbyBsb29wIGlmIG5lY2Vzc2FyeQorICAgICAqLworICAgIGRvIHsK KyNpZmRlZiBERUJVRworICAgICAgICBwcmludGYoICJrZXJtaXQ6IHgyNWdldG1zZygpOiBnZXR0 aW5nIGEgbWVzc2FnZVxuIiApOworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgIGVycm5vID0g MDsKKyAgICAgICAgaWYgKChtb3JlID0gZ2V0bXNnKGZkLCBnZXRfY3RsLCBnZXRfZGF0YSwgZ2V0 X2ZsYWdzKSkgPCAwKSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIHByaW50ZiggImtlcm1p dDogeDI1Z2V0bXNnKCk6IGdldG1zZyByZXR1cm5lZCBhbiBlcnJvclxuIiApOworICAgICAgICAg ICAgcGVycm9yKCAiZ2V0bXNnIGVycm9yIHdhcyIgKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAg ICAgICAgICAgZGVidWcoRjEwMSwgIngyNWdldG1zZyBnZXRtc2cgcmV0dXJuZWQgYW4gZXJyb3Jc biIsICIiLCBlcnJubyk7CisgICAgICAgICAgICBpZiAoKGVycm5vID09IEVBR0FJTikgJiYgKGdl dF9kYXRhICYmIChnZXRfZGF0YS0+bGVuID4gMCkpICkgeworICAgICAgICAgICAgICAgIC8qIHdh cyBpbiBub24tYmxvY2tpbmcgbW9kZSwgbm90aGluZyB0byBnZXQsIGJ1dCB3ZSdyZQorICAgICAg ICAgICAgICAgICAqIGFscmVhZHkgd2FpdGluZyBmb3IgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAt CisgICAgICAgICAgICAgICAgICogc3dpdGNoIHRvIGJsb2NraW5nIG1vZGUgZm9yIHRoZSBuZXh0 IHJlYWQuCisgICAgICAgICAgICAgICAgICogZmlsZV9zdGF0dXMgdXNlZCB0byByZXNldCBmaWxl IHN0YXR1cyBiZWZvcmUgcmV0dXJuaW5nCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgaWYgKChmaWxlX3N0YXR1cyA9IGZjbnRsKGZkLCBGX0dFVEZMLCAwKSkgPCAwCisgICAg ICAgICAgICAgICAgICAgIHx8IGZjbnRsKGZkLCBGX1NFVEZMLCBmaWxlX3N0YXR1cyAmIH5PX05E RUxBWSkgPCAwKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHBl cnJvcigieDI1Z2V0bXNnKCk6IGNvdWxkbid0IGNoYW5nZSB4MjUgYmxvY2tpbmcgbW9kZSIpOwor ICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIngyNWdldG1zZyBmY250bCByZXR1cm5lZCBhbiBlcnJvclxuIiwgIiIsIGVycm5vKTsK KyAgICAgICAgICAgICAgICAgICAgICAvKiBuZXRjbG9zKCk7ICovCisgICAgICAgICAgICAgICAg ICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgLyogbG9vcCBhZ2FpbiBpbnRv IGEgYmxvY2tpbmcgZ2V0bXNnKCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgLyogbm8gZGF0YSB0byBnZXQgaW4gbm9uLWJsb2NraW5nIG1vZGUgLSByZXR1cm4gZW1wdHkg aGFuZGVkICovCisgICAgICAgICAgICAgICAgcGVycm9yKCAieDI1Z2V0bXNnKCk6IGdldG1zZyBm YWlsZWQiICk7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwieDI1Z2V0bXNnIGdldG1zZyBy ZXR1cm5lZCBhbiBlcnJvclxuIiwgIiIsIGVycm5vKTsKKyAgICAgICAgICAgICAgICByYyA9IC0x OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug aWYgKG1vcmUgJiBNT1JFQ1RMKSB7CisgICAgICAgICAgICAvKiBwYW5pYyAtIHRoZSBjb250cm9s IGluZm9ybWF0aW9uIHdhcyBsYXJnZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAqIG1heGltdW0g Y29udHJvbCBidWZmZXIgc2l6ZSEKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogcmll aG06IGNsb3NlIGNvbm5lY3Rpb24/ICovCisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIHByaW50 ZigieDI1Z2V0bXNnKCk6IHJlY2VpdmVkIHBhcnRpYWwgY29udHJvbCBwYWNrZXQgLSBwYW5pY1xu Iik7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgIGRlYnVnKCBGMTAxLCAieDI1Z2V0 bXNnIGdldG1zZyBiYWQgY29udHJvbCBibG9ja1xuIiwgIiIsIGVycm5vKTsKKyAgICAgICAgICAg IHJjID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChy ZXN1bHQgPSAoTl9ucGlfY3RsX3QgKiljb250cm9sKSB7CisgICAgICAgICAgICBwYWNrZXRfdHlw ZSA9IHJlc3VsdC0+YmluZF9hY2suUFJJTV90eXBlOworICAgICAgICAgICAgaWYgKHBhY2tldF90 eXBlICE9IE5fT0tfQUNLKSB7CisgICAgICAgICAgICAgICAgeDI1bGFzdG1zZyA9IHBhY2tldF90 eXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZkZWYgREVCVUcKKyAgICAgICAgLyog cHJpbnRmKCAia2VybWl0OiB4MjVnZXRtc2coKTogZ2V0dGluZyAiICk7ICovCisgICAgICAgIGlm IChnZXRfY3RsLT5sZW4gPiAwKSB7CisgICAgICAgICAgICB4MjVkdW1wX3ByaW0ocmVzdWx0KTsK KyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLAorICAgICAgICAgICAgICAieDI1Z2V0bXNn IGdvdCBwYWNrZXQgIiwKKyAgICAgICAgICAgICAgeDI1cHJpbSggcmVzdWx0LT5iaW5kX2Fjay5Q UklNX3R5cGUgKSwKKyAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICApOworI2VuZGlmIC8q IERFQlVHICovCisKKyAgICAgICAgaWYgKGdldF9jdGwtPmxlbiA+PSAoaW50KXNpemVvZihyZXN1 bHQtPmJpbmRfYWNrLlBSSU1fdHlwZSkpIHsKKyAgICAgICAgICAgIC8qIG5vdCBhcyBwcmV0dHkg YXMgYSBzd2l0Y2goKSwgYnV0IHN3aXRjaCBjYW4ndCBoYW5kbGUKKyAgICAgICAgICAgICAqIHJ1 bnRpbWUgdmFyaWFibGUgdmFsdWVzIDotKAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBp ZiAocGFja2V0X3R5cGUgPT0gZXhwZWN0ZWQgKSB7CisgICAgICAgICAgICAgICAgLyogZ290IHdo YXQgd2Ugd2FudGVkLCBzcGVjaWFsIGNhc2UgZm9yIERBVEFfSU5ECisgICAgICAgICAgICAgICAg ICogcGFja2V0cyB0aG91Z2ggKi8KKyAgICAgICAgICAgICAgICAvKiByaWVobTogY2hlY2sgUS1i aXQgPyAqLworI2lmZGVmIERFQlVHCisgICAgICAgICAgICAgICAgcHJpbnRmKCJ4MjVnZXRtc2co KTogZ290IGV4cGVjdGVkIHBhY2tldFxucmMgaXMgJWRcbiIsIHJjKTsKKyNlbmRpZiAvKiBERUJV RyAqLworICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfdHlwZSA9PSBOX0RBVEFfSU5EICkgewor ICAgICAgICAgICAgICAgICAgICAvKiBkYXRhIHJlY2VpdmVkLiBNYXkgYmUgaW5jb21wbGV0ZSwg ZXZlbiB0aG91Z2gKKyAgICAgICAgICAgICAgICAgICAgICogZ2V0bXNnIHJldHVybmVkIE9LCisg ICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5k YXRhX2luZC5EQVRBX3hmZXJfZmxhZ3MgJiBOX01PUkVfREFUQV9GTEFHKQorICAgICAgICAgICAg ICAgICAgICAgICAgbW9yZSB8PSBNT1JFREFUQTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJl c3VsdC0+ZGF0YV9pbmQuREFUQV94ZmVyX2ZsYWdzICYgTl9SQ19GTEFHKQorICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCAieDI1Z2V0bXNnKCk6IGRhdGEgcGFja2V0IHdhbnRzIGFja1xu IiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiggcGFja2V0X3R5 cGUgPT0gTl9ESVNDT05fSU5EKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCAiWDI1IGRpY29u bmVjdGVkXG4iICk7CisgICAgICAgICAgICAgICAgLyogcmllaG06IG5lZWQgdG8gYWNrbm93bGVk Z2UgYSBkaXNjb25uZWN0aW9uPyAqLworICAgICAgICAgICAgICAgIHgyNWNsZWFyKCk7CisgICAg ICAgICAgICAgICAgLyogeDI1dW5iaW5kKCB0dHlmZCApOyAqLworICAgICAgICAgICAgICAgIHJj ID0gLTE7CisgICAgICAgICAgICB9IGVsc2UgaWYoIHBhY2tldF90eXBlID09IE5fRVJST1JfQUNL KSB7CisgICAgICAgICAgICAgICAgZXJybm8gPSByZXN1bHQtPmVycm9yX2Fjay5VTklYX2Vycm9y OworICAgICAgICAgICAgICAgIHBlcnJvciggIlgyNSBlcnJvciByZWNlaXZlZCIgKTsKKyAgICAg ICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIngyNWdldG1zZygpOiBmYWlsZWQgJXNcbiIsIHgyNWVycihwYWNrZXRfdHlwZSkp OworICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNp ZmRlZiBDT01NRU5UCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogUGFuaWMgLSBubyBj b250cm9sIGRhdGEgKi8KKyAgICAgICAgICAgIHByaW50ZiggImtlcm1pdDogeDI1Z2V0bXNnKCk6 IG5vIGNvbnRyb2wgZGF0YSB3aXRoIHBhY2tldFxuIiApOworICAgICAgICAgICAgcmMgPSAtMTsK KyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICAgICBpZiAoZ2V0X2RhdGEg JiYgKGdldF9kYXRhLT5sZW4gPj0gMCkpIHsKKyAgICAgICAgICAgIGdldF9kYXRhLT5idWYgKz0g Z2V0X2RhdGEtPmxlbjsKKyAgICAgICAgICAgIGdldF9kYXRhLT5tYXhsZW4gLT0gZ2V0X2RhdGEt PmxlbjsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKChyYyA9PSAwKQorICAgICAgICAgICAgICYm IChnZXRfZGF0YSAmJiAoZ2V0X2RhdGEtPm1heGxlbiA+IDApKQorICAgICAgICAgICAgICYmICht b3JlICYgTU9SRURBVEEpCisgICAgICAgICAgICAgKTsKKworICAgIC8qIHJldHVybiB0aGUgZmls ZSBzdGF0dXMgdG8gaXRzIG9yaWdpbmFsIHZhbHVlLCB1bmxlc3MgaXRzIHN0aWxsCisgICAgICog c2V0IHRvIC0xLCBvciBvbmUgb2YgdGhlIGZjbnRsJ3MgZmFpbGVkICovCisgICAgaWYgKChmaWxl X3N0YXR1cyA+PSAwKSAmJiBmY250bChmZCwgRl9TRVRGTCwgZmlsZV9zdGF0dXMpIDwgMCkKKyAg ICAgICAgcmMgPSAtMTsKKworICAgIC8qCisgICAgICogVmVyaWZ5IHRoYXQgd2UgcmVjZWl2ZWQg YW4gZXhwZWN0ZWQgcHJpbWl0aXZlCisgICAgICogdGhlcmUgaXMgYXBwYXJhbnRseSBhbiBlcnJv ciBjYXNlIHdoZXJlIHRoZSBwcmltaXRpdmUgaXMgc2V0CisgICAgICogY29ycmVjdGx5LCBidXQg dGhlcmUgaXMgbm90IGVub3VnaCBkYXRhIGluIHRoZSBjb250cm9sIHN0cnVjdHVyZQorICAgICAq LworICAgIGlmICgocGFja2V0X3R5cGUgIT0gZXhwZWN0ZWQpICYmIChnZXRfY3RsLT5sZW4gPj0g Y3RsX3NpemUpICkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAi eDI1Z2V0bXNnKCk6ICVzIE5PVCByZWNlaXZlZC4gUHJpbWl0aXZlIHJlY2VpdmVkIHdhcyAlc1xu IiwKKyAgICAgICAgICAgICAgICB4MjVwcmltKCBleHBlY3RlZCApLCB4MjVwcmltKCBwYWNrZXRf dHlwZSApKTsKKyAgICAgICAgZGVidWcoRjExMCwgIngyNWdldG1zZyBnb3QgYW4gdW5leHBlY3Rl ZCBwYWNrZXQgIiwKKyAgICAgICAgICAgICAgeDI1cHJpbShwYWNrZXRfdHlwZSksCisgICAgICAg ICAgICAgIDAKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisKKyAg ICBpZiAocmMgPT0gMCkgeworICAgICAgICBpZiAoZ2V0X2RhdGEgJiYgKCBnZXRfZGF0YS0+bGVu ID49IDApKSB7CisgICAgICAgICAgICByYyA9IGdldF9kYXRhLT5sZW47CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBpZiAoZ2V0X2N0bCkgIHsgZnJlZShnZXRfY3RsKTsgZ2V0X2N0bCA9IE5VTEw7 IH0KKyAgICBpZiAoZ2V0X2RhdGEpIHsgZnJlZShnZXRfZGF0YSk7IGdldF9kYXRhID0gTlVMTDsg fQorCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCAia2VybWl0IHgy NWdldG1zZygpOiByZXR1cm5pbmcgJWRcbiIsIHJjICk7CisjZW5kaWYgLyogREVCVUcgKi8KKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgZGVidWcoRjExMCwgIngyNWdldG1zZyByZXR1cm5pbmcg cGFja2V0ICIsIHgyNXByaW0oIHBhY2tldF90eXBlICksIDApOworCisjaWZkZWYgVFJBQ0UKKyAg ICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjVnZXRtc2dcbiIgKTsKKyNlbmRpZiAvKiBUUkFD RSAqLworICAgIHJldHVybihyYyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVu Y3Rpb246IHgyNXB1dG1zZygpCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgIHNlbmQgYSBt ZXNzYWdlIHRvIGEgWDI1IFNUUkVBTQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgICAgIGZkICAg ICAgICAgICAgICAtIGZpbGUgZGVzY3JpcHRvciB0byB4MjUgZGV2aWNlIChvcGVuZWQpCisgKiAg ICAgIGNvbnRyb2wgICAgICAgICAtIGNvbnRyb2wgYnVmZmVyIChwcmUtYWxsb2NhdGVkKQorICog ICAgICBkYXRhICAgICAgICAgICAgLSBkYXRhIGJ1ZmZlciAocHJlLWFsbG9jYXRlZCkKKyAqICAg ICAgZGF0YV9sZW4gICAgICAgIC0gbGVuZ3RoIG9mIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQKKyAq ICAgICAgcHV0X2ZsYWdzICAgICAgIC0gZmxhZ3MgZm9yIHB1dG1zZygpCisgKgorICogUmV0dXJu IFZhbHVlOgorICogICAgICA+PSAwICAgIG51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZAorICog ICAgICAtMSAgICAgIGVycm9yCisgKi8KK2ludAoreDI1cHV0bXNnKGZkLCBjb250cm9sLCBkYXRh LCBkYXRhX2xlbiwgcHV0X2ZsYWdzKQorICAgIGludCAgICAgICAgICAgICAgICAgZmQ7ICAgICAg ICAgICAgIC8qIFgyNSBkZXZpY2UgKG9wZW5lZCkgKi8KKyAgICBOX25waV9jdGxfdCAgICAgICAg ICpjb250cm9sOyAgICAgICAvKiBjb250cm9sIGJ1ZmZlciAocHJlLWFsbG9jYXRlZCkgKi8KKyAg ICBOX25waV9kYXRhX3QgICAgICAgICpkYXRhOyAgICAgICAgICAvKiBkYXRhIGJ1ZmZlciAocHJl LWFsbG9jYXRlZCkgKi8KKyAgICBpbnQgICAgICAgICAgICAgICAgIGRhdGFfbGVuOyAgICAgICAv KiBsZW5ndGggb2YgZGF0YSAobm90IHRoZSBzaXplIG9mCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlcikgKi8KKyAgICBpbnQgICAgICAgICAgICAg ICAgICpwdXRfZmxhZ3M7ICAgICAvKiBwdXRtc2coKSBmbGFncyAqLworLyogeDI1cHV0bXNnICov IHsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHJjID0gMDsgICAgICAgICAvKiByZXR1cm4gY29k ZSAqLworICAgIHVsb25nICAgICAgICAgICAgICAgdHlwZTsgICAgICAgICAgIC8qIHByaW1pdGl2 ZSB0eXBlICovCisgICAgc3RydWN0IHN0cmJ1ZiAgICAgICAqcHV0X2N0bCA9IE5VTEw7IC8qIHB1 dG1zZyBjb250cm9sICovCisgICAgc3RydWN0IHN0cmJ1ZiAgICAgICAqcHV0X2RhdGEgPSBOVUxM OyAvKiBwdXRtc2cgZGF0YSAqLworCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTog ZW50ZXJpbmcgeDI1cHV0bXNnXG4iICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworI2lmZGVmIERF QlVHCisgICAgcHJpbnRmKCAia2VybWl0OiB4MjVwdXRtc2coKTogcHV0dGluZyAiICk7CisgICAg eDI1ZHVtcF9wcmltKCBjb250cm9sICk7CisgICAgcHJpbnRmKCAiXHRkYXRhOlx0XHQiICk7Cisg ICAgeDI1ZHVtcF9kYXRhKCBkYXRhLCAwLCBkYXRhX2xlbiApOworICAgIGRlYnVnKEYxMTAsIngy NXB1dG1zZzogcHV0dGluZyBwYWNrZXQgIix4MjVwcmltKGNvbnRyb2wtPlBSSU1fdHlwZSksMCk7 CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGlmIChjb250cm9sKSB7CisgICAgICAgIHB1dF9j dGwgPSAoc3RydWN0IHN0cmJ1ZiAqKW1hbGxvYyggc2l6ZW9mKCBzdHJ1Y3Qgc3RyYnVmICkgKTsK KyAgICAgICAgaWYgKHB1dF9jdGwgPT0gTlVMTCkgeworICAgICAgICAgICAgcGVycm9yKCJrZXJt aXQgeDI1cHV0bXNnKCk6IHB1dF9jdGwgbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIHB1dF9jdGwtPm1heGxlbiA9IDA7ICAgICAg ICAgICAgICAgICAgICAvKiB1bnVzZWQgYnkgcHV0bXNnICovCisgICAgICAgIHB1dF9jdGwtPmxl biA9IE5QSV9NQVhfQ1RMOworICAgICAgICBwdXRfY3RsLT5idWYgPSAoY2hhciAqKWNvbnRyb2w7 CisgICAgfQorICAgIGlmIChkYXRhICYmICggZGF0YV9sZW4gPiAwKSkgeworICAgICAgICBwdXRf ZGF0YSA9IChzdHJ1Y3Qgc3RyYnVmICopbWFsbG9jKCBzaXplb2YoIHN0cnVjdCBzdHJidWYgKSAp OworICAgICAgICBpZiggcHV0X2RhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcGVycm9yKCJr ZXJtaXQgeDI1cHV0bXNnKCk6IHB1dF9kYXRhIG1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBwdXRfZGF0YS0+bWF4bGVuID0gMDsg ICAgICAgICAgICAgICAgICAgLyogdW51c2VkIGJ5IHB1dG1zZyAqLworICAgICAgICBwdXRfZGF0 YS0+bGVuID0gZGF0YV9sZW47CisgICAgICAgIHB1dF9kYXRhLT5idWYgPSAoY2hhciAqKWRhdGE7 CisgICAgfQorCisgICAgZXJybm8gPSAwOworICAgIHJjID0gcHV0bXNnIChmZCwgcHV0X2N0bCwg cHV0X2RhdGEsIDApOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgcHJpbnRmKCJ4MjVwdXRt c2coKTogY291bGRuJ3QgcHV0ICVzXG4iLHgyNXByaW0oY29udHJvbC0+UFJJTV90eXBlKSk7Cisg ICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVwdXRtc2coKTogcHV0bXNnIGZhaWxlZCIpOworICAg ICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qIHJpZWhtOiB0aGlzIHNob3VsZCBwZXJo YXBzIGJlIGRpc2NvdW50ZWQhICovCisgICAgeDI1bGFzdG1zZyA9IGNvbnRyb2wtPlBSSU1fdHlw ZTsKKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgIHByaW50ZiggImtlcm1pdCBk ZWJ1ZzogeDI1cHV0bXNnKCkgcmV0dXJuaW5nICVkXG4iLCBkYXRhX2xlbiApOworI2VuZGlmIC8q IERFQlVHICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGRlYnVnKCBGMTAxLCAieDI1cHV0 bXNnIGJsb2NrIHNpemUgcHV0ICIsICIiLCBkYXRhX2xlbik7CisKKyNpZmRlZiBUUkFDRQorICAg IHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNXB1dG1zZ1xuIiApOworI2VuZGlmIC8qIFRSQUNF ICovCisKKyAgICByZXR1cm4oIGRhdGFfbGVuICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorKiBGdW5jdGlvbjogeDI1YmluZAorKiBEZXNjcmlwdGlvbjogIFRoZSBiaW5kIHN1Ym1pdHRl ZCB0byBOUEkgcHJvdmlkZXMgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkCisqICAgICAgICAgICAg ICAgYnkgdGhlIHBhY2tldCBsYXllciBmb3IgaXQgdG8gbGlzdGVuIGZvciBzdWl0YWJsZSBpbmNv bWluZworKiAgICAgICAgICAgICAgIGNhbGxzLgorKgorKiBXQVJOSU5HOgorKgorKiBUaGlzIHJv dXRpbmUgbmVlZHMgdG8gYmUgY2FsbGVkIGluIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbWFubmVy IGZvcgorKiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgc2lkZS4gV2hlbiBzdGFydGluZyBhIGNsaWVu dCwgdGhlCisqIG51bV93YWl0aW5nX2NhbGxzIGFuZCBDVUQgaW5mb3JtYXRpb24gc2hvdWxkIGFs bCBiZSBzZXQgdG8gMCEgVGhlCisqIGNsaWVudCdzIENVRCBtdXN0IGJlIGluc2VydGVkIGluIHRo ZSBDT05OX1JFUSBkYXRhIGJsb2NrLgorKiBXaGVuIHN0YXJ0aW5nIGEgc2VydmVyLCB0aGUgQ1VE IG11c3QgYmUgc2V0IHRvIGEgQ1VEIHBhdHRlcm4sIGFuZAorKiB0aGUgbnVtYmVyIG9mIHdhaXRp bmcgY2FsbHMgc2hvdWxkIGJlIHNldCB0byBhIG51bWJlciBvdGhlciB0aGFuIDAuCisqIChudW0g d2FpdGluZyBjYWxscyBpcyB0aGUgbnVtYmVyIG9mIGluY29tbWluZyBjYWxscyB3aGljaCBhcmUg dG8gYmUKKyogcHV0IG9uIGhvbGQgd2hpbGUgdGhlIHNlcnZlciBpcyBzZXJ2aWNpbmcgYW5vdGhl ciBjbGllbnQuKQorKgorKiBXaG8gaW52ZW50ZWQgdGhpcyBjcmFwPworKgorKiBQYXJhbWV0ZXJz OgorKiAgICAgICBmZCAgICAgICAgICAgICAgLSBYMjUgZGV2aWNlIChvcGVuZWQpCisqICAgICAg IGFkZHIgICAgICAgICAgICAtIGxvY2FsIGFkZHJlc3MKKyogICAgICAgY3VkICAgICAgICAgICAg IC0gVXNlciBEYXRhIChudWxsIHRlcm1pbmF0ZWQpCisqICAgICAgIGN1ZF9sZW4gICAgICAgICAt IFVzZXIgRGF0YSBsZW5ndGgKKyogICAgICAgbnVtX3dhaXRpbmdfY2FsbHMgLSBudW1iZXIgb2Yg b3V0c3RhbmRpbmcgY2FsbHMgYWxsb3dlZCBvbiB0aGlzIHN0cmVhbQorKiAgICAgICBsaW5lICAg ICAgICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyICgxKQorKiAgICAgICBmbGFncyAgICAgICAg ICAgLSAwLCBERUZBVUxUX0xJU1RFTkVSIG9yIFRPS0VOX1JFUVVFU1QKKyoKKyogUmV0dXJuIFZh bHVlOgorKiAgICAgICBpZiBiaW5kaW5nIGlzIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQgZm9y IGEgY2xpZW50LCBhbmQgYSB0b2tlbiBpcworKiAgICAgICByZXR1cm5lZCBmb3IgYSBzZXJ2ZXIK KyoKKyogUmV0dXJuIGNvZGU6IDAgaWYgc3VjY2Vzc2Z1bAorKiAgICAgICAgICAgICAgLTEgaWYg dW5zdWNjZXNzZnVsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordWxvbmcKK3gyNWJpbmQoZmQs IGFkZHIsIGN1ZCwgY3VkX2xlbiwgbnVtX3dhaXRpbmdfY2FsbHMsIGxpbmUsIGJpbmRfZmxhZ3Mp CisgICAgaW50IGZkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWDI1IGRldmljZSAo b3BlbmVkKSAqLworICAgIGNoYXIgKiBhZGRyOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxv Y2FsIGFkZHJlc3MgKi8KKyAgICBjaGFyICogY3VkOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDYWxsIFVzZXIgRGF0YSAobnVsbCB0ZXJtaW5hdGVkKSAqLworICAgIGludCBjdWRfbGVuOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZXIgRGF0YSBsZW5ndGggKi8KKyAgICBpbnQgbnVt X3dhaXRpbmdfY2FsbHM7ICAgICAgICAgICAgICAvKiBPdXRzdGFuZGluZyBjYWxscyBhbGxvd2Vk ICovCisgICAgaW50IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9naWNhbCBw b3J0IG51bWJlciAqLworICAgIHVsb25nIGJpbmRfZmxhZ3M7ICAgICAgICAgICAvKiAwLCBERUZB VUxUX0xJU1RFTkVSIG9yIFRPS0VOX1JFUVVFU1QgKi8KKy8qIHgyNWJpbmQgKi8geworICAgIHVs b25nIHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCisgICAg aW50IGdldF9mbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogcHJpb3JpdHkgZmxhZyBwYXNz ZWQgdG8gZ2V0bXNnICovCisgICAgaW50IHB1dF9mbGFncyA9IDA7ICAgICAgICAgICAgICAgICAg Lyogb3V0cHV0IGZsYWdzIGZvciBwdXRtc2csIGFsd2F5cyAwICovCisgICAgdWxvbmcgdHlwZTsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbWl0aXZlIHR5cGUgKi8KKyAgICBOX2JpbmRf cmVxX3QgKmJpbmRfcmVxOyAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIE5fQklORF9SRVEgcHJp bWl0aXZlICovCisgICAgTl9iaW5kX2Fja190ICpiaW5kX2FjazsgICAgICAgICAgICAgLyogcG9p bnRlciB0byBOX0JJTkRfQUNLIHByaW1pdGl2ZSAqLworICAgIGNoYXIgKmFkZHRsX2luZm87ICAg ICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gaW5mbyBpbiBhZGRpdGlvbiB0bworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBOX0JJTkRfUkVRIHByaW1p dGl2ZSB0aGF0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog cGFzc2VkIGluIHRoZSBjb250cm9sIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqIHRvIHB1dG1zZyAqLworICAgIGludCBhZGRyX2xlbiA9IDA7ICAg ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBhZGRyZXNzIHN0cmluZyAqLworICAgIHVsb25n IGJpbmRfcmVxX3Rfc2l6ZTsgICAgICAgICAgICAgIC8qIGZvciBkZWJ1Z2dpbmcgb25seSAqLwor CisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoIlRSQUNFOiBlbnRlcmluZyB4MjViaW5kXG4iICk7 CisjZW5kaWYgLyogVFJBQ0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCJUUkFDRTog eDI1YmluZCggJWQsICVzLCAlcywgJWQsICVkIClcbiIsCisgICAgICAgICAgIGZkLCBhZGRyLCBj dWQsIGxpbmUsIGJpbmRfZmxhZ3MKKyAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBERUJVRyAqLwor CisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSAgYW5kIHplcm8gb3V0IHNwYWNlIHRvIGhvbGQgdGhl IGNvbnRyb2wgcG9ydGlvbiBvZiB0aGUKKyAgICAgKiBtZXNzYWdlIHBhc3NlZCB0byBwdXRtc2cu IFRoaXMgd2lsbCBjb250YWluIHRoZSBOX0JJTkRfUkVRCisgICAgICogcHJpbWl0aXZlIGFuZCBh bnkgYWRkaXRpb25hbCBpbmZvIHJlcXVpcmVkIGZvciB0aGF0LgorICAgICAqCisgICAgICogTm90 ZTogYWxsb2NhdGVkIHNwYWNlIGlzIHRoZSBzaXplIG9mIHRoZSB1bmlvbiB0eXBlZGVmCisgICAg ICogTl9ucGlfY3RsX3QgdG8gYWxsb3cgdGhlIHVzZSBmbyB0aGUgZ2VuZXJpYyB4MjVwdXRtc2cg cm91dGluZS4KKyAgICAgKi8KKyAgICBiaW5kX3JlcSA9IChOX2JpbmRfcmVxX3QgKikgbWFsbG9j KHNpemVvZiggTl9ucGlfY3RsX3QpKTsKKyAgICBpZiAoYmluZF9yZXEgPT0gTlVMTCkgeworICAg ICAgICBwZXJyb3IoImtlcm1pdDogeDI1YmluZCgpOiBiaW5kX3JlcSBtYWxsb2MgZmFpbGVkIik7 CisgICAgICAgIGRlYnVnKEYxMDAsICJ4MjViaW5kIGJpbmRfcmVxIG1hbGxvYyBmYWlsZWQiLCAi IiwgMCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGJ6ZXJvKChjaGFyICopYmlu ZF9yZXEsIHNpemVvZihOX25waV9jdGxfdCkpOworCisgICAgLyogQnVpbGQgdGhlIEJpbmQgUmVx dWVzdCBQcmltaXRpdmUgKi8KKyAgICBiaW5kX3JlcS0+UFJJTV90eXBlID0gKHVsb25nKSBOX0JJ TkRfUkVROworCisgICAgLyogTm90ZSB0aGF0IHRoZSBhZGRyZXNzIGxlbmd0aCBpcyBuKzIgYW5k IE5PVCBuLiBUd28gYnl0ZXMgTVVTVCBwcmVjZWVkCisgICAgICogdGhlIGFjdHVhbCBhZGRyZXNz IGluIGFuIE5fQklORF9SRVEuIFRoZSBmaXJzdCBieXRlIGNvbnRhaW5zIHRoZQorICAgICAqIGxp bmUgbnVtYmVyIGJlaW5nIHVzZWQgd2l0aCB0aGlzIGFkZHJlc3MsIGFuZCB0aGUgc2Vjb25kIGJ5 dGUgaXMgdGhlCisgICAgICogWC4xMjEgYWRkcmVzcyBwcmVmaXgsIHdoaWNoIG11c3QgYmUgemVy by4KKyAgICAgKi8KKyAgICBhZGRyX2xlbiA9IHN0cmxlbihhZGRyKTsKKyAgICBiaW5kX3JlcS0+ QUREUl9sZW5ndGggPSAodWxvbmcpIChhZGRyX2xlbiArIDIpOworICAgIGJpbmRfcmVxLT5BRERS X29mZnNldCA9ICh1bG9uZykoc2l6ZW9mKE5fYmluZF9yZXFfdCkpOworICAgIGJpbmRfcmVxLT5D T05JTkRfbnVtYmVyID0gKHVsb25nKW51bV93YWl0aW5nX2NhbGxzOyAvKiBzZXJ2ZXIgb25seSAq LworICAgIGJpbmRfcmVxLT5CSU5EX2ZsYWdzID0gKHVsb25nKSBiaW5kX2ZsYWdzOyAvKiAwIGlu IGNsaWVudCAqLworICAgIGJpbmRfcmVxLT5QUk9UT0lEX2xlbmd0aCA9ICh1bG9uZykgY3VkX2xl bjsgLyogMCBpbiBjbGllbnQgKi8KKyAgICBpZiAoY3VkX2xlbiA9PSAwKSB7CisgICAgICAgIGJp bmRfcmVxLT5QUk9UT0lEX29mZnNldCA9ICh1bG9uZykgMDsKKyAgICB9IGVsc2UgeworICAgICAg ICAvKiBuZWVkIHRvIHJlbWVtYmVyIHRoZSB0cmFpbGluZyBOVUxMIGluIHRoZSBhZGRyZXNzIC0g bm90CisgICAgICAgICAqIGNvdW50ZWQgaW4gdGhlIGFkZHJlc3MgbGVuZ3RoCisgICAgICAgICAq LworICAgICAgICBiaW5kX3JlcS0+UFJPVE9JRF9vZmZzZXQKKyAgICAgICAgICA9ICh1bG9uZykg KHNpemVvZihOX2JpbmRfcmVxX3QpICsgYmluZF9yZXEtPkFERFJfbGVuZ3RoKTsKKyAgICB9CisK KyAgICAvKgorICAgICAqIE5vdyBmaWxsIGluIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJl cXVpcmVkIHdpdGggdGhpcyBwcmltaXRpdmUKKyAgICAgKiAoYWRkcmVzcyBhbmQgcHJvdG9jb2wg aW5mb3JtYXRpb24gKENhbGwgVXNlciBEYXRhKSkKKyAgICAgKi8KKyAgICBhZGR0bF9pbmZvID0g KGNoYXIgKikgKCh2b2lkICopYmluZF9yZXEgKyBiaW5kX3JlcS0+QUREUl9vZmZzZXQpOworICAg IC8qCisgICAgICogVGhlIGJpdHdpc2UgIiYiIGVuc3VyZXMgdGhhdCB0aGUgbGluZSBudW1iZXIg aXMgb25seSBvbmUgYnl0ZSBsb25nCisgICAgICovCisgICAgKmFkZHRsX2luZm8rKyA9IChjaGFy KSBsaW5lICYgMHhmZjsKKyAgICAqYWRkdGxfaW5mbysrID0gKGNoYXIpIDA7IC8qIFguMTIxIGZv cm1hdCAqLworICAgIGJjb3B5KCBhZGRyLCBhZGR0bF9pbmZvLCBhZGRyX2xlbiApOyAvKiBpbmNs dWRlIHRyYWlsaW5nIG51bGwgKi8KKyAgICBhZGR0bF9pbmZvICs9IGFkZHJfbGVuOworICAgIGlm IChjdWRfbGVuID4gMCkKKyAgICAgIGJjb3B5KCBjdWQsIGFkZHRsX2luZm8sIGN1ZF9sZW4gKTsK KyAgICAvKgorICAgICAqIENhbGwgcHV0bXNnKCkgdG8gcHV0IHRoZSBiaW5kIHJlcXVlc3QgbWVz c2FnZSBvbiB0aGUgc3RyZWFtCisgICAgICovCisgICAgaWYgKHgyNXB1dG1zZyhmZCwKKyAgICAg ICAgICAgICAgICAgIChOX25waV9jdGxfdCopYmluZF9yZXEsCisgICAgICAgICAgICAgICAgICAo Tl9ucGlfZGF0YV90ICopTlVMTCwKKyAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg ICAgICAmcHV0X2ZsYWdzCisgICAgICAgICAgICAgICAgICApIDwgMCkgeworICAgICAgICBwcmlu dGYoICJrZXJtaXQ6IHgyNWJpbmQoKTogeDI1cHV0bXNnIGZhaWxlZFxuIiApOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qCisgICAgICogQWxsb2NhdGUgYW5kIHplcm8gb3V0 IHNwYWNlIGZvciB0aGUgTl9CSU5EX0FDSyBwcmltaXRpdmUKKyAgICAgKi8KKyAgICBiaW5kX2Fj ayA9IChOX2JpbmRfYWNrX3QgKikgbWFsbG9jKHNpemVvZihOX25waV9jdGxfdCkpOworICAgIGlm IChiaW5kX2FjayA9PSBOVUxMKXsKKyAgICAgICAgcGVycm9yKCJrZXJtaXQ6IHgyNWJpbmQoKTog YmluZF9hY2sgbWFsbG9jIGZhaWxlZCIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAg ICBiemVybyhiaW5kX2Fjaywgc2l6ZW9mKE5fbnBpX2N0bF90KSk7CisgICAgLyoKKyAgICAgKiBJ bml0aWFsaXplIHRoZSBjb250cm9sIHN0cnVjdHVyZSBhbmQgZmxhZyB2YXJpYWJsZSBzZW50IHRv IGdldG1zZworICAgICAqLworICAgIGdldF9mbGFncz0wOworCisgICAgLyogZ2V0IHRoZSBBQ0sg Zm9yIHRoZSBiaW5kICovCisjaWZkZWYgREVCVUcKKyAgICBwcmludGYoICJrZXJtaXQ6IHgyNWJp bmQoKSB0cnlpbmcgdG8gZ2V0IGEgQklORF9BQ0tcbiIgKTsKKyNlbmRpZiAvKiBERUJVRyAqLwor ICAgIHJjID0gKHVsb25nKXgyNWdldG1zZyggZmQsIChOX25waV9jdGxfdCopYmluZF9hY2ssCisg ICAgICAgICAgICAoaW50KXNpemVvZiggTl9iaW5kX2Fja190ICksIChOX25waV9kYXRhX3QqKU5V TEwsIDAsICZnZXRfZmxhZ3MsCisgICAgICAgICAgICBOX0JJTkRfQUNLICk7CisKKyAgICAvKiB0 dXJuIHF1YW50aXRpdmUgcmV0dXJuIGNvZGUgaW50byBhIHF1YWxpdGF0aXZlIG9uZSAqLworICAg IGlmIChyYyA+IDApIHJjID0gMDsKKworICAgIC8qIGlmIGFsbCB3ZW50IHdlbGwsIGdldCB0aGUg dG9rZW4gZnJvbSB0aGUgYWNrbm93bGVkZ2VtZW50IHBhY2tldCAqLworICAgIGlmICgoYmluZF9m bGFncyAmIFRPS0VOX1JFUVVFU1QgKSAmJiAoIHJjID49IDApKSB7CisgICAgICAgIHJjID0gYmlu ZF9hY2stPlRPS0VOX3ZhbHVlOworICAgIH0KKworICAgIC8qIGZyZWUgdXAgdGhlIG1lbW9yeSB3 ZSBhbGxvY2F0ZWQgZWFybGllciAqLworICAgIGZyZWUoYmluZF9yZXEpOworICAgIGZyZWUoYmlu ZF9hY2spOworCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjVi aW5kXG4iICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIHJldHVybiggcmMgKTsKK30KKwor LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisqIEZ1bmN0aW9uOiB4MjVjYWxsCisqIERlc2NyaXB0aW9u OiAgVGhpcyByb3V0aW5lIGJ1aWxkcyBhbmQgc2VuZHMgYW4gTl9DT05OX1JFUSBwcmltaXRpdmUs IHRoZW4KKyogICAgICAgICAgICAgICBjaGVja3MgZm9yIGFuIE5fQ09OTl9DT04gcHJpbWl0aXZl IGluIHJldHVybi4KKyoKKyogUGFyYW1ldGVyczoKKyogZmQgICAgLSBmaWxlIGRlc2NyaXB0b3Ig b2Ygc3RyZWFtCisqIGNhZGRyIC0gY2FsbGVkIGFkZHJlc3MgKHJlbW90ZSBhZGRyZXNzKQorKgor KiBGdW5jdGlvbnMgUmVmZXJlbmNlZDoKKyogbWFsbG9jKCkKKyogYnplcm8oKQorKiBnZXRtc2co KQorKiBwdXRtc2coKQorKgorKiBSZXR1cm4gY29kZToKKyogMCAtIGlmIHN1Y2Nlc3NmdWwKKyog LTEgaWYgbm90IHN1Y2Nlc3NmdWwKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50Cit4MjVjYWxs KGZkLCByZW1vdGVfbnVhLCBjdWQpCisgICAgaW50IGZkOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogWDI1IGRldmljZSAob3BlbmVkKSAqLworICAgIGNoYXIgKiByZW1vdGVfbnVhOyAg ICAgICAgICAgICAgICAgIC8qIHJlbW90ZSBhZGRyZXNzIHRvIGNhbGwgKi8KKyAgICBjaGFyICog Y3VkOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVzZXIgZGF0YSAqLworLyogeDI1 Y2FsbCAqLyB7CisgICAgaW50IHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0 dXJuIGNvZGUgKi8KKyAgICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b25uZWN0aW9uIGZsYWdzICovCisgICAgaW50IGdldF9mbGFnczsgICAgICAgICAgICAgICAgICAg ICAgLyogcHJpb3JpdHkgZmxhZ3MgZm9yIGdldG1zZyAqLworICAgIHVsb25nIHR5cGU7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHByaW1pdGl2ZSB0eXBlICovCisgICAgTl9jb25uX3JlcV90 ICpjb25ucmVxX2N0bDsgICAgICAgICAgLyogcG9pbnRlciB0byBOX0NPTk5fUkVRIHByaW1pdGl2 ZSAqLworICAgIE5fbnBpX2RhdGFfdCAqY29ubnJlcV9kYXRhOyAgICAgICAgIC8qIHBvaW50ZXIg dG8gTl9DT05OX1JFUSBkYXRhIChDVUQpICovCisgICAgaW50IGNvbm5yZXFfZGF0YV9sZW47ICAg ICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGZpbGxlZCBkYXRhIGJ1ZmZlciAqLworICAgIE5fY29u bl9jb25fdCAqY29ubmNvbl9jdGw7ICAgICAgICAgIC8qIHBvaW50ZXIgdG8gTl9DT05OX0NPTiBw cmltaXRpdmUgKi8KKyAgICBOX25waV9kYXRhX3QgKmNvbm5jb25fZGF0YTsgICAgICAgICAvKiBw b2ludGVyIHRvIGFueSBkYXRhIGFzc29jaWF0ZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIHRoZSBOX0NPTk5fQ09OIHByaW1pdGl2ZSAqLworICAgIGNo YXIgKmFkZHRsX2luZm87ICAgICAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYWRkaXRpb25h bCBpbmZvIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IGZvciBOX0NPTk5fUkVRIHByaW1pdGl2ZSAqLworICAgIGludCBhZGRyX2xlbjsgICAgICAgICAg ICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBhZGRyZXNzICovCisKKyNpZmRlZiBUUkFDRQorICAg IHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjVjYWxsXG4iICk7CisjZW5kaWYgLyogVFJBQ0Ug Ki8KKworI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCAieDI1Y2FsbCggJWQsICVzIClcbiIsIGZk LCByZW1vdGVfbnVhICk7CisgICAgcHJpbnRmKCAiY29ubmVjdGluZyB0byAlcyBvbiBmZCAlZFxu IiwgcmVtb3RlX251YSwgZmQgKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgLyoKKyAgICAg KiBBbGxvY2F0ZSBhbmQgemVybyBvdXQgc3BhY2UgZm9yIHRoZSBOX0NPTk5fUkVRIHByaW1pdGl2 ZQorICAgICAqIHVzZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJpYyBOUEkgcHJpbWl0aXZlIGNvbnRy b2wgYnVmZmVyCisgICAgICovCisgICAgY29ubnJlcV9jdGwgID0gKE5fY29ubl9yZXFfdCAqKSBt YWxsb2Moc2l6ZW9mKE5fbnBpX2N0bF90KSk7CisgICAgaWYgKGNvbm5yZXFfY3RsID09IE5VTEwp eworICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1Y2FsbCgpOiBjb25ucmVxX2N0bCBtYWxsb2Mg ZmFpbGVkIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGJ6ZXJvKGNvbm5yZXFf Y3RsLHNpemVvZihOX25waV9jdGxfdCkpOworICAgIC8qCisgICAgICogQnVpbGQgdGhlIENvbm5l Y3Rpb24gUmVxdWVzdCBQcmltaXRpdmUKKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisgICAgY29u bnJlcV9jdGwtPlBSSU1fdHlwZSA9ICh1bG9uZykgTl9DT05OX1JFUTsKKworICAgIC8qIE5vdGUg dGhhdCB0aGUgYWRkcmVzcyBsZW5ndGggaXMgbmNoYWkrMSBhbmQgbm90IG4rMi4gVGhlIGxpbmUg bnVtYmVyCisgICAgICogaXMgb25seSBwYXNzZWQgd2l0aCB0aGUgYWRkcmVzcyBmb3IgdGhlIGJp bmQuIFRoZSBmaXJzdCBieXRlIG9mCisgICAgICogdGhlIGFkZHJlc3MgZm9yIHRoZSBOX0NPTk4g cHJpbWl0aXZlcyBjb250YWlucyB0aGUgWC4xMjEKKyAgICAgKiBhZGRyZXNzIHByZWZpeCwgd2hp Y2ggbXVzdCBiZSB6ZXJvLiBUaGUgcmVtYWluaW5nIGJ5dGVzIGFyZSB0aGUKKyAgICAgKiBhZGRy ZXNzIGl0c2VsZi4KKyAgICAgKi8KKyAgICBhZGRyX2xlbiA9IHN0cmxlbiggcmVtb3RlX251YSAp OworICAgIGNvbm5yZXFfY3RsLT5ERVNUX2xlbmd0aCA9ICh1bG9uZykgKGFkZHJfbGVuICsgMSk7 CisgICAgY29ubnJlcV9jdGwtPkRFU1Rfb2Zmc2V0ID0gKHVsb25nKSBzaXplb2YoTl9jb25uX3Jl cV90KTsKKyAgICAvKiBjb25ucmVxX2N0bC0+Q09OTl9mbGFncyA9ICh1bG9uZylFWF9EQVRBX09Q VCB8IFJFQ19DT05GX09QVDsgKi8KKyAgICBjb25ucmVxX2N0bC0+Q09OTl9mbGFncyA9ICh1bG9u ZykgMDsKKyAgICBjb25ucmVxX2N0bC0+UU9TX2xlbmd0aCA9ICh1bG9uZykgMDsgICAgICAgIC8q IHVuc3VwcG9ydGVkIGluIEFJWCA0LjEgKi8KKyAgICBjb25ucmVxX2N0bC0+UU9TX29mZnNldCA9 ICh1bG9uZykgMDsgICAgICAgIC8qIHVuc3VwcG9ydGVkIGluIEFJWCA0LjEgKi8KKworICAgIGFk ZHRsX2luZm8gPSAoY2hhciAqKSAoKHZvaWQqKWNvbm5yZXFfY3RsICsgY29ubnJlcV9jdGwtPkRF U1Rfb2Zmc2V0KTsKKyAgICAqYWRkdGxfaW5mbysrID0gKGNoYXIpIDA7IC8qIFguMTIxIGZvcm1h dCAqLworICAgIGJjb3B5KCByZW1vdGVfbnVhLCBhZGR0bF9pbmZvLCBhZGRyX2xlbiApOworCisg ICAgLyoKKyAgICAgKiBzZXR1cCB0aGUgZGF0YSBidWZmZXIgZm9yIHRoZSBjb25uZWN0aW9uIHJl cXVlc3QKKyAgICAgKi8KKyAgICBjb25ucmVxX2RhdGEgID0gKE5fbnBpX2RhdGFfdCAqKSBtYWxs b2Moc2l6ZW9mKE5fbnBpX2RhdGFfdCkpOworICAgIGlmIChjb25ucmVxX2RhdGEgPT0gTlVMTCl7 CisgICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVjYWxsKCk6IGNvbm5yZXFfZGF0YSBtYWxsb2Mg ZmFpbGVkIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGJ6ZXJvKGNvbm5yZXFf ZGF0YSxzaXplb2YoTl9ucGlfZGF0YV90KSk7CisKKyAgICAvKiBmYWNpbGl0eSBzZWxlY3Rpb24g bmVlZHMgdG8gYmUgcHV0IGluIHRoZSBmcm9udCBvZiBjb25ucmVxX2RhdGEgKi8KKyAgICBjb25u cmVxX2RhdGFfbGVuID0gMDsKKyAgICBjb25ucmVxX2RhdGFfbGVuICs9IHgyNWZhY2lsaXRpZXMo IChjaGFyICopY29ubnJlcV9kYXRhICk7CisgICAgaWYgKGN1ZCAmJiAqY3VkKSB7CisgICAgICAg IGJjb3B5KGN1ZCwKKyAgICAgICAgICAgICAgKGNoYXIgKikoKGNoYXIgKiljb25ucmVxX2RhdGEg KyBjb25ucmVxX2RhdGFfbGVuKSwKKyAgICAgICAgICAgICAgc3RybGVuKGN1ZCkKKyAgICAgICAg ICAgICAgKTsKKyAgICAgICAgY29ubnJlcV9kYXRhX2xlbiArPSBzdHJsZW4oIGN1ZCApOworICAg ICAgICB9CisKKyAgICAvKgorICAgICAqIENhbGwgcHV0bXNnKCkgdG8gcHV0IHRoZSBjb25uZWN0 aW9uIHJlcXVlc3QgbWVzc2FnZSBvbiB0aGUgc3RyZWFtCisgICAgICovCisgICAgcmMgPSB4MjVw dXRtc2coIGZkLCAoTl9ucGlfY3RsX3QqKWNvbm5yZXFfY3RsLCBjb25ucmVxX2RhdGEsCisgICAg ICAgICAgICBjb25ucmVxX2RhdGFfbGVuLCAmZmxhZ3MgKTsKKyAgICBpZiAocmMgPCAwKSB7Cisg ICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBhbmQg emVybyBvdXQgc3BhY2UgZm9yIHRoZSBOX0NPTk5fQ09OIHByaW1pdGl2ZQorICAgICAqLworICAg IGlmICgoY29ubmNvbl9jdGwgPSAoTl9jb25uX2Nvbl90ICopIG1hbGxvYyhzaXplb2YoTl9ucGlf Y3RsX3QpKSkgPT0gTlVMTCkgeworICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1Y2FsbCgpOiBj b25uY29uX2N0bCBtYWxsb2MgZmFpbGVkIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQor ICAgIGJ6ZXJvKGNvbm5jb25fY3RsLCBzaXplb2YoTl9ucGlfY3RsX3QpKTsKKworICAgIC8qCisg ICAgICogQWxsb2NhdGUgYW5kIHplcm8gb3V0IHNwYWNlIGZvciBhbnkgZGF0YSBhc3NvY2lhdGVk IHdpdGggTl9DT05OX0NPTgorICAgICAqLworICAgIGlmICggKGNvbm5jb25fZGF0YSA9IChOX25w aV9kYXRhX3QgKikgbWFsbG9jKE5QSV9NQVhfREFUQSkpID09IE5VTEwpIHsKKyAgICAgICAgcGVy cm9yKCJrZXJtaXQ6IHgyNWNhbGwoKTogY29ubmNvbl9kYXRhIG1hbGxvYyBmYWlsZWQiKTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgYnplcm8oY29ubmNvbl9kYXRhLCBOUElfTUFY X0RBVEEpOworCisgICAgLyogSW5pdGlhbGl6ZSBhbmQgYnVpbGQgdGhlIHN0cnVjdHVyZXMgZm9y IGdldG1zZyAqLworICAgIGdldF9mbGFncz0wOworCisgICAgcmMgPSB4MjVnZXRtc2coIGZkLCAo Tl9ucGlfY3RsX3QqKWNvbm5jb25fY3RsLCAoaW50KXNpemVvZiggTl9jb25uX2Nvbl90ICksCisg ICAgICAgICAgICBjb25uY29uX2RhdGEsIE5QSV9NQVhfREFUQSwgJmdldF9mbGFncywgTl9DT05O X0NPTiApOworCisgICAgLyogdHVybiBxdWFudGl0aXZlIHJldHVybiBjb2RlIGludG8gYSBxdWFs aXRhdGl2ZSBvbmUgKi8KKyAgICBpZiAocmMgPiAwKSByYyA9IDA7CisKKyAgICAvKiBGcmVlIHRo ZSBzcGFjZSB0aGF0IHdlIG5vIGxvbmdlciBuZWVkICovCisgICAgaWYgKGNvbm5yZXFfY3RsKSB7 IGZyZWUoY29ubnJlcV9jdGwpOyBjb25ucmVxX2N0bCA9IE5VTEw7IH0KKyAgICBpZiAoY29ubmNv bl9jdGwpIHsgZnJlZShjb25uY29uX2N0bCk7IGNvbm5jb25fY3RsID0gTlVMTDsgfQorICAgIGlm IChjb25uY29uX2RhdGEpIHsgZnJlZShjb25uY29uX2RhdGEpOyBjb25uY29uX2RhdGEgPSBOVUxM OyB9CisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNWNhbGxc biIgKTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgcmV0dXJuKHJjKTsKK30KKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbjogeDI1Z2V0Y2FsbAorICoKKyAqIERlc2NyaXB0 aW9uOiBUaGlzIHJvdXRpbmUgY2hlY2tzIGZvciBhbiBpbmNvbW1pbmcgY2FsbCwgdmVyaWZpZWQK KyAqIHRoYXQgaXQgaXMgYSBDT05OSU5EIChjb25uZWN0aW9uIGluZGljYXRpb24pIG1lc3NhZ2Us IGFuZCB0aGVuCisgKiBhY2NlcHRzIHRoZSBjYWxsIGFuZCByZXR1cm5zIHRoZSBmaWxlIGRlc2Ny aXB0b3Igb2YgdGhlIG5ldyBzdHJlYW0KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogZmQgICAtIGZp bGUgZGVzY3JpcHRvciBvZiBsaXN0ZW5pbmcgc3RyZWFtCisgKgorICogUmV0dXJuIENvZGVzOgor ICogY2FsbGZkICAgICAgIC0gZmlsZSBkZXNjcmlwdG9yIG9mIGNvbm5lY3RlZCBpbmNvbW1pbmcg Y2FsbC4KKyAqICAgICAgICAgICAgICAtIHNldCB0byAtMSBpZiBhbiBlcnJvciBvY2N1cmVkCisg KgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworaW50Cit4MjVnZXRjYWxsKGZkKSBpbnQgZmQ7IHsK KyAgICBpbnQgeDI1Y2FsbGZkOyAgICAgICAgICAgICAgICAgICAgICAvKiBmZCBvZiBpbmNvbW1p bmcgY2FsbCAqLworICAgIE5fY29ubl9pbmRfdCAqY29ubmluZF9jdGw7ICAgICAgICAgIC8qIGNv bm5pbmQgY29udHJvbGwgYnVmZmVyICovCisgICAgTl9ucGlfZGF0YV90ICpjb25uaW5kX2RhdGE7 ICAgICAgICAgLyogY29ubmluZCBkYXRhIGJ1ZmZlciAqLworICAgIGludCBnZXRfZmxhZ3M7ICAg ICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzIGZvciBnZXRtc2cgKi8KKyAgICB1bG9uZyBmbGFn czsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uIGZsYWdzICovCisgICAgaW50 IHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGNvZGUgKi8KKworICAg IGV4dGVybiB4MjVhZGRyX3QgcmVtb3RlX251YTsgICAgICAgIC8qIHJlbW90ZSBYLjI1IGFkZHIg Z2xvYmFsIHZhciAqLworCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogZW50ZXJp bmcgeDI1Z2V0Y2FsbFxuIiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICAvKiBhbGxvY2F0 ZSBzcGFjZSBmb3IgY29ubmVjdGlvbiBpbmRpY2F0aW9uIGJ1ZmZlcnMgKi8KKyAgICBpZiAoKGNv bm5pbmRfY3RsID0gKE5fY29ubl9pbmRfdCAqKW1hbGxvYyhzaXplb2YoTl9ucGlfY3RsX3QpKSkg PT0gTlVMTCkgeworICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1Z2V0Y2FsbCgpOiBjb25uaW5k X2N0bCBtYWxsb2MgZmFpbGVkIik7CisgICAgICAgIHJldHVybiAoLTEpOworICAgIH0KKyAgICBi emVybyhjb25uaW5kX2N0bCwgc2l6ZW9mKE5fbnBpX2N0bF90KSk7CisKKyAgICBpZiAoKGNvbm5p bmRfZGF0YSA9IChOX25waV9kYXRhX3QgKiltYWxsb2MoTlBJX01BWF9EQVRBKSkgPT0gTlVMTCkg eworICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1Z2V0Y2FsbCgpOiBjb25uaW5kX2RhdGEgbWFs bG9jIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisgICAgYnplcm8oY29u bmluZF9kYXRhLCBOUElfTUFYX0RBVEEpOworCisgICAgLyogaW5pdGlhbGlzZSBjb250cm9sIHN0 cnVjdHVyZXMgKi8KKyAgICBnZXRfZmxhZ3MgPSAwOworCisgICAgLyogY2FsbCBnZXRtc2cgdG8g Y2hlY2sgZm9yIGEgY29ubmVjdGlvbiBpbmRpY2F0aW9uICovCisgICAgaWYgKHgyNWdldG1zZyhm ZCwKKyAgICAgICAgICAgICAgICAgIChOX25waV9jdGxfdCopY29ubmluZF9jdGwsCisgICAgICAg ICAgICAgICAgICAoaW50KXNpemVvZihOX2Nvbm5faW5kX3QpLAorICAgICAgICAgICAgICAgICAg Y29ubmluZF9kYXRhLAorICAgICAgICAgICAgICAgICAgTlBJX01BWF9EQVRBLAorICAgICAgICAg ICAgICAgICAgJmdldF9mbGFncywKKyAgICAgICAgICAgICAgICAgIE5fQ09OTl9JTkQKKyAgICAg ICAgICAgICAgICAgICkgPCAwKSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgcHJpbnRmKCAieDI1 Z2V0Y2FsbCgpOiBlcnJubyBpczogJWRcbiIsIGVycm5vICk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICAgICAgcGVycm9yICgieDI1Z2V0Y2FsbCgpOiBnZXRtc2cgZmFpbGVkIik7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorCisgICAgLyogYSBjb25uZWN0aW9uIGluZGljYXRpb24gd2Fz IHJlY2VpdmVkCisgICAgICogLSBwdWxsIGl0IHRvIGJpdHMgYW5kIGFuc3dlciB0aGUgY2FsbAor ICAgICAqLworICAgIHgyNXNlcW5vID0gY29ubmluZF9jdGwtPlNFUV9udW1iZXI7CisgICAgZmxh Z3MgPSBjb25uaW5kX2N0bC0+Q09OTl9mbGFnczsKKyNpZmRlZiBERUJVRworICAgIHByaW50Zigg InNldHRpbmcgcmVtb3RlX251YSB0byBhIG5ldyB2YWx1ZSBkdWUgdG8gaW5jb21taW5nIGNhbGxc biIgKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIC8qCisgICAgICogbm8gZ3VhcmFudGVlIHRo YXQgdGhlIGFkZHJlc3MgaXMgbnVsbCB0ZXJtaW5hdGVkLCBlbnN1cmUgdGhhdAorICAgICAqIGFm dGVyIGNvcHlpbmcgdGhhdCBpdCBpcyAoYXNzdW1wdGlvbjogcmVtb3RlX251YSBpcyBsb25nZXIg dGhhbgorICAgICAqIHRoZSBhZGRyZXNzICsgMSkKKyAgICAgKi8KKyAgICBiemVybyhyZW1vdGVf bnVhLCBzaXplb2YocmVtb3RlX251YSkpOworICAgIC8qIG5vdGU6IGNvbm5pbmRfY3RsIGNvbnRh aW5zIGEgeDEyMSBhZGRyZXNzLCB3aGljaCBoYXMgYSBudWxsIGFzCisgICAgICogdGhlIEZJUlNU IGNoYXJhY3RlciAtIHN0cmlwIGl0IG9mZiEKKyAgICAgKi8KKyAgICBja3N0cm5jcHkocmVtb3Rl X251YSwKKyAgICAgICAgICAgIChjaGFyKikoKGNoYXIqKWNvbm5pbmRfY3RsICsgY29ubmluZF9j dGwtPlNSQ19vZmZzZXQgKyAxKSwKKyAgICAgICAgICAgIGNvbm5pbmRfY3RsLT5TUkNfbGVuZ3Ro IC0gMQorICAgICAgICAgICAgKTsKKyNpZmRlZiBERUJVRworICAgIHByaW50ZiggInJlbW90ZV9u dWEgc2V0IHRvIG5ldyB2YWx1ZSBvZiAlc1xuIiwgcmVtb3RlX251YSApOworI2VuZGlmIC8qIERF QlVHICovCisKKyAgICAvKiBlcnJvcnMgaGFuZGxlZCBieSBjYWxsZWUgKi8KKyAgICB4MjVjYWxs ZmQgPSB4MjVhY2NlcHQoeDI1c2Vxbm8sIGZsYWdzKTsKKworICAgIC8qIGZyZWUgdGhlIG1hbGxv YydkIGJ1ZmZlcnMgKi8KKyAgICBpZiAoY29ubmluZF9jdGwpIHsgZnJlZShjb25uaW5kX2N0bCk7 IGNvbm5pbmRfY3RsID0gTlVMTDsgfQorICAgIGlmIChjb25uaW5kX2RhdGEpIHsgZnJlZShjb25u aW5kX2RhdGEpOyBjb25uaW5kX2RhdGEgPSBOVUxMOyB9CisKKyNpZmRlZiBUUkFDRQorICAgIHBy aW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNWdldGNhbGxcbiIgKTsKKyNlbmRpZiAvKiBUUkFDRSAq LworCisgICAgLyogcmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgKG9yIGVycm9yIGlmIDwgMCkg Ki8KKyAgICByZXR1cm4oIHgyNWNhbGxmZCApOworfQorCisvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqIEZ1bmN0aW9uOiB4MjVhY2NlcHQKKyAqCisgKiBEZXNjcmlwdGlvbjogYWNjZXB0IGFuIGlu Y29tbWluZyBjYWxsCisgKiAgICAgICAgICAgICAgVGhpcyBlc3NlbnRpYWxseSBtZWFucyBvcGVu aW5nIGEgbmV3IFNUUkVBTSBhbmQgc2VuZGluZworICogICAgICAgICAgICAgIGFuIGFja25vd2xl ZGdlIGJhY2sgdG8gdGhlIGNhbGxlci4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICAgICBzZXFu byAgIC0gc2VxdWVuY2UgbnVtYmVyIGZvciBhY2tub3dsZWRnZW1lbnQKKyAqICAgICAgZmxhZ3Mg ICAtIGZsYWdzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyCisgKgorICogUmV0dXJuIENvZGVz OgorICogICAgICBmZCAgICAgIC0gZmlsZSBkZXNjcmlwdG9yIG9mIG5ldyBTVFJFQU0KKyAqICAg ICAgICAgICAgICAgIHNldCB0byAtMSBpZiBhbiBlcnJvciBvY2N1cmVkCisgKgorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLworaW50Cit4MjVhY2NlcHQoc2Vxbm8sZmxhZ3MpCisgICAgdWxvbmcgc2Vx bm87ICAgICAgICAgICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbiBzZXF1ZW5jZSBudW1iZXIg Ki8KKyAgICB1bG9uZyBmbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9u IGZsYWdzICovCisvKiB4MjVhY2NlcHQgKi8geworICAgIGludCB4MjVjYWxsZmQ7ICAgICAgICAg ICAgICAgICAgICAgIC8qIGZkIGZvciBpbmNvbW1pbmcgY2FsbCAqLworICAgIGludCBnZXRfZmxh Z3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW9yaXR5IGZsYWdzIGZvciBnZXRtc2cgKi8K KyAgICBpbnQgcHV0X2ZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAvKiBmbGFncyBmb3IgcHV0 bXNnLCBhbHdheXMgMCAqLworICAgIGludCBhZGRyX2xlbjsgICAgICAgICAgICAgICAgICAgICAg IC8qIGxlbmd0aCBvZiBsb2NhbCBhZGRyZXNzICovCisgICAgdWxvbmcgdG9rZW47ICAgICAgICAg ICAgICAgICAgICAgICAgLyogY29ubmVjdGlvbiB0b2tlbiAqLworICAgIE5fY29ubl9yZXNfdCAq Y29ubl9yZXM7ICAgICAgICAgICAgIC8qIE5fQ09OTl9SRVMgcHJpbWl0aXZlICovCisgICAgTl9v a19hY2tfdCAqb2tfYWNrOyAgICAgICAgICAgICAgICAgLyogTl9PS19BQ0sgcHJpbWl0aXZlICov CisgICAgY2hhciAqYWRkdGxfaW5mbzsgICAgICAgICAgICAgICAgICAgLyogdGVtcCBwb2ludGVy ICovCisgICAgaW50IHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5 IHJldHVybiBjb2RlICovCisKKy8qIGdsb2JhbCB2YXJpYWJsZXMgZnJvbSBja2NtYWkuYyAqLwor ICAgIGV4dGVybiBpbnQgcmV2Y2FsbCwgY2xvc2dyLCBjdWRhdGE7CisgICAgZXh0ZXJuIGNoYXIg dWRhdGFbXTsKKyAgICBleHRlcm4geDI1YWRkcl90IGxvY2FsX251YTsgICAgICAgICAvKiBsb2Nh bCBYLjI1IGFkZHJlc3MgKi8KKyAgICBleHRlcm4gY2hhciB4MjVuYW1lW107ICAgICAgICAgICAg ICAvKiB4MjUgZGV2aWNlIG5hbWUgKHN4MjVhMCkgKi8KKyAgICBleHRlcm4gY2hhciB4MjVkZXZb XTsgICAgICAgICAgICAgICAvKiB4MjUgZGV2aWNlIGZpbGUgL2Rldi94MjVwa3QgKi8KKyAgICBl eHRlcm4gaW50IHgyNXBvcnQ7ICAgICAgICAgICAgICAgICAvKiBsb2dpY2FsIHBvcnQgdG8gdXNl ICovCisgICAgdWxvbmcgYmluZF9mbGFncyA9IDA7ICAgICAgICAgICAgICAgLyogZmxhZ3MgZm9y IGJpbmRpbmcgdGhlIFgyNSBzdHJlYW0gKi8KKworI2lmZGVmIFRSQUNFCisgICAgcHJpbnRmKCAi VFJBQ0U6IGVudGVyaW5nIHgyNWFjY2VwdFxuIiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAg ICAvKiBvcGVuIGEgbmV3IHBhY2tldCBsZXZlbCBzdHJlYW0gKi8KKyAgICBpZiAoKHgyNWNhbGxm ZCA9IG9wZW4oeDI1ZGV2LCBPX1JEV1IpKSA8IDApIHsKKyAgICAgICAgcGVycm9yICgia2VybWl0 OiB4MjVhY2NlcHQoKTogWC4yNSBkZXZpY2Ugb3BlbiBlcnJvciIpOworICAgICAgICBkZWJ1ZyhG MTAxLCJ4MjVhY2NlcHQoKSBkZXZpY2Ugb3BlbiBlcnJvciIsIiIsZXJybm8pOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qIHB1c2ggdGhlIE5QSSBvbnRvIHRoZSBTVFJFQU0g Ki8KKyAgICBpZiAoaW9jdGwoeDI1Y2FsbGZkLElfUFVTSCwibnBpIikgPCAwKSB7CisgICAgICAg IHBlcnJvciggImtlcm1pdDogeDI1YWNjZXB0KCk6IGNvdWxkbid0IHB1c2ggbnBpIG9uIHRoZSBY MjUgc3RyZWFtIiApOworICAgICAgICBkZWJ1ZyhGMTAxLCJ4MjVhY2NlcHQgY2FuJ3QgcHVzaCBu cGkgb24gdGhlIFgyNSBzdHJlYW0iLCIiLGVycm5vKTsKKyAgICAgICAgcmV0dXJuICgtMSk7Cisg ICAgfQorCisgICAgLyogYmluZCBrZXJtaXQgc2VydmVyIHRvIHRoZSBsb2NhbCBYMjUgYWRkcmVz cyAqLworICAgIC8qIHRha2VuIGZyb20gL3Vzci9zYW1wbGVzL3N4MjUvbnBpL25waXNlcnZlci5j IChBSVggNCkgKi8KKyAgICBiaW5kX2ZsYWdzIHw9IFRPS0VOX1JFUVVFU1Q7CisgICAgdG9rZW4g PSB4MjViaW5kKHgyNWNhbGxmZCxsb2NhbF9udWEsKGNoYXIgKilOVUxMLDAsMCx4MjVwb3J0LGJp bmRfZmxhZ3MpOworICAgIGlmICh0b2tlbiA8IDApIHsKKyAgICAgICAgcHJpbnRmKCAia2VybWl0 OiB4MjVhY2NlcHQoKTogY291bGRuJ3QgYmluZCB0byBsb2NhbCBYMjUgYWRkcmVzc1xuIiApOwor ICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgLyog YWxsb2NhdGUgY29ubmVjdGlvbiByZXNwb25zZSBwcmltaXRpdmUgKi8KKyAgICBpZiAoKGNvbm5f cmVzID0gKE5fY29ubl9yZXNfdCAqKW1hbGxvYyggTlBJX01BWF9DVEwgKSkgPT0gTlVMTCkgewor ICAgICAgICBwZXJyb3IoImtlcm1pdDogeDI1YWNjZXB0KCk6IGNvbm5fcmVzIG1hbGxvYyBmYWls ZWQiKTsKKyAgICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICAgIGJ6ZXJvKChjaGFyICopY29u bl9yZXMsIE5QSV9NQVhfQ1RMKTsKKworICAgIC8qIHNldHVwIGNvbm5lY3Rpb24gcmVzcG9uc2Ug cHJpbWl0aXZlICovCisgICAgYWRkcl9sZW4gPSBzdHJsZW4oIGxvY2FsX251YSApOworICAgIGNv bm5fcmVzLT5QUklNX3R5cGUgPSAodWxvbmcpTl9DT05OX1JFUzsKKyAgICBjb25uX3Jlcy0+VE9L RU5fdmFsdWUgPSB0b2tlbjsKKyAgICAvKiBub3RlIGFkZHJlc3MgbGVuZ3RoIGlzIG4rMSB0byBh Y2NvbW9kYXRlIHRoZSBYLjEyMSBhZGRyZXNzIHByZWZpeCAqLworICAgIGNvbm5fcmVzLT5SRVNf bGVuZ3RoID0gKHVsb25nKShhZGRyX2xlbiArIDEpOworICAgIGNvbm5fcmVzLT5SRVNfb2Zmc2V0 ID0gKHVsb25nKXNpemVvZiggTl9jb25uX3Jlc190ICk7CisgICAgY29ubl9yZXMtPlNFUV9udW1i ZXIgPSBzZXFubzsKKyAgICBjb25uX3Jlcy0+Q09OTl9mbGFncyA9IDA7CisgICAgY29ubl9yZXMt PlFPU19sZW5ndGggPSAwOyAgICAgICAgICAgLyogdW5zdXBwb3J0ZWQgLSBtdXN0IGJlIDAgKCE/ KSAqLworICAgIGNvbm5fcmVzLT5RT1Nfb2Zmc2V0ID0gMDsKKworICAgIGFkZHRsX2luZm8gPSAo Y2hhciAqKSgoY2hhciAqKWNvbm5fcmVzICsgY29ubl9yZXMtPlJFU19vZmZzZXQpOworICAgICph ZGR0bF9pbmZvKysgPSAoY2hhcikwOyAgICAvKiBYLjEyMSBhZGRyZXNzIHByZWZpeCAqLworICAg IGJjb3B5KCBsb2NhbF9udWEsIGFkZHRsX2luZm8sIGFkZHJfbGVuICk7CisKKyAgICAvKgorICAg ICAqIHNlbmQgb2ZmIHRoZSBjb25uZWN0IHJlc3BvbnNlCisgICAgICovCisgICAgaWYgKHgyNXB1 dG1zZyh4MjVjYWxsZmQsCisgICAgICAgICAgICAgICAgICAoTl9ucGlfY3RsX3QqKWNvbm5fcmVz LAorICAgICAgICAgICAgICAgICAgKE5fbnBpX2RhdGFfdCAqKU5VTEwsCisgICAgICAgICAgICAg ICAgICAwLAorICAgICAgICAgICAgICAgICAgJnB1dF9mbGFncworICAgICAgICAgICAgICAgICAg KSA8IDAgKSB7CisgICAgICAgIHBlcnJvcigia2VybWl0OiB4MjVhY2NlcHQoKTogcHV0bXNnIGNv bm5lY3QgcmVzcG9uc2UgZmFpbGVkIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisg ICAgLyoKKyAgICAgKiBBbGxvY2F0ZSBhbmQgemVybyBvdXQgc3BhY2UgZm9yIHRoZSBPS19BQ0sg cHJpbWl0aXZlCisgICAgICovCisgICAgaWYgKChva19hY2sgPSAoTl9va19hY2tfdCAqKSBtYWxs b2Moc2l6ZW9mKE5fbnBpX2N0bF90KSkpID09IE5VTEwpIHsKKyAgICAgICAgcGVycm9yKCJrZXJt aXQ6IHgyNWNhbGwoKTogb2tfYWNrIG1hbGxvYyBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuKC0x KTsKKyAgICB9CisgICAgYnplcm8ob2tfYWNrLCBzaXplb2YoTl9ucGlfY3RsX3QpKTsKKworICAg IC8qIEluaXRpYWxpemUgYW5kIGJ1aWxkIHRoZSBzdHJ1Y3R1cmVzIGZvciBnZXRtc2cgKi8KKyAg ICBnZXRfZmxhZ3M9MDsKKworICAgIHJjID0gKGludCl4MjVnZXRtc2coeDI1Y2FsbGZkLAorICAg ICAgICAgICAgICAgICAgICAgICAgKE5fbnBpX2N0bF90Kilva19hY2ssCisgICAgICAgICAgICAg ICAgICAgICAgICAoaW50KXNpemVvZihOX29rX2Fja190KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIChOX25waV9kYXRhX3QqKU5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgJmdldF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAg IE5fT0tfQUNLCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIGlmIChyYyA9PSAwKSB7 CisgICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciBpcyBvbmx5IGZvciBkaXNjb25uZWN0aW5nIHdo ZW4gbm90IGNvbm5lY3RlZCAhPyAqLworICAgICAgICB4MjVzZXFubyA9IDA7CisgICAgfQorCisg ICAgLyogZnJlZSB1cCBtYWxsb2MnZWQgYnVmZmVyIHNwYWNlICovCisgICAgaWYgKGNvbm5fcmVz KSB7IGZyZWUoY29ubl9yZXMpOyBjb25uX3JlcyA9IE5VTEw7IH0KKyAgICBpZiAob2tfYWNrKSB7 IGZyZWUob2tfYWNrKTsgb2tfYWNrID0gTlVMTDsgfQorCisjaWZkZWYgVFJBQ0UKKyAgICBwcmlu dGYoICJUUkFDRTogbGVhdmluZyB4MjVhY2NlcHRcbiIgKTsKKyNlbmRpZiAvKiBUUkFDRSAqLwor CisgICAgcmV0dXJuKCAoIHJjID49IDAgKSA/IHgyNWNhbGxmZCA6IC0xICk7Cit9CisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICogRnVuY3Rpb246IHgyNXVuYmluZAorICoKKyAqIERlc2NyaXB0 aW9uOiAgVGhpcyBzdWJyb3V0aW5lIGJ1aWxkcyBhbmQgc2VuZHMgYW4gdW5iaW5kIHJlcXVlc3Qg YW5kIGdldHMKKyAqIHRoZSBhY2tub3dsZWRnZW1lbnQgZm9yIGl0LgorICoKKyAqIFBhcmFtZXRl cnM6CisgKiBmZCAtIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgc3RyZWFtCisgKgorICogRnVuY3Rp b25zIFJlZmVyZW5jZWQ6CisgKiBnZXRtc2coKQorICogcHV0bXNnKCkKKyAqIG1hbGxvYygpCisg KiBiemVybygpCisgKgorICogUmV0dXJuIGNvZGU6CisgKiAwIC0gaWYgc3VjY2Vzc2Z1bAorICog LTEgLSBpZiBub3Qgc3VjY2Vzc2Z1bAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50Cit4MjV1 bmJpbmQoZmQpIGludCBmZDsgeyAgICAgICAgICAgICAgICAgLyogWDI1IGRldmljZSAob3BlbmVk KSAqLworICAgIGludCByYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBj b2RlICovCisgICAgaW50IGZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmluZCBm bGFncyAqLworICAgIGludCBnZXRfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8qIHByaW9y aXR5IGZsYWcgZm9yIGdldG1zZyAqLworICAgIHVsb25nIHR5cGU7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHByaW1pdGl2ZSB0eXBlICovCisgICAgTl91bmJpbmRfcmVxX3QgKnVuYmluZF9y ZXE7ICAgICAgICAgLyogcG9pbnRlciB0byBOX1VOQklORF9SRVEgKi8KKyAgICBOX29rX2Fja190 ICpva19hY2s7ICAgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIE5fT0tfQUNLICovCisKKyNp ZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjV1bmJpbmRcbiIgKTsK KyNlbmRpZiAvKiBUUkFDRSAqLworCisjaWZkZWYgREVCVUcKKyAgICAvKiBwcmludGYoICJ4MjV1 bmJpbmQoICVkIClcbiIsIGZkICk7ICovCisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBkZWJ1ZyhG MTAxLCJ4MjV1bmJpbmQgY2xvc2luZyB4MjUgY29ubmVjdGlvbiAjIiwiIixmZCk7CisKKyAgICAv KiBBbGxvY2F0ZSBhbmQgemVybyBvdXQgc3BhY2UgdG8gaG9sZCB0aGUgTl9VTkJJTkRfUkVRIHBy aW1pdGl2ZSAqLworICAgIHVuYmluZF9yZXEgPSAoTl91bmJpbmRfcmVxX3QgKikgbWFsbG9jKHNp emVvZihOX25waV9jdGxfdCkpOworICAgIGlmICh1bmJpbmRfcmVxID09IE5VTEwpIHsKKyAgICAg ICAgcGVycm9yKCJrZXJtaXQ6IHgyNXVuYmluZCgpOiB1bmJpbmRfcmVxIG1hbGxvYyBmYWlsZWQi KTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgYnplcm8odW5iaW5kX3JlcSwgc2l6 ZW9mKE5fbnBpX2N0bF90KSk7CisKKyAgICAvKgorICAgICAqIEJ1aWxkIHRoZSBVbmJpbmQgUmVx dWVzdCBQcmltaXRpdmUKKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisgICAgdW5iaW5kX3JlcS0+ UFJJTV90eXBlID0gKHVsb25nKSBOX1VOQklORF9SRVE7CisKKyAgICAvKgorICAgICAqIENhbGwg cHV0bXNnKCkgdG8gcHV0IHRoZSBiaW5kIHJlcXVlc3QgbWVzc2FnZSBvbiB0aGUgc3RyZWFtCisg ICAgICovCisgICAgaWYgKHgyNXB1dG1zZyhmZCwKKyAgICAgICAgICAgICAgICAgIChOX25waV9j dGxfdCopdW5iaW5kX3JlcSwKKyAgICAgICAgICAgICAgICAgIChOX25waV9kYXRhX3QgKilOVUxM LAorICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICZmbGFncworICAgICAg ICAgICAgICAgICAgKSA8IDApIHsKKyAgICAgICAgcGVycm9yICgia2VybWl0OiB4MjV1bmJpbmQo KTogcHV0bXNnIGZhaWxlZCIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIC8q IEFsbG9jYXRlIGFuZCBaZXJvIG91dCBzcGFjZSBmb3IgdGhlIE5fT0tfQUNLIHByaW1pdGl2ZSAq LworICAgIG9rX2FjayA9IChOX29rX2Fja190ICopIG1hbGxvYyhzaXplb2YoTl9ucGlfY3RsX3Qp KTsKKyAgICBpZiAob2tfYWNrID09IE5VTEwpIHsKKyAgICAgICAgcGVycm9yKCJrZXJtaXQgeDI1 dW5iaW5kKCk6IG9rX2FjayBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgYnplcm8ob2tfYWNrLCBzaXplb2YoTl9ucGlfY3RsX3QpKTsKKworICAgIC8q IEluaXRpYWxpemUgYW5kIGJ1aWxkIHRoZSBjb250cm9sIHN0cnVjdHVyZSBmb3IgZ2V0bXNnICov CisgICAgZ2V0X2ZsYWdzPTA7CisKKyAgICAvKiBDYWxsIGdldG1zZygpIHRvIGNoZWNrIGZvciBh biBhY2tub3dsZWRnZW1lbnQgKi8KKyAgICByYyA9IHgyNWdldG1zZyhmZCwKKyAgICAgICAgICAg ICAgICAgICAoTl9ucGlfY3RsX3QqKW9rX2FjaywKKyAgICAgICAgICAgICAgICAgICAoaW50KXNp emVvZihOX29rX2Fja190KSwKKyAgICAgICAgICAgICAgICAgICAoTl9ucGlfZGF0YV90KilOVUxM LAorICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgJmdldF9mbGFncywK KyAgICAgICAgICAgICAgICAgICBOX09LX0FDSworICAgICAgICAgICAgICAgICAgICk7CisgICAg aWYgKHJjIDwgMCkgeworICAgICAgICBwZXJyb3IgKCJrZXJtaXQ6IHgyNXVuYmluZDogZ2V0bXNn IGZhaWxlZCIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qIEZyZWUgdXAg dGhlIHNwYWNlIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgKi8KKyAgICBpZiAodW5iaW5kX3JlcSkg eyBmcmVlKHVuYmluZF9yZXEpOyB1bmJpbmRfcmVxID0gTlVMTDsgfQorICAgIGlmIChva19hY2sp IHsgZnJlZShva19hY2spOyBva19hY2sgPSBOVUxMOyB9CisKKyNpZmRlZiBUUkFDRQorICAgIHBy aW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNXVuYmluZFxuIiApOworI2VuZGlmIC8qIFRSQUNFICov CisKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rp b246IHgyNXhpbgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBSZWFkIG4gY2hhcmFjdGVy cyBmcm9tIFguMjUgY2lyY3VpdCBpbnRvIGJ1ZiAoQUlYIG9ubHkpCisgKgorICogUGFyYW1ldGVy czoKKyAqICAgICAgZGF0YV9idWZfbGVuICAgIG1heGltdW0gc2l6ZSBvZiBkYXRhIGJ1ZmZlcgor ICogICAgICBkYXRhX2J1ZiAgICAgICAgcG9pbnRlciB0byBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBz cGFjZQorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqICAgICAgdGhlIG51bWJlciBvZiBjaGFyYWN0 ZXJzIGFjdHVhbGx5IHJlYWQKKyAqLworaW50Cit4MjV4aW4oZGF0YV9idWZfbGVuLGRhdGFfYnVm KSBpbnQgZGF0YV9idWZfbGVuOyBDSEFSICpkYXRhX2J1ZjsgeworICAgIHN0cnVjdCBzdHJidWYg Z2V0bXNnX2N0bDsgICAgICAgICAgIC8qIHN0cmVhbXMgY29udHJvbCBzdHJ1Y3R1cmUgKi8KKyAg ICBzdHJ1Y3Qgc3RyYnVmIGdldG1zZ19kYXRhOyAgICAgICAgICAvKiBzdHJlYW1zIGRhdGEgc3Ry dWN0dXJlICovCisgICAgaW50IHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmV0 dXJuIGNvZGUgKi8KKyAgICBpbnQgZ2V0bXNnX2ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiBw YWNrZXQgcHJpb3JpdHkgZmxhZ3MgKi8KKyAgICBjaGFyICogY3RsX2J1ZjsgICAgICAgICAgICAg ICAgICAgICAvKiBucGkgY29udHJvbCBidWZmZXIgKi8KKyAgICBOX25waV9jdGxfdCAqIHJlc3Vs dDsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHNpbXBsaWZ5IHN3aXRjaCgpICovCisKKyNp ZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjV4aW5cbiIgKTsKKyNl bmRpZiAvKiBUUkFDRSAqLworCisgICAgLyogZW5zdXJlIHRoYXQgbm8gbWF4aW11bSdzIGFyZSBv dmVycmlkZGVuICovCisgICAgZGF0YV9idWZfbGVuID0gKE5QSV9NQVhfREFUQSA8IGRhdGFfYnVm X2xlbikgPyBOUElfTUFYX0RBVEEgOiBkYXRhX2J1Zl9sZW47CisKKyAgICAvKiBhbGxvY2F0ZSBz cGFjZSBmb3IgcGFja2V0IGNvbnRyb2wgaW5mbyAqLworICAgIGlmICgoY3RsX2J1ZiA9IChjaGFy ICopbWFsbG9jKE5QSV9NQVhfQ1RMKSkgPT0gTlVMTCkgeworICAgICAgICBwZXJyb3IoICJrZXJt aXQ6IHgyNXhpbigpOiBjdGxfYnVmIG1hbGxvYyIgKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICB9CisjaWZkZWYgQ09NTUVOVAorICAgIC8qIHJpZWhtOiBuZWVkIHplcm9lZCBidWZmZXIgZm9y IGdldG1zZz8gKi8KKyAgICBiemVybyggY3RsX2J1ZiwgTlBJX01BWF9DVEwgKTsKKyAgICAvKiBj bGVhciBkYXRhIGJ1ZmZlciAqLworICAgIGJ6ZXJvKCBkYXRhX2J1ZiwgZGF0YV9idWZfbGVuICk7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgZ2V0bXNnX2ZsYWdzID0gMDsgICAgICAgICAg ICAgICAgICAgLyogZ2V0IHRoZSBmaXJzdCBwYWNrZXQgYXZhaWxhYmxlICovCisKKyAgICByYyA9 IHgyNWdldG1zZyh0dHlmZCwKKyAgICAgICAgICAgICAgICAgICBjdGxfYnVmLAorICAgICAgICAg ICAgICAgICAgIE5QSV9NQVhfQ1RMLAorICAgICAgICAgICAgICAgICAgIGRhdGFfYnVmLAorICAg ICAgICAgICAgICAgICAgIGRhdGFfYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAmZ2V0bXNn X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgIE5fREFUQV9JTkQKKyAgICAgICAgICAgICAgICAg ICApOworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgIGlmIChyYyA+PSAwKSB7Cisg ICAgICAgIHByaW50ZiggImtlcm1pdDogeDI1eGluKCk6IGdvdCAiICk7CisgICAgICAgIHgyNWR1 bXBfZGF0YSggZGF0YV9idWYsIDAsIHJjICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRm KCAieDI1eGluKCk6IGF0dGVtcHQgdG8gZ2V0IGRhdGEgcmVzdWx0ZWQgaW4gYW4gZXJyb3JcbiIg KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAg ICAvKiBmcmVlIGJ1ZmZlcnMgKi8KKyAgICBpZiAoY3RsX2J1ZikgeyBmcmVlKGN0bF9idWYpOyBj dGxfYnVmID0gTlVMTDsgfQorCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogbGVh dmluZyB4MjV4aVxuIiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICByZXR1cm4ocmMpOwor fQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiB4MjV3cml0ZQorICoKKyAq IERlc2NyaXB0aW9uOgorICogICAgICB3cml0ZSBhIGJsb2NrIG9mIGNoYXJhY3RlcnMgdG8gdGhl IFgyNSBTVFJFQU0gKEFJWCkKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICAgICBmZCAgICAgICAg ICAgICAgZmlsZSBkZXNjcmlwdG9yIHRvIHdyaXRlIHRvCisgKiAgICAgIGRhdGFidWYgICAgICAg ICBidWZmZXIgY29udGFpbmluZyBkYXRhIHRvIHdyaXRlCisgKiAgICAgIGRhdGFidWZzaXplICAg ICAgICAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlciB0byB3cml0ZQorICoKKyAqIFJldHVybiBWYWx1 ZToKKyAqICAgICAgc2l6ZSAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkg dHJhbnNtaXR0ZWQKKyAqLworaW50Cit4MjV3cml0ZShmZCwgZGF0YWJ1ZiwgZGF0YWJ1ZnNpemUp CisgICAgaW50ICAgICAgICAgZmQ7ICAgICAgICAgICAgICAgICAgLyogWDI1IFNUUkVBTVMgZmls ZSBkZXNjcmlwdG9yICh0dHlmZCkgKi8KKyAgICBjaGFyICAgICAgICAqZGF0YWJ1ZjsgICAgICAg ICAgICAgICAvKiBidWZmZXIgdG8gd3JpdGUgKi8KKyAgICBpbnQgICAgICAgICBkYXRhYnVmc2l6 ZTsgICAgICAgICAgICAvKiBidWZmZXIgc2l6ZSAqLworLyogeDI1d3JpdGUgKi8geworICAgIE5f ZGF0YV9yZXFfdCAqZGF0YV9yZXFfY3RsOworICAgIGludCByYzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHJldHVybiBjb2RlIChzaXplIHRyYW5zbWl0dGVkKSAqLworICAgIGludCB3 cml0ZV9mbGFncyA9IDA7ICAgICAgICAgICAgICAgIC8qIGFsd2F5cyAwICE/ICovCisKKyNpZmRl ZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjV3cml0ZVxuIiApOworI2Vu ZGlmIC8qIFRSQUNFICovCisKKyAgICBpZiAoKGRhdGFfcmVxX2N0bCA9IChOX2RhdGFfcmVxX3Qg KiltYWxsb2MoTlBJX01BWF9DVEwpICkgPT0gTlVMTCkgeworICAgICAgICBwZXJyb3IoICJrZXJt aXQ6IHgyNXdyaXRlKCk6IGRhdGFfcmVxX2N0bCBtYWxsb2MiICk7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorICAgIGRhdGFfcmVxX2N0bC0+UFJJTV90eXBlID0gTl9EQVRBX1JFUTsKKyAg ICBkYXRhX3JlcV9jdGwtPkRBVEFfeGZlcl9mbGFncyA9IDA7CisKKyAgICAvKiByaWVobTogcG9z c2libGUgZXh0ZW5zaW9uCisgICAgICogcG9zc2libHkgbmVlZCB0byB0aGluayBhYm91dCBzcGxp dHRpbmcgdXAgdGhlIGRhdGEgYnVmZmVyCisgICAgICogaW50byBtdWx0aXBsZSBwYXJ0cyBpZiBk YXRhYnVmc2l6ZSA+IE5QSV9NQVhfREFUQQorICAgICAqLworCisjaWZkZWYgQ09NTUVOVAorI2lm ZGVmIERFQlVHCisgICAgcHJpbnRmKCAia2VybWl0OiB4MjV3cml0ZSgpOiB3cml0aW5nIGRhdGEg dG8geDI1IHN0cmVhbVxuIiApOworICAgIHByaW50ZiggIlx0ZGF0YTpcdCIgKTsKKyAgICB4MjVk dW1wX2RhdGEoZGF0YWJ1ZiwgMCwgZGF0YWJ1ZnNpemUpOworI2VuZGlmIC8qIERFQlVHICovCisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHJjID0geDI1cHV0bXNnKGZkLAorICAgICAgICAgICAg ICAgICAgIChOX25waV9jdGxfdCopZGF0YV9yZXFfY3RsLAorICAgICAgICAgICAgICAgICAgIChO X25waV9kYXRhX3QqKWRhdGFidWYsCisgICAgICAgICAgICAgICAgICAgZGF0YWJ1ZnNpemUsCisg ICAgICAgICAgICAgICAgICAgJndyaXRlX2ZsYWdzCisgICAgICAgICAgICAgICAgICAgKTsKKyAg ICBpZiAoZGF0YV9yZXEpIHsgZnJlZShkYXRhX3JlcV9jdGwpOyAgZGF0YV9yZXEgPSBOVUxMOyB9 CisKKyNpZmRlZiBUUkFDRQorICAgIHByaW50ZiggIlRSQUNFOiBsZWF2aW5nIHgyNXdyaXRlXG4i ICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIHJldHVybihyYyk7Cit9CisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogRnVuY3Rpb246IHgyNWxvY2FsX251YQorICoKKyAqIERlc2NyaXB0 aW9uOgorICogICAgICBUaGlzIHJvdXRpbmUgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgSUJNIGNv bXB1dGVycy4gSW4gb3JkZXIKKyAqICAgICAgdG8gc2V0IHVwIGEgY29ubmVjdGlvbiAoc2VlIHgy NWJpbmQoKSkgeW91IG5lZWQgdG8ga25vdyB0aGUKKyAqICAgICAgbG9jYWwgTlVBICh4MjUgYWRk cmVzcykuIFVuZm9ydHVuYXRlbHksIHlvdSBuZWVkIGFsbCB0aGlzIGNvZGUKKyAqICAgICAgdG8g ZmluZCB0aGF0IG91dCwgSSBqdXN0IGhvcGUgdGhpcyB3b3JrcyBmb3IgZXZlcnlvbmUgZWxzZSEK KyAqCisgKiBQYXJhbWV0ZXJzOgorICogICAgICBhIHByZS1hbGxvY2F0ZWQgY2hhcmFjdGVyIGJ1 ZmZlciwgbG9uZyBlbm91Z2ggdG8gaG9sZCBhbiBYLjI1IGFkZHJlc3MKKyAqICAgICAgYW5kIHRo ZSB0YWlsaW5nIG51bGwuCisgKgorICogUmV0dXJuIFZhbHVlOgorICogICAgICB0aGUgbGVuZ3Ro IG9mIHRoZSBhZGRyZXNzIHN0cmluZy4KKyAqICAgICAgMCA9IGVycm9yCisgKi8KK2ludAoreDI1 bG9jYWxfbnVhKGNoYXIgKmJ1ZikgeworICAgIHN0cnVjdCBDdUF0ICpyZXNwb25zZTsgICAgICAv KiBzdHJ1Y3R1cmUgdG8gZmlsbCB3aXRoIGluZm8gZnJvbSBPRE0gKi8KKyAgICBDTEFTU19TWU1C T0wgcmV0Q2xhc3M7ICAgICAgLyogT0RNIGNsYXNzICovCisgICAgY2hhciBxdWVyeVs2NF07ICAg ICAgICAgICAgIC8qIG9kbSBkYXRhYmFzZSBxdWVyeSAqLworICAgIGludCByYyA9IDA7ICAgICAg ICAgICAgICAgICAvKiByZXR1cm4gdmFsdWUgKGxlbmd0aCBvZiBsb2NhbCBOVUEpICovCisgICAg ZXh0ZXJuIGNoYXIgeDI1bmFtZVtdOyAgICAgIC8qIHgyNSBkZXZpY2UgbmFtZSAoc3gyNWEwKSAq LworCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1bG9jYWxf bnVhXG4iICk7CisjZW5kaWYgLyogVFJBQ0UgKi8KKworICAgIC8qIHNldCB1cCBxdWVyeSBzdHJp bmcgKi8KKyAgICBpZiAoeDI1bmFtZVswXSA9PSAnXDAnKSB7CisjaWZkZWYgREVCVUcKKyAgICAg ICAgcHJpbnRmKCAia2VybWl0OiB4MjVsb2NhbF9udWEoKTogTm8geDI1IGRldmljZSBzZXQsIHRy eWluZyBzeDI1YTBcbiIgKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICBzdHJjcHkoIHgy NW5hbWUsICJzeDI1YTAiICk7CisgICAgfQorICAgIGNrbWFrbXNnKHF1ZXJ5LCBzaXplb2YocXVl cnkpLCAibmFtZSBsaWtlICIseDI1bmFtZSwKKyAgICAgICAgICAgICAiIGFuZCBhdHRyaWJ1dGUg bGlrZSBsb2NhbF9udWEiKTsKKworICAgIC8qIGluaXRpYWxpc2UgT0RNIGRhdGFiYXNlICovCisg ICAgb2RtZXJybm8gPSAwOworICAgIGlmIChvZG1faW5pdGlhbGl6ZSgpID09IC0xKSB7CisgICAg ICAgIHByaW50ZiggIngyNWxvY2FsX251YSgpOiBjYW4ndCBpbml0aWFsaXplIE9ETSBkYXRhYmFz ZSIpOworICAgICAgICBzd2l0Y2ggKG9kbWVycm5vKSB7CisgICAgICAgICAgY2FzZSBPRE1JX0lO VkFMSURfUEFUSDoKKyAgICAgICAgICAgIHByaW50ZiggImludmFsaWQgcGF0aFxuIiApOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX01BTExPQ19FUlI6CisgICAgICAg ICAgICBwcmludGYoICJtYWxsb2MgZmFpbGVkXG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHJpbnRmKCAidW5rbm93biBlcnJvciAlZFxu UGxlYXNlIGNhbGwgSUJNXG4iLCBvZG1lcnJubyApOworICAgICAgICB9CisgICAgICAgIHJldHVy bihyYyk7CisgICAgfQorCisgICAgLyogb3BlbiB0aGUgQ3VBdCBjbGFzcyAqLworICAgIHJldENs YXNzID0gb2RtX29wZW5fY2xhc3MoQ3VBdF9DTEFTUyk7CisgICAgaWYgKCgoaW50KXJldENsYXNz KSA9PSAtMSkgeworICAgICAgICBwcmludGYoICJrZXJtaXQ6IHgyNWxvY2FsX251YSgpOiBjYW4n dCBvcGVuIEN1QXQgY2xhc3MgaW4gb2RtLiAiICk7CisgICAgICAgIHN3aXRjaCAob2RtZXJybm8p IHsKKyAgICAgICAgICBjYXNlIE9ETUlfQ0xBU1NfRE5FOgorICAgICAgICAgICAgcHJpbnRmKCAi Q3VBdCBjbGFzcyBkb2Vzbid0IGV4aXN0XG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIE9ETUlfQ0xBU1NfUEVSTVM6CisgICAgICAgICAgICBwcmludGYoICJwZXJtaXNz aW9uIHRvIEN1QXQgY2xhc3MgZmlsZSBkZW5pZWRcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgT0RNSV9NQUdJQ05PX0VSUjoKKyAgICAgICAgICAgIHByaW50ZiggIkN1 QXQgaXMgYW4gaW52YWxpZCBPRE0gb2JqZWN0IGNsYXNzXG4iICk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlIE9ETUlfT1BFTl9FUlI6CisgICAgICAgICAgICBwcmludGYoICJj YW5ub3Qgb3BlbiBDdUF0IGNsYXNzIC0gYW5kIGRvbid0IGtub3cgd2h5IVxuIiApOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX0lOVkFMSURfUEFUSDoKKyAgICAgICAg ICAgIHByaW50ZiggImludmFsaWQgcGF0aFxuIiApOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBPRE1JX1RPT01BTllDTEFTU0VTOgorICAgICAgICAgICAgcHJpbnRmKCAidG9v IG1hbnkgb2JqZWN0IGNsYXNzZXMgaGF2ZSBiZWVuIG9wZW5lZFxuIiApOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHByaW50ZiggInVua25vd24g ZXJyb3IgJWRcblBsZWFzZSBjYWxsIElCTVxuIiwgb2RtZXJybm8gKTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4ocmMpOworICAgIH0KKworI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCJyZXRD bGFzcz0gJWRcbiIsIHJldENsYXNzKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgcmVzcG9u c2UgPSAoc3RydWN0IEN1QXQgKilvZG1fZ2V0X2ZpcnN0KCByZXRDbGFzcywgcXVlcnksIE5VTEwg KTsKKyAgICBpZiAoKChpbnQpcmVzcG9uc2UpID09IC0xKSB7CisgICAgICAgIHByaW50ZiggImtl cm1pdDogeDI1bG9jYWxfbnVhKCk6IG9kbSBxdWVyeSBmYWlsZWQgIiApOworICAgICAgICBzd2l0 Y2ggKG9kbWVycm5vKSB7CisgICAgICAgICAgY2FzZSBPRE1JX0JBRF9DUklUOiAgICAgICAgICAg LyogUHJvZ3JhbW1pbmcgZXJyb3IgKi8KKyAgICAgICAgICAgIHByaW50ZiggImJhZCBzZWFyY2gg Y3JpdGVyaWFcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgT0RNSV9D TEFTU19ETkU6CisgICAgICAgICAgICBwcmludGYoICJDdUF0IGNsYXNzIGRvZXNuJ3QgZXhpc3Rc biIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgT0RNSV9DTEFTU19QRVJN UzoKKyAgICAgICAgICAgIHByaW50ZiggInBlcm1pc3Npb24gdG8gQ3VBdCBjbGFzcyBmaWxlIGRl bmllZFxuIiApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX0lOVEVS TkFMX0VSUjoKKyAgICAgICAgICAgIHByaW50Zigib2RtIGludGVybmFsIGVycm9yXG5QbGVhc2Ug Y29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3JcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgT0RNSV9JTlZBTElEX0NMWE46CisgICAgICAgICAgICBwcmludGYoIkN1QXQg aXMgaW52YWxpZCBvciBpbmNvbnNpc3RlbnQgb2RtIGNsYXNzIGNvbGxlY3Rpb25cbiIpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX0lOVkFMSURfUEFUSDoKKyAgICAg ICAgICAgIHByaW50ZiggImludmFsaWQgcGF0aFxuIiApOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBPRE1JX01BR0lDTk9fRVJSOgorICAgICAgICAgICAgcHJpbnRmKCAiQ3VB dCBpcyBhbiBpbnZhbGlkIE9ETSBvYmplY3QgY2xhc3NcbiIgKTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGNhc2UgT0RNSV9NQUxMT0NfRVJSOgorICAgICAgICAgICAgcHJpbnRmKCAi bWFsbG9jIGZhaWxlZFxuIiApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBP RE1JX09QRU5fRVJSOgorICAgICAgICAgICAgcHJpbnRmKCAiY2Fubm90IG9wZW4gQ3VBdCBjbGFz cyAtIGFuZCBkb24ndCBrbm93IHdoeSFcbiIgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgT0RNSV9UT09NQU5ZQ0xBU1NFUzoKKyAgICAgICAgICAgIHByaW50ZiggInRvbyBt YW55IG9iamVjdCBjbGFzc2VzIGhhdmUgYmVlbiBvcGVuZWRcbiIgKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwcmludGYoICJ1bmtub3duIGVy cm9yICVkXG5QbGVhc2UgY2FsbCBJQk1cbiIsIG9kbWVycm5vICk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuKHJjKTsKKyAgICB9CisKKyAgICAvKiBjaGVjayBmb3IgYSBtZWFuaW5nZnVsbCBy ZXNwb25zZSAqLworICAgIGlmIChyZXNwb25zZSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChyZXNw b25zZS0+dmFsdWUgIT0gTlVMTCkgeworICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcmVzcG9uc2Ut PnZhbHVlKTsKKyAgICAgICAgICAgIHJjID0gc3RybGVuKCBidWYgKTsKKyNpZmRlZiBERUJVRwor LyoKKyAgICAgICAgICAgIHByaW50ZiggImF0dHJpYnV0ZSBuYW1lIGlzOiAlc1xuIiwgKGNoYXIg KilyZXNwb25zZS0+YXR0cmlidXRlICk7CisgICAgICAgICAgICBwcmludGYoICJJIHRoaW5rIG15 IGFkZHJlc3MgaXMgJXNcbiIsIChjaGFyKilyZXNwb25zZS0+dmFsdWUgKTsKKyovCisjZW5kaWYg LyogREVCVUcgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZiggImtlcm1p dDogeDI1bG9jYWxfbnVhKCk6IGNvdWxkbid0IGZpbmQgdGhlIGxvY2FsIE5VQVxuIiApOworICAg ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChvZG1lcnJubykgeworICAgICAg ICAgIGNhc2UgT0RNSV9CQURfQ1JJVDoKKyAgICAgICAgICAgIHByaW50ZiggIkVycm9yOiBPRE1J X0JBRF9DUklUIC0gYmFkIGNyaXRlcmlhXG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIE9ETUlfQ0xBU1NfRE5FOgorICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9E TUlfQ0xBU1NfRE5FIC0gY2xhc3MgZG9lc24ndCBleGlzdFxuIiApOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBPRE1JX0NMQVNTX1BFUk1TOgorICAgICAgICAgICAgcHJpbnRm KCAiRXJyb3I6IE9ETUlfQ0xBU1NfUEVSTVMgLSBjbGFzcyBwZXJtaXNzaW9uc1xuIiApOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX0lOVEVSTkFMX0VSUjoKKyAgICAg ICAgICAgIHByaW50ZiggIkVycm9yOiBPRE1JX0lOVEVSTkFMX0VSUiAtIHBhbmljXG4iICk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfSU5WQUxJRF9DTFhOOgorICAg ICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfSU5WQUxJRF9DTFhOIC0gaW52YWxpZCBjb2xs ZWN0aW9uXG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIE9ETUlfSU5W QUxJRF9QQVRIOgorICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfSU5WQUxJRF9QQVRI IC0gaW52YWxpZCBwYXRoIC0gd2hhdCBwYXRoP1xuIiApOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBPRE1JX01BR0lDTk9fRVJSOgorICAgICAgICAgICAgcHJpbnRmKCAiRXJy b3I6IE9ETUlfTUFHSUNOT19FUlIgLSBpbnZhbGlkIG9iamVjdCBtYWdpY1xuIiApOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX01BTExPQ19FUlI6CisgICAgICAgICAg ICBwcmludGYoICJFcnJvcjogT0RNSV9NQUxMT0NfRVJSIC0gbWFsbG9jIGZhaWxlZFxuIiApOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX09QRU5fRVJSOgorICAgICAg ICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfT1BFTl9FUlIgLSBjYW5ub3Qgb3BlbiBjbGFzc1xu IiApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBPRE1JX1RPT01BTllDTEFT U0VTOgorICAgICAgICAgICAgcHJpbnRmKCAiRXJyb3I6IE9ETUlfVE9PTUFOWUNMQVNTRVMgLSB0 b28gbWFueSBjbGFzc2VzXG4iICk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgcHJpbnRmKCAiVW5rbm93biBlcnJvciFcbiIgKTsKKyAgICAgICAg fQorICAgICAgICByZXR1cm4ocmMpOworICAgIH0KKworICAgIC8qIGNsb3NlIHRoZSBkYXRhYmFz ZSBhZ2FpbiAqLworICAgIG9kbV9jbG9zZV9jbGFzcyggcmV0Q2xhc3MgKTsKKworICAgIC8qIGZv cmdldCBhYm91dCBPRE0gYWxsIHRvZ2V0aGVyICovCisgICAgb2RtX3Rlcm1pbmF0ZSgpOworCisj aWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogbGVhdmluZyB4MjVsb2NhbF9udWFcbiIg KTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgZGVidWcoRjExMCwgIngyNWxvY2FsX251YSBs b2NhbCBhZGRyZXNzIGlzICIsIGJ1ZiwgMCk7CisgICAgcmV0dXJuKHJjKTsKK30KKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKiBGdW5jdGlvbjogeDI1ZmFjaWxpdGllcworICoKKyAqIERlc2Ny aXB0aW9uOgorICogICAgICBidWlsZCB1cCB0aGUgZmFjaWxpdGllcyBkYXRhIHBhY2tldCBmb3Ig YSBjb25uZWN0aW9uIHJlcXVlc3QKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICAgICBhIHByZS1h bGxvY2F0ZWQgY2hhciBidWZmZXIsIG5vcm1hbGx5IE5QSV9NQVhfREFUQSBiaWcuCisgKgorICog UmV0dXJuIFZhbHVlOgorICogICAgICB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW5zZXJ0ZWQg aW50byB0aGUgYnVmZmVyCisgKi8KK2ludAoreDI1ZmFjaWxpdGllcyhidWZmZXIpIGNoYXIgKmJ1 ZmZlcjsgeworICAgIGV4dGVybiBpbnQgcmV2Y2FsbDsKKyAgICBleHRlcm4gaW50IGNsb3NncjsK KyAgICBjaGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZW1wIHBvaW50ZXIg Ki8KKyAgICBjaGFyICpzdGFydDsgICAgICAgICAgICAgICAgICAgICAgICAvKiB0ZW1wIHBvaW50 ZXIgKi8KKworI2lmZGVmIFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6IGVudGVyaW5nIHgyNWZh Y2lsaXRpZXNcbiIgKTsKKyNlbmRpZiAvKiBUUkFDRSAqLworCisgICAgcCA9IGJ1ZmZlciArIDE7 CisgICAgc3RhcnQgPSBwOworCisjaWZkZWYgREVCVUcKKyAgICBwcmludGYoICJrZXJtaXQ6IHgy NWZhY2lsaXRpZXMoKTogZ2V0dGluZyBYMjUgZmFjaWxpdGllc1xuIiApOworI2VuZGlmIC8qIERF QlVHICovCisKKyAgICBpZiAocmV2Y2FsbCAhPSAwKSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAg cHJpbnRmKCJyZXZlcnNlIGNoYXJnZTogJWRcbiIsIHJldmNhbGwgKTsKKyNlbmRpZiAvKiBERUJV RyAqLworICAgICAgICAqKytwID0gMHgwMTsKKyAgICAgICAgKisrcCA9IHJldmNhbGw7CisgICAg fQorICAgIGlmIChjbG9zZ3IgPiAwKSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgcHJpbnRmKCJj bG9zZWQgdXNlciBncm91cDogJWRcbiIsIGNsb3NnciApOworI2VuZGlmIC8qIERFQlVHICovCisg ICAgICAgICorK3AgPSAweDAzOworICAgICAgICAqKytwID0gY2xvc2dyOworICAgIH0KKworI2lm ZGVmIERFQlVHCisgICAgaWYgKHAgPT0gc3RhcnQpIHsKKyAgICAgICAgcHJpbnRmKCAibm8gZmFj aWxpdGllc1xuIiApOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgLyogc2V0IHRo ZSBzaXplIG9mIHRoZSBmYWNpbGl0aWVzIGJ1ZmZlciAqLworICAgICpidWZmZXIgPSAoY2hhciko IHAgLSBzdGFydCApICYgMHhmZjsKKworI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCAia2VybWl0 OiB4MjVmYWNpbGl0aWVzKCk6IHJldHVybmluZyAlZFxuIiwgKGludCkocCAtIGJ1ZmZlcikgICk7 CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6 IGxlYXZpbmcgeDI1ZmFjaWxpdGllc1xuIiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICAv KiByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGZhY2lsaXRpZXMgd2l0aCBzaXplIGJ5dGUgKi8KKyAg ICAvKiAxID09IG5vIGZhY2lsaXRpZXMsIDAgYnl0ZSByZXR1cm5lZCBhcyBmYWNpbGl0aWVzIHNp emUgKi8KKyAgICByZXR1cm4oIChpbnQpKHAgLSBidWZmZXIpICk7Cit9CisKKy8qCisgKiByZXNl dCB0aGUgY29ubmVjdGlvbgorICovCitpbnQKK3gyNXJlc2V0KGNhdXNlLCBkaWFnbikgY2hhciBj YXVzZTsgY2hhciBkaWFnbjsgeworICAgIC8qIG5vdCBpbXBsZW1lbnRlZCAqLworCisjaWZkZWYg VFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogZW50ZXJpbmcgeDI1cmVzZXRcbiIgKTsKKyNlbmRp ZiAvKiBUUkFDRSAqLworCisjaWZkZWYgVFJBQ0UKKyAgICBwcmludGYoICJUUkFDRTogbGVhdmlu ZyB4MjVyZXNldFxuIiApOworI2VuZGlmIC8qIFRSQUNFICovCisKKyAgICByZXR1cm4oMCk7Cit9 CisKKy8qCisgKiBjbGVhciB0aGUgeDI1IGNvbm5lY3Rpb24gLSBpZTogaGFuZyB1cAorICovCitp bnQKK3gyNWNsZWFyKCkgeworICAgIGludCBnZXRfZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAg IC8qIHByaW9yaXR5IGZsYWcgZm9yIGdldG1zZyAqLworICAgIGludCBwdXRfZmxhZ3MgPSAwOyAg ICAgICAgICAgICAgICAgIC8qIHNlbmQgZmxhZ3MsIGFsd2F5cyAwICovCisgICAgdWxvbmcgdHlw ZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbWl0aXZlIHR5cGUgKi8KKyAgICBOX2Rp c2Nvbl9yZXFfdCAqZGlzY29uX3JlcTsgICAgICAgICAvKiBwb2ludGVyIHRvIE5fRElTQ09OX1JF USAqLworICAgIE5fZGlzY29uX2luZF90ICpkaXNjb25faW5kOyAgICAgICAgIC8qIHBvaW50ZXIg dG8gTl9ESVNDT05fSU5EICovCisgICAgTl9ucGlfZGF0YV90ICpkaXNjb25fZGF0YTsgICAgICAg ICAgLyogcG9pbnRlciB0byBOX0RJU0NPTl9JTkQgZGF0YSAqLworICAgIGludCByYyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCisKKyNpZmRlZiBUUkFDRQor ICAgIHByaW50ZiggIlRSQUNFOiBlbnRlcmluZyB4MjVjbGVhclxuIiApOworI2VuZGlmIC8qIFRS QUNFICovCisKKyNpZmRlZiBERUJVRworICAgIC8qIHByaW50ZiggIngyNWNsZWFyKCk6IGNoZWNr aW5nIGxhc3QgbXNnOiAlc1xuIiwgeDI1cHJpbSh4MjVsYXN0bXNnKSk7ICovCisjZW5kaWYgLyog REVCVUcgKi8KKworICAgIC8qCisgICAgKiBUaGUgZm9sbG93aW5nIGNoZWNrcyBhcmUgdXNlZCB0 byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBkaXNjb25uZWN0CisgICAgKiBvciB1bmJpbmQgdHdpY2Ug LSB0aGlzIHNlZW1zIHRvIHRocm93IHRoZSBOUEkgaW50ZXJmYWNlIHJpZ2h0IG91dCBvZgorICAg ICoga2lsdGVyLgorICAgICovCisgICAgc3dpdGNoKHgyNWxhc3Rtc2cpIHsKKyAgICAgIGNhc2Ug Tl9CSU5EX0FDSzoKKyAgICAgIGNhc2UgTl9DT05OX0NPTjoKKyAgICAgIGNhc2UgTl9DT05OX1JF UToKKyAgICAgIGNhc2UgTl9EQVRBX1JFUToKKyAgICAgIGNhc2UgTl9EQVRBX0lORDoKKyAgICAg ICAgeworI2lmZGVmIERFQlVHCisgICAgICAgICAgICAvKiBwcmludGYoIngyNWNsZWFyKCk6IGFj dGl2ZWx5IGRpc2Nvbm5lY3RpbmdcbiIpOyAqLworI2VuZGlmIC8qIERFQlVHICovCisKKyAgICAg ICAgICAgICAgICBkaXNjb25fcmVxID0gKE5fZGlzY29uX3JlcV90ICopbWFsbG9jKE5QSV9NQVhf Q1RMKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlzY29uX3JlcSA9PSBOVUxMKSB7CisgICAgICAg ICAgICAgICAgICAgIHBlcnJvcigia2VybWl0IHgyNWNsZWFyKCk6IGRpc2Nvbl9yZXEgbWFsbG9j IGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoLCB0cnkgdG8g dW5iaW5kIHRoZSBOUEkgYW55d2F5ICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgZGlzY29uX3JlcS0+UFJJTV90eXBlID0gTl9ESVNDT05fUkVROworICAg ICAgICAgICAgICAgICAgICBkaXNjb25fcmVxLT5ESVNDT05fcmVhc29uID0gMDsgICAgICAvKiBu b3QgdXNlZCBieSBBSVggKi8KKyAgICAgICAgICAgICAgICAgICAgZGlzY29uX3JlcS0+UkVTX2xl bmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRpc2Nvbl9yZXEtPlJFU19vZmZzZXQgPSAo dWxvbmcpKHNpemVvZihOX2Rpc2Nvbl9yZXFfdCkpOworICAgICAgICAgICAgICAgICAgICBkaXNj b25fcmVxLT5TRVFfbnVtYmVyID0geDI1c2Vxbm87ICAvKiBnbG9iYWwgKi8KKworICAgICAgICAg ICAgICAgICAgICBpZiAoeDI1cHV0bXNnKHR0eWZkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChOX25waV9jdGxfdCopZGlzY29uX3JlcSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoTl9ucGlfZGF0YV90KilOVUxMLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnB1dF9m bGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBwZXJyb3IoIngyNXB1dG1zZyBmYWlsZWQgaW4geDI1Y2xlYXIoKSIp OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRpc2Nvbl9pbmQg PSAoTl9kaXNjb25faW5kX3QgKiltYWxsb2MoTlBJX01BWF9DVEwpOworICAgICAgICAgICAgICAg ICAgICBkaXNjb25fZGF0YSA9IChOX25waV9kYXRhX3QgKiltYWxsb2MoTlBJX01BWF9EQVRBKTsK KyAgICAgICAgICAgICAgICAgICAgaWYoKGRpc2Nvbl9pbmQgPT0gTlVMTCkgfHwgKGRpc2Nvbl9k YXRhID09IE5VTEwpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoIngyNWNsZWFy KCk6IGRpc2Nvbl9pbmQgbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAg ICAvKiBmYWxsdGhyb3VnaCwgdHJ5IHRvIHVuYmluZCB0aGUgTlBJIGFueXdheSAqLworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoeDI1Z2V0 bXNnKHR0eWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOX25waV9j dGxfdCopZGlzY29uX2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO UElfTUFYX0NUTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTl9ucGlf ZGF0YV90KilkaXNjb25fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOUElfTUFYX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdl dF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOX09LX0FDSwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwICkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBlcnJvcigieDI1Z2V0bXNnIGZhaWxlZCBpbiB4MjVjbGVhcigp Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2gsIHRyeSB0byB1 bmJpbmQgdGhlIE5QSSBhbnl3YXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoeDI1bGFzdG1zZyAhPSBOX1VOQklO RF9SRVEpIHsKKyAgICAgICAgcmMgPSB4MjV1bmJpbmQodHR5ZmQpOworICAgIH0KKworI2lmZGVm IFRSQUNFCisgICAgcHJpbnRmKCAiVFJBQ0U6IGxlYXZpbmcgeDI1Y2xlYXJcbiIgKTsKKyNlbmRp ZiAvKiBUUkFDRSAqLworCisgICAgcmV0dXJuKHJjKTsKK30KKworI2lmZGVmIERFQlVHCisvKgor ICogb25seSBmb3IgZGVidWdnaW5nCisgKgorICogdHVybiB0aGUgaW50ZXJuYWwgcmVwcmVzZW50 YXRpb24gb2YgYSBkYXRhYmxvY2sgaW50byBzb21ldGhpbmcKKyAqIGhhbGYtd2F5IHJlYWRhYmxl LiBCZWNhdXNlIHRoZSBsZW5ndGggaXMga25vd24sIHdlIGNhbiBwcmludAorICogdGhlIHN0cmlu ZyBpbmNsdWRpbmcgbnVsbCdzIGV0YyAoaW1wb3J0YW50LCBiZWNhdXNlIHRoZSBmaXJzdCghKQor ICogYnl0ZSBvZiBhbiBYMTIxIGFkZHJlc3MgaXMgYSBudWxsISAoWDEyMSBhZGRyID09IDAgKyBY MjUgYWRkcikKKyAqLworeDI1ZHVtcF9kYXRhKGNoYXIgKmFkZHIsIHVsb25nIG9mZnNldCwgdWxv bmcgbGVuZ3RoKSB7CisgICAgY2hhciAqcHRyID0gYWRkciArIG9mZnNldDsKKyAgICB1bG9uZyBp ID0gbGVuZ3RoOworICAgIC8qIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGFsbCB1bnByaW50 YWJsZSBjaGFycyAqLworICAgIGNoYXIgKmJ1ZiA9IChjaGFyICopbWFsbG9jKCBsZW5ndGggKiA0 ICk7CisgICAgY2hhciAqYnB0ciA9IGJ1ZjsgICAvKiBwb2ludGVyIHRvIGN1cnJlbnQgcGxhY2Ug aW4gdGhlIHByaW50IGJ1ZmZlciAqLworCisgICAgd2hpbGUgKGkgPiAwKSB7CisgICAgICAgIGlm IChpc3ByaW50KCpwdHIpKSB7CisgICAgICAgICAgICAqYnB0cisrID0gKnB0cjsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICpicHRyKysgPSAnWyc7CisgICAgICAgICAgICBzdHJjcHko YnB0cixja2N0b3goKnB0ciwxKSk7IGJwdHIgKz0gMjsKKyAgICAgICAgICAgICpicHRyKysgPSAn XSc7CisgICAgICAgIH0KKyAgICAgICAgcHRyKys7CisgICAgICAgIGktLTsKKyAgICB9CisgICAg aWYgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgKmJwdHIgPSAnXDAnOworICAgICAgICBwcmludGYo ICIlcyIsIGJ1ZiApOworICAgIH0KKyAgICBwcmludGYoICIgKCVkKyVkKVxuIiwgb2Zmc2V0LCBs ZW5ndGggKTsKKworICAgIGlmIChidWYpIHsgZnJlZShidWYpOyBidWYgPSBOVUxMOyB9CisgICAg cmV0dXJuOworfQorCisvKgorICogb25seSBmb3IgZGVidWdnaW5nCisgKiBwcmludCBhcyBtdWNo IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhY2tldCBhcyBwb3NzaWJsZQorICovCit4MjVk dW1wX3ByaW0ocHJpbWl0aXZlKSAgICBOX25waV9jdGxfdCAqcHJpbWl0aXZlOyB7CisgICAgcHJp bnRmKCJQcmltaXRpdmUiKTsKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZS0+UFJJTV90eXBlKSB7Cisg ICAgICBjYXNlIE5fQklORF9BQ0s6CisgICAgICAgIHByaW50ZiggIlx0Tl9CSU5EX0FDS1xuXHRh ZGRyZXNzOlx0IiApOworICAgICAgICB4MjVkdW1wX2RhdGEoIChjaGFyICopcHJpbWl0aXZlLAor ICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX2Fjay5BRERSX29mZnNldCwKKyAg ICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9hY2suQUREUl9sZW5ndGggKTsKKyAg ICAgICAgcHJpbnRmKCAiXHRwcm90byBpZDpcdCIgKTsKKyAgICAgICAgeDI1ZHVtcF9kYXRhKCAo Y2hhciAqKXByaW1pdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9h Y2suUFJPVE9JRF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmJpbmRf YWNrLlBST1RPSURfbGVuZ3RoICk7CisgICAgICAgIHByaW50ZiggIlx0Y29ubmluZDpcdCVkXG5c dHRva2VuOlx0XHQlZFxuIiwKKyAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9hY2suQ09O SU5EX251bWJlciwKKyAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9hY2suVE9LRU5fdmFs dWUgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9CSU5EX1JFUToKKyAgICAgICAg cHJpbnRmKCAiXHROX0JJTkRfUkVRXG5cdGFkZHJlc3M6XHQiICk7CisgICAgICAgIHgyNWR1bXBf ZGF0YSggKGNoYXIgKilwcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUt PmJpbmRfcmVxLkFERFJfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5i aW5kX3JlcS5BRERSX2xlbmd0aCApOworICAgICAgICBwcmludGYoICJcdHByb3RvIGlkOlx0IiAp OworICAgICAgICB4MjVkdW1wX2RhdGEoIChjaGFyICopcHJpbWl0aXZlLAorICAgICAgICAgICAg ICAgICAgICAgcHJpbWl0aXZlLT5iaW5kX3JlcS5QUk9UT0lEX29mZnNldCwKKyAgICAgICAgICAg ICAgICAgICAgIHByaW1pdGl2ZS0+YmluZF9yZXEuUFJPVE9JRF9sZW5ndGggKTsKKyAgICAgICAg cHJpbnRmKCAiXHRjb25uaW5kOlx0JWRcblx0ZmxhZ3M6XHRcdCVkXG4iLAorICAgICAgICAgICAg ICAgcHJpbWl0aXZlLT5iaW5kX3JlcS5DT05JTkRfbnVtYmVyLAorICAgICAgICAgICAgICAgcHJp bWl0aXZlLT5iaW5kX3JlcS5CSU5EX2ZsYWdzICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBj YXNlIE5fQ09OTl9DT046CisgICAgICAgIHByaW50ZiggIlx0Tl9DT05OX0NPTlxuIiApOworICAg ICAgICBwcmludGYoICJcdFJFU1x0XHQiICk7CisgICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIg KilwcmltaXRpdmUsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNvbm5fY29uLlJF U19vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNvbm5fY29uLlJFU19s ZW5ndGggKTsKKyAgICAgICAgcHJpbnRmKCAiXHRmbGFnczpcdCVkXG4iLCBwcmltaXRpdmUtPmNv bm5fY29uLkNPTk5fZmxhZ3MgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9DT05O X0lORDoKKyAgICAgICAgcHJpbnRmKCAiXHROX0NPTk5fSU5EXG4iICk7CisgICAgICAgIHByaW50 ZiggIlx0c291cmNlOlx0XHQiICk7CisgICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIgKilwcmlt aXRpdmUsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNvbm5faW5kLlNSQ19vZmZz ZXQsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmNvbm5faW5kLlNSQ19sZW5ndGgg KTsKKyAgICAgICAgcHJpbnRmKCAiXHRkZXN0aW5hdGlvbjpcdCIgKTsKKyAgICAgICAgeDI1ZHVt cF9kYXRhKCAoY2hhciAqKXByaW1pdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2 ZS0+Y29ubl9pbmQuREVTVF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUt PmNvbm5faW5kLkRFU1RfbGVuZ3RoICk7CisgICAgICAgIHByaW50ZiggIlx0U0VRX251bWJlcjpc dCVkXG4iLCBwcmltaXRpdmUtPmNvbm5faW5kLlNFUV9udW1iZXIgKTsKKyAgICAgICAgcHJpbnRm KCAiXHRmbGFnczpcdCVkXG4iLCBwcmltaXRpdmUtPmNvbm5faW5kLkNPTk5fZmxhZ3MgKTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9DT05OX1JFUToKKyAgICAgICAgcHJpbnRmKCAi XHROX0NPTk5fUkVRXG5cdGRlc3RpbmF0aW9uOlx0IiApOworICAgICAgICB4MjVkdW1wX2RhdGEo IChjaGFyICopcHJpbWl0aXZlLAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5jb25u X3JlcS5ERVNUX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+Y29ubl9y ZXEuREVTVF9sZW5ndGggKTsKKyAgICAgICAgcHJpbnRmKCAiXHRmbGFnczpcdCVkXG4iLCBwcmlt aXRpdmUtPmNvbm5fcmVxLkNPTk5fZmxhZ3MgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh c2UgTl9DT05OX1JFUzoKKyAgICAgICAgcHJpbnRmKCAiXHROX0NPTk5fUkVTXG4iICk7CisgICAg ICAgIHByaW50ZiggIlx0VE9LRU5fdmFsdWVcdCVkXG4iLCBwcmltaXRpdmUtPmNvbm5fcmVzLlRP S0VOX3ZhbHVlICk7CisgICAgICAgIHByaW50ZiggIlx0U0VRX251bWJlclx0JWRcbiIsIHByaW1p dGl2ZS0+Y29ubl9yZXMuU0VRX251bWJlciApOworICAgICAgICBwcmludGYoICJcdENPTk5fZmxh Z3NcdCVkXG4iLCBwcmltaXRpdmUtPmNvbm5fcmVzLkNPTk5fZmxhZ3MgKTsKKyAgICAgICAgcHJp bnRmKCAiXHRSRVNcdFx0IiApOworICAgICAgICB4MjVkdW1wX2RhdGEoIChjaGFyICopcHJpbWl0 aXZlLAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5jb25uX3Jlcy5SRVNfb2Zmc2V0 LAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5jb25uX3Jlcy5SRVNfbGVuZ3RoICk7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fREFUQUNLX0lORDoKKyAgICAgICAgcHJp bnRmKCAiXHROX0RBVEFDS19JTkRcbiIgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug Tl9EQVRBQ0tfUkVROgorICAgICAgICBwcmludGYoICJcdE5fREFUQUNLX1JFUVxuIiApOworICAg ICAgICBwcmludGYoICJcdGZsYWdzOlx0JWRcbiIsIHByaW1pdGl2ZS0+ZGF0YV9yZXEuREFUQV94 ZmVyX2ZsYWdzICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fREFUQV9JTkQ6Cisg ICAgICAgIHByaW50ZiggIlx0Tl9EQVRBX0lORFxuIiApOworICAgICAgICBwcmludGYoICJcdGZs YWdzOlx0JWRcbiIsIHByaW1pdGl2ZS0+ZGF0YV9pbmQuREFUQV94ZmVyX2ZsYWdzICk7CisgICAg ICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fREFUQV9SRVE6CisgICAgICAgIHByaW50ZiggIlx0 Tl9EQVRBX1JFUVxuIiApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBOX0RJU0NPTl9J TkQ6CisgICAgICAgIHByaW50ZiggIlx0Tl9ESVNDT05fSU5EXG4iICk7CisgICAgICAgIHByaW50 ZiggIlx0b3JpZ2luOlx0JWRcbiIsIHByaW1pdGl2ZS0+ZGlzY29uX2luZC5ESVNDT05fb3JpZyAp OworICAgICAgICBwcmludGYoICJcdHJlYXNvbjpcdFx0JWRcbiIsIHByaW1pdGl2ZS0+ZGlzY29u X2luZC5ESVNDT05fcmVhc29uICk7CisgICAgICAgIHByaW50ZiggIlx0c2VxIG5vOlx0XHQlZFxu IiwgcHJpbWl0aXZlLT5kaXNjb25faW5kLlNFUV9udW1iZXIgKTsKKyAgICAgICAgcHJpbnRmKCAi XHRSRVM6XHQiICk7CisgICAgICAgIHgyNWR1bXBfZGF0YSggKGNoYXIgKilwcmltaXRpdmUsCisg ICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmUtPmRpc2Nvbl9pbmQuUkVTX29mZnNldCwKKyAg ICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+ZGlzY29uX2luZC5SRVNfbGVuZ3RoICk7Cisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fRElTQ09OX1JFUToKKyAgICAgICAgcHJpbnRm KCAiXHROX0RJU0NPTl9SRVFcbiIgKTsKKyAgICAgICAgcHJpbnRmKCAiXHRESVNDT05fcmVhc29u Olx0JWRcbiIsCisgICAgICAgICAgICAgICBwcmltaXRpdmUtPmRpc2Nvbl9yZXEuRElTQ09OX3Jl YXNvbiApOworICAgICAgICBwcmludGYoICJcdFJFUzpcdCIgKTsKKyAgICAgICAgeDI1ZHVtcF9k YXRhKCAoY2hhciAqKXByaW1pdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZS0+ ZGlzY29uX3JlcS5SRVNfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlLT5k aXNjb25fcmVxLlJFU19sZW5ndGggKTsKKyAgICAgICAgcHJpbnRmKCAiXHRTRVFfbnVtYmVyOlx0 JWRcbiIsIHByaW1pdGl2ZS0+ZGlzY29uX3JlcS5TRVFfbnVtYmVyICk7CisgICAgICAgIGJyZWFr OworCisgICAgICBjYXNlIE5fRVJST1JfQUNLOgorICAgICAgICBwcmludGYoICJcdE5fRVJST1Jf QUNLXG4iICk7CisgICAgICAgIHByaW50ZiggIlx0Q2F1c2VkIGJ5Olx0JXNcbiIsCisgICAgICAg ICAgICAgICB4MjVwcmltKCBwcmltaXRpdmUtPmVycm9yX2Fjay5FUlJPUl9wcmltICkgKTsKKyAg ICAgICAgcHJpbnRmKCAiXHROUEkgZXJyb3I6XHQlc1xuIiwKKyAgICAgICAgICAgICAgIHgyNWVy ciggcHJpbWl0aXZlLT5lcnJvcl9hY2suTlBJX2Vycm9yICkpOworICAgICAgICBlcnJubyA9IHBy aW1pdGl2ZS0+ZXJyb3JfYWNrLlVOSVhfZXJyb3I7CisgICAgICAgIHBlcnJvciggIlx0IiApOwor ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBOX0VYREFUQV9JTkQ6CisgICAgICAgIHByaW50 ZiggIlx0Tl9FWERBVEFfQUNLXG4iICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5f RVhEQVRBX1JFUToKKyAgICAgICAgcHJpbnRmKCAiXHROX0VYREFUQV9SRVFcbiIgKTsKKyAgICAg ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9JTkZPX0FDSzoKKyAgICAgICAgcHJpbnRmKCAiXHRO X0lORk9fQUNLXG4iICk7CisgICAgICAgIHByaW50ZiggIlx0TlNEVSBzaXplOlx0JWRcbiIsIHBy aW1pdGl2ZS0+aW5mb19hY2suTlNEVV9zaXplICk7CisgICAgICAgIHByaW50ZiggIlx0RU5TRFUg c2l6ZTpcdCVkXG4iLCBwcmltaXRpdmUtPmluZm9fYWNrLkVOU0RVX3NpemUgKTsKKyAgICAgICAg cHJpbnRmKCAiXHRDREFUQSBzaXplOlx0JWRcbiIsIHByaW1pdGl2ZS0+aW5mb19hY2suQ0RBVEFf c2l6ZSApOworICAgICAgICBwcmludGYoICJcdEREQVRBIHNpemU6XHQlZFxuIiwgcHJpbWl0aXZl LT5pbmZvX2Fjay5EREFUQV9zaXplICk7CisgICAgICAgIHByaW50ZiggIlx0QUREUiBzaXplOlx0 JWRcbiIsIHByaW1pdGl2ZS0+aW5mb19hY2suQUREUl9zaXplICk7CisgICAgICAgIHByaW50Zigg Ilx0TklEVSBzaXplOlx0JWRcbiIsIHByaW1pdGl2ZS0+aW5mb19hY2suTklEVV9zaXplICk7Cisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fSU5GT19SRVE6CisgICAgICAgIHByaW50Zigg Ilx0Tl9JTkZPX1JFUVxuIiApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBOX09LX0FD SzoKKyAgICAgICAgcHJpbnRmKCAiXHROX09LX0FDS1xuIiApOworICAgICAgICBicmVhazsKKwor ICAgICAgY2FzZSBOX09QVE1HTVRfUkVROgorICAgICAgICBwcmludGYoICJcdE5fT1BUTUdNVF9S RVFcbiIgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgTl9SRVNFVF9DT046CisgICAg ICAgIHByaW50ZiggIlx0Tl9SRVNFVF9DT05cbiIgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgTl9SRVNFVF9JTkQ6CisgICAgICAgIHByaW50ZiggIlx0Tl9SRVNFVF9JTkRcbiIgKTsK KyAgICAgICAgcHJpbnRmKCAiXHRyZWFzb246XHRcdCVkXG4iLCBwcmltaXRpdmUtPnJlc2V0X2lu ZC5SRVNFVF9yZWFzb24gKTsKKyAgICAgICAgcHJpbnRmKCAiXHRvcmlnaW46XHRcdCVkXG4iLCBw cmltaXRpdmUtPnJlc2V0X2luZC5SRVNFVF9vcmlnICk7CisgICAgICAgIGJyZWFrOworCisgICAg ICBjYXNlIE5fUkVTRVRfUkVROgorICAgICAgICBwcmludGYoICJcdE5fUkVTRVRfUkVRXG4iICk7 CisgICAgICAgIHByaW50ZiggIlx0cmVhc29uOlx0XHQlZFxuIiwgcHJpbWl0aXZlLT5yZXNldF9y ZXEuUkVTRVRfcmVhc29uICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fUkVTRVRf UkVTOgorICAgICAgICBwcmludGYoICJcdE5fUkVTRVRfUkVTXG4iICk7CisgICAgICAgIGJyZWFr OworCisgICAgICBjYXNlIE5fVURFUlJPUl9JTkQ6CisgICAgICAgIHByaW50ZiggIlx0Tl9VREVS Uk9SX0lORFxuIiApOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBOX1VOQklORF9SRVE6 CisgICAgICAgIHByaW50ZiggIlx0Tl9VTkJJTkRfUkVRXG4iICk7CisgICAgICAgIGJyZWFrOwor CisgICAgICBjYXNlIE5fVU5JVERBVEFfUkVROgorICAgICAgICBwcmludGYoICJcdE5fVU5JVERB VEFfUkVRXG4iICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE5fVU5JVERBVEFfSU5E OgorICAgICAgICBwcmludGYoICJcdE5fVU5JVERBVEFfSU5EXG4iICk7CisgICAgICAgIGJyZWFr OworCisgICAgICBkZWZhdWx0OgorICAgICAgICAodm9pZCkgcHJpbnRmKCAiVW5rbm93biBOUEkg ZXJyb3IgJWQiLCBwcmltaXRpdmUtPlBSSU1fdHlwZSApOworICAgICAgICByZXR1cm4gMDsKKyAg ICB9Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogaXQgbG9va3MgbGlrZSBzaWduYWwgaGFu ZGxpbmcgaXMgbm90IG5lZWRlZCB3aXRoIHN0cmVhbXMhICovCisvKiB4MjVvb2JoKCkgICAgLSBo YW5kbGUgU0lHVVJHIHNpZ25hbHMgLSB0YWtlIGZyb20gaXNvZGUgPyAqLworCisjZW5kaWYgLyog SUJNWDI1ICovCisKKyNpZm5kZWYgTk9IVFRQCisvKgorICBXaGljaCB0aW1lLmggZmlsZXMgdG8g aW5jbHVkZS4uLiBTZWUgY2tjZGViLmggZm9yIGRlZmF1bHRzLgorICBOb3RlIHRoYXQgMCwgMSwg Miwgb3IgYWxsIDMgb2YgdGhlc2UgY2FuIGJlIGluY2x1ZGVkIGFjY29yZGluZyB0bworICB0aGUg c3ltYm9sIGRlZmluaXRpb25zLgorKi8KKyNpZm5kZWYgTk9USU1FSAorI2lmZGVmIFRJTUVICisj aW5jbHVkZSA8dGltZS5oPgorI2VuZGlmIC8qIFRJTUVIICovCisjZW5kaWYgLyogTk9USU1FSCAq LworCisjaWZuZGVmIE5PU1lTVElNRUgKKyNpZmRlZiBTWVNUSU1FSAorI2luY2x1ZGUgPHN5cy90 aW1lLmg+CisjZW5kaWYgLyogU1lTVElNRUggKi8KKyNlbmRpZiAvKiBOT1NZU1RJTUVIICovCisK KyNpZm5kZWYgTk9TWVNUSU1FQkgKKyNpZmRlZiBTWVNUSU1FQkgKKyNpbmNsdWRlIDxzeXMvdGlt ZWIuaD4KKyNlbmRpZiAvKiBTWVNUSU1FQkggKi8KKyNlbmRpZiAvKiBOT1NZU1RJTUVCSCAqLwor CisjaWZuZGVmIFRJTUVICisjaWZuZGVmIFNZU1RJTUVICisjaWZuZGVmIFNZU1RJTUVCSAorI2lm ZGVmIFBsYW45CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbHNlCisjaWZkZWYgQUlYNDEKKyNp bmNsdWRlIDx0aW1lLmg+CisjZWxzZQorI2lmZGVmIFNVTk9TNAorI2luY2x1ZGUgPHN5cy90aW1l Lmg+CisjZWxzZQorI2lmZGVmIFNZU1RJTUVICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbHNl CisjaWZkZWYgUE9TSVgKKyNpbmNsdWRlIDxwb3NpeC90aW1lLmg+CisjZWxzZQorI2lmZGVmIENM SVgKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2Vsc2UKKyNpZmRlZiBPUzIKKyNpbmNsdWRlIDx0 aW1lLmg+CisjZWxzZQorI2luY2x1ZGUgPHRpbWUuaD4KKy8qICNpbmNsdWRlIDx1dGltZS5oPiAq LworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENMSVggKi8KKyNlbmRpZiAvKiBQT1NJWCAq LworI2VuZGlmIC8qIFNZU1RJTUVIICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyog QUlYNDEgKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisj aWZkZWYgT1MyCisjaW5jbHVkZSA8c3lzL3V0aW1lLmg+CisjaWZkZWYgTlQKKyNkZWZpbmUgdXRp bWJ1ZiBfdXRpbWJ1ZgorI2VuZGlmIC8qIE5UICovCisjZGVmaW5lIHV0aW1lICAgX3V0aW1lCisj ZWxzZQorI2lmZGVmIFNZU1VUSU1FSCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDxzeXMvdXRp bWUuaD4gaWYgcmVxdWVzdGVkLCAgKi8KKyNpbmNsdWRlIDxzeXMvdXRpbWUuaD4gICAgICAgICAg ICAgICAgICAvKiBmb3IgZXh0cmEgZmllbGRzIHJlcXVpcmVkIGJ5ICovCisjZWxzZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODhPcGVuIHNwZWMuICovCisjaWZkZWYgVVRJ TUVIICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgPHV0aW1lLmg+IGlmIHJlcXVlc3Rl ZCAqLworI2luY2x1ZGUgPHV0aW1lLmg+ICAgICAgICAgICAgICAgICAgICAgIC8qIChTVlI0LCBQ T1NJWCkgKi8KKyNkZWZpbmUgU1lTVVRJTUVIICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ug dGhpcyBmb3IgYm90aCBjYXNlcy4gKi8KKyNlbmRpZiAvKiBVVElNRUggKi8KKyNlbmRpZiAvKiBT WVNVVElNRUggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIFZNUwkJCQkvKiBTTVMgMjAw Ny8wMi8xNSAqLworI2luY2x1ZGUgImNrdnJ0bC5oIgorI2VuZGlmIC8qIGRlZiBWTVMgKi8KKwor I2lmbmRlZiBIVFRQX1ZFUlNJT04KKyNkZWZpbmUgSFRUUF9WRVJTSU9OICJIVFRQLzEuMSIKKyNl bmRpZiAvKiBIVFRQX1ZFUlNJT04gKi8KKworI2lmZGVmIENNREFURTJUTQordGltZV90CisjaWZk ZWYgQ0tfQU5TSUMKK2h0dHBfZGF0ZShjaGFyICogZGF0ZSkKKyNlbHNlCitodHRwX2RhdGUoZGF0 ZSkgY2hhciAqIGRhdGU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGh0dHBfZGF0ZSAqLyB7 CisgICAgLyogSFRUUCBkYXRlcyBhcmUgb2YgdGhlIGZvcm06ICAiU3VuLCAwNiBPY3QgMTk5NyAy MDoxMTo0NyBHTVQiICovCisgICAgLyogVGhlcmUgYXJlIHR3byBvbGRlciBmb3JtYXRzIHdoaWNo IHdlIGFyZSByZXF1aXJlZCB0byBwYXJzZQorICAgICAqIHRoYXQgd2UgY3VycmVudGx5IGRvIG5v dDoKKyAgICAgKgorICAgICAqIFJGQyA4NTA6ICAgIlN1bmRheSwgMDYtT2N0LTk3IDIwOjExOjQ3 IEdNVCIKKyAgICAgKiBhc2N0aW1lKCk6ICJTdW4gTm92ICA2IDIwOjExOjQ3IDE5OTciCisgICAg ICoKKyAgICAgKiBIb3dldmVyLCBpdCBpcyByZXF1aXJlZCB0aGF0IGFsbCBkYXRlcyBiZSBzZW50 IGluIHRoZSBmb3JtIHdlCisgICAgICogZG8gYWNjZXB0LiAgVGhlIG90aGVyIHR3byBmb3JtYXRz IGFyZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICogcmVhbGx5IG9sZCBzZXJ2ZXJzLgor ICAgICAqLworICAgIGV4dGVybiBjaGFyIGNtZGF0ZWJ1ZlsxOF07CisgICAgc3RydWN0IHRtIHRf dG07CisgICAgdGltZV90IHQ7CisgICAgY2hhciBsZGF0ZVszMl07CisgICAgaW50IGo7CisKKyAg ICBqID0gY2tpbmRleCgiLCIsZGF0ZSwwLDAsMCk7CisgICAgY2tzdHJuY3B5KGxkYXRlLCZkYXRl W2orMV0sMjUpOworCisgICAgeyAgIC8qCisgICAgICAgICAgIGNtY3Z0YXRlKCkgZGF0ZSBjaGFu Z2VkIHRvIHJldHVybiBhIHN0cmluZyBwb2ludGVyLgorICAgICAgICAgICBmZGMsIDEyIEF1ZyAy MDAxLgorICAgICAgICAqLworICAgICAgICBjaGFyICogZHA7CisgICAgICAgIGRwID0gKGNoYXIg KiljbWN2dGRhdGUobGRhdGUsMCk7IC8qIENvbnZlcnQgdG8gbm9ybWFsIGZvcm0gKi8KKyAgICAg ICAgaWYgKCFkcCkKKyAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIHRfdG0gPSAqY21kYXRl MnRtKGRwLDEpOworICAgIH0KKy8qCisgIEZyb20gTHVjYXMgSGFydCwgNSBEZWMgMjAwMToKKyAg Ik9uIHRoZSBzeXN0ZW1zIHRvIHdoaWNoIEkgaGF2ZSBhY2Nlc3MgKFN1bk9TIDQuMS4xLCBTb2xh cmlzIDgsIGFuZCBUcnU2NCksCisgIHNldHRpbmcgdG1faXNkc3QgdG8gLTEgbWFpbnRhaW5zIHRo ZSBjb3JyZWN0IHRpbWV6b25lIG9mZnNldHMsIGkuZS4sIHdyaXRlcworICB0aGUgc3BlY2lmaWVk IChHTVQpIHRpbWUgaWYgdGhlIGJ1ZmZlciBzaXplIGlzIDIxLCBvciB0aGUgY29udGVtcG9yYW5l b3VzCisgIGxvY2FsdGltZSBpZiB0aGUgYnVmZmVyIHNpemUgaXMgMjUuICBQZXJoYXBzIHRtX2lz ZHN0IHNob3VsZCBiZSBzZXQgaW4KKyAgY21kYXRlMnRtKCksIHJhdGhlciB0aGFuIG9ubHkgaW4g aHR0cF9kYXRlLiIKKyovCisjaWZuZGVmIE5PVE1fSVNEU1QgICAgICAgICAgICAgICAgICAgICAg LyogRm9yIHBsYXRmb3JtcyB3aGVyZSAqLworICAgIHRfdG0udG1faXNkc3QgPSAtMTsgICAgICAg ICAgICAgICAgIC8qIHRtX2lzZHN0IGRvZXNuJ3QgZXhpc3QuICovCisjZW5kaWYgLyogTk9UTV9J U0RTVCAqLworCisgICAgdCA9IG1rdGltZSgmdF90bSk7ICAgICAgICAgICAgICAgICAgLyogTk9U IFBPUlRBQkxFICovCisKKyNpZmRlZiBYWF9USU1FWk9ORQorICAgIHQgLT0gX3RpbWV6b25lOwor I2VuZGlmIC8qIFhYX1RJTUVaT05FICovCisKKyAgICByZXR1cm4odCk7Cit9CisjZW5kaWYgLyog Q01EQVRFMlRNICovCisKK2NoYXIgKgoraHR0cF9ub3coKSB7CisgICAgc3RhdGljIGNoYXIgbm93 c3RyWzMyXTsKKyNpZmRlZiBDTURBVEUyVE0KKyAgICBzdHJ1Y3QgdG0gICpnbXQ7CisgICAgdGlt ZV90IGx0aW1lOyAgICAgICAgICAgICAgICAgICAgICAgLyogTk9UIFBPUlRBQkxFICovCisKKyAg ICB0aW1lKCZsdGltZSk7CisKKyAgICBnbXQgPSBnbXRpbWUoJmx0aW1lKTsgICAgICAgICAgICAg ICAvKiBQUk9CQUJMWSBOT1QgUE9SVEFCTEUgKi8KKyAgICBzdHJmdGltZShub3dzdHIsMzIsIiVh LCAlZCAlYiAlWSAlSDolTTolUyBHTVQiLGdtdCk7IC8qIE5PVCBQT1JUQUJMRSAqLworICAgIC8q IG5vdCBvbmx5IGlzIGl0IG5vdCBwb3J0YWJsZSBidXQgaXQncyBsb2NhbGUtZGVwZW5kZW50ICov CisjZWxzZQorLyoKKyAgVGhpcyBpcyBob3BlbGVzcy4gIEZpcnN0IG9mIGFsbCwgaXQgc2VlbXMg dGhhdCBIVFRQIHdhbnRzIERheSBhbmQgTW9udGgKKyAgTkFNRVM/ICBJbiBFbmdsaXNoPyAgV2hv c2UgaWRlYSB3YXMgdGhhdD8gIEV2ZW4gd29yc2UsIHRoZSBkYXRlL3RpbWUgbXVzdCBiZQorICBl eHByZXNzZWQgaW4gWnVsdSAoVVRDIChHTVQpKSwgYW5kIGNvbnZlcnRpbmcgZnJvbSBsb2NhbCB0 aW1lIHRvIEdNVCBpcyBhCisgIG5pZ2h0bWFyZS4gIEV2ZXJ5IHBsYXRmb3JtIGRvZXMgaXQgZGlm ZmVyZW50bHksIGlmIGF0IGFsbCAtLSBldmVuIGlmIHdlCisgIHJlc3RyaWN0IG91cnNlbHZlcyB0 byBVTklYLiAgRm9yIGV4YW1wbGUgKHF1b3RpbmcgZnJvbSByZWNlbnQgQy1LZXJtaXQgZWRpdAor ICBoaXN0b3J5KSwgIkZpeGVkIGEgbG9uZ3N0YW5kaW5nIGJ1ZyBpbiB0aGUgQlNESSB2ZXJzaW9u LCBpbiB3aGljaCBpbmNvbWluZworICBmaWxlIGRhdGVzIHdlcmUgc2V0IGluIEdNVCByYXRoZXIg dGhhbiBsb2NhbCB0aW1lLiAgSXQgc2VlbXMgaW4gNC40QlNELAorICBsb2NhbHRpbWUoKSBkb2Vz IG5vdCByZXR1cm4gdGhlIGxvY2FsIHRpbWUsIGJ1dCByYXRoZXIgWmVybyBNZXJpZGlhbiAoWnVs dSkKKyAgdGltZSAoR01UKSwgYW5kIG11c3QgYmUgYWRqdXN0ZWQgYnkgdGhlIHRtX2dtdG9mZiB2 YWx1ZS4iICBTd2VsbC4gIEZvcgorICBncmVhdGVyIGFwcHJlY2lhdGlvbiBvZiB0aGUgc2NvcGUg b2YgdGhlIHByb2JsZW0sIGp1c3QgdGFrZSBhIGxvb2sgYXQgdGhlCisgIHRpbWUtcmVsYXRlZCAj aWZkZWZzIGluIGNrdXRpby5jLiAgVGhlIG9ubHkgcmlnaHQgd2F5IHRvIGRvIHRoaXMgaXMgdG8g YWRkCisgIG91ciBvd24gcG9ydGFibGUgQVBJIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gbG9jYWwg dGltZSBhbmQgR01UL1VUQy9adWx1CisgIHRoYXQgc2hpZWxkcyB1cyBub3Qgb25seSBmcm9tIFVO SVhpc21zIGxpa2UgdGltZV90IGFuZCBzdHJ1Y3QgdG0sIGJ1dCBhbHNvCisgIHRoZSB1bmJlbGll dmFibGUgYW1vdW50IG9mIGRpZmZlcmVuY2VzIGluIHRpbWUtcmVsYXRlZCBBUElzIC0tIGUuZy4g aXMKKyAgInRpbWV6b25lIiBhbiBleHRlcm5hbCB2YXJpYWJsZSBvciBhIGZ1bmN0aW9uOyB3aGlj aCBoZWFkZXIgZmlsZShzKSBkbyB3ZQorICBpbmNsdWRlLCBldGMgZXRjIGV0Yy4gIEl0J3MgYSBt YWpvciBwcm9qZWN0LgorKi8KKyAgICBpbnQgeDsKKyAgICB4ID0gY21jdnRkYXRlKCIiLDEpOwor CitFdmlkZW50bHkgdGhpcyBjb2RlIGlzIG5vdCB1c2VkIC0tIGlmIGl0IGlzLCBpdCBtdXN0IGJl IGZpeGVkIHRvIHVzZQorbmV3IChhdWcgMjAwMSkgY21jdnRkYXRlKCkgY2FsbGluZyBjb252ZW50 aW9ucy4KKworICAgIGlmICh4IDwgMCkKKyAgICAgIHJldHVybigiIik7CisvKiAgeXl5eW1tZGQg aGg6bW06c3MgKi8KKy8qICAwMTIzNDU2Nzg5MDEyMzQ1NiAqLworICAgIG5vd3N0clswXSAgPSAn WCc7ICAgICAgICAgICAgICAgICAgIC8qIDFzdCBsZXR0ZXIgb2YgZGF5ICovCisgICAgbm93c3Ry WzFdICA9ICd4JzsgICAgICAgICAgICAgICAgICAgLyogMm5kIGxldHRlciBvZiBkYXkgKi8KKyAg ICBub3dzdHJbMl0gID0gJ3gnOyAgICAgICAgICAgICAgICAgICAvKiAzcmQgbGV0dGVyIG9mIGRh eSAqLworICAgIG5vd3N0clszXSAgPSAnLCc7CisgICAgbm93c3RyWzRdICA9ICcgJzsKKyAgICBu b3dzdHJbNV0gID0gY21kYXRlWzZdOworICAgIG5vd3N0cls2XSAgPSBjbWRhdGVbN107CisgICAg bm93c3RyWzddICA9ICcgJzsKKyAgICBub3dzdHJbOF0gID0gJyAnOyAgICAgICAgICAgICAgICAg ICAvKiBmaXJzdCBsZXR0ZXIgb2YgbW9udGggKi8KKyAgICBub3dzdHJbOV0gID0gJyAnOyAgICAg ICAgICAgICAgICAgICAvKiBzZWNvbmQgbGV0dGVyIG9mIG1vbnRoICovCisgICAgbm93c3RyWzEw XSA9ICcgJzsgICAgICAgICAgICAgICAgICAgLyogdGhpcmQgbGV0dGVyIG9mIG1vbnRoICovCisg ICAgbm93c3RyWzExXSA9ICcgJzsKKyAgICBub3dzdHJbMTJdID0gY21kYXRlWzBdOworICAgIG5v d3N0clsxM10gPSBjbWRhdGVbMV07CisgICAgbm93c3RyWzE0XSA9IGNtZGF0ZVsyXTsKKyAgICBu b3dzdHJbMTVdID0gY21kYXRlWzNdOworICAgIG5vd3N0clsxNl0gPSAnICc7CisgICAgbm93c3Ry WzE3XSA9IGNtZGF0ZVs5XTsKKyAgICBub3dzdHJbMThdID0gY21kYXRlWzEwXTsKKyAgICBub3dz dHJbMTldID0gY21kYXRlWzExXTsKKyAgICBub3dzdHJbMjBdID0gY21kYXRlWzEyXTsKKyAgICBu b3dzdHJbMjFdID0gY21kYXRlWzEzXTsKKyAgICBub3dzdHJbMjJdID0gY21kYXRlWzE0XTsKKyAg ICBub3dzdHJbMjNdID0gY21kYXRlWzE1XTsKKyAgICBub3dzdHJbMjRdID0gY21kYXRlWzE2XTsK KyAgICBub3dzdHJbMjVdID0gJyAnOworICAgIG5vd3N0clsyNl0gPSAnRyc7CisgICAgbm93c3Ry WzI3XSA9ICdNJzsKKyAgICBub3dzdHJbMjhdID0gJ1QnOworICAgIG5vd3N0clsyOV0gPSAnXDAn OworI2VuZGlmIC8qIENNREFURTJUTSAqLworICAgIHJldHVybihub3dzdHIpOworfQorCisjaWZu ZGVmIE9TMgorI2lmbmRlZiBDS19BVVRIRU5USUNBVElPTgorLyogZnJvbSBja3V1c3IuaCwgd2hp Y2ggdGhpcyBtb2R1bGUgbm9ybWFsbHkgZG9lc24ndCBpbmNsdWRlICovCitfUFJPVE9UWVAoIGlu dCBkY2xhcnJheSwgKGNoYXIsIGludCkgKTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAq LworI2VuZGlmIC8qIE9TMiAqLworLyoKKyAgQXNzaWduIGh0dHAgcmVzcG9uc2UgcGFpcnMgdG8g Z2l2ZW4gYXJyYXkuCisgIEZvciBiZXN0IHJlc3VsdHMsIHJlc3BvbnNlIHBhaXJzIHNob3VsZCBj b250YWluIG5vIHNwYWNlcy4KKworICBDYWxsIHdpdGg6CisgICAgcmVzcCAgPSAgcG9pbnRlciB0 byByZXNwb25zZSBsaXN0LgorICAgIG4gICAgID0gIHNpemUgb2YgcmVzcG9uc2UgbGlzdC4KKyAg ICBhcnJheSA9ICBhcnJheSBsZXR0ZXIuCisgIFJldHVybnM6CisgICAgMCBvbiBmYWlsdXJlLgor ICAgID49IDEsIHNpemUgb2YgYXJyYXksIG9uIHN1Y2Nlc3MuCisqLworc3RhdGljIGludAorI2lm ZGVmIENLX0FOU0lDCitodHRwX21rYXJyYXkoY2hhciAqKiByZXNwLCBpbnQgbiwgY2hhciBhcnJh eSkKKyNlbHNlCitodHRwX21rYXJyYXkocmVzcCwgbiwgYXJyYXkpIGNoYXIgKiogcmVzcDsgaW50 IG47IGNoYXIgYXJyYXk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZm5kZWYgTk9TUEwK KyAgICBpbnQgaSwgeDsKKyAgICBjaGFyICoqIGFwOworICAgIGV4dGVybiBjaGFyICoqIGFfcHRy W107CisgICAgZXh0ZXJuIGludCBhX2RpbVtdOworCisgICAgaWYgKCFhcnJheSB8fCBuIDw9IDAp CisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKCh4ID0gZGNsYXJyYXkoYXJyYXksbikpIDwgMCkg eworICAgICAgICBwcmludGYoIj9BcnJheSBkZWNsYXJhdGlvbiBmYWlsdXJlXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgLyogTm90ZTogYXJndW1lbnQgYXJyYXkgaXMgMC1i YXNlZCBidXQgS2VybWl0IGFycmF5IGlzIDEtYmFzZWQgKi8KKyAgICBhcCA9IGFfcHRyW3hdOwor ICAgIGFwWzBdID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgIC8qIDB0aCBlbGVtZW50IGlz IGVtcHR5ICovCisgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKyAgICAgICAgYXBbaV0g PSByZXNwW2ktMV07ICAgICAgICAgICAgICAvKiBJZiByZXNwIGVsZW1lbnRzIHdlcmUgbWFsbG9j J2QgKi8KKyAgICAgICAgcmVzcFtpLTFdID0gTlVMTDsKKyAgICB9CisgICAgYV9kaW1beF0gPSBu OworICAgIHJldHVybihuKTsKKyNlbHNlCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE5PU1BM ICovCit9CisKKyNkZWZpbmUgSFRUUEhFQURDTlQgNjQKK2ludAoraHR0cF9nZXRfY2h1bmtfbGVu KCkKK3sKKyAgICBpbnQgbGVuID0gMDsKKyAgICBpbnQgaSA9IDAsIGogPSAtMTsKKyAgICBjaGFy IGJ1ZlsyNF07CisgICAgaW50IGNoOworCisgICAgd2hpbGUgKChjaCA9IGh0dHBfaW5jKDApKSA+ PSAwICYmIGkgPCAyNCkgeworICAgICAgICBidWZbaV0gPSBjaDsKKyAgICAgICAgaWYgKCBidWZb aV0gPT0gJzsnICkgICAgICAgICAgICAvKiBGaW5kIGNodW5rLWV4dGVuc2lvbiAoaWYgYW55KSAq LworICAgICAgICAgICAgaiA9IGk7CisgICAgICAgIGlmICggYnVmW2ldID09IDEwICkgeyAgICAg ICAgICAgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8KKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBi dWZbaS0xXSA9PSAxMykKKyAgICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICBidWZbaV0g PSAnXDAnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaSsrOworICAg IH0KKyAgICBpZiAoIGkgPCAyNCApIHsgICAgICAgICAgICAgICAgICAgICAvKiBidWYgbm93IGNv bnRhaW5zIGxlbiBpbiBIZXggKi8KKyAgICAgICAgbGVuID0gaGV4dG91bG9uZyhidWYsIGogPT0g LTEgPyBpIDogai0xKTsKKyAgICB9CisKKyAgICByZXR1cm4obGVuKTsKK30KKworaW50CitodHRw X2lzY29ubmVjdGVkKCkKK3sKKyAgICByZXR1cm4oaHR0cGZkICE9IC0xKTsKK30KKworY2hhciAq CitodHRwX2hvc3QoKQoreworICAgIHJldHVybihodHRwZmQgIT0gLTEgPyBodHRwX2hvc3RfcG9y dCA6ICIiKTsKK30KKworY2hhciAqCitodHRwX3NlY3VyaXR5KCkKK3sKKyAgICBpZiAoIGh0dHBm ZCA9PSAtMSApCisgICAgICAgIHJldHVybigiTlVMTCIpOworI2lmZGVmIENLX1NTTAorICAgIGlm ICh0bHNfaHR0cF9hY3RpdmVfZmxhZykgeworICAgICAgICBTU0xfQ0lQSEVSICogY2lwaGVyOwor ICAgICAgICBjb25zdCBjaGFyICpjaXBoZXJfbGlzdDsKKyAgICAgICAgc3RhdGljIGNoYXIgYnVm WzEyOF07CisgICAgICAgIGJ1ZlswXSA9IE5VTDsKKyAgICAgICAgY2lwaGVyID0gU1NMX2dldF9j dXJyZW50X2NpcGhlcih0bHNfaHR0cF9jb24pOworICAgICAgICBjaXBoZXJfbGlzdCA9IFNTTF9D SVBIRVJfZ2V0X25hbWUoY2lwaGVyKTsKKyAgICAgICAgU1NMX0NJUEhFUl9kZXNjcmlwdGlvbihj aXBoZXIsYnVmLHNpemVvZihidWYpKTsKKyAgICAgICAgcmV0dXJuKGJ1Zik7CisgICAgfQorI2Vu ZGlmIC8qIENLX1NTTCAqLworICAgIHJldHVybigiTlVMTCIpOworfQorCitpbnQKK2h0dHBfcmVv cGVuKCkKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIGNoYXIgKiBzID0gTlVMTDsgICAgICAgICAg ICAgICAgICAgIC8qIHN0cmR1cCBpcyBub3QgcG9ydGFibGUgKi8KKyAgICBpZiAoIHRjcF9odHRw X3Byb3h5ICkgeworICAgICAgICBjaGFyICogcDsKKyAgICAgICAgbWFrZXN0cigmcywoY2hhciAq KWh0dHBfaG9zdF9wb3J0KTsKKyAgICAgICAgcCA9IHM7CisgICAgICAgIHdoaWxlICgqcCAhPSAn XDAnICYmICpwICE9ICc6JykgcCsrOyAvKiBMb29rIGZvciBjb2xvbiAqLworICAgICAgICBpZiAo KnAgPT0gJzonKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBhIGNvbG9uICovCisgICAg ICAgICAgICAqcCsrID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgc2VydmljZSBu YW1lIG9yIG51bWJlciAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcD0iaHR0cCI7 CisgICAgICAgIH0KKyAgICAgICAgcmMgPSBodHRwX29wZW4ocyxwLGh0dHBfc3NsLE5VTEwsMCxo dHRwX2FnZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtYWtlc3RyKCZzLChjaGFyICopaHR0 cF9pcCk7CisgICAgICAgIHJjID0gaHR0cF9vcGVuKHMsY2t1aXRvYShodHRwX3BvcnQpLGh0dHBf c3NsLE5VTEwsMCxodHRwX2FnZW50KTsKKyAgICB9CisgICAgZnJlZShzKTsKKyAgICByZXR1cm4o cmMpOworfQorCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitodHRwX29wZW4oY2hhciAqIGhvc3Ru YW1lLCBjaGFyICogc3ZjbmFtZSwgaW50IHVzZV9zc2wsIGNoYXIgKiByZG5zX25hbWUsCisgICAg ICAgICAgaW50IHJkbnNfbGVuLCBjaGFyICogYWdlbnQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwor aHR0cF9vcGVuKGhvc3RuYW1lLCBzdmNuYW1lLCB1c2Vfc3NsLCByZG5zX25hbWUsIHJkbnNfbGVu LCBhZ2VudCkKKyAgICBjaGFyICogaG9zdG5hbWU7CisgICAgY2hhciAqIHN2Y25hbWU7CisgICAg aW50ICAgIHVzZV9zc2w7CisgICAgY2hhciAqIHJkbnNfbmFtZTsKKyAgICBpbnQgICAgcmRuc19s ZW47CisgICAgY2hhciAqIGFnZW50OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgY2hh ciBuYW1lY29weVtOQU1FQ1BZTF07CisgICAgY2hhciAqcDsKKyAgICBpbnQgaSwgeCwgZG5zID0g MDsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpbnQgaXNjb25uZWN0ID0gMDsKKyNpZmRlZiBTT19P T0JJTkxJTkUKKyAgICBpbnQgb24gPSAxOworI2VuZGlmIC8qIFNPX09PQklOTElORSAqLworICAg IHN0cnVjdCBzZXJ2ZW50ICpzZXJ2aWNlPU5VTEw7CisgICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q9 TlVMTDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gcl9hZGRyOworICAgIHN0cnVjdCBzb2NrYWRk cl9pbiBzaW47CisgICAgc3RydWN0IHNvY2thZGRyX2luIGxfYWRkcjsKKyAgICBHU09DS05BTUVf VCBsX3NsZW47CisjaWZkZWYgRVhDRUxBTgorICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZW5kX3Nv Y2tldDsKKyNlbmRpZiAvKiBFWENFTEFOICovCisKKyNpZmRlZiBJTkFERFJYCisvKiBpbmV0X2Fk ZHIoKSBpcyBvZiB0eXBlIHN0cnVjdCBpbl9hZGRyICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAg ICBleHRlcm4gc3RydWN0IGluX2FkZHIgaW5ldF9hZGRyKCk7CisjZWxzZQorI2lmZGVmIEhQVVg1 V0lOVENQCisgICAgZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfYWRkcigpOworI2VuZGlmIC8q IEhQVVg1V0lOVENQICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICBzdHJ1Y3QgaW5f YWRkciBpYXg7CisjZWxzZQorI2lmZGVmIElOQUREUl9OT05FCisgICAgc3RydWN0IGluX2FkZHIg aWF4OworI2Vsc2UgLyogSU5BRERSX05PTkUgKi8KKyAgICBsb25nIGlheDsKKyNlbmRpZiAvKiBJ TkFERFJfTk9ORSAqLworI2VuZGlmIC8qIElOQUREUlggKi8KKworICAgIGlmICggcmRuc19uYW1l ID09IE5VTEwgfHwgcmRuc19sZW4gPCAwICkKKyAgICAgICAgcmRuc19sZW4gPSAwOworCisgICAg Kmh0dHBfaXAgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgSVAgYWRk cmVzcyBzdHJpbmcgKi8KKyAgICBuYW1lY29weVswXSA9ICdcMCc7CisKKyNpZmRlZiBERUJVRwor ICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjExMCwiaHR0cF9vcGVuIGhvc3RuYW1l Iixob3N0bmFtZSwwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaHR0cF9vcGVuIHN2Y25hbWUiLHN2 Y25hbWUsMCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgaWYgKCFob3N0bmFtZSkg aG9zdG5hbWUgPSAiIjsKKyAgICBpZiAoIXN2Y25hbWUpIHN2Y25hbWUgPSAiIjsKKyAgICBpZiAo ISpob3N0bmFtZSB8fCAhKnN2Y25hbWUpIHJldHVybigtMSk7CisKKyAgICAKKyAgICBzZXJ2aWNl ID0gY2tnZXRzZXJ2aWNlKGhvc3RuYW1lLHN2Y25hbWUsaHR0cF9pcCwyMCk7CisKKyAgICBpZiAo c2VydmljZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICggIXF1aWV0ICkKKyAgICAgICAgICAgIHBy aW50ZigiP0ludmFsaWQgc2VydmljZTogJXNcclxuIixzdmNuYW1lKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisKKyAgICAvKiBGb3IgSFRUUCBjb25uZWN0aW9ucyB3ZSBtdXN0IHByZXNl cnZlIHRoZSBvcmlnaW5hbCBob3N0bmFtZSBhbmQgKi8KKyAgICAvKiBzZXJ2aWNlIHJlcXVlc3Rl ZCBzbyB3ZSBjYW4gaW5jbHVkZSB0aGVtIGluIHRoZSBIb3N0IGhlYWRlci4gICAgKi8KKyAgICBj a21ha21zZyhodHRwX2hvc3RfcG9ydCxzaXplb2YoaHR0cF9ob3N0X3BvcnQpLGhvc3RuYW1lLCI6 IiwKKyAgICAgICAgICAgICAgY2t1aXRvYShudG9ocyhzZXJ2aWNlLT5zX3BvcnQpKSxOVUxMKTsK KyAgICBodHRwX3BvcnQgPSBudG9ocyhzZXJ2aWNlLT5zX3BvcnQpOworICAgIGh0dHBfc3NsID0g dXNlX3NzbDsKKyAgICBkZWJ1ZyhGMTExLCJodHRwX29wZW4iLGh0dHBfaG9zdF9wb3J0LGh0dHBf cG9ydCk7CisKKyAgICAvKiAnaHR0cF9pcCcgY29udGFpbnMgdGhlIElQIGFkZHJlc3MgdG8gd2hp Y2ggd2Ugd2FudCB0byBjb25uZWN0ICAgICAgICAqLworICAgIC8qICdzdmNuYW0nICAgY29udGFp bnMgdGhlIHNlcnZpY2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisg ICAgLyogJ3NlcnZpY2UtPnNfcG9ydCcgY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIGluIG5ldHdv cmsgYnl0ZSBvcmRlciAgICAgKi8KKworICAgIC8qIElmIHdlIGFyZSB1c2luZyBhbiBodHRwIHBy b3h5LCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGJ1ZmZlciBjb250YWluaW5nICovCisgICAgLyogICBo b3N0bmFtZTpwb3J0LW51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KKyAgICAvKiB0byBwYXNzIHRvIHRoZSBodHRwX2Nvbm5lY3QoKSBmdW5jdGlv bi4gIFRoZW4gd2UgbmVlZCB0byByZXBsYWNlICAgICAqLworICAgIC8qICduYW1lY29weScgd2l0 aCB0aGUgbmFtZSBvZiB0aGUgcHJveHkgc2VydmVyIGFuZCB0aGUgc2VydmljZS0+c19wb3J0ICov CisgICAgLyogd2l0aCB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHByb3h5IChkZWZhdWx0IHBvcnQg ODApLiAgICAgICAgICAgICAgICAgKi8KKworICAgIGlmICggdGNwX2h0dHBfcHJveHkgKSB7CisK KyAgICAgICAgY2ttYWttc2cocHJveHljb3B5LHNpemVvZihwcm94eWNvcHkpLGhvc3RuYW1lLCI6 IiwKKyAgICAgICAgICAgICAgICAgY2t1aXRvYShudG9ocyhzZXJ2aWNlLT5zX3BvcnQpKSxOVUxM KTsKKyAgICAgICAgY2tzdHJuY3B5KG5hbWVjb3B5LHRjcF9odHRwX3Byb3h5LE5BTUVDUFlMKTsK KworICAgICAgICBwID0gbmFtZWNvcHk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBXYXMgYSBz ZXJ2aWNlIHJlcXVlc3RlZD8gKi8KKyAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0g JzonKSBwKys7IC8qIExvb2sgZm9yIGNvbG9uICovCisgICAgICAgIGlmICgqcCA9PSAnOicpIHsg ICAgICAgICAgICAgICAgICAgIC8qIEhhdmUgYSBjb2xvbiAqLworICAgICAgICAgICAgZGVidWco RjExMCwiaHR0cF9vcGVuIG5hbWUgaGFzIGNvbG9uIixuYW1lY29weSwwKTsKKyAgICAgICAgICAg ICpwKysgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgLyogR2V0IHNlcnZpY2UgbmFtZSBvciBu dW1iZXIgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0cmNweSgrK3AsImh0dHAi KTsKKyAgICAgICAgfQorCisgICAgICAgIHNlcnZpY2UgPSBja2dldHNlcnZpY2UobmFtZWNvcHks cCxodHRwX2lwLDIwKTsKKyAgICAgICAgaWYgKCFzZXJ2aWNlKSB7CisgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkNhbid0IGZpbmQgcG9ydCBmb3Igc2VydmljZSAlc1xuIiwgcCk7CisjaWZk ZWYgVEdWT1JXSU4KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBjYW4ndCBnZXQg c2VydmljZSBmb3IgcHJveHkiLCIiLHNvY2tldF9lcnJubyk7CisjZWxzZQorICAgICAgICAgICAg ZGVidWcoRjEwMSwiaHR0cF9vcGVuIGNhbid0IGdldCBzZXJ2aWNlIGZvciBwcm94eSIsIiIsZXJy bm8pOworI2VuZGlmIC8qIFRHVk9SV0lOICovCisgICAgICAgICAgICBlcnJubyA9IDA7ICAgICAg ICAgICAgICAgICAgLyogKHJhdGhlciB0aGFuIG1pc2xlYWQpICovCisgICAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICB9CisKKyAgICAgICAgLyogY29weSB0aGUgcHJveHluYW1lIGFuZCBy ZW1vdmUgdGhlIHNlcnZpY2UgaWYgYW55IHNvIHdlIGNhbiB1c2UgCisgICAgICAgICAqIGl0IGFz IHRoZSBob3N0bmFtZSAKKyAgICAgICAgICovCisgICAgICAgIGNrc3RybmNweShuYW1lY29weSx0 Y3BfaHR0cF9wcm94eSxOQU1FQ1BZTCk7CisgICAgICAgIHAgPSBuYW1lY29weTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIFdhcyBhIHNlcnZpY2UgcmVxdWVzdGVkPyAqLworICAgICAgICB3aGls ZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnOicpIHArKzsgLyogTG9vayBmb3IgY29sb24gKi8KKyAg ICAgICAgaWYgKCpwID09ICc6JykgeyAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBhIGNvbG9u ICovCisgICAgICAgICAgICAqcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgIC8qIHRlcm1p bmF0ZSBzdHJpbmcgKi8KKyAgICAgICAgfSAgICAgICAgCisgICAgICAgIGhvc3RuYW1lID0gbmFt ZWNvcHk7ICAgICAgICAgICAgICAgIC8qIHVzZSBwcm94eSBhcyBob3N0bmFtZSAqLworICAgIH0K KworICAgIC8qIFNldCB1cCBzb2NrZXQgc3RydWN0dXJlIGFuZCBnZXQgaG9zdCBhZGRyZXNzICov CisgICAgYnplcm8oKGNoYXIgKikmcl9hZGRyLCBzaXplb2Yocl9hZGRyKSk7CisgICAgZGVidWco RjEwMCwiaHR0cF9vcGVuIGJ6ZXJvIG9rIiwiIiwwKTsKKworI2lmZGVmIElOQUREUl9OT05FCisg ICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIElOQUREUl9OT05FIGRlZmluZWQiLCIiLElOQUREUl9O T05FKTsKKyNlbHNlIC8qIElOQUREUl9OT05FICovCisgICAgZGVidWcoRjEwMCwiaHR0cF9vcGVu IElOQUREUl9OT05FIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBJTkFERFJfTk9ORSAq LworI2lmZGVmIElOQUREUlgKKyAgICBkZWJ1ZyhGMTAwLCJodHRwX29wZW4gSU5BRERSWCBkZWZp bmVkIiwiIiwwKTsKKyNlbHNlIC8qIElOQUREUlggKi8KKyAgICBkZWJ1ZyhGMTAwLCJodHRwX29w ZW4gSU5BRERSWCBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogSU5BRERSWCAqLworCisj aWZuZGVmIE5PTUhIT1NUCisjaWZkZWYgSU5BRERSWAorICAgIGlheCA9IGluZXRfYWRkcihodHRw X2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUpOworICAgIGRlYnVnKEYxMTEsImh0dHBfb3BlbiBpbmV0 X2FkZHIiLGh0dHBfaXBbMF0/aHR0cF9pcDpob3N0bmFtZSxpYXguc19hZGRyKTsKKyNlbHNlIC8q IElOQUREUlggKi8KKyNpZmRlZiBJTkFERFJfTk9ORQorICAgIGlheC5zX2FkZHIgPSBpbmV0X2Fk ZHIoaHR0cF9pcFswXT9odHRwX2lwOmhvc3RuYW1lKTsKKyAgICBkZWJ1ZyhGMTExLCJodHRwX29w ZW4gaW5ldF9hZGRyIixodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUsaWF4LnNfYWRkcik7Cisj ZWxzZSAvKiBJTkFERFJfTk9ORSAqLworI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAgIGlheCA9ICh1 bnNpZ25lZCBpbnQpIGluZXRfYWRkcihodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUpOworI2Vs c2UKKyAgICBpYXggPSAtMUw7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICBkZWJ1ZyhG MTExLCJodHRwX29wZW4gaW5ldF9hZGRyIixodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUsaWF4 KTsKKyNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLworI2VuZGlmIC8qIElOQUREUlggKi8KKworICAg IGRucyA9IDA7CisgICAgaWYgKAorI2lmZGVmIElOQUREUl9OT05FCisvKiBUaGlzIG1pZ2h0IGdp dmUgd2FybmluZ3Mgb24gNjQtYml0IHBsYXRmb3JtcyBidXQgdGhleSBzaG91bGQgYmUgaGFybWxl c3MgKi8KKy8qIGJlY2F1c2UgSU5BRERSX05PTkUgc2hvdWxkIGJlIGFsbCAxJ3MgYW55d2F5LCB0 aHVzIHRoZSBPUiBwYXJ0IGlzICovCisvKiBwcm9iYWJseSBzdXBlcmZsdW91cyAtLSBub3Qgc3Vy ZSB3aHkgaXQncyBldmVuIHRoZXJlLCBtYXliZSBpdCBzaG91bGQgYmUgKi8KKy8qIHJlbW92ZWQu ICovCisgICAgICAgIGlheC5zX2FkZHIgPT0gSU5BRERSX05PTkUgLyogfHwgaWF4LnNfYWRkciA9 PSAodW5zaWduZWQgbG9uZykgLTFMICovCisjZWxzZSAvKiBJTkFERFJfTk9ORSAqLworICAgICAg ICBpYXggPT0gLTEKKyNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLworICAgICAgICApIHsKKyAgICAg ICAgaWYgKCFxdWlldCkgeworICAgICAgICAgICAgcHJpbnRmKCIgRE5TIExvb2t1cC4uLiAiKTsK KyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICB9CisgICAgICAgIGlmICgoaG9z dCA9IGdldGhvc3RieW5hbWUoaHR0cF9pcFswXSA/IGh0dHBfaXAgOiBob3N0bmFtZSkpICE9IE5V TEwpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfb3BlbiBnZXRob3N0YnluYW1lICE9 IE5VTEwiLCIiLDApOworICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0ZW50KGhvc3QpOwor ICAgICAgICAgICAgZG5zID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHdlIHBl cmZvcm1lZCBkbnMgbG9va3VwICovCisgICAgICAgICAgICByX2FkZHIuc2luX2ZhbWlseSA9IGhv c3QtPmhfYWRkcnR5cGU7CisgICAgICAgICAgICBpZiAodGNwX3JkbnMgJiYgaG9zdC0+aF9uYW1l ICYmIGhvc3QtPmhfbmFtZVswXSAmJiAocmRuc19sZW4gPiAwKQorICAgICAgICAgICAgICAgICAm JiAodGNwX2h0dHBfcHJveHkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgKQorICAgICAgICAg ICAgICAgIGNrbWFrbXNnKHJkbnNfbmFtZSxyZG5zX2xlbixob3N0LT5oX25hbWUsIjoiLHN2Y25h bWUsTlVMTCk7CisKKyNpZmRlZiBIQUREUkxJU1QKKyNpZmRlZiBoX2FkZHIKKyAgICAgICAgICAg IC8qIFRoaXMgaXMgZm9yIHRyeWluZyBtdWx0aXBsZSBJUCBhZGRyZXNzZXMgLSBzZWUgPG5ldGRi Lmg+ICovCisgICAgICAgICAgICBpZiAoIShob3N0LT5oX2FkZHJfbGlzdCkpCisgICAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHJfbGlzdFswXSwK KyAgICAgICAgICAgICAgICAgIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIsCisgICAgICAgICAg ICAgICAgICBob3N0LT5oX2xlbmd0aAorICAgICAgICAgICAgICAgICAgKTsKKyNlbHNlCisgICAg ICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90KSZyX2FkZHIuc2luX2FkZHIsIGhv c3QtPmhfbGVuZ3RoKTsKKyNlbmRpZiAvKiBoX2FkZHIgKi8KKyNlbHNlICAvKiBIQUREUkxJU1Qg Ki8KKyAgICAgICAgICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3QpJnJfYWRkci5zaW5f YWRkciwgaG9zdC0+aF9sZW5ndGgpOworI2VuZGlmIC8qIEhBRERSTElTVCAqLworI2lmZGVmIENP TU1FTlQKKyNpZm5kZWYgRVhDRUxBTgorICAgICAgICAgICAgZGVidWcoRjExMSwiQkNPUFkiLCJo b3N0LT5oX2FkZHIiLGhvc3QtPmhfYWRkcik7CisjZW5kaWYgLyogRVhDRUxBTiAqLworICAgICAg ICAgICAgZGVidWcoRjExMSwiQkNPUFkiLCIgKGNhZGRyX3QpJnJfYWRkci5zaW5fYWRkciIsCisg ICAgICAgICAgICAgICAgICAoY2FkZHJfdCkmcl9hZGRyLnNpbl9hZGRyKTsKKyAgICAgICAgICAg IGRlYnVnKEYxMTEsIkJDT1BZIiwiIHJfYWRkci5zaW5fYWRkci5zX2FkZHIiLAorICAgICAgICAg ICAgICAgICAgcl9hZGRyLnNpbl9hZGRyLnNfYWRkcik7CisjZW5kaWYJLyogQ09NTUVOVCAqLwor ICAgICAgICAgICAgZGVidWcoRjExMSwiQkNPUFkiLCJob3N0LT5oX2xlbmd0aCIsaG9zdC0+aF9s ZW5ndGgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PTUhIT1NUICovCisKKyAgICBp ZiAoIWRucykgeworI2lmZGVmIElOQUREUlgKKy8qIGluZXRfYWRkcigpIGlzIG9mIHR5cGUgc3Ry dWN0IGluX2FkZHIgKi8KKyAgICAgICAgc3RydWN0IGluX2FkZHIgaW5hOworICAgICAgICB1bnNp Z25lZCBsb25nIHV1OworICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX29wZW4gZ2V0aG9zdGJ5bmFt ZSA9PSBOVUxMOiBJTkFERFJYIiwiIiwwKTsKKyAgICAgICAgaW5hID0gaW5ldF9hZGRyKGh0dHBf aXBbMF0/aHR0cF9pcDpob3N0bmFtZSk7CisgICAgICAgIHV1ID0gKih1bnNpZ25lZCBpbnQgKikm aW5hOworI2Vsc2UgLyogTm90IElOQUREUlggKi8KKy8qIGluZXRfYWRkcigpIGlzIHVuc2lnbmVk IGxvbmcgKi8KKyAgICAgICAgdW5zaWduZWQgbG9uZyB1dTsKKyAgICAgICAgZGVidWcoRjEwMCwi aHR0cF9vcGVuIGdldGhvc3RieW5hbWUgPT0gTlVMTDogTm90IElOQUREUlgiLCIiLDApOworICAg ICAgICB1dSA9IGluZXRfYWRkcihodHRwX2lwWzBdP2h0dHBfaXA6aG9zdG5hbWUpOworI2VuZGlm IC8qIElOQUREUlggKi8KKyAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9vcGVuIHV1IiwiIix1dSk7 CisgICAgICAgIGlmICgKKyNpZmRlZiBJTkFERFJfTk9ORQorICAgICAgICAgICAgISh1dSA9PSBJ TkFERFJfTk9ORSB8fCB1dSA9PSAodW5zaWduZWQgaW50KSAtMUwpCisjZWxzZSAgIC8qIElOQURE Ul9OT05FICovCisgICAgICAgICAgICB1dSAhPSAoKHVuc2lnbmVkIGxvbmcpLTEpCisjZW5kaWYg LyogSU5BRERSX05PTkUgKi8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgcl9hZGRyLnNp bl9hZGRyLnNfYWRkciA9IHV1OworICAgICAgICAgICAgcl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9J TkVUOworICAgICAgICB9IGVsc2UgeworI2lmZGVmIFZNUworICAgICAgICAgICAgZnByaW50Zihz dGRvdXQsICJcclxuIik7ICAgIC8qIGNvbXBsZXRlIGFueSBwcmV2aW91cyBtZXNzYWdlICovCisj ZW5kaWYgLyogVk1TICovCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGdldCBh ZGRyZXNzIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGh0dHBfaXBbMF0/aHR0cF9p cDpob3N0bmFtZSk7CisjaWZkZWYgVEdWT1JXSU4KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0 dHBfb3BlbiBjYW4ndCBnZXQgYWRkcmVzcyIsIiIsc29ja2V0X2Vycm5vKTsKKyNlbHNlCisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX29wZW4gY2FuJ3QgZ2V0IGFkZHJlc3MiLCIiLGVycm5v KTsKKyNlbmRpZiAvKiBUR1ZPUldJTiAqLworICAgICAgICAgICAgZXJybm8gPSAwOyAgICAgICAg ICAgICAgICAgIC8qIFJhdGhlciB0aGFuIG1pc2xlYWQgKi8KKyAgICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBHZXQgYSBmaWxlIGRlc2NyaXB0b3IgZm9y IHRoZSBjb25uZWN0aW9uLiAqLworCisgICAgcl9hZGRyLnNpbl9wb3J0ID0gc2VydmljZS0+c19w b3J0OworICAgIGNrc3RybmNweShodHRwX2lwLChjaGFyICopaW5ldF9udG9hKHJfYWRkci5zaW5f YWRkciksMjApOworICAgIGRlYnVnKEYxMTAsImh0dHBfb3BlbiB0cnlpbmciLGh0dHBfaXAsMCk7 CisgICAgaWYgKCFxdWlldCAmJiAqaHR0cF9pcCkgeworICAgICAgICBwcmludGYoIiBUcnlpbmcg JXMuLi4gIiwgaHR0cF9pcCk7CisgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgIH0KKworICAg IC8qIExvb3AgdG8gdHJ5IGFkZGl0aW9uYWwgSVAgYWRkcmVzc2VzLCBpZiBhbnkuICovCisKKyAg ICBkbyB7CisjaWZkZWYgRVhDRUxBTgorICAgICAgICBzZW5kX3NvY2tldC5zaW5fZmFtaWx5ID0g QUZfSU5FVDsKKyAgICAgICAgc2VuZF9zb2NrZXQuc2luX2FkZHIuc19hZGRyID0gMDsKKyAgICAg ICAgc2VuZF9zb2NrZXQuc2luX3BvcnQgPSAwOworICAgICAgICBpZiAoKGh0dHBmZCA9IHNvY2tl dChTT0NLX1NUUkVBTSwgKHN0cnVjdCBzb2NrcHJvdG8gKikwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZzZW5kX3NvY2tldCwgU09fUkVVU0VBRERSKSkgPCAwKQorI2Vsc2UgIC8qIEVY Q0VMQU4gKi8KKyAgICAgICAgaWYgKChodHRwZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJF QU0sIDApKSA8IDApCisjZW5kaWYgLyogRVhDRUxBTiAqLworICAgICAgICAgICAgeworI2lmZGVm IEVYQ0VMQU4KKyAgICAgICAgICAgICAgICBleHBlcnJvcigiVENQIHNvY2tldCBlcnJvciIpOwor I2Vsc2UKKyNpZmRlZiBUR1ZPUldJTgorI2lmZGVmIE9MRF9UV0cKKyAgICAgICAgICAgICAgICBl cnJubyA9IHNvY2tldF9lcnJubzsKKyNlbmRpZiAvKiBPTERfVFdHICovCisgICAgICAgICAgICAg ICAgc29ja2V0X3BlcnJvcigiVENQIHNvY2tldCBlcnJvciIpOworICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsImh0dHBfb3BlbiBzb2NrZXQgZXJyb3IiLCIiLHNvY2tldF9lcnJubyk7CisjZWxz ZQorICAgICAgICAgICAgICAgIHBlcnJvcigiVENQIHNvY2tldCBlcnJvciIpOworICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBzb2NrZXQgZXJyb3IiLCIiLGVycm5vKTsKKyNl bmRpZiAvKiBUR1ZPUldJTiAqLworI2VuZGlmIC8qIEVYQ0VMQU4gKi8KKyAgICAgICAgICAgICAg ICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZXJybm8gPSAwOworCisgICAg ICAgLyogSWYgYSBzcGVjaWZpYyBUQ1AgYWRkcmVzcyBvbiB0aGUgbG9jYWwgaG9zdCBpcyBkZXNp cmVkIHdlICovCisgICAgICAgLyogbXVzdCBiaW5kIGl0IHRvIHRoZSBzb2NrZXQuICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgICAgICBp ZiAodGNwX2FkZHJlc3MpIHsKKyAgICAgICAgICAgICBpbnQgc19lcnJubzsKKworICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImh0dHBfb3BlbiBiaW5kaW5nIHNvY2tldCB0byIsdGNwX2FkZHJlc3Ms MCk7CisgICAgICAgICAgICAgYnplcm8oKGNoYXIgKikmc2luLHNpemVvZihzaW4pKTsKKyAgICAg ICAgICAgICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSU5BRERSWAorICAgICAg ICAgICAgIGluYWRkcnggPSBpbmV0X2FkZHIodGNwX2FkZHJlc3MpOworICAgICAgICAgICAgIHNp bi5zaW5fYWRkci5zX2FkZHIgPSAqKHVuc2lnbmVkIGxvbmcgKikmaW5hZGRyeDsKKyNlbHNlCisg ICAgICAgICAgICAgc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcih0Y3BfYWRkcmVzcyk7 CisjZW5kaWYgLyogSU5BRERSWCAqLworICAgICAgICAgICAgIHNpbi5zaW5fcG9ydCA9IDA7Cisg ICAgICAgICAgICAgaWYgKGJpbmQoaHR0cGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6 ZW9mKHNpbikpIDwgMCkgeworICAgICAgICAgICAgICAgICBzX2Vycm5vID0gc29ja2V0X2Vycm5v OyAvKiBTYXZlIGVycm9yIGNvZGUgKi8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICAgICAgICAg ICBzb2NrZXRfY2xvc2UoaHR0cGZkKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgICAg ICAgICAgIGNsb3NlKGh0dHBmZCk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICAgICAgICAg ICAgICAgaHR0cGZkID0gLTE7CisgICAgICAgICAgICAgICAgIGVycm5vID0gc19lcnJubzsgICAg ICAgLyogYW5kIHJlcG9ydCB0aGlzIGVycm9yICovCisgICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsImh0dHBfb3BlbiBiaW5kIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCisKKy8qIE5vdyBjb25uZWN0IHRvIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyIGVuZC4g Ki8KKworI2lmZGVmIEVYQ0VMQU4KKyAgICAgICAgaWYgKGNvbm5lY3QoaHR0cGZkLCAmcl9hZGRy KSA8IDApCisjZWxzZQorI2lmZGVmIE5UCisgICAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMTsK KyNlbmRpZiAvKiBOVCAqLworICAgICAgICBpZiAoY29ubmVjdChodHRwZmQsIChzdHJ1Y3Qgc29j a2FkZHIgKikmcl9hZGRyLCBzaXplb2Yocl9hZGRyKSkgPCAwKQorI2VuZGlmIC8qIEVYQ0VMQU4g Ki8KKyAgICAgICAgICB7CisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgV1NBU2FmZVRvQ2FuY2Vs ID0gMDsKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgICBpID0gc29j a2V0X2Vycm5vOworI2Vsc2UgLyogT1MyICovCisjaWZkZWYgVEdWT1JXSU4KKyAgICAgICAgICAg ICAgaSA9IHNvY2tldF9lcnJubzsKKyNlbHNlCisgICAgICAgICAgICAgIGkgPSBlcnJubzsgICAg ICAgICAgICAgICAgLyogU2F2ZSBlcnJvciBjb2RlICovCisjZW5kaWYgLyogVEdWT1JXSU4gKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBIQUREUkxJU1QKKyNpZmRlZiBoX2FkZHIKKyAgICAg ICAgICAgICAgaWYgKGhvc3QgJiYgaG9zdC0+aF9hZGRyX2xpc3QgJiYgaG9zdC0+aF9hZGRyX2xp c3RbMV0pIHsKKyAgICAgICAgICAgICAgICAgIHBlcnJvcigiIik7CisgICAgICAgICAgICAgICAg ICBob3N0LT5oX2FkZHJfbGlzdCsrOworICAgICAgICAgICAgICAgICAgYmNvcHkoaG9zdC0+aF9h ZGRyX2xpc3RbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAoY2FkZHJfdCkmcl9hZGRyLnNp bl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+aF9sZW5ndGgpOworCisgICAg ICAgICAgICAgICAgICBja3N0cm5jcHkoaHR0cF9pcCwoY2hhciAqKWluZXRfbnRvYShyX2FkZHIu c2luX2FkZHIpLDIwKTsKKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImh0dHBfb3BlbiBo X2FkZHJfbGlzdCIsaHR0cF9pcCwwKTsKKyAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQgJiYg Kmh0dHBfaXApIHsKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBUcnlpbmcgJXMuLi4g IiwgaHR0cF9pcCk7CisgICAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAg ICAgICAgICAgICAgICB9CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgICAgICAgIHNvY2tl dF9jbG9zZShodHRwZmQpOyAvKiBDbG9zZSBpdC4gKi8KKyNlbHNlCisgICAgICAgICAgICAgICAg ICBjbG9zZShodHRwZmQpOworI2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIGhfYWRkciAqLworI2VuZGlm ICAvKiBIQUREUkxJU1QgKi8KKyAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICAg ICAgICBodHRwZmQgPSAtMTsKKyAgICAgICAgICAgICAgZXJybm8gPSBpOyAgICAgICAgICAgICAg ICAvKiBBbmQgcmVwb3J0IHRoaXMgZXJyb3IgKi8KKyNpZmRlZiBFWENFTEFOCisgICAgICAgICAg ICAgIGlmIChlcnJubykgZXhwZXJyb3IoImh0dHBfb3BlbiBjb25uZWN0Iik7CisjZWxzZQorI2lm ZGVmIFRHVk9SV0lOCisgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfb3BlbiBjb25uZWN0 IGVycm9yIiwiIixzb2NrZXRfZXJybm8pOworICAgICAgICAgICAgICAvKiBpZiAoZXJybm8pIHNv Y2tldF9wZXJyb3IoImh0dHBfb3BlbiBjb25uZWN0Iik7ICovCisjaWZkZWYgT0xEX1RXRworICAg ICAgICAgICAgICBlcnJubyA9IHNvY2tldF9lcnJubzsKKyNlbmRpZiAvKiBPTERfVFdHICovCisg ICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgc29ja2V0X3BlcnJvcigi aHR0cF9vcGVuIGNvbm5lY3QiKTsKKyNlbHNlIC8qIFRHVk9SV0lOICovCisgICAgICAgICAgICAg IGRlYnVnKEYxMDEsImh0dHBfb3BlbiBjb25uZWN0IGVycm5vIiwiIixlcnJubyk7CisjaWZkZWYg Vk1TCisgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgcGVycm9yKCJc clxuRmFpbGVkIik7CisjZWxzZQorICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAg ICAgICAgIHBlcnJvcigiRmFpbGVkIik7CisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgREVDX1RD UElQCisgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAgICAgICAgICAgICAgcGVycm9yKCJo dHRwX29wZW4gY29ubmVjdCIpOworI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworI2lmZGVmIENNVV9U Q1BJUAorICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgIHBlcnJvcigi aHR0cF9vcGVuIGNvbm5lY3QiKTsKKyNlbmRpZiAvKiBDTVVfVENQSVAgKi8KKyNlbmRpZiAvKiBU R1ZPUldJTiAqLworI2VuZGlmIC8qIEVYQ0VMQU4gKi8KKyAgICAgICAgICAgICAgcmV0dXJuKC0x KTsKKyAgICAgICAgICB9CisjaWZkZWYgTlQKKyAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsK KyNlbmRpZiAvKiBOVCAqLworICAgICAgICBpc2Nvbm5lY3QgPSAxOworICAgIH0gd2hpbGUgKCFp c2Nvbm5lY3QpOworCisjaWZkZWYgTk9OX0JMT0NLX0lPCisgICAgb24gPSAxOworICAgIHggPSBz b2NrZXRfaW9jdGwoaHR0cGZkLEZJT05CSU8sJm9uKTsKKyAgICBkZWJ1ZyhGMTAxLCJodHRwX29w ZW4gRklPTkJJTyIsIiIseCk7CisjZW5kaWYgLyogTk9OX0JMT0NLX0lPICovCisKKyAgICAvKiBX ZSBoYXZlIHN1Y2NlZWRlZCBpbiBjb25uZWN0aW5nIHRvIHRoZSBIVFRQIFBST1hZLiAgU28gbm93 IHdlICAgKi8KKyAgICAvKiBuZWVkIHRvIGF0dGVtcHQgdG8gY29ubmVjdCB0aHJvdWdoIHRoZSBw cm94eSB0byB0aGUgYWN0dWFsIGhvc3QgKi8KKyAgICAvKiBJZiB0aGF0IGlzIHN1Y2Nlc3NmdWws IHdlIGhhdmUgdG8gcHJldGVuZCB0aGF0IHdlIG1hZGUgYSBkaXJlY3QgKi8KKyAgICAvKiBjb25u ZWN0aW9uIHRvIHRoZSBhY3R1YWwgaG9zdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KKworICAgIGlmICggdGNwX2h0dHBfcHJveHkgKSB7CisjaWZkZWYgT1MyCisgICAgICAg IGlmICghYWdlbnQpIAorCSAgYWdlbnQgPSAiS2VybWl0IDk1IjsJLyogRGVmYXVsdCB1c2VyIGFn ZW50ICovCisjZWxzZQorICAgICAgICBpZiAoIWFnZW50KSAKKwkgIGFnZW50ID0gIkMtS2VybWl0 IjsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgICBpZiAoaHR0cF9jb25uZWN0KGh0dHBmZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV9hZ2VudCA/IHRjcF9odHRw X3Byb3h5X2FnZW50IDogYWdlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV91c2VyLAorICAgICAgICAgICAg ICAgICAgICAgICAgIHRjcF9odHRwX3Byb3h5X3B3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5Y29weQorICAgICAgICAgICAgICAg ICAgICAgICAgICkgPCAwKSB7CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfQorCisjaWZkZWYgU09fT09CSU5MSU5FCisg ICAgLyogU2VlIG5vdGUgb24gU09fT09CSU5MSU5FIGluIG5ldG9wZW4oKSAqLworI2lmZGVmIGRh dGFnZW5lcmFsCisgICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElO RSwoY2hhciAqKSAmb24sIHNpemVvZiBvbik7CisjZWxzZQorI2lmZGVmIEJTRDQzCisgICAgc2V0 c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNp emVvZiBvbik7CisjZWxzZQorI2lmZGVmIE9TRjEKKyAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09M X1NPQ0tFVCwgU09fT09CSU5MSU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisj aWZkZWYgUE9TSVgKKyAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5M SU5FLChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgTU9UU1Y4OFI0Cisg ICAgc2V0c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAm b24sIHNpemVvZiBvbik7CisjZWxzZQorI2lmZGVmIFNPTEFSSVMKKy8qCisgIE1heWJlIHRoaXMg YXBwbGllcyB0byBhbGwgU1ZSNCB2ZXJzaW9ucywgYnV0IHRoZSBvdGhlciAoZWxzZSkgd2F5IGhh cyBiZWVuCisgIGNvbXBpbGluZyBhbmQgd29ya2luZyBmaW5lIG9uIGFsbCB0aGUgb3RoZXJzLCBz byBiZXN0IG5vdCB0byBjaGFuZ2UgaXQuCisqLworICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xf U09DS0VULCBTT19PT0JJTkxJTkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UKKyNp ZmRlZiBPU0sKKyAgICBzZXRzb2Nrb3B0KGh0dHBmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5F LChjaGFyICopICZvbiwgc2l6ZW9mIG9uKTsKKyNlbHNlCisjaWZkZWYgT1MyCisgICAgeworICAg ICAgICBpbnQgcmM7CisgICAgICAgIHJjID0gc2V0c29ja29wdChodHRwZmQsCisgICAgICAgICAg ICAgICAgICAgICAgICBTT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgU09fT09C SU5MSU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgJm9uLAorICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mIG9uCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICBkZWJ1ZyhGMTExLCJzZXRzb2Nrb3B0IFNPX09PQklOTElORSIsb24gPyAib24iIDogIm9m ZiIgLHJjKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIFZNUyAvKiBvciwgYXQgbGVhc3QsIFZNUyB3 aXRoIGdjYyAqLworICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09DS0VULCBTT19PT0JJTkxJ TkUsKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworI2Vsc2UKKyNpZmRlZiBDTElYCisgICAgc2V0 c29ja29wdChodHRwZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwoY2hhciAqKSAmb24sIHNp emVvZiBvbik7CisjZWxzZQorICAgIHNldHNvY2tvcHQoaHR0cGZkLCBTT0xfU09DS0VULCBTT19P T0JJTkxJTkUsICZvbiwgc2l6ZW9mIG9uKTsKKyNlbmRpZiAvKiBDTElYICovCisjZW5kaWYgLyog Vk1TICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogU09M QVJJUyAqLworI2VuZGlmIC8qIE1PVFNWODhSNCAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5k aWYgLyogQlNENDMgKi8KKyNlbmRpZiAvKiBPU0YxICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KKyNlbmRpZiAvKiBTT19PT0JJTkxJTkUgKi8KKworI2lmbmRlZiBOT1RDUE9QVFMKKyNpZm5k ZWYgZGF0YWdlbmVyYWwKKyNpZmRlZiBTT0xfU09DS0VUCisjaWZkZWYgVENQX05PREVMQVkKKyAg ICBub19kZWxheSh0dHlmZCx0Y3Bfbm9kZWxheSk7CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8K KyNpZmRlZiBTT19LRUVQQUxJVkUKKyAgICBrZWVwYWxpdmUodHR5ZmQsdGNwX2tlZXBhbGl2ZSk7 CisjZW5kaWYgLyogU09fS0VFUEFMSVZFICovCisjaWZkZWYgU09fTElOR0VSCisgICAgY2tfbGlu Z2VyKHR0eWZkLHRjcF9saW5nZXIsIHRjcF9saW5nZXJfdG1vKTsKKyNlbmRpZiAvKiBTT19MSU5H RVIgKi8KKyNpZmRlZiBTT19TTkRCVUYKKyAgICBzZW5kYnVmKHR0eWZkLHRjcF9zZW5kYnVmKTsK KyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KKyNpZmRlZiBTT19SQ1ZCVUYKKyAgICByZWN2YnVmKHR0 eWZkLHRjcF9yZWN2YnVmKTsKKyNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KKyNlbmRpZiAvKiBTT0xf U09DS0VUICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBOT1RDUE9QVFMg Ki8KKworI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAgIC8qIEZpbmQgb3V0IG91ciBvd24gSVAgYWRk cmVzcy4gKi8KKyAgICAvKiBXZSBuZWVkIHRoZSBsX2FkZHIgc3RydWN0dXJlIGZvciBbRV1LTE9H SU4uICovCisgICAgbF9zbGVuID0gc2l6ZW9mKGxfYWRkcik7CisgICAgYnplcm8oKGNoYXIgKikm bF9hZGRyLCBsX3NsZW4pOworI2lmbmRlZiBFWENFTEFOCisgICAgaWYgKCFnZXRzb2NrbmFtZSho dHRwZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbF9hZGRyLCAmbF9zbGVuKSkgeworICAgICAgICBj aGFyICogcyA9IChjaGFyICopaW5ldF9udG9hKGxfYWRkci5zaW5fYWRkcik7CisgICAgICAgIGNr c3RybmNweShteWlwYWRkciwgcywgMjApOworICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRzb2NrbmFt ZSIsbXlpcGFkZHIsMCk7CisgICAgfQorI2VuZGlmIC8qIEVYQ0VMQU4gKi8KKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworCisvKiBTZWUgbm90ZSBpbiBuZXRvcGVuKCkgb24gUmV2ZXJzZSBETlMg bG9va3VwcyAqLworICAgICBpZiAodGNwX3JkbnMgPT0gU0VUX09OKSB7CisjaWZkZWYgTlQKKyAg ICAgICAgaWYgKGlzV2luOTUoKSkKKyAgICAgICAgICBzbGVlcCgxKTsKKyNlbmRpZiAvKiBOVCAq LworICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAgICAgICBwcmludGYoIiBSZXZlcnNlIERO UyBMb29rdXAuLi4gIik7CisgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoaG9zdCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikmcl9hZGRyLnNpbl9hZGRy LDQsUEZfSU5FVCkpIHsKKyAgICAgICAgICAgIGNoYXIgKiBzOworICAgICAgICAgICAgaG9zdCA9 IGNrX2NvcHlob3N0ZW50KGhvc3QpOworICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9vcGVu IGdldGhvc3RieW5hbWUgIT0gTlVMTCIsIiIsMCk7CisgICAgICAgICAgICBpZiAoIXF1aWV0KSB7 CisgICAgICAgICAgICAgICAgcHJpbnRmKCIoT0spXG4iKTsKKyAgICAgICAgICAgICAgICBmZmx1 c2goc3Rkb3V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMgPSBob3N0LT5oX25hbWU7 CisgICAgICAgICAgICBpZiAoIXMpIHsgICAgICAgICAgICAgICAgICAgLyogVGhpcyBjYW4gaGFw cGVuLi4uICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9vcGVuIGhvc3QtPmhf bmFtZSBpcyBOVUxMIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBzID0gIiI7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICAvKiBTb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCBpbmV0X250b2EoKSBv biBIUFVYIDEwLnh4ICovCisgICAgICAgICAgICAvKiBUaGUgY29tcGlsZXIgc2F5cyAiSW50ZWdy YWwgdmFsdWUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gKi8KKyAgICAgICAgICAgIC8qIHBvaW50 ZXIgaW4gYXNzaWdubWVudC4iICBUaGUgcHJvdG90eXBlIGlzIHJpZ2h0IHRoZXJlICovCisgICAg ICAgICAgICAvKiBpbiA8YXJwYS9pbmV0Lmg+IHNvIHdoYXQncyB0aGUgcHJvYmxlbT8gKi8KKyAg ICAgICAgICAgIC8qIERpdHRvIGluIEhQLVVYIDUueCwgYnV0IG5vdCA4Lnggb3IgOS54Li4uICov CisgICAgICAgICAgICBpZiAoISpzKSB7ICAgICAgICAgICAgICAgICAgLyogTm8gbmFtZSBzbyBz dWJzdGl0dXRlIHRoZSBhZGRyZXNzICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0 cF9vcGVuIGhvc3QtPmhfbmFtZSBpcyBlbXB0eSIsIiIsMCk7CisgICAgICAgICAgICAgICAgcyA9 IGluZXRfbnRvYShyX2FkZHIuc2luX2FkZHIpOyAvKiBDb252ZXJ0IGFkZHJlc3MgdG8gc3RyaW5n ICovCisgICAgICAgICAgICAgICAgaWYgKCFzKSAgICAgICAgICAgICAgICAgLyogVHJ1c3QgTm8g MSAqLworICAgICAgICAgICAgICAgICAgcyA9ICIiOworICAgICAgICAgICAgICAgIGlmICgqcykg eyAgICAgICAgICAgICAgIC8qIElmIGl0IHdvcmtlZCwgdXNlIHRoaXMgc3RyaW5nICovCisgICAg ICAgICAgICAgICAgICAgIGNrc3RybmNweShodHRwX2lwLHMsMjApOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBzID0gaHR0cF9pcDsgICAgICAgICAgICAgLyogT3RoZXJ3aXNl IHN0aWNrIHdpdGggdGhlIElQICovCisgICAgICAgICAgICAgICAgaWYgKCEqcykgICAgICAgICAg ICAgICAgIC8qIG9yIGZhaWxpbmcgdGhhdCAqLworICAgICAgICAgICAgICAgICAgcyA9IGh0dHBf aG9zdF9wb3J0OyAgICAvKiB0aGUgbmFtZSB3ZSB3ZXJlIGNhbGxlZCB3aXRoLiAqLworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKCpzKSAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVy biB0aGUgcmRucyBuYW1lICovCisgICAgICAgICAgICAgICAgY2ttYWttc2cocmRuc19uYW1lLHJk bnNfbGVuLHMsIjoiLHN2Y25hbWUsTlVMTCk7CisKKyAgICAgICAgICAgIGlmICghcXVpZXQgJiYg KnMKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgICAgICAgICAmJiAhZG9jb254CisjZW5kaWYgLyog Tk9JQ1AgKi8KKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiAl cyBjb25uZWN0ZWQgb24gcG9ydCAlc1xuIixzLAorICAgICAgICAgICAgICAgICAgICAgICBja3Vp dG9hKG50b2hzKHNlcnZpY2UtPnNfcG9ydCkpKTsKKyNpZmRlZiBCRVRBREVCVUcKKyAgICAgICAg ICAgICAgICAvKiBUaGlzIGlzIHNpbXBseSBmb3IgdGVzdGluZyB0aGUgRE5TIGVudHJpZXMgKi8K KyAgICAgICAgICAgICAgICBpZiAoaG9zdC0+aF9hbGlhc2VzKSB7CisgICAgICAgICAgICAgICAg ICAgIGNoYXIgKiogYSA9IGhvc3QtPmhfYWxpYXNlczsKKyAgICAgICAgICAgICAgICAgICAgd2hp bGUgKCphKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBhbGlhcyA9PiAlc1xu IiwqYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhKys7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQkVUQURFQlVHICovCisgICAgICAgICAg ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXF1aWV0KSBwcmludGYoIkZh aWxlZC5cbiIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghcXVpZXQpIHByaW50ZigiKE9L KVxuIik7CisgICAgaWYgKCFxdWlldCkgZmZsdXNoKHN0ZG91dCk7CisKKworICAgIGlmICggdGNw X2h0dHBfcHJveHkgKSB7CisgICAgICAgIC8qIEVyYXNlIHRoZSBJUCBhZGRyZXNzIHNpbmNlIHdl IGNhbm5vdCByZXVzZSBpdCAqLworICAgICAgICBodHRwX2lwWzBdID0gJ1wwJzsKKyAgICB9IGVs c2UgeworICAgICAgICAvKiBUaGlzIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBkb25lIGJ1dCBq dXN0IGluIGNhc2UgKi8KKyAgICAgICAgY2tzdHJuY3B5KGh0dHBfaXAsKGNoYXIgKilpbmV0X250 b2Eocl9hZGRyLnNpbl9hZGRyKSwyMCk7CisgICAgfQorICAgIG1ha2VzdHIoJmh0dHBfYWdlbnQs YWdlbnQpOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHVzZV9zc2wgJiYgY2tfc3NsZWF5X2lz X2luc3RhbGxlZCgpKSB7CisgICAgICAgIGlmICghc3NsX2h0dHBfaW5pdChob3N0bmFtZSkpIHsK KyAgICAgICAgICAgIGlmIChiaW9fZXJyIT1OVUxMKSB7CisgICAgICAgICAgICAgICAgQklPX3By aW50ZihiaW9fZXJyLCJzc2xfdG5faW5pdCgpIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAg RVJSX3ByaW50X2Vycm9ycyhiaW9fZXJyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs InNzbF90bl9pbml0KCkgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICBFUlJfcHJpbnRfZXJy b3JzX2ZwKHN0ZGVycik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7 CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9IGVsc2UgaWYgKCBja19zc2xfaHR0 cF9jbGllbnQoaHR0cGZkLGhvc3RuYW1lKSA8IDAgKSB7CisgICAgICAgICAgICBodHRwX2Nsb3Nl KCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IENLX1NTTCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisgICAgcmV0dXJuKDApOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KK30KKworaW50CisjaWZkZWYgQ0tfQU5T SUMKK2h0dHBfY2xvc2UoVk9JRCkKKyNlbHNlIC8qIENLX0FOU0lDICovCitodHRwX2Nsb3NlKCkK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCB4ID0gMDsKKyAgICBkZWJ1ZyhGMTAx LCJodHRwX2Nsb3NlIiwiIixodHRwZmQpOworCisjaWZkZWYgSFRUUF9CVUZGRVJJTkcKKyAgICBo dHRwX2NvdW50ID0gMDsKKyAgICBodHRwX2J1ZnAgPSAwOworI2VuZGlmCS8qIEhUVFBfQlVGRkVS SU5HICovCisKKyAgICBpZiAoaHR0cGZkID09IC0xKSAgICAgICAgICAgICAgICAgICAgLyogV2Fz IG9wZW4/ICovCisgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2Fz bid0LiAqLworCisjaWZuZGVmIE9TMgorICAgIGlmIChodHRwZmQgPiAtMSkgICAgICAgICAgICAg ICAgICAgICAvKiBXYXMuICovCisjZW5kaWYgLyogT1MyICovCisgICAgICB7CisjaWZkZWYgQ0tf U1NMCisgICAgICAgICAgaWYgKHRsc19odHRwX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgICAgICAg IGlmIChzc2xfZGVidWdfZmxhZykKKyAgICAgICAgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIs ImNhbGxpbmcgU1NMX3NodXRkb3duXG4iKTsKKyAgICAgICAgICAgICAgU1NMX3NodXRkb3duKHRs c19odHRwX2Nvbik7CisgICAgICAgICAgICAgIHRsc19odHRwX2FjdGl2ZV9mbGFnID0gMDsKKyAg ICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAg ICB4ID0gc29ja2V0X2Nsb3NlKGh0dHBmZCk7ICAgICAgLyogQ2xvc2UgaXQuICovCisjZWxzZQor I2lmbmRlZiBPUzIKKyAgICAgICAgICB4ID0gY2xvc2UoaHR0cGZkKTsKKyNlbmRpZiAvKiBPUzIg Ki8KKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAgfQorICAgIGh0dHBmZCA9IC0xOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTWFyayBpdCBhcyBjbG9zZWQuICovCisgICAgLyogZG8g bm90IGVyYXNlIGh0dHBfaG9zdF9wb3J0LCBodHRwX2lwLCBodHRwX3BvcnQgc28gdGhleSAqLwor ICAgIC8qIGNhbiBiZSB1c2VkIGJ5IGh0dHBfcmVvcGVuKCkgKi8KKyAgICByZXR1cm4oeCk7Cit9 CisKKworLyogaHR0cF90b2woKQorICogQ2FsbCB3aXRoIHMgPSBwb2ludGVyIHRvIHN0cmluZywg biA9IGxlbmd0aC4KKyAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4g b24gc3VjY2Vzcywgb3IKKyAqIC0xIG9uIGkvbyBlcnJvciwgLTIgaWYgY2FsbGVkIGltcHJvcGVy bHkuCisgKi8KKworaW50CitodHRwX3RvbChzLG4pIENIQVIgKnM7IGludCBuOyB7CisgICAgaW50 IGNvdW50ID0gMDsKKyAgICBpbnQgbGVuID0gbjsKKyAgICBpbnQgdHJ5ID0gMDsKKworICAgIGlm IChodHRwZmQgPT0gLTEpIHsKKyAgICAgICAgZGVidWcoRjEwMCwiaHR0cF90b2wgc29ja2V0IGlz IGNsb3NlZCIsIiIsMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZGVidWcoRjEw MSwiaHR0cF90b2wgVENQSVBMSUIgdHRuZXQiLCIiLHR0bmV0KTsKKyNpZmRlZiBDT01NRU5UCisg ICAgY2toZXhkdW1wKCJodHRwX3RvbCIscyxuKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNp ZmRlZiBDS19TU0wKKyAgICBpZiAodGxzX2h0dHBfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgaW50 IGVycm9yLCByOworICAgICAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KKyAgICAgIHNzbF9yZXRy eToKKyAgICAgICAgICByID0gU1NMX3dyaXRlKHRsc19odHRwX2NvbiwgcywgbGVuIC8qID4xMDI0 PzEwMjQ6bGVuICovKTsKKyAgICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHRsc19odHRwX2Nv bixyKSkgeworICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJodHRwX3RvbCIsIlNTTF93cml0ZSIscik7CisgICAgICAgICAgICBpZiAoIHIgPT0g bGVuICkKKyAgICAgICAgICAgICAgICByZXR1cm4obik7CisgICAgICAgICAgICAgcyArPSByOwor ICAgICAgICAgICAgIGxlbiAtPSByOworICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OworICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICBkZWJ1ZyhGMTAw LCJodHRwX3RvbCBTU0xfRVJST1JfV0FOVF9XUklURSIsIiIsMCk7CisJICAgICAgcmV0dXJuKC0x KTsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJodHRwX3RvbCBTU0xfRVJST1JfV0FOVF9SRUFEIiwiIiwwKTsKKyAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAgICAg ICAgICAgaWYgKCByID09IDAgKSB7IC8qIEVPRiAqLworICAgICAgICAgICAgICAgICAgaHR0cF9j bG9zZSgpOworICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgIGludCByYyA9IC0xOworI2lmZGVmIE5UCisgICAgICAg ICAgICAgICAgICBpbnQgZ2xlID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJodHRwX3RvbCBTU0xfRVJST1JfU1lTQ0FMTCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIkdldExhc3RFcnJvcigpIixnbGUpOworICAgICAgICAgICAgICAgICAgcmMgPSBv czJzb2NrZXRlcnJvcihnbGUpOworICAgICAgICAgICAgICAgICAgaWYgKHJjID09IC0xKQorICAg ICAgICAgICAgICAgICAgICAgIHJjID0gLTI7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICgg cmMgPT0gLTIgKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZiAvKiBO VCAqLworICAgICAgICAgICAgICAgICAgcmV0dXJuKHJjKTsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJodHRwX3RvbCBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCIsIiIsMCk7CisgICAg ICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAg IGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfdG9sIFNT TF9FUlJPUl9TU0wiLCIiLDApOworICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICAg ICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKyAg ICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfdG9sIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiIsIiIs MCk7CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4oLTIpOwor ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX3RvbCBTU0xf RVJST1JfPz8/Pz8iLCIiLDApOworICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICAg ICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKwor ICBodHRwX3RvbF9yZXRyeToKKyAgICB0cnkrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJbmNyZWFzZSB0aGUgdHJ5IGNvdW50ZXIgKi8KKworICAgIHsKKyNpZmRlZiBCU0RTRUxF Q1QKKyAgICAgICAgZmRfc2V0IHdmZHM7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OworCisg ICAgICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIEJTRFNFTEVDVCIsIiIsMCk7CisgICAgICAgIHR2 LnR2X3VzZWMgPSAwTDsKKyAgICAgICAgdHYudHZfc2VjPTMwOworI2lmZGVmIE5UCisgICAgICAg IFdTQVNhZmVUb0NhbmNlbCA9IDE7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBTVFJFQU1JTkcK KyAgICAgIGRvX3NlbGVjdDoKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgRkRfWkVS Tygmd2Zkcyk7CisgICAgICAgIEZEX1NFVChodHRwZmQsICZ3ZmRzKTsKKyAgICAgICAgaWYgKHNl bGVjdChGRF9TRVRTSVpFLCBOVUxMLAorI2lmZGVmIF9fREVDQworI2lmbmRlZiBfX0RFQ0NfVkVS CisgICAgICAgICAgICAgICAgICAgIChpbnQgKikKKyNlbmRpZiAvKiBfX0RFQ0NfVkVSICovCisj ZW5kaWYgLyogX19ERUNDICovCisgICAgICAgICAgICAgICAgICAgJndmZHMsIE5VTEwsICZ0dikg PCAwKSB7CisgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIHNlbGVjdCBmYWlsZWQiLCIiLHNfZXJybm8pOworI2lm ZGVmIEJFVEFERUJVRworICAgICAgICAgICAgcHJpbnRmKCJodHRwX3RvbCBzZWxlY3QgZmFpbGVk OiAlZFxuIiwgc19lcnJubyk7CisjZW5kaWYgLyogQkVUQURFQlVHICovCisjaWZkZWYgTlQKKyAg ICAgICAgICAgIFdTQVNhZmVUb0NhbmNlbCA9IDA7CisgICAgICAgICAgICBpZiAoIXdpbjk1c2Vs ZWN0YnVnKQorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCFGRF9JU1NFVChodHRwZmQsICZ3ZmRzKSkgeworI2lmZGVmIFNU UkVBTUlORworICAgICAgICAgICAgaWYgKHN0cmVhbWluZykKKyAgICAgICAgICAgICAgZ290byBk b19zZWxlY3Q7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJodHRwX3RvbCIsIiFGRF9JU1NFVCIsdHR5ZmQpOworI2lmZGVmIE5UCisgICAgICAgICAgICBX U0FTYWZlVG9DYW5jZWwgPSAwOworICAgICAgICAgICAgaWYgKCF3aW45NXNlbGVjdGJ1ZykKKyNl bmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisjaWZk ZWYgTlQKKyAgICAgICAgV1NBU2FmZVRvQ2FuY2VsID0gMDsKKyNlbmRpZiAvKiBOVCAqLworI2Vs c2UgLyogQlNEU0VMRUNUICovCisjaWZkZWYgSUJNU0VMRUNUCisgICAgICAgIHsKKyAgICAgICAg ICAgIGludCB0cmllcyA9IDA7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJodHRwX3RvbCBJQk1T RUxFQ1QiLCIiLDApOworICAgICAgICAgICAgd2hpbGUgKHNlbGVjdCgmaHR0cGZkLCAwLCAxLCAw LCAxMDAwKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgaW50IGNvdW50OworICAgICAgICAgICAg ICAgIGlmICh0cmllcysrID49IDYwKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGlmIGFmdGVy IDYwIHNlY29uZHMgd2UgY2FuJ3QgZ2V0IHBlcm1pc3Npb24gdG8gd3JpdGUgKi8KKyAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF90b2wgc2VsZWN0IGZhaWxlZCIsIiIsc29ja2V0 X2Vycm5vKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAg ICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgIGlmICgoY291bnQgPSBodHRwX3Rj aGsoKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfdG9sIiwi aHR0cF90Y2hrKCkiLGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKGNvdW50KTsK KyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgfQor ICAgICAgICB9CisjZW5kaWYgLyogSUJNU0VMRUNUICovCisjZW5kaWYgLyogQlNEU0VMRUNUICov CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgaWYgKChjb3VudCA9IHNvY2tldF93cml0ZShodHRw ZmQscyxuKSkgPCAwKSB7CisgICAgICAgICAgICBpbnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsg LyogbWF5YmUgYSBmdW5jdGlvbiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF90b2wg c29ja2V0X3dyaXRlIGVycm9yIiwiIixzX2Vycm5vKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAg IGlmIChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCisgICAgICAgICAgICAgIHJldHVybigt Mik7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAg ICAgICAgLyogQ2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KKyAgICAgICAgfQorI2Vsc2UgLyogVENQ SVBMSUIgKi8KKyAgICAgICAgaWYgKChjb3VudCA9IHdyaXRlKGh0dHBmZCxzLG4pKSA8IDApIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfdG9sIHNvY2tldF93cml0ZSBlcnJvciIsIiIs ZXJybm8pOworICAgICAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgIC8qIENhbGwg aXQgYW4gaS9vIGVycm9yICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAg ICAgICBpZiAoY291bnQgPCBuKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJodHRwX3RvbCBz b2NrZXRfd3JpdGUiLHMsY291bnQpOworICAgICAgICAgICAgaWYgKHRyeSA+IDI1KSB7CisgICAg ICAgICAgICAgICAgLyogZG9uJ3QgdHJ5IG1vcmUgdGhhbiAyNSB0aW1lcyAqLworICAgICAgICAg ICAgICAgIGRlYnVnKEYxMDAsImh0dHBfdG9sIHRyaWVkIG1vcmUgdGhhbiAyNSB0aW1lcyIsIiIs MCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBzICs9IGNvdW50OworICAgICAg ICAgICAgICAgIG4gLT0gY291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJodHRwX3RvbCByZXRyeSIscyxuKTsKKyAgICAgICAgICAgIGdvdG8gaHR0cF90b2xfcmV0 cnk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJodHRwX3RvbCBz b2NrZXRfd3JpdGUiLHMsY291bnQpOworICAgICAgICAgICAgcmV0dXJuKGxlbik7IC8qIHN1Y2Nl c3MgLSByZXR1cm4gdG90YWwgbGVuZ3RoICovCisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludAor aHR0cF9pbmModGltbykgaW50IHRpbW87IHsKKyAgICBpbnQgeD0tMTsgdW5zaWduZWQgY2hhciBj OyAgICAgICAgICAgICAvKiBUaGUgbG9jYWxzLiAqLworCisgICAgaWYgKGh0dHBmZCA9PSAtMSkg eworI2lmZGVmIEhUVFBfQlVGRkVSSU5HCisJaHR0cF9jb3VudCA9IDA7CisgIAlodHRwX2J1ZnAg PSAwOworI2VuZGlmCS8qIEhUVFBfQlVGRkVSSU5HICovCisgICAgICAgIGRlYnVnKEYxMDAsImh0 dHBfaW5jIHNvY2tldCBpcyBjbG9zZWQiLCIiLDApOworICAgICAgICByZXR1cm4oLTIpOworICAg IH0KKworI2lmZGVmIENLX1NTTAorICAgIC8qCisgICAgICogSW4gdGhlIGNhc2Ugb2YgT3BlblNT TCwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzdGlsbAorICAgICAqIGRhdGEgd2FpdGlu ZyBpbiB0aGUgU1NMIHNlc3Npb24gYnVmZmVycyB0aGF0IGhhcyBub3QgeWV0CisgICAgICogYmVl biByZWFkIGJ5IEtlcm1pdC4gIElmIHRoaXMgaXMgdGhlIGNhc2Ugd2UgbXVzdCBwcm9jZXNzCisg ICAgICogaXQgd2l0aG91dCBjYWxsaW5nIHNlbGVjdCgpIGJlY2F1c2Ugc2VsZWN0KCkgd2lsbCBu b3QgcmV0dXJuCisgICAgICogd2l0aCBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlcmUgaXMgZGF0YSB0 byBiZSByZWFkIGZyb20gdGhlCisgICAgICogc29ja2V0LiAgSWYgdGhlcmUgaXMgbm8gZGF0YSBw ZW5kaW5nIGluIHRoZSBTU0wgc2Vzc2lvbgorICAgICAqIGJ1ZmZlcnMgdGhlbiBmYWxsIHRocm91 Z2ggdG8gdGhlIHNlbGVjdCgpIGNvZGUgYW5kIHdhaXQgZm9yCisgICAgICogc29tZSBkYXRhIHRv IGFycml2ZS4KKyAgICAgKi8KKyAgICBpZiAodGxzX2h0dHBfYWN0aXZlX2ZsYWcpIHsKKyAgICAg ICAgaW50IGVycm9yOworCisgICAgICAgIHggPSBTU0xfcGVuZGluZyh0bHNfaHR0cF9jb24pOwor ICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfaW5jIiwi U1NMX3BlbmRpbmcgZXJyb3IiLHgpOworICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfSBlbHNlIGlmICggeCA+IDAgKSB7CisJICBzc2xf cmVhZDoKKyAgICAgICAgICAgIHggPSBTU0xfcmVhZCh0bHNfaHR0cF9jb24sICZjLCAxKTsKKyAg ICAgICAgICAgIGVycm9yID0gU1NMX2dldF9lcnJvcih0bHNfaHR0cF9jb24seCk7CisgICAgICAg ICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9OT05FOgor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfaW5jIFNTTF9FUlJPUl9OT05FIiwieCIs eCk7CisgICAgICAgICAgICAgICAgaWYgKHggPiAwKSB7CisjaWZkZWYgT1MyCisgICAgICAgICAg ICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAg ICAgICAgICAgICAgIHJldHVybihjKTsgICAgICAgICAgLyogUmV0dXJuIGNoYXJhY3Rlci4gKi8K KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPCAwKSB7CisjaWZkZWYgT1MyCisgICAgICAg ICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAg ICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworI2lmZGVmIE9TMgorICAgICAgICAgICAg ICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAg ICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNh c2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0 cF9pbmMgU1NMX0VSUk9SX1dBTlRfV1JJVEUiLCIiLDApOworI2lmZGVmIE9TMgorICAgICAgICAg ICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJST1JfV0FOVF9SRUFE IiwiIiwwKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgp OworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg ICAgICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorICAgICAgICAgICAgICAgIGlmICggeCA9PSAw ICkgeyAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworI2lmZGVm IE9TMgorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCByYyA9IC0xOworI2lmZGVmIE5UCisg ICAgICAgICAgICAgICAgICAgIGludCBnbGUgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMSwiaHR0cF9pbmMgU1NMX0VSUk9SX1NZU0NBTEwiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkdldExhc3RFcnJvcigpIixnbGUpOworICAgICAgICAgICAg ICAgICAgICByYyA9IG9zMnNvY2tldGVycm9yKGdsZSk7CisgICAgICAgICAgICAgICAgICAgIGlm IChyYyA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTI7CisgICAgICAgICAg ICAgICAgICAgIGVsc2UgaWYgKCByYyA9PSAtMiApCisgICAgICAgICAgICAgICAgICAgICAgICBy YyA9IC0xOworI2VuZGlmIC8qIE5UICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAg IFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAg ICAgIHJldHVybihyYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBTU0xf RVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRw X2luYyBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCIsIiIsMCk7CisgICAgICAgICAgICAgICAg aHR0cF9jbG9zZSgpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11 dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAg ICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAw LCJodHRwX2luYyBTU0xfRVJST1JfU1NMIiwiIiwwKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAg ICAgICAgICAgaHR0cF9jbG9zZSgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBPUzIK KyAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9a RVJPX1JFVFVSTjoKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwX2luYyBTU0xfRVJS T1JfWkVST19SRVRVUk4iLCIiLDApOworICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9FUlJPUl8/Pz8/PyIs IiIsMCk7CisgICAgICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworI2lmZGVmIE9TMgorICAgICAg ICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAg ICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNl bmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIEhUVFBfQlVGRkVSSU5HCisgICAgLyogU2tpcCBh bGwgdGhlIHNlbGVjdCgpIHN0dWZmIGlmIHdlIGhhdmUgYnl0ZXMgYnVmZmVyZWQgbG9jYWxseSAq LworICAgIGlmIChodHRwX2NvdW50ID4gMCkKKyAgICAgIGdvdG8gZ2V0ZnJvbWJ1ZmZlcjsKKyNl bmRpZgkvKiBIVFRQX0JVRkZFUklORyAqLworCisgICAgeworI2lmZGVmIEJTRFNFTEVDVAorICAg ICAgICBmZF9zZXQgcmZkczsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgICAgIGlu dCB0aW1lb3V0ID0gdGltbyA8IDAgPyAtdGltbyA6IDEwMDAgKiB0aW1vOworICAgICAgICBkZWJ1 ZyhGMTAxLCJodHRwX2luYyBCU0RTRUxFQ1QiLCIiLHRpbW8pOworCisgICAgICAgIGZvciAoIDsg dGltZW91dCA+PSAwOyB0aW1lb3V0IC09ICh0aW1vID8gMTAwIDogMCkpIHsKKyAgICAgICAgICAg IGludCByYzsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfaW5jIiwidGltZW91dCIsdGlt ZW91dCk7CisgICAgICAgICAgICAvKiBEb24ndCBtb3ZlIHNlbGVjdCgpIGluaXRpYWxpemF0aW9u IG91dCBvZiB0aGUgbG9vcC4gKi8KKyAgICAgICAgICAgIEZEX1pFUk8oJnJmZHMpOworICAgICAg ICAgICAgRkRfU0VUKGh0dHBmZCwgJnJmZHMpOworICAgICAgICAgICAgdHYudHZfc2VjICA9IHR2 LnR2X3VzZWMgPSAwTDsKKyAgICAgICAgICAgIGlmICh0aW1vKQorICAgICAgICAgICAgICAgIHR2 LnR2X3VzZWMgPSAobG9uZykgMTAwMDAwTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICB0di50dl9zZWMgPSAzMDsKKyNpZmRlZiBOVAorICAgICAgICAgICAgV1NBU2FmZVRvQ2Fu Y2VsID0gMTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgcmMgPSBzZWxlY3QoRkRfU0VU U0laRSwKKyNpZm5kZWYgX19ERUNDCisgICAgICAgICAgICAgICAgICAgICAgICAgKGZkX3NldCAq KQorI2VuZGlmIC8qIF9fREVDQyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICZyZmRzLCBO VUxMLCBOVUxMLCAmdHYpOworICAgICAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAg ICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTEsImh0dHBfaW5jIiwic2VsZWN0IixyYyk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi aHR0cF9pbmMiLCJzb2NrZXRfZXJybm8iLHNfZXJybm8pOworI2lmZGVmIEhUVFBfQlVGRkVSSU5H CisJCWh0dHBfY291bnQgPSAwOworCQlodHRwX2J1ZnAgPSAwOworI2VuZGlmCS8qIEhUVFBfQlVG RkVSSU5HICovCisgICAgICAgICAgICAgICAgaWYgKHNfZXJybm8pCisgICAgICAgICAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJo dHRwX2luYyIsInNlbGVjdCIscmMpOworI2lmZGVmIE5UCisgICAgICAgICAgICBXU0FTYWZlVG9D YW5jZWwgPSAwOworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICBpZiAoRkRfSVNTRVQoaHR0 cGZkLCAmcmZkcykpIHsKKyAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogSWYgd2FpdGlu ZyBmb3JldmVyIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgaWYgdGhlICovCisgICAgICAgICAg ICAgICAgLyogc29ja2V0IGNsb3NlZCBzbyB0cnkgd3JpdGluZyBhIDAtbGVuZ3RoIFRDUCBwYWNr ZXQgICovCisgICAgICAgICAgICAgICAgLyogd2hpY2ggc2hvdWxkIGZvcmNlIGFuIGVycm9yIGlm IHRoZSBzb2NrZXQgaXMgY2xvc2VkICovCisgICAgICAgICAgICAgICAgaWYgKCF0aW1vKSB7Cisj aWZkZWYgVENQSVBMSUIKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyYyA9IHNvY2tldF93cml0 ZShodHRwZmQsIiIsMCkpIDwgMCkgeworI2lmZGVmIEhUVFBfQlVGRkVSSU5HCisJCQlodHRwX2Nv dW50ID0gMDsKKwkJCWh0dHBfYnVmcCA9IDA7CisjZW5kaWYJLyogSFRUUF9CVUZGRVJJTkcgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzX2Vycm5vID0gc29ja2V0X2Vycm5vOworICAg ICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9pbmMgc29ja2V0X3dyaXRlIGVy cm9yIiwiIixzX2Vycm5vKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm IChvczJzb2NrZXRlcnJvcihzX2Vycm5vKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtMSk7IC8qIENhbGwgaXQgYW4gaS9vIGVycm9yICovCisgICAgICAgICAgICAgICAg ICAgIH0KKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgICAgIGlmICgocmMg PSB3cml0ZShodHRwZmQsIiIsMCkpIDwgMCkgeworI2lmZGVmIEhUVFBfQlVGRkVSSU5HCisJCQlo dHRwX2NvdW50ID0gMDsKKwkJCWh0dHBfYnVmcCA9IDA7CisjZW5kaWYJLyogSFRUUF9CVUZGRVJJ TkcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfaW5jIHNvY2tl dF93cml0ZSBlcnJvciIsIiIsZXJybm8pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KC0xKTsgLyogQ2FsbCBpdCBhbiBpL28gZXJyb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIFRDUElQTElCICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZkZWYgTlQKKyAgICAgICAg V1NBU2FmZVRvQ2FuY2VsID0gMDsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogIUJTRFNFTEVD VCAqLworI2lmZGVmIElCTVNFTEVDVAorIC8qCisgIFdhcyB1c2VkIGJ5IE9TLzIsIGN1cnJlbnRs eSBub3QgdXNlZCwgYnV0IG1pZ2h0IGNvbWUgaW4gaGFuZHkgc29tZSBkYXkuLi4KKyAgLi4uIGFu ZCBpdCBjYW1lIGluIGhhbmR5ISAgRm9yIG91ciBUQ1AvSVAgbGF5ZXIsIGl0IGF2b2lkcyBhbGwg dGhlIGZkX3NldAorICBhbmQgdGltZXZhbCBzdHVmZiBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHBs YWNlIHdoZXJlIGl0IGlzIHVzZWQuCisgKi8KKyAgICAgICAgaW50IHNvY2tldCA9IGh0dHBmZDsK KyAgICAgICAgaW50IHRpbWVvdXQgPSB0aW1vIDwgMCA/IC10aW1vIDogMTAwMCAqIHRpbW87CisK KyAgICAgICAgZGVidWcoRjEwMSwiaHR0cF9pbmMgSUJNU0VMRUNUIiwiIix0aW1vKTsKKyAgICAg ICAgZm9yICggOyB0aW1lb3V0ID49IDA7IHRpbWVvdXQgLT0gKHRpbW8gPyAxMDAgOiAwKSkgewor ICAgICAgICAgICAgaWYgKHNlbGVjdCgmc29ja2V0LCAxLCAwLCAwLCAxMDBMKSA9PSAxKSB7Cisg ICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyNlbHNlIC8qICFJQk1TRUxFQ1QgKi8KKyAgICAgICAgU0VMRUNUIGlz IHJlcXVpcmVkIGZvciB0aGlzIGNvZGUKKyNlbmRpZiAvKiBJQk1TRUxFQ1QgKi8KKyNlbmRpZiAv KiBCU0RTRUxFQ1QgKi8KKyAgICB9CisKKyAgICBpZiAodGltbyAmJiB4IDwgMCkgeyAgICAgICAg Lyogc2VsZWN0KCkgdGltZWQgb3V0ICovCisjaWZkZWYgSFRUUF9CVUZGRVJJTkcKKwlodHRwX2Nv dW50ID0gMDsKKwlodHRwX2J1ZnAgPSAwOworI2VuZGlmCS8qIEhUVFBfQlVGRkVSSU5HICovCisg ICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIHNlbGVjdCgpIHRpbWVkIG91dCIsIiIsMCk7Cisg ICAgICAgIHJldHVybigtMSk7IC8qIENhbGwgaXQgYW4gaS9vIGVycm9yICovCisgICAgfQorCisj aWZkZWYgQ0tfU1NMCisgICAgICAgIGlmICggdGxzX2h0dHBfYWN0aXZlX2ZsYWcgKSB7CisgICAg ICAgICAgICBpbnQgZXJyb3I7CisJICBzc2xfcmVhZDI6CisgICAgICAgICAgICB4ID0gU1NMX3Jl YWQodGxzX2h0dHBfY29uLCAmYywgMSk7CisgICAgICAgICAgICBlcnJvciA9IFNTTF9nZXRfZXJy b3IodGxzX2h0dHBfY29uLHgpOworICAgICAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAg ICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJo dHRwX2luYyBTU0xfRVJST1JfTk9ORSIsIngiLHgpOworICAgICAgICAgICAgICAgIGlmICh4ID4g MCkgeworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgp OworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oYyk7ICAgICAg ICAgIC8qIFJldHVybiBjaGFyYWN0ZXIuICovCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4 IDwgMCkgeworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRl eCgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGh0dHBfY2xvc2Uo KTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDAsImh0dHBfaW5jIFNTTF9FUlJPUl9XQU5UX1dSSVRFIiwi IiwwKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAg ICBjYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwi aHR0cF9pbmMgU1NMX0VSUk9SX1dBTlRfUkVBRCIsIiIsMCk7CisjaWZkZWYgT1MyCisgICAgICAg ICAgICAgICAgUmVsZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoK KyAgICAgICAgICAgICAgICBpZiAoIHggPT0gMCApIHsgLyogRU9GICovCisgICAgICAgICAgICAg ICAgICAgIGh0dHBfY2xvc2UoKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICBpbnQgcmMgPSAtMTsKKyNpZmRlZiBOVAorICAgICAgICAgICAgICAgICAgICBpbnQgZ2xlID0g R2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImh0dHBfaW5j IFNTTF9FUlJPUl9TWVNDQUxMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRMYXN0 RXJyb3IoKSIsZ2xlKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBvczJzb2NrZXRlcnJvcihn bGUpOworICAgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gLTEpCisgICAgICAgICAgICAgICAg ICAgICAgICByYyA9IC0yOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgPT0gLTIg KQorICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyNlbmRpZiAvKiBOVCAqLworI2lm ZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlm IC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4ocmMpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09L VVAiLCIiLDApOworICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyNpZmRlZiBPUzIKKyAg ICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgpOworI2VuZGlmIC8qIE9TMiAqLworICAg ICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICBjYXNlIFNTTF9FUlJPUl9TU0w6 CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1NTTCIsIiIs MCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgIGh0dHBfY2xvc2UoKTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgUmVsZWFzZVRDUElQ TXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwor ICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisgICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwiaHR0cF9pbmMgU1NMX0VSUk9SX1pFUk9fUkVUVVJOIiwiIiwwKTsKKyAgICAg ICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgUmVs ZWFzZVRDUElQTXV0ZXgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICByZXR1 cm4oLTIpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAw LCJodHRwX2luYyBTU0xfRVJST1JfPz8/Pz8iLCIiLDApOworICAgICAgICAgICAgICAgIGh0dHBf Y2xvc2UoKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICBSZWxlYXNlVENQSVBNdXRleCgp OworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIEhUVFBfQlVG RkVSSU5HCisvKgorICBCdWZmZXJpbmcgY29kZSBhZGRlZCBieSBmZGMgMTUgRGVjIDIwMDUgZm9y IG5vbi1TU0wgY2FzZSBvbmx5IGJlY2F1c2UgSFRUUAorICBHRVRzIHdlcmUgb3JkZXJzIG9mIG1h Z25pdHVkZSB0b28gc2xvdyBkdWUgdG8gdGhlIHNpbmdsZS1ieXRlIHJlYWQoKXMuICBUaGUKKyAg ZmlsZS1kZXNjcmlwdG9yIHN3YXBwaW5nIGlzIHByZXR0eSBncm9zcywgYnV0IHRoZSBtb3JlIGVs ZWdhbnQgc29sdXRpb24KKyAgKGNhbGxpbmcgYSBuZXR0Y2hrKCkgbGlrZSByb3V0aW5lIHdpdGgg dGhlIGZkIGFzIGEgcGFyYW1ldGVyKSBkb2Vzbid0IHdvcmssCisgIGJlY2F1c2UgbmV0dGNoaygp IHJlbGllcyBvbiB0b28gbWFueSBvdGhlciByb3V0aW5lcyB0aGF0LCBsaWtlIGl0c2VsZiwgYXJl CisgIGhhcmR3aXJlZCBmb3IgdHR5ZmQuCisqLworICBnZXRmcm9tYnVmZmVyOgorCWlmICgtLWh0 dHBfY291bnQgPj0gMCkgeworCSAgICBjID0gaHR0cF9pbmJ1ZltodHRwX2J1ZnArK107CisJICAg IHggPSAxOworCX0gZWxzZSB7CisJICAgIGludCBzYXZlZmQ7CisJICAgIHNhdmVmZCA9IHR0eWZk OworCSAgICB0dHlmZCA9IGh0dHBmZDsKKwkgICAgeCA9IG5ldHRjaGsoKTsKKwkgICAgdHR5ZmQg PSBzYXZlZmQ7CQkKKwkgICAgZGVidWcoRjEwMSwiaHR0cF9pbmMgbmV0dGNoayIsIiIseCk7CisJ ICAgIGlmICh4ID4gSFRUUF9JTkJVRkxFTikKKwkgICAgICB4ID0gSFRUUF9JTkJVRkxFTjsKKyNp ZmRlZiBUQ1BJUExJQgorCSAgICB4ID0gc29ja2V0X3JlYWQoaHR0cGZkLGh0dHBfaW5idWYseCk7 CisjZWxzZSAgLyogTm90IFRDUElQTElCICovCisJICAgIHggPSByZWFkKGh0dHBmZCxodHRwX2lu YnVmLHgpOworI2VuZGlmCS8qIFRDUElQTElCICovCisJICAgIGh0dHBfY291bnQgPSAwOworCSAg ICBodHRwX2J1ZnAgPSAwOworCSAgICBpZiAoeCA+IDApIHsKKwkJYyA9IGh0dHBfaW5idWZbaHR0 cF9idWZwKytdOworCQlodHRwX2NvdW50ID0geCAtIDE7CisJICAgIH0KKwl9CisjZWxzZSAgLyog Tm90IEhUVFBfQlVGRkVSSU5HICovCisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgeCA9IHNvY2tl dF9yZWFkKGh0dHBmZCwmYywxKTsKKyNlbHNlICAvKiBOb3QgVENQSVBMSUIgKi8KKyAgICAgICAg eCA9IHJlYWQoaHR0cGZkLCZjLDEpOworI2VuZGlmCS8qIFRDUElQTElCICovCisjZW5kaWYJLyog SFRUUF9CVUZGRVJJTkcgKi8KKworICAgICAgICBpZiAoeCA8PSAwKSB7CisgICAgICAgICAgICBp bnQgc19lcnJubyA9IHNvY2tldF9lcnJubzsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInR0YnVm ciBzb2NrZXRfcmVhZCIsIiIseCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0dGJ1ZnIgc29j a2V0X2Vycm5vIiwiIixzX2Vycm5vKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIGlmICh4ID09 IDAgfHwgb3Myc29ja2V0ZXJyb3Ioc19lcnJubykgPCAwKSB7CisgICAgICAgICAgICAgICAgaHR0 cF9jbG9zZSgpOworICAgICAgICAgICAgICAgIFJlbGVhc2VUQ1BJUE11dGV4KCk7CisgICAgICAg ICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJlbGVhc2VU Q1BJUE11dGV4KCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworI2Vsc2UgLyogT1MyICovCisg ICAgICAgICAgICBodHRwX2Nsb3NlKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICoqKiAqKiog Ki8KKyAgICAgICAgICAgIHJldHVybigtMik7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuKGMpOworfQorCit2b2lkCisjaWZkZWYgQ0tfQU5TSUMKK2h0dHBfc2V0 X2NvZGVfcmVwbHkoY2hhciAqIG1zZykKKyNlbHNlCitodHRwX3NldF9jb2RlX3JlcGx5KG1zZykK KyAgICBjaGFyICogbXNnOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgY2hhciAqIHAg PSBtc2c7CisgICAgY2hhciBidWZbMTZdOworICAgIGludCBpPTA7CisKKyAgICB3aGlsZSAoICpw ICE9IFNQICYmICpwICE9IE5VTCApIHsKKyAgICAgICAgYnVmW2ldID0gKnA7CisgICAgICAgIHAr KzsKKyAgICAgICAgaSsrOworICAgIH0KKworICAgIGh0dHBfY29kZSA9IGF0b2koYnVmKTsKKwor ICAgIHdoaWxlICggKnAgPT0gU1AgKQorICAgICAgICBwKys7CisKKyAgICBja3N0cm5jcHkoaHR0 cF9yZXBseV9zdHIscCxIVFRQQlVGTEVOKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2h0 dHBfZ2V0KGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBjaGFyICogdXNlciwKKyAgICAg ICAgIGNoYXIgKiBwd2QsIGNoYXIgYXJyYXksIGNoYXIgKiBsb2NhbCwgY2hhciAqIHJlbW90ZSwK KyAgICAgICAgIGludCBzdGRpbykKKyNlbHNlCitodHRwX2dldChhZ2VudCwgaGRybGlzdCwgdXNl ciwgcHdkLCBhcnJheSwgbG9jYWwsIHJlbW90ZSwgc3RkaW8pCisgICAgY2hhciAqIGFnZW50OyBj aGFyICoqIGhkcmxpc3Q7IGNoYXIgKiB1c2VyOworICAgIGNoYXIgKiBwd2Q7IGNoYXIgYXJyYXk7 IGNoYXIgKiBsb2NhbDsgY2hhciAqIHJlbW90ZTsKKyAgICBpbnQgc3RkaW87CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICBjaGFyICogcmVxdWVzdCA9IE5VTEw7CisgICAgaW50ICAgIGks IGosIGxlbiA9IDAsIGhkY250ID0gMCwgcmMgPSAwOworICAgIGludCAgICBjaDsKKyAgICBpbnQg ICAgaHR0cF9mbmQgPSAwOworICAgIGNoYXIgICBidWZbSFRUUEJVRkxFTl0sICpwOworICAgIGlu dCAgICBudWxsbGluZTsKKyNpZmRlZiBPUzIKKyAgICBzdHJ1Y3QgdXRpbWJ1ZiB1X3Q7CisjZWxz ZSAvKiBPUzIgKi8KKyNpZmRlZiBTWVNVVElNRUgKKyAgICBzdHJ1Y3QgdXRpbWJ1ZiB1X3Q7Cisj ZWxzZQorICAgIHN0cnVjdCB1dGltYnVmIHsKKyAgICAgICAgdGltZV90IGF0aW1lOworICAgICAg ICB0aW1lX3QgbXRpbWU7CisgICAgfSB1X3Q7CisjZW5kaWYgLyogU1lTVVRJTUggKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICB0aW1lX3QgbW9kX3QgPSAwOworICAgIHRpbWVfdCBzcnZfdCA9IDA7 CisgICAgdGltZV90IGxvY2FsX3QgPSAwOworICAgIGNoYXIgcGFzc3dkWzY0XTsKKyAgICBjaGFy IGI2NGluWzEyOF07CisgICAgY2hhciBiNjRvdXRbMjU2XTsKKyAgICBjaGFyICogaGVhZGVyc1tI VFRQSEVBRENOVF07CisgICAgaW50IGNsb3NlY29uID0gMDsKKyAgICBpbnQgY2h1bmtlZCA9IDA7 CisgICAgaW50IHpmaWxlID0gMDsKKyAgICBpbnQgZmlyc3QgPSAxOworCisjaWZkZWYgREVCVUcK KyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImh0dHBfZ2V0IGh0dHBmZCIs IiIsaHR0cGZkKTsKKyAgICAgICAgZGVidWcoRjExMCwiaHR0cF9hZ2VudCIsYWdlbnQsMCk7Cisg ICAgICAgIGRlYnVnKEYxMTAsImh0dHBfdXNlciIsdXNlciwwKTsKKyAgICAgICAgZGVidWcoRjEx MCwiaHR0cF9sb2NhbCIsbG9jYWwsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImh0dHBfcmVtb3Rl IixyZW1vdGUsMCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgaWYgKCFyZW1vdGUp IHJlbW90ZSA9ICIiOworCisgICAgaWYgKGh0dHBmZCA9PSAtMSkKKyAgICAgIHJldHVybigtMSk7 CisKKyAgICBpZiAoYXJyYXkpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEhUVFBIRUFEQ05U OyBpKyspCisgICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGxlbiA9IDg7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVCAqLworICAgIGxlbiArPSBzdHJsZW4o SFRUUF9WRVJTSU9OKTsKKyAgICBsZW4gKz0gc3RybGVuKHJlbW90ZSk7CisgICAgbGVuICs9IDE2 OworCisgICAgaWYgKGhkcmxpc3QpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsg aSsrKQorICAgICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJsaXN0W2ldKSArIDI7CisgICAgfQor ICAgIGxlbiArPSAoaW50KSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQpICsgODsKKworICAgIGlmIChh Z2VudCkKKyAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7CisgICAgaWYgKHVzZXIpIHsK KyAgICAgICAgaWYgKCFwd2QpIHsKKyAgICAgICAgICAgIHJlYWRwYXNzKCJQYXNzd29yZDogIixw YXNzd2QsNjQpOworICAgICAgICAgICAgcHdkID0gcGFzc3dkOworICAgICAgICB9CisgICAgICAg IGNrbWFrbXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIscHdkLE5VTEwpOworICAgICAg ICBqID0gYjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91dCwyNTYpOworICAgICAgICBt ZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkpOyAgICAgIC8qIE5PVCBQT1JUQUJMRSAqLworICAgICAg ICBpZiAoaiA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgYjY0b3V0W2pdID0g J1wwJzsKKyAgICAgICAgbGVuICs9IGogKyAyNDsKKyAgICB9CisjaWZkZWYgSFRUUF9DTE9TRQor ICAgIGxlbiArPSAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb246IGNs b3NlICovCisjZW5kaWYKKyAgICBsZW4gKz0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBibGFuayBsaW5lICsgbnVsbCAqLworCisgICAgcmVxdWVzdCA9IG1hbGxvYyhsZW4pOworICAg IGlmICghcmVxdWVzdCkKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBzcHJpbnRmKHJlcXVlc3Qs IkdFVCAlcyAlc1xyXG4iLHJlbW90ZSxIVFRQX1ZFUlNJT04pOyAgICAgICAvKiBzYWZlICovCisg ICAgY2tzdHJuY2F0KHJlcXVlc3QsIkhvc3Q6ICIsIGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVl c3QsaHR0cF9ob3N0X3BvcnQsIGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxl bik7CisgICAgaWYgKGFnZW50KSB7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJVc2VyLWFn ZW50OiAiLGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGFnZW50LGxlbik7CisgICAg ICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIH0KKyAgICBpZiAodXNlcikg eworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiQXV0aG9yaXphdGlvbjogQmFzaWMgIixsZW4p OworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxiNjRvdXQsbGVuKTsKKyAgICAgICAgY2tzdHJu Y2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgfQorICAgIGlmICggaGRybGlzdCApIHsKKyAg ICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsgaSsrKSB7CisgICAgICAgICAgICBja3N0cm5j YXQocmVxdWVzdCxoZHJsaXN0W2ldLGxlbik7CisgICAgICAgICAgICBja3N0cm5jYXQocmVxdWVz dCwiXHJcbiIsbGVuKTsKKyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBIVFRQX0NMT1NFCisgICAg Y2tzdHJuY2F0KHJlcXVlc3QsIkNvbm5lY3Rpb246IGNsb3NlXHJcbiIsbGVuKTsKKyNlbmRpZgor ICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworCisgIGdldHJlcToKKyAgICBpZiAo aHR0cF90b2woKENIQVIgKilyZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkgPCAwKQorICAgIHsKKyAg ICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICBpZiAoIGZpcnN0ICkgeworICAgICAgICAgICAg Zmlyc3QtLTsKKyAgICAgICAgICAgIGh0dHBfcmVvcGVuKCk7CisgICAgICAgICAgICBnb3RvIGdl dHJlcTsKKyAgICAgICAgfQorICAgICAgICByYyA9IC0xOworICAgICAgICBnb3RvIGdldGV4aXQ7 CisgICAgfQorCisgICAgLyogUHJvY2VzcyB0aGUgaGVhZGVycyAqLworICAgIGxvY2FsX3QgPSB0 aW1lKE5VTEwpOworICAgIG51bGxsaW5lID0gMDsKKyAgICBpID0gMDsKKyAgICBsZW4gPSAtMTsK KyAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAwICYmIGkgPCBI VFRQQlVGTEVOKSB7CisgICAgICAgIGJ1ZltpXSA9IGNoOworICAgICAgICBpZiAoIGJ1ZltpXSA9 PSAxMCApIHsgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8KKyAgICAgICAgICAgIGlmIChpID4gMCAm JiBidWZbaS0xXSA9PSAxMykKKyAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgaWYgKGkg PCAxKQorICAgICAgICAgICAgICBudWxsbGluZSA9IDE7CisgICAgICAgICAgICBidWZbaV0gPSAn XDAnOworICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBI RUFEQ05UKQorICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7Cisg ICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiSFRUUCIsNCwwKSkgeworICAgICAgICAgICAg ICAgIGh0dHBfZm5kID0gMTsKKyAgICAgICAgICAgICAgICBqID0gY2tpbmRleCgiICIsYnVmLDAs MCwwKTsKKyAgICAgICAgICAgICAgICBwID0gJmJ1ZltqXTsKKyAgICAgICAgICAgICAgICB3aGls ZSAoIGlzc3BhY2UoKnApICkKKyAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAg ICBzd2l0Y2ggKCBwWzBdICkgeworICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAgICAg ICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJzInOiAgICAgICAgICAgICAvKiBTdWNjZXNzICov CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6 ICAgICAgICAgICAgIC8qIFJlZGlyZWN0aW9uICovCisgICAgICAgICAgICAgICAgICBjYXNlICc0 JzogICAgICAgICAgICAgLyogQ2xpZW50IGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgIGNh c2UgJzUnOiAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmFpbHVyZSAqLworICAgICAgICAgICAgICAg ICAgZGVmYXVsdDogICAgICAgICAgICAgIC8qIFVua25vd24gKi8KKyAgICAgICAgICAgICAgICAg ICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWx1cmU6IFNl cnZlciByZXBvcnRzICVzXG4iLHApOworICAgICAgICAgICAgICAgICAgICByYyA9IC0xOworICAg ICAgICAgICAgICAgICAgICBsb2NhbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGh0dHBfc2V0X2NvZGVfcmVwbHkocCk7CisjaWZkZWYgQ01EQVRFMlRNCisgICAg ICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkxhc3QtTW9kaWZpZWQiLDEzLDApKSB7 CisgICAgICAgICAgICAgICAgbW9kX3QgPSBodHRwX2RhdGUoJmJ1ZlsxNV0pOworICAgICAgICAg ICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJEYXRlIiw0LDApKSB7CisgICAgICAgICAgICAg ICAgc3J2X3QgPSBodHRwX2RhdGUoJmJ1Zls0XSk7CisjZW5kaWYgLyogQ01EQVRFMlRNICovCisg ICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIkNvbm5lY3Rpb246IiwxMSwwKSkg eworICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAg KQorICAgICAgICAgICAgICAgICAgICBjbG9zZWNvbiA9IDE7CisgICAgICAgICAgICB9IGVsc2Ug aWYgKCFja3N0cmNtcChidWYsIkNvbnRlbnQtTGVuZ3RoOiIsMTUsMCkpIHsKKyAgICAgICAgICAg ICAgICBsZW4gPSBhdG9pKCZidWZbMTZdKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3Ry Y21wKGJ1ZiwiVHJhbnNmZXItRW5jb2Rpbmc6IiwxOCwwKSkgeworICAgICAgICAgICAgICAgIGlm ICggY2tpbmRleCgiY2h1bmtlZCIsYnVmLDE4LDAsMCkgIT0gMCApCisgICAgICAgICAgICAgICAg ICAgIGNodW5rZWQgPSAxOworCQlkZWJ1ZyhGMTAxLCJodHRwX2dldCBjaHVua2VkIiwiIixjaHVu a2VkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjaCA8IDAgJiYg Zmlyc3QpIHsKKyAgICAgICAgZmlyc3QtLTsKKyAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAg ICBodHRwX3Jlb3BlbigpOworICAgICAgICBnb3RvIGdldHJlcTsKKyAgICB9CisgICAgaWYgKGh0 dHBfZm5kID09IDApIHsKKyAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgY2xvc2Vjb24gPSAxOwor ICAgICAgICBnb3RvIGdldGV4aXQ7CisgICAgfQorCisgICAgLyogTm93IHdlIGhhdmUgdGhlIGNv bnRlbnRzIG9mIHRoZSBmaWxlICovCisgICAgaWYgKCBsb2NhbCAmJiBsb2NhbFswXSApIHsKKyAg ICAgICAgaWYgKHpvcGVubyhaT0ZJTEUsbG9jYWwsTlVMTCxOVUxMKSkKKyAgICAgICAgICAgIHpm aWxlID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmMgPSAtMTsKKyAgICB9CisKKyAg ICBpZiAoIGNodW5rZWQgKSB7CisgICAgICAgIHdoaWxlICgobGVuID0gaHR0cF9nZXRfY2h1bmtf bGVuKCkpID4gMCkgeworICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2luYygw KSkgPj0gMCkgeworICAgICAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgICAgIGlmICgg emZpbGUgKQorICAgICAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsKKyAg ICAgICAgICAgICAgICBpZiAoIHN0ZGlvICkKKyAgICAgICAgICAgICAgICAgICAgY29ub2MoKENI QVIpY2gpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChjaCA9IGh0dHBfaW5jKDAp KSAhPSBDUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICgoY2ggPSBo dHRwX2luYygwKSkgIT0gTEYpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgeworICAgICAgICB3aGlsZSAobGVuICYmIChjaCA9IGh0dHBfaW5jKDApKSA+PSAw KSB7CisgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgIGlmICggemZpbGUgKQorICAgICAg ICAgICAgICAgIHpjaG91dChaT0ZJTEUsKENIQVIpY2gpOworICAgICAgICAgICAgaWYgKCBzdGRp byApCisgICAgICAgICAgICAgICAgY29ub2MoKENIQVIpY2gpOworICAgICAgICB9CisgICAgfQor CisgICAgaWYgKCB6ZmlsZSApCisgICAgICAgIHpjbG9zZShaT0ZJTEUpOworCisgICAgaWYgKCBj aHVua2VkICkgeyAgICAgICAgICAgIC8qIFBhcnNlIFRyYWlsaW5nIEhlYWRlcnMgKi8KKyAgICAg ICAgbnVsbGxpbmUgPSAwOworICAgICAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBf aW5jKDApKSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7CisgICAgICAgICAgICBidWZbaV0gPSBj aDsKKyAgICAgICAgICAgIGlmICggYnVmW2ldID09IDEwICkgeyAvKiBmb3VuZCBlbmQgb2YgbGlu ZSAqLworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKKyAgICAg ICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IDEpCisgICAgICAgICAg ICAgICAgICBudWxsbGluZSA9IDE7CisgICAgICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKKyAg ICAgICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURD TlQpCisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsK KyNpZmRlZiBDTURBVEUyVE0KKyAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiTGFz dC1Nb2RpZmllZCIsMTMsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kX3QgPSBodHRwX2Rh dGUoJmJ1ZlsxNV0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1Ziwi RGF0ZSIsNCwwKSkgeworICAgICAgICAgICAgICAgICAgICBzcnZfdCA9IGh0dHBfZGF0ZSgmYnVm WzRdKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ01EQVRFMlRNICovCisgICAgICAg ICAgICAgICAgZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAg KQorICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYg KCB6ZmlsZSApIHsgICAgICAgICAgICAgIC8qIFNldCB0aW1lc3RhbXAgKi8KKyNpZm5kZWYgTk9T RVRUSU1FCisjaWZkZWYgT1MyCisgICAgICAgIHVfdC5hY3RpbWUgPSBzcnZfdCA/IHNydl90IDog bG9jYWxfdDsKKyAgICAgICAgdV90Lm1vZHRpbWUgPSBtb2RfdCA/IG1vZF90IDogbG9jYWxfdDsK KyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIFNZU1VUSU1FSAorICAgICAgICB1X3QuYWN0aW1lID0g c3J2X3QgPyBzcnZfdCA6IGxvY2FsX3Q7CisgICAgICAgIHVfdC5tb2R0aW1lID0gbW9kX3QgPyBt b2RfdCA6IGxvY2FsX3Q7CisjZWxzZQorI2lmZGVmIEJTRDQ0CisgICAgICAgIHVfdFswXS50dl9z ZWMgPSBzcnZfdCA/IHNydl90IDogbG9jYWxfdDsKKyAgICAgICAgdV90WzFdLnR2X3NlYyA9IG1v ZF90ID8gbW9kX3QgOiBsb2NhbF90OworI2Vsc2UKKyAgICAgICAgdV90Lm10aW1lID0gc3J2X3Qg PyBzcnZfdCA6IGxvY2FsX3Q7CisgICAgICAgIHVfdC5hdGltZSA9IG1vZF90ID8gbW9kX3QgOiBs b2NhbF90OworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogU1lTVVRJTUVIICovCisjZW5k aWYgLyogT1MyICovCisgICAgICAgICAgICB1dGltZShsb2NhbCwmdV90KTsKKyNlbmRpZiAvKiBO T1NFVFRJTUUgKi8KKyAgICB9CisKKyAgZ2V0ZXhpdDoKKyAgICBpZiAoYXJyYXkpCisgICAgICBo dHRwX21rYXJyYXkoaGVhZGVycyxoZGNudCxhcnJheSk7CisKKyAgICBpZiAoIGNsb3NlY29uICkK KyAgICAgICAgaHR0cF9jbG9zZSgpOworICAgIGZyZWUocmVxdWVzdCk7CisgICAgZm9yIChpID0g MDsgaSA8IGhkY250OyBpKyspIHsKKyAgICAgICAgaWYgKGhlYWRlcnNbaV0pCisgICAgICAgICAg ZnJlZShoZWFkZXJzW2ldKTsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworaW50CisjaWZk ZWYgQ0tfQU5TSUMKK2h0dHBfaGVhZChjaGFyICogYWdlbnQsIGNoYXIgKiogaGRybGlzdCwgY2hh ciAqIHVzZXIsCisgICAgICAgICAgY2hhciAqIHB3ZCwgY2hhciBhcnJheSwgY2hhciAqIGxvY2Fs LCBjaGFyICogcmVtb3RlLAorICAgICAgICAgIGludCBzdGRpbykKKyNlbHNlCitodHRwX2hlYWQo YWdlbnQsIGhkcmxpc3QsIHVzZXIsIHB3ZCwgYXJyYXksIGxvY2FsLCByZW1vdGUsIHN0ZGlvKQor ICAgIGNoYXIgKiBhZ2VudDsgY2hhciAqKiBoZHJsaXN0OyBjaGFyICogdXNlcjsKKyAgICBjaGFy ICogcHdkOyBjaGFyIGFycmF5OyBjaGFyICogbG9jYWw7IGNoYXIgKiByZW1vdGU7CisgICAgaW50 IHN0ZGlvOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgY2hhciAqIHJlcXVlc3QgPSBO VUxMOworICAgIGludCAgICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9IDAsIHJjID0gMDsKKyAgICBp bnQgICAgY2g7CisgICAgaW50ICAgIGh0dHBfZm5kID0gMDsKKyAgICBjaGFyICAgYnVmW0hUVFBC VUZMRU5dLCAqcDsKKyAgICBpbnQgICAgbnVsbGxpbmU7CisgICAgdGltZV90IG1vZF90OworICAg IHRpbWVfdCBzcnZfdDsKKyAgICB0aW1lX3QgbG9jYWxfdDsKKyAgICBjaGFyIHBhc3N3ZFs2NF07 CisgICAgY2hhciBiNjRpblsxMjhdOworICAgIGNoYXIgYjY0b3V0WzI1Nl07CisgICAgY2hhciAq IGhlYWRlcnNbSFRUUEhFQURDTlRdOworICAgIGludCAgY2xvc2Vjb24gPSAwOworICAgIGludCAg Zmlyc3QgPSAxOworCisgICAgaWYgKGh0dHBmZCA9PSAtMSkKKyAgICAgIHJldHVybigtMSk7CisK KyAgICBpZiAoYXJyYXkpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEhUVFBIRUFEQ05UOyBp KyspCisgICAgICAgICAgaGVhZGVyc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGxlbiA9IDk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhFQUQgKi8KKyAgICBsZW4gKz0gc3RybGVuKEhU VFBfVkVSU0lPTik7CisgICAgbGVuICs9IHN0cmxlbihyZW1vdGUpOworICAgIGxlbiArPSAxNjsK KworICAgIGlmICggaGRybGlzdCApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsg aSsrKQorICAgICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJsaXN0W2ldKSArIDI7CisgICAgfQor ICAgIGxlbiArPSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQpICsgODsKKworICAgIGlmIChhZ2VudCkK KyAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7CisgICAgaWYgKHVzZXIpIHsKKyAgICAg ICAgaWYgKCFwd2QpIHsKKyAgICAgICAgICAgIHJlYWRwYXNzKCJQYXNzd29yZDogIixwYXNzd2Qs NjQpOworICAgICAgICAgICAgcHdkID0gcGFzc3dkOworICAgICAgICB9CisgICAgICAgIGNrbWFr bXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIscHdkLE5VTEwpOworICAgICAgICBqID0g Yjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91dCwyNTYpOworICAgICAgICBtZW1zZXQo cHdkLDAsc3RybGVuKHB3ZCkpOyAgICAgIC8qIE5PVCBQT1JUQUJMRSAqLworICAgICAgICBpZiAo aiA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgYjY0b3V0W2pdID0gJ1wwJzsK KyAgICAgICAgbGVuICs9IGogKyAyNDsKKyAgICB9CisjaWZkZWYgSFRUUF9DTE9TRQorICAgIGxl biArPSAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb246IGNsb3NlICov CisjZW5kaWYKKyAgICBsZW4gKz0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibGFu ayBsaW5lICsgbnVsbCAqLworCisgICAgcmVxdWVzdCA9IChjaGFyICopbWFsbG9jKGxlbik7Cisg ICAgaWYgKCFyZXF1ZXN0KQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIHNwcmludGYocmVxdWVz dCwiSEVBRCAlcyAlc1xyXG4iLHJlbW90ZSxIVFRQX1ZFUlNJT04pOworICAgIGNrc3RybmNhdChy ZXF1ZXN0LCJIb3N0OiAiLCBsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfaG9zdF9w b3J0LCBsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGlmIChh Z2VudCkgeworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2VudDogIixsZW4pOwor ICAgICAgICBja3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOworICAgICAgICBja3N0cm5jYXQo cmVxdWVzdCwiXHJcbiIsbGVuKTsKKyAgICB9CisgICAgaWYgKHVzZXIpIHsKKyAgICAgICAgY2tz dHJuY2F0KHJlcXVlc3QsIkF1dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsKKyAgICAgICAgY2tz dHJuY2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJc clxuIixsZW4pOworICAgIH0KKyAgICBpZiAoIGhkcmxpc3QgKSB7CisgICAgICAgIGZvciAoaSA9 IDA7IGhkcmxpc3RbaV07IGkrKykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsaGRy bGlzdFtpXSxsZW4pOworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7 CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgSFRUUF9DTE9TRQorICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJDb25uZWN0aW9uOiBjbG9zZVxyXG4iLGxlbik7CisjZW5kaWYKKyAgICBja3N0cm5jYXQo cmVxdWVzdCwiXHJcbiIsbGVuKTsKKworICAgIGlmICggbG9jYWwgJiYgbG9jYWxbMF0gKSB7Cisg ICAgICAgIGlmICghem9wZW5vKFpPRklMRSxsb2NhbCxOVUxMLE5VTEwpKSB7CisgICAgICAgICAg ICBmcmVlKHJlcXVlc3QpOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAg IH0KKworICBoZWFkcmVxOgorICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKXJlcXVlc3Qsc3RybGVu KHJlcXVlc3QpKSA8IDApCisgICAgeworICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgIGlm ICggZmlyc3QgKSB7CisgICAgICAgICAgICBmaXJzdC0tOworICAgICAgICAgICAgaHR0cF9yZW9w ZW4oKTsKKyAgICAgICAgICAgIGdvdG8gaGVhZHJlcTsKKyAgICAgICAgfQorICAgICAgICByYyA9 IC0xOworICAgICAgICBnb3RvIGhlYWRleGl0OworICAgIH0KKworICAgIC8qIFByb2Nlc3MgdGhl IGhlYWRlcnMgKi8KKworICAgIGxvY2FsX3QgPSB0aW1lKE5VTEwpOworICAgIG51bGxsaW5lID0g MDsKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDAp KSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7CisgICAgICAgIGJ1ZltpXSA9IGNoOworICAgICAg ICBpZiAoYnVmW2ldID09IDEwKSB7ICAgICAgICAgICAgIC8qIGZvdW5kIGVuZCBvZiBsaW5lICov CisgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMpCisgICAgICAgICAgICAg IGktLTsKKyAgICAgICAgICAgIGlmIChpIDwgMSkKKyAgICAgICAgICAgICAgbnVsbGxpbmUgPSAx OworICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKKyAgICAgICAgICAgIGlmIChhcnJheSAmJiAh bnVsbGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVBRENOVCkKKyAgICAgICAgICAgICAgbWFrZXN0cigm aGVhZGVyc1toZGNudCsrXSxidWYpOworICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYsIkhU VFAiLDQsMCkpIHsKKyAgICAgICAgICAgICAgICBodHRwX2ZuZCA9IDE7CisgICAgICAgICAgICAg ICAgaiA9IGNraW5kZXgoIiAiLGJ1ZiwwLDAsMCk7CisgICAgICAgICAgICAgICAgcCA9ICZidWZb al07CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKnApKQorICAgICAgICAgICAgICAg ICAgcCsrOworICAgICAgICAgICAgICAgIHN3aXRjaCAocFswXSkgeworICAgICAgICAgICAgICAg ICAgY2FzZSAnMSc6ICAgICAgICAgICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLworICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJzInOiAgICAg ICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgY2FzZSAnMyc6ICAgICAgICAgICAgIC8qIFJlZGlyZWN0aW9uICovCisgICAg ICAgICAgICAgICAgICBjYXNlICc0JzogICAgICAgICAgICAgLyogQ2xpZW50IGZhaWx1cmUgKi8K KyAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiAgICAgICAgICAgICAvKiBTZXJ2ZXIgZmFpbHVy ZSAqLworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIC8qIFVua25vd24g Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIkZhaWx1cmU6IFNlcnZlciByZXBvcnRzICVzXG4iLHApOworICAgICAgICAgICAg ICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBodHRw X3NldF9jb2RlX3JlcGx5KHApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7CisgICAgICAgICAgICAg ICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAgKQorICAgICAgICAg ICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBpZiAoIGxvY2FsICYmIGxvY2FsWzBdICkgeworICAgICAgICAgICAgICAgICAgICB6 c291dChaT0ZJTEUsYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgenNvdXQoWk9GSUxFLCJcclxu Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdGRpbykKKyAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLGJ1Zik7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGkrKzsKKyAgICAg ICAgfQorICAgIH0KKyAgICBpZiAoY2ggPCAwICYmIGZpcnN0KSB7CisgICAgICAgIGZpcnN0LS07 CisgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgaHR0cF9yZW9wZW4oKTsKKyAgICAgICAg Z290byBoZWFkcmVxOworICAgIH0KKyAgICBpZiAoIGh0dHBfZm5kID09IDAgKQorICAgICAgICBy YyA9IC0xOworCisgICAgaWYgKGFycmF5KQorICAgICAgaHR0cF9ta2FycmF5KGhlYWRlcnMsaGRj bnQsYXJyYXkpOworCisgIGhlYWRleGl0OgorICAgIGlmICggbG9jYWwgJiYgbG9jYWxbMF0gKQor ICAgICAgICB6Y2xvc2UoWk9GSUxFKTsKKyAgICBpZiAoY2xvc2Vjb24pCisgICAgICAgIGh0dHBf Y2xvc2UoKTsKKyAgICBmcmVlKHJlcXVlc3QpOworICAgIGZvciAoaSA9IDA7IGkgPCBoZGNudDsg aSsrKSB7CisgICAgICAgIGlmIChoZWFkZXJzW2ldKQorICAgICAgICAgIGZyZWUoaGVhZGVyc1tp XSk7CisgICAgfQorICAgIHJldHVybihyYyk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCito dHRwX2luZGV4KGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBjaGFyICogdXNlciwgY2hh ciAqIHB3ZCwKKyAgICAgICAgICAgICBjaGFyIGFycmF5LCBjaGFyICogbG9jYWwsIGNoYXIgKiBy ZW1vdGUsIGludCBzdGRpbykKKyNlbHNlCitodHRwX2luZGV4KGFnZW50LCBoZHJsaXN0LCB1c2Vy LCBwd2QsIGFycmF5LCBsb2NhbCwgcmVtb3RlLCBzdGRpbykKKyAgICBjaGFyICogYWdlbnQ7IGNo YXIgKiogaGRybGlzdDsgY2hhciAqIHVzZXI7IGNoYXIgKiBwd2Q7CisgICAgY2hhciBhcnJheTsg Y2hhciAqIGxvY2FsOyBjaGFyICogcmVtb3RlOyBpbnQgc3RkaW87CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICBjaGFyICogcmVxdWVzdCA9IE5VTEw7CisgICAgaW50ICAgIGksIGosIGxl biA9IDAsIGhkY250ID0gMCwgcmMgPSAwOworICAgIGludCAgICBjaDsKKyAgICBpbnQgICAgaHR0 cF9mbmQgPSAwOworICAgIGNoYXIgICBidWZbSFRUUEJVRkxFTl0sICpwOworICAgIGludCAgICBu dWxsbGluZTsKKyAgICB0aW1lX3QgbW9kX3Q7CisgICAgdGltZV90IHNydl90OworICAgIHRpbWVf dCBsb2NhbF90OworICAgIGNoYXIgcGFzc3dkWzY0XTsKKyAgICBjaGFyIGI2NGluWzEyOF07Cisg ICAgY2hhciBiNjRvdXRbMjU2XTsKKyAgICBjaGFyICogaGVhZGVyc1tIVFRQSEVBRENOVF07Cisg ICAgaW50ICBjbG9zZWNvbiA9IDA7CisgICAgaW50ICBjaHVua2VkID0gMDsKKyAgICBpbnQgIHpm aWxlID0gMDsKKyAgICBpbnQgIGZpcnN0ID0gMTsKKworICAgIGlmIChodHRwZmQgPT0gLTEpCisg ICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKGFycmF5KSB7CisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBIVFRQSEVBRENOVDsgaSsrKQorICAgICAgICAgIGhlYWRlcnNbaV0gPSBOVUxMOworICAg IH0KKyAgICBsZW4gPSAxMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU5ERVggKi8K KyAgICBsZW4gKz0gc3RybGVuKEhUVFBfVkVSU0lPTik7CisgICAgbGVuICs9IHN0cmxlbihyZW1v dGUpOworICAgIGxlbiArPSAxNjsKKworICAgIGlmICggaGRybGlzdCApIHsKKyAgICAgICAgZm9y IChpID0gMDsgaGRybGlzdFtpXTsgaSsrKQorICAgICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJs aXN0W2ldKSArIDI7CisgICAgfQorICAgIGxlbiArPSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQpICsg ODsKKworICAgIGlmIChhZ2VudCkKKyAgICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50KTsK KyAgICBpZiAodXNlcikgeworICAgICAgICBpZiAoIXB3ZCkgeworICAgICAgICAgICAgcmVhZHBh c3MoIlBhc3N3b3JkOiAiLHBhc3N3ZCw2NCk7CisgICAgICAgICAgICBwd2QgPSBwYXNzd2Q7Cisg ICAgICAgIH0KKyAgICAgICAgY2ttYWttc2coYjY0aW4sc2l6ZW9mKGI2NGluKSx1c2VyLCI6Iixw d2QsTlVMTCk7CisgICAgICAgIGogPSBiOHRvYjY0KGI2NGluLHN0cmxlbihiNjRpbiksYjY0b3V0 LDI1Nik7CisgICAgICAgIG1lbXNldChwd2QsMCxzdHJsZW4ocHdkKSk7CisgICAgICAgIGlmIChq IDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBiNjRvdXRbal0gPSAnXDAnOwor ICAgICAgICBsZW4gKz0gaiArIDI0OworICAgIH0KKyNpZmRlZiBIVFRQX0NMT1NFCisgICAgbGVu ICs9IDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbjogY2xvc2UgKi8K KyNlbmRpZgorICAgIGxlbiArPSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsYW5r IGxpbmUgKyBudWxsICovCisKKyAgICByZXF1ZXN0ID0gbWFsbG9jKGxlbik7CisgICAgaWYgKCFy ZXF1ZXN0KQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIHNwcmludGYocmVxdWVzdCwiSU5ERVgg JXNcclxuIixIVFRQX1ZFUlNJT04pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJIb3N0OiAiLCBs ZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfaG9zdF9wb3J0LCBsZW4pOworICAgIGNr c3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGlmIChhZ2VudCkgeworICAgICAgICBj a3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2VudDogIixsZW4pOworICAgICAgICBja3N0cm5jYXQo cmVxdWVzdCxhZ2VudCxsZW4pOworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVu KTsKKyAgICB9CisgICAgaWYgKHVzZXIpIHsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkF1 dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYjY0 b3V0LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIH0K KyAgICBpZiAoIGhkcmxpc3QgKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGhkcmxpc3RbaV07IGkr KykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsaGRybGlzdFtpXSxsZW4pOworICAg ICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgICAgIH0KKyAgICB9 CisjaWZkZWYgSFRUUF9DTE9TRQorICAgIGNrc3RybmNhdChyZXF1ZXN0LCJDb25uZWN0aW9uOiBj bG9zZVxyXG4iLGxlbik7CisjZW5kaWYKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVu KTsKKyAgaW5kZXhyZXE6CisgICAgaWYgKGh0dHBfdG9sKChDSEFSICopcmVxdWVzdCxzdHJsZW4o cmVxdWVzdCkpIDwgMCkKKyAgICB7CisgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgaWYg KCBmaXJzdCApIHsKKyAgICAgICAgICAgIGZpcnN0LS07CisgICAgICAgICAgICBodHRwX3Jlb3Bl bigpOworICAgICAgICAgICAgZ290byBpbmRleHJlcTsKKyAgICAgICAgfQorICAgICAgICByYyA9 IC0xOworICAgICAgICBnb3RvIGluZGV4ZXhpdDsKKyAgICB9CisKKyAgICAvKiBQcm9jZXNzIHRo ZSBoZWFkZXJzICovCisgICAgbG9jYWxfdCA9IHRpbWUoTlVMTCk7CisgICAgbnVsbGxpbmUgPSAw OworICAgIGkgPSAwOworICAgIGxlbiA9IC0xOworICAgIHdoaWxlICghbnVsbGxpbmUgJiYgKGNo ID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsKKyAgICAgICAgYnVmW2ld ID0gY2g7CisgICAgICAgIGlmIChidWZbaV0gPT0gMTApIHsgICAgICAgICAgICAgLyogZm91bmQg ZW5kIG9mIGxpbmUgKi8KKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykK KyAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgaWYgKGkgPCAxKQorICAgICAgICAgICAg ICBudWxsbGluZSA9IDE7CisgICAgICAgICAgICBidWZbaV0gPSAnXDAnOworICAgICAgICAgICAg aWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBIRUFEQ05UKQorICAgICAgICAg ICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7CisgICAgICAgICAgICBpZiAoIWNr c3RyY21wKGJ1ZiwiSFRUUCIsNCwwKSkgeworICAgICAgICAgICAgICAgIGh0dHBfZm5kID0gMTsK KyAgICAgICAgICAgICAgICBqID0gY2tpbmRleCgiICIsYnVmLDAsMCwwKTsKKyAgICAgICAgICAg ICAgICBwID0gJmJ1ZltqXTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgqcCkpCisg ICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgc3dpdGNoICggcFswXSApIHsK KyAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOiAgICAgICAgICAgICAvKiBJbmZvcm1hdGlvbmFs IG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICBjYXNlICcyJzogICAgICAgICAgICAgLyogU3VjY2VzcyAqLworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJzMnOiAgICAgICAgICAgICAvKiBSZWRp cmVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6ICAgICAgICAgICAgIC8qIENs aWVudCBmYWlsdXJlICovCisgICAgICAgICAgICAgICAgICBjYXNlICc1JzogICAgICAgICAgICAg LyogU2VydmVyIGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAvKiBVbmtub3duICovCisgICAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCisgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsdXJlOiBTZXJ2ZXIgcmVwb3J0cyAlc1xuIixw KTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgaHR0cF9zZXRfY29kZV9yZXBseShwKTsKKyAgICAgICAgICAgIH0gZWxzZSBp ZiAoICFudWxsbGluZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29u bmVjdGlvbjoiLDExLDApKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xv c2UiLGJ1ZiwxMSwwLDApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vjb24g PSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29udGVudC1M ZW5ndGg6IiwxNSwwKSkgeworICAgICAgICAgICAgICAgICAgICBsZW4gPSBhdG9pKCZidWZbMTZd KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIlRyYW5zZmVyLUVu Y29kaW5nOiIsMTgsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjaHVu a2VkIixidWYsMTgsMCwwKSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rZWQg PSAxOworCQkgICAgZGVidWcoRjEwMSwiaHR0cF9pbmRleCBjaHVua2VkIiwiIixjaHVua2VkKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xuIixidWYpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2ggPCAwICYmIGZpcnN0 KSB7CisgICAgICAgIGZpcnN0LS07CisgICAgICAgIGh0dHBfY2xvc2UoKTsKKyAgICAgICAgaHR0 cF9yZW9wZW4oKTsKKyAgICAgICAgZ290byBpbmRleHJlcTsKKyAgICB9CisgICAgaWYgKCBodHRw X2ZuZCA9PSAwICkgeworICAgICAgICByYyA9IC0xOworICAgICAgICBjbG9zZWNvbiA9IDE7Cisg ICAgICAgIGdvdG8gaW5kZXhleGl0OworICAgIH0KKworICAgIC8qIE5vdyB3ZSBoYXZlIHRoZSBj b250ZW50cyBvZiB0aGUgZmlsZSAqLworICAgIGlmICggbG9jYWwgJiYgbG9jYWxbMF0gKSB7Cisg ICAgICAgIGlmICh6b3Blbm8oWk9GSUxFLGxvY2FsLE5VTEwsTlVMTCkpCisgICAgICAgICAgICB6 ZmlsZSA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgfQorCisg ICAgaWYgKCBjaHVua2VkICkgeworICAgICAgICB3aGlsZSAoKGxlbiA9IGh0dHBfZ2V0X2NodW5r X2xlbigpKSA+IDApIHsKKyAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0cF9pbmMo MCkpID49IDApIHsKKyAgICAgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgICAgICBpZiAo IHpmaWxlICkKKyAgICAgICAgICAgICAgICAgICAgemNob3V0KFpPRklMRSwoQ0hBUiljaCk7Cisg ICAgICAgICAgICAgICAgaWYgKCBzdGRpbyApCisgICAgICAgICAgICAgICAgICAgIGNvbm9jKChD SEFSKWNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoY2ggPSBodHRwX2luYygw KSkgIT0gQ1IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoKGNoID0g aHR0cF9pbmMoMCkpICE9IExGKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0g MCkgeworICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICBpZiAoIHpmaWxlICkKKyAgICAg ICAgICAgICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsKKyAgICAgICAgICAgIGlmICggc3Rk aW8gKQorICAgICAgICAgICAgICAgIGNvbm9jKChDSEFSKWNoKTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGlmICggemZpbGUgKQorICAgICAgICB6Y2xvc2UoWk9GSUxFKTsKKworICAgIGlmICgg Y2h1bmtlZCApIHsgICAgICAgICAgICAvKiBQYXJzZSBUcmFpbGluZyBIZWFkZXJzICovCisgICAg ICAgIG51bGxsaW5lID0gMDsKKyAgICAgICAgd2hpbGUgKCFudWxsbGluZSAmJiAoY2ggPSBodHRw X2luYygwKSkgPj0gMCAmJiBpIDwgSFRUUEJVRkxFTikgeworICAgICAgICAgICAgYnVmW2ldID0g Y2g7CisgICAgICAgICAgICBpZiAoIGJ1ZltpXSA9PSAxMCApIHsgLyogZm91bmQgZW5kIG9mIGxp bmUgKi8KKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMpCisgICAg ICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgICAgaWYgKGkgPCAxKQorICAgICAgICAg ICAgICAgICAgbnVsbGxpbmUgPSAxOworICAgICAgICAgICAgICAgIGJ1ZltpXSA9ICdcMCc7Cisg ICAgICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBIRUFE Q05UKQorICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7 CisgICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYsIkNvbm5lY3Rpb246IiwxMSwwKSkg eworICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAh PSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlY29uID0gMTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBy YyA9IDA7CisKKyAgaW5kZXhleGl0OgorICAgIGlmIChhcnJheSkKKyAgICAgIGh0dHBfbWthcnJh eShoZWFkZXJzLGhkY250LGFycmF5KTsKKworICAgIGlmIChjbG9zZWNvbikKKyAgICAgICAgaHR0 cF9jbG9zZSgpOworICAgIGZyZWUocmVxdWVzdCk7CisgICAgZm9yIChpID0gMDsgaSA8IGhkY250 OyBpKyspIHsKKyAgICAgICAgaWYgKGhlYWRlcnNbaV0pCisgICAgICAgICAgZnJlZShoZWFkZXJz W2ldKTsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMK K2h0dHBfcHV0KGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBjaGFyICogbWltZSwgY2hh ciAqIHVzZXIsCisgICAgICAgICBjaGFyICogcHdkLCBjaGFyIGFycmF5LCBjaGFyICogbG9jYWws IGNoYXIgKiByZW1vdGUsCisgICAgICAgICBjaGFyICogZGVzdCwgaW50IHN0ZGlvKQorI2Vsc2UK K2h0dHBfcHV0KGFnZW50LCBoZHJsaXN0LCBtaW1lLCB1c2VyLCBwd2QsIGFycmF5LCBsb2NhbCwg cmVtb3RlLCBkZXN0LCBzdGRpbykKKyAgICBjaGFyICogYWdlbnQ7IGNoYXIgKiogaGRybGlzdDsg Y2hhciAqIG1pbWU7IGNoYXIgKiB1c2VyOworICAgIGNoYXIgKiBwd2Q7IGNoYXIgYXJyYXk7IGNo YXIgKiBsb2NhbDsgY2hhciAqIHJlbW90ZTsgY2hhciAqIGRlc3Q7CisgICAgaW50IHN0ZGlvOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgY2hhciAqIHJlcXVlc3Q9TlVMTDsKKyAgICBp bnQgICAgaSwgaiwgbGVuID0gMCwgaGRjbnQgPSAwLCByYyA9IDA7CisgICAgaW50ICAgIGNoOwor ICAgIGludCAgICBodHRwX2ZuZCA9IDA7CisgICAgY2hhciAgIGJ1ZltIVFRQQlVGTEVOXSwgKnA7 CisgICAgaW50ICAgIG51bGxsaW5lOworICAgIHRpbWVfdCBtb2RfdDsKKyAgICB0aW1lX3Qgc3J2 X3Q7CisgICAgdGltZV90IGxvY2FsX3Q7CisgICAgY2hhciBwYXNzd2RbNjRdOworICAgIGNoYXIg YjY0aW5bMTI4XTsKKyAgICBjaGFyIGI2NG91dFsyNTZdOworICAgIGludCAgZmlsZWxlbjsKKyAg ICBjaGFyICogaGVhZGVyc1tIVFRQSEVBRENOVF07CisgICAgaW50ICBjbG9zZWNvbiA9IDA7Cisg ICAgaW50ICBjaHVua2VkID0gMDsKKyAgICBpbnQgIGZpcnN0ID0gMTsKKyAgICBpbnQgIHpmaWxl ID0gMDsKKworICAgIGlmIChodHRwZmQgPT0gLTEpCisgICAgICByZXR1cm4oLTEpOworICAgIGlm ICghbWltZSkgbWltZSA9ICIiOworICAgIGlmICghcmVtb3RlKSByZW1vdGUgPSAiIjsKKyAgICBp ZiAoIWxvY2FsKSBsb2NhbCA9ICIiOworICAgIGlmICghKmxvY2FsKSByZXR1cm4oLTEpOworCisg ICAgaWYgKGFycmF5KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBIVFRQSEVBRENOVDsgaSsr KQorICAgICAgICAgIGhlYWRlcnNbaV0gPSBOVUxMOworICAgIH0KKyAgICBmaWxlbGVuID0gemNo a2kobG9jYWwpOworICAgIGlmIChmaWxlbGVuIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisKKyAg ICAvKiBDb21wdXRlIGxlbmd0aCBvZiByZXF1ZXN0IGhlYWRlciAqLworICAgIGxlbiA9IDg7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBVVCAqLworICAgIGxlbiArPSBzdHJsZW4oSFRU UF9WRVJTSU9OKTsKKyAgICBsZW4gKz0gc3RybGVuKHJlbW90ZSk7CisgICAgbGVuICs9IDE2Owor CisgICAgaWYgKCBoZHJsaXN0ICkgeworICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBp KyspCisgICAgICAgICAgICBsZW4gKz0gc3RybGVuKGhkcmxpc3RbaV0pICsgMjsKKyAgICB9Cisg ICAgbGVuICs9IHN0cmxlbihodHRwX2hvc3RfcG9ydCkgKyA4OworCisgICAgaWYgKGFnZW50KQor ICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50KTsKKyAgICBpZiAodXNlcikgeworICAgICAg ICBpZiAoIXB3ZCkgeworICAgICAgICAgICAgcmVhZHBhc3MoIlBhc3N3b3JkOiAiLHBhc3N3ZCw2 NCk7CisgICAgICAgICAgICBwd2QgPSBwYXNzd2Q7CisgICAgICAgIH0KKyAgICAgICAgY2ttYWtt c2coYjY0aW4sc2l6ZW9mKGI2NGluKSx1c2VyLCI6Iixwd2QsTlVMTCk7CisgICAgICAgIGogPSBi OHRvYjY0KGI2NGluLHN0cmxlbihiNjRpbiksYjY0b3V0LDI1Nik7CisgICAgICAgIG1lbXNldChw d2QsMCxzdHJsZW4ocHdkKSk7CisgICAgICAgIGlmIChqIDwgMCkKKyAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICBiNjRvdXRbal0gPSAnXDAnOworICAgICAgICBsZW4gKz0gaiArIDI0Owor ICAgIH0KKyAgICBsZW4gKz0gMTYgKyBzdHJsZW4obWltZSk7ICAgICAgICAgICAvKiBDb250ZW50 LXR5cGU6ICovCisgICAgbGVuICs9IDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29u dGVudC1sZW5ndGg6ICovCisgICAgbGVuICs9IDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRGF0ZTogKi8KKyNpZmRlZiBIVFRQX0NMT1NFCisgICAgbGVuICs9IDE5OyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29ubmVjdGlvbjogY2xvc2UgKi8KKyNlbmRpZgorICAgIGxlbiAr PSAzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsYW5rIGxpbmUgKyBudWxsICovCisK KyAgICByZXF1ZXN0ID0gbWFsbG9jKGxlbik7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgcmV0 dXJuKC0xKTsKKworICAgIHNwcmludGYocmVxdWVzdCwiUFVUICVzICVzXHJcbiIscmVtb3RlLEhU VFBfVkVSU0lPTik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkRhdGU6ICIsbGVuKTsKKyNpZmRl ZiBDTURBVEUyVE0KKyAgICBja3N0cm5jYXQocmVxdWVzdCxodHRwX25vdygpLGxlbik7CisjZWxz ZQorICAgIGNrc3RybmNhdChyZXF1ZXN0LC4uLixsZW4pOworI2VuZGlmIC8qIENNREFURTJUTSAq LworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJIb3N0OiAiLCBsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfaG9zdF9wb3J0 LCBsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGlmIChhZ2Vu dCkgeworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2VudDogIixsZW4pOworICAg ICAgICBja3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOworICAgICAgICBja3N0cm5jYXQocmVx dWVzdCwiXHJcbiIsbGVuKTsKKyAgICB9CisgICAgaWYgKHVzZXIpIHsKKyAgICAgICAgY2tzdHJu Y2F0KHJlcXVlc3QsIkF1dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsKKyAgICAgICAgY2tzdHJu Y2F0KHJlcXVlc3QsYjY0b3V0LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxu IixsZW4pOworICAgIH0KKyAgICBpZiAoIGhkcmxpc3QgKSB7CisgICAgICAgIGZvciAoaSA9IDA7 IGhkcmxpc3RbaV07IGkrKykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsaGRybGlz dFtpXSxsZW4pOworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7Cisg ICAgICAgIH0KKyAgICB9CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkNvbnRlbnQtdHlwZTogIixs ZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LG1pbWUsbGVuKTsKKyAgICBja3N0cm5jYXQocmVx dWVzdCwiXHJcbiIsbGVuKTsKKyAgICBzcHJpbnRmKGJ1ZiwiQ29udGVudC1sZW5ndGg6ICVkXHJc biIsZmlsZWxlbik7IC8qIHNhZmUgKi8KKyAgICBja3N0cm5jYXQocmVxdWVzdCxidWYsbGVuKTsK KyNpZmRlZiBIVFRQX0NMT1NFCisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkNvbm5lY3Rpb246IGNs b3NlXHJcbiIsbGVuKTsKKyNlbmRpZgorICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4p OworCisgICAgLyogTm93IHdlIGhhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlICovCisgICAg aWYgKHpvcGVuaShaSUZJTEUsbG9jYWwpKSB7CisKKyAgICAgIHB1dHJlcToJCQkJLyogU2VuZCBy ZXF1ZXN0ICovCisgICAgICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKXJlcXVlc3Qsc3RybGVuKHJl cXVlc3QpKSA8PSAwKSB7CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgICAgICBp ZiAoIGZpcnN0ICkgeworICAgICAgICAgICAgICAgIGZpcnN0LS07CisgICAgICAgICAgICAgICAg aHR0cF9yZW9wZW4oKTsKKyAgICAgICAgICAgICAgICBnb3RvIHB1dHJlcTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHpjbG9zZShaSUZJTEUpOworICAgICAgICAgICAgcmMgPSAtMTsKKyAg ICAgICAgICAgIGdvdG8gcHV0ZXhpdDsKKyAgICAgICAgfQorICAgICAgICAvKiBSZXF1ZXN0IGhl YWRlcnMgaGF2ZSBiZWVuIHNlbnQgKi8KKworICAgICAgICBpID0gMDsKKyAgICAgICAgd2hpbGUg KHpjaGluKFpJRklMRSwmY2gpID09IDApIHsKKyAgICAgICAgICAgIGJ1ZltpKytdID0gY2g7Cisg ICAgICAgICAgICBpZiAoaSA9PSBIVFRQQlVGTEVOKSB7CisgICAgICAgICAgICAgICAgaWYgKGh0 dHBfdG9sKChDSEFSICopYnVmLEhUVFBCVUZMRU4pIDw9IDApIHsKKyAgICAgICAgICAgICAgICAg ICAgaHR0cF9jbG9zZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ICkgeworICAg ICAgICAgICAgICAgICAgICAgICAgZmlyc3QtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0 dHBfcmVvcGVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHB1dHJlcTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpID0g MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAg ICAgICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKWJ1ZixpKSA8IDApIHsKKyAgICAgICAgICAgICAg ICBodHRwX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCApIHsKKyAgICAgICAg ICAgICAgICAgICAgZmlyc3QtLTsKKyAgICAgICAgICAgICAgICAgICAgaHR0cF9yZW9wZW4oKTsK KyAgICAgICAgICAgICAgICAgICAgZ290byBwdXRyZXE7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHpjbG9zZShaSUZJTEUpOworCisgICAgICAg IC8qIFByb2Nlc3MgdGhlIHJlc3BvbnNlIGhlYWRlcnMgKi8KKyAgICAgICAgbG9jYWxfdCA9IHRp bWUoTlVMTCk7CisgICAgICAgIG51bGxsaW5lID0gMDsKKyAgICAgICAgaSA9IDA7CisgICAgICAg IGxlbiA9IC0xOworICAgICAgICB3aGlsZSAoIW51bGxsaW5lICYmIChjaCA9IGh0dHBfaW5jKDAp KSA+PSAwICYmIGkgPCBIVFRQQlVGTEVOKSB7CisgICAgICAgICAgICBidWZbaV0gPSBjaDsKKyAg ICAgICAgICAgIGlmIChidWZbaV0gPT0gMTApIHsgICAgICAgICAvKiBmb3VuZCBlbmQgb2YgbGlu ZSAqLworICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBidWZbaS0xXSA9PSAxMykKKyAgICAg ICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IDEpCisgICAgICAgICAg ICAgICAgICBudWxsbGluZSA9IDE7CisgICAgICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKKyAg ICAgICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURD TlQpCisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZoZWFkZXJzW2hkY250KytdLGJ1Zik7Cisg ICAgICAgICAgICAgICAgaWYgKCFja3N0cmNtcChidWYsIkhUVFAiLDQsMCkpIHsKKyAgICAgICAg ICAgICAgICAgICAgaHR0cF9mbmQgPSAxOworICAgICAgICAgICAgICAgICAgICBqID0gY2tpbmRl eCgiICIsYnVmLDAsMCwwKTsKKyAgICAgICAgICAgICAgICAgICAgcCA9ICZidWZbal07CisgICAg ICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpwKSkKKyAgICAgICAgICAgICAgICAgICAg ICBwKys7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocFswXSkgeworICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgJzEnOiAgICAgICAgIC8qIEluZm9ybWF0aW9uYWwgbWVzc2FnZSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSAnMic6ICAgICAgICAgLyogU3VjY2VzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6ICAgICAgICAgLyogUmVkaXJlY3Rp b24gKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzogICAgICAgICAvKiBDbGllbnQg ZmFpbHVyZSAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiAgICAgICAgIC8qIFNl cnZlciBmYWlsdXJlICovCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAg LyogVW5rbm93biAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsdXJlOiBTZXJ2ZXIgcmVwb3J0cyAlc1xu IixwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaHR0cF9zZXRfY29kZV9yZXBseShwKTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1 ZiwiQ29ubmVjdGlvbjoiLDExLDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNr aW5kZXgoImNsb3NlIixidWYsMTEsMCwwKSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjbG9zZWNvbiA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3Ry Y21wKGJ1ZiwiQ29udGVudC1MZW5ndGg6IiwxNSwwKSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgbGVuID0gYXRvaSgmYnVmWzE2XSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo IWNrc3RyY21wKGJ1ZiwiVHJhbnNmZXItRW5jb2Rpbmc6IiwxOCwwKSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjaHVua2VkIixidWYsMTgsMCwwKSAhPSAwICkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua2VkID0gMTsKKwkJCWRlYnVnKEYxMDEsImh0 dHBfcHV0IGNodW5rZWQiLCIiLGNodW5rZWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIGlmICggc3RkaW8gKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIlc1xuIixidWYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpID0g MDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjaCA8IDAgJiYgZmlyc3QpIHsKKyAgICAgICAg ICAgIGZpcnN0LS07CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgICAgICBodHRw X3Jlb3BlbigpOworICAgICAgICAgICAgZ290byBwdXRyZXE7CisgICAgICAgIH0KKyAgICAgICAg aWYgKCBodHRwX2ZuZCA9PSAwICkgeworICAgICAgICAgICAgY2xvc2Vjb24gPSAxOworICAgICAg ICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gcHV0ZXhpdDsKKyAgICAgICAgfQorCisg ICAgICAgIC8qIEFueSByZXNwb25zZSBkYXRhPyAqLworICAgICAgICBpZiAoIGRlc3QgJiYgZGVz dFswXSApIHsKKyAgICAgICAgICAgIGlmICh6b3Blbm8oWk9GSUxFLGRlc3QsTlVMTCxOVUxMKSkK KyAgICAgICAgICAgICAgICB6ZmlsZSA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgcmMgPSAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggY2h1bmtlZCApIHsKKyAg ICAgICAgICAgIHdoaWxlICgobGVuID0gaHR0cF9nZXRfY2h1bmtfbGVuKCkpID4gMCkgeworICAg ICAgICAgICAgICAgIHdoaWxlIChsZW4gJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDApIHsKKyAg ICAgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICAgICAgICAgIGlmICggemZpbGUg KQorICAgICAgICAgICAgICAgICAgICAgICAgemNob3V0KFpPRklMRSwoQ0hBUiljaCk7CisgICAg ICAgICAgICAgICAgICAgIGlmICggc3RkaW8gKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u b2MoKENIQVIpY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKGNo ID0gaHR0cF9pbmMoMCkpICE9IENSKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICBpZiAoKGNoID0gaHR0cF9pbmMoMCkpICE9IExGKQorICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHdoaWxlIChsZW4gJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDApIHsKKyAgICAgICAgICAgICAg ICBsZW4tLTsKKyAgICAgICAgICAgICAgICBpZiAoIHpmaWxlICkKKyAgICAgICAgICAgICAgICAg ICAgemNob3V0KFpPRklMRSwoQ0hBUiljaCk7CisgICAgICAgICAgICAgICAgaWYgKCBzdGRpbyAp CisgICAgICAgICAgICAgICAgICAgIGNvbm9jKChDSEFSKWNoKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIGlmICggemZpbGUgKQorICAgICAgICAgICAgemNsb3NlKFpPRklM RSk7CisKKyAgICAgICAgaWYgKCBjaHVua2VkICkgeyAgICAgICAgICAgIC8qIFBhcnNlIFRyYWls aW5nIEhlYWRlcnMgKi8KKyAgICAgICAgICAgIG51bGxsaW5lID0gMDsKKyAgICAgICAgICAgIHdo aWxlICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZM RU4pIHsKKyAgICAgICAgICAgICAgICBidWZbaV0gPSBjaDsKKyAgICAgICAgICAgICAgICBpZiAo IGJ1ZltpXSA9PSAxMCApIHsgLyogZm91bmQgZW5kIG9mIGxpbmUgKi8KKyAgICAgICAgICAgICAg ICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFdID09IDEzKQorICAgICAgICAgICAgICAgICAgICAg IGktLTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAxKQorICAgICAgICAgICAgICAgICAg ICAgIG51bGxsaW5lID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKGFycmF5ICYmICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBI RUFEQ05UKQorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNudCsr XSxidWYpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlv bjoiLDExLDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNsb3Nl IixidWYsMTEsMCwwKSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWNv biA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7 CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg ICAgICAgIHJjID0gLTE7CisgICAgfQorCisgIHB1dGV4aXQ6CisgICAgaWYgKCBhcnJheSApCisg ICAgICAgIGh0dHBfbWthcnJheShoZWFkZXJzLGhkY250LGFycmF5KTsKKworICAgIGlmIChjbG9z ZWNvbikKKyAgICAgICAgaHR0cF9jbG9zZSgpOworICAgIGZyZWUocmVxdWVzdCk7CisgICAgZm9y IChpID0gMDsgaSA8IGhkY250OyBpKyspIHsKKyAgICAgICAgaWYgKGhlYWRlcnNbaV0pCisgICAg ICAgICAgZnJlZShoZWFkZXJzW2ldKTsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworaW50 CisjaWZkZWYgQ0tfQU5TSUMKK2h0dHBfZGVsZXRlKGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJs aXN0LCBjaGFyICogdXNlciwKKyAgICAgICAgICBjaGFyICogcHdkLCBjaGFyIGFycmF5LCBjaGFy ICogcmVtb3RlKQorI2Vsc2UKK2h0dHBfZGVsZXRlKGFnZW50LCBoZHJsaXN0LCB1c2VyLCBwd2Qs IGFycmF5LCByZW1vdGUpCisgICAgY2hhciAqIGFnZW50OyBjaGFyICoqIGhkcmxpc3Q7IGNoYXIg KiB1c2VyOworICAgIGNoYXIgKiBwd2Q7IGNoYXIgYXJyYXk7IGNoYXIgKiByZW1vdGU7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjaGFyICogcmVxdWVzdD1OVUxMOworICAgIGludCAg ICBpLCBqLCBsZW4gPSAwLCBoZGNudCA9IDAsIHJjID0gMDsKKyAgICBpbnQgICAgY2g7CisgICAg aW50ICAgIGh0dHBfZm5kID0gMDsKKyAgICBjaGFyICAgYnVmW0hUVFBCVUZMRU5dLCAqcDsKKyAg ICBpbnQgICAgbnVsbGxpbmU7CisgICAgdGltZV90IG1vZF90OworICAgIHRpbWVfdCBzcnZfdDsK KyAgICB0aW1lX3QgbG9jYWxfdDsKKyAgICBjaGFyIHBhc3N3ZFs2NF07CisgICAgY2hhciBiNjRp blsxMjhdOworICAgIGNoYXIgYjY0b3V0WzI1Nl07CisgICAgY2hhciAqIGhlYWRlcnNbSFRUUEhF QURDTlRdOworICAgIGludCAgY2xvc2Vjb24gPSAwOworICAgIGludCAgY2h1bmtlZCA9IDA7Cisg ICAgaW50ICBmaXJzdCA9IDE7CisKKyAgICBpZiAoaHR0cGZkID09IC0xKQorICAgICAgcmV0dXJu KC0xKTsKKworICAgIGlmIChhcnJheSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRUUEhF QURDTlQ7IGkrKykKKyAgICAgICAgICBoZWFkZXJzW2ldID0gTlVMTDsKKyAgICB9CisKKyAgICAv KiBDb21wdXRlIGxlbmd0aCBvZiByZXF1ZXN0IGhlYWRlciAqLworICAgIGxlbiA9IDExOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBERUxFVEUgKi8KKyAgICBsZW4gKz0gc3RybGVuKEhU VFBfVkVSU0lPTik7CisgICAgbGVuICs9IHN0cmxlbihyZW1vdGUpOworICAgIGxlbiArPSAxNjsK KworICAgIGlmICggaGRybGlzdCApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaGRybGlzdFtpXTsg aSsrKQorICAgICAgICAgICAgbGVuICs9IHN0cmxlbihoZHJsaXN0W2ldKSArIDI7CisgICAgfQor ICAgIGxlbiArPSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQpICsgODsKKworICAgIGlmIChhZ2VudCkK KyAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7CisgICAgaWYgKHVzZXIpIHsKKyAgICAg ICAgaWYgKCFwd2QpIHsKKyAgICAgICAgICAgIHJlYWRwYXNzKCJQYXNzd29yZDogIixwYXNzd2Qs NjQpOworICAgICAgICAgICAgcHdkID0gcGFzc3dkOworICAgICAgICB9CisgICAgICAgIGNrbWFr bXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIscHdkLE5VTEwpOworICAgICAgICBqID0g Yjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91dCwyNTYpOworICAgICAgICBtZW1zZXQo cHdkLDAsc3RybGVuKHB3ZCkpOworICAgICAgICBpZiAoaiA8IDApCisgICAgICAgICAgcmV0dXJu KC0xKTsKKyAgICAgICAgYjY0b3V0W2pdID0gJ1wwJzsKKyAgICAgICAgbGVuICs9IGogKyAyNDsK KyAgICB9CisgICAgbGVuICs9IDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZTog Ki8KKyNpZmRlZiBIVFRQX0NMT1NFCisgICAgbGVuICs9IDE5OyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ29ubmVjdGlvbjogY2xvc2UgKi8KKyNlbmRpZgorICAgIGxlbiArPSAzOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGJsYW5rIGxpbmUgKyBudWxsICovCisKKyAgICByZXF1 ZXN0ID0gbWFsbG9jKGxlbik7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgcmV0dXJuKC0xKTsK KworICAgIHNwcmludGYocmVxdWVzdCwiREVMRVRFICVzICVzXHJcbiIscmVtb3RlLEhUVFBfVkVS U0lPTik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkRhdGU6ICIsbGVuKTsKKyNpZmRlZiBDTURB VEUyVE0KKyAgICBja3N0cm5jYXQocmVxdWVzdCxodHRwX25vdygpLGxlbik7CisjZWxzZQorICAg IGNrc3RybmNhdChyZXF1ZXN0LC4uLixsZW4pOworI2VuZGlmIC8qIENNREFURTJUTSAqLworICAg IGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJI b3N0OiAiLCBsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfaG9zdF9wb3J0LCBsZW4p OworICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGlmIChhZ2VudCkgewor ICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiVXNlci1hZ2VudDogIixsZW4pOworICAgICAgICBj a3N0cm5jYXQocmVxdWVzdCxhZ2VudCxsZW4pOworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwi XHJcbiIsbGVuKTsKKyAgICB9CisgICAgaWYgKHVzZXIpIHsKKyAgICAgICAgY2tzdHJuY2F0KHJl cXVlc3QsIkF1dGhvcml6YXRpb246IEJhc2ljICIsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJl cXVlc3QsYjY0b3V0LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4p OworICAgIH0KKyAgICBpZiAoIGhkcmxpc3QgKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGhkcmxp c3RbaV07IGkrKykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsaGRybGlzdFtpXSxs ZW4pOworICAgICAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxyXG4iLGxlbik7CisgICAgICAg IH0KKyAgICB9CisjaWZkZWYgSFRUUF9DTE9TRQorICAgIGNrc3RybmNhdChyZXF1ZXN0LCJDb25u ZWN0aW9uOiBjbG9zZVxyXG4iLGxlbik7CisjZW5kaWYKKyAgICBja3N0cm5jYXQocmVxdWVzdCwi XHJcbiIsbGVuKTsKKyAgZGVscmVxOgorICAgIGlmIChodHRwX3RvbCgoQ0hBUiAqKXJlcXVlc3Qs c3RybGVuKHJlcXVlc3QpKSA8IDApCisgICAgeworICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAg ICAgIGlmICggZmlyc3QgKSB7CisgICAgICAgICAgICBmaXJzdC0tOworICAgICAgICAgICAgaHR0 cF9yZW9wZW4oKTsKKyAgICAgICAgICAgIGdvdG8gZGVscmVxOworICAgICAgICB9CisgICAgICAg IHJjID0gLTE7CisgICAgICAgIGdvdG8gZGVsZXhpdDsKKyAgICB9CisKKyAgICAvKiBQcm9jZXNz IHRoZSByZXNwb25zZSBoZWFkZXJzICovCisgICAgbG9jYWxfdCA9IHRpbWUoTlVMTCk7CisgICAg bnVsbGxpbmUgPSAwOworICAgIGkgPSAwOworICAgIGxlbiA9IC0xOworICAgIHdoaWxlICghbnVs bGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsKKyAg ICAgICAgYnVmW2ldID0gY2g7CisgICAgICAgIGlmIChidWZbaV0gPT0gMTApIHsgICAgICAgICAv KiBmb3VuZCBlbmQgb2YgbGluZSAqLworICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1ZltpLTFd ID09IDEzKQorICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICBpZiAoaSA8IDEpCisgICAg ICAgICAgICAgIG51bGxsaW5lID0gMTsKKyAgICAgICAgICAgIGJ1ZltpXSA9ICdcMCc7CisgICAg ICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5lICYmIGhkY250IDwgSFRUUEhFQURDTlQpCisg ICAgICAgICAgICAgICAgbWFrZXN0cigmaGVhZGVyc1toZGNudCsrXSxidWYpOworICAgICAgICAg ICAgaWYgKCFja3N0cmNtcChidWYsIkhUVFAiLDQsMCkpIHsKKyAgICAgICAgICAgICAgICBodHRw X2ZuZCA9IDE7CisgICAgICAgICAgICAgICAgaiA9IGNraW5kZXgoIiAiLGJ1ZiwwLDAsMCk7Cisg ICAgICAgICAgICAgICAgcCA9ICZidWZbal07CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3Bh Y2UoKnApKQorICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgIHN3aXRjaCAo cFswXSkgeworICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAgICAgICAgIC8qIEluZm9y bWF0aW9uYWwgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgIGNhc2UgJzInOiAgICAgICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6ICAgICAgICAgICAg IC8qIFJlZGlyZWN0aW9uICovCisgICAgICAgICAgICAgICAgICBjYXNlICc0JzogICAgICAgICAg ICAgLyogQ2xpZW50IGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiAgICAg ICAgICAgICAvKiBTZXJ2ZXIgZmFpbHVyZSAqLworICAgICAgICAgICAgICAgICAgZGVmYXVsdDog ICAgICAgICAgICAgIC8qIFVua25vd24gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWll dCkKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWx1cmU6IFNlcnZlciByZXBvcnRz ICVzXG4iLHApOworICAgICAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBodHRwX3NldF9jb2RlX3JlcGx5KHApOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29ubmVjdGlvbjoi LDExLDApKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1Ziwx MSwwLDApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2Vjb24gPSAxOworICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGJ1ZiwiQ29udGVudC1MZW5ndGg6Iiwx NSwwKSkgeworICAgICAgICAgICAgICAgICAgICBsZW4gPSBhdG9pKCZidWZbMTZdKTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChidWYsIlRyYW5zZmVyLUVuY29kaW5nOiIs MTgsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBja2luZGV4KCJjaHVua2VkIixidWYs MTgsMCwwKSAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rZWQgPSAxOworCQkg ICAgZGVidWcoRjEwMSwiaHR0cF9kZWxldGUgY2h1bmtlZCIsIiIsY2h1bmtlZCk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsYnVmKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aSsrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjaCA8IDAgJiYgZmlyc3QpIHsKKyAgICAg ICAgZmlyc3QtLTsKKyAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICBodHRwX3Jlb3Blbigp OworICAgICAgICBnb3RvIGRlbHJlcTsKKyAgICB9CisgICAgaWYgKCBodHRwX2ZuZCA9PSAwICkg eworICAgICAgICByYyA9IC0xOworICAgICAgICBjbG9zZWNvbiA9IDE7CisgICAgICAgIGdvdG8g ZGVsZXhpdDsKKyAgICB9CisKKyAgICAvKiBBbnkgcmVzcG9uc2UgZGF0YT8gKi8KKyAgICBpZiAo IGNodW5rZWQgKSB7CisgICAgICAgIHdoaWxlICgobGVuID0gaHR0cF9nZXRfY2h1bmtfbGVuKCkp ID4gMCkgeworICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0g MCkgeworICAgICAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgICAgIGNvbm9jKChDSEFS KWNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoY2ggPSBodHRwX2luYygwKSkg IT0gQ1IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoKGNoID0gaHR0 cF9pbmMoMCkpICE9IExGKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg fSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCkg eworICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICBjb25vYygoQ0hBUiljaCk7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGNodW5rZWQgKSB7ICAgICAgICAgICAgLyogUGFyc2Ug VHJhaWxpbmcgSGVhZGVycyAqLworICAgICAgICBudWxsbGluZSA9IDA7CisgICAgICAgIHdoaWxl ICghbnVsbGxpbmUgJiYgKGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4p IHsKKyAgICAgICAgICAgIGJ1ZltpXSA9IGNoOworICAgICAgICAgICAgaWYgKCBidWZbaV0gPT0g MTAgKSB7IC8qIGZvdW5kIGVuZCBvZiBsaW5lICovCisgICAgICAgICAgICAgICAgaWYgKGkgPiAw ICYmIGJ1ZltpLTFdID09IDEzKQorICAgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAg ICAgIGlmIChpIDwgMSkKKyAgICAgICAgICAgICAgICAgIG51bGxsaW5lID0gMTsKKyAgICAgICAg ICAgICAgICBidWZbaV0gPSAnXDAnOworICAgICAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVs bGxpbmUgJiYgaGRjbnQgPCBIVFRQSEVBRENOVCkKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmaGVhZGVyc1toZGNudCsrXSxidWYpOworICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAo YnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBja2lu ZGV4KCJjbG9zZSIsYnVmLDExLDAsMCkgIT0gMCApCisgICAgICAgICAgICAgICAgICAgICAgICBj bG9zZWNvbiA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkgPSAwOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisKKyAgZGVsZXhpdDoKKyAgICBpZiAoYXJyYXkpCisgICAgICAg IGh0dHBfbWthcnJheShoZWFkZXJzLGhkY250LGFycmF5KTsKKworICAgIGlmIChjbG9zZWNvbikK KyAgICAgICAgaHR0cF9jbG9zZSgpOworICAgIGZyZWUocmVxdWVzdCk7CisgICAgZm9yIChpID0g MDsgaSA8IGhkY250OyBpKyspIHsKKyAgICAgICAgaWYgKGhlYWRlcnNbaV0pCisgICAgICAgICAg ZnJlZShoZWFkZXJzW2ldKTsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworaW50CisjaWZk ZWYgQ0tfQU5TSUMKK2h0dHBfcG9zdChjaGFyICogYWdlbnQsIGNoYXIgKiogaGRybGlzdCwgY2hh ciAqIG1pbWUsIGNoYXIgKiB1c2VyLAorICAgICAgICAgIGNoYXIgKiBwd2QsIGNoYXIgYXJyYXks IGNoYXIgKiBsb2NhbCwgY2hhciAqIHJlbW90ZSwKKyAgICAgICAgICBjaGFyICogZGVzdCwgaW50 IHN0ZGlvKQorI2Vsc2UKK2h0dHBfcG9zdChhZ2VudCwgaGRybGlzdCwgbWltZSwgdXNlciwgcHdk LCBhcnJheSwgbG9jYWwsIHJlbW90ZSwgZGVzdCwKKyAgICAgICAgICBzdGRpbykKKyAgICBjaGFy ICogYWdlbnQ7IGNoYXIgKiogaGRybGlzdDsgY2hhciAqIG1pbWU7IGNoYXIgKiB1c2VyOworICAg IGNoYXIgKiBwd2Q7IGNoYXIgYXJyYXk7IGNoYXIgKiBsb2NhbDsgY2hhciAqIHJlbW90ZTsgY2hh ciAqIGRlc3Q7CisgICAgaW50IHN0ZGlvOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAg Y2hhciAqIHJlcXVlc3Q9TlVMTDsKKyAgICBpbnQgICAgaSwgaiwgbGVuID0gMCwgaGRjbnQgPSAw LCByYyA9IDA7CisgICAgaW50ICAgIGNoOworICAgIGludCAgICBodHRwX2ZuZCA9IDA7CisgICAg Y2hhciAgIGJ1ZltIVFRQQlVGTEVOXSwgKnA7CisgICAgaW50ICAgIG51bGxsaW5lOworICAgIHRp bWVfdCBtb2RfdDsKKyAgICB0aW1lX3Qgc3J2X3Q7CisgICAgdGltZV90IGxvY2FsX3Q7CisgICAg Y2hhciBwYXNzd2RbNjRdOworICAgIGNoYXIgYjY0aW5bMTI4XTsKKyAgICBjaGFyIGI2NG91dFsy NTZdOworICAgIGludCAgZmlsZWxlbjsKKyAgICBjaGFyICogaGVhZGVyc1tIVFRQSEVBRENOVF07 CisgICAgaW50ICBjbG9zZWNvbiA9IDA7CisgICAgaW50ICBjaHVua2VkID0gMDsKKyAgICBpbnQg IHpmaWxlID0gMDsKKyAgICBpbnQgIGZpcnN0ID0gMTsKKworICAgIGlmIChodHRwZmQgPT0gLTEp CisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKGFycmF5KSB7CisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBIVFRQSEVBRENOVDsgaSsrKQorICAgICAgICAgIGhlYWRlcnNbaV0gPSBOVUxMOwor ICAgIH0KKyAgICBmaWxlbGVuID0gemNoa2kobG9jYWwpOworICAgIGlmIChmaWxlbGVuIDwgMCkK KyAgICAgIHJldHVybigtMSk7CisKKyAgICAvKiBDb21wdXRlIGxlbmd0aCBvZiByZXF1ZXN0IGhl YWRlciAqLworICAgIGxlbiA9IDk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBPU1Qg Ki8KKyAgICBsZW4gKz0gc3RybGVuKEhUVFBfVkVSU0lPTik7CisgICAgbGVuICs9IHN0cmxlbihy ZW1vdGUpOworICAgIGxlbiArPSAxNjsKKworICAgIGlmICggaGRybGlzdCApIHsKKyAgICAgICAg Zm9yIChpID0gMDsgaGRybGlzdFtpXTsgaSsrKQorICAgICAgICAgICAgbGVuICs9IHN0cmxlbiho ZHJsaXN0W2ldKSArIDI7CisgICAgfQorICAgIGxlbiArPSBzdHJsZW4oaHR0cF9ob3N0X3BvcnQp ICsgODsKKworICAgIGlmIChhZ2VudCkKKyAgICAgIGxlbiArPSAxMyArIHN0cmxlbihhZ2VudCk7 CisgICAgaWYgKHVzZXIpIHsKKyAgICAgICAgaWYgKCFwd2QpIHsKKyAgICAgICAgICAgIHJlYWRw YXNzKCJQYXNzd29yZDogIixwYXNzd2QsNjQpOworICAgICAgICAgICAgcHdkID0gcGFzc3dkOwor ICAgICAgICB9CisgICAgICAgIGNrbWFrbXNnKGI2NGluLHNpemVvZihiNjRpbiksdXNlciwiOiIs cHdkLE5VTEwpOworICAgICAgICBqID0gYjh0b2I2NChiNjRpbixzdHJsZW4oYjY0aW4pLGI2NG91 dCwyNTYpOworICAgICAgICBtZW1zZXQocHdkLDAsc3RybGVuKHB3ZCkpOworICAgICAgICBpZiAo aiA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgYjY0b3V0W2pdID0gJ1wwJzsK KyAgICAgICAgbGVuICs9IGogKyAyNDsKKyAgICB9CisgICAgbGVuICs9IDE2ICsgc3RybGVuKG1p bWUpOyAgICAgICAgICAgLyogQ29udGVudC10eXBlOiAqLworICAgIGxlbiArPSAzMjsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENvbnRlbnQtbGVuZ3RoOiAqLworICAgIGxlbiArPSAzMjsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhdGU6ICovCisjaWZkZWYgSFRUUF9DTE9TRQor ICAgIGxlbiArPSAxOTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb246IGNs b3NlICovCisjZW5kaWYKKyAgICBsZW4gKz0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBibGFuayBsaW5lICsgbnVsbCAqLworCisgICAgcmVxdWVzdCA9IG1hbGxvYyhsZW4pOworICAg IGlmICghcmVxdWVzdCkKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBzcHJpbnRmKHJlcXVlc3Qs IlBPU1QgJXMgJXNcclxuIixyZW1vdGUsSFRUUF9WRVJTSU9OKTsKKyAgICBja3N0cm5jYXQocmVx dWVzdCwiRGF0ZTogIixsZW4pOworICAgIGNrc3RybmNhdChyZXF1ZXN0LGh0dHBfbm93KCksbGVu KTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKKyAgICBja3N0cm5jYXQocmVx dWVzdCwiSG9zdDogIiwgbGVuKTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCxodHRwX2hvc3RfcG9y dCwgbGVuKTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKKyAgICBpZiAoYWdl bnQpIHsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlVzZXItYWdlbnQ6ICIsbGVuKTsKKyAg ICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsYWdlbnQsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJl cXVlc3QsIlxyXG4iLGxlbik7CisgICAgfQorICAgIGlmICh1c2VyKSB7CisgICAgICAgIGNrc3Ry bmNhdChyZXF1ZXN0LCJBdXRob3JpemF0aW9uOiBCYXNpYyAiLGxlbik7CisgICAgICAgIGNrc3Ry bmNhdChyZXF1ZXN0LGI2NG91dCxsZW4pOworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJc biIsbGVuKTsKKyAgICB9CisgICAgaWYgKCBoZHJsaXN0ICkgeworICAgICAgICBmb3IgKGkgPSAw OyBoZHJsaXN0W2ldOyBpKyspIHsKKyAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LGhkcmxp c3RbaV0sbGVuKTsKKyAgICAgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOwor ICAgICAgICB9CisgICAgfQorICAgIGNrc3RybmNhdChyZXF1ZXN0LCJDb250ZW50LXR5cGU6ICIs bGVuKTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCxtaW1lLGxlbik7CisgICAgY2tzdHJuY2F0KHJl cXVlc3QsIlxyXG4iLGxlbik7CisjaWZkZWYgSFRUUF9DTE9TRQorICAgIGNrc3RybmNhdChyZXF1 ZXN0LCJDb25uZWN0aW9uOiBjbG9zZVxyXG4iLGxlbik7CisjZW5kaWYKKyAgICBzcHJpbnRmKGJ1 ZiwiQ29udGVudC1sZW5ndGg6ICVkXHJcbiIsZmlsZWxlbik7IC8qIHNhZmUgKi8KKyAgICBja3N0 cm5jYXQocmVxdWVzdCxidWYsbGVuKTsKKyAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVu KTsKKyNpZmRlZiBDT01NRU5UCisgICAgLyogVGhpcyBpcyBhcHBhcmVudGx5IGEgbWlzdGFrZSAt IHRoZSBwcmV2aW91cyBja3N0cm5jYXQoKSBhbHJlYWR5ICAqLworICAgIC8qIGFwcGVuZGVkIGEg YmxhbmsgbGluZSB0byB0aGUgcmVxdWVzdC4gIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZS4gKi8K KyAgICAvKiBTZXJ2ZXJzIGFyZSBub3QgcmVxdWlyZWQgYnkgUkZDIDI2MTYgdG8gaWdub3JlIGV4 dHJhbmVvdXMgZW1wdHkgICovCisgICAgLyogbGluZXMuICAtZmRjLCAyOCBBdWcgMjAwNS4gKi8K KyAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJcbiIsbGVuKTsKKyNlbmRpZgkvKiBDT01NRU5UICov CisKKyAgICAvKiBOb3cgd2UgaGF2ZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgKi8KKyAgcG9z dG9wZW46CisgICAgaWYgKHpvcGVuaShaSUZJTEUsbG9jYWwpKSB7CisgICAgICBwb3N0cmVxOgor ICAgICAgICBpZiAoaHR0cF90b2woKENIQVIgKilyZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkgPCAw KQorICAgICAgICB7CisgICAgICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgICAgICAgICBpZiAo IGZpcnN0ICkgeworICAgICAgICAgICAgICAgIGZpcnN0LS07CisgICAgICAgICAgICAgICAgaHR0 cF9yZW9wZW4oKTsKKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RyZXE7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgemNsb3NlKFpJRklMRSk7CisgICAg ICAgICAgICBnb3RvIHBvc3RleGl0OworICAgICAgICB9CisKKyAgICAgICAgaSA9IDA7CisgICAg ICAgIHdoaWxlICh6Y2hpbihaSUZJTEUsJmNoKSA9PSAwKSB7CisgICAgICAgICAgICBidWZbaSsr XSA9IGNoOworICAgICAgICAgICAgaWYgKGkgPT0gSFRUUEJVRkxFTikgeworICAgICAgICAgICAg ICAgIGh0dHBfdG9sKChDSEFSICopYnVmLEhUVFBCVUZMRU4pOworICAgICAgICAgICAgICAgIGkg PSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpID4gMCkKKyAgICAg ICAgICBodHRwX3RvbCgoQ0hBUiAqKWJ1ZixIVFRQQlVGTEVOKTsKKyAgICAgICAgemNsb3NlKFpJ RklMRSk7CisKKyAgICAgICAgLyogUHJvY2VzcyB0aGUgcmVzcG9uc2UgaGVhZGVycyAqLworICAg ICAgICBsb2NhbF90ID0gdGltZShOVUxMKTsKKyAgICAgICAgbnVsbGxpbmUgPSAwOworICAgICAg ICBpID0gMDsKKyAgICAgICAgbGVuID0gLTE7CisgICAgICAgIHdoaWxlICghbnVsbGxpbmUgJiYg KGNoID0gaHR0cF9pbmMoMCkpID49IDAgJiYgaSA8IEhUVFBCVUZMRU4pIHsKKyAgICAgICAgICAg IGJ1ZltpXSA9IGNoOworICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSAxMCkgeyAgICAgICAgIC8q IGZvdW5kIGVuZCBvZiBsaW5lICovCisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGJ1Zltp LTFdID09IDEzKQorICAgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgIGlmIChp IDwgMSkKKyAgICAgICAgICAgICAgICAgIG51bGxsaW5lID0gMTsKKyAgICAgICAgICAgICAgICBi dWZbaV0gPSAnXDAnOworICAgICAgICAgICAgICAgIGlmIChhcnJheSAmJiAhbnVsbGxpbmUgJiYg aGRjbnQgPCBIVFRQSEVBRENOVCkKKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmhlYWRlcnNb aGRjbnQrK10sYnVmKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJ1ZiwiSFRUUCIs NCwwKSkgeworICAgICAgICAgICAgICAgICAgICBodHRwX2ZuZCA9IDE7CisgICAgICAgICAgICAg ICAgICAgIGogPSBja2luZGV4KCIgIixidWYsMCwwLDApOworICAgICAgICAgICAgICAgICAgICBw ID0gJmJ1ZltqXTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKnApKQorICAg ICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwWzBd KSB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6ICAgICAgICAgLyogSW5mb3JtYXRp b25hbCBtZXNzYWdlICovCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICBjYXNlICcyJzogICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICczJzogICAg ICAgICAvKiBSZWRpcmVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzQnOiAg ICAgICAgIC8qIENsaWVudCBmYWlsdXJlICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn NSc6ICAgICAgICAgLyogU2VydmVyIGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBk ZWZhdWx0OiAgICAgICAgICAvKiBVbmtub3duICovCisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZhaWx1cmU6IFNl cnZlciByZXBvcnRzICVzXG4iLHApOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBodHRwX3NldF9jb2Rl X3JlcGx5KHApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg IGlmICghY2tzdHJjbXAoYnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAgKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNsb3NlY29uID0gMTsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJDb250ZW50LUxlbmd0aDoiLDE1LDApKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBsZW4gPSBhdG9pKCZidWZbMTZdKTsKKyAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoYnVmLCJUcmFuc2Zlci1FbmNvZGluZzoiLDE4LDAp KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNraW5kZXgoImNodW5rZWQiLGJ1Ziwx OCwwLDApICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rZWQgPSAxOwor CQkJZGVidWcoRjEwMSwiaHR0cF9wb3N0IGNodW5rZWQiLCIiLGNodW5rZWQpOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGRpbykKKyAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsYnVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY2ggPCAwICYmIGZp cnN0KSB7CisgICAgICAgICAgICBmaXJzdC0tOworICAgICAgICAgICAgaHR0cF9jbG9zZSgpOwor ICAgICAgICAgICAgaHR0cF9yZW9wZW4oKTsKKyAgICAgICAgICAgIGdvdG8gcG9zdG9wZW47Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGh0dHBfZm5kID09IDApIHsKKyAgICAgICAgICAgIHJjID0g LTE7CisgICAgICAgICAgICBjbG9zZWNvbiA9IDE7CisgICAgICAgICAgICBnb3RvIHBvc3RleGl0 OworICAgICAgICB9CisKKyAgICAgICAgLyogQW55IHJlc3BvbnNlIGRhdGE/ICovCisgICAgICAg IGlmICggZGVzdCAmJiBkZXN0WzBdICkgeworICAgICAgICAgICAgaWYgKHpvcGVubyhaT0ZJTEUs ZGVzdCxOVUxMLE5VTEwpKQorICAgICAgICAgICAgICAgIHpmaWxlID0gMTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYg KCBjaHVua2VkICkgeworICAgICAgICAgICAgd2hpbGUgKChsZW4gPSBodHRwX2dldF9jaHVua19s ZW4oKSkgPiAwKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2lu YygwKSkgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKCB6ZmlsZSApCisgICAgICAgICAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxF LChDSEFSKWNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGRpbyApCisgICAgICAgICAg ICAgICAgICAgICAgICBjb25vYygoQ0hBUiljaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlmICgoY2ggPSBodHRwX2luYygwKSkgIT0gQ1IpCisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICgoY2ggPSBodHRwX2luYygwKSkgIT0gTEYp CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgd2hpbGUgKGxlbiAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0gMCkg eworICAgICAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgICAgIGlmICggemZpbGUgKQor ICAgICAgICAgICAgICAgICAgICB6Y2hvdXQoWk9GSUxFLChDSEFSKWNoKTsKKyAgICAgICAgICAg ICAgICBpZiAoIHN0ZGlvICkKKyAgICAgICAgICAgICAgICAgICAgY29ub2MoKENIQVIpY2gpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCB6ZmlsZSApCisgICAgICAg ICAgICB6Y2xvc2UoWk9GSUxFKTsKKworICAgICAgICBpZiAoIGNodW5rZWQgKSB7ICAgICAgICAg ICAgLyogUGFyc2UgVHJhaWxpbmcgSGVhZGVycyAqLworICAgICAgICAgICAgbnVsbGxpbmUgPSAw OworICAgICAgICAgICAgd2hpbGUgKCFudWxsbGluZSAmJiAoY2ggPSBodHRwX2luYygwKSkgPj0g MCAmJiBpIDwgSFRUUEJVRkxFTikgeworICAgICAgICAgICAgICAgIGJ1ZltpXSA9IGNoOworICAg ICAgICAgICAgICAgIGlmICggYnVmW2ldID09IDEwICkgeyAvKiBmb3VuZCBlbmQgb2YgbGluZSAq LworICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMpCisgICAg ICAgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IDEpCisg ICAgICAgICAgICAgICAgICAgICAgbnVsbGxpbmUgPSAxOworICAgICAgICAgICAgICAgICAgICBi dWZbaV0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXkgJiYgIW51bGxsaW5l ICYmIGhkY250IDwgSFRUUEhFQURDTlQpCisgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3Ry KCZoZWFkZXJzW2hkY250KytdLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJj bXAoYnVmLCJDb25uZWN0aW9uOiIsMTEsMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm ICggY2tpbmRleCgiY2xvc2UiLGJ1ZiwxMSwwLDApICE9IDAgKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNsb3NlY29uID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisKKyAgcG9zdGV4aXQ6Cisg ICAgaWYgKGFycmF5KQorICAgICAgICBodHRwX21rYXJyYXkoaGVhZGVycyxoZGNudCxhcnJheSk7 CisgICAgaWYgKGNsb3NlY29uKQorICAgICAgICBodHRwX2Nsb3NlKCk7CisgICAgZnJlZShyZXF1 ZXN0KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaGRjbnQ7IGkrKykgeworICAgICAgICBpZiAoaGVh ZGVyc1tpXSkKKyAgICAgICAgICBmcmVlKGhlYWRlcnNbaV0pOworICAgIH0KKyAgICByZXR1cm4o cmMpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworaHR0cF9jb25uZWN0KGludCBzb2NrZXQs IGNoYXIgKiBhZ2VudCwgY2hhciAqKiBoZHJsaXN0LCBjaGFyICogdXNlciwKKyAgICAgICAgICAg ICBjaGFyICogcHdkLCBjaGFyIGFycmF5LCBjaGFyICogaG9zdF9wb3J0KQorI2Vsc2UKK2h0dHBf Y29ubmVjdChzb2NrZXQsIGFnZW50LCBoZHJsaXN0LCB1c2VyLCBwd2QsIGFycmF5LCBob3N0X3Bv cnQpCisgICAgaW50IHNvY2tldDsKKyAgICBjaGFyICogYWdlbnQ7IGNoYXIgKiogaGRybGlzdDsg Y2hhciAqIHVzZXI7CisgICAgY2hhciAqIHB3ZDsgY2hhciBhcnJheTsgY2hhciAqIGhvc3RfcG9y dDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGNoYXIgKiByZXF1ZXN0PU5VTEw7Cisg ICAgaW50ICAgIGksIGosIGxlbiA9IDAsIGhkY250ID0gMCwgcmMgPSAwOworICAgIGludCAgICBo dHRwX2ZuZCA9IDA7CisgICAgY2hhciAgIGJ1ZltIVFRQQlVGTEVOXSwgKnAsIGNoOworICAgIGlu dCAgICBudWxsbGluZTsKKyAgICB0aW1lX3QgbW9kX3Q7CisgICAgdGltZV90IHNydl90OworICAg IHRpbWVfdCBsb2NhbF90OworICAgIGNoYXIgcGFzc3dkWzY0XTsKKyAgICBjaGFyIGI2NGluWzEy OF07CisgICAgY2hhciBiNjRvdXRbMjU2XTsKKyAgICBjaGFyICogaGVhZGVyc1tIVFRQSEVBRENO VF07CisgICAgaW50ICAgIGNvbm5lY3RlZCA9IDA7CisKKyAgICB0Y3BfaHR0cF9wcm94eV9lcnJu byA9IDA7CisKKyAgICBpZiAoc29ja2V0ID09IC0xKQorICAgICAgcmV0dXJuKC0xKTsKKworICAg IGlmIChhcnJheSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSFRUUEhFQURDTlQ7IGkrKykK KyAgICAgICAgICBoZWFkZXJzW2ldID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDb21wdXRlIGxl bmd0aCBvZiByZXF1ZXN0IGhlYWRlciAqLworICAgIGxlbiA9IDEyOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDT05ORUNUICovCisgICAgbGVuICs9IHN0cmxlbihIVFRQX1ZFUlNJT04p OworICAgIGxlbiArPSBzdHJsZW4oaG9zdF9wb3J0KTsKKyAgICBsZW4gKz0gKGludCkgc3RybGVu KGh0dHBfaG9zdF9wb3J0KSArIDg7CisgICAgbGVuICs9IDE2OworICAgIGxlbiArPSBzdHJsZW4o IlByb3h5LUNvbm5lY3Rpb246IEtlZXAtQWxpdmVcclxuIik7CisgICAgaWYgKCBoZHJsaXN0ICkg eworICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspCisgICAgICAgICAgICBsZW4g Kz0gc3RybGVuKGhkcmxpc3RbaV0pICsgMjsKKyAgICB9CisgICAgaWYgKGFnZW50ICYmIGFnZW50 WzBdKQorICAgICAgbGVuICs9IDEzICsgc3RybGVuKGFnZW50KTsKKyAgICBpZiAodXNlciAmJiB1 c2VyWzBdKSB7CisgICAgICAgIGlmICghcHdkKSB7CisgICAgICAgICAgICByZWFkcGFzcygiUGFz c3dvcmQ6ICIscGFzc3dkLDY0KTsKKyAgICAgICAgICAgIHB3ZCA9IHBhc3N3ZDsKKyAgICAgICAg fQorICAgICAgICBja21ha21zZyhiNjRpbixzaXplb2YoYjY0aW4pLHVzZXIsIjoiLHB3ZCxOVUxM KTsKKyAgICAgICAgaiA9IGI4dG9iNjQoYjY0aW4sc3RybGVuKGI2NGluKSxiNjRvdXQsMjU2KTsK KyAgICAgICAgbWVtc2V0KHB3ZCwwLHN0cmxlbihwd2QpKTsKKyAgICAgICAgaWYgKGogPCAwKQor ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIGI2NG91dFtqXSA9ICdcMCc7CisgICAgICAg IGxlbiArPSBqICsgNzI7CisgICAgfQorICAgIGxlbiArPSAzMjsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIERhdGU6ICovCisgICAgbGVuICs9IDM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogYmxhbmsgbGluZSArIG51bGwgKi8KKworICAgIHJlcXVlc3QgPSBtYWxsb2MobGVuKTsK KyAgICBpZiAoIXJlcXVlc3QpCisgICAgICByZXR1cm4oLTEpOworCisgICAgc3ByaW50ZihyZXF1 ZXN0LCJDT05ORUNUICVzICVzXHJcbiIsaG9zdF9wb3J0LEhUVFBfVkVSU0lPTik7CisgICAgY2tz dHJuY2F0KHJlcXVlc3QsIkRhdGU6ICIsbGVuKTsKKyNpZmRlZiBDTURBVEUyVE0KKyAgICBja3N0 cm5jYXQocmVxdWVzdCxodHRwX25vdygpLGxlbik7CisjZWxzZQorICAgIHN0cmNhdChyZXF1ZXN0 LC4uLik7CisjZW5kaWYgLyogQ01EQVRFMlRNICovCisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIlxy XG4iLGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkhvc3Q6ICIsIGxlbik7CisgICAgY2tz dHJuY2F0KHJlcXVlc3QsaHR0cF9ob3N0X3BvcnQsIGxlbik7CisgICAgY2tzdHJuY2F0KHJlcXVl c3QsIlxyXG4iLGxlbik7CisgICAgaWYgKGFnZW50ICYmIGFnZW50WzBdKSB7CisgICAgICAgIGNr c3RybmNhdChyZXF1ZXN0LCJVc2VyLWFnZW50OiAiLGxlbik7CisgICAgICAgIGNrc3RybmNhdChy ZXF1ZXN0LGFnZW50LGxlbik7CisgICAgICAgIGNrc3RybmNhdChyZXF1ZXN0LCJcclxuIixsZW4p OworICAgIH0KKyAgICBpZiAodXNlciAmJiB1c2VyWzBdKSB7CisgICAgICAgIGNrc3RybmNhdChy ZXF1ZXN0LCJQcm94eS1hdXRob3JpemF0aW9uOiBCYXNpYyAiLGxlbik7CisgICAgICAgIGNrc3Ry bmNhdChyZXF1ZXN0LGI2NG91dCxsZW4pOworICAgICAgICBja3N0cm5jYXQocmVxdWVzdCwiXHJc biIsbGVuKTsKKyAgICAgICAgY2tzdHJuY2F0KHJlcXVlc3QsIkV4dGVuc2lvbjogU2VjdXJpdHkv UmVtb3RlLVBhc3NwaHJhc2VcclxuIixsZW4pOworICAgIH0KKyAgICBja3N0cm5jYXQocmVxdWVz dCwiUHJveHktQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxyXG4iLGxlbik7CisgICAgaWYgKCBoZHJs aXN0ICkgeworICAgICAgICBmb3IgKGkgPSAwOyBoZHJsaXN0W2ldOyBpKyspIHsKKyAgICAgICAg ICAgIGNrc3RybmNhdChyZXF1ZXN0LGhkcmxpc3RbaV0sbGVuKTsKKyAgICAgICAgICAgIGNrc3Ry bmNhdChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgICAgICB9CisgICAgfQorICAgIGNrc3RybmNh dChyZXF1ZXN0LCJcclxuIixsZW4pOworICAgIGxlbiA9IHN0cmxlbihyZXF1ZXN0KTsKKworI2lm ZGVmIFRDUElQTElCCisgICAgLyogU2VuZCByZXF1ZXN0ICovCisgICAgaWYgKHNvY2tldF93cml0 ZShzb2NrZXQsKENIQVIgKilyZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkgPCAwKSB7CisgICAgICBy YyA9IC0xOworICAgICAgZ290byBjb25uZXhpdDsKKyAgICB9CisjZWxzZQorICAgIGlmICh3cml0 ZShzb2NrZXQsKENIQVIgKilyZXF1ZXN0LHN0cmxlbihyZXF1ZXN0KSkgPCAwKSB7IC8qIFNlbmQg cmVxdWVzdCAqLworICAgICAgICByYyA9IC0xOworICAgICAgICBnb3RvIGNvbm5leGl0OworICAg IH0KKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworCisgICAgLyogUHJvY2VzcyB0aGUgcmVzcG9uc2Ug aGVhZGVycyAqLworICAgIGxvY2FsX3QgPSB0aW1lKE5VTEwpOworICAgIG51bGxsaW5lID0gMDsK KyAgICBpID0gMDsKKyAgICB3aGlsZSAoIW51bGxsaW5lICYmCisjaWZkZWYgVENQSVBMSUIKKyAg ICAgICAgICAgKHNvY2tldF9yZWFkKHNvY2tldCwmY2gsMSkgPT0gMSkgJiYKKyNlbHNlCisgICAg ICAgICAgIChyZWFkKHNvY2tldCwmY2gsMSkgPT0gMSkgJiYKKyNlbmRpZiAvKiBUQ1BJUExJQiAq LworICAgICAgICAgICBpIDwgSFRUUEJVRkxFTikgeworICAgICAgICBidWZbaV0gPSBjaDsKKyAg ICAgICAgaWYgKGJ1ZltpXSA9PSAxMCkgeyAgICAgICAgIC8qIGZvdW5kIGVuZCBvZiBsaW5lICov CisgICAgICAgICAgICBpZiAoaSA+IDAgJiYgYnVmW2ktMV0gPT0gMTMpCisgICAgICAgICAgICAg IGktLTsKKyAgICAgICAgICAgIGlmIChpIDwgMSkKKyAgICAgICAgICAgICAgbnVsbGxpbmUgPSAx OworICAgICAgICAgICAgYnVmW2ldID0gJ1wwJzsKKworICAgICAgICAgICAgaWYgKGFycmF5ICYm ICFudWxsbGluZSAmJiBoZGNudCA8IEhUVFBIRUFEQ05UKQorICAgICAgICAgICAgICAgIG1ha2Vz dHIoJmhlYWRlcnNbaGRjbnQrK10sYnVmKTsKKyAgICAgICAgICAgIGlmICghY2tzdHJjbXAoYnVm LCJIVFRQIiw0LDApKSB7CisgICAgICAgICAgICAgICAgaHR0cF9mbmQgPSAxOworICAgICAgICAg ICAgICAgIGogPSBja2luZGV4KCIgIixidWYsMCwwLDApOworICAgICAgICAgICAgICAgIHAgPSAm YnVmW2pdOworICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpwKSkKKyAgICAgICAgICAg ICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICB0Y3BfaHR0cF9wcm94eV9lcnJubyA9IGF0b2ko cCk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwWzBdKSB7CisgICAgICAgICAgICAgICAgICBj YXNlICcxJzogICAgICAgICAgICAgLyogSW5mb3JtYXRpb25hbCBtZXNzYWdlICovCisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAnMic6ICAgICAgICAg ICAgIC8qIFN1Y2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlICczJzogICAg ICAgICAgICAgLyogUmVkaXJlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgJzQnOiAg ICAgICAgICAgICAvKiBDbGllbnQgZmFpbHVyZSAqLworICAgICAgICAgICAgICAgICAgY2FzZSAn NSc6ICAgICAgICAgICAgIC8qIFNlcnZlciBmYWlsdXJlICovCisgICAgICAgICAgICAgICAgICBk ZWZhdWx0OiAgICAgICAgICAgICAgLyogVW5rbm93biAqLworICAgICAgICAgICAgICAgICAgICBp ZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbHVyZTogU2VydmVy IHJlcG9ydHMgJXNcbiIscCk7CisgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGh0dHBfc2V0X2NvZGVfcmVwbHkocCk7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsYnVmKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgaSsrOworICAgICAgICB9CisgICAgfQorICAgIGlmICggaHR0cF9mbmQgPT0gMCApCisg ICAgICAgIHJjID0gLTE7CisKKyAgICBpZiAoYXJyYXkpCisgICAgICAgIGh0dHBfbWthcnJheSho ZWFkZXJzLGhkY250LGFycmF5KTsKKworICBjb25uZXhpdDoKKyAgICBpZiAoICFjb25uZWN0ZWQg KSB7CisgICAgICAgIGlmICggc29ja2V0ID09IHR0eWZkICkgeworICAgICAgICAgICAgdHRjbG9z KDApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBzb2NrZXQgPT0gaHR0cGZkICkgewor ICAgICAgICAgICAgaHR0cF9jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnJlZShy ZXF1ZXN0KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgaGRjbnQ7IGkrKykgeworICAgICAgICBpZiAo aGVhZGVyc1tpXSkKKyAgICAgICAgICBmcmVlKGhlYWRlcnNbaV0pOworICAgIH0KKyAgICByZXR1 cm4ocmMpOworfQorI2VuZGlmIC8qIE5PSFRUUCAqLworCisjaWZkZWYgQ0tfRE5TX1NSVgorCisj ZGVmaW5lIElOQ1JfQ0hFQ0soeCx5KSB4ICs9IHk7IGlmICh4ID4gc2l6ZSArIGFuc3dlci5ieXRl cykgZ290byBkbnNvdXQKKyNkZWZpbmUgQ0hFQ0soeCx5KSBpZiAoeCArIHkgPiBzaXplICsgYW5z d2VyLmJ5dGVzKSBnb3RvIGRuc291dAorI2RlZmluZSBOVE9IU1AoeCx5KSB4WzBdIDw8IDggfCB4 WzFdOyB4ICs9IHkKKworI2lmbmRlZiBDS1FVRVJZVFlQRQorI2lmZGVmIFVOSVhXQVJFCisjaWZu ZGVmIFVXNworI2RlZmluZSBDS1FVRVJZVFlQRSBDSEFSCisjZW5kaWYgLyogVVc3ICovCisjZW5k aWYgLyogVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBDS1FVRVJZVFlQRSAqLworCisjaWZuZGVmIENL UVVFUllUWVBFCisjZGVmaW5lIENLUVVFUllUWVBFIGNoYXIKKyNlbmRpZiAvKiBDS1FVRVJZVFlQ RSAqLworCisvKiAxIGlzIHN1Y2Nlc3MsIDAgaXMgZmFpbHVyZSAqLworaW50Citsb2NhdGVfc3J2 X2Rucyhob3N0LCBzZXJ2aWNlLCBwcm90b2NvbCwgYWRkcl9wcCwgbmFkZHJzKQorICAgIGNoYXIg Kmhvc3Q7CisgICAgY2hhciAqc2VydmljZTsKKyAgICBjaGFyICpwcm90b2NvbDsKKyAgICBzdHJ1 Y3Qgc29ja2FkZHIgKiphZGRyX3BwOworICAgIGludCAqbmFkZHJzOworeworICAgIGludCBub3V0 LCBqLCBjb3VudDsKKyAgICB1bmlvbiB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMjA0 OF07CisgICAgICAgIEhFQURFUiBoZHI7CisgICAgfSBhbnN3ZXI7CisgICAgdW5zaWduZWQgY2hh ciAqcD1OVUxMOworICAgIENLUVVFUllUWVBFIHF1ZXJ5W01BWF9ETlNfTkFNRUxFTl07CisjaWZk ZWYgQ0tfQU5TSUMKKyAgICBjb25zdCBjaGFyICogaDsKKyNlbHNlCisgICAgY2hhciAqIGg7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBOVUxMOwor ICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gTlVMTDsKKyAgICBzdHJ1Y3QgaG9zdGVudCAq aHAgPSBOVUxMOworICAgIGludCB0eXBlLCBjbGFzczsKKyAgICBpbnQgcHJpb3JpdHksIHdlaWdo dCwgc2l6ZSwgbGVuLCBudW1hbnN3ZXJzLCBudW1xdWVyaWVzLCByZGxlbjsKKyAgICB1bnNpZ25l ZCBzaG9ydCBwb3J0OworI2lmZGVmIENLX0FOU0lDCisgICAgY29uc3QKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworICAgICAgaW50IGhkcnNpemUgPSBzaXplb2YoSEVBREVSKTsKKyAgICBzdHJ1Y3Qg c3J2X2Ruc19lbnRyeSB7CisgICAgICAgIHN0cnVjdCBzcnZfZG5zX2VudHJ5ICpuZXh0OworICAg ICAgICBpbnQgcHJpb3JpdHk7CisgICAgICAgIGludCB3ZWlnaHQ7CisgICAgICAgIHVuc2lnbmVk IHNob3J0IHBvcnQ7CisgICAgICAgIGNoYXIgKmhvc3Q7CisgICAgfTsKKyAgICBzdHJ1Y3Qgc3J2 X2Ruc19lbnRyeSAqaGVhZCA9IE5VTEw7CisgICAgc3RydWN0IHNydl9kbnNfZW50cnkgKnNydiA9 IE5VTEwsICplbnRyeSA9IE5VTEw7CisgICAgY2hhciAqIHMgPSBOVUxMOworCisgICAgbm91dCA9 IDA7CisgICAgYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qg c29ja2FkZHIpKTsKKyAgICBpZiAoYWRkciA9PSBOVUxMKQorICAgICAgcmV0dXJuIDA7CisKKyAg ICBjb3VudCA9IDE7CisKKyAgICAvKgorICAgICAqIEZpcnN0IGJ1aWxkIGEgcXVlcnkgb2YgdGhl IGZvcm06CisgICAgICoKKyAgICAgKiAgIHNlcnZpY2UucHJvdG9jb2wuaG9zdAorICAgICAqCisg ICAgICogd2hpY2ggd2lsbCBtb3N0IGxpa2VseSBiZSBzb21ldGhpbmcgbGlrZToKKyAgICAgKgor ICAgICAqICAgX3RlbG5ldC5fdGNwLmhvc3QKKyAgICAgKgorICAgICAqLworICAgIGlmICgoKGlu dClzdHJsZW4oc2VydmljZSkgKyBzdHJsZW4ocHJvdG9jb2wpICsgc3RybGVuKGhvc3QpICsgNSkK KyAgICAgICAgPiBNQVhfRE5TX05BTUVMRU4KKyAgICAgICAgKQorICAgICAgZ290byBkbnNvdXQ7 CisKKyAgICAvKiBSZWFsbSBuYW1lcyBkb24ndCAobm9ybWFsbHkpIGVuZCB3aXRoICIuIiwgYnV0 IGlmIHRoZSBxdWVyeQorICAgICAgIGRvZXNuJ3QgZW5kIHdpdGggIi4iIGFuZCBkb2Vzbid0IGdl dCBhbiBhbnN3ZXIgYXMgaXMsIHRoZQorICAgICAgIHJlc29sdiBjb2RlIHdpbGwgdHJ5IGFwcGVu ZGluZyB0aGUgbG9jYWwgZG9tYWluLiAgU2luY2UgdGhlCisgICAgICAgcmVhbG0gbmFtZXMgYXJl IGFic29sdXRlcywgbGV0J3Mgc3RvcCB0aGF0LgorCisgICAgICAgQnV0IG9ubHkgaWYgYSBuYW1l IGhhcyBiZWVuIHNwZWNpZmllZC4gIElmIHdlIGFyZSBwZXJmb3JtaW5nCisgICAgICAgYSBzZWFy Y2ggb24gdGhlIHByZWZpeCBhbG9uZSB0aGVuIHRoZSBpbnRlbnRpb24gaXMgdG8gYWxsb3cKKyAg ICAgICB0aGUgbG9jYWwgZG9tYWluIG9yIGRvbWFpbiBzZWFyY2ggbGlzdHMgdG8gYmUgZXhwYW5k ZWQuCisgICAgKi8KKyAgICBoID0gaG9zdCArIHN0cmxlbiAoaG9zdCk7CisgICAgY2ttYWt4bXNn KHF1ZXJ5LCBzaXplb2YocXVlcnkpLCAiXyIsc2VydmljZSwiLl8iLHByb3RvY29sLCIuIiwgaG9z dCwKKyAgICAgICAgICAgICAgKChoID4gaG9zdCkgJiYgKGhbLTFdICE9ICcuJyk/Ii4iOk5VTEwp LAorICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKworICAgIHNpemUg PSByZXNfc2VhcmNoKHF1ZXJ5LCBDX0lOLCBUX1NSViwgYW5zd2VyLmJ5dGVzLCBzaXplb2YoYW5z d2VyLmJ5dGVzKSk7CisKKyAgICBpZiAoc2l6ZSA8IGhkcnNpemUpCisgICAgICBnb3RvIGRuc291 dDsKKworICAgIC8qIFdlIGdvdCBhIHJlcGx5IC0gU2VlIGhvdyBtYW55IGFuc3dlcnMgaXQgY29u dGFpbnMuICovCisKKyAgICBwID0gYW5zd2VyLmJ5dGVzOworCisgICAgbnVtcXVlcmllcyA9IG50 b2hzKGFuc3dlci5oZHIucWRjb3VudCk7CisgICAgbnVtYW5zd2VycyA9IG50b2hzKGFuc3dlci5o ZHIuYW5jb3VudCk7CisKKyAgICBwICs9IHNpemVvZihIRUFERVIpOworCisgICAgLyoKKyAgICAg KiBXZSBuZWVkIHRvIHNraXAgb3ZlciBhbGwgb2YgdGhlIHF1ZXN0aW9ucywgc28gd2UgaGF2ZSB0 byBpdGVyYXRlCisgICAgICogb3ZlciBldmVyeSBxdWVyeSByZWNvcmQuICBkbl9leHBhbmQoKSBp cyBhYmxlIHRvIHRlbGwgdXMgdGhlIHNpemUKKyAgICAgKiBvZiBjb21wcmVzc2VkIEROUyBuYW1l cywgc28gd2UgdXNlIGl0LgorICAgICAqLworICAgIHdoaWxlIChudW1xdWVyaWVzLS0pIHsKKyAg ICAgICAgbGVuID0gZG5fZXhwYW5kKGFuc3dlci5ieXRlcyxhbnN3ZXIuYnl0ZXMrc2l6ZSxwLHF1 ZXJ5LHNpemVvZihxdWVyeSkpOworICAgICAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgICBnb3Rv IGRuc291dDsKKyAgICAgICAgSU5DUl9DSEVDSyhwLCBsZW4gKyA0KTsKKyAgICB9CisKKyAgICAv KgorICAgICAqIFdlJ3JlIG5vdyBwb2ludGluZyBhdCB0aGUgYW5zd2VyIHJlY29yZHMuICBPbmx5 IHByb2Nlc3MgdGhlbSBpZgorICAgICAqIHRoZXkncmUgYWN0dWFsbHkgVF9TUlYgcmVjb3JkcyAo dGhleSBtaWdodCBiZSBDTkFNRSByZWNvcmRzLAorICAgICAqIGZvciBpbnN0YW5jZSkuCisgICAg ICoKKyAgICAgKiBCdXQgaW4gYSBETlMgcmVwbHksIGlmIHlvdSBnZXQgYSBDTkFNRSB5b3UgYWx3 YXlzIGdldCB0aGUgYXNzb2NpYXRlZAorICAgICAqICJyZWFsIiBSUiBmb3IgdGhhdCBDTkFNRS4g IFJGQyAxMDM0LCAzLjYuMjoKKyAgICAgKgorICAgICAqIENOQU1FIFJScyBjYXVzZSBzcGVjaWFs IGFjdGlvbiBpbiBETlMgc29mdHdhcmUuICBXaGVuIGEgbmFtZSBzZXJ2ZXIKKyAgICAgKiBmYWls cyB0byBmaW5kIGEgZGVzaXJlZCBSUiBpbiB0aGUgcmVzb3VyY2Ugc2V0IGFzc29jaWF0ZWQgd2l0 aCB0aGUKKyAgICAgKiBkb21haW4gbmFtZSwgaXQgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcmVzb3Vy Y2Ugc2V0IGNvbnNpc3RzIG9mIGEgQ05BTUUKKyAgICAgKiByZWNvcmQgd2l0aCBhIG1hdGNoaW5n IGNsYXNzLiAgSWYgc28sIHRoZSBuYW1lIHNlcnZlciBpbmNsdWRlcyB0aGUgQ05BTUUKKyAgICAg KiByZWNvcmQgaW4gdGhlIHJlc3BvbnNlIGFuZCByZXN0YXJ0cyB0aGUgcXVlcnkgYXQgdGhlIGRv bWFpbiBuYW1lCisgICAgICogc3BlY2lmaWVkIGluIHRoZSBkYXRhIGZpZWxkIG9mIHRoZSBDTkFN RSByZWNvcmQuICBUaGUgb25lIGV4Y2VwdGlvbiB0bworICAgICAqIHRoaXMgcnVsZSBpcyB0aGF0 IHF1ZXJpZXMgd2hpY2ggbWF0Y2ggdGhlIENOQU1FIHR5cGUgYXJlIG5vdCByZXN0YXJ0ZWQuCisg ICAgICoKKyAgICAgKiBJbiBvdGhlciB3b3JkcywgQ05BTUVzIGRvIG5vdCBuZWVkIHRvIGJlIGV4 cGFuZGVkIGJ5IHRoZSBjbGllbnQuCisgICAgICovCisgICAgd2hpbGUgKG51bWFuc3dlcnMtLSkg eworCisgICAgICAgIC8qIEZpcnN0IGlzIHRoZSBuYW1lOyB1c2UgZG5fZXhwYW5kKCkgdG8gZ2V0 IHRoZSBjb21wcmVzc2VkIHNpemUuICovCisgICAgICAgIGxlbiA9IGRuX2V4cGFuZChhbnN3ZXIu Ynl0ZXMsYW5zd2VyLmJ5dGVzK3NpemUscCxxdWVyeSxzaXplb2YocXVlcnkpKTsKKyAgICAgICAg aWYgKGxlbiA8IDApCisgICAgICAgICAgZ290byBkbnNvdXQ7CisgICAgICAgIElOQ1JfQ0hFQ0so cCwgbGVuKTsKKworICAgICAgICBDSEVDSyhwLDIpOyAgICAgICAgICAgICAgICAgICAgIC8qIFF1 ZXJ5IHR5cGUgKi8KKyAgICAgICAgdHlwZSA9IE5UT0hTUChwLDIpOworCisgICAgICAgIENIRUNL KHAsIDYpOyAgICAgICAgICAgICAgICAgICAgLyogUXVlcnkgY2xhc3MgKi8KKyAgICAgICAgY2xh c3MgPSBOVE9IU1AocCw2KTsgICAgICAgICAgICAvKiBBbHNvIHNraXAgb3ZlciA0LWJ5dGUgVFRM ICovCisKKyAgICAgICAgQ0hFQ0socCwyKTsgICAgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQg ZGF0YSBsZW5ndGggKi8KKyAgICAgICAgcmRsZW4gPSBOVE9IU1AocCwyKTsKKyAgICAgICAgLyoK KyAgICAgICAgICogSWYgdGhpcyBpcyBhbiBTUlYgcmVjb3JkLCBwcm9jZXNzIGl0LiAgUmVjb3Jk IGZvcm1hdCBpczoKKyAgICAgICAgICoKKyAgICAgICAgICogUHJpb3JpdHkKKyAgICAgICAgICog V2VpZ2h0CisgICAgICAgICAqIFBvcnQKKyAgICAgICAgICogU2VydmVyIG5hbWUKKyAgICAgICAg ICovCisgICAgICAgIGlmIChjbGFzcyA9PSBDX0lOICYmIHR5cGUgPT0gVF9TUlYpIHsKKyAgICAg ICAgICAgIENIRUNLKHAsMik7CisgICAgICAgICAgICBwcmlvcml0eSA9IE5UT0hTUChwLDIpOwor ICAgICAgICAgICAgQ0hFQ0socCwgMik7CisgICAgICAgICAgICB3ZWlnaHQgPSBOVE9IU1AocCwy KTsKKyAgICAgICAgICAgIENIRUNLKHAsIDIpOworICAgICAgICAgICAgcG9ydCA9IE5UT0hTUChw LDIpOworICAgICAgICAgICAgbGVuID0gZG5fZXhwYW5kKGFuc3dlci4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIu Ynl0ZXMgKyBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKHF1ZXJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBp ZiAobGVuIDwgMCkKKyAgICAgICAgICAgICAgZ290byBkbnNvdXQ7CisgICAgICAgICAgICBJTkNS X0NIRUNLKHAsIGxlbik7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2UgZ290IGV2 ZXJ5dGhpbmcuICBJbnNlcnQgaXQgaW50byBvdXIgbGlzdCwgYnV0IG1ha2Ugc3VyZQorICAgICAg ICAgICAgICogaXQncyBpbiB0aGUgcmlnaHQgb3JkZXIuICBSaWdodCBub3cgd2UgZG9uJ3QgZG8g YW55dGhpbmcKKyAgICAgICAgICAgICAqIHdpdGggdGhlIHdlaWdodCBmaWVsZAorICAgICAgICAg ICAgICovCisgICAgICAgICAgICBzcnYgPSAoc3RydWN0IHNydl9kbnNfZW50cnkgKiltYWxsb2Mo c2l6ZW9mKHN0cnVjdCBzcnZfZG5zX2VudHJ5KSk7CisgICAgICAgICAgICBpZiAoc3J2ID09IE5V TEwpCisgICAgICAgICAgICAgIGdvdG8gZG5zb3V0OworCisgICAgICAgICAgICBzcnYtPnByaW9y aXR5ID0gcHJpb3JpdHk7CisgICAgICAgICAgICBzcnYtPndlaWdodCA9IHdlaWdodDsKKyAgICAg ICAgICAgIHNydi0+cG9ydCA9IHBvcnQ7CisgICAgICAgICAgICBtYWtlc3RyKCZzLChjaGFyICop cXVlcnkpOyAgLyogc3RyZHVwKCkgaXMgbm90IHBvcnRhYmxlICovCisgICAgICAgICAgICBzcnYt Pmhvc3QgPSBzOworCisgICAgICAgICAgICBpZiAoaGVhZCA9PSBOVUxMIHx8IGhlYWQtPnByaW9y aXR5ID4gc3J2LT5wcmlvcml0eSkgeworICAgICAgICAgICAgICAgIHNydi0+bmV4dCA9IGhlYWQ7 CisgICAgICAgICAgICAgICAgaGVhZCA9IHNydjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQ29uZnVzaW5nLiAgSW5zZXJ0IGFuIGVu dHJ5IGludG8gdGhpcyBzcG90IG9ubHkgaWY6CisgICAgICAgICAgICAgICAgICogIC4gVGhlIG5l eHQgcGVyc29uIGhhcyBhIGhpZ2hlciBwcmlvcml0eSAobG93ZXIKKyAgICAgICAgICAgICAgICAg KiAgICBwcmlvcml0aWVzIGFyZSBwcmVmZXJyZWQpLCBvcjoKKyAgICAgICAgICAgICAgICAgKiAg LiBUaGVyZSBpcyBubyBuZXh0IGVudHJ5ICh3ZSdyZSBhdCB0aGUgZW5kKQorICAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICBmb3IgKGVudHJ5ID0gaGVhZDsgZW50cnkgIT0gTlVMTDsg ZW50cnkgPSBlbnRyeS0+bmV4dCkKKyAgICAgICAgICAgICAgICBpZiAoKGVudHJ5LT5uZXh0ICYm CisgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bmV4dC0+cHJpb3JpdHkgPiBzcnYtPnByaW9y aXR5KSB8fAorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bmV4dCA9PSBOVUxMKSB7CisgICAg ICAgICAgICAgICAgICAgIHNydi0+bmV4dCA9IGVudHJ5LT5uZXh0OworICAgICAgICAgICAgICAg ICAgICBlbnRyeS0+bmV4dCA9IHNydjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICBJTkNSX0NIRUNLKHAsIHJk bGVuKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE5vdyB3ZSd2ZSBnb3QgYSBsaW5rZWQgbGlz dCBvZiBlbnRyaWVzIHNvcnRlZCBieSBwcmlvcml0eS4KKyAgICAgKiBTdGFydCBsb29raW5nIHVw IEEgcmVjb3JkcyBhbmQgcmV0dXJuaW5nIGFkZHJlc3Nlcy4KKyAgICAgKi8KKyAgICBpZiAoaGVh ZCA9PSBOVUxMKQorICAgICAgZ290byBkbnNvdXQ7CisKKyAgICBmb3IgKGVudHJ5ID0gaGVhZDsg ZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkgeworICAgICAgICBocCA9IGdldGhv c3RieW5hbWUoZW50cnktPmhvc3QpOworICAgICAgICBpZiAoaHAgIT0gMCkgeworCisgICAgICAg ICAgICAvKiBXYXRjaCBvdXQgLSBtZW1zZXQoKSBhbmQgbWVtY3B5KCkgYXJlIG5vdCBwb3J0YWJs ZS4uLiAqLworCisgICAgICAgICAgICBzd2l0Y2ggKGhwLT5oX2FkZHJ0eXBlKSB7CisgICAgICAg ICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBocC0+aF9h ZGRyX2xpc3Rbal07IGorKykgeworICAgICAgICAgICAgICAgICAgICBzaW4gPSAoc3RydWN0IHNv Y2thZGRyX2luICopICZhZGRyW25vdXQrK107CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCAo KGNoYXIgKikgc2luLCAwLCBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcikpOworICAgICAgICAgICAg ICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBocC0+aF9hZGRydHlwZTsKKyAgICAgICAgICAgICAg ICAgICAgc2luLT5zaW5fcG9ydCA9IGh0b25zKGVudHJ5LT5wb3J0KTsKKyAgICAgICAgICAgICAg ICAgICAgbWVtY3B5KChjaGFyICopICZzaW4tPnNpbl9hZGRyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKikgaHAtPmhfYWRkcl9saXN0W2pdLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7ICAgICAgICAgICAgIC8qIHNhZmUgKi8K KyAgICAgICAgICAgICAgICAgICAgaWYgKG5vdXQgKyAxID49IGNvdW50KSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBjb3VudCArPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9 IChzdHJ1Y3Qgc29ja2FkZHIgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbGxvYygo Y2hhciAqKSBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihz dHJ1Y3Qgc29ja2FkZHIpICogY291bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFh ZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRuc291dDsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGVudHJ5ID0gaGVhZDsgZW50cnkgIT0gTlVM TDspIHsKKyAgICAgICAgZnJlZShlbnRyeS0+aG9zdCk7CisgICAgICAgIGVudHJ5LT5ob3N0ID0g TlVMTDsKKyAgICAgICAgc3J2ID0gZW50cnk7CisgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7 CisgICAgICAgIGZyZWUoc3J2KTsKKyAgICAgICAgc3J2ID0gTlVMTDsKKyAgICB9CisKKyAgZG5z b3V0OgorICAgIGlmIChzcnYpCisgICAgICBmcmVlKHNydik7CisKKyAgICBpZiAobm91dCA9PSAw KSB7ICAgICAgICAgICAgICAgICAgICAvKiBObyBnb29kIHNlcnZlcnMgKi8KKyAgICAgICAgaWYg KGFkZHIpCisgICAgICAgICAgZnJlZShhZGRyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor ICAgICphZGRyX3BwID0gYWRkcjsKKyAgICAqbmFkZHJzID0gbm91dDsKKyAgICByZXR1cm4gMTsK K30KKyN1bmRlZiBJTkNSX0NIRUNLCisjdW5kZWYgQ0hFQ0sKKyN1bmRlZiBOVE9IU1AKKworI2Rl ZmluZSBJTkNSX0NIRUNLKHgsIHkpIHggKz0geTsgaWYgKHggPiBzaXplICsgYW5zd2VyLmJ5dGVz KSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyNkZWZpbmUgQ0hFQ0soeCwg eSkgaWYgKHggKyB5ID4gc2l6ZSArIGFuc3dlci5ieXRlcykgXAorICAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAwCisjZGVmaW5lIE5UT0hTUCh4LCB5KSB4WzBdIDw8IDggfCB4WzFdOyB4 ICs9IHkKKworaW50Citsb2NhdGVfdHh0X3JyKHByZWZpeCwgbmFtZSwgcmV0c3RyKQorICAgIGNo YXIgKnByZWZpeCwgKm5hbWU7CisgICAgY2hhciAqKnJldHN0cjsKK3sKKyAgICB1bmlvbiB7Cisg ICAgICAgIHVuc2lnbmVkIGNoYXIgYnl0ZXNbMjA0OF07CisgICAgICAgIEhFQURFUiBoZHI7Cisg ICAgfSBhbnN3ZXI7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICBjaGFyIGhvc3RbTUFYX0RO U19OQU1FTEVOXSwgKmg7CisgICAgaW50IHNpemU7CisgICAgaW50IHR5cGUsIGNsYXNzLCBudW1h bnN3ZXJzLCBudW1xdWVyaWVzLCByZGxlbiwgbGVuOworCisgICAgLyoKKyAgICAgKiBGb3JtIG91 ciBxdWVyeSwgYW5kIHNlbmQgaXQgdmlhIEROUworICAgICAqLworCisgICAgaWYgKG5hbWUgPT0g TlVMTCB8fCBuYW1lWzBdID09ICdcMCcpIHsKKyAgICAgICAgc3RyY3B5KGhvc3QscHJlZml4KTsK KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIHN0cmxlbihwcmVmaXgpICsgc3RybGVuKG5hbWUp ICsgMyA+IE1BWF9ETlNfTkFNRUxFTiApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg ICAvKiBSZWFsbSBuYW1lcyBkb24ndCAobm9ybWFsbHkpIGVuZCB3aXRoICIuIiwgYnV0IGlmIHRo ZSBxdWVyeQorICAgICAgICAgICBkb2Vzbid0IGVuZCB3aXRoICIuIiBhbmQgZG9lc24ndCBnZXQg YW4gYW5zd2VyIGFzIGlzLCB0aGUKKyAgICAgICAgICAgcmVzb2x2IGNvZGUgd2lsbCB0cnkgYXBw ZW5kaW5nIHRoZSBsb2NhbCBkb21haW4uICBTaW5jZSB0aGUKKyAgICAgICAgICAgcmVhbG0gbmFt ZXMgYXJlIGFic29sdXRlcywgbGV0J3Mgc3RvcCB0aGF0LgorCisgICAgICAgICAgIEJ1dCBvbmx5 IGlmIGEgbmFtZSBoYXMgYmVlbiBzcGVjaWZpZWQuICBJZiB3ZSBhcmUgcGVyZm9ybWluZworICAg ICAgICAgICBhIHNlYXJjaCBvbiB0aGUgcHJlZml4IGFsb25lIHRoZW4gdGhlIGludGVudGlvbiBp cyB0byBhbGxvdworICAgICAgICAgICB0aGUgbG9jYWwgZG9tYWluIG9yIGRvbWFpbiBzZWFyY2gg bGlzdHMgdG8gYmUgZXhwYW5kZWQuCisgICAgICAgICovCisgICAgICAgIGggPSBob3N0ICsgc3Ry bGVuIChob3N0KTsKKyAgICAgICAgY2ttYWttc2coaG9zdCxzaXplb2YoaG9zdCkscHJlZml4LCAi LiIsIG5hbWUsCisgICAgICAgICAgICAgICAgICgoaCA+IGhvc3QpICYmIChoWy0xXSAhPSAnLicp KT8iLiI6TlVMTCk7CisKKyAgICB9CisgICAgc2l6ZSA9IHJlc19zZWFyY2goaG9zdCwgQ19JTiwg VF9UWFQsIGFuc3dlci5ieXRlcywgc2l6ZW9mKGFuc3dlci5ieXRlcykpOworCisgICAgaWYgKHNp emUgPCAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHAgPSBhbnN3ZXIuYnl0ZXM7CisKKyAg ICBudW1xdWVyaWVzID0gbnRvaHMoYW5zd2VyLmhkci5xZGNvdW50KTsKKyAgICBudW1hbnN3ZXJz ID0gbnRvaHMoYW5zd2VyLmhkci5hbmNvdW50KTsKKworICAgIHAgKz0gc2l6ZW9mKEhFQURFUik7 CisKKyAgICAvKgorICAgICAqIFdlIG5lZWQgdG8gc2tpcCBvdmVyIHRoZSBxdWVzdGlvbnMgYmVm b3JlIHdlIGNhbiBnZXQgdG8gdGhlIGFuc3dlcnMsCisgICAgICogd2hpY2ggbWVhbnMgd2UgaGF2 ZSB0byBpdGVyYXRlIG92ZXIgZXZlcnkgcXVlcnkgcmVjb3JkLiAgV2UgdXNlCisgICAgICogZG5f ZXhwYW5kIHRvIHRlbGwgdXMgaG93IGxvbmcgZWFjaCBjb21wcmVzc2VkIG5hbWUgaXMuCisgICAg ICovCisKKyAgICB3aGlsZSAobnVtcXVlcmllcy0tKSB7CisgICAgICAgIGxlbiA9IGRuX2V4cGFu ZChhbnN3ZXIuYnl0ZXMsIGFuc3dlci5ieXRlcyArIHNpemUsIHAsIGhvc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKGhvc3QpKTsKKyAgICAgICAgaWYgKGxlbiA8IDApCisgICAg ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgSU5DUl9DSEVDSyhwLCBsZW4gKyA0KTsgICAgICAg ICAvKiBOYW1lIHBsdXMgdHlwZSBwbHVzIGNsYXNzICovCisgICAgfQorCisgICAgLyoKKyAgICAg KiBXZSdyZSBub3cgcG9pbnRpbmcgYXQgdGhlIGFuc3dlciByZWNvcmRzLiAgUHJvY2VzcyB0aGUg Zmlyc3QKKyAgICAgKiBUWFQgcmVjb3JkIHdlIGZpbmQuCisgICAgICovCisKKyAgICB3aGlsZSAo bnVtYW5zd2Vycy0tKSB7CisKKyAgICAgICAgLyogRmlyc3QgdGhlIG5hbWU7IHVzZSBkbl9leHBh bmQgdG8gZ2V0IHRoZSBjb21wcmVzc2VkIHNpemUgKi8KKyAgICAgICAgbGVuID0gZG5fZXhwYW5k KGFuc3dlci5ieXRlcywgYW5zd2VyLmJ5dGVzICsgc2l6ZSwgcCwKKyAgICAgICAgICAgICAgICAg ICAgICAgIGhvc3QsIHNpemVvZihob3N0KSk7CisgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAg ICAgICAgcmV0dXJuIDA7CisgICAgICAgIElOQ1JfQ0hFQ0socCwgbGVuKTsKKworICAgICAgICAv KiBOZXh0IGlzIHRoZSBxdWVyeSB0eXBlICovCisgICAgICAgIENIRUNLKHAsIDIpOworICAgICAg ICB0eXBlID0gTlRPSFNQKHAsMik7CisKKyAgICAgICAgLyogTmV4dCBpcyB0aGUgcXVlcnkgY2xh c3M7IGFsc28gc2tpcCBvdmVyIDQgYnl0ZSBUVEwgKi8KKyAgICAgICAgQ0hFQ0socCw2KTsKKyAg ICAgICAgY2xhc3MgPSBOVE9IU1AocCw2KTsKKworICAgICAgICAvKiBSZWNvcmQgZGF0YSBsZW5n dGggLSBtYWtlIHN1cmUgd2UgYXJlbid0IHRydW5jYXRlZCAqLworCisgICAgICAgIENIRUNLKHAs Mik7CisgICAgICAgIHJkbGVuID0gTlRPSFNQKHAsMik7CisKKyAgICAgICAgaWYgKHAgKyByZGxl biA+IGFuc3dlci5ieXRlcyArIHNpemUpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg ICAvKgorICAgICAgICAgKiBJZiB0aGlzIGlzIGEgVFhUIHJlY29yZCwgcmV0dXJuIHRoZSBzdHJp bmcuICBOb3RlIHRoYXQgdGhlCisgICAgICAgICAqIHN0cmluZyBoYXMgYSAxLWJ5dGUgbGVuZ3Ro IGluIHRoZSBmcm9udAorICAgICAgICAgKi8KKyAgICAgICAgLyogWFhYIFdoYXQgYWJvdXQgZmxh Z2dpbmcgbXVsdGlwbGUgVFhUIHJlY29yZHMgYXMgYW4gZXJyb3I/ICAqLworCisgICAgICAgIGlm IChjbGFzcyA9PSBDX0lOICYmIHR5cGUgPT0gVF9UWFQpIHsKKyAgICAgICAgICAgIGxlbiA9ICpw Kys7CisgICAgICAgICAgICBpZiAocCArIGxlbiA+IGFuc3dlci5ieXRlcyArIHNpemUpCisgICAg ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAqcmV0c3RyID0gbWFsbG9jKGxlbiAr IDEpOworICAgICAgICAgICAgaWYgKCpyZXRzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gRU5PTUVNOworICAgICAgICAgICAgc3RybmNweSgqcmV0c3RyLCAoY2hhciAqKSBwLCBs ZW4pOworICAgICAgICAgICAgKCpyZXRzdHIpW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgLyog QXZvaWQgYSBjb21tb24gZXJyb3IuICovCisgICAgICAgICAgICBpZiAoICgqcmV0c3RyKVtsZW4t MV0gPT0gJy4nICkKKyAgICAgICAgICAgICAgICAoKnJldHN0cilbbGVuLTFdID0gJ1wwJzsKKyAg ICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9 CisjdW5kZWYgSU5DUl9DSEVDSworI3VuZGVmIENIRUNLCisjdW5kZWYgTlRPSFNQCisjZW5kaWYg LyogQ0tfRE5TX1NSViAqLworCisjaWZkZWYgVE5DT0RFCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisj aWZkZWYgVU5JWAorI2luY2x1ZGUgPHN5cy91bi5oPgorI2RlZmluZSBGV0RYX1VOSVhfU09DSwor I2lmbmRlZiBBRl9MT0NBTAorI2RlZmluZSBBRl9MT0NBTCBBRl9VTklYCisjZW5kaWYKKyNpZm5k ZWYgUEZfTE9DQUwKKyNkZWZpbmUgUEZfTE9DQUwgUEZfVU5JWAorI2VuZGlmCisjaWZuZGVmIFNV Tl9MRU4KKy8qIEV2YWx1YXRlIHRvIGFjdHVhbCBsZW5ndGggb2YgdGhlIGBzb2NrYWRkcl91bicg c3RydWN0dXJlLiAgKi8KKyNkZWZpbmUgU1VOX0xFTihwdHIpICgoc2l6ZV90KSAoKChzdHJ1Y3Qg c29ja2FkZHJfdW4gKikgMCktPnN1bl9wYXRoKSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg ICAgICArIHN0cmxlbiAoKHB0ciktPnN1bl9wYXRoKSkKKyNlbmRpZgorI2VuZGlmIC8qIFVOSVgg Ki8KK2ludAorZndkeF9jcmVhdGVfbGlzdGVuX3NvY2tldChzY3JlZW4pIGludCBzY3JlZW47IHsK KyNpZmRlZiBOT1BVVEVOVgorICAgIHJldHVybigtMSk7CisjZWxzZSAvKiBOT1BVVEVOViAqLwor ICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzYWRkcjsKKyAgICBpbnQgZGlzcGxheSwgcG9ydCwgc29j az0tMSwgaTsKKyAgICBzdGF0aWMgY2hhciBlbnZbNTEyXTsKKworICAgIC8qCisgICAgICogWCBX aW5kb3dzIFNlcnZlcnMgc3VwcG9ydCBtdWx0aXBsZSBkaXNwbGF5cyBieSBsaXN0ZW5pbmcgb24K KyAgICAgKiBvbmUgc29ja2V0IHBlciBkaXNwbGF5LiAgRGlzcGxheSAwIGlzIHBvcnQgNjAwMDsg RGlzcGxheSAxIGlzCisgICAgICogcG9ydCA2MDAxOyBldGMuCisgICAgICoKKyAgICAgKiBXZSBz dGFydCBieSB0cnlpbmcgdG8gb3BlbiBwb3J0IDYwMDEgc28gdGhhdCBkaXNwbGF5IDAgaXMKKyAg ICAgKiByZXNlcnZlZCBmb3IgdGhlIGxvY2FsIFggV2luZG93cyBTZXJ2ZXIuCisgICAgICovCisK KyAgICBmb3IgKCBkaXNwbGF5PTE7IGRpc3BsYXkgPCAxMDAwIDsgZGlzcGxheSsrICApIHsKKwor ICAgICAgICBpZiAoKHNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA8IDAp IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoKSIs InNvY2tldCgpIDwgMCIsc29jayk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 CisKKyAgICAgICAgcG9ydCA9IDYwMDAgKyBkaXNwbGF5OworICAgICAgICBiemVybygoY2hhciAq KSZzYWRkciwgc2l6ZW9mKHNhZGRyKSk7CisgICAgICAgIHNhZGRyLnNpbl9mYW1pbHkgPSBBRl9J TkVUOworICAgICAgICBzYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIobXlpcGFkZHIp OworICAgICAgICBzYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCisgICAgICAgIGlmIChi aW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsIHNpemVvZihzYWRkcikpIDwgMCkg eworICAgICAgICAgICAgaSA9IGVycm5vOyAgICAgICAgICAgICAgICAgIC8qIFNhdmUgZXJyb3Ig Y29kZSAqLworI2lmZGVmIFRDUElQTElCCisgICAgICAgICAgICBzb2NrZXRfY2xvc2Uoc29jayk7 CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICAgICAgY2xvc2Uoc29jayk7CisjZW5kaWYg LyogVENQSVBMSUIgKi8KKyAgICAgICAgICAgIHNvY2sgPSAtMTsKKyAgICAgICAgICAgIGRlYnVn KEYxMTAsImZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoKSIsImJpbmQoKSA8IDAiLDApOworICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBkZWJ1ZyhGMTAwLCJmZHd4 X2NyZWF0ZV9saXN0ZW5fc29ja2V0KCkgYmluZCBPSyIsIiIsMCk7CisgICAgICAgIGJyZWFrOwor ICAgIH0KKworICAgIGlmICggZGlzcGxheSA+IDEwMDAgKSB7CisgICAgICAgIGRlYnVnKEYxMDAs ImZ3ZHhfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoKSBPdXQgb2YgRGlzcGxheXMiLCIiLDApOworICAg ICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmIChsaXN0ZW4oc29jaywgNSkgPCAwKSB7 CisgICAgICAgIGkgPSBlcnJubzsgICAgICAgICAgICAgICAgICAvKiBTYXZlIGVycm9yIGNvZGUg Ki8KKyNpZmRlZiBUQ1BJUExJQgorICAgICAgICBzb2NrZXRfY2xvc2Uoc29jayk7CisjZWxzZSAv KiBUQ1BJUExJQiAqLworICAgICAgICBjbG9zZShzb2NrKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAq LworICAgICAgICBkZWJ1ZyhGMTAxLCJmZHd4X2NyZWF0ZV9saXN0ZW5fc29ja2V0KCkgbGlzdGVu KCkgZXJybm8iLCIiLGVycm5vKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZGVi dWcoRjEwMCwiZndkeF9jcmVhdGVfbGlzdGVuX3NvY2tldCgpIGxpc3RlbiBPSyIsIiIsMCk7CisK KyAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQg PSBzb2NrOworICAgIGlmICghbXlpcGFkZHJbMF0pCisgICAgICAgIGdldGxvY2FsaXBhZGRyKCk7 CisgICAgaWYgKCBteWlwYWRkclswXSApCisgICAgICAgIGNrbWFreG1zZyhlbnYsc2l6ZW9mKGVu diksIkRJU1BMQVk9IixteWlwYWRkciwiOiIsCisgICAgICAgICAgICAgICAgICBja3VpdG9hKGRp c3BsYXkpLCI6Iixja3VpdG9hKHNjcmVlbiksCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgZWxzZQorICAgICAgICBja21ha21zZyhlbnYsc2l6 ZW9mKGVudiksIkRJU1BMQVk9Iixja3VpdG9hKGRpc3BsYXkpLCI6IiwKKyAgICAgICAgICAgICAg ICAgY2t1aXRvYShzY3JlZW4pKTsKKyAgICBwdXRlbnYoZW52KTsKKyAgICByZXR1cm4oMCk7Cisj ZW5kaWYgLyogTk9QVVRFTlYgKi8KK30KKworCitpbnQKK2Z3ZHhfb3Blbl9jbGllbnRfY2hhbm5l bChjaGFubmVsKSBpbnQgY2hhbm5lbDsgeworICAgIGNoYXIgKiBlbnY7CisgICAgc3RydWN0IHNv Y2thZGRyX2luIHNhZGRyOworI2lmZGVmIEZXRFhfVU5JWF9TT0NLCisgICAgc3RydWN0IHNvY2th ZGRyX3VuIHNhZGRyX3VuID0geyBBRl9MT0NBTCB9OworI2VuZGlmIC8qIEZXRFhfVU5JWF9TT0NL ICovCisgICAgaW50IGNvbG9uLCBkb3QsIGRpc3BsYXksIHBvcnQsIHNvY2ssIGksIHNjcmVlbjsK KyAgICBpbnQgZmFtaWx5OworICAgIGNoYXIgYnVmWzI1Nl0sICogaG9zdD1OVUxMLCAqIHJlc3Q9 TlVMTDsKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgIGludCBvbj0xOworI2VuZGlmIC8qIFRDUF9O T0RFTEFZICovCisKKyAgICBkZWJ1ZyhGMTExLCJmd2R4X2NyZWF0ZV9jbGllbnRfY2hhbm5lbCgp IiwiY2hhbm5lbCIsY2hhbm5lbCk7CisKKyAgICBmb3IgKCBpPTA7IGk8TUFYRldEWCA7IGkrKyAp IHsKKyAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hh bm5lbFtpXS5pZCA9PSBjaGFubmVsKSB7CisgICAgICAgICAgICAvKiBBbHJlYWR5IG9wZW4gKi8K KyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ3ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVsKCkiLCJh bHJlYWR5IG9wZW4iLDApOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAg fQorCisgICAgZW52ID0gZ2V0ZW52KCJESVNQTEFZIik7CisgICAgaWYgKCAhZW52ICkKKyAgICAg IGVudiA9IChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKTsKKyAgICBpZiAoIGVudiApCisgICAgICBj a3N0cm5jcHkoYnVmLGVudiwyNTYpOworICAgIGVsc2UKKyAgICAgIGNrc3RybmNweShidWYsIjEy Ny4wLjAuMTowLjAiLDI1Nik7CisKKyAgICBiemVybygoY2hhciAqKSZzYWRkcixzaXplb2Yoc2Fk ZHIpKTsKKyAgICBzYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAgIGlmICghZndkeF9w YXJzZV9kaXNwbGF5bmFtZShidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZm YW1pbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZob3N0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3QK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICApIHsKKyAgICAgICAg aWYgKCBob3N0ICkgZnJlZShob3N0KTsKKyAgICAgICAgaWYgKCByZXN0ICkgZnJlZShyZXN0KTsK KyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAocmVzdCkgZnJlZShyZXN0KTsKKwor I2lmbmRlZiBGV0RYX1VOSVhfU09DSworICAvKiBpZiAkRElTUExBWSBpbmRpY2F0ZXMgdXNlIG9m IHVuaXggZG9tYWluIHNvY2tldHMsIGJ1dCB3ZSBkb24ndCBzdXBwb3J0IGl0LAorICAgKiB3ZSBj aGFuZ2UgdGhpbmdzIHRvIHVzZSBpbmV0IHNvY2tldHMgb24gdGhlIGlwIGxvb3BiYWNrIGludGVy ZmFjZSBpbnN0ZWFkLAorICAgKiBhbmQgaG9wZSB0aGF0IGl0IHdvcmtzLgorICAgKi8KKyAgICBp ZiAoZmFtaWx5ID09IEZhbWlseUxvY2FsKSB7CisgICAgICAgIGRlYnVnKEYxMDAsImZ3ZHhfY3Jl YXRlX2NsaWVudF9jaGFubmVsKCkgRmFtaWx5TG9jYWwiLCIiLDApOworICAgICAgICBmYW1pbHkg PSBGYW1pbHlJbnRlcm5ldDsKKyAgICAgICAgaWYgKGhvc3QpIGZyZWUoaG9zdCk7CisgICAgICAg IGlmIChob3N0ID0gbWFsbG9jKHN0cmxlbigibG9jYWxob3N0IikgKyAxKSkKKyAgICAgICAgICAg IHN0cmNweShob3N0LCAibG9jYWxob3N0Iik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlIC8qIEZXRFhfVU5JWF9TT0NLICov CisgICAgaWYgKGZhbWlseSA9PSBGYW1pbHlMb2NhbCkgeworICAgICAgICBpZiAoaG9zdCkgZnJl ZShob3N0KTsKKyAgICAgICAgc29jayA9IHNvY2tldChQRl9MT0NBTCwgU09DS19TVFJFQU0sIDAp OworICAgICAgICBpZiAoc29jayA8IDApCisgICAgICAgICAgICByZXR1cm4oLTEpOworCisgICAg ICAgIGNrbWFrbXNnKGJ1ZixzaXplb2YoYnVmKSwiL3RtcC8uWDExLXVuaXgvWCIsY2tpdG9hKGRp c3BsYXkpLE5VTEwsTlVMTCk7CisgICAgICAgIHN0cm5jcHkoc2FkZHJfdW4uc3VuX3BhdGgsIGJ1 Ziwgc2l6ZW9mKHNhZGRyX3VuLnN1bl9wYXRoKSk7CisgICAgICAgIGlmIChjb25uZWN0KHNvY2ss KHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkcl91biwgU1VOX0xFTigmc2FkZHJfdW4pKSA8IDApCisg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UKKyNlbmRpZiAgLyogRldEWF9VTklYX1NP Q0sgKi8KKyAgICB7CisgICAgICAgIC8qIE90aGVyd2lzZSwgd2UgYXJlIGFzc3VtaW5nIEZhbWls eUludGVybmV0ICovCisgICAgICAgIGlmIChob3N0KSB7CisgICAgICAgICAgICBja3N0cm5jcHko YnVmLGhvc3Qsc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgZnJlZShob3N0KTsKKyAgICAgICAg fSBlbHNlCisgICAgICAgICAgICBja3N0cm5jcHkoYnVmLG15aXBhZGRyLHNpemVvZihidWYpKTsK KworICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X2NyZWF0ZV9jbGllbnRfY2hhbm5lbCgpIiwiZGlz cGxheSIsZGlzcGxheSk7CisKKyAgICAgICAgcG9ydCA9IDYwMDAgKyBkaXNwbGF5OworICAgICAg ICBzYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCisgICAgICAgIGRlYnVnKEYxMTAsImZ3 ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVsKCkgaXAtYWRkcmVzcyIsYnVmLDApOworICAgICAgICBz YWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoYnVmKTsKKyAgICAgICAgaWYgKCBzYWRk ci5zaW5fYWRkci5zX2FkZHIgPT0gKHVuc2lnbmVkIGxvbmcpIC0xCisjaWZkZWYgSU5BRERSX05P TkUKKyAgICAgICAgICAgICB8fCBzYWRkci5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX05PTkUK KyNlbmRpZiAvKiBJTkFERFJfTk9ORSAqLworICAgICAgICAgICAgICkKKyAgICAgICAgeworICAg ICAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q7CisgICAgICAgICAgICBob3N0ID0gZ2V0aG9z dGJ5bmFtZShidWYpOworICAgICAgICAgICAgaWYgKCBob3N0ID09IE5VTEwgKQorICAgICAgICAg ICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9z dCk7CisjaWZkZWYgSEFERFJMSVNUCisjaWZkZWYgaF9hZGRyCisgICAgICAgICAgICAvKiBUaGlz IGlzIGZvciB0cnlpbmcgbXVsdGlwbGUgSVAgYWRkcmVzc2VzIC0gc2VlIDxuZXRkYi5oPiAqLwor ICAgICAgICAgICAgaWYgKCEoaG9zdC0+aF9hZGRyX2xpc3QpKQorICAgICAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHJfbGlzdFswXSwKKyAgICAg ICAgICAgICAgICAgICAoY2FkZHJfdCkmc2FkZHIuc2luX2FkZHIsCisgICAgICAgICAgICAgICAg ICAgaG9zdC0+aF9sZW5ndGgKKyAgICAgICAgICAgICAgICAgICApOworI2Vsc2UKKyAgICAgICAg ICAgIGJjb3B5KGhvc3QtPmhfYWRkciwgKGNhZGRyX3QpJnNhZGRyLnNpbl9hZGRyLCBob3N0LT5o X2xlbmd0aCk7CisjZW5kaWYgLyogaF9hZGRyICovCisjZWxzZSAgLyogSEFERFJMSVNUICovCisg ICAgICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90KSZzYWRkci5zaW5fYWRkciwg aG9zdC0+aF9sZW5ndGgpOworI2VuZGlmIC8qIEhBRERSTElTVCAqLworICAgICAgICB9CisKKyAg ICAgICAgaWYgKChzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgPCAwKSB7 CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X2NyZWF0ZV9jbGllbnRfY2hhbm5lbCgpIiwi c29ja2V0KCkgPCAwIixzb2NrKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0K KworICAgICAgICBpZiAoIGNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzYWRkciwg c2l6ZW9mKHNhZGRyKSkgPCAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X2NyZWF0 ZV9jbGllbnRfY2hhbm5lbCgpIiwiY29ubmVjdCgpIGZhaWxlZCIsMCk7CisjaWZkZWYgVENQSVBM SUIKKyAgICAgICAgICAgIHNvY2tldF9jbG9zZShzb2NrKTsKKyNlbHNlIC8qIFRDUElQTElCICov CisgICAgICAgICAgICBjbG9zZShzb2NrKTsKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLworICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorCisjaWZkZWYgVENQX05PREVMQVkKKyAgICAg ICAgc2V0c29ja29wdChzb2NrLElQUFJPVE9fVENQLFRDUF9OT0RFTEFZLChjaGFyICopJm9uLHNp emVvZihvbikpOworI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisgICAgfQorCisgICAgZm9yIChp ID0gMDsgaSA8IE1BWEZXRFg7IGkrKykgeworICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9GT1JX QVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLmlkID09IC0xKSB7CisgICAgICAgICBURUxPUFRf U0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0uZmQgPSBzb2NrOworICAg ICAgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLmlk ID0gY2hhbm5lbDsKKyAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94 LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0gMTsKKyAgICAgICAgIGRlYnVnKEYxMTEs ImZ3ZHhfY3JlYXRlX2NsaWVudF9jaGFubmVsKCkiLCJzb2NrZXQiLHNvY2spOworICAgICAgICAg cmV0dXJuKDApOworICAgICB9CisgICAgfQorICAgIHJldHVybigtMSk7Cit9CisKK2ludAorZndk eF9zZXJ2ZXJfYXZhaWwoKSB7CisgICAgY2hhciAqIGVudjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJf aW4gc2FkZHI7CisjaWZkZWYgRldEWF9VTklYX1NPQ0sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4g c2FkZHJfdW4gPSB7IEFGX0xPQ0FMIH07CisjZW5kaWYgIC8qIEZXRFhfVU5JWF9TT0NLICovCisg ICAgaW50IGNvbG9uLCBkb3QsIGRpc3BsYXksIHBvcnQsIHNvY2ssIGksIHNjcmVlbjsKKyAgICBj aGFyIGJ1ZlsyNTZdLCAqaG9zdD1OVUxMLCAqcmVzdD1OVUxMOworI2lmZGVmIFRDUF9OT0RFTEFZ CisgICAgaW50IG9uPTE7CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyAgICBpbnQgZmFtaWx5 OworCisgICAgZW52ID0gZ2V0ZW52KCJESVNQTEFZIik7CisgICAgaWYgKCAhZW52ICkKKyAgICAg IGVudiA9IChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKTsKKyAgICBpZiAoIGVudiApCisgICAgICBj a3N0cm5jcHkoYnVmLGVudiwyNTYpOworICAgIGVsc2UKKyAgICAgIGNrc3RybmNweShidWYsIjEy Ny4wLjAuMTowLjAiLDI1Nik7CisKKyAgICBiemVybygoY2hhciAqKSZzYWRkcixzaXplb2Yoc2Fk ZHIpKTsKKyAgICBzYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAgIGlmICghZndkeF9w YXJzZV9kaXNwbGF5bmFtZShidWYsJmZhbWlseSwmaG9zdCwmZGlzcGxheSwmc2NyZWVuLCZyZXN0 KSkgeworICAgICAgICBpZiAoIGhvc3QgKSBmcmVlKGhvc3QpOworICAgICAgICBpZiAoIHJlc3Qg KSBmcmVlKHJlc3QpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChyZXN0KSBm cmVlKHJlc3QpOworCisjaWZuZGVmIEZXRFhfVU5JWF9TT0NLCisgIC8qIGlmICRESVNQTEFZIGlu ZGljYXRlcyB1c2Ugb2YgdW5peCBkb21haW4gc29ja2V0cywgYnV0IHdlIGRvbid0IHN1cHBvcnQg aXQsCisgICAqIHdlIGNoYW5nZSB0aGluZ3MgdG8gdXNlIGluZXQgc29ja2V0cyBvbiB0aGUgaXAg bG9vcGJhY2sgaW50ZXJmYWNlIGluc3RlYWQsCisgICAqIGFuZCBob3BlIHRoYXQgaXQgd29ya3Mu CisgICAqLworICAgIGlmIChmYW1pbHkgPT0gRmFtaWx5TG9jYWwpIHsKKyAgICAgICAgZmFtaWx5 ID0gRmFtaWx5SW50ZXJuZXQ7CisgICAgICAgIGlmIChob3N0KSBmcmVlKGhvc3QpOworICAgICAg ICBpZiAoaG9zdCA9IG1hbGxvYyhzdHJsZW4oImxvY2FsaG9zdCIpICsgMSkpCisgICAgICAgICAg ICBzdHJjcHkoaG9zdCwgImxvY2FsaG9zdCIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZSAvKiBGV0RYX1VOSVhfU09DSyAq LworICAgIGlmIChmYW1pbHkgPT0gRmFtaWx5TG9jYWwpIHsKKyAgICAgICAgZGVidWcoRjEwMCwi ZndkeF9zZXJ2ZXJfYXZhaWwoKSBGYW1pbHlMb2NhbCIsIiIsMCk7CisgICAgICAgIGlmIChob3N0 KSBmcmVlKGhvc3QpOworICAgICAgICBzb2NrID0gc29ja2V0KFBGX0xPQ0FMLCBTT0NLX1NUUkVB TSwgMCk7CisgICAgICAgIGlmIChzb2NrIDwgMCkKKyAgICAgICAgICAgIHJldHVybigwKTsKKwor ICAgICAgICBja21ha21zZyhidWYsc2l6ZW9mKGJ1ZiksIi90bXAvLlgxMS11bml4L1giLGNraXRv YShkaXNwbGF5KSxOVUxMLE5VTEwpOworICAgICAgICBzdHJuY3B5KHNhZGRyX3VuLnN1bl9wYXRo LCBidWYsIHNpemVvZihzYWRkcl91bi5zdW5fcGF0aCkpOworICAgICAgICBpZiAoY29ubmVjdChz b2NrLChzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHJfdW4sU1VOX0xFTigmc2FkZHJfdW4pKSA8IDAp CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIGNsb3NlKHNvY2spOworICAgICAgICBy ZXR1cm4oMSk7CisgICAgfQorI2VuZGlmICAvKiBGV0RYX1VOSVhfU09DSyAqLworCisgICAgLyog T3RoZXJ3aXNlLCB3ZSBhcmUgYXNzdW1pbmcgRmFtaWx5SW50ZXJuZXQgKi8KKyAgICBpZiAoaG9z dCkgeworICAgICAgICBja3N0cm5jcHkoYnVmLGhvc3Qsc2l6ZW9mKGJ1ZikpOworICAgICAgICBm cmVlKGhvc3QpOworICAgIH0gZWxzZQorICAgICAgICBja3N0cm5jcHkoYnVmLG15aXBhZGRyLHNp emVvZihidWYpKTsKKworICAgIGRlYnVnKEYxMTEsImZ3ZHhfc2VydmVyX2F2YWlsKCkiLCJkaXNw bGF5IixkaXNwbGF5KTsKKworICAgIHBvcnQgPSA2MDAwICsgZGlzcGxheTsKKyAgICBzYWRkci5z aW5fcG9ydCA9IGh0b25zKHBvcnQpOworCisgICAgZGVidWcoRjExMCwiZndkeF9zZXJ2ZXJfYXZh aWwoKSBpcC1hZGRyZXNzIixidWYsMCk7CisgICAgc2FkZHIuc2luX2FkZHIuc19hZGRyID0gaW5l dF9hZGRyKGJ1Zik7CisgICAgaWYgKCBzYWRkci5zaW5fYWRkci5zX2FkZHIgPT0gKHVuc2lnbmVk IGxvbmcpIC0xCisjaWZkZWYgSU5BRERSX05PTkUKKyAgICAgICAgIHx8IHNhZGRyLnNpbl9hZGRy LnNfYWRkciA9PSBJTkFERFJfTk9ORQorI2VuZGlmIC8qIElOQUREUl9OT05FICovCisgICAgICAg ICApCisgICAgeworICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsKKyAgICAgICAgaG9zdCA9 IGdldGhvc3RieW5hbWUoYnVmKTsKKyAgICAgICAgaWYgKCBob3N0ID09IE5VTEwgKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJmd2R4X3NlcnZlcl9hdmFpbCgpIGdldGhvc3RieW5hbWUoKSBm YWlsZWQiLAorICAgICAgICAgICAgICAgICAgIG15aXBhZGRyLDApOworICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBob3N0ID0gY2tfY29weWhvc3RlbnQoaG9zdCk7 CisjaWZkZWYgSEFERFJMSVNUCisjaWZkZWYgaF9hZGRyCisgICAgICAgIC8qIFRoaXMgaXMgZm9y IHRyeWluZyBtdWx0aXBsZSBJUCBhZGRyZXNzZXMgLSBzZWUgPG5ldGRiLmg+ICovCisgICAgICAg IGlmICghKGhvc3QtPmhfYWRkcl9saXN0KSkKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgIGJjb3B5KGhvc3QtPmhfYWRkcl9saXN0WzBdLAorICAgICAgICAgICAgICAgKGNhZGRyX3Qp JnNhZGRyLnNpbl9hZGRyLAorICAgICAgICAgICAgICAgaG9zdC0+aF9sZW5ndGgKKyAgICAgICAg ICAgICAgICk7CisjZWxzZQorICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90KSZz YWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOworI2VuZGlmIC8qIGhfYWRkciAqLworI2Vs c2UgIC8qIEhBRERSTElTVCAqLworICAgICAgICBiY29weShob3N0LT5oX2FkZHIsIChjYWRkcl90 KSZzYWRkci5zaW5fYWRkciwgaG9zdC0+aF9sZW5ndGgpOworI2VuZGlmIC8qIEhBRERSTElTVCAq LworICAgIH0KKworICAgIGlmICgoc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwg MCkpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X3NlcnZlcl9hdmFpbCgpIiwic29j a2V0KCkgPCAwIixzb2NrKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIGlmICgg Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNhZGRyLCBzaXplb2Yoc2FkZHIpKSA8 IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwiZndkeF9zZXJ2ZXJfYXZhaWwoKSIsImNvbm5lY3Qo KSBmYWlsZWQiLDApOworI2lmZGVmIFRDUElQTElCCisgICAgICAgIHNvY2tldF9jbG9zZShzb2Nr KTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgICAgIGNsb3NlKHNvY2spOworI2VuZGlmIC8q IFRDUElQTElCICovCisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyNpZmRlZiBUQ1BJUExJ QgorICAgIHNvY2tldF9jbG9zZShzb2NrKTsKKyNlbHNlIC8qIFRDUElQTElCICovCisgICAgY2xv c2Uoc29jayk7CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICByZXR1cm4oMSk7Cit9CisKK2lu dAorZndkeF9vcGVuX3NlcnZlcl9jaGFubmVsKCkgeworICAgIGludCBzb2NrLCByZWFkeV90b19h Y2NlcHQsIHNvY2syLGNoYW5uZWwsaTsKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgIGludCBvbj0x OworI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisjaWZkZWYgVUNYNTAKKyAgICBzdGF0aWMgdV9p bnQgc2FkZHJsZW47CisjZWxzZQorICAgIHN0YXRpYyBTT0NLT1BUX1Qgc2FkZHJsZW47CisjZW5k aWYgLyogVUNYNTAgKi8KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7CisgICAgY2hhciBz Yls4XTsKKyAgICBleHRlcm4gY2hhciB0bl9tc2dbXTsKKyNpZmRlZiBCU0RTRUxFQ1QKKyAgICBm ZF9zZXQgcmZkczsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyNlbHNlCisjaWZkZWYgQkVMTFNF TENUCisgICAgZmRfc2V0IHJmZHM7CisjZWxzZQorICAgIGZkX3NldCByZmRzOworICAgIHN0cnVj dCB0aW1ldmFsIHsKKyAgICAgICAgbG9uZyB0dl9zZWM7CisgICAgICAgIGxvbmcgdHZfdXNlYzsK KyAgICB9IHR2OworI2VuZGlmIC8qIEJFTExTRUxFQ1QgKi8KKyNlbmRpZiAvKiBCU0RTRUxFQ1Qg Ki8KKyAgICB1bnNpZ25lZCBzaG9ydCBuY2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyICogcDsK KworICAgIHNvY2sgPSBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rl bl9zb2NrZXQ7CisKKyAgdHJ5X2FnYWluOgorCisjaWZkZWYgQlNEU0VMRUNUCisgICAgdHYudHZf c2VjICA9IHR2LnR2X3VzZWMgPSAwTDsKKyAgICB0di50dl91c2VjID0gNTA7CisgICAgRkRfWkVS TygmcmZkcyk7CisgICAgRkRfU0VUKHNvY2ssICZyZmRzKTsKKyAgICByZWFkeV90b19hY2NlcHQg PQorICAgICAgICAoKHNlbGVjdChGRF9TRVRTSVpFLAorI2lmZGVmIEhQVVgKKyNpZmRlZiBIUFVY MTAxMAorICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQorI2Vsc2UKKworICAgICAgICAgICAg ICAgICAgKGludCAqKQorI2VuZGlmIC8qIEhQVVgxMDEwICovCisjZWxzZQorI2lmZGVmIF9fREVD QworICAgICAgICAgICAgICAgICAgKGZkX3NldCAqKQorI2VuZGlmIC8qIF9fREVDQyAqLworI2Vu ZGlmIC8qIEhQVVggKi8KKyAgICAgICAgICAgICAgICAgICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYp ID4gMCkgJiYKKyAgICAgICAgICBGRF9JU1NFVChzb2NrLCAmcmZkcykpOworI2Vsc2UgLyogQlNE U0VMRUNUICovCisjaWZkZWYgSUJNU0VMRUNUCisgICAgcmVhZHlfdG9fYWNjZXB0ID0gKHNlbGVj dCgmc29jaywgMSwgMCwgMCwgNTApID09IDEpOworI2Vsc2UKKyNpZmRlZiBCRUxMU0VMRUNUCisg ICAgRkRfWkVSTyhyZmRzKTsKKyAgICBGRF9TRVQoc29jaywgcmZkcyk7CisgICAgcmVhZHlfdG9f YWNjZXB0ID0KKyAgICAgICAgKChzZWxlY3QoMTI4LCByZmRzLCBOVUxMLCBOVUxMLCA1MCkgPiAw KSAmJgorICAgICAgICAgIEZEX0lTU0VUKHNvY2ssIHJmZHMpKTsKKyNlbHNlCisvKiBUcnkgdGhp cyAtIHdoYXQncyB0aGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuLi4uICovCisKKyAgICB0di50dl9z ZWMgID0gdHYudHZfdXNlYyA9IDBMOworICAgIHR2LnR2X3VzZWMgPSA1MDsKKyAgICBGRF9aRVJP KCZyZmRzKTsKKyAgICBGRF9TRVQoc29jaywgJnJmZHMpOworICAgIHJlYWR5X3RvX2FjY2VwdCA9 CisgICAgICAgICgoc2VsZWN0KEZEX1NFVFNJWkUsCisgICAgICAgICAgICAgICAgICAoZmRfc2V0 ICopICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYpID4gMCkgJiYKKyAgICAgICAgICBGRF9JU1NFVChz b2NrLCAmcmZkcykpOworI2VuZGlmIC8qIEJFTExTRUxFQ1QgKi8KKyNlbmRpZiAvKiBJQk1TRUxF Q1QgKi8KKyNlbmRpZiAvKiBCU0RTRUxFQ1QgKi8KKworICAgIGlmICggIXJlYWR5X3RvX2FjY2Vw dCApCisgICAgICAgIHJldHVybigwKTsKKworICAgIGlmICgoc29jazIgPSBhY2NlcHQoc29jaywo c3RydWN0IHNvY2thZGRyICopJnNhZGRyLCZzYWRkcmxlbikpIDwgMCkgeworICAgICAgICBpbnQg aSA9IGVycm5vOyAgICAgICAgICAgICAgICAgIC8qIHNhdmUgZXJyb3IgY29kZSAqLworICAgICAg ICBkZWJ1ZyhGMTAxLCJ0Y3BzcnZfb3BlbiBhY2NlcHQgZXJybm8iLCIiLGkpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qCisgICAgICogTm93IHdlIGhhdmUgdGhlIG9wZW4g c29ja2V0LiAgV2UgbXVzdCBub3cgZmluZCBhIGNoYW5uZWwgdG8gc3RvcmUKKyAgICAgKiBpdCBp biwgYW5kIHRoZW4gbm90aWZ5IHRoZSBjbGllbnQuCisgICAgICovCisKKyAgICBmb3IgKCBjaGFu bmVsPTA7Y2hhbm5lbDxNQVhGV0RYO2NoYW5uZWwrKyApIHsKKyAgICAgICAgaWYgKCBURUxPUFRf U0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbY2hhbm5lbF0uZmQgPT0gLTEg KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCBjaGFubmVsID09IE1BWEZX RFggKSB7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgICAgc29ja2V0X2Nsb3NlKHNvY2syKTsKKyNl bHNlIC8qIFRDUElQTElCICovCisgICAgICAgIGNsb3NlKHNvY2syKTsKKyNlbmRpZiAvKiBUQ1BJ UExJQiAqLworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmICggZndkeF9zZW5k X29wZW4oY2hhbm5lbCkgPCAwICkgeworI2lmZGVmIFRDUElQTElCCisgICAgICAgIHNvY2tldF9j bG9zZShzb2NrMik7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICBjbG9zZShzb2NrMik7 CisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyAgICB9CisKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAg IHNldHNvY2tvcHQoc29jazIsSVBQUk9UT19UQ1AsVENQX05PREVMQVksKGNoYXIgKikmb24sc2l6 ZW9mKG9uKSk7CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKworICAgIFRFTE9QVF9TQihURUxP UFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtjaGFubmVsXS5mZCA9IHNvY2syOworICAg IFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtjaGFubmVsXS5p ZCA9IGNoYW5uZWw7CisgICAgZ290byB0cnlfYWdhaW47CisKKyAgICByZXR1cm4oMCk7ICAvKiBu ZXZlciByZWFjaGVkICovCit9CisKK2ludAorZndkeF9jbG9zZV9jaGFubmVsKGNoYW5uZWwpIGlu dCBjaGFubmVsOyB7CisgICAgaW50IGksZmQ7CisKKyAgICBmb3IgKCBpPTA7IGk8TUFYRldEWCA7 IGkrKyApIHsKKyAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJk X3guY2hhbm5lbFtpXS5pZCA9PSBjaGFubmVsKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor ICAgIGlmICggaSA9PSBNQVhGV0RYICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGZkID0g VEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW2ldLmZkOworICAg IFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5mZCA9IC0x OworICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5p ZCA9IC0xOworICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5l bFtpXS5uZWVkX3RvX3NlbmRfeGF1dGggPSAwOworCisjaWZkZWYgVENQSVBMSUIKKyAgICBzb2Nr ZXRfY2xvc2UoZmQpOworI2Vsc2UgLyogVENQSVBMSUIgKi8KKyAgICBjbG9zZShmZCk7CisjZW5k aWYgLyogVENQSVBMSUIgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorZndkeF9jbG9zZV9h bGwoKSB7CisgICAgaW50IHgsZmQ7CisKKyAgICBkZWJ1ZyhGMTExLCJmd2R4X2Nsb3NlX2FsbCgp IiwKKyAgICAgICAgICAiVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5saXN0 ZW5fc29ja2V0IiwKKyAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2Fy ZF94Lmxpc3Rlbl9zb2NrZXQpOworCisgICAgaWYgKCBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRf WCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgIT0gLTEgKSB7CisjaWZkZWYgVENQSVBMSUIKKyAg ICAgICAgc29ja2V0X2Nsb3NlKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gu bGlzdGVuX3NvY2tldCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgICBjbG9zZShURUxP UFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQpOworI2VuZGlm IC8qIFRDUElQTElCICovCisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3 YXJkX3gubGlzdGVuX3NvY2tldCA9IC0xOworICAgIH0KKworICAgIGZvciAoeCA9IDA7IHggPCBN QVhGV0RYOyB4KyspIHsKKyAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3 YXJkX3guY2hhbm5lbFt4XS5mZCAhPSAtMSkgeworICAgICAgZmQgPSBURUxPUFRfU0IoVEVMT1BU X0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uZmQ7CisgICAgICBURUxPUFRfU0IoVEVM T1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uZmQgPSAtMTsKKyAgICAgIFRFTE9Q VF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5pZCA9IC0xOworICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLm5lZWRf dG9fc2VuZF94YXV0aCA9IDA7CisgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9y d2FyZF94LmNoYW5uZWxbeF0uc3VzcGVuZCA9IDA7CisjaWZkZWYgVENQSVBMSUIKKyAgICAgIHNv Y2tldF9jbG9zZShmZCk7CisjZWxzZSAvKiBUQ1BJUExJQiAqLworICAgICAgY2xvc2UoZmQpOwor I2VuZGlmIC8qIFRDUElQTElCICovCisgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDApOworfQor CisvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBmb3IgVW5peCAqLworI2lmbmRlZiBz b2NrZXRfd3JpdGUKKyNkZWZpbmUgc29ja2V0X3dyaXRlKGYscyxuKSAgICB3cml0ZShmLHMsbikK KyNlbmRpZiAvKiBzb2NrZXRfd3JpdGUgKi8KKyNpZm5kZWYgc29ja2V0X3JlYWQKKyNkZWZpbmUg c29ja2V0X3JlYWQoZixzLG4pICAgICByZWFkKGYscyxuKQorI2VuZGlmIC8qIHNvY2tldF9yZWFk ICovCisKK2ludAorZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwoY2hhbm5lbCwgZGF0YSwgbGVu KQorICAgIGludCBjaGFubmVsOyBjaGFyICogZGF0YTsgaW50IGxlbjsKK3sKKyAgICBpbnQgc29j aywgY291bnQsIHRyeT0wLCBsZW5ndGggPSBsZW4sIGk7CisKKyAgICBpZiAoIGxlbiA8PSAwICkK KyAgICAgICAgcmV0dXJuKDApOworCisgICAgZm9yICggaT0wOyBpPE1BWEZXRFggOyBpKysgKSB7 CisgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5u ZWxbaV0uaWQgPT0gY2hhbm5lbCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAo IGkgPT0gTUFYRldEWCApIHsKKyAgICAgICAgZGVidWcoRjExMCwiZndkeF93cml0ZV9kYXRhX3Rv X2NoYW5uZWwiLAorICAgICAgICAgICAgICAgImF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gY2xvc2Vk IGNoYW5uZWwiLDApOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIHNvY2sgPSBU RUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0uZmQ7CisgICAg ZGVidWcoRjExMSwiZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwiLCJzb2NrZXQiLHNvY2spOwor ICAgIGNraGV4ZHVtcCgiZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwiLGRhdGEsbGVuKTsKKwor ICBmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbF9yZXRyeToKKworICAgIGlmICgoY291bnQgPSBz b2NrZXRfd3JpdGUoc29jayxkYXRhLGxlbikpIDwgMCkgeworICAgICAgICBpbnQgc19lcnJubyA9 IHNvY2tldF9lcnJubzsgLyogbWF5YmUgYSBmdW5jdGlvbiAqLworICAgICAgICBkZWJ1ZyhGMTAx LCJmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbCBzb2NrZXRfd3JpdGUgZXJyb3IiLCIiLHNfZXJy bm8pOworI2lmZGVmIEJFVEFURVNUCisgICAgICAgIHByaW50ZigiZndkeF93cml0ZV9kYXRhX3Rv X2NoYW5uZWwgZXJyb3JcclxuIik7CisjZW5kaWYgLyogQkVUQVRFU1QgKi8KKyNpZmRlZiBPUzIK KyAgICAgICAgaWYgKG9zMnNvY2tldGVycm9yKHNfZXJybm8pIDwgMCkKKyAgICAgICAgICAgIHJl dHVybigtMik7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAg ICAgICAgICAvKiBDYWxsIGl0IGFuIGkvbyBlcnJvciAqLworICAgIH0KKyAgICBpZiAoY291bnQg PCBsZW4pIHsKKyAgICAgICAgZGVidWcoRjExMSwiZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwg c29ja2V0X3dyaXRlIixkYXRhLGNvdW50KTsKKyAgICAgICAgaWYgKGNvdW50ID4gMCkgeworICAg ICAgICAgICAgZGF0YSArPSBjb3VudDsKKyAgICAgICAgICAgIGxlbiAtPSBjb3VudDsKKyAgICAg ICAgfQorICAgICAgICBkZWJ1ZyhGMTExLCJmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbCByZXRy eSIsZGF0YSxsZW4pOworICAgICAgICBpZiAoIGxlbiA+IDAgKQorICAgICAgICAgICAgZ290byBm d2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbF9yZXRyeTsKKyAgICB9CisKKyAgICBkZWJ1ZyhGMTEx LCJmd2R4X3dyaXRlX2RhdGFfdG9fY2hhbm5lbCBjb21wbGV0ZSIsZGF0YSxsZW5ndGgpOworICAg IHJldHVybihsZW5ndGgpOyAvKiBzdWNjZXNzIC0gcmV0dXJuIHRvdGFsIGxlbmd0aCAqLworfQor CitWT0lECitmd2R4X2NoZWNrX3NvY2tldHMoZmRfc2V0ICppYml0cykKK3sKKyAgICBpbnQgeCwg c29jaywgY2hhbm5lbCwgYnl0ZXM7CisgICAgc3RhdGljIGNoYXIgYnVmZmVyWzMyMDAwXTsKKwor ICAgIGRlYnVnKEYxMDAsImZ3ZHhfY2hlY2tfc29ja2V0cygpIiwiIiwwKTsKKyAgICBpZiAoIHNz dGVsbmV0ICYmICFURUxPUFRfTUUoVEVMT1BUX0ZPUldBUkRfWCkgfHwKKyAgICAgICAgICFzc3Rl bG5ldCAmJiAhVEVMT1BUX1UoVEVMT1BUX0ZPUldBUkRfWCkpIHsKKyAgICAgICAgZGVidWcoRjEx MCwiZndkeF9jaGVja19zb2NrZXRzKCkiLCJURUxPUFRfRk9SV0FSRF9YIG5vdCBuZWdvdGlhdGVk IiwwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoeCA9IDA7IHggPCBNQVhG V0RYOyB4KyspIHsKKyAgICAgICAgaWYgKCBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9y d2FyZF94LmNoYW5uZWxbeF0uZmQgPT0gLTEgfHwKKyAgICAgICAgICAgICBURUxPUFRfU0IoVEVM T1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0uc3VzcGVuZCApCisgICAgICAgICAg ICBjb250aW51ZTsKKworICAgICAgICBzb2NrID0gVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gp LmZvcndhcmRfeC5jaGFubmVsW3hdLmZkOworICAgICAgICBpZiAoRkRfSVNTRVQoc29jaywgaWJp dHMpKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFubmVsID0gVEVMT1BUX1NCKFRFTE9QVF9G T1JXQVJEX1gpLmZvcndhcmRfeC5jaGFubmVsW3hdLmlkOworICAgICAgICAgICAgZGVidWcoRjEx MSwiZndkeF9jaGVja19zb2NrZXRzKCkiLCJjaGFubmVsIHNldCIsY2hhbm5lbCk7CisKKyAgICAg ICAgICAgIGJ5dGVzID0gc29ja2V0X3JlYWQoc29jaywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7 CisgICAgICAgICAgICBpZiAoYnl0ZXMgPiAwKQorICAgICAgICAgICAgICAgIGZ3ZHhfc2VuZF9k YXRhX2Zyb21fY2hhbm5lbChjaGFubmVsLCBidWZmZXIsIGJ5dGVzKTsKKyAgICAgICAgICAgIGVs c2UgaWYgKGJ5dGVzID09IDApIHsKKyAgICAgICAgICAgICAgICBmd2R4X2Nsb3NlX2NoYW5uZWwo Y2hhbm5lbCk7CisgICAgICAgICAgICAgICAgZndkeF9zZW5kX2Nsb3NlKGNoYW5uZWwpOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbnQKK2Z3ZHhfaW5pdF9mZF9zZXQo ZmRfc2V0ICppYml0cykKK3sKKyAgICBpbnQgeCxzZXQ9MCxjbnQ9MDsKKworICAgIGlmICggc3N0 ZWxuZXQgJiYgIVRFTE9QVF9NRShURUxPUFRfRk9SV0FSRF9YKSB8fAorICAgICAgICAgIXNzdGVs bmV0ICYmICFURUxPUFRfVShURUxPUFRfRk9SV0FSRF9YKSkgeworICAgICAgICBkZWJ1ZyhGMTEw LCJmd2R4X2luaXRfZmRfc2V0KCkiLCJURUxPUFRfRk9SV0FSRF9YIG5vdCBuZWdvdGlhdGVkIiww KTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X0ZPUldBUkRfWCkuZm9yd2FyZF94Lmxpc3Rlbl9zb2NrZXQgIT0gLTEpIHsKKyAgICAgICAgc2V0 Kys7CisgICAgICAgIEZEX1NFVChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94 Lmxpc3Rlbl9zb2NrZXQsIGliaXRzKTsKKyAgICB9CisgICAgZm9yICh4ID0gMDsgeCA8IE1BWEZX RFg7IHgrKykgeworICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndh cmRfeC5jaGFubmVsW3hdLmZkICE9IC0xKSB7CisgICAgICAgICAgICBjbnQrKzsKKyAgICAgICAg ICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbeF0u c3VzcGVuZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNldCsrOwor ICAgICAgICAgICAgRkRfU0VUKFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gu Y2hhbm5lbFt4XS5mZCwgaWJpdHMpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzZXQgKyBj bnQgPT0gMCkgeworICAgICAgICByZXR1cm4oLTEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl dHVybihzZXQpOworICAgIH0KK30KKworI2lmZGVmIE5UCitWT0lECitmd2R4X3RocmVhZCggVk9J RCAqIGR1bW15ICkKK3sKKyAgICBmZF9zZXQgaWZkczsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djsK KyAgICBleHRlcm4gaW50IHByaW9yaXR5OworICAgIGludCBuOworCisgICAgc2V0aW50KCk7Cisg ICAgU2V0VGhyZWFkUHJ0eShwcmlvcml0eSxpc1dpbjk1KCkgPyAzIDogMTEpOworCisgICAgd2hp bGUgKCAhc3N0ZWxuZXQgJiYgVEVMT1BUX1UoVEVMT1BUX0ZPUldBUkRfWCkgfHwKKyAgICAgICAg ICAgIHNzdGVsbmV0ICYmIFRFTE9QVF9NRShURUxPUFRfRk9SV0FSRF9YKSkKKyAgICB7CisgICAg ICAgIEZEX1pFUk8oJmlmZHMpOworICAgICAgICBuID0gZndkeF9pbml0X2ZkX3NldCgmaWZkcyk7 CisgICAgICAgIGlmIChuID4gMCkgeworICAgICAgICAgICAgdHYudHZfc2VjID0gMDsKKyAgICAg ICAgICAgIHR2LnR2X3VzZWMgPSAyNTAwOworICAgICAgICAgICAgaWYgKCBzZWxlY3QoRkRfU0VU U0laRSwgJmlmZHMsIE5VTEwsIE5VTEwsICZ0dikgPiAwICkKKyAgICAgICAgICAgICAgICBmd2R4 X2NoZWNrX3NvY2tldHMoJmlmZHMpOworCisgICAgICAgIH0gZWxzZSBpZiAobiA8IDApIHsKKyAg ICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gudGhyZWFkX3N0 YXJ0ZWQgPSAwOworICAgICAgICAgICAgY2tUaHJlYWRFbmQoTlVMTCk7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZiAv KiBOVCAqLworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworI2VuZGlmIC8qIFROQ09ERSAqLwor I2VuZGlmIC8qIE5FVENPTk4gKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrY25ldC5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja2NuZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDBi Yzc0Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja2NuZXQuaApAQCAtMCwwICsxLDE1MDkgQEAKKy8qIGNrY25ldC5oIC0tIFN5bWJvbCBh bmQgbWFjcm8gZGVmaW5pdGlvbnMgZm9yIEMtS2VybWl0IG5ldHdvcmsgc3VwcG9ydCAqLworCisv KgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+CisgIENvbHVtYmlh IFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4K KworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEg VW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2Vy dmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHly aWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1p c3Npb25zLgorKi8KKyNpZm5kZWYgQ0tDTkVUX0gKKyNkZWZpbmUgQ0tDTkVUX0gKKworLyogTmV0 d29yayB0eXBlcyAqLworCisjZGVmaW5lIE5FVF9OT05FIDAgICAgICAgICAgICAgICAgICAgICAg LyogTm9uZSAqLworI2RlZmluZSBORVRfVENQQiAxICAgICAgICAgICAgICAgICAgICAgIC8qIFRD UC9JUCBCZXJrZWxleSAoc29ja2V0KSAqLworI2RlZmluZSBORVRfVENQQSAyICAgICAgICAgICAg ICAgICAgICAgIC8qIFRDUC9JUCBBVCZUIChzdHJlYW1zKSAqLworI2RlZmluZSBORVRfU1gyNSAz ICAgICAgICAgICAgICAgICAgICAgIC8qIFNVTk9TIFN1bkxpbmsgWC4yNSAqLworI2RlZmluZSBO RVRfREVDICA0ICAgICAgICAgICAgICAgICAgICAgIC8qIERFQ25ldCAqLworI2RlZmluZSBORVRf VlBTSSA1ICAgICAgICAgICAgICAgICAgICAgIC8qIFZBWCBQU0kgKi8KKyNkZWZpbmUgTkVUX1BJ UEUgNiAgICAgICAgICAgICAgICAgICAgICAvKiBMQU4gTWFuYWdlciBOYW1lZCBQaXBlICovCisj ZGVmaW5lIE5FVF9WWDI1IDcgICAgICAgICAgICAgICAgICAgICAgLyogU3RyYXR1cyBWT1MgWC4y NSAqLworI2RlZmluZSBORVRfQklPUyA4ICAgICAgICAgICAgICAgICAgICAgIC8qIElCTSBOZXRC aW9zICovCisjZGVmaW5lIE5FVF9TTEFUIDkgICAgICAgICAgICAgICAgICAgICAgLyogTWVyaWRp YW4gVGVjaG5vbG9naWVzJyBTdXBlckxBVCAqLworI2RlZmluZSBORVRfRklMRSAxMCAgICAgICAg ICAgICAgICAgICAgIC8qIFJlYWQgZnJvbSBhIGZpbGUgKi8KKyNkZWZpbmUgTkVUX0NNRCAgMTEg ICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGZyb20gYSBzdWItcHJvY2VzcyAqLworI2RlZmlu ZSBORVRfRExMICAxMiAgICAgICAgICAgICAgICAgICAgIC8qIExvYWQgYSBETEwgZm9yIHVzZSBh cyBjb21tIGNoYW5uZWwqLworI2RlZmluZSBORVRfSVgyNSAxMyAgICAgICAgICAgICAgICAgICAg IC8qIElCTSBBSVggNC4xIFguMjUgKi8KKyNkZWZpbmUgTkVUX0hYMjUgMTQgICAgICAgICAgICAg ICAgICAgICAvKiBIUC1VWCAxMCBYLjI1ICovCisjZGVmaW5lIE5FVF9QVFkgIDE1ICAgICAgICAg ICAgICAgICAgICAgLyogUHNldWRvdGVybWluYWwgKi8KKyNkZWZpbmUgTkVUX1NTSCAgMTYgICAg ICAgICAgICAgICAgICAgICAvKiBTU0ggKi8KKworI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEluIE9TLzIsIG9ubHkgdGhlIDMyLWJpdCAqLworI2lmbmRlZiBfXzMy QklUX18gICAgICAgICAgICAgICAgICAgICAgIC8qIHZlcnNpb24gZ2V0cyBORVRCSU9TICovCisj aWZkZWYgQ0tfTkVUQklPUworI3VuZGVmIENLX05FVEJJT1MKKyNlbmRpZiAvKiBDS19ORVRCSU9T ICovCisjZW5kaWYgLyogX18zMkJJVF9fICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBf TV9QUEMKKyNpZmRlZiBTVVBFUkxBVAorI3VuZGVmIFNVUEVSTEFUCisjZW5kaWYgLyogU1VQRVJM QVQgKi8KKyNlbmRpZiAvKiBfTV9QUEMgKi8KKworI2lmZGVmIE5QSVBFICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEZvciBpdGVtcyBpbiBjb21tb24gdG8gKi8KKyNkZWZpbmUgTlBJUEVP UkJJT1MgICAgICAgICAgICAgICAgICAgICAvKiBOYW1lZCBQaXBlcyBhbmQgTkVUQklPUyAqLwor I2VuZGlmIC8qIE5QSVBFICovCisjaWZkZWYgQ0tfTkVUQklPUworI2lmbmRlZiBOUElQRU9SQklP UworI2RlZmluZSBOUElQRU9SQklPUworI2VuZGlmIC8qIE5QSVBFT1JCSU9TICovCisjZW5kaWYg LyogQ0tfTkVUQklPUyAqLworCisvKiBOZXR3b3JrIHZpcnR1YWwgdGVybWluYWwgcHJvdG9jb2xz IChmb3IgU0VUIEhPU1QgY29ubmVjdGlvbnMpICovCisvKiBGVFAsIEhUVFAgYW5kIFNTSCBoYXZl IHRoZWlyIG93biBzdGFja3MgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgTlBf REVGQVVMVCAgICAyNTUKKyNkZWZpbmUgTlBfTk9ORSAgICAgICAgIDAgICAgICAgICAgICAgICAv KiBOb25lIChhc3luYykgKi8KKyNkZWZpbmUgTlBfVEVMTkVUICAgICAgIDEgICAgICAgICAgICAg ICAvKiBUQ1AvSVAgdGVsbmV0ICovCisjZGVmaW5lIE5QX1ZUUCAgICAgICAgICAyICAgICAgICAg ICAgICAgLyogSVNPIFZpcnR1YWwgVGVybWluYWwgUHJvdG9jb2wgKi8KKyNkZWZpbmUgTlBfWDMg ICAgICAgICAgIDMgICAgICAgICAgICAgICAvKiBDQ0lUVCBYLjMgKi8KKyNkZWZpbmUgTlBfWDI4 ICAgICAgICAgIDQgICAgICAgICAgICAgICAvKiBDQ0lUVCBYLjI4ICovCisjZGVmaW5lIE5QX1gy OSAgICAgICAgICA1ICAgICAgICAgICAgICAgLyogQ0NJVFQgWC4yOSAqLworI2RlZmluZSBOUF9S TE9HSU4gICAgICAgNiAgICAgICAgICAgICAgIC8qIFRDUC9JUCBSZW1vdGUgbG9naW4gKi8KKyNk ZWZpbmUgTlBfS0VSTUlUICAgICAgIDcgICAgICAgICAgICAgICAvKiBUQ1AvSVAgS2VybWl0ICov CisjZGVmaW5lIE5QX1RDUFJBVyAgICAgICA4ICAgICAgICAgICAgICAgLyogVENQL0lQIFJhdyBz b2NrZXQgKi8KKyNkZWZpbmUgTlBfVENQVU5LICAgICAgIDkgICAgICAgICAgICAgICAvKiBUQ1Av SVAgVW5rbm93biAqLworI2RlZmluZSBOUF9TU0wgICAgICAgICAxMCAgICAgICAgICAgICAgIC8q IFRDUC9JUCBTU0x2MjMgKi8KKyNkZWZpbmUgTlBfVExTICAgICAgICAgMTEgICAgICAgICAgICAg ICAvKiBUQ1AvSVAgVExTdjEgKi8KKyNkZWZpbmUgTlBfU1NMX1RFTE5FVCAgMTIgICAgICAgICAg ICAgICAvKiBUQ1AvSVAgVGVsbmV0IG92ZXIgU1NMdjIzICovCisjZGVmaW5lIE5QX1RMU19URUxO RVQgIDEzICAgICAgICAgICAgICAgLyogVENQL0lQIFRlbG5ldCBvdmVyIFRMU3YxICovCisjZGVm aW5lIE5QX0s0TE9HSU4gICAgIDE0ICAgICAgICAgICAgICAgLyogVENQL0lQIEtlcmJlcml6ZWQg cmVtb3RlIGxvZ2luICovCisjZGVmaW5lIE5QX0VLNExPR0lOICAgIDE1ICAgICAgICAgICAgICAg LyogVENQL0lQIEVuY3J5cHRlZCBLZXJiZXJpemVkIC4uLiAqLworI2RlZmluZSBOUF9LNUxPR0lO ICAgICAxNiAgICAgICAgICAgICAgIC8qIFRDUC9JUCBLZXJiZXJpemVkIHJlbW90ZSBsb2dpbiAq LworI2RlZmluZSBOUF9FSzVMT0dJTiAgICAxNyAgICAgICAgICAgICAgIC8qIFRDUC9JUCBFbmNy eXB0ZWQgS2VyYmVyaXplZCAuLi4gKi8KKyNkZWZpbmUgTlBfSzVVMlUgICAgICAgMTggICAgICAg ICAgICAgICAvKiBUQ1AvSVAgS2VyYmVyb3MgNSBVc2VyIHRvIFVzZXIgKi8KKyNkZWZpbmUgTlBf Q1RFUk0gICAgICAgMTkgICAgICAgICAgICAgICAvKiBERUMgQ1RFUk0gKi8KKyNkZWZpbmUgTlBf TEFUICAgICAgICAgMjAgICAgICAgICAgICAgICAvKiBERUMgTEFUICovCisjZGVmaW5lIE5QX1NT TF9SQVcgICAgIDIxCQkvKiBTU0wgd2l0aCBubyBUZWxuZXQgcGVybWl0dGVkICovCisjZGVmaW5l IE5QX1RMU19SQVcgICAgIDIyCQkvKiBUTFMgd2l0aCBubyBUZWxuZXQgcGVybWl0dGVkICovCisK Ky8qIG90aGVycyBoZXJlLi4uICovCisKKyNpZmRlZiBDS19TU0wKKyNkZWZpbmUgSVNfVEVMTkVU KCkgICAgICAobmV0dHlwZSA9PSBORVRfVENQQiAmJiAodHRucHJvdG8gPT0gTlBfVEVMTkVUIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9TU0xfVEVMTkVUIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9UTFNfVEVMTkVUIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LRVJNSVQpKQorI2Vs c2UgLyogQ0tfU1NMICovCisjZGVmaW5lIElTX1RFTE5FVCgpICAgICAgKG5ldHR5cGUgPT0gTkVU X1RDUEIgJiYgKHR0bnByb3RvID09IE5QX1RFTE5FVCBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgfHwgdHRucHJvdG8gPT0gTlBfS0VSTUlUKSkKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lm ZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNQorI2lmZGVmIEtSQjQKKyNkZWZpbmUgSVNfUkxP R0lOKCkgICAgICAobmV0dHlwZSA9PSBORVRfVENQQiAmJiAodHRucHJvdG8gPT0gTlBfUkxPR0lO IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9LNUxPR0lOIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTiBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfSzRMT0dJTiBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gXAorICAgICAg ICAgICAgICAgICAgICAgICAgICkpCisjZWxzZSAvKiBLUkI0ICovCisjZGVmaW5lIElTX1JMT0dJ TigpICAgICAgKG5ldHR5cGUgPT0gTkVUX1RDUEIgJiYgKHR0bnByb3RvID09IE5QX1JMT0dJTiBc CisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfSzVMT0dJTiBcCisg ICAgICAgICAgICAgICAgICAgICAgICAgfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4gXAorICAg ICAgICAgICAgICAgICAgICAgICAgICkpCisjZW5kaWYgLyogS1JCNCAqLworI2Vsc2UgLyogS1JC NSAqLworI2lmZGVmIEtSQjQKKyNkZWZpbmUgSVNfUkxPR0lOKCkgICAgICAobmV0dHlwZSA9PSBO RVRfVENQQiAmJiAodHRucHJvdG8gPT0gTlBfUkxPR0lOIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICB8fCB0dG5wcm90byA9PSBOUF9LNExPR0lOIFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICB8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTiBcCisgICAgICAgICAgICAgICAgICAgICAgICAg KSkKKyNlbHNlIC8qIEtSQjQgKi8KK0tFUkJFUk9TIGRlZmluZWQgd2l0aG91dCBlaXRoZXIgS1JC NCBvciBLUkI1CisjZW5kaWYgLyogS1JCNCAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbHNlIC8q IENLX0tFUkJFUk9TICovCisjZGVmaW5lIElTX1JMT0dJTigpICAgICAgKG5ldHR5cGUgPT0gTkVU X1RDUEIgJiYgKHR0bnByb3RvID09IE5QX1JMT0dJTikpCisjZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KKworI2RlZmluZSBJU19TU0goKSAgICAgICAgIChuZXR0eXBlID09IE5FVF9TU0gpCisKKy8q IFJMT0dJTiBNb2RlcyAqLworI2RlZmluZSAgICBSTF9SQVcgICAgIDAgICAgICAgICAgICAgICAg IC8qICBEbyBOb3QgUHJvY2VzcyBYT04vWE9GRiAqLworI2RlZmluZSAgICBSTF9DT09LRUQgIDEg ICAgICAgICAgICAgICAgIC8qICBEbyBQcm9jZXNzIFhPTi9YT0ZGICovCisKKy8qIEVuY3J5cHRp b24gdHlwZXMgKi8KKworI2RlZmluZSBDWF9OT05FICAgIDk5OQorCisjaWZkZWYgRU5DVFlQRV9B TlkKKyNkZWZpbmUgQ1hfQVVUTyBFTkNUWVBFX0FOWQorI2Vsc2UKKyNkZWZpbmUgQ1hfQVVUTyAw CisjZW5kaWYgLyogRU5DVFlQRV9BTlkgKi8KKworI2lmZGVmIEVOQ1RZUEVfREVTX0NGQjY0Cisj ZGVmaW5lIENYX0RFU0M2NCBFTkNUWVBFX0RFU19DRkI2NAorI2Vsc2UKKyNkZWZpbmUgQ1hfREVT QzY0IDEKKyNlbmRpZiAvKiBFTkNUWVBFX0RFU19DRkI2NCAqLworCisjaWZkZWYgRU5DVFlQRV9E RVNfT0ZCNjQKKyNkZWZpbmUgQ1hfREVTTzY0IEVOQ1RZUEVfREVTX09GQjY0CisjZWxzZQorI2Rl ZmluZSBDWF9ERVNPNjQgMgorI2VuZGlmIC8qIEVOQ1RZUEVfREVTX09GQjY0ICovCisKKyNpZmRl ZiBFTkNUWVBFX0RFUzNfQ0ZCNjQKKyNkZWZpbmUgQ1hfREVTM0M2NCBFTkNUWVBFX0RFUzNfQ0ZC NjQKKyNlbHNlCisjZGVmaW5lIENYX0RFUzNDNjQgMworI2VuZGlmIC8qIEVOQ1RZUEVfREVTX0NG QjY0ICovCisKKyNpZmRlZiBFTkNUWVBFX0RFUzNfT0ZCNjQKKyNkZWZpbmUgQ1hfREVTTzY0IEVO Q1RZUEVfREVTM19PRkI2NAorI2Vsc2UKKyNkZWZpbmUgQ1hfREVTM082NCA0CisjZW5kaWYgLyog RU5DVFlQRV9ERVNfT0ZCNjQgKi8KKworI2lmZGVmIEVOQ1RZUEVfQ0FTVDVfNDBfQ0ZCNjQKKyNk ZWZpbmUgQ1hfQzU0MEM2NCBFTkNUWVBFX0NBU1Q1XzQwX0NGQjY0CisjZWxzZQorI2RlZmluZSBD WF9DNTQwQzY0IDgKKyNlbmRpZiAvKiBFTkNUWVBFX0NBU1Q1XzQwX0NGQjY0ICovCisKKyNpZmRl ZiBFTkNUWVBFX0NBU1Q1XzQwX09GQjY0CisjZGVmaW5lIENYX0M1NDBPNjQgRU5DVFlQRV9DQVNU NV80MF9PRkI2NAorI2Vsc2UKKyNkZWZpbmUgQ1hfQzU0ME82NCA5CisjZW5kaWYgLyogRU5DVFlQ RV9DQVNUNV80MF9PRkI2NCAqLworCisjaWZkZWYgRU5DVFlQRV9DQVNUMTI4X0NGQjY0CisjZGVm aW5lIENYX0MxMjhDNjQgRU5DVFlQRV9DQVNUMTI4X0NGQjY0CisjZWxzZQorI2RlZmluZSBDWF9D MTI4QzY0IDEwCisjZW5kaWYgLyogRU5DVFlQRV9DQVNUMTI4X0NGQjY0ICovCisKKyNpZmRlZiBF TkNUWVBFX0NBU1QxMjhfT0ZCNjQKKyNkZWZpbmUgQ1hfQzEyOE82NCBFTkNUWVBFX0NBU1QxMjhf T0ZCNjQKKyNlbHNlCisjZGVmaW5lIENYX0MxMjhPNjQgMTEKKyNlbmRpZiAvKiBFTkNUWVBFX0NB U1QxMjhfT0ZCNjQgKi8KKworLyogQmFzaWMgbmV0d29yayBmdW5jdGlvbiBwcm90b3R5cGVzLCBj b21tb24gdG8gYWxsLiAqLworCitfUFJPVE9UWVAoIGludCBuZXRvcGVuLCAoY2hhciAqLCBpbnQg KiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgbmV0Y2xvcywgKHZvaWQpICk7CitfUFJPVE9UWVAo IGludCBuZXRmbHVpLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IG5ldHRjaGssICh2b2lkKSAp OworX1BST1RPVFlQKCBpbnQgbmV0eGNoaywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IG5ldGJy ZWFrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IG5ldGluYywgKGludCkgKTsKK19QUk9UT1RZ UCggaW50IG5ldHhpbiwgKGludCwgQ0hBUiAqKSApOworX1BST1RPVFlQKCBpbnQgbmV0dG9sLCAo Q0hBUiAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBuZXR0b2MsIChDSEFSKSApOworI2lmZGVm IFRDUFNPQ0tFVAorX1BST1RPVFlQKCBpbnQgZ2V0dGNwcG9ydCwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCBnZXR0Y3Bwb3J0LCAodm9pZCkgKTsKKyNlbmRpZgkvKiBUQ1BTT0NLRVQgKi8KKwor LyoKKyAgU3VuTGluayBYLjI1IHN1cHBvcnQgYnkgTWFyY2VsbG8gRnJ1dGlnLCBDYXRob2xpYyBV bml2ZXJzaXR5LAorICBSaW8gZGUgSmFuZWlybywgQnJhemlsLCAxOTkwLgorCisgIE1heWJlIHRo aXMgY2FuIGJlIGFkYXB0ZWQgdG8gVkFYIFBTSSBhbmQgb3RoZXIgWC4yNSBwcm9kdWN0cyB0b28u CisqLworI2lmbmRlZiBTVU5PUzQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgdmFs aWQgZm9yIFNVTk9TNCAqLworI2lmbmRlZiBTT0xBUklTCisjaWZkZWYgU1VOWDI1CisjdW5kZWYg U1VOWDI1CisjZW5kaWYgLyogU1VOWDI1ICovCisjZW5kaWYgLyogU09MQVJJUyAqLworI2VuZGlm IC8qIFNVTk9TNCAqLworCisjaWZkZWYgU1RSQVRVU1gyNQorI2RlZmluZSBBTllYMjUKKyNkZWZp bmUgTUFYX1VTRVJfREFUQSAxMjggLyogU1VOIGRlZmluZXMgdGhpcyBpbiBhIGhlYWRlciBmaWxl LCBJIGJlbGlldmUuICovCisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLworCisjaWZkZWYgU1VOWDI1 CisjZGVmaW5lIEFOWVgyNQorI2VuZGlmIC8qIFNVTlgyNSAqLworCisjaWZkZWYgSUJNWDI1ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQUlYIDQuMSBYLjI1ICovCisjaWZuZGVmIEFJWDQx CisjdW5kZWYgSUJNWDI1CisjZWxzZSAvKiBBSVg0MSAqLworI2RlZmluZSBBTllYMjUKKyNkZWZp bmUgTUFYX1VTRVJfREFUQSBOUElfTUFYX0RBVEEgICAgICAvKiB1c2VkIGZvciBidWZmZXIgc2l6 ZXMgKi8KKyNlbmRpZiAvKiBBSVg0MSAqLworI2VuZGlmIC8qIElCTVgyNSAqLworCisjaWZkZWYg SFBYMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFAtVVggMTAuKiBYLjI1ICovCisj aWZuZGVmIEhQVVgxMAorI3VuZGVmIEhQWDI1CisjZWxzZSAvKiBIUFVYMTAgKi8KKyNkZWZpbmUg QU5ZWDI1CisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyogSFBYMjUgKi8KKworI2lmZGVm IEFOWVgyNQorI2lmbmRlZiBORVRDT05OICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFOWVgy NSBpbXBsaWVzIE5FVENPTk4gKi8KKyNkZWZpbmUgTkVUQ09OTgorI2VuZGlmIC8qIE5FVENPTk4g Ki8KKworI2RlZmluZSBNQVhQQURQQVJNUyAgICAgICAgICAgICAgICAyMiAgIC8qIE51bWJlciBv ZiBQQUQgcGFyYW1ldGVycyAqLworI2RlZmluZSBNQVhDVURBVEEgICAgICAgICAgICAgICAgICAx MiAgIC8qIE1heCBsZW5ndGggb2YgWC4yNSBjYWxsIHVzZXIgZGF0YSAqLworI2RlZmluZSBYMjlQ SUQgICAgICAgICAgICAgICAgICAgICAgMSAgIC8qIFguMjkgcHJvdG9jb2wgSUQgKi8KKyNkZWZp bmUgWDI5UElETEVOICAgICAgICAgICAgICAgICAgIDQgICAvKiBYLjI5IHByb3RvY29sIElEIGxl bmd0aCAqLworCisjZGVmaW5lIFgyOV9TRVRfUEFSTVMgICAgICAgICAgICAgICAyCisjZGVmaW5l IFgyOV9SRUFEX1BBUk1TICAgICAgICAgICAgICA0CisjZGVmaW5lIFgyOV9TRVRfQU5EX1JFQURf UEFSTVMgICAgICA2CisjZGVmaW5lIFgyOV9JTlZJVEFUSU9OX1RPX0NMRUFSICAgICAxCisjZGVm aW5lIFgyOV9QQVJBTUVURVJfSU5ESUNBVElPTiAgICAwCisjZGVmaW5lIFgyOV9JTkRJQ0FUSU9O X09GX0JSRUFLICAgICAzCisjZGVmaW5lIFgyOV9FUlJPUiAgICAgICAgICAgICAgICAgICA1CisK KyNkZWZpbmUgSU5WQUxJRF9QQURfUEFSTSAgICAgICAgICAgIDEKKworI2RlZmluZSBQQURfQlJF QUtfQ0hBUkFDVEVSICAgICAgICAgMAorCisjZGVmaW5lIFBBRF9FU0NBUEUgICAgICAgICAgICAg ICAgICAxCisjZGVmaW5lIFBBRF9FQ0hPICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFBB RF9EQVRBX0ZPUldBUkRfQ0hBUiAgICAgICAzCisjZGVmaW5lIFBBRF9EQVRBX0ZPUldBUkRfVElN RU9VVCAgICA0CisjZGVmaW5lIFBBRF9GTE9XX0NPTlRST0xfQllfUEFEICAgICA1CisjZGVmaW5l IFBBRF9TVVBQUkVTU0lPTl9PRl9TSUdOQUxTICA2CisjZGVmaW5lIFBBRF9CUkVBS19BQ1RJT04g ICAgICAgICAgICA3CisjZGVmaW5lIFBBRF9TVVBQUkVTU0lPTl9PRl9EQVRBICAgICA4CisjZGVm aW5lIFBBRF9QQURESU5HX0FGVEVSX0NSICAgICAgICA5CisjZGVmaW5lIFBBRF9MSU5FX0ZPTERJ TkcgICAgICAgICAgIDEwCisjZGVmaW5lIFBBRF9MSU5FX1NQRUVEICAgICAgICAgICAgIDExCisj ZGVmaW5lIFBBRF9GTE9XX0NPTlRST0xfQllfVVNFUiAgIDEyCisjZGVmaW5lIFBBRF9MRl9BRlRF Ul9DUiAgICAgICAgICAgIDEzCisjZGVmaW5lIFBBRF9QQURESU5HX0FGVEVSX0xGICAgICAgIDE0 CisjZGVmaW5lIFBBRF9FRElUSU5HICAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIFBBRF9DSEFS X0RFTEVURV9DSEFSICAgICAgIDE2CisjZGVmaW5lIFBBRF9CVUZGRVJfREVMRVRFX0NIQVIgICAg IDE3CisjZGVmaW5lIFBBRF9CVUZGRVJfRElTUExBWV9DSEFSICAgIDE4CisKKyNkZWZpbmUgTUFY SVgyNSBNQVhfVVNFUl9EQVRBKjcKKyNkZWZpbmUgTUFYT1gyNSBNQVhfVVNFUl9EQVRBCisjZW5k aWYgLyogQU5ZWDI1ICovCisKKyNpZmRlZiBTVU5YMjUKKyNpZmRlZiBTT0xBUklTMjUgICAgICAg ICAgICAgICAgICAgICAgICAvKiBhbmQgcHJlc3VtYWJseSBTdW5MaW5rIDkueHggKi8KKyNpbmNs dWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL2lvY2NvbS5o PgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNs dWRlIDxzeXMvc29ja2lvLmg+CisjaW5jbHVkZSA8c3VuZGV2L3N5bmNzdGF0Lmg+CisjaW5jbHVk ZSA8bmV0eDI1L3gyNV9way5oPgorI2luY2x1ZGUgPG5ldHgyNS94MjVfY3RsLmg+CisjaW5jbHVk ZSA8bmV0eDI1L3gyNV9pb2N0bC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4gICAg ICAgICAgICAgICAgICAvKiBYLjI1IGluY2x1ZGVzLCBTdW4gb25seSAqLworI2luY2x1ZGUgPHN5 cy9zeXN0bS5oPgorI2lmbmRlZiBTT0xBUklTCisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNlbmRp ZiAvKiBTT0xBUklTICovCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9w cm90b3N3Lmg+CisjaWZkZWYgU09MQVJJUworI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KKyNlbHNl CisjaW5jbHVkZSA8c3lzL2RvbWFpbi5oPgorI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNpbmNsdWRl IDxzeXMvc29ja2V0dmFyLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8c3VuZGV2 L3N5bmNzdGF0Lmg+CisjaW5jbHVkZSA8bmV0eDI1L3gyNV9way5oPgorI2luY2x1ZGUgPG5ldHgy NS94MjVfY3RsLmg+CisjaW5jbHVkZSA8bmV0eDI1L3gyNV9pb2N0bC5oPgorI2VuZGlmIC8qIFNP TEFSSVMyNSAqLworI2VuZGlmIC8qIFNVTlgyNSAqLworCisjaWZkZWYgQU5ZWDI1CisKKyNpZmRl ZiBJQk1YMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYLjI1IGluY2x1ZGVzLCBBSVgg b25seSAqLworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3R3dHlwZXMuaD4KKyNp bmNsdWRlIDxzeXMvdHdsaWIuaD4KKworI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4KKyNpbmNsdWRl IDxzdHJvcHRzLmg+CisKKyNkZWZpbmUgTlBJXzIwICAgICAgICAgICAgICAgICAgICAgICAgICAv KiByZXF1aXJlZCB0byBpbmNsdWRlIHRoZSB3aG9sZSBOUEkgKi8KKyNpbmNsdWRlIDxzeXMvbnBp XzIwLmg+CisjaW5jbHVkZSA8c3lzL25waWFwaS5oPgorI2luY2x1ZGUgPHN5cy9wa3RpbnRmLmg+ CisKKyNpbmNsdWRlIDxvZG1pLmg+ICAgICAgICAgICAgICAgICAgICAgICAvKiByZXF1aXJlZCBm b3IgYWNjZXNzIHRvIHRoZSBPRE0gICAqLworI2luY2x1ZGUgPHN5cy9jZmdvZG0uaD4gICAgICAg ICAgICAgICAgIC8qIGRhdGFiYXNlLCBuZWVkZWQgdG8gZmluZCBvdXQgdGhlICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgTlVBLiBzZWUgeDI1bG9j YWxfbnVhKCkgICAgKi8KKworCisvKiBJQk0gWDI1IE5QSSBnZW5lcmljIHByaW1pdGl2ZSB0eXBl ICovCit0eXBlZGVmIHVuaW9uIE5fbnBpX2N0bF90IHsKKyAgICB1bG9uZyAgICAgICAgICAgICAg IFBSSU1fdHlwZTsgICAgICAgICAgICAgIC8qIGdlbmVyaWMgcHJpbWl0aXZlIHR5cGUgKi8KKyAg ICBjaGFyICAgICAgICAgICAgICAgIGJ1ZmZlcltOUElfTUFYX0NUTF07ICAgIC8qIG1heGltdW0g cHJpbWl0aXZlIHNpemUgKi8KKyAgICBOX2JpbmRfYWNrX3QgICAgICAgIGJpbmRfYWNrOworICAg IE5fYmluZF9yZXFfdCAgICAgICAgYmluZF9yZXE7CisgICAgTl9jb25uX2Nvbl90ICAgICAgICBj b25uX2NvbjsKKyAgICBOX2Nvbm5faW5kX3QgICAgICAgIGNvbm5faW5kOworICAgIE5fY29ubl9y ZXFfdCAgICAgICAgY29ubl9yZXE7CisgICAgTl9jb25uX3Jlc190ICAgICAgICBjb25uX3JlczsK KyAgICBOX2RhdGFfcmVxX3QgICAgICAgIGRhdGFfcmVxOworICAgIE5fZGF0YV9pbmRfdCAgICAg ICAgZGF0YV9pbmQ7CisgICAgTl9kaXNjb25faW5kX3QgICAgICBkaXNjb25faW5kOworICAgIE5f ZGlzY29uX3JlcV90ICAgICAgZGlzY29uX3JlcTsKKyAgICBOX2Vycm9yX2Fja190ICAgICAgIGVy cm9yX2FjazsKKyAgICBOX2V4ZGF0YV9pbmRfdCAgICAgIGV4ZGF0YV9pbmQ7CisgICAgTl9pbmZv X2Fja190ICAgICAgICBpbmZvX2FjazsKKyAgICBOX29rX2Fja190ICAgICAgICAgIG9rX2FjazsK KyAgICBOX3Jlc2V0X2Nvbl90ICAgICAgIHJlc2V0X2NvbjsKKyAgICBOX3Jlc2V0X3JlcV90ICAg ICAgIHJlc2V0X3JlcTsKKyAgICBOX3Jlc2V0X2luZF90ICAgICAgIHJlc2V0X2luZDsKK30gTl9u cGlfY3RsX3Q7CisKKy8qIHNvbWUgZXh0cmEgZGVmaW5pdGlvbnMgdG8gaGVscCBvdXQgKi8KK3R5 cGVkZWYgY2hhciAgICB4MjVhZGRyX3RbNDVdOyAgICAgICAgICAvKiBtYXggNDAgZGVmaW5lZCBi eSBDQ0lUVCAqLwordHlwZWRlZiBjaGFyICAgIE5fbnBpX2RhdGFfdFtOUElfTUFYX0RBVEFdOwor CisvKiBmZCBvciBzZXJ2ZXIgd2FpdGluZyBmb3IgY29ubmVjdGlvbnMsIHVzZWQgYnkgbmV0Y2xv cyBhbmQgbmV0b3BlbiAqLworZXh0ZXJuIGludCB4MjVzZXJ2ZXJmZDsKKworI2VuZGlmIC8qIElC TVgyNSAqLworCisjaWZkZWYgSFBYMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWC4y NSBpbmNsdWRlcywgSFAtVVggb25seSAqLworI2luY2x1ZGUgPHgyNS9jY2l0dHByb3RvLmg+Cisj aW5jbHVkZSA8eDI1L3gyNS5oPgorI2luY2x1ZGUgPHgyNS94MjVhZGRyc3RyLmg+CisjaW5jbHVk ZSA8eDI1L3gyNWNvZGVzLmg+CisjaW5jbHVkZSA8eDI1L3gyNWhkX2lvY3RsLmg+CisjaW5jbHVk ZSA8eDI1L3gyNWlvY3Rscy5oPgorI2luY2x1ZGUgPHgyNS94MjVzdHIuaD4KKyNpbmNsdWRlIDxz eXMvaW9jdGwuaD4KKyNlbmRpZiAvKiBIUFgyNSAqLworCisvKiBDLUtlcm1pdCBYLjMgLyBYLjI1 IC8gWC4yOSAvIFguMTIxIHN1cHBvcnQgZnVuY3Rpb25zICovCisKKy8qIChyaWVobTogdGhpcyBs aXN0IG9mIGZ1bmN0aW9ucyBpc24ndCBxdWl0ZSByaWdodCBmb3IgQUlYKSAqLworCitfUFJPVE9U WVAoIGludCBzaG9wYWQsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBzaG94MjUsIChpbnQpICk7 CitfUFJPVE9UWVAoIFZPSUQgaW5pdHBhZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgc2V0 cGFkLCAoQ0hBUiAqLCBpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgcmVhZHBhZCwgKENIQVIgKiwg aW50LCBDSEFSICopICk7CitfUFJPVE9UWVAoIGludCBxYml0cGt0LCAoQ0hBUiAqLCBpbnQpICk7 CitfUFJPVE9UWVAoIFZPSUQgc2V0cWJpdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgcmVz ZXRxYml0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBicmVha2FjdCwgKHZvaWQpICk7Citf UFJPVE9UWVAoIGludCBwa3gxMjEsIChjaGFyICosIENIQVIgKikgKTsKK19QUk9UT1RZUCggU0lH VFlQIHgyNW9vYmgsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCB4MjVkaWFnLCAodm9pZCkgKTsK K19QUk9UT1RZUCggaW50IHgyNWludHIsIChjaGFyKSApOworX1BST1RPVFlQKCBpbnQgeDI1cmVz ZXQsIChjaGFyLCBjaGFyKSApOworX1BST1RPVFlQKCBpbnQgeDI1Y2xlYXIsICh2b2lkKSApOwor X1BST1RPVFlQKCBpbnQgeDI1c3RhdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCB4MjVpbiwg KGludCwgQ0hBUiAqKSApOworX1BST1RPVFlQKCBpbnQgc2V0cGFkcCwgKHZvaWQpICk7CitfUFJP VE9UWVAoIGludCBzZXR4MjUsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgeDI1eGluLCAoaW50 LCBDSEFSICopICk7CitfUFJPVE9UWVAoIGludCB4MjVpbmwsIChDSEFSICosIGludCwgaW50LCBD SEFSKSApOworCisjaWZkZWYgSUJNWDI1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogc2V0dXAgeDI1ICovCitfUFJPVE9UWVAoIHVsb25nIHgyNWJpbmQsIChpbnQs IGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCwgaW50LCB1bG9uZykgKTsKK19QUk9UT1RZUCggaW50 IHgyNWNhbGwsIChpbnQsIGNoYXIgKiwgY2hhciAqKSApOyAvKiBjb25uZWN0IHRvIHJlbW90ZSAq LworX1BST1RPVFlQKCBpbnQgeDI1dW5iaW5kLCAoaW50KSApOyAgICAgIC8qIGRpc2Nvbm5lY3Qg Ki8KK19QUk9UT1RZUCggY2hhciAqeDI1cHJpbSwgKGludCkgKTsgICAgICAvKiBkaXNwbGF5IHBy aW1pdGl2ZXMgKi8KK19QUk9UT1RZUCggaW50IHgyNWxvY2FsX251YSwgKGNoYXIgKikgKTsgLyog ZmluZCBsb2NhbCBOVUEgKi8KKyNlbmRpZiAvKiBJQk1YMjUgKi8KKworI2VuZGlmIC8qIEFOWVgy NSAqLworCisvKiBDTVUtT3BlblZNUy9JUCAqLworCisjaWZkZWYgQ01VX1RDUElQICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ01VX1RDUElQIGltcGxpZXMgVENQU09DS0VUICovCisjaWZuZGVm IFRDUFNPQ0tFVAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNp Zm5kZWYgVENQSVBMSUIKKyNkZWZpbmUgVENQSVBMSUIKKyNlbmRpZiAvKiBUQ1BJUExJQiAqLwor I2VuZGlmIC8qIENNVV9UQ1BJUCAqLworCisvKiBERUMgVENQL0lQIGZvciAoT3BlbilWTVMsIHBy ZXZpb3VzbHkga25vd24gYXMgVUNYICovCisKKyNpZmRlZiBERUNfVENQSVAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBERUNfVENQSVAgaW1wbGllcyBUQ1BTT0NLRVQgKi8KKyNpZm5kZWYgVENQ U09DS0VUCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmbmRl ZiBUQ1BJUExJQgorI2RlZmluZSBUQ1BJUExJQgorI2VuZGlmIC8qIFRDUElQTElCICovCisjZW5k aWYgLyogREVDX1RDUElQICovCisKKy8qIFNSSS9UR1YvQ2lzY28vUHJvY2VzcyBNdWx0aU5ldCwg VENQL0lQIGZvciBWQVgvVk1TICovCisKKyNpZmRlZiBNVUxUSU5FVCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBNVUxUSU5FVCBpbXBsaWVzIFRDUFNPQ0tFVCAqLworI2lmbmRlZiBUQ1BTT0NL RVQKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZuZGVmIFRD UElQTElCCisjZGVmaW5lIFRDUElQTElCCisjZW5kaWYgLyogVENQSVBMSUIgKi8KKyNpZm5kZWYg VEdWT1JXSU4gICAgICAgICAgICAgICAgICAgICAgICAvKiBNVUxUSU5FVCBhbmQgV0lOVENQICov CisjZGVmaW5lIFRHVk9SV0lOICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hhcmUgYSBsb3Qg b2YgY29kZS4uLiAqLworI2VuZGlmIC8qIFRHVk9SV0lOICovCisjZW5kaWYgLyogTVVMVElORVQg Ki8KKworLyogV29sbG9uZ29uZyBUQ1AvSVAgZm9yIFZBWC9WTVMgKi8KKworI2lmZGVmIFdJTlRD UCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTlRDUCBpbXBsaWVzIFRDUFNPQ0tFVCAq LworI2lmbmRlZiBUQ1BTT0NLRVQKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogVENQU09D S0VUICovCisjaWZuZGVmIFRDUElQTElCCisjZGVmaW5lIFRDUElQTElCCisjZW5kaWYgLyogVENQ SVBMSUIgKi8KKyNpZm5kZWYgVEdWT1JXSU4gICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU5U Q1AgYW5kIE1VTFRJTkVUICovCisjZGVmaW5lIFRHVk9SV0lOICAgICAgICAgICAgICAgICAgICAg ICAgLyogc2hhcmUgYSBsb3Qgb2YgY29kZS4uLiAqLworI2VuZGlmIC8qIFRHVk9SV0lOICovCisj ZW5kaWYgLyogV0lOVENQICovCisKKy8qIFdvbGxvbmdvbmcgVENQL0lQIGZvciBBVCZUIFN5cyBW ICovCisKKyNpZmRlZiBXT0xMT05HT05HICAgICAgICAgICAgICAgICAgICAgICAvKiBXT0xMT05H T05HIGltcGxpZXMgVENQU09DS0VUICovCisjaWZuZGVmIFRDUFNPQ0tFVCAgICAgICAgICAgICAg ICAgICAgICAgLyogRG9uJ3QgY29uZnVzZSBXT0xMT05HT05HICovCisjZGVmaW5lIFRDUFNPQ0tF VCAgICAgICAgICAgICAgICAgICAgICAgLyogKHdoaWNoIGlzIGZvciBVTklYKSB3aXRoICovCisj ZW5kaWYgLyogVENQU09DS0VUICovICAgICAgICAgICAgICAgICAgLyogV0lOVENQLCB3aGljaCBp cyBmb3IgVk1TISAqLworI2VuZGlmIC8qIFdPTExPTkdPTkcgKi8KKworI2lmZGVmIEVYQ0VMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQ0VMQU4gaW1wbGllcyBUQ1BTT0NLRVQgKi8K KyNpZm5kZWYgVENQU09DS0VUCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworI2VuZGlmIC8qIEVYQ0VMQU4gKi8KKworI2lmZGVmIElOVEVSTEFOICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElOVEVSTEFOIGltcGxpZXMgVENQU09DS0VUICovCisjaWZuZGVmIFRD UFNPQ0tFVAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRp ZiAvKiBJTlRFUkxBTiAqLworCisjaWZkZWYgQkVCT1gKKyNpZm5kZWYgVENQU09DS0VUCisjZGVm aW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmbmRlZiBUQ1BJUExJQgor I2RlZmluZSBUQ1BJUExJQgorI2VuZGlmIC8qIFRDUElQTElCICovCisjZGVmaW5lIHNvY2tldF9l cnJubyAgICBoX2Vycm5vCisjZGVmaW5lIHNvY2tldF9yZWFkKHgseSx6KSAgICAgIHJlY3YoeCx5 LHNpemVvZihjaGFyKSx6KQorI2RlZmluZSBzb2NrZXRfd3JpdGUoeCx5LHopICAgICBzZW5kKHgs eSxzaXplb2YoY2hhcikseikKKyNkZWZpbmUgc29ja2V0X2lvY3RsICAgIGlvY3RsCisjZGVmaW5l IHNvY2tldF9jbG9zZSh4KSAgICAgICAgIGNsb3Nlc29ja2V0KHgpCisjaWZuZGVmIEZJT05CSU8K KyNkZWZpbmUgRklPTkJJTyAyCisjZW5kaWYgLyogRklPTkJJTyAqLworI2lmbmRlZiBGSU9OUkVB RAorI2RlZmluZSBGSU9OUkVBRCAgICAgICAxCisjZW5kaWYgLyogRklPTlJFQUQgKi8KKyNpZm5k ZWYgU0lPQ0FUTUFSSworI2RlZmluZSBTSU9DQVRNQVJLICAgICAzCisjZW5kaWYgLyogU0lPQ0FU TUFSSyAqLworI2VuZGlmIC8qIEJFQk9YICovCisKKyNpZmRlZiBDT01NRU5UIC8qIG5vIGxvbmdl ciB1c2VkIGJ1dCBtaWdodCBjb21lIGluIGhhbmR5IGFnYWluIGxhdGVyLi4uICovCisvKgorICBD S19SRUFEMCBjYW4gKGFuZCBzaG91bGQpIGJlIGRlZmluZWQgaWYgYW5kIG9ubHkgaWY6CisgIChh KSByZWFkKGZkLCZ4LDApIGNhbiBiZSB1c2VkIGhhcm1sZXNzbHkgb24gYSBUQ1AvSVAgc29ja2V0 IGNvbm5lY3Rpb24uCisgIChiKSByZWFkKGZkLCZ4LDApIHJldHVybnMgMCBpZiB0aGUgY29ubmVj dGlvbiBpcyB1cCwgLTEgaWYgaXQgaXMgZG93bi4KKyovCisjaWZuZGVmIENLX1JFQUQwCisjaWZk ZWYgVENQU09DS0VUCisjaWZkZWYgU1VOT1M0MSAgICAgICAgICAgICAgICAgICAgICAgICAgLyog SXQgd29ya3MgaW4gU3VuT1MgNC4xICovCisjZGVmaW5lIENLX1JFQUQwCisjZWxzZQorI2lmZGVm IE5FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBOZVhUU1RFUCAqLworI2Rl ZmluZSBDS19SRUFEMAorI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBTVU5PUzQxICovCisj ZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogQ0tfUkVBRDAgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKy8qIFRlbG5ldCBwcm90b2NvbCAqLworCisjaWZkZWYgVENQU09DS0VUICAg ICAgICAgICAgICAgICAgICAgICAgLyogVENQU09DS0VUIGltcGxpZXMgVE5DT0RFICovCisjaWZu ZGVmIFROQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2hpY2ggbWVhbnMuLi4gKi8K KyNkZWZpbmUgVE5DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21waWxlIGluIHRl bG5ldCBjb2RlICovCisjZW5kaWYgLyogVE5DT0RFICovCisKKy8qCisgICBQbGF0Zm9ybXMgd2hl cmUgd2UgbXVzdCBjYWxsIGdldGhvc3RuYW1lKGJ1ZixsZW4pIGFuZCB0aGVuCisgICBnZXRob3N0 YnluYW1lKGJ1ZikgdG8gZ2V0IGxvY2FsIElQIGFkZHJlc3MsIHJhdGhlciB0aGFuIGNhbGxpbmcK KyAgIGdldGhvc3RieW5hbWUoIiIpLgorKi8KKyNpZm5kZWYgQ0tHSE5MSE9TVAorI2lmZGVmIGRh dGFnZW5lcmFsCisjZGVmaW5lIENLR0hOTEhPU1QKKyNlbHNlCisjaWZkZWYgU09MQVJJUworI2Rl ZmluZSBDS0dITkxIT1NUCisjZWxzZQorI2lmZGVmIFNVTk9TNAorI2RlZmluZSBDS0dITkxIT1NU CisjZWxzZQorI2lmZGVmIFVOSVhXQVJFCisjZGVmaW5lIENLR0hOTEhPU1QKKyNlbHNlCisjaWZk ZWYgU0lOSVgKKyNkZWZpbmUgQ0tHSE5MSE9TVAorI2VuZGlmIC8qIFNJTklYICovCisjZW5kaWYg LyogVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBTT0xBUklTICov CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBDS0dITkxIT1NUICovCisKKyNp Zm5kZWYgUkxPR0NPREUgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGF0IGFib3V0IFJsb2dp bj8gKi8KKyNpZm5kZWYgTk9STE9HSU4KKy8qCisgIFJsb2dpbiBjYW4gYmUgZW5hYmxlZCBvbmx5 IGZvciBVTklYIHZlcnNpb25zIHRoYXQgaGF2ZSBib3RoIFNJR1VSRworICAoU0NPIGRvZXNuJ3Qp IGFuZCBDS19UVEdXU0laIChPU0YvMSBkb2Vzbid0KSwgc28gd2UgZG9uJ3QgYXNzdW1lIHRoYXQK KyAgYW55IG90aGVycyBoYXZlIHRoZXNlIHdpdGhvdXQgdmVyaWZ5aW5nIGZpcnN0LiAgTm90IHRo YXQgaXQgcmVhbGx5IG1ha2VzCisgIG11Y2ggZGlmZmVyZW5jZSBzaW5jZSB5b3UgY2FuIG9ubHkg dXNlIFJsb2dpbiBpZiB5b3UgYXJlIHJvb3QuLi4KKyovCisjaWZkZWYgU1VOT1M0MQorI2RlZmlu ZSBSTE9HQ09ERQorI2Vsc2UKKyNpZmRlZiBTT0xBUklTCisjZGVmaW5lIFJMT0dDT0RFCisjZWxz ZQorI2lmZGVmIEhQVVg5CisjZGVmaW5lIFJMT0dDT0RFCisjZWxzZQorI2lmZGVmIEhQVVgxMAor I2RlZmluZSBSTE9HQ09ERQorI2Vsc2UKKyNpZmRlZiBPU0Y0MAorI2RlZmluZSBSTE9HQ09ERQor I2Vsc2UKKyNpZmRlZiBORVhUCisjZGVmaW5lIFJMT0dDT0RFCisjZWxzZQorI2lmZGVmIEFJWDQx CisjZGVmaW5lIFJMT0dDT0RFCisjZWxzZQorI2lmZGVmIFVOSVhXQVJFCisjZGVmaW5lIFJMT0dD T0RFCisjZWxzZQorI2lmZGVmIElSSVg1MQorI2RlZmluZSBSTE9HQ09ERQorI2Vsc2UKKyNpZmRl ZiBJUklYNjAKKyNkZWZpbmUgUkxPR0NPREUKKyNlbHNlCisjaWZkZWYgUU5YCisjZGVmaW5lIFJM T0dDT0RFCisjZWxzZQorI2lmZGVmIF9fbGludXhfXworI2RlZmluZSBSTE9HQ09ERQorI2Vsc2UK KyNpZmRlZiBCU0Q0NAorI2RlZmluZSBSTE9HQ09ERQorI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5k aWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogSVJJWDYwICov CisjZW5kaWYgLyogSVJJWDUxICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBB SVg0MSAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBPU0Y0MCAqLworI2VuZGlmIC8q IEhQVVgxMCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5kaWYgLyogU09MQVJJUyAqLworI2Vu ZGlmIC8qIFNVTk9TNDEgKi8KKyNlbmRpZiAvKiBOT1JMT0dJTiAqLworI2lmZGVmIFZNUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZNUyAqLworI2RlZmluZSBSTE9HQ09ERQorI2Vu ZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogVENQU09DS0VU ICovCisKKyNpZmRlZiBUTkNPREUKKy8qCisgIFRlbG5ldCBsb2NhbC1lY2hvIGJ1ZmZlciwgdXNl ZCBmb3Igc2F2aW5nIHVwIHVzZXIgZGF0YSB0aGF0IGNhbid0IGJlCisgIHByb3Blcmx5IGRpc3Bs YXllZCBhbmQvb3IgZXZhbHVhdGVkIHVudGlsIHBlbmRpbmcgVGVsbmV0IG5lZ290aWF0aW9ucyBh cmUKKyAgY29tcGxldGUuICBUVExFQlVGIGlzIGRlZmluZWQgZm9yIHBsYXRmb3JtcyAobGlrZSBV TklYKSB3aGVyZSBuZXQgaS9vIGlzCisgIGRvbmUgYnkgdGhlIHNhbWUgcm91dGluZXMgdGhhdCBk byBzZXJpYWwgaS9vIChpbiB3aGljaCBjYXNlIHRoZSByZWxldmFudAorICBjb2RlIGdvZXMgaW50 byB0aGUgY2s/dGlvLmMgbW9kdWxlLCBpbiB0aGUgdHRpbmMoKSwgdHRjaGsoKSwgZXRjLCByb3V0 aW5lcyk7CisgIE5FVExFVEJVRiBpcyBkZWZpbmVkIGZvciBwbGF0Zm9ybXMgKGxpa2UgVk1TKSB0 aGF0IHVzZSBkaWZmZXJlbnQgQVBJcyBmb3IKKyAgbmV0d29yayBhbmQgc2VyaWFsIGkvbywgYW5k IGVuYWJsZXMgdGhlIGNvcGllcyBvZiB0aGUgc2FtZSByb3V0aW5lcyB0aGF0CisgIGFyZSBpbiBj a2NuZXQuYy4KKyovCisjaWZuZGVmIFRUTEVCVUYKKyNpZmRlZiBVTklYCisjZGVmaW5lIFRUTEVC VUYKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNkZWZpbmUgVFRMRUJVRgorI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIFRUTEVCVUYgKi8K KworI2lmbmRlZiBORVRMRUJVRgorI2lmZGVmIFZNUworI2RlZmluZSBORVRMRUJVRgorI2VuZGlm IC8qIFZNUyAqLworI2VuZGlmIC8qIE5FVExFQlVGICovCisjZW5kaWYgLyogVE5DT0RFICovCisK KyNpZmRlZiBTVU5YMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTVU5YMjUgaW1wbGll cyBUQ1BTT0NLRVQgKi8KKyNpZm5kZWYgVENQU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAv KiBCdXQgZG9lc24ndCBpbXBseSBUTkNPREUgKi8KKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYg LyogVENQU09DS0VUICovCisjZW5kaWYgLyogU1VOWDI1ICovCisKKyNpZm5kZWYgVENQU09DS0VU CisjaWZuZGVmIE5PX0ROU19TUlYKKyNkZWZpbmUgTk9fRE5TX1NSVgorI2VuZGlmIC8qIE5PX0RO U19TUlYgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworLyogVGhpcyBpcyBhbm90aGVyIFRD UFNPQ0tFVCBzZWN0aW9uLi4uICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTkVUQ09O TiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1BTT0NLRVQgaW1wbGllcyBORVRDT05OICov CisjZGVmaW5lIE5FVENPTk4KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZm5kZWYgTk9fRE5T X1NSVgorI2lmZGVmIE5PTE9DQUwKKyNkZWZpbmUgTk9fRE5TX1NSVgorI2VuZGlmIC8qIE5PTE9D QUwgKi8KKyNpZmRlZiBPUzJPTkxZCisjZGVmaW5lIE5PX0ROU19TUlYKKyNlbmRpZiAvKiBPUzJP TkxZICovCisjaWZkZWYgTlQKKyNpZmRlZiBfTV9QUEMKKyNkZWZpbmUgTk9fRE5TX1NSVgorI2Vu ZGlmIC8qIF9NX0ROUyAqLworI2VuZGlmIC8qIE5PX0ROU19TUlYgKi8KKyNpZmRlZiBWTVMKKyNk ZWZpbmUgTk9fRE5TX1NSVgorI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIFNUUkFUVVMKKyNkZWZp bmUgTk9fRE5TX1NSVgorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAor I2RlZmluZSBOT19ETlNfU1JWCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiB1bHRy aXgKKyNkZWZpbmUgTk9fRE5TX1NSVgorI2VuZGlmIC8qIHVsdHJpeCAqLworI2lmZGVmIE5FWFQK KyNkZWZpbmUgTk9fRE5TX1NSVgorI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBOT19ETlNf U1JWICovCisKKyNpZm5kZWYgQ0tfRE5TX1NSViAgICAgICAgICAgICAgICAgICAgICAvKiBVc2Ug RE5TIFNSViByZWNvcmRzIHRvIGRldGVybWluZSAqLworI2lmbmRlZiBOT19ETlNfU1JWICAgICAg ICAgICAgICAgICAgICAgIC8qIGhvc3QgYW5kIHBvcnRzICovCisjZGVmaW5lIENLX0ROU19TUlYK KyNlbmRpZiAvKiBOT19ETlNfU1JWICovCisjZW5kaWYgLyogQ0tfRE5TX1NSViAqLworCisjaWZu ZGVmIE5PTElTVEVOICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VsZWN0KCkgaXMgcmVxdWly ZWQgdG8gc3VwcG9ydCAqLworI2lmbmRlZiBTRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGluY29taW5nIGNvbm5lY3Rpb25zLiAqLworI2lmbmRlZiBWTVMKKyNpZm5kZWYgT1MyCisj ZGVmaW5lIE5PTElTVEVOCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisjZW5k aWYgLyogU0VMRUNUICovCisjZW5kaWYgLyogTk9MSVNURU4gKi8KKworLyogQlNEIHNvY2tldHMg bGlicmFyeSBoZWFkZXIgZmlsZXMgKi8KKworI2lmZGVmIFZNUworLyoKKyAgQmVjYXVzZSBiemVy bygpIGFuZCBiY29weSgpIGFyZSBub3QgcG9ydGFibGUgYW1vbmcgVk1TIHZlcnNpb25zLAorICBv ciBjb21waWxlcnMsIG9yIFRDUC9JUCBwcm9kdWN0cywgZXRjLgorKi8KKyNpZm5kZWYgYnplcm8K KyNkZWZpbmUgYnplcm8ocyxuKSBtZW1zZXQocywwLG4pCisjZW5kaWYgLyogYnplcm8gKi8KKyNp Zm5kZWYgYmNvcHkKKyNkZWZpbmUgYmNvcHkoaCxhLGwpIG1lbWNweShhLGgsbCkKKyNlbmRpZiAv KiBiY29weSAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgSFBVWDYKKy8qIFRoZXNlIGFy ZSBtaXNzaW5nIGluIEhQLVVYIDYueHggKi8KKyNpZm5kZWYgYnplcm8KKyNkZWZpbmUgYnplcm8o cyxuKSBtZW1zZXQocywwLG4pCisjZW5kaWYgLyogYnplcm8gKi8KKyNpZm5kZWYgYmNvcHkKKyNk ZWZpbmUgYmNvcHkoaCxhLGwpIG1lbWNweShhLGgsbCkKKyNlbmRpZiAvKiBiY29weSAqLworI2Vu ZGlmIC8qIEhQVVg2ICovCisKKyNpZmRlZiBVTklYICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBVTklYIHNlY3Rpb24gKi8KKworI2lmZGVmIFNWUjQKKy8qCisgIFRoZXNlIHN1Z2dlc3Rl ZCBieSBSb2IgSGVhbGV5LCByaGVhbGV5QGthcy5oZWxpb3MubW4ub3JnLCB0byBhdm9pZAorICBi dWdzIGluIEJlcmtlbGV5IGNvbXBhdGliaWxpdHkgbGlicmFyeSBvbiBTeXMgViBSNCBzeXN0ZW1z LCBidXQgdW50ZXN0ZWQKKyAgYnkgbWUgKGZkYykuICBSZW1vdmUgdGhpcyBiaXQgaWYgaXQgZ2l2 ZXMgeW91IHRyb3VibGUuCisgIChMYXRlciBjb3JyZWN0ZWQgYnkgTWFyYyBCb3VjaGVyIDxtYm91 Y2hlckBpcm8udW1vbnRyZWFsLmNhPiBiZWNhdXNlCisgIGJ6ZXJvL2Jjb3B5IGFyZSBub3QgYXJn dW1lbnQtY29tcGF0aWJsZSB3aXRoIG1lbXNldC9tZW1jcHl8bWVtbW92ZS4pCisqLworI2lmbmRl ZiBiemVybworI2RlZmluZSBiemVybyhzLG4pIG1lbXNldChzLDAsbikKKyNlbmRpZgorI2lmZGVm IFNPTEFSSVMKKyNpZmRlZiBTVU5YMjUKKyN1bmRlZiBiemVybworLyoKKyAgV09VTEQgWU9VIEJF TElFVkUuLi4gVGhhdCB0aGUgU29sYXJpcyBYLjI1IC9vcHQvU1VOV2NvbW0vbGliL2xpYnNvY2t4 MjUKKyAgbGlicmFyeSByZWZlcmVuY2VzIGJ6ZXJvLCBldmVuIHRob3VnaCB0aGUgdXNlIG9mIGJ6 ZXJvIGlzIGZvcmJpZGRlbiBpbgorICBTb2xhcmlzPyAgTG9vayBmb3IgdGhlIGZ1bmN0aW9uIGRl ZmluaXRpb24gaW4gY2tjbmV0LmMuCisqLworX1BST1RPVFlQKCB2b2lkIGJ6ZXJvLCAoY2hhciAq LCBpbnQpICk7CisjZW5kaWYgLyogU1VOWDI1ICovCisjaWZuZGVmIGJjb3B5CisjZGVmaW5lIGJj b3B5KGgsYSxsKSBtZW1jcHkoYSxoLGwpCisjZW5kaWYKKyNlbHNlCisjaWZuZGVmIGJjb3B5Cisj ZGVmaW5lIGJjb3B5KGgsYSxsKSBtZW1tb3ZlKGEsaCxsKQorI2VuZGlmCisjZW5kaWYgLyogU09M QVJJUyAqLworI2Vsc2UgLyogIVNWUjQgKi8KKyNpZmRlZiBQVFggICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXF1ZW50IERZTklYIFBUWCAxLjMgKi8KKyNpZm5kZWYgYnplcm8KKyNk ZWZpbmUgYnplcm8ocyxuKSBtZW1zZXQocywwLG4pCisjZW5kaWYKKyNpZm5kZWYgYmNvcHkKKyNk ZWZpbmUgYmNvcHkoaCxhLGwpIG1lbWNweShhLGgsbCkKKyNlbmRpZgorI2VuZGlmIC8qIFBUWCAq LworI2VuZGlmIC8qIFNWUjQgKi8KKworI2lmZGVmIElOVEVSTEFOICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJhY2FsLUludGVybGFuIFRDUC9JUCAqLworI2luY2x1ZGUgPGludGVybGFuL3Nv Y2tldC5oPgorI2luY2x1ZGUgPGludGVybGFuL2lsX3R5cGVzLmg+CisjaW5jbHVkZSA8aW50ZXJs YW4vdGVsbmV0Lmg+CisjaW5jbHVkZSA8aW50ZXJsYW4vaWxfZXJybm8uaD4KKyNpbmNsdWRlIDxp bnRlcmxhbi9pbi5oPgorI2luY2x1ZGUgPGludGVybGFuL3RlbG5ldC5oPiAgICAgICAgICAgIC8q IFdoeSB0d2ljZSA/ID8gPyAqLworI2Vsc2UgLyogTm90IEludGVybGFuICovCisjaWZkZWYgQkVC T1gKKyNpbmNsdWRlIDxzb2NrZXQuaD4KKyNlbHNlIC8qIE5vdCBCRUJPWCAqLyAgICAgICAgICAg ICAgICAgICAvKiBOb3JtYWwgQlNEIFRDUC9JUCBsaWJyYXJ5ICovCisjaWZkZWYgQ09NTUVOVAor I2lmbmRlZiBIUFVYCisjaW5jbHVkZSA8YXJwYS90ZWxuZXQuaD4KKyNlbmRpZiAvKiBIUFVYICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIFNDTzIzNAorI2luY2x1ZGUgPHN5cy9lcnJu by50Y3AuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMudGNwLmg+CisjZW5kaWYgLyogU0NPMjM0ICov CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lmZGVmIFdPTExPTkdPTkcKKyNpbmNsdWRlIDxz eXMvaW4uaD4KKyNlbHNlCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lmbmRlZiBTVjY4UjNW NiAgICAgICAgICAgICAgICAvKiAobWF5YmUgdGhpcyBzaG91bGQgYmUgU1ZSMyBpbiBnZW5lcmFs KSAqLworI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+ICAgICAgICAvKiBBZGRlZCBKdW5lIDIwMDEg Ki8KKyNlbmRpZiAvKiBTVjY4UjNWNiAqLworI2VuZGlmIC8qIFdPTExPTkdPTkcgKi8KKyNlbmRp ZiAvKiBCRUJPWCAqLworI2VuZGlmIC8qIElOVEVSTEFOICovCisKKyNpZm5kZWYgRVhDRUxBTgor I2luY2x1ZGUgPG5ldGRiLmg+CisjaWZuZGVmIElOVEVSTEFOCisjaWZkZWYgV09MTE9OR09ORwor I2RlZmluZSBtaW5vciAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBpbmNsdWRl IDxzeXMvbWFjcm9zLmg+ICovCisjaW5jbHVkZSA8c3lzL2luZXQuaD4KKyNlbHNlCisjaWZuZGVm IE9YT1MKKyNpZm5kZWYgSFBVWAorI2lmbmRlZiBCRUJPWAorI2luY2x1ZGUgPGFycGEvaW5ldC5o PgorI2VuZGlmIC8qIEJFQk9YICovCisjZW5kaWYgLyogSFBVWCAqLworI2Vsc2UgLyogT1hPUyAq LworLyogSW4gdG9vIG1hbnkgcmVsZWFzZXMgb2YgWC9PUywgPGFycGEvaW5ldC5oPiBkZWNsYXJl cyBpbmV0X2FkZHIoKSBhcworICogYGBzdHJ1Y3QgaW5fYWRkcicnLiAgVGhpcyBpcyBkZWZpbml0 aXZlbHkgd3JvbmcsIGFuZCBjb3VsZCBjYXVzZQorICogY29yZSBkdW1wcy4gIEluc3RlYWQgb2Yg aW5jbHVkaW5nIHRoYXQgYmFkIGZpbGUsIGluZXRfYWRkcigpIGlzCisgKiBjb3JyZWN0bHkgZGVj bGFyZWQgaGVyZS4gIE9mIGNvdXJzZSwgYWxsIHRoZSBkZWNsYXJhdGlvbnMgZG9uZSB0aGVyZQor ICogaGFzIGJlZW4gY29waWVkIGhlcmUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgaW5ldF9hZGRyKCk7 CitjaGFyICAgICppbmV0X250b2EoKTsKK3N0cnVjdCAgaW5fYWRkciBpbmV0X21ha2VhZGRyKCk7 Cit1bnNpZ25lZCBsb25nIGluZXRfbmV0d29yaygpOworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRp ZiAvKiBXT0xMT05HT05HICovCisjZW5kaWYgLyogSU5URVJMQU4gKi8KKyNlbmRpZiAvKiBFWENF TEFOICovCisKKyNpZmRlZiBFWENFTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGNl bGFuIFRDUC9JUCAqLworI2lmbmRlZiBiemVybworI2RlZmluZSBiemVybyhzLG4pIG1lbXNldChz LDAsbikKKyNlbmRpZiAvKiBiemVybyAqLworI2lmbmRlZiBiY29weQorI2RlZmluZSBiY29weSho LGEsbCkgbWVtY3B5KGEsaCxsKQorI2VuZGlmIC8qIGJjb3B5ICovCisjaW5jbHVkZSA8ZXhfZXJy bm8uaD4KKyNlbmRpZiAvKiBFWENFTEFOICovCisKKyNpZmRlZiBJMzg2SVggICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbnRlcmFjdGl2ZSBTeXMgViBSMyBuZXR3b3JrLiAqLworLyogI2Rl ZmluZSBURUxPUFRTICovICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgbWlnaHQgbmVlZCBkZWZp bmluZy4gKi8KKyNkZWZpbmUgT1JHX05MT05HIEVOQU1FVE9PTE9ORyAgICAgICAgICAvKiBSZXNv bHZlIGNvbmZsaWN0aW5nIHN5bWJvbHMgKi8KKyN1bmRlZiBFTkFNRVRPT0xPTkcgICAgICAgICAg ICAgICAgICAgICAvKiBpbiA8ZXJybm8uaD4gYW5kIDxuZXQvZXJybm8uaD4gKi8KKyNkZWZpbmUg T1JHX05FTVBUWSBFTk9URU1QVFkKKyN1bmRlZiBFTk9URU1QVFkKKyNpbmNsdWRlIDxuZXQvZXJy bm8uaD4KKyN1bmRlZiBFTkFNRVRPT0xPTkcKKyNkZWZpbmUgRU5BTUVUT09MT05HIE9SR19OTE9O RworI3VuZGVmIEVOT1RFTVBUWQorI2RlZmluZSBFTk9URU1QVFkgT1JHX05FTVBUWQorI2luY2x1 ZGUgPG5ldGluZXQvdGNwLmg+ICAgICAgICAgICAgICAgIC8qIGZvciBpbmV0X2FkZHIoKSAqLwor I2VuZGlmIC8qIEkzODZJWCAqLworLyoKKyAgRGF0YSB0eXBlIG9mIHRoZSBpbmV0X2FkZHIoKSBm dW5jdGlvbi4uLgorICBXZSBkZWZpbmUgSU5BRERSWCBpZiBpdCBpcyBvZiB0eXBlIHN0cnVjdCBp bmFkZHIuCisgIElmIGl0IGlzIHVuZGVmaW5lZCwgdW5zaWduZWQgbG9uZyBpcyBhc3N1bWVkLgor ICBMb29rIGF0IDxhcnBhL2luZXQuaD4gdG8gZmluZCBvdXQuICBUaGUgZm9sbG93aW5nIGtub3du IGNhc2VzIGFyZQorICBoYW5kbGVkIGhlcmUuICBPdGhlciBzeXN0ZW1zIHRoYXQgbmVlZCBpdCBj YW4gYmUgYWRkZWQgaGVyZSwgb3IgZWxzZQorICAtRElOQUREUlggY2FuIGJlIGluY2x1ZGVkIGlu IHRoZSBDRkxBR1Mgb24gdGhlIGNjIGNvbW1hbmQgbGluZS4KKyovCisjaWZuZGVmIE5PSU5BRERS WAorI2lmZGVmIERVMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQyBVbHRyaXgg Mi4wICovCisjZGVmaW5lIElOQUREUlgKKyNlbmRpZiAvKiBEVTIgKi8KKyNlbmRpZiAvKiBOT0lO QUREUlggKi8KKworI2Vsc2UgLyogTm90IFVOSVggKi8KKworI2lmZGVmIFZNUyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIChPcGVuKVZNUyBzZWN0aW9uICovCisKKyNpZmRlZiBNVUxU SU5FVCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUR1YgTXVsdGlOZXQgKi8KKy8qCisgIElu IEMtS2VybWl0IDcuMCBCZXRhLjA4IHdlIHN0YXJ0ZWQgZ2V0dGluZyBzY2FkcyBvZiBjb21waWxl IHRpbWUgd2FybmluZ3MKKyAgaW4gTXVsdGluZXQgYnVpbGRzOiAiYmxhaCIgaXMgaW1wbGljaXRs eSBkZWNsYXJlZCBhcyBhIGZ1bmN0aW9uLCB3aGVyZSBibGFoCisgIGlzIHNvY2tldF9yZWFkL3dy aXRlL2Nsb3NlLCBudG9ocywgaHRvbnMsIGdldHBlZXJuYW1lLCBhY2NlcHQsIHNlbGVjdCwgZXRj LgorICBJIGhhdmUgbm8gaWRlYSB3aHkgLS0gdGhlc2Ugcm91dGluZXMgYXJlIGRlY2xhcmVkIGlu IHRoZSBoZWFkZXIgZmlsZXMgYmVsb3csCisgIGFuZCB0aGUgaW5jbHVkZXMgaGF2ZW4ndCBjaGFu Z2VkLiAgVGhlIGV4ZWN1dGFibGUgc3RpbGwgc2VlbXMgdG8gd29yayBPSy4KKyAgTWVzc2luZyB3 aXRoIHRoZSBvcmRlciBvZiB0aGUgZm9sbG93aW5nIGluY2x1ZGVzIGlzIGRpc2FzdHJvdXMuCisq LworI2lmZGVmIE1VTFRJTkVUX05PX1BST1RPVFlQRVMKKyN1bmRlZiBNVUxUSU5FVF9OT19QUk9U T1RZUEVTCisjZW5kaWYgLyogTVVMVElORVRfTk9fUFJPVE9UWVBFUyAqLworCisjaWZkZWYgIF9f Y3BsdXNwbHVzCisjdW5kZWYgIF9fY3BsdXNwbHVzCisjZW5kaWYgLyogIF9fY3BsdXNwbHVzICov CisKKyNpbmNsdWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlXWVycm5vLmgiCisj aW5jbHVkZSAibXVsdGluZXRfcm9vdDpbbXVsdGluZXQuaW5jbHVkZS5zeXNddHlwZXMuaCIKKyNp bmNsdWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlLnN5c11zb2NrZXQuaCIKKyNp bmNsdWRlICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlXW5ldGRiLmgiCisjaW5jbHVk ZSAibXVsdGluZXRfcm9vdDpbbXVsdGluZXQuaW5jbHVkZS5uZXRpbmV0XWluLmgiCisjaW5jbHVk ZSAibXVsdGluZXRfcm9vdDpbbXVsdGluZXQuaW5jbHVkZS5hcnBhXWluZXQuaCIKKyNpbmNsdWRl ICJtdWx0aW5ldF9yb290OlttdWx0aW5ldC5pbmNsdWRlLnN5c11pb2N0bC5oIgorCisjaWZkZWYg Q09NTUVOVAorLyoKKyAgTm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIG5vdyBiemVyby9iY29weSBh cmUgbWFjcm9zIGRlZmluZWQgYXMKKyAgbWVtc2V0L21lbW1vdmUgaW4gYWxsIFZNUyBidWlsZHMu CisqLworLyoKKyAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gcGljayB0aGVzZSB1cCBmcm9tIDxzdHJp bmdzLmg+IGJ1dCBpdCdzCisgIG5vdCBwb3J0YWJsZSBiZXR3ZWVuIFZBWEMgYW5kIERFQ0MuICBB bmQgZXZlbiB3aXRoIERFQ0MgNS54IHdlIGhhdmUgYQorICBkaWZmZXJlbmNlIGJldHdlZW4gVkFY IGFuZCBBbHBoYS4gIFdlIGdldCB3YXJuaW5ncyBoZXJlIG9uIHRoZSBWQVgKKyAgd2l0aCBERUND IDUuNi0wMDMgYnV0IHRoZXkgYXJlIG5vdCBmYXRhbC4KKyovCisjaWZuZGVmIF9fREVDQ19WRVIK KyNpZm5kZWYgYnplcm8KK19QUk9UT1RZUCggdm9pZCBiemVybywgKGNoYXIgKiwgaW50KSApOwor I2VuZGlmIC8qIGJ6ZXJvICovCisjaWZuZGVmIGJjb3B5CitfUFJPVE9UWVAoIHZvaWQgYmNvcHks IChjaGFyICosIGNoYXIgKiwgaW50KSApOworI2VuZGlmIC8qIGJjb3B5ICovCisjZW5kaWYgLyog X19ERUNDX1ZFUiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIF9fREVDQworLyoK KyAgIElmIGNvbXBpbGluZyB1bmRlciBERUMgQyB0aGUgc29ja2V0IGNhbGxzIG11c3Qgbm90IGJl IHByZWZpeGVkIHdpdGgKKyAgIERFQ0MkLiAgVGhpcyBpcyBkb25lIGJ5IHVzaW5nIHRoZSBjb21w aWxlciBzd2l0Y2ggL1ByZWZpeD1BbnNpX0M4OS4KKyAgIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIHNv bWUgY2FsbHMgdGhhdCBzaG91bGQgYmUgcHJlZml4ZWQgdG8gbm90IGJlCisgICAod2hpY2ggSSB0 aGluayBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgLSBJJ3ZlIGJlZW4gdG9sZCB0aGVzZSBjYWxs cworICAgYXJlIHByZXNlbnQgaW4gQU5TSSBjb21waWxlcnMpLiAgQXQgYW55IHJhdGUsIHN1Y2gg Y2FsbHMgYXJlIGZpeGVkCisgICBoZXJlIGJ5IGV4cGxpY2l0bHkgcHJlZml4aW5nIHRoZW0uCisq LworI2lmZGVmIENPTU1FTlQKKy8qCisgICBCdXQgdGhpcyBjYXVzZXMgZXJyb3JzIHdpdGggVk1T IDYuMiAvIERFQyBDIDUuMy0wMDYgLyBNdWx0aU5ldCA0LjBBIG9uCisgICBhIFZBWCAoYnV0IG5v dCBvbiBhbiBBbHBoYSkuICBTbyBub3cgd2hhdCBoYXBwZW5zIGlmIHdlIHNraXAgZG9pbmcgdGhp cz8KKyovCisjZGVmaW5lIGNsb3NlIGRlY2MkY2xvc2UKKyNkZWZpbmUgYWxhcm0gZGVjYyRhbGFy bQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKworI2Vsc2UgLyog Tm90IE1VTFRJTkVUICovCisKKyNpZmRlZiBXSU5UQ1AgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBXSU4vVENQID0gUGF0aFdheSBmb3IgVk1TICovCisjaWZkZWYgT0xEX1RXRworI2luY2x1 ZGUgInR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5zeXNdZXJybm8uaCIKKyNpbmNsdWRlICJ0d2ck dGNwOltuZXRkaXN0LmluY2x1ZGUuc3lzXXR5cGVzMi5oIiAvKiBhdm9pZCBzb21lIGR1cGxpY2F0 ZXMgKi8KKyNlbHNlCisjaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNsdWRlXXNvY2tldF9h bGlhc2VzLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0 LmluY2x1ZGUuc3lzXXR5cGVzLmgiCisjZW5kaWYgLyogT0xEX1RXRyAqLworI2luY2x1ZGUgInR3 ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5zeXNdc29ja2V0LmgiCisjaW5jbHVkZSAidHdnJHRjcDpb bmV0ZGlzdC5pbmNsdWRlXW5ldGRiLmgiCisjaW5jbHVkZSAidHdnJHRjcDpbbmV0ZGlzdC5pbmNs dWRlLnN5c11kb21haW4uaCIKKyNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0LmluY2x1ZGUuc3lz XXByb3Rvc3cuaCIKKyNpbmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0LmluY2x1ZGUubmV0aW5ldF1p bi5oIgorI2luY2x1ZGUgInR3ZyR0Y3A6W25ldGRpc3QuaW5jbHVkZS5hcnBhXWluZXQuaCIKKyNp bmNsdWRlICJ0d2ckdGNwOltuZXRkaXN0LmluY2x1ZGUuc3lzXWlvY3RsLmgiCisKKyNlbHNlIC8q IE5vdCBXSU5UQ1AgKi8KKworI2lmZGVmIERFQ19UQ1BJUAorI2lmZGVmIFVDWDUwCisjaWZuZGVm IElGX0RPVF9ICisjZGVmaW5lIElGX0RPVF9ICisjZW5kaWYgLyogIElGX0RPVF9IICovCisjZW5k aWYgLyogVUNYNTAgKi8KKworI2lmZGVmIElGX0RPVF9ICisjaW5jbHVkZSA8aWYuaD4gICAgICAg ICAgICAgICAgICAgICAgICAgLyogTmVlZGVkIHRvIHB1dCB1cCB1X2ludCB0eXBlZGVmICovCisj ZWxzZQorI2lmZGVmIE5FRURVSU5UCit0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKKyNlbmRp ZiAvKiBORUVEVUlOVCAqLworI2VuZGlmIC8qIElGX0RPVF9IICovCisKKyNpbmNsdWRlIDxpbi5o PgorI2lmZGVmIFZNUworI2luY2x1ZGUgPGluZXQuaD4JCQkvKiAoU01TIDIwMDcvMDIvMTUpICov CisjZW5kaWYJLyogVk1TICovCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxzb2NrZXQu aD4KKyNpbmNsdWRlICJja3Zpb2MuaCIKKyNkZWZpbmUgc29ja2V0X2Vycm5vIGVycm5vCisKKyNp ZmRlZiBDT01NRU5UCisvKgorICBObyBsb25nZXIgbmVlZGVkIGJlY2F1c2Ugbm93IGJ6ZXJvL2Jj b3B5IGFyZSBtYWNyb3MgZGVmaW5lZCBhcworICBtZW1zZXQvbWVtbW92ZSBpbiBhbGwgVk1TIGJ1 aWxkcy4KKyovCisvKgorICBUcmFuc2xhdGlvbjogSW4gPHN0cmluZ3MuaD4sIHdoaWNoIGV4aXN0 cyBvbmx5IGZvciBERUNDID49IDUuMiwgYnplcm8oKQorICBhbmQgYmNvcHkoKSBhcmUgZGVjbGFy ZWQgb25seSBmb3IgT3BlblZNUyA+PSA3LjAuICBUaGlzIHN0aWxsIG1pZ2h0IG5lZWQKKyAgYWRq dXN0bWVudCBmb3IgREVDQyA1LjAgYW5kIGhpZ2hlci4KKyovCisjaWZkZWYgX19ERUNDX1ZFUgor I2lmZGVmIFZNU1Y3MAorLyoKKyAgTm90ZTogeW91IGNhbid0IHVzZSAiI2lmIChfX1ZNU19WRVI+ PTcwMDAwMDAwKSIgYmVjYXVzZSB0aGF0IGlzIG5vdAorICBwb3J0YWJsZSBhbmQga2lsbHMgbm9u LVZNUyBidWlsZHMuCisqLworI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbHNlCisjaWZuZGVmIGJ6 ZXJvCisjZGVmaW5lIGJ6ZXJvKHMsbikgbWVtc2V0KHMsMCxuKQorI2VuZGlmCisjaWZuZGVmIGJj b3B5CisjZGVmaW5lIGJjb3B5KGgsYSxsKSBtZW1tb3ZlKGEsaCxsKQorI2VuZGlmCisjZW5kaWYg LyogVk1TVjcwICovCisjZWxzZQorI2lmbmRlZiBiemVybworI2RlZmluZSBiemVybyhzLG4pIG1l bXNldChzLDAsbikKKyNlbmRpZgorI2lmbmRlZiBiY29weQorI2RlZmluZSBiY29weShoLGEsbCkg bWVtbW92ZShhLGgsbCkKKyNlbmRpZgorI2VuZGlmIC8qIF9fREVDQ19WRVIgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyNkZWZpbmUgc29ja2V0X3JlYWQgICAgIHJlYWQKKyNkZWZpbmUgc29j a2V0X3dyaXRlICAgIHdyaXRlCisjZGVmaW5lIHNvY2tldF9pb2N0bCAgICBpb2N0bAorI2RlZmlu ZSBzb2NrZXRfY2xvc2UgICAgY2xvc2UKKworI2lmZGVmIF9fREVDQworaW50IGlvY3RsIChpbnQg ZCwgaW50IHJlcXVlc3QsIHZvaWQgKmFyZ3ApOworI2Vsc2UKK2ludCBpb2N0bCAoaW50IGQsIGlu dCByZXF1ZXN0LCBjaGFyICphcmdwKTsKKyNlbmRpZiAvKiBERUNDICovCisvKgorICBVQ1ggc3Vw cG9ydHMgc2VsZWN0KCksIGJ1dCBkb2VzIG5vdCBwcm92aWRlIHRoZSBuZWVkZWQgc3ltYm9sIGFu ZAorICBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgaW4gYW55IGhlYWRlciBmaWxlLCBzbyAuLi4KKyov CisjaW5jbHVkZSA8dHlwZXMuaD4KKyNpZm5kZWYgTkJCWQorLyotCisgKiBDb3B5cmlnaHQgKGMp IDE5ODIsIDE5ODYsIDE5OTEsIDE5OTMKKyAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdlbWVudDoKKyAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogICAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQg aXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNp dHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK KyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9S UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogICAgICBAKCMp dHlwZXMuaCAgICAgOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKi8KKworI2RlZmluZSBOQkJZICAg IDggICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYml0cyBpbiBhIGJ5dGUgKi8KKworLyoKKyAq IFNlbGVjdCB1c2VzIGJpdCBtYXNrcyBvZiBmaWxlIGRlc2NyaXB0b3JzIGluIGxvbmdzLiAgVGhl c2UgbWFjcm9zCisgKiBtYW5pcHVsYXRlIHN1Y2ggYml0IGZpZWxkcyAodGhlIGZpbGVzeXN0ZW0g bWFjcm9zIHVzZSBjaGFycykuCisgKiBGRF9TRVRTSVpFIG1heSBiZSBkZWZpbmVkIGJ5IHRoZSB1 c2VyLCBidXQgdGhlIGRlZmF1bHQgaGVyZSBzaG91bGQKKyAqIGJlIGVub3VnaCBmb3IgbW9zdCB1 c2VzLgorICovCisjaWZuZGVmIEZEX1NFVFNJWkUKKyNkZWZpbmUgRkRfU0VUU0laRSAgICAgIDI1 NgorI2VuZGlmCisKK3R5cGVkZWYgbG9uZyAgICBmZF9tYXNrOworI2RlZmluZSBORkRCSVRTIChz aXplb2YoZmRfbWFzaykgKiBOQkJZKSAgICAgICAgLyogYml0cyBwZXIgbWFzayAqLworCisjaWZu ZGVmIGhvd21hbnkKKyNkZWZpbmUgaG93bWFueSh4LCB5KSAgICgoKHgpKygoeSktMSkpLyh5KSkK KyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBmZF9zZXQgeworICAgICAgICBmZF9tYXNrIGZkc19i aXRzW2hvd21hbnkoRkRfU0VUU0laRSwgTkZEQklUUyldOworfSBmZF9zZXQ7CisKKyNkZWZpbmUg RkRfU0VUKG4sIHApICAgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSB8PSAoMSA8PCAoKG4p ICUgTkZEQklUUykpKQorI2RlZmluZSBGRF9DTFIobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4p L05GREJJVFNdICY9IH4oMSA8PCAoKG4pICUgTkZEQklUUykpKQorI2RlZmluZSBGRF9JU1NFVChu LCBwKSAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdICYgKDEgPDwgKChuKSAlIE5GREJJVFMp KSkKKyNkZWZpbmUgRkRfQ09QWShmLCB0KSAgIGJjb3B5KGYsIHQsIHNpemVvZigqKGYpKSkKKyNk ZWZpbmUgRkRfWkVSTyhwKSAgICAgIGJ6ZXJvKHAsIHNpemVvZigqKHApKSkKKyNlbmRpZiAvKiAh TkJCWSAqLworCisjZWxzZSAgLyogTm90IERFQ19UQ1BJUCAqLworCisjaWZkZWYgQ01VX1RDUElQ CisjaW5jbHVkZSA8dHlwZXMuaD4KKyNpbmNsdWRlIDxpbi5oPgorI2luY2x1ZGUgPG5ldGRiLmg+ CisjaW5jbHVkZSA8c29ja2V0Lmg+CisjaW5jbHVkZSA8aW5ldC5oPgorI2luY2x1ZGUgPGlvY3Rs Lmg+CisjaW5jbHVkZSAiY2t2aW9jLmgiCisjZGVmaW5lIHNvY2tldF9lcnJubyBlcnJubworCisv KgorICogUm91dGluZXMgc3VwcGxpZWQgaW4gTElCQ01VLk9MQgorICovCisjZGVmaW5lIHNvY2tl dF9pb2N0bCAgICBpb2N0bAorI2RlZmluZSBzb2NrZXRfcmVhZCAgICAgY211X3JlYWQKKyNkZWZp bmUgc29ja2V0X3dyaXRlICAgIGNtdV93cml0ZQorI2RlZmluZSBzb2NrZXRfY2xvc2UgICAgY211 X2Nsb3NlCisKKyNlbmRpZiAvKiBDTVVfVENQSVAgKi8KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8K KyNlbmRpZiAvKiBXSU5UQ1AgKi8KKyNlbmRpZiAvKiBNVUxUSU5FVCAqLworCisjZWxzZSAvKiBO b3QgVk1TICovCisKKyNpZmRlZiBPUzIKKyNpbmNsdWRlICJja29uZXQuaCIKKyNpZm5kZWYgTlQK KyNpbmNsdWRlIDxuZXJybm8uaD4KKyNlbmRpZgorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYg U1RSQVRVUyAgLyogU3RyYXR1cyBWT1MgdXNpbmcgT1MgVENQL0lQIHByb2R1Y3RzIFMyMzUsIFMy MzYsIFMyMzcgKi8KKyNpbmNsdWRlIDx0Y3Bfc29ja2V0Lmg+CisvKiBUaGlzIGdldHMgdXNlZCBz b21lIHBsYWNlcyB3aGVuIFRDUFNPQ0tFVCBpcyBkZWZpbmVkLiAqLworLyogT1MgVENQIHByb3Zp ZGVzIGJ6ZXJvKCksIGJ1dCBub3QgYmNvcHkoKS4uLiBnbyBmaWd1cmUuICovCisjZGVmaW5lIGJj b3B5KHMsZCx6KSBtZW1jcHkoZCxzLHopCisjZW5kaWYgLyogU1RSQVRVUyAqLworCisjaWZkZWYg T1NLCisjaWZuZGVmIE9TS1hYQworI2luY2x1ZGUgPGluZXQvaW4uaD4KKyNpbmNsdWRlIDxpbmV0 L25ldGRiLmg+CisjaW5jbHVkZSA8aW5ldC9zb2NrZXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8SU5F VC9pbi5oPgorI2luY2x1ZGUgPElORVQvbmV0ZGIuaD4KKyNpbmNsdWRlIDxJTkVUL3NvY2tldC5o PgorI2VuZGlmIC8qIE9TS1hYQyAqLworI2lmbmRlZiBiemVybworI2RlZmluZSBiemVybyhzLG4p IG1lbXNldChzLDAsbikKKyNlbmRpZgorI2lmbmRlZiBiY29weQorI2RlZmluZSBiY29weShoLGEs bCkgbWVtY3B5KGEsaCxsKQorI2VuZGlmCit0eXBlZGVmIGNoYXIgKiBjYWRkcl90OyAvKiBjb3Jl IGFkZHJlc3MgdHlwZSAqLworI2VuZGlmIC8qIE9TSyAqLworCisjZW5kaWYgLyogVk1TICovCisj ZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZuZGVmIE5PSU5B RERSWAkJICAgICAgLyogMzAxIC0gTmVlZGVkIGZvciBTb2xhcmlzIDEwIGFuZCAxMSAqLworI2lm ZGVmIFNPTEFSSVMKKyNkZWZpbmUgTk9JTkFERFJYCisjaWZkZWYgSU5BRERSX05PTkUKKyN1bmRl ZiBJTkFERFJfTk9ORQorI2VuZGlmCS8qIElOQUREUl9OT05FICovCisjZW5kaWYJLyogU09MQVJJ UyAqLworI2VuZGlmCS8qIE5PSU5BRERSWCAqLworCisjaWZkZWYgTk9JTkFERFJYCisjaWZkZWYg SU5BRERSWAorI3VuZGVmIElOQUREUlgKKyNlbmRpZgkvKiBJTkFERFJYICovCisjZW5kaWYJLyog Tk9JTkFERFJYICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9IQUREUkxJU1QKKyNp Zm5kZWYgSEFERFJMSVNUCisjaWZkZWYgU1VOT1M0MQorI2RlZmluZSBIQUREUkxJU1QKKyNlbmRp ZiAvKiBTVU5PUzQxICovCisjaWZkZWYgU09MQVJJUworI2RlZmluZSBIQUREUkxJU1QKKyNlbmRp ZiAvKiBTT0xBUklTICovCisjaWZkZWYgTElOVVgKKyNkZWZpbmUgSEFERFJMSVNUCisjZW5kaWYg LyogTElOVVggKi8KKyNpZmRlZiBBSVhSUworI2RlZmluZSBIQUREUkxJU1QKKyNlbmRpZiAvKiBB SVhSUyAqLworI2lmZGVmIEhQVVgKKyNkZWZpbmUgSEFERFJMSVNUCisjZW5kaWYgLyogSFBVWCAq LworI2lmZGVmIElSSVgKKyNkZWZpbmUgSEFERFJMSVNUCisjZW5kaWYgLyogSVJJWCAqLworI2lm ZGVmIEkzODZJWAorI2RlZmluZSBIQUREUkxJU1QKKyNlbmRpZiAvKiBJMzg2SVggKi8KKyNlbmRp ZiAvKiBIQUREUkxJU1QgKi8KKy8qIEEgc3lzdGVtIHRoYXQgZGVmaW5lcyBoX2FkZHIgYXMgaF9h ZGRyX2xpc3RbMF0gc2hvdWxkIGJlIEhBRERSTElTVCAqLworI2lmbmRlZiBIQUREUkxJU1QKKyNp ZmRlZiBoX2FkZHIKKyNkZWZpbmUgSEFERFJMSVNUCisjZW5kaWYgLyogaF9hZGRyICovCisjZW5k aWYgLyogSEFERFJMSVNUICovCisjZW5kaWYgLyogTk9IQUREUkxJU1QgKi8KKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKworI2lmZGVmIFROQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IElmIHdlJ3JlIGNvbXBpbGluZyB0ZWxuZXQgY29kZS4uLiAqLworI2lmbmRlZiBJS1NfT1BUSU9O CisjaWZuZGVmIFNUUkFUVVMKKyNkZWZpbmUgSUtTX09QVElPTgorI2VuZGlmIC8qIFNUUkFUVVMg Ki8KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisjaW5jbHVkZSAiY2tjdGVsLmgiCisjZWxzZQor ZXh0ZXJuIGludCBzc3RlbG5ldDsKKyNpZmRlZiBJS1NECisjdW5kZWYgSUtTRAorI2VuZGlmIC8q IElLU0QgKi8KKyNpZm5kZWYgTk9JS1NECisjZGVmaW5lIE5PSUtTRAorI2VuZGlmIC8qIE5PSUtT RCAqLworI2lmZGVmIElLU19PUFRJT04KKyN1bmRlZiBJS1NfT1BUSU9OCisjZW5kaWYgLyogSUtT X09QVElPTiAqLworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZuZGVmIE5PVENQT1BUUworLyoK KyAgQXV0b21hdGljYWxseSBkZWZpbmUgTk9UQ1BPUFRTIGZvciBjb25maWd1cmF0aW9ucyB3aGVy ZSB0aGV5IGNhbid0IGJlCisgIHVzZWQgYXQgcnVudGltZSBvciBjYXVzZSB0b28gbXVjaCB0cm91 YmxlIGF0IGNvbXBpbGUgdGltZS4KKyovCisjaWZkZWYgQ01VX1RDUElQICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ01VL1RlayAqLworI2RlZmluZSBOT1RDUE9QVFMKKyNlbmRpZiAvKiBDTVVf VENQSVAgKi8KKyNpZmRlZiBNVUxUSU5FVCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdWx0 aW5ldCBvbiBBbHBoYSAqLworI2lmZGVmIF9fYWxwaGEKKyNkZWZpbmUgTk9UQ1BPUFRTCisjZW5k aWYgLyogX19hbHBoYSAqLworI2VuZGlmIC8qIE1VTFRJTkVUICovCisjZW5kaWYgLyogTk9UQ1BP UFRTICovCisKKyNpZmRlZiBOT1RDUE9QVFMKKyNpZmRlZiBUQ1BfTk9ERUxBWQorI3VuZGVmIFRD UF9OT0RFTEFZCisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyNpZmRlZiBTT19MSU5HRVIKKyN1 bmRlZiBTT19MSU5HRVIKKyNlbmRpZiAvKiBTT19MSU5HRVIgKi8KKyNpZmRlZiBTT19LRUVQQUxJ VkUKKyN1bmRlZiBTT19LRUVQQUxJVkUKKyNlbmRpZiAvKiBTT19LRUVQQUxJVkUgKi8KKyNpZmRl ZiBTT19TTkRCVUYKKyN1bmRlZiBTT19TTkRCVUYKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KKyNp ZmRlZiBTT19SQ1ZCVUYKKyN1bmRlZiBTT19SQ1ZCVUYKKyNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8K KyNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBl dmVuIHdoZW4gVENQU09DS0VUIGlzIG5vdCBhdmFpbGFibGUgKi8KK19QUk9UT1RZUCggY2hhciAq IGNrZ2V0cGVlciwgKFZPSUQpKTsKKworI2lmZGVmIFRDUFNPQ0tFVAorI2lmZGVmIFNPTF9TT0NL RVQKKyNpZmRlZiBUQ1BfTk9ERUxBWQorX1BST1RPVFlQKCBpbnQgbm9fZGVsYXksIChpbnQsIGlu dCkgKTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLworI2lmZGVmIFNPX0tFRVBBTElWRQorX1BS T1RPVFlQKCBpbnQga2VlcGFsaXZlLCAoaW50LCBpbnQpICkgOworI2VuZGlmIC8qIFNPX0tFRVBB TElWRSAqLworI2lmZGVmIFNPX0xJTkdFUgorX1BST1RPVFlQKCBpbnQgY2tfbGluZ2VyLCAoaW50 LCBpbnQsIGludCkgKSA7CisjZW5kaWYgLyogU09fTElOR0VSICovCisjaWZkZWYgU09fU05EQlVG CitfUFJPVE9UWVAoIGludCBzZW5kYnVmLChpbnQsIGludCkgKSA7CisjZW5kaWYgLyogU09fU05E QlVGICovCisjaWZkZWYgU09fUkNWQlVGCitfUFJPVE9UWVAoIGludCByZWN2YnVmLCAoaW50LCBp bnQpICkgOworI2VuZGlmIC8qIFNPX1JDVkJVRiAqLworI2lmZGVmIFNPX0RPTlRST1VURQorX1BS T1RPVFlQKGludCBkb250cm91dGUsIChpbnQsIGludCkpOworI2VuZGlmIC8qIFNPX0RPTlRST1VU RSAqLworI2VuZGlmIC8qIFNPTF9TT0NLRVQgKi8KK19QUk9UT1RZUCggaW50IGdldGxvY2FsaXBh ZGRyLCAoVk9JRCkpOworX1BST1RPVFlQKCBpbnQgZ2V0bG9jYWxpcGFkZHJzLCAoY2hhciAqLGlu dCxpbnQpKTsKK19QUk9UT1RZUCggY2hhciAqIGNrZ2V0ZnFob3N0bmFtZSwoY2hhciAqKSk7Citf UFJPVE9UWVAoIHN0cnVjdCBob3N0ZW50ICogY2tfY29weWhvc3RlbnQsKHN0cnVjdCBob3N0ZW50 ICopKTsKK19QUk9UT1RZUCggY2hhciAqIGNrbmFtZTJhZGRyLCAoY2hhciAqKSk7CitfUFJPVE9U WVAoIGNoYXIgKiBja2FkZHIybmFtZSwgKGNoYXIgKikpOworCisvKiBBSVggKi8KKworI2lmZGVm IEFJWFJTCisjaWZuZGVmIFRDUF9OT0RFTEFZCisjZGVmaW5lIFRDUF9OT0RFTEFZIDB4MQorI2Vu ZGlmIC8qIFRDUF9OT0RFTEFZICovCisjaWZuZGVmIFRDUF9NQVhTRUcKKyNkZWZpbmUgVENQX01B WFNFRyAweDIKKyNlbmRpZiAvKiBUQ1BfTUFYU0VHICovCisjaWZuZGVmIFRDUF9LRUVQQUxJVkUK KyNkZWZpbmUgVENQX0tFRVBBTElWRSAweDgKKyNlbmRpZiAvKiBUQ1BfS0VFUEFMSVZFICovCisj ZW5kaWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIFJMT0dD T0RFCisjaWZuZGVmIENLX1RUR1dTSVoKK1NPUlJZX1JMT0dJTl9SRVFVSVJFU19UVEdXU0laX3Nl ZV9ja2NwbG0uZG9jCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworI2VuZGlmIC8qIFJMT0dDT0RF ICovCisKKyNpZmRlZiBDS19OQVdTCisjaWZuZGVmIENLX1RUR1dTSVoKK1NPUlJZX0NLX05BV1Nf UkVRVUlSRVNfVFRHV1NJWl9zZWVfY2tjcGxtLmRvYworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8K KyNlbmRpZiAvKiBDS19OQVdTICovCisKKyNpZm5kZWYgUEZfSU5FVAorI2lmZGVmICBBRl9JTkVU CisjZGVmaW5lIFBGX0lORVQgQUZfSU5FVAorI2VuZGlmIC8qIEFGX0lORVQgKi8KKyNlbmRpZiAv KiBQRl9JTkVUICovCisKKyNpZm5kZWYgSVBQT1JUX0VDSE8KKyNkZWZpbmUgSVBQT1JUX0VDSE8g NworI2VuZGlmIC8qIElQUE9SVF9FQ0hPICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVm IFJMT0dDT0RFCitfUFJPVE9UWVAoaW50IGNrX2tyYl9ybG9naW4sKENIQVIgKiwgaW50LCBDSEFS ICosIENIQVIgKiwgQ0hBUiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHNvY2thZGRyX2luICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29j a2FkZHJfaW4gKiwgaW50LCBpbnQpKTsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCisKK19QUk9UT1RZUCggVk9JRCBpbmlfa2VyYiwgKCB2b2lkICkgKTsg ICAvKiBLZXJiZXJvcyBpbml0aWFsaXphdGlvbiByb3V0aW5lICovCitfUFJPVE9UWVAoIGludCBk b2F1dGgsIChpbnQpICk7ICAgICAgICAgLyogQVVUSEVOVElDQVRFIGFjdGlvbiByb3V0aW5lICov CisKKyNpZmRlZiBDS19ETlNfU1JWCitfUFJPVE9UWVAoaW50IGxvY2F0ZV9zcnZfZG5zLChjaGFy ICpob3N0LCBjaGFyICpzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqcHJvdG9jb2wsIHN0cnVjdCBzb2NrYWRkciAqKmFkZHJfcHAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKm5hZGRycykpOworI2VuZGlmIC8qIENLX0ROU19TUlYgKi8KKwor I2lmbmRlZiBOT0hUVFAKK19QUk9UT1RZUChpbnQgaHR0cF9vcGVuLCAoY2hhciAqLCBjaGFyICos IGludCwgY2hhciAqLCBpbnQsIGNoYXIgKikpOworX1BST1RPVFlQKGludCBodHRwX3Jlb3Blbiwg KFZPSUQpKTsKK19QUk9UT1RZUChpbnQgaHR0cF9jbG9zZSwgKFZPSUQpKTsKK19QUk9UT1RZUChp bnQgaHR0cF9nZXQsIChjaGFyICosY2hhciAqKixjaGFyICosY2hhciAqLGNoYXIsY2hhciAqLGNo YXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKTsKK19QUk9UT1RZUChpbnQgaHR0 cF9oZWFkLCAoY2hhciAqLGNoYXIgKiosY2hhciAqLGNoYXIgKixjaGFyLGNoYXIgKixjaGFyICos CisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpOworX1BST1RPVFlQKGludCBodHRwX3B1 dCwgKGNoYXIgKixjaGFyICoqLGNoYXIgKixjaGFyICosY2hhciAqLGNoYXIsY2hhciAqLAorICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChp bnQgaHR0cF9kZWxldGUsIChjaGFyICosY2hhciAqKixjaGFyICosY2hhciAqLGNoYXIsY2hhciAq KSk7CitfUFJPVE9UWVAoaW50IGh0dHBfY29ubmVjdCwgKGludCwgY2hhciAqLGNoYXIgKiosY2hh ciAqLGNoYXIgKixjaGFyLGNoYXIgKikpOworX1BST1RPVFlQKGludCBodHRwX3Bvc3QsIChjaGFy ICosY2hhciAqKixjaGFyICosY2hhciAqLGNoYXIgKixjaGFyLGNoYXIgKiwKKyAgICAgICAgICAg ICAgICAgIGNoYXIgKixjaGFyICosIGludCkpOworX1BST1RPVFlQKGludCBodHRwX2luZGV4LCAo Y2hhciAqLGNoYXIgKiosY2hhciAqLGNoYXIgKixjaGFyLGNoYXIgKixjaGFyICosCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQpKTsKK19QUk9UT1RZUChpbnQgaHR0cF9pbmMsIChpbnQp KTsKK19QUk9UT1RZUChpbnQgaHR0cF9pc2Nvbm5lY3RlZCwgKHZvaWQpKTsKKworZXh0ZXJuIGNo YXIgKiB0Y3BfaHR0cF9wcm94eTsgICAgICAgICAgIC8qIE5hbWVbOnBvcnRdIG9mIGh0dHAgcHJv eHkgc2VydmVyICovCitleHRlcm4gaW50ICAgIHRjcF9odHRwX3Byb3h5X2Vycm5vOyAgICAgLyog UmV0dXJuIHZhbHVlIGZyb20gc2VydmVyICovCitleHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5 X3VzZXI7ICAgICAgLyogTmFtZSBvZiB1c2VyIGZvciBhdXRoZW50aWNhdGlvbiAqLworZXh0ZXJu IGNoYXIgKiB0Y3BfaHR0cF9wcm94eV9wd2Q7ICAgICAgIC8qIFBhc3N3b3JkIG9mIHVzZXIgKi8K KyNlbmRpZiAvKiBOT0hUVFAgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorCisvKiBUeXBlIG5lZWRl ZCBhcyA1dGggYXJndW1lbnQgKGxlbmd0aCkgdG8gZ2V0L3NldHNvY2tvcHQoKSAqLworCisjaWZk ZWYgVFJVNjQKKy8qIFRoZXkgc2F5IGl0IHRoZW1zZWx2ZXMgLSB0aGlzIGRvZXMgbm90IGNvbmZv cm0gdG8gc3RhbmRhcmRzICovCisjZGVmaW5lIHNvY2tsZW5fdCBpbnQKKyNlbHNlCisjaWZkZWYg SFBVWAorI2RlZmluZSBzb2NrbGVuX3QgaW50CisjZW5kaWYJLyogSFBVWCAqLworI2VuZGlmCS8q IFRSVTY0ICovCisKKyNpZm5kZWYgU09DS09QVF9UCisjaWZkZWYgQ0tfNjRCSVQKKyNkZWZpbmUg U09DS09QVF9UIHNvY2tsZW5fdAorI2VuZGlmCS8qIENLXzY0QklUICovCisjZW5kaWYJLyogU09D S09QVF9UICovCisKKyNpZm5kZWYgU09DS09QVF9UCisjZGVmaW5lIFNPQ0tPUFRfVCBpbnQKKyNp ZmRlZiBNQUNPU1gxMAorI3VuZGVmIFNPQ0tPUFRfVAorI2RlZmluZSBTT0NLT1BUX1QgdW5zaWdu ZWQgaW50CisjZWxzZQorI2lmZGVmIEFJWDQyCisjdW5kZWYgU09DS09QVF9UCisjZGVmaW5lIFNP Q0tPUFRfVCB1bnNpZ25lZCBsb25nCisjZWxzZQorI2lmZGVmIFBUWAorI3VuZGVmIFNPQ0tPUFRf VAorI2RlZmluZSBTT0NLT1BUX1Qgc2l6ZV90CisjZWxzZQorI2lmZGVmIE5UCisjdW5kZWYgU09D S09QVF9UCisjZGVmaW5lIFNPQ0tPUFRfVCBpbnQKKyNlbHNlIC8qIE5UICovCisjaWZkZWYgVU5J WFdBUkUKKyN1bmRlZiBTT0NLT1BUX1QKKyNkZWZpbmUgU09DS09QVF9UIHNpemVfdAorI2Vsc2Ug LyogVU5JWFdBUkUgKi8KKyNpZmRlZiBWTVMKKyNpZmRlZiBERUNfVENQSVAKKyNpZmRlZiBfX0RF Q0NfVkVSCisjdW5kZWYgU09DS09QVF9UCisjZGVmaW5lIFNPQ0tPUFRfVCBzaXplX3QKKyNlbmRp ZiAvKiBfX0RFQ0NfVkVSICovCisjZW5kaWYgLyogREVDX1RDUElQICovCisjZW5kaWYgLyogVk1T ICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIFBU WCAqLworI2VuZGlmIC8qIEFJWDQyICovCisjZW5kaWYgLyogTUFDT1NYMTAgKi8KKyNlbmRpZiAv KiBTT0NLT1BUX1QgKi8KKworLyogRGl0dG8gZm9yIGdldHNvY2tuYW1lKCkgKi8KKworI2lmbmRl ZiBHU09DS05BTUVfVAorI2lmZGVmIENLXzY0QklUCisjZGVmaW5lIEdTT0NLTkFNRV9UIHNvY2ts ZW5fdAorI2VuZGlmCS8qIENLXzY0QklUICovCisjZW5kaWYJLyogR1NPQ0tOQU1FX1QgKi8KKwor I2lmbmRlZiBHU09DS05BTUVfVAorI2RlZmluZSBHU09DS05BTUVfVCBpbnQKKyNpZmRlZiBNQUNP U1gxMAorI3VuZGVmIEdTT0NLTkFNRV9UCisjZGVmaW5lIEdTT0NLTkFNRV9UIHVuc2lnbmVkIGlu dAorI2Vsc2UKKyNpZmRlZiBQVFgKKyN1bmRlZiBHU09DS05BTUVfVAorI2RlZmluZSBHU09DS05B TUVfVCBzaXplX3QKKyNlbHNlCisjaWZkZWYgQUlYNDIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogc2l6ZV90IGluIDQuMisrLCBpbnQgaW4gNC4xLS0gKi8KKyN1bmRlZiBHU09DS05BTUVf VAorI2RlZmluZSBHU09DS05BTUVfVCBzaXplX3QKKyNlbHNlCisjaWZkZWYgVU5JWFdBUkUKKyN1 bmRlZiBHU09DS05BTUVfVAorI2RlZmluZSBHU09DS05BTUVfVCBzaXplX3QKKyNlbHNlCisjaWZk ZWYgVk1TCisjaWZkZWYgREVDX1RDUElQCisjaWZkZWYgX19ERUNDX1ZFUgorI3VuZGVmIEdTT0NL TkFNRV9UCisjZGVmaW5lIEdTT0NLTkFNRV9UIHNpemVfdAorI2VuZGlmIC8qIF9fREVDQ19WRVIg Ki8KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBV TklYV0FSRSAqLworI2VuZGlmIC8qIEFJWDQxICovCisjZW5kaWYgLyogUFRYICovCisjZW5kaWYg LyogTUFDT1NYMTAgKi8KKyNlbmRpZiAvKiBHU09DS05BTUVfVCAqLworCisjZW5kaWYgLyogVENQ U09DS0VUICovCisKKyNpZmRlZiBNQUNPU1gxMAorI2lmZGVmIGJjb3B5CisjdW5kZWYgYmNvcHkK KyNlbmRpZgorI2lmZGVmIGJ6ZXJvCisjdW5kZWYgYnplcm8KKyNlbmRpZgorI2VuZGlmIC8qIE1B Q09TWDEwICovCisKKyNlbmRpZiAvKiBDS0NORVRfSCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjcGxtLnR4dCBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjcGxtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lMDBlZGRlCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NwbG0udHh0CkBAIC0wLDAgKzEsMzExMyBAQAorCisg ICBbMV1UaGUgQ29sdW1iaWEgQ3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0IHwgQ29sdW1iaWEgVW5p dmVyc2l0eQorICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNSBVU0Eg byBbMl1rZXJtaXRAY29sdW1iaWEuZWR1CisgICAuLi5zaW5jZSAxOTgxCisgICBbM11Ib21lIFs0 XUtlcm1pdCA5NSBbNV1DLUtlcm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJlbnQgWzhdTmV3IFs5XUZB UQorICAgWzEwXVN1cHBvcnQKKworQy1LZXJtaXQgUHJvZ3JhbSBMb2dpYyBNYW51YWwKKworICAg ICBGcmFuayBkYSBDcnV6CisgICAgIFsxMV1UaGUgS2VybWl0IFByb2plY3QKKworICAgQXMgb2Y6 IEMtS2VybWl0IDkuMC4zMDAsIDMwIEp1bmUgMjAxMQorICAgTGFzdCB1cGRhdGU6IEZyaSBKdWwg MSAxNTo0NzozNCAyMDExCisKKyAgICAgSUYgWU9VIEFSRSBSRUFESU5HIEEgUExBSU4tVEVYVCB2 ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIG5vdGUgdGhhdAorICAgICB0aGlzIGZpbGUgaXMgYSBw bGFpbi10ZXh0IGR1bXAgb2YgYSBXZWIgcGFnZS4gWW91IGNhbiB2aXNpdCB0aGUKKyAgICAgb3Jp Z2luYWwgKGFuZCBwb3NzaWJseSBtb3JlIHVwLXRvLWRhdGUpIFdlYiBwYWdlIGhlcmU6CisKKyAg WzEyXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAorCitDT05URU5U UworCisgIDEuIFsxM11JTlRST0RVQ1RJT04KKyAgMi4gWzE0XUZJTEVTCisgIDMuIFsxNV1TT1VS Q0UgQ09ERSBQT1JUQUJJTElUWSBBTkQgU1RZTEUKKyAgNC4gWzE2XU1PRFVMRVMKKyAgICAgNC5B LiBbMTddR3JvdXAgQTogTGlicmFyeSBSb3V0aW5lcworICAgICA0LkIuIFsxOF1Hcm91cCBCOiBL ZXJtaXQgRmlsZSBUcmFuc2ZlcgorICAgICA0LkMuIFsxOV1Hcm91cCBDOiBDaGFyYWN0ZXItU2V0 IENvbnZlcnNpb24KKyAgICAgNC5ELiBbMjBdR3JvdXAgRDogVXNlciBJbnRlcmZhY2UKKyAgICAg NC5FLiBbMjFdR3JvdXAgRTogUGxhdGZvcm0tRGVwZW5kZW50IEkvTworICAgICA0LkYuIFsyMl1H cm91cCBGOiBOZXR3b3JrIFN1cHBvcnQKKyAgICAgNC5HLiBbMjNdR3JvdXAgRzogRm9ybWF0dGVk IFNjcmVlbiBTdXBwb3J0CisgICAgIDQuSC4gWzI0XUdyb3VwIEg6IFBzZXVkb3Rlcm1pbmFsIFN1 cHBvcnQKKyAgICAgNC5JLiBbMjVdR3JvdXAgSTogU2VjdXJpdHkKKyAgSS4gWzI2XUFQUEVORElY IEk6IEZJTEUgUEVSTUlTU0lPTlMKKworMS4gSU5UUk9EVUNUSU9OCisKKyAgIFRoZSBLZXJtaXQg UHJvdG9jb2wgaXMgc3BlY2lmaWVkIGluIHRoZSBib29rIFsyN11LZXJtaXQsIEEgRmlsZQorICAg VHJhbnNmZXIgUHJvdG9jb2wgYnkgRnJhbmsgZGEgQ3J1eiwgRGlnaXRhbCBQcmVzcyAvIEJ1dHRl cndvcnRoCisgICBIZWluZW1hbm4sIE5ld3RvbiwgTUEsIFVTQSAoMTk4NyksIDM3OSBwYWdlcywg SVNCTiAwLTkzMjM3Ni04OC02LiBJdCBpcworICAgYXNzdW1lZCB0aGUgcmVhZGVyIGlzIGZhbWls aWFyIHdpdGggdGhlIEtlcm1pdCBwcm90b2NvbCBzcGVjaWZpY2F0aW9uLgorCisgICBUaGlzIGZp bGUgZGVzY3JpYmVzIHRoZSByZWxhdGlvbnNoaXAgYW1vbmcgdGhlIG1vZHVsZXMgYW5kIGZ1bmN0 aW9ucyBvZgorICAgQy1LZXJtaXQgNUEgYW5kIGxhdGVyLCBhbmQgb3RoZXIgcHJvZ3JhbW1pbmcg Y29uc2lkZXJhdGlvbnMuIEMtS2VybWl0CisgICBpcyBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSB0 byBhbnkga2luZCBvZiBjb21wdXRlciB0aGF0IGhhcyBhIEMKKyAgIGNvbXBpbGVyLiBUaGUgc291 cmNlIGNvZGUgaXMgYnJva2VuIGludG8gbWFueSBmaWxlcyB0aGF0IGFyZSBncm91cGVkCisgICBh Y2NvcmRpbmcgdG8gdGhlaXIgZnVuY3Rpb24sIGFzIHNob3duIGluIHRoZSBbMjhdQ29udGVudHMu CisKKyAgIEMtS2VybWl0IGhhcyBzZWVuIGNvbnN0YW50IGRldmVsb3BtZW50IHNpbmNlIDE5ODUu IFRocm91Z2hvdXQgaXRzCisgICBoaXN0b3J5LCB0aGVyZSBoYXMgYmVlbiBhIG5ldmVyZW5kaW5n IHR1Zy1vZi13YXIgYW1vbmc6CisKKyAgICBhLiBGdW5jdGlvbmFsaXR5OiBhZGRpbmcgbmV3IGZl YXR1cmVzLCBmaXhpbmcgYnVncywgaW1wcm92aW5nCisgICAgICAgcGVyZm9ybWFuY2UuCisgICAg Yi4gQWRkaW5nIHN1cHBvcnQgZm9yIG5ldyBwbGF0Zm9ybXMgb3IgY29tbXVuaWNhdGlvbiBtZXRo b2RzLgorICAgIGMuICJCdXp6d29yZCAxLjAgY29tcGxpYW5jZSIuCisKKyAgIFRoZSBsYXR0ZXIg Y2F0ZWdvcnkgaXMgdGhlIG1vc3QgZnJ1c3RyYXRpbmcsIHNpbmNlIGl0IGdlbmVyYWxseQorICAg aW52b2x2ZXMgbWFzc2l2ZSBjaGFuZ2VzIGp1c3QgdG8ga2VlcCB0aGUgc29mdHdhcmUgZG9pbmcg d2hhdCBpdCBkaWQKKyAgIGJlZm9yZSBpbiBzb21lIG5ldyBzZXR0aW5nOiBlLmcuIHRoZSBLJlIt dG8tQU5TSUMgY29udmVyc2lvbiAod2hpY2ggaGFkCisgICB0byBiZSBkb25lLCBvZiBjb3Vyc2Us IHdpdGhvdXQgYnJlYWtpbmcgSyZSKTsgWTJLIChub3QgYSBiaWcgZGVhbCBpbgorICAgb3VyIGNh c2UpOyB0aGUgbWFueSBhbmQgdmFyaWVkIFVOSVggYW5kIG90aGVyIEFQSSAic3RhbmRhcmRzIiB3 aXRoCisgICB3aGljaCB0byAiY29tcGx5Ii4KKworICAgVXBvbiBmaXJzdCBnbGFuY2UgYXQgdGhl IHNvdXJjZSBjb2RlLCB5b3Ugd2lsbCBwcm9iYWJseSBiZSBhcHBhbGxlZC4KKyAgIE1hbnkgd2ls bCBiZSB0ZW1wdGVkIHRvIGNsZWFuIGl0IHVwIGFuZCBtb2Rlcm5pemUgaXQuIEJ1dCBhcyBzb29u IGFzCisgICB5b3UgZG8sIHlvdSBhcmUgc3VyZSB0byBicmVhayBzb21ldGhpbmcuIFJlbWVtYmVy IHRoYXQgYWJvdmUgYWxsIGVsc2UsCisgICB0aGUgQy1LZXJtaXQgY29kZSBpcyBwb3J0YWJsZSB0 byBldmVyeSBVbml4IHBsYXRmb3JtIHRoYXQgZXZlciBleGlzdGVkLAorICAgZ29pbmcgYmFjayBV bml4IFY3ICgxOTc5KSosIGFuZCB0byBzZXZlcmFsIG90aGVyIGNvbXBsZXRlbHkgZGlmZmVyZW50 CisgICBhbmQgdW5yZWxhdGVkIG9wZXJhdGluZy1zeXN0ZW0gZmFtaWxpZXMgc3VjaCBhcyBERUMv SFAgVk1TLCBERyBBT1MvVlMsCisgICBhbmQgU3RyYXR1cyBWT1MsIGFzIHdlbGwgYXMgdG8gc29t ZSBVbml4IG9mZnNob290cyBsaWtlIE9TLTkgYW5kIFBsYW4gOQorICAgKGZyb20gT3V0ZXIgU3Bh Y2UpLiBFdmVyeSByZWxlYXNlIG9mIEtlcm1pdCBoYXMgYmVlbiBjaGVja2VkIG9uIGV2ZXJ5Cisg ICBwbGF0Zm9ybSBhdmFpbGFibGUgLS0gdGhlIG9sZGVyIHRoZSBiZXR0ZXIhIC0tIHRvIG1ha2Ug c3VyZSBpdCBzdGlsbAorICAgYnVpbGRzIGFuZCBydW5zLiBFdmVuIHRvZGF5ICgyMDExKSwgdGhl cmUgYXJlIG1vZGVybiBVbml4IHN5c3RlbXMgdGhhdAorICAgaGF2ZSBub24tQU5TSSBDIGNvbXBp bGVycywgZm9yZW1vc3QgYW1vbmcgdGhlbSBIUC1VWCAod2hlcmUgYW4gQU5TSQorICAgb3B0aW1p emluZyBDIGNvbXBpbGVyIGlzIGF2YWlsYWJsZSwgYnV0IG9ubHkgYXMgYW4gZXhwZW5zaXZlIGFk ZC1vbikuCisgICBJbiBhIHdheSwgcG9ydGFiaWxpdHkgaXMgdGhlIG1vc3QgaW1wb3J0YW50IGZl YXR1cmUgb2YgQy1LZXJtaXQgYW5kCisgICBldmVyeSBlZmZvcnQgc2hvdWxkIGJlIG1hZGUgdG8g cHJlc2VydmUgaXQgdGhyb3VnaCBmdXR1cmUgcmVsZWFzZXMuCisKKyAgIFZvbHVtaW5vdXMgZWRp dCBoaXN0b3JpZXMgYXJlIGF2YWlsYWJsZSBnb2luZyBiYWNrIHRvIE1heSAxOTg1LiBUaGUKKyAg IGZpcnN0IHZlcnNpb25zIG9mIEMtS2VybWl0IHdlcmUgZG9uZSBvbiBvdXIgWzI5XURFQyBWQVgt MTEvNzUwIHdpdGgKKyAgIFVsdHJpeCAxLjAgYW5kIDIuMCAoYXMgd2VsbCBhcyBkZXBhcnRtZW50 YWwgNzUwcyB3aXRoIDQuMkJTRCoqKSwgREVDCisgICBQcm8tMzgwIHdvcmtzdGF0aW9ucyAoZGVz a3RvcCBQRFAtMTFzKSBydW5uaW5nIDIuOUJTRCwgd2hpY2ggd2FzCisgICBbMzBdcG9ydGVkIHRv IHRoZSAzODAgYnkgdXMuIExhdGVyICgxOTg4IG9yIHNvKSBvbiBhIGJpZyBWQVggODY1MCB3aXRo CisgICBVbHRyaXgsIHdoaWNoIGJlY2FtZSBhbiA4NzAwICh0aGVzZSBubyBkb3VidCB3ZWlnaGVk IHNldmVyYWwgdG9ucyksIGFuZAorICAgZmluYWxseSBhIHN1Y2Nlc3Npb24gb2Ygbm9uLURFQyBl cXVpcG1lbnQ6IGFuIEVuY29yZSBNdWx0aW1heCwgMjUgeWVhcnMKKyAgIHdvcnRoIG9mIFN1bnMs IGFuZCBub3cgTGludXggb24gWzMxXUhQIEJsYWRlcy4gV2UgYWxzbyBoYWQgb3VyIG93biBWTVMK KyAgIGRldmVsb3BtZW50IHN5c3RlbXMgZm9yIHNvbWUgeWVhcnMuIEFsbCB0aGlzIHBsdXMgYSBn ZW5lcm91cyBhc3NvcnRtZW50CisgICBvZiBkZXBhcnRtZW50YWwgYW5kIG9mZnNpdGUgZ3Vlc3Qg YWNjb3VudHMgb24gYSBtdWx0aXR1ZGUgb2YgcGxhdGZvcm1zLgorICAgQW55d2F5LCB0aGUgZWRp dCBoaXN0b3JpZXM6CisKKyAgICAgWzMyXWNrYzA0ZS50eHQgQy1LZXJtaXQgNC4yKDAzMCkgTWF5 IDE5ODUgdG8gNEUoMDcyKSBKYW4gMTk4OS4KKyAgICAgWzMzXWNrYzA0Zi50eHQgQy1LZXJtaXQg NEYoMDc3KSBBcnAgMTk4OSB0byA0RigwOTUpIEF1ZyAxOTg5LgorICAgICBbMzRdY2tjMTY4LnR4 dCBVcGRhdGVzIHRvIEMtS2VybWl0IDVBKDE2OCkgZm9yIFZNUyBOb3YgMTk5MQorICAgICBbMzVd Y2tjMTc4LnR4dCBDLUtlcm1pdCA1QSgxMDApIEp1bCAxOTg5IHRvIDVBKDE3OCkgSmFuIDE5OTIK KyAgICAgWzM2XWNrYzE4OC50eHQgQy1LZXJtaXQgNUEoMTg4KSBkZXZlbG9wbWVudCwgMTk5Mgor ICAgICBbMzddY2tjMTg5LnR4dCBDLUtlcm1pdCA1QSgxODkpIGRldmVsb3BtZW50LCAxOTkzCisg ICAgIFszOF1ja2MxOTIudHh0IEMtS2VybWl0IDYuMCgxOTIpIGRldmVsb3BtZW50LCAxOTk4Cisg ICAgIFszOV1ja2MxOTcudHh0IEMtS2VybWl0IDcuMCgxOTcpIGRldmVsb3BtZW50LCAyMDAwCisg ICAgIFs0MF1ja2MyMDAudHh0IEMtS2VybWl0IDguMC4yMDAgZGV2ZWxvcG1lbnQsIDIwMDEKKyAg ICAgWzQxXWNrYzIxMS50eHQgQy1LZXJtaXQgOC4wLjIwMSB0aHJvdWdoIDguMC4yMDkgMjAwMS0y MDA0CisgICAgIFs0Ml1ja2MzMDAudHh0IEMtS2VybWl0IDkuMC4zMDAgSnVuZSAyMDExCisKKyAg IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgKiBDLUtlcm1pdCA2LjAgd2Fz IHRoZSBsYXN0IG9uZSB0byBiZSBidWlsdCBvbiBWNywgYXMgSSByZWNhbGwuIFRoZQorICAgY29k ZSBzaG91bGQgc3RpbGwgYmUgZ29vZCBmb3IgVjcgYnV0IGl0IHByb2JhYmx5IGhhcyBvdXRncm93 biB0aGUKKyAgIDE2LWJpdCBhZGRyZXNzIHNwYWNlLiBJbiBhbnkgY2FzZSB0aGVyZSBpcyBzdGls bCBhIFY3IG1ha2VmaWxlIHRhcmdldAorICAgYW5kIGEgVjcgcGF0aCB0aHJvdWdoIHRoZSBmb3Jl c3Qgb2YgI2lmZGVmcyBpbiB0aGUgY29kZSBpZiBhbnlib2R5IGlzCisgICBydW5uaW5nIFY3IG9u IGFuIGVtdWxhdG9yIGFuZCB3b3VsZCBsaWtlIHRvIHRyeSBidWlsZGluZyBDLUtlcm1pdC4KKyAg IFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIFY2IGJ1dCB0aGF0IGlzIG9ubHkgYmVjYXVzZSBubyBW NiBzeXN0ZW0gd2FzCisgICBldmVyIGZvdW5kIGZvciBkZXZlbG9wbWVudC4gTm90aWNlIHRoYXQg c29tZSBvdGhlciAxNi1iaXQgVW5peGVzIGFyZQorICAgc3VwcG9ydGVkIGluIHRoZSBjb2RlLCBp bmNsdWRpbmcgMi45QlNEIGFuZCBUYW5keSBYZW5peCAzLjAsIGJ1dCBoYXZlCisgICBub3QgYmVl biB0cmllZCBzaW5jZSBDLUtlcm1pdCA2LjAKKworICAgKiogIEMtS2VybWl0IDkuMC4zMDAgd2Fz IGJ1aWx0IHN1Y2Nlc3NmdWxseSBvbiA0LjJCU0QgYWJvdXQgMjUgeWVhcnMKKyAgIGxhdGVyLCBp biBKdW5lIDIwMTEuCisKKyAgIFsgWzQzXUNvbnRlbnRzIF0gWyBbNDRdQy1LZXJtaXQgXSBbIFs0 NV1LZXJtaXQgSG9tZSBdCisKKzIuIEZJTEVTCisKKyAgIEMtS2VybWl0IHNvdXJjZSBmaWxlcyBi ZWdpbiB3aXRoIHRoZSB0d28gbGV0dGVycyAiY2siLCBmb3IgZXhhbXBsZQorICAgY2t1dGlvLmMu IEZpbGVuYW1lcyBhcmUga2VwdCBzaG9ydCAoNi4zKSBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSBh bmQKKyAgIChvYnZpb3VzbHkgSSBob3BlKSBkbyBub3QgY29udGFpbiBzcGFjZXMgb3IgbW9yZSB0 aGFuIG9uZSBwZXJpb2QuIFRoZQorICAgdGhpcmQgY2hhcmFjdGVyIGluIHRoZSBuYW1lIGRlbm90 ZXMgc29tZXRoaW5nIGFib3V0IHRoZSBmdW5jdGlvbiBncm91cAorICAgYW5kIHRoZSBleHBlY3Rl ZCBsZXZlbCBvZiBwb3J0YWJpbGl0eToKKworICAgICBhICAgICBHZW5lcmFsIGRlc2NyaXB0aXZl IG1hdGVyaWFsIGFuZCBkb2N1bWVudGF0aW9uICh0ZXh0KQorICAgICBiICAgICBCT08gZmlsZSBl bmNvZGVycyBhbmQgZGVjb2RlcnMgKG9ic29sZXRlKQorICAgICBjICAgICBBbGwgcGxhdGZvcm1z IHdpdGggQyBjb21waWxlcnMgKCopCisgICAgIGQgICAgIERhdGEgR2VuZXJhbCBBT1MvVlMKKyAg ICAgZSAgICAgUmVzZXJ2ZWQgZm9yICJja2VybWl0IiBmaWxlcywgbGlrZSBja2VybWl0LmluaSwg Y2tlcm1pdDIudHh0CisgICAgIGYgICAgIChyZXNlcnZlZCkKKyAgICAgZyAgICAgKHJlc2VydmVk KQorICAgICBoICAgICAocmVzZXJ2ZWQpCisgICAgIGkgICAgIENvbW1vZG9yZSBBbWlnYSAoSW50 dWl0aW9uKQorICAgICBqICAgICAodW51c2VkKQorICAgICBrICAgICAodW51c2VkKQorICAgICBs ICAgICBTdHJhdHVzIFZPUworICAgICBtICAgICBNYWNpbnRvc2ggd2l0aCBNYWMgT1MgMS05Cisg ICAgIG4gICAgICh1bnVzZWQpCisgICAgIG8gICAgIE9TLzIgYW5kIE1pY3Jvc29mdCBXaW5kb3dz IDl4L01FL05ULzIwMDAvWFAvVmlzdGEvZXRjCisgICAgIHAgICAgIFBsYW4gOSBmcm9tIEJlbGwg TGFicworICAgICBxICAgICAocmVzZXJ2ZWQpCisgICAgIHIgICAgIERFQyBQRFAtMTEgd2l0aCBS U1RTL0UgKG5ldmVyIHVzZWQsIG9wZW4gZm9yIHJlYXNzaWdubWVudCkKKyAgICAgcyAgICAgQXRh cmkgU1QgR0VNRE9TIChsYXN0IHN1cHBvcnRlZCBpbiB2ZXJzaW9uIDVBKDE4OSkpCisgICAgIHQg ICAgIERFQyBQRFAtMTEgd2l0aCBSVC0xMSAobmV2ZXIgdXNlZCwgb3BlbiBmb3IgcmVhc3NpZ25t ZW50KQorICAgICB1ICAgICBVbml4LWJhc2VkIG9wZXJhdGluZyBzeXN0ZW1zICgqKQorICAgICB2 ICAgICBWTVMgYW5kIE9wZW5WTVMKKyAgICAgdyAgICAgV2FydCAoTGV4LWxpa2UgcHJlcHJvY2Vz c29yLCBwbGF0Zm9ybSBpbmRlcGVuZGVudCkKKyAgICAgeCAgICAgKHJlc2VydmVkKQorICAgICB5 ICAgICAocmVzZXJ2ZWQpCisgICAgIHogICAgIChyZXNlcnZlZCkKKyAgICAgMC0zICAgKHJlc2Vy dmVkKQorICAgICA0ICAgICBJQk0gQVMvNDAwCisgICAgIDUtOCAgIChyZXNlcnZlZCkKKyAgICAg OSAgICAgTWljcm93YXJlIE9TLTkKKyAgICAgXyAgICAgKHVuZGVyc2NvcmUpIEVuY3J5cHRpb24g bW9kdWxlcworCisgICAoKikgSW4gZmFjdCB0aGVyZSBpcyBsaXR0bGUgZGlzdGluY3Rpb24gYmV0 d2VlbiB0aGUgY2tjKi4qIGFuZCBja3UqLioKKyAgIGNhdGVnb3JpZXMuIEl0IHdvdWxkIG1ha2Ug bW9yZSBzZW5zZSBmb3IgYWxsIGNrdSouKiBtb2R1bGVzIHRvIGJlCisgICBja2MqLiogb25lcywg ZXhjZXB0IGNrdWZpby5jLCBja3V0aW8uYywgY2t1Y29uLmMsIGNrdWNucy5jLCBhbmQKKyAgIGNr dXB0eS5jLCB3aGljaCB0cnVseSBhcmUgc3BlY2lmaWMgdG8gVW5peC4gVGhlIHJlc3QgKGNrdXVz Ki5jLAorICAgY2t1Y21kLmMsIGV0YykgYXJlIHF1aXRlIHBvcnRhYmxlLgorCisgICBPbmUgaGlu dCBiZWZvcmUgcHJvY2VlZGluZzogZnVuY3Rpb25zIGFyZSBzY2F0dGVyZWQgYWxsIG92ZXIgdGhl IGNrYyouYworICAgYW5kIGNrdSouYyBtb2R1bGVzLCB3aGVyZSBmdW5jdGlvbiBzaXplIGhhcyBi ZWd1biB0byB0YWtlIHByZWNlZGVuY2UKKyAgIG92ZXIgdGhlIGRlc2lyYWJpbGl0eSBvZiBncm91 cGluZyByZWxhdGVkIGZ1bmN0aW9ucyB0b2dldGhlciwgdGhlIGFpbQorICAgYmVpbmcgdG8ga2Vl cCBhbnkgcGFydGljdWxhciBtb2R1bGUgZnJvbSBncm93aW5nIGRpc3Byb3BvcnRpb25hdGVseQor ICAgbGFyZ2UuIFRoZSBlYXNpZXN0IHdheSAoaW4gVU5JWCkgdG8gZmluZCBvdXQgaW4gd2hhdCBz b3VyY2UgZmlsZSBhCisgICBnaXZlbiBmdW5jdGlvbiBpcyBkZWZpbmVkIGlzIGxpa2UgdGhpcyAo d2hlcmUgdGhlIGRlc2lyZWQgZnVuY3Rpb24gaXMKKyAgIGZvbygpLi4uKToKKworICBncmVwIF5m b29cKCBjayouYworCisgICBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGNvZGluZyBjb252ZW50aW9u IGhhcyBiZWVuIHRvIG1ha2UgZnVuY3Rpb24KKyAgIG5hbWVzIGFsd2F5cyBzdGFydCBvbiB0aGUg bGVmdCBtYXJnaW4gd2l0aCB0aGVpciBjb250ZW50cyBpbmRlbnRlZCwgZm9yCisgICBleGFtcGxl OgorCitzdGF0aWMgY2hhciAqCitmb28oeCx5KSBpbnQgeCwgeTsgeworICAgIC4uLgorfQorCisg ICBBbHNvIG5vdGUgdGhlIHN0eWxlIGZvciBicmFja2V0IHBsYWNlbWVudC4gVGhpcyBhbGxvd3Mg YnJhY2tldC1tYXRjaGluZworICAgdGV4dCBlZGl0b3JzIChzdWNoIGFzIEVNQUNTKSB0byBoZWxw IHlvdSBtYWtlIHN1cmUgeW91IGtub3cgd2hpY2gKKyAgIG9wZW5pbmcgYnJhY2tldCBhIGNsb3Np bmcgYnJhY2tldCBtYXRjaGVzLCBwYXJ0aWN1bGFybHkgd2hlbiB0aGUKKyAgIG9wZW5pbmcgYnJh Y2tldCBpcyBhYm92ZSB0aGUgdmlzaWJsZSBzY3JlZW4sIGFuZCBpdCBhbHNvIG1ha2VzIGl0IGVh c3kKKyAgIHRvIGZpbmQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIChzZWFyY2ggZm9yICd9JyBvbiB0 aGUgbGVmdCBtYXJnaW4pLgorCisgICBPZiBjb3Vyc2UgRU1BQ1MgdGFncyB3b3JrIG5pY2VseSB3 aXRoIHRoaXMgZm9ybWF0IHRvbzoKKworICAkIGNkIGtlcm1pdC1zb3VyY2UtZGlyZWN0b3J5Cisg ICQgZXRhZ3MgY2tbY3VdKi5jCisgICQgZW1hY3MKKyAgRXNjLVggVmlzaXQtVGFncy1UYWJsZTxD Uj48Q1I+CisKKyAgIChidXQgcmVtZW1iZXIgdGhhdCB0aGUgc291cmNlIGZpbGUgZm9yIGNrY3By by5jIGlzIFs0Nl1ja2Nwcm8udyEpCisKKyAgIEFsc286CisKKyAgICAgKiBUYWJzIHNob3VsZCBi ZSBzZXQgZXZlcnkgOCBzcGFjZXMsIGFzIG9uIGEgVlQxMDAuCisgICAgICogQWxsIGxpbmVzIG11 c3Qgbm8gbW9yZSB0aGFuIDc5IGNoYXJhY3RlcnMgd2lkZSBhZnRlciB0YWIgZXhwYW5zaW9uLgor ICAgICAqIE5vdGUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gcGh5c2ljYWwgdGFicyAoQVNDSUkg OSkgYW5kIHRoZQorICAgICAgIGluZGVudGF0aW9uIGNvbnZlbnRpb25zLCB3aGljaCBhcmU6IDQg Zm9yIGJsb2NrIGNvbnRlbnRzLCAyIGZvcgorICAgICAgIG1vc3Qgb3RoZXIgc3R1ZmYgKG9idmlv dXNseSB0aGlzIGlzIG5vdCBhIHBvcnRhYmlsaXR5IGlzc3VlLCBqdXN0CisgICAgICAgc3R5bGUp LgorCisgICBbIFs0N11Db250ZW50cyBdIFsgWzQ4XUMtS2VybWl0IF0gWyBbNDldS2VybWl0IEhv bWUgXQorCiszLiBTT1VSQ0UgQ09ERSBQT1JUQUJJTElUWSBBTkQgU1RZTEUKKworICAgQy1LZXJt aXQgd2FzIGRlc2lnbmVkIGluIDE5ODUgYXMgYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCByZXBsYWNl bWVudCBmb3IKKyAgIHRoZSBlYXJsaWVyIFVuaXggS2VybWl0LiBDLUtlcm1pdCdzIGRlc2lnbiB3 YXMgZXhwZWN0ZWQgdG8gcHJvbW90ZQorICAgcG9ydGFiaWxpdHksIGFuZCBqdWRnaW5nIGZyb20g dGhlIG51bWJlciBvZiBwbGF0Zm9ybXMgdG8gd2hpY2ggaXQgaGFzCisgICBiZWVuIGFkYXB0ZWQg c2luY2UgdGhlbiwgdGhlIG1vZGVsIGlzIGVmZmVjdGl2ZSwgaWYgbm90IGlkZWFsCisgICAob2J2 aW91c2x5IGlmIHdlIGhhZCBpdCBhbGwgdG8gZG8gb3Zlciwgd2UnZCBjaGFuZ2UgYSBmZXcgdGhp bmdzKS4gVG8KKyAgIGFuc3dlciB0aGUgb2Z0LXJlcGVhdGVkIHF1ZXN0aW9uOiAiV2h5IGFyZSB0 aGVyZSBzbyBtYW55ICNpZmRlZnM/IiwKKyAgIGl0J3MgYmVjYXVzZToKKworICAgICAqIE1hbnkg b2YgdGhlbSBhcmUgcmVsYXRlZCB0byBmZWF0dXJlIHNlbGVjdGlvbiBhbmQgcHJvZ3JhbSBzaXpl LCBhbmQKKyAgICAgICBzbyBuZWVkIHRvIGJlIHRoZXJlIGFueXdheS4KKyAgICAgKiBUaG9zZSB0 aGF0IHRyZWF0IGNvbXBpbGVyLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgaGVhZGVyLWZpbGUsIGFuZAor ICAgICAgIHNpbWlsYXIgZGlmZmVyZW5jZXMgaGF2ZSBidWlsdCB1cCBvdmVyIHRpbWUgYXMgaHVu ZHJlZHMgb2YgcGVvcGxlCisgICAgICAgYWxsIG92ZXIgdGhlIHdvcmxkIGFkYXB0ZWQgQy1LZXJt aXQgdG8gdGhlaXIgcGFydGljdWxhcgorICAgICAgIGVudmlyb25tZW50cyBhbmQgc2VudCBiYWNr IHRoZWlyIGNoYW5nZXMuIFRoZXJlIG1pZ2h0IGJlIG1vcmUKKyAgICAgICBwb2xpdGljYWxseS1j b3JyZWN0IHdheXMgdG8gYWNoaWV2ZSBwb3J0YWJpbGl0eSwgYnV0IHRoaXMgb25lIGlzCisgICAg ICAgbmF0dXJhbCBhbmQgcHJvdmVuLiBUaGUgYmFzaWMgaWRlYSBpcyB0byBpbnRyb2R1Y2UgY2hh bmdlcyB0aGF0IGNhbgorICAgICAgIGJlIHNlbGVjdGVkIGJ5IGRlZmluaW5nIGEgc3ltYm9sLCB3 aGljaCwgaWYgbm90IGRlZmluZWQsIGxlYXZlcyB0aGUKKyAgICAgICBwcm9ncmFtIGV4YWN0bHkg YXMgaXQgd2FzIGJlZm9yZSB0aGUgY2hhbmdlcy4KKyAgICAgKiBBbHRob3VnaCBpdCBtaWdodCBi ZSBwb3NzaWJsZSB0byAiY2xlYW4gdXAiIHRoZSAiI2lmZGVmIG1lc3MiLAorICAgICAgIG5vYm9k eSBoYXMgYWNjZXNzIHRvIGFsbCB0aGUgaHVuZHJlZHMgb2YgcGxhdGZvcm1zIHNlcnZlZCBieSB0 aGUKKyAgICAgICAjaWZkZWZzIHRvIGNoZWNrIHRoZSByZXN1bHRzLgorCisgICBBbmQgdG8gYW5z d2VyIHRoZSBzZWNvbmQtbW9zdC1vZnQtcmVwZWF0ZWQgcXVlc3Rpb246ICJXaHkgZG9uJ3QgeW91 CisgICBqdXN0IHVzZSBHTlUgYXV0b2NvbmZpZyAvIGF1dG9tYWtlIC8gYXV0b3doYXRldmVyIGlu c3RlYWQgb2YKKyAgIGhhcmQtY29kaW5nIGFsbCB0aG9zZSAjaWZkZWZzPyIgQW5zd2VyczoKKwor ICAgICAqIFRoZSBHTlUgdG9vbHMgYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIHRoZSBwbGF0Zm9y bXMgd2hlcmUgQy1LZXJtaXQKKyAgICAgICBtdXN0IGJlIGJ1aWx0IGFuZCBJIHdvdWxkbid0IG5l Y2Vzc2FyaWx5IHRydXN0IHRoZW0gaWYgdGhleSB3ZXJlLgorICAgICAqIEVhY2ggcGxhdGZvcm0g aXMgYSBtb3ZpbmcgdGFyZ2V0LCBzbyB0aGUgdG9vbHMgdGhlbXNlbHZlcyB3b3VsZAorICAgICAg IG5lZWQgdG8gdXBkYXRlZCBiZWZvcmUgS2VybWl0IGNvdWxkIGJlIHVwZGF0ZWQuCisgICAgICog SXQgd291bGQgb25seSBhZGQgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIGFuIGFscmVh ZHkgY29tcGxleAorICAgICAgIHByb2Nlc3MuCisgICAgICogQ29udmVyc2lvbiBhdCB0aGlzIHBv aW50IHdvdWxkIG5vdCBiZSBwcmFjdGljYWwgdW5sZXNzIHRoZXJlIHdhcyBhCisgICAgICAgd2F5 IHRvIHRlc3QgdGhlIHJlc3VsdHMgb24gYWxsIHRoZSBodW5kcmVkcyBvZiBwbGF0Zm9ybXMgd2hl cmUKKyAgICAgICBDLUtlcm1pdCBpcyBzdXBwb3NlZCB0byBidWlsZC4KKworICAgV2hlbiB3cml0 aW5nIGNvZGUgZm9yIHRoZSBzeXN0ZW0taW5kZXBlbmRlbnQgQy1LZXJtaXQgbW9kdWxlcywgcGxl YXNlCisgICBzdGljayB0byB0aGUgZm9sbG93aW5nIGNvZGluZyBjb252ZW50aW9ucyB0byBlbnN1 cmUgcG9ydGFiaWxpdHkgdG8gdGhlCisgICB3aWRlc3QgcG9zc2libGUgdmFyaWV0eSBvZiBDIHBy ZXByb2Nlc3NvcnMsIGNvbXBpbGVycywgYW5kIGxpbmtlcnMsIGFzCisgICB3ZWxsIGFzIGNlcnRh aW4gbmV0d29yayBhbmQvb3IgZW1haWwgdHJhbnNwb3J0cy4gVGhlIHNhbWUgaG9sZHMgdHJ1ZQor ICAgZm9yIG1hbnkgb2YgdGhlICJzeXN0ZW0gZGVwZW5kZW50IiBtb2R1bGVzIHRvbzsgcGFydGlj dWxhcmx5IHRoZSBVbml4CisgICBvbmVzLCBzaW5jZSB0aGV5IG11c3QgYmUgYnVpbGRhYmxlIGJ5 IGEgd2lkZSB2YXJpZXR5IG9mIGNvbXBpbGVycyBhbmQKKyAgIGxpbmtlcnMsIG5ldyBhbmQgb2xk LgorCisgICBUaGlzIGxpc3QgZG9lcyBub3QgcHVycG9ydCB0byBiZSBjb21wcmVoZW5zaXZlLCBh bmQgYWx0aG91Z2ggc29tZSBpdGVtcworICAgb24gaXQgbWlnaHQgc2VlbSBmYXItZmV0Y2hlZCwg dGhleSB3b3VsZCBub3QgYmUgbGlzdGVkIHVubGVzcyBJIGhhZAorICAgZW5jb3VudGVyZWQgdGhl bSBzb21ld2hlcmUsIHNvbWUgdGltZS4gSSB3aXNoIEkgaGFkIGtlcHQgYmV0dGVyIHJlY29yZHMK KyAgIHNvIEkgY291bGQgY2l0ZSBzcGVjaWZpYyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycy4KKwor ICAgICAqIFRyeSB0byBrZWVwIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcyB1bmlxdWUgd2l0 aGluIDYgY2hhcmFjdGVycywKKyAgICAgICBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHVzZWQgYWNy b3NzIG1vZHVsZXMsIHNpbmNlIDYgaXMgdGhlIG1heGltdW0KKyAgICAgICBmb3Igc29tZSBvbGQg bGlua2VycyAoYWN0dWFsbHksIHRoaXMgZ29lcyBiYWNrIHRvIFRPUFMtMTAgYW5kIC0yMAorICAg ICAgIGFuZCBvdGhlciBvbGQgREVDIE9TJ3Mgd2hlcmUgQy1LZXJtaXQgbmV2ZXIgcmFuIGFueXdh eTsgYSBtb3JlCisgICAgICAgcmVhbGlzdGljIG1heGltdW0gaXMgcHJvYmFibHkgc29tZXdoZXJl IGJldHdlZW4gOCBhbmQgMTYpLiBXZSBrbm93CisgICAgICAgZm9yIGNlcnRhaW4gdGhhdCBWQVgg QyBoYXMgYSAzMS1jaGFyYWN0ZXIgbWF4IGJlY2F1c2UgaXQgY29tcGxhaW5zCisgICAgICAgLS0g b3RoZXJzIG1pZ2h0IG5vdCBjb21wbGFpbiwgYnV0IGp1c3Qgc2lsZW50bHkgdHJ1bmNhdGUsIHRo dXMKKyAgICAgICBmb2xkaW5nIHR3byBvciBtb3JlIHJvdXRpbmVzL3ZhcmlhYmxlcyBpbnRvIG9u ZS4KKyAgICAgKiBLZWVwIHByZXByb2Nlc3NvciBzeW1ib2xzIHVuaXF1ZSB3aXRoaW4gOCBjaGFy YWN0ZXJzOyB0aGF0J3MgdGhlCisgICAgICAgbWF4IGZvciBzb21lIHByZXByb2Nlc3NvcnMgKHNv cnJ5LCBJIGNhbid0IGdpdmUgYSBzcGVjaWZpYyBleGFtcGxlLAorICAgICAgIGJ1dCBpbiAxOTg4 IG9yIHRoZXJlYWJvdXRzLCBJIGhhZCB0byBjaGFuZ2UgY2hhcmFjdGVyLXNldCBzeW1ib2xzCisg ICAgICAgbGlrZSBUQ19MQVRJTjEgYW5kIFRDX0xBVElOMiB0byBUQ18xTEFUSU4gYW5kIFRDXzJM QVRJTiBiZWNhdXNlIHRoZQorICAgICAgIGRpZ2l0cyB3ZXJlIGJlaW5nIHRydW5jYXRlZCBhbmQg aWdub3JlZCBvbiBhIHBsYXRmb3JtIHdoZXJlIEkKKyAgICAgICBhY3R1YWxseSBoYWQgdG8gYnVp bGQgQy1LZXJtaXQgNUE7IHVuZm9ydHVuYXRlbHkgSSBkaWRuJ3Qgbm90ZQorICAgICAgIHdoaWNo IHBsYXRmb3JtIC0tIG1heWJlIHNvbWUgZWFybHkgVWx0cml4IHZlcnNpb24/KQorICAgICAqIERv bid0IGNyZWF0ZSBwcmVwcm9jZXNzb3Igc3ltYm9scywgb3IgdmFyaWFibGUgb3IgZnVuY3Rpb24g bmFtZXMsCisgICAgICAgdGhhdCBzdGFydCB3aXRoIHVuZGVyc2NvcmUgKF8pLiBUaGVzZSBhcmUg dXN1YWxseSByZXNlcnZlZCBmb3IKKyAgICAgICBpbnRlcm5hbCB1c2UgYnkgdGhlIGNvbXBpbGVy IGFuZCBoZWFkZXIgZmlsZXMuCisgICAgICogRG9uJ3QgcHV0ICNpbmNsdWRlIGRpcmVjdGl2ZXMg aW5zaWRlIGZ1bmN0aW9ucyBvciB7IGJsb2NrcyB9LgorICAgICAqIERvbid0IHVzZSB0aGUgI2lm IG9yICNlbGlmIHByZXByb2Nlc3NvciBjb25zdHJ1Y3Rpb25zLCBvbmx5IHVzZQorICAgICAgICNp ZmRlZiwgI2lmbmRlZiwgI2RlZmluZSwgI3VuZGVmLCBhbmQgI2VuZGlmLgorICAgICAqIFB1dCB0 b2tlbnMgYWZ0ZXIgI2VuZGlmIGluIGNvbW1lbnQgYnJhY2tldHMsIGUuZy4gI2VuZGlmIC8qIEZP TyAqLy4KKyAgICAgKiBEb24ndCBpbmRlbnQgcHJlcHJvY2Vzc29yIHN0YXRlbWVudHMgLSAjIG11 c3QgYWx3YXlzIGJlIGZpcnN0IGNoYXIKKyAgICAgICBvbiBsaW5lLgorICAgICAqIERvbid0IHB1 dCB3aGl0ZXNwYWNlIGFmdGVyICMgaW4gcHJlcHJvY2Vzc29yIHN0YXRlbWVudHMuCisgICAgICog RG9uJ3QgdXNlICNwcmFnbWEsIGV2ZW4gd2l0aGluICNpZmRlZnMgLS0gaXQgbWFrZXMgc29tZQor ICAgICAgIHByZXByb2Nlc3NvcnMgZ2l2ZSB1cC4KKyAgICAgKiBTYW1lIGdvZXMgZm9yICNtb2R1 bGUsICNpZiwgZXRjIC0gI2lmZGVmcyBkbyBOT1QgcHJvdGVjdCB0aGVtLgorICAgICAqIERvbid0 IHVzZSBsb2dpY2FsIG9wZXJhdG9ycyBpbiBwcmVwcm9jZXNzb3IgY29uc3RydWN0aW9ucy4KKyAg ICAgKiBBdm9pZCAjaWZkZWZzIGluc2lkZSBhcmd1bWVudCBsaXN0IHRvIGZ1bmN0aW9uIGNhbGxz IChJIGNhbid0CisgICAgICAgcmVtZW1iZXIgd2h5IHRoaXMgb25lIGlzIGhlcmUsIGJ1dCBwcm9i YWJseSBuZWVkbid0IGJlOyB3ZSBkbyB0aGlzCisgICAgICAgYWxsIHRoZSB0aW1lKS4KKyAgICAg KiBBbHdheXMgY2FzdCBzdHJsZW4oKSBpbiBleHByZXNzaW9ucyB0byBpbnQ6CisgICAgICAgaWYg KChpbnQpc3RybGVuKGZvbykgPCB4KS4uLgorICAgICAqIEF2b2lkIHR5cGVkZWZzOyB0aGV5IG1p Z2h0IGJlIHBvcnRhYmxlIGJ1dCB0aGV5IGFyZSB2ZXJ5IGNvbmZ1c2luZworICAgICAgIGFuZCB0 aGVyZSdzIG5vIHdheSB0byB0ZXN0IGZvciB0aGVpciBwcmVzZW5jZSBvciBhYnNlbmNlIGF0IGNv bXBpbGUKKyAgICAgICB0aW1lLiBVc2UgcHJlcHJvY2Vzc29yIHN5bWJvbHMgaW5zdGVhZCBpZiBw b3NzaWJsZTsgYXQgbGVhc3QgeW91CisgICAgICAgY2FuIHRlc3QgdGhlaXIgZGVmaW5pdGlvbnMu CisgICAgICogVW5zaWduZWQgbG9uZyBpcyBub3QgcG9ydGFibGU7IHVzZSBhIHByZXByb2Nlc3Nv ciBzeW1ib2wgKEtlcm1pdAorICAgICAgIHVzZXMgVUxPTkcgZm9yIHRoaXMpLgorICAgICAqIExv bmcgbG9uZyBpcyBub3QgcG9ydGFibGUuIElmIHlvdSByZWFsbHkgbmVlZCBpdCwgYmUgY3JlYXRp dmUuCisgICAgICogU2ltaWxhcmx5IDEyMzRMTCBpcyBub3QgcG9ydGFibGUsIG5vciBhbG1vc3Qg YW55IG90aGVyIGNvbnN0YW50CisgICAgICAgbW9kaWZpZXIgb3RoZXIgdGhhbiBMLgorICAgICAq IFVuc2lnbmVkIGNoYXIgaXMgbm90IHBvcnRhYmxlLCB1c2UgQ0hBUiAoYSBwcmVwcm9jZXNzb3Ig c3ltYm9sCisgICAgICAgZGVmaW5lZCBpbiB0aGUgS2VybWl0IGhlYWRlciBmaWxlcykgYW5kIGFs d2F5cyB0YWtlIHByZWNhdXRpb25zCisgICAgICAgYWdhaW5zdCBjaGFyYWN0ZXIgc2lnbmFnZSAo bW9yZSBhYm91dCB0aGlzIFs1MF1iZWxvdykuCisgICAgICogRG9uJ3QgdXNlIGluaXRpYWxpemVy cyB3aXRoIGF1dG9tYXRpYyBhcnJheXMgb3Igc3RydWN0czogaXQncyBub3QKKyAgICAgICBwb3J0 YWJsZS4KKyAgICAgKiBEb24ndCB1c2UgYmlnIGF1dG9tYXRpYyBhcnJheXMgb3Igc3RydWN0cyBp biBmdW5jdGlvbnMgdGhhdCBtaWdodAorICAgICAgIGJlIGNhbGxlZCByZWN1cnNpdmVseTsgc29t ZSBwbGF0Zm9ybXMgaGF2ZSBmaXhlZC1zaXplIHN0YWNrcyAoZS5nLgorICAgICAgIFdpbmRvd3Mg OXg6IDI1NkspIGFuZCByZWN1cnNpdmUgZnVuY3Rpb25zIGNyYXNoIHdpdGggc3RhY2sKKyAgICAg ICBvdmVyZmxvdy4gRXZlbiB3aGVuIHRoZXJlIGlzIG5vdCBhIGNvbXBpbGVyIGxpbWl0YXRpb24s IHRoaXMgY2F1c2VzCisgICAgICAgbWVtb3J5IHRvIGJlIGNvbnN1bWVkIHdpdGhvdXQgYm91bmQs IGFuZCBjYW4gZW5kIHVwIGZpbGxpbmcgc3dhcAorICAgICAgIHNwYWNlLgorICAgICAqIERvbid0 IGFzc3VtZSB0aGF0IHN0cnVjdCBhc3NpZ25tZW50IHBlcmZvcm1zIGEgY29weSwgb3IgdGhhdCBp dAorICAgICAgIGV2ZW4gZXhpc3RzLgorICAgICAqIERvbid0IHVzZSBzaXplb2YgdG8gZ2V0IHRo ZSBzaXplIG9mIGFuIGFycmF5OyBzb21lb25lIG1pZ2h0IGNvbWUKKyAgICAgICBhbG9uZyBsYXRl ciBhbmQgYW5kIGNoYW5nZSBpdCBmcm9tIHN0YXRpYyB0byBtYWxsb2MnZC4gQWx3YXlzIHVzZSBh CisgICAgICAgc3ltYm9sIHRvIHJlZmVyIHRvIHRoZSBhcnJheSdzIHNpemUuCisgICAgICogRG9u J3QgcHV0IHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMgaW50byBoZWFkZXIgZmlsZXMg dGhhdAorICAgICAgIGFyZSB1c2VkIGJ5IG1vZHVsZXMgdGhhdCBkb24ndCBjb250YWluIHRoYXQg ZnVuY3Rpb247IHRoZSBsaW5rIHN0ZXAKKyAgICAgICBjYW4gZmFpbCB3aXRoIHVucmVzb2x2ZWQg cmVmZXJlbmNlcyAoZS5nLiBvbiBBT1MvVlMpLgorICAgICAqIEF2b2lkIHRoZSBjb25zdHJ1Y3Rp b24gKisrcCAodGhlIG9yZGVyIG9mIGV2YWx1YXRpb24gdmFyaWVzOyBpdAorICAgICAgIHNob3Vs ZG4ndCBidXQgYXQgbGVhc3Qgb25lIGNvbXBpbGVyIGhhZCBhIGJ1ZyB0aGF0IG1hZGUgbWUgaW5j bHVkZQorICAgICAgIHRoaXMgaXRlbSkuCisgICAgICogRG9uJ3QgdXNlIHRyaXBsZSBhc3NpZ25t ZW50cywgbGlrZSBhID0gYiA9IGMgPSAwOyAob3IgcXVhZHJ1cGxlLAorICAgICAgIGV0YykuIFNv bWUgY29tcGlsZXJzIGdlbmVyYXRlIGJhZCBjb2RlIGZvciB0aGVzZSwgb3IgY3Jhc2gsIGV0Ywor ICAgICAgIChzb21lIHZlcnNpb24gb2YgREVDIEMgYXMgSSByZWNhbGwpLgorICAgICAqIFNvbWUg Y29tcGlsZXJzIGRvbid0IGFsbG93IHN0cnVjdHVyZSBtZW1iZXJzIHRvIGhhdmUgdGhlIHNhbWUg bmFtZXMKKyAgICAgICBhcyBvdGhlciBpZGVudGlmaWVycy4gVHJ5IHRvIGdpdmUgc3RydWN0dXJl IG1lbWJlcnMgdW5pcXVlIG5hbWVzLgorICAgICAqIERvbid0IGFzc3VtZSBhbnl0aGluZyBhYm91 dCBvcmRlciBvZiBldmFsdWF0aW9uIGluIGJvb2xlYW4KKyAgICAgICBleHByZXNzaW9ucywgb3Ig dGhhdCB0aGV5IHdpbGwgc3RvcCBlYXJseSBpZiBhIHJlcXVpcmVkIGNvbmRpdGlvbgorICAgICAg IGlzIG5vdCB0cnVlLCBlLmcuOgorICBpZiAoaSA+IDAgJiYgcFtpLTFdID09IGJsYWgpCisKKyAg ICAgICBjYW4gc3RpbGwgZHVtcCBjb3JlIGlmIGkgPT0gMCAoaG9wZWZ1bGx5IHRoaXMgaXMgbm90 IHRydWUgb2YgYW55CisgICAgICAgbW9kZXJuIGNvbXBpbGVyLCBidXQgSSB3b3VsZCBub3QgaGF2 ZSBzYWlkIHRoaXMgaWYgaXQgZGlkIG5vdAorICAgICAgIGFjdHVhbGx5IGhhcHBlbiBzb21ld2hl cmUpLgorICAgICAqIERvbid0IGhhdmUgYSBzd2l0Y2goKSBzdGF0ZW1lbnQgd2l0aCBubyBjYXNl cyAoZS5nLiBiZWNhdXNlIG9mCisgICAgICAgI2lmZGVmcyk7IHRoaXMgaXMgYSBmYXRhbCBlcnJv ciBpbiBzb21lIGNvbXBpbGVycy4KKyAgICAgKiBEb24ndCBwdXQgbG90cyBvZiBjb2RlIGluIGEg c3dpdGNoIGNhc2U7IG1vdmUgaXQgb3V0IHRvIGEgc2VwYXJhdGUKKyAgICAgICBmdW5jdGlvbjsg c29tZSBjb21waWxlcnMgcnVuIG91dCBvZiBtZW1vcnkgd2hlbiBwcmVzZW50ZWQgd2l0aCBhCisg ICAgICAgaHVnZSBzd2l0Y2goKSBzdGF0ZW1lbnQgLS0gaXQncyBub3QgdGhlIG51bWJlciBvZiBj YXNlcyB0aGF0CisgICAgICAgbWF0dGVyczsgaXQncyB0aGUgb3ZlcmFsbCBhbW91bnQgb2YgY29k ZS4KKyAgICAgKiBTb21lIGNvbXBpbGVycyBtaWdodCBhbHNvIGxpbWl0IHRoZSBudW1iZXIgb2Yg c3dpdGNoKCkgY2FzZXMsIGUuZy4KKyAgICAgICB0byAyNTQuCisgICAgICogRG9uJ3QgcHV0IGFu eXRoaW5nIGJldHdlZW4gInN3aXRjaCgpIHsiIGFuZCAiY2FzZToiIC0tIHN3aXRjaAorICAgICAg IGJsb2NrcyBhcmUgbm90IGxpa2Ugb3RoZXIgYmxvY2tzLgorICAgICAqIERvbid0IGp1bXAgaW50 byBvciBvdXQgb2Ygc3dpdGNoZXMuCisgICAgICogRG9uJ3QgbWFrZSBjaGFyYWN0ZXItc3RyaW5n IGNvbnN0YW50cyBsb25nZXIgdGhhbiBhYm91dCAyNTAgYnl0ZXMuCisgICAgICAgTG9uZ2VyIHN0 cmluZ3Mgc2hvdWxkIGJlIGJyb2tlbiB1cCBpbnRvIGFycmF5cyBvZiBzdHJpbmdzLgorICAgICAq IERvbid0IHdyaXRlIGludG8gY2hhcmFjdGVyLXN0cmluZyBjb25zdGFudHMgKG9idmlvdXNseSku IEV2ZW4gd2hlbgorICAgICAgIHlvdSBrbm93IHlvdSBhcmUgbm90IHdyaXRpbmcgcGFzdCB0aGUg ZW5kOyB0aGUgY29tcGlsZXIgb3IgbGlua2VyCisgICAgICAgbWlnaHQgaGF2ZSBwdXQgdGhlbSBp bnRvIHJlYWQtb25seSBhbmQvb3Igc2hhcmVkIG1lbW9yeSwgYW5kL29yCisgICAgICAgY29hbGVz Y2VkIG11bHRpcGxlIGVxdWFsIGNvbnN0YW50cyBzbyBpZiB5b3UgY2hhbmdlIG9uZSB5b3UgY2hh bmdlCisgICAgICAgdGhlbSBhbGwuCisgICAgICogRG9uJ3QgZGVwZW5kIG9uICdccicgYmVpbmcg Y2FycmlhZ2UgcmV0dXJuLgorICAgICAqIERvbid0IGRlcGVuZCBvbiAnXG4nIGJlaW5nIGxpbmVm ZWVkIG9yIGZvciB0aGF0IG1hdHRlciBhbnkgU0lOR0xFCisgICAgICAgY2hhcmFjdGVyLgorICAg ICAqIERvbid0IGRlcGVuZCBvbiAnXHInIGFuZCAnXG4nIGJlaW5nIGRpZmZlcmVudCAoZS5nLiBh cyBzZXBhcmF0ZQorICAgICAgIHN3aXRjaCgpIGNhc2VzKS4KKyAgICAgKiBJbiBvdGhlciB3b3Jk cywgZG9uJ3QgdXNlIFxuIG9yIFxyIHRvIHN0YW5kIGZvciBzcGVjaWZpYworICAgICAgIGNoYXJh Y3RlcnM7IHVzZSBcMDEyIGFuZCBcMDE1IGluc3RlYWQuCisgICAgICogRG9uJ3QgY29kZSBmb3Ig ImJ1enp3b3JkIDEuMCBjb21wbGlhbmNlIiwgdW5sZXNzICJidXp6d29yZCIgaXMgSyZSCisgICAg ICAgYW5kICIxLjAiIGlzIHRoZSBmaXJzdCBlZGl0aW9uLgorICAgICAqIERvbid0IHVzZSBvciBk ZXBlbmQgb24gYW55dGhpbmdfdCAoc2l6ZV90LCBwaWRfdCwgZXRjKSwgZXhjZXB0CisgICAgICAg dGltZV90LCB3aXRob3V0ICNpZmRlZiBwcm90ZWN0aW9uICh0aW1lX3QgaXMgdGhlIG9ubHkgb25l IEkndmUKKyAgICAgICBmb3VuZCB0aGF0IGlzIGFjY2VwdGVkIGV2ZXJ5d2hlcmUpLiBUaGlzIGlz IGEgdG91Z2ggb25lIGJlY2F1c2UgdGhlCisgICAgICAgc2FtZSBmdW5jdGlvbiBtaWdodCByZXF1 aXJlIChzYXkpIGEgc2l6ZV90IGFyZyBvbiBvbmUgcGxhdGZvcm0sCisgICAgICAgd2hlcmVhcyBz aXplX3QgaXMgdW5oZWFyZCBvZiBvbiBhbm90aGVyOyBvciB3b3JzZSwgaXQgbWlnaHQgcmVxdWly ZQorICAgICAgIGEgdG90YWxseSBkaWZmZXJlbnQgZGF0YSB0eXBlLCBsaWtlIGludCBvciBsb25n IG9yIHNvbWUgb3RoZXIKKyAgICAgICB0eXBlZGVmJ2QgdGhpbmcuIEl0IGhhcyBvZnRlbiBwcm92 ZWQgbmVjZXNzYXJ5IHRvIGRlZmluZSBhIHN5bWJvbAorICAgICAgIHRvIHN0YW5kIGZvciB0aGUg dHlwZSBvZiBhIHBhcnRpY3VsYXIgYXJndW1lbnQgdG8gYSBwYXJ0aWN1bGFyCisgICAgICAgbGli cmFyeSBvciBzeXN0ZW0gZnVuY3Rpb24gdG8gZ2V0IGFyb3VuZCB0aGlzIHByb2JsZW0uCisgICAg ICogRG9uJ3QgdXNlIG9yIGRlcGVuZCBvbiBpbnRlcm5hdGlvbmFsaXphdGlvbiAoImkxOG4iKSBm ZWF0dXJlcywKKyAgICAgICB3Y2hhcl90LCBsb2NhbGVzLCBldGMsIGluIHBvcnRhYmxlIGNvZGU7 IHRoZXkgYXJlIG5vdCBwb3J0YWJsZS4KKyAgICAgICBBbnl3YXksIGxvY2FsZXMgYXJlIG5vdCB0 aGUgcmlnaHQgbW9kZWwgZm9yIEtlcm1pdCdzCisgICAgICAgbXVsdGktY2hhcmFjdGVyLXNldCBz dXBwb3J0LiBLZXJtaXQgZG9lcyBhbGwgY2hhcmFjdGVyLXNldAorICAgICAgIGNvbnZlcnNpb24g aXRzZWxmIGFuZCBkb2VzIG5vdCB1c2UgYW55IGV4dGVybmFsIGxpYnJhcmllcyBvcgorICAgICAg IGZ1bmN0aW9ucy4KKyAgICAgKiBJbiBwYXJ0aWN1bGFyLCBkb24ndCB1c2UgYW55IGxpYnJhcnkg ZnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoIHdpZGUKKyAgICAgICBjaGFyYWN0ZXJzIG9yIFVuaWNv ZGUgaW4gYW55IGZvcm0uIFRoZXNlIGFyZSBub3Qgb25seSBub25wb3J0YWJsZSwKKyAgICAgICBi dXQgYSBjb25zdGFudGx5IHNoaWZ0aW5nIHRhcmdldCAoZS5nLiB0aGUgb25lcyBpbiBnbGliYyku CisgICAgICogRG9uJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbiBhYm91dCBzaWduYWwgaGFuZGxlciB0 eXBlLiBJdCBjYW4gYmUKKyAgICAgICB2b2lkLCBpbnQsIGxvbmcsIG9yIGFueXRoaW5nIGVsc2Uu IEFsd2F5cyBkZWNsYXJlIHNpZ25hbCBoYW5kbGVycworICAgICAgIGFzIFNJR1RZUCAoc2VlIGRl ZmluaXRpb24gaW4gY2tjZGViLmggYW5kIGF1Z21lbnQgaXQgaWYgbmVjZXNzYXJ5KQorICAgICAg IGFuZCBhbHdheXMgdXNlIFNJR1JFVFVSTiBhdCBleGl0IHBvaW50cyBmcm9tIHNpZ25hbCBoYW5k bGVycy4KKyAgICAgKiBTaWduYWxzIHNob3VsZCBhbHdheXMgYmUgcmUtYXJtZWQgdG8gYmUgdXNl ZCBhZ2FpbiAodGhpcyBiYXJlbHkKKyAgICAgICBzY3JhdGNoZXMgdGhlIHN1cmZhY2UgLS0gdGhl IGRpZmZlcmVuY2VzIGJldHdlZW4gQlNEL1Y3IGFuZCBTeXN0ZW0KKyAgICAgICBWIGFuZCBQT1NJ WCBzaWduYWwgaGFuZGxpbmcgYXJlIG51bWVyb3VzLCBhbmQgc29tZSBwbGF0Zm9ybXMgZG8gbm90 CisgICAgICAgZXZlbiBzdXBwb3J0IHNpZ25hbHMsIGFsYXJtcywgb3IgbG9uZ2ptcHMgY29ycmVj dGx5IG9yIGF0IGFsbCAtLQorICAgICAgIGF2b2lkIGFsbCBvZiB0aGlzIGlmIHlvdSBjYW4pLgor ICAgICAqIE9uIHRoZSBvdGhlciBoYW5kLCBkb24ndCBhc3N1bWUgdGhhdCBzaWduYWxzIGFyZSBk aXNhcm1lZCBhZnRlcgorICAgICAgIGJlaW5nIHJhaXNlZC4gSW4gc29tZSBwbGF0Zm9ybXMgeW91 IGhhdmUgdG8gcmUtYXJtIHRoZW0sIGluIG90aGVycworICAgICAgIHRoZXkgc3RheSBhcm1lZC4K KyAgICAgKiBEb24ndCBjYWxsIG1hbGxvYygpIGFuZCBmcmllbmRzIGZyb20gYSBzaWduYWwgaGFu ZGxlcjsgZG9uJ3QgZG8KKyAgICAgICBhbnl0aGluZyBidXQgc2V0dGluZyBpbnRlZ2VyIGdsb2Jh bCB2YXJpYWJsZXMgaW4gYSBzaWduYWwgaGFuZGxlci4KKyAgICAgKiBtYWxsb2MoKSBkb2VzIG5v dCBpbml0aWFsaXplIGFsbG9jYXRlZCBtZW1vcnkgLS0gaXQgbmV2ZXIgc2FpZCBpdAorICAgICAg IGRpZC4gRG9uJ3QgZXhwZWN0IGl0IHRvIGJlIGFsbCAwJ3MuCisgICAgICogRGlkIFlvdSBLbm93 OiBtYWxsb2MoKSBjYW4gc3VjY2VlZCBhbmQgdGhlIHByb2dyYW0gY2FuIHN0aWxsIGR1bXAKKyAg ICAgICBjb3JlIGxhdGVyIHdoZW4gaXQgYXR0ZW1wdHMgdG8gdXNlIHRoZSBtYWxsb2MnZCBtZW1v cnk/IChUaGlzCisgICAgICAgaGFwcGVucyB3aGVuIGFsbG9jYXRpb24gaXMgZGVmZXJyZWQgdW50 aWwgdXNlIGFuZCBzd2FwIHNwYWNlIGlzCisgICAgICAgZnVsbC4pCisgICAgICogbWVtc2V0KCks IG1lbW1vdmUoKSwgYW5kIG1lbWNweSgpIGFyZSBub3QgcG9ydGFibGUsIGRvbid0IHVzZSB0aGVt CisgICAgICAgd2l0aG91dCBwcm90ZWN0aW5nIHRoZW0gaW4gaWZkZWZzICh3ZSBoYXZlIFVTRV9N RU1DUFkgZm9yIHRoaXMpLgorICAgICAgIGJ6ZXJvKCkvYmNvcHkoKSB0b28sIGV4Y2VwdCB3ZSdy ZSBndWFyYW50ZWVkIHRvIGhhdmUKKyAgICAgICBiemVybygpL2Jjb3B5KCkgd2hlbiB1c2luZyB0 aGUgc29ja2V0cyBsaWJyYXJ5IChub3QgcmVhbGx5KS4gU2VlCisgICAgICAgZXhhbXBsZXMgaW4g dGhlIHNvdXJjZS4KKyAgICAgKiBEb24ndCBhc3N1bWUgdGhhdCBzdHJuY3B5KCkgc3RvcHMgb24g dGhlIGZpcnN0IG51bGwgYnl0ZSAtLSBtb3N0CisgICAgICAgdmVyc2lvbnMgYWx3YXlzIGNvcHkg dGhlIG51bWJlciBvZiBieXRlcyBnaXZlbiBpbiBhcmcgMywgcGFkZGluZworICAgICAgIG91dCB3 aXRoIDAncyBhbmQgb3ZlcndyaXRpbmcgd2hhdGV2ZXIgd2FzIHRoZXJlIGJlZm9yZS4gVXNlCisg ICAgICAgQy1LZXJtaXQgY2tzdHJuY3B5KCkgaWYgeW91IHdhbnQgcHJlZGljdGFibGUgbm9uLXBh ZGRpbmcgYmVoYXZpb3IsCisgICAgICAgZ3VhcmFudGVlZCBOVUwtdGVybWluYXRpb24sIGFuZCBh IHVzZWZ1bCByZXR1cm4gY29kZS4KKyAgICAgKiBESUQgWU9VIEtOT1cuLiB0aGF0IHNvbWUgdmVy c2lvbnMgb2YgaW5ldF9ibGFoKCkgcm91dGluZXMgcmV0dXJuIElQCisgICAgICAgYWRkcmVzc2Vz IGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgd2hpbGUgb3RoZXJzIHJldHVybiB0aGVtIGxvY2FsCisg ICAgICAgbWFjaGluZSBieXRlIG9yZGVyPyBTbyBwYXNzaW5nIHRoZW0gdG8gbnRvaHMoKSBvciB3 aGF0ZXZlciBpcyBub3QKKyAgICAgICBhbHdheXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLgorICAg ICAqIERvbid0IHVzZSBBTlNJLWZvcm1hdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgd2l0aG91dCAj aWZkZWYKKyAgICAgICBDS19BTlNJQywgYW5kIGFsd2F5cyBwcm92aWRlIGFuICNlbHNlIGZvciB0 aGUgbm9uLUFOU0kgY2FzZS4KKyAgICAgKiBVc2UgdGhlIEtlcm1pdCBfUFJPVE9UWVAoKSBtYWNy byBmb3IgZGVjbGFyaW5nIGZ1bmN0aW9uIHByb3RvdHlwZXM7CisgICAgICAgaXQgd29ya3MgaW4g Ym90aCB0aGUgQU5TSSBhbmQgbm9uLUFOU0kgY2FzZXMuCisgICAgICogRG9uJ3QgZGVwZW5kIG9u IGFueSBvdGhlciBBTlNJIHByZXByb2Nlc3NvciBmZWF0dXJlcyBsaWtlICJwYXN0aW5nIgorICAg ICAgIC0tIHRoZXkgYXJlIG9mdGVuIG1pc3Npbmcgb3Igbm9ub3BlcmF0aW9uYWwuCisgICAgICog RG9uJ3QgYXNzdW1lIGFueSBDKysgc3ludGF4IG9yIHNlbWFudGljcy4KKyAgICAgKiBEb24ndCB1 c2UgLy8gYXMgYSBjb21tZW50IGludHJvZHVjZXIuIEMgaXMgbm90IEMrKy4KKyAgICAgKiBEb24n dCBkZWNsYXJlIGEgc3RyaW5nIGFzICJjaGFyIGZvb1tdIiBpbiBvbmUgbW9kdWxlIGFuZCAiZXh0 ZXJuCisgICAgICAgY2hhciAqIGZvbyIgaW4gYW5vdGhlciwgb3IgdmljZS12ZXJzYTogdGhpcyBj YXVzZXMgY29yZSBkdW1wcy4KKyAgICAgKiBXaXRoIGNvbXBpbGVyIG1ha2VycyBmYWxsaW5nIGFs bCBvdmVyIHRoZW1zZWx2ZXMgdHJ5aW5nIHRvIG91dGRvCisgICAgICAgZWFjaCBvdGhlciBpbiBB TlNJIHN0cmljdG5lc3MsIGl0IGhhcyBiZWNvbWUgaW5jcmVhc2luZ2x5IG5lY2Vzc2FyeQorICAg ICAgIHRvIGNhc3QgRVZFUllUSElORy4gRXNwZWNpYWxseSBjaGFyIHZzIHVuc2lnbmVkIGNoYXIu IFdlIG5lZWQgdG8KKyAgICAgICB1c2UgdW5zaWduZWQgY2hhcnMgaWYgd2Ugd2FudCB0byBkZWFs IHdpdGggOC1iaXQgY2hhcmFjdGVyIHNldHMsCisgICAgICAgYnV0IG1vc3QgY2hhcmFjdGVyLSBh bmQgc3RyaW5nLW9yaWVudGVkIEFQSXMgd2FudCAoc2lnbmVkKSBjaGFyCisgICAgICAgYXJndW1l bnRzLCBzbyBleHBsaWNpdCBjYXN0cyBhcmUgbmVjZXNzYXJ5LiBJdCB3b3VsZCBiZSBuaWNlIGlm CisgICAgICAgZXZlcnkgY29tcGlsZXIgaGFkIGEgLWZ1bnNpZ25lZC1jaGFyIG9wdGlvbiAoYXMg Z2NjIGRvZXMpLCBidXQgdGhleQorICAgICAgIGRvbid0LgorICAgICAqIGFbeF0sIHdoZXJlIHgg aXMgYW4gdW5zaWduZWQgY2hhciwgY2FuIHByb2R1Y2UgYSB3aWxkIG1lbW9yeQorICAgICAgIHJl ZmVyZW5jZSBpZiB4LCB3aGVuIHByb21vdGVkIHRvIGFuIGludCwgYmVjb21lcyBuZWdhdGl2ZS4g Q2FzdCBpdAorICAgICAgIHRvICh1bnNpZ25lZCksIGV2ZW4gdGhvdWdoIGl0IEFMUkVBRFkgSVMg dW5zaWduZWQuCisgICAgICogQmUgY2FyZWZ1bCBob3cgeW91IGRlY2xhcmUgZnVuY3Rpb25zIHRo YXQgaGF2ZSBjaGFyIG9yIGxvbmcKKyAgICAgICBhcmd1bWVudHM7IGZvciBBTlNJIGNvbXBpbGVy cyB5b3UgTVVTVCB1c2UgQU5TSSBkZWNsYXJhdGlvbnMgdG8KKyAgICAgICBhdm9pZCBwcm9tb3Rp b24gcHJvYmxlbXMsIGJ1dCB5b3UgY2FuJ3QgdXNlIEFOU0kgZGVjbGFyYXRpb25zIHdpdGgKKyAg ICAgICBub24tQU5TSSBjb21waWxlcnMuIFRodXMgZGVjbGFyYXRpb25zIG9mIHN1Y2ggZnVuY3Rp b25zIG11c3QgYmUKKyAgICAgICBoaWRlb3VzbHkgZW50d2luZWQgaW4gI2lmZGVmcy4gRXhhbXBs ZToKKyAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgUHV0IGNoYXJhY3RlciBpbiBz ZXJ2ZXIgY29tbWFuZCBidWZmZXIgICovCisgICNpZmRlZiBDS19BTlNJQworICBwdXRzcnYoY2hh ciBjKQorICAjZWxzZQorICBwdXRzcnYoYykgY2hhciBjOworICAjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KKyAgLyogcHV0c3J2ICovIHsKKyAgICAgICpzcnZwdHIrKyA9IGM7CisgICAgICAqc3J2cHRy ID0gJ1wwJzsgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBidWZmZXIgaXMgbnVsbC10ZXJtaW5hdGVk ICovCisgICAgICByZXR1cm4oMCk7CisgIH0KKworICAgICAqIEJlIGNhcmVmdWwgaG93IHlvdSBy ZXR1cm4gY2hhcmFjdGVycyBmcm9tIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBpbnQKKyAgICAgICB2 YWx1ZXMgLS0gImdldGMtbGlrZSBmdW5jdGlvbnMiIC0tIGluIHRoZSBBTlNJIHdvcmxkLiBVbmxl c3MgeW91CisgICAgICAgZXhwbGljaXRseSBjYXN0IHRoZSByZXR1cm4gdmFsdWUgdG8gKHVuc2ln bmVkKSwgaXQgaXMgbGlrZWx5IHRvIGJlCisgICAgICAgInByb21vdGVkIiB0byBhbiBpbnQgYW5k IGhhdmUgaXRzIHNpZ24gZXh0ZW5kZWQuCisgICAgICogQXQgbGVhc3Qgb25lIGNvbXBpbGVyICh0 aGUgb25lIG9uIERFQyBPU0YvMSAxLjMpIHRyZWF0cyAiLyoiIGFuZAorICAgICAgICIqLyIgd2l0 aGluIHN0cmluZyBjb25zdGFudHMgYXMgY29tbWVudCBiZWdpbiBhbmQgZW5kLiBObyBhbW91bnQg b2YKKyAgICAgICAjaWZkZWZzIHdpbGwgZ2V0IGFyb3VuZCB0aGlzIG9uZS4gWW91IHNpbXBseSBj YW4ndCBwdXQgdGhlc2UKKyAgICAgICBzZXF1ZW5jZXMgaW4gYSBzdHJpbmcgY29uc3RhbnQsIGUu Zy4gIi91c3IvbG9jYWwvZG9jLyouKiIuCisgICAgICogQXZvaWQgcHV0dGluZyBtdWx0aXBsZSBt YWNybyByZWZlcmVuY2VzIG9uIGEgc2luZ2xlIGxpbmUsIGUuZy46CisgIHB1dGNoYXIoQlMpOyBw dXRjaGFyKFNQKTsgcHV0Y2hhcihCUykKKworICAgVGhpcyBvdmVyZmxvd3MgdGhlIENQUCBvdXRw dXQgYnVmZmVyIG9mIG1vcmUgdGhhbiBhIGZldyBDIHByZXByb2Nlc3NvcnMKKyAgICh0aGlzIGhh cHBlbmVkLCBmb3IgZXhhbXBsZSwgd2l0aCBTdW5PUyA0LjEgY2MsIHdoaWNoIGV2aWRlbnRseSBo YXMgYQorICAgMUsgbWFjcm8gZXhwYW5zaW9uIGJ1ZmZlcikuCisKKyAgIEMtS2VybWl0IG5lZWRz IGNvbnN0YW50IGFkanVzdG1lbnQgdG8gbmV3IE9TIGFuZCBjb21waWxlciByZWxlYXNlcy4KKyAg IEV2ZXJ5IG5ldyBPUyByZWxlYXNlIHNodWZmbGVzIGhlYWRlciBmaWxlcyBvciB0aGVpciBjb250 ZW50cywgb3IKKyAgIHByb3RvdHlwZXMsIG9yIGRhdGEgdHlwZXMsIG9yIGxldmVscyBvZiBBTlNJ IHN0cmljdG5lc3MsIGV0Yy4gRXZlcnkKKyAgIHRpbWUgeW91IG1ha2UgYW4gYWRqdXN0bWVudCB0 byByZW1vdmUgYSBuZXcgY29tcGlsYXRpb24gZXJyb3IsIEJFIFZFUlkKKyAgIENBUkVGVUwgdG8g I2lmZGVmIGl0IG9uIGEgc3ltYm9sIHVuaXF1ZSB0byB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gc28K KyAgIHRoYXQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gKGFuZCBhbGwgb3RoZXIgY29uZmln dXJhdGlvbnMgb24gYWxsCisgICBvdGhlciBwbGF0Zm9ybXMpIHJlbWFpbiBhcyBiZWZvcmUuCisK KyAgIEFzc3VtZSBub3RoaW5nLiBEb24ndCBhc3N1bWUgaGVhZGVyIGZpbGVzIGFyZSB3aGVyZSB0 aGV5IGFyZSBzdXBwb3NlZAorICAgdG8gYmUsIHRoYXQgdGhleSBjb250YWluIHdoYXQgeW91IHRo aW5rIHRoZXkgY29udGFpbiwgdGhhdCB0aGV5IGRlZmluZQorICAgc3BlY2lmaWMgc3ltYm9scyB0 byBoYXZlIGNlcnRhaW4gdmFsdWVzIC0tIG9yIGRlZmluZSB0aGVtIGF0IGFsbCEgRG9uJ3QKKyAg IGFzc3VtZSBzeXN0ZW0gaGVhZGVyIGZpbGVzIHByb3RlY3QgdGhlbXNlbHZlcyBhZ2FpbnN0IG11 bHRpcGxlCisgICBpbmNsdXNpb24uIERvbid0IGFzc3VtZSB0aGF0IHBhcnRpY3VsYXIgc3lzdGVt IG9yIGxpYnJhcnkgY2FsbHMgYXJlCisgICBhdmFpbGFibGUsIG9yIHRoYXQgdGhlIGFyZ3VtZW50 cyBhcmUgd2hhdCB5b3UgdGhpbmsgdGhleSBhcmUgLS0gb3JkZXIsCisgICBkYXRhIHR5cGUsIHBh c3NlZCBieSByZWZlcmVuY2UgdnMgdmFsdWUsIGV0Yy4gQmUgY29uc2VydmF0aXZlIHdoZW4KKyAg IGF0dGVtcHRpbmcgdG8gd3JpdGUgcG9ydGFibGUgY29kZS4gQXZvaWQgYWxsIGFkdmFuY2VkIGZl YXR1cmVzLgorCisgICBJZiB5b3Ugc2VlIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IG1ha2Ugc2Vu c2UsIGRvbid0IGFzc3VtZSBpdCdzIGEKKyAgIG1pc3Rha2UgLS0gaXQgbWlnaHQgYmUgdGhlcmUg Zm9yIGEgcmVhc29uLCBhbmQgY2hhbmdpbmcgaXQgb3IgcmVtb3ZpbmcKKyAgIGlzIGxpa2VseSB0 byBjYXVzZSBjb21waWxhdGlvbiwgbGlua2luZywgb3IgcnVudGltZSBmYWlsdXJlcyBzb21ldGlt ZSwKKyAgIHNvbWV3aGVyZS4gU29tZSBodWdlIHBlcmNlbnRhZ2Ugb2YgdGhlIGNvZGUsIGVzcGVj aWFsbHkgaW4gdGhlCisgICBwbGF0Zm9ybS1kZXBlbmRlbnQgbW9kdWxlcywgaXMgd29ya2Fyb3Vu ZHMgZm9yIGNvbXBpbGVyLCBsaW5rZXIsIG9yIEFQSQorICAgYnVncy4KKworICAgQnV0IGZpbmFs bHkuLi4gZmVlbCBmcmVlIHRvIHZpb2xhdGUgYW55IG9yIGFsbCBvZiB0aGVzZSBydWxlcyBpbgor ICAgcGxhdGZvcm0tc3BlY2lmaWMgbW9kdWxlcyBmb3IgZW52aXJvbm1lbnRzIGluIHdoaWNoIHRo ZSBydWxlcyBhcmUKKyAgIGNlcnRhaW4gbm90IHRvIGFwcGx5LiBGb3IgZXhhbXBsZSwgaW4gVk1T LXNwZWNpZmljIGNvZGUsIGl0IGlzIE9LIHRvCisgICB1c2UgI2lmLCBiZWNhdXNlIFZBWCBDLCBE RUMgQywgYW5kIFZNUyBHQ0MgYWxsIHN1cHBvcnQgaXQuCisKKyAgIFsgWzUxXUNvbnRlbnRzIF0g WyBbNTJdQy1LZXJtaXQgXSBbIFs1M11LZXJtaXQgSG9tZSBdCisKKzMuMS4gTWVtb3J5IExlYWtz CisKKyAgIFRoZSBDIGxhbmd1YWdlIGFuZCBzdGFuZGFyZCBDIGxpYnJhcnkgYXJlIG5vdG9yaW91 c2x5IGluYWRlcXVhdGUgYW5kCisgICB1bnNhZmUuIFN0cmluZ3MgYXJlIGFycmF5cyBvZiBjaGFy YWN0ZXJzLCB1c3VhbGx5IHJlZmVyZW5jZWQgdGhyb3VnaAorICAgcG9pbnRlcnMuIFRoZXJlIGlz IG5vIG5hdGl2ZSBzdHJpbmcgZGF0YXR5cGUuIEJ1ZmZlcnMgYXJlIGZpeGVkIHNpemUsCisgICBh bmQgQyBwcm92aWRlcyBubyBydW50aW1lIGJvdW5kcyBjaGVja2luZywgdGh1cyBhbGxvd2luZyBv dmVyd3JpdGluZyBvZgorICAgb3RoZXIgZGF0YSBvciBldmVuIHByb2dyYW0gY29kZS4gV2l0aCB0 aGUgcG9wdWxhcml6YXRpb24gb2YgdGhlCisgICBJbnRlcm5ldCwgdGhlICJidWZmZXIgZXhwbG9p dCIgaGFzIGJlY29tZSBhIHByZWZlcnJlZCBtZXRob2QgZm9yCisgICBoYWNrZXJzIHRvIGhpamFj ayBwcml2aWxlZ2VkIHByb2dyYW1zOyBsb25nIGRhdGEgc3RyaW5ncyBhcmUgZmVkIHRvIGEKKyAg IHByb2dyYW0gaW4gaG9wZXMgdGhhdCBpdCB1c2VzIHVuc2FmZSBDIGxpYnJhcnkgY2FsbHMgc3Vj aCBhcyBzdHJjcHkoKQorICAgb3Igc3ByaW50ZigpIHRvIGNvcHkgc3RyaW5ncyBpbnRvIGF1dG9t YXRpYyBhcnJheXMsIHRodXMgb3ZlcndyaXRpbmcKKyAgIHRoZSBjYWxsIHN0YWNrLCBhbmQgdGhl cmVmb3JlIHRoZSByb3V0aW5lJ3MgcmV0dXJuIGFkZHJlc3MuIFdoZW4gc3VjaCBhCisgICBob2xl IGlzIGRpc2NvdmVyZWQsIGEgInN0cmluZyIgY2FuIGJlIGNvbnN0cnVjdGVkIHRoYXQgY29udGFp bnMgbWFjaGluZQorICAgY29kZSB0byBoaWphY2sgdGhlIHByb2dyYW0ncyBwcml2aWxlZ2VzIGFu ZCBwZW5ldHJhdGUgdGhlIHN5c3RlbS4KKworICAgVGhpcyBwcm9ibGVtIGlzIHBhcnRpYWxseSBh ZGRyZXNzZWQgYnkgdGhlIHN0cm4uLi4oKSByb3V0aW5lcywgd2hpY2gKKyAgIHNob3VsZCBhbHdh eXMgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoZWlyIHN0ci4uLigpIGVxdWl2YWxlbnRzCisg ICAoZXhjZXB0IHdoZW4gdGhlIGNvcHkgb3BlcmF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcHJlY2hl Y2tlZCwgb3IgdGhlcmUKKyAgIGlzIGEgZ29vZCByZWFzb24gZm9yIG5vdCB1c2luZyB0aGVtLCBl LmcuIHRoZSBzb21ldGltZXMgdW5kZXNpcmFibGUKKyAgIHNpZGUgZWZmZWN0IG9mIHN0cm5jcHko KSB6ZXJvaW5nIHRoZSByZW1haW5kZXIgb2YgdGhlIGJ1ZmZlcikuIFRoZSBtb3N0CisgICBnYXBp bmcgd2hvbGUsIGhvd2V2ZXIsIGlzIHNwcmludGYoKSwgd2hpY2ggcGVyZm9ybXMgbm8gbGVuZ3Ro IGNoZWNraW5nCisgICBvbiBpdHMgZGVzdGluYXRpb24gYnVmZmVyLCBhbmQgaXMgbm90IGVhc3kg dG8gcmVwbGFjZS4gQWx0aG91Z2gKKyAgIHNucHJpbnRmKCkgcm91dGluZXMgYXJlIHN0YXJ0aW5n IHRvIGFwcGVhciwgdGhleSBhcmUgbm90IHlldAorICAgd2lkZXNwcmVhZCwgYW5kIGNlcnRhaW5s eSBub3QgdW5pdmVyc2FsLCBub3IgYXJlIHRoZXkgZXNwZWNpYWxseQorICAgcG9ydGFibGUsIG9y IGV2ZW4gZnVsbC1mZWF0dXJlZC4KKworICAgRm9yIHRoZXNlIHJlYXNvbnMsIHdlIGhhdmUgc3Rh cnRlZCB0byBidWlsZCB1cCBvdXIgb3duIGxpdHRsZSBsaWJyYXJ5CisgICBvZiBDIExpYnJhcnkg cmVwbGFjZW1lbnRzLCBja2NsaWIuW2NoXS4gVGhlc2UgYXJlIHNhZmUgYW5kIGhpZ2hseQorICAg cG9ydGFibGUgcHJpbWl0aXZlcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN0cmluZyBtYW5p cHVsYXRpb24sIHN1Y2gKKyAgIGFzOgorCisgICBja3N0cm5jcHkoKQorICAgICAgICAgIExpa2Ug c3RybmNweSBidXQgcmV0dXJucyBhIHVzZWZ1bCB2YWx1ZSwgZG9lc24ndCB6ZXJvIGJ1ZmZlci4K KworICAgY2tpdG9hKCkKKyAgICAgICAgICBPcHBvc2l0ZSBvZiBhdG9pKCkKKworICAgY2tsdG9h KCkKKyAgICAgICAgICBPcHBvc2l0ZSBvZiBhdG9sKCkKKworICAgY2tjdG9hKCkKKyAgICAgICAg ICBSZXR1cm5zIGNoYXJhY3RlciBhcyBzdHJpbmcKKworICAgY2ttYWttc2coKQorICAgICAgICAg IFVzZWQgd2l0aCBjaz90bz8oKSBhcyBhIHNhZmUgc3ByaW50ZigpIHJlcGxhY2VtZW50IGZvciB1 cCB0byA0CisgICAgICAgICAgaXRlbXMKKworICAgY2ttYWt4bXNnKCkKKyAgICAgICAgICBMaWtl IGNrbWFrbXNnKCkgYnV0IGFjY2VwdHMgdXAgdG8gMTIgaXRlbXMKKworICAgTW9yZSBhYm91dCBs aWJyYXJ5IGZ1bmN0aW9ucyBpbiBbNTRdU2VjdGlvbiA0LkEuCisKKyAgIFsgWzU1XUNvbnRlbnRz IF0gWyBbNTZdQy1LZXJtaXQgXSBbIFs1N11LZXJtaXQgSG9tZSBdCisKKzMuMi4gVGhlICJjaGFy IiB2cyAidW5zaWduZWQgY2hhciIgRGlsZW1tYQorCisgICBUaGlzIGlzIG9uZSBvZiB0aGUgbW9z dCBhZ2dyYXZhdGluZyBhbmQgdmV4aW5nIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgQworICAgbGFu Z3VhZ2UuIEJ5IGRlc2lnbiwgY2hhcnMgKGFuZCBjaGFyIConcykgYXJlIFNJR05FRC4gQnV0IGlu IHRoZSBtb2Rlcm4KKyAgIGVyYSwgaG93ZXZlciwgd2UgbmVlZCB0byBwcm9jZXNzIGNoYXJhY3Rl cnMgdGhhdCBjYW4gaGF2ZSAob3IgaW5jbHVkZSkKKyAgIDgtYml0IHZhbHVlcywgYXMgaW4gdGhl IElTTyBMYXRpbi0xLCBJQk0gQ1AgODUwLCBvciBVVEYtOCBjaGFyYWN0ZXIKKyAgIHNldHMsIHNv IHRoaXMgZGF0YSBtdXN0IGJlIHRyZWF0ZWQgYXMgdW5zaWduZWQuIEJ1dCBzb21lIEMgY29tcGls ZXJzCisgICAoc3VjaCBhcyB0aG9zZSBiYXNlZCBvbiB0aGUgQmVsbCBVTklYIFY3IGNvbXBpbGVy KSBkbyBub3Qgc3VwcG9ydAorICAgInVuc2lnbmVkIGNoYXIiIGFzIGEgZGF0YSB0eXBlLiBUaGVy ZWZvcmUgd2UgaGF2ZSB0aGUgbWFjcm8gb3IgdHlwZWRlZgorICAgQ0hBUiwgd2hpY2ggd2UgdXNl IHdoZW4gd2UgbmVlZCBjaGFycyB0byBiZSB1bnNpZ25lZCwgYnV0IHdoaWNoLAorICAgdW5mb3J0 dW5hdGVseSwgcmVzb2x2ZXMgaXRzZWxmIHRvICJjaGFyIiBvbiB0aG9zZSBjb21waWxlcnMgdGhh dCBkb24ndAorICAgc3VwcG9ydCAidW5zaWduZWQgY2hhciIuIEFORCBTTy4uLiBXZSBoYXZlIHRv IGRvIGEgbG90IG9mIGZpZGRsaW5nIGF0CisgICBydW50aW1lIHRvIGF2b2lkIHNpZ24gZXh0ZW5z aW9uIGFuZCBzbyBmb3J0aC4KKworICAgU29tZSBtb2Rlcm4gY29tcGlsZXJzIChlLmcuIElCTSwg REVDLCBNaWNyb3NvZnQpIGhhdmUgb3B0aW9ucyB0aGF0IHNheQorICAgIm1ha2UgYWxsIGNoYXJz IGJlIHVuc2lnbmVkIiAoZS5nLiBHQ0MgIi1mdW5zaWduZWQtY2hhciIpIGFuZCB3ZSB1c2UKKyAg IHRoZW0gd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuIE90aGVyIGNvbXBpbGVycyBkb24ndCBoYXZl IHRoaXMgb3B0aW9uLAorICAgYW5kIGF0IHRoZSBzYW1lIHRpbWUsIGFyZSBiZWNvbWluZyBpbmNy ZWFzaW5nbHkgc3RyaWN0IGFib3V0IHR5cGUKKyAgIG1pc21hdGNoZXMsIGFuZCBzcGV3IG91dCB0 b3JyZW50cyBvZiB3YXJuaW5ncyB3aGVuIHdlIHVzZSBhIENIQVIgd2hlcmUKKyAgIGEgY2hhciBp cyBleHBlY3RlZCwgb3IgdmljZSB2ZXJzYS4gV2UgZml4IHRoZXNlIG9uZSBieSBvbmUgdXNpbmcg Y2FzdHMsCisgICBhbmQgdGhlIGNvZGUgYmVjb21lcyBpbmNyZWFzaW5nbHkgdWdseS4gQnV0IHRo ZXJlIHJlbWFpbnMgYSBzZXJpb3VzCisgICBwcm9ibGVtLCBuYW1lbHkgdGhhdCBjZXJ0YWluIGxp YnJhcnkgYW5kIGtlcm5lbCBmdW5jdGlvbnMgaGF2ZQorICAgYXJndW1lbnRzIHRoYXQgYXJlIGRl Y2xhcmVkIGFzIHNpZ25lZCBjaGFycyAob3IgcG9pbnRlcnMgdG8gdGhlbSksCisgICB3aGVyZWFz IG91ciBjaGFyYWN0ZXIgZGF0YSBpcyB1bnNpZ25lZC4gRmluZSwgd2UgY2FuIGNhbiB1c2UgY2Fz dHMgaGVyZQorICAgdG9vIC0tIGJ1dCB3aG8ga25vd3Mgd2hhdCBoYXBwZW5zIGluc2lkZSB0aGVz ZSByb3V0aW5lcy4KKworICAgWyBbNThdQ29udGVudHMgXSBbIFs1OV1DLUtlcm1pdCBdIFsgWzYw XUtlcm1pdCBIb21lIF0KKworNC4gTU9EVUxFUworCisgICBXaGVuIEMtS2VybWl0IGlzIG9uIHRo ZSBmYXIgZW5kIG9mIGEgY29ubmVjdGlvbiwgaXQgaXMgc2FpZCB0byBiZSBpbgorICAgcmVtb3Rl IG1vZGUuIFdoZW4gQy1LZXJtaXQgaGFzIG1hZGUgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIgY29t cHV0ZXIsCisgICBpdCBpcyBpbiBsb2NhbCBtb2RlLiAoSWYgQy1LZXJtaXQgaXMgImluIHRoZSBt aWRkbGUiIG9mIGEgbXVsdGlob3AKKyAgIGNvbm5lY3Rpb24sIGl0IGlzIHN0aWxsIGluIGxvY2Fs IG1vZGUuKQorCisgICBPbiBhbm90aGVyIGF4aXMsIEMtS2VybWl0IGNhbiBiZSBpbiBhbnkgb2Yg c2V2ZXJhbCBtYWpvciBzdGF0ZXM6CisKKyAgIENvbW1hbmQgU3RhdGUKKyAgICAgICAgICBSZWFk aW5nIGFuZCB3cml0aW5nIGZyb20gdGhlIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG9yCisg ICAgICAgICAgImNvbnNvbGUiLiBJbiB0aGlzIG1vZGUsIGFsbCBpL28gaXMgaGFuZGxlZCBieSB0 aGUgR3JvdXAgRQorICAgICAgICAgIGNvbnh4eCgpIChjb25zb2xlIGkvbykgcm91dGluZXMuCisK KyAgIFByb3RvY29sIFN0YXRlCisgICAgICAgICAgUmVhZGluZyBhbmQgd3JpdGluZyBmcm9tIHRo ZSBjb21tdW5pY2F0aW9ucyBkZXZpY2UuIEluIHRoaXMKKyAgICAgICAgICBtb2RlLCBhbGwgaS9v IGlzIGhhbmRsZWQgYnkgdGhlIEdyb3VwIEUgdHR4eHgoKSAodGVybWluYWwgaS9vKQorICAgICAg ICAgIHJvdXRpbmVzLgorCisgICBUZXJtaW5hbCBTdGF0ZQorICAgICAgICAgIFJlYWRpbmcgZnJv bSB0aGUga2V5Ym9hcmQgd2l0aCBjb254eHgoKSByb3V0aW5lcyBhbmQgd3JpdGluZyB0bworICAg ICAgICAgIHRoZSBjb21tdW5pY2F0aW9ucyBkZXZpY2Ugd2l0aCB0dHh4eCgpIHJvdXRpbmVzIEFO RCB2aWNlLXZlcnNhLgorCisgICBXaGVuIGluIGxvY2FsIG1vZGUsIHRoZSBjb25zb2xlIGFuZCBj b21tdW5pY2F0aW9ucyBkZXZpY2UgYXJlIGRpc3RpbmN0LgorICAgRHVyaW5nIGZpbGUgdHJhbnNm ZXIsIEtlcm1pdCBtYXkgcHV0IHVwIGEgZmlsZS10cmFuc2ZlciBkaXNwbGF5IG9uIHRoZQorICAg Y29uc29sZSBhbmQgc2FtcGxlIHRoZSBjb25zb2xlIGZvciBpbnRlcnJ1cHRpb24gc2lnbmFscy4K KworICAgV2hlbiBpbiByZW1vdGUgbW9kZSwgdGhlIGNvbnNvbGUgYW5kIGNvbW11bmljYXRpb25z IGRldmljZSBhcmUgdGhlCisgICBzYW1lLCBhbmQgdGhlcmVmb3JlIHRoZXJlIGNhbiBiZSBubyBm aWxlLXRyYW5zZmVyIGRpc3BsYXkgb24gdGhlCisgICBjb25zb2xlIG9yIGludGVycnVwdGlvbnMg ZnJvbSBpdCAoZXhjZXB0IGZvciAiaW4tYmFuZCIgaW50ZXJydXB0aW9ucworICAgc3VjaCBhcyBe Q15DXkMpLgorCisgICBbIFs2MV1Db250ZW50cyBdIFsgWzYyXUMtS2VybWl0IF0gWyBbNjNdS2Vy bWl0IEhvbWUgXQorCis0LkEuIEdyb3VwIEE6IExpYnJhcnkgRnVuY3Rpb25zCisKKyAgIExpYnJh cnkgZnVuY3Rpb25zLCBzdHJpY3RseSBwb3J0YWJsZSwgY2FuIGJlIHVzZWQgYnkgYWxsIG1vZHVs ZXMgb24gYWxsCisgICBwbGF0Zm9ybXM6IFs2NF1ja2NsaWIuaCwgWzY1XWNrY2xpYi5jLgorCisg ICAoVG8gYmUgZmlsbGVkIGluLi4uIEZvciBub3csIHNlZSBbNjZdU2VjdGlvbiAzLjEgYW5kIHRo ZSBjb21tZW50cyBpbgorICAgY2tjbGliLmMuKQorCisgICBbIFs2N11Db250ZW50cyBdIFsgWzY4 XUMtS2VybWl0IF0gWyBbNjldS2VybWl0IEhvbWUgXQorCis0LkIuIEdyb3VwIEI6IEtlcm1pdCBG aWxlIFRyYW5zZmVyCisKKyAgIFRoZSBLZXJtaXQgcHJvdG9jb2wga2VybmVsLiBUaGVzZSBmaWxl cywgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiY2tjCisgICBhcmUgc3VwcG9zZWQgdG8gYmUgdG90 YWxseSBwb3J0YWJsZSBDLCBhbmQgYXJlIGV4cGVjdGVkIHRvIGNvbXBpbGUKKyAgIGNvcnJlY3Rs eSBvbiBhbnkgcGxhdGZvcm0gd2l0aCBhbnkgQyBjb21waWxlci4gIlBvcnRhYmxlIiBkb2VzIG5v dCBtZWFuCisgICB0aGUgc2FtZSBhcyBhcyAiQU5TSSIgLS0gdGhlc2UgbW9kdWxlcyBtdXN0IGNv bXBpbGUgb24gMTAtIGFuZCAyMC15ZWFyCisgICBvbGQgY29tcHV0ZXJzLCB3aXRoIEMgcHJlcHJv Y2Vzc29ycywgY29tcGlsZXJzLCBhbmQvb3IgbGlua2VycyB0aGF0CisgICBoYXZlIGFsbCBzb3J0 cyBvZiByZXN0cmljdGlvbnMuIFRoZSBHcm91cCBCIG1vZHVsZXMgZG8gbm90IGluY2x1ZGUgYW55 CisgICBoZWFkZXIgZmlsZXMgb3RoZXIgdGhhbiB0aG9zZSB0aGF0IGNvbWUgd2l0aCBLZXJtaXQg aXRzZWxmLiBUaGV5IGRvIG5vdAorICAgY29udGFpbiBhbnkgbGlicmFyeSBjYWxscyBleGNlcHQg ZnJvbSB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IChlLmcuCisgICBwcmludGYoKSkuIFRoZXkgbW9z dCBjZXJ0YWlubHkgZG8gbm90IGNvbnRhaW4gYW55IHN5c3RlbSBjYWxscy4gRmlsZXM6CisKKyAg IFs3MF1ja2NzeW0uaAorICAgICAgICAgIEZvciB1c2UgYnkgQyBjb21waWxlcnMgdGhhdCBkb24n dCBhbGxvdyAtRCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgICBbNzFdY2tjYXNjLmgKKyAgICAg ICAgICBBU0NJSSBjaGFyYWN0ZXIgc3ltYm9sIGRlZmluaXRpb25zLgorCisgICBbNzJdY2tjc2ln LmgKKyAgICAgICAgICBTeXN0ZW0taW5kZXBlbmRlbnQgc2lnbmFsLWhhbmRsaW5nIGRlZmluaXRp b25zIGFuZCBwcm90b3R5cGVzLgorCisgICBbNzNdY2tjZGViLmgKKyAgICAgICAgICBPcmlnaW5h bGx5LCBkZWJ1Z2dpbmcgZGVmaW5pdGlvbnMuIE5vdyB0aGlzIGZpbGUgYWxzbyBjb250YWlucwor ICAgICAgICAgIGFsbCBkZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyB0aGF0IGFyZSBzaGFyZWQg YnkgYWxsIG1vZHVsZXMgaW4KKyAgICAgICAgICBhbGwgZ3JvdXBzLgorCisgICBbNzRdY2tja2Vy LmgKKyAgICAgICAgICBLZXJtaXQgcHJvdG9jb2wgc3ltYm9sIGRlZmluaXRpb25zLgorCisgICBb NzVdY2tjeGxhLmgKKyAgICAgICAgICBDaGFyYWN0ZXItc2V0LXJlbGF0ZWQgc3ltYm9sIGRlZmlu aXRpb25zIChzZWUgbmV4dCBzZWN0aW9uKS4KKworICAgWzc2XWNrY21haS5jCisgICAgICAgICAg VGhlIG1haW4gcHJvZ3JhbS4gVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIGRlY2xhcmF0aW9ucyBv ZiBhbGwKKyAgICAgICAgICB0aGUgcHJvdG9jb2wtcmVsYXRlZCBnbG9iYWwgdmFyaWFibGVzIHRo YXQgYXJlIHNoYXJlZCBhbW9uZyB0aGUKKyAgICAgICAgICBvdGhlciBtb2R1bGVzLgorCisgICBb NzddY2tjcHJvLncKKyAgICAgICAgICBUaGUgcHJvdG9jb2wgbW9kdWxlIGl0c2VsZiwgd3JpdHRl biBpbiAid2FydCIsIGEgbGV4LWxpa2UKKyAgICAgICAgICBwcmVwcm9jZXNzb3IgdGhhdCBpcyBk aXN0cmlidXRlZCB3aXRoIEtlcm1pdCB1bmRlciB0aGUgbmFtZQorICAgICAgICAgIENLV0FSVC5D LgorCisgICBbNzhdY2tjZm5zLmMsIFs3OV1ja2NmbjIuYywgWzgwXWNrY2ZuMy5jCisgICAgICAg ICAgVGhlIHByb3RvY29sIHN1cHBvcnQgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIHByb3RvY29sIG1v ZHVsZS4KKworICAgWzgxXUdyb3VwIEIgbW9kdWxlcyBtYXkgY2FsbCB1cG9uIGZ1bmN0aW9ucyBm cm9tIFs4Ml1Hcm91cCBFLCBidXQgbm90CisgICBmcm9tIFs4M11Hcm91cCBEIG1vZHVsZXMgKHdp dGggdGhlIHNpbmdsZSBleGNlcHRpb24gdGhhdCB0aGUgbWFpbgorICAgcHJvZ3JhbSBpbnZva2Vz IHRoZSB1c2VyIGludGVyZmFjZSwgd2hpY2ggaXMgaW4gR3JvdXAgRCkuIChUaGlzIGxhc3QKKyAg IGFzc2VydGlvbiBpcyByZWFsbHkgb25seSBhIGNvbmplY3R1cmUuKQorCisgICBbIFs4NF1Db250 ZW50cyBdIFsgWzg1XUMtS2VybWl0IF0gWyBbODZdS2VybWl0IEhvbWUgXQorCis0LkMuIEdyb3Vw IEM6IENoYXJhY3Rlci1TZXQgQ29udmVyc2lvbgorCisgICBDaGFyYWN0ZXIgc2V0IHRyYW5zbGF0 aW9uIHRhYmxlcyBhbmQgZnVuY3Rpb25zLiBVc2VkIGJ5IHRoZSBbODddR3JvdXAKKyAgIEIsIHBy b3RvY29sIG1vZHVsZXMsIGJ1dCBtYXkgYmUgc3BlY2lmaWMgdG8gZGlmZmVyZW50IGNvbXB1dGVy cy4gKFNvCisgICBmYXIsIGFsbCBjaGFyYWN0ZXIgY2hhcmFjdGVyIHNldHMgc3VwcG9ydGVkIGJ5 IEMtS2VybWl0IGFyZSBzdXBwb3J0ZWQKKyAgIGluIFs4OF1ja3V4bGEuYyBhbmQgWzg5XWNrdXhs YS5oLCBpbmNsdWRpbmcgTWFjaW50b3NoIGFuZCBJQk0gY2hhcmFjdGVyCisgICBzZXRzKS4gVGhl c2UgbW9kdWxlcyBzaG91bGQgYmUgY29tcGxldGVseSBwb3J0YWJsZSwgYW5kIG5vdCByZWx5IG9u IGFueQorICAga2luZCBvZiBzeXN0ZW0gb3IgbGlicmFyeSBzZXJ2aWNlcy4KKworICAgWzkwXWNr Y3hsYS5oCisgICAgICAgICAgQ2hhcmFjdGVyLXNldCBkZWZpbml0aW9ucyB1c2FibGUgYnkgYWxs IHZlcnNpb25zIG9mIEMtS2VybWl0LgorCisgICBjaz94bGEuaAorICAgICAgICAgIENoYXJhY3Rl ci1zZXQgZGVmaW5pdGlvbnMgZm9yIGNvbXB1dGVyICI/IiwgZS5nLiBbOTFdY2t1eGxhLmgKKyAg ICAgICAgICBmb3IgVU5JWCwgWzkyXWNrbXhsYS5oIGZvciBNYWNpbnRvc2guCisKKyAgIFs5M11j az94bGEKKyAgICAgICAgICBDaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIHRhYmxlcyBhbmQgZnVu Y3Rpb25zIGZvciBjb21wdXRlciAiPyIsCisgICAgICAgICAgRm9yIGV4YW1wbGUsIENLVVhMQS5D IGZvciBVTklYLCBDS01YTEEuQyBmb3IgTWFjaW50b3NoLiBTbyBmYXIsCisgICAgICAgICAgdGhl c2UgYXJlIHRoZSBvbmx5IHR3byBzdWNoIG1vZHVsZXMuIFRoZSBVTklYIG1vZHVsZSBpcyB1c2Vk IGZvcgorICAgICAgICAgIGFsbCB2ZXJzaW9ucyBvZiBDLUtlcm1pdCBleGNlcHQgdGhlIE1hY2lu dG9zaCB2ZXJzaW9uLgorCisgICBbOTRdY2tjdW5pLmgKKyAgICAgICAgICBVbmljb2RlIGRlZmlu aXRpb25zCisKKyAgIFs5NV1ja2N1bmkuYworICAgICAgICAgIFVuaWNvZGUgbW9kdWxlCisKKyAg IEhlcmUncyBob3cgdG8gYWRkIGEgbmV3IGZpbGUgY2hhcmFjdGVyIHNldCBpbiB0aGUgb3JpZ2lu YWwgKG5vbi1Vbmljb2RlCisgICBtb2R1bGVzKS4gQXNzdW1pbmcgaXQgaXMgYmFzZWQgb24gdGhl IFJvbWFuIChMYXRpbikgYWxwaGFiZXQuIExldCdzCisgICBjYWxsIGl0ICJCYXJiYXJpYW4iLiBG aXJzdCwgaW4gY2s/eGxhLmgsIGFkZCBhIGRlZmluaXRpb24gZm9yIEZDX0JBUkJBCisgICAoOCBj aGFycyBtYXhpbXVtIGxlbmd0aCkgYW5kIGluY3JlYXNlIE1BWEZDU0VUUyBieSAxLiBUaGVuLCBp bgorICAgY2s/eGxhLmM6CisKKyAgICAgKiBBZGQgYSBiYXJiYXJpYW4gZW50cnkgaW50byB0aGUg ZmNzaW5mbyBhcnJheS4KKyAgICAgKiBBZGQgYSAiYmFyYmFyaWFuIiBlbnRyeSB0byBmaWxlIGNo YXJhY3RlciBzZXQga2V5d29yZCB0YWJsZSwKKyAgICAgICBmY3N0YWIuCisgICAgICogQWRkIGEg ImJhcmJhcmlhbiIgZW50cnkgdG8gdGVybWluYWwgY2hhcmFjdGVyIHNldCBrZXl3b3JkIHRhYmxl LAorICAgICAgIHR0Y3N0YWIuCisgICAgICogQWRkIGEgdHJhbnNsYXRpb24gdGFibGUgZnJvbSBM YXRpbi0xIHRvIGJhcmJhcmlhbjogeWwxYmFbXS4KKyAgICAgKiBBZGQgYSB0cmFuc2xhdGlvbiB0 YWJsZSBmcm9tIGJhcmJhcmlhbiB0byBMYXRpbi0xOiB5YmFsMVtdLgorICAgICAqIEFkZCBhIHRy YW5zbGF0aW9uIGZ1bmN0aW9uIGZyb20gQmFyYmFyaWFuIHRvIEFTQ0lJOiB4YmFhcygpLgorICAg ICAqIEFkZCBhIHRyYW5zbGF0aW9uIGZ1bmN0aW9uIGZyb20gQmFyYmFyaWFuIHRvIExhdGluLTE6 IHhiYWwxKCkuCisgICAgICogQWRkIGEgdHJhbnNsYXRpb24gZnVuY3Rpb24gZnJvbSBMYXRpbi0x IHRvIEJhcmJhcmlhbjogeGwxYmEoKS4KKyAgICAgKiBldGMgZXRjIGZvciBlYWNoIHRyYW5zZmVy IGNoYXJhY3RlciBzZXQuLi4KKyAgICAgKiBBZGQgdHJhbnNsYXRpb24gZnVuY3Rpb24gcG9pbnRl cnMgdG8gdGhlIHhscyBhbmQgeGxyIHRhYmxlcy4KKworICAgT3RoZXIgdHJhbnNsYXRpb25zIGlu dm9sdmluZyBCYXJiYXJpYW4gKGUuZy4gZnJvbSBCYXJiYXJpYW4gdG8KKyAgIExhdGluLUN5cmls bGljKSBhcmUgcGVyZm9ybWVkIHRocm91Z2ggdGhlc2UgdGFibGVzIGFuZCBmdW5jdGlvbnMuIFNl ZQorICAgY2t1eGxhLmggYW5kIGNrdXhsYS5jIGZvciBleHRlbnNpdmUgZXhhbXBsZXMuCisKKyAg IFRvIGFkZCBhIG5ldyBUcmFuc2ZlciBDaGFyYWN0ZXIgU2V0LCBlLmcuIExhdGluIEFscGhhYmV0 IDkgKGZvciB0aGUKKyAgIEV1cm8gc3ltYm9sKSwgYWdhaW4gaW4gdGhlICJvbGQiIGNoYXJhY3Rl ci1zZXQgbW9kdWxlczoKKworICAgSW4gY2tjeGxhLmg6CisKKyAgICAgICAgICArIEFkZCBhIFRD X3h4eHggZGVmaW5pdGlvbiBhbmQgaW5jcmVhc2UgTUFYVENTRVRTIGFjY29yZGluZ2x5LgorCisg ICBJbiBjaz94bGEuaCAoc2luY2UgYW55IHRyYW5zZmVyIGNoYXJzZXQgaXMgYWxzbyBhIGZpbGUg Y2hhcnNldCk6CisKKyAgICAgICAgICArIEFkZCBhbiBGQ194eHh4IGRlZmluaXRpb24gYW5kIGlu Y3JlYXNlIE1BWEZDU0VUUyBhY2NvcmRpbmdseS4KKworICAgSW4gY2s/eGxhLmM6CisKKyAgICAg ICAgICArIEFkZCBhIHRjc2luZm9bXSBlbnRyeS4KKyAgICAgICAgICArIE1ha2UgYSB0Y3N0YWJb XSBrZXl3b3JkIHRhYmxlIGVudHJ5LgorICAgICAgICAgICsgTWFrZSBhbiBmY3NpbmZvW10gdGFi bGUgZW50cnkuCisgICAgICAgICAgKyBNYWtlIGFuIGZjc3RhYltdIGtleXdvcmQgdGFibGUgZW50 cnkuCisgICAgICAgICAgKyBNYWtlIGEgdGNzdGFiW10ga2V5d29yZCB0YWJsZSBlbnRyeS4KKyAg ICAgICAgICArIElmIG5lY2Vzc2FyeSwgbWFrZSBhIGxhbmdpbmZvW10gdGFibGUgZW50cnkuCisg ICAgICAgICAgKyBNYWtlIGVudHJpZXMgaW4gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgYXJyYXlzLgor ICAgICAgICAgICsgUHJvdmlkZSBhbnkgbmVlZGVkIGZ1bmN0aW9ucy4KKworICAgQXMgb2YgQy1L ZXJtaXQgNy4wLCBjaGFyYWN0ZXIgc2V0cyBhcmUgYWxzbyBoYW5kbGVkIGluIHBhcmFsbGVsIGJ5 IHRoZQorICAgbmV3IChhbmQgdmVyeSBsYXJnZSkgVW5pY29kZSBtb2R1bGUsIGNrY3VuaS5bY2hd LiBFdmVudHVhbGx5IHdlIHNob3VsZAorICAgcGhhc2Ugb3V0IHRoZSBvbGQgd2F5LCBkZXNjcmli ZWQganVzdCBhYm92ZSwgYW5kIG9wZXJhdGUgZW50aXJlbHkgaW4KKyAgIChhbmQgdGhyb3VnaCkg VW5pY29kZS4gVGhlIGFkdmFudGFnZXMgYXJlIG1hbnkuIFRoZSBkaXNhZHZhbnRhZ2VzIGFyZQor ICAgc2l6ZSBhbmQgcGVyZm9ybWFuY2UuIFRvIGFkZCBhIGNoYXJhY3RlciB0byB0aGUgVW5pY29k ZSBtb2R1bGVzOgorCisgICBJbiBja2N1bmkuaDoKKworICAgICAgICAgICsgKFRvIGJlIGZpbGxl ZCBpbi4uLikKKworICAgSW4gY2tjdW5pLmM6CisKKyAgICAgICAgICArIChUbyBiZSBmaWxsZWQg aW4uLi4pCisKKyAgIFsgWzk2XUNvbnRlbnRzIF0gWyBbOTddQy1LZXJtaXQgXSBbIFs5OF1LZXJt aXQgSG9tZSBdCisKKzQuRC4gR3JvdXAgRDogVXNlciBJbnRlcmZhY2UKKworICAgVGhpcyBpcyB0 aGUgY29kZSB0aGF0IGNvbW11bmljYXRlcyB3aXRoIHRoZSB1c2VyLCBnZXRzIGhlciBjb21tYW5k cywKKyAgIGluZm9ybXMgaGVyIG9mIHRoZSByZXN1bHRzLiBJdCBtYXkgYmUgY29tbWFuZC1saW5l IG9yaWVudGVkLAorICAgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIGRpYWxvZywgbWVudXMgYW5kIGFy cm93IGtleXMsIHdpbmRvd3MgYW5kIG1pY2UsCisgICBzcGVlY2ggcmVjb2duaXRpb24sIHRlbGVw YXRoeSwgZXRjLiBUaGUgb25lIHByb3ZpZGVkIGlzIGNvbW1hbmQtYW5kCisgICBwcm9tcHQsIHdp dGggdGhlIGFiaWxpdHkgdG8gcmVhZCBjb21tYW5kcyBmcm9tIHZhcmlvdXMgc291cmNlczogdGhl CisgICBjb25zb2xlIGtleWJvYXJkLCBhIGZpbGUsIG9yIGEgbWFjcm8gZGVmaW5pdGlvbi4gVGhl IHVzZXIgaW50ZXJmYWNlIGhhcworICAgdGhyZWUgbWFqb3IgZnVuY3Rpb25zOgorCisgICAgMS4g U2V0cyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGZpbGUgdHJhbnNmZXIgYW5kIHRoZW4gc3RhcnRz IGl0LiBUaGlzCisgICAgICAgaXMgZG9uZSBieSBzZXR0aW5nIGNlcnRhaW4gKG1hbnkpIGdsb2Jh bCB2YXJpYWJsZXMsIHN1Y2ggYXMgdGhlCisgICAgICAgcHJvdG9jb2wgbWFjaGluZSBzdGFydCBz dGF0ZSwgdGhlIGZpbGUgc3BlY2lmaWNhdGlvbiwgZmlsZSB0eXBlLAorICAgICAgIGNvbW11bmlj YXRpb24gcGFyYW1ldGVycywgcGFja2V0IGxlbmd0aCwgd2luZG93IHNpemUsIGNoYXJhY3Rlcgor ICAgICAgIHNldCwgZXRjLgorICAgIDIuIERpc3BsYXlzIG1lc3NhZ2VzIG9uIHRoZSB1c2VyJ3Mg c2NyZWVuIGR1cmluZyB0aGUgZmlsZSB0cmFuc2ZlciwKKyAgICAgICB1c2luZyB0aGUgc2NyZWVu KCkgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBieSB0aGUgZ3JvdXAtMQorICAgICAgIG1vZHVs ZXMuCisgICAgMy4gRXhlY3V0ZXMgYW55IGNvbW1hbmRzIGRpcmVjdGx5IHRoYXQgZG8gbm90IHJl cXVpcmUgS2VybWl0IHByb3RvY29sLAorICAgICAgIHN1Y2ggYXMgdGhlIENPTk5FQ1QgY29tbWFu ZCwgbG9jYWwgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzLAorICAgICAgIHBhcmFtZXRlci1zZXR0 aW5nIGNvbW1hbmRzLCBGVFAgY2xpZW50IGNvbW1hbmRzLCBldGMuCisKKyAgIElmIHlvdSBwbGFu IHRvIGVtYmVkIHRoZSBbOTldR3JvdXAgQiwgZmlsZXMgaW50byBhIHByb2dyYW0gd2l0aCBhCisg ICBkaWZmZXJlbnQgdXNlciBpbnRlcmZhY2UsIHlvdXIgaW50ZXJmYWNlIG11c3Qgc3VwcGx5IGFu IGFwcHJvcHJpYXRlCisgICBzY3JlZW4oKSBmdW5jdGlvbiwgcGx1cyBhIGNvdXBsZSByZWxhdGVk IG9uZXMgbGlrZSBjaGtpbnQoKSBhbmQKKyAgIGludG1zZygpIGZvciBoYW5kbGluZyBrZXlib2Fy ZCAob3IgbW91c2UsIGV0YykgaW50ZXJydXB0aW9ucyBkdXJpbmcKKyAgIGZpbGUgdHJhbnNmZXIu IFRoZSBiZXN0IHdheSB0byBmaW5kIG91dCBhYm91dCB0aGlzIGlzIHRvIGxpbmsgYWxsIHRoZQor ICAgQy1LZXJtaXQgbW9kdWxlcyB0b2dldGhlciBleGNlcHQgdGhlIGNrdXUqLm8gYW5kIGNrdWNv bi5vIG1vZHVsZXMsIGFuZAorICAgc2VlIHdoaWNoIG1pc3Npbmcgc3ltYm9scyB0dXJuIHVwLgor CisgICBDLUtlcm1pdCdzIGNoYXJhY3Rlci1vcmllbnRlZCB1c2VyIGludGVyZmFjZSAoYXMgb3Bw b3NlZCB0byB0aGUKKyAgIE1hY2ludG9zaCB2ZXJzaW9uJ3MgZ3JhcGhpY2FsIHVzZXIgaW50ZXJm YWNlKSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nCisgICBtb2R1bGVzLiBDLUtlcm1pdCBjYW4g YmUgYnVpbHQgd2l0aCBhbiBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciwgYQorICAgY29tbWFu ZC1saW5lLW9wdGlvbi1vbmx5IHBhcnNlciwgYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UsIG9y IGFueQorICAgY29tYmluYXRpb24sIGFuZCBpdCBjYW4gZXZlbiBiZSBidWlsdCB3aXRoIG5vIHVz ZXIgaW50ZXJmYWNlIGF0IGFsbCAoaW4KKyAgIHdoaWNoIGNhc2UgaXQgcnVucyBhcyBhIHJlbW90 ZS1tb2RlIEtlcm1pdCBzZXJ2ZXIpLgorCisgICBbMTAwXWNrdWNtZC5oCisgICBbMTAxXWNrdWNt ZC5jCisgICAgICAgICAgVGhlIGNvbW1hbmQgcGFyc2luZyBwcmltaXRpdmVzIHVzZWQgYnkgdGhl IGludGVyYWN0aXZlIGNvbW1hbmQKKyAgICAgICAgICBwYXJzZXIgdG8gcGFyc2Uga2V5d29yZHMs IG51bWJlcnMsIGZpbGVuYW1lcywgZXRjLCBhbmQgdG8gZ2l2ZQorICAgICAgICAgIGhlbHAsIGNv bXBsZXRlIGZpZWxkcywgc3VwcGx5IGRlZmF1bHRzLCBhbGxvdyBhYmJyZXZpYXRpb25zIGFuZAor ICAgICAgICAgIGVkaXRpbmcsIGV0Yy4gVGhpcyBwYWNrYWdlIGlzIHRvdGFsbHkgaW5kZXBlbmRl bnQgb2YgS2VybWl0LCBidXQKKyAgICAgICAgICBkb2VzIGRlcGVuZCBvbiB0aGUgWzEwMl1Hcm91 cCBFIGZ1bmN0aW9ucy4KKworICAgWzEwM11ja3V1c3IuaAorICAgICAgICAgIERlZmluaXRpb25z IG9mIHN5bWJvbHMgdXNlZCBpbiBLZXJtaXQncyBjb21tYW5kcy4KKworICAgY2t1dXMqLmMKKyAg ICAgICAgICBLZXJtaXQncyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciwgaW5jbHVkaW5nIHRo ZSBzY3JpcHQKKyAgICAgICAgICBwcm9ncmFtbWluZyBsYW5ndWFnZTogWzEwNF1ja3V1c3IuYyAo aW5jbHVkZXMgdG9wLWxldmVsIGtleXdvcmQKKyAgICAgICAgICB0YWJsZXMpOyBbMTA1XWNrdXVz Mi5jIChIRUxQIGNvbW1hbmQgdGV4dCk7IFsxMDZdY2t1dXMzLmMgKG1vc3QKKyAgICAgICAgICBv ZiB0aGUgU0VUIGNvbW1hbmQpOyBbMTA3XWNrdXVzNC5jIChpbmNsdWRlcyB2YXJpYWJsZXMgYW5k CisgICAgICAgICAgZnVuY3Rpb25zKTsgY2t1dXNbNTY3XS5jIChtaXNjZWxsYW5lb3VzKTsKKwor ICAgWzEwOF1ja3V1c3kuYworICAgICAgICAgIFRoZSBjb21tYW5kLWxpbmUtb3B0aW9uIHBhcnNl ci4KKworICAgWzEwOV1ja3V1c3guYworICAgICAgICAgIFVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9u cyBjb21tb24gdG8gYm90aCB0aGUgaW50ZXJhY3RpdmUgYW5kCisgICAgICAgICAgY29tbWFuZC1s aW5lIHBhcnNlcnMuCisKKyAgIFsxMTBdY2t1dmVyLmgKKyAgICAgICAgICBWZXJzaW9uIGhlcmFs ZHMgZm9yIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuCisKKyAgIFsxMTFdY2t1c2NyLmMKKyAg ICAgICAgICBUaGUgKG9sZCwgdXVjcC1saWtlKSBTQ1JJUFQgY29tbWFuZAorCisgICBbMTEyXWNr dWRpYS5jCisgICAgICAgICAgVGhlIERJQUwgY29tbWFuZC4gSW5jbHVkZXMgc3BlY2lmaWMga25v d2xlZGdlIG9mIG1hbnkgdHlwZXMgb2YKKyAgICAgICAgICBtb2RlbXMuCisKKyAgIE5vdGUgdGhh dCBub25lIG9mIHRoZSBhYm92ZSBmaWxlcyBpcyBhY3R1YWxseSBVbml4LXNwZWNpZmljLiBPdmVy IHRpbWUKKyAgIHRoZXkgaGF2ZSBwcm92ZW4gdG8gYmUgcG9ydGFibGUgYW1vbmcgYWxsIHBsYXRm b3JtcyB3aGVyZSBDLUtlcm1pdCBpcworICAgYnVpbHQ6IFVuaXgsIFZNUywgQU9TL1ZTLCBBbWln YSwgT1MtOSwgVk9TLCBldGMgZXRjLiBUaHVzIHRoZSB0aGlyZAorICAgbGV0dGVyIHNob3VsZCBt b3JlIHByb3Blcmx5IGJlICJjIiwgYnV0IGNoYW5naW5nIGl0IHdvdWxkIGJlIHRvbworICAgY29u ZnVzaW5nLgorCisgICBjaz9jb24uYywgY2t1Y25zLmMKKyAgICAgICAgICBUaGUgQ09OTkVDVCBj b21tYW5kLiBUZXJtaW5hbCBjb25uZWN0aW9uLCBhbmQgaW4gc29tZSBjYXNlcworICAgICAgICAg IChNYWNpbnRvc2gsIFdpbmRvd3MpIGFsc28gdGVybWluYWwgZW11bGF0aW9uLiBOT1RFOiBBcyBv ZgorICAgICAgICAgIEMtS2VybWl0IDcuMCwgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgQ09OTkVD VCBtb2R1bGVzIGZvciBVTklYOgorICAgICAgICAgIFsxMTNdY2t1Y29uLmMgLS0gdGhlIHRyYWRp dGlvbmFsLCBwb3J0YWJsZSwgZm9yaygpLWJhc2VkIHZlcnNpb24KKyAgICAgICAgICAtLSBhbmQg WzExNF1ja3VjbnMuYywgYSBuZXcgdmVyc2lvbiB0aGF0IHVzZXMgc2VsZWN0KCkgcmF0aGVyCisg ICAgICAgICAgdGhhbiBmb3JrcyBzbyBpdCBjYW4gaGFuZGxlIGVuY3J5cHRpb24uIGNrdWNucy5j IGlzIHRoZQorICAgICAgICAgIHByZWZlcnJlZCB2ZXJzaW9uIGZvciBVbml4OyBja3Vjb24uYyBp cyBub3QgbGlrZWx5IHRvIGtlZXAgcGFjZQorICAgICAgICAgIHdpdGggaXQgaW4gdGVybXMgb2Yg dXBncmFkZXMsIGV0Yy4gSG93ZXZlciwgc2luY2Ugc2VsZWN0KCkgaXMKKyAgICAgICAgICBub3Qg cG9ydGFibGUgdG8gZXZlcnkgcGxhdGZvcm0sIGNrdWNvbi5jIHdpbGwgYmUga2VwdAorICAgICAg ICAgIGluZGVmaW5pdGVseSBmb3IgdGhvc2UgcGxhdGZvcm1zIHRoYXQgY2FuJ3QgdXNlIGNrdWNu cy5jLiBOT1RFOgorICAgICAgICAgIFN1bkxpbmsgWC4yNSBzdXBwb3J0IGlzIGF2YWlsYWJsZSBv bmx5IGluIGNrdWNvbi5jLgorCisgICBja18qLiosIGNrdWF0Ki4qCisgICAgICAgICAgTW9kdWxl cyBoYXZpbmcgdG8gZG8gd2l0aCBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbi4gU2luY2UK KyAgICAgICAgICB0aGUgcmVsYXhhdGlvbiBvZiBVU0EgZXhwb3J0IGxhd3MsIHRoZXkgYXJlIGlu Y2x1ZGVkIHdpdGggdGhlCisgICAgICAgICAgZ2VuZXJhbCBzb3VyY2UtY29kZSBkaXN0cmlidXRp b24uIFNlY3VyZSBDLUtlcm1pdCBiaW5hcmllcyBjYW4KKyAgICAgICAgICBiZSBidWlsdCB1c2lu ZyBzcGVjaWFsIHRhcmdldHMgaW4gdGhlIHN0YW5kYXJkIG1ha2VmaWxlLgorICAgICAgICAgIEhv d2V2ZXIsIHNlY3VyZSBwcmVidWlsdCBiaW5hcmllcyBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkLgor CisgICBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCB0aGUgZmlsZXMgbWF5LCBhbmQgcHJvYmFi bHkgZG8sIGhhdmUKKyAgIGRpZmZlcmVudCBuYW1lcy4gRm9yIGV4YW1wbGUsIHRoZSBNYWNpbnRv c2ggZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlCisgICBmaWxlbmFtZXMgc3RhcnQgd2l0aCAiY2tt Ii4gS2VybWl0IDk1IHVzZXMgdGhlIGNrdWNtZCBhbmQgY2t1dXMqCisgICBtb2R1bGVzLCBidXQg aGFzIGl0cyBvd24gQ09OTkVDVCBjb21tYW5kIG1vZHVsZXMuIEFuZCBzbyBvbi4KKworICAgSGVy ZSBpcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIEMtS2VybWl0J3MgInVzZXIgaW50ZXJmYWNlIGlu dGVyZmFjZSIsCisgICBmcm9tIGNrdXVzci5jLiBJdCBpcyBub3doZXJlIG5lYXIgY29tcGxldGU7 IGluIHBhcnRpY3VsYXIsIGh1bmRyZWRzIG9mCisgICBnbG9iYWwgdmFyaWFibGVzIGFyZSBzaGFy ZWQgYW1vbmcgdGhlIG1hbnkgbW9kdWxlcy4gVGhlc2Ugc2hvdWxkLCBzb21lCisgICBkYXksIGJl IGNvbGxlY3RlZCBpbnRvIGNsYXNzZXMgb3Igc3RydWN0dXJlcyB0aGF0IGNhbiBiZSBwYXNzZWQg YXJvdW5kCisgICBhcyBuZWVkZWQ7IG5vdCBvbmx5IGZvciBwdXJpdHkncyBzYWtlLCBidXQgYWxz byB0byBhbGxvdyBmb3IgbXVsdGlwbGUKKyAgIHNpbXVsdGFuZW91cyBjb21tdW5pY2F0aW9uIHNl c3Npb25zIGFuZCBvciB1c2VyIGludGVyZmFjZXMuIE91ciBsaXN0IG9mCisgICB0aGluZ3MgdG8g ZG8gaXMgZW5kbGVzcywgYW5kIHJlb3JnYW5pemluZyB0aGUgc291cmNlIGlzIGFsbW9zdCBhbHdh eXMKKyAgIGF0IHRoZSBib3R0b20uCisKKyAgIFRoZSBja3V1cyouYyBtb2R1bGVzIChsaWtlIG1h bnkgb2YgdGhlIGNrYyouYyBtb2R1bGVzKSBkZXBlbmQgb24gdGhlCisgICBleGlzdGVuY2Ugb2Yg QyBsaWJyYXJ5IGZlYXR1cmVzIGxpa2UgZm9wZW4sIGZnZXRzLCBmZW9mLCAoZilwcmludGYsCisg ICBhcmd2L2FyZ2MsIGV0Yy4gT3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byB2YXJ5 IGFtb25nIG9wZXJhdGluZworICAgc3lzdGVtcyAtLSBsaWtlIHNldHRpbmcgdGVybWluYWwgbW9k ZXMgb3IgaW50ZXJydXB0cyAtLSBhcmUgaW52b2tlZCB2aWEKKyAgIGNhbGxzIHRvIGZ1bmN0aW9u cyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBbMTE1XUdyb3VwIEUKKyAgIHBsYXRmb3JtLWRlcGVu ZGVudCBtb2R1bGVzLCBjaz9bZnRdaW8uYy4gVGhlIGNvbW1hbmQgbGluZSBwYXJzZXIKKyAgIHBy b2Nlc3NlcyBhbnkgYXJndW1lbnRzIGZvdW5kIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFzIHBhc3Nl ZCB0byBtYWluKCkKKyAgIHZpYSBhcmd2L2FyZ2MuIFRoZSBpbnRlcmFjdGl2ZSBwYXJzZXIgdXNl cyB0aGUgZmFjaWxpdGllcyBvZiB0aGUgY21kCisgICBwYWNrYWdlIChkZXZlbG9wZWQgZm9yIHRo aXMgcHJvZ3JhbSwgYnV0LCBpbiB0aGVvcnksIHVzYWJsZSBieSBhbnkKKyAgIHByb2dyYW0pLiBB bnkgY29tbWFuZCBwYXJzZXIgbWF5IGJlIHN1YnN0aXR1dGVkIGZvciB0aGlzIG9uZS4gVGhlIG9u bHkKKyAgIHJlcXVpcmVtZW50cyBmb3IgdGhlIEtlcm1pdCBjb21tYW5kIHBhcnNlciBhcmUgdGhl c2U6CisKKyAgICAxLiBTZXQgcGFyYW1ldGVycyB2aWEgZ2xvYmFsIHZhcmlhYmxlcyBsaWtlIGR1 cGxleCwgc3BlZWQsIHR0bmFtZSwKKyAgICAgICBldGMuIFNlZSBbMTE2XWNrY21haS5jIGZvciB0 aGUgZGVjbGFyYXRpb25zIGFuZCBkZXNjcmlwdGlvbnMgb2YKKyAgICAgICB0aGVzZSB2YXJpYWJs ZXMuCisgICAgMi4gSWYgYSBjb21tYW5kIGNhbiBiZSBleGVjdXRlZCB3aXRob3V0IHRoZSB1c2Ug b2YgS2VybWl0IHByb3RvY29sLAorICAgICAgIHRoZW4gZXhlY3V0ZSB0aGUgY29tbWFuZCBkaXJl Y3RseSBhbmQgc2V0IHRoZSBzc3RhdGUgKHN0YXJ0IHN0YXRlKQorICAgICAgIHZhcmlhYmxlIHRv IDAuIEV4YW1wbGVzIGluY2x1ZGUgU0VUIGNvbW1hbmRzLCBsb2NhbCBkaXJlY3RvcnkKKyAgICAg ICBsaXN0aW5ncywgdGhlIENPTk5FQ1QgY29tbWFuZC4KKyAgICAzLiBJZiBhIGNvbW1hbmQgcmVx dWlyZXMgdGhlIEtlcm1pdCBwcm90b2NvbCwgc2V0IHRoZSBmb2xsb3dpbmcKKyAgICAgICB2YXJp YWJsZXM6Cisgc3N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZGF0YQor ICAgJ3gnIChlbnRlciBzZXJ2ZXIgbW9kZSkgICAgICAgICAgICAobm9uZSkKKyAgICdyJyAoc2Vu ZCBhICdnZXQnIGNvbW1hbmQpICAgICAgICAgY21hcmcsIGNtYXJnMgorICAgJ3YnIChlbnRlciBy ZWNlaXZlIG1vZGUpICAgICAgICAgICBjbWFyZzIKKyAgICdnJyAoc2VuZCBhIGdlbmVyaWMgY29t bWFuZCkgICAgICAgY21hcmcKKyAgICdzJyAoc2VuZCBmaWxlcykgICAgICAgICAgICAgICAgICAg bmZpbHMsIGNtYXJnICYgY21hcmcyIE9SIGNtbGlzdAorICAgJ2MnIChzZW5kIGEgcmVtb3RlIGhv c3QgY29tbWFuZCkgICBjbWFyZworCisKKyAgICAgICBjbWxpc3QgaXMgYW4gYXJyYXkgb2YgcG9p bnRlcnMgdG8gc3RyaW5ncy4KKyAgICAgICBjbWFyZywgY21hcmcyIGFyZSBwb2ludGVycyB0byBz dHJpbmdzLgorICAgICAgIG5maWxzIGlzIGFuIGludGVnZXIgKGhtbW0sIHByb2JhYmx5IHNob3Vs ZCBiZSBhbiB1bnNpZ25lZCBsb25nKS4KKworICAgICAgICBjbWFyZyBjYW4gYmU6CisgICAgICAg ICAgICAgICAgQSBmaWxlbmFtZSBzdHJpbmcgKHBvc3NpYmx5IHdpbGQpLCBvcjoKKyAgICAgICAg ICAgICAgICBhIHBvaW50ZXIgdG8gYSBwcmVmYWJyaWNhdGVkIGdlbmVyaWMgY29tbWFuZCBzdHJp bmcsIG9yOgorICAgICAgICAgICAgICAgIGEgcG9pbnRlciB0byBhIGhvc3QgY29tbWFuZCBzdHJp bmcuCisKKyAgICAgICAgY21hcmcyIGlzOgorICAgICAgICAgICAgICAgIFRoZSBuYW1lIHRvIHNl bmQgYSBzaW5nbGUgZmlsZSB1bmRlciwgb3I6CisgICAgICAgICAgICAgICAgdGhlIG5hbWUgdW5k ZXIgd2hpY2ggdG8gc3RvcmUgYW4gaW5jb21pbmcgZmlsZTsgbXVzdCBub3QKKyAgICAgICAgICAg ICAgICBiZSB3aWxkLgorICAgICAgICAgICAgICAgIElmIGl0J3MgdGhlIG5hbWUgZm9yIHJlY2Vp dmluZywgYSBudWxsIHZhbHVlIG1lYW5zIHRvCisgICAgICAgICAgICAgICAgc3RvcmUgdGhlIGZp bGUgdW5kZXIgdGhlIG5hbWUgaXQgYXJyaXZlcyB3aXRoLgorCisgICAgICAgIGNtbGlzdCBpczoK KyAgICAgICAgICAgICAgICBBIGxpc3Qgb2Ygbm9ud2lsZCBmaWxlbmFtZXMsIHN1Y2ggYXMgcGFz c2VkIHZpYSBhcmd2LgorCisgICAgICAgIG5maWxzIGlzIGFuIGludGVnZXIsIGludGVycHJldGVk IGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgLTE6IGZpbGVzcGVjIChwb3NzaWJseSB3aWxk KSBpbiBjbWFyZywgbXVzdCBiZSBleHBhbmRlZAorICAgICAgICAgICAgICAgIGludGVybmFsbHku CisgICAgICAgICAgICAgICAgMDogc2VuZCBmcm9tIHN0ZGluIChzdGFuZGFyZCBpbnB1dCkuCisg ICAgICAgICAgICAgICAgPjA6IG51bWJlciBvZiBmaWxlcyB0byBzZW5kLCBmcm9tIGNtbGlzdC4K KworICAgVGhlIHNjcmVlbigpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBzY3JlZW4g ZHVyaW5nIGZpbGUKKyAgIHRyYW5zZmVyLiBUaGUgdGxvZygpIGZ1bmN0aW9uIHdyaXRlcyB0byBh IHRyYW5zYWN0aW9uIGxvZyAoaWYgVExPRyBpcworICAgZGVmaW5lZCkuIFRoZSBkZWJ1ZygpIGZ1 bmN0aW9uIHdyaXRlcyB0byBhIGRlYnVnZ2luZyBsb2cgKGlmIERFQlVHIGlzCisgICBkZWZpbmVk KS4gVGhlIGludG1zZygpIGFuZCBjaGtpbnQoKSBmdW5jdGlvbnMgcHJvdmlkZSB0aGUgdXNlciBp L28gZm9yCisgICBpbnRlcnJ1cHRpbmcgZmlsZSB0cmFuc2ZlcnMuCisKKyAgIFsgWzExN11Db250 ZW50cyBdIFsgWzExOF1DLUtlcm1pdCBdIFsgWzExOV1LZXJtaXQgSG9tZSBdCisKKzQuRS4gR3Jv dXAgRTogUGxhdGZvcm0tRGVwZW5kZW50IEkvTworCisgICBQbGF0Zm9ybS1kZXBlbmRlbnQgZnVu Y3Rpb24gZGVmaW5pdGlvbnMuIEFsbCB0aGUgS2VybWl0IG1vZHVsZXMsCisgICBpbmNsdWRpbmcg dGhlIGNvbW1hbmQgcGFja2FnZSwgY2FsbCB1cG9uIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggYXJl CisgICBkZXNpZ25lZCB0byBwcm92aWRlIHN5c3RlbS1pbmRlcGVuZGVudCBwcmltaXRpdmVzIGZv ciBjb250cm9sbGluZyBhbmQKKyAgIG1hbmlwdWxhdGluZyBkZXZpY2VzIGFuZCBmaWxlcy4gRm9y IFVuaXgsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZAorICAgaW4gdGhlIGZpbGVzIFsxMjBd Y2t1ZmlvLmMgKGZpbGVzKSwgWzEyMV1ja3V0aW8uYyAoY29tbXVuaWNhdGlvbnMpLCBhbmQKKyAg IFsxMjJdY2t1c2lnLmMgKHNpZ25hbCBoYW5kbGluZykuCisKKyAgIEZvciBWTVMsIHRoZSBmaWxl cyBhcmUgWzEyM11ja3ZmaW8uYywgY2t2dGlvLmMsIGFuZCBbMTI0XWNrdXNpZy5jIChWTVMKKyAg IGNhbiB1c2UgdGhlIHNhbWUgc2lnbmFsIGhhbmRsaW5nIHJvdXRpbmVzIGFzIFVuaXgpLiBJdCBk b2Vzbid0IHJlYWxseQorICAgbWF0dGVyIHdoYXQgdGhlIGZpbGVzIGFyZSBjYWxsZWQsIGV4Y2Vw dCBmb3IgS2VybWl0IGRpc3RyaWJ1dGlvbgorICAgcHVycG9zZXMgKGdyb3VwaW5nIHJlbGF0ZWQg ZmlsZXMgdG9nZXRoZXIgYWxwaGFiZXRpY2FsbHkpLCBvbmx5IHRoYXQKKyAgIGVhY2ggZnVuY3Rp b24gaXMgcHJvdmlkZWQgd2l0aCB0aGUgbmFtZSBpbmRpY2F0ZWQsIG9ic2VydmVzIHRoZSBzYW1l CisgICBjYWxsaW5nIGFuZCByZXR1cm4gY29udmVudGlvbnMsIGFuZCBoYXMgdGhlIHNhbWUgdHlw ZS4KKworICAgVGhlIEdyb3VwIEUgbW9kdWxlcyBjb250YWluIGJvdGggZnVuY3Rpb25zIGFuZCBn bG9iYWwgdmFyaWFibGVzIHRoYXQKKyAgIGFyZSBhY2Nlc3NlZCBieSBtb2R1bGVzIGluIHRoZSBv dGhlciBncm91cHMuIFRoZXNlIGFyZSBub3cgZGVzY3JpYmVkLgorCisgICAoQnkgdGhlIHdheSwg SSBnb3QgdGhpcyBsaXN0IGJ5IGxpbmtpbmcgYWxsIHRoZSBDLUtlcm1pdCBtb2R1bGVzCisgICB0 b2dldGhlciBleGNlcHQgY2t1dGlvIGFuZCBja3VmaW8uIFRoZXNlIGFyZSB0aGUgc3ltYm9scyB0 aGF0IGxkCisgICByZXBvcnRlZCBhcyB1bmRlZmluZWQuIEJ1dCB0aGF0IHdhcyBhIGxvbmcgdGlt ZSBhZ28sIHByb2JhYmx5IGNpcmNhCisgICBWZXJzaW9uIDYuKQorCis0LkUuMS4gR2xvYmFsIFZh cmlhYmxlcworCisgICBjaGFyICpERUxDTUQ7CisgICAgICAgICAgUG9pbnRlciB0byBzdHJpbmcg Y29udGFpbmluZyBjb21tYW5kIGZvciBkZWxldGluZyBmaWxlcy4KKyAgICAgICAgICBFeGFtcGxl OiBjaGFyICpERUxDTUQgPSAicm0gLWYgIjsgKFVOSVgpCisgICAgICAgICAgRXhhbXBsZTogY2hh ciAqREVMQ01EID0gImRlbGV0ZSAiOyAoVk1TKQorICAgICAgICAgIE5vdGUgdHJhaWxpbmcgc3Bh Y2UuIEZpbGVuYW1lIGlzIGNvbmNhdGVuYXRlZCB0byBlbmQgb2YgdGhpcworICAgICAgICAgIHN0 cmluZy4gTk9URTogREVMQ01EIGlzIHVzZWQgb25seSBpbiB2ZXJzaW9ucyB0aGF0IGRvIG5vdAor ICAgICAgICAgIHByb3ZpZGUgdGhlaXIgb3duIGJ1aWx0LWluIERFTEVURSBjb21tYW5kLgorCisg ICBjaGFyICpESVJDTUQ7CisgICAgICAgICAgUG9pbnRlciB0byBzdHJpbmcgY29udGFpbmluZyBj b21tYW5kIGZvciBsaXN0aW5nIGZpbGVzIHdoZW4gYQorICAgICAgICAgIGZpbGVzcGVjIGlzIGdp dmVuLgorICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKkRJUkNNRCA9ICIvYmluL2xzIC1sICI7IChV TklYKQorICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKkRJUkNNRCA9ICJkaXJlY3RvcnkgIjsgKFZN UykKKyAgICAgICAgICBOb3RlIHRyYWlsaW5nIHNwYWNlLiBGaWxlbmFtZSBpcyBjb25jYXRlbmF0 ZWQgdG8gZW5kIG9mIHRoaXMKKyAgICAgICAgICBzdHJpbmcuIE5PVEU6IERJUkNNRCBpcyB1c2Vk IG9ubHkgaW4gdmVyc2lvbnMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwcm92aWRlIHRoZWlyIG93 biBidWlsdC1pbiBESVJFQ1RPUlkgY29tbWFuZC4KKworICAgY2hhciAqRElSQ00yOworICAgICAg ICAgIFBvaW50ZXIgdG8gc3RyaW5nIGNvbnRhaW5pbmcgY29tbWFuZCBmb3IgbGlzdGluZyBmaWxl cyB3aGVuIGEKKyAgICAgICAgICBmaWxlc3BlYyBpcyBub3QgZ2l2ZW4uIChjdXJyZW50bHkgbm90 IHVzZWQsIGhhbmRsZWQgaW4gYW5vdGhlcgorICAgICAgICAgIHdheS4pCisgICAgICAgICAgRXhh bXBsZTogY2hhciAqRElSQ01EMiA9ICIvYmluL2xzIC1sZCAqIjsKKyAgICAgICAgICBOT1RFOiBE SVJDTUQyIGlzIHVzZWQgb25seSBpbiB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWly CisgICAgICAgICAgb3duIGJ1aWx0LWluIERJUkVDVE9SWSBjb21tYW5kLgorCisgICBjaGFyICpQ V0RDTUQ7CisgICAgICAgICAgUG9pbnRlciB0byBzdHJpbmcgY29udGFpbmluZyBjb21tYW5kIHRv IGRpc3BsYXkgY3VycmVudAorICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICBFeGFtcGxl OiBjaGFyICpQV0RDTUQgPSAicHdkICI7CisgICAgICAgICAgTk9URTogUFdEQ01EIGlzIHVzZWQg b25seSBpbiB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyCisgICAgICAgICAgb3du IGJ1aWx0LWluIFBXRCBjb21tYW5kLgorCisgICBjaGFyICpTUEFDTUQ7CisgICAgICAgICAgUG9p bnRlciB0byBjb21tYW5kIHRvIGRpc3BsYXkgZnJlZSBkaXNrIHNwYWNlIGluIGN1cnJlbnQKKyAg ICAgICAgICBkZXZpY2UvZGlyZWN0b3J5LgorICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKlNQQUNN RCA9ICJkZiAuIjsKKyAgICAgICAgICBOT1RFOiBTUEFDTUQgaXMgdXNlZCBvbmx5IGluIHZlcnNp b25zIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIKKyAgICAgICAgICBvd24gYnVpbHQtaW4gU1BB Q0UgY29tbWFuZC4KKworICAgY2hhciAqU1BBQ00yOworICAgICAgICAgIFBvaW50ZXIgdG8gY29t bWFuZCB0byBkaXNwbGF5IGZyZWUgZGlzayBzcGFjZSBpbiBhbm90aGVyCisgICAgICAgICAgZGV2 aWNlL2RpcmVjdG9yeS4KKyAgICAgICAgICBFeGFtcGxlOiBjaGFyICpTUEFDTTIgPSAiZGYgIjsK KyAgICAgICAgICBOb3RlIHRyYWlsaW5nIHNwYWNlLiBEZXZpY2Ugb3IgZGlyZWN0b3J5IG5hbWUg aXMgYWRkZWQgdG8gdGhpcworICAgICAgICAgIHN0cmluZy4gTk9URTogU1BBQ01EMiBpcyB1c2Vk IG9ubHkgaW4gdmVyc2lvbnMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwcm92aWRlIHRoZWlyIG93 biBidWlsdC1pbiBTUEFDRSBjb21tYW5kLgorCisgICBjaGFyICpUWVBDTUQ7CisgICAgICAgICAg UG9pbnRlciB0byBjb21tYW5kIGZvciBkaXNwbGF5aW5nIHRoZSBjb250ZW50cyBvZiBhIGZpbGUu CisgICAgICAgICAgRXhhbXBsZTogY2hhciAqVFlQQ01EID0gImNhdCAiOworICAgICAgICAgIE5v dGUgdHJhaWxpbmcgc3BhY2UuIERldmljZSBvciBkaXJlY3RvcnkgbmFtZSBpcyBhZGRlZCB0byB0 aGlzCisgICAgICAgICAgc3RyaW5nLiBOT1RFOiBUWVBDTUQgaXMgdXNlZCBvbmx5IGluIHZlcnNp b25zIHRoYXQgZG8gbm90CisgICAgICAgICAgcHJvdmlkZSB0aGVpciBvd24gYnVpbHQtaW4gVFlQ RSBjb21tYW5kLgorCisgICBjaGFyICpXSE9DTUQ7CisgICAgICAgICAgUG9pbnRlciB0byBjb21t YW5kIGZvciBkaXNwbGF5aW5nIGxvZ2dlZC1pbiB1c2Vycy4KKyAgICAgICAgICBFeGFtcGxlOiBj aGFyICpXSE9DTUQgPSAid2hvICI7CisgICAgICAgICAgTm90ZSB0cmFpbGluZyBzcGFjZS4gU3Bl Y2lmaWMgdXNlciBuYW1lIG1heSBiZSBhZGRlZCB0byB0aGlzCisgICAgICAgICAgc3RyaW5nLgor CisgICBpbnQgYmFja2dyZCA9IDA7CisgICAgICAgICAgRmxhZyBmb3Igd2hldGhlciBwcm9ncmFt IGlzIHJ1bm5pbmcgaW4gZm9yZWdyb3VuZCAoMCkgb3IKKyAgICAgICAgICBiYWNrZ3JvdW5kIChu b256ZXJvKS4gQmFja2dyb3VuZCBvcGVyYXRpb24gaW1wbGllcyB0aGF0IHNjcmVlbgorICAgICAg ICAgIG91dHB1dCBzaG91bGQgbm90IGJlIGRvbmUgYW5kIHRoYXQgYWxsIGVycm9ycyBzaG91bGQg YmUgZmF0YWwuCisKKyAgIGludCBja3hlY2g7CisgICAgICAgICAgRmxhZyBmb3Igd2hvIGlzIHRv IGVjaG8gY29uc29sZSB0eXBlaW46CisgICAgICAgICAgMTogVGhlIHByb2dyYW0gKHN5c3RlbSBp cyBub3QgZWNob2luZykuCisgICAgICAgICAgMDogVGhlIE9TLCBmcm9udCBlbmQsIHRlcm1pbmFs LCBldGMgKG5vdCB0aGlzIHByb2dyYW0pLgorCisgICBjaGFyICpja3hzeXM7CisgICAgICAgICAg UG9pbnRlciB0byBzdHJpbmcgdGhhdCBuYW1lcyB0aGUgY29tcHV0ZXIgYW5kIG9wZXJhdGluZyBz eXN0ZW0uCisgICAgICAgICAgRXhhbXBsZTogY2hhciAqY2t4c3lzID0gIiBOZVhUIE1hY2ggMS4w IjsKKyAgICAgICAgICBUZWxscyB3aGF0IGNvbXB1dGVyIHN5c3RlbSBja3h2IGFwcGxpZXMgdG8u IEluIFVOSVggS2VybWl0LCB0aGlzCisgICAgICAgICAgdmFyaWFibGUgaXMgYWxzbyB1c2VkIHRv IHByaW50IHRoZSBwcm9ncmFtIGhlcmFsZCwgYW5kIGluIHRoZQorICAgICAgICAgIFNIT1cgVkVS U0lPTiBjb21tYW5kLgorCisgICBjaGFyICpja3h2OworICAgICAgICAgIFBvaW50ZXIgdG8gdmVy c2lvbi9lZGl0IGluZm8gb2YgY2s/dGlvLmMgbW9kdWxlLgorICAgICAgICAgIEV4YW1wbGU6IGNo YXIgKmNreHYgPSAiVU5JWCBDb21tdW5pY2F0aW9ucyBTdXBwb3J0LCA2LjAuMTY5LCA2CisgICAg ICAgICAgU2VwIDk2IjsKKyAgICAgICAgICBVc2VkIGJ5IFNIT1cgVkVSU0lPTiBjb21tYW5kLgor CisgICBjaGFyICpja3pzeXM7CisgICAgICAgICAgTGlrZSBja3hzeXMsIGJ1dCBicmllZmVyLgor ICAgICAgICAgIEV4YW1wbGU6IGNoYXIgKmNrenN5cyA9ICIgNC4zIEJTRCI7CisgICAgICAgICAg VGVsbHMgd2hhdCBwbGF0Zm9ybSBja3p2IGFwcGxpZXMgdG8uIFVzZWQgYnkgdGhlIFNIT1cgVkVS U0lPTgorICAgICAgICAgIGNvbW1hbmQuCisKKyAgIGNoYXIgKmNrenY7CisgICAgICAgICAgUG9p bnRlciB0byB2ZXJzaW9uL2VkaXQgaW5mbyBvZiBjaz9maW8uYyBtb2R1bGUuCisgICAgICAgICAg RXhhbXBsZTogY2hhciAqY2t6diA9ICJVTklYIEZpbGUgc3VwcG9ydCwgNi4wLjExMywgNiBTZXAg OTYiOworICAgICAgICAgIFVzZWQgYnkgU0hPVyBWRVJTSU9OIGNvbW1hbmQuCisKKyAgIGludCBk ZmZsb3c7CisgICAgICAgICAgRGVmYXVsdCBmbG93IGNvbnRyb2wuIDAgPSBub25lLCAxID0gWG9u L1hvZmYsIC4uLiAoc2VlIEZMT194eHgKKyAgICAgICAgICBzeW1ib2xzIGluIGNrY2RlYi5oKQor ICAgICAgICAgIFNldCBieSBHcm91cCBFIG1vZHVsZS4gVXNlZCBieSBbMTI1XWNrY21haS5jIHRv IGluaXRpYWxpemUgZmxvdworICAgICAgICAgIGNvbnRyb2wgdmFyaWFibGUuCisKKyAgIGludCBk ZmxvYzsKKyAgICAgICAgICBEZWZhdWx0IGxvY2F0aW9uLiAwID0gcmVtb3RlLCAxID0gbG9jYWwu IFNldCBieSBHcm91cCBFIG1vZHVsZS4KKyAgICAgICAgICBVc2VkIGJ5IGNrY21haS5jIHRvIGlu aXRpYWxpemUgbG9jYWwgdmFyaWFibGUuIFVzZWQgaW4gdmFyaW91cworICAgICAgICAgIHBsYWNl cyBpbiB0aGUgdXNlciBpbnRlcmZhY2UuCisKKyAgIGludCBkZnBydHk7CisgICAgICAgICAgRGVm YXVsdCBwYXJpdHkuIDAgPSBub25lLCAnZScgPSBldmVuLCAnbycgPSBvZGQsICdtJyA9IG1hcmss ICdzJworICAgICAgICAgID0gc3BhY2UuIFNldCBieSBHcm91cCBFIG1vZHVsZS4gVXNlZCBieSBj a2NtYWkuYyB0byBpbml0aWFsaXplCisgICAgICAgICAgcGFyaXR5IHZhcmlhYmxlLgorCisgICBj aGFyICpkZnR0eTsKKyAgICAgICAgICBEZWZhdWx0IGNvbW11bmljYXRpb24gZGV2aWNlLiBTZXQg YnkgR3JvdXAgRSBtb2R1bGUuIFVzZWQgaW4KKyAgICAgICAgICBtYW55IHBsYWNlcy4gVGhpcyB2 YXJpYWJsZSBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdGhlIHN5bWJvbAorICAgICAgICAgIENUVE5B TSwgd2hpY2ggaXMgZGVmaW5lZCBpbiBja2NkZWIuaCwgZS5nLiBhcyAiL2Rldi90dHkiIGZvcgor ICAgICAgICAgIFVOSVgsICJUVDoiIGZvciBWTVMsIGV0Yy4gRXhhbXBsZTogY2hhciAqZGZ0dHkg PSBDVFROQU07CisKKyAgIGNoYXIgKm10Y2hzW107CisgICAgICAgICAgQXJyYXkgb2Ygc3RyaW5n IHBvaW50ZXJzIHRvIGZpbGVuYW1lcyB0aGF0IG1hdGNoZWQgdGhlIG1vc3QKKyAgICAgICAgICBy ZWNlbnQgd2lsZGNhcmQgbWF0Y2gsIGkuZS4gdGhlIG1vc3QgcmVjZW50IGNhbGwgdG8genhwYW5k KCkuCisgICAgICAgICAgVXNlZCAoYXQgbGVhc3QpIGJ5IGNvbW1hbmQgcGFyc2luZyBwYWNrYWdl IGZvciBwYXJ0aWFsIGZpbGVuYW1lCisgICAgICAgICAgY29tcGxldGlvbi4KKworICAgaW50IHRp bGRlX2V4cGFuZDsKKyAgICAgICAgICBGbGFnIGZvciB3aGV0aGVyIHRvIGF0dGVtcHQgdG8gZXhw YW5kIGxlYWRpbmcgdGlsZGVzIGluCisgICAgICAgICAgZGlyZWN0b3J5IG5hbWVzICh1c2VkIGlu IFVOSVggb25seSwgYW5kIHRoZW4gb25seSB3aGVuIHRoZQorICAgICAgICAgIHN5bWJvbCBEVElM REUgaXMgZGVmaW5lZC4KKworICAgaW50IHR0bnByb3RvOworICAgICAgICAgIFRoZSBwcm90b2Nv bCBiZWluZyB1c2VkIHRvIGNvbW11bmljYXRlIG92ZXIgYSBuZXR3b3JrIGRldmljZS4KKyAgICAg ICAgICBWYWx1ZXMgYXJlIGRlZmluZWQgaW4gY2tjbmV0LmguIEV4YW1wbGU6IE5QX1RFTE5FVCBp cyBuZXR3b3JrCisgICAgICAgICAgcHJvdG9jb2wgInRlbG5ldCIuCisKKyAgIGludCBtYXhuYW07 CisgICAgICAgICAgVGhlIG1heGltdW0gbGVuZ3RoIGZvciBhIGZpbGVuYW1lLCBleGNsdXNpdmUg b2YgYW55IGRldmljZSBvcgorICAgICAgICAgIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiwgaW4gdGhl IGZvcm1hdCBvZiB0aGUgaG9zdCBvcGVyYXRpbmcKKyAgICAgICAgICBzeXN0ZW0uCisKKyAgIGlu dCBtYXhwYXRoOworICAgICAgICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgYSBmdWxseSBzcGVj aWZpZWQgZmlsZW5hbWUsIGluY2x1ZGluZworICAgICAgICAgIGRldmljZSBkZXNpZ25hdG9yLCBk aXJlY3RvcnkgbmFtZSwgbmV0d29yayBub2RlIG5hbWUsIGV0YywgaW4KKyAgICAgICAgICB0aGUg Zm9ybWF0IG9mIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0sIGFuZCBpbmNsdWRpbmcgYWxsCisg ICAgICAgICAgcHVuY3R1YXRpb24uCisKKyAgIGludCB0dHlmZDsKKyAgICAgICAgICBGaWxlIGRl c2NyaXB0b3Igb2YgdGhlIGNvbW11bmljYXRpb24gZGV2aWNlLiAtMSBpZiB0aGVyZSBpcyBubwor ICAgICAgICAgIG9wZW4gb3IgdXNhYmxlIGNvbm5lY3Rpb24sIGluY2x1ZGluZyB3aGVuIEMtS2Vy bWl0IGlzIGluIHJlbW90ZQorICAgICAgICAgIG1vZGUuIFNpbmNlIHRoaXMgaXMgbm90IGltcGxl bWVudGVkIGV2ZXJ5d2hlcmUsIHJlZmVyZW5jZXMgdG8gaXQKKyAgICAgICAgICBhcmUgaW4gI2lm ZGVmIENLX1RUWUZELi4jZW5kaWYuCisKKyAgIFsgWzEyNl1Db250ZW50cyBdIFsgWzEyN11DLUtl cm1pdCBdIFsgWzEyOF1LZXJtaXQgSG9tZSBdCisKKzQuRS4yLiBGdW5jdGlvbnMKKworICAgVGhl c2UgYXJlIGRpdmlkZWQgaW50byB0aHJlZSBjYXRlZ29yaWVzOiBmaWxlLXJlbGF0ZWQgZnVuY3Rp b25zIChCLjEpLAorICAgY29tbXVuaWNhdGlvbiBmdW5jdGlvbnMgKEIuMiksIGFuZCBtaXNjZWxs YW5lb3VzIGZ1bmN0aW9ucyAoQi4zKS4KKworNC5FLjIuMS4gRmlsZS1SZWxhdGVkIEZ1bmN0aW9u cworCisgICBJbiBtb3N0IGltcGxlbWVudGF0aW9ucywgdGhlc2UgYXJlIGNvbGxlY3RlZCB0b2dl dGhlciBpbnRvIGEgbW9kdWxlCisgICBjYWxsZWQgY2s/ZmlvLmMsIHdoZXJlID8gPSAidSIgKFsx MjldY2t1dGlvLmMgZm9yIFVuaXgpLCAidiIKKyAgIChbMTMwXWNrdnRpby5jIGZvciBWTVMpLCBb MTMxXWV0Yy4gVG8gYmUgdG90YWxseSBwbGF0Zm9ybS1pbmRlcGVuZGVudCwKKyAgIEMtS2VybWl0 IG1haW50YWlucyBpdHMgb3duIGZpbGUgbnVtYmVycywgYW5kIHByb3ZpZGVzIHRoZSBmdW5jdGlv bnMKKyAgIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIHRoZSBmaWxlcyBh c3NvY2lhdGVkIHdpdGggdGhlbS4KKyAgIFRoZSBmaWxlIG51bWJlcnMgYXJlIHJlZmVycmVkIHRv IHN5bWJvbGljYWxseSwgYW5kIGFyZSBkZWZpbmVkIGFzCisgICBmb2xsb3dzIGluIGNrY2tlci5o OgorCisgICNkZWZpbmUgWkNURVJNICAgICAgMCAgICAgICAgICAgLyogQ29uc29sZSB0ZXJtaW5h bCAqLworICAjZGVmaW5lIFpTVERJTyAgICAgIDEgICAgICAgICAgIC8qIFN0YW5kYXJkIGlucHV0 L291dHB1dCAqLworICAjZGVmaW5lIFpJRklMRSAgICAgIDIgICAgICAgICAgIC8qIEN1cnJlbnQg aW5wdXQgZmlsZSBmb3IgU0VORCBjb21tYW5kICovCisgICNkZWZpbmUgWk9GSUxFICAgICAgMyAg ICAgICAgICAgLyogQ3VycmVudCBvdXRwdXQgZmlsZSBmb3IgUkVDRUlWRSBjb21tYW5kICovCisg ICNkZWZpbmUgWkRGSUxFICAgICAgNCAgICAgICAgICAgLyogQ3VycmVudCBkZWJ1Z2dpbmcgbG9n IGZpbGUgKi8KKyAgI2RlZmluZSBaVEZJTEUgICAgICA1ICAgICAgICAgICAvKiBDdXJyZW50IHRy YW5zYWN0aW9uIGxvZyBmaWxlICovCisgICNkZWZpbmUgWlBGSUxFICAgICAgNiAgICAgICAgICAg LyogQ3VycmVudCBwYWNrZXQgbG9nIGZpbGUgKi8KKyAgI2RlZmluZSBaU0ZJTEUgICAgICA3ICAg ICAgICAgICAvKiBDdXJyZW50IHNlc3Npb24gbG9nIGZpbGUgKi8KKyAgI2RlZmluZSBaU1lTRk4g ICAgICA4ICAgICAgICAgICAvKiBJbnB1dCBmcm9tIGEgc3lzdGVtIGZ1bmN0aW9uIChwaXBlKSAq LworICAjZGVmaW5lIFpSRklMRSAgICAgIDkgICAgICAgICAgIC8qIExvY2FsIGZpbGUgZm9yIFJF QUQgY29tbWFuZCAqLyAgKE5FVykKKyAgI2RlZmluZSBaV0ZJTEUgICAgIDEwICAgICAgICAgICAv KiBMb2NhbCBmaWxlIGZvciBXUklURSBjb21tYW5kICovIChORVcpCisgICNkZWZpbmUgWk1GSUxF ICAgICAxMSAgICAgICAgICAgLyogQXV4aWxpYXJ5IGZpbGUgZm9yIGludGVybmFsIHVzZSAqLyAo TkVXKQorICAjZGVmaW5lIFpORklMUyAgICAgMTIgICAgICAgICAgIC8qIEhvdyBtYW55IGRlZmlu ZWQgZmlsZSBudW1iZXJzICovCisKKyAgIEluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3csIGZuIHJl ZmVycyB0byBhIGZpbGVuYW1lLCBhbmQgbiByZWZlcnMgdG8gb25lCisgICBvZiB0aGVzZSBmaWxl IG51bWJlcnMuIEZ1bmN0aW9ucyBhcmUgb2YgdHlwZSBpbnQgdW5sZXNzIG90aGVyd2lzZQorICAg bm90ZWQsIGFuZCBhcmUgbGlzdGVkIG1vc3RseSBhbHBoYWJldGljYWxseS4KKworICAgaW50Cisg ICAgICAgICAgY2hrZm4obikgaW50IG47CisgICAgICAgICAgQ2hlY2tzIHRoZSBmaWxlIG51bWJl ciBuLiBSZXR1cm5zOgorICAgICAgICAgICAtMTogRmlsZSBudW1iZXIgbiBpcyBvdXQgb2YgcmFu Z2UKKyAgICAgICAgICAgIDA6IG4gaXMgaW4gcmFuZ2UsIGJ1dCBmaWxlIGlzIG5vdCBvcGVuCisg ICAgICAgICAgICAxOiBuIGluIHJhbmdlIGFuZCBmaWxlIGlzIG9wZW4KKworICAgaW50CisgICAg ICAgICAgaXN3aWxkKGZpbHNwZWMpIGNoYXIgKmZpbGVzcGVjOworICAgICAgICAgIENoZWNrcyBp ZiB0aGUgZmlsZSBzcGVjaWZpY2F0aW9uIGlzICJ3aWxkIiwgaS5lLiBjb250YWlucworICAgICAg ICAgIG1ldGFjaGFyYWN0ZXJzIG9yIG90aGVyIG5vdGF0aW9ucyBpbnRlbmRlZCB0byBtYXRjaCBt dWx0aXBsZQorICAgICAgICAgIGZpbGVuYW1lcy4gUmV0dXJuczoKKyAgICAgICAgICAgIDA6IG5v dCB3aWxkCisgICAgICAgICAgICAxOiB3aWxkLgorCisgICBpbnQKKyAgICAgICAgICBpc2Rpcihz dHJpbmcpIGNoYXIgKnN0cmluZzsKKyAgICAgICAgICBDaGVja3MgaWYgdGhlIHN0cmluZyBpcyB0 aGUgbmFtZSBvZiBhbiBleGlzdGluZyBkaXJlY3RvcnkuIFRoZQorICAgICAgICAgIGlkZWEgaXMg dG8gY2hlY2sgd2hldGhlciB0aGUgc3RyaW5nIGNhbiBiZSAiY2QnZCIgdG8sIHNvIGluIHNvbWUK KyAgICAgICAgICBjYXNlcyAoZS5nLiBET1MpIGl0IG1pZ2h0IGFsc28gaW5kaWNhdGUgYW55IGZp bGUgc3RydWN0dXJlZAorICAgICAgICAgIGRldmljZSwgc3VjaCBhcyBhIGRpc2sgZHJpdmUgKGxp a2UgQTopLiBPdGhlciBub256ZXJvIHJldHVybnMKKyAgICAgICAgICBpbmRpY2F0ZSBzeXN0ZW0t ZGVwZW5kZW50IGluZm9ybWF0aW9uOyBlLmcuIGluIFZNUworICAgICAgICAgIGlzZGlyKCJbLkZP T10iKSByZXR1cm5zIDEgYnV0IGlzZGlyKCJGT08uRElSOzEiKSByZXR1cm5zIDIgdG8KKyAgICAg ICAgICBpbmRpY2F0ZSB0aGUgZGlyZWN0b3J5LWZpbGUgbmFtZSBpcyBpbiBhIGZvcm1hdCB0aGF0 IG5lZWRzCisgICAgICAgICAgY29udmVyc2lvbiBiZWZvcmUgaXQgY2FuIGJlIGNvbWJpbmVkIHdp dGggYSBmaWxlbmFtZS4gUmV0dXJuczoKKyAgICAgICAgICAgIDA6IG5vdCBhIGRpcmVjdG9yeSAo aW5jbHVkaW5nIGFueSBraW5kIG9mIGVycm9yKQorICAgICAgICAgICAgMTogaXQgaXMgYW4gZXhp c3RpbmcgZGlyZWN0b3J5CisKKyAgIGNoYXIgKgorICAgICAgICAgIHpmY2RhdChuYW1lKSBjaGFy ICpuYW1lOworICAgICAgICAgIFJldHVybnMgbW9kaWZpY2F0aW9uIChwcmVmZXJhYmx5LCBvdGhl cndpc2UgY3JlYXRpb24pIGRhdGUvdGltZQorICAgICAgICAgIG9mIGZpbGUgd2hvc2UgbmFtZSBp cyBnaXZlbiBpbiB0aGUgYXJndW1lbnQgc3RyaW5nLiBSZXR1cm4gdmFsdWUKKyAgICAgICAgICBp cyBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgb2YgdGhlIGZvcm0geXl5eW1tZGQgaGg6bW06c3MsIGZv cgorICAgICAgICAgIGV4YW1wbGUgMTk5MzEyMzEgMjM6NTk6NTksIHdoaWNoIHJlcHJlc2VudHMg dGhlIGxvY2FsIHRpbWUgKG5vCisgICAgICAgICAgdGltZXpvbmUgb3IgZGF5bGlnaHQgc2F2aW5n cyB0aW1lIGZpbmFnbGluZyByZXF1aXJlZCkuIFJldHVybnMKKyAgICAgICAgICB0aGUgbnVsbCBz dHJpbmcgKCIiKSBvbiBmYWlsdXJlLiBUaGUgdGV4dCBwb2ludGVkIHRvIGJ5IHRoZQorICAgICAg ICAgIHN0cmluZyBwb2ludGVyIG1pZ2h0IGJlIGluIGEgc3RhdGljIGJ1ZmZlciwgYW5kIHNvIHNo b3VsZCBiZQorICAgICAgICAgIGNvcGllZCB0byBhIHNhZmUgcGxhY2UgYnkgdGhlIGNhbGxlciBi ZWZvcmUgYW55IHN1YnNlcXVlbnQgY2FsbHMKKyAgICAgICAgICB0byB0aGlzIGZ1bmN0aW9uLgor CisgICBzdHJ1Y3QgemZuZnAgKgorICAgICAgICAgIHpmbnFmcChmbiwgYnVmbGVuLCBidWYpIGNo YXIgKiBmbjsgaW50IGJ1ZmxlbjsgY2hhciAqIGJ1ZjsKKyAgICAgICAgICBHaXZlbiB0aGUgZmls ZW5hbWUgZm4sIHRoZSBjb3JyZXNwb25kaW5nIGZ1bGx5IHF1YWxpZmllZCwKKyAgICAgICAgICBh YnNvbHV0ZSBmaWxlbmFtZSBpcyBwbGFjZWQgaW50byB0aGUgYnVmZmVyIGJ1Ziwgd2hvc2UgbGVu Z3RoIGlzCisgICAgICAgICAgYnVmbGVuLiBPbiBmYWlsdXJlIHJldHVybnMgYSBOVUxMIHBvaW50 ZXIuIE9uIHN1Y2Nlc3MgcmV0dXJucyBhCisgICAgICAgICAgcG9pbnRlciB0byBhIHN0cnVjdCB6 Zm5mcCBjb250YWluaW5nIHBvaW50ZXJzIHRvIHRoZSBmdWxsCisgICAgICAgICAgcGF0aG5hbWUg YW5kIHRvIGp1c3QgdGhlIGZpbGVuYW1lLCBhbmQgYW4gaW50IGdpdmluZyB0aGUgbGVuZ3RoCisg ICAgICAgICAgb2YgdGhlIGZ1bGwgcGF0aG5hbWUuIEFsbCByZWZlcmVuY2VzIHRvIHRoaXMgZnVu Y3Rpb24gaW4KKyAgICAgICAgICBtYWlubGluZSBjb2RlIG11c3QgYmUgcHJvdGVjdGVkIGJ5ICNp ZmRlZiBaRk5RRlAuLiNlbmRpZiwKKyAgICAgICAgICBiZWNhdXNlIGl0IGlzIG5vdCBwcmVzZW50 IGluIGFsbCBvZiB0aGUgY2sqZmlvLmMgbW9kdWxlcy4gU28gaWYKKyAgICAgICAgICB5b3UgaW1w bGVtZW50IHRoaXMgZnVuY3Rpb24gaW4gYSB2ZXJzaW9uIHRoYXQgZGlkIG5vdCBoYXZlIGl0Cisg ICAgICAgICAgYmVmb3JlLCBiZSBzdXJlIHRvIGFkZCAjZGVmaW5lIFpGTlFGUCBpbiB0aGUgYXBw cm9wcmlhdGUgc3BvdCBpbgorICAgICAgICAgIGNrY2RlYi5oIG9yIGluIHRoZSBidWlsZC1wcm9j ZWR1cmUgQ0ZMQUdTLgorCisgICBpbnQKKyAgICAgICAgICB6Y21wZm4oczEsczIpIGNoYXIgKiBz MiwgKiBzMjsKKyAgICAgICAgICBDb21wYXJlcyB0d28gZmlsZW5hbWVzIHRvIHNlZSBpZiB0aGV5 IHJlZmVyIHRvIHRoZSBzYW1lLgorICAgICAgICAgIEludGVybmFsbHksIHRoZSBhcmd1bWVudHMg Y2FuIGJlIGNvbnZlcnRlZCB0byBmdWxseSBxdWFsaWZpZWQKKyAgICAgICAgICBwYXRobmFtZXMs IGUuZy4gd2l0aCB6Zm5xZnAoKSwgcmVhbHBhdGgoKSwgb3Igc29tZXN1Y2guIEluIFVuaXgKKyAg ICAgICAgICBvciBvdGhlciBzeXN0ZW1zIHdoZXJlIHN5bWJvbGljIGxpbmtzIGV4aXN0LCB0aGUg bGluayBzaG91bGQgYmUKKyAgICAgICAgICByZXNvbHZlZCBiZWZvcmUgbWFraW5nIHRoZSBjb21w YXJpc29uIG9yIGxvb2tpbmcgYXQgdGhlIGlub2Rlcy4KKyAgICAgICAgICBSZXR1cm5zOgorICAg ICAgICAgICAgMDogRmlsZXMgYXJlIG5vdCBpZGVudGljYWwuCisgICAgICAgICAgICAxOiBGaWxl cyBhcmUgaWRlbnRpY2FsLgorCisgICBpbnQKKyAgICAgICAgICB6ZnNlZWsocG9zKSBsb25nIHBv czsKKyAgICAgICAgICBQb3NpdGlvbnMgdGhlIGlucHV0IHBvaW50ZXIgb24gdGhlIGN1cnJlbnQg aW5wdXQgZmlsZSB0byB0aGUKKyAgICAgICAgICBnaXZlbiBwb3NpdGlvbi4gVGhlIHBvcyBhcmd1 bWVudCBpcyAwLWJhc2VkLCB0aGUgb2Zmc2V0CisgICAgICAgICAgKGRpc3RhbmNlIGluIGJ5dGVz KSBmcm9tIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gTmVlZGVkIGZvcgorICAgICAgICAgIFJFU0VO RCwgUFNFTkQsIGFuZCBvdGhlciByZWNvdmVyeSBvcGVyYXRpb25zLiBUaGlzIGZ1bmN0aW9uIGlz CisgICAgICAgICAgbm90IG5lY2Vzc2FyaWx5IHBvc3NpYmxlIG9uIGFsbCBzeXN0ZW1zLCBlLmcu IHJlY29yZC1vcmllbnRlZAorICAgICAgICAgIHN5c3RlbXMuIEl0IHNob3VsZCBvbmx5IGJlIHVz ZWQgb24gYmluYXJ5IGZpbGVzIChpLmUuIGZpbGVzIHdlCisgICAgICAgICAgYXJlIHNlbmRpbmcg aW4gYmluYXJ5IG1vZGUpIGFuZCBzdHJlYW0tb3JpZW50ZWQgZmlsZSBzeXN0ZW1zLgorICAgICAg ICAgIFJldHVybnM6CisgICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgorICAgICAgICAgICAgMDog T24gc3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAgemNoZGlyKGRpcm5hbSkgY2hhciAqZGly bmFtOworICAgICAgICAgIENoYW5nZXMgY3VycmVudCBvciBkZWZhdWx0IGRpcmVjdG9yeSB0byB0 aGUgb25lIGdpdmVuIGluIGRpcm5hbS4KKyAgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAg MDogT24gZmFpbHVyZS4KKyAgICAgICAgICAgIDE6IG9uIHN1Y2Nlc3MuCisKKyAgIGxvbmcKKyAg ICAgICAgICB6Y2hraShmbikgY2hhciAqZm47CisgICAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGZp bGUgd2l0aCBuYW1lIGZuIGlzIGEgcmVndWxhciwgcmVhZGFibGUsCisgICAgICAgICAgZXhpc3Rp bmcgZmlsZSwgc3VpdGFibGUgZm9yIEtlcm1pdCB0byBzZW5kIC0tIG5vdCBhIGRpcmVjdG9yeSwK KyAgICAgICAgICBub3QgYSBzeW1ib2xpYyBsaW5rLCBldGMuIFJldHVybnM6CisgICAgICAgICAg IC0zOiBpZiBmaWxlIGV4aXN0cyBidXQgaXMgbm90IGFjY2Vzc2libGUgKGUuZy4gcmVhZC1wcm90 ZWN0ZWQpOworICAgICAgICAgICAtMjogaWYgZmlsZSBleGlzdHMgYnV0IGlzIG5vdCBvZiBhIHJl YWRhYmxlIHR5cGUgKGUuZy4gYQorICAgICAgICAgIGRpcmVjdG9yeSk7CisgICAgICAgICAgIC0x OiBvbiBlcnJvciAoZS5nLiBmaWxlIGRvZXMgbm90IGV4aXN0LCBvciBmbiBpcyBnYXJiYWdlKTsK KyAgICAgICAgICA+PTA6IChsZW5ndGggb2YgZmlsZSkgaWYgZmlsZSBleGlzdHMgYW5kIGlzIHJl YWRhYmxlLgorICAgICAgICAgIEFsc28gc2VlIGlzZGlyKCksIHpnZXRmcygpLgorCisgICBpbnQK KyAgICAgICAgICB6Y2hrcGlkKHBpZCkgdW5zaWduZWQgbG9uZyBwaWQ7CisgICAgICAgICAgUmV0 dXJuczoKKyAgICAgICAgICAgIDE6IElmIHRoZSBnaXZlbiBwcm9jZXNzIElEIChlLmcuIHBpZCBp biBVTklYKSBpcyB2YWxpZCBhbmQKKyAgICAgICAgICBhY3RpdmUKKyAgICAgICAgICAgIDA6IG90 aGVyd2lzZS4KKworICAgbG9uZworICAgICAgICAgIHpnZXRmcyhmbikgY2hhciAqZm47CisgICAg ICAgICAgR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gZmlsZSwgcmVnYXJkbGVzcyBvZiBhY2Nl c3NpYmlsaXR5LgorICAgICAgICAgIFVzZWQgZm9yIGRpcmVjdG9yeSBsaXN0aW5ncy4gVW5saWtl IHpjaGtpKCksIHNob3VsZCByZXR1cm4gdGhlCisgICAgICAgICAgc2l6ZSBvZiBhbnkga2luZCBv ZiBmaWxlLCBldmVuIGEgZGlyZWN0b3J5LiB6Z2V0ZnMoKSBhbHNvIHNob3VsZAorICAgICAgICAg IHNlcnZlIGFzIGEgbWluaSAiZ2V0IGZpbGUgaW5mbyIgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNl ZCB1bnRpbAorICAgICAgICAgIHdlIGRlc2lnbiBhIGJldHRlciBvbmUsIGJ5IGFsc28gc2V0dGlu ZyBzb21lIGdsb2JhbCB2YXJpYWJsZXM6CisgICAgICAgICAgICBpbnQgemdmc19saW5rICAgPSAx LzAgPSBmaWxlIGlzIChub3QpIGEgc3ltYm9saWMgbGluay4KKyAgICAgICAgICAgIGludCB6Z2Zz X2RpciAgICA9IDEvMCA9IGZpbGUgaXMgKG5vdCkgYSBkaXJlY3RvcnkuCisgICAgICAgICAgICBj aGFyIGxpbmtuYW1lW10gPSBpZiB6Z2ZzX2xpbmsgIT0gMCwgbmFtZSBvZiBmaWxlIGxpbmsgcG9p bnRzCisgICAgICAgICAgdG8uCisgICAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9u IGVycm9yIChlLmcuIGZpbGUgZG9lcyBub3QgZXhpc3QsIG9yIGZuIGlzIGdhcmJhZ2UpOworICAg ICAgICAgID49MDogKGxlbmd0aCBvZiBmaWxlKSBpZiBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFi bGUuCisKKyAgIGludAorICAgICAgICAgIHpjaGtvKGZuKSBjaGFyICpmbjsKKyAgICAgICAgICBD aGVja3MgdG8gc2VlIGlmIGEgZmlsZSBvZiB0aGUgZ2l2ZW4gbmFtZSBjYW4gYmUgY3JlYXRlZC4K KyAgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAtMTogaWYgZmlsZSBjYW5ub3QgYmUgY3Jl YXRlZCwgb3Igb24gYW55IGtpbmQgb2YgZXJyb3IuCisgICAgICAgICAgICAwOiBpZiBmaWxlIGNh biBiZSBjcmVhdGVkLgorCisgICBpbnQKKyAgICAgICAgICB6Y2hrc3BhKGZuLGxlbikgY2hhciAq ZjsgbG9uZyBsZW47CisgICAgICAgICAgQ2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBpcyBzdWZmaWNp ZW50IHNwYWNlIHRvIHN0b3JlIHRoZSBmaWxlCisgICAgICAgICAgbmFtZWQgZm4sIHdoaWNoIGlz IGxlbiBieXRlcyBsb25nLiBJZiB5b3UgY2FuJ3Qgd3JpdGUgYSBmdW5jdGlvbgorICAgICAgICAg IHRvIGRvIHRoaXMsIHRoZW4ganVzdCBtYWtlIGEgZHVtbXkgdGhhdCBhbHdheXMgcmV0dXJucyAx OyBoaWdoZXIKKyAgICAgICAgICBsZXZlbCBjb2RlIHdpbGwgcmVjb3ZlciBmcm9tIGRpc2stZnVs bCBlcnJvcnMuIFRoZSByZWNlaXZpbmcKKyAgICAgICAgICBLZXJtaXQgdXNlcyB0aGlzIGZ1bmN0 aW9uIHRvIHJlZnVzZSBhbiBpbmNvbWluZyBmaWxlIGJhc2VkIG9uCisgICAgICAgICAgaXRzIHNp emUsIHZpYSB0aGUgYXR0cmlidXRlIG1lY2hhbmlzbS4gUmV0dXJuczoKKyAgICAgICAgICAgLTE6 IG9uIGVycm9yLgorICAgICAgICAgICAgMDogaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZS4K KyAgICAgICAgICAgIDE6IGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZS4KKworICAgaW50CisgICAg ICAgICAgemNoaW4obixjKSBpbnQgbjsgaW50ICpjOworICAgICAgICAgIEdldHMgYSBjaGFyYWN0 ZXIgZnJvbSBmaWxlIG51bWJlciBuLCByZXR1cm4gaXQgaW4gYyAoY2FsbCB3aXRoCisgICAgICAg ICAgJmMpLiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZmFpbHVyZSwgaW5jbHVkaW5nIEVP Ri4KKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3Mgd2l0aCBjaGFyYWN0ZXIgaW4gYy4KKworICAg aW50CisgICAgICAgICAgemNob3V0KG4sYykgaW50IG47IGNoYXIgYzsKKyAgICAgICAgICBXcml0 ZXMgdGhlIGNoYXJhY3RlciBjIHRvIGZpbGUgbnVtYmVyIG4uIFJldHVybnM6CisgICAgICAgICAg IC0xOiBvbiBlcnJvci4KKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAg ICAgICAgIHpjbG9zZShuKSBpbnQgbjsKKyAgICAgICAgICBDbG9zZXMgZmlsZSBudW1iZXIgbi4g UmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGVycm9yLgorICAgICAgICAgICAgMTogb24gc3Vj Y2Vzcy4KKworICAgaW50CisgICAgICAgICAgemRlbGV0KGZuKSBjaGFyICpuYW1lOworICAgICAg ICAgIEF0dGVtcHRzIHRvIGRlbGV0ZSAocmVtb3ZlLCBlcmFzZSkgdGhlIG5hbWVkIGZpbGUuIFJl dHVybnM6CisgICAgICAgICAgIC0xOiBvbiBlcnJvci4KKyAgICAgICAgICAgIDE6IGlmIGZpbGUg d2FzIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorCisgICBjaGFyICoKKyAgICAgICAgICB6Z3Blcm0o Y2hhciAqIGYpCisgICAgICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN5c3RlbS1kZXBl bmRlbnQgbnVtZXJpYworICAgICAgICAgIHBlcm1pc3Npb25zL3Byb3RlY3Rpb24gc3RyaW5nIGZv ciBmaWxlIGYsIG9yIE5VTEwgdXBvbiBmYWlsdXJlLgorICAgICAgICAgIFVzZWQgaWYgQ0tfUEVS TVMgaXMgZGVmaW5lZC4KKworICAgY2hhciAqCisgICAgICAgICAgemlwZXJtKGNoYXIgKiBmKQor ICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzeXN0ZW0tZGVwZW5kZW50IHN5bWJv bGljCisgICAgICAgICAgcGVybWlzc2lvbnMvcHJvdGVjdGlvbiBzdHJpbmcgZm9yIGZpbGUgZiwg b3IgTlVMTCB1cG9uIGZhaWx1cmUuCisgICAgICAgICAgVXNlZCBpZiBDS19QRVJNUyBpcyBkZWZp bmVkLiBFeGFtcGxlOiBJbiBVTklYIHpncGVybShmKSBtaWdodAorICAgICAgICAgIHJldHVybiAi MTAwNzcwIiwgYnV0IHppcGVybSgpIG1pZ2h0IHJldHVybiAiLXJ3eHJ3eC0tLSIuIEluIFZNUywK KyAgICAgICAgICB6Z3Blcm0oKSB3b3VsZCByZXR1cm4gYSBoZXhhZGVjaW1hbCBzdHJpbmcsIGJ1 dCB6aXBlcm0oKSB3b3VsZAorICAgICAgICAgIHJldHVybiBzb21ldGhpbmcgbGlrZSAiKFJXRUQs UldFRCxSRSwpIi4KKworICAgY2hhciAqCisgICAgICAgICAgemd0ZGlyKCkKKyAgICAgICAgICBS ZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGZv bGRlciwKKyAgICAgICAgICBldGMsIG9yIGEgTlVMTCBwb2ludGVyIGlmIHRoZSBjdXJyZW50IGRp cmVjdG9yeSBjYW5ub3QgYmUKKyAgICAgICAgICBkZXRlcm1pbmVkLiBJZiBwb3NzaWJsZSwgdGhl IGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uIHNob3VsZCBiZQorICAgICAgICAgIChhKSBmdWxseSBz cGVjaWZpZWQsIGUuZy4gYXMgYSBjb21wbGV0ZSBwYXRobmFtZSwgYW5kIChiKSBiZQorICAgICAg ICAgIHN1aXRhYmxlIGZvciBhcHBlbmRpbmcgYSBmaWxlbmFtZS4gVGh1cywgZm9yIGV4YW1wbGUs IFVuaXgKKyAgICAgICAgICBkaXJlY3RvcnkgbmFtZXMgc2hvdWxkIGVuZCB3aXRoICcvJy4gVk1T IGRpcmVjdG9yeSBuYW1lcyBzaG91bGQKKyAgICAgICAgICBsb29rIGxpa2UgREVWOltOQU1FXSAo cmF0aGVyIHRoYW4sIHNheSwgTkFNRS5ESVI7MSkuCisKKyAgIGNoYXIgKgorICAgICAgICAgIHpo b21lKCkKKyAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0cmluZyBjb250YWluaW5n IHRoZSB1c2VyJ3MgaG9tZQorICAgICAgICAgIGRpcmVjdG9yeSwgb3IgTlVMTCB1cG9uIGVycm9y LiBTaG91bGQgYmUgZm9ybWF0dGVkIGxpa2Ugemd0ZGlyKCkKKyAgICAgICAgICAocS52LikuCisK KyAgIGludAorICAgICAgICAgIHppbmZpbGwoKQorICAgICAgICAgIEZpbGwgYnVmZmVyIGZyb20g aW5wdXQgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBtYWNybworICAgICAgICAg IHptaW5jaGFyKCksIHdoaWNoIGlzIGRlZmluZWQgaW4gY2tja2VyLmguIHptaW5jaGFyKCkgbWFu YWdlcyBpdHMKKyAgICAgICAgICBvd24gYnVmZmVyLCBhbmQgY2FsbHMgemluZmlsbCgpIHRvIGZp bGwgaXQgd2hlbmV2ZXIgaXQgYmVjb21lcworICAgICAgICAgIGVtcHR5LiBJdCBpcyB1c2VkIG9u bHkgZm9yIHNlbmRpbmcgZmlsZXMsIGFuZCByZWFkcyBjaGFyYWN0ZXJzCisgICAgICAgICAgb25s eSBmcm9tIGZpbGUgbnVtYmVyIFpJRklMRS4gemluZmlsbCgpIHJldHVybnMgLTEgdXBvbiBlbmQg b2YKKyAgICAgICAgICBmaWxlLCAtMiB1cG9uIGZhdGFsIGVycm9yLCBhbmQgLTMgdXBvbiB0aW1l b3V0IChlLmcuIHdoZW4KKyAgICAgICAgICByZWFkaW5nIGZyb20gYSBwaXBlKTsgb3RoZXJ3aXNl IGl0IHJldHVybnMgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgICAgICAgIGZyb20gdGhlIGJ1ZmZl ciBpdCBqdXN0IHJlYWQuCisKKyAgIGludAorICAgICAgICAgIHprc2VsZigpCisgICAgICAgICAg S2lsbHMgdGhlIGN1cnJlbnQgam9iLCBzZXNzaW9uLCBwcm9jZXNzLCBldGMsIGxvZ3Mgb3V0LAor ICAgICAgICAgIGRpc2FwcGVhcnMuIFVzZWQgYnkgdGhlIEtlcm1pdCBzZXJ2ZXIgd2hlbiBpdCBy ZWNlaXZlcyBhIEJZRQorICAgICAgICAgIGNvbW1hbmQuIE9uIGZhaWx1cmUsIHJldHVybnMgLTEu IE9uIHN1Y2Nlc3MsIGRvZXMgbm90IHJldHVybiBhdAorICAgICAgICAgIGFsbCEgVGhpcyBmdW5j dGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB1bnRpbCBhbGwgb3RoZXIgc3RlcHMKKyAgICAgICAg ICBoYXZlIGJlZW4gdGFrZW4gdG8gY2xvc2UgZmlsZXMsIGV0Yy4KKworICAgVk9JRAorICAgICAg ICAgIHpzdHJpcChmbiwmZm4yKSBjaGFyICpmbjEsICoqZm4yOworICAgICAgICAgIFN0cmlwcyBk ZXZpY2UgYW5kIGRpcmVjdG9yeSwgZXRjLCBmcm9tIGZpbGUgc3BlY2lmaWNhdGlvbiBmbiwKKyAg ICAgICAgICBsZWF2aW5nIG9ubHkgdGhlIGZpbGVuYW1lIChpbmNsdWRpbmcgImV4dGVuc2lvbiIg b3IgImZpbGV0eXBlIgorICAgICAgICAgIC0tIHRoZSBwYXJ0IGFmdGVyIHRoZSBkb3QpLiBGb3Ig ZXhhbXBsZSBEVUEwOltQUk9HUkFNU11PT0ZBLkM7MworICAgICAgICAgIGJlY29tZXMgT09GQS5D LCBvciAvdXNyL2ZkYy9vb2ZhLmMgYmVjb21lcyBvb2ZhLmMuIFJldHVybnMgYQorICAgICAgICAg IHBvaW50ZXIgdG8gcmVzdWx0IGluIGZuMi4KKworICAgaW50CisgICAgICAgICAgenNldHBlcm0o Y2hhciAqIGZpbGUsIHVuc2lnbmVkIGludCBjb2RlKQorICAgICAgICAgIFNldCBwZXJtaXNzaW9u cyBvZiBmaWxlIHRvIGdpdmVuIHN5c3RlbS1kZXBlbmRlbnQgY29kZS4gICAwOiBPbgorICAgICAg ICAgIGZhaWx1cmUuCisgICAgICAgICAgICAxOiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAg ICAgICB6c2V0cm9vdChjaGFyICogZGlyKQorICAgICAgICAgIFNldHMgdGhlIHJvb3QgZm9yIHRo ZSB1c2VyJ3MgZmlsZSBhY2Nlc3MsIGxpa2UgVW5peCBjaHJvb3QoKSwKKyAgICAgICAgICBidXQg ZG9lcyBub3QgcmVxdWlyZSBwcml2aWxlZ2UuIEluIFVuaXgsIHRoaXMgbXVzdCBiZQorICAgICAg ICAgIGltcGxlbWVudGVkIGVudGlyZWx5IGJ5IEtlcm1pdCdzIG93biBmaWxlIGFjY2VzcyByb3V0 aW5lcy4KKyAgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgMTogU3VjY2VzcworICAgICAg ICAgICAtMTogSW52YWxpZCBhcmd1bWVudAorICAgICAgICAgICAtMjoKKyAgICAgICAgICAgLTM6 IEludGVybmFsIGVycm9yCisgICAgICAgICAgIC00OiBBY2Nlc3MgdG8gZ2l2ZW4gZGlyZWN0b3J5 IGRlbmllZAorICAgICAgICAgICAtNTogTmV3IHJvb3Qgbm90IHdpdGhpbiBvbGQgcm9vdAorCisg ICBpbnQKKyAgICAgICAgICB6aW5yb290KGNoYXIgKiBmaWxlKQorICAgICAgICAgIElmIG5vIHJv b3QgaXMgc2V0ICh6c2V0cm9vdCgpKSwgcmV0dXJucyAxLgorICAgICAgICAgIE90aGVyd2lzZSwg aWYgZ2l2ZW4gZmlsZSBpcyBpbiB0aGUgcm9vdCwgcmV0dXJucyAxLgorICAgICAgICAgIE90aGVy d2lzZSwgcmV0dXJucyAwLgorCisgICBWT0lECisgICAgICAgICAgemx0b3IoZm4sZm4yKSBjaGFy ICpmbjEsICpmbjI7CisgICAgICAgICAgTG9jYWwtVG8tUmVtb3RlIGZpbGVuYW1lIHRyYW5zbGF0 aW9uLiBPQlNPTEVURTogcmVwbGFjZWQgYnkKKyAgICAgICAgICBuemx0b3IoKSAocS52LikuIFRy YW5zbGF0ZXMgdGhlIGxvY2FsIGZpbGVuYW1lIGZuIGludG8gYSBmb3JtYXQKKyAgICAgICAgICBz dWl0YWJsZSBmb3IgdHJhbnNtaXNzaW9uIHRvIGFuIGFyYml0cmFyeSB0eXBlIG9mIGNvbXB1dGVy LCBhbmQKKyAgICAgICAgICBjb3BpZXMgdGhlIHJlc3VsdCBpbnRvIHRoZSBidWZmZXIgcG9pbnRl ZCB0byBieSBmbjIuIFRyYW5zbGF0aW9uCisgICAgICAgICAgbWF5IGludm9sdmUgKGEpIHN0cmlw cGluZyB0aGUgZGV2aWNlIGFuZC9vciBkaXJlY3RvcnkvcGF0aCBuYW1lLAorICAgICAgICAgIChi KSBjb252ZXJ0aW5nIGxvd2VyY2FzZSB0byB1cHBlcmNhc2UsIChjKSByZW1vdmluZyBzcGFjZXMg YW5kCisgICAgICAgICAgc3RyYW5nZSBjaGFyYWN0ZXJzLCBvciBjb252ZXJ0aW5nIHRoZW0gdG8g c29tZSBpbm5vY3VvdXMKKyAgICAgICAgICBhbHBoYWJldGljIGNoYXJhY3RlciBsaWtlIFgsIChk KSBkaXNjYXJkaW5nIG9yIGNvbnZlcnRpbmcgZXh0cmEKKyAgICAgICAgICBwZXJpb2RzICh0aGVy ZSBzaG91bGQgbm90IGJlIG1vcmUgdGhhbiBvbmUpLiBEb2VzIGl0cyBiZXN0LgorICAgICAgICAg IFJldHVybnMgbm8gdmFsdWUuIG5hbWUyIGlzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciwgZnVybmlz aGVkIGJ5CisgICAgICAgICAgdGhlIGNhbGxlciwgaW50byB3aGljaCB6bHRvcigpIHdyaXRlcyB0 aGUgcmVzdWx0aW5nIG5hbWUuIE5vCisgICAgICAgICAgbGVuZ3RoIGNoZWNraW5nIGlzIGRvbmUu CisKKyAgICNpZmRlZiBOWkxUT1IKKyAgICAgICAgICBWT0lECisgICAgICAgICAgbnpsdG9yKGZu LGZuMixjb252ZXJ0LHBhdGhuYW1lcyxtYXgpIGNoYXIgKmZuMSwqZm4yOyBpbnQKKyAgICAgICAg ICBjb252ZXJ0LHBhdGhuYW1lcyxtYXg7CisgICAgICAgICAgUmVwbGFjZXMgemx0b3IoKS4gVGhp cyBuZXcgdmVyc2lvbiBoYW5kbGVzIHBhdGhuYW1lcyBhbmQgY2hlY2tzCisgICAgICAgICAgbGVu Z3RoLiBmbjEgYW5kIGZuMiBhcmUgYXMgaW4gemx0b3IoKS4gVGhpcyB2ZXJzaW9uIGlzIGNhbGxl ZAorICAgICAgICAgIHVuY29uZGl0aW9uYWxseSBmb3IgZWFjaCBmaWxlLCByYXRoZXIgdGhhbiBv bmx5IHdoZW4gZmlsZW5hbWUKKyAgICAgICAgICBjb252ZXJzaW9uIGlzIGVuYWJsZWQuIFBhdGhu YW1lcyBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAgICAgICAgICAgUEFUSF9P RkY6IFBhdGhuYW1lLCBpZiBhbnksIGlzIHRvIGJlIHN0cmlwcGVkCisgICAgICAgICAgICBQQVRI X1JFTDogVGhlIHJlbGF0aXZlIHBhdGhuYW1lIGlzIHRvIGJlIGluY2x1ZGVkCisgICAgICAgICAg ICBQQVRIX0FCUzogVGhlIGZ1bGwgcGF0aG5hbWUgaXMgdG8gYmUgaW5jbHVkZWQKKworICAgICAg ICAgIEFmdGVyIGhhbmRsaW5nIHBhdGhuYW1lcywgY29udmVyc2lvbiBpcyBkb25lIHRvIHRoZSBy ZXN1bHQgYXMgaW4KKyAgICAgICAgICB0aGUgemx0b3IoKSBkZXNjcmlwdGlvbiBpZiBjb252ZXJ0 ICE9IDA7IGlmIHJlbGF0aXZlIG9yIGFic29sdXRlCisgICAgICAgICAgcGF0aG5hbWVzIGFyZSBp bmNsdWRlZCwgdGhleSBhcmUgY29udmVydGVkIHRvIFVOSVggZm9ybWF0LCBpLmUuCisgICAgICAg ICAgd2l0aCBzbGFzaCAoLykgYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IuIFRoZSBtYXggcGFy YW1ldGVyCisgICAgICAgICAgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YgZm4yLiBJZiBj b252ZXJ0ID4gMCwgdGhlIHJlZ3VsYXIKKyAgICAgICAgICBjb252ZXJzaW9ucyBhcmUgZG9uZTsg aWYgY29udmVydCA8IDAsIG1pbmltYWwgY29udmVyc2lvbnMgYXJlCisgICAgICAgICAgZG9uZSAo d2Ugc2tpcCB1cHBlcmNhc2luZyB0aGUgbGV0dGVycywgd2UgYWxsb3cgbW9yZSB0aGFuIG9uZQor ICAgICAgICAgIHBlcmlvZCwgZXRjOyB0aGlzIGNhbiBiZSB1c2VkIHdoZW4gd2Uga25vdyBvdXIg cGFydG5lciBpcyBVTklYCisgICAgICAgICAgb3Igc2ltaWxhcikuCisKKyAgICNlbmRpZiAvKiBO WkxUT1IgKi8KKworICAgaW50CisgICAgICAgICAgbnp4cGFuZChmbixmbGFncykgY2hhciAqZm47 IGludCBmbGFnczsKKyAgICAgICAgICBSZXBsYWNlcyB6eHBhbmQoKSwgd2hpY2ggaXMgb2Jzb2xl dGUgYXMgb2YgQy1LZXJtaXQgNy4wLgorICAgICAgICAgIENhbGwgd2l0aDoKKyAgICAgICAgICAg IGZuID0gUG9pbnRlciB0byBmaWxlbmFtZSBvciBwYXR0ZXJuLgorICAgICAgICAgICAgZmxhZ3Mg PSBvcHRpb24gYml0czoKKyAgICAgICAgICAgICAgZmxhZ3MgJiBaWF9GSUxPTkxZICBNYXRjaCBy ZWd1bGFyIGZpbGVzCisgICAgICAgICAgICAgIGZsYWdzICYgWlhfRElST05MWSAgTWF0Y2ggZGly ZWN0b3JpZXMKKyAgICAgICAgICAgICAgZmxhZ3MgJiBaWF9SRUNVUlNFICBEZXNjZW5kIHRocm91 Z2ggZGlyZWN0b3J5IHRyZWUKKyAgICAgICAgICAgICAgZmxhZ3MgJiBaWF9NQVRDSERPVCBNYXRj aCAiZG90IGZpbGVzIgorICAgICAgICAgICAgICBmbGFncyAmIFpYX05PQkFDS1VQIERvbid0IG1h dGNoICJiYWNrdXAgZmlsZXMiCisgICAgICAgICAgICAgIGZsYWdzICYgWlhfTk9MSU5LUyAgRG9u J3QgZm9sbG93IHN5bWxpbmtzLgorCisgICAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZp bGVzIHRoYXQgbWF0Y2ggZm4sIHdpdGggZGF0YSBzdHJ1Y3R1cmVzCisgICAgICAgICAgc2V0IHVw IHNvIHRoZSBmaXJzdCBmaWxlIChpZiBhbnkpIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlIG5leHQK KyAgICAgICAgICB6bmV4dCgpIGNhbGwuIElmIFpYX0ZJTE9OTFkgYW5kIFpYX0RJUk9OTFkgYXJl IGJvdGggc2V0LCBvcgorICAgICAgICAgIG5laXRoZXIgb25lIGlzIHNldCwgZmlsZXMgYW5kIGRp cmVjdG9yaWVzIGFyZSBtYXRjaGVkLiBOb3RlczoKKworICAgICAgICAgMS4gSXQgaXMgZXNzZW50 aWFsIHRoYXQgdGhlIG51bWJlciByZXR1cm5lZCBieSBuenhwYW5kKCkgcmVmbGVjdAorICAgICAg ICAgICAgdGhlIGFjdHVhbCBudW1iZXIgb2YgZmlsZW5hbWVzIHRoYXQgd2lsbCBiZSByZXR1cm5l ZCBieQorICAgICAgICAgICAgem5leHQoKSBjYWxscy4gSW4gb3RoZXIgd29yZHM6CisgIGZvciAo biA9IG56eHBhbmQoc3RyaW5nLGZsYWdzKTsgbiA+IDA7IG4tLSkgeworICAgICAgem5leHQoYnVm KTsKKyAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgIH0KKworICAgICAgICAgICAgc2hvdWxk IHByaW50IGFsbCB0aGUgZmlsZSBuYW1lczsgbm8gbW9yZSwgbm8gbGVzcy4KKyAgICAgICAgIDIu IEluIFVOSVgsIERPUywgT1MtOSwgZXRjLCB3aGVyZSBkaXJlY3RvcmllcyBjb250YWluIGVudHJp ZXMgZm9yCisgICAgICAgICAgICB0aGVtc2VsdmVzICguKSBhbmQgdGhlIHN1cGVyaW9yIGRpcmVj dG9yeSAoLi4pLCB0aGVzZSBzaG91bGQKKyAgICAgICAgICAgIE5PVCBiZSBpbmNsdWRlZCBpbiB0 aGUgbGlzdCB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcywgaW5jbHVkaW5nCisgICAgICAgICAgICB3 aGVuIFpYX01BVENIRE9UIGlzIHNldC4KKyAgICAgICAgIDMuIEFkZGl0aW9uYWwgb3B0aW9uIGJp dHMgbWlnaHQgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZSwgZS5nLiBmb3IKKyAgICAgICAgICAgIHNv cnRpbmcgKHNvcnQgYnkgZGF0ZS9uYW1lL3NpemUsIHJldmVyc2UvYXNjZW5kaW5nLCBldGMpLgor ICAgICAgICAgICAgQ3VycmVudGx5IHRoaXMgaXMgZG9uZSBvbmx5IGluIGhpZ2hlciBsZXZlbCBj b2RlICh0aHJvdWdoIGEKKyAgICAgICAgICAgIGhhY2sgaW4gd2hpY2ggdGhlIG56eHBhbmQoKSBl eHBvcnRzIGl0cyBmaWxlbmFtZSBhcnJheSwgd2hpY2gKKyAgICAgICAgICAgIGlzIG5vdCBwb3J0 YWJsZSBiZWNhdXNlIG5vdCBhbGwgT1MncyBjYW4gdXNlIHRoaXMgbWVjaGFuaXNtKS4KKworICAg aW50CisgICAgICAgICAgem1haWwoYWRkcixmbikgY2hhciAqYWRkciwgZm47CisgICAgICAgICAg U2VuZCB0aGUgbG9jYWwsIGV4aXN0aW5nIGZpbGUgZm4gYXMgZS1tYWlsIHRvIHRoZSBhZGRyZXNz IGFkZHIuCisgICAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MKKyAg ICAgICAgICAgIDI6IGlmIG1haWwgZGVsaXZlcmVkIGJ1dCB0ZW1wIGZpbGUgY2FuJ3QgYmUgZGVs ZXRlZAorICAgICAgICAgICAtMjogaWYgbWFpbCBjYW4ndCBiZSBkZWxpdmVyZWQKKworICAgaW50 CisgICAgICAgICAgem1rZGlyKHBhdGgpIGNoYXIgKnBhdGg7CisgICAgICAgICAgVGhlIHBhdGgg Y2FuIGJlIGEgZmlsZSBzcGVjaWZpY2F0aW9uIHRoYXQgbWlnaHQgY29udGFpbgorICAgICAgICAg IGRpcmVjdG9yeSBpbmZvcm1hdGlvbiwgaW4gd2hpY2ggdGhlIGZpbGVuYW1lIGlzIGV4cGVjdGVk IHRvIGJlCisgICAgICAgICAgaW5jbHVkZWQsIG9yIGFuIHVuYW1iaWd1b3VzIGRpcmVjdG9yeSBz cGVjaWZpY2F0aW9uIChlLmcuIGluCisgICAgICAgICAgVU5JWCBpdCBtdXN0IGVuZCB3aXRoICIv IikuIFRoaXMgcm91dGluZSBhdHRlbXB0cyB0byBjcmVhdGUgYW55CisgICAgICAgICAgZGlyZWN0 b3JpZXMgaW4gdGhlIGdpdmVuIHBhdGggdGhhdCBkb24ndCBhbHJlYWR5IGV4aXN0LiBSZXR1cm5z CisgICAgICAgICAgMCBvciBncmVhdGVyIHN1Y2Nlc3M6IG5vIGRpcmVjdG9yaWVzIG5lZWRlZCBj cmVhdGlvbiwgb3IgZWxzZQorICAgICAgICAgIGFsbCBkaXJlY3RvcmllcyB0aGF0IG5lZWRlZCBj cmVhdGlvbiB3ZXJlIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5OworICAgICAgICAgIHRoZSByZXR1cm4g Y29kZSBpcyB0aGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIHRoYXQgd2VyZSBjcmVhdGVkLgorICAg ICAgICAgIFJldHVybnMgLTEgb24gZmFpbHVyZSB0byBjcmVhdGUgYW55IG9mIHRoZSBuZWVkZWQg ZGlyZWN0b3JpZXMuCisKKyAgIGludAorICAgICAgICAgIHpybWRpcihwYXRoKSBjaGFyICpwYXRo OworICAgICAgICAgIEF0dGVtcHRzIHRvIHJlbW92ZSB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBSZXR1 cm5zIDAgb24gc3VjY2VzcywgLTEKKyAgICAgICAgICBvbiBmYWlsdXJlLiBUaGUgZGV0YWlsZWQg c2VtYW50aWNzIGFyZSBvcGVuIC0tIHNob3VsZCBpdCBmYWlsIGlmCisgICAgICAgICAgdGhlIGRp cmVjdG9yeSBjb250YWlucyBhbnkgZmlsZXMgb3Igc3ViZGlyZWN0b3JpZXMsIGV0Yy4gSXQgaXMK KyAgICAgICAgICBwcm9iYWJseSBiZXN0IGZvciB0aGlzIHJvdXRpbmUgdG8gYmVoYXZlIGluIHdo YXRldmVyIG1hbm5lciBpcworICAgICAgICAgIGN1c3RvbWFyeSBvbiB0aGUgdW5kZXJseWluZyBw bGF0Zm9ybTsgZS5nLiBpbiBVTklYLCBWTVMsIERPUywKKyAgICAgICAgICBldGMsIHdoZXJlIGRp cmVjdG9yaWVzIGNhbiBub3QgYmUgcmVtb3ZlZCB1bmxlc3MgdGhleSBhcmUgZW1wdHkuCisKKyAg IFZPSUQKKyAgICAgICAgICB6bmV3bihmbixzKSBjaGFyICpmbiwgKipzOworICAgICAgICAgIFRy YW5zZm9ybXMgdGhlIG5hbWUgZm4gaW50byBhIGZpbGVuYW1lIHRoYXQgaXMgZ3VhcmFudGVlZCB0 byBiZQorICAgICAgICAgIHVuaXF1ZS4gSWYgdGhlIGZpbGUgZm4gZG9lcyBub3QgZXhpc3QsIHRo ZW4gdGhlIG5ldyBuYW1lIGlzIHRoZQorICAgICAgICAgIHNhbWUgYXMgZm47IE90aGVyd2lzZSwg aXQncyBkaWZmZXJlbnQuIHRoaXMgZnVuY3Rpb24gZG9lcyBpdHMKKyAgICAgICAgICBiZXN0LCBy ZXR1cm5zIG5vIHZhbHVlLiBOZXcgbmFtZSBpcyBjcmVhdGVkIGluIGNhbGxlcidzIHNwYWNlLgor ICAgICAgICAgIENhbGwgbGlrZSB0aGlzOiB6bmV3bihvbGQsJm5ldyk7LiBUaGUgc2Vjb25kIHBh cmFtZXRlciBpcyBhCisgICAgICAgICAgcG9pbnRlciB0byB0aGUgbmV3IG5hbWUuIFRoaXMgcG9p bnRlciBpcyBzZXQgYnkgem5ld24oKSB0byBwb2ludAorICAgICAgICAgIHRvIGEgc3RhdGljIHN0 cmluZyBpbiBpdHMgb3duIHNwYWNlLCBzbyBiZSBzdXJlIHRvIHRoZSByZXN1bHQgdG8KKyAgICAg ICAgICBhIHNhZmUgcGxhY2UgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhZ2Fpbi4KKwor ICAgaW50CisgICAgICAgICAgem5leHQoZm4pIGNoYXIgKmZuOworICAgICAgICAgIENvcGllcyB0 aGUgbmV4dCBmaWxlIG5hbWUgZnJvbSBhIGZpbGUgbGlzdCBjcmVhdGVkIGJ5IHp4cGFuZCgpCisg ICAgICAgICAgaW50byB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgZm4gKHNlZSB6eHBhbmQpLiBJ ZiBubyBtb3JlIGZpbGVzLAorICAgICAgICAgIHRoZW4gdGhlIG51bGwgc3RyaW5nIGlzIHBsYWNl ZCB0aGVyZS4gUmV0dXJucyAwIGlmIHRoZXJlIGFyZSBubworICAgICAgICAgIG1vcmUgZmlsZW5h bWVzLCB3aXRoIDB0aCBlbGVtZW50IHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IGZuIHNldAorICAg ICAgICAgIHRvIE5VTC4gSWYgdGhlcmUgaXMgYSBmaWxlbmFtZSwgaXQgaXMgc3RvcmVkIGluIHRo ZSBhcnJheQorICAgICAgICAgIHBvaW50ZWQgdG8gYnkgZm4gYW5kIGEgcG9zaXRpdmUgbnVtYmVy IGlzIHJldHVybmVkLiBOT1RFOiBUaGlzCisgICAgICAgICAgaXMgYSBjaGFuZ2UgZnJvbSBlYXJs aWVyIGRlZmluaXRpb25zIG9mIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgICAocHJlLTE5OTkpLCB3 aGljaCByZXR1cm5lZCB0aGUgbnVtYmVyIG9mIGZpbGVzIHJlbWFpbmluZzsgdGh1cyAwCisgICAg ICAgICAgd2FzIHRoZSByZXR1cm4gdmFsdWUgd2hlbiByZXR1cm5pbmcgdGhlIGZpbmFsIGZpbGUu IEhvd2V2ZXIsIG5vCisgICAgICAgICAgbWFpbmxpbmUgY29kZSBldmVyIGRlcGVuZGVkIG9uIHRo ZSByZXR1cm4gdmFsdWUsIHNvIHRoaXMgY2hhbmdlCisgICAgICAgICAgc2hvdWxkIGJlIHNhZmUu CisKKyAgIGludAorICAgICAgICAgIHpvcGVuaShuLGZuKSBpbnQgbjsgY2hhciAqZm47CisgICAg ICAgICAgT3BlbnMgdGhlIGZpbGUgbmFtZWQgZm4gZm9yIGlucHV0IGFzIGZpbGUgbnVtYmVyIG4u IFJldHVybnM6CisgICAgICAgICAgICAwOiBvbiBmYWlsdXJlLgorICAgICAgICAgICAgMTogb24g c3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAgem9wZW5vKG4sZm4senosZmNiKSBpbnQgbjsg Y2hhciAqbmFtZTsgc3RydWN0IHphdHRyICp6ejsgc3RydWN0CisgICAgICAgICAgZmlsaW5mbyAq ZmNiOworICAgICAgICAgIEF0dGVtcHRzIHRvIG9wZW4gdGhlIG5hbWVkIGZpbGUgZm9yIG91dHB1 dCBhcyBmaWxlIG51bWJlciBuLiB6egorICAgICAgICAgIGlzIGEgS2VybWl0IGZpbGUgYXR0cmli dXRlIHN0cnVjdHVyZSBhcyBkZWZpbmVkIGluIGNrY2RlYi5oLAorICAgICAgICAgIGNvbnRhaW5p bmcgdmFyaW91cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSwgaW5jbHVkaW5nIGl0cworICAg ICAgICAgIHNpemUsIGNyZWF0aW9uIGRhdGUsIGFuZCBzbyBmb3J0aC4gVGhpcyBmdW5jdGlvbiBz aG91bGQgYXR0ZW1wdAorICAgICAgICAgIHRvIGhvbm9yIGFzIG1hbnkgb2YgdGhlc2UgYXMgcG9z c2libGUuIGZjYiBpcyBhICJmaWxlIGNvbnRyb2wKKyAgICAgICAgICBibG9jayIgaW4gdGhlIHRy YWRpdGlvbmFsIHNlbnNlLCBkZWZpbmVkIGluIGNrY2RlYi5oLCBjb250YWluaW5nCisgICAgICAg ICAgaW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gY29tcGxpY2F0ZWQgZmlsZSBzeXN0ZW1zIGxpa2Ug Vk1TIChSTVMpLAorICAgICAgICAgIElCTSBNVlMsIGV0YywgbGlrZSBibG9ja3NpemUsIHJlY29y ZCBsZW5ndGgsIG9yZ2FuaXphdGlvbiwKKyAgICAgICAgICByZWNvcmQgZm9ybWF0LCBjYXJyaWFn ZSBjb250cm9sLCBldGMuIFJldHVybnM6CisgICAgICAgICAgICAwOiBvbiBmYWlsdXJlLgorICAg ICAgICAgICAgMTogb24gc3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAgem91dGR1bXAoKQor ICAgICAgICAgIER1bXBzIGEgZmlsZSBvdXRwdXQgYnVmZmVyLiBVc2VkIHdpdGggdGhlIG1hY3Jv IHptY2hvdXQoKQorICAgICAgICAgIGRlZmluZWQgaW4gY2tja2VyLmguIFVzZWQgb25seSB3aXRo IGZpbGUgbnVtYmVyIFpPRklMRSwgaS5lLiB0aGUKKyAgICAgICAgICBmaWxlIHRoYXQgaXMgYmVp bmcgcmVjZWl2ZWQgYnkgS2VybWl0IGR1cmluZyBmaWxlIHRyYW5zZmVyLgorICAgICAgICAgIFJl dHVybnM6CisgICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgorICAgICAgICAgICAgMDogb24gc3Vj Y2Vzcy4KKworICAgaW50CisgICAgICAgICAgenByaW50KHAsZm4pIGNoYXIgKnAsICpmOworICAg ICAgICAgIFByaW50cyB0aGUgZmlsZSB3aXRoIG5hbWUgZm4gb24gYSBsb2NhbCBwcmludGVyLCB3 aXRoIG9wdGlvbnMgcC4KKyAgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgMDogb24gc3Vj Y2VzcworICAgICAgICAgICAgMzogaWYgZmlsZSBzZW50IHRvIHByaW50ZXIgYnV0IGNhbid0IGJl IGRlbGV0ZWQKKyAgICAgICAgICAgLTM6IGlmIGZpbGUgY2FuJ3QgYmUgcHJpbnRlZAorCisgICBp bnQKKyAgICAgICAgICB6cmVuYW1lKGZuLGZuMikgY2hhciAqZm4sICpmbjI7CisgICAgICAgICAg Q2hhbmdlcyB0aGUgbmFtZSBvZiBmaWxlIGZuIHRvIGZuMi4gSWYgZm4yIGlzIHRoZSBuYW1lIG9m IGFuCisgICAgICAgICAgZXhpc3RpbmcgZGlyZWN0b3J5LCBvciBhIGZpbGUtc3RydWN0dXJlZCBk ZXZpY2UsIHRoZW4gZmlsZSBmbiBpcworICAgICAgICAgIG1vdmVkIHRvIHRoYXQgZGlyZWN0b3J5 IG9yIGRldmljZSwga2VlcGluZyBpdHMgb3JpZ2luYWwgbmFtZS4gSWYKKyAgICAgICAgICBmbjIg bGFja3MgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIHdoZW4gcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24s IGFuCisgICAgICAgICAgYXBwcm9wcmlhdGUgb25lIGlzIHN1cHBsaWVkLiBSZXR1cm5zOgorICAg ICAgICAgICAtMTogb24gZmFpbHVyZS4KKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAg IGludAorICAgICAgICAgIHpjb3B5KHNvdXJjZSxkZXN0KSBjaGFyICogc291cmNlLCAqIGRlc3Q7 CisgICAgICAgICAgQ29waWVzIHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgZGVzdGluYXRpb24uIE9u ZSBmaWxlIG9ubHkuIE5vCisgICAgICAgICAgd2lsZGNhcmRzLiBUaGUgZGVzdGluYXRpb24gc3Ry aW5nIG1heSBiZSBhIGZpbGVuYW1lIG9yIGEKKyAgICAgICAgICBkaXJlY3RvcnkgbmFtZS4gUmV0 dXJuczoKKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisgICAgICAgICAgIDwwOiBvbiBmYWls dXJlOgorICAgICAgICAgICAgLTI6IHNvdXJjZSBmaWxlIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZS4K KyAgICAgICAgICAgIC0zOiBzb3VyY2UgZmlsZSBub3QgZm91bmQuCisgICAgICAgICAgICAtNDog cGVybWlzc2lvbiBkZW5pZWQuCisgICAgICAgICAgICAtNTogc291cmNlIGFuZCBkZXN0aW5hdGlv biBhcmUgdGhlIHNhbWUgZmlsZS4KKyAgICAgICAgICAgIC02OiBpL28gZXJyb3IuCisgICAgICAg ICAgICAtMTogb3RoZXIgZXJyb3IuCisKKyAgIGNoYXIgKgorICAgICAgICAgIHpsb2NhbHRpbWUo Y2hhciAqKQorICAgICAgICAgIENhbGwgd2l0aDogInl5eXltbWRkIGhoOm1tOnNzIiBHTVQvVVRD IGRhdGUtdGltZS4gUmV0dXJucworICAgICAgICAgIHBvaW50ZXIgdG8gbG9jYWwgZGF0ZS10aW1l IHN0cmluZyAieXl5eW1tZGQgaGg6bW06c3MiIG9uCisgICAgICAgICAgc3VjY2VzcywgTlVMTCBv biBmYWlsdXJlLgorCisgICBWT0lECisgICAgICAgICAgenJ0b2woZm4sZm4yKSBjaGFyICpmbiwg KmZuMjsKKyAgICAgICAgICBSZW1vdGUtVG8tTG9jYWwgZmlsZW5hbWUgdHJhbnNsYXRpb24uIE9C U09MRVRFOiByZXBsYWNlZCBieQorICAgICAgICAgIG56cnRvbCgpLiBUcmFuc2xhdGVzIGEgInN0 YW5kYXJkIiBmaWxlbmFtZSB0byBhIGxvY2FsIGZpbGVuYW1lLgorICAgICAgICAgIEZvciBleGFt cGxlLCBpbiBVbml4IHRoaXMgZnVuY3Rpb24gbWlnaHQgY29udmVydCBhbgorICAgICAgICAgIGFs bC11cHBlcmNhc2UgbmFtZSB0byBsb3dlcmNhc2UsIGJ1dCBsZWF2ZSBsb3dlci0gb3IgbWl4LWNh c2UKKyAgICAgICAgICBuYW1lcyBhbG9uZS4gRG9lcyBpdHMgYmVzdCwgcmV0dXJucyBubyB2YWx1 ZS4gTmV3IG5hbWUgaXMgaW4KKyAgICAgICAgICBzdHJpbmcgcG9pbnRlZCB0byBieSBmbjIuIE5v IGxlbmd0aCBjaGVja2luZyBpcyBkb25lLgorCisgICAjaWZkZWYgTlpMVE9SCisgICBpbnQKKyAg ICAgICAgICBuenJ0b2woZm4sZm4yLGNvbnZlcnQscGF0aG5hbWVzLG1heCkgY2hhciAqZm4xLCpm bjI7IGludAorICAgICAgICAgIGNvbnZlcnQscGF0aG5hbWVzLG1heDsKKyAgICAgICAgICBSZXBs YWNlcyB6cnRvbC4gTGlrZSB6cnRvbCBidXQgaGFuZGxlcyBwYXRobmFtZXMgYW5kIGNoZWNrcwor ICAgICAgICAgIGxlbmd0aC4gU2VlIG56bHRvciBmb3IgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2Yg cGFyYW1ldGVycy4KKworICAgI2VuZGlmIC8qIE5aTFRPUiAqLworCisgICBpbnQKKyAgICAgICAg ICB6c2F0dHIoeHgpIHN0cnVjdCB6YXR0ciAqeHg7CisgICAgICAgICAgRmlsbHMgaW4gYSBLZXJt aXQgZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGZvciB0aGUgZmlsZSB3aGljaCBpcworICAgICAg ICAgIHRvIGJlIHNlbnQsIG5hbWVseSB0aGUgY3VycmVudGx5IG9wZW4gWklGSUxFLiBOb3RlIHRo YXQgdGhpcyBpcworICAgICAgICAgIG5vdCBhIHZlcnkgZ29vZCBkZXNpZ24sIGJ1dCB3ZSdyZSBz dHVjayB3aXRoIGl0LiBDYWxsZXJzIG11c3QKKyAgICAgICAgICBlbnN1cmUgdGhhdCB6c2F0dHIo KSBpcyBjYWxsZWQgb25seSBvbiByZWFsIGZpbGVzLCBub3Qgb24gcGlwZXMsCisgICAgICAgICAg aW50ZXJuYWxseSBnZW5lcmF0ZWQgZmlsZS1saWtlIG9iamVjdHMgc3VjaCBhcyBzZXJ2ZXIgUkVN T1RFCisgICAgICAgICAgY29tbWFuZCByZXNwb25zZXMsIGV0Yy4gUmV0dXJuczoKKyAgICAgICAg ICAgLTE6IG9uIGZhaWx1cmUuCisgICAgICAgICAgICAwOiBvbiBzdWNjZXNzIHdpdGggdGhlIHN0 cnVjdHVyZSBmaWxsZWQgaW4uCisgICAgICAgICAgSWYgYW55IHN0cmluZyBtZW1iZXIgaXMgbnVs bCwgaXQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlCisgICAgICAgICAgY2FsbGVyLgorICAgICAg ICAgIElmIGFueSBudW1lcmljIG1lbWJlciBpcyAtMSwgaXQgc2hvdWxkIGJlIGlnbm9yZWQgYnkg dGhlIGNhbGxlci4KKworICAgaW50CisgICAgICAgICAgenNoY21kKHMpIGNoYXIgKnM7CisgICAg ICAgICAgcyBjb250YWlucyB0byBwb2ludGVyIHRvIGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCBi eSB0aGUgaG9zdAorICAgICAgICAgIGNvbXB1dGVyJ3Mgc2hlbGwsIGNvbW1hbmQgcGFyc2VyLCBv ciBvcGVyYXRpbmcgc3lzdGVtLiBJZiB0aGUKKyAgICAgICAgICBzeXN0ZW0gYWxsb3dzIHRoZSB1 c2VyIHRvIGNob29zZSBmcm9tIGEgdmFyaWV0eSBvZiBjb21tYW5kCisgICAgICAgICAgcHJvY2Vz c29ycyAoc2hlbGxzKSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBlbXBsb3kgdGhlIHVzZXIn cworICAgICAgICAgIHByZWZlcnJlZCBzaGVsbC4gSWYgcG9zc2libGUsIHRoZSB1c2VyJ3Mgam9i IChlbnZpcm9ubWVudCwKKyAgICAgICAgICBwcm9jZXNzLCBldGMpIHNob3VsZCBiZSBzZXQgdXAg dG8gY2F0Y2gga2V5Ym9hcmQgaW50ZXJydXB0aW9uCisgICAgICAgICAgc2lnbmFscyB0byBhbGxv dyB0aGUgdXNlciB0byBoYWx0IHRoZSBzeXN0ZW0gY29tbWFuZCBhbmQgcmV0dXJuCisgICAgICAg ICAgdG8gS2VybWl0LiBUaGUgY29tbWFuZCBtdXN0IHJ1biBpbiBvcmRpbmFyeSwgdW5wcml2aWxl Z2VkIHVzZXIKKyAgICAgICAgICBtb2RlLiBJZiBwb3NzaWJsZSwgdGhpcyBmdW5jdGlvbiBzaG91 bGQgcmV0dXJuIC0xIG9uIGZhaWx1cmUgdG8KKyAgICAgICAgICBzdGFydCB0aGUgY29tbWFuZCwg b3IgZWxzZSBpdCBzaG91bGQgcmV0dXJuIDEgaWYgdGhlIGNvbW1hbmQKKyAgICAgICAgICBzdWNj ZWVkZWQgYW5kIDAgaWYgaXQgZmFpbGVkLgorCisgICBpbnQKKyAgICAgICAgICBwZXhpdHN0YXR1 cworICAgICAgICAgIHpzaGNtZCgpIGFuZCB6c3lzY21kKCkgc2hvdWxkIHNldCB0aGlzIHRvIHRo ZSBjb21tYW5kJ3MgYWN0dWFsCisgICAgICAgICAgZXhpdCBzdGF0dXMgY29kZSBpZiBwb3NzaWJs ZS4KKworICAgaW50CisgICAgICAgICAgenN5c2NtZChzKSBjaGFyICpzOworICAgICAgICAgIHMg Y29udGFpbnMgdG8gcG9pbnRlciB0byBhIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQgYnkgdGhlIGhv c3QKKyAgICAgICAgICBjb21wdXRlcidzIHNoZWxsLCBjb21tYW5kIHBhcnNlciwgb3Igb3BlcmF0 aW5nIHN5c3RlbS4gSWYgdGhlCisgICAgICAgICAgc3lzdGVtIGFsbG93cyB0aGUgdXNlciB0byBj aG9vc2UgZnJvbSBhIHZhcmlldHkgb2YgY29tbWFuZAorICAgICAgICAgIHByb2Nlc3NvcnMgKHNo ZWxscyksIHRoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgZW1wbG95IHRoZSBzeXN0ZW0KKyAgICAg ICAgICBzdGFuZGFyZCBzaGVsbCAoZS5nLiAvYmluL3NoIGZvciBVbml4KSwgc28gdGhhdCB0aGUg cmVzdWx0cyB3aWxsCisgICAgICAgICAgYWx3YXlzIGJlIHRoZSBzYW1lIGZvciBldmVyeWJvZHku IElmIHBvc3NpYmxlLCB0aGUgdXNlcidzIGpvYgorICAgICAgICAgIChlbnZpcm9ubWVudCwgcHJv Y2VzcywgZXRjKSBzaG91bGQgYmUgc2V0IHVwIHRvIGNhdGNoIGtleWJvYXJkCisgICAgICAgICAg aW50ZXJydXB0aW9uIHNpZ25hbHMgdG8gYWxsb3cgdGhlIHVzZXIgdG8gaGFsdCB0aGUgc3lzdGVt CisgICAgICAgICAgY29tbWFuZCBhbmQgcmV0dXJuIHRvIEtlcm1pdC4gVGhlIGNvbW1hbmQgbXVz dCBydW4gaW4gb3JkaW5hcnksCisgICAgICAgICAgdW5wcml2aWxlZ2VkIHVzZXIgbW9kZS4gSWYg cG9zc2libGUsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybgorICAgICAgICAgIC0xIG9uIGZh aWx1cmUgdG8gc3RhcnQgdGhlIGNvbW1hbmQsIG9yIGVsc2UgaXQgc2hvdWxkIHJldHVybiAxCisg ICAgICAgICAgaWYgdGhlIGNvbW1hbmQgc3VjY2VlZGVkIGFuZCAwIGlmIGl0IGZhaWxlZC4KKwor ICAgVk9JRAorICAgICAgICAgIHpfZXhlYyhzLGFyZ3MpIGNoYXIgKiBzOyBjaGFyICogYXJnc1td OworICAgICAgICAgIFRoaXMgb25lIGV4ZWN1dGVzIHRoZSBjb21tYW5kIHMgKHdoaWNoIGlzIHNl YXJjaGVkIGZvciB1c2luZyB0aGUKKyAgICAgICAgICBzeXN0ZW0ncyBub3JtYWwgc2VhcmNoaW5n IG1lY2hhbmlzbSwgc3VjaCBhcyBQQVRIIGluIFVOSVgpLCB3aXRoCisgICAgICAgICAgdGhlIGdp dmVuIGFyZ3VtZW50IHZlY3Rvciwgd2hpY2ggZm9sbG93cyB0aGUgY29udmVudGlvbnMgb2YgVU5J WAorICAgICAgICAgIGFyZ3ZbXTogdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgcG9pbnRlZCB0byBi eSBlbGVtZW50IDAsIHRoZQorICAgICAgICAgIGZpcnN0IGFyZyBieSBlbGVtZW50IDEsIGFuZCBz byBvbi4gQSBudWxsIGFyZ3NbXSBwb2ludGVyCisgICAgICAgICAgaW5kaWNhdGVzIHRoZSBlbmQg b2YgdGhlIGFyZ3VtZW50IGxpc3QuIEFsbCBvcGVuIGZpbGVzIG11c3QKKyAgICAgICAgICByZW1h aW4gb3BlbiBzbyB0aGUgZXhlYydkIHByb2Nlc3MgY2FuIHVzZSB0aGVtLiBSZXR1cm5zIG9ubHkg aWYKKyAgICAgICAgICB1bnN1Y2Nlc3NmdWwuCisKKyAgIGludAorICAgICAgICAgIHpzaW5sKG4s cyx4KSBpbnQgbiwgeDsgY2hhciAqczsKKyAgICAgICAgICBSZWFkcyBhIGxpbmUgZnJvbSBmaWxl IG51bWJlciBuLiBXcml0ZXMgdGhlIGxpbmUgaW50byB0aGUKKyAgICAgICAgICBhZGRyZXNzIHMg cHJvdmlkZWQgYnkgdGhlIGNhbGxlci4gV3JpdGluZyB0ZXJtaW5hdGVzIHdoZW4KKyAgICAgICAg ICBuZXdsaW5lIGlzIHJlYWQsIGJ1dCB3aXRoIG5ld2xpbmUgZGlzY2FyZGVkLiBXcml0aW5nIGFs c28KKyAgICAgICAgICB0ZXJtaW5hdGVzIHVwb24gRU9GIG9yIGlmIGxlbmd0aCB4IGlzIGV4aGF1 c3RlZC4gUmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIEVPRiBvciBlcnJvci4KKyAgICAgICAg ICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIHpzb3V0KG4scykgaW50IG47 IGNoYXIgKnM7CisgICAgICAgICAgV3JpdGVzIHRoZSBzdHJpbmcgcyBvdXQgdG8gZmlsZSBudW1i ZXIgbi4gUmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUuCisgICAgICAgICAgICAw OiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB6c291dGwobixzKSBpbnQgbjsgY2hh ciAqczsKKyAgICAgICAgICBXcml0ZXMgdGhlIHN0cmluZyBzIG91dCB0byBmaWxlIG51bWJlciBu IGFuZCBhZGRzIGEgbGluZQorICAgICAgICAgIChyZWNvcmQpIHRlcm1pbmF0b3IgKGJvdW5kYXJ5 KSBhcHByb3ByaWF0ZSBmb3IgdGhlIHN5c3RlbSBhbmQKKyAgICAgICAgICB0aGUgZmlsZSBmb3Jt YXQuIFJldHVybnM6CisgICAgICAgICAgIC0xOiBvbiBmYWlsdXJlLgorICAgICAgICAgICAgMDog b24gc3VjY2Vzcy4KKworICAgaW50CisgICAgICAgICAgenNvdXR4KG4scyx4KSBpbnQgbiwgeDsg Y2hhciAqczsKKyAgICAgICAgICBXcml0ZXMgZXhhY3RseSB4IGNoYXJhY3RlcnMgZnJvbSBzdHJp bmcgcyB0byBmaWxlIG51bWJlciBuLiBJZiBzCisgICAgICAgICAgaGFzIGZld2VyIHRoYW4geCBj aGFyYWN0ZXJzLCB0aGVuIHRoZSBlbnRpcmUgc3RyaW5nIHMgaXMKKyAgICAgICAgICB3cml0dGVu LiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZmFpbHVyZS4KKyAgICAgICAgICA+PSAwOiBv biBzdWNjZXNzLCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgd3JpdHRlbi4KKwor ICAgaW50CisgICAgICAgICAgenN0aW1lKGZuLHl5LHgpIGNoYXIgKmZuOyBzdHJ1Y3QgemF0dHIg Knl5OyBpbnQgeDsKKyAgICAgICAgICBTZXRzIHRoZSBjcmVhdGlvbiBkYXRlIChhbmQgb3RoZXIg YXR0cmlidXRlcykgb2YgYW4gZXhpc3RpbmcKKyAgICAgICAgICBmaWxlLCBvciBjb21wYXJlcyBh IGZpbGUncyBjcmVhdGlvbiBkYXRlIHdpdGggYSBnaXZlbiBkYXRlLiBDYWxsCisgICAgICAgICAg d2l0aDoKKworICAgZm46IHBvaW50ZXIgdG8gbmFtZSBvZiBleGlzdGluZyBmaWxlLgorICAgeXk6 IFBvaW50ZXIgdG8gYSBLZXJtaXQgZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGluIHdoaWNoIHl5 LT5kYXRlLnZhbAorICAgaXMgYSBkYXRlIG9mIHRoZSBmb3JtIHl5eXltbWRkIGhoOm1tOnNzLCBl LmcuIDE5OTAwMjA4IDEzOjAwOjAwLCB3aGljaAorICAgaXMgdG8gYmUgdXNlZCBmb3Igc2V0dGlu ZyBvciBjb21wYXJpbmcgdGhlIGZpbGUgZGF0ZS4gT3RoZXIgYXR0cmlidXRlcworICAgaW4gdGhl IHN0cnVjdCBjYW4gYWxzbyBiZSBzZXQsIHN1Y2ggYXMgdGhlIHByb3RlY3Rpb24vcGVybWlzc2lv biAoU2VlCisgICBbMTMyXUFwcGVuZGl4IEkpLCB3aGVuIGl0IG1ha2VzIHNlbnNlIChlLmcuICJ5 eS0+bHByb3RlY3QudmFsIiBjYW4gYmUKKyAgIHNldCBpZiB0aGUgcmVtb3RlIHN5c3RlbSBJRCBt YXRjaGVzIHRoZSBsb2NhbCBvbmUpLgorICAgIHg6IEEgZnVuY3Rpb24gY29kZTogMCBtZWFucyB0 byBzZXQgdGhlIGZpbGUncyBjcmVhdGlvbiBkYXRlIGFzIGdpdmVuLgorICAgMSBtZWFucyBjb21w YXJlIHRoZSBkYXRlIGZyb20gdGhlIHl5IHN0cnVjdCB3aXRoIHRoZSBmaWxlJ3MgZGF0ZS4KKwor ICAgICAgICAgIFJldHVybnM6CisgICAgICAgICAgIC0xOiBvbiBhbnkga2luZCBvZiBlcnJvci4K KyAgICAgICAgICAgIDA6IGlmIHggaXMgMCBhbmQgdGhlIGZpbGUgZGF0ZSB3YXMgc2V0IHN1Y2Nl c3NmdWxseS4KKyAgICAgICAgICAgIDA6IGlmIHggaXMgMSBhbmQgZGF0ZSBmcm9tIGF0dHJpYnV0 ZSBzdHJ1Y3R1cmUgPiBmaWxlIGNyZWF0aW9uCisgICAgICAgICAgZGF0ZS4KKyAgICAgICAgICAg IDE6IGlmIHggaXMgMSBhbmQgZGF0ZSBmcm9tIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgPD0gZmlsZQor ICAgICAgICAgIGNyZWF0aW9uIGRhdGUuCisKKyAgIFZPSUQKKyAgICAgICAgICB6c3RyaXAobmFt ZSxuYW1lMikgY2hhciAqbmFtZSwgKipuYW1lMjsKKyAgICAgICAgICBTdHJpcHMgcGF0aG5hbWUg ZnJvbSBmaWxlbmFtZSAibmFtZSIuIENvbnN0cnVjdHMgdGhlIHJlc3VsdGluZworICAgICAgICAg IHN0cmluZyBpbiBhIHN0YXRpYyBidWZmZXIgaW4gaXRzIG93biBzcGFjZSBhbmQgcmV0dXJucyBh IHBvaW50ZXIKKyAgICAgICAgICB0byBpdCBpbiBuYW1lMi4gQWxzbyBzdHJpcHMgZGV2aWNlIG5h bWUsIGZpbGUgdmVyc2lvbiBudW1iZXJzLAorICAgICAgICAgIGFuZCBvdGhlciAibm9uLW5hbWUi IG1hdGVyaWFsLgorCisgICBpbnQKKyAgICAgICAgICB6eGNtZChuLHMpIGNoYXIgKnM7CisgICAg ICAgICAgUnVucyBhIHN5c3RlbSBjb21tYW5kIHNvIGl0cyBvdXRwdXQgY2FuIGJlIGFjY2Vzc2Vk IGFzIGlmIGl0CisgICAgICAgICAgd2VyZSBmaWxlIG4uIFRoZSBjb21tYW5kIGlzIHJ1biBpbiBv cmRpbmFyeSwgdW5wcml2aWxlZ2VkIHVzZXIKKyAgICAgICAgICBtb2RlLgorICAgICAgICAgIElm IG4gaXMgWlNURElPIG9yIFpDVEVSTSwgcmV0dXJucyAtMS4KKyAgICAgICAgICBJZiBuIGlzIFpJ RklMRSBvciBaUkZJTEUsIHRoZW4gS2VybWl0IHJlYWRzIGZyb20gdGhlIGNvbW1hbmQsCisgICAg ICAgICAgb3RoZXJ3aXNlIEtlcm1pdCB3cml0ZXMgdG8gdGhlIGNvbW1hbmQuCisgICAgICAgICAg UmV0dXJucyAwIG9uIGVycm9yLCAxIG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIHp4 cGFuZChmbikgY2hhciAqZm47CisgICAgICAgICAgT0JTT0xFVEU6IFJlcGxhY2VkIGJ5IG56eHBh bmQoKSwgcS52LgorCisgICAjaWZkZWYgWlhSRVdJTkQKKyAgIGludAorICAgICAgICAgIHp4cmV3 aW5kKCkKKyAgICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgcmV0dXJuZWQgYnkg dGhlIG1vc3QgcmVjZW50CisgICAgICAgICAgbnp4cGFuZCgpIGNhbGwsIGFuZCByZXNldHMgdGhl IGxpc3QgdG8gdGhlIGJlZ2lubmluZyBzbyB0aGUgbmV4dAorICAgICAgICAgIHpuZXh0KCkgY2Fs bCByZXR1cm5zIHRoZSBmaXJzdCBmaWxlLiBSZXR1cm5zIC0xIGlmIHp4cGFuZCBoYXMKKyAgICAg ICAgICBub3QgeWV0IGJlZW4gY2FsbGVkLiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwg WlhSRVdJTkQKKyAgICAgICAgICBzaG91bGQgYmUgZGVmaW5lZDsgb3RoZXJ3aXNlIGl0IHNob3Vs ZCBub3QgYmUgcmVmZXJlbmNlZC4KKworICAgI2VuZGlmIC8qIFpYUkVXSU5EICovCisKKyAgIGlu dAorICAgICAgICAgIHhzeXN0ZW0oY21kKSBjaGFyICpjbWQ7CisgICAgICAgICAgRXhlY3V0ZXMg dGhlIHN5c3RlbSBjb21tYW5kIHdpdGhvdXQgcmVkaXJlY3RpbmcgYW55IG9mIGl0cyBpL28sCisg ICAgICAgICAgc2ltaWxhciAod2VsbCwgaWRlbnRpY2FsKSB0byBzeXN0ZW0oKSBpbiBVbml4LiBC dXQgYmVmb3JlCisgICAgICAgICAgcGFzc2luZyB0aGUgY29tbWFuZCB0byB0aGUgc3lzdGVtLCB4 c3lzdGVtKCkgZW5zdXJlcyB0aGF0IGFsbAorICAgICAgICAgIHByaXZpbGVnZXMgYXJlIHR1cm5l ZCBvZmYsIHNvIHRoYXQgdGhlIHN5c3RlbSBjb21tYW5kIGV4ZWN1dGVzCisgICAgICAgICAgaW4g b3JkaW5hcnkgdW5wcml2aWxlZ2VkIHVzZXIgbW9kZS4gSWYgcG9zc2libGUsIHhzeXN0ZW0oKQor ICAgICAgICAgIHJldHVybnMgdGhlIHJldHVybiBjb2RlIG9mIHRoZSBjb21tYW5kIHRoYXQgd2Fz IGV4ZWN1dGVkLgorCis0LkUuMi4yLiBJS1NEIFZhcmlhYmxlcyBhbmQgRnVuY3Rpb25zCisKKyAg IFRoZXNlIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYW55IEMtS2VybWl0IHZlcnNpb24gdGhhdCBp cyB0byBiZQorICAgaW5zdGFsbGVkIGFzIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIERhZW1v biAoSUtTRCkuIElLU0QgaXMgZXhwZWN0ZWQKKyAgIHRvIGJlIHN0YXJ0ZWQgYnkgdGhlIEludGVy bmV0IERhZW1vbiAoZS5nLiBpbmV0ZCkgd2l0aCBpdHMgc3RhbmRhcmQgaS9vCisgICByZWRpcmVj dGVkIHRvIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uLgorCisgICBpbnQgY2t4YW5vbjsKKyAgICAg ICAgICBOb256ZXJvIGlmIGFub255bW91cyBsb2dpbnMgYWxsb3dlZC4KKworICAgZXh0ZXJuIGlu dCBpbnNlcnZlcjsKKyAgICAgICAgICBOb256ZXJvIGlmIHN0YXJ0ZWQgaW4gSUtTRCBtb2RlLgor CisgICBleHRlcm4gaW50IGlzZ3Vlc3Q7CisgICAgICAgICAgTm9uemVybyBpZiBJS1NEIGFuZCB1 c2VyIGxvZ2dlZCBpbiBhbm9ueW1vdXNseS4KKworICAgZXh0ZXJuIGNoYXIgKiBob21kaXI7Cisg ICAgICAgICAgUG9pbnRlciB0byB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCisKKyAgIGV4dGVybiBj aGFyICogYW5vbnJvb3Q7CisgICAgICAgICAgUG9pbnRlciB0byBmaWxlLXN5c3RlbSByb290IGZv ciBhbm9ueW1vdXMgdXNlcnMuCisKKyAgIEV4aXN0aW5nIGZ1bmN0aW9ucyBtdXN0IG1ha2UgImlm IChpbnNlcnZlciAmJiBpc2d1ZXN0KSIgY2hlY2tzIGZvcgorICAgYWN0aW9ucyB0aGF0IHdvdWxk IG5vdCBiZSBsZWdhbCBmb3IgZ3Vlc3RzOiB6ZGVsZXRlKCksIHpybWRpcigpLAorICAgenByaW50 KCksIHptYWlsKCksIGV0Yy4KKworICAgaW50CisgICAgICAgICAgenZ1c2VyKG5hbWUpIGNoYXIg KiBuYW1lOworICAgICAgICAgIFZlcmlmaWVzIHRoYXQgdXNlciAibmFtZSIgZXhpc3RzIGFuZCBp cyBhbGxvd2VkIHRvIGxvZyBpbi4gSWYKKyAgICAgICAgICB0aGUgbmFtZSBpcyAiZnRwIiBvciAi YW5vbnltb3VzIiBhbmQgY2t4YW5vbiAhPSAwLCBhIGd1ZXN0IGxvZ2luCisgICAgICAgICAgaXMg c2V0IHVwLiBSZXR1cm5zIDAgaWYgdXNlciBub3QgYWxsb3dlZCB0byBsb2cgaW4sIG5vbnplcm8g aWYKKyAgICAgICAgICB1c2VyIG1heSBsb2cgaW4uCisKKyAgIGludAorICAgICAgICAgIHp2cGFz cyhzdHJpbmcpIGNoYXIgKiBzdHJpbmc7CisgICAgICAgICAgVmVyaWZpZXMgcGFzc3dvcmQgb2Yg dGhlIHVzZXIgZnJvbSB0aGUgbW9zdCByZWNlbnQgenZ1c2VyKCkKKyAgICAgICAgICBjYWxsLiBS ZXR1cm5zIG5vbnplcm8gaWYgcGFzc3dvcmQgaXMgdmFsaWQgZm9yIHVzZXIsIDAgaWYgaXQKKyAg ICAgICAgICBpc24ndC4gTWFrZXMgYW55IGFwcHJvcHJpYXRlIHN5c3RlbSBsb2cgZW50cmllcyAo SUtTRCBsb2dpbnMsCisgICAgICAgICAgZmFpbGVkIGxvZ2luIGF0dGVtcHRzLCBldGMpLiBJZiBw YXNzd29yZCBpcyB2YWxpZCwgbG9ncyB0aGUgdXNlcgorICAgICAgICAgIGluIGFzIGhlcnNlbGYg KGlmIHJlYWwgdXNlciksIG9yIHNldHMgdXAgcmVzdHJpY3RlZCBhbm9ueW1vdXMKKyAgICAgICAg ICBhY2Nlc3MgaWYgdXNlciBpcyBndWVzdCAoZS5nLiBjaGFuZ2VzIGZpbGUtc3lzdGVtIHJvb3Qg dG8KKyAgICAgICAgICBhbm9ucm9vdCBhbmQgc2V0cyBpc2d1ZXN0ID0gMSkuCisKKyAgIFZPSUQK KyAgICAgICAgICB6c3lzbG9nKCkKKyAgICAgICAgICBCZWdpbnMgYW55IGRlc2lyZWQgc3lzdGVt IGxvZ2dpbmcgb2YgYW4gSUtTRCBzZXNzaW9uLgorCisgICBWT0lECisgICAgICAgICAgenZsb2dv dXQoKQorICAgICAgICAgIFRlcm1pbmF0ZXMgYW4gSUtTRCBzZXNzaW9uLiBJbiBtb3N0IGNhc2Vz IHRoaXMgaXMgc2ltcGx5IGEKKyAgICAgICAgICB3cmFwcGVyIGZvciBleGl0KCkgb3IgZG9leGl0 KCksIHdpdGggc29tZSBzeXN0ZW0gbG9nZ2luZyBhZGRlZC4KKworNC5FLjIuMy4gUHJpdmlsZWdl IEZ1bmN0aW9ucworCisgICBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYnkgQy1LZXJtaXQgdG8g YWRhcHQgaXRzZWxmIHRvIG9wZXJhdGluZworICAgc3lzdGVtcyB3aGVyZSB0aGUgcHJvZ3JhbSBj YW4gYmUgbWFkZSB0byBydW4gaW4gYSAicHJpdmlsZWdlZCIgbW9kZSwKKyAgIGUuZy4gc2V0dWlk IG9yIHNldGdpZCBpbiBVbml4LiBDLUtlcm1pdCBzaG91bGQgTk9UIHJlYWQgYW5kIHdyaXRlIGZp bGVzCisgICBvciBzdGFydCBzdWJwcm9jZXNzZXMgYXMgYSBwcml2aWxlZ2VkIHByb2dyYW0uIFRo aXMgd291bGQgcHJlc2VudCBhCisgICBzZXJpb3VzIHRocmVhdCB0byBzeXN0ZW0gc2VjdXJpdHku IFRoZSBzZWN1cml0eSBwYWNrYWdlIGhhcyBiZWVuCisgICBpbnN0YWxsZWQgdG8gcHJldmVudCBz dWNoIHNlY3VyaXR5IGJyZWFjaGVzIGJ5IHR1cm5pbmcgb2ZmIHRoZQorICAgcHJvZ3JhbSdzIHNw ZWNpYWwgcHJpdmlsZWdlcyBhdCBhbGwgdGltZXMgZXhjZXB0IHdoZW4gdGhleSBhcmUgbmVlZGVk LgorCisgICBJbiBVTklYLCB0aGUgb25seSBuZWVkIEtlcm1pdCBoYXMgZm9yIHByaXZpbGVnZWQg c3RhdHVzIGlzIGFjY2VzcyB0bworICAgdGhlIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5LCBpbiBv cmRlciB0byByZWFkLCBjcmVhdGUsIGFuZCBkZXN0cm95CisgICBsb2NrZmlsZXMsIGFuZCB0byBv cGVuIGNvbW11bmljYXRpb24gZGV2aWNlcyB0aGF0IGFyZSBub3JtYWxseQorICAgcHJvdGVjdGVk IGFnYWluc3QgdGhlIHVzZXIgKHNlZSB0aGUgWzEzM11Vbml4IEMtS2VybWl0IEluc3RhbGxhdGlv bgorICAgSW5zdHJ1Y3Rpb25zIGZvciBkaXNjdXNzaW9uKS4gVGhlcmVmb3JlLCBwcml2aWxlZ2Vz IHNob3VsZCBvbmx5IGJlCisgICBlbmFibGVkIGZvciB0aGVzZSBvcGVyYXRpb25zIGFuZCBkaXNh YmxlZCBhdCBhbGwgb3RoZXIgdGltZXMuIFRoaXMKKyAgIHJlbGlldmVzIHRoZSBwcm9ncmFtbWVy IG9mIHRoZSByZXNwb25zaWJpbGl0eSBvZiBwdXR0aW5nIGV4cGVuc2l2ZSBhbmQKKyAgIHVucmVs aWFibGUgYWNjZXNzIGNoZWNrcyBhcm91bmQgZXZlcnkgZmlsZSBhY2Nlc3MgYW5kIHN1YnByb2Nl c3MKKyAgIGNyZWF0aW9uLgorCisgICBTdHJpY3RseSBzcGVha2luZywgdGhlc2UgZnVuY3Rpb25z IGFyZSBub3QgcmVxdWlyZWQgaW4gYWxsIEMtS2VybWl0CisgICBpbXBsZW1lbnRhdGlvbnMsIGJl Y2F1c2UgdGhlaXIgdXNlIChzbyBmYXIsIGF0IGxlYXN0KSBpcyBpbnRlcm5hbCB0bworICAgdGhl IEdyb3VwIEUgbW9kdWxlcy4gSG93ZXZlciwgdGhleSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gYWxs IEMtS2VybWl0CisgICBpbXBsZW1lbnRhdGlvbnMgZm9yIG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQg c3VwcG9ydCB0aGUgbm90aW9uIG9mIGEKKyAgIHByaXZpbGVnZWQgcHJvZ3JhbSAoVU5JWCwgUlNU Uy9FLCB3aGF0IG90aGVycz8pLgorCisgICBpbnQKKyAgICAgICAgICBwcml2X2luaSgpCisgICAg ICAgICAgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByb2dyYW0gaXMgcnVubmluZyBpbiBwcml2aWxl Z2VkIHN0YXR1cy4KKyAgICAgICAgICBJZiBzbywgdHVybiBvZmYgdGhlIHByaXZpbGVnZXMsIGlu IHN1Y2ggYSB3YXkgdGhhdCB0aGV5IGNhbiBiZQorICAgICAgICAgIHR1cm5lZCBvbiBhZ2FpbiB3 aGVuIG5lZWRlZC4gQ2FsbGVkIGZyb20gc3lzaW5pdCgpIGF0IHByb2dyYW0KKyAgICAgICAgICBz dGFydHVwIHRpbWUuIFJldHVybnM6CisgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MKKyAgICAgICAg ICAgIG5vbnplcm8gb24gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvZ3JhbSBzaG91bGQg aGFsdAorICAgICAgICAgIGltbWVkaWF0ZWx5LgorCisgICBpbnQKKyAgICAgICAgICBwcml2X29u KCkKKyAgICAgICAgICBJZiB0aGUgcHJvZ3JhbSBpcyBub3QgcHJpdmlsZWdlZCwgdGhpcyBmdW5j dGlvbiBkb2VzIG5vdGhpbmcuIElmCisgICAgICAgICAgdGhlIHByb2dyYW0gaXMgcHJpdmlsZWdl ZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGl0IHRvCisgICAgICAgICAgcHJpdmlsZWdlZCBzdGF0 dXMuIHByaXZfaW5pKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGZpcnN0LgorICAgICAgICAgIFJl dHVybnM6CisgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MKKyAgICAgICAgICAgIG5vbnplcm8gb24g ZmFpbHVyZQorCisgICBpbnQKKyAgICAgICAgICBwcml2X29mZigpCisgICAgICAgICAgVHVybnMg cHJpdmlsZWdlcyBvZmYgKGlmIHRoZXkgYXJlIG9uKSBpbiBzdWNoIGEgd2F5IHRoYXQgdGhleQor ICAgICAgICAgIGNhbiBiZSB0dXJuZWQgYmFjayBvbiBhZ2Fpbi4gUmV0dXJuczoKKyAgICAgICAg ICAgIDAgb24gc3VjY2VzcworICAgICAgICAgICAgbm9uemVybyBvbiBmYWlsdXJlCisKKyAgIGlu dAorICAgICAgICAgIHByaXZfY2FuKCkKKyAgICAgICAgICBUdXJucyBwcml2aWxlZ2VzIG9mZiBp biBzdWNoIGEgd2F5IHRoYXQgdGhleSBjYW5ub3QgYmUgdHVybmVkCisgICAgICAgICAgYmFjayBv bi4gUmV0dXJuczoKKyAgICAgICAgICAgIDAgb24gc3VjY2VzcworICAgICAgICAgICAgbm9uemVy byBvbiBmYWlsdXJlCisKKyAgIGludAorICAgICAgICAgIHByaXZfY2hrKCkKKyAgICAgICAgICBB dHRlbXB0cyB0byB0dXJucyBwcml2aWxlZ2VzIG9mZiBpbiBzdWNoIGEgd2F5IHRoYXQgdGhleSBj YW4gYmUKKyAgICAgICAgICB0dXJuZWQgb24gYWdhaW4gbGF0ZXIuIFRoZW4gY2hlY2tzIHRvIG1h a2Ugc3VyZSB0aGF0IHRoZXkgd2VyZQorICAgICAgICAgIHJlYWxseSB0dXJuZWQgb2ZmLiBJZiB0 aGV5IHdlcmUgbm90IHJlYWxseSB0dXJuZWQgb2ZmLCB0aGVuIHRoZXkKKyAgICAgICAgICBhcmUg Y2FuY2VsZWQgcGVybWFuZW50bHkuIFJldHVybnM6CisgICAgICAgICAgICAwIG9uIHN1Y2Nlc3MK KyAgICAgICAgICAgIG5vbnplcm8gb24gZmFpbHVyZQorCis0LkUuMi40LiBDb25zb2xlLVJlbGF0 ZWQgRnVuY3Rpb25zCisKKyAgIFRoZXNlIHJlbGF0ZSB0byB0aGUgcHJvZ3JhbSdzICJjb25zb2xl Iiwgb3IgY29udHJvbGxpbmcgdGVybWluYWwsIGkuZS4KKyAgIHRoZSB0ZXJtaW5hbCB0aGF0IHRo ZSB1c2VyIGlzIGxvZ2dlZCBpbiBvbiBhbmQgdHlwZXMgY29tbWFuZHMgYXQsIG9yIG9uCisgICBh IFBDIG9yIHdvcmtzdGF0aW9uLCB0aGUgYWN0dWFsIGtleWJvYXJkIGFuZCBzY3JlZW4uCisKKyAg IGludAorICAgICAgICAgIGNvbmJpbihlc2MpIGNoYXIgZXNjOworICAgICAgICAgIFB1dHMgdGhl IGNvbnNvbGUgaW50byAiYmluYXJ5IiBtb2RlLCBzbyB0aGF0IEtlcm1pdCdzIGNvbW1hbmQKKyAg ICAgICAgICBwYXJzZXIgY2FuIGNvbnRyb2wgZWNob2luZyBhbmQgb3RoZXIgdHJlYXRtZW50IG9m IGNoYXJhY3RlcnMKKyAgICAgICAgICB0aGF0IHRoZSB1c2VyIHR5cGVzLiBlc2MgaXMgdGhlIGNo YXJhY3RlciB0aGF0IHdpbGwgYmUgdXNlZCB0bworICAgICAgICAgIGdldCBLZXJtaXQncyBhdHRl bnRpb24gZHVyaW5nIHBhY2tldCBtb2RlOyBwdXRzIHRoaXMgaW4gYSBnbG9iYWwKKyAgICAgICAg ICBwbGFjZS4gU2V0cyB0aGUgY2t4ZWNoIHZhcmlhYmxlLiBSZXR1cm5zOgorICAgICAgICAgICAt MTogb24gZXJyb3IuCisgICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAg ICAgICBjb25jYihlc2MpIGNoYXIgZXNjOworICAgICAgICAgIFB1dCBjb25zb2xlIGluICJjYnJl YWsiIChzaW5nbGUtY2hhcmFjdGVyIHdha2V1cCkgbW9kZS4gVGhhdCBpcywKKyAgICAgICAgICBl bnN1cmUgdGhhdCBlYWNoIGNvbnNvbGUgY2hhcmFjdGVyIGlzIGF2YWlsYWJsZSB0byB0aGUgcHJv Z3JhbQorICAgICAgICAgIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHVzZXIgdHlwZXMgaXQuIE90aGVy d2lzZSBqdXN0IGxpa2UKKyAgICAgICAgICBjb25iaW4oKS4gUmV0dXJuczoKKyAgICAgICAgICAg LTE6IG9uIGVycm9yLgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKworICAgaW50CisgICAg ICAgICAgY29uY2hrKCkKKyAgICAgICAgICBSZXR1cm5zIGEgbnVtYmVyLCAwIG9yIGdyZWF0ZXIs IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3YWl0aW5nCisgICAgICAgICAgdG8gYmUgcmVhZCBm cm9tIHRoZSBjb25zb2xlLCBpLmUuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0CisgICAg ICAgICAgdGhlIHVzZXIgaGFzIHR5cGVkIHRoYXQgaGF2ZSBub3QgYmVlbiByZWFkIHlldCBieSBL ZXJtaXQuCisKKyAgIGxvbmcKKyAgICAgICAgICBjb25nc3BkKCk7CisgICAgICAgICAgUmV0dXJu cyB0aGUgc3BlZWQgKCJiYXVkIHJhdGUiKSBvZiB0aGUgY29udHJvbGxpbmcgdGVybWluYWwsIGlm CisgICAgICAgICAga25vd24sIG90aGVyd2lzZSAtMUwuCisKKyAgIGludAorICAgICAgICAgIGNv bmdrcyh0aW1vKSBpbnQgdGltbzsKKyAgICAgICAgICBHZXQgS2V5Ym9hcmQgU2NhbmNvZGUuIFJl YWRzIGEga2V5Ym9hcmQgc2NhbiBjb2RlIGZyb20gdGhlCisgICAgICAgICAgcGh5c2ljYWwgY29u c29sZSBrZXlib2FyZC4gSWYgdGhlIHRpbW8gcGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbgorICAg ICAgICAgIHplcm8sIHRoZW4gdGltZXMgb3V0IGFuZCByZXR1cm5zIC0yIGlmIG5vIGNoYXJhY3Rl ciBhcHBlYXJzCisgICAgICAgICAgd2l0aGluIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4g VXBvbiBhbnkgb3RoZXIga2luZCBvZgorICAgICAgICAgIGVycm9yLCByZXR1cm5zIC0xLiBVcG9u IHN1Y2Nlc3MgcmV0dXJucyBhIHNjYW4gY29kZSwgd2hpY2ggbWF5CisgICAgICAgICAgYmUgYW55 IHBvc2l0aXZlIGludGVnZXIuIEZvciBzaXR1YXRpb25zIHdoZXJlIHNjYW4gY29kZXMgY2Fubm90 CisgICAgICAgICAgYmUgcmVhZCAoZm9yIGV4YW1wbGUsIHdoZW4gYW4gQVNDSUkgdGVybWluYWwg aXMgdXNlZCBhcyB0aGUKKyAgICAgICAgICBqb2IncyBjb250cm9sbGluZyB0ZXJtaW5hbCksIHRo aXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvCisgICAgICAgICAgY29uaW5jKCksIGkuZS4gaXQg cmV0dXJucyBhbiA4LWJpdCBjaGFyYWN0ZXIgdmFsdWUuIGNvbmdrcygpIGlzCisgICAgICAgICAg Zm9yIHVzZSB3aXRoIHdvcmtzdGF0aW9ucyB3aG9zZSBrZXlib2FyZHMgaGF2ZSBBbHRlcm5hdGUs CisgICAgICAgICAgQ29tbWFuZCwgT3B0aW9uLCBhbmQgc2ltaWxhciBtb2RpZmllciBrZXlzLCBh bmQgRnVuY3Rpb24ga2V5cworICAgICAgICAgIHRoYXQgZ2VuZXJhdGUgY29kZXMgZ3JlYXRlciB0 aGFuIDI1NS4KKworICAgaW50CisgICAgICAgICAgY29uZ20oKQorICAgICAgICAgIENvbnNvbGUg Z2V0IG1vZGVzLiBHZXRzIHRoZSBjdXJyZW50IGNvbnNvbGUgdGVybWluYWwgbW9kZXMgYW5kCisg ICAgICAgICAgc2F2ZXMgdGhlbSBzbyB0aGF0IGNvbnJlcygpIGNhbiByZXN0b3JlIHRoZW0gbGF0 ZXIuIFJldHVybnMgMSBpZgorICAgICAgICAgIGl0IGdvdCB0aGUgbW9kZXMgT0ssIDAgaWYgaXQg ZGlkIG5vdGhpbmcgKGUuZy4gYmVjYXVzZSBLZXJtaXQgaXMKKyAgICAgICAgICBub3QgY29ubmVj dGVkIHdpdGggYW55IHRlcm1pbmFsKSwgLTEgb24gZXJyb3IuCisKKyAgIGludAorICAgICAgICAg IGNvbmluYyh0aW1vKSBpbnQgdGltbzsKKyAgICAgICAgICBDb25zb2xlIElucHV0IENoYXJhY3Rl ci4gUmVhZHMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29sZS4gSWYKKyAgICAgICAgICB0aGUg dGltbyBwYXJhbWV0ZXIgaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZW4gY29uaW5jKCkgdGltZXMg b3V0CisgICAgICAgICAgYW5kIHJldHVybnMgLTIgaWYgbm8gY2hhcmFjdGVyIGFwcGVhcnMgd2l0 aGluIHRoZSBnaXZlbiBudW1iZXIKKyAgICAgICAgICBvZiBzZWNvbmRzLiBVcG9uIGFueSBvdGhl ciBraW5kIG9mIGVycm9yLCByZXR1cm5zIC0xLiBVcG9uCisgICAgICAgICAgc3VjY2VzcywgcmV0 dXJucyB0aGUgY2hhcmFjdGVyIGl0c2VsZiwgd2l0aCBhIHZhbHVlIGluIHRoZSByYW5nZQorICAg ICAgICAgIDAtMjU1IGRlY2ltYWwuCisKKyAgIFZPSUQKKyAgICAgICAgICBjb25pbnQoZixzKSBT SUdUWVAgKCpmKSgpLCAoKnMpKCk7CisgICAgICAgICAgU2V0cyB0aGUgY29uc29sZSB0byBnZW5l cmF0ZSBhbiBpbnRlcnJ1cHQgaWYgdGhlIHVzZXIgdHlwZXMgYQorICAgICAgICAgIGtleWJvYXJk IGludGVycnVwdCBjaGFyYWN0ZXIsIGFuZCB0byB0cmFuc2ZlciBjb250cm9sIHRoZQorICAgICAg ICAgIHNpZ25hbC1oYW5kbGluZyBmdW5jdGlvbiBmLiBGb3Igc3lzdGVtcyB3aXRoIGpvYiBjb250 cm9sLCBzIGlzCisgICAgICAgICAgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgc3Vz cGVuZHMgdGhlIGpvYi4gU2V0cyB0aGUKKyAgICAgICAgICBnbG9iYWwgdmFyaWFibGUgImJhY2tn cmQiIHRvIHplcm8gaWYgS2VybWl0IGlzIHJ1bm5pbmcgaW4gdGhlCisgICAgICAgICAgZm9yZWdy b3VuZCwgYW5kIHRvIG5vbnplcm8gaWYgS2VybWl0IGlzIHJ1bm5pbmcgaW4gdGhlCisgICAgICAg ICAgYmFja2dyb3VuZC4gU2VlIGNrY2RlYi5oIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBTSUdUWVAu IE5vIHJldHVybgorICAgICAgICAgIHZhbHVlLgorCisgICBWT0lECisgICAgICAgICAgY29ubm9p KCkKKyAgICAgICAgICBDb25zb2xlIG5vIGludGVycnVwdHMuIERpc2FibGUga2V5Ym9hcmQgaW50 ZXJydXB0cyBvbiB0aGUKKyAgICAgICAgICBjb25zb2xlLiBObyByZXR1cm4gdmFsdWUuCisKKyAg IGludAorICAgICAgICAgIGNvbm9jKGMpIGNoYXIgYzsKKyAgICAgICAgICBXcml0ZXMgY2hhcmFj dGVyIGMgdG8gdGhlIGNvbnNvbGUgdGVybWluYWwuIFJldHVybnM6CisgICAgICAgICAgMCBvbiBm YWlsdXJlLCAxIG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIGNvbm9sKHMpIGNoYXIg KnM7CisgICAgICAgICAgV3JpdGVzIHN0cmluZyBzIHRvIHRoZSBjb25zb2xlLiBSZXR1cm5zIC0x IG9uIGVycm9yLCAwIG9yCisgICAgICAgICAgZ3JlYXRlciBvbiBzdWNjZXNzLgorCisgICBpbnQK KyAgICAgICAgICBjb25vbGEocykgY2hhciAqc1tdOyB7CisgICAgICAgICAgV3JpdGVzIGFuIGFy cmF5IG9mIHN0cmluZ3MgdG8gdGhlIGNvbnNvbGUuIFJldHVybnMgLTEgb24gZXJyb3IsCisgICAg ICAgICAgMCBvciBncmVhdGVyIG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIGNvbm9s bChzKSBjaGFyICpzOworICAgICAgICAgIFdyaXRlcyBzdHJpbmcgcyB0byB0aGUgY29uc29sZSwg Zm9sbG93ZWQgYnkgdGhlIG5lY2Vzc2FyeSBsaW5lCisgICAgICAgICAgdGVybWluYXRpb24gY2hh cmFjdGVycyB0byBwdXQgdGhlIGNvbnNvbGUgY3Vyc29yIGF0IHRoZQorICAgICAgICAgIGJlZ2lu bmluZyBvZiB0aGUgbmV4dCBsaW5lLiBSZXR1cm5zIC0xIG9uIGVycm9yLCAwIG9yIGdyZWF0ZXIg b24KKyAgICAgICAgICBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICBjb25yZXMoKQorICAg ICAgICAgIFJlc3RvcmVzIHRoZSBjb25zb2xlIHRlcm1pbmFsIHRvIHRoZSBtb2RlcyBvYnRhaW5l ZCBieSBjb25nbSgpLgorICAgICAgICAgIFJldHVybnM6IC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nl c3MuCisKKyAgIGludAorICAgICAgICAgIGNvbnhvKHgscykgaW50IHg7IGNoYXIgKnM7CisgICAg ICAgICAgV3JpdGUgeCBjaGFyYWN0ZXJzIGZyb20gc3RyaW5nIHMgdG8gdGhlIGNvbnNvbGUuIFJl dHVybnMgMCBvcgorICAgICAgICAgIGdyZWF0ZXIgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisK KyAgIGNoYXIgKgorICAgICAgICAgIGNvbmtiZygpOworICAgICAgICAgIFJldHVybnMgYSBwb2lu dGVyIHRvIHRoZSBkZXNpZ25hdG9yIG9mIHRoZSBjb25zb2xlIGtleWJvYXJkCisgICAgICAgICAg dHlwZS4gRm9yIGV4YW1wbGUsIG9uIGEgUEMsIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuICI4 OCIsCisgICAgICAgICAgIjEwMSIsIGV0Yy4gVXBvbiBmYWlsdXJlLCByZXR1cm5zIGEgcG9pbnRl ciB0byB0aGUgZW1wdHkgc3RyaW5nLgorCis0LkUuMi41LiBDb21tdW5pY2F0aW9ucyBGdW5jdGlv bnMKKworICAgVGhlIGNvbW11bmljYXRpb24gZGV2aWNlIGlzIHRoZSBkZXZpY2UgdXNlZCBmb3Ig dGVybWluYWwgZW11bGF0aW9uIGFuZAorICAgZmlsZSB0cmFuc2Zlci4gSXQgbWF5IG9yIG1heSBu b3QgYmUgdGhlIHNhbWUgZGV2aWNlIGFzIHRoZSBjb25zb2xlLCBhbmQKKyAgIGl0IG1heSBvciBt YXkgbm90IGJlIGEgdGVybWluYWwgKHNlcmlhbC1wb3J0KSBkZXZpY2U7IGl0IGNvdWxkIGFsc28g YmUKKyAgIGEgbmV0d29yayBjb25uZWN0aW9uLiBGb3IgYnJldml0eSwgdGhlIGNvbW11bmljYXRp b24gZGV2aWNlIGlzIHJlZmVycmVkCisgICB0byBoZXJlIGFzIHRoZSAidHR5Ii4gV2hlbiB0aGUg Y29tbXVuaWNhdGlvbiBkZXZpY2UgaXMgdGhlIHNhbWUgYXMgdGhlCisgICBjb25zb2xlIGRldmlj ZSwgS2VybWl0IGlzIHNhaWQgdG8gYmUgaW4gcmVtb3RlIG1vZGUuIFdoZW4gdGhlIHR3bworICAg ZGV2aWNlcyBhcmUgZGlmZmVyZW50LCBLZXJtaXQgaXMgaW4gbG9jYWwgbW9kZS4KKworICAgaW50 CisgICAgICAgICAgdHRjaGsoKQorICAgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFy YWN0ZXJzIHRoYXQgaGF2ZSBhcnJpdmVkIGF0IHRoZQorICAgICAgICAgIGNvbW11bmljYXRpb24g ZGV2aWNlIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiByZWFkIGJ5IHR0aW5jKCksCisgICAgICAgICAg dHRpbmwoKSwgYW5kIGZyaWVuZHMuIElmIGNvbW11bmljYXRpb24gaW5wdXQgaXMgYnVmZmVyZWQg KGFuZCBpdAorICAgICAgICAgIHNob3VsZCBiZSksIHRoaXMgaXMgdGhlIHN1bSBvZiB0aGUgbnVt YmVyIG9mIHVucmVhZCBjaGFyYWN0ZXJzCisgICAgICAgICAgaW4gS2VybWl0J3MgYnVmZmVyIFBM VVMgdGhlIG51bWJlciBvZiB1bnJlYWQgY2hhcmFjdGVycyBpbiB0aGUKKyAgICAgICAgICBvcGVy YXRpbmcgc3lzdGVtJ3MgaW50ZXJuYWwgYnVmZmVyLiBUaGUgY2FsbCBtdXN0IGJlCisgICAgICAg ICAgbm9uZGVzdHJ1Y3RpdmUgYW5kIG5vbmJsb2NraW5nLCBhbmQgYXMgaW5leHBlbnNpdmUgYXMg cG9zc2libGUuCisgICAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDA6IG9yIGdyZWF0ZXIg b24gc3VjY2VzcywKKyAgICAgICAgICAgIDA6IGluIGNhc2Ugb2YgaW50ZXJuYWwgZXJyb3IsCisg ICAgICAgICAgIC0xOiBvciBsZXNzIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGUgY29ubmVjdGlvbiBo YXMgYmVlbiBicm9rZW4sCisgICAgICAgICAgb3IgdGhlcmUgaXMgbm8gY29ubmVjdGlvbi4KKwor ICAgICAgICAgIFRoYXQgaXMsIGEgbmVnYXRpdmUgcmV0dXJuIGZyb20gdHRjaGsoKSBzaG91bGQg cmVsaWFibHkgaW5kaWNhdGUKKyAgICAgICAgICB0aGF0IHRoZXJlIGlzIG5vIHVzYWJsZSBjb25u ZWN0aW9uLiBGdXJ0aGVybW9yZSwgdHRjaGsoKSBzaG91bGQKKyAgICAgICAgICBiZSBjYWxsYWJs ZSBhdCBhbnkgdGltZSB0byBzZWUgaWYgdGhlIGNvbm5lY3Rpb24gaXMgb3Blbi4gV2hlbgorICAg ICAgICAgIHRoZSBjb25uZWN0aW9uIGlzIG9wZW4sIGV2ZXJ5IGVmZm9ydCBtdXN0IGJlIG1hZGUg dG8gZW5zdXJlIHRoYXQKKyAgICAgICAgICB0dGNoayByZXR1cm5zIGFuIGFjY3VyYXRlIG51bWJl ciBvZiBjaGFyYWN0ZXJzIHdhaXRpbmcgdG8gYmUKKyAgICAgICAgICByZWFkLCByYXRoZXIgdGhh biBqdXN0IDAgKG5vIGNoYXJhY3RlcnMpIG9yIDEgKDEgb3IgbW9yZQorICAgICAgICAgIGNoYXJh Y3RlcnMpLCBhcyB3b3VsZCBiZSB0aGUgY2FzZSB3aGVuIHdlIHVzZSBzZWxlY3QoKS4gVGhpcwor ICAgICAgICAgIGFzcGVjdCBvZiB0dGNoaydzIG9wZXJhdGlvbiBpcyBjcml0aWNhbCB0byBzdWNj ZXNzZnVsIG9wZXJhdGlvbgorICAgICAgICAgIG9mIHNsaWRpbmcgd2luZG93cyBhbmQgc3RyZWFt aW5nLCBidXQgIm5vbmRlc3RydWN0aXZlIGJ1ZmZlcgorICAgICAgICAgIHBlZWtpbmciIGlzIGFu IG9ic2N1cmUgb3BlcmF0aW5nIHN5c3RlbSBmZWF0dXJlLCBhbmQgc28gd2hlbiBpdAorICAgICAg ICAgIGlzIG5vdCBhdmFpbGFibGUsIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzIGJ5IG1hbmFn aW5nIG91ciBvd24KKyAgICAgICAgICBpbnRlcm5hbCBidWZmZXIgYXQgYSBsZXZlbCBiZWxvdyB0 dGluYygpLCB0dGlubCgpLCBldGMsIGFzIGluCisgICAgICAgICAgdGhlIFVOSVggdmVyc2lvbiAo bm9uLUZJT05SRUFEIGNhc2UpLgorCisgICAgICAgICAgQW4gZXh0ZXJuYWwgZ2xvYmFsIHZhcmlh YmxlLCBjbHNvbmRpc2MsIGlmIG5vbnplcm8sIG1lYW5zIHRoYXQKKyAgICAgICAgICBpZiBhIHNl cmlhbCBjb25uZWN0aW9uIGRyb3BzIChjYXJyaWVyIG9uLXRvLW9mZiB0cmFuc2l0aW9uCisgICAg ICAgICAgZGV0ZWN0ZWQgYnkgdHRjaGsoKSksIHRoZSBkZXZpY2Ugc2hvdWxkIGJlIGNsb3NlZCBh bmQgcmVsZWFzZWQKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5LgorCisgICBpbnQKKyAgICAgICAg ICB0dGNsb3MoKQorICAgICAgICAgIENsb3NlcyB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgKHR0 eSBvciBuZXR3b3JrKS4gSWYgdGhlcmUgd2VyZQorICAgICAgICAgIGFueSBraW5kIG9mIGV4Y2x1 c2l2ZSBhY2Nlc3MgbG9ja3MgY29ubmVjdGVkIHdpdGggdGhlIHR0eSwgdGhlc2UKKyAgICAgICAg ICBhcmUgcmVsZWFzZWQuIElmIHRoZSB0dHkgaGFzIGEgbW9kZW0gY29ubmVjdGlvbiwgaXQgaXMg aHVuZyB1cC4KKyAgICAgICAgICBGb3IgdHJ1ZSB0dHkgZGV2aWNlcywgdGhlIG9yaWdpbmFsIHR0 eSBkZXZpY2UgbW9kZXMgYXJlCisgICAgICAgICAgcmVzdG9yZWQuIFJldHVybnM6CisgICAgICAg ICAgIC0xOiBvbiBmYWlsdXJlLgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKworICAgaW50 CisgICAgICAgICAgdHRmbHVpKCkKKyAgICAgICAgICBGbHVzaCBjb21tdW5pY2F0aW9ucyBpbnB1 dCBidWZmZXIuIElmIGFueSBjaGFyYWN0ZXJzIGhhdmUKKyAgICAgICAgICBhcnJpdmVkIGJ1dCBo YXZlIG5vdCB5ZXQgYmVlbiByZWFkLCBkaXNjYXJkIHRoZXNlIGNoYXJhY3RlcnMuIElmCisgICAg ICAgICAgY29tbXVuaWNhdGlvbnMgaW5wdXQgaXMgYnVmZmVyZWQgYnkgS2VybWl0IChhbmQgaXQg c2hvdWxkIGJlKSwKKyAgICAgICAgICB0aGlzIGZ1bmN0aW9uIGZsdXNoZXMgS2VybWl0J3MgYnVm ZmVyIGFzIHdlbGwgYXMgdGhlIG9wZXJhdGluZworICAgICAgICAgIHN5c3RlbSdzIGludGVybmFs IGlucHV0IGJ1ZmZlci4gUmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUuCisgICAg ICAgICAgICAwOiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB0dGZsdW8oKQorICAg ICAgICAgIEZsdXNoIHR0eSBvdXRwdXQgYnVmZmVyLiBJZiBhbnkgY2hhcmFjdGVycyBoYXZlIGJl ZW4gd3JpdHRlbiBidXQKKyAgICAgICAgICBub3QgYWN0dWFsbHkgdHJhbnNtaXR0ZWQgKGUuZy4g YmVjYXVzZSB0aGUgc3lzdGVtIGhhcyBiZWVuCisgICAgICAgICAgZmxvdy1jb250cm9sbGVkKSwg cmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3lzdGVtJ3Mgb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAgICAo Tm90ZSwgdGhpcyBmdW5jdGlvbiBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IGl0IGlzIHJlY29t bWVuZGVkCisgICAgICAgICAgdGhhdCBhbGwgQy1LZXJtaXQgcHJvZ3JhbW1lcnMgYWRkIGl0IGZv ciBmdXR1cmUgdXNlLCBldmVuIGlmIGl0CisgICAgICAgICAgaXMgb25seSBhIGR1bW15IGZ1bmN0 aW9uIHRoYXQgcmV0dXJucyAwIGFsd2F5cy4pCisKKyAgIGludAorICAgICAgICAgIHR0Z21kbSgp CisgICAgICAgICAgTG9va3MgZm9yIHRoZSBtb2RlbSBzaWduYWxzIENUUywgRFNSLCBhbmQgQ1RT LCBhbmQgcmV0dXJucyB0aG9zZQorICAgICAgICAgIHRoYXQgYXJlIG9uIGluIGFzIGl0cyByZXR1 cm4gdmFsdWUsIGluIGEgYml0IG1hc2sgYXMgZGVzY3JpYmVkCisgICAgICAgICAgZm9yIHR0d21k bSwgaW4gd2hpY2ggYSBiaXQgaXMgb24gKDEpIG9yIG9mZiAoMCkgYWNjb3JkaW5nIHRvCisgICAg ICAgICAgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBzaWduYWwgaXMgb24gKGFzc2VydGVkKSBv ciBvZmYgKG5vdAorICAgICAgICAgIGFzc2VydGVkKS4gUmV0dXJuIHZhbHVlczoKKyAgICAgICAg ICAgLTM6IE5vdCBpbXBsZW1lbnRlZAorICAgICAgICAgICAtMjogaWYgdGhlIGxpbmUgZG9lcyBu b3QgaGF2ZSBtb2RlbSBjb250cm9sCisgICAgICAgICAgIC0xOiBvbiBlcnJvcgorICAgICAgICAg ID49MDogb24gc3VjY2Vzcywgd2l0aCBiaXQgbWFzayBjb250YWluaW5nIHRoZSBtb2RlbSBzaWdu YWxzLgorCisgICBsb25nCisgICAgICAgICAgdHRnc3BkKCkKKyAgICAgICAgICBSZXR1cm5zIHRo ZSBjdXJyZW50IHR0eSBzcGVlZCBpbiBCSVRTIChub3QgQ0hBUkFDVEVSUykgcGVyCisgICAgICAg ICAgc2Vjb25kLCBvciAtMSBpZiBpdCBpcyBub3Qga25vd24gb3IgaWYgdGhlIHR0eSBpcyByZWFs bHkgYQorICAgICAgICAgIG5ldHdvcmssIG9yIHVwb24gYW55IGtpbmQgb2YgZXJyb3IuIE9uIHN1 Y2Nlc3MsIHRoZSBzcGVlZAorICAgICAgICAgIHJldHVybmVkIGlzIHRoZSBhY3R1YWwgbnVtYmVy IG9mIGJpdHMgcGVyIHNlY29uZCwgbGlrZSAxMjAwLAorICAgICAgICAgIDk2MDAsIDE5MjAwLCBl dGMuCisKKyAgIGludAorICAgICAgICAgIHR0Z3dzaXooKQorICAgICAgICAgIEdldCB0ZXJtaW5h bCB3aW5kb3cgc2l6ZS4gUmV0dXJucyAtMSBvbiBlcnJvciwgMCBpZiB0aGUgd2luZG93CisgICAg ICAgICAgc2l6ZSBjYW4ndCBiZSBvYnRhaW5lZCwgMSBpZiB0aGUgd2luZG93IHNpemUgaGFzIGJl ZW4KKyAgICAgICAgICBzdWNjZXNzZnVsbHkgb2J0YWluZWQuIFVwb24gc3VjY2VzcywgdGhlIGV4 dGVybmFsIGdsb2JhbAorICAgICAgICAgIHZhcmlhYmxlcyB0dF9yb3dzIGFuZCB0dF9jb2xzIGFy ZSBzZXQgdG8gdGhlIG51bWJlciBvZiBzY3JlZW4KKyAgICAgICAgICByb3dzIGFuZCBudW1iZXIg b2Ygc2NyZWVuIGNvbHVtbnMsIHJlc3BlY3RpdmVseS4gQXMgdGhpcworICAgICAgICAgIGZ1bmN0 aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiBhbGwgY2sqdGlvLmMgbW9kdWxlcywgY2FsbHMgdG8g aXQKKyAgICAgICAgICBtdXN0IGJlIHdyYXBwZWQgaW4gI2lmZGVmIENLX1RUR1dTSVouLiNlbmRp Zi4gTk9URTogVGhpcworICAgICAgICAgIGZ1bmN0aW9uIG11c3QgYmUgYXZhaWxhYmxlIHRvIHVz ZSB0aGUgVEVMTkVUIE5BV1MgZmVhdHVyZQorICAgICAgICAgIChOZWdvdGlhdGUgQWJvdXQgV2lu ZG93IFNpemUpIGFzIHdlbGwgYXMgUmxvZ2luLgorCisgICBpbnQKKyAgICAgICAgICB0dGhhbmco KQorICAgICAgICAgIEhhbmcgdXAgdGhlIGN1cnJlbnQgdHR5IGRldmljZS4gRm9yIHJlYWwgdHR5 IGRldmljZXMsIHR1cm4gb2ZmCisgICAgICAgICAgRFRSIGZvciBhYm91dCAxLzMtMS8yIHNlY29u ZCAob3Igb3RoZXIgbGVuZ3RoIG9mIHRpbWUsIGRlcGVuZGluZworICAgICAgICAgIG9uIHRoZSBz eXN0ZW0pLiBJZiB0aGUgdHR5IGlzIHJlYWxseSBhIG5ldHdvcmsgY29ubmVjdGlvbiwgY2xvc2UK KyAgICAgICAgICBpdC4gUmV0dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGZhaWx1cmUuCisgICAg ICAgICAgICAwOiBpZiBpdCBkb2VzIG5vdCBldmVuIHRyeSB0byBoYW5nIHVwLgorICAgICAgICAg ICAgMTogaWYgaXQgYmVsaWV2ZXMgaXQgaHVuZyB1cCBzdWNjZXNzZnVsbHkuCisKKyAgIFZPSUQK KyAgICAgICAgICB0dGltb2ZmKCkKKyAgICAgICAgICBUdXJucyBvZmYgYWxsIHBlbmRpbmcgdGlt ZXIgaW50ZXJydXB0cy4KKworICAgaW50CisgICAgICAgICAgdHRpbmModGltbykgaW50IHRpbW87 IChmdW5jdGlvbiBpcyBvbGQsIHJldHVybiBjb2RlcyBhcmUgbmV3KQorICAgICAgICAgIFJlYWRz IG9uZSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UuIElmIHRpbW8gaXMK KyAgICAgICAgICBncmVhdGVyIHRoYW4gemVybywgd2FpdCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNl Y29uZHMgYW5kIHRoZW4KKyAgICAgICAgICB0aW1lIG91dCBpZiBubyBjaGFyYWN0ZXIgYXJyaXZl cywgb3RoZXJ3aXNlIHdhaXQgZm9yZXZlciBmb3IgYQorICAgICAgICAgIGNoYXJhY3Rlci4gUmV0 dXJuczoKKyAgICAgICAgICAgLTM6IGludGVybmFsIGVycm9yIChlLmcuIHR0eSBtb2RlcyBzZXQg d3JvbmcpCisgICAgICAgICAgIC0yOiBjb21tdW5pY2F0aW9ucyBkaXNjb25uZWN0CisgICAgICAg ICAgIC0xOiB0aW1lb3V0IG9yIG90aGVyIGVycm9yCisgICAgICAgICAgPj0wOiB0aGUgY2hhcmFj dGVyIHRoYXQgd2FzIHJlYWQuCisgICAgICAgICAgSXQgaXMgSElHSExZIFJFQ09NTUVOREVEIHRo YXQgdHRpbmMoKSBiZSBpbnRlcm5hbGx5IGJ1ZmZlcmVkIHNvCisgICAgICAgICAgdGhhdCBjYWxs cyB0byBpdCBhcmUgcmVsYXRpdmVseSBpbmV4cGVuc2l2ZS4gSWYgaXQgaXMgcG9zc2libGUKKyAg ICAgICAgICB0byB0byBpbXBsZW1lbnQgdHRpbmMoKSBhcyBhIG1hY3JvLCBhbGwgdGhlIGJldHRl ciwgZm9yIGV4YW1wbGUKKyAgICAgICAgICBzb21ldGhpbmcgbGlrZToKKworICAjZGVmaW5lIHR0 aW5jKHQpICggKC0tdHhidWZuID49IDApID8gdHhidWZbdHRidWZwKytdIDogdHhidWZyKHQpICkK KworICAgICAgICAgIChzZWUgZGVzY3JpcHRpb24gb2YgdHhidWZyKCkgYmVsb3cpCisKKyAgIGlu dAorICAgICAgICAgIHR0aW5sKGRlc3QsbWF4LHRpbW8sZW9sLHN0YXJ0LHR1cm4pIGludCBtYXgs dGltbyx0dXJuOyBDSEFSCisgICAgICAgICAgKmRlc3QsIGVvbCwgc3RhcnQ7CisgICAgICAgICAg dHRpbmwoKSBpcyBLZXJtaXQncyBwYWNrZXQgcmVhZGVyLiBSZWFkcyBhIHBhY2tldCBmcm9tIHRo ZQorICAgICAgICAgIGNvbW11bmljYXRpb25zIGRldmljZSwgb3IgdXAgdG8gbWF4IGNoYXJhY3Rl cnMsIHdoaWNoZXZlciBvY2N1cnMKKyAgICAgICAgICBmaXJzdC4gQSBsaW5lIGlzIGEgc3RyaW5n IG9mIGNoYXJhY3RlcnMgc3RhcnRpbmcgd2l0aCB0aGUgc3RhcnQKKyAgICAgICAgICBjaGFyYWN0 ZXIgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgY2hhcmFjdGVyIGdpdmVuIGluIGVvbCBvcgorICAg ICAgICAgIHVudGlsIHRoZSBsZW5ndGggaXMgZXhoYXVzdGVkLCBvciwgaWYgdHVybiAhPSAwLCB1 bnRpbCB0aGUgbGluZQorICAgICAgICAgIHR1cm5hcm91bmQgY2hhcmFjdGVyICh0dXJuKSBpcyBy ZWFkLiBJZiB0dXJuIGlzIDAsIHR0aW5sKCkKKyAgICAgICAgICAqc2hvdWxkKiB1c2UgdGhlIHBh Y2tldCBsZW5ndGggZmllbGQgdG8gZGV0ZWN0IHRoZSBlbmQsIHRvIGFsbG93CisgICAgICAgICAg Zm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBlb2wgY2hhcmFjdGVyIGFwcGVhcnMgdW5wcmVm aXhlZCBpbgorICAgICAgICAgIHRoZSBwYWNrZXQgZGF0YS4gKFRoZSB0dXJuYXJvdW5kIGNoYXJh Y3RlciBpcyBmb3IgaGFsZi1kdXBsZXgKKyAgICAgICAgICBsaW5lbW9kZSBjb25uZWN0aW9ucy4p CisKKyAgICAgICAgICBJZiB0aW1vIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0dGlubCgpIHRpbWVz IG91dCBpZiB0aGUgZW9sCisgICAgICAgICAgY2hhcmFjdGVyIGlzIG5vdCBlbmNvdW50ZXJlZCB3 aXRoaW4gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzCisgICAgICAgICAgYW5kIHJldHVybnMg LTEuCisKKyAgICAgICAgICBUaGUgY2hhcmFjdGVycyB0aGF0IHdlcmUgaW5wdXQgYXJlIGNvcGll ZCBpbnRvICJkZXN0IiB3aXRoIHRoZWlyCisgICAgICAgICAgcGFyaXR5IGJpdHMgc3RyaXBwZWQg aWYgcGFyaXR5IGlzIG5vdCBub25lLiBUaGUgZmlyc3QgY2hhcmFjdGVyCisgICAgICAgICAgY29w aWVkIGludG8gZGVzdCBzaG91bGQgYmUgdGhlIHN0YXJ0IGNoYXJhY3RlciwgYW5kIHRoZSBsYXN0 CisgICAgICAgICAgc2hvdWxkIGJlIHRoZSBmaW5hbCBjaGFyYWN0ZXIgb2YgdGhlIHBhY2tldCAo dGhlIGxhc3QgYmxvY2sKKyAgICAgICAgICBjaGVjayBjaGFyYWN0ZXIpLiB0dGlubCgpIHNob3Vs ZCBhbHNvIGFic29yYiBhbmQgZGlzY2FyZCB0aGUgZW9sCisgICAgICAgICAgYW5kIHR1cm4gY2hh cmFjdGVycywgYW5kIGFueSBvdGhlciBjaGFyYWN0ZXJzIHRoYXQgYXJlIHdhaXRpbmcKKyAgICAg ICAgICB0byBiZSByZWFkLCB1cCB1bnRpbCB0aGUgbmV4dCBzdGFydCBjaGFyYWN0ZXIsIHNvIHRo YXQKKyAgICAgICAgICBzdWJzZXF1ZW50IGNhbGxzIHRvIHR0Y2hrKCkgd2lsbCBub3Qgc3VjY2Vl ZCBzaW1wbHkgYmVjYXVzZQorICAgICAgICAgIHRoZXJlIGFyZSBzb21lIHRlcm1pbmF0b3JzIHN0 aWxsIHNpdHRpbmcgaW4gdGhlIGJ1ZmZlciB0aGF0CisgICAgICAgICAgdHRpbmwoKSBkaWRuJ3Qg cmVhZC4gVGhpcyBvcGVyYXRpb24sIGlmIHBlcmZvcm1lZCwgTVVTVCBOT1QKKyAgICAgICAgICBC TE9DSyAoc28gaWYgaXQgY2FuJ3QgYmUgcGVyZm9ybWVkIGluIGEgZ3VhcmFudGVlZCBub25ibG9j a2luZworICAgICAgICAgIHdheSwgZG9uJ3QgZG8gaXQpLgorCisgICAgICAgICAgT24gc3VjY2Vz cywgdHRpbmwoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkLgorICAgICAg ICAgIE9wdGlvbmFsbHksIHR0aW5sKCkgY2FuIHNlbnNlIHRoZSBwYXJpdHkgb2YgaW5jb21pbmcg cGFja2V0cy4gSWYKKyAgICAgICAgICBpdCBkb2VzIHRoaXMsIHRoZW4gaXQgc2hvdWxkIHNldCB0 aGUgZ2xvYmFsIHZhcmlhYmxlIHR0cHJ0eQorICAgICAgICAgIGFjY29yZGluZ2x5LiB0dGlubCgp IHNob3VsZCBiZSBjb2RlZCB0byBiZSBhcyBlZmZpY2llbnQgYXMKKyAgICAgICAgICBwb3NzaWJs ZSwgc2luY2UgaXQgaXMgYXQgdGhlICJpbm5lciBsb29wIiBvZiBwYWNrZXQgcmVjZXB0aW9uLgor ICAgICAgICAgIHR0aW5sKCkgcmV0dXJuczoKKyAgICAgICAgICAgLTE6IFRpbWVvdXQgb3Igb3Ro ZXIgcG9zc2libHkgY29ycmVjdGFibGUgZXJyb3IuCisgICAgICAgICAgIC0yOiBJbnRlcnJ1cHRl ZCBmcm9tIGtleWJvYXJkLgorICAgICAgICAgICAtMzogVW5jb3JyZWN0YWJsZSBpL28gZXJyb3Ig LS0gY29ubmVjdGlvbiBsb3N0LCBjb25maWd1cmF0aW9uCisgICAgICAgICAgcHJvYmxlbSwgZXRj LgorICAgICAgICAgID49MDogb24gc3VjY2VzcywgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRo YXQgd2VyZSBhY3R1YWxseQorICAgICAgICAgIHJlYWQgYW5kIHBsYWNlZCBpbiB0aGUgZGVzdCBi dWZmZXIsIG5vdCBjb3VudGluZyB0aGUgdHJhaWxpbmcKKyAgICAgICAgICBudWxsLgorCisgICBp bnQKKyAgICAgICAgICB0dG9jKGMpIGNoYXIgYzsKKyAgICAgICAgICBPdXRwdXRzIHRoZSBjaGFy YWN0ZXIgYyB0byB0aGUgY29tbXVuaWNhdGlvbiBsaW5lLiBJZiB0aGUKKyAgICAgICAgICBvcGVy YXRpb24gZmFpbHMgdG8gY29tcGxldGUgd2l0aGluIHR3byBzZWNvbmRzLCB0aGlzIGZ1bmN0aW9u CisgICAgICAgICAgcmV0dXJucyAtMS4gT3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIG51bWJlciBv ZiBjaGFyYWN0ZXJzCisgICAgICAgICAgYWN0dWFsbHkgd3JpdHRlbiB0byB0aGUgdHR5ICgwIG9y IDEpLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5CisgICAgICAgICAgYmUgdXNlZCBmb3IgaW50 ZXJhY3RpdmUsIGNoYXJhY3Rlci1tb2RlIG9wZXJhdGlvbnMsIGxpa2UKKyAgICAgICAgICB0ZXJt aW5hbCBjb25uZWN0aW9uLCBzY3JpcHQgZXhlY3V0aW9uLCBkaWFsZXIgaS9vLCB3aGVyZSB0aGUK KyAgICAgICAgICBvdmVyaGVhZCBvZiB0aGUgc2lnbmFscyBhbmQgYWxhcm1zIGRvZXMgbm90IGNy ZWF0ZSBhIGJvdHRsZW5lY2suCisgICAgICAgICAgKFRISVMgREVTQ1JJUFRJT04gTkVFRFMgSU1Q Uk9WRU1FTlQgLS0gSWYgdGhlIG9wZXJhdGlvbiBmYWlscworICAgICAgICAgIHdpdGhpbiBhICJj ZXJ0YWluIGFtb3VudCBvZiB0aW1lIi4uLiB3aGljaCBtaWdodCBiZSBkZXBlbmRlbnQgb24KKyAg ICAgICAgICB0aGUgY29tbXVuaWNhdGlvbiBtZXRob2QsIHNwZWVkLCBldGMuIEluIHBhcnRpY3Vs YXIsCisgICAgICAgICAgZmxvdy1jb250cm9sIGRlYWRsb2NrcyBtdXN0IGJlIGFjY291bnRlZCBm b3IgYW5kIGJyb2tlbiBvdXQgb2YKKyAgICAgICAgICB0byBwcmV2ZW50IHRoZSBwcm9ncmFtIGZy b20gaGFuZ2luZyBpbmRlZmluaXRlbHksIGV0Yy4pCisKKyAgIGludAorICAgICAgICAgIHR0b2wo cyxuKSBpbnQgbjsgY2hhciAqczsKKyAgICAgICAgICBLZXJtaXQncyBwYWNrZXQgd3JpdGVyLiBX cml0ZXMgdGhlIG4gY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nCisgICAgICAgICAgcG9pbnRlZCB0 byB0byBieSBzLiBOT1RFOiBJdCBpcyB0dG9sJ3MgcmVzcG9uc2liaWxpdHkgdG8gd3JpdGUKKyAg ICAgICAgICBBTEwgb2YgdGhlIGNoYXJhY3RlcnMsIG5vdCBqdXN0IHNvbWUgb2YgdGhlbS4gUmV0 dXJuczoKKyAgICAgICAgICAgLTE6IG9uIGEgcG9zc2libHkgY29ycmVjdGFibGUgZXJyb3IgKHNv IGl0IGNhbiBiZSByZXRyaWVkKS4KKyAgICAgICAgICAgLTM6IG9uIGEgZmF0YWwgZXJyb3IsIGUu Zy4gY29ubmVjdGlvbiBsb3N0LgorICAgICAgICAgID49MDogb24gc3VjY2VzcywgdGhlIGFjdHVh bCBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuICh0aGUKKyAgICAgICAgICBzcGVjaWZpYyBu dW1iZXIgaXMgbm90IGFjdHVhbGx5IHVzZWQgZm9yIGFueXRoaW5nKS4KKworICAgaW50CisgICAg ICAgICAgdHRvcGVuKHR0bmFtZSxsY2wsbW9kZW0sdGltbykgY2hhciAqdHRuYW1lOyBpbnQgKmxj bCwgbW9kZW0sCisgICAgICAgICAgdGltbzsKKyAgICAgICAgICBPcGVucyBhIHR0eSBkZXZpY2Us IGlmIGl0IGlzIG5vdCBhbHJlYWR5IG9wZW4uIHR0b3BlbiBtdXN0IGNoZWNrCisgICAgICAgICAg dG8gbWFrZSBzdXJlIHRoZSBTQU1FIGRldmljZSBpcyBub3QgYWxyZWFkeSBvcGVuOyBpZiBpdCBp cywKKyAgICAgICAgICB0dG9wZW4gcmV0dXJucyBzdWNjZXNzZnVsbHkgd2l0aG91dCBkb2luZyBh bnl0aGluZy4gSWYgYQorICAgICAgICAgIERJRkZFUkVOVCBkZXZpY2UgaXMgY3VycmVudGx5IG9w ZW4sIHR0b3BlbigpIG11c3QgY2FsbCB0dGNsb3MoKQorICAgICAgICAgIHRvIGNsb3NlIGl0IGJl Zm9yZSBvcGVuaW5nIHRoZSBuZXcgb25lLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisKKyAgICAg ICAgICAgICAgdHRuYW1lOgorICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciBzdHJpbmcg LSBkZXZpY2UgbmFtZSBvciBuZXR3b3JrIGhvc3QgbmFtZS4KKworICAgICAgICAgICAgICBsY2w6 CisgICAgICAgICAgICAgICAgICAgICAgSWYgY2FsbGVkIHdpdGggbGNsIDwgMCwgc2V0cyB2YWx1 ZSBvZiBsY2wgYXMKKyAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dzOgorICAgICAgICAgICAg ICAgICAgICAgIDA6IHRoZSB0ZXJtaW5hbCBuYW1lZCBieSB0dG5hbWUgaXMgdGhlIGpvYidzCisg ICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxpbmcgdGVybWluYWwuCisgICAgICAgICAgICAg ICAgICAgICAgMTogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5IHR0bmFtZSBpcyBub3QgdGhlIGpvYidz CisgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxpbmcgdGVybWluYWwuCisgICAgICAgICAg ICAgICAgICAgICAgSWYgdGhlIGRldmljZSBpcyBhbHJlYWR5IG9wZW4sIG9yIGlmIHRoZSByZXF1 ZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgY2FuJ3QgYmUgb3BlbmVkLCB0aGVu IGxjbCByZW1haW5zIChhbmQgaXMKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCBhcykg LTEuCisKKyAgICAgICAgICAgICAgbW9kZW06CisgICAgICAgICAgICAgICAgICAgICAgTGVzcyB0 aGFuIHplcm86IHRoaXMgaXMgdGhlIG5lZ2F0aXZlIG9mIHRoZSBuZXR3b3JrCisgICAgICAgICAg ICAgICAgICAgICAgdHlwZSwgYW5kIHR0bmFtZSBpcyBhIG5ldHdvcmsgaG9zdCBuYW1lLiBOZXR3 b3JrCisgICAgICAgICAgICAgICAgICAgICAgdHlwZXMgKGZyb20gWzEzNF1ja2NuZXQuaDoKKwor ICBORVRfVENQQiAxICAgVENQL0lQIEJlcmtlbGV5IChzb2NrZXQpICAoaW1wbGVtZW50ZWQgaW4g WzEzNV1ja3V0aW8uYykKKyAgTkVUX1RDUEEgMiAgIFRDUC9JUCBBVCZUIChzdHJlYW1zKSAgICAg KG5vdCB5ZXQgaW1wbGVtZW50ZWQpCisgIE5FVF9ERUMgIDMgICBERUNuZXQgICAgICAgICAgICAg ICAgICAgIChub3QgeWV0IGltcGxlbWVudGVkKQorCisgICAgICAgICAgICAgICAgICAgICAgWmVy byBvciBncmVhdGVyOiB0dG5hbWUgaXMgYSB0ZXJtaW5hbCBkZXZpY2UgbmFtZS4KKyAgICAgICAg ICAgICAgICAgICAgICBaZXJvIG1lYW5zIGEgZGlyZWN0IGNvbm5lY3Rpb24gKGRvbid0IHVzZSBt b2RlbQorICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbHMpLiBQb3NpdGl2ZSBtZWFucyB1c2Ug bW9kZW0gc2lnbmFscyBkZXBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgY3Vy cmVudCBzZXR0aW5nIG9mIHR0Y2FyciAoc2VlIHR0c2NhcnIoKSkuCisKKyAgICAgICAgICAgICAg dGltbzoKKyAgICAgICAgICAgICAgICAgICAgICA+IDA6IG51bWJlciBvZiBzZWNvbmRzIHRvIHdh aXQgZm9yIG9wZW4oKSB0byByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGlt aW5nIG91dC4KKyAgICAgICAgICAgICAgICAgICAgICA8PTA6IG5vIHRpbWVyLCB3YWl0IGZvcmV2 ZXIgKGUuZy4gZm9yIGluY29taW5nCisgICAgICAgICAgICAgICAgICAgICAgY2FsbCkuCisgICAg ICAgICAgICAgICAgICAgICAgRm9yIHJlYWwgdHR5IGRldmljZXMsIHR0b3BlbigpIGF0dGVtcHRz IHRvIGdhaW4KKyAgICAgICAgICAgICAgICAgICAgICBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSB0 dHkgZGV2aWNlLCBmb3IgZXhhbXBsZSBpbgorICAgICAgICAgICAgICAgICAgICAgIFVOSVggYnkg Y3JlYXRpbmcgYSAibG9ja2ZpbGUiIChpbiBvdGhlciBvcGVyYXRpbmcKKyAgICAgICAgICAgICAg ICAgICAgICBzeXN0ZW1zLCBsaWtlIFZNUywgZXhjbHVzaXZlIGFjY2VzcyBwcm9iYWJseQorICAg ICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzIG5vIHNwZWNpYWwgYWN0aW9uKS4KKworICAgICAg ICBTaWRlIGVmZmVjdHM6CisgICAgICAgICAgICAgICAgQ29waWVzIGl0cyBhcmd1bWVudHMgYW5k IHRoZSB0dHkgZmlsZSBkZXNjcmlwdG9yIHRvIGdsb2JhbAorICAgICAgICAgICAgICAgIHZhcmlh YmxlcyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gdGhlIG90aGVyIHR0eS1yZWxhdGVkCisgICAgICAg ICAgICAgICAgZnVuY3Rpb25zLCB3aXRoIHRoZSBsY2wgdmFsdWUgYWx0ZXJlZCBhcyBkZXNjcmli ZWQgYWJvdmUuCisgICAgICAgICAgICAgICAgR2V0cyBhbGwgcGFyYW1ldGVycyBhbmQgc2V0dGlu Z3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgYW5kIHB1dHMgdGhl bSBpbiBhIGdsb2JhbCBhcmVhLCBzbyB0aGF0IHRoZXkgY2FuIGJlCisgICAgICAgICAgICAgICAg cmVzdG9yZWQgYnkgdHRyZXMoKSwgZS5nLiB3aGVuIHRoZSBkZXZpY2UgaXMgY2xvc2VkLgorCisg ICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAgICAgICAwOiBvbiBzdWNjZXNzCisgICAgICAg ICAgICAgICAgIC01OiBpZiBkZXZpY2UgaXMgaW4gdXNlCisgICAgICAgICAgICAgICAgIC00OiBp ZiBhY2Nlc3MgdG8gZGV2aWNlIGlzIGRlbmllZAorICAgICAgICAgICAgICAgICAtMzogaWYgYWNj ZXNzIHRvIGxvY2sgbWVjaGFuaXNtIGRlbmllZAorICAgICAgICAgICAgICAgICAtMjogdXBvbiB0 aW1lb3V0IHdhaXRpbmcgZm9yIGRldmljZSB0byBvcGVuCisgICAgICAgICAgICAgICAgIC0xOiBv biBvdGhlciBlcnJvcgorCisgICBpbnQKKyAgICAgICAgICB0dHBrdChzcGVlZCxmbG93LHBhcml0 eSkgbG9uZyBzcGVlZDsgaW50IGZsb3csIHBhcml0eTsKKyAgICAgICAgICBQdXRzIHRoZSBjdXJy ZW50bHkgb3BlbiB0dHkgZGV2aWNlIGludG8gdGhlIGFwcHJvcHJpYXRlIG1vZGVzCisgICAgICAg ICAgZm9yIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nIEtlcm1pdCBwYWNrZXRzLgorCisgICAg ICAgIEFyZ3VtZW50czoKKworICAgICAgICAgICAgICBzcGVlZDoKKyAgICAgICAgICAgICAgICAg ICAgICBpZiBzcGVlZCA+IC0xLCBhbmQgdGhlIGRldmljZSBpcyBhIHRydWUgdHR5IGRldmljZSwK KyAgICAgICAgICAgICAgICAgICAgICBhbmQgS2VybWl0IGlzIGluIGxvY2FsIG1vZGUsIHR0cGt0 IGFsc28gc2V0cyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBzcGVlZC4KKworICAgICAgICAg ICAgICBmbG93OgorICAgICAgICAgICAgICAgICAgICAgIGlmIGluIHRoZSByYW5nZSAwLTMsIHR0 cGt0IHNlbGVjdHMgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICB0eXBl IG9mIGZsb3cgY29udHJvbC4gQ3VycmVudGx5IDAgaXMgZGVmaW5lZCBhcyBubworICAgICAgICAg ICAgICAgICAgICAgIGZsb3cgY29udHJvbCwgMSBpcyBYb24vWG9mZiwgYW5kIG5vIG90aGVyIHR5 cGVzIGFyZQorICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQuIElmIChhbmQgdGhpcyBpcyBh IGhvcnJpYmxlIGhhY2ssIGJ1dCBpdAorICAgICAgICAgICAgICAgICAgICAgIGdvZXMgYmFjayBt YW55IHllYXJzIGFuZCB3aWxsIGJlIGhhcmQgdG8gZXJhZGljYXRlKQorICAgICAgICAgICAgICAg ICAgICAgIGZsb3cgaXMgNCwgdGhlbiB0aGUgYXBwcm9wcmlhdGUgdHR5IG1vZGVzIGFyZSBzZXQK KyAgICAgICAgICAgICAgICAgICAgICBmb3IgbW9kZW0gZGlhbGluZywgYSBzcGVjaWFsIGNhc2Ug aW4gd2hpY2ggd2UgdGFsaworICAgICAgICAgICAgICAgICAgICAgIHRvIGEgbW9kZW0tY29udHJv bGxlZCBsaW5lIHdpdGhvdXQgcmVxdWlyaW5nCisgICAgICAgICAgICAgICAgICAgICAgY2Fycmll ci4gSWYgZmxvdyBpcyA1LCB0aGVuIHdlIHJlcXVpcmUgY2Fycmllci4KKworICAgICAgICAgICAg ICBwYXJpdHk6CisgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzaW1wbHkgY29waWVkIGlu dG8gYSBnbG9iYWwgdmFyaWFibGUgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgIG90aGVy IGZ1bmN0aW9ucyAobGlrZSB0dGlubCwgdHRpbmMsIGV0YykgY2FuIHVzZSBpdC4KKworICAgICAg ICBTaWRlIGVmZmVjdHM6CisgICAgICAgICAgICAgICAgQ29waWVzIGl0cyBhcmd1bWVudHMgdG8g Z2xvYmFsIHZhcmlhYmxlcywgZmx1c2hlcyB0aGUKKyAgICAgICAgICAgICAgICB0ZXJtaW5hbCBk ZXZpY2UgaW5wdXQgYnVmZmVyLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICAgICAg IC0xOiBvbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGlu dAorICAgICAgICAgIHR0c2V0ZmxvdyhpbnQpCisgICAgICAgICAgRW5hYmxlcyB0aGUgZ2l2ZW4g dHlwZSBvZiBmbG93IGNvbnRyb2wgb24gdGhlIG9wZW4gc2VyaWFsCisgICAgICAgICAgY29tbXVu aWNhdGlvbnMgZGV2aWNlIGltbWVkaWF0ZWx5LiBBcmd1bWVudHMgYXJlIHRoZSBGTE9feHh4Cisg ICAgICAgICAgdmFsdWVzIGZyb20gY2tjZGViLmgsIGV4Y2VwdCBGTE9fRElBTCwgRkxPX0RJQVgs IG9yIEZMT19BVVRPLAorICAgICAgICAgIHdoaWNoIGFyZSBub3QgYWN0dWFsIGZsb3ctY29udHJv bCB0eXBlcy4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsCisgICAgICAgICAgLTEgb24gZmFpbHVyZS4K KworICAgI2lmZGVmIFRUU1BETElTVAorICAgbG9uZyAqCisgICAgICAgICAgdHRzcGRsaXN0KCkK KyAgICAgICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBsb25ncywgb3IgTlVM TCBvbiBmYWlsdXJlLiBPbgorICAgICAgICAgIHN1Y2Nlc3MsIGVsZW1lbnQgMCBvZiB0aGUgYXJy YXkgY29udGFpbnMgbnVtYmVyLCBuLCBpbmRpY2F0aW5nCisgICAgICAgICAgaG93IG1hbnkgZm9s bG93LiBFbGVtZW50cyAxLW4gYXJlIHNlcmlhbCBzcGVlZHMsIGV4cHJlc3NlZCBpbgorICAgICAg ICAgIGJpdHMgcGVyIHNlY29uZCwgdGhhdCBhcmUgbGVnYWwgb24gdGhpcyBwbGF0Zm9ybS4gVGhl IHVzZXIKKyAgICAgICAgICBpbnRlcmZhY2UgbWF5IHVzZSB0aGlzIGxpc3QgdG8gY29uc3RydWN0 IGEgbWVudSwga2V5d29yZCB0YWJsZSwKKyAgICAgICAgICBldGMuCisKKyAgICNlbmRpZiAvKiBU VFNQRExJU1QgKi8KKworICAgaW50CisgICAgICAgICAgdHRyZXMoKQorICAgICAgICAgIFJlc3Rv cmVzIHRoZSB0dHkgZGV2aWNlIHRvIHRoZSBtb2RlcyBhbmQgc2V0dGluZ3MgdGhhdCB3ZXJlIGlu CisgICAgICAgICAgZWZmZWN0IGF0IHRoZSB0aW1lIGl0IHdhcyBvcGVuZWQgKHNlZSB0dG9wZW4p LiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZXJyb3IuCisgICAgICAgICAgICAwOiBvbiBz dWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICB0dHJ1bmNtZChzdHJpbmcpIGNoYXIgKiBzdHJp bmc7CisgICAgICAgICAgUnVucyB0aGUgZ2l2ZW4gY29tbWFuZCBvbiB0aGUgbG9jYWwgc3lzdGVt LCBidXQgcmVkaXJlY3RzIGl0cworICAgICAgICAgIGlucHV0IGFuZCBvdXRwdXQgdG8gdGhlIGNv bW11bmljYXRpb24gKFNFVCBMSU5FLCBTRVQgUE9SVCwgb3IKKyAgICAgICAgICBTRVQgSE9TVCkg ZGV2aWNlLiBSZXR1cm5zOgorICAgICAgICAgICAgMDogb24gZmFpbHVyZS4KKyAgICAgICAgICAg IDE6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAgICAgICAgIHR0c2NhcnIoY2FycmllcikgaW50 IGNhcnJpZXI7CisgICAgICAgICAgQ29waWVzIGl0cyBhcmd1bWVudCB0byBhIHZhcmlhYmxlIHRo YXQgaXMgZ2xvYmFsIHRvIHRoZSBvdGhlcgorICAgICAgICAgIHR0eS1yZWxhdGVkIGZ1bmN0aW9u cywgYW5kIHRoZW4gcmV0dXJucyBpdC4gVGhlIHZhbHVlcyBmb3IKKyAgICAgICAgICBjYXJyaWVy IGFyZSBkZWZpbmVkIGluIGNrY2RlYi5oOiBDQVJfT04sIENBUl9PRkYsIENBUl9BVVRPLgorICAg ICAgICAgIHR0b3BlbigpLCB0dHBrdCgpLCBhbmQgdHR2dCgpIHVzZSB0aGlzIHZhcmlhYmxlIHdo ZW4gZGVjaWRpbmcKKyAgICAgICAgICBob3cgdG8gb3BlbiB0aGUgdHR5IGRldmljZSBhbmQgd2hh dCBtb2RlcyB0byBzZWxlY3QuIFRoZQorICAgICAgICAgIG1lYW5pbmdzIGFyZSB0aGVzZToKKwor ICAgQ0FSX09GRjogSWdub3JlIGNhcnJpZXIgYXQgYWxsIHRpbWVzLgorICAgQ0FSX09OOiBSZXF1 aXJlIGNhcnJpZXIgYXQgYWxsIHRpbWVzLCBleGNlcHQgd2hlbiBkaWFsaW5nLiBUaGlzIG1lYW5z LAorICAgZm9yIGV4YW1wbGUsIHRoYXQgdHRvcGVuKCkgY291bGQgaGFuZyBmb3JldmVyIHdhaXRp bmcgZm9yIGNhcnJpZXIgaWYgaXQKKyAgIGlzIG5vdCBwcmVzZW50LgorICAgQ0FSX0FVVE86IElm IHRoZSBtb2RlbSB0eXBlIGlzIHplcm8gKGkuZS4gdGhlIGNvbm5lY3Rpb24gaXMgZGlyZWN0KSwK KyAgIHRoaXMgaXMgdGhlIHNhbWUgYXMgQ0FSX09GRi4gSWYgdGhlIG1vZGVtIHR5cGUgaXMgcG9z aXRpdmUsIHRoZW4gaGVlZAorICAgY2FycmllciBkdXJpbmcgQ09OTkVDVCAodHR2dCBtb2RlKSwg YnV0IGlnbm9yZSBpdCBhdCBvdGhlciB0aW1lcworICAgKHBhY2tldCBtb2RlLCBkdXJpbmcgU0VU IExJTkUsIGV0YykuIENvbXBhdGlibGUgd2l0aCBwcmUtNUEgdmVyc2lvbnMgb2YKKyAgIEMtS2Vy bWl0LiBUaGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjYXJyaWVyIG1vZGUuCisKKyAgICAgICAg ICBLZXJtaXQncyBESUFMIGNvbW1hbmQgaWdub3JlcyB0aGUgY2FycmllciBzZXR0aW5nLCBidXQg dHRvcGVuKCksCisgICAgICAgICAgdHR2dCgpLCBhbmQgdHRwa3QoKSBhbGwgaG9ub3IgdGhlIGNh cnJpZXIgb3B0aW9uIGluIGVmZmVjdCBhdAorICAgICAgICAgIHRoZSB0aW1lIHRoZXkgYXJlIGNh bGxlZC4gTm9uZSBvZiB0aGlzIGFwcGxpZXMgdG8gcmVtb3RlIG1vZGUKKyAgICAgICAgICAodGhl IHR0eSBkZXZpY2UgaXMgdGhlIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsKSBvciB0byBuZXR3 b3JrCisgICAgICAgICAgaG9zdCBjb25uZWN0aW9ucyAobW9kZW0gdHlwZSBpcyBuZWdhdGl2ZSku CisKKyAgIGludAorICAgICAgICAgIHR0c25kYigpCisgICAgICAgICAgU2VuZHMgYSBCUkVBSyBz aWduYWwgb24gdGhlIHR0eSBkZXZpY2UuIE9uIGEgcmVhbCB0dHkgZGV2aWNlLAorICAgICAgICAg IHNlbmQgYSByZWFsIEJSRUFLIGxhc3RpbmcgYXBwcm94aW1hdGVseSAyNzUgbWlsbGlzZWNvbmRz LiBJZgorICAgICAgICAgIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBzaW11bGF0ZSBhIEJSRUFLIGJ5 IChmb3IgZXhhbXBsZSkgZHJvcHBpbmcKKyAgICAgICAgICBkb3duIHNvbWUgdmVyeSBsb3cgYmF1 ZCByYXRlLCBsaWtlIDUwLCBhbmQgc2VuZGluZyBhIGJ1bmNoIG9mCisgICAgICAgICAgbnVsbCBj aGFyYWN0ZXJzLiBPbiBhIG5ldHdvcmsgY29ubmVjdGlvbiwgZG8gdGhlIGFwcHJvcHJpYXRlCisg ICAgICAgICAgbmV0d29yayBwcm90b2NvbCBmb3IgQlJFQUsuIFJldHVybnM6CisgICAgICAgICAg IC0xOiBvbiBlcnJvci4KKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIGludAorICAg ICAgICAgIHR0c25kbGIoKQorICAgICAgICAgIExpa2UgdHRzbmRiKCksIGJ1dCBzZW5kcyBhICJM b25nIEJSRUFLIiAoYXBwcm94IDEuNSBzZWNvbmRzKS4KKyAgICAgICAgICBGb3IgbmV0d29yayBj b25uZWN0aW9ucywgaXQgaXMgaWRlbnRpY2FsIHRvIHR0c25kYigpLiBDdXJyZW50bHksCisgICAg ICAgICAgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgaWYgQ0tfTEJSSyBpcyBkZWZpbmVkIChh cyBpdCBpcyBmb3IKKyAgICAgICAgICBVTklYIGFuZCBWTVMpLgorCisgICBpbnQKKyAgICAgICAg ICB0dHNzcGQoY3BzKSBpbnQgY3BzOworICAgICAgICAgIEZvciBzZXJpYWwgZGV2aWNlcyBvbmx5 LCBzZXQgdGhlIGRldmljZSB0cmFuc21pc3Npb24gc3BlZWQgdG8KKyAgICAgICAgICAobm90ZSBj YXJlZnVsbHkpIFRFTiBUSU1FUyB0aGUgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBpcyBpbgorICAg ICAgICAgIGNoYXJhY3RlcnMgcGVyIHNlY29uZCwgYnV0IHRyYW5zbWlzc2lvbiBzcGVlZHMgYXJl IGluIGJpdHMgcGVyCisgICAgICAgICAgc2Vjb25kLiBjcHMgYXJlIHVzZWQgcmF0aGVyIHRoYW4g YnBzIGJlY2F1c2UgaGlnaCBzcGVlZHMgbGlrZQorICAgICAgICAgIDM4NDAwIGFyZSBub3QgZXhw cmVzc2libGUgaW4gYSAxNi1iaXQgaW50IGJ1dCBsb25ncyBjYW5ub3QgYmUKKyAgICAgICAgICB1 c2VkIGJlY2F1c2Uga2V5d29yZC10YWJsZSB2YWx1ZXMgYXJlIGludHMgYW5kIG5vdCBsb25ncy4g SWYgdGhlCisgICAgICAgICAgYXJndW1lbnQgaXMgNywgdGhlbiB0aGUgYnBzIGlzIDc1LCBub3Qg NzAuIElmIHRoZSBhcmd1bWVudCBpcworICAgICAgICAgIDg4OCwgdGhpcyBpcyBhIHNwZWNpYWwg Y29kZSBmb3IgNzUvMTIwMCBzcGxpdC1zcGVlZCBvcGVyYXRpb24KKyAgICAgICAgICAoNzUgYnBz IG91dCwgMTIwMCBicHMgaW4pLiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZXJyb3IsIG1l YW5pbmcgdGhlIHJlcXVlc3RlZCBzcGVlZCBpcyBub3QgdmFsaWQgb3IKKyAgICAgICAgICBhdmFp bGFibGUuCisgICAgICAgICAgPj0wOiBvbiBzdWNjZXNzIChkb24ndCB0cnkgdG8gdXNlIHRoaXMg dmFsdWUgZm9yIGFueXRoaW5nKS4KKworICAgaW50CisgICAgICAgICAgdHR2dChzcGVlZCxmbG93 KSBsb25nIHNwZWVkOyBpbnQgZmxvdzsKKyAgICAgICAgICBQdXRzIHRoZSBjdXJyZW50bHkgb3Bl biB0dHkgZGV2aWNlIGludG8gdGhlIGFwcHJvcHJpYXRlIG1vZGVzCisgICAgICAgICAgZm9yIHRl cm1pbmFsIGVtdWxhdGlvbi4gVGhlIGFyZ3VtZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4KKyAg ICAgICAgICB0dHBrdCgpLiBTaWRlIGVmZmVjdHM6IHR0dnQoKSBzdG9yZXMgaXRzIGFyZ3VtZW50 cyBpbiBnbG9iYWwKKyAgICAgICAgICB2YXJpYWJsZXMsIGFuZCBzZXRzIGEgZmxhZyB0aGF0IGl0 IGhhcyBiZWVuIGNhbGxlZCBzbyB0aGF0CisgICAgICAgICAgc3Vic2VxdWVudCBjYWxscyBjYW4g YmUgaWdub3JlZCBzbyBsb25nIGFzIHRoZSBhcmd1bWVudHMgYXJlIHRoZQorICAgICAgICAgIHNh bWUgYXMgaW4gdGhlIGxhc3QgZWZmZWN0aXZlIGNhbGwuIE90aGVyIGZ1bmN0aW9ucywgc3VjaCBh cworICAgICAgICAgIHR0b3BlbigpLCB0dGNsb3NlKCksIHR0cmVzKCksIHR0dnQoKSwgZXRjLCB0 aGF0IGNoYW5nZSB0aGUgdHR5CisgICAgICAgICAgZGV2aWNlIGluIGFueSB3YXkgbXVzdCB1bnNl dCB0aGlzIGZsYWcuIEluIFVOSVggS2VybWl0LCB0aGlzCisgICAgICAgICAgZmxhZyBpcyBjYWxs ZWQgdHZ0ZmxnLgorCisgICBpbnQKKyAgICAgICAgICB0dHdtZG0obWRtc2lnLHRpbW8pIGludCBt ZG1zaWcsIHRpbW87CisgICAgICAgICAgV2FpdHMgdXAgdG8gdGltbyBzZWNvbmRzIGZvciBhbGwg b2YgdGhlIGdpdmVuIG1vZGVtIHNpZ25hbHMgdG8KKyAgICAgICAgICBhcHBlYXIuIG1kbXNpZyBp cyBhIGJpdCBtYXNrLCBpbiB3aGljaCBhIGJpdCBpcyBvbiAoMSkgb3Igb2ZmCisgICAgICAgICAg KDApIGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIHNpZ25hbCBpcyB0byBi ZQorICAgICAgICAgIHdhaXRlZCBmb3IuIFRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQgaW4gY2tj ZGViLmg6CisgICAgICAgICAgICBCTV9DVFMgKGJpdCAwKSBtZWFucyB3YWl0IGZvciBDbGVhciBU byBTZW5kCisgICAgICAgICAgICBCTV9EU1IgKGJpdCAxKSBtZWFucyB3YWl0IGZvciBEYXRhIFNl dCBSZWFkeQorICAgICAgICAgICAgQk1fRENEIChiaXQgMikgbWVhbnMgd2FpdCBmb3IgQ2Fycmll ciBEZXRlY3QKKyAgICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAtMzogTm90IGltcGxlbWVu dGVkLgorICAgICAgICAgICAtMjogVGhpcyBsaW5lIGRvZXMgbm90IGhhdmUgbW9kZW0gY29udHJv bC4KKyAgICAgICAgICAgLTE6IFRpbWVvdXQ6IHRpbWUgbGltaXQgZXhjZWVkZWQgYmVmb3JlIGFs bCBzaWduYWxzIHdlcmUKKyAgICAgICAgICBkZXRlY3RlZC4KKyAgICAgICAgICAgIDE6IFN1Y2Nl c3MuCisKKyAgIGludAorICAgICAgICAgIHR0eGluKG4sYnVmKSBpbnQgbjsgQ0hBUiAqYnVmOwor ICAgICAgICAgIFJlYWRzIHggY2hhcmFjdGVycyBmcm9tIHRoZSB0dHkgZGV2aWNlIGludG8gdGhl IHNwZWNpZmllZCBidWYsCisgICAgICAgICAgc3RyaXBwaW5nIHBhcml0eSBpZiBwYXJpdHkgaXMg bm90IG5vbmUuIFRoaXMgY2FsbCB3YWl0cyBmb3JldmVyLAorICAgICAgICAgIHRoZXJlIGlzIG5v IHRpbWVvdXQuIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgY2FsbGVkIG9ubHkKKyAg ICAgICAgICB3aGVuIHlvdSBrbm93IHRoYXQgYXQgbGVhc3QgeCBjaGFyYWN0ZXJzIGFyZSB3YWl0 aW5nIHRvIGJlIHJlYWQKKyAgICAgICAgICAoYXMgZGV0ZXJtaW5lZCwgZm9yIGV4YW1wbGUsIGJ5 IHR0Y2hrKCkpLiBUaGlzIGZ1bmN0aW9uIHNob3VsZAorICAgICAgICAgIHVzZSB0aGUgc2FtZSBi dWZmZXIgYXMgdHRpbmMoKS4KKworICAgaW50CisgICAgICAgICAgdHhidWZyKHRpbW8pIGludCB0 aW1vOworICAgICAgICAgIFJlYWRzIGNoYXJhY3RlcnMgaW50byB0aGUgaW50ZXJuYWwgY29tbXVu aWNhdGlvbnMgaW5wdXQgYnVmZmVyLgorICAgICAgICAgIHRpbW8gaXMgYSB0aW1lb3V0IGludGVy dmFsLCBpbiBzZWNvbmRzLiAwIG1lYW5zIG5vIHRpbWVvdXQsIHdhaXQKKyAgICAgICAgICBmb3Jl dmVyLiBDYWxsZWQgYnkgdHRpbmMoKSAoYW5kIHBvc3NpYmx5IHR0eGluKCkgYW5kIHR0aW5sKCkp CisgICAgICAgICAgd2hlbiB0aGUgY29tbXVuaWNhdGlvbnMgaW5wdXQgYnVmZmVyIGlzIGVtcHR5 LiBUaGUgYnVmZmVyIHNob3VsZAorICAgICAgICAgIGJlIGNhbGxlZCB0dHhidWZbXSwgaXRzIGxl bmd0aCBpcyBkZWZpbmVkIGJ5IHRoZSBzeW1ib2wgVFhCVUZMLgorICAgICAgICAgIFRoZSBnbG9i YWwgdmFyaWFibGUgdHhidWZuIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhdmFpbGFibGUK KyAgICAgICAgICB0byBiZSByZWFkIGZyb20gdHR4YnVmW10sIGFuZCB0eGJ1ZnAgaXMgdGhlIGlu ZGV4IG9mIHRoZSBuZXh0CisgICAgICAgICAgY2hhcmFjdGVyIHRvIGJlIHJlYWQuIFNob3VsZCBu b3QgYmUgY2FsbGVkIGlmIHR4YnVmbiA+IDAsIGluCisgICAgICAgICAgd2hpY2ggY2FzZSB0aGUg YnVmZmVyIGRvZXMgbm90IG5lZWQgcmVmaWxsaW5nLiBUaGlzIHJvdXRpbmUKKyAgICAgICAgICBy ZXR1cm5zOgorICAgICAgICAgICAgLTI6IENvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QKKyAgICAg ICAgICAgIC0xOiBUaW1lb3V0CisgICAgICAgICAgPj0wOiBBIGNoYXJhY3RlciAoMCAtIDI1NSkg T24gc3VjY2VzcywgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0CisgICAgICAgICAgd2FzIHJlYWQs IHdpdGggdGhlIHZhcmlhYmxlcyB0eGJ1Zm4gYW5kIHR4YnVmcCBzZXQgYXBwcm9wcmlhdGVseQor ICAgICAgICAgIGZvciBhbnkgcmVtYWluaW5nIGNoYXJhY3RlcnMuCisgICAgICAgICAgTk9URTog Q3VycmVudGx5IHRoaXMgcm91dGluZSBpcyB1c2VkIGludGVybmFsbHkgb25seSBieSB0aGUgVU5J WAorICAgICAgICAgIGFuZCBWTVMgdmVyc2lvbnMuIFRoZSBhaW0gaXMgdG8gbWFrZSBpdCBhdmFp bGFibGUgdG8gYWxsCisgICAgICAgICAgdmVyc2lvbnMgc28gdGhlcmUgaXMgb25lIHNpbmdsZSBj b2hlcmVudCBhbmQgZWZmaWNpZW50IHdheSBvZgorICAgICAgICAgIHJlYWRpbmcgZnJvbSB0aGUg Y29tbXVuaWNhdGlvbnMgZGV2aWNlIG9yIG5ldHdvcmsuCisKKzQuRS4yLjYuIE1pc2NlbGxhbmVv dXMgc3lzdGVtLWRlcGVuZGVudCBmdW5jdGlvbnMKKworICAgVk9JRAorICAgICAgICAgIHp0aW1l KHMpIGNoYXIgKipzOworICAgICAgICAgIFJldHVybnMgYSBwb2ludGVyLCBzLCB0byB0aGUgY3Vy cmVudCBkYXRlLWFuZC10aW1lIHN0cmluZyBpbiBzLgorICAgICAgICAgIFRoaXMgc3RyaW5nIG11 c3QgYmUgaW4gdGhlIGZpeGVkLWZpZWxkIGZvcm1hdCBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAg ICB0aGUgQyBydW50aW1lIGFzY3RpbWUoKSBmdW5jdGlvbiwgbGlrZTogIlN1biBTZXAgMTYgMTM6 MjM6NDUKKyAgICAgICAgICAxOTczXG4iIHNvIHRoYXQgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9u IGNhbiBleHRyYWN0IHRoZQorICAgICAgICAgIGRpZmZlcmVudCBmaWVsZHMuIFRoZSBwb2ludGVy IHZhbHVlIGlzIGZpbGxlZCBpbiBieSB6dGltZSwgYW5kCisgICAgICAgICAgdGhlIGRhdGEgaXQg cG9pbnRzIHRvIGlzIG5vdCBzYWZlLCBzbyBzaG91bGQgYmUgY29waWVkIHRvIGEgc2FmZQorICAg ICAgICAgIHBsYWNlIGJlZm9yZSB1c2UuIHp0aW1lKCkgaGFzIG5vIHJldHVybiB2YWx1ZS4gQXMg YSBzaWRlIGVmZmVjdCwKKyAgICAgICAgICB0aGlzIHJvdXRpbmUgY2FuIGFsc28gZmlsbCBpbiB0 aGUgZm9sbG93aW5nIHR3byBleHRlcm5hbAorICAgICAgICAgIHZhcmlhYmxlcyAod2hpY2ggbXVz dCBiZSBkZWZpbmVkIGluIHRoZSBzeXN0ZW0tZGVwZW5kZW50IG1vZHVsZXMKKyAgICAgICAgICBm b3IgZWFjaCBwbGF0Zm9ybSk6CisgICAgICAgICAgICBsb25nIHp0dXNlYzogRnJhY3Rpb24gb2Yg c2Vjb25kcyBvZiBjbG9jayB0aW1lLCBtaWNyb3NlY29uZHMuCisgICAgICAgICAgICBsb25nIHp0 bXNlYzogRnJhY3Rpb24gb2Ygc2Vjb25kcyBvZiBjbG9jayB0aW1lLCBtaWxsaXNlY29uZHMuCisg ICAgICAgICAgSWYgdGhlc2UgdmFyaWFibGVzIGFyZSBub3Qgc2V0IGJ5IHpzdGltZSgpLCB0aGV5 IHJlbWFpbiBhdCB0aGVpcgorICAgICAgICAgIGluaXRpYWwgdmFsdWUgb2YgLTFMLgorCisgICBp bnQKKyAgICAgICAgICBndGltZXIoKQorICAgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgdmFs dWUgb2YgdGhlIGVsYXBzZWQgdGltZSBjb3VudGVyIGluIHNlY29uZHMKKyAgICAgICAgICAoc2Vl IHJ0aW1lciksIG9yIDAgb24gYW55IGtpbmQgb2YgZXJyb3IuCisKKyAgICNpZmRlZiBHRlRJTUVS CisgICAgICAgICAgQ0tGTE9BVAorICAgICAgICAgIGdmdGltZXIoKQorICAgICAgICAgIFJldHVy bnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGVsYXBzZWQgdGltZSBjb3VudGVyIGluCisgICAg ICAgICAgc2Vjb25kcywgYXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGNhcGFibGUgb2YgcmVw cmVzZW50aW5nIG5vdAorICAgICAgICAgIG9ubHkgd2hvbGUgc2Vjb25kcywgYnV0IGFsc28gdGhl IGZyYWN0aW9uYWwgcGFydCwgdG8gdGhlCisgICAgICAgICAgbWlsbGlzZWNvbmQgb3IgbWljcm9z ZWNvbmQgbGV2ZWwsIHdoYXRldmVyIHByZWNpc2lvbiBpcworICAgICAgICAgIGF2YWlsYWJsZS4g UmVxdWlyZXMgYSBmdW5jdGlvbiB0byBnZXQgdGltZXMgYXQgc3Vic2Vjb25kCisgICAgICAgICAg cHJlY2lzaW9uLCBhcyB3ZWxsIGFzIGZsb2F0aW5nLXBvaW50IHN1cHBvcnQuIFRoYXQncyB3aHkg aXQncworICAgICAgICAgICNpZmRlZidkLgorCisgICAjZW5kaWYgLyogR0ZUSU1FUiAqLworCisg ICBpbnQKKyAgICAgICAgICBtc2xlZXAobSkgaW50IG07CisgICAgICAgICAgU2xlZXBzIChwYXVz ZXMsIGRvZXMgbm90aGluZykgZm9yIG0gbWlsbGlzZWNvbmRzIChhIG1pbGxpc2Vjb25kCisgICAg ICAgICAgaXMgb25lIHRob3VzYW5kdGggb2YgYSBzZWNvbmQpLiBSZXR1cm5zOgorICAgICAgICAg ICAtMTogb24gZmFpbHVyZS4KKyAgICAgICAgICAgIDA6IG9uIHN1Y2Nlc3MuCisKKyAgIFZPSUQK KyAgICAgICAgICBydGltZXIoKQorICAgICAgICAgIFNldHMgdGhlIGVsYXBzZWQgdGltZSBjb3Vu dGVyIHRvIHplcm8uIElmIHlvdSB3YW50IHRvIHRpbWUgaG93CisgICAgICAgICAgbG9uZyBhbiBv cGVyYXRpb24gdGFrZXMsIGNhbGwgcnRpbWVyKCkgd2hlbiBpdCBzdGFydHMgYW5kIGd0aW1lcgor ICAgICAgICAgIHdoZW4gaXQgZW5kcy4gcnRpbWVyKCkgaGFzIG5vIHJldHVybiB2YWx1ZS4KKwor ICAgI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICBWT0lECisgICAgICAgICAgcmZ0aW1lcigpCisg ICAgICAgICAgU2V0cyB0aGUgZWxhcHNlZCB0aW1lIGNvdW50ZXIgdG8gemVyby4gSWYgeW91IHdh bnQgdG8gdGltZSBob3cKKyAgICAgICAgICBsb25nIGFuIG9wZXJhdGlvbiB0YWtlcywgY2FsbCBy ZnRpbWVyKCkgd2hlbiBpdCBzdGFydHMgYW5kCisgICAgICAgICAgZ2Z0aW1lciB3aGVuIGl0IGVu ZHMuIHJmdGltZXIoKSBoYXMgbm8gcmV0dXJuIHZhbHVlLiBOb3RlOgorICAgICAgICAgIHJmdGlt ZXIoKSBpcyB0byBiZSB1c2VkIHdpdGggZ2Z0aW1lcigpIGFuZCBydGltZXIoKSBpcyB0byBiZQor ICAgICAgICAgIHVzZWQgd2l0aCBndGltZXIoKS4gU2VlIHRoZSByZnRpbWVyKCkgZGVzY3JpcHRp b24uCisKKyAgICNlbmRpZiAvKiBHRlRJTUVSICovCisKKyAgIGludAorICAgICAgICAgIHN5c2lu aXQoKQorICAgICAgICAgIERvZXMgd2hhdGV2ZXIgbmVlZHMgZG9pbmcgdXBvbiBwcm9ncmFtIHN0 YXJ0LiBJbiBwYXJ0aWN1bGFyLCBpZgorICAgICAgICAgIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcg aW4gYW55IGtpbmQgb2YgcHJpdmlsZWdlZCBtb2RlLCB0dXJucyBvZmYKKyAgICAgICAgICB0aGUg cHJpdmlsZWdlcyAoc2VlIHByaXZfaW5pKCkpLiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24g ZXJyb3IuCisgICAgICAgICAgICAwOiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICBz eXNjbGVhbnVwKCkKKyAgICAgICAgICBEb2VzIHdoYXRldmVyIG5lZWRzIGRvaW5nIHVwb24gcHJv Z3JhbSBleGl0LiBSZXR1cm5zOgorICAgICAgICAgICAtMTogb24gZXJyb3IuCisgICAgICAgICAg ICAwOiBvbiBzdWNjZXNzLgorCisgICBpbnQKKyAgICAgICAgICBwc3VzcGVuZCgpCisgICAgICAg ICAgU3VzcGVuZHMgdGhlIEtlcm1pdCBwcm9jZXNzLCBwdXRzIGl0IGluIHRoZSBiYWNrZ3JvdW5k IHNvIGl0IGNhbgorICAgICAgICAgIGJlIGNvbnRpbnVlZCAoImZvcmVncm91bmRlZCIpIGxhdGVy LiBSZXR1cm5zOgorICAgICAgICAgICAtMTogaWYgdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9y dGVkLgorICAgICAgICAgICAgMDogb24gc3VjY2Vzcy4KKworICAgWyBbMTM2XUNvbnRlbnRzIF0g WyBbMTM3XUMtS2VybWl0IF0gWyBbMTM4XUtlcm1pdCBIb21lIF0KKworNC5GLiBHcm91cCBGOiBO ZXR3b3JrIFN1cHBvcnQKKworICAgQXMgb2YgdmVyc2lvbiA1QSwgQy1LZXJtaXQgaW5jbHVkZXMg c3VwcG9ydCBmb3Igc2V2ZXJhbCBuZXR3b3Jrcy4KKyAgIE9yaWdpbmFsbHksIHRoaXMgd2FzIGp1 c3Qgd29ya2VkIGludG8gdGhlIHR0b3BlbigpLCB0dGNsb3MoKSwgdHRpbmMoKSwKKyAgIHR0aW5s KCksIGFuZCBzaW1pbGFyIHJvdXRpbmVzIGluIFsxMzldY2t1dGlvLmMuIEJ1dCB0aGlzIG1hZGUg aXQKKyAgIGltcG9zc2libGUgdG8gc2hhcmUgdGhpcyBjb2RlIHdpdGggbm9uLVVOSVggdmVyc2lv bnMsIGxpa2UgVk1TLCBBT1MvVlMsCisgICBPUy8yLCBldGMuIFNvIGFzIG9mIGVkaXQgMTY4LCBu ZXR3b3JrIGNvZGUgaGFzIGJlZW4gc2VwYXJhdGVkIG91dCBpbnRvCisgICBpdHMgb3duIG1vZHVs ZSBhbmQgaGVhZGVyIGZpbGUsIGNrY25ldC5jIGFuZCBja2NuZXQuaDoKKworICAgICBbMTQwXWNr Y25ldC5oOiBOZXR3b3JrLXJlbGF0ZWQgc3ltYm9sIGRlZmluaXRpb25zLgorICAgICBbMTQxXWNr Y25ldC5jOiBOZXR3b3JrIGkvbyAoVENQL0lQLCBYLjI1LCBldGMpLCBzaGFyZWQgYnkgbW9zdAor ICAgcGxhdGZvcm1zLgorICAgICBbMTQyXWNrbG5ldC5jOiBOZXR3b3JrIGkvbyAoVENQL0lQLCBY LjI1LCBldGMpIHNwZWNpZmljIHRvIFN0cmF0dXMKKyAgIFZPUy4KKworICAgVGhlIHJvdXRpbmVz IGFuZCB2YXJpYWJsZXMgaW4gdGhlc2UgbW9kdWxlcyBmYWxsIGludG8gdHdvIGNhdGVnb3JpZXM6 CisKKyAgICAxLiBTdXBwb3J0IGZvciBzcGVjaWZpYyBuZXR3b3JrIHBhY2thZ2VzIGxpa2UgU3Vu TGluayBYLjI1IGFuZCBUR1YKKyAgICAgICBNdWx0aU5ldCwgYW5kOgorICAgIDIuIHN1cHBvcnQg Zm9yIHNwZWNpZmljIG5ldHdvcmsgdmlydHVhbCB0ZXJtaW5hbCBwcm90b2NvbHMgbGlrZSBDQ0lU VAorICAgICAgIFguMyBhbmQgVENQL0lQIFRlbG5ldC4KKworICAgQ2F0ZWdvcnkgKDEpIGZ1bmN0 aW9ucyBhcmUgYW5hbG9ncyB0byB0aGUgdHQqKCkgZnVuY3Rpb25zLCBhbmQgaGF2ZQorICAgbmFt ZXMgbGlrZSBuZXRvcGVuLCBuZXRjbG9zLCBuZXR0aW5jLCBldGMuIEdyb3VwIEEtRCBtb2R1bGVz IGRvIG5vdAorICAgKGFuZCBtdXN0IG5vdCkga25vdyBhbnl0aGluZyBhYm91dCB0aGVzZSBmdW5j dGlvbnMgLS0gdGhleSBjb250aW51ZSB0bworICAgY2FsbCB0aGUgb2xkIEdyb3VwIEUgZnVuY3Rp b25zICh0dG9wZW4sIHR0aW5jLCBldGMpLiBDYXRlZ29yeSAoMikKKyAgIGZ1bmN0aW9ucyBhcmUg cHJvdG9jb2wgc3BlY2lmaWMgYW5kIGhhdmUgbmFtZXMgcHJlZml4ZWQgYnkgYSBwcm90b2NvbAor ICAgaWRlbnRpZmllciwgbGlrZSB0biBmb3IgdGVsbmV0IHgyNSBmb3IgWC4yNS4KKworICAgY2tj bmV0LmggY29udGFpbnMgcHJvdG90eXBlcyBmb3IgYWxsIHRoZXNlIGZ1bmN0aW9ucywgYXMgd2Vs bCBhcyBzeW1ib2wKKyAgIGRlZmluaXRpb25zIGZvciBuZXR3b3JrIHR5cGVzLCBwcm90b2NvbHMs IGFuZCBuZXR3b3JrLSBhbmQgcHJvdG9jb2wtCisgICBzcGVjaWZpYyBzeW1ib2xzLCBhcyB3ZWxs IGFzICNpbmNsdWRlcyBmb3IgdGhlIGhlYWRlciBmaWxlcyBuZWNlc3NhcnkKKyAgIGZvciBlYWNo IG5ldHdvcmsgYW5kIHByb3RvY29sLgorCisgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUg dG8gYmUgcHJvdmlkZWQgZm9yIG5ldHdvcmtzIHRoYXQgZG8gbm90IHVzZQorICAgbm9ybWFsIHN5 c3RlbSBpL28gKG9wZW4sIHJlYWQsIHdyaXRlLCBjbG9zZSk6CisKKyAgIGludAorICAgICAgICAg IG5ldG9wZW4oKQorICAgICAgICAgIFRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0dG9wZW4oKSB3 aGVuIGEgbmV0d29yayBjb25uZWN0aW9uIGlzCisgICAgICAgICAgcmVxdWVzdGVkLiBDYWxsaW5n IGNvbnZlbnRpb25zIGFuZCBwdXJwb3NlIHNhbWUgYXMgR3JvdXAgRQorICAgICAgICAgIHR0b3Bl bigpLgorCisgICBpbnQKKyAgICAgICAgICBuZXRjbG9zKCkKKyAgICAgICAgICBUbyBiZSBjYWxs ZWQgZnJvbSB3aXRoaW4gdHRjbG9zKCkgd2hlbiBhIG5ldHdvcmsgY29ubmVjdGlvbiBpcworICAg ICAgICAgIGJlaW5nIGNsb3NlZC4gQ2FsbGluZyBjb252ZW50aW9ucyBhbmQgcHVycG9zZSBzYW1l IGFzIEdyb3VwIEUKKyAgICAgICAgICB0dGNsb3MoKS4KKworICAgaW50CisgICAgICAgICAgbmV0 dGNoaygpCisgICAgICAgICAgVG8gYmUgY2FsbGVkIGZyb20gd2l0aGluIHR0Y2hrKCkuIENhbGxp bmcgY29udmVudGlvbnMgYW5kCisgICAgICAgICAgcHVycG9zZSBzYW1lIGFzIEdyb3VwIEUgdHRj aGsoKS4KKworICAgaW50CisgICAgICAgICAgbmV0Zmx1aSgpCisgICAgICAgICAgVG8gYmUgY2Fs bGVkIGZyb20gd2l0aGluIHR0Zmx1aSgpLiBDYWxsaW5nIGNvbnZlbnRpb25zIGFuZAorICAgICAg ICAgIHB1cnBvc2Ugc2FtZSBhcyBHcm91cCBFIHR0Zmx1aSgpLgorCisgICBpbnQKKyAgICAgICAg ICBuZXRicmVhaygpCisgICAgICAgICAgVG8gc2VuZCBhIG5ldHdvcmsgYnJlYWsgKGF0dGVudGlv bikgc2lnbmFsLiBDYWxsaW5nIGNvbnZlbnRpb25zCisgICAgICAgICAgYW5kIHB1cnBvc2Ugc2Ft ZSBhcyBHcm91cCBFIHR0c25kYnJrKCkuCisKKyAgIGludAorICAgICAgICAgIG5ldGluYygpCisg ICAgICAgICAgVG8gZ2V0IGEgY2hhcmFjdGVyIGZyb20gdGhlIG5ldHdvcmsuIENhbGxpbmcgY29u dmVudGlvbnMgc2FtZSBhcworICAgICAgICAgIEdyb3VwIEUgdHRzbmRicmsoKS4KKworICAgaW50 CisgICAgICAgICAgbmV0dG9jKCkKKyAgICAgICAgICBTZW5kIGEgImNoYXJhY3RlciIgKGJ5dGUp IHRvIHRoZSBuZXR3b3JrLiBDYWxsaW5nIGNvbnZlbnRpb25zCisgICAgICAgICAgc2FtZSBhcyBH cm91cCBFIHR0b2MoKS4KKworICAgaW50CisgICAgICAgICAgbmV0dG9sKCkKKyAgICAgICAgICBT ZW5kIGEgImxpbmUiIChzZXF1ZW5jZSBvZiBieXRlcykgdG8gdGhlIG5ldHdvcmsuIENhbGxpbmcK KyAgICAgICAgICBjb252ZW50aW9ucyBzYW1lIGFzIEdyb3VwIEUgdHRvbCgpLgorCisgICBDb25j ZWl2YWJseSwgc29tZSBzeXN0ZW1zIHN1cHBvcnQgbmV0d29yayBjb25uZWN0aW9ucyBzaW1wbHkg YnkgbGV0dGluZworICAgeW91IG9wZW4gYSBkZXZpY2Ugb2YgYSBjZXJ0YWluIG5hbWUgYW5kIGxl dHRpbmcgeW91IGRvIGkvbyB0byBpdC4KKyAgIE90aGVycyAobGlrZSB0aGUgQmVya2VsZXkgc29j a2V0cyBUQ1AvSVAgbGlicmFyeSBvbiBVTklYKSByZXF1aXJlIHlvdQorICAgdG8gb3BlbiB0aGUg Y29ubmVjdGlvbiBpbiBhIHNwZWNpYWwgd2F5LCBidXQgdGhlbiBkbyBub3JtYWwgaS9vIChyZWFk LAorICAgd3JpdGUpLiBJbiBzdWNoIGEgY2FzZSwgeW91IHdvdWxkIHVzZSBuZXRvcGVuKCksIGJ1 dCB5b3Ugd291bGQgbm90IHVzZQorICAgbmV0dGluYywgbmV0dG9jLCBldGMuCisKKyAgIFZNUyBU Q1AvSVAgcHJvZHVjdHMgaGF2ZSB0aGVpciBvd24gc2V0IG9mIGZ1bmN0aW9ucyBmb3IgYWxsIG5l dHdvcmsKKyAgIG9wZXJhdGlvbnMsIHNvIGluIHRoYXQgY2FzZSB0aGUgZnVsbCByYW5nZSBvZiBu ZXR4eHgoKSBmdW5jdGlvbnMgaXMKKyAgIHVzZWQuCisKKyAgIFRoZSB0ZWNobmlxdWUgaXMgdG8g cHV0IGEgdGVzdCBpbiBlYWNoIGNvcnJlc3BvbmRpbmcgdHR4eHgoKSBmdW5jdGlvbgorICAgdG8g c2VlIGlmIGEgbmV0d29yayBjb25uZWN0aW9uIGlzIGFjdGl2ZSAob3IgaXMgYmVpbmcgcmVxdWVz dGVkKSwgdGVzdAorICAgZm9yIHdoaWNoIGtpbmQgb2YgbmV0d29yayBpdCBpcywgYW5kIGlmIG5l Y2Vzc2FyeSByb3V0ZSB0aGUgY2FsbCB0byB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgbmV0eHh4KCkg ZnVuY3Rpb24uIFRoZSBuZXR4eHgoKSBmdW5jdGlvbiBtdXN0IGFsc28KKyAgIGNvbnRhaW4gY29k ZSB0byB0ZXN0IGZvciB0aGUgbmV0d29yayB0eXBlLCB3aGljaCBpcyBhdmFpbGFibGUgdmlhIHRo ZQorICAgZ2xvYmFsIHZhcmlhYmxlIHR0bmV0LgorCisgICBbIFsxNDNdQ29udGVudHMgXSBbIFsx NDRdQy1LZXJtaXQgXSBbIFsxNDVdS2VybWl0IEhvbWUgXQorCis0LkYuMS4gVGVsbmV0IFByb3Rv Y29sCisKKyAgIChUaGlzIHNlY3Rpb24gbmVlZHMgYSBncmVhdCBkZWFsIG9mIHVwZGF0aW5nLi4u KQorCisgICBBcyBvZiBlZGl0IDE5NSwgVGVsbmV0IHByb3RvY29sIGlzIHNwbGl0IG91dCBpbnRv IGl0cyBvd24gZmlsZXMsIHNpbmNlCisgICBpdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gcmVtb3Rl IG1vZGUsIHdoaWNoIGRvZXMgbm90IGhhdmUgYSBuZXR3b3JrCisgICBjb25uZWN0aW9uOgorCisg ICAgICBbMTQ2XWNrY3RlbC5oOiBUZWxuZXQgcHJvdG9jb2wgc3ltYm9sIGRlZmluaXRpb25zLgor ICAgICAgWzE0N11ja2N0ZWwuYzogVGVsbmV0IHByb3RvY29sLgorCisgICBUaGUgVGVsbmV0IHBy b3RvY29sIGlzIHN1cHBvcnRlZCBieSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhbmQKKyAgIHJv dXRpbmVzOgorCisgICBpbnQgdG5faW5pdAorICAgICAgICAgIE5vbnplcm8gaWYgdGVsbmV0IHBy b3RvY29sIGluaXRpYWxpemVkLCB6ZXJvIG90aGVyd2lzZS4KKworICAgaW50CisgICAgICAgICAg dG5faW5pdCgpCisgICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgdGVsbmV0IHByb3RvY29sIChzZW5k IGluaXRpYWwgb3B0aW9ucykuCisKKyAgIGludAorICAgICAgICAgIHRuX3NvcHQoKQorICAgICAg ICAgIFNlbmQgYSB0ZWxuZXQgb3B0aW9uLgorCisgICBpbnQKKyAgICAgICAgICB0bl9kb29wKCkK KyAgICAgICAgICBSZWNlaXZlIGFuZCBhY3Qgb24gYSB0ZWxuZXQgb3B0aW9uIGZyb20gdGhlIHJl bW90ZS4KKworICAgaW50CisgICAgICAgICAgdG5fc3R0eXAoKQorICAgICAgICAgIFNlbmQgdGVy bWluYWwgdHlwZSB1c2luZyB0ZWxuZXQgcHJvdG9jb2wuCisKKzQuRi4yLiBGVFAgUHJvdG9jb2wK KworICAgKFRvIGJlIGZpbGxlZCBpbi4uLikgU2VlIHRoZSBbMTQ4XXNvdXJjZSBmaWxlCisKKzQu Ri4zLiBIVFRQIFByb3RvY29sCisKKyAgIChUbyBiZSBmaWxsZWQgaW4uLi4pCisKKzQuRi40LiBY LjI1IE5ldHdvcmtzCisKKyAgIFRoZXNlIHJvdXRpbmVzIHdlcmUgd3JpdHRlbiBTdW5MaW5rIFgu MjUgYW5kIGhhdmUgc2luY2UgYmVlbiBhZGFwdGVkIHRvCisgICBhdCBsZWFzdCBvbiBvbmUgb3Ro ZXI6IElCTSBBSVhMaW5rL1guMjUuCisKKyAgIGludAorICAgICAgICAgIHgyNWRpYWcoKQorICAg ICAgICAgIFJlYWRzIGFuZCBwcmludHMgWC4yNSBkaWFnbm9zdGljcworCisgICBpbnQKKyAgICAg ICAgICB4MjVvb2JoKCkKKyAgICAgICAgICBYLjI1IG91dCBvZiBiYW5kIHNpZ25hbCBoYW5kbGVy CisKKyAgIGludAorICAgICAgICAgIHgyNWludHIoKQorICAgICAgICAgIFNlbmRzIFguMjUgaW50 ZXJydXB0IHBhY2tldAorCisgICBpbnQKKyAgICAgICAgICB4MjVyZXNldCgpCisgICAgICAgICAg UmVzZXRzIFguMjUgdmlydHVhbCBjaXJjdWl0CisKKyAgIGludAorICAgICAgICAgIHgyNWNsZWFy KCkKKyAgICAgICAgICBDbGVhciBYLjI1IHZpcnR1YWwgY2lyY3VpdAorCisgICBpbnQKKyAgICAg ICAgICB4MjVzdGF0KCkKKyAgICAgICAgICBYLjI1IHN0YXR1cworCisgICBpbnQKKyAgICAgICAg ICBzZXRxYml0KCkKKyAgICAgICAgICBTZXRzIFguMjUgUS1iaXQKKworICAgaW50CisgICAgICAg ICAgcmVzZXRxYml0KCkKKyAgICAgICAgICBSZXNldHMgWC4yNSBRLWJpdAorCisgICBpbnQKKyAg ICAgICAgICB4MjV4aW4oKQorICAgICAgICAgIFJlYWRzIG4gY2hhcmFjdGVycyBmcm9tIFguMjUg Y2lyY3VpdC4KKworICAgaW50CisgICAgICAgICAgeDI1aW5sKCkKKyAgICAgICAgICBSZWFkIGEg S2VybWl0IHBhY2tldCBmcm9tIFguMjUgY2lyY3VpdC4KKworICAgWyBbMTQ5XUNvbnRlbnRzIF0g WyBbMTUwXUMtS2VybWl0IF0gWyBbMTUxXUtlcm1pdCBIb21lIF0KKworNC5GLjUuIEFkZGluZyBO ZXcgTmV0d29yayBUeXBlcworCisgICBFeGFtcGxlOiBBZGRpbmcgc3VwcG9ydCBmb3IgSUJNIFgu MjUgYW5kIEhld2xldHQgUGFja2FyZCBYLjI1LiBGaXJzdCwKKyAgIGFkZCBuZXcgbmV0d29yayB0 eXBlIHN5bWJvbHMgZm9yIGVhY2ggb25lLiBUaGVyZSBhcmUgYWxyZWFkeSBzb21lCisgICBuZXR3 b3JrIHR5cGVzIGRlZmluZWQgZm9yIG90aGVyIFguMjUgcGFja2FnZXM6CisKKyAgTkVUX1NYMjUg aXMgdGhlIG5ldHdvcmstdHlwZSBJRCBmb3IgU3VuTGluayBYLjI1LgorICBORVRfVlgyNSBpcyB0 aGUgbmV0d29yay10eXBlIElEIGZvciBWT1MgWC4yNS4KKworICAgU28gZmlyc3QgeW91IHNob3Vs ZCBuZXcgc3ltYm9scyBmb3IgdGhlIG5ldyBuZXR3b3JrIHR5cGVzLCBnaXZpbmcgdGhlbQorICAg dGhlIG5leHQgbnVtYmVycyBpbiB0aGUgc2VxdWVuY2UsIGUuZy46CisKKyNkZWZpbmUgTkVUX0hY MjUgMTEgICAgICAgICAgICAgICAgICAgICAvKiBIZXdsZXR0LVBhY2thcmQgWC4yNSAqLworI2Rl ZmluZSBORVRfSVgyNSAxMiAgICAgICAgICAgICAgICAgICAgIC8qIElCTSBYLjI1ICovCisKKyAg IFRoaXMgaXMgaW4gY2tjbmV0LmguCisKKyAgIFRoZW4gd2UgbmVlZCBzeW1ib2xzIHRvIHNheSB0 aGF0IHdlIGFyZSBhY3R1YWxseSBjb21waWxpbmcgaW4gdGhlIGNvZGUKKyAgIGZvciB0aGVzZSBw bGF0Zm9ybXMuIFRoZXNlIHdvdWxkIGJlIGRlZmluZWQgb24gdGhlIGNjIGNvbW1hbmQgbGluZToK KworICAtRElCTVgyNSAgKGZvciBJQk0pCisgIC1ESFBYMjUgICAoZm9yIEhQKQorCisgICBTbyB3 ZSBjYW4gYnVpbGQgQy1LZXJtaXQgdmVyc2lvbnMgZm9yIEFJWCBhbmQgSFAtVVggYm90aCB3aXRo IGFuZAorICAgd2l0aG91dCBYLjI1IHN1cHBvcnQgKHNpbmNlIG5vdCBhbGwgQUlYIGFuZCBJQk0g c3lzdGVtcyBoYXZlIHRoZSBuZWVkZWQKKyAgIGxpYnJhcmllcywgYW5kIHNvIGFuIGV4ZWN1dGFi bGUgdGhhdCB3YXMgbGlua2VkIHdpdGggdGhlbSBtaWdodCBubworICAgbG9hZCkuCisKKyAgIFRo ZW4gaW4gY2tjbmV0Lmg6CisKKyNpZmRlZiBJQk1YMjUKKyNkZWZpbmUgQU5ZWDI1CisjZW5kaWYg LyogSUJNWDI1ICovCisKKyNpZmRlZiBIUFgyNQorI2RlZmluZSBBTllYMjUKKyNlbmRpZiAvKiBI UFgyNSAqLworCisgICBBbmQgdGhlbiB1c2UgQU5ZWDI1IGZvciBjb2RlIHRoYXQgaXMgY29tbW9u IHRvIGFsbCBvZiB0aGVtLCBhbmQgSUJNWDI1CisgICBvciBIUFgyNSBmb3IgY29kZSBzcGVjaWZp YyB0byBJQk0gb3IgSFAuCisKKyAgIEl0IG1pZ2h0IGFsc28gaGFwcGVuIHRoYXQgc29tZSBjb2Rl IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB0d28gb3IgbW9yZQorICAgb2YgdGhlc2UsIGJ1dCBub3Qg dGhlIG90aGVycy4gU3VwcG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IHdyaXRlIGNvZGUKKyAg IHRoYXQgYXBwbGllcyB0byBib3RoIElCTSBhbmQgSFAsIGJ1dCBub3QgU3VuIG9yIFZPUyBYLjI1 LiBUaGVuIHlvdSBhZGQKKyAgIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiB0byBja2NuZXQuaDoK KworI2lmbmRlZiBIUE9SSUJNWDI1CisjaWZkZWYgSFBYMjUKKyNkZWZpbmUgSFBPUklCTVgyNQor I2Vsc2UKKyNpZmRlZiBJQk1YMjUKKyNkZWZpbmUgSFBPUklCTVgyNQorI2VuZGlmIC8qIElCTVgy NSAqLworI2VuZGlmIC8qIEhQWDI1ICovCisjZW5kaWYgLyogSFBPUklCTVgyNSAqLworCisgICBZ b3UgY2FuIE5PVCB1c2UgY29uc3RydWN0aW9ucyBsaWtlICIjaWYgZGVmaW5lZCAoSFBYMjUgfHwg SUJNWDI1KSI7CisgICB0aGV5IGFyZSBub3QgcG9ydGFibGUuCisKKyAgIFsgWzE1Ml1Db250ZW50 cyBdIFsgWzE1M11DLUtlcm1pdCBdIFsgWzE1NF1LZXJtaXQgSG9tZSBdCisKKzQuRy4gR3JvdXAg RzogRm9ybWF0dGVkIFNjcmVlbiBTdXBwb3J0CisKKyAgIFNvIGZhciwgdGhpcyBpcyB1c2VkIG9u bHkgZm9yIHRoZSBmdWxsc2NyZWVuIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2ZlcgorICAgZGlzcGxh eS4gSW4gdGhlIGZ1dHVyZSwgaXQgbWlnaHQgYmUgZXh0ZW5kZWQgdG8gb3RoZXIgdXNlcy4gVGhl CisgICBmdWxsc2NyZWVuIGRpc3BsYXkgY29kZSBpcyBpbiBhbmQgYXJvdW5kIHRoZSByb3V0aW5l IHNjcmVlbmMoKSBpbgorICAgWzE1NV1ja3V1c3guYy4KKworICAgSW4gdGhlIFVOSVggdmVyc2lv biwgd2UgdXNlIHRoZSBjdXJzZXMgbGlicmFyeSwgcGx1cyBvbmUgY2FsbCBmcm9tIHRoZQorICAg dGVybWNhcCBsaWJyYXJ5LiBJbiBvdGhlciB2ZXJzaW9ucyAoT1MvMiwgVk1TLCBldGMpIHdlIGlu c2VydCBkdW1teQorICAgcm91dGluZXMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIGN1cnNl cyByb3V0aW5lcy4gU28gZmFyLCB0aGVyZSBhcmUKKyAgIHR3byBtZXRob2RzIGZvciBzaW11bGF0 aW5nIGN1cnNlcyByb3V0aW5lczoKKworICAgIDEuIEluIFZNUywgd2UgdXNlIHRoZSBTY3JlZW4g TWFuYWdlbWVudCBMaWJyYXJ5IChTTUcpLCBhbmQgaW5zZXJ0CisgICAgICAgc3R1YnMgdG8gY29u dmVydCBjdXJzZXMgY2FsbHMgaW50byBTTUcgY2FsbHMuCisgICAgMi4gSW4gT1MvMiwgd2UgdXNl IHRoZSBNWUNVUlNFUyBjb2RlLCBpbiB3aGljaCB0aGUgc3R1YiByb3V0aW5lcworICAgICAgIGFj dHVhbGx5IGVtaXQgdGhlIGFwcHJvcHJpYXRlIGVzY2FwZSBzZXF1ZW5jZXMgdGhlbXNlbHZlcy4K KworICAgSGVyZSBhcmUgdGhlIHN0dWIgcm91dGluZXM6CisKKyAgIGludAorICAgICAgICAgIHRn ZXRlbnQoY2hhciAqYnVmLCBjaGFyICp0ZXJtKQorICAgICAgICAgIEFyZ3VtZW50cyBhcmUgaWdu b3JlZC4gUmV0dXJucyAxIGlmIHRoZSB1c2VyIGhhcyBhIHN1cHBvcnRlZAorICAgICAgICAgIHRl cm1pbmFsIHR5cGUsIDAgb3RoZXJ3aXNlLiBTZXRzIGEgZ2xvYmFsIHZhcmlhYmxlIChmb3IgZXhh bXBsZSwKKyAgICAgICAgICAiaXN2dDUyIiBvciAiaXNkYXNoZXIiKSB0byBpbmRpY2F0ZSB0aGUg dGVybWluYWwgdHlwZS4KKworICAgVk9JRAorICAgICAgICAgIG1vdmUoaW50IHJvdywgaW50IGNv bCkKKyAgICAgICAgICBTZW5kcyB0aGUgZXNjYXBlIHNlcXVlbmNlIHRvIHBvc2l0aW9uIHRoZSBj dXJzb3IgYXQgdGhlCisgICAgICAgICAgaW5kaWNhdGVkIHJvdyBhbmQgY29sdW1uLiBUaGUgbnVt YmVycyBhcmUgMC1iYXNlZCwgZS5nLiB0aGUgaG9tZQorICAgICAgICAgIHBvc2l0aW9uIGlzIDAs MC4KKworICAgaW50CisgICAgICAgICAgY2xlYXIoKQorICAgICAgICAgIFNlbmRzIHRoZSBlc2Nh cGUgc2VxdWVuY2UgdG8gY2xlYXIgdGhlIHNjcmVlbi4KKworICAgaW50CisgICAgICAgICAgY2xy dG9lb2woKQorICAgICAgICAgIFNlbmRzIHRoZSBlc2NhcGUgc2VxdWVuY2UgdG8gY2xlYXIgZnJv bSB0aGUgY3VycmVudCBjdXJzb3IKKyAgICAgICAgICBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRo ZSBsaW5lLgorCisgICBJbiB0aGUgTVlDVVJTRVMgY2FzZSwgY29kZSBtdXN0IGJlIGFkZGVkIHRv IGVhY2ggb2YgdGhlIGxhc3QgdGhyZWUKKyAgIHJvdXRpbmVzIHRvIGVtaXQgdGhlIGFwcHJvcHJp YXRlIGVzY2FwZSBzZXF1ZW5jZXMgZm9yIGEgbmV3IHRlcm1pbmFsCisgICB0eXBlLgorCisgICBj bGVhcm9rKGN1cnNjciksIHdyZWZyZXNoKCkKKyAgICAgICAgICBJbiByZWFsIGN1cnNlcywgdGhl c2UgdHdvIGNhbGxzIGFyZSByZXF1aXJlZCB0byByZWZyZXNoIHRoZQorICAgICAgICAgIHNjcmVl biwgZm9yIGV4YW1wbGUgYWZ0ZXIgaXQgd2FzIGZyYWN0dXJlZCBieSBhIGJyb2FkY2FzdAorICAg ICAgICAgIG1lc3NhZ2UuIFRoZXNlIGFyZSB1c2VmdWwgb25seSBpZiB0aGUgdW5kZXJseWluZyBz Y3JlZW4KKyAgICAgICAgICBtYW5hZ2VtZW50IHNlcnZpY2Uga2VlcHMgYSBjb3B5IG9mIHRoZSBl bnRpcmUgc2NyZWVuLCBhcyBjdXJzZXMKKyAgICAgICAgICBhbmQgU01HIGRvLiBDLUtlcm1pdCBk b2VzIG5vdCBkbyB0aGlzIGl0c2VsZi4KKworICAgWyBbMTU2XUNvbnRlbnRzIF0gWyBbMTU3XUMt S2VybWl0IF0gWyBbMTU4XUtlcm1pdCBIb21lIF0KKworNC5ILiBHcm91cCBIOiBQc2V1ZG90ZXJt aW5hbCBTdXBwb3J0CisKKyAgIChUbyBiZSBmaWxsZWQgaW4uLi4pIEJ1dCBzZWU6IFsxNTlddGhl c2UgY29tbWVudHMsIGFuZCB0aGUgc291cmNlIGZpbGVzCisgICBbMTYwXWNrdXB0eS5oIGFuZCBb MTYxXWNrdXB0eS5jLgorCis0LkkuIEdyb3VwIEk6IFNlY3VyaXR5CisKKyAgIChUbyBiZSBmaWxs ZWQgaW4uLi4pIE1lYW53aGlsZSwgc2VlIFsxNjJdc2VjdXJpdHkuaHRtbC4KKworICAgWyBbMTYz XUNvbnRlbnRzIF0gWyBbMTY0XUMtS2VybWl0IF0gWyBbMTY1XUtlcm1pdCBIb21lIF0KKworQVBQ RU5ESVggSS4gRklMRSBQRVJNSVNTSU9OUworCitJLjEuIEZvcm1hdCBvZiBTeXN0ZW0tRGVwZW5k ZW50IEZpbGUgUGVybWlzc2lvbnMgaW4gQS1QYWNrZXRzCisKKyAgIFRoZSBmb3JtYXQgb2YgdGhp cyBmaWVsZCAodGhlICIsIiBhdHRyaWJ1dGUpIGlzIGludGVycHJldGVkIGFjY29yZGluZworICAg dG8gdGhlIFN5c3RlbSBJRCAoIi4iIEF0dHJpYnV0ZSkuCisKKyAgIEZvciBVTklYIChTeXN0ZW0g SUQgPSBVMSksIGl0J3MgdGhlIGZhbWlsaWFyIDMtZGlnaXQgb2N0YWwgbnVtYmVyLCB0aGUKKyAg IGxvdy1vcmRlciA5IGJpdHMgb2YgdGhlIGZpbGVtb2RlOiBPd25lciwgR3JvdXAsIFdvcmxkLCBl LmcuIDY2MCA9CisgICByZWFkL3dyaXRlIGFjY2VzcyBmb3Igb3duZXIgYW5kIGdyb3VwLCBub25l IGZvciB3b3JsZCwgcmVjb3JkZWQgYXMgYQorICAgMy1kaWdpdCBvY3RhbCBzdHJpbmcuIEhpZ2gt b3JkZXIgVU5JWCBwZXJtaXNzaW9uIGJpdHMgYXJlIG5vdAorICAgdHJhbnNtaXR0ZWQuCisKKyAg IEZvciBWTVMgKFN5c3RlbSBJRCA9IEQ3KSwgaXQncyBhIDQtZGlnaXQgaGV4IHN0cmluZywgcmVw cmVzZW50aW5nIHRoZQorICAgMTYtYml0IGZpbGUgcHJvdGVjdGlvbiBXR09TIGZpZWxkcyAoV29y bGQsR3JvdXAsT3duZXIsU3lzdGVtKSwgaW4gdGhhdAorICAgb3JkZXIgKHdoaWNoIGlzIHRoZSBy ZXZlcnNlIG9mIGhvdyB0aGV5J3JlIHNob3duIGluIGEgZGlyZWN0b3J5CisgICBsaXN0aW5nKTsg aW4gZWFjaCBmaWVsZCwgQml0IDAgPSBSZWFkLCAxID0gV3JpdGUsIDIgPSBFeGVjdXRlLCAzID0K KyAgIERlbGV0ZS4gQSBiaXQgdmFsdWUgb2YgMCBtZWFucyBwZXJtaXNzaW9uIGlzIGdyYW50ZWQs IDEgbWVhbnMKKyAgIHBlcm1pc3Npb24gaXMgZGVuaWVkLiBTYW1wbGU6CisKKyAgci0wMS0wMC1e QS8hRldFUk1JVC5FWEUnIgorICBzLTAxLTAwLV5BRSFZL2FtZC93YXRzdW4vdy9mZGMvbmV3L3dl cm1pdC5leGUuRFYKKyAgci0wMi0wMS1eQV0iQS4iRDciIkI4IzExOTk4MDEwMSAxODoxNDowNSEj ODUzMSY4NzI5NjAsJEEyMEItITcoIzUxMkAgIy5ZCisgIHMtMDItMDEtXkElIlkuNSEKKworICAg QSBWTVMgZGlyZWN0b3J5IGxpc3Rpbmcgc2hvd3MgdGhlIGZpbGUncyBwcm90ZWN0aW9uIGFzIChF LFJXRUQsUkVELFJFKQorICAgd2hpY2ggcmVhbGx5IG1lYW5zIChTPUUsTz1SV0VELEc9UkVELFc9 UkUpLCB3aGljaCBpcyByZXZlcnNlIG9yZGVyIGZyb20KKyAgIHRoZSBpbnRlcm5hbCBzdG9yYWdl LCBzbyAoUkUsUkVELFJXRUQsRSkuIE5vdyB0cmFuc2xhdGUgZWFjaCBsZXR0ZXIgdG8KKyAgIGl0 cyBjb3JyZXNwb25kaW5nIGJpdDoKKworICBSRT0wMTAxLCBSRUQ9MTEwMSwgUldFRD0xMTExLCBF PTAwMTAKKworICAgTm93IHJldmVyc2UgdGhlIGJpdHM6CisKKyAgUkU9MTAxMCwgUkVEPTAwMTAs IFJXRUQ9MDAwMCwgRT0xMTAxCisKKyAgIFRoaXMgZ2l2ZXMgdGhlIDE2LWJpdCBxdWFudGl0eToK KworICAxMDEwMDAxMDAwMDAxMTAxCisKKyAgIFRoaXMgaXMgdGhlIGludGVybmFsIHJlcHJlc2Vu dGF0aW9uIG9mIHRoZSBWTVMgZmlsZSBwZXJtaXNzaW9uOyBpbiBoZXg6CisKKyAgQTIwQgorCisg ICBhcyBzaG93biBpbiB0aGUgc2FtcGxlIHBhY2tldCBhYm92ZS4KKworICAgVGhlIFZNUyBmb3Jt YXQgcHJvYmFibHkgd291bGQgYWxzbyBhcHBseSB0byBSU1ggb3IgYW55IG90aGVyIEZJTEVTLTEx CisgICBzeXN0ZW0uCisKK0kuMi4gSGFuZGxpbmcgb2YgR2VuZXJpYyBQcm90ZWN0aW9uCisKKyAg IFRvIGJlIHVzZWQgd2hlbiB0aGUgdHdvIHN5c3RlbXMgYXJlIGRpZmZlcmVudCAoYW5kL29yIGRv IG5vdCByZWNvZ25pemUKKyAgIG9yIHVuZGVyc3RhbmQgZWFjaCBvdGhlcidzIGxvY2FsIHByb3Rl Y3Rpb24gY29kZXMpLgorCisgICBGaXJzdCBvZiBhbGwsIHRoZSBib29rIGlzIHdyb25nLiBUaGlz IHNob3VsZCBub3QgYmUgdGhlIFdvcmxkCisgICBwcm90ZWN0aW9uLCBidXQgdGhlIE93bmVyIHBy b3RlY3Rpb24uIFRoZSBvdGhlciBmaWVsZHMgc2hvdWxkIGJlIHNldAorICAgYWNjb3JkaW5nIHRv IHN5c3RlbSBkZWZhdWx0cyAoZS5nLiBVTklYIHVtYXNrLCBWTVMgZGVmYXVsdCBwcm90ZWN0aW9u LAorICAgZXRjKSwgZXhjZXB0IHRoYXQgbm8gbm9uLU93bmVyIGZpZWxkIHNob3VsZCBnaXZlIG1v cmUgcGVybWlzc2lvbnMgdGhhbgorICAgdGhlIE93bmVyIGZpZWxkLgorCisgICBbIFsxNjZdVG9w IF0gWyBbMTY3XUNvbnRlbnRzIF0gWyBbMTY4XUMtS2VybWl0IEhvbWUgXSBbIFsxNjldS2VybWl0 CisgICBIb21lIF0KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworICAgIEMtS2VybWl0IFByb2dyYW0gTG9n aWMgTWFudWFsIC8gWzE3MF1UaGUgS2VybWl0IFByb2plY3QgLworICAgIFsxNzFda2VybWl0QGNv bHVtYmlhLmVkdSAvIDMwIEp1bmUgMjAxMQorCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1LworICAgMi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIDMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgICA0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKKyAgIDUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAorICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2N1cnJlbnQuaHRtbAorICAgOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3do YXRzbmV3Lmh0bWwKKyAgIDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5o dG1sCisgIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCisg IDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgIDEyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwKKyAgMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4MQorICAxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY3BsbS5odG1sI3gyCisgIDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tjcGxtLmh0bWwjeDMKKyAgMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NwbG0uaHRtbCN4NAorICAxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3Bs bS5odG1sI3g0LkEKKyAgMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0u aHRtbCN4NC5CCisgIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0 bWwjeDQuQworICAyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1s I3g0LkQKKyAgMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4 NC5FCisgIDIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQu RgorICAyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkcK KyAgMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5ICisg IDI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQuSQorICAy Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3hhMQorICAyNy4g aHR0cDovL3d3dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvMDkzMjM3Njg4Nj9pZT1VVEY4JnRhZz1h bGVpZG1vcmVsZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVh dGl2ZUFTSU49MDkzMjM3Njg4NgorICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY3BsbS5odG1sI2NvbnRlbnRzCisgIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvdmF4XzExLTc1MC5qcGcKKyAgMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2N1L2NvbXB1 dGluZ2hpc3RvcnkvaGVybWl0Lmh0bWwKKyAgMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9jdWRvY3MvaWxvc2V0dXAuaHRtbAorICAzMi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvZi9ja2MwNGUudHh0CisgIDMzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9mL2NrYzA0Zi50eHQKKyAgMzQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2YvY2tjMTY4LnR4dAorICAzNS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9j a2MxNzgudHh0CisgIDM2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzE4 OC50eHQKKyAgMzcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjMTg5LnR4 dAorICAzOC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2MxOTIudHh0Cisg IDM5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzE5Ny50eHQKKyAgNDAu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjMjAwLnR4dAorICA0MS4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2MyMTEudHh0CisgIDQyLiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrYzMwMC50eHQKKyAgNDMuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cworICA0NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICA0NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgNDYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5l ZHUva2VybWl0L2Mta2VybWl0L2NrY3Byby53CisgIDQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKKyAgNDguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9pbmRleC5odG1sCisgIDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj cGxtLmh0bWwjeDMuMgorICA1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3Bs bS5odG1sI2NvbnRlbnRzCisgIDUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdC5odG1sCisgIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAorICA1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkEK KyAgNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50 cworICA1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICA1 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgNTguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cworICA1OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICA2MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgNjEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cworICA2Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgNjQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrY2xpYi5oCisgIDY1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja2NsaWIuYworICA2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3BsbS5odG1sI3gzLjEKKyAgNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2NwbG0uaHRtbCNjb250ZW50cworICA2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAorICA2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKKyAgNzAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrY3N5bS5oCisgIDcxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja2Nhc2MuaAorICA3Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2tjc2lnLmgKKyAgNzMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrY2RlYi5oCisgIDc0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja2NrZXIuaAorICA3NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2tjeGxhLmgKKyAgNzYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mt a2VybWl0L2NrY21haS5jCisgIDc3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja2Nwcm8udworICA3OC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2tjZm5zLmMKKyAgNzkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrY2ZuMi5jCisgIDgwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja2NmbjMuYworICA4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY3BsbS5odG1sI3g0LkIKKyAgODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2NwbG0uaHRtbCN4NC5FCisgIDgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tj cGxtLmh0bWwjeDQuRAorICA4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3Bs bS5odG1sI2NvbnRlbnRzCisgIDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdC5odG1sCisgIDg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAorICA4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3g0LkIK KyAgODguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXhsYS5j CisgIDg5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V4bGEu aAorICA5MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjeGxh LmgKKyAgOTEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXhs YS5oCisgIDkyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja214 bGEuaAorICA5My4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2s/ eGxhCisgIDk0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2N1 bmkuaAorICA5NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tj dW5pLmMKKyAgOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNj b250ZW50cworICA5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRt bAorICA5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgOTku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5CCisgMTAwLiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VjbWQuaAorIDEwMS4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1Y21kLmMKKyAxMDIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCN4NC5FCisgMTAzLiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1c3IuaAorIDEwNC4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXNyLmMKKyAxMDUu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzMi5jCisgMTA2 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1czMuYworIDEw Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXM0LmMKKyAx MDguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzeS5jCisg MTA5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V1c3guYwor IDExMC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dmVyLmgK KyAxMTEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXNjci5j CisgMTEyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VkaWEu YworIDExMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1Y29u LmMKKyAxMTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWNu cy5jCisgMTE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeDQu RQorIDExNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbWFp LmMKKyAxMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250 ZW50cworIDExOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAor IDExOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxMjAuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5jCisgMTIxLiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDEyMi4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1c2lnLmMKKyAxMjMu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdmZpby5jCisgMTI0 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VzaWcuYworIDEy NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjbWFpLmMKKyAx MjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cwor IDEyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDEyOC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxMjkuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgMTMwLiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3Z0aW8uYworIDEzMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sI3gyCisgMTMyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjeGExCisgMTMzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKKyAxMzQuIGZ0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUva2VybWl0L2Mta2VybWl0L2NrY25ldC5oCisgMTM1LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDEzNi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY3BsbS5odG1sI2NvbnRlbnRzCisgMTM3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAorIDEzOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAxNDAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrY25ldC5oCisgMTQxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja2NuZXQuYworIDE0Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tsbmV0LmMKKyAxNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2NwbG0uaHRtbCNjb250ZW50cworIDE0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQuaHRtbAorIDE0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2luZGV4Lmh0bWwKKyAxNDYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrY3RlbC5oCisgMTQ3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja2N0ZWwuYworIDE0OC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1r ZXJtaXQvY2tjZnRwLmMKKyAxNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Nw bG0uaHRtbCNjb250ZW50cworIDE1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQuaHRtbAorIDE1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKKyAxNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbCNjb250 ZW50cworIDE1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAor IDE1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxNTUuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXVzeC5jCisgMTU2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKKyAxNTcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxNTguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTU5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjTG9vc2VFbmQKKyAxNjAuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2t1cHR5LmgKKyAxNjEuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2YvY2t1cHR5LmMKKyAxNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCisgMTYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tjcGxtLmh0bWwjY29udGVudHMKKyAxNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCisgMTY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxt Lmh0bWwjdG9wCisgMTY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0 bWwjY29udGVudHMKKyAxNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKKyAxNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisg MTcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDE3MS4gbWFp bHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrY3Byby5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja2Nwcm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z YzUxYjZiCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja2Nwcm8uYwpAQCAtMCwwICsxLDM4MTQgQEAKKworLyogV0FSTklORyAtLSBUaGlz IEMgc291cmNlIHByb2dyYW0gZ2VuZXJhdGVkIGJ5IFdhcnQgcHJlcHJvY2Vzc29yLiAqLworLyog RG8gbm90IGVkaXQgdGhpcyBmaWxlOyBlZGl0IHRoZSBXYXJ0LWZvcm1hdCBzb3VyY2UgZmlsZSBp bnN0ZWFkLCAqLworLyogYW5kIHRoZW4gcnVuIGl0IHRocm91Z2ggV2FydCB0byBwcm9kdWNlIGEg bmV3IEMgc291cmNlIGZpbGUuICAgICAqLworCisvKiBXYXJ0IFZlcnNpb24gSW5mbzogKi8KK2No YXIgKndhcnR2ID0gIldhcnQgVmVyc2lvbiAyLjE0LCAxMCBOb3YgMTk5OSI7CisKK2NoYXIgKnBy b3R2ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIC0qLUMtKi0gKi8KKyJDLUtlcm1pdCBQcm90b2NvbCBNb2R1bGUgOC4wLjE2MCwgMTIgQXVn IDIwMDciOworCitpbnQga2FjdGl2ZSA9IDA7CQkJLyogS2VybWl0IHByb3RvY29sIGlzIGFjdGl2 ZSAqLworCisjZGVmaW5lIFBLVFpFUk9IQUNLCisKKy8qIEMgSyBDIFAgUiBPICAtLSBDLUtlcm1p dCBQcm90b2NvbCBNb2R1bGUsIGluIFdhcnQgcHJlcHJvY2Vzc29yIG5vdGF0aW9uLiAqLworLyoK KyAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgQ29sdW1iaWEg VW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5Lgor CisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAwNywKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBV bml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2 ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJp Z2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlz c2lvbnMuCisqLworI2lmbmRlZiBOT1hGRVIKKyNpbmNsdWRlICJja2NzeW0uaCIKKyNpbmNsdWRl ICJja2NkZWIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNp ZmRlZiBPUzIKKyNpZm5kZWYgTlQKKyNkZWZpbmUgSU5DTF9OT1BNCisjZGVmaW5lIElOQ0xfVklP CQkJLyogTmVlZGVkIGZvciBja29jb24uaCAqLworI2luY2x1ZGUgPG9zMi5oPgorI3VuZGVmIENP TU1FTlQKKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImNrb2Nvbi5oIgorI2VuZGlmIC8qIE9T MiAqLworCisvKgorIE5vdGUgLS0gVGhpcyBmaWxlIG1heSBhbHNvIGJlIHByZXByb2Nlc3NlZCBi eSB0aGUgVU5JWCBMZXggcHJvZ3JhbSwgYnV0CisgeW91IG11c3QgaW5kZW50IHRoZSBhYm92ZSAj aW5jbHVkZSBzdGF0ZW1lbnRzIGJlZm9yZSB1c2luZyBMZXgsIGFuZCB0aGVuCisgcmVzdG9yZSB0 aGVtIHRvIHRoZSBsZWZ0IG1hcmdpbiBpbiB0aGUgcmVzdWx0aW5nIEMgcHJvZ3JhbSBiZWZvcmUg Y29tcGlsYXRpb24uCisgQWxzbywgdGhlIGludm9jYXRpb24gb2YgdGhlICJ3YXJ0KCkiIGZ1bmN0 aW9uIGJlbG93IG11c3QgYmUgcmVwbGFjZWQgYnkgYW4KKyBpbnZvY2F0aW9uICBvZiB0aGUgInl5 bGV4KCkiIGZ1bmN0aW9uLiAgSXQgbWlnaHQgYWxzbyBiZSBuZWNlc3NhcnkgdG8gcmVtb3ZlCisg Y29tbWVudHMgaW4gdGhlICglKSglKS4uLiglKSglKSBzZWN0aW9uLgorKi8KKworLyogU3RhdGUg ZGVmaW5pdGlvbnMgZm9yIFdhcnQgKG9yIExleCkgKi8KKyNkZWZpbmUgaXBrdCAxCisjZGVmaW5l IHJmaWxlIDIKKyNkZWZpbmUgcmF0dHIgMworI2RlZmluZSByZHBrdCA0CisjZGVmaW5lIHNzaW5p dCA1CisjZGVmaW5lIHNzZmlsZSA2CisjZGVmaW5lIHNzYXR0ciA3CisjZGVmaW5lIHNzZGF0YSA4 CisjZGVmaW5lIHNzZW9mIDkKKyNkZWZpbmUgc3Nlb3QgMTAKKyNkZWZpbmUgc2VydmUgMTEKKyNk ZWZpbmUgZ2VuZXJpYyAxMgorI2RlZmluZSBnZXQgMTMKKyNkZWZpbmUgcmdlbiAxNAorI2RlZmlu ZSBzc29wa3QgMTUKKyNkZWZpbmUgcm9wa3QgMTYKKworX1BST1RPVFlQKHN0YXRpYyBWT0lEIHh4 cHJvdG8sKHZvaWQpKTsKK19QUk9UT1RZUChzdGF0aWMgVk9JRCB3aGVyZW1zZywodm9pZCkpOwor X1BST1RPVFlQKGludCB3YXJ0LCh2b2lkKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBzZ2V0aW5p dCwoaW50LGludCkpOworX1BST1RPVFlQKGludCBzbmRzcGFjZSwoaW50KSk7CisKKy8qIEV4dGVy bmFsIEMtS2VybWl0IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyAqLworICBleHRlcm4gY2hhciAqdmVy c2lvLCAqc3J2dHh0LCAqY21hcmcsICpjbWFyZzIsICoqY21saXN0LCAqcmZfZXJyOworICBleHRl cm4gY2hhciAqIHJmc3BlYywgKiBzZnNwZWMsICogc3Jmc3BlYywgKiBycmZzcGVjOworICBleHRl cm4gY2hhciAqIHByZnNwZWMsICogcHNmc3BlYywgKiBwc3Jmc3BlYywgKiBwcnJmc3BlYzsKKyAg ZXh0ZXJuIGNoYXIgKmNkbXNnZmlsZVtdOworICBleHRlcm4gY2hhciAqIHNuZF9tb3ZlLCAqIHNu ZF9yZW5hbWUsICogc3JpbXNnOworICBleHRlcm4gY2hhciBmaWxuYW1bXSwgb2ZpbG5hbVtdLCBm c3BlY1tdLCB0dG5hbWVbXSwgb2ZuMVtdOworICBleHRlcm4gQ0hBUiBzc3RhdGUsICpzcnZwdHIs ICpkYXRhOworICBleHRlcm4gaW50IHRpbWludCwgcnRpbW8sIG5maWxzLCBoY2ZsZywgeGZsZywg ZmxvdywgbWRtdHlwLCBuZXR3b3JrOworICBleHRlcm4gaW50IG9vcHRzLCBvbW9kZSwgb25hbWUs IG9wYXRoLCBub3B1c2gsIGlzZ3Vlc3QsIHhjbWRzcmMsIHJjZGFjdGl2ZTsKKyAgZXh0ZXJuIGlu dCByZWplY3Rpb24sIG1vdmluZywgZm5jYWN0LCBieWVfYWN0aXZlLCB1cnNlcnZlciwgZmF0YWxp bzsKKyAgZXh0ZXJuIGludCBwcm90b2NvbCwgcHJlZml4aW5nLCBmaWxjbnQsIGNhcnJpZXIsIGZu c3BhdGgsIGludGVycnVwdGVkOworICBleHRlcm4gaW50IHJlY3Vyc2l2ZSwgaW5zZXJ2ZXIsIG56 eG9wdHMsIGlkbGV0bW8sIHNydmlkbCwgeGZyaW50OworICBleHRlcm4gc3RydWN0IGNrX3AgcHRh YltdOworICBleHRlcm4gaW50IHJlbWZpbGUsIHJlbXBpcGUsIHhmZXJzdGF0LCBmaWxlc3RhdHVz LCB3ZWFyZWFsaWtlLCBmYWNrcGF0aDsKKyAgZXh0ZXJuIGludCBwYXR0ZXJucywgZmlsZXBlZWss IGduZmVycm9yOworICBleHRlcm4gY2hhciAqIHJlbWRlc3Q7CisKKyNpZmRlZiBQS1RaRVJPSEFD SworI2RlZmluZSBQS1RaRVJPTEVOIDMyCitzdGF0aWMgY2hhciBpcGt0YWNrW1BLVFpFUk9MRU5d Oworc3RhdGljIGludCBpcGt0bGVuID0gMDsKKyNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLworCitz dGF0aWMgaW50IHNfdGltaW50ID0gLTE7CQkvKiBGb3Igc2F2aW5nIHRpbWVvdXQgdmFsdWUgKi8K K3N0YXRpYyBpbnQgbXlqb2IgPSAwOworc3RhdGljIGludCBoYXZlZnMgPSAwOworI2lmZGVmIENL X0xPR0lOCitzdGF0aWMgaW50IGxvZ3RyaWVzID0gMDsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLwor CitzdGF0aWMgaW50IGNhbmNlbCA9IDA7CitpbnQgZmFja2J1ZyA9IDA7CisKKyNpZmRlZiBTVFJF QU1JTkcKK2V4dGVybiBpbnQgc3RyZWFtaW5nLCBzdHJlYW1vazsKKworc3RhdGljIFZPSUQKK3N0 cmVhbW9uKCkgeworICAgIGlmIChzdHJlYW1vaykgeworCWRlYnVnKEYxMDAsInN0cmVhbW9uIiwi IiwwKTsKKwlzdHJlYW1pbmcgPSAxOworCXRpbWludCA9IDA7CQkJLyogTm8gdGltZW91dHMgd2hp bGUgc3RyZWFtaW5nLiAqLworICAgIH0KK30KKworI2lmZGVmIENPTU1FTlQJCQkJLyogKG5vdCB1 c2VkKSAqLworc3RhdGljIFZPSUQKK3N0cmVhbW9mZigpIHsKKyAgICBpZiAoc3RyZWFtaW5nKSB7 CisJZGVidWcoRjEwMCwic3RyZWFtb2ZmIiwiIiwwKTsKKwlzdHJlYW1pbmcgPSAwOworCXRpbWlu dCA9IHNfdGltaW50OwkJLyogUmVzdG9yZSB0aW1lb3V0ICovCisgICAgfQorfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyNlbHNlIC8qIFNUUkVBTUlORyAqLworI2RlZmluZSBzdHJlYW1vbigpCisj ZGVmaW5lIHN0cmVhbW9mZigpCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisKKyNpZm5kZWYgTk9T UEwKK19QUk9UT1RZUCggaW50IGFkZG1hYywgKGNoYXIgKiwgY2hhciAqKSApOworX1BST1RPVFlQ KCBpbnQgenpzdHJpbmcsIChjaGFyICosIGNoYXIgKiosIGludCAqKSApOworI2VuZGlmIC8qIE5P U1BMICovCisjaWZuZGVmIE5PSUNQCitfUFJPVE9UWVAoIGludCBjbWRzcmMsICh2b2lkKSApOwor I2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9TRVJWRVIKKyAgZXh0ZXJuIGNoYXIgKiB4 X3VzZXIsICogeF9wYXNzd2QsICogeF9hY2N0OworICBleHRlcm4gaW50IHhfbG9naW4sIHhfbG9n Z2VkOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyNpbmNsdWRlICJja2NuZXQuaCIKKworI2lm ZGVmIFROQ09ERQorICBleHRlcm4gaW50IHR0bnByb3RvOwkJCS8qIE5ldHdvcmsgcHJvdG9jb2wg Ki8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIENLX1NQRUVECisgIGV4dGVybiBzaG9y dCBjdGxwW107CQkJLyogQ29udHJvbC1jaGFyYWN0ZXIgcHJlZml4IHRhYmxlICovCisjZW5kaWYg LyogQ0tfU1BFRUQgKi8KKworI2lmZGVmIFROQ09ERQorICBleHRlcm4gaW50IHRuX2JfbmxtLCB0 bl9iX3hmZXIsIHRuX25sbTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgIGV4dGVybiBpbnQgdG5f bm9fZW5jcnlwdF94ZmVyOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBU TkNPREUgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT0xJU1RFTgorICBleHRlcm4g aW50IHRjcHNyZmQ7CisjZW5kaWYgLyogTk9MSVNURU4gKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KKworICBleHRlcm4gaW50IGN4c2VlbiwgY3pzZWVuLCBzZXJ2ZXIsIHNydmRpcywgbG9jYWws IGRpc3BsYSwgYmN0dSwgYmN0ciwgYmN0bDsKKyAgZXh0ZXJuIGludCBxdWlldCwgdHNlY3MsIHBh cml0eSwgYmFja2dyZCwgbmFrc3RhdGUsIGF0Y2FwdSwgd3Nsb3RuLCB3aW5sbzsKKyAgZXh0ZXJu IGludCB3c2xvdHMsIHN1Y2Nlc3MsIHhpdHN0YSwgcnByaW50ZiwgZGlzY2FyZCwgY2R0aW1vLCBr ZWVwLCBmZGlzcGxhOworICBleHRlcm4gaW50IHRpbWVmLCBzdGRpbmYsIHJzY2FwdSwgc2VuZG1v ZGUsIGVwa3RmbGcsIGVwa3RyY3ZkLCBlcGt0c2VudDsKKyAgZXh0ZXJuIGludCBiaW5hcnksIGZu Y252OworICBleHRlcm4gbG9uZyBzcGVlZCwgZmZjLCBjcmMxNiwgY2FsaWJyYXRlLCBkZXN0Owor I2lmZGVmIENPTU1FTlQKKyAgZXh0ZXJuIGNoYXIgKlRZUENNRCwgKkRJUkNNRCwgKkRJUkNNMjsK KyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZuZGVmIE9TMgorICBleHRlcm4gY2hhciAqU1BBQ01E LCAqU1BBQ00yLCAqV0hPQ01EOworI2VuZGlmIC8qIE9TMiAqLworICBleHRlcm4gQ0hBUiAqcmRh dGFwOworICBleHRlcm4gc3RydWN0IHphdHRyIGlhdHRyOworCisjaWZkZWYgVk1TCisgIGV4dGVy biBpbnQgYmF0Y2g7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBHRlRJTUVSCisgIGV4dGVy biBDS0ZMT0FUIGZwdHNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgIGV4dGVybiBDSEFS ICpzcnZjbWQ7CisgIGV4dGVybiBDSEFSICplcGt0bXNnOworCisjaWZkZWYgQ0tfVE1QRElSCitl eHRlcm4gaW50IGZfdG1wZGlyOwkJCS8qIERpcmVjdG9yeSBjaGFuZ2VkIHRlbXBvcmFyaWx5ICov CitleHRlcm4gY2hhciBzYXZkaXJbXTsJCQkvKiBGb3Igc2F2aW5nIGN1cnJlbnQgZGlyZWN0b3J5 ICovCitleHRlcm4gY2hhciAqIGRsZGlyOworI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisgIGV4 dGVybiBpbnQgcXVlcnk7CQkJLyogUXVlcnktYWN0aXZlIGZsYWcgKi8KKyNpZm5kZWYgTk9TUEwK KyAgZXh0ZXJuIGludCBjbWRsdmw7CisgIGNoYXIgcXVlcnlidWZbUUJVRkwrMV0gPSB7IE5VTCwg TlVMIH07IC8qIFFVRVJZIHJlc3BvbnNlIGJ1ZmZlciAqLworICBjaGFyICpxYnVmcCA9IHF1ZXJ5 YnVmOwkJLyogUG9pbnRlciB0byBpdCAqLworICBpbnQgcWJ1Zm4gPSAwOwkJCS8qIExlbmd0aCBv ZiBkYXRhIGluIGl0ICovCisjZWxzZQorICBleHRlcm4gaW50IHRsZXZlbDsKKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZuZGVmIE5PSUNQCisgIGV4dGVybiBpbnQgZXNjYXBlOworI2VuZGlmIC8q IE5PSUNQICovCisvKgorICBJZiB0aGUgZm9sbG93aW5nIGZsYWcgaXMgbm9uemVybyB3aGVuIHRo ZSBwcm90b2NvbCBtb2R1bGUgaXMgZW50ZXJlZCwKKyAgdGhlbiBzZXJ2ZXIgbW9kZSBwZXJzaXN0 cyBmb3IgZXhhY3RseSBvbmUgdHJhbnNhY3Rpb24sIHJhdGhlciB0aGFuCisgIGxvb3BpbmcgdW50 aWwgQllFIG9yIEZJTklTSCBpcyByZWNlaXZlZC4KKyovCitleHRlcm4gaW50IGp1c3RvbmU7CisK K3N0YXRpYyBpbnQgcl9zYXZlID0gLTE7CitzdGF0aWMgaW50IHBfc2F2ZSA9IC0xOworCisvKiBG dW5jdGlvbiB0byBsZXQgcmVtb3RlLW1vZGUgdXNlciBrbm93IHdoZXJlIHRoZWlyIGZpbGUocykg d2VudCAqLworCitpbnQgd2hlcmVmbGcgPSAxOwkJCS8qIFVuc2V0IHdpdGggU0VUIFhGRVIgUkVQ T1JUICovCisKK3N0YXRpYyBWT0lECit3aGVyZW1zZygpIHsKKyAgICBleHRlcm4gaW50IHF1aWV0 LCBmaWxyZWo7CisgICAgaW50IG47CisgICAgbiA9IGZpbGNudCAtIGZpbHJlajsKKyAgICBkZWJ1 ZyhGMTAxLCJ3aGVyZW1zZyBuIiwiIixuKTsKKworICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHBy ZnNwZWMiLHByZnNwZWMsMCk7CisgICAgZGVidWcoRjExMCwid2hlcmVtc2cgcmZzcGVjIixyZnNw ZWMsMCk7CisgICAgZGVidWcoRjExMCwid2hlcmVtc2cgcHNmc3BlYyIscHNmc3BlYywwKTsKKyAg ICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBzZnNwZWMiLHNmc3BlYywwKTsKKworICAgIGRlYnVnKEYx MTAsIndoZXJlbXNnIHBycmZzcGVjIixwcnJmc3BlYywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ3aGVy ZW1zZyBycmZzcGVjIixycmZzcGVjLDApOworICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHBzcmZz cGVjIixwc3Jmc3BlYywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBzcmZzcGVjIixzcmZz cGVjLDApOworCisgICAgaWYgKCFxdWlldCAmJiAhbG9jYWwpIHsKKwlpZiAobiA9PSAxKSB7CisJ ICAgIHN3aXRjaCAobXlqb2IpIHsKKwkgICAgICBjYXNlICdzJzoKKwkJaWYgKHNmc3BlYykgewor CQkgICAgcHJpbnRmKCIgU0VOVDogWyVzXSIsc2ZzcGVjKTsKKwkJICAgIGlmIChzcmZzcGVjKQor CQkgICAgICBwcmludGYoIiBUbzogWyVzXSIsc3Jmc3BlYyk7CisJCSAgICBwcmludGYoIiAoJXMp XHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIpOworCQl9CisJCWJyZWFrOworCSAgICAg IGNhc2UgJ3InOgorCSAgICAgIGNhc2UgJ3YnOgorCQlpZiAocnJmc3BlYykgeworCQkgICAgcHJp bnRmKCIgUkNWRDogWyVzXSIscnJmc3BlYyk7CisJCSAgICBpZiAocmZzcGVjKQorCQkgICAgICBw cmludGYoIiBUbzogWyVzXSIscmZzcGVjKTsKKwkJICAgIHByaW50ZigiICglcylcclxuIiwgc3Vj Y2VzcyA/ICJPSyIgOiAiRkFJTEVEIik7CisJCX0KKwkgICAgfQorCX0gZWxzZSBpZiAobiA+IDEp IHsKKwkgICAgc3dpdGNoIChteWpvYikgeworCSAgICAgIGNhc2UgJ3MnOgorCQlpZiAoc2ZzcGVj KSB7CisJCSAgICBwcmludGYoIiBTRU5UOiAoJWQgZmlsZXMpIixuKTsKKwkJICAgIGlmIChzcmZz cGVjKQorCQkgICAgICBwcmludGYoIiBMYXN0OiBbJXNdIixzcmZzcGVjKTsKKwkJICAgIHByaW50 ZigiICglcylcclxuIiwgc3VjY2VzcyA/ICJPSyIgOiAiRkFJTEVEIik7CisJCX0KKwkJYnJlYWs7 CisJICAgICAgY2FzZSAncic6CisJICAgICAgY2FzZSAndic6CisJCWlmIChycmZzcGVjKSB7CisJ CSAgICBwcmludGYoIiBSQ1ZEOiAoJWQgZmlsZXMpIixuKTsKKwkJICAgIGlmIChyZnNwZWMpCisJ CSAgICAgIHByaW50ZigiIExhc3Q6IFslc10iLHJmc3BlYyk7CisJCSAgICBwcmludGYoIiAoJXMp XHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIpOworCQl9CisJICAgIH0KKwl9IGVsc2Ug aWYgKG4gPT0gMCkgeworCSAgICBpZiAobXlqb2IgPT0gJ3MnKQorCSAgICAgIHByaW50ZigiIFNF TlQ6ICgwIGZpbGVzKSAgICAgICAgICBcclxuIik7CisJICAgIGVsc2UgaWYgKG15am9iID09ICdy JyB8fCBteWpvYiA9PSAndicpCisJICAgICAgcHJpbnRmKCIgUkNWRDogKDAgZmlsZXMpICAgICAg ICAgIFxyXG4iKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgVk9JRAorcmRlYnVnKCkgeworICAg IGlmIChzZXJ2ZXIpCisgICAgICBkZWJ1ZyhGMTExLCJSRVNVTUUiLCJzZXJ2ZXI9MSIsanVzdG9u ZSk7CisgICAgZWxzZQorICAgICAgZGVidWcoRjExMSwiUkVTVU1FIiwic2VydmVyPTAiLGp1c3Rv bmUpOworfQorCisvKiBGbGFncyBmb3IgdGhlIEVOQUJMRSBhbmQgRElTQUJMRSBjb21tYW5kcyAq LworZXh0ZXJuIGludAorICBlbl9jcHksIGVuX2N3ZCwgZW5fZGVsLCBlbl9kaXIsIGVuX2Zpbiwg ZW5fZ2V0LCBlbl9ieWUsIGVuX21haSwgZW5fcHJpLAorICBlbl9ob3MsIGVuX3JlbiwgZW5fc2Vu LCBlbl9zcGEsIGVuX3NldCwgZW5fdHlwLCBlbl93aG8sIGVuX3JldCwgZW5feGl0LAorICBlbl9t a2QsIGVuX3JtZDsKKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgZW5fYXNnLCBlbl9xdWU7Cisj ZW5kaWYgLyogTk9TUEwgKi8KK2V4dGVybiBpbnQgd2hhdCwgbGFzdHhmZXI7CisKKy8qIEdsb2Jh bCB2YXJpYWJsZXMgZGVjbGFyZWQgaGVyZSAqLworCisgIGludCB3aGF0cnUgPSAwOwkJCS8qIFdo YXQgYXJlIHlvdS4gKi8KKyAgaW50IHdoYXRydTIgPSAwOwkJCS8qIFdoYXQgYXJlIHlvdSwgY29u dCdkLiAqLworCisvKiBMb2NhbCB2YXJpYWJsZXMgKi8KKworICBzdGF0aWMgY2hhciB2c3RhdGUg PSAwOyAgCQkvKiBTYXZlZCBTdGF0ZSAgICovCisgIHN0YXRpYyBjaGFyIHZjbWQgPSAwOyAgICAJ CS8qIFNhdmVkIENvbW1hbmQgKi8KKyAgc3RhdGljIGludCByZWdldCA9IDA7CQkJLyogRmxhZyBm b3IgZXhlY3V0aW5nIFJFR0VUICovCisgIHN0YXRpYyBpbnQgcmV0cmlldmUgPSAwOwkJLyogRmxh ZyBmb3IgZXhlY3V0aW5nIFJFVFJJRVZFICovCisgIHN0YXRpYyBpbnQgb3BrdCA9IDA7CQkJLyog U2VuZCBFeHRlbmRlZCBHRVQgcGFja2V0ICovCisKKyAgc3RhdGljIGludCB4OwkJCQkvKiBHZW5l cmFsLXB1cnBvc2UgaW50ZWdlciAqLworICBzdGF0aWMgY2hhciAqczsJCQkvKiBHZW5lcmFsLXB1 cnBvc2Ugc3RyaW5nIHBvaW50ZXIgKi8KKworLyogTWFjcm9zIC0gTm90ZSwgQkVHSU4gaXMgcHJl ZGVmaW5lZCBieSBXYXJ0IChhbmQgTGV4KSBhcyAic3RhdGUgPSAiLCAqLworLyogQkVHSU4gaXMg Tk9UIGEgR09UTyEgKi8KKyNkZWZpbmUgVElOSVQgaWYgKHRpbml0KDEpIDwgMCkgcmV0dXJuKC05 KQorI2RlZmluZSBTRVJWRSB7IFRJTklUOyByZXNldGMoKTsgbmFrc3RhdGU9MTsgd2hhdD1XX05P VEhJTkc7IGNtYXJnMj0iIjsgXAorc2VuZG1vZGU9U01fU0VORDsgaGF2ZWZzPTA7IHJlY3Vyc2l2 ZT1yX3NhdmU7IGZuc3BhdGg9cF9zYXZlOyBCRUdJTiBzZXJ2ZTsgfQorI2RlZmluZSBSRVNVTUUg eyByZGVidWcoKTsgaWYgKCFzZXJ2ZXIpIHsgd2hlcmVtc2coKTsgcmV0dXJuKDApOyB9IGVsc2Ug XAoraWYgKGp1c3RvbmUpIHsganVzdG9uZT0wOyB3aGVyZW1zZygpOyByZXR1cm4oMCk7IH0gZWxz ZSB7IFNFUlZFOyB9IH0KKworI2lmZGVmIEdGVElNRVIKKyNkZWZpbmUgUVVJVCB4PXF1aWV0OyBx dWlldD0xOyBjbHNpZigpOyBjbHNvZigxKTsgdHNlY3M9Z3RpbWVyKCk7IFwKKyBmcHRzZWNzPWdm dGltZXIoKTsgcXVpZXQ9eDsgcmV0dXJuKHN1Y2Nlc3MpCisjZWxzZQorI2RlZmluZSBRVUlUIHg9 cXVpZXQ7IHF1aWV0PTE7IGNsc2lmKCk7IGNsc29mKDEpOyB0c2Vjcz1ndGltZXIoKTsgcXVpZXQ9 eDsgXAorIHJldHVybihzdWNjZXNzKQorI2VuZGlmIC8qIEdGVElNRVIgKi8KKworLyoKKyAgQnkg bGF0ZSAxOTk5LCB0aGUgYmlnIHN3aXRjaCgpIHN0YXRlbWVudCBnZW5lcmF0ZWQgZnJvbSB0aGUg Zm9sbG93aW5nIHN0YXRlCisgIHRhYmxlIGJlZ2FuIGNob2tpbmcgZXZlbiBnY2MsIHNvIGhlcmUg d2UgZXh0cmFjdCB0aGUgY29kZSBmcm9tIHRoZSBsYXJnZXIKKyAgc3RhdGVzIGludG8gc3RhdGlj IHJvdXRpbmVzIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgY2FzZXMgYW5kIHRoZQorICBzd2l0 Y2goKSBvdmVyYWxsLiAgVGhlIHJvdXRpbmVzIGZvbGxvdyB0aGUgc3RhdGUgdGFibGU7IHRoZSBw cm90b3R5cGVzIGFyZQorICBoZXJlLiAgRWFjaCBvZiB0aGVzZSByb3V0aW5lcyBzaW1wbHkgY29u dGFpbnMgdGhlIHRleHQgZnJvbSB0aGUKKyAgY29ycmVzcG9uZGluZyBjYXNlLCBidXQgd2l0aCBy ZXR1cm4oLTEpIGFkZGVkIGluIGFwcHJvcHJpYXRlIHBsYWNlczsgc2VlCisgIGluc3RydWN0aW9u cyBhZnRlciB0aGUgc3RhdGUgdGFibGUgc3dpdGNoZXIuCisqLworc3RhdGljIGludCByYzsJCQkJ LyogUmV0dXJuIGNvZGUgZm9yIHRoZXNlIHJvdXRpbmVzICovCitzdGF0aWMgaW50IHJjdl9zX3Br dCgpOwkJCS8qIFJlY2VpdmVkIGFuIFMgcGFja2V0ICovCitzdGF0aWMgaW50IHJjdl9maXJzdGRh dGEoKTsJCS8qIFJlY2VpdmVkIGZpcnN0IERhdGEgcGFja2V0ICovCitzdGF0aWMgaW50IHJjdl9z aG9ydHJlcGx5KCk7CQkvKiBTaG9ydCByZXBseSB0byBhIFJFTU9URSBjb21tYW5kICAqLworc3Rh dGljIGludCBzcnZfcXVlcnkoKTsJCQkvKiBTZXJ2ZXIgYW5zd2VycyBhbiBxdWVyeSAqLworc3Rh dGljIGludCBzcnZfY29weSgpOwkJCS8qIFNlcnZlciBleGVjdXRlcyBSRU1PVEUgQ09QWSAqLwor c3RhdGljIGludCBzcnZfcmVuYW1lKCk7CQkvKiBTZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RFIFJFTkFN RSAqLworc3RhdGljIGludCBzcnZfbG9naW4oKTsJCQkvKiBTZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RF IExPR0lOICovCitzdGF0aWMgaW50IHNydl90aW1lb3V0KCk7CQkvKiBTZXJ2ZXIgdGltZXMgb3V0 ICovCisKKworI2RlZmluZSBCRUdJTiBzdGF0ZSA9CisKK2ludCBzdGF0ZSA9IDA7CisKK2ludAor d2FydCgpCit7CisgICAgaW50IGMsYWN0bm87CisgICAgZXh0ZXJuIGNoYXIgdGJsW107CisgICAg d2hpbGUgKDEpIHsKKwljID0gaW5wdXQoKSAtIDMyOworCWRlYnVnKEYwMDAsIlBST1RPIGlucHV0 Iixja2l0b2Eoc3RhdGUpLGMrMzIpOworCWlmIChjIDwgMCB8fCBjID4gOTUpIGMgPSAwOworCWlm ICgoYWN0bm8gPSB0YmxbYyArIHN0YXRlKjk2XSkgIT0gLTEpCisJICAgIHN3aXRjaChhY3Rubykg eworY2FzZSAxOgorICAgIHsgVElOSVQ7CQkJCS8qIFNlbmQgZmlsZShzKSAqLworICAgIGlmIChz aW5pdCgpID4gMCkgQkVHSU4gc3Npbml0OworICAgICAgIGVsc2UgUkVTVU1FOyB9CisgICAgYnJl YWs7CitjYXNlIDI6CisgICAgeyBUSU5JVDsgbmFrc3RhdGUgPSAxOyBCRUdJTiBnZXQ7IH0KKyAg ICBicmVhazsKK2Nhc2UgMzoKKyAgICB7CQkJCQkvKiBDbGllbnQgc2VuZHMgYSBHRVQgY29tbWFu ZCAqLworICAgIFRJTklUOworICAgIHZzdGF0ZSA9IGdldDsKKyAgICByZWdldCA9IDA7CisgICAg cmV0cmlldmUgPSAwOworICAgIG9wa3QgPSAwOworICAgIHZjbWQgPSAwOworI2lmZGVmIFBLVFpF Uk9IQUNLCisgICAgaXBrdGFja1swXSA9IE5VTDsKKyNlbmRpZiAvKiBQS1RaRVJPSEFDSyAqLwor ICAgIGlmIChzaXBrdCgnSScpID49IDApCisgICAgICBCRUdJTiBpcGt0OworICAgIGVsc2UKKyAg ICAgIFJFU1VNRTsKK30KKyAgICBicmVhazsKK2Nhc2UgNDoKKyAgICB7CQkJCQkvKiBDbGllbnQg c2VuZHMgYSBSRVRSSUVWRSBjb21tYW5kICovCisgICAgVElOSVQ7CisgICAgdnN0YXRlID0gZ2V0 OworICAgIHJlZ2V0ID0gMDsKKyAgICByZXRyaWV2ZSA9IDE7CisgICAgb3BrdCA9IDA7CisgICAg dmNtZCA9IDA7CisgICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKKyAgICAgIEJFR0lOIGlwa3Q7Cisg ICAgZWxzZQorICAgICAgUkVTVU1FOworfQorICAgIGJyZWFrOworY2FzZSA1OgorICAgIHsJCQkJ CS8qIENsaWVudCBzZW5kcyBhIFJFR0VUIGNvbW1hbmQgKi8KKyAgICBUSU5JVDsKKyAgICB2c3Rh dGUgPSBnZXQ7CisgICAgcmVnZXQgPSAxOworICAgIHJldHJpZXZlID0gMDsKKyAgICBvcGt0ID0g MDsKKyAgICB2Y21kID0gMDsKKyAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQorICAgICAgQkVHSU4g aXBrdDsKKyAgICBlbHNlCisgICAgICBSRVNVTUU7Cit9CisgICAgYnJlYWs7CitjYXNlIDY6Cisg ICAgewkJCQkJLyogQ2xpZW50IHNlbmRzIEV4dGVuZGVkIEdFVCBQYWNrZXQgKi8KKyAgICBUSU5J VDsKKyAgICB2c3RhdGUgPSBnZXQ7CisgICAgcmVnZXQgPSBvb3B0cyAmIEdPUFRfUkVTOworICAg IHJldHJpZXZlID0gb29wdHMgJiBHT1BUX0RFTDsKKyAgICBvcGt0ID0gMTsKKyAgICB2Y21kID0g MDsKKyAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQorICAgICAgQkVHSU4gaXBrdDsKKyAgICBlbHNl CisgICAgICBSRVNVTUU7Cit9CisgICAgYnJlYWs7CitjYXNlIDc6CisgICAgewkJCQkJLyogQ2xp ZW50IHNlbmRzIGEgSG9zdCBjb21tYW5kICovCisgICAgVElOSVQ7CisgICAgdnN0YXRlID0gcmdl bjsKKyAgICB2Y21kID0gJ0MnOworICAgIGlmIChzaXBrdCgnSScpID49IDApCisgICAgICBCRUdJ TiBpcGt0OworICAgIGVsc2UKKyAgICAgIFJFU1VNRTsKK30KKyAgICBicmVhazsKK2Nhc2UgODoK KyAgICB7IFRJTklUOwkJCQkvKiBDbGllbnQgc2VuZHMgYSBLZXJtaXQgY29tbWFuZCAqLworICAg IHZzdGF0ZSA9IHJnZW47CisgICAgdmNtZCA9ICdLJzsKKyAgICBpZiAoc2lwa3QoJ0knKSA+PSAw KQorICAgICAgQkVHSU4gaXBrdDsKKyAgICBlbHNlCisgICAgICBSRVNVTUU7Cit9CisgICAgYnJl YWs7CitjYXNlIDk6CisgICAgewkJCQkJLyogQ2xpZW50IHNlbmRzIGEgUkVNT1RFIGNvbW1hbmQg Ki8KKyAgICBUSU5JVDsKKyAgICB2c3RhdGUgPSByZ2VuOworICAgIHZjbWQgPSAnRyc7CisgICAg aWYgKHNpcGt0KCdJJykgPj0gMCkKKyAgICAgIEJFR0lOIGlwa3Q7CisgICAgZWxzZQorICAgICAg UkVTVU1FOworfQorICAgIGJyZWFrOworY2FzZSAxMDoKKyAgICB7CQkJCQkvKiBFbnRlciBzZXJ2 ZXIgbW9kZSAqLworICAgIGludCB4OworICAgIHggPSBqdXN0b25lOworICAgIGlmICghRU5BQkxF RChlbl9kZWwpKSB7CQkvKiBJZiBERUxFVEUgaXMgZGlzYWJsZWQgKi8KKwlpZiAoZm5jYWN0ID09 IFhZRlhfQiB8fAkJLyogdW5kbyBhbnkgZmlsZSBjb2xsaXNpb24gYWN0aW9uICovCisJICAgIGZu Y2FjdCA9PSBYWUZYX1UgfHwJCS8qIHRoYXQgY291bGQgcmVzdWx0IGluIGRlbGV0aW9uIG9yICov CisJICAgIGZuY2FjdCA9PSBYWUZYX0EgfHwJCS8qIG1vZGlmaWNhdGlvbiBvZiBleGlzdGluZyBm aWxlcy4gKi8KKwkgICAgZm5jYWN0ID09IFhZRlhfWCkgeworI2lmbmRlZiBOT0lDUAorCSAgICBl eHRlcm4gaW50IGdfZm5jYWN0OworCSAgICBnX2ZuY2FjdCA9IGZuY2FjdDsJCS8qIFNhdmUgY3Vy cmVudCBzZXR0aW5nICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKwkgICAgZm5jYWN0ID0gWFlGWF9S OwkJLyogQ2hhbmdlIHRvIFJFTkFNRSAqLworCSAgICBkZWJ1ZyhGMTAxLCJzZXJ2ZXIgREVMRVRF IGRpc2FibGVkIHNvIGZuY2FjdCBSRU5BTUUiLCIiLGZuY2FjdCk7CisJfQorICAgIH0KKyAgICBT RVJWRTsJCQkJLyogdGluaXQoKSBjbGVhcnMganVzdG9uZS4uLiAqLworICAgIGp1c3RvbmUgPSB4 OworI2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwgIlNFUlZF UiIsICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMTE6 CisgICAgeworICAgIGludCBiMSA9IDAsIGIyID0gMDsKKyAgICBpZiAoIWRhdGEpIFRJTklUOwkJ CS8qICJBQkVORCIgLS0gVGVsbCBvdGhlciBzaWRlLiAqLworI2lmbmRlZiBwZHAxMQorICAgIGlm IChlcGt0ZmxnKSB7CQkJLyogSWYgYmVjYXVzZSBvZiBFLVBBQ0tFVCBjb21tYW5kICovCisJYjEg PSBiY3RsOyBiMiA9IGJjdHU7CQkvKiBTYXZlIGJsb2NrIGNoZWNrIHR5cGUgKi8KKwliY3RsID0g YmN0dSA9IDE7CQkvKiBzZXQgaXQgdG8gMSAqLworICAgIH0KKyNlbmRpZiAvKiBwZHAxMSAqLwor ICAgIGVycnBrdCgoQ0hBUiAqKSJVc2VyIGNhbmNlbGxlZCIpOwkvKiBTZW5kIHRoZSBwYWNrZXQg Ki8KKyNpZm5kZWYgcGRwMTEKKyAgICBpZiAoZXBrdGZsZykgewkJCS8qIFJlc3RvcmUgdGhlIGJs b2NrIGNoZWNrICovCisJZXBrdGZsZyA9IDA7CisJYmN0bCA9IGIxOyBiY3R1ID0gYjI7CisgICAg fQorI2VuZGlmIC8qIHBkcDExICovCisgICAgc3VjY2VzcyA9IDA7CisgICAgcmV0dXJuKDApOwkJ CQkvKiBSZXR1cm4gZnJvbSBwcm90b2NvbC4gKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMTI6Cisg ICAgewkJLyogUmVjZWl2ZSBTZW5kLUluaXQgcGFja2V0LiAqLworICAgIHJjID0gcmN2X3NfcGt0 KCk7CisgICAgY2FuY2VsID0gMDsJCQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIgKi8K KyAgICBkZWJ1ZyhGMTAxLCJyY3Zfc19wa3QiLCIiLHJjKTsKKyAgICBpZiAocmMgPiAtMSkgcmV0 dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCit9CisgICAgYnJlYWs7CitjYXNlIDEzOgorICAg IHsJCQkJLyogR2V0IGFjayBmb3IgSS1wYWNrZXQgKi8KKyAgICBpbnQgeCA9IDA7CisjaWZkZWYg UEtUWkVST0hBQ0sKKyAgICBja3N0cm5jcHkoaXBrdGFjaywoY2hhciAqKXJkYXRhcCxQS1RaRVJP TEVOKTsgLyogU2F2ZSBhIGNvcHkgb2YgdGhlIEFDSyAqLworICAgIGlwa3RsZW4gPSBzdHJsZW4o aXBrdGFjayk7CisjZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KKyAgICBzcGFyKHJkYXRhcCk7CQkJ LyogU2V0IHBhcmFtZXRlcnMgKi8KKyAgICBjYW5jZWwgPSAwOworICAgIHdpbmxvID0gMDsJCQkJ LyogU2V0IHdpbmRvdy1sb3cgYmFjayB0byB6ZXJvICovCisgICAgZGVidWcoRjEwMSwiPGlwa3Q+ WSB3aW5sbyIsIiIsd2lubG8pOworICAgIHVyc2VydmVyID0gMTsJCQkvKiBTbyBJIGtub3cgSSdt IHRhbGtpbmcgdG8gYSBzZXJ2ZXIgKi8KKyAgICBpZiAodmNtZCkgewkJCQkvKiBJZiBzZW5kaW5n IGEgZ2VuZXJpYyBjb21tYW5kICovCisJaWYgKHRpbml0KDApIDwgMCkgcmV0dXJuKC05KTsJLyog SW5pdGlhbGl6ZSBtYW55IHRoaW5ncyAqLworCXggPSBzY21kKHZjbWQsKENIQVIgKiljbWFyZyk7 CS8qIERvIHRoYXQgKi8KKwlpZiAoeCA+PSAwKSB4ID0gMDsJCS8qIChiZWNhdXNlIG9mIE8tUGFj a2V0KSAqLworCWRlYnVnKEYxMDEsInByb3RvIEcgcGFja2V0IHNjbWQiLCIiLHgpOworCXZjbWQg PSAwOwkJCS8qIGFuZCB0aGVuIHVuLXJlbWVtYmVyIGl0LiAqLworICAgIH0gZWxzZSBpZiAodnN0 YXRlID09IGdldCkgeworCWRlYnVnKEYxMDEsIlJFR0VUIHNzdGF0ZSIsIiIsc3N0YXRlKTsKKwl4 ID0gc3Jpbml0KHJlZ2V0LCByZXRyaWV2ZSwgb3BrdCk7IC8qIEdFVCBvciBSRUdFVCwgZXRjICov CisgICAgfQorICAgIGlmICh4IDwgMCkgewkJCS8qIElmIGNvbW1hbmQgd2FzIHRvbyBsb25nICov CisJaWYgKCFzcmltc2cpCisJICBzcmltc2cgPSAiRXJyb3Igc2VuZGluZyBzdHJpbmciOworCWVy cnBrdCgoQ0hBUiAqKXNyaW1zZyk7CQkvKiBjYW5jZWwgYm90aCBzaWRlcy4gKi8KKwlzdWNjZXNz ID0gMDsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICh4ID4gMCkgewkJCS8qIE5lZWQgdG8gc2Vu ZCBtb3JlIE8tUGFja2V0cyAqLworCUJFR0lOIHNzb3BrdDsKKyAgICB9IGVsc2UgeworCXJ0aW1l cigpOwkJCS8qIFJlc2V0IHRoZSBlbGFwc2VkIHNlY29uZHMgdGltZXIuICovCisjaWZkZWYgR0ZU SU1FUgorCXJmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJd2lubG8gPSAwOwkJCS8q IFdpbmRvdyBiYWNrIHRvIDAsIGFnYWluLiAqLworCWRlYnVnKEYxMDEsIjxpcGt0PlkgdnN0YXRl IiwiIix2c3RhdGUpOworCW5ha3N0YXRlID0gMTsJCQkvKiBDYW4gc2VuZCBOQUtzIGZyb20gaGVy ZS4gKi8KKwlCRUdJTiB2c3RhdGU7CQkJLyogU3dpdGNoIHRvIGRlc2lyZWQgc3RhdGUgKi8KKyAg ICB9Cit9CisgICAgYnJlYWs7CitjYXNlIDE0OgorICAgIHsJCQkJLyogR290IEFDSyB0byBPLVBh Y2tldCAqLworICAgIGRlYnVnKEYxMDAsIkNQQ1BSTyA8c3NvcGt0PlkiLCIiLDApOworICAgIHgg PSBzb3BrdCgpOworICAgIGRlYnVnKEYxMDEsIkNQQ1BSTyA8c3NvcGt0PlkgeCIsIiIseCk7Cisg ICAgaWYgKHggPCAwKSB7CQkJLyogSWYgZXJyb3IgKi8KKwllcnJwa3QoKENIQVIgKilzcmltc2cp OwkJLyogY2FuY2VsIGJvdGggc2lkZXMuICovCisJc3VjY2VzcyA9IDA7CisJUkVTVU1FOworICAg IH0gZWxzZSBpZiAoeCA9PSAwKSB7CQkvKiBUaGlzIHdhcyB0aGUgbGFzdCBPLVBhY2tldCAqLwor CXJ0aW1lcigpOwkJCS8qIFJlc2V0IHRoZSBlbGFwc2VkIHNlY29uZHMgdGltZXIuICovCisjaWZk ZWYgR0ZUSU1FUgorCXJmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJd2lubG8gPSAw OwkJCS8qIFdpbmRvdyBiYWNrIHRvIDAsIGFnYWluLiAqLworCWRlYnVnKEYxMDEsIjxzc29wa3Q+ WSB3aW5sbyIsIiIsd2lubG8pOworCW5ha3N0YXRlID0gMTsJCQkvKiBDYW4gc2VuZCBOQUtzIGZy b20gaGVyZS4gKi8KKwlCRUdJTiB2c3RhdGU7CQkJLyogU3dpdGNoIHRvIGRlc2lyZWQgc3RhdGUg Ki8KKyAgICB9CisgICAgZGVidWcoRjEwMSwiQ1BDUFJPIDxzc29wa3Q+WSBub3QgY2hhbmdpbmcg c3RhdGUiLCIiLHgpOworfQorICAgIGJyZWFrOworY2FzZSAxNToKKyAgICB7CQkJCS8qIElnbm9y ZSBFcnJvciByZXBseSB0byBJIHBhY2tldCAqLworICAgIGludCB4ID0gMDsKKyAgICB3aW5sbyA9 IDA7CQkJCS8qIFNldCB3aW5kb3ctbG93IGJhY2sgdG8gemVybyAqLworICAgIGRlYnVnKEYxMDEs IjxpcGt0PkUgd2lubG8iLCIiLHdpbmxvKTsKKyAgICBpZiAodmNtZCkgewkJCQkvKiBJbiBjYXNl IG90aGVyIEtlcm1pdCBkb2Vzbid0ICovCisJaWYgKHRpbml0KDApIDwgMCkgcmV0dXJuKC05KTsK Kwl4ID0gc2NtZCh2Y21kLChDSEFSICopY21hcmcpOwkvKiB1bmRlcnN0YW5kIEktcGFja2V0cy4g Ki8KKwlpZiAoeCA+PSAwKSB4ID0gMDsJCS8qIChiZWNhdXNlIG9mIE8tUGFja2V0KSAqLworCXZj bWQgPSAwOwkJCS8qIE90aGVyd2lzZSBhY3QgYXMgYWJvdmUuLi4gKi8KKyAgICB9IGVsc2UgaWYg KHZzdGF0ZSA9PSBnZXQpIHggPSBzcmluaXQocmVnZXQsIHJldHJpZXZlLCBvcGt0KTsKKyAgICBp ZiAoeCA8IDApIHsJCQkvKiBJZiBjb21tYW5kIHdhcyB0b28gbG9uZyAqLworCWVycnBrdCgoQ0hB UiAqKXNyaW1zZyk7CQkvKiBjYW5jZWwgYm90aCBzaWRlcy4gKi8KKwlzdWNjZXNzID0gMDsKKwlS RVNVTUU7CisgICAgfSBlbHNlIGlmICh4ID4gMCkgewkJCS8qIE5lZWQgdG8gc2VuZCBtb3JlIE8t UGFja2V0cyAqLworCUJFR0lOIHNzb3BrdDsKKyAgICB9IGVsc2UgeworCWZyZWVycGt0KHdpbmxv KTsJCS8qIERpc2NhcmQgdGhlIEVycm9yIHBhY2tldC4gKi8KKwlkZWJ1ZyhGMTAxLCI8aXBrdD5F IHdpbmxvIiwiIix3aW5sbyk7CisJd2lubG8gPSAwOwkJCS8qIEJhY2sgdG8gcGFja2V0IDAgYWdh aW4uICovCisJbmFrc3RhdGUgPSAxOwkJCS8qIENhbiBzZW5kIE5BS3MgZnJvbSBoZXJlLiAqLwor CUJFR0lOIHZzdGF0ZTsKKyAgICB9Cit9CisgICAgYnJlYWs7CitjYXNlIDE2OgorICAgIHsJCS8q IFJlc2VuZCBvZiBwcmV2aW91cyBJLXBrdCBBQ0ssIHNhbWUgc2VxIG51bWJlciAqLworICAgIGZy ZWVycGt0KDApOwkJCS8qIEZyZWUgdGhlIEFDSydzIHJlY2VpdmUgYnVmZmVyICovCisgICAgcmVz ZW5kKDApOwkJCQkvKiBTZW5kIHRoZSBHRVQgcGFja2V0IGFnYWluLiAqLworfQorICAgIGJyZWFr OworY2FzZSAxNzoKKyAgICB7CQkJCS8qIEdldCBJLXBhY2tldCAqLworI2lmbmRlZiBOT1NFUlZF UgorICAgIHNwYXIocmRhdGFwKTsJCQkvKiBTZXQgcGFyYW1ldGVycyBmcm9tIGl0ICovCisgICAg YWNrMShycGFyKCkpOwkJCS8qIFJlc3BvbmQgd2l0aCBvdXIgb3duIHBhcmFtZXRlcnMgKi8KKyNp ZmRlZiBDT01NRU5UCisgICAgcGt0aW5pdCgpOwkJCQkvKiBSZWluaXRpYWxpemUgcGFja2V0IG51 bWJlcnMgKi8KKyNlbHNlCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFRoaXMgY2FuJ3QgYmUgcmln aHQgLSBpdCB1bmRvZXMgdGhlIHN0dWZmIHdlIGp1c3QgbmVnb3RpYXRlZCAqLworICAgIHggPSBq dXN0b25lOworICAgIHRpbml0KDEpOwkJCQkvKiBSZWluaXRpYWxpemUgRVZFUllUSElORyAqLwor ICAgIGp1c3RvbmUgPSB4OwkJCS8qIEJ1dCB0aGlzLi4uICovCisjZWxzZQorICAgIHRpbml0KDAp OwkJCQkvKiBJbml0aWFsaXplIG1vc3QgdGhpbmdzICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworICAgIGNhbmNlbCA9 IDA7CQkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCit9CisgICAgYnJlYWs7Citj YXNlIDE4OgorICAgIHsJCQkJLyogR0VUICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHhf bG9naW4gJiYgIXhfbG9nZ2VkKSB7CisJZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7 CisJU0VSVkU7CisgICAgfSBlbHNlIGlmIChzZ2V0aW5pdCgwLDApIDwgMCkgeworCVJFU1VNRTsK KyAgICB9IGVsc2UgeworI2lmZGVmIENLU1lTTE9HCisJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19Q UiAmJiBja3hsb2dnaW5nKQorCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiR0VU IiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisJQkVHSU4gc3Npbml0 OworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAxOToK KyAgICB7CQkJCS8qIEdFVCAvREVMRVRFIChSRVRSSUVWRSkgKi8KKyNpZm5kZWYgTk9TRVJWRVIK KyAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsKKwllcnJwa3QoKENIQVIgKikiTG9naW4g cmVxdWlyZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9kZWwpKSB7 CisJZXJycGt0KChDSEFSICopIkRlbGV0aW5nIGZpbGVzIGlzIGRpc2FibGVkIik7CisJUkVTVU1F OworICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMCwwKSA8IDApIHsKKwlSRVNVTUU7CisgICAgfSBl bHNlIHsKKwltb3ZpbmcgPSAxOworI2lmZGVmIENLU1lTTE9HCisJaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIi LCAiR0VUIC9ERUxFVEUiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KwlCRUdJTiBzc2luaXQ7CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJl YWs7CitjYXNlIDIwOgorICAgIHsJCQkJLyogR0VUIC9SRUNVUlNJVkUgKi8KKyNpZm5kZWYgTk9T RVJWRVIKKyAgICByZWN1cnNpdmUgPSAxOwkJCS8qIFNldCB0aGVzZSBiZWZvcmUgc2dldGluaXQo KSAqLworICAgIGlmIChmbnNwYXRoID09IFBBVEhfT0ZGKQorICAgICAgZm5zcGF0aCA9IFBBVEhf UkVMOwkJLyogRG9uJ3Qgd29ycnksIHRoZXkgd2lsbCBiZSAqLworICAgIGlmICh4X2xvZ2luICYm ICF4X2xvZ2dlZCkgewkJLyogcmVzZXQgbmV4dCB0aW1lIHRocm91Z2guICovCisJZXJycGt0KChD SEFSICopIkxvZ2luIHJlcXVpcmVkIik7CisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAoc2dldGlu aXQoMCwwKSA8IDApIHsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKyNpZmRlZiBDS1NZU0xPRwor CWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgIGNrc3lzbG9nKFNZ U0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCAvUkVDVVJTSVZFIiwgKGNoYXIgKilzcnZjbWQpOwor I2VuZGlmIC8qIENLU1lTTE9HICovCisJQkVHSU4gc3Npbml0OworICAgIH0KKyNlbmRpZiAvKiBO T1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAyMToKKyAgICB7CQkJCS8qIEdFVCAvUkVD VVJTSVZFIC9ERUxFVEUgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICByZWN1cnNpdmUgPSAxOwkJ CS8qIFNldCB0aGVzZSBiZWZvcmUgc2dldGluaXQoKSAqLworICAgIGlmIChmbnNwYXRoID09IFBB VEhfT0ZGKQorICAgICAgZm5zcGF0aCA9IFBBVEhfUkVMOwkJLyogRG9uJ3Qgd29ycnksIHRoZXkg d2lsbCBiZSAqLworICAgIG1vdmluZyA9IDE7CQkJCS8qIHJlc2V0IG5leHQgdGltZSB0aHJvdWdo LiAqLworICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCWVycnBrdCgoQ0hBUiAqKSJM b2dpbiByZXF1aXJlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKCFFTkFCTEVEKGVuX2Rl bCkpIHsKKwllcnJwa3QoKENIQVIgKikiRGVsZXRpbmcgZmlsZXMgaXMgZGlzYWJsZWQiKTsKKwlS RVNVTUU7CisgICAgfSBlbHNlIGlmIChzZ2V0aW5pdCgwLDApIDwgMCkgeworCVJFU1VNRTsKKyAg ICB9IGVsc2UgeworI2lmZGVmIENLU1lTTE9HCisJaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAm JiBja3hsb2dnaW5nKQorCSAgY2tzeXNsb2coU1lTTEdfUFIsMSwic2VydmVyIiwKKwkJICAgIkdF VCAvUkVDVVJTSVZFIC9ERUxFVEUiLChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xP RyAqLworCUJFR0lOIHNzaW5pdDsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAg ICBicmVhazsKK2Nhc2UgMjI6CisgICAgewkJCQkvKiBHRVQgL1JFQ09WRVIgKFJFR0VUKSAqLwor I2lmbmRlZiBOT1NFUlZFUgorICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCWVycnBr dCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOworCVNFUlZFOworICAgIH0gZWxzZSBpZiAoc2dl dGluaXQoMSwwKSA8IDApIHsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKyNpZmRlZiBDS1NZU0xP RworCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgIGNrc3lzbG9n KFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCAvUkVDT1ZFUiIsIChjaGFyICopc3J2Y21kKTsK KyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCUJFR0lOIHNzaW5pdDsKKyAgICB9CisjZW5kaWYgLyog Tk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMjM6CisgICAgewkJCQkvKiBFeHRlbmRl ZCBHRVQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQp IHsJCS8qIChhbnkgY29tYmluYXRpb24gb2Ygb3B0aW9ucykgKi8KKwllcnJwa3QoKENIQVIgKiki TG9naW4gcmVxdWlyZWQiKTsKKwlTRVJWRTsKKyAgICB9IGVsc2UgaWYgKCh4ID0gc2dldGluaXQo MCwxKSkgPCAwKSB7CisJZGVidWcoRjEwMSwiQ0tDUFJPIDxzZXJ2ZT5PIHNnZXRpbml0IGZhaWwi LCIiLHgpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKHggPT0gMCkgeworCWRlYnVnKEYxMDEs IkNLQ1BSTyA8c2VydmU+TyBzZ2V0aW5pdCBkb25lIiwiIix4KTsKKyNpZmRlZiBDS1NZU0xPRwor CWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgIGNrc3lzbG9nKFNZ U0xHX1BSLCAxLCAic2VydmVyIiwgIkVYVEVOREVEIEdFVCIsIChjaGFyICopc3J2Y21kKTsKKyNl bmRpZiAvKiBDS1NZU0xPRyAqLworCUJFR0lOIHNzaW5pdDsKKyAgICB9IGVsc2UgewkJCQkvKiBP dGhlcndpc2Ugc3RheSBpbiB0aGlzIHN0YXRlICovCisJZGVidWcoRjEwMSwiQ0tDUFJPIDxzZXJ2 ZT5PIHNnZXRpbml0IFRCQyIsIiIseCk7CisJYWNrKCk7CisJQkVHSU4gcm9wa3Q7CisgICAgfQor I2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDI0OgorICAgIHsKKyNp Zm5kZWYgTk9TRVJWRVIKKyAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsJCS8qIChhbnkg Y29tYmluYXRpb24gb2Ygb3B0aW9ucykgKi8KKwllcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWly ZWQiKTsKKwlTRVJWRTsKKyAgICB9IGVsc2UgaWYgKCh4ID0gc2dldGluaXQoMCwxKSkgPCAwKSB7 CisJZGVidWcoRjEwMSwiQ0tDUFJPIDxyb3BrdD5PIHNnZXRpbml0IGZhaWwiLCIiLHgpOworCVJF U1VNRTsKKyAgICB9IGVsc2UgaWYgKHggPT0gMCkgeworCWRlYnVnKEYxMDEsIkNLQ1BSTyA8cm9w a3Q+TyBzZ2V0aW5pdCBkb25lIiwiIix4KTsKKyNpZmRlZiBDS1NZU0xPRworCWlmIChja3hzeXNs b2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAi c2VydmVyIiwgIkVYVEVOREVEIEdFVCIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZ U0xPRyAqLworCUJFR0lOIHNzaW5pdDsKKyAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2Ugc3Rh eSBpbiB0aGlzIHN0YXRlICovCisJZGVidWcoRjEwMSwiQ0tDUFJPIDxyb3BrdD5PIHNnZXRpbml0 IFRCQyIsIiIseCk7CisJYWNrKCk7CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9Cisg ICAgYnJlYWs7CitjYXNlIDI1OgorICAgIHsJCQkJLyogR2VuZXJpYyBzZXJ2ZXIgY29tbWFuZCAq LworI2lmbmRlZiBOT1NFUlZFUgorICAgIHNydnB0ciA9IHNydmNtZDsJCQkvKiBQb2ludCB0byBj b21tYW5kIGJ1ZmZlciAqLworICAgIGRlY29kZShyZGF0YXAscHV0c3J2LDApOwkJLyogRGVjb2Rl IHBhY2tldCBkYXRhIGludG8gaXQgKi8KKyAgICBwdXRzcnYoTlVMKTsJCQkvKiBJbnNlcnQgYSBj b3VwbGUgbnVsbHMgKi8KKyAgICBwdXRzcnYoTlVMKTsJCQkvKiBmb3IgdGVybWluYXRpb24gKi8K KyAgICBpZiAoc3J2Y21kWzBdKSB7CisJc3N0YXRlID0gc3J2Y21kWzBdOwkJLyogU2V0IHJlcXVl c3RlZCBzdGFydCBzdGF0ZSAqLworCWlmICh4X2xvZ2luICYmICF4X2xvZ2dlZCAmJgkvKiBMb2dp biByZXF1aXJlZD8gKi8KKwkgICAgLyogTG9naW4sIExvZ291dCwgYW5kIEhlbHAgYXJlIGFsbG93 ZWQgd2hlbiBub3QgbG9nZ2VkIGluICovCisJICAgIHNzdGF0ZSAhPSAnSScgJiYgc3N0YXRlICE9 ICdMJyAmJiBzc3RhdGUgIT0gJ0gnKSB7CisJICAgIGVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1 aXJlZCIpOworCSAgICBTRVJWRTsKKwl9IGVsc2UgeworCSAgICBuYWtzdGF0ZSA9IDA7CQkvKiBO b3cgSSdtIHRoZSBzZW5kZXIuICovCisJICAgIHdoYXQgPSBXX1JFTU87CQkvKiBEb2luZyBhIFJF TU9URSBjb21tYW5kLiAqLworI2lmZGVmIFNUUkVBTUlORworCSAgICBpZiAoIXN0cmVhbWluZykK KyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgICAgICBpZiAodGltaW50IDwgMSkKKwkJdGltaW50 ID0gY2hrdGltbyhydGltbyx0aW1lZik7IC8qIFN3aXRjaCB0byBwZXItcGFja2V0IHRpbWVyICov CisJICAgIGJpbmFyeSA9IFhZRlRfVDsJCS8qIFN3aXRjaCB0byB0ZXh0IG1vZGUgKi8KKwkgICAg QkVHSU4gZ2VuZXJpYzsJCS8qIFN3aXRjaCB0byBnZW5lcmljIGNvbW1hbmQgc3RhdGUgKi8KKwl9 CisgICAgfSBlbHNlIHsKKwllcnJwa3QoKENIQVIgKikiQmFkbHkgZm9ybWVkIHNlcnZlciBjb21t YW5kIik7IC8qIHJlcG9ydCBlcnJvciAqLworCVJFU1VNRTsJCQkvKiAmIGdvIGJhY2sgdG8gc2Vy dmVyIGNvbW1hbmQgd2FpdCAqLworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAg IGJyZWFrOworY2FzZSAyNjoKKyAgICB7CQkJCS8qIFJlY2VpdmUgSG9zdCBjb21tYW5kICovCisj aWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CisJZXJycGt0 KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7CisJU0VSVkU7CisgICAgfSBlbHNlIGlmICghRU5B QkxFRChlbl9ob3MpKSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBIT1NUIGRpc2FibGVkIik7 CisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAobm9wdXNoKSB7CisJZXJycGt0KChDSEFSICopIkhP U1QgY29tbWFuZHMgbm90IGF2YWlsYWJsZSIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworCXNy dnB0ciA9IHNydmNtZDsJCS8qIFBvaW50IHRvIGNvbW1hbmQgYnVmZmVyICovCisJZGVjb2RlKHJk YXRhcCxwdXRzcnYsMCk7CS8qIERlY29kZSBjb21tYW5kIHBhY2tldCBpbnRvIGl0ICovCisJcHV0 c3J2KE5VTCk7CQkJLyogTnVsbC10ZXJtaW5hdGUgKi8KKwluYWtzdGF0ZSA9IDA7CQkJLyogTm93 IHNlbmRpbmcsIG5vdCByZWNlaXZpbmcgKi8KKwliaW5hcnkgPSBYWUZUX1Q7CQkvKiBTd2l0Y2gg dG8gdGV4dCBtb2RlICovCisJaWYgKHN5c2NtZCgoY2hhciAqKXNydmNtZCwiIikpIHsgLyogVHJ5 IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKwkgICAgd2hhdCA9IFdfUkVNTzsJCS8qIERvaW5n IGEgUkVNT1RFIGNvbW1hbmQuICovCisjaWZkZWYgU1RSRUFNSU5HCisJICAgIGlmICghc3RyZWFt aW5nKQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAgICAgIGlmICh0aW1pbnQgPCAxKQorCQl0 aW1pbnQgPSBjaGt0aW1vKHJ0aW1vLHRpbWVmKTsgLyogU3dpdGNoIHRvIHBlci1wYWNrZXQgdGlt ZXIgKi8KKyNpZmRlZiBDS1NZU0xPRworCSAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYm IGNreGxvZ2dpbmcpCisJICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVN T1RFIEhPU1QiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwkgICAg QkVHSU4gc3Npbml0OwkJLyogSWYgT0ssIHNlbmQgYmFjayBpdHMgb3V0cHV0ICovCisJfSBlbHNl IHsJCQkvKiBPdGhlcndpc2UgKi8KKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGRvIHN5c3Rl bSBjb21tYW5kIik7IC8qIHJlcG9ydCBlcnJvciAqLworCSAgICBSRVNVTUU7CQkJLyogJiBnbyBi YWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KKwl9CisgICAgfQorI2VuZGlmIC8qIE5PU0VS VkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDI3OgorICAgIHsJCQkJLyogSW50ZXJydXB0ZWQg b3IgY29ubmVjdGlvbiBsb3N0ICovCisgICAgcmMgPSBzcnZfdGltZW91dCgpOworICAgIGRlYnVn KEYxMDEsInNydl90aW1lb3V0IiwiIixyYyk7CisgICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7 CQkvKiAoc2VlIGJlbG93KSAqLworfQorICAgIGJyZWFrOworY2FzZSAyODoKKyAgICB7CQkJCS8q IFNlcnZlciBnb3QgYSBOQUsgaW4gY29tbWFuZC13YWl0ICovCisjaWZuZGVmIE5PU0VSVkVSCisg ICAgZXJycGt0KChDSEFSICopIkRpZCB5b3Ugc2F5IFJFQ0VJVkUgaW5zdGVhZCBvZiBHRVQ/Iik7 CisgICAgUkVTVU1FOworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNl IDI5OgorICAgIHsJCQkJLyogQW55IG90aGVyIGNvbW1hbmQgaW4gdGhpcyBzdGF0ZSAqLworI2lm bmRlZiBOT1NFUlZFUgorICAgIGlmIChjICE9ICgnRScgLSBTUCkgJiYgYyAhPSAoJ1knIC0gU1Ap KSAvKiBleGNlcHQgRSBhbmQgWSBwYWNrZXRzLiAqLworICAgICAgZXJycGt0KChDSEFSICopIlVu aW1wbGVtZW50ZWQgc2VydmVyIGZ1bmN0aW9uIik7CisgICAgLyogSWYgd2UgYW5zd2VyIGFuIEUg d2l0aCBhbiBFLCB3ZSBnZXQgYW4gaW5maW5pdGUgbG9vcC4gKi8KKyAgICAvKiBBIFkgKEFDSykg Y2FuIHNob3cgdXAgaGVyZSBpZiB3ZSBzZW50IGJhY2sgYSBzaG9ydC1mb3JtIHJlcGx5IHRvICov CisgICAgLyogYSBHIHBhY2tldCBhbmQgaXQgd2FzIGVjaG9lZC4gIEFDS3MgY2FuIGJlIHNhZmVs eSBpZ25vcmVkIGhlcmUuICovCisgICAgUkVTVU1FOwkJCQkvKiBHbyBiYWNrIHRvIHNlcnZlciBj b21tYW5kIHdhaXQuICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nh c2UgMzA6CisgICAgewkJCQkvKiBMb2dpbi9PdXQgKi8KKyAgICByYyA9IHNydl9sb2dpbigpOwor ICAgIGRlYnVnKEYxMDEsIjxnZW5lcmljPkkgc3J2X2xvZ2luIiwiIixyYyk7CisgICAgaWYgKHJj ID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLworfQorICAgIGJyZWFrOworY2Fz ZSAzMToKKyAgICB7CQkJCS8qIEdvdCBSRU1PVEUgQ0QgY29tbWFuZCAqLworI2lmbmRlZiBOT1NF UlZFUgorI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBj a3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RF IENEIiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgaWYgKCFF TkFCTEVEKGVuX2N3ZCkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIENEIGRpc2FibGVkIik7 CisJUkVTVU1FOworICAgIH0gZWxzZSB7CisJY2hhciAqIHAgPSBOVUxMOworCXggPSBjd2QoKGNo YXIgKikoc3J2Y21kKzEpKTsJLyogVHJ5IHRvIGNoYW5nZSBkaXJlY3RvcnkgKi8KKyNpZmRlZiBJ S1NEQgorCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBDRCIsIChjaGFyICop KHNydmNtZCsyKSwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisJaWYgKCF4KSB7CQkJLyogRmFp bGVkICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBjaGFuZ2UgZGlyZWN0b3J5Iik7CisJ ICAgIFJFU1VNRTsJCQkvKiBCYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KKwl9IGVsc2Ug aWYgKHggPT0gMikgewkJLyogVXNlciB3YW50cyBtZXNzYWdlICovCisJICAgIGlmICghRU5BQkxF RChlbl90eXApKSB7CS8qIE1lc3NhZ2VzIChSRU1PVEUgVFlQRSkgZGlzYWJsZWQ/ICovCisJCWVy cnBrdCgoQ0hBUiAqKSJSRU1PVEUgVFlQRSBkaXNhYmxlZCIpOworCQlSRVNVTUU7CisJICAgIH0g ZWxzZSB7CQkJLyogVFlQRSBpcyBlbmFibGVkICovCisJCWludCBpOworCQlmb3IgKGkgPSAwOyBp IDwgODsgaSsrKSB7CisJCSAgICBpZiAoemNoa2koY2Rtc2dmaWxlW2ldKSA+IC0xKSB7CisJCQli cmVhazsKKwkJICAgIH0KKwkJfQorCQliaW5hcnkgPSBYWUZUX1Q7CS8qIFVzZSB0ZXh0IG1vZGUg Zm9yIHRoaXMuICovCisJCWlmIChpIDwgOCAmJiBzbmR0eXBlKGNkbXNnZmlsZVtpXSkpIHsgLyog SGF2ZSByZWFkbWUgZmlsZT8gKi8KKwkJICAgIEJFR0lOIHNzaW5pdDsJLyogT0sgKi8KKwkJfSBl bHNlIHsJCS8qIG5vdCBPSyAqLworCQkgICAgcCA9IHpndGRpcigpOworCQkgICAgaWYgKCFwKSBw ID0gIiI7CisJCSAgICBzdWNjZXNzID0gKCpwKSA/IDEgOiAwOworCQkgICAgYWNrMSgoQ0hBUiAq KXApOwkvKiBBQ0sgd2l0aCBuZXcgZGlyZWN0b3J5IG5hbWUgKi8KKwkJICAgIHN1Y2Nlc3MgPSAx OworCQkgICAgUkVTVU1FOwkJLyogd2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLworCQl9 CisJICAgIH0KKwl9IGVsc2UgewkJCS8qIFVzZXIgZG9lc24ndCB3YW50IG1lc3NhZ2UgKi8KKwkg ICAgcCA9emd0ZGlyKCk7CisJICAgIGlmICghcCkgcCA9ICIiOworCSAgICBzdWNjZXNzID0gKCpw KSA/IDEgOiAwOworCSAgICBhY2sxKChDSEFSICopcCk7CisJICAgIHN1Y2Nlc3MgPSAxOworCSAg ICBSRVNVTUU7CQkJLyogV2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLworCX0KKyAgICB9 CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMzI6CisgICAgewkJ CQkvKiBHb3QgUkVNT1RFIFBXRCBjb21tYW5kICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYg Q0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisg ICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgUFdEIiwgTlVMTCk7 CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICBpZiAoIUVOQUJMRUQoZW5fY3dkKSkgeworCWVy cnBrdCgoQ0hBUiAqKSJSRU1PVEUgQ0QgZGlzYWJsZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNl IHsKKwlpZiAoZW5jc3RyKChDSEFSICopemd0ZGlyKCkpID4gLTEpIHsgLyogRW5jb2RlIGN1cnJl bnQgZGlyZWN0b3J5ICovCisJICAgIGFjazEoZGF0YSk7CQkJLyogSWYgaXQgZml0cywgc2VuZCBp dCBiYWNrIGluIEFDSyAqLworCSAgICBzdWNjZXNzID0gMTsKKwl9IGVsc2UgewkJCS8qIEZhaWxl ZCAqLworCSAgICBhY2soKTsJCQkvKiBTZW5kIGVtcHR5IEFDSyAqLworCSAgICBzdWNjZXNzID0g MDsJCS8qIGFuZCBpbmRpY2F0ZSBmYWlsdXJlIGxvY2FsbHkgKi8KKwl9CisJUkVTVU1FOwkJCQkv KiBCYWNrIHRvIHNlcnZlciBjb21tYW5kIHdhaXQgKi8KKyAgICB9CisjZW5kaWYgLyogTk9TRVJW RVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMzM6CisgICAgewkJCQkvKiBSRU1PVEUgRElSRUNU T1JZIGNvbW1hbmQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBjaGFyICpuMjsKKyNpZmRlZiBD S1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAg ICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBESVJFQ1RPUlkiLCAo Y2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICBpZiAoIUVOQUJMRUQo ZW5fZGlyKSkgewkJLyogSWYgRElSIGlzIGRpc2FibGVkLCAqLworCWVycnBrdCgoQ0hBUiAqKSJS RU1PVEUgRElSRUNUT1JZIGRpc2FibGVkIik7IC8qIHJlZnVzZS4gKi8KKwlSRVNVTUU7CisgICAg fSBlbHNlIHsJCQkJLyogRElSIGlzIGVuYWJsZWQuICovCisjaWZkZWYgSUtTREIKKwlpZiAoaWtk Ym9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1PVEUgRElSIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAi Iik7CisjZW5kaWYgLyogSUtTREIgKi8KKwlpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJLyogQnV0 IENXRCBpcyBkaXNhYmxlZCAqLworCSAgICB6c3RyaXAoKGNoYXIgKikoc3J2Y21kKzIpLCZuMik7 IC8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5hbWUsICovCisJICAgIGlmIChzdHJjbXAoKGNo YXIgKikoc3J2Y21kKzIpLG4yKSkgeyAvKiBzbyByZWZ1c2UuICovCisJCWVycnBrdCgoQ0hBUiAq KSJBY2Nlc3MgZGVuaWVkIik7CisJCVJFU1VNRTsJCQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3Qg YSBnb3RvISAqLworCSAgICB9CisJfQorCWlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkJLyogSXQn cyBPSyB0byBnbyBhaGVhZC4gKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIG4yID0gKCooc3J2Y21k KzIpKSA/IERJUkNNRCA6IERJUkNNMjsKKwkgICAgaWYgKHN5c2NtZChuMiwoY2hhciAqKShzcnZj bWQrMikpKSAgLyogSWYgaXQgY2FuIGJlIGRvbmUgKi8KKyNlbHNlCisJICAgIGludCB4OworCSAg ICBpZiAoKHggPSBzbmRkaXIoKGNoYXIqKShzcnZjbWQrMikpKSA+IDApCisjZW5kaWYgLyogQ09N TUVOVCAqLworCSAgICB7CisJCUJFR0lOIHNzaW5pdDsJCS8qIHNlbmQgdGhlIHJlc3VsdHMgYmFj azsgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkJaWYgKHggPCAwKQorCQkg IGVycnBrdCgoQ0hBUiAqKSJObyBmaWxlcyBtYXRjaCIpOworCQllbHNlCisJCSAgZXJycGt0KChD SEFSICopIkNhbid0IGxpc3QgZGlyZWN0b3J5Iik7CisJCVJFU1VNRTsJCQkvKiByZXR1cm4gdG8g c2VydmVyIGNvbW1hbmQgd2FpdCAqLworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NF UlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAzNDoKKyAgICB7CQkJCS8qIFJFTU9URSBERUxF VEUgKEVyYXNlKSAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIGNoYXIgKm4yOworI2lmZGVmIENL U1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAg ICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIERFTEVURSIsIChjaGFy ICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgIGlmICghRU5BQkxFRChlbl9k ZWwpKSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBERUxFVEUgZGlzYWJsZWQiKTsKKwlSRVNV TUU7CisgICAgfSBlbHNlIHsJCQkJLyogREVMRVRFIGlzIGVuYWJsZWQgKi8KKyNpZmRlZiBJS1NE QgorCWlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBERUxFVEUiLCAoY2hhciAq KShzcnZjbWQrMiksICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworCWlmICghRU5BQkxFRChlbl9j d2QpKSB7CQkvKiBidXQgQ1dEIGlzIGRpc2FibGVkICovCisJICAgIHpzdHJpcCgoY2hhciAqKShz cnZjbWQrMiksJm4yKTsgLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KKwkgICAg aWYgKHN0cmNtcCgoY2hhciAqKShzcnZjbWQrMiksbjIpKSB7IC8qIHNvIHJlZnVzZS4gKi8KKwkJ ZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQiKTsKKwkJUkVTVU1FOwkJCS8qIFJlbWVtYmVy LCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCisJICAgIH0KKwl9IGVsc2UgaWYgKGlzZGlyKChjaGFy ICopKHNydmNtZCsyKSkpIHsgLyogQSBkaXJlY3RvcnkgbmFtZT8gKi8KKwkgICAgZXJycGt0KChD SEFSICopIkl0J3MgYSBkaXJlY3RvcnkiKTsKKwkgICAgUkVTVU1FOworCX0KKwlpZiAoc3RhdGUg PT0gZ2VuZXJpYykgewkJLyogSXQncyBPSyB0byBnbyBhaGVhZC4gKi8KKwkgICAgaW50IHg7CisJ ICAgIGlmICgoeCA9IHNuZGRlbCgoY2hhciopKHNydmNtZCsyKSkpID4gMCkgeworCQlCRUdJTiBz c2luaXQ7CQkvKiBJZiBPSyBzZW5kIHJlc3VsdHMgYmFjayAqLworCSAgICB9IGVsc2UgewkJCS8q IG90aGVyd2lzZSAqLworCQlpZiAoeCA8IDApCisJCSAgZXJycGt0KChDSEFSICopIkZpbGUgbm90 IGZvdW5kIik7IC8qIHJlcG9ydCBmYWlsdXJlICovCisJCWVsc2UKKwkJICBlcnJwa3QoKENIQVIg KikiREVMRVRFIGZhaWxlZCIpOworCQlSRVNVTUU7CQkJLyogJiByZXR1cm4gdG8gc2VydmVyIGNv bW1hbmQgd2FpdCAqLworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLwor fQorICAgIGJyZWFrOworY2FzZSAzNToKKyAgICB7CQkJCS8qIEZJTklTSCAqLworI2lmbmRlZiBO T1NFUlZFUgorI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAm JiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiRklO SVNIIiwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlm IChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlNFUlZFUiBGSU5JU0giLCAiIiwgIiIpOworI2Vu ZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFFTkFCTEVEKGVuX2ZpbikpIHsKKwllcnJwa3QoKENI QVIgKikiRklOSVNIIGRpc2FibGVkIik7CisJUkVTVU1FOworICAgIH0gZWxzZSB7CisJYWNrKCk7 CQkJCS8qIEFja25vd2xlZGdlICovCisJeHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkvKiBEaXNw bGF5ICovCisJc3VjY2VzcyA9IDE7CisJcmV0dXJuKDApOwkJCS8qIERvbmUgKi8KKyAgICB9Cisj ZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMzY6CisgICAgewkJCQkv KiBFWElUICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4 c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19Q UiwgMSwgInNlcnZlciIsICJSRU1PVEUgRVhJVCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9H ICovCisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LCJSRU1P VEUgRVhJVCIsICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAoIUVOQUJMRUQo ZW5feGl0KSkgeworCWVycnBrdCgoQ0hBUiAqKSJFWElUIGRpc2FibGVkIik7CisJUkVTVU1FOwor ICAgIH0gZWxzZSB7CisJYWNrKCk7CQkJCS8qIEFja25vd2xlZGdlICovCisJeHhzY3JlZW4oU0NS X1RDLDAsMEwsIiIpOwkvKiBEaXNwbGF5ICovCisJZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOwor ICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAzNzoKKyAg ICB7CQkJCS8qIEJZRSAoTG9nb3V0KSAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lmZGVmIENLU1lT TE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAg Y2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiQllFIiwgTlVMTCk7CisjZW5kaWYgLyog Q0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdo YXQsIlNFUlZFUiBCWUUiLCAiIiwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFF TkFCTEVEKGVuX2J5ZSkpIHsKKwllcnJwa3QoKENIQVIgKikiQllFIGRpc2FibGVkIik7CisJUkVT VU1FOworICAgIH0gZWxzZSB7CisJYWNrKCk7CQkJCS8qIEFja25vd2xlZGdlICovCisJc3VjY2Vz cyA9IDE7CisJbXNsZWVwKDc1MCk7CQkJLyogR2l2ZSB0aGUgQUNLIHRpbWUgdG8gZ2V0IG91dCAq LworCWlmIChsb2NhbCkKKwkgIHR0cmVzKCk7CQkJLyogUmVzZXQgdGhlIHRlcm1pbmFsICovCisJ eHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkvKiBEaXNwbGF5ICovCisJZG9jbGVhbigxKTsJCQkv KiBDbGVhbiB1cCBmaWxlcywgZXRjICovCisjaWZkZWYgREVCVUcKKwlkZWJ1ZyhGMTAwLCJDLUtl cm1pdCBCWUUgLSBMb2dnaW4gb3V0Li4uIiwiIiwwKTsKKwl6Y2xvc2UoWkRGSUxFKTsKKyNlbmRp ZiAvKiBERUJVRyAqLworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorCWlmIChpbnNlcnZl cikKKwkgIGNreGxvZ291dCgpOworCWVsc2UKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlm IC8qIElLU0QgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9MSVNURU4KKwkgIGlmIChu ZXR3b3JrICYmIHRjcHNyZmQgPiAwICYmICFpbnNlcnZlcikKKwkgICAgZG9leGl0KEdPT0RfRVhJ VCx4aXRzdGEpOworCWVsc2UKKyNlbmRpZiAvKiBOT0xJU1RFTiAqLworI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworCSAgcmV0dXJuKHprc2VsZigpKTsJCS8qIFRyeSB0byBsb2cgc2VsZiBvdXQgKi8K KyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKyAgICBicmVhazsKK2Nhc2UgMzg6Cisg ICAgewkJCQkvKiBSRU1PVEUgSEVMUCAqLworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIs IDEsICJzZXJ2ZXIiLCAiUkVNT1RFIEhFTFAiLCBOVUxMKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworI2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RF IEhFTFAiLCAiIiwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisjaWZuZGVmIE5PU0VSVkVSCisg ICAgaWYgKHNuZGhscCgpKSB7CisJQkVHSU4gc3Npbml0OwkJCS8qIHRyeSB0byBzZW5kIGl0ICov CisgICAgfSBlbHNlIHsJCQkJLyogSWYgbm90IG9rLCAqLworCWVycnBrdCgoQ0hBUiAqKSJDYW4n dCBzZW5kIGhlbHAiKTsgLyogc2VuZCBlcnJvciBtZXNzYWdlIGluc3RlYWQgKi8KKwlSRVNVTUU7 CQkJCS8qIGFuZCByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworICAgIH0KKyNlbmRp ZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSAzOToKKyAgICB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBSRU5BTUUgKi8KKyAgICByYyA9IHNydl9yZW5h bWUoKTsKKyAgICBkZWJ1ZyhGMTAxLCJzcnZfcmVuYW1lIiwiIixyYyk7CisgICAgaWYgKHJjID4g LTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLworfQorICAgIGJyZWFrOworY2FzZSA0 MDoKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFTU9URSBDT1BZICovCisg ICAgcmMgPSBzcnZfY29weSgpOworICAgIGRlYnVnKEYxMDEsInNydl9jb3B5IiwiIixyYyk7Cisg ICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAoc2VlIGJlbG93KSAqLworfQorICAgIGJy ZWFrOworY2FzZSA0MToKKyAgICB7CQkJCS8qIFJFTU9URSBTRVQgKi8KKyNpZmRlZiBDS1NZU0xP RworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNr c3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBTRVQiLCAoY2hhciAqKXNydmNt ZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRlZiBJS1NE QgorICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBTRVQiLCAoY2hhciAq KShzcnZjbWQrMSksICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIGlmICghRU5BQkxFRChl bl9zZXQpKSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBTRVQgZGlzYWJsZWQiKTsKKwlSRVNV TUU7CisgICAgfSBlbHNlIHsKKwlpZiAocmVtc2V0KChjaGFyICopKHNydmNtZCsxKSkpIHsgLyog VHJ5IHRvIGRvIHdoYXQgdGhleSBhc2sgKi8KKwkgICAgc3VjY2VzcyA9IDE7CisJICAgIGFjaygp OwkJCS8qIElmIE9LLCB0aGVuIGFja25vd2xlZGdlICovCisJfSBlbHNlCQkJCS8qIE90aGVyd2lz ZSAqLworCSAgZXJycGt0KChDSEFSICopIlVua25vd24gUkVNT1RFIFNFVCBwYXJhbWV0ZXIiKTsg LyogZ2l2ZSBlcnJvciBtc2cgKi8KKwlSRVNVTUU7CQkJCS8qIFJldHVybiB0byBzZXJ2ZXIgY29t bWFuZCB3YWl0ICovCisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7 CitjYXNlIDQyOgorICAgIHsJCQkJLyogUkVNT1RFIFRZUEUgKi8KKyNpZm5kZWYgTk9TRVJWRVIK KyAgICBjaGFyICpuMjsKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVy IiwgIlJFTU9URSBUWVBFIiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICov CisgICAgaWYgKCFFTkFCTEVEKGVuX3R5cCkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIFRZ UEUgZGlzYWJsZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKyNpZmRlZiBJS1NEQgorCWlm IChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBUWVBFIiwgKGNoYXIgKikoc3J2Y21k KzIpLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKwlpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkJ LyogSWYgQ1dEIGRpc2FibGVkICovCisJICAgIHpzdHJpcCgoY2hhciAqKShzcnZjbWQrMiksJm4y KTsgLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KKwkgICAgaWYgKHN0cmNtcCgo Y2hhciAqKShzcnZjbWQrMiksbjIpKSB7IC8qIHJlZnVzZS4gKi8KKwkJZXJycGt0KChDSEFSICop IkFjY2VzcyBkZW5pZWQiKTsKKwkJUkVTVU1FOwkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBh IGdvdG8hICovCisJICAgIH0KKwl9CisJaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0J3Mg T0sgdG8gZ28gYWhlYWQuICovCisJICAgIGJpbmFyeSA9IFhZRlRfVDsJCS8qIFVzZSB0ZXh0IG1v ZGUgZm9yIHRoaXMuICovCisJICAgIGlmICgJCQkvKiAoUkVTVU1FIGRpZG4ndCBjaGFuZ2Ugc3Rh dGUpICovCisjaWZkZWYgQ09NTUVOVAorCSAgICAgIHN5c2NtZChUWVBDTUQsKGNoYXIgKikoc3J2 Y21kKzIpKQkvKiBPbGQgd2F5ICovCisjZWxzZQorCSAgICAgIHNuZHR5cGUoKGNoYXIgKikoc3J2 Y21kKzIpKSAvKiBOZXcgd2F5ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkpCisJICAgICAg QkVHSU4gc3Npbml0OwkJLyogT0sgKi8KKwkgICAgZWxzZSB7CQkJLyogbm90IE9LICovCisJCWVy cnBrdCgoQ0hBUiAqKSJDYW4ndCB0eXBlIGZpbGUiKTsgLyogZ2l2ZSBlcnJvciBtZXNzYWdlICov CisJCVJFU1VNRTsJCQkvKiB3YWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCisJICAgIH0K Kwl9CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDQz OgorICAgIHsJCQkJLyogUkVNT1RFIE1LRElSICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYg Q0tfTUtESVIKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIg JiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJF TU9URSBNS0RJUiIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lm ZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIE1LRElS IiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAo IUVOQUJMRUQoZW5fbWtkKSkgeworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgTUtESVIgZGlzYWJs ZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9jd2QpKSB7CS8qIElm IENXRCBkaXNhYmxlZCAqLworCWVycnBrdCgoQ0hBUiAqKSJEaXJlY3RvcnkgYWNjZXNzIHJlc3Ry aWN0ZWQiKTsKKwlSRVNVTUU7CQkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICov CisgICAgfQorICAgIGlmIChzdGF0ZSA9PSBnZW5lcmljKSB7CQkvKiBPSyB0byBnbyBhaGVhZC4g Ki8KKwljaGFyICpwID0gTlVMTDsKKwl4ID0gY2tta2RpcigwLChjaGFyICopKHNydmNtZCsyKSwm cCwwLDEpOyAvKiBNYWtlIHRoZSBkaXJlY3RvcnkgKi8KKwlpZiAoIXApIHAgPSAiIjsKKwlpZiAo eCA+IC0xKSB7CisJICAgIGVuY3N0cigoQ0hBUiAqKXApOwkJLyogT0sgLSBlbmNvZGUgdGhlIG5h bWUgKi8KKwkgICAgYWNrMShkYXRhKTsJCQkvKiBTZW5kIHNob3J0LWZvcm0gcmVzcG9uc2UgKi8K KwkgICAgc3VjY2VzcyA9IDE7CisJICAgIFJFU1VNRTsKKwl9IGVsc2UgewkJCS8qIG5vdCBPSyAq LworCSAgICBpZiAoISpwKSBwID0gIkRpcmVjdG9yeSBjcmVhdGlvbiBmYWlsdXJlIjsKKwkgICAg ZXJycGt0KChDSEFSICopcCk7CQkvKiBnaXZlIGVycm9yIG1lc3NhZ2UgKi8KKwkgICAgUkVTVU1F OwkJCS8qIFdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKwl9CisgICAgfQorI2Vsc2UK KyAgICBlcnJwa3QoKENIQVIgKikiUkVNT1RFIE1LRElSIG5vdCBhdmFpbGFibGUiKTsKKyAgICBS RVNVTUU7CisjZW5kaWYgLyogQ0tfTUtESVIgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQor ICAgIGJyZWFrOworY2FzZSA0NDoKKyAgICB7CQkJCS8qIFJFTU9URSBSTURJUiAqLworI2lmbmRl ZiBOT1NFUlZFUgorI2lmZGVmIENLX01LRElSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4 c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19Q UiwgMSwgInNlcnZlciIsICJSRU1PVEUgUk1ESVIiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYg LyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRl KHdoYXQsIlJFTU9URSBSTURJUiIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOworI2VuZGlmIC8q IElLU0RCICovCisgICAgaWYgKCFFTkFCTEVEKGVuX3JtZCkpIHsKKwllcnJwa3QoKENIQVIgKiki UkVNT1RFIFJNRElSIGRpc2FibGVkIik7CisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAoIUVOQUJM RUQoZW5fY3dkKSkgewkvKiBJZiBDV0QgZGlzYWJsZWQgKi8KKwllcnJwa3QoKENIQVIgKikiRGly ZWN0b3J5IGFjY2VzcyByZXN0cmljdGVkIik7CisJUkVTVU1FOwkJCQkvKiBSZW1lbWJlciwgdGhp cyBpcyBub3QgYSBnb3RvISAqLworICAgIH0KKyAgICBpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJ LyogT0sgdG8gZ28gYWhlYWQuICovCisJY2hhciAqcCA9IE5VTEw7CisJeCA9IGNrbWtkaXIoMSwo Y2hhciAqKShzcnZjbWQrMiksJnAsMCwxKTsKKwlpZiAoIXApIHAgPSAiIjsKKwlpZiAoeCA+IC0x KSB7CisJICAgIGVuY3N0cigoQ0hBUiAqKXApOwkJLyogT0sgLSBlbmNvZGUgdGhlIG5hbWUgKi8K KwkgICAgYWNrMShkYXRhKTsJCQkvKiBTZW5kIHNob3J0LWZvcm0gcmVzcG9uc2UgKi8KKwkgICAg c3VjY2VzcyA9IDE7CisJICAgIFJFU1VNRTsKKwl9IGVsc2UgewkJCS8qIG5vdCBPSyAqLworCSAg ICBpZiAoISpwKSBwID0gIkRpcmVjdG9yeSByZW1vdmFsIGZhaWx1cmUiOworCSAgICBlcnJwa3Qo KENIQVIgKilwKTsJCS8qIGdpdmUgZXJyb3IgbWVzc2FnZSAqLworCSAgICBSRVNVTUU7CQkJLyog V2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLworCX0KKyAgICB9CisjZWxzZQorICAgIGVy cnBrdCgoQ0hBUiAqKSJSRU1PVEUgUk1ESVIgbm90IGF2YWlsYWJsZSIpOworICAgIFJFU1VNRTsK KyNlbmRpZiAvKiBDS19NS0RJUiAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJl YWs7CitjYXNlIDQ1OgorICAgIHsJCQkJLyogUkVNT1RFIFNQQUNFICovCisjaWZuZGVmIE5PU0VS VkVSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNr eGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUg U1BBQ0UiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICBpZiAo IUVOQUJMRUQoZW5fc3BhKSkgeworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgU1BBQ0UgZGlzYWJs ZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKwl4ID0gc3J2Y21kWzFdOwkJCS8qIEdldCBh cmVhIHRvIGNoZWNrICovCisJeCA9ICgoeCA9PSBOVUwpIHx8ICh4ID09IFNQKQorI2lmZGVmIE9T MgorCSAgICAgfHwgKHggPT0gJyEnKSB8fCAoc3J2Y21kWzNdID09ICc6JykKKyNlbmRpZiAvKiBP UzIgKi8KKwkgICAgICk7CisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3 aGF0LAorCQkJICAgICAgIlJFTU9URSBTUEFDRSIsCisJCQkgICAgICAoeCA/ICIiIDogKGNoYXIg KilzcnZjbWQpLAorCQkJICAgICAgIiIKKwkJCSAgICAgICk7CisjZW5kaWYgLyogSUtTREIgKi8K KwlpZiAoIXggJiYgIUVOQUJMRUQoZW5fY3dkKSkgewkvKiBDV0QgZGlzYWJsZWQgKi8KKwkgICAg ZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQiKTsgLyogYW5kIG5vbi1kZWZhdWx0IGFyZWEg Z2l2ZW4sICovCisJICAgIFJFU1VNRTsJCQkvKiByZWZ1c2UuICovCisJfSBlbHNlIHsKKyNpZmRl ZiBPUzIKK19QUk9UT1RZUChpbnQgc25kc3BhY2UsKGludCkpOworCSAgICBpZiAoc25kc3BhY2Uo eCA/IHRvdXBwZXIoc3J2Y21kWzJdKSA6IDApKSB7CisJCUJFR0lOIHNzaW5pdDsJCS8qIHNlbmQg dGhlIHJlcG9ydC4gKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBJZiBub3Qgb2ssICovCisJCWVycnBr dCgoQ0hBUiAqKSJDYW4ndCBzZW5kIHNwYWNlIik7IC8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLwor CQlSRVNVTUU7CQkJLyogYW5kIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisJICAg IH0KKyNlbHNlCisgICAgICAgICAgICBpZiAobm9wdXNoKQorICAgICAgICAgICAgICB4ID0gMDsK KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeCA9ICh4ID8gc3lzY21kKFNQQUNNRCwi IikgOiBzeXNjbWQoU1BBQ00yLChjaGFyICopKHNydmNtZCsyKSkpOworCSAgICBpZiAoeCkgewkJ CS8qIElmIHdlIGdvdCB0aGUgaW5mbyAqLworCQlCRUdJTiBzc2luaXQ7CQkvKiBzZW5kIGl0ICov CisJICAgIH0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCisJCWVycnBrdCgoQ0hBUiAqKSJDYW4n dCBjaGVjayBzcGFjZSIpOyAvKiBzZW5kIGVycm9yIG1lc3NhZ2UgKi8KKwkJUkVTVU1FOwkJCS8q IGFuZCBhd2FpdCBuZXh0IHNlcnZlciBjb21tYW5kICovCisJICAgIH0KKyNlbmRpZiAvKiBPUzIg Ki8KKwl9CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNl IDQ2OgorICAgIHsJCQkJLyogUkVNT1RFIFdITyAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lmZGVm IENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQor ICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFdITyIsIChjaGFy ICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisgICAgaWYg KGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFdITyIsIChjaGFyICopKHNydmNtZCsy KSwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFFTkFCTEVEKGVuX3dobykpIHsK KwllcnJwa3QoKENIQVIgKikiUkVNT1RFIFdITyBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9 IGVsc2UgeworI2lmZGVmIE9TMgorX1BST1RPVFlQKGludCBzbmR3aG8sKGNoYXIgKikpOworCSAg ICBpZiAoc25kd2hvKChjaGFyICopKHNydmNtZCsyKSkpIHsKKwkJQkVHSU4gc3Npbml0OwkJLyog dHJ5IHRvIHNlbmQgaXQgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBJZiBub3Qgb2ssICovCisJCWVy cnBrdCgoQ0hBUiAqKSJDYW4ndCBkbyB3aG8gY29tbWFuZCIpOyAvKiBzZW5kIGVycm9yIG1zZyAq LworCQlSRVNVTUU7CQkJLyogYW5kIHJldHVybiB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0ICovCisJ ICAgIH0KKyNlbHNlCisJaWYgKHN5c2NtZChXSE9DTUQsKGNoYXIgKikoc3J2Y21kKzIpKSkgewor CSAgICBCRUdJTiBzc2luaXQ7CisJfSBlbHNlIHsKKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0 IGRvIHdobyBjb21tYW5kIik7CisJICAgIFJFU1VNRTsKKwl9CisjZW5kaWYgLyogT1MyICovCisg ICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisgICAgYnJlYWs7CitjYXNlIDQ3OgorICAg IHsJCQkJLyogVmFyaWFibGUgcXVlcnkgb3Igc2V0ICovCisgICAgcmMgPSBzcnZfcXVlcnkoKTsK KyAgICBkZWJ1ZyhGMTAxLCJzcnZfcXVlcnkiLCIiLHJjKTsKKyAgICBpZiAocmMgPiAtMSkgcmV0 dXJuKHJjKTsKK30KKyAgICBicmVhazsKK2Nhc2UgNDg6CisgICAgewkJCQkvKiBSRU1PVEUgTUVT U0FHRSBjb21tYW5kICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgZGVidWcoRjExMCwiUk1TRyIs KGNoYXIgKilzcnZjbWQrMiwwKTsKKyAgICB4eHNjcmVlbihTQ1JfTVMsMCwwTCwoY2hhciAqKShz cnZjbWQrMikpOworICAgIGFjaygpOworICAgIFJFU1VNRTsKKyNlbmRpZgkvKiBOT1NFUlZFUiAq LworfQorICAgIGJyZWFrOworY2FzZSA0OToKKyAgICB7CQkJCS8qIEludGVycnVwdGVkIG9yIGNv bm5lY3Rpb24gbG9zdCAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIGlmIChmYXRhbGlvKSB7CQkJ LyogQ29ubmVjdGlvbiBsb3N0ICovCisjaWZkZWYgQ0tTWVNMT0cKKwlpZiAoY2t4c3lzbG9nID49 IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZl ciIsICJJbnRlcnJ1cHRlZCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisJc3VjY2Vz cyA9IDA7CisJeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOworCVFVSVQ7CisgICAgfSBlbHNl IGlmIChpbnRlcnJ1cHRlZCkgeworCWlmICghRU5BQkxFRChlbl9maW4pKSB7CQkvKiBDdHJsLUMg dHlwZWQgKi8KKwkgICAgZXJycGt0KChDSEFSICopIlFVSVQgZGlzYWJsZWQiKTsKKwkgICAgUkVT VU1FOworCX0gZWxzZSB7CisjaWZkZWYgQ0tTWVNMT0cKKwkgICAgaWYgKGNreHN5c2xvZyA+PSBT WVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2Vy dmVyIiwgIkludGVycnVwdGVkIiwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwkgICAg c3VjY2VzcyA9IDA7CisJICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsKKwkgICAgUVVJ VDsKKwl9CisgICAgfSBlbHNlIHsJCQkJLyogU2hvdWxkbid0IGhhcHBlbiAqLworCWRlYnVnKEYx MDAsIlNFUlZFUiAoZ2VuZXJpYykgR09UIFVORVhQRUNURUQgJ3EnIiwiIiwwKTsKKwlRVUlUOwor ICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2FzZSA1MDoKKyAg ICB7CQkJCS8qIEFueXRoaW5nIGVsc2UgaW4gdGhpcyBzdGF0ZS4uLiAqLworI2lmbmRlZiBOT1NF UlZFUgorICAgIGVycnBrdCgoQ0hBUiAqKSJVbmltcGxlbWVudGVkIFJFTU9URSBjb21tYW5kIik7 IC8qIENvbXBsYWluICovCisgICAgUkVTVU1FOwkJCQkvKiBhbmQgcmV0dXJuIHRvIHNlcnZlciBj b21tYW5kIHdhaXQgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorICAgIGJyZWFrOworY2Fz ZSA1MToKKyAgICB7CQkJCS8qIFNlbnQgQllFIGFuZCBjb25uZWN0aW9uIGJyb2tlbiAqLworICAg IGlmIChieWVfYWN0aXZlICYmIHR0Y2hrKCkgPCAwKSB7CisJbXNsZWVwKDUwMCk7CisJYnllX2Fj dGl2ZSA9IDA7CisJdHRjbG9zKDApOwkJCS8qIENsb3NlIG91ciBlbmQgb2YgdGhlIGNvbm5lY3Rp b24gKi8KKwljbHNvZigwKTsKKwlyZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIH0gZWxzZSB7CQkJ CS8qIE90aGVyIGdlbmVyaWMgY29tbWFuZCAqLworCXJldHVybihzdWNjZXNzID0gMCk7CQkvKiBv ciBjb25uZWN0aW9uIG5vdCBicm9rZW4gKi8KKyAgICB9Cit9CisgICAgYnJlYWs7CitjYXNlIDUy OgorICAgIHsJCQkJLyogU2hvcnQtRm9ybSByZXBseSAqLworICAgIHJjID0gcmN2X3Nob3J0cmVw bHkoKTsKKyAgICBkZWJ1ZyhGMTAxLCI8cmdlbj5ZIHJjdl9zaG9ydHJlcGx5IiwiIixyYyk7Cisg ICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7Cit9CisgICAgYnJlYWs7CitjYXNlIDUzOgorICAg IHsJCQkJLyogRmlsZSBoZWFkZXIgKi8KKyAgICAvKiBjaGFyICpuMjsgKi8KKyAgICBleHRlcm4g aW50IHJzbjsKKyAgICBkZWJ1ZyhGMTAxLCI8cmZpbGU+RiB3aW5sbyAxIiwiIix3aW5sbyk7Cisg ICAgeGZsZyA9IDA7CQkJCS8qIE5vdCBzY3JlZW4gZGF0YSAqLworICAgIGlmICghY3pzZWVuKQor ICAgICAgY2FuY2VsID0gMDsJCQkvKiBSZXNldCBjYW5jZWxsYXRpb24gY291bnRlciAqLworI2lm ZGVmIENBTElCUkFURQorICAgIGlmIChkZXN0ID09IERFU1RfTikKKyAgICAgIGNhbGlicmF0ZSA9 IDE7CisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisgICAgaWYgKCFyY3ZmaWwoZmlsbmFtKSkgewkJ LyogRmlndXJlIG91dCBsb2NhbCBmaWxlbmFtZSAqLworCWVycnBrdCgoQ0hBUiAqKXJmX2Vycik7 CQkvKiBUcm91YmxlICovCisJUkVTVU1FOworICAgIH0gZWxzZSB7CQkJCS8qIFJlYWwgZmlsZSwg T0sgdG8gcmVjZWl2ZSAqLworCWNoYXIgKiBmbnA7CisJZGVidWcoRjExMSwiPHJmaWxlPkYgd2lu bG8gMiIsZnNwZWMsd2lubG8pOworCWlmIChmaWxjbnQgPT0gMSkJCS8qIHJjdmZpbCBzZXQgdGhp cyB0byAxIGZvciAxc3QgZmlsZSAqLworCSAgY3JjMTYgPSAwTDsJCQkvKiBDbGVhciBmaWxlIENS QyAqLworCWZucCA9IGZzcGVjOwkJCS8qIFRoaXMgaXMgdGhlIGZ1bGwgcGF0aCAqLworCWlmIChz ZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fY3dkKSB8fCAvKiBpZiBESVNBQkxFIENEICovCisJICAgICFm YWNrcGF0aAkJCSAgLyogb3IgRi1BQ0stUEFUSCBPRkYgKi8KKwkgICAgKSB7CisJICAgIHpzdHJp cChmc3BlYywmZm5wKTsJCS8qIGRvbid0IHNlbmQgYmFjayBmdWxsIHBhdGggKi8KKwl9CisJZW5j c3RyKChDSEFSICopZm5wKTsKKwlpZiAoZmFja2J1ZykKKwkgIGFjaygpOworCWVsc2UKKwkgIGFj azEoZGF0YSk7CQkJLyogU2VuZCBpdCBiYWNrIGluIEFDSyAqLworCWluaXRhdHRyKCZpYXR0cik7 CQkvKiBDbGVhciBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8KKwlzdHJlYW1vbigpOworCWlm ICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJLyogQWxsb2NhdGUgbmVnb3RpYXRlZCB3aW5kb3cgc2xv dHMgKi8KKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0IG9wZW4gd2luZG93Iik7CisJICAgIFJF U1VNRTsKKwl9CisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LAor CQkJICAgICAgc2VydmVyID8gIlNFUlZFUiIgOiAiIiwKKwkJCSAgICAgICJSRUNFSVZFIiwKKwkJ CSAgICAgIGZzcGVjCisJCQkgICAgICApOworI2VuZGlmIC8qIElLU0RCICovCisJQkVHSU4gcmF0 dHI7CQkJLyogTm93IGV4cGVjdCBBdHRyaWJ1dGUgcGFja2V0cyAqLworICAgIH0KK30KKyAgICBi cmVhazsKK2Nhc2UgNTQ6CisgICAgewkJCQkvKiBYLXBhY2tldCBpbnN0ZWFkIG9mIGZpbGUgaGVh ZGVyICovCisgICAgeGZsZyA9IDE7CQkJCS8qIFNjcmVlbiBkYXRhICovCisgICAgaWYgKCFjenNl ZW4pCisgICAgICBjYW5jZWwgPSAwOwkJCS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICov CisgICAgYWNrKCk7CQkJCS8qIEFja25vd2xlZGdlIHRoZSBYLXBhY2tldCAqLworICAgIGluaXRh dHRyKCZpYXR0cik7CQkJLyogSW5pdGlhbGl6ZSBhdHRyaWJ1dGUgc3RydWN0dXJlICovCisgICAg c3RyZWFtb24oKTsKKyAgICBpZiAod2luZG93KHdzbG90bikgPCAwKSB7CQkvKiBhbGxvY2F0ZSBu ZWdvdGlhdGVkIHdpbmRvdyBzbG90cyAqLworCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBvcGVuIHdp bmRvdyIpOworCVJFU1VNRTsKKyAgICB9CisjaWZuZGVmIE5PU1BMCisgICAgaWYgKHF1ZXJ5KSB7 CQkJLyogSWYgdGhpcyBpcyB0aGUgcmVzcG9uc2UgdG8gKi8KKwlxYnVmcCA9IHF1ZXJ5YnVmOwkJ LyogYSBxdWVyeSB0aGF0IHdlIHNlbnQsIGluaXRpYWxpemUgKi8KKwlxYnVmbiA9IDA7CQkJLyog dGhlIHJlc3BvbnNlIGJ1ZmZlciAqLworCXF1ZXJ5YnVmWzBdID0gTlVMOworICAgIH0KKyNlbmRp ZiAvKiBOT1NQTCAqLworICAgIHdoYXQgPSBXX1JFTU87CQkJLyogd2UncmUgZG9pbmcgYSBSRU1P VEUgY29tbWFuZCAqLworI2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUo d2hhdCwKKwkJCSAgc2VydmVyID8gIlNFUlZFUiIgOiAiIiwKKwkJCSAgIlJFQ0VJVkUiLAorCQkJ ICBmc3BlYworCQkJICApOworI2VuZGlmIC8qIElLU0RCICovCisgICAgQkVHSU4gcmF0dHI7CQkJ LyogRXhwZWN0IEF0dHJpYnV0ZSBwYWNrZXRzICovCit9CisgICAgYnJlYWs7CitjYXNlIDU1Ogor ICAgIHsJCQkJLyogQXR0cmlidXRlIHBhY2tldCAqLworICAgIGlmIChnYXR0cihyZGF0YXAsJmlh dHRyKSA9PSAwKSB7CS8qIFJlYWQgaW50byBhdHRyaWJ1dGUgc3RydWN0dXJlICovCisjaWZkZWYg Q0tfUkVTRU5ECisJYWNrMSgoQ0hBUiAqKWlhdHRyLnJlcGx5LnZhbCk7CS8qIFJlcGx5IHdpdGgg ZGF0YSAqLworI2Vsc2UKKwlhY2soKTsJCQkJLyogSWYgT0ssIGFja25vd2xlZGdlICovCisjZW5k aWYgLyogQ0tfUkVTRU5EICovCisgICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlICovCisJZXh0 ZXJuIGxvbmcgZnNpemU7CisJY2hhciAqcjsKKwlyID0gZ2V0cmVhc29uKGlhdHRyLnJlcGx5LnZh bCk7CisJYWNrMSgoQ0hBUiAqKWlhdHRyLnJlcGx5LnZhbCk7CS8qIHJlZnVzZSB0byBhY2NlcHQg dGhlIGZpbGUgKi8KKwl4eHNjcmVlbihTQ1JfU1QsU1RfUkVGVSwwTCxyKTsJLyogcmVhc29uICov CisjaWZkZWYgVExPRworCWlmICh0cmFsb2cgJiYgIXRsb2dmbXQpCisJICBkb3hsb2cod2hhdCxm aWxuYW0sZnNpemUsYmluYXJ5LDEscik7CisjZW5kaWYgLyogVExPRyAqLworICAgIH0KK30KKyAg ICBicmVhazsKK2Nhc2UgNTY6CisgICAgewkJCQkvKiBGaXJzdCBkYXRhIHBhY2tldCAqLworICAg IGRlYnVnKEYxMDAsIjxyYXR0cj4gRCBmaXJzdGRhdGEiLCIiLDApOworICAgIHJjID0gcmN2X2Zp cnN0ZGF0YSgpOworICAgIGRlYnVnKEYxMDEsInJjdl9maXJzdGRhdGEgcmMiLCIiLHJjKTsKKyAg ICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUgYmVsb3cpICovCit9CisgICAgYnJl YWs7CitjYXNlIDU3OgorICAgIHsJCQkJLyogRU9ULCBubyBtb3JlIGZpbGVzICovCisgICAgYWNr KCk7CQkJCS8qIEFja25vd2xlZGdlIHRoZSBCIHBhY2tldCAqLworICAgIHJlb3QoKTsJCQkJLyog RG8gRU9UIHRoaW5ncyAqLworI2lmZGVmIENLX1RNUERJUgorLyogSWYgd2Ugd2VyZSBjZCdkIHRl bXBvcmFyaWx5IHRvIGFub3RoZXIgZGV2aWNlIG9yIGRpcmVjdG9yeSAuLi4gKi8KKyAgICBpZiAo Zl90bXBkaXIpIHsKKwlpbnQgeDsKKwl4ID0gemNoZGlyKChjaGFyICopIHNhdmRpcik7CS8qIC4u LiByZXN0b3JlIHByZXZpb3VzIGRpcmVjdG9yeSAqLworCWZfdG1wZGlyID0gMDsJCQkvKiBhbmQg cmVtZW1iZXIgd2UgZGlkIGl0LiAqLworCWRlYnVnKEYxMTEsImNrY3Byby53IEIgdG1wZGlyIHJl c3RvcmluZyIsc2F2ZGlyLHgpOworICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyAgICBS RVNVTUU7CQkJCS8qIGFuZCBxdWl0ICovCit9CisgICAgYnJlYWs7CitjYXNlIDU4OgorICAgIHsJ CQkJLyogR290IERhdGEgcGFja2V0ICovCisgICAgZGVidWcoRjEwMSwiPHJkcGt0PkQgY3hzZWVu IiwiIixjeHNlZW4pOworICAgIGRlYnVnKEYxMDEsIjxyZHBrdD5EIGN6c2VlbiIsIiIsY3pzZWVu KTsKKyAgICBpZiAoY3hzZWVuIHx8IGN6c2VlbiB8fCBkaXNjYXJkKSB7CS8qIElmIGZpbGUgb3Ig Z3JvdXAgaW50ZXJydXB0aW9uICovCisJQ0hBUiAqIG1zZzsKKwltc2cgPSBjenNlZW4gPyAoQ0hB UiAqKSJaIiA6IChDSEFSICopIlgiOworI2lmZGVmIFNUUkVBTUlORworCWlmIChzdHJlYW1pbmcp IHsJCS8qIE5lZWQgdG8gY2FuY2VsICovCisJICAgIGRlYnVnKEYxMTEsIjxyZHBrdD5EIHN0cmVh bWluZyBjYW5jZWwiLG1zZyxjYW5jZWwpOworCSAgICBpZiAoY2FuY2VsKysgPT0gMCkgewkvKiBP bmx5IGRvIHRoaXMgb25jZSAqLworCQlhY2sxKG1zZyk7CQkvKiBQdXQgIlgiIG9yICJaIiBpbiBB Q0sgKi8KKwkgICAgfSBlbHNlIGlmIChjenNlZW4pIHsKKwkJZXJycGt0KChDSEFSICopIlVzZXIg Y2FuY2VsZWQiKTsKKwkJUkVTVU1FOworCSAgICB9IGVsc2UgeworCQlmYXN0YWNrKCk7CisJICAg IH0KKwl9IGVsc2UKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgIGFjazEobXNnKTsKKyAgICB9 IGVsc2UgewkJCQkvKiBObyBpbnRlcnJ1cHRpb24gKi8KKwlpbnQgcmMsIHFmOworI2lmbmRlZiBO T1NQTAorCXFmID0gcXVlcnk7CisjZWxzZQorCXFmID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLwor I2lmZGVmIENLVFVOSU5HCisJcmMgPSAoYmluYXJ5ICYmICFwYXJpdHkpID8KKwkgIGJkZWNvZGUo cmRhdGFwLHB1dGZpbCk6CisJICAgIGRlY29kZShyZGF0YXAsIHFmID8gcHV0dHJtIDogcHV0Zmls LCAxKTsKKyNlbHNlCisJcmMgPSBkZWNvZGUocmRhdGFwLCBxZiA/IHB1dHRybSA6IHB1dGZpbCwg MSk7CisjZW5kaWYgLyogQ0tUVU5JTkcgKi8KKwlpZiAocmMgPCAwKSB7CisJICAgIGRpc2NhcmQg PSAoa2VlcCA9PSAwIHx8IChrZWVwID09IFNFVF9BVVRPICYmIGJpbmFyeSAhPSBYWUZUX1QpKTsK KwkgICAgZXJycGt0KChDSEFSICopIkVycm9yIHdyaXRpbmcgZGF0YSIpOyAvKiBJZiBmYWlsdXJl LCAqLworCSAgICBSRVNVTUU7CisJfSBlbHNlCQkJCS8qIERhdGEgd3JpdHRlbiBPSywgc2VuZCBB Q0sgKi8KKyNpZmRlZiBTVFJFQU1JTkcKKwkgIGlmIChzdHJlYW1pbmcpCisJICAgIGZhc3RhY2so KTsKKwllbHNlCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJICBhY2soKTsKKyAgICB9Cit9Cisg ICAgYnJlYWs7CitjYXNlIDU5OgorICAgIHsJCQkJLyogRU9GIGltbWVkaWF0ZWx5IGFmdGVyIEEt UGFja2V0LiAqLworICAgIHJmX2VyciA9ICJDYW4ndCBjcmVhdGUgZmlsZSI7CisgICAgdGltaW50 ID0gc190aW1pbnQ7CisgICAgaWYgKGRpc2NhcmQpIHsJCQkvKiBEaXNjYXJkaW5nIGEgcmVhbCBm aWxlLi4uICovCisJeCA9IDE7CisgICAgfSBlbHNlIGlmICh4ZmxnKSB7CQkJLyogSWYgc2NyZWVu IGRhdGEgKi8KKwlpZiAocmVtZmlsZSkgewkJCS8qIHJlZGlyZWN0ZWQgdG8gZmlsZSAqLworCSAg ICBpZiAocmVtcGlwZSkJCS8qIG9yIHBpcGUgKi8KKwkgICAgICB4ID0gb3BlbmMoWk9GSUxFLHJl bWRlc3QpOyAvKiBQaXBlOiBzdGFydCBjb21tYW5kICovCisJICAgIGVsc2UKKwkgICAgICB4ID0g b3BlbmEocmVtZGVzdCwmaWF0dHIpOyAvKiBGaWxlOiBvcGVuIHdpdGggYXR0cmlidXRlcyAqLwor CX0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCisJICAgIHggPSBvcGVudCgmaWF0dHIpOwkJLyog Im9wZW4iIHRoZSBzY3JlZW4gKi8KKwl9CisjaWZkZWYgQ0FMSUJSQVRFCisgICAgfSBlbHNlIGlm IChjYWxpYnJhdGUpIHsJCS8qIElmIGNhbGlicmF0aW9uIHJ1biAqLworCXggPSBja29wZW54KCZp YXR0cik7CQkvKiBkbyB0aGlzICovCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisgICAgfSBlbHNl IHsJCQkJLyogb3RoZXJ3aXNlICovCisJeCA9IG9wZW5hKGZpbG5hbSwmaWF0dHIpOwkvKiBvcGVu IHRoZSBmaWxlLCB3aXRoIGF0dHJpYnV0ZXMgKi8KKwlpZiAoeCA9PSAtMTcpIHsJCQkvKiBSRUdF VCBza2lwcGVkIGJlY2F1c2Ugc2FtZSBzaXplICovCisJICAgIGRpc2NhcmQgPSAxOworCSAgICBy ZWplY3Rpb24gPSAxOworCX0KKyAgICB9CisgICAgaWYgKCF4IHx8IHJlb2YoZmlsbmFtLCAmaWF0 dHIpIDwgMCkgeyAvKiBDbG9zZSBvdXRwdXQgZmlsZSAqLworCWVycnBrdCgoQ0hBUiAqKSByZl9l cnIpOwkvKiBJZiBwcm9ibGVtLCBzZW5kIGVycm9yIG1zZyAqLworCVJFU1VNRTsJCQkJLyogYW5k IHF1aXQgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBvdGhlcndpc2UgKi8KKwlpZiAoeCA9PSAtMTcp CisJICB4eHNjcmVlbihTQ1JfU1QsU1RfU0tJUCxTS1BfUkVTLCIiKTsKKwlhY2soKTsJCQkJLyog YWNrbm93bGVkZ2UgdGhlIEVPRiBwYWNrZXQgKi8KKwlCRUdJTiByZmlsZTsJCQkvKiBhbmQgYXdh aXQgYW5vdGhlciBmaWxlICovCisgICAgfQorfQorICAgIGJyZWFrOworY2FzZSA2MDoKKyAgICB7 ICAJCQkJLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zcy4gKi8KKyAgICB0aW1pbnQgPSBzX3Rp bWludDsKKyAgICB3aW5kb3coMSk7CQkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4g Ki8KKyAgICBjeHNlZW4gPSAxOworICAgIHggPSBjbHNvZigxKTsJCQkvKiBDbG9zZSBmaWxlICov CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIEZhaWxlZCAqLworfQorICAgIGJyZWFrOwor Y2FzZSA2MToKKyAgICB7CQkJCS8qIEVuZCBPZiBGaWxlIChFT0YpIFBhY2tldCAqLworLyogIHdz bG90cyA9IDE7CSovCQkJLyogKGRvbid0IHNldCkgV2luZG93IHNpemUgYmFjayB0byAxICovCisj aWZuZGVmIENPSEVSRU5UIC8qIENvaGVyZW50IGNvbXBpbGVyIGJsb3dzIHVwIG9uIHRoaXMgc3dp dGNoKCkgc3RhdGVtZW50LiAqLworICAgIHggPSByZW9mKGZpbG5hbSwgJmlhdHRyKTsJCS8qIEhh bmRsZSB0aGUgRU9GIHBhY2tldCAqLworICAgIHN3aXRjaCAoeCkgewkJCS8qIHJlb2YoKSBzZXRz IHRoZSBzdWNjZXNzIGZsYWcgKi8KKyAgICAgIGNhc2UgLTU6CQkJCS8qIEhhbmRsZSBwcm9ibGVt cyAqLworCWVycnBrdCgoQ0hBUiAqKSJSRU5BTUUgZmFpbGVkIik7IC8qIEZhdGFsICovCisJUkVT VU1FOworCWJyZWFrOworICAgICAgY2FzZSAtNDoKKwllcnJwa3QoKENIQVIgKikiTU9WRSBmYWls ZWQiKTsJLyogRmF0YWwgKi8KKwlSRVNVTUU7CisJYnJlYWs7CisgICAgICBjYXNlIC0zOgkJCQkv KiBJZiBwcm9ibGVtLCBzZW5kIGVycm9yIG1zZyAqLworCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBw cmludCBmaWxlIik7IC8qIEZhdGFsICovCisJUkVTVU1FOworCWJyZWFrOworICAgICAgY2FzZSAt MjoKKwllcnJwa3QoKENIQVIgKikiQ2FuJ3QgbWFpbCBmaWxlIik7IC8qIEZhdGFsICovCisJUkVT VU1FOworCWJyZWFrOworICAgICAgY2FzZSAyOgkJCQkvKiBOb3QgZmF0YWwgKi8KKyAgICAgIGNh c2UgMzoKKwl4eHNjcmVlbihTQ1JfRU0sMCwwTCwiUmVjZWl2ZXIgY2FuJ3QgZGVsZXRlIHRlbXAg ZmlsZSIpOworCVJFU1VNRTsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJaWYgKHggPCAwKSB7 CQkJLyogRmF0YWwgKi8KKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGNsb3NlIGZpbGUiKTsK KwkgICAgUkVTVU1FOworCX0gZWxzZSB7CQkJLyogU3VjY2VzcyAqLworI2lmbmRlZiBOT1NQTAor CSAgICBpZiAocXVlcnkpCQkJLyogUXVlcnkgcmVwb25zZXMgZ2VuZXJhbGx5ICovCisJICAgICAg Y29ub2xsKCIiKTsJCS8qIGRvbid0IGhhdmUgbGluZSB0ZXJtaW5hdG9ycyAqLworI2VuZGlmIC8q IE5PU1BMICovCisJICAgIGlmIChjenNlZW4pIHsJCS8qIEJhdGNoIGNhbmNlbGVkPyAqLworCQlp ZiAoY2FuY2VsKysgPT0gMCkgewkvKiBJZiB3ZSBoYXZlbid0IHRyaWVkIHRoaXMgeWV0ICovCisJ CSAgICBhY2sxKChDSEFSICopIloiKTsJLyogVHJ5IGl0IG9uY2UgKi8KKwkJfSBlbHNlIHsJCS8q IE90aGVyd2lzZSAqLworCQkgICAgZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsZWQiKTsgLyog cXVpdGUgd2l0aCBFcnJvciAqLworCQkgICAgUkVTVU1FOworCQl9CisJICAgIH0gZWxzZQorCSAg ICAgIGFjaygpOwkJCS8qIEFja25vd2xlZGdlIHRoZSBFT0YgcGFja2V0ICovCisJICAgIEJFR0lO IHJmaWxlOwkJLyogYW5kIGF3YWl0IGFub3RoZXIgZmlsZSAqLworCX0KKyAgICB9CisjZWxzZQor ICAgIGlmIChyZW9mKGZpbG5hbSwgJmlhdHRyKSA8IDApIHsJLyogQ2xvc2UgdGhlIGZpbGUgKi8K KwllcnJwa3QoKENIQVIgKikiRXJyb3IgYXQgZW5kIG9mIGZpbGUiKTsKKwlSRVNVTUU7CisgICAg fSBlbHNlIHsJCQkJLyogcmVvZigpIHNldHMgc3VjY2VzcyBmbGFnICovCisJYWNrKCk7CisJQkVH SU4gcmZpbGU7CisgICAgfQorI2VuZGlmIC8qIENPSEVSRU5UICovCit9CisgICAgYnJlYWs7Citj YXNlIDYyOgorICAgIHsJCQkJLyogQUNLIGZvciBTZW5kLUluaXQgKi8KKyAgICBzcGFyKHJkYXRh cCk7CQkJLyogc2V0IHBhcmFtZXRlcnMgZnJvbSBpdCAqLworICAgIGNhbmNlbCA9IDA7CisgICAg YmN0dSA9IGJjdHI7CQkJLyogc3dpdGNoIHRvIGFncmVlZC11cG9uIGJsb2NrIGNoZWNrICovCisg ICAgYmN0bCA9IChiY3R1ID09IDQpID8gMiA6IGJjdHU7CS8qIFNldCBibG9jay1jaGVjayBsZW5n dGggKi8KKyNpZmRlZiBDS19SRVNFTkQKKyAgICBpZiAoKHNlbmRtb2RlID09IFNNX1JFU0VORCkg JiYgKCFhdGNhcHUgfHwgIXJzY2FwdSkpIHsgLyogUkVTRU5EICovCisJZXJycGt0KChDSEFSICop ICJSRVNFTkQgY2FwYWJpbGl0aWVzIG5vdCBuZWdvdGlhdGVkIik7CisJUkVTVU1FOworICAgIH0g ZWxzZSB7CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisJd2hhdCA9IFdfU0VORDsJCQkvKiBSZW1l bWJlciB3ZSdyZSBzZW5kaW5nICovCisJbGFzdHhmZXIgPSBXX1NFTkQ7CisJeCA9IHNmaWxlKHhm bGcpOwkJLyogU2VuZCBYIG9yIEYgaGVhZGVyIHBhY2tldCAqLworCWNhbmNlbCA9IDA7CQkJLyog UmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIgKi8KKwlpZiAoeCkgewkJCS8qIElmIHRoZSBwYWNr ZXQgd2FzIHNlbnQgT0sgKi8KKwkgICAgaWYgKCF4ZmxnICYmIGZpbGNudCA9PSAxKQkvKiBhbmQg aXQncyBhIHJlYWwgZmlsZSAqLworCSAgICAgIGNyYzE2ID0gMEw7CQkvKiBDbGVhciB0aGUgZmls ZSBDUkMgKi8KKwkgICAgcmVzZXRjKCk7CQkJLyogcmVzZXQgcGVyLXRyYW5zYWN0aW9uIGNvdW50 ZXJzICovCisJICAgIHJ0aW1lcigpOwkJCS8qIHJlc2V0IHRpbWVycyAqLworI2lmZGVmIEdGVElN RVIKKwkgICAgcmZ0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwkgICAgc3RyZWFtb24o KTsJCQkvKiB0dXJuIG9uIHN0cmVhbWluZyAqLworI2lmZGVmIElLU0RCCisJICAgIGlmIChpa2Ri b3Blbikgc2xvdHN0YXRlKHdoYXQsCisJCQkJICAoc2VydmVyID8gIlNFUlZFUiIgOiAiIiksCisJ CQkJICAiU0VORCIsCisJCQkJICBmaWxuYW0KKwkJCQkgICk7CisjZW5kaWYgLyogSUtTREIgKi8K KwkgICAgQkVHSU4gc3NmaWxlOwkJLyogYW5kIHN3aXRjaCB0byByZWNlaXZlLWZpbGUgc3RhdGUg Ki8KKwl9IGVsc2UgewkJCS8qIG90aGVyd2lzZSBzZW5kIGVycm9yIG1zZyAmIHF1aXQgKi8KKwkg ICAgcyA9IHhmbGcgPyAiQ2FuJ3QgZXhlY3V0ZSBjb21tYW5kIiA6IChjaGFyICopZXBrdG1zZzsK KwkgICAgaWYgKCEqcykgcyA9ICJDYW4ndCBvcGVuIGZpbGUiOworCSAgICBlcnJwa3QoKENIQVIg KilzKTsKKwkgICAgUkVTVU1FOworCX0KKyNpZmRlZiBDS19SRVNFTkQKKyAgICB9CisjZW5kaWYg LyogQ0tfUkVTRU5EICovCit9CisgICAgYnJlYWs7CitjYXNlIDYzOgorICAgIHsJCQkJLyogUiBw YWNrZXQgd2FzIHJldHJhbnNtaXR0ZWQuICovCisgICAgeHNpbml0KCk7CQkJCS8qIFJlc2VuZCBw YWNrZXQgMCAqLworfQorICAgIGJyZWFrOworY2FzZSA2NDoKKyAgICB7CQkJCS8qIFNhbWUgZGVh bCBpZiBHIHBhY2tldCBjb21lcyBhZ2FpbiAqLworICAgIHhzaW5pdCgpOworfQorICAgIGJyZWFr OworY2FzZSA2NToKKyAgICB7CQkJCS8qIFNhbWUgZGVhbCBpZiBDIHBhY2tldCBjb21lcyBhZ2Fp biAqLworICAgIHhzaW5pdCgpOworfQorICAgIGJyZWFrOworY2FzZSA2NjoKKyAgICB7CQkJCS8q IEFDSyBmb3IgRiBvciBYIHBhY2tldCAqLworICAgIHNydnB0ciA9IHNydmNtZDsJCQkvKiBQb2lu dCB0byBzdHJpbmcgYnVmZmVyICovCisgICAgZGVjb2RlKHJkYXRhcCxwdXRzcnYsMCk7CQkvKiBE ZWNvZGUgZGF0YSBmaWVsZCwgaWYgYW55ICovCisgICAgcHV0c3J2KE5VTCk7CQkJLyogVGVybWlu YXRlIHdpdGggbnVsbCAqLworICAgIGZmYyA9IDBMOwkJCQkvKiBSZXNldCBmaWxlIGJ5dGUgY291 bnRlciAqLworICAgIGRlYnVnKEYxMDEsIjxzc2ZpbGU+WSBjeHNlZW4iLCIiLGN4c2Vlbik7Cisg ICAgaWYgKCpzcnZjbWQpIHsJCQkvKiBJZiByZW1vdGUgbmFtZSB3YXMgcmVjb3JkZWQgKi8KKyAg ICAgICAgaWYgKHNlbmRtb2RlICE9IFNNX1JFU0VORCkgeworCSAgICBpZiAoZmRpc3BsYSA9PSBY WUZEX0MgfHwgZmRpc3BsYSA9PSBYWUZEX1MpCisJICAgICAgeHhzY3JlZW4oU0NSX0FOLDAsMEws KGNoYXIgKilzcnZjbWQpOworCSAgICB0bG9nKEYxMTAsIiByZW1vdGUgbmFtZToiLChjaGFyICop IHNydmNtZCwwTCk7CisJICAgIG1ha2VzdHIoJnBzcmZzcGVjLChjaGFyICopc3J2Y21kKTsKKyAg ICAgICAgfQorICAgIH0KKyAgICBpZiAoY3hzZWVufHxjenNlZW4pIHsJCS8qIEludGVycnVwdGVk PyAqLworCWRlYnVnKEYxMDEsIjxzc2ZpbGU+WSBjYW5jZWxpbmciLCIiLDApOworCXggPSBjbHNp ZigpOwkJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8KKwlzeGVvZigxKTsJCQkvKiBTZW5kIEVPRihE KSAqLworCUJFR0lOIHNzZW9mOwkJCS8qIGFuZCBzd2l0Y2ggdG8gRU9GIHN0YXRlLiAqLworICAg IH0gZWxzZSBpZiAoYXRjYXB1KSB7CQkvKiBJZiBhdHRyaWJ1dGVzIGFyZSB0byBiZSB1c2VkICov CisJaWYgKHNhdHRyKHhmbGcgfCBzdGRpbmYsIDEpIDwgMCkgeyAvKiBzZW5kIHRoZW0gKi8KKwkg ICAgZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQgYXR0cmlidXRlcyIpOyAvKiBpZiBwcm9ibGVt LCBzYXkgc28gKi8KKwkgICAgUkVTVU1FOwkJCS8qIGFuZCBxdWl0ICovCisJfSBlbHNlIEJFR0lO IHNzYXR0cjsJCS8qIGlmIG9rLCBzd2l0Y2ggdG8gYXR0cmlidXRlIHN0YXRlICovCisgICAgfSBl bHNlIHsJCQkJLyogQXR0cmlidXRlcyBub3QgbmVnb3RpYXRlZCAqLworCWlmICh3aW5kb3cod3Ns b3RuKSA8IDApIHsJLyogT3BlbiB3aW5kb3cgKi8KKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0 IG9wZW4gd2luZG93Iik7CisJICAgIFJFU1VNRTsKKwl9IGVsc2UgaWYgKCh4ID0gc2RhdGEoKSkg PT0gLTIpIHsgLyogU2VuZCBmaXJzdCBkYXRhIHBhY2tldCBkYXRhICovCisJICAgIHdpbmRvdygx KTsJCQkvKiBDb25uZWN0aW9uIGxvc3QsIHJlc2V0IHdpbmRvdyAqLworCSAgICB4ID0gY2xzaWYo KTsJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8KKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJLyog UmV0dXJuIGZhaWx1cmUgKi8KKwl9IGVsc2UgaWYgKHggPT0gLTkpIHsJCS8qIFVzZXIgaW50ZXJy dXB0ZWQgKi8KKwkgICAgZXJycGt0KChDSEFSICopIlVzZXIgY2FuY2VsbGVkIik7IC8qIFNlbmQg RXJyb3IgcGFja2V0ICovCisJICAgIHdpbmRvdygxKTsJCQkvKiBTZXQgd2luZG93IHNpemUgYmFj ayB0byAxLi4uICovCisJICAgIHRpbWludCA9IHNfdGltaW50OwkJLyogUmVzdG9yZSB0aW1lb3V0 ICovCisJICAgIHJldHVybihzdWNjZXNzID0gMCk7CS8qIEZhaWxlZCAqLworCX0gZWxzZSBpZiAo eCA8IDApIHsJCS8qIEVPRiAoZW1wdHkgZmlsZSkgb3IgaW50ZXJydXB0ZWQgKi8KKwkgICAgd2lu ZG93KDEpOwkJCS8qIHB1dCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEsICovCisJICAgIGRlYnVnKEYx MDEsIjxzc2ZpbGU+WSBjeHNlZW4iLCIiLGN4c2Vlbik7CisJICAgIHggPSBjbHNpZigpOwkJLyog SWYgbm90IG9rLCBjbG9zZSBpbnB1dCBmaWxlLCAqLworCSAgICBpZiAoeCA8IDApCQkJLyogdHJl YXRpbmcgZmFpbHVyZSBhcyBpbnRlcnJ1cHRpb24gKi8KKwkgICAgICBjeHNlZW4gPSAxOwkJLyog U2VuZCBFT0YgcGFja2V0ICovCisJICAgIHNlb2YoY3hzZWVufHxjenNlZW4pOworCSAgICBCRUdJ TiBzc2VvZjsJCS8qIGFuZCBzd2l0Y2ggdG8gRU9GIHN0YXRlLiAqLworCX0gZWxzZSB7CQkJLyog Rmlyc3QgZGF0YSBzZW50IE9LICovCisJICAgIEJFR0lOIHNzZGF0YTsJCS8qIEFsbCBvaywgc3dp dGNoIHRvIHNlbmQtZGF0YSBzdGF0ZSAqLworCX0KKyAgICB9Cit9CisgICAgYnJlYWs7CitjYXNl IDY3OgorICAgIHsJCQkJLyogR290IEFDSyB0byBBIHBhY2tldCAqLworICAgIGZmYyA9IDBMOwkJ CQkvKiBSZXNldCBmaWxlIGJ5dGUgY291bnRlciAqLworICAgIGRlYnVnKEYxMDEsIjxzc2F0dHI+ WSBjeHNlZW4iLCIiLGN4c2Vlbik7CisgICAgaWYgKGN4c2Vlbnx8Y3pzZWVuKSB7CQkvKiBJbnRl cnJ1cHRlZD8gKi8KKwlkZWJ1ZyhGMTAxLCI8c2F0dHI+WSBjYW5jZWxpbmciLCIiLDApOworCXgg PSBjbHNpZigpOwkJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8KKwlzeGVvZigxKTsJCQkvKiBTZW5k IEVPRihEKSAqLworCUJFR0lOIHNzZW9mOwkJCS8qIGFuZCBzd2l0Y2ggdG8gRU9GIHN0YXRlLiAq LworICAgIH0gZWxzZSBpZiAocnNhdHRyKHJkYXRhcCkgPCAwKSB7CS8qIFdhcyB0aGUgZmlsZSBy ZWZ1c2VkPyAqLworCWRpc2NhcmQgPSAxOwkJCS8qIFNldCB0aGUgZGlzY2FyZCBmbGFnICovCisJ Y2xzaWYoKTsJCQkvKiBDbG9zZSB0aGUgZmlsZSAqLworCXN4ZW9mKDEpOwkJCS8qIHNlbmQgRU9G IHdpdGggImRpc2NhcmQiIGNvZGUgKi8KKwlCRUdJTiBzc2VvZjsJCQkvKiBzd2l0Y2ggdG8gc2Vu ZC1FT0Ygc3RhdGUgKi8KKyAgICB9IGVsc2UgaWYgKCh4ID0gc2F0dHIoeGZsZyB8IHN0ZGluZiwg MCkpIDwgMCkgeyAvKiBTZW5kIG1vcmU/ICovCisJZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQg YXR0cmlidXRlcyIpOyAvKiBUcm91YmxlLi4uICovCisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAo eCA9PSAwKSB7CQkvKiBObyBtb3JlIHRvIHNlbmQgc28gbm93IHRoZSBkYXRhICovCisJaWYgKHdp bmRvdyh3c2xvdG4pIDwgMCkgewkvKiBBbGxvY2F0ZSBuZWdvdGlhdGVkIHdpbmRvdyBzbG90cyAq LworCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qgb3BlbiB3aW5kb3ciKTsKKwkgICAgUkVTVU1F OworCX0KKwlpZiAoKHggPSBzZGF0YSgpKSA9PSAtMikgewkvKiBGaWxlIGFjY2VwdGVkLCBzZW5k IGZpcnN0IGRhdGEgKi8KKwkgICAgd2luZG93KDEpOwkJCS8qIENvbm5lY3Rpb24gYnJva2VuICov CisJICAgIHggPSBjbHNpZigpOwkJLyogQ2xvc2UgZmlsZSAqLworCSAgICByZXR1cm4oc3VjY2Vz cyA9IDApOwkvKiBSZXR1cm4gZmFpbHVyZSAqLworCX0gZWxzZSBpZiAoeCA9PSAtOSkgewkJLyog VXNlciBpbnRlcnJ1cHRlZCAqLworCSAgICBlcnJwa3QoKENIQVIgKikiVXNlciBjYW5jZWxsZWQi KTsgLyogU2VuZCBFcnJvciBwYWNrZXQgKi8KKwkgICAgd2luZG93KDEpOwkJCS8qIFNldCB3aW5k b3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8KKwkgICAgdGltaW50ID0gc190aW1pbnQ7CQkvKiBSZXN0 b3JlIHRpbWVvdXQgKi8KKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJLyogRmFpbGVkICovCisJ fSBlbHNlIGlmICh4IDwgMCkgewkJLyogSWYgZGF0YSB3YXMgbm90IHNlbnQgKi8KKwkgICAgd2lu ZG93KDEpOwkJCS8qIHB1dCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEsICovCisJICAgIGRlYnVnKEYx MDEsIjxzc2F0dHI+WSBjeHNlZW4iLCIiLGN4c2Vlbik7CisJICAgIGlmIChjbHNpZigpIDwgMCkJ CS8qIENsb3NlIGlucHV0IGZpbGUgKi8KKwkgICAgICBjeHNlZW4gPSAxOwkJLyogU2VuZCBFT0Yg cGFja2V0ICovCisJICAgIHNlb2YoY3hzZWVufHxjenNlZW4pOworCSAgICBCRUdJTiBzc2VvZjsJ CS8qIGFuZCBzd2l0Y2ggdG8gRU9GIHN0YXRlLiAqLworCX0gZWxzZSB7CisJICAgIEJFR0lOIHNz ZGF0YTsJCS8qIEFsbCBvaywgc3dpdGNoIHRvIHNlbmQtZGF0YSBzdGF0ZSAqLworCX0KKyAgICB9 Cit9CisgICAgYnJlYWs7CitjYXNlIDY4OgorICAgIHsgIAkJCQkvKiBDdHJsLUMgb3IgY29ubmVj dGlvbiBsb3NzLiAqLworICAgIHdpbmRvdygxKTsJCQkJLyogU2V0IHdpbmRvdyBzaXplIGJhY2sg dG8gMS4uLiAqLworICAgIGN4c2VlbiA9IDE7CQkJCS8qIFRvIGluZGljYXRlIGludGVycnVwdGlv biAqLworICAgIHggPSBjbHNpZigpOwkJCS8qIENsb3NlIGZpbGUgKi8KKyAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOwkJLyogRmFpbGVkICovCit9CisgICAgYnJlYWs7CitjYXNlIDY5OgorICAgIHsJ CQkJLyogR290IEFDSyB0byBEYXRhIHBhY2tldCAqLworICAgIGNhbm5lZChyZGF0YXApOwkJCS8q IENoZWNrIGlmIGZpbGUgdHJhbnNmZXIgY2FuY2VsbGVkICovCisgICAgZGVidWcoRjExMSwiPHNz ZGF0YT5ZIGN4c2VlbiIscmRhdGFwLGN4c2Vlbik7CisgICAgZGVidWcoRjExMSwiPHNzZGF0YT5Z IGN6c2VlbiIscmRhdGFwLGN6c2Vlbik7CisgICAgaWYgKCh4ID0gc2RhdGEoKSkgPT0gLTIpIHsJ CS8qIFRyeSB0byBzZW5kIG5leHQgZGF0YSAqLworCXdpbmRvdygxKTsJCQkvKiBDb25uZWN0aW9u IGxvc3QsIHJlc2V0IHdpbmRvdyAqLworCXggPSBjbHNpZigpOwkJCS8qIENsb3NlIGZpbGUgKi8K KwlyZXR1cm4oc3VjY2VzcyA9IDApOwkJLyogRmFpbGVkICovCisgICAgfSBlbHNlIGlmICh4ID09 IC05KSB7CQkvKiBVc2VyIGludGVycnVwdGVkICovCisJZXJycGt0KChDSEFSICopIlVzZXIgY2Fu Y2VsbGVkIik7IC8qIFNlbmQgRXJyb3IgcGFja2V0ICovCisJd2luZG93KDEpOwkJCS8qIFNldCB3 aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8KKwl0aW1pbnQgPSBzX3RpbWludDsJCS8qIFJlc3Rv cmUgb3JpZ2luYWwgdGltZW91dCAqLworCXJldHVybihzdWNjZXNzID0gMCk7CQkvKiBGYWlsZWQg Ki8KKyAgICB9IGVsc2UgaWYgKHggPCAwKSB7CQkJLyogRU9GIC0gZmluaXNoZWQgc2VuZGluZyBk YXRhICovCisJZGVidWcoRjEwMSwiPHNzZGF0YT5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKKwl3aW5k b3coMSk7CQkJLyogU2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLworCWlmIChjbHNpZigp IDwgMCkJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8KKwkgIGN4c2VlbiA9IDE7CQkJLyogU2VuZCBF T0YgcGFja2V0ICovCisJZGVidWcoRjEwMSwiPHNzZGF0YT5ZIENBTExJTkcgU0VPRigpIiwiIixj eHNlZW4pOworCXNlb2YoY3hzZWVufHxjenNlZW4pOworCUJFR0lOIHNzZW9mOwkJCS8qIGFuZCBl bnRlciBzZW5kLWVvZiBzdGF0ZSAqLworICAgIH0KKyAgICAvKiBOT1RFOiBJZiB4ID09IDAgaXQg bWVhbnMgd2UncmUgZHJhaW5pbmc6IHNlZSBzZGF0YSgpISAqLworfQorICAgIGJyZWFrOworY2Fz ZSA3MDoKKyAgICB7CQkJCS8qIEdvdCBBQ0sgdG8gRU9GICovCisgICAgaW50IGcsIHhkaXNjYXJk OworICAgIGNhbm5lZChyZGF0YXApOwkJCS8qIENoZWNrIGlmIGZpbGUgdHJhbnNmZXIgY2FuY2Vs bGVkICovCisgICAgZGVidWcoRjExMSwiPHNzZW9mPlkgY3hzZWVuIixyZGF0YXAsY3hzZWVuKTsK KyAgICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBjenNlZW4iLHJkYXRhcCxjenNlZW4pOworICAgIGRl YnVnKEYxMTEsIjxzc2VvZj5ZIGRpc2NhcmQiLHJkYXRhcCxkaXNjYXJkKTsKKyAgICB4ZGlzY2Fy ZCA9IGRpc2NhcmQ7CisgICAgZGlzY2FyZCA9IDA7CisgICAgc3VjY2VzcyA9IChjeHNlZW4gPT0g MCAmJiBjenNlZW4gPT0gMCk7IC8qIFRyYW5zZmVyIHN0YXR1cy4uLiAqLworICAgIGRlYnVnKEYx MDEsIjxzc2VvZj5ZIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOworICAgIGlmIChzdWNjZXNzICYmIHJl amVjdGlvbiA+IDApCSAgICAvKiBJZiByZWplY3RlZCwgc3VjY2VlZCBpZiAqLworICAgICAgaWYg KHJlamVjdGlvbiAhPSAnIycgJiYJCSAgICAvKiByZWFzb24gd2FzIGRhdGUgKi8KKwkgIHJlamVj dGlvbiAhPSAxICYmIHJlamVjdGlvbiAhPSAnPycpIC8qIG9yIG5hbWU7ICovCisJc3VjY2VzcyA9 IDA7CQkJICAgIC8qIGZhaWwgb3RoZXJ3aXNlLiAqLworICAgIGN4c2VlbiA9IDA7CQkJCS8qIFRo aXMgZ29lcyBiYWNrIHRvIHplcm8uICovCisgICAgaWYgKHN1Y2Nlc3MpIHsJCQkvKiBPbmx5IGlm IHRyYW5zZmVyIHN1Y2NlZWRlZC4uLiAqLworCXh4c2NyZWVuKFNDUl9TVCxTVF9PSywwTCwiIik7 CisJaWYgKCF4ZGlzY2FyZCkgeworCSAgICBtYWtlc3RyKCZzZnNwZWMscHNmc3BlYyk7CS8qIFJl Y29yZCBmaWxlbmFtZXMgZm9yIFdIRVJFICovCisJICAgIG1ha2VzdHIoJnNyZnNwZWMscHNyZnNw ZWMpOworCX0KKwlpZiAobW92aW5nKSB7CQkJLyogSWYgTU9WRSdpbmcgKi8KKwkgICAgeCA9IHpk ZWxldChmaWxuYW0pOwkJLyogVHJ5IHRvIGRlbGV0ZSB0aGUgc291cmNlIGZpbGUgKi8KKyNpZmRl ZiBUTE9HCisJICAgIGlmICh0cmFsb2cpIHsKKwkJaWYgKHggPiAtMSkgeworCQkgICAgdGxvZyhG MTEwLCIgZGVsZXRlZCIsZmlsbmFtLDApOworCQl9IGVsc2UgeworCQkgICAgdGxvZyhGMTEwLCIg ZGVsZXRlIGZhaWxlZDoiLGNrX2VycnN0cigpLDApOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBU TE9HICovCisJfSBlbHNlIGlmIChzbmRfbW92ZSkgewkJLyogT3IgbW92ZSBpdCAqLworCSAgICBp bnQgeDsKKwkgICAgeCA9IHpyZW5hbWUoZmlsbmFtLHNuZF9tb3ZlKTsKKyNpZmRlZiBUTE9HCisJ ICAgIGlmICh0cmFsb2cpIHsKKwkJaWYgKHggPiAtMSkgeworCQkgICAgdGxvZyhGMTEwLCIgbW92 ZWQgdG8gIixzbmRfbW92ZSwwKTsKKwkJfSBlbHNlIHsKKwkJICAgIHRsb2coRjExMCwiIG1vdmUg ZmFpbGVkOiIsY2tfZXJyc3RyKCksMCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIFRMT0cgKi8K Kwl9IGVsc2UgaWYgKHNuZF9yZW5hbWUpIHsJLyogT3IgcmVuYW1lIGl0ICovCisJICAgIGNoYXIg KnMgPSBzbmRfcmVuYW1lOwkvKiBSZW5hbWluZyBzdHJpbmcgKi8KKyNpZm5kZWYgTk9TUEwKKwkg ICAgaW50IHk7CQkJLyogUGFzcyBpdCB0aHJ1IHRoZSBldmFsdWF0b3IgKi8KKwkgICAgZXh0ZXJu IGludCBjbWRfcXVvdGluZzsJLyogZm9yIFx2KGZpbGVuYW1lKSAqLworCSAgICBpZiAoY21kX3F1 b3RpbmcpIHsJCS8qIEJ1dCBvbmx5IGlmIGNtZF9xdW90aW5nIGlzIG9uICovCisJCXkgPSBNQVhS UDsKKwkJcyA9IChjaGFyICopc3J2Y21kOworCQl6enN0cmluZyhzbmRfcmVuYW1lLCZzLCZ5KTsK KwkJcyA9IChjaGFyICopc3J2Y21kOworCSAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKwkgICAg aWYgKHMpIGlmICgqcykgeworCQlpbnQgeDsKKwkJeCA9IHpyZW5hbWUoZmlsbmFtLHMpOworI2lm ZGVmIFRMT0cKKwkgICAgaWYgKHRyYWxvZykgeworCQlpZiAoeCA+IC0xKSB7CisJCSAgICB0bG9n KEYxMTAsIiByZW5hbWVkIHRvIixzLDApOworCQl9IGVsc2UgeworCQkgICAgdGxvZyhGMTEwLCIg cmVuYW1lIGZhaWxlZDoiLGNrX2VycnN0cigpLDApOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBU TE9HICovCisjaWZkZWYgQ09NTUVOVAorCQkqcyA9IE5VTDsKKyNlbmRpZiAvKiBDT01NRU5UICov CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChjenNlZW4pIHsJCQkvKiBDaGVjayBncm91cCBp bnRlcnJ1cHRpb24gZmxhZyAqLworCWcgPSAwOwkJCQkvKiBObyBtb3JlIGZpbGVzIGlmIGludGVy cnVwdGVkICovCisgICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlLi4uICovCisjaWZkZWYgQ09N TUVOVAorCS8qIFRoaXMgY29kZSBtYWtlcyBhbnkgb3BlbiBlcnJvciBmYXRhbCB0byBhIGZpbGUt Z3JvdXAgdHJhbnNmZXIuICovCisJZyA9IGduZmlsZSgpOworCWRlYnVnKEYxMTEsIjxzc2VvZj5Z IGduZmlsZSIsZmlsbmFtLGcpOworCWlmIChnID4gMCkgewkJCS8qIEFueSBtb3JlIGZpbGVzIHRv IHNlbmQ/ICovCisJICAgIGlmIChzZmlsZSh4ZmxnKSkJCS8qIFllcywgdHJ5IHRvIHNlbmQgbmV4 dCBmaWxlIGhlYWRlciAqLworCSAgICAgIEJFR0lOIHNzZmlsZTsJCS8qIGlmIG9rLCBlbnRlciBz ZW5kLWZpbGUgc3RhdGUgKi8KKwkgICAgZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCisJCXMgPSB4 ZmxnID8gIkNhbid0IGV4ZWN1dGUgY29tbWFuZCIgOiAoY2hhciAqKWVwa3Rtc2c7CisJCWlmICgh KnMpIHMgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKKwkJZXJycGt0KChDSEFSICopcyk7CS8qIHNlbmQg ZXJyb3IgbWVzc2FnZSAqLworCQlSRVNVTUU7CQkJLyogYW5kIHF1aXQgKi8KKwkgICAgfQorCX0g ZWxzZSB7CQkJLyogTm8gbmV4dCBmaWxlICovCisJICAgIHRzZWNzID0gZ3RpbWVyKCk7CQkvKiBn ZXQgc3RhdGlzdGljcyB0aW1lcnMgKi8KKyNpZmRlZiBHRlRJTUVSCisJICAgIGZwdHNlY3MgPSBn ZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCSAgICBzZW90KCk7CQkJLyogc2VuZCBF T1QgcGFja2V0ICovCisJICAgIEJFR0lOIHNzZW90OwkJLyogZW50ZXIgc2VuZC1lb3Qgc3RhdGUg Ki8KKwl9CisjZWxzZSAgLyogQ09NTUVOVCAqLworCXdoaWxlICgxKSB7CQkJLyogS2VlcCB0cnlp bmcuLi4gKi8KKwkgICAgZyA9IGduZmlsZSgpOwkJLyogR2V0IG5leHQgZmlsZSAqLworCSAgICBk ZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBnbmZpbGUiLGZpbG5hbSxnKTsKKwkgICAgaWYgKGcgPT0gMCAm JiBnbmZlcnJvciA9PSAwKSAvKiBObyBtb3JlLCBzdG9wIHRyeWluZyAqLworCSAgICAgIGJyZWFr OworCSAgICBpZiAoZyA+IDApIHsJCS8qIEhhdmUgb25lICovCisJCWlmIChzZmlsZSh4ZmxnKSkg ewkvKiBUcnkgdG8gb3BlbiBhbmQgc2VuZCBGIHBhY2tldCAqLworCQkgICAgQkVHSU4gc3NmaWxl OwkvKiBJZiBPSywgZW50ZXIgc2VuZC1maWxlIHN0YXRlICovCisJCSAgICBicmVhazsJCS8qIGFu ZCBicmVhayBvdXQgb2YgbG9vcC4gKi8KKwkJfQorCSAgICB9IC8qIE90aGVyd2lzZSBrZWVwIHRy eWluZyB0byBnZXQgb25lIHdlIGNhbiBzZW5kLi4uICovCisJfQorICAgIH0KKyAgICBpZiAoZyA9 PSAwKSB7CisJZGVidWcoRjEwMSwiPHNzZW9mPlkgbm8gbW9yZSBmaWxlcyIsIiIsY3pzZWVuKTsK Kwl0c2VjcyA9IGd0aW1lcigpOwkJLyogR2V0IHN0YXRpc3RpY3MgdGltZXJzICovCisjaWZkZWYg R0ZUSU1FUgorCWZwdHNlY3MgPSBnZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCXNl b3QoKTsJCQkJLyogU2VuZCBFT1QgcGFja2V0ICovCisJQkVHSU4gc3Nlb3Q7CQkJLyogRW50ZXIg c2VuZC1lb3Qgc3RhdGUgKi8KKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorICAgIGJy ZWFrOworY2FzZSA3MToKKyAgICB7CQkJCS8qIEdvdCBBQ0sgdG8gRU9UICovCisgICAgZGVidWco RjEwMSwic3Nlb3QganVzdG9uZSIsIiIsanVzdG9uZSk7CisgICAgUkVTVU1FOwkJCQkvKiBBbGwg ZG9uZSwganVzdCBxdWl0ICovCit9CisgICAgYnJlYWs7CitjYXNlIDcyOgorICAgIHsJCQkJCS8q IEdvdCBFcnJvciBwYWNrZXQsIGluIGFueSBzdGF0ZSAqLworICAgIGNoYXIgKnMgPSAiIjsKKyAg ICB3aW5kb3coMSk7CQkJCS8qIENsb3NlIHdpbmRvdyAqLworICAgIHRpbWludCA9IHNfdGltaW50 OwkJCS8qIFJlc3RvcmUgb3JpZ2luYWwgdGltZW91dCAqLworICAgIGlmICgqZXBrdG1zZykJCQkv KiBNZXNzYWdlIGZyb20gRXJyb3IgcGFja2V0ICovCisgICAgICBzID0gKGNoYXIgKillcGt0bXNn OworICAgIGlmICghKnMpIHsJCQkJLyogSWYgbm90IHRoZXJlIHRoZW4gbWF5YmUgaGVyZSAqLwor CXMgPSAoY2hhciAqKXJkYXRhcDsKKwlja3N0cm5jcHkoKGNoYXIgKillcGt0bXNnLChjaGFyICop cmRhdGFwLFBLVE1TR0xFTik7CisgICAgfQorICAgIGlmICghKnMpCQkJCS8qIEhvcGVmdWxseSB3 ZSdsbCBuZXZlciBzZWUgdGhpcy4gKi8KKyAgICAgIHMgPSAiVW5rbm93biBlcnJvciI7CisgICAg c3VjY2VzcyA9IDA7CQkJLyogRm9yIElGIFNVQ0NFU1MvRkFJTC4gKi8KKyAgICBkZWJ1ZyhGMTAx LCJja2Nwcm8udyBqdXN0b25lIGF0IEUgcGt0IiwiIixqdXN0b25lKTsKKworICAgIHN1Y2Nlc3Mg PSAwOwkJCS8qIFRyYW5zZmVyIGZhaWxlZCAqLworICAgIHhmZXJzdGF0ID0gc3VjY2VzczsJCQkv KiBSZW1lbWJlciB0cmFuc2ZlciBzdGF0dXMgKi8KKyAgICBpZiAoIWVwa3RzZW50KSB7CisJeCA9 IHF1aWV0OyBxdWlldCA9IDE7CQkvKiBDbG9zZSBmaWxlcyBzaWxlbnRseSwgKi8KKwllcGt0cmN2 ZCA9IDE7CQkJLyogUHJldmVudCBtZXNzYWdlcyBmcm9tIGNsc29mKCkgKi8KKwljbHNpZigpOwor CWNsc29mKDEpOyAJCQkvKiBkaXNjYXJkaW5nIGFueSBvdXRwdXQgZmlsZS4gKi8KKwllcm1zZyhz KTsJCQkvKiBJc3N1ZSB0aGUgbWVzc2FnZSAoY2FsbHMgc2NyZWVuKS4gKi8KKwlxdWlldCA9IHg7 CQkJLyogUmVzdG9yZSBxdWlldCBzdGF0ZSAqLworICAgIH0KKyAgICB0c3RhdHMoKTsJCQkJLyog R2V0IHN0YXRzICovCisvKgorICBJZiB3ZSBhcmUgZXhlY3V0aW5nIGNvbW1hbmRzIGZyb20gYSBj b21tYW5kIGZpbGUgb3IgbWFjcm8sIGxldCB0aGUgY29tbWFuZAorICBmaWxlIG9yIG1hY3JvIGRl Y2lkZSB3aGV0aGVyIHRvIGV4aXQsIGJhc2VkIG9uIFNFVCB7IFRBS0UsIE1BQ1JPIH0gRVJST1Iu CisqLworICAgIGlmICgKKyNpZm5kZWYgTk9JQ1AKKwkheGNtZHNyYyAmJgorI2VuZGlmIC8qIE5P SUNQICovCisJYmFja2dyZCAmJiAhc2VydmVyKQorICAgICAgZmF0YWwoIlByb3RvY29sIGVycm9y Iik7CisgICAgeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOwkvKiBTYXZlIHRoaXMgZm9yIGRv ZXhpdCgpLiAqLworI2lmZGVmIENLX1RNUERJUgorLyogSWYgd2Ugd2VyZSBjZCdkIHRlbXBvcmFy aWx5IHRvIGFub3RoZXIgZGV2aWNlIG9yIGRpcmVjdG9yeSAuLi4gKi8KKyAgICBpZiAoZl90bXBk aXIpIHsKKwlpbnQgeDsKKwl4ID0gemNoZGlyKChjaGFyICopIHNhdmRpcik7CS8qIC4uLiByZXN0 b3JlIHByZXZpb3VzIGRpcmVjdG9yeSAqLworCWZfdG1wZGlyID0gMDsJCQkvKiBhbmQgcmVtZW1i ZXIgd2UgZGlkIGl0LiAqLworCWRlYnVnKEYxMTEsImNrY3Byby53IEUgdG1wZGlyIHJlc3RvcmVk IixzYXZkaXIseCk7CisgICAgfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworI2lmZGVmIElLU0RC CisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiRVJST1IiLCAoY2hhciAqKWVwa3Rt c2csICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIFJFU1VNRTsKK30KKyAgICBicmVhazsK K2Nhc2UgNzM6CisgICAgeyBzdWNjZXNzID0gMDsgUVVJVDsgfQorICAgIGJyZWFrOworY2FzZSA3 NDoKKyAgICB7CQkJCQkvKiBBbnl0aGluZyBub3QgYWNjb3VudGVkIGZvciBhYm92ZSAqLworICAg IGVycnBrdCgoQ0hBUiAqKSJVbmV4cGVjdGVkIHBhY2tldCB0eXBlIik7IC8qIEdpdmUgZXJyb3Ig bWVzc2FnZSAqLworICAgIHdpbmRvdygxKTsKKyAgICB4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1J VCk7CS8qIFNhdmUgdGhpcyBmb3IgZG9leGl0KCkuICovCisgICAgUkVTVU1FOwkJCQkvKiBhbmQg cXVpdCAqLworfQorICAgIGJyZWFrOworCisJICAgIH0KKyAgICB9Cit9CisKK2NoYXIgdGJsW10g PSB7CisgLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcs IDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDcz LCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs CisgLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCAxNSwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgMTMsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0 LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDczLCAg MywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisg LTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA1NywgNzQsIDc0LCA3MiwgNTMsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA1NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3 NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDczLCAgMywg IDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsCisgNzQsIDU1LCA3NCwgNzQsIDU2LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDU5LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwg NzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDczLCAgMywgIDEs IDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs CisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDU4LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDYxLCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQs ICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDYwLCAgMywgIDEsIDc0 LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsCisgNzQsIDc0LCA3NCwgNjUsIDc0LCA3MiwgNzQsIDY0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA2MywgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNjIs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5 LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDczLCAgMywgIDEsIDc0LCA3 NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNjYsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAg NCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDczLCAgMywgIDEsIDc0LCA3NCwg IDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs CisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNjcsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwg NzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIs IDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisg NzQsIDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNjksIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQs ICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDY4LCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0 LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQs IDc0LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzAsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1 LCAgOCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAx MCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs CisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzEsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsCisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAg OCwgNzQsIDc0LCA3NCwgIDYsCisgNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDI5LCAyOSwgMjksIDI5LCAyOSwgMjks IDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksCisgMjksIDI5LCAyOSwgMjksIDI5 LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksCisgMjksIDI5LCAy OSwgMjYsIDI5LCAyOSwgMjksIDI1LCAxOSwgMTcsIDIyLCAyOSwgMjksIDI5LCAyOCwgMjMsCisg MjksIDI5LCAxOCwgMTIsIDI5LCAyOSwgMjAsIDIxLCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAy OSwgMjksCisgMjksIDExLCAyOSwgIDcsIDI5LCAyOSwgMjksICA5LCAgNCwgMjksICA1LCAgOCwg MjksIDI5LCAyOSwgIDYsCisgMjksIDI3LCAgMywgIDEsIDI5LCAyOSwgIDIsIDI5LCAxMCwgMjks IDI5LCAyOSwgMjksIDI5LCAyOSwgMjksCisgLTEsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUw LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsCisgNTAsIDUwLCA1MCwgNTAsIDUwLCA1 MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsCisgNTAsIDMyLCA1MCwg MzEsIDMzLCAzNCwgMzUsIDUwLCAzOCwgMzAsIDUwLCA0MCwgMzcsIDQ4LCA1MCwgNTAsCisgNTAs IDUwLCAzOSwgNDEsIDQyLCA0NSwgNDcsIDQ2LCAzNiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwg NTAsCisgNTAsIDExLCA1MCwgIDcsIDQ0LCA1MCwgNTAsICA5LCAgNCwgNTAsICA1LCAgOCwgNTAs IDQzLCA1MCwgIDYsCisgNTAsIDQ5LCAgMywgIDEsIDUwLCA1MCwgIDIsIDUwLCAxMCwgNTAsIDUw LCA1MCwgNTAsIDUwLCA1MCwgNTAsCisgLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQs IDc0LCA3MiwgNzQsIDc0LCA3NCwgMTcsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0 LCA3NCwgMTIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgMTYsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs CisgNzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0 LCA3NCwgIDYsCisgNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3MiwgNTMsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3 NCwgMTIsIDc0LCA3NCwgNzQsIDc0LCA1NCwgNTIsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisg NzQsIDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3 NCwgIDYsCisgNzQsIDUxLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsCisgLTEsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 MiwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgMTQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQs IDExLCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwg IDYsCisgNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQs IDc0LCA3NCwgNzQsCisgIDAsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3 NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDc0LCA3NCwgNzQsIDc0LCA3Miwg NzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgMjQsCisgNzQsIDc0LCA3NCwgMTIs IDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsCisgNzQsIDEx LCA3NCwgIDcsIDc0LCA3NCwgNzQsICA5LCAgNCwgNzQsICA1LCAgOCwgNzQsIDc0LCA3NCwgIDYs CisgNzQsIDczLCAgMywgIDEsIDc0LCA3NCwgIDIsIDc0LCAxMCwgNzQsIDc0LCA3NCwgNzQsIDc0 LCA3NCw3NAorfTsKKworCisvKgorICBGcm9tIGhlcmUgZG93biB0byBwcm90bygpIGFyZSByb3V0 aW5lcyB0aGF0IHdlcmUgbW92ZWQgb3V0IG9mIHRoZSBzdGF0ZQorICB0YWJsZSBzd2l0Y2hlciBi ZWNhdXNlIHRoZSByZXN1bHRpbmcgc3dpdGNoKCkgaGFkIGJlY29tZSB0b28gbGFyZ2UuCisgIFRv IG1vdmUgdGhlIGNvbnRlbnRzIG9mIGEgc3RhdGUtdGFibGUgY2FzZSB0byBhIHJvdXRpbmU6Cisg ICAgMS4gQWRkIGEgcHJvdG90eXBlIHRvIHRoZSBsaXN0IGFib3ZlIHRoZSBzdGF0ZSB0YWJsZSBz d2l0Y2hlci4KKyAgICAyLiBNYWtlIGEgcm91dGluZSB3aXRoIGFuIGFwcHJvcHJpYXRlIG5hbWUs IHJldHVybmluZyBpbnQuCisgICAgMy4gTW92ZSB0aGUgY29kZSBpbnRvIGl0LgorICAgIDQuIFB1 dCBhIGNhbGwgdG8gdGhlIG5ldyByb3V0aW5lIGluIHRoZSBmb3JtZXIgc3BvdDoKKyAgICAgICAg IHJjID0gbmFtZV9vZl9yb3V0aW5lKCk7CisgICAgICAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJj KTsKKyAgICA1LiBBZGQgInJldHVybigtMSk7IiBhZnRlciBldmVyeSBSRVNVTUUsIFNFUlZFLCBv ciBCRUdJTiBtYWNybyBhbmQKKyAgICAgICBhdCB0aGUgZW5kIGlmIHRoZSBjb2RlIGlzIG9wZW4t ZW5kZWQuCisqLworc3RhdGljIGludAorcmN2X2ZpcnN0ZGF0YSgpIHsKKyAgICBleHRlcm4gaW50 IGRpc3BvczsKKyAgICBkZWJ1ZyhGMTAxLCJyY3ZfZmlyc3RkYXRhIiwiIixkaXNwb3MpOworCisg ICAgaWYgKGRpc2NhcmQpIHsJCQkvKiBpZiB3ZSdyZSBkaXNjYXJkaW5nIHRoZSBmaWxlICovCisJ YWNrMSgoQ0hBUiAqKSJYIik7CQkvKiBqdXN0IGFjayB0aGUgZGF0YSBsaWtlIHRoaXMuICovCisJ Y2FuY2VsKys7CQkJLyogYW5kIGNvdW50IGl0ICovCisJQkVHSU4gcmRwa3Q7CQkJLyogYW5kIHdh aXQgZm9yIG1vcmUgZGF0YSBwYWNrZXRzLiAqLworCXJldHVybigtMSk7CisgICAgfSBlbHNlIHsJ CQkJLyogTm90IGRpc2NhcmRpbmcuICovCisJcmZfZXJyID0gIkNhbid0IG9wZW4gZmlsZSI7CisJ aWYgKHhmbGcpIHsJCQkvKiBJZiBzY3JlZW4gZGF0YSAqLworCSAgICBpZiAocmVtZmlsZSkgewkJ LyogcmVkaXJlY3RlZCB0byBmaWxlICovCisJCWlmIChyZW1waXBlKQkJLyogb3IgcGlwZSAqLwor CQkgIHggPSBvcGVuYyhaT0ZJTEUscmVtZGVzdCk7IC8qIFBpcGU6IHN0YXJ0IGNvbW1hbmQgKi8K KwkJZWxzZQorCQkgIHggPSBvcGVuYShyZW1kZXN0LCZpYXR0cik7IC8qIEZpbGU6IG9wZW4gd2l0 aCBhdHRyaWJ1dGVzICovCisJICAgIH0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCisJCXggPSBv cGVudCgmaWF0dHIpOwkvKiAib3BlbiIgdGhlIHNjcmVlbiAqLworCSAgICB9CisJfSBlbHNlIHsJ CQkvKiBvdGhlcndpc2UgKi8KKyNpZmRlZiBDQUxJQlJBVEUKKwkgICAgaWYgKGNhbGlicmF0ZSkg ewkJLyogSWYgY2FsaWJyYXRpb24gcnVuICovCisJCXggPSBja29wZW54KCZpYXR0cik7CS8qIG9w ZW4gbm90aGluZyAqLworI2lmZGVmIFNUUkVBTUlORworCQlpZiAoc3RyZWFtaW5nKQkJLyogU3Ry ZWFtaW5nICovCisJCSAgZmFzdGFjaygpOwkJLyogQUNLIHdpdGhvdXQgQUNLaW5nLiAqLworCQll bHNlCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJCSAgYWNrKCk7CQkvKiBTZW5kIHJlYWwgQUNL ICovCisJCUJFR0lOIHJkcGt0OwkJLyogUHJvY2VlZCB0byBuZXh0IHN0YXRlICovCisJCXJldHVy bigtMSk7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIENBTElCUkFURSAqLworI2lmZGVmIFVOSVgK Ky8qCisgIEluIFVOSVggd2UgY2FuIHBpcGUgdGhlIGZpbGUgZGF0YSBpbnRvIHRoZSBtYWlsIHBy b2dyYW0sIHdoaWNoIGlzIHRvIGJlCisgIHByZWZlcnJlZCB0byB3cml0aW5nIGl0IG91dCB0byBh IHRlbXAgZmlsZSBhbmQgdGhlbiBtYWlsaW5nIGl0IGFmdGVyd2FyZHMuCisgIFRoaXMgZGVwZW5k cyByYXRoZXIgaGVhdmlseSBvbiBhbGwgVU5JWGVzIGhhdmluZyBhIG1haWwgY29tbWFuZCB0aGF0 CisgIGFjY2VwdHMgJy1zICJzdWJqZWN0Iicgb24gdGhlIGNvbW1hbmQgbGluZS4gIE1BSUxDTUQg KGUuZy4gbWFpbCwgTWFpbCwgbWFpbHgpCisgIGlzIGRlZmluZWQgaW4gY2t1ZmlvLmMuCisqLwor CSAgICBpZiAoZGlzcG9zID09ICdNJykgewkvKiBNYWlsLi4uICovCisJCWNoYXIgKnM7CisJCWNo YXIgKiB0bXAgPSBOVUxMOworCQlpbnQgbiA9IDA7CisJCWV4dGVybiBjaGFyICpNQUlMQ01EOwor CQlzID0gaWF0dHIuZGlzcC52YWwgKyAxOworCQluID0gKGludClzdHJsZW4oTUFJTENNRCkgKyAg ICAvKiBNYWlsIGNvbW1hbmQgKi8KKwkJICAoaW50KXN0cmxlbihzKSArCSAgICAgIC8qIGFkZHJl c3MgKi8KKwkJICAoaW50KXN0cmxlbihvZmlsbmFtKSArIDMyOyAgLyogc3ViamVjdCAqLworCQlp ZiAodG1wID0gKGNoYXIgKiltYWxsb2MobikpIHsKKwkJICAgIGNrbWFreG1zZyh0bXAsbiwKKwkJ CSAgICAgIE1BSUxDTUQsIiAtcyBcIiIsb2ZpbG5hbSwiXCIgIixzLAorCQkJICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisJCSAgICBkZWJ1ZyhGMTExLCJyY3ZfZmly c2RhdGEgbWFpbCIsdG1wLChpbnQpc3RybGVuKHRtcCkpOworCQkgICAgeCA9IG9wZW5jKFpPRklM RSwoY2hhciAqKXRtcCk7CisJCSAgICBmcmVlKHRtcCk7CisJCX0gZWxzZQorCQkgIHggPSAwOwor CSAgICB9IGVsc2UgaWYgKGRpc3BvcyA9PSAnUCcpIHsgLyogRGl0dG8gZm9yIHByaW50ICovCisJ CWNoYXIgKiB0bXAgPSBOVUxMOworCQlpbnQgbjsKKwkJZXh0ZXJuIGNoYXIgKlBSSU5UQ01EOwor CQluID0gKGludClzdHJsZW4oUFJJTlRDTUQpICsgKGludClzdHJsZW4oaWF0dHIuZGlzcC52YWwr MSkgKyA0OworCQlpZiAodG1wID0gKGNoYXIgKiltYWxsb2MobikpIHsKKwkJICAgIHNwcmludGYo dG1wLAkvKiBzYWZlIChwcmVjaGVja2VkKSAqLworCQkJICAgICIlcyAlcyIsIFBSSU5UQ01ELCBp YXR0ci5kaXNwLnZhbCArIDEpOworCQkgICAgeCA9IG9wZW5jKFpPRklMRSwoY2hhciAqKXRtcCk7 CisJCSAgICBmcmVlKHRtcCk7CisJCX0gZWxzZQorCQkgIHggPSAwOworCSAgICB9IGVsc2UKKyNl bmRpZiAvKiBVTklYICovCisJICAgICAgeCA9IG9wZW5hKGZpbG5hbSwmaWF0dHIpOwkvKiBvcGVu IHRoZSBmaWxlLCB3aXRoIGF0dHJpYnV0ZXMgKi8KKwl9CisJaWYgKHgpIHsJCQkvKiBJZiBmaWxl IHdhcyBvcGVuZWQgb2sgKi8KKwkgICAgaW50IHJjLCBxZjsKKyNpZm5kZWYgTk9TUEwKKwkgICAg cWYgPSBxdWVyeTsKKyNlbHNlCisJICAgIHFmID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisj aWZkZWYgQ0tUVU5JTkcKKwkgICAgcmMgPSAoYmluYXJ5ICYmICFwYXJpdHkpID8KKwkgICAgICBi ZGVjb2RlKHJkYXRhcCxwdXRmaWwpOgorCSAgICAgICBkZWNvZGUocmRhdGFwLCBxZiA/IHB1dHRy bSA6IHB1dGZpbCwgMSk7CisjZWxzZQorCSAgICByYyA9IGRlY29kZShyZGF0YXAsIHFmID8gcHV0 dHJtIDogcHV0ZmlsLCAxKTsKKyNlbmRpZiAvKiBDS1RVTklORyAqLworCSAgICBpZiAocmMgPCAw KSB7CisJCWVycnBrdCgoQ0hBUiAqKSJFcnJvciB3cml0aW5nIGRhdGEiKTsKKwkJUkVTVU1FOwor CQlyZXR1cm4oLTEpOworCSAgICB9CisjaWZkZWYgU1RSRUFNSU5HCisJICAgIGlmIChzdHJlYW1p bmcpCQkvKiBTdHJlYW1pbmcgd2FzIG5lZ290aWF0ZWQgKi8KKwkgICAgICBmYXN0YWNrKCk7CQkv KiBBQ0sgd2l0aG91dCBBQ0tpbmcuICovCisJICAgIGVsc2UKKyNlbmRpZiAvKiBTVFJFQU1JTkcg Ki8KKwkgICAgICBhY2soKTsJCQkvKiBhY2tub3dsZWRnZSBpdCAqLworCSAgICBCRUdJTiByZHBr dDsJCS8qIGFuZCBzd2l0Y2ggdG8gcmVjZWl2ZS1kYXRhIHN0YXRlICovCisJICAgIHJldHVybigt MSk7CisJfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkgICAgZXJycGt0KChDSEFSICopIHJm X2Vycik7CS8qIHNlbmQgZXJyb3IgcGFja2V0ICovCisgICAgCSAgICBSRVNVTUU7CQkJLyogYW5k IHF1aXQuICovCisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KK30KKworc3RhdGljIGludAor cmN2X3Nob3J0cmVwbHkoKSB7CisjaWZkZWYgUEtUWkVST0hBQ0sKKyAgICBzdWNjZXNzID0gMDsK KyAgICBkZWJ1ZyhGMTExLCJyY3Zfc2hvcnRyZXBseSIscmRhdGFwLGlwa3RsZW4pOworICAgIGlm IChpcGt0YWNrWzBdICYmICFzdHJuY21wKGlwa3RhY2ssKGNoYXIgKilyZGF0YXAsaXBrdGxlbikp IHsKKwkvKiBObyBpdCdzIHRoZSBBQ0sgdG8gdGhlIEkgcGFja2V0IGFnYWluICovCisJeCA9IHNj bWQodmNtZCwoQ0hBUiAqKWNtYXJnKTsJLyogU28gc2VuZCB0aGUgUkVNT1RFIGNvbW1hbmQgYWdh aW4gKi8KKwkvKiBNYXliZSB0aGlzIHNob3VsZCBiZSByZXNlbmQoKSAqLworCWRlYnVnKEYxMTAs IklQS1RaRVJPSEFDSyIsaXBrdGFjayx4KTsKKwlpZiAoeCA8IDApIHsKKwkgICAgZXJycGt0KChD SEFSICopc3JpbXNnKTsKKwkgICAgUkVTVU1FOworCSAgICByZXR1cm4oLTEpOworCX0KKyAgICB9 IGVsc2UgeworCWlwa3RhY2tbMF0gPSBOVUw7CisjZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KKwl1 cnNlcnZlciA9IDE7CisjaWZuZGVmIE5PU0VSVkVSCisjaWZuZGVmIE5PU1BMCisJaWYgKHF1ZXJ5 KSB7CQkJLyogSWYgdG8gcXVlcnksICovCisJICAgIHFidWZwID0gcXVlcnlidWY7CQkvKiAgaW5p dGlhbGl6ZSBxdWVyeSByZXNwb25zZSBidWZmZXIgKi8KKwkgICAgcWJ1Zm4gPSAwOworCSAgICBx dWVyeWJ1ZlswXSA9IE5VTDsKKwl9CisjZW5kaWYgLyogTk9TUEwgKi8KKwl4ID0gMTsKKwlpZiAo cmVtZmlsZSkgewkJCS8qIFJlc3BvbnNlIHJlZGlyZWN0ZWQgdG8gZmlsZSAqLworCSAgICByZl9l cnIgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKKwkgICAgaWYgKHJlbXBpcGUpCQkvKiBvciBwaXBlICov CisJICAgICAgeCA9CisjaWZuZGVmIE5PUFVTSAorCQl6eGNtZChaT0ZJTEUscmVtZGVzdCkJLyog UGlwZTogU3RhcnQgY29tbWFuZCAqLworI2Vsc2UKKwkJMAorI2VuZGlmIC8qIE5PUFVTSCAqLwor CQk7CisJICAgIGVsc2UKKwkgICAgICB4ID0gb3BlbmEocmVtZGVzdCwmaWF0dHIpOyAvKiBGaWxl OiBPcGVuIHdpdGggYXR0cmlidXRlcyAqLworCSAgICBkZWJ1ZyhGMTExLCJyY3Zfc2hvcnRyZXBs eSByZW1maWxlIixyZW1kZXN0LHgpOworCX0gZWxzZSB7CisJICAgIHggPSBvcGVudCgmaWF0dHIp OwkJLyogIm9wZW4iIHRoZSBzY3JlZW4gKi8KKwl9CisJaWYgKHgpIHsJCQkvKiBJZiBmaWxlIHdh cyBvcGVuZWQgb2sgKi8KKwkgICAgaWYgKGRlY29kZShyZGF0YXAsCisjaWZuZGVmIE5PU1BMCisJ CSAgICAgICAocXVlcnkgfHwgIXJlbWZpbGUpID8gcHV0dHJtIDoKKyNlbHNlCisJCSAgICAgICAh cmVtZmlsZSA/IHB1dHRybSA6CisjZW5kaWYgLyogTk9TUEwgKi8KKwkJICAgICAgIHpwdXRmaWws IDEpIDwgMCkgeyAvKiBOb3RlOiB6cHV0ZmlsLCBub3QgcHV0ZmlsLiAqLworCQllcnJwa3QoKENI QVIgKikiRXJyb3Igd3JpdGluZyBkYXRhIik7CisJCVJFU1VNRTsKKwkJcmV0dXJuKC0xKTsKKwkg ICAgfSBlbHNlIHsKKwkJaWYgKHJkYXRhcCkJCS8qIElmIHdlIGhhZCBkYXRhICovCisJCSAgaWYg KCpyZGF0YXApCQkvKiBhZGQgYSBsaW5lIHRlcm1pbmF0b3IgKi8KKwkJICAgIGlmIChyZW1maWxl KSB7CS8qIHRvIGZpbGUgKi8KKwkJCXpzb3V0bChaT0ZJTEUsIiIpOworCQkgICAgfSBlbHNlIHsJ CS8qIG9yIHRvIHNjcmVlbi4gKi8KKyNpZm5kZWYgTk9JQ1AKKwkJCWlmICghcXVlcnkgfHwgIXhj bWRzcmMpCisjZW5kaWYgLyogTk9JQ1AgKi8KKwkJCSAgaWYgKCEocXVpZXQgJiYgcmNkYWN0aXZl KSkKKwkJCSAgICBjb25vbGwoIiIpOworCQkgICAgfQorCQlpZiAoYnllX2FjdGl2ZSAmJiBuZXR3 b3JrKSB7IC8qIEkgc2VudCBCWUUgb3IgUkVNT1RFIExPR09VVCAqLworCQkgICAgbXNsZWVwKDUw MCk7CS8qIGNvbW1hbmQgYW5kIGdvdCB0aGUgQUNLLi4uICovCisJCSAgICBieWVfYWN0aXZlID0g MDsKKwkJICAgIHR0Y2xvcygwKTsKKwkJfQorCQljbHNvZigwKTsKKwkJaWYgKCFlcGt0c2VudCAm JiAhZXBrdHJjdmQpIC8qIElmIG5vIGVycm9yIHBhY2tldC4uLiAqLworCQkgIHN1Y2Nlc3MgPSAx OwkJLyogc3VjY2Vzcy4gKi8KKwkJUkVTVU1FOworCQlyZXR1cm4oLTEpOworCSAgICB9CisJfSBl bHNlIHsJCQkvKiBGaWxlIG5vdCBvcGVuZWQgT0sgKi8KKwkgICAgZXJycGt0KChDSEFSICopIHJm X2Vycik7CS8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLworCSAgICBSRVNVTUU7CQkJLyogYW5kIHF1 aXQuICovCisJICAgIHJldHVybigtMSk7CisJfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisjaWZk ZWYgUEtUWkVST0hBQ0sKKyAgICB9CisjZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJyY3Zfc2hvcnRyZXBseSBmYWxsdGhydSIsIiIsc3VjY2Vzcyk7CisgICAgcmV0dXJu KC0xKTsKK30KKworCitzdGF0aWMgaW50CitzcnZfcXVlcnkoKSB7CisjaWZuZGVmIE5PU0VSVkVS CisjaWZuZGVmIE5PU1BMCisgICAgY2hhciBjOworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNr eHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdf UFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFFVRVJZIiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlm IC8qIENLU1lTTE9HICovCisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3RzdGF0 ZSh3aGF0LCJSRU1PVEUgUVVFUlkiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKKyNlbmRpZiAv KiBJS1NEQiAqLworICAgIGMgPSAqKHNydmNtZCsyKTsJCQkvKiBRID0gUXVlcnksIFMgPSBTZXQg Ki8KKyAgICBpZiAoYyA9PSAnUScpIHsJCQkvKiBRdWVyeSAqLworCWlmICghRU5BQkxFRChlbl9x dWUpKSB7IC8qIFNlY3VyaXR5ICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgUVVFUlkg ZGlzYWJsZWQiKTsKKwkgICAgUkVTVU1FOworCSAgICByZXR1cm4oLTEpOworCX0gZWxzZSB7CQkJ LyogUXVlcnkgYWxsb3dlZCAqLworCSAgICBpbnQgbjsgY2hhciAqcCwgKnE7CisJICAgIHFidWZw ID0gcXVlcnlidWY7CQkvKiBXaXBlIG91dCBvbGQgc3R1ZmYgKi8KKwkgICAgcWJ1Zm4gPSAwOwor CSAgICBxdWVyeWJ1ZlswXSA9IE5VTDsKKwkgICAgcCA9IChjaGFyICopIHNydmNtZCArIDM7CS8q IFBvaW50ZXIgZm9yIG1ha2luZyB3cmFwcGVyICovCisJICAgIG4gPSBzdHJsZW4oKGNoYXIgKilz cnZjbWQpOwkvKiBQb3NpdGlvbiBvZiBlbmQgKi8KKwkgICAgYyA9ICooc3J2Y21kKzQpOwkJLyog V2hpY2ggdHlwZSBvZiB2YXJpYWJsZSAqLworCisJICAgIGlmICgqKHNydmNtZCs2KSA9PSBDTURR KSB7CS8qIFN0YXJ0cyB3aXRoIGNvbW1hbmQgcXVvdGU/ICovCisJCXAgPSAoY2hhciAqKSBzcnZj bWQgKyA2OyAvKiBUYWtlIGl0IGxpdGVyYWxseSAqLworCQlpZiAoKnAgPT0gQ01EUSkgcCsrOwor CSAgICB9IGVsc2UgewkJCS8qIFRoZXkgcGxheWVkIGJ5IHRoZSBydWxlcyAqLworCQlpZiAoYyA9 PSAnSycpIHsJCS8qIEtlcm1pdCB2YXJpYWJsZSAqLworCQkgICAgaW50IGs7CisJCSAgICBrID0g KGludCkgc3RybGVuKHApOworCQkgICAgaWYgKGsgPiAwICYmIHBbay0xXSA9PSAnKScpIHsKKwkJ CXAgPSAoY2hhciAqKShzcnZjbWQgKyA0KTsKKwkJCSooc3J2Y21kKzQpID0gQ01EUTsKKwkJCSoo c3J2Y21kKzUpID0gJ2YnOyAvKiBGdW5jdGlvbiwgc28gbWFrZSBpdCBcZi4uLigpICovCisJCSAg ICB9IGVsc2UgeworCQkJKihzcnZjbWQrMykgPSBDTURROyAvKiBTdHVmZiB3cmFwcGluZyBpbnRv IGJ1ZmZlciAqLworCQkJKihzcnZjbWQrNCkgPSAndic7ICAvKiBWYXJpYWJsZSwgc28gbWFrZSBp dCBcdiguLi4pICovCisJCQkqKHNydmNtZCs1KSA9ICcoJzsgIC8qIGFyb3VuZCB2YXJpYWJsZSBu YW1lICovCisJCQkqKHNydmNtZCtuKSA9ICcpJzsKKwkJCSooc3J2Y21kK24rMSkgPSBOVUw7CisJ CSAgICB9CisJCX0gZWxzZSB7CisJCSAgICAqKHNydmNtZCszKSA9IENNRFE7IC8qIFN0dWZmIHdy YXBwaW5nIGludG8gYnVmZmVyICovCisJCSAgICAqKHNydmNtZCs0KSA9ICd2JzsgLyogIFZhcmlh YmxlLCBzbyBtYWtlIGl0IFx2KC4uLikgKi8KKwkJICAgICooc3J2Y21kKzUpID0gJygnOwkvKiBh cm91bmQgdmFyaWFibGUgbmFtZSAqLworCQkgICAgKihzcnZjbWQrbikgPSAnKSc7CisJCSAgICAq KHNydmNtZCtuKzEpID0gTlVMOworCQkgICAgaWYgKGMgPT0gJ1MnKSB7CS8qIFN5c3RlbSB2YXJp YWJsZSAqLworCQkJKihzcnZjbWQrNCkgPSAnJCc7IC8qICBzbyBpdCdzIFwkKC4uLikgKi8KKwkJ ICAgIH0gZWxzZSBpZiAoYyA9PSAnRycpIHsgLyogTm9uLVwgR2xvYmFsIHZhcmlhYmxlICovCisJ CQkqKHNydmNtZCs0KSA9ICdtJzsgLyogIHNvIHdyYXAgaXQgaW4gXG0oLi4uKSAqLworCQkgICAg fQorCQl9CisJICAgIH0JCQkJLyogTm93IGV2YWx1YXRlIGl0ICovCisJICAgIG4gPSBRQlVGTDsJ CQkvKiBNYXggbGVuZ3RoICovCisJICAgIHEgPSBxdWVyeWJ1ZjsJCS8qIFdoZXJlIHRvIHB1dCBp dCAqLworCSAgICBpZiAoenpzdHJpbmcocCwmcSwmbikgPCAwKSB7CisJCWVycnBrdCgobiA+IDAp ID8gKENIQVIgKikiQ2FuJ3QgZ2V0IHZhbHVlIgorCQkgICAgICAgICAgICAgICA6IChDSEFSICop IlZhbHVlIHRvbyBsb25nIgorCQkgICAgICAgKTsKKwkJUkVTVU1FOworCQlyZXR1cm4oLTEpOwor CSAgICB9IGVsc2UgeworCQlpZiAoZW5jc3RyKChDSEFSICopcXVlcnlidWYpID4gLTEpIHsgLyog RW5jb2RlIGl0ICovCisJCSAgICBhY2sxKGRhdGEpOwkJLyogSWYgaXQgZml0cywgc2VuZCBpdCBi YWNrIGluIEFDSyAqLworCQkgICAgc3VjY2VzcyA9IDE7CisJCSAgICBSRVNVTUU7CisJCSAgICBy ZXR1cm4oLTEpOworCQl9IGVsc2UgaWYgKHNuZHN0cmluZyhxdWVyeWJ1ZikpIHsgLyogTG9uZyBm b3JtIHJlc3BvbnNlICovCisJCSAgICBCRUdJTiBzc2luaXQ7CisJCSAgICByZXR1cm4oLTEpOwor CQl9IGVsc2UgewkJLyogc25kaGxwKCkgZmFpbHMgKi8KKwkJICAgIGVycnBrdCgoQ0hBUiAqKSJD YW4ndCBzZW5kIHZhbHVlIik7CisJCSAgICBSRVNVTUU7CisJCSAgICByZXR1cm4oLTEpOworCQl9 CisJICAgIH0KKwl9CisgICAgfSBlbHNlIGlmIChjID09ICdTJykgewkJLyogU2V0IChhc3NpZ24p ICovCisJaWYgKCFFTkFCTEVEKGVuX2FzZykpIHsJCS8qIFNlY3VyaXR5ICovCisJICAgIGVycnBr dCgoQ0hBUiAqKSJSRU1PVEUgQVNTSUdOIGRpc2FibGVkIik7CisJICAgIFJFU1VNRTsKKwkgICAg cmV0dXJuKC0xKTsKKwl9IGVsc2UgewkJCS8qIE9LICovCisJICAgIGludCBuOworCSAgICBuID0g eHVuY2hhcigqKHNydmNtZCszKSk7CS8qIExlbmd0aCBvZiBuYW1lICovCisJICAgIG4gPSAzICsg biArIDE7CQkvKiBQb3NpdGlvbiBvZiBsZW5ndGggb2YgdmFsdWUgKi8KKwkgICAgKihzcnZjbWQr bikgPSBOVUw7CQkvKiBEb24ndCBuZWVkIGl0ICovCisJICAgIGlmIChhZGRtYWMoKGNoYXIgKiko c3J2Y21kKzQpLChjaGFyICopKHNydmNtZCtuKzEpKSA8IDApCisJICAgICAgZXJycGt0KChDSEFS ICopIlJFTU9URSBBU1NJR04gZmFpbGVkIik7CisJICAgIGVsc2UgeworCQlhY2soKTsKKwkJc3Vj Y2VzcyA9IDE7CisJICAgIH0KKwkgICAgUkVTVU1FOworCSAgICByZXR1cm4oLTEpOworCX0KKyAg ICB9IGVsc2UgeworCWVycnBrdCgoQ0hBUiAqKSJCYWRseSBmb3JtZWQgc2VydmVyIGNvbW1hbmQi KTsKKwlSRVNVTUU7CisJcmV0dXJuKC0xKTsKKyAgICB9CisjZWxzZQorICAgIGVycnBrdCgoQ0hB UiAqKSJWYXJpYWJsZSBxdWVyeS9zZXQgbm90IGF2YWlsYWJsZSIpOworICAgIFJFU1VNRTsKKyAg ICByZXR1cm4oLTEpOworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8K K30KKworc3RhdGljIGludAorc3J2X2NvcHkoKSB7CisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYg Q0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisg ICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgQ09QWSIsIChjaGFy ICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIFpDT1BZCisgICAgaWYg KCFFTkFCTEVEKGVuX2NweSkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIENPUFkgZGlzYWJs ZWQiKTsKKwlSRVNVTUU7CisJcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgeworCWNoYXIgKnN0cjEs ICpzdHIyLCBmMVsyNTZdLCBmMlsyNTZdOworCWludCAgbGVuMSwgbGVuMjsKKyAgICAgICAgbGVu MSA9IHh1bmNoYXIoc3J2Y21kWzFdKTsJLyogU2VwYXJhdGUgdGhlIHBhcmFtZXRlcnMgKi8KKyAg ICAgICAgbGVuMiA9IHh1bmNoYXIoc3J2Y21kWzIrbGVuMV0pOworICAgICAgICBzdHJuY3B5KGYx LChjaGFyICopKHNydmNtZCsyKSxsZW4xKTsKKyAgICAgICAgZjFbbGVuMV0gPSBOVUw7CisgICAg ICAgIHN0cm5jcHkoZjIsKGNoYXIgKikoc3J2Y21kKzMrbGVuMSksbGVuMik7CisgICAgICAgIGYy W2xlbjJdID0gTlVMOworI2lmZGVmIElLU0RCCisJaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hh dCwiUkVNT1RFIENPUFkiLCBmMSwgZjIpOworI2VuZGlmIC8qIElLU0RCICovCisJaWYgKCFFTkFC TEVEKGVuX2N3ZCkpIHsJCS8qIElmIENXRCBpcyBkaXNhYmxlZCAqLworCSAgICB6c3RyaXAoZjEs JnN0cjEpOwkJLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KKyAgICAgICAgICAg IHpzdHJpcChmMiwmc3RyMik7CisJICAgIGlmIChzdHJjbXAoZjEsc3RyMSkgfHwgc3RyY21wKGYy LHN0cjIpKSB7IC8qIFJlZnVzZS4gKi8KKwkJZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5pZWQi KTsKKwkJUkVTVU1FOwkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCisJCXJl dHVybigtMSk7CisJICAgIH0KKwl9CisJaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0J3Mg T0sgdG8gZ28gYWhlYWQuICovCisgICAgICAgICAgICBpZiAoemNvcHkoZjEsZjIpKSB7CQkvKiBU cnkgKi8KKwkJZXJycGt0KChDSEFSICopIkNhbid0IGNvcHkgZmlsZSIpOyAvKiBnaXZlIGVycm9y IG1lc3NhZ2UgKi8KKwkgICAgfSBlbHNlIHsKKwkJc3VjY2VzcyA9IDE7CisJCWFjaygpOworCSAg ICB9CisgICAgICAgICAgICBSRVNVTUU7CQkJLyogd2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFu ZCAqLworCSAgICByZXR1cm4oLTEpOworCX0KKyAgICB9CisgICAgcmV0dXJuKC0xKTsKKyNlbHNl IC8qIG5vIFpDT1BZICovCisgICAgZXJycGt0KChDSEFSICopIlJFTU9URSBDT1BZIG5vdCBhdmFp bGFibGUiKTsgLyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCisgICAgUkVTVU1FOwkJCQkvKiB3YWl0 IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBa Q09QWSAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKK3N0YXRpYyBpbnQKK3Nydl9yZW5h bWUoKSB7CisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lz bG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19QUiwg MSwgInNlcnZlciIsICJSRU1PVEUgUkVOQU1FIiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlmIC8q IENLU1lTTE9HICovCisjaWZkZWYgWlJFTkFNRQorICAgIGlmICghRU5BQkxFRChlbl9yZW4pKSB7 CisJZXJycGt0KChDSEFSICopIlJFTU9URSBSRU5BTUUgZGlzYWJsZWQiKTsKKwlSRVNVTUU7CisJ cmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgewkJCQkvKiBSRU5BTUUgaXMgZW5hYmxlZCAqLworCWNo YXIgKnN0cjEsICpzdHIyLCBmMVsyNTZdLCBmMlsyNTZdOworCWludCBsZW4xLCBsZW4yOworCWxl bjEgPSB4dW5jaGFyKHNydmNtZFsxXSk7CS8qIFNlcGFyYXRlIHRoZSBwYXJhbWV0ZXJzICovCisJ bGVuMiA9IHh1bmNoYXIoc3J2Y21kWzIrbGVuMV0pOworCXN0cm5jcHkoZjEsKGNoYXIgKikoc3J2 Y21kKzIpLGxlbjEpOworCWYxW2xlbjFdID0gTlVMOworCXN0cm5jcHkoZjIsKGNoYXIgKikoc3J2 Y21kKzMrbGVuMSksbGVuMik7CisJZjJbbGVuMl0gPSBOVUw7CisJbGVuMiA9IHh1bmNoYXIoc3J2 Y21kWzIrbGVuMV0pOworCXN0cm5jcHkoZjEsKGNoYXIgKikoc3J2Y21kKzIpLGxlbjEpOworCWYx W2xlbjFdID0gTlVMOworCXN0cm5jcHkoZjIsKGNoYXIgKikoc3J2Y21kKzMrbGVuMSksbGVuMik7 CisJZjJbbGVuMl0gPSBOVUw7CisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9wZW4pIHNsb3RzdGF0 ZSh3aGF0LCJSRU1PVEUgUkVOQU1FIiwgZjEsIGYyKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworCWlm ICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBJZiBDV0QgaXMgZGlzYWJsZWQgKi8KKwkgICAgenN0 cmlwKGYxLCZzdHIxKTsJCS8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5hbWUsICovCisJICAg IHpzdHJpcChmMiwmc3RyMik7CisJICAgIGlmICggc3RyY21wKGYxLHN0cjEpIHx8IHN0cmNtcChm MixzdHIyKSApIHsgLyogcmVmdXNlLiAqLworCQllcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmll ZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8KKwkJ cmV0dXJuKC0xKTsKKwkgICAgfQorCX0KKwlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyogSXQn cyBPSyB0byBnbyBhaGVhZC4gKi8KKwkgICAgaWYgKHpyZW5hbWUoZjEsZjIpKSB7CS8qIFRyeSAq LworCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgcmVuYW1lIGZpbGUiKTsgLyogR2l2ZSBlcnJvciBt c2cgKi8KKwkgICAgfSBlbHNlIHsKKwkJc3VjY2VzcyA9IDE7CisJCWFjaygpOworCSAgICB9CisJ ICAgIFJFU1VNRTsJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCisJICAgIHJl dHVybigtMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oLTEpOworI2Vsc2UgLyogbm8gWlJFTkFN RSAqLworICAgIC8qIEdpdmUgZXJyb3IgbWVzc2FnZSAqLworICAgIGVycnBrdCgoQ0hBUiAqKSJS RU1PVEUgUkVOQU1FIG5vdCBhdmFpbGFibGUiKTsKKyAgICBSRVNVTUU7CQkJCS8qIFdhaXQgZm9y IG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKyAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIFpSRU5B TUUgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCitzdGF0aWMgaW50CitzcnZfbG9naW4o KSB7CisjaWZuZGVmIE5PU0VSVkVSCisgICAgY2hhciBmMVtMT0dJTkxFTisxXSwgZjJbTE9HSU5M RU4rMV0sIGYzW0xPR0lOTEVOKzFdOworICAgIENIQVIgKnA7CisgICAgaW50IGxlbiwgaTsKKwor ICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiB4X2xvZ2luIiwiIix4X2xvZ2luKTsKKyAgICBk ZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4geF9sb2dnZWQiLCIiLHhfbG9nZ2VkKTsKKworICAgIGYx WzBdID0gTlVMOyBmMlswXSA9IE5VTDsgZjNbMF0gPSBOVUw7CisgICAgbGVuID0gMDsKKyAgICBp ZiAoc3J2Y21kWzFdKQkJCS8qIEZpcnN0IGxlbmd0aCBmaWVsZCAqLworICAgICAgbGVuID0geHVu Y2hhcihzcnZjbWRbMV0pOwkJLyogU2VwYXJhdGUgdGhlIHBhcmFtZXRlcnMgKi8KKworICAgIGlm ICh4X2xvZ2luKSB7CQkJLyogTG9naW4gcmVxdWlyZWQgKi8KKwlpZiAoeF9sb2dnZWQpIHsJCQkv KiBBbmQgYWxyZWFkeSBsb2dnZWQgaW4gKi8KKwkgICAgaWYgKGxlbiA+IDApIHsJCS8qIExvZ2dp bmcgaW4gYWdhaW4gKi8KKwkJZXJycGt0KChDSEFSICopIkFscmVhZHkgbG9nZ2VkIGluLiIpOwor CSAgICB9IGVsc2UgewkJCS8qIExvZ2dpbmcgb3V0ICovCisJCWRlYnVnKEYxMDEsIlJFTU9URSBM T0dPVVQiLCIiLHhfbG9nZ2VkKTsKKyNpZmRlZiBDS1NZU0xPRworCQlpZiAoY2t4c3lzbG9nID49 IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2 ZXIiLCAiUkVNT1RFIExPR09VVCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisjaWZk ZWYgSUtTREIKKwkJaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIExPR09VVCIs ICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKwkJdGxvZyhGMTEwLCJMb2dnZWQgb3V0Iix4 X3VzZXIsMCk7CisJCWFjazEoKENIQVIgKikiTG9nZ2VkIG91dCIpOworCQlzdWNjZXNzID0gMTsK KwkJbXNsZWVwKDUwMCk7CisjaWZkZWYgQ0tfTE9HSU4KKwkJeF9sb2dnZWQgPSAwOworI2lmZGVm IElLU0QKKwkJaWYgKGluc2VydmVyKQorCQkgIGNreGxvZ291dCgpOworI2VuZGlmIC8qIElLU0Qg Ki8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCSAgICB9CisJfSBlbHNlIHsJCQkvKiBOb3QgbG9n Z2VkIGluIHlldCAqLworCSAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gbGVuIiwiIixsZW4p OworCSAgICBpZiAobGVuID4gMCkgewkJLyogSGF2ZSB1c2VybmFtZSAqLworI2lmZGVmIENLU1lT TE9HCisJCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkJICBja3N5 c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgTE9HSU4iLCBOVUxMKTsKKyNlbmRp ZiAvKiBDS1NZU0xPRyAqLworCQlpZiAobGVuID4gTE9HSU5MRU4pIHsKKwkJICAgIGVycnBrdCgo Q0hBUiAqKSJVc2VybmFtZSB0b28gbG9uZyIpOworCQl9CisJCXAgPSBzcnZjbWQgKyAyOwkJLyog UG9pbnQgdG8gaXQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSAvKiBDb3B5IGl0ICov CisJCSAgZjFbaV0gPSBwW2ldOworCQlmMVtsZW5dID0gTlVMOwkJLyogVGVybWluYXRlIGl0ICov CisJCXAgKz0gbGVuOwkJLyogUG9pbnQgdG8gbmV4dCBsZW5ndGggZmllbGQgKi8KKwkJaWYgKCpw KSB7CQkvKiBJZiB3ZSBoYXZlIG9uZSAqLworCQkgICAgbGVuID0geHVuY2hhcigqcCsrKTsgLyog ZGVjb2RlIGl0ICovCisJCSAgICBpZiAobGVuID4gMCAmJiBsZW4gPD0gTE9HSU5MRU4pIHsKKwkJ CWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgLyogU2FtZSBkZWFsIGZvciBwYXNzd29yZCAqLwor CQkJICBmMltpXSA9IHBbaV07CisJCQlmMltsZW5dID0gTlVMOworCQkJcCArPSBsZW47CS8qIEFu ZCBhY2NvdW50ICovCisJCQlpZiAoKnApIHsKKwkJCSAgICBsZW4gPSB4dW5jaGFyKCpwKyspOwor CQkJICAgIGlmIChsZW4gPiAwICYmIGxlbiA8PSBMT0dJTkxFTikgeworCQkJCWZvciAoaSA9IDA7 IGkgPCBsZW47IGkrKykKKwkJCQkgIGYzW2ldID0gcFtpXTsJLyogU2V0IGJ1dCBuZXZlciB1c2Vk ICovCisJCQkJZjNbbGVuXSA9IE5VTDsgLyogKGJlY2F1c2UgYWNjb3VudCBub3QgdXNlZCkgKi8K KwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKwkJZGVidWcoRjEwMSwiUkVNT1RFIExPR0lO IDEiLCIiLHhfbG9nZ2VkKTsKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKwkJaWYgKGlu c2VydmVyKSB7CQkvKiBMb2cgaW4gdG8gc3lzdGVtIGZvciByZWFsICovCisJCSAgICB4X2xvZ2dl ZCA9IGNreGxvZ2luKChDSEFSICopZjEsKENIQVIgKilmMixOVUxMLDApOworCQkgICAgZGVidWco RjEwMSwiUkVNT1RFIExPR0lOIDIiLCIiLHhfbG9nZ2VkKTsKKwkJICAgIGlmICh4X2xvZ2dlZCkg ewkvKiBDb3VudCBhdHRlbXB0cyAqLworCQkJbG9ndHJpZXMgPSAwOworCQkJanVzdG9uZSA9IDE7 CisJCSAgICB9IGVsc2UgeworCQkJbG9ndHJpZXMrKzsKKwkJCXNsZWVwKGxvZ3RyaWVzKTsKKwkJ ICAgIH0KKwkJfSBlbHNlCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICov CisJCSAgaWYgKHhfdXNlciAmJiB4X3Bhc3N3ZCkgeyAvKiBVc2VyIGFuZCBwYXNzd29yZCBtdXN0 IG1hdGNoICovCisJCSAgICAgIGlmICghc3RyY21wKHhfdXNlcixmMSkpIC8qIFNFVCBTRVJWRVIg TE9HSU4gKi8KKwkJCWlmICghc3RyY21wKHhfcGFzc3dkLGYyKSkKKwkJCSAgeF9sb2dnZWQgPSAx OworCQkgICAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gMyIsIiIseF9sb2dnZWQpOworCQkg IH0gZWxzZSBpZiAoeF91c2VyKSB7CS8qIE9ubHkgdXNlcm5hbWUgZ2l2ZW4sIG5vIHBhc3N3b3Jk ICovCisJCSAgICAgIGlmICghc3RyY21wKHhfdXNlcixmMSkpIC8qIHNvIG9ubHkgdXNlcm5hbWUg bXVzdCBtYXRjaCAqLworCQkJeF9sb2dnZWQgPSAxOworCQkgICAgICBkZWJ1ZyhGMTAxLCJSRU1P VEUgTE9HSU4gNCIsIiIseF9sb2dnZWQpOworCQkgIH0KKyNpZmRlZiBDS19MT0dJTiAKKyAgICAg ICAgICAgICAgICBlbHNlIHsKKwkJICAgIHhfbG9nZ2VkID0gY2t4bG9naW4oKENIQVIgKilmMSwo Q0hBUiAqKWYyLE5VTEwsMCk7CisJCSAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gNSIsIiIs eF9sb2dnZWQpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCQlp ZiAoeF9sb2dnZWQpIHsJCS8qIExvZ2dlZCBpbj8gKi8KKwkJICAgIHRsb2coRjExMCwiTG9nZ2Vk IGluIiwgeF91c2VyLCAwKTsKKwkJICAgIGlmIChpc2d1ZXN0KQorCQkgICAgICBhY2sxKChDSEFS ICopIkxvZ2dlZCBpbiBhcyBndWVzdCAtIHJlc3RyaWN0aW9ucyBhcHBseSIpOworCQkgICAgZWxz ZQorCQkgICAgICBhY2sxKChDSEFSICopIkxvZ2dlZCBpbiIpOworCQkgICAgc3VjY2VzcyA9IDE7 CisJCX0gZWxzZSB7CisJCSAgICB0bG9nKEYxMTAsIkxvZ2luIGZhaWxlZCIsIGYxLCAwKTsKKwkJ ICAgIGVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkLiIpOworI2lmZGVmIElLU0QKKyNpZmRl ZiBDS19MT0dJTgorCQkgICAgaWYgKGluc2VydmVyICYmIGxvZ3RyaWVzID4gMikKKwkJICAgICAg Y2t4bG9nb3V0KCk7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICovCisJ CX0KKwkgICAgfSBlbHNlIHsJCQkvKiBMT0dPVVQgKi8KKwkJZXJycGt0KChDSEFSICopIkxvZ291 dCBpZ25vcmVkIik7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsJCQkJLyogTG9naW4gbm90IHJl cXVpcmVkICovCisJaWYgKGxlbiA+IDApCisJICBlcnJwa3QoKENIQVIgKikiTG9naW4gaWdub3Jl ZC4iKTsKKwllbHNlCisJICBlcnJwa3QoKENIQVIgKikiTG9nb3V0IGlnbm9yZWQuIik7CisgICAg fQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisgICAgUkVTVU1FOworICAgIHJldHVybigtMSk7Cit9 CisKK3N0YXRpYyBpbnQKK3Nydl90aW1lb3V0KCkgeworICAgIC8qIEs5NSBkb2VzIHRoaXMgaXRz IG93biB3YXkgKi8KKyAgICBpZiAoaWRsZXRtbykgeworI2lmZGVmIElLU0QKKyAgICAgICAgaWYg KGluc2VydmVyKSB7CisgICAgICAgICAgIHByaW50ZigiXHJcbklLU0QgSURMRSBUSU1FT1VUOiAl ZCBzZWNcclxuIiwgc3J2aWRsKTsKKyAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEp OworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCWlkbGV0bW8gPSAwOworCXByaW50Zigi XHJcblNFUlZFUiBJRExFIFRJTUVPVVQ6ICVkIHNlY1xyXG4iLCBzcnZpZGwpOworCXhpdHN0YSB8 PSAod2hhdCAmIFdfS0VSTUlUKTsKKwlRVUlUOworICAgIH0KKyNpZm5kZWYgTk9TRVJWRVIKKyAg ICBlbHNlIGlmIChmYXRhbGlvKSB7CQkJLyogQ29ubmVjdGlvbiBsb3N0ICovCisjaWZkZWYgQ0tT WVNMT0cKKwkgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgICAg Y2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiQ29ubmVjdGlvbiBsb3N0IiwgTlVMTCk7 CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorCSAgaWYgKGlrZGJvcGVuKSBz bG90c3RhdGUod2hhdCwiU0VSVkVSIERJU0NPTk5FQ1QiLChjaGFyICopc3J2Y21kLCAiIik7Cisj ZW5kaWYgLyogSUtTREIgKi8KKwl4aXRzdGEgfD0gd2hhdDsKKwlRVUlUOworICAgIH0gZWxzZSBp ZiAoaW50ZXJydXB0ZWQpIHsJCS8qIEludGVycnVwdGVkIGJ5IGhhbmQgKi8KKwlpZiAoIUVOQUJM RUQoZW5fZmluKSkgeworCSAgICBlcnJwa3QoKENIQVIgKikiUVVJVCBkaXNhYmxlZCIpOworCSAg ICBSRVNVTUU7CisJICAgIHJldHVybigtMSk7CisJfSBlbHNlIHsKKwkgICAgaWYgKHdoYXQgPT0g V19TRU5EIHx8IHdoYXQgPT0gV19SRUNWIHx8IHdoYXQgPT0gV19SRU1PKSB7CisJCXN1Y2Nlc3Mg PSAwOworI2lmZGVmIENLU1lTTE9HCisJCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4 bG9nZ2luZykKKwkJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJJbnRlcnJ1cHRl ZCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisJICAgIH0gZWxzZSBpZiAod2hhdCA9 PSBXX05PVEhJTkcgJiYgZmlsY250ID09IDApIHsKKwkJc3VjY2VzcyA9IDE7CisJICAgIH0gLyog T3RoZXJ3aXNlIGxlYXZlIHN1Y2Nlc3MgYWxvbmUgKi8KKwkgICAgeGl0c3RhIHw9ICh3aGF0ICYg V19LRVJNSVQpOworCSAgICBRVUlUOworCX0KKyAgICB9IGVsc2UgewkJCQkvKiBTaG91bGRuJ3Qg aGFwcGVuICovCisJZGVidWcoRjEwMCwiU0VSVkVSICh0b3ApIEdPVCBVTkVYUEVDVEVEICdxJyIs IiIsMCk7CisJUVVJVDsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworc3RhdGlj IGludAorcmN2X3NfcGt0KCkgeworI2lmbmRlZiBOT1NFUlZFUgorICAgIGlmIChzdGF0ZSA9PSBy Z2VuKQorICAgICAgdXJzZXJ2ZXIgPSAxOworICAgIGlmICgvKiBzdGF0ZSA9PSBzZXJ2ZSAmJiAq LyB4X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJl ZCIpOworCVNFUlZFOworICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisgICAgICBp ZiAoc3RhdGUgPT0gc2VydmUgJiYgIUVOQUJMRUQoZW5fc2VuKSkgeyAvKiBOb3QgaW4gc2VydmVy IG1vZGUgKi8KKwllcnJwa3QoKENIQVIgKikiU0VORCBkaXNhYmxlZCIpOyAvKiB3aGVuIFNFTkQg aXMgZGlzYWJsZWQuICovCisJUkVTVU1FOworCXJldHVybigtMSk7CisgICAgfSBlbHNlIHsJCQkJ LyogT0sgdG8gZ28gYWhlYWQuICovCisjaWZkZWYgQ0tfVE1QRElSCisJaWYgKGRsZGlyICYmICFm X3RtcGRpcikgewkvKiBJZiB0aGV5IGhhdmUgYSBkb3dubG9hZCBkaXJlY3RvcnkgKi8KKwkgICAg ZGVidWcoRjExMCwicmVjZWl2ZSBkb3dubG9hZCBkaXIiLGRsZGlyLDApOworCSAgICBpZiAocyA9 IHpndGRpcigpKSB7CQkvKiBHZXQgY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJZGVidWcoRjExMCwi cmVjZWl2ZSBjdXJyZW50IGRpciIscywwKTsKKwkJaWYgKHpjaGRpcihkbGRpcikpIHsJLyogQ2hh bmdlIHRvIGRvd25sb2FkIGRpcmVjdG9yeSAqLworCQkgICAgZGVidWcoRjEwMCwicmVjZWl2ZSB6 Y2hkaXIgb2siLCIiLDApOworCQkgICAgY2tzdHJuY3B5KHNhdmRpcixzLFRNUERJUkxFTik7CisJ CSAgICBmX3RtcGRpciA9IDE7CS8qIFJlbWVtYmVyIHRoYXQgd2UgZGlkIHRoaXMgKi8KKwkJfSBl bHNlCisJCSAgZGVidWcoRjEwMCwicmVjZWl2ZSB6Y2hkaXIgZmFpbGVkIiwiIiwwKTsKKwkgICAg fQorCX0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKwluYWtzdGF0ZSA9IDE7CQkJLyogQ2FuIHNl bmQgTkFLcyBmcm9tIGhlcmUuICovCisJcmluaXQocmRhdGFwKTsJCQkvKiBTZXQgcGFyYW1ldGVy cyAqLworCWJjdHUgPSBiY3RyOwkJCS8qIFN3aXRjaCB0byBhZ3JlZWQtdXBvbiBibG9jayBjaGVj ayAqLworCWJjdGwgPSAoYmN0dSA9PSA0KSA/IDIgOiBiY3R1OwkvKiBTZXQgYmxvY2stY2hlY2sg bGVuZ3RoICovCisJd2hhdCA9IFdfUkVDVjsJCQkvKiBSZW1lbWJlciB3ZSdyZSByZWNlaXZpbmcg Ki8KKwlsYXN0eGZlciA9IFdfUkVDVjsKKwlyZXNldGMoKTsJCQkvKiBSZXNldCBjb3VudGVycyAq LworCXJ0aW1lcigpOwkJCS8qIFJlc2V0IHRpbWVyICovCisjaWZkZWYgR0ZUSU1FUgorCXJmdGlt ZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJc3RyZWFtb24oKTsKKwlCRUdJTiByZmlsZTsJ CQkvKiBHbyBpbnRvIHJlY2VpdmUtZmlsZSBzdGF0ZSAqLworICAgIH0KKyAgICByZXR1cm4oLTEp OworfQorCisKKy8qIEVORCBPRiBST1VUSU5FUyBNT1ZFRCBPVVQgT0YgU1RBVEUgTUFDSElORSAq LworCisKKy8qICBQIFIgTyBUIE8gIC0tICBQcm90b2NvbCBlbnRyeSBmdW5jdGlvbiAgKi8KKwor c3RhdGljIGludCBpc190biA9IDA7CQkJLyogSXQncyBhIFRlbG5ldCBjb25uZWN0aW9uICovCisK KyNpZmRlZiBDS19TUEVFRAoraW50IGZfY3RscCA9IDA7CQkJCS8qIENvbnRyb2wtY2hhcmFjdGVy IHByZWZpeCB0YWJsZSAqLworI2lmZGVmIENPTU1FTlQKK3Nob3J0IHNfY3RscFsyNTZdOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisvKgorICBUaGlzIGlz IHNpbXBseSBhIHdyYXBwZXIgZm9yIHRoZSByZWFsIHByb3RvY29sIGZ1bmN0aW9uIGp1c3QgYmVs b3csCisgIHRoYXQgc2F2ZXMgYW55IGl0ZW1zIHRoYXQgbWlnaHQgYmUgY2hhbmdlZCBhdXRvbWF0 aWNhbGx5IGJ5IHByb3RvY29sCisgIG5lZ290aWF0aW9ucyBhbmQgdGhlbiByZXN0b3JlcyB0aGVt IHVwb24gZXhpdCBmcm9tIHByb3RvY29sIG1vZGUuCisqLworVk9JRAorcHJvdG8oKSB7CisgICAg ZXh0ZXJuIGludCBiX3NhdmUsIGZfc2F2ZSwgY19zYXZlLCBzc19zYXZlLCBzbG9zdGFydCwgcmVs aWFibGUsIHVyY2xlYXI7CisjaWZuZGVmIE5PQ1NFVFMKKyAgICBleHRlcm4gaW50IGZjaGFyc2V0 LCBmY3Nfc2F2ZSwgdGNoYXJzZXQsIHRjc19zYXZlOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwor I2lmZGVmIFBJUEVTRU5ECisgICAgZXh0ZXJuIGludCBwaXBlc2VuZDsKKyNlbmRpZiAvKiBQSVBF U0VORCAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBjdXJz b3JlbmFbXSwgY3Vyc29yX3NhdmUsIHRlcm1faW87CisgICAgZXh0ZXJuIEJZVEUgdm1vZGU7Cisg ICAgZXh0ZXJuIGludCBkaXNwbGF5X2RlbW87CisgICAgaW50IHRlcm1faW9fc2F2ZTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgVE5DT0RFCisgICAgaW50 IF91X2Jpbj0wLCBfbWVfYmluID0gMDsKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgaW50IC8qIF91 X3N0YXJ0PTAsICovIF9tZV9zdGFydCA9IDA7CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworI2Vu ZGlmIC8qIFROQ09ERSAqLworI2lmZGVmIFBBVFRFUk5TCisgICAgaW50IHBhX3NhdmU7CisgICAg aW50IGk7CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyAgICBpbnQgc2Nhbl9zYXZlOworCisjaWZk ZWYgUEFUVEVSTlMKKyAgICBwYV9zYXZlID0gcGF0dGVybnM7CisjZW5kaWYgLyogUEFUVEVSTlMg Ki8KKyAgICBzY2FuX3NhdmUgPSBmaWxlcGVlazsKKworICAgIG15am9iID0gc3N0YXRlOworCisj aWZkZWYgQ0tfTE9HSU4KKyAgICBpZiAoaXNndWVzdCkgewkJCS8qIElmIHVzZXIgaXMgYW5vbnlt b3VzICovCisJZW5fcHJpID0gMDsJCQkvKiBkaXNhYmxlIHByaW50aW5nICovCisJZW5fbWFpID0g MDsJCQkvKiBhbmQgZGlzYWJsZSBlbWFpbCAqLworCWVuX2RlbCA9IDA7CQkJLyogYW5kIGZpbGUg ZGVsZXRpb24gKi8KKyAgICB9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworI2lmbmRlZiBOT0xP Q0FMCisjaWZkZWYgT1MyCisgICAgY3Vyc29yX3NhdmUgPSBjdXJzb3JlbmFbdm1vZGVdOworICAg IGN1cnNvcmVuYVt2bW9kZV0gPSAwOworICAgIHRlcm1faW9fc2F2ZSA9IHRlcm1faW87CisgICAg dGVybV9pbyA9IDA7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAg IGJfc2F2ZSA9IGJpbmFyeTsJCQkvKiBTRVQgRklMRSBUWVBFICovCisgICAgZl9zYXZlID0gZm5j bnY7CQkJLyogU0VUIEZJTEUgTkFNRVMgKi8KKyAgICBjX3NhdmUgPSBiY3RyOworICAgIHBfc2F2 ZSA9IGZuc3BhdGg7CisgICAgcl9zYXZlID0gcmVjdXJzaXZlOworICAgIHNfdGltaW50ID0gdGlt aW50OworICAgIHNzX3NhdmUgPSBzbG9zdGFydDsKKyNpZm5kZWYgTk9DU0VUUworICAgIGZjc19z YXZlID0gZmNoYXJzZXQ7CisgICAgdGNzX3NhdmUgPSB0Y2hhcnNldDsKKyNlbmRpZiAvKiBOT0NT RVRTICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBEb24ndCBkbyB0aGlzIGJlY2F1c2UgdGhlbiB1 c2VyIGNhbiBuZXZlciBmaW5kIG91dCB3aGF0IGhhcHBlbmVkLiAqLworI2lmZGVmIENLX1NQRUVE CisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAgc19jdGxwW2ldID0gY3RscFtp XTsKKyAgICBmX2N0bHAgPSAxOworI2VuZGlmIC8qIENLX1NQRUVEICovCisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgIGlmIChyZWxpYWJsZSA9PSBTRVRfT04pCisgICAgICBzbG9zdGFydCA9IDA7 CisgICAgaXNfdG4gPSAoIWxvY2FsICYmIHNzdGVsbmV0KQorI2lmZGVmIFROQ09ERQorICAgICAg fHwgKGxvY2FsICYmIG5ldHdvcmsgJiYgdHRucHJvdG8gPT0gTlBfVEVMTkVUKQorI2VuZGlmIC8q IFROQ09ERSAqLworCTsKKyNpZmRlZiBUTkNPREUKKyAgICBpZiAoaXNfdG4pIHsKKyAgICAgICAg aWYgKHRuX2JfeGZlciAmJiAhKHNzdGVsbmV0IHx8IGluc2VydmVyKSkgeworCSAgICAvKiBTYXZl IHRoZSBjdXJyZW50IHN0YXRlIG9mIFRlbG5ldCBCaW5hcnkgKi8KKwkgICAgX3VfYmluID0gVEVM T1BUX1UoVEVMT1BUX0JJTkFSWSk7CisJICAgIF9tZV9iaW4gPSBURUxPUFRfTUUoVEVMT1BUX0JJ TkFSWSk7CisKKwkgICAgLyogSWYgZWl0aGVyIGRpcmVjdGlvbiBpcyBub3QgQmluYXJ5IGF0dGVt cHQgdG8gbmVnb3RpYXRlIGl0ICovCisJICAgIGlmICghX3VfYmluICYmIFRFTE9QVF9VX01PREUo VEVMT1BUX0JJTkFSWSkgIT0gVE5fTkdfUkYpIHsKKwkJdG5fc29wdChETyxURUxPUFRfQklOQVJZ KTsKKwkJVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0JJTkFSWSkgPSAxOworCSAgICB9CisJ ICAgIGlmICghX21lX2JpbiAmJiBURUxPUFRfTUVfTU9ERShURUxPUFRfQklOQVJZKSAhPSBUTl9O R19SRikgeworCQl0bl9zb3B0KFdJTEwsVEVMT1BUX0JJTkFSWSk7CisJCVRFTE9QVF9VTkFOU1dF UkVEX1dJTEwoVEVMT1BUX0JJTkFSWSkgPSAxOworCSAgICB9CisJICAgIGlmICghKF9tZV9iaW4g JiYgX3VfYmluKSkKKwkgICAgICB0bl93YWl0KCJwcm90byBzZXQgYmluYXJ5IG1vZGUiKTsKKyAg ICAgICAgfQorI2lmZGVmIElLU19PUFRJT04KKyNpZmRlZiBDS19YWVoKKyAgICAgICAgaWYgKHBy b3RvY29sICE9IFBST1RPX0spIHsJLyogTm9uLUtlcm1pdCBwcm90b2NvbCBzZWxlY3RlZCAqLwor ICAgICAgICAgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgICAgICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KSB7CisgICAgICAgICAg ICAgICAgaWtzX3dhaXQoS0VSTUlUX1JFUV9TVE9QLDApOyAvKiBTdG9wIHRoZSBvdGhlciBTZXJ2 ZXIgKi8KKwkJLyogX3Vfc3RhcnQgPSAxOyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJgorICAgICAgICAgICAgICAgIFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQpIHsKKyAgICAgICAgICAgICAgICB0bl9z aWtzKEtFUk1JVF9TVE9QKTsJLyogSSdtIG5vdCBzZXJ2ZXJpbmcgKi8KKwkgCVRFTE9QVF9TQihU RUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAwOworCQlfbWVfc3RhcnQgPSAxOworICAg ICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19YWVogKi8KKyAgICAgICAg aWYgKHNzdGF0ZSA9PSAneCcgfHwgc3N0YXRlID09ICd2JykgeyAvKiBSZXNwb25kaW5nIHRvIGEg cmVxdWVzdCAqLworICAgICAgICAgICAgaWYgKCFpbnNlcnZlciAmJiBURUxPUFRfVShURUxPUFRf S0VSTUlUKSAmJgorICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJt aXQudV9zdGFydCkgeworICAgICAgICAgICAgICAgIGlrc193YWl0KEtFUk1JVF9SRVFfU1RPUCww KTsgLyogU3RvcCB0aGUgb3RoZXIgU2VydmVyICovCisJCS8qIF91X3N0YXJ0ID0gMTsgKi8KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYK KyAgICAgICAgICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFy dCkgeworICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUQVJUKTsJLyogU2VuZCBLZXJt aXQtU2VydmVyIFN0YXJ0ICovCisJIAlURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1l X3N0YXJ0ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsJCQkvKiBJbml0aWF0 aW5nIGEgcmVxdWVzdCAqLworICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfS0VSTUlU KSAmJgorICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVf c3RhcnQpIHsKKyAgICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsJLyogSSdtIG5v dCBzZXJ2ZXJpbmcgKi8KKwkgCVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3Rh cnQgPSAwOworCQlfbWVfc3RhcnQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmCisJICAgICAgICAhVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC51X3N0YXJ0KSB7CisJCS8qIFNlbmQgUmVxLVNlcnZlci1TdGFydCAqLwor ICAgICAgICAgICAgICAgIGlmICghaWtzX3dhaXQoS0VSTUlUX1JFUV9TVEFSVCwwKSkgeworICAg ICAgICAgICAgICAgICAgICBpZiAoc3N0YXRlICE9ICdzJykgeworCQkJc3VjY2VzcyA9IDA7CS8q IE90aGVyIEtlcm1pdCByZWZ1c2VkIHRvIHNlcnZlICovCisJCQlpZiAobG9jYWwpCisJCQkgIHBy aW50ZigiQSBLZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGVcclxuIik7CisJCQlkZWJ1ZyhG MTEwLCJwcm90bygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgS2VybWl0IFNl cnZlciBpcyBub3QgYXZhaWxhYmxlIiwwKTsKKwkJCXRsb2coRjExMCwiSUtTIGNsaWVudC9zZXJ2 ZXIgZmFpbHVyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBIEtlcm1pdCBTZXJ2 ZXIgaXMgbm90IGF2YWlsYWJsZSIsMCk7CisJCQlnb3RvIHh4cHJvdG94OworICAgICAgICAgICAg ICAgICAgICB9CisJCX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIElLU19P UFRJT04gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGlmICh0bl9ub19lbmNyeXB0 X3hmZXIgJiYgIShzc3RlbG5ldCB8fCBpbnNlcnZlcikpIHsKKyAgICAgICAgICAgIGNrX3RuX2Vu Y19zdG9wKCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgfQor I2VuZGlmIC8qIFROQ09ERSAqLworCisgICAgaWYgKCF4ZnJpbnQpIGNvbm5vaSgpOworICAgIHh4 cHJvdG8oKTsJCQkJLyogQ2FsbCB0aGUgcmVhbCBwcm90b2NvbCBmdW5jdGlvbiAqLworCisjaWZk ZWYgSUtTX09QVElPTgorICB4eHByb3RveDoKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAg eGZlcnN0YXQgPSBzdWNjZXNzOwkJCS8qIFJlbWVtYmVyIHRyYW5zZmVyIHN0YXR1cyAqLworICAg IGthY3RpdmUgPSAwOworCisjaWZkZWYgVE5DT0RFCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAg ICAgICBpZiAodG5fbm9fZW5jcnlwdF94ZmVyICYmICEoc3N0ZWxuZXQgfHwgaW5zZXJ2ZXIpKSB7 CisgICAgICAgICAgICBja190bl9lbmNfc3RhcnQoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgaWYgKFRFTE9QVF9NRShURUxP UFRfS0VSTUlUKSAmJgorICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1l X3N0YXJ0ICYmICFfbWVfc3RhcnQpIHsKKyAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CQkv KiBTZXJ2ZXIgaXMgc3RvcHBlZCAqLworIAlURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0 Lm1lX3N0YXJ0ID0gMDsKKyAgICB9CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworICAgIGlmIChp c190biAmJiB0bl9iX3hmZXIgJiYgIShzc3RlbG5ldCB8fCBpbnNlcnZlcikpIHsKKyAgICAgICAg LyogaWYgd2UgbmVnb3RpYXRlZCBCaW5hcnkgbW9kZSB0cnkgdG8gcmVzZXQgaXQgKi8KKyAgICAg ICAgaWYgKCFfdV9iaW4pIHsKKyAgICAgICAgICAgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgc3Rh dGUgY2hhbmdlZCBkdXJpbmcgdGhlIHRyYW5zZmVyICovCisJICAgIGlmIChURUxPUFRfVShURUxP UFRfQklOQVJZKSkgeworCQl0bl9zb3B0KERPTlQsVEVMT1BUX0JJTkFSWSk7CisJCVRFTE9QVF9V TkFOU1dFUkVEX0RPTlQoVEVMT1BUX0JJTkFSWSkgPSAxOworCSAgICB9IGVsc2UKKwkgICAgICBf dV9iaW4gPSAxOwkJLyogU28gd2UgZG9uJ3QgY2FsbCB0bl93YWl0KCkgKi8KKyAgICAgICAgfQor ICAgICAgICBpZiAoIV9tZV9iaW4pIHsKKyAgICAgICAgICAgIC8qIENoZWNrIHRvIHNlZSBpZiB0 aGUgc3RhdGUgY2hhbmdlZCBkdXJpbmcgdGhlIHRyYW5zZmVyICovCisJICAgIGlmIChURUxPUFRf TUUoVEVMT1BUX0JJTkFSWSkpIHsKKwkJdG5fc29wdChXT05ULFRFTE9QVF9CSU5BUlkpOworCQlU RUxPUFRfVU5BTlNXRVJFRF9XT05UKFRFTE9QVF9CSU5BUlkpID0gMTsKKwkgICAgfSBlbHNlCisJ ICAgICAgX21lX2JpbiA9IDE7CQkvKiBTbyB3ZSBkb24ndCBjYWxsIHRuX3dhaXQoKSAqLworCX0K KwlpZiAoIShfbWVfYmluICYmIF91X2JpbikpCisJICB0bl93YWl0KCJwcm90byByZXNldCBiaW5h cnkgbW9kZSIpOworICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIFBBVFRFUk5T CisgICAgcGF0dGVybnMgPSBwYV9zYXZlOworI2VuZGlmIC8qIFBBVFRFUk5TICovCisgICAgZmls ZXBlZWsgPSBzY2FuX3NhdmU7CisKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICBzdHJlYW1pbmcgPSAw OworICAgIC8qIHN0cmVhbW9rID0gMDsgKi8KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyNpZmRl ZiBDT01NRU5UCisjaWZkZWYgQ0tfU1BFRUQKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKysp CisgICAgICBjdGxwW2ldID0gc19jdGxwW2ldOworICAgIGZfY3RscCA9IDA7CisjZW5kaWYgLyog Q0tfU1BFRUQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgdXJjbGVhciA9IDA7CisgICAg aWYgKCFzdWNjZXNzKSB7CisJeGl0c3RhIHw9ICh3aGF0ICYgV19LRVJNSVQpOworCXRsb2coRjEx MCwiIGZhaWxlZDoiLChjaGFyICopZXBrdG1zZywwKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwi cHJvdG8geGZlcnN0YXQiLGVwa3Rtc2cseGZlcnN0YXQpOworICAgIHNsb3N0YXJ0ID0gc3Nfc2F2 ZTsKKyAgICBpZiAoc190aW1pbnQgPiAtMSkgewkJLyogQmVjYXVzZSBvZiBSRU1PVEUgU0VUICov CisJdGltaW50ID0gc190aW1pbnQ7CisJc190aW1pbnQgPSAtMTsKKyAgICB9CisgICAgcmVjdXJz aXZlID0gcl9zYXZlOworICAgIGZuc3BhdGggPSBwX3NhdmU7CisgICAgaWYgKGNfc2F2ZSA+IC0x KSB7CQkJLyogQmVjYXVzZSBvZiBSRU1PVEUgU0VUICovCisJYmN0ciA9IGNfc2F2ZTsKKwljX3Nh dmUgPSAtMTsKKyAgICB9CisgICAgZm5jbnYgICA9IGZfc2F2ZTsKKyAgICBiaW5hcnkgID0gYl9z YXZlOworI2lmZGVmIFBJUEVTRU5ECisgICAgcGlwZXNlbmQgPSAwOyAgICAJCQkvKiBOZXh0IHRp bWUgbWlnaHQgbm90IGJlIHBpcGVzZW5kICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNpZm5k ZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIGN1cnNvcmVuYVt2bW9kZV0gPSBjdXJzb3Jfc2F2 ZTsKKyAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZlOworICAgIGRpc3BsYXlfZGVtbyA9IDE7Cisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworfQorCitzdGF0aWMgVk9JRAor eHhwcm90bygpIHsKKyAgICBpbnQgeDsKKyAgICBsb25nIGx4OworI2lmZGVmIENLX1hZWgorI2lm ZGVmIFhZWl9JTlRFUk5BTAorX1BST1RPVFlQKCBpbnQgcHh5eiwgKGludCkgKTsKKyNlbmRpZiAv KiBYWVpfSU5URVJOQUwgKi8KKyNlbmRpZiAvKiBDS19YWVogKi8KKworICAgIGNoYXIgeHNzWzJd OwkJCS8qIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBzc3RhdGUgKi8KKyAgICB4c3NbMF0gPSBz c3RhdGU7CisgICAgeHNzWzFdID0gTlVMOworICAgIHNfdGltaW50ID0gdGltaW50OworCisgICAg ZGVidWcoRjEwMSwieHhwcm90byBlbnRyeSBqdXN0b25lIiwiIixqdXN0b25lKTsKKyAgICBzdWNj ZXNzID0gMDsKKworICAgIHJldHJpZXZlID0gMDsJCQkvKiBSZXNldCB0aGVzZSAuLi4gKi8KKyAg ICByZWdldCA9IDA7CisgICAgb3BrdCA9IDA7CisKKyAgICBpZiAobG9jYWwgJiYgdHRjaGsoKSA8 IDApIHsJCS8qIEdpdmluZyBCWUUgb3IgRklOICovCisJaWYgKGJ5ZV9hY3RpdmUpIHsJCS8qIGJ1 dCB0aGVyZSBpcyBubyBjb25uZWN0aW9uICovCisJICAgIHR0Y2xvcygwKTsKKwkgICAgc3VjY2Vz cyA9IDE7CisJICAgIHJldHVybjsKKwl9CisJLyogRGl0dG8gZm9yIGFueSBSRU1PVEUgY29tbWFu ZCAqLworCWlmIChzc3RhdGUgPT0gJ2cnICYmIGNtYXJnICkgeworCSAgICBpZiAoKmNtYXJnID09 ICdMJyB8fCAqY21hcmcgPT0gJ0YnIHx8ICpjbWFyZyA9PSAnWCcpCisJICAgICAgc3VjY2VzcyA9 IDE7CisJICAgIGVsc2UKKwkgICAgICBwcmludGYoIj9ObyBjb25uZWN0aW9uXHJcbiIpOworCSAg ICByZXR1cm47CisJfQorICAgIH0KKworLyogU2V0IHVwIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUg Zm9yIGZpbGUgdHJhbnNmZXIuICovCisvKiBOT1RFOiBBbGwgb2YgdGhlIHh4c2NyZWVuKCkgY2Fs bHMgcHJpb3IgdG8gdGhlIHdhcnQoKSBpbnZvY2F0aW9uICovCisvKiBjb3VsZCBqdXN0IGFzIGVh c2lseSBiZSBwcmludGYncyBvciwgZm9yIHRoYXQgbWF0dGVyLCBoaW50cy4gKi8KKworICAgIGlm IChsb2NhbCAmJiAoc3BlZWQgPCAwTCkgJiYgKG5ldHdvcmsgPT0gMCkpIHsKKwl4eHNjcmVlbihT Q1JfRU0sMCwwTCwiU29ycnksIHlvdSBtdXN0ICdzZXQgc3BlZWQnIGZpcnN0Iik7CisJcmV0dXJu OworICAgIH0KKyAgICB4ID0gLTE7CisgICAgaWYgKHR0b3Blbih0dG5hbWUsJngsbWRtdHlwLGNk dGltbykgPCAwKSB7CisJZGVidWcoRjExMSwiZmFpbGVkOiBwcm90byB0dG9wZW4gbG9jYWwiLHR0 bmFtZSxsb2NhbCk7CisJeHhzY3JlZW4oU0NSX0VNLDAsMEwsIkNhbid0IG9wZW4gbGluZSIpOwor CXJldHVybjsKKyAgICB9CisgICAgaWYgKHggPiAtMSkgbG9jYWwgPSB4OworICAgIGRlYnVnKEYx MTEsInByb3RvIHR0b3BlbiBsb2NhbCIsdHRuYW1lLGxvY2FsKTsKKworICAgIGx4ID0gKGxvY2Fs ICYmICFuZXR3b3JrKSA/IHNwZWVkIDogLTE7CisjaWZkZWYgTkVUQ09OTgorI2lmZGVmIENLX1NQ RUVECisgICAgaWYgKGlzX3RuKSB7CisJY3RscFsodW5zaWduZWQpMjU1XSA9IGN0bHBbQ1JdID0g MTsKKwlpZiAocGFyaXR5ID09ICdlJyB8fCBwYXJpdHkgPT0gJ20nKSBjdGxwWzEyN10gPSAxOwor CWlmIChmbG93ID09IEZMT19YT05YKSB7CQkvKiBBbHNvIHdhdGNoIG91dCBmb3IgWG9uL1hvZmYg Ki8KKwkgICAgY3RscFsxN10gPSBjdGxwWzE5XSA9IDE7CisJICAgIGN0bHBbMTcrMTI4XSA9IGN0 bHBbMTkrMTI4XSA9IDE7CisJfQorICAgIH0KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworI2VuZGlm IC8qIE5FVENPTk4gKi8KKyAgICBpZiAodHRwa3QobHgsZmxvdyxwYXJpdHkpIDwgMCkgewkvKiBQ dXQgbGluZSBpbiBwYWNrZXQgbW9kZSwgKi8KKwl4eHNjcmVlbihTQ1JfRU0sMCwwTCwiQ2FuJ3Qg Y29uZGl0aW9uIGxpbmUiKTsKKwlyZXR1cm47CisgICAgfQorICAgIGlmIChsb2NhbCAmJiAhbmV0 d29yayAmJiBjYXJyaWVyICE9IENBUl9PRkYpIHsKKwlpbnQgeDsJCQkJLyogU2VyaWFsIGNvbm5l Y3Rpb24gKi8KKwl4ID0gdHRnbWRtKCk7CQkJLyogd2l0aCBjYXJyaWVyIGNoZWNraW5nICovCisJ aWYgKHggPiAtMSkgeworCSAgICBpZiAoISh4ICYgQk1fRENEKSkgeworCQlkZWJ1ZyhGMTAxLCJw cm90byB0dGdtZG0iLCIiLDApOworCQl4eHNjcmVlbihTQ1JfRU0sMCwwTCwiQ2FycmllciByZXF1 aXJlZCBidXQgbm90IGRldGVjdGVkIik7CisJCXJldHVybjsKKwkgICAgfQorCX0KKyAgICB9Cisg ICAgLyogU2VuZCByZW1vdGUgc2lkZSdzICJyZWNlaXZlIiBvciAic2VydmVyIiBzdGFydHVwIHN0 cmluZywgaWYgYW55ICovCisgICAgaWYgKGxvY2FsICYmIGNraW5kZXgoKGNoYXIgKil4c3MsInNy Z2NqaGsiLDAsMCwxKSkgeworCWNoYXIgKnMgPSBOVUxMOworICAgICAgICBpZiAoCisjaWZkZWYg SUtTX09QVElPTgorCSAgICAvKiBEb24ndCBzZW5kIGF1dG8tYmxhaCBzdHJpbmcgaWYgd2Uga25v dyBvdGhlciBzaWRlIGlzIHNlcnZpbmcgKi8KKwkgICAgIVRFTE9QVF9VKFRFTE9QVF9LRVJNSVQp IHx8CisJICAgICFURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQKKyNlbHNl CisJICAgIDEKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisJICAgICkgeworCSAgICBpZiAoc3N0 YXRlID09ICdzJykgewkvKiBTZW5kaW5nIGZpbGUocykgKi8KKwkJcyA9IGJpbmFyeSA/IHB0YWJb cHJvdG9jb2xdLmhfYl9pbml0IDogcHRhYltwcm90b2NvbF0uaF90X2luaXQ7CisJICAgIH0gZWxz ZSBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgeyAvKiBDb21tYW5kIGZvciBzZXJ2ZXIgKi8KKwkJ cyA9IHB0YWJbcHJvdG9jb2xdLmhfeF9pbml0OworCSAgICB9CisJfQorI2lmZGVmIENLX1NQRUVE CisjaWZuZGVmIFVOUFJFRklYWkVSTworCWlmIChwcm90b2NvbCA9PSBQUk9UT19LKQkvKiBCZWNh dXNlIG9mIEMtc3RyaW5ncy4uLiAqLworCSAgY3RscFswXSA9IDE7CisjZW5kaWYgLyogVU5QUkVG SVhaRVJPICovCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKwlpZiAocykgaWYgKCpzKSB7CQkvKiBJ ZiB3ZSBoYXZlIGEgY29tbWFuZCB0byBzZW5kLi4uICovCisJICAgIGNoYXIgdG1wYnVmWzM1Nl07 CisJICAgIGludCB0bXBidWZzaXogPSAzNTY7CisJICAgIGludCBzdHVmZiA9IC0xLCBzdHVmZjIg PSAtMSwgbGVuID0gMDsKKwkgICAgZXh0ZXJuIGludCB0bmxtOworCSAgICBpZiAoc3N0YXRlID09 ICdzJykgewkvKiBTZW5kaW5nIGZpbGUocykgKi8KKyNpZmRlZiBDS19YWVoKKwkJaWYgKHByb3Rv Y29sID09IFBST1RPX1gpIHsKKwkJICAgIGNoYXIgKiBzMjsKKwkJICAgIHMyID0gY21hcmcyWzBd ID8gY21hcmcyIDogY21hcmc7CisJCSAgICBpZiAoKGludClzdHJsZW4ocykgKyAoaW50KXN0cmxl bihzMikgKyA0IDwgMzU2KQorCQkgICAgICBzcHJpbnRmKHRtcGJ1ZiwgcywgczIpOworCQkgICAg ZWxzZQorCQkgICAgICB0bXBidWZbMF0gPSBOVUw7CisJCX0gZWxzZSB7CisjZW5kaWYgLyogQ0tf WFlaICovCisJCSAgICBja21ha21zZyh0bXBidWYsIDM1NiwgcywgTlVMTCwgTlVMTCwgTlVMTCk7 CisjaWZkZWYgQ0tfWFlaCisJCX0KKyNlbmRpZiAvKiBDS19YWVogKi8KKwkgICAgfSBlbHNlIHsJ CQkvKiBDb21tYW5kIGZvciBzZXJ2ZXIgKi8KKwkJY2tzdHJuY3B5KHRtcGJ1ZixzLDM1Nik7CisJ ICAgIH0KKwkgICAgY2tzdHJuY2F0KHRtcGJ1ZiwgIlwwMTUiLHNpemVvZih0bXBidWYpKTsKKwkg ICAgaWYgKHRubG0pCQkJLyogVEVSTUlOQUwgTkVXTElORSBPTiAqLworCSAgICAgIHN0dWZmID0g TEY7CQkvKiBTdHVmZiBMRiAqLworI2lmZGVmIFROQ09ERQorCSAgICAvKiBURUxORVQgTkVXTElO RSBNT0RFICovCisJICAgIGlmIChpc190bikgeworCQlzd2l0Y2ggKFRFTE9QVF9NRShURUxPUFRf QklOQVJZKSA/IHRuX2JfbmxtIDogdG5fbmxtKSB7CisJCSAgY2FzZSBUTkxfQ1I6CisJCSAgICBi cmVhazsKKwkJICBjYXNlIFROTF9DUk5VTDoKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgVE5MX0NS TEY6CisJCSAgICBzdHVmZjIgPSBzdHVmZjsKKwkJICAgIHN0dWZmID0gTEY7CisJCSAgICBicmVh azsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZmRlZiBORVRDT05OCisj aWZkZWYgVENQU09DS0VUCisjaWZkZWYgUkxPR0NPREUKKwkgICAgaWYgKG5ldHdvcmsgJiYgdHRu cHJvdG8gPT0gTlBfUkxPR0lOKSB7CisJCXN3aXRjaCAodG5fYl9ubG0pIHsgLyogQWx3YXlzIEJJ TkFSWSAqLworCQkgIGNhc2UgVE5MX0NSOgorCQkgICAgYnJlYWs7CisJCSAgY2FzZSBUTkxfQ1JO VUw6CisJCSAgICBzdHVmZjIgPSBzdHVmZjsKKwkJICAgIHN0dWZmICA9IE5VTDsKKwkJICAgIGJy ZWFrOworCQkgIGNhc2UgVE5MX0NSTEY6CisJCSAgICBzdHVmZjIgPSBzdHVmZjsKKwkJICAgIHN0 dWZmID0gTEY7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogUkxPR0NPREUg Ki8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisKKwkgICAg bGVuID0gc3RybGVuKHRtcGJ1Zik7CisJICAgIGlmIChzdHVmZiA+PSAwICYmIGxlbiA8IHRtcGJ1 ZnNpeiAtIDEpIHsKKwkJdG1wYnVmW2xlbisrXSA9IHN0dWZmOworCQlpZiAoc3R1ZmYyID49IDAg JiYgbGVuIDwgdG1wYnVmc2l6IC0gMSkKKwkJICB0bXBidWZbbGVuKytdID0gc3R1ZmYyOworCQl0 bXBidWZbbGVuXSA9IE5VTDsKKwkgICAgfQorCSAgICB0dG9sKChDSEFSICopdG1wYnVmLGxlbik7 CisJICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKQkvKiBHaXZlIHJlbW90ZSBLZXJtaXQgdGlt ZSB0byBzdGFydCAqLworCSAgICAgIG1zbGVlcCg0MDApOworCX0KKyAgICB9CisKKyNpZmRlZiBD S19YWVoKKyAgICBpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewkJLyogTm9uLUtlcm1pdCBwcm90 b2NvbCBzZWxlY3RlZCAqLworCWNoYXIgdG1wYnVmWzM1Nl07CisJaW50IHRtcGJ1ZnNpeiA9IDM1 NjsKKwljaGFyICogcyA9ICIiOworCisjaWZkZWYgQ0tfVE1QRElSCisJaWYgKHNzdGF0ZSA9PSAn dicpIHsJCS8qIElmIHJlY2VpdmluZyBhbmQuLi4gKi8KKwkgICAgaWYgKGRsZGlyICYmICFmX3Rt cGRpcikgewkvKiBpZiB0aGV5IGhhdmUgYSBkb3dubG9hZCBkaXJlY3RvcnkgKi8KKwkJaWYgKHMg PSB6Z3RkaXIoKSkgewkvKiBHZXQgY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICAgIGlmICh6Y2hk aXIoZGxkaXIpKSB7IC8qIENoYW5nZSB0byBkb3dubG9hZCBkaXJlY3RvcnkgKi8KKwkJCWNrc3Ry bmNweShzYXZkaXIscyxUTVBESVJMRU4pOworCQkJZl90bXBkaXIgPSAxOwkvKiBSZW1lbWJlciB0 aGF0IHdlIGRpZCB0aGlzICovCisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZiAvKiBD S19UTVBESVIgKi8KKworI2lmZGVmIFhZWl9JTlRFUk5BTAkJCS8qIEludGVybmFsICovCisJc3Vj Y2VzcyA9ICFweHl6KHNzdGF0ZSk7CisjZWxzZQorI2lmZGVmIENLX1JFRElSCQkJCS8qIEV4dGVy bmFsICovCisJc3dpdGNoIChzc3RhdGUpIHsKKwkgIGNhc2UgJ3MnOgkJCS8qICdUaXMgYmV0dGVy IHRvIFNFTkQuLi4gKi8KKwkgICAgcyA9IGJpbmFyeSA/IHB0YWJbcHJvdG9jb2xdLnBfYl9zY21k IDogcHRhYltwcm90b2NvbF0ucF90X3NjbWQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAndic6CQkJ LyogLi4uIHRoYW4gUkVDRUlWRSAqLworCSAgICBzID0gYmluYXJ5ID8gcHRhYltwcm90b2NvbF0u cF9iX3JjbWQgOiBwdGFiW3Byb3RvY29sXS5wX3RfcmNtZDsKKwkgICAgYnJlYWs7CisJfQorCWlm ICghcykgcyA9ICIiOworCWlmICgqcykgeworCSAgICBpZiAoc3N0YXRlID09ICdzJykgewkvKiBT ZW5kaW5nICovCisJCWV4dGVybiBpbnQgeGZlcm1vZGU7CisJCWludCBrID0gMCwgeCA9IDAsIGIg PSBiaW5hcnk7CisJCS8qCisJCSAgSWYganVzdCBvbmUgZmlsZSB3ZSBjYW4gc2NhbiBpdCB0byBz ZXQgdGhlIHhmZXIgbW9kZS4KKwkJICBPdGhlcndpc2UgaXQncyB1cCB0byB0aGUgZXh0ZXJuYWwg cHJvdG9jb2wgcHJvZ3JhbS4KKwkJKi8KKwkJaWYgKHBhdHRlcm5zICYmIHhmZXJtb2RlID09IFhN T0RFX0EgJiYgIWlzd2lsZChmc3BlYykpIHsKKwkJICAgIGV4dGVybiBpbnQgbnNjYW5maWxlOwor CQkgICAgayA9IHNjYW5maWxlKGZzcGVjLCZ4LG5zY2FuZmlsZSk7CisJCSAgICBpZiAoayA+IC0x KSB7CisJCQliID0gKGsgPT0gRlRfQklOKSA/IFhZRlRfQiA6IFhZRlRfVDsKKwkJCXMgPSBiID8K KwkJCSAgICBwdGFiW3Byb3RvY29sXS5wX2Jfc2NtZCA6CisJCQkgICAgcHRhYltwcm90b2NvbF0u cF90X3NjbWQ7CisJCSAgICB9CisJCX0KKwkJaWYgKChpbnQpc3RybGVuKHMpICsgKGludClzdHJs ZW4oZnNwZWMpIDwgdG1wYnVmc2l6KSB7CisJCSAgICBzcHJpbnRmKHRtcGJ1ZixzLGZzcGVjKTsg Lyogc2FmZSAocHJlY2hlY2tlZCkgKi8KKwkJICAgIHRsb2coRjExMCwiU2VuZGluZyIsZnNwZWMs MEwpOworCQl9CisJICAgIH0gZWxzZSB7CQkJLyogUmVjZWl2aW5nICovCisJCWlmICgoaW50KXN0 cmxlbihzKSArIChpbnQpc3RybGVuKGNtYXJnMikgPCB0bXBidWZzaXopIHsKKwkJICAgIHNwcmlu dGYodG1wYnVmLHMsY21hcmcyKTsgLyogc2FmZSAocHJlY2hlY2tlZCkgKi8KKwkJICAgIHRsb2co RjExMCwiUmVjZWl2aW5nIixjbWFyZzIsMEwpOworCQl9CisJICAgIH0KKwkgICAgdGxvZyhGMTEw LCIgdmlhIGV4dGVybmFsIHByb3RvY29sOiIsdG1wYnVmLDApOworCSAgICBkZWJ1ZyhGMTEwLCJj a2Nwcm8gdHRydW5jbWQiLHRtcGJ1ZiwwKTsKKwkgICAgc3VjY2VzcyA9IHR0cnVuY21kKHRtcGJ1 Zik7CisJICAgIHRsb2coRjExMCwiIHN0YXR1czoiLHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIs IDApOworCX0gZWxzZSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBubyBleHRlcm5hbCBwcm90b2Nv bCBkZWZpbmVkIGZvciAlc1xyXG4iLAorCQkgICBwdGFiW3Byb3RvY29sXS5wX25hbWUKKwkJICAg KTsKKwl9CisjZWxzZQorCXByaW50ZigKKyJTb3JyeSwgb25seSBLZXJtaXQgcHJvdG9jb2wgaXMg c3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbiBvZiBLZXJtaXRcbiIKKwkgICAgICAgKTsKKyNlbmRp ZiAvKiBDS19SRURJUiAqLworI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworCXJldHVybjsKKyAg ICB9CisjZW5kaWYgLyogQ0tfWFlaICovCisKKyNpZmRlZiBOVFNJR1gKKyAgICBjb25yYXcoKTsK KyAgICBjb25ub2koKTsKKyNlbHNlCisgICAgaWYgKCFsb2NhbCkKKyAgICAgIGNvbm5vaSgpOwkJ CQkvKiBObyBjb25zb2xlIGludGVycnVwdHMgaWYgcmVtb3RlICovCisjZW5kaWYgLyogTlRTSUcg Ki8KKworICAgIGthY3RpdmUgPSAxOworICAgIGlmIChzc3RhdGUgPT0gJ3gnKSB7CQkvKiBJZiBl bnRlcmluZyBzZXJ2ZXIgbW9kZSwgKi8KKwlleHRlcm4gaW50IGhvd2NhbGxlZDsKKwlzZXJ2ZXIg PSAxOwkJCS8qIHNldCBmbGFnLCAqLworCWRlYnVnKEYxMDEsInNlcnZlciBiYWNrZ3JkIiwiIixi YWNrZ3JkKTsKKwlkZWJ1ZyhGMTAxLCJzZXJ2ZXIgcXVpZXQiLCIiLHF1aWV0KTsKKwlkZWJ1ZyhG MTAwLCJTSE9VTEQgTk9UIFNFRSBUSElTIElGIElOIEJBQ0tHUk9VTkQhIiwiIiwwKTsKKwlpZiAo aG93Y2FsbGVkID09IElfQU1fU1NIU1VCKSB7CS8qIGFuZCBpc3N1ZSBhcHByb3ByaWF0ZSBtZXNz YWdlLiAqLworCSAgICB0dG9sKChDSEFSICopIktFUk1JVCBSRUFEWSBUTyBTRVJWRS4uLlwwMTVc MDEyIiwyNik7CisJfSBlbHNlIGlmICghbG9jYWwpIHsKKwkgICAgaWYgKCFxdWlldCAmJiAhYmFj a2dyZAorI2lmZGVmIElLU19PUFRJT04KKyAgICAgICAgICAgICAgICAmJiAhVEVMT1BUX01FKFRF TE9QVF9LRVJNSVQpIC8qIFVzZXIgd2FzIHRvbGQgYnkgbmVnb3RpYXRpb24gKi8KKyNlbmRpZiAv KiBJS1NfT1BUSU9OICovCisJCSkgeworCQljb25vbGwoc3J2dHh0KTsKKwkJY29ub2xsKCJLRVJN SVQgUkVBRFkgVE8gU0VSVkUuLi4iKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGNvbm9sKCJF bnRlcmluZyBzZXJ2ZXIgbW9kZSBvbiAiKTsKKwkgICAgY29ub2xsKHR0bmFtZSk7CisJICAgIGNv bm9sbCgiVHlwZSBDdHJsLUMgdG8gcXVpdC4iKTsKKwkgICAgaWYgKHNydmRpcykgaW50bXNnKC0x TCk7CisjaWZkZWYgVENQU09DS0VUCisjaWZuZGVmIE5PTElTVEVOCisJICAgIGlmIChuZXR3b3Jr ICYmIHRjcHNyZmQgPiAwKQorCSAgICAgIHR0b2woKENIQVIgKikiS0VSTUlUIFJFQURZIFRPIFNF UlZFLi4uXDAxNVwwMTIiLDI2KTsKKyNlbmRpZiAvKiBOT0xJU1RFTiAqLworI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworCX0KKyAgICB9IGVsc2UKKyAgICAgIHNlcnZlciA9IDA7CisjaWZkZWYgVk1T CisgICAgaWYgKCFxdWlldCAmJiAhYmFja2dyZCkgICAgLyogU28gbWVzc2FnZSBkb2Vzbid0IG92 ZXJ3cml0ZSBwcm9tcHQgKi8KKyAgICAgIGNvbm9sbCgiIik7CisgICAgaWYgKGxvY2FsKSBjb25y ZXMoKTsgICAgICAgLyogU28gQ3RybC1DIHdpbGwgd29yayAqLworI2VuZGlmIC8qIFZNUyAqLwor LyoKKyAgSWYgaW4gcmVtb3RlIG1vZGUsIG5vdCBzaHVzaGVkLCBub3QgaW4gYmFja2dyb3VuZCwg YW5kIGF0IHRvcCBjb21tYW5kIGxldmVsLAorICBpc3N1ZSBhIGhlbHBmdWwgbWVzc2FnZSB0ZWxs aW5nIHdoYXQgdG8gZG8uLi4KKyovCisgICAgaWYgKCFsb2NhbCAmJiAhcXVpZXQgJiYgIWJhY2tn cmQpIHsKKwlpZiAoc3N0YXRlID09ICd2JykgeworCSAgICBjb25vbGwoIlJldHVybiB0byB5b3Vy IGxvY2FsIEtlcm1pdCBhbmQgZ2l2ZSBhIFNFTkQgY29tbWFuZC4iKTsKKwkgICAgY29ub2xsKCIi KTsKKwkgICAgY29ub2xsKCJLRVJNSVQgUkVBRFkgVE8gUkVDRUlWRS4uLiIpOworCX0gZWxzZSBp ZiAoc3N0YXRlID09ICdzJykgeworCSAgICBjb25vbGwoIlJldHVybiB0byB5b3VyIGxvY2FsIEtl cm1pdCBhbmQgZ2l2ZSBhIFJFQ0VJVkUgY29tbWFuZC4iKTsKKwkgICAgY29ub2xsKCIiKTsKKwkg ICAgY29ub2xsKCJLRVJNSVQgUkVBRFkgVE8gU0VORC4uLiIpOworCX0gZWxzZSBpZiAoIHNzdGF0 ZSA9PSAnZycgfHwgc3N0YXRlID09ICdyJyB8fCBzc3RhdGUgPT0gJ2gnIHx8CisJCSAgICBzc3Rh dGUgPT0gJ2onIHx8IHNzdGF0ZSA9PSAnYycgKSB7CisJICAgIGNvbm9sbCgiUmV0dXJuIHRvIHlv dXIgbG9jYWwgS2VybWl0IGFuZCBnaXZlIGEgU0VSVkVSIGNvbW1hbmQuIik7CisJICAgIGNvbm9s bCgiIik7CisJICAgIGNvbm9sbCgoc3N0YXRlID09ICdyJyB8fCBzc3RhdGUgPT0gJ2onIHx8IHNz dGF0ZSA9PSAnaCcpID8KKwkJICAgIktFUk1JVCBSRUFEWSBUTyBHRVQuLi4iIDoKKwkJICAgIktF Uk1JVCBSRUFEWSBUTyBTRU5EIFNFUlZFUiBDT01NQU5ELi4uIik7CisJfQorICAgIH0KKyNpZmRl ZiBDT01NRU5UCisgICAgaWYgKCFsb2NhbCkgc2xlZXAoMSk7CisjZW5kaWYgLyogQ09NTUVOVCAq LworLyoKKyAgVGhlICd3YXJ0KCknIGZ1bmN0aW9uIGlzIGdlbmVyYXRlZCBieSB0aGUgd2FydCBw cm9ncmFtLiAgSXQgZ2V0cyBhCisgIGNoYXJhY3RlciBmcm9tIHRoZSBpbnB1dCgpIHJvdXRpbmUg YW5kIHRoZW4gYmFzZWQgb24gdGhhdCBjaGFyYWN0ZXIgYW5kCisgIHRoZSBjdXJyZW50IHN0YXRl LCBzZWxlY3RzIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24sIGFjY29yZGluZyB0byB0aGUgc3RhdGUK KyAgdGFibGUgYWJvdmUsIHdoaWNoIGlzIHRyYW5zZm9ybWVkIGJ5IHRoZSB3YXJ0IHByb2dyYW0g aW50byBhIGJpZyBjYXNlCisgIHN0YXRlbWVudC4gIFRoZSBmdW5jdGlvbiBpcyBhY3RpdmUgZm9y IG9uZSB0cmFuc2FjdGlvbi4KKyovCisgICAgcnRpbWVyKCk7CQkJCS8qIFJlc2V0IGVsYXBzZWQt dGltZSB0aW1lciAqLworI2lmZGVmIEdGVElNRVIKKyAgICByZnRpbWVyKCk7CisjZW5kaWYgLyog R0ZUSU1FUiAqLworICAgIHJlc2V0YygpOwkJCQkvKiAmIG90aGVyIHBlci10cmFuc2FjdGlvbiBj b3VudGVycy4gKi8KKworICAgIGRlYnVnKEYxMDEsInByb3RvIGNhbGxpbmcgd2FydCwganVzdG9u ZSIsIiIsanVzdG9uZSk7CisKKyAgICB3YXJ0KCk7CQkJCS8qIEVudGVyIHRoZSBzdGF0ZSB0YWJs ZSBzd2l0Y2hlci4gKi8KKy8qCisgIE5vdGU6IHRoZSBmb2xsb3dpbmcgaXMgbmVjZXNzYXJ5IGlu IGNhc2Ugd2UgaGF2ZSBqdXN0IGRvbmUgYSByZW1vdGUtbW9kZQorICBmaWxlIHRyYW5zZmVyLCBp biB3aGljaCBjYXNlIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBtb2RlcyBoYXZlIGJlZW4KKyAg Y2hhbmdlZCBieSB0dHBrdCgpLiAgSW4gcGFydGljdWxhciwgc3BlY2lhbCBjaGFyYWN0ZXJzIGxp a2UgQ3RybC1DIGFuZAorICBDdHJsLVwgbWlnaHQgaGF2ZSBiZWVuIHR1cm5lZCBvZmYgKHNlZSB0 dHBrdCkuICBTbyB0aGlzIGNhbGwgdG8gdHRyZXMoKSBpcworICBlc3NlbnRpYWwuICBJTVBPUlRB TlQ6IHJlc3RvcmUgaW50ZXJydXB0IGhhbmRsZXJzIGZpcnN0LCBvdGhlcndpc2UgYW55CisgIHRl cm1pbmFsIGludGVycnVwdHMgdGhhdCBvY2N1ciBiZWZvcmUgdGhpcyBpcyBkb25lIGluIHRoZSBu b3JtYWwgcGxhY2UKKyAgbGF0ZXIgd2lsbCBjYXVzZSBhIGNyYXNoLgorKi8KKyNpZmRlZiBPUzIK KyAgICB0dHJlcygpOwkJCQkvKiBSZXNldCB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgKi8KKyNl bHNlCisgICAgaWYgKCFsb2NhbCkgeworCXNldGludCgpOwkJCS8qIEFybSBpbnRlcnJ1cHQgaGFu ZGxlcnMgRklSU1QgKi8KKwltc2xlZXAoNTAwKTsKKwl0dHJlcygpOwkJCS8qIFRoZW4gcmVzdG9y ZSB0ZXJtaW5hbC4gKi8KKyAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgeHhzY3JlZW4oU0NS X1RDLDAsMEwsIiIpOwkJLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8KKyAgICB4ID0gcXVpZXQ7 CisgICAgcXVpZXQ9MTsKKyAgICBjbHNpZigpOwkJCQkvKiBGYWlsc2FmZSBpbiBjYXNlIHdlIG1p c3NlZCAqLworICAgIGNsc29mKDEpOwkJCQkvKiBhIGNhc2UgaW4gdGhlIHN0YXRlIG1hY2hpbmUu ICovCisgICAgcXVpZXQgPSB4OworCisgICAgaWYgKHNlcnZlcikgewkJCS8qIEJhY2sgZnJvbSBw YWNrZXQgcHJvdG9jb2wuICovCisgICAgCWlmICghcXVpZXQgJiYgIWJhY2tncmQKKyNpZmRlZiBJ S1NECisJICAgICYmICFpbnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8KKwkgICAgKSB7CQkJCS8q IEdpdmUgYXBwcm9wcmlhdGUgbWVzc2FnZSAqLworCSAgICBjb25vbGwoIiIpOworCSAgICBjb25v bGwoIkMtS2VybWl0IHNlcnZlciBkb25lIik7CisgICAgICAgIH0KKyAgICAgICAgc2VydmVyID0g MDsJCQkvKiBOb3QgYSBzZXJ2ZXIgYW55IG1vcmUgKi8KKyAgICB9Cit9CisKKy8qICBTIEcgRSBU IEkgTiBJIFQgIC0tICBIYW5kbGUgaW5jb21pbmcgR0VULUNsYXNzIHBhY2tldHMgICovCisKKy8q CisgIFJldHVybnM6CisgICAtMTogT24gZXJyb3IKKyAgICAwOiBHRVQgcGFja2V0IHByb2Nlc3Nl ZCBPSyAtIHJlYWR5IHRvIFNlbmQuCisgICAgMTogRXh0ZW5kZWQgR0VUIHByb2Nlc3NlZCBPSyAt IHdhaXQgZm9yIGFub3RoZXIuCisqLworc3RhdGljIGludAorc2dldGluaXQocmVnZXQseGdldCkg aW50IHJlZ2V0LCB4Z2V0OyB7CS8qIFNlcnZlciBlbmQgb2YgR0VUIGNvbW1hbmQgKi8KKyAgICBj aGFyICogZnMgPSBOVUxMOwkJCS8qIFBvaW50ZXIgdG8gZmlsZXNwZWMgKi8KKyAgICBpbnQgaSwg biwgZG9uZSA9IDA7CisjaWZkZWYgUElQRVNFTkQKKyAgICBleHRlcm4gaW50IHVzZXBpcGVzLCBw aXBlc2VuZDsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgIGV4dGVybiBpbnQgbm9saW5rczsK KworICAgIGlmICghRU5BQkxFRChlbl9nZXQpKSB7CQkvKiBPbmx5IGlmIG5vdCBkaXNhYmxlZCEg ICovCisJZXJycGt0KChDSEFSICopIkdFVCBkaXNhYmxlZCIpOworCXJldHVybigtMSk7CisgICAg fQorCisgICAgLyogT0sgdG8gcHJvY2VlZCAqLworCisgICAgbm9saW5rcyA9IHJlY3Vyc2l2ZTsK KyAgICBmaWxjbnQgPSAwOworCisjaWZkZWYgV0hBVEFNSQorICAgIC8qIElmIHRoZXkgYXJlIGFs aWtlIHRoaXMgd2FzIGFscmVhZHkgZG9uZSBpbiB3aG9hcmV3ZSgpICovCisgICAgZGVidWcoRjEw MSwic2dldGluaXQgd2hhdHJ1IiwiIix3aGF0cnUpOworICAgIGlmICh3aGF0cnUgJiBXTUlfRkxB RykgewkJLyogRGlkIHdlIGdldCBXSEFUQU1JIGluZm8/ICovCisJZGVidWcoRjEwMSwic2dldGlu aXQgYmluYXJ5ICgxKSIsIiIsYmluYXJ5KTsKKyNpZmRlZiBWTVMKKwlpZiAoYmluYXJ5ICE9IFhZ RlRfSSAmJiBiaW5hcnkgIT0gWFlGVF9MKQorI2Vsc2UKKyNpZmRlZiBPUzIKKwkgIGlmIChiaW5h cnkgIT0gWFlGVF9MKQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFZNUyAqLworCSAgICBi aW5hcnkgPSAod2hhdHJ1ICYgV01JX0ZNT0RFKSA/IC8qIFllcywgc2V0IGZpbGUgdHlwZSAqLwor CSAgICAgIFhZRlRfQiA6IFhZRlRfVDsJLyogYXV0b21hdGljYWxseSAqLworCWRlYnVnKEYxMDEs InNnZXRpbml0IGJpbmFyeSAoMikiLCIiLGJpbmFyeSk7CisJaWYgKCF3ZWFyZWFsaWtlKQorCSAg Zm5jbnYgPSAod2hhdHJ1ICYgV01JX0ZOQU1FKSA/IDEgOiAwOyAvKiBBbmQgbmFtZSBjb252ZXJz aW9uICovCisgICAgfQorI2VuZGlmIC8qIFdIQVRBTUkgKi8KKworICAgIGZzID0gKGNoYXIgKilz cnZjbWQ7CisgICAgc3J2cHRyID0gc3J2Y21kOwkJCS8qIFBvaW50IHRvIHNlcnZlciBjb21tYW5k IGJ1ZmZlciAqLworICAgIGRlY29kZShyZGF0YXAscHV0c3J2LDApOwkJLyogRGVjb2RlIHRoZSBH RVQgY29tbWFuZCBpbnRvIGl0ICovCisgICAgLyogQWNjZXB0IG11bHRpcGxlIGZpbGVzcGVjcyAq LworICAgIGNtYXJnMiA9ICIiOwkJCS8qIERvbid0IHVzZSBjbWFyZzIgKi8KKyAgICBjbWFyZyA9 ICIiOwkJCQkvKiBEb24ndCB1c2UgY21hcmcgKi8KKworICAgIGRvbmUgPSAxOwkJCQkvKiBPbmx5 IDEgcGFja2V0IG5lZWRlZC4uLiAqLworICAgIGlmICh4Z2V0KSB7CQkJCS8qIFNwZWNpYWwgZGVj b2RpbmcgZm9yIEV4dGVuZGVkIEdFVCAqLworCWNoYXIgTCwgbmV4dCwgYzsJCS8qIFBMViBpdGVt cyAqLworCWludCBsZW4sIHZhbDsJCQkvKiBNb3JlIFBMViBpdGVtcyAqLworCWNoYXIgKiBwID0g KGNoYXIgKilzcnZjbWQ7CS8qIFN0cmluZyB0byBkZWNvZGUgKi8KKworCWRvbmUgPSAwOwkJCS8q IE1heWJlIG1vcmUgcGFja2V0cyBuZWVkZWQgKi8KKwlmcyA9IE5VTEw7CQkJLyogV2UgZG9uJ3Qg a25vdyB0aGUgZmlsZXNwZWMgeWV0ICovCisJYyA9ICpwKys7CQkJLyogR2V0IGZpcnN0IHBhcmFt ZXRlciAqLworCisJd2hpbGUgKGMpIHsJCQkvKiBGb3IgYWxsIHBhcmFtZXRlcnMuLi4gKi8KKwkg ICAgZGVidWcoRjAwMCwic2dldGluaXQgYyIsIiIsYyk7CisJICAgIEwgPSAqcCsrOwkJCS8qIEdl dCBsZW5ndGggKi8KKwkgICAgaWYgKEwgPj0gU1ApCQkvKiBEZWNvZGUgbGVuZ3RoICovCisJICAg ICAgbGVuID0geHVuY2hhcihMKTsKKwkgICAgZWxzZSBpZiAoYyA9PSAnQCcpIHsJLyogQWxsb3cg bWlzc2luZyBFT1AgbGVuZ3RoIGZpZWxkICovCisJCWxlbiA9IDA7CisJICAgIH0gZWxzZSB7CisJ CWxlbiA9ICh4dW5jaGFyKCpwKyspICogOTUpOworCQlsZW4gKz0geHVuY2hhcigqcCsrKTsKKwkg ICAgfQorCSAgICBkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBsZW4iLCIiLGxlbik7CisJICAgIG5leHQg PSAqKHArbGVuKTsJCS8qIEdldCBuZXh0IHBhcmFtZXRlciAqLworCSAgICAqKHArbGVuKSA9IE5V TDsJCS8qIFplcm8gaXQgb3V0IHRvIHRlcm1pbmFsIHZhbHVlICovCisJICAgIGRlYnVnKEYxMTAs InNnZXRpbml0IHAiLHAsMCk7CisJICAgIHN3aXRjaCAoYykgewkJLyogRG8gdGhlIHBhcmFtZXRl ciAqLworCSAgICAgIGNhc2UgJ08nOgkJCS8qIEdFVCBPcHRpb25zICovCisJCXZhbCA9IGF0b2ko cCk7CQkvKiBDb252ZXJ0IHRvIGludCAqLworCQlkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBPIHZhbCIs IiIsdmFsKTsKKwkJaWYgKHZhbCAmIEdPUFRfREVMKSBtb3ZpbmcgPSAxOworCQlpZiAodmFsICYg R09QVF9SRVMpIHJlZ2V0ID0gMTsKKwkJaWYgKHZhbCAmIEdPUFRfUkVDKSB7CisJCSAgICByZWN1 cnNpdmUgPSAxOworCQkgICAgbm9saW5rcyA9IDI7CisJCSAgICBpZiAoZm5zcGF0aCA9PSBQQVRI X09GRikKKwkJICAgICAgZm5zcGF0aCA9IFBBVEhfUkVMOworCQl9CisJCWJyZWFrOworCSAgICAg IGNhc2UgJ00nOgkJCS8qIFRyYW5zZmVyIE1vZGUgKi8KKwkJdmFsID0gYXRvaShwKTsKKwkJZGVi dWcoRjEwMSwic2dldGluaXQgTSB2YWwiLCIiLHZhbCk7CisJCWlmICh2YWwgPCAxKQorCQkgIGJy ZWFrOworCQlwYXR0ZXJucyA9IDA7CQkvKiBUYWtlcyBwcmVjZWRlbmNlIG92ZXIgcGF0dGVybnMg Ki8KKwkJZmlsZXBlZWsgPSAwOwkJLyogYW5kIEZJTEUgU0NBTiAqLworCQlpZiAodmFsID09IEdN T0RfVFhUKSBiaW5hcnkgPSBYWUZUX1Q7IC8qIFRleHQgKi8KKwkJaWYgKHZhbCA9PSBHTU9EX0JJ TikgYmluYXJ5ID0gWFlGVF9COyAvKiBCaW5hcnkgKi8KKwkJaWYgKHZhbCA9PSBHTU9EX0xCTCkg YmluYXJ5ID0gWFlGVF9MOyAvKiBMYWJlbGVkICovCisJCWJyZWFrOworCSAgICAgIGNhc2UgJ0Yn OgkJCS8qIEZpbGVuYW1lICovCisJCWZzID0gcDsKKwkJZGVidWcoRjExMCwic2dldGluaXQgZmls ZW5hbWUiLGZzLDApOworCQlicmVhazsKKwkgICAgICBjYXNlICdAJzoJCQkvKiBFbmQgT2YgUGFy YW1ldGVycyAqLworCQlkb25lID0gMTsKKwkJZGVidWcoRjEwMCwic2dldGluaXQgRU9QIiwiIiww KTsKKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoKKwkJZXJycGt0KChDSEFSICopIlVua25vd24g R0VUIFBhcmFtZXRlciIpOworCQlkZWJ1ZyhGMTAwLCJzZ2V0aW5pdCB1bmtub3duIHBhcmFtZXRl ciIsIiIsMCk7CisJCXJldHVybigtMSk7CisJICAgIH0KKwkgICAgcCArPSAobGVuICsgMSk7CisJ ICAgIGMgPSBuZXh0OworCX0KKyAgICB9CisgICAgaWYgKCFmcykgZnMgPSAiIjsJCQkvKiBBIGZp bGVuYW1lIGlzIHJlcXVpcmVkICovCisgICAgaWYgKCpmcykgeworCWhhdmVmcyA9IDE7CisJbiA9 IDA7CQkJCS8qIENoZWNrIGZvciBxdW90ZWQgbmFtZSAqLworCWlmICgobiA9IHN0cmxlbihmcykp ID4gMSkgeworCSAgICAvKiBOb3RlOiB0aGlzIGRvZXMgbm90IGFsbG93IGZvciBtdWx0aXBsZSBx dW90ZWQgbmFtZXMgKi8KKwkgICAgaWYgKChmc1swXSA9PSAneycgJiYgZnNbbi0xXSA9PSAnfScp IHx8CisJCShmc1swXSA9PSAnIicgJiYgZnNbbi0xXSA9PSAnIicpKSB7CisJCWZzW24tMV0gPSAn XDAnOworCQlmcysrOworCQlkZWJ1ZyhGMTExLCJzZ2V0aW5pdCB1bnF1b3RlZCBmaWxlbmFtZSIs ZnMsbik7CisJICAgIH0gZWxzZQorCSAgICAgIG4gPSAwOwkJCS8qIFRoaXMgbWVhbnMgbm8gcXVv dGluZyAqLworCX0KKworI2lmZGVmIFBJUEVTRU5ECisJZGVidWcoRjExMSwic2dldGluaXQiLGZz LHVzZXBpcGVzKTsKKwlpZiAodXNlcGlwZXMgJiYgRU5BQkxFRChlbl9ob3MpICYmICpmcyA9PSAn IScpIHsKKwkgICAgY21hcmcgPSBmcyArIDE7CQkvKiBQb2ludCBwYXN0IHRoZSBiYW5nICovCisJ ICAgICpmcyA9IE5VTDsKKwkgICAgbmZpbHMgPSAtMTsKKwkgICAgcGlwZXNlbmQgPSAxOworCSAg ICBkZWJ1ZyhGMTExLCJzZ2V0aW5pdCBwaXBlc2VuZCIsY21hcmcscGlwZXNlbmQpOworCX0KKwlp ZiAoIXBpcGVzZW5kKSB7CQkvKiBJZiBpdCdzIG5vdCBhIHBpcGUgKi8KKyNlbmRpZiAvKiBQSVBF U0VORCAqLworCSAgICBpZiAobiA9PSAwKSB7CQkvKiBJZiB0aGUgbmFtZSB3YXMgbm90IHF1b3Rl ZCAqLworI2lmbmRlZiBOT01TRU5ECisJCW5maWxzID0gZm5wYXJzZShmcyk7CS8qIEFsbG93IGl0 IHRvIGJlIGEgbGlzdCBvZiBuYW1lcyAqLworCQlkZWJ1ZyhGMTExLCJzZ2V0aW5pdCBBIixmcyxu Zmlscyk7CisjaWZkZWYgQ09NTUVOVAorLyogVGhpcyBkb2Vzbid0IHdvcmsgaWYgYSBHRVQtUEFU SCBpcyBzZXQuICovCisJCWlmIChuZmlscyA9PSAxICYmICFpc3dpbGQoZnMpKSB7IC8qIFNpbmds ZSBmaWxlICovCisJCSAgICBjaGFyICogbTsKKwkJICAgIGlmICgoeCA9IHpjaGtpKGZzKSkgPCAw KSB7IC8qIENoZWNrIGlmIGl0J3Mgc2VuZGFibGUgKi8KKwkJCXN3aXRjaCAoeCkgeworCQkJICBj YXNlIC0xOiBtID0gIkZpbGUgbm90IGZvdW5kIjsgYnJlYWs7CisJCQkgIGNhc2UgLTI6IG0gPSAi Tm90IGEgcmVndWxhciBmaWxlIjsgYnJlYWs7CisJCQkgIGNhc2UgLTM6IG0gPSAiUmVhZCBhY2Nl c3MgZGVuaWVkIjsgYnJlYWs7CisJCQl9CisJCQllcnJwa3QoKENIQVIgKiltKTsKKwkJCXJldHVy bigtMSk7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIH0gZWxzZSB7 CQkJLyogSWYgaXQgd2FzIHF1b3RlZCAqLworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKwkJbnp4b3B0 cyA9IDA7CisjaWZkZWYgVU5JWE9ST1NLCisJCWlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhf TUFUQ0hET1Q7CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisJCWlmIChyZWN1cnNpdmUpIG56eG9w dHMgfD0gWlhfUkVDVVJTRTsKKwkJLyogVHJlYXQgYXMgYSBzaW5nbGUgZmlsZXNwZWMgKi8KKwkJ bmZpbHMgPSAwIC0gbnp4cGFuZChmcyxuenhvcHRzKTsKKwkJZGVidWcoRjExMSwic2dldGluaXQg QiIsZnMsbmZpbHMpOworCQljbWFyZyA9IGZzOworCSAgICB9CisjaWZkZWYgUElQRVNFTkQKKwl9 CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyAgICB9CisgICAgaWYgKCFkb25lKSB7CQkJLyogTmVl ZCBtb3JlIE8gcGFja2V0cy4uLiAqLworCWRlYnVnKEYxMDAsInNnZXRpbml0IE8tUGFja2V0IFRC QyIsIiIsMCk7IC8qIFRvIEJlIENvbnRpbnVlZCAqLworCXJldHVybigxKTsKKyAgICB9CisgICAg ZGVidWcoRjEwMCwic2dldGluaXQgTy1QYWNrZXQgZG9uZSAtIGhhdmVmcyIsIiIsaGF2ZWZzKTsK KyAgICBpZiAoIWhhdmVmcykgewkJCS8qIERvbmUgLSBtYWtlIHN1cmUgd2UgaGF2ZSBmaWxlbmFt ZSAqLworCWVycnBrdCgoQ0hBUiAqKSJHRVQgd2l0aG91dCBmaWxlbmFtZSIpOworCXJldHVybigt MSk7CisgICAgfQorICAgIGZyZWVycGt0KHdpbmxvKTsKKyAgICB3aW5sbyA9IDA7CQkJCS8qIEJh Y2sgdG8gcGFja2V0IDAgYWdhaW4uICovCisgICAgZGVidWcoRjEwMSwic2dldGluaXQgd2lubG8i LCIiLHdpbmxvKTsKKyAgICBuYWtzdGF0ZSA9IDA7CQkJLyogTm93IEknbSB0aGUgc2VuZGVyISAq LworICAgIGlmIChyZWdldCkgc2VuZG1vZGUgPSBTTV9SRVNFTkQ7CisgICAgaWYgKHNpbml0KCkg PiAwKSB7CQkJLyogU2VuZCBTZW5kLUluaXQgKi8KKyNpZmRlZiBTVFJFQU1JTkcKKwlpZiAoIXN0 cmVhbWluZykKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgIHRpbWludCA9IGNoa3RpbW8ocnRp bW8sdGltZWYpOyAvKiBTd2l0Y2ggdG8gcGVyLXBhY2tldCB0aW1lciAqLworCXJldHVybigwKTsJ CQkvKiBJZiBzdWNjZXNzZnVsLCBzd2l0Y2ggc3RhdGUgKi8KKyAgICB9IGVsc2UgcmV0dXJuKC0x KTsJCQkvKiBFbHNlIGJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworfQorCisjZWxzZSAg LyogTk9YRkVSICovCisKKyNpbmNsdWRlICJja2NkZWIuaCIKKworVk9JRAorcHJvdG8oKSB7Cisg ICAgZXh0ZXJuIGludCBzdWNjZXNzOworICAgIHN1Y2Nlc3MgPSAwOworfQorI2VuZGlmIC8qIE5P WEZFUiAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2tjcHJvLncgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3By by53Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjVmNDgKLS0tIC9kZXYv bnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3Byby53 CkBAIC0wLDAgKzEsMzYzMyBAQAorY2hhciAqcHJvdHYgPSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLSotQy0qLSAqLworIkMtS2VybWl0IFBy b3RvY29sIE1vZHVsZSA5LjAuMTYwLCAxNiBPY3QgMjAwOSI7CisKK2ludCBrYWN0aXZlID0gMDsJ CQkvKiBLZXJtaXQgcHJvdG9jb2wgaXMgYWN0aXZlICovCisKKyNkZWZpbmUgUEtUWkVST0hBQ0sK KworLyogQyBLIEMgUCBSIE8gIC0tIEMtS2VybWl0IFByb3RvY29sIE1vZHVsZSwgaW4gV2FydCBw cmVwcm9jZXNzb3Igbm90YXRpb24uICovCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZk Y0Bjb2x1bWJpYS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0 aW9uIFN5c3RlbXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5 LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3 IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlO Ry5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9k dWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisjaWZuZGVmIE5PWEZFUgor I2luY2x1ZGUgImNrY3N5bS5oIgorI2luY2x1ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgImNrY2Fz Yy5oIgorI2luY2x1ZGUgImNrY2tlci5oIgorI2lmZGVmIE9TMgorI2lmbmRlZiBOVAorI2RlZmlu ZSBJTkNMX05PUE0KKyNkZWZpbmUgSU5DTF9WSU8JCQkvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICov CisjaW5jbHVkZSA8b3MyLmg+CisjdW5kZWYgQ09NTUVOVAorI2VuZGlmIC8qIE5UICovCisjaW5j bHVkZSAiY2tvY29uLmgiCisjZW5kaWYgLyogT1MyICovCisKKy8qCisgTm90ZSAtLSBUaGlzIGZp bGUgbWF5IGFsc28gYmUgcHJlcHJvY2Vzc2VkIGJ5IHRoZSBVTklYIExleCBwcm9ncmFtLCBidXQK KyB5b3UgbXVzdCBpbmRlbnQgdGhlIGFib3ZlICNpbmNsdWRlIHN0YXRlbWVudHMgYmVmb3JlIHVz aW5nIExleCwgYW5kIHRoZW4KKyByZXN0b3JlIHRoZW0gdG8gdGhlIGxlZnQgbWFyZ2luIGluIHRo ZSByZXN1bHRpbmcgQyBwcm9ncmFtIGJlZm9yZSBjb21waWxhdGlvbi4KKyBBbHNvLCB0aGUgaW52 b2NhdGlvbiBvZiB0aGUgIndhcnQoKSIgZnVuY3Rpb24gYmVsb3cgbXVzdCBiZSByZXBsYWNlZCBi eSBhbgorIGludm9jYXRpb24gIG9mIHRoZSAieXlsZXgoKSIgZnVuY3Rpb24uICBJdCBtaWdodCBh bHNvIGJlIG5lY2Vzc2FyeSB0byByZW1vdmUKKyBjb21tZW50cyBpbiB0aGUgKCUpKCUpLi4uKCUp KCUpIHNlY3Rpb24uCisqLworCisvKiBTdGF0ZSBkZWZpbml0aW9ucyBmb3IgV2FydCAob3IgTGV4 KSAqLworJXN0YXRlcyBpcGt0IHJmaWxlIHJhdHRyIHJkcGt0IHNzaW5pdCBzc2ZpbGUgc3NhdHRy IHNzZGF0YSBzc2VvZiBzc2VvdAorJXN0YXRlcyBzZXJ2ZSBnZW5lcmljIGdldCByZ2VuIHNzb3Br dCByb3BrdAorCitfUFJPVE9UWVAoc3RhdGljIFZPSUQgeHhwcm90bywodm9pZCkpOworX1BST1RP VFlQKHN0YXRpYyBWT0lEIHdoZXJlbXNnLCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IHdhcnQsKHZv aWQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IHNnZXRpbml0LChpbnQsaW50KSk7CitfUFJPVE9U WVAoaW50IHNuZHNwYWNlLChpbnQpKTsKKworLyogRXh0ZXJuYWwgQy1LZXJtaXQgdmFyaWFibGUg ZGVjbGFyYXRpb25zICovCisgIGV4dGVybiBjaGFyICp2ZXJzaW8sICpzcnZ0eHQsICpjbWFyZywg KmNtYXJnMiwgKipjbWxpc3QsICpyZl9lcnI7CisgIGV4dGVybiBjaGFyICogcmZzcGVjLCAqIHNm c3BlYywgKiBzcmZzcGVjLCAqIHJyZnNwZWM7CisgIGV4dGVybiBjaGFyICogcHJmc3BlYywgKiBw c2ZzcGVjLCAqIHBzcmZzcGVjLCAqIHBycmZzcGVjOworICBleHRlcm4gY2hhciAqY2Rtc2dmaWxl W107CisgIGV4dGVybiBjaGFyICogc25kX21vdmUsICogc25kX3JlbmFtZSwgKiBzcmltc2c7Cisg IGV4dGVybiBjaGFyIGZpbG5hbVtdLCBvZmlsbmFtW10sIGZzcGVjW10sIHR0bmFtZVtdLCBvZm4x W107CisgIGV4dGVybiBDSEFSIHNzdGF0ZSwgKnNydnB0ciwgKmRhdGE7CisgIGV4dGVybiBpbnQg dGltaW50LCBydGltbywgbmZpbHMsIGhjZmxnLCB4ZmxnLCBmbG93LCBtZG10eXAsIG5ldHdvcms7 CisgIGV4dGVybiBpbnQgb29wdHMsIG9tb2RlLCBvbmFtZSwgb3BhdGgsIG5vcHVzaCwgaXNndWVz dCwgeGNtZHNyYywgcmNkYWN0aXZlOworICBleHRlcm4gaW50IHJlamVjdGlvbiwgbW92aW5nLCBm bmNhY3QsIGJ5ZV9hY3RpdmUsIHVyc2VydmVyLCBmYXRhbGlvOworICBleHRlcm4gaW50IHByb3Rv Y29sLCBwcmVmaXhpbmcsIGZpbGNudCwgY2FycmllciwgZm5zcGF0aCwgaW50ZXJydXB0ZWQ7Cisg IGV4dGVybiBpbnQgcmVjdXJzaXZlLCBpbnNlcnZlciwgbnp4b3B0cywgaWRsZXRtbywgc3J2aWRs LCB4ZnJpbnQ7CisgIGV4dGVybiBzdHJ1Y3QgY2tfcCBwdGFiW107CisgIGV4dGVybiBpbnQgcmVt ZmlsZSwgcmVtcGlwZSwgeGZlcnN0YXQsIGZpbGVzdGF0dXMsIHdlYXJlYWxpa2UsIGZhY2twYXRo OworICBleHRlcm4gaW50IHBhdHRlcm5zLCBmaWxlcGVlaywgZ25mZXJyb3I7CisgIGV4dGVybiBj aGFyICogcmVtZGVzdDsKKworI2lmZGVmIFBLVFpFUk9IQUNLCisjZGVmaW5lIFBLVFpFUk9MRU4g MzIKK3N0YXRpYyBjaGFyIGlwa3RhY2tbUEtUWkVST0xFTl07CitzdGF0aWMgaW50IGlwa3RsZW4g PSAwOworI2VuZGlmIC8qIFBLVFpFUk9IQUNLICovCisKK3N0YXRpYyBpbnQgc190aW1pbnQgPSAt MTsJCS8qIEZvciBzYXZpbmcgdGltZW91dCB2YWx1ZSAqLworc3RhdGljIGludCBteWpvYiA9IDA7 CitzdGF0aWMgaW50IGhhdmVmcyA9IDA7CisjaWZkZWYgQ0tfTE9HSU4KK3N0YXRpYyBpbnQgbG9n dHJpZXMgPSAwOworI2VuZGlmIC8qIENLX0xPR0lOICovCisKK3N0YXRpYyBpbnQgY2FuY2VsID0g MDsKK2ludCBmYWNrYnVnID0gMDsKKworI2lmZGVmIFNUUkVBTUlORworZXh0ZXJuIGludCBzdHJl YW1pbmcsIHN0cmVhbW9rOworCitzdGF0aWMgVk9JRAorc3RyZWFtb24oKSB7CisgICAgaWYgKHN0 cmVhbW9rKSB7CisJZGVidWcoRjEwMCwic3RyZWFtb24iLCIiLDApOworCXN0cmVhbWluZyA9IDE7 CisJdGltaW50ID0gMDsJCQkvKiBObyB0aW1lb3V0cyB3aGlsZSBzdHJlYW1pbmcuICovCisgICAg fQorfQorCisjaWZkZWYgQ09NTUVOVAkJCQkvKiAobm90IHVzZWQpICovCitzdGF0aWMgVk9JRAor c3RyZWFtb2ZmKCkgeworICAgIGlmIChzdHJlYW1pbmcpIHsKKwlkZWJ1ZyhGMTAwLCJzdHJlYW1v ZmYiLCIiLDApOworCXN0cmVhbWluZyA9IDA7CisJdGltaW50ID0gc190aW1pbnQ7CQkvKiBSZXN0 b3JlIHRpbWVvdXQgKi8KKyAgICB9Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2Vsc2UgLyog U1RSRUFNSU5HICovCisjZGVmaW5lIHN0cmVhbW9uKCkKKyNkZWZpbmUgc3RyZWFtb2ZmKCkKKyNl bmRpZiAvKiBTVFJFQU1JTkcgKi8KKworI2lmbmRlZiBOT1NQTAorX1BST1RPVFlQKCBpbnQgYWRk bWFjLCAoY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9UWVAoIGludCB6enN0cmluZywgKGNoYXIg KiwgY2hhciAqKiwgaW50ICopICk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9JQ1AK K19QUk9UT1RZUCggaW50IGNtZHNyYywgKHZvaWQpICk7CisjZW5kaWYgLyogTk9JQ1AgKi8KKwor I2lmbmRlZiBOT1NFUlZFUgorICBleHRlcm4gY2hhciAqIHhfdXNlciwgKiB4X3Bhc3N3ZCwgKiB4 X2FjY3Q7CisgIGV4dGVybiBpbnQgeF9sb2dpbiwgeF9sb2dnZWQ7CisjZW5kaWYgLyogTk9TRVJW RVIgKi8KKworI2luY2x1ZGUgImNrY25ldC5oIgorCisjaWZkZWYgVE5DT0RFCisgIGV4dGVybiBp bnQgdHRucHJvdG87CQkJLyogTmV0d29yayBwcm90b2NvbCAqLworI2VuZGlmIC8qIFROQ09ERSAq LworCisjaWZkZWYgQ0tfU1BFRUQKKyAgZXh0ZXJuIHNob3J0IGN0bHBbXTsJCQkvKiBDb250cm9s LWNoYXJhY3RlciBwcmVmaXggdGFibGUgKi8KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisjaWZk ZWYgVE5DT0RFCisgIGV4dGVybiBpbnQgdG5fYl9ubG0sIHRuX2JfeGZlciwgdG5fbmxtOworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgZXh0ZXJuIGludCB0bl9ub19lbmNyeXB0X3hmZXI7CisjZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYgVENQ U09DS0VUCisjaWZuZGVmIE5PTElTVEVOCisgIGV4dGVybiBpbnQgdGNwc3JmZDsKKyNlbmRpZiAv KiBOT0xJU1RFTiAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisgIGV4dGVybiBpbnQgY3hz ZWVuLCBjenNlZW4sIHNlcnZlciwgc3J2ZGlzLCBsb2NhbCwgZGlzcGxhLCBiY3R1LCBiY3RyLCBi Y3RsOworICBleHRlcm4gaW50IGJjdGY7CisgIGV4dGVybiBpbnQgcXVpZXQsIHRzZWNzLCBwYXJp dHksIGJhY2tncmQsIG5ha3N0YXRlLCBhdGNhcHUsIHdzbG90biwgd2lubG87CisgIGV4dGVybiBp bnQgd3Nsb3RzLCBzdWNjZXNzLCB4aXRzdGEsIHJwcmludGYsIGRpc2NhcmQsIGNkdGltbywga2Vl cCwgZmRpc3BsYTsKKyAgZXh0ZXJuIGludCB0aW1lZiwgc3RkaW5mLCByc2NhcHUsIHNlbmRtb2Rl LCBlcGt0ZmxnLCBlcGt0cmN2ZCwgZXBrdHNlbnQ7CisgIGV4dGVybiBpbnQgYmluYXJ5LCBmbmNu djsKKyAgZXh0ZXJuIGxvbmcgc3BlZWQsIGZmYywgY3JjMTYsIGNhbGlicmF0ZSwgZGVzdDsKKyNp ZmRlZiBDT01NRU5UCisgIGV4dGVybiBjaGFyICpUWVBDTUQsICpESVJDTUQsICpESVJDTTI7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworI2lmbmRlZiBPUzIKKyAgZXh0ZXJuIGNoYXIgKlNQQUNNRCwg KlNQQUNNMiwgKldIT0NNRDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgZXh0ZXJuIENIQVIgKnJkYXRh cDsKKyAgZXh0ZXJuIHN0cnVjdCB6YXR0ciBpYXR0cjsKKworI2lmZGVmIFZNUworICBleHRlcm4g aW50IGJhdGNoOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgR0ZUSU1FUgorICBleHRlcm4g Q0tGTE9BVCBmcHRzZWNzOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworICBleHRlcm4gQ0hBUiAq c3J2Y21kOworICBleHRlcm4gQ0hBUiAqZXBrdG1zZzsKKworI2lmZGVmIENLX1RNUERJUgorZXh0 ZXJuIGludCBmX3RtcGRpcjsJCQkvKiBEaXJlY3RvcnkgY2hhbmdlZCB0ZW1wb3JhcmlseSAqLwor ZXh0ZXJuIGNoYXIgc2F2ZGlyW107CQkJLyogRm9yIHNhdmluZyBjdXJyZW50IGRpcmVjdG9yeSAq LworZXh0ZXJuIGNoYXIgKiBkbGRpcjsKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworICBleHRl cm4gaW50IHF1ZXJ5OwkJCS8qIFF1ZXJ5LWFjdGl2ZSBmbGFnICovCisjaWZuZGVmIE5PU1BMCisg IGV4dGVybiBpbnQgY21kbHZsOworICBjaGFyIHF1ZXJ5YnVmW1FCVUZMKzFdID0geyBOVUwsIE5V TCB9OyAvKiBRVUVSWSByZXNwb25zZSBidWZmZXIgKi8KKyAgY2hhciAqcWJ1ZnAgPSBxdWVyeWJ1 ZjsJCS8qIFBvaW50ZXIgdG8gaXQgKi8KKyAgaW50IHFidWZuID0gMDsJCQkvKiBMZW5ndGggb2Yg ZGF0YSBpbiBpdCAqLworI2Vsc2UKKyAgZXh0ZXJuIGludCB0bGV2ZWw7CisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmbmRlZiBOT0lDUAorICBleHRlcm4gaW50IGVzY2FwZTsKKyNlbmRpZiAvKiBO T0lDUCAqLworLyoKKyAgSWYgdGhlIGZvbGxvd2luZyBmbGFnIGlzIG5vbnplcm8gd2hlbiB0aGUg cHJvdG9jb2wgbW9kdWxlIGlzIGVudGVyZWQsCisgIHRoZW4gc2VydmVyIG1vZGUgcGVyc2lzdHMg Zm9yIGV4YWN0bHkgb25lIHRyYW5zYWN0aW9uLCByYXRoZXIgdGhhbgorICBsb29waW5nIHVudGls IEJZRSBvciBGSU5JU0ggaXMgcmVjZWl2ZWQuCisqLworZXh0ZXJuIGludCBqdXN0b25lOworCitz dGF0aWMgaW50IHJfc2F2ZSA9IC0xOworc3RhdGljIGludCBwX3NhdmUgPSAtMTsKKworLyogRnVu Y3Rpb24gdG8gbGV0IHJlbW90ZS1tb2RlIHVzZXIga25vdyB3aGVyZSB0aGVpciBmaWxlKHMpIHdl bnQgKi8KKworaW50IHdoZXJlZmxnID0gMTsJCQkvKiBVbnNldCB3aXRoIFNFVCBYRkVSIFJFUE9S VCAqLworCitzdGF0aWMgVk9JRAord2hlcmVtc2coKSB7CisgICAgZXh0ZXJuIGludCBxdWlldCwg ZmlscmVqOworICAgIGludCBuOworICAgIG4gPSBmaWxjbnQgLSBmaWxyZWo7CisgICAgZGVidWco RjEwMSwid2hlcmVtc2cgbiIsIiIsbik7CisKKyAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBwcmZz cGVjIixwcmZzcGVjLDApOworICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHJmc3BlYyIscmZzcGVj LDApOworICAgIGRlYnVnKEYxMTAsIndoZXJlbXNnIHBzZnNwZWMiLHBzZnNwZWMsMCk7CisgICAg ZGVidWcoRjExMCwid2hlcmVtc2cgc2ZzcGVjIixzZnNwZWMsMCk7CisKKyAgICBkZWJ1ZyhGMTEw LCJ3aGVyZW1zZyBwcnJmc3BlYyIscHJyZnNwZWMsMCk7CisgICAgZGVidWcoRjExMCwid2hlcmVt c2cgcnJmc3BlYyIscnJmc3BlYywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ3aGVyZW1zZyBwc3Jmc3Bl YyIscHNyZnNwZWMsMCk7CisgICAgZGVidWcoRjExMCwid2hlcmVtc2cgc3Jmc3BlYyIsc3Jmc3Bl YywwKTsKKworICAgIGlmICghcXVpZXQgJiYgIWxvY2FsKSB7CisJaWYgKG4gPT0gMSkgeworCSAg ICBzd2l0Y2ggKG15am9iKSB7CisJICAgICAgY2FzZSAncyc6CisJCWlmIChzZnNwZWMpIHsKKwkJ ICAgIHByaW50ZigiIFNFTlQ6IFslc10iLHNmc3BlYyk7CisJCSAgICBpZiAoc3Jmc3BlYykKKwkJ ICAgICAgcHJpbnRmKCIgVG86IFslc10iLHNyZnNwZWMpOworCQkgICAgcHJpbnRmKCIgKCVzKVxy XG4iLCBzdWNjZXNzID8gIk9LIiA6ICJGQUlMRUQiKTsKKwkJfQorCQlicmVhazsKKwkgICAgICBj YXNlICdyJzoKKwkgICAgICBjYXNlICd2JzoKKwkJaWYgKHJyZnNwZWMpIHsKKwkJICAgIHByaW50 ZigiIFJDVkQ6IFslc10iLHJyZnNwZWMpOworCQkgICAgaWYgKHJmc3BlYykKKwkJICAgICAgcHJp bnRmKCIgVG86IFslc10iLHJmc3BlYyk7CisJCSAgICBwcmludGYoIiAoJXMpXHJcbiIsIHN1Y2Nl c3MgPyAiT0siIDogIkZBSUxFRCIpOworCQl9CisJICAgIH0KKwl9IGVsc2UgaWYgKG4gPiAxKSB7 CisJICAgIHN3aXRjaCAobXlqb2IpIHsKKwkgICAgICBjYXNlICdzJzoKKwkJaWYgKHNmc3BlYykg eworCQkgICAgcHJpbnRmKCIgU0VOVDogKCVkIGZpbGVzKSIsbik7CisJCSAgICBpZiAoc3Jmc3Bl YykKKwkJICAgICAgcHJpbnRmKCIgTGFzdDogWyVzXSIsc3Jmc3BlYyk7CisJCSAgICBwcmludGYo IiAoJXMpXHJcbiIsIHN1Y2Nlc3MgPyAiT0siIDogIkZBSUxFRCIpOworCQl9CisJCWJyZWFrOwor CSAgICAgIGNhc2UgJ3InOgorCSAgICAgIGNhc2UgJ3YnOgorCQlpZiAocnJmc3BlYykgeworCQkg ICAgcHJpbnRmKCIgUkNWRDogKCVkIGZpbGVzKSIsbik7CisJCSAgICBpZiAocmZzcGVjKQorCQkg ICAgICBwcmludGYoIiBMYXN0OiBbJXNdIixyZnNwZWMpOworCQkgICAgcHJpbnRmKCIgKCVzKVxy XG4iLCBzdWNjZXNzID8gIk9LIiA6ICJGQUlMRUQiKTsKKwkJfQorCSAgICB9CisJfSBlbHNlIGlm IChuID09IDApIHsKKwkgICAgaWYgKG15am9iID09ICdzJykKKwkgICAgICBwcmludGYoIiBTRU5U OiAoMCBmaWxlcykgICAgICAgICAgXHJcbiIpOworCSAgICBlbHNlIGlmIChteWpvYiA9PSAncicg fHwgbXlqb2IgPT0gJ3YnKQorCSAgICAgIHByaW50ZigiIFJDVkQ6ICgwIGZpbGVzKSAgICAgICAg ICBcclxuIik7CisJfQorICAgIH0KK30KKworc3RhdGljIFZPSUQKK3JkZWJ1ZygpIHsKKyAgICBp ZiAoc2VydmVyKQorICAgICAgZGVidWcoRjExMSwiUkVTVU1FIiwic2VydmVyPTEiLGp1c3RvbmUp OworICAgIGVsc2UKKyAgICAgIGRlYnVnKEYxMTEsIlJFU1VNRSIsInNlcnZlcj0wIixqdXN0b25l KTsKK30KKworLyogRmxhZ3MgZm9yIHRoZSBFTkFCTEUgYW5kIERJU0FCTEUgY29tbWFuZHMgKi8K K2V4dGVybiBpbnQKKyAgZW5fY3B5LCBlbl9jd2QsIGVuX2RlbCwgZW5fZGlyLCBlbl9maW4sIGVu X2dldCwgZW5fYnllLCBlbl9tYWksIGVuX3ByaSwKKyAgZW5faG9zLCBlbl9yZW4sIGVuX3Nlbiwg ZW5fc3BhLCBlbl9zZXQsIGVuX3R5cCwgZW5fd2hvLCBlbl9yZXQsIGVuX3hpdCwKKyAgZW5fbWtk LCBlbl9ybWQ7CisjaWZuZGVmIE5PU1BMCitleHRlcm4gaW50IGVuX2FzZywgZW5fcXVlOworI2Vu ZGlmIC8qIE5PU1BMICovCitleHRlcm4gaW50IHdoYXQsIGxhc3R4ZmVyOworCisvKiBHbG9iYWwg dmFyaWFibGVzIGRlY2xhcmVkIGhlcmUgKi8KKworICBpbnQgd2hhdHJ1ID0gMDsJCQkvKiBXaGF0 IGFyZSB5b3UuICovCisgIGludCB3aGF0cnUyID0gMDsJCQkvKiBXaGF0IGFyZSB5b3UsIGNvbnQn ZC4gKi8KKworLyogTG9jYWwgdmFyaWFibGVzICovCisKKyAgc3RhdGljIGNoYXIgdnN0YXRlID0g MDsgIAkJLyogU2F2ZWQgU3RhdGUgICAqLworICBzdGF0aWMgY2hhciB2Y21kID0gMDsgICAgCQkv KiBTYXZlZCBDb21tYW5kICovCisgIHN0YXRpYyBpbnQgcmVnZXQgPSAwOwkJCS8qIEZsYWcgZm9y IGV4ZWN1dGluZyBSRUdFVCAqLworICBzdGF0aWMgaW50IHJldHJpZXZlID0gMDsJCS8qIEZsYWcg Zm9yIGV4ZWN1dGluZyBSRVRSSUVWRSAqLworICBzdGF0aWMgaW50IG9wa3QgPSAwOwkJCS8qIFNl bmQgRXh0ZW5kZWQgR0VUIHBhY2tldCAqLworCisgIHN0YXRpYyBpbnQgeDsJCQkJLyogR2VuZXJh bC1wdXJwb3NlIGludGVnZXIgKi8KKyAgc3RhdGljIGNoYXIgKnM7CQkJLyogR2VuZXJhbC1wdXJw b3NlIHN0cmluZyBwb2ludGVyICovCisKKy8qIE1hY3JvcyAtIE5vdGUsIEJFR0lOIGlzIHByZWRl ZmluZWQgYnkgV2FydCAoYW5kIExleCkgYXMgInN0YXRlID0gIiwgKi8KKy8qIEJFR0lOIGlzIE5P VCBhIEdPVE8hICovCisjZGVmaW5lIFRJTklUIGlmICh0aW5pdCgxKSA8IDApIHJldHVybigtOSkK KyNkZWZpbmUgU0VSVkUgeyBUSU5JVDsgcmVzZXRjKCk7IG5ha3N0YXRlPTE7IHdoYXQ9V19OT1RI SU5HOyBjbWFyZzI9IiI7IFwKK3NlbmRtb2RlPVNNX1NFTkQ7IGhhdmVmcz0wOyByZWN1cnNpdmU9 cl9zYXZlOyBmbnNwYXRoPXBfc2F2ZTsgQkVHSU4gc2VydmU7IH0KKyNkZWZpbmUgUkVTVU1FIHsg cmRlYnVnKCk7IGlmICghc2VydmVyKSB7IHdoZXJlbXNnKCk7IHJldHVybigwKTsgfSBlbHNlIFwK K2lmIChqdXN0b25lKSB7IGp1c3RvbmU9MDsgd2hlcmVtc2coKTsgcmV0dXJuKDApOyB9IGVsc2Ug eyBTRVJWRTsgfSB9CisKKyNpZmRlZiBHRlRJTUVSCisjZGVmaW5lIFFVSVQgeD1xdWlldDsgcXVp ZXQ9MTsgY2xzaWYoKTsgY2xzb2YoMSk7IHRzZWNzPWd0aW1lcigpOyBcCisgZnB0c2Vjcz1nZnRp bWVyKCk7IHF1aWV0PXg7IHJldHVybihzdWNjZXNzKQorI2Vsc2UKKyNkZWZpbmUgUVVJVCB4PXF1 aWV0OyBxdWlldD0xOyBjbHNpZigpOyBjbHNvZigxKTsgdHNlY3M9Z3RpbWVyKCk7IHF1aWV0PXg7 IFwKKyByZXR1cm4oc3VjY2VzcykKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKKy8qCisgIEJ5IGxh dGUgMTk5OSwgdGhlIGJpZyBzd2l0Y2goKSBzdGF0ZW1lbnQgZ2VuZXJhdGVkIGZyb20gdGhlIGZv bGxvd2luZyBzdGF0ZQorICB0YWJsZSBiZWdhbiBjaG9raW5nIGV2ZW4gZ2NjLCBzbyBoZXJlIHdl IGV4dHJhY3QgdGhlIGNvZGUgZnJvbSB0aGUgbGFyZ2VyCisgIHN0YXRlcyBpbnRvIHN0YXRpYyBy b3V0aW5lcyB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGNhc2VzIGFuZCB0aGUKKyAgc3dpdGNo KCkgb3ZlcmFsbC4gIFRoZSByb3V0aW5lcyBmb2xsb3cgdGhlIHN0YXRlIHRhYmxlOyB0aGUgcHJv dG90eXBlcyBhcmUKKyAgaGVyZS4gIEVhY2ggb2YgdGhlc2Ugcm91dGluZXMgc2ltcGx5IGNvbnRh aW5zIHRoZSB0ZXh0IGZyb20gdGhlCisgIGNvcnJlc3BvbmRpbmcgY2FzZSwgYnV0IHdpdGggcmV0 dXJuKC0xKSBhZGRlZCBpbiBhcHByb3ByaWF0ZSBwbGFjZXM7IHNlZQorICBpbnN0cnVjdGlvbnMg YWZ0ZXIgdGhlIHN0YXRlIHRhYmxlIHN3aXRjaGVyLgorKi8KK3N0YXRpYyBpbnQgcmM7CQkJCS8q IFJldHVybiBjb2RlIGZvciB0aGVzZSByb3V0aW5lcyAqLworc3RhdGljIGludCByY3Zfc19wa3Qo KTsJCQkvKiBSZWNlaXZlZCBhbiBTIHBhY2tldCAqLworc3RhdGljIGludCByY3ZfZmlyc3RkYXRh KCk7CQkvKiBSZWNlaXZlZCBmaXJzdCBEYXRhIHBhY2tldCAqLworc3RhdGljIGludCByY3Zfc2hv cnRyZXBseSgpOwkJLyogU2hvcnQgcmVwbHkgdG8gYSBSRU1PVEUgY29tbWFuZCAgKi8KK3N0YXRp YyBpbnQgc3J2X3F1ZXJ5KCk7CQkJLyogU2VydmVyIGFuc3dlcnMgYW4gcXVlcnkgKi8KK3N0YXRp YyBpbnQgc3J2X2NvcHkoKTsJCQkvKiBTZXJ2ZXIgZXhlY3V0ZXMgUkVNT1RFIENPUFkgKi8KK3N0 YXRpYyBpbnQgc3J2X3JlbmFtZSgpOwkJLyogU2VydmVyIGV4ZWN1dGVzIFJFTU9URSBSRU5BTUUg Ki8KK3N0YXRpYyBpbnQgc3J2X2xvZ2luKCk7CQkJLyogU2VydmVyIGV4ZWN1dGVzIFJFTU9URSBM T0dJTiAqLworc3RhdGljIGludCBzcnZfdGltZW91dCgpOwkJLyogU2VydmVyIHRpbWVzIG91dCAq LworCislJQorCisvKgorICBQcm90b2NvbCBlbnRyeSBwb2ludHMsIG9uZSBmb3IgZWFjaCBzdGFy dCBzdGF0ZSAoc3N0YXRlKS4KKyAgVGhlIGxvd2VyY2FzZSBsZXR0ZXJzIGFyZSBpbnRlcm5hbCAi aW5wdXRzIiBmcm9tIHRoZSB1c2VyIGludGVyZmFjZS4KKyAgTk9URTogVGhlIHN0YXJ0IHN0YXRl IGxldHRlcnMgdGhhdCBhcHBlYXIgb24gdGhlIGxlZnQgbWFyZ2luIGltbWVkaWF0ZWx5CisgIGJl bG93IGNhbiBOT1QgYmUgdXNlZCBhcyBwYWNrZXQgdHlwZXMgT1IgYXMgRy1wYWNrZXQgc3ViY29k ZXMuCisqLworCitzIHsgVElOSVQ7CQkJCS8qIFNlbmQgZmlsZShzKSAqLworICAgIGlmIChzaW5p dCgpID4gMCkgQkVHSU4gc3Npbml0OworICAgICAgIGVsc2UgUkVTVU1FOyB9CisKK3YgeyBUSU5J VDsgbmFrc3RhdGUgPSAxOyBCRUdJTiBnZXQ7IH0JLyogUmVjZWl2ZSBmaWxlKHMpICovCisKK3Ig ewkJCQkJLyogQ2xpZW50IHNlbmRzIGEgR0VUIGNvbW1hbmQgKi8KKyAgICBUSU5JVDsKKyAgICB2 c3RhdGUgPSBnZXQ7CisgICAgcmVnZXQgPSAwOworICAgIHJldHJpZXZlID0gMDsKKyAgICBvcGt0 ID0gMDsKKyAgICB2Y21kID0gMDsKKyNpZmRlZiBQS1RaRVJPSEFDSworICAgIGlwa3RhY2tbMF0g PSBOVUw7CisjZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KKyAgICBpZiAoc2lwa3QoJ0knKSA+PSAw KQorICAgICAgQkVHSU4gaXBrdDsKKyAgICBlbHNlCisgICAgICBSRVNVTUU7Cit9CisKK2ggewkJ CQkJLyogQ2xpZW50IHNlbmRzIGEgUkVUUklFVkUgY29tbWFuZCAqLworICAgIFRJTklUOworICAg IHZzdGF0ZSA9IGdldDsKKyAgICByZWdldCA9IDA7CisgICAgcmV0cmlldmUgPSAxOworICAgIG9w a3QgPSAwOworICAgIHZjbWQgPSAwOworICAgIGlmIChzaXBrdCgnSScpID49IDApCisgICAgICBC RUdJTiBpcGt0OworICAgIGVsc2UKKyAgICAgIFJFU1VNRTsKK30KK2ogewkJCQkJLyogQ2xpZW50 IHNlbmRzIGEgUkVHRVQgY29tbWFuZCAqLworICAgIFRJTklUOworICAgIHZzdGF0ZSA9IGdldDsK KyAgICByZWdldCA9IDE7CisgICAgcmV0cmlldmUgPSAwOworICAgIG9wa3QgPSAwOworICAgIHZj bWQgPSAwOworICAgIGlmIChzaXBrdCgnSScpID49IDApCisgICAgICBCRUdJTiBpcGt0OworICAg IGVsc2UKKyAgICAgIFJFU1VNRTsKK30KK28gewkJCQkJLyogQ2xpZW50IHNlbmRzIEV4dGVuZGVk IEdFVCBQYWNrZXQgKi8KKyAgICBUSU5JVDsKKyAgICB2c3RhdGUgPSBnZXQ7CisgICAgcmVnZXQg PSBvb3B0cyAmIEdPUFRfUkVTOworICAgIHJldHJpZXZlID0gb29wdHMgJiBHT1BUX0RFTDsKKyAg ICBvcGt0ID0gMTsKKyAgICB2Y21kID0gMDsKKyAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQorICAg ICAgQkVHSU4gaXBrdDsKKyAgICBlbHNlCisgICAgICBSRVNVTUU7Cit9CitjIHsJCQkJCS8qIENs aWVudCBzZW5kcyBhIEhvc3QgY29tbWFuZCAqLworICAgIFRJTklUOworICAgIHZzdGF0ZSA9IHJn ZW47CisgICAgdmNtZCA9ICdDJzsKKyAgICBpZiAoc2lwa3QoJ0knKSA+PSAwKQorICAgICAgQkVH SU4gaXBrdDsKKyAgICBlbHNlCisgICAgICBSRVNVTUU7Cit9CitrIHsgVElOSVQ7CQkJCS8qIENs aWVudCBzZW5kcyBhIEtlcm1pdCBjb21tYW5kICovCisgICAgdnN0YXRlID0gcmdlbjsKKyAgICB2 Y21kID0gJ0snOworICAgIGlmIChzaXBrdCgnSScpID49IDApCisgICAgICBCRUdJTiBpcGt0Owor ICAgIGVsc2UKKyAgICAgIFJFU1VNRTsKK30KK2cgewkJCQkJLyogQ2xpZW50IHNlbmRzIGEgUkVN T1RFIGNvbW1hbmQgKi8KKyAgICBUSU5JVDsKKyAgICB2c3RhdGUgPSByZ2VuOworICAgIHZjbWQg PSAnRyc7CisgICAgaWYgKHNpcGt0KCdJJykgPj0gMCkKKyAgICAgIEJFR0lOIGlwa3Q7CisgICAg ZWxzZQorICAgICAgUkVTVU1FOworfQoreCB7CQkJCQkvKiBFbnRlciBzZXJ2ZXIgbW9kZSAqLwor ICAgIGludCB4OworICAgIHggPSBqdXN0b25lOworICAgIGlmICghRU5BQkxFRChlbl9kZWwpKSB7 CQkvKiBJZiBERUxFVEUgaXMgZGlzYWJsZWQgKi8KKwlpZiAoZm5jYWN0ID09IFhZRlhfQiB8fAkJ LyogdW5kbyBhbnkgZmlsZSBjb2xsaXNpb24gYWN0aW9uICovCisJICAgIGZuY2FjdCA9PSBYWUZY X1UgfHwJCS8qIHRoYXQgY291bGQgcmVzdWx0IGluIGRlbGV0aW9uIG9yICovCisJICAgIGZuY2Fj dCA9PSBYWUZYX0EgfHwJCS8qIG1vZGlmaWNhdGlvbiBvZiBleGlzdGluZyBmaWxlcy4gKi8KKwkg ICAgZm5jYWN0ID09IFhZRlhfWCkgeworI2lmbmRlZiBOT0lDUAorCSAgICBleHRlcm4gaW50IGdf Zm5jYWN0OworCSAgICBnX2ZuY2FjdCA9IGZuY2FjdDsJCS8qIFNhdmUgY3VycmVudCBzZXR0aW5n ICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKwkgICAgZm5jYWN0ID0gWFlGWF9SOwkJLyogQ2hhbmdl IHRvIFJFTkFNRSAqLworCSAgICBkZWJ1ZyhGMTAxLCJzZXJ2ZXIgREVMRVRFIGRpc2FibGVkIHNv IGZuY2FjdCBSRU5BTUUiLCIiLGZuY2FjdCk7CisJfQorICAgIH0KKyAgICBTRVJWRTsJCQkJLyog dGluaXQoKSBjbGVhcnMganVzdG9uZS4uLiAqLworICAgIGp1c3RvbmUgPSB4OworI2lmZGVmIElL U0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwgIlNFUlZFUiIsICIiLCAiIik7 CisjZW5kaWYgLyogSUtTREIgKi8KK30KKworYSB7CisgICAgaW50IGIxID0gMCwgYjIgPSAwOwor ICAgIGlmICghZGF0YSkgVElOSVQ7CQkJLyogIkFCRU5EIiAtLSBUZWxsIG90aGVyIHNpZGUuICov CisKKyAgICBpZiAoIWJjdGYpIHsJCSAgICAgLyogQmxvY2sgY2hlY2sgMyBmb3JjZWQgb24gYWxs IHBhY2tldHMgKi8KKyNpZm5kZWYgcGRwMTEKKwlpZiAoZXBrdGZsZykgewkJCS8qIElmIGJlY2F1 c2Ugb2YgRS1QQUNLRVQgY29tbWFuZCAqLworCSAgICBiMSA9IGJjdGw7IGIyID0gYmN0dTsJLyog U2F2ZSBibG9jayBjaGVjayB0eXBlICovCisJICAgIGJjdGwgPSBiY3R1ID0gMTsJCS8qIHNldCBp dCB0byAxICovCisJfQorI2VuZGlmIC8qIHBkcDExICovCisgICAgfQorICAgIGVycnBrdCgoQ0hB UiAqKSJVc2VyIGNhbmNlbGxlZCIpOwkvKiBTZW5kIHRoZSBwYWNrZXQgKi8KKyAgICBpZiAoIWJj dGYpIHsJCSAgICAgLyogQmxvY2sgY2hlY2sgMyBmb3JjZWQgb24gYWxsIHBhY2tldHMgKi8KKyNp Zm5kZWYgcGRwMTEKKwlpZiAoZXBrdGZsZykgewkJCS8qIFJlc3RvcmUgdGhlIGJsb2NrIGNoZWNr ICovCisJICAgIGVwa3RmbGcgPSAwOworCSAgICBiY3RsID0gYjE7IGJjdHUgPSBiMjsKKwl9Cisg ICAgfQorI2VuZGlmIC8qIHBkcDExICovCisgICAgc3VjY2VzcyA9IDA7CisgICAgcmV0dXJuKDAp OwkJCQkvKiBSZXR1cm4gZnJvbSBwcm90b2NvbC4gKi8KK30KKworLyoKKyAgRHluYW1pYyBzdGF0 ZXM6IDxjdXJyZW50LXN0YXRlcz5pbnB1dC1jaGFyYWN0ZXIgeyBhY3Rpb24gfQorICBuYWtzdGF0 ZSAhPSAwIG1lYW5zIHdlJ3JlIGluIGEgcmVjZWl2aW5nIHN0YXRlLCBpbiB3aGljaCB3ZSBzZW5k IEFDS3MgJiBOQUtzLgorKi8KKworPHJnZW4sZ2V0LHNlcnZlLHJvcGt0PlMgewkJLyogUmVjZWl2 ZSBTZW5kLUluaXQgcGFja2V0LiAqLworICAgIHJjID0gcmN2X3NfcGt0KCk7CisgICAgY2FuY2Vs ID0gMDsJCQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNvdW50ZXIgKi8KKyAgICBkZWJ1ZyhGMTAx LCJyY3Zfc19wa3QiLCIiLHJjKTsKKyAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChz ZWUgYmVsb3cpICovCit9CisKKy8qIFN0YXRlcyBpbiB3aGljaCB3ZSBnZXQgcmVwbGllcyBiYWNr IGZyb20gY29tbWFuZHMgc2VudCB0byBhIHNlcnZlci4gKi8KKy8qIENvbXBsaWNhdGVkIGJlY2F1 c2UgZGlyZWN0aW9uIG9mIHByb3RvY29sIGNoYW5nZXMsIHBhY2tldCBudW1iZXIgICAgKi8KKy8q IHN0YXlzIGF0IHplcm8gdGhyb3VnaCBJLUctUyBzZXF1ZW5jZSwgYW5kIGNvbXBsaWNhdGVkIGV2 ZW4gbW9yZSBieSAgKi8KKy8qIHNsaWRpbmcgd2luZG93cyBidWZmZXIgYWxsb2NhdGlvbi4gKi8K KworPGlwa3Q+WSB7CQkJCS8qIEdldCBhY2sgZm9yIEktcGFja2V0ICovCisgICAgaW50IHggPSAw OworI2lmZGVmIFBLVFpFUk9IQUNLCisgICAgY2tzdHJuY3B5KGlwa3RhY2ssKGNoYXIgKilyZGF0 YXAsUEtUWkVST0xFTik7IC8qIFNhdmUgYSBjb3B5IG9mIHRoZSBBQ0sgKi8KKyAgICBpcGt0bGVu ID0gc3RybGVuKGlwa3RhY2spOworI2VuZGlmIC8qIFBLVFpFUk9IQUNLICovCisgICAgc3Bhcihy ZGF0YXApOwkJCS8qIFNldCBwYXJhbWV0ZXJzICovCisgICAgY2FuY2VsID0gMDsKKyAgICB3aW5s byA9IDA7CQkJCS8qIFNldCB3aW5kb3ctbG93IGJhY2sgdG8gemVybyAqLworICAgIGRlYnVnKEYx MDEsIjxpcGt0Plkgd2lubG8iLCIiLHdpbmxvKTsKKyAgICB1cnNlcnZlciA9IDE7CQkJLyogU28g SSBrbm93IEknbSB0YWxraW5nIHRvIGEgc2VydmVyICovCisgICAgaWYgKHZjbWQpIHsJCQkJLyog SWYgc2VuZGluZyBhIGdlbmVyaWMgY29tbWFuZCAqLworCWlmICh0aW5pdCgwKSA8IDApIHJldHVy bigtOSk7CS8qIEluaXRpYWxpemUgbWFueSB0aGluZ3MgKi8KKwl4ID0gc2NtZCh2Y21kLChDSEFS ICopY21hcmcpOwkvKiBEbyB0aGF0ICovCisJaWYgKHggPj0gMCkgeCA9IDA7CQkvKiAoYmVjYXVz ZSBvZiBPLVBhY2tldCkgKi8KKwlkZWJ1ZyhGMTAxLCJwcm90byBHIHBhY2tldCBzY21kIiwiIix4 KTsKKwl2Y21kID0gMDsJCQkvKiBhbmQgdGhlbiB1bi1yZW1lbWJlciBpdC4gKi8KKyAgICB9IGVs c2UgaWYgKHZzdGF0ZSA9PSBnZXQpIHsKKwlkZWJ1ZyhGMTAxLCJSRUdFVCBzc3RhdGUiLCIiLHNz dGF0ZSk7CisJeCA9IHNyaW5pdChyZWdldCwgcmV0cmlldmUsIG9wa3QpOyAvKiBHRVQgb3IgUkVH RVQsIGV0YyAqLworICAgIH0KKyAgICBpZiAoeCA8IDApIHsJCQkvKiBJZiBjb21tYW5kIHdhcyB0 b28gbG9uZyAqLworCWlmICghc3JpbXNnKQorCSAgc3JpbXNnID0gIkVycm9yIHNlbmRpbmcgc3Ry aW5nIjsKKwllcnJwa3QoKENIQVIgKilzcmltc2cpOwkJLyogY2FuY2VsIGJvdGggc2lkZXMuICov CisJc3VjY2VzcyA9IDA7CisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAoeCA+IDApIHsJCQkvKiBO ZWVkIHRvIHNlbmQgbW9yZSBPLVBhY2tldHMgKi8KKwlCRUdJTiBzc29wa3Q7CisgICAgfSBlbHNl IHsKKwlydGltZXIoKTsJCQkvKiBSZXNldCB0aGUgZWxhcHNlZCBzZWNvbmRzIHRpbWVyLiAqLwor I2lmZGVmIEdGVElNRVIKKwlyZnRpbWVyKCk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCXdpbmxv ID0gMDsJCQkvKiBXaW5kb3cgYmFjayB0byAwLCBhZ2Fpbi4gKi8KKwlkZWJ1ZyhGMTAxLCI8aXBr dD5ZIHZzdGF0ZSIsIiIsdnN0YXRlKTsKKwluYWtzdGF0ZSA9IDE7CQkJLyogQ2FuIHNlbmQgTkFL cyBmcm9tIGhlcmUuICovCisJQkVHSU4gdnN0YXRlOwkJCS8qIFN3aXRjaCB0byBkZXNpcmVkIHN0 YXRlICovCisgICAgfQorfQorCis8c3NvcGt0PlkgewkJCQkvKiBHb3QgQUNLIHRvIE8tUGFja2V0 ICovCisgICAgZGVidWcoRjEwMCwiQ1BDUFJPIDxzc29wa3Q+WSIsIiIsMCk7CisgICAgeCA9IHNv cGt0KCk7CisgICAgZGVidWcoRjEwMSwiQ1BDUFJPIDxzc29wa3Q+WSB4IiwiIix4KTsKKyAgICBp ZiAoeCA8IDApIHsJCQkvKiBJZiBlcnJvciAqLworCWVycnBrdCgoQ0hBUiAqKXNyaW1zZyk7CQkv KiBjYW5jZWwgYm90aCBzaWRlcy4gKi8KKwlzdWNjZXNzID0gMDsKKwlSRVNVTUU7CisgICAgfSBl bHNlIGlmICh4ID09IDApIHsJCS8qIFRoaXMgd2FzIHRoZSBsYXN0IE8tUGFja2V0ICovCisJcnRp bWVyKCk7CQkJLyogUmVzZXQgdGhlIGVsYXBzZWQgc2Vjb25kcyB0aW1lci4gKi8KKyNpZmRlZiBH RlRJTUVSCisJcmZ0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwl3aW5sbyA9IDA7CQkJ LyogV2luZG93IGJhY2sgdG8gMCwgYWdhaW4uICovCisJZGVidWcoRjEwMSwiPHNzb3BrdD5ZIHdp bmxvIiwiIix3aW5sbyk7CisJbmFrc3RhdGUgPSAxOwkJCS8qIENhbiBzZW5kIE5BS3MgZnJvbSBo ZXJlLiAqLworCUJFR0lOIHZzdGF0ZTsJCQkvKiBTd2l0Y2ggdG8gZGVzaXJlZCBzdGF0ZSAqLwor ICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJDUENQUk8gPHNzb3BrdD5ZIG5vdCBjaGFuZ2luZyBzdGF0 ZSIsIiIseCk7Cit9CisKKzxpcGt0PkUgewkJCQkvKiBJZ25vcmUgRXJyb3IgcmVwbHkgdG8gSSBw YWNrZXQgKi8KKyAgICBpbnQgeCA9IDA7CisgICAgd2lubG8gPSAwOwkJCQkvKiBTZXQgd2luZG93 LWxvdyBiYWNrIHRvIHplcm8gKi8KKyAgICBkZWJ1ZyhGMTAxLCI8aXBrdD5FIHdpbmxvIiwiIix3 aW5sbyk7CisgICAgaWYgKHZjbWQpIHsJCQkJLyogSW4gY2FzZSBvdGhlciBLZXJtaXQgZG9lc24n dCAqLworCWlmICh0aW5pdCgwKSA8IDApIHJldHVybigtOSk7CisJeCA9IHNjbWQodmNtZCwoQ0hB UiAqKWNtYXJnKTsJLyogdW5kZXJzdGFuZCBJLXBhY2tldHMuICovCisJaWYgKHggPj0gMCkgeCA9 IDA7CQkvKiAoYmVjYXVzZSBvZiBPLVBhY2tldCkgKi8KKwl2Y21kID0gMDsJCQkvKiBPdGhlcndp c2UgYWN0IGFzIGFib3ZlLi4uICovCisgICAgfSBlbHNlIGlmICh2c3RhdGUgPT0gZ2V0KSB4ID0g c3Jpbml0KHJlZ2V0LCByZXRyaWV2ZSwgb3BrdCk7CisgICAgaWYgKHggPCAwKSB7CQkJLyogSWYg Y29tbWFuZCB3YXMgdG9vIGxvbmcgKi8KKwllcnJwa3QoKENIQVIgKilzcmltc2cpOwkJLyogY2Fu Y2VsIGJvdGggc2lkZXMuICovCisJc3VjY2VzcyA9IDA7CisJUkVTVU1FOworICAgIH0gZWxzZSBp ZiAoeCA+IDApIHsJCQkvKiBOZWVkIHRvIHNlbmQgbW9yZSBPLVBhY2tldHMgKi8KKwlCRUdJTiBz c29wa3Q7CisgICAgfSBlbHNlIHsKKwlmcmVlcnBrdCh3aW5sbyk7CQkvKiBEaXNjYXJkIHRoZSBF cnJvciBwYWNrZXQuICovCisJZGVidWcoRjEwMSwiPGlwa3Q+RSB3aW5sbyIsIiIsd2lubG8pOwor CXdpbmxvID0gMDsJCQkvKiBCYWNrIHRvIHBhY2tldCAwIGFnYWluLiAqLworCW5ha3N0YXRlID0g MTsJCQkvKiBDYW4gc2VuZCBOQUtzIGZyb20gaGVyZS4gKi8KKwlCRUdJTiB2c3RhdGU7CisgICAg fQorfQorCis8Z2V0PlkgewkJLyogUmVzZW5kIG9mIHByZXZpb3VzIEktcGt0IEFDSywgc2FtZSBz ZXEgbnVtYmVyICovCisgICAgZnJlZXJwa3QoMCk7CQkJLyogRnJlZSB0aGUgQUNLJ3MgcmVjZWl2 ZSBidWZmZXIgKi8KKyAgICByZXNlbmQoMCk7CQkJCS8qIFNlbmQgdGhlIEdFVCBwYWNrZXQgYWdh aW4uICovCit9CisKKy8qIFN0YXRlcyBpbiB3aGljaCB3ZSdyZSBiZWluZyBhIHNlcnZlciAqLwor Cis8c2VydmUsZ2V0PkkgewkJCQkvKiBHZXQgSS1wYWNrZXQgKi8KKyNpZm5kZWYgTk9TRVJWRVIK KyAgICBzcGFyKHJkYXRhcCk7CQkJLyogU2V0IHBhcmFtZXRlcnMgZnJvbSBpdCAqLworICAgIGFj azEocnBhcigpKTsJCQkvKiBSZXNwb25kIHdpdGggb3VyIG93biBwYXJhbWV0ZXJzICovCisjaWZk ZWYgQ09NTUVOVAorICAgIHBrdGluaXQoKTsJCQkJLyogUmVpbml0aWFsaXplIHBhY2tldCBudW1i ZXJzICovCisjZWxzZQorI2lmZGVmIENPTU1FTlQKKyAgICAvKiBUaGlzIGNhbid0IGJlIHJpZ2h0 IC0gaXQgdW5kb2VzIHRoZSBzdHVmZiB3ZSBqdXN0IG5lZ290aWF0ZWQgKi8KKyAgICB4ID0ganVz dG9uZTsKKyAgICB0aW5pdCgxKTsJCQkJLyogUmVpbml0aWFsaXplIEVWRVJZVEhJTkcgKi8KKyAg ICBqdXN0b25lID0geDsJCQkvKiBCdXQgdGhpcy4uLiAqLworI2Vsc2UKKyAgICB0aW5pdCgwKTsJ CQkJLyogSW5pdGlhbGl6ZSBtb3N0IHRoaW5ncyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNl bmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyAgICBjYW5jZWwgPSAw OwkJCQkvKiBSZXNldCBjYW5jZWxsYXRpb24gY291bnRlciAqLworfQorCis8c2VydmU+UiB7CQkJ CS8qIEdFVCAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIGlmICh4X2xvZ2luICYmICF4X2xvZ2dl ZCkgeworCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOworCVNFUlZFOworICAgIH0g ZWxzZSBpZiAoc2dldGluaXQoMCwwKSA8IDApIHsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKyNp ZmRlZiBDS1NZU0xPRworCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykK KwkgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCIsIChjaGFyICopc3J2Y21k KTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCUJFR0lOIHNzaW5pdDsKKyAgICB9CisjZW5kaWYg LyogTk9TRVJWRVIgKi8KK30KKworPHNlcnZlPkggewkJCQkvKiBHRVQgL0RFTEVURSAoUkVUUklF VkUpICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7 CisJZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7CisJUkVTVU1FOworICAgIH0gZWxz ZSBpZiAoIUVOQUJMRUQoZW5fZGVsKSkgeworCWVycnBrdCgoQ0hBUiAqKSJEZWxldGluZyBmaWxl cyBpcyBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgaWYgKHNnZXRpbml0KDAsMCkg PCAwKSB7CisJUkVTVU1FOworICAgIH0gZWxzZSB7CisJbW92aW5nID0gMTsKKyNpZmRlZiBDS1NZ U0xPRworCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgIGNrc3lz bG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIkdFVCAvREVMRVRFIiwgKGNoYXIgKilzcnZjbWQp OworI2VuZGlmIC8qIENLU1lTTE9HICovCisJQkVHSU4gc3Npbml0OworICAgIH0KKyNlbmRpZiAv KiBOT1NFUlZFUiAqLworfQorCis8c2VydmU+ViB7CQkJCS8qIEdFVCAvUkVDVVJTSVZFICovCisj aWZuZGVmIE5PU0VSVkVSCisgICAgcmVjdXJzaXZlID0gMTsJCQkvKiBTZXQgdGhlc2UgYmVmb3Jl IHNnZXRpbml0KCkgKi8KKyAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09GRikKKyAgICAgIGZuc3Bh dGggPSBQQVRIX1JFTDsJCS8qIERvbid0IHdvcnJ5LCB0aGV5IHdpbGwgYmUgKi8KKyAgICBpZiAo eF9sb2dpbiAmJiAheF9sb2dnZWQpIHsJCS8qIHJlc2V0IG5leHQgdGltZSB0aHJvdWdoLiAqLwor CWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2Ug aWYgKHNnZXRpbml0KDAsMCkgPCAwKSB7CisJUkVTVU1FOworICAgIH0gZWxzZSB7CisjaWZkZWYg Q0tTWVNMT0cKKwlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJICBj a3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJHRVQgL1JFQ1VSU0lWRSIsIChjaGFyICop c3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCUJFR0lOIHNzaW5pdDsKKyAgICB9Cisj ZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPHNlcnZlPlcgewkJCQkvKiBHRVQgL1JFQ1VSU0lW RSAvREVMRVRFICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgcmVjdXJzaXZlID0gMTsJCQkvKiBT ZXQgdGhlc2UgYmVmb3JlIHNnZXRpbml0KCkgKi8KKyAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09G RikKKyAgICAgIGZuc3BhdGggPSBQQVRIX1JFTDsJCS8qIERvbid0IHdvcnJ5LCB0aGV5IHdpbGwg YmUgKi8KKyAgICBtb3ZpbmcgPSAxOwkJCQkvKiByZXNldCBuZXh0IHRpbWUgdGhyb3VnaC4gKi8K KyAgICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsKKwllcnJwa3QoKENIQVIgKikiTG9naW4g cmVxdWlyZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICghRU5BQkxFRChlbl9kZWwpKSB7 CisJZXJycGt0KChDSEFSICopIkRlbGV0aW5nIGZpbGVzIGlzIGRpc2FibGVkIik7CisJUkVTVU1F OworICAgIH0gZWxzZSBpZiAoc2dldGluaXQoMCwwKSA8IDApIHsKKwlSRVNVTUU7CisgICAgfSBl bHNlIHsKKyNpZmRlZiBDS1NZU0xPRworCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4 bG9nZ2luZykKKwkgIGNrc3lzbG9nKFNZU0xHX1BSLDEsInNlcnZlciIsCisJCSAgICJHRVQgL1JF Q1VSU0lWRSAvREVMRVRFIiwoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KwlCRUdJTiBzc2luaXQ7CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxzZXJ2 ZT5KIHsJCQkJLyogR0VUIC9SRUNPVkVSIChSRUdFVCkgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAg ICBpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQpIHsKKwllcnJwa3QoKENIQVIgKikiTG9naW4gcmVx dWlyZWQiKTsKKwlTRVJWRTsKKyAgICB9IGVsc2UgaWYgKHNnZXRpbml0KDEsMCkgPCAwKSB7CisJ UkVTVU1FOworICAgIH0gZWxzZSB7CisjaWZkZWYgQ0tTWVNMT0cKKwlpZiAoY2t4c3lzbG9nID49 IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZl ciIsICJHRVQgL1JFQ09WRVIiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cg Ki8KKwlCRUdJTiBzc2luaXQ7CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxz ZXJ2ZT5PIHsJCQkJLyogRXh0ZW5kZWQgR0VUICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYg KHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CQkvKiAoYW55IGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMp ICovCisJZXJycGt0KChDSEFSICopIkxvZ2luIHJlcXVpcmVkIik7CisJU0VSVkU7CisgICAgfSBl bHNlIGlmICgoeCA9IHNnZXRpbml0KDAsMSkpIDwgMCkgeworCWRlYnVnKEYxMDEsIkNLQ1BSTyA8 c2VydmU+TyBzZ2V0aW5pdCBmYWlsIiwiIix4KTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICh4 ID09IDApIHsKKwlkZWJ1ZyhGMTAxLCJDS0NQUk8gPHNlcnZlPk8gc2dldGluaXQgZG9uZSIsIiIs eCk7CisjaWZkZWYgQ0tTWVNMT0cKKwlpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxv Z2dpbmcpCisJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJFWFRFTkRFRCBHRVQi LCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwlCRUdJTiBzc2luaXQ7 CisgICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlIHN0YXkgaW4gdGhpcyBzdGF0ZSAqLworCWRl YnVnKEYxMDEsIkNLQ1BSTyA8c2VydmU+TyBzZ2V0aW5pdCBUQkMiLCIiLHgpOworCWFjaygpOwor CUJFR0lOIHJvcGt0OworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8cm9wa3Q+ TyB7CisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHhfbG9naW4gJiYgIXhfbG9nZ2VkKSB7CQkv KiAoYW55IGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMpICovCisJZXJycGt0KChDSEFSICopIkxvZ2lu IHJlcXVpcmVkIik7CisJU0VSVkU7CisgICAgfSBlbHNlIGlmICgoeCA9IHNnZXRpbml0KDAsMSkp IDwgMCkgeworCWRlYnVnKEYxMDEsIkNLQ1BSTyA8cm9wa3Q+TyBzZ2V0aW5pdCBmYWlsIiwiIix4 KTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIGlmICh4ID09IDApIHsKKwlkZWJ1ZyhGMTAxLCJDS0NQ Uk8gPHJvcGt0Pk8gc2dldGluaXQgZG9uZSIsIiIseCk7CisjaWZkZWYgQ0tTWVNMT0cKKwlpZiAo Y2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJICBja3N5c2xvZyhTWVNMR19Q UiwgMSwgInNlcnZlciIsICJFWFRFTkRFRCBHRVQiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYg LyogQ0tTWVNMT0cgKi8KKwlCRUdJTiBzc2luaXQ7CisgICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3 aXNlIHN0YXkgaW4gdGhpcyBzdGF0ZSAqLworCWRlYnVnKEYxMDEsIkNLQ1BSTyA8cm9wa3Q+TyBz Z2V0aW5pdCBUQkMiLCIiLHgpOworCWFjaygpOworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAq LworfQorCis8c2VydmU+RyB7CQkJCS8qIEdlbmVyaWMgc2VydmVyIGNvbW1hbmQgKi8KKyNpZm5k ZWYgTk9TRVJWRVIKKyAgICBzcnZwdHIgPSBzcnZjbWQ7CQkJLyogUG9pbnQgdG8gY29tbWFuZCBi dWZmZXIgKi8KKyAgICBkZWNvZGUocmRhdGFwLHB1dHNydiwwKTsJCS8qIERlY29kZSBwYWNrZXQg ZGF0YSBpbnRvIGl0ICovCisgICAgcHV0c3J2KE5VTCk7CQkJLyogSW5zZXJ0IGEgY291cGxlIG51 bGxzICovCisgICAgcHV0c3J2KE5VTCk7CQkJLyogZm9yIHRlcm1pbmF0aW9uICovCisgICAgaWYg KHNydmNtZFswXSkgeworCXNzdGF0ZSA9IHNydmNtZFswXTsJCS8qIFNldCByZXF1ZXN0ZWQgc3Rh cnQgc3RhdGUgKi8KKwlpZiAoeF9sb2dpbiAmJiAheF9sb2dnZWQgJiYJLyogTG9naW4gcmVxdWly ZWQ/ICovCisJICAgIC8qIExvZ2luLCBMb2dvdXQsIGFuZCBIZWxwIGFyZSBhbGxvd2VkIHdoZW4g bm90IGxvZ2dlZCBpbiAqLworCSAgICBzc3RhdGUgIT0gJ0knICYmIHNzdGF0ZSAhPSAnTCcgJiYg c3N0YXRlICE9ICdIJykgeworCSAgICBlcnJwa3QoKENIQVIgKikiTG9naW4gcmVxdWlyZWQiKTsK KwkgICAgU0VSVkU7CisJfSBlbHNlIHsKKwkgICAgbmFrc3RhdGUgPSAwOwkJLyogTm93IEknbSB0 aGUgc2VuZGVyLiAqLworCSAgICB3aGF0ID0gV19SRU1POwkJLyogRG9pbmcgYSBSRU1PVEUgY29t bWFuZC4gKi8KKyNpZmRlZiBTVFJFQU1JTkcKKwkgICAgaWYgKCFzdHJlYW1pbmcpCisjZW5kaWYg LyogU1RSRUFNSU5HICovCisJICAgICAgaWYgKHRpbWludCA8IDEpCisJCXRpbWludCA9IGNoa3Rp bW8ocnRpbW8sdGltZWYpOyAvKiBTd2l0Y2ggdG8gcGVyLXBhY2tldCB0aW1lciAqLworCSAgICBi aW5hcnkgPSBYWUZUX1Q7CQkvKiBTd2l0Y2ggdG8gdGV4dCBtb2RlICovCisJICAgIEJFR0lOIGdl bmVyaWM7CQkvKiBTd2l0Y2ggdG8gZ2VuZXJpYyBjb21tYW5kIHN0YXRlICovCisJfQorICAgIH0g ZWxzZSB7CisJZXJycGt0KChDSEFSICopIkJhZGx5IGZvcm1lZCBzZXJ2ZXIgY29tbWFuZCIpOyAv KiByZXBvcnQgZXJyb3IgKi8KKwlSRVNVTUU7CQkJLyogJiBnbyBiYWNrIHRvIHNlcnZlciBjb21t YW5kIHdhaXQgKi8KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPHNlcnZlPkMg ewkJCQkvKiBSZWNlaXZlIEhvc3QgY29tbWFuZCAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIGlm ICh4X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1aXJl ZCIpOworCVNFUlZFOworICAgIH0gZWxzZSBpZiAoIUVOQUJMRUQoZW5faG9zKSkgeworCWVycnBr dCgoQ0hBUiAqKSJSRU1PVEUgSE9TVCBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2Ug aWYgKG5vcHVzaCkgeworCWVycnBrdCgoQ0hBUiAqKSJIT1NUIGNvbW1hbmRzIG5vdCBhdmFpbGFi bGUiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKwlzcnZwdHIgPSBzcnZjbWQ7CQkvKiBQb2lu dCB0byBjb21tYW5kIGJ1ZmZlciAqLworCWRlY29kZShyZGF0YXAscHV0c3J2LDApOwkvKiBEZWNv ZGUgY29tbWFuZCBwYWNrZXQgaW50byBpdCAqLworCXB1dHNydihOVUwpOwkJCS8qIE51bGwtdGVy bWluYXRlICovCisJbmFrc3RhdGUgPSAwOwkJCS8qIE5vdyBzZW5kaW5nLCBub3QgcmVjZWl2aW5n ICovCisJYmluYXJ5ID0gWFlGVF9UOwkJLyogU3dpdGNoIHRvIHRleHQgbW9kZSAqLworCWlmIChz eXNjbWQoKGNoYXIgKilzcnZjbWQsIiIpKSB7IC8qIFRyeSB0byBleGVjdXRlIHRoZSBjb21tYW5k ICovCisJICAgIHdoYXQgPSBXX1JFTU87CQkvKiBEb2luZyBhIFJFTU9URSBjb21tYW5kLiAqLwor I2lmZGVmIFNUUkVBTUlORworCSAgICBpZiAoIXN0cmVhbWluZykKKyNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KKwkgICAgICBpZiAodGltaW50IDwgMSkKKwkJdGltaW50ID0gY2hrdGltbyhydGltbyx0 aW1lZik7IC8qIFN3aXRjaCB0byBwZXItcGFja2V0IHRpbWVyICovCisjaWZkZWYgQ0tTWVNMT0cK KwkgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgICAgIGNr c3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBIT1NUIiwgKGNoYXIgKilzcnZj bWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisJICAgIEJFR0lOIHNzaW5pdDsJCS8qIElmIE9L LCBzZW5kIGJhY2sgaXRzIG91dHB1dCAqLworCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlICovCisJ ICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBkbyBzeXN0ZW0gY29tbWFuZCIpOyAvKiByZXBvcnQg ZXJyb3IgKi8KKwkgICAgUkVTVU1FOwkJCS8qICYgZ28gYmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3 YWl0ICovCisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8c2VydmU+cSB7 CQkJCS8qIEludGVycnVwdGVkIG9yIGNvbm5lY3Rpb24gbG9zdCAqLworICAgIHJjID0gc3J2X3Rp bWVvdXQoKTsKKyAgICBkZWJ1ZyhGMTAxLCJzcnZfdGltZW91dCIsIiIscmMpOworICAgIGlmIChy YyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBiZWxvdykgKi8KK30KKworPHNlcnZlPk4gewkJ CQkvKiBTZXJ2ZXIgZ290IGEgTkFLIGluIGNvbW1hbmQtd2FpdCAqLworI2lmbmRlZiBOT1NFUlZF UgorICAgIGVycnBrdCgoQ0hBUiAqKSJEaWQgeW91IHNheSBSRUNFSVZFIGluc3RlYWQgb2YgR0VU PyIpOworICAgIFJFU1VNRTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8c2VydmU+LiB7 CQkJCS8qIEFueSBvdGhlciBjb21tYW5kIGluIHRoaXMgc3RhdGUgKi8KKyNpZm5kZWYgTk9TRVJW RVIKKyAgICBpZiAoYyAhPSAoJ0UnIC0gU1ApICYmIGMgIT0gKCdZJyAtIFNQKSkgLyogZXhjZXB0 IEUgYW5kIFkgcGFja2V0cy4gKi8KKyAgICAgIGVycnBrdCgoQ0hBUiAqKSJVbmltcGxlbWVudGVk IHNlcnZlciBmdW5jdGlvbiIpOworICAgIC8qIElmIHdlIGFuc3dlciBhbiBFIHdpdGggYW4gRSwg d2UgZ2V0IGFuIGluZmluaXRlIGxvb3AuICovCisgICAgLyogQSBZIChBQ0spIGNhbiBzaG93IHVw IGhlcmUgaWYgd2Ugc2VudCBiYWNrIGEgc2hvcnQtZm9ybSByZXBseSB0byAqLworICAgIC8qIGEg RyBwYWNrZXQgYW5kIGl0IHdhcyBlY2hvZWQuICBBQ0tzIGNhbiBiZSBzYWZlbHkgaWdub3JlZCBo ZXJlLiAqLworICAgIFJFU1VNRTsJCQkJLyogR28gYmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3YWl0 LiAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxnZW5lcmljPkkgewkJCQkvKiBMb2dp bi9PdXQgKi8KKyAgICByYyA9IHNydl9sb2dpbigpOworICAgIGRlYnVnKEYxMDEsIjxnZW5lcmlj Pkkgc3J2X2xvZ2luIiwiIixyYyk7CisgICAgaWYgKHJjID4gLTEpIHJldHVybihyYyk7CQkvKiAo c2VlIGJlbG93KSAqLworfQorCis8Z2VuZXJpYz5DIHsJCQkJLyogR290IFJFTU9URSBDRCBjb21t YW5kICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lz bG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19QUiwg MSwgInNlcnZlciIsICJSRU1PVEUgQ0QiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tT WVNMT0cgKi8KKyAgICBpZiAoIUVOQUJMRUQoZW5fY3dkKSkgeworCWVycnBrdCgoQ0hBUiAqKSJS RU1PVEUgQ0QgZGlzYWJsZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKwljaGFyICogcCA9 IE5VTEw7CisJeCA9IGN3ZCgoY2hhciAqKShzcnZjbWQrMSkpOwkvKiBUcnkgdG8gY2hhbmdlIGRp cmVjdG9yeSAqLworI2lmZGVmIElLU0RCCisJaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwi UkVNT1RFIENEIiwgKGNoYXIgKikoc3J2Y21kKzIpLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8K KwlpZiAoIXgpIHsJCQkvKiBGYWlsZWQgKi8KKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0IGNo YW5nZSBkaXJlY3RvcnkiKTsKKwkgICAgUkVTVU1FOwkJCS8qIEJhY2sgdG8gc2VydmVyIGNvbW1h bmQgd2FpdCAqLworCX0gZWxzZSBpZiAoeCA9PSAyKSB7CQkvKiBVc2VyIHdhbnRzIG1lc3NhZ2Ug Ki8KKwkgICAgaWYgKCFFTkFCTEVEKGVuX3R5cCkpIHsJLyogTWVzc2FnZXMgKFJFTU9URSBUWVBF KSBkaXNhYmxlZD8gKi8KKwkJZXJycGt0KChDSEFSICopIlJFTU9URSBUWVBFIGRpc2FibGVkIik7 CisJCVJFU1VNRTsKKwkgICAgfSBlbHNlIHsJCQkvKiBUWVBFIGlzIGVuYWJsZWQgKi8KKwkJaW50 IGk7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJICAgIGlmICh6Y2hraShjZG1zZ2Zp bGVbaV0pID4gLTEpIHsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWJpbmFyeSA9IFhZRlRf VDsJLyogVXNlIHRleHQgbW9kZSBmb3IgdGhpcy4gKi8KKwkJaWYgKGkgPCA4ICYmIHNuZHR5cGUo Y2Rtc2dmaWxlW2ldKSkgeyAvKiBIYXZlIHJlYWRtZSBmaWxlPyAqLworCQkgICAgQkVHSU4gc3Np bml0OwkvKiBPSyAqLworCQl9IGVsc2UgewkJLyogbm90IE9LICovCisJCSAgICBwID0gemd0ZGly KCk7CisJCSAgICBpZiAoIXApIHAgPSAiIjsKKwkJICAgIHN1Y2Nlc3MgPSAoKnApID8gMSA6IDA7 CisJCSAgICBhY2sxKChDSEFSICopcCk7CS8qIEFDSyB3aXRoIG5ldyBkaXJlY3RvcnkgbmFtZSAq LworCQkgICAgc3VjY2VzcyA9IDE7CisJCSAgICBSRVNVTUU7CQkvKiB3YWl0IGZvciBuZXh0IHNl cnZlciBjb21tYW5kICovCisJCX0KKwkgICAgfQorCX0gZWxzZSB7CQkJLyogVXNlciBkb2Vzbid0 IHdhbnQgbWVzc2FnZSAqLworCSAgICBwID0gemd0ZGlyKCk7CisJICAgIGlmICghcCkgcCA9ICIi OworCSAgICBzdWNjZXNzID0gKCpwKSA/IDEgOiAwOworCSAgICBhY2sxKChDSEFSICopcCk7CisJ ICAgIHN1Y2Nlc3MgPSAxOworCSAgICBSRVNVTUU7CQkJLyogV2FpdCBmb3IgbmV4dCBzZXJ2ZXIg Y29tbWFuZCAqLworCX0KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVy aWM+QSB7CQkJCS8qIEdvdCBSRU1PVEUgUFdEIGNvbW1hbmQgKi8KKyNpZm5kZWYgTk9TRVJWRVIK KyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9n Z2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBQV0Qi LCBOVUxMKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgIGlmICghRU5BQkxFRChlbl9jd2Qp KSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBDRCBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAg ICB9IGVsc2UgeworCWlmIChlbmNzdHIoKENIQVIgKil6Z3RkaXIoKSkgPiAtMSkgeyAvKiBFbmNv ZGUgY3VycmVudCBkaXJlY3RvcnkgKi8KKwkgICAgYWNrMShkYXRhKTsJCQkvKiBJZiBpdCBmaXRz LCBzZW5kIGl0IGJhY2sgaW4gQUNLICovCisJICAgIHN1Y2Nlc3MgPSAxOworCX0gZWxzZSB7CQkJ LyogRmFpbGVkICovCisJICAgIGFjaygpOwkJCS8qIFNlbmQgZW1wdHkgQUNLICovCisJICAgIHN1 Y2Nlc3MgPSAwOwkJLyogYW5kIGluZGljYXRlIGZhaWx1cmUgbG9jYWxseSAqLworCX0KKwlSRVNV TUU7CQkJCS8qIEJhY2sgdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworICAgIH0KKyNlbmRpZiAv KiBOT1NFUlZFUiAqLworfQorCis8Z2VuZXJpYz5EIHsJCQkJLyogUkVNT1RFIERJUkVDVE9SWSBj b21tYW5kICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgY2hhciAqbjI7CisjaWZkZWYgQ0tTWVNM T0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBj a3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgRElSRUNUT1JZIiwgKGNoYXIg KilzcnZjbWQpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgaWYgKCFFTkFCTEVEKGVuX2Rp cikpIHsJCS8qIElmIERJUiBpcyBkaXNhYmxlZCwgKi8KKwllcnJwa3QoKENIQVIgKikiUkVNT1RF IERJUkVDVE9SWSBkaXNhYmxlZCIpOyAvKiByZWZ1c2UuICovCisJUkVTVU1FOworICAgIH0gZWxz ZSB7CQkJCS8qIERJUiBpcyBlbmFibGVkLiAqLworI2lmZGVmIElLU0RCCisJaWYgKGlrZGJvcGVu KSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIERJUiIsIChjaGFyICopKHNydmNtZCsyKSwgIiIpOwor I2VuZGlmIC8qIElLU0RCICovCisJaWYgKCFFTkFCTEVEKGVuX2N3ZCkpIHsJCS8qIEJ1dCBDV0Qg aXMgZGlzYWJsZWQgKi8KKwkgICAgenN0cmlwKChjaGFyICopKHNydmNtZCsyKSwmbjIpOyAvKiBh bmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLworCSAgICBpZiAoc3RyY21wKChjaGFyICop KHNydmNtZCsyKSxuMikpIHsgLyogc28gcmVmdXNlLiAqLworCQllcnJwa3QoKENIQVIgKikiQWNj ZXNzIGRlbmllZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290 byEgKi8KKwkgICAgfQorCX0KKwlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJCS8qIEl0J3MgT0sg dG8gZ28gYWhlYWQuICovCisjaWZkZWYgQ09NTUVOVAorCSAgICBuMiA9ICgqKHNydmNtZCsyKSkg PyBESVJDTUQgOiBESVJDTTI7CisJICAgIGlmIChzeXNjbWQobjIsKGNoYXIgKikoc3J2Y21kKzIp KSkgIC8qIElmIGl0IGNhbiBiZSBkb25lICovCisjZWxzZQorCSAgICBpbnQgeDsKKwkgICAgaWYg KCh4ID0gc25kZGlyKChjaGFyKikoc3J2Y21kKzIpKSkgPiAwKQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKwkgICAgeworCQlCRUdJTiBzc2luaXQ7CQkvKiBzZW5kIHRoZSByZXN1bHRzIGJhY2s7ICov CisJICAgIH0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCisJCWlmICh4IDwgMCkKKwkJICBlcnJw a3QoKENIQVIgKikiTm8gZmlsZXMgbWF0Y2giKTsKKwkJZWxzZQorCQkgIGVycnBrdCgoQ0hBUiAq KSJDYW4ndCBsaXN0IGRpcmVjdG9yeSIpOworCQlSRVNVTUU7CQkJLyogcmV0dXJuIHRvIHNlcnZl ciBjb21tYW5kIHdhaXQgKi8KKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KK30KKworPGdlbmVyaWM+RSB7CQkJCS8qIFJFTU9URSBERUxFVEUgKEVyYXNlKSAqLworI2lm bmRlZiBOT1NFUlZFUgorICAgIGNoYXIgKm4yOworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNr eHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdf UFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIERFTEVURSIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRp ZiAvKiBDS1NZU0xPRyAqLworICAgIGlmICghRU5BQkxFRChlbl9kZWwpKSB7CisJZXJycGt0KChD SEFSICopIlJFTU9URSBERUxFVEUgZGlzYWJsZWQiKTsKKwlSRVNVTUU7CisgICAgfSBlbHNlIHsJ CQkJLyogREVMRVRFIGlzIGVuYWJsZWQgKi8KKyNpZmRlZiBJS1NEQgorCWlmIChpa2Rib3Blbikg c2xvdHN0YXRlKHdoYXQsIlJFTU9URSBERUxFVEUiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsK KyNlbmRpZiAvKiBJS1NEQiAqLworCWlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBidXQgQ1dE IGlzIGRpc2FibGVkICovCisJICAgIHpzdHJpcCgoY2hhciAqKShzcnZjbWQrMiksJm4yKTsgLyog YW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KKwkgICAgaWYgKHN0cmNtcCgoY2hhciAq KShzcnZjbWQrMiksbjIpKSB7IC8qIHNvIHJlZnVzZS4gKi8KKwkJZXJycGt0KChDSEFSICopIkFj Y2VzcyBkZW5pZWQiKTsKKwkJUkVTVU1FOwkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdv dG8hICovCisJICAgIH0KKwl9IGVsc2UgaWYgKGlzZGlyKChjaGFyICopKHNydmNtZCsyKSkpIHsg LyogQSBkaXJlY3RvcnkgbmFtZT8gKi8KKwkgICAgZXJycGt0KChDSEFSICopIkl0J3MgYSBkaXJl Y3RvcnkiKTsKKwkgICAgUkVTVU1FOworCX0KKwlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyog SXQncyBPSyB0byBnbyBhaGVhZC4gKi8KKwkgICAgaW50IHg7CisJICAgIGlmICgoeCA9IHNuZGRl bCgoY2hhciopKHNydmNtZCsyKSkpID4gMCkgeworCQlCRUdJTiBzc2luaXQ7CQkvKiBJZiBPSyBz ZW5kIHJlc3VsdHMgYmFjayAqLworCSAgICB9IGVsc2UgewkJCS8qIG90aGVyd2lzZSAqLworCQlp ZiAoeCA8IDApCisJCSAgZXJycGt0KChDSEFSICopIkZpbGUgbm90IGZvdW5kIik7IC8qIHJlcG9y dCBmYWlsdXJlICovCisJCWVsc2UKKwkJICBlcnJwa3QoKENIQVIgKikiREVMRVRFIGZhaWxlZCIp OworCQlSRVNVTUU7CQkJLyogJiByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworCSAg ICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8Z2VuZXJpYz5GIHsJ CQkJLyogRklOSVNIICovCisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhT WVNMR19QUiwgMSwgInNlcnZlciIsICJGSU5JU0giLCBOVUxMKTsKKyNlbmRpZiAvKiBDS1NZU0xP RyAqLworI2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiU0VS VkVSIEZJTklTSCIsICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBpZiAoIUVOQUJM RUQoZW5fZmluKSkgeworCWVycnBrdCgoQ0hBUiAqKSJGSU5JU0ggZGlzYWJsZWQiKTsKKwlSRVNV TUU7CisgICAgfSBlbHNlIHsKKwlhY2soKTsJCQkJLyogQWNrbm93bGVkZ2UgKi8KKwl4eHNjcmVl bihTQ1JfVEMsMCwwTCwiIik7CS8qIERpc3BsYXkgKi8KKwlzdWNjZXNzID0gMTsKKwlyZXR1cm4o MCk7CQkJLyogRG9uZSAqLworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8Z2Vu ZXJpYz5YIHsJCQkJLyogRVhJVCAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lmZGVmIENLU1lTTE9H CisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tz eXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIEVYSVQiLCBOVUxMKTsKKyNlbmRp ZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3Rh dGUod2hhdCwiUkVNT1RFIEVYSVQiLCAiIiwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAg aWYgKCFFTkFCTEVEKGVuX3hpdCkpIHsKKwllcnJwa3QoKENIQVIgKikiRVhJVCBkaXNhYmxlZCIp OworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworCWFjaygpOwkJCQkvKiBBY2tub3dsZWRnZSAqLwor CXh4c2NyZWVuKFNDUl9UQywwLDBMLCIiKTsJLyogRGlzcGxheSAqLworCWRvZXhpdChHT09EX0VY SVQseGl0c3RhKTsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVyaWM+ TCB7CQkJCS8qIEJZRSAoTG9nb3V0KSAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lmZGVmIENLU1lT TE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAg Y2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiQllFIiwgTlVMTCk7CisjZW5kaWYgLyog Q0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdo YXQsIlNFUlZFUiBCWUUiLCAiIiwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFF TkFCTEVEKGVuX2J5ZSkpIHsKKwllcnJwa3QoKENIQVIgKikiQllFIGRpc2FibGVkIik7CisJUkVT VU1FOworICAgIH0gZWxzZSB7CisJYWNrKCk7CQkJCS8qIEFja25vd2xlZGdlICovCisJc3VjY2Vz cyA9IDE7CisJbXNsZWVwKDc1MCk7CQkJLyogR2l2ZSB0aGUgQUNLIHRpbWUgdG8gZ2V0IG91dCAq LworCWlmIChsb2NhbCkKKwkgIHR0cmVzKCk7CQkJLyogUmVzZXQgdGhlIHRlcm1pbmFsICovCisJ eHhzY3JlZW4oU0NSX1RDLDAsMEwsIiIpOwkvKiBEaXNwbGF5ICovCisJZG9jbGVhbigxKTsJCQkv KiBDbGVhbiB1cCBmaWxlcywgZXRjICovCisjaWZkZWYgREVCVUcKKwlkZWJ1ZyhGMTAwLCJDLUtl cm1pdCBCWUUgLSBMb2dnaW5nIG91dC4uLiIsIiIsMCk7CisJemNsb3NlKFpERklMRSk7CisjZW5k aWYgLyogREVCVUcgKi8KKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKwlpZiAoaW5zZXJ2 ZXIpCisJICBja3hsb2dvdXQoKTsKKwllbHNlCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRp ZiAvKiBJS1NEICovCisjaWZkZWYgVENQU09DS0VUCisjaWZuZGVmIE5PTElTVEVOCisJICBpZiAo bmV0d29yayAmJiB0Y3BzcmZkID4gMCAmJiAhaW5zZXJ2ZXIpCisJICAgIGRvZXhpdChHT09EX0VY SVQseGl0c3RhKTsKKwllbHNlCisjZW5kaWYgLyogTk9MSVNURU4gKi8KKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KKwkgIHJldHVybih6a3NlbGYoKSk7CQkvKiBUcnkgdG8gbG9nIHNlbGYgb3V0ICov CisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxnZW5lcmljPkggewkJCQkvKiBS RU1PVEUgSEVMUCAqLworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNM R19QUiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIi LCAiUkVNT1RFIEhFTFAiLCBOVUxMKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIElL U0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIEhFTFAiLCAiIiwg IiIpOworI2VuZGlmIC8qIElLU0RCICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKHNuZGhs cCgpKSB7CisJQkVHSU4gc3Npbml0OwkJCS8qIHRyeSB0byBzZW5kIGl0ICovCisgICAgfSBlbHNl IHsJCQkJLyogSWYgbm90IG9rLCAqLworCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBzZW5kIGhlbHAi KTsgLyogc2VuZCBlcnJvciBtZXNzYWdlIGluc3RlYWQgKi8KKwlSRVNVTUU7CQkJCS8qIGFuZCBy ZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworICAgIH0KKyNlbmRpZiAvKiBOT1NFUlZF UiAqLworfQorCis8Z2VuZXJpYz5SIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVN T1RFIFJFTkFNRSAqLworICAgIHJjID0gc3J2X3JlbmFtZSgpOworICAgIGRlYnVnKEYxMDEsInNy dl9yZW5hbWUiLCIiLHJjKTsKKyAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsJCS8qIChzZWUg YmVsb3cpICovCit9CisKKzxnZW5lcmljPksgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBSRU1PVEUgQ09QWSAqLworICAgIHJjID0gc3J2X2NvcHkoKTsKKyAgICBkZWJ1ZyhGMTAxLCJz cnZfY29weSIsIiIscmMpOworICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwkJLyogKHNlZSBi ZWxvdykgKi8KK30KKworPGdlbmVyaWM+UyB7CQkJCS8qIFJFTU9URSBTRVQgKi8KKyNpZmRlZiBD S1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAg ICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBTRVQiLCAoY2hhciAq KXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRl ZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBTRVQiLCAo Y2hhciAqKShzcnZjbWQrMSksICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIGlmICghRU5B QkxFRChlbl9zZXQpKSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBTRVQgZGlzYWJsZWQiKTsK KwlSRVNVTUU7CisgICAgfSBlbHNlIHsKKwlpZiAocmVtc2V0KChjaGFyICopKHNydmNtZCsxKSkp IHsgLyogVHJ5IHRvIGRvIHdoYXQgdGhleSBhc2sgKi8KKwkgICAgc3VjY2VzcyA9IDE7CisJICAg IGFjaygpOwkJCS8qIElmIE9LLCB0aGVuIGFja25vd2xlZGdlICovCisJfSBlbHNlCQkJCS8qIE90 aGVyd2lzZSAqLworCSAgZXJycGt0KChDSEFSICopIlVua25vd24gUkVNT1RFIFNFVCBwYXJhbWV0 ZXIiKTsgLyogZ2l2ZSBlcnJvciBtc2cgKi8KKwlSRVNVTUU7CQkJCS8qIFJldHVybiB0byBzZXJ2 ZXIgY29tbWFuZCB3YWl0ICovCisgICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKKzxn ZW5lcmljPlQgewkJCQkvKiBSRU1PVEUgVFlQRSAqLworI2lmbmRlZiBOT1NFUlZFUgorICAgIGNo YXIgKm4yOworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAm JiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVN T1RFIFRZUEUiLCAoY2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICBp ZiAoIUVOQUJMRUQoZW5fdHlwKSkgeworCWVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgVFlQRSBkaXNh YmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworI2lmZGVmIElLU0RCCisJaWYgKGlrZGJv cGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIFRZUEUiLCAoY2hhciAqKShzcnZjbWQrMiksICIi KTsKKyNlbmRpZiAvKiBJS1NEQiAqLworCWlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBJZiBD V0QgZGlzYWJsZWQgKi8KKwkgICAgenN0cmlwKChjaGFyICopKHNydmNtZCsyKSwmbjIpOyAvKiBh bmQgdGhleSBpbmNsdWRlZCBhIHBhdGhuYW1lLCAqLworCSAgICBpZiAoc3RyY21wKChjaGFyICop KHNydmNtZCsyKSxuMikpIHsgLyogcmVmdXNlLiAqLworCQllcnJwa3QoKENIQVIgKikiQWNjZXNz IGRlbmllZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEg Ki8KKwkgICAgfQorCX0KKwlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyogSXQncyBPSyB0byBn byBhaGVhZC4gKi8KKwkgICAgYmluYXJ5ID0gWFlGVF9UOwkJLyogVXNlIHRleHQgbW9kZSBmb3Ig dGhpcy4gKi8KKwkgICAgaWYgKAkJCS8qIChSRVNVTUUgZGlkbid0IGNoYW5nZSBzdGF0ZSkgKi8K KyNpZmRlZiBDT01NRU5UCisJICAgICAgc3lzY21kKFRZUENNRCwoY2hhciAqKShzcnZjbWQrMikp CS8qIE9sZCB3YXkgKi8KKyNlbHNlCisJICAgICAgc25kdHlwZSgoY2hhciAqKShzcnZjbWQrMikp IC8qIE5ldyB3YXkgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJCSkKKwkgICAgICBCRUdJTiBz c2luaXQ7CQkvKiBPSyAqLworCSAgICBlbHNlIHsJCQkvKiBub3QgT0sgKi8KKwkJZXJycGt0KChD SEFSICopIkNhbid0IHR5cGUgZmlsZSIpOyAvKiBnaXZlIGVycm9yIG1lc3NhZ2UgKi8KKwkJUkVT VU1FOwkJCS8qIHdhaXQgZm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKwkgICAgfQorCX0KKyAg ICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVyaWM+bSB7CQkJCS8qIFJFTU9U RSBNS0RJUiAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lmZGVmIENLX01LRElSCisjaWZkZWYgQ0tT WVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAg ICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgTUtESVIiLCAoY2hhciAq KXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChp a2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBNS0RJUiIsIChjaGFyICopKHNydmNtZCsy KSwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFFTkFCTEVEKGVuX21rZCkpIHsK KwllcnJwa3QoKENIQVIgKikiUkVNT1RFIE1LRElSIGRpc2FibGVkIik7CisJUkVTVU1FOworICAg IH0gZWxzZSBpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkvKiBJZiBDV0QgZGlzYWJsZWQgKi8KKwll cnJwa3QoKENIQVIgKikiRGlyZWN0b3J5IGFjY2VzcyByZXN0cmljdGVkIik7CisJUkVTVU1FOwkJ CQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLworICAgIH0KKyAgICBpZiAoc3Rh dGUgPT0gZ2VuZXJpYykgewkJLyogT0sgdG8gZ28gYWhlYWQuICovCisJY2hhciAqcCA9IE5VTEw7 CisJeCA9IGNrbWtkaXIoMCwoY2hhciAqKShzcnZjbWQrMiksJnAsMCwxKTsgLyogTWFrZSB0aGUg ZGlyZWN0b3J5ICovCisJaWYgKCFwKSBwID0gIiI7CisJaWYgKHggPiAtMSkgeworCSAgICBlbmNz dHIoKENIQVIgKilwKTsJCS8qIE9LIC0gZW5jb2RlIHRoZSBuYW1lICovCisJICAgIGFjazEoZGF0 YSk7CQkJLyogU2VuZCBzaG9ydC1mb3JtIHJlc3BvbnNlICovCisJICAgIHN1Y2Nlc3MgPSAxOwor CSAgICBSRVNVTUU7CisJfSBlbHNlIHsJCQkvKiBub3QgT0sgKi8KKwkgICAgaWYgKCEqcCkgcCA9 ICJEaXJlY3RvcnkgY3JlYXRpb24gZmFpbHVyZSI7CisJICAgIGVycnBrdCgoQ0hBUiAqKXApOwkJ LyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCisJICAgIFJFU1VNRTsJCQkvKiBXYWl0IGZvciBuZXh0 IHNlcnZlciBjb21tYW5kICovCisJfQorICAgIH0KKyNlbHNlCisgICAgZXJycGt0KChDSEFSICop IlJFTU9URSBNS0RJUiBub3QgYXZhaWxhYmxlIik7CisgICAgUkVTVU1FOworI2VuZGlmIC8qIENL X01LRElSICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVyaWM+ZCB7CQkJCS8q IFJFTU9URSBSTURJUiAqLworI2lmbmRlZiBOT1NFUlZFUgorI2lmZGVmIENLX01LRElSCisjaWZk ZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcp CisgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgUk1ESVIiLCAo Y2hhciAqKXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAg IGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBSTURJUiIsIChjaGFyICopKHNy dmNtZCsyKSwgIiIpOworI2VuZGlmIC8qIElLU0RCICovCisgICAgaWYgKCFFTkFCTEVEKGVuX3Jt ZCkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIFJNRElSIGRpc2FibGVkIik7CisJUkVTVU1F OworICAgIH0gZWxzZSBpZiAoIUVOQUJMRUQoZW5fY3dkKSkgewkvKiBJZiBDV0QgZGlzYWJsZWQg Ki8KKwllcnJwa3QoKENIQVIgKikiRGlyZWN0b3J5IGFjY2VzcyByZXN0cmljdGVkIik7CisJUkVT VU1FOwkJCQkvKiBSZW1lbWJlciwgdGhpcyBpcyBub3QgYSBnb3RvISAqLworICAgIH0KKyAgICBp ZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyogT0sgdG8gZ28gYWhlYWQuICovCisJY2hhciAqcCA9 IE5VTEw7CisJeCA9IGNrbWtkaXIoMSwoY2hhciAqKShzcnZjbWQrMiksJnAsMCwxKTsKKwlpZiAo IXApIHAgPSAiIjsKKwlpZiAoeCA+IC0xKSB7CisJICAgIGVuY3N0cigoQ0hBUiAqKXApOwkJLyog T0sgLSBlbmNvZGUgdGhlIG5hbWUgKi8KKwkgICAgYWNrMShkYXRhKTsJCQkvKiBTZW5kIHNob3J0 LWZvcm0gcmVzcG9uc2UgKi8KKwkgICAgc3VjY2VzcyA9IDE7CisJICAgIFJFU1VNRTsKKwl9IGVs c2UgewkJCS8qIG5vdCBPSyAqLworCSAgICBpZiAoISpwKSBwID0gIkRpcmVjdG9yeSByZW1vdmFs IGZhaWx1cmUiOworCSAgICBlcnJwa3QoKENIQVIgKilwKTsJCS8qIGdpdmUgZXJyb3IgbWVzc2Fn ZSAqLworCSAgICBSRVNVTUU7CQkJLyogV2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29tbWFuZCAqLwor CX0KKyAgICB9CisjZWxzZQorICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgUk1ESVIgbm90IGF2 YWlsYWJsZSIpOworICAgIFJFU1VNRTsKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworI2VuZGlmIC8q IE5PU0VSVkVSICovCit9CisKKzxnZW5lcmljPlUgewkJCQkvKiBSRU1PVEUgU1BBQ0UgKi8KKyNp Zm5kZWYgTk9TRVJWRVIKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lT TEdfUFIgJiYgY2t4bG9nZ2luZykKKyAgICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVy IiwgIlJFTU9URSBTUEFDRSIsIChjaGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworICAgIGlmICghRU5BQkxFRChlbl9zcGEpKSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBT UEFDRSBkaXNhYmxlZCIpOworCVJFU1VNRTsKKyAgICB9IGVsc2UgeworCXggPSBzcnZjbWRbMV07 CQkJLyogR2V0IGFyZWEgdG8gY2hlY2sgKi8KKwl4ID0gKCh4ID09IE5VTCkgfHwgKHggPT0gU1Ap CisjaWZkZWYgT1MyCisJICAgICB8fCAoeCA9PSAnIScpIHx8IChzcnZjbWRbM10gPT0gJzonKQor I2VuZGlmIC8qIE9TMiAqLworCSAgICAgKTsKKyNpZmRlZiBJS1NEQgorCWlmIChpa2Rib3Blbikg c2xvdHN0YXRlKHdoYXQsCisJCQkgICAgICAiUkVNT1RFIFNQQUNFIiwKKwkJCSAgICAgICh4ID8g IiIgOiAoY2hhciAqKXNydmNtZCksCisJCQkgICAgICAiIgorCQkJICAgICAgKTsKKyNlbmRpZiAv KiBJS1NEQiAqLworCWlmICgheCAmJiAhRU5BQkxFRChlbl9jd2QpKSB7CS8qIENXRCBkaXNhYmxl ZCAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQWNjZXNzIGRlbmllZCIpOyAvKiBhbmQgbm9uLWRl ZmF1bHQgYXJlYSBnaXZlbiwgKi8KKwkgICAgUkVTVU1FOwkJCS8qIHJlZnVzZS4gKi8KKwl9IGVs c2UgeworI2lmZGVmIE9TMgorX1BST1RPVFlQKGludCBzbmRzcGFjZSwoaW50KSk7CisJICAgIGlm IChzbmRzcGFjZSh4ID8gdG91cHBlcihzcnZjbWRbMl0pIDogMCkpIHsKKwkJQkVHSU4gc3Npbml0 OwkJLyogc2VuZCB0aGUgcmVwb3J0LiAqLworCSAgICB9IGVsc2UgewkJCS8qIElmIG5vdCBvaywg Ki8KKwkJZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQgc3BhY2UiKTsgLyogc2VuZCBlcnJvciBt ZXNzYWdlICovCisJCVJFU1VNRTsJCQkvKiBhbmQgcmV0dXJuIHRvIHNlcnZlciBjb21tYW5kIHdh aXQgKi8KKwkgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIGlmIChub3B1c2gpCisgICAgICAgICAg ICAgIHggPSAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB4ID0gKHggPyBzeXNj bWQoU1BBQ01ELCIiKSA6IHN5c2NtZChTUEFDTTIsKGNoYXIgKikoc3J2Y21kKzIpKSk7CisJICAg IGlmICh4KSB7CQkJLyogSWYgd2UgZ290IHRoZSBpbmZvICovCisJCUJFR0lOIHNzaW5pdDsJCS8q IHNlbmQgaXQgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkJZXJycGt0KChD SEFSICopIkNhbid0IGNoZWNrIHNwYWNlIik7IC8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLworCQlS RVNVTUU7CQkJLyogYW5kIGF3YWl0IG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKwkgICAgfQorI2Vu ZGlmIC8qIE9TMiAqLworCX0KKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPGdl bmVyaWM+VyB7CQkJCS8qIFJFTU9URSBXSE8gKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyNpZmRlZiBD S1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKyAg ICAgIGNrc3lzbG9nKFNZU0xHX1BSLCAxLCAic2VydmVyIiwgIlJFTU9URSBXSE8iLCAoY2hhciAq KXNydmNtZCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorICAgIGlmIChp a2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIlJFTU9URSBXSE8iLCAoY2hhciAqKShzcnZjbWQrMiks ICIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworICAgIGlmICghRU5BQkxFRChlbl93aG8pKSB7CisJ ZXJycGt0KChDSEFSICopIlJFTU9URSBXSE8gZGlzYWJsZWQiKTsKKwlSRVNVTUU7CisgICAgfSBl bHNlIHsKKyNpZmRlZiBPUzIKK19QUk9UT1RZUChpbnQgc25kd2hvLChjaGFyICopKTsKKwkgICAg aWYgKHNuZHdobygoY2hhciAqKShzcnZjbWQrMikpKSB7CisJCUJFR0lOIHNzaW5pdDsJCS8qIHRy eSB0byBzZW5kIGl0ICovCisJICAgIH0gZWxzZSB7CQkJLyogSWYgbm90IG9rLCAqLworCQllcnJw a3QoKENIQVIgKikiQ2FuJ3QgZG8gd2hvIGNvbW1hbmQiKTsgLyogc2VuZCBlcnJvciBtc2cgKi8K KwkJUkVTVU1FOwkJCS8qIGFuZCByZXR1cm4gdG8gc2VydmVyIGNvbW1hbmQgd2FpdCAqLworCSAg ICB9CisjZWxzZQorCWlmIChzeXNjbWQoV0hPQ01ELChjaGFyICopKHNydmNtZCsyKSkpIHsKKwkg ICAgQkVHSU4gc3Npbml0OworCX0gZWxzZSB7CisJICAgIGVycnBrdCgoQ0hBUiAqKSJDYW4ndCBk byB3aG8gY29tbWFuZCIpOworCSAgICBSRVNVTUU7CisJfQorI2VuZGlmIC8qIE9TMiAqLworICAg IH0KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8Z2VuZXJpYz5WIHsJCQkJLyogVmFyaWFi bGUgcXVlcnkgb3Igc2V0ICovCisgICAgcmMgPSBzcnZfcXVlcnkoKTsKKyAgICBkZWJ1ZyhGMTAx LCJzcnZfcXVlcnkiLCIiLHJjKTsKKyAgICBpZiAocmMgPiAtMSkgcmV0dXJuKHJjKTsKK30KKwor PGdlbmVyaWM+TSB7CQkJCS8qIFJFTU9URSBNRVNTQUdFIGNvbW1hbmQgKi8KKyNpZm5kZWYgTk9T RVJWRVIKKyAgICBkZWJ1ZyhGMTEwLCJSTVNHIiwoY2hhciAqKXNydmNtZCsyLDApOworICAgIHh4 c2NyZWVuKFNDUl9NUywwLDBMLChjaGFyICopKHNydmNtZCsyKSk7CisgICAgYWNrKCk7CisgICAg UkVTVU1FOworI2VuZGlmCS8qIE5PU0VSVkVSICovCit9CisKKzxnZW5lcmljPnEgewkJCQkvKiBJ bnRlcnJ1cHRlZCBvciBjb25uZWN0aW9uIGxvc3QgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBp ZiAoZmF0YWxpbykgewkJCS8qIENvbm5lY3Rpb24gbG9zdCAqLworI2lmZGVmIENLU1lTTE9HCisJ aWYgKGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorCSAgY2tzeXNsb2coU1lT TEdfUFIsIDEsICJzZXJ2ZXIiLCAiSW50ZXJydXB0ZWQiLCBOVUxMKTsKKyNlbmRpZiAvKiBDS1NZ U0xPRyAqLworCXN1Y2Nlc3MgPSAwOworCXhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsKKwlR VUlUOworICAgIH0gZWxzZSBpZiAoaW50ZXJydXB0ZWQpIHsKKwlpZiAoIUVOQUJMRUQoZW5fZmlu KSkgewkJLyogQ3RybC1DIHR5cGVkICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJRVUlUIGRpc2Fi bGVkIik7CisJICAgIFJFU1VNRTsKKwl9IGVsc2UgeworI2lmZGVmIENLU1lTTE9HCisJICAgIGlm IChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkgICAgICBja3N5c2xvZyhT WVNMR19QUiwgMSwgInNlcnZlciIsICJJbnRlcnJ1cHRlZCIsIE5VTEwpOworI2VuZGlmIC8qIENL U1lTTE9HICovCisJICAgIHN1Y2Nlc3MgPSAwOworCSAgICB4aXRzdGEgfD0gKHdoYXQgJiBXX0tF Uk1JVCk7CisJICAgIFFVSVQ7CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIFNob3VsZG4ndCBoYXBw ZW4gKi8KKwlkZWJ1ZyhGMTAwLCJTRVJWRVIgKGdlbmVyaWMpIEdPVCBVTkVYUEVDVEVEICdxJyIs IiIsMCk7CisJUVVJVDsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworPGdlbmVy aWM+LiB7CQkJCS8qIEFueXRoaW5nIGVsc2UgaW4gdGhpcyBzdGF0ZS4uLiAqLworI2lmbmRlZiBO T1NFUlZFUgorICAgIGVycnBrdCgoQ0hBUiAqKSJVbmltcGxlbWVudGVkIFJFTU9URSBjb21tYW5k Iik7IC8qIENvbXBsYWluICovCisgICAgUkVTVU1FOwkJCQkvKiBhbmQgcmV0dXJuIHRvIHNlcnZl ciBjb21tYW5kIHdhaXQgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCis8cmdlbj5xIHsJ CQkJLyogU2VudCBCWUUgYW5kIGNvbm5lY3Rpb24gYnJva2VuICovCisgICAgaWYgKGJ5ZV9hY3Rp dmUgJiYgdHRjaGsoKSA8IDApIHsKKwltc2xlZXAoNTAwKTsKKwlieWVfYWN0aXZlID0gMDsKKwl0 dGNsb3MoMCk7CQkJLyogQ2xvc2Ugb3VyIGVuZCBvZiB0aGUgY29ubmVjdGlvbiAqLworCWNsc29m KDApOworCXJldHVybihzdWNjZXNzID0gMSk7CisgICAgfSBlbHNlIHsJCQkJLyogT3RoZXIgZ2Vu ZXJpYyBjb21tYW5kICovCisJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIG9yIGNvbm5lY3Rpb24g bm90IGJyb2tlbiAqLworICAgIH0KK30KKworPHJnZW4+WSB7CQkJCS8qIFNob3J0LUZvcm0gcmVw bHkgKi8KKyAgICByYyA9IHJjdl9zaG9ydHJlcGx5KCk7CisgICAgZGVidWcoRjEwMSwiPHJnZW4+ WSByY3Zfc2hvcnRyZXBseSIsIiIscmMpOworICAgIGlmIChyYyA+IC0xKSByZXR1cm4ocmMpOwor fQorCis8cmdlbixyZmlsZT5GIHsJCQkJLyogRmlsZSBoZWFkZXIgKi8KKyAgICAvKiBjaGFyICpu MjsgKi8KKyAgICBleHRlcm4gaW50IHJzbjsKKyAgICBkZWJ1ZyhGMTAxLCI8cmZpbGU+RiB3aW5s byAxIiwiIix3aW5sbyk7CisgICAgeGZsZyA9IDA7CQkJCS8qIE5vdCBzY3JlZW4gZGF0YSAqLwor ICAgIGlmICghY3pzZWVuKQorICAgICAgY2FuY2VsID0gMDsJCQkvKiBSZXNldCBjYW5jZWxsYXRp b24gY291bnRlciAqLworI2lmZGVmIENBTElCUkFURQorICAgIGlmIChkZXN0ID09IERFU1RfTikK KyAgICAgIGNhbGlicmF0ZSA9IDE7CisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisgICAgaWYgKCFy Y3ZmaWwoZmlsbmFtKSkgewkJLyogRmlndXJlIG91dCBsb2NhbCBmaWxlbmFtZSAqLworCWVycnBr dCgoQ0hBUiAqKXJmX2Vycik7CQkvKiBUcm91YmxlICovCisJUkVTVU1FOworICAgIH0gZWxzZSB7 CQkJCS8qIFJlYWwgZmlsZSwgT0sgdG8gcmVjZWl2ZSAqLworCWNoYXIgKiBmbnA7CisJZGVidWco RjExMSwiPHJmaWxlPkYgd2lubG8gMiIsZnNwZWMsd2lubG8pOworCWlmIChmaWxjbnQgPT0gMSkJ CS8qIHJjdmZpbCBzZXQgdGhpcyB0byAxIGZvciAxc3QgZmlsZSAqLworCSAgY3JjMTYgPSAwTDsJ CQkvKiBDbGVhciBmaWxlIENSQyAqLworCWZucCA9IGZzcGVjOwkJCS8qIFRoaXMgaXMgdGhlIGZ1 bGwgcGF0aCAqLworCWlmIChzZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fY3dkKSB8fCAvKiBpZiBESVNB QkxFIENEICovCisJICAgICFmYWNrcGF0aAkJCSAgLyogb3IgRi1BQ0stUEFUSCBPRkYgKi8KKwkg ICAgKSB7CisJICAgIHpzdHJpcChmc3BlYywmZm5wKTsJCS8qIGRvbid0IHNlbmQgYmFjayBmdWxs IHBhdGggKi8KKwl9CisJZW5jc3RyKChDSEFSICopZm5wKTsKKwlpZiAoZmFja2J1ZykKKwkgIGFj aygpOworCWVsc2UKKwkgIGFjazEoZGF0YSk7CQkJLyogU2VuZCBpdCBiYWNrIGluIEFDSyAqLwor CWluaXRhdHRyKCZpYXR0cik7CQkvKiBDbGVhciBmaWxlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8K KwlzdHJlYW1vbigpOworCWlmICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJLyogQWxsb2NhdGUgbmVn b3RpYXRlZCB3aW5kb3cgc2xvdHMgKi8KKwkgICAgZXJycGt0KChDSEFSICopIkNhbid0IG9wZW4g d2luZG93Iik7CisJICAgIFJFU1VNRTsKKwl9CisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9wZW4p IHNsb3RzdGF0ZSh3aGF0LAorCQkJICAgICAgc2VydmVyID8gIlNFUlZFUiIgOiAiIiwKKwkJCSAg ICAgICJSRUNFSVZFIiwKKwkJCSAgICAgIGZzcGVjCisJCQkgICAgICApOworI2VuZGlmIC8qIElL U0RCICovCisJQkVHSU4gcmF0dHI7CQkJLyogTm93IGV4cGVjdCBBdHRyaWJ1dGUgcGFja2V0cyAq LworICAgIH0KK30KKworPHJnZW4scmZpbGU+WCB7CQkJCS8qIFgtcGFja2V0IGluc3RlYWQgb2Yg ZmlsZSBoZWFkZXIgKi8KKyAgICB4ZmxnID0gMTsJCQkJLyogU2NyZWVuIGRhdGEgKi8KKyAgICBp ZiAoIWN6c2VlbikKKyAgICAgIGNhbmNlbCA9IDA7CQkJLyogUmVzZXQgY2FuY2VsbGF0aW9uIGNv dW50ZXIgKi8KKyAgICBhY2soKTsJCQkJLyogQWNrbm93bGVkZ2UgdGhlIFgtcGFja2V0ICovCisg ICAgaW5pdGF0dHIoJmlhdHRyKTsJCQkvKiBJbml0aWFsaXplIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUg Ki8KKyAgICBzdHJlYW1vbigpOworICAgIGlmICh3aW5kb3cod3Nsb3RuKSA8IDApIHsJCS8qIGFs bG9jYXRlIG5lZ290aWF0ZWQgd2luZG93IHNsb3RzICovCisJZXJycGt0KChDSEFSICopIkNhbid0 IG9wZW4gd2luZG93Iik7CisJUkVTVU1FOworICAgIH0KKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAo cXVlcnkpIHsJCQkvKiBJZiB0aGlzIGlzIHRoZSByZXNwb25zZSB0byAqLworCXFidWZwID0gcXVl cnlidWY7CQkvKiBhIHF1ZXJ5IHRoYXQgd2Ugc2VudCwgaW5pdGlhbGl6ZSAqLworCXFidWZuID0g MDsJCQkvKiB0aGUgcmVzcG9uc2UgYnVmZmVyICovCisJcXVlcnlidWZbMF0gPSBOVUw7CisgICAg fQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgd2hhdCA9IFdfUkVNTzsJCQkvKiB3ZSdyZSBkb2lu ZyBhIFJFTU9URSBjb21tYW5kICovCisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNs b3RzdGF0ZSh3aGF0LAorCQkJICBzZXJ2ZXIgPyAiU0VSVkVSIiA6ICIiLAorCQkJICAiUkVDRUlW RSIsCisJCQkgIGZzcGVjCisJCQkgICk7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBCRUdJTiBy YXR0cjsJCQkvKiBFeHBlY3QgQXR0cmlidXRlIHBhY2tldHMgKi8KK30KKworPHJhdHRyPkEgewkJ CQkvKiBBdHRyaWJ1dGUgcGFja2V0ICovCisgICAgaWYgKGdhdHRyKHJkYXRhcCwmaWF0dHIpID09 IDApIHsJLyogUmVhZCBpbnRvIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgKi8KKyNpZmRlZiBDS19SRVNF TkQKKwlhY2sxKChDSEFSICopaWF0dHIucmVwbHkudmFsKTsJLyogUmVwbHkgd2l0aCBkYXRhICov CisjZWxzZQorCWFjaygpOwkJCQkvKiBJZiBPSywgYWNrbm93bGVkZ2UgKi8KKyNlbmRpZiAvKiBD S19SRVNFTkQgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2UgKi8KKwlleHRlcm4gbG9u ZyBmc2l6ZTsKKwljaGFyICpyOworCXIgPSBnZXRyZWFzb24oaWF0dHIucmVwbHkudmFsKTsKKwlh Y2sxKChDSEFSICopaWF0dHIucmVwbHkudmFsKTsJLyogcmVmdXNlIHRvIGFjY2VwdCB0aGUgZmls ZSAqLworCXh4c2NyZWVuKFNDUl9TVCxTVF9SRUZVLDBMLHIpOwkvKiByZWFzb24gKi8KKyNpZmRl ZiBUTE9HCisJaWYgKHRyYWxvZyAmJiAhdGxvZ2ZtdCkKKwkgIGRveGxvZyh3aGF0LGZpbG5hbSxm c2l6ZSxiaW5hcnksMSxyKTsKKyNlbmRpZiAvKiBUTE9HICovCisgICAgfQorfQorCis8cmF0dHI+ RCB7CQkJCS8qIEZpcnN0IGRhdGEgcGFja2V0ICovCisgICAgZGVidWcoRjEwMCwiPHJhdHRyPiBE IGZpcnN0ZGF0YSIsIiIsMCk7CisgICAgcmMgPSByY3ZfZmlyc3RkYXRhKCk7CisgICAgZGVidWco RjEwMSwicmN2X2ZpcnN0ZGF0YSByYyIsIiIscmMpOworICAgIGlmIChyYyA+IC0xKSByZXR1cm4o cmMpOwkJLyogKHNlZSBiZWxvdykgKi8KK30KKworPHJmaWxlPkIgewkJCQkvKiBFT1QsIG5vIG1v cmUgZmlsZXMgKi8KKyAgICBhY2soKTsJCQkJLyogQWNrbm93bGVkZ2UgdGhlIEIgcGFja2V0ICov CisgICAgcmVvdCgpOwkJCQkvKiBEbyBFT1QgdGhpbmdzICovCisjaWZkZWYgQ0tfVE1QRElSCisv KiBJZiB3ZSB3ZXJlIGNkJ2QgdGVtcG9yYXJpbHkgdG8gYW5vdGhlciBkZXZpY2Ugb3IgZGlyZWN0 b3J5IC4uLiAqLworICAgIGlmIChmX3RtcGRpcikgeworCWludCB4OworCXggPSB6Y2hkaXIoKGNo YXIgKikgc2F2ZGlyKTsJLyogLi4uIHJlc3RvcmUgcHJldmlvdXMgZGlyZWN0b3J5ICovCisJZl90 bXBkaXIgPSAwOwkJCS8qIGFuZCByZW1lbWJlciB3ZSBkaWQgaXQuICovCisJZGVidWcoRjExMSwi Y2tjcHJvLncgQiB0bXBkaXIgcmVzdG9yaW5nIixzYXZkaXIseCk7CisgICAgfQorI2VuZGlmIC8q IENLX1RNUERJUiAqLworICAgIFJFU1VNRTsJCQkJLyogYW5kIHF1aXQgKi8KK30KKworPHJkcGt0 PkQgewkJCQkvKiBHb3QgRGF0YSBwYWNrZXQgKi8KKyAgICBkZWJ1ZyhGMTAxLCI8cmRwa3Q+RCBj eHNlZW4iLCIiLGN4c2Vlbik7CisgICAgZGVidWcoRjEwMSwiPHJkcGt0PkQgY3pzZWVuIiwiIixj enNlZW4pOworICAgIGlmIChjeHNlZW4gfHwgY3pzZWVuIHx8IGRpc2NhcmQpIHsJLyogSWYgZmls ZSBvciBncm91cCBpbnRlcnJ1cHRpb24gKi8KKwlDSEFSICogbXNnOworCW1zZyA9IGN6c2VlbiA/ IChDSEFSICopIloiIDogKENIQVIgKikiWCI7CisjaWZkZWYgU1RSRUFNSU5HCisJaWYgKHN0cmVh bWluZykgewkJLyogTmVlZCB0byBjYW5jZWwgKi8KKwkgICAgZGVidWcoRjExMSwiPHJkcGt0PkQg c3RyZWFtaW5nIGNhbmNlbCIsbXNnLGNhbmNlbCk7CisJICAgIGlmIChjYW5jZWwrKyA9PSAwKSB7 CS8qIE9ubHkgZG8gdGhpcyBvbmNlICovCisJCWFjazEobXNnKTsJCS8qIFB1dCAiWCIgb3IgIloi IGluIEFDSyAqLworCSAgICB9IGVsc2UgaWYgKGN6c2VlbikgeworCQllcnJwa3QoKENIQVIgKiki VXNlciBjYW5jZWxlZCIpOworCQlSRVNVTUU7CisJICAgIH0gZWxzZSB7CisJCWZhc3RhY2soKTsK KwkgICAgfQorCX0gZWxzZQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAgYWNrMShtc2cpOwor ICAgIH0gZWxzZSB7CQkJCS8qIE5vIGludGVycnVwdGlvbiAqLworCWludCByYywgcWY7CisjaWZu ZGVmIE5PU1BMCisJcWYgPSBxdWVyeTsKKyNlbHNlCisJcWYgPSAwOworI2VuZGlmIC8qIE5PU1BM ICovCisjaWZkZWYgQ0tUVU5JTkcKKwlyYyA9IChiaW5hcnkgJiYgIXBhcml0eSkgPworCSAgYmRl Y29kZShyZGF0YXAscHV0ZmlsKToKKwkgICAgZGVjb2RlKHJkYXRhcCwgcWYgPyBwdXR0cm0gOiBw dXRmaWwsIDEpOworI2Vsc2UKKwlyYyA9IGRlY29kZShyZGF0YXAsIHFmID8gcHV0dHJtIDogcHV0 ZmlsLCAxKTsKKyNlbmRpZiAvKiBDS1RVTklORyAqLworCWlmIChyYyA8IDApIHsKKwkgICAgZGlz Y2FyZCA9IChrZWVwID09IDAgfHwgKGtlZXAgPT0gU0VUX0FVVE8gJiYgYmluYXJ5ICE9IFhZRlRf VCkpOworCSAgICBlcnJwa3QoKENIQVIgKikiRXJyb3Igd3JpdGluZyBkYXRhIik7IC8qIElmIGZh aWx1cmUsICovCisJICAgIFJFU1VNRTsKKwl9IGVsc2UJCQkJLyogRGF0YSB3cml0dGVuIE9LLCBz ZW5kIEFDSyAqLworI2lmZGVmIFNUUkVBTUlORworCSAgaWYgKHN0cmVhbWluZykKKwkgICAgZmFz dGFjaygpOworCWVsc2UKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwkgIGFjaygpOworICAgIH0K K30KKworPHJhdHRyPlogewkJCQkvKiBFT0YgaW1tZWRpYXRlbHkgYWZ0ZXIgQS1QYWNrZXQuICov CisgICAgcmZfZXJyID0gIkNhbid0IGNyZWF0ZSBmaWxlIjsKKyAgICB0aW1pbnQgPSBzX3RpbWlu dDsKKyAgICBpZiAoZGlzY2FyZCkgewkJCS8qIERpc2NhcmRpbmcgYSByZWFsIGZpbGUuLi4gKi8K Kwl4ID0gMTsKKyAgICB9IGVsc2UgaWYgKHhmbGcpIHsJCQkvKiBJZiBzY3JlZW4gZGF0YSAqLwor CWlmIChyZW1maWxlKSB7CQkJLyogcmVkaXJlY3RlZCB0byBmaWxlICovCisJICAgIGlmIChyZW1w aXBlKQkJLyogb3IgcGlwZSAqLworCSAgICAgIHggPSBvcGVuYyhaT0ZJTEUscmVtZGVzdCk7IC8q IFBpcGU6IHN0YXJ0IGNvbW1hbmQgKi8KKwkgICAgZWxzZQorCSAgICAgIHggPSBvcGVuYShyZW1k ZXN0LCZpYXR0cik7IC8qIEZpbGU6IG9wZW4gd2l0aCBhdHRyaWJ1dGVzICovCisJfSBlbHNlIHsJ CQkvKiBvdGhlcndpc2UgKi8KKwkgICAgeCA9IG9wZW50KCZpYXR0cik7CQkvKiAib3BlbiIgdGhl IHNjcmVlbiAqLworCX0KKyNpZmRlZiBDQUxJQlJBVEUKKyAgICB9IGVsc2UgaWYgKGNhbGlicmF0 ZSkgewkJLyogSWYgY2FsaWJyYXRpb24gcnVuICovCisJeCA9IGNrb3BlbngoJmlhdHRyKTsJCS8q IGRvIHRoaXMgKi8KKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBv dGhlcndpc2UgKi8KKwl4ID0gb3BlbmEoZmlsbmFtLCZpYXR0cik7CS8qIG9wZW4gdGhlIGZpbGUs IHdpdGggYXR0cmlidXRlcyAqLworCWlmICh4ID09IC0xNykgewkJCS8qIFJFR0VUIHNraXBwZWQg YmVjYXVzZSBzYW1lIHNpemUgKi8KKwkgICAgZGlzY2FyZCA9IDE7CisJICAgIHJlamVjdGlvbiA9 IDE7CisJfQorICAgIH0KKyAgICBpZiAoIXggfHwgcmVvZihmaWxuYW0sICZpYXR0cikgPCAwKSB7 IC8qIENsb3NlIG91dHB1dCBmaWxlICovCisJZXJycGt0KChDSEFSICopIHJmX2Vycik7CS8qIElm IHByb2JsZW0sIHNlbmQgZXJyb3IgbXNnICovCisJUkVTVU1FOwkJCQkvKiBhbmQgcXVpdCAqLwor ICAgIH0gZWxzZSB7CQkJCS8qIG90aGVyd2lzZSAqLworCWlmICh4ID09IC0xNykKKwkgIHh4c2Ny ZWVuKFNDUl9TVCxTVF9TS0lQLFNLUF9SRVMsIiIpOworCWFjaygpOwkJCQkvKiBhY2tub3dsZWRn ZSB0aGUgRU9GIHBhY2tldCAqLworCUJFR0lOIHJmaWxlOwkJCS8qIGFuZCBhd2FpdCBhbm90aGVy IGZpbGUgKi8KKyAgICB9Cit9CisKKzxyZHBrdD5xIHsgIAkJCQkvKiBDdHJsLUMgb3IgY29ubmVj dGlvbiBsb3NzLiAqLworICAgIHRpbWludCA9IHNfdGltaW50OworICAgIHdpbmRvdygxKTsJCQkJ LyogU2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLworICAgIGN4c2VlbiA9IDE7CisgICAg eCA9IGNsc29mKDEpOwkJCS8qIENsb3NlIGZpbGUgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IDAp OwkJLyogRmFpbGVkICovCit9CisKKzxyZHBrdD5aIHsJCQkJLyogRW5kIE9mIEZpbGUgKEVPRikg UGFja2V0ICovCisvKiAgd3Nsb3RzID0gMTsJKi8JCQkvKiAoZG9uJ3Qgc2V0KSBXaW5kb3cgc2l6 ZSBiYWNrIHRvIDEgKi8KKyNpZm5kZWYgQ09IRVJFTlQgLyogQ29oZXJlbnQgY29tcGlsZXIgYmxv d3MgdXAgb24gdGhpcyBzd2l0Y2goKSBzdGF0ZW1lbnQuICovCisgICAgeCA9IHJlb2YoZmlsbmFt LCAmaWF0dHIpOwkJLyogSGFuZGxlIHRoZSBFT0YgcGFja2V0ICovCisgICAgc3dpdGNoICh4KSB7 CQkJLyogcmVvZigpIHNldHMgdGhlIHN1Y2Nlc3MgZmxhZyAqLworICAgICAgY2FzZSAtNToJCQkJ LyogSGFuZGxlIHByb2JsZW1zICovCisJZXJycGt0KChDSEFSICopIlJFTkFNRSBmYWlsZWQiKTsg LyogRmF0YWwgKi8KKwlSRVNVTUU7CisJYnJlYWs7CisgICAgICBjYXNlIC00OgorCWVycnBrdCgo Q0hBUiAqKSJNT1ZFIGZhaWxlZCIpOwkvKiBGYXRhbCAqLworCVJFU1VNRTsKKwlicmVhazsKKyAg ICAgIGNhc2UgLTM6CQkJCS8qIElmIHByb2JsZW0sIHNlbmQgZXJyb3IgbXNnICovCisJZXJycGt0 KChDSEFSICopIkNhbid0IHByaW50IGZpbGUiKTsgLyogRmF0YWwgKi8KKwlSRVNVTUU7CisJYnJl YWs7CisgICAgICBjYXNlIC0yOgorCWVycnBrdCgoQ0hBUiAqKSJDYW4ndCBtYWlsIGZpbGUiKTsg LyogRmF0YWwgKi8KKwlSRVNVTUU7CisJYnJlYWs7CisgICAgICBjYXNlIDI6CQkJCS8qIE5vdCBm YXRhbCAqLworICAgICAgY2FzZSAzOgorCXh4c2NyZWVuKFNDUl9FTSwwLDBMLCJSZWNlaXZlciBj YW4ndCBkZWxldGUgdGVtcCBmaWxlIik7CisJUkVTVU1FOworCWJyZWFrOworICAgICAgZGVmYXVs dDoKKwlpZiAoeCA8IDApIHsJCQkvKiBGYXRhbCAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQ2Fu J3QgY2xvc2UgZmlsZSIpOworCSAgICBSRVNVTUU7CisJfSBlbHNlIHsJCQkvKiBTdWNjZXNzICov CisjaWZuZGVmIE5PU1BMCisJICAgIGlmIChxdWVyeSkJCQkvKiBRdWVyeSByZXBvbnNlcyBnZW5l cmFsbHkgKi8KKwkgICAgICBjb25vbGwoIiIpOwkJLyogZG9uJ3QgaGF2ZSBsaW5lIHRlcm1pbmF0 b3JzICovCisjZW5kaWYgLyogTk9TUEwgKi8KKwkgICAgaWYgKGN6c2VlbikgewkJLyogQmF0Y2gg Y2FuY2VsZWQ/ICovCisJCWlmIChjYW5jZWwrKyA9PSAwKSB7CS8qIElmIHdlIGhhdmVuJ3QgdHJp ZWQgdGhpcyB5ZXQgKi8KKwkJICAgIGFjazEoKENIQVIgKikiWiIpOwkvKiBUcnkgaXQgb25jZSAq LworCQl9IGVsc2UgewkJLyogT3RoZXJ3aXNlICovCisJCSAgICBlcnJwa3QoKENIQVIgKikiVXNl ciBjYW5jZWxlZCIpOyAvKiBxdWl0ZSB3aXRoIEVycm9yICovCisJCSAgICBSRVNVTUU7CisJCX0K KwkgICAgfSBlbHNlCisJICAgICAgYWNrKCk7CQkJLyogQWNrbm93bGVkZ2UgdGhlIEVPRiBwYWNr ZXQgKi8KKwkgICAgQkVHSU4gcmZpbGU7CQkvKiBhbmQgYXdhaXQgYW5vdGhlciBmaWxlICovCisJ fQorICAgIH0KKyNlbHNlCisgICAgaWYgKHJlb2YoZmlsbmFtLCAmaWF0dHIpIDwgMCkgewkvKiBD bG9zZSB0aGUgZmlsZSAqLworCWVycnBrdCgoQ0hBUiAqKSJFcnJvciBhdCBlbmQgb2YgZmlsZSIp OworCVJFU1VNRTsKKyAgICB9IGVsc2UgewkJCQkvKiByZW9mKCkgc2V0cyBzdWNjZXNzIGZsYWcg Ki8KKwlhY2soKTsKKwlCRUdJTiByZmlsZTsKKyAgICB9CisjZW5kaWYgLyogQ09IRVJFTlQgKi8K K30KKworPHNzaW5pdD5ZIHsJCQkJLyogQUNLIGZvciBTZW5kLUluaXQgKi8KKyAgICBzcGFyKHJk YXRhcCk7CQkJLyogc2V0IHBhcmFtZXRlcnMgZnJvbSBpdCAqLworICAgIGNhbmNlbCA9IDA7Cisg ICAgaWYgKGJjdGYpIHsKKwliY3R1ID0gMzsKKwliY3RsID0gMzsKKyAgICB9IGVsc2UgeworCWJj dHUgPSBiY3RyOwkJCS8qIHN3aXRjaCB0byBhZ3JlZWQtdXBvbiBibG9jayBjaGVjayAqLworCWJj dGwgPSAoYmN0dSA9PSA0KSA/IDIgOiBiY3R1OwkvKiBTZXQgYmxvY2stY2hlY2sgbGVuZ3RoICov CisgICAgfQorCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgaWYgKChzZW5kbW9kZSA9PSBTTV9SRVNF TkQpICYmICghYXRjYXB1IHx8ICFyc2NhcHUpKSB7IC8qIFJFU0VORCAqLworCWVycnBrdCgoQ0hB UiAqKSAiUkVTRU5EIGNhcGFiaWxpdGllcyBub3QgbmVnb3RpYXRlZCIpOworCVJFU1VNRTsKKyAg ICB9IGVsc2UgeworI2VuZGlmIC8qIENLX1JFU0VORCAqLworCXdoYXQgPSBXX1NFTkQ7CQkJLyog UmVtZW1iZXIgd2UncmUgc2VuZGluZyAqLworCWxhc3R4ZmVyID0gV19TRU5EOworCXggPSBzZmls ZSh4ZmxnKTsJCS8qIFNlbmQgWCBvciBGIGhlYWRlciBwYWNrZXQgKi8KKwljYW5jZWwgPSAwOwkJ CS8qIFJlc2V0IGNhbmNlbGxhdGlvbiBjb3VudGVyICovCisJaWYgKHgpIHsJCQkvKiBJZiB0aGUg cGFja2V0IHdhcyBzZW50IE9LICovCisJICAgIGlmICgheGZsZyAmJiBmaWxjbnQgPT0gMSkJLyog YW5kIGl0J3MgYSByZWFsIGZpbGUgKi8KKwkgICAgICBjcmMxNiA9IDBMOwkJLyogQ2xlYXIgdGhl IGZpbGUgQ1JDICovCisJICAgIHJlc2V0YygpOwkJCS8qIHJlc2V0IHBlci10cmFuc2FjdGlvbiBj b3VudGVycyAqLworCSAgICBydGltZXIoKTsJCQkvKiByZXNldCB0aW1lcnMgKi8KKyNpZmRlZiBH RlRJTUVSCisJICAgIHJmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJICAgIHN0cmVh bW9uKCk7CQkJLyogdHVybiBvbiBzdHJlYW1pbmcgKi8KKyNpZmRlZiBJS1NEQgorCSAgICBpZiAo aWtkYm9wZW4pIHNsb3RzdGF0ZSh3aGF0LAorCQkJCSAgKHNlcnZlciA/ICJTRVJWRVIiIDogIiIp LAorCQkJCSAgIlNFTkQiLAorCQkJCSAgZmlsbmFtCisJCQkJICApOworI2VuZGlmIC8qIElLU0RC ICovCisJICAgIEJFR0lOIHNzZmlsZTsJCS8qIGFuZCBzd2l0Y2ggdG8gcmVjZWl2ZS1maWxlIHN0 YXRlICovCisJfSBlbHNlIHsJCQkvKiBvdGhlcndpc2Ugc2VuZCBlcnJvciBtc2cgJiBxdWl0ICov CisJICAgIHMgPSB4ZmxnID8gIkNhbid0IGV4ZWN1dGUgY29tbWFuZCIgOiAoY2hhciAqKWVwa3Rt c2c7CisJICAgIGlmICghKnMpIHMgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKKwkgICAgZXJycGt0KChD SEFSICopcyk7CisJICAgIFJFU1VNRTsKKwl9CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgfQorI2Vu ZGlmIC8qIENLX1JFU0VORCAqLworfQorCisvKgorICBUaGVzZSBzdGF0ZXMgYXJlIG5lY2Vzc2Fy eSB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgc2VydmVyIGNvbW1hbmQKKyAgcGFj a2V0IChSLCBHLCBvciBDKSByZXBseSB3aXRoIGFuIFMgcGFja2V0LCBidXQgdGhlIGNsaWVudCBy ZXRyYW5zbWl0cyB0aGUKKyAgY29tbWFuZCBwYWNrZXQuICBUaGUgaW5wdXQoKSBmdW5jdGlvbiBk b2Vzbid0IGNhdGNoIHRoaXMgYmVjYXVzZSB0aGUgcGFja2V0CisgIG51bWJlciBpcyBzdGlsbCB6 ZXJvLgorKi8KKzxzc2luaXQ+UiB7CQkJCS8qIFIgcGFja2V0IHdhcyByZXRyYW5zbWl0dGVkLiAq LworICAgIHhzaW5pdCgpOwkJCQkvKiBSZXNlbmQgcGFja2V0IDAgKi8KK30KKworPHNzaW5pdD5H IHsJCQkJLyogU2FtZSBkZWFsIGlmIEcgcGFja2V0IGNvbWVzIGFnYWluICovCisgICAgeHNpbml0 KCk7Cit9CisKKy8qIHNob3VsZCBwcm9iYWJseSBhZGQgY2FzZXMgZm9yIE8sIFcsIFYsIEgsIEos IC4uLiAqLworCis8c3Npbml0PkMgewkJCQkvKiBTYW1lIGRlYWwgaWYgQyBwYWNrZXQgY29tZXMg YWdhaW4gKi8KKyAgICB4c2luaXQoKTsKK30KKworPHNzZmlsZT5ZIHsJCQkJLyogQUNLIGZvciBG IG9yIFggcGFja2V0ICovCisgICAgc3J2cHRyID0gc3J2Y21kOwkJCS8qIFBvaW50IHRvIHN0cmlu ZyBidWZmZXIgKi8KKyAgICBkZWNvZGUocmRhdGFwLHB1dHNydiwwKTsJCS8qIERlY29kZSBkYXRh IGZpZWxkLCBpZiBhbnkgKi8KKyAgICBwdXRzcnYoTlVMKTsJCQkvKiBUZXJtaW5hdGUgd2l0aCBu dWxsICovCisgICAgZmZjID0gMEw7CQkJCS8qIFJlc2V0IGZpbGUgYnl0ZSBjb3VudGVyICovCisg ICAgZGVidWcoRjEwMSwiPHNzZmlsZT5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKKyAgICBpZiAoKnNy dmNtZCkgewkJCS8qIElmIHJlbW90ZSBuYW1lIHdhcyByZWNvcmRlZCAqLworICAgICAgICBpZiAo c2VuZG1vZGUgIT0gU01fUkVTRU5EKSB7CisJICAgIGlmIChmZGlzcGxhID09IFhZRkRfQyB8fCBm ZGlzcGxhID09IFhZRkRfUykKKwkgICAgICB4eHNjcmVlbihTQ1JfQU4sMCwwTCwoY2hhciAqKXNy dmNtZCk7CisJICAgIHRsb2coRjExMCwiIHJlbW90ZSBuYW1lOiIsKGNoYXIgKikgc3J2Y21kLDBM KTsKKwkgICAgbWFrZXN0cigmcHNyZnNwZWMsKGNoYXIgKilzcnZjbWQpOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChjeHNlZW58fGN6c2VlbikgewkJLyogSW50ZXJydXB0ZWQ/ICovCisJZGVi dWcoRjEwMSwiPHNzZmlsZT5ZIGNhbmNlbGluZyIsIiIsMCk7CisJeCA9IGNsc2lmKCk7CQkJLyog Q2xvc2UgaW5wdXQgZmlsZSAqLworCXN4ZW9mKDEpOwkJCS8qIFNlbmQgRU9GKEQpICovCisJQkVH SU4gc3Nlb2Y7CQkJLyogYW5kIHN3aXRjaCB0byBFT0Ygc3RhdGUuICovCisgICAgfSBlbHNlIGlm IChhdGNhcHUpIHsJCS8qIElmIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIHVzZWQgKi8KKwlpZiAoc2F0 dHIoeGZsZyB8IHN0ZGluZiwgMSkgPCAwKSB7IC8qIHNlbmQgdGhlbSAqLworCSAgICBlcnJwa3Qo KENIQVIgKikiQ2FuJ3Qgc2VuZCBhdHRyaWJ1dGVzIik7IC8qIGlmIHByb2JsZW0sIHNheSBzbyAq LworCSAgICBSRVNVTUU7CQkJLyogYW5kIHF1aXQgKi8KKwl9IGVsc2UgQkVHSU4gc3NhdHRyOwkJ LyogaWYgb2ssIHN3aXRjaCB0byBhdHRyaWJ1dGUgc3RhdGUgKi8KKyAgICB9IGVsc2UgewkJCQkv KiBBdHRyaWJ1dGVzIG5vdCBuZWdvdGlhdGVkICovCisJaWYgKHdpbmRvdyh3c2xvdG4pIDwgMCkg ewkvKiBPcGVuIHdpbmRvdyAqLworCSAgICBlcnJwa3QoKENIQVIgKikiQ2FuJ3Qgb3BlbiB3aW5k b3ciKTsKKwkgICAgUkVTVU1FOworCX0gZWxzZSBpZiAoKHggPSBzZGF0YSgpKSA9PSAtMikgeyAv KiBTZW5kIGZpcnN0IGRhdGEgcGFja2V0IGRhdGEgKi8KKwkgICAgd2luZG93KDEpOwkJCS8qIENv bm5lY3Rpb24gbG9zdCwgcmVzZXQgd2luZG93ICovCisJICAgIHggPSBjbHNpZigpOwkJLyogQ2xv c2UgaW5wdXQgZmlsZSAqLworCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkvKiBSZXR1cm4gZmFp bHVyZSAqLworCX0gZWxzZSBpZiAoeCA9PSAtOSkgewkJLyogVXNlciBpbnRlcnJ1cHRlZCAqLwor CSAgICBlcnJwa3QoKENIQVIgKikiVXNlciBjYW5jZWxsZWQiKTsgLyogU2VuZCBFcnJvciBwYWNr ZXQgKi8KKwkgICAgd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4g Ki8KKwkgICAgdGltaW50ID0gc190aW1pbnQ7CQkvKiBSZXN0b3JlIHRpbWVvdXQgKi8KKwkgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsJLyogRmFpbGVkICovCisJfSBlbHNlIGlmICh4IDwgMCkgewkJ LyogRU9GIChlbXB0eSBmaWxlKSBvciBpbnRlcnJ1cHRlZCAqLworCSAgICB3aW5kb3coMSk7CQkJ LyogcHV0IHdpbmRvdyBzaXplIGJhY2sgdG8gMSwgKi8KKwkgICAgZGVidWcoRjEwMSwiPHNzZmls ZT5ZIGN4c2VlbiIsIiIsY3hzZWVuKTsKKwkgICAgeCA9IGNsc2lmKCk7CQkvKiBJZiBub3Qgb2ss IGNsb3NlIGlucHV0IGZpbGUsICovCisJICAgIGlmICh4IDwgMCkJCQkvKiB0cmVhdGluZyBmYWls dXJlIGFzIGludGVycnVwdGlvbiAqLworCSAgICAgIGN4c2VlbiA9IDE7CQkvKiBTZW5kIEVPRiBw YWNrZXQgKi8KKwkgICAgc2VvZihjeHNlZW58fGN6c2Vlbik7CisJICAgIEJFR0lOIHNzZW9mOwkJ LyogYW5kIHN3aXRjaCB0byBFT0Ygc3RhdGUuICovCisJfSBlbHNlIHsJCQkvKiBGaXJzdCBkYXRh IHNlbnQgT0sgKi8KKwkgICAgQkVHSU4gc3NkYXRhOwkJLyogQWxsIG9rLCBzd2l0Y2ggdG8gc2Vu ZC1kYXRhIHN0YXRlICovCisJfQorICAgIH0KK30KKworPHNzYXR0cj5ZIHsJCQkJLyogR290IEFD SyB0byBBIHBhY2tldCAqLworICAgIGZmYyA9IDBMOwkJCQkvKiBSZXNldCBmaWxlIGJ5dGUgY291 bnRlciAqLworICAgIGRlYnVnKEYxMDEsIjxzc2F0dHI+WSBjeHNlZW4iLCIiLGN4c2Vlbik7Cisg ICAgaWYgKGN4c2Vlbnx8Y3pzZWVuKSB7CQkvKiBJbnRlcnJ1cHRlZD8gKi8KKwlkZWJ1ZyhGMTAx LCI8c2F0dHI+WSBjYW5jZWxpbmciLCIiLDApOworCXggPSBjbHNpZigpOwkJCS8qIENsb3NlIGlu cHV0IGZpbGUgKi8KKwlzeGVvZigxKTsJCQkvKiBTZW5kIEVPRihEKSAqLworCUJFR0lOIHNzZW9m OwkJCS8qIGFuZCBzd2l0Y2ggdG8gRU9GIHN0YXRlLiAqLworICAgIH0gZWxzZSBpZiAocnNhdHRy KHJkYXRhcCkgPCAwKSB7CS8qIFdhcyB0aGUgZmlsZSByZWZ1c2VkPyAqLworCWRpc2NhcmQgPSAx OwkJCS8qIFNldCB0aGUgZGlzY2FyZCBmbGFnICovCisJY2xzaWYoKTsJCQkvKiBDbG9zZSB0aGUg ZmlsZSAqLworCXN4ZW9mKDEpOwkJCS8qIHNlbmQgRU9GIHdpdGggImRpc2NhcmQiIGNvZGUgKi8K KwlCRUdJTiBzc2VvZjsJCQkvKiBzd2l0Y2ggdG8gc2VuZC1FT0Ygc3RhdGUgKi8KKyAgICB9IGVs c2UgaWYgKCh4ID0gc2F0dHIoeGZsZyB8IHN0ZGluZiwgMCkpIDwgMCkgeyAvKiBTZW5kIG1vcmU/ ICovCisJZXJycGt0KChDSEFSICopIkNhbid0IHNlbmQgYXR0cmlidXRlcyIpOyAvKiBUcm91Ymxl Li4uICovCisJUkVTVU1FOworICAgIH0gZWxzZSBpZiAoeCA9PSAwKSB7CQkvKiBObyBtb3JlIHRv IHNlbmQgc28gbm93IHRoZSBkYXRhICovCisJaWYgKHdpbmRvdyh3c2xvdG4pIDwgMCkgewkvKiBB bGxvY2F0ZSBuZWdvdGlhdGVkIHdpbmRvdyBzbG90cyAqLworCSAgICBlcnJwa3QoKENIQVIgKiki Q2FuJ3Qgb3BlbiB3aW5kb3ciKTsKKwkgICAgUkVTVU1FOworCX0KKwlpZiAoKHggPSBzZGF0YSgp KSA9PSAtMikgewkvKiBGaWxlIGFjY2VwdGVkLCBzZW5kIGZpcnN0IGRhdGEgKi8KKwkgICAgd2lu ZG93KDEpOwkJCS8qIENvbm5lY3Rpb24gYnJva2VuICovCisJICAgIHggPSBjbHNpZigpOwkJLyog Q2xvc2UgZmlsZSAqLworCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOwkvKiBSZXR1cm4gZmFpbHVy ZSAqLworCX0gZWxzZSBpZiAoeCA9PSAtOSkgewkJLyogVXNlciBpbnRlcnJ1cHRlZCAqLworCSAg ICBlcnJwa3QoKENIQVIgKikiVXNlciBjYW5jZWxsZWQiKTsgLyogU2VuZCBFcnJvciBwYWNrZXQg Ki8KKwkgICAgd2luZG93KDEpOwkJCS8qIFNldCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8K KwkgICAgdGltaW50ID0gc190aW1pbnQ7CQkvKiBSZXN0b3JlIHRpbWVvdXQgKi8KKwkgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsJLyogRmFpbGVkICovCisJfSBlbHNlIGlmICh4IDwgMCkgewkJLyog SWYgZGF0YSB3YXMgbm90IHNlbnQgKi8KKwkgICAgd2luZG93KDEpOwkJCS8qIHB1dCB3aW5kb3cg c2l6ZSBiYWNrIHRvIDEsICovCisJICAgIGRlYnVnKEYxMDEsIjxzc2F0dHI+WSBjeHNlZW4iLCIi LGN4c2Vlbik7CisJICAgIGlmIChjbHNpZigpIDwgMCkJCS8qIENsb3NlIGlucHV0IGZpbGUgKi8K KwkgICAgICBjeHNlZW4gPSAxOwkJLyogU2VuZCBFT0YgcGFja2V0ICovCisJICAgIHNlb2YoY3hz ZWVufHxjenNlZW4pOworCSAgICBCRUdJTiBzc2VvZjsJCS8qIGFuZCBzd2l0Y2ggdG8gRU9GIHN0 YXRlLiAqLworCX0gZWxzZSB7CisJICAgIEJFR0lOIHNzZGF0YTsJCS8qIEFsbCBvaywgc3dpdGNo IHRvIHNlbmQtZGF0YSBzdGF0ZSAqLworCX0KKyAgICB9Cit9CisKKzxzc2RhdGE+cSB7ICAJCQkJ LyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zcy4gKi8KKyAgICB3aW5kb3coMSk7CQkJCS8qIFNl dCB3aW5kb3cgc2l6ZSBiYWNrIHRvIDEuLi4gKi8KKyAgICBjeHNlZW4gPSAxOwkJCQkvKiBUbyBp bmRpY2F0ZSBpbnRlcnJ1cHRpb24gKi8KKyAgICB4ID0gY2xzaWYoKTsJCQkvKiBDbG9zZSBmaWxl ICovCisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIEZhaWxlZCAqLworfQorCis8c3NkYXRh PlkgewkJCQkvKiBHb3QgQUNLIHRvIERhdGEgcGFja2V0ICovCisgICAgY2FubmVkKHJkYXRhcCk7 CQkJLyogQ2hlY2sgaWYgZmlsZSB0cmFuc2ZlciBjYW5jZWxsZWQgKi8KKyAgICBkZWJ1ZyhGMTEx LCI8c3NkYXRhPlkgY3hzZWVuIixyZGF0YXAsY3hzZWVuKTsKKyAgICBkZWJ1ZyhGMTExLCI8c3Nk YXRhPlkgY3pzZWVuIixyZGF0YXAsY3pzZWVuKTsKKyAgICBpZiAoKHggPSBzZGF0YSgpKSA9PSAt MikgewkJLyogVHJ5IHRvIHNlbmQgbmV4dCBkYXRhICovCisJd2luZG93KDEpOwkJCS8qIENvbm5l Y3Rpb24gbG9zdCwgcmVzZXQgd2luZG93ICovCisJeCA9IGNsc2lmKCk7CQkJLyogQ2xvc2UgZmls ZSAqLworCXJldHVybihzdWNjZXNzID0gMCk7CQkvKiBGYWlsZWQgKi8KKyAgICB9IGVsc2UgaWYg KHggPT0gLTkpIHsJCS8qIFVzZXIgaW50ZXJydXB0ZWQgKi8KKwllcnJwa3QoKENIQVIgKikiVXNl ciBjYW5jZWxsZWQiKTsgLyogU2VuZCBFcnJvciBwYWNrZXQgKi8KKwl3aW5kb3coMSk7CQkJLyog U2V0IHdpbmRvdyBzaXplIGJhY2sgdG8gMS4uLiAqLworCXRpbWludCA9IHNfdGltaW50OwkJLyog UmVzdG9yZSBvcmlnaW5hbCB0aW1lb3V0ICovCisJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsJCS8qIEZh aWxlZCAqLworICAgIH0gZWxzZSBpZiAoeCA8IDApIHsJCQkvKiBFT0YgLSBmaW5pc2hlZCBzZW5k aW5nIGRhdGEgKi8KKwlkZWJ1ZyhGMTAxLCI8c3NkYXRhPlkgY3hzZWVuIiwiIixjeHNlZW4pOwor CXdpbmRvdygxKTsJCQkvKiBTZXQgd2luZG93IHNpemUgYmFjayB0byAxLi4uICovCisJaWYgKGNs c2lmKCkgPCAwKQkJLyogQ2xvc2UgaW5wdXQgZmlsZSAqLworCSAgY3hzZWVuID0gMTsJCQkvKiBT ZW5kIEVPRiBwYWNrZXQgKi8KKwlkZWJ1ZyhGMTAxLCI8c3NkYXRhPlkgQ0FMTElORyBTRU9GKCki LCIiLGN4c2Vlbik7CisJc2VvZihjeHNlZW58fGN6c2Vlbik7CisJQkVHSU4gc3Nlb2Y7CQkJLyog YW5kIGVudGVyIHNlbmQtZW9mIHN0YXRlICovCisgICAgfQorICAgIC8qIE5PVEU6IElmIHggPT0g MCBpdCBtZWFucyB3ZSdyZSBkcmFpbmluZzogc2VlIHNkYXRhKCkhICovCit9CisKKzxzc2VvZj5Z IHsJCQkJLyogR290IEFDSyB0byBFT0YgKi8KKyAgICBpbnQgZywgeGRpc2NhcmQ7CisgICAgY2Fu bmVkKHJkYXRhcCk7CQkJLyogQ2hlY2sgaWYgZmlsZSB0cmFuc2ZlciBjYW5jZWxsZWQgKi8KKyAg ICBkZWJ1ZyhGMTExLCI8c3Nlb2Y+WSBjeHNlZW4iLHJkYXRhcCxjeHNlZW4pOworICAgIGRlYnVn KEYxMTEsIjxzc2VvZj5ZIGN6c2VlbiIscmRhdGFwLGN6c2Vlbik7CisgICAgZGVidWcoRjExMSwi PHNzZW9mPlkgZGlzY2FyZCIscmRhdGFwLGRpc2NhcmQpOworICAgIHhkaXNjYXJkID0gZGlzY2Fy ZDsKKyAgICBkaXNjYXJkID0gMDsKKyAgICBzdWNjZXNzID0gKGN4c2VlbiA9PSAwICYmIGN6c2Vl biA9PSAwKTsgLyogVHJhbnNmZXIgc3RhdHVzLi4uICovCisgICAgZGVidWcoRjEwMSwiPHNzZW9m Plkgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7CisgICAgaWYgKHN1Y2Nlc3MgJiYgcmVqZWN0aW9uID4g MCkJICAgIC8qIElmIHJlamVjdGVkLCBzdWNjZWVkIGlmICovCisgICAgICBpZiAocmVqZWN0aW9u ICE9ICcjJyAmJgkJICAgIC8qIHJlYXNvbiB3YXMgZGF0ZSAqLworCSAgcmVqZWN0aW9uICE9IDEg JiYgcmVqZWN0aW9uICE9ICc/JykgLyogb3IgbmFtZTsgKi8KKwlzdWNjZXNzID0gMDsJCQkgICAg LyogZmFpbCBvdGhlcndpc2UuICovCisgICAgY3hzZWVuID0gMDsJCQkJLyogVGhpcyBnb2VzIGJh Y2sgdG8gemVyby4gKi8KKyAgICBpZiAoc3VjY2VzcykgewkJCS8qIE9ubHkgaWYgdHJhbnNmZXIg c3VjY2VlZGVkLi4uICovCisJeHhzY3JlZW4oU0NSX1NULFNUX09LLDBMLCIiKTsKKwlpZiAoIXhk aXNjYXJkKSB7CisJICAgIG1ha2VzdHIoJnNmc3BlYyxwc2ZzcGVjKTsJLyogUmVjb3JkIGZpbGVu YW1lcyBmb3IgV0hFUkUgKi8KKwkgICAgbWFrZXN0cigmc3Jmc3BlYyxwc3Jmc3BlYyk7CisJfQor CWlmIChtb3ZpbmcpIHsJCQkvKiBJZiBNT1ZFJ2luZyAqLworCSAgICB4ID0gemRlbGV0KGZpbG5h bSk7CQkvKiBUcnkgdG8gZGVsZXRlIHRoZSBzb3VyY2UgZmlsZSAqLworI2lmZGVmIFRMT0cKKwkg ICAgaWYgKHRyYWxvZykgeworCQlpZiAoeCA+IC0xKSB7CisJCSAgICB0bG9nKEYxMTAsIiBkZWxl dGVkIixmaWxuYW0sMCk7CisJCX0gZWxzZSB7CisJCSAgICB0bG9nKEYxMTAsIiBkZWxldGUgZmFp bGVkOiIsY2tfZXJyc3RyKCksMCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIFRMT0cgKi8KKwl9 IGVsc2UgaWYgKHNuZF9tb3ZlKSB7CQkvKiBPciBtb3ZlIGl0ICovCisJICAgIGludCB4OworCSAg ICB4ID0genJlbmFtZShmaWxuYW0sc25kX21vdmUpOworI2lmZGVmIFRMT0cKKwkgICAgaWYgKHRy YWxvZykgeworCQlpZiAoeCA+IC0xKSB7CisJCSAgICB0bG9nKEYxMTAsIiBtb3ZlZCB0byAiLHNu ZF9tb3ZlLDApOworCQl9IGVsc2UgeworCQkgICAgdGxvZyhGMTEwLCIgbW92ZSBmYWlsZWQ6Iixj a19lcnJzdHIoKSwwKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVExPRyAqLworCX0gZWxzZSBp ZiAoc25kX3JlbmFtZSkgewkvKiBPciByZW5hbWUgaXQgKi8KKwkgICAgY2hhciAqcyA9IHNuZF9y ZW5hbWU7CS8qIFJlbmFtaW5nIHN0cmluZyAqLworI2lmbmRlZiBOT1NQTAorCSAgICBpbnQgeTsJ CQkvKiBQYXNzIGl0IHRocnUgdGhlIGV2YWx1YXRvciAqLworCSAgICBleHRlcm4gaW50IGNtZF9x dW90aW5nOwkvKiBmb3IgXHYoZmlsZW5hbWUpICovCisJICAgIGlmIChjbWRfcXVvdGluZykgewkJ LyogQnV0IG9ubHkgaWYgY21kX3F1b3RpbmcgaXMgb24gKi8KKwkJeSA9IE1BWFJQOworCQlzID0g KGNoYXIgKilzcnZjbWQ7CisJCXp6c3RyaW5nKHNuZF9yZW5hbWUsJnMsJnkpOworCQlzID0gKGNo YXIgKilzcnZjbWQ7CisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICBpZiAocykgaWYg KCpzKSB7CisJCWludCB4OworCQl4ID0genJlbmFtZShmaWxuYW0scyk7CisjaWZkZWYgVExPRwor CSAgICBpZiAodHJhbG9nKSB7CisJCWlmICh4ID4gLTEpIHsKKwkJICAgIHRsb2coRjExMCwiIHJl bmFtZWQgdG8iLHMsMCk7CisJCX0gZWxzZSB7CisJCSAgICB0bG9nKEYxMTAsIiByZW5hbWUgZmFp bGVkOiIsY2tfZXJyc3RyKCksMCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIFRMT0cgKi8KKyNp ZmRlZiBDT01NRU5UCisJCSpzID0gTlVMOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgfQor CX0KKyAgICB9CisgICAgaWYgKGN6c2VlbikgewkJCS8qIENoZWNrIGdyb3VwIGludGVycnVwdGlv biBmbGFnICovCisJZyA9IDA7CQkJCS8qIE5vIG1vcmUgZmlsZXMgaWYgaW50ZXJydXB0ZWQgKi8K KyAgICB9IGVsc2UgewkJCQkvKiBPdGhlcndpc2UuLi4gKi8KKyNpZmRlZiBDT01NRU5UCisJLyog VGhpcyBjb2RlIG1ha2VzIGFueSBvcGVuIGVycm9yIGZhdGFsIHRvIGEgZmlsZS1ncm91cCB0cmFu c2Zlci4gKi8KKwlnID0gZ25maWxlKCk7CisJZGVidWcoRjExMSwiPHNzZW9mPlkgZ25maWxlIixm aWxuYW0sZyk7CisJaWYgKGcgPiAwKSB7CQkJLyogQW55IG1vcmUgZmlsZXMgdG8gc2VuZD8gKi8K KwkgICAgaWYgKHNmaWxlKHhmbGcpKQkJLyogWWVzLCB0cnkgdG8gc2VuZCBuZXh0IGZpbGUgaGVh ZGVyICovCisJICAgICAgQkVHSU4gc3NmaWxlOwkJLyogaWYgb2ssIGVudGVyIHNlbmQtZmlsZSBz dGF0ZSAqLworCSAgICBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkJcyA9IHhmbGcgPyAiQ2Fu J3QgZXhlY3V0ZSBjb21tYW5kIiA6IChjaGFyICopZXBrdG1zZzsKKwkJaWYgKCEqcykgcyA9ICJD YW4ndCBvcGVuIGZpbGUiOworCQllcnJwa3QoKENIQVIgKilzKTsJLyogc2VuZCBlcnJvciBtZXNz YWdlICovCisJCVJFU1VNRTsJCQkvKiBhbmQgcXVpdCAqLworCSAgICB9CisJfSBlbHNlIHsJCQkv KiBObyBuZXh0IGZpbGUgKi8KKwkgICAgdHNlY3MgPSBndGltZXIoKTsJCS8qIGdldCBzdGF0aXN0 aWNzIHRpbWVycyAqLworI2lmZGVmIEdGVElNRVIKKwkgICAgZnB0c2VjcyA9IGdmdGltZXIoKTsK KyNlbmRpZiAvKiBHRlRJTUVSICovCisJICAgIHNlb3QoKTsJCQkvKiBzZW5kIEVPVCBwYWNrZXQg Ki8KKwkgICAgQkVHSU4gc3Nlb3Q7CQkvKiBlbnRlciBzZW5kLWVvdCBzdGF0ZSAqLworCX0KKyNl bHNlICAvKiBDT01NRU5UICovCisJd2hpbGUgKDEpIHsJCQkvKiBLZWVwIHRyeWluZy4uLiAqLwor CSAgICBnID0gZ25maWxlKCk7CQkvKiBHZXQgbmV4dCBmaWxlICovCisJICAgIGRlYnVnKEYxMTEs Ijxzc2VvZj5ZIGduZmlsZSIsZmlsbmFtLGcpOworCSAgICBpZiAoZyA9PSAwICYmIGduZmVycm9y ID09IDApIC8qIE5vIG1vcmUsIHN0b3AgdHJ5aW5nICovCisJICAgICAgYnJlYWs7CisJICAgIGlm IChnID4gMCkgewkJLyogSGF2ZSBvbmUgKi8KKwkJaWYgKHNmaWxlKHhmbGcpKSB7CS8qIFRyeSB0 byBvcGVuIGFuZCBzZW5kIEYgcGFja2V0ICovCisJCSAgICBCRUdJTiBzc2ZpbGU7CS8qIElmIE9L LCBlbnRlciBzZW5kLWZpbGUgc3RhdGUgKi8KKwkJICAgIGJyZWFrOwkJLyogYW5kIGJyZWFrIG91 dCBvZiBsb29wLiAqLworCQl9CisJICAgIH0gLyogT3RoZXJ3aXNlIGtlZXAgdHJ5aW5nIHRvIGdl dCBvbmUgd2UgY2FuIHNlbmQuLi4gKi8KKwl9CisgICAgfQorICAgIGlmIChnID09IDApIHsKKwlk ZWJ1ZyhGMTAxLCI8c3Nlb2Y+WSBubyBtb3JlIGZpbGVzIiwiIixjenNlZW4pOworCXRzZWNzID0g Z3RpbWVyKCk7CQkvKiBHZXQgc3RhdGlzdGljcyB0aW1lcnMgKi8KKyNpZmRlZiBHRlRJTUVSCisJ ZnB0c2VjcyA9IGdmdGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJc2VvdCgpOwkJCQkv KiBTZW5kIEVPVCBwYWNrZXQgKi8KKwlCRUdJTiBzc2VvdDsJCQkvKiBFbnRlciBzZW5kLWVvdCBz dGF0ZSAqLworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisKKzxzc2VvdD5ZIHsJCQkJ LyogR290IEFDSyB0byBFT1QgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzc2VvdCBqdXN0b25lIiwiIixq dXN0b25lKTsKKyAgICBSRVNVTUU7CQkJCS8qIEFsbCBkb25lLCBqdXN0IHF1aXQgKi8KK30KKwor RSB7CQkJCQkvKiBHb3QgRXJyb3IgcGFja2V0LCBpbiBhbnkgc3RhdGUgKi8KKyAgICBjaGFyICpz ID0gIiI7CisgICAgd2luZG93KDEpOwkJCQkvKiBDbG9zZSB3aW5kb3cgKi8KKyAgICB0aW1pbnQg PSBzX3RpbWludDsJCQkvKiBSZXN0b3JlIG9yaWdpbmFsIHRpbWVvdXQgKi8KKyAgICBpZiAoKmVw a3Rtc2cpCQkJLyogTWVzc2FnZSBmcm9tIEVycm9yIHBhY2tldCAqLworICAgICAgcyA9IChjaGFy ICopZXBrdG1zZzsKKyAgICBpZiAoISpzKSB7CQkJCS8qIElmIG5vdCB0aGVyZSB0aGVuIG1heWJl IGhlcmUgKi8KKwlzID0gKGNoYXIgKilyZGF0YXA7CisJY2tzdHJuY3B5KChjaGFyICopZXBrdG1z ZywoY2hhciAqKXJkYXRhcCxQS1RNU0dMRU4pOworICAgIH0KKyAgICBpZiAoISpzKQkJCQkvKiBI b3BlZnVsbHkgd2UnbGwgbmV2ZXIgc2VlIHRoaXMuICovCisgICAgICBzID0gIlVua25vd24gZXJy b3IiOworICAgIHN1Y2Nlc3MgPSAwOwkJCS8qIEZvciBJRiBTVUNDRVNTL0ZBSUwuICovCisgICAg ZGVidWcoRjEwMSwiY2tjcHJvLncganVzdG9uZSBhdCBFIHBrdCIsIiIsanVzdG9uZSk7CisKKyAg ICBzdWNjZXNzID0gMDsJCQkvKiBUcmFuc2ZlciBmYWlsZWQgKi8KKyAgICB4ZmVyc3RhdCA9IHN1 Y2Nlc3M7CQkJLyogUmVtZW1iZXIgdHJhbnNmZXIgc3RhdHVzICovCisgICAgaWYgKCFlcGt0c2Vu dCkgeworCXggPSBxdWlldDsgcXVpZXQgPSAxOwkJLyogQ2xvc2UgZmlsZXMgc2lsZW50bHksICov CisJZXBrdHJjdmQgPSAxOwkJCS8qIFByZXZlbnQgbWVzc2FnZXMgZnJvbSBjbHNvZigpICovCisJ Y2xzaWYoKTsKKwljbHNvZigxKTsgCQkJLyogZGlzY2FyZGluZyBhbnkgb3V0cHV0IGZpbGUuICov CisJZXJtc2cocyk7CQkJLyogSXNzdWUgdGhlIG1lc3NhZ2UgKGNhbGxzIHNjcmVlbikuICovCisJ cXVpZXQgPSB4OwkJCS8qIFJlc3RvcmUgcXVpZXQgc3RhdGUgKi8KKyAgICB9CisgICAgdHN0YXRz KCk7CQkJCS8qIEdldCBzdGF0cyAqLworLyoKKyAgSWYgd2UgYXJlIGV4ZWN1dGluZyBjb21tYW5k cyBmcm9tIGEgY29tbWFuZCBmaWxlIG9yIG1hY3JvLCBsZXQgdGhlIGNvbW1hbmQKKyAgZmlsZSBv ciBtYWNybyBkZWNpZGUgd2hldGhlciB0byBleGl0LCBiYXNlZCBvbiBTRVQgeyBUQUtFLCBNQUNS TyB9IEVSUk9SLgorKi8KKyAgICBpZiAoCisjaWZuZGVmIE5PSUNQCisJIXhjbWRzcmMgJiYKKyNl bmRpZiAvKiBOT0lDUCAqLworCWJhY2tncmQgJiYgIXNlcnZlcikKKyAgICAgIGZhdGFsKCJQcm90 b2NvbCBlcnJvciIpOworICAgIHhpdHN0YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsJLyogU2F2ZSB0 aGlzIGZvciBkb2V4aXQoKS4gKi8KKyNpZmRlZiBDS19UTVBESVIKKy8qIElmIHdlIHdlcmUgY2Qn ZCB0ZW1wb3JhcmlseSB0byBhbm90aGVyIGRldmljZSBvciBkaXJlY3RvcnkgLi4uICovCisgICAg aWYgKGZfdG1wZGlyKSB7CisJaW50IHg7CisJeCA9IHpjaGRpcigoY2hhciAqKSBzYXZkaXIpOwkv KiAuLi4gcmVzdG9yZSBwcmV2aW91cyBkaXJlY3RvcnkgKi8KKwlmX3RtcGRpciA9IDA7CQkJLyog YW5kIHJlbWVtYmVyIHdlIGRpZCBpdC4gKi8KKwlkZWJ1ZyhGMTExLCJja2Nwcm8udyBFIHRtcGRp ciByZXN0b3JlZCIsc2F2ZGlyLHgpOworICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyNp ZmRlZiBJS1NEQgorICAgIGlmIChpa2Rib3Blbikgc2xvdHN0YXRlKHdoYXQsIkVSUk9SIiwgKGNo YXIgKillcGt0bXNnLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKyAgICBSRVNVTUU7Cit9CisK K3EgeyBzdWNjZXNzID0gMDsgUVVJVDsgfQkJLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zcy4g Ki8KKworLiB7CQkJCQkvKiBBbnl0aGluZyBub3QgYWNjb3VudGVkIGZvciBhYm92ZSAqLworICAg IGVycnBrdCgoQ0hBUiAqKSJVbmV4cGVjdGVkIHBhY2tldCB0eXBlIik7IC8qIEdpdmUgZXJyb3Ig bWVzc2FnZSAqLworICAgIHdpbmRvdygxKTsKKyAgICB4aXRzdGEgfD0gKHdoYXQgJiBXX0tFUk1J VCk7CS8qIFNhdmUgdGhpcyBmb3IgZG9leGl0KCkuICovCisgICAgUkVTVU1FOwkJCQkvKiBhbmQg cXVpdCAqLworfQorCislJQorCisvKgorICBGcm9tIGhlcmUgZG93biB0byBwcm90bygpIGFyZSBy b3V0aW5lcyB0aGF0IHdlcmUgbW92ZWQgb3V0IG9mIHRoZSBzdGF0ZQorICB0YWJsZSBzd2l0Y2hl ciBiZWNhdXNlIHRoZSByZXN1bHRpbmcgc3dpdGNoKCkgaGFkIGJlY29tZSB0b28gbGFyZ2UuCisg IFRvIG1vdmUgdGhlIGNvbnRlbnRzIG9mIGEgc3RhdGUtdGFibGUgY2FzZSB0byBhIHJvdXRpbmU6 CisgICAgMS4gQWRkIGEgcHJvdG90eXBlIHRvIHRoZSBsaXN0IGFib3ZlIHRoZSBzdGF0ZSB0YWJs ZSBzd2l0Y2hlci4KKyAgICAyLiBNYWtlIGEgcm91dGluZSB3aXRoIGFuIGFwcHJvcHJpYXRlIG5h bWUsIHJldHVybmluZyBpbnQuCisgICAgMy4gTW92ZSB0aGUgY29kZSBpbnRvIGl0LgorICAgIDQu IFB1dCBhIGNhbGwgdG8gdGhlIG5ldyByb3V0aW5lIGluIHRoZSBmb3JtZXIgc3BvdDoKKyAgICAg ICAgIHJjID0gbmFtZV9vZl9yb3V0aW5lKCk7CisgICAgICAgICBpZiAocmMgPiAtMSkgcmV0dXJu KHJjKTsKKyAgICA1LiBBZGQgInJldHVybigtMSk7IiBhZnRlciBldmVyeSBSRVNVTUUsIFNFUlZF LCBvciBCRUdJTiBtYWNybyBhbmQKKyAgICAgICBhdCB0aGUgZW5kIGlmIHRoZSBjb2RlIGlzIG9w ZW4tZW5kZWQuCisqLworc3RhdGljIGludAorcmN2X2ZpcnN0ZGF0YSgpIHsKKyAgICBleHRlcm4g aW50IGRpc3BvczsKKyAgICBkZWJ1ZyhGMTAxLCJyY3ZfZmlyc3RkYXRhIiwiIixkaXNwb3MpOwor CisgICAgaWYgKGRpc2NhcmQpIHsJCQkvKiBpZiB3ZSdyZSBkaXNjYXJkaW5nIHRoZSBmaWxlICov CisJYWNrMSgoQ0hBUiAqKSJYIik7CQkvKiBqdXN0IGFjayB0aGUgZGF0YSBsaWtlIHRoaXMuICov CisJY2FuY2VsKys7CQkJLyogYW5kIGNvdW50IGl0ICovCisJQkVHSU4gcmRwa3Q7CQkJLyogYW5k IHdhaXQgZm9yIG1vcmUgZGF0YSBwYWNrZXRzLiAqLworCXJldHVybigtMSk7CisgICAgfSBlbHNl IHsJCQkJLyogTm90IGRpc2NhcmRpbmcuICovCisJcmZfZXJyID0gIkNhbid0IG9wZW4gZmlsZSI7 CisJaWYgKHhmbGcpIHsJCQkvKiBJZiBzY3JlZW4gZGF0YSAqLworCSAgICBpZiAocmVtZmlsZSkg ewkJLyogcmVkaXJlY3RlZCB0byBmaWxlICovCisJCWlmIChyZW1waXBlKQkJLyogb3IgcGlwZSAq LworCQkgIHggPSBvcGVuYyhaT0ZJTEUscmVtZGVzdCk7IC8qIFBpcGU6IHN0YXJ0IGNvbW1hbmQg Ki8KKwkJZWxzZQorCQkgIHggPSBvcGVuYShyZW1kZXN0LCZpYXR0cik7IC8qIEZpbGU6IG9wZW4g d2l0aCBhdHRyaWJ1dGVzICovCisJICAgIH0gZWxzZSB7CQkJLyogb3RoZXJ3aXNlICovCisJCXgg PSBvcGVudCgmaWF0dHIpOwkvKiAib3BlbiIgdGhlIHNjcmVlbiAqLworCSAgICB9CisJfSBlbHNl IHsJCQkvKiBvdGhlcndpc2UgKi8KKyNpZmRlZiBDQUxJQlJBVEUKKwkgICAgaWYgKGNhbGlicmF0 ZSkgewkJLyogSWYgY2FsaWJyYXRpb24gcnVuICovCisJCXggPSBja29wZW54KCZpYXR0cik7CS8q IG9wZW4gbm90aGluZyAqLworI2lmZGVmIFNUUkVBTUlORworCQlpZiAoc3RyZWFtaW5nKQkJLyog U3RyZWFtaW5nICovCisJCSAgZmFzdGFjaygpOwkJLyogQUNLIHdpdGhvdXQgQUNLaW5nLiAqLwor CQllbHNlCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJCSAgYWNrKCk7CQkvKiBTZW5kIHJlYWwg QUNLICovCisJCUJFR0lOIHJkcGt0OwkJLyogUHJvY2VlZCB0byBuZXh0IHN0YXRlICovCisJCXJl dHVybigtMSk7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIENBTElCUkFURSAqLworI2lmZGVmIFVO SVgKKy8qCisgIEluIFVOSVggd2UgY2FuIHBpcGUgdGhlIGZpbGUgZGF0YSBpbnRvIHRoZSBtYWls IHByb2dyYW0sIHdoaWNoIGlzIHRvIGJlCisgIHByZWZlcnJlZCB0byB3cml0aW5nIGl0IG91dCB0 byBhIHRlbXAgZmlsZSBhbmQgdGhlbiBtYWlsaW5nIGl0IGFmdGVyd2FyZHMuCisgIFRoaXMgZGVw ZW5kcyByYXRoZXIgaGVhdmlseSBvbiBhbGwgVU5JWGVzIGhhdmluZyBhIG1haWwgY29tbWFuZCB0 aGF0CisgIGFjY2VwdHMgJy1zICJzdWJqZWN0Iicgb24gdGhlIGNvbW1hbmQgbGluZS4gIE1BSUxD TUQgKGUuZy4gbWFpbCwgTWFpbCwgbWFpbHgpCisgIGlzIGRlZmluZWQgaW4gY2t1ZmlvLmMuCisq LworCSAgICBpZiAoZGlzcG9zID09ICdNJykgewkvKiBNYWlsLi4uICovCisJCWNoYXIgKnM7CisJ CWNoYXIgKiB0bXAgPSBOVUxMOworCQlpbnQgbiA9IDA7CisJCWV4dGVybiBjaGFyICpNQUlMQ01E OworCQlzID0gaWF0dHIuZGlzcC52YWwgKyAxOworCQluID0gKGludClzdHJsZW4oTUFJTENNRCkg KyAgICAvKiBNYWlsIGNvbW1hbmQgKi8KKwkJICAoaW50KXN0cmxlbihzKSArCSAgICAgIC8qIGFk ZHJlc3MgKi8KKwkJICAoaW50KXN0cmxlbihvZmlsbmFtKSArIDMyOyAgLyogc3ViamVjdCAqLwor CQlpZiAodG1wID0gKGNoYXIgKiltYWxsb2MobikpIHsKKwkJICAgIGNrbWFreG1zZyh0bXAsbiwK KwkJCSAgICAgIE1BSUxDTUQsIiAtcyBcIiIsb2ZpbG5hbSwiXCIgIixzLAorCQkJICAgICAgTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisJCSAgICBkZWJ1ZyhGMTExLCJyY3Zf Zmlyc2RhdGEgbWFpbCIsdG1wLChpbnQpc3RybGVuKHRtcCkpOworCQkgICAgeCA9IG9wZW5jKFpP RklMRSwoY2hhciAqKXRtcCk7CisJCSAgICBmcmVlKHRtcCk7CisJCX0gZWxzZQorCQkgIHggPSAw OworCSAgICB9IGVsc2UgaWYgKGRpc3BvcyA9PSAnUCcpIHsgLyogRGl0dG8gZm9yIHByaW50ICov CisJCWNoYXIgKiB0bXAgPSBOVUxMOworCQlpbnQgbjsKKwkJZXh0ZXJuIGNoYXIgKlBSSU5UQ01E OworCQluID0gKGludClzdHJsZW4oUFJJTlRDTUQpICsgKGludClzdHJsZW4oaWF0dHIuZGlzcC52 YWwrMSkgKyA0OworCQlpZiAodG1wID0gKGNoYXIgKiltYWxsb2MobikpIHsKKwkJICAgIHNwcmlu dGYodG1wLAkvKiBzYWZlIChwcmVjaGVja2VkKSAqLworCQkJICAgICIlcyAlcyIsIFBSSU5UQ01E LCBpYXR0ci5kaXNwLnZhbCArIDEpOworCQkgICAgeCA9IG9wZW5jKFpPRklMRSwoY2hhciAqKXRt cCk7CisJCSAgICBmcmVlKHRtcCk7CisJCX0gZWxzZQorCQkgIHggPSAwOworCSAgICB9IGVsc2UK KyNlbmRpZiAvKiBVTklYICovCisJICAgICAgeCA9IG9wZW5hKGZpbG5hbSwmaWF0dHIpOwkvKiBv cGVuIHRoZSBmaWxlLCB3aXRoIGF0dHJpYnV0ZXMgKi8KKwl9CisJaWYgKHgpIHsJCQkvKiBJZiBm aWxlIHdhcyBvcGVuZWQgb2sgKi8KKwkgICAgaW50IHJjLCBxZjsKKyNpZm5kZWYgTk9TUEwKKwkg ICAgcWYgPSBxdWVyeTsKKyNlbHNlCisJICAgIHFmID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLwor CisjaWZkZWYgQ0tUVU5JTkcKKwkgICAgcmMgPSAoYmluYXJ5ICYmICFwYXJpdHkpID8KKwkgICAg ICBiZGVjb2RlKHJkYXRhcCxwdXRmaWwpOgorCSAgICAgICBkZWNvZGUocmRhdGFwLCBxZiA/IHB1 dHRybSA6IHB1dGZpbCwgMSk7CisjZWxzZQorCSAgICByYyA9IGRlY29kZShyZGF0YXAsIHFmID8g cHV0dHJtIDogcHV0ZmlsLCAxKTsKKyNlbmRpZiAvKiBDS1RVTklORyAqLworCSAgICBpZiAocmMg PCAwKSB7CisJCWVycnBrdCgoQ0hBUiAqKSJFcnJvciB3cml0aW5nIGRhdGEiKTsKKwkJUkVTVU1F OworCQlyZXR1cm4oLTEpOworCSAgICB9CisjaWZkZWYgU1RSRUFNSU5HCisJICAgIGlmIChzdHJl YW1pbmcpCQkvKiBTdHJlYW1pbmcgd2FzIG5lZ290aWF0ZWQgKi8KKwkgICAgICBmYXN0YWNrKCk7 CQkvKiBBQ0sgd2l0aG91dCBBQ0tpbmcuICovCisJICAgIGVsc2UKKyNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KKwkgICAgICBhY2soKTsJCQkvKiBhY2tub3dsZWRnZSBpdCAqLworCSAgICBCRUdJTiBy ZHBrdDsJCS8qIGFuZCBzd2l0Y2ggdG8gcmVjZWl2ZS1kYXRhIHN0YXRlICovCisJICAgIHJldHVy bigtMSk7CisJfSBlbHNlIHsJCQkvKiBvdGhlcndpc2UgKi8KKwkgICAgZXJycGt0KChDSEFSICop IHJmX2Vycik7CS8qIHNlbmQgZXJyb3IgcGFja2V0ICovCisgICAgCSAgICBSRVNVTUU7CQkJLyog YW5kIHF1aXQuICovCisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KK30KKworc3RhdGljIGlu dAorcmN2X3Nob3J0cmVwbHkoKSB7CisjaWZkZWYgUEtUWkVST0hBQ0sKKyAgICBzdWNjZXNzID0g MDsKKyAgICBkZWJ1ZyhGMTExLCJyY3Zfc2hvcnRyZXBseSIscmRhdGFwLGlwa3RsZW4pOworICAg IGlmIChpcGt0YWNrWzBdICYmICFzdHJuY21wKGlwa3RhY2ssKGNoYXIgKilyZGF0YXAsaXBrdGxl bikpIHsKKwkvKiBObyBpdCdzIHRoZSBBQ0sgdG8gdGhlIEkgcGFja2V0IGFnYWluICovCisJeCA9 IHNjbWQodmNtZCwoQ0hBUiAqKWNtYXJnKTsJLyogU28gc2VuZCB0aGUgUkVNT1RFIGNvbW1hbmQg YWdhaW4gKi8KKwkvKiBNYXliZSB0aGlzIHNob3VsZCBiZSByZXNlbmQoKSAqLworCWRlYnVnKEYx MTAsIklQS1RaRVJPSEFDSyIsaXBrdGFjayx4KTsKKwlpZiAoeCA8IDApIHsKKwkgICAgZXJycGt0 KChDSEFSICopc3JpbXNnKTsKKwkgICAgUkVTVU1FOworCSAgICByZXR1cm4oLTEpOworCX0KKyAg ICB9IGVsc2UgeworCWlwa3RhY2tbMF0gPSBOVUw7CisjZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8K Kwl1cnNlcnZlciA9IDE7CisjaWZuZGVmIE5PU0VSVkVSCisjaWZuZGVmIE5PU1BMCisJaWYgKHF1 ZXJ5KSB7CQkJLyogSWYgdG8gcXVlcnksICovCisJICAgIHFidWZwID0gcXVlcnlidWY7CQkvKiAg aW5pdGlhbGl6ZSBxdWVyeSByZXNwb25zZSBidWZmZXIgKi8KKwkgICAgcWJ1Zm4gPSAwOworCSAg ICBxdWVyeWJ1ZlswXSA9IE5VTDsKKwl9CisjZW5kaWYgLyogTk9TUEwgKi8KKwl4ID0gMTsKKwlp ZiAocmVtZmlsZSkgewkJCS8qIFJlc3BvbnNlIHJlZGlyZWN0ZWQgdG8gZmlsZSAqLworCSAgICBy Zl9lcnIgPSAiQ2FuJ3Qgb3BlbiBmaWxlIjsKKwkgICAgaWYgKHJlbXBpcGUpCQkvKiBvciBwaXBl ICovCisJICAgICAgeCA9CisjaWZuZGVmIE5PUFVTSAorCQl6eGNtZChaT0ZJTEUscmVtZGVzdCkJ LyogUGlwZTogU3RhcnQgY29tbWFuZCAqLworI2Vsc2UKKwkJMAorI2VuZGlmIC8qIE5PUFVTSCAq LworCQk7CisJICAgIGVsc2UKKwkgICAgICB4ID0gb3BlbmEocmVtZGVzdCwmaWF0dHIpOyAvKiBG aWxlOiBPcGVuIHdpdGggYXR0cmlidXRlcyAqLworCSAgICBkZWJ1ZyhGMTExLCJyY3Zfc2hvcnRy ZXBseSByZW1maWxlIixyZW1kZXN0LHgpOworCX0gZWxzZSB7CisJICAgIHggPSBvcGVudCgmaWF0 dHIpOwkJLyogIm9wZW4iIHRoZSBzY3JlZW4gKi8KKwl9CisJaWYgKHgpIHsJCQkvKiBJZiBmaWxl IHdhcyBvcGVuZWQgb2sgKi8KKwkgICAgaWYgKGRlY29kZShyZGF0YXAsCisjaWZuZGVmIE5PU1BM CisJCSAgICAgICAocXVlcnkgfHwgIXJlbWZpbGUpID8gcHV0dHJtIDoKKyNlbHNlCisJCSAgICAg ICAhcmVtZmlsZSA/IHB1dHRybSA6CisjZW5kaWYgLyogTk9TUEwgKi8KKwkJICAgICAgIHpwdXRm aWwsIDEpIDwgMCkgeyAvKiBOb3RlOiB6cHV0ZmlsLCBub3QgcHV0ZmlsLiAqLworCQllcnJwa3Qo KENIQVIgKikiRXJyb3Igd3JpdGluZyBkYXRhIik7CisJCVJFU1VNRTsKKwkJcmV0dXJuKC0xKTsK KwkgICAgfSBlbHNlIHsKKwkJaWYgKHJkYXRhcCkJCS8qIElmIHdlIGhhZCBkYXRhICovCisJCSAg aWYgKCpyZGF0YXApCQkvKiBhZGQgYSBsaW5lIHRlcm1pbmF0b3IgKi8KKwkJICAgIGlmIChyZW1m aWxlKSB7CS8qIHRvIGZpbGUgKi8KKwkJCXpzb3V0bChaT0ZJTEUsIiIpOworCQkgICAgfSBlbHNl IHsJCS8qIG9yIHRvIHNjcmVlbi4gKi8KKyNpZm5kZWYgTk9JQ1AKKwkJCWlmICghcXVlcnkgfHwg IXhjbWRzcmMpCisjZW5kaWYgLyogTk9JQ1AgKi8KKwkJCSAgaWYgKCEocXVpZXQgJiYgcmNkYWN0 aXZlKSkKKwkJCSAgICBjb25vbGwoIiIpOworCQkgICAgfQorCQlpZiAoYnllX2FjdGl2ZSAmJiBu ZXR3b3JrKSB7IC8qIEkgc2VudCBCWUUgb3IgUkVNT1RFIExPR09VVCAqLworCQkgICAgbXNsZWVw KDUwMCk7CS8qIGNvbW1hbmQgYW5kIGdvdCB0aGUgQUNLLi4uICovCisJCSAgICBieWVfYWN0aXZl ID0gMDsKKwkJICAgIHR0Y2xvcygwKTsKKwkJfQorCQljbHNvZigwKTsKKwkJaWYgKCFlcGt0c2Vu dCAmJiAhZXBrdHJjdmQpIC8qIElmIG5vIGVycm9yIHBhY2tldC4uLiAqLworCQkgIHN1Y2Nlc3Mg PSAxOwkJLyogc3VjY2Vzcy4gKi8KKwkJUkVTVU1FOworCQlyZXR1cm4oLTEpOworCSAgICB9CisJ fSBlbHNlIHsJCQkvKiBGaWxlIG5vdCBvcGVuZWQgT0sgKi8KKwkgICAgZXJycGt0KChDSEFSICop IHJmX2Vycik7CS8qIHNlbmQgZXJyb3IgbWVzc2FnZSAqLworCSAgICBSRVNVTUU7CQkJLyogYW5k IHF1aXQuICovCisJICAgIHJldHVybigtMSk7CisJfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisj aWZkZWYgUEtUWkVST0hBQ0sKKyAgICB9CisjZW5kaWYgLyogUEtUWkVST0hBQ0sgKi8KKyAgICBk ZWJ1ZyhGMTAxLCJyY3Zfc2hvcnRyZXBseSBmYWxsdGhydSIsIiIsc3VjY2Vzcyk7CisgICAgcmV0 dXJuKC0xKTsKK30KKworCitzdGF0aWMgaW50CitzcnZfcXVlcnkoKSB7CisjaWZuZGVmIE5PU0VS VkVSCisjaWZuZGVmIE5PU1BMCisgICAgY2hhciBjOworI2lmZGVmIENLU1lTTE9HCisgICAgaWYg KGNreHN5c2xvZyA+PSBTWVNMR19QUiAmJiBja3hsb2dnaW5nKQorICAgICAgY2tzeXNsb2coU1lT TEdfUFIsIDEsICJzZXJ2ZXIiLCAiUkVNT1RFIFFVRVJZIiwgKGNoYXIgKilzcnZjbWQpOworI2Vu ZGlmIC8qIENLU1lTTE9HICovCisjaWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHNsb3Rz dGF0ZSh3aGF0LCJSRU1PVEUgUVVFUlkiLCAoY2hhciAqKShzcnZjbWQrMiksICIiKTsKKyNlbmRp ZiAvKiBJS1NEQiAqLworICAgIGMgPSAqKHNydmNtZCsyKTsJCQkvKiBRID0gUXVlcnksIFMgPSBT ZXQgKi8KKyAgICBpZiAoYyA9PSAnUScpIHsJCQkvKiBRdWVyeSAqLworCWlmICghRU5BQkxFRChl bl9xdWUpKSB7IC8qIFNlY3VyaXR5ICovCisJICAgIGVycnBrdCgoQ0hBUiAqKSJSRU1PVEUgUVVF UlkgZGlzYWJsZWQiKTsKKwkgICAgUkVTVU1FOworCSAgICByZXR1cm4oLTEpOworCX0gZWxzZSB7 CQkJLyogUXVlcnkgYWxsb3dlZCAqLworCSAgICBpbnQgbjsgY2hhciAqcCwgKnE7CisJICAgIHFi dWZwID0gcXVlcnlidWY7CQkvKiBXaXBlIG91dCBvbGQgc3R1ZmYgKi8KKwkgICAgcWJ1Zm4gPSAw OworCSAgICBxdWVyeWJ1ZlswXSA9IE5VTDsKKwkgICAgcCA9IChjaGFyICopIHNydmNtZCArIDM7 CS8qIFBvaW50ZXIgZm9yIG1ha2luZyB3cmFwcGVyICovCisJICAgIG4gPSBzdHJsZW4oKGNoYXIg KilzcnZjbWQpOwkvKiBQb3NpdGlvbiBvZiBlbmQgKi8KKwkgICAgYyA9ICooc3J2Y21kKzQpOwkJ LyogV2hpY2ggdHlwZSBvZiB2YXJpYWJsZSAqLworCisJICAgIGlmICgqKHNydmNtZCs2KSA9PSBD TURRKSB7CS8qIFN0YXJ0cyB3aXRoIGNvbW1hbmQgcXVvdGU/ICovCisJCXAgPSAoY2hhciAqKSBz cnZjbWQgKyA2OyAvKiBUYWtlIGl0IGxpdGVyYWxseSAqLworCQlpZiAoKnAgPT0gQ01EUSkgcCsr OworCSAgICB9IGVsc2UgewkJCS8qIFRoZXkgcGxheWVkIGJ5IHRoZSBydWxlcyAqLworCQlpZiAo YyA9PSAnSycpIHsJCS8qIEtlcm1pdCB2YXJpYWJsZSAqLworCQkgICAgaW50IGs7CisJCSAgICBr ID0gKGludCkgc3RybGVuKHApOworCQkgICAgaWYgKGsgPiAwICYmIHBbay0xXSA9PSAnKScpIHsK KwkJCXAgPSAoY2hhciAqKShzcnZjbWQgKyA0KTsKKwkJCSooc3J2Y21kKzQpID0gQ01EUTsKKwkJ CSooc3J2Y21kKzUpID0gJ2YnOyAvKiBGdW5jdGlvbiwgc28gbWFrZSBpdCBcZi4uLigpICovCisJ CSAgICB9IGVsc2UgeworCQkJKihzcnZjbWQrMykgPSBDTURROyAvKiBTdHVmZiB3cmFwcGluZyBp bnRvIGJ1ZmZlciAqLworCQkJKihzcnZjbWQrNCkgPSAndic7ICAvKiBWYXJpYWJsZSwgc28gbWFr ZSBpdCBcdiguLi4pICovCisJCQkqKHNydmNtZCs1KSA9ICcoJzsgIC8qIGFyb3VuZCB2YXJpYWJs ZSBuYW1lICovCisJCQkqKHNydmNtZCtuKSA9ICcpJzsKKwkJCSooc3J2Y21kK24rMSkgPSBOVUw7 CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICAqKHNydmNtZCszKSA9IENNRFE7IC8qIFN0dWZm IHdyYXBwaW5nIGludG8gYnVmZmVyICovCisJCSAgICAqKHNydmNtZCs0KSA9ICd2JzsgLyogIFZh cmlhYmxlLCBzbyBtYWtlIGl0IFx2KC4uLikgKi8KKwkJICAgICooc3J2Y21kKzUpID0gJygnOwkv KiBhcm91bmQgdmFyaWFibGUgbmFtZSAqLworCQkgICAgKihzcnZjbWQrbikgPSAnKSc7CisJCSAg ICAqKHNydmNtZCtuKzEpID0gTlVMOworCQkgICAgaWYgKGMgPT0gJ1MnKSB7CS8qIFN5c3RlbSB2 YXJpYWJsZSAqLworCQkJKihzcnZjbWQrNCkgPSAnJCc7IC8qICBzbyBpdCdzIFwkKC4uLikgKi8K KwkJICAgIH0gZWxzZSBpZiAoYyA9PSAnRycpIHsgLyogTm9uLVwgR2xvYmFsIHZhcmlhYmxlICov CisJCQkqKHNydmNtZCs0KSA9ICdtJzsgLyogIHNvIHdyYXAgaXQgaW4gXG0oLi4uKSAqLworCQkg ICAgfQorCQl9CisJICAgIH0JCQkJLyogTm93IGV2YWx1YXRlIGl0ICovCisJICAgIG4gPSBRQlVG TDsJCQkvKiBNYXggbGVuZ3RoICovCisJICAgIHEgPSBxdWVyeWJ1ZjsJCS8qIFdoZXJlIHRvIHB1 dCBpdCAqLworCSAgICBpZiAoenpzdHJpbmcocCwmcSwmbikgPCAwKSB7CisJCWVycnBrdCgobiA+ IDApID8gKENIQVIgKikiQ2FuJ3QgZ2V0IHZhbHVlIgorCQkgICAgICAgICAgICAgICA6IChDSEFS ICopIlZhbHVlIHRvbyBsb25nIgorCQkgICAgICAgKTsKKwkJUkVTVU1FOworCQlyZXR1cm4oLTEp OworCSAgICB9IGVsc2UgeworCQlpZiAoZW5jc3RyKChDSEFSICopcXVlcnlidWYpID4gLTEpIHsg LyogRW5jb2RlIGl0ICovCisJCSAgICBhY2sxKGRhdGEpOwkJLyogSWYgaXQgZml0cywgc2VuZCBp dCBiYWNrIGluIEFDSyAqLworCQkgICAgc3VjY2VzcyA9IDE7CisJCSAgICBSRVNVTUU7CisJCSAg ICByZXR1cm4oLTEpOworCQl9IGVsc2UgaWYgKHNuZHN0cmluZyhxdWVyeWJ1ZikpIHsgLyogTG9u ZyBmb3JtIHJlc3BvbnNlICovCisJCSAgICBCRUdJTiBzc2luaXQ7CisJCSAgICByZXR1cm4oLTEp OworCQl9IGVsc2UgewkJLyogc25kaGxwKCkgZmFpbHMgKi8KKwkJICAgIGVycnBrdCgoQ0hBUiAq KSJDYW4ndCBzZW5kIHZhbHVlIik7CisJCSAgICBSRVNVTUU7CisJCSAgICByZXR1cm4oLTEpOwor CQl9CisJICAgIH0KKwl9CisgICAgfSBlbHNlIGlmIChjID09ICdTJykgewkJLyogU2V0IChhc3Np Z24pICovCisJaWYgKCFFTkFCTEVEKGVuX2FzZykpIHsJCS8qIFNlY3VyaXR5ICovCisJICAgIGVy cnBrdCgoQ0hBUiAqKSJSRU1PVEUgQVNTSUdOIGRpc2FibGVkIik7CisJICAgIFJFU1VNRTsKKwkg ICAgcmV0dXJuKC0xKTsKKwl9IGVsc2UgewkJCS8qIE9LICovCisJICAgIGludCBuOworCSAgICBu ID0geHVuY2hhcigqKHNydmNtZCszKSk7CS8qIExlbmd0aCBvZiBuYW1lICovCisJICAgIG4gPSAz ICsgbiArIDE7CQkvKiBQb3NpdGlvbiBvZiBsZW5ndGggb2YgdmFsdWUgKi8KKwkgICAgKihzcnZj bWQrbikgPSBOVUw7CQkvKiBEb24ndCBuZWVkIGl0ICovCisJICAgIGlmIChhZGRtYWMoKGNoYXIg Kikoc3J2Y21kKzQpLChjaGFyICopKHNydmNtZCtuKzEpKSA8IDApCisJICAgICAgZXJycGt0KChD SEFSICopIlJFTU9URSBBU1NJR04gZmFpbGVkIik7CisJICAgIGVsc2UgeworCQlhY2soKTsKKwkJ c3VjY2VzcyA9IDE7CisJICAgIH0KKwkgICAgUkVTVU1FOworCSAgICByZXR1cm4oLTEpOworCX0K KyAgICB9IGVsc2UgeworCWVycnBrdCgoQ0hBUiAqKSJCYWRseSBmb3JtZWQgc2VydmVyIGNvbW1h bmQiKTsKKwlSRVNVTUU7CisJcmV0dXJuKC0xKTsKKyAgICB9CisjZWxzZQorICAgIGVycnBrdCgo Q0hBUiAqKSJWYXJpYWJsZSBxdWVyeS9zZXQgbm90IGF2YWlsYWJsZSIpOworICAgIFJFU1VNRTsK KyAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KK30KKworc3RhdGljIGludAorc3J2X2NvcHkoKSB7CisjaWZuZGVmIE5PU0VSVkVSCisjaWZk ZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcp CisgICAgICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgQ09QWSIsIChj aGFyICopc3J2Y21kKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmZGVmIFpDT1BZCisgICAg aWYgKCFFTkFCTEVEKGVuX2NweSkpIHsKKwllcnJwa3QoKENIQVIgKikiUkVNT1RFIENPUFkgZGlz YWJsZWQiKTsKKwlSRVNVTUU7CisJcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgeworCWNoYXIgKnN0 cjEsICpzdHIyLCBmMVsyNTZdLCBmMlsyNTZdOworCWludCAgbGVuMSwgbGVuMjsKKyAgICAgICAg bGVuMSA9IHh1bmNoYXIoc3J2Y21kWzFdKTsJLyogU2VwYXJhdGUgdGhlIHBhcmFtZXRlcnMgKi8K KyAgICAgICAgbGVuMiA9IHh1bmNoYXIoc3J2Y21kWzIrbGVuMV0pOworICAgICAgICBzdHJuY3B5 KGYxLChjaGFyICopKHNydmNtZCsyKSxsZW4xKTsKKyAgICAgICAgZjFbbGVuMV0gPSBOVUw7Cisg ICAgICAgIHN0cm5jcHkoZjIsKGNoYXIgKikoc3J2Y21kKzMrbGVuMSksbGVuMik7CisgICAgICAg IGYyW2xlbjJdID0gTlVMOworI2lmZGVmIElLU0RCCisJaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUo d2hhdCwiUkVNT1RFIENPUFkiLCBmMSwgZjIpOworI2VuZGlmIC8qIElLU0RCICovCisJaWYgKCFF TkFCTEVEKGVuX2N3ZCkpIHsJCS8qIElmIENXRCBpcyBkaXNhYmxlZCAqLworCSAgICB6c3RyaXAo ZjEsJnN0cjEpOwkJLyogYW5kIHRoZXkgaW5jbHVkZWQgYSBwYXRobmFtZSwgKi8KKyAgICAgICAg ICAgIHpzdHJpcChmMiwmc3RyMik7CisJICAgIGlmIChzdHJjbXAoZjEsc3RyMSkgfHwgc3RyY21w KGYyLHN0cjIpKSB7IC8qIFJlZnVzZS4gKi8KKwkJZXJycGt0KChDSEFSICopIkFjY2VzcyBkZW5p ZWQiKTsKKwkJUkVTVU1FOwkJCS8qIFJlbWVtYmVyLCB0aGlzIGlzIG5vdCBhIGdvdG8hICovCisJ CXJldHVybigtMSk7CisJICAgIH0KKwl9CisJaWYgKHN0YXRlID09IGdlbmVyaWMpIHsJCS8qIEl0 J3MgT0sgdG8gZ28gYWhlYWQuICovCisgICAgICAgICAgICBpZiAoemNvcHkoZjEsZjIpKSB7CQkv KiBUcnkgKi8KKwkJZXJycGt0KChDSEFSICopIkNhbid0IGNvcHkgZmlsZSIpOyAvKiBnaXZlIGVy cm9yIG1lc3NhZ2UgKi8KKwkgICAgfSBlbHNlIHsKKwkJc3VjY2VzcyA9IDE7CisJCWFjaygpOwor CSAgICB9CisgICAgICAgICAgICBSRVNVTUU7CQkJLyogd2FpdCBmb3IgbmV4dCBzZXJ2ZXIgY29t bWFuZCAqLworCSAgICByZXR1cm4oLTEpOworCX0KKyAgICB9CisgICAgcmV0dXJuKC0xKTsKKyNl bHNlIC8qIG5vIFpDT1BZICovCisgICAgZXJycGt0KChDSEFSICopIlJFTU9URSBDT1BZIG5vdCBh dmFpbGFibGUiKTsgLyogZ2l2ZSBlcnJvciBtZXNzYWdlICovCisgICAgUkVTVU1FOwkJCQkvKiB3 YWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAv KiBaQ09QWSAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCit9CisKK3N0YXRpYyBpbnQKK3Nydl9y ZW5hbWUoKSB7CisjaWZuZGVmIE5PU0VSVkVSCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4 c3lzbG9nID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisgICAgICBja3N5c2xvZyhTWVNMR19Q UiwgMSwgInNlcnZlciIsICJSRU1PVEUgUkVOQU1FIiwgKGNoYXIgKilzcnZjbWQpOworI2VuZGlm IC8qIENLU1lTTE9HICovCisjaWZkZWYgWlJFTkFNRQorICAgIGlmICghRU5BQkxFRChlbl9yZW4p KSB7CisJZXJycGt0KChDSEFSICopIlJFTU9URSBSRU5BTUUgZGlzYWJsZWQiKTsKKwlSRVNVTUU7 CisJcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgewkJCQkvKiBSRU5BTUUgaXMgZW5hYmxlZCAqLwor CWNoYXIgKnN0cjEsICpzdHIyLCBmMVsyNTZdLCBmMlsyNTZdOworCWludCBsZW4xLCBsZW4yOwor CWxlbjEgPSB4dW5jaGFyKHNydmNtZFsxXSk7CS8qIFNlcGFyYXRlIHRoZSBwYXJhbWV0ZXJzICov CisJbGVuMiA9IHh1bmNoYXIoc3J2Y21kWzIrbGVuMV0pOworCXN0cm5jcHkoZjEsKGNoYXIgKiko c3J2Y21kKzIpLGxlbjEpOworCWYxW2xlbjFdID0gTlVMOworCXN0cm5jcHkoZjIsKGNoYXIgKiko c3J2Y21kKzMrbGVuMSksbGVuMik7CisJZjJbbGVuMl0gPSBOVUw7CisJbGVuMiA9IHh1bmNoYXIo c3J2Y21kWzIrbGVuMV0pOworCXN0cm5jcHkoZjEsKGNoYXIgKikoc3J2Y21kKzIpLGxlbjEpOwor CWYxW2xlbjFdID0gTlVMOworCXN0cm5jcHkoZjIsKGNoYXIgKikoc3J2Y21kKzMrbGVuMSksbGVu Mik7CisJZjJbbGVuMl0gPSBOVUw7CisjaWZkZWYgSUtTREIKKwlpZiAoaWtkYm9wZW4pIHNsb3Rz dGF0ZSh3aGF0LCJSRU1PVEUgUkVOQU1FIiwgZjEsIGYyKTsKKyNlbmRpZiAvKiBJS1NEQiAqLwor CWlmICghRU5BQkxFRChlbl9jd2QpKSB7CQkvKiBJZiBDV0QgaXMgZGlzYWJsZWQgKi8KKwkgICAg enN0cmlwKGYxLCZzdHIxKTsJCS8qIGFuZCB0aGV5IGluY2x1ZGVkIGEgcGF0aG5hbWUsICovCisJ ICAgIHpzdHJpcChmMiwmc3RyMik7CisJICAgIGlmICggc3RyY21wKGYxLHN0cjEpIHx8IHN0cmNt cChmMixzdHIyKSApIHsgLyogcmVmdXNlLiAqLworCQllcnJwa3QoKENIQVIgKikiQWNjZXNzIGRl bmllZCIpOworCQlSRVNVTUU7CQkJLyogUmVtZW1iZXIsIHRoaXMgaXMgbm90IGEgZ290byEgKi8K KwkJcmV0dXJuKC0xKTsKKwkgICAgfQorCX0KKwlpZiAoc3RhdGUgPT0gZ2VuZXJpYykgewkJLyog SXQncyBPSyB0byBnbyBhaGVhZC4gKi8KKwkgICAgaWYgKHpyZW5hbWUoZjEsZjIpKSB7CS8qIFRy eSAqLworCQllcnJwa3QoKENIQVIgKikiQ2FuJ3QgcmVuYW1lIGZpbGUiKTsgLyogR2l2ZSBlcnJv ciBtc2cgKi8KKwkgICAgfSBlbHNlIHsKKwkJc3VjY2VzcyA9IDE7CisJCWFjaygpOworCSAgICB9 CisJICAgIFJFU1VNRTsJCQkvKiBXYWl0IGZvciBuZXh0IHNlcnZlciBjb21tYW5kICovCisJICAg IHJldHVybigtMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oLTEpOworI2Vsc2UgLyogbm8gWlJF TkFNRSAqLworICAgIC8qIEdpdmUgZXJyb3IgbWVzc2FnZSAqLworICAgIGVycnBrdCgoQ0hBUiAq KSJSRU1PVEUgUkVOQU1FIG5vdCBhdmFpbGFibGUiKTsKKyAgICBSRVNVTUU7CQkJCS8qIFdhaXQg Zm9yIG5leHQgc2VydmVyIGNvbW1hbmQgKi8KKyAgICByZXR1cm4oLTEpOworI2VuZGlmIC8qIFpS RU5BTUUgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworfQorCitzdGF0aWMgaW50CitzcnZfbG9n aW4oKSB7CisjaWZuZGVmIE5PU0VSVkVSCisgICAgY2hhciBmMVtMT0dJTkxFTisxXSwgZjJbTE9H SU5MRU4rMV0sIGYzW0xPR0lOTEVOKzFdOworICAgIENIQVIgKnA7CisgICAgaW50IGxlbiwgaTsK KworICAgIGRlYnVnKEYxMDEsIlJFTU9URSBMT0dJTiB4X2xvZ2luIiwiIix4X2xvZ2luKTsKKyAg ICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4geF9sb2dnZWQiLCIiLHhfbG9nZ2VkKTsKKworICAg IGYxWzBdID0gTlVMOyBmMlswXSA9IE5VTDsgZjNbMF0gPSBOVUw7CisgICAgbGVuID0gMDsKKyAg ICBpZiAoc3J2Y21kWzFdKQkJCS8qIEZpcnN0IGxlbmd0aCBmaWVsZCAqLworICAgICAgbGVuID0g eHVuY2hhcihzcnZjbWRbMV0pOwkJLyogU2VwYXJhdGUgdGhlIHBhcmFtZXRlcnMgKi8KKworICAg IGlmICh4X2xvZ2luKSB7CQkJLyogTG9naW4gcmVxdWlyZWQgKi8KKwlpZiAoeF9sb2dnZWQpIHsJ CQkvKiBBbmQgYWxyZWFkeSBsb2dnZWQgaW4gKi8KKwkgICAgaWYgKGxlbiA+IDApIHsJCS8qIExv Z2dpbmcgaW4gYWdhaW4gKi8KKwkJZXJycGt0KChDSEFSICopIkFscmVhZHkgbG9nZ2VkIGluLiIp OworCSAgICB9IGVsc2UgewkJCS8qIExvZ2dpbmcgb3V0ICovCisJCWRlYnVnKEYxMDEsIlJFTU9U RSBMT0dPVVQiLCIiLHhfbG9nZ2VkKTsKKyNpZmRlZiBDS1NZU0xPRworCQlpZiAoY2t4c3lzbG9n ID49IFNZU0xHX1BSICYmIGNreGxvZ2dpbmcpCisJCSAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJz ZXJ2ZXIiLCAiUkVNT1RFIExPR09VVCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisj aWZkZWYgSUtTREIKKwkJaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiUkVNT1RFIExPR09V VCIsICIiLCAiIik7CisjZW5kaWYgLyogSUtTREIgKi8KKwkJdGxvZyhGMTEwLCJMb2dnZWQgb3V0 Iix4X3VzZXIsMCk7CisJCWFjazEoKENIQVIgKikiTG9nZ2VkIG91dCIpOworCQlzdWNjZXNzID0g MTsKKwkJbXNsZWVwKDUwMCk7CisjaWZkZWYgQ0tfTE9HSU4KKwkJeF9sb2dnZWQgPSAwOworI2lm ZGVmIElLU0QKKwkJaWYgKGluc2VydmVyKQorCQkgIGNreGxvZ291dCgpOworI2VuZGlmIC8qIElL U0QgKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCSAgICB9CisJfSBlbHNlIHsJCQkvKiBOb3Qg bG9nZ2VkIGluIHlldCAqLworCSAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gbGVuIiwiIixs ZW4pOworCSAgICBpZiAobGVuID4gMCkgewkJLyogSGF2ZSB1c2VybmFtZSAqLworI2lmZGVmIENL U1lTTE9HCisJCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkJICBj a3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJSRU1PVEUgTE9HSU4iLCBOVUxMKTsKKyNl bmRpZiAvKiBDS1NZU0xPRyAqLworCQlpZiAobGVuID4gTE9HSU5MRU4pIHsKKwkJICAgIGVycnBr dCgoQ0hBUiAqKSJVc2VybmFtZSB0b28gbG9uZyIpOworCQl9CisJCXAgPSBzcnZjbWQgKyAyOwkJ LyogUG9pbnQgdG8gaXQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSAvKiBDb3B5IGl0 ICovCisJCSAgZjFbaV0gPSBwW2ldOworCQlmMVtsZW5dID0gTlVMOwkJLyogVGVybWluYXRlIGl0 ICovCisJCXAgKz0gbGVuOwkJLyogUG9pbnQgdG8gbmV4dCBsZW5ndGggZmllbGQgKi8KKwkJaWYg KCpwKSB7CQkvKiBJZiB3ZSBoYXZlIG9uZSAqLworCQkgICAgbGVuID0geHVuY2hhcigqcCsrKTsg LyogZGVjb2RlIGl0ICovCisJCSAgICBpZiAobGVuID4gMCAmJiBsZW4gPD0gTE9HSU5MRU4pIHsK KwkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgLyogU2FtZSBkZWFsIGZvciBwYXNzd29yZCAq LworCQkJICBmMltpXSA9IHBbaV07CisJCQlmMltsZW5dID0gTlVMOworCQkJcCArPSBsZW47CS8q IEFuZCBhY2NvdW50ICovCisJCQlpZiAoKnApIHsKKwkJCSAgICBsZW4gPSB4dW5jaGFyKCpwKysp OworCQkJICAgIGlmIChsZW4gPiAwICYmIGxlbiA8PSBMT0dJTkxFTikgeworCQkJCWZvciAoaSA9 IDA7IGkgPCBsZW47IGkrKykKKwkJCQkgIGYzW2ldID0gcFtpXTsJLyogU2V0IGJ1dCBuZXZlciB1 c2VkICovCisJCQkJZjNbbGVuXSA9IE5VTDsgLyogKGJlY2F1c2UgYWNjb3VudCBub3QgdXNlZCkg Ki8KKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KKwkJZGVidWcoRjEwMSwiUkVNT1RFIExP R0lOIDEiLCIiLHhfbG9nZ2VkKTsKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKwkJaWYg KGluc2VydmVyKSB7CQkvKiBMb2cgaW4gdG8gc3lzdGVtIGZvciByZWFsICovCisJCSAgICB4X2xv Z2dlZCA9IGNreGxvZ2luKChDSEFSICopZjEsKENIQVIgKilmMixOVUxMLDApOworCQkgICAgZGVi dWcoRjEwMSwiUkVNT1RFIExPR0lOIDIiLCIiLHhfbG9nZ2VkKTsKKwkJICAgIGlmICh4X2xvZ2dl ZCkgewkvKiBDb3VudCBhdHRlbXB0cyAqLworCQkJbG9ndHJpZXMgPSAwOworCQkJanVzdG9uZSA9 IDE7CisJCSAgICB9IGVsc2UgeworCQkJbG9ndHJpZXMrKzsKKwkJCXNsZWVwKGxvZ3RyaWVzKTsK KwkJICAgIH0KKwkJfSBlbHNlCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NE ICovCisJCSAgaWYgKHhfdXNlciAmJiB4X3Bhc3N3ZCkgeyAvKiBVc2VyIGFuZCBwYXNzd29yZCBt dXN0IG1hdGNoICovCisJCSAgICAgIGlmICghc3RyY21wKHhfdXNlcixmMSkpIC8qIFNFVCBTRVJW RVIgTE9HSU4gKi8KKwkJCWlmICghc3RyY21wKHhfcGFzc3dkLGYyKSkKKwkJCSAgeF9sb2dnZWQg PSAxOworCQkgICAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gMyIsIiIseF9sb2dnZWQpOwor CQkgIH0gZWxzZSBpZiAoeF91c2VyKSB7CS8qIE9ubHkgdXNlcm5hbWUgZ2l2ZW4sIG5vIHBhc3N3 b3JkICovCisJCSAgICAgIGlmICghc3RyY21wKHhfdXNlcixmMSkpIC8qIHNvIG9ubHkgdXNlcm5h bWUgbXVzdCBtYXRjaCAqLworCQkJeF9sb2dnZWQgPSAxOworCQkgICAgICBkZWJ1ZyhGMTAxLCJS RU1PVEUgTE9HSU4gNCIsIiIseF9sb2dnZWQpOworCQkgIH0KKyNpZmRlZiBDS19MT0dJTiAKKyAg ICAgICAgICAgICAgICBlbHNlIHsKKwkJICAgIHhfbG9nZ2VkID0gY2t4bG9naW4oKENIQVIgKilm MSwoQ0hBUiAqKWYyLE5VTEwsMCk7CisJCSAgICBkZWJ1ZyhGMTAxLCJSRU1PVEUgTE9HSU4gNSIs IiIseF9sb2dnZWQpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLwor CQlpZiAoeF9sb2dnZWQpIHsJCS8qIExvZ2dlZCBpbj8gKi8KKwkJICAgIHRsb2coRjExMCwiTG9n Z2VkIGluIiwgeF91c2VyLCAwKTsKKwkJICAgIGlmIChpc2d1ZXN0KQorCQkgICAgICBhY2sxKChD SEFSICopIkxvZ2dlZCBpbiBhcyBndWVzdCAtIHJlc3RyaWN0aW9ucyBhcHBseSIpOworCQkgICAg ZWxzZQorCQkgICAgICBhY2sxKChDSEFSICopIkxvZ2dlZCBpbiIpOworCQkgICAgc3VjY2VzcyA9 IDE7CisJCX0gZWxzZSB7CisJCSAgICB0bG9nKEYxMTAsIkxvZ2luIGZhaWxlZCIsIGYxLCAwKTsK KwkJICAgIGVycnBrdCgoQ0hBUiAqKSJBY2Nlc3MgZGVuaWVkLiIpOworI2lmZGVmIElLU0QKKyNp ZmRlZiBDS19MT0dJTgorCQkgICAgaWYgKGluc2VydmVyICYmIGxvZ3RyaWVzID4gMikKKwkJICAg ICAgY2t4bG9nb3V0KCk7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICov CisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBMT0dPVVQgKi8KKwkJZXJycGt0KChDSEFSICopIkxv Z291dCBpZ25vcmVkIik7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsJCQkJLyogTG9naW4gbm90 IHJlcXVpcmVkICovCisJaWYgKGxlbiA+IDApCisJICBlcnJwa3QoKENIQVIgKikiTG9naW4gaWdu b3JlZC4iKTsKKwllbHNlCisJICBlcnJwa3QoKENIQVIgKikiTG9nb3V0IGlnbm9yZWQuIik7Cisg ICAgfQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisgICAgUkVTVU1FOworICAgIHJldHVybigtMSk7 Cit9CisKK3N0YXRpYyBpbnQKK3Nydl90aW1lb3V0KCkgeworICAgIC8qIEs5NSBkb2VzIHRoaXMg aXRzIG93biB3YXkgKi8KKyAgICBpZiAoaWRsZXRtbykgeworI2lmZGVmIElLU0QKKyAgICAgICAg aWYgKGluc2VydmVyKSB7CisgICAgICAgICAgIHByaW50ZigiXHJcbklLU0QgSURMRSBUSU1FT1VU OiAlZCBzZWNcclxuIiwgc3J2aWRsKTsKKyAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRz dGEpOworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCWlkbGV0bW8gPSAwOworCXByaW50 ZigiXHJcblNFUlZFUiBJRExFIFRJTUVPVVQ6ICVkIHNlY1xyXG4iLCBzcnZpZGwpOworCXhpdHN0 YSB8PSAod2hhdCAmIFdfS0VSTUlUKTsKKwlRVUlUOworICAgIH0KKyNpZm5kZWYgTk9TRVJWRVIK KyAgICBlbHNlIGlmIChmYXRhbGlvKSB7CQkJLyogQ29ubmVjdGlvbiBsb3N0ICovCisjaWZkZWYg Q0tTWVNMT0cKKwkgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYgY2t4bG9nZ2luZykKKwkg ICAgY2tzeXNsb2coU1lTTEdfUFIsIDEsICJzZXJ2ZXIiLCAiQ29ubmVjdGlvbiBsb3N0IiwgTlVM TCk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBJS1NEQgorCSAgaWYgKGlrZGJvcGVu KSBzbG90c3RhdGUod2hhdCwiU0VSVkVSIERJU0NPTk5FQ1QiLChjaGFyICopc3J2Y21kLCAiIik7 CisjZW5kaWYgLyogSUtTREIgKi8KKwl4aXRzdGEgfD0gd2hhdDsKKwlRVUlUOworICAgIH0gZWxz ZSBpZiAoaW50ZXJydXB0ZWQpIHsJCS8qIEludGVycnVwdGVkIGJ5IGhhbmQgKi8KKwlpZiAoIUVO QUJMRUQoZW5fZmluKSkgeworCSAgICBlcnJwa3QoKENIQVIgKikiUVVJVCBkaXNhYmxlZCIpOwor CSAgICBSRVNVTUU7CisJICAgIHJldHVybigtMSk7CisJfSBlbHNlIHsKKwkgICAgaWYgKHdoYXQg PT0gV19TRU5EIHx8IHdoYXQgPT0gV19SRUNWIHx8IHdoYXQgPT0gV19SRU1PKSB7CisJCXN1Y2Nl c3MgPSAwOworI2lmZGVmIENLU1lTTE9HCisJCWlmIChja3hzeXNsb2cgPj0gU1lTTEdfUFIgJiYg Y2t4bG9nZ2luZykKKwkJICBja3N5c2xvZyhTWVNMR19QUiwgMSwgInNlcnZlciIsICJJbnRlcnJ1 cHRlZCIsIE5VTEwpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisJICAgIH0gZWxzZSBpZiAod2hh dCA9PSBXX05PVEhJTkcgJiYgZmlsY250ID09IDApIHsKKwkJc3VjY2VzcyA9IDE7CisJICAgIH0g LyogT3RoZXJ3aXNlIGxlYXZlIHN1Y2Nlc3MgYWxvbmUgKi8KKwkgICAgeGl0c3RhIHw9ICh3aGF0 ICYgV19LRVJNSVQpOworCSAgICBRVUlUOworCX0KKyAgICB9IGVsc2UgewkJCQkvKiBTaG91bGRu J3QgaGFwcGVuICovCisJZGVidWcoRjEwMCwiU0VSVkVSICh0b3ApIEdPVCBVTkVYUEVDVEVEICdx JyIsIiIsMCk7CisJUVVJVDsKKyAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KK30KKworc3Rh dGljIGludAorcmN2X3NfcGt0KCkgeworI2lmbmRlZiBOT1NFUlZFUgorICAgIGlmIChzdGF0ZSA9 PSByZ2VuKQorICAgICAgdXJzZXJ2ZXIgPSAxOworICAgIGlmICgvKiBzdGF0ZSA9PSBzZXJ2ZSAm JiAqLyB4X2xvZ2luICYmICF4X2xvZ2dlZCkgeworCWVycnBrdCgoQ0hBUiAqKSJMb2dpbiByZXF1 aXJlZCIpOworCVNFUlZFOworICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PU0VSVkVSICovCisgICAg ICBpZiAoc3RhdGUgPT0gc2VydmUgJiYgIUVOQUJMRUQoZW5fc2VuKSkgeyAvKiBOb3QgaW4gc2Vy dmVyIG1vZGUgKi8KKwllcnJwa3QoKENIQVIgKikiU0VORCBkaXNhYmxlZCIpOyAvKiB3aGVuIFNF TkQgaXMgZGlzYWJsZWQuICovCisJUkVTVU1FOworCXJldHVybigtMSk7CisgICAgfSBlbHNlIHsJ CQkJLyogT0sgdG8gZ28gYWhlYWQuICovCisjaWZkZWYgQ0tfVE1QRElSCisJaWYgKGRsZGlyICYm ICFmX3RtcGRpcikgewkvKiBJZiB0aGV5IGhhdmUgYSBkb3dubG9hZCBkaXJlY3RvcnkgKi8KKwkg ICAgZGVidWcoRjExMCwicmVjZWl2ZSBkb3dubG9hZCBkaXIiLGRsZGlyLDApOworCSAgICBpZiAo cyA9IHpndGRpcigpKSB7CQkvKiBHZXQgY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJZGVidWcoRjEx MCwicmVjZWl2ZSBjdXJyZW50IGRpciIscywwKTsKKwkJaWYgKHpjaGRpcihkbGRpcikpIHsJLyog Q2hhbmdlIHRvIGRvd25sb2FkIGRpcmVjdG9yeSAqLworCQkgICAgZGVidWcoRjEwMCwicmVjZWl2 ZSB6Y2hkaXIgb2siLCIiLDApOworCQkgICAgY2tzdHJuY3B5KHNhdmRpcixzLFRNUERJUkxFTik7 CisJCSAgICBmX3RtcGRpciA9IDE7CS8qIFJlbWVtYmVyIHRoYXQgd2UgZGlkIHRoaXMgKi8KKwkJ fSBlbHNlCisJCSAgZGVidWcoRjEwMCwicmVjZWl2ZSB6Y2hkaXIgZmFpbGVkIiwiIiwwKTsKKwkg ICAgfQorCX0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKwluYWtzdGF0ZSA9IDE7CQkJLyogQ2Fu IHNlbmQgTkFLcyBmcm9tIGhlcmUuICovCisJcmluaXQocmRhdGFwKTsJCQkvKiBTZXQgcGFyYW1l dGVycyAqLworCWlmIChiY3RmKSB7CisJICAgIGJjdHUgPSAzOworCSAgICBiY3RsID0gMzsKKwl9 IGVsc2UgeworCSAgICBiY3R1ID0gYmN0cjsJICAgICAgIC8qIHN3aXRjaCB0byBhZ3JlZWQtdXBv biBibG9jayBjaGVjayAqLworCSAgICBiY3RsID0gKGJjdHUgPT0gNCkgPyAyIDogYmN0dTsgLyog U2V0IGJsb2NrLWNoZWNrIGxlbmd0aCAqLworCX0KKwl3aGF0ID0gV19SRUNWOwkJCS8qIFJlbWVt YmVyIHdlJ3JlIHJlY2VpdmluZyAqLworCWxhc3R4ZmVyID0gV19SRUNWOworCXJlc2V0YygpOwkJ CS8qIFJlc2V0IGNvdW50ZXJzICovCisJcnRpbWVyKCk7CQkJLyogUmVzZXQgdGltZXIgKi8KKyNp ZmRlZiBHRlRJTUVSCisJcmZ0aW1lcigpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwlzdHJlYW1v bigpOworCUJFR0lOIHJmaWxlOwkJCS8qIEdvIGludG8gcmVjZWl2ZS1maWxlIHN0YXRlICovCisg ICAgfQorICAgIHJldHVybigtMSk7Cit9CisKKworLyogRU5EIE9GIFJPVVRJTkVTIE1PVkVEIE9V VCBPRiBTVEFURSBNQUNISU5FICovCisKKworLyogIFAgUiBPIFQgTyAgLS0gIFByb3RvY29sIGVu dHJ5IGZ1bmN0aW9uICAqLworCitzdGF0aWMgaW50IGlzX3RuID0gMDsJCQkvKiBJdCdzIGEgVGVs bmV0IGNvbm5lY3Rpb24gKi8KKworI2lmZGVmIENLX1NQRUVECitpbnQgZl9jdGxwID0gMDsJCQkJ LyogQ29udHJvbC1jaGFyYWN0ZXIgcHJlZml4IHRhYmxlICovCisjaWZkZWYgQ09NTUVOVAorc2hv cnQgc19jdGxwWzI1Nl07CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIENLX1NQRUVE ICovCisKKy8qCisgIFRoaXMgaXMgc2ltcGx5IGEgd3JhcHBlciBmb3IgdGhlIHJlYWwgcHJvdG9j b2wgZnVuY3Rpb24ganVzdCBiZWxvdywKKyAgdGhhdCBzYXZlcyBhbnkgaXRlbXMgdGhhdCBtaWdo dCBiZSBjaGFuZ2VkIGF1dG9tYXRpY2FsbHkgYnkgcHJvdG9jb2wKKyAgbmVnb3RpYXRpb25zIGFu ZCB0aGVuIHJlc3RvcmVzIHRoZW0gdXBvbiBleGl0IGZyb20gcHJvdG9jb2wgbW9kZS4KKyovCitW T0lECitwcm90bygpIHsKKyAgICBleHRlcm4gaW50IGJfc2F2ZSwgZl9zYXZlLCBjX3NhdmUsIHNz X3NhdmUsIHNsb3N0YXJ0LCByZWxpYWJsZSwgdXJjbGVhcjsKKyNpZm5kZWYgTk9DU0VUUworICAg IGV4dGVybiBpbnQgZmNoYXJzZXQsIGZjc19zYXZlLCB0Y2hhcnNldCwgdGNzX3NhdmU7CisjZW5k aWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgUElQRVNFTkQKKyAgICBleHRlcm4gaW50IHBpcGVz ZW5kOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIK KyAgICBleHRlcm4gaW50IGN1cnNvcmVuYVtdLCBjdXJzb3Jfc2F2ZSwgdGVybV9pbzsKKyAgICBl eHRlcm4gQllURSB2bW9kZTsKKyAgICBleHRlcm4gaW50IGRpc3BsYXlfZGVtbzsKKyAgICBpbnQg dGVybV9pb19zYXZlOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNp ZmRlZiBUTkNPREUKKyAgICBpbnQgX3VfYmluPTAsIF9tZV9iaW4gPSAwOworI2lmZGVmIElLU19P UFRJT04KKyAgICBpbnQgLyogX3Vfc3RhcnQ9MCwgKi8gX21lX3N0YXJ0ID0gMDsKKyNlbmRpZiAv KiBJS1NfT1BUSU9OICovCisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgUEFUVEVSTlMKKyAg ICBpbnQgcGFfc2F2ZTsKKyAgICBpbnQgaTsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworICAgIGlu dCBzY2FuX3NhdmU7CisKKyNpZmRlZiBQQVRURVJOUworICAgIHBhX3NhdmUgPSBwYXR0ZXJuczsK KyNlbmRpZiAvKiBQQVRURVJOUyAqLworICAgIHNjYW5fc2F2ZSA9IGZpbGVwZWVrOworCisgICAg bXlqb2IgPSBzc3RhdGU7CisKKyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChpc2d1ZXN0KSB7CQkJ LyogSWYgdXNlciBpcyBhbm9ueW1vdXMgKi8KKwllbl9wcmkgPSAwOwkJCS8qIGRpc2FibGUgcHJp bnRpbmcgKi8KKwllbl9tYWkgPSAwOwkJCS8qIGFuZCBkaXNhYmxlIGVtYWlsICovCisJZW5fZGVs ID0gMDsJCQkvKiBhbmQgZmlsZSBkZWxldGlvbiAqLworICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJ TiAqLworCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBjdXJzb3Jfc2F2ZSA9IGN1 cnNvcmVuYVt2bW9kZV07CisgICAgY3Vyc29yZW5hW3Ztb2RlXSA9IDA7CisgICAgdGVybV9pb19z YXZlID0gdGVybV9pbzsKKyAgICB0ZXJtX2lvID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisgICAgYl9zYXZlID0gYmluYXJ5OwkJCS8qIFNFVCBGSUxFIFRZUEUg Ki8KKyAgICBmX3NhdmUgPSBmbmNudjsJCQkvKiBTRVQgRklMRSBOQU1FUyAqLworICAgIGNfc2F2 ZSA9IGJjdHI7CisgICAgcF9zYXZlID0gZm5zcGF0aDsKKyAgICByX3NhdmUgPSByZWN1cnNpdmU7 CisgICAgc190aW1pbnQgPSB0aW1pbnQ7CisgICAgc3Nfc2F2ZSA9IHNsb3N0YXJ0OworI2lmbmRl ZiBOT0NTRVRTCisgICAgZmNzX3NhdmUgPSBmY2hhcnNldDsKKyAgICB0Y3Nfc2F2ZSA9IHRjaGFy c2V0OworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIERvbid0IGRv IHRoaXMgYmVjYXVzZSB0aGVuIHVzZXIgY2FuIG5ldmVyIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQu ICovCisjaWZkZWYgQ0tfU1BFRUQKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAg ICBzX2N0bHBbaV0gPSBjdGxwW2ldOworICAgIGZfY3RscCA9IDE7CisjZW5kaWYgLyogQ0tfU1BF RUQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKHJlbGlhYmxlID09IFNFVF9PTikK KyAgICAgIHNsb3N0YXJ0ID0gMDsKKyAgICBpc190biA9ICghbG9jYWwgJiYgc3N0ZWxuZXQpCisj aWZkZWYgVE5DT0RFCisgICAgICB8fCAobG9jYWwgJiYgbmV0d29yayAmJiB0dG5wcm90byA9PSBO UF9URUxORVQpCisjZW5kaWYgLyogVE5DT0RFICovCisJOworI2lmZGVmIFROQ09ERQorICAgIGlm IChpc190bikgeworICAgICAgICBpZiAodG5fYl94ZmVyICYmICEoc3N0ZWxuZXQgfHwgaW5zZXJ2 ZXIpKSB7CisJICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgVGVsbmV0IEJpbmFyeSAq LworCSAgICBfdV9iaW4gPSBURUxPUFRfVShURUxPUFRfQklOQVJZKTsKKwkgICAgX21lX2JpbiA9 IFRFTE9QVF9NRShURUxPUFRfQklOQVJZKTsKKworCSAgICAvKiBJZiBlaXRoZXIgZGlyZWN0aW9u IGlzIG5vdCBCaW5hcnkgYXR0ZW1wdCB0byBuZWdvdGlhdGUgaXQgKi8KKwkgICAgaWYgKCFfdV9i aW4gJiYgVEVMT1BUX1VfTU9ERShURUxPUFRfQklOQVJZKSAhPSBUTl9OR19SRikgeworCQl0bl9z b3B0KERPLFRFTE9QVF9CSU5BUlkpOworCQlURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfQklO QVJZKSA9IDE7CisJICAgIH0KKwkgICAgaWYgKCFfbWVfYmluICYmIFRFTE9QVF9NRV9NT0RFKFRF TE9QVF9CSU5BUlkpICE9IFROX05HX1JGKSB7CisJCXRuX3NvcHQoV0lMTCxURUxPUFRfQklOQVJZ KTsKKwkJVEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfQklOQVJZKSA9IDE7CisJICAgIH0K KwkgICAgaWYgKCEoX21lX2JpbiAmJiBfdV9iaW4pKQorCSAgICAgIHRuX3dhaXQoInByb3RvIHNl dCBiaW5hcnkgbW9kZSIpOworICAgICAgICB9CisjaWZkZWYgSUtTX09QVElPTgorI2lmZGVmIENL X1hZWgorICAgICAgICBpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewkvKiBOb24tS2VybWl0IHBy b3RvY29sIHNlbGVjdGVkICovCisgICAgICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1J VCkgJiYKKyAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVf c3RhcnQpIHsKKyAgICAgICAgICAgICAgICBpa3Nfd2FpdChLRVJNSVRfUkVRX1NUT1AsMCk7IC8q IFN0b3AgdGhlIG90aGVyIFNlcnZlciAqLworCQkvKiBfdV9zdGFydCA9IDE7ICovCisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCisgICAg ICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgewor ICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NUT1ApOwkvKiBJJ20gbm90IHNlcnZlcmlu ZyAqLworCSAJVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDA7CisJ CV9tZV9zdGFydCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8q IENLX1hZWiAqLworICAgICAgICBpZiAoc3N0YXRlID09ICd4JyB8fCBzc3RhdGUgPT0gJ3YnKSB7 IC8qIFJlc3BvbmRpbmcgdG8gYSByZXF1ZXN0ICovCisgICAgICAgICAgICBpZiAoIWluc2VydmVy ICYmIFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgICAgICAgICAgVEVMT1BUX1NC KFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KSB7CisgICAgICAgICAgICAgICAgaWtzX3dh aXQoS0VSTUlUX1JFUV9TVE9QLDApOyAvKiBTdG9wIHRoZSBvdGhlciBTZXJ2ZXIgKi8KKwkJLyog X3Vfc3RhcnQgPSAxOyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRFTE9QVF9N RShURUxPUFRfS0VSTUlUKSAmJgorICAgICAgICAgICAgICAgICFURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7CisgICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRf U1RBUlQpOwkvKiBTZW5kIEtlcm1pdC1TZXJ2ZXIgU3RhcnQgKi8KKwkgCVRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgewkJCS8qIEluaXRpYXRpbmcgYSByZXF1ZXN0ICovCisgICAgICAgICAgICBpZiAoVEVM T1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgeworICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VS TUlUX1NUT1ApOwkvKiBJJ20gbm90IHNlcnZlcmluZyAqLworCSAJVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC5tZV9zdGFydCA9IDA7CisJCV9tZV9zdGFydCA9IDE7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYKKwkgICAgICAg ICFURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpIHsKKwkJLyogU2VuZCBS ZXEtU2VydmVyLVN0YXJ0ICovCisgICAgICAgICAgICAgICAgaWYgKCFpa3Nfd2FpdChLRVJNSVRf UkVRX1NUQVJULDApKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzc3RhdGUgIT0gJ3MnKSB7 CisJCQlzdWNjZXNzID0gMDsJLyogT3RoZXIgS2VybWl0IHJlZnVzZWQgdG8gc2VydmUgKi8KKwkJ CWlmIChsb2NhbCkKKwkJCSAgcHJpbnRmKCJBIEtlcm1pdCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJs ZVxyXG4iKTsKKwkJCWRlYnVnKEYxMTAsInByb3RvKCkiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiQSBLZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGUiLDApOworCQkJdGxvZyhG MTEwLCJJS1MgY2xpZW50L3NlcnZlciBmYWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkEgS2VybWl0IFNlcnZlciBpcyBub3QgYXZhaWxhYmxlIiwwKTsKKwkJCWdvdG8geHhw cm90b3g7CisgICAgICAgICAgICAgICAgICAgIH0KKwkJfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAg ICAgaWYgKHRuX25vX2VuY3J5cHRfeGZlciAmJiAhKHNzdGVsbmV0IHx8IGluc2VydmVyKSkgewor ICAgICAgICAgICAgY2tfdG5fZW5jX3N0b3AoKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KKyAgICB9CisjZW5kaWYgLyogVE5DT0RFICovCisKKyAgICBpZiAoIXhmcmlu dCkgY29ubm9pKCk7CisgICAgeHhwcm90bygpOwkJCQkvKiBDYWxsIHRoZSByZWFsIHByb3RvY29s IGZ1bmN0aW9uICovCisKKyNpZmRlZiBJS1NfT1BUSU9OCisgIHh4cHJvdG94OgorI2VuZGlmIC8q IElLU19PUFRJT04gKi8KKyAgICB4ZmVyc3RhdCA9IHN1Y2Nlc3M7CQkJLyogUmVtZW1iZXIgdHJh bnNmZXIgc3RhdHVzICovCisgICAga2FjdGl2ZSA9IDA7CisKKyNpZmRlZiBUTkNPREUKKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGlmICh0bl9ub19lbmNyeXB0X3hmZXIgJiYgIShzc3Rl bG5ldCB8fCBpbnNlcnZlcikpIHsKKyAgICAgICAgICAgIGNrX3RuX2VuY19zdGFydCgpOworICAg ICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIElLU19PUFRJT04KKyAg ICBpZiAoVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgIFRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgJiYgIV9tZV9zdGFydCkgeworICAgICAgICB0bl9z aWtzKEtFUk1JVF9TVE9QKTsJCS8qIFNlcnZlciBpcyBzdG9wcGVkICovCisgCVRFTE9QVF9TQihU RUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAwOworICAgIH0KKyNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCisgICAgaWYgKGlzX3RuICYmIHRuX2JfeGZlciAmJiAhKHNzdGVsbmV0IHx8IGlu c2VydmVyKSkgeworICAgICAgICAvKiBpZiB3ZSBuZWdvdGlhdGVkIEJpbmFyeSBtb2RlIHRyeSB0 byByZXNldCBpdCAqLworICAgICAgICBpZiAoIV91X2JpbikgeworICAgICAgICAgICAgLyogQ2hl Y2sgdG8gc2VlIGlmIHRoZSBzdGF0ZSBjaGFuZ2VkIGR1cmluZyB0aGUgdHJhbnNmZXIgKi8KKwkg ICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7CisJCXRuX3NvcHQoRE9OVCxURUxPUFRf QklOQVJZKTsKKwkJVEVMT1BUX1VOQU5TV0VSRURfRE9OVChURUxPUFRfQklOQVJZKSA9IDE7CisJ ICAgIH0gZWxzZQorCSAgICAgIF91X2JpbiA9IDE7CQkvKiBTbyB3ZSBkb24ndCBjYWxsIHRuX3dh aXQoKSAqLworICAgICAgICB9CisgICAgICAgIGlmICghX21lX2JpbikgeworICAgICAgICAgICAg LyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBzdGF0ZSBjaGFuZ2VkIGR1cmluZyB0aGUgdHJhbnNmZXIg Ki8KKwkgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfQklOQVJZKSkgeworCQl0bl9zb3B0KFdPTlQs VEVMT1BUX0JJTkFSWSk7CisJCVRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoVEVMT1BUX0JJTkFSWSkg PSAxOworCSAgICB9IGVsc2UKKwkgICAgICBfbWVfYmluID0gMTsJCS8qIFNvIHdlIGRvbid0IGNh bGwgdG5fd2FpdCgpICovCisJfQorCWlmICghKF9tZV9iaW4gJiYgX3VfYmluKSkKKwkgIHRuX3dh aXQoInByb3RvIHJlc2V0IGJpbmFyeSBtb2RlIik7CisgICAgfQorI2VuZGlmIC8qIFROQ09ERSAq LworCisjaWZkZWYgUEFUVEVSTlMKKyAgICBwYXR0ZXJucyA9IHBhX3NhdmU7CisjZW5kaWYgLyog UEFUVEVSTlMgKi8KKyAgICBmaWxlcGVlayA9IHNjYW5fc2F2ZTsKKworI2lmZGVmIFNUUkVBTUlO RworICAgIHN0cmVhbWluZyA9IDA7CisgICAgLyogc3RyZWFtb2sgPSAwOyAqLworI2VuZGlmIC8q IFNUUkVBTUlORyAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBDS19TUEVFRAorICAgIGZvciAo aSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgIGN0bHBbaV0gPSBzX2N0bHBbaV07CisgICAgZl9j dGxwID0gMDsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICB1cmNsZWFyID0gMDsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKwl4aXRzdGEgfD0gKHdoYXQgJiBX X0tFUk1JVCk7CisJdGxvZyhGMTEwLCIgZmFpbGVkOiIsKGNoYXIgKillcGt0bXNnLDApOworICAg IH0KKyAgICBkZWJ1ZyhGMTExLCJwcm90byB4ZmVyc3RhdCIsZXBrdG1zZyx4ZmVyc3RhdCk7Cisg ICAgc2xvc3RhcnQgPSBzc19zYXZlOworICAgIGlmIChzX3RpbWludCA+IC0xKSB7CQkvKiBCZWNh dXNlIG9mIFJFTU9URSBTRVQgKi8KKwl0aW1pbnQgPSBzX3RpbWludDsKKwlzX3RpbWludCA9IC0x OworICAgIH0KKyAgICByZWN1cnNpdmUgPSByX3NhdmU7CisgICAgZm5zcGF0aCA9IHBfc2F2ZTsK KyAgICBpZiAoY19zYXZlID4gLTEpIHsJCQkvKiBCZWNhdXNlIG9mIFJFTU9URSBTRVQgKi8KKwli Y3RyID0gY19zYXZlOworCWNfc2F2ZSA9IC0xOworICAgIH0KKyAgICBmbmNudiAgID0gZl9zYXZl OworICAgIGJpbmFyeSAgPSBiX3NhdmU7CisjaWZkZWYgUElQRVNFTkQKKyAgICBwaXBlc2VuZCA9 IDA7ICAgIAkJCS8qIE5leHQgdGltZSBtaWdodCBub3QgYmUgcGlwZXNlbmQgKi8KKyNlbmRpZiAv KiBQSVBFU0VORCAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgY3Vyc29yZW5h W3Ztb2RlXSA9IGN1cnNvcl9zYXZlOworICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7CisgICAg ZGlzcGxheV9kZW1vID0gMTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICov Cit9CisKK3N0YXRpYyBWT0lECit4eHByb3RvKCkgeworICAgIGludCB4OworICAgIGxvbmcgbHg7 CisjaWZkZWYgQ0tfWFlaCisjaWZkZWYgWFlaX0lOVEVSTkFMCitfUFJPVE9UWVAoIGludCBweHl6 LCAoaW50KSApOworI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworI2VuZGlmIC8qIENLX1hZWiAq LworCisgICAgY2hhciB4c3NbMl07CQkJLyogU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHNzdGF0 ZSAqLworICAgIHhzc1swXSA9IHNzdGF0ZTsKKyAgICB4c3NbMV0gPSBOVUw7CisgICAgc190aW1p bnQgPSB0aW1pbnQ7CisKKyAgICBkZWJ1ZyhGMTAxLCJ4eHByb3RvIGVudHJ5IGp1c3RvbmUiLCIi LGp1c3RvbmUpOworICAgIHN1Y2Nlc3MgPSAwOworCisgICAgcmV0cmlldmUgPSAwOwkJCS8qIFJl c2V0IHRoZXNlIC4uLiAqLworICAgIHJlZ2V0ID0gMDsKKyAgICBvcGt0ID0gMDsKKworICAgIGlm IChsb2NhbCAmJiB0dGNoaygpIDwgMCkgewkJLyogR2l2aW5nIEJZRSBvciBGSU4gKi8KKwlpZiAo YnllX2FjdGl2ZSkgewkJLyogYnV0IHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24gKi8KKwkgICAgdHRj bG9zKDApOworCSAgICBzdWNjZXNzID0gMTsKKwkgICAgcmV0dXJuOworCX0KKwkvKiBEaXR0byBm b3IgYW55IFJFTU9URSBjb21tYW5kICovCisJaWYgKHNzdGF0ZSA9PSAnZycgJiYgY21hcmcgKSB7 CisJICAgIGlmICgqY21hcmcgPT0gJ0wnIHx8ICpjbWFyZyA9PSAnRicgfHwgKmNtYXJnID09ICdY JykKKwkgICAgICBzdWNjZXNzID0gMTsKKwkgICAgZWxzZQorCSAgICAgIHByaW50ZigiP05vIGNv bm5lY3Rpb25cclxuIik7CisJICAgIHJldHVybjsKKwl9CisgICAgfQorCisvKiBTZXQgdXAgdGhl IGNvbW11bmljYXRpb24gbGluZSBmb3IgZmlsZSB0cmFuc2Zlci4gKi8KKy8qIE5PVEU6IEFsbCBv ZiB0aGUgeHhzY3JlZW4oKSBjYWxscyBwcmlvciB0byB0aGUgd2FydCgpIGludm9jYXRpb24gKi8K Ky8qIGNvdWxkIGp1c3QgYXMgZWFzaWx5IGJlIHByaW50ZidzIG9yLCBmb3IgdGhhdCBtYXR0ZXIs IGhpbnRzLiAqLworCisgICAgaWYgKGxvY2FsICYmIChzcGVlZCA8IDBMKSAmJiAobmV0d29yayA9 PSAwKSkgeworCXh4c2NyZWVuKFNDUl9FTSwwLDBMLCJTb3JyeSwgeW91IG11c3QgJ3NldCBzcGVl ZCcgZmlyc3QiKTsKKwlyZXR1cm47CisgICAgfQorICAgIHggPSAtMTsKKyAgICBpZiAodHRvcGVu KHR0bmFtZSwmeCxtZG10eXAsY2R0aW1vKSA8IDApIHsKKwlkZWJ1ZyhGMTExLCJmYWlsZWQ6IHBy b3RvIHR0b3BlbiBsb2NhbCIsdHRuYW1lLGxvY2FsKTsKKwl4eHNjcmVlbihTQ1JfRU0sMCwwTCwi Q2FuJ3Qgb3BlbiBsaW5lIik7CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAoeCA+IC0xKSBsb2Nh bCA9IHg7CisgICAgZGVidWcoRjExMSwicHJvdG8gdHRvcGVuIGxvY2FsIix0dG5hbWUsbG9jYWwp OworCisgICAgbHggPSAobG9jYWwgJiYgIW5ldHdvcmspID8gc3BlZWQgOiAtMTsKKyNpZmRlZiBO RVRDT05OCisjaWZkZWYgQ0tfU1BFRUQKKyAgICBpZiAoaXNfdG4pIHsKKwljdGxwWyh1bnNpZ25l ZCkyNTVdID0gY3RscFtDUl0gPSAxOworCWlmIChwYXJpdHkgPT0gJ2UnIHx8IHBhcml0eSA9PSAn bScpIGN0bHBbMTI3XSA9IDE7CisJaWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJCS8qIEFsc28gd2F0 Y2ggb3V0IGZvciBYb24vWG9mZiAqLworCSAgICBjdGxwWzE3XSA9IGN0bHBbMTldID0gMTsKKwkg ICAgY3RscFsxNysxMjhdID0gY3RscFsxOSsxMjhdID0gMTsKKwl9CisgICAgfQorI2VuZGlmIC8q IENLX1NQRUVEICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgIGlmICh0dHBrdChseCxmbG93 LHBhcml0eSkgPCAwKSB7CS8qIFB1dCBsaW5lIGluIHBhY2tldCBtb2RlLCAqLworCXh4c2NyZWVu KFNDUl9FTSwwLDBMLCJDYW4ndCBjb25kaXRpb24gbGluZSIpOworCXJldHVybjsKKyAgICB9Cisg ICAgaWYgKGxvY2FsICYmICFuZXR3b3JrICYmIGNhcnJpZXIgIT0gQ0FSX09GRikgeworCWludCB4 OwkJCQkvKiBTZXJpYWwgY29ubmVjdGlvbiAqLworCXggPSB0dGdtZG0oKTsJCQkvKiB3aXRoIGNh cnJpZXIgY2hlY2tpbmcgKi8KKwlpZiAoeCA+IC0xKSB7CisJICAgIGlmICghKHggJiBCTV9EQ0Qp KSB7CisJCWRlYnVnKEYxMDEsInByb3RvIHR0Z21kbSIsIiIsMCk7CisJCXh4c2NyZWVuKFNDUl9F TSwwLDBMLCJDYXJyaWVyIHJlcXVpcmVkIGJ1dCBub3QgZGV0ZWN0ZWQiKTsKKwkJcmV0dXJuOwor CSAgICB9CisJfQorICAgIH0KKyAgICAvKiBTZW5kIHJlbW90ZSBzaWRlJ3MgInJlY2VpdmUiIG9y ICJzZXJ2ZXIiIHN0YXJ0dXAgc3RyaW5nLCBpZiBhbnkgKi8KKyAgICBpZiAobG9jYWwgJiYgY2tp bmRleCgoY2hhciAqKXhzcywic3JnY2poayIsMCwwLDEpKSB7CisJY2hhciAqcyA9IE5VTEw7Cisg ICAgICAgIGlmICgKKyNpZmRlZiBJS1NfT1BUSU9OCisJICAgIC8qIERvbid0IHNlbmQgYXV0by1i bGFoIHN0cmluZyBpZiB3ZSBrbm93IG90aGVyIHNpZGUgaXMgc2VydmluZyAqLworCSAgICAhVEVM T1BUX1UoVEVMT1BUX0tFUk1JVCkgfHwKKwkgICAgIVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5r ZXJtaXQudV9zdGFydAorI2Vsc2UKKwkgICAgMQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKwkg ICAgKSB7CisJICAgIGlmIChzc3RhdGUgPT0gJ3MnKSB7CS8qIFNlbmRpbmcgZmlsZShzKSAqLwor CQlzID0gYmluYXJ5ID8gcHRhYltwcm90b2NvbF0uaF9iX2luaXQgOiBwdGFiW3Byb3RvY29sXS5o X3RfaW5pdDsKKwkgICAgfSBlbHNlIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7IC8qIENvbW1h bmQgZm9yIHNlcnZlciAqLworCQlzID0gcHRhYltwcm90b2NvbF0uaF94X2luaXQ7CisJICAgIH0K Kwl9CisjaWZkZWYgQ0tfU1BFRUQKKyNpZm5kZWYgVU5QUkVGSVhaRVJPCisJaWYgKHByb3RvY29s ID09IFBST1RPX0spCS8qIEJlY2F1c2Ugb2YgQy1zdHJpbmdzLi4uICovCisJICBjdGxwWzBdID0g MTsKKyNlbmRpZiAvKiBVTlBSRUZJWFpFUk8gKi8KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCWlm IChzKSBpZiAoKnMpIHsJCS8qIElmIHdlIGhhdmUgYSBjb21tYW5kIHRvIHNlbmQuLi4gKi8KKwkg ICAgY2hhciB0bXBidWZbMzU2XTsKKwkgICAgaW50IHRtcGJ1ZnNpeiA9IDM1NjsKKwkgICAgaW50 IHN0dWZmID0gLTEsIHN0dWZmMiA9IC0xLCBsZW4gPSAwOworCSAgICBleHRlcm4gaW50IHRubG07 CisJICAgIGlmIChzc3RhdGUgPT0gJ3MnKSB7CS8qIFNlbmRpbmcgZmlsZShzKSAqLworI2lmZGVm IENLX1hZWgorCQlpZiAocHJvdG9jb2wgPT0gUFJPVE9fWCkgeworCQkgICAgY2hhciAqIHMyOwor CQkgICAgczIgPSBjbWFyZzJbMF0gPyBjbWFyZzIgOiBjbWFyZzsKKwkJICAgIGlmICgoaW50KXN0 cmxlbihzKSArIChpbnQpc3RybGVuKHMyKSArIDQgPCAzNTYpCisJCSAgICAgIHNwcmludGYodG1w YnVmLCBzLCBzMik7CisJCSAgICBlbHNlCisJCSAgICAgIHRtcGJ1ZlswXSA9IE5VTDsKKwkJfSBl bHNlIHsKKyNlbmRpZiAvKiBDS19YWVogKi8KKwkJICAgIGNrbWFrbXNnKHRtcGJ1ZiwgMzU2LCBz LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyNpZmRlZiBDS19YWVoKKwkJfQorI2VuZGlmIC8qIENLX1hZ WiAqLworCSAgICB9IGVsc2UgewkJCS8qIENvbW1hbmQgZm9yIHNlcnZlciAqLworCQlja3N0cm5j cHkodG1wYnVmLHMsMzU2KTsKKwkgICAgfQorCSAgICBja3N0cm5jYXQodG1wYnVmLCAiXDAxNSIs c2l6ZW9mKHRtcGJ1ZikpOworCSAgICBpZiAodG5sbSkJCQkvKiBURVJNSU5BTCBORVdMSU5FIE9O ICovCisJICAgICAgc3R1ZmYgPSBMRjsJCS8qIFN0dWZmIExGICovCisjaWZkZWYgVE5DT0RFCisJ ICAgIC8qIFRFTE5FVCBORVdMSU5FIE1PREUgKi8KKwkgICAgaWYgKGlzX3RuKSB7CisJCXN3aXRj aCAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpID8gdG5fYl9ubG0gOiB0bl9ubG0pIHsKKwkJICBj YXNlIFROTF9DUjoKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgVE5MX0NSTlVMOgorCQkgICAgYnJl YWs7CisJCSAgY2FzZSBUTkxfQ1JMRjoKKwkJICAgIHN0dWZmMiA9IHN0dWZmOworCQkgICAgc3R1 ZmYgPSBMRjsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8K KworI2lmZGVmIE5FVENPTk4KKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBSTE9HQ09ERQorCSAg ICBpZiAobmV0d29yayAmJiB0dG5wcm90byA9PSBOUF9STE9HSU4pIHsKKwkJc3dpdGNoICh0bl9i X25sbSkgeyAvKiBBbHdheXMgQklOQVJZICovCisJCSAgY2FzZSBUTkxfQ1I6CisJCSAgICBicmVh azsKKwkJICBjYXNlIFROTF9DUk5VTDoKKwkJICAgIHN0dWZmMiA9IHN0dWZmOworCQkgICAgc3R1 ZmYgID0gTlVMOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBUTkxfQ1JMRjoKKwkJICAgIHN0dWZm MiA9IHN0dWZmOworCQkgICAgc3R1ZmYgPSBMRjsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0K KyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8q IE5FVENPTk4gKi8KKworCSAgICBsZW4gPSBzdHJsZW4odG1wYnVmKTsKKwkgICAgaWYgKHN0dWZm ID49IDAgJiYgbGVuIDwgdG1wYnVmc2l6IC0gMSkgeworCQl0bXBidWZbbGVuKytdID0gc3R1ZmY7 CisJCWlmIChzdHVmZjIgPj0gMCAmJiBsZW4gPCB0bXBidWZzaXogLSAxKQorCQkgIHRtcGJ1Zlts ZW4rK10gPSBzdHVmZjI7CisJCXRtcGJ1ZltsZW5dID0gTlVMOworCSAgICB9CisJICAgIHR0b2wo KENIQVIgKil0bXBidWYsbGVuKTsKKwkgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spCS8qIEdp dmUgcmVtb3RlIEtlcm1pdCB0aW1lIHRvIHN0YXJ0ICovCisJICAgICAgbXNsZWVwKDQwMCk7CisJ fQorICAgIH0KKworI2lmZGVmIENLX1hZWgorICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7 CQkvKiBOb24tS2VybWl0IHByb3RvY29sIHNlbGVjdGVkICovCisJY2hhciB0bXBidWZbMzU2XTsK KwlpbnQgdG1wYnVmc2l6ID0gMzU2OworCWNoYXIgKiBzID0gIiI7CisKKyNpZmRlZiBDS19UTVBE SVIKKwlpZiAoc3N0YXRlID09ICd2JykgewkJLyogSWYgcmVjZWl2aW5nIGFuZC4uLiAqLworCSAg ICBpZiAoZGxkaXIgJiYgIWZfdG1wZGlyKSB7CS8qIGlmIHRoZXkgaGF2ZSBhIGRvd25sb2FkIGRp cmVjdG9yeSAqLworCQlpZiAocyA9IHpndGRpcigpKSB7CS8qIEdldCBjdXJyZW50IGRpcmVjdG9y eSAqLworCQkgICAgaWYgKHpjaGRpcihkbGRpcikpIHsgLyogQ2hhbmdlIHRvIGRvd25sb2FkIGRp cmVjdG9yeSAqLworCQkJY2tzdHJuY3B5KHNhdmRpcixzLFRNUERJUkxFTik7CisJCQlmX3RtcGRp ciA9IDE7CS8qIFJlbWVtYmVyIHRoYXQgd2UgZGlkIHRoaXMgKi8KKwkJICAgIH0KKwkJfQorCSAg ICB9CisJfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisjaWZkZWYgWFlaX0lOVEVSTkFMCQkJ LyogSW50ZXJuYWwgKi8KKwlzdWNjZXNzID0gIXB4eXooc3N0YXRlKTsKKyNlbHNlCisjaWZkZWYg Q0tfUkVESVIJCQkJLyogRXh0ZXJuYWwgKi8KKwlzd2l0Y2ggKHNzdGF0ZSkgeworCSAgY2FzZSAn cyc6CQkJLyogJ1RpcyBiZXR0ZXIgdG8gU0VORC4uLiAqLworCSAgICBzID0gYmluYXJ5ID8gcHRh Yltwcm90b2NvbF0ucF9iX3NjbWQgOiBwdGFiW3Byb3RvY29sXS5wX3Rfc2NtZDsKKwkgICAgYnJl YWs7CisJICBjYXNlICd2JzoJCQkvKiAuLi4gdGhhbiBSRUNFSVZFICovCisJICAgIHMgPSBiaW5h cnkgPyBwdGFiW3Byb3RvY29sXS5wX2JfcmNtZCA6IHB0YWJbcHJvdG9jb2xdLnBfdF9yY21kOwor CSAgICBicmVhazsKKwl9CisJaWYgKCFzKSBzID0gIiI7CisJaWYgKCpzKSB7CisJICAgIGlmIChz c3RhdGUgPT0gJ3MnKSB7CS8qIFNlbmRpbmcgKi8KKwkJZXh0ZXJuIGludCB4ZmVybW9kZTsKKwkJ aW50IGsgPSAwLCB4ID0gMCwgYiA9IGJpbmFyeTsKKwkJLyoKKwkJICBJZiBqdXN0IG9uZSBmaWxl IHdlIGNhbiBzY2FuIGl0IHRvIHNldCB0aGUgeGZlciBtb2RlLgorCQkgIE90aGVyd2lzZSBpdCdz IHVwIHRvIHRoZSBleHRlcm5hbCBwcm90b2NvbCBwcm9ncmFtLgorCQkqLworCQlpZiAocGF0dGVy bnMgJiYgeGZlcm1vZGUgPT0gWE1PREVfQSAmJiAhaXN3aWxkKGZzcGVjKSkgeworCQkgICAgZXh0 ZXJuIGludCBuc2NhbmZpbGU7CisJCSAgICBrID0gc2NhbmZpbGUoZnNwZWMsJngsbnNjYW5maWxl KTsKKwkJICAgIGlmIChrID4gLTEpIHsKKwkJCWIgPSAoayA9PSBGVF9CSU4pID8gWFlGVF9CIDog WFlGVF9UOworCQkJcyA9IGIgPworCQkJICAgIHB0YWJbcHJvdG9jb2xdLnBfYl9zY21kIDoKKwkJ CSAgICBwdGFiW3Byb3RvY29sXS5wX3Rfc2NtZDsKKwkJICAgIH0KKwkJfQorCQlpZiAoKGludClz dHJsZW4ocykgKyAoaW50KXN0cmxlbihmc3BlYykgPCB0bXBidWZzaXopIHsKKwkJICAgIHNwcmlu dGYodG1wYnVmLHMsZnNwZWMpOyAvKiBzYWZlIChwcmVjaGVja2VkKSAqLworCQkgICAgdGxvZyhG MTEwLCJTZW5kaW5nIixmc3BlYywwTCk7CisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBSZWNlaXZp bmcgKi8KKwkJaWYgKChpbnQpc3RybGVuKHMpICsgKGludClzdHJsZW4oY21hcmcyKSA8IHRtcGJ1 ZnNpeikgeworCQkgICAgc3ByaW50Zih0bXBidWYscyxjbWFyZzIpOyAvKiBzYWZlIChwcmVjaGVj a2VkKSAqLworCQkgICAgdGxvZyhGMTEwLCJSZWNlaXZpbmciLGNtYXJnMiwwTCk7CisJCX0KKwkg ICAgfQorCSAgICB0bG9nKEYxMTAsIiB2aWEgZXh0ZXJuYWwgcHJvdG9jb2w6Iix0bXBidWYsMCk7 CisJICAgIGRlYnVnKEYxMTAsImNrY3BybyB0dHJ1bmNtZCIsdG1wYnVmLDApOworCSAgICBzdWNj ZXNzID0gdHRydW5jbWQodG1wYnVmKTsKKwkgICAgdGxvZyhGMTEwLCIgc3RhdHVzOiIsc3VjY2Vz cyA/ICJPSyIgOiAiRkFJTEVEIiwgMCk7CisJfSBlbHNlIHsKKwkgICAgcHJpbnRmKCI/U29ycnks IG5vIGV4dGVybmFsIHByb3RvY29sIGRlZmluZWQgZm9yICVzXHJcbiIsCisJCSAgIHB0YWJbcHJv dG9jb2xdLnBfbmFtZQorCQkgICApOworCX0KKyNlbHNlCisJcHJpbnRmKAorIlNvcnJ5LCBvbmx5 IEtlcm1pdCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdFxu IgorCSAgICAgICApOworI2VuZGlmIC8qIENLX1JFRElSICovCisjZW5kaWYgLyogWFlaX0lOVEVS TkFMICovCisJcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBDS19YWVogKi8KKworI2lmZGVmIE5U U0lHWAorICAgIGNvbnJhdygpOworICAgIGNvbm5vaSgpOworI2Vsc2UKKyAgICBpZiAoIWxvY2Fs KQorICAgICAgY29ubm9pKCk7CQkJCS8qIE5vIGNvbnNvbGUgaW50ZXJydXB0cyBpZiByZW1vdGUg Ki8KKyNlbmRpZiAvKiBOVFNJRyAqLworCisgICAga2FjdGl2ZSA9IDE7CisgICAgaWYgKHNzdGF0 ZSA9PSAneCcpIHsJCS8qIElmIGVudGVyaW5nIHNlcnZlciBtb2RlLCAqLworCWV4dGVybiBpbnQg aG93Y2FsbGVkOworCXNlcnZlciA9IDE7CQkJLyogc2V0IGZsYWcsICovCisJZGVidWcoRjEwMSwi c2VydmVyIGJhY2tncmQiLCIiLGJhY2tncmQpOworCWRlYnVnKEYxMDEsInNlcnZlciBxdWlldCIs IiIscXVpZXQpOworCWRlYnVnKEYxMDAsIlNIT1VMRCBOT1QgU0VFIFRISVMgSUYgSU4gQkFDS0dS T1VORCEiLCIiLDApOworCWlmIChob3djYWxsZWQgPT0gSV9BTV9TU0hTVUIpIHsJLyogYW5kIGlz c3VlIGFwcHJvcHJpYXRlIG1lc3NhZ2UuICovCisJICAgIHR0b2woKENIQVIgKikiS0VSTUlUIFJF QURZIFRPIFNFUlZFLi4uXDAxNVwwMTIiLDI2KTsKKwl9IGVsc2UgaWYgKCFsb2NhbCkgeworCSAg ICBpZiAoIXF1aWV0ICYmICFiYWNrZ3JkCisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAgICAg ICAgICYmICFURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgLyogVXNlciB3YXMgdG9sZCBieSBuZWdv dGlhdGlvbiAqLworI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKwkJKSB7CisJCWNvbm9sbChzcnZ0 eHQpOworCQljb25vbGwoIktFUk1JVCBSRUFEWSBUTyBTRVJWRS4uLiIpOworCSAgICB9CisJfSBl bHNlIHsKKwkgICAgY29ub2woIkVudGVyaW5nIHNlcnZlciBtb2RlIG9uICIpOworCSAgICBjb25v bGwodHRuYW1lKTsKKwkgICAgY29ub2xsKCJUeXBlIEN0cmwtQyB0byBxdWl0LiIpOworCSAgICBp ZiAoc3J2ZGlzKSBpbnRtc2coLTFMKTsKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9MSVNU RU4KKwkgICAgaWYgKG5ldHdvcmsgJiYgdGNwc3JmZCA+IDApCisJICAgICAgdHRvbCgoQ0hBUiAq KSJLRVJNSVQgUkVBRFkgVE8gU0VSVkUuLi5cMDE1XDAxMiIsMjYpOworI2VuZGlmIC8qIE5PTElT VEVOICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisJfQorICAgIH0gZWxzZQorICAgICAgc2Vy dmVyID0gMDsKKyNpZmRlZiBWTVMKKyAgICBpZiAoIXF1aWV0ICYmICFiYWNrZ3JkKSAgICAvKiBT byBtZXNzYWdlIGRvZXNuJ3Qgb3ZlcndyaXRlIHByb21wdCAqLworICAgICAgY29ub2xsKCIiKTsK KyAgICBpZiAobG9jYWwpIGNvbnJlcygpOyAgICAgICAvKiBTbyBDdHJsLUMgd2lsbCB3b3JrICov CisjZW5kaWYgLyogVk1TICovCisvKgorICBJZiBpbiByZW1vdGUgbW9kZSwgbm90IHNodXNoZWQs IG5vdCBpbiBiYWNrZ3JvdW5kLCBhbmQgYXQgdG9wIGNvbW1hbmQgbGV2ZWwsCisgIGlzc3VlIGEg aGVscGZ1bCBtZXNzYWdlIHRlbGxpbmcgd2hhdCB0byBkby4uLgorKi8KKyAgICBpZiAoIWxvY2Fs ICYmICFxdWlldCAmJiAhYmFja2dyZCkgeworCWlmIChzc3RhdGUgPT0gJ3YnKSB7CisJICAgIGNv bm9sbCgiUmV0dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IGFuZCBnaXZlIGEgU0VORCBjb21tYW5k LiIpOworCSAgICBjb25vbGwoIiIpOworCSAgICBjb25vbGwoIktFUk1JVCBSRUFEWSBUTyBSRUNF SVZFLi4uIik7CisJfSBlbHNlIGlmIChzc3RhdGUgPT0gJ3MnKSB7CisJICAgIGNvbm9sbCgiUmV0 dXJuIHRvIHlvdXIgbG9jYWwgS2VybWl0IGFuZCBnaXZlIGEgUkVDRUlWRSBjb21tYW5kLiIpOwor CSAgICBjb25vbGwoIiIpOworCSAgICBjb25vbGwoIktFUk1JVCBSRUFEWSBUTyBTRU5ELi4uIik7 CisJfSBlbHNlIGlmICggc3N0YXRlID09ICdnJyB8fCBzc3RhdGUgPT0gJ3InIHx8IHNzdGF0ZSA9 PSAnaCcgfHwKKwkJICAgIHNzdGF0ZSA9PSAnaicgfHwgc3N0YXRlID09ICdjJyApIHsKKwkgICAg Y29ub2xsKCJSZXR1cm4gdG8geW91ciBsb2NhbCBLZXJtaXQgYW5kIGdpdmUgYSBTRVJWRVIgY29t bWFuZC4iKTsKKwkgICAgY29ub2xsKCIiKTsKKwkgICAgY29ub2xsKChzc3RhdGUgPT0gJ3InIHx8 IHNzdGF0ZSA9PSAnaicgfHwgc3N0YXRlID09ICdoJykgPworCQkgICAiS0VSTUlUIFJFQURZIFRP IEdFVC4uLiIgOgorCQkgICAiS0VSTUlUIFJFQURZIFRPIFNFTkQgU0VSVkVSIENPTU1BTkQuLi4i KTsKKwl9CisgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoIWxvY2FsKSBzbGVlcCgxKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisvKgorICBUaGUgJ3dhcnQoKScgZnVuY3Rpb24gaXMgZ2Vu ZXJhdGVkIGJ5IHRoZSB3YXJ0IHByb2dyYW0uICBJdCBnZXRzIGEKKyAgY2hhcmFjdGVyIGZyb20g dGhlIGlucHV0KCkgcm91dGluZSBhbmQgdGhlbiBiYXNlZCBvbiB0aGF0IGNoYXJhY3RlciBhbmQK KyAgdGhlIGN1cnJlbnQgc3RhdGUsIHNlbGVjdHMgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiwgYWNj b3JkaW5nIHRvIHRoZSBzdGF0ZQorICB0YWJsZSBhYm92ZSwgd2hpY2ggaXMgdHJhbnNmb3JtZWQg YnkgdGhlIHdhcnQgcHJvZ3JhbSBpbnRvIGEgYmlnIGNhc2UKKyAgc3RhdGVtZW50LiAgVGhlIGZ1 bmN0aW9uIGlzIGFjdGl2ZSBmb3Igb25lIHRyYW5zYWN0aW9uLgorKi8KKyAgICBydGltZXIoKTsJ CQkJLyogUmVzZXQgZWxhcHNlZC10aW1lIHRpbWVyICovCisjaWZkZWYgR0ZUSU1FUgorICAgIHJm dGltZXIoKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgcmVzZXRjKCk7CQkJCS8qICYgb3Ro ZXIgcGVyLXRyYW5zYWN0aW9uIGNvdW50ZXJzLiAqLworCisgICAgZGVidWcoRjEwMSwicHJvdG8g Y2FsbGluZyB3YXJ0LCBqdXN0b25lIiwiIixqdXN0b25lKTsKKworICAgIHdhcnQoKTsJCQkJLyog RW50ZXIgdGhlIHN0YXRlIHRhYmxlIHN3aXRjaGVyLiAqLworLyoKKyAgTm90ZTogdGhlIGZvbGxv d2luZyBpcyBuZWNlc3NhcnkgaW4gY2FzZSB3ZSBoYXZlIGp1c3QgZG9uZSBhIHJlbW90ZS1tb2Rl CisgIGZpbGUgdHJhbnNmZXIsIGluIHdoaWNoIGNhc2UgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFs IG1vZGVzIGhhdmUgYmVlbgorICBjaGFuZ2VkIGJ5IHR0cGt0KCkuICBJbiBwYXJ0aWN1bGFyLCBz cGVjaWFsIGNoYXJhY3RlcnMgbGlrZSBDdHJsLUMgYW5kCisgIEN0cmwtXCBtaWdodCBoYXZlIGJl ZW4gdHVybmVkIG9mZiAoc2VlIHR0cGt0KS4gIFNvIHRoaXMgY2FsbCB0byB0dHJlcygpIGlzCisg IGVzc2VudGlhbC4gIElNUE9SVEFOVDogcmVzdG9yZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZmlyc3Qs IG90aGVyd2lzZSBhbnkKKyAgdGVybWluYWwgaW50ZXJydXB0cyB0aGF0IG9jY3VyIGJlZm9yZSB0 aGlzIGlzIGRvbmUgaW4gdGhlIG5vcm1hbCBwbGFjZQorICBsYXRlciB3aWxsIGNhdXNlIGEgY3Jh c2guCisqLworI2lmZGVmIE9TMgorICAgIHR0cmVzKCk7CQkJCS8qIFJlc2V0IHRoZSBjb21tdW5p Y2F0aW9uIGRldmljZSAqLworI2Vsc2UKKyAgICBpZiAoIWxvY2FsKSB7CisJc2V0aW50KCk7CQkJ LyogQXJtIGludGVycnVwdCBoYW5kbGVycyBGSVJTVCAqLworCW1zbGVlcCg1MDApOworCXR0cmVz KCk7CQkJLyogVGhlbiByZXN0b3JlIHRlcm1pbmFsLiAqLworICAgIH0KKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICB4eHNjcmVlbihTQ1JfVEMsMCwwTCwiIik7CQkvKiBUcmFuc2FjdGlvbiBjb21wbGV0 ZSAqLworICAgIHggPSBxdWlldDsKKyAgICBxdWlldD0xOworICAgIGNsc2lmKCk7CQkJCS8qIEZh aWxzYWZlIGluIGNhc2Ugd2UgbWlzc2VkICovCisgICAgY2xzb2YoMSk7CQkJCS8qIGEgY2FzZSBp biB0aGUgc3RhdGUgbWFjaGluZS4gKi8KKyAgICBxdWlldCA9IHg7CisKKyAgICBpZiAoc2VydmVy KSB7CQkJLyogQmFjayBmcm9tIHBhY2tldCBwcm90b2NvbC4gKi8KKyAgICAJaWYgKCFxdWlldCAm JiAhYmFja2dyZAorI2lmZGVmIElLU0QKKwkgICAgJiYgIWluc2VydmVyCisjZW5kaWYgLyogSUtT RCAqLworCSAgICApIHsJCQkJLyogR2l2ZSBhcHByb3ByaWF0ZSBtZXNzYWdlICovCisJICAgIGNv bm9sbCgiIik7CisJICAgIGNvbm9sbCgiQy1LZXJtaXQgc2VydmVyIGRvbmUiKTsKKyAgICAgICAg fQorICAgICAgICBzZXJ2ZXIgPSAwOwkJCS8qIE5vdCBhIHNlcnZlciBhbnkgbW9yZSAqLworICAg IH0KK30KKworLyogIFMgRyBFIFQgSSBOIEkgVCAgLS0gIEhhbmRsZSBpbmNvbWluZyBHRVQtQ2xh c3MgcGFja2V0cyAgKi8KKworLyoKKyAgUmV0dXJuczoKKyAgIC0xOiBPbiBlcnJvcgorICAgIDA6 IEdFVCBwYWNrZXQgcHJvY2Vzc2VkIE9LIC0gcmVhZHkgdG8gU2VuZC4KKyAgICAxOiBFeHRlbmRl ZCBHRVQgcHJvY2Vzc2VkIE9LIC0gd2FpdCBmb3IgYW5vdGhlci4KKyovCitzdGF0aWMgaW50Citz Z2V0aW5pdChyZWdldCx4Z2V0KSBpbnQgcmVnZXQsIHhnZXQ7IHsJLyogU2VydmVyIGVuZCBvZiBH RVQgY29tbWFuZCAqLworICAgIGNoYXIgKiBmcyA9IE5VTEw7CQkJLyogUG9pbnRlciB0byBmaWxl c3BlYyAqLworICAgIGludCBpLCBuLCBkb25lID0gMDsKKyNpZmRlZiBQSVBFU0VORAorICAgIGV4 dGVybiBpbnQgdXNlcGlwZXMsIHBpcGVzZW5kOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAg ZXh0ZXJuIGludCBub2xpbmtzOworCisgICAgaWYgKCFFTkFCTEVEKGVuX2dldCkpIHsJCS8qIE9u bHkgaWYgbm90IGRpc2FibGVkISAgKi8KKwllcnJwa3QoKENIQVIgKikiR0VUIGRpc2FibGVkIik7 CisJcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiBPSyB0byBwcm9jZWVkICovCisKKyAgICBu b2xpbmtzID0gcmVjdXJzaXZlOworICAgIGZpbGNudCA9IDA7CisKKyNpZmRlZiBXSEFUQU1JCisg ICAgLyogSWYgdGhleSBhcmUgYWxpa2UgdGhpcyB3YXMgYWxyZWFkeSBkb25lIGluIHdob2FyZXdl KCkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCB3aGF0cnUiLCIiLHdoYXRydSk7CisgICAg aWYgKHdoYXRydSAmIFdNSV9GTEFHKSB7CQkvKiBEaWQgd2UgZ2V0IFdIQVRBTUkgaW5mbz8gKi8K KwlkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBiaW5hcnkgKDEpIiwiIixiaW5hcnkpOworI2lmZGVmIFZN UworCWlmIChiaW5hcnkgIT0gWFlGVF9JICYmIGJpbmFyeSAhPSBYWUZUX0wpCisjZWxzZQorI2lm ZGVmIE9TMgorCSAgaWYgKGJpbmFyeSAhPSBYWUZUX0wpCisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogVk1TICovCisJICAgIGJpbmFyeSA9ICh3aGF0cnUgJiBXTUlfRk1PREUpID8gLyogWWVz LCBzZXQgZmlsZSB0eXBlICovCisJICAgICAgWFlGVF9CIDogWFlGVF9UOwkvKiBhdXRvbWF0aWNh bGx5ICovCisJZGVidWcoRjEwMSwic2dldGluaXQgYmluYXJ5ICgyKSIsIiIsYmluYXJ5KTsKKwlp ZiAoIXdlYXJlYWxpa2UpCisJICBmbmNudiA9ICh3aGF0cnUgJiBXTUlfRk5BTUUpID8gMSA6IDA7 IC8qIEFuZCBuYW1lIGNvbnZlcnNpb24gKi8KKyAgICB9CisjZW5kaWYgLyogV0hBVEFNSSAqLwor CisgICAgZnMgPSAoY2hhciAqKXNydmNtZDsKKyAgICBzcnZwdHIgPSBzcnZjbWQ7CQkJLyogUG9p bnQgdG8gc2VydmVyIGNvbW1hbmQgYnVmZmVyICovCisgICAgZGVjb2RlKHJkYXRhcCxwdXRzcnYs MCk7CQkvKiBEZWNvZGUgdGhlIEdFVCBjb21tYW5kIGludG8gaXQgKi8KKyAgICAvKiBBY2NlcHQg bXVsdGlwbGUgZmlsZXNwZWNzICovCisgICAgY21hcmcyID0gIiI7CQkJLyogRG9uJ3QgdXNlIGNt YXJnMiAqLworICAgIGNtYXJnID0gIiI7CQkJCS8qIERvbid0IHVzZSBjbWFyZyAqLworCisgICAg ZG9uZSA9IDE7CQkJCS8qIE9ubHkgMSBwYWNrZXQgbmVlZGVkLi4uICovCisgICAgaWYgKHhnZXQp IHsJCQkJLyogU3BlY2lhbCBkZWNvZGluZyBmb3IgRXh0ZW5kZWQgR0VUICovCisJY2hhciBMLCBu ZXh0LCBjOwkJLyogUExWIGl0ZW1zICovCisJaW50IGxlbiwgdmFsOwkJCS8qIE1vcmUgUExWIGl0 ZW1zICovCisJY2hhciAqIHAgPSAoY2hhciAqKXNydmNtZDsJLyogU3RyaW5nIHRvIGRlY29kZSAq LworCisJZG9uZSA9IDA7CQkJLyogTWF5YmUgbW9yZSBwYWNrZXRzIG5lZWRlZCAqLworCWZzID0g TlVMTDsJCQkvKiBXZSBkb24ndCBrbm93IHRoZSBmaWxlc3BlYyB5ZXQgKi8KKwljID0gKnArKzsJ CQkvKiBHZXQgZmlyc3QgcGFyYW1ldGVyICovCisKKwl3aGlsZSAoYykgewkJCS8qIEZvciBhbGwg cGFyYW1ldGVycy4uLiAqLworCSAgICBkZWJ1ZyhGMDAwLCJzZ2V0aW5pdCBjIiwiIixjKTsKKwkg ICAgTCA9ICpwKys7CQkJLyogR2V0IGxlbmd0aCAqLworCSAgICBpZiAoTCA+PSBTUCkJCS8qIERl Y29kZSBsZW5ndGggKi8KKwkgICAgICBsZW4gPSB4dW5jaGFyKEwpOworCSAgICBlbHNlIGlmIChj ID09ICdAJykgewkvKiBBbGxvdyBtaXNzaW5nIEVPUCBsZW5ndGggZmllbGQgKi8KKwkJbGVuID0g MDsKKwkgICAgfSBlbHNlIHsKKwkJbGVuID0gKHh1bmNoYXIoKnArKykgKiA5NSk7CisJCWxlbiAr PSB4dW5jaGFyKCpwKyspOworCSAgICB9CisJICAgIGRlYnVnKEYxMDEsInNnZXRpbml0IGxlbiIs IiIsbGVuKTsKKwkgICAgbmV4dCA9ICoocCtsZW4pOwkJLyogR2V0IG5leHQgcGFyYW1ldGVyICov CisJICAgICoocCtsZW4pID0gTlVMOwkJLyogWmVybyBpdCBvdXQgdG8gdGVybWluYWwgdmFsdWUg Ki8KKwkgICAgZGVidWcoRjExMCwic2dldGluaXQgcCIscCwwKTsKKwkgICAgc3dpdGNoIChjKSB7 CQkvKiBEbyB0aGUgcGFyYW1ldGVyICovCisJICAgICAgY2FzZSAnTyc6CQkJLyogR0VUIE9wdGlv bnMgKi8KKwkJdmFsID0gYXRvaShwKTsJCS8qIENvbnZlcnQgdG8gaW50ICovCisJCWRlYnVnKEYx MDEsInNnZXRpbml0IE8gdmFsIiwiIix2YWwpOworCQlpZiAodmFsICYgR09QVF9ERUwpIG1vdmlu ZyA9IDE7CisJCWlmICh2YWwgJiBHT1BUX1JFUykgcmVnZXQgPSAxOworCQlpZiAodmFsICYgR09Q VF9SRUMpIHsKKwkJICAgIHJlY3Vyc2l2ZSA9IDE7CisJCSAgICBub2xpbmtzID0gMjsKKwkJICAg IGlmIChmbnNwYXRoID09IFBBVEhfT0ZGKQorCQkgICAgICBmbnNwYXRoID0gUEFUSF9SRUw7CisJ CX0KKwkJYnJlYWs7CisJICAgICAgY2FzZSAnTSc6CQkJLyogVHJhbnNmZXIgTW9kZSAqLworCQl2 YWwgPSBhdG9pKHApOworCQlkZWJ1ZyhGMTAxLCJzZ2V0aW5pdCBNIHZhbCIsIiIsdmFsKTsKKwkJ aWYgKHZhbCA8IDEpCisJCSAgYnJlYWs7CisJCXBhdHRlcm5zID0gMDsJCS8qIFRha2VzIHByZWNl ZGVuY2Ugb3ZlciBwYXR0ZXJucyAqLworCQlmaWxlcGVlayA9IDA7CQkvKiBhbmQgRklMRSBTQ0FO ICovCisJCWlmICh2YWwgPT0gR01PRF9UWFQpIGJpbmFyeSA9IFhZRlRfVDsgLyogVGV4dCAqLwor CQlpZiAodmFsID09IEdNT0RfQklOKSBiaW5hcnkgPSBYWUZUX0I7IC8qIEJpbmFyeSAqLworCQlp ZiAodmFsID09IEdNT0RfTEJMKSBiaW5hcnkgPSBYWUZUX0w7IC8qIExhYmVsZWQgKi8KKwkJYnJl YWs7CisJICAgICAgY2FzZSAnRic6CQkJLyogRmlsZW5hbWUgKi8KKwkJZnMgPSBwOworCQlkZWJ1 ZyhGMTEwLCJzZ2V0aW5pdCBmaWxlbmFtZSIsZnMsMCk7CisJCWJyZWFrOworCSAgICAgIGNhc2Ug J0AnOgkJCS8qIEVuZCBPZiBQYXJhbWV0ZXJzICovCisJCWRvbmUgPSAxOworCQlkZWJ1ZyhGMTAw LCJzZ2V0aW5pdCBFT1AiLCIiLDApOworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQllcnJw a3QoKENIQVIgKikiVW5rbm93biBHRVQgUGFyYW1ldGVyIik7CisJCWRlYnVnKEYxMDAsInNnZXRp bml0IHVua25vd24gcGFyYW1ldGVyIiwiIiwwKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfQorCSAg ICBwICs9IChsZW4gKyAxKTsKKwkgICAgYyA9IG5leHQ7CisJfQorICAgIH0KKyAgICBpZiAoIWZz KSBmcyA9ICIiOwkJCS8qIEEgZmlsZW5hbWUgaXMgcmVxdWlyZWQgKi8KKyAgICBpZiAoKmZzKSB7 CisJaGF2ZWZzID0gMTsKKwluID0gMDsJCQkJLyogQ2hlY2sgZm9yIHF1b3RlZCBuYW1lICovCisJ aWYgKChuID0gc3RybGVuKGZzKSkgPiAxKSB7CisJICAgIC8qIE5vdGU6IHRoaXMgZG9lcyBub3Qg YWxsb3cgZm9yIG11bHRpcGxlIHF1b3RlZCBuYW1lcyAqLworCSAgICBpZiAoKGZzWzBdID09ICd7 JyAmJiBmc1tuLTFdID09ICd9JykgfHwKKwkJKGZzWzBdID09ICciJyAmJiBmc1tuLTFdID09ICci JykpIHsKKwkJZnNbbi0xXSA9ICdcMCc7CisJCWZzKys7CisJCWRlYnVnKEYxMTEsInNnZXRpbml0 IHVucXVvdGVkIGZpbGVuYW1lIixmcyxuKTsKKwkgICAgfSBlbHNlCisJICAgICAgbiA9IDA7CQkJ LyogVGhpcyBtZWFucyBubyBxdW90aW5nICovCisJfQorCisjaWZkZWYgUElQRVNFTkQKKwlkZWJ1 ZyhGMTExLCJzZ2V0aW5pdCIsZnMsdXNlcGlwZXMpOworCWlmICh1c2VwaXBlcyAmJiBFTkFCTEVE KGVuX2hvcykgJiYgKmZzID09ICchJykgeworCSAgICBjbWFyZyA9IGZzICsgMTsJCS8qIFBvaW50 IHBhc3QgdGhlIGJhbmcgKi8KKwkgICAgKmZzID0gTlVMOworCSAgICBuZmlscyA9IC0xOworCSAg ICBwaXBlc2VuZCA9IDE7CisJICAgIGRlYnVnKEYxMTEsInNnZXRpbml0IHBpcGVzZW5kIixjbWFy ZyxwaXBlc2VuZCk7CisJfQorCWlmICghcGlwZXNlbmQpIHsJCS8qIElmIGl0J3Mgbm90IGEgcGlw ZSAqLworI2VuZGlmIC8qIFBJUEVTRU5EICovCisJICAgIGlmIChuID09IDApIHsJCS8qIElmIHRo ZSBuYW1lIHdhcyBub3QgcXVvdGVkICovCisjaWZuZGVmIE5PTVNFTkQKKwkJbmZpbHMgPSBmbnBh cnNlKGZzKTsJLyogQWxsb3cgaXQgdG8gYmUgYSBsaXN0IG9mIG5hbWVzICovCisJCWRlYnVnKEYx MTEsInNnZXRpbml0IEEiLGZzLG5maWxzKTsKKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIGRvZXNu J3Qgd29yayBpZiBhIEdFVC1QQVRIIGlzIHNldC4gKi8KKwkJaWYgKG5maWxzID09IDEgJiYgIWlz d2lsZChmcykpIHsgLyogU2luZ2xlIGZpbGUgKi8KKwkJICAgIGNoYXIgKiBtOworCQkgICAgaWYg KCh4ID0gemNoa2koZnMpKSA8IDApIHsgLyogQ2hlY2sgaWYgaXQncyBzZW5kYWJsZSAqLworCQkJ c3dpdGNoICh4KSB7CisJCQkgIGNhc2UgLTE6IG0gPSAiRmlsZSBub3QgZm91bmQiOyBicmVhazsK KwkJCSAgY2FzZSAtMjogbSA9ICJOb3QgYSByZWd1bGFyIGZpbGUiOyBicmVhazsKKwkJCSAgY2Fz ZSAtMzogbSA9ICJSZWFkIGFjY2VzcyBkZW5pZWQiOyBicmVhazsKKwkJCX0KKwkJCWVycnBrdCgo Q0hBUiAqKW0pOworCQkJcmV0dXJuKC0xKTsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBJZiBpdCB3YXMgcXVvdGVkICovCisjZW5kaWYgLyog Tk9NU0VORCAqLworCQluenhvcHRzID0gMDsKKyNpZmRlZiBVTklYT1JPU0sKKwkJaWYgKG1hdGNo ZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKwkJ aWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOworCQkvKiBUcmVhdCBhcyBhIHNp bmdsZSBmaWxlc3BlYyAqLworCQluZmlscyA9IDAgLSBuenhwYW5kKGZzLG56eG9wdHMpOworCQlk ZWJ1ZyhGMTExLCJzZ2V0aW5pdCBCIixmcyxuZmlscyk7CisJCWNtYXJnID0gZnM7CisJICAgIH0K KyNpZmRlZiBQSVBFU0VORAorCX0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgIH0KKyAgICBp ZiAoIWRvbmUpIHsJCQkvKiBOZWVkIG1vcmUgTyBwYWNrZXRzLi4uICovCisJZGVidWcoRjEwMCwi c2dldGluaXQgTy1QYWNrZXQgVEJDIiwiIiwwKTsgLyogVG8gQmUgQ29udGludWVkICovCisJcmV0 dXJuKDEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAwLCJzZ2V0aW5pdCBPLVBhY2tldCBkb25lIC0g aGF2ZWZzIiwiIixoYXZlZnMpOworICAgIGlmICghaGF2ZWZzKSB7CQkJLyogRG9uZSAtIG1ha2Ug c3VyZSB3ZSBoYXZlIGZpbGVuYW1lICovCisJZXJycGt0KChDSEFSICopIkdFVCB3aXRob3V0IGZp bGVuYW1lIik7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZnJlZXJwa3Qod2lubG8pOworICAg IHdpbmxvID0gMDsJCQkJLyogQmFjayB0byBwYWNrZXQgMCBhZ2Fpbi4gKi8KKyAgICBkZWJ1ZyhG MTAxLCJzZ2V0aW5pdCB3aW5sbyIsIiIsd2lubG8pOworICAgIG5ha3N0YXRlID0gMDsJCQkvKiBO b3cgSSdtIHRoZSBzZW5kZXIhICovCisgICAgaWYgKHJlZ2V0KSBzZW5kbW9kZSA9IFNNX1JFU0VO RDsKKyAgICBpZiAoc2luaXQoKSA+IDApIHsJCQkvKiBTZW5kIFNlbmQtSW5pdCAqLworI2lmZGVm IFNUUkVBTUlORworCWlmICghc3RyZWFtaW5nKQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCSAg dGltaW50ID0gY2hrdGltbyhydGltbyx0aW1lZik7IC8qIFN3aXRjaCB0byBwZXItcGFja2V0IHRp bWVyICovCisJcmV0dXJuKDApOwkJCS8qIElmIHN1Y2Nlc3NmdWwsIHN3aXRjaCBzdGF0ZSAqLwor ICAgIH0gZWxzZSByZXR1cm4oLTEpOwkJCS8qIEVsc2UgYmFjayB0byBzZXJ2ZXIgY29tbWFuZCB3 YWl0ICovCit9CisKKyNlbHNlICAvKiBOT1hGRVIgKi8KKworI2luY2x1ZGUgImNrY2RlYi5oIgor CitWT0lECitwcm90bygpIHsKKyAgICBleHRlcm4gaW50IHN1Y2Nlc3M7CisgICAgc3VjY2VzcyA9 IDA7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NzaWcuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2tjc2lnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZjBiYTg1YwotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2Vy bWl0LTkuMC4zMDIvY2tjc2lnLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qICBDIEsgQyBTIEkgRyAu IEggICovCisKKy8qICBEZWZpbml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3Igc2lnbmFsIGhhbmRs aW5nICAqLworCisvKgorICBBdXRob3I6IEplZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJl LWVuZHBvaW50cy5jb20pLAorICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHku CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlh IFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNl cnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5 cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJt aXNzaW9ucy4KKyovCisjaWZkZWYgT1MyCisjaWZuZGVmIE5UCisjaWZuZGVmIF9fSEVWX18gICAg ICAgICAgICAgICAgIC8qIElOQ0xfU0VNQVBIT1JFIG1heSBhbHNvIGRlZmluZSBIRVYgKi8KKyNk ZWZpbmUgX19IRVZfXwordHlwZWRlZiAgVUxPTkcgICAgSEVWOyAgICAgICAgICAgICAgICAgIC8q IGhldiAqLwordHlwZWRlZiAgSEVWICAgICAgKlBIRVY7CisjZW5kaWYgLyogX19IRVZfXyAqLwor I2VuZGlmIC8qIE5UICovCitzdHJ1Y3QgX3RocmVhZGluZm8geworICAgIGludCBpbnVzZTsKKyAg ICBpbnQgY2hpbGQ7CisgICAgaW50IHNpYmxpbmc7CisjaWZkZWYgTlQKKyAgICBIQU5ETEUgaWQ7 CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBIQU5ETEUgcGFyZW50OworICAgIEhBTkRMRSBDb21w bGV0aW9uU2VtIDsKKyAgICBIQU5ETEUgRGllU2VtIDsKKyNlbHNlIC8qIE5UICovCisgICAgVElE IGlkOworICAgIFRJRCBwYXJlbnQ7CisgICAgSEVWIENvbXBsZXRpb25TZW07CisgICAgSEVWIERp ZVNlbTsKKyNlbmRpZiAvKiBOVCAqLworfTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENL X0FOU0lDCit0eXBlZGVmIFNJR1RZUCAoKmNrX3NpZ2Z1bmMpKHZvaWQgKik7Cit0eXBlZGVmIFNJ R1RZUCAoKmNrX3NpZ2hhbmQpKGludCk7CisjZWxzZQordHlwZWRlZiBTSUdUWVAgKCpja19zaWdm dW5jKSgpOwordHlwZWRlZiBTSUdUWVAgKCpja19zaWdoYW5kKSgpOworI2VuZGlmIC8qIENLX0FO U0lDICovCisKKy8qIE1hY3JvcyBmb3IgUE9TSVggdnMgb2xkLXN0eWxlIHNpZ25hbCBoYW5kbGlu Zy4gKi8KKworI2lmZGVmIENLX1BPU0lYX1NJRwordHlwZWRlZiBzaWdqbXBfYnVmIGNram1wYnVm OworI2Vsc2UKKyNpZmRlZiBOVAorI2RlZmluZSBOT0NSWVBUCisjaW5jbHVkZSA8d2luZG93cy5o PgorI2lmZGVmIE5UQVNNCit0eXBlZGVmIHN0cnVjdCB7CisgICAgQ09OVEVYVCBjb250ZXh0Owor ICAgIERXT1JEIHJldGNvZGU7Cit9IGNram1wYnVmOworI2Vsc2UgLyogTlRBU00gKi8KK3R5cGVk ZWYgam1wX2J1ZiBja2ptcGJ1ZjsKKyNlbmRpZiAvKiBOVEFTTSAqLworI2Vsc2UKK3R5cGVkZWYg am1wX2J1ZiBja2ptcGJ1ZjsKKyNlbmRpZgorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworLyoK KyAgU3VwcG9zZSB5b3Ugd2FudCB0byBwYXNzIHRoZSBhZGRyZXNzIG9mIGEgam1wX2J1ZiBiYXIg dG8gYSBmdW5jdGlvbiBmb28uCisgIFNpbmNlIGptcF9idWYgaXMgbm9ybWFsbHkgZGVmaW5lZCAo dHlwZWRlZidkKSBhcyBhbiBhcnJheSwgeW91IHdvdWxkIGRvCisgIGl0IGxpa2UgdGhpczogIGZv byhiYXIpLCB3aGVyZSBmb28gPSBmb28oam1wX2J1ZiBiYXIpLiAgQnV0IHN1cHBvc2UgYQorICBq bXBfYnVmIGlzIChzYXkpIGEgc3RydWN0IHJhdGhlciB0aGFuIGFuIGFycmF5LiAgVGhlbiB5b3Ug bXVzdCBkbworICBmb28oJmJhcikgd2hlcmUgZm9vIGlzIGZvbyhqbXBfYnVmICogYmFyKS4gIFRo aXMgaXMgY29udHJvbGxlZCBoZXJlIGluCisgIHRoZSB0cmFkaXRpb25hbCBmYXNoaW9uLCBieSBp ZmRlZnMuICBCeSBkZWZhdWx0LCB3ZSBhc3N1bWUgdGhhdCBqbXBfYnVmCisgIGlzIGFuIGFycmF5 LiAgRGVmaW5lIHRoZSBzeW1ib2wgSkJOT1RBUlJBWSBpZiBqbXBfYnVmIGlzIG5vdCBhbiBhcnJh eS4KKyovCisjaWZuZGVmIEpCTk9UQVJSQVkKKyNpZmRlZiBOVAorI2RlZmluZSBKQk5PVEFSUkFZ CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBKQk5PVEFSUkFZICovCisKKyNpZmRlZiBKQk5P VEFSUkFZCit0eXBlZGVmIGNram1wYnVmICogY2tqcHRyOworI2RlZmluZSBja2phZGRyKHgpICYg eAorI2RlZmluZSBja2pkcmVmKHgpICogeAorI2lmZGVmIENLX1BPU0lYX1NJRworI2RlZmluZSBj a3NldGptcCh4KSBzaWdzZXRqbXAoeCwxKQorI2RlZmluZSBja2xvbmdqbXAoeCx5KSBzaWdsb25n am1wKHgseSkKKyNlbHNlCisjaWZkZWYgTlQKK19faW5saW5lIGludAorY2tfaWgodm9pZCkgewor ICAgIGV4dGVybiBpbnQgVGxzSW5kZXg7CisjaWZkZWYgTlRTSUcKKyAgICBzdHJ1Y3QgX3RocmVh ZGluZm8gKiB0aHJlYWRpbmZvOworICAgIHRocmVhZGluZm8gPSAoc3RydWN0IF90aHJlYWRpbmZv ICopIFRsc0dldFZhbHVlKFRsc0luZGV4KTsKKyAgICBpZiAodGhyZWFkaW5mbykgeworICAgICAg ICBpZiAoV2FpdEFuZFJlc2V0U2VtKHRocmVhZGluZm8tPkRpZVNlbSwwKSkgeworICAgICAgICAg ICAgY2tUaHJlYWREaWUodGhyZWFkaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gMTsgICAgICAg ICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgZXhlY3V0ZSAqLworICAgICAgICB9Cisg ICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICBlbHNlIGRlYnVnKCBGMTAwLCAiY2tfaWgoKSB0aHJl YWRpbmZvIGlzIE5VTEwiLCIiLDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBO VFNJRyAqLworICAgIHJldHVybiAwOworfQorI2lmZGVmIE5UU0lHCisjZGVmaW5lIGNrc2V0am1w KHgpIHNldGptcCh4KQorI2RlZmluZSBja2xvbmdqbXAoeCx5KSBsb25nam1wKHgseSkKKyNlbHNl IC8qIE5UU0lHICovCisjaWZkZWYgTlRBU00KK19faW5saW5lIERXT1JECitja3NldGptcCggY2tq cHRyIGptcCApIHsKKyAgICBleHRlcm4gaW50IGlzaW50ZXJydXB0ZWQ7CisgICAgam1wLT5yZXRj b2RlID0gMDsKKyAgICBtZW1zZXQoICZqbXAtPmNvbnRleHQsIDAsIHNpemVvZihDT05URVhUKSAp OworICAgIGptcC0+Y29udGV4dC5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0ZVTEwgOworICAgIGlm ICggIUdldFRocmVhZENvbnRleHQoIEdldEN1cnJlbnRUaHJlYWQoKSwgJmptcC0+Y29udGV4dCAp ICkKKyAgICAgIGRlYnVnKCBGMTAxLCAiY2tzZXRqbXAgR2V0VGhyZWFkQ29udGV4dCBmYWlsZWQi LCIiLEdldExhc3RFcnJvcigpKTsKKyAgICBkZWJ1ZyhGMTAxLCJja3NldGptcCByZXR1cm5zIiwi IixqbXAtPnJldGNvZGUpOworICAgIGlzaW50ZXJydXB0ZWQgPSAwOworICAgIHJldHVybiAoam1w LT5yZXRjb2RlKTsKK30KKworX19pbmxpbmUgdm9pZAorY2tsb25nam1wKCBja2pwdHIgam1wLCBp bnQgcmV0dmFsICkgeworICAgIGV4dGVybiBIQU5ETEUgdGlkQ29tbWFuZDsKKyAgICBleHRlcm4g aW50IHR0eWZkLCBtZG10eXAgOworICAgIGV4dGVybiBEV09SRCBDb21tYW5kSUQ7CisgICAgZXh0 ZXJuIGludCBpc2ludGVycnVwdGVkOworCisgICAgY29ubm9pKCk7CisgICAgaXNpbnRlcnJ1cHRl ZCA9IDE7CisgICAgam1wLT5yZXRjb2RlID0gKCByZXR2YWwgPyByZXR2YWwgOiAxICk7CisgICAg ZGVidWcoRjEwMSwiYWJvdXQgdG8gU2V0VGhyZWFkQ29udGV4dCBmb3IgdGhyZWFkIiwiIiwgQ29t bWFuZElEKTsKKyAgICBkZWJ1ZyhGMTAxLCJmcm9tIFRocmVhZCIsIiIsR2V0Q3VycmVudFRocmVh ZElkKCkpOworICAgIGlmICggbWRtdHlwID49IDAgKSB7CisgICAgICAgIFB1cmdlQ29tbSggKEhB TkRMRSkgdHR5ZmQsIFBVUkdFX1RYQUJPUlQgfCBQVVJHRV9SWEFCT1JUICk7CisgICAgfQorICAg IGlmIChTZXRUaHJlYWRDb250ZXh0KCB0aWRDb21tYW5kLCAmam1wLT5jb250ZXh0ICkpCisgICAg ICBkZWJ1ZyhGMTAwLCJja2xvbmdqbXAgU2V0VGhyZWFkQ29udGV4dCBzdWNjZXNzIiwiIiwwKTsK KyAgICBlbHNlCisgICAgICBkZWJ1ZyhGMTAxLCJja2xvbmdqbXAgU2V0VGhyZWFkQ29udGV4dCBm YWlsZWQiLCIiLEdldExhc3RFcnJvcigpKTsKKyAgICBtc2xlZXAoNTApOworICAgIGNtaW5pKDEp OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGNvbW1hbmQgcGFyc2VyICovCisg ICAgcHV0a2V5KDEzKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3R1ZmYgYSBjYXJyaWFn ZSByZXR1cm4gKi8KKyAgIC8qIFBvc3RFdmVudEF2YWlsU2VtKCk7ICovCit9CisjZWxzZSAvKiBO VEFTTSAqLwordm9pZCBjcmFzaCggdm9pZCApIDsKKyNkZWZpbmUgY2tzZXRqbXAoeCkgc2V0am1w KHgpCitfX2lubGluZSB2b2lkCitja2xvbmdqbXAoIGNranB0ciBqbXAsIGludCByZXR2YWwgKSB7 CisgICAgZXh0ZXJuIEhBTkRMRSB0aWRDb21tYW5kOworICAgIGV4dGVybiBpbnQgdHR5ZmQsIG1k bXR5cDsKKyAgICBleHRlcm4gRFdPUkQgQ29tbWFuZElEOworICAgIENPTlRFWFQgY29udGV4dDsK KworICAgIGlmICggbWRtdHlwID49IDAgKSB7CisgICAgICAgIFB1cmdlQ29tbSggKEhBTkRMRSkg dHR5ZmQsIFBVUkdFX1RYQUJPUlQgfCBQVVJHRV9SWEFCT1JUICkgOworICAgIH0KKyAgICBtZW1z ZXQoICZjb250ZXh0LCAwLCBzaXplb2YoQ09OVEVYVCkgKTsKKyAgICBjb250ZXh0LkNvbnRleHRG bGFncyA9IENPTlRFWFRfRlVMTDsKKyAgICBpZiAoICFHZXRUaHJlYWRDb250ZXh0KCB0aWRDb21t YW5kLCAmY29udGV4dCApICkKKyAgICAgIGRlYnVnKCBGMTAxLCAiY2tsb25nam1wIEdldFRocmVh ZENvbnRleHQgZmFpbGVkIiwiIixHZXRMYXN0RXJyb3IoKSk7CisKKyAgICAvKiBJbnZhbGlkYXRl IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyICovCisgICAgY29udGV4dC5FaXAgPSAgKHVuc2lnbmVk IGxvbmcpIGNyYXNoOworCisgICAgZGVidWcoRjEwMSwiYWJvdXQgdG8gU2V0VGhyZWFkQ29udGV4 dCBmb3IgdGhyZWFkIiwiIiwgQ29tbWFuZElEKTsKKyAgICBkZWJ1ZyhGMTAxLCJmcm9tIFRocmVh ZCIsIiIsR2V0Q3VycmVudFRocmVhZElkKCkpOworICAgIGlmIChTZXRUaHJlYWRDb250ZXh0KCB0 aWRDb21tYW5kLCAmY29udGV4dCApKQorICAgICAgZGVidWcoRjEwMCwiY2tsb25nam1wIFNldFRo cmVhZENvbnRleHQgc3VjY2VzcyIsIiIsMCk7CisgICAgZWxzZQorICAgICAgZGVidWcoRjEwMSwi Y2tsb25nam1wIFNldFRocmVhZENvbnRleHQgZmFpbGVkIiwiIixHZXRMYXN0RXJyb3IoKSk7Cit9 CisjZW5kaWYgLyogTlRBU00gKi8KKyNlbmRpZiAvKiBOVFNJRyAqLworI2Vsc2UgLyogTlQgKi8K KyNkZWZpbmUgY2tzZXRqbXAoeCkgc2V0am1wKHgpCisjZGVmaW5lIGNrbG9uZ2ptcCh4LHkpIGxv bmdqbXAoeCx5KQorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisj ZWxzZSAgLyogam1wX2J1ZiBpcyBhbiBhcnJheSAqLwordHlwZWRlZiBja2ptcGJ1ZiBja2pwdHI7 CisjZGVmaW5lIGNramFkZHIoeCkgeAorI2RlZmluZSBja2pkcmVmKHgpIHgKKyNpZmRlZiBDS19Q T1NJWF9TSUcKKyNkZWZpbmUgY2tzZXRqbXAoeCkgc2lnc2V0am1wKHgsMSkKKyNkZWZpbmUgY2ts b25nam1wKHgseSkgc2lnbG9uZ2ptcCh4LHkpCisjZWxzZQorI2RlZmluZSBja3NldGptcCh4KSBz ZXRqbXAoeCkKKyNkZWZpbmUgY2tsb25nam1wKHgseSkgbG9uZ2ptcCh4LHkpCisjZW5kaWYgLyog Q0tfUE9TSVhfU0lHICovCisjZW5kaWYgLyogSkJOT1RBUlJBWSAqLworCitfUFJPVE9UWVAoIGlu dCBjY19leGVjdXRlLCAoY2tqcHRyLCBja19zaWdmdW5jLCBja19zaWdmdW5jKSApOworX1BST1RP VFlQKCBpbnQgYWxybV9leGVjdXRlLAorICAgICAgICAgIChja2pwdHIsCisgICAgICAgICAgIGlu dCAvKiB0aW1vICovLAorICAgICAgICAgICBja19zaWdoYW5kIC8qIGhhbmRsZXIgKi8sCisgICAg ICAgICAgIGNrX3NpZ2Z1bmMsIGNrX3NpZ2Z1bmMpICk7CitfUFJPVE9UWVAoIGludCBjY19hbHJt X2V4ZWN1dGUsCisgICAgICAgICAgKGNranB0ciwKKyAgICAgICAgICAgaW50IC8qIHRpbW8gKi8s CisgICAgICAgICAgIGNrX3NpZ2hhbmQgLyogaGFuZGxlciAqLywKKyAgICAgICAgICAgY2tfc2ln ZnVuYywKKyAgICAgICAgICAgY2tfc2lnZnVuYykgKTsKKworLyogRW5kIG9mIGNrdXNpZy5oICov CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2Nz c2wuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjc3NsLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzMWYxMgotLS0gL2Rldi9udWxsCisr KyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjc3NsLmgKQEAgLTAs MCArMSwxMjYgQEAKKyNpZmRlZiBDS19TU0wKKyNpZm5kZWYgQ0tfQU5TSUMKKyNkZWZpbmUgTk9Q Uk9UTworI2VuZGlmIC8qIENLX0FOU0lDICovCisjaW5jbHVkZSAiYmlvLmgiCisjaW5jbHVkZSAi YnVmZmVyLmgiCisjaW5jbHVkZSAieDUwOS5oIgorI2luY2x1ZGUgInBlbS5oIgorI2luY2x1ZGUg InNzbC5oIgorCitleHRlcm4gQklPICpiaW9fZXJyOworZXh0ZXJuIFNTTCAqc3NsX2NvbjsKK2V4 dGVybiBTU0xfQ1RYICpzc2xfY3R4OworZXh0ZXJuIGludCBzc2xfZGVidWdfZmxhZzsKK2V4dGVy biBpbnQgc3NsX29ubHlfZmxhZzsKK2V4dGVybiBpbnQgc3NsX2FjdGl2ZV9mbGFnOworZXh0ZXJu IGludCBzc2xfdmVyaWZ5X2ZsYWc7CitleHRlcm4gaW50IHNzbF9zZWN1cmVfZmxhZzsKK2V4dGVy biBpbnQgc3NsX3ZlcmJvc2VfZmxhZzsKK2V4dGVybiBpbnQgc3NsX2Rpc2FibGVkX2ZsYWc7Citl eHRlcm4gaW50IHNzbF9jZXJ0X3JlcXVpcmVkOworZXh0ZXJuIGludCBzc2xfY2VydHNva19mbGFn OworZXh0ZXJuIGludCBzc2xfZHVtbXlfZmxhZzsKKworZXh0ZXJuIGNoYXIgKnNzbF9sb2dfZmls ZTsKK2V4dGVybiBjaGFyICpzc2xfcnNhX2NlcnRfZmlsZTsKK2V4dGVybiBjaGFyICpzc2xfcnNh X2tleV9maWxlOworZXh0ZXJuIGNoYXIgKnNzbF9kc2FfY2VydF9maWxlOworZXh0ZXJuIGNoYXIg KnNzbF9kaF9rZXlfZmlsZTsKK2V4dGVybiBjaGFyICpzc2xfY2lwaGVyX2xpc3Q7CisKK2V4dGVy biBTU0xfQ1RYICp0bHNfY3R4OworZXh0ZXJuIFNTTCAqdGxzX2NvbjsKK2V4dGVybiBpbnQgdGxz X29ubHlfZmxhZzsKK2V4dGVybiBpbnQgdGxzX2FjdGl2ZV9mbGFnOworZXh0ZXJuIGludCB0bHNf c2VjdXJlX2ZsYWc7CisKK19QUk9UT1RZUChpbnQgc3NsX2RvX2luaXQsKGludCkpOworX1BST1RP VFlQKGludCBzc2xfZGlzcGxheV9jb25uZWN0X2RldGFpbHMsKFNTTCAqLGludCkpOworX1BST1RP VFlQKGludCBzc2xfc2VydmVyX3ZlcmlmeV9jYWxsYmFjaywoaW50LCBYNTA5X1NUT1JFX0NUWCAq KSk7CitfUFJPVE9UWVAoaW50IHNzbF9jbGllbnRfdmVyaWZ5X2NhbGxiYWNrLChpbnQsIFg1MDlf U1RPUkVfQ1RYICopKTsKKworI2lmZGVmIE9TMgorI2RlZmluZSBTU0xfZ2V0X2Vycm9yICAgICAg ICAgICAgICAgICAgICBja19TU0xfZ2V0X2Vycm9yCisjZGVmaW5lIFNTTF9yZWFkICAgICAgICAg ICAgICAgICAgICAgICAgIGNrX1NTTF9yZWFkCisjZGVmaW5lIFNTTF9wZWVrICAgICAgICAgICAg ICAgICAgICAgICAgIGNrX1NTTF9wZWVrCisjZGVmaW5lIFNTTF9jb25uZWN0ICAgICAgICAgICAg ICAgICAgICAgIGNrX1NTTF9jb25uZWN0CisjZGVmaW5lIFNTTF9zZXRfZmQgICAgICAgICAgICAg ICAgICAgICAgIGNrX1NTTF9zZXRfZmQKKyNkZWZpbmUgU1NMX2ZyZWUgICAgICAgICAgICAgICAg ICAgICAgICAgY2tfU1NMX2ZyZWUKKyNkZWZpbmUgU1NMX3NodXRkb3duICAgICAgICAgICAgICAg ICAgICAgY2tfU1NMX3NodXRkb3duCisjZGVmaW5lIFNTTF93cml0ZSAgICAgICAgICAgICAgICAg ICAgICAgIGNrX1NTTF93cml0ZQorI2RlZmluZSBTU0xfcGVuZGluZyAgICAgICAgICAgICAgICAg ICAgICBja19TU0xfcGVuZGluZworI2RlZmluZSBTU0xfbG9hZF9lcnJvcl9zdHJpbmdzICAgICAg ICAgICBja19TU0xfbG9hZF9lcnJvcl9zdHJpbmdzCisjZGVmaW5lIFNTTF9nZXRfcGVlcl9jZXJ0 aWZpY2F0ZSAgICAgICAgIGNrX1NTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZQorI2RlZmluZSBTU0xf Q0lQSEVSX2dldF9uYW1lICAgICAgICAgICAgICBja19TU0xfQ0lQSEVSX2dldF9uYW1lCisjZGVm aW5lIFNTTF9nZXRfY3VycmVudF9jaXBoZXIgICAgICAgICAgIGNrX1NTTF9nZXRfY3VycmVudF9j aXBoZXIKKyNkZWZpbmUgU1NMX2dldF9zaGFyZWRfY2lwaGVycyAgICAgICAgICAgY2tfU1NMX2dl dF9zaGFyZWRfY2lwaGVycworI2RlZmluZSBTU0xfZ2V0X2NpcGhlcnMgICAgICAgICAgICAgICAg ICBja19TU0xfZ2V0X2NpcGhlcnMKKyNkZWZpbmUgU1NMX2dldF9jaXBoZXJfbGlzdCAgICAgICAg ICAgICAgY2tfU1NMX2dldF9jaXBoZXJfbGlzdAorI2RlZmluZSBTU0xfQ1RYX3NldF9kZWZhdWx0 X3ZlcmlmeV9wYXRocyBja19TU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocworI2RlZmlu ZSBTU0xfdXNlX1JTQVByaXZhdGVLZXlfZmlsZSAgICAgICBja19TU0xfdXNlX1JTQVByaXZhdGVL ZXlfZmlsZQorI2RlZmluZSBTU0xfdXNlX0RTQVByaXZhdGVLZXlfZmlsZSAgICAgICBja19TU0xf dXNlX0RTQVByaXZhdGVLZXlfZmlsZQorI2RlZmluZSBTU0xfdXNlX1ByaXZhdGVLZXlfZmlsZSAg ICAgICAgICBja19TU0xfdXNlX1ByaXZhdGVLZXlfZmlsZQorI2RlZmluZSBTU0xfdXNlX2NlcnRp ZmljYXRlX2ZpbGUgICAgICAgICBja19TU0xfdXNlX2NlcnRpZmljYXRlX2ZpbGUKKyNkZWZpbmUg U1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlICAgICAgY2tfU1NMX0NUWF91c2VfUHJpdmF0ZUtl eV9maWxlCisjZGVmaW5lIFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUgICAgIGNrX1NTTF9D VFhfdXNlX2NlcnRpZmljYXRlX2ZpbGUKKyNkZWZpbmUgU1NMX3NldF92ZXJpZnkgICAgICAgICAg ICAgICAgICAgY2tfU1NMX3NldF92ZXJpZnkKKyNkZWZpbmUgU1NMX25ldyAgICAgICAgICAgICAg ICAgICAgICAgICAgY2tfU1NMX25ldworI2RlZmluZSBTU0xfQ1RYX2N0cmwgICAgICAgICAgICAg ICAgICAgICBja19TU0xfQ1RYX2N0cmwKKyNkZWZpbmUgU1NMX0NUWF9uZXcgICAgICAgICAgICAg ICAgICAgICAgY2tfU1NMX0NUWF9uZXcKKyNkZWZpbmUgU1NMX0NUWF9mcmVlICAgICAgICAgICAg ICAgICAgICAgY2tfU1NMX0NUWF9mcmVlCisjZGVmaW5lIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFz c3dkX2NiICAgIGNrX1NTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiCisjZGVmaW5lIFNTTHYy M19tZXRob2QgICAgICAgICAgICAgICAgICAgIGNrX1NTTHYyM19tZXRob2QKKyNkZWZpbmUgU1NM djNfbWV0aG9kICAgICAgICAgICAgICAgICAgICAgY2tfU1NMdjNfbWV0aG9kCisjZGVmaW5lIFRM U3YxX21ldGhvZCAgICAgICAgICAgICAgICAgICAgIGNrX1RMU3YxX21ldGhvZAorI2RlZmluZSBT U0x2MjNfY2xpZW50X21ldGhvZCAgICAgICAgICAgICBja19TU0x2MjNfY2xpZW50X21ldGhvZAor I2RlZmluZSBTU0x2M19jbGllbnRfbWV0aG9kICAgICAgICAgICAgICBja19TU0x2M19jbGllbnRf bWV0aG9kCisjZGVmaW5lIFRMU3YxX2NsaWVudF9tZXRob2QgICAgICAgICAgICAgIGNrX1RMU3Yx X2NsaWVudF9tZXRob2QKKyNkZWZpbmUgU1NMdjIzX3NlcnZlcl9tZXRob2QgICAgICAgICAgICAg Y2tfU1NMdjIzX3NlcnZlcl9tZXRob2QKKyNkZWZpbmUgU1NMdjNfc2VydmVyX21ldGhvZCAgICAg ICAgICAgICAgY2tfU1NMdjNfc2VydmVyX21ldGhvZAorI2RlZmluZSBUTFN2MV9zZXJ2ZXJfbWV0 aG9kICAgICAgICAgICAgICBja19UTFN2MV9zZXJ2ZXJfbWV0aG9kCisjZGVmaW5lIFNTTF9saWJy YXJ5X2luaXQgICAgICAgICAgICAgICAgIGNrX1NTTF9saWJyYXJ5X2luaXQKKyNkZWZpbmUgU1NM X3N0YXRlX3N0cmluZyAgICAgICAgICAgICAgICAgY2tfU1NMX3N0YXRlX3N0cmluZworI2RlZmlu ZSBTU0xfc3RhdGVfc3RyaW5nX2xvbmcgICAgICAgICAgICBja19TU0xfc3RhdGVfc3RyaW5nX2xv bmcKKyNkZWZpbmUgU1NMX2FjY2VwdCAgICAgICAgICAgICAgICAgICAgICAgY2tfU1NMX2FjY2Vw dAorI2RlZmluZSBTU0xfc2V0X2NpcGhlcl9saXN0ICAgICAgICAgICAgICBja19TU0xfc2V0X2Np cGhlcl9saXN0CisKKyNkZWZpbmUgRVJSX3ByaW50X2Vycm9ycyAgICAgICAgICAgICAgICAgY2tf RVJSX3ByaW50X2Vycm9ycworI2RlZmluZSBFUlJfcHJpbnRfZXJyb3JzX2ZwICAgICAgICAgICAg ICBja19FUlJfcHJpbnRfZXJyb3JzX2ZwCisjZGVmaW5lIEVSUl9lcnJvcl9zdHJpbmcgICAgICAg ICAgICAgICAgIGNrX0VSUl9lcnJvcl9zdHJpbmcKKyNkZWZpbmUgRVJSX2dldF9lcnJvciAgICAg ICAgICAgICAgICAgICAgY2tfRVJSX2dldF9lcnJvcgorCisjZGVmaW5lIEJJT19wcmludGYgICAg ICAgICAgICAgICAgICAgICAgIGNrX0JJT19wcmludGYKKyNkZWZpbmUgQklPX2N0cmwgICAgICAg ICAgICAgICAgICAgICAgICAgY2tfQklPX2N0cmwKKyNkZWZpbmUgQklPX25ldyAgICAgICAgICAg ICAgICAgICAgICAgICAgY2tfQklPX25ldworI2RlZmluZSBCSU9fc19maWxlICAgICAgICAgICAg ICAgICAgICAgICBja19CSU9fc19maWxlCisjZGVmaW5lIEJJT19zX21lbSAgICAgICAgICAgICAg ICAgICAgICAgIGNrX0JJT19zX21lbQorI2RlZmluZSBCSU9fc19udWxsICAgICAgICAgICAgICAg ICAgICAgICBja19CSU9fc19udWxsCisjZGVmaW5lIEJJT19yZWFkICAgICAgICAgICAgICAgICAg ICAgICAgIGNrX0JJT19yZWFkCisjZGVmaW5lIEJJT19uZXdfZmlsZSAgICAgICAgICAgICAgICAg ICAgIGNrX0JJT19uZXdfZmlsZQorI2RlZmluZSBCSU9fZnJlZSAgICAgICAgICAgICAgICAgICAg ICAgICBja19CSU9fZnJlZQorCisjZGVmaW5lIFg1MDlfZ2V0X2lzc3Vlcl9uYW1lICAgICAgICAg ICAgIGNrX1g1MDlfZ2V0X2lzc3Vlcl9uYW1lCisjZGVmaW5lIFg1MDlfdmVyaWZ5X2NlcnRfZXJy b3Jfc3RyaW5nICAgIGNrX1g1MDlfdmVyaWZ5X2NlcnRfZXJyb3Jfc3RyaW5nCisjZGVmaW5lIFg1 MDlfTkFNRV9vbmVsaW5lICAgICAgICAgICAgICAgIGNrX1g1MDlfTkFNRV9vbmVsaW5lCisjZGVm aW5lIFg1MDlfZ2V0X3N1YmplY3RfbmFtZSAgICAgICAgICAgIGNrX1g1MDlfZ2V0X3N1YmplY3Rf bmFtZQorI2RlZmluZSBYNTA5X1NUT1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0ICBja19YNTA5X1NU T1JFX0NUWF9nZXRfY3VycmVudF9jZXJ0CisjZGVmaW5lIFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9k aXIgICAgICAgIGNrX1g1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXIKKyNkZWZpbmUgWDUwOV9mcmVl ICAgICAgICAgICAgICAgICAgICAgICAgY2tfWDUwOV9mcmVlCisKKyNkZWZpbmUgUlNBX2ZyZWUg ICAgICAgICAgICAgICAgICAgICAgICAgY2tfUlNBX2ZyZWUKKyNkZWZpbmUgUlNBX2dlbmVyYXRl X2tleSAgICAgICAgICAgICAgICAgY2tfUlNBX2dlbmVyYXRlX2tleQorCisjZGVmaW5lIERIX25l dyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrX0RIX25ldworI2RlZmluZSBESF9mcmVlICAg ICAgICAgICAgICAgICAgICAgICAgICBja19ESF9mcmVlCisjZGVmaW5lIERIX2dlbmVyYXRlX2tl eSAgICAgICAgICAgICAgICAgIGNrX0RIX2dlbmVyYXRlX2tleQorI2RlZmluZSBESF9nZW5lcmF0 ZV9wYXJhbWV0ZXJzICAgICAgICAgICBja19ESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzCisKKyNkZWZp bmUgRFNBX2ZyZWUgICAgICAgICAgICAgICAgICAgICAgICAgY2tfRFNBX2ZyZWUKKyNkZWZpbmUg RFNBX2dlbmVyYXRlX2tleSAgICAgICAgICAgICAgICAgY2tfRFNBX2dlbmVyYXRlX2tleQorI2Rl ZmluZSBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVycyAgICAgICAgICBja19EU0FfZ2VuZXJhdGVfcGFy YW1ldGVycworCisjZGVmaW5lIFBFTV9yZWFkX2Jpb19ESHBhcmFtcyAgICAgICAgICAgIGNrX1BF TV9yZWFkX2Jpb19ESHBhcmFtcworI2RlZmluZSBCTl9iaW4yYm4gICAgICAgICAgICAgICAgICAg ICAgICBja19CTl9iaW4yYm4KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8K CmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3N5 bS5oIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NzeW0uaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQwY2EzCi0tLSAvZGV2L251bGwKKysr IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2NzeW0uaApAQCAtMCww ICsxLDUgQEAKKy8qIFRoaXMgZmlsZSBpcyBmb3IgdXNlIHdpdGggY29tcGlsZXJzIHRoYXQgZG9u J3QgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0bworICogI2RlZmluZSBzeW1ib2xzIG9uIHRoZSBDIGNv bXBpbGVyIGNvbW1hbmQgbGluZS4gIFRoaXMgZmlsZSBtdXN0CisgKiBiZSAjaW5jbHVkZSdkIGJl Zm9yZSBhbGwgb3RoZXIgY2sqLmggZmlsZXMgc28gdGhhdCB0aGUgc3ltYm9scyAjZGVmaW5lJ2QK KyAqIGhlcmUgY2FuIGJlIHVzZWQgZm9yIGFueSBzdWJzZXF1ZW50IGNvbmRpdGlvbmFsIGNvZGUu CisgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrY3RlbC5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N0ZWwu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWYxMjk1Ci0tLSAvZGV2L251 bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N0ZWwuYwpA QCAtMCwwICsxLDkwMTUgQEAKK2NoYXIgKmNrdGVsdiA9ICJUZWxuZXQgc3VwcG9ydCwgOS4wLjI3 NCwgMTYgTWFyIDIwMTAiOworI2RlZmluZSBDS0NURUxfQworCitpbnQgc3N0ZWxuZXQgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAgLyogRG8gc2VydmVyLXNpZGUgVGVsbmV0IG5lZ290aWF0aW9u ICovCisKKy8qICBDIEsgQyBUIEUgTCAgLS0gIFRlbG5ldCBzdXBwb3J0ICAqLworCisvKgorICBB dXRob3JzOgorICAgIFRlbG5ldCBwcm90b2NvbCBieSBGcmFuayBkYSBDcnV6IGFuZCBKZWZmcmV5 IEFsdG1hbi4KKyAgICBUZWxuZXQgRm9yd2FyZCBYIGJ5IEplZmZyZXkgQWx0bWFuCisgICAgVGVs bmV0IFNUQVJUX1RMUyBzdXBwb3J0IGJ5IEplZmZyZXkgQWx0bWFuCisgICAgVGVsbmV0IEFVVEgg YW5kIEVOQ1JZUFQgc3VwcG9ydCBieSBKZWZmcmV5IEFsdG1hbgorICAgIFRlbG5ldCBDT01QT1JU IHN1cHBvcnQgYnkgSmVmZnJleSBBbHRtYW4KKyAgICBUZWxuZXQgTkVXLUVOVklST05NRU5UIHN1 cHBvcnQgYnkgSmVmZnJleSBBbHRtYW4KKyAgICBUZWxuZXQgTkFXUyBzdXBwb3J0IGJ5IEZyYW5r IGRhIENydXogYW5kIEplZmZyZXkgQWx0bWFuCisgICAgVGVsbmV0IFRFUk1UWVBFIHN1cHBvcnQg YnkgSmVmZnJleSBBbHRtYW4KKyAgICBUZWxuZXQgS0VSTUlUIHN1cHBvcnQgYnkgSmVmZnJleSBB bHRtYW4KKyAgICBPdGhlciBjb250cmlidXRpb25zIGFzIGluZGljYXRlZCBpbiB0aGUgY29kZS4K KworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEg VW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2Vy dmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHly aWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1p c3Npb25zLgorKi8KKworLyoKKyAgTk9URSBUTyBDT05UUklCVVRPUlM6IFRoaXMgZmlsZSwgYW5k IGFsbCB0aGUgb3RoZXIgc2hhcmVkIChja2MgYW5kIGNrdSkKKyAgQy1LZXJtaXQgc291cmNlIGZp bGVzLCBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBDIHByZXByb2Nlc3NvcnMgdGhhdCBzdXBwb3J0 CisgIG9ubHkgI2lmZGVmLCAjZWxzZSwgI2VuZGlmLCAjZGVmaW5lLCBhbmQgI3VuZGVmLiAgUGxl YXNlIGRvIG5vdCB1c2UgI2lmLAorICBsb2dpY2FsIG9wZXJhdG9ycywgb3Igb3RoZXIgcHJlcHJv Y2Vzc29yIGZlYXR1cmVzIGluIHRoaXMgbW9kdWxlLiAgQWxzbywKKyAgZG9uJ3QgdXNlIGFueSBB TlNJIEMgY29uc3RydWN0cyBleGNlcHQgd2l0aGluICNpZmRlZiBDS19BTlNJQy4uI2VuZGlmLgor Ki8KKworI2luY2x1ZGUgImNrY3N5bS5oIgorI2luY2x1ZGUgImNrY2RlYi5oIgorCisjaWZkZWYg VE5DT0RFCisjaW5jbHVkZSAiY2tja2VyLmgiCisjZGVmaW5lIFRFTENNRFMgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdG8gZGVmaW5lIG5hbWUgYXJyYXkgKi8KKyNkZWZpbmUgVEVMT1BUUyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBkZWZpbmUgbmFtZSBhcnJheSAqLworI2RlZmlu ZSBTTENfTkFNRVMgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIGRlZmluZSBuYW1lIGFycmF5 ICovCisjZGVmaW5lIEVOQ1JZUFRfTkFNRVMKKyNkZWZpbmUgQVVUSF9OQU1FUworI2RlZmluZSBU RUxPUFRfU1RBVEVTCisjZGVmaW5lIFRFTE9QVF9NT0RFUworI2RlZmluZSBUTkNfTkFNRVMKKyNp bmNsdWRlICJja2NuZXQuaCIKKyNpbmNsdWRlICJja2N0ZWwuaCIKKyNpZmRlZiBDS19BVVRIRU5U SUNBVElPTgorI2luY2x1ZGUgImNrdWF0aC5oIgorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9O ICovCisjaWZkZWYgQ0tfU1NMCisjaW5jbHVkZSAiY2tfc3NsLmgiCisjZW5kaWYgLyogQ0tfU1NM ICovCisKKyNpZm5kZWYgTk9URVJNCisjaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRm9yIHRlcm1pbmFsIHR5cGUgbmFtZSBzdHJpbmcgKi8KKyNpbmNsdWRlICJja3V1 c3IuaCIKKyNpZm5kZWYgTlQKKyNpbmNsdWRlIDxvczIuaD4KKyN1bmRlZiBDT01NRU5UCisjZWxz ZQorI2RlZmluZSBpc2FzY2lpIF9faXNhc2NpaQorI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAi Y2tvY29uLmgiCitleHRlcm4gaW50IHR0X3R5cGUsIG1heF90dDsKK2V4dGVybiBzdHJ1Y3QgdHRf aW5mb19yZWMgdHRfaW5mb1tdOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PVEVSTSAq LworCisjaWZkZWYgT1MyCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWZkZWYgTlQKKyNpbmNsdWRl IDxzZXRqbXBleC5oPgorI2Vsc2UgLyogTlQgKi8KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNlbmRp ZiAvKiBOVCAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgImNrY3NpZy5oIgorI2lu Y2x1ZGUgImNrb3N5bi5oIgorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tfTkFXUyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogTmVnb3RpYXRlIEFib3V0IFdpbmRvdyBTaXplICovCisj aWZkZWYgUkxPR0NPREUKK19QUk9UT1RZUCggaW50IHJsb2dfbmF3cywgKHZvaWQpICk7CisjZW5k aWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAvKiBDS19OQVdTICovCisKK2ludCB0bl9pbml0ID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgcHJvdG9jb2wgaW5pdGlhbGl6ZWQg ZmxhZyAqLworaW50IHRuX2JlZ3VuID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5l dCBwcm90b2NvbCBzdGFydGVkIGZsYWcgKi8KK3N0YXRpYyBpbnQgdG5fZmlyc3QgPSAxOyAgICAg ICAgICAgICAgICAvKiBGaXJzdCB0aW1lIGluaXQgZmxhZyAqLworZXh0ZXJuIGludCB0bl9leGl0 OyAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgb24gZGlzY29ubmVjdCAqLworZXh0ZXJuIGlu dCBuZXR0eXBlOworZXh0ZXJuIGludCBpbnNlcnZlcjsgICAgICAgICAgICAgICAgICAgIC8qIFJ1 bm5pbmcgYXMgSUtTRCAqLworY2hhciAqdG5fdGVybSA9IE5VTEw7ICAgICAgICAgICAgICAgICAg IC8qIFRlcm1pbmFsIHR5cGUgb3ZlcnJpZGUgKi8KKworI2lmZGVmIENLX1NORExPQworY2hhciAq dG5fbG9jID0gTlVMTDsgICAgICAgICAgICAgICAgICAgIC8qIExvY2F0aW9uIG92ZXJyaWRlICov CisjZW5kaWYgLyogQ0tfU05ETE9DICovCitpbnQgdG5fbmxtID0gVE5MX0NSTEY7ICAgICAgICAg ICAgICAgICAgLyogVGVsbmV0IENSIC0+IENSIExGIG1vZGUgKi8KK2ludCB0bl9iX25sbSA9IFRO TF9DUjsgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgQmluYXJ5IENSIFJBVyBtb2RlICovCitp bnQgdG5fYl9tZXUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IEJpbmFyeSBN RSBtZWFucyBVIHRvbyAqLworaW50IHRuX2JfdW1lID0gMDsgICAgICAgICAgICAgICAgICAgICAg IC8qIFRlbG5ldCBCaW5hcnkgVSBtZWFucyBNRSB0b28gKi8KK2ludCB0bl93YWl0X2ZsZyA9IDE7 ICAgICAgICAgICAgICAgICAgICAvKiBUZWxuZXQgV2FpdCBmb3IgTmVnb3RpYXRpb25zICovCitp bnQgdG5faW5maW5pdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IEJ1ZyBJbmZp bml0ZS1Mb29wLUNoZWNrICovCitpbnQgdG5fcmVtX2VjaG8gPSAxOyAgICAgICAgICAgICAgICAg ICAgLyogV2Ugd2lsbCBlY2hvIGlmIFdJTEwgRUNITyAqLworaW50IHRuX2JfeGZlciA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBCaW5hcnkgZm9yIFhmZXJzPyAqLworaW50IHRu X3NiX2J1ZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBCVUcgLSBTQiB3L28g V0lMTCBvciBETyAqLworaW50IHRuX2F1dGhfa3JiNV9kZXNfYnVnID0gMTsgICAgICAgICAgIC8q IFRlbG5ldCBCVUcgLSBBVVRIIEtSQjUgREVTICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgIHRydW5jYXRlcyBsb25nIGtleXMgKi8KK2lu dCB0bl9ub19lbmNyeXB0X3hmZXIgPSAwOyAgICAgICAgICAgICAvKiBUdXJuIG9mZiBUZWxuZXQg RW5jcnlwdD8gKi8KK2ludCB0bl9kZWxheV9zYiA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBE ZWxheSBTQnMgdW50aWwgc2FmZSAqLworaW50IHRuX2F1dGhfaG93ID0gVE5fQVVUSF9IT1dfQU5Z OworaW50IHRuX2F1dGhfZW5jID0gVE5fQVVUSF9FTkNfQU5ZOworaW50IHRuX2RlYiA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbG5ldCBEZWJ1ZyBtb2RlICovCitpbnQgdG5fc2Z1 ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWljcm9zb2Z0IFNGVSBjb21wYXRpYmls aXR5ICovCisjaWZkZWYgQ0tfRk9SV0FSRF9YCitjaGFyICogdG5fZndkeF94YXV0aG9yaXR5ID0g TlVMTDsgICAgICAgLyogWGF1dGhvcml0eSBGaWxlICovCitpbnQgICAgZndkeF9ub19lbmNyeXB0 ID0gMDsgICAgICAgICAgICAgLyogRm9yd2FyZC1YIHJlcXVpcmVzIGVuY3J5cHRpb24gKi8KKyNl bmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKworI2lmZGVmIE9TMgoraW50IHR0bnVtID0gLTE7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIExhc3QgVGVsbmV0IFRlcm1pbmFsIFR5cGUgc2VudCAq LworaW50IHR0bnVtZW5kID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBlbmQgb2Yg bGlzdCBiZWVuIGZvdW5kICovCisjZW5kaWYgLyogT1MyICovCisKK2NoYXIgdG5fbXNnW1ROX01T R19MRU5dOyAgICAgICAgICAgICAgICAvKiBUZWxuZXQgZGF0YSBjYW4gYmUgcmF0aGVyIGxvbmcg Ki8KK2NoYXIgaGV4YnVmW1ROX01TR19MRU5dOworY2hhciB0bl9tc2dfb3V0W1ROX01TR19MRU5d OworI2lmZGVmIENLX0ZPUldBUkRfWAorQ0hBUiBmd2R4X21zZ19vdXRbVE5fTVNHX0xFTl07Cisj ZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisKKy8qCisgIEluIG9yZGVyIHRvIHByZXZlbnQgYW4g aW5maW5pdGUgdGVsbmV0IG5lZ290aWF0aW9uIGxvb3Agd2UgbWFpbnRhaW4gYQorICBjb3VudCBv ZiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBzYW1lIHRlbG5ldCBuZWdvdGlhdGlvbiBtZXNzYWdl IGlzCisgIHNlbnQuIFdoZW4gdGhpcyBjb3VudCBoaXRzIE1BWFROQ05ULCB3ZSBkbyBub3Qgc2Vu ZCBhbnkgbW9yZSBvZiB0aGUKKyAgbWVzc2FnZS4gVGhlIGNvdW50IGlzIHN0b3JlZCBpbiB0aGUg dG5jbnRzW11bXSBhcnJheS4KKworICBUaGUgdG5jbnRzW11bXSBhcnJheSBpcyBpbmRleGVkIGJ5 IG5lZ290aWF0aW9uIG9wdGlvbiAoU1VQUFJFU1MgR08gQUhFQUQsCisgIFRFUk1JTkFMIFRZUEUs IE5BV1MsIGV0Yy4gLSBzZWUgdGhlIHRub3B0c1tdIGFycmF5KSBhbmQgdGhlIGZvdXIKKyAgbmVn b3RpYXRpb24gbWVzc2FnZSB0eXBlcyAoV0lMTCwgV09OVCwgRE8sIERPTlQpLiAgQWxsIHRlbG5l dCBuZWdvdGlhdGlvbnMKKyAgYXJlIGtlcHQgdHJhY2sgb2YgaW4gdGhpcyB3YXkuCisKKyAgVGhl IGNvdW50IGZvciBhIG1lc3NhZ2UgaXMgemVyb2VkIHdoZW4gdGhlICJvcHBvc2l0ZSIgbWVzc2Fn ZSBpcyBzZW50LgorICBXSUxMIGlzIHRoZSBvcHBvc2l0ZSBvZiBXT05ULCBhbmQgRE8gaXMgdGhl IG9wcG9zaXRlIG9mIERPTlQuCisgIEZvciBleGFtcGxlIHNlbmRpbmcgIldJTEwgU0dBIiBpbmNy ZW1lbnRzIHRuY250c1tURUxPUFRfU0dBXVswXQorICBhbmQgemVyb2VzIHRuY250c1tURUxPUFRf U0dBXVsxXS4KKworICBUaGUgY29kZSB0aGF0IGRvZXMgdGhpcyBpcyBpbiB0bl9zb3B0KCkuCisK KyAgcm9nZXJzaEBmc2ouY28uanAsIDE4LzMvMTk5NQorCisgIDgvMTYvMTk5OCAtIHdpdGggdGhl IHJlY2VudCByZXdyaXRlIG9mIHRoZSB0ZWxuZXQgc3RhdGUgbWFjaGluZSBJIGRvbid0CisgIHRo aW5rIHRoaXMgY29kZSBpcyBuZWNlc3NhcnkgYW55bW9yZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGRv IGFueSBoYXJtIHNvCisgIEkgYW0gbGVhdmluZyBpdCBpbi4gICAgLSBKZWZmCisKKyAgMTIvMjgv MTk5OCAtIGFsbCByZWZlcmVuY2VzIHRvIHRuY250c1tdIG11c3QgYmUgZG9uZSB3aXRoIFRFTE9Q VF9JTkRFWChvcHQpCisgIGJlY2F1c2UgdGhlIFRlbG5ldCBvcHRpb24gbGlzdCBpcyBubyBsb25n ZXIgY29udGlndW91cy4gIFdlIGFsc28gbXVzdAorICBhbGxvY2F0ZSBOVEVMT1BUUyArIDEgYmVj YXVzZSB0aGUgVEVMT1BUX0lOREVYKCkgbWFjcm8gcmV0dXJucyBOVEVMT1BUUworICBmb3IgYW4g aW52YWxpZCBvcHRpb24gbnVtYmVyLgorKi8KKworI2RlZmluZSBNQVhUTkNOVCA0ICAgICAgLyog UGVybWl0cyA0IGludGVybWVkaWF0ZSB0ZWxuZXQgZmlyZXdhbGxzL2dhdGV3YXlzICovCisKK2No YXIgdG5jbnRzW05URUxPUFRTKzFdWzRdOyAgICAgICAgICAgICAvKiBDb3VudHMgKi8KK2NoYXIg dG5vcHBzWzRdID0geyAxLDAsMywyIH07ICAgICAgICAgICAvKiBPcHBvc2l0ZXMgKi8KKworI2lm ZGVmIENLX0VOVklST05NRU5UCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisjZGVmaW5lIFRTQlVGU0la IDIwNTYKKyNlbHNlIC8qIENLX0ZPUldBUkRfWCAqLworI2RlZmluZSBUU0JVRlNJWiAxMDI0Cisj ZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCitjaGFyIHRuX2Vudl9hY2N0WzY0XTsKK2NoYXIgdG5f ZW52X2Rpc3BbNjRdOworY2hhciB0bl9lbnZfam9iWzY0XTsKK2NoYXIgdG5fZW52X3BybnRbNjRd OworY2hhciB0bl9lbnZfc3lzWzY0XTsKK2NoYXIgKiB0bl9lbnZfdXNlcnZhcls4XVsyXTsKK2lu dCB0bl9lbnZfZmxnID0gMTsKKyNlbHNlIC8qIENLX0VOVklST05NRU5UICovCisjZGVmaW5lIFRT QlVGU0laIDQxCitpbnQgdG5fZW52X2ZsZyA9IDA7CisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQg Ki8KKworI2lmZGVmIENPTU1FTlQKKy8qIFNJR1dJTkNIIGhhbmRsZXIgbW92ZWQgdG8gY2t1dXN4 LmMgKi8KKyNpZm5kZWYgTk9TSUdXSU5DSAorI2lmZGVmIENLX05BV1MgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFdpbmRvdyBzaXplIGJ1c2luZXNzICovCisjaWZkZWYgVU5JWAorI2luY2x1 ZGUgPHNpZ25hbC5oPgorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS19OQVdTICovCisj ZW5kaWYgLyogTk9TSUdXSU5DSCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworQ0hBUiBzYltU U0JVRlNJWl07ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciAtIGluY29taW5nIHN1Ym5l Z290aWF0aW9ucyAqLworQ0hBUiBzYl9vdXRbVFNCVUZTSVpdOyAgICAgICAgICAgICAgICAgIC8q IEJ1ZmZlciAtIG91dGdvaW5nIHN1Ym5lZ290aWF0aW9ucyAqLworCitpbnQgdG5fZHVwbGV4ID0g MTsgICAgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgZWNobyAqLworCitleHRlcm4gY2hhciB1 aWRidWZbXTsgICAgICAgICAgICAgICAgICAgLyogVXNlciBJRCBidWZmZXIgKi8KK2V4dGVybiBp bnQgcXVpZXQsIHR0bmV0LCB0dG5wcm90bywgZGVic2VzLCB3aGF0LCBkdXBsZXgsIG9sZHBsZXgs IGxvY2FsOworZXh0ZXJuIGludCBzZXNsb2csIHNlc3NmdCwgd2h5Y2xvc2VkOworI2lmZGVmIE9T MgorI2lmbmRlZiBOT1RFUk0KK2V4dGVybiBpbnQgdHRfcm93c1tdLCB0dF9jb2xzW107CitleHRl cm4gaW50IHR0X3N0YXR1c1tWTlVNXTsKK2V4dGVybiBpbnQgc2NybmluaXRpYWxpemVkW107Cisj ZW5kaWYgLyogTk9URVJNICovCisjZWxzZSAvKiBPUzIgKi8KK2V4dGVybiBpbnQgdHRfcm93cywg dHRfY29sczsgICAgICAgICAgICAvKiBFdmVyeWJvZHkgaGFzIHRoaXMgKi8KKyNlbmRpZiAvKiBP UzIgKi8KK2V4dGVybiBpbnQgY21kX2NvbHMsIGNtZF9yb3dzOworZXh0ZXJuIGNoYXIgbmFtZWNv cHlbXTsKK2V4dGVybiBjaGFyIG15aXBhZGRyW107ICAgICAgICAgICAgIC8qIEdsb2JhbCBjb3B5 IG9mIG15IElQIGFkZHJlc3MgKi8KKworI2lmbmRlZiBURUxPUFRfTUFDUk8KK2ludAordGVsb3B0 X2luZGV4KG9wdCkgaW50IG9wdDsgeworICAgIGlmIChvcHQgPj0gMCAmJiBvcHQgPD0gVEVMT1BU X1NUREVSUikKKyAgICAgIHJldHVybihvcHQpOworICAgIGVsc2UgaWYgKG9wdCA+PSBURUxPUFRf UFJBR01BX0xPR09OICYmIG9wdCA8PSBURUxPUFRfUFJBR01BX0hFQVJUQkVBVCkKKyAgICAgIHJl dHVybihvcHQtODgpOworICAgIGVsc2UgaWYgKG9wdCA9PSBURUxPUFRfSUJNX1NBSykKKyAgICAg IHJldHVybihvcHQtMTQ3KTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oTlRFTE9QVFMpOworfQor CitpbnQKK3RlbG9wdF9vayhvcHQpIGludCBvcHQ7IHsKKyAgICByZXR1cm4oKG9wdCA+PSBURUxP UFRfQklOQVJZICYmIG9wdCA8PSBURUxPUFRfU1RERVJSKSB8fAorICAgICAgICAgICAob3B0ID49 IFRFTE9QVF9QUkFHTUFfTE9HT04gJiYgb3B0IDw9IFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUKSB8 fAorICAgICAgICAgICAob3B0ID09IFRFTE9QVF9JQk1fU0FLKSk7Cit9CisKK0NIQVIgKgordGVs b3B0KG9wdCkgaW50IG9wdDsgeworICAgIGlmICh0ZWxvcHRfb2sob3B0KSkKKyAgICAgIHJldHVy bigoQ0hBUiAqKXRlbG9wdHNbdGVsb3B0X2luZGV4KG9wdCldKTsKKyAgICBlbHNlCisgICAgICBy ZXR1cm4oKENIQVIgKikiVU5LTk9XTiIpOworfQorCitpbnQKK3RlbG9wdF9tb2RlX29rKG9wdCkg aW50IG9wdDsgeworICAgIHJldHVybigodW5zaWduZWQgaW50KShvcHQpIDw9IFROX05HX01VKTsK K30KKworQ0hBUiAqCit0ZWxvcHRfbW9kZShvcHQpIGludCBvcHQ7IHsKKyAgICBpZiAodGVsb3B0 X21vZGVfb2sob3B0KSkKKyAgICAgIHJldHVybigoQ0hBUiAqKXRlbG9wdF9tb2Rlc1tvcHQtVE5f TkdfUkZdKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oKENIQVIgKikiVU5LTk9XTiIpOworfQor I2VuZGlmIC8qIFRFTE9QVF9NQUNSTyAqLworCitzdGF0aWMgaW50Cit0bl9vdXRzdChub3RxdWll dCkgaW50IG5vdHF1aWV0OyB7CisgICAgaW50IG91dHN0YW5kaW5nID0gMDsKKyAgICBpbnQgeCA9 IDA7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGludCBlID0gMDsKKyAgICBpbnQgZCA9IDA7 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisgICAgaWYgKHRuX3dhaXRfZmxnKSB7Cisg ICAgICAgIGZvciAoeCA9IFRFTE9QVF9GSVJTVDsgeCA8PSBURUxPUFRfTEFTVDsgeCsrKSB7Cisg ICAgICAgICAgICBpZiAoVEVMT1BUX09LKHgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFRFTE9Q VF9VTkFOU1dFUkVEX1dJTEwoeCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWll dCApCisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJl c3BvbnNlIHRvIFdJTEwgJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVM T1BUKHgpKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fb3V0c3QiLCJ1bmFu c3dlcmVkIFdJTEwiLHgpOworICAgICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7Cisg ICAgICAgICAgICAgICAgICAgIGlmICggIW5vdHF1aWV0ICkKKyAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9V TkFOU1dFUkVEX0RPKHgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggbm90cXVpZXQgKQor ICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciByZXNwb25z ZSB0byBETyAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkp OworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQg RE8iLHgpOworICAgICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7CisgICAgICAgICAg ICAgICAgICAgIGlmICggIW5vdHF1aWV0ICkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVE X1dPTlQoeCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCisgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3BvbnNlIHRvIFdP TlQgJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKHgpKTsKKyAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fb3V0c3QiLCJ1bmFuc3dlcmVkIFdPTlQi LHgpOworICAgICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7CisgICAgICAgICAgICAg ICAgICAgIGlmICggIW5vdHF1aWV0ICkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RP TlQoeCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBub3RxdWlldCApCisgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIHJlc3BvbnNlIHRvIERPTlQg JXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKHgpKTsKKyAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fb3V0c3QiLCJ1bmFuc3dlcmVkIERPTlQiLHgp OworICAgICAgICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7CisgICAgICAgICAgICAgICAg ICAgIGlmICggIW5vdHF1aWV0ICkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1NCKHgp KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggbm90cXVpZXQgKQorICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciByZXNwb25zZSB0byBTQiAlc1xyXG4i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFQoeCkpOworICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsInVuYW5zd2VyZWQgU0IiLHgpOworICAgICAg ICAgICAgICAgICAgICBvdXRzdGFuZGluZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIGlmICgg IW5vdHF1aWV0ICkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgor ICAgICAgICBpZiAoY2tfdG5fYXV0aF9pbl9wcm9ncmVzcygpKSB7CisgICAgICAgICAgICBpZiAo VEVMT1BUX01FKFRFTE9QVF9BVVRIRU5USUNBVElPTikpIHsKKyAgICAgICAgICAgICAgICBpZiAo bm90cXVpZXQpCisgICAgICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3Ig V0lMTCAlcyBzdWJuZWdvdGlhdGlvblxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRF TE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LAorICAgICAgICAgICAgICAgICAgICAgICJ0bl9vdXRzdCIsCisgICAgICAgICAgICAgICAgICAg ICAgIk1FIGF1dGhlbnRpY2F0aW9uIGluIHByb2dyZXNzIiwKKyAgICAgICAgICAgICAgICAgICAg ICBURUxPUFRfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoVEVMT1BU X1UoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSkgeworICAgICAgICAgICAgICAgIGlmIChub3RxdWll dCkKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBETyAlcyBz dWJuZWdvdGlhdGlvblxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxP UFRfQVVUSEVOVElDQVRJT04pKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAg ICAgICAgICAgICAgICAgICJ0bl9vdXRzdCIsCisgICAgICAgICAgICAgICAgICAgICAgIlUgYXV0 aGVudGljYXRpb24gaW4gcHJvZ3Jlc3MiLAorICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9B VVRIRU5USUNBVElPTgorICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg b3V0c3RhbmRpbmcgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogQ0tf QVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGlmICghb3V0 c3RhbmRpbmcpIHsKKyAgICAgICAgICAgIGUgPSBja190bl9lbmNyeXB0aW5nKCk7CisgICAgICAg ICAgICBkID0gY2tfdG5fZGVjcnlwdGluZygpOworICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShU RUxPUFRfRU5DUllQVElPTikpIHsKKyAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9Q VF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgJiYgZSB8fAorICAgICAgICAgICAgICAgICAgICAh VEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgJiYgIWUKKyAgICAgICAg ICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggbm90cXVpZXQgKQorICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBXSUxMICVzIHN1 Ym5lZ290aWF0aW9uXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChU RUxPUFRfRU5DUllQVElPTikpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAidG5fb3V0c3QiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiZW5jcnlwdGlvbiBtb2RlIHN3aXRjaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg IFRFTE9QVF9FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7Cisg ICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5z dG9wICYmIGQgfHwKKyAgICAgICAgICAgICAgICAgICAgIVRFTE9QVF9TQihURUxPUFRfRU5DUllQ VElPTikuZW5jcnlwdC5zdG9wICYmICFkCisgICAgICAgICAgICAgICAgICAgICkgeworICAgICAg ICAgICAgICAgICAgICBpZiAoIG5vdHF1aWV0ICkKKyAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgRE8gJXMgc3VibmVnb3RpYXRpb25cclxuIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9FTkNSWVBUSU9OKSk7CisgICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0 bl9vdXRzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWNyeXB0aW9uIG1vZGUgc3dp dGNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9FTkNSWVBUSU9OCisgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIG91dHN0YW5kaW5n ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgfSAvKiBpZiAodG5fd2FpdF9mbGcpICovCisKKyNp ZmRlZiBJS1NfT1BUSU9OCisgICAgLyogRXZlbiBpZiB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIFRl bG5ldCBvcHRpb25zIHdlIG11c3Qgd2FpdCBmb3IgKi8KKyAgICAvKiBLZXJtaXQgVGVsbmV0IFN1 Ym5lZ290aWF0aW9ucyBpZiB3ZSBoYXZlIHNlbnQgYSByZXF1ZXN0IHRvIHRoZSAqLworICAgIC8q IG90aGVyIGd1eS4gIE90aGVyd2lzZSB3ZSB3aWxsIGdldCBvdXQgb2Ygc3luYy4gICAgICAgICAg ICAgICAgICovCisgICAgaWYgKCFvdXRzdGFuZGluZykgeworICAgICAgICBpZiAoVEVMT1BUX1Uo VEVMT1BUX0tFUk1JVCkgJiYKKyAgICAgICAgICAgIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCku a2VybWl0Lm1lX3JlcV9zdGFydCB8fAorICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VS TUlUKS5rZXJtaXQubWVfcmVxX3N0b3AgfHwKKyAgICAgICAgICAgICAhVEVMT1BUX1NCKFRFTE9Q VF9LRVJNSVQpLmtlcm1pdC5zb3ApCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIGlmICgg bm90cXVpZXQgKQorICAgICAgICAgICAgICBwcmludGYoIj9UZWxuZXQgd2FpdGluZyBmb3IgU0Ig JXMgbmVnb3RpYXRpb25cclxuIiwKKyAgICAgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRf S0VSTUlUKSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsIlUga2VybWl0IGlu IHByb2dyZXNzIixURUxPUFRfS0VSTUlUKTsKKyAgICAgICAgICAgIG91dHN0YW5kaW5nID0gMTsK KyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisKKyNpZmRlZiBUTl9D T01QT1JUCisgICAgaWYgKCFvdXRzdGFuZGluZykgeworICAgICAgICBpZiAoVEVMT1BUX01FKFRF TE9QVF9DT01QT1JUKSkgeworICAgICAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfQ09NUE9S VCkuY29tcG9ydC53YWl0X2Zvcl9zYikgeworICAgICAgICAgICAgICAgIGlmIChub3RxdWlldCkK KyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGVsbmV0IHdhaXRpbmcgZm9yIFNCICVzIG5l Z290aWF0aW9uXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUKFRFTE9Q VF9DT01QT1JUKSk7CisgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9vdXRzdCIsIkNvbVBv cnQgU0IgaW4gcHJvZ3Jlc3MiLFRFTE9QVF9DT01QT1JUKTsKKyAgICAgICAgICAgICAgIG91dHN0 YW5kaW5nID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChURUxPUFRfU0IoVEVM T1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3JfbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAo bm90cXVpZXQpCisgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCB3YWl0aW5nIGZvciBTQiAl cyBNT0RFTV9TVEFUVVMgbmVnb3RpYXRpb25cclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBURUxPUFQoVEVMT1BUX0NPTVBPUlQpKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInRu X291dHN0IiwiQ29tUG9ydCBTQiBNUyBpbiBwcm9ncmVzcyIsVEVMT1BUX0NPTVBPUlQpOworICAg ICAgICAgICAgICAgb3V0c3RhbmRpbmcgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICByZXR1cm4ob3V0c3RhbmRpbmcpOwor fQorCitpbnQKK2lzdG5jb21wb3J0KCkgeworI2lmZGVmIFROX0NPTVBPUlQKKyAgICBpZiAoIWxv Y2FsKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7Cisg ICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOworICAgIGlmIChURUxPUFRf TUUoVEVMT1BUX0NPTVBPUlQpKQorICAgICAgcmV0dXJuKDEpOworICAgIGVsc2UKKyNlbmRpZiAv KiBUTl9DT01QT1JUICovCisgICAgICByZXR1cm4oMCk7Cit9CisKKy8qIHRuX3dhaXQoKSAtLSBX YWl0IGZvciByZXNwb25zZSB0byBUZWxuZXQgbmVnb3RpYXRpb24uICovCisvKgorICBXYWl0IGZv ciB1cCB0byA8dGltZW91dD4gc2Vjb25kcyBmb3IgdGhlIHJlc3BvbnNlIHRvIGFycml2ZS4KKyAg UGxhY2UgYWxsIG5vbi10ZWxuZXQgZGF0YSBpbnRvIFRlbG5ldCBXYWl0IEJ1ZmZlci4KKyAgSWYg cmVzcG9uc2UgZG9lcyBhcnJpdmUgcmV0dXJuIDEsIGVsc2UgcmV0dXJuIDAuCisqLworI2lmbmRl ZiBUTl9XQUlUX0JVRl9TWgorI2RlZmluZSBUTl9XQUlUX0JVRl9TWiA0MDk2CisjZW5kaWYgLyog VE5fV0FJVF9CVUZfU1ogKi8KK3N0YXRpYyBjaGFyIHRuX3dhaXRfYnVmW1ROX1dBSVRfQlVGX1Na XTsKK3N0YXRpYyBpbnQgIHRuX3dhaXRfaWR4ID0gMDsKKyNpZm5kZWYgVE5fVElNRU9VVAorI2Rl ZmluZSBUTl9USU1FT1VUIDEyMAorI2VuZGlmIC8qIFROX1RJTUVPVVQgKi8KK3N0YXRpYyBpbnQg dG5fd2FpdF90bW8gPSBUTl9USU1FT1VUOworCisjaWZkZWYgQ0tTUElOTkVSCitWT0lECitwcnR3 YWl0KHN0YXRlKSBpbnQgc3RhdGU7IHsKKyAgICBzd2l0Y2ggKHN0YXRlICUgNCkgeworICAgICAg Y2FzZSAwOgorICAgICAgICBwcmludGYoIi8iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IDE6CisgICAgICAgIHByaW50ZigiLSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMjoK KyAgICAgICAgcHJpbnRmKCJcXCIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMzoKKyAg ICAgICAgcHJpbnRmKCJ8Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKyNlbmRpZiAvKiBD S1NQSU5ORVIgKi8KKworc3RhdGljIGludCBuZmxhZyA9IDA7CisKK2ludAorI2lmZGVmIENLX0FO U0lDCit0bl93YWl0KGNoYXIgKiB3aGVyZSkKKyNlbHNlCit0bl93YWl0KHdoZXJlKSBjaGFyICog d2hlcmU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuX3dhaXQgKi8geworICAgIGV4dGVy biBpbnQgY2t4ZWNoLCBsb2NhbDsKKyAgICBpbnQgY2ggPSAwLCBjb3VudCA9IDA7CisjaWZuZGVm IE5PSElOVFMKKyAgICBpbnQgbm9oaW50Z2l2ZW4gPSAxOworICAgIGV4dGVybiBpbnQgaGludHM7 CisjZW5kaWYgLyogTk9ISU5UUyAqLworICAgIGludCBvdXRzdGFuZGluZzsKKyNpZmRlZiBUTl9D T01QT1JUCisgICAgaW50IHNhdmNhcnI7CisgICAgZXh0ZXJuIGludCB0dGNhcnI7CisjZW5kaWYg LyogVE5fQ09NUE9SVCAqLworCisgICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDEpOyAq LworCisgICAgcnRpbWVyKCk7CisKKyAgICBkZWJ1ZyhGMTEwLCJ0bl93YWl0IHdhaXRpbmcgZm9y Iix3aGVyZSwwKTsKKyAgICB0bl93YWl0X3RtbyA9IFROX1RJTUVPVVQ7CisgICAgZGVidWcoRjEx MSwidG5fd2FpdCIsInRpbWVvdXQiLHRuX3dhaXRfdG1vKTsKKyAgICBvdXRzdGFuZGluZyA9IHRu X291dHN0KDApOworICAgIGRlYnVnKEYxMTEsInRuX3dhaXQiLCJvdXRzdGFuZGluZyIsb3V0c3Rh bmRpbmcpOworICAgIGRlYnVnKEYxMTEsInRuX3dhaXQiLCJ0bl93YWl0X2ZsZyIsdG5fd2FpdF9m bGcpOworCisgICAgLyogVGhlIGZvbGxvd2luZyBpcyBtZWFudCB0byBiZSAhKHx8KS4gIFdlIG9u bHkgd2FudCB0byByZXR1cm4gKi8KKyAgICAvKiBpbW1lZGlhdGVseSBpZiBib3RoIHRoZSB0bl93 YWl0X2ZsZyAmJiB0bl9vdXRzdCgpIGFyZSBmYWxzZSAqLworICAgIGlmICghKG91dHN0YW5kaW5n IHx8IHRuX3dhaXRfZmxnKSkgIC8qIElmIG5vIG5lZWQgdG8gd2FpdCAqLworICAgICAgcmV0dXJu KDEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0LiAqLworCisgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKCI8d2FpdCBmb3Igb3V0c3RhbmRpbmcgbmVnb3RpYXRpb25z PiIpOworCisjaWZkZWYgQ0tTUElOTkVSCisgICAgaWYgKCFzc3RlbG5ldCAmJiAhcXVpZXQpCisg ICAgICAgIHBydHdhaXQoMCk7CisjZW5kaWYgLyogQ0tTUElOTkVSICovCisKKyAgICAvKiBXYWl0 IHVwIHRvIFROX1RJTUVPVVQgc2VjIGZvciByZXNwb25zZXMgdG8gb3V0c3RhbmRpbmcgdGVsbmV0 IG5lZ3MgKi8KKyAgICBkbyB7CisjaWZkZWYgTlRTSUcKKyAgICAgICAgY2tfaWgoKTsKKyNlbmRp ZiAvKiBOVFNJRyAqLworICAgICAgICBjaCA9IHR0aW5jKDEpOworICAgICAgICBpZiAoY2ggPT0g LTEpIHsgICAgICAgICAgICAgICAgIC8qIFRpbWVkIG91dCAqLworICAgICAgICAgICAgaWYgKCFz c3RlbG5ldCAmJiAhcXVpZXQpIHsgIC8qIExldCB1c2VyIGtub3cuLi4gKi8KKyNpZmRlZiBDS1NQ SU5ORVIKKyAgICAgICAgICAgICAgICBwcmludGYoIlxiIik7CisgICAgICAgICAgICAgICAgcHJ0 d2FpdChndGltZXIoKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChuZmxhZyA9PSAwKSB7 CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIE5lZ290aWF0aW9ucy4iKTsKKyAgICAgICAg ICAgICAgICAgICAgbmZsYWcrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg aWYgKG5mbGFnID4gMCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIi4iKTsKKyAgICAg ICAgICAgICAgICAgICAgbmZsYWcrKzsKKyAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91 dCk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1BJTk5FUiAqLworICAgICAgICAg ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNoIDwgLTEpIHsKKyAgICAgICAgICAgIHByaW50Zigi XHJcbj9Db25uZWN0aW9uIGNsb3NlZCBieSBwZWVyLlxyXG4iKTsKKyAgICAgICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1ZygiPGNvbm5lY3Rpb24gY2xvc2VkIGJ5IHBlZXI+Iik7 CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgc3dpdGNo IChjaCkgeworICAgICAgICAgIGNhc2UgSUFDOgorI2lmZGVmIENLU1BJTk5FUgorICAgICAgICAg ICAgaWYgKCFzc3RlbG5ldCAmJiAhcXVpZXQpCisgICAgICAgICAgICAgIHByaW50ZigiXGIiKTsK KyNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KKyAgICAgICAgICAgIGNoID0gdG5fZG9vcCgoQ0hBUiko Y2ggJiAweGZmKSxpbnNlcnZlcj9ja3hlY2g6ZHVwbGV4LHR0aW5jKTsKKyNpZmRlZiBDS1NQSU5O RVIKKyAgICAgICAgICAgIGlmICghc3N0ZWxuZXQgJiYgIXF1aWV0KSB7CisgICAgICAgICAgICAg ICAgcHJ0d2FpdChndGltZXIoKSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTUElOTkVS ICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl93YWl0IHRuX2Rvb3AiLCIiLGNoKTsKKyAg ICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg ICAgICAgIGR1cGxleCA9IDE7ICAgICAgICAgICAgIC8qIFR1cm4gb24gZWNob2luZyAqLworICAg ICAgICAgICAgICAgIGlmIChpbnNlcnZlcikKKyAgICAgICAgICAgICAgICAgIGNreGVjaCA9IDE7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAg ICAgICAgICBkdXBsZXggPSAwOyAgICAgICAgICAgICAvKiBUdXJuIG9mZiBlY2hvaW5nICovCisg ICAgICAgICAgICAgICAgaWYgKGluc2VydmVyKQorICAgICAgICAgICAgICAgICAgY2t4ZWNoID0g MDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAg ICAgICAgICAgIHRuX3dhaXRfYnVmW3RuX3dhaXRfaWR4KytdID0gSUFDOworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgIC8qIElL UyBldmVudCAqLworICAgICAgICAgICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgIC8qIExv Z291dCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIC0xOgor CQlpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgIHByaW50ZigiP1RlbG5ldCBPcHRpb24gbmVn b3RpYXRpb24gZXJyb3IuXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNl cykKKyAgICAgICAgICAgICAgICAgIHRuX2RlYnVnKCI8VGVsbmV0IE9wdGlvbiBuZWdvdGlhdGlv biBlcnJvcj4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICBj YXNlIC0yOgorICAgICAgICAgICAgICAgIHByaW50ZigiP0Nvbm5lY3Rpb24gY2xvc2VkIGJ5IHBl ZXIuXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWco IjxDb25uZWN0aW9uIGNsb3NlZCBieSBwZWVyPiIpOworCQl0dGNsb3MoMCk7CisgICAgICAgICAg ICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg ICBpZiAoY2ggPCAwKSB7CisgICAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykg dG5fZGVidWcoIjxVbmtub3duIGNvbm5lY3Rpb24gZXJyb3I+Iik7CisgICAgICAgICAgICAgICAg ICByZXR1cm4oY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogc3dpdGNo ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorI2lmZGVmIENLU1BJ Tk5FUgorICAgICAgICAgICAgaWYgKCFzc3RlbG5ldCAmJiAhcXVpZXQpIHsKKyAgICAgICAgICAg ICAgICBwcmludGYoIlxiIik7CisgICAgICAgICAgICAgICAgcHJ0d2FpdChndGltZXIoKSk7Cisg ICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTUElOTkVSICovCisgICAgICAgICAgICB0bl93YWl0 X2J1Zlt0bl93YWl0X2lkeCsrXSA9IChDSEFSKShjaCAmIDB4ZmYpOworICAgICAgICB9IC8qIHN3 aXRjaCAqLworCisgICAgICAgIG91dHN0YW5kaW5nID0gdG5fb3V0c3QoMCk7CisKKyAgICAgICAg aWYgKCBvdXRzdGFuZGluZyAmJiBjaCAhPSBJQUMgKSB7CisgICAgICAgICAgICBpbnQgdGltZXIg PSBndGltZXIoKTsKKyAgICAgICAgICAgIGlmICggdGltZXIgPiB0bl93YWl0X3RtbyApIHsKKyAg ICAgICAgICAgICAgICBpZiAoIXNzdGVsbmV0KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50 ZigKKyAgICAgICAgICAgICAgICAgICAgIlxyXG4/VGVsbmV0IFByb3RvY29sIFRpbWVvdXQgLSBj b25uZWN0aW9uIGNsb3NlZFxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpCisgICAgICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1ZygKKyAgICAgICAgICAg ICAgICAgICAgICAgICI8dGVsbmV0IHByb3RvY29sIHRpbWVvdXQgLSBjb25uZWN0aW9uIGNsb3Nl ZD4iKTsKKyAgICAgICAgICAgICAgICAgICAgdG5fb3V0c3QoMSk7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIC8qIGlmIHdlIGRvIG5vdCBjbG9zZSB0aGUgY29ubmVjdGlvbiwg dGhlbiB3ZSB3aWxsIGJsb2NrICovCisgICAgICAgICAgICAgICAgLyogdGhlIG5leHQgdGltZSB3 ZSBoaXQgYSB3YWl0LiAgYW5kIGlmIHdlIGRvbid0IHdlIHdpbGwgKi8KKyAgICAgICAgICAgICAg ICAvKiBkbyB0aGUgd3JvbmcgdGhpbmcgaWYgdGhlIGhvc3Qgc2VuZHMgMHhGRiBhbmQgZG9lcyAg ICAqLworICAgICAgICAgICAgICAgIC8qIG5vdCBpbnRlbmQgaXQgdG8gYmUgYW4gSUFDLiAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdHRjbG9zKDApOworICAg ICAgICAgICAgICAgIHdoeWNsb3NlZCA9IFdDX1RFTE9QVDsKKyAgICAgICAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICAgICAgfQorI2lmbmRlZiBOT0hJTlRTCisgICAgICAgICAgICBlbHNl IGlmICggaGludHMgJiYgdGltZXIgPiAzMCAmJiBub2hpbnRnaXZlbiAmJiAhaW5zZXJ2ZXIgKSB7 CisjaWZkZWYgQ0tTUElOTkVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiXGIiKTsKKyNlbHNlIC8qIENLU1BJTk5FUiAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIlxyXG4iKTsKKyNlbmRpZiAvKiBDS1NQSU5ORVIgKi8KKyAgICAgIHBy aW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4iKTsKKyAgICAgICAgcHJpbnRmKCJU aGUgVGVsbmV0ICVzIGlzIG5vdCBzZW5kaW5nIHJlcXVpcmVkIHJlc3BvbnNlcy5cclxuXHJcbiIs CisgICAgICAgICAgICAgICAgc3N0ZWxuZXQ/ImNsaWVudCI6InNlcnZlciIpOworICAgICAgdG5f b3V0c3QoMSk7CisgICAgICBwcmludGYoIlxuWW91IGNhbiBjb250aW51ZSB0byB3YWl0IG9yIHlv dSBjYW4gY2FuY2VsIHdpdGggQ3RybC1DLlxyXG4iKTsKKyAgICAgIHByaW50ZigiSW4gY2FzZSB0 aGUgVGVsbmV0IHNlcnZlciBuZXZlciByZXNwb25kcyBhcyByZXF1aXJlZCxcclxuIik7CisgICAg ICBwcmludGYoInlvdSBjYW4gdHJ5IGNvbm5lY3RpbmcgdG8gdGhpcyBob3N0IHdpdGggVEVMTkVU IC9OT1dBSVQuXHJcbiIpOworICAgICAgcHJpbnRmKCJVc2UgU0VUIEhJTlRTIE9GRiB0byBzdXBw cmVzcyBmdXJ0aGVyIGhpbnRzLlxyXG4iKTsKKyAgICAgIHByaW50ZigiKioqKioqKioqKioqKioq KioqKioqKioqKlxyXG4iKTsKKyAgICAgIG5vaGludGdpdmVuID0gMDsKKyAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBOT0hJTlRTICovCisgICAgICAgIH0KKworI2lmZGVmIFROX0NPTVBPUlQKKyAg ICAgICAgLyogTXVzdCBkaXNhYmxlIGNhcnJpZXIgZGV0ZWN0IGNoZWNrIGlmIHdlIGFyZSB1c2lu ZyBUZWxuZXQgQ29tcG9ydCAqLworICAgICAgICBzYXZjYXJyID0gdHRjYXJyOworICAgICAgICB0 dHNjYXJyKENBUl9PRkYpOworICAgICAgICBjb3VudCA9IHR0Y2hrKCk7CisgICAgICAgIHR0c2Nh cnIoc2F2Y2Fycik7CisjZWxzZSAvKiBUTl9DT01QT1JUICovCisgICAgICAgIGNvdW50ID0gdHRj aGsoKTsKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgfSB3aGlsZSAoKHRuX3dhaXRfaWR4 IDwgVE5fV0FJVF9CVUZfU1opICYmCisgICAgICAgICAgICAgKG91dHN0YW5kaW5nICYmIGNvdW50 ID49IDApKTsKKworICAgIGlmICh0bl93YWl0X2lkeCA9PSBUTl9XQUlUX0JVRl9TWikgeworICAg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKCI8VGVsbmV0IFdhaXQgQnVmZmVyIGZp bGxlZD4iKTsKKyAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICBpZiAoIXNzdGVsbmV0ICYm ICFxdWlldCkgeworI2lmZGVmIENLU1BJTk5FUgorICAgICAgICBwcmludGYoIlxiIFxiIik7Cisj ZWxzZQorICAgICAgICBpZiAobmZsYWcgPiAwKSB7CisgICAgICAgICAgICBwcmludGYoIiAoT0sp XG4iKTsKKyAgICAgICAgICAgIG5mbGFnID0gLTE7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NQ SU5ORVIgKi8KKyAgICB9CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKCI8bm8g b3V0c3RhbmRpbmcgbmVnb3RpYXRpb25zPiIpOworICAgIHJldHVybigwKTsKK30KKworLyogUHVz aCBkYXRhIGZyb20gdGhlIFRlbG5ldCBXYWl0IEJ1ZmZlciBpbnRvIHRoZSBJL08gUXVldWUgKi8K Ky8qIFJldHVybiAxIG9uIHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovCisKK2ludAordG5fcHVzaCgpIHsKKyNpZmRlZiBORVRMRUJVRgorICAgIGV4dGVybiBp bnQgdHRfcHVzaF9pbml0ZWQ7CisjZW5kaWYgLyogTkVUTEVCVUYgKi8KKyAgICAvKiBpZiAoIUlT X1RFTE5FVCgpKSByZXR1cm4oMSk7ICovCisKKyAgICBpZiAodG5fd2FpdF9pZHgpIHsKKyAgICAg ICAgY2toZXhkdW1wKChDSEFSICopInRuX3B1c2giLHRuX3dhaXRfYnVmLHRuX3dhaXRfaWR4KTsK KyNpZmRlZiBORVRMRUJVRgorICAgICAgICBpZiAoIXR0X3B1c2hfaW5pdGVkKSAgICAgICAgICAg IC8qIExvY2FsIGhhbmRsaW5nICovCisgICAgICAgICAgbGVfaW5pdCgpOworICAgICAgICBsZV9w dXRzKChDSEFSICopdG5fd2FpdF9idWYsdG5fd2FpdF9pZHgpOworI2Vsc2UgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIGhhbmRsaW5nLi4uICovCisjaWZkZWYg T1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSzk1IGhhcyBpdHMgb3duIHdheSAq LworICAgICAgICBsZV9wdXRzKChDSEFSICopdG5fd2FpdF9idWYsdG5fd2FpdF9pZHgpOworI2Vs c2UKKyNpZmRlZiBUVExFQlVGICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVTklYLCBldGMg Ki8KKyAgICAgICAgbGVfcHV0cygoQ0hBUiAqKXRuX3dhaXRfYnVmLHRuX3dhaXRfaWR4KTsKKyNl bHNlCisvKgorICBJZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSBpbiBBT1MvVlMsIE9TLTksIFZPUywg ZXRjLCB5b3UgbmVlZCB0byBjb3B5CisgIHRoZSAjaWZkZWYgVFRMRUJVRi4uI2VuZGlmIGNvZGUg ZnJvbSBja3V0aW8uYyB0byB0aGUgY29ycmVzcG9uZGluZworICBwbGFjZXMgaW4geW91ciBjaz90 aW8uYyBtb2R1bGUuCisqLworICAgICAgICBwcmludGYoInRuX3B1c2ggY2FsbGVkIGJ1dCBub3Qg aW1wbGVtZW50ZWQgLSBkYXRhIGxvc3QuXG4iKTsKKyNlbmRpZiAvKiBUVExFQlVGICovCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogTkVUTEVCVUYgKi8KKyAgICAgICAgdG5fd2FpdF9pZHgg PSAwOworICAgIH0KKyAgICB0bl93YWl0X3RtbyA9IFROX1RJTUVPVVQ7ICAgICAgICAgICAvKiBS ZXNldCB3YWl0IHRpbWVyIHN0YXRzICovCisgICAgcmV0dXJuKDEpOworfQorCisvKiAgVCBOIF8g UyBPIFAgVCAgKi8KKy8qCisgICBTZW5kcyBhIHRlbG5ldCBvcHRpb24sIGF2b2lkcyBsb29wcy4K KyAgIFJldHVybnMgMSBpZiBjb21tYW5kIHdhcyBzZW50LCAwIGlmIG5vdCwgLTEgb24gZXJyb3Iu CisqLworaW50Cit0bl9zb3B0KGNtZCxvcHQpIGludCBjbWQsIG9wdDsgeyAgICAgICAgLyogVEVM TkVUIFNFTkQgT1BUSU9OICovCisgICAgQ0hBUiBidWZbNV07CisgICAgY2hhciBtc2dbMTI4XTsK KyAgICBpbnQgcmM7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oLTEpOyAgLyog TXVzdCBiZSBUQ1AvSVAgKi8KKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o LTEpOyAvKiBNdXN0IGJlIHRlbG5ldCBwcm90b2NvbCAqLworICAgIGlmICghVEVMQ01EX09LKGNt ZCkpIHJldHVybigtMSk7CisgICAgaWYgKFRFTE9QVF9PSyhvcHQpKSB7CisgICAgICAgIGlmIChj bWQgPT0gRE8gJiYgVEVMT1BUX1VOQU5TV0VSRURfRE8ob3B0KSkgcmV0dXJuKDApOworICAgICAg ICBpZiAoY21kID09IFdJTEwgJiYgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChvcHQpKSByZXR1cm4o MCk7CisgICAgICAgIGlmIChjbWQgPT0gRE9OVCAmJiBURUxPUFRfVU5BTlNXRVJFRF9ET05UKG9w dCkpIHJldHVybigwKTsKKyAgICAgICAgaWYgKGNtZCA9PSBXT05UICYmIFRFTE9QVF9VTkFOU1dF UkVEX1dPTlQob3B0KSkgcmV0dXJuKDApOworICAgIH0KKyNpZmRlZiBDS19TU0wKKyAgICBpZiAo VEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAg ICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoY21k ID09IERPICYmIG9wdCA9PSBURUxPUFRfQVVUSEVOVElDQVRJT04pCisgICAgICBidWZbMF0gPSAw OworCisgICAgaWYgKHRuX2luZmluaXRlICYmIFRFTE9QVF9PSyhvcHQpKSB7IC8qIFNlZSBjb21t ZW50IGFib3ZlIGFib3V0ICAgKi8KKyAgICAgICAgaW50IGluZGV4ID0gVEVMT1BUX0lOREVYKG9w dCk7ICAgLyogcHJldmVudGluZyBpbmZpbml0ZSBsb29wcyAqLworICAgICAgICBpbnQgbSA9IGNt ZCAtIFdJTEw7CisKKyAgICAgICAgaWYgKHRuY250c1tpbmRleF1bbV0gPiBNQVhUTkNOVCkgewor I2lmZGVmIERFQlVHCisgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcyB8fCBkZWJsb2cp IHsKKyAgICAgICAgICAgICAgICBja21ha21zZyhtc2csc2l6ZW9mKG1zZyksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAiVEVMTkVUIG5lZ290aWF0aW9uIGxvb3AgIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRFTENNRChjbWQpLCAiICIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBURUxPUFQob3B0KSk7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSxtc2csIiIsb3B0 KTsKKyAgICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcobXNnKTsK KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgcmV0dXJuKDAp OworICAgICAgICB9CisgICAgICAgIHRuY250c1tpbmRleF1bbV0rKzsKKyAgICAgICAgdG5jbnRz W2luZGV4XVt0bm9wcHNbbV1dID0gMDsKKyAgICB9CisgICAgYnVmWzBdID0gKENIQVIpIElBQzsK KyAgICBidWZbMV0gPSAoQ0hBUikgKGNtZCAmIDB4ZmYpOworICAgIGJ1ZlsyXSA9IChDSEFSKSAo b3B0ICYgMHhmZik7CisgICAgYnVmWzNdID0gKENIQVIpIDA7CisjaWZkZWYgREVCVUcKKyAgICBp ZiAoKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSAmJiBjbWQgIT0gU0IpCisgICAgICAgIGNr bWFrbXNnKG1zZyxzaXplb2YobXNnKSwiVEVMTkVUIFNFTlQgIixURUxDTUQoY21kKSwiICIsCisg ICAgICAgICAgICAgICAgICBURUxPUFQob3B0KSk7CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRl ZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNl bmRpZgorICAgIGRlYnVnKEYxMDEsbXNnLCIiLG9wdCk7CisgICAgaWYgKCh0bl9kZWIgfHwgZGVi c2VzKSAmJiBjbWQgIT0gU0IpCisgICAgICB0bl9kZWJ1Zyhtc2cpOworICAgIHJjID0gKHR0b2wo YnVmLDMpIDwgMyk7CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5k aWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigtMSk7CisKKworICAgIGlmIChURUxPUFRf T0sob3B0KSkgeworICAgICAgICBpZiAoY21kID09IERPTlQgJiYgVEVMT1BUX1VOQU5TV0VSRURf RE8ob3B0KSkKKyAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhvcHQpID0gMDsKKyAgICAg ICAgaWYgKGNtZCA9PSBXT05UICYmIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwob3B0KSkKKyAgICAg ICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKG9wdCkgPSAwOworICAgICAgICBpZiAoY21kID09 IERPICYmIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQob3B0KSkKKyAgICAgICAgICBURUxPUFRfVU5B TlNXRVJFRF9ET05UKG9wdCkgPSAwOworICAgICAgICBpZiAoY21kID09IFdJTEwgJiYgVEVMT1BU X1VOQU5TV0VSRURfV09OVChvcHQpKQorICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQo b3B0KSA9IDA7CisgICAgfQorICAgIHJldHVybigxKTsKK30KKworLyogU2VuZCBhIHRlbG5ldCBz dWItb3B0aW9uICovCisvKiBSZXR1cm5zIDEgaWYgY29tbWFuZCB3YXMgc2VudCwgMCBpZiBub3Qs IC0xIG9uIGVycm9yICovCisKK2ludAordG5fc3Nib3B0KG9wdCxzdWIsZGF0YSxsZW4pIGludCBv cHQsIHN1YjsgQ0hBUiAqIGRhdGE7IGludCBsZW47IHsKKyAgICBDSEFSIGJ1ZlsyNTZdOworICAg IGludCBuLG0scmM7CisKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsgICAv KiBNdXN0IGJlIFRDUC9JUCAqLworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVy bigwKTsgLyogTXVzdCBiZSB0ZWxuZXQgcHJvdG9jb2wgKi8KKyAgICBpZiAoIVRFTE9QVF9PSyhv cHQpKSByZXR1cm4oLTEpOworICAgIGlmIChsZW4gPCAwIHx8IGxlbiA+IDI1MCkgeworICAgICAg ICBkZWJ1ZyhGMTExLCJVbmFibGUgdG8gU2VuZCBURUxORVQgU0IgLSBkYXRhIHRvbyBsb25nIiwi bGVuIixsZW4pOworICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERh dGEgdG9vIGxvbmcgKi8KKyAgICB9CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihU RUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICBpZiAodHRj aGsoKSA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg IHJldHVybigxKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoIWRhdGEp IGxlbiA9IDA7CisKKyAgICBidWZbMF0gPSAoQ0hBUikgSUFDOworICAgIGJ1ZlsxXSA9IChDSEFS KSAoU0IgJiAweGZmKTsKKyAgICBidWZbMl0gPSAoQ0hBUikgKG9wdCAmIDB4ZmYpOworICAgIGJ1 ZlszXSA9IChDSEFSKSAoc3ViICYgMHhmZik7CisgICAgaWYgKGRhdGEgJiYgbGVuID4gMCkgewor ICAgICAgICBtZW1jcHkoJmJ1Zls0XSxkYXRhLGxlbik7CisgICAgfQorICAgIGJ1Zls0K2xlbl0g PSAoQ0hBUikgSUFDOworICAgIGJ1Zls1K2xlbl0gPSAoQ0hBUikgU0U7CisKKyNpZmRlZiBERUJV RworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzIHx8IGRlYmxvZykgeworICAgICAgICBpZiAob3B0 ID09IFRFTE9QVF9TVEFSVF9UTFMgJiYgc3ViID09IDEpCisgICAgICAgICAgY2ttYWttc2codG5f bXNnX291dCxUTl9NU0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLAorICAgICAgICAgICAgICAgICAg ICBURUxPUFQob3B0KSwiIEZPTExPV1MgSUFDIFNFIixOVUxMKTsKKyAgICAgICAgZWxzZSBpZiAo b3B0ID09IFRFTE9QVF9UVFlQRSAmJiBzdWIgPT0gMSkKKyAgICAgICAgICBja21ha21zZyh0bl9t c2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsIFRFTE9QVChvcHQpLAorICAgICAg ICAgICAgICAgICAgICAiIFNFTkQgSUFDIFNFIixOVUxMKTsKKyAgICAgICAgZWxzZSBpZiAob3B0 ID09IFRFTE9QVF9UVFlQRSAmJiBzdWIgPT0gMCkKKyAgICAgICAgICBja21ha3htc2codG5fbXNn X291dCxUTl9NU0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChvcHQpLCIgSVMgIiwKKyAg ICAgICAgICAgICAgICAgICAgKGNoYXIgKilkYXRhLCIgSUFDIFNFIixOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgZWxzZSBpZiAob3B0ID09IFRFTE9QVF9ORVdF TlZJUk9OKSB7CisgICAgICAgICAgICBpbnQgaSwgcXVvdGU7CisgICAgICAgICAgICBja21ha21z Zyh0bl9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAg ICAgICAgICBURUxPUFQoVEVMT1BUX05FV0VOVklST04pLCIgIiwKKyAgICAgICAgICAgICAgICAg ICAgIHN1YiA9PSBURUxRVUFMX1NFTkQgPyAiU0VORCIgOgorICAgICAgICAgICAgICAgICAgICAg c3ViID09IFRFTFFVQUxfSVMgPyAiSVMiIDoKKyAgICAgICAgICAgICAgICAgICAgIHN1YiA9PSBU RUxRVUFMX0lORk8gPyJJTkZPIiA6ICJVTktOT1dOIiApOworICAgICAgICAgICAgZm9yIChpID0g MCwgcXVvdGUgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAocXVvdGUp IHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihoZXhidWYsIiUwMngiLGRhdGFbaV0pOyAv KiBzYWZlIGJ1dCB1Z2x5ICovCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2df b3V0LGhleGJ1ZixUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgcXVvdGUgPSAwOwor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0 YVtpXSkgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVMX0VOVl9VU0VSVkFSOgorICAg ICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZ19vdXQsIiBVU0VSVkFSICIsVE5f TVNHX0xFTik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICBjYXNlIFRFTF9FTlZfVkFSOgorICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KHRuX21zZ19vdXQsIiBWQVIgIixUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVMX0VOVl9WQUxVRToKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2dfb3V0LCIgVkFMVUUgIixUTl9N U0dfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgVEVMX0VOVl9FU0M6CisgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5j YXQodG5fbXNnX291dCwiIEVTQyAiLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgICAgICAg ICAgcXVvdGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBJQUM6CisgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQo dG5fbXNnX291dCwiIElBQyAiLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg ICAgICAgIHNwcmludGYoaGV4YnVmLCIlYyIsZGF0YVtpXSk7IC8qIHNhZmUgYnV0IHVnbHkgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2dfb3V0LGhleGJ1ZixUTl9N U0dfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2dfb3V0LCIgSUFDIFNFIixUTl9N U0dfTEVOKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwcmludGYoaGV4YnVmLCIl MDJ4IixzdWIpOyAgICAgICAgICAgICAvKiBzYWZlIGJ1dCB1Z2x5ICovCisgICAgICAgICAgICBj a21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICJU RUxORVQgU0VOVCBTQiAiLFRFTE9QVChvcHQpLAorICAgICAgICAgICAgICAgICAgICAgICIgIiwK KyAgICAgICAgICAgICAgICAgICAgICBoZXhidWYsCisgICAgICAgICAgICAgICAgICAgICAgIiA8 ZGF0YT4gSUFDIFNFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAg ICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0 ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBERUJV RworICAgIGRlYnVnKEYxMDEsdG5fbXNnX291dCwiIixvcHQpOworICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKQorICAgICAgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICByYyA9ICh0dG9sKGJ1Ziw2K2xlbikgPCA2K2xlbik7CisjaWZkZWYgT1MyCisgICAgUmVs ZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKworICAgIGlmIChyYykKKyAgICAgIHJldHVybigt MSk7CisgICAgcmV0dXJuKDEpOworfQorCisvKgorICB0bl9mbHVpKCkgLS0gUHJvY2Vzc2VzIGFs bCB3YWl0aW5nIGRhdGEgZm9yIFRlbG5ldCBjb21tYW5kcy4KKyAgQWxsIG5vbi1UZWxuZXQgZGF0 YSBpcyB0byBiZSBzdG9yZWQgaW50byB0aGUgVGVsbmV0IFdhaXQgQnVmZmVyLgorICBSZXR1cm5z IDEgb24gc3VjY2Vzcy4KKyovCitpbnQKK3RuX2ZsdWkoKSB7CisgICAgZXh0ZXJuIGludCBja3hl Y2g7CisgICAgaW50IHggPSAwOworCisgICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDAp OyAqLworCisgICAgLyogV2FpdCB1cCB0byA1IHNlYyBmb3IgcmVzcG9uc2VzIHRvIG91dHN0YW5k aW5nIHRlbG5ldCBuZWdvdGlhdGlvbnMgKi8KKyAgICB3aGlsZSAoeCA+PSAwICYmIHR0Y2hrKCkg PiAwICAmJiB0bl93YWl0X2lkeCA8IFROX1dBSVRfQlVGX1NaKSB7CisgICAgICAgIHggPSB0dGlu YygxKTsKKyAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgY2FzZSBJQUM6CisgICAgICAg ICAgICB4ID0gdG5fZG9vcCgoQ0hBUikoeCAmIDB4ZmYpLGluc2VydmVyP2NreGVjaDpkdXBsZXgs dHRpbmMpOworICAgICAgICAgICAgZGVidWcoRjEwMSwidG5fZmx1aSB0bl9kb29wIiwiIix4KTsK KyAgICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAg ICAgICAgICAgIC8qIFR1cm4gb24gZWNob2luZyAqLworICAgICAgICAgICAgICAgIGR1cGxleCA9 IDE7CisgICAgICAgICAgICAgICAgaWYgKGluc2VydmVyKQorICAgICAgICAgICAgICAgICAgY2t4 ZWNoID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyOiAg ICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBlY2hvaW5nICovCisgICAgICAgICAgICAgICAg ZHVwbGV4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICAgICAgICAg ICAgICBja3hlY2ggPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj YXNlIDM6CisgICAgICAgICAgICAgICAgdG5fd2FpdF9idWZbdG5fd2FpdF9pZHgrK10gPSBJQUM7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAg ICAgICAgICAgLyogSUtTIGV2ZW50ICovCisgICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAg ICAgICAgICAgLyogTG9nb3V0ICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg aWYgKHggPj0gMCkKKyAgICAgICAgICAgICAgdG5fd2FpdF9idWZbdG5fd2FpdF9pZHgrK10gPSB4 OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybigxKTsKK30KKwordW5zaWduZWQgY2hhciAq Cit0bl9nZXRfZGlzcGxheSgpCit7CisgICAgY2hhciAqIGRpc3AgPSBOVUxMOworICAgIHN0YXRp YyBjaGFyIHRtcGxvY1syNTZdOworCisgICAgLyogTXVzdCBjb21wdXRlIHRoZSBESVNQTEFZIHN0 cmluZyB3ZSBhcmUgZ29pbmcgdG8gc2VuZCB0byB0aGUgaG9zdCAqLworICAgIC8qIElmIG9uZSBp cyBub3QgYXNzaWduZWQsIGRvIG5vdCBzZW5kIGEgc3RyaW5nIHVubGVzcyB0aGUgdXNlciBoYXMg Ki8KKyAgICAvKiBleHBsaWNpdGVkbHkgcmVxdWVzdGVkIHdlIHRyeSB0byBzZW5kIG9uZSB2aWEg WC1EaXNwbGF5IExvY2F0aW9uICovCisgICAgLyogQnV0IGRvIG5vdCBzZW5kIGEgc3RyaW5nIGF0 IGFsbCBpZiBGT1JXQVJEX1ggaXMgaW4gdXNlLiAgICAgICAgICAqLworCisgICAgLyogaWYgKCFJ U19URUxORVQoKSkgcmV0dXJuKDApOyAqLworCisgICAgZGVidWcoRjExMCwidG5fZ2V0X2Rpc3Bs YXkoKSBteWlwYWRkciIsbXlpcGFkZHIsMCk7CisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyAgICBk ZWJ1ZyhGMTEwLCJ0bl9nZXRfZGlzcGxheSgpIHRuX2Vudl9kaXNwIix0bl9lbnZfZGlzcCwwKTsK KyAgICBpZiAodG5fZW52X2Rpc3BbMF0pIHsKKyAgICAgICAgaW50IGNvbG9uID0gY2tpbmRleCgi OiIsdG5fZW52X2Rpc3AsMCwwLDEpOworICAgICAgICBpZiAoICFjb2xvbiApIHsKKyAgICAgICAg ICAgIGNrbWFrbXNnKHRtcGxvYywyNTYsbXlpcGFkZHIsIjoiLHRuX2Vudl9kaXNwLE5VTEwpOwor ICAgICAgICAgICAgZGlzcCA9IHRtcGxvYzsKKyAgICAgICAgfSBlbHNlIGlmICggY2tpbmRleCgi bG9jYWxob3N0OiIsdG5fZW52X2Rpc3AsMCwwLDApIHx8CisgICAgICAgICAgICAgICAgICAgIGNr aW5kZXgoInVuaXg6Iix0bl9lbnZfZGlzcCwwLDAsMCkgfHwKKyAgICAgICAgICAgICAgICAgICAg Y2tpbmRleCgiMTI3LjAuMC4xOiIsdG5fZW52X2Rpc3AsMCwwLDApIHx8CisgICAgICAgICAgICAg ICAgICAgICFja3N0cmNtcCgiMDoiLHRuX2Vudl9kaXNwLDIsMSkgfHwKKyAgICAgICAgICAgICAg ICAgICAgdG5fZW52X2Rpc3BbMF0gPT0gJzonICkgeworICAgICAgICAgICAgY2ttYWttc2codG1w bG9jLDI1NixteWlwYWRkciwiOiIsJnRuX2Vudl9kaXNwW2NvbG9uXSxOVUxMKTsKKyAgICAgICAg ICAgIGRpc3AgPSB0bXBsb2M7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGlzcCA9IHRu X2Vudl9kaXNwOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8K KyAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfWERJU1BMT0MpIHx8CisgICAgICAgICAgICAg IFRFTE9QVF9VKFRFTE9QVF9GT1JXQVJEX1gpKSB7CisgICAgICAgIGNrbWFrbXNnKHRtcGxvYywy NTYsbXlpcGFkZHIsIjowLjAiLE5VTEwsTlVMTCk7CisgICAgICAgIGRpc3AgPSB0bXBsb2M7Cisg ICAgfQorICAgIGRlYnVnKEYxMTAsInRuX2dldF9kaXNwbGF5KCkgcmV0dXJucyIsZGlzcCwwKTsK KyAgICByZXR1cm4oKENIQVIgKilkaXNwKTsKK30KKworI2lmZGVmIENLX0ZPUldBUkRfWAorc3Rh dGljIFhhdXRoIGZha2VfeGF1dGggPSB7MCwwLE5VTEwsMCxOVUxMLDAsTlVMTCwwLE5VTEx9Owor c3RhdGljIFhhdXRoICpyZWFsX3hhdXRoPU5VTEw7CisKKy8qCisgKiBBdXRob3I6ICBKaW0gRnVs dG9uLCBNSVQgWCBDb25zb3J0aXVtCisgKgorICogZndkeF9wYXJzZV9kaXNwbGF5bmFtZSAtCisg KiBkaXNwbGF5IGEgZGlzcGxheSBzdHJpbmcgdXAgaW50byBpdHMgY29tcG9uZW50IHBhcnRzCisg Ki8KKyNpZmRlZiBVTklYCisjZGVmaW5lIFVOSVhfQ09OTkVDVElPTiAidW5peCIKKyNkZWZpbmUg VU5JWF9DT05ORUNUSU9OX0xFTkdUSCA0CisjZW5kaWYKKworLyoKKyAqIHByaXZhdGUgdXRpbGl0 eSByb3V0aW5lcworICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworWG11R2V0SG9z dG5hbWUgKGNoYXIgKmJ1ZiwgaW50IG1heGxlbikKKyNlbHNlCitYbXVHZXRIb3N0bmFtZSAoYnVm LCBtYXhsZW4pCisgICAgY2hhciAqYnVmOworICAgIGludCBtYXhsZW47CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBpbnQgbGVuOworCisjaWZkZWYgTkVFRF9VVFNOQU1FCisgICAgLyoK KyAgICAgKiBzYW1lIGhvc3QgbmFtZSBjcm9jayBhcyBpbiBzZXJ2ZXIgYW5kIHhpbml0LgorICAg ICAqLworICAgIHN0cnVjdCB1dHNuYW1lIG5hbWU7CisKKyAgICB1bmFtZSAoJm5hbWUpOworICAg IGxlbiA9IHN0cmxlbiAobmFtZS5ub2RlbmFtZSk7CisgICAgaWYgKGxlbiA+PSBtYXhsZW4pIGxl biA9IG1heGxlbiAtIDE7CisgICAgc3RybmNweSAoYnVmLCBuYW1lLm5vZGVuYW1lLCBsZW4pOwor ICAgIGJ1ZltsZW5dID0gJ1wwJzsKKyNlbHNlCisgICAgYnVmWzBdID0gJ1wwJzsKKyAgICAodm9p ZCkgZ2V0aG9zdG5hbWUgKGJ1ZiwgbWF4bGVuKTsKKyAgICBidWYgW21heGxlbiAtIDFdID0gJ1ww JzsKKyAgICBsZW4gPSBzdHJsZW4oYnVmKTsKKyNlbmRpZiAvKiBocHV4ICovCisgICAgcmV0dXJu IGxlbjsKK30KKworc3RhdGljIGNoYXIgKgorI2lmZGVmIENLX0FOU0lDCitjb3B5c3RyaW5nIChj aGFyICpzcmMsIGludCBsZW4pCisjZWxzZQorY29weXN0cmluZyAoc3JjLCBsZW4pCisgICAgY2hh ciAqc3JjOworICAgIGludCBsZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjaGFy ICpjcDsKKworICAgIGlmICghc3JjICYmIGxlbiAhPSAwKSByZXR1cm4gTlVMTDsKKyAgICBjcCA9 IG1hbGxvYyAobGVuICsgMSk7CisgICAgaWYgKGNwKSB7CisgICAgICAgIGlmIChzcmMpIHN0cm5j cHkgKGNwLCBzcmMsIGxlbik7CisgICAgICAgIGNwW2xlbl0gPSAnXDAnOworICAgIH0KKyAgICBy ZXR1cm4gY3A7Cit9CisKK3N0YXRpYyBjaGFyICoKKyNpZmRlZiBDS19BTlNJQworZ2V0X2xvY2Fs X2hvc3RuYW1lIChjaGFyICpidWYsIGludCBtYXhsZW4pCisjZWxzZQorZ2V0X2xvY2FsX2hvc3Ru YW1lIChidWYsIG1heGxlbikKKyAgICBjaGFyICpidWY7CisgICAgaW50IG1heGxlbjsKKyNlbmRp ZgoreworICAgIGJ1ZlswXSA9ICdcMCc7CisgICAgKHZvaWQpIFhtdUdldEhvc3RuYW1lIChidWYs IG1heGxlbik7CisgICAgcmV0dXJuIChidWZbMF0gPyBidWYgOiBOVUxMKTsKK30KKworI2lmbmRl ZiBVTklYCitzdGF0aWMgY2hhciAqCitjb3B5aG9zdG5hbWUgKCkKK3sKKyAgICBjaGFyIGJ1Zlsy NTZdOworCisgICAgcmV0dXJuIChnZXRfbG9jYWxfaG9zdG5hbWUgKGJ1Ziwgc2l6ZW9mIGJ1Zikg PworICAgICAgICAgICAgY29weXN0cmluZyAoYnVmLCBzdHJsZW4gKGJ1ZikpIDogTlVMTCk7Cit9 CisjZW5kaWYKKworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZndkeF9wYXJzZV9kaXNwbGF5bmFt ZSAoY2hhciAqZGlzcGxheW5hbWUsIGludCAqZmFtaWx5cCwgY2hhciAqKmhvc3RwLAorICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpkcHludW1wLCBpbnQgKnNjcm51bXAsIGNoYXIgKipyZXN0 cCkKKyNlbHNlCitmd2R4X3BhcnNlX2Rpc3BsYXluYW1lIChkaXNwbGF5bmFtZSwgZmFtaWx5cCwg aG9zdHAsIGRweW51bXAsIHNjcm51bXAsIHJlc3RwKQorICAgIGNoYXIgKmRpc3BsYXluYW1lOwor ICAgIGludCAqZmFtaWx5cDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAqLworICAg IGNoYXIgKipob3N0cDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAqLworICAgIGlu dCAqZHB5bnVtcCwgKnNjcm51bXA7ICAgICAgICAgICAgIC8qIHJldHVybiAqLworICAgIGNoYXIg KipyZXN0cDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiAqLworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgY2hhciAqcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog d29yayB2YXJpYWJsZXMgKi8KKyAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB3b3JrIHZhcmlhYmxlICovCisgICAgaW50IGZhbWlseSA9IC0xOyAgICAgICAgICAgICAg ICAgICAgLyogdmFsdWUgdG8gYmUgcmV0dXJuZWQgKi8KKyAgICBjaGFyICpob3N0ID0gTlVMTDsg ICAgICAgICAgICAgICAgICAvKiBtdXN0IGZyZWUgaWYgc2V0IGFuZCBlcnJvciByZXR1cm4gKi8K KyAgICBpbnQgZHB5bnVtID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSB0byBiZSBy ZXR1cm5lZCAqLworICAgIGludCBzY3JudW0gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIHZh bHVlIHRvIGJlIHJldHVybmVkICovCisgICAgY2hhciAqcmVzdCA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgLyogbXVzdCBmcmVlIGlmIHNldCBhbmQgZXJyb3IgcmV0dXJuICovCisgICAgaW50IGRu ZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogaWYgMSB0aGVuIHVzaW5nIERFQ25ldCAq LworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgdGhl IG5hbWUgKi8KKyAgICBpZiAoIWRpc3BsYXluYW1lIHx8ICFkaXNwbGF5bmFtZVswXSkKKyAgICAg ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog bXVzdCBoYXZlIGF0IGxlYXN0IDpudW1iZXIgKi8KKyAgICBwdHIgPSAoY2hhciAqKXN0cmNocihk aXNwbGF5bmFtZSwgJzonKTsKKyAgICBpZiAoIXB0ciB8fCAhcHRyWzFdKSByZXR1cm4gMDsKKyAg ICBpZiAocHRyWzFdID09ICc6JykgeworICAgICAgICBpZiAocHRyWzJdID09ICdcMCcpIHJldHVy biAwOworICAgICAgICBkbmV0ID0gMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGdldCB0aGUg aG9zdCBzdHJpbmc7IGlmIG5vbmUgaXMgZ2l2ZW4sIHVzZSB0aGUgbW9zdCBlZmZpZWNpZW50IHBh dGgKKyAgICAgKi8KKworICAgIGxlbiA9IChwdHIgLSBkaXNwbGF5bmFtZSk7ICAvKiBsZW5ndGgg b2YgaG9zdCBuYW1lICovCisgICAgaWYgKGxlbiA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAg LyogY2hvb3NlIG1vc3QgZWZmaWNpZW50IHBhdGggKi8KKyNpZmRlZiBVTklYCisgICAgICAgIGhv c3QgPSBjb3B5c3RyaW5nIChVTklYX0NPTk5FQ1RJT04sIFVOSVhfQ09OTkVDVElPTl9MRU5HVEgp OworICAgICAgICBmYW1pbHkgPSBGYW1pbHlMb2NhbDsKKyNlbHNlCisgICAgICAgIGlmIChkbmV0 KSB7CisgICAgICAgICAgICBob3N0ID0gY29weXN0cmluZyAoIjAiLCAxKTsKKyAgICAgICAgICAg IGZhbWlseSA9IEZhbWlseURFQ25ldDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhv c3QgPSBjb3B5aG9zdG5hbWUgKCk7CisgICAgICAgICAgICBmYW1pbHkgPSBGYW1pbHlJbnRlcm5l dDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgaG9zdCA9IGNvcHlz dHJpbmcgKGRpc3BsYXluYW1lLCBsZW4pOworICAgICAgICBpZiAoZG5ldCkgeworICAgICAgICAg ICAgZmFtaWx5ID0gZG5ldDsKKyAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBVTklYCisgICAgICAg ICAgICBpZiAoaG9zdCAmJiBzdHJjbXAgKGhvc3QsIFVOSVhfQ09OTkVDVElPTikgPT0gMCkKKyAg ICAgICAgICAgICAgZmFtaWx5ID0gRmFtaWx5TG9jYWw7CisgICAgICAgICAgICBlbHNlCisjZW5k aWYKKyAgICAgICAgICAgICAgZmFtaWx5ID0gRmFtaWx5SW50ZXJuZXQ7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBpZiAoIWhvc3QpIHJldHVybiAwOworCisKKyAgICAvKgorICAgICAqIGdldCB0 aGUgZGlzcGxheSBudW1iZXI7IHdlIGtub3cgdGhhdCB0aGVyZSBpcyBzb21ldGhpbmcgYWZ0ZXIg dGhlCisgICAgICogY29sb24gKG9yIGNvbG9ucykgZnJvbSBhYm92ZS4gIG5vdGUgdGhhdCBob3N0 IGlzIG5vdyBzZXQgYW5kIG11c3QKKyAgICAgKiBiZSBmcmVlZCBpZiB0aGVyZSBpcyBhbiBlcnJv ci4KKyAgICAgKi8KKworICAgIGlmIChkbmV0KSBwdHIrKzsgICAgICAgICAgICAgICAgICAgIC8q IHNraXAgdGhlIGV4dHJhIERFQ25ldCBjb2xvbiAqLworICAgIHB0cisrOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIG1vdmUgdG8gc3RhcnQgb2YgZGlzcGxheSBudW0gKi8KKyAgICB7 CisgICAgICAgIHJlZ2lzdGVyIGNoYXIgKmNwOworCisgICAgICAgIGZvciAoY3AgPSBwdHI7ICpj cCAmJiBpc2FzY2lpKCpjcCkgJiYgaXNkaWdpdCgqY3ApOyBjcCsrKSA7CisgICAgICAgIGxlbiA9 IChjcCAtIHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Y2hlY2sgcHJlc2VudCBhbmQgdmFsaWQgZm9sbG93ICovCisgICAgICAgIGlmIChsZW4gPT0gMCB8 fCAoKmNwICYmICpjcCAhPSAnLicpKSB7CisgICAgICAgICAgICBmcmVlIChob3N0KTsKKyAgICAg ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgZHB5bnVtID0gYXRvaSAocHRy KTsgICAgICAgICAgICAvKiBpdCB3aWxsIGhhbmRsZSBudW0uIGFzIHdlbGwgKi8KKyAgICAgICAg cHRyID0gY3A7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBub3cgZ2V0IHNjcmVlbiBudW1iZXIg aWYgZ2l2ZW47IHB0ciBtYXkgcG9pbnQgdG8gbnVsIGF0IHRoaXMgcG9pbnQKKyAgICAgKi8KKyAg ICBpZiAocHRyWzBdID09ICcuJykgeworICAgICAgICByZWdpc3RlciBjaGFyICpjcDsKKworICAg ICAgICBwdHIrKzsKKyAgICAgICAgZm9yIChjcCA9IHB0cjsgKmNwICYmIGlzYXNjaWkoKmNwKSAm JiBpc2RpZ2l0KCpjcCk7IGNwKyspIDsKKyAgICAgICAgbGVuID0gKGNwIC0gcHRyKTsKKyAgICAg ICAgaWYgKGxlbiA9PSAwIHx8ICgqY3AgJiYgKmNwICE9ICcuJykpIHsgIC8qIGFsbCBwcm9wIG5h bWUgKi8KKyAgICAgICAgICAgIGZyZWUgKGhvc3QpOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg ICAgICAgIH0KKworICAgICAgICBzY3JudW0gPSBhdG9pIChwdHIpOyAgICAgICAgICAgIC8qIGl0 IHdpbGwgaGFuZGxlIG51bS4gYXMgd2VsbCAqLworICAgICAgICBwdHIgPSBjcDsKKyAgICB9CisK KyAgICAvKgorICAgICAqIGFuZCBmaW5hbGx5LCBnZXQgYW55IGFkZGl0aW9uYWwgc3R1ZmYgdGhh dCBtaWdodCBiZSBmb2xsb3dpbmcgdGhlCisgICAgICogdGhlIHNjcmVlbiBudW1iZXI7IHB0ciBt dXN0IHBvaW50IHRvIGEgcGVyaW9kIGlmIHRoZXJlIGlzIGFueXRoaW5nCisgICAgICovCisKKyAg ICBpZiAocHRyWzBdID09ICcuJykgeworICAgICAgICBwdHIrKzsKKyAgICAgICAgbGVuID0gc3Ry bGVuIChwdHIpOworICAgICAgICBpZiAobGVuID4gMCkgeworICAgICAgICAgICAgcmVzdCA9IGNv cHlzdHJpbmcgKHB0ciwgbGVuKTsKKyAgICAgICAgICAgIGlmICghcmVzdCkgeworICAgICAgICAg ICAgICAgIGZyZWUgKGhvc3QpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhbmQgd2UgYXJlIGRvbmUh CisgICAgICovCisKKyAgICBpZiAoIGZhbWlseXAgKQorICAgICAgICAqZmFtaWx5cCA9IGZhbWls eTsKKyAgICBpZiAoIGhvc3RwICkKKyAgICAgICAgKmhvc3RwID0gaG9zdDsKKyAgICBlbHNlCisg ICAgICAgIGZyZWUoaG9zdCk7CisgICAgaWYgKCBkcHludW1wICkKKyAgICAgICAgKmRweW51bXAg PSBkcHludW07CisgICAgaWYgKCBzY3JudW1wICkKKyAgICAgICAgKnNjcm51bXAgPSBzY3JudW07 CisgICAgaWYgKCByZXN0cCApCisgICAgICAgICpyZXN0cCA9IHJlc3Q7CisgICAgZWxzZQorICAg ICAgICBmcmVlKHJlc3QpOworICAgIHJldHVybiAxOworfQorCisKK2ludAorI2lmZGVmIENLX0FO U0lDCitmd2R4X3RuX3NiKCB1bnNpZ25lZCBjaGFyICogc2IsIGludCBuICkKKyNlbHNlCitmd2R4 X3RuX3NiKCBzYiwgbiApIHVuc2lnbmVkIGNoYXIgKiBzYjsgaW50IG47CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBoY2hhbm5lbCwgbmNoYW5uZWw7CisgICAg dW5zaWduZWQgY2hhciAqIHA7CisgICAgaW50IGk7CisgICAgaW50IHJjID0gLTE7CisKKyAgICAv KiBjaGVjayB0byBlbnN1cmUgd2UgaGF2ZSBuZWdvdGlhdGVkIEZvcndhcmQgWCAqLworICAgIGlm ICggc3N0ZWxuZXQgJiYgIVRFTE9QVF9NRShURUxPUFRfRk9SV0FSRF9YKSB8fAorICAgICAgICAg IXNzdGVsbmV0ICYmICFURUxPUFRfVShURUxPUFRfRk9SV0FSRF9YKSApIHsKKyAgICAgICAgZGVi dWcoRjEwMCwiZndkeF90bl9zYigpIG5vdCBuZWdvdGlhdGVkIiwiIiwwKTsKKyAgICAgICAgcmV0 dXJuKDApOworICAgIH0KKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIHN3aXRjaCAoc2JbMF0pIHsKKyAgICBj YXNlIEZXRFhfU0NSRUVOOgorICAgICAgICBpZiAoc3N0ZWxuZXQgJiYgbiA9PSA0KQorICAgICAg ICAgICAgcmMgPSBmd2R4X2NyZWF0ZV9saXN0ZW5fc29ja2V0KHNiWzFdKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBGV0RYX09QRU46CisgICAgICAgIGlmICggIXNzdGVsbmV0ICYmIG4gPj0g NSApIHsKKyAgICAgICAgICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSAmbmNoYW5uZWw7CisgICAg ICAgICAgICBpID0gMTsKKyAgICAgICAgICAgIC8qIElBQyBxdW90aW5nIGhhcyBiZWVuIHN0cmlw cGVkIGluIHRuX3NiKCkgKi8KKyAgICAgICAgICAgIHBbMF0gPSBzYltpKytdOworICAgICAgICAg ICAgcFsxXSA9IHNiW2krK107CisgICAgICAgICAgICBoY2hhbm5lbCA9IG50b2hzKG5jaGFubmVs KTsKKyAgICAgICAgICAgIHJjID0gZndkeF9vcGVuX2NsaWVudF9jaGFubmVsKGhjaGFubmVsKTsK KyAgICAgICAgICAgIGlmICggcmMgPCAwICkgeworICAgICAgICAgICAgICAgIC8qIEZhaWxlZDsg U2VuZCBDTE9TRSBjaGFubmVsICovCisgICAgICAgICAgICAgICAgZndkeF9zZW5kX2Nsb3NlKGhj aGFubmVsKTsKKyAgICAgICAgICAgICAgICByYyA9IDA7ICAgICAgICAgLyogRG8gbm90IGNvbnNp ZGVyIHRoaXMgdG8gYmUgYSB0ZWxuZXQgZXJyb3IgKi8KKyAgICAgICAgICAgIH0KKyNpZmRlZiBO VAorICAgICAgICAgICAgaWYgKCAhVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRf eC50aHJlYWRfc3RhcnRlZCApIHsKKyAgICAgICAgICAgICAgICBja1RocmVhZEJlZ2luKCAmZndk eF90aHJlYWQsMzI2NTUsIDAsIEZBTFNFLCAwICkgOworICAgICAgICAgICAgICAgIFRFTE9QVF9T QihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gudGhyZWFkX3N0YXJ0ZWQgPSAxOworICAgICAg ICAgICAgfQorI2VuZGlmIC8qIE5UICovCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBGV0RYX0NMT1NFOgorICAgICAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgJm5jaGFubmVs OworICAgICAgICBpID0gMTsKKyAgICAgICAgLyogSUFDIHF1b3RpbmcgaGFzIGJlZW4gc3RyaXBw ZWQgaW4gdG5fc2IoKSAqLworICAgICAgICBwWzBdID0gc2JbaSsrXTsKKyAgICAgICAgcFsxXSA9 IHNiW2krK107CisgICAgICAgIGhjaGFubmVsID0gbnRvaHMobmNoYW5uZWwpOworICAgICAgICBm d2R4X2Nsb3NlX2NoYW5uZWwoaGNoYW5uZWwpOworICAgICAgICByYyA9IDA7IC8qIG5vIGVycm9y cyB3aGVuIGNsb3NpbmcgKi8KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGV0RYX0RBVEE6Cisg ICAgICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSAmbmNoYW5uZWw7CisgICAgICAgIGkgPSAxOwor ICAgICAgICAvKiBJQUMgcXVvdGluZyBoYXMgYmVlbiBzdHJpcHBlZCBpbiB0bl9zYigpICovCisg ICAgICAgIHBbMF0gPSBzYltpKytdOworICAgICAgICBwWzFdID0gc2JbaSsrXTsKKyAgICAgICAg aGNoYW5uZWwgPSBudG9ocyhuY2hhbm5lbCk7CisgICAgICAgIHJjID0gZndkeF9zZW5kX3hhdXRo X3RvX3hzZXJ2ZXIoaGNoYW5uZWwsKENIQVIgKikmc2JbM10sbi01KTsKKyAgICAgICAgaWYgKCBy YyA+PSAwICYmIG4tNS1yYyA+IDApIHsKKyAgICAgICAgICAgIHJjID0gZndkeF93cml0ZV9kYXRh X3RvX2NoYW5uZWwoaGNoYW5uZWwsKGNoYXIgKikmc2JbMytyY10sbi01LXJjKTsKKyAgICAgICAg ICAgIGlmICggcmMgPCAwICkgeworICAgICAgICAgICAgICAgIC8qIEZhaWxlZDsgU2VuZCBDTE9T RSBjaGFubmVsICovCisgICAgICAgICAgICAgICAgcmMgPSBmd2R4X3NlbmRfY2xvc2UoaGNoYW5u ZWwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug RldEWF9PUFRJT05TOgorICAgICAgICBpZiAoIHNzdGVsbmV0ICkgeworI2lmbmRlZiBGV0RYX1NF UlZFUgorICAgICAgICAgICAgcmMgPSAwOworI2Vsc2UKKyAgICAgICAgICAgIHJjID0gZndkeF9z ZXJ2ZXJfYWNjZXB0X29wdGlvbnMoKGNoYXIqKSZzYlsyXSxuLTMpOworI2VuZGlmCisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICByYyA9IGZ3ZHhfY2xpZW50X3JlcGx5X29wdGlvbnMoKGNo YXIgKikmc2JbMl0sbi0zKTsKKyAgICAgICAgICAgIGlmICggcmMgPj0gMCApIHsKKyAgICAgICAg ICAgICAgICByYyA9IHRuX3NuZGZ3ZHgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKyAgICBjYXNlIEZXRFhfT1BUX0RBVEE6CisgICAgICAgIHN3aXRjaCAoIHNi WzFdICkgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmMgPSAwOyAgICAgICAgICAg ICAvKiB3ZSBkb24ndCByZWNvZ25pemUsIG5vdCBhbiBlcnJvciAqLworICAgICAgICB9CisgICAg ICAgIGJyZWFrOworCisgICAgY2FzZSBGV0RYX1hPRkY6CisgICAgY2FzZSBGV0RYX1hPTjoKKyAg ICAgICAgaWYgKCAhc3N0ZWxuZXQgKSB7CisgICAgICAgICAgICBwID0gKHVuc2lnbmVkIGNoYXIg KikgJm5jaGFubmVsOworICAgICAgICAgICAgaSA9IDE7CisgICAgICAgICAgICAvKiBJQUMgcXVv dGluZyBoYXMgYmVlbiBzdHJpcHBlZCBpbiB0bl9zYigpICovCisgICAgICAgICAgICBwWzBdID0g c2JbaSsrXTsKKyAgICAgICAgICAgIHBbMV0gPSBzYltpKytdOworICAgICAgICAgICAgaGNoYW5u ZWwgPSBudG9ocyhuY2hhbm5lbCk7CisgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldB UkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaGNoYW5uZWxdLnN1c3BlbmQgPQorICAgICAgICAgICAg ICAgIChzYlswXSA9PSBGV0RYX1hPRkYpOworICAgICAgICAgICAgcmMgPSAwOworICAgICAgICB9 CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4ocmMgPCAwID8gLTEgOiAwKTsKK30K KworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Z3ZHhfc2VuZF94YXV0aF90b194c2VydmVyKGludCBj aGFubmVsLCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IGxlbikKKyNlbHNlCitmd2R4X3NlbmRf eGF1dGhfdG9feHNlcnZlcihjaGFubmVsLCBkYXRhLCBsZW4pCisgICAgaW50IGNoYW5uZWw7IHVu c2lnbmVkIGNoYXIgKiBkYXRhOyBpbnQgbGVuOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgaW50IG5hbWVfbGVuLCBkYXRhX2xlbiwgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBNQVhG V0RYIDsgaSsrKSB7CisgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9y d2FyZF94LmNoYW5uZWxbaV0uaWQgPT0gY2hhbm5lbCkKKyAgICAgICAgICAgIGJyZWFrOworICAg IH0KKyAgICBpZiAoIGkgPT0gTUFYRldEWCApCisgICAgICAgIGdvdG8gYXV0aF9lcnI7CisKKyAg ICBpZiAoIVRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5u ZWVkX3RvX3NlbmRfeGF1dGgpCisgICAgICAgIHJldHVybigwKTsKKworICAgIGlmIChsZW4gPCAx MikKKyAgICAgICAgZ290byBhdXRoX2VycjsKKworICAgIC8qIFBhcnNlIHRoZSBsZW5ndGhzIG9m IHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMuICovCisgICAgaWYgKGRhdGFbMF0gPT0gMHg0MikgeyAg ICAgICAgICAgICAgLyogYnl0ZSBvcmRlciBNU0IgZmlyc3QuICovCisgICAgICAgIC8qIFhhdXRo IHBhY2tldHMgYXBwZWFyIHRvIGFsd2F5cyBoYXZlIHRoaXMgZm9ybWF0ICovCisgICAgICAgIGlm ICggZGF0YVsxXSAhPSAweDAwIHx8CisgICAgICAgICAgICAgZGF0YVsyXSAhPSAweDAwIHx8Cisg ICAgICAgICAgICAgZGF0YVszXSAhPSAweDBCIHx8CisgICAgICAgICAgICAgZGF0YVs0XSAhPSAw eDAwIHx8CisgICAgICAgICAgICAgZGF0YVs1XSAhPSAweDAwICkKKyAgICAgICAgICAgIGdvdG8g YXV0aF9lcnI7CisKKyAgICAgICAgbmFtZV9sZW4gPSAoZGF0YVs2XSA8PCA4KSArIGRhdGFbN107 CisgICAgICAgIGRhdGFfbGVuID0gKGRhdGFbOF0gPDwgOCkgKyBkYXRhWzldOworICAgIH0gZWxz ZSBpZiAoZGF0YVswXSA9PSAweDZjKSB7ICAgICAgIC8qIEJ5dGUgb3JkZXIgTFNCIGZpcnN0LiAq LworICAgICAgICAvKiBYYXV0aCBwYWNrZXRzIGFwcGVhciB0byBhbHdheXMgaGF2ZSB0aGlzIGZv cm1hdCAqLworICAgICAgICBpZiAoIGRhdGFbMV0gIT0gMHgwMCB8fAorICAgICAgICAgICAgIGRh dGFbMl0gIT0gMHgwQiB8fAorICAgICAgICAgICAgIGRhdGFbM10gIT0gMHgwMCB8fAorICAgICAg ICAgICAgIGRhdGFbNF0gIT0gMHgwMCB8fAorICAgICAgICAgICAgIGRhdGFbNV0gIT0gMHgwMCAp CisgICAgICAgICAgICBnb3RvIGF1dGhfZXJyOworCisgICAgICAgIG5hbWVfbGVuID0gZGF0YVs2 XSArIChkYXRhWzddIDw8IDgpOworICAgICAgICBkYXRhX2xlbiA9IGRhdGFbOF0gKyAoZGF0YVs5 XSA8PCA4KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBiYWQgYnl0ZSBvcmRlciBieXRlICov CisgICAgICAgIGdvdG8gYXV0aF9lcnI7CisgICAgfQorCisgICAgLyogQ2hlY2sgaWYgdGhlIHdo b2xlIHBhY2tldCBpcyBpbiBidWZmZXIuICovCisgICAgaWYgKGxlbiA8IDEyICsgKChuYW1lX2xl biArIDMpICYgfjMpICsgKChkYXRhX2xlbiArIDMpICYgfjMpKQorICAgICAgICBnb3RvIGF1dGhf ZXJyOworICAgIC8qIElmIHRoZSBUZWxuZXQgU2VydmVyIGFsbG93cyBhIHJlYWwgWGF1dGggbWVz c2FnZSB0byBiZSBzZW50ICovCisgICAgLyogVGhlbiBsZXQgdGhlIG1lc3NhZ2UgYmUgcHJvY2Vz c2VkIGJ5IHRoZSBYc2VydmVyLiAgICAgICAgICAgKi8KKyAgICBpZiAobmFtZV9sZW4gKyBkYXRh X2xlbiA+IDApIHsKKyAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94 LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0gMDsKKyAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorICAgIGVsc2UKKyAgICAvKiBJZiBhbiBlbXB0eSBYYXV0aCBtZXNzYWdlIHdhcyByZWNl aXZlZC4gIFdlIGFyZSBnb2luZyB0byAgICovCisgICAgLyogc2VuZCBvdXIgb3duIFhhdXRoIG1l c3NhZ2UgdXNpbmcgdGhlIHJlYWwgWGF1dGggZGF0YS4gIEFuZCAqLworICAgIC8qIHRoZW4gc2Vu ZCBhbnkgb3RoZXIgZGF0YSBpbiB0aGUgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgKi8KKyAg ICB7CisgICAgICAgIGludCBjLCBlcnIsIGRweW51bSwgc2NybnVtLCBmYW1pbHksIHNiX2xlbjsK KyAgICAgICAgY2hhciAqZGlzcGxheSwgKmhvc3QgPSBOVUxMLCAqcmVzdCA9IE5VTEw7CisgICAg ICAgIHVuc2lnbmVkIGNoYXIgKnNiLCAqcDsKKworICAgICAgICAvKiBwYXJzZSB0aGUgbG9jYWwg RElTUExBWSBlbnYgdmFyICovCisgICAgICAgIGRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsK KyAgICAgICAgaWYgKCAhZGlzcGxheSApCisgICAgICAgICAgICBkaXNwbGF5ID0gIjEyNy4wLjAu MTowLjAiOworCisgICAgICAgIGlmIChmd2R4X3BhcnNlX2Rpc3BsYXluYW1lKGRpc3BsYXksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYW1pbHksICZob3N0LCAmZHB5bnVt LCAmc2NybnVtLCAmcmVzdCkpIHsKKyAgICAgICAgICAgIGNoYXIgKiBkaXNwX25vID0gY2tpdG9h KGRweW51bSk7ICAgIC8qIHNob3VsZCBiZSB1bnNpZ25lZCAqLworICAgICAgICAgICAgaWYgKGZh bWlseSA9PSBGYW1pbHlMb2NhbCkgeworICAgICAgICAgICAgICAgIC8qIGNhbGwgd2l0aCBhZGRy ZXNzID0gIjxsb2NhbCBob3N0IG5hbWU+IiAqLworICAgICAgICAgICAgICAgIGNoYXIgYWRkcmVz c1szMDBdID0gImxvY2FsaG9zdCI7CisgICAgICAgICAgICAgICAgZ2V0aG9zdG5hbWUoYWRkcmVz cywgc2l6ZW9mKGFkZHJlc3MpIC0gMSk7CisgICAgICAgICAgICAgICAgcmVhbF94YXV0aCA9IFhh dUdldEF1dGhCeUFkZHIoZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cmxlbihhZGRyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmxlbihkaXNwX25vKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwX25vLCAwLCBOVUxMKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGZhbWlseSA9PSBGYW1pbHlJbnRlcm5ldCkgeworICAg ICAgICAgICAgICAgIC8qIGNhbGwgd2l0aCBhZGRyZXNzID0gNCBieXRlcyBudW1lcmljIGlwIGFk ZHIgKE1TQikgKi8KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaGk7CisgICAgICAg ICAgICAgICAgaWYgKGhpID0gZ2V0aG9zdGJ5bmFtZShob3N0KSkKKyAgICAgICAgICAgICAgICAg ICAgcmVhbF94YXV0aCA9IFhhdUdldEF1dGhCeUFkZHIoZmFtaWx5LCA0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaS0+aF9hZGRyLCBzdHJsZW4o ZGlzcF9ubyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRpc3Bfbm8sIDAsIE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGlmIChob3N0KSBmcmVlKGhvc3QpOworICAgICAgICBpZiAocmVzdCkgZnJlZShyZXN0KTsKKyAg ICAgICAgaWYgKCFyZWFsX3hhdXRoKSB7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gp LmZvcndhcmRfeC5jaGFubmVsW2ldLm5lZWRfdG9fc2VuZF94YXV0aCA9IDA7CisgICAgICAgICAg ICByZXR1cm4oMCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXN0cm5jbXAocmVhbF94YXV0 aC0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICJNSVQtTUFHSUMtQ09PS0lFLTEiLAorICAg ICAgICAgICAgICAgICAgICAgcmVhbF94YXV0aC0+bmFtZV9sZW5ndGgpKSB7CisgICAgICAgICAg ICBjaGFyIG1zZ1s2NF07CisKKyAgICAgICAgICAgIG5hbWVfbGVuID0gcmVhbF94YXV0aC0+bmFt ZV9sZW5ndGg7CisgICAgICAgICAgICBkYXRhX2xlbiA9IDE2OworCisgICAgICAgICAgICBpZiAo IGRhdGFbMF0gPT0gMHg0MiApIHsKKyAgICAgICAgICAgICAgICBtc2dbMF0gPSAweDQyOyAvKiBN U0Igb3JkZXIgKi8KKyAgICAgICAgICAgICAgICBtc2dbMV0gPSBtc2dbMl0gPSAwOworICAgICAg ICAgICAgICAgIG1zZ1szXSA9IDB4MEI7CisgICAgICAgICAgICAgICAgbXNnWzRdID0gbXNnWzVd ID0gMDsKKyAgICAgICAgICAgICAgICBtc2dbNl0gPSAobmFtZV9sZW4gPj4gOCk7CisgICAgICAg ICAgICAgICAgbXNnWzddID0gKG5hbWVfbGVuICYgMHhGRik7CisgICAgICAgICAgICAgICAgbXNn WzhdID0gKGRhdGFfbGVuID4+IDgpOworICAgICAgICAgICAgICAgIG1zZ1s5XSA9IChkYXRhX2xl biAmIDB4RkYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtc2dbMF0g PSAweDZjOyAvKiBMU0Igb3JkZXIgKi8KKyAgICAgICAgICAgICAgICBtc2dbMV0gPSAwOworICAg ICAgICAgICAgICAgIG1zZ1syXSA9IDB4MEI7CisgICAgICAgICAgICAgICAgbXNnWzNdID0gbXNn WzRdID0gbXNnWzVdID0gMDsKKyAgICAgICAgICAgICAgICBtc2dbNl0gPSAobmFtZV9sZW4gJiAw eEZGKTsKKyAgICAgICAgICAgICAgICBtc2dbN10gPSAobmFtZV9sZW4gPj4gOCk7CisgICAgICAg ICAgICAgICAgbXNnWzhdID0gKGRhdGFfbGVuICYgMHhGRik7CisgICAgICAgICAgICAgICAgbXNn WzldID0gKGRhdGFfbGVuID4+IDgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXNnWzEw XSA9IG1zZ1sxMV0gPSAwOworICAgICAgICAgICAgbWVtY3B5KCZtc2dbMTJdLHJlYWxfeGF1dGgt Pm5hbWUsMTgpOworICAgICAgICAgICAgbXNnWzMwXSA9IG1zZ1szMV0gPSAwOworICAgICAgICAg ICAgbWVtY3B5KCZtc2dbMzJdLHJlYWxfeGF1dGgtPmRhdGEsMTYpOworCisgICAgICAgICAgICBp ZiAoZndkeF93cml0ZV9kYXRhX3RvX2NoYW5uZWwoY2hhbm5lbCwoY2hhciAqKW1zZyw0OCkgPCAw KSB7CisgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtpXS5u ZWVkX3RvX3NlbmRfeGF1dGggPSAwOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgICAgICB9IGVsc2UgeworICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94 LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0gMDsKKyAgICAgICAgICAgICAgICByZXR1 cm4oMTIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICBURUxPUFRfU0IoVEVM T1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94LmNoYW5uZWxbaV0ubmVlZF90b19zZW5kX3hhdXRoID0g MDsKKyAgICAgICAgICAgIHJldHVybigwKTsgICAgICAgIC8qIHdlIGRvIG5vdCBrbm93IGhvdyB0 byBoYW5kbGUgdGhpcyB0eXBlIHlldCAqLworICAgICAgICB9CisgICAgfQorCisgIGF1dGhfZXJy OgorICAgICAgICBkZWJ1ZyhGMTAwLCJmd2R4X3NlbmRfeGF1dGhfdG9feHNlcnZlciBlcnJvciIs IiIsMCk7CisgICAgcmV0dXJuKC0xKTsKK30KKworCisjaWZkZWYgQ09NTUVOVAoraW50CisjaWZk ZWYgQ0tfQU5TSUMKK2Z3ZHhfYXV0aG9yaXplX2NoYW5uZWwoaW50IGNoYW5uZWwsIHVuc2lnbmVk IGNoYXIgKiBkYXRhLCBpbnQgbGVuKQorI2Vsc2UKK2Z3ZHhfYXV0aG9yaXplX2NoYW5uZWwoY2hh bm5lbCwgZGF0YSwgbGVuKQorICAgIGludCBjaGFubmVsOyB1bnNpZ25lZCBjaGFyICogZGF0YTsg aW50IGxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIC8qIFhYWCBtYXliZSB3ZSBz aG91bGQgaGF2ZSBzb21lIHJldHJ5IGhhbmRsaW5nIGlmIG5vdCB0aGUgd2hvbGUgZmlyc3QKKyAg ICAqIGF1dGhvcml6YXRpb24gcGFja2V0IGFycml2ZXMgY29tcGxldGUKKyAgICAqLworICAgIGlm ICggIVRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFtjaGFubmVs XS5hdXRob3JpemVkICkgeworICAgICAgICBpbnQgbmFtZV9sZW4sIGRhdGFfbGVuOworCisgICAg ICAgIGlmIChsZW4gPCAxMikKKyAgICAgICAgICAgIGdvdG8gYXV0aF9lcnI7CisKKyAgICAgICAg LyogUGFyc2UgdGhlIGxlbmd0aHMgb2YgdmFyaWFibGUtbGVuZ3RoIGZpZWxkcy4gKi8KKyAgICAg ICAgaWYgKGRhdGFbMF0gPT0gMHg0MikgeyAgICAgICAgICAvKiBieXRlIG9yZGVyIE1TQiBmaXJz dC4gKi8KKyAgICAgICAgICAgIC8qIFhhdXRoIHBhY2tldHMgYXBwZWFyIHRvIGFsd2F5cyBoYXZl IHRoaXMgZm9ybWF0ICovCisgICAgICAgICAgICBpZiAoIGRhdGFbMV0gIT0gMHgwMCB8fAorICAg ICAgICAgICAgICAgICBkYXRhWzJdICE9IDB4MDAgfHwKKyAgICAgICAgICAgICAgICAgZGF0YVsz XSAhPSAweDBCIHx8CisgICAgICAgICAgICAgICAgIGRhdGFbNF0gIT0gMHgwMCB8fAorICAgICAg ICAgICAgICAgICBkYXRhWzVdICE9IDB4MDAgKQorICAgICAgICAgICAgICAgIGdvdG8gYXV0aF9l cnI7CisKKyAgICAgICAgICAgIG5hbWVfbGVuID0gKGRhdGFbNl0gPDwgOCkgKyBkYXRhWzddOwor ICAgICAgICAgICAgZGF0YV9sZW4gPSAoZGF0YVs4XSA8PCA4KSArIGRhdGFbOV07CisgICAgICAg IH0gZWxzZSBpZiAoZGF0YVswXSA9PSAweDZjKSB7ICAgLyogQnl0ZSBvcmRlciBMU0IgZmlyc3Qu ICovCisgICAgICAgICAgICAvKiBYYXV0aCBwYWNrZXRzIGFwcGVhciB0byBhbHdheXMgaGF2ZSB0 aGlzIGZvcm1hdCAqLworICAgICAgICAgICAgaWYgKCBkYXRhWzFdICE9IDB4MDAgfHwKKyAgICAg ICAgICAgICAgICAgZGF0YVsyXSAhPSAweDBCIHx8CisgICAgICAgICAgICAgICAgIGRhdGFbM10g IT0gMHgwMCB8fAorICAgICAgICAgICAgICAgICBkYXRhWzRdICE9IDB4MDAgfHwKKyAgICAgICAg ICAgICAgICAgZGF0YVs1XSAhPSAweDAwICkKKyAgICAgICAgICAgICAgICBnb3RvIGF1dGhfZXJy OworCisgICAgICAgICAgICBuYW1lX2xlbiA9IGRhdGFbNl0gKyAoZGF0YVs3XSA8PCA4KTsKKyAg ICAgICAgICAgIGRhdGFfbGVuID0gZGF0YVs4XSArIChkYXRhWzldIDw8IDgpOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgLyogYmFkIGJ5dGUgb3JkZXIgYnl0ZSAqLworICAgICAgICAg ICAgZ290byBhdXRoX2VycjsKKyAgICAgICAgfQorICAgICAgICAvKiBDaGVjayBpZiBhdXRoZW50 aWNhdGlvbiBwcm90b2NvbCBtYXRjaGVzLiAqLworICAgICAgICBpZiAobmFtZV9sZW4gIT0gZmFr ZV94YXV0aC5uYW1lX2xlbmd0aCB8fAorICAgICAgICAgICAgIG1lbWNtcChkYXRhICsgMTIsIGZh a2VfeGF1dGgubmFtZSwgbmFtZV9sZW4pICE9IDApIHsKKyAgICAgICAgICAgIC8qIGNvbm5lY3Rp b24gdXNlcyBkaWZmZXJlbnQgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgKi8KKyAgICAgICAgICAg IGdvdG8gYXV0aF9lcnI7CisgICAgICAgIH0KKyAgICAgICAgLyogQ2hlY2sgaWYgYXV0aGVudGlj YXRpb24gZGF0YSBtYXRjaGVzIG91ciBmYWtlIGRhdGEuICovCisgICAgICAgIGlmIChkYXRhX2xl biAhPSBmYWtlX3hhdXRoLmRhdGFfbGVuZ3RoIHx8CisgICAgICAgICAgICAgbWVtY21wKGRhdGEg KyAxMiArICgobmFtZV9sZW4gKyAzKSAmIH4zKSwKKyAgICAgICAgICAgICAgICAgICAgIGZha2Vf eGF1dGguZGF0YSwgZmFrZV94YXV0aC5kYXRhX2xlbmd0aCkgIT0gMCkgeworICAgICAgICAgICAg LyogYXV0aCBkYXRhIGRvZXMgbm90IG1hdGNoIGZha2UgZGF0YSAqLworICAgICAgICAgICAgZ290 byBhdXRoX2VycjsKKyAgICAgICAgfQorICAgICAgICAvKiBzdWJzdGl0dXRlIHRoZSBmYWtlIGRh dGEgd2l0aCByZWFsIGRhdGEgaWYgd2UgaGF2ZSBhbnkgKi8KKyAgICAgICAgaWYgKHJlYWxfeGF1 dGggJiYgcmVhbF94YXV0aC0+ZGF0YSkKKyAgICAgICAgICAgIG1lbWNweShkYXRhICsgMTIgKyAo KG5hbWVfbGVuICsgMykgJiB+MyksCisgICAgICAgICAgICAgICAgICAgcmVhbF94YXV0aC0+ZGF0 YSwgZGF0YV9sZW4pOworCisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3 YXJkX3guY2hhbm5lbFtjaGFubmVsXS5hdXRob3JpemVkID0gMTsKKyAgICB9CisgICAgcmV0dXJu KDApOworICBhdXRoX2VycjoKKyAgICByZXR1cm4oLTEpOworfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Z3ZHhfc2VuZF9jbG9zZShpbnQgY2hhbm5lbCkK KyNlbHNlCitmd2R4X3NlbmRfY2xvc2UoY2hhbm5lbCkgaW50IGNoYW5uZWw7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBuY2hhbm5lbDsKKyAgICBpbnQgaSxy YzsKKyAgICBDSEFSICogcDsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVM T1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDAp OworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIG5jaGFubmVsID0gaHRvbnMoY2hh bm5lbCk7CisgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopICZuY2hhbm5lbDsKKworICAgIGkgPSAw OworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAvKiBJIEFtIGEg Q29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAv KiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0ZPUldBUkRfWDsg ICAgICAgICAvKiBGb3J3YXJkIFggKi8KKyAgICBzYl9vdXRbaSsrXSA9IEZXRFhfQ0xPU0U7ICAg ICAgICAgICAgICAgLyogT3BlbiAqLworICAgIHNiX291dFtpKytdID0gcFswXTsgICAgICAgICAg ICAgICAgICAgICAvKiBGaXJzdCBCeXRlIG9mIENoYW5uZWwgKi8KKyAgICBpZiAoIHBbMF0gPT0g SUFDICkKKyAgICAgICAgc2Jfb3V0W2krK10gPSBJQUM7CisgICAgc2Jfb3V0W2krK10gPSBwWzFd OyAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBCeXRlIG9mIENoYW5uZWwgKi8KKyAgICBp ZiAoIHBbMV0gPT0gSUFDICkKKyAgICAgICAgc2Jfb3V0W2krK10gPSBJQUM7CisgICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlv biAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAvKiBtYXJr ZWQgYnkgSUFDIFNFICovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8 fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKChjaGFyICopZndkeF9tc2dfb3V0LFROX01T R19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BU X0ZPUldBUkRfWCksCisgICAgICAgICAgICAgICAgICAiIENMT1NFIENIQU5ORUw9Iixja2l0b2Eo Y2hhbm5lbCksIiBJQUMgU0UiLAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICAgKTsKKyAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklO SVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCwoY2hhciAq KWZ3ZHhfbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWco KGNoYXIgKilmd2R4X21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRv bCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1My CisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICBy ZXR1cm4oLTEpOworICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Z3 ZHhfc2VuZF9vcGVuKGludCBjaGFubmVsKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2Z3ZHhfc2Vu ZF9vcGVuKGNoYW5uZWwpIGludCBjaGFubmVsOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgdW5zaWduZWQgc2hvcnQgbmNoYW5uZWw7CisgICAgaW50IGksIHJjOworICAgIENIQVIgKiBw OworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5z dGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlm IC8qIENLX1NTTCAqLworCisgICAgbmNoYW5uZWwgPSBodG9ucyhjaGFubmVsKTsKKyAgICBwID0g KHVuc2lnbmVkIGNoYXIgKikgJm5jaGFubmVsOworCisgICAgaSA9IDA7CisgICAgc2Jfb3V0W2kr K10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlh dGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0ZPUldBUkRfWDsgICAgICAgICAgIC8q IEZvcndhcmQgWCAqLworICAgIHNiX291dFtpKytdID0gRldEWF9PUEVOOyAgICAgICAgICAgICAg ICAgIC8qIE9wZW4gKi8KKyAgICBzYl9vdXRbaSsrXSA9IHBbMF07ICAgICAgICAgICAgICAgICAg ICAgICAvKiBGaXJzdCBCeXRlIG9mIENoYW5uZWwgKi8KKyAgICBpZiAoIHBbMF0gPT0gSUFDICkK KyAgICAgICAgc2Jfb3V0W2krK10gPSBJQUM7CisgICAgc2Jfb3V0W2krK10gPSBwWzFdOyAgICAg ICAgICAgICAgICAgICAgICAgLyogU2Vjb25kIEJ5dGUgb2YgQ2hhbm5lbCAqLworICAgIGlmICgg cFsxXSA9PSBJQUMgKQorICAgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKKyAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24g Ki8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJr ZWQgYnkgSUFDIFNFICovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8 fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKChjaGFyICopZndkeF9tc2dfb3V0LFROX01T R19MRU4sIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BU X0ZPUldBUkRfWCksCisgICAgICAgICAgICAgICAgICAiIE9QRU4gQ0hBTk5FTD0iLGNraXRvYShj aGFubmVsKSwiIElBQyBTRSIsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIK KyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgor I2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCwoY2hhciAqKWZ3ZHhfbXNnX291dCwiIiwwKTsK KyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcoKGNoYXIgKilmd2R4X21zZ19vdXQp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8 IDApOyAgICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0 TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgIHJldHVybigtMSk7CisgICAgcmV0 dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworZndkeF9jbGllbnRfcmVwbHlfb3B0 aW9ucyhjaGFyICpvcHRzLCBpbnQgbikKKyNlbHNlCitmd2R4X2NsaWVudF9yZXBseV9vcHRpb25z KG9wdHMsIG4pIGNoYXIgKm9wdHM7IGludCBuOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgaW50IGksaixyYzsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGkgPSAwOworICAgIHNiX291dFtpKytd ID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRp b24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9GT1JXQVJEX1g7ICAgICAgICAgICAvKiBG b3J3YXJkIFggKi8KKyAgICBzYl9vdXRbaSsrXSA9IEZXRFhfT1BUSU9OUzsgICAgICAgICAgICAg ICAvKiBPcHRpb25zICovCisKKyAgICAvKiBMb29rIGZvciB0aGUgb3B0aW9ucyB3ZSByZWNvZ25p emUgYW5kIHdpbGwgc3VwcG9ydCBmb3IgdGhpcyBzZXNzaW9uICovCisgICAgLyogYW5kIHJlcGx5 IHdpdGggdGhlaXIgYnl0ZXMgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworICAgIGZvciAoaj0wOyBqPG47IGorKyxpKyspIHsKKyAgICAgICAgc2Jfb3V0W2ldID0g RldEWF9PUFRfTk9ORTsgICAgICAgICAgLyogQWRkIHplcm8gYnl0ZSAtIG5vIG9wdGlvbnMgKi8K KyNpZmRlZiBDT01NRU5UCisgICAgICAgIC8qIElmIHdlIGhhZCBhbnkgb3B0aW9ucyB0byBzdXBw b3J0LCB0aGlzIGlzIGhvdyB3ZSB3b3VsZCBkbyBpdCAqLworICAgICAgICBpZiAoIGogPT0gMCAp IHsKKyAgICAgICAgICAgIGlmIChvcHRzW2pdICYgRldEWF9PUFRfWFhYWCkgeworICAgICAgICAg ICAgICAgIC8qIHNldCBmbGFnIHRvIHJlbWVtYmVyIG9wdGlvbiBpcyBpbiB1c2UgKi8KKyAgICAg ICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgICAgICBzYl9vdXRbaV0gfD0gRldEWF9P UFRfWFhYWDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICB9CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyog RW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAg ICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworI2lmZGVmIERFQlVHCisgICAg aWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFreG1zZygoY2hh ciAqKWZ3ZHhfbXNnX291dCxUTl9NU0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLAorICAgICAgICAg ICAgICAgICAgVEVMT1BUKFRFTE9QVF9GT1JXQVJEX1gpLAorICAgICAgICAgICAgICAgICAgIiBP UFRJT05TICIsY2tjdG94KHNiX291dFs0XSwxKSwiIElBQyBTRSIsCisgICAgICAgICAgICAgICAg ICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklO SVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCwoY2hhciAq KWZ3ZHhfbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWco KGNoYXIgKilmd2R4X21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRv bCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBP UzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAg IHJldHVybigtMSk7CisgICAgcmV0dXJuKDApOworfQorCisKK2ludAorZndkeF9zZW5kX29wdGlv bnMoKSB7CisgICAgaW50IGksIHJjOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9T QihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1 cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaSA9IDA7CisgICAgc2Jf b3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICov CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290 aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAgICAgIC8q IEZvcndhcmQgWCAqLworICAgIHNiX291dFtpKytdID0gRldEWF9PUFRJT05TOyAgICAgICAgICAg ICAvKiBPcHRpb25zICovCisgICAgc2Jfb3V0W2ldICAgPSBGV0RYX09QVF9OT05FOworICAgIC8q IGFjdGl2YXRlIG9wdGlvbnMgaGVyZSAqLworICAgIGkrKzsKKyAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkg SUFDIFNFICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcykgeworICAgICAgICBja21ha21zZygoY2hhciAqKWZ3ZHhfbXNnX291dCxUTl9NU0dfTEVO LCJURUxORVQgU0VOVCBTQiAiLAorICAgICAgICAgICAgICAgICBURUxPUFQoVEVMT1BUX0ZPUldB UkRfWCksCisgICAgICAgICAgICAgICAgICIgT1BUSU9OUyAwMCBJQUMgU0UiLE5VTEwpOworICAg IH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRl eCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1 ZyhGMTAwLChjaGFyICopZndkeF9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKSB0bl9kZWJ1ZygoY2hhciAqKWZ3ZHhfbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgICAvKiBTZW5kIGl0 LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAg aWYgKHJjKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lm ZGVmIENLX0FOU0lDCitmd2R4X3NlbmRfZGF0YV9mcm9tX2NoYW5uZWwoaW50IGNoYW5uZWwsIGNo YXIgKiBkYXRhLCBpbnQgbGVuKQorI2Vsc2UKK2Z3ZHhfc2VuZF9kYXRhX2Zyb21fY2hhbm5lbChj aGFubmVsLCBkYXRhLCBsZW4pCisgICAgaW50IGNoYW5uZWw7IGNoYXIgKiBkYXRhOyBpbnQgbGVu OworI2VuZGlmCit7CisgICAgdW5zaWduZWQgc2hvcnQgbmNoYW5uZWw7CisgICAgLyogc3RhdGlj ICovIENIQVIgc2JfcHJpdlsyMDQ4XTsKKyAgICBDSEFSICogcDsKKyAgICBpbnQgaSwgaiwgal9z YXYsIHJjOworICAgIHVuc2lnbmVkIGludCB0bXA7CisKKyAgICBkZWJ1ZyhGMTExLCJmd2R4X3Nl bmRfZGF0YV9mcm9tX2NoYW5uZWwoKSIsImNoYW5uZWwiLGNoYW5uZWwpOworCisjaWZkZWYgQ0tf U1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor CisgICAgbmNoYW5uZWwgPSBodG9ucyhjaGFubmVsKTsKKyAgICBwID0gKHVuc2lnbmVkIGNoYXIg KikgJm5jaGFubmVsOworCisgICAgaiA9IDA7CisgICAgc2JfcHJpdltqKytdID0gKENIQVIpIElB QzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2JfcHJpdltqKytd ID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAg c2JfcHJpdltqKytdID0gVEVMT1BUX0ZPUldBUkRfWDsgICAgICAgICAgIC8qIEZvcndhcmQgWCAq LworICAgIHNiX3ByaXZbaisrXSA9IEZXRFhfREFUQTsgICAgICAgICAgICAgICAgICAvKiBEYXRh ICovCisgICAgc2JfcHJpdltqKytdID0gcFswXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZp cnN0IEJ5dGUgb2YgQ2hhbm5lbCAqLworICAgIGlmICggcFswXSA9PSBJQUMgKQorICAgICAgICBz Yl9wcml2W2orK10gPSBJQUM7CisgICAgc2JfcHJpdltqKytdID0gcFsxXTsgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNlY29uZCBCeXRlIG9mIENoYW5uZWwgKi8KKyAgICBpZiAoIHBbMV0gPT0g SUFDICkKKyAgICAgICAgc2JfcHJpdltqKytdID0gSUFDOworICAgIGpfc2F2ID0gajsKKworICAg IGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICB0bXAgPSAodW5zaWduZWQgaW50 KWRhdGFbaV07CisgICAgICAgIGlmICggdG1wID09IElBQyApIHsKKyAgICAgICAgICAgIHNiX3By aXZbaisrXSA9IElBQzsKKyAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IElBQzsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IHRtcDsKKyAgICAgICAgfQorICAg ICAgICBpZiAoIGogPj0gMjA0NSAmJiAoaSA8IGxlbi0xKSApIHsKKyAgICAgICAgICAgIHNiX3By aXZbaisrXSA9IChDSEFSKSBJQUM7ICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICAg ICAgICAgIHNiX3ByaXZbaisrXSA9IChDSEFSKSBTRTsgICAvKiBtYXJrZWQgYnkgSUFDIFNFICov CisKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVi c2VzKSB7CisgICAgICAgICAgICAgICAgY2ttYWt4bXNnKCAoY2hhciAqKWZ3ZHhfbXNnX291dCxU Tl9NU0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg VEVMT1BUKFRFTE9QVF9GT1JXQVJEX1gpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBE QVRBIENIQU5ORUw9Iixja2l0b2EoY2hhbm5lbCksIiAiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCApOworICAgICAgICAgICAg ICAgIHRuX2hleCgoQ0hBUiAqKWZ3ZHhfbXNnX291dCwKKwkJICAgICAgIFROX01TR19MRU4sJnNi X3ByaXZbal9zYXZdLGotKGpfc2F2KzIpKTsKKyAgICAgICAgICAgICAgICBja3N0cm5jYXQoKGNo YXIgKilmd2R4X21zZ19vdXQsIiBJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICAgICAgfQor I2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICBSZXF1ZXN0VGVsbmV0 TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAg ICAgICAgICBkZWJ1ZyhGMTAwLChjaGFyICopZndkeF9tc2dfb3V0LCIiLDApOworICAgICAgICAg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKChjaGFyICopZndkeF9tc2dfb3V0KTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgcmMgPSAodHRvbChzYl9wcml2LGopIDwg MCk7ICAgICAgICAgICAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgICAgICAg ICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKHJjKSB7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZndkeF9zZW5kX2RhdGFfZnJvbV9jaGFubmVsKCki LCJ0dG9sKCkgZmFpbGVkIiwwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9 IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgICAg ICAgICAgc2JfcHJpdltqKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5l Z290aWF0aW9uICovCisgICAgICAgICAgICBzYl9wcml2W2orK10gPSBURUxPUFRfRk9SV0FSRF9Y OyAgICAgICAgICAgLyogRm9yd2FyZCBYICovCisgICAgICAgICAgICBzYl9wcml2W2orK10gPSBG V0RYX0RBVEE7ICAgICAgICAgICAgICAgICAgLyogRGF0YSAqLworICAgICAgICAgICAgc2JfcHJp dltqKytdID0gcFswXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEJ5dGUgb2YgQ2hh bm5lbCAqLworICAgICAgICAgICAgaWYgKCBwWzBdID09IElBQyApCisgICAgICAgICAgICAgICAg c2JfcHJpdltqKytdID0gSUFDOworICAgICAgICAgICAgc2JfcHJpdltqKytdID0gcFsxXTsgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBCeXRlIG9mIENoYW5uZWwgKi8KKyAgICAgICAg ICAgIGlmICggcFsxXSA9PSBJQUMgKQorICAgICAgICAgICAgICAgIHNiX3ByaXZbaisrXSA9IElB QzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNiX3ByaXZbaisrXSA9IChDSEFSKSBJQUM7ICAg ICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9wcml2W2or K10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwor CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAg ICAgICAgY2ttYWt4bXNnKCAoY2hhciAqKWZ3ZHhfbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAg ICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfRk9SV0FSRF9YKSwK KyAgICAgICAgICAgICAgICAgICAiIERBVEEgIixja2N0b3gocFswXSwxKSwiICIsY2tjdG94KHBb MV0sMSksIiAiLAorICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7 CisgICAgICAgIHRuX2hleCgoQ0hBUiAqKWZ3ZHhfbXNnX291dCxUTl9NU0dfTEVOLCZzYl9wcml2 WzZdLGotOCk7CisgICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWZ3ZHhfbXNnX291dCwiIElBQyBT RSIsVE5fTVNHX0xFTik7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisg ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNp ZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsKGNoYXIgKilmd2R4X21zZ19vdXQsIiIsMCk7Cisg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKChjaGFyICopZndkeF9tc2dfb3V0KTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woc2JfcHJpdixqKSA8IDApOyAgICAg ICAgICAgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRN dXRleCgpOworI2VuZGlmCisgICAgaWYgKCByYyApIHsKKyAgICAgICAgZGVidWcoRjExMCwiZndk eF9zZW5kX2RhdGFfZnJvbV9jaGFubmVsKCkiLCJ0dG9sKCkgZmFpbGVkIiwwKTsKKyAgICAgICAg cmV0dXJuKC0xKTsKKyAgICB9CisKKworICAgIHJldHVybigwKTsKK30KKworc3RhdGljIHVuc2ln bmVkIGNoYXIgKgorI2lmZGVmIENLX0FOU0lDCitmd2R4X2FkZF9xdW90ZWRfdHdvYnl0ZSh1bnNp Z25lZCBjaGFyICpwLCB1bnNpZ25lZCBzaG9ydCB0d29ieXRlKQorI2Vsc2UKK2Z3ZHhfYWRkX3F1 b3RlZF90d29ieXRlKHAsIHR3b2J5dGUpCisgICAgdW5zaWduZWQgY2hhciAqcDsgdW5zaWduZWQg c2hvcnQgdHdvYnl0ZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogYWRkcyB0aGUgSUFDIHF1 b3RlZCAoTVNCKSByZXByZXNlbnRhdGlvbiBvZiAnY2hhbm5lbCcgYXQgYnVmZmVyIHBvaW50ZXIg J3AnLAorICogcmV0dXJuaW5nIHBvaW50ZXIgdG8gbmV3IGJ1ZmZlciBwb3NpdGlvbi4gTk8gT1ZF UkZMT1cgQ0hFQ0shCisgKi8KK3sKKyAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpKCh0d29ieXRl ID4+IDgpICYgMHhGRik7CisgICAgaWYgKCoocCAtIDEpID09IDB4RkYpCisgICAgICAgICpwKysg PSAweEZGOworICAgICpwKysgPSAodW5zaWduZWQgY2hhcikodHdvYnl0ZSAmIDB4RkYpOworICAg IGlmICgqKHAgLSAxKSA9PSAweEZGKQorICAgICAgICAqcCsrID0gMHhGRjsKKyAgICByZXR1cm4g cDsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Z3ZHhfY3JlYXRlX2Zha2VfeGF1dGgoY2hh ciAqbmFtZSwgaW50IG5hbWVfbGVuLCBpbnQgZGF0YV9sZW4pCisjZWxzZQorZndkeF9jcmVhdGVf ZmFrZV94YXV0aChuYW1lLCBuYW1lX2xlbiwgZGF0YV9sZW4pCisgICAgY2hhciAqbmFtZTsgaW50 IG5hbWVfbGVuOyBpbnQgZGF0YV9sZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBj aGFyIHN0YWNrZGF0YVsyNTZdOworICAgIHVuc2lnbmVkIGludCBjLCBuOworCisgICAgaWYgKCFu YW1lX2xlbiB8fCAhZGF0YV9sZW4pCisgICAgICAgIHJldHVybiAxOworICAgIGZha2VfeGF1dGgu bmFtZSA9IG1hbGxvYyhuYW1lX2xlbik7CisgICAgZmFrZV94YXV0aC5kYXRhID0gbWFsbG9jKGRh dGFfbGVuKTsKKyAgICBpZiAoIWZha2VfeGF1dGgubmFtZSB8fCAhZmFrZV94YXV0aC5kYXRhKQor ICAgICAgICByZXR1cm4gMjsKKyAgICBmYWtlX3hhdXRoLm5hbWVfbGVuZ3RoID0gbmFtZV9sZW47 CisgICAgbWVtY3B5KGZha2VfeGF1dGgubmFtZSwgbmFtZSwgbmFtZV9sZW4pOworICAgIGZha2Vf eGF1dGguZGF0YV9sZW5ndGggPSBkYXRhX2xlbjsKKworICAgIC8qIHRyeSB0byBtYWtlIGEgcmFu ZG9tIHVuc2lnbmVkIGludCB0byBmZWVkIHNyYW5kKCkgKi8KKyAgICBjID0gdGltZShOVUxMKTsK KyAgICBjICo9IGdldHBpZCgpOworICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2Yoc3RhY2tkYXRh KTsgbisrKQorICAgICAgICBjICs9IHN0YWNrZGF0YVtuXTsKKyAgICBzcmFuZCgodW5zaWduZWQg aW50KWMpOworICAgIGZvciAoYyA9IDA7IGMgPCBkYXRhX2xlbjsgYysrKQorICAgICAgICBmYWtl X3hhdXRoLmRhdGFbY10gPSAodW5zaWduZWQgY2hhcilyYW5kKCk7CisgICAgcmV0dXJuIDA7Cit9 CisKKyNpZmRlZiBDT01NRU5UCisvKiBObyBsb25nZXIgdXNlZCAqLworaW50Citmd2R4X3NlbmRf eGF1dGgodm9pZCkKK3sKKyAgICBpbnQgYywgZXJyLCBkcHludW0sIGZhbWlseSwgc2JfbGVuLCBy YzsKKyAgICBjaGFyICpkaXNwbGF5LCAqaG9zdCA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAq c2JfcHJpdiwgKnA7CisKKyAgICAvKiBwYXJzZSB0aGUgbG9jYWwgRElTUExBWSBlbnYgdmFyICov CisgICAgaWYgKCEoZGlzcGxheSA9IHRuX2dldF9kaXNwbGF5KCkpKQorICAgICAgICByZXR1cm4g KC0xKTsKKyAgICBpZiAoZndkeF9wYXJzZV9kaXNwbGF5bmFtZShkaXNwbGF5LCAmZmFtaWx5LCAm aG9zdCwgJmRweW51bSwgTlVMTCwgTlVMTCkpIHsKKyAgICAgICAgY2hhciAqIGRpc3Bfbm8gPSBj a2l0b2EoZHB5bnVtKTsKKyAgICAgICAgaWYgKGZhbWlseSA9PSBGYW1pbHlMb2NhbCkgeworICAg ICAgICAgICAgLyogY2FsbCB3aXRoIGFkZHJlc3MgPSAiPGxvY2FsIGhvc3QgbmFtZT4iICovCisg ICAgICAgICAgICBjaGFyIGFkZHJlc3NbMzAwXSA9ICJsb2NhbGhvc3QiOworICAgICAgICAgICAg Z2V0aG9zdG5hbWUoYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpIC0gMSk7CisgICAgICAgICAgICBy ZWFsX3hhdXRoID0gWGF1R2V0QXV0aEJ5QWRkcihmYW1pbHksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oYWRkcmVzcyksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGRpc3Bfbm8pLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGlzcF9ubywgMCwgTlVMTAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm IChmYW1pbHkgPT0gRmFtaWx5SW50ZXJuZXQpIHsKKyAgICAgICAgICAgIC8qIGNhbGwgd2l0aCBh ZGRyZXNzID0gNCBieXRlcyBudW1lcmljIGlwIGFkZHIgKE1TQikgKi8KKyAgICAgICAgICAgIHN0 cnVjdCBob3N0ZW50ICpoaTsKKyAgICAgICAgICAgIGlmIChoaSA9IGdldGhvc3RieW5hbWUoaG9z dCkpCisgICAgICAgICAgICAgICAgcmVhbF94YXV0aCA9IFhhdUdldEF1dGhCeUFkZHIoZmFtaWx5 LCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpLT5o X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry bGVuKGRpc3Bfbm8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRpc3Bfbm8sIDAsIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorICAgIGlmIChob3N0KSB7CisgICAgICAg IGZyZWUoaG9zdCk7CisgICAgICAgIGhvc3QgPSBOVUxMOworICAgIH0KKyAgICBpZiAocmVhbF94 YXV0aCkKKyAgICAgICAgZXJyID0gZndkeF9jcmVhdGVfZmFrZV94YXV0aChyZWFsX3hhdXRoLT5u YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfeGF1dGgtPm5h bWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfeGF1 dGgtPmRhdGFfbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICBlbHNlCisgICAgICBlcnIgPSBmd2R4X2NyZWF0ZV9mYWtlX3hhdXRoKCJNSVQtTUFHSUMt Q09PS0lFLTEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oIk1J VC1NQUdJQy1DT09LSUUtMSIpLCAxNik7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuKC0x KTsKKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIFNCIGJsb2NrLCBhbGxvYyBmb3Ig d29yc3QgY2FzZSAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGUgZm9sbG93aW5nIHNwcmludGYo KSBjYWxscyBhcmUgc2FmZSBkdWUgdG8gbGVuZ3RoIGNoZWNraW5nICAgICAgICovCisgICAgLyog YnVmZmVyIGlzIHR3aWNlIGFzIGJpZyBhcyB0aGUgaW5wdXQganVzdCBpbiBjYXNlIGV2ZXJ5IGJ5 dGUgd2FzIElBQyAqLworICAgIHNiX2xlbiA9IDUgKyAyICsgMiArIGZha2VfeGF1dGgubmFtZV9s ZW5ndGggKyBmYWtlX3hhdXRoLmRhdGFfbGVuZ3RoICsgMjsKKyAgICBpZiAoIShzYl9wcml2ID0g bWFsbG9jKDIgKiBzYl9sZW4pKSkKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICBwID0gc2JfcHJp djsKKyAgICBzcHJpbnRmKHAsICIlYyVjJWMlYyVjIiwgSUFDLCBTQiwgVEVMT1BUX0ZPUldBUkRf WCwKKyAgICAgICAgICAgIEZXRFhfT1BUX0RBVEEsIEZXRFhfT1BUX1hBVVRIKTsKKyAgICBwICs9 IDU7CisgICAgcCA9IGZ3ZHhfYWRkX3F1b3RlZF90d29ieXRlKHAsIGZha2VfeGF1dGgubmFtZV9s ZW5ndGgpOworICAgIHAgPSBmd2R4X2FkZF9xdW90ZWRfdHdvYnl0ZShwLCBmYWtlX3hhdXRoLmRh dGFfbGVuZ3RoKTsKKyAgICBmb3IgKGMgPSAwOyBjIDwgZmFrZV94YXV0aC5uYW1lX2xlbmd0aDsg YysrKSB7CisgICAgICAgICpwKysgPSBmYWtlX3hhdXRoLm5hbWVbY107CisgICAgICAgIGlmICgo dW5zaWduZWQgY2hhcilmYWtlX3hhdXRoLm5hbWVbY10gPT0gMHhGRikKKyAgICAgICAgICAgICpw KysgPSAweEZGOworICAgIH0KKyAgICBmb3IgKGMgPSAwOyBjIDwgZmFrZV94YXV0aC5kYXRhX2xl bmd0aDsgYysrKSB7CisgICAgICAgICpwKysgPSBmYWtlX3hhdXRoLmRhdGFbY107CisgICAgICAg IGlmICgodW5zaWduZWQgY2hhcilmYWtlX3hhdXRoLmRhdGFbY10gPT0gMHhGRikKKyAgICAgICAg ICAgICpwKysgPSAweEZGOworICAgIH0KKyAgICBzcHJpbnRmKHAsICIlYyVjIiwgSUFDLCBTRSk7 CisgICAgcCArPSAyOworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8 fCBkZWJzZXMpIHsKKyAgICAgICAgc3ByaW50ZigoY2hhciAqKWZ3ZHhfbXNnX291dCwiVEVMTkVU IFNFTlQgU0IgJXMgT1BUSU9OX0RBVEEgWEFVVEggIiwKKyAgICAgICAgICAgICAgICAgVEVMT1BU KFRFTE9QVF9GT1JXQVJEX1gpKTsKKyAgICAgICAgdG5faGV4KChjaGFyICopZndkeF9tc2dfb3V0 LFROX01TR19MRU4sJnNiX3ByaXZbNV0sKHAtc2JfcHJpdiktNyk7CisgICAgICAgIGNrc3RybmNh dCgoY2hhciAqKWZ3ZHhfbXNnX291dCwiIElBQyBTRSIsVE5fTVNHX0xFTik7CisgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisKKyAgICAvKiBBZGQgVGVsbmV0IERlYnVnIGluZm8gaGVyZSAqLwor I2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCAp OworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLChjaGFyICopZndkeF9tc2df b3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1ZygoY2hhciAqKWZ3 ZHhfbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICggdHRvbChzYl9wcml2 LHAtc2JfcHJpdikgPCAwICk7ICAgICAgICAgICAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYg T1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpIHsKKyAg ICAgICAgZGVidWcoRjExMCwiZndkeF9zZW5kX3hhdXRoKCkiLCJ0dG9sKCkgZmFpbGVkIiwwKTsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKworICAgIGZyZWUoc2JfcHJpdik7CisgICAg cmV0dXJuKDApOworfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBGV0RYX1NFUlZFUgor LyogT25seSBpZiB3ZSBldmVyIGJlY29tZSBhIHNlcnZlciAtIG5vdCB5ZXQgcG9ydGVkIHRvIEtl cm1pdCAgICovCisvKiBBbmQgZXZlbiBzbyBtb3N0IG9mIHRoaXMgY29kZSBkb2VzIG5vdCBiZWxv bmcgaW4gdGhpcyBtb2R1bGUgKi8KKworaW50Citmd2R4X3dyaXRlX3hhdXRoZmlsZSh2b2lkKQor eworICAgIGludCBkcHludW0sIHNjcm51bSwgZmFtaWx5OworICAgIGNoYXIgbXlob3N0WzMwMF0s ICpob3N0LCAqcmVzdCA9IE5VTEw7CisgICAgRklMRSAqZmlsZTsKKyAgICBzdHJ1Y3Qgc29ja2Fk ZHJfaW4gc2FkZHI7CisgICAgc3RydWN0IGhvc3RlbnQgKmhpOworCisgICAgaWYgKCFmd2R4X2Rp c3BsYXkgJiYgIWZ3ZHhfeGF1dGhmaWxlKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoIXBh cnNlX2Rpc3BsYXluYW1lKGZ3ZHhfZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICZmYW1pbHksICZob3N0LCAmZHB5bnVtLCAmc2NybnVtLCAmcmVzdCkpCisgICAgICAgIHJldHVy biAyOworICAgIGlmIChyZXN0KSBmcmVlKHJlc3QpOworICAgIGlmIChob3N0KSBmcmVlKGhvc3Qp OworICAgIGlmIChmYW1pbHkgIT0gRmFtaWx5SW50ZXJuZXQpCisgICAgICAgIHJldHVybiAzOyAv KiBldmVyeSB0aGluZyBidXQgRmFtaWx5SW50ZXJuZXQgaXMgdW5leHBlY3RlZCAqLworCisgICAg LyogWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3Q6MSBpcyBhY3R1YWxseSB0cmVhdGVkIGFzIGxv Y2FsIHVuaXggc29ja2V0cywKKyAgICAgKiBzZWUgdGhlICd4YXV0aCcgbWFuIHBhZ2UuCisgICAg ICovCisgICAgeGF1dGguZmFtaWx5ID0gRmFtaWx5TG9jYWw7CisgICAgaWYgKGdldGhvc3RuYW1l KG15aG9zdCwgc2l6ZW9mKG15aG9zdCkgLSAxKSkKKyAgICAgICAgcmV0dXJuIDU7CisgICAgeGF1 dGguYWRkcmVzc19sZW5ndGggPSBzdHJsZW4obXlob3N0KTsKKyAgICBpZiAoISh4YXV0aC5hZGRy ZXNzID0gbWFsbG9jKHhhdXRoLmFkZHJlc3NfbGVuZ3RoKSkpCisgICAgICAgIHJldHVybiA1Owor ICAgIG1lbWNweSh4YXV0aC5hZGRyZXNzLCBteWhvc3QsIHhhdXRoLmFkZHJlc3NfbGVuZ3RoKTsK KworICAgIC8qIHRoZSBkaXNwbGF5IG51bWJlciBpcyB3cml0dGVuIGFzIGEgc3RyaW5nLCBub3Qg bnVtZXJpYyAqLworICAgIGlmICghKHhhdXRoLm51bWJlciA9IG1hbGxvYyg2KSkpCisgICAgICAg IHJldHVybiA2OworICAgIHNucHJpbnRmKHhhdXRoLm51bWJlciwgNSwgIiV1IiwgZHB5bnVtKTsK KyAgICB4YXV0aC5udW1iZXJfbGVuZ3RoID0gc3RybGVuKHhhdXRoLm51bWJlcik7CisgICAgaWYg KCEoZmlsZSA9IGZvcGVuKGZ3ZHhfeGF1dGhmaWxlLCAid2IiKSkpCisgICAgICAgIHJldHVybiA3 OworICAgIGlmICghWGF1V3JpdGVBdXRoKGZpbGUsICZ4YXV0aCkpCisgICAgICAgIHJldHVybiA4 OworICAgIGZjbG9zZShmaWxlKTsKKyAgICBzZXRlbnYoIlhBVVRIT1JJVFkiLCBmd2R4X3hhdXRo ZmlsZSwgMSk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorZndkeF9zZXR1cF94YXV0aCh1bnNp Z25lZCBjaGFyICpzcCwgaW50IGxlbikKKy8qIGNhbGxlZCB3aXRoICdsZW4nIHhhdXRoIGJ5dGVz LCBzdGFydGluZyBhdCAnc3AnCisgKiB0aGUgZGF0YSBmb3JtYXQgaXM6IDx1aW50MTYgbmFtZV9s ZW5ndGg+IDx1aW50MTYgZGF0YV9sZW5ndGg+IDxuYW1lPiA8ZGF0YT4KKyAqLworeworICAgIGlu dCB4YXV0aGZkOworCisgICAgaWYgKCFmd2R4X29wdGlvbnNbRldEWF9PUFRfWEFVVEhdKQorICAg ICAgICByZXR1cm4gMTsKKyAgICBpZiAobGVuIDwgNCkKKyAgICAgICAgcmV0dXJuIDI7CisKKyAg ICAvKiBzZXR1cCB0aGUgeGF1dGggc3RydWN0ICovCisgICAgeGF1dGgubmFtZV9sZW5ndGggPSAo c3BbMF0gPDwgOCkgKyBzcFsxXTsKKyAgICB4YXV0aC5kYXRhX2xlbmd0aCA9IChzcFsyXSA8PCA4 KSArIHNwWzNdOworICAgIGlmIChsZW4gIT0gNCArIHhhdXRoLm5hbWVfbGVuZ3RoICsgeGF1dGgu ZGF0YV9sZW5ndGgpCisgICAgICAgIHJldHVybiAzOworICAgIHhhdXRoLm5hbWUgPSBtYWxsb2Mo eGF1dGgubmFtZV9sZW5ndGgpOworICAgIHhhdXRoLmRhdGEgPSBtYWxsb2MoeGF1dGguZGF0YV9s ZW5ndGgpOworICAgIGlmICgheGF1dGgubmFtZSB8fCAheGF1dGguZGF0YSkKKyAgICAgICAgcmV0 dXJuIDQ7CisgICAgbWVtY3B5KHhhdXRoLm5hbWUsIHNwICsgNCwgeGF1dGgubmFtZV9sZW5ndGgp OworICAgIG1lbWNweSh4YXV0aC5kYXRhLCBzcCArIDQgKyB4YXV0aC5uYW1lX2xlbmd0aCwgeGF1 dGguZGF0YV9sZW5ndGgpOworCisgICAgLyogU2V0dXAgdG8gYWx3YXlzIGhhdmUgYSBsb2NhbCAu WGF1dGhvcml0eS4gKi8KKyAgICBmd2R4X3hhdXRoZmlsZSA9IG1hbGxvYyhNQVhQQVRITEVOKzEp OworICAgIHNucHJpbnRmKGZ3ZHhfeGF1dGhmaWxlLCBNQVhQQVRITEVOLCAiL3RtcC9YYXV0aFhY WFhYWCIpOworICAgIGlmICgoeGF1dGhmZCA9IG1rc3RlbXAoZndkeF94YXV0aGZpbGUpKSAhPSAt MSkKKyAgICAgICAgLyogd2UgY2hhbmdlIGZpbGUgb3duZXJzaGlwIGxhdGVyLCB3aGVuIHdlIGtu b3cgd2hvIGlzIHRvIGJlIG93bmVyISAqLworICAgICAgICBjbG9zZSh4YXV0aGZkKTsKKyAgICBl bHNlIHsKKyAgICAgICAgZnJlZShmd2R4X3hhdXRoZmlsZSk7CisgICAgICAgIGZ3ZHhfeGF1dGhm aWxlID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIDU7CisgICAgfQorLyogTXVzdCBoYXZlIHRoZSBz dWJzaGVsbCdzIG5ldyBESVNQTEFZIGVudiB2YXIgdG8gd3JpdGUgeGF1dGggdG8geGF1dGhmaWxl ICovCisgICAgaWYgKGZ3ZHhfZGlzcGxheSkKKyAgICAgICAgaWYgKGZ3ZHhfd3JpdGVfeGF1dGhm aWxlKCkpCisgICAgICAgICAgICByZXR1cm4gNjsKKworICAgIHJldHVybiAwOworfQorCit2b2lk IGZ3ZHhfc2V0X3hhdXRoZmlsZV9vd25lcihpbnQgdWlkKQoreworICAgIHN0cnVjdCBwYXNzd2Qg KnB3ZDsKKworICAgIGlmICghZndkeF94YXV0aGZpbGUgfHwgIShwd2QgPSBnZXRwd3VpZCh1aWQp KSkKKyAgICAgICAgcmV0dXJuOworICAgIGNob3duKGZ3ZHhfeGF1dGhmaWxlLCBwd2QtPnB3X3Vp ZCwgcHdkLT5wd19naWQpOworfQorCitpbnQKK2Z3ZHhfc2VydmVyX2FjY2VwdF9vcHRpb25zKHVu c2lnbmVkIGNoYXIgKnNwLCBpbnQgbGVuKQorLyogY2FsbGVkIHdpdGggJ2xlbicgb3B0aW9uIGJ5 dGVzLCBzdGFydGluZyBhdCAnc3AnICovCit7CisgICAgaW50IGM7CisKKyAgICBmb3IgKGMgPSAw OyBjIDwgbGVuLTI7IGMrKykgeworICAgICAgICBpZiAoYyA9PSAwKSB7CisgICAgICAgICAgICBp ZiAoc3BbY10gJiBGV0RYX09QVF9YQVVUSCkKKyAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAg ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogRldEWF9TRVJWRVIg Ki8KKyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKworI2lmZGVmIElLU19PUFRJT04KKy8qCisg IGlrc193YWl0KCkgLS0gV2FpdCBmb3IgYW4gSUtTIHN1Ym5lZ290aWF0aW9uIHJlc3BvbnNlLgor ICBzYiAtIGlzIGVpdGhlciBLRVJNSVRfUkVRX1NUQVJUIG9yIEtFUk1JVF9SRVFfU1RPUCBkZXBl bmRpbmcgb24gdGhlIGRlc2lyZWQKKyAgICAgICBzdGF0ZSBvZiB0aGUgcGVlcidzIEtlcm1pdCBz ZXJ2ZXIuCisgIGZsdXNob2sgLSBzcGVjaWZpZXMgd2hldGhlciBpdCBpcyBvayB0byB0aHJvdyBh d2F5IG5vbi1UZWxuZXQgZGF0YQorICAgICAgIGlmIHNvLCB0aGVuIHdlIGNhbGwgdHRmbHVpKCkg aW5zdGVhZCBvZiB0bl9mbHVpKCkuCisgIFJldHVybnM6CisgICAxIGlmIHRoZSBkZXNpcmVkIHN0 YXRlIGlzIGFjaGlldmVkIG9yIGlmIGl0IGlzIHVua25vd24uCisgICAwIGlmIHRoZSBkZXNpcmVk IHN0YXRlIGlzIG5vdCBhY2hpZXZlZC4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworaWtzX3dh aXQoaW50IHNiLCBpbnQgZmx1c2hvaykKKyNlbHNlIC8qIENLX0FOU0lDICovCitpa3Nfd2FpdChz YixmbHVzaG9rKSBpbnQgc2I7IGludCBmbHVzaG9rOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgaW50IHRuX3dhaXRfc2F2ZSA9IHRuX3dhaXRfZmxnOworICAgIGludCB4OworCisgICAg aWYgKFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpKSB7CisgICAgICAgIHN3aXRjaCAoc2IpIHsKKyAg ICAgICAgICBjYXNlIEtFUk1JVF9SRVFfU1RBUlQ6CisgICAgICAgICAgICBkZWJ1ZyhGMTExLAor ICAgICAgICAgICAgICAgICAgImlrc193YWl0IEtFUk1JVF9SRVFfU1RBUlQiLAorICAgICAgICAg ICAgICAgICAgInVfc3RhcnQiLAorICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC51X3N0YXJ0CisgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg dG5fc2lrcyhLRVJNSVRfUkVRX1NUQVJUKTsKKyAgICAgICAgICAgIHRuX3dhaXRfZmxnID0gMTsg ICAgICAgICAgICAvKiBLZXJtaXQgT3B0aW9uIE1VU1Qgd2FpdCAqLworICAgICAgICAgICAgZG8g eworICAgICAgICAgICAgICAgIGlmIChmbHVzaG9rKQorICAgICAgICAgICAgICAgICAgdG5fd2Fp dF9pZHggPSAwOworICAgICAgICAgICAgICAgIHggPSB0bl93YWl0KCJpa3Nfd2FpdCgpIG1lX2lr c19yZXFfc3RhcnQiKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHggPT0gMCAmJiBmbHVzaG9rICYm IHRuX3dhaXRfaWR4ID09IFROX1dBSVRfQlVGX1NaKTsKKyAgICAgICAgICAgIHRuX3dhaXRfZmxn ID0gdG5fd2FpdF9zYXZlOworICAgICAgICAgICAgaWYgKGZsdXNob2spCisgICAgICAgICAgICAg IHRuX3dhaXRfaWR4ID0gMDsKKyAgICAgICAgICAgIGlmICh0bl93YWl0X2lkeCA9PSBUTl9XQUlU X0JVRl9TWikgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogV2UgYXJl IGF0dGVtcHRpbmcgdG8gc3RhcnQgYSBrZXJtaXQgc2VydmVyIG9uIHRoZSBwZWVyCisgICAgICAg ICAgICAgICAgICogdGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBpcyBiZWNhdXNlIHdlIHdhbnQgdG8g cGVyZm9ybSBhCisgICAgICAgICAgICAgICAgICogZmlsZSB0cmFuc2Zlci4gIEJ1dCB0aGVyZSBp cyBhIGh1Z2UgYW1vdW50IG9mIG5vbiB0ZWxuZXQKKyAgICAgICAgICAgICAgICAgKiBuZWdvdGlh dGlvbiBkYXRhIGNvbWluZyBpbiBhbmQgc28gd2UgaGF2ZSBub3QgYmVlbiBhYmxlCisgICAgICAg ICAgICAgICAgICogdG8gZmluZCB0aGUgcmVzcG9uc2UuICBTbyB3ZSB3aWxsIGxpZSBhbmQgYXNz dW1lIHRoYXQKKyAgICAgICAgICAgICAgICAgKiByZXNwb25zZSBpcyAneWVzJy4gIFRoZSB3b3Jz ZSB0aGF0IHdpbGwgaGFwcGVuIGlzIHRoYXQKKyAgICAgICAgICAgICAgICAgKiBhIFJFU1BfU1RP UCBpcyByZWNlaXZlZCBhZnRlciB3ZSBlbnRlciBwcm90b2NvbCBtb2RlLgorICAgICAgICAgICAg ICAgICAqIEFuZCB0aGUgcHJvdG9jb2wgb3BlcmF0aW9uIHdpbGwgYmUgY2FuY2VsZWQuCisgICAg ICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdG5fcHVzaCgpOworICAgICAgICAgICAg ICAgIHJldHVybigxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG5f cHVzaCgpOworICAgICAgICAgICAgICAgIHJldHVybihURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCku a2VybWl0LnVfc3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgS0VSTUlUX1JF UV9TVE9QOgorICAgICAgICAgICAgZGVidWcoRjExMSwKKyAgICAgICAgICAgICAgICAgICJpa3Nf d2FpdCBLRVJNSVRfUkVRX1NUT1AiLAorICAgICAgICAgICAgICAgICAgInVfc3RhcnQiLAorICAg ICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0Cisg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVRX1NUT1Ap OworICAgICAgICAgICAgdG5fd2FpdF9mbGcgPSAxOyAgICAgICAgICAgIC8qIEtlcm1pdCBPcHRp b24gTVVTVCB3YWl0ICovCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKGZs dXNob2spCisgICAgICAgICAgICAgICAgICB0bl93YWl0X2lkeCA9IDA7CisgICAgICAgICAgICAg ICAgeCA9IHRuX3dhaXQoImlrc193YWl0KCkgbWVfaWtzX3JlcV9zdG9wIik7CisgICAgICAgICAg ICB9IHdoaWxlICh4ID09IDAgJiYgZmx1c2hvayAmJiB0bl93YWl0X2lkeCA9PSBUTl9XQUlUX0JV Rl9TWik7CisgICAgICAgICAgICB0bl93YWl0X2ZsZyA9IHRuX3dhaXRfc2F2ZTsKKyAgICAgICAg ICAgIGlmIChmbHVzaG9rKQorICAgICAgICAgICAgICB0bl93YWl0X2lkeCA9IDA7CisKKyAgICAg ICAgICAgIGlmICh0bl93YWl0X2lkeCA9PSBUTl9XQUlUX0JVRl9TWikgeworICAgICAgICAgICAg ICAgIC8qCisgICAgICAgICAgICAgICAgICogV2UgYXJlIGF0dGVtcHRpbmcgdG8gc3RvcCBhIGtl cm1pdCBzZXJ2ZXIgb24gdGhlIHBlZXIKKyAgICAgICAgICAgICAgICAgKiB0aGUgbW9zdCBsaWtl bHkgcmVhc29uIGJlaW5nIHRoYXQgd2Ugd2FudCB0byBlbnRlcgorICAgICAgICAgICAgICAgICAq IENPTk5FQ1QgbW9kZS4gIEJ1dCB0aGVyZSBpcyBhIGh1Z2UgYW1vdW50IG9mIG5vbiB0ZWxuZXQK KyAgICAgICAgICAgICAgICAgKiBuZWdvdGlhdGlvbiBkYXRhIGNvbWluZyBpbiBhbmQgc28gd2Ug aGF2ZSBub3QgYmVlbiBhYmxlCisgICAgICAgICAgICAgICAgICogdG8gZmluZCB0aGUgcmVzcG9u c2UuICBTbyB3ZSB3aWxsIGxpZSBhbmQgYXNzdW1lIHRoYXQKKyAgICAgICAgICAgICAgICAgKiB0 aGUgYW5zd2VyIGlzICd5ZXMnIGFuZCBhbGxvdyB0aGUgQ09OTkVDVCBjb21tYW5kIHRvCisgICAg ICAgICAgICAgICAgICogc3VjY2VlZC4gIFRoZSB3b3JzdCB0aGF0IGhhcHBlbnMgaXMgdGhhdCBD T05ORUNUIG1vZGUKKyAgICAgICAgICAgICAgICAgKiBzd2FsbG93cyB0aGUgaW5jb21pbmcgZGF0 YSBkaXNwbGF5aW5nIGl0IHRvIHRoZSB1c2VyCisgICAgICAgICAgICAgICAgICogYW5kIHRoZW4g aXQgcmVzdW1lcyBLZXJtaXQgY2xpZW50IG1vZGUuCisgICAgICAgICAgICAgICAgICovCisgICAg ICAgICAgICAgICAgdG5fcHVzaCgpOworICAgICAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG5fcHVzaCgpOworICAgICAgICAgICAg ICAgIHJldHVybighVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0bl9wdXNoKCk7CisgICAgfQorICAgIHJl dHVybigxKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2lrc190bl9zYihDSEFSICogc2Is IGludCBuKQorI2Vsc2UKK2lrc190bl9zYihzYiwgbikgQ0hBUiAqIHNiOyBpbnQgbjsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeworICAgIGV4dGVybiBpbnQgc2VydmVyOworICAgIGV4dGVybiBD SEFSIHNzdGF0ZTsKKyNpZmRlZiBOT0lDUAorICAgIGV4dGVybiBpbnQgYXV0b2RsOworICAgIGlu dCBpbmF1dG9kbCA9IDAsIGNtZGFkbCA9IDE7CisjZWxzZQorI2lmZGVmIENLX0FVVE9ETAorICAg IGV4dGVybiBpbnQgYXV0b2RsLCBpbmF1dG9kbCwgY21kYWRsOworI2VuZGlmIC8qIENLX0FVVE9E TCAqLworI2VuZGlmIC8qIE5PSUNQICovCisgICAgc3dpdGNoIChzYlswXSkgeworICAgICAgY2Fz ZSBLRVJNSVRfU1RBUlQ6ICAgICAgICAgICAgICAgIC8qIFNUQVJUICovCisgICAgICAgIFRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCA9IDE7CisgICAgICAgIHJldHVybig0 KTsKKworICAgICAgY2FzZSBLRVJNSVRfU1RPUDogICAgICAgICAgICAgICAgIC8qIFNUT1AgKi8K KyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0gMDsKKyAg ICAgICAgcmV0dXJuKDQpOworCisgICAgICBjYXNlIEtFUk1JVF9SRVFfU1RBUlQ6ICAgICAgICAg ICAgLyogUkVRLVNUQVJUICovCisjaWZuZGVmIE5PWEZFUgorICAgICAgICBpZiAoaW5zZXJ2ZXIp IHsKKyNpZmRlZiBDS19BVVRPREwKKyAgICAgICAgICAgIGNtZGFkbCA9IDE7ICAgICAgICAgICAg ICAgICAvKiBUdXJuIG9uIHBhY2tldCBkZXRlY3Rpb24gKi8KKyNlbmRpZiAvKiBDS19BVVRPREwg Ki8KKyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQg PSAxOworICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVEFSVCk7CisgICAgICAgIH0g ZWxzZSBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgeworICAg ICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVEFSVCk7CisgICAgICAgIH0gZWxzZSB7Cisj aWZuZGVmIElLU0RPTkxZCisjaWZkZWYgQ0tfQVVUT0RMCisjaWZkZWYgT1MyCisgICAgICAgICAg ICBpZiAobG9jYWwgJiYgKElzQ29ubmVjdE1vZGUoKSAmJiBhdXRvZGwpIHx8CisgICAgICAgICAg ICAgICAgKCFJc0Nvbm5lY3RNb2RlKCkgJiYgCisgICAgICAgICAgICAgICAgICAoaW5hdXRvZGwg fHwgc3N0YXRlID09ICd4JyB8fCBzc3RhdGUgPT0gJ3YnKSkKKyAgICAgICAgICAgICAgICApCisg ICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1JFU1BfU1RBUlQpOyAvKiBTVEFSVCAqLworICAg ICAgICAgICAgZWxzZQorCisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgICAgIGlmICgobG9jYWwg JiYgd2hhdCA9PSBXX0NPTk5FQ1QgJiYgYXV0b2RsKSB8fAorICAgICAgICAgICAgICAgIChsb2Nh bCAmJiB3aGF0ICE9IFdfQ09OTkVDVCAmJgorICAgICAgICAgICAgICAgICAgKGluYXV0b2RsIHx8 IHNzdGF0ZSA9PSAneCcgfHwgc3N0YXRlID09ICd2JykKKyAgICAgICAgICAgICAgICApKQorICAg ICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NUQVJUKTsgLyogU1RBUlQgKi8KKyAgICAg ICAgICAgIGVsc2UKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNl bmRpZiAvKiBJS1NET05MWSAqLworICAgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9SRVNQX1NU T1ApOworICAgICAgICB9CisjZWxzZSAvKiBOT1hGRVIgKi8KKyAgICAgICAgICB0bl9zaWtzKEtF Uk1JVF9SRVNQX1NUT1ApOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICByZXR1cm4oNCk7 CisKKyAgICAgIGNhc2UgS0VSTUlUX1JFUV9TVE9QOiAgICAgICAgICAgICAvKiBSRVEtU1RPUCAq LworICAgICAgICAvKiBUaGUgcHJvdG9jb2wgcmVxdWlyZXMgdGhhdCB0aGUgcmVxdWVzdCBiZSBy ZXNwb25kZWQgdG8gKi8KKyAgICAgICAgLyogZWl0aGVyIGJ5IGNoYW5naW5nIHN0YXRlcyBvciBi eSByZXBvcnRpbmcgdGhlIGN1cnJlbnQgICovCisgICAgICAgIC8qIHN0YXRlLiAgKi8KKworICAg ICAgICAvKiBXZSBuZWVkIHRvIHByb3ZpZGUgdGhlIHVzZXIgc29tZSB3YXkgb2YgZGljdGF0aW5n IHdoYXQgKi8KKyAgICAgICAgLyogdGhlIHBvbGljaWVzIHNob3VsZCBiZS4gIEZvciBpbnN0YW5j ZSwgaWYgd2UgYXJlIGluICAgICovCisgICAgICAgIC8qIENPTk5FQ1QgbW9kZSB3aXRoIGF1dG9k b3dubG9hZCBPTiBhbmQgd2UgZ2V0IGEgUkVRLVNUT1AqLworICAgICAgICAvKiB3aGF0IHNob3Vs ZCB0aGUgcHJvcGVyIHJlc3BvbnNlIGJlPyAgICAgICAgICAgICAgICAgICAgKi8KKyNpZm5kZWYg Tk9YRkVSCisgICAgICAgIGlmIChpbnNlcnZlcgorI2lmZGVmIENLX0FVVE9ETAorICAgICAgICAg ICAgfHwgIWxvY2FsICYmIGNtZGFkbAorI2VuZGlmIC8qIENLX0FVVE9ETCAqLworICAgICAgICAg ICAgKSB7CisjaWZkZWYgQ0tfQVVUT0RMCisgICAgICAgICAgICBjbWRhZGwgPSAwOyAgICAgICAg ICAgICAgICAgLyogVHVybiBvZmYgcGFja2V0IGRldGVjdGlvbiAqLworI2VuZGlmIC8qIENLX0FV VE9ETCAqLworICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVE9QKTsKKyAgICAgICAg fSBlbHNlIGlmIChzZXJ2ZXIpIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgZW5fZmluOworICAg ICAgICAgICAgaWYgKGVuX2ZpbikgeyAgICAgICAgICAgICAgIC8qIElmIHRoZSBzZXJ2ZXIgaXMg YWxsb3dlZCB0byBzdG9wICovCisgICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9T VE9QKTsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBXZSBhcmUg bm90IGFsbG93ZWQgdG8gc3RvcCAqLworICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1JF U1BfU1RBUlQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZuZGVmIElLU0RPTkxZCisj aWZkZWYgQ0tfQVVUT0RMCisjaWZkZWYgT1MyCisgICAgICAgIGVsc2UgaWYgKGxvY2FsICYmIChJ c0Nvbm5lY3RNb2RlKCkgJiYgYXV0b2RsKSB8fAorICAgICAgICAgICAgICAgICAgICghSXNDb25u ZWN0TW9kZSgpICYmIGluYXV0b2RsKQorICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAg ICAgLyogSWYgd2UgYXJlIGEgcHNldWRvLXNlcnZlciBhbmQgdGhlIG90aGVyIHNpZGUgcmVxdWVz dHMgKi8KKyAgICAgICAgICAgIC8qIHRoYXQgd2Ugc3RvcCwgdGVsbCB0aGVuIHRoYXQgd2UgaGF2 ZSBldmVuIHRob3VnaCB3ZSAgICovCisgICAgICAgICAgICAvKiBoYXZlIG5vdC4gIE90aGVyd2lz ZSwgdGhlIG90aGVyIHNpZGUgbWlnaHQgcmVmdXNlIHRvICAqLworICAgICAgICAgICAgLyogZW50 ZXIgU0VSVkVSIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwor ICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVE9QKTsgIC8qIFNUT1AgKi8KKyAgICAg ICAgfQorI2Vsc2UgLyogT1MyICovCisgICAgICAgIGVsc2UgaWYgKChsb2NhbCAmJiB3aGF0ID09 IFdfQ09OTkVDVCAmJiBhdXRvZGwpIHx8CisgICAgICAgICAgICAgICAgICAgKGxvY2FsICYmIHdo YXQgIT0gV19DT05ORUNUICYmIGluYXV0b2RsKQorICAgICAgICAgICAgICAgICAgICkgeworICAg ICAgICAgICAgLyogSWYgd2UgYXJlIGEgcHNldWRvLXNlcnZlciBhbmQgdGhlIG90aGVyIHNpZGUg cmVxdWVzdHMgKi8KKyAgICAgICAgICAgIC8qIHRoYXQgd2Ugc3RvcCwgdGVsbCB0aGVuIHRoYXQg d2UgaGF2ZSBldmVuIHRob3VnaCB3ZSAgICovCisgICAgICAgICAgICAvKiBoYXZlIG5vdC4gIE90 aGVyd2lzZSwgdGhlIG90aGVyIHNpZGUgbWlnaHQgcmVmdXNlIHRvICAqLworICAgICAgICAgICAg LyogZW50ZXIgU0VSVkVSIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKworICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfUkVTUF9TVE9QKTsgIC8qIFNUT1AgKi8K KyAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworI2Vu ZGlmIC8qIElLU0RPTkxZICovCisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAg ICAgICAgeworICAgICAgICAgICAgLyogSWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgaW4gYW55IG1v ZGUgdGhhdCBhY2NlcHRzICovCisgICAgICAgICAgICAvKiBLZXJtaXQgcGFja2V0cyB0aGVuIG9m IGNvdXJzZSByZXBvcnQgdGhhdCB3ZSBhcmUgKi8KKyAgICAgICAgICAgIC8qIG5vdCBiZWluZyBh IEtlcm1pdCBzZXJ2ZXIuICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICB0 bl9zaWtzKEtFUk1JVF9SRVNQX1NUT1ApOyAgLyogU1RPUCAqLworICAgICAgICB9CisgICAgICAg IHJldHVybig0KTsKKworICAgICAgY2FzZSBLRVJNSVRfU09QOiB7ICAgICAgICAgICAgICAgIC8q IFNPUCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgICBleHRlcm4gQ0hBUiBzdGNocjsgICAg ICAgICAgICAvKiBJbmNvbWluZyBTT1AgY2hhcmFjdGVyICovCisgICAgICAgICAgc3RjaHIgPSBz YlsxXTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0LnNvcCA9IDE7CisgICAgICAgICAgcmV0dXJuKDQpOworICAgICAgfQorCisg ICAgICBjYXNlIEtFUk1JVF9SRVNQX1NUQVJUOiAgICAgICAgICAgLyogU1RBUlQgKi8KKyAgICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ID0gMTsKKyAgICAgICAg aWYgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0YXJ0KSB7CisgICAg ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdGFydCA9IDA7 CisgICAgICAgIH0gZWxzZSBpZiAoVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9y ZXFfc3RvcCkgeworICAgICAgICAgICAgLyogSWYgd2UgaGF2ZSBpc3N1ZWQgYSByZXF1ZXN0IHRv IHN0b3AgYSBLZXJtaXQgU2VydmVyICovCisgICAgICAgICAgICAvKiBhbmQgdGhlIHJlc3BvbnNl IGlzIFN0YXJ0LCB0aGVuIHdlIG11c3QgcmVwb3J0IHRoaXMgKi8KKyAgICAgICAgICAgIC8qIHRv IHRoZSBjYWxsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RvcCA9IDA7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKDQpOworCisgICAgICBjYXNlIEtFUk1JVF9SRVNQ X1NUT1A6ICAgICAgICAgICAgLyogU1RPUCAqLworICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0LnVfc3RhcnQgPSAwOworICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9L RVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RhcnQpIHsKKyAgICAgICAgICAgIFRFTE9QVF9TQihURUxP UFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgIC8qIElmIHdl IGhhdmUgaXNzdWVkIGEgcmVxdWVzdCB0byBzdGFydCBhIEtlcm1pdCBTZXJ2ZXIgKi8KKyAgICAg ICAgICAgIC8qIGFuZCB0aGUgcmVzcG9uc2UgaXMgU3RvcCwgdGhlbiB3ZSBtdXN0IHJlcG9ydCB0 aGlzICAgKi8KKyAgICAgICAgICAgIC8qIHRvIHRoZSBjYWxsZXIuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgfSBlbHNlIGlmIChURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdG9wKSB7CisgICAgICAgICAgICBURUxPUFRfU0Io VEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3JlcV9zdG9wID0gMDsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4oNCk7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigwKTsKKworICAg IH0gLyogc3dpdGNoIChzYlswXSkgKi8KK30KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisKKy8q IEluaXRpYWxpemUgdGVsbmV0IHNldHRpbmdzIC0gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBNRSBh bmQgVSBtb2RlcyAqLworaW50Cit0bl9zZXRfbW9kZXMoKSB7CisgICAgaW50IG9wdCxjbWQ7Cisj aWZkZWYgQ0tfRk9SV0FSRF9YCisgICAgaW50IHg7CisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICov CisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyAgICB7CisgICAgICAgIGludCBpLGo7CisgICAgICAg IGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgIHRuX2Vudl91c2VydmFyW2ld WzBdID0gTlVMTDsKKyAgICAgICAgICAgIHRuX2Vudl91c2VydmFyW2ldWzFdID0gTlVMTDsKKyAg ICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworCisgICAgLyogaW5p dGlhbGl6ZSBhbGwgb3B0aW9ucyB0byByZWZ1c2UgaW4gYm90aCBkaXJlY3Rpb25zICovCisgICAg Zm9yIChvcHQgPSAwOyBvcHQgPCBOVEVMT1BUUzsgb3B0KyspIHsKKyAgICAgICAgVEVMT1BUX01F KG9wdCkgPSAwOworICAgICAgICBURUxPUFRfVShvcHQpICA9IDA7CisgICAgICAgIFRFTE9QVF9V TkFOU1dFUkVEX1dJTEwob3B0KSA9IDA7CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKG9w dCkgICA9IDA7CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQob3B0KSA9IDA7CisgICAg ICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQob3B0KSAgID0gMDsKKyAgICAgICAgVEVMT1BUX1VO QU5TV0VSRURfU0Iob3B0KSAgID0gMDsKKyAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IFRO X05HX1JGOworICAgICAgICBURUxPUFRfVV9NT0RFKG9wdCkgPSBUTl9OR19SRjsKKyAgICAgICAg VEVMT1BUX0RFRl9TX01FX01PREUob3B0KSA9IFROX05HX1JGOworICAgICAgICBURUxPUFRfREVG X1NfVV9NT0RFKG9wdCkgPSBUTl9OR19SRjsKKyAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUo b3B0KSA9IFROX05HX1JGOworICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKG9wdCkgPSBUTl9O R19SRjsKKyAgICAgICAgZm9yIChjbWQgPSAwOyBjbWQgPCA0OyBjbWQgKyspCisgICAgICAgICAg dG5jbnRzW1RFTE9QVF9JTkRFWChvcHQpXVtjbWRdID0gMDsKKyAgICB9CisjaWZkZWYgSUtTX09Q VElPTgorICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgPSAwOwor ICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCA9IDA7CisgICAgVEVM T1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFfc3RhcnQgPSAwOworICAgIFRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0b3AgPSAwOworICAgIFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQuc29wID0gMDsKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICov CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9O KS5lbmNyeXB0LnN0b3AgPSAwOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworI2lmZGVm ICBDS19OQVdTCisgICAgVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnggPSAwOworICAgIFRF TE9QVF9TQihURUxPUFRfTkFXUykubmF3cy55ID0gMDsKKyNlbmRpZiAvKiBDS19OQVdTICovCisK KyNpZmRlZiBDS19TU0wKKyAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxz LnVfZm9sbG93cyA9IDA7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLmF1dGhfcmVxdWVzdCA9IDA7CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICAvKiBOb3cg c2V0IHRoZSBvbmVzIHdlIHdhbnQgdG8gYWNjZXB0IHRvIHRoZSBwcm9wZXIgdmFsdWVzICovCisg ICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX1NHQSkgPSBUTl9OR19SUTsKKyAgICBURUxP UFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TR0EpID0gVE5fTkdfUlE7CisgICAgVEVMT1BUX0RFRl9D X01FX01PREUoVEVMT1BUX1NHQSkgPSBUTl9OR19BQzsKKyAgICBURUxPUFRfREVGX0NfVV9NT0RF KFRFTE9QVF9TR0EpID0gVE5fTkdfQUM7CisKKyAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxP UFRfQklOQVJZKSA9IFROX05HX0FDOworICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0JJ TkFSWSkgPSBUTl9OR19BQzsKKyAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQklOQVJZ KSA9IFROX05HX0FDOworICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0JJTkFSWSkgPSBU Tl9OR19BQzsKKworICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9MT0dPVVQpID0gVE5f TkdfQUM7CisgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfTE9HT1VUKSA9IFROX05HX0FD OworICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9MT0dPVVQpID0gVE5fTkdfQUM7Cisg ICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfTE9HT1VUKSA9IFROX05HX0FDOworCisjaWZk ZWYgSUtTX09QVElPTgorICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0g VE5fTkdfUlE7CisgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05H X1JROworICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0gVE5fTkdfUlE7 CisgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JROworI2Vu ZGlmIC8qIElLU19PUFRJT04gKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBURUxPUFRf REVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JROworICAgIFRFTE9QVF9E RUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JROworICAgIFRFTE9QVF9E RUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7CisgICAgVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUlE7CisjZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLworCisgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0VDSE8pID0g VE5fTkdfUlE7CisjaWZkZWYgSUtTRAorICAgIGlmICggIWluc2VydmVyICkKKyNlbmRpZiAvKiBJ S1NEICovCisgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9UVFlQRSkgPSBUTl9OR19S UTsKKworI2lmZGVmIENLX0VOVklST05NRU5UCisgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxP UFRfTkVXRU5WSVJPTikgPSBUTl9OR19SUTsKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLwor CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9Q VF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19SUTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElP TiAqLworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkg eworICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdf UlE7CisgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5f TkdfQUM7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZkZWYgQ0tfTkFXUworICAg IFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX05BV1MpID0gVE5fTkdfUlE7CisjZW5kaWYgLyog Q0tfTkFXUyAqLworCisgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRUNITykgPSBUTl9O R19BQzsKKyAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfVFRZUEUpID0gVE5fTkdfUlE7 CisKKyNpZmRlZiBDS19FTlZJUk9OTUVOVAorICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9Q VF9ORVdFTlZJUk9OKSA9IFROX05HX1JROworI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisK KyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9Q VF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19SUTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElP TiAqLworCisjaWZkZWYgQ0tfTkFXUworICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9O QVdTKSA9IFROX05HX1JROworI2VuZGlmIC8qIENLX05BV1MgKi8KKworI2lmZGVmIENLX1NORExP QworICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9TTkRMT0MpID0gVE5fTkdfUlE7Cisj ZW5kaWYgLyogQ0tfU05ETE9DICovCisKKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICBURUxPUFRf REVGX0NfVV9NT0RFKFRFTE9QVF9GT1JXQVJEX1gpID0gVE5fTkdfQUM7CisgICAgVEVMT1BUX1NC KFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5saXN0ZW5fc29ja2V0ID0gLTE7CisgICAgZm9y ICh4ID0gMDsgeCA8IE1BWEZXRFg7IHgrKykgeworICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9S V0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5mZCA9IC0xOworICAgICAgIFRFTE9QVF9TQihU RUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5pZCA9IC0xOworICAgICAgIFRF TE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5uZWVkX3RvX3Nl bmRfeGF1dGggPSAwOworICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJk X3guY2hhbm5lbFt4XS5zdXNwZW5kID0gMDsKKyAgICB9CisjZW5kaWYgLyogQ0tfRk9SV0FSRF9Y ICovCisKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BU X0NPTVBPUlQpID0gVE5fTkdfUlE7CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCisgICAgLyog U2V0IHRoZSBpbml0aWFsIHZhbHVlcyBmb3IgY3VycmVudGx5IGtub3duIG1vZGUgKi8KKyAgICBm b3IgKG9wdCA9IFRFTE9QVF9GSVJTVDsgb3B0IDw9IFRFTE9QVF9MQVNUOyBvcHQrKykgeworICAg ICAgICBpZiAoVEVMT1BUX09LKG9wdCkpIHsKKyAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKG9w dCkgPSBzc3RlbG5ldCA/CisgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKG9wdCkg OgorICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKG9wdCk7CisgICAgICAgICAg ICBURUxPUFRfVV9NT0RFKG9wdCkgPSBzc3RlbG5ldCA/CisgICAgICAgICAgICAgIFRFTE9QVF9E RUZfU19VX01PREUob3B0KSA6CisgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShv cHQpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybigxKTsKK30KKworCisvKiBTZW5kIERl bGF5ZWQgU3VibmVnb3RpYXRpb25zICovCisKK1ZPSUQKK3RuX3Nkc2IoKSB7CisgICAgLyogaWYg KCFJU19URUxORVQoKSkgcmV0dXJuOyAqLworCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfVFRZ UEUpLnRlcm0ubmVlZF90b19zZW5kKSB7CisgICAgICAgIHRuX3N0dHlwKCk7CisgICAgICAgIFRF TE9QVF9TQihURUxPUFRfVFRZUEUpLnRlcm0ubmVlZF90b19zZW5kID0gMDsKKyAgICB9CisjaWZk ZWYgQ0tfRU5WSVJPTk1FTlQKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5l bnYubmVlZF90b19zZW5kICYmCisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTiku ZW52LnN0cikgeworICAgICAgICB0bl9zbmVudigoQ0hBUiAqKVRFTE9QVF9TQihURUxPUFRfTkVX RU5WSVJPTikuZW52LnN0ciwKKyAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdF TlZJUk9OKS5lbnYubGVuKTsKKyAgICAgICAgZnJlZShURUxPUFRfU0IoVEVMT1BUX05FV0VOVklS T04pLmVudi5zdHIpOworICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5z dHI9TlVMTDsKKyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYubGVuPTA7 CisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52Lm5lZWRfdG9fc2VuZCA9 IDA7CisgICAgfQorI2lmZGVmIENLX1hESVNQTE9DCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRf WERJU1BMT0MpLnhkaXNwLm5lZWRfdG9fc2VuZCkgeworICAgICAgICB0bl9zeGRpc3Bsb2MoKTsK KyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9YRElTUExPQykueGRpc3AubmVlZF90b19zZW5kID0g MDsKKyAgICB9CisjZW5kaWYgLyogQ0tfWERJU1BMT0MgKi8KKyNlbmRpZiAvKiBDS19FTlZJUk9O TUVOVCAqLworI2lmZGVmIENLX05BV1MKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5u YXdzLm5lZWRfdG9fc2VuZCkgeworICAgICAgICB0bl9zbmF3cygpOworICAgICAgICBURUxPUFRf U0IoVEVMT1BUX05BV1MpLm5hd3MubmVlZF90b19zZW5kID0gMDsKKyAgICB9CisjZW5kaWYgLyog Q0tfTkFXUyAqLworI2lmZGVmIENLX1NORExPQworICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NO RExPQykuc25kbG9jLm5lZWRfdG9fc2VuZCkgeworICAgICAgICB0bl9zbmRsb2MoKTsKKyAgICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9TTkRMT0MpLnNuZGxvYy5uZWVkX3RvX3NlbmQgPSAwOworICAg IH0KKyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICBpZiAo VEVMT1BUX1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5uZWVkX3RvX3NlbmQpIHsKKyAg ICAgICAgaWYgKCBzc3RlbG5ldCApCisgICAgICAgICAgICBmd2R4X3NlbmRfb3B0aW9ucygpOwor ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lm5lZWRfdG9fc2Vu ZCA9IDA7CisgICAgfQorI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworI2lmZGVmIFROX0NPTVBP UlQKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0Lm5lZWRfdG9fc2Vu ZCkgeworICAgICAgICB0bl9zbmRjb21wb3J0KCk7CisgICAgICAgIFRFTE9QVF9TQihURUxPUFRf Q09NUE9SVCkuY29tcG9ydC5uZWVkX3RvX3NlbmQgPSAwOworICAgIH0KKyNlbmRpZiAvKiBUTl9D T01QT1JUICovCisKK30KKworaW50Cit0bl9yZXNldCgpIHsKKyAgICBpbnQgeCxvcHQsY21kOwor CisgICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDEpOyAqLworCisgICAgdG5fd2FpdF9p ZHggPSAwOyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHRuX3B1c2goKSBidWZmZXIg Ki8KKyAgICB0bl93YWl0X3RtbyA9IFROX1RJTUVPVVQ7ICAgICAgICAgICAvKiBSZXNldCB3YWl0 IHRpbWVyIHN0YXRzICovCisKKyAgICBuZmxhZyA9IDA7CisKKyAgICAvKiBSZXNldCB0aGUgVEVM TkVUIE9QVElPTlMgY291bnRzICovCisgICAgZm9yIChvcHQgPSBURUxPUFRfRklSU1Q7IG9wdCA8 PSBURUxPUFRfTEFTVDsgb3B0KyspIHsKKyAgICAgICAgaWYgKFRFTE9QVF9PSyhvcHQpKSB7Cisg ICAgICAgICAgICBURUxPUFRfTUUob3B0KSA9IDA7CisgICAgICAgICAgICBURUxPUFRfVShvcHQp ICA9IDA7CisgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKG9wdCkgPSAwOworICAg ICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8ob3B0KSAgID0gMDsKKyAgICAgICAgICAgIFRF TE9QVF9VTkFOU1dFUkVEX1dPTlQob3B0KSA9IDA7CisgICAgICAgICAgICBURUxPUFRfVU5BTlNX RVJFRF9ET05UKG9wdCkgICA9IDA7CisgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9TQihv cHQpICAgPSAwOworICAgICAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IHNzdGVsbmV0ID8K KyAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUob3B0KSA6CisgICAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9DX01FX01PREUob3B0KTsKKyAgICAgICAgICAgIFRFTE9QVF9VX01PREUo b3B0KSA9IHNzdGVsbmV0ID8KKyAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShvcHQp IDoKKyAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKG9wdCk7CisKKyNpZmRlZiBE RUJVRworICAgICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo VEVMT1BUX01FX01PREUob3B0KSkgeworICAgICAgICAgICAgICAgICAgY2FzZSBUTl9OR19SRjoK KyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5pIE1FIFJFRlVTRSAiLFRFTE9Q VChvcHQpLDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg IGNhc2UgVE5fTkdfQUM6CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuX2luaSBN RSBBQ0NFUFQgIixURUxPUFQob3B0KSwwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICBjYXNlIFROX05HX1JROgorICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJ0bl9pbmkgTUUgUkVRVUVTVCIsVEVMT1BUKG9wdCksMCk7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUTl9OR19NVToKKyAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5pIE1FIFJFUVVJUkUiLFRFTE9QVChvcHQpLDAp OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgc3dpdGNoIChURUxPUFRfVV9NT0RFKG9wdCkpIHsKKyAgICAgICAgICAgICAgICAg IGNhc2UgVE5fTkdfUkY6CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuX2luaSBV ICBSRUZVU0UgIixURUxPUFQob3B0KSwwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICBjYXNlIFROX05HX0FDOgorICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJ0bl9pbmkgVSAgQUNDRVBUICIsVEVMT1BUKG9wdCksMCk7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUTl9OR19SUToKKyAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwidG5faW5pIFUgIFJFUVVFU1QiLFRFTE9QVChvcHQpLDAp OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVE5f TkdfTVU6CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRuX2luaSBVICBSRVFVSVJF IixURUxPUFQob3B0KSwwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICBm b3IgKGNtZCA9IDA7IGNtZCA8IDQ7IGNtZCArKykKKyAgICAgICAgICAgICAgdG5jbnRzW1RFTE9Q VF9JTkRFWChvcHQpXVtjbWRdID0gMDsKKyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBDS19FTlZJ Uk9OTUVOVAorICAgIGlmICghdG5fZW52X2ZsZykgeworICAgICAgICBURUxPUFRfTUVfTU9ERShU RUxPUFRfTkVXRU5WSVJPTikgPSBUTl9OR19SRjsKKyAgICAgICAgVEVMT1BUX1VfTU9ERShURUxP UFRfTkVXRU5WSVJPTikgPSBUTl9OR19SRjsKKyAgICB9CisjZW5kaWYgLyogQ0tfRU5WSVJPTk1F TlQgKi8KKyNpZmRlZiBDS19TTkRMT0MKKyAgICBpZiAoIXRuX2xvYykKKyAgICAgICAgVEVMT1BU X0RFRl9DX01FX01PREUoVEVMT1BUX1NORExPQykgPSBUTl9OR19SRjsKKyNlbmRpZiAvKiBDS19T TkRMT0MgKi8KKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQp Lmtlcm1pdC5tZV9zdGFydCA9IDA7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1p dC51X3N0YXJ0ID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3Jl cV9zdGFydCA9IDA7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9yZXFf c3RvcCA9IDA7CisgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5zb3AgPSAwOwor I2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgVEVMT1BU X1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5lbmNyeXB0LnN0b3AgPSAwOworICAgIFRFTE9QVF9TQihU RUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5uZWVkX3RvX3NlbmQgPSAwOworI2VuZGlmIC8qIENL X0VOQ1JZUFRJT04gKi8KKyNpZmRlZiAgQ0tfTkFXUworICAgIFRFTE9QVF9TQihURUxPUFRfTkFX UykubmF3cy5uZWVkX3RvX3NlbmQgPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3 cy54ID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MueSA9IDA7CisjZW5kaWYg LyogQ0tfTkFXUyAqLworICAgIFRFTE9QVF9TQihURUxPUFRfVFRZUEUpLnRlcm0ubmVlZF90b19z ZW5kID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX1RUWVBFKS50ZXJtLnR5cGVbMF0gPSAnXDAn OworI2lmZGVmIENLX0VOVklST05NRU5UCisgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9O KS5lbnYubmVlZF90b19zZW5kID0gMDsKKyAgICBpZiAodG5fZmlyc3QpCisgICAgICAgIFRFTE9Q VF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0cj1OVUxMOworICAgIGVsc2UgaWYgKFRFTE9Q VF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0cikgeworICAgICAgICBmcmVlKFRFTE9QVF9T QihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0cik7CisgICAgICAgIFRFTE9QVF9TQihURUxPUFRf TkVXRU5WSVJPTikuZW52LnN0cj1OVUxMOworICAgIH0KKyAgICBURUxPUFRfU0IoVEVMT1BUX05F V0VOVklST04pLmVudi5sZW49MDsKKyNpZmRlZiBDS19YRElTUExPQworICAgIFRFTE9QVF9TQihU RUxPUFRfWERJU1BMT0MpLnhkaXNwLm5lZWRfdG9fc2VuZCA9IDA7CisjZW5kaWYgLyogQ0tfWERJ U1BMT0MgKi8KKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworI2lmZGVmIENLX1NORExPQwor ICAgIFRFTE9QVF9TQihURUxPUFRfU05ETE9DKS5zbmRsb2MubmVlZF90b19zZW5kID0gMDsKKyNl bmRpZiAvKiBDS19TTkRMT0MgKi8KKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICBURUxPUFRfU0Io VEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lm5lZWRfdG9fc2VuZCA9IDA7CisgICAgVEVMT1BU X1NCKFRFTE9QVF9GT1JXQVJEX1gpLmZvcndhcmRfeC5saXN0ZW5fc29ja2V0ID0gLTE7CisgICAg Zm9yICh4ID0gMDsgeCA8IE1BWEZXRFg7IHgrKykgeworICAgICAgIFRFTE9QVF9TQihURUxPUFRf Rk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5mZCA9IC0xOworICAgICAgIFRFTE9QVF9T QihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5pZCA9IC0xOworICAgICAg IFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3guY2hhbm5lbFt4XS5uZWVkX3Rv X3NlbmRfeGF1dGggPSAwOworICAgICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3 YXJkX3guY2hhbm5lbFt4XS5zdXNwZW5kID0gMDsKKyAgICB9CisgICAgLyogUmVzZXQgWGF1dGgg ZGF0YSAqLworICAgIGlmICggcmVhbF94YXV0aCApIHsKKyAgICAgICAgWGF1RGlzcG9zZUF1dGgo cmVhbF94YXV0aCk7CisgICAgICAgIHJlYWxfeGF1dGggPSBOVUxMOworICAgIH0KKyAgICBpZiAo IGZha2VfeGF1dGgubmFtZSApCisgICAgICAgIGZyZWUoZmFrZV94YXV0aC5uYW1lKTsKKyAgICBp ZiAoIGZha2VfeGF1dGguZGF0YSApCisgICAgICAgIGZyZWUoZmFrZV94YXV0aC5kYXRhKTsKKyAg ICBpZiAoIGZha2VfeGF1dGguYWRkcmVzcyApCisgICAgICAgIGZyZWUoZmFrZV94YXV0aC5hZGRy ZXNzKTsKKyAgICBpZiAoIGZha2VfeGF1dGgubnVtYmVyICkKKyAgICAgICAgZnJlZShmYWtlX3hh dXRoLm51bWJlcik7CisgICAgbWVtc2V0KCZmYWtlX3hhdXRoLDAsc2l6ZW9mKGZha2VfeGF1dGgp KTsKKyNpZmRlZiBOVAorICAgIFRFTE9QVF9TQihURUxPUFRfRk9SV0FSRF9YKS5mb3J3YXJkX3gu dGhyZWFkX3N0YXJ0ZWQgPSAwOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogQ0tfRk9SV0FS RF9YICovCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKHRsc19vbmx5X2ZsYWcgfHwgc3NsX29ubHlf ZmxhZykgeworICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05H X1JGOworICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gVE5fTkdfUkY7 CisgICAgfQorICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMudV9mb2xs b3dzID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2Zv bGxvd3MgPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMuYXV0 aF9yZXF1ZXN0ID0gMDsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJ T04KKyAgICBpZiAoIWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpCisjaWZkZWYgQ0tfU1NMCisgICAg ICAgIHx8IHRsc19vbmx5X2ZsYWcgfHwgc3NsX29ubHlfZmxhZworI2VuZGlmIC8qIENLX1NTTCAq LworICAgICAgICApIHsKKyAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID0gVE5fTkdfUkY7CisgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0g VE5fTkdfUkY7CisgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworI2lmZGVmIFRO X0NPTVBPUlQKKyAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQubmVlZF90b19z ZW5kID0gMDsKKyAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jf c2IgPSAwOworICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9t cyA9IDA7CisgICAgdG5jX2luaXQoKTsKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisKKyAgICB0 bl9maXJzdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBsb25nZXIgdGhlIGZpcnN0 IHRpbWUgaW5pdCAqLworCisjaWZkZWYgT1MyCisgICAgdHRudW0gPSAtMTsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmVzZXQgVGVybVR5cGUgbmVnb3RpYXRpb24gKi8KKyAgICB0dG51bWVu ZCA9IDA7CisjZW5kaWYgLyogT1MyICovCisKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAordG5f c3RhcnQoKSB7CisgICAgaW50IHdhaXQsIHgsIG9wdDsKKworICAgIC8qIGlmICghSVNfVEVMTkVU KCkpIHJldHVybigwKTsgKi8KKworICAgIGlmICh0bl9pbml0ICYmIHRuX2JlZ3VuKQorICAgICAg ICByZXR1cm4oMCk7CisgICAgdG5fYmVndW4gPSAxOworCisgICAgZGVidWcoRjExMSwidG5fc3Rh cnQiLCJzc3RlbG5ldCIsc3N0ZWxuZXQpOworICAgIHdhaXQgPSAwOworICAgIGlmICh0bl9kdXBs ZXgpICB7CisgICAgICAgIG9sZHBsZXggPSBkdXBsZXg7ICAgICAgICAgICAgICAgLyogc2F2ZSBv bGQgZHVwbGV4IHZhbHVlICovCisgICAgICAgIGR1cGxleCA9IDE7ICAgICAgICAgICAgICAgICAg ICAgLyogYW5kIHNldCB0byBoYWxmIGR1cGxleCBmb3IgdGVsbmV0ICovCisgICAgfQorI2lmZGVm IENLX1NTTAorICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9TVEFSVF9UTFMpICYmCisgICAgICAg IFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID49IFROX05HX1JRKSB7CisgICAgICAg IGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9TVEFSVF9UTFMpIDwgMCkKKyAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9TVEFSVF9UTFMp ID0gMTsKKyAgICAgICAgd2FpdCA9IDE7CisgICAgfQorICAgIGlmICghVEVMT1BUX1UoVEVMT1BU X1NUQVJUX1RMUykgJiYKKyAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA+ PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5fc29wdChETywgVEVMT1BUX1NUQVJUX1RMUykg PCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RP KFRFTE9QVF9TVEFSVF9UTFMpID0gMTsKKyAgICAgICAgd2FpdCA9IDE7CisgICAgfQorI2VuZGlm IC8qIENLX1NTTCAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICBkZWJ1ZyhGMTEw LCJ0bl9pbmkoKSBDS19BVVRIRU5USUNBVElPTiIsIiIsMCk7CisgICAgaWYgKHRuX2luaXQpICAg ICAgICAgICAgICAgIC8qIHRuX2luaSgpIG1pZ2h0IGJlIGNhbGxlZCByZWN1cnNpdmVseSAqLwor ICAgICAgcmV0dXJuKDApOworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9BVVRIRU5USUNBVElP TikgJiYKKyAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA+PSBU Tl9OR19SUSkgeworICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfQVVUSEVOVElDQVRJ T04pIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxPUFRfVU5BTlNXRVJF RF9XSUxMKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSAxOworICAgICAgICB3YWl0ID0gMTsKKyAg ICB9CisgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQVVUSEVOVElDQVRJT04pICYmCisgICAgICAg IFRFTE9QVF9VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA+PSBUTl9OR19SUSkgeworICAg ICAgICBpZiAodG5fc29wdChETywgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA8IDApCisgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX0FVVEhF TlRJQ0FUSU9OKSA9IDE7CisgICAgICAgIHdhaXQgPSAxOworICAgIH0KKyNpZmRlZiBDS19FTkNS WVBUSU9OCisgICAgaWYgKFRFTE9QVF9VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9PSBU Tl9OR19SRiAmJgorICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9O KSA9PSBUTl9OR19SRikgeworICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19SRjsKKyAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikg PSBUTl9OR19SRjsKKyAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8q IENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNpZmRlZiBDS19OQVdTCisjaWZuZGVmIE5PTE9DQUwK KyAgICBkZWJ1ZyhGMTEwLCJ0bl9pbmkoKSBDS19OQVdTICFOT0xPQ0FMIiwiIiwwKTsKKyAgICBp ZiAoIXNzdGVsbmV0KSB7CisgICAgICAgIC8qIENvbnNvbGUgdGVybWluYWwgc2NyZWVuIHJvd3Mg YW5kIGNvbHVtbnMgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgZGVidWcoRjEwMSwKKyAgICAgICAg ICAgICAgInRuX2luaSB0dF9yb3dzIDEiLAorICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAg ICAgVnNjcm5HZXRIZWlnaHQoVlRFUk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkKKyAgICAgICAg ICAgICAgKTsKKyAgICAgICAgZGVidWcoRjEwMSwidG5faW5pIHR0X2NvbHMgMSIsIiIsVnNjcm5H ZXRXaWR0aChWVEVSTSkpOworICAgICAgICAvKiBOb3Qga25vd24geWV0ICovCisgICAgICAgIGlm IChWc2NybkdldFdpZHRoKFZURVJNKSA8IDAgfHwKKyAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0 KFZURVJNKS0odHRfc3RhdHVzW1ZURVJNXT8xOjApIDwgMCkgeworICAgICAgICAgICAgdHRnd3Np eigpOyAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBmaW5kIG91dCAqLworICAgICAgICB9Cisg ICAgICAgIGRlYnVnKEYxMDEsCisgICAgICAgICAgICAgICJ0bl9pbmkgdHRfcm93cyAyIiwKKyAg ICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZURVJNKS0odHRf c3RhdHVzW1ZURVJNXT8xOjApCisgICAgICAgICAgICAgICk7CisgICAgICAgIGRlYnVnKEYxMDEs InRuX2luaSB0dF9jb2xzIDIiLCIiLFZzY3JuR2V0V2lkdGgoVlRFUk0pKTsKKyAgICAgICAgLyog Tm93IGRvIHdlIGtub3c/ICovCisgICAgICAgIGlmIChWc2NybkdldFdpZHRoKFZURVJNKSA+IDAg JiYKKyAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZURVJNKS0odHRfc3RhdHVzW1ZURVJNXT8x OjApID4gMCkgeworICAgICAgICAgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX05BV1MpICYmCisg ICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX05BV1MpID49IFROX05HX1JRKSB7 CisgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BUX05BV1MpIDwgMCkKKyAg ICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5T V0VSRURfV0lMTChURUxPUFRfTkFXUykgPSAxOworICAgICAgICAgICAgICAgIHdhaXQgPSAxOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgZGVidWco RjEwMSwidG5faW5pIHR0X3Jvd3MgMSIsIiIsdHRfcm93cyk7CisgICAgICAgIGRlYnVnKEYxMDEs InRuX2luaSB0dF9jb2xzIDEiLCIiLHR0X2NvbHMpOworICAgICAgICBpZiAodHRfcm93cyA8IDAg fHwgdHRfY29scyA8IDApIHsgLyogTm90IGtub3duIHlldCAqLworICAgICAgICAgICAgdHRnd3Np eigpOyAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBmaW5kIG91dCAqLworICAgICAgICB9Cisg ICAgICAgIGRlYnVnKEYxMDEsInRuX2luaSB0dF9yb3dzIDIiLCIiLHR0X3Jvd3MpOworICAgICAg ICBkZWJ1ZyhGMTAxLCJ0bl9pbmkgdHRfY29scyAyIiwiIix0dF9jb2xzKTsKKyAgICAgICAgaWYg KHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMgPiAwKSB7IC8qIE5vdyBkbyB3ZSBrbm93PyAqLworICAg ICAgICAgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX05BV1MpICYmCisgICAgICAgICAgICAgICAg VEVMT1BUX01FX01PREUoVEVMT1BUX05BV1MpID49IFROX05HX1JRKSB7CisgICAgICAgICAgICAg ICAgaWYgKHRuX3NvcHQoV0lMTCwgVEVMT1BUX05BV1MpIDwgMCkKKyAgICAgICAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxP UFRfTkFXUykgPSAxOworICAgICAgICAgICAgICAgIHdhaXQgPSAxOworICAgICAgICAgICAgfQor ICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgfSBlbHNlCisjZW5kaWYgLyogTk9MT0NB TCAqLworICAgIHsKKyAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfTkFXUykgJiYKKyAgICAg ICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX05BV1MpID49IFROX05HX1JRKSB7CisgICAgICAg ICAgICBpZiAodG5fc29wdChETywgVEVMT1BUX05BV1MpIDwgMCkKKyAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9OQVdTKSA9 IDE7CisgICAgICAgICAgICB3YWl0ID0gMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBD S19OQVdTICovCisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfU0dBKSAmJgorICAgICAgICBU RUxPUFRfTUVfTU9ERShURUxPUFRfU0dBKSA+PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5f c29wdChXSUxMLCBURUxPUFRfU0dBKSA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChURUxPUFRfU0dBKSA9IDE7CisgICAgICAgIHdhaXQg PSAxOworICAgIH0KKyAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9TR0EpICYmCisgICAgICAgIFRF TE9QVF9VX01PREUoVEVMT1BUX1NHQSkgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgaWYgKHRuX3Nv cHQoRE8sIFRFTE9QVF9TR0EpIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBU RUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfU0dBKSA9IDE7CisgICAgICAgIHdhaXQgPSAxOwor ICAgIH0KKyAgICBpZiAoIXRuX2R1cGxleCkgeworICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9Q VF9FQ0hPKSAmJgorICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRUNITykgPj0gVE5f TkdfUlEpIHsKKyAgICAgICAgICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfRUNITykgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURf RE8oVEVMT1BUX0VDSE8pID0gMTsKKyAgICAgICAgICAgIHdhaXQgPSAxOworICAgICAgICB9Cisg ICAgfQorICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9FQ0hPKSAmJgorICAgICAgICBURUxPUFRf TUVfTU9ERShURUxPUFRfRUNITykgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgaWYgKHRuX3NvcHQo V0lMTCwgVEVMT1BUX0VDSE8pIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBU RUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9FQ0hPKSA9IDE7CisgICAgICAgIHdhaXQgPSAx OworICAgIH0KKworICAgIGRlYnVnKEYxMDAsInRuX2luaSBhYm91dCB0byBzZW5kIFdJTEwgVFRZ UEUgaWYgcmVxdWVzdGVkIiwiIiwwKTsKKy8qCisgIFRhbGtpbmcgdG8gVEVMTkVUIHBvcnQsIHNv IHNlbmQgV0lMTCBURVJNSU5BTCBUWVBFIGFuZCBETyBTR0EuCisgIEFsc28gc2VuZCBXSUxMIE5B V1MgaWYgd2Uga25vdyBvdXIgc2NyZWVuIGRpbWVuc2lvbnMuCisqLworICAgIGlmICghVEVMT1BU X01FKFRFTE9QVF9UVFlQRSkgJiYKKyAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX1RUWVBF KSA+PSBUTl9OR19SUSkgeworICAgICAgICBpZiAoKHggPSB0bl9zb3B0KFdJTEwsVEVMT1BUX1RU WVBFKSkgPCAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9pbmkgdG5fc29wdCBXSUxM IFRUWVBFIGZhaWxlZCIsIiIseCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX1RUWVBFKSA9IDE7CisgICAg ICAgIHdhaXQgPSAxOworICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9pbmkgc2VudCBXSUxMIFRUWVBF IG9rIiwiIiwwKTsKKyAgICB9CisgICAgaWYgKCFURUxPUFRfVShURUxPUFRfVFRZUEUpICYmCisg ICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX1RUWVBFKSA+PSBUTl9OR19SUSkgeworICAgICAg ICBpZiAoKHggPSB0bl9zb3B0KERPLFRFTE9QVF9UVFlQRSkpIDwgMCkgeworICAgICAgICAgICAg ZGVidWcoRjEwMSwidG5faW5pIHRuX3NvcHQgRE8gVFRZUEUgZmFpbGVkIiwiIix4KTsKKyAgICAg ICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURf RE8oVEVMT1BUX1RUWVBFKSA9IDE7CisgICAgICAgIHdhaXQgPSAxOworICAgICAgICBkZWJ1ZyhG MTAwLCJ0bl9pbmkgc2VudCBETyBUVFlQRSBvayIsIiIsMCk7CisgICAgfQorICAgIGlmICghVEVM T1BUX01FKFRFTE9QVF9CSU5BUlkpICYmCisgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9C SU5BUlkpID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9C SU5BUlkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxPUFRfVU5BTlNX RVJFRF9XSUxMKFRFTE9QVF9CSU5BUlkpID0gMTsKKyAgICAgICAgd2FpdCA9IDE7CisgICAgfQor ICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkgJiYKKyAgICAgICAgVEVMT1BUX1VfTU9E RShURUxPUFRfQklOQVJZKSA+PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5fc29wdChETywg VEVMT1BUX0JJTkFSWSkgPCAwKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRFTE9Q VF9VTkFOU1dFUkVEX0RPKFRFTE9QVF9CSU5BUlkpID0gMTsKKyAgICAgICAgd2FpdCA9IDE7Cisg ICAgfQorI2lmZGVmIENLX1NORExPQworICAgIGlmICh0bl9sb2MpIHsKKyAgICAgICAgaWYgKCFU RUxPUFRfTUUoVEVMT1BUX1NORExPQykgJiYKKyAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRF TE9QVF9TTkRMT0MpID49IFROX05HX1JRKSB7CisgICAgICAgICAgICBpZiAodG5fc29wdChXSUxM LCBURUxPUFRfU05ETE9DKSA8IDApCisgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg ICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9TTkRMT0MpID0gMTsKKyAgICAgICAg ICAgIHdhaXQgPSAxOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1NORExPQyAqLwor I2lmZGVmIENLX0VOVklST05NRU5UCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisgICAgaWYgKCFURUxP UFRfVShURUxPUFRfRk9SV0FSRF9YKSAmJgorICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRf Rk9SV0FSRF9YKSA+PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxP UFRfRk9SV0FSRF9YKSA8IDApCisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxP UFRfVU5BTlNXRVJFRF9XSUxMKFRFTE9QVF9GT1JXQVJEX1gpID0gMTsKKyAgICAgICAgd2FpdCA9 IDE7CisgICAgfQorI2VuZGlmIC8qIEZPUldBUkRfWCAqLworI2lmZGVmIENLX1hESVNQTE9DCisg ICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX1hESVNQTE9DKSAmJgorICAgICAgICAgVEVMT1BUX01F X01PREUoVEVMT1BUX1hESVNQTE9DKSA+PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5fc29w dChXSUxMLCBURUxPUFRfWERJU1BMT0MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX1hESVNQTE9DKSA9IDE7CisgICAg ICAgIHdhaXQgPSAxOworICAgIH0KKyNlbmRpZiAvKiBDS19YRElTUExPQyAqLworICAgIC8qIFdp bGwgc2VuZCB0ZXJtaW5hbCBlbnZpcm9ubWVudC4gKi8KKyAgICBpZiAoIVRFTE9QVF9NRShURUxP UFRfTkVXRU5WSVJPTikgJiYKKyAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX05FV0VOVklS T04pID49IFROX05HX1JRKSB7CisgICAgICAgIGlmICh0bl9zb3B0KFdJTEwsIFRFTE9QVF9ORVdF TlZJUk9OKSA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgVEVMT1BUX1VOQU5T V0VSRURfV0lMTChURUxPUFRfTkVXRU5WSVJPTikgPSAxOworICAgICAgICB3YWl0ID0gMTsKKyAg ICB9CisgICAgaWYgKCFURUxPUFRfVShURUxPUFRfTkVXRU5WSVJPTikgJiYKKyAgICAgICAgVEVM T1BUX1VfTU9ERShURUxPUFRfTkVXRU5WSVJPTikgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgaWYg KHRuX3NvcHQoRE8sIFRFTE9QVF9ORVdFTlZJUk9OKSA8IDApCisgICAgICAgICAgcmV0dXJuKC0x KTsKKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oVEVMT1BUX05FV0VOVklST04pID0gMTsK KyAgICAgICAgd2FpdCA9IDE7CisgICAgfQorI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisK KyAgICAvKiBUYWtlIGNhcmUgb2YgYW55IG90aGVyIHRlbG5ldCBvcHRpb25zIHRoYXQgcmVxdWly ZSBoYW5kbGluZy4gKi8KKworICAgIGZvciAob3B0ID0gVEVMT1BUX0ZJUlNUOyBvcHQgPD0gVEVM T1BUX0xBU1Q7IG9wdCsrKSB7CisgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgY2Fz ZSBURUxPUFRfQVVUSEVOVElDQVRJT046CisgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElP TjoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9UVFlQRToKKyAgICAgICAgICBjYXNlIFRFTE9QVF9O QVdTOgorICAgICAgICAgIGNhc2UgVEVMT1BUX0JJTkFSWToKKyAgICAgICAgICBjYXNlIFRFTE9Q VF9ORVdFTlZJUk9OOgorICAgICAgICAgIGNhc2UgVEVMT1BUX1NORExPQzoKKyAgICAgICAgICBj YXNlIFRFTE9QVF9YRElTUExPQzoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9TR0E6CisgICAgICAg ICAgY2FzZSBURUxPUFRfRUNITzoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisgICAg ICAgICAgY2FzZSBURUxPUFRfU1RBUlRfVExTOgorICAgICAgICAgIGNhc2UgVEVMT1BUX0ZPUldB UkRfWDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoVEVMT1BUX09LKG9wdCkpIHsKKyAgICAgICAg ICAgICAgICBpZiAoIVRFTE9QVF9NRShvcHQpICYmCisgICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9NRV9NT0RFKG9wdCkgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRu X3NvcHQoV0lMTCwgb3B0KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTChvcHQpID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgd2FpdCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGlmICghVEVMT1BUX1Uob3B0KSAmJgorICAgICAgICAgICAgICAgICAgICBURUxPUFRf VV9NT0RFKG9wdCkgPj0gVE5fTkdfUlEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3Nv cHQoRE8sIG9wdCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKG9wdCkgPSAxOworICAgICAgICAg ICAgICAgICAgICB3YWl0ID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKHdhaXQpIHsKKyAgICAgICAgaWYgKHRuX3dhaXQoInBy ZS1lbmNyeXB0IikgPCAwKSB7CisgICAgICAgICAgICB0bl9wdXNoKCk7CisgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIHdhaXQgPSAwOworICAgIH0KKworI2lmZGVm IENLX0VOQ1JZUFRJT04KKyAgICBpZiAodG5faW5pdCkgICAgICAgICAgICAgICAgLyogdG5faW5p KCkgbWF5IGJlIGNhbGxlZCByZWN1cnNpdmVseSAqLworICAgICAgcmV0dXJuKDApOworCisgICAg aWYgKCFURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pICYmCisgICAgICAgIFRFTE9QVF9NRV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA+PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5fc29w dChXSUxMLCBURUxPUFRfRU5DUllQVElPTikgPCAwKQorICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoVEVMT1BUX0VOQ1JZUFRJT04pID0gMTsKKyAg ICAgICAgd2FpdCA9IDE7CisgICAgfQorICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJ T04pICYmCisgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID49IFROX05H X1JRKSB7CisgICAgICAgIGlmICh0bl9zb3B0KERPLCBURUxPUFRfRU5DUllQVElPTikgPCAwKQor ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRFTE9Q VF9FTkNSWVBUSU9OKSA9IDE7CisgICAgICAgIHdhaXQgPSAxOworICAgIH0KKworICAgIC8qIElm IHdlIGFyZSBnb2luZyB0byBlbmNyeXB0LCB3ZSB3YW50IHRvIGRvIGl0IGJlZm9yZSB3ZSBzZW5k IGFueSBtb3JlICovCisgICAgLyogZGF0YSwgZXNwZWNpYWxseSB0aGUgdGVybWluYWwgdHlwZSBh bmQgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgICAgICAgKi8KKyAgICBpZiAod2FpdCkgeworICAg ICAgICBpZiAodG5fd2FpdCgicG9zdC1lbmNyeXB0IikgPCAwKSB7CisgICAgICAgICAgICB0bl9w dXNoKCk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIHdhaXQg PSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisKKyAgICB0bl9zZHNiKCk7 CisKKyAgICBpZiAodG5faW5pdCkgICAgICAgICAgICAgICAgICAgLyogdG5faW5pKCkgbWF5IGJl IGNhbGxlZCByZWN1cnNpdmVseSAqLworICAgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBJS1Nf T1BUSU9OCisgICAgLyogS2VybWl0IFNlcnZlciBuZWdvdGlhdGlvbiBtdXN0IGdvIGxhc3QgKi8K KyAgICAvKiBTZW5kIFUgYmVmb3JlIE1FICovCisKKyAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9L RVJNSVQpICYmCisgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0tFUk1JVCkgPj0gVE5fTkdf UlEpIHsKKyAgICAgICAgaWYgKHRuX3NvcHQoRE8sIFRFTE9QVF9LRVJNSVQpIDwgMCkKKyAgICAg ICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfS0VS TUlUKSA9IDE7CisgICAgICAgIHdhaXQgPSAxOworICAgIH0KKyAgICBpZiAoIVRFTE9QVF9NRShU RUxPUFRfS0VSTUlUKSAmJgorICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfS0VSTUlUKSA+ PSBUTl9OR19SUSkgeworICAgICAgICBpZiAodG5fc29wdChXSUxMLCBURUxPUFRfS0VSTUlUKSA8 IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lM TChURUxPUFRfS0VSTUlUKSA9IDE7CisgICAgICAgIHdhaXQgPSAxOworICAgIH0KKyNlbmRpZiAv KiBJS1NfT1BUSU9OICovCisKKyAgICBpZiAod2FpdCkgeworICAgICAgICBpZiAodG5fd2FpdCgi ZW5kIG9mIHRlbG5ldCBuZWdvdGlhdGlvbnMiKSA8IDApIHsKKyAgICAgICAgICAgIHRuX3B1c2go KTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgd2FpdCA9IDA7 CisgICAgfQorCisgICAgdG5fc2RzYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vu ZCBkZWxheWVkIHN1Ym5lZ290aWF0aW9ucyAqLworICAgIHRuX3B1c2goKTsKKyAgICByZXR1cm4o MCk7Cit9CisKKy8qIFN0YXJ0IGEgdGVsbmV0IGNvbm5lY3Rpb24uICovCisvKiBSZXR1cm5zIC0x IG9uIGVycm9yLCAwIGlmIG5vdGhpbmcgaGFwcGVucywgMSBpZiBpbml0IG1zZ3Mgc2VudCBvayAq LworCitpbnQKK3RuX2luaSgpIHsKKyAgICBpbnQgeDsKKworICAgIGRlYnVnKEYxMDEsInRuX2lu aSB0dG5wcm90byIsIiIsdHRucHJvdG8pOworICAgIGRlYnVnKEYxMDEsInRuX2luaSB0bl9pbml0 IiwiIix0bl9pbml0KTsKKworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgICAgICAgICAgICAg IC8qIE1ha2Ugc3VyZSBjb25uZWN0aW9uIGlzIFRDUC9JUCAqLworICAgICAgcmV0dXJuKDApOwor LyoKKyAgICBpZiAoIUlTX1RFTE5FVCgpKQorICAgICAgcmV0dXJuKDApOworKi8KKyAgICBpZiAo dG5faW5pdCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIHdlIGRvbmUgdGhpcyBhbHJl YWR5PyAqLworICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0 IGRvIGl0IGFnYWluLiAqLworCisgICAgdG5fcmVzZXQoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmVzZXQgdGVsbmV0IHBhcmFtZXRlcnMgKi8KKyAgICB0bl9iZWd1biA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXNldDsgd2lsbCBiZSBzZXQgYnkgdG5fc3RhcnQoKSAqLwor CisgICAgc3dpdGNoICggdHRucHJvdG8gKSB7CisgICAgICBjYXNlIE5QX1JMT0dJTjoKKyAgICAg IGNhc2UgTlBfSzRMT0dJTjoKKyAgICAgIGNhc2UgTlBfRUs0TE9HSU46CisgICAgICBjYXNlIE5Q X0s1TE9HSU46CisgICAgICBjYXNlIE5QX0VLNUxPR0lOOgorICAgICAgY2FzZSBOUF9LNVUyVToK KyAgICAgICAgdG5faW5pdCA9IDE7CisgICAgICAgIGRlYnVnKEYxMDAsInRuX2luaSB0ZWxuZXQg bmVnb3RpYXRpb25zIGlnbm9yZWQiLCJ0bl9pbml0Iix0bl9pbml0KTsKKyAgICAgICAgcmV0dXJu KDApOworI2lmZGVmIENPTU1FTlQKKyAgICAgIC8qIEplZmYncyBjb2RlIGZyb20gMzAgRGVjIDIw MDUgLSBkb2Vzbid0IHdvcmsgd2l0aCBTU0wgUE9QIHNlcnZlciAqLworICAgICAgY2FzZSBOUF9O T05FOgorICAgICAgY2FzZSBOUF9TU0w6CisgICAgICBjYXNlIE5QX1RMUzoKKyAgICAgICAgdHRu cHJvdG8gPSBOUF9URUxORVQ7ICAgICAgICAgICAvKiBwcmV0ZW5kIGl0J3MgdGVsbmV0IGFueXdh eSwgKi8KKyAgICAgICAgb2xkcGxleCA9IGR1cGxleDsgICAgICAgICAgICAgICAvKiBzYXZlIG9s ZCBkdXBsZXggdmFsdWUgKi8KKyAgICAgICAgZHVwbGV4ID0gMTsgICAgICAgICAgICAgICAgICAg ICAvKiBhbmQgc2V0IHRvIGhhbGYgZHVwbGV4IGZvciB0ZWxuZXQgKi8KKyAgICAgICAgaWYgKGlu c2VydmVyKQorICAgICAgICAgIGRlYnVnKEYxMDAsInRuX2luaSBza2lwcGluZyB0ZWxuZXQgbmVn b3RpYXRpb25zIiwiIiwwKTsKKwllbHNlCisJICB0bl93YWl0KCJ0bl9pbmkgLSB3YWl0aW5nIHRv IHNlZSBpZiB0ZWxuZXQgbmVnb3RpYXRpb25zIHdlcmUgc2VudCIpOworCXRuX3B1c2goKTsKKyAg ICAgICAgcmV0dXJuKDApOworICAgICAgY2FzZSBOUF9TU0xfUkFXOgorICAgICAgY2FzZSBOUF9U TFNfUkFXOgorICAgICAgY2FzZSBOUF9UQ1BSQVc6ICAgICAgICAgICAgICAgICAgIC8qIFJhdyBz b2NrZXQgcmVxdWVzdGVkLiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9pbmkgdGVsbmV0IG5l Z290aWF0aW9ucyBpZ25vcmVkIiwidG5faW5pdCIsdG5faW5pdCk7CisgICAgICAgIHJldHVybigw KTsKKyNlbHNlCisgICAgICAvKiBNeSBjb2RlIGZyb20gNCBEZWMgMjAwNSAtIHdvcmtzIHdpdGgg U1NMIFBPUCBzZXJ2ZXIgKi8KKyAgICAgIGNhc2UgTlBfTk9ORToKKyAgICAgIGNhc2UgTlBfU1NM OgorICAgICAgY2FzZSBOUF9UTFM6ICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vdCB0YWxr aW5nIHRvIGEgdGVsbmV0IHBvcnQsICovCisgICAgICBjYXNlIE5QX1NTTF9SQVc6CQkJLyogU1NM IGFuZCBUTFMgd2l0aCBUZWxuZXQgKi8KKyAgICAgIGNhc2UgTlBfVExTX1JBVzoJCQkvKiBuZWdv dGlhdGlvbnMgZGlzYWJsZWQuICovCisgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOyAgICAg ICAgICAgLyogcHJldGVuZCBpdCdzIHRlbG5ldCBhbnl3YXksICovCisgICAgICAgIG9sZHBsZXgg PSBkdXBsZXg7ICAgICAgICAgICAgICAgLyogc2F2ZSBvbGQgZHVwbGV4IHZhbHVlICovCisgICAg ICAgIGR1cGxleCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHNldCB0byBoYWxmIGR1 cGxleCBmb3IgdGVsbmV0ICovCisgICAgICAgIGlmIChpbnNlcnZlcikKKyAgICAgICAgICBkZWJ1 ZyhGMTAwLCJ0bl9pbmkgc2tpcHBpbmcgdGVsbmV0IG5lZ290aWF0aW9ucyIsIiIsMCk7CisJZWxz ZQorCSAgdG5fd2FpdCgidG5faW5pIC0gd2FpdGluZyB0byBzZWUgaWYgdGVsbmV0IG5lZ290aWF0 aW9ucyB3ZXJlIHNlbnQiKTsKKwl0bl9wdXNoKCk7CisgICAgICAgIHJldHVybigwKTsKKyAgICAg IGNhc2UgTlBfVENQUkFXOiAgICAgICAgICAgICAgICAgICAvKiBSYXcgc29ja2V0IHJlcXVlc3Rl ZC4gKi8KKyAgICAgICAgZGVidWcoRjEwMCwidG5faW5pIHRlbG5ldCBuZWdvdGlhdGlvbnMgaWdu b3JlZCIsInRuX2luaXQiLHRuX2luaXQpOworICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYJLyog Q09NTUVOVCAqLworICAgICAgY2FzZSBOUF9LRVJNSVQ6ICAgICAgICAgICAgICAgICAgIC8qIHN3 aXRjaGluZyB0byBUZWxuZXQgcHJvdG9jb2wgKi8KKyAgICAgIGNhc2UgTlBfU1NMX1RFTE5FVDoK KyAgICAgIGNhc2UgTlBfVExTX1RFTE5FVDoKKyAgICAgICAgZGVidWcoRjEwMSwidG5faW5pIHN3 aXRjaGluZyBmcm9tIFhYWCB0byBUZWxuZXQiLCIiLHR0bnByb3RvKTsKKyAgICAgICAgdHRucHJv dG8gPSBOUF9URUxORVQ7CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgZGVmYXVs dDoKKyAgICAgICAgLyogV2UgYXJlIGFscmVhZHkgdXNpbmcgYSB2YXJpYXRpb24gb24gVGVsbmV0 IHByb3RvY29sICovCisgICAgICAgIDsKKyAgICB9CisKKyAgICB4ID0gdG5fc3RhcnQoKTsKKyAg ICB0bl9pbml0ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBzdWNjZXNz ZnVsIGNvbXBsZXRpb24uICovCisKKyAgICAvKiBEb24ndCBzZW5kIGFueXRoaW5nIGVsc2UhICov CisgICAgZGVidWcoRjEwMSwidG5faW5pIGR1cGxleCIsIiIsZHVwbGV4KTsKKyAgICBkZWJ1ZyhG MTAxLCJ0bl9pbmkgZG9uZSwgdG5faW5pdCIsIiIsdG5faW5pdCk7CisgICAgcmV0dXJuKHgpOwor fQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5faGV4KENIQVIgKiBidWYsIGludCBidWZsZW4s IENIQVIgKiBkYXRhLCBpbnQgZGF0YWxlbikKKyNlbHNlIC8qIENLX0FOU0lDICovCit0bl9oZXgo YnVmLCBidWZsZW4sIGRhdGEsIGRhdGFsZW4pCisgICAgQ0hBUiAqIGJ1ZjsKKyAgICBpbnQgYnVm bGVuOworICAgIENIQVIgKiBkYXRhOworICAgIGludCBkYXRhbGVuOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7CisgICAgaW50IGkgPSAwLCBqID0gMCwgayA9IDA7CisgICAgQ0hBUiB0bXBbMTZd OwkJLyogaW4gY2FzZSB2YWx1ZSBpcyB0cmVhdGVkIGFzIG5lZ2F0aXZlICovCisjaWZkZWYgQ09N TUVOVAorICAgIGludCB3YXNfaGV4ID0gMTsKKworICAgIGZvciAoaz0wOyBrIDwgZGF0YWxlbjsg aysrKSB7CisgICAgICAgIGlmIChkYXRhW2tdIDwgMzIgfHwgZGF0YVtrXSA+PSAxMjcpIHsKKyAg ICAgICAgICAgIHNwcmludGYodG1wLCIlcyUwMlggIix3YXNfaGV4PyIiOiJcIiAiLGRhdGFba10p OworICAgICAgICAgICAgd2FzX2hleCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBzcHJpbnRmKHRtcCwiJXMlYyIsd2FzX2hleD8iXCIiOiIiLGRhdGFba10pOworICAgICAgICAg ICAgd2FzX2hleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY2F0KChjaGFyICopYnVm LHRtcCxidWZsZW4pOworICAgIH0KKyAgICBpZiAoIXdhc19oZXgpCisgICAgICAgIGNrc3RybmNh dCgoY2hhciAqKWJ1ZiwiXCIgIixidWZsZW4pOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAgIGlm IChkYXRhbGVuIDw9IDAgfHwgZGF0YSA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMIHx8IGJ1ZmxlbiA8 PSAwKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YWxlbjsg aSsrKSB7CisgICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWJ1ZiwiXHJcbiAgIixidWZsZW4pOwor ICAgICAgICBmb3IgKGogPSAwIDsgKGogPCAxNik7IGorKykgeworICAgICAgICAgICAgaWYgKChp ICsgaikgPCBkYXRhbGVuKQorICAgICAgICAgICAgICBzcHJpbnRmKChjaGFyICopdG1wLAorICAg ICAgICAgICAgICAgICAgICAgICIlcyUwMnggIiwKKyAgICAgICAgICAgICAgICAgICAgICAoaiA9 PSA4ID8gInwgIiA6ICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBk YXRhW2kgKyBqXQorICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHNwcmludGYoKGNoYXIgKil0bXAsCisgICAgICAgICAgICAgICAgICAgICAg IiVzICAgIiwKKyAgICAgICAgICAgICAgICAgICAgICAoaiA9PSA4ID8gInwgIiA6ICIiKQorICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBja3N0cm5jYXQoKGNoYXIgKilidWYs KGNoYXIgKil0bXAsYnVmbGVuKTsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jYXQoKGNoYXIg KilidWYsIiAiLGJ1Zmxlbik7CisgICAgICAgIGZvciAoayA9IDA7IChrIDwgMTYpICYmICgoaSAr IGspIDwgZGF0YWxlbik7IGsrKykgeworICAgICAgICAgICAgc3ByaW50ZigoY2hhciAqKXRtcCwK KyAgICAgICAgICAgICAgICAgICAgICIlcyVjIiwKKyAgICAgICAgICAgICAgICAgICAgIChrID09 IDggPyAiICIgOiAiIiksCisgICAgICAgICAgICAgICAgICAgICBpc3ByaW50KChjaGFyKShkYXRh W2kra10pKSA/IGRhdGFbaStrXSA6ICcuJworICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgIGNrc3RybmNhdCgoY2hhciAqKWJ1ZiwoY2hhciAqKXRtcCxidWZsZW4pOworICAgICAg ICB9CisgICAgICAgIGkgKz0gaiAtIDE7CisgICAgfSAvKiBlbmQgZm9yICovCisgICAgY2tzdHJu Y2F0KChjaGFyICopYnVmLCJcclxuICAiLGJ1Zmxlbik7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIHJldHVybihzdHJsZW4oKGNoYXIgKilidWYpKTsKK30KKworVk9JRAordG5fZGVidWcocykg Y2hhciAqczsgeworI2lmZGVmIE5PTE9DQUwKKyAgICByZXR1cm47CisjZWxzZSAvKiBOT0xPQ0FM ICovCisjaWZkZWYgT1MyCisgICAgdm9pZCBjd3JpdGUodW5zaWduZWQgc2hvcnQpOworICAgIGNo YXIgKnAgPSBzOworICAgIF9QUk9UT1RZUCAodm9pZCBvczJib2xkLCAodm9pZCkpOworICAgIGV4 dGVybiBpbnQgdHRfdHlwZV9tb2RlOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKCEodG5f ZGViIHx8IGRlYnNlcykpCisgICAgICByZXR1cm47CisgICAgZGVidWcoRjExMSwidG5fZGVidWci LHMsd2hhdCk7CisjaWZkZWYgT1MyCisgICAgaWYgKDEpIHsKKyAgICAgICAgZXh0ZXJuIHVuc2ln bmVkIGNoYXIgY29sb3JjbWQ7CisgICAgICAgIGNvbG9yY21kIF49IDB4OCA7CisgICAgICAgIHBy aW50ZigiJXNcclxuIixzKTsKKyAgICAgICAgY29sb3JjbWQgXj0gMHg4IDsKKyAgICB9CisgICAg aWYgKCFzY3JuaW5pdGlhbGl6ZWRbVlRFUk1dKSB7CisgICAgICAgIFVTSE9SVCB4LHk7CisgICAg ICAgIGNoZWNrc2NyZWVubW9kZSgpOworICAgICAgICBHZXRDdXJQb3MoJnksICZ4KTsKKyAgICAg ICAgU2F2ZUNtZE1vZGUoeCsxLHkrMSk7CisgICAgICAgIHNjcm5pbml0KCk7CisgICAgICAgIFJl c3RvcmVDbWRNb2RlKCk7CisgICAgfQorCisgICAgaWYgKCBJU1ZUTlQodHRfdHlwZV9tb2RlKSAm JiB0dG51bSAhPSAtMSAmJiAhZGVic2VzICkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVxdWVz dFZzY3JuTXV0ZXgoIFZURVJNLCBTRU1fSU5ERUZJTklURV9XQUlUICkgOworCisgICAgb3MyYm9s ZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG9nZ2xlIGJvbGRuZXNzICovCisgICAg d2hpbGUgKCpwKQorICAgICAgY3dyaXRlKChDSEFSKSAqcCsrKTsgICAgICAgICAgICAgIC8qIEdv IGJvbGRseSAuLi4gKi8KKyAgICBvczJib2xkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBUb2dnbGUgYm9sZG5lc3MgYmFjayAqLworICAgIGlmIChkZWJzZXMpIHsKKyAgICAgICAgZGVi c2VzID0gMDsKKyAgICAgICAgY3dyaXRlKChDSEFSKSAnXDAxNScpOworICAgICAgICBjd3JpdGUo KENIQVIpICdcMDEyJyk7CisgICAgICAgIGRlYnNlcyA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgY3dyaXRlKChDSEFSKSAnXDAxNScpOworICAgICAgICBjd3JpdGUoKENIQVIpICdcMDEyJyk7 CisgICAgfQorICAgIFJlbGVhc2VWc2Nybk11dGV4KFZURVJNKSA7CisjZWxzZQorICAgIGlmICh3 aGF0ICE9IFdfQ09OTkVDVCAmJiB3aGF0ICE9IFdfRElBTElORyAmJiAKKyAgICAgICAgd2hhdCAh PSBXX0NPTU1BTkQgJiYgd2hhdCAhPSBXX05PVEhJTkcpCisgICAgICByZXR1cm47ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVC9jb21tYW5kIG11c3QgYmUgYWN0aXZlICovCisg ICAgY29ub2xsKHMpOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KK30K KworLyoKKyAgUHJvY2VzcyBpbi1iYW5kIFRlbG5ldCBuZWdvdGlhdGlvbiBjaGFyYWN0ZXJzIGZy b20gdGhlIHJlbW90ZSBob3N0LgorICBDYWxsIHdpdGggdGhlIHRlbG5ldCBJQUMgY2hhcmFjdGVy IGFuZCB0aGUgY3VycmVudCBkdXBsZXggc2V0dGluZworICAoMCA9IHJlbW90ZSBlY2hvLCAxID0g bG9jYWwgZWNobyksIGFuZCBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0byBjYWxsCisgIHRvIHJl YWQgbW9yZSBjaGFyYWN0ZXJzLiAgUmV0dXJuczoKKyAgICA2IGlmIERPIExPR09VVCB3YXMgcmVj ZWl2ZWQgYW5kIGFjY2VwdGVkCisgICAgNSBpZiB0aGUgS2VybWl0IHN0YXJ0IG9mIHBhY2tldCBj aGFyYWN0ZXIgaGFzIGNoYW5nZWQKKyAgICA0IGlmIHN0YXRlIG9mIHJlbW90ZSBJbnRlcm5ldCBL ZXJtaXQgU2VydmljZSBoYXMgY2hhbmdlZAorICAgIDMgaWYgYSBxdW90ZWQgSUFDIHdhcyByZWNl aXZlZAorICAgIDIgaWYgbG9jYWwgZWNobyBtdXN0IGJlIGNoYW5nZWQgdG8gcmVtb3RlCisgICAg MSBpZiByZW1vdGUgZWNobyBtdXN0IGJlIGNoYW5nZWQgdG8gbG9jYWwKKyAgICAwIGlmIG5vdGhp bmcgaGFwcGVucyBvciBubyBhY3Rpb24gbmVjZXNzYXJ5CisgICAtMSBvbiBmYWlsdXJlICg9IGlu dGVybmFsIG9yIGkvbyBlcnJvcikKKyovCisjaWZkZWYgSUtTX09QVElPTgoraW50Cit0bl9zaWtz KGNtZCkgaW50IGNtZDsgeyAgICAgICAgIC8qIFRFTE5FVCBTRU5EIElLUyBTVUIgKi8KKyAgICBD SEFSIGJ1Zls4XTsKKyNpZm5kZWYgTk9YRkVSCisgICAgZXh0ZXJuIENIQVIgbXlzdGNoOyAgICAg ICAgICAgICAgICAgLyogT3V0Z29pbmcgU3RhcnQgb2YgUGFja2V0IENoYXIgKi8KKyNlbHNlCisg ICAgQ0hBUiBteXN0Y2ggPSAnXDEnOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIGludCBuLG0s cmM7CisKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsgICAvKiBNdXN0IGJl IFRDUC9JUCAqLworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsgLyog TXVzdCBiZSB0ZWxuZXQgcHJvdG9jb2wgKi8KKworICAgIGlmIChjbWQgPCBLRVJNSVRfU1RBUlQg fHwgY21kID4gS0VSTUlUX1JFU1BfU1RPUCkgLyogSWxsZWdhbCBzdWJjb21tYW5kICovCisgICAg ICByZXR1cm4oLTEpOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRf U1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIGlmIChjbWQgPT0gS0VSTUlUX1NUQVJUIHx8 IGNtZCA9PSBLRVJNSVRfUkVTUF9TVEFSVCkgeworICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMTsKKyAgICB9IGVsc2UgaWYgKGNtZCA9PSBLRVJNSVRf U1RPUCB8fCBjbWQgPT0gS0VSTUlUX1JFU1BfU1RPUCkgeworICAgICAgICBURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ID0gMDsKKyAgICB9IGVsc2UgaWYgKGNtZCA9PSBL RVJNSVRfUkVRX1NUT1ApCisgICAgICBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1l X3JlcV9zdG9wID0gMTsKKyAgICBlbHNlIGlmIChjbWQgPT0gS0VSTUlUX1JFUV9TVEFSVCkKKyAg ICAgIFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfcmVxX3N0YXJ0ID0gMTsKKwor ICAgIGlmIChjbWQgPT0gS0VSTUlUX1NPUCkgeworICAgICAgICBidWZbMF0gPSAoQ0hBUikgSUFD OworICAgICAgICBidWZbMV0gPSAoQ0hBUikgU0I7CisgICAgICAgIGJ1ZlsyXSA9IChDSEFSKSBU RUxPUFRfS0VSTUlUOworICAgICAgICBidWZbM10gPSAoQ0hBUikgKGNtZCAmIDB4ZmYpOworICAg ICAgICBidWZbNF0gPSAoQ0hBUikgbXlzdGNoOworICAgICAgICBidWZbNV0gPSAoQ0hBUikgSUFD OworICAgICAgICBidWZbNl0gPSAoQ0hBUikgU0U7CisgICAgICAgIGJ1Zls3XSA9IChDSEFSKSAw OworI2lmZGVmIERFQlVHCisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzIHx8IGRlYmxvZykK KyAgICAgICAgICAgIGNrbWFrbXNnKCB0bl9tc2dfb3V0LFROX01TR19MRU4sIlRFTE5FVCBTRU5U IFNCIEtFUk1JVCBTT1AgIiwKKyAgICAgICAgICAgICAgICAgICAgICBja2N0b3gobXlzdGNoLDEp LCIgSUFDIFNFIixOVUxMKTsKKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgICAg ICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lm ZGVmIERFQlVHCisgICAgICAgIGRlYnVnKEYxMDEsdG5fbXNnX291dCwiIixjbWQpOworICAgICAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyog REVCVUcgKi8KKyAgICAgICAgcmMgPSAoIHR0b2woYnVmLDcpIDwgNyApOyAgICAgICAgICAgICAg ICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgo KTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2Ug eworICAgICAgICBidWZbMF0gPSAoQ0hBUikgSUFDOworICAgICAgICBidWZbMV0gPSAoQ0hBUikg U0I7CisgICAgICAgIGJ1ZlsyXSA9IChDSEFSKSBURUxPUFRfS0VSTUlUOworICAgICAgICBidWZb M10gPSAoQ0hBUikgKGNtZCAmIDB4ZmYpOworICAgICAgICBidWZbNF0gPSAoQ0hBUikgSUFDOwor ICAgICAgICBidWZbNV0gPSAoQ0hBUikgU0U7CisgICAgICAgIGJ1Zls2XSA9IChDSEFSKSAwOwor CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSB7 CisgICAgICAgICAgICBjaGFyICogcyA9IDA7CisgICAgICAgICAgICBzd2l0Y2ggKGNtZCkgewor ICAgICAgICAgICAgICBjYXNlIEtFUk1JVF9TVEFSVDogcyA9ICJTVEFSVCI7IGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIEtFUk1JVF9TVE9QOiBzID0gIlNUT1AiOyBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSBLRVJNSVRfUkVRX1NUQVJUOiBzID0gIlJFUS1TVEFSVCI7IGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIEtFUk1JVF9SRVFfU1RPUDogcyA9ICJSRVEtU1RPUCI7IGJyZWFrOwor ICAgICAgICAgICAgICBjYXNlIEtFUk1JVF9SRVNQX1NUQVJUOiBzID0gIlJFU1AtU1RBUlQiOyBi cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBLRVJNSVRfUkVTUF9TVE9QOiAgcyA9ICJSRVNQLVNU T1AiOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNrbWFrbXNnKCB0bl9tc2df b3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCIGtl cm1pdCAiLHMsIiBJQUMgU0UiLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyNpZmRlZiBPUzIKKyAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9X QUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgICAgICBkZWJ1ZyhGMTAxLHRuX21zZ19v dXQsIiIsY21kKTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21z Z19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgIHJjID0gKCB0dG9sKGJ1Ziw2KSA8 IDYgKTsgICAgICAgICAgICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICAgICAg UmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIElLU19P UFRJT04gKi8KKworLyogdG5fc2IoKSBwZXJmb3JtcyBUZWxuZXQgU3VibmVnb3RpYXRpb24gUGFy c2luZyBhbmQgRGVidWdnaW5nICovCisvKiByZXR1cm5zIDw9IDAgb24gZXJyb3IsIDEgb24gc3Vj Y2VzcyAqLworLyogdGhlIGxlbmd0aCByZXR1cm5lZCBpbmNsdWRlcyB0aGUgSUFDIFNFIGJ5dGVz ICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRF TE5FVCBTQiAqLwordG5fc2IoIGludCBvcHQsIGludCAqIGxlbiwgaW50ICgqZm4pKGludCkgKQor I2Vsc2UKK3RuX3NiKCBvcHQsIGxlbiwgZm4gKSBpbnQgb3B0OyBpbnQgKiBsZW47IGludCAoKmZu KSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bl9zYiAqLyB7CisgICAgaW50IGMsIHgs IHksIG4sIG0sIGZsYWc7CisgICAgLyogaWYgKCFJU19URUxORVQoKSkgcmV0dXJuKDEpOyAqLwor CisgICAgZGVidWcoRjEwMCwiRW50ZXJpbmcgdG5fc2IoKSIsIiIsMCk7CisgICAgKmxlbiA9IDA7 ICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgTGVuIHRvIDAgKi8KKyAgICBuID0gZmxh ZyA9IDA7ICAgICAgICAgICAgICAgLyogRmxhZyBmb3Igd2hlbiBkb25lIHJlYWRpbmcgU0IgKi8K KyAgICB3aGlsZSAobiA8IFRTQlVGU0laKSB7ICAgICAgLyogTG9vcCBsb29raW5nIGZvciBJQUMg U0UgKi8KKyAgICAgICAgaWYgKCh5ID0gKCpmbikoMCkpIDwgMCkgLyogUmVhZCBhIGJ5dGUgKi8K KyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIHkgJj0gMHhmZjsgICAgICAgICAgICAgIC8q IE1ha2Ugc3VyZSBpdCdzIGp1c3QgOCBiaXRzLiAqLworICAgICAgICBzYltuKytdID0gKGNoYXIp IHk7ICAgICAvKiBEZXBvc2l0IGluIGJ1ZmZlci4gKi8KKyAgICAgICAgaWYgKHNlc2xvZyAmJiBz ZXNzZnQgPT0gWFlGVF9EKSB7IC8qIFRha2UgY2FyZSBvZiBzZXNzaW9uIGxvZyAqLworICAgICAg ICAgICAgbG9nY2hhcigoY2hhcikgeSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPT0gSUFD KSB7ICAgICAgICAgLyogSWYgdGhpcyBpcyBhbiBJQUMgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIGlmIChmbGFnKSB7ICAgICAgICAgLyogSWYgcHJldmlvdXMgY2hhciB3YXMgSUFDICAg ICAgICAgKi8KKyAgICAgICAgICAgICAgICBuLS07ICAgICAgICAgICAgLyogaXQncyBxdW90ZWQs IGtlZXAgb25lIElBQyAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBmbGFnID0gMDsgICAgICAg LyogYW5kIHR1cm4gb2ZmIHRoZSBmbGFnLiAgICAgICAgICAgKi8KKyAgICAgICAgICAgIH0gZWxz ZSBmbGFnID0gMTsgICAgLyogT3RoZXJ3aXNlIHNldCB0aGUgZmxhZy4gICAgICAgICAgKi8KKyAg ICAgICAgfSBlbHNlIGlmIChmbGFnKSB7ICAgICAgLyogU29tZXRoaW5nIGVsc2UgZm9sbG93aW5n IElBQyAgICAgKi8KKyAgICAgICAgICAgIGlmICh5ID09IFNFKSAgICAgICAgLyogSWYgbm90IFNF LCBpdCdzIGEgcHJvdG9jb2wgZXJyb3IgKi8KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBlbHNlIGlmICh5ID09IERPTlQpIHsgLyogVXNlZCBET05UIGluc3RlYWQgb2YgU0UgKi8K KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLAorICAgICAgICAgICAgICAgICAgICAgICJURUxO RVQgU3VibmVnb3RpYXRpb24gZXJyb3IgLSB1c2VkIERPTlQgaW5zdGVhZCBvZiBTRSEiLAorICAg ICAgICAgICAgICAgICAgICAgICIiCisgICAgICAgICAgICAgICAgICAgICAgLDAKKyAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQor ICAgICAgICAgICAgICAgICAgdG5fZGVidWcoCisgICAgICAgICAgICAgICAgICAgICAiVEVMTkVU IFN1Ym5lZ290aWF0aW9uIGVycm9yIC0gdXNlZCBET05UIGluc3RlYWQgb2YgU0UhIik7CisgICAg ICAgICAgICAgICAgZmxhZyA9IDM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgIC8qIE90aGVyIHByb3RvY29sIGVycm9yICovCisgICAgICAg ICAgICAgICAgZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKworI2lmZGVmIENLX0ZPUldBUkRfWAorICAgICAgICBpZiAoIG9wdCA9PSBU RUxPUFRfRk9SV0FSRF9YICYmIHNiWzBdID09IEZXRFhfREFUQSAmJgorICAgICAgICAgICAgIG4g Pj0gKFRTQlVGU0laLTQpICYmICFmbGFnICkgeworICAgICAgICAgICAgLyogZG8gbm90IGxldCB0 aGUgYnVmZmVyIG92ZXIgZmxvdyAqLworICAgICAgICAgICAgLyogd3JpdGUgdGhlIGRhdGEgdG8g dGhlIGNoYW5uZWwgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgKi8KKyAgICAgICAgICAgIC8qIHRo ZSBpbmNvbWluZyBkYXRhIHVudGlsIElBQyBTRSBpcyByZWFjaGVkLiAqLworICAgICAgICAgICAg c2JbbisrXSA9IElBQzsKKyAgICAgICAgICAgIHNiW24rK10gPSBTRTsKKworI2lmZGVmIERFQlVH CisgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkgeworICAgICAg ICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgIGNrbWFrbXNnKCB0bl9tc2csVE5fTVNH X0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBSQ1ZEIFNCICIsVEVMT1BU KG9wdCksCisJCQkgICIgREFUQShidWZmZXItZnVsbCkgIixOVUxMKTsKKyAgICAgICAgICAgICAg ICB0bl9oZXgoKENIQVIgKil0bl9tc2csVE5fTVNHX0xFTiwmc2JbMV0sbi0zKTsKKyAgICAgICAg ICAgICAgICBpZiAoZmxhZyA9PSAyKQorICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5f bXNnLCIgU0UiLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWcgPT0g MykKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiIElBQyBET05UIixUTl9N U0dfTEVOKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNrc3Ry bmNhdCh0bl9tc2csIiBJQUMgU0UiLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KQorICAgICAgICAgICAgICAgICAgICB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICAgICAgfQor I2VuZGlmIC8qIERFQlVHICovCisKKyAgICAgICAgICAgIGlmICggZndkeF90bl9zYihzYixuKSA8 IDAgKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiZnhkeF90bl9zYigpIGZhaWxlZCIs IiIsMCk7CisgICAgICAgICAgICAgICAgLyogV2UgY2FuJ3QgcmV0dXJuIHRob3VnaCBiZWNhdXNl IHRoYXQgd291bGQgbGVhdmUgICovCisgICAgICAgICAgICAgICAgLyogZGF0YSB0byBiZSBmb3J3 YXJkZWQgaW4gdGhlIHF1ZXVlIHRvIHRoZSBiZSBzZW50ICovCisgICAgICAgICAgICAgICAgLyog dG8gdGhlIHRlcm1pbmFsIGVtdWxhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAg ICAgICAgICB9CisgICAgICAgICAgICAvKiByZXNldCBsZWF2ZSB0aGUgbXNnIHR5cGUgYW5kIGNo YW5uZWwgbnVtYmVyIGluIHBsYWNlICovCisgICAgICAgICAgICBuID0gMzsKKyAgICAgICAgfQor I2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bl9zYiBl bmQgb2Ygd2hpbGUgbG9vcCIsImZsYWciLGZsYWcpOworICAgIGlmICghZmxhZykgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBnb3QgYSB2YWxpZCBTQiAqLworICAgICAg ICBkZWJ1ZyhGMTExLCAiVEVMTkVUIFN1Ym5lZ290aWF0aW9uIHByZW1hdHVyZWx5IGJyb2tlbiIs Im9wdCIsb3B0KTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgICAg IGNrbWFrbXNnKCB0bl9tc2csIFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAgICAgIlRF TE5FVCAiLCBURUxPUFQob3B0KSwKKyAgICAgICAgICAgICAgICAgICAgICAiIFN1Ym5lZ290aWF0 aW9uIHByZW1hdHVyZWx5IGJyb2tlbiIsTlVMTAorICAgICAgICAgICAgICAgICAgICAgICk7CisK KyAgICAgICAgICB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICB9CisgICAgICAgIC8qIFdhcyAt MSBidXQgdGhhdCB3b3VsZCBiZSBhbiBJL08gZXJyb3IsIHNvIGFic29yYiBpdCBhbmQgZ28gb24u ICovCisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGNoYXIg KiBzWzE2XTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgICAgICAgc1tp XSA9ICIiOworICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9OQVdTKSB7CisgICAgICAgICAgICBp ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAg c1swXSA9ICJVTktOT1dOIjsKKworICAgICAgICAgICAgc3dpdGNoIChzYlswXSkgeworICAgICAg ICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgaWYgKG9wdCA9PSBURUxPUFRfRk9SV0FS RF9YKQorICAgICAgICAgICAgICAgICAgc1swXSA9ICJTQ1JFRU4iOworICAgICAgICAgICAgICAg IGVsc2UgaWYgKG9wdCA9PSBURUxPUFRfS0VSTUlUKQorICAgICAgICAgICAgICAgICAgc1swXSA9 ICJTVEFSVCI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0ID09IFRFTE9QVF9MRkxPVykK KyAgICAgICAgICAgICAgICAgIHNbMF0gPSAiT0ZGIjsKKyAgICAgICAgICAgICAgICBlbHNlIGlm IChvcHQgPT0gVEVMT1BUX0NPTVBPUlQpCisgICAgICAgICAgICAgICAgICBzWzBdID0gIlNJR05B VFVSRSI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc1swXSA9ICJJ UyI7CisgICAgICAgICAgICAgICAgaWYgKG9wdCA9PSBURUxPUFRfRU5DUllQVElPTikgeworICAg ICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChzYlsxXSA8IEVO Q1RZUEVfQ05UKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzWzFdID0gZW5jdHlwZV9uYW1l c1tzYlsxXV07CisgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAg ICAgICAgICBzd2l0Y2goc2JbMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAx OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9JViI7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZCNjRfSVZfT0siOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1syXSA9ICJGQjY0X0lW X0JBRCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0g IkZCNjRfQ0hBTExFTkdFIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNbMl0gPSAiRkI2NF9SRVNQT05TRSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzWzFdID0gIlVOS05PV04iOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChv cHQgPT0gVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSB7CisgICAgICAgICAgICAgICAgICAgIGkgKz0g MjsKKyAgICAgICAgICAgICAgICAgICAgc1sxXSA9IEFVVEhUWVBFX05BTUUoc2JbMV0pOworICAg ICAgICAgICAgICAgICAgICBzWzJdID0gQVVUSE1PREVfTkFNRShzYlsyXSk7CisgICAgICAgICAg ICAgICAgICAgIGlmIChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAg ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlszXSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsx XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIk5UTE1fQVVUSCI7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9 ICJBVVRIIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX1NTTDoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc1szXSA9ICJTVEFSVCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9O VExNOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIk5UTE1fQ0hBTExF TkdFIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzWzNdID0gIlJFSkVDVCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIk5UTE1fUkVTUE9OU0UiOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAi QUNDRVBUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9BQ0NFUFQiOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTog ICAvKiBLRVJCRVJPU192NCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1 OiAgIC8qIFNSUCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkNI QUxMRU5HRSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgIC8qIEtFUkJFUk9TX3Y1ICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUkVTUE9OU0UiOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgQVVUSFRZUEVfU1NMOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz WzNdID0gIlJFSkVDVCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgQVVUSFRZUEVfTlRMTToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc1szXSA9ICJOVExNX1JFSkVDVCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgIC8qIEtFUkJF Uk9TX1Y0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6ICAgLyogU1JQ ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiUkVTUE9OU0UiOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgMjogICAvKiBLRVJCRVJPU19WNSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzWzNdID0gIkZPUldBUkQiOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6ICAgLyogU1JQICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiRk9SV0FSRCI7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSAyOiAgIC8qIEtFUkJFUk9TX1Y1ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNbM10gPSAiRk9SV0FSRF9BQ0NFUFQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIDU6ICAgLyogU1JQICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNbM10gPSAiRk9SV0FSRF9BQ0NFUFQiOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug MjogLyogS0VSQkVST1NfVjUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1sz XSA9ICJGT1JXQVJEX1JFSkVDVCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgNTogICAvKiBTUlAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc1szXSA9ICJGT1JXQVJEX1JFSkVDVCI7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAv KiBLRVJCRVJPU19WNSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0g IlRMU19WRVJJRlkiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgNTogLyogU1JQICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNbM10gPSAiRVhQIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSA1OiAvKiBTUlAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c1szXSA9ICJQQVJBTVMiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgeworICAgICAgICAgICAg ICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgorICAgICAgICAgICAgICAgICAgICBzWzBdID0g Ik9QRU4iOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgVEVMT1BUX0xGTE9XOgorICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk9OIjsKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJN SVQ6CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU1RPUCI7CisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAg ICAgICAgICAgICAgICAgc1swXSA9ICJTRVQtQkFVRFJBVEUiOworICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQVVUSEVOVElDQVRJT046 CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU0VORCI7CisgICAgICAgICAgICAgICAgICAg IGhleGJ1ZlswXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbi0yOyBp ICs9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggQVVUSFRZUEVfTkFNRV9PSyhz YltpXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRV9PSyhz YltpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coIHRuX21zZywgVE5f TVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVf TkFNRShzYltpXSksIiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB VVRITU9ERV9OQU1FKHNiW2krMV0pLCIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg ICAgICAgICAgICBja21ha3htc2codG5fbXNnLCBUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShzYltpXSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiPSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBja2l0b2Eoc2JbaV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFN RShzYltpKzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI9IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShzYltpKzFdKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoaGV4 YnVmLHRuX21zZyxzaXplb2YoaGV4YnVmKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgc1sxXSA9IGhleGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046CisgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU1VQUE9SVCI7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChp IDwgbi0yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzW2ldID0gZW5jdHlwZV9uYW1lc1tz YltpXV07CisgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX1NUQVJUX1RMUzoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJGT0xMT1dTIjsK KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgICAgICAgICBzWzBdID0gIlNFTkQiOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAg ICAgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJE X1g6CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiQ0xPU0UiOworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0xGTE9XOgorICAgICAg ICAgICAgICAgICAgICBzWzBdID0gIlJFU1RBUlQtQU5ZIjsKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiUkVRLVNUQVJUIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAgICAg ICAgICBzWzBdID0gIlNFVC1EQVRBU0laRSI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfTkVXRU5WSVJPTjoKKyAgICAgICAgICAgICAg ICAgICAgc1swXSA9ICJJTkZPIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9BVVRIRU5USUNBVElPTjoKKyAgICAgICAgICAgICAgICAg ICAgc1swXSA9ICJSRVBMWSI7CisgICAgICAgICAgICAgICAgICAgIGk9NDsKKyAgICAgICAgICAg ICAgICAgICAgc1sxXSA9IEFVVEhUWVBFX05BTUUoc2JbMV0pOworICAgICAgICAgICAgICAgICAg ICBzWzJdID0gQVVUSE1PREVfTkFNRShzYlsyXSk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj aCAoc2JbM10pIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKHNiWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgQVVUSFRZUEVfTlRMTToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIk5U TE1fQVVUSCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1sz XSA9ICJBVVRIIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAg ICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBBVVRIVFlQRV9OVExNOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAi TlRMTV9DSEFMTEVOR0UiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNbM10gPSAiUkVKRUNUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAg ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNbM10gPSAiTlRMTV9SRVNQT05TRSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc1szXSA9ICJBQ0NFUFQiOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIEFVVEhUWVBFX05UTE06CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc1szXSA9ICJOVExNX0FDQ0VQVCI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVS T1NfVjQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfU1JQOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiQ0hBTExFTkdFIjsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBB VVRIVFlQRV9LRVJCRVJPU19WNToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0g IlJFU1BPTlNFIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo c2JbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbM10gPSAiTlRMTV9SRUpFQ1QiOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y0OgorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IEFVVEhUWVBFX1NSUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlJFU1BP TlNFIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzWzNdID0gIkZPUldBUkQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAg ICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IEFVVEhUWVBFX1NSUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkZPUldB UkQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y1OgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNbM10gPSAiRk9SV0FSRF9BQ0NFUFQiOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAg ICAgICAgICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIEFVVEhUWVBFX1NSUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0g IkZPUldBUkRfQUNDRVBUIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIkZPUldBUkRfUkVKRUNUIjsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug NzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9TUlA6CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc1szXSA9ICJGT1JXQVJEX1JFSkVDVCI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVS T1NfVjU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1szXSA9ICJUTFNfVkVSSUZZIjsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgODoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2JbMV0pIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBVVRIVFlQRV9TUlA6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc1szXSA9ICJFWFAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgICAg ICAgICAgICAgc3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl IEFVVEhUWVBFX1NSUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzNdID0gIlBBUkFN UyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgVEVMT1BUX0VOQ1JZUFRJT046CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVQTFki OworICAgICAgICAgICAgICAgICAgICBzWzFdID0gZW5jdHlwZV9uYW1lc1tzYlsxXV07CisgICAg ICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzYlsyXSkg eworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAg IGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9JViI7CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Cisg ICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICBzWzJd ID0gIkZCNjRfSVZfT0siOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAg ICAgICAgICAgICAgICAgICAgICAgc1syXSA9ICJGQjY0X0lWX0JBRCI7CisgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg ICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICBzWzJdID0gIkZC NjRfQ0hBTExFTkdFIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHNbMl0gPSAiRkI2NF9SRVNQT05TRSI7CisgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgeworICAg ICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgorICAgICAgICAgICAgICAgICAg ICBzWzBdID0gIkRBVEEiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgIGNhc2UgVEVMT1BUX0xGTE9XOgorICAgICAgICAgICAgICAgICAgICBzWzBdID0gIlJF U1RBUlQtWE9OIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVRLVNU T1AiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJTRVQtUEFSSVRZ IjsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0FVVEhFTlRJQ0FUSU9OOgorICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk5BTUUi OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVM T1BUX0VOQ1JZUFRJT046CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU1RBUlQiOworICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBzd2l0Y2gg KG9wdCkgeworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgorICAgICAg ICAgICAgICAgICAgICBzWzBdID0gIk9QVElPTlMiOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0tFUk1JVDoKKyAgICAgICAgICAgICAg ICAgICAgc1swXSA9ICJTT1AiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAgICAgc1sw XSA9ICJTRVQtU1RPUFNJWkUiOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKKyAgICAgICAgICAgICAgICAgICAg c1swXSA9ICJFTkQiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNToKKyAgICAg ICAgICAgICAgICBzd2l0Y2ggKG9wdCkgeworICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0ZP UldBUkRfWDoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJPUFRJT05fREFUQSI7CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZ UFRJT046CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVRVUVTVC1TVEFSVCI7CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBP UlQ6CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU0VULUNPTlRST0wiOworICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkg eworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgorICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIlhPRkYiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046CisgICAgICAgICAgICAgICAgICAg IHNbMF0gPSAiUkVRVUVTVC1FTkQiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAgICAg c1swXSA9ICJOT1RJRlktTElORVNUQVRFIjsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSA3OgorICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICAg ICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAi WE9OIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl IFRFTE9QVF9FTkNSWVBUSU9OOgorICAgICAgICAgICAgICAgICAgICBzWzBdID0gIkVOQy1LRVlJ RCI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBU RUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAgICAgICAgICBzWzBdID0gIk5PVElGWS1NT0RF TVNUQVRFIjsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA4OgorICAgICAg ICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9L RVJNSVQ6CisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVTUC1TVEFSVCI7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQ VElPTjoKKyAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJERUMtS0VZSUQiOworICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6 CisgICAgICAgICAgICAgICAgICAgICAgc1swXSA9ICJGTE9XQ09OVFJPTC1TVVNQRU5EIjsKKyAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgICAgIHN3 aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisgICAg ICAgICAgICAgICAgICAgIHNbMF0gPSAiUkVTUC1TVE9QIjsKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAg ICAgICAgICAgICAgIHNbMF0gPSAiRkxPV0NPTlRST0wtUkVTVU1FIjsKKyAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0 KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIlNFVC1MSU5FU1RBVEUtTUFTSyI7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQpIHsKKyAg ICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgICAgICAg ICAgc1swXSA9ICJTRVQtTU9ERU1TVEFURS1NQVNLIjsKKyAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAg ICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAgICAgICAgICAg IHNbMF0gPSAiUFVSR0UtREFUQSI7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKworCisgICAgICAgICAg ICBjYXNlIDEwMDoKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAg ICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAgICAgICAgICAgIHNbMF0g PSAiU19TSUdOQVRVUkUiOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDEw MToKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgICBj YXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQt QkFVRFJBVEUiOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDEwMjoKKyAg ICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRF TE9QVF9DT01QT1JUOgorICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQtREFUQVNJ WkUiOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDEwMzoKKyAgICAgICAg ICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9D T01QT1JUOgorICAgICAgICAgICAgICAgICAgICAgIHNbMF0gPSAiU19TRVQtUEFSSVRZIjsKKyAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxMDQ6CisgICAgICAgICAgICAgICAg ICBzd2l0Y2ggKG9wdCkgeworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoK KyAgICAgICAgICAgICAgICAgICAgICBzWzBdID0gIlNfU0VULVNUT1BTSVpFIjsKKyAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxMDU6CisgICAgICAgICAgICAgICAgICBzd2l0 Y2ggKG9wdCkgeworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAg ICAgICAgICAgICAgICAgICBzWzBdID0gIlNfU0VULUNPTlRST0wiOworICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBjYXNlIDEwNjoKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0 KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAg ICAgICAgICAgIHNbMF0gPSAiU19OT1RJRlktTElORVNUQVRFIjsKKyAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgY2FzZSAxMDc6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkg eworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIlNfTk9USUZZLU1PREVNU1RBVEUiOworICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICBjYXNlIDEwODoKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0KSB7 CisgICAgICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9DT01QT1JUOgorICAgICAgICAgICAgICAg ICAgICAgIHNbMF0gPSAiU19GTE9XQ09OVFJPTC1TVVNQRU5EIjsKKyAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgY2FzZSAxMDk6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkg eworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIlNfRkxPV0NPTlRST0wtUkVTVU1FIjsKKyAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgY2FzZSAxMTA6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkg eworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIlNfU0VULUxJTkVTVEFURS1NQVNLIjsKKyAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgY2FzZSAxMTE6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdCkg eworICAgICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgICAg ICAgICAgICBzWzBdID0gIlNfU0VULU1PREVNU1RBVEUtTUFTSyI7CisgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIGNhc2UgMTEyOgorICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHQp IHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAg ICAgICAgICAgc1swXSA9ICJTX1BVUkdFLURBVEEiOworICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIE1fWEVOSVgKKyAgICAgICAgeworICAgICAg ICAgIGludCBsZW4sIHBhcmFtLCBwYXJhbV9sZW47CisgICAgICAgICAgY2ttYWttc2coIHRuX21z ZywgVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBSQ1ZEIFNCICIsCisg ICAgICAgICAgICAgICAgICAgIFRFTE9QVChvcHQpLCIgIixOVUxMKTsKKyAgICAgICAgICBsZW4g PSBzdHJsZW4odG5fbXNnKTsKKyAgICAgICAgICBmb3IgKHBhcmFtID0gMDsgcGFyYW0gPD0gMTU7 IHBhcmFtKyspIHsKKyAgICAgICAgICAgIHBhcmFtX2xlbiA9IHN0cmxlbihzW3BhcmFtXSk7Cisg ICAgICAgICAgICBpZiAocGFyYW1fbGVuID4gMCkgeworICAgICAgICAgICAgICBzdHJjcHkoJnRu X21zZ1tsZW5dLCBzW3BhcmFtXSk7CisgICAgICAgICAgICAgIGxlbiArPSBwYXJhbV9sZW47Cisg ICAgICAgICAgICAgIHRuX21zZ1tsZW4rK10gPSAnICc7CisgICAgICAgICAgICB9CisgICAgICAg ICAgfQorICAgICAgICAgIHRuX21zZ1tsZW5dID0gJ1wwJzsKKyAgICAgICAgfQorI2Vsc2UgLyog TV9YRU5JWCAqLworICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sIlRFTE5FVCBS Q1ZEIFNCICIsVEVMT1BUKG9wdCksIiAiLAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICB7CisgICAgICAgICAg ICBpbnQgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAg ICAgICAgICAgaWYgKHNbaV1bMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRu X21zZyxzW2ldLFROX01TR19MRU4pOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5f bXNnLCIgIixUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBNX1hFTklYICovCisgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRu X21zZyxUTl9NU0dfTEVOLCZzYltpXSxuLTItaSk7CisgICAgICAgIGlmIChmbGFnID09IDIpCisg ICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiIFNFIixUTl9NU0dfTEVOKTsKKyAgICAgICAgZWxz ZSBpZiAoZmxhZyA9PSAzKQorICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIiBJQUMgRE9OVCIs VE5fTVNHX0xFTik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCIg SUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7Cisg ICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgIHRuX2RlYnVnKHRuX21zZyk7 CisgICAgfQorICAgIGRlYnVnKEYxMTEsInRuX3NiIiwibGVuIixuKTsKKyNlbmRpZiAvKiBERUJV RyAqLworICAgICpsZW4gPSBuOyAgICAgICAgICAgLyogcmV0dXJuIGxlbmd0aCAqLworICAgIHJl dHVybigxKTsgICAgICAgICAgLyogc3VjY2VzcyAqLworfQorCitzdGF0aWMgY2hhciByb3dzX2J1 ZlsxNl0gPSB7IDAsIDAgfTsgLyogTElORVMgRW52aXJvbm1lbnQgdmFyaWFibGUgKi8KK3N0YXRp YyBjaGFyIGNvbHNfYnVmWzE2XSA9IHsgMCwgMCB9OyAvKiBDT0xVTU5TIEVudmlvcm5tZW50IHZh cmlhYmxlICovCitzdGF0aWMgY2hhciB0ZXJtX2J1Zls2NF0gPSB7IDAsIDAgfTsgLyogVEVSTSBF bnZpcm9ubWVudCB2YXJpYWJsZSAqLworCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZuZGVmIFZNUwor I2lmbmRlZiBDT0hFUkVOVAorX1BST1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikp OworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZWxzZQorI2lmZGVmIF9fREVDQworX1BST1RPVFlQ KGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikpOworI2VuZGlmIC8qIF9fREVDQyAqLworI2Vu ZGlmIC8qIFZNUyAqLworZXh0ZXJuIGNoYXIgKiB0cm1idWY7ICAgICAgICAgICAgICAgICAgIC8q IFJlYWwgY3Vyc2VzICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKyNpZmRlZiBDS19FTkNS WVBUSU9OCitzdGF0aWMgaW50Cit0bl9ub19lbmNyeXB0KCkKK3sKKyAgICAvKiBQcmV2ZW50IEVu Y3J5cHRpb24gZnJvbSBiZWluZyBuZWdvdGlhdGVkICovCisgICAgVEVMT1BUX01FX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5D UllQVElPTikgPSBUTl9OR19SRjsKKworICAgIC8qIENhbmNlbCBhbnkgbmVnb3RpYXRpb24gdGhh dCBtaWdodCBoYXZlIHN0YXJ0ZWQgKi8KKyAgICBja190bl9lbmNfc3RvcCgpOworCisgICAgaWYg KFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikgfHwKKyAgICAgICAgIFRFTE9QVF9VTkFOU1dF UkVEX1dJTEwoVEVMT1BUX0VOQ1JZUFRJT04pKSB7CisgICAgICAgIFRFTE9QVF9NRShURUxPUFRf RU5DUllQVElPTikgPSAwOworICAgICAgICBpZiAodG5fc29wdChXT05ULFRFTE9QVF9FTkNSWVBU SU9OKSA8IDApCisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxPUFRfVU5BTlNX RVJFRF9XT05UKFRFTE9QVF9FTkNSWVBUSU9OKSA9IDE7CisgICAgfQorICAgIGlmIChURUxPUFRf VShURUxPUFRfRU5DUllQVElPTikgfHwKKyAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRF TE9QVF9FTkNSWVBUSU9OKSkgeworICAgICAgICBURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikg PSAwOworICAgICAgICBpZiAodG5fc29wdChET05ULFRFTE9QVF9FTkNSWVBUSU9OKSA8IDApCisg ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ET05UKFRF TE9QVF9FTkNSWVBUSU9OKSA9IDE7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisKKy8qIFRoZSBmb2xsb3dpbmcgbm90ZSBjYW1lIGZyb20gdGhl IG9sZCBTR0EgbmVnb3RpYXRpb24gY29kZS4gIFRoaXMgc2hvdWxkICovCisvKiBubyBsb25nZXIg YmUgbmVjZXNzYXJ5IHdpdGggdGhlIE5ldyBUZWxuZXQgbmVnb3RpYXRpb24gc3RhdGUgbWFjaGlu ZS4gICAqLworLyoKKyAgTm90ZTogVGhlIGZvbGxvd2luZyBpcyBwcm9wZXIgYmVoYXZpb3IsIGFu ZCByZXF1aXJlZCBmb3IgdGFsa2luZyB0byB0aGUKKyAgQXBlcnR1cyBpbnRlcmZhY2UgdG8gdGhl IE5PVElTIGxpYnJhcnkgc3lzdGVtLCBlLmcuIGF0IElvd2EgU3RhdGUgVToKKyAgc2Nob2xhci5p YXN0YXRlLmVkdS4gIFdpdGhvdXQgdGhpcyByZXBseSwgdGhlIHNlcnZlciBoYW5ncyBmb3JldmVy LiAgVGhpcworICBjb2RlIHNob3VsZCBub3QgYmUgbG9vcC1pbmR1Y2luZywgc2luY2UgQy1LZXJt aXQgbmV2ZXIgc2VuZHMgV0lMTCBTR0EgYXMKKyAgYW4gaW5pdGlhbCBiaWQsIHNvIGlmIERPIFNH QSBjb21lcywgaXQgaXMgbmV2ZXIgYW4gQUNLLgorKi8KKy8qCisgIFJldHVybiB2YWx1ZXM6Cisg IC0xID0gVGVsbmV0IE9wdGlvbiBuZWdvdGlhdGlvbiBlcnJvcgorICAtMiA9IENvbm5lY3Rpb24g Y2xvc2VkIGJ5IHBlZXIKKyAgLTMgPSBDb25uZWN0aW9uIGNsb3NlZCBieSB1cworICAwICA9IFN1 Y2Nlc3MKKyAgMSAgPSBFY2hvaW5nIG9uCisgIDIgID0gRWNob2luZyBvZmYKKyAgMyAgPSBRdW90 ZWQgSUFDCisgIDQgID0gSUtTIEV2ZW50CisgIDUgID0gKHVuYXNzaWduZWQpCisgIDYgID0gTG9n b3V0CisqLworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVEVMTkVUIERPIE9QVElPTiAqLwordG5feGRvb3AoQ0hBUiB6LCBpbnQgZWNobywg aW50ICgqZm4pKGludCkpCisjZWxzZQordG5feGRvb3AoeiwgZWNobywgZm4pIENIQVIgejsgaW50 IGVjaG87IGludCAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bl94ZG9vcCAq LyB7CisgICAgaW50IGMsIHgsIHksIG4sIG07CisjaWZkZWYgSUtTX09QVElPTgorICAgIGV4dGVy biBpbnQgc2VydmVyOworI2lmZGVmIE5PSUNQCisgICAgZXh0ZXJuIGludCBhdXRvZGw7CisgICAg aW50IGluYXV0b2RsID0gMCwgY21kYWRsID0gMTsKKyNlbHNlCisjaWZkZWYgQ0tfQVVUT0RMCisg ICAgZXh0ZXJuIGludCBhdXRvZGwsIGluYXV0b2RsLCBjbWRhZGw7CisjZW5kaWYgLyogQ0tfQVVU T0RMICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisKKyAg ICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oNyk7ICovCisKKy8qIEhhdmUgSUFDLCByZWFk IGNvbW1hbmQgY2hhcmFjdGVyLiAqLworCisgICAgd2hpbGUgKChjID0gKCpmbikoMCkpID09IC0x KTsgICAgICAgLyogUmVhZCBjb21tYW5kIGNoYXJhY3RlciAqLworICAgIGlmIChjIDwgMCkKKyAg ICAgIHJldHVybihjKTsKKyAgICBjICY9IDB4RkY7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTdHJpcCBoaWdoIGJpdHMgKi8KKworICAgIGlmICghVEVMQ01EX09LKGMpKSB7CisjaWZkZWYg REVCVUcKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMgfHwgZGVibG9nKSB7CisgICAgICAg ICAgICBja21ha21zZyh0bl9tc2csVE5fTVNHX0xFTiwiVEVMTkVUIFJDVkQgVU5LTk9XTiAoIiwK KyAgICAgICAgICAgICAgICAgICAgIGNraXRvYShjKSwiKSIsTlVMTCk7CisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLHRuX21zZywiIixjKTsKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KQorICAgICAgICAgICAgICB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAodHRucHJvdG8gPT0g TlBfTk9ORSkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9kb29wIGRpc2NvdmVyZWQgYSBUZWxu ZXQgY29tbWFuZCIsCisgICAgICAgICAgICAgICJ0dG5wcm90byA9IE5QX1RFTE5FVCIsMCk7Cisg ICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOworICAgIH0KKyAgICBpZiAoc2VzbG9nICYmIHNl c3NmdCA9PSBYWUZUX0QpIHsgICAvKiBDb3B5IHRvIHNlc3Npb24gbG9nLCBpZiBhbnkuICovCisg ICAgICAgIGxvZ2NoYXIoKGNoYXIpeik7CisgICAgICAgIGxvZ2NoYXIoKGNoYXIpYyk7CisgICAg fQorCisgICAgaWYgKGMgPT0gKENIQVIpIElBQykgICAgICAgICAgICAgICAgLyogUXVvdGVkIElB QyAqLworICAgICAgcmV0dXJuKDMpOworCisgICAgaWYgKGMgPCBTQikgeyAgICAgICAgICAgICAg ICAgICAgICAgLyogT3RoZXIgY29tbWFuZCB3aXRoIG5vIGFyZ3VtZW50cy4gKi8KKyNpZmRlZiBE RUJVRworICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAg ICAgIGNrbWFrbXNnKHRuX21zZyxUTl9NU0dfTEVOLCJURUxORVQgUkNWRCAiLFRFTENNRChjKSxO VUxMLE5VTEwpOworICAgICAgICAgICAgZGVidWcoRjEwMSx0bl9tc2csIiIsYyk7CisgICAgICAg ICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgfQor I2VuZGlmIC8qIERFQlVHICovCisgICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAg ICAgLyogV2hhdCB3ZSB3b3VsZCBsaWtlIHRvIGRvIGhlcmUgICAgKi8KKyAgICAgICAgICBjYXNl IFROX0dBOiAgICAgICAgICAgICAgICAgICAvKiBJcyBzdWJzdGl0dXRlIEFTQ0lJIGNoYXJhY3Rl cnMgICAqLworICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciB0 aGUgVGVsbmV0IENvbW1hbmQgc28gdGhhdCAgICovCisgICAgICAgICAgY2FzZSBUTl9FTDogICAg ICAgICAgICAgICAgICAgLyogdGhlIGNvbW1hbmQgbWF5IGJlIHByb2Nlc3NlZCBieSAgKi8KKyAg ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiBlaXRoZXIgdGhlIGludGVy bmFsIGVtdWxhdG9yIG9yICAqLworICAgICAgICAgIGNhc2UgVE5fRUM6ICAgICAgICAgICAgICAg ICAgIC8qIGJ5IHRoZSBzdXBlcmlvciBwcm9jZXNzIG9yIHNoZWxsICovCisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIFROX0FZVDoKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIFJl cXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisgICAgICAg ICAgICB0dG9sKChDSEFSICopIltZZXNdXDAxNVwwMTIiLDcpOworI2lmZGVmIE9TMgorICAgICAg ICAgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgVE5fQU86CisjaWZkZWYgQkVUQURFQlVHCisgICAgICAgICAgICBibGVl cChCUF9OT1RFKTsKKyNlbmRpZiAvKiBCRVRBREVCVUcgKi8KKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgVE5fSVA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl IEJSRUFLOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUTl9ETToKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVE5fTk9QOgorICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBTRToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug VE5fRU9SOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUTl9BQk9SVDoKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVE5fU1VTUDoKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgVE5fRU9GOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgY2FzZSBUTl9TQUs6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBy ZXR1cm4oMCk7CisgICAgfQorCisvKiBTQiwgV0lMTCwgV09OVCwgRE8sIG9yIERPTlQgbmVlZCBt b3JlIGJ5dGVzLi4uICovCisKKyAgICBpZiAoKHggPSAoKmZuKSgwKSkgPCAwKSAgICAgICAgICAg ICAvKiBHZXQgdGhlIG9wdGlvbi4gKi8KKyAgICAgIHJldHVybih4KTsKKyAgICB4ICY9IDB4ZmY7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmltIHRvIDggYml0cy4gKi8KKworICAgIGlm IChzZXNsb2cgJiYgc2Vzc2Z0ID09IFhZRlRfRCkgeyAgIC8qIFNlc3Npb24gbG9nICovCisgICAg ICAgIGxvZ2NoYXIoKGNoYXIpIHgpOworICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmICgoZGVi bG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpICYmIGMgIT0gU0IpIHsKKyAgICAgICAgY2ttYWttc2co dG5fbXNnLFROX01TR19MRU4sIlRFTE5FVCBSQ1ZEICIsVEVMQ01EKGMpLCIgIixURUxPUFQoeCkp OworICAgICAgICBkZWJ1ZyhGMTAxLHRuX21zZywiIix4KTsKKyAgICAgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisg ICAgLyogTm93IGhhbmRsZSB0aGUgY29tbWFuZCAqLworICAgIHN3aXRjaCAoYykgeworICAgICAg Y2FzZSBXSUxMOgorI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9T VEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQorICAgICAgICAgICAgcmV0dXJuKDApOwor I2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIENLX0ZPUldBUkRfWAorICAgICAgICAgIGlmICh4 ID09IFRFTE9QVF9GT1JXQVJEX1gpIHsKKyAgICAgICAgICAgICAgaWYgKCFmd2R4X3NlcnZlcl9h dmFpbCgpIHx8ICEoZndkeF9ub19lbmNyeXB0IHx8CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAg ICAgICAgIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKQorI2Vsc2UgLyogQ0tf U1NMICovCisgICAgICAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAg ICAgICAgICAgfHwKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgIChja190 bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpKQorI2Vsc2UgLyogQ0tfRU5DUllQ VElPTiAqLworICAgICAgICAgICAgICAgICAwCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwor ICAgICAgICAgICAgICAgICApKSB7CisgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRF TE9QVF9GT1JXQVJEX1gpID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICBURUxPUFRfTUVf TU9ERShURUxPUFRfRk9SV0FSRF9YKSA9IFROX05HX1JGOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgfQorI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworICAgICAgICBpZiAoIVRFTE9QVF9P Syh4KSB8fCBURUxPUFRfVV9NT0RFKHgpID09IFROX05HX1JGKSB7CisgICAgICAgICAgICBpZiAo dG5fc29wdChET05ULHgpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAg ICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkKKyAgICAgICAgICAgICAgICBURUxPUFRf VU5BTlNXRVJFRF9ETyh4KSA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoIVRFTE9QVF9VKHgpKSB7 CisgICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKSB7CisgICAgICAgICAg ICAgICAgaWYgKHRuX3NvcHQoRE8seCkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgp KQorICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKKyAgICAgICAg ICAgIFRFTE9QVF9VKHgpID0gMTsKKworICAgICAgICAgICAgc3dpdGNoICh4KSB7CisjaWZkZWYg Q0tfU1NMCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJUX1RMUzoKKyAgICAgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICAgICAgIElmIG15IHByb3Bvc2FsIGlzIGFjY2VwdGVkLCBh dCB0aGlzIHBvaW50IHRoZSBUZWxuZXQKKyAgICAgICAgICAgICAgICAgICBwcm90b2NvbCBpcyB0 dXJuZWQgb2ZmIGFuZCBhIFRMUyBuZWdvdGlhdGlvbiB0YWtlcworICAgICAgICAgICAgICAgICAg IHBsYWNlLgorCisgICAgICAgICAgICAgICAgICAgU3RhcnQgYnkgc2VuZGluZyBTQiBTVEFSVF9U TFMgRk9MTE9XUyAgdG8gc2lnbmFsCisgICAgICAgICAgICAgICAgICAgd2UgYXJlIHJlYWR5LiAg V2FpdCBmb3IgdGhlIHBlZXIgdG8gc2VuZCB0aGUgc2FtZQorICAgICAgICAgICAgICAgICAgIGFu ZCB0aGVuIHN0YXJ0IHRoZSBUTFMgbmVnb3RpYXRpb24uCisKKyAgICAgICAgICAgICAgICAgICBJ ZiB0aGUgVExTIG5lZ290aWF0aW9uIHN1Y2NlZWRzIHdlIGNhbGwgdG5faW5pKCkKKyAgICAgICAg ICAgICAgICAgICBhZ2FpbiB0byByZXNldCB0aGUgdGVsbmV0IHN0YXRlIG1hY2hpbmUgYW5kIHJl c3RhcnQKKyAgICAgICAgICAgICAgICAgICB0aGUgbmVnb3RpYXRpb24gcHJvY2VzcyBvdmVyIHRo ZSBub3cgc2VjdXJlIGxpbmsuCisKKyAgICAgICAgICAgICAgICAgICBJZiB0aGUgVExTIG5lZ290 aWF0aW9uIGZhaWxzLCB3ZSBjYWxsIHR0Y2xvcygpCisgICAgICAgICAgICAgICAgICAgdG8gdGVy bWluYXRlIHRoZSBjb25uZWN0aW9uLgorCisgICAgICAgICAgICAgICAgICAgT25seSB0aGUgc2Vy dmVyIHNob3VsZCByZWNlaXZlIGEgV0lMTCBTVEFSVF9UTFMKKyAgICAgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgICAgICB0bl9zc2JvcHQoVEVMT1BUX1NUQVJUX1RMUywxLE5VTEwsMCk7Cisg ICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9m b2xsb3dzID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19TU0wgKi8K KworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0FV VEhFTlRJQ0FUSU9OOiB7CisgICAgICAgICAgICAgICAgICAvKiBXZSBub3cgaGF2ZSB0byBwZXJm b3JtIGEgU0IgU0VORCB0byBpZGVudGlmeSB0aGUgICovCisgICAgICAgICAgICAgICAgICAvKiBz dXBwb3J0ZWQgYXV0aGVudGljYXRpb24gdHlwZXMgdG8gdGhlIG90aGVyIHNpZGUuICovCisgICAg ICAgICAgICAgICAgICBleHRlcm4gaW50IGF1dGhlbnRpY2F0aW9uX3ZlcnNpb247CisKKyNpZmRl ZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgIC8qIGlmIHdlIGhhdmUgYW4gb3V0c3RhbmRpbmcg RE8gU1RBUlRfVExTIHRoZW4gd2UgbXVzdCAKKyAgICAgICAgICAgICAgICAgICAqIHdhaXQgZm9y IHRoZSByZXNwb25zZSBiZWZvcmUgd2UgZGV0ZXJtaW5lIHdoYXQgdG8gZG8KKyAgICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKFRF TE9QVF9TVEFSVF9UTFMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5hdXRoX3JlcXVlc3QgPSAxOworICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0FVVE87 CisgICAgICAgICAgICAgICAgICBja190bl9hdXRoX3JlcXVlc3QoKTsKKyAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04g Ki8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZ UFRJT046CisgICAgICAgICAgICAgICAgaWYgKCEoVEVMT1BUX01FKFRFTE9QVF9BVVRIRU5USUNB VElPTikgfHwKKyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVShURUxPUFRfQVVUSEVOVElD QVRJT04pKQorICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KHRuX3NvcHQoRE9OVCx4KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1UoeCkgPSAwOworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChja190bl9hdXRoX2luX3Byb2dyZXNzKCkp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfRU5DUllQVElPTiku ZW5jcnlwdC5uZWVkX3RvX3NlbmQgPSAxOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICAgICAgLyogUGVyZm9ybSBzdWJuZWdvdGlhdGlvbiAqLworICAg ICAgICAgICAgICAgICAgICAgICAgY2tfZW5jcnlwdF9zZW5kX3N1cHBvcnQoKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIShURUxPUFRfTUUoeCkgfHwg VEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIFRF TE9QVF9NRV9NT0RFKHgpICE9IFROX05HX1JGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAodG5fc29wdChXSUxMLCB4KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgp ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgSUtTX09Q VElPTgorICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisgICAgICAgICAgICAgICAg aWYgKCFURUxPUFRfTUUoeCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogVGVsbCB0aGUgb3Ro ZXIgc2lkZSB3aGF0IFN0YXJ0IG9mIFBhY2tldCBDaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAg ICAgICAgdG5fc2lrcyhLRVJNSVRfU09QKTsgLyogU09QICovCisKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCFURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpICYmCisgICAgICAgICAgICAgICAgICAg ICAgICBURUxPUFRfTUVfTU9ERSh4KSAhPSBUTl9OR19SRikgeworICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgeCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURf V0lMTCh4KSA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworICAgICAgICAg ICAgICBjYXNlIFRFTE9QVF9CSU5BUlk6CisgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfTUUo eCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgp ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERSh4KSA+PSBUTl9OR19S USkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCwgeCkgPCAwKQor ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAg ICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSA9IDE7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgVEVMT1BUX0VDSE86CisgICAgICAgICAgICAgICAgaWYgKGVjaG8pIHsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQorICAgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgY2FzZSBURUxPUFRfVFRZUEU6CisgICAgICAgICAgICAgICAgLyogU0Ig VFRZUEUgU0VORCAqLworICAgICAgICAgICAgICAgIHRuX3NzYm9wdChURUxPUFRfVFRZUEUsVEVM UVVBTF9TRU5ELE5VTEwsMCk7CisgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfU0Io VEVMT1BUX1RUWVBFKT0xOworICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIENLX0VOVklS T05NRU5UCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX05FV0VOVklST046ICAgLyogU0IgTkVX LUVOVklST04gU0VORCAqLworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNo YXIgcmVxdWVzdFs2XTsgICAgICAvKiByZXF1ZXN0IGl0ICovCisgICAgICAgICAgICAgICAgICBz cHJpbnRmKHJlcXVlc3QsIiVjVVNFUiIsVEVMX0VOVl9WQVIpOyAgICAgICAgLyogc2FmZSAqLwor ICAgICAgICAgICAgICAgICAgdG5fc3Nib3B0KFRFTE9QVF9ORVdFTlZJUk9OLFRFTFFVQUxfU0VO RCxyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihyZXF1ZXN0KSk7 CisgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9TQihURUxPUFRfTkVXRU5WSVJP Tik9MTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogQ0tfRU5WSVJPTk1FTlQgKi8KKyAgICAgICAgICAgIH0gLyogc3dpdGNoICovCisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCisgICAg ICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAwOworICAgICAgICB9CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSBXT05UOgorI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAo VEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKQorICAgICAg ICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICBpZiAoVEVMT1BU X1UoeCkgfHwgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpIHsKKyAgICAgICAgICAgIC8qIERhdmlk IEJvcm1hbiBzYXlzIHdlIHNob3VsZCBub3QgcmVzcG9uZCBET05UIHdoZW4KKyAgICAgICAgICAg ICAqIHRoZSBXT05UIGlzIGEgcmVzcG9uc2UgdG8gYSBETyB0aGF0IHdlIHNlbnQuCisgICAgICAg ICAgICAgKiBOb3Igc2hvdWxkIHdlIHNlbmQgb25lIGlmIHRoZSBzdGF0ZSBpcyBhbHJlYWR5IFdP TlQKKyAgICAgICAgICAgICAqIHN1Y2ggYXMgd2hlbiB3ZSBkbyBub3QgcmVjb2duaXplIHRoZSBv cHRpb24gc2luY2UKKyAgICAgICAgICAgICAqIG9wdGlvbnMgYXJlIGluaXRpYWxpemVkIGluIHRo ZSBXT05UL0RPTlQgc3RhdGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICghKFRF TE9QVF9VTkFOU1dFUkVEX0RPKHgpIHx8IFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeCkpKQorICAg ICAgICAgICAgICBpZiAodG5fc29wdChET05ULHgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1 cm4oLTEpOworICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQoeCkpCisgICAg ICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE9OVCh4KSA9IDA7CisgICAgICAgICAgICBp ZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkpCisgICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5T V0VSRURfRE8oeCkgPSAwOworICAgICAgICAgICAgaWYgKFRFTE9QVF9VKHgpKSB7CisgICAgICAg ICAgICAgICAgVEVMT1BUX1UoeCkgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dp dGNoKHgpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NUQVJUX1RM UzoKKyAgICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQpIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKFRFTE9QVF9VX01PREUoeCkgPT0gVE5fTkdfTVUpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiVGVsbmV0IFN0YXJ0LVRMUyByZWZ1c2VkLlxuIik7CisgICAgICAgICAgICAg ICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aHljbG9zZWQg PSBXQ19URUxPUFQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTMpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfU0IoeCkuc3Rh cnRfdGxzLmF1dGhfcmVxdWVzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGlu dCBhdXRoZW50aWNhdGlvbl92ZXJzaW9uOworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BU X1NCKHgpLnN0YXJ0X3Rscy5hdXRoX3JlcXVlc3QgPSAwOworICAgICAgICAgICAgICAgICAgICAg ICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0FVVE87CisgICAgICAgICAgICAg ICAgICAgICAgICBja190bl9hdXRoX3JlcXVlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19T U0wgKi8KKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAgICAgICBjYXNlIFRFTE9Q VF9BVVRIRU5USUNBVElPTjoKKyAgICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQgJiYgVEVMT1BU X1VfTU9ERSh4KSA9PSBUTl9OR19NVSkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlRl bG5ldCBhdXRoZW50aWNhdGlvbiByZWZ1c2VkLlxuIik7CisgICAgICAgICAgICAgICAgICAgIHR0 Y2xvcygwKTsKKyAgICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOworICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo VEVMT1BUX1VfTU9ERSh4KSA9PSBUTl9OR19SUSkgeworICAgICAgICAgICAgICAgICAgICBURUxP UFRfVV9NT0RFKHgpID0gVE5fTkdfQUM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGlmIChja190bl9hdXRoX2luX3Byb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgICBwcmlu dGYoIlRlbG5ldCBhdXRoZW50aWNhdGlvbiByZWZ1c2VkLlxuIik7CisjaWZkZWYgQ0tfRU5DUllQ VElPTgorICAgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgeworICAgICAgICAgICAgICAgICAg ICBpZiAodG5fbm9fZW5jcnlwdCgpPDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAg ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046Cisg ICAgICAgICAgICAgICAgY2tfdG5fZW5jX3N0b3AoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAg ICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisgICAgICAgICAgICAgICAgVEVMT1BUX1NCKHgpLmtl cm1pdC51X3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICBURUxPUFRfU0IoeCkua2VybWl0Lm1l X3JlcV9zdGFydCA9IDA7CisgICAgICAgICAgICAgICAgVEVMT1BUX1NCKHgpLmtlcm1pdC5tZV9y ZXFfc3RvcCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogSUtTX09QVElP TiAqLworICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9OQVdTOiB7CisgICAgICAgICAgICAgICAg ICAvKiBUaGUgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgTkFXUy4gKi8KKyAgICAgICAgICAgICAg ICAgIC8qIEFzc3VtZSBhIGhlaWdodCBvZiAyNCBhbmQgYSB3aWR0aCBvZiA4MCAqLworICAgICAg ICAgICAgICAgICAgaWYgKHNzdGVsbmV0CisjaWZkZWYgSUtTRAorICAgICAgICAgICAgICAgICAg IHx8IGluc2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgICAgICAgICAgICkgewor ICAgICAgICAgICAgICAgICAgICAgIGludCB3ID0gODAsIGggPSAyNDsKKyNpZm5kZWYgTk9MT0NB TAorICAgICAgICAgICAgICAgICAgICAgIGlmICh0Y3BfaW5jb21pbmcpIHsKKyNpZmRlZiBPUzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgdHRfY29sc1tWVEVSTV0gPSB3OworICAgICAgICAg ICAgICAgICAgICAgICAgICB0dF9yb3dzW1ZURVJNXSA9IGg7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIFZzY3JuU2V0V2lkdGgoVlRFUk0sIHcpOworICAgICAgICAgICAgICAgICAgICAgICAg ICBWc2NyblNldEhlaWdodChWVEVSTSwgaCsodHRfc3RhdHVzW1ZURVJNXT8xOjApKTsKKyNlbHNl IC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICB0dF9jb2xzID0gdzsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdHRfcm93cyA9IGg7CisjZW5kaWYgLyogT1MyICovCisgICAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgdHRfY29sc1tWQ01EXSA9IHc7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHR0 X3Jvd3NbVkNNRF0gPSBoOworICAgICAgICAgICAgICAgICAgICAgICAgICBWc2NyblNldFdpZHRo KFZDTUQsIHcpOworICAgICAgICAgICAgICAgICAgICAgICAgICBWc2NyblNldEhlaWdodChWQ01E LCBoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY21kX2Nv bHMgPSB3OworICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRfcm93cyA9IGg7CisgICAgICAg ICAgICAgICAgICAgICAgfQorI2Vsc2UgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgICAgICAg ICAgIGNtZF9jb2xzID0gdzsKKyAgICAgICAgICAgICAgICAgICAgICBjbWRfcm93cyA9IGg7Cisj ZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgICAgICAgICAgIC8qIEFkZCBMSU5FUyBh bmQgQ09MVU1OUyB0byB0aGUgZW52aXJvbm1lbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICBj a21ha21zZygoY2hhciAqKXJvd3NfYnVmLDE2LCJMSU5FUz0iLGNraXRvYShoKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAg ICBja21ha21zZygoY2hhciAqKWNvbHNfYnVmLDE2LCJDT0xVTU5TPSIsY2tpdG9hKHcpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwpOworI2lmZGVmIE9TMk9SVU5J WAorI2lmbmRlZiBOT1BVVEVOVgorICAgICAgICAgICAgICAgICAgICAgIHB1dGVudihyb3dzX2J1 Zik7CisgICAgICAgICAgICAgICAgICAgICAgcHV0ZW52KGNvbHNfYnVmKTsKKyNlbmRpZiAvKiBO T1BVVEVOViAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg Y2FzZSBURUxPUFRfRUNITzoKKyAgICAgICAgICAgICAgICBpZiAoIWVjaG8pIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQorICAgICAgICAgICAgICAg ICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuKDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChURUxPUFRfVU5B TlNXRVJFRF9ET05UKHgpKQorICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPTlQo eCkgPSAwOworICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpKQorICAgICAg ICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKKyAgICAgICAgfQorICAgICAg ICBpZiAoVEVMT1BUX1VfTU9ERSh4KSA9PSBUTl9OR19NVSkgeworICAgICAgICAgICAgY2ttYWtt c2coIHRuX21zZyxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICJQZWVyIHJlZnVz ZXMgVEVMTkVUIERPICIsVEVMT1BUKHgpLAorICAgICAgICAgICAgICAgICAgICAgICIgbmVnb3Rp YXRpb25zIC0gdGVybWluYXRpbmcgY29ubmVjdGlvbiIsTlVMTAorICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgICAgICBp ZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICAgICAgICAgIHByaW50 ZigiJXNcbiIsdG5fbXNnKTsKKyAgICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgIHdo eWNsb3NlZCA9IFdDX1RFTE9QVDsKKyAgICAgICAgICAgIHJldHVybigtMyk7CisgICAgICAgIH0K KyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmICh4ID09IFRFTE9QVF9FQ0hPICYmICFlY2hvKSAv KiBTcGVjaWFsIGhhbmRsaW5nIGZvciBlY2hvICovCisgICAgICAgICAgcmV0dXJuKDEpOyAgICAg ICAgICAgICAgICAgICAvKiBiZWNhdXNlIHdlIGFsbG93ICdkdXBsZXgnICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBETzoKKyNpZmRlZiBDS19T U0wKKyAgICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVf Zm9sbG93cykKKyAgICAgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAg ICAgICAgaWYgKCFURUxPUFRfT0soeCkgfHwgVEVMT1BUX01FX01PREUoeCkgPT0gVE5fTkdfUkYp IHsKKyAgICAgICAgICAgIGlmICh0bl9zb3B0KFdPTlQseCkgPCAwKQorICAgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkpCisg ICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSA9IDA7CisgICAgICAgIH0g ZWxzZSBpZiAoIVRFTE9QVF9NRSh4KSkgeworICAgICAgICAgICAgaWYgKCFURUxPUFRfVU5BTlNX RVJFRF9XSUxMKHgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRuX3NvcHQoV0lMTCx4KSA8IDAp CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkpCisgICAgICAgICAgICAgICAgVEVMT1BU X1VOQU5TV0VSRURfV0lMTCh4KSA9IDA7CisgICAgICAgICAgICBURUxPUFRfTUUoeCkgPSAxOwor CisgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAg Y2FzZSBURUxPUFRfU1RBUlRfVExTOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg ICAgICAgSWYgbXkgcHJvcG9zYWwgaXMgYWNjZXB0ZWQgYXQgdGhpcyBwb2ludCB0aGUgVGVsbmV0 CisgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgaXMgdHVybmVkIG9mZiBhbmQgYSBUTFMgbmVn b3RpYXRpb24gdGFrZXMKKyAgICAgICAgICAgICAgICAgICBwbGFjZS4KKworICAgICAgICAgICAg ICAgICAgIFN0YXJ0IGJ5IHNlbmRpbmcgU0IgU1RBUlRfVExTIEZPTExPV1MgIHRvIHNpZ25hbAor ICAgICAgICAgICAgICAgICAgIHdlIGFyZSByZWFkeS4gIFdhaXQgZm9yIHRoZSBwZWVyIHRvIHNl bmQgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBzdGFydCB0aGUgVExTIG5l Z290aWF0aW9uLgorCisgICAgICAgICAgICAgICAgICAgSWYgdGhlIFRMUyBuZWdvdGlhdGlvbiBz dWNjZWVkcyB3ZSBjYWxsIHRuX2luaSgpCisgICAgICAgICAgICAgICAgICAgYWdhaW4gdG8gcmVz ZXQgdGhlIHRlbG5ldCBzdGF0ZSBtYWNoaW5lIGFuZCByZXN0YXJ0CisgICAgICAgICAgICAgICAg ICAgdGhlIG5lZ290aWF0aW9uIHByb2Nlc3Mgb3ZlciB0aGUgbm93IHNlY3VyZSBsaW5rLgorCisg ICAgICAgICAgICAgICAgICAgSWYgdGhlIFRMUyBuZWdvdGlhdGlvbiBmYWlscywgd2UgY2FsbCB0 dGNsb3MoKQorICAgICAgICAgICAgICAgICAgIHRvIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbi4g IFRoZW4gd2Ugc2V0IHRoZQorICAgICAgICAgICAgICAgICAgIFVfTU9ERSBhbmQgTUVfTU9ERSBm b3IgVEVMT1BUX1NUQVJUX1RMUyB0byBSRUZVU0UKKyAgICAgICAgICAgICAgICAgICBhbmQgdGhl biBjYWxsIHR0b3BlbigpIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uCisgICAgICAgICAgICAg ICAgICAgdG8gdGhlIHNhbWUgaG9zdCBidXQgdGhpcyB0aW1lIGRvIG5vdCBhdHRlbXB0CisgICAg ICAgICAgICAgICAgICAgVExTIHNlY3VyaXR5LgorCisgICAgICAgICAgICAgICAgICAgT25seSB0 aGUgY2xpZW50IHNob3VsZCByZWNlaXZlIERPIFNUQVJUX1RMUy4KKyAgICAgICAgICAgICAgICAq LworICAgICAgICAgICAgICAgIHRuX3NzYm9wdChURUxPUFRfU1RBUlRfVExTLDEsTlVMTCwwKTsK KyAgICAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1l X2ZvbGxvd3MgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NTTCAq LworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAgY2FzZSBURUxPUFRf QVVUSEVOVElDQVRJT046IHsKKyAgICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGtub3cgd2hh dCBhdXRoZW50aWNhdGlvbiB3ZSBhcmUgdXNpbmcgeWV0ICovCisgICAgICAgICAgICAgICAgICAv KiBidXQgaXQgaXMgbm90IE5VTEwgdW50aWwgYSBmYWlsdXJlIGlzIGRldGVjdGVkIHNvICovCisg ICAgICAgICAgICAgICAgICAvKiB1c2UgQVVUTyBpbiB0aGUgbWVhbnRpbWUuICovCisgICAgICAg ICAgICAgICAgICBleHRlcm4gaW50IGF1dGhlbnRpY2F0aW9uX3ZlcnNpb247CisgICAgICAgICAg ICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfQVVUTzsKKyAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfQVVUSEVOVElD QVRJT04gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BU X0VOQ1JZUFRJT046CisgICAgICAgICAgICAgICAgaWYgKCEoVEVMT1BUX01FKFRFTE9QVF9BVVRI RU5USUNBVElPTikgfHwKKyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVShURUxPUFRfQVVU SEVOVElDQVRJT04pKQorICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHRuX3NvcHQoV09OVCx4KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KC0xKTsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FKHgpID0gMDsKKyAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIShURUxPUFRfVSh4KSB8fCBU RUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIFRFTE9Q VF9VX01PREUoeCkgIT0gVE5fTkdfUkYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0 bl9zb3B0KERPLCB4KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7 CisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg YnJlYWs7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIElLU19PUFRJT04KKyAg ICAgICAgICAgICAgY2FzZSBURUxPUFRfS0VSTUlUOgorLyogSWYgY3VycmVudGx5IHByb2Nlc3Np bmcgS2VybWl0IHNlcnZlciBwYWNrZXRzLCBtdXN0IHRlbGwgdGhlIG90aGVyIHNpZGUgKi8KKwor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX2Rvb3AiLCJ3aGF0Iix3aGF0KTsKKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9kb29wIiwic2VydmVyIixzZXJ2ZXIpOworI2lmZGVm IENLX0FVVE9ETAorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuX2Rvb3AiLCJhdXRvZGwi LGF1dG9kbCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCIsImluYXV0b2Rs IixpbmF1dG9kbCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fZG9vcCIsImNtZGFk bCIsY21kYWRsKTsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKworICAgICAgICAgICAgICAgIGlm IChzZXJ2ZXIKKyNpZmRlZiBDS19BVVRPREwKKyAgICAgICAgICAgICAgICAgICAgfHwgKGxvY2Fs ICYmICgod2hhdCA9PSBXX0NPTk5FQ1QgJiYgYXV0b2RsKSB8fAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh3aGF0ICE9IFdfQ09OTkVDVCAmJiBpbmF1dG9kbCkpKQorICAgICAg ICAgICAgICAgICAgICB8fCAoIWxvY2FsICYmIGNtZGFkbCkKKyNlbmRpZiAvKiBDS19BVVRPREwg Ki8KKyAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIHRuX3Npa3Mo S0VSTUlUX1NUQVJUKTsgICAgICAvKiBTVEFSVCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBpZiAoIVRFTE9QVF9VKHgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRl bGwgdGhlIG90aGVyIHNpZGUgd2hhdCBTdGFydCBvZiBQYWNrZXQgQ2hhcmFjdGVyICovCisgICAg ICAgICAgICAgICAgICAgIHRuX3Npa3MoS0VSTUlUX1NPUCk7ICAgICAgICAgICAgIC8qIFNPUCAq LworICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpICYmCisg ICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKHgpICE9IFROX05HX1JGKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChETywgeCkgPCAwKQorICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgVEVM T1BUX1VOQU5TV0VSRURfRE8oeCkgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIElLU19PUFRJT04g Ki8KKworICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9CSU5BUlk6CisgICAgICAgICAgICAgICAg aWYgKCFURUxPUFRfVSh4KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VTkFO U1dFUkVEX0RPKHgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKHgp ID49IFROX05HX1JRKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fc29wdChETywg eCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAg ICAgICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfRE8oeCkgPSAxOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9OQVdTOgorI2lmZGVmIENLX05BV1MKKyAgICAgICAgICAg ICAgICBpZiAoICF0bl9kZWxheV9zYiB8fCAhdG5fb3V0c3QoMCkgfHwgdG5faW5pdCApIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKHRuX3NuYXdzKCkgPCAwKQorICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX05BV1MpLm5hd3MubmVlZF90b19zZW5kID0gMTsKKyAg ICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfTkFXUyAqLworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9MT0dPVVQ6CisgICAgICAgICAgICAgICAg dHRjbG9zKDApOyAgICAgICAgICAgICAgLyogQW5kIHRoZW4gaGFuZ3VwICovCisgICAgICAgICAg ICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOworICAgICAgICAgICAgICAgIHJldHVybig2KTsK KyNpZmRlZiBDS19TTkRMT0MKKyAgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX1NORExPQzoKKyAg ICAgICAgICAgICAgICAgIGlmICggIXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRzdCgwKSB8fCB0bl9p bml0ICkgeworICAgICAgICAgICAgICAgICAgICAgIGlmICh0bl9zbmRsb2MoKSA8IDApCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfU05ETE9DKS5zbmRs b2MubmVlZF90b19zZW5kID0gMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NORExPQyAqLworI2lmZGVmIENLX0ZPUldBUkRfWAor ICAgICAgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgorICAgICAgICAgICAgICAgICAg aWYgKCAhdG5fZGVsYXlfc2IgfHwgIXRuX291dHN0KDApIHx8IHRuX2luaXQgKSB7CisgICAgICAg ICAgICAgICAgICAgICAgaWYgKGZ3ZHhfc2VuZF9vcHRpb25zKCkgPCAwKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICh0bl9zb3B0KERPTlQseCkgPCAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEVM T1BUX1VOQU5TV0VSRURfRE9OVCh4KSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfU0Io VEVMT1BUX0ZPUldBUkRfWCkuZm9yd2FyZF94Lm5lZWRfdG9fc2VuZCA9IDE7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19GT1JXQVJE X1ggKi8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBP UlQ6IHsKKyAgICAgICAgICAgICAgICBleHRlcm4gaW50IHJlbGlhYmxlOworICAgICAgICAgICAg ICAgIGlmICghdG5fZGVsYXlfc2IgfHwgIXRuX291dHN0KDApIHx8IHRuX2luaXQpIHsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHRuX3NuZGNvbXBvcnQoKSA8IDApCisgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQubmVlZF90b19zZW5kID0g MTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogVGVsbmV0IC0+IFNlcmlh bCAtPiA/Pz8gaXMgbm90IGEgcmVsaWFibGUgY29ubmVjdGlvbi4gKi8KKyAgICAgICAgICAgICAg ICByZWxpYWJsZSA9IFNFVF9PRkY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgICAgICAgICB9IC8qIHN3aXRjaCAq LworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9XSUxM KHgpKQorICAgICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh4KSA9IDA7CisgICAgICAg IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRE9OVDoKKyNpZmRlZiBDS19TU0wKKyAg ICAgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93 cykKKyAgICAgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAg aWYgKFRFTE9QVF9NRSh4KSB8fCBURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHgpKSB7CisgICAgICAg ICAgICAvKiBEYXZpZCBCb3JtYW4gc2F5cyB3ZSBzaG91bGQgbm90IHJlc3BvbmQgV09OVCB3aGVu CisgICAgICAgICAgICAgKiB0aGUgRE9OVCBpcyBhIHJlc3BvbnNlIHRvIGEgV0lMTCB0aGF0IHdl IHNlbnQuCisgICAgICAgICAgICAgKiBOb3Igc2hvdWxkIHdlIHNlbmQgb25lIGlmIHRoZSBzdGF0 ZSBpcyBhbHJlYWR5IFdPTlQKKyAgICAgICAgICAgICAqIHN1Y2ggYXMgd2hlbiB3ZSBkbyBub3Qg cmVjb2duaXplIHRoZSBvcHRpb24gc2luY2UKKyAgICAgICAgICAgICAqIG9wdGlvbnMgYXJlIGlu aXRpYWxpemVkIGluIHRoZSBXT05UL0RPTlQgc3RhdGUuCisgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIGlmICghKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgfHwgVEVMT1BUX1VOQU5TV0VS RURfV09OVCh4KSkpCisgICAgICAgICAgICAgIGlmICh0bl9zb3B0KFdPTlQseCkgPCAwKQorICAg ICAgICAgICAgICAgIHJldHVybigtMSk7CisKKyAgICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNX RVJFRF9XSUxMKHgpKQorICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkg PSAwOworICAgICAgICAgICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dPTlQoeCkpCisgICAgICAg ICAgICAgICAgVEVMT1BUX1VOQU5TV0VSRURfV09OVCh4KSA9IDA7CisgICAgICAgICAgICBpZiAo VEVMT1BUX01FKHgpKQorICAgICAgICAgICAgICBURUxPUFRfTUUoeCkgPSAwOworCisgICAgICAg ICAgICBzd2l0Y2ggKHgpIHsKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIGNhc2UgVEVMT1BU X1NUQVJUX1RMUzoKKyAgICAgICAgICAgICAgICBpZiAoIXNzdGVsbmV0ICYmIFRFTE9QVF9NRV9N T0RFKHgpID09IFROX05HX01VKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVGVsbmV0 IFN0YXJ0LVRMUyByZWZ1c2VkLlxuIik7CisgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsK KyAgICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOworICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi cmVhazsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAg ICAgICAgICAgICBjYXNlIFRFTE9QVF9BVVRIRU5USUNBVElPTjoKKyAgICAgICAgICAgICAgICBp ZiAoIXNzdGVsbmV0ICYmIFRFTE9QVF9NRV9NT0RFKHgpID09IFROX05HX01VKSB7CisjaWZkZWYg Q0tfU1NMCisgICAgICAgICAgICAgICAgICAgIGlmICh0bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpID0gVE5fTkdfQUM7CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisjZW5k aWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiVGVsbmV0IGF1dGhlbnRpY2F0aW9uIHJlZnVzZWQuXG4iKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdo eWNsb3NlZCA9IFdDX1RFTE9QVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMyk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRFTE9Q VF9NRV9NT0RFKHgpID09IFROX05HX1JRKSB7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9N RV9NT0RFKHgpID0gVE5fTkdfQUM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGlmIChja190bl9hdXRoX2luX3Byb2dyZXNzKCkpCisgICAgICAgICAgICAgICAgICBwcmludGYo IlRlbG5ldCBhdXRoZW50aWNhdGlvbiByZWZ1c2VkLlxuIik7CisjaWZkZWYgQ0tfRU5DUllQVElP TgorICAgICAgICAgICAgICAgIGlmICghc3N0ZWxuZXQpIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKHRuX25vX2VuY3J5cHQoKTwwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0x KTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgICAg ICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAg ICAgICAgICAgICAgIGNrX3RuX2VuY19zdG9wKCk7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJN SVQ6CisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAgICAgICAgIFRFTE9QVF9TQih4KS5rZXJt aXQubWVfc3RhcnQgPSAwOworI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0gLyogc3dpdGNoICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg aWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkpCisgICAgICAgICAgICAgIFRFTE9QVF9VTkFO U1dFUkVEX1dJTEwoeCkgPSAwOworICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9XT05U KHgpKQorICAgICAgICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XT05UKHgpID0gMDsKKyAgICAg ICAgfQorICAgICAgICBpZiAoVEVMT1BUX01FX01PREUoeCkgPT0gVE5fTkdfTVUpIHsKKyAgICAg ICAgICAgIGNrbWFrbXNnKCB0bl9tc2csVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICAg ICAiUGVlciByZWZ1c2VzIFRFTE5FVCBXSUxMICIsVEVMT1BUKHgpLAorICAgICAgICAgICAgICAg ICAgICAgICIgbmVnb3RpYXRpb25zIC0gdGVybWluYXRpbmcgY29ubmVjdGlvbiIsCisgICAgICAg ICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVi c2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICAgICAgcHJpbnRmKCIlc1xuIix0bl9tc2cp OworICAgICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVM T1BUOworICAgICAgICAgICAgcmV0dXJuKC0zKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK KyAgICAgIGNhc2UgU0I6CisgICAgICAgIGlmICgoeSA9IHRuX3NiKHgsJm4sZm4pKSA8PSAwKQor ICAgICAgICAgIHJldHVybih5KTsKKworI2lmZGVmIENLX1NTTAorICAgICAgICAvKiBEbyBub3Qg cHJvY2VzcyBzdWJuZWdvdGlhdGlvbnMgb3RoZXIgdGhhbiBTVEFSVF9UTFMgYWZ0ZXIgd2UgKi8K KyAgICAgICAgLyogaGF2ZSBhZ3JlZWQgdG8gYmVnaW4gdGhlIFRMUyBuZWdvdGlhdGlvbiBzZXF1 ZW5jZS4gICAgICAgICAgICovCisgICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RM Uykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MgJiYKKyAgICAgICAgICAgICB4ICE9IFRFTE9QVF9TVEFS VF9UTFMpCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgICAg ICBpZiAoIVRFTE9QVF9PSyh4KSkgeworICAgICAgICAgICAgY2toZXhkdW1wKCJ1bmtub3duIHRl bG5ldCBzdWJuZWdvdGlhdGlvbiIsc2Isbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fSBlbHNlIGlmICggIShURUxPUFRfTUUoeCkgfHwgVEVMT1BUX1UoeCkpICkgeworICAgICAgICAg ICAgY2toZXhkdW1wKCJ0ZWxuZXQgb3B0aW9uIG5vdCBuZWdvdGlhdGVkIixzYixuKTsKKyAgICAg ICAgICAgIGlmICghdG5fc2JfYnVnKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgaWYgKFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkpIHsKKyAgICAgICAgICAgICAgICBURUxP UFRfVU5BTlNXRVJFRF9XSUxMKHgpID0gMDsKKyAgICAgICAgICAgICAgICBURUxPUFRfVSh4KSA9 IDE7CisgICAgICAgICAgICAgICAgY2ttYWttc2codG5fbXNnLFROX01TR19MRU4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgIlRFTE5FVCBETyAiLFRFTE9QVCh4KSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiKGltcGxpZWQgYnkgcmVjZWlwdCBvZiBTQiAtIHByb3RvY29sIGVycm9yIGln bm9yZWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAg ICAgICAgICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChURUxPUFRfVU5BTlNXRVJFRF9ETyh4KSkgewor ICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX0RPKHgpID0gMDsKKyAgICAgICAgICAg ICAgICBURUxPUFRfTUUoeCkgPSAxOworICAgICAgICAgICAgICAgIGNrbWFrbXNnKHRuX21zZyxU Tl9NU0dfTEVOLCJURUxORVQgV0lMTCAiLFRFTE9QVCh4KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICIgKGltcGxpZWQgYnkgcmVjZWlwdCBvZiBTQiAtIHByb3RvY29sIGVycm9yIGlnbm9yZWQp IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IFRFTE9QVF9VTkFOU1dFUkVEX1NCKHgpPTA7CisgICAgICAgIHN3aXRjaCAoeCkgeworI2lmZGVm IENLX0ZPUldBUkRfWAorICAgICAgICAgIGNhc2UgVEVMT1BUX0ZPUldBUkRfWDoKKyAgICAgICAg ICAgIHJldHVybihmd2R4X3RuX3NiKHNiLCBuKSk7CisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICov CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgY2FzZSBURUxPUFRfU1RBUlRfVExTOiB7CisgICAg ICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgIHRoZSBvdGhlciBzaWRlIGlzIHNheWluZyBT QiBTVEFSVF9UTFMgRk9MTE9XUworICAgICAgICAgICAgICAgICB0aGUgaW5jb21pbmcgY2hhbm5l bCBpcyBub3cgcmVhZHkgZm9yIHN0YXJ0aW5nIHRoZQorICAgICAgICAgICAgICAgICBUTFMgbmVn b3RpYXRpb24uCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIGludCBkZWZfdGxz X3VfbW9kZSwgZGVmX3Rsc19tZV9tb2RlOworICAgICAgICAgICAgICBpbnQgZGVmX2VuY191X21v ZGUsIGRlZl9lbmNfbWVfbW9kZTsKKyAgICAgICAgICAgICAgaW50IHJjID0gMDsKKworICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoc2JbMF0gIT0gMSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy51X2ZvbGxv d3MgPSAxOworICAgICAgICAgICAgICAvKiBQcmVzZXJ2ZSB0aGUgZGVmYXVsdCBtb2RlcyBhbmQg bWFrZSBzdXJlIHdlIHdpbGwgKi8KKyAgICAgICAgICAgICAgLyogcmVmdXNlIFNUQVJUX1RMUyB3 aGVuIHdlIHJldHJ5LiAqLworICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQpIHsKKyAgICAgICAg ICAgICAgICAgIGRlZl90bHNfdV9tb2RlID0gVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfU1RB UlRfVExTKTsKKyAgICAgICAgICAgICAgICAgIGRlZl90bHNfbWVfbW9kZSA9IFRFTE9QVF9ERUZf U19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpOworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RF Rl9TX1VfTU9ERShURUxPUFRfU1RBUlRfVExTKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUyk9IFROX05HX1JGOworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAgIGRlZl9lbmNfdV9tb2RlID0gVEVM T1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTik7CisgICAgICAgICAgICAgICAgICBk ZWZfZW5jX21lX21vZGUgPSBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTik7 CisgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pPSBUTl9OR19SRjsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBkZWZfdGxzX3VfbW9kZSA9 IFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RMUyk7CisgICAgICAgICAgICAgICAg ICBkZWZfdGxzX21lX21vZGUgPSBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfU1RBUlRfVExT KTsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX1NUQVJUX1RM UykgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRF TE9QVF9TVEFSVF9UTFMpPSBUTl9OR19SRjsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAg ICAgICAgICAgICBkZWZfZW5jX3VfbW9kZSA9IFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VO Q1JZUFRJT04pOworICAgICAgICAgICAgICAgICAgZGVmX2VuY19tZV9tb2RlID0gVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pOworICAgICAgICAgICAgICAgICAgVEVMT1BU X0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAg ICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKT0gVE5fTkdfUkY7 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIC8qIE5lZ290aWF0ZSBUTFMgKi8KKyAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9UTFM7 CisgICAgICAgICAgICAgIHRuX2luaXQgPSAwOworICAgICAgICAgICAgICB0bl9iZWd1biA9IDA7 CisgICAgICAgICAgICAgIGlmIChja190bl90bHNfbmVnb3RpYXRlKCk8MCkgeworICAgICAgICAg ICAgICAgICAgLyogd2UgZmFpbGVkLiAgZGlzY29ubmVjdCBhbmQgaWYgd2UgYXJlIHRoZSBjbGll bnQgKi8KKyAgICAgICAgICAgICAgICAgIC8qIHRoZW4gcmVjb25uZWN0IGFuZCB0cnkgd2l0aG91 dCBTVEFSVF9UTFMuICAgICAgICovCisgICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGxp bmU7CisgICAgICAgICAgICAgICAgICBpbnQgeCA9IC0xOworICAgICAgICAgICAgICAgICAgZXh0 ZXJuIGludCBtZG10eXA7CisKKyAgICAgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgeworICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiVExTIGZhaWxlZDogIERpc2Nvbm5lY3RpbmcuXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9TVEFS VF9UTFMpICA9IGRlZl90bHNfdV9tb2RlOworICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9E RUZfU19NRV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0gZGVmX3Rsc19tZV9tb2RlOworI2lmZGVm IENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUo VEVMT1BUX0VOQ1JZUFRJT04pICA9IGRlZl9lbmNfdV9tb2RlOworICAgICAgICAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gZGVmX2VuY19tZV9t b2RlOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICAgICAgICAgICB0 dGNsb3MoMCk7CisgICAgICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwor ICAgICAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOworICAgICAgICAgICAg ICAgICAgICAgIHJjID0gLTM7CisgICAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lmbmRlZiBO T0xPQ0FMCisgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGludCB0bHNfbm9yZXN0b3JlOwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlRMUyBm YWlsZWQ6ICBEaXNjb25uZWN0aW5nLi4uXG4iKTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAg ICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAg PSBkZWZfZW5jX3VfbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IGRlZl9lbmNfbWVfbW9kZTsKKyNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCisgICAgICAgICAgICAgICAgICAgICAgLyogaWYgU1RBUlRfVExTIGlzIG5v dCBSRVFVSVJFRCwgdGhlbiByZXRyeSB3aXRob3V0IGl0ICovCisgICAgICAgICAgICAgICAgICAg ICAgaWYgKCBkZWZfdGxzX21lX21vZGUgIT0gVE5fTkdfTVUgKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIGV4dGVybiBjaGFyIHR0bmFtZVtdOworI2lmbmRlZiBOT0xPQ0FMCisgICAgICAg ICAgICAgICAgICAgICAgICAgIHRsc19ub3Jlc3RvcmUgPSAxOworI2VuZGlmIC8qIE5PTE9DQUwg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgICAg ICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7CisjaWZuZGVmIE5PTE9DQUwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdGxzX25vcmVzdG9yZSA9IDA7CisjZW5kaWYgLyogTk9MT0NB TCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICB0dG5wcm90byA9IE5QX1RFTE5FVDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJSZWNvbm5lY3Rpbmcgd2l0aG91dCBUTFMu XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMik7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICh0dG9wZW4odHRuYW1lLCZ4LG1kbXR5cCwwKTwwKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9Q VF9TVEFSVF9UTFMpID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfdGxzX3VfbW9k ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BU X1NUQVJUX1RMUykgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZl90bHNfbWVfbW9k ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgICAg ICAgICAgICAgICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOworICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9 IC0zOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAgICAg ICAgICAgLyogd2Ugc3VjY2VlZGVkLiAgcmVzdGFydCB0ZWxuZXQgbmVnb3RpYXRpb25zIGZyb20g Ki8KKyAgICAgICAgICAgICAgICAgIC8qIHRoZSBiZWdpbm5pbmcuICBIb3dldmVyLCBpZiB3ZSBo YXZlIHJlY2VpdmVkIGEgICovCisgICAgICAgICAgICAgICAgICAvKiBjbGllbnQgY2VydGlmaWNh dGUgYW5kIHdlIGFyZSBhIHNlcnZlciwgdGhlbiBkbyAqLworICAgICAgICAgICAgICAgICAgLyog bm90IG9mZmVyIFRFTE9QVF9BVVRILiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgICAgICAgIGlmICggY2tfdG5fYXV0aF92YWxpZCgpID09IEFVVEhfVkFMSUQgKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElD QVRJT04pID0gVE5fTkdfQUM7CisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01F X01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKT0gVE5fTkdfQUM7CisgICAgICAgICAgICAgICAg ICB9CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAgICAgICAgICAgICAgIHR0 bnByb3RvID0gTlBfVEVMTkVUOworICAgICAgICAgICAgICAgICAgaWYgKHRuX2luaSgpIDwgMCkK KyAgICAgICAgICAgICAgICAgICAgaWYgKHR0Y2hrKCkgPCAwKQorICAgICAgICAgICAgICAgICAg ICAgIHJjID0gLTE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgLyogUmVzdG9yZSB0 aGUgZGVmYXVsdCBtb2RlcyAqLworICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQpIHsKKyAgICAg ICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX1NUQVJUX1RMUykgID0gZGVm X3Rsc191X21vZGU7CisgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxP UFRfU1RBUlRfVExTKSA9IGRlZl90bHNfbWVfbW9kZTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisg ICAgICAgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAg PSBkZWZfZW5jX3VfbW9kZTsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9IGRlZl9lbmNfbWVfbW9kZTsKKyNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBURUxP UFRfREVGX0NfVV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpICA9IGRlZl90bHNfdV9tb2RlOworICAg ICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSBk ZWZfdGxzX21lX21vZGU7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgICAg VEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgID0gZGVmX2VuY191X21vZGU7 CisgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBkZWZfZW5jX21lX21vZGU7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIHJldHVybihyYyk7CisgICAgICAgICAgfQorI2VuZGlm IC8qIENLX1NTTCAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgY2FzZSBU RUxPUFRfQVVUSEVOVElDQVRJT046CisgICAgICAgICAgICBpZiAoY2tfdG5fc2JfYXV0aCgoY2hh ciAqKXNiLG4pIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChzc3RlbG5ldCAmJiBURUxPUFRf VV9NT0RFKHgpID09IFROX05HX01VKSB7CisgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsK KyAgICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOworICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTMpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNzdGVsbmV0 ICYmIFRFTE9QVF9NRV9NT0RFKHgpID09IFROX05HX01VKSB7CisgICAgICAgICAgICAgICAgICAg IHR0Y2xvcygwKTsKKyAgICAgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfVEVMT1BUOwor ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUVfTU9ERSh4KSA9PSBUTl9OR19SUSkK KyAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERSh4KSA9IFROX05HX0FDOworICAg ICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX1VfTU9ERSh4KSA9PSBUTl9OR19SUSkKKyAgICAg ICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKHgpID0gVE5fTkdfQUM7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChURUxPUFRfTUUoeCkpIHsKKyAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX01FKHgpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX3Nv cHQoV09OVCx4KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9VKHgpKSB7CisgICAgICAg ICAgICAgICAgICAgIFRFTE9QVF9VKHgpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRu X3NvcHQoRE9OVCx4KSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgICAgICAgICB9CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIGlm ICh0bl9ub19lbmNyeXB0KCk8MCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyNl bmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICBpZiAoIWNrX3RuX2F1dGhfaW5fcHJvZ3Jlc3Mo KSkgeyAvKiB3ZSBhcmUgZmluaXNoZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNrX3Ru X2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9TU0wpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRMUyB3YXMgc3VjY2Vzc2Z1bC4gIERpc2FibGUgRU5DUllQVElPTiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9O R19SRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNS WVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQubmVlZF90b19z ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBja19lbmNyeXB0X3NlbmRfc3VwcG9ydCgp OworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9FTkNSWVBUSU9OKS5l bmNyeXB0Lm5lZWRfdG9fc2VuZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgfQorICAg ICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBD S19FTkNSWVBUSU9OCisgICAgICAgICAgY2FzZSBURUxPUFRfRU5DUllQVElPTjoKKyAgICAgICAg ICAgIGlmIChja190bl9zYl9lbmNyeXB0KChjaGFyICopc2IsIG4pIDwgMCkgeworICAgICAgICAg ICAgICAgIGlmIChURUxPUFRfVV9NT0RFKHgpID09IFROX05HX01VIHx8CisgICAgICAgICAgICAg ICAgICAgIFRFTE9QVF9NRV9NT0RFKHgpID09IFROX05HX01VKQorICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgICAgICAgICAg ICB3aHljbG9zZWQgPSBXQ19URUxPUFQ7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0z KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoVEVM T1BUX01FX01PREUoeCkgPT0gVE5fTkdfUlEpCisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BU X01FX01PREUoeCkgPSBUTl9OR19BQzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9V X01PREUoeCkgPT0gVE5fTkdfUlEpCisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9E RSh4KSA9IFROX05HX0FDOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo VEVMT1BUX01FKHgpKSB7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRSh4KSA9IDA7Cisg ICAgICAgICAgICAgICAgICAgIGlmICh0bl9zb3B0KFdPTlQseCkgPCAwKQorICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGlmIChURUxPUFRfVSh4KSkgeworICAgICAgICAgICAgICAgICAgICBURUxPUFRfVSh4KSA9IDA7 CisgICAgICAgICAgICAgICAgICAgIGlmICh0bl9zb3B0KERPTlQseCkgPCAwKQorICAgICAgICAg ICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVm IElLU19PUFRJT04KKyAgICAgICAgICBjYXNlIFRFTE9QVF9LRVJNSVQ6CisgICAgICAgICAgICBy ZXR1cm4oaWtzX3RuX3NiKHNiLCBuLTIpKTsKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisjaWZk ZWYgVE5fQ09NUE9SVAorICAgICAgICAgIGNhc2UgVEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAg ICByZXR1cm4odG5jX3RuX3NiKHNiLCBuLTIpKTsKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisg ICAgICAgICAgY2FzZSBURUxPUFRfVFRZUEU6CisgICAgICAgICAgICBzd2l0Y2ggKHNiWzBdKSB7 CisgICAgICAgICAgICAgIGNhc2UgVEVMUVVBTF9TRU5EOiAgICAgICAgLyogU0VORCB0ZXJtaW5h bCB0eXBlPyAqLworICAgICAgICAgICAgICAgIGlmICggIXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRz dCgwKSB8fCB0bl9pbml0ICkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG5fc3R0eXAoKSA8 IDApIC8qIFllcywgc28gc2VuZCBpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9UVFlQRSkudGVybS5uZWVkX3RvX3NlbmQgPSAxOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBURUxRVUFM X0lTOiB7ICAgICAgICAvKiBJUyB0ZXJtaW5hbCB0eXBlPyAqLworICAgICAgICAgICAgICAgICAg LyogSVMgdGVybWluYWwgdHlwZSAtLSByZW1vdGUgZ2F2ZSB1cyBpdHMgY3VycmVudCB0eXBlICov CisgICAgICAgICAgICAgICAgICBpbnQgaSA9IDA7CisjaWZuZGVmIE9TMgorICAgICAgICAgICAg ICAgICAgQ0hBUiBvbGR0ZXJtWzY0XSwgKnA7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAg ICAgICAgICAvKiBJc29sYXRlIHRoZSBzcGVjaWZpZWQgdGVybWluYWwgdHlwZSBzdHJpbmcgKi8K KyAgICAgICAgICAgICAgICAgIHdoaWxlIChzYltpKytdICE9IElBQykgeworICAgICAgICAgICAg ICAgICAgICAgIGlmIChpID09IDQwIHx8ICAgIC8qIG1heCBsZW4gb2YgdGVybSBzdHJpbmcgLSBS RkMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2JbaV0gPT0gSUFDKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIHNiW2ldID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQor I2lmZGVmIE9TMgorI2lmbmRlZiBOT1RFUk0KKyAgICAgICAgICAgICAgICAgIHN0cnVwcigmKHNi WzFdKSk7ICAgICAvKiBVcHBlciBjYXNlIGl0ICovCisgICAgICAgICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDw9IG1heF90dDsgaSsrKSB7IC8qIGZpbmQgaXQgaW4gb3VyIGxpc3QgKi8KKyAgICAg ICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcCgmKHNiWzFdKSx0dF9pbmZvW2ldLnhfbmFtZSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaSAhPSBUVF9WVE5UKSAvKiBjYW4ndCBzdXBw b3J0IFZUTlQgYXMgc2VydmVyICovCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFNldCB0ZXJtaW5hbCB0eXBlIHRvIHRoZSBvbmUgY2hvc2Vu ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IHR0X3R5cGUpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2V0dGVybXR5cGUoaSwwKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgaWYgKGkgPiBtYXhfdHQgJiYKKyAgICAgICAgICAgICAg ICAgICAgICBzdHJjbXAoJihzYlsxXSksVEVMT1BUX1NCKFRFTE9QVF9UVFlQRSkudGVybS50eXBl KSkgeworICAgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkbid0IGZpbmQgdGhlIHNwZWNpZmll ZCB0ZXJtIHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBzYls0MF0gPSAnXDAnOworICAg ICAgICAgICAgICAgICAgICAgIHN0cmNweShURUxPUFRfU0IoVEVMT1BUX1RUWVBFKS50ZXJtLnR5 cGUsJihzYlsxXSkpOworICAgICAgICAgICAgICAgICAgICAgIC8qIFNCIFRUWVBFIFNFTkQgKi8K KyAgICAgICAgICAgICAgICAgICAgICB0bl9zc2JvcHQoVEVMT1BUX1RUWVBFLFRFTFFVQUxfU0VO RCxOVUxMLDApOworICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VTkFOU1dFUkVEX1NCKFRF TE9QVF9UVFlQRSk9MTsKKyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1RFUk0gKi8K KyNlbHNlIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgcCA9IChDSEFSICopIGdldGVudigi VEVSTSIpOworICAgICAgICAgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAgICAgICAgIGNr c3RybmNweSgoY2hhciAqKW9sZHRlcm0sKGNoYXIgKilwLDYzKTsKKyAgICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb2xkdGVybVswXSA9ICdcMCc7CisgICAgICAgICAg ICAgICAgICBja2xvd2VyKChjaGFyICopJihzYlsxXSkpOyAvKiBMb3dlciBjYXNlIG5ldyB0ZXJt ICovCisgICAgICAgICAgICAgICAgICBja21ha21zZyh0ZXJtX2J1Ziw2NCwiVEVSTT0iLChjaGFy ICopJihzYlsxXSksTlVMTCxOVUxMKTsKKyNpZmRlZiBPUzJPUlVOSVgKKyNpZm5kZWYgTk9QVVRF TlYKKyAgICAgICAgICAgICAgICAgIHB1dGVudih0ZXJtX2J1Zik7CisjZW5kaWYgLyogTk9QVVRF TlYgKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyNpZmRlZiBDS19DVVJTRVMKKyNpZm5kZWYg TVlDVVJTRVMKKyNpZm5kZWYgQ09IRVJFTlQKKyAgICAgICAgICAgICAgICAgIGlmICh0cm1idWYp IHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAodGdldGVudCh0cm1idWYsKGNoYXIgKikmc2Jb MV0pIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbnN1cHBvcnRlZCB0ZXJt aW5hbC4gIElmIG5ldyBhbmQgb2xkIHRlcm1pbmFsICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHR5cGVzIGRvIG5vdCBtYXRjaCwgYXNrIGZvciBhbm90aGVyIHR5cGUuICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJjbXAoKGNoYXIgKilvbGR0ZXJtLChjaGFyICop JnNiWzFdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0IgVFRZUEUgU0VO RCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5fc3Nib3B0KFRFTE9QVF9UVFlQ RSxURUxRVUFMX1NFTkQsTlVMTCwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRF TE9QVF9VTkFOU1dFUkVEX1NCKFRFTE9QVF9UVFlQRSk9MTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisjZW5kaWYgLyogQ0tf Q1VSU0VTICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIENLX0VOVklST05NRU5UCisjaWZkZWYgQ0tf WERJU1BMT0MKKyAgICAgICAgICBjYXNlIFRFTE9QVF9YRElTUExPQzogICAgICAgICAvKiBTZW5k IFgtRGlzcGxheSBMb2NhdGlvbiAqLworICAgICAgICAgICAgaWYgKHNiWzBdID09IFRFTFFVQUxf U0VORCkgey8qIFNFTkQgWC1EaXNwbGF5IExvYz8gKi8KKyAgICAgICAgICAgICAgICBpZiAoICF0 bl9kZWxheV9zYiB8fCAhdG5fb3V0c3QoMCkgfHwgdG5faW5pdCApIHsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKHRuX3N4ZGlzcGxvYygpIDwgMCkgICAgIC8qIFllcywgc28gc2VuZCBpdC4gKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9YRElTUExPQykueGRp c3AubmVlZF90b19zZW5kID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICAvKiBJUyAtLSBYIERpc3BsYXkgTG9jYXRpb24gKG5vdCBzdXBwb3J0ZWQpICov CisgICAgICAgICAgICBlbHNlIGlmIChzYlswXSA9PSBURUxRVUFMX0lTKSB7CisgICAgICAgICAg ICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgIC8qIElzb2xhdGUgdGhlIHNwZWNpZmll ZCBYLWRpc3BsYXkgc3RyaW5nICovCisgICAgICAgICAgICAgICAgd2hpbGUgKHNiW2krK10gIT0g SUFDKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID49IFRTQlVGU0laKQorICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2JbaV0g PT0gSUFDKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzYltpXSA9ICdcMCc7CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJURUxORVQgU0IgWERJU1BMT0Mg SVMiLCZzYlsxXSwwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIENLX1hESVNQTE9DICovCisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KKyAgICAgICAg ICBjYXNlIFRFTE9QVF9OQVdTOgorICAgICAgICAgICAgICBpZiAoc3N0ZWxuZXQKKyNpZmRlZiBJ S1NECisgICAgICAgICAgICAgICAgICAgfHwgaW5zZXJ2ZXIKKyNlbmRpZiAvKiBJS1NEICovCisg ICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICBpbnQgdyA9IDAsIGggPSAw OworICAgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgICAgLyogQXQg dGhpcyBwb2ludCBzYltdIHNob3VsZCBjb250YWluIHdpZHRoIGFuZCBoZWlnaHQgKi8KKyAgICAg ICAgICAgICAgICAgIGlmIChzYltpXSA9PSBJQUMpIGkrKzsKKyAgICAgICAgICAgICAgICAgIHcg PSAoc2JbaSsrXSA8PCA4KTsgICAvKiBzYXZlIHVwcGVyIGhlaWdodCAqLworICAgICAgICAgICAg ICAgICAgaWYgKHNiW2ldID09IElBQykgaSsrOworICAgICAgICAgICAgICAgICAgdyArPSBzYltp KytdOyAgICAgICAgIC8qIHNhdmUgdGhlIHdpZHRoICovCisgICAgICAgICAgICAgICAgICBpZiAo c2JbaV0gPT0gSUFDKSBpKys7CisgICAgICAgICAgICAgICAgICBoID0gKHNiW2krK10gPDwgOCk7 ICAgLyogc2F2ZSB1cHBlciBoZWlnaHQgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChzYltpXSA9 PSBJQUMpIGkrKzsKKyAgICAgICAgICAgICAgICAgIGggKz0gc2JbaSsrXTsKKyAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTEsInRuX2Rvb3AgTkFXUyBTQiIsIndpZHRoIix3KTsKKyAgICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsInRuX2Rvb3AgTkFXUyBTQiIsImhlaWdodCIsaCk7CisKKyAg ICAgICAgICAgICAgICAgIGlmICh3ID09IDApCisgICAgICAgICAgICAgICAgICAgIHcgPSA4MDsK KyAgICAgICAgICAgICAgICAgIGlmIChoID09IDApCisgICAgICAgICAgICAgICAgICAgIGggPSAy NDsKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICAgICAgICAgICAgaWYgKHRjcF9pbmNvbWluZyB8 fCBpbnNlcnZlcikgeworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgIHR0X2NvbHNb VlRFUk1dID0gdzsKKyAgICAgICAgICAgICAgICAgICAgICB0dF9yb3dzW1ZURVJNXSA9IGg7Cisg ICAgICAgICAgICAgICAgICAgICAgVnNjcm5TZXRXaWR0aChWVEVSTSwgdyk7CisgICAgICAgICAg ICAgICAgICAgICAgVnNjcm5TZXRIZWlnaHQoVlRFUk0sIGgrKHR0X3N0YXR1c1tWVEVSTV0/MTow KSk7CisjaWZkZWYgSUtTRAorICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlcikgewor ICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRfY29scyA9IHR0X2NvbHNbVkNNRF0gPSB3Owor ICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3NbVkNNRF0gPSBoOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBWc2NyblNldFdpZHRoKFZDTUQsIHcpOworICAgICAg ICAgICAgICAgICAgICAgICAgICBWc2NyblNldEhlaWdodChWQ01ELCBoKTsKKyAgICAgICAgICAg ICAgICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworI2Vsc2UgLyogT1MyICovCisgICAgICAg ICAgICAgICAgICAgICAgdHRfY29scyA9IHc7CisgICAgICAgICAgICAgICAgICAgICAgdHRfcm93 cyA9IGg7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICB9IGVsc2UgeworI2lm ZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgIHR0X2NvbHNbVkNNRF0gPSB3OworICAgICAg ICAgICAgICAgICAgICAgIHR0X3Jvd3NbVkNNRF0gPSBoOworICAgICAgICAgICAgICAgICAgICAg IFZzY3JuU2V0V2lkdGgoVkNNRCwgdyk7CisgICAgICAgICAgICAgICAgICAgICAgVnNjcm5TZXRI ZWlnaHQoVkNNRCwgaCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgICAg Y21kX2NvbHMgPSB3OworICAgICAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gaDsKKyAgICAg ICAgICAgICAgICAgIH0KKyNlbHNlIC8qIE5PTE9DQUwgKi8KKyAgICAgICAgICAgICAgICAgIGNt ZF9jb2xzID0gdzsKKyAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0gaDsKKyNlbmRpZiAvKiBO T0xPQ0FMICovCisKKyAgICAgICAgICAgICAgICAgIC8qIEFkZCBMSU5FUyBhbmQgQ09MVU1OUyB0 byB0aGUgZW52aXJvbm1lbnQgKi8KKyAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKChjaGFyICop cm93c19idWYsMTYsIkxJTkVTPSIsY2tpdG9hKGgpLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAg ICAgICBja21ha21zZygoY2hhciAqKWNvbHNfYnVmLDE2LCJDT0xVTU5TPSIsY2tpdG9hKHcpLE5V TEwsTlVMTCk7CisjaWZkZWYgT1MyT1JVTklYCisjaWZuZGVmIE5PUFVURU5WCisgICAgICAgICAg ICAgICAgICBwdXRlbnYocm93c19idWYpOworICAgICAgICAgICAgICAgICAgcHV0ZW52KGNvbHNf YnVmKTsKKyNlbmRpZiAvKiBOT1BVVEVOViAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIENLX0VOVklST05NRU5U CisgICAgICAgICAgY2FzZSBURUxPUFRfTkVXRU5WSVJPTjoKKyAgICAgICAgICAgIHN3aXRjaCAo c2JbMF0pIHsKKyAgICAgICAgICAgICAgY2FzZSBURUxRVUFMX0lTOiAgICAgICAgICAgICAgICAg IC8qIElTICovCisgICAgICAgICAgICAgIGNhc2UgVEVMUVVBTF9JTkZPOiAgICAgICAgICAgICAg ICAvKiBJTkZPICovCisgICAgICAgICAgICAgICAgaWYgKHNiWzBdID09IFRFTFFVQUxfSVMpCisg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0bl9kb29wIE5FVy1FTlYgU0IgSVMiLCIiLG4t Myk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi dG5fZG9vcCBORVctRU5WIFNCIElORk8iLCIiLG4tMyk7CisgICAgICAgICAgICAgICAgaWYgKHNz dGVsbmV0IHx8IGluc2VydmVyKSB7IC8qIFllcywgcmVjZWl2ZSBpdC4gKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKHRuX3JuZW52KChDSEFSICopJnNiWzFdLG4tMykgPCAwKQorICAgICAgICAg ICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRFTFFVQUxfU0VORDogICAgICAgIC8qIFNF TkQgKi8KKyAgICAgICAgICAgICAgICBpZiAoIHNzdGVsbmV0IHx8IGluc2VydmVyICkgICAgICAg ICAvKiBpZ25vcmUgaWYgc2VydmVyICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIC8qIFdlIG5lZWQgdG8gdGFrZSB0aGUgc2JbXSBhbmQgYnVpbGQgYSBzdHJ1 Y3R1cmUgKi8KKyAgICAgICAgICAgICAgICAvKiBjb250YWluaW5nIGFsbCBvZiB0aGUgdmFyaWFi bGVzIGFuZCB0eXBlcyB0aGF0ICovCisgICAgICAgICAgICAgICAgLyogd2UgYXJlIHN1cHBvc2Vk IHRvIGtlZXAgdHJhY2sgb2YgYW5kIHNlbmQgdG8gICAqLworICAgICAgICAgICAgICAgIC8qIHRo ZSBob3N0LCB0aGVuIGNhbGwgdG5fc25lbnYoKS4gICAgICAgICAgICAgICAgICAqLworICAgICAg ICAgICAgICAgIC8qIE9yIHdlIGNhbiBwdW50IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLworICAgICAgICAgICAgICAgIGlmICggIXRuX2RlbGF5X3NiIHx8ICF0bl9vdXRzdCgw KSB8fCB0bl9pbml0ICkgeworICAgICAgICAgICAgICAgICAgaWYgKHRuX3NuZW52KChDSEFSICop JnNiWzFdLG4tMykgPCAwKSAvKiBZZXMsIHNlbmQgaXQuICovCisgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZuZGVmIFZNUworICAg ICAgICAgICAgICAgICAgQ0hBUiAqIHh4eDsKKyAgICAgICAgICAgICAgICAgIHh4eCA9IChDSEFS ICopIG1hbGxvYyhuLTEpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg KiB4eHg7CisgICAgICAgICAgICAgICAgICB4eHggPSAodW5zaWduZWQgY2hhciAqKSBtYWxsb2Mo bi0xKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAgICAgICAgIC8qIFBvc3Rwb25lIHNl bmRpbmcgdW50aWwgZW5kIG9mIHRuX2luaSgpICovCisgICAgICAgICAgICAgICAgICBURUxPUFRf U0IoVEVMT1BUX05FV0VOVklST04pLmVudi5zdHIgPSB4eHg7CisgICAgICAgICAgICAgICAgICBp ZiAoVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYuc3RyKSB7CisgICAgICAgICAgICAg ICAgICBtZW1jcHkoKGNoYXIgKilURUxPUFRfU0IoVEVMT1BUX05FV0VOVklST04pLmVudi5zdHIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmc2JbMV0sbi0zKTsKKyAgICAg ICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfTkVXRU5WSVJPTikuZW52LnN0cltuLTNdID0g SUFDOworICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdFTlZJUk9OKS5lbnYu c3RyW24tMl0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9ORVdF TlZJUk9OKS5lbnYubGVuID0gbi0zOworICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9ORVdFTlZJUk9OKS5lbnYubmVlZF90b19zZW5kID0gMTsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KKyNp ZmRlZiBDS19TTkRMT0MKKyAgICAgICAgICBjYXNlIFRFTE9QVF9TTkRMT0M6IHsKKyAgICAgICAg ICAgICAgaWYgKCBkZWJsb2cgKSB7CisgICAgICAgICAgICAgICAgICBzYltuLTJdID0gJ1wwJzsK KyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIlRFTE5FVCBTZW5kLUxvY2F0aW9uIixzYiww KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9Cisj ZW5kaWYgLyogQ0tfU05ETE9DICovCisgICAgICAgICAgfSAvKiBzd2l0Y2ggKi8KKyAgICAgICAg YnJlYWs7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVEVMTkVUIERPIE9QVElPTiAqLwordG5fZG9vcChD SEFSIHosIGludCBlY2hvLCBpbnQgKCpmbikoaW50KSkKKyNlbHNlCit0bl9kb29wKHosIGVjaG8s IGZuKSBDSEFSIHo7IGludCBlY2hvOyBpbnQgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogdG5fZG9vcCAqLyB7CisgICAgaW50IHg9MCwgeT0wOworCisgICAgZGVidWcoRjEwMSwi dG5fZG9vcCBjaGFyIiwiIix6KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0bl9kb29wIHR0bnByb3RvIiwi Iix0dG5wcm90byk7CisKKyAgICBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMyk7CisKKyNpZmRl ZiBDS19TU0wKKyAgICBkZWJ1ZyhGMTAxLCJ0bl9kb29wIHNzbF9yYXdfZmxhZyIsIiIsc3NsX3Jh d19mbGFnKTsKKyAgICBpZiAoc3NsX3Jhd19mbGFnIHx8IHRsc19yYXdfZmxhZykgcmV0dXJuKDcp OworI2VuZGlmCS8qIENLX1NTTCAqLworICAgIGRlYnVnKEYxMDAsInRuX2Rvb3AgdHRucHJvdG8g cHJvY2VlZGluZy4uLiIsIiIsMCk7CisKKyAgICBpZiAoeiAhPSAoQ0hBUikgSUFDKSB7CisgICAg ICAgIGRlYnVnKEYxMDEsInRuX2Rvb3AgYmFkIGNhbGwiLCIiLHopOworICAgICAgICByZXR1cm4o LTEpOworICAgIH0KKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpICAgICAgICAgICAgICAvKiBD aGVjayBuZXR3b3JrIHR5cGUgKi8KKyAgICAgIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8g IT0gTlBfVEVMTkVUICYmCisgICAgICAgICB0dG5wcm90byAhPSBOUF9OT05FKSAgICAgICAgICAg LyogQ2hlY2sgcHJvdG9jb2wgKi8KKyAgICAgICAgcmV0dXJuKDApOworCisgICAgeCA9IHRuX3hk b29wKHosZWNobyxmbik7CisgICAgaWYgKHggPj0gMCAmJiAhdG5fYmVndW4pIHsKKyAgICAgICAg eSA9IHRuX3N0YXJ0KCk7CisgICAgfQorICAgIHJldHVybih5IDwgMCA/IHkgOiB4KTsKK30KKwor I2lmZGVmIENLX0VOVklST05NRU5UCisKKy8qIFRlbG5ldCByZWNlaXZlIG5ldyBlbnZpcm9ubWVu dCAqLworLyogUmV0dXJucyAtMSBvbiBlcnJvciwgMCBpZiBub3RoaW5nIGhhcHBlbnMsIDEgb24g c3VjY2VzcyAqLworLyogSW4gb3JkZXIgZm9yIHRoaXMgY29kZSB0byB3b3JrLCBzYltsZW5dID09 IElBQyAgICAgICAgICAqLworLyogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCB0aGUgVVNFUiBl bnZpcm9ubWVudCB2YXJpYWJsZSAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5fcm5lbnYo Q0hBUiAqIHNiLCBpbnQgbGVuKQorI2Vsc2UKK3RuX3JuZW52KHNiLCBsZW4pIENIQVIgKiBzYjsg aW50IGxlbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5fcm5lbnYgKi8geyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlY2VpdmUgbmV3IGVudmlyb25tZW50ICovCisgICAgY2hhciB2 YXJuYW1lWzE3XTsKKyAgICBjaGFyIHZhbHVlWzY1XTsKKyAgICBjaGFyICogcmVwbHkgPSAwLCAq IHMgPSAwOworICAgIGludCBpLGosayxuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogV29ya2VyLiAqLworICAgIGludCB0eXBlID0gMDsgLyogMCBmb3IgTk9ORSwgMSBmb3IgVkFS LCAyIGZvciBVU0VSVkFSLCAqLworICAgICAgICAgICAgICAgICAgLyogMyBmb3IgVkFMVUUgaW4g cHJvZ3Jlc3MgKi8KKworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOworICAg IGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKKyAgICBpZiAoc2IgPT0gTlVM TCkgcmV0dXJuKC0xKTsKKworICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuKDEpOworCisgICAgLyoK KyAgICBQYWlycyBvZiA8dHlwZT4gW1ZBUj0wLCBWQUxVRT0xLCBFU0M9MiwgVVNFUlZBUj0zXSA8 dmFsdWU+ICJ1bnRlcm1pbmF0ZWQiCisgICAgZm9sbG93IGhlcmUgdW50aWwgZG9uZS4uLgorICAg ICovCisgICAgZm9yIChpID0gMCwgaiA9IDAsIGsgPSAwLCB0eXBlID0gMCwgdmFybmFtZVswXT0g J1wwJzsgaSA8PSBsZW47IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNiW2ldKSB7CisgICAgICAg IGNhc2UgVEVMX0VOVl9WQVI6ICAgICAgICAgICAgICAgLyogVkFSICovCisgICAgICAgIGNhc2Ug VEVMX0VOVl9VU0VSVkFSOiAgICAgICAgICAgLyogVVNFUlZBUiAqLworICAgICAgICBjYXNlIElB QzogICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiB0aGUgbGlzdCAqLworICAgICAgICAg ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAg ICAgLyogTm90aGluZyBpbiBwcm9ncmVzcyAqLworICAgICAgICAgICAgICAgIC8qIElmIHdlIGdl dCBJQUMgb25seSwgdGhlbiB0aGF0IG1lYW5zIHRoZXJlIHdlcmUgKi8KKyAgICAgICAgICAgICAg ICAvKiBubyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2VuZC4gIHdlIGFyZSBkb25lICovCisg ICAgICAgICAgICAgICAgaWYgKGogPT0gMCAmJiBzYltpXSA9PSBJQUMpCisgICAgICAgICAgICAg ICAgICAgIHJldHVybigxKTsKKyAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAg ICAvKiBWQVIgaW4gcHJvZ3Jlc3MgKi8KKyAgICAgICAgICAgICAgY2FzZSAyOiAgICAgICAgICAg ICAgICAgICAvKiBVU0VSVkFSIGluIHByb2dyZXNzICovCisgICAgICAgICAgICAgIGNhc2UgMzog ICAgICAgICAgICAgICAgICAgLyogVkFMVUUgaW4gcHJvZ3Jlc3MgKi8KKyAgICAgICAgICAgICAg ICB2YWx1ZVtrXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgdmFybmFtZVtqXSA9ICdcMCc7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwidG5fcm5lbnYgdmFybmFtZSIsdmFybmFtZSx0eXBl KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0bl9ybmVudiB2YWx1ZSIsdmFsdWUsdHlw ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAodmFybmFtZSwiVVNFUiIpKSB7CisjaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNrX3RuX2F1dGhf dmFsaWQoKSAhPSBBVVRIX1ZBTElEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4g Y2hhciBzelVzZXJOYW1lUmVxdWVzdGVkW107CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJ0bl9ybmVudiAhPSBBVVRIX1ZBTElEIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNweShzelVzZXJOYW1lUmVxdWVzdGVkLHZhbHVlLFVJREJVRkxFTik7Cisg ICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLHZhbHVlLFVJREJVRkxFTik7 CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9m bGFnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bHNfaXNfdXNlcl92YWxp ZChzc2xfY29uLCB1aWRidWYpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl eHRlcm4gY2hhciBzelVzZXJOYW1lQXV0aGVudGljYXRlZFtdOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsdWlkYnVmLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJREJVRkxFTik7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICh0bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIHRsc19pc191c2VyX3ZhbGlkKHRsc19jb24sIHVpZGJ1ZikgKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVk W107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzelVzZXJOYW1l QXV0aGVudGljYXRlZCx1aWRidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVUlEQlVGTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0 aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7ICAgIC8qIEFVVEhfVkFMSUQgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIGludCB4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInRu X3JuZW52IEFVVEhfVkFMSUQgdWlkYnVmIix1aWRidWYsMCk7CisKKyNpZmRlZiBPUzIKKyAgICAg ICAgICAgICAgICAgICAgICAgIHggPSBja3N0cmNtcCh2YWx1ZSx1aWRidWYsLTEsMCk7IC8qIGNh c2UgaW5zZW5zaXRpdmUgKi8KKyNpZmRlZiBOVAorICAgICAgICAgICAgICAgICAgICAgICAgLyog TlRMTSBhdXRoZW50aWNhdGlvbiByZXR1cm5zIG5hbWVzIG9mIHRoZSBmb3JtICovCisgICAgICAg ICAgICAgICAgICAgICAgICAvKiBET01BSU5cdXNlci4gIFdlIG5lZWQgdG8gY2hlY2sgdG8gc2Vl IG9mIHRoZSAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTRVIgVkFSIGNvbnRhaW5z IGEgZG9tYWluIG5hbWUgb3Igbm90LiAgSWYgICAqLworICAgICAgICAgICAgICAgICAgICAgICAg Lyogbm90LCB0aGVuIHdlIGRvIG5vdCB3YW50IHRvIGNoYW5nZSBzdGF0ZSBpZiAgICovCisgICAg ICAgICAgICAgICAgICAgICAgICAvKiB0aGUgdWlkYnVmIG1hdGNoZXMgdGhlIFVTRVIgVkFSIHdo ZW4gdGhlICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPTUFJTiBpcyBpZ25v cmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCB4ICYmIGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9OVExNICkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBzMT1OVUxMLCAqIHMyPU5VTEw7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgIGxlbjEsIGxlbjIsIGk7CisKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsZW4xID0gc3RybGVuKHZhbHVlKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3IgKCBpPWxlbjEtMSA7IGk+PTAgOyBpLS0pIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZVtpXSA9PSAnXFwnICkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSAmdmFsdWVbaSsxXTsgICAvKiBET01B SU4gZm91bmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzMSA9PSBOVUxMICkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4yID0gc3RybGVuKHVpZGJ1Zik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGk9bGVuMi0xIDsgaT49MCA7 IGktLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB1aWRidWZb aV0gPT0gJ1xcJyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz MiA9ICZ1aWRidWZbaSsxXTsgICAvKiBET01BSU4gZm91bmQgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggczIgKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeCA9IGNrc3RyY21wKHZhbHVlLHMyLC0xLDApOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBO VCAqLworI2Vsc2UgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gY2tzdHJj bXAodmFsdWUsdWlkYnVmLC0xLDEpOyAvKiBjYXNlIHNlbnNpdGl2ZSAqLworI2VuZGlmIC8qIE9T MiAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4ICkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVSZXF1ZXN0ZWRbXTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLHZhbHVlLFVJREJVRkxFTik7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVSZXF1ZXN0ZWQs dmFsdWUsVUlEQlVGTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2Zpbmlz aGVkKEFVVEhfVVNFUik7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bHNfaXNfdXNlcl92YWxpZChzc2xfY29uLCB1aWRi dWYpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQo QVVUSF9WQUxJRCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENL X1NTTCAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9 CisjZWxzZSAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAgICAgICAgICAgICAgICAgICBja3N0 cm5jcHkodWlkYnVmLHZhbHVlLFVJREJVRkxFTik7CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJ T04gKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB2YXJuYW1lWzBdID0gJ1wwJzsKKyAgICAgICAgICAgIHZhbHVl WzBdID0gJ1wwJzsKKyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgayA9IDA7CisgICAg ICAgICAgICB0eXBlID0gKHNiW2ldID09IFRFTF9FTlZfVVNFUlZBUiA/IDIgOiAgICAgIC8qIFVT RVJWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgc2JbaV0gPT0gVEVMX0VOVl9WQVIgPyAxIDog IC8qIFZBUiAqLworICAgICAgICAgICAgICAgICAgICAgMAorICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRFTF9FTlZfVkFMVUU6IC8qIFZB TFVFICovCisgICAgICAgICAgICBpZiAoIHR5cGUgPT0gMSB8fCB0eXBlID09IDIgKQorICAgICAg ICAgICAgICAgIHR5cGUgPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVEVM X0VOVl9FU0M6ICAgICAgIC8qIEVTQyAqLworICAgICAgICAgICAgLyogVGFrZSBuZXh0IGNoYXJh Y3RlciBsaXRlcmFsbHkgKi8KKyAgICAgICAgICAgIGlmICggKytpID49IGxlbiApCisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBvdGhlcndpc2UsIGZhbGx0aHJvdWdoIHNv IGJ5dGUgd2lsbCBiZSBhZGRlZCB0byBzdHJpbmcuICovCisgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgMTogICAgIC8qIFZBUiBp biBwcm9ncmVzcyAqLworICAgICAgICAgICAgY2FzZSAyOiAgICAgLyogVVNFUlZBUiBpbiBwcm9n cmVzcyAqLworICAgICAgICAgICAgICAgIGlmICggaiA8IDE2ICkKKyAgICAgICAgICAgICAgICAg ICAgdmFybmFtZVtqKytdID0gc2JbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgaWYgKCBrIDwgNjQgKQorICAgICAgICAgICAg ICAgICAgICB2YWx1ZVtrKytdID0gc2JbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisvKiBUaGVz ZSBhcmUgZm9yIE1pY3Jvc29mdCBTRlUgdmVyc2lvbiAyIFRlbG5ldCBTZXJ2ZXIgKi8KKyNkZWZp bmUgU0ZVVExOVFZFUiAiU0ZVVExOVFZFUiIKKyNkZWZpbmUgU0ZVVExOVE1PREUgIlNGVVRMTlRN T0RFIgorI2RlZmluZSBTRlVUTE5UVkVSX1ZBTFVFICAiMiIKKyNkZWZpbmUgU0ZVVExOVE1PREVf VkFMVUUgImNvbnNvbGUiCS8qIFRoZSBvdGhlciB2YWx1ZSBpcyAic3RyZWFtIiAqLworCisvKiBU ZWxuZXQgc2VuZCBuZXcgZW52aXJvbm1lbnQgKi8KKy8qIFJldHVybnMgLTEgb24gZXJyb3IsIDAg aWYgbm90aGluZyBoYXBwZW5zLCAxIG9uIHN1Y2Nlc3MgKi8KKy8qIEluIG9yZGVyIGZvciB0aGlz IGNvZGUgdG8gd29yaywgc2JbbGVuXSA9PSBJQUMgICAgICAgICAgKi8KKworaW50CisjaWZkZWYg Q0tfQU5TSUMKK3RuX3NuZW52KENIQVIgKiBzYiwgaW50IGxlbikKKyNlbHNlCit0bl9zbmVudihz YiwgbGVuKSBDSEFSICogc2I7IGludCBsZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRu X3NuZW52ICovIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIG5ldyBlbnZpcm9ubWVu dCAqLworICAgIGNoYXIgdmFybmFtZVsxNl07CisgICAgY2hhciAqIHJlcGx5ID0gMCwgKiBzID0g MDsKKyAgICBpbnQgaSxqLG47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIuICov CisgICAgaW50IHR5cGUgPSAwOyAgICAgICAvKiAwIGZvciBOT05FLCAxIGZvciBWQVIsIDIgZm9y IFVTRVJWQVIgaW4gcHJvZ3Jlc3MgKi8KKyAgICBleHRlcm4gaW50IGNrX2xjbmFtZTsKKyAgICBj aGFyIGxvY2FsdWlkYnVmW1VJREJVRkxFTl07CS8qIChJbml0aWFsaXplZCBqdXN0IGJlbG93KSAq LworICAgIGNoYXIgKiB1dSA9IHVpZGJ1ZjsKKyAgICBjaGFyICogZGlzcCA9IE5VTEw7CisKKyAg ICBsb2NhbHVpZGJ1ZlswXSA9ICdcMCc7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1 cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOworICAgIGlm ICghc2IpIHJldHVybigtMSk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigw KTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAg ICBpZiAoVEVMT1BUX1UoVEVMT1BUX0ZPUldBUkRfWCkpIHsKKyAgICAgICAgZGlzcCA9IE5VTEw7 CisgICAgfSBlbHNlCisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisgICAgICAgIGRpc3AgPSAo Y2hhciAqKXRuX2dldF9kaXNwbGF5KCk7CisKKyAgICBpZiAoY2tfbGNuYW1lKSB7CisgICAgICAg IGNrc3RybmNweShsb2NhbHVpZGJ1Zix1aWRidWYsVUlEQlVGTEVOKTsKKyAgICAgICAgY2tsb3dl cihsb2NhbHVpZGJ1Zik7CisgICAgICAgIHV1ID0gbG9jYWx1aWRidWY7CisgICAgfQorCisgICAg Y2toZXhkdW1wKChDSEFSICopInRuX3NuZW52IHNiW10iLHNiLGxlbik7CisgICAgZGVidWcoRjEx MCwidG5fc25lbnYgdWlkYnVmIix1aWRidWYsMCk7CisgICAgZGVidWcoRjExMCwidG5fc25lbnYg bG9jYWx1aWRidWYiLGxvY2FsdWlkYnVmLDApOworICAgIGRlYnVnKEYxMTAsInRuX3NuZW52IHRu X2Vudl9zeXMiLHRuX2Vudl9zeXMsMCk7CisgICAgZGVidWcoRjExMCwidG5fc25lbnYgdG5fZW52 X2Rpc3AiLHRuX2Vudl9kaXNwLDApOworICAgIGRlYnVnKEYxMTAsInRuX3NuZW52IGRpc3AiLGRp c3AsMCk7CisKKyAgICAvKiBGaXJzdCBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB3 ZSB3aWxsIG5lZWQgKi8KKyAgICBmb3IgKGkgPSAwLCBqID0gMCwgbiA9IDAsIHR5cGUgPSAwLCB2 YXJuYW1lWzBdPSAnXDAnOyBpIDw9IGxlbjsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoc2JbaV0p IHsKKyAgICAgICAgICBjYXNlIFRFTF9FTlZfVkFSOiAgICAgICAgICAgICAvKiBWQVIgKi8KKyAg ICAgICAgICBjYXNlIFRFTF9FTlZfVVNFUlZBUjogICAgICAgICAvKiBVU0VSVkFSICovCisgICAg ICAgIGNhc2UgSUFDOiAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiB0aGUgbGlzdCAqLwor ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAg ICAgICAgICAgIC8qIE5vdGhpbmcgaW4gcHJvZ3Jlc3MgKi8KKyAgICAgICAgICAgICAgICAvKiBJ ZiB3ZSBnZXQgSUFDIG9ubHksIHRoZW4gdGhhdCBtZWFucyBzZW5kIGFsbCAqLworICAgICAgICAg ICAgICAgIC8qIFZBUiBhbmQgVVNFUlZBUi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICov CisgICAgICAgICAgICAgICAgaWYgKCEoaiA9PSAwICYmIHNiW2ldID09IElBQykpCisgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAg LyogVkFSIGluIHByb2dyZXNzICovCisgICAgICAgICAgICAgICAgdmFybmFtZVtqXSA9ICdcMCcg OworICAgICAgICAgICAgICAgIGlmICghdmFybmFtZVswXSkgeyAgICAgIC8qIFNlbmQgQWxsICov CisgICAgICAgICAgICAgICAgICAgIGlmICh1dVswXSkKKyAgICAgICAgICAgICAgICAgICAgICBu ICs9IHN0cmxlbih1dSkgKyA0ICsgMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2Vudl9q b2JbMF0pCisgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2pvYikgKyAz ICsgMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2Vudl9hY2N0WzBdKQorICAgICAgICAg ICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9hY2N0KSArIDQgKyAyOworICAgICAgICAg ICAgICAgICAgICBpZiAodG5fZW52X3BybnRbMF0pCisgICAgICAgICAgICAgICAgICAgICAgbiAr PSBzdHJsZW4odG5fZW52X3BybnQpICsgNyArIDI7CisgICAgICAgICAgICAgICAgICAgIGlmICh0 bl9lbnZfc3lzWzBdKQorICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9z eXMpICsgMTAgKyAyOworICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcCkKKyAgICAgICAgICAg ICAgICAgICAgICBuICs9IHN0cmxlbihkaXNwKSArIDcgKyAyOworICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJVU0VSIikgJiYgdXVbMF0pCisgICAgICAgICAgICAg ICAgICBuICs9IHN0cmxlbih1dSkgKyA0ICsgMjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgh c3RyY21wKHZhcm5hbWUsIkpPQiIpICYmIHRuX2Vudl9qb2JbMF0pCisgICAgICAgICAgICAgICAg ICBuICs9IHN0cmxlbih0bl9lbnZfam9iKSArIDMgKyAyOworICAgICAgICAgICAgICAgIGVsc2Ug aWYgKCFzdHJjbXAodmFybmFtZSwiQUNDVCIpICYmIHRuX2Vudl9hY2N0WzBdKQorICAgICAgICAg ICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X2FjY3QpICsgNCArIDI7CisgICAgICAgICAgICAg ICAgZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJQUklOVEVSIikgJiYgdG5fZW52X3BybnRbMF0p CisgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfcHJudCkgKyA3ICsgMjsKKyAg ICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIlNZU1RFTVRZUEUiKSAmJiB0 bl9lbnZfc3lzWzBdKQorICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X3N5cykg KyAxMCArIDI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJESVNQ TEFZIikgJiYgZGlzcCkKKyAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKGRpc3ApICsgNyAr IDI7CisgICAgICAgICAgICAgICAgLyogSWYgd2UgZ2V0IElBQyBvbmx5LCB0aGVuIHRoYXQgbWVh bnMgc2VuZCBhbGwgKi8KKyAgICAgICAgICAgICAgICAvKiBWQVIgYW5kIFVTRVJWQVIuICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgaWYgKCEoaiA9PSAw ICYmIHNiW2ldID09IElBQykpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgIC8qIFVTRVJWQVIgaW4gcHJvZ3Jlc3MgKi8K KyAgICAgICAgICAgICAgICB2YXJuYW1lW2pdID0gJ1wwJyA7CisgICAgICAgICAgICAgICAgaWYg KCF2YXJuYW1lWzBdKSB7ICAgICAgLyogU2VuZCBBbGwgKi8KKyAgICAgICAgICAgICAgICAgICAg aW50IHg7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHg9MCA7IHg8OCA7IHgrKyApIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmICggdG5fZW52X3VzZXJ2YXJbeF1bMF0gJiYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdG5fZW52X3VzZXJ2YXJbeF1bMV0gKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzBdKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cmxlbih0bl9lbnZfdXNlcnZhclt4XVsx XSkgKyAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgg dG5fc2Z1ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGNvbXBhdGliaWxpdHkg d2l0aCBNaWNyb3NvZnQgVGVsbmV0IFNlcnZlciAqLworICAgICAgICAgICAgICAgICAgICAgICAg biArPSBzdHJsZW4oU0ZVVExOVFZFUikgKyBzdHJsZW4oU0ZVVExOVFZFUl9WQUxVRSkgKyAyOwor ICAgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oU0ZVVExOVE1PREUpICsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RybGVuKFNGVVRMTlRNT0RFX1ZBTFVFKSArIDI7CisgICAg ICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBDS19TTkRMT0MKKyAgICAgICAgICAgICAgICAgICAg aWYgKCB0bl9sb2MgJiYgdG5fbG9jWzBdICkKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0g c3RybGVuKCJMT0NBVElPTiIpICsgc3RybGVuKHRuX2xvYykgKyAyOworI2VuZGlmIC8qIENLX1NO RExPQyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0bl9z ZnUgJiYgIXN0cmNtcCh2YXJuYW1lLFNGVVRMTlRWRVIpKQorICAgICAgICAgICAgICAgICAgICBu ICs9IHN0cmxlbihTRlVUTE5UVkVSKSArIHN0cmxlbihTRlVUTE5UVkVSX1ZBTFVFKSArIDI7Cisg ICAgICAgICAgICAgICAgZWxzZSBpZiAodG5fc2Z1ICYmICFzdHJjbXAodmFybmFtZSxTRlVUTE5U TU9ERSkpCisgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKFNGVVRMTlRNT0RFKSArIHN0 cmxlbihTRlVUTE5UTU9ERV9WQUxVRSkgKyAyOworI2lmZGVmIENLX1NORExPQworICAgICAgICAg ICAgICAgIGVsc2UgaWYgKCB0bl9sb2MgJiYgdG5fbG9jWzBdICYmICFzdHJjbXAodmFybmFtZSwi TE9DQVRJT04iKSkKKyAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oIkxPQ0FUSU9OIikg KyBzdHJsZW4odG5fbG9jKSArIDI7CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisgICAgICAgICAg ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgICAg ICAgICBmb3IgKCB4PTAgOyB4PDggOyB4KysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIHRuX2Vudl91c2VydmFyW3hdWzBdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRuX2Vudl91c2VydmFyW3hdWzFdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFz dHJjbXAodmFybmFtZSx0bl9lbnZfdXNlcnZhclt4XVswXSkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbiArPSBzdHJsZW4odG5fZW52X3VzZXJ2YXJbeF1bMF0pCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsgc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzFdKSArIDI7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJuYW1lWzBdID0gJ1wwJzsKKyAg ICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgdHlwZSA9IChzYltpXSA9PSBURUxfRU5WX1VT RVJWQVIgPyAyIDogICAgICAvKiBVU0VSVkFSICovCisgICAgICAgICAgICAgICAgICAgIHNiW2ld ID09IFRFTF9FTlZfVkFSID8gMSA6ICAgICAgICAgIC8qIFZBUiAqLworICAgICAgICAgICAgICAg ICAgICAwCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgVEVMX0VOVl9WQUxVRTogICAgICAgICAgIC8qIFZBTFVFICovCisgICAgICAgICAg ICAvKiBQcm90b2NvbCBFcnJvciAqLworICAgICAgICAgICAgZGVidWcoRjEwMCwgIlRFTE5FVCBT dWJuZWdvdGlhdGlvbiBlcnJvciAtIFZBTFVFIGluIFNFTkQiLCAiIiwwKTsKKyAgICAgICAgICAg IGlmICh0bl9kZWIgfHwgZGVic2VzKQorICAgICAgICAgICAgICB0bl9kZWJ1ZygiVEVMTkVUIFN1 Ym5lZ290aWF0aW9uIGVycm9yIC0gVkFMVUUgaW4gU0VORCIpOworICAgICAgICAgICAgcmV0dXJu KDApOworICAgICAgICAgIGNhc2UgVEVMX0VOVl9FU0M6ICAgICAvKiBFU0MgKi8KKyAgICAgICAg ICAgIGlmICgrK2kgPj0gbGVuKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgaWYgKGogPCAxNiApCisgICAgICAgICAgICAgIHZhcm5hbWVbaisr XSA9IHNiW2ldOworICAgICAgICB9CisgICAgfQorICAgIHJlcGx5ID0gbWFsbG9jKG4gKyAxNik7 ICAgICAgICAgICAgICAvKiBMZWF2ZSByb29tIGZvciBJQUMgc3R1ZmYgKi8KKyAgICBpZiAoIXJl cGx5KSB7CisgICAgICAgIGRlYnVnKEYxMDAsICJURUxORVQgU3VibmVnb3RpYXRpb24gZXJyb3Ig LSBtYWxsb2MgZmFpbGVkIiwgIiIsMCk7CisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKQor ICAgICAgICAgIHRuX2RlYnVnKCJURUxORVQgU3VibmVnb3RpYXRpb24gZXJyb3IgLSBtYWxsb2Mg ZmFpbGVkIik7CisKKyAgICAgICAgLyogU2VuZCBhIHJldHVybiBwYWNrZXQgd2l0aCBubyB2YXJp YWJsZXMgc28gdGhhdCB0aGUgaG9zdCAqLworICAgICAgICAvKiBtYXkgY29udGludWUgd2l0aCBh ZGRpdGlvbmFsIG5lZ290aWF0aW9ucyAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICh0bl9z c2JvcHQoVEVMT1BUX05FV0VOVklST04sVEVMUVVBTF9JUywiIiwwKSA8IDApCisgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIC8qIE5vdyBjb25z dHJ1Y3QgdGhlIHJlYWwgcmVwbHkgKi8KKworICAgIG4gPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFN0YXJ0IGF0IGJlZ2lubmluZyBvZiBidWZmZXIgKi8KKy8qCisgIFBhaXJz IG9mIDx0eXBlPiBbVkFSPTAsIFZBTFVFPTEsIEVTQz0yLCBVU0VSVkFSPTNdIDx2YWx1ZT4gInVu dGVybWluYXRlZCIKKyAgZm9sbG93IGhlcmUgdW50aWwgZG9uZS4uLgorKi8KKyAgICBmb3IgKGkg PSAwLCBqID0gMCwgdHlwZSA9IDAsIHZhcm5hbWVbMF09ICdcMCc7IGkgPD0gbGVuOyBpKyspIHsK KyAgICAgICAgc3dpdGNoIChzYltpXSkgeworICAgICAgICAgIGNhc2UgVEVMX0VOVl9WQVI6ICAg ICAgICAgICAgIC8qIFZBUiAqLworICAgICAgICAgIGNhc2UgVEVMX0VOVl9VU0VSVkFSOiAgICAg ICAgIC8qIFVTRVJWQVIgKi8KKyAgICAgICAgICBjYXNlIElBQzogICAgICAgICAgICAgICAgICAg ICAvKiBFbmQgb2YgdGhlIGxpc3QgKi8KKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg ICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgaW4gcHJvZ3Jl c3MgKi8KKyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgSUFDIG9ubHksIHRoZW4gdGhhdCBt ZWFucyBzZW5kIGFsbCAqLworICAgICAgICAgICAgICAgIC8qIFZBUiBhbmQgVVNFUlZBUi4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCEoaiA9PSAw ICYmIHNiW2ldID09IElBQykpCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAvKiBWQVIgaW4gcHJvZ3Jlc3MgKi8KKyAgICAg ICAgICAgICAgICB2YXJuYW1lW2pdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcm5h bWVbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgLyogU2VuZCBBbGwgKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKHV1WzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9 IFRFTF9FTlZfVkFSOyAvKiBWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgm cmVwbHlbbisxXSwiVVNFUiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbis1XSA9 IFRFTF9FTlZfVkFMVUU7ICAgICAgICAgICAgIC8qIFZBTFVFICovCisgICAgICAgICAgICAgICAg ICAgICAgICBzdHJjcHkoJnJlcGx5W24rNl0sdXUpOworICAgICAgICAgICAgICAgICAgICAgICAg biArPSBzdHJsZW4odXUpICsgNCArIDI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgaWYgKHRuX2Vudl9qb2JbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHJlcGx5W25dID0gVEVMX0VOVl9WQVI7IC8qIFZBUiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgc3RyY3B5KCZyZXBseVtuKzFdLCJKT0IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl cGx5W24rNF0gPSBURUxfRU5WX1ZBTFVFOyAgICAgLyogVkFMVUUgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmNweSgmcmVwbHlbbis1XSx0bl9lbnZfam9iKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9qb2IpICsgMyArIDI7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRuX2Vudl9hY2N0WzBdKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAvKiBWQVIgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwiQUNDVCIpOworICAgICAg ICAgICAgICAgICAgICAgICAgcmVwbHlbbis1XSA9IFRFTF9FTlZfVkFMVUU7ICAgICAvKiBWQUxV RSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzZdLHRuX2Vudl9h Y2N0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9hY2N0KSAr IDQgKyAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0 bl9lbnZfcHJudFswXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxf RU5WX1ZBUjsgLyogVkFSICovCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5 W24rMV0sIlBSSU5URVIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rOF0gPSBU RUxfRU5WX1ZBTFVFOyAgICAgLyogVkFMVUUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0 cmNweSgmcmVwbHlbbis5XSx0bl9lbnZfcHJudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBu ICs9IHN0cmxlbih0bl9lbnZfcHJudCkgKyA3ICsgMjsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICBpZiAodG5fZW52X3N5c1swXSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1ZBUjsgLyogVkFSICovCisgICAgICAgICAgICAg ICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sIlNZU1RFTVRZUEUiKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJlcGx5W24rMTFdID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxMl0sdG5fZW52X3N5cyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih0bl9lbnZfc3lzKSArIDEwICsgMjsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbl0gPSBURUxfRU5WX1ZBUjsgLyogVkFSICov CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sIkRJU1BMQVkiKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rOF0gPSBURUxfRU5WX1ZBTFVFOyAgICAg LyogVkFMVUUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbis5XSxk aXNwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKGRpc3ApICsgNyArIDI7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAodmFybmFtZSwiVVNFUiIpICYmIHV1WzBdKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5 W25dID0gVEVMX0VOVl9WQVI7ICAgICAvKiBWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgc3Ry Y3B5KCZyZXBseVtuKzFdLCJVU0VSIik7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rNV0g PSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAgICAgICBzdHJjcHko JnJlcGx5W24rNl0sdXUpOworICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbih1dSkgKyA0 ICsgMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodmFybmFtZSwiSk9CIikg JiYgdG5fZW52X2pvYlswXSkgeworICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9F TlZfVkFSOyAgICAgLyogVkFSICovCisgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlb bisxXSwiSk9CIik7CisgICAgICAgICAgICAgICAgICAgIHJlcGx5W24rNF0gPSBURUxfRU5WX1ZB TFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rNV0s dG5fZW52X2pvYik7CisgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9qb2Ip ICsgMyArIDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHZhcm5hbWUsIkFD Q1QiKSAmJiB0bl9lbnZfYWNjdFswXSkgeworICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9 IFRFTF9FTlZfVkFSOyAgICAgLyogVkFSICovCisgICAgICAgICAgICAgICAgICAgIHN0cmNweSgm cmVwbHlbbisxXSwiQUNDVCIpOworICAgICAgICAgICAgICAgICAgICByZXBseVtuKzVdID0gVEVM X0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBs eVtuKzZdLHRuX2Vudl9hY2N0KTsKKyAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4odG5f ZW52X2FjY3QpICsgNCArIDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHZh cm5hbWUsIlBSSU5URVIiKSAmJiB0bl9lbnZfcHJudFswXSkgeworICAgICAgICAgICAgICAgICAg ICByZXBseVtuXSA9IFRFTF9FTlZfVkFSOyAgICAgLyogVkFSICovCisgICAgICAgICAgICAgICAg ICAgIHN0cmNweSgmcmVwbHlbbisxXSwiUFJJTlRFUiIpOworICAgICAgICAgICAgICAgICAgICBy ZXBseVtuKzhdID0gVEVMX0VOVl9WQUxVRTsgLyogVkFMVUUgKi8KKyAgICAgICAgICAgICAgICAg ICAgc3RyY3B5KCZyZXBseVtuKzldLHRuX2Vudl9wcm50KTsKKyAgICAgICAgICAgICAgICAgICAg biArPSBzdHJsZW4odG5fZW52X3BybnQpICsgNyArIDI7CisgICAgICAgICAgICAgICAgfSBlbHNl IGlmICghc3RyY21wKHZhcm5hbWUsIlNZU1RFTVRZUEUiKSAmJiB0bl9lbnZfc3lzWzBdKSB7Cisg ICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9WQVI7ICAgICAvKiBWQVIgKi8K KyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLCJTWVNURU1UWVBFIik7Cisg ICAgICAgICAgICAgICAgICAgIHJlcGx5W24rMTFdID0gVEVMX0VOVl9WQUxVRTsgICAgICAgIC8q IFZBTFVFICovCisgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxMl0sdG5fZW52 X3N5cyk7CisgICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHRuX2Vudl9zeXMpICsgMTAg KyAyOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh2YXJuYW1lLCJESVNQTEFZ IikgJiYgZGlzcCkgeworICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVkFS OyAgICAgLyogVkFSICovCisgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSwi RElTUExBWSIpOworICAgICAgICAgICAgICAgICAgICByZXBseVtuKzhdID0gVEVMX0VOVl9WQUxV RTsgLyogVkFMVUUgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzldLGRp c3ApOworICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihkaXNwKSArIDcgKyAyOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGdldCBJQUMgb25seSwg dGhlbiB0aGF0IG1lYW5zIHNlbmQgYWxsICovCisgICAgICAgICAgICAgICAgICAvKiBWQVIgYW5k IFVTRVJWQVIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAg ICAgaWYgKCEoaiA9PSAwICYmIHNiW2ldID09IElBQykpCisgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6ICAgICAvKiBVU0VSVkFSIGluIHByb2dyZXNzICov CisgICAgICAgICAgICAgICAgICB2YXJuYW1lW2pdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAg IGlmICghdmFybmFtZVswXSkgeworICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQgQWxsICov CisgICAgICAgICAgICAgICAgICAgICAgaW50IHgseTsKKyAgICAgICAgICAgICAgICAgICAgICBm b3IgKCB4PTAgOyB4PDggOyB4KysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgg dG5fZW52X3VzZXJ2YXJbeF1bMF0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 bl9lbnZfdXNlcnZhclt4XVsxXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl cGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB5ID0gc3RybGVuKHRuX2Vudl91c2VydmFyW3hdWzBdKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSx0bl9lbnZfdXNlcnZhclt4 XVswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuK3krMV0gPSBURUxf RU5WX1ZBTFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry Y3B5KCZyZXBseVtuK3krMl0sdG5fZW52X3VzZXJ2YXJbeF1bMV0pOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbiArPSB5K3N0cmxlbih0bl9lbnZfdXNlcnZhclt4XVsxXSkrMjsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICBpZiAoIHRuX3NmdSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ29tcGF0aWJpbGl0eSB3aXRoIE1pY3Jvc29mdCBUZWxuZXQgU2VydmVyICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyog VkFSICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSxTRlVU TE5UVkVSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlbbisxMV0gPSBURUxfRU5W X1ZBTFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJl cGx5W24rMTJdLFNGVVRMTlRWRVJfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICAgICAgICBu ICs9IHN0cmxlbihTRlVUTE5UVkVSKStzdHJsZW4oU0ZVVExOVFZFUl9WQUxVRSkrMjsKKworICAg ICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRFTF9FTlZfVVNFUlZBUjsgICAgIC8q IFZBUiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMV0sU0ZV VExOVE1PREUpOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuKzEyXSA9IFRFTF9F TlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgm cmVwbHlbbisxM10sU0ZVVExOVE1PREVfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICAgICAg ICBuICs9IHN0cmxlbihTRlVUTE5UTU9ERSkrc3RybGVuKFNGVVRMTlRNT0RFX1ZBTFVFKSsyOwor ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBpZiAodG5fbG9j ICYmIHRuX2xvY1swXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICByZXBseVtuXSA9IFRF TF9FTlZfVVNFUlZBUjsgICAgIC8qIFZBUiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJjcHkoJnJlcGx5W24rMV0sIkxPQ0FUSU9OIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg IHJlcGx5W24rOV0gPSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJjcHkoJnJlcGx5W24rMTBdLHRuX2xvYyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIG4gKz0gc3RybGVuKCJMT0NBVElPTiIpICsgc3RybGVuKHRuX2xvYykgKyAyOwor ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0gIGVsc2UgaWYgKHRu X3NmdSAmJiAhc3RyY21wKHZhcm5hbWUsU0ZVVExOVFZFUikpIHsKKyAgICAgICAgICAgICAgICAg ICAgICByZXBseVtuXSA9IFRFTF9FTlZfVVNFUlZBUjsgICAgIC8qIFZBUiAqLworICAgICAgICAg ICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlbbisxXSxTRlVUTE5UVkVSKTsKKyAgICAgICAgICAg ICAgICAgICAgICByZXBseVtuKzExXSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAg ICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzEyXSxTRlVUTE5UVkVSX1ZBTFVFKTsK KyAgICAgICAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihTRlVUTE5UVkVSKSArIHN0cmxlbihT RlVUTE5UVkVSX1ZBTFVFKSArIDI7CisgICAgICAgICAgICAgICAgICB9ICBlbHNlIGlmICh0bl9z ZnUgJiYgIXN0cmNtcCh2YXJuYW1lLFNGVVRMTlRNT0RFKSkgeworICAgICAgICAgICAgICAgICAg ICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFSICovCisgICAgICAgICAg ICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzFdLFNGVVRMTlRNT0RFKTsKKyAgICAgICAgICAg ICAgICAgICAgICByZXBseVtuKzEyXSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAg ICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzEzXSxTRlVUTE5UTU9ERV9WQUxVRSk7 CisgICAgICAgICAgICAgICAgICAgICAgbiArPSBzdHJsZW4oU0ZVVExOVE1PREUpICsgc3RybGVu KFNGVVRMTlRNT0RFX1ZBTFVFKSArIDI7CisgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgQ0tf U05ETE9DCisgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0bl9sb2MgJiYgdG5fbG9jWzBdICYm ICFzdHJjbXAodmFybmFtZSwiTE9DQVRJT04iKSl7CisgICAgICAgICAgICAgICAgICAgICAgcmVw bHlbbl0gPSBURUxfRU5WX1VTRVJWQVI7ICAgICAvKiBWQVIgKi8KKyAgICAgICAgICAgICAgICAg ICAgICBzdHJjcHkoJnJlcGx5W24rMV0sIkxPQ0FUSU9OIik7CisgICAgICAgICAgICAgICAgICAg ICAgcmVwbHlbbis5XSA9IFRFTF9FTlZfVkFMVUU7IC8qIFZBTFVFICovCisgICAgICAgICAgICAg ICAgICAgICAgc3RyY3B5KCZyZXBseVtuKzEwXSx0bl9sb2MpOworICAgICAgICAgICAgICAgICAg ICAgIG4gKz0gc3RybGVuKCJMT0NBVElPTiIpICsgc3RybGVuKHRuX2xvYykgKyAyOworICAgICAg ICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1NORExPQyAqLworICAgICAgICAgICAgICAgICAg ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgaW50IHgseTsKKyAgICAgICAgICAgICAgICAg ICAgICBmb3IgKCB4PTAgOyB4PDggOyB4KysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg IGlmICggdG5fZW52X3VzZXJ2YXJbeF1bMF0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICFzdHJjbXAodmFybmFtZSx0bl9lbnZfdXNlcnZhclt4XVswXSkpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlcGx5W25dID0gVEVMX0VOVl9VU0VSVkFSOyAgICAgLyogVkFS ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gc3RybGVuKHRuX2Vudl91c2Vy dmFyW3hdWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSgmcmVwbHlb bisxXSx0bl9lbnZfdXNlcnZhclt4XVswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXBseVtuK3krMV0gPSBURUxfRU5WX1ZBTFVFOyAvKiBWQUxVRSAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RyY3B5KCZyZXBseVtuK3krMl0sdG5fZW52X3VzZXJ2YXJbeF1b MV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiArPSB5K3N0cmxlbih0bl9lbnZf dXNlcnZhclt4XVsxXSkrMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhcm5hbWVbMF0gPSAnXDAnOworICAgICAg ICAgICAgaiA9IDA7CisgICAgICAgICAgICB0eXBlID0gKHNiW2ldID09IFRFTF9FTlZfVVNFUlZB UiA/IDIgOiAgICAgIC8qIFVTRVJWQVIgKi8KKyAgICAgICAgICAgICAgICAgICAgc2JbaV0gPT0g VEVMX0VOVl9WQVIgPyAxIDogIC8qIFZBUiAqLworICAgICAgICAgICAgICAgICAgICAwCisgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVEVM X0VOVl9WQUxVRTogLyogVkFMVUUgKi8KKyAgICAgICAgICAgIC8qIFByb3RvY29sIEVycm9yICov CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCAiVEVMTkVUIFN1Ym5lZ290aWF0aW9uIGVycm9yIC0g VkFMVUUgaW4gU0VORCIsICIiLDApOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMp CisgICAgICAgICAgICAgIHRuX2RlYnVnKCJURUxORVQgU3VibmVnb3RpYXRpb24gZXJyb3IgLSBW QUxVRSBpbiBTRU5EIik7CisgICAgICAgICAgICByZXR1cm4oMCk7ICAvKiBXYXMgLTEgYnV0IHRo YXQgd291bGQgYmUgdGFrZW4gYXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuIEkv TyBlcnJvciwgc28gYWJzb3JiIGl0IGFuZCBnbyBvbi4gKi8KKyAgICAgICAgICBjYXNlIFRFTF9F TlZfRVNDOiAgICAgLyogRVNDICovCisgICAgICAgICAgICAvKiBOb3Qgc3VyZSB3aGF0IHRoaXMg Zm9yLiAgUXVvdGUgbmV4dCBjaGFyYWN0ZXI/ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdmFybmFtZVtqKytdID0gc2JbaV07CisgICAgICAg IH0KKyAgICB9CisgICAgaWYgKHRuX3NzYm9wdChURUxPUFRfTkVXRU5WSVJPTixURUxRVUFMX0lT LHJlcGx5LG4pIDwgMCkgeworICAgICAgICBmcmVlKHJlcGx5KTsKKyAgICAgICAgcmV0dXJuKC0x KTsKKyAgICB9CisgICAgZnJlZShyZXBseSk7CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8q IENLX0VOVklST05NRU5UICovCisKKy8qIFRlbG5ldCBzZW5kIHRlcm1pbmFsIHR5cGUgKi8KKy8q IFJldHVybnMgLTEgb24gZXJyb3IsIDAgaWYgbm90aGluZyBoYXBwZW5zLCAxIGlmIHR5cGUgc2Vu dCBzdWNjZXNzZnVsbHkgKi8KKworaW50Cit0bl9zdHR5cCgpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2VuZCB0ZWxuZXQgdGVybWluYWwgdHlwZS4gKi8KKyAgICBjaGFyICp0dG47 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOYW1lIG9mIHRlcm1pbmFsIHR5cGUuICovCisj aWZkZWYgT1MyCisgICAgc3RhdGljIGludCBhbGlhcyA9IC0xOyAgICAgICAgICAgICAgLyogd2hp Y2ggYWxpYXMgYXJlIHdlIHVzaW5nID8gKi8KKyAgICBpbnQgc2V0dHlwZSA9IDA7CisjZW5kaWYg LyogT1MyICovCisgICAgaW50IGksIHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29y a2VyLiAqLworICAgIGludCB0bnRlcm1mbGcgPSAwOworCisgICAgaWYgKHR0bmV0ICE9IE5FVF9U Q1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDAp OworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX1RUWVBFKSkgcmV0dXJuKDApOworCisjaWZk ZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMu bWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NT TCAqLworICAgIHR0biA9IE5VTEw7CisKKyNpZm5kZWYgTk9URVJNCisjaWZkZWYgT1MyCisgICAg aWYgKCF0bl90ZXJtKSB7CisgICAgICAgIGlmICh0dG51bSA9PSAtMSkgeworICAgICAgICAgICAg dHRudW0gPSB0dF90eXBlOworICAgICAgICAgICAgc2V0dHlwZSA9IDA7CisgICAgICAgICAgICBh bGlhcyA9IC0xOworICAgICAgICB9IGVsc2UgaWYgKHR0bnVtZW5kKSB7CisgICAgICAgICAgICB0 dG51bWVuZCA9IDA7CisgICAgICAgICAgICBzZXR0eXBlID0gMDsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGlmICh0dF9pbmZvW3R0X3R5cGVdLnhfYWxpYXNlc1srK2FsaWFzXSA9PSBO VUxMKSAgeworICAgICAgICAgICAgICAgIGlmICgtLXR0X3R5cGUgPCAwKQorICAgICAgICAgICAg ICAgICAgdHRfdHlwZSA9IG1heF90dDsKKyAgICAgICAgICAgICAgICBpZiAodHRudW0gPT0gdHRf dHlwZSkKKyAgICAgICAgICAgICAgICAgIHR0bnVtZW5kID0gMTsKKyAgICAgICAgICAgICAgICBz ZXR0eXBlID0gMTsKKyAgICAgICAgICAgICAgICBhbGlhcyA9IC0xOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIGlmICh0dF90eXBlID49IDAgJiYgdHRfdHlwZSA8PSBtYXhfdHQp IHsKKyAgICAgICAgICAgIGlmIChhbGlhcyA9PSAtMSkKKyAgICAgICAgICAgICAgdHRuID0gdHRf aW5mb1t0dF90eXBlXS54X25hbWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHR0 biA9IHR0X2luZm9bdHRfdHlwZV0ueF9hbGlhc2VzW2FsaWFzXTsKKyAgICAgICAgfSBlbHNlCisg ICAgICAgICAgdHRuID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBzZXR0eXBlID0gMDsKKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT1RFUk0gKi8KKworICAgIGlmICh0bl90ZXJtKSB7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIHR5cGUgb3ZlcnJpZGU/ICovCisgICAgICAg IGRlYnVnKEYxMTAsInRuX3N0dHlwIix0bl90ZXJtLDApOworICAgICAgICBpZiAoKnRuX3Rlcm0p IHsKKyAgICAgICAgICAgIHR0biA9IHRuX3Rlcm07CisgICAgICAgICAgICB0bnRlcm1mbGcgPSAx OworICAgICAgICB9CisgICAgfSBlbHNlIGRlYnVnKEYxMDAsInRuX3N0dHlwIG5vIHRlcm0gb3Zl cnJpZGUiLCIiLDApOworCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgaWYgKCF0dG4pIHsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogSWYgbm8gb3ZlcnJpZGUsICovCisgICAgICAgIHR0biA9 IGdldGVudigiVEVSTSIpOyAgICAgICAgICAgLyogZ2V0IGl0IGZyb20gdGhlIGVudmlyb25tZW50 LiAqLworICAgIH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgIGlmICgodHRuID09ICgo Y2hhciAqKTApKSB8fCAoKGludClzdHJsZW4odHRuKSA+PSBUU0JVRlNJWikpCisgICAgICB0dG4g PSAiVU5LTk9XTiI7CisgICAgc2Jfb3V0WzBdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0WzFdID0gKENIQVIpIFNCOyAgICAgICAg ICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0WzJdID0gVEVMT1BUX1RU WVBFOyAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIFR5cGUgKi8KKyAgICBzYl9vdXRbM10gPSAo Q0hBUikgMDsgICAgICAgICAgICAgICAgICAgLyogSXMuLi4gKi8KKyAgICBmb3IgKGkgPSA0OyAq dHRuOyB0dG4rKyxpKyspIHsgICAgICAvKiBDb3B5IGFuZCB1cHBlcmNhc2UgaXQgKi8KKyNpZmRl ZiBWTVMKKyAgICAgICAgaWYgKCF0bnRlcm1mbGcgJiYgKnR0biA9PSAnLScgJiYKKyAgICAgICAg ICAgICghc3RyY21wKHR0biwiLTgwIikgfHwgIXN0cmNtcCh0dG4sIi0xMzIiKSkpCisgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICBzYl9v dXRbaV0gPSAoY2hhcikgKCghdG50ZXJtZmxnICYmIGlzbG93ZXIoKnR0bikpID8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRvdXBwZXIoKnR0bikgOgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKnR0bik7CisgICAgfQorICAgIHR0biA9IChjaGFyICopc2Jfb3V0OyAgICAg ICAgICAgICAgICAgICAvKiBQb2ludCBiYWNrIHRvIGJlZ2lubmluZyAqLworI2lmZGVmIERFQlVH CisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIHNiX291dFtp XSA9ICdcMCc7ICAgICAgICAgICAgICAgICAgIC8qIEZvciBkZWJ1Z2dpbmcgKi8KKyAgICAgICAg Y2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwiVEVMTkVUIFNFTlQgU0IgIiwKKyAgICAg ICAgICAgICAgICAgVEVMT1BUKFRFTE9QVF9UVFlQRSksIiBJUyAiLChjaGFyICopc2Jfb3V0KzQs IiBJQUMgU0UiLAorICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAg c2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMg U0UgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0 LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAw KTsgICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0 ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKyNpZm5kZWYg Tk9URVJNCisjaWZkZWYgT1MyCisgICAgaWYgKHNldHR5cGUpCisgICAgICAgIHNldHRlcm10eXBl KHR0X3R5cGUsMCk7CisgICAgZWxzZSB7CisgICAgICAgIGlwYWRsMjUoKTsKKyAgICAgICAgVnNj cm5Jc0RpcnR5KFZURVJNKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9U RVJNICovCisgICAgcmV0dXJuKDEpOworfQorCisjaWZkZWYgQ0tfRU5WSVJPTk1FTlQKKyNpZmRl ZiBDS19YRElTUExPQworCisvKiBUZWxuZXQgc2VuZCB4ZGlzcGxheSBsb2NhdGlvbiAqLworLyog UmV0dXJucyAtMSBvbiBlcnJvciwgMCBpZiBub3RoaW5nIGhhcHBlbnMsIDEgaWYgdHlwZSBzZW50 IHN1Y2Nlc3NmdWxseSAqLworCitpbnQKK3RuX3N4ZGlzcGxvYygpIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTZW5kIHRlbG5ldCBYIGRpc3BsYXkgbG9jYXRpb24uICovCisgICAgY2hhciAq IGRpc3A9TlVMTDsKKyAgICBpbnQgaSxyYzsKKworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikg cmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKKwor ICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9YRElTUExPQykpIHJldHVybigwKTsKKworI2lmZGVm IENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1l X2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wg Ki8KKworI2lmZGVmIENLX0ZPUldBUkRfWAorICAgIGlmIChURUxPUFRfVShURUxPUFRfRk9SV0FS RF9YKSkgeworICAgICAgICBkaXNwID0gTlVMTDsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19G T1JXQVJEX1ggKi8KKyAgICAgICAgZGlzcCA9IChjaGFyICopdG5fZ2V0X2Rpc3BsYXkoKTsKKyAg ICBkZWJ1ZyhGMTEwLCJ0bl9zeGRpc3Bsb2MiLGRpc3AsMCk7CisKKyAgICBpZiAoIWRpc3ApIHsK KyAgICAgICAgLyogQ2FuJ3QgZG8gYm90aCwgc2VuZCBXT05UICovCisgICAgICAgIGlmICh0bl9z b3B0KFdPTlQsVEVMT1BUX1hESVNQTE9DKSA8IDApCisgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICBURUxPUFRfVU5BTlNXRVJFRF9XT05UKFRFTE9QVF9YRElTUExPQykgPSAxOworICAg ICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgc2Jfb3V0WzBdID0gKENIQVIpIElBQzsgICAg ICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0WzFdID0gKENIQVIp IFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0WzJd ID0gVEVMT1BUX1hESVNQTE9DOyAgICAgICAgICAgIC8qIFgtRGlzcGxheSBMb2NhdGlvbiAqLwor ICAgIHNiX291dFszXSA9IChDSEFSKSAwOyAgICAgICAgICAgICAgICAgICAvKiBJcy4uLiAqLwor ICAgIGZvciAoaSA9IDQ7ICpkaXNwOyBkaXNwKyssaSsrKSB7ICAgICAgLyogQ29weSBhbmQgdXBw ZXJjYXNlIGl0ICovCisgICAgICAgIHNiX291dFtpXSA9IChjaGFyKSAqZGlzcDsKKyAgICB9Cisj aWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAg ICAgc2Jfb3V0W2ldID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgLyogRm9yIGRlYnVnZ2luZyAq LworICAgICAgICBja21ha3htc2coIHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAg ICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfWERJU1BMT0MpLAorICAgICAg ICAgICAgICAgICAgIiBJUyAiLChjaGFyICopc2Jfb3V0KzQsIiBJQUMgU0UiLAorICAgICAgICAg ICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAg ICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gKENIQVIp IFNFOyAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisjaWZkZWYgT1MyCisg ICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNp ZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4g Ki8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlm IChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYgLyog Q0tfWERJU1BMT0MgKi8KKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworCisjaWZkZWYgQ0tf Rk9SV0FSRF9YCitpbnQKK3RuX3NuZGZ3ZHgoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTZW5kIEZ3ZCBYIFNjcmVlbiBudW1iZXIgdG8gaG9zdCAqLworICAgIHVuc2lnbmVkIGNoYXIg c2NyZWVuID0gMDsKKyAgICBjaGFyICogZGlzcDsKKyAgICBpbnQgaSxyYzsKKworICAgIC8qIGlm ICghSVNfVEVMTkVUKCkpIHJldHVybigwKTsgKi8KKworICAgIGlmICghVEVMT1BUX1UoVEVMT1BU X0ZPUldBUkRfWCkpIHJldHVybigwKTsKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NC KFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVy bigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICAvKgorICAgICAqIFRoZSBm b3JtYXQgb2YgdGhlIERJU1BMQVkgdmFyaWFibGUgaXMgWzxob3N0PjpdPGRpc3BsYXk+Wy48c2Ny ZWVuPl0KKyAgICAgKiB3aGVyZSA8aG9zdD4gaXMgYW4gb3B0aW9uYWwgRE5TIG5hbWUgb3IgaXAg YWRkcmVzcyB3aXRoIGEgZGVmYXVsdCBvZgorICAgICAqIHRoZSBsb2NhbGhvc3Q7IHRoZSBzY3Jl ZW4gZGVmYXVsdHMgdG8gMAorICAgICAqLworCisgICAgZGlzcCA9IChjaGFyICopdG5fZ2V0X2Rp c3BsYXkoKTsKKyAgICBpZiAoZGlzcCkgeworICAgICAgICBpbnQgY29sb24sZG90OworICAgICAg ICBjb2xvbiA9IGNraW5kZXgoIjoiLGRpc3AsMCwwLDEpOworICAgICAgICBkb3QgICA9IGNraW5k ZXgoIi4iLCZkaXNwW2NvbG9uXSwwLDAsMSk7CisKKyAgICAgICAgaWYgKCBkb3QgKSB7CisgICAg ICAgICAgICBzY3JlZW4gPSBhdG9pKCZkaXNwW2NvbG9uK2RvdF0pOworICAgICAgICB9CisgICAg fSBlbHNlIHsKKyAgICAgICAgc2NyZWVuID0gMDsKKyAgICB9CisKKyAgICBpID0gMDsKKyAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFu ZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1 Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfRk9SV0FSRF9YOyAgICAg ICAgICAgLyogRm9yd2FyZCBYICovCisgICAgc2Jfb3V0W2krK10gPSBGV0RYX1NDUkVFTjsgICAg ICAgICAgICAgICAgLyogU2NyZWVuICovCisgICAgc2Jfb3V0W2krK10gPSBzY3JlZW47CisgICAg aWYgKCBzY3JlZW4gPT0gSUFDICkKKyAgICAgICAgc2Jfb3V0W2krK10gPSBJQUM7CisgICAgc2Jf b3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290 aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAg LyogbWFya2VkIGJ5IElBQyBTRSAqLworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0 bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFreG1zZyggdG5fbXNnX291dCxUTl9NU0df TEVOLAorICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRf Rk9SV0FSRF9YKSwKKyAgICAgICAgICAgICAgICAgICAiIFNDUkVFTiAiLGNrY3RveChzY3JlZW4s MSksIiBJQUMgU0UiLAorICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAg IFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZk ZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisg ICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICov CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAo cmMpCisgICAgICAgIHJldHVybigtMSk7CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENL X0ZPUldBUkRfWCAqLworCisjaWZkZWYgQ0tfU05ETE9DCitpbnQKK3RuX3NuZGxvYygpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTZW5kIGxvY2F0aW9uLiAqLworICAgIGludCBpLHJj OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlci4gKi8KKyAgICBjaGFyICp0 dGxvYzsKKworICAgIC8qIGlmICghSVNfVEVMTkVUKCkpIHJldHVybigwKTsgKi8KKworICAgIGlm ICghVEVMT1BUX01FKFRFTE9QVF9TTkRMT0MpKSByZXR1cm4oMCk7CisKKyNpZmRlZiBDS19TU0wK KyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dz KSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAg dHRsb2MgPSAodG5fbG9jID8gdG5fbG9jIDogIiIpOyAgICAgLyogSW4gY2FzZSB3ZSBhcmUgYmVp bmcgY2FsbGVkIGV2ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB0aG91Z2ggdGhlcmUgaXMgbm8gbG9jYXRpb24uICovCisgICAgc2Jfb3V0WzBdID0gKENI QVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0 WzFdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisg ICAgc2Jfb3V0WzJdID0gVEVMT1BUX1NORExPQzsgICAgICAgICAgICAgIC8qIExvY2F0aW9uICov CisgICAgZm9yIChpID0gMzsgKnR0bG9jICYmIGkgPCBUU0JVRlNJWjsgdHRsb2MrKyxpKyspIC8q IENvcHkgaXQgKi8KKyAgICAgIHNiX291dFtpXSA9IChjaGFyKSAqdHRsb2M7CisgICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlv biAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAvKiBtYXJr ZWQgYnkgSUFDIFNFICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGVi IHx8IGRlYnNlcykgeworICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAor ICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9TTkRMT0Mp LCIgIiwoY2hhciAqKXNiX291dCszLAorICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcg Ki8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dB SVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIi LDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNl bmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsg ICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgp OworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworICAgIHNiX291dFtp LTJdID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgZGVidWdnaW5nICovCisgICAg cmV0dXJuKDApOworfQorI2VuZGlmIC8qIENLX1NORExPQyAqLworCisjaWZkZWYgQ0tfTkFXUyAg ICAgICAgICAgICAgICAgIC8qICBOQVdTID0gTmVnb3RpYXRlIEFib3V0IFdpbmRvdyBTaXplICAq LworaW50Cit0bl9zbmF3cygpIHsgICAgICAgICAgICAgICAgICAgIC8qICBTZW5kIHRlcm1pbmFs IHdpZHRoIGFuZCBoZWlnaHQsIFJGQyAxMDczICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICBDSEFS IHNiX291dFsyNF07ICAgICAgICAgICAgLyogIG11bHRpcGxlIHRocmVhZHMgKi8KKyAgICBpbnQg aSA9IDAscmM7CisjaWZkZWYgT1MyCisgICAgaW50IHggPSBWc2NybkdldFdpZHRoKFZURVJNKSwK KyAgICB5ID0gVnNjcm5HZXRIZWlnaHQoVlRFUk0pIC0gKHR0X3N0YXR1c1tWVEVSTV0gPyAxIDog MCk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICBpbnQgeCA9IHR0X2NvbHMsIHkgPSB0dF9yb3dzOwor I2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7 CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOworICAgIGlmICghVEVM T1BUX01FKFRFTE9QVF9OQVdTKSkgcmV0dXJuKDApOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYg KFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAg ICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIGlmICh4IDwg MCkgeCA9IDA7CisgICAgaWYgKHkgPCAwKSB5ID0gMDsKKworICAgIGlmICh4ID09IFRFTE9QVF9T QihURUxPUFRfTkFXUykubmF3cy54ICYmIC8qIE9ubHkgc2VuZCBpZiBjaGFuZ2VkICovCisgICAg ICAgIHkgPT0gVEVMT1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnkKKyAgICAgICAgKQorICAgICAg cmV0dXJuKDApOworICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy54ID0geDsgIC8qIFJl bWVtYmVyIHRoZSBzaXplICAgICAqLworICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy55 ID0geTsKKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAvKiBT ZW5kIHRoZSBzdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOwor ICAgIHNiX291dFtpKytdID0gVEVMT1BUX05BV1M7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg KHggPj4gOCkgJiAweGZmOworICAgIGlmICgoQ0hBUikgc2Jfb3V0W2ktMV0gPT0gKENIQVIpIElB QykgICAvKiBJQUMgaW4gZGF0YSBtdXN0IGJlIGRvdWJsZWQgKi8KKyAgICAgIHNiX291dFtpKytd ID0gKENIQVIpIElBQzsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSAoeCAmIDB4ZmYpOworICAg IGlmICgoQ0hBUikgc2Jfb3V0W2ktMV0gPT0gKENIQVIpIElBQykKKyAgICAgIHNiX291dFtpKytd ID0gKENIQVIpIElBQzsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSAoeSA+PiA4KSAmIDB4ZmY7 CisgICAgaWYgKChDSEFSKSBzYl9vdXRbaS0xXSA9PSAoQ0hBUikgSUFDKQorICAgICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgSUFDOworICAgIHNiX291dFtpKytdID0gKENIQVIpICh5ICYgMHhmZik7 CisgICAgaWYgKChDSEFSKSBzYl9vdXRbaS0xXSA9PSAoQ0hBUikgSUFDKQorICAgICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgSUFDOworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsKKyAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBTRTsKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwg dG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0df TEVOLCJURUxORVQgU0VOVCBTQiBOQVdTICIsCisgICAgICAgICAgICAgICAgICBja2l0b2EoeCks IiAiLGNraXRvYSh5KSwiIElBQyBTRSIsCisgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZk ZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7Cisj ZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAg ICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyog REVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyog U2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRp ZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICov CisgICAgcmV0dXJuICgwKTsKK30KKyNlbmRpZiAvKiBDS19OQVdTICovCisKKyNpZmRlZiBUTl9D T01QT1JUCitzdGF0aWMgY2hhciAqIHRuY19zaWduYXR1cmUgPSBOVUxMOworc3RhdGljIGludCB0 bmNfbHNfbWFzayA9IDA7CitzdGF0aWMgaW50IHRuY19scyA9IDA7CitzdGF0aWMgaW50IHRuY19t c19tYXNrID0gMjU1Oworc3RhdGljIGludCB0bmNfbXMgPSAwOworc3RhdGljIGludCB0bmNfb2Zs b3cgPSAwOworc3RhdGljIGludCB0bmNfaWZsb3cgPSAwOworc3RhdGljIGludCB0bmNfYnBzID0g MDsKK3N0YXRpYyBpbnQgdG5jX2RhdGFzaXplID0gMDsKK3N0YXRpYyBpbnQgdG5jX3Bhcml0eSA9 IDA7CitzdGF0aWMgaW50IHRuY19zdG9wYml0ID0gMDsKK3N0YXRpYyBpbnQgdG5jX2JyZWFrID0g MDsKK3N0YXRpYyBpbnQgdG5jX2R0ciA9IDA7CitzdGF0aWMgaW50IHRuY19ydHMgPSAwOworc3Rh dGljIGludCB0bmNfc3VzcGVuZF94bWl0ID0gMDsKK3N0YXRpYyBpbnQgdG5jX2Jwc19pbmRleCA9 IC0xOworCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX2luaXQodm9pZCkKKyNlbHNlIC8qIENL X0FOU0lDICovCit0bmNfaW5pdCgpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19pbml0 ICovIHsKKyAgICBkZWJ1ZyhGMTAwLCJ0bmNfaW5pdCIsIiIsMCk7CisKKyAgICAvKiBpZiAoIUlT X1RFTE5FVCgpKSByZXR1cm4oMCk7ICovCisKKyAgICBpZiAodG5jX3NpZ25hdHVyZSkgeworICAg ICAgICBmcmVlKHRuY19zaWduYXR1cmUpOworICAgICAgICB0bmNfc2lnbmF0dXJlID0gTlVMTDsK KyAgICB9CisgICAgdG5jX2xzX21hc2sgPSAwOworICAgIHRuY19scyA9IDA7CisgICAgdG5jX21z X21hc2sgPSAyNTU7CisgICAgdG5jX21zID0gMDsKKyAgICB0bmNfb2Zsb3cgPSAwOworICAgIHRu Y19pZmxvdyA9IDA7CisgICAgdG5jX2JwcyA9IDA7CisgICAgdG5jX2RhdGFzaXplID0gMDsKKyAg ICB0bmNfcGFyaXR5ID0gMDsKKyAgICB0bmNfc3RvcGJpdCA9IDA7CisgICAgdG5jX2JyZWFrID0g MDsKKyAgICB0bmNfZHRyID0gMDsKKyAgICB0bmNfcnRzID0gMDsKKyAgICB0bmNfc3VzcGVuZF94 bWl0ID0gMDsKKyAgICB0bmNfYnBzX2luZGV4ID0gLTE7CisgICAgcmV0dXJuKDApOworfQorCitp bnQKKyNpZmRlZiBDS19BTlNJQwordG5fc25kY29tcG9ydCh2b2lkKQorI2Vsc2UgLyogQ0tfQU5T SUMgKi8KK3RuX3NuZGNvbXBvcnQoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bl9zbmRj b21wb3J0ICovIHsKKyAgICBpbnQgYmF1ZCwgZGF0YXNpemUsIHBhcml0eSwgc3RvcHNpemUsIG9m bG93LCBpZmxvdzsKKyAgICBDT05TVCBjaGFyICogc2lnbmF0dXJlOworCisgICAgLyogaWYgKCFJ U19URUxORVQoKSkgcmV0dXJuKDApOyAqLworCisgICAgZGVidWcoRjEwMCwidG5jX3NuZGNvbXBv cnQiLCIiLDApOworICAgIHNpZ25hdHVyZSA9IHRuY19nZXRfc2lnbmF0dXJlKCk7CisgICAgYmF1 ZCA9IHRuY19nZXRfYmF1ZCgpOworICAgIGRhdGFzaXplID0gdG5jX2dldF9kYXRhc2l6ZSgpOwor ICAgIHBhcml0eSA9IHRuY19nZXRfcGFyaXR5KCk7CisgICAgc3RvcHNpemUgPSB0bmNfZ2V0X3N0 b3BzaXplKCk7CisgICAgb2Zsb3cgPSB0bmNfZ2V0X29mbG93KCk7CisgICAgaWZsb3cgPSB0bmNf Z2V0X2lmbG93KCk7CisgICAgdG5jX3NldF9sc19tYXNrKDI1NSk7CisgICAgdG5jX3NldF9tc19t YXNrKDI1NSk7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5j X3dhaXQoQ0hBUiAqIG1zZywgaW50IG1zKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY193YWl0 KG1zZywgbXMpIENIQVIgKiBtc2c7IGludCBtczsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog dG5jX3dhaXQgKi8geworICAgIGludCByYywgdG5fd2FpdF9zYXZlID0gdG5fd2FpdF9mbGc7CisK KyAgICAvKiBpZiAoIUlTX1RFTE5FVCgpKSByZXR1cm4oMCk7ICovCisKKyAgICBkZWJ1ZyhGMTEx LCJ0bmNfd2FpdCIsImJlZ2luIixtcyk7CisgICAgaWYgKCBtcyApCisgICAgICAgIFRFTE9QVF9T QihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53YWl0X2Zvcl9tcyA9IDE7CisgICAgZWxzZQorICAg ICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAxOwor ICAgIHRuX3dhaXRfZmxnID0gMTsKKyAgICByYyA9IHRuX3dhaXQoKGNoYXIgKiltc2cpOworICAg IHRuX3B1c2goKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0bmNfd2FpdCIsImVuZCIsMCk7CisgICAgdG5f d2FpdF9mbGcgPSB0bl93YWl0X3NhdmU7CisgICAgcmV0dXJuKHJjKTsKK30KKworLyogUmV0dXJu cyAtMSBvbiBlcnJvciwgMCBvbiBzdWNjZXNzICovCisvKiBJbiBvcmRlciBmb3IgdGhpcyBjb2Rl IHRvIHdvcmssIHNiW2xlbl0gPT0gSUFDICAgICAgICAgICovCisKK2ludAorI2lmZGVmIENLX0FO U0lDCit0bmNfdG5fc2IoQ0hBUiAqIHNiLCBpbnQgbGVuKQorI2Vsc2UKK3RuY190bl9zYihzYiwg bGVuKSBDSEFSICogc2I7IGludCBsZW47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY190 bl9zYiAqLyB7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYg KHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOworICAgIGlmICghVEVMT1BUX01FKFRF TE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOworCisgICAgaWYgKCFzYikgcmV0dXJuKC0xKTsKKwor I2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBD S19TU0wgKi8KKworICAgIGRlYnVnKEYxMTEsInRuY190bl9zYiIsInNiWzBdIixzYlswXSk7Cisg ICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwibGVuIixsZW4pOworCisgICAgc3dpdGNoIChzYlsw XSkgeworICAgICAgY2FzZSBUTkNfQzJTX1NJR05BVFVSRToKKyAgICAgIGNhc2UgVE5DX1MyQ19T SUdOQVRVUkU6CisgICAgICAgIGRlYnVnKEYxMTEsInRuY190bl9zYiIsInNpZ25hdHVyZSIsbGVu KTsKKyAgICAgICAgaWYgKGxlbiA9PSAxKSB7CisgICAgICAgICAgICB0bmNfc2VuZF9zaWduYXR1 cmUoIktlcm1pdCBUZWxuZXQgQ29tIFBvcnQgT3B0aW9uIik7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2Ig PSAwOworICAgICAgICAgICAgaWYgKHRuY19zaWduYXR1cmUpCisgICAgICAgICAgICAgIGZyZWUo dG5jX3NpZ25hdHVyZSk7CisgICAgICAgICAgICB0bmNfc2lnbmF0dXJlID0gbWFsbG9jKGxlbik7 CisgICAgICAgICAgICBpZiAodG5jX3NpZ25hdHVyZSkgeworICAgICAgICAgICAgICAgIG1lbWNw eSh0bmNfc2lnbmF0dXJlLCZzYlsxXSxsZW4tMSk7CisgICAgICAgICAgICAgICAgdG5jX3NpZ25h dHVyZVtsZW4tMV0gPSAnXDAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJy ZWFrOworCisgICAgICBjYXNlIFROQ19DMlNfU0VUX0JBVURSQVRFOgorICAgICAgY2FzZSBUTkNf UzJDX1NFVF9CQVVEUkFURTogeworICAgICAgICAgIGxvbmcgYmF1ZHJhdGU7CisgICAgICAgICAg Y2hhciAqIGJyID0gKGNoYXIgKikmYmF1ZHJhdGU7CisgICAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKKyAgICAgICAgICBpZiAobGVuID09 IDIpIHsKKyAgICAgICAgICAgIC8qIEFjdHVhbCBiZWhhdmlvciBvZiB0aGUgQWNjZXNzIFNlcnZl ci4uLiAqLworICAgICAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwiYmF1ZHJhdGUgaW5k ZXgiLHNiWzFdKTsKKyAgICAgICAgICAgIHRuY19icHNfaW5kZXggPSAxOworICAgICAgICAgICAg c3dpdGNoIChzYlsxXSkgeworICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzMwMDoKKyAgICAgICAg ICAgICAgdG5jX2JwcyA9IDMwMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj YXNlIFROQ19CUFNfNjAwOgorICAgICAgICAgICAgICB0bmNfYnBzID0gNjAwOworICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVE5DX0JQU18xMjAwOgorICAgICAgICAgICAg ICB0bmNfYnBzID0gMTIwMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl IFROQ19CUFNfMjQwMDoKKyAgICAgICAgICAgICAgdG5jX2JwcyA9IDI0MDA7CisgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUTkNfQlBTXzQ4MDA6CisgICAgICAgICAgICAg IHRuY19icHMgPSA0ODAwOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug VE5DX0JQU185NjAwOgorICAgICAgICAgICAgICB0bmNfYnBzID0gOTYwMDsKKyAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFROQ19CUFNfMTQ0MDA6CisgICAgICAgICAgICAg IHRuY19icHMgPSAxNDQwMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl IFROQ19CUFNfMTkyMDA6CisgICAgICAgICAgICAgIHRuY19icHMgPSAxOTIwMDsKKyAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFROQ19CUFNfMjg4MDA6CisgICAgICAgICAg ICAgIHRuY19icHMgPSAyODgwMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj YXNlIFROQ19CUFNfMzg0MDA6CisgICAgICAgICAgICAgIHRuY19icHMgPSAzODQwMDsKKyAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFROQ19CUFNfNTc2MDA6CisgICAgICAg ICAgICAgIHRuY19icHMgPSA1NzYwMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICBjYXNlIFROQ19CUFNfMTE1MjAwOgorICAgICAgICAgICAgICB0bmNfYnBzID0gMTE1MjAwOwor ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVE5DX0JQU18yMzA0MDA6Cisg ICAgICAgICAgICAgIHRuY19icHMgPSAyMzA0MDA7CisgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgY2FzZSBUTkNfQlBTXzQ2MDgwMDoKKyAgICAgICAgICAgICAgdG5jX2JwcyA9IDQ2 MDgwMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgICB0bmNfYnBzID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIGlm IChsZW4gPT0gNSkgeworICAgICAgICAgICAgLyogVGhpcyBzZWN0aW9uIGF0dGVtcHRzIHRvIGZv bGxvdyBSRkMgMjIxNyAqLworICAgICAgICAgICAgICB0bmNfYnBzX2luZGV4ID0gMDsKKyAgICAg ICAgICAgICAgYnJbMF0gPSBzYlsxXTsKKyAgICAgICAgICAgICAgYnJbMV0gPSBzYlsyXTsKKyAg ICAgICAgICAgICAgYnJbMl0gPSBzYlszXTsKKyAgICAgICAgICAgICAgYnJbM10gPSBzYls0XTsK KyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAgICAgICAvKiBBT1MvVlMgZG9lc24ndCBoYXZl IG50b2hsKCkgYnV0IE1WJ3MgYXJlIGJpZy1lbmRpYW4gKi8KKyAgICAgICAgICAgICAgdG5jX2Jw cyA9IGJhdWRyYXRlOworI2Vsc2UKKyAgICAgICAgICAgICAgdG5jX2JwcyA9IG50b2hsKGJhdWRy YXRlKTsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJ0bmNfdG5fc2IiLCJiYXVkcmF0ZSByZmMiLHRuY19icHMpOworICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInRuY190bl9zYiIsImJhdWRyYXRlIGludmFsaWQg bGVuIixsZW4pOworICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgIH0KKyAgICAg ICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgVE5DX0MyU19TRVRfREFUQVNJWkU6Cisg ICAgICBjYXNlIFROQ19TMkNfU0VUX0RBVEFTSVpFOgorICAgICAgICBURUxPUFRfU0IoVEVMT1BU X0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOworICAgICAgICBpZiAobGVuIDwgMikK KyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB0bmNfZGF0YXNpemUgPSBzYlsxXTsKKyAg ICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwiZGF0YXNpemUiLHNiWzFdKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICAgIGNhc2UgVE5DX0MyU19TRVRfUEFSSVRZOgorICAgICAgY2FzZSBUTkNf UzJDX1NFVF9QQVJJVFk6CisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9y dC53YWl0X2Zvcl9zYiA9IDA7CisgICAgICAgIGlmIChsZW4gPCAyKQorICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgIHRuY19wYXJpdHkgPSBzYlsxXTsKKyAgICAgICAgZGVidWcoRjExMSwi dG5jX3RuX3NiIiwicGFyaXR5IixzYlsxXSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl IFROQ19DMlNfU0VUX1NUT1BTSVpFOgorICAgICAgY2FzZSBUTkNfUzJDX1NFVF9TVE9QU0laRToK KyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0g MDsKKyAgICAgICAgaWYgKGxlbiA8IDIpCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAg dG5jX3N0b3BiaXQgPSBzYlsxXTsKKyAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwic3Rv cHNpemUiLHNiWzFdKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVE5DX0MyU19TRVRf Q09OVFJPTDoKKyAgICAgIGNhc2UgVE5DX1MyQ19TRVRfQ09OVFJPTDoKKyAgICAgICAgaWYgKGxl biA8IDIpIHsKKyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53 YWl0X2Zvcl9zYiA9IDA7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgIC8qIFRoaXMgbGluZSBzaG91bGQgYmUgcmVtb3ZlZCB3aGVu IHRlc3RpbmcgaXMgY29tcGxldGUuICovCisgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9S VCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAg ICAgIHN3aXRjaCAoIHNiWzFdICkgeworICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19SRVFV RVNUOgorICAgICAgICAgICAgLyogZGV0ZXJtaW5lIGxvY2FsIG91dGJvdW5kIGZsb3cgY29udHJv bCBhbmQgc2VuZCB0byBwZWVyICovCisJICAgIC8qIENpc2NvIElPUyByZXR1cm5zIDAgKFROQ19D VExfT0ZMT1dfUkVRVUVTVCkgd2hlbiBhdHRlbXB0aW5nICovCisJICAgIC8qIHRvIHNldCB0aGUg aW5ib3VuZCBmbG93IGNvbnRyb2wgaWYgaXQgaXMgbm90IHN1cHBvcnRlZCAgICAgICovCisJICAg IC8qIHNlcGFyYXRlbHkgZnJvbSBvdXRib3VuZCBmbG93IGNvbnRyb2wuICBTbyBtdXN0IHJlc2V0 ICAgICAgICovCisJICAgIC8qIHdhaXQgZm9yIHNiIGZsYWcuICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5f c2IiLCJvZmxvdyByZXF1ZXN0IiwwKTsKKyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09N UE9SVCkuY29tcG9ydC53YWl0X2Zvcl9zYiA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIFROQ19DVExfT0ZMT1dfTk9ORToKKyAgICAgICAgICBjYXNlIFROQ19DVExfT0ZM T1dfWE9OX1hPRkY6CisgICAgICAgICAgY2FzZSBUTkNfQ1RMX09GTE9XX1JUU19DVFM6CisgICAg ICAgICAgY2FzZSBUTkNfQ1RMX09GTE9XX0RDRDoKKyAgICAgICAgICBjYXNlIFROQ19DVExfT0ZM T1dfRFNSOgorICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0Lndh aXRfZm9yX3NiID0gMDsKKyAgICAgICAgICAgIHRuY19vZmxvdyA9IHNiWzFdOworICAgICAgICAg ICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwib2Zsb3ciLHNiWzFdKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgVE5DX0NUTF9CUkVBS19SRVFVRVNUOgorICAgICAgICAgICAg LyogZGV0ZXJtaW5lIGxvY2FsIGJyZWFrIHN0YXRlIGFuZCBzZW5kIHRvIHBlZXIgKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsImJyZWFrIHJlcXVlc3QiLDApOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUTkNfQ1RMX0JSRUFLX09OOgorICAgICAgICAg ICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKKyAg ICAgICAgICAgIHRuY19icmVhayA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5f c2IiLCJicmVhayBvbiIsMCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug VE5DX0NUTF9CUkVBS19PRkY6CisgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQp LmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOworICAgICAgICAgICAgdG5jX2JyZWFrID0gMDsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsInRuY190bl9zYiIsImJyZWFrIG9mZiIsMCk7CisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVE5DX0NUTF9EVFJfUkVRVUVTVDoKKyAgICAg ICAgICAgIC8qIGRldGVybWluZSBsb2NhbCBkdHIgc3RhdGUgYW5kIHNlbmQgdG8gcGVlciAqLwor ICAgICAgICAgICAgZGVidWcoRjExMCwidG5jX3RuX3NiIiwiZHRyIHJlcXVlc3QiLDApOworICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFROQ19DVExfRFRSX09OOgorICAgICAg ICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsK KyAgICAgICAgICAgIHRuY19kdHIgPSAxOworICAgICAgICAgICAgZGVidWcoRjExMCwidG5jX3Ru X3NiIiwiZHRyIG9uIiwwKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBU TkNfQ1RMX0RUUl9PRkY6CisgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNv bXBvcnQud2FpdF9mb3Jfc2IgPSAwOworICAgICAgICAgICAgdG5jX2R0ciA9IDA7CisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJkdHIgb2ZmIiwwKTsKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgY2FzZSBUTkNfQ1RMX1JUU19SRVFVRVNUOgorICAgICAgICAgICAg LyogZGV0ZXJtaW5lIGxvY2FsIHJ0cyBzdGF0ZSBhbmQgc2VuZCB0byBwZWVyICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJydHMgcmVxdWVzdCIsMCk7CisgICAgICAgICAg ICBicmVhazsKKworICAgICAgICAgIGNhc2UgVE5DX0NUTF9SVFNfT046CisgICAgICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOworICAgICAg ICAgICAgdG5jX3J0cyA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJy dHMgb24iLDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFROQ19DVExf UlRTX09GRjoKKyAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfQ09NUE9SVCkuY29tcG9ydC53 YWl0X2Zvcl9zYiA9IDA7CisgICAgICAgICAgICB0bmNfcnRzID0gMDsKKyAgICAgICAgICAgIGRl YnVnKEYxMTAsInRuY190bl9zYiIsInJ0cyBvZmYiLDApOworICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgICBjYXNlIFROQ19DVExfSUZMT1dfUkVRVUVTVDoKKyAgICAgICAgICAgIC8qIGRl dGVybWluZSBsb2NhbCBpbmJvdW5kIGZsb3cgY29udHJvbCBhbmQgc2VuZCB0byBwZWVyICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJpZmxvdyByZXF1ZXN0IiwwKTsKKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9XX05PTkU6Cisg ICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9XX1hPTl9YT0ZGOgorICAgICAgICAgIGNhc2UgVE5D X0NUTF9JRkxPV19SVFNfQ1RTOgorICAgICAgICAgIGNhc2UgVE5DX0NUTF9JRkxPV19EVFI6Cisg ICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2Ig PSAwOworICAgICAgICAgICAgdG5jX2lmbG93ID0gc2JbMV07CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJ0bmNfdG5fc2IiLCJpZmxvdyIsc2JbMV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAg ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVE5DX0MyU19OT1RJRllfTElORVNUQVRFOgorICAgICAg Y2FzZSBUTkNfUzJDX1NFTkRfTFM6CisgICAgICAgIGlmIChsZW4gPCAyKQorICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgIHRuY19scyA9IHNiWzFdOworICAgICAgICBkZWJ1ZyhGMTExLCJ0 bmNfdG5fc2IiLCJsaW5lc3RhdGUiLHNiWzFdKTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJz ZXMpIHsKKyAgICAgICAgICAgIGlmICh0bmNfbHMgJiBUTkNfTVNfREFUQV9SRUFEWSApCisgICAg ICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTGluZXN0YXRlIERhdGEgUmVhZHkiKTsKKyAg ICAgICAgICAgIGlmICh0bmNfbHMgJiBUTkNfTVNfT1ZFUlJVTl9FUlJPUiApCisgICAgICAgICAg ICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTGluZXN0YXRlIE92ZXJydW4gRXJyb3IiKTsKKyAgICAg ICAgICAgIGlmICh0bmNfbHMgJiBUTkNfTVNfUEFSSVRZX0VSUk9SICkKKyAgICAgICAgICAgICAg dG5fZGVidWcoIiAgQ29tUG9ydCBMaW5lc3RhdGUgUGFyaXR5IEVycm9yIik7CisgICAgICAgICAg ICBpZiAodG5jX2xzICYgVE5DX01TX0ZSQU1FX0VSUk9SICkKKyAgICAgICAgICAgICAgdG5fZGVi dWcoIiAgQ29tUG9ydCBMaW5lc3RhdGUgRnJhbWluZyBFcnJvciIpOworICAgICAgICAgICAgaWYg KHRuY19scyAmIFROQ19NU19CUkVBS19FUlJPUiApCisgICAgICAgICAgICAgIHRuX2RlYnVnKCIg IENvbVBvcnQgTGluZXN0YXRlIEJyZWFrIERldGVjdCBFcnJvciIpOworICAgICAgICAgICAgaWYg KHRuY19scyAmIFROQ19NU19IUl9FTVBUWSApCisgICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENv bVBvcnQgTGluZXN0YXRlIEhvbGRpbmcgUmVnaXN0ZXIgRW1wdHkiKTsKKyAgICAgICAgICAgIGlm ICh0bmNfbHMgJiBUTkNfTVNfU1JfRU1QVFkgKQorICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBD b21Qb3J0IExpbmVzdGF0ZSBTaGlmdCBSZWdpc3RlciBFbXB0eSIpOworICAgICAgICAgICAgaWYg KHRuY19scyAmIFROQ19NU19USU1FT1VUX0VSUk9SICkKKyAgICAgICAgICAgICAgdG5fZGVidWco IiAgQ29tUG9ydCBMaW5lc3RhdGUgVGltZW91dCBFcnJvciIpOworICAgICAgICB9CisgICAgICAg IGJyZWFrOworCisgICAgICBjYXNlIFROQ19DMlNfTk9USUZZX01PREVNU1RBVEU6CisgICAgICBj YXNlIFROQ19TMkNfU0VORF9NUzoKKyAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9DT01QT1JUKS5j b21wb3J0LndhaXRfZm9yX21zID0gMDsKKyAgICAgICAgaWYgKGxlbiA8IDIpCisgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgdG5jX21zID0gc2JbMV07CisgICAgICAgIGRlYnVnKEYxMTEs InRuY190bl9zYiIsIm1vZGVtc3RhdGUiLHNiWzFdKTsKKyAgICAgICAgaWYgKHRuX2RlYiB8fCBk ZWJzZXMpIHsKKyAgICAgICAgICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfQ1RTX0RFTFRBICkKKyAg ICAgICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIENUUyBTdGF0ZSBDaGFu Z2UiKTsKKyAgICAgICAgICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfRFNSX0RFTFRBICkKKyAgICAg ICAgICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIERTUiBTdGF0ZSBDaGFuZ2Ui KTsKKyAgICAgICAgICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfRURHRV9SSU5HICkKKyAgICAgICAg ICAgICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIFRyYWlsaW5nIEVkZ2UgUmluZyBE ZXRlY3RvciBPbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB0bl9kZWJ1Zygi ICBDb21Qb3J0IE1vZGVtc3RhdGUgVHJhaWxpbmcgRWRnZSBSaW5nIERldGVjdG9yIE9mZiIpOwor ICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19STFNEX0RFTFRBICkKKyAgICAgICAgICAg ICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIFJMU0QgU3RhdGUgQ2hhbmdlIik7Cisg ICAgICAgICAgICBpZiAodG5jX21zICYgVE5DX01TX0NUU19TSUcgKQorICAgICAgICAgICAgICB0 bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgQ1RTIFNpZ25hbCBPbiIpOworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUgQ1RT IFNpZ25hbCBPZmYiKTsKKyAgICAgICAgICAgIGlmICh0bmNfbXMgJiBUTkNfTVNfRFNSX1NJRyAp CisgICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBEU1IgU2lnbmFs IE9uIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHRuX2RlYnVnKCIgIENvbVBv cnQgTW9kZW1zdGF0ZSBEU1IgU2lnbmFsIE9mZiIpOworICAgICAgICAgICAgaWYgKHRuY19tcyAm IFROQ19NU19SSV9TSUcgKQorICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVt c3RhdGUgUmluZyBJbmRpY2F0b3IgT24iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgdG5fZGVidWcoIiAgQ29tUG9ydCBNb2RlbXN0YXRlIFJpbmcgSW5kaWNhdG9yIE9mZiIpOwor ICAgICAgICAgICAgaWYgKHRuY19tcyAmIFROQ19NU19STFNEX1NJRyApCisgICAgICAgICAgICAg IHRuX2RlYnVnKCIgIENvbVBvcnQgTW9kZW1zdGF0ZSBSTFNEIFNpZ25hbCBPbiIpOworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICB0bl9kZWJ1ZygiICBDb21Qb3J0IE1vZGVtc3RhdGUg UkxTRCBTaWduYWwgT2ZmIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh c2UgVE5DX0MyU19GTE9XX1NVU1BFTkQ6CisgICAgICBjYXNlIFROQ19TMkNfRkxPV19TVVNQRU5E OgorICAgICAgICBkZWJ1ZyhGMTEwLCJ0bmNfdG5fc2IiLCJmbG93IHN1c3BlbmQiLDApOworICAg ICAgICB0bmNfc3VzcGVuZF94bWl0ID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug VE5DX0MyU19GTE9XX1JFU1VNRToKKyAgICAgIGNhc2UgVE5DX1MyQ19GTE9XX1JFU1VNRToKKyAg ICAgICAgZGVidWcoRjExMCwidG5jX3RuX3NiIiwiZmxvdyByZXN1bWUiLDApOworICAgICAgICB0 bmNfc3VzcGVuZF94bWl0ID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVE5DX0My U19TRVRfTFNfTUFTSzoKKyAgICAgIGNhc2UgVE5DX1MyQ19TRVRfTFNfTUFTSzoKKyAgICAgICAg ICBURUxPUFRfU0IoVEVMT1BUX0NPTVBPUlQpLmNvbXBvcnQud2FpdF9mb3Jfc2IgPSAwOworICAg ICAgICAgIGlmIChsZW4gPCAyKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIGRlYnVn KEYxMTEsInRuY190bl9zYiIsImxpbmVzdGF0ZSBtYXNrIixzYlsxXSk7CisgICAgICAgIHRuY19s c19tYXNrID0gc2JbMV07CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFROQ19DMlNfU0VU X01TX01BU0s6CisgICAgICBjYXNlIFROQ19TMkNfU0VUX01TX01BU0s6CisgICAgICAgICAgVEVM T1BUX1NCKFRFTE9QVF9DT01QT1JUKS5jb21wb3J0LndhaXRfZm9yX3NiID0gMDsKKyAgICAgICAg ICBpZiAobGVuIDwgMikKKyAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBkZWJ1ZyhGMTEx LCJ0bmNfdG5fc2IiLCJtb2RlbXN0YXRlIG1hc2siLHNiWzFdKTsKKyAgICAgICAgdG5jX2xzX21h c2sgPSBzYlsxXTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgVE5DX0MyU19QVVJHRToK KyAgICAgIGNhc2UgVE5DX1MyQ19QVVJHRToKKyAgICAgICAgaWYgKGxlbiA8IDIpCisgICAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgZGVidWcoRjExMSwidG5jX3RuX3NiIiwicHVyZ2UiLHNi WzFdKTsKKyAgICAgICAgc3dpdGNoICggc2JbMV0gKSB7CisgICAgICAgICAgY2FzZSBUTkNfUFVS R0VfUkVDRUlWRToKKyAgICAgICAgICBjYXNlIFROQ19QVVJHRV9UUkFOU01JVDoKKyAgICAgICAg ICBjYXNlIFROQ19QVVJHRV9CT1RIOgorICAgICAgICAgICAgLyogcHVyZ2UgbG9jYWwgYnVmZmVy cyAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg IHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK0NPTlNUIGNo YXIgKgorI2lmZGVmIENLX0FOU0lDCit0bmNfZ2V0X3NpZ25hdHVyZSh2b2lkKQorI2Vsc2UgLyog Q0tfQU5TSUMgKi8KK3RuY19nZXRfc2lnbmF0dXJlKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor LyogdG5jX2dldF9zaWduYXR1cmUgKi8geworICAgIC8qIHNlbmQgSUFDIFNCIENPTS1QT1JUIFNJ R05BVFVSRSBJQUMgU0UgKi8KKyAgICAvKiB3YWl0IGZvciByZXNwb25zZSAqLworICAgIGludCBp ID0gMCwgcmM7CisKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybihOVUxMKTsKKyAg ICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oTlVMTCk7CisKKyAgICBpZiAoIVRF TE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybihOVUxMKTsKKworI2lmZGVmIENLX1NTTAor ICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3Mp IHsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKwor ICAgIGlmICggdG5jX3NpZ25hdHVyZSApCisgICAgICAgIHJldHVybih0bmNfc2lnbmF0dXJlKTsK KworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgIC8qIEkgQW0gYSBDb21t YW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgLyogU3VibmVn b3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAg ICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0lHTkFUVVJFOyAg ICAvKiBTaWduYXR1cmUgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAg ICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgU0U7ICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KKworI2lmZGVmIERF QlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFr bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5U IFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgIiBTSUdOQVRV UkUgSUFDIFNFIiwgTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1My CisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYK KyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAo dG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcg Ki8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBp dC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAg IGlmIChyYykKKyAgICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgaWYgKHRuY193YWl0KChDSEFS ICopImNvbXBvcnQgc2lnbmF0dXJlIHJlcXVlc3QiLDApIDwgMCkgeworICAgICAgICB0bl9wdXNo KCk7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwidG5jX2dl dF9zaWduYXR1cmUiLHRuY19zaWduYXR1cmUsMCk7CisgICAgcmV0dXJuKHRuY19zaWduYXR1cmUp OworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX3NlbmRfc2lnbmF0dXJlKGNoYXIgKiBz aWduYXR1cmUpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX3NlbmRfc2lnbmF0dXJlKHNpZ25h dHVyZSkgY2hhciAqIHNpZ25hdHVyZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX3Nl bmRfc2lnbmF0dXJlICovIHsKKyAgICAvKiBzZW5kIElBQyBTQiBDT00tUE9SVCBTSUdOQVRVUkUg PHRleHQ+IElBQyBTRSAqLworICAgIGludCBpID0gMCwgaiA9IDAsIHJjOworCisgICAgZGVidWco RjExMCwidG5jX3NlbmRfc2lnbmF0dXJlIixzaWduYXR1cmUsMCk7CisKKyAgICBpZiAoIXNpZ25h dHVyZSB8fCAhc2lnbmF0dXJlWzBdKQorICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKHR0bmV0 ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkg cmV0dXJuKDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4o MCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMp LnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5k aWYgLyogQ0tfU1NMICovCisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAg ICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNC OyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10g PSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtp KytdID0gVE5DX0MyU19TSUdOQVRVUkU7ICAgICAgLyogU2lnbmF0dXJlICovCisgICAgZm9yICg7 IHNpZ25hdHVyZVtqXTsgaSsrLGorKykKKyAgICAgIHNiX291dFtpXSA9IHNpZ25hdHVyZVtqXTsK KyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1 Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAg ICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxv ZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFRO X01TR19MRU4sCisgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVM T1BUX0NPTVBPUlQpLAorICAgICAgICAgICAgICAgICAgIiBTSUdOQVRVUkUgIiwgc2lnbmF0dXJl LCAiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAg UmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRl ZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGVi IHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAg ICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8K KyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChy YykKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVm IENLX0FOU0lDCit0bmNfc2V0X2JhdWQoIGxvbmcgYmF1ZCApCisjZWxzZSAvKiBDS19BTlNJQyAq LwordG5jX3NldF9iYXVkKGJhdWQpIGxvbmcgYmF1ZDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor LyogdG5jX3NldF9iYXVkICovIHsKKyAgICAvKiBzZW5kIElBQyBTQiBDT00tUE9SVCBTRVQtQkFV RCA8dmFsdWUoNCk+IElBQyBTRSAgKi8KKyAgICAvKiB3YWl0IGZvciByZXNwb25zZSAqLworICAg IC8qIDAgaXMgdXNlZCB0byByZXF1ZXN0IHRoZSBjdXJyZW50IGJhdWQgcmF0ZSBhbmQgKi8KKyAg ICAvKiBtYXkgbm90IGJlIHNlbnQgYnkgdGhpcyBmdW5jICovCisgICAgLyogcmV0dXJuIG5ldyBo b3N0IHZhbHVlICovCisKKyAgICAvKgorICAgICAqICAgdGhlIGFib3ZlIGNvbWVzIGZyb20gdGhl IFJGQy4gIEJ1dCB0aGF0IGlzIG5vdCB3aGF0IEkgYW0gc2VlaW5nCisgICAgICogICBpbnN0ZWFk IEkgYXBwZWFyIHRvIGJlIHNlZWluZyB0byBmb2xsb3dpbmc6CisgICAgICoKKyAgICAgKiAgICAg IFZhbHVlICAgICAgICAgICAgICAgQmF1ZAorICAgICAqICAgICAgICAgIDEgICAgICAgICAgICAg ICA/CisgICAgICogICAgICAgICAgMiAgICAgICAgICAgICAgID8KKyAgICAgKiAgICAgICAgICAz ICAgICAgICAgICAgICAgMzAwCisgICAgICogICAgICAgICAgNCAgICAgICAgICAgICAgIDYwMAor ICAgICAqICAgICAgICAgIDUgICAgICAgICAgICAgICAxMjAwCisgICAgICogICAgICAgICAgNiAg ICAgICAgICAgICAgIDI0MDAKKyAgICAgKiAgICAgICAgICA3ICAgICAgICAgICAgICAgNDgwMCAg ICAgID8KKyAgICAgKiAgICAgICAgICA4ICAgICAgICAgICAgICAgOTYwMAorICAgICAqICAgICAg ICAgIDkgICAgICAgICAgICAgICAgICAgICAgICAgPworICAgICAqICAgICAgICAgIDEwICAgICAg ICAgICAgICAxOTIwMCAgICAgPworICAgICAqICAgICAgICAgIDExICAgICAgICAgICAgICAgICAg ICAgICAgPworICAgICAqICAgICAgICAgIDEyICAgICAgICAgICAgICAzODQwMAorICAgICAqICAg ICAgICAgIDEzICAgICAgICAgICAgICA1NzYwMCAgICAgPworICAgICAqICAgICAgICAgIDE0ICAg ICAgICAgICAgICAxMTUyMDAKKyAgICAgKiAgICAgICAgICAxNSAgICAgICAgICAgICAgMjMwNDAw ICAgID8KKyAgICAgKiAgICAgICAgICAxNiAgICAgICAgICAgICAgNDYwODAwICAgID8KKyAgICAg Ki8KKworICAgIGludCBpID0gMCwgcmM7CisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAvKiBBT1Mv VlMgZG9lc24ndCBoYXZlIGh0b25sKCkgYnV0IE1WJ3MgYXJlIGJpZy1lbmRpYW4gKi8KKyAgICBs b25nIG5ldF9iYXVkID0gYmF1ZDsKKyNlbHNlCisgICAgbG9uZyBuZXRfYmF1ZCA9IGh0b25sKGJh dWQpOworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisgICAgQ0hBUiBiOworCisgICAgZGVidWco RjExMSwidG5jX3NldF9iYXVkIiwiYmVnaW4iLGJhdWQpOworCisgICAgaWYgKHR0bmV0ICE9IE5F VF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJu KDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisK KyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0 X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyog Q0tfU1NMICovCisKKyAgICBpZiAoYmF1ZCA8PSAwKQorICAgICAgICByZXR1cm4oMCk7CisKKyAg ICBpZiAoIG5ldF9iYXVkICE9IDAgJiYgbmV0X2JhdWQgPT0gdG5jX2JwcykKKyAgICAgICAgcmV0 dXJuKHRuY19icHMpOworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAg ICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsg ICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0g VEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsr XSA9IFROQ19DMlNfU0VUX0JBVURSQVRFOyAgIC8qIFNldCBCYXVkIFJhdGUgKi8KKworICAgIGlm ICh0bmNfYnBzX2luZGV4KSB7CisgICAgICAgIC8qIElPUyBBY2Nlc3MgU2VydmVyICovCisgICAg ICAgIGlmIChiYXVkIDw9IDMwMCkKKyAgICAgICAgICAgIGIgPSBUTkNfQlBTXzMwMDsKKyAgICAg ICAgZWxzZSBpZiAoYmF1ZCA8PSA2MDApCisgICAgICAgICAgICBiID0gVE5DX0JQU182MDA7Cisg ICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gMTIwMCkKKyAgICAgICAgICAgIGIgPSBUTkNfQlBTXzEy MDA7CisgICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gMjQwMCkKKyAgICAgICAgICAgIGIgPSBUTkNf QlBTXzI0MDA7CisgICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gNDgwMCkKKyAgICAgICAgICAgIGIg PSBUTkNfQlBTXzQ4MDA7CisgICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gOTYwMCkKKyAgICAgICAg ICAgIGIgPSBUTkNfQlBTXzk2MDA7CisgICAgICAgIGVsc2UgaWYgKGJhdWQgPD0gMTQ0MDApCisg ICAgICAgICAgICBiID0gVE5DX0JQU18xNDQwMDsKKyAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSAx OTIwMCkKKyAgICAgICAgICAgIGIgPSBUTkNfQlBTXzE5MjAwOworICAgICAgICBlbHNlIGlmIChi YXVkIDw9IDI4ODAwKQorICAgICAgICAgICAgYiA9IFROQ19CUFNfMjg4MDA7CisgICAgICAgIGVs c2UgaWYgKGJhdWQgPD0gMzg0MDApCisgICAgICAgICAgICBiID0gVE5DX0JQU18zODQwMDsKKyAg ICAgICAgZWxzZSBpZiAoYmF1ZCA8PSA1NzYwMCkKKyAgICAgICAgICAgIGIgPSBUTkNfQlBTXzU3 NjAwOworICAgICAgICBlbHNlIGlmIChiYXVkIDw9IDExNTIwMCkKKyAgICAgICAgICAgIGIgPSBU TkNfQlBTXzExNTIwMDsKKyAgICAgICAgZWxzZSBpZiAoYmF1ZCA8PSAyMzA0MDApCisgICAgICAg ICAgICBiID0gVE5DX0JQU18yMzA0MDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGIgPSBU TkNfQlBTXzQ2MDgwMDsKKyAgICAgICAgc2Jfb3V0W2krK10gPSBiOworICAgIH0gZWxzZSB7Cisg ICAgICAgIC8qIFJGQyAyMjE3ICovCisgICAgICAgIHNiX291dFtpKytdID0gKChjaGFyICopJm5l dF9iYXVkKVswXTsKKyAgICAgICAgc2Jfb3V0W2krK10gPSAoKGNoYXIgKikmbmV0X2JhdWQpWzFd OworICAgICAgICBzYl9vdXRbaSsrXSA9ICgoY2hhciAqKSZuZXRfYmF1ZClbMl07CisgICAgICAg IHNiX291dFtpKytdID0gKChjaGFyICopJm5ldF9iYXVkKVszXTsKKyAgICB9CisgICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0 aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyog bWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRu X2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xF TiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09N UE9SVCksCisgICAgICAgICAgICAgICAgICAiIFNFVC1CQVVELVJBVEUgIiwgY2tsdG9hKGJhdWQp LCIgSUFDIFNFIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIE9TMgorICAg IFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZk ZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisg ICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICov CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAo cmMpCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29t cG9ydCBzZXQgYmF1ZCByYXRlIiwwKSA8IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAg ICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bmNfc2V0X2JhdWQiLCJlbmQi LHRuY19icHMpOworICAgIHJldHVybih0bmNfYnBzKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5T SUMKK3RuY19nZXRfYmF1ZCh2b2lkKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19nZXRfYmF1 ZCgpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19nZXRfYmF1ZCAqLyB7CisgICAgLyog c2VuZCBJQUMgU0IgQ09NLVBPUlQgU0VULUJBVUQgPHZhbHVlKDQpPTA+IElBQyBTRSAgKi8KKyAg ICAvKiB3YWl0IGZvciByZXNwb25zZSAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBkZWJ1 ZyhGMTEwLCJ0bmNfZ2V0X2JhdWQiLCJiZWdpbiIsMCk7CisKKyAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKwor I2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBD S19TU0wgKi8KKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9Q VF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBU TkNfQzJTX1NFVF9CQVVEUkFURTsgICAvKiBTZXQgQmF1ZCBSYXRlICovCisKKyAgICBpZiAodG5j X2Jwc19pbmRleCA+IDApIHsKKyAgICAgICAgLyogQWNjZXNzIFNlcnZlciAqLworICAgICAgICBz Yl9vdXRbaSsrXSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogUkZDIDIyMTcgKi8KKyAg ICAgICAgc2Jfb3V0W2krK10gPSAwOworICAgICAgICBzYl9vdXRbaSsrXSA9IDA7CisgICAgICAg IHNiX291dFtpKytdID0gMDsKKyAgICAgICAgc2Jfb3V0W2krK10gPSAwOworICAgIH0KKyAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVn b3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAg ICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cg fHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9N U0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9Q VF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgICIgU0VULUJBVUQtUkFURSAiLCBja2x0b2Eo MCksIiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAg IFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZk ZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2Rl YiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisg ICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICov CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAo cmMpCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29t cG9ydCBnZXQgYmF1ZCByYXRlIiwwKSA8IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAg ICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X2JhdWQiLCJlbmQi LHRuY19icHMpOworICAgIHJldHVybih0bmNfYnBzKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5T SUMKK3RuY19zZXRfZGF0YXNpemUoaW50IGRhdGFzaXplKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8K K3RuY19zZXRfZGF0YXNpemUoZGF0YXNpemUpIGludCBkYXRhc2l6ZTsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworLyogdG5jX3NldF9kYXRhc2l6ZSAqLyB7CisgICAgLyogSUFDIFNCIENPTS1QT1JU IFNFVF9EQVRBU0laRSA8dmFsdWUoMSk+IElBQyBTRSAqLworICAgIC8qIFZhbGlkIDx2YWx1ZT5z IGFyZSA1IHRocm91Z2ggOCAqLworICAgIC8qIFdhaXQgZm9yIHJlc3BvbnNlICovCisgICAgLyog cmV0dXJuIG5ldyBob3N0IHZhbHVlICovCisKKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVi dWcoRjExMSwidG5jX3NldF9kYXRhc2l6ZSIsImJlZ2luIixkYXRhc2l6ZSk7CisKKyAgICBpZiAo dHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVM TkVUKSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJl dHVybigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJU X1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0K KyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmICggIShkYXRhc2l6ZSA+PSA1ICYmIGRhdGFz aXplIDw9IDgpICkKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCBkYXRhc2l6ZSAgIT0g MCAmJiAgZGF0YXNpemUgPT0gdG5jX2RhdGFzaXplICkKKyAgICAgICAgcmV0dXJuKHRuY19kYXRh c2l6ZSk7CisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAg ICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRf Q09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5D X0MyU19TRVRfREFUQVNJWkU7ICAgLyogU2V0IERhdGFTaXplICovCisgICAgc2Jfb3V0W2krK10g PSAodW5zaWduZWQgY2hhcikoZGF0YXNpemUgJiAweEZGKTsKKyAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAg ICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkg SUFDIFNFICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcykgeworICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAg ICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAg ICAgICAgICAgICAgICAgICIgU0VULURBVEFTSVpFICIsIGNraXRvYShkYXRhc2l6ZSksIiBJQUMg U0UiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RU ZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcK KyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJz ZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAo dHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYg T1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAg ICAgIHJldHVybigtMSk7CisKKyAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBzZXQg ZGF0YXNpemUiLDApIDwgMCkgeworICAgICAgICB0bl9wdXNoKCk7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInRuY19zZXRfZGF0YXNpemUiLCJlbmQiLHRuY19k YXRhc2l6ZSk7CisgICAgcmV0dXJuKHRuY19kYXRhc2l6ZSk7Cit9CisKK2ludAorI2lmZGVmIENL X0FOU0lDCit0bmNfZ2V0X2RhdGFzaXplKHZvaWQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5j X2dldF9kYXRhc2l6ZSgpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19nZXRfZGF0YXNp emUgKi8geworICAgIC8qIElBQyBTQiBDT00tUE9SVCBTRVRfREFUQVNJWkUgPHZhbHVlKDEpPTA+ IElBQyBTRSAqLworICAgIC8qIFdhaXQgZm9yIHJlc3BvbnNlICovCisgICAgaW50IGkgPSAwLCBy YzsKKworICAgIGRlYnVnKEYxMTAsInRuY19nZXRfZGF0YXNpemUiLCJiZWdpbiIsMCk7CisKKyAg ICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0g TlBfVEVMTkVUKSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9S VCkpIHJldHVybigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BU X1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElB QzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10g PSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBz Yl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisg ICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9EQVRBU0laRTsgICAvKiBTZXQgRGF0YVNpemUg Ki8KKyAgICBzYl9vdXRbaSsrXSA9IDA7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAg ICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2kr K10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLwor CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAg ICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAg ICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAg ICAgICAiIFNFVC1EQVRBU0laRSAiLCBja2x0b2EoMCksIiBJQUMgU0UiLCBOVUxMLAorICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRp ZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lO REVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRu X21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21z Z19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291 dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRl bG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigtMSk7CisK KyAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBnZXQgZGF0YXNpemUiLDApIDwgMCkg eworICAgICAgICB0bl9wdXNoKCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGRl YnVnKEYxMTEsInRuY19nZXRfZGF0YXNpemUiLCJlbmQiLHRuY19kYXRhc2l6ZSk7CisgICAgcmV0 dXJuKHRuY19kYXRhc2l6ZSk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfc2V0X3Bh cml0eShpbnQgcGFyaXR5KQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19zZXRfcGFyaXR5KHBh cml0eSkgaW50IHBhcml0eTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX3NldF9wYXJp dHkgKi8geworICAgIC8qIElBQyBTQiBDT00tUE9SVCBTRVRfUEFSSVRZIDx2YWx1ZSgxKT4gSUFD IFNFICovCisgICAgLyogICAgICAgIFZhbHVlICAgICBQYXJpdHkKKyAgICAgKiAgICAgICAgICAx ICAgICAgIE5vbmUKKyAgICAgKiAgICAgICAgICAyICAgICAgIE9kZAorICAgICAqICAgICAgICAg IDMgICAgICAgRXZlbgorICAgICAqICAgICAgICAgIDQgICAgICAgTWFyaworICAgICAqICAgICAg ICAgIDUgICAgICAgU3BhY2UKKyAgICAgKi8KKyAgICAvKiBXYWl0IGZvciByZXNwb25zZS4gIFJl dHVybiBuZXcgaG9zdCB2YWx1ZS4gKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWco RjExMCwidG5jX3NldF9wYXJpdHkiLCJiZWdpbiIscGFyaXR5KTsKKworICAgIGlmICh0dG5ldCAh PSBORVRfVENQQikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJl dHVybigwKTsKKworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDAp OworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5z dGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlm IC8qIENLX1NTTCAqLworCisgICAgaWYgKCAhKHBhcml0eSA+PSAxICYmIHBhcml0eSA8PSA1KSAp CisgICAgICAgIHJldHVybigwKTsKKworICAgIGlmICggcGFyaXR5ICE9IDAgJiYgcGFyaXR5ID09 IHRuY19wYXJpdHkgKQorICAgICAgICByZXR1cm4odG5jX3Bhcml0eSk7CisKKyAgICBzYl9vdXRb aSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLwor ICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290 aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAg LyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfUEFSSVRZOyAgICAg LyogU2V0IFBhcml0eSAqLworICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVkIGNoYXIpKHBhcml0 eSAmIDB4RkYpOworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNF OyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KKworI2lmZGVmIERFQlVH CisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFreG1z Zyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQg U0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAgICAgICAgICAgIiBTRVQtUEFS SVRZICIsIGNraXRvYShwYXJpdHkpLCIgSUFDIFNFIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAg IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcg Ki8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dB SVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIi LDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNl bmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsg ICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgp OworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHRu Y193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IHBhcml0eSIsMCkgPCAwKSB7CisgICAgICAgIHRu X3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwidG5j X3NldF9wYXJpdHkiLCJlbmQiLHRuY19wYXJpdHkpOworICAgIHJldHVybih0bmNfcGFyaXR5KTsK K30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19nZXRfcGFyaXR5KHZvaWQpCisjZWxzZSAv KiBDS19BTlNJQyAqLwordG5jX2dldF9wYXJpdHkoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiB0bmNfZ2V0X3Bhcml0eSAqLyB7CisgICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9QQVJJVFkg PHZhbHVlKDEpPTA+IElBQyBTRSAqLworICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlICovCisgICAg aW50IGkgPSAwLCByYzsKKworICAgIGRlYnVnKEYxMTAsInRuY19nZXRfcGFyaXR5IiwiYmVnaW4i LDApOworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOworICAgIGlmICh0dG5w cm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKKworICAgIGlmICghVEVMT1BUX01FKFRFTE9Q VF9DT01QT1JUKSkgcmV0dXJuKDApOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9T QihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1 cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgc2Jfb3V0W2krK10gPSAo Q0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9v dXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAq LworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBv cnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX1BBUklUWTsgICAgIC8qIFNldCBQ YXJpdHkgKi8KKyAgICBzYl9vdXRbaSsrXSA9IDA7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikg SUFDOyAgICAgICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jf b3V0W2krK10gPSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBT RSAqLworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMp IHsKKyAgICAgICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAg ICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAg ICAgICAgICAgICAiIFNFVC1QQVJJVFkgIiwgY2tpdG9hKDApLCIgSUFDIFNFIiwgTlVMTCwKKyAg ICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9Cisj ZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNF TV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEw MCx0bl9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0 bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilz Yl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVh c2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEp OworCisgICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgZ2V0IHBhcml0eSIsMCkgPCAw KSB7CisgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAg ZGVidWcoRjExMSwidG5jX2dldF9wYXJpdHkiLCJlbmQiLHRuY19wYXJpdHkpOworICAgIHJldHVy bih0bmNfcGFyaXR5KTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19zZXRfc3RvcHNp emUoaW50IHN0b3BzaXplKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19zZXRfc3RvcHNpemUo c3RvcHNpemUpIGludCBzdG9wc2l6ZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX3Nl dF9zdG9wc2l6ZSAqLyB7CisgICAgLyogSUFDIFNCIENPTS1QT1JUIFNFVF9TVE9QU0laRSA8dmFs dWUoMSk+IElBQyBTRSAqLworICAgIC8qICAgICAgICBWYWx1ZSAgICAgU3RvcCBCaXQgU2l6ZQor ICAgICAqICAgICAgICAgIDEgICAgICAgMQorICAgICAqICAgICAgICAgIDIgICAgICAgMgorICAg ICAqICAgICAgICAgIDMgICAgICAgMS41CisgICAgICovCisgICAgLyogV2FpdCBmb3IgcmVzcG9u c2UuICBSZXR1cm4gbmV3IGhvc3QgdmFsdWUuICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAg IGRlYnVnKEYxMTEsInRuY19zZXRfc3RvcHNpemUiLCJiZWdpbiIsc3RvcHNpemUpOworICAgIGlm ICh0dG5ldCAhPSBORVRfVENQQikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9U RUxORVQpIHJldHVybigwKTsKKworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkg cmV0dXJuKDApOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RB UlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAg fQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaWYgKCEoc3RvcHNpemUgPj0gMSAmJiBzdG9w c2l6ZSA8PSAzKSApCisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIHN0b3BzaXplICE9IDAg JiYgc3RvcHNpemUgPT0gdG5jX3N0b3BiaXQgKQorICAgICAgICByZXR1cm4odG5jX3N0b3BiaXQp OworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBB bSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAg ICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBP UlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNf U0VUX1NUT1BTSVpFOyAgIC8qIFNldCBTdG9wIEJpdHMgKi8KKyAgICBzYl9vdXRbaSsrXSA9ICh1 bnNpZ25lZCBjaGFyKShzdG9wc2l6ZSAmIDB4RkYpOworICAgIHNiX291dFtpKytdID0gKENIQVIp IElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNi X291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMg U0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2Vz KSB7CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAg ICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAg ICAgICAgICAgICAgIiBTRVQtU1RPUFNJWkUgIiwgY2tpdG9hKHN0b3BzaXplKSwiIElBQyBTRSIs IE5VTEwsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7 CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5l dE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAg IGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykg dG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9s KChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIK KyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgICAg cmV0dXJuKC0xKTsKKworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBzdG9w c2l6ZSIsMCkgPCAwKSB7CisgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgZGVidWcoRjExMSwidG5jX3NldF9zdG9wc2l6ZSIsImVuZCIsdG5jX3N0b3Bi aXQpOworICAgIHJldHVybih0bmNfc3RvcGJpdCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lD Cit0bmNfZ2V0X3N0b3BzaXplKHZvaWQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX2dldF9z dG9wc2l6ZSgpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19nZXRfc3RvcHNpemUgKi8g eworICAgIC8qIElBQyBTQiBDT00tUE9SVCBTRVRfU1RPUFNJWkUgPHZhbHVlKDEpPTA+IElBQyBT RSAqLworICAgIC8qIFdhaXQgZm9yIHJlc3BvbnNlICovCisgICAgaW50IGkgPSAwLCByYzsKKwor ICAgIGRlYnVnKEYxMTAsInRuY19nZXRfc3RvcHNpemUiLCJiZWdpbiIsMCk7CisgICAgaWYgKHR0 bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5F VCkgcmV0dXJuKDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1 cm4oMCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9U TFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9Cisj ZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAg ICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIp IFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2kr K10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291 dFtpKytdID0gVE5DX0MyU19TRVRfU1RPUFNJWkU7ICAgLyogU2V0IFN0b3AgQml0cyAqLworICAg IHNiX291dFtpKytdID0gMDsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAg ICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IChD SEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBj a21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRFTE5F VCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgICIg U0VULVNUT1BTSVpFICIsIGNraXRvYSgwKSwiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAgICAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklU RV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291 dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7 CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwg MCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0 ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlm ICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBzdG9wc2l6ZSIsMCkgPCAwKSB7CisgICAg ICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZGVidWcoRjEx MSwidG5jX2dldF9zdG9wc2l6ZSIsImVuZCIsdG5jX3N0b3BiaXQpOworICAgIHJldHVybih0bmNf c3RvcGJpdCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfc2V0X29mbG93KGludCBj b250cm9sKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19zZXRfb2Zsb3coY29udHJvbCkgaW50 IGNvbnRyb2w7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19zZXRfb2Zsb3cgKi8gewor ICAgIC8qIElBQyBTQiBDT01fUE9SVCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk+IElBQyBTRSAqLwor ICAgIC8qICAgICAgICBWYWx1ZSAgICAgRmxvdyBDb250cm9sCisgICAgICogICAgICAgICAgMSAg ICAgICBObyBGbG93IENvbnRyb2wKKyAgICAgKiAgICAgICAgICAyICAgICAgIFhvbi9Yb2ZmCisg ICAgICogICAgICAgICAgMyAgICAgICBSdHMvQ3RzCisgICAgICogICAgICAgICAxNyAgICAgICBE Q0QKKyAgICAgKiAgICAgICAgIDE5ICAgICAgIERTUgorICAgICAqLworICAgIC8qIHdhaXQgZm9y IHJlc3BvbnNlLCByZXR1cm4gbmV3IGhvc3QgdmFsdWUuICovCisgICAgaW50IGkgPSAwLCByYzsK KworICAgIGRlYnVnKEYxMTEsInRuY19zZXRfb2Zsb3ciLCJiZWdpbiIsY29udHJvbCk7CisgICAg aWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5Q X1RFTE5FVCkgcmV0dXJuKDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQp KSByZXR1cm4oMCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9T VEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAg ICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoY29udHJvbCAhPSAxICYmIGNvbnRy b2wgIT0gMiAmJiBjb250cm9sICE9IDMgJiYKKyAgICAgICAgY29udHJvbCAhPSAxNyAmJiBjb250 cm9sICE9IDE5KQorICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCBjb250cm9sICE9IDAgJiYg Y29udHJvbCA9PSB0bmNfb2Zsb3cgKQorICAgICAgICByZXR1cm4odG5jX29mbG93KTsKKworICAg IHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21t YW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyog U3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAg ICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9DT05U Uk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLworICAgIHNiX291dFtpKytdID0gKHVuc2lnbmVkIGNo YXIpKGNvbnRyb2wgJiAweEZGKTsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAg ICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9 IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisKKyNp ZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAg ICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRF TE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAg ICIgU0VULUNPTlRST0wgIiwgY2tpdG9hKGNvbnRyb2wpLCIgSUFDIFNFIiwgTlVMTCwKKyAgICAg ICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5k aWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9J TkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0 bl9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9t c2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9v dXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VU ZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOwor CisgICAgaWYgKHRuY193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IG91dGJvdW5kIGZsb3cgY29u dHJvbCIsMCkgPCAwKSB7CisgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgZGVidWcoRjExMSwidG5jX3NldF9vZmxvdyIsImVuZCIsdG5jX29mbG93KTsK KyAgICByZXR1cm4odG5jX29mbG93KTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19n ZXRfb2Zsb3codm9pZCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit0bmNfZ2V0X29mbG93KCkKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2dldF9vZmxvdyAqLyB7CisgICAgLyogSUFDIFNC IENPTV9QT1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgxKT0wPiBJQUMgU0UgKi8KKyAgICAvKiB3YWl0 IGZvciByZXNwb25zZSAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBkZWJ1ZyhGMTEwLCJ0 bmNfZ2V0X29mbG93IiwiYmVnaW4iLDApOworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikgcmV0 dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKKworICAg IGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOworCisjaWZkZWYgQ0tf U1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBh IENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAg ICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7 ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VU X0NPTlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCisgICAgc2Jfb3V0W2krK10gPSBUTkNfQ1RM X09GTE9XX1JFUVVFU1Q7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAg ICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2tt YWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQg U0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICAiIFNF VC1DT05UUk9MICIsCisgICAgICAgICAgICAgICAgICAgY2tpdG9hKFROQ19DVExfT0ZMT1dfUkVR VUVTVCksCisgICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAg ICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBE RUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5J VEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19v dXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8 IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11 dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBp ZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9ydCBnZXQgb3V0Ym91bmQgZmxvdyBjb250cm9sIiww KSA8IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0K KyAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X29mbG93IiwiZW5kIix0bmNfb2Zsb3cpOworICAgIHJl dHVybih0bmNfb2Zsb3cpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX3NldF9pZmxv dyhpbnQgY29udHJvbCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit0bmNfc2V0X2lmbG93KGNvbnRy b2wpIGludCBjb250cm9sOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNfc2V0X2lmbG93 ICovIHsKKyAgICAvKiBJQUMgU0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPiBJQUMg U0UgKi8KKyAgICAvKiAgICAgICAgVmFsdWUgICAgIEZsb3cgQ29udHJvbAorICAgICAqICAgICAg ICAgMTQgICAgICAgTm8gRmxvdyBDb250cm9sCisgICAgICogICAgICAgICAxNSAgICAgICBYb24v WG9mZgorICAgICAqICAgICAgICAgMTYgICAgICAgUnRzL0N0cworICAgICAqICAgICAgICAgMTgg ICAgICAgRFRSCisgICAgICovCisgICAgLyogd2FpdCBmb3IgcmVzcG9uc2UsIHJldHVybiBuZXcg aG9zdCB2YWx1ZS4gKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjExMSwidG5j X3NldF9pZmxvdyIsImJlZ2luIixjb250cm9sKTsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIp IHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisK KyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKworI2lmZGVm IENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1l X2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wg Ki8KKworICAgIGlmIChjb250cm9sICE9IDE0ICYmIGNvbnRyb2wgIT0gMTUgJiYgY29udHJvbCAh PSAxNiAmJiBjb250cm9sICE9IDE4KQorICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCBjb250 cm9sICE9IDAgJiYgY29udHJvbCA9PSB0bmNfaWZsb3cgKQorICAgICAgICByZXR1cm4odG5jX2lm bG93KTsKKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8q IEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAg ICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9D T01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBUTkNf QzJTX1NFVF9DT05UUk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLworICAgIHNiX291dFtpKytdID0g KHVuc2lnbmVkIGNoYXIpKGNvbnRyb2wgJiAweEZGKTsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSBJQUM7ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFD IFNFICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNl cykgeworICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAg ICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAg ICAgICAgICAgICAgICIgU0VULUNPTlRST0wgIiwgY2tpdG9hKGNvbnRyb2wpLCIgSUFDIFNFIiwg TlVMTCwKKyAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsK KyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0 TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAg ZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0 bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2wo KENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgor ICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgcmV0 dXJuKC0xKTsKKworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBpbmJvdW5k IGZsb3cgY29udHJvbCIsMCkgPCAwKSB7CisgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwidG5jX3NldF9pZmxvdyIsImVuZCIsdG5j X2lmbG93KTsKKyAgICByZXR1cm4odG5jX2lmbG93KTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5T SUMKK3RuY19nZXRfaWZsb3codm9pZCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit0bmNfZ2V0X2lm bG93KCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2dldF9pZmxvdyAqLyB7CisgICAg LyogSUFDIFNCIENPTV9QT1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgxKT0xMz4gSUFDIFNFICovCisg ICAgLyogd2FpdCBmb3IgcmVzcG9uc2UgKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVi dWcoRjExMCwidG5jX2dldF9pZmxvdyIsImJlZ2luIiwwKTsKKyAgICBpZiAodHRuZXQgIT0gTkVU X1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4o MCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKwor I2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRf dGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBD S19TU0wgKi8KKworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAg IC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAg ICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9Q VF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBU TkNfQzJTX1NFVF9DT05UUk9MOyAgICAvKiBTZXQgQ29udHJvbCAqLworICAgIHNiX291dFtpKytd ID0gVE5DX0NUTF9JRkxPV19SRVFVRVNUOworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsg ICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtp KytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8K KworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7Cisg ICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAgICAgICAg ICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAgICAg ICAgICAgIiBTRVQtQ09OVFJPTCAiLAorICAgICAgICAgICAgICAgICAgY2tpdG9hKFROQ19DVExf SUZMT1dfUkVRVUVTVCksCisgICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCisgICAg ICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2Vu ZGlmIC8qIERFQlVHICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1f SU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAs dG5fbXNnX291dCwiIiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5f bXNnX291dCk7CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jf b3V0LGkpIDwgMCk7ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNl VGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsK KworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IGdldCBpbmJvdW5kIGZsb3cgY29u dHJvbCIsMCkgPCAwKSB7CisgICAgICAgIHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgZGVidWcoRjExMSwidG5jX2dldF9pZmxvdyIsImVuZCIsdG5jX2lmbG93KTsK KyAgICByZXR1cm4odG5jX2lmbG93KTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19z ZXRfYnJlYWtfc3RhdGUoaW50IG9ub2ZmKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19zZXRf YnJlYWtfc3RhdGUob25vZmYpIGludCBvbm9mZjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog dG5jX3NldF9icmVha19zdGF0ZSAqLyB7CisgICAgLyogSUFDIFNCIENPTV9QT1JUIFNFVF9DT05U Uk9MIDx2YWx1ZSgxKT4gSUFDIFNFICovCisgICAgLyogICAgICAgIFZhbHVlICAgICBCcmVhayBT dGF0ZQorICAgICAqICAgICAgICAgIDUgICAgICAgT24KKyAgICAgKiAgICAgICAgICA2ICAgICAg IE9mZgorICAgICAqLworICAgIC8qIHdhaXQgZm9yIHJlc3BvbnNlLCByZXR1cm4gbmV3IGhvc3Qg dmFsdWUuICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRlYnVnKEYxMTEsInRuY19zZXRf YnJlYWtfc3RhdGUiLCJiZWdpbiIsb25vZmYpOworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQikg cmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsKKwor ICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOworCisjaWZkZWYg Q0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVf Zm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAq LworCisgICAgaWYgKCBvbm9mZiAhPSAwICYmIG9ub2ZmID09IHRuY19icmVhayApCisgICAgICAg IHJldHVybih0bmNfYnJlYWspOworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAg ICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFS KSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtp KytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9v dXRbaSsrXSA9IFROQ19DMlNfU0VUX0NPTlRST0w7ICAgIC8qIFNldCBDb250cm9sICovCisgICAg c2Jfb3V0W2krK10gPSBvbm9mZiA/CisgICAgICBUTkNfQ1RMX0JSRUFLX09OIDogVE5DX0NUTF9C UkVBS19PRkY7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAg LyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7 ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYgREVCVUcK KyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNn KHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBT QiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICAiIFNFVC1DT05U Uk9MICIsCisgICAgICAgICAgICAgICAgICBvbm9mZiA/ICJCUkVBSy1PTiIgOiAiQlJFQUstT0ZG IiwKKyAgICAgICAgICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAg IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcg Ki8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dB SVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIi LDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNl bmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsg ICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgp OworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHRu Y193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IGJyZWFrIHN0YXRlIiwwKSA8IDApIHsKKyAgICAg ICAgdG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEx LCJ0bmNfc2V0X2JyZWFrX3N0YXRlIiwiZW5kIix0bmNfYnJlYWspOworICAgIHJldHVybih0bmNf YnJlYWspOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX2dldF9icmVha19zdGF0ZSh2 b2lkKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19nZXRfYnJlYWtfc3RhdGUoKQorI2VuZGlm IC8qIENLX0FOU0lDICovCisvKiB0bmNfZ2V0X2JyZWFrX3N0YXRlICovIHsKKyAgICAvKiBJQUMg U0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPTQ+IElBQyBTRSAqLworICAgIC8qIHdh aXQgZm9yIHJlc3BvbnNlICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRlYnVnKEYxMTAs InRuY19nZXRfYnJlYWtfc3RhdGUiLCJiZWdpbiIsMCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9U Q1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDAp OworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyNp ZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tf U1NMICovCisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAg ICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRf Q09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5D X0MyU19TRVRfQ09OVFJPTDsgICAgLyogU2V0IENvbnRyb2wgKi8KKyAgICBzYl9vdXRbaSsrXSA9 IFROQ19DVExfQlJFQUtfUkVRVUVTVDsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAg ICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsr XSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICovCisK KyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAg ICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAg IlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAg ICAgICIgU0VULUNPTlRST0wgIiwKKyAgICAgICAgICAgICAgICAgICJCUkVBSy1SRVFVRVNUIiwK KyAgICAgICAgICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgIE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQg KTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjEwMCx0bl9tc2dfb3V0LCIiLDAp OworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2dfb3V0KTsKKyNlbmRp ZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIgKilzYl9vdXQsaSkgPCAwKTsgICAg ICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwor I2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHRuY193 YWl0KChDSEFSICopImNvbXBvcnQgZ2V0IGJyZWFrIHN0YXRlIiwwKSA8IDApIHsKKyAgICAgICAg dG5fcHVzaCgpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0 bmNfZ2V0X2JyZWFrX3N0YXRlIiwiZW5kIix0bmNfYnJlYWspOworICAgIHJldHVybih0bmNfYnJl YWspOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX3NldF9kdHJfc3RhdGUoaW50IG9u b2ZmKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19zZXRfZHRyX3N0YXRlKG9ub2ZmKSBpbnQg b25vZmY7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19zZXRfZHRyX3N0YXRlICovIHsK KyAgICAvKiBJQUMgU0IgQ09NX1BPUlQgU0VUX0NPTlRST0wgPHZhbHVlKDEpPiBJQUMgU0UgKi8K KyAgICAvKiAgICAgICAgVmFsdWUgICAgIER0ciBTdGF0ZQorICAgICAqICAgICAgICAgIDggICAg ICAgT24KKyAgICAgKiAgICAgICAgICA5ICAgICAgIE9mZgorICAgICAqLworICAgIC8qIHdhaXQg Zm9yIHJlc3BvbnNlLCByZXR1cm4gbmV3IGhvc3QgdmFsdWUuICovCisgICAgaW50IGkgPSAwLCBy YzsKKworICAgIGRlYnVnKEYxMTEsInRuY19zZXRfZHRyX3N0YXRlIiwiYmVnaW4iLG9ub2ZmKTsK KyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAgICBpZiAodHRucHJvdG8g IT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQ09N UE9SVCkpIHJldHVybigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVM T1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuKDAp OworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmICggb25vZmYgIT0gMCAmJiBv bm9mZiA9PSB0bmNfZHRyICkKKyAgICAgICAgcmV0dXJuKHRuY19kdHIpOworCisgICAgc2Jfb3V0 W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyogSSBBbSBhIENvbW1hbmQgKi8K KyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAgICAgICAgICAgICAvKiBTdWJuZWdv dGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BUX0NPTVBPUlQ7ICAgICAgICAgICAg IC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DMlNfU0VUX0NPTlRST0w7ICAg IC8qIFNldCBDb250cm9sICovCisgICAgc2Jfb3V0W2krK10gPSBvbm9mZiA/CisgICAgICAgIFRO Q19DVExfRFRSX09OIDogVE5DX0NUTF9EVFJfT0ZGOworICAgIHNiX291dFtpKytdID0gKENIQVIp IElBQzsgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNi X291dFtpKytdID0gKENIQVIpIFNFOyAgICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMg U0UgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2Vz KSB7CisgICAgICAgIGNrbWFreG1zZyh0bl9tc2dfb3V0LFROX01TR19MRU4sCisgICAgICAgICAg ICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAg ICAgICAgICAgICAgIiBTRVQtQ09OVFJPTCAiLAorICAgICAgICAgICAgICAgICAgb25vZmYgPyAi RFRSLU9OIiA6ICJEVFItT0ZGIiwKKyAgICAgICAgICAgICAgICAgICIgSUFDIFNFIiwgTlVMTCwK KyAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgo IFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorI2lmZGVmIERFQlVHCisgICAgZGVidWco RjEwMCx0bl9tc2dfb3V0LCIiLDApOworICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 Zyh0bl9tc2dfb3V0KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJjID0gKHR0b2woKENIQVIg KilzYl9vdXQsaSkgPCAwKTsgICAgICAvKiBTZW5kIGl0LiAqLworI2lmZGVmIE9TMgorICAgIFJl bGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisgICAgaWYgKHJjKQorICAgICAgcmV0dXJuKC0x KTsKKworICAgIGlmICh0bmNfd2FpdCgoQ0hBUiAqKSJjb21wb3J0IHNldCBkdHIgc3RhdGUiLDAp IDwgMCkgeworICAgICAgICB0bl9wdXNoKCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQor ICAgIGRlYnVnKEYxMTEsInRuY19zZXRfZHRyX3N0YXRlIiwiZW5kIix0bmNfZHRyKTsKKyAgICBy ZXR1cm4odG5jX2R0cik7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bmNfZ2V0X2R0cl9z dGF0ZSh2b2lkKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19nZXRfZHRyX3N0YXRlKCkKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2dldF9kdHJfc3RhdGUgKi8geworICAgIC8qIElB QyBTQiBDT01fUE9SVCBTRVRfQ09OVFJPTCA8dmFsdWUoMSk9Nz4gSUFDIFNFICovCisgICAgLyog d2FpdCBmb3IgcmVzcG9uc2UgKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjEx MCwidG5jX2dldF9kdHJfc3RhdGUiLCJiZWdpbiIsMCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9U Q1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDAp OworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyNp ZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tf U1NMICovCisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAg ICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRf Q09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5D X0MyU19TRVRfQ09OVFJPTDsgICAgLyogU2V0IENvbnRyb2wgKi8KKyAgICBzYl9vdXRbaSsrXSA9 IFROQ19DVExfRFRSX1JFUVVFU1Q7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAg ICAgICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10g PSAoQ0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisj aWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAg ICAgY2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJU RUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAg ICAiIFNFVC1DT05UUk9MICIsCisgICAgICAgICAgICAgICAgICAiRFRSLVJFUVVFU1QiLAorICAg ICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lm ZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwor I2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7Cisg ICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOworI2VuZGlmIC8q IERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8q IFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5k aWYKKyAgICBpZiAocmMpCisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHRuY193YWl0KChD SEFSICopImNvbXBvcnQgZ2V0IGR0ciBzdGF0ZSIsMCkgPCAwKSB7CisgICAgICAgIHRuX3B1c2go KTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwidG5jX2dldF9k dHJfc3RhdGUiLCJlbmQiLHRuY19kdHIpOworICAgIHJldHVybih0bmNfZHRyKTsKK30KKworaW50 CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19zZXRfcnRzX3N0YXRlKGludCBvbm9mZikKKyNlbHNlIC8q IENLX0FOU0lDICovCit0bmNfc2V0X3J0c19zdGF0ZShvbm9mZikgaW50IG9ub2ZmOworI2VuZGlm IC8qIENLX0FOU0lDICovCisvKiB0bmNfc2V0X3J0c19zdGF0ZSAqLyB7CisgICAgLyogSUFDIFNC IENPTV9QT1JUIFNFVF9DT05UUk9MIDx2YWx1ZSgxKT4gSUFDIFNFICovCisgICAgLyogICAgICAg IFZhbHVlICAgICBSdHMgU3RhdGUKKyAgICAgKiAgICAgICAgICA1ICAgICAgIE9uCisgICAgICog ICAgICAgICAgNiAgICAgICBPZmYKKyAgICAgKi8KKyAgICAvKiB3YWl0IGZvciByZXNwb25zZSwg cmV0dXJuIG5ldyBob3N0IHZhbHVlLiAqLworICAgIGludCBpID0gMCwgcmM7CisKKyAgICBkZWJ1 ZyhGMTExLCJ0bmNfc2V0X3J0c19zdGF0ZSIsImJlZ2luIixvbm9mZik7CisgICAgaWYgKHR0bmV0 ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkg cmV0dXJuKDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4o MCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMp LnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5k aWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoIG9ub2ZmICE9IDAgJiYgb25vZmYgPT0gdG5jX3J0 cyApCisgICAgICAgIHJldHVybih0bmNfcnRzKTsKKworICAgIHNiX291dFtpKytdID0gKENIQVIp IElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBDb21tYW5kICovCisgICAgc2Jfb3V0W2kr K10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAgLyogU3VibmVnb3RpYXRpb24gKi8KKyAg ICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAgICAgICAgICAgICAvKiBDb21Qb3J0ICov CisgICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX1NFVF9DT05UUk9MOyAgICAvKiBTZXQgQ29udHJv bCAqLworICAgIHNiX291dFtpKytdID0gb25vZmYgPworICAgICAgVE5DX0NUTF9SVFNfT04gOiBU TkNfQ1RMX1JUU19PRkY7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAg ICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hB UikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2tt YWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQg U0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICAiIFNF VC1DT05UUk9MICIsCisgICAgICAgICAgICAgICAgICBvbm9mZiA/ICJSVFMtT04iIDogIlJUUy1P RkYiLAorICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAgICAg ICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVf V0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQs IiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOwor I2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDAp OyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4 KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHRu Y193YWl0KChDSEFSICopImNvbXBvcnQgc2V0IHJ0cyBzdGF0ZSIsMCkgPCAwKSB7CisgICAgICAg IHRuX3B1c2goKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwi dG5jX3NldF9ydHNfc3RhdGUiLCJlbmQiLHRuY19ydHMpOworICAgIHJldHVybih0bmNfcnRzKTsK K30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19nZXRfcnRzX3N0YXRlKHZvaWQpCisjZWxz ZSAvKiBDS19BTlNJQyAqLwordG5jX2dldF9ydHNfc3RhdGUoKQorI2VuZGlmIC8qIENLX0FOU0lD ICovCisvKiB0bmNfZ2V0X3J0c19zdGF0ZSAqLyB7CisgICAgLyogSUFDIFNCIENPTV9QT1JUIFNF VF9DT05UUk9MIDx2YWx1ZSgxKT0xMD4gSUFDIFNFICovCisgICAgLyogd2FpdCBmb3IgcmVzcG9u c2UgKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjExMCwidG5jX2dldF9ydHNf c3RhdGUiLCJiZWdpbiIsMCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7 CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDApOworCisgICAgaWYgKCFU RUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyNpZmRlZiBDS19TU0wKKyAg ICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7 CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBz Yl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFu ZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1 Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAg ICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfQ09OVFJP TDsgICAgLyogU2V0IENvbnRyb2wgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFROQ19DVExfUlRTX1JF UVVFU1Q7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAgLyog RW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7ICAg ICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYgREVCVUcKKyAg ICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNnKHRu X21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAi LFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICAiIFNFVC1DT05UUk9M ICIsCisgICAgICAgICAgICAgICAgICAiUlRTLVJFUVVFU1QiLAorICAgICAgICAgICAgICAgICAg IiBJQUMgU0UiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJl cXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYg REVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRuX21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8 fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZ19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAg cmMgPSAodHRvbCgoQ0hBUiAqKXNiX291dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisj aWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMp CisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAodG5jX3dhaXQoKENIQVIgKikiY29tcG9y dCBnZXQgcnRzIHN0YXRlIiwwKSA8IDApIHsKKyAgICAgICAgdG5fcHVzaCgpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bmNfZ2V0X3J0c19zdGF0ZSIsImVu ZCIsdG5jX3J0cyk7CisgICAgcmV0dXJuKHRuY19ydHMpOworfQorCitpbnQKKyNpZmRlZiBDS19B TlNJQwordG5jX3NldF9sc19tYXNrKGludCBtYXNrKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3Ru Y19zZXRfbHNfbWFzayhtYXNrKSBpbnQgbWFzazsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog dG5jX3NldF9sc19tYXNrICovIHsKKyAgICAvKiBJQUMgU0IgQ09NX1BPUlQgU0VUX0xJTkVTVEFU RV9NQVNLIDx2YWx1ZSgxKT4gSUFDIFNFICovCisgICAgLyogICAgICAgIEJpdCAgICAgICBNZWFu aW5nCisgICAgICogICAgICAgICAgMCAgICAgICBEYXRhIFJlYWR5CisgICAgICogICAgICAgICAg MSAgICAgICBPdmVycnVuIEVycm9yCisgICAgICogICAgICAgICAgMiAgICAgICBQYXJpdHkgRXJy b3IKKyAgICAgKiAgICAgICAgICAzICAgICAgIEZyYW1pbmcgRXJyb3IKKyAgICAgKiAgICAgICAg ICA0ICAgICAgIEJyZWFrIERldGVjdCBFcnJvcgorICAgICAqICAgICAgICAgIDUgICAgICAgVHJh bnNmZXIgSG9sZGluZyBSZWdpc3RlciBFbXB0eQorICAgICAqICAgICAgICAgIDYgICAgICAgVHJh bnNmZXIgU2hpZnQgUmVnaXN0ZXIgRW1wdHkKKyAgICAgKiAgICAgICAgICA3ICAgICAgIFRpbWVv dXQgRXJyb3IKKyAgICAgKi8KKyAgICBpbnQgaSA9IDAsIHJjOworCisgICAgZGVidWcoRjExMSwi dG5jX3NldF9sc19tYXNrIiwiYmVnaW4iLG1hc2spOworICAgIGlmICh0dG5ldCAhPSBORVRfVENQ QikgcmV0dXJuKDApOworICAgIGlmICh0dG5wcm90byAhPSBOUF9URUxORVQpIHJldHVybigwKTsK KworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9DT01QT1JUKSkgcmV0dXJuKDApOworCisjaWZk ZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMu bWVfZm9sbG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NT TCAqLworCisgICAgaWYgKCBtYXNrICE9IDAgJiYgbWFzayA9PSB0bmNfbHNfbWFzayApCisgICAg ICAgIHJldHVybih0bmNfbHNfbWFzayk7CisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7 ICAgICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0g KENIQVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jf b3V0W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAg IHNiX291dFtpKytdID0gVE5DX0MyU19TRVRfTFNfTUFTSzsKKyAgICBzYl9vdXRbaSsrXSA9ICh1 bnNpZ25lZCBjaGFyKShtYXNrICYgMHhGRik7CisgICAgaWYgKHNiX291dFtpLTFdID09IElBQyAp CisgICAgICBzYl9vdXRbaSsrXSA9IElBQzsKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7 ICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRb aSsrXSA9IChDSEFSKSBTRTsgICAgICAgICAgICAgICAgICAvKiBtYXJrZWQgYnkgSUFDIFNFICov CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewor ICAgICAgICBja21ha3htc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAg ICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAg ICAgICAgICIgU0VULUxJTkVTVEFURS1NQVNLICIsCisgICAgICAgICAgICAgICAgICBja2l0b2Eo bWFzayAmIDB4RkYpLAorICAgICAgICAgICAgICAgICAgIiBJQUMgU0UiLCBOVUxMLAorICAgICAg ICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRp ZiAvKiBERUJVRyAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lO REVGSU5JVEVfV0FJVCApOworI2VuZGlmCisjaWZkZWYgREVCVUcKKyAgICBkZWJ1ZyhGMTAwLHRu X21zZ19vdXQsIiIsMCk7CisgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21z Z19vdXQpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgcmMgPSAodHRvbCgoQ0hBUiAqKXNiX291 dCxpKSA8IDApOyAgICAgIC8qIFNlbmQgaXQuICovCisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRl bG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBpZiAocmMpCisgICAgICByZXR1cm4oLTEpOworCisg ICAgdG5jX2xzX21hc2sgPSBtYXNrOworICAgIGRlYnVnKEYxMTEsInRuY19zZXRfbHNfbWFzayIs ImVuZCIsdG5jX2xzX21hc2spOworICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZkZWYgQ0tf QU5TSUMKK3RuY19nZXRfbHNfbWFzayh2b2lkKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3RuY19n ZXRfbHNfbWFzaygpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19nZXRfbHNfbWFzayAq LyB7CisgICAgZGVidWcoRjEwMSwidG5jX2dldF9sc19tYXNrIiwiIix0bmNfbHNfbWFzayk7Cisg ICAgcmV0dXJuKHRuY19sc19tYXNrKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19n ZXRfbHModm9pZCkKKyNlbHNlIC8qIENLX0FOU0lDICovCit0bmNfZ2V0X2xzKCkKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworLyogdG5jX2dldF9scyAqLyB7CisgICAgaW50IGxzID0gdG5jX2xzOwor ICAgIGRlYnVnKEYxMDEsInRuY19nZXRfbHMiLCIiLHRuY19scyk7CisgICAgcmV0dXJuKGxzKTsK K30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19zZXRfbXNfbWFzayhpbnQgbWFzaykKKyNl bHNlIC8qIENLX0FOU0lDICovCit0bmNfc2V0X21zX21hc2sobWFzaykgaW50IG1hc2s7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuY19zZXRfbXNfbWFzayAqLyB7CisgICAgLyogSUFDIFNC IENPTV9QT1JUIFNFVF9NT0RFTVNUQVRFX01BU0sgPHZhbHVlKDEpPiBJQUMgU0UgKi8KKyAgICAv KiAgICAgICAgQml0ICAgICAgIE1lYW5pbmcKKyAgICAgKiAgICAgICAgICAwICAgICAgIERlbHRh IENsZWFyIFRvIFNlbmQKKyAgICAgKiAgICAgICAgICAxICAgICAgIERlbHRhIERhdGEgU2V0IFJl YWR5CisgICAgICogICAgICAgICAgMiAgICAgICBUcmFpbGluZyBFZGdlIFJpbmcgRGV0ZWN0b3IK KyAgICAgKiAgICAgICAgICAzICAgICAgIERlbHRhIFJlY2VpdmUgTGluZSBTaWduYWwgKENhcnJp ZXIpIERldGVjdAorICAgICAqICAgICAgICAgIDQgICAgICAgQ2xlYXIgVG8gU2VuZCBTaWduYWwg U3RhdGUKKyAgICAgKiAgICAgICAgICA1ICAgICAgIERhdGEtU2V0LVJlYWR5IFNpZ25hbCBTdGF0 ZQorICAgICAqICAgICAgICAgIDYgICAgICAgUmluZyBJbmRpY2F0b3IKKyAgICAgKiAgICAgICAg ICA3ICAgICAgIFJlY2VpdmUgTGluZSBTaWduYWwgKENhcnJpZXIpIERldGVjdAorICAgICAqLwor CisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRlYnVnKEYxMTEsInRuY19zZXRfbXNfbWFzayIs ImJlZ2luIixtYXNrKTsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVybigwKTsKKyAg ICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisKKyAgICBpZiAoIVRFTE9Q VF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKworI2lmZGVmIENLX1NTTAorICAgIGlm IChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAg ICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmICgg bWFzayAhPSAwICYmIG1hc2sgPT0gdG5jX21zX21hc2sgKQorICAgICAgICByZXR1cm4odG5jX21z X21hc2spOworCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAg LyogSSBBbSBhIENvbW1hbmQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBTQjsgICAgICAg ICAgICAgICAgICAvKiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gVEVMT1BU X0NPTVBPUlQ7ICAgICAgICAgICAgIC8qIENvbVBvcnQgKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRO Q19DMlNfU0VUX01TX01BU0s7CisgICAgc2Jfb3V0W2krK10gPSAodW5zaWduZWQgY2hhcikobWFz ayAmIDB4RkYpOworICAgIGlmIChzYl9vdXRbaS0xXSA9PSBJQUMgKQorICAgICAgc2Jfb3V0W2kr K10gPSBJQUM7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAgICAgICAgICAg LyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0U7 ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZkZWYgREVCVUcK KyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgY2ttYWt4bXNn KHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBT QiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICAiIFNFVC1NT0RF TVNUQVRFLU1BU0sgIiwKKyAgICAgICAgICAgICAgICAgIGNraXRvYShtYXNrICYgMHhGRiksCisg ICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisj aWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7 CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsK KyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYg LyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAg LyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNl bmRpZgorICAgIGlmIChyYykKKyAgICAgIHJldHVybigtMSk7CisKKyAgICB0bmNfbXNfbWFzayA9 IG1hc2s7CisgICAgZGVidWcoRjExMSwidG5jX3NldF9tc19tYXNrIiwiZW5kIix0bmNfbXNfbWFz ayk7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX2dldF9t c19tYXNrKHZvaWQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordG5jX2dldF9tc19tYXNrKCkKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5jX2dldF9tc19tYXNrICovIHsKKyAgICBkZWJ1ZyhG MTAxLCJ0bmNfZ2V0X2dzX21hc2siLCIiLHRuY19tc19tYXNrKTsKKyAgICByZXR1cm4odG5jX21z X21hc2spOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5jX2dldF9tcyh2b2lkKQorI2Vs c2UgLyogQ0tfQU5TSUMgKi8KK3RuY19nZXRfbXMoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiB0bmNfZ2V0X21zICovIHsKKyAgICBpbnQgbXMgPSB0bmNfbXM7CisgICAgZGVidWcoRjEwMSwi dG5jX2dldF9tcyIsIiIsdG5jX21zKTsKKyAgICByZXR1cm4obXMpOworfQorCitpbnQKKyNpZmRl ZiBDS19BTlNJQwordG5jX3NlbmRfcHVyZ2VfZGF0YShpbnQgbW9kZSkKKyNlbHNlIC8qIENLX0FO U0lDICovCit0bmNfc2VuZF9wdXJnZV9kYXRhKG1vZGUpIGludCBtb2RlOworI2VuZGlmIC8qIENL X0FOU0lDICovCisvKiB0bmNfc2VuZF9wdXJnZV9kYXRhICovIHsKKyAgICAvKiBJQUMgU0IgQ09N X1BPUlQgUFVSR0VfREFUQSA8dmFsdWUoMSk+IElBQyBTRSAqLworICAgIC8qICAgICAgICBWYWx1 ZSAgICAgTWVhbmluZworICAgICAqICAgICAgICAgIDEgICAgICAgUHVyZ2UgYWNjZXNzIHNlcnZl ciByZWNlaXZlIGRhdGEgYnVmZmVyCisgICAgICogICAgICAgICAgMiAgICAgICBQdXJnZSBhY2Nl c3Mgc2VydmVyIHRyYW5zbWl0IGRhdGEgYnVmZmVyCisgICAgICogICAgICAgICAgMyAgICAgICBQ dXJnZSBhY2Nlc3Mgc2VydmVyIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRhdGEgYnVmZmVycworICAg ICAqLworICAgIC8qIE5vIHJlc3BvbnNlICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRl YnVnKEYxMTEsInRuY19zZW5kX3B1cmdlX2RhdGEiLCJiZWdpbiIsbW9kZSk7CisgICAgaWYgKHR0 bmV0ICE9IE5FVF9UQ1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5F VCkgcmV0dXJuKDApOworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1 cm4oMCk7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9U TFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9Cisj ZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoICEobW9kZSA+PSAxICYmIG1vZGUgPD0gMykg KQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAg ICAgICAgICAgICAgICAvKiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENI QVIpIFNCOyAgICAgICAgICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0 W2krK10gPSBURUxPUFRfQ09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNi X291dFtpKytdID0gVE5DX0MyU19QVVJHRTsKKyAgICBzYl9vdXRbaSsrXSA9ICh1bnNpZ25lZCBj aGFyKShtb2RlICYgMHhGRik7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAg ICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAo Q0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZk ZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAg Y2ttYWt4bXNnKHRuX21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgICJURUxO RVQgU0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQ09NUE9SVCksCisgICAgICAgICAgICAgICAgICAi IFBVUkdFLURBVEEgIiwKKyAgICAgICAgICAgICAgICAgIGNraXRvYShtb2RlICYgMHhGRiksCisg ICAgICAgICAgICAgICAgICAiIElBQyBTRSIsIE5VTEwsCisgICAgICAgICAgICAgICAgICBOVUxM LE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisj aWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7 CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsK KyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYg LyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAg LyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNl bmRpZgorICAgIGlmIChyYykKKyAgICAgIHJldHVybigtMSk7CisgICAgZGVidWcoRjExMCwidG5j X3NlbmRfcHVyZ2VfZGF0YSIsImVuZCIsMCk7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNp ZmRlZiBDS19BTlNJQwordG5jX2Zsb3dfc3VzcGVuZGVkKHZvaWQpCisjZWxzZSAvKiBDS19BTlNJ QyAqLwordG5jX2Zsb3dfc3VzcGVuZGVkKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5j X2Zsb3dfc3VzcGVuZGVkICovIHsKKyAgICBkZWJ1ZyhGMTExLCJ0bmNfZmxvd19zdXNwZW5kZWQi LCIiLHRuY19zdXNwZW5kX3htaXQpOworICAgIHJldHVybih0bmNfc3VzcGVuZF94bWl0KTsKK30K KworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3RuY19zdXNwZW5kX2Zsb3codm9pZCkKKyNlbHNlIC8q IENLX0FOU0lDICovCit0bmNfc3VzcGVuZF9mbG93KCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor LyogdG5jX3N1c3BlbmRfZmxvdyAqLyB7CisgICAgLyogSUFDIFNCIENPTV9QT1JUIEZMT1dDT05U Uk9MX1NVU1BFTkQgSUFDIFNFICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRlYnVnKEYx MTAsInRuY19zdXNwZW5kX2Zsb3ciLCJiZWdpbiIsMCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9U Q1BCKSByZXR1cm4oMCk7CisgICAgaWYgKHR0bnByb3RvICE9IE5QX1RFTE5FVCkgcmV0dXJuKDAp OworCisgICAgaWYgKCFURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSByZXR1cm4oMCk7CisKKyNp ZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFSVF9UTFMpLnN0YXJ0X3Rs cy5tZV9mb2xsb3dzKSB7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tf U1NMICovCisKKyAgICBzYl9vdXRbaSsrXSA9IChDSEFSKSBJQUM7ICAgICAgICAgICAgICAgICAv KiBJIEFtIGEgQ29tbWFuZCAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNCOyAgICAgICAg ICAgICAgICAgIC8qIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSBURUxPUFRf Q09NUE9SVDsgICAgICAgICAgICAgLyogQ29tUG9ydCAqLworICAgIHNiX291dFtpKytdID0gVE5D X0MyU19GTE9XX1NVU1BFTkQ7CisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgSUFDOyAgICAgICAg ICAgICAgICAgLyogRW5kIG9mIFN1Ym5lZ290aWF0aW9uICovCisgICAgc2Jfb3V0W2krK10gPSAo Q0hBUikgU0U7ICAgICAgICAgICAgICAgICAgLyogbWFya2VkIGJ5IElBQyBTRSAqLworCisjaWZk ZWYgREVCVUcKKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAg Y2ttYWttc2codG5fbXNnX291dCxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAiVEVMTkVU IFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0NPTVBPUlQpLAorICAgICAgICAgICAgICAgICAiIEZM T1dDT05UUk9MLVNVU1BFTkQgSUFDIFNFIiwgTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVH ICovCisjaWZkZWYgT1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9X QUlUICk7CisjZW5kaWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwi IiwwKTsKKyAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7Cisj ZW5kaWYgLyogREVCVUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7 ICAgICAgLyogU2VuZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgo KTsKKyNlbmRpZgorICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhG MTEwLCJ0bmNfc3VzcGVuZF9mbG93IiwiZW5kIiwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2lu dAorI2lmZGVmIENLX0FOU0lDCit0bmNfcmVzdW1lX2Zsb3codm9pZCkKKyNlbHNlIC8qIENLX0FO U0lDICovCit0bmNfcmVzdW1lX2Zsb3coKQorI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0bmNf cmVzdW1lX2Zsb3cgKi8geworICAgIC8qIElBQyBTQiBDT01fUE9SVCBGTE9XQ09OVFJPTF9SRVNV TUUgSUFDIFNFICovCisgICAgaW50IGkgPSAwLCByYzsKKworICAgIGRlYnVnKEYxMTAsInRuY19y ZXN1bWVfZmxvdyIsImJlZ2luIiwwKTsKKyAgICBpZiAodHRuZXQgIT0gTkVUX1RDUEIpIHJldHVy bigwKTsKKyAgICBpZiAodHRucHJvdG8gIT0gTlBfVEVMTkVUKSByZXR1cm4oMCk7CisKKyAgICBp ZiAoIVRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHJldHVybigwKTsKKworI2lmZGVmIENLX1NT TAorICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxv d3MpIHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKwor ICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8qIEkgQW0gYSBD b21tYW5kICovCisgICAgc2Jfb3V0W2krK10gPSAoQ0hBUikgU0I7ICAgICAgICAgICAgICAgICAg LyogU3VibmVnb3RpYXRpb24gKi8KKyAgICBzYl9vdXRbaSsrXSA9IFRFTE9QVF9DT01QT1JUOyAg ICAgICAgICAgICAvKiBDb21Qb3J0ICovCisgICAgc2Jfb3V0W2krK10gPSBUTkNfQzJTX0ZMT1df UkVTVU1FOworICAgIHNiX291dFtpKytdID0gKENIQVIpIElBQzsgICAgICAgICAgICAgICAgIC8q IEVuZCBvZiBTdWJuZWdvdGlhdGlvbiAqLworICAgIHNiX291dFtpKytdID0gKENIQVIpIFNFOyAg ICAgICAgICAgICAgICAgIC8qIG1hcmtlZCBieSBJQUMgU0UgKi8KKworI2lmZGVmIERFQlVHCisg ICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGNrbWFrbXNnKHRu X21zZ19vdXQsVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIs VEVMT1BUKFRFTE9QVF9DT01QT1JUKSwKKyAgICAgICAgICAgICAgICAgIiBGTE9XQ09OVFJPTC1S RVNVTUUgSUFDIFNFIiwgTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYg T1MyCisgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5k aWYKKyNpZmRlZiBERUJVRworICAgIGRlYnVnKEYxMDAsdG5fbXNnX291dCwiIiwwKTsKKyAgICBp ZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnX291dCk7CisjZW5kaWYgLyogREVC VUcgKi8KKyAgICByYyA9ICh0dG9sKChDSEFSICopc2Jfb3V0LGkpIDwgMCk7ICAgICAgLyogU2Vu ZCBpdC4gKi8KKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNlbmRpZgor ICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0bmNfcmVz dW1lX2Zsb3ciLCJlbmQiLDApOworICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZkZWYgQ0tf QU5TSUMKK3Ruc2V0ZmxvdyhpbnQgbmZsb3cpCisjZWxzZQordG5zZXRmbG93KG5mbG93KSBpbnQg bmZsb3c7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRuc2V0ZmxvdyAqLyB7CisKKyAgICBp bnQgcmMgPSAtMTsKKworICAgIGRlYnVnKEYxMTEsInRuc2V0ZmxvdyIsImJlZ2luIixuZmxvdyk7 CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCIHx8IHR0bnByb3RvICE9IE5QX1RFTE5FVCkKKyAg ICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0NPTVBPUlQpKSB7 CisgICAgICAgIHN3aXRjaChuZmxvdykgeworICAgICAgICAgIGNhc2UgRkxPX1hPTlg6CisgICAg ICAgICAgICByYyA9IHRuY19zZXRfb2Zsb3coCisgICAgICAgICAgICAgICAgIFROQ19DVExfT0ZM T1dfWE9OX1hPRkYKKyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmIChyYyA+PSAw KQorICAgICAgICAgICAgICByYyA9IHRuY19zZXRfaWZsb3coCisgICAgICAgICAgICAgICAgICAg VE5DX0NUTF9JRkxPV19YT05fWE9GRgorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBjYXNlIEZMT19SVFNDOgorICAgICAgICAgICAgcmMgPSB0bmNf c2V0X29mbG93KAorICAgICAgICAgICAgICAgICBUTkNfQ1RMX09GTE9XX1JUU19DVFMKKyAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGlmIChyYyA+PSAwKQorICAgICAgICAgICAgICBy YyA9IHRuY19zZXRfaWZsb3coCisgICAgICAgICAgICAgICAgICAgVE5DX0NUTF9JRkxPV19SVFNf Q1RTCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IGNhc2UgRkxPX0tFRVA6CisgICAgICAgICAgICAvKiBsZWF2ZSB0aGluZ3MgZXhhY3RseSBhcyB0 aGV5IGFyZSAqLworICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBGTE9fTk9ORToKKyAgICAgICAgICBjYXNlIEZMT19ESUFMOiAgLyogZGlhbGlu ZyBoYWNrICovCisgICAgICAgICAgY2FzZSBGTE9fRElBWDogIC8qIGNhbmNlbCBkaWFsaW5nIGhh Y2sgKi8KKyAgICAgICAgICAgIHJjID0gdG5jX3NldF9vZmxvdygKKyAgICAgICAgICAgICAgICAg VE5DX0NUTF9PRkxPV19OT05FCisgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAo cmMgPj0gMCkKKyAgICAgICAgICAgICAgcmMgPSB0bmNfc2V0X2lmbG93KAorICAgICAgICAgICAg ICAgICAgIFROQ19DVExfSUZMT1dfTk9ORQorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEZMT19EVFJDOgorICAgICAgICAgIGNhc2UgRkxP X0VUWEE6CisgICAgICAgICAgY2FzZSBGTE9fU1RSRzoKKyAgICAgICAgICBjYXNlIEZMT19EVFJU OgorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBub3Qgc3VwcG9ydGVkICovCisg ICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9 CisgICAgZGVidWcoRjExMSwidG5zZXRmbG93IiwiZW5kIixyYyk7CisgICAgcmV0dXJuKHJjID49 IDAgPyAwIDogLTEpOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwordG5zZXR0aW5ncyhpbnQg cGFyLCBpbnQgc3RvcCkKKyNlbHNlCit0bnNldHRpbmdzKHBhciwgc3RvcCkgaW50IHBhciwgc3Rv cDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdG5zZXR0aW5ncyAqLyB7CisgICAgaW50IHJj ID0gLTE7CisgICAgaW50IGRhdGFzaXplID0gMDsKKyAgICBleHRlcm4gaW50IGh3cGFyaXR5Owor CisgICAgZGVidWcoRjExMSwidG5zZXR0aW5ncyBiZWdpbiIsInBhciIscGFyKTsKKyAgICBkZWJ1 ZyhGMTExLCJ0bnNldHRpbmdzIGJlZ2luIiwic3RvcCIsc3RvcCk7CisgICAgaWYgKHR0bmV0ICE9 IE5FVF9UQ1BCIHx8IHR0bnByb3RvICE9IE5QX1RFTE5FVCkKKyAgICAgIHJldHVybigtMSk7CisK KyAgICBkYXRhc2l6ZSA9IHBhciA/IFROQ19EU183IDogVE5DX0RTXzg7CisgICAgaWYgKCFwYXIp IHBhciA9IGh3cGFyaXR5OworCisgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHsK KyAgICAgICAgc3dpdGNoIChwYXIpIHsKKyAgICAgICAgICBjYXNlICdlJzoKKyAgICAgICAgICAg IHJjID0gdG5jX3NldF9wYXJpdHkoVE5DX1BBUl9FVkVOKTsKKyAgICAgICAgICAgIGlmIChyYyA+ PSAwKQorICAgICAgICAgICAgICByYyA9IHRuY19zZXRfZGF0YXNpemUoZGF0YXNpemUpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnbyc6CisgICAgICAgICAgICByYyA9IHRu Y19zZXRfcGFyaXR5KFROQ19QQVJfT0REKTsKKyAgICAgICAgICAgIGlmIChyYyA+PSAwKQorICAg ICAgICAgICAgICByYyA9IHRuY19zZXRfZGF0YXNpemUoZGF0YXNpemUpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICByYyA9IHRuY19zZXRfcGFy aXR5KFROQ19QQVJfTUFSSyk7CisgICAgICAgICAgICBpZiAocmMgPj0gMCkKKyAgICAgICAgICAg ICAgcmMgPSB0bmNfc2V0X2RhdGFzaXplKGRhdGFzaXplKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgcmMgPSB0bmNfc2V0X3Bhcml0eShUTkNf UEFSX1NQQUNFKTsKKyAgICAgICAgICAgIGlmIChyYyA+PSAwKQorICAgICAgICAgICAgICByYyA9 IHRuY19zZXRfZGF0YXNpemUoZGF0YXNpemUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgY2FzZSAwOgorICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgcmMgPSB0bmNfc2V0 X3Bhcml0eShUTkNfUEFSX05PTkUpOworICAgICAgICAgICAgaWYgKHJjID49IDApCisgICAgICAg ICAgICAgIHJjID0gdG5jX3NldF9kYXRhc2l6ZShkYXRhc2l6ZSk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogbm8gY2hhbmdlICovCisgICAg ICAgICAgICByYyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoKHN0b3ApIHsKKyAgICAg ICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAocmMgPj0gMCkKKyAgICAgICAgICAgICAgcmMg PSB0bmNfc2V0X3N0b3BzaXplKFROQ19TQl8yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmIChyYyA+PSAwKQorICAgICAgICAgICAgICByYyA9 IHRuY19zZXRfc3RvcHNpemUoVE5DX1NCXzEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIG5vIGNoYW5nZSAqLworICAgICAgICAgICAgaWYg KHJjID49IDApCisgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBk ZWJ1ZyhGMTExLCJ0bnNldHRpbmdzIiwiZW5kIixyYyk7CisgICAgcmV0dXJuKChyYyA+PSAwKSA/ IDAgOiAtMSk7Cit9CisKKy8qICBUIE4gRyBNIEQgTSAgLS0gIFRlbG5ldCBHZXQgbW9kZW0gc2ln bmFscyAgKi8KKy8qCisgTG9va3MgZm9yIHRoZSBtb2RlbSBzaWduYWxzIENUUywgRFNSLCBhbmQg Q1RTLCBhbmQgcmV0dXJucyB0aG9zZSB0aGF0IGFyZQorIG9uIGluIGFzIGl0cyByZXR1cm4gdmFs dWUsIGluIGEgYml0IG1hc2sgYXMgZGVzY3JpYmVkIGZvciB0dHdtZG0uCisgUmV0dXJuczoKKyAg LTMgTm90IGltcGxlbWVudGVkCisgIC0yIGlmIHRoZSBsaW5lIGRvZXMgbm90IGhhdmUgbW9kZW0g Y29udHJvbAorICAtMSBvbiBlcnJvci4KKyAgPj0gMCBvbiBzdWNjZXNzLCB3aXRoIGEgYml0IG1h c2sgY29udGFpbmluZyB0aGUgbW9kZW0gc2lnbmFscyB0aGF0IGFyZSBvbi4KKyovCitpbnQKKyNp ZmRlZiBDS19BTlNJQwordG5nbWRtKHZvaWQpCisjZWxzZQordG5nbWRtKCkKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogdG5nbWRtICovIHsKKworICAgIGludCByYyA9IC0xOworCisgICAgZGVi dWcoRjExMCwidG5nbWRtIiwiYmVnaW4iLDApOworICAgIGlmICh0dG5ldCAhPSBORVRfVENQQiB8 fCB0dG5wcm90byAhPSBOUF9URUxORVQpCisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKFRF TE9QVF9NRShURUxPUFRfQ09NUE9SVCkpIHsKKyAgICAgICAgaW50IG1vZGVtc3RhdGUgPSB0bmNf Z2V0X21zKCk7CisgICAgICAgIGludCBtb2RlbSA9IDA7CisgICAgICAgIGlmIChtb2RlbXN0YXRl ICYgVE5DX01TX0NUU19TSUcpCisgICAgICAgICAgbW9kZW0gfD0gQk1fQ1RTOworICAgICAgICBp ZiAobW9kZW1zdGF0ZSAmIFROQ19NU19EU1JfU0lHKQorICAgICAgICAgIG1vZGVtIHw9IEJNX0RT UjsKKyAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfUklfU0lHKQorICAgICAgICAgIG1v ZGVtIHw9IEJNX1JORzsKKyAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfUkxTRF9TSUcp CisgICAgICAgICAgbW9kZW0gfD0gQk1fRENEOworICAgICAgICBkZWJ1ZyhGMTExLCJ0bmdtZG0i LCJlbmQiLG1vZGVtKTsKKyAgICAgICAgcmV0dXJuKG1vZGVtKTsKKyAgICB9IGVsc2UgeworICAg ICAgICBkZWJ1ZyhGMTExLCJ0bmdtZG0iLCJlbmQiLC0yKTsKKyAgICAgICAgcmV0dXJuKC0yKTsK KyAgICB9Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0bnNuZGIobG9uZyB3YWl0KQorI2Vs c2UKK3Ruc25kYih3YWl0KSBsb25nIHdhaXQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHRu c25kYiAqLyB7CisgICAgaW50IHJjID0gLTE7CisKKyAgICBkZWJ1ZyhGMTExLCJ0bnNuZGIiLCJi ZWdpbiIsd2FpdCk7CisgICAgaWYgKHR0bmV0ICE9IE5FVF9UQ1BCIHx8IHR0bnByb3RvICE9IE5Q X1RFTE5FVCkKKyAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9D T01QT1JUKSkgeworICAgICAgICByYyAgPSB0bmNfc2V0X2JyZWFrX3N0YXRlKDEpOworICAgICAg ICBpZiAocmMgPj0gMCkgeworICAgICAgICAgICAgbXNsZWVwKHdhaXQpOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBaWlp6enogKi8KKyAgICAgICAgICAgIHJjID0gdG5jX3NldF9icmVha19z dGF0ZSgwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0bnNuZGIiLCJlbmQi LHJjKTsKKyAgICByZXR1cm4oKHJjID49IDApID8gMCA6IC0xKTsKK30KKyNlbmRpZiAvKiBUTl9D T01QT1JUICovCisjZW5kaWYgLyogVE5DT0RFICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N0ZWwuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tjdGVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMjQyZTM5NgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2tjdGVsLmgKQEAgLTAsMCArMSwxMzM2IEBACisvKiBja2N0ZWwuaCAt LSBTeW1ib2wgYW5kIG1hY3JvIGRlZmluaXRpb25zIGZvciBDLUtlcm1pdCB0ZWxuZXQgc3VwcG9y dCAqLworCisvKgorICBBdXRob3JzOiBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1l bmRwb2ludHMuY29tPiwKKyAgICAgICAgICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcg WW9yayBDaXR5CisgICAgICAgICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+Cisg IENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlv cmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisgICAgVHJ1c3RlZXMgb2Yg Q29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmln aHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQor ICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIg YW5kIHBlcm1pc3Npb25zLgorCisgIE5vdGVzOgorICAuIFRoaXMgZmlsZSBzaG91bGQgYmUgdXNl ZCBpbiBwbGFjZSBvZiAiYXJwYS90ZWxuZXQuaCIKKyAgLiBPbmx5IG9uZSBzb3VyY2UgZmlsZSBz aG91bGQgaW5jbHVkZSAjZGVmaW5lcyBmb3IKKyAgICBURUxDTURTLCBURUxPUFRTLCBURUxPUFRf U1RBVEVTLCBTTENfTkFNRVMsIGFuZCBBVVRIX05BTUVTLgorKi8KKworI2lmbmRlZiBDS0NURUxf SAorI2RlZmluZSBDS0NURUxfSAorI2lmZGVmIFROQ09ERQorLyoKKyAgRGVmaW5pdGlvbnMgZm9y IHRoZSBURUxORVQgcHJvdG9jb2wuCisgIGNhbid0IHJlbHkgb24gbGlicmFyeSBoZWFkZXIgZmls ZXMgZm9yIGFueSBvZiB0aGVtLgorKi8KKyNpZmRlZiBDT01NRU5UCisvKiBJbiBzb21lIGNvbXBp bGVycyB0aGVzZSBhcmUgcHJvbmUgdG8gc2lnbiBleHRlbnNpb24gKi8KKworI2lmbmRlZiBJQUMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IHRoZSB0ZWxuZXQgY29tbWFuZHMg Ki8KKyNkZWZpbmUgSUFDIDI1NQorI2VuZGlmIC8qIElBQyAqLworI2lmbmRlZiBET05UCisjZGVm aW5lIERPTlQgMjU0CisjZW5kaWYgLyogRE9OVCAqLworI2lmbmRlZiBETworI2RlZmluZSBETyAy NTMKKyNlbmRpZiAvKiBETyAqLworI2lmbmRlZiBXT05UCisjZGVmaW5lIFdPTlQgMjUyCisjZW5k aWYgLyogV09OVCAqLworI2lmbmRlZiBXSUxMCisjZGVmaW5lIFdJTEwgMjUxCisjZW5kaWYgLyog V0lMTCAqLworI2lmbmRlZiBTQgorI2RlZmluZSBTQiAyNTAKKyNlbmRpZiAvKiBTQiAqLworI2lm bmRlZiBUTl9HQQorI2RlZmluZSBUTl9HQSAyNDkKKyNlbmRpZiAvKiBUTl9HQSAqLworI2lmbmRl ZiBUTl9FTAorI2RlZmluZSBUTl9FTCAyNDgKKyNlbmRpZiAvKiBUTl9FTCAqLworI2lmbmRlZiBU Tl9FQworI2RlZmluZSBUTl9FQyAyNDcKKyNlbmRpZiAvKiBUTl9FQyAqLworI2lmbmRlZiBUTl9B WVQKKyNkZWZpbmUgVE5fQVlUIDI0NgorI2VuZGlmIC8qIFROX0FZVCAqLworI2lmbmRlZiBUTl9B TworI2RlZmluZSBUTl9BTyAyNDUKKyNlbmRpZiAvKiBUTl9BTyAqLworI2lmbmRlZiBUTl9JUAor I2RlZmluZSBUTl9JUCAyNDQKKyNlbmRpZiAvKiBUTl9JUCAqLworI2lmbmRlZiBCUkVBSworI2Rl ZmluZSBCUkVBSyAyNDMKKyNlbmRpZiAvKiBCUkVBSyAqLworI2lmbmRlZiBUTl9ETQorI2RlZmlu ZSBUTl9ETSAyNDIKKyNlbmRpZiAvKiBUTl9ETSAqLworI2lmbmRlZiBUTl9OT1AKKyNkZWZpbmUg VE5fTk9QIDI0MQorI2VuZGlmIC8qIFROX05PUCAqLworI2lmbmRlZiBTRQorI2RlZmluZSBTRSAy NDAKKyNlbmRpZiAvKiBTRSAqLworI2lmbmRlZiBUTl9FT1IKKyNkZWZpbmUgVE5fRU9SIDIzOQor I2VuZGlmIC8qIFROX0VPUiAqLworI2lmbmRlZiBUTl9BQk9SVAorI2RlZmluZSBUTl9BQk9SVCAy MzgKKyNlbmRpZiAvKiBUTl9BQk9SVCAqLworI2lmbmRlZiBUTl9TVVNQCisjZGVmaW5lIFROX1NV U1AgMjM3CisjZW5kaWYgLyogVE5fU1VTUCAqLworI2lmbmRlZiBUTl9FT0YKKyNkZWZpbmUgVE5f RU9GIDIzNgorI2VuZGlmIC8qIFROX0VPRiAqLworI2lmbmRlZiBMQVNUX1ROX0NNRAorI2RlZmlu ZSBMQVNUX1ROX0NNRCAyMzYKKworI2RlZmluZSBUTl9TQUsgMjAwICAgICAgICAgICAgICAvKiBJ Qk0gU2VjdXJlIEF0dGVudGlvbiBLZXkgKi8KKyNlbmRpZiAvKiBMQVNUX1ROX0NNRCAqLworI2Rl ZmluZSBTWU5DSCAgIDI0MiAgICAgICAgICAgICAvKiBmb3IgdGVsZnVuYyBjYWxscyAqLworCisj ZWxzZQorLyogSGV4IG5vdGF0aW9uIHNlZW1zIHRvIHN1cHByZXNzIHRoZSBzdWduIGV4dGVuc2lv biBlZmZlY3QgKi8KKworCisjaWZuZGVmIElBQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmlyc3QgdGhlIHRlbG5ldCBjb21tYW5kcyAqLworI2RlZmluZSBJQUMgMHhmZgorI2VuZGlm IC8qIElBQyAqLworI2lmbmRlZiBET05UCisjZGVmaW5lIERPTlQgMHhmZQkJCS8qIDI1NCAqLwor I2VuZGlmIC8qIERPTlQgKi8KKyNpZm5kZWYgRE8KKyNkZWZpbmUgRE8gMHhmZAkJCQkvKiAyNTMg Ki8KKyNlbmRpZiAvKiBETyAqLworI2lmbmRlZiBXT05UCisjZGVmaW5lIFdPTlQgMHhmYwkJCS8q IDI1MiAqLworI2VuZGlmIC8qIFdPTlQgKi8KKyNpZm5kZWYgV0lMTAorI2RlZmluZSBXSUxMIDB4 ZmIJCQkvKiAyNTEgKi8KKyNlbmRpZiAvKiBXSUxMICovCisjaWZuZGVmIFNCCisjZGVmaW5lIFNC IDB4ZmEJCQkJLyogMjUwICovCisjZW5kaWYgLyogU0IgKi8KKyNpZm5kZWYgVE5fR0EKKyNkZWZp bmUgVE5fR0EgMHhmOQkJCS8qIDI0OSAqLworI2VuZGlmIC8qIFROX0dBICovCisjaWZuZGVmIFRO X0VMCisjZGVmaW5lIFROX0VMIDB4ZjgJCQkvKiAyNDggKi8KKyNlbmRpZiAvKiBUTl9FTCAqLwor I2lmbmRlZiBUTl9FQworI2RlZmluZSBUTl9FQyAweGY3CQkJLyogMjQ3ICovCisjZW5kaWYgLyog VE5fRUMgKi8KKyNpZm5kZWYgVE5fQVlUCisjZGVmaW5lIFROX0FZVCAweGY2CQkJLyogMjQ2ICov CisjZW5kaWYgLyogVE5fQVlUICovCisjaWZuZGVmIFROX0FPCisjZGVmaW5lIFROX0FPIDB4ZjUJ CQkvKiAyNDUgKi8KKyNlbmRpZiAvKiBUTl9BTyAqLworI2lmbmRlZiBUTl9JUAorI2RlZmluZSBU Tl9JUCAweGY0CQkJLyogMjQ0ICovCisjZW5kaWYgLyogVE5fSVAgKi8KKyNpZm5kZWYgQlJFQUsK KyNkZWZpbmUgQlJFQUsgMHhmMwkJCS8qIDI0MyAqLworI2VuZGlmIC8qIEJSRUFLICovCisjaWZu ZGVmIFROX0RNCisjZGVmaW5lIFROX0RNIDB4ZjIJCQkvKiAyNDIgKi8KKyNlbmRpZiAvKiBUTl9E TSAqLworI2lmbmRlZiBUTl9OT1AKKyNkZWZpbmUgVE5fTk9QIDB4ZjEJCQkvKiAyNDEgKi8KKyNl bmRpZiAvKiBUTl9OT1AgKi8KKyNpZm5kZWYgU0UKKyNkZWZpbmUgU0UgMHhmMAkJCQkvKiAyNDAg Ki8KKyNlbmRpZiAvKiBTRSAqLworI2lmbmRlZiBUTl9FT1IKKyNkZWZpbmUgVE5fRU9SIDB4ZWYJ CQkvKiAyMzkgKi8KKyNlbmRpZiAvKiBUTl9FT1IgKi8KKyNpZm5kZWYgVE5fQUJPUlQKKyNkZWZp bmUgVE5fQUJPUlQgMHhlZQkJCS8qIDIzOCAqLworI2VuZGlmIC8qIFROX0FCT1JUICovCisjaWZu ZGVmIFROX1NVU1AKKyNkZWZpbmUgVE5fU1VTUCAweGVkCQkJLyogMjM3ICovCisjZW5kaWYgLyog VE5fU1VTUCAqLworI2lmbmRlZiBUTl9FT0YKKyNkZWZpbmUgVE5fRU9GIDB4ZWMJCQkvKiAyMzYg Ki8KKyNlbmRpZiAvKiBUTl9FT0YgKi8KKyNpZm5kZWYgTEFTVF9UTl9DTUQKKyNkZWZpbmUgTEFT VF9UTl9DTUQgMHhlYwkJLyogMjM2ICovCisKKyNkZWZpbmUgVE5fU0FLIDB4YzgJCQkvKiAyMDAg LSBJQk0gU2VjdXJlIEF0dGVudGlvbiBLZXkgKi8KKyNlbmRpZiAvKiBMQVNUX1ROX0NNRCAqLwor I2RlZmluZSBTWU5DSCAweGYyCQkJLyogMjQyIC0gZm9yIHRlbGZ1bmMgY2FsbHMgKi8KKworI2Vu ZGlmCS8qIENPTU1FTlQgKi8KKworI2lmZGVmIFRFTENNRFMKK2NoYXIgKnRlbGNtZHNbXSA9IHsK KyAgICAgICAgIkVPRiIsICJTVVNQIiwgIkFCT1JUIiwgIkVPUiIsCisgICAgICAgICJTRSIsICJO T1AiLCAiRE1BUksiLCAiQlJLIiwgIklQIiwgIkFPIiwgIkFZVCIsICJFQyIsCisgICAgICAgICJF TCIsICJHQSIsICJTQiIsICJXSUxMIiwgIldPTlQiLCAiRE8iLCAiRE9OVCIsICJJQUMiLCAwCit9 OworI2Vsc2UgLyogVEVMQ01EUyAqLworZXh0ZXJuIGNoYXIgKnRlbGNtZHNbXTsKKyNlbmRpZiAv KiBURUxDTURTICovCisKKyNkZWZpbmUgVEVMQ01EX0ZJUlNUICAgIFROX0VPRgorI2RlZmluZSBU RUxDTURfTEFTVCAgICAgSUFDCisjZGVmaW5lIFRFTENNRF9PSyh4KSAgICAoKHVuc2lnbmVkIGlu dCkoeCkgPD0gVEVMQ01EX0xBU1QgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNp Z25lZCBpbnQpKHgpID49IFRFTENNRF9GSVJTVCB8fCBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICh1bnNpZ25lZCBpbnQpKHgpID09IFROX1NBSykKKyNkZWZpbmUgVEVMQ01EKHgpICAgICAg IChURUxDTURfT0soeCk/ICgoeCkgPT0gVE5fU0FLPyJTQUsiOiBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgdGVsY21kc1soeCktVEVMQ01EX0ZJUlNUXSk6IlVOS05PV04iKQorCisvKiBUaGVu IHRoZSBvcHRpb25zICovCisvKiBOQjogdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXMgaGF2ZSBURUxP UFRfQVVUSEVOVElDQVRJT04gZGVmaW5lZCBhcyAqLworLyogNDUgaW5zdGVhZCBvZiAzNy4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZmRlZiBU RUxPUFRfQVVUSEVOVElDQVRJT04KKyNpZmRlZiBfX29zZl9fCisjdW5kZWYgVEVMT1BUX0FVVEhF TlRJQ0FUSU9OCisjZW5kaWYgLyogX19vc2ZfXyAqLworI2lmbmRlZiBJUklYCisjdW5kZWYgVEVM T1BUX0FVVEhFTlRJQ0FUSU9OCisjZW5kaWYgLyogSVJJWCAqLworI2lmbmRlZiB1bHRyaXgKKyN1 bmRlZiBURUxPUFRfQVVUSEVOVElDQVRJT04KKyNlbmRpZiAvKiB1bHRyaXggKi8KKyNlbmRpZiAv KiBURUxPUFRfQVVUSEVOVElDQVRJT04gKi8KKworLyogdGVsbmV0IG9wdGlvbnMgKi8KKyNpZm5k ZWYgVEVMT1BUX0JJTkFSWQorI2RlZmluZSBURUxPUFRfQklOQVJZICAgMCAgICAgICAvKiA4LWJp dCBkYXRhIHBhdGggKFJGQyA4NTYpKi8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfRUNITworI2Rl ZmluZSBURUxPUFRfRUNITyAgICAgMSAgICAgICAvKiBlY2hvIChSRkMgODU3KSovCisjZW5kaWYK KyNpZm5kZWYgVEVMT1BUX1JDUAorI2RlZmluZSBURUxPUFRfUkNQICAgICAgMiAgICAgICAvKiBw cmVwYXJlIHRvIHJlY29ubmVjdCAoTklDIDUwMDA1KSovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BU X1NHQQorI2RlZmluZSBURUxPUFRfU0dBICAgICAgMyAgICAgICAvKiBzdXBwcmVzcyBnbyBhaGVh ZCAoUkZDIDg1OCkgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxPUFRfTkFNUworI2RlZmluZSBURUxP UFRfTkFNUyAgICAgNCAgICAgICAvKiBhcHByb3hpbWF0ZSBtZXNzYWdlIHNpemUgKEVUSEVSTkVU KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9TVEFUVVMKKyNkZWZpbmUgVEVMT1BUX1NUQVRV UyAgIDUgICAgICAgLyogZ2l2ZSBzdGF0dXMgKFJGQyA4NTkpICovCisjZW5kaWYKKyNpZm5kZWYg VEVMT1BUX1RNCisjZGVmaW5lIFRFTE9QVF9UTSAgICAgICA2ICAgICAgIC8qIHRpbWluZyBtYXJr IChSRkMgODYwKSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9SQ1RFCisjZGVmaW5lIFRFTE9Q VF9SQ1RFICAgICA3ICAgICAgIC8qIHJlbW90ZSBjb250cm9sbGVkIHRyYW5zbWlzc2lvbiBhbmQg ZWNobyAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUkZDIDcyNikgKi8K KyNpZm5kZWYgVEVMT1BUX05BT0wKKyNkZWZpbmUgVEVMT1BUX05BT0wgICAgIDggICAgICAgLyog bmVnb3RpYXRlIGFib3V0IG91dHB1dCBsaW5lIHdpZHRoICovCisjZW5kaWYgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIChOSUMgNTAwMDUpICovCisjaWZuZGVmIFRFTE9QVF9OQU9QCisjZGVm aW5lIFRFTE9QVF9OQU9QICAgICA5ICAgICAgIC8qIG5lZ290aWF0ZSBhYm91dCBvdXRwdXQgcGFn ZSBzaXplICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChOSUMgNTAwMDUp ICovCisjaWZuZGVmIFRFTE9QVF9OQU9DUkQKKyNkZWZpbmUgVEVMT1BUX05BT0NSRCAgIDEwICAg ICAgLyogbmVnb3RpYXRlIGFib3V0IENSIGRpc3Bvc2l0aW9uIChSRkMgNjUyKSAqLworI2VuZGlm ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBbSGlzdG9yaWNdICovCisjaWZuZGVmIFRFTE9Q VF9OQU9IVFMKKyNkZWZpbmUgVEVMT1BUX05BT0hUUyAgIDExICAgICAgLyogbmVnb3RpYXRlIGFi b3V0IGhvcml6b250YWwgdGFic3RvcHMgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogKFJGQyA2NTMpIFtIaXN0b3JpY10gKi8KKyNpZm5kZWYgVEVMT1BUX05BT0hURAorI2Rl ZmluZSBURUxPUFRfTkFPSFREICAgMTIgICAgICAvKiBuZWdvdGlhdGUgYWJvdXQgaG9yaXogdGFi IGRpc3Bvc2l0aW9uICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSRkMg NjU0KSBbSGlzdG9yaWNdICovCisjaWZuZGVmIFRFTE9QVF9OQU9GRkQKKyNkZWZpbmUgVEVMT1BU X05BT0ZGRCAgIDEzICAgICAgLyogbmVnb3RpYXRlIGFib3V0IGZvcm1mZWVkIGRpc3Bvc2l0aW9u ICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChSRkMgNjU1KSBbSGlzdG9y aWNdICovCisjaWZuZGVmIFRFTE9QVF9OQU9WVFMKKyNkZWZpbmUgVEVMT1BUX05BT1ZUUyAgIDE0 ICAgICAgLyogbmVnb3RpYXRlIGFib3V0IHZlcnRpY2FsIHRhYiBzdG9wcyAqLworI2VuZGlmICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAoUkZDIDY1NikgW0hpc3RvcmljXSAqLworI2lmbmRl ZiBURUxPUFRfTkFPVlRECisjZGVmaW5lIFRFTE9QVF9OQU9WVEQgICAxNSAgICAgIC8qIG5lZ290 aWF0ZSBhYm91dCB2ZXJ0aWNhbCB0YWIgZGlzcG9zaXRpb24gKi8KKyNlbmRpZiAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogKFJGQyA2NTcpIFtIaXN0b3JpY10gKi8KKyNpZm5kZWYgVEVMT1BU X05BT0xGRAorI2RlZmluZSBURUxPUFRfTkFPTEZEICAgMTYgICAgICAvKiBuZWdvdGlhdGUgYWJv dXQgb3V0cHV0IExGIGRpc3Bvc2l0aW9uICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIChSRkMgNjU4KSBbSGlzdG9yaWNdICovCisjaWZuZGVmIFRFTE9QVF9YQVNDSUkKKyNk ZWZpbmUgVEVMT1BUX1hBU0NJSSAgIDE3ICAgICAgLyogZXh0ZW5kZWQgYXNjaWkgY2hhcmFjdGVy IHNldCAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUkZDIDY5OCkgKi8K KyNpZm5kZWYgVEVMT1BUX0xPR09VVAorI2RlZmluZSBURUxPUFRfTE9HT1VUICAgMTggICAgICAv KiBmb3JjZSBsb2dvdXQgKFJGQyA3MjcpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX0JNCisj ZGVmaW5lIFRFTE9QVF9CTSAgICAgICAxOSAgICAgIC8qIGJ5dGUgbWFjcm8gKFJGQyA3MzUpICov CisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX0RFVAorI2RlZmluZSBURUxPUFRfREVUICAgICAgMjAg ICAgICAvKiBkYXRhIGVudHJ5IHRlcm1pbmFsIChSRkMgMTA0MywgNzMyKSAqLworI2VuZGlmCisj aWZuZGVmIFRFTE9QVF9TVVBEVVAKKyNkZWZpbmUgVEVMT1BUX1NVUERVUCAgIDIxICAgICAgLyog c3VwZHVwIHByb3RvY29sIChSRkMgNzM2LCA3MzQpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BU X1NVUERVUE9VVFBVVAorI2RlZmluZSBURUxPUFRfU1VQRFVQT1VUUFVUIDIyICAvKiBzdXBkdXAg b3V0cHV0IChSRkMgNzQ5KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9TTkRMT0MKKyNkZWZp bmUgVEVMT1BUX1NORExPQyAgIDIzICAgICAgLyogc2VuZCBsb2NhdGlvbiAoUkZDIDc3OSkgKi8K KyNlbmRpZgorI2lmbmRlZiBURUxPUFRfVFRZUEUKKyNkZWZpbmUgVEVMT1BUX1RUWVBFICAgIDI0 ICAgICAgLyogdGVybWluYWwgdHlwZSAoUkZDIDEwOTEpICovCisjZW5kaWYKKyNpZm5kZWYgVEVM T1BUX0VPUgorI2RlZmluZSBURUxPUFRfRU9SICAgICAgMjUgICAgICAvKiBlbmQgb2YgcmVjb3Jk IChSRkMgODg1KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9UVUlECisjZGVmaW5lIFRFTE9Q VF9UVUlEICAgICAyNiAgICAgIC8qIFRBQ0FDUyB1c2VyIGlkZW50aWZpY2F0aW9uIChSRkMgOTI3 KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9PVVRNUksKKyNkZWZpbmUgVEVMT1BUX09VVE1S SyAgIDI3ICAgICAgLyogb3V0cHV0IG1hcmtpbmcgKFJGQyA5MzMpICovCisjZW5kaWYKKyNpZm5k ZWYgVEVMT1BUX1RUWUxPQworI2RlZmluZSBURUxPUFRfVFRZTE9DICAgMjggICAgICAvKiB0ZXJt aW5hbCBsb2NhdGlvbiBudW1iZXIgKFJGQyA5NDYpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BU XzMyNzBSRUdJTUUKKyNkZWZpbmUgVEVMT1BUXzMyNzBSRUdJTUUgMjkgICAgLyogMzI3MCByZWdp bWUgKFJGQyAxMDQxKSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9YM1BBRAorI2RlZmluZSBU RUxPUFRfWDNQQUQgICAgMzAgICAgICAvKiBYLjMgUEFEIChSRkMgMTA1MykgKi8KKyNlbmRpZgor I2lmbmRlZiBURUxPUFRfTkFXUworI2RlZmluZSBURUxPUFRfTkFXUyAgICAgMzEgICAgICAvKiB3 aW5kb3cgc2l6ZSAoUkZDIDEwNzMpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1RTUEVFRAor I2RlZmluZSBURUxPUFRfVFNQRUVEICAgMzIgICAgICAvKiB0ZXJtaW5hbCBzcGVlZCAoUkZDIDEw NzkpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX0xGTE9XCisjZGVmaW5lIFRFTE9QVF9MRkxP VyAgICAzMyAgICAgIC8qIHJlbW90ZSBmbG93IGNvbnRyb2wgKFJGQyAxMzcyKSAqLworI2VuZGlm CisjaWZuZGVmIFRFTE9QVF9MSU5FTU9ERQorI2RlZmluZSBURUxPUFRfTElORU1PREUgMzQgICAg ICAvKiBMaW5lbW9kZSBvcHRpb24gKFJGQyAxMTg0KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9Q VF9YRElTUExPQworI2RlZmluZSBURUxPUFRfWERJU1BMT0MgMzUgICAgICAvKiBYIERpc3BsYXkg TG9jYXRpb24gKFJGQyAxMDk2KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9PTERfRU5WSVJP TgorI2RlZmluZSBURUxPUFRfT0xEX0VOVklST04gMzYgICAvKiBPbGQgLSBFbnZpcm9ubWVudCB2 YXJpYWJsZXMgKFJGQyAxNDA4KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9BVVRIRU5USUNB VElPTgorI2RlZmluZSBURUxPUFRfQVVUSEVOVElDQVRJT04gMzcvKiBBdXRoZW50aWNhdGUgKFJG QyAyOTQxKSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9FTkNSWVBUSU9OCisjZGVmaW5lIFRF TE9QVF9FTkNSWVBUSU9OIDM4ICAgIC8qIEVuY3J5cHRpb24gb3B0aW9uIChSRkMgMjk0NikgKi8K KyNlbmRpZgorI2lmbmRlZiBURUxPUFRfTkVXRU5WSVJPTgorI2RlZmluZSBURUxPUFRfTkVXRU5W SVJPTiAzOSAgICAvKiBOZXcgLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKFJGQyAxNTcyKSAqLwor I2VuZGlmCisjaWZuZGVmIFRFTE9QVF8zMjcwRQorI2RlZmluZSBURUxPUFRfMzI3MEUgICAgNDAg ICAgICAvKiAzMjcwIEV4dGVuZGVkIChSRkMgMTY0NykgKi8KKyNlbmRpZgorI2lmbmRlZiBURUxP UFRfWEFVVEgKKyNkZWZpbmUgVEVMT1BUX1hBVVRIICAgIDQxICAgICAgLyogPz8/IChFYXJoYXJ0 KSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9DSEFSU0VUCisjZGVmaW5lIFRFTE9QVF9DSEFS U0VUICA0MiAgICAgIC8qIENoYXJhY3Rlci1zZXQgKFJGQyAyMDY2KSAqLworI2VuZGlmCisjaWZu ZGVmIFRFTE9QVF9SU1AKKyNkZWZpbmUgVEVMT1BUX1JTUCAgICAgIDQzICAgICAgLyogUmVtb3Rl IFNlcmlhbCBQb3J0IChCYXJuZXMpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX0NPTVBPUlQK KyNkZWZpbmUgVEVMT1BUX0NPTVBPUlQgIDQ0ICAgICAgLyogQ29tIFBvcnQgQ29udHJvbCAoUkZD IDIyMTcpICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1NMRQorI2RlZmluZSBURUxPUFRfU0xF ICAgICAgNDUgICAgICAvKiBTdXBwcmVzcyBMb2NhbCBFY2hvIChBdG1hcikgLSBbcmVqZWN0ZWRd ICovCisjZW5kaWYKKyNpZm5kZWYgVEVMT1BUX1NUQVJUX1RMUworI2RlZmluZSBURUxPUFRfU1RB UlRfVExTIDQ2ICAgICAvKiBUZWxuZXQgb3ZlciBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKi8K KyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKEJvZSkgKi8KKyNpZm5kZWYgVEVM T1BUX0tFUk1JVAorI2RlZmluZSBURUxPUFRfS0VSTUlUICAgNDcgICAgICAvKiBLZXJtaXQgKFJG QyAyODQwKSAqLworI2VuZGlmCisjaWZuZGVmIFRFTE9QVF9TRU5EX1VSTAorI2RlZmluZSBURUxP UFRfU0VORF9VUkwgNDggICAgICAvKiBTZW5kIFVSTCAqLworI2VuZGlmCisKKyNpZm5kZWYgVEVM T1BUX0ZPUldBUkRfWAorI2RlZmluZSBURUxPUFRfRk9SV0FSRF9YIDQ5ICAgICAvKiBYIFdpbmRv d3MgRm9yd2FyZGluZyAoQWx0bWFuKSAqLworI2VuZGlmIC8qIFRFTE9QVF9GT1JXQVJEX1ggKi8K KworI2lmbmRlZiBURUxPUFRfU1RERVJSCisjZGVmaW5lIFRFTE9QVF9TVERFUlIgICAgNTAgICAg LyogUmVkaXJlY3RlZCBTdGRlcnIgKEFsdG1hbikgKi8KKyNlbmRpZiAvKiBURUxPUFRfU1RERVJS ICovCisKKyNpZm5kZWYgVEVMT1BUX1BSQUdNQV9MT0dPTgorI2RlZmluZSBURUxPUFRfUFJBR01B X0xPR09OIDEzOCAvKiBFbmNyeXB0ZWQgTG9nb24gb3B0aW9uIChQcmFnbWFTeXMpICovCisjZW5k aWYKKyNpZm5kZWYgVEVMT1BUX1NTUElfTE9HT04KKyNkZWZpbmUgVEVMT1BUX1NTUElfTE9HT04g MTM5ICAgLyogTVMgU1NQSSBMb2dvbiBvcHRpb24gKFByYWdtYVN5cykgKi8KKyNlbmRpZgorI2lm bmRlZiBURUxPUFRfUFJBR01BX0hFQVJUQkVBVAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTZXJ2ZXIgU2VuZCBIZWFydGJlYXQgb3B0aW9uIChQcmFnbWFTeXMpICovCisjZGVm aW5lIFRFTE9QVF9QUkFHTUFfSEVBUlRCRUFUIDE0MAorI2VuZGlmCisKKyNkZWZpbmUgVEVMT1BU X0lCTV9TQUsgMjAwICAgICAgLyogSUJNIFNlY3VyZSBBdHRlbnRpb24gS2V5ICovCisKKy8qCisg IElCTSBTZWN1cmUgQXR0ZW50aW9uIEtleSAoU0FLKSBPcHRpb24KKworICBJbiBhZGRpdGlvbiB0 byB0ZXJtaW5hbCBuZWdvdGlhdGlvbiwgdGhlIHRlbG5ldCBjb21tYW5kIGFsbG93cworICBuZWdv dGlhdGlvbiBmb3IgdGhlIFNlY3VyZSBBdHRlbnRpb24gS2V5IChTQUspCisgIG9wdGlvbi4gVGhp cyBvcHRpb24sIHdoZW4gc3VwcG9ydGVkLCBwcm92aWRlcyB0aGUgbG9jYWwgdXNlciB3aXRoCisg IGEgc2VjdXJlIGNvbW11bmljYXRpb24gcGF0aCB0byB0aGUgcmVtb3RlCisgIGhvc3QgZm9yIHRh c2tzIHN1Y2ggYXMgY2hhbmdpbmcgdXNlciBJRHMgb3IgcGFzc3dvcmRzLiBJZiB0aGUgcmVtb3Rl CisgIGhvc3Qgc3VwcG9ydHMgdGhlIFNBSyBmdW5jdGlvbiwgYSB0cnVzdGVkCisgIHNoZWxsIGlz IG9wZW5lZCBvbiB0aGUgcmVtb3RlIGhvc3Qgd2hlbiB0aGUgdGVsbmV0IHNlbmQgc2FrCisgIHN1 YmNvbW1hbmQgaXMgaXNzdWVkLiBUaGUgU0FLIGZ1bmN0aW9uIGNhbgorICBhbHNvIGJlIGFzc2ln bmVkIHRvIGEgc2luZ2xlIGtleSBhdmFpbGFibGUgaW4gdGVsbmV0IGlucHV0IG1vZGUsCisgIHVz aW5nIHRoZSBzZXQgc2FrIHN1YmNvbW1hbmQuCisKKyAgVE5fU0FLCisKKyAgU2VuZHMgdGhlIFRF TE5FVCBTQUsgKFNlY3VyZSBBdHRlbnRpb24gS2V5KSBzZXF1ZW5jZSwgd2hpY2ggY2F1c2VzCisg IHRoZSByZW1vdGUgc3lzdGVtIHRvIGludm9rZSB0aGUgdHJ1c3RlZCBzaGVsbC4gSWYgdGhlIFNB SyBpcyBub3QKKyAgc3VwcG9ydGVkLCB0aGVuIGFuIGVycm9yIG1lc3NhZ2UgaXMgZGlzcGxheWVk IHRoYXQgcmVhZHM6CisgICAgUmVtb3RlIHNpZGUgZG9lcyBub3Qgc3VwcG9ydCBTQUsuCisqLwor CisjaWZuZGVmIFRFTE9QVF9FWE9QTAorI2RlZmluZSBURUxPUFRfRVhPUEwgICAgMjU1ICAgICAv KiBFeHRlbmRlZC1vcHRpb25zLWxpc3QgKFJGQyA4NjEpICovCisjZW5kaWYKKworI2lmZGVmIE5U RUxPUFRTCisjdW5kZWYgTlRFTE9QVFMKKyNlbmRpZiAvKiBOVEVMT1BUUyAqLworLyogVGhlIFRl bG5ldCBPcHRpb24gc3BhY2UgaXMgbm8gbG9uZ2VyIGJlaW5nIGFsbG9jYXRlZCBieSBJQ0FOTiBh cyBhICovCisvKiBjb250aW51b3VzIGxpc3QuICBJbiBvdGhlciB3b3JkcyBpdCBpcyBiZWNvbWlu ZyBzcGFyc2UuICBCdXQgd2UgZG8gKi8KKy8qIG5vdCB3YW50IHRvIGhhdmUgdG8gYWxsb2NhdGUg bWVtb3J5IGZvciBhIGxvbmcgbGlzdCBvZiBzdHJpbmdzIGFuZCAqLworLyogc3RydWN0cyB3aGlj aCB3aWxsIG5ldmVyIGJlIHVzZWQuICBUaGVyZWZvcmUsIHRoZSBOVEVMT1BUUyBkZWZpbmUgICov CisvKiBjYW4gbm8gbG9uZ2VyIGJlIGVxdWFsIHRvIFRFTE9QVF9MQVNUKzEuICBJbiBmYWN0LCB0 aGUgbm90aW9uIG9mICAgKi8KKy8qIFRFTE9QVF9GSVJTVCBhbmQgVEVMT1BUX0xBU1Qgbm8gbG9u Z2VyIG1ha2Ugc2Vuc2UuICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBOVEVMT1BUUyAgICAg ICAgNTUKKworI2RlZmluZSBURUxPUFRfRklSU1QgICAgIFRFTE9QVF9CSU5BUlkKKyNkZWZpbmUg VEVMT1BUX0xBU1QgICAgICBURUxPUFRfSUJNX1NBSworCisvKgorICBUaGUgZm9sbG93aW5nIG1h Y3JvcyBzcGVlZCB1cyB1cCBhdCBydW50aW1lIGJ1dCBhcmUgdG9vIGNvbXBsZXgKKyAgZm9yIHNv bWUgcHJlcHJvY2Vzc29ycyAvIGNvbXBpbGVyczsgaWYgeW91ciBjb21waWxlciBib21icyBvbiBj a2N0ZWwuYworICB3aXRoICJJbnN0cnVjdGlvbiB0YWJsZSBvdmVyZmxvdyIgb3Igc29tZXN1Y2gs IHJlYnVpbGQgd2l0aCAtRE5PVE9NQUNST1MuCisqLworI2lmbmRlZiBOT1RPTUFDUk9TCisjaWZu ZGVmIFRFTE9QVF9NQUNSTworI2RlZmluZSBURUxPUFRfTUFDUk8KKyNlbmRpZiAvKiBURUxPUFRf TUFDUk8gKi8KKyNlbmRpZiAvKiBOT1RPTUFDUk9TICovCisKKyNpZmRlZiBURUxPUFRfTUFDUk8K KyNkZWZpbmUgVEVMT1BUX0lOREVYKHgpICgoKHgpPj0wICYmICh4KTw9IFRFTE9QVF9TVERFUlIp Pyh4KTpcCisgICAgICAgICgoeCk+PVRFTE9QVF9QUkFHTUFfTE9HT04gJiYgKHgpPD1URUxPUFRf UFJBR01BX0hFQVJUQkVBVCk/KHgpLTg3OiBcCisgICAgICAgICgoeCkgPT0gVEVMT1BUX0lCTV9T QUspPyh4KS0xNDY6IE5URUxPUFRTKQorCisjZGVmaW5lIFRFTE9QVF9PSyh4KSAgICAoKCh4KSA+ PSBURUxPUFRfQklOQVJZICYmICh4KSA8PSBURUxPUFRfU1RERVJSKSB8fFwKKyAgICAgICAgICAg ICAoKHgpID49IFRFTE9QVF9QUkFHTUFfTE9HT04gJiYgKHgpIDw9IFRFTE9QVF9QUkFHTUFfSEVB UlRCRUFUKSB8fFwKKyAgICAgICAgICAgICAoKHgpID09IFRFTE9QVF9JQk1fU0FLKSkKKyNkZWZp bmUgVEVMT1BUKHgpICAgICAgIChURUxPUFRfT0soeCk/dGVsb3B0c1tURUxPUFRfSU5ERVgoeCld OiJVTktOT1dOIikKKyNlbHNlIC8qIFRFTE9QVF9NQUNSTyAqLworX1BST1RPVFlQKGludCB0ZWxv cHRfaW5kZXgsKGludCkpOworX1BST1RPVFlQKGludCB0ZWxvcHRfb2ssKGludCkpOworX1BST1RP VFlQKENIQVIgKiB0ZWxvcHQsIChpbnQpKTsKKworI2RlZmluZSBURUxPUFRfSU5ERVgoeCkgdGVs b3B0X2luZGV4KHgpCisjZGVmaW5lIFRFTE9QVF9PSyh4KSAgICB0ZWxvcHRfb2soeCkKKyNkZWZp bmUgVEVMT1BUKHgpICAgICAgIHRlbG9wdCh4KQorI2VuZGlmIC8qIFRFTE9QVF9NQUNSTyAqLwor CisjaWZkZWYgVEVMT1BUUworY2hhciAqdGVsb3B0c1tOVEVMT1BUUysyXSA9IHsKKy8qICAgMCAq LyAiQklOQVJZIiwgICAiRUNITyIsICAgICAgICAgIlJDUCIsICAiU1VQUFJFU1MtR08tQUhFQUQi LAorLyogICA0ICovICJOQU1FIiwgICAiU1RBVFVTIiwgIlRJTUlORy1NQVJLIiwgIlJDVEUiLAor LyogICA4ICovICJOQU9MIiwgIk5BT1AiLCAgIk5BT0NSRCIsICJOQU9IVFMiLAorLyogIDEyICov ICJOQU9IVEQiLCAiTkFPRkZEIiwgIk5BT1ZUUyIsICAiTkFPVlREIiwKKy8qICAxNiAqLyAiTkFP TEZEIiwgIkVYVEVORC1BU0NJSSIsICJMT0dPVVQiLCAiQllURS1NQUNSTyIsCisvKiAgMjAgKi8g IkRBVEEtRU5UUlktVEVSTUlOQUwiLCAiU1VQRFVQIiwgIlNVUERVUC1PVVRQVVQiLCAgIlNFTkQt TE9DQVRJT04iLAorLyogIDI0ICovICJURVJNSU5BTC1UWVBFIiwgICJFTkQtT0YtUkVDT1JEIiwg IlRBQ0FDUy1VSUQiLCAiT1VUUFVULU1BUktJTkciLAorLyogIDI4ICovICJUVFlMT0MiLCAiMzI3 MC1SRUdJTUUiLCAiWC4zLVBBRCIsICJOQVdTIiwKKy8qICAzMiAqLyAiVFNQRUVEIiwgIkxGTE9X IiwgIkxJTkVNT0RFIiwgIlhESVNQTE9DIiwKKy8qICAzNiAqLyAiT0xELUVOVklST04iLCAiQVVU SEVOVElDQVRJT04iLCAiRU5DUllQVElPTiIsICJORVctRU5WSVJPTk1FTlQiLAorLyogIDQwICov ICJUTjMyNzBFIiwieGF1dGgiLCJDSEFSU0VUIiwgInJlbW90ZS1zZXJpYWwtcG9ydCIsCisvKiAg NDQgKi8gIkNPTS1QT1JULUNPTlRST0wiLCJzdXBwcmVzcy1sb2NhbC1lY2hvIiwiU1RBUlQtVExT IiwiS0VSTUlUIiwKKy8qICA0OCAqLyAic2VuZC11cmwiLCJGT1JXQVJELVgiLCJzdGRlcnIiLAor LyogMTM4ICovICJwcmFnbWEtbG9nb24iLCAic3NwaS1sb2dvbiIsICJwcmFnbWEtaGVhcnRiZWF0 IiwKKy8qIDIwMCAqLyAiaWJtLXNhayIsCisgICAgICAgICAgInVua25vd24iLAorICAgICAgICAw Cit9OworI2Vsc2UgLypURUxPUFRTICovCitleHRlcm4gY2hhciAqIHRlbG9wdHNbXTsKKyNlbmRp ZiAvKiBURUxPUFRTICovCisKKy8qIFRFTE5FVCBOZXdsaW5lIE1vZGUgKi8KKworI2RlZmluZSBU TkxfQ1IgICAgIDAgICAgICAgICAgICAgICAgICAgIC8qIENSIHNlbmRzIGJhcmUgY2FycmlhZ2Ug cmV0dXJuICovCisjZGVmaW5lIFROTF9DUk5VTCAgMSAgICAgICAgICAgICAgICAgICAgLyogQ1Ig YW5kIE5VTCAqLworI2RlZmluZSBUTkxfQ1JMRiAgIDIgICAgICAgICAgICAgICAgICAgIC8qIENS IGFuZCBMRiAqLworI2RlZmluZSBUTkxfTEYgICAgIDMgICAgICAgICAgICAgICAgICAgIC8qIExG IGluc3RlYWQgb2YgQ1IgKi8KKworLyogVEVMTkVUIE5lZ290aWF0aW9uIE1vZGUgKi8KKworI2Rl ZmluZSAgICBUTl9OR19SRiAgMCAgICAgICAgICAgICAgICAgIC8qICBOZWdvdGlhdGlvbiBSRUZV U0VEICovCisjZGVmaW5lICAgIFROX05HX0FDICAxICAgICAgICAgICAgICAgICAgLyogIE5lZ290 aWF0aW9uIEFDQ0VQVEVEICovCisjZGVmaW5lICAgIFROX05HX1JRICAyICAgICAgICAgICAgICAg ICAgLyogIE5lZ290aWF0aW9uIFJFUVVFU1RFRCAqLworI2RlZmluZSAgICBUTl9OR19NVSAgMyAg ICAgICAgICAgICAgICAgIC8qICBOZWdvdGlhdGlvbiBSRVFVSVJFRCAobXVzdCkgKi8KKworCisv KiBTeXN0ZW1zIHdoZXJlIHdlIGtub3cgd2UgY2FuIGRlZmluZSBURUxORVQgTkFXUyBhdXRvbWF0 aWNhbGx5LiAqLworCisjaWZuZGVmIENLX05BV1MgICAgICAgICAgICAgICAgICAgICAgICAgLyog SW4gb3RoZXIgd29yZHMsIGlmIGJvdGggKi8KKyNpZmRlZiBDS19UVEdXU0laICAgICAgICAgICAg ICAgICAgICAgICAvKiBUTkNPREUgYW5kIFRUR1dTSVogYXJlIGRlZmluZWQgKi8KKyNkZWZpbmUg Q0tfTkFXUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGVuIHdlIGNhbiBkbyBOQVdTLiAq LworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyNlbmRpZiAvKiBDS19OQVdTICovCisKKyNpZmRl ZiBDS19GT1JXQVJEX1gKKyNpZm5kZWYgTUFYRldEWAorI2RlZmluZSBNQVhGV0RYIDY0ICAgICAg ICAgICAgICAgICAgICAgIC8qIE51bSBvZiBYIHdpbmRvd3MgdG8gYmUgZndkJ2QgKi8KKyNlbmRp ZiAvKiBNQVhGV0RYICovCisjZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisKKy8qIFRlbG5ldCBT dGF0ZSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyAqLworc3RydWN0IF90ZWxvcHRfc3RhdGUg eworICB1bnNpZ25lZCBjaGFyIGRlZl9zZXJ2ZXJfbWVfbW9kZTsgICAvKiBEZWZhdWx0IE5lZ290 aWF0aW9uIE1vZGUgKi8KKyAgdW5zaWduZWQgY2hhciBkZWZfc2VydmVyX3VfbW9kZTsgICAgLyog RGVmYXVsdCBOZWdvdGlhdGlvbiBNb2RlICovCisgIHVuc2lnbmVkIGNoYXIgZGVmX2NsaWVudF9t ZV9tb2RlOyAgIC8qIERlZmF1bHQgTmVnb3RpYXRpb24gTW9kZSAqLworICB1bnNpZ25lZCBjaGFy IGRlZl9jbGllbnRfdV9tb2RlOyAgICAvKiBEZWZhdWx0IE5lZ290aWF0aW9uIE1vZGUgKi8KKyAg dW5zaWduZWQgY2hhciBtZV9tb2RlOyAgICAgICAgICAgICAgLyogVGVsbmV0IE5lZ290aWF0aW9u IE1vZGUgKi8KKyAgdW5zaWduZWQgY2hhciB1X21vZGU7ICAgICAgICAgICAgICAgLyogVGVsbmV0 IE5lZ290aWF0aW9uIE1vZGUgKi8KKyAgdW5zaWduZWQgY2hhciBtZTsgICAgICAgICAgICAgICAg ICAgLyogQW0gSSA/ICAgICAgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQgY2hhciB1OyAgICAg ICAgICAgICAgICAgICAgLyogQXJlIHlvdT8gICAgICAgICAgICAgICAgKi8KKyAgdW5zaWduZWQg Y2hhciB1bmFuc3dlcmVkX3dpbGw7ICAgICAgLyogU2VudCBXaWxsLCBXYWl0aW5nIGZvciBETy9E T05UICovCisgIHVuc2lnbmVkIGNoYXIgdW5hbnN3ZXJlZF9kbzsgICAgICAgIC8qIFNlbmQgRE8s IFdhaXRpbmcgZm9yIFdJTEwvV09OVCAqLworICB1bnNpZ25lZCBjaGFyIHVuYW5zd2VyZWRfd29u dDsgICAgICAvKiBTZW50IFdPTlQsIFdhaXRpbmcgZm9yIERPTlQgKi8KKyAgdW5zaWduZWQgY2hh ciB1bmFuc3dlcmVkX2RvbnQ7ICAgICAgLyogU2VudCBET05ULCBXYWl0aW5nIGZvciBXT05UICov CisgIHVuc2lnbmVkIGNoYXIgdW5hbnN3ZXJlZF9zYjsgICAgICAgIC8qIFNlbnQgU0IsICAgV2Fp dGluZyBmb3IgU0IgKHNlcnZlcikgKi8KKyAgdW5pb24geworI2lmZGVmIElLU19PUFRJT04KKyAg ICBzdHJ1Y3QgX3RlbG9wdF9rZXJtaXQgeyAgICAgICAgIC8qIEtlcm1pdCBPcHRpb24gU3RhdGVz ICovCisgICAgICB1bnNpZ25lZCBjaGFyIG1lX3N0YXJ0OyAgICAgICAvKiBJIGhhdmUgYSBTZXJ2 ZXIgYWN0aXZlICovCisgICAgICB1bnNpZ25lZCBjaGFyIG1lX3JlcV9zdGFydDsgICAvKiBTZW50 IFJlcS1TdGFydCwgV2FpdGluZyBmb3IgcmVzcG9uc2UgKi8KKyAgICAgIHVuc2lnbmVkIGNoYXIg bWVfcmVxX3N0b3A7ICAgIC8qIFNlbnQgUmVxLVN0b3AsIFdhaXRpbmcgZm9yIHJlc3BvbnNlICAq LworICAgICAgdW5zaWduZWQgY2hhciB1X3N0YXJ0OyAgICAgICAgLyogWW91IGhhdmUgYSBTZXJ2 ZXIgYWN0aXZlICovCisgICAgICB1bnNpZ25lZCBjaGFyIHNvcDsgICAgICAgICAgICAvKiBIYXZl IHdlIHJlY2VpdmVkIHRoZSBTT1AgY2hhcj8gKi8KKyAgICB9IGtlcm1pdDsKKyNlbmRpZiAvKiBJ S1NfT1BUSU9OICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIHN0cnVjdCBfdGVsb3B0X2Vu Y3J5cHQgeyAgICAgICAgLyogRW5jcnlwdGlvbiBPcHRpb24gU3RhdGVzICovCisgICAgICB1bnNp Z25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgIHN0b3A7ICAgICAg ICAgIC8qIElzIGVuY3J5cHRpb24gc3RvcHBlZD8gICAqLworICAgIH0gZW5jcnlwdDsKKyNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfTkFXUworICAgIHN0cnVjdCBfdGVsb3B0 X25hd3MgeyAgICAgICAgICAgLyogTkFXUyBPcHRpb24gSW5mb3JtYXRpb24gICovCisgICAgICB1 bnNpZ25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKKyAgICAgIGludCB4OyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExhc3QgV2lkdGggICAgICAgICAgICAgICAqLworICAgICAgaW50IHk7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogTGFzdCBIZWlnaHQgICAgICAgICAgICAgICovCisgICAgfSBu YXdzOworI2VuZGlmIC8qIENLX05BV1MgKi8KKyNpZmRlZiBDS19TU0wKKyAgICBzdHJ1Y3QgX3Rl bG9wdF9zdGFydF90bHMgeyAgICAgIC8qIFN0YXJ0IFRMUyBPcHRpb24gICAgICAgICAgICAgKi8K KyAgICAgICB1bnNpZ25lZCBjaGFyIHVfZm9sbG93czsgICAgIC8qIHUgcmVhZHkgZm9yIFRMUyBu ZWdvdGlhdGlvbiAgKi8KKyAgICAgICB1bnNpZ25lZCBjaGFyIG1lX2ZvbGxvd3M7ICAgIC8qIG1l IHJlYWR5IGZvciBUTFMgbmVnb3RpYXRpb24gKi8KKyAgICAgICB1bnNpZ25lZCBjaGFyIGF1dGhf cmVxdWVzdDsgIC8qIFJjdmQgV0lMTCBBVVRIIGJlZm9yZSBXT05UIFNUQVJUX1RMUyAqLworICAg IH0gc3RhcnRfdGxzOworI2VuZGlmIC8qIENLX1NTTCAqLworICAgIHN0cnVjdCBfdGVsb3B0X3Rl cm0geyAgICAgICAgICAvKiBUZXJtaW5hbCBUeXBlICAgICAgICAgICAgKi8KKyAgICAgICB1bnNp Z25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKKyAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGVbNDFdOyAg ICAgLyogTGFzdCB0ZXJtaW5hbCB0eXBlICAgICAgICovCisgICAgfSB0ZXJtOworI2lmZGVmIENL X0VOVklST05NRU5UCisgICAgc3RydWN0IF90ZWxvcHRfbmV3X2VudiB7CisgICAgICAgdW5zaWdu ZWQgY2hhciBuZWVkX3RvX3NlbmQ7CisgICAgICAgdW5zaWduZWQgY2hhciAqIHN0cjsKKyAgICAg ICBpbnQgICAgICAgICAgICAgbGVuOworICAgIH0gZW52OworI2lmZGVmIENLX1hESVNQTE9DCisg ICAgc3RydWN0IF90ZWxvcHRfeGRpc3AgeworICAgICAgIHVuc2lnbmVkIGNoYXIgbmVlZF90b19z ZW5kOworICAgIH0geGRpc3A7CisjZW5kaWYgLyogQ0tfWERJU1BMT0MgKi8KKyNlbmRpZiAvKiBD S19FTlZJUk9OTUVOVCAqLworI2lmZGVmIENLX1NORExPQworICAgIHN0cnVjdCBfdGVsb3B0X3Nu ZGxvYyB7CisgICAgICAgdW5zaWduZWQgY2hhciBuZWVkX3RvX3NlbmQ7CisgICAgfSBzbmRsb2M7 CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisgICAgc3RydWN0 IF90ZWxvcHRfZndkX3ggeworICAgICAgICB1bnNpZ25lZCBjaGFyIG5lZWRfdG9fc2VuZDsKKyAg ICAgICAgaW50IGxpc3Rlbl9zb2NrZXQ7CisgICAgICAgIHN0cnVjdCBfY2hhbm5lbCB7CisgICAg ICAgICAgICBpbnQgZmQ7CisgICAgICAgICAgICBpbnQgaWQ7CisgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyIG5lZWRfdG9fc2VuZF94YXV0aDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc3Vz cGVuZDsKKyAgICAgICAgfSBjaGFubmVsW01BWEZXRFhdOworI2lmZGVmIE5UCisgICAgICAgIGlu dCB0aHJlYWRfc3RhcnRlZDsKKyNlbmRpZiAvKiBOVCAqLworICAgIH0gZm9yd2FyZF94OworI2Vu ZGlmIC8qIENLX0ZPUldBUkRfWCAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgIHN0cnVjdCBf dGVsb3B0X2NvbXBvcnQgeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbmVlZF90b19zZW5kOwor ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgd2FpdF9mb3Jfc2I7CisgICAgICAgICAgdW5zaWduZWQg Y2hhciB3YWl0X2Zvcl9tczsKKyAgICAgIH0gY29tcG9ydDsKKyNlbmRpZiAvKiBUTl9DT01QT1JU ICovCisgICAgLyogYWRkaXRpb25hbCBvcHRpb25zIHN1Y2ggYXMgTmV3IEVudmlyb25tZW50IG9y IFNlbmQgTG9jYXRpb24gKi8KKyAgfSBzYjsKK307Cit0eXBlZGVmIHN0cnVjdCBfdGVsb3B0X3N0 YXRlIHRlbG9wdF9zdGF0ZSwgKnBfdGVsb3B0X3N0YXRlOworCisvKiB0ZWxvcHRfc3RhdGVzW10g aXMgdGhlIGFycmF5IG9mIHN0cnVjdHMgd2hpY2ggdGhlIHN0YXRlIG9mIGVhY2ggdGVsbmV0ICov CisvKiBvcHRpb24gaXMgc3RvcmVkLiAgV2UgYWxsb2NhdGUgb25lIG1vcmUgdGhhbiB3ZSBuZWVk IGluIGNhc2Ugd2UgYXJlICAgICovCisvKiBzZW50IHRlbG5ldCBvcHRpb25zIHRoYXQgd2UgZG8g bm90IHJlY29nbml6ZS4gIElmIGJ5IHNvbWUgY2hhbmNlIHRoZSAgICovCisvKiBURUxPUFRfT0so KSBjaGVjayBpcyBza2lwcGVkLCBURUxPUFRfSU5ERVgoKSB3aWxsIGZvcmNlIHRoZSBvcHRpb24g dG8gICovCisvKiB1c2UgdGhlIGV4dHJhIGNlbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBURUxPUFRfU1RBVEVTCit0ZWxv cHRfc3RhdGUgdGVsb3B0X3N0YXRlc1tOVEVMT1BUUysxXTsKKyNlbHNlIC8qIFRFTE9QVF9TVEFU RVMgKi8KK2V4dGVybiB0ZWxvcHRfc3RhdGUgdGVsb3B0X3N0YXRlc1tdOworI2VuZGlmIC8qIFRF TE9QVF9TVEFURVMgKi8KKworI2RlZmluZSBURUxPUFRfTUUoeCkgKHRlbG9wdF9zdGF0ZXNbVEVM T1BUX0lOREVYKHgpXS5tZSkKKyNkZWZpbmUgVEVMT1BUX1UoeCkgICh0ZWxvcHRfc3RhdGVzW1RF TE9QVF9JTkRFWCh4KV0udSkKKyNkZWZpbmUgVEVMT1BUX01FX01PREUoeCkgXAorICAgICAgICAo dGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLm1lX21vZGUpCisjZGVmaW5lIFRFTE9QVF9V X01PREUoeCkgIFwKKyAgICAgICAgKHRlbG9wdF9zdGF0ZXNbVEVMT1BUX0lOREVYKHgpXS51X21v ZGUpCisjZGVmaW5lIFRFTE9QVF9VTkFOU1dFUkVEX1dJTEwoeCkgXAorICAgICAgICAodGVsb3B0 X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLnVuYW5zd2VyZWRfd2lsbCkKKyNkZWZpbmUgVEVMT1BU X1VOQU5TV0VSRURfRE8oeCkgICBcCisgICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRF WCh4KV0udW5hbnN3ZXJlZF9kbykKKyNkZWZpbmUgVEVMT1BUX1VOQU5TV0VSRURfV09OVCh4KSBc CisgICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0udW5hbnN3ZXJlZF93b250 KQorI2RlZmluZSBURUxPUFRfVU5BTlNXRVJFRF9ET05UKHgpICAgXAorICAgICAgICAodGVsb3B0 X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLnVuYW5zd2VyZWRfZG9udCkKKyNkZWZpbmUgVEVMT1BU X1VOQU5TV0VSRURfU0IoeCkgICBcCisgICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRF WCh4KV0udW5hbnN3ZXJlZF9zYikKKyNkZWZpbmUgVEVMT1BUX1NCKHgpIFwKKyAgICAgICAgKHRl bG9wdF9zdGF0ZXNbVEVMT1BUX0lOREVYKHgpXS5zYikKKyNkZWZpbmUgVEVMT1BUX0RFRl9TX01F X01PREUoeCkgXAorICAgICAgICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLmRlZl9z ZXJ2ZXJfbWVfbW9kZSkKKyNkZWZpbmUgVEVMT1BUX0RFRl9TX1VfTU9ERSh4KSAgXAorICAgICAg ICAodGVsb3B0X3N0YXRlc1tURUxPUFRfSU5ERVgoeCldLmRlZl9zZXJ2ZXJfdV9tb2RlKQorI2Rl ZmluZSBURUxPUFRfREVGX0NfTUVfTU9ERSh4KSBcCisgICAgICAgICh0ZWxvcHRfc3RhdGVzW1RF TE9QVF9JTkRFWCh4KV0uZGVmX2NsaWVudF9tZV9tb2RlKQorI2RlZmluZSBURUxPUFRfREVGX0Nf VV9NT0RFKHgpICBcCisgICAgICAgICh0ZWxvcHRfc3RhdGVzW1RFTE9QVF9JTkRFWCh4KV0uZGVm X2NsaWVudF91X21vZGUpCisKKyNpZmRlZiBURUxPUFRfTU9ERVMKK2NoYXIgKiB0ZWxvcHRfbW9k ZXNbNF0gPSB7CisgICAgIlJFRlVTRUQiLCAiQUNDRVBURUQiLCAiUkVRVUVTVEVEIiwgIlJFUVVJ UkVEIgorfTsKKyNlbHNlIC8qIFRFTE9QVF9NT0RFUyAqLworZXh0ZXJuIGNoYXIgKiB0ZWxvcHRf bW9kZXNbXTsKKyNlbmRpZiAvKiBURUxPUFRfTU9ERVMgKi8KKworI2lmZGVmIFRFTE9QVF9NQUNS TworI2RlZmluZSBURUxPUFRfTU9ERV9PSyh4KSAoKHVuc2lnbmVkIGludCkoeCkgPD0gVE5fTkdf TVUpCisjZGVmaW5lIFRFTE9QVF9NT0RFKHgpIChURUxPUFRfTU9ERV9PSyh4KT90ZWxvcHRfbW9k ZXNbKHgpLVROX05HX1JGXToiVU5LTk9XTiIpCisjZWxzZSAvKiBURUxPUFRfTUFDUk8gKi8KK19Q Uk9UT1RZUChpbnQgdGVsb3B0X21vZGVfb2ssKGludCkpOworX1BST1RPVFlQKENIQVIgKiB0ZWxv cHRfbW9kZSwoaW50KSk7CisKKyNkZWZpbmUgVEVMT1BUX01PREVfT0soeCkgdGVsb3B0X21vZGVf b2soeCkKKyNkZWZpbmUgVEVMT1BUX01PREUoeCkgICAgdGVsb3B0X21vZGUoeCkKKyNlbmRpZiAv KiBURUxPUFRfTUFDUk8gKi8KKworLyogU3ViLW9wdGlvbiBxdWFsaWZpZXJzICovCisjZGVmaW5l IFRFTFFVQUxfSVMgICAgICAwICAgICAgIC8qIG9wdGlvbiBpcy4uLiAqLworI2RlZmluZSBURUxR VUFMX1NFTkQgICAgMSAgICAgICAvKiBzZW5kIG9wdGlvbiAqLworI2RlZmluZSBURUxRVUFMX0lO Rk8gICAgMiAgICAgICAvKiBFTlZJUk9OOiBpbmZvcm1hdGlvbmFsIHZlcnNpb24gb2YgSVMgKi8K KyNkZWZpbmUgVEVMUVVBTF9SRVBMWSAgIDIgICAgICAgLyogQVVUSEVOVElDQVRJT046IGNsaWVu dCB2ZXJzaW9uIG9mIElTICovCisjZGVmaW5lIFRFTFFVQUxfTkFNRSAgICAzICAgICAgIC8qIEFV VEhFTlRJQ0FUSU9OOiBjbGllbnQgdmVyc2lvbiBvZiBJUyAqLworCisjZGVmaW5lIFRFTF9FTlZf VkFSICAgICAwCisjZGVmaW5lIFRFTF9FTlZfVkFMVUUgICAxCisjZGVmaW5lIFRFTF9FTlZfRVND ICAgICAyCisjZGVmaW5lIFRFTF9FTlZfVVNFUlZBUiAzCisKKyNkZWZpbmUgTEZMT1dfT0ZGICAg ICAgICAgICAgICAgMCAgICAgICAvKiBEaXNhYmxlIHJlbW90ZSBmbG93IGNvbnRyb2wgKi8KKyNk ZWZpbmUgTEZMT1dfT04gICAgICAgICAgICAgICAgMSAgICAgICAvKiBFbmFibGUgcmVtb3RlIGZs b3cgY29udHJvbCAqLworI2RlZmluZSBMRkxPV19SRVNUQVJUX0FOWSAgICAgICAyICAgICAgIC8q IFJlc3RhcnQgb3V0cHV0IG9uIGFueSBjaGFyICovCisjZGVmaW5lIExGTE9XX1JFU1RBUlRfWE9O ICAgICAgIDMgICAgICAgLyogUmVzdGFydCBvdXRwdXQgb25seSBvbiBYT04gKi8KKworLyoKKyAq IExJTkVNT0RFIHN1Ym9wdGlvbnMKKyAqLworCisjZGVmaW5lIExNX01PREUgICAgICAgICAxCisj ZGVmaW5lIExNX0ZPUldBUkRNQVNLICAyCisjZGVmaW5lIExNX1NMQyAgICAgICAgICAzCisKKyNk ZWZpbmUgTU9ERV9FRElUICAgICAgIDB4MDEKKyNkZWZpbmUgTU9ERV9UUkFQU0lHICAgIDB4MDIK KyNkZWZpbmUgTU9ERV9BQ0sgICAgICAgIDB4MDQKKyNkZWZpbmUgTU9ERV9TT0ZUX1RBQiAgIDB4 MDgKKyNkZWZpbmUgTU9ERV9MSVRfRUNITyAgIDB4MTAKKworI2RlZmluZSBNT0RFX01BU0sgICAg ICAgMHgxZgorCisvKiBOb3QgcGFydCBvZiBwcm90b2NvbCwgYnV0IG5lZWRlZCB0byBzaW1wbGlm eSB0aGluZ3MuLi4gKi8KKyNkZWZpbmUgTU9ERV9GTE9XICAgICAgICAgICAgICAgMHgwMTAwCisj ZGVmaW5lIE1PREVfRUNITyAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBNT0RFX0lOQklO ICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgTU9ERV9PVVRCSU4gICAgICAgICAgICAgMHgw ODAwCisjZGVmaW5lIE1PREVfRk9SQ0UgICAgICAgICAgICAgIDB4MTAwMAorCisjZGVmaW5lIFNM Q19TWU5DSCAgICAgICAxCisjZGVmaW5lIFNMQ19CUksgICAgICAgICAyCisjZGVmaW5lIFNMQ19J UCAgICAgICAgICAzCisjZGVmaW5lIFNMQ19BTyAgICAgICAgICA0CisjZGVmaW5lIFNMQ19BWVQg ICAgICAgICA1CisjZGVmaW5lIFNMQ19FT1IgICAgICAgICA2CisjZGVmaW5lIFNMQ19BQk9SVCAg ICAgICA3CisjZGVmaW5lIFNMQ19FT0YgICAgICAgICA4CisjZGVmaW5lIFNMQ19TVVNQICAgICAg ICA5CisjZGVmaW5lIFNMQ19FQyAgICAgICAgICAxMAorI2RlZmluZSBTTENfRUwgICAgICAgICAg MTEKKyNkZWZpbmUgU0xDX0VXICAgICAgICAgIDEyCisjZGVmaW5lIFNMQ19SUCAgICAgICAgICAx MworI2RlZmluZSBTTENfTE5FWFQgICAgICAgMTQKKyNkZWZpbmUgU0xDX1hPTiAgICAgICAgIDE1 CisjZGVmaW5lIFNMQ19YT0ZGICAgICAgICAxNgorI2RlZmluZSBTTENfRk9SVzEgICAgICAgMTcK KyNkZWZpbmUgU0xDX0ZPUlcyICAgICAgIDE4CisjZGVmaW5lIFNMQ19NQ0wgICAgICAgICAxOQor I2RlZmluZSBTTENfTUNSICAgICAgICAgMjAKKyNkZWZpbmUgU0xDX01DV0wgICAgICAgIDIxCisj ZGVmaW5lIFNMQ19NQ1dSICAgICAgICAyMgorI2RlZmluZSBTTENfTUNCT0wgICAgICAgMjMKKyNk ZWZpbmUgU0xDX01DRU9MICAgICAgIDI0CisjZGVmaW5lIFNMQ19JTlNSVCAgICAgICAyNQorI2Rl ZmluZSBTTENfT1ZFUiAgICAgICAgMjYKKyNkZWZpbmUgU0xDX0VDUiAgICAgICAgIDI3CisjZGVm aW5lIFNMQ19FV1IgICAgICAgICAyOAorI2RlZmluZSBTTENfRUJPTCAgICAgICAgMjkKKyNkZWZp bmUgU0xDX0VFT0wgICAgICAgIDMwCisKKyNkZWZpbmUgTlNMQyAgICAgICAgICAgIDMwCisKKy8q CisgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHksIHdlIGRlZmluZSBTTENfTkFNRVMgdG8g YmUgdGhlCisgKiBsaXN0IG9mIG5hbWVzIGlmIFNMQ19OQU1FUyBpcyBub3QgZGVmaW5lZC4KKyAq LworI2RlZmluZSBTTENfTkFNRUxJU1QgICAgIjAiLCAiU1lOQ0giLCAiQlJLIiwgIklQIiwgIkFP IiwgIkFZVCIsICJFT1IiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiQUJPUlQiLCAiRU9G IiwgIlNVU1AiLCAiRUMiLCAiRUwiLCAiRVciLCAiUlAiLCBcCisgICAgICAgICAgICAgICAgICAg ICAgICAiTE5FWFQiLCAiWE9OIiwgIlhPRkYiLCAiRk9SVzEiLCAiRk9SVzIiLCBcCisgICAgICAg ICAgICAgICAgICAgICAgICAiTUNMIiwgIk1DUiIsICJNQ1dMIiwgIk1DV1IiLCAiTUNCT0wiLCAi TUNFT0wiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiSU5TUlQiLCAiT1ZFUiIsICJFQ1Ii LCAiRVdSIiwgIkVCT0wiLCAiRUVPTCIsIDAKKyNpZmRlZiAgU0xDX05BTUVTCitjaGFyICpzbGNf bmFtZXNbXSA9IHsKKyAgICAgICAgU0xDX05BTUVMSVNUCit9OworI2Vsc2UKK2V4dGVybiBjaGFy ICpzbGNfbmFtZXNbXTsKKyNkZWZpbmUgU0xDX05BTUVTIFNMQ19OQU1FTElTVAorI2VuZGlmCisK KyNkZWZpbmUgU0xDX05BTUVfT0soeCkgICgodW5zaWduZWQgaW50KSh4KSA8PSBOU0xDKQorI2Rl ZmluZSBTTENfTkFNRSh4KSAgICAgKFNMQ19OQU1FX09LKHgpP3NsY19uYW1lc1t4XToiVU5LTk9X TiIpCisKKyNkZWZpbmUgU0xDX05PU1VQUE9SVCAgICAgICAwCisjZGVmaW5lIFNMQ19DQU5UQ0hB TkdFICAgICAgMQorI2RlZmluZSBTTENfVkFSSUFCTEUgICAgICAgIDIKKyNkZWZpbmUgU0xDX0RF RkFVTFQgICAgICAgICAzCisjZGVmaW5lIFNMQ19MRVZFTEJJVFMgICAgICAgMHgwMworCisjZGVm aW5lIFNMQ19GVU5DICAgICAgICAgICAgMAorI2RlZmluZSBTTENfRkxBR1MgICAgICAgICAgIDEK KyNkZWZpbmUgU0xDX1ZBTFVFICAgICAgICAgICAyCisKKyNkZWZpbmUgU0xDX0FDSyAgICAgICAg ICAgICAweDgwCisjZGVmaW5lIFNMQ19GTFVTSElOICAgICAgICAgMHg0MAorI2RlZmluZSBTTENf RkxVU0hPVVQgICAgICAgIDB4MjAKKworI2RlZmluZSBPTERfRU5WX1ZBUiAgICAgICAgIDEKKyNk ZWZpbmUgT0xEX0VOVl9WQUxVRSAgICAgICAwCisjZGVmaW5lIE5FV19FTlZfVkFSICAgICAgICAg MAorI2RlZmluZSBORVdfRU5WX1ZBTFVFICAgICAgIDEKKyNkZWZpbmUgRU5WX0VTQyAgICAgICAg ICAgICAyCisjZGVmaW5lIEVOVl9VU0VSVkFSICAgICAgICAgMworCisjZGVmaW5lIEZXRFhfU0NS RUVOICAgICAgICAgMAorI2RlZmluZSBGV0RYX09QRU4gICAgICAgICAgIDEKKyNkZWZpbmUgRldE WF9DTE9TRSAgICAgICAgICAyCisjZGVmaW5lIEZXRFhfREFUQSAgICAgICAgICAgMworI2RlZmlu ZSBGV0RYX09QVElPTlMgICAgICAgIDQKKyNkZWZpbmUgRldEWF9PUFRfREFUQSAgICAgICA1Cisj ZGVmaW5lIEZXRFhfWE9GRiAgICAgICAgICAgNgorI2RlZmluZSBGV0RYX1hPTiAgICAgICAgICAg IDcKKworI2RlZmluZSBGV0RYX09QVF9OT05FICAgICAgIDAKKyNkZWZpbmUgRldEWF9PUFRfWEFV VEggICAgICAxCisKKy8qCisgKiBBVVRIRU5USUNBVElPTiBzdWJvcHRpb25zCisgKi8KKworLyoK KyAqIFdobyBpcyBhdXRoZW50aWNhdGluZyB3aG8gLi4uCisgKi8KKyNkZWZpbmUgQVVUSF9DTElF TlRfVE9fU0VSVkVSICAgMCAgICAgICAvKiBDbGllbnQgYXV0aGVudGljYXRpbmcgc2VydmVyICov CisjZGVmaW5lIEFVVEhfU0VSVkVSX1RPX0NMSUVOVCAgIDEgICAgICAgLyogU2VydmVyIGF1dGhl bnRpY2F0aW5nIGNsaWVudCAqLworI2RlZmluZSBBVVRIX1dIT19NQVNLICAgICAgICAgICAxCisK Ky8qCisgKiBhbW91bnQgb2YgYXV0aGVudGljYXRpb24gZG9uZQorICovCisjZGVmaW5lIEFVVEhf SE9XX09ORV9XQVkgICAgICAgIDAKKyNkZWZpbmUgQVVUSF9IT1dfTVVUVUFMICAgICAgICAgMgor I2RlZmluZSBBVVRIX0hPV19NQVNLICAgICAgICAgICAyCisKKy8qCisgKiBzaG91bGQgd2UgYmUg ZW5jcnlwdGluZz8KKyAqLworI2RlZmluZSBBVVRIX0VOQ1JZUFRfT0ZGICAgICAgICAgICAgIDAK KyNkZWZpbmUgQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCAgICA0CisjZGVmaW5lIEFVVEhfRU5D UllQVF9BRlRFUl9FWENIQU5HRSAxNgorI2RlZmluZSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTICAg ICAgMjAKKyNkZWZpbmUgQVVUSF9FTkNSWVBUX01BU0sgICAgICAgICAgIDIwCisKKy8qCisgKiB3 aWxsIHdlIGJlIGZvcndhcmRpbmc/CisgKiBpZiB3ZSB3YW50IHRvIGFjdGl2YXRlIHRoZSB1c2Ug b2YgdGhpcyBmbGFnIHRoZW4KKyAqICAgI2RlZmluZSBVU0VfSU5JX0NSRURfRldECisgKi8KKyNk ZWZpbmUgSU5JX0NSRURfRldEX09GRiAgICAgICAgMAorI2RlZmluZSBJTklfQ1JFRF9GV0RfT04g ICAgICAgICA4CisjZGVmaW5lIElOSV9DUkVEX0ZXRF9NQVNLICAgICAgIDgKKyNkZWZpbmUgVVNF X0lOSV9DUkVEX0ZXRAorCisjZGVmaW5lIEFVVEhUWVBFX05VTEwgICAgICAgICAgIDAKKyNkZWZp bmUgQVVUSFRZUEVfS0VSQkVST1NfVjQgICAgMQorI2RlZmluZSBBVVRIVFlQRV9LRVJCRVJPU19W NSAgICAyCisjZGVmaW5lIEFVVEhUWVBFX1NQWCAgICAgICAgICAgIDMKKyNkZWZpbmUgQVVUSFRZ UEVfTUlOSyAgICAgICAgICAgNAorI2RlZmluZSBBVVRIVFlQRV9TUlAgICAgICAgICAgICA1Cisj ZGVmaW5lIEFVVEhUWVBFX1JTQSAgICAgICAgICAgIDYKKyNkZWZpbmUgQVVUSFRZUEVfU1NMICAg ICAgICAgICAgNworI2RlZmluZSBBVVRIVFlQRV9MT0tJICAgICAgICAgIDEwCisjZGVmaW5lIEFV VEhUWVBFX1NTQSAgICAgICAgICAgMTEKKyNkZWZpbmUgQVVUSFRZUEVfS0VBX1NKICAgICAgICAx MgorI2RlZmluZSBBVVRIVFlQRV9LRUFfSU5URUcgICAgIDEzCisjZGVmaW5lIEFVVEhUWVBFX0RT UyAgICAgICAgICAgMTQKKyNkZWZpbmUgQVVUSFRZUEVfTlRMTSAgICAgICAgICAxNQorI2RlZmlu ZSBBVVRIVFlQRV9HU1NBUElfS1JCNSAgIDE2ICAgICAgICAgICAgICAgLyogTm90IGFsbG9jYXRl ZCBieSBJQU5BICovCisjaWZkZWYgQVVUSFRZUEVfQ05UCisjdW5kZWYgQVVUSFRZUEVfQ05UCisj ZW5kaWYgLyogQVVUSFRZUEVfQ05UICovCisjZGVmaW5lIEFVVEhUWVBFX0NOVCAgICAgICAgICAg MTcKKworLyoKKyAqIEFVVEhUWVBFcyBMYXN0IHVwZGF0ZWQgMjEgTWFyY2ggMTk5OQorICogZnJv bSBodHRwOi8vd3d3LmlzaS5lZHUvaW4tbm90ZXMvaWFuYS9hc3NpZ25tZW50cy90ZWxuZXQtb3B0 aW9ucworICovCisKKyNkZWZpbmUgQVVUSFRZUEVfQVVUTyAgICAgICAgICAgOTkKKworI2lmZGVm ICBBVVRIX05BTUVTCitjaGFyICphdXRodHlwZV9uYW1lc1tdID0geworICAgICJOVUxMIiwgICAg ICAgICAgICAgICAgICAgICAvKiBSRkMgMjk0MSAqLworICAgICJLRVJCRVJPU19WNCIsICAgICAg ICAgICAgICAvKiBSRkMgMjk0MSAvIDE0MTEgKi8KKyAgICAiS0VSQkVST1NfVjUiLCAgICAgICAg ICAgICAgLyogUkZDIDI5NDEgKi8KKyAgICAiU1BYIiwgICAgICAgICAgICAgICAgICAgICAgLyog UkZDIDI5NDEgKG5vdCBJbnRlcm5ldCBTdGFuZGFyZCkgKi8KKyAgICAiTUlOSyIsICAgICAgICAg ICAgICAgICAgICAgLyogUkZDIDI5NDEgKG5vdCBJbnRlcm5ldCBTdGFuZGFyZCkgKi8KKyAgICAi U1JQIiwgICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDI5NDQgKi8KKyAgICAiUlNBIiwgICAg ICAgICAgICAgICAgICAgICAgLyogUkZDIDI5NDEgKG5vdCBJbnRlcm5ldCBTdGFuZGFyZCkgKi8K KyAgICAiU1NMIiwgICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDI5NDEgKG5vdCBJbnRlcm5l dCBTdGFuZGFyZCkgKi8KKyAgICAiSUFOQV84IiwgICAgICAgICAgICAgICAgICAgLyogbm90IGFz c2lnbmVkIGJ5IElBTkEgKi8KKyAgICAiSUFOQV85IiwgICAgICAgICAgICAgICAgICAgLyogbm90 IGFzc2lnbmVkIGJ5IElBTkEgKi8KKyAgICAiTE9LSSIsICAgICAgICAgICAgICAgICAgICAgLyog UkZDIDI5NDEgKG5vdCBJbnRlcm5ldCBTdGFuZGFyZCkgKi8KKyAgICAiU1NBIiwgICAgICAgICAg ICAgICAgICAgICAgLyogU2Nob2NoICovCisgICAgIktFQV9TSiIsICAgICAgICAgICAgICAgICAg IC8qIFJGQyAyOTUxICovCisgICAgIktFQV9TSl9JTlRFRyIsICAgICAgICAgICAgIC8qIFJGQyAy OTUxICovCisgICAgIkRTUyIsICAgICAgICAgICAgICAgICAgICAgIC8qIFJGQyAyOTQzICovCisg ICAgIk5UTE0iLCAgICAgICAgICAgICAgICAgICAgIC8qIEthaG4gPGxvdWlza0BtaWNyb3NvZnQu Y29tPiAqLworICAgICJHU1NBUEktS1JCNSIsICAgICAgICAgICAgICAvKiBleHBlcmltZW50YWwg LSBhbHRtYW4gKi8KKyAgICAwCit9OworY2hhciAqIGF1dGhtb2RlX25hbWVzW10gPSB7CisgICAg IkNMSUVOVF9UT19TRVJWRVJ8T05FX1dBWSIsCisgICAgIlNFUlZFUl9UT19DTElFTlR8T05FX1dB WSIsCisgICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMIiwKKyAgICAiU0VSVkVSX1RPX0NMSUVO VHxNVVRVQUwiLAorICAgICJDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9VU0lOR19U RUxPUFQiLAorICAgICJTRVJWRVJfVE9fQ0xJRU5UfE9ORV9XQVl8RU5DUllQVF9VU0lOR19URUxP UFQiLAorICAgICJDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1VTSU5HX1RFTE9QVCIs CisgICAgIlNFUlZFUl9UT19DTElFTlR8TVVUVUFMfEVOQ1JZUFRfVVNJTkdfVEVMT1BUIiwKKyAg ICAiQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfENSRURfRldEIiwKKyAgICAiU0VSVkVSX1RPX0NM SUVOVHxPTkVfV0FZfENSRURfRldEIiwKKyAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8Q1JF RF9GV0QiLAorICAgICJTRVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxDUkVEX0ZXRCIsCisgICAgIkNM SUVOVF9UT19TRVJWRVJ8T05FX1dBWXxFTkNSWVBUX1VTSU5HX1RFTE9QVHxDUkVEX0ZXRCIsCisg ICAgIlNFUlZFUl9UT19DTElFTlR8T05FX1dBWXxFTkNSWVBUX1VTSU5HX1RFTE9QVHxDUkVEX0ZX RCIsCisgICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfVVNJTkdfVEVMT1BUfENS RURfRldEIiwKKyAgICAiU0VSVkVSX1RPX0NMSUVOVHxNVVRVQUx8RU5DUllQVF9VU0lOR19URUxP UFR8Q1JFRF9GV0QiLAorICAgICJDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9BRlRF Ul9FWENIQU5HRSIsCisgICAgIlNFUlZFUl9UT19DTElFTlR8T05FX1dBWXxFTkNSWVBUX0FGVEVS X0VYQ0hBTkdFIiwKKyAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9BRlRFUl9F WENIQU5HRSIsCisgICAgIlNFUlZFUl9UT19DTElFTlR8TVVUVUFMfEVOQ1JZUFRfQUZURVJfRVhD SEFOR0UiLAorICAgICJDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVl8RU5DUllQVF9TVEFSVF9UTFMi LAorICAgICJTRVJWRVJfVE9fQ0xJRU5UfE9ORV9XQVl8RU5DUllQVF9TVEFSVF9UTFMiLAorICAg ICJDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1NUQVJUX1RMUyIsCisgICAgIlNFUlZF Ul9UT19DTElFTlR8TVVUVUFMfEVOQ1JZUFRfU1RBUlRfVExTIiwKKyAgICAiQ0xJRU5UX1RPX1NF UlZFUnxPTkVfV0FZfEVOQ1JZUFRfQUZURVJfRVhDSEFOR0V8Q1JFRF9GV0QiLAorICAgICJTRVJW RVJfVE9fQ0xJRU5UfE9ORV9XQVl8RU5DUllQVF9BRlRFUl9FWENIQU5HRXxDUkVEX0ZXRCIsCisg ICAgIkNMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfQUZURVJfRVhDSEFOR0V8Q1JFRF9G V0QiLAorICAgICJTRVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxFTkNSWVBUX0FGVEVSX0VYQ0hBTkdF fENSRURfRldEIiwKKyAgICAiQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfU1RBUlRf VExTfENSRURfRldEIiwKKyAgICAiU0VSVkVSX1RPX0NMSUVOVHxPTkVfV0FZfEVOQ1JZUFRfU1RB UlRfVExTfENSRURfRldEIiwKKyAgICAiQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9T VEFSVF9UTFN8Q1JFRF9GV0QiLAorICAgICJTRVJWRVJfVE9fQ0xJRU5UfE1VVFVBTHxFTkNSWVBU X1NUQVJUX1RMU3xDUkVEX0ZXRCIsCisgICAgMAorfTsKKyNlbHNlCitleHRlcm4gY2hhciAqYXV0 aHR5cGVfbmFtZXNbXTsKK2V4dGVybiBjaGFyICphdXRobW9kZV9uYW1lc1tdOworI2VuZGlmCisj ZGVmaW5lIEFVVEhNT0RFX0NOVCAgMzIKKworI2RlZmluZSBBVVRIVFlQRV9OQU1FX09LKHgpICAg ICAoKHVuc2lnbmVkIGludCkoeCkgPCBBVVRIVFlQRV9DTlQpCisjZGVmaW5lIEFVVEhUWVBFX05B TUUoeCkgICAgICAoQVVUSFRZUEVfTkFNRV9PSyh4KT9hdXRodHlwZV9uYW1lc1t4XToiVU5LTk9X TiIpCisKKyNkZWZpbmUgQVVUSE1PREVfTkFNRV9PSyh4KSAgICAgKCh1bnNpZ25lZCBpbnQpKHgp IDwgQVVUSE1PREVfQ05UKQorI2RlZmluZSBBVVRITU9ERV9OQU1FKHgpICAgICAgKEFVVEhNT0RF X05BTUVfT0soeCk/YXV0aG1vZGVfbmFtZXNbeF06IlVOS05PV04iKQorCisvKiBLZXJiZXJvcyBB dXRoZW50aWNhdGlvbiBNZXNzYWdlIElkZW50aWZpZXJzICovCisjZGVmaW5lIEtSQl9BVVRIICAg ICAgICAgICAgICAgIDAgICAgICAgLyogQXV0aGVudGljYXRpb24gZGF0YSBmb2xsb3dzICovCisj ZGVmaW5lIEtSQl9SRUpFQ1QgICAgICAgICAgICAgIDEgICAgICAgLyogUmVqZWN0ZWQgKHJlYXNv biBtaWdodCBmb2xsb3cpICovCisjZGVmaW5lIEtSQl9BQ0NFUFQgICAgICAgICAgICAgIDIgICAg ICAgLyogQWNjZXB0ZWQgKi8KKyNkZWZpbmUgS1JCNF9DSEFMTEVOR0UgICAgICAgICAgMworI2Rl ZmluZSBLUkI0X1JFU1BPTlNFICAgICAgICAgICA0CisjZGVmaW5lIEtSQjVfUkVTUE9OU0UgICAg ICAgICAgIDMgICAgICAgLyogUmVzcG9uc2UgZm9yIG11dHVhbCBhdXRoLiAqLworI2RlZmluZSBL UkI1X0ZPUldBUkQgICAgICAgICAgICA0ICAgICAgIC8qIEZvcndhcmRlZCBjcmVkZW50aWFscyBm b2xsb3cgKi8KKyNkZWZpbmUgS1JCNV9GT1JXQVJEX0FDQ0VQVCAgICAgNSAgICAgICAvKiBGb3J3 YXJkZWQgY3JlZGVudGlhbHMgYWNjZXB0ZWQgKi8KKyNkZWZpbmUgS1JCNV9GT1JXQVJEX1JFSkVD VCAgICAgNiAgICAgICAvKiBGb3J3YXJkZWQgY3JlZGVudGlhbHMgcmVqZWN0ZWQgKi8KKyNkZWZp bmUgS1JCNV9UTFNfVkVSSUZZICAgICAgICAgNyAgICAgICAvKiBUTFMgRmluaXNoZWQgTXNnIHZl cmlmaWVyICovCisKKy8qIEdTU0FQSS1LUkI1IEF1dGhlbnRpY2F0aW9uIE1lc3NhZ2UgSWRlbnRp ZmllcnMgKi8KKyNkZWZpbmUgR1NTX0FVVEhfREFUQSAgICAgICAgICAgMCAgICAgICAvKiBBdXRo ZW50aWNhdGlvbiBkYXRhIGZvbGxvd3MgKi8KKyNkZWZpbmUgR1NTX1JFSkVDVCAgICAgICAgICAg ICAgMSAgICAgICAvKiBSZWplY3RlZCAocmVhc29uIG1pZ2h0IGZvbGxvdykgKi8KKyNkZWZpbmUg R1NTX0FDQ0VQVCAgICAgICAgICAgICAgMiAgICAgICAvKiBBY2NlcHRlZCAodXNlcm5hbWUgbWln aHQgZm9sbG93KSAqLworI2RlZmluZSBHU1NfQ09OVElOVUUgICAgICAgICAgICAzCisKKy8qIFNl Y3VyZSBSZW1vdGUgUGFzc3dvcmQgQXV0aGVudGljYXRpb24gTWVzc2FnZSBJZGVudGlmaWVycyAq LworI2RlZmluZSBTUlBfQVVUSCAgICAgICAgICAgICAgICAwICAgICAgIC8qIEF1dGhlbnRpY2F0 aW9uIGRhdGEgZm9sbG93cyAqLworI2RlZmluZSBTUlBfUkVKRUNUICAgICAgICAgICAgICAxICAg ICAgIC8qIFJlamVjdGVkIChyZWFzb24gbWlnaHQgZm9sbG93KSAqLworI2RlZmluZSBTUlBfQUND RVBUICAgICAgICAgICAgICAyICAgICAgIC8qIEFjY2VwdGVkICovCisjZGVmaW5lIFNSUF9DSEFM TEVOR0UgICAgICAgICAgIDMKKyNkZWZpbmUgU1JQX1JFU1BPTlNFICAgICAgICAgICAgNAorI2Rl ZmluZSBTUlBfRVhQICAgICAgICAgICAgICAgICA4ICAgICAgIC8qICovCisjZGVmaW5lIFNSUF9Q QVJBTVMgICAgICAgICAgICAgIDkgICAgICAgLyogKi8KKworLyogVGVsbmV0IEF1dGggdXNpbmcg S0VBIGFuZCBTS0lQSkFDSyAqLworCisjZGVmaW5lIEtFQV9DRVJUQV9SQSAgICAgICAgICAgICAg MQorI2RlZmluZSBLRUFfQ0VSVEJfUkJfSVZCX05PTkNFQiAgIDIKKyNkZWZpbmUgS0VBX0lWQV9S RVNQT05TRUJfTk9OQ0VBICAzCisjZGVmaW5lIEtFQV9SRVNQT05TRUEgICAgICAgICAgICAgNAor CisvKiBUaW0gSHVkc29uJ3MgU1NMIEF1dGhlbnRpY2F0aW9uIE1lc3NhZ2UgSWRlbnRpZmllcnMg Ki8KKyNkZWZpbmUgU1NMX1NUQVJUICAgICAxCisjZGVmaW5lIFNTTF9BQ0NFUFQgICAgMgorI2Rl ZmluZSBTU0xfUkVKRUNUICAgIDMKKworLyogTWljcm9zb2Z0IE5UTE0gQXV0aGVudGljYXRpb24g TWVzc2FnZSBJZGVudGlmaWVycyAqLworI2RlZmluZSBOVExNX0FVVEggICAwCisjZGVmaW5lIE5U TE1fQ0hBTExFTkdFIDEKKyNkZWZpbmUgTlRMTV9SRVNQT05TRSAgMgorI2RlZmluZSBOVExNX0FD Q0VQVCAzCisjZGVmaW5lIE5UTE1fUkVKRUNUIDQKKworLyogR2VuZXJpYyBDb25zdGFudHMgKi8K KyNkZWZpbmUgQVVUSF9TVUNDRVNTICAgIDAKKyNkZWZpbmUgQVVUSF9GQUlMVVJFICAgIDI1NQor CisvKgorICogRU5DUllQVGlvbiBzdWJvcHRpb25zCisgKi8KKyNkZWZpbmUgRU5DUllQVF9JUyAg ICAgICAgICAgICAgMCAgICAgICAvKiBJIHBpY2sgZW5jcnlwdGlvbiB0eXBlIC4uLiAqLworI2Rl ZmluZSBFTkNSWVBUX1NVUFBPUlQgICAgICAgICAxICAgICAgIC8qIEkgc3VwcG9ydCBlbmNyeXB0 aW9uIHR5cGVzIC4uLiAqLworI2RlZmluZSBFTkNSWVBUX1JFUExZICAgICAgICAgICAyICAgICAg IC8qIEluaXRpYWwgc2V0dXAgcmVzcG9uc2UgKi8KKyNkZWZpbmUgRU5DUllQVF9TVEFSVCAgICAg ICAgICAgMyAgICAgICAvKiBBbSBzdGFydGluZyB0byBzZW5kIGVuY3J5cHRlZCAqLworI2RlZmlu ZSBFTkNSWVBUX0VORCAgICAgICAgICAgICA0ICAgICAgIC8qIEFtIGVuZGluZyBlbmNyeXB0ZWQg Ki8KKyNkZWZpbmUgRU5DUllQVF9SRVFTVEFSVCAgICAgICAgNSAgICAgICAvKiBSZXF1ZXN0IHlv dSBzdGFydCBlbmNyeXB0aW5nICovCisjZGVmaW5lIEVOQ1JZUFRfUkVRRU5EICAgICAgICAgIDYg ICAgICAgLyogUmVxdWVzdCB5b3Ugc2VuZCBlbmNyeXB0aW5nICovCisjZGVmaW5lIEVOQ1JZUFRf RU5DX0tFWUlEICAgICAgIDcKKyNkZWZpbmUgRU5DUllQVF9ERUNfS0VZSUQgICAgICAgOAorI2Rl ZmluZSBFTkNSWVBUX0NOVCAgICAgICAgICAgICA5CisKKyNkZWZpbmUgRU5DVFlQRV9BTlkgICAg ICAgICAgICAgMAorI2RlZmluZSBFTkNUWVBFX0RFU19DRkI2NCAgICAgICAxCisjZGVmaW5lIEVO Q1RZUEVfREVTX09GQjY0ICAgICAgIDIKKyNkZWZpbmUgRU5DVFlQRV9ERVMzX0NGQjY0ICAgICAg MworI2RlZmluZSBFTkNUWVBFX0RFUzNfT0ZCNjQgICAgICA0CisjZGVmaW5lIEVOQ1RZUEVfQ0FT VDVfNDBfQ0ZCNjQgIDgKKyNkZWZpbmUgRU5DVFlQRV9DQVNUNV80MF9PRkI2NCAgOQorI2RlZmlu ZSBFTkNUWVBFX0NBU1QxMjhfQ0ZCNjQgICAxMAorI2RlZmluZSBFTkNUWVBFX0NBU1QxMjhfT0ZC NjQgICAxMQorI2lmZGVmIEVOQ1RZUEVfQ05UCisjdW5kZWYgRU5DVFlQRV9DTlQKKyNlbmRpZgor I2RlZmluZSBFTkNUWVBFX0NOVCAgICAgICAgICAgICAxMgorCisjaWZkZWYgIEVOQ1JZUFRfTkFN RVMKK2NoYXIgKmVuY3J5cHRfbmFtZXNbXSA9IHsKKyAgICAgICAgIklTIiwgIlNVUFBPUlQiLCAi UkVQTFkiLCAiU1RBUlQiLCAiRU5EIiwKKyAgICAgICAgIlJFUVVFU1QtU1RBUlQiLCAiUkVRVUVT VC1FTkQiLCAiRU5DLUtFWUlEIiwgIkRFQy1LRVlJRCIsCisgICAgICAgIDAKK307CitjaGFyICpl bmN0eXBlX25hbWVzW10gPSB7CisgICAgIkFOWSIsCisgICAgIkRFU19DRkI2NCIsICAgICAgICAg ICAgICAgIC8qIFJGQyAyOTUyICovCisgICAgIkRFU19PRkI2NCIsICAgICAgICAgICAgICAgIC8q IFJGQyAyOTUzICovCisgICAgIkRFUzNfQ0ZCNjQiLCAgICAgICAgICAgICAgIC8qIFJGQyAyOTQ3 ICovCisgICAgIkRFUzNfT0ZCNjQiLCAgICAgICAgICAgICAgIC8qIFJGQyAyOTQ4ICovCisgICAg IlVOS05PV04tNSIsCisgICAgIlVOS05PV04tNiIsCisgICAgIlVOS05PV04tNyIsCisgICAgIkNB U1Q1XzQwX0NGQjY0IiwgICAgICAgICAgIC8qIFJGQyAyOTUwICovCisgICAgIkNBU1Q1XzQwX09G QjY0IiwgICAgICAgICAgIC8qIFJGQyAyOTQ5ICovCisgICAgIkNBU1QxMjhfQ0ZCNjQiLCAgICAg ICAgICAgIC8qIFJGQyAyOTUwKi8KKyAgICAiQ0FTVDEyOF9PRkI2NCIsICAgICAgICAgICAgLyog UkZDIDI5NDkgKi8KKyAgICAwCit9OworI2Vsc2UKK2V4dGVybiBjaGFyICplbmNyeXB0X25hbWVz W107CitleHRlcm4gY2hhciAqZW5jdHlwZV9uYW1lc1tdOworI2VuZGlmCisKKyNkZWZpbmUgRU5D UllQVF9OQU1FX09LKHgpICAgICAgKCh1bnNpZ25lZCBpbnQpKHgpIDwgRU5DUllQVF9DTlQpCisj ZGVmaW5lIEVOQ1JZUFRfTkFNRSh4KSAgICAgIChFTkNSWVBUX05BTUVfT0soeCk/ZW5jcnlwdF9u YW1lc1t4XToiVU5LTk9XTiIpCisKKyNkZWZpbmUgRU5DVFlQRV9OQU1FX09LKHgpICAgICAgKCh1 bnNpZ25lZCBpbnQpKHgpIDwgRU5DVFlQRV9DTlQpCisjZGVmaW5lIEVOQ1RZUEVfTkFNRSh4KSAg ICAgIChFTkNUWVBFX05BTUVfT0soeCk/ZW5jdHlwZV9uYW1lc1t4XToiVU5LTk9XTiIpCisKKy8q IEZvciBzZXR0aW5nIHRoZSBzdGF0ZSBvZiB2YWxpZFVzZXIgKi8KKworI2RlZmluZSBBVVRIX1JF SkVDVCAgICAgMCAgICAgICAvKiBSZWplY3RlZCAqLworI2RlZmluZSBBVVRIX1VOS05PV04gICAg MSAgICAgICAvKiBXZSBkb24ndCBrbm93IHdobyBoZSBpcywgYnV0IGhlJ3Mgb2theSAqLworI2Rl ZmluZSBBVVRIX09USEVSICAgICAgMiAgICAgICAvKiBXZSBrbm93IGhpbSwgYnV0IG5vdCBoaXMg bmFtZSAqLworI2RlZmluZSBBVVRIX1VTRVIgICAgICAgMyAgICAgICAvKiBXZSBrbm93IGhlIG5h bWUgKi8KKyNkZWZpbmUgQVVUSF9WQUxJRCAgICAgIDQgICAgICAgLyogV2Uga25vdyBoaW0sIGFu ZCBoZSBuZWVkcyBubyBwYXNzd29yZCAqLworCisvKiBLZXJtaXQgT3B0aW9uIFN1Ym5lZ290aWF0 aW9ucyAqLworCisjZGVmaW5lIEtFUk1JVF9TVEFSVCAgICAgIDAKKyNkZWZpbmUgS0VSTUlUX1NU T1AgICAgICAgMQorI2RlZmluZSBLRVJNSVRfUkVRX1NUQVJUICAyCisjZGVmaW5lIEtFUk1JVF9S RVFfU1RPUCAgIDMKKyNkZWZpbmUgS0VSTUlUX1NPUCAgICAgICAgNAorI2RlZmluZSBLRVJNSVRf UkVTUF9TVEFSVCA4CisjZGVmaW5lIEtFUk1JVF9SRVNQX1NUT1AgIDkKKworLyogRm9yIFNFVCBU RUxORVQgQVVUSCBIT1cgICovCisjZGVmaW5lIFROX0FVVEhfSE9XX0FOWSAgICAgMAorI2RlZmlu ZSBUTl9BVVRIX0hPV19PTkVfV0FZIDEKKyNkZWZpbmUgVE5fQVVUSF9IT1dfTVVUVUFMICAyCisK Ky8qIEZvciBTRVQgVEVMTkVUIEFVVEggRU5DUllQVCAqLworI2RlZmluZSBUTl9BVVRIX0VOQ19B TlkgICAgIDAKKyNkZWZpbmUgVE5fQVVUSF9FTkNfTk9ORSAgICAxCisjZGVmaW5lIFROX0FVVEhf RU5DX1RFTE9QVCAgMgorI2RlZmluZSBUTl9BVVRIX0VOQ19FWENIICAgIDMgIC8qIG5vdCB1c2Vk IGluIEtlcm1pdCAqLworI2RlZmluZSBUTl9BVVRIX0VOQ19UTFMgICAgIDQKKworLyogVGVsbmV0 IHByb3RvY29sIGZ1bmN0aW9ucyBkZWZpbmVkIGluIEMtS2VybWl0ICovCisKK19QUk9UT1RZUCgg aW50IHRuX2luaSwgKHZvaWQpICk7ICAgICAgICAvKiBUZWxuZXQgcHJvdG9jb2wgc3VwcG9ydCAq LworX1BST1RPVFlQKCBpbnQgdG5fcmVzZXQsICh2b2lkKSk7CitfUFJPVE9UWVAoIGludCB0bl9z ZXRfbW9kZXMsICh2b2lkKSk7CitfUFJPVE9UWVAoIGludCB0bl9zb3B0LCAoaW50LCBpbnQpICk7 CitfUFJPVE9UWVAoIGludCB0bl9kb29wLCAoQ0hBUiwgaW50LCBpbnQgKCopKGludCkgKSApOwor X1BST1RPVFlQKCBpbnQgdG5fc3R0eXAsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgdG5fc25l bnYsIChDSEFSICosIGludCkgKSA7CitfUFJPVE9UWVAoIGludCB0bl9ybmVudiwgKENIQVIgKiwg aW50KSApIDsKK19QUk9UT1RZUCggaW50IHRuX3dhaXQsIChjaGFyICopICkgOworX1BST1RPVFlQ KCBpbnQgdG5fcHVzaCwgKHZvaWQpICkgOworX1BST1RPVFlQKCBpbnQgdG5zbmRicmssICh2b2lk KSApOworX1BST1RPVFlQKCBWT0lEIHRuX2RlYnVnLCAoY2hhciAqKSk7CitfUFJPVE9UWVAoIGlu dCB0bl9oZXgsIChDSEFSICosIGludCwgQ0hBUiAqLCBpbnQpKTsKK19QUk9UT1RZUCggdW5zaWdu ZWQgY2hhciAqIHRuX2dldF9kaXNwbGF5LCAodm9pZCkpOworI2lmZGVmIElLU19PUFRJT04KK19Q Uk9UT1RZUCggaW50IHRuX3Npa3MsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBpa3Nfd2FpdCwg KGludCwgaW50KSApOworI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyNpZmRlZiBDS19OQVdTCitf UFJPVE9UWVAoIGludCB0bl9zbmF3cywgKHZvaWQpICk7CisjZW5kaWYgLyogQ0tfTkFXUyAqLwor I2lmZGVmIENLX1hESVNQTE9DCitfUFJPVE9UWVAoIGludCB0bl9zeGRpc3Bsb2MsICh2b2lkKSAp OworI2VuZGlmIC8qIENLX1hESVNQTE9DICovCisjaWZkZWYgQ0tfU05ETE9DCitfUFJPVE9UWVAo IGludCB0bl9zbmRsb2MsICh2b2lkKSApOworI2VuZGlmIC8qIENLX1NORExPQyAqLworI2lmZGVm IENLX0ZPUldBUkRfWAorLyogRnJvbSBYYXV0aC5oICovCit0eXBlZGVmIHN0cnVjdCB4YXV0aCB7 CisgICAgdW5zaWduZWQgc2hvcnQgICBmYW1pbHk7CisgICAgdW5zaWduZWQgc2hvcnQgICBhZGRy ZXNzX2xlbmd0aDsKKyAgICBjaGFyICAgICAgICAgICAgKmFkZHJlc3M7CisgICAgdW5zaWduZWQg c2hvcnQgICBudW1iZXJfbGVuZ3RoOworICAgIGNoYXIgICAgICAgICAgICAqbnVtYmVyOworICAg IHVuc2lnbmVkIHNob3J0ICAgbmFtZV9sZW5ndGg7CisgICAgY2hhciAgICAgICAgICAgICpuYW1l OworICAgIHVuc2lnbmVkIHNob3J0ICAgZGF0YV9sZW5ndGg7CisgICAgY2hhciAgICAgICAgICAg ICpkYXRhOworfSBYYXV0aDsKKworI2luY2x1ZGUgICA8c3RkaW8uaD4KKworLyogZnJvbSBYLmgg Ki8KKyNkZWZpbmUgRmFtaWx5SW50ZXJuZXQgICAgICAgICAgMAorI2RlZmluZSBGYW1pbHlERUNu ZXQgICAgICAgICAgICAxCisjZGVmaW5lIEZhbWlseUNoYW9zICAgICAgICAgICAgIDIKKworIyBk ZWZpbmUgRmFtaWx5TG9jYWwgKDI1NikgICAgICAvKiBub3QgcGFydCBvZiBYIHN0YW5kYXJkIChp LmUuIFguaCkgKi8KKyMgZGVmaW5lIEZhbWlseVdpbGQgICg2NTUzNSkKKyMgZGVmaW5lIEZhbWls eU5ldG5hbWUgICAgKDI1NCkgICAvKiBub3QgcGFydCBvZiBYIHN0YW5kYXJkICovCisjIGRlZmlu ZSBGYW1pbHlLcmI1UHJpbmNpcGFsICgyNTMpIC8qIEtlcmJlcm9zIDUgcHJpbmNpcGFsIG5hbWUg Ki8KKyMgZGVmaW5lIEZhbWlseUxvY2FsSG9zdCAoMjUyKSAgLyogZm9yIGxvY2FsIG5vbi1uZXQg YXV0aGVudGljYXRpb24gKi8KK2NoYXIgKlhhdUZpbGVOYW1lKCk7CisKK1hhdXRoICpYYXVSZWFk QXV0aCgKK0ZJTEUqICAgLyogYXV0aF9maWxlICovCispOworCitpbnQgWGF1V3JpdGVBdXRoKAor RklMRSogICAgICAgICAgIC8qIGF1dGhfZmlsZSAqLywKK1hhdXRoKiAgICAgICAgICAvKiBhdXRo ICovCispOworCitYYXV0aCAqWGF1R2V0QXV0aEJ5TmFtZSgKK2NvbnN0IGNoYXIqICAgICAvKiBk aXNwbGF5X25hbWUgKi8KKyk7CisKK1hhdXRoICpYYXVHZXRBdXRoQnlBZGRyKAordW5zaWduZWQg aW50ICAgIC8qIGZhbWlseSAqLywKK3Vuc2lnbmVkIGludCAgICAvKiBhZGRyZXNzX2xlbmd0aCAq LywKK2NvbnN0IGNoYXIqICAgICAvKiBhZGRyZXNzICovLAordW5zaWduZWQgaW50ICAgIC8qIG51 bWJlcl9sZW5ndGggKi8sCitjb25zdCBjaGFyKiAgICAgLyogbnVtYmVyICovLAordW5zaWduZWQg aW50ICAgIC8qIG5hbWVfbGVuZ3RoICovLAorY29uc3QgY2hhciogICAgIC8qIG5hbWUgKi8KKyk7 CisKK3ZvaWQgWGF1RGlzcG9zZUF1dGgoCitYYXV0aCogICAgICAgICAgLyogYXV0aCAqLworKTsK KworCitfUFJPVE9UWVAoIGludCBmd2R4X2NyZWF0ZV9saXN0ZW5fc29ja2V0LChpbnQpKTsKK19Q Uk9UT1RZUCggaW50IGZ3ZHhfb3Blbl9jbGllbnRfY2hhbm5lbCwoaW50KSk7CitfUFJPVE9UWVAo IGludCBmd2R4X29wZW5fc2VydmVyX2NoYW5uZWwsKFZPSUQpKTsKK19QUk9UT1RZUCggaW50IGZ3 ZHhfY2xvc2VfY2hhbm5lbCwoaW50KSk7CitfUFJPVE9UWVAoIGludCBmd2R4X3dyaXRlX2RhdGFf dG9fY2hhbm5lbCwoaW50LCBjaGFyICosaW50KSk7CitfUFJPVE9UWVAoIGludCBmd2R4X3NlbmRf ZGF0YV9mcm9tX2NoYW5uZWwsKGludCwgY2hhciAqLGludCkpOworX1BST1RPVFlQKCBpbnQgZndk eF9jbG9zZV9hbGwsKFZPSUQpKTsKK19QUk9UT1RZUCggaW50IGZ3ZHhfdG5fc2IsKHVuc2lnbmVk IGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoIGludCB0bl9zbmRmd2R4LCAodm9pZCkpOworX1BS T1RPVFlQKCBpbnQgZndkeF9zZW5kX2Nsb3NlLChpbnQpKTsKK19QUk9UT1RZUCggaW50IGZ3ZHhf c2VuZF9vcGVuLChpbnQpKTsKK19QUk9UT1RZUCggaW50IGZ3ZHhfY2xpZW50X3JlcGx5X29wdGlv bnMsKGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoIGludCBmd2R4X3NlbmRfb3B0aW9ucywoVk9J RCkpOworX1BST1RPVFlQKCBWT0lEIGZ3ZHhfY2hlY2tfc29ja2V0cywoZmRfc2V0ICopKTsKK19Q Uk9UT1RZUCggaW50IGZ3ZHhfaW5pdF9mZF9zZXQsKGZkX3NldCAqKSk7CitfUFJPVE9UWVAoIGlu dCBmd2R4X2F1dGhvcml6ZV9jaGFubmVsLCAoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOwor X1BST1RPVFlQKCBpbnQgZndkeF9jcmVhdGVfZmFrZV94YXV0aCwgKGNoYXIgKiwgaW50LCBpbnQp KTsKK19QUk9UT1RZUCggaW50IGZ3ZHhfc2VuZF94YXV0aF90b194c2VydmVyLCAoaW50LCB1bnNp Z25lZCBjaGFyICosIGludCBsZW4pKTsKK19QUk9UT1RZUCggaW50IGZ3ZHhfc2VydmVyX2F2YWls LCAoVk9JRCkpOworX1BST1RPVFlQKCBpbnQgZndkeF9wYXJzZV9kaXNwbGF5bmFtZSwgKGNoYXIg KiwgaW50ICosIGNoYXIgKiosIGludCAqLCBpbnQgKiwgY2hhciAqKikpOworCisjaWZkZWYgTlQK K19QUk9UT1RZUCggVk9JRCBmd2R4X3RocmVhZCwoVk9JRCAqKSk7CisjZW5kaWYgLyogTlQgKi8K KyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKworI2lmZGVmIFROX0NPTVBPUlQKKyNkZWZpbmUg VE5DX0MyU19TSUdOQVRVUkUgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVE5DX0MyU19TRVRf QkFVRFJBVEUgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVE5DX0MyU19TRVRfREFUQVNJWkUgICAg ICAgICAgICAgIDIKKyNkZWZpbmUgVE5DX0MyU19TRVRfUEFSSVRZICAgICAgICAgICAgICAgIDMK KyNkZWZpbmUgVE5DX0MyU19TRVRfU1RPUFNJWkUgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVE5D X0MyU19TRVRfQ09OVFJPTCAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVE5DX0MyU19OT1RJRllf TElORVNUQVRFICAgICAgICAgIDYKKyNkZWZpbmUgVE5DX0MyU19OT1RJRllfTU9ERU1TVEFURSAg ICAgICAgIDcKKyNkZWZpbmUgVE5DX0MyU19GTE9XX1NVU1BFTkQgICAgICAgICAgICAgIDgKKyNk ZWZpbmUgVE5DX0MyU19GTE9XX1JFU1VNRSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgVE5DX0My U19TRVRfTFNfTUFTSyAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVE5DX0MyU19TRVRfTVNfTUFT SyAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgVE5DX0MyU19QVVJHRSAgICAgICAgICAgICAgICAg ICAgMTIKKyNkZWZpbmUgVE5DX1MyQ19TSUdOQVRVUkUgICAgICAgICAgICAgICAxMDAKKyNkZWZp bmUgVE5DX1MyQ19TRVRfQkFVRFJBVEUgICAgICAgICAgICAxMDEKKyNkZWZpbmUgVE5DX1MyQ19T RVRfREFUQVNJWkUgICAgICAgICAgICAxMDIKKyNkZWZpbmUgVE5DX1MyQ19TRVRfUEFSSVRZICAg ICAgICAgICAgICAxMDMKKyNkZWZpbmUgVE5DX1MyQ19TRVRfU1RPUFNJWkUgICAgICAgICAgICAx MDQKKyNkZWZpbmUgVE5DX1MyQ19TRVRfQ09OVFJPTCAgICAgICAgICAgICAxMDUKKyNkZWZpbmUg VE5DX1MyQ19TRU5EX0xTICAgICAgICAgICAgICAgICAxMDYKKyNkZWZpbmUgVE5DX1MyQ19TRU5E X01TICAgICAgICAgICAgICAgICAxMDcKKyNkZWZpbmUgVE5DX1MyQ19GTE9XX1NVU1BFTkQgICAg ICAgICAgICAxMDgKKyNkZWZpbmUgVE5DX1MyQ19GTE9XX1JFU1VNRSAgICAgICAgICAgICAxMDkK KyNkZWZpbmUgVE5DX1MyQ19TRVRfTFNfTUFTSyAgICAgICAgICAgICAxMTAKKyNkZWZpbmUgVE5D X1MyQ19TRVRfTVNfTUFTSyAgICAgICAgICAgICAxMTEKKyNkZWZpbmUgVE5DX1MyQ19QVVJHRSAg ICAgICAgICAgICAgICAgICAxMTIKKworLyogVGhlIENPTVBPUlQgdmFsdWVzIGFyZSBub3QgZGVm aW5lZCBpbiBSRkMgMjIxNyAqLworI2RlZmluZSBUTkNfQlBTX1JFUVVFU1QgICAgICAgICAgICAg ICAgICAwCisjZGVmaW5lIFROQ19CUFNfMzAwICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZp bmUgVE5DX0JQU182MDAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBUTkNfQlBTXzEy MDAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFROQ19CUFNfMjQwMCAgICAgICAgICAg ICAgICAgICAgIDYKKyNkZWZpbmUgVE5DX0JQU180ODAwICAgICAgICAgICAgICAgICAgICAgNwor I2RlZmluZSBUTkNfQlBTXzk2MDAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFROQ19C UFNfMTQ0MDAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgVE5DX0JQU18xOTIwMCAgICAg ICAgICAgICAgICAgICAxMAorI2RlZmluZSBUTkNfQlBTXzI4ODAwICAgICAgICAgICAgICAgICAg IDExCisjZGVmaW5lIFROQ19CUFNfMzg0MDAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUg VE5DX0JQU181NzYwMCAgICAgICAgICAgICAgICAgICAxMworI2RlZmluZSBUTkNfQlBTXzExNTIw MCAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFROQ19CUFNfMjMwNDAwICAgICAgICAgICAg ICAgICAgMTUKKyNkZWZpbmUgVE5DX0JQU180NjA4MDAgICAgICAgICAgICAgICAgICAxNgorCisj ZGVmaW5lIFROQ19EU19SRVFVRVNUICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVE5DX0RT XzUgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBUTkNfRFNfNiAgICAgICAgICAg ICAgICAgICAgICAgICA2CisjZGVmaW5lIFROQ19EU183ICAgICAgICAgICAgICAgICAgICAgICAg IDcKKyNkZWZpbmUgVE5DX0RTXzggICAgICAgICAgICAgICAgICAgICAgICAgOAorCisjZGVmaW5l IFROQ19QQVJfUkVRVUVTVCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVE5DX1BBUl9OT05F ICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUTkNfUEFSX09ERCAgICAgICAgICAgICAg ICAgICAgICAyCisjZGVmaW5lIFROQ19QQVJfRVZFTiAgICAgICAgICAgICAgICAgICAgIDMKKyNk ZWZpbmUgVE5DX1BBUl9NQVJLICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBUTkNfUEFS X1NQQUNFICAgICAgICAgICAgICAgICAgICA1CisKKyNkZWZpbmUgVE5DX1NCX1JFUVVFU1QgICAg ICAgICAgICAgICAgICAgMAorI2RlZmluZSBUTkNfU0JfMSAgICAgICAgICAgICAgICAgICAgICAg ICAxCisjZGVmaW5lIFROQ19TQl8xXzUgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUg VE5DX1NCXzIgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIFROQ19DVExfT0ZM T1dfUkVRVUVTVCAgICAgICAgICAgIDAKKyNkZWZpbmUgVE5DX0NUTF9PRkxPV19OT05FICAgICAg ICAgICAgICAgMQorI2RlZmluZSBUTkNfQ1RMX09GTE9XX1hPTl9YT0ZGICAgICAgICAgICAyCisj ZGVmaW5lIFROQ19DVExfT0ZMT1dfUlRTX0NUUyAgICAgICAgICAgIDMKKyNkZWZpbmUgVE5DX0NU TF9PRkxPV19EQ0QgICAgICAgICAgICAgICAxNworI2RlZmluZSBUTkNfQ1RMX09GTE9XX0RTUiAg ICAgICAgICAgICAgIDE5CisKKyNkZWZpbmUgVE5DX0NUTF9CUkVBS19SRVFVRVNUICAgICAgICAg ICAgNAorI2RlZmluZSBUTkNfQ1RMX0JSRUFLX09OICAgICAgICAgICAgICAgICA1CisjZGVmaW5l IFROQ19DVExfQlJFQUtfT0ZGICAgICAgICAgICAgICAgIDYKKworI2RlZmluZSBUTkNfQ1RMX0RU Ul9SRVFVRVNUICAgICAgICAgICAgICA3CisjZGVmaW5lIFROQ19DVExfRFRSX09OICAgICAgICAg ICAgICAgICAgIDgKKyNkZWZpbmUgVE5DX0NUTF9EVFJfT0ZGICAgICAgICAgICAgICAgICAgOQor CisjZGVmaW5lIFROQ19DVExfUlRTX1JFUVVFU1QgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVE5D X0NUTF9SVFNfT04gICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBUTkNfQ1RMX1JUU19PRkYg ICAgICAgICAgICAgICAgIDEyCisKKyNkZWZpbmUgVE5DX0NUTF9JRkxPV19SRVFVRVNUICAgICAg ICAgICAxMworI2RlZmluZSBUTkNfQ1RMX0lGTE9XX05PTkUgICAgICAgICAgICAgIDE0CisjZGVm aW5lIFROQ19DVExfSUZMT1dfWE9OX1hPRkYgICAgICAgICAgMTUKKyNkZWZpbmUgVE5DX0NUTF9J RkxPV19SVFNfQ1RTICAgICAgICAgICAxNgorI2RlZmluZSBUTkNfQ1RMX0lGTE9XX0RUUiAgICAg ICAgICAgICAgIDE4CisKKyNkZWZpbmUgVE5DX01TX0RBVEFfUkVBRFkgICAgICAgICAgICAgICAg MQorI2RlZmluZSBUTkNfTVNfT1ZFUlJVTl9FUlJPUiAgICAgICAgICAgICAyCisjZGVmaW5lIFRO Q19NU19QQVJJVFlfRVJST1IgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVE5DX01TX0ZSQU1FX0VS Uk9SICAgICAgICAgICAgICAgOAorI2RlZmluZSBUTkNfTVNfQlJFQUtfRVJST1IgICAgICAgICAg ICAgIDE2CisjZGVmaW5lIFROQ19NU19IUl9FTVBUWSAgICAgICAgICAgICAgICAgMzIKKyNkZWZp bmUgVE5DX01TX1NSX0VNUFRZICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBUTkNfTVNfVElN RU9VVF9FUlJPUiAgICAgICAgICAgMTI4CisKKyNkZWZpbmUgVE5DX01TX0NUU19ERUxUQSAgICAg ICAgICAgICAgICAgMQorI2RlZmluZSBUTkNfTVNfRFNSX0RFTFRBICAgICAgICAgICAgICAgICAy CisjZGVmaW5lIFROQ19NU19FREdFX1JJTkcgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVE5D X01TX1JMU0RfREVMVEEgICAgICAgICAgICAgICAgOAorI2RlZmluZSBUTkNfTVNfQ1RTX1NJRyAg ICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFROQ19NU19EU1JfU0lHICAgICAgICAgICAgICAg ICAgMzIKKyNkZWZpbmUgVE5DX01TX1JJX1NJRyAgICAgICAgICAgICAgICAgICA2NAorI2RlZmlu ZSBUTkNfTVNfUkxTRF9TSUcgICAgICAgICAgICAgICAgMTI4CisKKyNkZWZpbmUgVE5DX1BVUkdF X1JFQ0VJVkUgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUTkNfUFVSR0VfVFJBTlNNSVQgICAg ICAgICAgICAgICAyCisjZGVmaW5lIFROQ19QVVJHRV9CT1RIICAgICAgICAgICAgICAgICAgIDMK KworI2lmZGVmICBUTkNfTkFNRVMKK2NoYXIgKnRuY19uYW1lc1tdID0geworICAgICJTSUdOQVRV UkUiLCAiU0VULUJBVURSQVRFIiwgIlNFVC1EQVRBUkFURSIsICJTRVQtUEFSSVRZIiwgIlNFVC1T VE9QU0laRSIsCisgICAgIlNFVC1DT05UUk9MIiwgIk5PVElGWS1MSU5FU1RBVEUiLCAiTk9USUZZ LU1PREVNU1RBVEUiLAorICAgICJGTE9XQ09OVFJPTC1TVVNQRU5EIiwgIkZMT1dDT05UUk9MLVJF U1VNRSIsICJTRVQtTElORVNUQVRFLU1BU0siLAorICAgICJTRVQtTU9ERU1TVEFURS1NQVNLIiwg IlBVUkdFLURBVEEiLAorICAgIDAKK307CisjZWxzZQorZXh0ZXJuIGNoYXIgKnRuY19uYW1lc1td OworI2VuZGlmCisKKyNkZWZpbmUgVE5DX05BTUVfT0soeCkgICgoeCkgPj0gMCAmJiAoeCkgPD0g MTIgfHwgKHgpID49IDEwMCAmJiAoeCkgPD0gMTEyKQorI2RlZmluZSBUTkNfTkFNRSh4KSBcCisg ICAgICAgICAgICAgKFROQ19OQU1FX09LKHgpP3RuY19uYW1lc1soeCk+PTEwMD8oeCktMTAwOih4 KV06IlVOS05PV04iKQorCitfUFJPVE9UWVAoaW50IHRuY19pbml0LCh2b2lkKSk7CitfUFJPVE9U WVAoaW50IHRuY193YWl0LChDSEFSICosIGludCkpOworX1BST1RPVFlQKGludCB0bmNfdG5fc2Is KENIQVIgKixpbnQpKTsKK19QUk9UT1RZUChDT05TVCBjaGFyICogdG5jX2dldF9zaWduYXR1cmUs ICh2b2lkKSk7CitfUFJPVE9UWVAoaW50IHRuY19zZW5kX3NpZ25hdHVyZSwgKGNoYXIgKikpOwor X1BST1RPVFlQKGludCB0bmNfc2V0X2JhdWQsKGxvbmcpKTsKK19QUk9UT1RZUChpbnQgdG5jX2dl dF9iYXVkLCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IHRuY19zZXRfZGF0YXNpemUsKGludCkpOwor X1BST1RPVFlQKGludCB0bmNfZ2V0X2RhdGFzaXplLCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IHRu Y19zZXRfcGFyaXR5LChpbnQpKTsKK19QUk9UT1RZUChpbnQgdG5jX2dldF9wYXJpdHksKHZvaWQp KTsKK19QUk9UT1RZUChpbnQgdG5jX3NldF9zdG9wc2l6ZSwoaW50KSk7CitfUFJPVE9UWVAoaW50 IHRuY19nZXRfc3RvcHNpemUsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5jX3NldF9vZmxvdywo aW50KSk7CitfUFJPVE9UWVAoaW50IHRuY19nZXRfb2Zsb3csKHZvaWQpKTsKK19QUk9UT1RZUChp bnQgdG5jX3NldF9pZmxvdywoaW50KSk7CitfUFJPVE9UWVAoaW50IHRuY19nZXRfaWZsb3csKHZv aWQpKTsKK19QUk9UT1RZUChpbnQgdG5jX3NldF9icmVha19zdGF0ZSwoaW50KSk7CitfUFJPVE9U WVAoaW50IHRuY19nZXRfYnJlYWtfc3RhdGUsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5jX3Nl dF9kdHJfc3RhdGUsKGludCkpOworX1BST1RPVFlQKGludCB0bmNfZ2V0X2R0cl9zdGF0ZSwodm9p ZCkpOworX1BST1RPVFlQKGludCB0bmNfc2V0X3J0c19zdGF0ZSwoaW50KSk7CitfUFJPVE9UWVAo aW50IHRuY19nZXRfcnRzX3N0YXRlLCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IHRuY19zZXRfbHNf bWFzaywoaW50KSk7CitfUFJPVE9UWVAoaW50IHRuY19nZXRfbHNfbWFzaywodm9pZCkpOworX1BS T1RPVFlQKGludCB0bmNfZ2V0X2xzLCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IHRuY19zZXRfbXNf bWFzaywoaW50KSk7CitfUFJPVE9UWVAoaW50IHRuY19nZXRfbXNfbWFzaywodm9pZCkpOworX1BS T1RPVFlQKGludCB0bmNfZ2V0X21zLCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IHRuY19zZW5kX3B1 cmdlX2RhdGEsKGludCkpOworX1BST1RPVFlQKGludCB0bmNfZmxvd19zdXNwZW5kZWQsKHZvaWQp KTsKK19QUk9UT1RZUChpbnQgdG5jX3N1c3BlbmRfZmxvdywodm9pZCkpOworX1BST1RPVFlQKGlu dCB0bmNfcmVzdW1lX2Zsb3csKHZvaWQpKTsKKworLyogVGhlIGZvbGxvd2luZyBtZXRob2RzIGFy ZSB0byBiZSBjYWxsZWQgYnkgY2s/dGlvLmMgcm91dGluZXMgKi8KK19QUk9UT1RZUChpbnQgdG5z ZXRmbG93LChpbnQpKTsKK19QUk9UT1RZUChpbnQgdG5zZXR0aW5ncywoaW50LGludCkpOworX1BS T1RPVFlQKGludCB0bmdtZG0sKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgdG5zbmRiLChsb25nKSk7 CitfUFJPVE9UWVAoaW50IGlzdG5jb21wb3J0LCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IHRuX3Nu ZGNvbXBvcnQsKHZvaWQpKTsKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisKKyNpZm5kZWYgQ0tD VEVMX0MgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgZGVjbGFyZWQgaW4gY2tj dGVsLmMgKi8KK2V4dGVybiBpbnQgdG5faW5pdDsgICAgICAgICAgICAgICAgICAgICAvKiBUZWxu ZXQgcHJvdG9jb2wgaW5pdGlhbGl6ZWQgZmxhZyAqLworZXh0ZXJuIGNoYXIgKnRuX3Rlcm07ICAg ICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIHR5cGUgb3ZlcnJpZGUgKi8KK2V4dGVybiBpbnQg c3N0ZWxuZXQ7ICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgc2lkZSB0ZWxuZXQ/ICovCitl eHRlcm4gaW50IHRuX2RlYjsgICAgICAgICAgICAgICAgICAgICAgLyogVGVsbmV0IG9wdGlvbiBk ZWJ1Z2dpbmcgZmxhZyAqLworZXh0ZXJuIGludCB0bl9hdXRoX2tyYjVfZGVzX2J1ZzsgICAgICAg IC8qIFRlbG5ldCBCVUcgKi8KKyNlbmRpZiAvKiBDS0NURUxfQyAqLworCisjZGVmaW5lIFROX01T R19MRU4gMTIyOTIKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNlbmRpZiAvKiBDS0NURUxfSCAqLwoK ZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5p LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTg1NDgKLS0tIC9kZXYvbnVsbAorKysg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrY3VuaS5jCkBAIC0wLDAg KzEsMTYxNzMgQEAKK2NoYXIgKiBja2N1bmkgPSAiVW5pY29kZSBzdXBwb3J0IDkuMC4xMTUsIDE2 IE9jdCAyMDA5IjsKKworI2lmZGVmIE9TMgorI2RlZmluZSBLRVJNSVRGT05UCisjZW5kaWYgLyog T1MyICovCisKKy8qICBDIEsgQyBVIE4gSSAuIEMgIC0tICBVbmljb2RlL1Rlcm1pbmFsIGNoYXJh Y3Rlci1zZXQgdHJhbnNsYXRpb25zICAqLworCisvKgorICBDb3B5cmlnaHQgKEMpIDE5OTksIDIw MDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBO ZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZ SU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBt b2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorCisgIEF1dGhvcnM6CisgICAg RnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4KKyAgICAgIFRoZSBLZXJtaXQgUHJvamVj dCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eS4KKyAgICBKZWZmcmV5IEUgQWx0 bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBvaW50 cyBJbmMuLCBOZXcgWW9yayBDaXR5CisKKyAgRnVuY3Rpb25zIHVfYmxhaCgpIHRyYW5zbGF0ZSBm cm9tIGJsYWggdG8gVW5pY29kZSAoaW5jb21pbmcgbWF0ZXJpYWwpLgorICBGdW5jdGlvbnMgdHhf YmxhaCgpIHRyYW5zbGF0ZSBmcm9tIFVuaWNvZGUgdG8gYmxhaCAoa2V5c3Ryb2tlcykuCisgIEZ1 bmN0aW9uIHBvaW50ZXJzIGFyZSBrZXB0IGluIHBhcmFsbGVsIGFycmF5cyBpbmRleGVkIGJ5IFRY X2JsYWggdmFsdWVzCisgIGRlZmluZWQgaW4gY2tjdW5pLmguICAgTk9URTogdHhfZGVjc3BlYyBh bmQgdHhfZGVjdGVjaCBhcmUgdW5kZWZpbmVkIHNpbmNlCisgIHRoZXNlIGNoYXJhY3RlciBzZXRz IGFyZSBuZXZlciB0eXBlZCwgb25seSBkaXNwbGF5ZWQuCisKKyAgVGhlIGJsYWhfdSgpIHJvdXRp bmVzIGFjY2VwdCBhbiB1bnNpZ25lZCBjaGFyYWN0ZXIgdmFsdWUgaW4gY2hhcmFjdGVyLXNldAor ICBibGFoLCBhbmQgcmV0dXJuIHRoZSBVbmljb2RlIHRyYW5zbGF0aW9uLCBvciAweGZmZmQgaWYg dGhlIGNoYXJhY3RlciBpcyBub3QKKyAgZGVmaW5lZCBpbiBVbmljb2RlLiAgVGhlIDh0aCBiaXQg b2YgdGhlIGFyZ3VtZW50IHNob3VsZCBiZSBpZ25vcmVkLCBhYGxhIElTTworICA0ODczIGFuZCAy MDIyLgorCisgIFRoZSB0eF9ibGFoKCkgcm91dGluZXMgYWNjZXB0IGEgdW5pY29kZSB2YWx1ZSBh bmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUKKyAgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIgaW4g Y2hhcmFjdGVyLXNldCBibGFoLCBvciBlbHNlIC0xIGlmIHRoZSBjaGFyYWN0ZXIKKyAgZG9lcyBu b3QgZXhpc3QgaW4gYmxhaC4gIEluIHRoaXMgY2FzZSwgdGhlIGZ1bGwgOC1iaXQgdmFsdWUgaXMg cmV0dXJuZWQsCisgIHNpbmNlIElTTyAyMDIyIG9ubHkgd29ya3MgaW4gdGhlIGhvc3QtdG8tdGVy bWluYWwgZGlyZWN0aW9uLgorCisgIE5PVEU6IEtFUk1JVEZPTlQgc2hvdWxkIGJlIGRlZmluZWQg b25seSBpZiB3ZSBhcmUgdXNpbmcgdGhlIG5ldyAoc3RpbGwKKyAgaHlwb3RoZXRpY2FsKSBLZXJt aXQgZm9udCB0aGF0IGhhcyBhbGwgdGhlIFZUL0hlYXRoL1d5c2UvVFZJIGdyYXBoaWMKKyAgY2hh cmFjdGVycyBpbiBpdC4gIElNUE9SVEFOVDogYWxsIEtlcm1pdGZvbnQgY29kZSBwb2ludHMgbmVl ZCB1cGRhdGluZyB0bworICB0aGUgdmFsdWVzIGluIHRoZSBmaW5hbCBwcm9wb3NhbCB0byB0aGUg VVRDLgorCisgIExBVEVSIE5PVEU6IFRoZSBuZWVkZWQgY2hhcmFjdGVycyB3ZXJlIGFwcHJvdmVk IGZvciBVbmljb2RlIDMuMSwgYW5kCisgIHRoZXJlZm9yZSBub3RoaW5nIHNwZWNpYWwgc2hvdWxk IGJlIHJlcXVpcmVkIHRvIHVzZSB0aGVtLCBleGNlcHQgdGhhdCBpdAorICB3aWxsIHRha2Ugc29t ZSB0aW1lIGZvciB0aGVtIHRvIHNob3cgdXAgaW4gY29tbWVyY2lhbCBmb250cy4KKworICBUTyBE TzogQSBsb3Qgb2YgdGhlIGZ1bmN0aW9ucyBjYW4gYmUgdGlnaHRlbmVkIHVwIC0tIHVzZSByYW5n ZXMgd2hlbgorICBwb3NzaWJsZSwgc29ydCBzd2l0Y2ggc3RhdGVtZW50cyBpbiBvcmRlciBvZiBm cmVxdWVuY3ksIGV0Yy4KKyovCisjaW5jbHVkZSAiY2tjc3ltLmgiICAgICAgICAgICAgICAgICAg ICAgLyogSW5jbHVkZXMuLi4gKi8KKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpbmNsdWRlICJja2Nr ZXIuaCIKKyNpbmNsdWRlICJja3VjbWQuaCIKKyNpbmNsdWRlICJja2N4bGEuaCIKKyNpbmNsdWRl ICJja3V4bGEuaCIKKworI2lmZGVmIFVOSUNPREUKKworI2lmZGVmIE9TMgorLyoKKyAgVGhpcyBt YXRlcmlhbCBpcyBuZWVkZWQgZm9yIHRoZSBpbnRlZ3JhdGlvbiBvZiBUZXh0UFMgaW50byBLZXJt aXQgOTUuCisgIFdoZW4gcHJpbnRpbmcgYSBmaWxlIHdlIHVzZSB0aGUgU0VUIEZJTEUgQ0hBUkFD VEVSLVNFVCB2YWx1ZSBhcyB0aGUgaW5wdXQKKyAgY2hhcmFjdGVyLXNldCBhbmQgdGhlbiBjb252 ZXJ0IGl0IHRvIHRoZSBzcGVjaWFsIExhdGluMSBzZXQgY2FsbGVkCisgIENvdXJpZXJMYXRpbjEg dXNpbmcgdGhlIFVuaWNvZGUgdHJhbnNsYXRpb24gZnVuY3Rpb25zLgorKi8KK3N0cnVjdCBfcGFp ciB7IGludCB0eDsgaW50IGZjOyB9IFRYRkNbXSA9IHsKKyAgICBUWF9BU0NJSSwgICAgICAgRkNf VVNBU0NJSSwKKyAgICBUWF9CUklUSVNILCAgICAgRkNfVUtBU0NJSSwKKyAgICBUWF9DTl9GUkVO Q0gsICAgRkNfRkNBU0NJSSwKKyAgICBUWF9DUDQzNywgICAgICAgRkNfQ1A0MzcsCisgICAgVFhf Q1A4NTAsICAgICAgIEZDX0NQODUwLAorICAgIFRYX0NQODUyLCAgICAgICBGQ19DUDg1MiwKKyAg ICBUWF9DUDg1NywgICAgICAgLTIsCisgICAgVFhfQ1A4NjIsICAgICAgIEZDX0NQODYyLAorICAg IFRYX0NQODY0LCAgICAgICAtMiwKKyAgICBUWF9DUDg2NiwgICAgICAgRkNfQ1A4NjYsCisgICAg VFhfQ1A4NjksICAgICAgIC0yLAorICAgIFRYX0NVQkFOLCAgICAgICAtMiwKKyAgICBUWF9DWkVD SCwgICAgICAgLTIsCisgICAgVFhfREFOSVNILCAgICAgIC0yLAorICAgIFRYX0RFQ01DUywgICAg ICBGQ19ERUNNQ1MsCisgICAgVFhfREVDU1BFQywgICAgIC0yLCAgICAgICAgICAgICAvKiB3aGls ZSBkZWZpbmVkLCBub3QgaW4gZmNzIHRhYmxlcyAqLworICAgIFRYX0RFQ1RFQ0gsICAgICAtMiwg ICAgICAgICAgICAgLyogd2hpbGUgZGVmaW5lZCwgbm90IGluIGZjcyB0YWJsZXMgKi8KKyAgICBU WF9ER0ksICAgICAgICAgRkNfREdNQ1MsCisgICAgVFhfRFVUQ0gsICAgICAgIEZDX0RVQVNDSUks CisgICAgVFhfRklOTklTSCwgICAgIEZDX0ZJQVNDSUksCisgICAgVFhfRlJFTkNILCAgICAgIEZD X0ZSQVNDSUksCisgICAgVFhfR0VSTUFOLCAgICAgIEZDX0dFQVNDSUksCisgICAgVFhfSEU3LCAg ICAgICAgIEZDX0hFNywKKyAgICBUWF9IUFI4LCAgICAgICAgRkNfSFBSOCwKKyAgICBUWF9IVU5H QVJJQU4sICAgRkNfSFVBU0NJSSwKKyAgICBUWF9JVEFMSUFOLCAgICAgRkNfSVRBU0NJSSwKKyAg ICBUWF9KMjAxUiwgICAgICAgLTIsCisgICAgVFhfSjIwMUssICAgICAgIC0yLAorICAgIFRYX0tP STcsICAgICAgICBGQ19LT0k3LAorICAgIFRYX0tPSTgsICAgICAgICBGQ19LT0k4LAorICAgIFRY X0tPSThSLCAgICAgICBGQ19LT0k4UiwKKyAgICBUWF9LT0k4VSwgICAgICAgRkNfS09JOFUsCisg ICAgVFhfODg1OV8xLCAgICAgIEZDXzFMQVRJTiwKKyAgICBUWF84ODU5XzIsICAgICAgRkNfMkxB VElOLAorICAgIFRYXzg4NTlfMywgICAgICAtMiwKKyAgICBUWF84ODU5XzQsICAgICAgLTIsCisg ICAgVFhfODg1OV81LCAgICAgIEZDX0NZUklMTCwKKyAgICBUWF84ODU5XzYsICAgICAgLTIsCisg ICAgVFhfODg1OV83LCAgICAgIC0yLAorICAgIFRYXzg4NTlfOCwgICAgICBGQ19IRUJSRVcsCisg ICAgVFhfODg1OV85LCAgICAgIC0yLAorICAgIFRYXzg4NTlfMTAsICAgICAtMiwKKyAgICBUWF84 ODU5XzE1LCAgICAgLTIsCisgICAgVFhfTUFDTDEsICAgICAgIEZDX0FQUFFELAorICAgIFRYX05F WFQsICAgICAgICBGQ19ORVhULAorICAgIFRYX05PUldFR0lBTiwgICBGQ19OT0FTQ0lJLAorICAg IFRYX1BPUlRVR1VFU0UsICBGQ19QT0FTQ0lJLAorICAgIFRYX1NQQU5JU0gsICAgICBGQ19TUEFT Q0lJLAorICAgIFRYX1NXRURJU0gsICAgICBGQ19TV0FTQ0lJLAorICAgIFRYX1NXSVNTLCAgICAg ICBGQ19DSEFTQ0lJLAorICAgIFRYX0lDRUxBTkRJQywgICAtMiwKKyAgICBUWF9KSVM3LCAgICAg ICAgLTIsCisgICAgVFhfU0hKSVMsICAgICAgIEZDX1NISklTLAorICAgIFRYX0pFVUMsICAgICAg ICBGQ19KRVVDLAorICAgIFRYX0pERUMsICAgICAgICBGQ19KREVDLAorICAgIFRYX0VMT1Q5Mjcs ICAgICBGQ19FTE9ULAorICAgIFRYX0RHUENHUlBILCAgICAtMiwKKyAgICBUWF9ER0xER1JQSCwg ICAgLTIsCisgICAgVFhfREdXUEdSUEgsICAgIC0yLAorICAgIFRYX0hQTElORSwgICAgICAtMiwK KyAgICBUWF9IUE1BVEgsICAgICAgLTIsCisgICAgVFhfUU5YR1JQSCwgICAgIC0yLAorICAgIFRY X1NOSUJSQUNLLCAgICAtMiwKKyAgICBUWF9TTklFVVJPLCAgICAgLTIsCisgICAgVFhfU05JRkFD RVQsICAgIC0yLAorICAgIFRYX1NOSUlCTSwgICAgICAtMiwKKyAgICBUWF9TTklCTEFOSywgICAg LTIsCisgICAgVFhfQ1AxMjUyLCAgICAgIC0yLAorICAgIFRYX0NQMTI1MCwgICAgICBGQ19DUDEy NTAsCisgICAgVFhfQ1AxMjUxLCAgICAgIEZDX0NQMTI1MSwKKyAgICBUWF9DUDEyNTMsICAgICAg LTIsCisgICAgVFhfQ1AxMjU0LCAgICAgIC0yLAorICAgIFRYX0NQMTI1NywgICAgICAtMiwKKyAg ICBUWF9DUDg1NiwgICAgICAgLTIsCisgICAgVFhfQ1A4NTUsICAgICAgIEZDX0NQODU1LAorICAg IFRYX0NQODE5LCAgICAgICBGQ18xTEFUSU4sCisgICAgVFhfQ1A5MTIsICAgICAgIEZDXzJMQVRJ TiwKKyAgICBUWF9DUDkxMywgICAgICAgLTIsCisgICAgVFhfQ1A5MTQsICAgICAgIC0yLAorICAg IFRYX0NQOTE1LCAgICAgICBGQ19DWVJJTEwsCisgICAgVFhfQ1AxMDg5LCAgICAgIC0yLAorICAg IFRYX0NQODEzLCAgICAgICBGQ19HUkVFSywKKyAgICBUWF9DUDkxNiwgICAgICAgRkNfSEVCUkVX LAorICAgIFRYX0NQOTIwLCAgICAgICAtMiwKKyAgICBUWF9DUDEwNTEsICAgICAgLTIsCisgICAg VFhfQ1A4NTgsICAgICAgIEZDX0NQODU4LAorICAgIFRYXzg4NTlfMTUsICAgICBGQ185TEFUSU4s CisgICAgVFhfQ1A5MjMsICAgICAgIEZDX0NQOTIzLAorICAgIFRYX0VMT1Q5MjgsICAgICAtMiwK KyAgICBUWF9DUDEwMDAwLCAgICAgLTIsCisgICAgVFhfQ1AzNywgICAgICAgIC0yLAorICAgIFRY X0NQMTI1NSwgICAgICAtMiwKKyAgICBUWF9DUDEyNTYsICAgICAgLTIsCisgICAgVFhfQ1AxMjU4 LCAgICAgIC0yLAorICAgIFRYX01BWk9WSUEsICAgICBGQ19NQVpPVklBLAorICAgIFRYX0FQTDEs ICAgICAgICAtMiwKKyAgICBUWF9BUEwyLCAgICAgICAgLTIsCisgICAgVFhfQVBMMywgICAgICAg IC0yLAorICAgIFRYX0FQTDQsICAgICAgICAtMiwKKyAgICBUWF9BUEw1LCAgICAgICAgLTIsCisg ICAgVFhfVFJBTlNQLCAgICAgIEZDX1RSQU5TUAorfTsKK2ludCBuVFhGQyA9IHNpemVvZihUWEZD KSAvIHNpemVvZihzdHJ1Y3QgX3BhaXIpOworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZmMydHgo aW50IGZjKQorI2Vsc2UKK2ZjMnR4KGludCBjKSBpbnQgZmM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgblRYRkMgOyBpKyspCisgICAg ICBpZiAoVFhGQ1tpXS5mYyA9PSBmYyAmJiBUWEZDW2ldLnR4ID49IDApCisgICAgICAgIHJldHVy bihUWEZDW2ldLnR4KTsKKyAgICByZXR1cm4oVFhfQVNDSUkpOworfQorCitpbnQKKyNpZmRlZiBD S19BTlNJQwordHgyZmMoaW50IHR4KQorI2Vsc2UKK3R4MmZjKGludCB4KSBpbnQgdHg7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgblRY RkMgOyBpKyspCisgICAgICBpZiAoVFhGQ1tpXS50eCA9PSB0eCAmJiBUWEZDW2ldLmZjID49IDAp CisgICAgICAgIHJldHVybihUWEZDW2ldLmZjKTsKKyAgICByZXR1cm4oRkNfVVNBU0NJSSk7Cit9 CisKKy8qIFNFVCBURVJNSU5BTCBSRU1PVEUgQ0hBUkFDVEVSLVNFVCBrZXl3b3JkIHRhYmxlICov CisKK3N0cnVjdCBrZXl0YWIgdHhydGFiW10gPSB7CisgICAgImFwbDItaWJtIiwgICAgICAgICBU WF9BUEw0LCAgICAgICAwLAorICAgICJhcGwtMjc0MSIsICAgICAgICAgVFhfQVBMNSwgICAgICAg MCwKKyAgICAiYXBsLWR5YWRpYyIsICAgICAgIFRYX0FQTDIsICAgICAgIDAsCisgICAgImFwbC1p c28iLCAgICAgICAgICBUWF9BUEwxLCAgICAgICAwLAorICAgICJhcGwtcGx1cy0yMDAwIiwgICAg VFhfQVBMMywgICAgICAgMCwgLyogPSBBUEwtMjAwMCAqLworICAgICJhcmFiaWMtaXNvIiwgICAg ICAgVFhfODg1OV82LCAgICAgMCwKKyAgICAiYXNjaWkiLCAgICAgICAgICAgIFRYX0FTQ0lJLCAg ICAgIDAsCisgICAgImJyaXRpc2giLCAgICAgICAgICBUWF9CUklUSVNILCAgICAwLAorICAgICJj YW5hZGlhbi1mcmVuY2giLCAgVFhfQ05fRlJFTkNILCAgMCwKKyAgICAiYnVsZ2FyaWEtcGMiLCAg ICAgIFRYX0NQODU2LCAgICAgIDAsCisjaWZkZWYgQ09NTUVOVAorICAgICJjcDAzNyIsICAgICAg ICAgICAgVFhfQ1AzNywgICAgICAgMCwgLyogVS5TLiBFQkNESUMgKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgImNwMTAwMDAiLCAgICAgICAgICBUWF9DUDEwMDAwLCAgICAwLCAvKiBBcHBs ZSBRdWlja2RyYXcgKi8KKyAgICAiY3AxMDUxIiwgICAgICAgICAgIFRYX0NQMTA1MSwgICAgIDAs IC8qIFNhbWUgYXMgSFAgUm9tYW4gOCAqLworICAgICJjcDEwODkiLCAgICAgICAgICAgVFhfQ1Ax MDg5LCAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS02ICovCisgICAgImNwMTI1MCIsICAgICAg ICAgICBUWF9DUDEyNTAsICAgICAwLCAvKiBMYXRpbi0yIFdpbmRvd3MgKi8KKyAgICAiY3AxMjUx IiwgICAgICAgICAgIFRYX0NQMTI1MSwgICAgIDAsIC8qIEN5cmlsbGljIFdpbmRvd3MgKi8KKyAg ICAiY3AxMjUyIiwgICAgICAgICAgIFRYX0NQMTI1MiwgICAgIDAsIC8qIExhdGluLTEgV2luZG93 cyAqLworICAgICJjcDEyNTMiLCAgICAgICAgICAgVFhfQ1AxMjUzLCAgICAgMCwgLyogR3JlZWsg V2luZG93cyAqLworICAgICJjcDEyNTQiLCAgICAgICAgICAgVFhfQ1AxMjU0LCAgICAgMCwgLyog VHVya2V5IFdpbmRvd3MgKi8KKyAgICAiY3AxMjU1IiwgICAgICAgICAgIFRYX0NQMTI1NSwgICAg IDAsIC8qIEhlYnJldyBXaW5kb3dzICovCisgICAgImNwMTI1NiIsICAgICAgICAgICBUWF9DUDEy NTYsICAgICAwLCAvKiBBcmFiaWMgV2luZG93cyAqLworICAgICJjcDEyNTciLCAgICAgICAgICAg VFhfQ1AxMjU3LCAgICAgMCwgLyogTGF0aW4tNCBXaW5kb3dzICovCisgICAgImNwMTI1OCIsICAg ICAgICAgICBUWF9DUDEyNTgsICAgICAwLCAvKiBWaWV0IE5hbSBXaW5kb3dzICovCisgICAgImNw NDM3IiwgICAgICAgICAgICBUWF9DUDQzNywgICAgICAwLAorICAgICJjcDgxMyIsICAgICAgICAg ICAgVFhfQ1A4MTMsICAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS03ICovCisgICAgImNwODE5 IiwgICAgICAgICAgICBUWF9DUDgxOSwgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTEgKi8K KyAgICAiY3A4NTAiLCAgICAgICAgICAgIFRYX0NQODUwLCAgICAgIDAsCisgICAgImNwODUyIiwg ICAgICAgICAgICBUWF9DUDg1MiwgICAgICAwLAorICAgICJjcDg1NSIsICAgICAgICAgICAgVFhf Q1A4NTUsICAgICAgMCwgLyogQ3lyaWxsaWMgKi8KKyAgICAiY3A4NTYiLCAgICAgICAgICAgIFRY X0NQODU2LCAgICAgIENNX0lOViwgLyogQnVsZ2FyaWEgKi8KKyAgICAiY3A4NTciLCAgICAgICAg ICAgIFRYX0NQODU3LCAgICAgIDAsIC8qIExhdGluLTUgKi8KKyAgICAiY3A4NTgiLCAgICAgICAg ICAgIFRYX0NQODU4LCAgICAgIDAsIC8qIEV1cm8gbW9kaWZpZWQgY3A4NTAgKi8KKyAgICAiY3A4 NjItaGVicmV3IiwgICAgIFRYX0NQODYyLCAgICAgIDAsIC8qIEhlYnJldyAqLworICAgICJjcDg2 NCIsICAgICAgICAgICAgVFhfQ1A4NjQsICAgICAgMCwgLyogQXJhYmljICovCisgICAgImNwODY2 IiwgICAgICAgICAgICBUWF9DUDg2NiwgICAgICAwLCAvKiBDeXJpbGxpYyAqLworICAgICJjcDg2 OSIsICAgICAgICAgICAgVFhfQ1A4NjksICAgICAgMCwgLyogR3JlZWsgKi8KKyAgICAiY3A5MTIi LCAgICAgICAgICAgIFRYX0NQOTEyLCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktMiAqLwor ICAgICJjcDkxMyIsICAgICAgICAgICAgVFhfQ1A5MTMsICAgICAgMCwgLyogU2FtZSBhcyBJU08g ODg1OS0zICovCisgICAgImNwOTE0IiwgICAgICAgICAgICBUWF9DUDkxNCwgICAgICAwLCAvKiBT YW1lIGFzIElTTyA4ODU5LTQgKi8KKyAgICAiY3A5MTUiLCAgICAgICAgICAgIFRYX0NQOTE1LCAg ICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4NTktNSAqLworICAgICJjcDkxNiIsICAgICAgICAgICAg VFhfQ1A5MTYsICAgICAgMCwgLyogU2FtZSBhcyBJU08gODg1OS04ICovCisgICAgImNwOTIwIiwg ICAgICAgICAgICBUWF9DUDkyMCwgICAgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTkgKi8KKyAg ICAiY3A5MjMiLCAgICAgICAgICAgIFRYX0NQOTIzLCAgICAgIDAsIC8qIFNhbWUgYXMgSVNPIDg4 NTktMTUgKi8KKyNpZmRlZiBDT01NRU5UCisvKiBOb3QgaW1wbGVtZW50ZWQgeWV0ICovCisgICAg ImN1YmFuIiwgICAgICAgICAgICBUWF9DVUJBTiwgICAgICAwLAorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAiY3lyaWxsaWMtaXNvIiwgICAgIFRYXzg4NTlfNSwgICAgIDAsCisjaWZkZWYgQ09N TUVOVAorLyogTm90IGltcGxlbWVudGVkIHlldCAqLworICAgICJjemVjaCIsICAgICAgICAgICAg VFhfQ1pFQ0gsICAgICAgMCwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgImRhbmlzaCIsICAg ICAgICAgICBUWF9EQU5JU0gsICAgICAwLAorICAgICJkZWMtbSIsICAgICAgICAgICAgVFhfREVD TUNTLCAgICAgQ01fQUJSfENNX0lOViwKKyAgICAiZGVjLW1jcyIsICAgICAgICAgIFRYX0RFQ01D UywgICAgIENNX0lOViwKKyAgICAiZGVjLW11bHRpbmF0aW9uYWwiLFRYX0RFQ01DUywgICAgIDAs CisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGltcGxlbWVu dGVkIHlldCAqLworICAgICJkZWMta2FuamkiLCAgICAgICAgVFhfSkRFQywgICAgICAgMCwKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgImRlYy1zcGVjaWFsIiwgICAgICBUWF9ERUNTUEVDLCAg ICAwLAorICAgICJkZWMtdGVjaG5pY2FsIiwgICAgVFhfREVDVEVDSCwgICAgMCwKKyAgICAiZGct aW50ZXJuYXRpb25hbCIsIFRYX0RHSSwgICAgICAgIDAsCisgICAgImRnLWxpbmVkcmF3aW5nIiwg ICBUWF9ER0xER1JQSCwgICAwLAorICAgICJkZy1zcGVjaWFsZ3JhcGhjcyIsVFhfREdQQ0dSUEgs ICAgMCwKKyAgICAiZGctd29yZHByb2Nlc3NpbmciLFRYX0RHV1BHUlBILCAgIDAsCisgICAgImR1 dGNoIiwgICAgICAgICAgICBUWF9EVVRDSCwgICAgICAwLAorICAgICJlbG90OTI3LWdyZWVrIiwg ICAgVFhfRUxPVDkyNywgICAgMCwKKyAgICAiZWxvdDkyOC1ncmVlayIsICAgIFRYX0VMT1Q5Mjgs ICAgIDAsCisgICAgImZpbm5pc2giLCAgICAgICAgICBUWF9GSU5OSVNILCAgICAwLAorICAgICJm cmVuY2giLCAgICAgICAgICAgVFhfRlJFTkNILCAgICAgMCwKKyAgICAiZ2VybWFuIiwgICAgICAg ICAgIFRYX0dFUk1BTiwgICAgIDAsCisgICAgImdyZWVrLWlzbyIsICAgICAgICBUWF84ODU5Xzcs ICAgICAwLAorICAgICJoZWJyZXctNyIsICAgICAgICAgVFhfSEU3LCAgICAgICAgMCwKKyAgICAi aGVicmV3LWlzbyIsICAgICAgIFRYXzg4NTlfOCwgICAgIDAsCisgICAgImhwLWxpbmUtZHJhd2lu ZyIsICBUWF9IUExJTkUsICAgICAwLAorICAgICJocC1tYXRoL3RlY2huaWNhbCIsVFhfSFBNQVRI LCAgICAgMCwKKyAgICAiaHAtcm9tYW44IiwgICAgICAgIFRYX0hQUjgsICAgICAgIDAsCisgICAg Imh1bmdhcmlhbiIsICAgICAgICBUWF9IVU5HQVJJQU4sICAwLAorICAgICJpdGFsaWFuIiwgICAg ICAgICAgVFhfSVRBTElBTiwgICAgMCwKKyAgICAiamFwYW5lc2Utcm9tYW4iLCAgIFRYX0oyMDFS LCAgICAgIDAsCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90 IGltcGxlbWVudGVkIHlldCAqLworICAgICJqYXBhbmVzZS1ldWMiLCAgICAgVFhfSkVVQywgICAg ICAgMCwKKyAgICAiamlzNy1rYW5qaSIsICAgICAgIFRYX0pJUzcsICAgICAgIDAsCisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICJrYXRha2FuYSIsICAgICAgICAgVFhfSjIwMUssICAgICAgMCwK KyAgICAia28iLCAgICAgICAgICAgICAgIFRYX0tPSTgsICAgICAgIENNX0FCUnxDTV9JTlYsCisg ICAgImtvaSIsICAgICAgICAgICAgICBUWF9LT0k4LCAgICAgICBDTV9BQlJ8Q01fSU5WLAorICAg ICJrb2k4IiwgICAgICAgICAgICAgVFhfS09JOCwgICAgICAgMCwKKyAgICAia29pOC1jeXJpbGxp YyIsICAgIFRYX0tPSTgsICAgICAgIENNX0lOViwKKyAgICAia29pOHIiLCAgICAgICAgICAgIFRY X0tPSThSLCAgICAgIDAsCisgICAgImtvaTh1IiwgICAgICAgICAgICBUWF9LT0k4VSwgICAgICAw LAorICAgICJsIiwgICAgICAgICAgICAgICAgVFhfODg1OV8xLCAgICAgQ01fQUJSfENNX0lOViwK KyAgICAibGEiLCAgICAgICAgICAgICAgIFRYXzg4NTlfMSwgICAgIENNX0FCUnxDTV9JTlYsCisg ICAgImxhdCIsICAgICAgICAgICAgICBUWF84ODU5XzEsICAgICBDTV9BQlJ8Q01fSU5WLAorICAg ICJsYXRpIiwgICAgICAgICAgICAgVFhfODg1OV8xLCAgICAgQ01fQUJSfENNX0lOViwKKyAgICAi bGF0aW4iLCAgICAgICAgICAgIFRYXzg4NTlfMSwgICAgIENNX0FCUnxDTV9JTlYsCisgICAgImxh dGluMS1pc28iLCAgICAgICBUWF84ODU5XzEsICAgICAwLAorICAgICJsYXRpbjItaXNvIiwgICAg ICAgVFhfODg1OV8yLCAgICAgMCwKKyAgICAibGF0aW4zLWlzbyIsICAgICAgIFRYXzg4NTlfMywg ICAgIDAsCisgICAgImxhdGluNC1pc28iLCAgICAgICBUWF84ODU5XzQsICAgICAwLAorICAgICJs YXRpbjUtaXNvIiwgICAgICAgVFhfODg1OV85LCAgICAgMCwKKyAgICAibGF0aW42LWlzbyIsICAg ICAgIFRYXzg4NTlfMTAsICAgIDAsCisgICAgImxhdGluOS1pc28iLCAgICAgICBUWF84ODU5XzE1 LCAgICAwLAorICAgICJtYWNpbnRvc2gtbGF0aW4iLCAgVFhfTUFDTDEsICAgICAgMCwKKyAgICAi bWF6b3ZpYS1wYyIsICAgICAgIFRYX01BWk9WSUEsICAgIDAsCisgICAgIm5leHQtbXVsdGluYXRp b25hbCIsVFhfTkVYVCwgICAgICAwLAorICAgICJub3J3ZWdpYW4iLCAgICAgICAgVFhfTk9SV0VH SUFOLCAgMCwKKyAgICAicG9ydHVndWVzZSIsICAgICAgIFRYX1BPUlRVR1VFU0UsIDAsCisgICAg InFueC1jb25zb2xlIiwgICAgICBUWF9RTlhHUlBILCAgICAwLAorI2lmZGVmIENPTU1FTlQgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKyAgICAic2hp ZnQtamlzIiwgICAgICAgIFRYX1NISklTLCAgICAgIDAsCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICJzaG9ydC1rb2kiLCAgICAgICAgVFhfS09JNywgICAgICAgMCwKKyAgICAic25pLWJsYW5r cyIsICAgICAgIFRYX1NOSUJMQU5LLCAgIDAsCisgICAgInNuaS1icmFja2V0cyIsICAgICBUWF9T TklCUkFDSywgICAwLAorICAgICJzbmktZXVybyIsICAgICAgICAgVFhfU05JRVVSTywgICAgMCwK KyAgICAic25pLWZhY2V0IiwgICAgICAgIFRYX1NOSUZBQ0VULCAgIDAsCisgICAgInNuaS1pYm0i LCAgICAgICAgICBUWF9TTklJQk0sICAgICAwLAorICAgICJzcGFuaXNoIiwgICAgICAgICAgVFhf U1BBTklTSCwgICAgMCwKKyAgICAic3dlZGlzaCIsICAgICAgICAgIFRYX1NXRURJU0gsICAgIDAs CisgICAgInN3aXNzIiwgICAgICAgICAgICBUWF9TV0lTUywgICAgICAwLAorICAgICJ0cmFuc3Bh cmVudCIsICAgICAgVFhfVFJBTlNQLCAgICAgMCwKKyNpZmRlZiBDT01NRU5UCisgICAgInV0Zjci LCAgICAgICAgICAgICBUWF9VVEY3LCAgICAgICAwLAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICAidXRmOCIsICAgICAgICAgICAgIFRYX1VURjgsICAgICAgIDAsCisgICAgIiIsIDAsIDAKK307 CitpbnQgbnR4cnRhYiA9IHNpemVvZih0eHJ0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7 CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBLQU5KSQorLyoKKyAgQWxsIEthbmppL1VuaWNv ZGUgdHJhbnNsYXRpb25zIGFyZSBiYXNlZCBvbiB0aGUgVW5pY29kZSAzLjAKKyAgU2hpZnQtSklT IG1hcHBpbmcuICBPdGhlciBjaGFyYWN0ZXIgc2V0cywgbGlrZSBFVUMtSlAsIEpJUy03LCBldGMs CisgIGFyZSB0cmFuc2Zvcm1lZCBhbGdvcml0aG1pY2FsbHkgdG8vZnJvbSBTaGlmdC1KSVMgYmVm b3JlL2FmdGVyCisgIGNvbnZlcnNpb24gdG8vZnJvbSBVbmljb2RlLiAgVGhpcyBpcyBiZWNhdXNl IEthbmppL1VuaWNvZGUgbWFwcGluZworICB0YWJsZXMgYWRkIGFib3V0IDEyMEsgdG8gdGhlIHBy b2dyYW0sIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRvIHRoaXMKKyAgZm9yIGVhY2ggS2FuamkgY2hh cmFjdGVyIHNldC4KKyovCitzdGF0aWMgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU2hpZnQtSklTIHRvIFVuaWNvZGUgKi8KK3NqdV84MTQwW10gPSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAweDgxNDAgdGhydSAweDlmZmMgKi8KKyAgICAweDMwMDAsIDB4MzAwMSwg MHgzMDAyLCAweGZmMGMsIDB4ZmYwZSwgMHgzMGZiLCAweGZmMWEsIDB4ZmYxYiwKKyAgICAweGZm MWYsIDB4ZmYwMSwgMHgzMDliLCAweDMwOWMsIDB4MDBiNCwgMHhmZjQwLCAweDAwYTgsIDB4ZmYz ZSwKKyAgICAweGZmZTMsIDB4ZmYzZiwgMHgzMGZkLCAweDMwZmUsIDB4MzA5ZCwgMHgzMDllLCAw eDMwMDMsIDB4NGVkZCwKKyAgICAweDMwMDUsIDB4MzAwNiwgMHgzMDA3LCAweDMwZmMsIDB4MjAx NSwgMHgyMDEwLCAweGZmMGYsIDB4MDA1YywKKyAgICAweDMwMWMsIDB4MjAxNiwgMHhmZjVjLCAw eDIwMjYsIDB4MjAyNSwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywKKyAgICAweDIwMWQsIDB4ZmYw OCwgMHhmZjA5LCAweDMwMTQsIDB4MzAxNSwgMHhmZjNiLCAweGZmM2QsIDB4ZmY1YiwKKyAgICAw eGZmNWQsIDB4MzAwOCwgMHgzMDA5LCAweDMwMGEsIDB4MzAwYiwgMHgzMDBjLCAweDMwMGQsIDB4 MzAwZSwKKyAgICAweDMwMGYsIDB4MzAxMCwgMHgzMDExLCAweGZmMGIsIDB4MjIxMiwgMHgwMGIx LCAweDAwZDcsIDB4ZmZmZCwKKyAgICAweDAwZjcsIDB4ZmYxZCwgMHgyMjYwLCAweGZmMWMsIDB4 ZmYxZSwgMHgyMjY2LCAweDIyNjcsIDB4MjIxZSwKKyAgICAweDIyMzQsIDB4MjY0MiwgMHgyNjQw LCAweDAwYjAsIDB4MjAzMiwgMHgyMDMzLCAweDIxMDMsIDB4ZmZlNSwKKyAgICAweGZmMDQsIDB4 MDBhMiwgMHgwMGEzLCAweGZmMDUsIDB4ZmYwMywgMHhmZjA2LCAweGZmMGEsIDB4ZmYyMCwKKyAg ICAweDAwYTcsIDB4MjYwNiwgMHgyNjA1LCAweDI1Y2IsIDB4MjVjZiwgMHgyNWNlLCAweDI1Yzcs IDB4MjVjNiwKKyAgICAweDI1YTEsIDB4MjVhMCwgMHgyNWIzLCAweDI1YjIsIDB4MjViZCwgMHgy NWJjLCAweDIwM2IsIDB4MzAxMiwKKyAgICAweDIxOTIsIDB4MjE5MCwgMHgyMTkxLCAweDIxOTMs IDB4MzAxMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDIyMDgs IDB4MjIwYiwgMHgyMjg2LCAweDIyODcsIDB4MjI4MiwgMHgyMjgzLCAweDIyMmEsIDB4MjIyOSwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDIyMjcsIDB4MjIyOCwgMHgwMGFjLCAweDIxZDIsIDB4MjFkNCwg MHgyMjAwLCAweDIyMDMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHgyMjIwLCAweDIyYTUsIDB4MjMxMiwgMHgyMjAyLCAweDIyMDcsIDB4MjI2MSwKKyAgICAweDIy NTIsIDB4MjI2YSwgMHgyMjZiLCAweDIyMWEsIDB4MjIzZCwgMHgyMjFkLCAweDIyMzUsIDB4MjIy YiwKKyAgICAweDIyMmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDIxMmIsIDB4MjAzMCwgMHgyNjZmLCAweDI2NmQsIDB4MjY2 YSwgMHgyMDIwLCAweDIwMjEsIDB4MDBiNiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4MjVlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmYxMCwKKyAgICAweGZmMTEs IDB4ZmYxMiwgMHhmZjEzLCAweGZmMTQsIDB4ZmYxNSwgMHhmZjE2LCAweGZmMTcsIDB4ZmYxOCwK KyAgICAweGZmMTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmMjEsIDB4ZmYyMiwgMHhmZjIzLCAweGZmMjQsIDB4ZmYyNSwg MHhmZjI2LCAweGZmMjcsIDB4ZmYyOCwKKyAgICAweGZmMjksIDB4ZmYyYSwgMHhmZjJiLCAweGZm MmMsIDB4ZmYyZCwgMHhmZjJlLCAweGZmMmYsIDB4ZmYzMCwKKyAgICAweGZmMzEsIDB4ZmYzMiwg MHhmZjMzLCAweGZmMzQsIDB4ZmYzNSwgMHhmZjM2LCAweGZmMzcsIDB4ZmYzOCwKKyAgICAweGZm MzksIDB4ZmYzYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmY0MSwgMHhmZjQyLCAweGZmNDMsIDB4ZmY0NCwgMHhmZjQ1LCAw eGZmNDYsIDB4ZmY0NywKKyAgICAweGZmNDgsIDB4ZmY0OSwgMHhmZjRhLCAweGZmNGIsIDB4ZmY0 YywgMHhmZjRkLCAweGZmNGUsIDB4ZmY0ZiwKKyAgICAweGZmNTAsIDB4ZmY1MSwgMHhmZjUyLCAw eGZmNTMsIDB4ZmY1NCwgMHhmZjU1LCAweGZmNTYsIDB4ZmY1NywKKyAgICAweGZmNTgsIDB4ZmY1 OSwgMHhmZjVhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MzA0MSwKKyAgICAw eDMwNDIsIDB4MzA0MywgMHgzMDQ0LCAweDMwNDUsIDB4MzA0NiwgMHgzMDQ3LCAweDMwNDgsIDB4 MzA0OSwKKyAgICAweDMwNGEsIDB4MzA0YiwgMHgzMDRjLCAweDMwNGQsIDB4MzA0ZSwgMHgzMDRm LCAweDMwNTAsIDB4MzA1MSwKKyAgICAweDMwNTIsIDB4MzA1MywgMHgzMDU0LCAweDMwNTUsIDB4 MzA1NiwgMHgzMDU3LCAweDMwNTgsIDB4MzA1OSwKKyAgICAweDMwNWEsIDB4MzA1YiwgMHgzMDVj LCAweDMwNWQsIDB4MzA1ZSwgMHgzMDVmLCAweDMwNjAsIDB4MzA2MSwKKyAgICAweDMwNjIsIDB4 MzA2MywgMHgzMDY0LCAweDMwNjUsIDB4MzA2NiwgMHgzMDY3LCAweDMwNjgsIDB4MzA2OSwKKyAg ICAweDMwNmEsIDB4MzA2YiwgMHgzMDZjLCAweDMwNmQsIDB4MzA2ZSwgMHgzMDZmLCAweDMwNzAs IDB4MzA3MSwKKyAgICAweDMwNzIsIDB4MzA3MywgMHgzMDc0LCAweDMwNzUsIDB4MzA3NiwgMHgz MDc3LCAweDMwNzgsIDB4MzA3OSwKKyAgICAweDMwN2EsIDB4MzA3YiwgMHgzMDdjLCAweDMwN2Qs IDB4MzA3ZSwgMHgzMDdmLCAweDMwODAsIDB4MzA4MSwKKyAgICAweDMwODIsIDB4MzA4MywgMHgz MDg0LCAweDMwODUsIDB4MzA4NiwgMHgzMDg3LCAweDMwODgsIDB4MzA4OSwKKyAgICAweDMwOGEs IDB4MzA4YiwgMHgzMDhjLCAweDMwOGQsIDB4MzA4ZSwgMHgzMDhmLCAweDMwOTAsIDB4MzA5MSwK KyAgICAweDMwOTIsIDB4MzA5MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDMwYTEsIDB4MzBhMiwgMHgzMGEzLCAweDMwYTQsIDB4MzBhNSwgMHgzMGE2 LCAweDMwYTcsIDB4MzBhOCwKKyAgICAweDMwYTksIDB4MzBhYSwgMHgzMGFiLCAweDMwYWMsIDB4 MzBhZCwgMHgzMGFlLCAweDMwYWYsIDB4MzBiMCwKKyAgICAweDMwYjEsIDB4MzBiMiwgMHgzMGIz LCAweDMwYjQsIDB4MzBiNSwgMHgzMGI2LCAweDMwYjcsIDB4MzBiOCwKKyAgICAweDMwYjksIDB4 MzBiYSwgMHgzMGJiLCAweDMwYmMsIDB4MzBiZCwgMHgzMGJlLCAweDMwYmYsIDB4MzBjMCwKKyAg ICAweDMwYzEsIDB4MzBjMiwgMHgzMGMzLCAweDMwYzQsIDB4MzBjNSwgMHgzMGM2LCAweDMwYzcs IDB4MzBjOCwKKyAgICAweDMwYzksIDB4MzBjYSwgMHgzMGNiLCAweDMwY2MsIDB4MzBjZCwgMHgz MGNlLCAweDMwY2YsIDB4MzBkMCwKKyAgICAweDMwZDEsIDB4MzBkMiwgMHgzMGQzLCAweDMwZDQs IDB4MzBkNSwgMHgzMGQ2LCAweDMwZDcsIDB4MzBkOCwKKyAgICAweDMwZDksIDB4MzBkYSwgMHgz MGRiLCAweDMwZGMsIDB4MzBkZCwgMHgzMGRlLCAweDMwZGYsIDB4ZmZmZCwKKyAgICAweDMwZTAs IDB4MzBlMSwgMHgzMGUyLCAweDMwZTMsIDB4MzBlNCwgMHgzMGU1LCAweDMwZTYsIDB4MzBlNywK KyAgICAweDMwZTgsIDB4MzBlOSwgMHgzMGVhLCAweDMwZWIsIDB4MzBlYywgMHgzMGVkLCAweDMw ZWUsIDB4MzBlZiwKKyAgICAweDMwZjAsIDB4MzBmMSwgMHgzMGYyLCAweDMwZjMsIDB4MzBmNCwg MHgzMGY1LCAweDMwZjYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MDM5MSwKKyAgICAweDAzOTIsIDB4MDM5Mywg MHgwMzk0LCAweDAzOTUsIDB4MDM5NiwgMHgwMzk3LCAweDAzOTgsIDB4MDM5OSwKKyAgICAweDAz OWEsIDB4MDM5YiwgMHgwMzljLCAweDAzOWQsIDB4MDM5ZSwgMHgwMzlmLCAweDAzYTAsIDB4MDNh MSwKKyAgICAweDAzYTMsIDB4MDNhNCwgMHgwM2E1LCAweDAzYTYsIDB4MDNhNywgMHgwM2E4LCAw eDAzYTksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4MDNiMSwKKyAgICAweDAzYjIsIDB4MDNiMywgMHgwM2I0LCAw eDAzYjUsIDB4MDNiNiwgMHgwM2I3LCAweDAzYjgsIDB4MDNiOSwKKyAgICAweDAzYmEsIDB4MDNi YiwgMHgwM2JjLCAweDAzYmQsIDB4MDNiZSwgMHgwM2JmLCAweDAzYzAsIDB4MDNjMSwKKyAgICAw eDAzYzMsIDB4MDNjNCwgMHgwM2M1LCAweDAzYzYsIDB4MDNjNywgMHgwM2M4LCAweDAzYzksIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDA0 MTAsIDB4MDQxMSwgMHgwNDEyLCAweDA0MTMsIDB4MDQxNCwgMHgwNDE1LCAweDA0MDEsIDB4MDQx NiwKKyAgICAweDA0MTcsIDB4MDQxOCwgMHgwNDE5LCAweDA0MWEsIDB4MDQxYiwgMHgwNDFjLCAw eDA0MWQsIDB4MDQxZSwKKyAgICAweDA0MWYsIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4MDQy MywgMHgwNDI0LCAweDA0MjUsIDB4MDQyNiwKKyAgICAweDA0MjcsIDB4MDQyOCwgMHgwNDI5LCAw eDA0MmEsIDB4MDQyYiwgMHgwNDJjLCAweDA0MmQsIDB4MDQyZSwKKyAgICAweDA0MmYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDA0MzAsIDB4MDQzMSwgMHgwNDMyLCAweDA0MzMsIDB4MDQzNCwgMHgwNDM1 LCAweDA0NTEsIDB4MDQzNiwKKyAgICAweDA0MzcsIDB4MDQzOCwgMHgwNDM5LCAweDA0M2EsIDB4 MDQzYiwgMHgwNDNjLCAweDA0M2QsIDB4ZmZmZCwKKyAgICAweDA0M2UsIDB4MDQzZiwgMHgwNDQw LCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwKKyAgICAweDA0NDYsIDB4 MDQ0NywgMHgwNDQ4LCAweDA0NDksIDB4MDQ0YSwgMHgwNDRiLCAweDA0NGMsIDB4MDQ0ZCwKKyAg ICAweDA0NGUsIDB4MDQ0ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4MjUwMCwKKyAgICAweDI1MDIsIDB4MjUwYywgMHgyNTEwLCAweDI1MTgs IDB4MjUxNCwgMHgyNTFjLCAweDI1MmMsIDB4MjUyNCwKKyAgICAweDI1MzQsIDB4MjUzYywgMHgy NTAxLCAweDI1MDMsIDB4MjUwZiwgMHgyNTEzLCAweDI1MWIsIDB4MjUxNywKKyAgICAweDI1MjMs IDB4MjUzMywgMHgyNTJiLCAweDI1M2IsIDB4MjU0YiwgMHgyNTIwLCAweDI1MmYsIDB4MjUyOCwK KyAgICAweDI1MzcsIDB4MjUzZiwgMHgyNTFkLCAweDI1MzAsIDB4MjUyNSwgMHgyNTM4LCAweDI1 NDIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4NGU5YywKKyAgICAweDU1MTYsIDB4NWEwMywgMHg5NjNmLCAweDU0YzAsIDB4 NjExYiwgMHg2MzI4LCAweDU5ZjYsIDB4OTAyMiwKKyAgICAweDg0NzUsIDB4ODMxYywgMHg3YTUw LCAweDYwYWEsIDB4NjNlMSwgMHg2ZTI1LCAweDY1ZWQsIDB4ODQ2NiwKKyAgICAweDgyYTYsIDB4 OWJmNSwgMHg2ODkzLCAweDU3MjcsIDB4NjVhMSwgMHg2MjcxLCAweDViOWIsIDB4NTlkMCwKKyAg ICAweDg2N2IsIDB4OThmNCwgMHg3ZDYyLCAweDdkYmUsIDB4OWI4ZSwgMHg2MjE2LCAweDdjOWYs IDB4ODhiNywKKyAgICAweDViODksIDB4NWViNSwgMHg2MzA5LCAweDY2OTcsIDB4Njg0OCwgMHg5 NWM3LCAweDk3OGQsIDB4Njc0ZiwKKyAgICAweDRlZTUsIDB4NGYwYSwgMHg0ZjRkLCAweDRmOWQs IDB4NTA0OSwgMHg1NmYyLCAweDU5MzcsIDB4NTlkNCwKKyAgICAweDVhMDEsIDB4NWMwOSwgMHg2 MGRmLCAweDYxMGYsIDB4NjE3MCwgMHg2NjEzLCAweDY5MDUsIDB4NzBiYSwKKyAgICAweDc1NGYs IDB4NzU3MCwgMHg3OWZiLCAweDdkYWQsIDB4N2RlZiwgMHg4MGMzLCAweDg0MGUsIDB4ODg2MywK KyAgICAweDhiMDIsIDB4OTA1NSwgMHg5MDdhLCAweDUzM2IsIDB4NGU5NSwgMHg0ZWE1LCAweDU3 ZGYsIDB4ODBiMiwKKyAgICAweDkwYzEsIDB4NzhlZiwgMHg0ZTAwLCAweDU4ZjEsIDB4NmVhMiwg MHg5MDM4LCAweDdhMzIsIDB4ODMyOCwKKyAgICAweDgyOGIsIDB4OWMyZiwgMHg1MTQxLCAweDUz NzAsIDB4NTRiZCwgMHg1NGUxLCAweDU2ZTAsIDB4NTlmYiwKKyAgICAweDVmMTUsIDB4OThmMiwg MHg2ZGViLCAweDgwZTQsIDB4ODUyZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk2NjIsIDB4OTY3MCwgMHg5NmEw LCAweDk3ZmIsIDB4NTQwYiwgMHg1M2YzLCAweDViODcsIDB4NzBjZiwKKyAgICAweDdmYmQsIDB4 OGZjMiwgMHg5NmU4LCAweDUzNmYsIDB4OWQ1YywgMHg3YWJhLCAweDRlMTEsIDB4Nzg5MywKKyAg ICAweDgxZmMsIDB4NmUyNiwgMHg1NjE4LCAweDU1MDQsIDB4NmIxZCwgMHg4NTFhLCAweDljM2Is IDB4NTllNSwKKyAgICAweDUzYTksIDB4NmQ2NiwgMHg3NGRjLCAweDk1OGYsIDB4NTY0MiwgMHg0 ZTkxLCAweDkwNGIsIDB4OTZmMiwKKyAgICAweDgzNGYsIDB4OTkwYywgMHg1M2UxLCAweDU1YjYs IDB4NWIzMCwgMHg1ZjcxLCAweDY2MjAsIDB4NjZmMywKKyAgICAweDY4MDQsIDB4NmMzOCwgMHg2 Y2YzLCAweDZkMjksIDB4NzQ1YiwgMHg3NmM4LCAweDdhNGUsIDB4OTgzNCwKKyAgICAweDgyZjEs IDB4ODg1YiwgMHg4YTYwLCAweDkyZWQsIDB4NmRiMiwgMHg3NWFiLCAweDc2Y2EsIDB4OTljNSwK KyAgICAweDYwYTYsIDB4OGIwMSwgMHg4ZDhhLCAweDk1YjIsIDB4Njk4ZSwgMHg1M2FkLCAweDUx ODYsIDB4ZmZmZCwKKyAgICAweDU3MTIsIDB4NTgzMCwgMHg1OTQ0LCAweDViYjQsIDB4NWVmNiwg MHg2MDI4LCAweDYzYTksIDB4NjNmNCwKKyAgICAweDZjYmYsIDB4NmYxNCwgMHg3MDhlLCAweDcx MTQsIDB4NzE1OSwgMHg3MWQ1LCAweDczM2YsIDB4N2UwMSwKKyAgICAweDgyNzYsIDB4ODJkMSwg MHg4NTk3LCAweDkwNjAsIDB4OTI1YiwgMHg5ZDFiLCAweDU4NjksIDB4NjViYywKKyAgICAweDZj NWEsIDB4NzUyNSwgMHg1MWY5LCAweDU5MmUsIDB4NTk2NSwgMHg1ZjgwLCAweDVmZGMsIDB4NjJi YywKKyAgICAweDY1ZmEsIDB4NmEyYSwgMHg2YjI3LCAweDZiYjQsIDB4NzM4YiwgMHg3ZmMxLCAw eDg5NTYsIDB4OWQyYywKKyAgICAweDlkMGUsIDB4OWVjNCwgMHg1Y2ExLCAweDZjOTYsIDB4ODM3 YiwgMHg1MTA0LCAweDVjNGIsIDB4NjFiNiwKKyAgICAweDgxYzYsIDB4Njg3NiwgMHg3MjYxLCAw eDRlNTksIDB4NGZmYSwgMHg1Mzc4LCAweDYwNjksIDB4NmUyOSwKKyAgICAweDdhNGYsIDB4OTdm MywgMHg0ZTBiLCAweDUzMTYsIDB4NGVlZSwgMHg0ZjU1LCAweDRmM2QsIDB4NGZhMSwKKyAgICAw eDRmNzMsIDB4NTJhMCwgMHg1M2VmLCAweDU2MDksIDB4NTkwZiwgMHg1YWMxLCAweDViYjYsIDB4 NWJlMSwKKyAgICAweDc5ZDEsIDB4NjY4NywgMHg2NzljLCAweDY3YjYsIDB4NmI0YywgMHg2Y2Iz LCAweDcwNmIsIDB4NzNjMiwKKyAgICAweDc5OGQsIDB4NzliZSwgMHg3YTNjLCAweDdiODcsIDB4 ODJiMSwgMHg4MmRiLCAweDgzMDQsIDB4ODM3NywKKyAgICAweDgzZWYsIDB4ODNkMywgMHg4NzY2 LCAweDhhYjIsIDB4NTYyOSwgMHg4Y2E4LCAweDhmZTYsIDB4OTA0ZSwKKyAgICAweDk3MWUsIDB4 ODY4YSwgMHg0ZmM0LCAweDVjZTgsIDB4NjIxMSwgMHg3MjU5LCAweDc1M2IsIDB4ODFlNSwKKyAg ICAweDgyYmQsIDB4ODZmZSwgMHg4Y2MwLCAweDk2YzUsIDB4OTkxMywgMHg5OWQ1LCAweDRlY2Is IDB4NGYxYSwKKyAgICAweDg5ZTMsIDB4NTZkZSwgMHg1ODRhLCAweDU4Y2EsIDB4NWVmYiwgMHg1 ZmViLCAweDYwMmEsIDB4NjA5NCwKKyAgICAweDYwNjIsIDB4NjFkMCwgMHg2MjEyLCAweDYyZDAs IDB4NjUzOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDliNDEsIDB4NjY2NiwgMHg2OGIwLCAweDZkNzcsIDB4NzA3 MCwgMHg3NTRjLCAweDc2ODYsIDB4N2Q3NSwKKyAgICAweDgyYTUsIDB4ODdmOSwgMHg5NThiLCAw eDk2OGUsIDB4OGM5ZCwgMHg1MWYxLCAweDUyYmUsIDB4NTkxNiwKKyAgICAweDU0YjMsIDB4NWJi MywgMHg1ZDE2LCAweDYxNjgsIDB4Njk4MiwgMHg2ZGFmLCAweDc4OGQsIDB4ODRjYiwKKyAgICAw eDg4NTcsIDB4OGE3MiwgMHg5M2E3LCAweDlhYjgsIDB4NmQ2YywgMHg5OWE4LCAweDg2ZDksIDB4 NTdhMywKKyAgICAweDY3ZmYsIDB4ODZjZSwgMHg5MjBlLCAweDUyODMsIDB4NTY4NywgMHg1NDA0 LCAweDVlZDMsIDB4NjJlMSwKKyAgICAweDY0YjksIDB4NjgzYywgMHg2ODM4LCAweDZiYmIsIDB4 NzM3MiwgMHg3OGJhLCAweDdhNmIsIDB4ODk5YSwKKyAgICAweDg5ZDIsIDB4OGQ2YiwgMHg4ZjAz LCAweDkwZWQsIDB4OTVhMywgMHg5Njk0LCAweDk3NjksIDB4NWI2NiwKKyAgICAweDVjYjMsIDB4 Njk3ZCwgMHg5ODRkLCAweDk4NGUsIDB4NjM5YiwgMHg3YjIwLCAweDZhMmIsIDB4ZmZmZCwKKyAg ICAweDZhN2YsIDB4NjhiNiwgMHg5YzBkLCAweDZmNWYsIDB4NTI3MiwgMHg1NTlkLCAweDYwNzAs IDB4NjJlYywKKyAgICAweDZkM2IsIDB4NmUwNywgMHg2ZWQxLCAweDg0NWIsIDB4ODkxMCwgMHg4 ZjQ0LCAweDRlMTQsIDB4OWMzOSwKKyAgICAweDUzZjYsIDB4NjkxYiwgMHg2YTNhLCAweDk3ODQs IDB4NjgyYSwgMHg1MTVjLCAweDdhYzMsIDB4ODRiMiwKKyAgICAweDkxZGMsIDB4OTM4YywgMHg1 NjViLCAweDlkMjgsIDB4NjgyMiwgMHg4MzA1LCAweDg0MzEsIDB4N2NhNSwKKyAgICAweDUyMDgs IDB4ODJjNSwgMHg3NGU2LCAweDRlN2UsIDB4NGY4MywgMHg1MWEwLCAweDViZDIsIDB4NTIwYSwK KyAgICAweDUyZDgsIDB4NTJlNywgMHg1ZGZiLCAweDU1OWEsIDB4NTgyYSwgMHg1OWU2LCAweDVi OGMsIDB4NWI5OCwKKyAgICAweDViZGIsIDB4NWU3MiwgMHg1ZTc5LCAweDYwYTMsIDB4NjExZiwg MHg2MTYzLCAweDYxYmUsIDB4NjNkYiwKKyAgICAweDY1NjIsIDB4NjdkMSwgMHg2ODUzLCAweDY4 ZmEsIDB4NmIzZSwgMHg2YjUzLCAweDZjNTcsIDB4NmYyMiwKKyAgICAweDZmOTcsIDB4NmY0NSwg MHg3NGIwLCAweDc1MTgsIDB4NzZlMywgMHg3NzBiLCAweDdhZmYsIDB4N2JhMSwKKyAgICAweDdj MjEsIDB4N2RlOSwgMHg3ZjM2LCAweDdmZjAsIDB4ODA5ZCwgMHg4MjY2LCAweDgzOWUsIDB4ODli MywKKyAgICAweDhhY2MsIDB4OGNhYiwgMHg5MDg0LCAweDk0NTEsIDB4OTU5MywgMHg5NTkxLCAw eDk1YTIsIDB4OTY2NSwKKyAgICAweDk3ZDMsIDB4OTkyOCwgMHg4MjE4LCAweDRlMzgsIDB4NTQy YiwgMHg1Y2I4LCAweDVkY2MsIDB4NzNhOSwKKyAgICAweDc2NGMsIDB4NzczYywgMHg1Y2E5LCAw eDdmZWIsIDB4OGQwYiwgMHg5NmMxLCAweDk4MTEsIDB4OTg1NCwKKyAgICAweDk4NTgsIDB4NGYw MSwgMHg0ZjBlLCAweDUzNzEsIDB4NTU5YywgMHg1NjY4LCAweDU3ZmEsIDB4NTk0NywKKyAgICAw eDViMDksIDB4NWJjNCwgMHg1YzkwLCAweDVlMGMsIDB4NWU3ZSwgMHg1ZmNjLCAweDYzZWUsIDB4 NjczYSwKKyAgICAweDY1ZDcsIDB4NjVlMiwgMHg2NzFmLCAweDY4Y2IsIDB4NjhjNCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDZhNWYsIDB4NWUzMCwgMHg2YmM1LCAweDZjMTcsIDB4NmM3ZCwgMHg3NTdmLCAweDc5 NDgsIDB4NWI2MywKKyAgICAweDdhMDAsIDB4N2QwMCwgMHg1ZmJkLCAweDg5OGYsIDB4OGExOCwg MHg4Y2I0LCAweDhkNzcsIDB4OGVjYywKKyAgICAweDhmMWQsIDB4OThlMiwgMHg5YTBlLCAweDli M2MsIDB4NGU4MCwgMHg1MDdkLCAweDUxMDAsIDB4NTk5MywKKyAgICAweDViOWMsIDB4NjIyZiwg MHg2MjgwLCAweDY0ZWMsIDB4NmIzYSwgMHg3MmEwLCAweDc1OTEsIDB4Nzk0NywKKyAgICAweDdm YTksIDB4ODdmYiwgMHg4YWJjLCAweDhiNzAsIDB4NjNhYywgMHg4M2NhLCAweDk3YTAsIDB4NTQw OSwKKyAgICAweDU0MDMsIDB4NTVhYiwgMHg2ODU0LCAweDZhNTgsIDB4OGE3MCwgMHg3ODI3LCAw eDY3NzUsIDB4OWVjZCwKKyAgICAweDUzNzQsIDB4NWJhMiwgMHg4MTFhLCAweDg2NTAsIDB4OTAw NiwgMHg0ZTE4LCAweDRlNDUsIDB4NGVjNywKKyAgICAweDRmMTEsIDB4NTNjYSwgMHg1NDM4LCAw eDViYWUsIDB4NWYxMywgMHg2MDI1LCAweDY1NTEsIDB4ZmZmZCwKKyAgICAweDY3M2QsIDB4NmM0 MiwgMHg2YzcyLCAweDZjZTMsIDB4NzA3OCwgMHg3NDAzLCAweDdhNzYsIDB4N2FhZSwKKyAgICAw eDdiMDgsIDB4N2QxYSwgMHg3Y2ZlLCAweDdkNjYsIDB4NjVlNywgMHg3MjViLCAweDUzYmIsIDB4 NWM0NSwKKyAgICAweDVkZTgsIDB4NjJkMiwgMHg2MmUwLCAweDYzMTksIDB4NmUyMCwgMHg4NjVh LCAweDhhMzEsIDB4OGRkZCwKKyAgICAweDkyZjgsIDB4NmYwMSwgMHg3OWE2LCAweDliNWEsIDB4 NGVhOCwgMHg0ZWFiLCAweDRlYWMsIDB4NGY5YiwKKyAgICAweDRmYTAsIDB4NTBkMSwgMHg1MTQ3 LCAweDdhZjYsIDB4NTE3MSwgMHg1MWY2LCAweDUzNTQsIDB4NTMyMSwKKyAgICAweDUzN2YsIDB4 NTNlYiwgMHg1NWFjLCAweDU4ODMsIDB4NWNlMSwgMHg1ZjM3LCAweDVmNGEsIDB4NjAyZiwKKyAg ICAweDYwNTAsIDB4NjA2ZCwgMHg2MzFmLCAweDY1NTksIDB4NmE0YiwgMHg2Y2MxLCAweDcyYzIs IDB4NzJlZCwKKyAgICAweDc3ZWYsIDB4ODBmOCwgMHg4MTA1LCAweDgyMDgsIDB4ODU0ZSwgMHg5 MGY3LCAweDkzZTEsIDB4OTdmZiwKKyAgICAweDk5NTcsIDB4OWE1YSwgMHg0ZWYwLCAweDUxZGQs IDB4NWMyZCwgMHg2NjgxLCAweDY5NmQsIDB4NWM0MCwKKyAgICAweDY2ZjIsIDB4Njk3NSwgMHg3 Mzg5LCAweDY4NTAsIDB4N2M4MSwgMHg1MGM1LCAweDUyZTQsIDB4NTc0NywKKyAgICAweDVkZmUs IDB4OTMyNiwgMHg2NWE0LCAweDZiMjMsIDB4NmIzZCwgMHg3NDM0LCAweDc5ODEsIDB4NzliZCwK KyAgICAweDdiNGIsIDB4N2RjYSwgMHg4MmI5LCAweDgzY2MsIDB4ODg3ZiwgMHg4OTVmLCAweDhi MzksIDB4OGZkMSwKKyAgICAweDkxZDEsIDB4NTQxZiwgMHg5MjgwLCAweDRlNWQsIDB4NTAzNiwg MHg1M2U1LCAweDUzM2EsIDB4NzJkNywKKyAgICAweDczOTYsIDB4NzdlOSwgMHg4MmU2LCAweDhl YWYsIDB4OTljNiwgMHg5OWM4LCAweDk5ZDIsIDB4NTE3NywKKyAgICAweDYxMWEsIDB4ODY1ZSwg MHg1NWIwLCAweDdhN2EsIDB4NTA3NiwgMHg1YmQzLCAweDkwNDcsIDB4OTY4NSwKKyAgICAweDRl MzIsIDB4NmFkYiwgMHg5MWU3LCAweDVjNTEsIDB4NWM0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDYzOTgsIDB4 N2E5ZiwgMHg2YzkzLCAweDk3NzQsIDB4OGY2MSwgMHg3YWFhLCAweDcxOGEsIDB4OTY4OCwKKyAg ICAweDdjODIsIDB4NjgxNywgMHg3ZTcwLCAweDY4NTEsIDB4OTM2YywgMHg1MmYyLCAweDU0MWIs IDB4ODVhYiwKKyAgICAweDhhMTMsIDB4N2ZhNCwgMHg4ZWNkLCAweDkwZTEsIDB4NTM2NiwgMHg4 ODg4LCAweDc5NDEsIDB4NGZjMiwKKyAgICAweDUwYmUsIDB4NTIxMSwgMHg1MTQ0LCAweDU1NTMs IDB4NTcyZCwgMHg3M2VhLCAweDU3OGIsIDB4NTk1MSwKKyAgICAweDVmNjIsIDB4NWY4NCwgMHg2 MDc1LCAweDYxNzYsIDB4NjE2NywgMHg2MWE5LCAweDYzYjIsIDB4NjQzYSwKKyAgICAweDY1NmMs IDB4NjY2ZiwgMHg2ODQyLCAweDZlMTMsIDB4NzU2NiwgMHg3YTNkLCAweDdjZmIsIDB4N2Q0YywK KyAgICAweDdkOTksIDB4N2U0YiwgMHg3ZjZiLCAweDgzMGUsIDB4ODM0YSwgMHg4NmNkLCAweDhh MDgsIDB4OGE2MywKKyAgICAweDhiNjYsIDB4OGVmZCwgMHg5ODFhLCAweDlkOGYsIDB4ODJiOCwg MHg4ZmNlLCAweDliZTgsIDB4ZmZmZCwKKyAgICAweDUyODcsIDB4NjIxZiwgMHg2NDgzLCAweDZm YzAsIDB4OTY5OSwgMHg2ODQxLCAweDUwOTEsIDB4NmIyMCwKKyAgICAweDZjN2EsIDB4NmY1NCwg MHg3YTc0LCAweDdkNTAsIDB4ODg0MCwgMHg4YTIzLCAweDY3MDgsIDB4NGVmNiwKKyAgICAweDUw MzksIDB4NTAyNiwgMHg1MDY1LCAweDUxN2MsIDB4NTIzOCwgMHg1MjYzLCAweDU1YTcsIDB4NTcw ZiwKKyAgICAweDU4MDUsIDB4NWFjYywgMHg1ZWZhLCAweDYxYjIsIDB4NjFmOCwgMHg2MmYzLCAw eDYzNzIsIDB4NjkxYywKKyAgICAweDZhMjksIDB4NzI3ZCwgMHg3MmFjLCAweDczMmUsIDB4Nzgx NCwgMHg3ODZmLCAweDdkNzksIDB4NzcwYywKKyAgICAweDgwYTksIDB4ODk4YiwgMHg4YjE5LCAw eDhjZTIsIDB4OGVkMiwgMHg5MDYzLCAweDkzNzUsIDB4OTY3YSwKKyAgICAweDk4NTUsIDB4OWEx MywgMHg5ZTc4LCAweDUxNDMsIDB4NTM5ZiwgMHg1M2IzLCAweDVlN2IsIDB4NWYyNiwKKyAgICAw eDZlMWIsIDB4NmU5MCwgMHg3Mzg0LCAweDczZmUsIDB4N2Q0MywgMHg4MjM3LCAweDhhMDAsIDB4 OGFmYSwKKyAgICAweDk2NTAsIDB4NGU0ZSwgMHg1MDBiLCAweDUzZTQsIDB4NTQ3YywgMHg1NmZh LCAweDU5ZDEsIDB4NWI2NCwKKyAgICAweDVkZjEsIDB4NWVhYiwgMHg1ZjI3LCAweDYyMzgsIDB4 NjU0NSwgMHg2N2FmLCAweDZlNTYsIDB4NzJkMCwKKyAgICAweDdjY2EsIDB4ODhiNCwgMHg4MGEx LCAweDgwZTEsIDB4ODNmMCwgMHg4NjRlLCAweDhhODcsIDB4OGRlOCwKKyAgICAweDkyMzcsIDB4 OTZjNywgMHg5ODY3LCAweDlmMTMsIDB4NGU5NCwgMHg0ZTkyLCAweDRmMGQsIDB4NTM0OCwKKyAg ICAweDU0NDksIDB4NTQzZSwgMHg1YTJmLCAweDVmOGMsIDB4NWZhMSwgMHg2MDlmLCAweDY4YTcs IDB4NmE4ZSwKKyAgICAweDc0NWEsIDB4Nzg4MSwgMHg4YTllLCAweDhhYTQsIDB4OGI3NywgMHg5 MTkwLCAweDRlNWUsIDB4OWJjOSwKKyAgICAweDRlYTQsIDB4NGY3YywgMHg0ZmFmLCAweDUwMTks IDB4NTAxNiwgMHg1MTQ5LCAweDUxNmMsIDB4NTI5ZiwKKyAgICAweDUyYjksIDB4NTJmZSwgMHg1 MzlhLCAweDUzZTMsIDB4NTQxMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDU0MGUsIDB4NTU4OSwgMHg1NzUxLCAw eDU3YTIsIDB4NTk3ZCwgMHg1YjU0LCAweDViNWQsIDB4NWI4ZiwKKyAgICAweDVkZTUsIDB4NWRl NywgMHg1ZGY3LCAweDVlNzgsIDB4NWU4MywgMHg1ZTlhLCAweDVlYjcsIDB4NWYxOCwKKyAgICAw eDYwNTIsIDB4NjE0YywgMHg2Mjk3LCAweDYyZDgsIDB4NjNhNywgMHg2NTNiLCAweDY2MDIsIDB4 NjY0MywKKyAgICAweDY2ZjQsIDB4Njc2ZCwgMHg2ODIxLCAweDY4OTcsIDB4NjljYiwgMHg2YzVm LCAweDZkMmEsIDB4NmQ2OSwKKyAgICAweDZlMmYsIDB4NmU5ZCwgMHg3NTMyLCAweDc2ODcsIDB4 Nzg2YywgMHg3YTNmLCAweDdjZTAsIDB4N2QwNSwKKyAgICAweDdkMTgsIDB4N2Q1ZSwgMHg3ZGIx LCAweDgwMTUsIDB4ODAwMywgMHg4MGFmLCAweDgwYjEsIDB4ODE1NCwKKyAgICAweDgxOGYsIDB4 ODIyYSwgMHg4MzUyLCAweDg4NGMsIDB4ODg2MSwgMHg4YjFiLCAweDhjYTIsIDB4OGNmYywKKyAg ICAweDkwY2EsIDB4OTE3NSwgMHg5MjcxLCAweDc4M2YsIDB4OTJmYywgMHg5NWE0LCAweDk2NGQs IDB4ZmZmZCwKKyAgICAweDk4MDUsIDB4OTk5OSwgMHg5YWQ4LCAweDlkM2IsIDB4NTI1YiwgMHg1 MmFiLCAweDUzZjcsIDB4NTQwOCwKKyAgICAweDU4ZDUsIDB4NjJmNywgMHg2ZmUwLCAweDhjNmEs IDB4OGY1ZiwgMHg5ZWI5LCAweDUxNGIsIDB4NTIzYiwKKyAgICAweDU0NGEsIDB4NTZmZCwgMHg3 YTQwLCAweDkxNzcsIDB4OWQ2MCwgMHg5ZWQyLCAweDczNDQsIDB4NmYwOSwKKyAgICAweDgxNzAs IDB4NzUxMSwgMHg1ZmZkLCAweDYwZGEsIDB4OWFhOCwgMHg3MmRiLCAweDhmYmMsIDB4NmI2NCwK KyAgICAweDk4MDMsIDB4NGVjYSwgMHg1NmYwLCAweDU3NjQsIDB4NThiZSwgMHg1YTVhLCAweDYw NjgsIDB4NjFjNywKKyAgICAweDY2MGYsIDB4NjYwNiwgMHg2ODM5LCAweDY4YjEsIDB4NmRmNywg MHg3NWQ1LCAweDdkM2EsIDB4ODI2ZSwKKyAgICAweDliNDIsIDB4NGU5YiwgMHg0ZjUwLCAweDUz YzksIDB4NTUwNiwgMHg1ZDZmLCAweDVkZTYsIDB4NWRlZSwKKyAgICAweDY3ZmIsIDB4NmM5OSwg MHg3NDczLCAweDc4MDIsIDB4OGE1MCwgMHg5Mzk2LCAweDg4ZGYsIDB4NTc1MCwKKyAgICAweDVl YTcsIDB4NjMyYiwgMHg1MGI1LCAweDUwYWMsIDB4NTE4ZCwgMHg2NzAwLCAweDU0YzksIDB4NTg1 ZSwKKyAgICAweDU5YmIsIDB4NWJiMCwgMHg1ZjY5LCAweDYyNGQsIDB4NjNhMSwgMHg2ODNkLCAw eDZiNzMsIDB4NmUwOCwKKyAgICAweDcwN2QsIDB4OTFjNywgMHg3MjgwLCAweDc4MTUsIDB4Nzgy NiwgMHg3OTZkLCAweDY1OGUsIDB4N2QzMCwKKyAgICAweDgzZGMsIDB4ODhjMSwgMHg4ZjA5LCAw eDk2OWIsIDB4NTI2NCwgMHg1NzI4LCAweDY3NTAsIDB4N2Y2YSwKKyAgICAweDhjYTEsIDB4NTFi NCwgMHg1NzQyLCAweDk2MmEsIDB4NTgzYSwgMHg2OThhLCAweDgwYjQsIDB4NTRiMiwKKyAgICAw eDVkMGUsIDB4NTdmYywgMHg3ODk1LCAweDlkZmEsIDB4NGY1YywgMHg1MjRhLCAweDU0OGIsIDB4 NjQzZSwKKyAgICAweDY2MjgsIDB4NjcxNCwgMHg2N2Y1LCAweDdhODQsIDB4N2I1NiwgMHg3ZDIy LCAweDkzMmYsIDB4Njg1YywKKyAgICAweDliYWQsIDB4N2IzOSwgMHg1MzE5LCAweDUxOGEsIDB4 NTIzNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDViZGYsIDB4NjJmNiwgMHg2NGFlLCAweDY0ZTYsIDB4NjcyZCwg MHg2YmJhLCAweDg1YTksIDB4OTZkMSwKKyAgICAweDc2OTAsIDB4OWJkNiwgMHg2MzRjLCAweDkz MDYsIDB4OWJhYiwgMHg3NmJmLCAweDY2NTIsIDB4NGUwOSwKKyAgICAweDUwOTgsIDB4NTNjMiwg MHg1YzcxLCAweDYwZTgsIDB4NjQ5MiwgMHg2NTYzLCAweDY4NWYsIDB4NzFlNiwKKyAgICAweDcz Y2EsIDB4NzUyMywgMHg3Yjk3LCAweDdlODIsIDB4ODY5NSwgMHg4YjgzLCAweDhjZGIsIDB4OTE3 OCwKKyAgICAweDk5MTAsIDB4NjVhYywgMHg2NmFiLCAweDZiOGIsIDB4NGVkNSwgMHg0ZWQ0LCAw eDRmM2EsIDB4NGY3ZiwKKyAgICAweDUyM2EsIDB4NTNmOCwgMHg1M2YyLCAweDU1ZTMsIDB4NTZk YiwgMHg1OGViLCAweDU5Y2IsIDB4NTljOSwKKyAgICAweDU5ZmYsIDB4NWI1MCwgMHg1YzRkLCAw eDVlMDIsIDB4NWUyYiwgMHg1ZmQ3LCAweDYwMWQsIDB4NjMwNywKKyAgICAweDY1MmYsIDB4NWI1 YywgMHg2NWFmLCAweDY1YmQsIDB4NjVlOCwgMHg2NzlkLCAweDZiNjIsIDB4ZmZmZCwKKyAgICAw eDZiN2IsIDB4NmMwZiwgMHg3MzQ1LCAweDc5NDksIDB4NzljMSwgMHg3Y2Y4LCAweDdkMTksIDB4 N2QyYiwKKyAgICAweDgwYTIsIDB4ODEwMiwgMHg4MWYzLCAweDg5OTYsIDB4OGE1ZSwgMHg4YTY5 LCAweDhhNjYsIDB4OGE4YywKKyAgICAweDhhZWUsIDB4OGNjNywgMHg4Y2RjLCAweDk2Y2MsIDB4 OThmYywgMHg2YjZmLCAweDRlOGIsIDB4NGYzYywKKyAgICAweDRmOGQsIDB4NTE1MCwgMHg1YjU3 LCAweDViZmEsIDB4NjE0OCwgMHg2MzAxLCAweDY2NDIsIDB4NmIyMSwKKyAgICAweDZlY2IsIDB4 NmNiYiwgMHg3MjNlLCAweDc0YmQsIDB4NzVkNCwgMHg3OGMxLCAweDc5M2EsIDB4ODAwYywKKyAg ICAweDgwMzMsIDB4ODFlYSwgMHg4NDk0LCAweDhmOWUsIDB4NmM1MCwgMHg5ZTdmLCAweDVmMGYs IDB4OGI1OCwKKyAgICAweDlkMmIsIDB4N2FmYSwgMHg4ZWY4LCAweDViOGQsIDB4OTZlYiwgMHg0 ZTAzLCAweDUzZjEsIDB4NTdmNywKKyAgICAweDU5MzEsIDB4NWFjOSwgMHg1YmE0LCAweDYwODks IDB4NmU3ZiwgMHg2ZjA2LCAweDc1YmUsIDB4OGNlYSwKKyAgICAweDViOWYsIDB4ODUwMCwgMHg3 YmUwLCAweDUwNzIsIDB4NjdmNCwgMHg4MjlkLCAweDVjNjEsIDB4ODU0YSwKKyAgICAweDdlMWUs IDB4ODIwZSwgMHg1MTk5LCAweDVjMDQsIDB4NjM2OCwgMHg4ZDY2LCAweDY1OWMsIDB4NzE2ZSwK KyAgICAweDc5M2UsIDB4N2QxNywgMHg4MDA1LCAweDhiMWQsIDB4OGVjYSwgMHg5MDZlLCAweDg2 YzcsIDB4OTBhYSwKKyAgICAweDUwMWYsIDB4NTJmYSwgMHg1YzNhLCAweDY3NTMsIDB4NzA3Yywg MHg3MjM1LCAweDkxNGMsIDB4OTFjOCwKKyAgICAweDkzMmIsIDB4ODJlNSwgMHg1YmMyLCAweDVm MzEsIDB4NjBmOSwgMHg0ZTNiLCAweDUzZDYsIDB4NWI4OCwKKyAgICAweDYyNGIsIDB4NjczMSwg MHg2YjhhLCAweDcyZTksIDB4NzNlMCwgMHg3YTJlLCAweDgxNmIsIDB4OGRhMywKKyAgICAweDkx NTIsIDB4OTk5NiwgMHg1MTEyLCAweDUzZDcsIDB4NTQ2YSwgMHg1YmZmLCAweDYzODgsIDB4NmEz OSwKKyAgICAweDdkYWMsIDB4OTcwMCwgMHg1NmRhLCAweDUzY2UsIDB4NTQ2OCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDViOTcsIDB4NWMzMSwgMHg1ZGRlLCAweDRmZWUsIDB4NjEwMSwgMHg2MmZlLCAweDZkMzIs IDB4NzljMCwKKyAgICAweDc5Y2IsIDB4N2Q0MiwgMHg3ZTRkLCAweDdmZDIsIDB4ODFlZCwgMHg4 MjFmLCAweDg0OTAsIDB4ODg0NiwKKyAgICAweDg5NzIsIDB4OGI5MCwgMHg4ZTc0LCAweDhmMmYs IDB4OTAzMSwgMHg5MTRiLCAweDkxNmMsIDB4OTZjNiwKKyAgICAweDkxOWMsIDB4NGVjMCwgMHg0 ZjRmLCAweDUxNDUsIDB4NTM0MSwgMHg1ZjkzLCAweDYyMGUsIDB4NjdkNCwKKyAgICAweDZjNDEs IDB4NmUwYiwgMHg3MzYzLCAweDdlMjYsIDB4OTFjZCwgMHg5MjgzLCAweDUzZDQsIDB4NTkxOSwK KyAgICAweDViYmYsIDB4NmRkMSwgMHg3OTVkLCAweDdlMmUsIDB4N2M5YiwgMHg1ODdlLCAweDcx OWYsIDB4NTFmYSwKKyAgICAweDg4NTMsIDB4OGZmMCwgMHg0ZmNhLCAweDVjZmIsIDB4NjYyNSwg MHg3N2FjLCAweDdhZTMsIDB4ODIxYywKKyAgICAweDk5ZmYsIDB4NTFjNiwgMHg1ZmFhLCAweDY1 ZWMsIDB4Njk2ZiwgMHg2Yjg5LCAweDZkZjMsIDB4ZmZmZCwKKyAgICAweDZlOTYsIDB4NmY2NCwg MHg3NmZlLCAweDdkMTQsIDB4NWRlMSwgMHg5MDc1LCAweDkxODcsIDB4OTgwNiwKKyAgICAweDUx ZTYsIDB4NTIxZCwgMHg2MjQwLCAweDY2OTEsIDB4NjZkOSwgMHg2ZTFhLCAweDVlYjYsIDB4N2Rk MiwKKyAgICAweDdmNzIsIDB4NjZmOCwgMHg4NWFmLCAweDg1ZjcsIDB4OGFmOCwgMHg1MmE5LCAw eDUzZDksIDB4NTk3MywKKyAgICAweDVlOGYsIDB4NWY5MCwgMHg2MDU1LCAweDkyZTQsIDB4OTY2 NCwgMHg1MGI3LCAweDUxMWYsIDB4NTJkZCwKKyAgICAweDUzMjAsIDB4NTM0NywgMHg1M2VjLCAw eDU0ZTgsIDB4NTU0NiwgMHg1NTMxLCAweDU2MTcsIDB4NTk2OCwKKyAgICAweDU5YmUsIDB4NWEz YywgMHg1YmI1LCAweDVjMDYsIDB4NWMwZiwgMHg1YzExLCAweDVjMWEsIDB4NWU4NCwKKyAgICAw eDVlOGEsIDB4NWVlMCwgMHg1ZjcwLCAweDYyN2YsIDB4NjI4NCwgMHg2MmRiLCAweDYzOGMsIDB4 NjM3NywKKyAgICAweDY2MDcsIDB4NjYwYywgMHg2NjJkLCAweDY2NzYsIDB4Njc3ZSwgMHg2OGEy LCAweDZhMWYsIDB4NmEzNSwKKyAgICAweDZjYmMsIDB4NmQ4OCwgMHg2ZTA5LCAweDZlNTgsIDB4 NzEzYywgMHg3MTI2LCAweDcxNjcsIDB4NzVjNywKKyAgICAweDc3MDEsIDB4Nzg1ZCwgMHg3OTAx LCAweDc5NjUsIDB4NzlmMCwgMHg3YWUwLCAweDdiMTEsIDB4N2NhNywKKyAgICAweDdkMzksIDB4 ODA5NiwgMHg4M2Q2LCAweDg0OGIsIDB4ODU0OSwgMHg4ODVkLCAweDg4ZjMsIDB4OGExZiwKKyAg ICAweDhhM2MsIDB4OGE1NCwgMHg4YTczLCAweDhjNjEsIDB4OGNkZSwgMHg5MWE0LCAweDkyNjYs IDB4OTM3ZSwKKyAgICAweDk0MTgsIDB4OTY5YywgMHg5Nzk4LCAweDRlMGEsIDB4NGUwOCwgMHg0 ZTFlLCAweDRlNTcsIDB4NTE5NywKKyAgICAweDUyNzAsIDB4NTdjZSwgMHg1ODM0LCAweDU4Y2Ms IDB4NWIyMiwgMHg1ZTM4LCAweDYwYzUsIDB4NjRmZSwKKyAgICAweDY3NjEsIDB4Njc1NiwgMHg2 ZDQ0LCAweDcyYjYsIDB4NzU3MywgMHg3YTYzLCAweDg0YjgsIDB4OGI3MiwKKyAgICAweDkxYjgs IDB4OTMyMCwgMHg1NjMxLCAweDU3ZjQsIDB4OThmZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDYyZWQsIDB4Njkw ZCwgMHg2Yjk2LCAweDcxZWQsIDB4N2U1NCwgMHg4MDc3LCAweDgyNzIsIDB4ODllNiwKKyAgICAw eDk4ZGYsIDB4ODc1NSwgMHg4ZmIxLCAweDVjM2IsIDB4NGYzOCwgMHg0ZmUxLCAweDRmYjUsIDB4 NTUwNywKKyAgICAweDVhMjAsIDB4NWJkZCwgMHg1YmU5LCAweDVmYzMsIDB4NjE0ZSwgMHg2MzJm LCAweDY1YjAsIDB4NjY0YiwKKyAgICAweDY4ZWUsIDB4Njk5YiwgMHg2ZDc4LCAweDZkZjEsIDB4 NzUzMywgMHg3NWI5LCAweDc3MWYsIDB4Nzk1ZSwKKyAgICAweDc5ZTYsIDB4N2QzMywgMHg4MWUz LCAweDgyYWYsIDB4ODVhYSwgMHg4OWFhLCAweDhhM2EsIDB4OGVhYiwKKyAgICAweDhmOWIsIDB4 OTAzMiwgMHg5MWRkLCAweDk3MDcsIDB4NGViYSwgMHg0ZWMxLCAweDUyMDMsIDB4NTg3NSwKKyAg ICAweDU4ZWMsIDB4NWMwYiwgMHg3NTFhLCAweDVjM2QsIDB4ODE0ZSwgMHg4YTBhLCAweDhmYzUs IDB4OTY2MywKKyAgICAweDk3NmQsIDB4N2IyNSwgMHg4YWNmLCAweDk4MDgsIDB4OTE2MiwgMHg1 NmYzLCAweDUzYTgsIDB4ZmZmZCwKKyAgICAweDkwMTcsIDB4NTQzOSwgMHg1NzgyLCAweDVlMjUs IDB4NjNhOCwgMHg2YzM0LCAweDcwOGEsIDB4Nzc2MSwKKyAgICAweDdjOGIsIDB4N2ZlMCwgMHg4 ODcwLCAweDkwNDIsIDB4OTE1NCwgMHg5MzEwLCAweDkzMTgsIDB4OTY4ZiwKKyAgICAweDc0NWUs IDB4OWFjNCwgMHg1ZDA3LCAweDVkNjksIDB4NjU3MCwgMHg2N2EyLCAweDhkYTgsIDB4OTZkYiwK KyAgICAweDYzNmUsIDB4Njc0OSwgMHg2OTE5LCAweDgzYzUsIDB4OTgxNywgMHg5NmMwLCAweDg4 ZmUsIDB4NmY4NCwKKyAgICAweDY0N2EsIDB4NWJmOCwgMHg0ZTE2LCAweDcwMmMsIDB4NzU1ZCwg MHg2NjJmLCAweDUxYzQsIDB4NTIzNiwKKyAgICAweDUyZTIsIDB4NTlkMywgMHg1ZjgxLCAweDYw MjcsIDB4NjIxMCwgMHg2NTNmLCAweDY1NzQsIDB4NjYxZiwKKyAgICAweDY2NzQsIDB4NjhmMiwg MHg2ODE2LCAweDZiNjMsIDB4NmUwNSwgMHg3MjcyLCAweDc1MWYsIDB4NzZkYiwKKyAgICAweDdj YmUsIDB4ODA1NiwgMHg1OGYwLCAweDg4ZmQsIDB4ODk3ZiwgMHg4YWEwLCAweDhhOTMsIDB4OGFj YiwKKyAgICAweDkwMWQsIDB4OTE5MiwgMHg5NzUyLCAweDk3NTksIDB4NjU4OSwgMHg3YTBlLCAw eDgxMDYsIDB4OTZiYiwKKyAgICAweDVlMmQsIDB4NjBkYywgMHg2MjFhLCAweDY1YTUsIDB4NjYx NCwgMHg2NzkwLCAweDc3ZjMsIDB4N2E0ZCwKKyAgICAweDdjNGQsIDB4N2UzZSwgMHg4MTBhLCAw eDhjYWMsIDB4OGQ2NCwgMHg4ZGUxLCAweDhlNWYsIDB4NzhhOSwKKyAgICAweDUyMDcsIDB4NjJk OSwgMHg2M2E1LCAweDY0NDIsIDB4NjI5OCwgMHg4YTJkLCAweDdhODMsIDB4N2JjMCwKKyAgICAw eDhhYWMsIDB4OTZlYSwgMHg3ZDc2LCAweDgyMGMsIDB4ODc0OSwgMHg0ZWQ5LCAweDUxNDgsIDB4 NTM0MywKKyAgICAweDUzNjAsIDB4NWJhMywgMHg1YzAyLCAweDVjMTYsIDB4NWRkZCwgMHg2MjI2 LCAweDYyNDcsIDB4NjRiMCwKKyAgICAweDY4MTMsIDB4NjgzNCwgMHg2Y2M5LCAweDZkNDUsIDB4 NmQxNywgMHg2N2QzLCAweDZmNWMsIDB4NzE0ZSwKKyAgICAweDcxN2QsIDB4NjVjYiwgMHg3YTdm LCAweDdiYWQsIDB4N2RkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDdlNGEsIDB4N2ZhOCwgMHg4MTdhLCAweDgy MWIsIDB4ODIzOSwgMHg4NWE2LCAweDhhNmUsIDB4OGNjZSwKKyAgICAweDhkZjUsIDB4OTA3OCwg MHg5MDc3LCAweDkyYWQsIDB4OTI5MSwgMHg5NTgzLCAweDliYWUsIDB4NTI0ZCwKKyAgICAweDU1 ODQsIDB4NmYzOCwgMHg3MTM2LCAweDUxNjgsIDB4Nzk4NSwgMHg3ZTU1LCAweDgxYjMsIDB4N2Nj ZSwKKyAgICAweDU2NGMsIDB4NTg1MSwgMHg1Y2E4LCAweDYzYWEsIDB4NjZmZSwgMHg2NmZkLCAw eDY5NWEsIDB4NzJkOSwKKyAgICAweDc1OGYsIDB4NzU4ZSwgMHg3OTBlLCAweDc5NTYsIDB4Nzlk ZiwgMHg3Yzk3LCAweDdkMjAsIDB4N2Q0NCwKKyAgICAweDg2MDcsIDB4OGEzNCwgMHg5NjNiLCAw eDkwNjEsIDB4OWYyMCwgMHg1MGU3LCAweDUyNzUsIDB4NTNjYywKKyAgICAweDUzZTIsIDB4NTAw OSwgMHg1NWFhLCAweDU4ZWUsIDB4NTk0ZiwgMHg3MjNkLCAweDViOGIsIDB4NWM2NCwKKyAgICAw eDUzMWQsIDB4NjBlMywgMHg2MGYzLCAweDYzNWMsIDB4NjM4MywgMHg2MzNmLCAweDYzYmIsIDB4 ZmZmZCwKKyAgICAweDY0Y2QsIDB4NjVlOSwgMHg2NmY5LCAweDVkZTMsIDB4NjljZCwgMHg2OWZk LCAweDZmMTUsIDB4NzFlNSwKKyAgICAweDRlODksIDB4NzVlOSwgMHg3NmY4LCAweDdhOTMsIDB4 N2NkZiwgMHg3ZGNmLCAweDdkOWMsIDB4ODA2MSwKKyAgICAweDgzNDksIDB4ODM1OCwgMHg4NDZj LCAweDg0YmMsIDB4ODVmYiwgMHg4OGM1LCAweDhkNzAsIDB4OTAwMSwKKyAgICAweDkwNmQsIDB4 OTM5NywgMHg5NzFjLCAweDlhMTIsIDB4NTBjZiwgMHg1ODk3LCAweDYxOGUsIDB4ODFkMywKKyAg ICAweDg1MzUsIDB4OGQwOCwgMHg5MDIwLCAweDRmYzMsIDB4NTA3NCwgMHg1MjQ3LCAweDUzNzMs IDB4NjA2ZiwKKyAgICAweDYzNDksIDB4Njc1ZiwgMHg2ZTJjLCAweDhkYjMsIDB4OTAxZiwgMHg0 ZmQ3LCAweDVjNWUsIDB4OGNjYSwKKyAgICAweDY1Y2YsIDB4N2Q5YSwgMHg1MzUyLCAweDg4OTYs IDB4NTE3NiwgMHg2M2MzLCAweDViNTgsIDB4NWI2YiwKKyAgICAweDVjMGEsIDB4NjQwZCwgMHg2 NzUxLCAweDkwNWMsIDB4NGVkNiwgMHg1OTFhLCAweDU5MmEsIDB4NmM3MCwKKyAgICAweDhhNTEs IDB4NTUzZSwgMHg1ODE1LCAweDU5YTUsIDB4NjBmMCwgMHg2MjUzLCAweDY3YzEsIDB4ODIzNSwK KyAgICAweDY5NTUsIDB4OTY0MCwgMHg5OWM0LCAweDlhMjgsIDB4NGY1MywgMHg1ODA2LCAweDVi ZmUsIDB4ODAxMCwKKyAgICAweDVjYjEsIDB4NWUyZiwgMHg1Zjg1LCAweDYwMjAsIDB4NjE0Yiwg MHg2MjM0LCAweDY2ZmYsIDB4NmNmMCwKKyAgICAweDZlZGUsIDB4ODBjZSwgMHg4MTdmLCAweDgy ZDQsIDB4ODg4YiwgMHg4Y2I4LCAweDkwMDAsIDB4OTAyZSwKKyAgICAweDk2OGEsIDB4OWVkYiwg MHg5YmRiLCAweDRlZTMsIDB4NTNmMCwgMHg1OTI3LCAweDdiMmMsIDB4OTE4ZCwKKyAgICAweDk4 NGMsIDB4OWRmOSwgMHg2ZWRkLCAweDcwMjcsIDB4NTM1MywgMHg1NTQ0LCAweDViODUsIDB4NjI1 OCwKKyAgICAweDYyOWUsIDB4NjJkMywgMHg2Y2EyLCAweDZmZWYsIDB4NzQyMiwgMHg4YTE3LCAw eDk0MzgsIDB4NmZjMSwKKyAgICAweDhhZmUsIDB4ODMzOCwgMHg1MWU3LCAweDg2ZjgsIDB4NTNl YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDUzZTksIDB4NGY0NiwgMHg5MDU0LCAweDhmYjAsIDB4NTk2YSwgMHg4 MTMxLCAweDVkZmQsIDB4N2FlYSwKKyAgICAweDhmYmYsIDB4NjhkYSwgMHg4YzM3LCAweDcyZjgs IDB4OWM0OCwgMHg2YTNkLCAweDhhYjAsIDB4NGUzOSwKKyAgICAweDUzNTgsIDB4NTYwNiwgMHg1 NzY2LCAweDYyYzUsIDB4NjNhMiwgMHg2NWU2LCAweDZiNGUsIDB4NmRlMSwKKyAgICAweDZlNWIs IDB4NzBhZCwgMHg3N2VkLCAweDdhZWYsIDB4N2JhYSwgMHg3ZGJiLCAweDgwM2QsIDB4ODBjNiwK KyAgICAweDg2Y2IsIDB4OGE5NSwgMHg5MzViLCAweDU2ZTMsIDB4NThjNywgMHg1ZjNlLCAweDY1 YWQsIDB4NjY5NiwKKyAgICAweDZhODAsIDB4NmJiNSwgMHg3NTM3LCAweDhhYzcsIDB4NTAyNCwg MHg3N2U1LCAweDU3MzAsIDB4NWYxYiwKKyAgICAweDYwNjUsIDB4NjY3YSwgMHg2YzYwLCAweDc1 ZjQsIDB4N2ExYSwgMHg3ZjZlLCAweDgxZjQsIDB4ODcxOCwKKyAgICAweDkwNDUsIDB4OTliMywg MHg3YmM5LCAweDc1NWMsIDB4N2FmOSwgMHg3YjUxLCAweDg0YzQsIDB4ZmZmZCwKKyAgICAweDkw MTAsIDB4NzllOSwgMHg3YTkyLCAweDgzMzYsIDB4NWFlMSwgMHg3NzQwLCAweDRlMmQsIDB4NGVm MiwKKyAgICAweDViOTksIDB4NWZlMCwgMHg2MmJkLCAweDY2M2MsIDB4NjdmMSwgMHg2Y2U4LCAw eDg2NmIsIDB4ODg3NywKKyAgICAweDhhM2IsIDB4OTE0ZSwgMHg5MmYzLCAweDk5ZDAsIDB4NmEx NywgMHg3MDI2LCAweDczMmEsIDB4ODJlNywKKyAgICAweDg0NTcsIDB4OGNhZiwgMHg0ZTAxLCAw eDUxNDYsIDB4NTFjYiwgMHg1NThiLCAweDViZjUsIDB4NWUxNiwKKyAgICAweDVlMzMsIDB4NWU4 MSwgMHg1ZjE0LCAweDVmMzUsIDB4NWY2YiwgMHg1ZmI0LCAweDYxZjIsIDB4NjMxMSwKKyAgICAw eDY2YTIsIDB4NjcxZCwgMHg2ZjZlLCAweDcyNTIsIDB4NzUzYSwgMHg3NzNhLCAweDgwNzQsIDB4 ODEzOSwKKyAgICAweDgxNzgsIDB4ODc3NiwgMHg4YWJmLCAweDhhZGMsIDB4OGQ4NSwgMHg4ZGYz LCAweDkyOWEsIDB4OTU3NywKKyAgICAweDk4MDIsIDB4OWNlNSwgMHg1MmM1LCAweDYzNTcsIDB4 NzZmNCwgMHg2NzE1LCAweDZjODgsIDB4NzNjZCwKKyAgICAweDhjYzMsIDB4OTNhZSwgMHg5Njcz LCAweDZkMjUsIDB4NTg5YywgMHg2OTBlLCAweDY5Y2MsIDB4OGZmZCwKKyAgICAweDkzOWEsIDB4 NzVkYiwgMHg5MDFhLCAweDU4NWEsIDB4NjgwMiwgMHg2M2I0LCAweDY5ZmIsIDB4NGY0MywKKyAg ICAweDZmMmMsIDB4NjdkOCwgMHg4ZmJiLCAweDg1MjYsIDB4N2RiNCwgMHg5MzU0LCAweDY5M2Ys IDB4NmY3MCwKKyAgICAweDU3NmEsIDB4NThmNywgMHg1YjJjLCAweDdkMmMsIDB4NzIyYSwgMHg1 NDBhLCAweDkxZTMsIDB4OWRiNCwKKyAgICAweDRlYWQsIDB4NGY0ZSwgMHg1MDVjLCAweDUwNzUs IDB4NTI0MywgMHg4YzllLCAweDU0NDgsIDB4NTgyNCwKKyAgICAweDViOWEsIDB4NWUxZCwgMHg1 ZTk1LCAweDVlYWQsIDB4NWVmNywgMHg1ZjFmLCAweDYwOGMsIDB4NjJiNSwKKyAgICAweDYzM2Es IDB4NjNkMCwgMHg2OGFmLCAweDZjNDAsIDB4Nzg4NywgMHg3OThlLCAweDdhMGIsIDB4N2RlMCwK KyAgICAweDgyNDcsIDB4OGEwMiwgMHg4YWU2LCAweDhlNDQsIDB4OTAxMywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDkwYjgsIDB4OTEyZCwgMHg5MWQ4LCAweDlmMGUsIDB4NmNlNSwgMHg2NDU4LCAweDY0ZTIsIDB4 NjU3NSwKKyAgICAweDZlZjQsIDB4NzY4NCwgMHg3YjFiLCAweDkwNjksIDB4OTNkMSwgMHg2ZWJh LCAweDU0ZjIsIDB4NWZiOSwKKyAgICAweDY0YTQsIDB4OGY0ZCwgMHg4ZmVkLCAweDkyNDQsIDB4 NTE3OCwgMHg1ODZiLCAweDU5MjksIDB4NWM1NSwKKyAgICAweDVlOTcsIDB4NmRmYiwgMHg3ZThm LCAweDc1MWMsIDB4OGNiYywgMHg4ZWUyLCAweDk4NWIsIDB4NzBiOSwKKyAgICAweDRmMWQsIDB4 NmJiZiwgMHg2ZmIxLCAweDc1MzAsIDB4OTZmYiwgMHg1MTRlLCAweDU0MTAsIDB4NTgzNSwKKyAg ICAweDU4NTcsIDB4NTlhYywgMHg1YzYwLCAweDVmOTIsIDB4NjU5NywgMHg2NzVjLCAweDZlMjEs IDB4NzY3YiwKKyAgICAweDgzZGYsIDB4OGNlZCwgMHg5MDE0LCAweDkwZmQsIDB4OTM0ZCwgMHg3 ODI1LCAweDc4M2EsIDB4NTJhYSwKKyAgICAweDVlYTYsIDB4NTcxZiwgMHg1OTc0LCAweDYwMTIs IDB4NTAxMiwgMHg1MTVhLCAweDUxYWMsIDB4ZmZmZCwKKyAgICAweDUxY2QsIDB4NTIwMCwgMHg1 NTEwLCAweDU4NTQsIDB4NTg1OCwgMHg1OTU3LCAweDViOTUsIDB4NWNmNiwKKyAgICAweDVkOGIs IDB4NjBiYywgMHg2Mjk1LCAweDY0MmQsIDB4Njc3MSwgMHg2ODQzLCAweDY4YmMsIDB4NjhkZiwK KyAgICAweDc2ZDcsIDB4NmRkOCwgMHg2ZTZmLCAweDZkOWIsIDB4NzA2ZiwgMHg3MWM4LCAweDVm NTMsIDB4NzVkOCwKKyAgICAweDc5NzcsIDB4N2I0OSwgMHg3YjU0LCAweDdiNTIsIDB4N2NkNiwg MHg3ZDcxLCAweDUyMzAsIDB4ODQ2MywKKyAgICAweDg1NjksIDB4ODVlNCwgMHg4YTBlLCAweDhi MDQsIDB4OGM0NiwgMHg4ZTBmLCAweDkwMDMsIDB4OTAwZiwKKyAgICAweDk0MTksIDB4OTY3Niwg MHg5ODJkLCAweDlhMzAsIDB4OTVkOCwgMHg1MGNkLCAweDUyZDUsIDB4NTQwYywKKyAgICAweDU4 MDIsIDB4NWMwZSwgMHg2MWE3LCAweDY0OWUsIDB4NmQxZSwgMHg3N2IzLCAweDdhZTUsIDB4ODBm NCwKKyAgICAweDg0MDQsIDB4OTA1MywgMHg5Mjg1LCAweDVjZTAsIDB4OWQwNywgMHg1MzNmLCAw eDVmOTcsIDB4NWZiMywKKyAgICAweDZkOWMsIDB4NzI3OSwgMHg3NzYzLCAweDc5YmYsIDB4N2Jl NCwgMHg2YmQyLCAweDcyZWMsIDB4OGFhZCwKKyAgICAweDY4MDMsIDB4NmE2MSwgMHg1MWY4LCAw eDdhODEsIDB4NjkzNCwgMHg1YzRhLCAweDljZjYsIDB4ODJlYiwKKyAgICAweDViYzUsIDB4OTE0 OSwgMHg3MDFlLCAweDU2NzgsIDB4NWM2ZiwgMHg2MGM3LCAweDY1NjYsIDB4NmM4YywKKyAgICAw eDhjNWEsIDB4OTA0MSwgMHg5ODEzLCAweDU0NTEsIDB4NjZjNywgMHg5MjBkLCAweDU5NDgsIDB4 OTBhMywKKyAgICAweDUxODUsIDB4NGU0ZCwgMHg1MWVhLCAweDg1OTksIDB4OGIwZSwgMHg3MDU4 LCAweDYzN2EsIDB4OTM0YiwKKyAgICAweDY5NjIsIDB4OTliNCwgMHg3ZTA0LCAweDc1NzcsIDB4 NTM1NywgMHg2OTYwLCAweDhlZGYsIDB4OTZlMywKKyAgICAweDZjNWQsIDB4NGU4YywgMHg1YzNj LCAweDVmMTAsIDB4OGZlOSwgMHg1MzAyLCAweDhjZDEsIDB4ODA4OSwKKyAgICAweDg2NzksIDB4 NWVmZiwgMHg2NWU1LCAweDRlNzMsIDB4NTE2NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDU5ODIsIDB4NWMzZiwg MHg5N2VlLCAweDRlZmIsIDB4NTk4YSwgMHg1ZmNkLCAweDhhOGQsIDB4NmZlMSwKKyAgICAweDc5 YjAsIDB4Nzk2MiwgMHg1YmU3LCAweDg0NzEsIDB4NzMyYiwgMHg3MWIxLCAweDVlNzQsIDB4NWZm NSwKKyAgICAweDYzN2IsIDB4NjQ5YSwgMHg3MWMzLCAweDdjOTgsIDB4NGU0MywgMHg1ZWZjLCAw eDRlNGIsIDB4NTdkYywKKyAgICAweDU2YTIsIDB4NjBhOSwgMHg2ZmMzLCAweDdkMGQsIDB4ODBm ZCwgMHg4MTMzLCAweDgxYmYsIDB4OGZiMiwKKyAgICAweDg5OTcsIDB4ODZhNCwgMHg1ZGY0LCAw eDYyOGEsIDB4NjRhZCwgMHg4OTg3LCAweDY3NzcsIDB4NmNlMiwKKyAgICAweDZkM2UsIDB4NzQz NiwgMHg3ODM0LCAweDVhNDYsIDB4N2Y3NSwgMHg4MmFkLCAweDk5YWMsIDB4NGZmMywKKyAgICAw eDVlYzMsIDB4NjJkZCwgMHg2MzkyLCAweDY1NTcsIDB4Njc2ZiwgMHg3NmMzLCAweDcyNGMsIDB4 ODBjYywKKyAgICAweDgwYmEsIDB4OGYyOSwgMHg5MTRkLCAweDUwMGQsIDB4NTdmOSwgMHg1YTky LCAweDY4ODUsIDB4ZmZmZCwKKyAgICAweDY5NzMsIDB4NzE2NCwgMHg3MmZkLCAweDhjYjcsIDB4 NThmMiwgMHg4Y2UwLCAweDk2NmEsIDB4OTAxOSwKKyAgICAweDg3N2YsIDB4NzllNCwgMHg3N2U3 LCAweDg0MjksIDB4NGYyZiwgMHg1MjY1LCAweDUzNWEsIDB4NjJjZCwKKyAgICAweDY3Y2YsIDB4 NmNjYSwgMHg3NjdkLCAweDdiOTQsIDB4N2M5NSwgMHg4MjM2LCAweDg1ODQsIDB4OGZlYiwKKyAg ICAweDY2ZGQsIDB4NmYyMCwgMHg3MjA2LCAweDdlMWIsIDB4ODNhYiwgMHg5OWMxLCAweDllYTYs IDB4NTFmZCwKKyAgICAweDdiYjEsIDB4Nzg3MiwgMHg3YmI4LCAweDgwODcsIDB4N2I0OCwgMHg2 YWU4LCAweDVlNjEsIDB4ODA4YywKKyAgICAweDc1NTEsIDB4NzU2MCwgMHg1MTZiLCAweDkyNjIs IDB4NmU4YywgMHg3NjdhLCAweDkxOTcsIDB4OWFlYSwKKyAgICAweDRmMTAsIDB4N2Y3MCwgMHg2 MjljLCAweDdiNGYsIDB4OTVhNSwgMHg5Y2U5LCAweDU2N2EsIDB4NTg1OSwKKyAgICAweDg2ZTQs IDB4OTZiYywgMHg0ZjM0LCAweDUyMjQsIDB4NTM0YSwgMHg1M2NkLCAweDUzZGIsIDB4NWUwNiwK KyAgICAweDY0MmMsIDB4NjU5MSwgMHg2NzdmLCAweDZjM2UsIDB4NmM0ZSwgMHg3MjQ4LCAweDcy YWYsIDB4NzNlZCwKKyAgICAweDc1NTQsIDB4N2U0MSwgMHg4MjJjLCAweDg1ZTksIDB4OGNhOSwg MHg3YmM0LCAweDkxYzYsIDB4NzE2OSwKKyAgICAweDk4MTIsIDB4OThlZiwgMHg2MzNkLCAweDY2 NjksIDB4NzU2YSwgMHg3NmU0LCAweDc4ZDAsIDB4ODU0MywKKyAgICAweDg2ZWUsIDB4NTMyYSwg MHg1MzUxLCAweDU0MjYsIDB4NTk4MywgMHg1ZTg3LCAweDVmN2MsIDB4NjBiMiwKKyAgICAweDYy NDksIDB4NjI3OSwgMHg2MmFiLCAweDY1OTAsIDB4NmJkNCwgMHg2Y2NjLCAweDc1YjIsIDB4NzZh ZSwKKyAgICAweDc4OTEsIDB4NzlkOCwgMHg3ZGNiLCAweDdmNzcsIDB4ODBhNSwgMHg4OGFiLCAw eDhhYjksIDB4OGNiYiwKKyAgICAweDkwN2YsIDB4OTc1ZSwgMHg5OGRiLCAweDZhMGIsIDB4N2Mz OCwgMHg1MDk5LCAweDVjM2UsIDB4NWZhZSwKKyAgICAweDY3ODcsIDB4NmJkOCwgMHg3NDM1LCAw eDc3MDksIDB4N2Y4ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlmM2IsIDB4NjdjYSwgMHg3YTE3LCAweDUzMzks IDB4NzU4YiwgMHg5YWVkLCAweDVmNjYsIDB4ODE5ZCwKKyAgICAweDgzZjEsIDB4ODA5OCwgMHg1 ZjNjLCAweDVmYzUsIDB4NzU2MiwgMHg3YjQ2LCAweDkwM2MsIDB4Njg2NywKKyAgICAweDU5ZWIs IDB4NWE5YiwgMHg3ZDEwLCAweDc2N2UsIDB4OGIyYywgMHg0ZmY1LCAweDVmNmEsIDB4NmExOSwK KyAgICAweDZjMzcsIDB4NmYwMiwgMHg3NGUyLCAweDc5NjgsIDB4ODg2OCwgMHg4YTU1LCAweDhj NzksIDB4NWVkZiwKKyAgICAweDYzY2YsIDB4NzVjNSwgMHg3OWQyLCAweDgyZDcsIDB4OTMyOCwg MHg5MmYyLCAweDg0OWMsIDB4ODZlZCwKKyAgICAweDljMmQsIDB4NTRjMSwgMHg1ZjZjLCAweDY1 OGMsIDB4NmQ1YywgMHg3MDE1LCAweDhjYTcsIDB4OGNkMywKKyAgICAweDk4M2IsIDB4NjU0Ziwg MHg3NGY2LCAweDRlMGQsIDB4NGVkOCwgMHg1N2UwLCAweDU5MmIsIDB4NWE2NiwKKyAgICAweDVi Y2MsIDB4NTFhOCwgMHg1ZTAzLCAweDVlOWMsIDB4NjAxNiwgMHg2Mjc2LCAweDY1NzcsIDB4ZmZm ZCwKKyAgICAweDY1YTcsIDB4NjY2ZSwgMHg2ZDZlLCAweDcyMzYsIDB4N2IyNiwgMHg4MTUwLCAw eDgxOWEsIDB4ODI5OSwKKyAgICAweDhiNWMsIDB4OGNhMCwgMHg4Y2U2LCAweDhkNzQsIDB4OTYx YywgMHg5NjQ0LCAweDRmYWUsIDB4NjRhYiwKKyAgICAweDZiNjYsIDB4ODIxZSwgMHg4NDYxLCAw eDg1NmEsIDB4OTBlOCwgMHg1YzAxLCAweDY5NTMsIDB4OThhOCwKKyAgICAweDg0N2EsIDB4ODU1 NywgMHg0ZjBmLCAweDUyNmYsIDB4NWZhOSwgMHg1ZTQ1LCAweDY3MGQsIDB4Nzk4ZiwKKyAgICAw eDgxNzksIDB4ODkwNywgMHg4OTg2LCAweDZkZjUsIDB4NWYxNywgMHg2MjU1LCAweDZjYjgsIDB4 NGVjZiwKKyAgICAweDcyNjksIDB4OWI5MiwgMHg1MjA2LCAweDU0M2IsIDB4NTY3NCwgMHg1OGIz LCAweDYxYTQsIDB4NjI2ZSwKKyAgICAweDcxMWEsIDB4NTk2ZSwgMHg3Yzg5LCAweDdjZGUsIDB4 N2QxYiwgMHg5NmYwLCAweDY1ODcsIDB4ODA1ZSwKKyAgICAweDRlMTksIDB4NGY3NSwgMHg1MTc1 LCAweDU4NDAsIDB4NWU2MywgMHg1ZTczLCAweDVmMGEsIDB4NjdjNCwKKyAgICAweDRlMjYsIDB4 ODUzZCwgMHg5NTg5LCAweDk2NWIsIDB4N2M3MywgMHg5ODAxLCAweDUwZmIsIDB4NThjMSwKKyAg ICAweDc2NTYsIDB4NzhhNywgMHg1MjI1LCAweDc3YTUsIDB4ODUxMSwgMHg3Yjg2LCAweDUwNGYs IDB4NTkwOSwKKyAgICAweDcyNDcsIDB4N2JjNywgMHg3ZGU4LCAweDhmYmEsIDB4OGZkNCwgMHg5 MDRkLCAweDRmYmYsIDB4NTJjOSwKKyAgICAweDVhMjksIDB4NWYwMSwgMHg5N2FkLCAweDRmZGQs IDB4ODIxNywgMHg5MmVhLCAweDU3MDMsIDB4NjM1NSwKKyAgICAweDZiNjksIDB4NzUyYiwgMHg4 OGRjLCAweDhmMTQsIDB4N2E0MiwgMHg1MmRmLCAweDU4OTMsIDB4NjE1NSwKKyAgICAweDYyMGEs IDB4NjZhZSwgMHg2YmNkLCAweDdjM2YsIDB4ODNlOSwgMHg1MDIzLCAweDRmZjgsIDB4NTMwNSwK KyAgICAweDU0NDYsIDB4NTgzMSwgMHg1OTQ5LCAweDViOWQsIDB4NWNmMCwgMHg1Y2VmLCAweDVk MjksIDB4NWU5NiwKKyAgICAweDYyYjEsIDB4NjM2NywgMHg2NTNlLCAweDY1YjksIDB4NjcwYiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDZjZDUsIDB4NmNlMSwgMHg3MGY5LCAweDc4MzIsIDB4N2UyYiwgMHg4MGRl LCAweDgyYjMsIDB4ODQwYywKKyAgICAweDg0ZWMsIDB4ODcwMiwgMHg4OTEyLCAweDhhMmEsIDB4 OGM0YSwgMHg5MGE2LCAweDkyZDIsIDB4OThmZCwKKyAgICAweDljZjMsIDB4OWQ2YywgMHg0ZTRm LCAweDRlYTEsIDB4NTA4ZCwgMHg1MjU2LCAweDU3NGEsIDB4NTlhOCwKKyAgICAweDVlM2QsIDB4 NWZkOCwgMHg1ZmQ5LCAweDYyM2YsIDB4NjZiNCwgMHg2NzFiLCAweDY3ZDAsIDB4NjhkMiwKKyAg ICAweDUxOTIsIDB4N2QyMSwgMHg4MGFhLCAweDgxYTgsIDB4OGIwMCwgMHg4YzhjLCAweDhjYmYs IDB4OTI3ZSwKKyAgICAweDk2MzIsIDB4NTQyMCwgMHg5ODJjLCAweDUzMTcsIDB4NTBkNSwgMHg1 MzVjLCAweDU4YTgsIDB4NjRiMiwKKyAgICAweDY3MzQsIDB4NzI2NywgMHg3NzY2LCAweDdhNDYs IDB4OTFlNiwgMHg1MmMzLCAweDZjYTEsIDB4NmI4NiwKKyAgICAweDU4MDAsIDB4NWU0YywgMHg1 OTU0LCAweDY3MmMsIDB4N2ZmYiwgMHg1MWUxLCAweDc2YzYsIDB4ZmZmZCwKKyAgICAweDY0Njks IDB4NzhlOCwgMHg5YjU0LCAweDllYmIsIDB4NTdjYiwgMHg1OWI5LCAweDY2MjcsIDB4Njc5YSwK KyAgICAweDZiY2UsIDB4NTRlOSwgMHg2OWQ5LCAweDVlNTUsIDB4ODE5YywgMHg2Nzk1LCAweDli YWEsIDB4NjdmZSwKKyAgICAweDljNTIsIDB4Njg1ZCwgMHg0ZWE2LCAweDRmZTMsIDB4NTNjOCwg MHg2MmI5LCAweDY3MmIsIDB4NmNhYiwKKyAgICAweDhmYzQsIDB4NGZhZCwgMHg3ZTZkLCAweDll YmYsIDB4NGUwNywgMHg2MTYyLCAweDZlODAsIDB4NmYyYiwKKyAgICAweDg1MTMsIDB4NTQ3Mywg MHg2NzJhLCAweDliNDUsIDB4NWRmMywgMHg3Yjk1LCAweDVjYWMsIDB4NWJjNiwKKyAgICAweDg3 MWMsIDB4NmU0YSwgMHg4NGQxLCAweDdhMTQsIDB4ODEwOCwgMHg1OTk5LCAweDdjOGQsIDB4NmMx MSwKKyAgICAweDc3MjAsIDB4NTJkOSwgMHg1OTIyLCAweDcxMjEsIDB4NzI1ZiwgMHg3N2RiLCAw eDk3MjcsIDB4OWQ2MSwKKyAgICAweDY5MGIsIDB4NWE3ZiwgMHg1YTE4LCAweDUxYTUsIDB4NTQw ZCwgMHg1NDdkLCAweDY2MGUsIDB4NzZkZiwKKyAgICAweDhmZjcsIDB4OTI5OCwgMHg5Y2Y0LCAw eDU5ZWEsIDB4NzI1ZCwgMHg2ZWM1LCAweDUxNGQsIDB4NjhjOSwKKyAgICAweDdkYmYsIDB4N2Rl YywgMHg5NzYyLCAweDllYmEsIDB4NjQ3OCwgMHg2YTIxLCAweDgzMDIsIDB4NTk4NCwKKyAgICAw eDViNWYsIDB4NmJkYiwgMHg3MzFiLCAweDc2ZjIsIDB4N2RiMiwgMHg4MDE3LCAweDg0OTksIDB4 NTEzMiwKKyAgICAweDY3MjgsIDB4OWVkOSwgMHg3NmVlLCAweDY3NjIsIDB4NTJmZiwgMHg5OTA1 LCAweDVjMjQsIDB4NjIzYiwKKyAgICAweDdjN2UsIDB4OGNiMCwgMHg1NTRmLCAweDYwYjYsIDB4 N2QwYiwgMHg5NTgwLCAweDUzMDEsIDB4NGU1ZiwKKyAgICAweDUxYjYsIDB4NTkxYywgMHg3MjNh LCAweDgwMzYsIDB4OTFjZSwgMHg1ZjI1LCAweDc3ZTIsIDB4NTM4NCwKKyAgICAweDVmNzksIDB4 N2QwNCwgMHg4NWFjLCAweDhhMzMsIDB4OGU4ZCwgMHg5NzU2LCAweDY3ZjMsIDB4ODVhZSwKKyAg ICAweDk0NTMsIDB4NjEwOSwgMHg2MTA4LCAweDZjYjksIDB4NzY1MiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhh ZWQsIDB4OGYzOCwgMHg1NTJmLCAweDRmNTEsIDB4NTEyYSwgMHg1MmM3LCAweDUzY2IsIDB4NWJh NSwKKyAgICAweDVlN2QsIDB4NjBhMCwgMHg2MTgyLCAweDYzZDYsIDB4NjcwOSwgMHg2N2RhLCAw eDZlNjcsIDB4NmQ4YywKKyAgICAweDczMzYsIDB4NzMzNywgMHg3NTMxLCAweDc5NTAsIDB4ODhk NSwgMHg4YTk4LCAweDkwNGEsIDB4OTA5MSwKKyAgICAweDkwZjUsIDB4OTZjNCwgMHg4NzhkLCAw eDU5MTUsIDB4NGU4OCwgMHg0ZjU5LCAweDRlMGUsIDB4OGE4OSwKKyAgICAweDhmM2YsIDB4OTgx MCwgMHg1MGFkLCAweDVlN2MsIDB4NTk5NiwgMHg1YmI5LCAweDVlYjgsIDB4NjNkYSwKKyAgICAw eDYzZmEsIDB4NjRjMSwgMHg2NmRjLCAweDY5NGEsIDB4NjlkOCwgMHg2ZDBiLCAweDZlYjYsIDB4 NzE5NCwKKyAgICAweDc1MjgsIDB4N2FhZiwgMHg3ZjhhLCAweDgwMDAsIDB4ODQ0OSwgMHg4NGM5 LCAweDg5ODEsIDB4OGIyMSwKKyAgICAweDhlMGEsIDB4OTA2NSwgMHg5NjdkLCAweDk5MGEsIDB4 NjE3ZSwgMHg2MjkxLCAweDZiMzIsIDB4ZmZmZCwKKyAgICAweDZjODMsIDB4NmQ3NCwgMHg3ZmNj LCAweDdmZmMsIDB4NmRjMCwgMHg3Zjg1LCAweDg3YmEsIDB4ODhmOCwKKyAgICAweDY3NjUsIDB4 ODNiMSwgMHg5ODNjLCAweDk2ZjcsIDB4NmQxYiwgMHg3ZDYxLCAweDg0M2QsIDB4OTE2YSwKKyAg ICAweDRlNzEsIDB4NTM3NSwgMHg1ZDUwLCAweDZiMDQsIDB4NmZlYiwgMHg4NWNkLCAweDg2MmQs IDB4ODlhNywKKyAgICAweDUyMjksIDB4NTQwZiwgMHg1YzY1LCAweDY3NGUsIDB4NjhhOCwgMHg3 NDA2LCAweDc0ODMsIDB4NzVlMiwKKyAgICAweDg4Y2YsIDB4ODhlMSwgMHg5MWNjLCAweDk2ZTIs IDB4OTY3OCwgMHg1ZjhiLCAweDczODcsIDB4N2FjYiwKKyAgICAweDg0NGUsIDB4NjNhMCwgMHg3 NTY1LCAweDUyODksIDB4NmQ0MSwgMHg2ZTljLCAweDc0MDksIDB4NzU1OSwKKyAgICAweDc4NmIs IDB4N2M5MiwgMHg5Njg2LCAweDdhZGMsIDB4OWY4ZCwgMHg0ZmI2LCAweDYxNmUsIDB4NjVjNSwK KyAgICAweDg2NWMsIDB4NGU4NiwgMHg0ZWFlLCAweDUwZGEsIDB4NGUyMSwgMHg1MWNjLCAweDVi ZWUsIDB4NjU5OSwKKyAgICAweDY4ODEsIDB4NmRiYywgMHg3MzFmLCAweDc2NDIsIDB4NzdhZCwg MHg3YTFjLCAweDdjZTcsIDB4ODI2ZiwKKyAgICAweDhhZDIsIDB4OTA3YywgMHg5MWNmLCAweDk2 NzUsIDB4OTgxOCwgMHg1MjliLCAweDdkZDEsIDB4NTAyYiwKKyAgICAweDUzOTgsIDB4Njc5Nywg MHg2ZGNiLCAweDcxZDAsIDB4NzQzMywgMHg4MWU4LCAweDhmMmEsIDB4OTZhMywKKyAgICAweDlj NTcsIDB4OWU5ZiwgMHg3NDYwLCAweDU4NDEsIDB4NmQ5OSwgMHg3ZDJmLCAweDk4NWUsIDB4NGVl NCwKKyAgICAweDRmMzYsIDB4NGY4YiwgMHg1MWI3LCAweDUyYjEsIDB4NWRiYSwgMHg2MDFjLCAw eDczYjIsIDB4NzkzYywKKyAgICAweDgyZDMsIDB4OTIzNCwgMHg5NmI3LCAweDk2ZjYsIDB4OTcw YSwgMHg5ZTk3LCAweDlmNjIsIDB4NjZhNiwKKyAgICAweDZiNzQsIDB4NTIxNywgMHg1MmEzLCAw eDcwYzgsIDB4ODhjMiwgMHg1ZWM5LCAweDYwNGIsIDB4NjE5MCwKKyAgICAweDZmMjMsIDB4NzE0 OSwgMHg3YzNlLCAweDdkZjQsIDB4ODA2ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDg0ZWUsIDB4OTAyMywgMHg5 MzJjLCAweDU0NDIsIDB4OWI2ZiwgMHg2YWQzLCAweDcwODksIDB4OGNjMiwKKyAgICAweDhkZWYs IDB4OTczMiwgMHg1MmI0LCAweDVhNDEsIDB4NWVjYSwgMHg1ZjA0LCAweDY3MTcsIDB4Njk3YywK KyAgICAweDY5OTQsIDB4NmQ2YSwgMHg2ZjBmLCAweDcyNjIsIDB4NzJmYywgMHg3YmVkLCAweDgw MDEsIDB4ODA3ZSwKKyAgICAweDg3NGIsIDB4OTBjZSwgMHg1MTZkLCAweDllOTMsIDB4Nzk4NCwg MHg4MDhiLCAweDkzMzIsIDB4OGFkNiwKKyAgICAweDUwMmQsIDB4NTQ4YywgMHg4YTcxLCAweDZi NmEsIDB4OGNjNCwgMHg4MTA3LCAweDYwZDEsIDB4NjdhMCwKKyAgICAweDlkZjIsIDB4NGU5OSwg MHg0ZTk4LCAweDljMTAsIDB4OGE2YiwgMHg4NWMxLCAweDg1NjgsIDB4NjkwMCwKKyAgICAweDZl N2UsIDB4Nzg5NywgMHg4MTU1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 NWYwYywKKyAgICAweDRlMTAsIDB4NGUxNSwgMHg0ZTJhLCAweDRlMzEsIDB4NGUzNiwgMHg0ZTNj LCAweDRlM2YsIDB4NGU0MiwKKyAgICAweDRlNTYsIDB4NGU1OCwgMHg0ZTgyLCAweDRlODUsIDB4 OGM2YiwgMHg0ZThhLCAweDgyMTIsIDB4NWYwZCwKKyAgICAweDRlOGUsIDB4NGU5ZSwgMHg0ZTlm LCAweDRlYTAsIDB4NGVhMiwgMHg0ZWIwLCAweDRlYjMsIDB4NGViNiwKKyAgICAweDRlY2UsIDB4 NGVjZCwgMHg0ZWM0LCAweDRlYzYsIDB4NGVjMiwgMHg0ZWQ3LCAweDRlZGUsIDB4NGVlZCwKKyAg ICAweDRlZGYsIDB4NGVmNywgMHg0ZjA5LCAweDRmNWEsIDB4NGYzMCwgMHg0ZjViLCAweDRmNWQs IDB4NGY1NywKKyAgICAweDRmNDcsIDB4NGY3NiwgMHg0Zjg4LCAweDRmOGYsIDB4NGY5OCwgMHg0 ZjdiLCAweDRmNjksIDB4NGY3MCwKKyAgICAweDRmOTEsIDB4NGY2ZiwgMHg0Zjg2LCAweDRmOTYs IDB4NTExOCwgMHg0ZmQ0LCAweDRmZGYsIDB4NGZjZSwKKyAgICAweDRmZDgsIDB4NGZkYiwgMHg0 ZmQxLCAweDRmZGEsIDB4NGZkMCwgMHg0ZmU0LCAweDRmZTUsIDB4NTAxYSwKKyAgICAweDUwMjgs IDB4NTAxNCwgMHg1MDJhLCAweDUwMjUsIDB4NTAwNSwgMHg0ZjFjLCAweDRmZjYsIDB4NTAyMSwK KyAgICAweDUwMjksIDB4NTAyYywgMHg0ZmZlLCAweDRmZWYsIDB4NTAxMSwgMHg1MDA2LCAweDUw NDMsIDB4NTA0NywKKyAgICAweDY3MDMsIDB4NTA1NSwgMHg1MDUwLCAweDUwNDgsIDB4NTA1YSwg MHg1MDU2LCAweDUwNmMsIDB4NTA3OCwKKyAgICAweDUwODAsIDB4NTA5YSwgMHg1MDg1LCAweDUw YjQsIDB4NTBiMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDUwYzksIDB4NTBjYSwgMHg1MGIzLCAweDUwYzIsIDB4 NTBkNiwgMHg1MGRlLCAweDUwZTUsIDB4NTBlZCwKKyAgICAweDUwZTMsIDB4NTBlZSwgMHg1MGY5 LCAweDUwZjUsIDB4NTEwOSwgMHg1MTAxLCAweDUxMDIsIDB4NTExNiwKKyAgICAweDUxMTUsIDB4 NTExNCwgMHg1MTFhLCAweDUxMjEsIDB4NTEzYSwgMHg1MTM3LCAweDUxM2MsIDB4NTEzYiwKKyAg ICAweDUxM2YsIDB4NTE0MCwgMHg1MTUyLCAweDUxNGMsIDB4NTE1NCwgMHg1MTYyLCAweDdhZjgs IDB4NTE2OSwKKyAgICAweDUxNmEsIDB4NTE2ZSwgMHg1MTgwLCAweDUxODIsIDB4NTZkOCwgMHg1 MThjLCAweDUxODksIDB4NTE4ZiwKKyAgICAweDUxOTEsIDB4NTE5MywgMHg1MTk1LCAweDUxOTYs IDB4NTFhNCwgMHg1MWE2LCAweDUxYTIsIDB4NTFhOSwKKyAgICAweDUxYWEsIDB4NTFhYiwgMHg1 MWIzLCAweDUxYjEsIDB4NTFiMiwgMHg1MWIwLCAweDUxYjUsIDB4NTFiZCwKKyAgICAweDUxYzUs IDB4NTFjOSwgMHg1MWRiLCAweDUxZTAsIDB4ODY1NSwgMHg1MWU5LCAweDUxZWQsIDB4ZmZmZCwK KyAgICAweDUxZjAsIDB4NTFmNSwgMHg1MWZlLCAweDUyMDQsIDB4NTIwYiwgMHg1MjE0LCAweDUy MGUsIDB4NTIyNywKKyAgICAweDUyMmEsIDB4NTIyZSwgMHg1MjMzLCAweDUyMzksIDB4NTI0Ziwg MHg1MjQ0LCAweDUyNGIsIDB4NTI0YywKKyAgICAweDUyNWUsIDB4NTI1NCwgMHg1MjZhLCAweDUy NzQsIDB4NTI2OSwgMHg1MjczLCAweDUyN2YsIDB4NTI3ZCwKKyAgICAweDUyOGQsIDB4NTI5NCwg MHg1MjkyLCAweDUyNzEsIDB4NTI4OCwgMHg1MjkxLCAweDhmYTgsIDB4OGZhNywKKyAgICAweDUy YWMsIDB4NTJhZCwgMHg1MmJjLCAweDUyYjUsIDB4NTJjMSwgMHg1MmNkLCAweDUyZDcsIDB4NTJk ZSwKKyAgICAweDUyZTMsIDB4NTJlNiwgMHg5OGVkLCAweDUyZTAsIDB4NTJmMywgMHg1MmY1LCAw eDUyZjgsIDB4NTJmOSwKKyAgICAweDUzMDYsIDB4NTMwOCwgMHg3NTM4LCAweDUzMGQsIDB4NTMx MCwgMHg1MzBmLCAweDUzMTUsIDB4NTMxYSwKKyAgICAweDUzMjMsIDB4NTMyZiwgMHg1MzMxLCAw eDUzMzMsIDB4NTMzOCwgMHg1MzQwLCAweDUzNDYsIDB4NTM0NSwKKyAgICAweDRlMTcsIDB4NTM0 OSwgMHg1MzRkLCAweDUxZDYsIDB4NTM1ZSwgMHg1MzY5LCAweDUzNmUsIDB4NTkxOCwKKyAgICAw eDUzN2IsIDB4NTM3NywgMHg1MzgyLCAweDUzOTYsIDB4NTNhMCwgMHg1M2E2LCAweDUzYTUsIDB4 NTNhZSwKKyAgICAweDUzYjAsIDB4NTNiNiwgMHg1M2MzLCAweDdjMTIsIDB4OTZkOSwgMHg1M2Rm LCAweDY2ZmMsIDB4NzFlZSwKKyAgICAweDUzZWUsIDB4NTNlOCwgMHg1M2VkLCAweDUzZmEsIDB4 NTQwMSwgMHg1NDNkLCAweDU0NDAsIDB4NTQyYywKKyAgICAweDU0MmQsIDB4NTQzYywgMHg1NDJl LCAweDU0MzYsIDB4NTQyOSwgMHg1NDFkLCAweDU0NGUsIDB4NTQ4ZiwKKyAgICAweDU0NzUsIDB4 NTQ4ZSwgMHg1NDVmLCAweDU0NzEsIDB4NTQ3NywgMHg1NDcwLCAweDU0OTIsIDB4NTQ3YiwKKyAg ICAweDU0ODAsIDB4NTQ3NiwgMHg1NDg0LCAweDU0OTAsIDB4NTQ4NiwgMHg1NGM3LCAweDU0YTIs IDB4NTRiOCwKKyAgICAweDU0YTUsIDB4NTRhYywgMHg1NGM0LCAweDU0YzgsIDB4NTRhOCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDU0YWIsIDB4NTRjMiwgMHg1NGE0LCAweDU0YmUsIDB4NTRiYywgMHg1NGQ4LCAw eDU0ZTUsIDB4NTRlNiwKKyAgICAweDU1MGYsIDB4NTUxNCwgMHg1NGZkLCAweDU0ZWUsIDB4NTRl ZCwgMHg1NGZhLCAweDU0ZTIsIDB4NTUzOSwKKyAgICAweDU1NDAsIDB4NTU2MywgMHg1NTRjLCAw eDU1MmUsIDB4NTU1YywgMHg1NTQ1LCAweDU1NTYsIDB4NTU1NywKKyAgICAweDU1MzgsIDB4NTUz MywgMHg1NTVkLCAweDU1OTksIDB4NTU4MCwgMHg1NGFmLCAweDU1OGEsIDB4NTU5ZiwKKyAgICAw eDU1N2IsIDB4NTU3ZSwgMHg1NTk4LCAweDU1OWUsIDB4NTVhZSwgMHg1NTdjLCAweDU1ODMsIDB4 NTVhOSwKKyAgICAweDU1ODcsIDB4NTVhOCwgMHg1NWRhLCAweDU1YzUsIDB4NTVkZiwgMHg1NWM0 LCAweDU1ZGMsIDB4NTVlNCwKKyAgICAweDU1ZDQsIDB4NTYxNCwgMHg1NWY3LCAweDU2MTYsIDB4 NTVmZSwgMHg1NWZkLCAweDU2MWIsIDB4NTVmOSwKKyAgICAweDU2NGUsIDB4NTY1MCwgMHg3MWRm LCAweDU2MzQsIDB4NTYzNiwgMHg1NjMyLCAweDU2MzgsIDB4ZmZmZCwKKyAgICAweDU2NmIsIDB4 NTY2NCwgMHg1NjJmLCAweDU2NmMsIDB4NTY2YSwgMHg1Njg2LCAweDU2ODAsIDB4NTY4YSwKKyAg ICAweDU2YTAsIDB4NTY5NCwgMHg1NjhmLCAweDU2YTUsIDB4NTZhZSwgMHg1NmI2LCAweDU2YjQs IDB4NTZjMiwKKyAgICAweDU2YmMsIDB4NTZjMSwgMHg1NmMzLCAweDU2YzAsIDB4NTZjOCwgMHg1 NmNlLCAweDU2ZDEsIDB4NTZkMywKKyAgICAweDU2ZDcsIDB4NTZlZSwgMHg1NmY5LCAweDU3MDAs IDB4NTZmZiwgMHg1NzA0LCAweDU3MDksIDB4NTcwOCwKKyAgICAweDU3MGIsIDB4NTcwZCwgMHg1 NzEzLCAweDU3MTgsIDB4NTcxNiwgMHg1NWM3LCAweDU3MWMsIDB4NTcyNiwKKyAgICAweDU3Mzcs IDB4NTczOCwgMHg1NzRlLCAweDU3M2IsIDB4NTc0MCwgMHg1NzRmLCAweDU3NjksIDB4NTdjMCwK KyAgICAweDU3ODgsIDB4NTc2MSwgMHg1NzdmLCAweDU3ODksIDB4NTc5MywgMHg1N2EwLCAweDU3 YjMsIDB4NTdhNCwKKyAgICAweDU3YWEsIDB4NTdiMCwgMHg1N2MzLCAweDU3YzYsIDB4NTdkNCwg MHg1N2QyLCAweDU3ZDMsIDB4NTgwYSwKKyAgICAweDU3ZDYsIDB4NTdlMywgMHg1ODBiLCAweDU4 MTksIDB4NTgxZCwgMHg1ODcyLCAweDU4MjEsIDB4NTg2MiwKKyAgICAweDU4NGIsIDB4NTg3MCwg MHg2YmMwLCAweDU4NTIsIDB4NTgzZCwgMHg1ODc5LCAweDU4ODUsIDB4NThiOSwKKyAgICAweDU4 OWYsIDB4NThhYiwgMHg1OGJhLCAweDU4ZGUsIDB4NThiYiwgMHg1OGI4LCAweDU4YWUsIDB4NThj NSwKKyAgICAweDU4ZDMsIDB4NThkMSwgMHg1OGQ3LCAweDU4ZDksIDB4NThkOCwgMHg1OGU1LCAw eDU4ZGMsIDB4NThlNCwKKyAgICAweDU4ZGYsIDB4NThlZiwgMHg1OGZhLCAweDU4ZjksIDB4NThm YiwgMHg1OGZjLCAweDU4ZmQsIDB4NTkwMiwKKyAgICAweDU5MGEsIDB4NTkxMCwgMHg1OTFiLCAw eDY4YTYsIDB4NTkyNSwgMHg1OTJjLCAweDU5MmQsIDB4NTkzMiwKKyAgICAweDU5MzgsIDB4NTkz ZSwgMHg3YWQyLCAweDU5NTUsIDB4NTk1MCwgMHg1OTRlLCAweDU5NWEsIDB4NTk1OCwKKyAgICAw eDU5NjIsIDB4NTk2MCwgMHg1OTY3LCAweDU5NmMsIDB4NTk2OSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDU5Nzgs IDB4NTk4MSwgMHg1OTlkLCAweDRmNWUsIDB4NGZhYiwgMHg1OWEzLCAweDU5YjIsIDB4NTljNiwK KyAgICAweDU5ZTgsIDB4NTlkYywgMHg1OThkLCAweDU5ZDksIDB4NTlkYSwgMHg1YTI1LCAweDVh MWYsIDB4NWExMSwKKyAgICAweDVhMWMsIDB4NWEwOSwgMHg1YTFhLCAweDVhNDAsIDB4NWE2Yywg MHg1YTQ5LCAweDVhMzUsIDB4NWEzNiwKKyAgICAweDVhNjIsIDB4NWE2YSwgMHg1YTlhLCAweDVh YmMsIDB4NWFiZSwgMHg1YWNiLCAweDVhYzIsIDB4NWFiZCwKKyAgICAweDVhZTMsIDB4NWFkNywg MHg1YWU2LCAweDVhZTksIDB4NWFkNiwgMHg1YWZhLCAweDVhZmIsIDB4NWIwYywKKyAgICAweDVi MGIsIDB4NWIxNiwgMHg1YjMyLCAweDVhZDAsIDB4NWIyYSwgMHg1YjM2LCAweDViM2UsIDB4NWI0 MywKKyAgICAweDViNDUsIDB4NWI0MCwgMHg1YjUxLCAweDViNTUsIDB4NWI1YSwgMHg1YjViLCAw eDViNjUsIDB4NWI2OSwKKyAgICAweDViNzAsIDB4NWI3MywgMHg1Yjc1LCAweDViNzgsIDB4NjU4 OCwgMHg1YjdhLCAweDViODAsIDB4ZmZmZCwKKyAgICAweDViODMsIDB4NWJhNiwgMHg1YmI4LCAw eDViYzMsIDB4NWJjNywgMHg1YmM5LCAweDViZDQsIDB4NWJkMCwKKyAgICAweDViZTQsIDB4NWJl NiwgMHg1YmUyLCAweDViZGUsIDB4NWJlNSwgMHg1YmViLCAweDViZjAsIDB4NWJmNiwKKyAgICAw eDViZjMsIDB4NWMwNSwgMHg1YzA3LCAweDVjMDgsIDB4NWMwZCwgMHg1YzEzLCAweDVjMjAsIDB4 NWMyMiwKKyAgICAweDVjMjgsIDB4NWMzOCwgMHg1YzM5LCAweDVjNDEsIDB4NWM0NiwgMHg1YzRl LCAweDVjNTMsIDB4NWM1MCwKKyAgICAweDVjNGYsIDB4NWI3MSwgMHg1YzZjLCAweDVjNmUsIDB4 NGU2MiwgMHg1Yzc2LCAweDVjNzksIDB4NWM4YywKKyAgICAweDVjOTEsIDB4NWM5NCwgMHg1OTli LCAweDVjYWIsIDB4NWNiYiwgMHg1Y2I2LCAweDVjYmMsIDB4NWNiNywKKyAgICAweDVjYzUsIDB4 NWNiZSwgMHg1Y2M3LCAweDVjZDksIDB4NWNlOSwgMHg1Y2ZkLCAweDVjZmEsIDB4NWNlZCwKKyAg ICAweDVkOGMsIDB4NWNlYSwgMHg1ZDBiLCAweDVkMTUsIDB4NWQxNywgMHg1ZDVjLCAweDVkMWYs IDB4NWQxYiwKKyAgICAweDVkMTEsIDB4NWQxNCwgMHg1ZDIyLCAweDVkMWEsIDB4NWQxOSwgMHg1 ZDE4LCAweDVkNGMsIDB4NWQ1MiwKKyAgICAweDVkNGUsIDB4NWQ0YiwgMHg1ZDZjLCAweDVkNzMs IDB4NWQ3NiwgMHg1ZDg3LCAweDVkODQsIDB4NWQ4MiwKKyAgICAweDVkYTIsIDB4NWQ5ZCwgMHg1 ZGFjLCAweDVkYWUsIDB4NWRiZCwgMHg1ZDkwLCAweDVkYjcsIDB4NWRiYywKKyAgICAweDVkYzks IDB4NWRjZCwgMHg1ZGQzLCAweDVkZDIsIDB4NWRkNiwgMHg1ZGRiLCAweDVkZWIsIDB4NWRmMiwK KyAgICAweDVkZjUsIDB4NWUwYiwgMHg1ZTFhLCAweDVlMTksIDB4NWUxMSwgMHg1ZTFiLCAweDVl MzYsIDB4NWUzNywKKyAgICAweDVlNDQsIDB4NWU0MywgMHg1ZTQwLCAweDVlNGUsIDB4NWU1Nywg MHg1ZTU0LCAweDVlNWYsIDB4NWU2MiwKKyAgICAweDVlNjQsIDB4NWU0NywgMHg1ZTc1LCAweDVl NzYsIDB4NWU3YSwgMHg5ZWJjLCAweDVlN2YsIDB4NWVhMCwKKyAgICAweDVlYzEsIDB4NWVjMiwg MHg1ZWM4LCAweDVlZDAsIDB4NWVjZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDVlZDYsIDB4NWVlMywgMHg1ZWRk LCAweDVlZGEsIDB4NWVkYiwgMHg1ZWUyLCAweDVlZTEsIDB4NWVlOCwKKyAgICAweDVlZTksIDB4 NWVlYywgMHg1ZWYxLCAweDVlZjMsIDB4NWVmMCwgMHg1ZWY0LCAweDVlZjgsIDB4NWVmZSwKKyAg ICAweDVmMDMsIDB4NWYwOSwgMHg1ZjVkLCAweDVmNWMsIDB4NWYwYiwgMHg1ZjExLCAweDVmMTYs IDB4NWYyOSwKKyAgICAweDVmMmQsIDB4NWYzOCwgMHg1ZjQxLCAweDVmNDgsIDB4NWY0YywgMHg1 ZjRlLCAweDVmMmYsIDB4NWY1MSwKKyAgICAweDVmNTYsIDB4NWY1NywgMHg1ZjU5LCAweDVmNjEs IDB4NWY2ZCwgMHg1ZjczLCAweDVmNzcsIDB4NWY4MywKKyAgICAweDVmODIsIDB4NWY3ZiwgMHg1 ZjhhLCAweDVmODgsIDB4NWY5MSwgMHg1Zjg3LCAweDVmOWUsIDB4NWY5OSwKKyAgICAweDVmOTgs IDB4NWZhMCwgMHg1ZmE4LCAweDVmYWQsIDB4NWZiYywgMHg1ZmQ2LCAweDVmZmIsIDB4NWZlNCwK KyAgICAweDVmZjgsIDB4NWZmMSwgMHg1ZmRkLCAweDYwYjMsIDB4NWZmZiwgMHg2MDIxLCAweDYw NjAsIDB4ZmZmZCwKKyAgICAweDYwMTksIDB4NjAxMCwgMHg2MDI5LCAweDYwMGUsIDB4NjAzMSwg MHg2MDFiLCAweDYwMTUsIDB4NjAyYiwKKyAgICAweDYwMjYsIDB4NjAwZiwgMHg2MDNhLCAweDYw NWEsIDB4NjA0MSwgMHg2MDZhLCAweDYwNzcsIDB4NjA1ZiwKKyAgICAweDYwNGEsIDB4NjA0Niwg MHg2MDRkLCAweDYwNjMsIDB4NjA0MywgMHg2MDY0LCAweDYwNDIsIDB4NjA2YywKKyAgICAweDYw NmIsIDB4NjA1OSwgMHg2MDgxLCAweDYwOGQsIDB4NjBlNywgMHg2MDgzLCAweDYwOWEsIDB4NjA4 NCwKKyAgICAweDYwOWIsIDB4NjA5NiwgMHg2MDk3LCAweDYwOTIsIDB4NjBhNywgMHg2MDhiLCAw eDYwZTEsIDB4NjBiOCwKKyAgICAweDYwZTAsIDB4NjBkMywgMHg2MGI0LCAweDVmZjAsIDB4NjBi ZCwgMHg2MGM2LCAweDYwYjUsIDB4NjBkOCwKKyAgICAweDYxNGQsIDB4NjExNSwgMHg2MTA2LCAw eDYwZjYsIDB4NjBmNywgMHg2MTAwLCAweDYwZjQsIDB4NjBmYSwKKyAgICAweDYxMDMsIDB4NjEy MSwgMHg2MGZiLCAweDYwZjEsIDB4NjEwZCwgMHg2MTBlLCAweDYxNDcsIDB4NjEzZSwKKyAgICAw eDYxMjgsIDB4NjEyNywgMHg2MTRhLCAweDYxM2YsIDB4NjEzYywgMHg2MTJjLCAweDYxMzQsIDB4 NjEzZCwKKyAgICAweDYxNDIsIDB4NjE0NCwgMHg2MTczLCAweDYxNzcsIDB4NjE1OCwgMHg2MTU5 LCAweDYxNWEsIDB4NjE2YiwKKyAgICAweDYxNzQsIDB4NjE2ZiwgMHg2MTY1LCAweDYxNzEsIDB4 NjE1ZiwgMHg2MTVkLCAweDYxNTMsIDB4NjE3NSwKKyAgICAweDYxOTksIDB4NjE5NiwgMHg2MTg3 LCAweDYxYWMsIDB4NjE5NCwgMHg2MTlhLCAweDYxOGEsIDB4NjE5MSwKKyAgICAweDYxYWIsIDB4 NjFhZSwgMHg2MWNjLCAweDYxY2EsIDB4NjFjOSwgMHg2MWY3LCAweDYxYzgsIDB4NjFjMywKKyAg ICAweDYxYzYsIDB4NjFiYSwgMHg2MWNiLCAweDdmNzksIDB4NjFjZCwgMHg2MWU2LCAweDYxZTMs IDB4NjFmNiwKKyAgICAweDYxZmEsIDB4NjFmNCwgMHg2MWZmLCAweDYxZmQsIDB4NjFmYywgMHg2 MWZlLCAweDYyMDAsIDB4NjIwOCwKKyAgICAweDYyMDksIDB4NjIwZCwgMHg2MjBjLCAweDYyMTQs IDB4NjIxYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDYyMWUsIDB4NjIyMSwgMHg2MjJhLCAweDYyMmUsIDB4NjIz MCwgMHg2MjMyLCAweDYyMzMsIDB4NjI0MSwKKyAgICAweDYyNGUsIDB4NjI1ZSwgMHg2MjYzLCAw eDYyNWIsIDB4NjI2MCwgMHg2MjY4LCAweDYyN2MsIDB4NjI4MiwKKyAgICAweDYyODksIDB4NjI3 ZSwgMHg2MjkyLCAweDYyOTMsIDB4NjI5NiwgMHg2MmQ0LCAweDYyODMsIDB4NjI5NCwKKyAgICAw eDYyZDcsIDB4NjJkMSwgMHg2MmJiLCAweDYyY2YsIDB4NjJmZiwgMHg2MmM2LCAweDY0ZDQsIDB4 NjJjOCwKKyAgICAweDYyZGMsIDB4NjJjYywgMHg2MmNhLCAweDYyYzIsIDB4NjJjNywgMHg2Mjli LCAweDYyYzksIDB4NjMwYywKKyAgICAweDYyZWUsIDB4NjJmMSwgMHg2MzI3LCAweDYzMDIsIDB4 NjMwOCwgMHg2MmVmLCAweDYyZjUsIDB4NjM1MCwKKyAgICAweDYzM2UsIDB4NjM0ZCwgMHg2NDFj LCAweDYzNGYsIDB4NjM5NiwgMHg2MzhlLCAweDYzODAsIDB4NjNhYiwKKyAgICAweDYzNzYsIDB4 NjNhMywgMHg2MzhmLCAweDYzODksIDB4NjM5ZiwgMHg2M2I1LCAweDYzNmIsIDB4ZmZmZCwKKyAg ICAweDYzNjksIDB4NjNiZSwgMHg2M2U5LCAweDYzYzAsIDB4NjNjNiwgMHg2M2UzLCAweDYzYzks IDB4NjNkMiwKKyAgICAweDYzZjYsIDB4NjNjNCwgMHg2NDE2LCAweDY0MzQsIDB4NjQwNiwgMHg2 NDEzLCAweDY0MjYsIDB4NjQzNiwKKyAgICAweDY1MWQsIDB4NjQxNywgMHg2NDI4LCAweDY0MGYs IDB4NjQ2NywgMHg2NDZmLCAweDY0NzYsIDB4NjQ0ZSwKKyAgICAweDY1MmEsIDB4NjQ5NSwgMHg2 NDkzLCAweDY0YTUsIDB4NjRhOSwgMHg2NDg4LCAweDY0YmMsIDB4NjRkYSwKKyAgICAweDY0ZDIs IDB4NjRjNSwgMHg2NGM3LCAweDY0YmIsIDB4NjRkOCwgMHg2NGMyLCAweDY0ZjEsIDB4NjRlNywK KyAgICAweDgyMDksIDB4NjRlMCwgMHg2NGUxLCAweDYyYWMsIDB4NjRlMywgMHg2NGVmLCAweDY1 MmMsIDB4NjRmNiwKKyAgICAweDY0ZjQsIDB4NjRmMiwgMHg2NGZhLCAweDY1MDAsIDB4NjRmZCwg MHg2NTE4LCAweDY1MWMsIDB4NjUwNSwKKyAgICAweDY1MjQsIDB4NjUyMywgMHg2NTJiLCAweDY1 MzQsIDB4NjUzNSwgMHg2NTM3LCAweDY1MzYsIDB4NjUzOCwKKyAgICAweDc1NGIsIDB4NjU0OCwg MHg2NTU2LCAweDY1NTUsIDB4NjU0ZCwgMHg2NTU4LCAweDY1NWUsIDB4NjU1ZCwKKyAgICAweDY1 NzIsIDB4NjU3OCwgMHg2NTgyLCAweDY1ODMsIDB4OGI4YSwgMHg2NTliLCAweDY1OWYsIDB4NjVh YiwKKyAgICAweDY1YjcsIDB4NjVjMywgMHg2NWM2LCAweDY1YzEsIDB4NjVjNCwgMHg2NWNjLCAw eDY1ZDIsIDB4NjVkYiwKKyAgICAweDY1ZDksIDB4NjVlMCwgMHg2NWUxLCAweDY1ZjEsIDB4Njc3 MiwgMHg2NjBhLCAweDY2MDMsIDB4NjVmYiwKKyAgICAweDY3NzMsIDB4NjYzNSwgMHg2NjM2LCAw eDY2MzQsIDB4NjYxYywgMHg2NjRmLCAweDY2NDQsIDB4NjY0OSwKKyAgICAweDY2NDEsIDB4NjY1 ZSwgMHg2NjVkLCAweDY2NjQsIDB4NjY2NywgMHg2NjY4LCAweDY2NWYsIDB4NjY2MiwKKyAgICAw eDY2NzAsIDB4NjY4MywgMHg2Njg4LCAweDY2OGUsIDB4NjY4OSwgMHg2Njg0LCAweDY2OTgsIDB4 NjY5ZCwKKyAgICAweDY2YzEsIDB4NjZiOSwgMHg2NmM5LCAweDY2YmUsIDB4NjZiYywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDY2YzQsIDB4NjZiOCwgMHg2NmQ2LCAweDY2ZGEsIDB4NjZlMCwgMHg2NjNmLCAweDY2 ZTYsIDB4NjZlOSwKKyAgICAweDY2ZjAsIDB4NjZmNSwgMHg2NmY3LCAweDY3MGYsIDB4NjcxNiwg MHg2NzFlLCAweDY3MjYsIDB4NjcyNywKKyAgICAweDk3MzgsIDB4NjcyZSwgMHg2NzNmLCAweDY3 MzYsIDB4Njc0MSwgMHg2NzM4LCAweDY3MzcsIDB4Njc0NiwKKyAgICAweDY3NWUsIDB4Njc2MCwg MHg2NzU5LCAweDY3NjMsIDB4Njc2NCwgMHg2Nzg5LCAweDY3NzAsIDB4NjdhOSwKKyAgICAweDY3 N2MsIDB4Njc2YSwgMHg2NzhjLCAweDY3OGIsIDB4NjdhNiwgMHg2N2ExLCAweDY3ODUsIDB4Njdi NywKKyAgICAweDY3ZWYsIDB4NjdiNCwgMHg2N2VjLCAweDY3YjMsIDB4NjdlOSwgMHg2N2I4LCAw eDY3ZTQsIDB4NjdkZSwKKyAgICAweDY3ZGQsIDB4NjdlMiwgMHg2N2VlLCAweDY3YjksIDB4Njdj ZSwgMHg2N2M2LCAweDY3ZTcsIDB4NmE5YywKKyAgICAweDY4MWUsIDB4Njg0NiwgMHg2ODI5LCAw eDY4NDAsIDB4Njg0ZCwgMHg2ODMyLCAweDY4NGUsIDB4ZmZmZCwKKyAgICAweDY4YjMsIDB4Njgy YiwgMHg2ODU5LCAweDY4NjMsIDB4Njg3NywgMHg2ODdmLCAweDY4OWYsIDB4Njg4ZiwKKyAgICAw eDY4YWQsIDB4Njg5NCwgMHg2ODlkLCAweDY4OWIsIDB4Njg4MywgMHg2YWFlLCAweDY4YjksIDB4 Njg3NCwKKyAgICAweDY4YjUsIDB4NjhhMCwgMHg2OGJhLCAweDY5MGYsIDB4Njg4ZCwgMHg2ODdl LCAweDY5MDEsIDB4NjhjYSwKKyAgICAweDY5MDgsIDB4NjhkOCwgMHg2OTIyLCAweDY5MjYsIDB4 NjhlMSwgMHg2OTBjLCAweDY4Y2QsIDB4NjhkNCwKKyAgICAweDY4ZTcsIDB4NjhkNSwgMHg2OTM2 LCAweDY5MTIsIDB4NjkwNCwgMHg2OGQ3LCAweDY4ZTMsIDB4NjkyNSwKKyAgICAweDY4ZjksIDB4 NjhlMCwgMHg2OGVmLCAweDY5MjgsIDB4NjkyYSwgMHg2OTFhLCAweDY5MjMsIDB4NjkyMSwKKyAg ICAweDY4YzYsIDB4Njk3OSwgMHg2OTc3LCAweDY5NWMsIDB4Njk3OCwgMHg2OTZiLCAweDY5NTQs IDB4Njk3ZSwKKyAgICAweDY5NmUsIDB4NjkzOSwgMHg2OTc0LCAweDY5M2QsIDB4Njk1OSwgMHg2 OTMwLCAweDY5NjEsIDB4Njk1ZSwKKyAgICAweDY5NWQsIDB4Njk4MSwgMHg2OTZhLCAweDY5YjIs IDB4NjlhZSwgMHg2OWQwLCAweDY5YmYsIDB4NjljMSwKKyAgICAweDY5ZDMsIDB4NjliZSwgMHg2 OWNlLCAweDViZTgsIDB4NjljYSwgMHg2OWRkLCAweDY5YmIsIDB4NjljMywKKyAgICAweDY5YTcs IDB4NmEyZSwgMHg2OTkxLCAweDY5YTAsIDB4Njk5YywgMHg2OTk1LCAweDY5YjQsIDB4NjlkZSwK KyAgICAweDY5ZTgsIDB4NmEwMiwgMHg2YTFiLCAweDY5ZmYsIDB4NmIwYSwgMHg2OWY5LCAweDY5 ZjIsIDB4NjllNywKKyAgICAweDZhMDUsIDB4NjliMSwgMHg2YTFlLCAweDY5ZWQsIDB4NmExNCwg MHg2OWViLCAweDZhMGEsIDB4NmExMiwKKyAgICAweDZhYzEsIDB4NmEyMywgMHg2YTEzLCAweDZh NDQsIDB4NmEwYywgMHg2YTcyLCAweDZhMzYsIDB4NmE3OCwKKyAgICAweDZhNDcsIDB4NmE2Miwg MHg2YTU5LCAweDZhNjYsIDB4NmE0OCwgMHg2YTM4LCAweDZhMjIsIDB4NmE5MCwKKyAgICAweDZh OGQsIDB4NmFhMCwgMHg2YTg0LCAweDZhYTIsIDB4NmFhMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDZhOTcsIDB4 ODYxNywgMHg2YWJiLCAweDZhYzMsIDB4NmFjMiwgMHg2YWI4LCAweDZhYjMsIDB4NmFhYywKKyAg ICAweDZhZGUsIDB4NmFkMSwgMHg2YWRmLCAweDZhYWEsIDB4NmFkYSwgMHg2YWVhLCAweDZhZmIs IDB4NmIwNSwKKyAgICAweDg2MTYsIDB4NmFmYSwgMHg2YjEyLCAweDZiMTYsIDB4OWIzMSwgMHg2 YjFmLCAweDZiMzgsIDB4NmIzNywKKyAgICAweDc2ZGMsIDB4NmIzOSwgMHg5OGVlLCAweDZiNDcs IDB4NmI0MywgMHg2YjQ5LCAweDZiNTAsIDB4NmI1OSwKKyAgICAweDZiNTQsIDB4NmI1YiwgMHg2 YjVmLCAweDZiNjEsIDB4NmI3OCwgMHg2Yjc5LCAweDZiN2YsIDB4NmI4MCwKKyAgICAweDZiODQs IDB4NmI4MywgMHg2YjhkLCAweDZiOTgsIDB4NmI5NSwgMHg2YjllLCAweDZiYTQsIDB4NmJhYSwK KyAgICAweDZiYWIsIDB4NmJhZiwgMHg2YmIyLCAweDZiYjEsIDB4NmJiMywgMHg2YmI3LCAweDZi YmMsIDB4NmJjNiwKKyAgICAweDZiY2IsIDB4NmJkMywgMHg2YmRmLCAweDZiZWMsIDB4NmJlYiwg MHg2YmYzLCAweDZiZWYsIDB4ZmZmZCwKKyAgICAweDllYmUsIDB4NmMwOCwgMHg2YzEzLCAweDZj MTQsIDB4NmMxYiwgMHg2YzI0LCAweDZjMjMsIDB4NmM1ZSwKKyAgICAweDZjNTUsIDB4NmM2Miwg MHg2YzZhLCAweDZjODIsIDB4NmM4ZCwgMHg2YzlhLCAweDZjODEsIDB4NmM5YiwKKyAgICAweDZj N2UsIDB4NmM2OCwgMHg2YzczLCAweDZjOTIsIDB4NmM5MCwgMHg2Y2M0LCAweDZjZjEsIDB4NmNk MywKKyAgICAweDZjYmQsIDB4NmNkNywgMHg2Y2M1LCAweDZjZGQsIDB4NmNhZSwgMHg2Y2IxLCAw eDZjYmUsIDB4NmNiYSwKKyAgICAweDZjZGIsIDB4NmNlZiwgMHg2Y2Q5LCAweDZjZWEsIDB4NmQx ZiwgMHg4ODRkLCAweDZkMzYsIDB4NmQyYiwKKyAgICAweDZkM2QsIDB4NmQzOCwgMHg2ZDE5LCAw eDZkMzUsIDB4NmQzMywgMHg2ZDEyLCAweDZkMGMsIDB4NmQ2MywKKyAgICAweDZkOTMsIDB4NmQ2 NCwgMHg2ZDVhLCAweDZkNzksIDB4NmQ1OSwgMHg2ZDhlLCAweDZkOTUsIDB4NmZlNCwKKyAgICAw eDZkODUsIDB4NmRmOSwgMHg2ZTE1LCAweDZlMGEsIDB4NmRiNSwgMHg2ZGM3LCAweDZkZTYsIDB4 NmRiOCwKKyAgICAweDZkYzYsIDB4NmRlYywgMHg2ZGRlLCAweDZkY2MsIDB4NmRlOCwgMHg2ZGQy LCAweDZkYzUsIDB4NmRmYSwKKyAgICAweDZkZDksIDB4NmRlNCwgMHg2ZGQ1LCAweDZkZWEsIDB4 NmRlZSwgMHg2ZTJkLCAweDZlNmUsIDB4NmUyZSwKKyAgICAweDZlMTksIDB4NmU3MiwgMHg2ZTVm LCAweDZlM2UsIDB4NmUyMywgMHg2ZTZiLCAweDZlMmIsIDB4NmU3NiwKKyAgICAweDZlNGQsIDB4 NmUxZiwgMHg2ZTQzLCAweDZlM2EsIDB4NmU0ZSwgMHg2ZTI0LCAweDZlZmYsIDB4NmUxZCwKKyAg ICAweDZlMzgsIDB4NmU4MiwgMHg2ZWFhLCAweDZlOTgsIDB4NmVjOSwgMHg2ZWI3LCAweDZlZDMs IDB4NmViZCwKKyAgICAweDZlYWYsIDB4NmVjNCwgMHg2ZWIyLCAweDZlZDQsIDB4NmVkNSwgMHg2 ZThmLCAweDZlYTUsIDB4NmVjMiwKKyAgICAweDZlOWYsIDB4NmY0MSwgMHg2ZjExLCAweDcwNGMs IDB4NmVlYywgMHg2ZWY4LCAweDZlZmUsIDB4NmYzZiwKKyAgICAweDZlZjIsIDB4NmYzMSwgMHg2 ZWVmLCAweDZmMzIsIDB4NmVjYworfTsKKworc3RhdGljIFVTSE9SVCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNoaWZ0LUpJUyB0byBVbmljb2RlICovCitzanVfZTA0MFtdID0geyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMHhlMDQwIHRocnUgMHhlYWE0ICovCisgICAgMHg2ZjNl LCAweDZmMTMsIDB4NmVmNywgMHg2Zjg2LCAweDZmN2EsIDB4NmY3OCwgMHg2ZjgxLCAweDZmODAs CisgICAgMHg2ZjZmLCAweDZmNWIsIDB4NmZmMywgMHg2ZjZkLCAweDZmODIsIDB4NmY3YywgMHg2 ZjU4LCAweDZmOGUsCisgICAgMHg2ZjkxLCAweDZmYzIsIDB4NmY2NiwgMHg2ZmIzLCAweDZmYTMs IDB4NmZhMSwgMHg2ZmE0LCAweDZmYjksCisgICAgMHg2ZmM2LCAweDZmYWEsIDB4NmZkZiwgMHg2 ZmQ1LCAweDZmZWMsIDB4NmZkNCwgMHg2ZmQ4LCAweDZmZjEsCisgICAgMHg2ZmVlLCAweDZmZGIs IDB4NzAwOSwgMHg3MDBiLCAweDZmZmEsIDB4NzAxMSwgMHg3MDAxLCAweDcwMGYsCisgICAgMHg2 ZmZlLCAweDcwMWIsIDB4NzAxYSwgMHg2Zjc0LCAweDcwMWQsIDB4NzAxOCwgMHg3MDFmLCAweDcw MzAsCisgICAgMHg3MDNlLCAweDcwMzIsIDB4NzA1MSwgMHg3MDYzLCAweDcwOTksIDB4NzA5Miwg MHg3MGFmLCAweDcwZjEsCisgICAgMHg3MGFjLCAweDcwYjgsIDB4NzBiMywgMHg3MGFlLCAweDcw ZGYsIDB4NzBjYiwgMHg3MGRkLCAweGZmZmQsCisgICAgMHg3MGQ5LCAweDcxMDksIDB4NzBmZCwg MHg3MTFjLCAweDcxMTksIDB4NzE2NSwgMHg3MTU1LCAweDcxODgsCisgICAgMHg3MTY2LCAweDcx NjIsIDB4NzE0YywgMHg3MTU2LCAweDcxNmMsIDB4NzE4ZiwgMHg3MWZiLCAweDcxODQsCisgICAg MHg3MTk1LCAweDcxYTgsIDB4NzFhYywgMHg3MWQ3LCAweDcxYjksIDB4NzFiZSwgMHg3MWQyLCAw eDcxYzksCisgICAgMHg3MWQ0LCAweDcxY2UsIDB4NzFlMCwgMHg3MWVjLCAweDcxZTcsIDB4NzFm NSwgMHg3MWZjLCAweDcxZjksCisgICAgMHg3MWZmLCAweDcyMGQsIDB4NzIxMCwgMHg3MjFiLCAw eDcyMjgsIDB4NzIyZCwgMHg3MjJjLCAweDcyMzAsCisgICAgMHg3MjMyLCAweDcyM2IsIDB4NzIz YywgMHg3MjNmLCAweDcyNDAsIDB4NzI0NiwgMHg3MjRiLCAweDcyNTgsCisgICAgMHg3Mjc0LCAw eDcyN2UsIDB4NzI4MiwgMHg3MjgxLCAweDcyODcsIDB4NzI5MiwgMHg3Mjk2LCAweDcyYTIsCisg ICAgMHg3MmE3LCAweDcyYjksIDB4NzJiMiwgMHg3MmMzLCAweDcyYzYsIDB4NzJjNCwgMHg3MmNl LCAweDcyZDIsCisgICAgMHg3MmUyLCAweDcyZTAsIDB4NzJlMSwgMHg3MmY5LCAweDcyZjcsIDB4 NTAwZiwgMHg3MzE3LCAweDczMGEsCisgICAgMHg3MzFjLCAweDczMTYsIDB4NzMxZCwgMHg3MzM0 LCAweDczMmYsIDB4NzMyOSwgMHg3MzI1LCAweDczM2UsCisgICAgMHg3MzRlLCAweDczNGYsIDB4 OWVkOCwgMHg3MzU3LCAweDczNmEsIDB4NzM2OCwgMHg3MzcwLCAweDczNzgsCisgICAgMHg3Mzc1 LCAweDczN2IsIDB4NzM3YSwgMHg3M2M4LCAweDczYjMsIDB4NzNjZSwgMHg3M2JiLCAweDczYzAs CisgICAgMHg3M2U1LCAweDczZWUsIDB4NzNkZSwgMHg3NGEyLCAweDc0MDUsIDB4NzQ2ZiwgMHg3 NDI1LCAweDczZjgsCisgICAgMHg3NDMyLCAweDc0M2EsIDB4NzQ1NSwgMHg3NDNmLCAweDc0NWYs IDB4NzQ1OSwgMHg3NDQxLCAweDc0NWMsCisgICAgMHg3NDY5LCAweDc0NzAsIDB4NzQ2MywgMHg3 NDZhLCAweDc0NzYsIDB4NzQ3ZSwgMHg3NDhiLCAweDc0OWUsCisgICAgMHg3NGE3LCAweDc0Y2Es IDB4NzRjZiwgMHg3NGQ0LCAweDczZjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHg3NGUwLCAweDc0ZTMsIDB4NzRl NywgMHg3NGU5LCAweDc0ZWUsIDB4NzRmMiwgMHg3NGYwLCAweDc0ZjEsCisgICAgMHg3NGY4LCAw eDc0ZjcsIDB4NzUwNCwgMHg3NTAzLCAweDc1MDUsIDB4NzUwYywgMHg3NTBlLCAweDc1MGQsCisg ICAgMHg3NTE1LCAweDc1MTMsIDB4NzUxZSwgMHg3NTI2LCAweDc1MmMsIDB4NzUzYywgMHg3NTQ0 LCAweDc1NGQsCisgICAgMHg3NTRhLCAweDc1NDksIDB4NzU1YiwgMHg3NTQ2LCAweDc1NWEsIDB4 NzU2OSwgMHg3NTY0LCAweDc1NjcsCisgICAgMHg3NTZiLCAweDc1NmQsIDB4NzU3OCwgMHg3NTc2 LCAweDc1ODYsIDB4NzU4NywgMHg3NTc0LCAweDc1OGEsCisgICAgMHg3NTg5LCAweDc1ODIsIDB4 NzU5NCwgMHg3NTlhLCAweDc1OWQsIDB4NzVhNSwgMHg3NWEzLCAweDc1YzIsCisgICAgMHg3NWIz LCAweDc1YzMsIDB4NzViNSwgMHg3NWJkLCAweDc1YjgsIDB4NzViYywgMHg3NWIxLCAweDc1Y2Qs CisgICAgMHg3NWNhLCAweDc1ZDIsIDB4NzVkOSwgMHg3NWUzLCAweDc1ZGUsIDB4NzVmZSwgMHg3 NWZmLCAweGZmZmQsCisgICAgMHg3NWZjLCAweDc2MDEsIDB4NzVmMCwgMHg3NWZhLCAweDc1ZjIs IDB4NzVmMywgMHg3NjBiLCAweDc2MGQsCisgICAgMHg3NjA5LCAweDc2MWYsIDB4NzYyNywgMHg3 NjIwLCAweDc2MjEsIDB4NzYyMiwgMHg3NjI0LCAweDc2MzQsCisgICAgMHg3NjMwLCAweDc2M2Is IDB4NzY0NywgMHg3NjQ4LCAweDc2NDYsIDB4NzY1YywgMHg3NjU4LCAweDc2NjEsCisgICAgMHg3 NjYyLCAweDc2NjgsIDB4NzY2OSwgMHg3NjZhLCAweDc2NjcsIDB4NzY2YywgMHg3NjcwLCAweDc2 NzIsCisgICAgMHg3Njc2LCAweDc2NzgsIDB4NzY3YywgMHg3NjgwLCAweDc2ODMsIDB4NzY4OCwg MHg3NjhiLCAweDc2OGUsCisgICAgMHg3Njk2LCAweDc2OTMsIDB4NzY5OSwgMHg3NjlhLCAweDc2 YjAsIDB4NzZiNCwgMHg3NmI4LCAweDc2YjksCisgICAgMHg3NmJhLCAweDc2YzIsIDB4NzZjZCwg MHg3NmQ2LCAweDc2ZDIsIDB4NzZkZSwgMHg3NmUxLCAweDc2ZTUsCisgICAgMHg3NmU3LCAweDc2 ZWEsIDB4ODYyZiwgMHg3NmZiLCAweDc3MDgsIDB4NzcwNywgMHg3NzA0LCAweDc3MjksCisgICAg MHg3NzI0LCAweDc3MWUsIDB4NzcyNSwgMHg3NzI2LCAweDc3MWIsIDB4NzczNywgMHg3NzM4LCAw eDc3NDcsCisgICAgMHg3NzVhLCAweDc3NjgsIDB4Nzc2YiwgMHg3NzViLCAweDc3NjUsIDB4Nzc3 ZiwgMHg3NzdlLCAweDc3NzksCisgICAgMHg3NzhlLCAweDc3OGIsIDB4Nzc5MSwgMHg3N2EwLCAw eDc3OWUsIDB4NzdiMCwgMHg3N2I2LCAweDc3YjksCisgICAgMHg3N2JmLCAweDc3YmMsIDB4Nzdi ZCwgMHg3N2JiLCAweDc3YzcsIDB4NzdjZCwgMHg3N2Q3LCAweDc3ZGEsCisgICAgMHg3N2RjLCAw eDc3ZTMsIDB4NzdlZSwgMHg3N2ZjLCAweDc4MGMsIDB4NzgxMiwgMHg3OTI2LCAweDc4MjAsCisg ICAgMHg3OTJhLCAweDc4NDUsIDB4Nzg4ZSwgMHg3ODc0LCAweDc4ODYsIDB4Nzg3YywgMHg3ODlh LCAweDc4OGMsCisgICAgMHg3OGEzLCAweDc4YjUsIDB4NzhhYSwgMHg3OGFmLCAweDc4ZDEsIDB4 NzhjNiwgMHg3OGNiLCAweDc4ZDQsCisgICAgMHg3OGJlLCAweDc4YmMsIDB4NzhjNSwgMHg3OGNh LCAweDc4ZWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs CisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCisgICAgMHg3OGU3LCAweDc4ZGEsIDB4NzhmZCwgMHg3OGY0LCAweDc5 MDcsIDB4NzkxMiwgMHg3OTExLCAweDc5MTksCisgICAgMHg3OTJjLCAweDc5MmIsIDB4Nzk0MCwg MHg3OTYwLCAweDc5NTcsIDB4Nzk1ZiwgMHg3OTVhLCAweDc5NTUsCisgICAgMHg3OTUzLCAweDc5 N2EsIDB4Nzk3ZiwgMHg3OThhLCAweDc5OWQsIDB4NzlhNywgMHg5ZjRiLCAweDc5YWEsCisgICAg MHg3OWFlLCAweDc5YjMsIDB4NzliOSwgMHg3OWJhLCAweDc5YzksIDB4NzlkNSwgMHg3OWU3LCAw eDc5ZWMsCisgICAgMHg3OWUxLCAweDc5ZTMsIDB4N2EwOCwgMHg3YTBkLCAweDdhMTgsIDB4N2Ex OSwgMHg3YTIwLCAweDdhMWYsCisgICAgMHg3OTgwLCAweDdhMzEsIDB4N2EzYiwgMHg3YTNlLCAw eDdhMzcsIDB4N2E0MywgMHg3YTU3LCAweDdhNDksCisgICAgMHg3YTYxLCAweDdhNjIsIDB4N2E2 OSwgMHg5ZjlkLCAweDdhNzAsIDB4N2E3OSwgMHg3YTdkLCAweDdhODgsCisgICAgMHg3YTk3LCAw eDdhOTUsIDB4N2E5OCwgMHg3YTk2LCAweDdhYTksIDB4N2FjOCwgMHg3YWIwLCAweGZmZmQsCisg ICAgMHg3YWI2LCAweDdhYzUsIDB4N2FjNCwgMHg3YWJmLCAweDkwODMsIDB4N2FjNywgMHg3YWNh LCAweDdhY2QsCisgICAgMHg3YWNmLCAweDdhZDUsIDB4N2FkMywgMHg3YWQ5LCAweDdhZGEsIDB4 N2FkZCwgMHg3YWUxLCAweDdhZTIsCisgICAgMHg3YWU2LCAweDdhZWQsIDB4N2FmMCwgMHg3YjAy LCAweDdiMGYsIDB4N2IwYSwgMHg3YjA2LCAweDdiMzMsCisgICAgMHg3YjE4LCAweDdiMTksIDB4 N2IxZSwgMHg3YjM1LCAweDdiMjgsIDB4N2IzNiwgMHg3YjUwLCAweDdiN2EsCisgICAgMHg3YjA0 LCAweDdiNGQsIDB4N2IwYiwgMHg3YjRjLCAweDdiNDUsIDB4N2I3NSwgMHg3YjY1LCAweDdiNzQs CisgICAgMHg3YjY3LCAweDdiNzAsIDB4N2I3MSwgMHg3YjZjLCAweDdiNmUsIDB4N2I5ZCwgMHg3 Yjk4LCAweDdiOWYsCisgICAgMHg3YjhkLCAweDdiOWMsIDB4N2I5YSwgMHg3YjhiLCAweDdiOTIs IDB4N2I4ZiwgMHg3YjVkLCAweDdiOTksCisgICAgMHg3YmNiLCAweDdiYzEsIDB4N2JjYywgMHg3 YmNmLCAweDdiYjQsIDB4N2JjNiwgMHg3YmRkLCAweDdiZTksCisgICAgMHg3YzExLCAweDdjMTQs IDB4N2JlNiwgMHg3YmU1LCAweDdjNjAsIDB4N2MwMCwgMHg3YzA3LCAweDdjMTMsCisgICAgMHg3 YmYzLCAweDdiZjcsIDB4N2MxNywgMHg3YzBkLCAweDdiZjYsIDB4N2MyMywgMHg3YzI3LCAweDdj MmEsCisgICAgMHg3YzFmLCAweDdjMzcsIDB4N2MyYiwgMHg3YzNkLCAweDdjNGMsIDB4N2M0Mywg MHg3YzU0LCAweDdjNGYsCisgICAgMHg3YzQwLCAweDdjNTAsIDB4N2M1OCwgMHg3YzVmLCAweDdj NjQsIDB4N2M1NiwgMHg3YzY1LCAweDdjNmMsCisgICAgMHg3Yzc1LCAweDdjODMsIDB4N2M5MCwg MHg3Y2E0LCAweDdjYWQsIDB4N2NhMiwgMHg3Y2FiLCAweDdjYTEsCisgICAgMHg3Y2E4LCAweDdj YjMsIDB4N2NiMiwgMHg3Y2IxLCAweDdjYWUsIDB4N2NiOSwgMHg3Y2JkLCAweDdjYzAsCisgICAg MHg3Y2M1LCAweDdjYzIsIDB4N2NkOCwgMHg3Y2QyLCAweDdjZGMsIDB4N2NlMiwgMHg5YjNiLCAw eDdjZWYsCisgICAgMHg3Y2YyLCAweDdjZjQsIDB4N2NmNiwgMHg3Y2ZhLCAweDdkMDYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisg ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs CisgICAgMHg3ZDAyLCAweDdkMWMsIDB4N2QxNSwgMHg3ZDBhLCAweDdkNDUsIDB4N2Q0YiwgMHg3 ZDJlLCAweDdkMzIsCisgICAgMHg3ZDNmLCAweDdkMzUsIDB4N2Q0NiwgMHg3ZDczLCAweDdkNTYs IDB4N2Q0ZSwgMHg3ZDcyLCAweDdkNjgsCisgICAgMHg3ZDZlLCAweDdkNGYsIDB4N2Q2MywgMHg3 ZDkzLCAweDdkODksIDB4N2Q1YiwgMHg3ZDhmLCAweDdkN2QsCisgICAgMHg3ZDliLCAweDdkYmEs IDB4N2RhZSwgMHg3ZGEzLCAweDdkYjUsIDB4N2RjNywgMHg3ZGJkLCAweDdkYWIsCisgICAgMHg3 ZTNkLCAweDdkYTIsIDB4N2RhZiwgMHg3ZGRjLCAweDdkYjgsIDB4N2Q5ZiwgMHg3ZGIwLCAweDdk ZDgsCisgICAgMHg3ZGRkLCAweDdkZTQsIDB4N2RkZSwgMHg3ZGZiLCAweDdkZjIsIDB4N2RlMSwg MHg3ZTA1LCAweDdlMGEsCisgICAgMHg3ZTIzLCAweDdlMjEsIDB4N2UxMiwgMHg3ZTMxLCAweDdl MWYsIDB4N2UwOSwgMHg3ZTBiLCAweDdlMjIsCisgICAgMHg3ZTQ2LCAweDdlNjYsIDB4N2UzYiwg MHg3ZTM1LCAweDdlMzksIDB4N2U0MywgMHg3ZTM3LCAweGZmZmQsCisgICAgMHg3ZTMyLCAweDdl M2EsIDB4N2U2NywgMHg3ZTVkLCAweDdlNTYsIDB4N2U1ZSwgMHg3ZTU5LCAweDdlNWEsCisgICAg MHg3ZTc5LCAweDdlNmEsIDB4N2U2OSwgMHg3ZTdjLCAweDdlN2IsIDB4N2U4MywgMHg3ZGQ1LCAw eDdlN2QsCisgICAgMHg4ZmFlLCAweDdlN2YsIDB4N2U4OCwgMHg3ZTg5LCAweDdlOGMsIDB4N2U5 MiwgMHg3ZTkwLCAweDdlOTMsCisgICAgMHg3ZTk0LCAweDdlOTYsIDB4N2U4ZSwgMHg3ZTliLCAw eDdlOWMsIDB4N2YzOCwgMHg3ZjNhLCAweDdmNDUsCisgICAgMHg3ZjRjLCAweDdmNGQsIDB4N2Y0 ZSwgMHg3ZjUwLCAweDdmNTEsIDB4N2Y1NSwgMHg3ZjU0LCAweDdmNTgsCisgICAgMHg3ZjVmLCAw eDdmNjAsIDB4N2Y2OCwgMHg3ZjY5LCAweDdmNjcsIDB4N2Y3OCwgMHg3ZjgyLCAweDdmODYsCisg ICAgMHg3ZjgzLCAweDdmODgsIDB4N2Y4NywgMHg3ZjhjLCAweDdmOTQsIDB4N2Y5ZSwgMHg3Zjlk LCAweDdmOWEsCisgICAgMHg3ZmEzLCAweDdmYWYsIDB4N2ZiMiwgMHg3ZmI5LCAweDdmYWUsIDB4 N2ZiNiwgMHg3ZmI4LCAweDhiNzEsCisgICAgMHg3ZmM1LCAweDdmYzYsIDB4N2ZjYSwgMHg3ZmQ1 LCAweDdmZDQsIDB4N2ZlMSwgMHg3ZmU2LCAweDdmZTksCisgICAgMHg3ZmYzLCAweDdmZjksIDB4 OThkYywgMHg4MDA2LCAweDgwMDQsIDB4ODAwYiwgMHg4MDEyLCAweDgwMTgsCisgICAgMHg4MDE5 LCAweDgwMWMsIDB4ODAyMSwgMHg4MDI4LCAweDgwM2YsIDB4ODAzYiwgMHg4MDRhLCAweDgwNDYs CisgICAgMHg4MDUyLCAweDgwNTgsIDB4ODA1YSwgMHg4MDVmLCAweDgwNjIsIDB4ODA2OCwgMHg4 MDczLCAweDgwNzIsCisgICAgMHg4MDcwLCAweDgwNzYsIDB4ODA3OSwgMHg4MDdkLCAweDgwN2Ys IDB4ODA4NCwgMHg4MDg2LCAweDgwODUsCisgICAgMHg4MDliLCAweDgwOTMsIDB4ODA5YSwgMHg4 MGFkLCAweDUxOTAsIDB4ODBhYywgMHg4MGRiLCAweDgwZTUsCisgICAgMHg4MGQ5LCAweDgwZGQs IDB4ODBjNCwgMHg4MGRhLCAweDgwZDYsIDB4ODEwOSwgMHg4MGVmLCAweDgwZjEsCisgICAgMHg4 MTFiLCAweDgxMjksIDB4ODEyMywgMHg4MTJmLCAweDgxNGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHg5NjhiLCAw eDgxNDYsIDB4ODEzZSwgMHg4MTUzLCAweDgxNTEsIDB4ODBmYywgMHg4MTcxLCAweDgxNmUsCisg ICAgMHg4MTY1LCAweDgxNjYsIDB4ODE3NCwgMHg4MTgzLCAweDgxODgsIDB4ODE4YSwgMHg4MTgw LCAweDgxODIsCisgICAgMHg4MWEwLCAweDgxOTUsIDB4ODFhNCwgMHg4MWEzLCAweDgxNWYsIDB4 ODE5MywgMHg4MWE5LCAweDgxYjAsCisgICAgMHg4MWI1LCAweDgxYmUsIDB4ODFiOCwgMHg4MWJk LCAweDgxYzAsIDB4ODFjMiwgMHg4MWJhLCAweDgxYzksCisgICAgMHg4MWNkLCAweDgxZDEsIDB4 ODFkOSwgMHg4MWQ4LCAweDgxYzgsIDB4ODFkYSwgMHg4MWRmLCAweDgxZTAsCisgICAgMHg4MWU3 LCAweDgxZmEsIDB4ODFmYiwgMHg4MWZlLCAweDgyMDEsIDB4ODIwMiwgMHg4MjA1LCAweDgyMDcs CisgICAgMHg4MjBhLCAweDgyMGQsIDB4ODIxMCwgMHg4MjE2LCAweDgyMjksIDB4ODIyYiwgMHg4 MjM4LCAweDgyMzMsCisgICAgMHg4MjQwLCAweDgyNTksIDB4ODI1OCwgMHg4MjVkLCAweDgyNWEs IDB4ODI1ZiwgMHg4MjY0LCAweGZmZmQsCisgICAgMHg4MjYyLCAweDgyNjgsIDB4ODI2YSwgMHg4 MjZiLCAweDgyMmUsIDB4ODI3MSwgMHg4Mjc3LCAweDgyNzgsCisgICAgMHg4MjdlLCAweDgyOGQs IDB4ODI5MiwgMHg4MmFiLCAweDgyOWYsIDB4ODJiYiwgMHg4MmFjLCAweDgyZTEsCisgICAgMHg4 MmUzLCAweDgyZGYsIDB4ODJkMiwgMHg4MmY0LCAweDgyZjMsIDB4ODJmYSwgMHg4MzkzLCAweDgz MDMsCisgICAgMHg4MmZiLCAweDgyZjksIDB4ODJkZSwgMHg4MzA2LCAweDgyZGMsIDB4ODMwOSwg MHg4MmQ5LCAweDgzMzUsCisgICAgMHg4MzM0LCAweDgzMTYsIDB4ODMzMiwgMHg4MzMxLCAweDgz NDAsIDB4ODMzOSwgMHg4MzUwLCAweDgzNDUsCisgICAgMHg4MzJmLCAweDgzMmIsIDB4ODMxNywg MHg4MzE4LCAweDgzODUsIDB4ODM5YSwgMHg4M2FhLCAweDgzOWYsCisgICAgMHg4M2EyLCAweDgz OTYsIDB4ODMyMywgMHg4MzhlLCAweDgzODcsIDB4ODM4YSwgMHg4MzdjLCAweDgzYjUsCisgICAg MHg4MzczLCAweDgzNzUsIDB4ODNhMCwgMHg4Mzg5LCAweDgzYTgsIDB4ODNmNCwgMHg4NDEzLCAw eDgzZWIsCisgICAgMHg4M2NlLCAweDgzZmQsIDB4ODQwMywgMHg4M2Q4LCAweDg0MGIsIDB4ODNj MSwgMHg4M2Y3LCAweDg0MDcsCisgICAgMHg4M2UwLCAweDgzZjIsIDB4ODQwZCwgMHg4NDIyLCAw eDg0MjAsIDB4ODNiZCwgMHg4NDM4LCAweDg1MDYsCisgICAgMHg4M2ZiLCAweDg0NmQsIDB4ODQy YSwgMHg4NDNjLCAweDg1NWEsIDB4ODQ4NCwgMHg4NDc3LCAweDg0NmIsCisgICAgMHg4NGFkLCAw eDg0NmUsIDB4ODQ4MiwgMHg4NDY5LCAweDg0NDYsIDB4ODQyYywgMHg4NDZmLCAweDg0NzksCisg ICAgMHg4NDM1LCAweDg0Y2EsIDB4ODQ2MiwgMHg4NGI5LCAweDg0YmYsIDB4ODQ5ZiwgMHg4NGQ5 LCAweDg0Y2QsCisgICAgMHg4NGJiLCAweDg0ZGEsIDB4ODRkMCwgMHg4NGMxLCAweDg0YzYsIDB4 ODRkNiwgMHg4NGExLCAweDg1MjEsCisgICAgMHg4NGZmLCAweDg0ZjQsIDB4ODUxNywgMHg4NTE4 LCAweDg1MmMsIDB4ODUxZiwgMHg4NTE1LCAweDg1MTQsCisgICAgMHg4NGZjLCAweDg1NDAsIDB4 ODU2MywgMHg4NTU4LCAweDg1NDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs CisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHg4NTQxLCAweDg2MDIsIDB4ODU0Yiwg MHg4NTU1LCAweDg1ODAsIDB4ODVhNCwgMHg4NTg4LCAweDg1OTEsCisgICAgMHg4NThhLCAweDg1 YTgsIDB4ODU2ZCwgMHg4NTk0LCAweDg1OWIsIDB4ODVlYSwgMHg4NTg3LCAweDg1OWMsCisgICAg MHg4NTc3LCAweDg1N2UsIDB4ODU5MCwgMHg4NWM5LCAweDg1YmEsIDB4ODVjZiwgMHg4NWI5LCAw eDg1ZDAsCisgICAgMHg4NWQ1LCAweDg1ZGQsIDB4ODVlNSwgMHg4NWRjLCAweDg1ZjksIDB4ODYw YSwgMHg4NjEzLCAweDg2MGIsCisgICAgMHg4NWZlLCAweDg1ZmEsIDB4ODYwNiwgMHg4NjIyLCAw eDg2MWEsIDB4ODYzMCwgMHg4NjNmLCAweDg2NGQsCisgICAgMHg0ZTU1LCAweDg2NTQsIDB4ODY1 ZiwgMHg4NjY3LCAweDg2NzEsIDB4ODY5MywgMHg4NmEzLCAweDg2YTksCisgICAgMHg4NmFhLCAw eDg2OGIsIDB4ODY4YywgMHg4NmI2LCAweDg2YWYsIDB4ODZjNCwgMHg4NmM2LCAweDg2YjAsCisg ICAgMHg4NmM5LCAweDg4MjMsIDB4ODZhYiwgMHg4NmQ0LCAweDg2ZGUsIDB4ODZlOSwgMHg4NmVj LCAweGZmZmQsCisgICAgMHg4NmRmLCAweDg2ZGIsIDB4ODZlZiwgMHg4NzEyLCAweDg3MDYsIDB4 ODcwOCwgMHg4NzAwLCAweDg3MDMsCisgICAgMHg4NmZiLCAweDg3MTEsIDB4ODcwOSwgMHg4NzBk LCAweDg2ZjksIDB4ODcwYSwgMHg4NzM0LCAweDg3M2YsCisgICAgMHg4NzM3LCAweDg3M2IsIDB4 ODcyNSwgMHg4NzI5LCAweDg3MWEsIDB4ODc2MCwgMHg4NzVmLCAweDg3NzgsCisgICAgMHg4NzRj LCAweDg3NGUsIDB4ODc3NCwgMHg4NzU3LCAweDg3NjgsIDB4ODc2ZSwgMHg4NzU5LCAweDg3NTMs CisgICAgMHg4NzYzLCAweDg3NmEsIDB4ODgwNSwgMHg4N2EyLCAweDg3OWYsIDB4ODc4MiwgMHg4 N2FmLCAweDg3Y2IsCisgICAgMHg4N2JkLCAweDg3YzAsIDB4ODdkMCwgMHg5NmQ2LCAweDg3YWIs IDB4ODdjNCwgMHg4N2IzLCAweDg3YzcsCisgICAgMHg4N2M2LCAweDg3YmIsIDB4ODdlZiwgMHg4 N2YyLCAweDg3ZTAsIDB4ODgwZiwgMHg4ODBkLCAweDg3ZmUsCisgICAgMHg4N2Y2LCAweDg3Zjcs IDB4ODgwZSwgMHg4N2QyLCAweDg4MTEsIDB4ODgxNiwgMHg4ODE1LCAweDg4MjIsCisgICAgMHg4 ODIxLCAweDg4MzEsIDB4ODgzNiwgMHg4ODM5LCAweDg4MjcsIDB4ODgzYiwgMHg4ODQ0LCAweDg4 NDIsCisgICAgMHg4ODUyLCAweDg4NTksIDB4ODg1ZSwgMHg4ODYyLCAweDg4NmIsIDB4ODg4MSwg MHg4ODdlLCAweDg4OWUsCisgICAgMHg4ODc1LCAweDg4N2QsIDB4ODhiNSwgMHg4ODcyLCAweDg4 ODIsIDB4ODg5NywgMHg4ODkyLCAweDg4YWUsCisgICAgMHg4ODk5LCAweDg4YTIsIDB4ODg4ZCwg MHg4OGE0LCAweDg4YjAsIDB4ODhiZiwgMHg4OGIxLCAweDg4YzMsCisgICAgMHg4OGM0LCAweDg4 ZDQsIDB4ODhkOCwgMHg4OGQ5LCAweDg4ZGQsIDB4ODhmOSwgMHg4OTAyLCAweDg4ZmMsCisgICAg MHg4OGY0LCAweDg4ZTgsIDB4ODhmMiwgMHg4OTA0LCAweDg5MGMsIDB4ODkwYSwgMHg4OTEzLCAw eDg5NDMsCisgICAgMHg4OTFlLCAweDg5MjUsIDB4ODkyYSwgMHg4OTJiLCAweDg5NDEsIDB4ODk0 NCwgMHg4OTNiLCAweDg5MzYsCisgICAgMHg4OTM4LCAweDg5NGMsIDB4ODkxZCwgMHg4OTYwLCAw eDg5NWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisg ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs CisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCisgICAgMHg4OTY2LCAweDg5NjQsIDB4ODk2ZCwgMHg4OTZhLCAweDg5NmYs IDB4ODk3NCwgMHg4OTc3LCAweDg5N2UsCisgICAgMHg4OTgzLCAweDg5ODgsIDB4ODk4YSwgMHg4 OTkzLCAweDg5OTgsIDB4ODlhMSwgMHg4OWE5LCAweDg5YTYsCisgICAgMHg4OWFjLCAweDg5YWYs IDB4ODliMiwgMHg4OWJhLCAweDg5YmQsIDB4ODliZiwgMHg4OWMwLCAweDg5ZGEsCisgICAgMHg4 OWRjLCAweDg5ZGQsIDB4ODllNywgMHg4OWY0LCAweDg5ZjgsIDB4OGEwMywgMHg4YTE2LCAweDhh MTAsCisgICAgMHg4YTBjLCAweDhhMWIsIDB4OGExZCwgMHg4YTI1LCAweDhhMzYsIDB4OGE0MSwg MHg4YTViLCAweDhhNTIsCisgICAgMHg4YTQ2LCAweDhhNDgsIDB4OGE3YywgMHg4YTZkLCAweDhh NmMsIDB4OGE2MiwgMHg4YTg1LCAweDhhODIsCisgICAgMHg4YTg0LCAweDhhYTgsIDB4OGFhMSwg MHg4YTkxLCAweDhhYTUsIDB4OGFhNiwgMHg4YTlhLCAweDhhYTMsCisgICAgMHg4YWM0LCAweDhh Y2QsIDB4OGFjMiwgMHg4YWRhLCAweDhhZWIsIDB4OGFmMywgMHg4YWU3LCAweGZmZmQsCisgICAg MHg4YWU0LCAweDhhZjEsIDB4OGIxNCwgMHg4YWUwLCAweDhhZTIsIDB4OGFmNywgMHg4YWRlLCAw eDhhZGIsCisgICAgMHg4YjBjLCAweDhiMDcsIDB4OGIxYSwgMHg4YWUxLCAweDhiMTYsIDB4OGIx MCwgMHg4YjE3LCAweDhiMjAsCisgICAgMHg4YjMzLCAweDk3YWIsIDB4OGIyNiwgMHg4YjJiLCAw eDhiM2UsIDB4OGIyOCwgMHg4YjQxLCAweDhiNGMsCisgICAgMHg4YjRmLCAweDhiNGUsIDB4OGI0 OSwgMHg4YjU2LCAweDhiNWIsIDB4OGI1YSwgMHg4YjZiLCAweDhiNWYsCisgICAgMHg4YjZjLCAw eDhiNmYsIDB4OGI3NCwgMHg4YjdkLCAweDhiODAsIDB4OGI4YywgMHg4YjhlLCAweDhiOTIsCisg ICAgMHg4YjkzLCAweDhiOTYsIDB4OGI5OSwgMHg4YjlhLCAweDhjM2EsIDB4OGM0MSwgMHg4YzNm LCAweDhjNDgsCisgICAgMHg4YzRjLCAweDhjNGUsIDB4OGM1MCwgMHg4YzU1LCAweDhjNjIsIDB4 OGM2YywgMHg4Yzc4LCAweDhjN2EsCisgICAgMHg4YzgyLCAweDhjODksIDB4OGM4NSwgMHg4Yzhh LCAweDhjOGQsIDB4OGM4ZSwgMHg4Yzk0LCAweDhjN2MsCisgICAgMHg4Yzk4LCAweDYyMWQsIDB4 OGNhZCwgMHg4Y2FhLCAweDhjYmQsIDB4OGNiMiwgMHg4Y2IzLCAweDhjYWUsCisgICAgMHg4Y2I2 LCAweDhjYzgsIDB4OGNjMSwgMHg4Y2U0LCAweDhjZTMsIDB4OGNkYSwgMHg4Y2ZkLCAweDhjZmEs CisgICAgMHg4Y2ZiLCAweDhkMDQsIDB4OGQwNSwgMHg4ZDBhLCAweDhkMDcsIDB4OGQwZiwgMHg4 ZDBkLCAweDhkMTAsCisgICAgMHg5ZjRlLCAweDhkMTMsIDB4OGNjZCwgMHg4ZDE0LCAweDhkMTYs IDB4OGQ2NywgMHg4ZDZkLCAweDhkNzEsCisgICAgMHg4ZDczLCAweDhkODEsIDB4OGQ5OSwgMHg4 ZGMyLCAweDhkYmUsIDB4OGRiYSwgMHg4ZGNmLCAweDhkZGEsCisgICAgMHg4ZGQ2LCAweDhkY2Ms IDB4OGRkYiwgMHg4ZGNiLCAweDhkZWEsIDB4OGRlYiwgMHg4ZGRmLCAweDhkZTMsCisgICAgMHg4 ZGZjLCAweDhlMDgsIDB4OGUwOSwgMHg4ZGZmLCAweDhlMWQsIDB4OGUxZSwgMHg4ZTEwLCAweDhl MWYsCisgICAgMHg4ZTQyLCAweDhlMzUsIDB4OGUzMCwgMHg4ZTM0LCAweDhlNGEsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisg ICAgMHg4ZTQ3LCAweDhlNDksIDB4OGU0YywgMHg4ZTUwLCAweDhlNDgsIDB4OGU1OSwgMHg4ZTY0 LCAweDhlNjAsCisgICAgMHg4ZTJhLCAweDhlNjMsIDB4OGU1NSwgMHg4ZTc2LCAweDhlNzIsIDB4 OGU3YywgMHg4ZTgxLCAweDhlODcsCisgICAgMHg4ZTg1LCAweDhlODQsIDB4OGU4YiwgMHg4ZThh LCAweDhlOTMsIDB4OGU5MSwgMHg4ZTk0LCAweDhlOTksCisgICAgMHg4ZWFhLCAweDhlYTEsIDB4 OGVhYywgMHg4ZWIwLCAweDhlYzYsIDB4OGViMSwgMHg4ZWJlLCAweDhlYzUsCisgICAgMHg4ZWM4 LCAweDhlY2IsIDB4OGVkYiwgMHg4ZWUzLCAweDhlZmMsIDB4OGVmYiwgMHg4ZWViLCAweDhlZmUs CisgICAgMHg4ZjBhLCAweDhmMDUsIDB4OGYxNSwgMHg4ZjEyLCAweDhmMTksIDB4OGYxMywgMHg4 ZjFjLCAweDhmMWYsCisgICAgMHg4ZjFiLCAweDhmMGMsIDB4OGYyNiwgMHg4ZjMzLCAweDhmM2Is IDB4OGYzOSwgMHg4ZjQ1LCAweDhmNDIsCisgICAgMHg4ZjNlLCAweDhmNGMsIDB4OGY0OSwgMHg4 ZjQ2LCAweDhmNGUsIDB4OGY1NywgMHg4ZjVjLCAweGZmZmQsCisgICAgMHg4ZjYyLCAweDhmNjMs IDB4OGY2NCwgMHg4ZjljLCAweDhmOWYsIDB4OGZhMywgMHg4ZmFkLCAweDhmYWYsCisgICAgMHg4 ZmI3LCAweDhmZGEsIDB4OGZlNSwgMHg4ZmUyLCAweDhmZWEsIDB4OGZlZiwgMHg5MDg3LCAweDhm ZjQsCisgICAgMHg5MDA1LCAweDhmZjksIDB4OGZmYSwgMHg5MDExLCAweDkwMTUsIDB4OTAyMSwg MHg5MDBkLCAweDkwMWUsCisgICAgMHg5MDE2LCAweDkwMGIsIDB4OTAyNywgMHg5MDM2LCAweDkw MzUsIDB4OTAzOSwgMHg4ZmY4LCAweDkwNGYsCisgICAgMHg5MDUwLCAweDkwNTEsIDB4OTA1Miwg MHg5MDBlLCAweDkwNDksIDB4OTAzZSwgMHg5MDU2LCAweDkwNTgsCisgICAgMHg5MDVlLCAweDkw NjgsIDB4OTA2ZiwgMHg5MDc2LCAweDk2YTgsIDB4OTA3MiwgMHg5MDgyLCAweDkwN2QsCisgICAg MHg5MDgxLCAweDkwODAsIDB4OTA4YSwgMHg5MDg5LCAweDkwOGYsIDB4OTBhOCwgMHg5MGFmLCAw eDkwYjEsCisgICAgMHg5MGI1LCAweDkwZTIsIDB4OTBlNCwgMHg2MjQ4LCAweDkwZGIsIDB4OTEw MiwgMHg5MTEyLCAweDkxMTksCisgICAgMHg5MTMyLCAweDkxMzAsIDB4OTE0YSwgMHg5MTU2LCAw eDkxNTgsIDB4OTE2MywgMHg5MTY1LCAweDkxNjksCisgICAgMHg5MTczLCAweDkxNzIsIDB4OTE4 YiwgMHg5MTg5LCAweDkxODIsIDB4OTFhMiwgMHg5MWFiLCAweDkxYWYsCisgICAgMHg5MWFhLCAw eDkxYjUsIDB4OTFiNCwgMHg5MWJhLCAweDkxYzAsIDB4OTFjMSwgMHg5MWM5LCAweDkxY2IsCisg ICAgMHg5MWQwLCAweDkxZDYsIDB4OTFkZiwgMHg5MWUxLCAweDkxZGIsIDB4OTFmYywgMHg5MWY1 LCAweDkxZjYsCisgICAgMHg5MjFlLCAweDkxZmYsIDB4OTIxNCwgMHg5MjJjLCAweDkyMTUsIDB4 OTIxMSwgMHg5MjVlLCAweDkyNTcsCisgICAgMHg5MjQ1LCAweDkyNDksIDB4OTI2NCwgMHg5MjQ4 LCAweDkyOTUsIDB4OTIzZiwgMHg5MjRiLCAweDkyNTAsCisgICAgMHg5MjljLCAweDkyOTYsIDB4 OTI5MywgMHg5MjliLCAweDkyNWEsIDB4OTJjZiwgMHg5MmI5LCAweDkyYjcsCisgICAgMHg5MmU5 LCAweDkzMGYsIDB4OTJmYSwgMHg5MzQ0LCAweDkzMmUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs CisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHg5MzE5LCAweDkz MjIsIDB4OTMxYSwgMHg5MzIzLCAweDkzM2EsIDB4OTMzNSwgMHg5MzNiLCAweDkzNWMsCisgICAg MHg5MzYwLCAweDkzN2MsIDB4OTM2ZSwgMHg5MzU2LCAweDkzYjAsIDB4OTNhYywgMHg5M2FkLCAw eDkzOTQsCisgICAgMHg5M2I5LCAweDkzZDYsIDB4OTNkNywgMHg5M2U4LCAweDkzZTUsIDB4OTNk OCwgMHg5M2MzLCAweDkzZGQsCisgICAgMHg5M2QwLCAweDkzYzgsIDB4OTNlNCwgMHg5NDFhLCAw eDk0MTQsIDB4OTQxMywgMHg5NDAzLCAweDk0MDcsCisgICAgMHg5NDEwLCAweDk0MzYsIDB4OTQy YiwgMHg5NDM1LCAweDk0MjEsIDB4OTQzYSwgMHg5NDQxLCAweDk0NTIsCisgICAgMHg5NDQ0LCAw eDk0NWIsIDB4OTQ2MCwgMHg5NDYyLCAweDk0NWUsIDB4OTQ2YSwgMHg5MjI5LCAweDk0NzAsCisg ICAgMHg5NDc1LCAweDk0NzcsIDB4OTQ3ZCwgMHg5NDVhLCAweDk0N2MsIDB4OTQ3ZSwgMHg5NDgx LCAweDk0N2YsCisgICAgMHg5NTgyLCAweDk1ODcsIDB4OTU4YSwgMHg5NTk0LCAweDk1OTYsIDB4 OTU5OCwgMHg5NTk5LCAweGZmZmQsCisgICAgMHg5NWEwLCAweDk1YTgsIDB4OTVhNywgMHg5NWFk LCAweDk1YmMsIDB4OTViYiwgMHg5NWI5LCAweDk1YmUsCisgICAgMHg5NWNhLCAweDZmZjYsIDB4 OTVjMywgMHg5NWNkLCAweDk1Y2MsIDB4OTVkNSwgMHg5NWQ0LCAweDk1ZDYsCisgICAgMHg5NWRj LCAweDk1ZTEsIDB4OTVlNSwgMHg5NWUyLCAweDk2MjEsIDB4OTYyOCwgMHg5NjJlLCAweDk2MmYs CisgICAgMHg5NjQyLCAweDk2NGMsIDB4OTY0ZiwgMHg5NjRiLCAweDk2NzcsIDB4OTY1YywgMHg5 NjVlLCAweDk2NWQsCisgICAgMHg5NjVmLCAweDk2NjYsIDB4OTY3MiwgMHg5NjZjLCAweDk2OGQs IDB4OTY5OCwgMHg5Njk1LCAweDk2OTcsCisgICAgMHg5NmFhLCAweDk2YTcsIDB4OTZiMSwgMHg5 NmIyLCAweDk2YjAsIDB4OTZiNCwgMHg5NmI2LCAweDk2YjgsCisgICAgMHg5NmI5LCAweDk2Y2Us IDB4OTZjYiwgMHg5NmM5LCAweDk2Y2QsIDB4ODk0ZCwgMHg5NmRjLCAweDk3MGQsCisgICAgMHg5 NmQ1LCAweDk2ZjksIDB4OTcwNCwgMHg5NzA2LCAweDk3MDgsIDB4OTcxMywgMHg5NzBlLCAweDk3 MTEsCisgICAgMHg5NzBmLCAweDk3MTYsIDB4OTcxOSwgMHg5NzI0LCAweDk3MmEsIDB4OTczMCwg MHg5NzM5LCAweDk3M2QsCisgICAgMHg5NzNlLCAweDk3NDQsIDB4OTc0NiwgMHg5NzQ4LCAweDk3 NDIsIDB4OTc0OSwgMHg5NzVjLCAweDk3NjAsCisgICAgMHg5NzY0LCAweDk3NjYsIDB4OTc2OCwg MHg1MmQyLCAweDk3NmIsIDB4OTc3MSwgMHg5Nzc5LCAweDk3ODUsCisgICAgMHg5NzdjLCAweDk3 ODEsIDB4OTc3YSwgMHg5Nzg2LCAweDk3OGIsIDB4OTc4ZiwgMHg5NzkwLCAweDk3OWMsCisgICAg MHg5N2E4LCAweDk3YTYsIDB4OTdhMywgMHg5N2IzLCAweDk3YjQsIDB4OTdjMywgMHg5N2M2LCAw eDk3YzgsCisgICAgMHg5N2NiLCAweDk3ZGMsIDB4OTdlZCwgMHg5ZjRmLCAweDk3ZjIsIDB4N2Fk ZiwgMHg5N2Y2LCAweDk3ZjUsCisgICAgMHg5ODBmLCAweDk4MGMsIDB4OTgzOCwgMHg5ODI0LCAw eDk4MjEsIDB4OTgzNywgMHg5ODNkLCAweDk4NDYsCisgICAgMHg5ODRmLCAweDk4NGIsIDB4OTg2 YiwgMHg5ODZmLCAweDk4NzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisg ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs CisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHg5ODcxLCAweDk4NzQsIDB4OTg3MywgMHg5 OGFhLCAweDk4YWYsIDB4OThiMSwgMHg5OGI2LCAweDk4YzQsCisgICAgMHg5OGMzLCAweDk4YzYs IDB4OThlOSwgMHg5OGViLCAweDk5MDMsIDB4OTkwOSwgMHg5OTEyLCAweDk5MTQsCisgICAgMHg5 OTE4LCAweDk5MjEsIDB4OTkxZCwgMHg5OTFlLCAweDk5MjQsIDB4OTkyMCwgMHg5OTJjLCAweDk5 MmUsCisgICAgMHg5OTNkLCAweDk5M2UsIDB4OTk0MiwgMHg5OTQ5LCAweDk5NDUsIDB4OTk1MCwg MHg5OTRiLCAweDk5NTEsCisgICAgMHg5OTUyLCAweDk5NGMsIDB4OTk1NSwgMHg5OTk3LCAweDk5 OTgsIDB4OTlhNSwgMHg5OWFkLCAweDk5YWUsCisgICAgMHg5OWJjLCAweDk5ZGYsIDB4OTlkYiwg MHg5OWRkLCAweDk5ZDgsIDB4OTlkMSwgMHg5OWVkLCAweDk5ZWUsCisgICAgMHg5OWYxLCAweDk5 ZjIsIDB4OTlmYiwgMHg5OWY4LCAweDlhMDEsIDB4OWEwZiwgMHg5YTA1LCAweDk5ZTIsCisgICAg MHg5YTE5LCAweDlhMmIsIDB4OWEzNywgMHg5YTQ1LCAweDlhNDIsIDB4OWE0MCwgMHg5YTQzLCAw eGZmZmQsCisgICAgMHg5YTNlLCAweDlhNTUsIDB4OWE0ZCwgMHg5YTViLCAweDlhNTcsIDB4OWE1 ZiwgMHg5YTYyLCAweDlhNjUsCisgICAgMHg5YTY0LCAweDlhNjksIDB4OWE2YiwgMHg5YTZhLCAw eDlhYWQsIDB4OWFiMCwgMHg5YWJjLCAweDlhYzAsCisgICAgMHg5YWNmLCAweDlhZDEsIDB4OWFk MywgMHg5YWQ0LCAweDlhZGUsIDB4OWFkZiwgMHg5YWUyLCAweDlhZTMsCisgICAgMHg5YWU2LCAw eDlhZWYsIDB4OWFlYiwgMHg5YWVlLCAweDlhZjQsIDB4OWFmMSwgMHg5YWY3LCAweDlhZmIsCisg ICAgMHg5YjA2LCAweDliMTgsIDB4OWIxYSwgMHg5YjFmLCAweDliMjIsIDB4OWIyMywgMHg5YjI1 LCAweDliMjcsCisgICAgMHg5YjI4LCAweDliMjksIDB4OWIyYSwgMHg5YjJlLCAweDliMmYsIDB4 OWIzMiwgMHg5YjQ0LCAweDliNDMsCisgICAgMHg5YjRmLCAweDliNGQsIDB4OWI0ZSwgMHg5YjUx LCAweDliNTgsIDB4OWI3NCwgMHg5YjkzLCAweDliODMsCisgICAgMHg5YjkxLCAweDliOTYsIDB4 OWI5NywgMHg5YjlmLCAweDliYTAsIDB4OWJhOCwgMHg5YmI0LCAweDliYzAsCisgICAgMHg5YmNh LCAweDliYjksIDB4OWJjNiwgMHg5YmNmLCAweDliZDEsIDB4OWJkMiwgMHg5YmUzLCAweDliZTIs CisgICAgMHg5YmU0LCAweDliZDQsIDB4OWJlMSwgMHg5YzNhLCAweDliZjIsIDB4OWJmMSwgMHg5 YmYwLCAweDljMTUsCisgICAgMHg5YzE0LCAweDljMDksIDB4OWMxMywgMHg5YzBjLCAweDljMDYs IDB4OWMwOCwgMHg5YzEyLCAweDljMGEsCisgICAgMHg5YzA0LCAweDljMmUsIDB4OWMxYiwgMHg5 YzI1LCAweDljMjQsIDB4OWMyMSwgMHg5YzMwLCAweDljNDcsCisgICAgMHg5YzMyLCAweDljNDYs IDB4OWMzZSwgMHg5YzVhLCAweDljNjAsIDB4OWM2NywgMHg5Yzc2LCAweDljNzgsCisgICAgMHg5 Y2U3LCAweDljZWMsIDB4OWNmMCwgMHg5ZDA5LCAweDlkMDgsIDB4OWNlYiwgMHg5ZDAzLCAweDlk MDYsCisgICAgMHg5ZDJhLCAweDlkMjYsIDB4OWRhZiwgMHg5ZDIzLCAweDlkMWYsIDB4OWQ0NCwg MHg5ZDE1LCAweDlkMTIsCisgICAgMHg5ZDQxLCAweDlkM2YsIDB4OWQzZSwgMHg5ZDQ2LCAweDlk NDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisg ICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsCisgICAgMHg5ZDVkLCAweDlkNWUsIDB4OWQ2NCwgMHg5ZDUxLCAweDlkNTAsIDB4 OWQ1OSwgMHg5ZDcyLCAweDlkODksCisgICAgMHg5ZDg3LCAweDlkYWIsIDB4OWQ2ZiwgMHg5ZDdh LCAweDlkOWEsIDB4OWRhNCwgMHg5ZGE5LCAweDlkYjIsCisgICAgMHg5ZGM0LCAweDlkYzEsIDB4 OWRiYiwgMHg5ZGI4LCAweDlkYmEsIDB4OWRjNiwgMHg5ZGNmLCAweDlkYzIsCisgICAgMHg5ZGQ5 LCAweDlkZDMsIDB4OWRmOCwgMHg5ZGU2LCAweDlkZWQsIDB4OWRlZiwgMHg5ZGZkLCAweDllMWEs CisgICAgMHg5ZTFiLCAweDllMWUsIDB4OWU3NSwgMHg5ZTc5LCAweDllN2QsIDB4OWU4MSwgMHg5 ZTg4LCAweDllOGIsCisgICAgMHg5ZThjLCAweDllOTIsIDB4OWU5NSwgMHg5ZTkxLCAweDllOWQs IDB4OWVhNSwgMHg5ZWE5LCAweDllYjgsCisgICAgMHg5ZWFhLCAweDllYWQsIDB4OTc2MSwgMHg5 ZWNjLCAweDllY2UsIDB4OWVjZiwgMHg5ZWQwLCAweDllZDQsCisgICAgMHg5ZWRjLCAweDllZGUs IDB4OWVkZCwgMHg5ZWUwLCAweDllZTUsIDB4OWVlOCwgMHg5ZWVmLCAweGZmZmQsCisgICAgMHg5 ZWY0LCAweDllZjYsIDB4OWVmNywgMHg5ZWY5LCAweDllZmIsIDB4OWVmYywgMHg5ZWZkLCAweDlm MDcsCisgICAgMHg5ZjA4LCAweDc2YjcsIDB4OWYxNSwgMHg5ZjIxLCAweDlmMmMsIDB4OWYzZSwg MHg5ZjRhLCAweDlmNTIsCisgICAgMHg5ZjU0LCAweDlmNjMsIDB4OWY1ZiwgMHg5ZjYwLCAweDlm NjEsIDB4OWY2NiwgMHg5ZjY3LCAweDlmNmMsCisgICAgMHg5ZjZhLCAweDlmNzcsIDB4OWY3Miwg MHg5Zjc2LCAweDlmOTUsIDB4OWY5YywgMHg5ZmEwLCAweDU4MmYsCisgICAgMHg2OWM3LCAweDkw NTksIDB4NzQ2NCwgMHg1MWRjLCAweDcxOTkKK307CisKKy8qIFVuaWNvZGUtdG8tS2FuamkgdGFi bGVzLi4uICovCisKK3N0YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBV bmljb2RlIHRvIFNoaWZ0LUpJUyAqLwordXNqXzAzOTFbXSA9IHsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDB4MDM5MSB0aHJ1IDB4MDM5YyAqLworICAgIDB4ODM5ZiwgMHg4M2EwLCAweDgz YTEsIDB4ODNhMiwgMHg4M2EzLCAweDgzYTQsIDB4ODNhNSwgMHg4M2E2LAorICAgIDB4ODNhNywg MHg4M2E4LCAweDgzYTksIDB4ODNhYSwgMHg4M2FiLCAweDgzYWMsIDB4ODNhZCwgMHg4M2FlLAor ICAgIDB4ODNhZiwgMHhmZmZkLCAweDgzYjAsIDB4ODNiMSwgMHg4M2IyLCAweDgzYjMsIDB4ODNi NCwgMHg4M2I1LAorICAgIDB4ODNiNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ODNiZiwgMHg4M2MwLCAweDgzYzEsIDB4ODNj MiwgMHg4M2MzLCAweDgzYzQsIDB4ODNjNSwgMHg4M2M2LAorICAgIDB4ODNjNywgMHg4M2M4LCAw eDgzYzksIDB4ODNjYSwgMHg4M2NiLCAweDgzY2MsIDB4ODNjZCwgMHg4M2NlLAorICAgIDB4ODNj ZiwgMHhmZmZkLCAweDgzZDAsIDB4ODNkMSwgMHg4M2QyLCAweDgzZDMsIDB4ODNkNCwgMHg4M2Q1 LCAweDgzZDYKK307CisKK3N0YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBVbmljb2RlIHRvIFNoaWZ0LUpJUyAqLwordXNqXzA0MDFbXSA9IHsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDB4MDQwMSB0aHJ1IDB4MDQ1MSAqLworICAgIDB4ODQ0NiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4NDQw LAorICAgIDB4ODQ0MSwgMHg4NDQyLCAweDg0NDMsIDB4ODQ0NCwgMHg4NDQ1LCAweDg0NDcsIDB4 ODQ0OCwgMHg4NDQ5LAorICAgIDB4ODQ0YSwgMHg4NDRiLCAweDg0NGMsIDB4ODQ0ZCwgMHg4NDRl LCAweDg0NGYsIDB4ODQ1MCwgMHg4NDUxLAorICAgIDB4ODQ1MiwgMHg4NDUzLCAweDg0NTQsIDB4 ODQ1NSwgMHg4NDU2LCAweDg0NTcsIDB4ODQ1OCwgMHg4NDU5LAorICAgIDB4ODQ1YSwgMHg4NDVi LCAweDg0NWMsIDB4ODQ1ZCwgMHg4NDVlLCAweDg0NWYsIDB4ODQ2MCwgMHg4NDcwLAorICAgIDB4 ODQ3MSwgMHg4NDcyLCAweDg0NzMsIDB4ODQ3NCwgMHg4NDc1LCAweDg0NzcsIDB4ODQ3OCwgMHg4 NDc5LAorICAgIDB4ODQ3YSwgMHg4NDdiLCAweDg0N2MsIDB4ODQ3ZCwgMHg4NDdlLCAweDg0ODAs IDB4ODQ4MSwgMHg4NDgyLAorICAgIDB4ODQ4MywgMHg4NDg0LCAweDg0ODUsIDB4ODQ4NiwgMHg4 NDg3LCAweDg0ODgsIDB4ODQ4OSwgMHg4NDhhLAorICAgIDB4ODQ4YiwgMHg4NDhjLCAweDg0OGQs IDB4ODQ4ZSwgMHg4NDhmLCAweDg0OTAsIDB4ODQ5MSwgMHhmZmZkLCAweDg0NzYKK307CisKK3N0 YXRpYyBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2RlIHRvIFNoaWZ0 LUpJUyAqLwordXNqXzMwMDBbXSA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MzAw MCB0aHJ1IDB4MzBmZiAqLworICAgIDB4ODE0MCwgMHg4MTQxLCAweDgxNDIsIDB4ODE1NiwgMHhm ZmZkLCAweDgxNTgsIDB4ODE1OSwgMHg4MTVhLAorICAgIDB4ODE3MSwgMHg4MTcyLCAweDgxNzMs IDB4ODE3NCwgMHg4MTc1LCAweDgxNzYsIDB4ODE3NywgMHg4MTc4LAorICAgIDB4ODE3OSwgMHg4 MTdhLCAweDgxYTcsIDB4ODFhYywgMHg4MTZiLCAweDgxNmMsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4MTYwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAor ICAgIDB4ZmZmZCwgMHg4MjlmLCAweDgyYTAsIDB4ODJhMSwgMHg4MmEyLCAweDgyYTMsIDB4ODJh NCwgMHg4MmE1LAorICAgIDB4ODJhNiwgMHg4MmE3LCAweDgyYTgsIDB4ODJhOSwgMHg4MmFhLCAw eDgyYWIsIDB4ODJhYywgMHg4MmFkLAorICAgIDB4ODJhZSwgMHg4MmFmLCAweDgyYjAsIDB4ODJi MSwgMHg4MmIyLCAweDgyYjMsIDB4ODJiNCwgMHg4MmI1LAorICAgIDB4ODJiNiwgMHg4MmI3LCAw eDgyYjgsIDB4ODJiOSwgMHg4MmJhLCAweDgyYmIsIDB4ODJiYywgMHg4MmJkLAorICAgIDB4ODJi ZSwgMHg4MmJmLCAweDgyYzAsIDB4ODJjMSwgMHg4MmMyLCAweDgyYzMsIDB4ODJjNCwgMHg4MmM1 LAorICAgIDB4ODJjNiwgMHg4MmM3LCAweDgyYzgsIDB4ODJjOSwgMHg4MmNhLCAweDgyY2IsIDB4 ODJjYywgMHg4MmNkLAorICAgIDB4ODJjZSwgMHg4MmNmLCAweDgyZDAsIDB4ODJkMSwgMHg4MmQy LCAweDgyZDMsIDB4ODJkNCwgMHg4MmQ1LAorICAgIDB4ODJkNiwgMHg4MmQ3LCAweDgyZDgsIDB4 ODJkOSwgMHg4MmRhLCAweDgyZGIsIDB4ODJkYywgMHg4MmRkLAorICAgIDB4ODJkZSwgMHg4MmRm LCAweDgyZTAsIDB4ODJlMSwgMHg4MmUyLCAweDgyZTMsIDB4ODJlNCwgMHg4MmU1LAorICAgIDB4 ODJlNiwgMHg4MmU3LCAweDgyZTgsIDB4ODJlOSwgMHg4MmVhLCAweDgyZWIsIDB4ODJlYywgMHg4 MmVkLAorICAgIDB4ODJlZSwgMHg4MmVmLCAweDgyZjAsIDB4ODJmMSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODE0YSwgMHg4 MTRiLCAweDgxNTQsIDB4ODE1NSwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHg4MzQwLCAweDgzNDEs IDB4ODM0MiwgMHg4MzQzLCAweDgzNDQsIDB4ODM0NSwgMHg4MzQ2LAorICAgIDB4ODM0NywgMHg4 MzQ4LCAweDgzNDksIDB4ODM0YSwgMHg4MzRiLCAweDgzNGMsIDB4ODM0ZCwgMHg4MzRlLAorICAg IDB4ODM0ZiwgMHg4MzUwLCAweDgzNTEsIDB4ODM1MiwgMHg4MzUzLCAweDgzNTQsIDB4ODM1NSwg MHg4MzU2LAorICAgIDB4ODM1NywgMHg4MzU4LCAweDgzNTksIDB4ODM1YSwgMHg4MzViLCAweDgz NWMsIDB4ODM1ZCwgMHg4MzVlLAorICAgIDB4ODM1ZiwgMHg4MzYwLCAweDgzNjEsIDB4ODM2Miwg MHg4MzYzLCAweDgzNjQsIDB4ODM2NSwgMHg4MzY2LAorICAgIDB4ODM2NywgMHg4MzY4LCAweDgz NjksIDB4ODM2YSwgMHg4MzZiLCAweDgzNmMsIDB4ODM2ZCwgMHg4MzZlLAorICAgIDB4ODM2Ziwg MHg4MzcwLCAweDgzNzEsIDB4ODM3MiwgMHg4MzczLCAweDgzNzQsIDB4ODM3NSwgMHg4Mzc2LAor ICAgIDB4ODM3NywgMHg4Mzc4LCAweDgzNzksIDB4ODM3YSwgMHg4MzdiLCAweDgzN2MsIDB4ODM3 ZCwgMHg4MzdlLAorICAgIDB4ODM4MCwgMHg4MzgxLCAweDgzODIsIDB4ODM4MywgMHg4Mzg0LCAw eDgzODUsIDB4ODM4NiwgMHg4Mzg3LAorICAgIDB4ODM4OCwgMHg4Mzg5LCAweDgzOGEsIDB4ODM4 YiwgMHg4MzhjLCAweDgzOGQsIDB4ODM4ZSwgMHg4MzhmLAorICAgIDB4ODM5MCwgMHg4MzkxLCAw eDgzOTIsIDB4ODM5MywgMHg4Mzk0LCAweDgzOTUsIDB4ODM5NiwgMHhmZmZkLAorICAgIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODE0NSwgMHg4MTViLCAweDgxNTIsIDB4ODE1MywgMHhmZmZk Cit9OworCitzdGF0aWMgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5pY29k ZSB0byBTaGlmdC1KSVMgKi8KK3Vzal9mZjAwW10gPSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAweGZmMDAgdGhydSAweDBmZjlmICovCisgICAgMHhmZmZkLCAweDgxNDksIDB4ZmZmZCwg MHg4MTk0LCAweDgxOTAsIDB4ODE5MywgMHg4MTk1LCAweGZmZmQsCisgICAgMHg4MTY5LCAweDgx NmEsIDB4ODE5NiwgMHg4MTdiLCAweDgxNDMsIDB4ZmZmZCwgMHg4MTQ0LCAweDgxNWUsCisgICAg MHg4MjRmLCAweDgyNTAsIDB4ODI1MSwgMHg4MjUyLCAweDgyNTMsIDB4ODI1NCwgMHg4MjU1LCAw eDgyNTYsCisgICAgMHg4MjU3LCAweDgyNTgsIDB4ODE0NiwgMHg4MTQ3LCAweDgxODMsIDB4ODE4 MSwgMHg4MTg0LCAweDgxNDgsCisgICAgMHg4MTk3LCAweDgyNjAsIDB4ODI2MSwgMHg4MjYyLCAw eDgyNjMsIDB4ODI2NCwgMHg4MjY1LCAweDgyNjYsCisgICAgMHg4MjY3LCAweDgyNjgsIDB4ODI2 OSwgMHg4MjZhLCAweDgyNmIsIDB4ODI2YywgMHg4MjZkLCAweDgyNmUsCisgICAgMHg4MjZmLCAw eDgyNzAsIDB4ODI3MSwgMHg4MjcyLCAweDgyNzMsIDB4ODI3NCwgMHg4Mjc1LCAweDgyNzYsCisg ICAgMHg4Mjc3LCAweDgyNzgsIDB4ODI3OSwgMHg4MTZkLCAweGZmZmQsIDB4ODE2ZSwgMHg4MTRm LCAweDgxNTEsCisgICAgMHg4MTRkLCAweDgyODEsIDB4ODI4MiwgMHg4MjgzLCAweDgyODQsIDB4 ODI4NSwgMHg4Mjg2LCAweDgyODcsCisgICAgMHg4Mjg4LCAweDgyODksIDB4ODI4YSwgMHg4Mjhi LCAweDgyOGMsIDB4ODI4ZCwgMHg4MjhlLCAweDgyOGYsCisgICAgMHg4MjkwLCAweDgyOTEsIDB4 ODI5MiwgMHg4MjkzLCAweDgyOTQsIDB4ODI5NSwgMHg4Mjk2LCAweDgyOTcsCisgICAgMHg4Mjk4 LCAweDgyOTksIDB4ODI5YSwgMHg4MTZmLCAweDgxNjIsIDB4ODE3MCwgMHhmZmZkLCAweGZmZmQs CisgICAgMHhmZmZkLCAweDAwYTEsIDB4MDBhMiwgMHgwMGEzLCAweDAwYTQsIDB4MDBhNSwgMHgw MGE2LCAweDAwYTcsCisgICAgMHgwMGE4LCAweDAwYTksIDB4MDBhYSwgMHgwMGFiLCAweDAwYWMs IDB4MDBhZCwgMHgwMGFlLCAweDAwYWYsCisgICAgMHgwMGIwLCAweDAwYjEsIDB4MDBiMiwgMHgw MGIzLCAweDAwYjQsIDB4MDBiNSwgMHgwMGI2LCAweDAwYjcsCisgICAgMHgwMGI4LCAweDAwYjks IDB4MDBiYSwgMHgwMGJiLCAweDAwYmMsIDB4MDBiZCwgMHgwMGJlLCAweDAwYmYsCisgICAgMHgw MGMwLCAweDAwYzEsIDB4MDBjMiwgMHgwMGMzLCAweDAwYzQsIDB4MDBjNSwgMHgwMGM2LCAweDAw YzcsCisgICAgMHgwMGM4LCAweDAwYzksIDB4MDBjYSwgMHgwMGNiLCAweDAwY2MsIDB4MDBjZCwg MHgwMGNlLCAweDAwY2YsCisgICAgMHgwMGQwLCAweDAwZDEsIDB4MDBkMiwgMHgwMGQzLCAweDAw ZDQsIDB4MDBkNSwgMHgwMGQ2LCAweDAwZDcsCisgICAgMHgwMGQ4LCAweDAwZDksIDB4MDBkYSwg MHgwMGRiLCAweDAwZGMsIDB4MDBkZCwgMHgwMGRlLCAweDAwZGYKK307CisKKy8qIE5vdyBvbmUg aHVtb25nb3VzIHRhYmxlIGZvciBLYW5qaSAqLworCitzdGF0aWMgVVNIT1JUICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVW5pY29kZSB0byBTaGlmdC1KSVMgKi8KK3Vzal80ZTAwW10gPSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDRlMDAgdGhydSAweDlmYTAgKi8KKyAgICAw eDg4ZWEsIDB4OTI5YSwgMHhmZmZkLCAweDhlYjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTY5YywKKyAgICAweDhmZTQsIDB4OGU0ZiwgMHg4ZmUzLCAweDg5YmEsIDB4ZmZmZCwgMHg5NTcz LCAweDk3NWUsIDB4ZmZmZCwKKyAgICAweDk4YTAsIDB4ODk0ZSwgMHhmZmZkLCAweGZmZmQsIDB4 OGE4ZSwgMHg5OGExLCAweDkwYTIsIDB4OTljMCwKKyAgICAweDhiNzUsIDB4OTViOCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmZTUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OTdiYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YzAsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg5OGEyLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mjg2LCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OThhMywgMHg4YmY4LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk4YTQsIDB4ZmZmZCwKKyAgICAweDhhZGIsIDB4OTI0ZiwgMHhmZmZkLCAweDhlZTUs IDB4OThhNSwgMHhmZmZkLCAweGZmZmQsIDB4OThhNiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 OGE3LCAweDk0NTQsIDB4ZmZmZCwgMHg4Yjc2LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk0NTYsIDB4ZmZmZCwgMHg5M2UxLCAweDhjYzEsIDB4OTY1MiwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTY4LCAweDk4 YTgsIDB4OGZlNiwKKyAgICAweDk4YTksIDB4ODliMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4YmUzLCAweDhjZWUsIDB4OTZlNywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YmE0LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OTc5MCwgMHhmZmZkLCAweDkzZmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhhYTMsIDB4ZmZmZCwKKyAgICAweDhiNTQsIDB4ZmZmZCwgMHg5OGFhLCAweGZmZmQsIDB4ZmZm ZCwgMHg5OGFiLCAweDk3YjksIDB4ZmZmZCwKKyAgICAweDk3NWMsIDB4OTE4OCwgMHg5OGFkLCAw eDhlOTYsIDB4OTNmMSwgMHhmZmZkLCAweDk4YjAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODk1 ZCwgMHg4Y2RkLCAweGZmZmQsIDB4OGNkYywgMHg4OGU0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDk4NmEsIDB4OTg2OSwgMHhmZmZkLCAweDhkYjEsIDB4ODg5ZiwgMHhmZmZkLCAweDk4YjEsIDB4 OThiMiwKKyAgICAweDk4YjMsIDB4OTY1MywgMHg5OGI0LCAweGZmZmQsIDB4OGNmMCwgMHg4OGU1 LCAweDk2OTIsIDB4ZmZmZCwKKyAgICAweDhiOWMsIDB4ZmZmZCwgMHhmZmZkLCAweDhiOWQsIDB4 OGI5ZSwgMHg5MmUwLCAweDk3YmEsIDB4ZmZmZCwKKyAgICAweDk4YjUsIDB4ZmZmZCwgMHhmZmZk LCAweDk4YjYsIDB4ZmZmZCwgMHhmZmZkLCAweDk4YjcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5MDZjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDhmNTksIDB4OTA2ZCwgMHg5OGJjLCAweGZmZmQsIDB4OThiYSwgMHhmZmZkLCAweDk4YmIs IDB4OGI3NywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZGExLCAweDg5ZWUsIDB4ZmZmZCwgMHg5 OGI5LCAweDk4YjgsIDB4OTVhNywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGU2NSwgMHg4ZTY0LCAweDkxYmMsIDB4OThiZCwKKyAgICAweDk1NzQsIDB4OTBlNSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4MTU3LCAweDk4YmUsIDB4OThjMCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkxZTMsIDB4OTdkZiwgMHg4OGM4LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGJmLCAweDg5 YmMsIDB4ZmZmZCwKKyAgICAweDhiYzIsIDB4ZmZmZCwgMHg5Mjg3LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhjOGYsIDB4OThjMSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0 NDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGFlOSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OThjMiwgMHg4OGM5LCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2RlLCAweDhhZWEsIDB4OTU5 YSwKKyAgICAweDk0YjAsIDB4OGI3OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OWVmLCAweGZmZmQsIDB4OThl NSwgMHg5MzYwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ4YywKKyAgICAw eDk4YzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRiYSwgMHhmZmZkLCAweDk3ZTAsIDB4 ZmZmZCwKKyAgICAweDkwNGMsIDB4ZmZmZCwgMHg4ZTY2LCAweGZmZmQsIDB4OGU5NywgMHg4OWJl LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyY2YsIDB4 ZmZmZCwgMHhmZmZkLCAweDkyNDEsIDB4OThjOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4OGNhLCAweDkyZTEsIDB4OGY1YSwKKyAgICAweDhkYjIsIDB4 OTc0MywgMHhmZmZkLCAweDkxY2MsIDB4ZmZmZCwgMHg4OWJkLCAweGZmZmQsIDB4OThjNywKKyAg ICAweGZmZmQsIDB4OTc1ZCwgMHg5OGMzLCAweDk4YzUsIDB4OGRlYywgMHg5OGM2LCAweDliNDMs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OThjZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThkMSwKKyAgICAweDk4Y2YsIDB4ZmZmZCwgMHhm ZmZkLCAweDg5YzAsIDB4ZmZmZCwgMHg5NWI5LCAweDk4YzksIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk4Y2QsIDB4OGNmMSwgMHhmZmZkLCAweGZmZmQsIDB4OGU2NywK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYTQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4 ZDIsIDB4ZmZmZCwKKyAgICAweDk4Y2EsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZTEsIDB4ZmZmZCwg MHg4ZTk4LCAweGZmZmQsIDB4OThjYiwKKyAgICAweGZmZmQsIDB4OThkMCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZDMsIDB4ZmZmZCwKKyAgICAweDk4Y2MsIDB4ZmZmZCwg MHhmZmZkLCAweDhiOWYsIDB4ZmZmZCwgMHg4OGNiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhi YTAsIDB4ODliZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNDQsIDB4ZmZmZCwgMHg5Njk5LCAw eDk1OGUsIDB4OGNmMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MDRlLCAweDk3YjUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVkNiwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg4YzU3LCAweDkxYTMsIDB4ODllMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg4ZjcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZDcsIDB4 ZmZmZCwKKyAgICAweDk4ZGMsIDB4OThkYSwgMHhmZmZkLCAweGZmZmQsIDB4OThkNSwgMHhmZmZk LCAweGZmZmQsIDB4OTFhZCwKKyAgICAweDk4ZDgsIDB4ZmZmZCwgMHg5OGRiLCAweDk4ZDksIDB4 ZmZmZCwgMHg5NWRiLCAweGZmZmQsIDB4OThkNiwKKyAgICAweGZmZmQsIDB4OTA0ZCwgMHhmZmZk LCAweDk2OTMsIDB4OThkZCwgMHg5OGRlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNDMsIDB4OThlYiwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0NmYsIDB4ZmZmZCwgMHg5NTU1LCAweDk4ZTYs IDB4ZmZmZCwKKyAgICAweDk1ZWUsIDB4ZmZmZCwgMHg4OWI0LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk4ZWEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5OGU0LCAweDk4ZWQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTE3MSwgMHhm ZmZkLCAweDhjYzIsIDB4ZmZmZCwgMHg5NDdiLCAweGZmZmQsIDB4ZTBjNSwKKyAgICAweGZmZmQs IDB4OThlYywgMHg5MzdjLCAweGZmZmQsIDB4OThlMSwgMHhmZmZkLCAweDhjZjQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OGNmMywgMHg5OGRmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGVkOCwKKyAgICAweGZmZmQsIDB4OThlNywgMHhmZmZkLCAweDk1ZWQsIDB4OTI2Yywg MHg5OGUzLCAweDhjOTEsIDB4ZmZmZCwKKyAgICAweDk4ZTAsIDB4OThlOCwgMHg5OGUyLCAweDk3 Y2YsIDB4OThlOSwgMHg5ODYwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiZTQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OGM5MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZWUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OThlZiwKKyAgICAweDk4ZjMsIDB4ODhjYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVjZSwKKyAgICAweDk4ZjIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5OGYxLCAweDk4ZjUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg5OGY0LCAweGZmZmQsIDB4OTJlMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzkyLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OThmNiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZWMzLCAweGZmZmQsIDB4 OTFhNCwgMHg5MmUzLCAweDhiZjQsIDB4ZmZmZCwKKyAgICAweDk4ZjcsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4YjU1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk4ZjgsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OGZhLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjU0LCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGM4NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhlNTAsIDB4OTRmNSwgMHg5OGY5LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRjMywgMHg5NzYyLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5OGZjLCAweDk5NDIsIDB4OThmYiwgMHg4ZGMyLCAweGZm ZmQsIDB4OGY5ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhjNTgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5OTQzLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YmNkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTk0MCwg MHg5OTQxLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2FkLCAweGZmZmQsIDB4OTE5YywKKyAgICAweGZm ZmQsIDB4OGJhMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NjZjLCAweDk5NDQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5N2JiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk5NDUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5NDgsIDB4ZmZm ZCwgMHg5OTQ2LCAweGZmZmQsIDB4OTE2ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5OTQ3LCAweDk5NDksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTRiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OTk0YSwgMHhmZmZkLCAweDk1YzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDhiNTYsIDB4OTk0ZCwgMHg5OTRlLCAweGZmZmQsIDB4ODlhZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTk0YywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZWYy LCAweGZmZmQsIDB4OTk1MSwgMHg5OTUwLCAweDk5NGYsIDB4ZmZmZCwKKyAgICAweDk4ZDQsIDB4 ZmZmZCwgMHg5OTUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY5ZSwKKyAg ICAweGZmZmQsIDB4OTk1MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NzQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NmQ3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk1NSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 OTU0LCAweDk5NTcsIDB4OTk1NiwgMHhmZmZkLCAweGZmZmQsIDB4OTk1OCwKKyAgICAweDk5NTks IDB4ODhmMiwgMHhmZmZkLCAweDhjYjMsIDB4OGM1YSwgMHg4ZjViLCAweDkyOWIsIDB4OGJhMiwK KyAgICAweDkwZTYsIDB4OGNmNSwgMHhmZmZkLCAweDhkOGUsIDB4OTk1YiwgMHg5NmM2LCAweDkz NjUsIDB4ZmZmZCwKKyAgICAweDhlOTksIDB4ZmZmZCwgMHg5OTVhLCAweGZmZmQsIDB4OTk1Yywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MzdkLCAweGZm ZmQsIDB4OGE5NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg5OTVkLCAweGZmZmQsIDB4ZmZmZCwgMHg5M2ZjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkx NTMsIDB4OTk1ZiwgMHg5OTYwLCAweDk0YWEsIDB4OGNmNiwgMHg5ODVhLCAweDk5NjEsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4OGJhNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWJhLCAw eDkxYjQsIDB4OGJlZiwKKyAgICAweDkzNTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM5 MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk5NjIsIDB4ZmZmZCwgMHg5OTYzLCAw eGZmZmQsIDB4ZmZmZCwgMHg5M2UwLCAweDg5N2UsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTk2 NiwgMHg4ZGZiLCAweGZmZmQsIDB4OTk2NSwgMHg4ZGM0LCAweGZmZmQsIDB4OTk2NywKKyAgICAw eGUzZWMsIDB4OTk2OCwgMHg5NjYwLCAweDk5NjksIDB4ZmZmZCwgMHg5OTZhLCAweDk5NmIsIDB4 OGZlNywKKyAgICAweGZmZmQsIDB4OGVjYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhYTUsIDB4ZmZmZCwgMHg5OTZlLCAweGZmZmQsIDB4 OTk2YywgMHg5NmJiLCAweDk5NmQsIDB4ZmZmZCwKKyAgICAweDk1NzksIDB4OTk2ZiwgMHg5OTcw LCAweDk5NzEsIDB4OTM3ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk5NzUsIDB4 OTk3MywgMHg5OTc0LCAweDk5NzIsIDB4OGRlMSwgMHg5OTc2LCAweDk2ZTgsIDB4OTdlMiwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTc3LCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBhNiwgMHg5 OTc4LCAweDhmNzksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTk3OSwgMHhmZmZkLCAweDkyOWMs IDB4OTdiZCwgMHg5MzgwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5YzMsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk5N2EsIDB4ZWFhMywgMHg4YmMzLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDk5N2IsIDB4OTY3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhm ODgsIDB4OTFmYSwKKyAgICAweGZmZmQsIDB4OTk3ZCwgMHg5M2UyLCAweGZmZmQsIDB4ZmZmZCwg MHg5OTdlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk5ODAsIDB4OGE0ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5OTgxLCAweDhiYTUsIDB4ZmZmZCwKKyAgICAweDkzY2EsIDB4ODk5YSwg MHg4ZjZmLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDlmLCAweDk5ODIsIDB4ZmZmZCwKKyAgICAweDkz ODEsIDB4ZmZmZCwgMHhmZmZkLCAweDkwNmUsIDB4OTk4MywgMHhmZmZkLCAweDk1YWEsIDB4OTBk OCwKKyAgICAweDhhYTAsIDB4ZmZmZCwgMHg4YWE3LCAweDk5ODQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk5ODYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGM1OSwgMHhmZmZkLCAweGZmZmQsIDB4OTk4 NSwgMHhmZmZkLCAweGZmZmQsIDB4OTdmMSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4Zjg5LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRiYiwgMHg5NWNhLCAweGZmZmQsIDB4OTk4NywKKyAgICAw eGZmZmQsIDB4OTc5OCwgMHg5OTg4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5ODksIDB4 ZmZmZCwKKyAgICAweDkzOWUsIDB4ZmZmZCwgMHhmZmZkLCAweDk5OGEsIDB4ZmZmZCwgMHhmZmZk LCAweDkwYTcsIDB4OGRmYywKKyAgICAweDhjOTQsIDB4OTk4YiwgMHg4ZTY4LCAweDhkOGYsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkyZTQsIDB4OTk4ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFhNSwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg4ZGVkLCAweDk5OGUsIDB4OTk4ZiwgMHg5MTRmLCAweGZmZmQsIDB4OTk4YywKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTk5MSwgMHhmZmZkLCAweDk2NTUs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkODQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk5OTAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjOTUs IDB4OGRkYywgMHg5NDhkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTk5NCwgMHg5 OTkyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU5YiwKKyAgICAweDhmZTgs IDB4OTk5YiwgMHg4YTg0LCAweDk5OTUsIDB4OTk5MywgMHg5MTZlLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OTk3LCAweGZm ZmQsIDB4OTk5NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNjMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGM4MCwKKyAgICAweDk5OWMsIDB4OTdhYiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5OTk4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTk5ZCwg MHg5OTlhLCAweGZmZmQsIDB4OTk5OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3Y2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNm NywKKyAgICAweDg5YzEsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZjIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGY5NSwgMHg5Mzc3LCAweDhkODUsIDB4OTlh MCwgMHg5OWExLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTdlMywgMHhmZmZkLCAw eGZmZmQsIDB4OTg0YSwgMHg5OWEzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGNm OCwgMHhmZmZkLCAweGZmZmQsIDB4OTlhMiwgMHhmZmZkLCAweDhhNGUsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OTlhNCwgMHhmZmZkLCAweDk2NzUsIDB4ZmZmZCwgMHg5MmJhLCAweGZmZmQsIDB4 OTc0NSwKKyAgICAweGZmZmQsIDB4OTVkNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWE1 LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlOGQzLCAweGZmZmQsIDB4 ZmZmZCwgMHg5M2FlLCAweGZmZmQsIDB4OTlhNiwKKyAgICAweDhhYTgsIDB4OTZiMSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjlmLCAweDk5YTcsIDB4OTVlNSwKKyAgICAweDk5YWIsIDB4 ZmZmZCwgMHg5MGE4LCAweDk5YTgsIDB4OGJjZSwgMHhmZmZkLCAweDk5YTksIDB4OGFhOSwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YzRkLCAweDk5YWMsIDB4ZmZmZCwgMHg5 OWFkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk5YWUsIDB4OTlhZiwgMHg4ZWQ5LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhjZjksIDB4OTZkYywKKyAgICAweGZmZmQsIDB4OTZlNiwgMHg5 M2Y1LCAweGZmZmQsIDB4ZmZmZCwgMHg5NWVmLCAweDk5YjAsIDB4ZmZmZCwKKyAgICAweDk5YjEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWIzLCAweGZmZmQsIDB4OTliNSwK KyAgICAweDk5YjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWI2LCAweDg5 YmIsIDB4OTY2YiwKKyAgICAweGZmZmQsIDB4OGRmYSwgMHg5OWI3LCAweGZmZmQsIDB4ZmZmZCwg MHg5MTc4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhmYTAsIDB4OGJhNywgMHhmZmZkLCAweDk5 YjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg5NGQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTliOSwKKyAgICAweGZm ZmQsIDB4OTliYSwgMHhmZmZkLCAweDk5YmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDk5YmMsIDB4OTU0MywgMHg4YmU2LCAweDg4ZTMsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTNiZCwKKyAgICAweDk5YmQsIDB4OGY1YywgMHhmZmZkLCAweDkwZTcsIDB4ZmZm ZCwgMHg5OWJmLCAweDk5YmUsIDB4OGZhMSwKKyAgICAweDhjZGYsIDB4OTljMSwgMHg5NGJjLCAw eGZmZmQsIDB4ZmZmZCwgMHg5OWMyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTRk YSwgMHg5MWIyLCAweDkxZWMsIDB4OGJhNiwgMHhmZmZkLCAweGZmZmQsIDB4OTNlYywKKyAgICAw eDkyNTAsIDB4ZmZmZCwgMHg5NDhlLCAweGZmZmQsIDB4OTY2ZCwgMHhmZmZkLCAweDk5YzQsIDB4 ZmZmZCwKKyAgICAweDkwZTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhjNTQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTljNSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk5YzYsIDB4ODk0YiwKKyAgICAweDg4ZjMsIDB4OGFlYiwgMHhmZmZk LCAweDkxYTYsIDB4OGI3MCwgMHg5NzkxLCAweGZmZmQsIDB4OTljOSwKKyAgICAweDg5YjUsIDB4 ZmZmZCwgMHhmZmZkLCAweDk5YzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGJhOCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg5OWNhLCAweGZmZmQsIDB4OTZlZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk5Y2IsIDB4ZmZmZCwKKyAgICAweDk3ZDAsIDB4ZmZmZCwgMHg4 Y2ZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNiNCwKKyAgICAweDk5Y2Ms IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5OWNlLCAweDk5Y2QsIDB4ZmZmZCwK KyAgICAweDkwN2UsIDB4ODk1OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTdkLCAweDk5 Y2YsIDB4ZmZmZCwKKyAgICAweDk5ZDAsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYjUsIDB4ZmZmZCwg MHhmZmZkLCAweDk5ZDEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhi OGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg4ZTUxLCAweDk5ZDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk2 OTQsIDB4OGRiMywgMHg4Yjc5LCAweDk3NDYsIDB4OTE2ZiwgMHg5NGJkLCAweDhlZmIsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY2NiwgMHhmZmZkLCAw eDhlZTYsIDB4OGVmMywKKyAgICAweGZmZmQsIDB4OGY5NiwgMHhmZmZkLCAweDk0YmUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTlkNSwKKyAgICAweGZmZmQsIDB4ODk2MiwgMHg5MTcwLCAw eDhjZmIsIDB4OGNjMywgMHg4YmU1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk5ZDksIDB4OTI0 MCwgMHg5MWZjLCAweDhiYTksIDB4OGZhMiwgMHg5OWRhLCAweDk5ZDgsIDB4ODljMiwKKyAgICAw eDkxZTQsIDB4OGViNiwgMHg4ZTZhLCAweDg5NDUsIDB4ZmZmZCwgMHhmZmZkLCAweDhhOTAsIDB4 OGQ4NiwKKyAgICAweDhlNjksIDB4ZmZmZCwgMHg5OWRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTlkYywgMHhmZmZkLCAweDhiNjgsIDB4 OGE2NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhkODcsIDB4OGI2NywgMHg5MmRk LCAweDg5NDQsIDB4OTNhZiwgMHg5NmJjLCAweDhkNDAsIDB4OTc5OSwKKyAgICAweDkzNjYsIDB4 OGNmYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjNGUsIDB4ZmZmZCwgMHg5OWU1LCAweGZmZmQs IDB4OGJlMSwKKyAgICAweDk2NjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk0ZGIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTllNCwgMHhmZmZkLCAweDhhZGMs IDB4OTlkZiwgMHg5OWUwLCAweDk5ZTIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk5ZTMsIDB4ZmZmZCwKKyAgICAweDhiN2Es IDB4OTA4MSwgMHhmZmZkLCAweDk1YWIsIDB4OTllMSwgMHg5OWRkLCAweDhjZTEsIDB4ZmZmZCwK KyAgICAweDk5ZGUsIDB4ZmZmZCwgMHg5ODQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1 ZjAsIDB4ZmZmZCwKKyAgICAweDkyZTYsIDB4OGNlMCwgMHg4ZDkwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk5ZTYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTNkYiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTllYSwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDhlZmMsIDB4ZmZmZCwgMHg4ZWY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDk5ZWQsIDB4OTllYiwgMHhmZmZkLCAweDk2YTEsIDB4ZmZm ZCwgMHg5OWU4LCAweDk5ZjEsIDB4OTllYywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk5ZWYsIDB4OGNjNCwgMHg5NmJkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk5ZjAsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTlmMiwgMHhmZmZkLCAweDk5ZjQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkZWUsIDB4OTg2MSwgMHhmZmZkLCAweDk5ZTksIDB4 OTllNywKKyAgICAweDk5ZjMsIDB4ZmZmZCwgMHg5OWVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5OWY2 LCAweGZmZmQsIDB4OWE0MiwgMHg5OWY4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk5ZmMsIDB4 ZmZmZCwgMHhmZmZkLCAweDlhNDAsIDB4OTlmOSwgMHhmZmZkLCAweGZmZmQsIDB4OWE1ZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg4ZGU3LCAweDhhNTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDk5ZjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE0NCwgMHg4 OGY0LCAweDlhNDMsIDB4ZmZmZCwKKyAgICAweDg4YTMsIDB4OTU2OSwgMHg5YTQxLCAweGZmZmQs IDB4OTlmYSwgMHhmZmZkLCAweGZmZmQsIDB4OTlmNSwKKyAgICAweDk5ZmIsIDB4OGRjNiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDlhNDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODhmNSwgMHg5YTRlLCAweGZmZmQsIDB4ZmZmZCwg MHg5YTQ2LCAweDlhNDcsIDB4ZmZmZCwKKyAgICAweDhmYTMsIDB4OTY4OSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5YTRjLCAweDlhNGIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg5MzRlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg5YTRkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTRhLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk1MywgMHhmZmZkLCAw eDhkYjQsIDB4OTA0ZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE0OCwKKyAgICAweDkzODIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWE0OSwgMHhmZmZkLCAweDg4YTAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDlhNTMsIDB4OTc0MiwKKyAgICAweGZmZmQsIDB4OGZhNSwgMHhmZmZkLCAweDlhNTksIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlhNTgsIDB4OWE0ZiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYzEsIDB4ZmZmZCwKKyAgICAweDlhNTAsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFlZCwgMHg5YTU1LCAweDhmYTQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE1MiwgMHhmZmZkLCAweGZmZmQs IDB4OTZlMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjNWIsIDB4ZmZmZCwgMHhm ZmZkLCAweDlhNTYsIDB4OWE1NywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWE1NCwgMHg5YTVhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlhNTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhNjAsIDB4OWE2NSwg MHhmZmZkLCAweDlhNjEsIDB4ZmZmZCwKKyAgICAweDlhNWMsIDB4ZmZmZCwgMHhmZmZkLCAweDlh NjYsIDB4OTE1MCwgMHhmZmZkLCAweGZmZmQsIDB4OWE2OCwKKyAgICAweGZmZmQsIDB4OGQ0MSwg MHg5YTVlLCAweDkyOWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDlhNjIsIDB4OWE1YiwgMHg4YWFiLCAweGZmZmQsIDB4OGFlYywgMHg4YTg1LCAw eDlhNjMsIDB4OWE1ZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM5NiwKKyAgICAweDlhNjksIDB4OWE2NywgMHg5MTcyLCAw eDhiNjksIDB4OGJhYSwgMHhmZmZkLCAweDlhNjQsIDB4ZmZmZCwKKyAgICAweDhiZjIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NjMsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE2ZCwgMHg5YTZi LCAweGZmZmQsIDB4OWFhNSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWE3MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5YTZhLCAweGZmZmQsIDB4OWE2ZSwgMHhmZmZkLCAweGZmZmQsIDB4OWE2YywKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNmIsIDB4OWE2ZiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE3MiwKKyAgICAweGZmZmQsIDB4OWE3NywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YTc1LCAweDlhNzQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNTEsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ODljMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE3MSwg MHhmZmZkLCAweDlhNzMsIDB4OGZhNiwKKyAgICAweDg5NTIsIDB4ZmZmZCwgMHhmZmZkLCAweDlh NzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ODlkYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE4 MiwKKyAgICAweGZmZmQsIDB4OGZmYSwgMHg5YTdkLCAweGZmZmQsIDB4OWE3YiwgMHhmZmZkLCAw eDlhN2MsIDB4ZmZmZCwKKyAgICAweDlhN2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OTVjLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE1OCwgMHhmZmZkLCAweDlhNzgsIDB4ZmZmZCwKKyAgICAw eDlhNzksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhOWEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWE4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhZWQsIDB4ZmZmZCwgMHg5YTg0 LCAweDlhODAsIDB4OWE4MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDkzZDMsIDB4ZmZmZCwgMHg5NGI2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDlhODYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlhODUsIDB4OGE2NCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YTg3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE4YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWE4OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDlhODgsIDB4ZmZmZCwgMHg5NDU4LCAweGZmZmQsIDB4ZmZmZCwgMHg5YThiLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDlhOGMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWE4ZSwgMHhmZmZkLCAweDlhOGQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWE5MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlh OTMsIDB4OWE5MSwgMHg5YThmLCAweDlhOTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDlhOTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDlhOTUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWE5NiwgMHhmZmZkLCAweDlhOTcsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE5OCwKKyAgICAweDk5NjQsIDB4ZmZmZCwgMHg4ZWZhLCAw eDhlNmMsIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZjEsIDB4ZmZmZCwKKyAgICAweDg4ZjYsIDB4ZmZm ZCwgMHhmZmZkLCAweDkyNjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhOTksIDB4 ZmZmZCwKKyAgICAweDhkYTIsIDB4ZmZmZCwgMHg4OGNkLCAweDkwN2QsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWE5YSwgMHg4Y2M1LCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZDkxLCAweGZmZmQsIDB4OWE5YywKKyAgICAweDlhOWIsIDB4ZmZmZCwgMHhmZmZk LCAweDk1ZGUsIDB4OWE5ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlhOWYsIDB4 OWE5ZSwgMHhmZmZkLCAweDlhYTAsIDB4ZmZmZCwgMHg5YWExLCAweGZmZmQsIDB4OGM5NywKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg4OTgwLCAweDlhYTIsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYTQs IDB4ZmZmZCwKKyAgICAweDlhYTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFhNiwgMHhm ZmZkLCAweGZmZmQsIDB4OTM3OSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDlhYTcsIDB4ODhiMywKKyAgICAweDhkZGQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzVjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkyNmUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFhOCwK KyAgICAweDlhYTksIDB4ZmZmZCwgMHhmZmZkLCAweDlhYWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDlhYWMsIDB4ZmZmZCwgMHg4ZGUyLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGJjZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NjU2LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYWEsIDB4OWFhZCwKKyAgICAweDhkYmYsIDB4OGQ0Miwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4OWFiMSwgMHhmZmZkLCAweGZmZmQsIDB4OGRhMywgMHhmZmZkLCAw eDkyNTIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWFhZSwgMHg5MmQ4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFiMiwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg5MDgyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDlhYjAsIDB4OWFiMywgMHhmZmZkLCAweDhjNWUsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYjQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlhYjUsIDB4 ZmZmZCwgMHg4ZDQzLCAweDhhNWYsIDB4OWFiNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg5YWI4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDlhYjksIDB4ZmZmZCwgMHhmZmZkLCAweDlhYjYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlhYWYsIDB4ZmZmZCwgMHhm ZmZkLCAweDlhYmEsIDB4ZmZmZCwgMHhmZmZkLCAweDlhYmIsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk2ODQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmZTksIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YWJkLCAweDlhYmUsIDB4OWFiYywgMHhmZmZkLCAweDlh YzAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ1Nywg MHhmZmZkLCAweGZmZmQsIDB4ODhlNiwKKyAgICAweDk1NzUsIDB4ZmZmZCwgMHhmZmZkLCAweDlh YzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZmYiwgMHhmZmZkLCAweGZmZmQsIDB4OGVi NywKKyAgICAweGZmZmQsIDB4OTQ3YywgMHg4YWVlLCAweGZmZmQsIDB4OGRlOSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDk2NzgsIDB4ZmZmZCwgMHg5M2IwLCAweGZmZmQsIDB4ZmZm ZCwgMHg4Yzk4LCAweDkxY2QsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YWJmLCAw eDlhYzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWMyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OWFjMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWM0LCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OWFjNiwgMHhmZmZkLCAweGZmZmQsIDB4OTJlNywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YWFjLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE5ZiwKKyAgICAweDg5ODEsIDB4OTVmMSwgMHhmZmZk LCAweGZmZmQsIDB4OGZlYSwgMHg5MzY3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg4ZGU0LCAweGZmZmQsIDB4ZmZmZCwgMHg5YWNjLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDk1YmIsIDB4OTdkYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OWYyLCAweDlhYzgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTE1OSwgMHg5YWNiLCAweGZmZmQs IDB4OTM4MywgMHhmZmZkLCAweGZmZmQsIDB4OTM2OCwKKyAgICAweDkzODQsIDB4OTRiNywgMHg5 MmNiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkYzcsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5YWM3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ODk5NiwgMHhmZmZkLCAweDkzNTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDlhYzksIDB4ZmZmZCwgMHg5YWM1LCAweGZmZmQsIDB4ZmZmZCwg MHg5MDZmLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWFjZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhiYWIsIDB4ZmZmZCwgMHg5YWNlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1ZTYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTE5ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTJj NCwgMHhmZmZkLCAweGZmZmQsIDB4OWFkMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk2NmUsIDB4ZmZm ZCwgMHhmZmZkLCAweDlhZDEsIDB4ZmZmZCwgMHhmZmZkLCAweDlhZDYsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDlhZDUsIDB4OWFjZiwgMHg5YWQyLCAweDlhZDQsIDB4ZmZmZCwgMHhmZmZk LCAweDhkYTQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTVjNywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5YWQ3LCAweGZmZmQsIDB4OTI2NCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OWYz LCAweGZmZmQsIDB4OGZlYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OWFkOSwgMHhmZmZkLCAweDlhZDgsIDB4ZmZmZCwgMHg4ZDg4LCAweGZmZmQsIDB4OWFkYSwKKyAg ICAweDlhZGMsIDB4OWFkYiwgMHhmZmZkLCAweGZmZmQsIDB4OWFkZSwgMHhmZmZkLCAweDlhZDMs IDB4OWFlMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWFkZiwgMHg5 YWRkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNmQs IDB4OTA3MCwgMHhmZmZkLCAweDkxNzMsIDB4OWFlMSwKKyAgICAweDkwYmEsIDB4ODhlYiwgMHg5 NDg0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTJkOSwKKyAgICAweGZmZmQs IDB4OWFlMywgMHg5YWUyLCAweDlhZTQsIDB4OWFlNSwgMHg5YWU2LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YWU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTVjZiwgMHg5YWU4LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ODljNCwKKyAgICAweDlhZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NzViLCAweDhhNGYsIDB4ZmZmZCwKKyAgICAweDk5YzcsIDB4OGY2Nywg MHg5MWJkLCAweDlhZWEsIDB4OTZlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg5NmIyLCAweGZmZmQsIDB4ZmZmZCwgMHg5YWVjLCAweGZmZmQsIDB4OTFl NSwKKyAgICAweGZmZmQsIDB4OTM1NiwgMHg5MWJlLCAweDk1NzYsIDB4OWFlZCwgMHg5YWVlLCAw eDg5OWIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGViOCwgMHg5YWVmLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhjZSwKKyAgICAweDlhZjAsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhZjEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk4MiwgMHhmZmZkLCAweGZmZmQsIDB4OGFlZiwKKyAgICAw eDkzZGUsIDB4OTVmMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlhZjUsIDB4 OTE3NCwKKyAgICAweDlhZjQsIDB4OGM1ZiwgMHhmZmZkLCAweGZmZmQsIDB4OTY3YSwgMHg5YWYz LCAweGZmZmQsIDB4OTM4NSwKKyAgICAweDlhZjcsIDB4ZmZmZCwgMHg5YWY2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlhZjksIDB4ZmZmZCwgMHg5YWY4 LCAweGZmZmQsIDB4ZmZmZCwgMHg4OTljLCAweGZmZmQsIDB4OWFmYSwKKyAgICAweDhmYTcsIDB4 OWFmYywgMHg5MjQ0LCAweGZmZmQsIDB4OWFmYiwgMHhmZmZkLCAweDk1YjEsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmOTcsIDB4OTM3YSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDliNDAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZDQ0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWI0MSwgMHg5NDQwLCAweDk0ZGMs IDB4OTZjZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 NDQ0LCAweGZmZmQsIDB4ZmZmZCwgMHg5YjRhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhiNTcsIDB4ZmZmZCwgMHhmZmZkLCAweDk3NjQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OTZhZCwgMHhmZmZkLCAweDliYWEsIDB4ZmZmZCwgMHg5YjQyLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNDUsIDB4ZmZmZCwg MHg5MWMzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk2NTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTM2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg5YjQ2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OTY4NSwgMHhmZmZkLCAweDhkYzgsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYTgsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDliNDcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGU2ZiwgMHhmZmZkLCAweDhlNmUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDg4YjcsIDB4OGNjNiwgMHhmZmZkLCAw eDkwYTksIDB4ODhjZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWI0 YiwgMHg5YjRjLCAweGZmZmQsIDB4OWI0OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTU3LCAweDhhYWQsIDB4 ZmZmZCwKKyAgICAweDliNDgsIDB4ZmZmZCwgMHg5NmMzLCAweDk1NTAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDg4YTYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDg4ZjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU3MCwKKyAgICAweGZmZmQsIDB4 ODhkMCwgMHhmZmZkLCAweDg4YTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OWI1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWI0ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk2YmEsIDB4ZmZmZCwgMHg5YjUyLCAweGZmZmQs IDB4OWI1MCwgMHhmZmZkLCAweGZmZmQsIDB4OWI0ZSwKKyAgICAweDkwNTAsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjRkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4OTVkOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNlMiwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YjU2LCAweDli NTcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZhOSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDliNTMsIDB4OTg0YiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0NmIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWI1NSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZGE1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YjU4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk1NzcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YjU5LCAw eGZmZmQsIDB4OWI1NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTZiOSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NDdk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5YjVhLCAweDk1NTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWI1YiwgMHg5YjVmLCAweDliNWMsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ODljNSwgMHg5YjVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OGViOSwgMHhmZmZkLCAweDliNWQsIDB4OGM5OSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDliNmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDliNjQsIDB4OWI2MSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTI4NCwg MHhmZmZkLCAweDliNjAsIDB4ZmZmZCwgMHhmZmZkLCAweDliNjIsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OWI2MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YjY1LCAweDliNjYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGFm MCwgMHhmZmZkLCAweDliNjgsIDB4OWI2NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNjksIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZmVjLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YjZj LCAweGZmZmQsIDB4OTJkYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDg5NjQsIDB4 ZmZmZCwgMHg5YjZhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliNmUs IDB4ZmZmZCwKKyAgICAweDliNzEsIDB4ZmZmZCwgMHhmZmZkLCAweDliNmYsIDB4ZmZmZCwgMHg5 YjcwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhlNzEsIDB4OWI3MiwgMHhm ZmZkLCAweGZmZmQsIDB4OGQ0NSwgMHg5YjczLCAweGZmZmQsIDB4OGU5YSwKKyAgICAweDkxYjYs IDB4ZmZmZCwgMHg5Yjc0LCAweDliNzUsIDB4OGU3OSwgMHg4ZDQ2LCAweGZmZmQsIDB4OTZkMCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiNDcsIDB4OGNjNywgMHg5Yjc2LCAweDhh NzcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWI3NywgMHhmZmZkLCAweDkxYjcsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDliNzgsIDB4OWJhMSwgMHhmZmZkLCAweDli NzksIDB4ZmZmZCwgMHg5YjdhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDliN2IsIDB4ZmZmZCwg MHg5YjdkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDli N2UsIDB4ZmZmZCwgMHhmZmZkLCAweDliODAsIDB4ZmZmZCwgMHg5MWVlLCAweGZmZmQsIDB4ODk0 NiwKKyAgICAweDhlZTcsIDB4ODhjMCwgMHhmZmZkLCAweDkxNzYsIDB4OGFhZSwgMHg4ZWIzLCAw eGZmZmQsIDB4OGQ0NywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5Mzg2LCAweGZmZmQsIDB4OGY0MCwKKyAgICAweDhhYWYsIDB4OTI4OCwgMHg5MmU4LCAw eDg4YjYsIDB4OGI1OCwgMHg5NWYzLCAweGZmZmQsIDB4OGVjMCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg4YjcxLCAweDkwZTksIDB4OGViYSwgMHg5NzQ3LCAweDliODEsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiN2IsIDB4 ZmZmZCwKKyAgICAweDhkYzksIDB4ZmZmZCwgMHhmZmZkLCAweDhhNTEsIDB4ODk4MywgMHg4ZmFh LCAweDg5YzYsIDB4ZmZmZCwKKyAgICAweDliODIsIDB4OTc2NSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY2OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZWUy LCAweDliODMsIDB4OGFmMSwgMHg5M2QwLCAweDk2YTcsIDB4OWI4NCwKKyAgICAweGZmZmQsIDB4 OWI4NSwgMHhmZmZkLCAweGZmZmQsIDB4OTU3OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDliODcsIDB4ZmZmZCwgMHg4YWE2LCAweDhiZjUsIDB4OWI4NiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYjAsIDB4ZmZmZCwgMHg5 MDUxLCAweDliOGIsIDB4OGU0MCwKKyAgICAweGZmZmQsIDB4ODljNywgMHg5YjhhLCAweGZmZmQs IDB4OWI4OCwgMHg5YjhjLCAweDliODksIDB4OTQ0YSwKKyAgICAweDllY2IsIDB4OTA1MiwgMHhm ZmZkLCAweDliOGQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3YmUsIDB4ZmZmZCwKKyAgICAweDliOGUs IDB4ZmZmZCwgMHhmZmZkLCAweDliOTAsIDB4ZmZmZCwgMHg5MjllLCAweDliOGYsIDB4ZmZmZCwK KyAgICAweDkwYTEsIDB4ZmZmZCwgMHg4ZTliLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkx Y2UsIDB4OGVmNSwKKyAgICAweGZmZmQsIDB4OTU5NSwgMHg5MGVhLCAweGZmZmQsIDB4OGVjYiwg MHg5YjkxLCAweDhmYWIsIDB4OWI5MiwKKyAgICAweDliOTMsIDB4ODhkMSwgMHg5MWI4LCAweDkw NzEsIDB4ZmZmZCwgMHg5Yjk0LCAweDkzYjEsIDB4OGZhYywKKyAgICAweGZmZmQsIDB4OGZhZCwg MHhmZmZkLCAweDliOTUsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZWIsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg4ZmFlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDliOTYsIDB4ZmZmZCwgMHg5Yjk3LCAweGZmZmQsIDB4OTZkZSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDliOTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4YmM0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGY0MSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDliOTksIDB4OWI5 YSwgMHg4ZWRhLCAweDkwNGIsIDB4OTNmMiwgMHg5MDczLCAweDk0ZjYsIDB4OTQ0MSwKKyAgICAw eDhiYzcsIDB4OWI5YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjhmLCAweDliOWMsIDB4 ZmZmZCwKKyAgICAweDhiZmMsIDB4ZmZmZCwgMHg5M2NkLCAweDg5YWUsIDB4ZmZmZCwgMHg4ZTcy LCAweDliOWQsIDB4OWJhMCwKKyAgICAweDliOWYsIDB4OGJmYiwgMHhmZmZkLCAweDliOWUsIDB4 ZmZmZCwgMHg5MzU3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYWUsIDB4ZmZmZCwKKyAgICAweDkzNmEsIDB4 OGVjNiwgMHhmZmZkLCAweGZmZmQsIDB4OTE3NywgMHg5NzlhLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJhMiwgMHhmZmZkLCAweDliYTMs IDB4OTNkNCwKKyAgICAweGZmZmQsIDB4OGU1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDliYTUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWJhNiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDhhZjIsIDB4OWJhOCwgMHhmZmZkLCAweGZmZmQsIDB4OWJhOSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODlhYSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxNWEsIDB4OGFlMiwg MHhmZmZkLCAweDliYWIsIDB4OTZhNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OTFkMCwgMHhmZmZkLCAweDhhNzgsIDB4ZmZmZCwgMHhmZmZkLCAweDliYWQsIDB4OWJh ZiwKKyAgICAweDhhZGQsIDB4ZmZmZCwgMHhmZmZkLCAweDliYWMsIDB4OWJhZSwgMHhmZmZkLCAw eDliYjEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5YmIwLCAweGZmZmQsIDB4OWJiMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OWJiMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDkzYmIsIDB4OGJhYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDg5ZTMsIDB4OWJiNCwgMHg5YmI5LCAweGZmZmQsIDB4 ZmZmZCwgMHg5YmI3LCAweGZmZmQsIDB4OTVmNSwKKyAgICAweDk1ZjQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzODcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5YmI2LCAweDhmNzMsIDB4ZmZmZCwgMHg5YmI1LCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTA5MiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliYmEsIDB4ZmZmZCwgMHhm ZmZkLCAweDhkZTgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWJjMCwgMHhmZmZkLCAweGZmZmQs IDB4OWJjMSwgMHg5YmJiLCAweDhhNTIsIDB4OWJiYywKKyAgICAweDliYzUsIDB4OWJjNCwgMHg5 YmMzLCAweDliYmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJiZSwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5YmMyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OTVmNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliYzksIDB4OWJjNiwgMHhmZmZkLCAweDliYzgsIDB4ZmZm ZCwKKyAgICAweDk3OTIsIDB4ZmZmZCwgMHg5YmM3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJi ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTA5 MywgMHhmZmZkLCAweGZmZmQsIDB4OWJjYSwgMHhmZmZkLCAweGZmZmQsIDB4OGRiNSwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliY2IsIDB4ZmZmZCwgMHhmZmZkLCAweDliY2MsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YmNmLCAweGZmZmQsIDB4 OWJjZSwgMHhmZmZkLCAweGZmZmQsIDB4OWJjZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkzODgsIDB4OWJiOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDliZDUsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5YmQxLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YmQwLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWJkMiwgMHhmZmZkLCAweDliZDMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJkNiwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5N2U0LCAweGZmZmQsIDB4OWJkNywgMHg5YmQ0LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWJkOCwgMHhmZmZkLCAweGZmZmQsIDB4OGFkZSwg MHg5YmQ5LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YmRiLCAweDli ZGEsIDB4ZmZmZCwgMHhmZmZkLCAweDliZGMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDliZGQsIDB4ZmZmZCwgMHg5MGVjLCAweDhmNDIsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OGY4NCwgMHhmZmZkLCAweDkxODMsIDB4ZmZmZCwgMHg4ZDQ4LCAweDhkYjYsIDB4OGQ0 OSwKKyAgICAweDhiOTAsIDB4ZmZmZCwgMHhmZmZkLCAweDliZGUsIDB4ZmZmZCwgMHhmZmZkLCAw eDhkYjcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGNjOCwgMHg5YmRmLCAweDk2YTQsIDB4OTQ2 MiwgMHg5YmUwLCAweGZmZmQsIDB4OGQ0YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhhYWEsIDB4ZmZmZCwgMHg5MjQ2LCAweDhiZDAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg4ZTczLCAweDk1N2EsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YmYsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDliZTEsIDB4OGFmMywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OWJlNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkyOWYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWJlMywgMHg5YmUyLCAweDliZTUsIDB4 ZmZmZCwgMHg5MmU5LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg5MDgzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhlNzQsIDB4ZmZmZCwgMHg5MGM4LCAweGZmZmQsIDB4OTFkMSwKKyAg ICAweDhiNDEsIDB4ZmZmZCwgMHhmZmZkLCAweDkyYTAsIDB4ZmZmZCwgMHhmZmZkLCAweDliZTYs IDB4OWJlNywKKyAgICAweDhmZWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 NjU4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDliZWEsIDB4ZmZmZCwgMHhmZmZkLCAweDliZTks IDB4OWJlOCwgMHg5NTlkLCAweGZmZmQsIDB4OWJmMSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTY3OSwgMHhmZmZkLCAweDliZWIsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWJlZCwgMHg5NjhiLCAweGZmZmQsIDB4OWJlYywK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWJlZSwKKyAgICAweGZmZmQsIDB4OTRhNiwgMHg5YmVmLCAweDk1YmMsIDB4OWJmMCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg4YWIxLCAweDk1YmQsIDB4OTQ0ZSwgMHg5YmYyLCAweDliZjMsIDB4ZmZmZCwKKyAgICAweDhk NGIsIDB4OGFiMiwgMHg5YmY0LCAweDhjYjYsIDB4OTc2MywgMHg5NzQ4LCAweDhhZjQsIDB4OWJm NiwKKyAgICAweGZmZmQsIDB4OTJhMSwgMHhmZmZkLCAweDhkNGMsIDB4OGZhZiwgMHhmZmZkLCAw eGZmZmQsIDB4OTRkZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZmIwLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY5OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MmVhLCAweDk1ZjcsIDB4OTM1OCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg4ZDRkLCAweGZmZmQsIDB4OTU3YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDliZjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNzgsIDB4 OGRjMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYzksIDB4ZmZmZCwgMHg5MmVi LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4OGMxLCAweDhmOGUsIDB4OGQ0ZSwKKyAgICAweDk3NjYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OWJmOCwgMHg5YmY5LCAweDk0NzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDliZmEsIDB4OTdmNSwgMHg5ODRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWJmYywKKyAgICAweDliZmIsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNjYsIDB4ZmZmZCwgMHhm ZmZkLCAweDljNDAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YzQzLCAweDljNDQs IDB4ZmZmZCwgMHg5YzQyLCAweGZmZmQsIDB4OTU1ZiwKKyAgICAweDhmYjEsIDB4OWM0NiwgMHg5 YzQ1LCAweDljNDEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDljNDcs IDB4OWM0OCwgMHhmZmZkLCAweGZmZmQsIDB4OWM0OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDljNGMsIDB4OWM0YSwgMHhmZmZkLCAweDljNGIsIDB4OWM0ZCwgMHhmZmZkLCAweDg5 ODQsIDB4OTJlYywKKyAgICAweDljNGUsIDB4ZmZmZCwgMHg4YzlhLCAweDg5ZjQsIDB4OTQ1NSwg MHhmZmZkLCAweDljNGYsIDB4OTNmOSwKKyAgICAweGZmZmQsIDB4OTVkOSwgMHhmZmZkLCAweDlj NTAsIDB4OTg0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWM1MSwg MHg5NWJlLCAweDljNTQsIDB4OTg5ZiwgMHg5OGFmLCAweGZmZmQsIDB4OGVhZSwKKyAgICAweDkz ZjMsIDB4OWM1NSwgMHhmZmZkLCAweDhiN2MsIDB4OTJhMiwgMHg4OGY4LCAweDljNTYsIDB4OTVh NCwKKyAgICAweDhkNGYsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNmYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTJlZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NmVkLCAweDhjYjcsIDB4OGNjYSwKKyAgICAweGZmZmQsIDB4OWM1NywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5YzU4LCAweGZmZmQsIDB4OWM1ZSwKKyAgICAweGZmZmQsIDB4OGVl MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmEzLCAweGZmZmQsIDB4OGJhZCwKKyAgICAw eDljNTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU0YSwgMHhmZmZkLCAweDkyNjUsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OWM1YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDljNWIsIDB4ZmZmZCwgMHg4YmFlLCAweGZmZmQsIDB4 OWM1YywgMHhmZmZkLCAweDljNWQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWM1ZiwgMHhmZmZk LCAweDkzOTYsIDB4ZmZmZCwgMHhmZmZkLCAweDljNjAsIDB4OWM2MSwKKyAgICAweGZmZmQsIDB4 OWM2MiwgMHhmZmZkLCAweGZmZmQsIDB4OWM1MywgMHg5YzUyLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OWM2MywgMHg4YzYwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NDYs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGRjYSwgMHg5NTU2LCAweDkyYTQsIDB4OTU2YSwgMHg5 YzY0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhmYjIsIDB4ODk2NSwgMHhmZmZkLCAweDljNjUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWM2NiwKKyAgICAweGZmZmQsIDB4OTZmMCwgMHhm ZmZkLCAweGZmZmQsIDB4OTRkZSwgMHhmZmZkLCAweGZmZmQsIDB4OWM2OSwKKyAgICAweDg5OWQs IDB4OTBhYSwgMHg5YzY4LCAweDljNjcsIDB4OGM2MSwgMHg5MWQyLCAweGZmZmQsIDB4OWM2ZCwK KyAgICAweDljNmIsIDB4ZmZmZCwgMHg5YzZhLCAweDk3YTUsIDB4OGNlMywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDhmOTksIDB4OWM2YywgMHg5MzZiLCAweDhmNWQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTNiZSwKKyAgICAweDljNzAsIDB4OWM2ZiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljNmUsIDB4ZmZmZCwKKyAgICAweDljNzEsIDB4OGNlNCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlj NzIsIDB4OTU5YywgMHg4ZjdhLCAweGZmZmQsIDB4ZmZmZCwgMHg5YzczLCAweDk0ZjcsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzYmYsIDB4OTJhNSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTM0ZiwgMHhmZmZkLCAweGZmZmQsIDB4OWM3 NCwgMHg4YjRhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkwNTMsIDB4ZmZmZCwgMHg5NTRiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFmNSwgMHg5NDQ1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljNzUsIDB4 OGU3NSwKKyAgICAweDk2NTksIDB4OTY1YSwgMHhmZmZkLCAweGZmZmQsIDB4ODk5ZSwgMHg5Yzdh LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkyODksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWM3NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDg5ZjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDljYWIsIDB4 OWM3OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDRmLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDljNzgsIDB4ZmZmZCwgMHhmZmZkLCAweDljNzYsIDB4ZmZmZCwgMHg4ZDlhLCAweGZmZmQs IDB4OWM3YywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDljODMsIDB4OWM4OSwKKyAgICAweDljODEsIDB4ZmZmZCwgMHg5 MzdiLCAweGZmZmQsIDB4ZmZmZCwgMHg5Yzg2LCAweDk1N2MsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4OWM4MCwgMHhmZmZkLCAweDljODUsIDB4OTdlNSwgMHg4ZTc2LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDkxZDMsIDB4OWM3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YjdkLCAweDlj ODgsIDB4OTBhYiwKKyAgICAweDg5ODUsIDB4OWM4MiwgMHg4OWY2LCAweDljODcsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGJhZiwKKyAgICAweGZmZmQsIDB4OWM4NCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg5YzhhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OWM4YywgMHg5Yzk2LCAweDljOTQsIDB4ZmZmZCwgMHhmZmZkLCAweDljOTEsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YzkwLCAweDk3ZjYsIDB4ZmZmZCwgMHg5YzkyLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDhiYjAsIDB4ZmZmZCwgMHg4ZDUwLCAweGZmZmQsIDB4ZmZm ZCwgMHg4ZjlhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWM5OSwgMHg5YzhiLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWM4ZiwKKyAgICAweDljN2UsIDB4ZmZm ZCwgMHg4OWY4LCAweDljOTMsIDB4OWM5NSwgMHg5MjcwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDhkYTYsIDB4ODliNiwgMHg5YzhkLCAweDljOTgsIDB4OWM5NywgMHg4YmIxLCAweGZmZmQsIDB4 OTFhNywKKyAgICAweDhhODYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YzYy LCAweGZmZmQsIDB4OWM4ZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWM5YSwgMHhmZmZk LCAweDljOWQsIDB4OWM5ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OGViYiwgMHhmZmZkLCAweDljYTUsIDB4OTJlZSwgMHg5YzliLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg5Y2EzLCAweGZmZmQsIDB4ODlmNywgMHhmZmZkLCAweDljYTEs IDB4OWNhMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5YzllLCAweDljYTAsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGNlNSwKKyAgICAweDk3NDksIDB4ZmZmZCwgMHhmZmZkLCAweDhhYjMs IDB4ZmZmZCwgMHhmZmZkLCAweDg5NzgsIDB4OWNhNCwKKyAgICAweGZmZmQsIDB4OTQ1OSwgMHg4 OGFiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5NGRmLCAweDljN2IsIDB4OWNhYSwgMHg5Y2FlLCAweDk2ZTMsIDB4ZmZmZCwK KyAgICAweDljYTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM4OSwgMHg5Y2FjLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4ZmVlLCAweDljYWQsIDB4OTNkNSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTg2Niwg MHhmZmZkLCAweDljYTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlj YWYsIDB4ZmZmZCwgMHg4ZDliLCAweGZmZmQsIDB4OTBjOSwgMHhmZmZkLCAweGZmZmQsIDB4ODhk MiwKKyAgICAweDljYTgsIDB4OWNhNiwgMHhmZmZkLCAweDkxNzksIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWM5YywKKyAgICAweDhlNTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxYzQsIDB4OWNiYiwgMHhmZmZkLCAw eDkxN2EsIDB4OWNiNiwgMHhmZmZkLCAweDljYjMsIDB4OWNiNCwKKyAgICAweGZmZmQsIDB4OGVl NCwgMHg5Y2I3LCAweDljYmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDljYjUsIDB4OGY0NCwgMHhmZmZkLCAweDljYjgsIDB4ZmZmZCwgMHhmZmZkLCAweDljYjIsIDB4 ZmZmZCwKKyAgICAweDk2ZmEsIDB4OTZmOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Y2Jj LCAweDljYmQsIDB4ODhkMywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5Y2IxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YmYw LCAweDg4YTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFiNCwKKyAgICAweGZmZmQsIDB4 OWNiOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNjMSwKKyAg ICAweDljYzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNjNSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNjNiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWNjNCwgMHg5Y2M3LCAweDljYmYsIDB4OWNjMywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 Y2M4LCAweGZmZmQsIDB4OWNjOSwgMHhmZmZkLCAweGZmZmQsIDB4OWNiZSwKKyAgICAweDhlOWMs IDB4ZmZmZCwgMHg5Y2MyLCAweDkxZDQsIDB4OGQ1MSwgMHg5Y2IwLCAweDkwNTQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljZDYsIDB4ZmZmZCwgMHg5NWU3LCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDljY2MsIDB4OWNjZCwgMHg5Y2NlLCAweGZmZmQsIDB4ZmZmZCwg MHg5Y2Q1LCAweGZmZmQsIDB4OWNkNCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NjlkLCAweDhh YjUsIDB4ZmZmZCwgMHg5Y2QyLCAweGZmZmQsIDB4OGM2NCwKKyAgICAweDhhNTMsIDB4ZmZmZCwg MHhmZmZkLCAweDljY2YsIDB4ZmZmZCwgMHhmZmZkLCAweDk3YjYsIDB4OWNkMSwKKyAgICAweDg4 ZDQsIDB4OWNkMywgMHhmZmZkLCAweDljY2EsIDB4OWNkMCwgMHg5Y2Q3LCAweDhjNjMsIDB4OWNj YiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk3N2MsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NzRhLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OWNkYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5Y2RlLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxOWUsIDB4ZmZmZCwKKyAgICAweDk3ZjcsIDB4OWNk ZiwgMHhmZmZkLCAweGZmZmQsIDB4OWNkYywgMHhmZmZkLCAweDljZDksIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OWNkOCwgMHg5Y2RkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTVhZSwgMHhmZmZk LCAweGZmZmQsIDB4OTNiMiwKKyAgICAweGZmZmQsIDB4OGM2NSwgMHhmZmZkLCAweDljZTAsIDB4 OWNkYiwgMHhmZmZkLCAweDljZTEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4Yzli LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5YWYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5Y2U5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYjYsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDljZTcsIDB4ZmZmZCwgMHhmZmZkLCAweDljZTgs IDB4OGRhNywKKyAgICAweDljZTYsIDB4OWNlNCwgMHg5Y2UzLCAweDljZWEsIDB4OWNlMiwgMHg5 Y2VjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDg5ZjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDljZWUsIDB4ZmZmZCwgMHhmZmZkLCAweDljZWQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MmE2LCAweGZmZmQsIDB4OWNmMSwg MHhmZmZkLCAweDljZWYsIDB4OWNlNSwKKyAgICAweDhjOWMsIDB4ZmZmZCwgMHg5Y2YwLCAweGZm ZmQsIDB4OWNmNCwgMHg5Y2YzLCAweDljZjUsIDB4OWNmMiwKKyAgICAweDljZjYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlj ZjcsIDB4OWNmOCwgMHg5NWU4LCAweGZmZmQsIDB4OWNmYSwgMHg5Y2Y5LCAweDhmNWUsIDB4ZmZm ZCwKKyAgICAweDkwYWMsIDB4ODllNCwgMHg4OWZhLCAweGZmZmQsIDB4OWNmYiwgMHhmZmZkLCAw eDg4YmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MGNhLCAweDljZmMsIDB4ZmZm ZCwgMHhlNmMxLCAweDlkNDAsIDB4OGM4MSwKKyAgICAweGZmZmQsIDB4OWQ0MSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZWQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg5ZDQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkNDMsIDB4OGI1OSwKKyAgICAw eDlkNDQsIDB4ZmZmZCwgMHg5ZDQ1LCAweDlkNDYsIDB4OTFkNSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDhjY2IsIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZGYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTY1YiwKKyAgICAweDhmOGEsIDB4OWQ0NywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBlZSwKKyAgICAweGU3YmIsIDB4OTRlMCwgMHhmZmZk LCAweDhlZTgsIDB4ZmZmZCwgMHg4ZGNiLCAweDlkNDgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDkxYzUsIDB4ZmZmZCwgMHg5NWE1LCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDkxZWYsIDB4ZmZmZCwgMHhmZmZkLCAweDlkNGIsIDB4ZmZmZCwgMHhmZmZkLCAweDlkNDks IDB4ZmZmZCwKKyAgICAweDlkNGMsIDB4ZmZmZCwgMHhmZmZkLCAweDlkNGEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlkNGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk1YWYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODhiNSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1N2QsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4OTRlMSwgMHhmZmZkLCAweGZmZmQsIDB4OWQ0ZSwgMHhmZmZkLCAweDlkNTEsIDB4OGZiMywK KyAgICAweDhiNWEsIDB4ZmZmZCwgMHg5ZDRmLCAweDlkNTYsIDB4OGZiNCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWQ1MCwgMHg5NDYzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTc3ZCwgMHg5ZDUyLCAweDlk NTMsIDB4OWQ1NywgMHg5MzhhLCAweDlkNTQsIDB4OGQ1MiwKKyAgICAweDkwZGMsIDB4ZmZmZCwg MHhmZmZkLCAweDlkNjUsIDB4OTRiMiwgMHhmZmZkLCAweDkxZjAsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0ZTIsIDB4OWRhYiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTVmOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MmVmLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTY5NSwgMHhmZmZkLCAw eDlkNWEsIDB4ODk5ZiwgMHg5MjhhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg5ZDYzLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjUzLCAweDlkNWQsIDB4OWQ2NCwKKyAgICAw eDlkNWYsIDB4OWQ2NiwgMHg5ZDYyLCAweGZmZmQsIDB4OWQ2MSwgMHg5NDhmLCAweGZmZmQsIDB4 OWQ1YiwKKyAgICAweDg5ZmIsIDB4OWQ1OSwgMHg4YjkxLCAweDkxZjEsIDB4OWQ1NSwgMHhmZmZk LCAweGZmZmQsIDB4OWQ1OCwKKyAgICAweDhkNTMsIDB4OTBkOSwgMHhmZmZkLCAweDhmYjUsIDB4 OWQ2MCwgMHg5NDcxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhiOTIsIDB4OGE2NywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE4NywgMHg5MDQwLCAweDlkNjgsIDB4OWQ2ZCwKKyAg ICAweGZmZmQsIDB4OWQ2OSwgMHhmZmZkLCAweDhjOWQsIDB4ZmZmZCwgMHg5ZDZlLCAweDhlNDEs IDB4OGQ4OSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhmNDUsIDB4OWQ1YywKKyAgICAweGZmZmQsIDB4OGU5ZCwgMHg5ZDZiLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU3NywKKyAgICAweDlkNmMsIDB4ODhjMiwgMHhm ZmZkLCAweGZmZmQsIDB4OWQ2NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4OTJhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OGI5MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGJiMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OWQ2YSwKKyAgICAweDg4YTUsIDB4ZmZmZCwgMHhmZmZkLCAweDhk YzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA1NSwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg5MmYwLCAweGZmZmQsIDB4ZmZmZCwgMHg5NGQyLCAweDlkNzAsIDB4OTE3 ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTFhOCwgMHhmZmZkLCAweGZmZmQsIDB4OGU0 YSwgMHg5ZDcxLCAweGZmZmQsIDB4OWQ3MywKKyAgICAweDlkNmYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NWRmLCAweGZmZmQsIDB4OTJiYiwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE3YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTVmOSwKKyAgICAweDhlY2MsIDB4OWQ4MCwgMHhmZmZkLCAweDlkN2UsIDB4ZmZmZCwgMHhmZmZk LCAweDkwOTgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YzllLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDlkNzgsIDB4OGZiNywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5M2U2 LCAweDk0NTAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlkNzYsIDB4 ZmZmZCwgMHhmZmZkLCAweDkxN2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDhlZjYsIDB4OWQ3YiwgMHhmZmZkLCAweGZmZmQsIDB4OGZiNiwgMHhmZmZkLCAweDlkNzUs IDB4OWQ3YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NDcyLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlkNzQsIDB4ZmZmZCwKKyAgICAweDhjNDAsIDB4ZmZmZCwgMHhmZmZkLCAweDhhN2Ms IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ3YywKKyAgICAweDk3YTksIDB4OGRjYywgMHg5 MjU0LCAweDlkNzksIDB4ZmZmZCwgMHg5MGRhLCAweGZmZmQsIDB4OGQ1NCwKKyAgICAweDkwODQs IDB4ODk4NiwgMHg5MTViLCAweDlkNzcsIDB4OGI2NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YzY2LCAweGZmZmQsIDB4OTJjZCwgMHg5ZDdkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxN2UsIDB4ZmZmZCwg MHhmZmZkLCAweDlkODEsIDB4ZmZmZCwKKyAgICAweDlkODMsIDB4ZmZmZCwgMHhmZmZkLCAweDkx YjUsIDB4OWQ4OSwgMHhmZmZkLCAweDlkODQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWQ4Niwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU2MCwKKyAgICAweDky ZjEsIDB4ZmZmZCwgMHg5ZDg3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3NGIsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NzY3LCAweDhhYjcsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODhhYywgMHhmZmZkLCAweDlkODUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWQ4MiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhZjYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk4NywgMHhmZmZkLCAweDlkODgsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg5NzY4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDlkOGMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5MWI5LCAweGZmZmQsIDB4OWQ5MywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDlkOGQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkOGEsIDB4OWQ5MSwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkOGUs IDB4ZmZmZCwKKyAgICAweDlkOTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRjMCwgMHg5 MzhiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWQ4YiwgMHhmZmZkLCAweDlkOGYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4 YzY3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkZWYsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5MGRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlk OTcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkzNDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ5NCwKKyAgICAweGZm ZmQsIDB4OTY4MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWQ5 NSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDlkOTYsIDB4ZmZmZCwKKyAgICAweDk2Y2MsIDB4ZmZmZCwgMHg5MGEwLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhjODIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlkOWQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg4ZTU0LCAweDlkOWEsIDB4ZmZmZCwgMHg5ZDk5LCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NDUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDkzYjMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTM1MCwgMHg5ZDliLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWQ5YywgMHhmZmZk LCAweDk1OGYsIDB4ZmZmZCwgMHg5NDY0LCAweDhlNDIsIDB4ZmZmZCwKKyAgICAweDkwZWYsIDB4 ZmZmZCwgMHg5NjZmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OGE2OCwgMHhmZmZkLCAweDlkYTMsIDB4OWQ5ZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTc2OSwgMHg5ZGE1LCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZGExLCAweGZmZmQsIDB4OWRhMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5MTgwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 ZGEwLCAweGZmZmQsIDB4OWQ1ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlkYTQs IDB4ZmZmZCwgMHg5ZDlmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDlkYTksIDB4OWRhYSwgMHg5MzQ2LCAweDlkYWMsIDB4ZmZmZCwgMHhmZmZkLCAweDhl NDMsIDB4OWRhNywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI1Yiwg MHhmZmZkLCAweGZmZmQsIDB4OWRhZCwKKyAgICAweGZmZmQsIDB4OWRhNiwgMHg5ZGIxLCAweGZm ZmQsIDB4OWRiMCwgMHhmZmZkLCAweDlkYWYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg5ZGIyLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGI0LCAweDhmZWYsIDB4ZmZmZCwKKyAgICAweDlk YjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGI3LCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlkYjUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWRiNiwgMHg5ZDkwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDlkYjksIDB4OWRiOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg5ZDk4LCAweDlkYmEsIDB4OWRhZSwgMHhmZmZkLCAweGZmZmQsIDB4 OGU3OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRiYiwgMHg5ZGJj LCAweDlkYmUsIDB4OWRiZCwKKyAgICAweDlkYmYsIDB4ODlmYywgMHhmZmZkLCAweDhkNTUsIDB4 ZmZmZCwgMHhmZmZkLCAweDk1ZmEsIDB4OTBhZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2NjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlkYzEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGM0LCAweGZmZmQsIDB4OTU3MSwKKyAg ICAweGZmZmQsIDB4OGI3ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGMzLCAweDlkYzIs IDB4OTQ3MywKKyAgICAweDlkYzUsIDB4OGJiMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ZGM3LCAweDlkYzYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YWI4LCAweDhlNTUs IDB4ZmZmZCwgMHhmZmZkLCAweDkzZDYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGM2OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkwOTQs IDB4ZmZmZCwgMHg5ZGM4LCAweGZmZmQsIDB4OTBhZSwgMHg5MzQ3LCAweGZmZmQsIDB4OTU3ZSwK KyAgICAweDlkYzksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZGNhLCAweDlkY2IsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OTViNiwKKyAgICAweDliN2MsIDB4OTBjNCwgMHhmZmZkLCAweGZm ZmQsIDB4OTU2YiwgMHhmZmZkLCAweDhkZDYsIDB4ZmZmZCwKKyAgICAweDk0ZTMsIDB4OTRjMSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM2YywKKyAgICAweGZm ZmQsIDB4OTdiZiwgMHhmZmZkLCAweDlkY2QsIDB4OGVjZSwgMHhmZmZkLCAweGZmZmQsIDB4OWRj ZSwKKyAgICAweGZmZmQsIDB4ODhiNCwgMHhmZmZkLCAweGZmZmQsIDB4OGJkMiwgMHg5MGNiLCAw eGZmZmQsIDB4OTU4MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlkY2YsIDB4OGU2 MSwgMHg5MjY2LCAweGZmZmQsIDB4OGU3YSwKKyAgICAweDkwNTYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRkMCwKKyAgICAweGZmZmQsIDB4OTVm YiwgMHhmZmZkLCAweGZmZmQsIDB4ODk5NywgMHg4ZTdiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OWRkMywgMHhmZmZkLCAweDlkZDEsIDB4OWRkNCwgMHg5N2I3LCAweDlkZDIsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwZjksIDB4OWRkNSwgMHhmZmZk LCAweGZmZmQsIDB4OTFiMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZGQ2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFmOCwKKyAgICAweGZmZmQsIDB4OWRkOCwgMHhmZmZk LCAweDlkZDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlkZDksIDB4 OWRkYSwgMHg4YWY5LCAweGZmZmQsIDB4ZmZmZCwgMHg5M2ZhLCAweDkyNTUsIDB4OGI4YywKKyAg ICAweDhlN2MsIDB4OTE4MSwgMHhmZmZkLCAweGZmZmQsIDB4OGY3YiwgMHg4OGFlLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWRkYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OWEwLCAweDlkZGYs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4 ZDU2LCAweDlkZGUsIDB4ZmZmZCwgMHhmZmZkLCAweDhkYTksIDB4OGZiOCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5ZGRkLCAweGZmZmQsIDB4OGZiOSwgMHhmZmZkLCAweDk2YmUsIDB4OGRhOCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg4ZDUsIDB4OTBjYywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRlNCwg MHhmZmZkLCAweGZmZmQsIDB4OTBhZiwKKyAgICAweDg5NjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4Zjc0LCAweGZmZmQsIDB4OTY4NiwKKyAgICAweDhkZjAsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmJhLCAweGZmZmQsIDB4OTBhNSwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRlMywgMHg5ZGUxLCAweDlkZTIsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI4YiwgMHhmZmZkLCAw eGZmZmQsIDB4OWU0NSwKKyAgICAweGZmZmQsIDB4OWRlOCwgMHg4ZTllLCAweDhkNTcsIDB4OWRl NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWRlNywgMHhmZmZkLCAw eDkwNTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWRlNSwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg4ZTRlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGVhLCAweDlkZTksIDB4 OWRlZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZGVmLCAweGZmZmQsIDB4OWRlYiwgMHhmZmZk LCAweDhhNDEsIDB4OWRlYywKKyAgICAweDlkZWQsIDB4OTRkMywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk1ODEsIDB4OGM2OSwKKyAgICAweDlkZjAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTBiMCwgMHhmZmZkLCAweDhmYmIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5MjcxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OGJjNSwgMHhmZmZkLCAweDlkZjEsIDB4OWRmNSwgMHhmZmZkLCAweGZmZmQs IDB4ODljOSwKKyAgICAweDlkZjIsIDB4OWRmNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlkZjMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGY4YiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkyNjcsIDB4ODhjMywKKyAgICAweDlkZjYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZGY3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5MmE4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZWYsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNjIsIDB4ZmZmZCwgMHhmZmZkLCAweDk1 ZTksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY1Yywg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDllNDEsIDB4OWRmOSwgMHhmZmZkLCAweGZm ZmQsIDB4OWRmYywgMHhmZmZkLCAweDlkZmIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWRmOCwg MHhmZmZkLCAweGZmZmQsIDB4OWU0MCwgMHhmZmZkLCAweGZmZmQsIDB4OTNkYywKKyAgICAweGZm ZmQsIDB4OWRmYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDllNDIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGY4YywgMHg5ZTQzLCAweGZmZmQsIDB4OTc2 YSwgMHg5NDk4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDllNDQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNDYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWU0 NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDllNDgsIDB4ZmZmZCwgMHg4YmM4LCAweDg5NjcsIDB4OGQ1OCwgMHg5ZTQ5LCAweGZmZmQsIDB4 OWU0YSwKKyAgICAweDhmOTEsIDB4OTE4MiwgMHhmZmZkLCAweGZmZmQsIDB4OTlkNiwgMHg5MTVk LCAweDkxNWMsIDB4OTFkNiwKKyAgICAweDhkYzUsIDB4ZmZmZCwgMHhmZmZkLCAweDk4ZjAsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhjOGUsIDB4OTc0YywgMHhmZmZk LCAweDk1ZmMsIDB4ZmZmZCwgMHg5NTllLCAweGZmZmQsIDB4OWU0YiwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGRmMSwgMHg5MmJkLCAweDllNGMsIDB4OTg0ZSwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NWQsIDB4ZmZmZCwgMHg5MmE5LCAweDllNGQs IDB4OGFmYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDllNGUsIDB4OWU0ZiwKKyAgICAweDk2ZDgsIDB4ZmZmZCwgMHg5NmEyLCAweDk2OTYs IDB4OTY3YiwgMHg4ZTQ0LCAweDllNTEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGVlOSwgMHhm ZmZkLCAweGZmZmQsIDB4OTY3MCwgMHhmZmZkLCAweDllNTMsIDB4OWU1NiwKKyAgICAweDllNTUs IDB4ZmZmZCwgMHg4YWY3LCAweGZmZmQsIDB4ZmZmZCwgMHg4YjgwLCAweGZmZmQsIDB4OWU1MiwK KyAgICAweGZmZmQsIDB4OWU1NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDll NTcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTA5OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk3OWIsIDB4ODhjNywKKyAgICAweDhkZGUsIDB4OTFiYSwgMHhmZmZkLCAweDhl ZGIsIDB4ZmZmZCwgMHhmZmZkLCAweDhmZjEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWU1YSwg MHhmZmZkLCAweGZmZmQsIDB4OTM2ZCwgMHhmZmZkLCAweDllNTgsIDB4OTFhOSwKKyAgICAweDll NTksIDB4OGZmMCwgMHg5NmRiLCAweDllNWIsIDB4OWU1YywgMHg5Nzg4LCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZTYxLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZDU5LCAw eGZmZmQsIDB4OTQ3NCwKKyAgICAweDllNWUsIDB4OTM4YywgMHg5ZGRjLCAweDlkZTAsIDB4ZmZm ZCwgMHg4YjZlLCAweGZmZmQsIDB4OTQ2NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWU2MCwgMHhmZmZkLCAweDhmYmMsIDB4OTRjMiwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTY2LCAweGZmZmQsIDB4OTRmOCwKKyAgICAw eGZmZmQsIDB4OWU1ZCwgMHhmZmZkLCAweDllNjMsIDB4OWU2MiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDkwY2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Njhk LCAweGZmZmQsIDB4OTdkMSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5Njg3LCAweGZmZmQsIDB4 ODljYSwgMHg4ZTdkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk4NjcsIDB4OWU2NSwgMHg5MDk1 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNjQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OWU1ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNjZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNmIsIDB4OWU2OSwgMHhmZmZkLCAweDg5Y2Is IDB4OWU2NywKKyAgICAweDllNmQsIDB4OWU3MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTFjNiwgMHhmZmZkLCAweGZmZmQs IDB4OTViZiwgMHhmZmZkLCAweDllNzUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 NTQxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNzQsIDB4OTQ5MCwKKyAgICAweDk2NWUs IDB4OGFiOSwgMHhmZmZkLCAweDkwZjUsIDB4OGY1ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDkyZDEsIDB4ZmZmZCwgMHg5NzRkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTcwLCAweDll NmYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZTcxLCAweGZmZmQsIDB4OWU2ZSwg MHhmZmZkLCAweGZmZmQsIDB4OWU3NiwKKyAgICAweGZmZmQsIDB4OWU2YywgMHhmZmZkLCAweGZm ZmQsIDB4OWU2YSwgMHhmZmZkLCAweDllNzIsIDB4OWU2OCwKKyAgICAweGZmZmQsIDB4OTI4Yywg MHhmZmZkLCAweDk2ZjYsIDB4OGVjNCwgMHg4ZGYyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkYjgsIDB4ZmZmZCwgMHhmZmZkLCAweDk2OGYsIDB4OGE2 MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MmNjLCAweDkzYzgsIDB4ODk2OCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkwZjAsIDB4ZmZmZCwgMHhmZmZkLCAweDkwYjIsIDB4OGM0OSwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNzgsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OGQ1YSwgMHg4YTljLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OWU3YSwgMHg4YTk0LCAweDllODEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZTdkLCAweGZmZmQsIDB4 OTBmMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhNmEsIDB4OGRhYSwgMHhmZmZk LCAweGZmZmQsIDB4OGE2OSwgMHg4ZGNkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDllN2IsIDB4 OGM4NSwgMHg4YzZhLCAweDkzOGQsIDB4ZmZmZCwgMHhmZmZkLCAweDllNzksIDB4ZmZmZCwKKyAg ICAweDg4YzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTdjLCAweDllN2Us IDB4ZmZmZCwKKyAgICAweDhiY2IsIDB4OGM0YiwgMHhmZmZkLCAweDhhYmEsIDB4OGI2YSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWU4MiwgMHhmZmZkLCAweGZmZmQs IDB4OGRmNywgMHg5NjkxLCAweGZmZmQsIDB4OGU1NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDllODMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU0ZiwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWU4ZiwgMHhmZmZkLCAweDg5 YjEsIDB4OWU4NCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDllOTUsIDB4OWU4NSwKKyAgICAweGZmZmQsIDB4OTdjMCwgMHhmZmZkLCAweDll OGMsIDB4ZmZmZCwgMHg5NDdlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZTk0LCAweGZmZmQsIDB4OWU4NywKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg4YjIsIDB4OWU4OSwgMHhmZmZkLCAweGZmZmQsIDB4OGQ1 YiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDllOGIsIDB4ZmZmZCwgMHg5ZThhLCAw eGZmZmQsIDB4OWU4NiwKKyAgICAweDllOTEsIDB4ZmZmZCwgMHg4ZmJkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDlhZWIsIDB4OGNlNiwKKyAgICAweDk3OWMsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5ZTg4LCAweGZmZmQsIDB4OTJmMiwKKyAgICAweDhhNDIsIDB4OGRh YiwgMHhmZmZkLCAweDllODAsIDB4ZmZmZCwgMHg5ZTkwLCAweDhhODEsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OWU4ZSwgMHg5ZTkyLCAweGZmZmQsIDB4OTM4ZSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFmYywgMHhmZmZk LCAweDllYjAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTZjNywgMHg5ZTk3LCAweDhhZmIsIDB4 ZmZmZCwgMHg5ZTllLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NjVm LCAweGZmZmQsIDB4OWU5ZiwgMHg5ZWExLCAweGZmZmQsIDB4OWVhNSwKKyAgICAweDllOTksIDB4 ZmZmZCwgMHg5MjQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM4ZiwKKyAg ICAweDllYTksIDB4OWU5YywgMHhmZmZkLCAweDllYTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWVhMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDkwNTgsIDB4OWVhYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MGIxLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWVhOCwgMHg4 YWJiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk4NmYs IDB4OWU5NiwgMHhmZmZkLCAweGZmZmQsIDB4OWVhNCwgMHg4OGQ2LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDllOTgsIDB4ZmZmZCwgMHhmZmZkLCAweDk2YjgsIDB4OWU5ZCwgMHg5MDQxLCAweDky YzUsIDB4OWU5MywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZWEzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTA5YSwgMHg5ZWFkLCAweDhh OTEsIDB4OGM5ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWVhZiwg MHg5ZTlhLCAweDllYWUsIDB4ZmZmZCwgMHg5ZWE3LCAweDllOWIsIDB4ZmZmZCwKKyAgICAweDll YWIsIDB4ZmZmZCwgMHg5ZWFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDllYmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNjYywgMHhmZmZkLCAw eDllYTIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWViOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5ZWJiLCAweGZmZmQsIDB4OTJkNiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg5NzZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1OTYsIDB4OWViNiwgMHg5MWM4LCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OWViYywgMHg5MTVlLCAweGZmZmQsIDB4OWViMywgMHg5ZWMw LCAweDllYmYsIDB4ZmZmZCwKKyAgICAweDkzZWQsIDB4OWViZSwgMHg5M2U4LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZWMy LCAweDllYjUsIDB4ZmZmZCwgMHg4YmM2LCAweDllYjgsIDB4OGY3YywKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk0ODAsIDB4OWViYSwgMHg4YmM5LCAweGZmZmQsIDB4OWViMiwKKyAg ICAweDllYjQsIDB4OWViMSwgMHhmZmZkLCAweGZmZmQsIDB4OTg0ZiwgMHg4YTc5LCAweDllYjcs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWVjMSwgMHg4YTU0LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZGU1LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDg5N2MsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWVkMiwgMHhm ZmZkLCAweGZmZmQsIDB4OTg1MCwgMHg5ZWQ1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkwNTksIDB4OWVkNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDllZDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OWVkMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDllYzQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWVlMSwgMHg5ZWMzLCAweGZm ZmQsIDB4OWVkNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDllY2UsIDB4ZmZmZCwgMHhmZmZkLCAweDllYzksIDB4OWVjNiwKKyAgICAweGZm ZmQsIDB4OWVjNywgMHhmZmZkLCAweDllY2YsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWFh MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZWNjLCAweDhkNWMsIDB4OTJjNiwgMHg5MTg0LCAw eDllY2EsIDB4ZmZmZCwKKyAgICAweDllYzUsIDB4ZmZmZCwgMHhmZmZkLCAweDllYzgsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk3NmMsIDB4OTY4YSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5ZWNkLCAweDllZDcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWVkZiwKKyAgICAw eDllZDgsIDB4ZmZmZCwgMHhmZmZkLCAweDllZTUsIDB4ZmZmZCwgMHg5ZWUzLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZWRlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWVkZCwgMHhmZmZkLCAweDkyY2UsIDB4 ZmZmZCwgMHg5MTg1LCAweGZmZmQsIDB4OWVkYiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZWQ5 LCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWUwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5ZWU2LCAweDk0ZjMsIDB4OWVlYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg5ZWU3LCAweDllZWEsIDB4OWVlNCwgMHhmZmZkLCAweGZmZmQs IDB4OTI5NCwKKyAgICAweGZmZmQsIDB4OTU1NywgMHhmZmZkLCAweDllZGEsIDB4ZmZmZCwgMHhm ZmZkLCAweDllZTIsIDB4OGZiZSwKKyAgICAweGZmZmQsIDB4OTZjZCwgMHg5ZWY2LCAweDllZTks IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGNhMCwgMHg4 OWExLCAweDhhN2UsIDB4ZmZmZCwgMHhmZmZkLCAweDllZDEsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmJmLCAweDllZWUsIDB4ZmZmZCwK KyAgICAweDllZjUsIDB4OGVmNywgMHg4YTkyLCAweGZmZmQsIDB4ZmZmZCwgMHg5MjRkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWVlYiwg MHhmZmZkLCAweGZmZmQsIDB4OWVmMCwKKyAgICAweDllZjQsIDB4ZmZmZCwgMHhmZmZkLCAweDhi YjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhi NmIsIDB4OWVmMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI0 MCwKKyAgICAweGZmZmQsIDB4OTNjOSwgMHg5ZWYxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDllZjMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZWVkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDllZWYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE4MCwKKyAgICAw eDkyNjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWVmYSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZWY4 LCAweDhjZTcsIDB4ZmZmZCwKKyAgICAweDllZjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY0MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWU3NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDllZjksIDB4 ZmZmZCwgMHg5ZWZiLCAweDllZmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg5ZjRiLCAweGZmZmQsIDB4OWY0NywgMHhmZmZkLCAweDllOGQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNDYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlmNDUsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNDIs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWVlOCwgMHg5 ZjQ0LCAweDlmNDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OWY0OSwgMHhmZmZkLCAweDk4NDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZjRjLCAweDhiZjksIDB4ZmZmZCwg MHhmZmZkLCAweDlmNDgsIDB4OWY0YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk0YTUsIDB4ZmZmZCwg MHg5ZjRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZjUxLCAweDlmNGUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc5 MywgMHg5ZjRmLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZWRjLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg5ZjUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNTMsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTU0LCAweGZmZmQsIDB4 OWY1NSwKKyAgICAweDhjODcsIDB4OGU5ZiwgMHhmZmZkLCAweDhiZDMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ODlhMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5Nzdl LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY1NywKKyAgICAweDlmNTYsIDB4 OWY1OSwgMHg4YjVjLCAweGZmZmQsIDB4ZmZmZCwgMHg4YmQ0LCAweDhhYmMsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWY1YiwKKyAgICAweGZmZmQsIDB4OWY1ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODljYywgMHhm ZmZkLCAweDkyNTYsIDB4ZmZmZCwKKyAgICAweDlmNWUsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYmQs IDB4OWY2MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWY1ZiwgMHhm ZmZkLCAweDlmNjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY2MiwKKyAgICAweGZmZmQs IDB4OWY2MywgMHg4ZTdlLCAweDkwYjMsIDB4OGQ5ZiwgMHhmZmZkLCAweDk1OTAsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OTVlMCwgMHg5ODYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGU5NSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhkY2UsIDB4OTdmMCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlmNjQsIDB4OWY2NSwgMHhmZmZkLCAweDhl ODAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY2NiwKKyAgICAweDlmNjcsIDB4ZmZmZCwg MHhmZmZkLCAweDlmNjksIDB4OWY2OCwgMHhmZmZkLCAweDk2NzcsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OGY3ZCwgMHg4ZWVhLCAweDhlNjMsIDB4ZmZmZCwgMHg5ZjZhLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZjZjLCAw eDkwNDIsIDB4ZmZmZCwKKyAgICAweDlmNmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDlmNmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OWY2ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg5ZjZmLCAweDlmNzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWY3MSwKKyAgICAw eGZmZmQsIDB4OWY3MywgMHg5ZjcyLCAweDlmNzQsIDB4ODlhMywgMHg5MjY5LCAweGZmZmQsIDB4 OWY3NSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZTQ1LCAweDhhNmIsIDB4OWY3NiwgMHhmZmZk LCAweGZmZmQsIDB4OTM2MSwKKyAgICAweDlhY2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YjQyLCAweDlmNzcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDlmNzgsIDB4ZmZmZCwgMHg5NWVhLCAweDk2ODgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5M2M1LCAweDlmNzksIDB4OTRlNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDk0ZjksIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZDEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OWY3YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmN2Ms IDB4OWY3YiwgMHhmZmZkLCAweGZmZmQsIDB4OWY3ZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDlmN2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDlmODEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGU4MSwKKyAgICAweGZmZmQsIDB4OTZhZiwgMHhmZmZkLCAweDlm ODIsIDB4OWY4MywgMHhmZmZkLCAweGZmZmQsIDB4OGI0MywKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDlmODQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmODYsIDB4OWY4NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA4 NSwgMHhmZmZkLCAweGZmZmQsIDB4OTU1OCwKKyAgICAweDg5NjksIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YzMsIDB4ZmZmZCwKKyAgICAweDkyZjMsIDB4OGY2 MCwgMHg4YjgxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0YzQsIDB4 ZmZmZCwKKyAgICAweDhlYWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Zjg4 LCAweGZmZmQsIDB4OGFiZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OTk4LCAweGZmZmQsIDB4 ZmZmZCwgMHg5M2YwLCAweDlmODcsIDB4OGQ1ZCwKKyAgICAweDkyNzIsIDB4ZmZmZCwgMHg5Zjg5 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlmOTEsIDB4 ZmZmZCwgMHg5ZjhhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDkxYmYsIDB4ZmZmZCwgMHg4YjgyLCAweDlmOTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4Yzg4LCAweGZmZmQsIDB4ZmZmZCwgMHg4 YjQ0LCAweDlmOTAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWY4ZSwgMHg5ZjhiLCAweDk3ODAs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkyYmUsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTNkNywgMHg5ZjhjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlmOTQs IDB4ZmZmZCwgMHg5ZjkzLCAweDhjNDIsIDB4ZmZmZCwgMHhmZmZkLCAweDg5YWIsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OGRiOSwgMHg5ZjhkLCAweDlmOGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTY3NiwgMHg5MWYyLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2 OTcsIDB4ZmZmZCwgMHhmZmZkLCAweDlmOWMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWY5ZCwg MHhmZmZkLCAweDg5Y2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk1 YTYsIDB4OTZmYiwgMHg5ZjlmLCAweDhlYTEsIDB4OGZjMCwgMHg5Zjk4LCAweDlmOWUsIDB4ODk4 OCwKKyAgICAweGZmZmQsIDB4OGJiNSwgMHhmZmZkLCAweGZmZmQsIDB4OWY5NSwgMHg5ZjlhLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTBmMiwgMHg5NDkxLCAweGZmZmQsIDB4OTRl NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDlmOTcsIDB4ZmZmZCwgMHg5NjQwLCAweGZmZmQsIDB4OWY5OSwKKyAgICAweGZmZmQsIDB4OWZh MiwgMHhmZmZkLCAweDlmYTAsIDB4ZmZmZCwgMHg5ZjliLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OTY0MSwgMHg5NDY3LCAweDhiODMsIDB4ZmZmZCwgMHg5MzQ0LCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDkyOGQsIDB4ZmZmZCwgMHg5ZmEzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OWZhMSwKKyAgICAweDkxZDcsIDB4OWY5NiwgMHhmZmZkLCAweDg5NmEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3NmQsIDB4OWZhZSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZmFkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTBmNCwKKyAgICAweGZmZmQsIDB4OWZhYSwgMHhmZmZkLCAweDk3OGMs IDB4ZmZmZCwgMHhmZmZkLCAweDkzYjQsIDB4OWZhNCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmMzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ODk2YiwgMHg4ZDVlLCAweDlmYTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZjQ2LCAweDlmYWMsIDB4ZmZmZCwgMHg5ZmFiLCAweDlm YTYsIDB4ZmZmZCwKKyAgICAweDlmYTksIDB4ZmZmZCwgMHhmZmZkLCAweDhhODgsIDB4ZmZmZCwg MHg5ZmE4LCAweDk0NjgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTdhYywgMHhmZmZkLCAweGZm ZmQsIDB4OGZmMiwgMHg5MGYzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4OWZiNCwgMHg5ZmIyLCAweGZmZmQsIDB4OTU2YywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmYWYsIDB4OWZi MSwgMHhmZmZkLCAweDg5NTksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGQ1ZiwgMHg5ODUxLCAw eGZmZmQsIDB4OGE1YywgMHhmZmZkLCAweDk1ODIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTc4MSwgMHhmZmZkLCAweGZmZmQsIDB4OGE0MywKKyAgICAw eDkwNWEsIDB4OWZiMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmI4 LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhmYzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTc0ZiwgMHhmZmZkLCAweDlmYjUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDlmYjAsIDB4ZmZmZCwgMHg5ZmI2LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OTdkYywgMHhmZmZkLCAweDkzOTMsIDB4OTNjMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OGE1NSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OTc0LCAweGZmZmQs IDB4ZmZmZCwgMHg5ZmJjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDlmYmYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTdjMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk3ODQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmM2LCAweDlmYzAsIDB4OWZiZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZDIsIDB4OWZjMywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGY2OSwgMHg5ZmM1LCAweGZmZmQsIDB4ZmZmZCwg MHg5ZmNhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkzOTEsIDB4OWZjOCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmYzIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTI1Nywg MHhmZmZkLCAweGZmZmQsIDB4OWZjOSwgMHhmZmZkLCAweDlmYmUsIDB4ZmZmZCwKKyAgICAweDlm YzQsIDB4ZmZmZCwgMHg5ZmNiLCAweDg4ZmEsIDB4OWZjMSwgMHhmZmZkLCAweDlmY2MsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4OTA1YiwgMHhmZmZkLCAweDhmN2UsIDB4ZmZmZCwgMHg5NWEzLCAw eGZmZmQsIDB4OGRhYywKKyAgICAweGZmZmQsIDB4OWZiOSwgMHg5ZmM3LCAweDkzNTksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MGI0LCAweGZmZmQsIDB4OGE4OSwKKyAgICAweDhkY2YsIDB4OGZj MiwgMHg5ZmJiLCAweDhmNjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjNmIsIDB4ZmZmZCwgMHg5ZmJhLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OWZkMCwgMHg4ZjhkLCAweDhjYjgsIDB4ZmZmZCwgMHg5ZmRm LCAweGZmZmQsIDB4OWZkOSwKKyAgICAweDhiOTQsIDB4OTM2ZSwgMHhmZmZkLCAweDlmZDQsIDB4 OWZkZCwgMHg4OGFkLCAweDg5NTEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODliNywgMHhmZmZk LCAweDlmZDYsIDB4OTFhYSwgMHg5ZmNkLCAweDlmY2YsIDB4OGQ2MCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDlmZTAsIDB4ZmZmZCwgMHg5ZmRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZDMs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZGEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NmE5LCAweGZmZmQs IDB4ZmZmZCwgMHg5ZmQ4LCAweDlmZGMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjY2UsIDB4ZmZmZCwKKyAgICAweDhmYzMs IDB4ZmZmZCwgMHhmZmZkLCAweDkyNTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZkMiwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTc0ZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZDUsIDB4ZmZmZCwg MHhmZmZkLCAweDlmY2UsIDB4OTM5MiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZmQxLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlmZDcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NzAsIDB4OGViYywKKyAgICAweDk2 OWUsIDB4ZmZmZCwgMHg5ZmUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRhYywgMHhmZmZkLCAw eGZmZmQsIDB4OWZlZCwKKyAgICAweDhjYjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDhmODAsIDB4ZmZmZCwKKyAgICAweDlmZTMsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTdhZCwgMHg4ZDYxLCAweGZmZmQsIDB4OWZmMCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg4OGVjLCAweGZmZmQsIDB4ZmZmZCwgMHg5ZmVlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg5ZmUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OWZlOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZmVhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDk3NmUsIDB4OWZlNSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MzRkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5ZmU3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZmVm LCAweGZmZmQsIDB4OWZlOSwgMHg5NmM1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OWZlNCwgMHhmZmZkLCAweDhlYTAsIDB4OWZmYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OGE4YSwgMHhmZmZkLCAweDlmZTYsIDB4OWZlYiwgMHg5ZmVjLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MWVhLCAweDkxZDgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OWZmNCwgMHhmZmZkLCAweGZmZmQsIDB4OWZmYSwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5ZmY4LCAweGZmZmQsIDB4OTM0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA0MiwK KyAgICAweDlmZjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDlm ZjYsIDB4OWZkZSwKKyAgICAweGZmZmQsIDB4OGI5OSwgMHg5NTU5LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDhlYmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGQ5NywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg1MiwKKyAgICAweGZmZmQsIDB4OWZmMiwg MHhmZmZkLCAweGUwNDEsIDB4ODk4OSwgMHg5MTg2LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDk0OTksIDB4ZmZmZCwgMHg4YWJmLCAweDk3ZjgsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2OWYsIDB4OTJk MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OWZmOSwgMHg5ZmZiLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxNTEsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNDAsIDB4OWZmNywKKyAgICAw eGZmZmQsIDB4OWZmMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YWMxLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGM4OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwNGUsIDB4ZmZmZCwgMHhmZmZk LCAweGUwNDksIDB4OTBmNiwgMHhmZmZkLCAweGZmZmQsIDB4OGE4MywKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY4MSwgMHhmZmZkLCAweGUwNTIsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDRiLCAweDkyYWEs IDB4ZTA0OCwKKyAgICAweDkyZDcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA2YiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwNDUsIDB4ZmZmZCwgMHhlMDQ0LCAweGZmZmQs IDB4ZTA0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwNDcsIDB4ZTA0NiwgMHhl MDRjLCAweGZmZmQsIDB4OTA5ZiwgMHhmZmZkLCAweGUwNDMsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNGYsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZTA1MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OGFjMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTA1NSwgMHhmZmZkLCAweGUw NTQsIDB4ZTA1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhlMDU5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OTM2MiwgMHhmZmZkLCAweGUwNTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZTA1NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDhjODMsIDB4OTFmNywgMHhlMDUxLCAweDk0NWEsIDB4ZmZm ZCwgMHhmZmZkLCAweGUwNTgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA1ZCwgMHhlMDViLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGUwNWUsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNjEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTA1YSwKKyAgICAweDhkOGEsIDB4OTQ0NywgMHhmZmZkLCAweGZmZmQsIDB4OWZiNywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3OTQsIDB4 ZTA1YywgMHhmZmZkLCAweGUwNjAsIDB4OTFmMywKKyAgICAweGZmZmQsIDB4ZTA1ZiwgMHhmZmZk LCAweGUwNGEsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ODksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlMDY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNjgsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZTA2NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTA2MiwgMHhmZmZkLCAweGUwNjMsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTA2NywKKyAgICAweGZmZmQsIDB4ZTA2NSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHg5NTZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwNmQsIDB4ZmZmZCwgMHhl MDZhLCAweGUwNjksIDB4ZmZmZCwgMHhlMDZjLCAweDkzZDIsIDB4ZTA2ZSwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyOTUsIDB4OTFlYiwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBhMywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGUwNmYsIDB4ZmZmZCwgMHhlMDcxLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwNzAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWZmMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZTA3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDkzZTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGUwNzMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDg5Y2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM5NCwKKyAgICAw eDhhNDQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDhiODQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGVkYywgMHg4ZGQw LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTg0NiwgMHg5MDg2 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5OGEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlMDc1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZTA3NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTA3OCwgMHg5MjU5LCAweGUwN2IsIDB4ZTA3NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGUwN2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwNzks IDB4OTM1ZiwgMHg4OGQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDk3ZjMsIDB4ZmZmZCwgMHhmZmZkLCAweGUwN2QsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ODk0NywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTA4MCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDdlLCAweGZmZmQsIDB4ZTA3YywKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTA3NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTY0MiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMDgyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZTA4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk4YiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTA4NCwgMHg5NWIwLCAweGZmZmQsIDB4 ZTA4MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTZiMywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmYzUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxNTIs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGZjNCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTdmOSwgMHhm ZmZkLCAweGZmZmQsIDB4ZTA4YSwgMHhmZmZkLCAweDkwZjcsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDg2LCAweGUwOGIsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ODk4YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMDg5LCAweGZmZmQsIDB4OTQ4MSwg MHhlMDg1LCAweGUwODgsIDB4OGZjNiwKKyAgICAweGZmZmQsIDB4OTRjZiwgMHhmZmZkLCAweGZm ZmQsIDB4ZTA4YywgMHhmZmZkLCAweDhlY2YsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MGY4LCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA4ZiwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwODcsIDB4ZmZmZCwgMHg4YzQ2LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA4ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTc2ZiwgMHhlMDkwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZWFh NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY2ZSwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGUwOTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA5MiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTQ0ZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTA5NCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwOTUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk0NTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDkzOTUsIDB4ZTA5NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwOTks IDB4ZmZmZCwKKyAgICAweDk3ZDMsIDB4ZmZmZCwgMHhlMDk2LCAweGZmZmQsIDB4ZTA5OCwgMHg4 OThkLCAweGZmZmQsIDB4ZTA5MywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OWE3YSwKKyAgICAweGUwOWEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MTg3LCAweDhlNTcsIDB4ZTA5YywKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTA5YiwgMHg5MDQzLCAweDk5ZDcsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMDlkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTA5ZiwgMHhmZmZkLCAweGUwOGUsIDB4ZTA5ZSwg MHhmZmZkLCAweGZmZmQsIDB4ZTBhMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0OWEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGExLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUw YTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYTMsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwYTQsIDB4ZmZmZCwgMHg5MmRjLCAw eGZmZmQsIDB4ZTBhNiwgMHhlMGE1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwYTcsIDB4ZmZm ZCwgMHhlMGE4LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWRkLCAweDk1ODMsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg5NmVhLCAweGUwYTksIDB4ZTBhYSwgMHg5MTc1LCAweDhlYTIsIDB4 ZTBhYiwKKyAgICAweGUwYWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGUwYWQsIDB4OTVkMCwKKyAgICAweDk0YzUsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYWUsIDB4 OTQ3NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MmFi LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwYWYsIDB4 ODllNSwgMHhmZmZkLCAweDhiOGQsIDB4ZmZmZCwgMHg5NmM0LCAweGZmZmQsIDB4OTZiNCwKKyAg ICAweGZmZmQsIDB4ODliMiwgMHg5ODUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTY3MSwKKyAgICAweGZmZmQsIDB4OTVhOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MGI1LCAweGZmZmQs IDB4ZTBiMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTNjMSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2ExLCAweGUwYjEsIDB4ZmZmZCwKKyAgICAweDhkZDIs IDB4ZTBiMywgMHhlMGIyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBiNCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMGI1LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUwYjYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhiNWQsIDB4ZmZmZCwg MHhlMGI3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBiOCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGNhMiwgMHhmZmZkLCAweGZmZmQsIDB4OTRj NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMGJhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhmZjMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTBiOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YmI2LCAw eGUwYmIsIDB4ZTBiZCwgMHhmZmZkLCAweGUwYmMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYmUsIDB4ZmZmZCwKKyAgICAw eDhjY2YsIDB4ZmZmZCwgMHhlMGJmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGJlNywKKyAgICAweGZmZmQsIDB4OTE1ZiwgMHhmZmZkLCAweDhkOWQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwYzEsIDB4ZTBjMiwgMHhlMGMwLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGVlYiwgMHhmZmZk LCAweGZmZmQsIDB4OTNjNiwgMHg4YmI3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBjNCwKKyAg ICAweDkyNGIsIDB4ZTBjMywgMHhmZmZkLCAweGZmZmQsIDB4OTg1NCwgMHg5NDgyLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMGM3LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwYzksIDB4ZTBjNiwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDk2ZDIsIDB4ZTBjOCwgMHhlMGNhLCAweGZmZmQsIDB4OTdjMiwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGNlLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTBjZCwgMHg5Mjk2LCAweDk0NGMsIDB4ZmZmZCwg MHhmZmZkLCAweDhjYTMsIDB4ZTBjYywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTBjYiwgMHhmZmZkLCAweDk3NTAsIDB4OTc1MSwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwY2YsIDB4ODk4ZSwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGQ5NiwgMHg4ZTgyLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGUwZDAsIDB4ZTBkMSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBkMywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDhmNjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGUwZDUsIDB4ZmZmZCwgMHhlMGQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGUwZDYsIDB4ZmZmZCwgMHg4YTZjLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGQ4 LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwZDcsIDB4ZmZmZCwgMHhlMGRhLCAweGUwZDksIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGNiYSwgMHhmZmZkLCAweGZmZmQsIDB4OTdhNiwKKyAgICAweGZmZmQsIDB4 OGJjYSwgMHhmZmZkLCAweDg5YTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiZTgs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGFkZiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5N2U2LCAweGUwZGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGUwZGYsIDB4ZmZmZCwgMHg4OWNmLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwZGIsIDB4ZmZmZCwgMHg4ZTU4LCAweGZm ZmQsIDB4ZmZmZCwgMHg5MmJmLCAweGUwZGQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZTIsIDB4ZmZm ZCwKKyAgICAweDhlZWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGUwLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YzVkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5NGM3LCAweGUwZTEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTBmYywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwZTcsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjYmIsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiODUsIDB4ZmZmZCwgMHhlMGU0LCAweDk3OWQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OTdhZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5MWY0LCAweGZmZmQsIDB4ZmZmZCwgMHhlMGU2LCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMGU4LCAweDk3ZDQsIDB4OGJkNSwgMHg5 NGZhLCAweDk0NjksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMGU5LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBlYiwKKyAgICAweGZmZmQsIDB4ZTBlZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMGVhLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTBlZCwgMHg4Y2U4LCAweDg5NmMsIDB4ZTBlZiwg MHhmZmZkLCAweDkwOTAsIDB4ZTBlYywKKyAgICAweDk3ZGEsIDB4ZmZmZCwgMHhmZmZkLCAweGUw ZjIsIDB4ZWFhMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTBmMCwg MHhlMGYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTBlNSwKKyAgICAweGUw ZjEsIDB4ZmZmZCwgMHhmZmZkLCAweDhkYmEsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZjQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGUwZjUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3OWUsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGUwZjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUwZjcsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMGUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTBmOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhYzIsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZWEzLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMGY5LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTBmYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTBmYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ODk1YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUxNDAs IDB4ZmZmZCwgMHg5NTVhLCAweGUxNDEsIDB4ZmZmZCwgMHhmZmZkLCAweDhhYTIsIDB4ZTE0MiwK KyAgICAweGZmZmQsIDB4ZTE0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUx NDQsIDB4ZmZmZCwKKyAgICAweGUxNDYsIDB4ZTE0NywgMHhlMTQ1LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDk1NzIsIDB4ZTE0OSwKKyAgICAweGUxNDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUxNGIsIDB4ZTE0YSwgMHhlMTRjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTE0ZCwgMHhlMTRmLCAweGUxNGUsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4OGQ5OSwgMHhmZmZkLCAweGUxNTEsIDB4ZmZmZCwgMHhlMTUwLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhYzMsIDB4ZmZmZCwgMHg5MDcyLCAweGZmZmQsIDB4OTM1 YiwgMHhmZmZkLCAweGUxNTIsIDB4OTBiNiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhlNTksIDB4ZmZmZCwgMHg4OTk5LCAweGUxNTMsIDB4ZmZmZCwKKyAgICAweDk3NzAsIDB4ZmZm ZCwgMHhmZmZkLCAweDk1ZTEsIDB4ZTE1NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDkzNjMsIDB4OTc1MiwgMHg4ZDYyLCAweDkwNWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTI2YSwKKyAgICAweDk5YjIsIDB4ZmZmZCwgMHg5MmFjLCAweDg5ZTYsIDB4ZTE1NSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTE1NiwgMHhmZmZkLCAweGUxNWIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTE1OSwgMHhlMTU4 LCAweDlkYzAsIDB4OGE0NSwgMHhlMTU3LCAweGZmZmQsIDB4ODhkOCwKKyAgICAweGZmZmQsIDB4 OTRhOCwgMHhmZmZkLCAweGZmZmQsIDB4OTRjOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OTdhZiwgMHhlMTVjLCAweGUxNWEsIDB4OTI3YiwgMHg5MGE0LCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDk0YTksIDB4ZmZmZCwgMHg5NTRjLCAweGZmZmQsIDB4ZTE1ZSwgMHg5 N2FhLCAweDhjNmMsIDB4ZTE1ZiwKKyAgICAweGZmZmQsIDB4ZTE1ZCwgMHg5NGQ0LCAweGUxNjAs IDB4ZmZmZCwgMHhlMTYxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDg4ZDksIDB4ZmZmZCwgMHhm ZmZkLCAweDhmZjQsIDB4ZTE2NiwgMHhmZmZkLCAweGUxNjMsIDB4OTNlYiwKKyAgICAweGUxNjIs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI0NSwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMTY5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUx NjQsIDB4ZTE2NSwKKyAgICAweGZmZmQsIDB4ZTE2OCwgMHhlMTY3LCAweDk1NDQsIDB4ZmZmZCwg MHhmZmZkLCAweDkxNjEsIDB4OTE2MCwKKyAgICAweGZmZmQsIDB4OGI1ZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZTE2YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhlMTZiLCAweGZmZmQsIDB4ZmZmZCwgMHhlMTZjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxNmUsIDB4ZmZmZCwgMHhlMTZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NzUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTE3NiwgMHg5NGU2LCAweGUxNzAsIDB4ZmZm ZCwgMHhlMTcyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUxNzQsIDB4OTA1ZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTE3NSwgMHhlMTczLCAweDhlYmUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhlMTZmLCAweGUxNzEsIDB4ZmZmZCwgMHg5NTYxLCAweGZmZmQsIDB4OGZjNywKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhlMTc4LCAweGZmZmQsIDB4ZmZmZCwgMHhlMTc3LCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMTc5LCAweGZmZmQsIDB4OGVhNCwgMHg4ZGFk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkzOTcsIDB4ZTE3YSwgMHhmZmZkLCAweDkyYzksIDB4 ZmZmZCwgMHhmZmZkLCAweGUxN2MsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5Nzlm LCAweGUxN2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OTE4OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGUxODIsIDB4ZmZmZCwgMHhlMTg0LCAweGUxODUsIDB4OTI3MywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMTgzLCAweGZmZmQsIDB4ZTE4MCwgMHhm ZmZkLCAweGUxN2QsIDB4ZTE3ZSwKKyAgICAweGZmZmQsIDB4ZTE4MSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTE4OCwgMHhm ZmZkLCAweGUxODYsIDB4ZmZmZCwgMHhlMTg3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTE4OSwKKyAgICAweGUxOGIsIDB4ZTE4YywgMHhlMThkLCAweGZmZmQsIDB4ZTE4ZSwg MHhmZmZkLCAweGZmZmQsIDB4ZTE4YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUxOTAsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTE4ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxOTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5N2MzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGUxOTQsIDB4ZTE5MiwKKyAgICAweGUxOTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFl MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NmZjLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YzgsIDB4ZmZmZCwKKyAgICAweGUxOTYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTE5NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZTE5NywgMHhlMTk4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTE5YywKKyAgICAweGUxOTksIDB4ZTE5YSwgMHhlMTliLCAweGZmZmQsIDB4ZTE5ZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUxOWUsIDB4ZmZmZCwgMHhlMTlmLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGUxYTAsIDB4ZmZmZCwKKyAgICAweGUxYTEsIDB4ZmZmZCwgMHg5NGFk LCAweDkzNmYsIDB4ZTFhMiwgMHg5NDkyLCAweDk1NTMsIDB4ZmZmZCwKKyAgICAweGUxYTMsIDB4 ZmZmZCwgMHhmZmZkLCAweGUxYTQsIDB4OTM0OSwgMHhmZmZkLCAweDhhNDYsIDB4OGQ2MywKKyAg ICAweGUxYTUsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYTYsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYTcs IDB4ZmZmZCwKKyAgICAweDhlNDgsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYTksIDB4ZmZmZCwgMHhm ZmZkLCAweGUxYTgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTFhYSwgMHhlMWFiLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0ZTcsIDB4ZmZmZCwK KyAgICAweGUxYWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFhZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZWE4OSwKKyAgICAweGUxYWUsIDB4ZTFhZiwgMHhlMWIwLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGU0ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMWIxLCAweDk0 NzUsIDB4ZmZmZCwgMHhmZmZkLCAweDk2N2UsIDB4ZmZmZCwKKyAgICAweDg5NmQsIDB4ZmZmZCwg MHg4OTc2LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWIyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhlMWI0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYjMsIDB4OTM5 MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwYjcsIDB4OWY1OCwgMHhmZmZkLCAw eGUxYjUsIDB4OTZiZiwKKyAgICAweGZmZmQsIDB4ZTFiNiwgMHhmZmZkLCAweDhhYzQsIDB4OTRk NSwgMHhlMWI3LCAweGZmZmQsIDB4ZTFiOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMWI5LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZGEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg5NmQzLCAweGZmZmQsIDB4OTJiYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDkxOGEsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYmIsIDB4ZmZmZCwgMHhmZmZkLCAweDhmODIsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OGZjOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFiZSwgMHhmZmZk LCAweGZmZmQsIDB4ZTFiZCwKKyAgICAweGUxYmMsIDB4OTRmYiwgMHhmZmZkLCAweDhhYzUsIDB4 OGNhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGUxYzQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxYzEsIDB4OTA1ZSwKKyAg ICAweDk2YjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFjMCwgMHhlMWMyLCAweGUxYzMs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTFiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFjNSwKKyAgICAweGUxYzYsIDB4ZmZmZCwgMHg5 MmFkLCAweGZmZmQsIDB4OGFlMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkyODUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFjNywK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMWM4LCAweGUx Y2IsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTA4Nywg MHhmZmZkLCAweDkzYzIsIDB4ZmZmZCwgMHhlMWNjLCAweDk2NzIsIDB4ZmZmZCwKKyAgICAweGUx YzksIDB4ZmZmZCwgMHhmZmZkLCAweGUxY2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTFjZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUxY2UsIDB4ZTFjZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUxZDEsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZDAsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZTFkMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGUxZDQsIDB4ZmZmZCwKKyAgICAweGUxZDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5NWNiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGY3NSwgMHg5N2M0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUxZDUsIDB4 ZmZmZCwgMHhmZmZkLCAweDkzYjUsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZDYsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZTFkNywgMHhmZmZkLCAweGUxZGIsIDB4ZTFkOSwgMHhlMWRhLCAweGZmZmQs IDB4ZTFkOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTFkYywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMWRkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFkZSwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhlMWRmLCAweDk2YjUsIDB4ZTFlMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NmVlLCAweGUxZTEsIDB4ZmZmZCwgMHg5MjZkLCAweGZm ZmQsIDB4OTQ4YSwKKyAgICAweGZmZmQsIDB4OGJlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5MjVhLCAweGUxZTIsIDB4OGJiOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkw Y2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTFlMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg4ZGJiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFlNCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMWU1LCAweGZmZmQsIDB4OGNh NCwgMHg4ZGQzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUxZTcsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Mzc1LCAweDhkZDQsIDB4OGI2ZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NjQzLCAweGZmZmQsIDB4OTQ2YSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5Mzc2LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGQ3YiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlMWU5LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZmM5LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk3YjAsIDB4OGQ2NCwgMHhmZmZkLCAweGZmZmQsIDB4OGNhNSwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5NGExLCAweGZmZmQsIDB4ZTFlYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFlZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGNlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUxZWMsIDB4OTJmNCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTFlZiwgMHg4YTU2LCAweGUxZWEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTRlOCwg MHhmZmZkLCAweDg5NGYsIDB4ZmZmZCwgMHg4ZGVhLCAweGZmZmQsIDB4OTg3MSwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhlMWVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZjAsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTVjOSwKKyAgICAweGZmZmQsIDB4OTBkNywgMHhlMWYyLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFmMywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMWYxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg4YTZkLCAweGZmZmQsIDB4ZTFmOSwgMHhmZmZkLCAweGUxZjgsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OGVhNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMWZhLCAweGUxZjUsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMWZiLCAweGUxZjYsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk0ZDYsIDB4ZTFmNCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTFmNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMjQx LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI0MCwKKyAg ICAweDk2ODEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTFmYywgMHhmZmZkLCAweGZmZmQs IDB4ODhlOSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI0MywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMjQyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGZjYSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI0NCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxNjIsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZTI0NiwgMHhlMjQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTI0NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUxZTYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhlMWU4LCAweGUyNDksIDB4ZTI0OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZWE2LCAweGZmZmQsIDB4OTdlNywgMHhmZmZkLCAw eDhlZDAsIDB4ZmZmZCwKKyAgICAweGUyNGEsIDB4OGM1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OGI1ZiwKKyAgICAweDhiNDYsIDB4OGU4MywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk3NTMsIDB4ZmZm ZCwgMHhmZmZkLCAweGUyNTAsIDB4ZmZmZCwgMHhlMjRmLCAweDkxNjMsIDB4ZTI0YywKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhlMjRlLCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjZhLCAweDkwNWYsIDB4 ZTI0ZCwKKyAgICAweGUyNGIsIDB4ZmZmZCwgMHg5NDQ5LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZmNi LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk1NWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4ZGQ1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM5OCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlMjUxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI1MiwKKyAg ICAweGUyNjgsIDB4OGJkNiwgMHhmZmZkLCAweGZmZmQsIDB4OTg1YywgMHg5MTU0LCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMjUzLCAweGZmZmQsIDB4ZmZmZCwgMHg4 OWQwLCAweDkyZjUsIDB4OTU5ZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjU0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiOWEsIDB4ZTI1NSwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMjU3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUy NTgsIDB4ZmZmZCwKKyAgICAweDk0NDgsIDB4ZmZmZCwgMHhmZmZkLCAweGUyNTksIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTI1YSwgMHhlMjViLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YmQ3LCAweDg5ZDEsIDB4OTNjMywKKyAgICAweDhmNDcsIDB4OGU4NCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZTI1YywgMHhmZmZkLCAweDhmNDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ODljOCwgMHg5NTYyLCAweGZmZmQsIDB4ZmZmZCwgMHhlMjVkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDk0ZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE2NCwKKyAgICAweGZmZmQsIDB4ZTI2MCwgMHhmZmZkLCAw eGUyNjEsIDB4OTQ4OSwgMHhmZmZkLCAweDkwNjAsIDB4ZTI1ZSwKKyAgICAweGZmZmQsIDB4OTI4 MSwgMHhmZmZkLCAweGZmZmQsIDB4ZTI1ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDhmY2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg4ZGEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhiNDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUyNjIsIDB4ZmZmZCwgMHhmZmZk LCAweDkyZjYsIDB4ZmZmZCwgMHhlMjYzLCAweDkwYzUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTZhYiwgMHhmZmZkLCAweGZmZmQsIDB4OTU0MiwKKyAg ICAweGUyNjQsIDB4ZTI2NSwgMHg5Mjc0LCAweGZmZmQsIDB4OTdjNSwgMHhmZmZkLCAweGZmZmQs IDB4ZTI2NywKKyAgICAweGUyNjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhlZWQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTI2OSwgMHg4 OGVlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI2YywKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGUyNmEsIDB4ODlkMiwgMHg4YzZkLCAweGUyNmIsIDB4OGQ2NSwK KyAgICAweDhkOTIsIDB4ZmZmZCwgMHg5NWU0LCAweGUyNmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2 NzMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTI2ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5MGNmLCAweDg5NmUsIDB4ODliOCwKKyAgICAweDg4YWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI2ZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZTI3MCwgMHhlMjcxLCAweDhmZjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZTI3MiwgMHhmZmZkLCAweDhhNmUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGUyNzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM4 YSwgMHhmZmZkLCAweDhiODYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTI3NSwgMHg4YmYzLCAw eGZmZmQsIDB4ZmZmZCwgMHhlMjc2LCAweGZmZmQsIDB4OTBmYSwKKyAgICAweGZmZmQsIDB4OTNj YiwgMHhmZmZkLCAweDkwZGUsIDB4OGRmMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGUyNzcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MjgyLCAweDkxOGIsIDB4ZmZmZCwgMHhlMjc5 LCAweGUyN2IsIDB4ZTI3OCwKKyAgICAweGUyN2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM0MSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZTI3YywgMHg4YzQ1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiODcsIDB4OTc3MSwKKyAg ICAweGUyN2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyODAs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OTRkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTI4MywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhOTYs IDB4ZTI4MiwgMHhlMjgxLCAweGZmZmQsIDB4ZTI4NSwKKyAgICAweGUyN2QsIDB4ZmZmZCwgMHhl Mjg2LCAweDk3YTcsIDB4ZmZmZCwgMHhlMjg3LCAweGZmZmQsIDB4ZTI4OCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5YWYyLCAweGUyOGEsIDB4ZmZmZCwgMHhlMjg5LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZTI4YiwgMHhlMjhjLCAweGZmZmQsIDB4OTdiMywgMHhlMjhkLCAweGZm ZmQsIDB4ZThlZCwKKyAgICAweDhmY2QsIDB4ZTI4ZSwgMHhlMjhmLCAweDhmNzYsIDB4ZmZmZCwg MHg5M2I2LCAweGUyOTAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MjQ3LCAweGZm ZmQsIDB4ZmZmZCwgMHhlMjkxLCAweGZmZmQsIDB4OTI1YiwKKyAgICAweGUyOTIsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhiYTMsIDB4ZmZmZCwKKyAgICAweDk5 NWUsIDB4OTI3YywgMHg4ZWIxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGFj NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMjkzLCAweGZmZmQsIDB4ZTJhMCwgMHhmZmZkLCAw eGUyOTYsIDB4ZmZmZCwKKyAgICAweDhiODgsIDB4ZmZmZCwgMHhlMjk1LCAweGUyYTIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTI5NCwKKyAgICAweGZmZmQsIDB4OGZjZSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUyOTgsIDB4ZTI5 OSwgMHhmZmZkLCAweDkzNGEsIDB4ZmZmZCwgMHhmZmZkLCAweGUyOWEsIDB4ZmZmZCwKKyAgICAw eDhhN2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MDc5LCAweDk1ODQsIDB4 ZmZmZCwKKyAgICAweGUyOWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFlNiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyOTcsIDB4 ZmZmZCwgMHhlMjliLCAweGUyOWQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGRmOSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmE0LCAweDk1NGQsIDB4ZmZmZCwKKyAg ICAweDk0YTQsIDB4OTM5OSwgMHhmZmZkLCAweDhiZDgsIDB4ZTJhMywgMHhlMmExLCAweGZmZmQs IDB4OTRiMywKKyAgICAweGUyOWUsIDB4OTI3ZCwgMHg5MzliLCAweGZmZmQsIDB4OTM5YSwgMHhm ZmZkLCAweDhkZjQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlMmI2LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmE2LCAweGZmZmQsIDB4ZTJhOCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJhYiwgMHhmZmZkLCAweGUyYWMsIDB4ZmZmZCwK KyAgICAweGUyYTksIDB4ZTJhYSwgMHhmZmZkLCAweGZmZmQsIDB4ZTJhNywgMHhlMmE1LCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMjlmLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1Y2QsIDB4ODlkMywKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUyYjMsIDB4ZmZmZCwgMHhlMmIwLCAweGZmZmQsIDB4ZTJiNSwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhlMmI0LCAweGZmZmQsIDB4OTQ5MywgMHg5NmE1LCAweGZmZmQsIDB4OGU1 YSwKKyAgICAweGUyYWUsIDB4ZTJiNywgMHhlMmIyLCAweGZmZmQsIDB4ZTJiMSwgMHhlMmFkLCAw eGZmZmQsIDB4ZTJhZiwKKyAgICAweGZmZmQsIDB4OGFjNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MjVjLCAw eGZmZmQsIDB4ZmZmZCwgMHg5MGZiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTRh MCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJiYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDk0YTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDkwZGYsIDB4ZTJiOSwgMHhmZmZkLCAweGZmZmQsIDB4OTRjZCwgMHhmZmZk LCAweGUyYmQsIDB4OTVkMSwKKyAgICAweGZmZmQsIDB4OTI3YSwgMHhmZmZkLCAweGUyYjgsIDB4 ZTJiYSwgMHhmZmZkLCAweGZmZmQsIDB4ZTJiYiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmJlLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDhlYzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNjNCwgMHhlMmMzLCAweGUyYzIs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTJiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 ODU1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyYzgs IDB4ZmZmZCwgMHhmZmZkLCAweGUyY2MsIDB4ZTJjOSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUyYzUs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJjNiwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmNiLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTJjMCwgMHg5OWQzLCAweGUyYzcsIDB4ZTJjMSwg MHhmZmZkLCAweGZmZmQsIDB4ZTJjYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJkMCwKKyAgICAweGZmZmQsIDB4OGFjOCwg MHhmZmZkLCAweGUyY2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJjZSwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhlMmNmLCAweGUyZDIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTJkMSwKKyAgICAweDk0ZjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlMmQzLCAweDk3ZmEsIDB4OTVlYiwKKyAgICAweGUyZDgsIDB4ZmZmZCwgMHhmZmZkLCAw eGUyZDUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJkNCwgMHg5MGQwLCAweGZmZmQsIDB4ZTJkNywKKyAgICAw eGUyZDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTJkNiwgMHhmZmZkLCAweGUyZGQsIDB4 ZmZmZCwKKyAgICAweGUyZGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTJkYiwKKyAgICAweGUyYzQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTJkYywgMHhlMmRlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTJkZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk1YzQsIDB4ZmZmZCwgMHhlMmUwLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZTAs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGJjYywgMHg4YzQ4LCAweGUyZTEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTViMiwgMHhmZmZkLCAweDkwODgs IDB4ZmZmZCwgMHg5NmFlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUyZTIsIDB4ZmZmZCwgMHg5 N2IxLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDk0LCAweGZmZmQsIDB4OTE2NSwKKyAgICAweDk0NTMs IDB4ZmZmZCwgMHhmZmZkLCAweDhmNmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhiZSwK KyAgICAweGZmZmQsIDB4ZTJlNywgMHhlMmU1LCAweGZmZmQsIDB4ZTJlMywgMHg4YTlmLCAweGZm ZmQsIDB4OGZjZiwKKyAgICAweGUyZTgsIDB4ZmZmZCwgMHhmZmZkLCAweGUyZTYsIDB4ZmZmZCwg MHhlMmU0LCAweGUyZWMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTJlYiwgMHhlMmVhLCAweGUy ZTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTJlZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmVlLCAweDkwYjgsIDB4ZmZmZCwKKyAgICAweGUy ZWYsIDB4ZmZmZCwgMHhlMmYxLCAweGZmZmQsIDB4ZmZmZCwgMHhlMmYwLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4Y2QwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDkxNTcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMmYzLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkzOWMsIDB4ZmZmZCwKKyAgICAweGUyZjIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTJmNCwgMHhmZmZkLCAweDk1YjMsIDB4OTE4YywKKyAgICAweDhkNjYsIDB4ZmZm ZCwgMHhlMmY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdjNiwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTJmNywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlMmY4LCAweGZmZmQsIDB4ZTJmOSwgMHhmZmZk LCAweGUyZmEsIDB4ZmZmZCwKKyAgICAweDhlODUsIDB4ZmZmZCwgMHhlMmZiLCAweDhjNmUsIDB4 ZmZmZCwgMHhmZmZkLCAweDhiOGEsIDB4ZmZmZCwKKyAgICAweDhiNDksIDB4ZmZmZCwgMHhlMzQw LCAweGZmZmQsIDB4OTZmMSwgMHg4ZDY3LCAweGUyZmMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlMzQzLCAweDk2ZTQsIDB4ZmZmZCwgMHg5NDViLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDk1NTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY4MywgMHhlMzQyLCAweGZmZmQs IDB4OGVkMSwKKyAgICAweDhkNjgsIDB4OGU4NiwgMHg4Yjg5LCAweDk1YjQsIDB4ZTM0MSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxNjYsIDB4OTY2MSwgMHg4ZGY1LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhlODcsIDB4OTJkYiwgMHhmZmZkLCAweGUzNDYsIDB4OTdkZCwKKyAgICAweDhkZDcs IDB4ZmZmZCwgMHhlMzQ3LCAweDkwNjEsIDB4ZmZmZCwgMHhlMzQ5LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OGZkMCwgMHg4ZGFlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTM0OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZjQ5LCAweDhjYmMsIDB4OTE2Nywg MHhlMzQ0LCAweGUzNGEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUz NDUsIDB4OGM2ZiwgMHhmZmZkLCAweGUzNGQsIDB4ZTM1MSwKKyAgICAweDhjOGIsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNGMsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNTUsIDB4ZmZmZCwgMHhmZmZkLCAweDhkNjksIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4OTc4ZCwgMHg4OGJhLCAweGUzNTIsIDB4ZmZmZCwgMHhmZmZkLCAw eDhiOGIsIDB4ZmZmZCwKKyAgICAweGUzNGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGUzNTAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTM5ZCwgMHhlMzRlLCAw eGUzNGIsIDB4ZmZmZCwgMHg4YTQ3LCAweDkwZTIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGNh NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzU3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTM1NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTM1NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNTMsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGM3MCwgMHg5MWIx LCAweGUzNTgsIDB4OTE4ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZTM2NSwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlMzYxLCAweGUzNWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNWYsIDB4OGVmOCwgMHg4OGRiLCAweGUzNWEs IDB4ZTM2MiwKKyAgICAweGUzNjYsIDB4OGQ2YSwgMHg5NmQ0LCAweGZmZmQsIDB4OTJkNCwgMHhl MzVjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUzNjQsIDB4ZmZmZCwgMHhlMzU5LCAweDkyNWQs IDB4ZmZmZCwgMHhlMzVlLCAweDg4YmIsIDB4OTZjOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTM1ZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg4YmQ5LCAweDk0ZWEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTE4ZCwK KyAgICAweGZmZmQsIDB4OTdjZSwgMHg4ZjhmLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzhlLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGUzNjcsIDB4ZmZmZCwgMHg5MGZjLCAweGZmZmQsIDB4ZTM2Mywg MHhlMzY4LCAweGUzNmEsIDB4ZmZmZCwKKyAgICAweDkyZjcsIDB4ZTM2ZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTM2OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk1ZDIsIDB4OGFjOSwg MHhmZmZkLCAweGZmZmQsIDB4OTZjOSwgMHhmZmZkLCAweGZmZmQsIDB4ODhkYywKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhlMzZjLCAweGZmZmQsIDB4OTdmYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNmIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODk4ZiwgMHhmZmZkLCAweGZmZmQsIDB4OTNl YSwgMHhlMzZlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTM3NSwgMHhlMzZmLCAw eGUzNzYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhlMzcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0OWIsIDB4ZmZmZCwgMHhmZmZkLCAweDhlYzgsIDB4 ZTM3NCwKKyAgICAweGZmZmQsIDB4ZTM3MSwgMHhlMzc3LCAweGUzNzAsIDB4ZmZmZCwgMHhmZmZk LCAweDhmNjMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NDQsIDB4 ZmZmZCwgMHhmZmZkLCAweDhmNmIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTM3MywgMHhlMzgw LCAweGZmZmQsIDB4ZmZmZCwgMHhlMzdiLCAweGZmZmQsIDB4ZTM3ZSwKKyAgICAweGZmZmQsIDB4 ZTM3YywgMHhlMzgxLCAweGUzN2EsIDB4ZmZmZCwgMHhlMzYwLCAweDkwZDEsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OTRjOSwgMHhmZmZkLCAweGUzN2QsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNzgs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MTQwLCAweDhjNzEsIDB4ZmZmZCwgMHg4 ZjRhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OTA0NCwgMHg5MTU1LCAweGUzODQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTM4NiwgMHhl Mzg3LCAweGZmZmQsIDB4ZmZmZCwgMHhlMzgzLCAweGUzODUsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzNzksIDB4ZTM4MiwK KyAgICAweGZmZmQsIDB4ZTM4YSwgMHhlMzg5LCAweGZmZmQsIDB4ZmZmZCwgMHg5NjlhLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDhjNGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTM4OCwgMHhmZmZkLCAweGUz OGMsIDB4ZTM4YiwgMHhlMzhmLCAweGZmZmQsIDB4ZTM5MSwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg4ZTViLCAweGUzOGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUz OTIsIDB4ZTM5MywgMHhmZmZkLCAweGZmZmQsIDB4ZTM5NCwgMHhmZmZkLCAweGUzOWEsIDB4OTM1 YSwKKyAgICAweGUzOTYsIDB4ZmZmZCwgMHhlMzk1LCAweGUzOTcsIDB4ZTM5OCwgMHhmZmZkLCAw eGUzOTksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzOWIsIDB4ZTM5 YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDhhY2EsIDB4ZmZmZCwKKyAgICAweGUzOWQsIDB4ZmZmZCwgMHhlMzllLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlMzlmLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNhMCwgMHhlM2ExLCAweGUzYTIsIDB4 ZmZmZCwKKyAgICAweGUzYTMsIDB4ZTNhNCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNhNiwgMHhlM2E1 LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUzYTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNhOCwKKyAgICAweGUzYTksIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNhYywKKyAgICAweGUzYWEsIDB4 ZTNhYiwgMHg4ZGRmLCAweDhjNzIsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNzUsIDB4ZmZmZCwKKyAg ICAweDk0YjEsIDB4ZmZmZCwgMHg4ZjkwLCAweGZmZmQsIDB4ZmZmZCwgMHg5NDZjLCAweGZmZmQs IDB4OTRlYiwKKyAgICAweGUzYWQsIDB4OWNlYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlM2FlLCAweGUzYjAs IDB4ZmZmZCwgMHg5Nzg1LCAweGUzYWYsIDB4ZTNiMiwKKyAgICAweGUzYjEsIDB4ZmZmZCwgMHg5 NzcyLCAweGZmZmQsIDB4ZTNiMywgMHhmZmZkLCAweDk0ZmMsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNiNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlM2I3LCAweGZmZmQsIDB4ZmZmZCwgMHhlM2I2LCAweGUz YjUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYjgsIDB4OGM1MSwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxNDEsIDB4OGI2MCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYmMsIDB4ZTNiOSwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhlM2JhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYmQsIDB4ZmZmZCwKKyAgICAweGUz YmUsIDB4ZTNiYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTQ4LCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ODlhNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2MwLCAw eGUzYzEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlM2MyLCAweGZmZmQsIDB4OTc4 MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZjRiLCAw eGZmZmQsIDB4ZTNjNCwgMHhlM2MzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDkwODksIDB4ZTNjNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYzYsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTNjNywgMHhmZmZkLCAweDhhZTMsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhY2IsIDB4ZmZmZCwgMHhmZmZkLCAweGUzYzgsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTNjOSwgMHhmZmZk LCAweDk2N2MsIDB4OTc4MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk3NzMsIDB4 OTg1NiwgMHhmZmZkLCAweDhkNmMsIDB4ZTNjYywgMHg4ZWQyLCAweGUzY2IsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzY2QsIDB4OGVhNywgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDkxY2YsIDB4ZmZmZCwgMHhlM2NlLCAweGZmZmQsIDB4ZmZmZCwgMHg4 ZDZiLCAweGZmZmQsIDB4OTZkNSwKKyAgICAweGUzY2YsIDB4ZTNkMCwgMHhmZmZkLCAweGZmZmQs IDB4ZTNkMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTNkMiwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUzZDMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlYTgsIDB4ZmZmZCwgMHhmZmZkLCAweDk2 ZWIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZDUsIDB4ZmZmZCwg MHg5MjVlLCAweGZmZmQsIDB4ZTNkNCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZDcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhlM2Q2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhlM2Q4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwYjksIDB4ZmZm ZCwKKyAgICAweGUzZDksIDB4ZmZmZCwgMHhlM2RhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDk1YjcsIDB4ZTNkYiwKKyAgICAweGZmZmQsIDB4OTE4ZiwgMHhlM2RjLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUzZGQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdmYywKKyAgICAweGUzZTAsIDB4ZmZm ZCwgMHhlM2RmLCAweGUzZGUsIDB4OTJhZSwgMHhmZmZkLCAweGUzZTEsIDB4OTA0NSwKKyAgICAw eGZmZmQsIDB4ZTNlMiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlM2UzLCAweDk4NTcsIDB4 ZTNlNCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNlNSwgMHhlM2U3 LCAweGUzZTYsIDB4OTRhMywKKyAgICAweGZmZmQsIDB4OTNmNywgMHhmZmZkLCAweDk4NWQsIDB4 OTRhNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGUzZTksIDB4ZmZmZCwgMHhmZmZkLCAweDhmZDEsIDB4ZmZmZCwKKyAgICAweDk1NDksIDB4 ZmZmZCwgMHhlM2VhLCAweGUzZTgsIDB4ZmZmZCwgMHg4YWNjLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OGNkMiwgMHg4ZTg4LCAweGZmZmQsIDB4ZmZmZCwgMHg5NGVjLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGNhOCwgMHg5NjYyLCAweGZmZmQsIDB4ZTNlZCwgMHhl M2ViLCAweGZmZmQsIDB4OGQ2ZCwKKyAgICAweGZmZmQsIDB4OGQ2ZSwgMHg4OGU3LCAweGZmZmQs IDB4OGRlNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 NDc4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDg4ZGQsIDB4ZTNmMiwgMHhmZmZkLCAweDkyNWYsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ3NywgMHhmZmZkLCAweDkx ZDksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGUzZjQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTNmMCwgMHhlM2YzLCAweGUz ZWUsIDB4ZmZmZCwgMHhlM2YxLCAweDk2NDUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGNkMywg MHhmZmZkLCAweGZmZmQsIDB4ODhmYiwgMHhlM2VmLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNm NiwKKyAgICAweGZmZmQsIDB4ZTNmNywgMHhmZmZkLCAweGZmZmQsIDB4OTNiNywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDhiYjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ0 NSwgMHg5NDVjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZTg5LCAw eGZmZmQsIDB4ZmZmZCwgMHg4YmJhLCAweDkwYzYsIDB4OTg2NSwKKyAgICAweDk2YWMsIDB4ZTNm NSwgMHg5MGQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YjcyLCAweGUzZjgsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZmEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTNmOSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTNmYiwKKyAgICAweGZmZmQsIDB4 OTI0NSwgMHhmZmZkLCAweDk0NWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OTJhZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NDIs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU0NDEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUzZmMs IDB4ZmZmZCwgMHhmZmZkLCAweDkwNzQsIDB4ZmZmZCwKKyAgICAweDk1ODUsIDB4ZTQ0NCwgMHhm ZmZkLCAweGU0NDMsIDB4OGQ2ZiwgMHg5ODcyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTQ1NCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNDQ4LCAweGU0 NDksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlZWUsIDB4ZmZmZCwg MHhmZmZkLCAweGU0NDcsIDB4ZmZmZCwKKyAgICAweDhkOTgsIDB4ZTQ0NiwgMHhmZmZkLCAweGZm ZmQsIDB4ZTQ0YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkyYjAsIDB4OTVhMCwg MHg5MTQyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFkYSwKKyAgICAweGU0 NGUsIDB4ZmZmZCwgMHhlNDRmLCAweGU0NGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGU0NGMsIDB4ZmZmZCwgMHhlNDRkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGQ3MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NTUsIDB4ZmZm ZCwgMHhlNDUxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NTg2LCAw eGZmZmQsIDB4OTY4YywgMHg5NTQ3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU0NTAsIDB4ZmZm ZCwgMHhmZmZkLCAweGU0NTMsIDB4ZTQ1MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDk2NjMsIDB4ZTQ1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGU0NTcsIDB4ZmZmZCwgMHhmZmZkLCAweDkxNTYsIDB4ZmZmZCwgMHhlNDU4 LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU0NWEsIDB4ZmZmZCwgMHhlNDVlLCAweGZmZmQsIDB4 ZmZmZCwgMHhlNDViLCAweGU0NTksIDB4OTQ1ZSwKKyAgICAweGU0NWMsIDB4ZmZmZCwgMHhlNDVk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5YjAsIDB4ZmZmZCwKKyAgICAweGU0NjQsIDB4 ZTQ1ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNDYwLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZTQ2MSwgMHhmZmZkLCAweDkxOWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGU0NjMsIDB4ZTQ2MiwgMHhlNDY1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTQ2NiwKKyAgICAweGU0NjcsIDB4ZmZmZCwgMHhmZmZkLCAweDkwNjIs IDB4ZmZmZCwgMHg4OWU3LCAweGZmZmQsIDB4ZTQ2OCwKKyAgICAweDk3ZDUsIDB4ZmZmZCwgMHg4 ZWE5LCAweGZmZmQsIDB4ZmZmZCwgMHg4ZjRjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhlOGEsIDB4OTI3NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNDY5LCAweGU0NmEsIDB4ODk1MCwgMHhmZmZkLCAweGU0 NmIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTQ2YywgMHhlNDZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNDZlLCAweGZmZmQsIDB4ZTQ2ZiwKKyAgICAweDhiYmIsIDB4OWRhOCwgMHhlNDcwLCAweGZm ZmQsIDB4OTBlMywgMHhlNDcxLCAweDhlYzksIDB4ZmZmZCwKKyAgICAweGU0NzIsIDB4ZmZmZCwg MHg5OGFlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0NzMsIDB4OTVkYywKKyAgICAweDhh ZGEsIDB4ZmZmZCwgMHhmZmZkLCAweDkxNDMsIDB4OGY3NywgMHhmZmZkLCAweDk1OTEsIDB4OGY0 ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTQ3NCwgMHg4ZDcxLCAweGU0NzUsIDB4OTRj YSwgMHhmZmZkLCAweGU0ODQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU0NzcsIDB4ZmZmZCwgMHg5MWM3LCAweDk0OTUsIDB4OGNiZCwKKyAgICAweGU0NzYsIDB4OTE0 NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGU0NzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTJmOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU0N2EsIDB4ZTQ3OSwgMHhlNDdj LCAweGZmZmQsIDB4ZmZmZCwgMHhlNDdiLCAweGZmZmQsIDB4ZTQ3ZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlNDgwLCAweGZmZmQsIDB4ZTQ3ZSwgMHhmZmZkLCAweDhhY2QsIDB4ZmZmZCwKKyAg ICAweGU0ODEsIDB4ZmZmZCwgMHhlNDgyLCAweGU0ODMsIDB4ZmZmZCwgMHhmZmZkLCAweDhkYWYs IDB4OTdjNywKKyAgICAweGZmZmQsIDB4ZTQ4NSwgMHg5MDQ2LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDg5OTAsIDB4ZTQ4NiwKKyAgICAweGU0ODcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU0ODgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDg4ZjAsIDB4ZmZmZCwgMHhlNDg5LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNDhhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTU4NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg4ZWM1LCAweGZmZmQsIDB4ZTQ4YywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg4YTQ4LCAweDg4YjAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU0OGIsIDB4ZTQ4ZSwgMHg5NDZkLCAweGZmZmQsIDB4OTA2MywKKyAgICAweGZm ZmQsIDB4ODlkNCwgMHhmZmZkLCAweDk2NDYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDhjN2MsIDB4OGJkYSwgMHhmZmZkLCAweGU0OGQsIDB4ZmZmZCwgMHg4OWU4LCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg4YWExLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODk5 MSwgMHhlNDkyLCAweDk3ZTgsIDB4OTFkYiwgMHhmZmZkLCAweGZmZmQsIDB4OTU2MywKKyAgICAw eGZmZmQsIDB4ZTQ5ZSwgMHhmZmZkLCAweDg5ZDUsIDB4ZTQ5YywgMHhmZmZkLCAweGU0OWEsIDB4 ZTQ5MSwKKyAgICAweGZmZmQsIDB4ZTQ4ZiwgMHhmZmZkLCAweGU0OTAsIDB4ZmZmZCwgMHg4ZWUx LCAweDhiZWEsIDB4OTI5NywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzY2YsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODk3MCwgMHhmZmZk LCAweGU0OTQsIDB4ZTQ5MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZTQ5OSwgMHhlNDk1LCAweGU0OTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg5NmNlLCAweGU0OTcsIDB4ODlkNiwgMHg4YTlkLCAweGU0OWIs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTQ5ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhjNzMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU0YTEsIDB4ZTRhYSwKKyAgICAweGU0YWIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ODhhOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU0YjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDg4ZWYsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YTksIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTRhOCwKKyAgICAweGZmZmQsIDB4ZTRhMywgMHhlNGEyLCAweGZmZmQsIDB4ZTRhMCwg MHhlNDlmLCAweDkyODMsIDB4ZmZmZCwKKyAgICAweDkxZjksIDB4ZTRhNSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU0YTQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGE3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OTE5MCwgMHg4Yzc0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk2 MCwKKyAgICAweGU0YTYsIDB4ZmZmZCwgMHg4ZDcyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxOTEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YjgsIDB4ZmZmZCwgMHhlNGI5LCAweGZmZmQsIDB4 ODlkNywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5YWMsIDB4ZTRiNiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlNGFjLCAweGZmZmQsIDB4ZTRiNCwKKyAgICAweGZmZmQsIDB4ZTRiYiwgMHhlNGI1 LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YjMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU0OTYsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YjEsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhlNGFkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhY2Us IDB4ZTRhZiwKKyAgICAweGU0YmEsIDB4ZmZmZCwgMHhlNGIwLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU0YmMsIDB4ZmZmZCwgMHhlNGFlLCAweDk0OWMs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTc4OSwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGI3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGNkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZTRjNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MDliLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YjY1LCAweGZmZmQsIDB4OGJkYiwg MHhmZmZkLCAweGU0YzAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5 ZDksIDB4ZmZmZCwgMHhmZmZkLCAweDhmZDIsIDB4ZmZmZCwKKyAgICAweGU0YzMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGRkOCwgMHhmZmZkLCAweGZmZmQsIDB4OTM3MCwKKyAgICAweGU0 YzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4OTVlYywgMHhmZmZkLCAweGU0YmYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ODlkOCwKKyAgICAweDhjZDQsIDB4OTU0OCwgMHhlNGM5LCAweGZmZmQsIDB4ZTRi ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRjNiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU0ZDAsIDB4ZmZmZCwgMHhlNGMxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU0YzIsIDB4OTNiOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRjNywKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YzQsIDB4OTY0NywgMHhlNGNhLCAweDg4ZGUsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0YmUsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU0Y2MsIDB4ZmZmZCwgMHhlNGNi LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 OTQ4YiwgMHhlNGQyLCAweGZmZmQsIDB4ZTRkZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OGE5ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGUwLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGU0Y2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRkMywgMHg5 NzhlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU0ZGMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTc3NCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk3YTgsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI5OCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhOGIsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTU5MiwgMHhlNGUyLCAweDkzOWYsIDB4ZmZmZCwg MHhmZmZkLCAweDg4YWYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTRkYiwgMHhmZmZkLCAweGU0 ZDcsIDB4OTE5MiwgMHhlNGQxLCAweGU0ZDksIDB4ZTRkZSwKKyAgICAweGZmZmQsIDB4OTQ0Yiwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGE4LCAweGZmZmQsIDB4ZTRkNiwKKyAgICAweGZm ZmQsIDB4ZTRkZiwgMHg5NTk4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNGRhLCAweGZmZmQsIDB4ZTRkNSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhmZDMsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhmNGUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGVhYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTZk NiwgMHhmZmZkLCAweGZmZmQsIDB4OTU2NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTRlNSwKKyAgICAw eGZmZmQsIDB4ZTRlZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNGQ4 LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YTk3LCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhmZjYsIDB4ZTRlMywgMHhmZmZk LCAweGU0ZTgsIDB4OTE5MywgMHhmZmZkLCAweGZmZmQsIDB4ZTRlNCwKKyAgICAweGZmZmQsIDB4 ZTRlYiwgMHhmZmZkLCAweGZmZmQsIDB4OTI3ZSwgMHhmZmZkLCAweGU0ZWMsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OTc3NSwgMHhlNGUxLCAweDhhNTcsIDB4ZmZmZCwgMHhlNGU3LCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGU0ZWEsIDB4OTZhYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU0ZWQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTRlNiwgMHhlNGU5LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY0OCwgMHhmZmZkLCAweDk4NDAsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRmMSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTRmOCwg MHhmZmZkLCAweGZmZmQsIDB4ZTRmMCwKKyAgICAweDhlYzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0Y2YsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OTVjYywgMHhmZmZkLCAweDk2YTAsIDB4ZTRmNywgMHhlNGY2LCAweGZmZmQsIDB4ZTRm MiwKKyAgICAweGU0ZjMsIDB4ZmZmZCwgMHg4OTU1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTRmNSwKKyAgICAweGZmZmQsIDB4ZTRlZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkyZDMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTRmNCwgMHg4OGZjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MWEwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NWMxLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGU0ZjksIDB4ZTU0MCwgMHhmZmZkLCAweDk0ZDcsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU0ZmMsIDB4OGZkNCwgMHg4ZWM3LCAweGU1NDIsIDB4 ZmZmZCwgMHhmZmZkLCAweDhiYmMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlNTQzLCAweGZmZmQsIDB4OTU5OSwKKyAgICAweGU0ZmIsIDB4 ZmZmZCwgMHhlNGQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU0ZmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDk4NmUsIDB4OTNhMCwgMHg5NTkzLCAweGZmZmQsIDB4ZmZmZCwgMHhl NTRhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU1MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NTEsIDB4ZmZmZCwKKyAgICAweGU1NDQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTQ5NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTU0ZSwK KyAgICAweGU1NDYsIDB4ZmZmZCwgMHhlNTQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGU1NTIsIDB4ZTU0NywgMHhmZmZkLCAweGZmZmQsIDB4ZTU0Yiwg MHhmZmZkLCAweGZmZmQsIDB4ODk5MiwKKyAgICAweGZmZmQsIDB4OTNlMywgMHhmZmZkLCAweGU1 NGMsIDB4ZTU0ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTU0NSwgMHhmZmZkLCAweDkxNDUsIDB4ZmZmZCwKKyAgICAweGU1 NDksIDB4OGU0NiwgMHg5MDY0LCAweDhjNGYsIDB4OTZmMiwgMHhmZmZkLCAweDk2ZjcsIDB4OGY5 MiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTU1NiwgMHhlNTU0LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTg2ZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTU1 MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5Nzk1LCAweGZmZmQsIDB4ZTU1NSwKKyAgICAw eGU1NTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTU4LCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU1YiwgMHhlNTU5 LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTNhMSwgMHhlNTVhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTRjYiwgMHhlNTRk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY5MywKKyAg ICAweGZmZmQsIDB4ZTU1YywgMHhlNTYxLCAweDkxOTQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NjAs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNTQxLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU1NjIsIDB4OTE2OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNTVkLCAweGU1NWYs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU1NWUsIDB4ZmZmZCwgMHhmZmZkLCAweDlmNTAsIDB4OWY0MSwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhlNTY0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNTYzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5Nzk2LCAweGZmZmQsIDB4ZTFiYSwKKyAgICAweGU1NjUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2NiwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTY3LCAw eDhjZDUsIDB4ZmZmZCwKKyAgICAweDhiNzMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2 OSwgMHg5OTdjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4Yjk1LCAw eGZmZmQsIDB4OTdiOCwgMHhmZmZkLCAweDhiZjEsIDB4ZTU2YSwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU2YiwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyOGUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTU2YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTNmOCwgMHhmZmZkLCAweDg4YjgsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg4OWUxLCAweGU1NzEsIDB4ZTU3MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NmQsIDB4ZmZmZCwgMHg4ZTVjLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NmUs IDB4OTQ2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTU2ZiwgMHhl NTcwLCAweGU1N2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU3NCwKKyAgICAweGU1Nzcs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1NzMsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU3NSwg MHhmZmZkLCAweGU1NzYsIDB4OGVkNiwKKyAgICAweGZmZmQsIDB4ZTU3OCwgMHhmZmZkLCAweDky NjAsIDB4ZmZmZCwgMHg4Yzc1LCAweDhhNjEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTU3YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OGE1ZSwgMHhmZmZkLCAweGU1ODEsIDB4ZmZmZCwgMHhmZmZkLCAweGU1N2MsIDB4ZTU4 MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTRiOCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTU3ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU3 ZSwgMHg5NTY3LCAweDk0ZDgsIDB4ZTU4MiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxZmIsIDB4ZTU4 YywgMHhmZmZkLCAweGU1ODgsIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZTksIDB4ZmZmZCwKKyAgICAw eGU1ODYsIDB4ZmZmZCwgMHg5NjQ5LCAweGU1ODcsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ODQsIDB4 ZmZmZCwKKyAgICAweGU1ODUsIDB4ZTU4YSwgMHhlNThkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNThi LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTU4OSwgMHhlNTgzLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkyNzcsIDB4ZmZmZCwgMHhlNTk0 LCAweGZmZmQsIDB4OTZhOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNTkyLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZTU5MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU4ZSwgMHhm ZmZkLCAweGZmZmQsIDB4ZTU5MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OTEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU4ZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4OTBlNCwgMHhmZmZkLCAweDk4NTgsIDB4ZTU5OCwgMHhmZmZkLCAweGU1OTksIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OWYsIDB4ZmZmZCwgMHg5MDQ5LCAweGZm ZmQsIDB4ZTU5YiwKKyAgICAweGZmZmQsIDB4ZTU5ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTU5NiwKKyAgICAweGU1OTUsIDB4ZmZmZCwgMHhmZmZkLCAweGU1 YTAsIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZGEsIDB4ZmZmZCwKKyAgICAweGU1OWMsIDB4ZmZmZCwg MHhlNWExLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1OWQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTU5YSwgMHhmZmZkLCAweDkyYjEsIDB4ZmZm ZCwKKyAgICAweGU1OTcsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTQ4OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNWE1LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHg5NzVhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTVhNCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNWEzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YWMsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVhNiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU1YWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5Nzg2LCAweGU1YjEsIDB4ZmZmZCwgMHhlNWE4LCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGU1YTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVhZCwgMHhmZmZkLCAweGU1YjAs IDB4ZTVhZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YTcsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU1YWEsIDB4ZmZmZCwgMHhlNWJiLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU1YjQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTViMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNWIzLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU1YjgsIDB4ZTViOSwKKyAgICAweGZmZmQsIDB4OGE0OSwgMHhmZmZkLCAweDhi NjEsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YjcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWEyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWI2LCAweGU1YmEsIDB4ZTVi NSwKKyAgICAweGZmZmQsIDB4ZTViYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWJlLCAw eGU1YmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTVjMCwgMHhlNWJmLCAw eGU1NzksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVjNCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZTVjMSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1YzIsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTVjMywgMHhmZmZkLCAweGU1YzUsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhjOGMsIDB4ZmZmZCwgMHhlNWM3LCAweGZmZmQsIDB4 ZTVjNiwgMHhmZmZkLCAweDhmNGYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGQ3MywgMHg5ZmE1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlNWM4LCAweDhmNzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE1OCwKKyAg ICAweGZmZmQsIDB4ZTVjOSwgMHhmZmZkLCAweDg5NzEsIDB4ZmZmZCwgMHg4ZmQ1LCAweGU1Y2Es IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGQ3NCwgMHhlNWNiLCAweDg4ZGYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk1NWMsIDB4ZmZmZCwgMHhmZmZkLCAweGU1Y2Ms IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkwOGEsIDB4ZmZmZCwgMHhl NWQzLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWQwLCAweGZmZmQsIDB4OTI4ZiwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWQxLCAweGU1Y2UsIDB4OGJkYywK KyAgICAweGZmZmQsIDB4ZTVjZCwgMHhlNWQ0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDhjNTUsIDB4ZmZmZCwgMHhmZmZkLCAweDkxZGMsIDB4ZmZmZCwg MHhlNWRhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNWQ2LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYjMsIDB4ZTVkNSwKKyAgICAweGZmZmQsIDB4ZTVkOCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1Y2YsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhlNWQ5LCAweGZmZmQsIDB4ZTVkYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0ZWQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU1ZDcsIDB4ZmZmZCwKKyAgICAweGU1ZGMsIDB4ZTVkZSwgMHhmZmZkLCAweGZmZmQsIDB4OGNk MSwgMHhlNWQyLCAweGZmZmQsIDB4ODhiZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVkZCwKKyAgICAweGZmZmQsIDB4OGRk OSwgMHg5N2Y0LCAweGU1ZGYsIDB4ZTVlMCwgMHg5MTk1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OTdhMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVlMSwgMHg5NzU0 LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU1ZTIsIDB4ZTVlMywgMHhmZmZkLCAweGZmZmQsIDB4 OTVlMiwgMHhlNWU0LCAweGZmZmQsIDB4OGRiZSwKKyAgICAweGZmZmQsIDB4OTdhMSwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU1ZTksIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhlNWVhLCAweDhmZDYsIDB4ZTVlOCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDk3ODcsIDB4ZTVlNSwgMHhmZmZkLCAweGZmZmQsIDB4ZTVlNywgMHg5 MGJiLCAweDkwOWUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNWU2LCAweGZmZmQs IDB4ZTVlYiwgMHhmZmZkLCAweGZmZmQsIDB4OTVhMSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhl NWVkLCAweGZmZmQsIDB4ZTVlYywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhOGMs IDB4ZmZmZCwgMHg5NjRhLCAweGU1ZWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNWZhLCAweGU1 ZjAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNWYxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNWYyLCAweGU1 ZjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZjcsIDB4ZmZmZCwKKyAgICAweGU1 ZjgsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZjYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZTVmNCwgMHhmZmZkLCAweGU1ZWYsIDB4ZTVmNSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTVm OSwgMHhlOGI1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5YTYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU1ZmMsIDB4OGJkZCwKKyAgICAw eGU1ZmIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY0MSwgMHhmZmZkLCAweGU2NDAsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNjQzLCAweGZmZmQsIDB4ZmZmZCwgMHhlNjQy LCAweGZmZmQsIDB4ZTY0NCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZjUwLCAweGZmZmQsIDB4 ZTY0NSwgMHhmZmZkLCAweGZmZmQsIDB4ZTY0NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NDcsIDB4OTBiYywKKyAgICAweGZmZmQsIDB4 OTc3NiwgMHhmZmZkLCAweGU2NDgsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YTIsIDB4OTQ2NSwKKyAg ICAweGU2NDksIDB4ZmZmZCwgMHhlNjRhLCAweDhjYTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGI0YiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NGIsIDB4ZmZmZCwgMHhm ZmZkLCAweDhlOGIsIDB4OTQ2MCwKKyAgICAweGU2NGMsIDB4ZmZmZCwgMHg4YTZmLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTY0ZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NGYsIDB4OTc5NywKKyAgICAweGZmZmQs IDB4ZTY0ZSwgMHg5MDY1LCAweGZmZmQsIDB4ZTY1MCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY1MSwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNjUyLCAweDhhY2YsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNjUzLCAweGZmZmQsIDB4ZmZmZCwg MHhlNjU0LCAweGZmZmQsIDB4ZTY1NSwKKyAgICAweGU2NTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg4YTcwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNjU3LCAweGZmZmQsIDB4ZTY1OCwgMHhlNjU5LCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5ZjAsIDB4ZmZm ZCwgMHhmZmZkLCAweDkwNDcsIDB4ZTY1YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY1YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGU2NWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDhjYmUsIDB4ZmZmZCwgMHg5MmY5LCAweGU2NWQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhjNzYsIDB4ZmZmZCwgMHg5MDc1LCAweGZmZmQsIDB4 ZTY2MCwgMHhmZmZkLCAweDkzYTIsIDB4ZmZmZCwKKyAgICAweGU2NWYsIDB4ZmZmZCwgMHhmZmZk LCAweDhjNTAsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NWUsIDB4OTFmNSwKKyAgICAweDhiNGMsIDB4 ZmZmZCwgMHhmZmZkLCAweGU2NjEsIDB4ZmZmZCwgMHhlNjYyLCAweGZmZmQsIDB4OGZkNywKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjOGQsIDB4ZmZmZCwgMHhlNjYzLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NjRiLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MGRkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGI5NiwgMHhmZmZkLCAweDk2ZjMs IDB4OTE2OSwgMHhmZmZkLCAweGU2NjQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 MDY2LCAweDkyOTAsIDB4OGZkOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZTY2NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2NjgsIDB4ZmZmZCwK KyAgICAweGU2NjksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDhkYmMsIDB4OTFjMCwgMHhlNjY3LCAweGZmZmQsIDB4OGZkOSwg MHg5NTVkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2 NjYsIDB4ZmZmZCwgMHhmZmZkLCAweDhlOGMsIDB4ZmZmZCwKKyAgICAweDg5NzIsIDB4ZmZmZCwg MHhlNjZkLCAweDhjNzcsIDB4ZmZmZCwgMHhmZmZkLCAweDhlOGUsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OGU4ZCwgMHhmZmZkLCAweDk4NmMsIDB4ZTY2YywgMHhlNjZiLCAweDkxNDYsIDB4ZmZm ZCwKKyAgICAweDhiNmMsIDB4OTg2MiwgMHg4YTU5LCAweDhmZGEsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY2 YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNjZmLCAw eGZmZmQsIDB4ZTY3MCwgMHhlNjZlLCAweGZmZmQsIDB4OGNkNiwKKyAgICAweGZmZmQsIDB4OTc1 ZiwgMHhmZmZkLCAweGZmZmQsIDB4OGU4ZiwgMHg5NDQ2LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZTY3MywgMHhmZmZkLCAweDkwYmUsIDB4ZmZmZCwgMHg5MjYxLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDk3NTUsIDB4ZmZmZCwgMHhlNjc2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhjZWEsIDB4ZmZmZCwKKyAgICAweDkwYmQsIDB4ZTY3MiwgMHhmZmZkLCAweGU2NzcsIDB4 OGNlYiwgMHhlNjc0LCAweGU2NzUsIDB4ZmZmZCwKKyAgICAweGU2NzEsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OTBlMCwgMHg5M2M3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkyNGUsIDB4 ZmZmZCwgMHg4OWRiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OTRlZSwgMHhmZmZkLCAweGZmZmQsIDB4OGI2MiwgMHhmZmZkLCAweGZmZmQs IDB4OTJiMiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNjdhLCAweGZmZmQsIDB4ZTY3OCwgMHhm ZmZkLCAweGZmZmQsIDB4OTI2YiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkwYmYs IDB4OGFkMCwgMHhlNjc5LCAweGZmZmQsIDB4OTA3YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5 N2M4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NWYsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhlNjdiLCAweGU2ODcsIDB4OTJiMywgMHhmZmZkLCAweGU2ODYsIDB4ZmZmZCwK KyAgICAweGU2ODMsIDB4ZTY4YiwgMHhlNjg0LCAweGZmZmQsIDB4ZTY4MCwgMHhmZmZkLCAweDky ZmEsIDB4ZTY3ZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2N2MsIDB4ZmZmZCwg MHg5NzQwLCAweDhlOTAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTY4MSwgMHhmZmZkLCAweGU2 N2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY4NSwKKyAgICAweDhmOTQsIDB4ZmZmZCwg MHg4Y2JmLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxZjgsIDB4ZmZmZCwKKyAgICAweDk2 NjQsIDB4ODk3OSwgMHg4OGUwLCAweGZmZmQsIDB4OTNhMywgMHhmZmZkLCAweGZmZmQsIDB4ZTY4 OSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY4OCwgMHhmZmZkLCAw eDkzZTQsIDB4ZmZmZCwKKyAgICAweGU2OGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTY4 MiwgMHhmZmZkLCAweGU2OGMsIDB4ZTY4ZSwKKyAgICAweGZmZmQsIDB4OGNhYSwgMHhlNjhhLCAw eDhkNzUsIDB4ZmZmZCwgMHg4ZWQzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU2OGYsIDB4OTc3 NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2OTIsIDB4ZmZmZCwKKyAgICAw eGU2OTUsIDB4ZmZmZCwgMHhmZmZkLCAweGU2OTMsIDB4OTU1NCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2OTAsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGJkZSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU2OTQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTY5NiwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZTY5YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTY5NywgMHhmZmZkLCAweGU2OTksIDB4ZTY5OCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2OWIs IDB4ZmZmZCwKKyAgICAweDhlYWYsIDB4ZmZmZCwgMHhlNjlkLCAweGU2OWMsIDB4OTU4OCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTY5ZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhjNzgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU2OWUsIDB4ZTZhMCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZhMSwKKyAgICAweDhiNjMs IDB4ZTNiZiwgMHg4ZmY3LCAweGZmZmQsIDB4ZTZhMiwgMHhmZmZkLCAweGZmZmQsIDB4OGNlYywK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmEzLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGU2YTQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNWQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ZGNjLCAweGZm ZmQsIDB4ZTZhNSwgMHhmZmZkLCAweGU2YTYsIDB4ZmZmZCwKKyAgICAweDhmNTEsIDB4ZmZmZCwg MHhlNmE3LCAweGU2YTgsIDB4ZmZmZCwgMHhmZmZkLCAweGU2YTksIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZTZhYSwgMHhlNmFiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTI0 YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNmFjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZTZhZSwKKyAgICAweGZmZmQsIDB4ZTZhZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDkzYTQsIDB4ZmZmZCwKKyAgICAweGU2YWYsIDB4ZmZmZCwgMHg5NjRjLCAw eGZmZmQsIDB4ZTZiMCwgMHhmZmZkLCAweGU2YjEsIDB4ZmZmZCwKKyAgICAweGU2YjIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmIzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg5M2Q4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4OGZkYiwgMHhlNmI0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZDhiLCAweDk4YWMsIDB4 ZTZiNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU2YjYsIDB4 OTU1ZSwgMHhlNmI3LCAweGZmZmQsIDB4ZTZiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhlNmI4LCAweGZmZmQsIDB4ZmZmZCwgMHhlNmJhLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTZiOSwgMHhlNmJiLCAweGZmZmQsIDB4OTY2NSwgMHhl NmJjLCAweGU2YmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTZiZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU2YzAsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTRjLCAweDkyZTUsIDB4ZmZmZCwKKyAgICAweDk1ODks IDB4OGRlMCwgMHg4ZDc2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU2ZSwK KyAgICAweDg5ZGQsIDB4OTRjYywgMHhlNmMzLCAweDhhZDEsIDB4OTBkMywgMHhlNmMyLCAweGU2 YzcsIDB4OTI5OSwKKyAgICAweDk2ZTEsIDB4ZmZmZCwgMHhlNmM1LCAweGU2YzYsIDB4OGI0ZCwg MHhmZmZkLCAweGU2YzgsIDB4OTQ4MywKKyAgICAweDkxZGQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0 ZWYsIDB4OTM1YywgMHhlNmM0LCAweGZmZmQsIDB4OTY2NiwKKyAgICAweDg5ZWEsIDB4ZTZjYSwg MHg5ODQ3LCAweDkyYzAsIDB4OTg2NCwgMHhmZmZkLCAweGZmZmQsIDB4OGU5MSwKKyAgICAweGU2 YzksIDB4ZmZmZCwgMHg5MWFmLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmRhLCAweDkxNDcsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4OTNmNiwgMHhmZmZkLCAweDk1NmYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNmNkLCAweDhlNWUsIDB4OGU5 MiwgMHhmZmZkLCAweDhmZGMsIDB4ZmZmZCwKKyAgICAweDk0ODUsIDB4ZmZmZCwgMHg4Y2FiLCAw eGU2Y2MsIDB4ZTZjYiwgMHhmZmZkLCAweDk1OGEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg4ZWJmLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzcxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNmNmLCAweGU2ZDAsIDB4OGQ3NywgMHhlNmNl LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTZkMSwgMHhlNmQyLCAweGZmZmQsIDB4ZTZkNCwKKyAgICAweDkxYTEsIDB4ZmZmZCwgMHhlNmQz LCAweDhhZTQsIDB4ZmZmZCwgMHhlNmQ2LCAweGZmZmQsIDB4ZTZkNSwKKyAgICAweGU2ZDcsIDB4 ZmZmZCwgMHhmZmZkLCAweGU2ZDksIDB4ZTZkYiwgMHhmZmZkLCAweGU2ZGMsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBkNCwgMHhmZmZkLCAweDhlY2QsIDB4ZTZk ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhNzEsIDB4ZmZmZCwgMHhlNmRlLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxOTYsIDB4ZTZkZiwgMHhmZmZkLCAweGU2ZTAsIDB4OTU4 YiwgMHhmZmZkLCAweGZmZmQsIDB4OGI0ZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTZl MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MmI0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHg4OTdhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTZlMiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhlZWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkwOTYsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxYWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNmU1LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU2ZTQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNmUzLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGU2ZWIsIDB4ZTZlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZTZlNiwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZTgsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNmU3LCAweGU2ZWEsIDB4ZmZmZCwgMHg4Yjk3LCAweGZm ZmQsIDB4ZTZlZSwKKyAgICAweGZmZmQsIDB4OTBkNSwgMHhmZmZkLCAweGU2ZWYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhjZDcsIDB4ZmZmZCwgMHhlNmVjLCAweGU2 ZWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg0OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDkyYjUsIDB4ZmZmZCwgMHg5MTQ4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZmMCwgMHhmZmZkLCAweGZmZmQsIDB4ZTZm MywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGU2ZjEsIDB4ZTZmMiwgMHg5Nzc4LCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNhNSwKKyAgICAweGU2ZjYsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNmY0LCAweGU2ZjUsIDB4ZTZmNywKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNzQ4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU2ZmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTZmYiwgMHhlNmY5LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlNmY4LCAweGZmZmQsIDB4OTJmYiwgMHhmZmZkLCAweGZmZmQsIDB4ZTc0MCwKKyAg ICAweGU3NDQsIDB4ZTc0MSwgMHhlNmZjLCAweGZmZmQsIDB4ZTc0MiwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGU3NDMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl NzRhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTc0NSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTBkNiwKKyAgICAweGU3NDcsIDB4ZmZmZCwgMHhm ZmZkLCAweGU3NDksIDB4ZTc0NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNzRjLCAweGZmZmQsIDB4OGY1MiwgMHhmZmZkLCAweGU3 NGIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc0ZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTc0ZSwgMHhmZmZkLCAweGZm ZmQsIDB4ZTc1MSwgMHhlNzUwLCAweGZmZmQsIDB4ZTc0ZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhlNzUzLCAweGU3NTIsIDB4ZmZmZCwgMHg5NmY0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZTc1NSwgMHhmZmZkLCAweGU3NTQsIDB4ZTc1NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZTc1NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTc1OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNzU4LCAw eDkwNjcsIDB4ZTc1YSwgMHhmZmZkLCAweGZmZmQsIDB4OGJlYiwKKyAgICAweGU3NWIsIDB4ZTc1 ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3NWUsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzVm LCAweGU3NWMsIDB4ZmZmZCwKKyAgICAweGU3NjAsIDB4ZmZmZCwgMHg4ZWQ0LCAweGU3NjEsIDB4 OGI0ZiwgMHg4YzUyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4Y2Fj LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU3NjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTNlZSwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHg5MzVkLCAweGU3NjMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3NjYsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhlYjIsIDB4ZmZmZCwgMHhm ZmZkLCAweGU3NjUsIDB4ZTc2NCwgMHg4Yzc5LCAweGU3NjcsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDhhNzIsIDB4ZmZmZCwgMHhlNzY5LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OGRkYSwgMHhlNzY4LCAweGZmZmQsIDB4ZTc3MSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNzZiLCAweGU3NmQsIDB4OTVlMywg MHhlNzZhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTc2YywgMHhmZmZkLCAweGU3 NzAsIDB4ZTc2ZSwgMHg4YjUwLCAweGZmZmQsIDB4ZTc2ZiwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3NzIsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OTQ3OSwgMHg5N2Q2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY1 MywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3NzMsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDk3NDEsIDB4ZTc3NSwgMHhmZmZkLCAweGU3NzQsIDB4ZmZm ZCwgMHhmZmZkLCAweGU3NzgsIDB4OTc2MCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNzc3LCAw eGZmZmQsIDB4OGE4ZCwgMHhlNzc2LCAweGU3N2IsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTc3 YSwgMHhmZmZkLCAweGZmZmQsIDB4ZTc3OSwgMHg5MzUxLCAweGU3N2MsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTc3ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc3ZSwgMHhmZmZk LCAweGZmZmQsIDB4OGQ4YywKKyAgICAweGZmZmQsIDB4OGM0NCwgMHhlNzgwLCAweGU3ODEsIDB4 ZTc4MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkwNjgsIDB4ZTc4MywgMHhmZmZkLCAweDhlYWIsIDB4ZTc4NCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ODUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4OTk5ZiwKKyAgICAweDk5OWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlNzg2LCAweGUzOTAsIDB4ZTc4NywKKyAgICAweDkyNDMsIDB4OTA0YSwgMHg5NDVmLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc4OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHg5NWQzLCAweDkyZDIsIDB4OGQ5ZSwgMHhmZmZkLCAweGZmZmQsIDB4OTI0OCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg4OTQ5LCAweGZmZmQsIDB4OTY5OCwgMHg5MDc2LCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eDhjN2QsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGJkZiwgMHhmZmZkLCAweGZmZmQsIDB4OTVk NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlNzg5LCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhlNzhiLCAweGZmZmQsIDB4ZmZmZCwgMHhlNzhhLCAweDg5ZGUsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OTNmNCwgMHhlNzhjLCAweDk0OTcsIDB4ZmZmZCwgMHg5MzUyLCAweGZmZmQsIDB4 ZTc4ZCwKKyAgICAweDhmNzEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc4ZiwgMHhmZmZk LCAweGZmZmQsIDB4OTZjMCwKKyAgICAweGU3OWUsIDB4ZTc5MSwgMHhlNzkyLCAweGZmZmQsIDB4 ZmZmZCwgMHg5MmM3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxZGUsIDB4OTE5NywgMHhmZmZk LCAweDkzYTYsIDB4ZmZmZCwgMHhlNzkwLCAweDhiNzQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU3OTksIDB4ZmZmZCwgMHhlNzk2LCAweGU3YTMsIDB4OTNhNywKKyAg ICAweDkyODAsIDB4ZTc5MywgMHhmZmZkLCAweDkyZmMsIDB4OTM3MiwgMHhlNzk0LCAweGU3OTgs IDB4OTA4MCwKKyAgICAweGZmZmQsIDB4OTQ4NywgMHg5MmNhLCAweGZmZmQsIDB4ZmZmZCwgMHg5 MGMwLCAweGU3OTcsIDB4OTFhYywKKyAgICAweDkxYTIsIDB4ZTc5NSwgMHg4OGE3LCAweDk4NDEs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTc5YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxZGYsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4OGY1NCwgMHg5MDY5LCAweGZmZmQsIDB4ZmZmZCwgMHhlNzljLCAweGU3OWIsIDB4ZmZmZCwK KyAgICAweDg4ZWQsIDB4ZTc5ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTU0ZSwgMHhmZmZkLCAweGU3 YTUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTNkOSwgMHg5MDhiLCAweGZmZmQsIDB4ZmZmZCwg MHg5Mjc4LCAweGZmZmQsIDB4OGJmNiwKKyAgICAweGZmZmQsIDB4ZTdhNCwgMHg5NzU2LCAweDg5 NWUsIDB4ZmZmZCwgMHg5NWQ1LCAweDg5ZGYsIDB4ZTc5ZiwKKyAgICAweGU3YTAsIDB4ZTdhMSwg MHhlN2EyLCAweDkzYjksIDB4OTI0MiwgMHg4OGUxLCAweGU3YTYsIDB4ZmZmZCwKKyAgICAweGU3 YTcsIDB4ZWFhMSwgMHhmZmZkLCAweGZmZmQsIDB4OTFiYiwgMHhmZmZkLCAweGU3YTgsIDB4ZmZm ZCwKKyAgICAweDg5OTMsIDB4OTE2YiwgMHhmZmZkLCAweDhjYWQsIDB4ZmZmZCwgMHg5Nzc5LCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGU3YTksIDB4OTM0YiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MTk4LCAweDhlZDUsIDB4ZTdhYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlN2FkLCAw eGZmZmQsIDB4ZmZmZCwgMHg4Zjg1LCAweGU3YWIsIDB4OTE0YSwKKyAgICAweDkxNDksIDB4ZmZm ZCwgMHg4OGUyLCAweGZmZmQsIDB4OTdjOSwgMHhlN2FmLCAweGZmZmQsIDB4OTRmMCwKKyAgICAw eGU3YjEsIDB4ZTdiMCwgMHhlN2FlLCAweGUyODQsIDB4OGFkMiwgMHhmZmZkLCAweGZmZmQsIDB4 ZTc4ZSwKKyAgICAweGZmZmQsIDB4ZTdiMywgMHhlN2IyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTdiNCwKKyAgICAweGZmZmQsIDB4OTc1NywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDkzZGYsIDB4ZmZmZCwgMHhmZmZkLCAweDk2NGQsIDB4ZmZmZCwKKyAg ICAweGU3YjUsIDB4ZmZmZCwgMHg4ZWQ3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTdiNiwKKyAgICAweGZmZmQsIDB4ZTdiNywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl N2I4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkzNDAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ODhlOCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg4ZDc4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk4NTksIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3YmMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGM1MywgMHhlN2I5LCAweGZm ZmQsIDB4ZTdiYSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk1OTQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4YTczLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5NzU4LCAweGZmZmQsIDB4OGJi ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5MzczLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlN2JkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhlN2JlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZTdiZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg5MzQxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU3YzEsIDB4ZmZmZCwgMHhlN2Mw LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTNkMSwgMHhlN2MyLCAweDhmNTUsIDB4OGVkZSwgMHg5 NDdhLCAweDkyOTEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4ZWYwLCAweGZmZmQs IDB4OTA4YywgMHhmZmZkLCAweGU3YzMsIDB4ZmZmZCwKKyAgICAweGU3YzQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5MDdjLCAweGU3YzUsIDB4ZmZmZCwgMHhlN2M2LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZTdjNywgMHg5NzhmLCAweGZmZmQsIDB4OGY1NiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlN2M5LCAweGU3YzgsIDB4ZmZmZCwg MHg4ZDc5LCAweGZmZmQsIDB4OGQ5MywKKyAgICAweDhlNWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhlN2NjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY4NiwKKyAgICAweGZm ZmQsIDB4ZTdjYiwgMHhmZmZkLCAweGU3Y2EsIDB4ZmZmZCwgMHg5MWU3LCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDhjZWQsIDB4ZmZmZCwgMHg5MGMxLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTRhZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY1 OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlN2NkLCAw eGZmZmQsIDB4OGZkZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhlN2QwLCAweGU3Y2UsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdjZiwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdkMiwgMHhlN2QxLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDhmZjgsIDB4ZmZmZCwgMHhlN2QzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU3ZDQsIDB4ZTdkNSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDk0Y2UsIDB4OGRkMSwKKyAgICAweDhlZGYsIDB4ZTdkNiwgMHhmZmZk LCAweGU3ZDcsIDB4OTdhMiwgMHg4ZjY0LCAweDk2ZWMsIDB4OTdjYSwKKyAgICAweGU3ZDgsIDB4 OGJlMCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZDksIDB4ZmZmZCwKKyAg ICAweDkzNDIsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZGMsIDB4OGE5OCwgMHg5MDZhLCAweGZmZmQs IDB4ZTdkYSwKKyAgICAweGZmZmQsIDB4ZTdkYiwgMHhmZmZkLCAweDkyZGUsIDB4ZmZmZCwgMHhm ZmZkLCAweDk2NzQsIDB4OGJmYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlN2RlLCAweGU3ZGYsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdkZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdlMSwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHg5M2RkLCAweDhhNjIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTdlNSwgMHhmZmZkLCAweGZm ZmQsIDB4ZTdlMiwgMHhlN2U0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU3ZTAsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZTg2ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZTdlMywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdl OSwgMHhmZmZkLCAweGZmZmQsIDB4OGNkOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdlZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTM1MywgMHhlN2U4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGU3ZWIsIDB4ZTdlOSwgMHhmZmZkLCAweGU3ZWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGU3ZWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTdlNywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlN2Y0LCAweDg5OTQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU3ZTYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NGFi LCAweGZmZmQsIDB4ZTdlYSwgMHhmZmZkLCAweDhmZGUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4OGQ3YSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDk2NjcsIDB4ZmZmZCwKKyAgICAweDhiZTIsIDB4ZmZmZCwgMHhmZmZkLCAweDhmNjUs IDB4ZmZmZCwgMHg5M2JhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4OTE0YywgMHhmZmZkLCAweGU3ZjIsIDB4ZmZmZCwgMHhlN2VjLCAweGU3ZjEsIDB4ZmZmZCwK KyAgICAweDk2YzEsIDB4ZmZmZCwgMHg5MmI2LCAweGU3ZjMsIDB4ZTdmMCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5MTRiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdmNywKKyAgICAweGZm ZmQsIDB4ZTdmNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTdmNSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NjRlLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY5YiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTdmOCwgMHg5NWRkLCAweGZmZmQsIDB4ZmZmZCwgMHg4OTcz LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NTY1LCAweDkyOTIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhiOTgsIDB4ZmZmZCwgMHhlN2Zh LCAweGZmZmQsIDB4OGQ3YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlNGIsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTdmOSwKKyAgICAweDkwOGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkwOGUsIDB4ZTg0MCwgMHhlODQyLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhmZjksIDB4ZmZmZCwgMHhl ODQxLCAweGU4NDMsIDB4ZmZmZCwgMHhmZmZkLCAweDhiZDEsIDB4ZmZmZCwKKyAgICAweDk1NjQs IDB4ZmZmZCwgMHhmZmZkLCAweDhlZTAsIDB4OTg0MiwgMHhmZmZkLCAweGU3ZmMsIDB4OGRmNiwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ODVlLCAweGZmZmQsIDB4ZmZmZCwgMHhlODQ1LCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlODQ0LCAweGU4NDYsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZTdmYiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDkzZTcsIDB4ZmZmZCwgMHg5Mzc0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTJkNSwgMHhmZmZkLCAweGU4NGIsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkyNjIsIDB4ZTg0NywgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGU4NDgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OGM0YywgMHhmZmZkLCAweGU4NGEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg4Y2FlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg0OSwgMHhmZmZkLCAweDhmZGYsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 OGE5OSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZTg0ZiwgMHhmZmZkLCAweDhkYmQsIDB4OTE5OSwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg5MmM4LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGE1YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg0ZCwgMHhl ODRlLCAweDkyYzEsIDB4ZmZmZCwKKyAgICAweGU4NGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTg1MCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU4NTYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGU4NTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGU4NTgsIDB4OTM0YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGU4NTEsIDB4ZTg1MiwKKyAgICAweGU4NTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlODU3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGJiZSwg MHhmZmZkLCAweGZmZmQsIDB4ZTg1YSwgMHhlODU0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU4 NTMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU4NWUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg1ZiwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGU4NjAsIDB4ZmZmZCwgMHhmZmZkLCAweGU4NWQsIDB4ZTg1YywgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDhmZTAsIDB4OTNhOCwgMHhlODViLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTg2NCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU4NjIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODYzLCAweGU4NjEsIDB4ZmZmZCwKKyAg ICAweDkxZjYsIDB4ZmZmZCwgMHhlODY1LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTg2NiwgMHhmZmZkLCAweGZmZmQsIDB4ZTg2OCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGFkMywgMHhl ODY3LCAweDk2ZjgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhlODczLCAweGU4NjksIDB4ZmZmZCwgMHhmZmZkLCAweGU4NmMsIDB4ZmZmZCwK KyAgICAweGU4NmEsIDB4ZmZmZCwgMHhlODZiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlODZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU4NmYsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlODcwLCAweGZmZmQsIDB4ZTg3MSwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTg3NCwgMHhlODcyLCAweGU4NzUsIDB4ZTg3NywKKyAgICAweGZm ZmQsIDB4ZTg3NiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTJiNywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk2ZTUsIDB4ZmZmZCwgMHhl ODc4LCAweDkxNGQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg3OSwKKyAgICAweGZmZmQs IDB4OTVjMiwgMHhlODdhLCAweDhhNGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk1YiwK KyAgICAweGZmZmQsIDB4OGFkNSwgMHhmZmZkLCAweDhhZDQsIDB4ZTg3YiwgMHhmZmZkLCAweGU4 N2MsIDB4ZmZmZCwKKyAgICAweGU4N2QsIDB4ZTg3ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU4ODAsIDB4ZmZmZCwgMHg4YWQ2LCAweDhh NzQsIDB4OGQ3ZCwgMHg5NGI0LCAweGZmZmQsIDB4ZTg4MiwKKyAgICAweGU4ODEsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlODgzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg4OTdiLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZTg4NiwgMHhmZmZkLCAweGU4ODUsIDB4ZTg4NCwgMHhmZmZkLCAw eGU4ODcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4OGEsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhjNSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlODg4LCAw eGZmZmQsIDB4ZTg4YywgMHhlODhiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg4ZSwgMHhlODhkLCAweGU4OGYsIDB4ZmZmZCwKKyAgICAw eDkzYWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTg5MCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTg5MSwgMHhlODkzLCAweGZmZmQsIDB4ZmZmZCwgMHhlODky LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTU4YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZTg5NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGU4OTUsIDB4ZmZmZCwgMHg4ZGUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4 OTYsIDB4ZTg5NywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NjY4LCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkx NmEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODhhMiwKKyAgICAweDkxYzksIDB4ZmZmZCwg MHhlODk4LCAweGZmZmQsIDB4OTU4ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4OWIsIDB4ZTg5OSwgMHg4ZDdlLCAweGZmZmQsIDB4ZTg5 YSwKKyAgICAweDhjYzAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1YzMsIDB4ZTg5 ZCwgMHhlODlmLCAweGU4OWUsIDB4ZThhMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4OTQwLCAw eDkwNzcsIDB4OGY5YywgMHg4YWQ3LCAweGU4YTEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHg5NDg2LCAweGZmZmQsIDB4ZThhMywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDg5NDEsIDB4ZmZmZCwgMHhlOGEyLCAweDkyYzIsIDB4ZmZmZCwgMHg5N2NiLCAweDkzYTksIDB4 ZTg5YywKKyAgICAweDk3YTQsIDB4ZmZmZCwgMHg4Y2FmLCAweGZmZmQsIDB4ZmZmZCwgMHg5Nzdh LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHg4YmY3LCAweDk3YjIsIDB4ZmZmZCwKKyAgICAweDhjNDcsIDB4ZmZmZCwgMHg5MWUw LCAweGU0NDAsIDB4ZmZmZCwgMHhlOGE0LCAweDhhNGIsIDB4OTA4ZiwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGE3NSwgMHhlOGE2LCAweGZmZmQsIDB4ZThhNywKKyAg ICAweGU4YTUsIDB4OGM4NCwgMHhmZmZkLCAweDhkZGIsIDB4OGZlMSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDg5NDIsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZDcsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZThhOSwKKyAgICAweGU3YWMsIDB4ZmZmZCwgMHhlOGE4LCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU4YWMsIDB4ZThhYSwgMHhl OGFiLCAweGZmZmQsIDB4ZThhZCwgMHhmZmZkLCAweGU4YWUsIDB4OTdlYSwKKyAgICAweGU4YWYs IDB4ZThiMCwgMHhmZmZkLCAweDkwYzcsIDB4OTRiOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDkwOWQsIDB4OGFlNSwgMHhmZmZkLCAweGZmZmQsIDB4OTc1OSwgMHg4OWViLCAweDhm NTcsIDB4OGNkOSwKKyAgICAweGZmZmQsIDB4ZThiMywgMHhmZmZkLCAweGU4YjIsIDB4OGU5Mywg MHhlOGI0LCAweGU4YjEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGU0NywgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhlOGI4LCAweGU1YWIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTlkNCwg MHhmZmZkLCAweDkwOTcsIDB4ZThiNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHg5N2EzLCAweDkzZWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweDg5NGEsIDB4ZmZmZCwgMHg5MGUxLCAweDhlYjQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweDk1YjUsIDB4ZmZmZCwgMHg4OTVmLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweDk3ZWIsIDB4OTc4YiwKKyAgICAweGZmZmQsIDB4ZThiOSwgMHhmZmZkLCAw eDkzNjQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhlZjksIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThiYSwgMHhmZmZkLCAweGU4YmIsIDB4OTA2YiwKKyAgICAw eGU4YmMsIDB4ZmZmZCwgMHg5N2VjLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGI3LCAweGU4YmUsIDB4 ZThjMCwKKyAgICAweGZmZmQsIDB4ZThiZiwgMHhmZmZkLCAweGU4YmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU4YzEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZThjMiwgMHhmZmZkLCAweGZmZmQsIDB4 OTE5YSwgMHhmZmZkLCAweDg5ZTAsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZThjMywgMHhmZmZkLCAweGZmZmQsIDB4OTZiNiwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlOGM0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGU4YzUsIDB4ZmZmZCwgMHg5ODQ5LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDllNTAsIDB4ZThjNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhl OGM3LCAweGU4YzgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlOGNjLCAweGZmZmQs IDB4ZThjOSwgMHhmZmZkLCAweGU4Y2EsIDB4ZmZmZCwKKyAgICAweGU4Y2IsIDB4ZThjZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHg5MGMyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk2ZjUsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4OTBjMywgMHhmZmZkLCAweGZmZmQsIDB4ZThjZSwgMHhmZmZkLCAweDk0 ZjEsIDB4ZmZmZCwKKyAgICAweGU4Y2YsIDB4ZWE3MiwgMHg5NmNhLCAweGZmZmQsIDB4ZThkMCwg MHhmZmZkLCAweGU4ZDEsIDB4ZmZmZCwKKyAgICAweGU4ZDIsIDB4OGE3NiwgMHhmZmZkLCAweGU4 ZDQsIDB4ZmZmZCwgMHg5MDc4LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZThkNSwg MHhmZmZkLCAweGZmZmQsIDB4OGM0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZThkNiwgMHhlOGRhLCAweGZmZmQsIDB4ZThkOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZThkOSwgMHhmZmZkLCAweGZmZmQsIDB4OGE5MywgMHhlOGQ3LCAw eGU4ZGIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZGMsIDB4ZmZm ZCwgMHg4OGM2LCAweGZmZmQsIDB4ZThkZCwKKyAgICAweGU4ZGUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhmZTIsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZThkZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eDhiNjYsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZTIsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZTEsIDB4 ZmZmZCwKKyAgICAweGU4ZTAsIDB4ZmZmZCwgMHhmZmZkLCAweGU2OTEsIDB4ZmZmZCwgMHg5NWRh LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZTMsIDB4 ZThlNCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU4ZTUsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZTYsIDB4ZmZmZCwKKyAg ICAweGU4ZTcsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZTgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhhZDgsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZThlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOGVhLCAweDk0NDIsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlOGVjLCAweDg5YjksIDB4ZmZmZCwgMHhlOGVmLCAweGU4 ZWUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDg5NDMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4OGJiZiwKKyAgICAweGZmZmQsIDB4OTVjNSwgMHg5MmI4LCAweDhk YTAsIDB4ZmZmZCwgMHg4ZDgwLCAweDhmODcsIDB4ZmZmZCwKKyAgICAweDkwN2IsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZThmMSwgMHhmZmZkLCAweGZmZmQsIDB4ZThmMCwKKyAgICAweDk3 NjEsIDB4OGFlNiwgMHg5NGQwLCAweDkzZGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA5 YywKKyAgICAweDk3Y2MsIDB4ZmZmZCwgMHg4YzdhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZThmNCwgMHhmZmZkLCAweGZmZmQsIDB4ZThm MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4OTY2YSwgMHg5M2FhLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ODk2ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZThmNSwKKyAgICAw eGU4ZjIsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NzAsIDB4OTc4YSwgMHhlOGY2LCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGU4ZjcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZjksIDB4 OTFlOCwgMHg4YTdhLCAweDhhN2IsIDB4ZThmOCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4OGFlNywgMHg4Y2IwLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhZTgsIDB4 ZmZmZCwgMHhmZmZkLCAweDkzNWUsIDB4ZmZmZCwgMHhmZmZkLCAweDk3ZGUsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4OGNkYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU4ZmEsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZThmYiwKKyAgICAweGU4ZmMsIDB4ZTk0MCwgMHhmZmZkLCAweGU5NDIs IDB4ZTk0MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk1 OTcsIDB4ZmZmZCwgMHhlOTQzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk0 NCwKKyAgICAweGZmZmQsIDB4ZTk0NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU5NDYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU5NDgsIDB4ZTk0NywgMHhmZmZkLCAweGU5NDksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk0ZjIsIDB4ZTNjYSwgMHhmZmZk LCAweGZmZmQsIDB4OTA0OCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YjUxLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTk0YSwgMHhmZmZk LCAweGU5NGIsIDB4ZmZmZCwgMHg5OWFhLCAweDlmNWEsIDB4OTRkMSwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHg4OGY5LCAweGZmZmQsIDB4ODhiOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGU5NCwgMHg5NjRmLCAweDhmZmMs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NGMsIDB4ZmZmZCwgMHg5 NmRkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTk0ZCwgMHg5NzdiLCAweGZmZmQs IDB4ODk2MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhlNjAsIDB4ZmZmZCwgMHhl OTRlLCAweDg5ZWMsIDB4ZTk0ZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU5NTAs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTUyLCAweGU5NTMsIDB4ZmZmZCwK KyAgICAweGU5NTUsIDB4ZTk1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZTk1NCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweDhhZDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk1Niwg MHhmZmZkLCAweGU5NTcsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTU4LCAweGU5NTksIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhlOTVhLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTVjLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZTk1YiwgMHhmZmZkLCAweGU5NWUsIDB4ZTk2MSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGU5NWQsIDB4ZTk1ZiwgMHhlOTYwLCAweGZmZmQsIDB4ZmZm ZCwgMHhlOTYyLCAweGZmZmQsIDB4OGJjMCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhlZjEs IDB4ZTk2MywKKyAgICAweGU5NjQsIDB4OGQ4MSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlOTY1LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhNWQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4OTQ2ZSwgMHhlOTY2LCAweGU5NjcsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweDkyNzksIDB4OTNlOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk2OCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OTQ5ZCwgMHhmZmZkLCAweGZmZmQsIDB4OTFjYSwg MHg4OTc3LCAweDhiZWMsIDB4ZmZmZCwKKyAgICAweDhiZWQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkyOTMsIDB4ZTk2ZCwg MHg4YmVlLCAweGZmZmQsIDB4ZmZmZCwgMHg4OWVkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU5 NmMsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NmEsIDB4ZmZmZCwgMHhlOTZiLCAweGZmZmQsIDB4ZTk2 OSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlOTc3LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhlOTZlLCAweGU5NmYsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTk3MCwgMHhlOTcxLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU5NzMsIDB4ZmZm ZCwgMHhmZmZkLCAweGU5NzIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGY3OCwKKyAgICAw eGZmZmQsIDB4ZTk3NCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTc2LCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweDhiNTIsIDB4ZTk3NSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5MTliLCAweDhjYjEsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTk3OCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweDkxY2IsIDB4ZmZmZCwgMHhmZmZkLCAweGU5NzksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweDkzYWIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTk3YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGU5ODAsIDB4ZmZmZCwKKyAgICAweGU5N2QsIDB4ZmZmZCwgMHhl OTdjLCAweGU5N2UsIDB4ZmZmZCwgMHhlOTdiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTgyLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlOTgxLCAweGZm ZmQsIDB4ZTk4NCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg4YmMxLCAweGU5ODMsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZTk4NSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlOTg2LCAweGZm ZmQsIDB4ZTk4OCwgMHhlOTg3LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTk4OSwg MHhlOThiLCAweGU5OGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhkOWMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhlOThjLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU5OGQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhhNWIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk4ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGU5OGYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTA5MSwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTk5MCwKKyAgICAweGZmZmQsIDB4ZTk5MSwgMHhmZmZkLCAweGU5OTIs IDB4ZTk5MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhkODIsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5OTQsIDB4ZTk5NSwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhlOTk2LCAweGU5OTcsIDB4ZmZmZCwgMHhmZmZkLCAweGU5OTgsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NGFmLCAweGU5OWEsIDB4ZmZmZCwgMHg5NTQ1LCAweGU5 OWIsIDB4ZTk5OSwKKyAgICAweGZmZmQsIDB4ZTk5ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTk5Yywg MHhmZmZkLCAweGZmZmQsIDB4ZTk5ZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5 OWYsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5YTAsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGU5YTEsIDB4ZmZmZCwgMHhlOWEyLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlhMywKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlOWE0LCAw eGU5YTUsIDB4ZmZmZCwgMHhlOWE2LCAweGZmZmQsIDB4ZTlhNywKKyAgICAweGU5YTgsIDB4ZTlh OSwgMHhlOWFhLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5YWIsIDB4ZTlhYywKKyAgICAw eGZmZmQsIDB4OWY1NCwgMHhlOWFkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGUyZjYsIDB4OGI1MywgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4OGE0MCwgMHg4ZGIwLCAweGU5YWYsIDB4 ZTlhZSwgMHg5NmEzLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhlOWIxLCAweGU5YjIsIDB4ZTliMCwKKyAgICAweGZmZmQsIDB4 ZTliMywgMHhmZmZkLCAweGZmZmQsIDB4OTY4MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGU5YjQsIDB4ZmZmZCwgMHg4YjliLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTg0NCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZTliNSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5YjcsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweDg4YmMsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTliOCwgMHg5NWE5LCAweGU5 YjYsIDB4ZmZmZCwgMHhmZmZkLCAweGU5YjksIDB4ZTliYSwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTliYiwKKyAgICAweGU5 YmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGU5YmQsIDB4ZmZmZCwgMHg5NjhlLCAweDhlNGMsIDB4ZmZmZCwgMHg4ZGY4LCAw eDkxNGUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTli ZSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTljMSwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU5YmYsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5YzIsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4OGNlZiwgMHhlOWMwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTljMywKKyAgICAweGZmZmQsIDB4ZTljNCwgMHhlOWM1LCAweGZmZmQsIDB4ZTljOSwgMHhmZmZk LCAweDhlNDksIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkxZTIsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTljYSwgMHhlOWM3 LCAweGU5YzYsIDB4ZTljOCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDhjN2UsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGU5Y2UsIDB4ZTljZCwgMHhlOWNjLCAweGZmZmQsIDB4ZmZmZCwgMHg4OGIxLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZTlkOCwgMHhmZmZkLCAweGU5ZDQsIDB4ZmZmZCwKKyAgICAweGU5ZDUsIDB4ZTlkMSwgMHhl OWQ3LCAweGZmZmQsIDB4ZTlkMywgMHg4YTgyLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDk4NmIs IDB4ZmZmZCwgMHhlOWQ2LCAweGU5ZDIsIDB4ZTlkMCwgMHhlOWNmLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZGEsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZTlkZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlkYywg MHhlOWRiLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHg5NTY4LCAweGU5ZDksIDB4ODhmMSwKKyAgICAweGU5ZGUsIDB4ZmZmZCwg MHhlOWUwLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4OGE4ZiwgMHhlOWNiLCAweDg5NTYsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZTIsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGU5ZTEsIDB4ZTlkZiwKKyAgICAweDkyNGMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5NjkwLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTdkOCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhlOWUzLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGU5ZTQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZTllNSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGU5ZTYsIDB4ZmZmZCwKKyAgICAweGU5ZTcsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHg5MmI5LCAweGZmZmQsIDB4ZTllOCwKKyAgICAweGZmZmQsIDB4OTRiNSwgMHhmZmZkLCAw eGU5ZWQsIDB4ZTllOSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGU5ZWEsIDB4ZmZm ZCwgMHhmZmZkLCAweDk2NTAsIDB4OTZjMiwgMHhmZmZkLCAweDkzY2UsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZWUsIDB4ZmZmZCwgMHhmZmZk LCAweGU5ZWYsIDB4OTNiYywKKyAgICAweGU5ZWMsIDB4ZTllYiwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDg5YTgsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlOWY3 LCAweGZmZmQsIDB4ZmZmZCwgMHhlOWY2LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweDg5OTUsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlmNCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZjMsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZjEs IDB4ZmZmZCwKKyAgICAweDhhOWIsIDB4ZmZmZCwgMHhlOWYwLCAweDhlYjAsIDB4ODlhNywgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDhkODMsIDB4ZmZmZCwgMHhmZmZkLCAweGU5ZmEsIDB4ZTlmOSwKKyAgICAweGZmZmQs IDB4ZTlmOCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlmNSwgMHhmZmZkLCAweGU5ZmIsIDB4ZmZmZCwK KyAgICAweGU5ZmMsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGVhNDQsIDB4ZWE0MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZWE0NSwgMHhmZmZkLCAweGZm ZmQsIDB4ODk0YywgMHhlYTQwLCAweGVhNDEsIDB4ZmZmZCwKKyAgICAweDhkOTQsIDB4OTZiNywg MHhmZmZkLCAweGZmZmQsIDB4ZWE0MiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OTY1MSwgMHhmZmZkLCAweGZmZmQsIDB4ZWE0 YSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlYTQ2LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlYTRiLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE0OCwKKyAgICAweGZmZmQsIDB4ZWE0 NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4OGM3YiwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlYTRjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZWE0ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZWE0ZSwgMHhmZmZk LCAweGVhNDksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZTlmMiwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhlYTRmLCAweGZmZmQsIDB4OTJkZiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGVhNTMsIDB4ZmZmZCwgMHhlYTU0LCAweGVhNTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZWE1MSwgMHhlYTU3LCAweGZmZmQsIDB4ZWE1MCwgMHhm ZmZkLCAweGVhNTUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE1NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGVhNTksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZWE1OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVh NWIsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhlYTVjLCAweGZmZmQsIDB4ZWE1ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHg5ODY4LCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGVhNWEsIDB4OTFlOSwg MHg4ZGViLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTVlLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlYTVmLCAw eGVhNjAsIDB4ZmZmZCwgMHhmZmZkLCAweGVhNjEsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTYyLCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDhjYjIsIDB4ZWE2MywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTY0LCAweGZm ZmQsIDB4OGVhZCwKKyAgICAweGZmZmQsIDB4ZWE2NSwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGVhNjYsIDB4ZmZmZCwgMHhmZmZkLCAweGVh NjcsIDB4ZWE2OCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZWE2Yiwg MHhlYTY5LCAweDk4NWIsIDB4ZmZmZCwgMHhlYTZhLCAweGZmZmQsIDB4OTdlZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTZjLCAweGZmZmQsIDB4OTdk OSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTZkLCAw eDk0OWUsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZWE2ZSwgMHhlYTcwLCAweGZmZmQsIDB4ZmZm ZCwgMHhlYTcxLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGVhNmYsIDB4OGQ4 ZCwgMHg5NmNiLCAweDk2ODMsIDB4OWJmNSwgMHhmZmZkLCAweDlmODAsIDB4OTY5YiwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ODlhOSwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE3MywgMHg4YjZm LCAweGVhNzQsIDB4ZWE3NSwKKyAgICAweGVhNzYsIDB4ZmZmZCwgMHg4ZDk1LCAweGZmZmQsIDB4 ZWE3NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGUwZDIsIDB4OTZkOSwgMHhmZmZk LCAweDkxZTEsIDB4ZWE3OCwgMHhlYTdhLCAweGVhNzksIDB4ZmZmZCwKKyAgICAweGVhN2IsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhlYTdjLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGVhN2QsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZWE3ZSwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE4MCwgMHhm ZmZkLCAweGVhODEsIDB4ZWE4MiwKKyAgICAweGZmZmQsIDB4ZWE4MywgMHhmZmZkLCAweGVhODQs IDB4ZWE4NSwgMHhlYTg2LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZWE4NywKKyAgICAweGVhODgs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDkzNDMsIDB4ZmZmZCwK KyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDhjZGIsIDB4ZmZmZCwgMHhlYThhLCAweGZm ZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDkxNmMsIDB4ZWE4YiwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZWE4YywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDk1NDAsIDB4ZmZmZCwgMHhmZmZkLCAw eGVhOGQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlYThlLCAw eGUyNTYsIDB4ZmZmZCwgMHhmZmZkLCAweGU2ZDgsIDB4ZThlYiwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhlYThmLCAweGZmZmQsIDB4ZWE5MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZWE5MiwKKyAgICAweGVhOTMsIDB4ZWE5NCwgMHg5N2VlLCAweGVhOTEsIDB4ZmZmZCwgMHhmZmZk LCAweGVhOTUsIDB4ZWE5NiwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlYTk4LCAweGZmZmQsIDB4 ZWE5NywgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhlYTlh LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGVhOWIsIDB4ZWE5OSwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHg5 N2I0LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhlYTljLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZWE5ZCwgMHhlMjczLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGVhOWUs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMAor fTsKKworI2VuZGlmIC8qIEtBTkpJICovCisKKy8qIEJsYWgtdG8tVW5pY29kZSB0cmFuc2xhdGlv biB0YWJsZXMgKi8KKworc3RydWN0IHhfdG9fdW5pY29kZSB1X3RyYW5zcGFyZW50ID0geworICAg IDI1NiwgWDJVX0NYRywgMCwgMCwgIlRyYW5zcGFyZW50IiwgInRyYW5zcGFyZW50IiwgMCwgIiIs CisgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAg ICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgIDB4 MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgMHgxOCwg MHgxOSwgMHgxQSwgMHgxQiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiwKKyAgICAweDIwLCAweDIx LCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAorICAgIDB4MjgsIDB4MjksIDB4 MkEsIDB4MkIsIDB4MkMsIDB4MkQsIDB4MkUsIDB4MkYsCisgICAgMHgzMCwgMHgzMSwgMHgzMiwg MHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKKyAgICAweDM4LCAweDM5LCAweDNBLCAweDNC LCAweDNDLCAweDNELCAweDNFLCAweDNGLAorICAgIDB4NDAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4 NDQsIDB4NDUsIDB4NDYsIDB4NDcsCisgICAgMHg0OCwgMHg0OSwgMHg0QSwgMHg0QiwgMHg0Qywg MHg0RCwgMHg0RSwgMHg0RiwKKyAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1 LCAweDU2LCAweDU3LAorICAgIDB4NTgsIDB4NTksIDB4NUEsIDB4NUIsIDB4NUMsIDB4NUQsIDB4 NUUsIDB4NUYsCisgICAgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2Niwg MHg2NywKKyAgICAweDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZG LAorICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCisg ICAgMHg3OCwgMHg3OSwgMHg3QSwgMHg3QiwgMHg3QywgMHg3RCwgMHg3RSwgMHg3RiwKKyAgICAw eDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorICAgIDB4ODgs IDB4ODksIDB4OEEsIDB4OEIsIDB4OEMsIDB4OEQsIDB4OEUsIDB4OEYsCisgICAgMHg5MCwgMHg5 MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKyAgICAweDk4LCAweDk5LCAw eDlBLCAweDlCLCAweDlDLCAweDlELCAweDlFLCAweDlGLAorICAgIDB4QTAsIDB4QTEsIDB4QTIs IDB4QTMsIDB4QTQsIDB4QTUsIDB4QTYsIDB4QTcsCisgICAgMHhBOCwgMHhBOSwgMHhBQSwgMHhB QiwgMHhBQywgMHhBRCwgMHhBRSwgMHhBRiwKKyAgICAweEIwLCAweEIxLCAweEIyLCAweEIzLCAw eEI0LCAweEI1LCAweEI2LCAweEI3LAorICAgIDB4QjgsIDB4QjksIDB4QkEsIDB4QkIsIDB4QkMs IDB4QkQsIDB4QkUsIDB4QkYsCisgICAgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhD NSwgMHhDNiwgMHhDNywKKyAgICAweEM4LCAweEM5LCAweENBLCAweENCLCAweENDLCAweENELCAw eENFLCAweENGLAorICAgIDB4RDAsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDQsIDB4RDUsIDB4RDYs IDB4RDcsCisgICAgMHhEOCwgMHhEOSwgMHhEQSwgMHhEQiwgMHhEQywgMHhERCwgMHhERSwgMHhE RiwKKyAgICAweEUwLCAweEUxLCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LCAweEU3LAor ICAgIDB4RTgsIDB4RTksIDB4RUEsIDB4RUIsIDB4RUMsIDB4RUQsIDB4RUUsIDB4RUYsCisgICAg MHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNywKKyAgICAweEY4 LCAweEY5LCAweEZBLCAweEZCLCAweEZDLCAweEZELCAweEZFLCAweEZGCit9OworCisvKiA3LWJp dCBjaGFyYWN0ZXIgc2V0czogSVNPIDY0NiwgREVDIE5SQ3MsIFNob3J0IEtPSSwgYW5kIEhlYnJl dy03ICovCisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9hc2NpaSA9IHsKKyAgICA5NCwgMzMsIFgy VV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJVUyBBU0NJSSIsICJhc2NpaSIsIDYsICJCIiwKKyAg ICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYs IDB4MDAyNywKKyAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgw MDJkLCAweDAwMmUsIDB4MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMs IDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgw MDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKKyAgICAweDAwNDAs IDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywK KyAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAw NGUsIDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwg MHgwMDU1LCAweDAwNTYsIDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAw NWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwKKyAgICAweDAwNjAsIDB4MDA2MSwg MHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKKyAgICAweDAw NjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2 ZiwKKyAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAw eDAwNzYsIDB4MDA3NywKKyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwN2IsIDB4MDA3 YywgMHgwMDdkLCAweDAwN2UKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9icml0aXNoID0g eworICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIkJyaXRpc2ggSVNPIDY0 NiIsICJicml0aXNoIiwgMSwgIkEiLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDBh MywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAw eDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAz MCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3 LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4 MDAzZSwgMHgwMDNmLAorICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0 LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4 MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUx LCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4 MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MDA1ZSwgMHgw MDVmLAorICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUs IDB4MDA2NiwgMHgwMDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgw MDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIs IDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgw MDc5LCAweDAwN2EsIDB4MDA3YiwgMHgwMDdjLCAweDAwN2QsIDB4MDA3ZQorfTsKKworc3RydWN0 IHhfdG9fdW5pY29kZSB1X2R1dGNoID0geworICAgIDk0LCAzMywgWDJVX0RFQ3xYMlVfU1RELCBB TF9ST01BTiwgIkR1dGNoIE5SQyIsICJkdXRjaCIsIDAsICI0IiwKKyAgICAgICAgICAgIDB4MDAy MSwgMHgwMDIyLCAweDAwYTMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAw eDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4 MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1 LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4 MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKKyAgICAweDAwYmUsIDB4MDA0MSwgMHgwMDQy LCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4 MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAg ICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYs IDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwZmYsIDB4MDBiZCwgMHgw MDdjLCAweDAwNWUsIDB4MDA1ZiwKKyAgICAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMs IDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKKyAgICAweDAwNjgsIDB4MDA2OSwgMHgw MDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKKyAgICAweDAwNzAs IDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywK KyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwYTgsIDB4MDBhNCwgMHgwMGJjLCAweDAw MjcKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9maW5uaXNoID0geworICAgIDk0LCAzMywg WDJVX0RFQ3xYMlVfU1RELCBBTF9ST01BTiwgIkZpbm5pc2ggTlJDIiwgImZpbm5pc2giLCAwLCAi NUMiLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUs IDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgw MDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIs IDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgw MDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAg IDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0Niwg MHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAw NGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1Mywg MHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAw NWEsIDB4MDBjNCwgMHgwMGQ2LCAweDAwYzUsIDB4MDBkYywgMHgwMDVmLAorICAgIDB4MDBlOSwg MHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAor ICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2 ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAw eDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBl NCwgMHgwMGY2LCAweDAwZTUsIDB4MDBmYworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2Zy ZW5jaCA9IHsKKyAgICA5NCwgMzMsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJGcmVuY2gg SVNPIDY0NiIsICJmcmVuY2giLCAwLCAiZlIiLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIs IDB4MDBhMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgw MDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAg IDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwg MHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAw M2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDBlMCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0Mywg MHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAw NGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwg MHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAor ICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBiMCwgMHgwMGU3LCAweDAwYTcsIDB4MDA1 ZSwgMHgwMDVmLAorICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAw eDAwNjUsIDB4MDA2NiwgMHgwMDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2 YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAw eDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3 OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBlOSwgMHgwMGY5LCAweDAwZTgsIDB4MDBhOAorfTsKKwor c3RydWN0IHhfdG9fdW5pY29kZSB1X2ZyX2NhbmFkaWFuID0geworIDk0LDMzLFgyVV9ERUN8WDJV X1NURCxBTF9ST01BTiwiRnJlbmNoIENhbmFkaWFuIE5SQyIsImNhbmFkaWFuLWZyZW5jaCIsMCwi OVEiLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUs IDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgw MDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIs IDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgw MDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAg IDB4MDBlMCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0Niwg MHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAw NGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1Mywg MHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAw NWEsIDB4MDBlMiwgMHgwMGU3LCAweDAwZWEsIDB4MDBlZSwgMHgwMDVmLAorICAgIDB4MDBmNCwg MHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAor ICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2 ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAw eDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBl OSwgMHgwMGY5LCAweDAwZTgsIDB4MDBmYgorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2dl cm1hbiA9IHsKKyAgICA5NCwgMzMsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJHZXJtYW4g SVNPIDY0NiIsICJnZXJtYW4iLCAyMSwgIksiLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIs IDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgw MDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAg IDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwg MHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAw M2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDBhNywgMHgwMDQxLCAweDAwNDIsIDB4MDA0Mywg MHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAw NGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwg MHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAor ICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBjNCwgMHgwMGQ2LCAweDAwZGMsIDB4MDA1 ZSwgMHgwMDVmLAorICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAw eDAwNjUsIDB4MDA2NiwgMHgwMDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2 YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAw eDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3 OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBlNCwgMHgwMGY2LCAweDAwZmMsIDB4MDBkZgorfTsKKwor c3RydWN0IHhfdG9fdW5pY29kZSB1X2h1bmdhcmlhbiA9IHsKKyAgICA5NCwgMzMsIFgyVV9JU098 WDJVX1NURCwgQUxfUk9NQU4sICJIdW5nYXJpYW4gSVNPIDY0NiIsImh1bmdhcmlhbiIsODYsImki LAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMGE0LCAweDAwMjUsIDB4 MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJj LCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4 MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5 LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4 MDBjMSwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgw MDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQs IDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgw MDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEs IDB4MDBjOSwgMHgwMGQ2LCAweDAwZGMsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDBlMSwgMHgw MDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAorICAg IDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwg MHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAw NzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBlOSwg MHgwMGY2LCAweDAwZmMsIDB4MDAyMiwgMHgwMmRkCit9OworCitzdHJ1Y3QgeF90b191bmljb2Rl IHVfaXRhbGlhbiA9IHsKKyAgICA5NCwgMzMsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJJ dGFsaWFuIElTTyA2NDYiLCAiaXRhbGlhbiIsIDE1LCAiWSIsCisgICAgICAgICAgICAweDAwMjEs IDB4MDAyMiwgMHgwMGEzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgw MDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAw MmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwg MHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAw M2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMGE3LCAweDAwNDEsIDB4MDA0Miwg MHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAw NDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAg MHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAw eDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGIwLCAweDAwZTcsIDB4MDBl OSwgMHgwMDVlLCAweDAwNWYsCisgICAgMHgwMGY5LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAw eDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2 YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAw eDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisg ICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGUwLCAweDAwZjIsIDB4MDBlOCwgMHgwMGVj Cit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfaWNlbGFuZGljID0geworICAgIDk0LCAzMywg WDJVX0RFQ3xYMlVfU1RELCBBTF9ST01BTiwgIkljZWxhbmRpYyBOUkMiLCAiaWNlbGFuZGljIiwg MCwgTlVMTCwKKyAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgw MDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIs IDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgw MDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgs IDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwK KyAgICAweDAwZGUsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAw NDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0Yywg MHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAw NTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwg MHgwMDVhLCAweDAwZjAsIDB4MDBkOCwgMHgwMGM2LCAweDAwZDYsIDB4MDA1ZiwKKyAgICAweDAw ZmUsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2 NywKKyAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAw eDAwNmUsIDB4MDA2ZiwKKyAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3 NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKKyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAw eDAwZjAsIDB4MDA3YywgMHgwMGU2LCAweDAwZjYKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUg dV9qaXMwMjAxciA9IHsKKyAgICA5NCwgMzMsIFgyVV9JU098WDJVX1NURCxBTF9ST01BTiwiSmFw YW5lc2UgUm9tYW4iLCJqYXBhbmVzZS1yb21hbiIsMTQsIkoiLAorICAgICAgICAgICAgMHgwMDIx LCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4 MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgw MDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUs IDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgw MDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIs IDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgw MDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAg IDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1Niwg MHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMGE1LCAweDAw NWQsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2Mywg MHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAw NmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwg MHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAor ICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDA3YiwgMHgwMDdjLCAweDAwN2QsIDB4MjAz ZQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2ppczAyMDFrID0geworICAgIDk0LCAzMywg WDJVX0lTT3xYMlVfU1RELEFMX0tBTkEsIkphcGFuZXNlIEthdGFrYW5hIiwgImthdGFrYW5hIiwg MTMsICJJIiwKKyAgICAgICAgICAgIDB4ZmY2MSwgMHhmZjYyLCAweGZmNjMsIDB4ZmY2NCwgMHhm ZjY1LCAweGZmNjYsIDB4ZmY2NywKKyAgICAweGZmNjgsIDB4ZmY2OSwgMHhmZjZhLCAweGZmNmIs IDB4ZmY2YywgMHhmZjZkLCAweGZmNmUsIDB4ZmY2ZiwKKyAgICAweGZmNzAsIDB4ZmY3MSwgMHhm ZjcyLCAweGZmNzMsIDB4ZmY3NCwgMHhmZjc1LCAweGZmNzYsIDB4ZmY3NywKKyAgICAweGZmNzgs IDB4ZmY3OSwgMHhmZjdhLCAweGZmN2IsIDB4ZmY3YywgMHhmZjdkLCAweGZmN2UsIDB4ZmY3ZiwK KyAgICAweGZmODAsIDB4ZmY4MSwgMHhmZjgyLCAweGZmODMsIDB4ZmY4NCwgMHhmZjg1LCAweGZm ODYsIDB4ZmY4NywKKyAgICAweGZmODgsIDB4ZmY4OSwgMHhmZjhhLCAweGZmOGIsIDB4ZmY4Yywg MHhmZjhkLCAweGZmOGUsIDB4ZmY4ZiwKKyAgICAweGZmOTAsIDB4ZmY5MSwgMHhmZjkyLCAweGZm OTMsIDB4ZmY5NCwgMHhmZjk1LCAweGZmOTYsIDB4ZmY5NywKKyAgICAweGZmOTgsIDB4ZmY5OSwg MHhmZjlhLCAweGZmOWIsIDB4ZmY5YywgMHhmZjlkLCAweGZmOWUsIDB4ZmY5ZiwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUg dV9ub3J3ZWdpYW4gPSB7ICAgICAvKiBTYW1lIGFzIERhbmlzaCAqLworICAgIDk0LDMzLFgyVV9J U098WDJVX1NURCxBTF9ST01BTiwiTm9yd2VnaWFuIElTTyA2NDYiLCAibm9yd2VnaWFuIiwgNjAs ICJgRTYiLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAw MjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwg MHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAw MzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwg MHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAor ICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0 NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAw eDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1 MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAw eDAwNWEsIDB4MDBjNiwgMHgwMGQ4LCAweDAwYzUsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDA2 MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3 LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4 MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0 LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4 MDBlNiwgMHgwMGY4LCAweDAwZTUsIDB4MDA3ZQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1 X2RhbmlzaCA9IHsgICAgICAgIC8qIFNhbWUgYXMgTm9yd2VnaWFuICovCisgICAgOTQsIDMzLCBY MlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiRGFuaXNoIElTTyA2NDYiLCAiZGFuaXNoIiwgNjAs ICJgRTYiLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAw MjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwg MHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAw MzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwg MHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAor ICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0 NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAw eDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1 MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAw eDAwNWEsIDB4MDBjNiwgMHgwMGQ4LCAweDAwYzUsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDA2 MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3 LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4 MDA2ZSwgMHgwMDZmLAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0 LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4 MDBlNiwgMHgwMGY4LCAweDAwZTUsIDB4MDA3ZQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1 X3BvcnR1Z3Vlc2UgPSB7CisgICAgOTQsMzMsWDJVX0lTT3xYMlVfU1RELEFMX1JPTUFOLCJQb3J0 dWd1ZXNlIElTTyA2NDYiLCJwb3J0dWd1ZXNlIiwxNiwiTCU2IiwKKyAgICAgICAgICAgIDB4MDAy MSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAw eDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4 MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1 LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4 MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKKyAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQy LCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4 MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAg ICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYs IDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwYzYsIDB4MDBkOCwgMHgw MGM1LCAweDAwNWUsIDB4MDA1ZiwKKyAgICAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMs IDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKKyAgICAweDAwNjgsIDB4MDA2OSwgMHgw MDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKKyAgICAweDAwNzAs IDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywK KyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwZTYsIDB4MDBmOCwgMHgwMGU1LCAweDAw N2UKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9zcGFuaXNoID0geworICAgIDk0LCAzMywg WDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIlNwYW5pc2ggSVNPIDY0NiIsICJzcGFuaXNoIiwg MTcsICJaIiwKKyAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwYTMsIDB4MDAyNCwgMHgw MDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIs IDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgw MDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgs IDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwK KyAgICAweDAwYTcsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAw NDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0Yywg MHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAw NTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwg MHgwMDVhLCAweDAwYTEsIDB4MDBkMSwgMHgwMGJmLCAweDAwNWUsIDB4MDA1ZiwKKyAgICAweDAw NjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2 NywKKyAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAw eDAwNmUsIDB4MDA2ZiwKKyAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3 NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKKyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAw eDAwYjAsIDB4MDBmMSwgMHgwMGU3LCAweDAwN2UKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUg dV9zd2VkaXNoID0geworICAgIDk0LCAzMywgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIlN3 ZWRpc2ggSVNPIDY0NiIsICJzd2VkaXNoIiwgMTEsICJIRyIsCisgICAgICAgICAgICAweDAwMjEs IDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgw MDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAw MmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwg MHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAw M2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMGM5LCAweDAwNDEsIDB4MDA0Miwg MHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAw NDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAg MHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAw eDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMGM0LCAweDAwZDYsIDB4MDBj NSwgMHgwMGRjLCAweDAwNWYsCisgICAgMHgwMGU5LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAw eDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2 YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwgMHgwMDZlLCAweDAwNmYsCisgICAgMHgwMDcwLCAw eDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisg ICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMGU0LCAweDAwZjYsIDB4MDBlNSwgMHgwMGZj Cit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfc3dpc3MgPSB7CisgICAgOTQsIDMzLCBYMlVf REVDfFgyVV9TVEQsIEFMX1JPTUFOLCAiU3dpc3MgTlJDIiwgInN3aXNzIiwgMCwgIj0iLAorICAg ICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDBmOSwgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwg MHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAw MmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywg MHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAw M2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDBlMCwg MHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAor ICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0 ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAw eDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDBl OSwgMHgwMGU3LCAweDAwZWEsIDB4MDBlZSwgMHgwMGU4LAorICAgIDB4MDBmNCwgMHgwMDYxLCAw eDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LAorICAgIDB4MDA2 OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsIDB4MDA2ZSwgMHgwMDZm LAorICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4 MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDBlNCwgMHgwMGY2 LCAweDAwZmMsIDB4MDBmYgorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2tvaTcgPSB7Cisg ICAgOTQsIDMzLCBYMlVfU1RELCBBTF9DWVJJTCwgIlNob3J0IEtPSSIsICJzaG9ydC1rb2kiLCAw LCBOVUxMLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAw MjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwg MHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAw MzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwg MHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAor ICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0 NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAw eDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1 MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAw eDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MDA1ZSwgMHgwMDVmLAorICAgIDB4MDQy ZSwgMHgwNDEwLCAweDA0MTEsIDB4MDQyNiwgMHgwNDE0LCAweDA0MTUsIDB4MDQyNCwgMHgwNDEz LAorICAgIDB4MDQyNSwgMHgwNDE4LCAweDA0MTksIDB4MDQxYSwgMHgwNDFiLCAweDA0MWMsIDB4 MDQxZCwgMHgwNDFlLAorICAgIDB4MDQxZiwgMHgwNDJmLCAweDA0MjAsIDB4MDQyMSwgMHgwNDIy LCAweDA0MjMsIDB4MDQxNiwgMHgwNDEyLAorICAgIDB4MDQyYywgMHgwNDJiLCAweDA0MTcsIDB4 MDQyOCwgMHgwNDJkLCAweDA0MjksIDB4MDQyNworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1 X2Vsb3Q5MjcgPSB7CisgICAgOTQsIDMzLCBYMlVfU1RELCBBTF9HUkVFSywgIkVMT1QgOTI3Iiwg ImVsb3Q5MjctZ3JlZWsiLCAwLCBOVUxMLAorICAgICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4 MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5 LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4 MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgw MDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2Qs IDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgw MDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEs IDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgw MDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAg IDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MDA1ZSwg MHgwMDVmLAorICAgIDB4MDA2MCwgMHgwMzkxLCAweDAzOTIsIDB4MDM5MywgMHgwMzk0LCAweDAz OTUsIDB4MDM5NiwgMHgwMzk3LAorICAgIDB4MDM5OCwgMHgwMzk5LCAweDAzOWEsIDB4MDM5Yiwg MHgwMzljLCAweDAzOWQsIDB4MDM5ZSwgMHgwMzlmLAorICAgIDB4MDNhMCwgMHgwM2ExLCAweDAz YTMsIDB4MDNhNCwgMHgwM2E1LCAweDAzYTYsIDB4MDNhNywgMHgwM2E4LAorICAgIDB4MDNhOSwg MHgwMDIwLCAweDAwMjAsIDB4MDA3YiwgMHgwMDdjLCAweDAwN2QsIDB4MDA3ZQorfTsKKworCitz dHJ1Y3QgeF90b191bmljb2RlIHVfaGVicmV3NyA9IHsKKyAgICA5NCwgMzMsIFgyVV9TVEQsIEFM X0hFQlJFVywgIkhlYnJldy03IiwgImhlYnJldy03IiwgMCwgTlVMTCwKKyAgICAgICAgICAgIDB4 MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKKyAg ICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUs IDB4MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgw MDM1LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2Is IDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKKyAgICAweDAwNDAsIDB4MDA0MSwgMHgw MDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAwNDgs IDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwK KyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAw NTYsIDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1Yywg MHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwKKyAgICAweDA1ZDAsIDB4MDVkMSwgMHgwNWQyLCAweDA1 ZDMsIDB4MDVkNCwgMHgwNWQ1LCAweDA1ZDYsIDB4MDVkNywKKyAgICAweDA1ZDgsIDB4MDVkOSwg MHgwNWRhLCAweDA1ZGIsIDB4MDVkYywgMHgwNWRkLCAweDA1ZGUsIDB4MDVkZiwKKyAgICAweDA1 ZTAsIDB4MDVlMSwgMHgwNWUyLCAweDA1ZTMsIDB4MDVlNCwgMHgwNWU1LCAweDA1ZTYsIDB4MDVl NywKKyAgICAweDA1ZTgsIDB4MDVlOSwgMHgwNWVhLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAw eDAwN2UKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9hcGwxID0geworICAgIDk0LCAzMywg WDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwgIkFQTCBJU08iLCAiYXBsLWlzbyIsIDY4LCAiZSIs CisgICAgICAgICAgICAweDAwYTgsIDB4MDAyOSwgMHgwMDNjLCAweDIyNjQsIDB4MDAzZCwgMHgw MDNlLCAweDAwNWQsCisgICAgMHgyMjI4LCAweDIyMjcsIDB4MjI2MCwgMHgwMGY3LCAweDAwMmMs IDB4MDAyYiwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgw MDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzks IDB4MDAyOCwgMHgwMDViLCAweDAwM2IsIDB4MDBkNywgMHgwMDNhLCAweDAwNWMsCisgICAgMHgw MGFmLCAweDIzN2EsIDB4MjJhNSwgMHgyMmMyLCAweDIzMGEsIDB4MjIwYSwgMHgwMDVmLCAweDIy MDcsCisgICAgMHgyMjA2LCAweDIzNzMsIDB4MjIxOCwgMHgwMDI3LCAweDI1YWYsIDB4MDA3Yywg MHgyMmE0LCAweDI1Y2IsCisgICAgMHgyMmM2LCAweDAwM2YsIDB4MjM3NCwgMHgyMzA4LCAweDIy M2MsIDB4MjE5MywgMHgyMjJhLCAweDIzNzUsCisgICAgMHgyMjgzLCAweDIxOTEsIDB4MjI4Miwg MHgyMTkwLCAweDIyYTIsIDB4MjE5MiwgMHgyMjY1LCAweDAwMmQsCisgICAgMHgyMmM0LCAweDAw NDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAg MHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAw eDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1 NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDdiLCAw eDIyYTMsIDB4MDA3ZCwgMHgwMDI0Cit9OworCisvKiBJU08gODg1OSBMYXRpbiBBbHBoYWJldHMg Ki8KKworc3RydWN0IHhfdG9fdW5pY29kZSB1Xzg4NTlfMSA9IHsKKyAgICA5NiwgMzIsIFgyVV9J U098WDJVX1NURCwgQUxfUk9NQU4sICJJU08gTGF0aW4tMSIsICJsYXRpbjEiLCAxMDAsICJBIiwK KyAgICAweDAwQTAsIDB4MDBBMSwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAweDAw QTYsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4MDBBQywg MHgwMEFELCAweDAwQUUsIDB4MDBBRiwKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAw QjMsIDB4MDBCNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKKyAgICAweDAwQjgsIDB4MDBCOSwg MHgwMEJBLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDBCRiwKKyAgICAweDAw QzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDBD NywKKyAgICAweDAwQzgsIDB4MDBDOSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELCAw eDAwQ0UsIDB4MDBDRiwKKyAgICAweDAwRDAsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4MDBE NCwgMHgwMEQ1LCAweDAwRDYsIDB4MDBENywKKyAgICAweDAwRDgsIDB4MDBEOSwgMHgwMERBLCAw eDAwREIsIDB4MDBEQywgMHgwMERELCAweDAwREUsIDB4MDBERiwKKyAgICAweDAwRTAsIDB4MDBF MSwgMHgwMEUyLCAweDAwRTMsIDB4MDBFNCwgMHgwMEU1LCAweDAwRTYsIDB4MDBFNywKKyAgICAw eDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUsIDB4 MDBFRiwKKyAgICAweDAwRjAsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1 LCAweDAwRjYsIDB4MDBGNywKKyAgICAweDAwRjgsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIsIDB4 MDBGQywgMHgwMEZELCAweDAwRkUsIDB4MDBGRgorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1 Xzg4NTlfMiA9IHsKKyAgICA5NiwgMzIsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJJU08g TGF0aW4tMiIsICJsYXRpbjIiLCAxMDEsICJCIiwKKyAgICAweDAwQTAsIDB4MDEwNCwgMHgwMkQ4 LCAweDAxNDEsIDB4MDBBNCwgMHgwMTNELCAweDAxNUEsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4 MDE2MCwgMHgwMTVFLCAweDAxNjQsIDB4MDE3OSwgMHgwMEFELCAweDAxN0QsIDB4MDE3QiwKKyAg ICAweDAwQjAsIDB4MDEwNSwgMHgwMkRCLCAweDAxNDIsIDB4MDBCNCwgMHgwMTNFLCAweDAxNUIs IDB4MDJDNywKKyAgICAweDAwQjgsIDB4MDE2MSwgMHgwMTVGLCAweDAxNjUsIDB4MDE3QSwgMHgw MkRELCAweDAxN0UsIDB4MDE3QywKKyAgICAweDAxNTQsIDB4MDBDMSwgMHgwMEMyLCAweDAxMDIs IDB4MDBDNCwgMHgwMTM5LCAweDAxMDYsIDB4MDBDNywKKyAgICAweDAxMEMsIDB4MDBDOSwgMHgw MTE4LCAweDAwQ0IsIDB4MDExQSwgMHgwMENELCAweDAwQ0UsIDB4MDEwRSwKKyAgICAweDAxMTAs IDB4MDE0MywgMHgwMTQ3LCAweDAwRDMsIDB4MDBENCwgMHgwMTUwLCAweDAwRDYsIDB4MDBENywK KyAgICAweDAxNTgsIDB4MDE2RSwgMHgwMERBLCAweDAxNzAsIDB4MDBEQywgMHgwMERELCAweDAx NjIsIDB4MDBERiwKKyAgICAweDAxNTUsIDB4MDBFMSwgMHgwMEUyLCAweDAxMDMsIDB4MDBFNCwg MHgwMTNBLCAweDAxMDcsIDB4MDBFNywKKyAgICAweDAxMEQsIDB4MDBFOSwgMHgwMTE5LCAweDAw RUIsIDB4MDExQiwgMHgwMEVELCAweDAwRUUsIDB4MDEwRiwKKyAgICAweDAxMTEsIDB4MDE0NCwg MHgwMTQ4LCAweDAwRjMsIDB4MDBGNCwgMHgwMTUxLCAweDAwRjYsIDB4MDBGNywKKyAgICAweDAx NTksIDB4MDE2RiwgMHgwMEZBLCAweDAxNzEsIDB4MDBGQywgMHgwMEZELCAweDAxNjMsIDB4MDJE OQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1Xzg4NTlfMyA9IHsKKyAgICA5NiwgMzIsIFgy VV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJJU08gTGF0aW4tMyIsICJsYXRpbjMiLCAxMDksICJD IiwKKyAgICAweDAwQTAsIDB4MDEyNiwgMHgwMkQ4LCAweDAwQTMsIDB4MDBBNCwgMHhmZmZkLCAw eDAxMjQsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4MDEzMCwgMHgwMTVFLCAweDAxMUUsIDB4MDEz NCwgMHgwMEFELCAweGZmZmQsIDB4MDE3QiwKKyAgICAweDAwQjAsIDB4MDEyNywgMHgwMEIyLCAw eDAwQjMsIDB4MDBCNCwgMHgwMEI1LCAweDAxMjUsIDB4MDBCNywKKyAgICAweDAwQjgsIDB4MDEz MSwgMHgwMTVGLCAweDAxMUYsIDB4MDEzNSwgMHgwMEJELCAweGZmZmQsIDB4MDE3QywKKyAgICAw eDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweGZmZmQsIDB4MDBDNCwgMHgwMTBBLCAweDAxMDgsIDB4 MDBDNywKKyAgICAweDAwQzgsIDB4MDBDOSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENE LCAweDAwQ0UsIDB4MDBDRiwKKyAgICAweGZmZmQsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4 MDBENCwgMHgwMTIwLCAweDAwRDYsIDB4MDBENywKKyAgICAweDAxMUMsIDB4MDBEOSwgMHgwMERB LCAweDAwREIsIDB4MDBEQywgMHgwMTZDLCAweDAxNUMsIDB4MDBERiwKKyAgICAweDAwRTAsIDB4 MDBFMSwgMHgwMEUyLCAweGZmZmQsIDB4MDBFNCwgMHgwMTBCLCAweDAxMDksIDB4MDBFNywKKyAg ICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUs IDB4MDBFRiwKKyAgICAweGZmZmQsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgw MTIxLCAweDAwRjYsIDB4MDBGNywKKyAgICAweDAxMUQsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIs IDB4MDBGQywgMHgwMTZELCAweDAxNUQsIDB4MDJEOQorfTsKKworc3RydWN0IHhfdG9fdW5pY29k ZSB1Xzg4NTlfNCA9IHsKKyAgICA5NiwgMzIsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJJ U08gTGF0aW4tNCIsICJsYXRpbjQiLCAxMTAsICJEIiwKKyAgICAweDAwQTAsIDB4MDEwNCwgMHgw MTM4LCAweDAxNTYsIDB4MDBBNCwgMHgwMTI4LCAweDAxM0IsIDB4MDBBNywKKyAgICAweDAwQTgs IDB4MDE2MCwgMHgwMTEyLCAweDAxMjIsIDB4MDE2NiwgMHgwMEFELCAweDAxN0QsIDB4MDBBRiwK KyAgICAweDAwQjAsIDB4MDEwNSwgMHgwMkRCLCAweDAxNTcsIDB4MDBCNCwgMHgwMTI5LCAweDAx M0MsIDB4MDJDNywKKyAgICAweDAwQjgsIDB4MDE2MSwgMHgwMTEzLCAweDAxMjMsIDB4MDE2Nywg MHgwMTRBLCAweDAxN0UsIDB4MDE0QiwKKyAgICAweDAxMDAsIDB4MDBDMSwgMHgwMEMyLCAweDAw QzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDEyRSwKKyAgICAweDAxMEMsIDB4MDBDOSwg MHgwMTE4LCAweDAwQ0IsIDB4MDExNiwgMHgwMENELCAweDAwQ0UsIDB4MDEyQSwKKyAgICAweDAx MTAsIDB4MDE0NSwgMHgwMTRDLCAweDAxMzYsIDB4MDBENCwgMHgwMEQ1LCAweDAwRDYsIDB4MDBE NywKKyAgICAweDAwRDgsIDB4MDE3MiwgMHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMTY4LCAw eDAxNkEsIDB4MDBERiwKKyAgICAweDAxMDEsIDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4MDBF NCwgMHgwMEU1LCAweDAwRTYsIDB4MDEyRiwKKyAgICAweDAxMEQsIDB4MDBFOSwgMHgwMTE5LCAw eDAwRUIsIDB4MDExNywgMHgwMEVELCAweDAwRUUsIDB4MDEyQiwKKyAgICAweDAxMTEsIDB4MDE0 NiwgMHgwMTRELCAweDAxMzcsIDB4MDBGNCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywKKyAgICAw eDAwRjgsIDB4MDE3MywgMHgwMEZBLCAweDAwRkIsIDB4MDBGQywgMHgwMTY5LCAweDAxNkIsIDB4 MDJEOQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1Xzg4NTlfNSA9IHsKKyAgICA5NiwzMixY MlVfSVNPfFgyVV9TVEQsQUxfQ1lSSUwsIklTTyBMYXRpbi9DeXJpbGxpYyIsImN5cmlsbGljLWlz byIsMTQ0LCJMIiwKKyAgICAweDAwQTAsIDB4MDQwMSwgMHgwNDAyLCAweDA0MDMsIDB4MDQwNCwg MHgwNDA1LCAweDA0MDYsIDB4MDQwNywKKyAgICAweDA0MDgsIDB4MDQwOSwgMHgwNDBBLCAweDA0 MEIsIDB4MDQwQywgMHgwMEFELCAweDA0MEUsIDB4MDQwRiwKKyAgICAweDA0MTAsIDB4MDQxMSwg MHgwNDEyLCAweDA0MTMsIDB4MDQxNCwgMHgwNDE1LCAweDA0MTYsIDB4MDQxNywKKyAgICAweDA0 MTgsIDB4MDQxOSwgMHgwNDFBLCAweDA0MUIsIDB4MDQxQywgMHgwNDFELCAweDA0MUUsIDB4MDQx RiwKKyAgICAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMsIDB4MDQyNCwgMHgwNDI1LCAw eDA0MjYsIDB4MDQyNywKKyAgICAweDA0MjgsIDB4MDQyOSwgMHgwNDJBLCAweDA0MkIsIDB4MDQy QywgMHgwNDJELCAweDA0MkUsIDB4MDQyRiwKKyAgICAweDA0MzAsIDB4MDQzMSwgMHgwNDMyLCAw eDA0MzMsIDB4MDQzNCwgMHgwNDM1LCAweDA0MzYsIDB4MDQzNywKKyAgICAweDA0MzgsIDB4MDQz OSwgMHgwNDNBLCAweDA0M0IsIDB4MDQzQywgMHgwNDNELCAweDA0M0UsIDB4MDQzRiwKKyAgICAw eDA0NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQ0NCwgMHgwNDQ1LCAweDA0NDYsIDB4 MDQ0NywKKyAgICAweDA0NDgsIDB4MDQ0OSwgMHgwNDRBLCAweDA0NEIsIDB4MDQ0QywgMHgwNDRE LCAweDA0NEUsIDB4MDQ0RiwKKyAgICAweDIxMTYsIDB4MDQ1MSwgMHgwNDUyLCAweDA0NTMsIDB4 MDQ1NCwgMHgwNDU1LCAweDA0NTYsIDB4MDQ1NywKKyAgICAweDA0NTgsIDB4MDQ1OSwgMHgwNDVB LCAweDA0NUIsIDB4MDQ1QywgMHgwMEE3LCAweDA0NUUsIDB4MDQ1RgorfTsKKworc3RydWN0IHhf dG9fdW5pY29kZSB1Xzg4NTlfNiA9IHsKKyAgICA5NiwgMzIsIFgyVV9JU098WDJVX1NURCxBTF9B UkFCSUMsIklTTyBMYXRpbi9BcmFiaWMiLCJhcmFiaWMtaXNvIiwxMjcsIkciLAorICAgIDB4MDBB MCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgwMEE0LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgwNjBDLCAweDAwQUQsIDB4 ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 MDYxQiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHgwNjFGLAorICAgIDB4ZmZmZCwgMHgwNjIx LCAweDA2MjIsIDB4MDYyMywgMHgwNjI0LCAweDA2MjUsIDB4MDYyNiwgMHgwNjI3LAorICAgIDB4 MDYyOCwgMHgwNjI5LCAweDA2MkEsIDB4MDYyQiwgMHgwNjJDLCAweDA2MkQsIDB4MDYyRSwgMHgw NjJGLAorICAgIDB4MDYzMCwgMHgwNjMxLCAweDA2MzIsIDB4MDYzMywgMHgwNjM0LCAweDA2MzUs IDB4MDYzNiwgMHgwNjM3LAorICAgIDB4MDYzOCwgMHgwNjM5LCAweDA2M0EsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4MDY0MCwgMHgwNjQxLCAweDA2NDIs IDB4MDY0MywgMHgwNjQ0LCAweDA2NDUsIDB4MDY0NiwgMHgwNjQ3LAorICAgIDB4MDY0OCwgMHgw NjQ5LCAweDA2NEEsIDB4MDY0QiwgMHgwNjRDLCAweDA2NEQsIDB4MDY0RSwgMHgwNjRGLAorICAg IDB4MDY1MCwgMHgwNjUxLCAweDA2NTIsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfODg1OV83ID0g eworICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELEFMX0dSRUVLLCJJU08gTGF0aW4vR3JlZWsi LCAiZ3JlZWstaXNvIiwgMTI2LCAiRiIsCisgICAgMHgwMEEwLCAweDIwMTgsIDB4MjAxOSwgMHgw MEEzLCAweEZGRkQsIDB4RkZGRCwgMHgwMEE2LCAweDAwQTcsCisgICAgMHgwMEE4LCAweDAwQTks IDB4RkZGRCwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHhGRkZELCAweDIwMTUsCisgICAgMHgw MEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweDAzODQsIDB4MDM4NSwgMHgwMzg2LCAweDAw QjcsCisgICAgMHgwMzg4LCAweDAzODksIDB4MDM4QSwgMHgwMEJCLCAweDAzOEMsIDB4MDBCRCwg MHgwMzhFLCAweDAzOEYsCisgICAgMHgwMzkwLCAweDAzOTEsIDB4MDM5MiwgMHgwMzkzLCAweDAz OTQsIDB4MDM5NSwgMHgwMzk2LCAweDAzOTcsCisgICAgMHgwMzk4LCAweDAzOTksIDB4MDM5QSwg MHgwMzlCLCAweDAzOUMsIDB4MDM5RCwgMHgwMzlFLCAweDAzOUYsCisgICAgMHgwM0EwLCAweDAz QTEsIDB4ZmZmZCwgMHgwM0EzLCAweDAzQTQsIDB4MDNBNSwgMHgwM0E2LCAweDAzQTcsCisgICAg MHgwM0E4LCAweDAzQTksIDB4MDNBQSwgMHgwM0FCLCAweDAzQUMsIDB4MDNBRCwgMHgwM0FFLCAw eDAzQUYsCisgICAgMHgwM0IwLCAweDAzQjEsIDB4MDNCMiwgMHgwM0IzLCAweDAzQjQsIDB4MDNC NSwgMHgwM0I2LCAweDAzQjcsCisgICAgMHgwM0I4LCAweDAzQjksIDB4MDNCQSwgMHgwM0JCLCAw eDAzQkMsIDB4MDNCRCwgMHgwM0JFLCAweDAzQkYsCisgICAgMHgwM0MwLCAweDAzQzEsIDB4MDND MiwgMHgwM0MzLCAweDAzQzQsIDB4MDNDNSwgMHgwM0M2LCAweDAzQzcsCisgICAgMHgwM0M4LCAw eDAzQzksIDB4MDNDQSwgMHgwM0NCLCAweDAzQ0MsIDB4MDNDRCwgMHgwM0NFLCAweGZmZmQKK307 CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV84ODU5XzggPSB7CisgICAgOTYsIDMyLCBYMlVfSVNP fFgyVV9TVEQsQUxfSEVCUkVXLCJJU08gTGF0aW4vSGVicmV3IiwiaGVicmV3LWlzbyIsMTIxLCJI IiwKKyAgICAweDAwQTAsIDB4ZmZmZCwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAw eDAwQTYsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4MDBBOSwgMHgwMEQ3LCAweDAwQUIsIDB4MDBB QywgMHgwMEFELCAweDAwQUUsIDB4MjAzRSwKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAw eDAwQjMsIDB4MDBCNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKKyAgICAweDAwQjgsIDB4MDBC OSwgMHgwMEY3LCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MjAxNywKKyAgICAweDA1RDAsIDB4 MDVEMSwgMHgwNUQyLCAweDA1RDMsIDB4MDVENCwgMHgwNUQ1LCAweDA1RDYsIDB4MDVENywKKyAg ICAweDA1RDgsIDB4MDVEOSwgMHgwNURBLCAweDA1REIsIDB4MDVEQywgMHgwNURELCAweDA1REUs IDB4MDVERiwKKyAgICAweDA1RTAsIDB4MDVFMSwgMHgwNUUyLCAweDA1RTMsIDB4MDVFNCwgMHgw NUU1LCAweDA1RTYsIDB4MDVFNywKKyAgICAweDA1RTgsIDB4MDVFOSwgMHgwNUVBLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZAorfTsKKworc3RydWN0IHhfdG9fdW5pY29k ZSB1Xzg4NTlfOSA9IHsKKyAgICA5NiwgMzIsIFgyVV9JU098WDJVX1NURCwgQUxfUk9NQU4sICJJ U08gTGF0aW4tNSIsICJsYXRpbjUiLCAxNDgsICJNIiwKKyAgICAweDAwQTAsIDB4MDBBMSwgMHgw MEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAweDAwQTYsIDB4MDBBNywKKyAgICAweDAwQTgs IDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBBRiwK KyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDBCNCwgMHgwMEI1LCAweDAw QjYsIDB4MDBCNywKKyAgICAweDAwQjgsIDB4MDBCOSwgMHgwMEJBLCAweDAwQkIsIDB4MDBCQywg MHgwMEJELCAweDAwQkUsIDB4MDBCRiwKKyAgICAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAw QzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDBDNywKKyAgICAweDAwQzgsIDB4MDBDOSwg MHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwKKyAgICAweDAx MUUsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4MDBENCwgMHgwMEQ1LCAweDAwRDYsIDB4MDBE NywKKyAgICAweDAwRDgsIDB4MDBEOSwgMHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMTMwLCAw eDAxNUUsIDB4MDBERiwKKyAgICAweDAwRTAsIDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4MDBF NCwgMHgwMEU1LCAweDAwRTYsIDB4MDBFNywKKyAgICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAw eDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUsIDB4MDBFRiwKKyAgICAweDAxMUYsIDB4MDBG MSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywKKyAgICAw eDAwRjgsIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIsIDB4MDBGQywgMHgwMTMxLCAweDAxNUYsIDB4 MDBGRgorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1Xzg4NTlfMTAgPSB7CisgICAgOTYsIDMy LCBYMlVfSVNPfFgyVV9TVEQsIEFMX1JPTUFOLCAiSVNPIExhdGluLTYiLCAibGF0aW42IiwgMTU3 LCAiViIsCisgICAgMHgwMGEwLCAweDAxMDQsIDB4MDExMiwgMHgwMTIyLCAweDAxMmEsIDB4MDEy OCwgMHgwMTM2LCAweDAxM2IsCisgICAgMHgwMTQzLCAweDAxNTYsIDB4MDE2MCwgMHgwMTY2LCAw eDAxN2QsIDB4MDBhZCwgMHgwMTM4LCAweDAxNGEsCisgICAgMHgwMTExLCAweDAxMDUsIDB4MDEx MywgMHgwMTIzLCAweDAxMmIsIDB4MDEyOSwgMHgwMTM3LCAweDAxM2MsCisgICAgMHgwMTQ0LCAw eDAxNTcsIDB4MDE2MSwgMHgwMTY3LCAweDAxN2UsIDB4MDBiZCwgMHgwMGJlLCAweDAxNGIsCisg ICAgMHgwMTAwLCAweDAwYzEsIDB4MDBjMiwgMHgwMGMzLCAweDAwYzQsIDB4MDBjNSwgMHgwMGM2 LCAweDAxMmUsCisgICAgMHgwMTBjLCAweDAwYzksIDB4MDExOCwgMHgwMGNiLCAweDAxMTYsIDB4 MDBjZCwgMHgwMGNlLCAweDAwY2YsCisgICAgMHgwMTEwLCAweDAxNDUsIDB4MDE0YywgMHgwMGRl LCAweDAwZDQsIDB4MDBkNSwgMHgwMGQ2LCAweDAxNjgsCisgICAgMHgwMGQ4LCAweDAxNzIsIDB4 MDBkYSwgMHgwMGRiLCAweDAwZGMsIDB4MDBkZCwgMHgwMGRlLCAweDAxNmEsCisgICAgMHgwMTAx LCAweDAwZTEsIDB4MDBlMiwgMHgwMGQzLCAweDAwZTQsIDB4MDBlNSwgMHgwMGU2LCAweDAxMmYs CisgICAgMHgwMTBkLCAweDAwZTksIDB4MDExOSwgMHgwMGViLCAweDAxMTcsIDB4MDBlZCwgMHgw MGVlLCAweDAwZWYsCisgICAgMHgwMGYwLCAweDAwZjEsIDB4MDE0ZCwgMHgwMGYzLCAweDAwZjQs IDB4MDBmNSwgMHgwMGY2LCAweDAxNjksCisgICAgMHgwMGY4LCAweDAxNzMsIDB4MDBmYSwgMHgw MGZiLCAweDAwZmMsIDB4MDBmZCwgMHgwMGZlLCAweDAxNmIKK307CisKKy8qIExhdGluLTkgKElT TyA4ODU5LTE1KSBpcyB0aGUgc2FtZSBhcyBMYXRpbi0xIHdpdGggdGhlIGZvbGxvd2luZyBjaGFu Z2VzOgorICogICBBNCBpcyBFdXJvIFN5bWJvbCAgICAgICAgICAgMjBBQworICogICBBNiBpcyBD YXBpdGFsIFMgQ2Fyb24gICAgICAgMDE2MAorICogICBBOCBpcyBTbWFsbCBzIGNhcm9uICAgICAg ICAgMDE2MQorICogICBCNCBpcyBDYXBpdGFsIFogY2Fyb24gICAgICAgMDE3RAorICogICBCOCBp cyBTbWFsbCB6IGNhcm9uICAgICAgICAgMDE3RQorICogICBCQyBpcyBDYXBpdGFsIE9FIGxpZ2F0 dXJlICAgMDE1MgorICogICBCRCBpcyBTbWFsbCBvZSBsaWdhdHVyZSAgICAgMDE1MworICogICBC RSBpcyBDYXBpdGFsIFkgZGlhZXJlc2lzICAgMDE3OAorICovCisKK3N0cnVjdCB4X3RvX3VuaWNv ZGUgdV84ODU5XzE1ID0geworICAgIDk2LCAzMiwgWDJVX0lTT3xYMlVfU1RELCBBTF9ST01BTiwg IklTTyBMYXRpbi05IiwgImxhdGluOSIsIDAsIE5VTEwsCisgICAgMHgwMEEwLCAweDAwQTEsIDB4 MDBBMiwgMHgwMEEzLCAweDIwQUMsIDB4MDBBNSwgMHgwMTYwLCAweDAwQTcsCisgICAgMHgwMTYx LCAweDAwQTksIDB4MDBBQSwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDAwQUYs CisgICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweDAxN0QsIDB4MDBCNSwgMHgw MEI2LCAweDAwQjcsCisgICAgMHgwMTdFLCAweDAwQjksIDB4MDBCQSwgMHgwMEJCLCAweDAxNTIs IDB4MDE1MywgMHgwMTc4LCAweDAwQkYsCisgICAgMHgwMEMwLCAweDAwQzEsIDB4MDBDMiwgMHgw MEMzLCAweDAwQzQsIDB4MDBDNSwgMHgwMEM2LCAweDAwQzcsCisgICAgMHgwMEM4LCAweDAwQzks IDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBDRCwgMHgwMENFLCAweDAwQ0YsCisgICAgMHgw MEQwLCAweDAwRDEsIDB4MDBEMiwgMHgwMEQzLCAweDAwRDQsIDB4MDBENSwgMHgwMEQ2LCAweDAw RDcsCisgICAgMHgwMEQ4LCAweDAwRDksIDB4MDBEQSwgMHgwMERCLCAweDAwREMsIDB4MDBERCwg MHgwMERFLCAweDAwREYsCisgICAgMHgwMEUwLCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAw RTQsIDB4MDBFNSwgMHgwMEU2LCAweDAwRTcsCisgICAgMHgwMEU4LCAweDAwRTksIDB4MDBFQSwg MHgwMEVCLCAweDAwRUMsIDB4MDBFRCwgMHgwMEVFLCAweDAwRUYsCisgICAgMHgwMEYwLCAweDAw RjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsIDB4MDBGNSwgMHgwMEY2LCAweDAwRjcsCisgICAg MHgwMEY4LCAweDAwRjksIDB4MDBGQSwgMHgwMEZCLCAweDAwRkMsIDB4MDBGRCwgMHgwMEZFLCAw eDAwRkYKK307CisKKy8qIER5YWRpYyBTeXN0ZW1zIER5YWxvZy9YIEFQTCwgY29ycmVzcG9uZHMg dG8gQVBMVEVSTUkuVFRGLiAqLworLyogVW5pY29kZSBtYXBwaW5ncyBhY2NvcmRpbmcgdG8gSVNP LUlFQyAvIEpUQyAxIC8gU0MgMjIgTiAzMDY3LCAxOTk5LTEyLTI4LiAqLworCitzdHJ1Y3QgeF90 b191bmljb2RlIHVfYXBsMiA9IHsgICAgICAgICAgLyogRHlhZGljIFN5c3RlbXMgQVBMICsgYm94 IGRyYXdpbmdzICovCisgICAgOTYsIDMyLCBYMlVfU1RELCBBTF9ST01BTiwgIkR5YWRpYyBTeXN0 ZW1zIEFQTCIsICJhcGwtZHlhZGljIiwgMCwgTlVMTCwKKyAgICAweDAwYTAsIDB4MDBkNywgMHgy NTAyLCAweDI1MjQsIDB4MDBhMiwgMHgyNTEwLCAweDI1MTQsIDB4MjUzNCwKKyAgICAweDI1MmMs IDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MjUxOCwgMHgyNTBjLCAweDIyMDYsIDB4MDBmNywK KyAgICAweDIyNjAsIDB4MjJjNCwgMHgyMzc1LCAweDIzNzQsIDB4MjM3YSwgMHgyMjBhLCAweDIy NjEsIDB4MjI2NSwKKyAgICAweDIyNjQsIDB4MjJhNSwgMHgyMmE0LCAweDIxOTAsIDB4MjIxOCwg MHgyMzVkLCAweDIzM2YsIDB4MjM0MCwKKyAgICAweDIzNGUsIDB4MjM1NSwgMHgyMzRiLCAweDIz NTIsIDB4MjM3MiwgMHgyMzcxLCAweDIzNjgsIDB4MjM1ZiwKKyAgICAweDI1YWYsIDB4MjM1ZSwg MHgyMzM5LCAweDIzNmIsIDB4MjM2YSwgMHgyMjYyLCAweDIzMGEsIDB4MjMwOCwKKyAgICAweDIz NDksIDB4MjIyOSwgMHgyMjJhLCAweDIzNmMsIDB4MDBhMywgMHgyMzNkLCAweDIyOTYsIDB4MjJh MiwKKyAgICAweDIyYTMsIDB4MjMzNywgMHgwMGFmLCAweDIzNzMsIDB4MDBhOCwgMHgyNWNiLCAw eDIxOTIsIDB4MjIyOCwKKyAgICAweDIyODIsIDB4MjI4MywgMHgyMzU5LCAweDAwNDEsIDB4MDA0 MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwKKyAgICAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAw eDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwKKyAgICAweDAwNGUsIDB4MDA0 ZiwgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwKKyAgICAw eDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgyMjA3LCAweDIxOTEsIDB4 MjE5MworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2FwbDMgPSB7ICAgICAgICAgIC8qIEFQ TC1QbHVzID0gQVBMLTIwMDAgKi8KKyAgICAxMjgsIDAsIFgyVV9DWEcsIEFMX1JPTUFOLCAiQVBM LTIwMDAiLCAiYXBsLTIwMDAiLCAwLCBOVUxMLAorICAgIDB4MjBhYywgMHgyMmEzLCAweDIyYTQs IDB4MjJhNSwgMHgyMTkwLCAweDIxOTIsIDB4MjE5MSwgMHgyMTkzLAorICAgIDB4MjI2NCwgMHgy MjY1LCAweDIzNzIsIDB4MjM3MSwgMHgyNWFmLCAweDIzNWUsIDB4MjMzOSwgMHgyMzU5LAorICAg IDB4MjM2YiwgMHgyMjA2LCAweDIyMDcsIDB4MjM0YiwgMHgyMzUyLCAweDIzNTUsIDB4MjM0ZSwg MHgyMzA4LAorICAgIDB4MjMwYSwgMHgyMzQwLCAweDIzM2YsIDB4MjI4MiwgMHgyMjgzLCAweDIy MjksIDB4MjIyYSwgMHgyMjI4LAorICAgIDB4MDBhMCwgMHgwMGExLCAweDAwYTIsIDB4MDBhMywg MHgyMmEyLCAweDAwYTUsIDB4MDBhNiwgMHgwMGE3LAorICAgIDB4MDBhOCwgMHgyMzVkLCAweDIy YzQsIDB4MDBhYiwgMHgyMjYwLCAweDIyNjEsIDB4MjM2YSwgMHgwMGFmLAorICAgIDB4MjIxOCwg MHgyNWNiLCAweDIzM2QsIDB4MjM0OSwgMHgyMjk2LCAweDIzNWYsIDB4MDBiNiwgMHgwMGI3LAor ICAgIDB4MjM3YSwgMHgyMjBhLCAweDIzNzcsIDB4MDBiYiwgMHgyMzczLCAweDIzNzQsIDB4MjM3 NSwgMHgwMGJmLAorICAgIDB4MDBjMCwgMHgwMGMxLCAweDAwYzIsIDB4MDBjMywgMHgwMGM0LCAw eDAwYzUsIDB4MDBjNiwgMHgwMGM3LAorICAgIDB4MDBjOCwgMHgwMGM5LCAweDAwY2EsIDB4MDBj YiwgMHgwMGNjLCAweDAwY2QsIDB4MDBjZSwgMHgwMGNmLAorICAgIDB4MjM2YywgMHgwMGQxLCAw eDAwZDIsIDB4MDBkMywgMHgwMGQ0LCAweDAwZDUsIDB4MDBkNiwgMHgwMGQ3LAorICAgIDB4MDBk OCwgMHgwMGQ5LCAweDAwZGEsIDB4MDBkYiwgMHgwMGRjLCAweDAwZGQsIDB4MjMzNywgMHgwMGRm LAorICAgIDB4MDBlMCwgMHgwMGUxLCAweDAwZTIsIDB4MDBlMywgMHgwMGU0LCAweDAwZTUsIDB4 MDBlNiwgMHgwMGU3LAorICAgIDB4MDBlOCwgMHgwMGU5LCAweDAwZWEsIDB4MDBlYiwgMHgwMGVj LCAweDAwZWQsIDB4MDBlZSwgMHgwMGVmLAorICAgIDB4MjM2NCwgMHgwMGYxLCAweDAwZjIsIDB4 MDBmMywgMHgwMGY0LCAweDAwZjUsIDB4MDBmNiwgMHgwMGY3LAorICAgIDB4MjIwNSwgMHgwMGY5 LCAweDAwZmEsIDB4MDBmYiwgMHgwMGZjLCAweDAwZmQsIDB4MjM2OCwgMHgwMGZmCit9OworCitz dHJ1Y3QgeF90b191bmljb2RlIHVfYXBsNCA9IHsgICAgICAgICAgLyogSUJNIEFQTDIgKi8KKyAg ICAxMjgsIDAsIFgyVV9DWEcsIEFMX1JPTUFOLCAiSUJNIEFQTDIiLCAiYXBsMi1pYm0iLCAwLCBO VUxMLAorICAgIDB4MDBjNywgMHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAweDAwZTAs IDB4MDBlNSwgMHgwMGU3LAorICAgIDB4MDBlYSwgMHgwMGViLCAweDAwZTgsIDB4MDBlZiwgMHgw MGVlLCAweDAwZWMsIDB4MDBjNCwgMHgwMGM1LAorICAgIDB4MjVhZiwgMHgyMzVlLCAweDIzMzks IDB4MDBmNCwgMHgwMGY2LCAweDAwZjIsIDB4MDBmYiwgMHgwMGY5LAorICAgIDB4MjJhNCwgMHgw MGQ2LCAweDAwZGMsIDB4MDBmOCwgMHgwMGEzLCAweDIyYTUsIDB4MjE5MCwgMHgyMzM2LAorICAg IDB4MDBlMSwgMHgwMGVkLCAweDAwZjMsIDB4MDBmYSwgMHgwMGYxLCAweDAwZDEsIDB4MDBhYSwg MHgwMGJhLAorICAgIDB4MDBiZiwgMHgyMzA4LCAweDAwYWMsIDB4MjE5MiwgMHgyMjJhLCAweDAw YTEsIDB4MjM1NSwgMHgyMzRlLAorICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwg MHgyNTI0LCAweDIzNWYsIDB4MjIwNiwgMHgyMjA3LAorICAgIDB4MjE5MiwgMHgyNTYzLCAweDI1 NTEsIDB4MjU1NywgMHgyNTVkLCAweDIxOTAsIDB4MjMwYSwgMHgyNTEwLAorICAgIDB4MjUxNCwg MHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MjE5MSwgMHgyMTkzLAor ICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2 YywgMHgyMjYxLAorICAgIDB4MjM3OCwgMHgyMzc3LCAweDIyMzUsIDB4MjMzNywgMHgyMzQyLCAw eDIzM2IsIDB4MjJhMiwgMHgyMmEzLAorICAgIDB4MjJjNCwgMHgyNTE4LCAweDI1MGMsIDB4MjU4 OCwgMHgyNTg0LCAweDAwYTYsIDB4MDBjYywgMHgyNTgwLAorICAgIDB4MjM3YSwgMHgwMGRmLCAw eDIyODIsIDB4MjI4MywgMHgyMzVkLCAweDIzNzIsIDB4MjM3NCwgMHgyMzcxLAorICAgIDB4MjMz ZCwgMHgyMjk2LCAweDI1Y2IsIDB4MjIyOCwgMHgyMzczLCAweDIzNDksIDB4MDBjNSwgMHgyMjI5 LAorICAgIDB4MjMzZiwgMHgyMzQwLCAweDIyNjUsIDB4MjI2NCwgMHgyMjYwLCAweDAwZDcsIDB4 MDBmNywgMHgyMzU5LAorICAgIDB4MjIxOCwgMHgyMzc1LCAweDIzNmIsIDB4MjM0YiwgMHgyMzUy LCAweDAwYWYsIDB4MDBhOCwgMHgwMGEwCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfYXBs NSA9IHsgICAgICAgICAgLyogQVBMLTI3NDEgKi8KKyAgICAxMjgsIDAsIFgyVV9DWEcsIEFMX1JP TUFOLCAiQVBMLTI3NDEiLCAiYXBsLTI3NDEiLCAwLCBOVUxMLAorICAgIDB4MjBhYywgMHgyMmEz LCAweDIyYTQsIDB4MjJhNSwgMHgyMTkwLCAweDIxOTIsIDB4MjE5MSwgMHgyMTkzLAorICAgIDB4 MjI2NCwgMHgyMjY1LCAweDIzNzIsIDB4MjM3MSwgMHgyNWFmLCAweDIzNWUsIDB4MjMzOSwgMHgy MzU5LAorICAgIDB4MjM2YiwgMHgyMjA2LCAweDIyMDcsIDB4MjM0YiwgMHgyMzUyLCAweDIzNTUs IDB4MjM0ZSwgMHgyMzA4LAorICAgIDB4MjMwYSwgMHgyMzQwLCAweDIzM2YsIDB4MjI4MiwgMHgy MjgzLCAweDIyMjksIDB4MjIyYSwgMHgyMjI4LAorICAgIDB4MDBhMCwgMHgwMGExLCAweDAwYTIs IDB4MDBhMywgMHgyMmEyLCAweDIzNzgsIDB4MjI2MSwgMHgyMzM2LAorICAgIDB4MDBhOCwgMHgy MzVkLCAweDIyYzQsIDB4MjM2YywgMHgyMjYwLCAweDIyNjEsIDB4MjM2YSwgMHgwMGFmLAorICAg IDB4MjIxOCwgMHgyNWNiLCAweDIzM2QsIDB4MjM0OSwgMHgyMjk2LCAweDIzNWYsIDB4MDBiNiwg MHgwMGI3LAorICAgIDB4MjM3YSwgMHgyMjBhLCAweDIzNzcsIDB4MjI2MiwgMHgyMzczLCAweDIz NzQsIDB4MjM3NSwgMHgwMGJmLAorICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywg MHgwMGM0LCAweDAwYzUsIDB4MDBjNiwgMHgwMGM3LAorICAgIDB4MDBjOCwgMHgwMGM5LCAweDIz NDIsIDB4MjMzYiwgMHgyNTEwLCAweDAwY2QsIDB4MjUwMCwgMHgyNTNjLAorICAgIDB4MjM2Yywg MHgwMGQxLCAweDIzNTAsIDB4MjM1NywgMHgyMzQ3LCAweDIzNDgsIDB4MDBkNiwgMHgwMGQ3LAor ICAgIDB4MDBkOCwgMHgyNTE4LCAweDI1MGMsIDB4MjUwMiwgMHgwMGRjLCAweDI1MjQsIDB4MjMz NywgMHgwMGRmLAorICAgIDB4MDBlMCwgMHgwMGUxLCAweDAwZTIsIDB4MDBlMywgMHgwMGU0LCAw eDAwZTUsIDB4MDBlNiwgMHgwMGU3LAorICAgIDB4MDBlOCwgMHgwMGU5LCAweDAwZWEsIDB4MDBl YiwgMHgwMGVjLCAweDAwZWQsIDB4MDBlZSwgMHgwMGVmLAorICAgIDB4MjM2NCwgMHgwMGYxLCAw eDAwZjIsIDB4MDBmMywgMHgwMGY0LCAweDAwZjUsIDB4MDBmNiwgMHgwMGY3LAorICAgIDB4MjIw NSwgMHgwMGY5LCAweDAwZmEsIDB4MDBmYiwgMHgwMGZjLCAweDIyMzUsIDB4MjM2OCwgMHgyMzY1 Cit9OworCisvKiA4LWJpdCBHT1NUIHN0YW5kYXJkIHNldHMgKi8KKworc3RydWN0IHhfdG9fdW5p Y29kZSB1X2tvaTggPSB7CisgICAgOTYsIDMyLCBYMlVfU1RELCBBTF9DWVJJTCwgIktPSS04Iiwg ImtvaTgiLCAwLCBOVUxMLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLAorICAgIDB4MDQ0RSwgMHgwNDMwLCAweDA0MzEsIDB4MDQ0NiwgMHgwNDM0LCAweDA0 MzUsIDB4MDQ0NCwgMHgwNDMzLAorICAgIDB4MDQ0NSwgMHgwNDM4LCAweDA0MzksIDB4MDQzQSwg MHgwNDNCLCAweDA0M0MsIDB4MDQzRCwgMHgwNDNFLAorICAgIDB4MDQzRiwgMHgwNDRGLCAweDA0 NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQzNiwgMHgwNDMyLAorICAgIDB4MDQ0Qywg MHgwNDRCLCAweDA0MzcsIDB4MDQ0OCwgMHgwNDRELCAweDA0NDksIDB4MDQ0NywgMHgwNDRBLAor ICAgIDB4MDQyRSwgMHgwNDEwLCAweDA0MTEsIDB4MDQyNiwgMHgwNDE0LCAweDA0MTUsIDB4MDQy NCwgMHgwNDEzLAorICAgIDB4MDQyNSwgMHgwNDE4LCAweDA0MTksIDB4MDQxQSwgMHgwNDFCLCAw eDA0MUMsIDB4MDQxRCwgMHgwNDFFLAorICAgIDB4MDQxRiwgMHgwNDJGLCAweDA0MjAsIDB4MDQy MSwgMHgwNDIyLCAweDA0MjMsIDB4MDQxNiwgMHgwNDEyLAorICAgIDB4MDQyQywgMHgwNDJCLCAw eDA0MTcsIDB4MDQyOCwgMHgwNDJELCAweDA0MjksIDB4MDQyNywgMHhmZmZkCit9OworCisvKiBP dGhlciBLT0ktOCBiYXNlZCBzZXRzICovCisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9rb2k4ciA9 IHsgICAgICAgICAvKiAoUnVzc2lhKSBUYWJsZSBmcm9tIFJGQzE0ODkgKi8KKyAgICAxMjgsIDAs IFgyVV9DUCwgQUxfQ1lSSUwsICJLT0k4LVIiLCAia29pOHIiLCAwLCBOVUxMLAorICAgIDB4MjUw MCwgMHgyNTAyLCAweDI1MEMsIDB4MjUxMCwgMHgyNTE0LCAweDI1MTgsIDB4MjUxQywgMHgyNTI0 LAorICAgIDB4MjUyQywgMHgyNTM0LCAweDI1M0MsIDB4MjU4MCwgMHgyNTg0LCAweDI1ODgsIDB4 MjU4QywgMHgyNTkwLAorICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjMyMCwgMHgyNUEw LCAweDIyMTksIDB4MjIxQSwgMHgyMjQ4LAorICAgIDB4MjI2NCwgMHgyMjY1LCAweDAwQTAsIDB4 MjMyMSwgMHgwMEIwLCAweDAwQjIsIDB4MDBCNywgMHgwMEY3LAorICAgIDB4MjU1MCwgMHgyNTUx LCAweDI1NTIsIDB4MDQ1MSwgMHgyNTUzLCAweDI1NTQsIDB4MjU1NSwgMHgyNTU2LAorICAgIDB4 MjU1NywgMHgyNTU4LCAweDI1NTksIDB4MjU1QSwgMHgyNTVCLCAweDI1NUMsIDB4MjU1RCwgMHgy NTVFLAorICAgIDB4MjU1RiwgMHgyNTYwLCAweDI1NjEsIDB4MDQwMSwgMHgyNTYyLCAweDI1NjMs IDB4MjU2NCwgMHgyNTY1LAorICAgIDB4MjU2NiwgMHgyNTY3LCAweDI1NjgsIDB4MjU2OSwgMHgy NTZBLCAweDI1NkIsIDB4MjU2QywgMHgwMEE5LAorICAgIDB4MDQ0RSwgMHgwNDMwLCAweDA0MzEs IDB4MDQ0NiwgMHgwNDM0LCAweDA0MzUsIDB4MDQ0NCwgMHgwNDMzLAorICAgIDB4MDQ0NSwgMHgw NDM4LCAweDA0MzksIDB4MDQzQSwgMHgwNDNCLCAweDA0M0MsIDB4MDQzRCwgMHgwNDNFLAorICAg IDB4MDQzRiwgMHgwNDRGLCAweDA0NDAsIDB4MDQ0MSwgMHgwNDQyLCAweDA0NDMsIDB4MDQzNiwg MHgwNDMyLAorICAgIDB4MDQ0QywgMHgwNDRCLCAweDA0MzcsIDB4MDQ0OCwgMHgwNDRELCAweDA0 NDksIDB4MDQ0NywgMHgwNDRBLAorICAgIDB4MDQyRSwgMHgwNDEwLCAweDA0MTEsIDB4MDQyNiwg MHgwNDE0LCAweDA0MTUsIDB4MDQyNCwgMHgwNDEzLAorICAgIDB4MDQyNSwgMHgwNDE4LCAweDA0 MTksIDB4MDQxQSwgMHgwNDFCLCAweDA0MUMsIDB4MDQxRCwgMHgwNDFFLAorICAgIDB4MDQxRiwg MHgwNDJGLCAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMsIDB4MDQxNiwgMHgwNDEyLAor ICAgIDB4MDQyQywgMHgwNDJCLCAweDA0MTcsIDB4MDQyOCwgMHgwNDJELCAweDA0MjksIDB4MDQy NywgMHgwNDJBCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfa29pOHUgPSB7ICAgICAgICAg LyogKFVrcmFpbmUpIEZyb20gUkZDMjMxOSAqLworICAgMTI4LCAwLCBYMlVfQ1AsIEFMX0NZUklM LCAiS09JOC1VIiwgImtvaTh1IiwgMCwgTlVMTCwKKyAgICAweDI1MDAsIDB4MjUwMiwgMHgyNTBD LCAweDI1MTAsIDB4MjUxNCwgMHgyNTE4LCAweDI1MUMsIDB4MjUyNCwKKyAgICAweDI1MkMsIDB4 MjUzNCwgMHgyNTNDLCAweDI1ODAsIDB4MjU4NCwgMHgyNTg4LCAweDI1OEMsIDB4MjU5MCwKKyAg ICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDIzMjAsIDB4MjVBMCwgMHgyMjE5LCAweDIyMUEs IDB4MjI0OCwKKyAgICAweDIyNjQsIDB4MjI2NSwgMHgwMEEwLCAweDIzMjEsIDB4MDBCMCwgMHgw MEIyLCAweDAwQjcsIDB4MDBGNywKKyAgICAweDI1NTAsIDB4MjU1MSwgMHgyNTUyLCAweDA0NTEs IDB4MDQ1NCwgMHgyNTU0LCAweDA0NTYsIDB4MDQ1NywKKyAgICAweDI1NTcsIDB4MjU1OCwgMHgy NTU5LCAweDI1NUEsIDB4MjU1QiwgMHgwNDkxLCAweDI1NUQsIDB4MjU1RSwKKyAgICAweDI1NUYs IDB4MjU2MCwgMHgyNTYxLCAweDA0MDEsIDB4MDQwNCwgMHgyNTYzLCAweDA0MDYsIDB4MDQwNywK KyAgICAweDI1NjYsIDB4MjU2NywgMHgyNTY4LCAweDI1NjksIDB4MjU2QSwgMHgwNDkwLCAweDI1 NkMsIDB4MDBBOSwKKyAgICAweDA0NEUsIDB4MDQzMCwgMHgwNDMxLCAweDA0NDYsIDB4MDQzNCwg MHgwNDM1LCAweDA0NDQsIDB4MDQzMywKKyAgICAweDA0NDUsIDB4MDQzOCwgMHgwNDM5LCAweDA0 M0EsIDB4MDQzQiwgMHgwNDNDLCAweDA0M0QsIDB4MDQzRSwKKyAgICAweDA0M0YsIDB4MDQ0Riwg MHgwNDQwLCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0MzYsIDB4MDQzMiwKKyAgICAweDA0 NEMsIDB4MDQ0QiwgMHgwNDM3LCAweDA0NDgsIDB4MDQ0RCwgMHgwNDQ5LCAweDA0NDcsIDB4MDQ0 QSwKKyAgICAweDA0MkUsIDB4MDQxMCwgMHgwNDExLCAweDA0MjYsIDB4MDQxNCwgMHgwNDE1LCAw eDA0MjQsIDB4MDQxMywKKyAgICAweDA0MjUsIDB4MDQxOCwgMHgwNDE5LCAweDA0MUEsIDB4MDQx QiwgMHgwNDFDLCAweDA0MUQsIDB4MDQxRSwKKyAgICAweDA0MUYsIDB4MDQyRiwgMHgwNDIwLCAw eDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAweDA0MTYsIDB4MDQxMiwKKyAgICAweDA0MkMsIDB4MDQy QiwgMHgwNDE3LCAweDA0MjgsIDB4MDQyRCwgMHgwNDI5LCAweDA0MjcsIDB4MDQyQQorfTsKKwor LyogUEMgQ29kZSBQYWdlcyAqLworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfY3A0MzcgPSB7Cisg ICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJQQyBDb2RlIFBhZ2UgNDM3IiwiY3A0MzciLCAw LCBOVUxMLAorICAgIDB4MDBjNywgMHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAweDAw ZTAsIDB4MDBlNSwgMHgwMGU3LAorICAgIDB4MDBlYSwgMHgwMGViLCAweDAwZTgsIDB4MDBlZiwg MHgwMGVlLCAweDAwZWMsIDB4MDBjNCwgMHgwMGM1LAorICAgIDB4MDBjOSwgMHgwMGU2LCAweDAw YzYsIDB4MDBmNCwgMHgwMGY2LCAweDAwZjIsIDB4MDBmYiwgMHgwMGY5LAorICAgIDB4MDBmZiwg MHgwMGQ2LCAweDAwZGMsIDB4MDBhMiwgMHgwMGEzLCAweDAwYTUsIDB4MjBhNywgMHgwMTkyLAor ICAgIDB4MDBlMSwgMHgwMGVkLCAweDAwZjMsIDB4MDBmYSwgMHgwMGYxLCAweDAwZDEsIDB4MDBh YSwgMHgwMGJhLAorICAgIDB4MDBiZiwgMHgyMzEwLCAweDAwYWMsIDB4MDBiZCwgMHgwMGJjLCAw eDAwYTEsIDB4MDBhYiwgMHgwMGJiLAorICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUw MiwgMHgyNTI0LCAweDI1NjEsIDB4MjU2MiwgMHgyNTU2LAorICAgIDB4MjU1NSwgMHgyNTYzLCAw eDI1NTEsIDB4MjU1NywgMHgyNTVkLCAweDI1NWMsIDB4MjU1YiwgMHgyNTEwLAorICAgIDB4MjUx NCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MjU1ZSwgMHgyNTVm LAorICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4 MjU2YywgMHgyNTY3LAorICAgIDB4MjU2OCwgMHgyNTY0LCAweDI1NjUsIDB4MjU1OSwgMHgyNTU4 LCAweDI1NTIsIDB4MjU1MywgMHgyNTZiLAorICAgIDB4MjU2YSwgMHgyNTE4LCAweDI1MGMsIDB4 MjU4OCwgMHgyNTg0LCAweDI1OGMsIDB4MjU5MCwgMHgyNTgwLAorICAgIDB4MDNiMSwgMHgwMGRm LCAweDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAweDAzYzMsIDB4MDBiNSwgMHgwM2M0LAorICAgIDB4 MDNhNiwgMHgwMzk4LCAweDAzYTksIDB4MDNiNCwgMHgyMjFlLCAweDAzYzYsIDB4MDNiNSwgMHgy MjI5LAorICAgIDB4MjI2MSwgMHgwMGIxLCAweDIyNjUsIDB4MjI2NCwgMHgyMzIwLCAweDIzMjEs IDB4MDBmNywgMHgyMjQ4LAorICAgIDB4MDBiMCwgMHgyMjE5LCAweDAwYjcsIDB4MjIxYSwgMHgy MDdmLCAweDAwYjIsIC8qIDB4MjVhZSAqLyAweDI1YTAsIDB4MDBhMAorfTsKKworc3RydWN0IHhf dG9fdW5pY29kZSB1X21hem92aWEgPSB7CisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJQ b2xpc2ggTWF6b3ZpYSBQQyBDb2RlIFBhZ2UiLCJtYXpvdmlhIiwgMCwgTlVMTCwKKyAgICAweDAw YzcsIDB4MDBmYywgMHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgwMGUwLCAweDAxMDUsIDB4MDBl NywgLyogODAgKi8KKyAgICAweDAwZWEsIDB4MDBlYiwgMHgwMGU4LCAweDAwZWYsIDB4MDBlZSwg MHgwMTA3LCAweDAwYzQsIDB4MDEwNCwgLyogODggKi8KKyAgICAweDAxMTgsIDB4MDExOSwgMHgw MTQyLCAweDAwZjQsIDB4MDBmNiwgMHgwMTA2LCAweDAwZmIsIDB4MDBmOSwgLyogOTAgKi8KKyAg ICAweDAxNWEsIDB4MDBkNiwgMHgwMGRjLCAweDAwYTIsIDB4MDE0MSwgMHgwMGE1LCAweDAxNWIs IDB4MDE5MiwgLyogOTggKi8KKyAgICAweDAxNzksIDB4MDE3YiwgMHgwMGYzLCAweDAwZDMsIDB4 MDE0NCwgMHgwMTQzLCAweDAxN2EsIDB4MDE3YywgLyogYTAgKi8KKyAgICAweDAwYmYsIDB4MjMx MCwgMHgwMGFjLCAweDAwYmQsIDB4MDBiYywgMHgwMGExLCAweDAwYWIsIDB4MDBiYiwgLyogYTgg Ki8KKyAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgyNTYxLCAw eDI1NjIsIDB4MjU1NiwgLyogYjAgKi8KKyAgICAweDI1NTUsIDB4MjU2MywgMHgyNTUxLCAweDI1 NTcsIDB4MjU1ZCwgMHgyNTVjLCAweDI1NWIsIDB4MjUxMCwgLyogYjggKi8KKyAgICAweDI1MTQs IDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNjLCAweDI1NWUsIDB4MjU1Ziwg LyogYzAgKi8KKyAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4MjU2MCwgMHgy NTUwLCAweDI1NmMsIDB4MjU2NywgLyogYzggKi8KKyAgICAweDI1NjgsIDB4MjU2NCwgMHgyNTY1 LCAweDI1NTksIDB4MjU1OCwgMHgyNTUyLCAweDI1NTMsIDB4MjU2YiwgLyogZDAgKi8KKyAgICAw eDI1NmEsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgyNThjLCAweDI1OTAsIDB4 MjU4MCwgLyogZDggKi8KKyAgICAweDAzYjEsIDB4MDBkZiwgMHgwMzkzLCAweDAzYzAsIDB4MDNh MywgMHgwM2MzLCAweDAwYjUsIDB4MDNjNCwgLyogZTAgKi8KKyAgICAweDAzYTYsIDB4MDM5OCwg MHgwM2E5LCAweDAzYjQsIDB4MjIxZSwgMHgwM2M2LCAweDAzYjUsIDB4MjIyOSwgLyogZTggKi8K KyAgICAweDIyNjEsIDB4MDBiMSwgMHgyMjY1LCAweDIyNjQsIDB4MjMyMCwgMHgyMzIxLCAweDAw ZjcsIDB4MjI0OCwgLyogZjAgKi8KKyAgICAweDAwYjAsIDB4MjIxOSwgMHgwMGI3LCAweDIyMWEs IDB4MjA3ZiwgMHgwMGIyLCAweDI1YTAsIDB4MDBhMCAgLyogZjggKi8KK307CisKK3N0cnVjdCB4 X3RvX3VuaWNvZGUgdV9jcDg1MCA9IHsKKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfUk9NQU4sIlBD IENvZGUgUGFnZSA4NTAiLCJjcDg1MCIsIDAsIE5VTEwsCisgICAgMHgwMGM3LCAweDAwZmMsIDB4 MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDBlMCwgMHgwMGU1LCAweDAwZTcsCisgICAgMHgwMGVh LCAweDAwZWIsIDB4MDBlOCwgMHgwMGVmLCAweDAwZWUsIDB4MDBlYywgMHgwMGM0LCAweDAwYzUs CisgICAgMHgwMGM5LCAweDAwZTYsIDB4MDBjNiwgMHgwMGY0LCAweDAwZjYsIDB4MDBmMiwgMHgw MGZiLCAweDAwZjksCisgICAgMHgwMGZmLCAweDAwZDYsIDB4MDBkYywgMHgwMGY4LCAweDAwYTMs IDB4MDBkOCwgMHgwMGQ3LCAweDAxOTIsCisgICAgMHgwMGUxLCAweDAwZWQsIDB4MDBmMywgMHgw MGZhLCAweDAwZjEsIDB4MDBkMSwgMHgwMGFhLCAweDAwYmEsCisgICAgMHgwMGJmLCAweDAwYWUs IDB4MDBhYywgMHgwMGJkLCAweDAwYmMsIDB4MDBhMSwgMHgwMGFiLCAweDAwYmIsCisgICAgMHgy NTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MDBjMSwgMHgwMGMyLCAweDAw YzAsCisgICAgMHgwMGE5LCAweDI1NjMsIDB4MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MDBhMiwg MHgwMGE1LCAweDI1MTAsCisgICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1 MDAsIDB4MjUzYywgMHgwMGUzLCAweDAwYzMsCisgICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwg MHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDAwYTQsCisgICAgMHgwMGYwLCAweDAw ZDAsIDB4MDBjYSwgMHgwMGNiLCAweDAwYzgsIDB4MDEzMSwgMHgwMGNkLCAweDAwY2UsCisgICAg MHgwMGNmLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4MDBhNiwgMHgwMGNjLCAw eDI1ODAsCisgICAgMHgwMGQzLCAweDAwZGYsIDB4MDBkNCwgMHgwMGQyLCAweDAwZjUsIDB4MDBk NSwgMHgwMGI1LCAweDAwZmUsCisgICAgMHgwMGRlLCAweDAwZGEsIDB4MDBkYiwgMHgwMGQ5LCAw eDAwZmQsIDB4MDBkZCwgMHgwMGFmLCAweDAwYjQsCisgICAgMHgwMGFkLCAweDAwYjEsIDB4MjAx NywgMHgwMGJlLCAweDAwYjYsIDB4MDBhNywgMHgwMGY3LCAweDAwYjgsCisgICAgMHgwMGIwLCAw eDAwYTgsIDB4MDBiNywgMHgwMGI5LCAweDAwYjMsIDB4MDBiMiwgMHgyNWEwLCAweDAwYTAKK307 CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg1MiA9IHsKKyAgICAxMjgsIDAsIFgyVV9DUCwg QUxfUk9NQU4sIlBDIENvZGUgUGFnZSA4NTIiLCJjcDg1MiIsIDAsIE5VTEwsCisgICAgMHgwMGM3 LCAweDAwZmMsIDB4MDBlOSwgMHgwMGUyLCAweDAwZTQsIDB4MDE2ZiwgMHgwMTA3LCAweDAwZTcs CisgICAgMHgwMTQyLCAweDAwZWIsIDB4MDE1MCwgMHgwMTUxLCAweDAwZWUsIDB4MDE3OSwgMHgw MGM0LCAweDAxMDYsCisgICAgMHgwMGM5LCAweDAxMzksIDB4MDEzYSwgMHgwMGY0LCAweDAwZjYs IDB4MDEzZCwgMHgwMTNlLCAweDAxNWEsCisgICAgMHgwMTViLCAweDAwZDYsIDB4MDBkYywgMHgw MTY0LCAweDAxNjUsIDB4MDE0MSwgMHgwMGQ3LCAweDAxMGQsCisgICAgMHgwMGUxLCAweDAwZWQs IDB4MDBmMywgMHgwMGZhLCAweDAxMDQsIDB4MDEwNSwgMHgwMTdkLCAweDAxN2UsCisgICAgMHgw MTE4LCAweDAxMTksIDB4MDBhYywgMHgwMTdhLCAweDAxMGMsIDB4MDE1ZiwgMHgwMGFiLCAweDAw YmIsCisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MDBjMSwg MHgwMGMyLCAweDAxMWEsCisgICAgMHgwMTVlLCAweDI1NjMsIDB4MjU1MSwgMHgyNTU3LCAweDI1 NWQsIDB4MDE3YiwgMHgwMTdjLCAweDI1MTAsCisgICAgMHgyNTE0LCAweDI1MzQsIDB4MjUyYywg MHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgwMTAyLCAweDAxMDMsCisgICAgMHgyNTVhLCAweDI1 NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDAwYTQsCisgICAg MHgwMTExLCAweDAxMTAsIDB4MDEwZSwgMHgwMGNiLCAweDAxMGYsIDB4MDE0NywgMHgwMGNkLCAw eDAwY2UsCisgICAgMHgwMTFiLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4MDE2 MiwgMHgwMTZlLCAweDI1ODAsCisgICAgMHgwMGQzLCAweDAwZGYsIDB4MDBkNCwgMHgwMTQzLCAw eDAxNDQsIDB4MDE0OCwgMHgwMTYwLCAweDAxNjEsCisgICAgMHgwMTU0LCAweDAwZGEsIDB4MDE1 NSwgMHgwMTcwLCAweDAwZmQsIDB4MDBkZCwgMHgwMTYzLCAweDAwYjQsCisgICAgMHgwMGFkLCAw eDAyZGQsIDB4MDJkYiwgMHgwMmM3LCAweDAyZDgsIDB4MDBhNywgMHgwMGY3LCAweDAwYjgsCisg ICAgMHgwMGIwLCAweDAwYTgsIDB4MDJkOSwgMHgwMTcxLCAweDAxNTgsIDB4MDE1OSwgMHgyNWEw LCAweDAwYTAKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg1NSA9IHsgICAgICAgICAv KiBDUDg1NSBDeXJpbGxpYyB0byBVbmljb2RlICovCisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX0NZ UklMLCJQQyBDb2RlIFBhZ2UgODU1IiwiY3A4NTUiLCAwLCBOVUxMLAorICAgIDB4MDQ1MiwgMHgw NDAyLCAweDA0NTMsIDB4MDQwMywgMHgwNDUxLCAweDA0MDEsIDB4MDQ1NCwgMHgwNDA0LAorICAg IDB4MDQ1NSwgMHgwNDA1LCAweDA0NTYsIDB4MDQwNiwgMHgwNDU3LCAweDA0MDcsIDB4MDQ1OCwg MHgwNDA4LAorICAgIDB4MDQ1OSwgMHgwNDA5LCAweDA0NWEsIDB4MDQwYSwgMHgwNDViLCAweDA0 MGIsIDB4MDQ1YywgMHgwNDBjLAorICAgIDB4MDQ1ZSwgMHgwNDBlLCAweDA0NWYsIDB4MDQwZiwg MHgwNDRlLCAweDA0MmUsIDB4MDQ0YSwgMHgwNDJhLAorICAgIDB4MDQzMCwgMHgwNDEwLCAweDA0 MzEsIDB4MDQxMSwgMHgwNDQ2LCAweDA0MjYsIDB4MDQzNCwgMHgwNDE0LAorICAgIDB4MDQzNSwg MHgwNDE1LCAweDA0NDQsIDB4MDQyNCwgMHgwNDMzLCAweDA0MTMsIDB4MDBhYiwgMHgwMGJiLAor ICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDA0NDUsIDB4MDQy NSwgMHgwNDM4LAorICAgIDB4MDQxOCwgMHgyNTYzLCAweDI1NTEsIDB4MjU1NywgMHgyNTVkLCAw eDA0MzksIDB4MDQxOSwgMHgyNTEwLAorICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUx YywgMHgyNTAwLCAweDI1M2MsIDB4MDQzYSwgMHgwNDFhLAorICAgIDB4MjU1YSwgMHgyNTU0LCAw eDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgwMGE0LAorICAgIDB4MDQz YiwgMHgwNDFiLCAweDA0M2MsIDB4MDQxYywgMHgwNDNkLCAweDA0MWQsIDB4MDQzZSwgMHgwNDFl LAorICAgIDB4MDQzZiwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDA0MWYsIDB4 MDQ0ZiwgMHgyNTgwLAorICAgIDB4MDQyZiwgMHgwNDQwLCAweDA0MjAsIDB4MDQ0MSwgMHgwNDIx LCAweDA0NDIsIDB4MDQyMiwgMHgwNDQzLAorICAgIDB4MDQyMywgMHgwNDM2LCAweDA0MTYsIDB4 MDQzMiwgMHgwNDEyLCAweDA0NGMsIDB4MDQyYywgMHgyMTE2LAorICAgIDB4MDAyZCwgMHgwNDRi LCAweDA0MmIsIDB4MDQzNywgMHgwNDE3LCAweDA0NDgsIDB4MDQyOCwgMHgwNDRkLAorICAgIDB4 MDQyZCwgMHgwNDQ5LCAweDA0MjksIDB4MDQ0NywgMHgwNDI3LCAweDAwYTcsIDB4MjVhMCwgMHgw MDIwCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfY3A4NTYgPSB7ICAgICAgICAgLyogQ1A4 NTYgKEJ1bGdhcmlhKSB0byBVbmljb2RlICovCisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX0NZUklM LCJQQyBDb2RlIFBhZ2UgODU2IiwiY3A4NTYiLCAwLCBOVUxMLAorICAgIDB4MDQxMCwgMHgwNDEx LCAweDA0MTIsIDB4MDQxMywgMHgwNDE0LCAweDA0MTUsIDB4MDQxNiwgMHgwNDE3LAorICAgIDB4 MDQxOCwgMHgwNDE5LCAweDA0MWEsIDB4MDQxYiwgMHgwNDFjLCAweDA0MWQsIDB4MDQxZSwgMHgw NDFmLAorICAgIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4MDQyMywgMHgwNDI0LCAweDA0MjUs IDB4MDQyNiwgMHgwNDI3LAorICAgIDB4MDQyOCwgMHgwNDI5LCAweDA0MmEsIDB4MDQyYiwgMHgw NDJjLCAweDA0MmQsIDB4MDQyZSwgMHgwNDJmLAorICAgIDB4MDQzMCwgMHgwNDMxLCAweDA0MzIs IDB4MDQzMywgMHgwNDM0LCAweDA0MzUsIDB4MDQzNiwgMHgwNDM3LAorICAgIDB4MDQzOCwgMHgw NDM5LCAweDA0M2EsIDB4MDQzYiwgMHgwNDNjLCAweDA0M2QsIDB4MDQzZSwgMHgwNDNmLAorICAg IDB4MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDQ0LCAweDA0NDUsIDB4MDQ0Niwg MHgwNDQ3LAorICAgIDB4MDQ0OCwgMHgwNDQ5LCAweDA0NGEsIDB4MDQ0YiwgMHgwNDRjLCAweDA0 NGQsIDB4MDQ0ZSwgMHgwNDRmLAorICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywg MHgyNTAwLCAweDI1M2MsIDB4MjU2MywgMHgyNTUxLAorICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1 NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgyNTEwLAorICAgIDB4MjU5MSwg MHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgyNTI0LCAweDIxMTYsIDB4MDBhNywgMHgyNTU3LAor ICAgIDB4MjU1ZCwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgyNTg0LCAweDI1OGMsIDB4MjU5 MCwgMHgyNTgwLAorICAgIDB4MDNiMSwgMHgwMGRmLCAweDAzOTMsIDB4MDNjMCwgMHgwM2EzLCAw eDAzYzMsIDB4MDBiNSwgMHgwM2M0LAorICAgIDB4MDNhNiwgMHgwMzk4LCAweDAzYTksIDB4MDNi NCwgMHgyMjFlLCAweDAzYzYsIDB4MDNiNSwgMHgyMjI5LAorICAgIDB4MjI2MSwgMHgwMGIxLCAw eDIyNjUsIDB4MjI2NCwgMHgyMzIwLCAweDIzMjEsIDB4MDBmNywgMHgyMjQ4LAorICAgIDB4MDBi MCwgMHgyMjE5LCAweDAwYjcsIDB4MjIxYSwgMHgyMDdmLCAweDAwYjIsIDB4MjVhMCwgMHgwMGEw Cit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfY3A4NTcgPSB7CisgICAgMTI4LCAwLCBYMlVf Q1AsIEFMX1JPTUFOLCJQQyBDb2RlIFBhZ2UgODU3IiwiY3A4NTciLCAwLCBOVUxMLAorICAgIDB4 MDBjNywgMHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAweDAwZTAsIDB4MDBlNSwgMHgw MGU3LCAvKiAweDgwICovCisgICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgwMGVmLCAweDAw ZWUsIDB4MDEzMSwgMHgwMGM0LCAweDAwYzUsIC8qIDB4ODggKi8KKyAgICAweDAwYzksIDB4MDBl NiwgMHgwMGM2LCAweDAwZjQsIDB4MDBmNiwgMHgwMGYyLCAweDAwZmIsIDB4MDBmOSwgLyogMHg5 MCAqLworICAgIDB4MDEzMCwgMHgwMGQ2LCAweDAwZGMsIDB4MDBmOCwgMHgwMGEzLCAweDAwZDgs IDB4MDE1ZSwgMHgwMTVmLCAvKiAweDk4ICovCisgICAgMHgwMGUxLCAweDAwZWQsIDB4MDBmMywg MHgwMGZhLCAweDAwZjEsIDB4MDBkMSwgMHgwMTFlLCAweDAxMWYsIC8qIDB4YTAgKi8KKyAgICAw eDAwYmYsIDB4MDBhZSwgMHgwMGFjLCAweDAwYmQsIDB4MDBiYywgMHgwMGExLCAweDAwYWIsIDB4 MDBiYiwgLyogMHhhOCAqLworICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4MjUwMiwgMHgy NTI0LCAweDAwYzEsIDB4MDBjMiwgMHgwMGMwLCAvKiAweGIwICovCisgICAgMHgwMGE5LCAweDI1 NjMsIDB4MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MDBhMiwgMHgwMGE1LCAweDI1MTAsIC8qIDB4 YjggKi8KKyAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNj LCAweDAwZTMsIDB4MDBjMywgLyogMHhjMCAqLworICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1Njks IDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsIDB4MjU2YywgMHgwMGE0LCAvKiAweGM4ICovCisgICAg MHgwMGJhLCAweDAwYWEsIDB4MDBjYSwgMHgwMGNiLCAweDAwYzgsIDB4MjBhYywgMHgwMGNkLCAw eDAwY2UsIC8qIDB4ZDAgKi8KKyAgICAweDAwY2YsIDB4MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4 MjU4NCwgMHgwMGE2LCAweDAwY2MsIDB4MjU4MCwgLyogMHhkOCAqLworICAgIDB4MDBkMywgMHgw MGRmLCAweDAwZDQsIDB4MDBkMiwgMHgwMGY1LCAweDAwZDUsIDB4MDBiNSwgMHhmZmZkLCAvKiAw eGUwICovCisgICAgMHgwMGQ3LCAweDAwZGEsIDB4MDBkYiwgMHgwMGQ5LCAweDAwZWMsIDB4MDBm ZiwgMHgwMGFmLCAweDAwYjQsIC8qIDB4ZTggKi8KKyAgICAweDAwYWQsIDB4MDBiMSwgMHhmZmZk LCAweDAwYmUsIDB4MDBiNiwgMHgwMGE3LCAweDAwZjcsIDB4MDBiOCwgLyogMHhmMCAqLworICAg IDB4MDBiMCwgMHgwMGE4LCAweDAwYjcsIDB4MDBiOSwgMHgwMGIzLCAweDAwYjIsIDB4MjVhMCwg MHgwMGEwICAvKiAweGY4ICovCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfY3A4NTggPSB7 CisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJQQyBDb2RlIFBhZ2UgODU4IiwiY3A4NTgi LCAwLCBOVUxMLAorICAgIDB4MDBjNywgMHgwMGZjLCAweDAwZTksIDB4MDBlMiwgMHgwMGU0LCAw eDAwZTAsIDB4MDBlNSwgMHgwMGU3LAorICAgIDB4MDBlYSwgMHgwMGViLCAweDAwZTgsIDB4MDBl ZiwgMHgwMGVlLCAweDAwZWMsIDB4MDBjNCwgMHgwMGM1LAorICAgIDB4MDBjOSwgMHgwMGU2LCAw eDAwYzYsIDB4MDBmNCwgMHgwMGY2LCAweDAwZjIsIDB4MDBmYiwgMHgwMGY5LAorICAgIDB4MDBm ZiwgMHgwMGQ2LCAweDAwZGMsIDB4MDBmOCwgMHgwMGEzLCAweDAwZDgsIDB4MDBkNywgMHgwMTky LAorICAgIDB4MDBlMSwgMHgwMGVkLCAweDAwZjMsIDB4MDBmYSwgMHgwMGYxLCAweDAwZDEsIDB4 MDBhYSwgMHgwMGJhLAorICAgIDB4MDBiZiwgMHgwMGFlLCAweDAwYWMsIDB4MDBiZCwgMHgwMGJj LCAweDAwYTEsIDB4MDBhYiwgMHgwMGJiLAorICAgIDB4MjU5MSwgMHgyNTkyLCAweDI1OTMsIDB4 MjUwMiwgMHgyNTI0LCAweDAwYzEsIDB4MDBjMiwgMHgwMGMwLAorICAgIDB4MDBhOSwgMHgyNTYz LCAweDI1NTEsIDB4MjU1NywgMHgyNTVkLCAweDAwYTIsIDB4MDBhNSwgMHgyNTEwLAorICAgIDB4 MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1M2MsIDB4MDBlMywgMHgw MGMzLAorICAgIDB4MjU1YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAs IDB4MjU2YywgMHgwMGE0LAorICAgIDB4MDBmMCwgMHgwMGQwLCAweDAwY2EsIDB4MDBjYiwgMHgw MGM4LCAweDIwYWMsIDB4MDBjZCwgMHgwMGNlLAorICAgIDB4MDBjZiwgMHgyNTE4LCAweDI1MGMs IDB4MjU4OCwgMHgyNTg0LCAweDAwYTYsIDB4MDBjYywgMHgyNTgwLAorICAgIDB4MDBkMywgMHgw MGRmLCAweDAwZDQsIDB4MDBkMiwgMHgwMGY1LCAweDAwZDUsIDB4MDBiNSwgMHgwMGZlLAorICAg IDB4MDBkZSwgMHgwMGRhLCAweDAwZGIsIDB4MDBkOSwgMHgwMGZkLCAweDAwZGQsIDB4MDBhZiwg MHgwMGI0LAorICAgIDB4MDBhZCwgMHgwMGIxLCAweDIwMTcsIDB4MDBiZSwgMHgwMGI2LCAweDAw YTcsIDB4MDBmNywgMHgwMGI4LAorICAgIDB4MDBiMCwgMHgwMGE4LCAweDAwYjcsIDB4MDBiOSwg MHgwMGIzLCAweDAwYjIsIDB4MjVhMCwgMHgwMGEwCit9OworCitzdHJ1Y3QgeF90b191bmljb2Rl IHVfY3A4NjIgPSB7CisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX0hFQlJFVywiUEMgQ29kZSBQYWdl IDg2MiIsImNwODYyIiwgMCwgTlVMTCwKKyAgICAweDA1ZDAsIDB4MDVkMSwgMHgwNWQyLCAweDA1 ZDMsIDB4MDVkNCwgMHgwNWQ1LCAweDA1ZDYsIDB4MDVkNywKKyAgICAweDA1ZDgsIDB4MDVkOSwg MHgwNWRhLCAweDA1ZGIsIDB4MDVkYywgMHgwNWRkLCAweDA1ZGUsIDB4MDVkZiwKKyAgICAweDA1 ZTAsIDB4MDVlMSwgMHgwNWUyLCAweDA1ZTMsIDB4MDVlNCwgMHgwNWU1LCAweDA1ZTYsIDB4MDVl NywKKyAgICAweDA1ZTgsIDB4MDVlOSwgMHgwNWVhLCAweDAwYTIsIDB4MDBhMywgMHgwMGE1LCAw eDIwYTcsIDB4MDE5MiwKKyAgICAweDAwZTEsIDB4MDBlZCwgMHgwMGYzLCAweDAwZmEsIDB4MDBm MSwgMHgwMGQxLCAweDAwYWEsIDB4MDBiYSwKKyAgICAweDAwYmYsIDB4MjMxMCwgMHgwMGFjLCAw eDAwYmQsIDB4MDBiYywgMHgwMGExLCAweDAwYWIsIDB4MDBiYiwKKyAgICAweDI1OTEsIDB4MjU5 MiwgMHgyNTkzLCAweDI1MDIsIDB4MjUyNCwgMHgyNTYxLCAweDI1NjIsIDB4MjU1NiwKKyAgICAw eDI1NTUsIDB4MjU2MywgMHgyNTUxLCAweDI1NTcsIDB4MjU1ZCwgMHgyNTVjLCAweDI1NWIsIDB4 MjUxMCwKKyAgICAweDI1MTQsIDB4MjUzNCwgMHgyNTJjLCAweDI1MWMsIDB4MjUwMCwgMHgyNTNj LCAweDI1NWUsIDB4MjU1ZiwKKyAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5LCAweDI1NjYsIDB4 MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MjU2NywKKyAgICAweDI1NjgsIDB4MjU2NCwgMHgyNTY1 LCAweDI1NTksIDB4MjU1OCwgMHgyNTUyLCAweDI1NTMsIDB4MjU2YiwKKyAgICAweDI1NmEsIDB4 MjUxOCwgMHgyNTBjLCAweDI1ODgsIDB4MjU4NCwgMHgyNThjLCAweDI1OTAsIDB4MjU4MCwKKyAg ICAweDAzYjEsIDB4MDBkZiwgMHgwMzkzLCAweDAzYzAsIDB4MDNhMywgMHgwM2MzLCAweDAwYjUs IDB4MDNjNCwKKyAgICAweDAzYTYsIDB4MDM5OCwgMHgwM2E5LCAweDAzYjQsIDB4MjIxZSwgMHgw M2M2LCAweDAzYjUsIDB4MjIyOSwKKyAgICAweDIyNjEsIDB4MDBiMSwgMHgyMjY1LCAweDIyNjQs IDB4MjMyMCwgMHgyMzIxLCAweDAwZjcsIDB4MjI0OCwKKyAgICAweDAwYjAsIDB4MjIxOSwgMHgw MGI3LCAweDIyMWEsIDB4MjA3ZiwgMHgwMGIyLCAweDI1YTAsIDB4MDBhMAorfTsKKworc3RydWN0 IHhfdG9fdW5pY29kZSB1X2NwODY0ID0geworICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9BUkFCSUMs IlBDIENvZGUgUGFnZSA4NjQiLCJjcDg2NCIsIDAsIE5VTEwsCisgICAgMHgwMGIwLCAweDAwYjcs IDB4MjIxOSwgMHgyMjFhLCAweDI1OTIsIDB4MjUwMCwgMHgyNTAyLCAweDI1M2MsCisgICAgMHgy NTI0LCAweDI1MmMsIDB4MjUxYywgMHgyNTM0LCAweDI1MTAsIDB4MjUwYywgMHgyNTE0LCAweDI1 MTgsCisgICAgMHgwM2IyLCAweDIyMWUsIDB4MDNjNiwgMHgwMGIxLCAweDAwYmQsIDB4MDBiYywg MHgyMjQ4LCAweDAwYWIsCisgICAgMHgwMGJiLCAweGZlZjcsIDB4ZmVmOCwgMHhmZmZkLCAweGZm ZmQsIDB4ZmVmYiwgMHhmZWZjLCAweGZmZmQsCisgICAgMHgwMGEwLCAweDAwYWQsIDB4ZmU4Miwg MHgwMGEzLCAweDAwYTQsIDB4ZmU4NCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZThlLCAweGZl OGYsIDB4ZmU5NSwgMHhmZTk5LCAweDA2MGMsIDB4ZmU5ZCwgMHhmZWExLCAweGZlYTUsCisgICAg MHgwNjYwLCAweDA2NjEsIDB4MDY2MiwgMHgwNjYzLCAweDA2NjQsIDB4MDY2NSwgMHgwNjY2LCAw eDA2NjcsCisgICAgMHgwNjY4LCAweDA2NjksIDB4ZmVkMSwgMHgwNjFiLCAweGZlYjEsIDB4ZmVi NSwgMHhmZWI5LCAweDA2MWYsCisgICAgMHgwMGEyLCAweGZlODAsIDB4ZmU4MSwgMHhmZTgzLCAw eGZlODUsIDB4ZmVjYSwgMHhmZThiLCAweGZlOGQsCisgICAgMHhmZTkxLCAweGZlOTMsIDB4ZmU5 NywgMHhmZTliLCAweGZlOWYsIDB4ZmVhMywgMHhmZWE3LCAweGZlYTksCisgICAgMHhmZWFiLCAw eGZlYWQsIDB4ZmVhZiwgMHhmZWIzLCAweGZlYjcsIDB4ZmViYiwgMHhmZWJmLCAweGZlYzEsCisg ICAgMHhmZWM1LCAweGZlY2IsIDB4ZmVjZiwgMHgwMGE2LCAweDAwYWMsIDB4MDBmNywgMHgwMGQ3 LCAweGZlYzksCisgICAgMHgwNjQwLCAweGZlZDMsIDB4ZmVkNywgMHhmZWRiLCAweGZlZGYsIDB4 ZmVlMywgMHhmZWU3LCAweGZlZWIsCisgICAgMHhmZWVkLCAweGZlZWYsIDB4ZmVmMywgMHhmZWJk LCAweGZlY2MsIDB4ZmVjZSwgMHhmZWNkLCAweGZlZTEsCisgICAgMHhmZTdkLCAweDA2NTEsIDB4 ZmVlNSwgMHhmZWU5LCAweGZlZWMsIDB4ZmVmMCwgMHhmZWYyLCAweGZlZDAsCisgICAgMHhmZWQ1 LCAweGZlZjUsIDB4ZmVmNiwgMHhmZWRkLCAweGZlZDksIDB4ZmVmMSwgMHgyNWEwLCAweGZmZmQK K307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg2NiA9IHsKKyAgICAxMjgsIDAsIFgyVV9D UCwgQUxfQ1lSSUwsIlBDIENvZGUgUGFnZSA4NjYiLCJjcDg2NiIsIDAsIE5VTEwsCisgICAgMHgw NDEwLCAweDA0MTEsIDB4MDQxMiwgMHgwNDEzLCAweDA0MTQsIDB4MDQxNSwgMHgwNDE2LCAweDA0 MTcsCisgICAgMHgwNDE4LCAweDA0MTksIDB4MDQxYSwgMHgwNDFiLCAweDA0MWMsIDB4MDQxZCwg MHgwNDFlLCAweDA0MWYsCisgICAgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAweDA0 MjQsIDB4MDQyNSwgMHgwNDI2LCAweDA0MjcsCisgICAgMHgwNDI4LCAweDA0MjksIDB4MDQyYSwg MHgwNDJiLCAweDA0MmMsIDB4MDQyZCwgMHgwNDJlLCAweDA0MmYsCisgICAgMHgwNDMwLCAweDA0 MzEsIDB4MDQzMiwgMHgwNDMzLCAweDA0MzQsIDB4MDQzNSwgMHgwNDM2LCAweDA0MzcsCisgICAg MHgwNDM4LCAweDA0MzksIDB4MDQzYSwgMHgwNDNiLCAweDA0M2MsIDB4MDQzZCwgMHgwNDNlLCAw eDA0M2YsCisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAweDI1MjQsIDB4MjU2 MSwgMHgyNTYyLCAweDI1NTYsCisgICAgMHgyNTU1LCAweDI1NjMsIDB4MjU1MSwgMHgyNTU3LCAw eDI1NWQsIDB4MjU1YywgMHgyNTViLCAweDI1MTAsCisgICAgMHgyNTE0LCAweDI1MzQsIDB4MjUy YywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgyNTVlLCAweDI1NWYsCisgICAgMHgyNTVhLCAw eDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZjLCAweDI1NjcsCisg ICAgMHgyNTY4LCAweDI1NjQsIDB4MjU2NSwgMHgyNTU5LCAweDI1NTgsIDB4MjU1MiwgMHgyNTUz LCAweDI1NmIsCisgICAgMHgyNTZhLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4LCAweDI1ODQsIDB4 MjU4YywgMHgyNTkwLCAweDI1ODAsCisgICAgMHgwNDQwLCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQz LCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2LCAweDA0NDcsCisgICAgMHgwNDQ4LCAweDA0NDksIDB4 MDQ0YSwgMHgwNDRiLCAweDA0NGMsIDB4MDQ0ZCwgMHgwNDRlLCAweDA0NGYsCisgICAgMHgwNDAx LCAweDA0NTEsIDB4MDQwNCwgMHgwNDU0LCAweDA0MDcsIDB4MDQ1NywgMHgwNDBlLCAweDA0NWUs CisgICAgMHgwMGIwLCAweDIyMTksIDB4MDBiNywgMHgyMjFhLCAweDIxMTYsIDB4MDBhNCwgMHgy NWEwLCAweDAwYTAKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDg2OSA9IHsKKyAgICAx MjgsIDAsIFgyVV9DUCwgQUxfR1JFRUssIlBDIENvZGUgUGFnZSA4NjkiLCJjcDg2OSIsIDAsIE5V TEwsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHgwMzg2LCAweGZmZmQsCisgICAgMHgwMGI3LCAweDAwYWMsIDB4MDBhNiwgMHgyMDE4LCAweDIw MTksIDB4MDM4OCwgMHgyMDE1LCAweDAzODksCisgICAgMHgwMzhhLCAweDAzYWEsIDB4MDM4Yywg MHhmZmZkLCAweGZmZmQsIDB4MDM4ZSwgMHgwM2FiLCAweDAwYTksCisgICAgMHgwMzhmLCAweDAw YjIsIDB4MDBiMywgMHgwM2FjLCAweDAwYTMsIDB4MDNhZCwgMHgwM2FlLCAweDAzYWYsCisgICAg MHgwM2NhLCAweDAzOTAsIDB4MDNjYywgMHgwM2NkLCAweDAzOTEsIDB4MDM5MiwgMHgwMzkzLCAw eDAzOTQsCisgICAgMHgwMzk1LCAweDAzOTYsIDB4MDM5NywgMHgwMGJkLCAweDAzOTgsIDB4MDM5 OSwgMHgwMGFiLCAweDAwYmIsCisgICAgMHgyNTkxLCAweDI1OTIsIDB4MjU5MywgMHgyNTAyLCAw eDI1MjQsIDB4MDM5YSwgMHgwMzliLCAweDAzOWMsCisgICAgMHgwMzlkLCAweDI1NjMsIDB4MjU1 MSwgMHgyNTU3LCAweDI1NWQsIDB4MDM5ZSwgMHgwMzlmLCAweDI1MTAsCisgICAgMHgyNTE0LCAw eDI1MzQsIDB4MjUyYywgMHgyNTFjLCAweDI1MDAsIDB4MjUzYywgMHgwM2EwLCAweDAzYTEsCisg ICAgMHgyNTVhLCAweDI1NTQsIDB4MjU2OSwgMHgyNTY2LCAweDI1NjAsIDB4MjU1MCwgMHgyNTZj LCAweDAzYTMsCisgICAgMHgwM2E0LCAweDAzYTUsIDB4MDNhNiwgMHgwM2E3LCAweDAzYTgsIDB4 MDNhOSwgMHgwM2IxLCAweDAzYjIsCisgICAgMHgwM2IzLCAweDI1MTgsIDB4MjUwYywgMHgyNTg4 LCAweDI1ODQsIDB4MDNiNCwgMHgwM2I1LCAweDI1ODAsCisgICAgMHgwM2I2LCAweDAzYjcsIDB4 MDNiOCwgMHgwM2I5LCAweDAzYmEsIDB4MDNiYiwgMHgwM2JjLCAweDAzYmQsCisgICAgMHgwM2Jl LCAweDAzYmYsIDB4MDNjMCwgMHgwM2MxLCAweDAzYzMsIDB4MDNjMiwgMHgwM2M0LCAweDAzODQs CisgICAgMHgwMGFkLCAweDAwYjEsIDB4MDNjNSwgMHgwM2M2LCAweDAzYzcsIDB4MDBhNywgMHgw M2M4LCAweDAzODUsCisgICAgMHgwMGIwLCAweDAwYTgsIDB4MDNjOSwgMHgwM2NiLCAweDAzYjAs IDB4MDNjZSwgMHgyNWEwLCAweDAwYTAKK307CisKKy8qIFdpbmRvd3MgY29kZSBwYWdlcyAqLwor CitzdHJ1Y3QgeF90b191bmljb2RlIHVfY3AxMjUwID0geyAgICAgICAgLyogV2luZG93cyBMYXRp bi0yICovCisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dzIENvZGUgUGFnZSAx MjUwIiwiY3AxMjUwIiwgMCwgTlVMTCwKKyAgICAweDIwYWMsIDB4ZmZmZCwgMHgyMDFhLCAweDAx OTIsIDB4MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwgLyogODAgKi8KKyAgICAweDAwNWUs IDB4MjAzMSwgMHgwMTYwLCAweDAwM2MsIDB4MDE1YSwgMHgwMTY0LCAweDAxN2QsIDB4MDE3OSwg LyogODggKi8KKyAgICAweGZmZmQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4MjAxZCwgMHgy MDIyLCAweDIwMTIsIDB4MjAxNCwgLyogOTAgKi8KKyAgICAweGZmZmQsIDB4MjEyMiwgMHgwMTYx LCAweDAwM2UsIDB4MDE1YiwgMHgwMTY1LCAweDAxN2UsIDB4MDE3YSwgLyogOTggKi8KKyAgICAw eDAwQTAsIDB4MDJjNywgMHgwMmQ4LCAweDAxNDEsIDB4MDBBNCwgMHgwMTA0LCAweDAwQTYsIDB4 MDBBNywgLyogQTAgKi8KKyAgICAweDAwQTgsIDB4MDBhOSwgMHgwMTVFLCAweDAwYWIsIDB4MDBh YywgMHgwMDJELCAweDAwYWUsIDB4MDE3QiwgLyogQTggKi8KKyAgICAweDAwQjAsIDB4MDBiMSwg MHgwMkRCLCAweDAxNDIsIDB4MDBCNCwgMHgwMGI1LCAweDAwYjYsIDB4MDBiNywgLyogQjAgKi8K KyAgICAweDAwQjgsIDB4MDEwNSwgMHgwMTVGLCAweDAwYmIsIDB4MDEzZCwgMHgwMkRELCAweDAx M0UsIDB4MDE3QywgLyogQjggKi8KKyAgICAweDAxNTQsIDB4MDBDMSwgMHgwMEMyLCAweDAxMDIs IDB4MDBDNCwgMHgwMTM5LCAweDAxMDYsIDB4MDBDNywgLyogQzAgKi8KKyAgICAweDAxMEMsIDB4 MDBDOSwgMHgwMTE4LCAweDAwQ0IsIDB4MDExQSwgMHgwMENELCAweDAwQ0UsIDB4MDEwRSwKKyAg ICAweDAxMTAsIDB4MDE0MywgMHgwMTQ3LCAweDAwRDMsIDB4MDBENCwgMHgwMTUwLCAweDAwRDYs IDB4MDBENywKKyAgICAweDAxNTgsIDB4MDE2RSwgMHgwMERBLCAweDAxNzAsIDB4MDBEQywgMHgw MERELCAweDAxNjIsIDB4MDBERiwKKyAgICAweDAxNTUsIDB4MDBFMSwgMHgwMEUyLCAweDAxMDMs IDB4MDBFNCwgMHgwMTNBLCAweDAxMDcsIDB4MDBFNywKKyAgICAweDAxMEQsIDB4MDBFOSwgMHgw MTE5LCAweDAwRUIsIDB4MDExQiwgMHgwMEVELCAweDAwRUUsIDB4MDEwRiwKKyAgICAweDAxMTEs IDB4MDE0NCwgMHgwMTQ4LCAweDAwRjMsIDB4MDBGNCwgMHgwMTUxLCAweDAwRjYsIDB4MDBGNywK KyAgICAweDAxNTksIDB4MDE2RiwgMHgwMEZBLCAweDAxNzEsIDB4MDBGQywgMHgwMEZELCAweDAx NjMsIDB4MDJEOQorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwMTI1MSA9IHsgICAgICAg IC8qIFdpbmRvd3MgQ3lyaWxsaWMgKi8KKyAgICAxMjgsIDAsIFgyVV9DUCwgQUxfQ1lSSUwsIldp bmRvd3MgQ29kZSBQYWdlIDEyNTEiLCJjcDEyNTEiLCAwLCBOVUxMLAorICAgIDB4MDQwMiwgMHgw NDAzLCAweDIwMWEsIDB4MDQ1MywgMHgyMDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLCAvKiA4 MCAqLworICAgIDB4MjBhYywgMHgyMDMxLCAweDA0MDksIDB4MDAzYywgMHgwNDBhLCAweDA0MGMs IDB4MDQwYiwgMHgwNDBmLCAvKiA4OCAqLworICAgIDB4MDQ1MiwgMHgyMDE4LCAweDIwMTksIDB4 MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMiwgMHgyMDE0LCAvKiA5MCAqLworICAgIDB4MDA3 ZSwgMHgyMTIyLCAweDA0NTksIDB4MDAzZSwgMHgwNDVhLCAweDA0NWMsIDB4MDQ1YiwgMHgwNDVm LCAvKiA5OCAqLworICAgIDB4MDBBMCwgMHgwNDBlLCAweDA0NWUsIDB4MDQwOCwgMHgwMEE0LCAw eDA0OTAsIDB4MDBBNiwgMHgwMEE3LCAvKiBhMCAqLworICAgIDB4MDQwMSwgMHgwMEE5LCAweDA0 MDQsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwNDA3LCAvKiBhOCAqLworICAg IDB4MDBiMCwgMHgwMGIxLCAweDA0MDYsIDB4MDQ1NiwgMHgwNDkxLCAweDAwQjUsIDB4MDBCNiwg MHgwMEI3LCAvKiBiMCAqLworICAgIDB4MDQ1MSwgMHgyMTE2LCAweDA0NTQsIDB4MDBCQiwgMHgw NDU4LCAweDA0MDUsIDB4MDQ1NSwgMHgwNDU3LCAvKiBiOCAqLworICAgIDB4MDQxMCwgMHgwNDEx LCAweDA0MTIsIDB4MDQxMywgMHgwNDE0LCAweDA0MTUsIDB4MDQxNiwgMHgwNDE3LCAvKiBjMCAq LworICAgIDB4MDQxOCwgMHgwNDE5LCAweDA0MWEsIDB4MDQxYiwgMHgwNDFjLCAweDA0MWQsIDB4 MDQxZSwgMHgwNDFmLCAvKiBjOCAqLworICAgIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsIDB4MDQy MywgMHgwNDI0LCAweDA0MjUsIDB4MDQyNiwgMHgwNDI3LCAvKiBkMCAqLworICAgIDB4MDQyOCwg MHgwNDI5LCAweDA0MmEsIDB4MDQyYiwgMHgwNDJjLCAweDA0MmQsIDB4MDQyZSwgMHgwNDJmLCAv KiBkOCAqLworICAgIDB4MDQzMCwgMHgwNDMxLCAweDA0MzIsIDB4MDQzMywgMHgwNDM0LCAweDA0 MzUsIDB4MDQzNiwgMHgwNDM3LCAvKiBlMCAqLworICAgIDB4MDQzOCwgMHgwNDM5LCAweDA0M2Es IDB4MDQzYiwgMHgwNDNjLCAweDA0M2QsIDB4MDQzZSwgMHgwNDNmLCAvKiBlOCAqLworICAgIDB4 MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDQ0LCAweDA0NDUsIDB4MDQ0NiwgMHgw NDQ3LCAvKiBmMCAqLworICAgIDB4MDQ0OCwgMHgwNDQ5LCAweDA0NGEsIDB4MDQ0YiwgMHgwNDRj LCAweDA0NGQsIDB4MDQ0ZSwgMHgwNDRmICAvKiBmOCAqLworfTsKKworc3RydWN0IHhfdG9fdW5p Y29kZSB1X2NwMTI1MiA9IHsgICAgICAgIC8qIFdpbmRvd3MgTGF0aW4tMSAqLworLyoKKyAgVGhl IGZvbGxvd2luZyBjb2RlIHBvaW50cyBhZGRlZCBTZXB0ZW1iZXIgMTk5ODoKKyAgMHg4MDogRXVy bworICAweDhFOiBMYXRpbiBDYXBpdGFsIExldHRlciBaIHdpdGggQ2Fyb24KKyAgMHg5RTogTGF0 aW4gU21hbGwgTGV0dGVyIFogd2l0aCBDYXJvbgorICBBbm5vdW5jZWQgYnkgTXVycmF5IFNhcmdl bnQgPG11cnJheXNAbWljcm9zb2Z0LmNvbT4gdG8gVW5pY29kZSBjb25zb3J0aXVtLAorICBlbWFp bCwgMyBTZXB0ZW1iZXIgMTk5OC4gIFRoZSBjb2RlIHBhZ2Ugd2FzIGNoYW5nZWQgaW4gSnVuZSAx OTk4LiAgVGhlCisgIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gV2luZG93cyA5OCBhbmQgInJlY2Vu dCBzZXJ2aWNlIHBhY2tzIiBmb3IgV2luZG93IDk1CisgIGFuZCBXaW5kb3dzIE5UIDQuMC4KKyov CisgICAgMTI4LCAwLCBYMlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dzIENvZGUgUGFnZSAxMjUyIiwi Y3AxMjUyIiwgMCwgTlVMTCwKKyAgICAweDIwYWMsIDB4ZmZmZCwgMHgyMDFhLCAweDAxOTIsIDB4 MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwKKyAgICAweDAwNWUsIDB4MjAzMSwgMHgwMTYw LCAweDAwM2MsIDB4MDE1MiwgMHhmZmZkLCAweDAxN0QsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4MjAxZCwgMHgyMDIyLCAweDIwMTIsIDB4MjAxNCwKKyAg ICAweDAwN2UsIDB4MjEyMiwgMHgwMTYxLCAweDAwM2UsIDB4MDE1MywgMHhmZmZkLCAweDAxN0Us IDB4MDE3OCwKKyAgICAweDAwQTAsIDB4MDBBMSwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgw MEE1LCAweDAwQTYsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIs IDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBBRiwKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgw MEIyLCAweDAwQjMsIDB4MDBCNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKKyAgICAweDAwQjgs IDB4MDBCOSwgMHgwMEJBLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDBCRiwK KyAgICAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAw QzYsIDB4MDBDNywKKyAgICAweDAwQzgsIDB4MDBDOSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywg MHgwMENELCAweDAwQ0UsIDB4MDBDRiwKKyAgICAweDAwRDAsIDB4MDBEMSwgMHgwMEQyLCAweDAw RDMsIDB4MDBENCwgMHgwMEQ1LCAweDAwRDYsIDB4MDBENywKKyAgICAweDAwRDgsIDB4MDBEOSwg MHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMERELCAweDAwREUsIDB4MDBERiwKKyAgICAweDAw RTAsIDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4MDBFNCwgMHgwMEU1LCAweDAwRTYsIDB4MDBF NywKKyAgICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAw eDAwRUUsIDB4MDBFRiwKKyAgICAweDAwRjAsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBG NCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywKKyAgICAweDAwRjgsIDB4MDBGOSwgMHgwMEZBLCAw eDAwRkIsIDB4MDBGQywgMHgwMEZELCAweDAwRkUsIDB4MDBGRgorfTsKKworc3RydWN0IHhfdG9f dW5pY29kZSB1X2NwMTI1MyA9IHsgICAgICAgIC8qIFdpbmRvd3MgR3JlZWNlICovCisgICAgMTI4 LCAwLCBYMlVfQ1AsIEFMX0dSRUVLLCJXaW5kb3dzIENvZGUgUGFnZSAxMjUzIiwiY3AxMjUzIiwg MCwgTlVMTCwKKyAgICAweDIwYWMsIDB4ZmZmZCwgMHgyMDFhLCAweDAxOTIsIDB4MjAxZSwgMHgy MDI2LCAweDIwMjAsIDB4MjAyMSwgLyogODAgKi8KKyAgICAweGZmZmQsIDB4MjAzMSwgMHhmZmZk LCAweDAwM2MsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogODggKi8KKyAgICAw eGZmZmQsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4MjAxZCwgMHgyMDIyLCAweDIwMTIsIDB4 MjAxNCwgLyogOTAgKi8KKyAgICAweGZmZmQsIDB4MjEyMiwgMHhmZmZkLCAweDAwM2UsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgLyogOTggKi8KKyAgICAweDAwQTAsIDB4MDBiNywg MHgwMzg2LCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAweDAwQTYsIDB4MDBBNywgLyogYTAgKi8K KyAgICAweDAwQTgsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAw QUUsIDB4MDBBRiwgLyogYTggKi8KKyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMs IDB4MDBCNywgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywgLyogYjAgKi8KKyAgICAweDAzODgsIDB4 MDM4OSwgMHgwMzhBLCAweDAwQkIsIDB4MDM4QywgMHgwMEJELCAweDAzOEUsIDB4MDM4RiwgLyog YjggKi8KKyAgICAweDAzOTAsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMsIDB4MDM5NCwgMHgwMzk1 LCAweDAzOTYsIDB4MDM5NywgLyogYzAgKi8KKyAgICAweDAzOTgsIDB4MDM5OSwgMHgwMzlBLCAw eDAzOUIsIDB4MDM5QywgMHgwMzlELCAweDAzOUUsIDB4MDM5RiwgLyogYzggKi8KKyAgICAweDAz YTAsIDB4MDNhMSwgMHhmZmZkLCAweDAzYTMsIDB4MDNhNCwgMHgwM2E1LCAweDAzYTYsIDB4MDNh NywgLyogZDAgKi8KKyAgICAweDAzYTgsIDB4MDNhOSwgMHgwM2FBLCAweDAzYUIsIDB4MDNhQywg MHgwM2FELCAweDAzYUUsIDB4MDNhRiwgLyogZDggKi8KKyAgICAweDAzYjAsIDB4MDNiMSwgMHgw M2IyLCAweDAzYjMsIDB4MDNiNCwgMHgwM2I1LCAweDAzYjYsIDB4MDNiNywgLyogZTAgKi8KKyAg ICAweDAzYjgsIDB4MDNiOSwgMHgwM2JBLCAweDAzYkIsIDB4MDNiQywgMHgwM2JELCAweDAzYkUs IDB4MDNiRiwgLyogZTggKi8KKyAgICAweDAzYzAsIDB4MDNjMSwgMHgwM2MyLCAweDAzYzMsIDB4 MDNjNCwgMHgwM2M1LCAweDAzYzYsIDB4MDNjNywgLyogZjAgKi8KKyAgICAweDAzYzgsIDB4MDNj OSwgMHgwM2NBLCAweDAzY0IsIDB4MDNjQywgMHgwM2NELCAweDAzY0UsIDB4ZmZmZCAgLyogZjgg Ki8KK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jcDEyNTQgPSB7ICAgICAgICAvKiBXaW5k b3dzIFR1cmtleSAqLworICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwiV2luZG93cyBDb2Rl IFBhZ2UgMTI1NCIsImNwMTI1NCIsIDAsIE5VTEwsCisgICAgMHgyMGFjLCAweGZmZmQsIDB4MjAx YSwgMHgwMTkyLCAweDIwMWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8qIDgwICovCisgICAg MHgwMDVlLCAweDIwMzEsIDB4MDE2MCwgMHgwMDNjLCAweDAxNTIsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIC8qIDg4ICovCisgICAgMHhmZmZkLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLCAweDIw MWQsIDB4MjAyMiwgMHgyMDEyLCAweDIwMTQsIC8qIDkwICovCisgICAgMHgwMDdlLCAweDIxMjIs IDB4MDE2MSwgMHgwMDNlLCAweDAxNTMsIDB4ZmZmZCwgMHhmZmZkLCAweDAxNzgsIC8qIDk4ICov CisgICAgMHgwMEEwLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4MDBBNSwgMHgw MEE2LCAweDAwQTcsCisgICAgMHgwMEE4LCAweDAwQTksIDB4MDBBQSwgMHgwMEFCLCAweDAwQUMs IDB4MDBBRCwgMHgwMEFFLCAweDAwQUYsCisgICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgw MEIzLCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsCisgICAgMHgwMEI4LCAweDAwQjks IDB4MDBCQSwgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwQkYsCisgICAgMHgw MEMwLCAweDAwQzEsIDB4MDBDMiwgMHgwMEMzLCAweDAwQzQsIDB4MDBDNSwgMHgwMEM2LCAweDAw QzcsCisgICAgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBDRCwg MHgwMENFLCAweDAwQ0YsCisgICAgMHgwMTFlLCAweDAwRDEsIDB4MDBEMiwgMHgwMEQzLCAweDAw RDQsIDB4MDBENSwgMHgwMEQ2LCAweDAwRDcsCisgICAgMHgwMEQ4LCAweDAwRDksIDB4MDBEQSwg MHgwMERCLCAweDAwREMsIDB4MDEzMCwgMHgwMTVlLCAweDAwREYsCisgICAgMHgwMEUwLCAweDAw RTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU2LCAweDAwRTcsCisgICAg MHgwMEU4LCAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsIDB4MDBFRCwgMHgwMEVFLCAw eDAwRUYsCisgICAgMHgwMTFmLCAweDAwRjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsIDB4MDBG NSwgMHgwMEY2LCAweDAwRjcsCisgICAgMHgwMEY4LCAweDAwRjksIDB4MDBGQSwgMHgwMEZCLCAw eDAwRkMsIDB4MDEzMSwgMHgwMTVmLCAweDAwRkYKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUg dV9jcDEyNTUgPSB7ICAgICAgICAvKiBXaW5kb3dzIEhlYnJldyAqLworICAgIDEyOCwgMCwgWDJV X0NQLCBBTF9ST01BTiwiV2luZG93cyBDb2RlIFBhZ2UgMTI1NSAoSGVicmV3KSIsImNwMTI1NSIs CisgICAgMCwgTlVMTCwKKyAgICAweDIwQUMsIDB4RkZGRCwgMHgyMDFhLCAweDAxOTIsIDB4MjAx ZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwKKyAgICAweDAyYzYsIDB4MjAzMCwgMHhmZmZkLCAw eDIwMzksIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4MjAx OCwgMHgyMDE5LCAweDIwMWMsIDB4MjAxZCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwKKyAgICAw eDAyZGMsIDB4MjEyMiwgMHhmZmZkLCAweDIwM2EsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweDAwYTAsIDB4MDBhMSwgMHgwMGEyLCAweDAwYTMsIDB4MjBhYSwgMHgwMGE1 LCAweDAwYTYsIDB4MDBhNywKKyAgICAweDAwYTgsIDB4MDBhOSwgMHgwMGQ3LCAweDAwYWIsIDB4 MDBhYywgMHgwMGFkLCAweDAwYWUsIDB4MDBhZiwKKyAgICAweDAwYjAsIDB4MDBiMSwgMHgwMGIy LCAweDAwYjMsIDB4MDBiNCwgMHgwMGI1LCAweDAwYjYsIDB4MDBiNywKKyAgICAweDAwYjgsIDB4 MDBiOSwgMHgwMGY3LCAweDAwYmIsIDB4MDBiYywgMHgwMGJkLCAweDAwYmUsIDB4MDBiZiwKKyAg ICAweDA1YjAsIDB4MDViMSwgMHgwNWIyLCAweDA1YjMsIDB4MDViNCwgMHgwNWI1LCAweDA1YjYs IDB4MDViNywKKyAgICAweDA1YjgsIDB4MDViOSwgMHhmZmZkLCAweDA1YmIsIDB4MDViYywgMHgw NWJkLCAweDA1YmUsIDB4MDViZiwKKyAgICAweDA1YzAsIDB4MDVjMSwgMHgwNWMyLCAweDA1YzMs IDB4MDVmMCwgMHgwNWYxLCAweDA1ZjIsIDB4MDVmMywKKyAgICAweDA1ZjQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDA1ZDAs IDB4MDVkMSwgMHgwNWQyLCAweDA1ZDMsIDB4MDVkNCwgMHgwNWQ1LCAweDA1ZDYsIDB4MDVkNywK KyAgICAweDA1ZDgsIDB4MDVkOSwgMHgwNWRhLCAweDA1ZGIsIDB4MDVkYywgMHgwNWRkLCAweDA1 ZGUsIDB4MDVkZiwKKyAgICAweDA1ZTAsIDB4MDVlMSwgMHgwNWUyLCAweDA1ZTMsIDB4MDVlNCwg MHgwNWU1LCAweDA1ZTYsIDB4MDVlNywKKyAgICAweDA1ZTgsIDB4MDVlOSwgMHgwNWVhLCAweGZm ZmQsIDB4ZmZmZCwgMHgyMDBlLCAweDIwMGYsIDB4ZmZmZAorfTsKKworc3RydWN0IHhfdG9fdW5p Y29kZSB1X2NwMTI1NiA9IHsgICAgICAgIC8qIFdpbmRvd3MgQXJhYmljICovCisgICAgMTI4LCAw LCBYMlVfQ1AsIEFMX1JPTUFOLCJXaW5kb3dzIENvZGUgUGFnZSAxMjU2IChBcmFiaWMpIiwiY3Ax MjU2IiwKKyAgICAwLCBOVUxMLAorICAgIDB4MjBhYywgMHgwNjdlLCAweDIwMWEsIDB4MDE5Miwg MHgyMDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLAorICAgIDB4MDJjNiwgMHgyMDMwLCAweGZm ZmQsIDB4MjAzOSwgMHgwMTUyLCAweDA2ODYsIDB4MDY5OCwgMHhmZmZkLCAvKiA4OCAqLworICAg IDB4MDZhZiwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMywg MHgyMDE0LCAvKiA5MCAqLworICAgIDB4ZmZmZCwgMHgyMTIyLCAweGZmZmQsIDB4MDAzYSwgMHgw MTUzLCAweDIwMGMsIDB4MjAwZCwgMHhmZmZkLCAvKiA5OCAqLworICAgIDB4MDBBMCwgMHgwNjBj LCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwYTUsIDB4MDBBNiwgMHgwMEE3LCAvKiBhMCAq LworICAgIDB4MDBhOCwgMHgwMEE5LCAweGZmZmQsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4 MDBBRSwgMHgwMGFmLCAvKiBhOCAqLworICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBC MywgMHgwMGI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LCAvKiBiMCAqLworICAgIDB4MDBiOCwg MHgwMEI5LCAweDA2MWIsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwNjFmLCAv KiBiOCAqLworICAgIDB4ZmZmZCwgMHgwNjIxLCAweDA2MjIsIDB4MDYyMywgMHgwNjI0LCAweDA2 MjUsIDB4MDYyNiwgMHgwNjI3LCAvKiBjMCAqLworICAgIDB4MDYyOCwgMHgwNjI5LCAweDA2MmEs IDB4MDYyYiwgMHgwNjJjLCAweDA2MmQsIDB4MDYyZSwgMHgwNjJmLCAvKiBjOCAqLworICAgIDB4 MDYzMCwgMHgwNjMxLCAweDA2MzIsIDB4MDYzMywgMHgwNjM0LCAweDA2MzUsIDB4MDYzNiwgMHgw MEQ3LCAvKiBkMCAqLworICAgIDB4MDYzNywgMHgwNjM4LCAweDA2MzksIDB4MDYzYSwgMHgwNjQw LCAweDA2NDEsIDB4MDY0MiwgMHgwNjQzLCAvKiBkOCAqLworICAgIDB4MDBlMCwgMHgwNjQ0LCAw eDAwZTIsIDB4MDY0NSwgMHgwNjQ2LCAweDA2NDcsIDB4MDY0OCwgMHgwMGU3LCAvKiBlMCAqLwor ICAgIDB4MDBlOCwgMHgwMEU5LCAweDAwZWEsIDB4MDBlYiwgMHgwNjQ5LCAweDA2NGEsIDB4MDBl ZSwgMHgwMGVmLCAvKiBlOCAqLworICAgIDB4MDY0YiwgMHgwNjRjLCAweDA2NGQsIDB4MDY0ZSwg MHgwMGY0LCAweDA2NGYsIDB4MDY1MCwgMHgwMEY3LCAvKiBmMCAqLworICAgIDB4MDY1MSwgMHgw MGY5LCAweDA2NTIsIDB4MDBmYiwgMHgwMGZjLCAweDIwMGUsIDB4MjAwZiwgMHhmZmZkICAvKiBm OCAqLworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwMTI1NyA9IHsgICAgICAgIC8qIFdp bmRvd3MgTGF0aW4tNCAqLworICAgIDEyOCwgMCwgWDJVX0NQLCBBTF9ST01BTiwiV2luZG93cyBD b2RlIFBhZ2UgMTI1NyIsImNwMTI1NyIsIDAsIE5VTEwsCisgICAgMHgyMGFjLCAweGZmZmQsIDB4 MjAxYSwgMHhmZmZkLCAweDIwMWUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsIC8qIDgwICovCisg ICAgMHhmZmZkLCAweDIwMzEsIDB4ZmZmZCwgMHgwMDNjLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIC8qIDg4ICovCisgICAgMHhmZmZkLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFjLCAw eDIwMWQsIDB4MjAyMiwgMHgyMDEyLCAweDIwMTQsIC8qIDkwICovCisgICAgMHhmZmZkLCAweDIx MjIsIDB4ZmZmZCwgMHgwMDNlLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIDk4 ICovCisgICAgMHgwMEEwLCAweGZmZmQsIDB4MDBBMiwgMHgwMEEzLCAweDAwQTQsIDB4ZmZmZCwg MHgwMEE2LCAweDAwQTcsIC8qIGEwICovCisgICAgMHgwMGQ4LCAweDAwQTksIDB4MDE1NiwgMHgw MEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDAwYzYsIC8qIGE4ICovCisgICAgMHgwMEIw LCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweGZmZmQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcs IC8qIGIwICovCisgICAgMHgwMGY4LCAweDAwQjksIDB4MDE1NywgMHgwMEJCLCAweDAwQkMsIDB4 MDBCRCwgMHgwMEJFLCAweDAwZTYsIC8qIGI4ICovCisgICAgMHgwMTA0LCAweDAxMmUsIDB4MDEw MCwgMHgwMTA2LCAweDAwQzQsIDB4MDBDNSwgMHgwMTE4LCAweDAxMTIsIC8qIGMwICovCisgICAg MHgwMTBDLCAweDAwQzksIDB4MDE3OSwgMHgwMTE2LCAweDAxMjIsIDB4MDEzNiwgMHgwMTJhLCAw eDAwYjcsIC8qIGM4ICovCisgICAgMHgwMTYwLCAweDAxNDMsIDB4MDE0NSwgMHgwMGQzLCAweDAx NGMsIDB4MDBENSwgMHgwMEQ2LCAweDAwRDcsIC8qIGQwICovCisgICAgMHgwMTcyLCAweDAxNDEs IDB4MDE1QSwgMHgwMTZhLCAweDAwREMsIDB4MDE3YiwgMHgwMTdkLCAweDAwREYsIC8qIGQ4ICov CisgICAgMHgwMTA1LCAweDAxMmYsIDB4MDEwMSwgMHgwMTA3LCAweDAwRTQsIDB4MDBFNSwgMHgw MTE5LCAweDAxMTMsIC8qIGUwICovCisgICAgMHgwMTBELCAweDAwRTksIDB4MDE3YSwgMHgwMTE3 LCAweDAxMjMsIDB4MDEzNywgMHgwMTJiLCAweDAxM2MsIC8qIGU4ICovCisgICAgMHgwMTYxLCAw eDAxNDQsIDB4MDE0NiwgMHgwMGYzLCAweDAxNGQsIDB4MDBGNSwgMHgwMEY2LCAweDAwRjcsIC8q IGYwICovCisgICAgMHgwMTczLCAweDAxNDIsIDB4MDE1YiwgMHgwMTZiLCAweDAwZmMsIDB4MDE3 YywgMHgwMTdlLCAweGZmZmQgIC8qIGY4ICovCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVf Y3AxMjU4ID0geyAgICAgICAgLyogV2luZG93cyBWaWV0IE5hbSAqLworICAgIDEyOCwgMCwgWDJV X0NQLCBBTF9ST01BTiwiV2luZG93cyBDb2RlIFBhZ2UgMTI1OCAoVmlldCBOYW0pIiwiY3AxMjU4 IiwKKyAgICAwLCBOVUxMLAorICAgIDB4MjBhYywgMHhmZmZkLCAweDIwMWEsIDB4MDE5MiwgMHgy MDFlLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLCAvKiA4MCAqLworICAgIDB4MDJjNiwgMHgyMDMw LCAweGZmZmQsIDB4MjAzOSwgMHgwMTUyLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiA4OCAq LworICAgIDB4ZmZmZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4 MjAxMywgMHgyMDE0LCAvKiA5MCAqLworICAgIDB4MDJkYywgMHgyMTIyLCAweGZmZmQsIDB4MjAz YSwgMHgwMTUzLCAweGZmZmQsIDB4ZmZmZCwgMHgwMTc4LCAvKiA5OCAqLworICAgIDB4MDBBMCwg MHgwMGExLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwYTUsIDB4MDBBNiwgMHgwMEE3LCAv KiBhMCAqLworICAgIDB4MDBhOCwgMHgwMEE5LCAweDAwYWEsIDB4MDBBQiwgMHgwMEFDLCAweDAw QUQsIDB4MDBBRSwgMHgwMGFmLCAvKiBhOCAqLworICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIs IDB4MDBCMywgMHgwMGI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LCAvKiBiMCAqLworICAgIDB4 MDBiOCwgMHgwMEI5LCAweDAwYmEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgw MGJmLCAvKiBiOCAqLworICAgIDB4MDBjMCwgMHgwMGMxLCAweDAwYzIsIDB4MDEwMiwgMHgwMEM0 LCAweDAwQzUsIDB4MDBjNiwgMHgwMGM3LCAvKiBjMCAqLworICAgIDB4MDBjOCwgMHgwMEM5LCAw eDAwY2EsIDB4MDBjYiwgMHgwMzAwLCAweDAwY2QsIDB4MDBjZSwgMHgwMGNmLCAvKiBjOCAqLwor ICAgIDB4MDExMCwgMHgwMGQxLCAweDAzMDksIDB4MDBkMywgMHgwMGQ0LCAweDAxYTAsIDB4MDBE NiwgMHgwMEQ3LCAvKiBkMCAqLworICAgIDB4MDBkOCwgMHgwMGQ5LCAweDAwZGEsIDB4MDBkYiwg MHgwMERDLCAweDAxYWYsIDB4MDMwMywgMHgwMERGLCAvKiBkOCAqLworICAgIDB4MDBlMCwgMHgw MGUxLCAweDAwZTIsIDB4MDEwMywgMHgwMEU0LCAweDAwRTUsIDB4MDBlNiwgMHgwMGQ3LCAvKiBl MCAqLworICAgIDB4MDBlOCwgMHgwMEU5LCAweDAwZWEsIDB4MDBlYiwgMHgwMzAxLCAweDAwZWQs IDB4MDBlZSwgMHgwMGVmLCAvKiBlOCAqLworICAgIDB4MDExMSwgMHgwMGYxLCAweDAzMjMsIDB4 MDBmMywgMHgwMGY0LCAweDAxYTEsIDB4MDBGNiwgMHgwMEY3LCAvKiBmMCAqLworICAgIDB4MDBm OCwgMHgwMGY5LCAweDAwZmEsIDB4MDBmYiwgMHgwMGZjLCAweDAxYjAsIDB4MjBhYiwgMHgwMGZm ICAvKiBmOCAqLworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2NwMzcgPSB7ICAvKiBFQkNE SUMgVS5TLiAqLworICAgIDI1NiwgMCwgWDJVX0NQLCBBTF9ST01BTiwiQ29kZSBQYWdlIDAzNyBF QkNESUMgKFUuUy4pIiwiY3AwMzciLCAwLCBOVUxMLAorICAgIDB4MDAwMCwgMHgwMDAxLCAweDAw MDIsIDB4MDAwMywgMHgwMDlDLCAweDAwMDksIDB4MDA4NiwgMHgwMDdGLAorICAgIDB4MDA5Nywg MHgwMDhELCAweDAwOEUsIDB4MDAwQiwgMHgwMDBDLCAweDAwMEQsIDB4MDAwRSwgMHgwMDBGLAor ICAgIDB4MDAxMCwgMHgwMDExLCAweDAwMTIsIDB4MDAxMywgMHgwMDlELCAweDAwODUsIDB4MDAw OCwgMHgwMDg3LAorICAgIDB4MDAxOCwgMHgwMDE5LCAweDAwOTIsIDB4MDA4RiwgMHgwMDFDLCAw eDAwMUQsIDB4MDAxRSwgMHgwMDFGLAorICAgIDB4MDA4MCwgMHgwMDgxLCAweDAwODIsIDB4MDA4 MywgMHgwMDg0LCAweDAwMEEsIDB4MDAxNywgMHgwMDFCLAorICAgIDB4MDA4OCwgMHgwMDg5LCAw eDAwOEEsIDB4MDA4QiwgMHgwMDhDLCAweDAwMDUsIDB4MDAwNiwgMHgwMDA3LAorICAgIDB4MDA5 MCwgMHgwMDkxLCAweDAwMTYsIDB4MDA5MywgMHgwMDk0LCAweDAwOTUsIDB4MDA5NiwgMHgwMDA0 LAorICAgIDB4MDA5OCwgMHgwMDk5LCAweDAwOUEsIDB4MDA5QiwgMHgwMDE0LCAweDAwMTUsIDB4 MDA5RSwgMHgwMDFBLAorICAgIDB4MDAyMCwgMHgwMEEwLCAweDAwRTIsIDB4MDBFNCwgMHgwMEUw LCAweDAwRTEsIDB4MDBFMywgMHgwMEU1LAorICAgIDB4MDBFNywgMHgwMEYxLCAweDAwQTIsIDB4 MDAyRSwgMHgwMDNDLCAweDAwMjgsIDB4MDAyQiwgMHgwMDdDLAorICAgIDB4MDAyNiwgMHgwMEU5 LCAweDAwRUEsIDB4MDBFQiwgMHgwMEU4LCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLAorICAgIDB4 MDBFQywgMHgwMERGLCAweDAwMjEsIDB4MDAyNCwgMHgwMDJBLCAweDAwMjksIDB4MDAzQiwgMHgw MEFDLAorICAgIDB4MDAyRCwgMHgwMDJGLCAweDAwQzIsIDB4MDBDNCwgMHgwMEMwLCAweDAwQzEs IDB4MDBDMywgMHgwMEM1LAorICAgIDB4MDBDNywgMHgwMEQxLCAweDAwQTYsIDB4MDAyQywgMHgw MDI1LCAweDAwNUYsIDB4MDAzRSwgMHgwMDNGLAorICAgIDB4MDBGOCwgMHgwMEM5LCAweDAwQ0Es IDB4MDBDQiwgMHgwMEM4LCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLAorICAgIDB4MDBDQywgMHgw MDYwLCAweDAwM0EsIDB4MDAyMywgMHgwMDQwLCAweDAwMjcsIDB4MDAzRCwgMHgwMDIyLAorICAg IDB4MDBEOCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2Niwg MHgwMDY3LAorICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwQUIsIDB4MDBCQiwgMHgwMEYwLCAweDAw RkQsIDB4MDBGRSwgMHgwMEIxLAorICAgIDB4MDBCMCwgMHgwMDZBLCAweDAwNkIsIDB4MDA2Qywg MHgwMDZELCAweDAwNkUsIDB4MDA2RiwgMHgwMDcwLAorICAgIDB4MDA3MSwgMHgwMDcyLCAweDAw QUEsIDB4MDBCQSwgMHgwMEU2LCAweDAwQjgsIDB4MDBDNiwgMHgwMEE0LAorICAgIDB4MDBCNSwg MHgwMDdFLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LAor ICAgIDB4MDA3OSwgMHgwMDdBLCAweDAwQTEsIDB4MDBCRiwgMHgwMEQwLCAweDAwREQsIDB4MDBE RSwgMHgwMEFFLAorICAgIDB4MDA1RSwgMHgwMEEzLCAweDAwQTUsIDB4MDBCNywgMHgwMEE5LCAw eDAwQTcsIDB4MDBCNiwgMHgwMEJDLAorICAgIDB4MDBCRCwgMHgwMEJFLCAweDAwNUIsIDB4MDA1 RCwgMHgwMEFGLCAweDAwQTgsIDB4MDBCNCwgMHgwMEQ3LAorICAgIDB4MDA3QiwgMHgwMDQxLCAw eDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAorICAgIDB4MDA0 OCwgMHgwMDQ5LCAweDAwQUQsIDB4MDBGNCwgMHgwMEY2LCAweDAwRjIsIDB4MDBGMywgMHgwMEY1 LAorICAgIDB4MDA3RCwgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsIDB4 MDA0RiwgMHgwMDUwLAorICAgIDB4MDA1MSwgMHgwMDUyLCAweDAwQjksIDB4MDBGQiwgMHgwMEZD LCAweDAwRjksIDB4MDBGQSwgMHgwMEZGLAorICAgIDB4MDA1QywgMHgwMEY3LCAweDAwNTMsIDB4 MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LAorICAgIDB4MDA1OSwgMHgwMDVB LCAweDAwQjIsIDB4MDBENCwgMHgwMEQ2LCAweDAwRDIsIDB4MDBEMywgMHgwMEQ1LAorICAgIDB4 MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgw MDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwQjMsIDB4MDBEQiwgMHgwMERDLCAweDAwRDks IDB4MDBEQSwgMHgwMDlGCit9OworCisvKiBPdGhlciBwcm9wcmlldGFyeSA4LWJpdCBzZXRzICov CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9kZWNtY3MgPSB7CisgICAgOTYsIDMyLCBYMlVfREVD fFgyVV9TVEQsIEFMX1JPTUFOLCAiREVDIE11bHRpbmF0aW9uYWwiLCAiZGVjLW1jcyIsIDAsICIl NSIsCisgICAgMHgwMEEwLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLCAweGZmZmQsIDB4MDBBNSwg MHhmZmZkLCAweDAwQTcsCisgICAgMHgwMEE0LCAweDAwQTksIDB4MDBBQSwgMHgwMEFCLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwg MHgwMEIzLCAweGZmZmQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsCisgICAgMHhmZmZkLCAweDAw QjksIDB4MDBCQSwgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHhmZmZkLCAweDAwQkYsCisgICAg MHgwMEMwLCAweDAwQzEsIDB4MDBDMiwgMHgwMEMzLCAweDAwQzQsIDB4MDBDNSwgMHgwMEM2LCAw eDAwQzcsCisgICAgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBD RCwgMHgwMENFLCAweDAwQ0YsCisgICAgMHhmZmZkLCAweDAwRDEsIDB4MDBEMiwgMHgwMEQzLCAw eDAwRDQsIDB4MDBENSwgMHgwMEQ2LCAweDAxNTIsCisgICAgMHgwMEQ4LCAweDAwRDksIDB4MDBE QSwgMHgwMERCLCAweDAwREMsIDB4MDBERCwgMHhmZmZkLCAweDAwREYsCisgICAgMHgwMEUwLCAw eDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU2LCAweDAwRTcsCisg ICAgMHgwMEU4LCAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsIDB4MDBFRCwgMHgwMEVF LCAweDAwRUYsCisgICAgMHhmZmZkLCAweDAwRjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsIDB4 MDBGNSwgMHgwMEY2LCAweDAxNTMsCisgICAgMHgwMEY4LCAweDAwRjksIDB4MDBGQSwgMHgwMEZC LCAweDAwRkMsIDB4MDBGRCwgMHhmZmZkLCAweDAwRkYKK307CisKK3N0cnVjdCB4X3RvX3VuaWNv ZGUgdV9ocHJvbWFuOCA9IHsKKyAgICA5NiwgMzIsIFgyVV9TVEQsIEFMX1JPTUFOLCAiSGV3bGV0 dCBQYWNrYXJkIFJvbWFuIDgiLCAiaHAtcm9tYW44IiwgMCwgTlVMTCwKKyAgICAweDAwYTAsIDB4 MDBjMCwgMHgwMGMyLCAweDAwYzgsIDB4MDBjYSwgMHgwMGNiLCAweDAwY2UsIDB4MDBjZiwKKyAg ICAweDAwYjQsIDB4MDBhNiwgMHgwMGE5LCAweDAwYTgsIDB4MDBhYywgMHgwMGQ5LCAweDAwZGIs IDB4MjBhNCwKKyAgICAweDAwYWYsIDB4MDBkZCwgMHgwMGZkLCAweDAwYjAsIDB4MDBjNywgMHgw MGU3LCAweDAwZDEsIDB4MDBmMSwKKyAgICAweDAwYTEsIDB4MDBiZiwgMHgwMGE0LCAweDAwYTMs IDB4MDBhNSwgMHgwMGE3LCAweDAxOTIsIDB4MDBhMiwKKyAgICAweDAwZTIsIDB4MDBlYSwgMHgw MGY0LCAweDAwZmIsIDB4MDBlMSwgMHgwMGU5LCAweDAwZjMsIDB4MDBmYSwKKyAgICAweDAwZTAs IDB4MDBlOCwgMHgwMGYyLCAweDAwZjksIDB4MDBlNCwgMHgwMGViLCAweDAwZjYsIDB4MDBmYywK KyAgICAweDAwYzUsIDB4MDBlZSwgMHgwMGQ4LCAweDAwYzYsIDB4MDBlNSwgMHgwMGVkLCAweDAw ZjgsIDB4MDBlNiwKKyAgICAweDAwYzQsIDB4MDBlYywgMHgwMGQ2LCAweDAwZGMsIDB4MDBjOSwg MHgwMGVmLCAweDAwZGYsIDB4MDBkNCwKKyAgICAweDAwYzEsIDB4MDBjMywgMHgwMGUzLCAweDAw ZDAsIDB4MDBmMCwgMHgwMGNkLCAweDAwY2MsIDB4MDBkMywKKyAgICAweDAwZDIsIDB4MDBkNSwg MHgwMGY1LCAweDAxNjAsIDB4MDE2MSwgMHgwMGRhLCAweDAwYjgsIDB4MDBmZiwKKyAgICAweDAw ZGUsIDB4MDBmZSwgMHgwMGI3LCAweDAwYjUsIDB4MDBiNiwgMHgwMGJlLCAweDIwMTUsIDB4MDBi YywKKyAgICAweDAwYmQsIDB4MDBhYSwgMHgwMGJhLCAweDAwYWIsIDB4MjU4OCwgMHgwMGJiLCAw eDAwYjEsIDB4ZmZmZAorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X2RnaSA9IHsKKyA5Niwz MixYMlVfU1RELEFMX1JPTUFOLCJEYXRhIEdlbmVyYWwgSW50ZXJuYXRpb25hbCIsImRnLWludGVy bmF0aW9uYWwiLDAsTlVMTCwKKyAgICAweDAwYTAsIDB4MDBhYywgMHgwMGJkLCAweDAwYjUsIDB4 MDBiMiwgMHgwMGIzLCAweDAwYTQsIDB4MDBhMiwKKyAgICAweDAwYTMsIDB4MDBhYSwgMHgwMGJh LCAweDAwYTEsIDB4MDBiZiwgMHgwMGE5LCAweDAwYWUsIDB4MjAyMSwKKyAgICAweDAwYmIsIDB4 MDBhYiwgMHgwMGI2LCAweDIxMjIsIDB4MDE5MiwgMHgwMGE1LCAweDAwYjEsIDB4MjI2NCwKKyAg ICAweDIyNjUsIDB4MDBiNywgMHgwMGI4LCAweDAwYTcsIDB4MDBiMCwgMHgwMGE4LCAweDAwYjQs IDB4MjE5MSwKKyAgICAweDAwYzEsIDB4MDBjMCwgMHgwMGMyLCAweDAwYzQsIDB4MDBjMywgMHgw MGM1LCAweDAwYzYsIDB4MDBjNywKKyAgICAweDAwYzksIDB4MDBjOCwgMHgwMGNhLCAweDAwY2Is IDB4MDBjZCwgMHgwMGNjLCAweDAwY2UsIDB4MDBjZiwKKyAgICAweDAwZDEsIDB4MDBkMywgMHgw MGQyLCAweDAwZDQsIDB4MDBkNiwgMHgwMGQ1LCAweDAwZDgsIDB4MDI3NiwKKyAgICAweDAwZGEs IDB4MDBkOSwgMHgwMGRiLCAweDAwZGMsIDB4ZmZmZCwgMHgwMTc4LCAweGZmZmQsIDB4ZmZmZCwK KyAgICAweDAwZTEsIDB4MDBlMCwgMHgwMGUyLCAweDAwZTQsIDB4MDBlMywgMHgwMGU1LCAweDAw ZTYsIDB4MDBlNywKKyAgICAweDAwZTksIDB4MDBlOCwgMHgwMGVhLCAweDAwZWIsIDB4MDBlZCwg MHgwMGVjLCAweDAwZWUsIDB4MDBlZiwKKyAgICAweDAwZjEsIDB4MDBmMywgMHgwMGYyLCAweDAw ZjQsIDB4MDBmNiwgMHgwMGY1LCAweDAwZjgsIDB4MDE1MywKKyAgICAweDAwZmEsIDB4MDBmOSwg MHgwMGZiLCAweDAwZmMsIDB4MDBkZiwgMHgwMGZmLCAweGZmZmQsIDB4MjU4OAorfTsKKworc3Ry dWN0IHhfdG9fdW5pY29kZSB1X25leHRzdGVwID0geworICAgIDEyOCwgMCwgMCwgQUxfUk9NQU4s Ik5lWFRTVEVQIE11bHRpbmF0aW9uYWwiLCJuZXh0LW11bHRpbmF0aW9uYWwiLDAsTlVMTCwKKyAg ICAweDAwYTAsIDB4MDBjMCwgMHgwMGMxLCAweDAwYzIsIDB4MDBjMywgMHgwMGM0LCAweDAwYzUs IDB4MDBjNywKKyAgICAweDAwYzgsIDB4MDBjOSwgMHgwMGNhLCAweDAwY2IsIDB4MDBjYywgMHgw MGNkLCAweDAwY2UsIDB4MDBjZiwKKyAgICAweDAwZDAsIDB4MDBkMSwgMHgwMGQyLCAweDAwZDMs IDB4MDBkNCwgMHgwMGQ1LCAweDAwZDYsIDB4MDBkOSwKKyAgICAweDAwZGEsIDB4MDBkYiwgMHgw MGRjLCAweDAwZGQsIDB4MDBkZSwgMHgwMGI1LCAweDAwZDcsIDB4MDBmNywKKyAgICAweDAwYTks IDB4MDBhMSwgMHgwMGEyLCAweDAwYTMsIDB4MjA0NCwgMHgwMGE1LCAweDAxOTIsIDB4MDBhNywK KyAgICAweDAwYTQsIDB4MjAxOSwgMHgyMDFjLCAweDAwYWIsIDB4MjAzOSwgMHgyMDNhLCAweGZi MDEsIDB4ZmIwMiwKKyAgICAweDAwYWUsIDB4MjAxMywgMHgyMDIwLCAweDIwMjEsIDB4MDBiNywg MHgwMGE2LCAweDAwYjYsIDB4MjAyMiwKKyAgICAweDIwMWEsIDB4MjAxZSwgMHgyMDFkLCAweDAw YmIsIDB4MjAyNiwgMHgyMDMwLCAweDAwYWMsIDB4MDBiZiwKKyAgICAweDAwYjksIDB4MDJjYiwg MHgwMGI0LCAweDAyYzYsIDB4MDJkYywgMHgwMGFmLCAweDAyZDgsIDB4MDJkOSwKKyAgICAweDAw YTgsIDB4MDBiMiwgMHgwMmRhLCAweDAwYjgsIDB4MDBiMywgMHgwMmRkLCAweDAyZGIsIDB4MDJj NywKKyAgICAweDIwMTQsIDB4MDBiMSwgMHgwMGJjLCAweDAwYmQsIDB4MDBiZSwgMHgwMGUwLCAw eDAwZTEsIDB4MDBlMiwKKyAgICAweDAwZTMsIDB4MDBlNCwgMHgwMGU1LCAweDAwZTcsIDB4MDBl OCwgMHgwMGU5LCAweDAwZWEsIDB4MDBlYiwKKyAgICAweDAwZWMsIDB4MDBjNiwgMHgwMGVkLCAw eDAwYWEsIDB4MDBlZSwgMHgwMGVmLCAweDAwZjAsIDB4MDBmMSwKKyAgICAweDAxNDEsIDB4MDBk OCwgMHgwMTUyLCAweDAwYmEsIDB4MDBmMiwgMHgwMGYzLCAweDAwZjQsIDB4MDBmNSwKKyAgICAw eDAwZjYsIDB4MDBlNiwgMHgwMGY5LCAweDAwZmEsIDB4MDBmYiwgMHgwMTMxLCAweDAwZmMsIDB4 MDBmZCwKKyAgICAweDAxNDIsIDB4MDBmOCwgMHgwMTUzLCAweDAwZGYsIDB4MDBmZSwgMHgwMGZm LCAweGZmZmQsIDB4ZmZmZAorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X21hY2xhdGluID0g eworICAgIDEyOCwgMCwgMCwgQUxfUk9NQU4sIk1hY2ludG9zaCBMYXRpbiIsIm1hY2xhdGluIiwg MCwgTlVMTCwKKyAgICAweDAwQzQsIDB4MDBDNSwgMHgwMEM3LCAweDAwQzksIDB4MDBEMSwgMHgw MEQ2LCAweDAwREMsIDB4MDBFMSwKKyAgICAweDAwRTAsIDB4MDBFMiwgMHgwMEU0LCAweDAwRTMs IDB4MDBFNSwgMHgwMEU3LCAweDAwRTksIDB4MDBFOCwKKyAgICAweDAwRUEsIDB4MDBFQiwgMHgw MEVELCAweDAwRUMsIDB4MDBFRSwgMHgwMEVGLCAweDAwRjEsIDB4MDBGMywKKyAgICAweDAwRjIs IDB4MDBGNCwgMHgwMEY2LCAweDAwRjUsIDB4MDBGQSwgMHgwMEY5LCAweDAwRkIsIDB4MDBGQywK KyAgICAweDAwREQsIDB4MDBCMCwgMHgwMEEyLCAweDAwQTMsIDB4MDBBNywgMHgyMDIyLCAweDAw QjYsIDB4MDBERiwKKyAgICAweDAwQUUsIDB4MDBBOSwgMHgyMTIyLCAweDAwQjQsIDB4MDBBOCwg MHgyMjYwLCAweDAwQzYsIDB4MDBEOCwKKyAgICAweDIyMUUsIDB4MDBCMSwgMHgyMjY0LCAweDIy NjUsIDB4MDBBNSwgMHgwMEI1LCAweDIyMDIsIDB4MjIxMSwKKyAgICAweDIyMEYsIDB4MDNDMCwg MHgyMjJCLCAweDAwQUEsIDB4MDBCQSwgMHgyMTI2LCAweDAwRTYsIDB4MDBGOCwKKyAgICAweDAw QkYsIDB4MDBBMSwgMHgwMEFDLCAweDIyMUEsIDB4MDE5MiwgMHgyMjQ4LCAweDIyMDYsIDB4MDBB QiwKKyAgICAweDAwQkIsIDB4MjAyNiwgMHgwMEEwLCAweDAwQzAsIDB4MDBDMywgMHgwMEQ1LCAw eDAxNTIsIDB4MDE1MywKKyAgICAweDIwMTMsIDB4MjAxNCwgMHgyMDFDLCAweDIwMUQsIDB4MjAx OCwgMHgyMDE5LCAweDAwRjcsIDB4MjVDQSwKKyAgICAweDAwRkYsIDB4MDE3OCwgMHgyMDQ0LCAw eDAwQTQsIDB4MDBEMCwgMHgwMEYwLCAweDAwREUsIDB4MDBGRSwKKyAgICAweDAwRkQsIDB4MDBC NywgMHgyMDFBLCAweDIwMUUsIDB4MjAzMCwgMHgwMEMyLCAweDAwQ0EsIDB4MDBDMSwKKyAgICAw eDAwQ0IsIDB4MDBDOCwgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwgMHgwMENDLCAweDAwRDMsIDB4 MDBENCwKKyAgICAweEY4RkYsIDB4MDBEMiwgMHgwMERBLCAweDAwREIsIDB4MDBEOSwgMHgwMTMx LCAweDAyQzYsIDB4MDJEQywKKyAgICAweDAwQUYsIDB4MDJEOCwgMHgwMkQ5LCAweDAyREEsIDB4 MDBCOCwgMHgwMkRELCAweDAyREIsIDB4MDJDNworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1 X3F1aWNrZHJhdyA9IHsKKyAgICAxMjgsIDAsIDAsIEFMX1JPTUFOLCJRdWlja0RyYXciLCJxdWlj a2RyYXciLCAwLCBOVUxMLAorICAgIDB4MDBDNCwgMHgwMEM1LCAweDAwQzcsIDB4MDBDOSwgMHgw MEQxLCAweDAwRDYsIDB4MDBEQywgMHgwMEUxLAorICAgIDB4MDBFMCwgMHgwMEUyLCAweDAwRTQs IDB4MDBFMywgMHgwMEU1LCAweDAwRTcsIDB4MDBFOSwgMHgwMEU4LAorICAgIDB4MDBFQSwgMHgw MEVCLCAweDAwRUQsIDB4MDBFQywgMHgwMEVFLCAweDAwRUYsIDB4MDBGMSwgMHgwMEYzLAorICAg IDB4MDBGMiwgMHgwMEY0LCAweDAwRjYsIDB4MDBGNSwgMHgwMEZBLCAweDAwRjksIDB4MDBGQiwg MHgwMEZDLAorICAgIDB4MjAyMCwgMHgwMEIwLCAweDAwQTIsIDB4MDBBMywgMHgwMEE3LCAweDIw MjIsIDB4MDBCNiwgMHgwMERGLAorICAgIDB4MDBBRSwgMHgwMEE5LCAweDIxMjIsIDB4MDBCNCwg MHgwMEE4LCAweDIyNjAsIDB4MDBDNiwgMHgwMEQ4LAorICAgIDB4MjIxRSwgMHgwMEIxLCAweDIy NjQsIDB4MjI2NSwgMHgwMEE1LCAweDAwQjUsIDB4MjIwMiwgMHgyMjExLAorICAgIDB4MjIwRiwg MHgwM0MwLCAweDIyMkIsIDB4MDBBQSwgMHgwMEJBLCAweDAzQTksIDB4MDBFNiwgMHgwMEY4LAor ICAgIDB4MDBCRiwgMHgwMEExLCAweDAwQUMsIDB4MjIxQSwgMHgwMTkyLCAweDIyNDgsIDB4MjIw NiwgMHgwMEFCLAorICAgIDB4MDBCQiwgMHgyMDI2LCAweDAwQTAsIDB4MDBDMCwgMHgwMEMzLCAw eDAwRDUsIDB4MDE1MiwgMHgwMTUzLAorICAgIDB4MjAxMywgMHgyMDE0LCAweDIwMUMsIDB4MjAx RCwgMHgyMDE4LCAweDIwMTksIDB4MDBGNywgMHgyNUNBLAorICAgIDB4MDBGRiwgMHgwMTc4LCAw eDIwNDQsIDB4MDBBNCwgMHgyMDM5LCAweDIwM0EsIDB4RkIwMSwgMHhGQjAyLAorICAgIDB4MjAy MSwgMHgwMEI3LCAweDIwMUEsIDB4MjAxRSwgMHgyMDMwLCAweDAwQzIsIDB4MDBDQSwgMHgwMEMx LAorICAgIDB4MDBDQiwgMHgwMEM4LCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLCAweDAwQ0MsIDB4 MDBEMywgMHgwMEQ0LAorICAgIDB4RjhGRiwgMHgwMEQyLCAweDAwREEsIDB4MDBEQiwgMHgwMEQ5 LCAweDAxMzEsIDB4MDJDNiwgMHgwMkRDLAorICAgIDB4MDBBRiwgMHgwMkQ4LCAweDAyRDksIDB4 MDJEQSwgMHgwMEI4LCAweDAyREQsIDB4MDJEQiwgMHgwMkM3Cit9OworCisvKiBERUMgc3BlY2lh bCBncmFwaGljcyAvIHRlY2huaWNhbCBzZXRzIGZvciBWVCBlbXVsYXRpb24gKi8KKworI2lmZGVm IEtFUk1JVEZPTlQKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9kZWN0ZWNoID0geworICAgIDk0LCAz MywgWDJVX0RFQ3xYMlVfU1RELEFMX1JPTUFOLCJERUMgVGVjaG5pY2FsIiwgImRlYy10ZWNobmlj YWwiLCAwLCAiPiIsCisgICAgICAgICAgICAweEU0MDAsIDB4MjUwYywgMHgyNTAwLCAweDIzMjAs IDB4MjMyMSwgMHgyNTAyLCAweEUyMDQsCisgICAgMHhFMjAzLCAweEUyMDksIDB4RTIwOCwgMHhF MjAyLCAweEUyMDEsIDB4RTIwNywgMHhFMjA2LCAweEUyMDAsCisgICAgMHhFMjA1LCAweEUyMEQs IDB4RTIwQywgMHgyNTcyLCAweDI1NzEsIDB4RTIwRSwgMHhFMjBGLCAweDIzMmEsCisgICAgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweDIyNjQsIDB4MjI2MCwgMHgyMjY1LCAweDIy MmIsCisgICAgMHgyMjM0LCAweDIyMWQsIDB4MjIxZSwgMHgwMGY3LCAweDIyMDYsIDB4MjIwNywg MHgwM2E2LCAweDAzOTMsCisgICAgMHgyMjNjLCAweDIyNDMsIDB4MDM5OCwgMHgwMGQ3LCAweDAz OWIsIDB4MjFkNCwgMHgyMWQyLCAweDIyNjEsCisgICAgMHgyMjBmLCAweDAzYTgsIDB4RTQwMSwg MHgwM2EzLCAweEZGRkQsIDB4ZmZmZCwgMHgyMjFhLCAweDAzYTksCisgICAgMHgwMzllLCAweDAz ZDIsIDB4MjI4MiwgMHgyMjgzLCAweDIyMjksIDB4MjIyYSwgMHgyMjI3LCAweDIyMjgsCisgICAg MHgwMGFjLCAweDAzYjEsIDB4MDNiMiwgMHgwM2M3LCAweDAzYjQsIDB4MDNiNSwgMHgwM2M2LCAw eDAzYjMsCisgICAgMHgwM2I3LCAweDAzYjksIDB4MDNiOCwgMHgwM2JhLCAweDAzYmIsIDB4RkZG RCwgMHgwM2JkLCAweDIyMDIsCisgICAgMHgwM2MwLCAweDAzYzgsIDB4MDNjMSwgMHgwM2MzLCAw eDAzYzQsIDB4RkZGRCwgMHgwMTkyLCAweDAzYzksCisgICAgMHgwM2JlLCAweDAzYzUsIDB4MDNi NiwgMHgyMTkwLCAweDIxOTEsIDB4MjE5MiwgMHgyMTkzCit9OworI2Vsc2UKK3N0cnVjdCB4X3Rv X3VuaWNvZGUgdV9kZWN0ZWNoID0geworICAgIDk0LCAzMywgWDJVX0RFQ3xYMlVfU1RELEFMX1JP TUFOLCJERUMgVGVjaG5pY2FsIiwgImRlYy10ZWNobmljYWwiLCAwLCAiPiIsCisgICAgICAgICAg ICAweDIyMWEsIDB4MjUwYywgMHgyNTAwLCAweDIzMjAsIDB4MjMyMSwgMHgyNTAyLCAweDIzMDgs IC8qIDIxLTI3ICovCisgICAgMHgyMzBhLCAweDIzMDksIDB4MjMwYiwgMHgyNTZkLCAweDI1NzAs IDB4MjU2ZSwgMHgyNTZmLCAweDI1MjUsIC8qIDI4LTJmICovCisgICAgMHgyNTFkLCAweDIyMTEs IDB4MjIxMSwgMHgyNTcyLCAweDI1NzEsIDB4MjMxZCwgMHgyMzFmLCAweDIzMmEsIC8qIDMwLTM3 ICovCisgICAgMHgwMDViLCAweDIwMjIsIDB4MDA1ZCwgMHgwMGIxLCAweDIyNjQsIDB4MjI2MCwg MHgyMjY1LCAweDIyMmIsIC8qIDM4LTNmICovCisgICAgMHgyMjM0LCAweDIyMWQsIDB4MjIxZSwg MHgwMGY3LCAweDI1YjMsIDB4MjViZCwgMHgwM2E2LCAweDAzOTMsIC8qIDQwLTQ3ICovCisgICAg MHgyMjNjLCAweDIyNDMsIDB4MDM5OCwgMHgwMGQ3LCAweDAzOWIsIDB4MjFkNCwgMHgyMWQyLCAw eDIyNjEsIC8qIDQ4LTRmICovCisgICAgMHgyMjBmLCAweDAzYTgsIDB4MjIxOCwgMHgyMjExLCAw eDAwYTcsIDB4MDBiNiwgMHgyMjFhLCAweDAzYTksIC8qIDUwLTU3ICovCisgICAgMHgwMzllLCAw eDAzZDIsIDB4MjI4MiwgMHgyMjgzLCAweDIyMjksIDB4MjIyYSwgMHgyMjI3LCAweDIyMjgsIC8q IDU4LTVmICovCisgICAgMHgwMGFjLCAweDAzYjEsIDB4MDNiMiwgMHgwM2M3LCAweDAzYjQsIDB4 MDNiNSwgMHgwM2M2LCAweDAzYjMsIC8qIDYwLTY3ICovCisgICAgMHgwM2I3LCAweDAzYjksIDB4 MDNiOCwgMHgwM2JhLCAweDAzYmIsIDB4MDNiYywgMHgwM2JkLCAweDIyMDIsIC8qIDY4LTZmICov CisgICAgMHgwM2MwLCAweDAzYzgsIDB4MDNjMSwgMHgwM2MzLCAweDAzYzQsIDB4MDAyMCwgMHgw MTkyLCAweDAzYzksIC8qIDcwLTc3ICovCisgICAgMHgwM2JlLCAweDAzYzUsIDB4MDNiNiwgMHgy MTkwLCAweDIxOTEsIDB4MjE5MiwgMHgyMTkzICAgICAgICAgIC8qIDc4LTdlICovCit9OworI2Vu ZGlmIC8qIEtFUk1JVEZPTlQgKi8KKworI2lmZGVmIEtFUk1JVEZPTlQKK3N0cnVjdCB4X3RvX3Vu aWNvZGUgdV9kZWNzcGVjID0geworICAgIDk0LDMzLFgyVV9ERUN8WDJVX1NURCxBTF9ST01BTiwi REVDIFNwZWNpYWwgR3JhcGhpY3MiLCJkZWMtc3BlY2lhbCIsMCwiMCIsCisgICAgICAgICAgICAw eDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisg ICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJl LCAweDAwMmYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4 MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNi LCAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsCisgICAgMHgwMDQwLCAweDAwNDEsIDB4 MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4 LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYs CisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgw MDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMs IDB4MDA1ZCwgMHgwMDVlLCAweDAwNWYsCisgICAgMHgyNjY2LCAweDI1OTEsIDB4MjQwOSwgMHgy NDBjLCAweDI0MGQsIDB4MjQwYSwgMHgwMGIwLCAweDAwYjEsCisgICAgMHgyNDI0LCAweDI0MGIs IDB4MjUxOCwgMHgyNTEwLCAweDI1MGMsIDB4MjUxNCwgMHgyNTNjLCAweDIzQkEsCisgICAgMHgy M0JCLCAweDI1MDAsIDB4MjNCQywgMHgyM0JELCAweDI1MWMsIDB4MjUyNCwgMHgyNTM0LCAweDI1 MmMsCisgICAgMHgyNTAyLCAweDIyNjQsIDB4MjI2NSwgMHgwM2MwLCAweDIyNjAsIDB4MDBhMywg MHgwMEI3Cit9OworI2Vsc2UKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9kZWNzcGVjID0geworICAg IDk0LDMzLFgyVV9ERUN8WDJVX1NURCxBTF9ST01BTiwiREVDIFNwZWNpYWwgR3JhcGhpY3MiLCJk ZWMtc3BlY2lhbCIsMCwiMCIsCisgICAgICAgICAgICAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAw eDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAy YSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsCisgICAgMHgwMDMwLCAw eDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisg ICAgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLCAweDAwM2MsIDB4MDAzZCwgMHgwMDNl LCAweDAwM2YsCisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4 MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRi LCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4 MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4 LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVlLCAweDAwNWYs CisgICAgMHgyNjY2LCAweDI1OTEsIDB4MjQwOSwgMHgyNDBjLCAweDI0MGQsIDB4MjQwYSwgMHgw MGIwLCAweDAwYjEsCisgICAgMHgyNDI0LCAweDI0MGIsIDB4MjUxOCwgMHgyNTEwLCAweDI1MGMs IDB4MjUxNCwgMHgyNTNjLCAweDI1OTQsCisgICAgMHgyNTAwLCAweDI1MDAsIDB4MjUwMCwgMHgy NTAwLCAweDI1MWMsIDB4MjUyNCwgMHgyNTM0LCAweDI1MmMsCisgICAgMHgyNTAyLCAweDIyNjQs IDB4MjI2NSwgMHgwM2EwLCAweDIyNjAsIDB4MDBhMywgMHgwMEI3Cit9OworI2VuZGlmIC8qIEtF Uk1JVEZPTlQgKi8KKworLyoKKyAgSGF6ZWx0aW5lIDE1MDAvMTUyMCBncmFwaGljIHNldC4gIElu Y2x1ZGVzIHNldmVyYWwgYXBwcm94aW1hdGlvbnM6CisgICAuICgwLDkpIHNob3VsZCBiZSBoZWF2 eSBibGFjayByaWdodCBhcnJvdy4gIFVuaWNvZGUgaGFzIG9uZSBvZiB0aGVzZQorICAgICBhdCBV KzI3QTEgYnV0Li4uCisgICAuICgzLDkpIHNob3VsZCBiZSBoZWF2eSBibGFjayBkb3duIGFycm93 OyBVbmljb2RlIGRvZXNuJ3QgaGF2ZSBvbmUuCisgICAgIFNvIHdlIHVzZSB0aGUgd2hpdGUgdmVy c2lvbnMgb2YgdGhlIGhlYXZ5IGFycm93cyBpbnN0ZWFkLgorICAgLiAoMSw5KSB0aGUgbGV0dGVy cyAiUGUiIGluIG9uZSBjZWxsLCBkb2Vzbid0IGV4aXN0IGluIFVuaWNvZGUuCisgICAgIFN1YnN0 aXR1dGlvbiBpcyBqdXN0ICJQIi4KKyovCitzdHJ1Y3QgeF90b191bmljb2RlIHVfaHoxNTAwID0g eworICAgIDk0LDMzLFgyVV9TVEQsQUxfUk9NQU4sIkhhemVsdGltZSBHcmFwaGljcyIsImh6MTUw MC1ncmFwaGljcyIsMCwiMCIsCisvKiAgICAgMCAgICAgICAxICAgICAgIDIgICAgICAgMyAgICAg ICA0ICAgICAgIDUgICAgICAgNiAgICAgICA3ICAgICAgICAgKi8KKyAgICAgICAgICAgIDB4MDAy MSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywgLyogMCAq LworICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4 MDAyZSwgMHgwMDJmLCAvKiAxICovCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMz LCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIC8qIDIgKi8KKyAgICAweDAwMzgsIDB4 MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwgLyog MyAqLworICAgIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUs IDB4MDA0NiwgMHgwMDQ3LCAvKiA0ICovCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgw MDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsIC8qIDUgKi8KKyAgICAweDAwNTAs IDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1Nywg LyogNiAqLworICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAw NWQsIDB4MDA1ZSwgMHgwMDVmLCAvKiA3ICovCisgICAgMHgyNTAwLCAweDI1MDIsIDB4MjUzYywg MHgyNTM0LCAweDI1MmMsIDB4MjUxNCwgMHgyNTBjLCAweDAwYjEsIC8qIDggKi8KKyAgICAweDIx ZTgsIDB4MDA1MCwgMHgwMGY3LCAweDIxZTksIDB4MjUxMCwgMHgyNTE4LCAweDI1MWMsIDB4MjUy NCwgLyogOSAqLworICAgIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MjUwYywgMHgwMDc0LCAw eDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAvKiBhICovCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3 YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlICAgICAgICAgIC8qIGIgKi8KKworfTsK KworI2lmZGVmIEtFUk1JVEZPTlQKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9oZWF0aDE5ZyA9IHsK KyAgICA5NCwzMyxYMlVfU1RELEFMX1JPTUFOLCJIZWF0aC0xOSBTcGVjaWFsIEdyYXBoaWNzIiwi aDE5LXNwZWNpYWwiLDAsTlVMTCwKKyAgICAgICAgICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMs IDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAweDAwMjgsIDB4MDAyOSwgMHgw MDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKKyAgICAweDAwMzAs IDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywK KyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAw M2UsIDB4MDAzZiwKKyAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwg MHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAw NGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwg MHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKKyAgICAweDAw NTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDI1Y2YsIDB4ZTMw YiwKKyAgICAweDI1MDIsIDB4MjUwMCwgMHgyNTNjLCAweDI1MTAsIDB4MjUxOCwgMHgyNTE0LCAw eDI1MGMsIDB4MDBiMSwKKyAgICAweDIxOTIsIDB4MjU5MiwgMHgwMGY3LCAweDIxOTMsIDB4ZTMy MSwgMHhlMzIwLCAweGUzMjIsIDB4ZTMyOCwKKyAgICAweDI1ODAsIDB4ZTMyNSwgMHhlMzBhLCAw eDI1MmMsIDB4MjUyNCwgMHgyNTM0LCAweDI1MWMsIDB4MjU3MywKKyAgICAweDI1NzEsIDB4MjU3 MiwgMHhlMzExLCAweGUzMTksIDB4ZTMwMCwgMHhlMzA5LCAweDAwYjYKK307CisjZWxzZQorc3Ry dWN0IHhfdG9fdW5pY29kZSB1X2hlYXRoMTlnID0geworICAgIDk0LDMzLFgyVV9TVEQsQUxfUk9N QU4sIkhlYXRoLTE5IFNwZWNpYWwgR3JhcGhpY3MiLCJoMTktc3BlY2lhbCIsMCxOVUxMLAorICAg ICAgICAgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwg MHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAw MmQsIDB4MDAyZSwgMHgwMDJmLAorICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywg MHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LAorICAgIDB4MDAzOCwgMHgwMDM5LCAweDAw M2EsIDB4MDAzYiwgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLAorICAgIDB4MDA0MCwg MHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LAor ICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0 ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAw eDAwNTUsIDB4MDA1NiwgMHgwMDU3LAorICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNWEsIDB4MDA1 YiwgMHgwMDVjLCAweDAwNWQsIDB4MjVjZiwgMHgyNWU1LAorICAgIDB4MjUwMiwgMHgyNTAwLCAw eDI1M2MsIDB4MjUxMCwgMHgyNTE4LCAweDI1MTQsIDB4MjUwYywgMHgwMGIxLAorICAgIDB4MjE5 MiwgMHgyNTkyLCAweDAwZjcsIDB4MjE5MywgMHgyNTkwLCAweDI1OGMsIDB4MjU4YywgMHgyNTkw LAorICAgIDB4MjU4MCwgMHgyNTkwLCAweDI1ZTQsIDB4MjUyYywgMHgyNTI0LCAweDI1MzQsIDB4 MjUxYywgMHgyNTczLAorICAgIDB4MjU3MSwgMHgyNTcyLCAweDI1MDAsIDB4MjUwMCwgMHgyNTAy LCAweDI1MDIsIDB4MDBiNgorfTsKKyNlbmRpZiAvKiBLRVJNSVRGT05UICovCisKKy8qIERHIEdy YXBoaWMgc2V0cyAtICJLRVJNSVRGT05UIiB0aGVzZSBsYXRlci4uLiAqLworCisvKiBNaXNzaW5n LCAgICBiYWNrd2FyZHMgcXVlc3Rpb24gbWFyaworICAgZWlnaHRoIG5vdGUKKyAgICJEVCIgY29u dHJvbCBwaWMKKyAgIGhvcml6b250YWwgc2NhbiBsaW5lcworKi8KK3N0cnVjdCB4X3RvX3VuaWNv ZGUgdV9kZ3NwZWMgPSB7ICAgICAgICAvKiBOZWVkcyB0byBiZSBjaGVja2VkICovCisgICAgOTQs IDMzLCBYMlVfU1RELEFMX1JPTUFOLCJERyBTcGVjaWFsIEdyYXBoaWNzIiwiZGctc3BlY2lhbGdy YXBoaWNzIiwwLE5VTEwsCisgICAgICAgICAgICAweGZmZmQsIDB4ZmZmZCwgMHgyNDI0LCAweDI1 OTQsIDB4MjU5NCwgMHgyNTgxLCAweDI1ODEsCisgICAgMHgyNWExLCAweDI2M2EsIDB4MjYzYiwg MHgyNjY1LCAweDI2NjMsIDB4MjY2MCwgMHgyNWNmLCAweDI1ZDgsCisgICAgMHgyNWNiLCAweDI1 ZDksIDB4MjY0MiwgMHgyNjQwLCAweDI2NmEsIDB4MjY2YywgMHgyNjNjLCAweDIxOTUsCisgICAg MHgyNTgzLCAweDIxYTgsIDB4MjMxZSwgMHgyMTk0LCAweDIyMDcsIDB4MDBmZiwgMHgyMGE3LCAw eDAwYWEsCisgICAgMHgwMGJhLCAweDIzMWMsIDB4MjMxZCwgMHgyNTkxLCAweDI1OTEsIDB4MjU5 MywgMHgyNTYxLCAweDI1NjIsCisgICAgMHgyNTU2LCAweDI1NTUsIDB4MjU2MywgMHgyNTUxLCAw eDI1NTcsIDB4MjU1ZCwgMHgyNTVjLCAweDI1NWIsCisgICAgMHgyNTVlLCAweDI1NWYsIDB4MjU1 YSwgMHgyNTU0LCAweDI1NjksIDB4MjU2NiwgMHgyNTYwLCAweDI1NTAsCisgICAgMHgyNTZjLCAw eDI1NjcsIDB4MjU2OCwgMHgyNTY0LCAweDI1NjUsIDB4MjU1OSwgMHgyNTU4LCAweDI1NTIsCisg ICAgMHgyNTUzLCAweDI1NmIsIDB4MjU2YSwgMHgyNTg4LCAweDI1ODQsIDB4MjU4YywgMHgyNTkw LCAweDI1ODAsCisgICAgMHgwMzkzLCAweDAzYzAsIDB4MDNhMywgMHgwM2E2LCAweDAzOTgsIDB4 MDNkNSwgMHgwM2I1LCAweDAzYTAsCisgICAgMHgwMzllLCAweDAwYjcsIDB4MDNiNywgMHgyNWEw LCAweDAxNzgsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsCisgICAgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkCit9OworCisvKiBNaXNzaW5nOiBh cnJvdy10by1saW5lLCB2YXJpb3VzIG9yaWVudGF0aW9ucyAqLworCitzdHJ1Y3QgeF90b191bmlj b2RlIHVfZGdsaW5lID0geworICAgIDk0LCAzMywgWDJVX1NURCxBTF9ST01BTiwiREcgTGluZSBE cmF3aW5nIiwiZGctbGluZWRyYXdpbmciLDAsTlVMTCwKKyAgICAgICAgICAgIDB4MjUwYywgMHgy NTEwLCAweDI1MTQsIDB4MjUxOCwgMHgyNTJjLCAweDI1MjQsIDB4MjUxYywKKyAgICAweDI1MzQs IDB4MjUzYywgMHgyNTAyLCAweDI1MDAsIDB4MjE5ZiwgMHgyMWU1LCAweDIxZTQsIDB4MjFhMSwK KyAgICAweDI1MDYsIDB4MjUwZiwgMHgyNTEzLCAweDI1MTcsIDB4MjUxYiwgMHgyNTMzLCAweDI1 MmIsIDB4MjUyMywKKyAgICAweDI1M2IsIDB4MjU0YiwgMHgyNTAzLCAweDI1MDEsIDB4MjUwNCwg MHgwMGY3LCAweDAwYTIsIDB4MjEyMiwKKyAgICAweDAwYWUsIDB4MDBhOSwgMHhmZmZkLCAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZm ZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQKK307 CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9kZ3dvcmQgPSB7CisgICAgOTQsIDMzLCBYMlVfU1RE LEFMX1JPTUFOLCJERyBXb3JkIFByb2Nlc3NpbmciLCJkZy13b3JkcHJvY2Vzc2luZyIsMCxOVUxM LAorICAgICAgICAgICAgMHgyMzA4LCAweDIzMGEsIDB4MjMwOSwgMHgyMzBiLCAweDAxOTIsIDB4 MjIzYywgMHgyMjAyLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweDIzMjAsIDB4MjMyMSwgMHgyMjFh LCAweGZmZmQsIDB4MjIxZSwgMHgyMjFkLAorICAgIDB4MjA3MCwgMHgwMGI5LCAweDAwYjIsIDB4 MDBiMywgMHgyMDc0LCAweDIwNzUsIDB4MjA3NiwgMHgyMDc3LAorICAgIDB4MjA3OCwgMHgyMDc5 LCAweDIyNjAsIDB4ZmZmZCwgMHgyMWVmLCAweGZmZmQsIDB4MjFlNSwgMHgwMGI3LAorICAgIDB4 MjAzYywgMHgwM2IxLCAweDAzYjIsIDB4MDNiMywgMHgwM2I0LCAweDAzYjUsIDB4MDNiNiwgMHgw M2I3LAorICAgIDB4MDNiOCwgMHgwM2I5LCAweDAzYmEsIDB4MDNiYiwgMHgwM2JjLCAweDAzYmQs IDB4MDNiZSwgMHgwM2JmLAorICAgIDB4MDNjMCwgMHgwM2MxLCAweDAzYzMsIDB4MDNjNCwgMHgw M2M1LCAweDAzYzYsIDB4MDNjNywgMHgwM2M4LAorICAgIDB4MDNjOSwgMHgwM2E5LCAweDAzOTQs IDB4MDBiNiwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLAorICAgIDB4MjJhNiwgMHgy NWM2LCAweDI1YjYsIDB4MjViNywgMHgyNWMwLCAweDI1YjIsIDB4MjViYywgMHgyMzI3LAorICAg IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MjVlMywg MHgyNWUyLAorICAgIDB4MjA4MCwgMHgyMDgxLCAweDIwODIsIDB4MjA4MywgMHgyMDg0LCAweDIw ODUsIDB4MjA4NiwgMHgyMDg3LAorICAgIDB4MjA4OCwgMHgyMDg5LCAweGZmZmQsIDB4MjE5MSwg MHgyMTkyLCAweDIxOTAsIDB4MjE5MworfTsKKworLyogSFAgR3JhcGhpYyBzZXRzIC0gIktFUk1J VEZPTlQiIHRoZXNlIGxhdGVyLi4uICovCisKKy8qCisgIE1hbnkgYXJlIG1pc3NpbmcgZnJvbSBV bmljb2RlLAorICBTaW5nbGUtdG8tdHJpcGxlLWxpbmUgYm94LWRyYXdpbmcgY2hhcmFjdGVycy4K KyAgRG91YmxlL2RvdWJsZSBjcm9zcyAmIHNvbWUgb3RoZXJzLgorKi8KK3N0cnVjdCB4X3RvX3Vu aWNvZGUgdV9ocGxpbmUgPSB7ICAgICAgICAvKiBOZWVkcyB0byBiZSBjaGVja2VkICovCisgICAg OTQsIDMzLCBYMlVfU1RELEFMX1JPTUFOLCJIUCBMaW5lIERyYXdpbmcgR3JhcGhpY3MiLAorICAg ICJocC1saW5lLWRyYXdpbmciLDAsTlVMTCwKKyAgICAgICAgICAgIDB4MjUyMCwgMHgyNTI4LCAw eDI1MmYsIDB4MjUzNywgMHgyNTVmLCAweDI1NjIsIDB4MjU2NCwKKyAgICAweDI1NjcsIDB4MjU1 MSwgMHgyNTQyLCAweDI1M2YsIDB4MjU1MCwgMHgyMzBhLCAweDI1MDIsIDB4MjUzYywKKyAgICAw eDI1NGIsIDB4MjUyMywgMHgyNTJiLCAweDI1MzMsIDB4MjUzYiwgMHgyNTFjLCAweDI1MjQsIDB4 MjUyYywKKyAgICAweDI1MzQsIDB4MjU1MCwgMHgyNTAzLCAweDI1MDEsIDB4MjU2YiwgMHgyMzA4 LCAweDI1NmEsIDB4MjU2YywKKyAgICAweDI1NWUsIDB4MjUxNywgMHgyNTQ5LCAweDI1ODgsIDB4 MjU4YywgMHgyNThlLCAweDI1MTQsIDB4MjUxOCwKKyAgICAweDI1MTAsIDB4MjU1NSwgMHgyNTJj LCAweDI1NTYsIDB4MjU1NiwgMHgyNTQ3LCAweDI1NDgsIDB4MjU1NSwKKyAgICAweDIzMGIsIDB4 MjUwZiwgMHgyNTBjLCAweDI1MWIsIDB4MjUxMCwgMHgyNTI0LCAweDI1NGEsIDB4MjUxMywKKyAg ICAweDI1ODQsIDB4MjMwOSwgMHgyNTgyLCAweDI1NjEsIDB4MjUwNCwgMHgyNTU5LCAweDI1NzYs IDB4MjU2NSwKKyAgICAweDI1NWUsIDB4MjUxNywgMHgyNTQ5LCAweDI1ODgsIDB4MjU4YywgMHgy NThlLCAweDI1MTQsIDB4MjUxOCwKKyAgICAweDI1MTAsIDB4MjU1NSwgMHgyNTJjLCAweDI1NTYs IDB4MjU1NiwgMHgyNTQ3LCAweDI1NDgsIDB4MjU1NSwKKyAgICAweDIzMGIsIDB4MjUwZiwgMHgy NTBjLCAweDI1MWIsIDB4MjUxMCwgMHgyNTI0LCAweDI1NGEsIDB4MjUxMywKKyAgICAweDI1ODQs IDB4MjMwOSwgMHgyNTgyLCAweDI1NjEsIDB4MjUwNCwgMHgyNTU5LCAweDI1NzYKK307CisKK3N0 cnVjdCB4X3RvX3VuaWNvZGUgdV9ocG1hdGggPSB7CisgICAgOTQsIDMzLCBYMlVfU1RELEFMX1JP TUFOLCJIUCBNYXRoL1RlY2huaWNhbCIsImhwLW1hdGgvdGVjaG5pY2FsIiwwLE5VTEwsCisgICAg ICAgICAgICAweDIyMWEsIDB4MjIyMywgMHgwMGE3LCAweDIyMDcsIDB4MDBiMSwgMHgwM2IxLCAw eDIzMjAsCisgICAgMHgwMGY3LCAweDIyNDMsIDB4MDNhMCwgMHgwMzkzLCAweDAzYzgsIDB4MjI2 MSwgMHgwM2E2LCAweDAzOWUsCisgICAgMHgyMDcwLCAweDAwYjksIDB4MDBiMiwgMHgwMGIzLCAw eDIwNzQsIDB4MjA3NSwgMHgyMDc2LCAweDIwNzcsCisgICAgMHgyMDc4LCAweDIwNzksIDB4MDNh OSwgMHgwMzliLCAweDIyMWUsIDB4MjMyMSwgMHgyMDIwLCAweDAzYTMsCisgICAgMHgwMGI2LCAw eDAzYjEsIDB4MDNiMiwgMHgwM2M4LCAweDAzZDUsIDB4MDNiNSwgMHgyMjAyLCAweDAzYmIsCisg ICAgMHgwM2I3LCAweDAzYjksIDB4MDM5OCwgMHgwM2JhLCAweDAzYzksIDB4MDNiYywgMHgwM2Jk LCAweDAzYzEsCisgICAgMHgwM2MwLCAweDAzYjMsIDB4MDNiOCwgMHgwM2MzLCAweDAzYzQsIDB4 MDNiZSwgMHgwMzk0LCAweDAzYjQsCisgICAgMHgwMGQ3LCAweDAzYzUsIDB4MDNiNiwgMHgyMTkx LCAweDIxOTIsIDB4MDNkMiwgMHgyMTkwLCAweDIxOTMsCisgICAgMHgwMGI2LCAweDAzYjEsIDB4 MDNiMiwgMHgwM2M4LCAweDAzZDUsIDB4MDNiNSwgMHgyMjAyLCAweDAzYmIsCisgICAgMHgwM2I3 LCAweDAzYjksIDB4MDM5OCwgMHgwM2JhLCAweDAzYzksIDB4MDNiYywgMHgwM2JkLCAweDAzYzEs CisgICAgMHgwM2MwLCAweDAzYjMsIDB4MDNiOCwgMHgwM2MzLCAweDAzYzQsIDB4MDNiZSwgMHgw Mzk0LCAweDAzYjQsCisgICAgMHgwMGQ3LCAweDAzYzUsIDB4MDNiNiwgMHgyMTkxLCAweDIxOTIs IDB4MDNkMiwgMHgyMTkwCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfdHZpZyA9IHsKKyAg ICAxNSw2NSwwLDAsIlRlbGV2aWRlbyBTcGVjaWFsIEdyYXBoaWNzIiwidHZpLXNwZWNpYWwiLDAs TlVMTCwKKyAgICAgICAgICAgIDB4MjU3MCwgMHgyNTZELCAweDI1NkUsIDB4MjU2RiwgMHgyNTE0 LCAweDI1MEMsIDB4MjUxMCwKKyAgICAweDI1MTgsIDB4MjUzQywgMHgyNTAyLCAweDI1MDAsIDB4 MjUyNCwgMHgyNTFDLCAweDI1MkMsIDB4MjUzNAorfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1 X3d5c2VfZ24gPSB7CisjaWZkZWYgQ09NTUVOVAorICAgIDE2LDE2LDAsMCwiV3lzZSBOb3JtYWwt TW9kZSBHcmFwaGljcyIsInd5LWdyYXBoaWNzLW5vcm1hbCIsMCxOVUxMLAorICAgIDB4MjUyQywg MHgyNTE0LCAweDI1MEMsIDB4MjUxMCwgMHgyNTFDLCAweDI1MTgsIDB4MjUwMiwgMHgyNTg4LAor ICAgIDB4MjUzQywgMHgyNTI0LCAweDI1MDAsIDB4MjU5MiwgMHgyNTUwLCAweDI1MzQsIDB4MjU1 MSwgMHgyNTkxCisjZWxzZQorICAgIDgwLDQ4LDAsMCwiV3lzZSBOb3JtYWwtTW9kZSBHcmFwaGlj cyIsInd5LWdyYXBoaWNzLW5vcm1hbCIsMCxOVUxMLAorICAgIDB4MjUyQywgMHgyNTE0LCAweDI1 MEMsIDB4MjUxMCwgMHgyNTFDLCAweDI1MTgsIDB4MjUwMiwgMHgyNTg4LAorICAgIDB4MjUzQywg MHgyNTI0LCAweDI1MDAsIDB4MjU5MiwgMHgyNTUwLCAweDI1MzQsIDB4MjU1MSwgMHgyNTkxLAor ICAgIDB4MjUyQywgMHgyNTE0LCAweDI1MEMsIDB4MjUxMCwgMHgyNTFDLCAweDI1MTgsIDB4MjUw MiwgMHgyNTg4LAorICAgIDB4MjUzQywgMHgyNTI0LCAweDI1MDAsIDB4MjU5MiwgMHgyNTUwLCAw eDI1MzQsIDB4MjU1MSwgMHgyNTkxLAorICAgIDB4MjUyQywgMHgyNTE0LCAweDI1MEMsIDB4MjUx MCwgMHgyNTFDLCAweDI1MTgsIDB4MjUwMiwgMHgyNTg4LAorICAgIDB4MjUzQywgMHgyNTI0LCAw eDI1MDAsIDB4MjU5MiwgMHgyNTUwLCAweDI1MzQsIDB4MjU1MSwgMHgyNTkxLAorICAgIDB4MjUy QywgMHgyNTE0LCAweDI1MEMsIDB4MjUxMCwgMHgyNTFDLCAweDI1MTgsIDB4MjUwMiwgMHgyNTg4 LAorICAgIDB4MjUzQywgMHgyNTI0LCAweDI1MDAsIDB4MjU5MiwgMHgyNTUwLCAweDI1MzQsIDB4 MjU1MSwgMHgyNTkxLAorICAgIDB4MjUyQywgMHgyNTE0LCAweDI1MEMsIDB4MjUxMCwgMHgyNTFD LCAweDI1MTgsIDB4MjUwMiwgMHgyNTg4LAorICAgIDB4MjUzQywgMHgyNTI0LCAweDI1MDAsIDB4 MjU5MiwgMHgyNTUwLCAweDI1MzQsIDB4MjU1MSwgMHgyNTkxCisjZW5kaWYgLyogQ09NTUVOVCAq LworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X3d5c2VfZzEgPSB7CisgICAgNzksNDgsMCww LCJXeXNlIEdyYXBoaWNzIDEiLCJ3eS1ncmFwaGljcy0xIiwwLE5VTEwsCisgICAgMHgyMDcwLCAw eDAwQjksIDB4MDBCMiwgMHgwMEIzLCAweDIwNzQsIDB4MjA3NSwgMHgyMDc1LCAweDIwNzcsCisg ICAgMHgyMDc4LCAweDIwNzksIDB4RkZGRCwgMHhGRkZELCAweDI1QkEsIDB4MjVDNCwgMHgyNUIy LCAweDI1QkMsCisgICAgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4 RkZGRCwgMHhGRkZELCAweEZGRkQsCisgICAgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZE LCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsCisgICAgMHhGRkZELCAweEZGRkQsIDB4 RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsCisgICAgMHhGRkZE LCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQs CisgICAgMHgyMDgwLCAweDIwODEsIDB4MjA4MiwgMHgyMDgzLCAweDIwODQsIDB4MjA4NSwgMHgy MDg2LCAweDIwODcsCisgICAgMHgyMDg4LCAweDIwODksIDB4MjUxOCwgMHgyNTEwLCAweDI1MEMs IDB4MjUxNCwgMHgyNTNDLCAweDI1OEMsCisgICAgMHgyNTkwLCAweDI1MDAsIDB4MjU4NCwgMHgy NTgwLCAweDI1MUMsIDB4MjUyNCwgMHgyNTM0LCAweDI1MkMsCisgICAgMHgyNTAyLCAweEZGRkQs IDB4MjU2RSwgMHgyNTZGLCAweDI1NzAsIDB4MjU2RCwgMHgyNThDCit9OworCitzdHJ1Y3QgeF90 b191bmljb2RlIHVfd3lzZV9nMiA9IHsKKyAgICA0MSw2NCwwLDAsIld5c2UgR3JhcGhpY3MgMiIs Ind5LWdyYXBoaWNzLTIiLDAsTlVMTCwKKyAgICAweDI1MEMsIDB4RkZGRCwgMHhGRkZELCAweEZG RkQsIDB4MjUxMCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwKKyAgICAweDI1MTQsIDB4RkZGRCwg MHhGRkZELCAweEZGRkQsIDB4MjUxOCwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwKKyAgICAweDI1 MkMsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4MjUyNCwgMHhGRkZELCAweEZGRkQsIDB4RkZG RCwKKyAgICAweDI1MUMsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4MjUzNCwgMHhGRkZELCAw eEZGRkQsIDB4RkZGRCwKKyAgICAweDI1MDAsIDB4RkZGRCwgMHhGRkZELCAweEZGRkQsIDB4MjUw MiwgMHhGRkZELCAweEZGRkQsIDB4RkZGRCwKKyAgICAweDI1M0MKK307CisKKyNpZmRlZiBLRVJN SVRGT05UCitzdHJ1Y3QgeF90b191bmljb2RlIHVfd3lzZV9nMyA9IHsKKyAgICAzMSw2NSwwLDAs Ild5c2UgR3JhcGhpY3MgMyIsInd5LWdyYXBoaWNzLTMiLDAsTlVMTCwKKyAgICAgICAgICAgIDB4 MjU3MCwgMHgyNTZELCAweDI1NkUsIDB4MjU2RiwgMHgyNTE0LCAweDI1MEMsIDB4MjUxMCwKKyAg ICAweDI1MTgsIDB4MjUzQywgMHgyNTAyLCAweDI1MDAsIDB4MjUyNCwgMHgyNTFDLCAweDI1MkMs IDB4MjUzNCwKKyAgICAweDIzQkEsIDB4MjNCRCwgMHgyNjY2LCAweEUzMjgsIDB4RTMyMSwgMHhF MzIwLCAweEUzMjIsIDB4MjU5MCwKKyAgICAweDI1ODQsIDB4MjU4QywgMHgyNTgwLCAweEUzMjMs IDB4RTMyNiwgMHhFMzI3LCAweEUzMjksIDB4MjU4QworfTsKKyNlbHNlCitzdHJ1Y3QgeF90b191 bmljb2RlIHVfd3lzZV9nMyA9IHsKKyAgICAzMSw2NSwwLDAsIld5c2UgR3JhcGhpY3MgMyIsInd5 LWdyYXBoaWNzLTMiLDAsTlVMTCwKKyAgICAgICAgICAgIDB4MjU3MCwgMHgyNTZELCAweDI1NkUs IDB4MjU2RiwgMHgyNTE0LCAweDI1MEMsIDB4MjUxMCwKKyAgICAweDI1MTgsIDB4MjUzQywgMHgy NTAyLCAweDI1MDAsIDB4MjUyNCwgMHgyNTFDLCAweDI1MkMsIDB4MjUzNCwKKyAgICAweDI1MDAs IDB4MjUwMCwgMHgyNjY2LCAweDI1OTAsIDB4MjU5MCwgMHgyNThjLCAweDI1OGMsIDB4MjU5MCwK KyAgICAweDI1ODQsIDB4MjU4QywgMHgyNTgwLCAweDI1ODgsIDB4MjU4OCwgMHgyNTg4LCAweDI1 ODgsIDB4MjU4QworfTsKKyNlbmRpZiAvKiBLRVJNSVRGT05UICovCisvKgorICBRTlggQ29uc29s ZSAgLS0gIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBDUDQzNyBleGNlcHQgZm9yIHRoZSBj b2RlCisgIHBvaW50IGF0IDB4RUUgKGVwc2lsb24gdnMgZWxlbWVudC1vZiksIHdoaWNoIEkgdGhp bmsgd2FzIGp1c3QgYSBtaXN0YWtlCisgIGluIHJlYWRpbmcgZ2x5cGhzIGJ5IHRoZSBRTlggcGVv cGxlLCBidXQgd2hvIGtub3dzLiAgQWxzbyB0aGUgZ2x5cGggYXQKKyAgMHhFRCBtaWdodCBiZSBh IGZpIChhcyBpdCBpcyBpbiBDUDQzNywgYW5kIGFzIEkgaGF2ZSBpdCBoZXJlKSBvciBpdCBtaWdo dAorICBiZSBhIG51bGwtc2V0IHN5bWJvbC4KKyovCitzdHJ1Y3QgeF90b191bmljb2RlIHVfcW54 Z3JwaCA9IHsKKyAgICAxMjgsMCwwLDAsIlFOWCBDb25zb2xlIiwicW54LWNvbnNvbGUiLDAsTlVM TCwKKyAgICAweDAwYzcsIDB4MDBmYywgMHgwMGU5LCAweDAwZTIsIDB4MDBlNCwgMHgwMGUwLCAw eDAwZTUsIDB4MDBlNywgLyogMTI4ICovCisgICAgMHgwMGVhLCAweDAwZWIsIDB4MDBlOCwgMHgw MGVmLCAweDAwZWUsIDB4MDBlYywgMHgwMGM0LCAweDAwYzUsIC8qIDEzNiAqLworICAgIDB4MDBj OSwgMHgwMGU2LCAweDAwYzYsIDB4MDBmNCwgMHgwMGY2LCAweDAwZjIsIDB4MDBmYiwgMHgwMGY5 LCAvKiAxNDQgKi8KKyAgICAweDAwZmYsIDB4MDBkNiwgMHgwMGRjLCAweDAwYTIsIDB4MDBhMywg MHgwMGE1LCAweDIwYTcsIDB4MDE5MiwgLyogMTUyICovCisgICAgMHgwMGUxLCAweDAwZWQsIDB4 MDBmMywgMHgwMGZhLCAweDAwZjEsIDB4MDBkMSwgMHgwMGFhLCAweDAwYmEsIC8qIDE2MCAqLwor ICAgIDB4MDBiZiwgMHgyMzEwLCAweDAwYWMsIDB4MDBiZCwgMHgwMGJjLCAweDAwYTEsIDB4MDBh YiwgMHgwMGJiLCAvKiAxNjggKi8KKyAgICAweDI1OTEsIDB4MjU5MiwgMHgyNTkzLCAweDI1MDIs IDB4MjUyNCwgMHgyNTYxLCAweDI1NjIsIDB4MjU1NiwgLyogMTc2ICovCisgICAgMHgyNTU1LCAw eDI1NjMsIDB4MjU1MSwgMHgyNTU3LCAweDI1NWQsIDB4MjU1YywgMHgyNTViLCAweDI1MTAsIC8q IDE4NCAqLworICAgIDB4MjUxNCwgMHgyNTM0LCAweDI1MmMsIDB4MjUxYywgMHgyNTAwLCAweDI1 M2MsIDB4MjU1ZSwgMHgyNTVmLCAvKiAxOTIgKi8KKyAgICAweDI1NWEsIDB4MjU1NCwgMHgyNTY5 LCAweDI1NjYsIDB4MjU2MCwgMHgyNTUwLCAweDI1NmMsIDB4MjU2NywgLyogMjAwICovCisgICAg MHgyNTY4LCAweDI1NjQsIDB4MjU2NSwgMHgyNTU5LCAweDI1NTgsIDB4MjU1MiwgMHgyNTUzLCAw eDI1NmIsIC8qIDIwOCAqLworICAgIDB4MjU2YSwgMHgyNTE4LCAweDI1MGMsIDB4MjU4OCwgMHgy NTg0LCAweDI1OGMsIDB4MjU5MCwgMHgyNTgwLCAvKiAyMTYgKi8KKyAgICAweDIyMWQsIDB4MDBk ZiwgMHgwMzkzLCAweDAzYzAsIDB4MDNhMywgMHgwM2MzLCAweDAwYjUsIDB4MDNjNCwgLyogMjI0 ICovCisgICAgMHgwM2E2LCAweDAzOTgsIDB4MDNhOSwgMHgwM2I0LCAweDIyMWUsIDB4MDNjNiwg MHgyMjA4LCAweDIyMjksIC8qIDIzMiAqLworICAgIDB4MjI2MSwgMHgwMGIxLCAweDIyNjUsIDB4 MjI2NCwgMHgyMzIwLCAweDIzMjEsIDB4MDBmNywgMHgyMjQ4LCAvKiAyNDAgKi8KKyAgICAweDAw YjAsIDB4MjIxOSwgMHgwMGI3LCAweDIyMWEsIDB4MjA3ZiwgMHgwMGIyLCAweDI1YWUsIDB4MDBh MCAgLyogMjQ4ICovCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfc25pYnJhY2sgPSB7Cisg ICAgOTQsIDMzLCAwLCAwLCJTaWVtZW5zIE5peGRvcmYgOTc4MDEgQnJhY2tldHMiLCJzbmktYnJh Y2tldHMiLDAsInciLAorICAgICAgICAgICAgMHgyNTkwLCAweDI1OGMsIDB4MjU4NCwgMHgyNTgw LCAweDI1OTAsIDB4MjU4YywgMHgyNTg0LCAvKiBhMC03ICovCisgICAgMHgyNTgwLCAweDIzMjks IDB4MjMyNywgMHgyNWFmLCAweDAwYjcsIDB4MjViOSwgMHgyNWMxLCAweDAwM2MsIC8qIGE4LWYg Ki8KKyAgICAweDI1M2IsIDB4MjUzMywgMHgyNTIzLCAweDI1MmIsIDB4MjMyOSwgMHgyMzJhLCAw eDIzMDQsIDB4MjMwMywgLyogYjAtNyAqLworICAgIDB4MjVlNCwgMHgyNWU1LCAweDI1ZTMsIDB4 MjVlMiwgMHgyNTNmLCAweDIzMWIsIDB4MjVjZiwgMHgyNWNiLCAvKiBiOC1mICovCisgICAgMHgy NTAyLCAweDI1MDAsIDB4MjUwYywgMHgyNTEwLCAweDI1MTQsIDB4MjUxOCwgMHgyNTFjLCAweDI1 MjQsIC8qIGMwLTcgKi8KKyAgICAweDI1MmMsIDB4MjUzNCwgMHgyNTNjLCAweDIxOTIsIDB4MjE5 MCwgMHgyMTkxLCAweDIxOTMsIDB4MjU3NSwgLyogYzgtZiAqLworICAgIDB4MjU3NywgMHgyNWQ0 LCAweDI1NmQsIDB4MjU2ZSwgMHgyNTcwLCAweDI1NmYsIDB4MjUxYywgMHgyNTI0LCAvKiBkMC03 ICovCisgICAgMHgyNTJjLCAweDI1MzQsIDB4MjUzYywgMHgyNTNjLCAweDI1OTIsIDB4MjU5MSwg MHgyNTkyLCAweDI1OTMsIC8qIGQ4LWYgKi8KKyAgICAweDI1MDMsIDB4MjUwMSwgMHgyNTBmLCAw eDI1MTMsIDB4MjUxNywgMHgyNTFiLCAweDI1MjMsIDB4MjUyYiwgLyogZTAtNyAqLworICAgIDB4 MjUzMywgMHgyNTNiLCAweDI1NGIsIDB4Mjc5ZSwgMHgyMTkwLCAweDIxOTEsIDB4MjE5MywgMHgy NTc5LCAvKiBlOC1mICovCisgICAgMHgyNTdiLCAweDIyNjEsIDB4MjU1NCwgMHgyNTU3LCAweDI1 NWEsIDB4MjU1ZCwgMHgyNTIzLCAweDI1MmIsIC8qIGYwLTcgKi8KKyAgICAweDI1MzMsIDB4MjUz YiwgMHgyNTRiLCAweDI1NGIsIDB4MDM5MywgMHgwM2MzLCAweDAzYzQgICAgICAgICAgLyogZjgt ZiAqLworfTsKKworc3RydWN0IHhfdG9fdW5pY29kZSB1X3NuaWJsYW5rcyA9IHsKKyAgICA5NCwg MzMsIDAsIDAsIlNpZW1lbnMgTml4ZG9yZiA5NzgwMSBCbGFua3MiLCJzbmktYmxhbmtzIiwwLCJ5 IiwKKyAgICAgICAgICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAw eDAwMjAsIDB4MDAyMCwgLyogYTAtNyAqLworICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4 MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBhOC1mICovCisgICAgMHgw MDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAw MjAsIC8qIGIwLTcgKi8KKyAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAy MCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgLyogYjgtZiAqLworICAgIDB4MDAyMCwgMHgwMDIw LCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAvKiBjMC03 ICovCisgICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwg MHgwMDIwLCAweDAwMjAsIC8qIGM4LWYgKi8KKyAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAw eDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgLyogZDAtNyAqLworICAgIDB4 MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgw MDIwLCAvKiBkOC1mICovCisgICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAw MjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIC8qIGUwLTcgKi8KKyAgICAweDAwMjAsIDB4MDAy MCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgLyogZTgt ZiAqLworICAgIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAs IDB4MDAyMCwgMHgwMDIwLCAvKiBmMC03ICovCisgICAgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwg MHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwICAgICAgICAgIC8qIGY4LWYgKi8KK307CisK K3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9zbmlmYWNldCA9IHsKKyAgICA5NCwgMzMsIDAsIDAsIlNp ZW1lbnMgTml4ZG9yZiA5NzgwMSBGYWNldCIsInNuaS1mYWNldCIsMCwiYyIsCisgICAgICAgICAg ICAweDAwMjAsIDB4MjU4MSwgMHgyNTgyLCAweDI1ODMsIDB4MjU4NCwgMHgyNTg1LCAweDI1ODcs IC8qIGExLWE3ICovCisgICAgMHgwMDVmLCAweDI1ODEsIDB4MjU4MiwgMHgyNTgzLCAweDI1ODQs IDB4MjU4NSwgMHgyNTg2LCAweDI1ODcsIC8qIGE4LWFmICovCisgICAgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIGIwLWI3 ICovCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwg MHhmZmZkLCAweGZmZmQsIC8qIGI4LWJmICovCisgICAgMHgyNTAzLCAweDI1MDEsIDB4MjUwZiwg MHgyNTEzLCAweDI1MTcsIDB4MjUxYiwgMHgyNTIzLCAweDI1MmIsIC8qIGMwLWM3ICovCisgICAg MHgyNTMzLCAweDI1M2IsIDB4MjU0YiwgMHgyNThmLCAweDI1OTUsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIC8qIGM4LWNmICovCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIC8qIGQwLWQ3ICovCisgICAgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MjU5MSwgMHgyNTkxLCAweDI1ODgsIC8q IGQ4LWRmICovCisgICAgMHgyNTAzLCAweDI1MDEsIDB4MjUwZiwgMHgyNTEzLCAweDI1MTcsIDB4 MjUxYiwgMHgyNTIzLCAweDI1MmIsIC8qIGUwLWU3ICovCisgICAgMHgyNTMzLCAweDI1M2IsIDB4 MjU0YiwgMHhmZmZkLCAweGZmZmQsIDB4MjU5MywgMHgyNTkzLCAweDAwMjAsIC8qIGU4LWVmICov CisgICAgMHgyNTg1LCAweDI1ODYsIDB4MjU4NywgMHgyNTg4LCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIC8qIGYwLWY3ICovCisgICAgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweDI1OTQsIDB4MjU5NCwgMHhmZmZkICAgICAgICAgIC8qIGY4LWZlICovCit9OworCitz dHJ1Y3QgeF90b191bmljb2RlIHVfc25paWJtID0geworICAgIDk0LCAzMywgMCwgMCwiU2llbWVu cyBOaXhkb3JmIDk3ODAxIElCTSIsInNuaS1pYm0iLDAsInYiLAorICAgICAgICAgICAgMHgyNjNh LCAweDI2M2IsIDB4MjY2NSwgMHgyNjY2LCAweDI2NjMsIDB4MjY2MCwgMHgyNWNmLAorICAgIDB4 MjVkOCwgMHgyNWNiLCAweDI1ZDksIDB4MjY0MiwgMHgyNjQwLCAweDI2NmEsIDB4MjY2YiwgMHgy NjNjLAorICAgIDB4MjViYSwgMHgyNWM0LCAweDIxOTUsIDB4MjAzYywgMHgwMGI2LCAweDI1YzEs IDB4MjU4MiwgMHgyMWE4LAorICAgIDB4MjE5MSwgMHgyMTkzLCAweDIxOTIsIDB4MjE5MCwgMHgy MzE5LCAweDIxOTQsIDB4MjViNCwgMHgyNWJlLAorICAgIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAvKiBIZXggKi8KKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgLyogYnl0ZXMgKi8KKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweDIwNzAsIDB4 MDBiOSwgMHgwMGIyLCAweDAwYjMsIDB4MjA3NCwgMHgyMDc1LCAweDIwNzYsIDB4MjA3NywKKyAg ICAweDIwNzgsIDB4MjA3OSwgMHgyMDdiLCAweDIwN2EsIDB4ZmZmZCwgMHhmZmZkLCAweDIzMjAs IDB4MjMyMSwKKyAgICAweDIwODAsIDB4MjA4MSwgMHgyMDgyLCAweDIwODMsIDB4MjA4NCwgMHgy MDg1LCAweDIwODYsIDB4MjA4NywKKyAgICAweDIwODgsIDB4MjA4OSwgMHgyMDhiLCAweDIwOGEs IDB4MjIxZSwgMHgwM2IxLCAweDAzYTYKK307CisKK3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9zbmll dXJvID0geworICAgIDk0LCAzMywgMCwgMCwiU2llbWVucyBOaXhkb3JmIDk3ODAxIEV1cm8iLCJz bmktZXVybyIsMCwidSIsCisgICAgICAgICAgICAweDAwZTAsIDB4MDBlMSwgMHgwMGUyLCAweDAw ZTQsIDB4MDBlNSwgMHgwMTA1LCAweDAwZTMsCisgICAgMHgwMTAzLCAweDAwZTYsIDB4MDBlNywg MHgwMTBkLCAweDAxMDcsIDB4MDBmMCwgMHgwMTExLCAweDAxMGYsCisgICAgMHgwMGU4LCAweDAw ZTksIDB4MDBlYSwgMHgwMGViLCAweDAxMWIsIDB4MDExOSwgMHgwMTFmLCAweDAxMzEsCisgICAg MHgwMGVlLCAweDAwZWMsIDB4MDFkMCwgMHgwMGVmLCAweDAxMzMsIDB4MDEzYSwgMHgwMTQyLCAw eDAxM2UsCisgICAgMHgwMTQ4LCAweDAxNDQsIDB4MDBmMSwgMHgwMGYyLCAweDAwZjMsIDB4MDBm NCwgMHgwMGY2LCAweDAwZjUsCisgICAgMHgwMGY4LCAweDAxNTEsIDB4MDE1MywgMHgwMGZlLCAw eDAxNTksIDB4MDE1NSwgMHgwMTYxLCAweDAxNWIsCisgICAgMHgwMTVmLCAweDAwZGYsIDB4MDE2 MywgMHgwMTY1LCAweDAwZjksIDB4MDBmYSwgMHgwMGZiLCAweDAwZmMsCisgICAgMHgwMTZmLCAw eDAxNzEsIDB4MDBmZCwgMHgwMGZmLCAweDAxN2UsIDB4MDE3YSwgMHgwMTdjLCAweDAwYzksCisg ICAgMHgwMGM1LCAweDAwYzYsIDB4MDBkMCwgMHgwMTMwLCAweDAxMzIsIDB4MDE2NywgMHgwMGQ4 LCAweDAxNTIsCisgICAgMHgwMGRlLCAweDAwYzQsIDB4MDBkNiwgMHgwMGRjLCAweDAwYTcsIDB4 MDAyNCwgMHgwMGEzLCAweDAwYWUsCisgICAgMHgwMGE5LCAweDAzYTksIDB4MDBiNSwgMHgwMGIw LCAweDAwYzcsIDB4MjBhNywgMHgwM2MwLCAweDAyZDgsCisgICAgMHgwMGI0LCAweDAyZGQsIDB4 MDBkMSwgMHgyNTE0LCAweDI1MTgsIDB4MDA3ZSwgMHgwMmM3Cit9OworCitzdHJ1Y3QgeF90b191 bmljb2RlIHVfc21pbGV5ID0geworICAgIDMyLDAsWDJVX0NYRywwLCJQQyBDMCBHcmFwaGljcyIs InNtaWxleS1mYWNlcyIsMCxOVUxMLAorICAgIDB4MDBhMCwgMHgyNjNhLCAweDI2M2IsIDB4MjY2 NSwgMHgyNjY2LCAweDI2NjMsIDB4MjY2MCwgMHgyMDIyLAorICAgIDB4MjVkOCwgMHgyNWVmLCAw eDI1ZDksIDB4MjY0MiwgMHgyNjQwLCAweDI2NmEsIDB4MjY2YywgMHgyNjNjLAorICAgIDB4MjVi YSwgMHgyNWM0LCAweDIxOTUsIDB4MjAzYywgMHgwMGI2LCAweDAwYTcsIDB4MjVhYywgMHgyMWE4 LAorICAgIDB4MjE5MSwgMHgyMTkzLCAweDIxOTIsIDB4MjE5MCwgMHgyMzE5LCAweDIxOTQsIDB4 MjViMiwgMHgyNWJjCit9OworCitzdHJ1Y3QgeF90b191bmljb2RlIHVfYzBwaWNzID0geworICAg IDEyOCwwLFgyVV9DWEcsMCwiQzAvQzEgRGlzcGxheSBDb250cm9scyIsImRpc3BsYXktY29udHJv bHMiLDAsTlVMTCwKKyAgICAweDI0MDAsIDB4MjQwMSwgMHgyNDAyLCAweDI0MDMsIDB4MjQwNCwg MHgyNDA1LCAweDI0MDYsIDB4MjQwNywKKyAgICAweDI0MDgsIDB4MjQwOSwgMHgyNDBhLCAweDI0 MGIsIDB4MjQwYywgMHgyNDBkLCAweDI0MGUsIDB4MjQwZiwKKyAgICAweDI0MTAsIDB4MjQxMSwg MHgyNDEyLCAweDI0MTMsIDB4MjQxNCwgMHgyNDE1LCAweDI0MTYsIDB4MjQxNywKKyAgICAweDI0 MTgsIDB4MjQxOSwgMHgyNDFhLCAweDI0MWIsIDB4MjQxYywgMHgyNDFkLCAweDI0MWUsIDB4MjQx ZiwKKyAgICAweDI0MjAsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZm ZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAw eGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZk LCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4MjQyMQorfTsKKworI2lmZGVmIEtFUk1JVEZPTlQK K3N0cnVjdCB4X3RvX3VuaWNvZGUgdV9jMXBpY3MgPSB7CisgICAgMzIsMCxYMlVfQ1hHLDAsIkMx IERpc3BsYXkgQ29udHJvbHMiLCJjMS1kaXNwbGF5LWNvbnRyb2xzIiwwLE5VTEwsCisgICAgMHhl MDgwLCAweGUwODEsIDB4ZTA4MiwgMHhlMDgzLCAweGUwODQsIDB4ZTA4NSwgMHhlMDg2LCAweGUw ODcsCisgICAgMHhlMDg4LCAweGUwODksIDB4ZTA4YSwgMHhlMDhiLCAweGUwOGMsIDB4ZTA4ZCwg MHhlMDhlLCAweGUwOGYsCisgICAgMHhlMDkwLCAweGUwOTEsIDB4ZTA5MiwgMHhlMDkzLCAweGUw OTQsIDB4ZTA5NSwgMHhlMDk2LCAweGUwOTcsCisgICAgMHhlMDk4LCAweGUwOTksIDB4ZTA5YSwg MHhlMDliLCAweGUwOWMsIDB4ZTA5ZCwgMHhlMDllLCAweGUwOWYKK307CisjZWxzZQorc3RydWN0 IHhfdG9fdW5pY29kZSB1X2MxcGljcyA9IHsKKyAgICAzMiwwLFgyVV9DWEcsMCwiQzEgRGlzcGxh eSBDb250cm9scyIsImMxLWRpc3BsYXktY29udHJvbHMiLDAsTlVMTCwKKyAgICAweGZmZmQsIDB4 ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAg ICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZCwgMHhm ZmZkLCAweGZmZmQsIDB4ZmZmZCwKKyAgICAweGZmZmQsIDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQs IDB4ZmZmZCwgMHhmZmZkLCAweGZmZmQsIDB4ZmZmZAorfTsKKyNlbmRpZiAvKiBLRVJNSVRGT05U ICovCisKKworLyogQmxhaC10by1Vbmljb2RlIGZ1bmN0aW9ucyAqLworCitVU0hPUlQKKyNpZmRl ZiBDS19BTlNJQworYXNjaWlfdShDSEFSIGMpCisjZWxzZQorYXNjaWlfdShjKSBDSEFSIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4o VU5LKTsKKy8qCisgIE5PVEU6IFN0cmljdCBBTlNJIGNvbXBpbGVycyBjb21wbGFpbiBhYm91dCAi PCIgYW5kIHNpbWlsYXIgY29tcGFyaXNvbnMKKyAgYmV0d2VlbiB1bnNpZ25lZCBhbmQgc2lnbmVk IHF1YW50aXRpZXMsIGFzIGZvdW5kIGluIGFsbCB0aGUgcm91dGluZXMgb2YKKyAgdGhlICJibGFo X3UoKSIgY2xhc3MgLS0gY2FzdHMgbXVzdCBiZSBhZGRlZCB0byBzcXVlbGNoIHRoZSB3YXJuaW5n cy4KKyovCisgICAgaWYgKGMgPCB1X2FzY2lpLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAg ICBlbHNlIGlmIChjID49IHVfYXNjaWkub2Zmc2V0ICsgdV9hc2NpaS5zaXplKQorICAgICAgcmV0 dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2FzY2lpLm1hcFtjIC0gdV9hc2NpaS5v ZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2JyaXRpc2hfdShDSEFSIGMp CisjZWxzZQorYnJpdGlzaF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwgdV9icml0 aXNoLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfYnJpdGlz aC5vZmZzZXQgKyB1X2JyaXRpc2guc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisg ICAgICByZXR1cm4odV9icml0aXNoLm1hcFtjIC0gdV9icml0aXNoLm9mZnNldF0pOworfQorCitV U0hPUlQKKyNpZmRlZiBDS19BTlNJQworZHV0Y2hfdShDSEFSIGMpCisjZWxzZQorZHV0Y2hfdShj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODApCisg ICAgICByZXR1cm4oVU5LKTsKKyAgICBpZiAoYyA8IHVfZHV0Y2gub2Zmc2V0KQorICAgICAgcmV0 dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9kdXRjaC5vZmZzZXQgKyB1X2R1dGNoLnNpemUp CisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfZHV0Y2gubWFwW2Mg LSB1X2R1dGNoLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworZmlubmlz aF91KENIQVIgYykKKyNlbHNlCitmaW5uaXNoX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7CisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYg KGMgPCB1X2Zpbm5pc2gub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMg Pj0gdV9maW5uaXNoLm9mZnNldCArIHVfZmlubmlzaC5zaXplKQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UKKyAgICAgIHJldHVybih1X2Zpbm5pc2gubWFwW2MgLSB1X2Zpbm5pc2gub2Zmc2V0 XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitmcmVuY2hfdShDSEFSIGMpCisjZWxz ZQorZnJlbmNoX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYg KGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X2ZyZW5jaC5vZmZz ZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2ZyZW5jaC5vZmZzZXQg KyB1X2ZyZW5jaC5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVy bih1X2ZyZW5jaC5tYXBbYyAtIHVfZnJlbmNoLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRl ZiBDS19BTlNJQworZnJfY2FuYWRpYW5fdShDSEFSIGMpCisjZWxzZQorZnJfY2FuYWRpYW5fdShj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODApCisg ICAgICByZXR1cm4oVU5LKTsKKyAgICBpZiAoYyA8IHVfZnJfY2FuYWRpYW4ub2Zmc2V0KQorICAg ICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9mcl9jYW5hZGlhbi5vZmZzZXQgKyB1 X2ZyX2NhbmFkaWFuLnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0 dXJuKHVfZnJfY2FuYWRpYW4ubWFwW2MgLSB1X2ZyX2NhbmFkaWFuLm9mZnNldF0pOworfQorCitV U0hPUlQKKyNpZmRlZiBDS19BTlNJQworZ2VybWFuX3UoQ0hBUiBjKQorI2Vsc2UKK2dlcm1hbl91 KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHg4MCkK KyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwgdV9nZXJtYW4ub2Zmc2V0KQorICAgICAg cmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9nZXJtYW4ub2Zmc2V0ICsgdV9nZXJtYW4u c2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9nZXJtYW4u bWFwW2MgLSB1X2dlcm1hbi5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMK K2h1bmdhcmlhbl91KENIQVIgYykKKyNlbHNlCitodW5nYXJpYW5fdShjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5L KTsKKyAgICBpZiAoYyA8IHVfaHVuZ2FyaWFuLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAg ICBlbHNlIGlmIChjID49IHVfaHVuZ2FyaWFuLm9mZnNldCArIHVfaHVuZ2FyaWFuLnNpemUpCisg ICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfaHVuZ2FyaWFuLm1hcFtj IC0gdV9odW5nYXJpYW4ub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitp dGFsaWFuX3UoQ0hBUiBjKQorI2Vsc2UKK2l0YWxpYW5fdShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAg ICBpZiAoYyA8IHVfaXRhbGlhbi5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBp ZiAoYyA+PSB1X2l0YWxpYW4ub2Zmc2V0ICsgdV9pdGFsaWFuLnNpemUpCisgICAgICByZXR1cm4o Yyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfaXRhbGlhbi5tYXBbYyAtIHVfaXRhbGlhbi5v ZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2ljZWxhbmRpY191KENIQVIg YykKKyNlbHNlCitpY2VsYW5kaWNfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sKKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBpZiAoYyA8IHVf aWNlbGFuZGljLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVf aWNlbGFuZGljLm9mZnNldCArIHVfaWNlbGFuZGljLnNpemUpCisgICAgICByZXR1cm4oYyk7Cisg ICAgZWxzZQorICAgICAgcmV0dXJuKHVfaWNlbGFuZGljLm1hcFtjIC0gdV9pY2VsYW5kaWMub2Zm c2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitqaXMwMjAxcl91KENIQVIgYykK KyNlbHNlCitqaXMwMjAxcl91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwgdV9qaXMw MjAxci5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2ppczAy MDFyLm9mZnNldCArIHVfamlzMDIwMXIuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl CisgICAgICByZXR1cm4odV9qaXMwMjAxci5tYXBbYyAtIHVfamlzMDIwMXIub2Zmc2V0XSk7Cit9 CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitqaXMwMjAxa191KENIQVIgYykKKyNlbHNlCitq aXMwMjAxa191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChj ICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwgdV9qaXMwMjAxay5vZmZz ZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2ppczAyMDFrLm9mZnNl dCArIHVfamlzMDIwMWsuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICBy ZXR1cm4odV9qaXMwMjAxay5tYXBbYyAtIHVfamlzMDIwMWsub2Zmc2V0XSk7Cit9CisKK1VTSE9S VAorI2lmZGVmIENLX0FOU0lDCitub3J3ZWdpYW5fdShDSEFSIGMpCisjZWxzZQorbm9yd2VnaWFu X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweDgw KQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X25vcndlZ2lhbi5vZmZzZXQpCisg ICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X25vcndlZ2lhbi5vZmZzZXQgKyB1 X25vcndlZ2lhbi5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVy bih1X25vcndlZ2lhbi5tYXBbYyAtIHVfbm9yd2VnaWFuLm9mZnNldF0pOworfQorCitVU0hPUlQK KyNpZmRlZiBDS19BTlNJQworZGFuaXNoX3UoQ0hBUiBjKQorI2Vsc2UKK2RhbmlzaF91KGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHg4MCkKKyAgICAg IHJldHVybihVTkspOworICAgIGlmIChjIDwgdV9kYW5pc2gub2Zmc2V0KQorICAgICAgcmV0dXJu KGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9kYW5pc2gub2Zmc2V0ICsgdV9kYW5pc2guc2l6ZSkK KyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9kYW5pc2gubWFwW2Mg LSB1X2RhbmlzaC5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK3BvcnR1 Z3Vlc2VfdShDSEFSIGMpCisjZWxzZQorcG9ydHVndWVzZV91KGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOwor ICAgIGlmIChjIDwgdV9wb3J0dWd1ZXNlLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBl bHNlIGlmIChjID49IHVfcG9ydHVndWVzZS5vZmZzZXQgKyB1X3BvcnR1Z3Vlc2Uuc2l6ZSkKKyAg ICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9wb3J0dWd1ZXNlLm1hcFtj IC0gdV9wb3J0dWd1ZXNlLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQwor c3BhbmlzaF91KENIQVIgYykKKyNlbHNlCitzcGFuaXNoX3UoYykgQ0hBUiBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7Cisg ICAgaWYgKGMgPCB1X3NwYW5pc2gub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2Ug aWYgKGMgPj0gdV9zcGFuaXNoLm9mZnNldCArIHVfc3BhbmlzaC5zaXplKQorICAgICAgcmV0dXJu KGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X3NwYW5pc2gubWFwW2MgLSB1X3NwYW5pc2gu b2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitzd2VkaXNoX3UoQ0hBUiBj KQorI2Vsc2UKK3N3ZWRpc2hfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBpZiAoYyA8IHVfc3dl ZGlzaC5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X3N3ZWRp c2gub2Zmc2V0ICsgdV9zd2VkaXNoLnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQor ICAgICAgcmV0dXJuKHVfc3dlZGlzaC5tYXBbYyAtIHVfc3dlZGlzaC5vZmZzZXRdKTsKK30KKwor VVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK3N3aXNzX3UoQ0hBUiBjKQorI2Vsc2UKK3N3aXNzX3Uo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweDgwKQor ICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X3N3aXNzLm9mZnNldCkKKyAgICAgIHJl dHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfc3dpc3Mub2Zmc2V0ICsgdV9zd2lzcy5zaXpl KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X3N3aXNzLm1hcFtj IC0gdV9zd2lzcy5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2FwbDFf dShDSEFSIGMpCisjZWxzZQorYXBsMV91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjIDwg dV9hcGwxLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfYXBs MS5vZmZzZXQgKyB1X2FwbDEuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAg ICByZXR1cm4odV9hcGwxLm1hcFtjIC0gdV9hcGwxLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNp ZmRlZiBDS19BTlNJQworaWRlbnRfdShDSEFSIGMpCisjZWxzZSAvKiBDS19BTlNJQyAqLworaWRl bnRfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4oKFVT SE9SVCljKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2lzb184ODU5XzFfdShDSEFS IGMpCisjZWxzZQoraXNvXzg4NTlfMV91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeworICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1cm4oYyk7Cisg ICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV84ODU5XzEub2Zmc2V0KQorICAgICAgcmV0dXJu KGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5XzEub2Zmc2V0ICsgdV84ODU5XzEuc2l6ZSkK KyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV84ODU5XzEubWFwW2Mg LSB1Xzg4NTlfMS5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2lzb184 ODU5XzJfdShDSEFSIGMpCisjZWxzZQoraXNvXzg4NTlfMl91KGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICBy ZXR1cm4oYyk7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV84ODU5XzIub2Zmc2V0KQor ICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5XzIub2Zmc2V0ICsgdV84 ODU5XzIuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV84 ODU5XzIubWFwW2MgLSB1Xzg4NTlfMi5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tf QU5TSUMKK2lzb184ODU5XzNfdShDSEFSIGMpCisjZWxzZQoraXNvXzg4NTlfM191KGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4 YTApCisgICAgICByZXR1cm4oYyk7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV84ODU5 XzMub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV84ODU5XzMu b2Zmc2V0ICsgdV84ODU5XzMuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAg ICByZXR1cm4odV84ODU5XzMubWFwW2MgLSB1Xzg4NTlfMy5vZmZzZXRdKTsKK30KKworVVNIT1JU CisjaWZkZWYgQ0tfQU5TSUMKK2lzb184ODU5XzRfdShDSEFSIGMpCisjZWxzZQoraXNvXzg4NTlf NF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjID49IDB4 ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1cm4oYyk7CisgICAgYyAmPSAweDdmOworICAgIGlm IChjIDwgdV84ODU5XzQub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMg Pj0gdV84ODU5XzQub2Zmc2V0ICsgdV84ODU5XzQuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAg ICBlbHNlCisgICAgICByZXR1cm4odV84ODU5XzQubWFwW2MgLSB1Xzg4NTlfNC5vZmZzZXRdKTsK K30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2lzb184ODU5XzVfdShDSEFSIGMpCisjZWxz ZQoraXNvXzg4NTlfNV91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAg IGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1cm4oYyk7CisgICAgYyAmPSAw eDdmOworICAgIGlmIChjIDwgdV84ODU5XzUub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAg IGVsc2UgaWYgKGMgPj0gdV84ODU5XzUub2Zmc2V0ICsgdV84ODU5XzUuc2l6ZSkKKyAgICAgIHJl dHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV84ODU5XzUubWFwW2MgLSB1Xzg4NTlf NS5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2tvaThfdShDSEFSIGMp CisjZWxzZQora29pOF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAg IGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1cm4oYyk7CisgICAgYyAmPSAw eDdmOworICAgIGlmIChjIDwgdV9rb2k4Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBl bHNlIGlmIChjID49IHVfa29pOC5vZmZzZXQgKyB1X2tvaTguc2l6ZSkKKyAgICAgIHJldHVybihj KTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9rb2k4Lm1hcFtjIC0gdV9rb2k4Lm9mZnNldF0p OworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQwora29pOHJfdShDSEFSIGMpICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEtPSTgtUiB0byBVbmljb2RlICovCisjZWxzZQora29pOHJfdShj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAg aWYgKGMgPCB1X2tvaThyLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChj ID49IHVfa29pOHIub2Zmc2V0ICsgdV9rb2k4ci5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAg IGVsc2UKKyAgICAgIHJldHVybih1X2tvaThyLm1hcFtjIC0gdV9rb2k4ci5vZmZzZXRdKTsKK30K KworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2tvaTh1X3UoQ0hBUiBjKQorI2Vsc2UKK2tvaTh1 X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOwor ICAgIGlmIChjIDwgdV9rb2k4dS5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBp ZiAoYyA+PSB1X2tvaTh1Lm9mZnNldCArIHVfa29pOHUuc2l6ZSkKKyAgICAgIHJldHVybihjKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4odV9rb2k4dS5tYXBbYyAtIHVfa29pOHUub2Zmc2V0XSk7 Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitpc29fODg1OV82X3UoQ0hBUiBjKQorI2Vs c2UKK2lzb184ODU5XzZfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQorICAgICAgcmV0dXJuKGMpOworICAgIGMgJj0g MHg3ZjsKKyAgICBpZiAoYyA8IHVfODg1OV82Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAg ICBlbHNlIGlmIChjID49IHVfODg1OV82Lm9mZnNldCArIHVfODg1OV82LnNpemUpCisgICAgICBy ZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfODg1OV82Lm1hcFtjIC0gdV84ODU5 XzYub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitpc29fODg1OV83X3Uo Q0hBUiBjKQorI2Vsc2UKK2lzb184ODU5XzdfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQorICAgICAgcmV0dXJuKGMp OworICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfODg1OV83Lm9mZnNldCkKKyAgICAgIHJl dHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfODg1OV83Lm9mZnNldCArIHVfODg1OV83LnNp emUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfODg1OV83Lm1h cFtjIC0gdV84ODU5Xzcub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitp c29fODg1OV84X3UoQ0hBUiBjKQorI2Vsc2UKK2lzb184ODU5XzhfdShjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQorICAg ICAgcmV0dXJuKGMpOworICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfODg1OV84Lm9mZnNl dCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfODg1OV84Lm9mZnNldCAr IHVfODg1OV84LnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJu KHVfODg1OV84Lm1hcFtjIC0gdV84ODU5Xzgub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVm IENLX0FOU0lDCitoZWJyZXc3X3UoQ0hBUiBjKQorI2Vsc2UKK2hlYnJldzdfdShjKSBDSEFSIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1 X2hlYnJldzcub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9o ZWJyZXc3Lm9mZnNldCArIHVfaGVicmV3Ny5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVs c2UKKyAgICAgIHJldHVybih1X2hlYnJldzcubWFwW2MgLSB1X2hlYnJldzcub2Zmc2V0XSk7Cit9 CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitlbG90OTI3X3UoQ0hBUiBjKQorI2Vsc2UKK2Vs b3Q5MjdfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4 N2Y7CisgICAgaWYgKGMgPCB1X2Vsb3Q5Mjcub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAg IGVsc2UgaWYgKGMgPj0gdV9lbG90OTI3Lm9mZnNldCArIHVfZWxvdDkyNy5zaXplKQorICAgICAg cmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2Vsb3Q5MjcubWFwW2MgLSB1X2Vs b3Q5Mjcub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitpc29fODg1OV85 X3UoQ0hBUiBjKQorI2Vsc2UKK2lzb184ODU5XzlfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBpZiAoYyA+PSAweDgwICYmIGMgPCAweGEwKQorICAgICAgcmV0dXJu KGMpOworICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfODg1OV85Lm9mZnNldCkKKyAgICAg IHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfODg1OV85Lm9mZnNldCArIHVfODg1OV85 LnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfODg1OV85 Lm1hcFtjIC0gdV84ODU5Xzkub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lD Citpc29fODg1OV8xMF91KENIQVIgYykKKyNlbHNlCitpc29fODg1OV8xMF91KGMpIENIQVIgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4YTAp CisgICAgICByZXR1cm4oYyk7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV84ODU5XzEw Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfODg1OV8xMC5v ZmZzZXQgKyB1Xzg4NTlfMTAuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAg ICByZXR1cm4odV84ODU5XzEwLm1hcFtjIC0gdV84ODU5XzEwLm9mZnNldF0pOworfQorCitVU0hP UlQKKyNpZmRlZiBDS19BTlNJQworaXNvXzg4NTlfMTVfdShDSEFSIGMpCisjZWxzZQoraXNvXzg4 NTlfMTVfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA+ PSAweDgwICYmIGMgPCAweGEwKQorICAgICAgcmV0dXJuKGMpOworICAgIGMgJj0gMHg3ZjsKKyAg ICBpZiAoYyA8IHVfODg1OV8xNS5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBp ZiAoYyA+PSB1Xzg4NTlfMTUub2Zmc2V0ICsgdV84ODU5XzE1LnNpemUpCisgICAgICByZXR1cm4o Yyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfODg1OV8xNS5tYXBbYyAtIHVfODg1OV8xNS5v ZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2FwbDJfdShDSEFSIGMpCisj ZWxzZQorYXBsMl91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlm IChjID49IDB4ODAgJiYgYyA8IDB4YTApCisgICAgICByZXR1cm4oYyk7CisgICAgYyAmPSAweDdm OworICAgIGlmIChjIDwgdV9hcGwyLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl IGlmIChjID49IHVfYXBsMi5vZmZzZXQgKyB1X2FwbDIuc2l6ZSkKKyAgICAgIHJldHVybihjKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4odV9hcGwyLm1hcFtjIC0gdV9hcGwyLm9mZnNldF0pOwor fQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworYXBsM191KENIQVIgYykKKyNlbHNlCithcGwz X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOwor ICAgIGlmIChjIDwgdV9hcGwzLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlm IChjID49IHVfYXBsMy5vZmZzZXQgKyB1X2FwbDMuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAg ICBlbHNlCisgICAgICByZXR1cm4odV9hcGwzLm1hcFtjIC0gdV9hcGwzLm9mZnNldF0pOworfQor CitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworYXBsNF91KENIQVIgYykKKyNlbHNlCithcGw0X3Uo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAg IGlmIChjIDwgdV9hcGw0Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChj ID49IHVfYXBsNC5vZmZzZXQgKyB1X2FwbDQuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBl bHNlCisgICAgICByZXR1cm4odV9hcGw0Lm1hcFtjIC0gdV9hcGw0Lm9mZnNldF0pOworfQorCitV U0hPUlQKKyNpZmRlZiBDS19BTlNJQworYXBsNV91KENIQVIgYykKKyNlbHNlCithcGw1X3UoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlm IChjIDwgdV9hcGw1Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49 IHVfYXBsNS5vZmZzZXQgKyB1X2FwbDUuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl CisgICAgICByZXR1cm4odV9hcGw1Lm1hcFtjIC0gdV9hcGw1Lm9mZnNldF0pOworfQorCitVU0hP UlQKKyNpZmRlZiBDS19BTlNJQwora29pN191KENIQVIgYykKKyNlbHNlCitrb2k3X3UoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweDgwKQorICAgICAg cmV0dXJuKFVOSyk7CisgICAgaWYgKGMgPCB1X2tvaTcub2Zmc2V0KQorICAgICAgcmV0dXJuKGMp OworICAgIGVsc2UgaWYgKGMgPj0gdV9rb2k3Lm9mZnNldCArIHVfa29pNy5zaXplKQorICAgICAg cmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2tvaTcubWFwW2MgLSB1X2tvaTcu b2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitkZWNtY3NfdShDSEFSIGMp CisjZWxzZQorZGVjbWNzX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKKyAgICAgIHJldHVybihjKTsKKyAgICBjICY9 IDB4N2Y7CisgICAgaWYgKGMgPCB1X2RlY21jcy5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7Cisg ICAgZWxzZSBpZiAoYyA+PSB1X2RlY21jcy5vZmZzZXQgKyB1X2RlY21jcy5zaXplKQorICAgICAg cmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2RlY21jcy5tYXBbYyAtIHVfZGVj bWNzLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworbmV4dHN0ZXBfdShD SEFSIGMpCisjZWxzZQorbmV4dHN0ZXBfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyAgICByZXR1cm4odV9uZXh0c3RlcC5tYXBbKGMgJiAweDdmKSAtIHVfbmV4dHN0ZXAu b2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitkZ2lfdShDSEFSIGMpCisj ZWxzZQorZGdpX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYg KGMgPj0gMHg4MCAmJiBjIDwgMHhhMCkKKyAgICAgIHJldHVybihjKTsKKyAgICByZXR1cm4odV9k Z2kubWFwWyhjICYgMHg3ZikgLSB1X2RnaS5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYg Q0tfQU5TSUMKK2hwcm9tYW44X3UoQ0hBUiBjKQorI2Vsc2UKK2hwcm9tYW44X3UoYykgQ0hBUiBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhh MCkKKyAgICAgIHJldHVybihjKTsKKyAgICByZXR1cm4odV9ocHJvbWFuOC5tYXBbKGMgJiAweDdm KSAtIHVfaHByb21hbjgub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitj cDM3X3UoQ0hBUiBjKQorI2Vsc2UKK2NwMzdfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDM3Lm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQK KyNpZmRlZiBDS19BTlNJQworY3A0MzdfdShDSEFSIGMpCisjZWxzZQorY3A0MzdfdShjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDQzNy5tYXBbYyAm IDB4N2ZdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK21hem92aWFfdShDSEFSIGMp IC8qIE1hem92aWEgPSBDUDQzNyB3aXRoIHN1YnN0aXR1dGlvbnMgKi8KKyNlbHNlCittYXpvdmlh X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfbWF6 b3ZpYS5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2NwODUw X3UoQ0hBUiBjKQorI2Vsc2UKK2NwODUwX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgcmV0dXJuKHVfY3A4NTAubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9SVAor I2lmZGVmIENLX0FOU0lDCitjcDg1OF91KENIQVIgYykKKyNlbHNlCitjcDg1OF91KGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X2NwODU4Lm1hcFtjICYg MHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworY3AxMjUwX3UoQ0hBUiBjKQor I2Vsc2UKK2NwMTI1MF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAg IHJldHVybih1X2NwMTI1MC5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tf QU5TSUMKK2NwMTI1MV91KENIQVIgYykKKyNlbHNlCitjcDEyNTFfdShjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDEyNTEubWFwW2MgJiAweDdmXSk7 Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitjcDEyNTJfdShDSEFSIGMpCisjZWxzZQor Y3AxMjUyX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJu KHVfY3AxMjUyLm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQwor Y3AxMjUzX3UoQ0hBUiBjKQorI2Vsc2UKK2NwMTI1M191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeworICAgIHJldHVybih1X2NwMTI1My5tYXBbYyAmIDB4N2ZdKTsKK30KKwor VVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2NwMTI1NF91KENIQVIgYykKKyNlbHNlCitjcDEyNTRf dShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDEy NTQubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitjcDEyNTVf dShDSEFSIGMpCisjZWxzZQorY3AxMjU1X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgcmV0dXJuKHVfY3AxMjU1Lm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQK KyNpZmRlZiBDS19BTlNJQworY3AxMjU2X3UoQ0hBUiBjKQorI2Vsc2UKK2NwMTI1Nl91KGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X2NwMTI1Ni5tYXBb YyAmIDB4N2ZdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2NwMTI1N191KENIQVIg YykKKyNlbHNlCitjcDEyNTdfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sK KyAgICByZXR1cm4odV9jcDEyNTcubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9SVAorI2lmZGVm IENLX0FOU0lDCitjcDEyNThfdShDSEFSIGMpCisjZWxzZQorY3AxMjU4X3UoYykgQ0hBUiBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfY3AxMjU4Lm1hcFtjICYgMHg3 Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworY3A4NTJfdShDSEFSIGMpCisjZWxz ZQorY3A4NTJfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1 cm4odV9jcDg1Mi5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEN5cmlsbGljICovCisjaWZkZWYgQ0tfQU5TSUMKK2NwODU1X3Uo Q0hBUiBjKQorI2Vsc2UKK2NwODU1X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisgICAgcmV0dXJuKHVfY3A4NTUubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9SVCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCdWxnYXJpYSAqLworI2lmZGVmIENLX0FO U0lDCitjcDg1Nl91KENIQVIgYykKKyNlbHNlCitjcDg1Nl91KGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X2NwODU2Lm1hcFtjICYgMHg3Zl0pOworfQor CitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworY3A4NTdfdShDSEFSIGMpCisjZWxzZQorY3A4NTdf dShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1cm4odV9jcDg1 Ny5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2NwODYyX3Uo Q0hBUiBjKQorI2Vsc2UKK2NwODYyX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisgICAgcmV0dXJuKHVfY3A4NjIubWFwW2MgJiAweDdmXSk7Cit9CisKK1VTSE9SVAorI2lm ZGVmIENLX0FOU0lDCitjcDg2NF91KENIQVIgYykKKyNlbHNlCitjcDg2NF91KGMpIENIQVIgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X2NwODY0Lm1hcFtjICYgMHg3 Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworY3A4NjZfdShDSEFSIGMpCisjZWxz ZQorY3A4NjZfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICByZXR1 cm4odV9jcDg2Ni5tYXBbYyAmIDB4N2ZdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMK K2NwODY5X3UoQ0hBUiBjKQorI2Vsc2UKK2NwODY5X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgcmV0dXJuKHVfY3A4NjkubWFwW2MgJiAweDdmXSk7Cit9CisKK1VT SE9SVAorI2lmZGVmIENLX0FOU0lDCittYWNsYXRpbl91KENIQVIgYykKKyNlbHNlCittYWNsYXRp bl91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X21h Y2xhdGluLm1hcFtjICYgMHg3Zl0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworcXVp Y2tkcmF3X3UoQ0hBUiBjKQorI2Vsc2UKK3F1aWNrZHJhd191KGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIHJldHVybih1X3F1aWNrZHJhdy5tYXBbYyAmIDB4N2ZdKTsK K30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2RlY3NwZWNfdShDSEFSIGMpCisjZWxzZQor ZGVjc3BlY191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0g MHg3ZjsKKyAgICBpZiAoYyA8IHVfZGVjc3BlYy5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7Cisg ICAgZWxzZSBpZiAoYyA+PSB1X2RlY3NwZWMub2Zmc2V0ICsgdV9kZWNzcGVjLnNpemUpCisgICAg ICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuICh1X2RlY3NwZWMubWFwW2MgLSB1 X2RlY3NwZWMub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitkZWN0ZWNo X3UoQ0hBUiBjKQorI2Vsc2UKK2RlY3RlY2hfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X2RlY3RlY2gub2Zmc2V0KQor ICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9kZWN0ZWNoLm9mZnNldCArIHVf ZGVjdGVjaC5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1 X2RlY3RlY2gubWFwW2MgLSB1X2RlY3RlY2gub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVm IENLX0FOU0lDCitkZ3NwZWNfdShDSEFSIGMpCisjZWxzZQorZGdzcGVjX3UoYykgQ0hBUiBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV9k Z3NwZWMub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9kZ3Nw ZWMub2Zmc2V0ICsgdV9kZ3NwZWMuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisg ICAgICByZXR1cm4odV9kZ3NwZWMubWFwW2MgLSB1X2Rnc3BlYy5vZmZzZXRdKTsKK30KKworVVNI T1JUCisjaWZkZWYgQ0tfQU5TSUMKK2RnbGluZV91KENIQVIgYykKKyNlbHNlCitkZ2xpbmVfdShj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAg aWYgKGMgPCB1X2RnbGluZS5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAo YyA+PSB1X2RnbGluZS5vZmZzZXQgKyB1X2RnbGluZS5zaXplKQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UKKyAgICAgIHJldHVybih1X2RnbGluZS5tYXBbYyAtIHVfZGdsaW5lLm9mZnNldF0p OworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworZGd3b3JkX3UoQ0hBUiBjKQorI2Vsc2UK K2Rnd29yZF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0g MHg3ZjsKKyAgICBpZiAoYyA8IHVfZGd3b3JkLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAg ICBlbHNlIGlmIChjID49IHVfZGd3b3JkLm9mZnNldCArIHVfZGd3b3JkLnNpemUpCisgICAgICBy ZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfZGd3b3JkLm1hcFtjIC0gdV9kZ3dv cmQub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitocGxpbmVfdShDSEFS IGMpCisjZWxzZQoraHBsaW5lX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV9ocGxpbmUub2Zmc2V0KQorICAgICAgcmV0 dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9ocGxpbmUub2Zmc2V0ICsgdV9ocGxpbmUuc2l6 ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9ocGxpbmUubWFw W2MgLSB1X2hwbGluZS5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2hw bWF0aF91KENIQVIgYykKKyNlbHNlCitocG1hdGhfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X2hwbWF0aC5vZmZzZXQp CisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+PSB1X2hwbWF0aC5vZmZzZXQgKyB1 X2hwbWF0aC5zaXplKQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1 X2hwbWF0aC5tYXBbYyAtIHVfaHBtYXRoLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBD S19BTlNJQworcW54Z3JwaF91KENIQVIgYykKKyNlbHNlCitxbnhncnBoX3UoYykgQ0hBUiBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV9x bnhncnBoLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfcW54 Z3JwaC5vZmZzZXQgKyB1X3FueGdycGguc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl CisgICAgICByZXR1cm4odV9xbnhncnBoLm1hcFtjIC0gdV9xbnhncnBoLm9mZnNldF0pOworfQor CitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQworaHoxNTAwX3UoQ0hBUiBjKQorI2Vsc2UKK2h6MTUw MF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsK KyAgICBpZiAoYyA8IHVfaHoxNTAwLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNl IGlmIChjID49IHVfaHoxNTAwLm9mZnNldCArIHVfaHoxNTAwLnNpemUpCisgICAgICByZXR1cm4o Yyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfaHoxNTAwLm1hcFtjIC0gdV9oejE1MDAub2Zm c2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitzbmlibGFua3NfdShDSEFSIGMp CisjZWxzZQorc25pYmxhbmtzX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV9zbmlibGFua3Mub2Zmc2V0KQorICAgICAg cmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9zbmlibGFua3Mub2Zmc2V0ICsgdV9zbmli bGFua3Muc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9z bmlibGFua3MubWFwW2MgLSB1X3NuaWJsYW5rcy5vZmZzZXRdKTsKK30KKworVVNIT1JUCisjaWZk ZWYgQ0tfQU5TSUMKK3NuaWJyYWNrX3UoQ0hBUiBjKQorI2Vsc2UKK3NuaWJyYWNrX3UoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlmIChj IDwgdV9zbmlicmFjay5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZSBpZiAoYyA+ PSB1X3NuaWJyYWNrLm9mZnNldCArIHVfc25pYnJhY2suc2l6ZSkKKyAgICAgIHJldHVybihjKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4odV9zbmlicmFjay5tYXBbYyAtIHVfc25pYnJhY2sub2Zm c2V0XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitzbmlmYWNldF91KENIQVIgYykK KyNlbHNlCitzbmlmYWNldF91KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfc25pZmFjZXQub2Zmc2V0KQorICAgICAgcmV0 dXJuKGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9zbmlmYWNldC5vZmZzZXQgKyB1X3NuaWZhY2V0 LnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfc25pZmFj ZXQubWFwW2MgLSB1X3NuaWZhY2V0Lm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19B TlNJQworc25paWJtX3UoQ0hBUiBjKQorI2Vsc2UKK3NuaWlibV91KGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfc25paWJt Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfc25paWJtLm9m ZnNldCArIHVfc25paWJtLnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAg cmV0dXJuKHVfc25paWJtLm1hcFtjIC0gdV9zbmlpYm0ub2Zmc2V0XSk7Cit9CisKK1VTSE9SVAor I2lmZGVmIENLX0FOU0lDCitzbmlldXJvX3UoQ0hBUiBjKQorI2Vsc2UKK3NuaWV1cm9fdShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBjICY9IDB4N2Y7CisgICAgaWYg KGMgPCB1X3NuaWV1cm8ub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgaWYgKGMg Pj0gdV9zbmlldXJvLm9mZnNldCArIHVfc25pZXVyby5zaXplKQorICAgICAgcmV0dXJuKGMpOwor ICAgIGVsc2UKKyAgICAgIHJldHVybih1X3NuaWV1cm8ubWFwW2MgLSB1X3NuaWV1cm8ub2Zmc2V0 XSk7Cit9CisKK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitoZWF0aDE5Z191KENIQVIgYykKKyNl bHNlCitoZWF0aDE5Z191KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAg IGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8IHVfaGVhdGgxOWcub2Zmc2V0KQorICAgICAgcmV0dXJu KGMpOworICAgIGVsc2UgaWYgKGMgPj0gdV9oZWF0aDE5Zy5vZmZzZXQgKyB1X2hlYXRoMTlnLnNp emUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHVfaGVhdGgxOWcu bWFwW2MgLSB1X2hlYXRoMTlnLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJ QwordHZpZ191KENIQVIgYykKKyNlbHNlCit0dmlnX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV90dmlnLm9mZnNldCkK KyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfdHZpZy5vZmZzZXQgKyB1X3R2 aWcuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV90dmln Lm1hcFtjIC0gdV90dmlnLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQwor d3lzZV9nbl91KENIQVIgYykKKyNlbHNlCit3eXNlX2duX3UoYykgQ0hBUiBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV93eXNlX2duLm9m ZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfd3lzZV9nbi5vZmZz ZXQgKyB1X3d5c2VfZ24uc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICBy ZXR1cm4odV93eXNlX2duLm1hcFtjIC0gdV93eXNlX2duLm9mZnNldF0pOworfQorCitVU0hPUlQK KyNpZmRlZiBDS19BTlNJQword3lzZV9nMV91KENIQVIgYykKKyNlbHNlCit3eXNlX2cxX3UoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlm IChjIDwgdV93eXNlX2cxLm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChj ID49IHVfd3lzZV9nMS5vZmZzZXQgKyB1X3d5c2VfZzEuc2l6ZSkKKyAgICAgIHJldHVybihjKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4odV93eXNlX2cxLm1hcFtjIC0gdV93eXNlX2cxLm9mZnNl dF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQword3lzZV9nMl91KENIQVIgYykKKyNl bHNlCit3eXNlX2cyX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAg YyAmPSAweDdmOworICAgIGlmIChjIDwgdV93eXNlX2cyLm9mZnNldCkKKyAgICAgIHJldHVybihj KTsKKyAgICBlbHNlIGlmIChjID49IHVfd3lzZV9nMi5vZmZzZXQgKyB1X3d5c2VfZzIuc2l6ZSkK KyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV93eXNlX2cyLm1hcFtj IC0gdV93eXNlX2cyLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNpZmRlZiBDS19BTlNJQword3lz ZV9nM191KENIQVIgYykKKyNlbHNlCit3eXNlX2czX3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOworICAgIGlmIChjIDwgdV93eXNlX2czLm9mZnNl dCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVfd3lzZV9nMy5vZmZzZXQg KyB1X3d5c2VfZzMuc2l6ZSkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlCisgICAgICByZXR1 cm4odV93eXNlX2czLm1hcFtjIC0gdV93eXNlX2czLm9mZnNldF0pOworfQorCitVU0hPUlQKKyNp ZmRlZiBDS19BTlNJQworc21pbGV5X3UoQ0hBUiBjKQorI2Vsc2UKK3NtaWxleV91KGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGMgJj0gMHg3ZjsKKyAgICBpZiAoYyA8 IHVfc21pbGV5Lm9mZnNldCkKKyAgICAgIHJldHVybihjKTsKKyAgICBlbHNlIGlmIChjID49IHVf c21pbGV5Lm9mZnNldCArIHVfc21pbGV5LnNpemUpCisgICAgICByZXR1cm4oYyk7CisgICAgZWxz ZQorICAgICAgcmV0dXJuKHVfc21pbGV5Lm1hcFtjIC0gdV9zbWlsZXkub2Zmc2V0XSk7Cit9CisK K1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitjMHBpY3NfdShDSEFSIGMpCisjZWxzZQorYzBwaWNz X3UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgYyAmPSAweDdmOwor ICAgIGlmIChjIDwgdV9jMHBpY3Mub2Zmc2V0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2Ug aWYgKGMgPj0gdV9jMHBpY3Mub2Zmc2V0ICsgdV9jMHBpY3Muc2l6ZSkKKyAgICAgIHJldHVybihj KTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odV9jMHBpY3MubWFwW2MgLSB1X2MwcGljcy5vZmZz ZXRdKTsKK30KKworVVNIT1JUCisjaWZkZWYgQ0tfQU5TSUMKK2MxcGljc191KENIQVIgYykKKyNl bHNlCitjMXBpY3NfdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBj ICY9IDB4N2Y7CisgICAgaWYgKGMgPCB1X2MxcGljcy5vZmZzZXQpCisgICAgICByZXR1cm4oYyk7 CisgICAgZWxzZSBpZiAoYyA+PSB1X2MxcGljcy5vZmZzZXQgKyB1X2MxcGljcy5zaXplKQorICAg ICAgcmV0dXJuKGMpOworICAgIGVsc2UKKyAgICAgIHJldHVybih1X2MxcGljcy5tYXBbYyAtIHVf YzFwaWNzLm9mZnNldF0pOworfQorCisjaWZkZWYgS0FOSkkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogS2FuamkvVW5pY29kZSBmdW5jdGlvbnMgKi8KKworc3RhdGljIGxvbmcgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXRpc3RpY3MgY291bnRlcnMgKi8KKyAgYmFkID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVkUgVEhFU0UgTEFURVIuLi4g Ki8KKyAga2FuamkgPSAwLAorICBrYW5hID0gMCwKKyAgZ3JlZWsgPSAwLAorICBjeXJpbGxpYyA9 IDAsCisgIHNwZWNpYWwgPSAwLAorICByb21hbiA9IDA7CisKK1VTSE9SVAorI2lmZGVmIENLX0FO U0lDCitzal90b191bihVU0hPUlQgc2opICAgICAgICAgICAgICAgICAgICAgLyogU2hpZnQtSklT IHRvIFVuaWNvZGUgKi8KKyNlbHNlCitzal90b191bihzaikgVVNIT1JUIHNqOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7CisKKy8qIEthbmppIGJsb2NrcyAqLworCisgICAgaWYgKHNqID49IDB4 ODE0MCkgeyAgICAgICAgICAgICAgICAgLyogQWxsIHBvc3NpYmxlIEthbmppcyAqLworICAgICAg ICBrYW5qaSsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGltaXN0aWNhbGx5IGNvdW50 IGEgS2FuamkgKi8KKyAgICAgICAgaWYgKHNqIDw9IDB4OWZmYykgeyAgICAgICAgICAgICAvKiA3 ODY5LWVsZW1lbnQgdGFibGUgKi8KKyAgICAgICAgICAgIHJldHVybihzanVfODE0MFtzaiAtIDB4 ODE0MF0pOworICAgICAgICB9IGVsc2UgaWYgKHNqID49IDB4ZTA0MCAmJiBzaiA8PSAweGVhYTQp IHsgLyogMjY2MC1lbGVtZW50IHRhYmxlICovCisgICAgICAgICAgICByZXR1cm4oc2p1X2UwNDBb c2ogLSAweGUwNDBdKTsKKyAgICAgICAgfSBlbHNlIGlmIChzaiA+PSAweGYwNDApIHsgICAgICAv KiBVc2VyLWRlZmluZWQgYXJlYXMgKi8KKyAgICAgICAgICAgIGlmIChzaiA8PSAweGYwZmMpIHsg ICAgICAgICAvKiB0ZW4gMTg5LWNoYXIgY2h1bmtzICovCisgICAgICAgICAgICAgICAgcmV0dXJu KDB4ZTAwMCArIChzaiAtIDB4ZjA0MCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaiA+PSAw eGYxNDAgJiYgc2ogPD0gMHhmMWZjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuKDB4ZTBiYyAr IChzaiAtIDB4ZjE0MCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaiA+PSAweGYyNDAgJiYg c2ogPD0gMHhmMmZjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuKDB4ZTE3OCArIChzaiAtIDB4 ZjI0MCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaiA+PSAweGYzNDAgJiYgc2ogPD0gMHhm M2ZjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuKDB4ZTIzNCArIChzaiAtIDB4ZjM0MCkpOwor ICAgICAgICAgICAgfSBlbHNlIGlmIChzaiA+PSAweGY0NDAgJiYgc2ogPD0gMHhmNGZjKSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKDB4ZTJmMCArIChzaiAtIDB4ZjQ0MCkpOworICAgICAgICAg ICAgfSBlbHNlIGlmIChzaiA+PSAweGY1NDAgJiYgc2ogPD0gMHhmNWZjKSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuKDB4ZTNhYyArIChzaiAtIDB4ZjU0MCkpOworICAgICAgICAgICAgfSBlbHNl IGlmIChzaiA+PSAweGY2NDAgJiYgc2ogPD0gMHhmNmZjKSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuKDB4ZTQ2OCArIChzaiAtIDB4ZjY0MCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaiA+ PSAweGY3NDAgJiYgc2ogPD0gMHhmN2ZjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuKDB4ZTUy NCArIChzaiAtIDB4Zjc0MCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaiA+PSAweGY4NDAg JiYgc2ogPD0gMHhmOGZjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuKDB4ZTVlMCArIChzaiAt IDB4Zjg0MCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaiA+PSAweGY5NDAgJiYgc2ogPD0g MHhmOWZjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuKDB4ZTY5YyArIChzaiAtIDB4Zjk0MCkp OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGthbmppLS07ICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm9uZSBvZiB0aGUgYWJvdmUsIHVuY291bnQgKi8KKyAgICB9CisKKy8q IEMwIC8gSGFsZndpZHRoLVJvbWFuIC8gQzEgYmxvY2sgKDB4MDAtMHg5Ziwgbm8gaG9sZXMpICov CisKKyAgICBlbHNlIGlmIChzaiA8IDB4MDBhMCkgeworICAgICAgICByb21hbisrOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvdW50IGEgUm9tYW4gKi8KKyAgICAgICAgaWYgKHNqID09IDB4 NWMpIHsgICAgICAgICAgICAgICAvKiBZZW4gc2lnbiAqLworICAgICAgICAgICAgcmV0dXJuKDB4 MDBhNSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2ogPT0gMHg3ZSkgeyAgICAgICAgLyogT3Zlcmxp bmUgKG1hY3JvbikgKi8KKyAgICAgICAgICAgIHJldHVybigweDIwM2UpOworICAgICAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgb3IgSGFsZndpZHRoIFJvbWFu ICovCisgICAgICAgICAgICByZXR1cm4oc2opOworICAgICAgICB9CisgICAgfQorCisvKiBIYWxm d2lkdGggS2F0YWthbmEgYmxvY2sgKDB4YTAtMHhkZiwgbm8gaG9sZXMpICovCisKKyAgICBlbHNl IGlmIChzaiA+PSAweGExICYmIHNqIDw9IDB4ZGYpIHsKKyAgICAgICAga2FuYSsrOworICAgICAg ICByZXR1cm4oc2ogKyAweGZlYzApOworICAgIH0KKworLyogQ2F0Y2gtYWxsIG11c3QgYmUgZmlu YWwgKi8KKworICAgIGJhZCsrOworICAgIHJldHVybigweGZmZmQpOworfQorCitVU0hPUlQKKyNp ZmRlZiBDS19BTlNJQwordW5fdG9fc2ooVVNIT1JUIHVuKSAgICAgICAgICAgICAgICAgICAgIC8q IFVuaWNvZGUgdG8gU2hpZnQtSklTICovCisjZWxzZQordW5fdG9fc2oodW4pIFVTSE9SVCB1bjsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworCisgICAgaWYgKHVuIDwgMHgwMGEwKSB7CisgICAg ICAgIHN3aXRjaCAodW4pIHsKKyAgICAgICAgICBjYXNlIDB4MDA1Yzogcm9tYW4rKzsgcmV0dXJu KDB4ODE1Zik7IC8qIEJhY2tzbGFzaCAqLworICAgICAgICAgIGNhc2UgMHgwMDdlOiBiYWQrKzsg ICByZXR1cm4oMHhmZmZkKTsgLyogTm8gdGlsZGUgaW4gU2hpZnQtSklTICovCisgICAgICAgICAg ZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBU0NJSSBvciBDMC9DMSBj b250cm9sICovCisgICAgICAgICAgICByb21hbisrOworICAgICAgICAgICAgcmV0dXJuKHVuKTsK KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodW4gPj0gMHgwMGEwICYmIHVuIDwgMHgwMzkxKSB7 IC8qIExhdGluLTEgc3ltYm9scyAqLworICAgICAgICByb21hbisrOworICAgICAgICBzd2l0Y2go dW4pIHsKKyAgICAgICAgICBjYXNlIDB4MDBBMjogcmV0dXJuKDB4ODE5MSk7CisgICAgICAgICAg Y2FzZSAweDAwQTM6IHJldHVybigweDgxOTIpOworICAgICAgICAgIGNhc2UgMHgwMEE1OiByZXR1 cm4oMHgwMDVDKTsgIC8qIFllbiAqLworICAgICAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oMHg4 MTk4KTsKKyAgICAgICAgICBjYXNlIDB4MDBBODogcmV0dXJuKDB4ODE0RSk7CisgICAgICAgICAg Y2FzZSAweDAwQUM6IHJldHVybigweDgxQ0EpOworICAgICAgICAgIGNhc2UgMHgwMEIwOiByZXR1 cm4oMHg4MThCKTsKKyAgICAgICAgICBjYXNlIDB4MDBCMTogcmV0dXJuKDB4ODE3RCk7CisgICAg ICAgICAgY2FzZSAweDAwQjQ6IHJldHVybigweDgxNEMpOworICAgICAgICAgIGNhc2UgMHgwMEI2 OiByZXR1cm4oMHg4MUY3KTsKKyAgICAgICAgICBjYXNlIDB4MDBENzogcmV0dXJuKDB4ODE3RSk7 CisgICAgICAgICAgY2FzZSAweDAwRjc6IHJldHVybigweDgxODApOworICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICByb21hbi0tOworICAgICAgICAgICAgYmFkKys7CisgICAgICAgICAg ICByZXR1cm4oMHhmZmZkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodW4gPj0gMHgwMzkx ICYmIHVuIDwgMHgwNDAxKSB7ICAvKiBHcmVlayAqLworICAgICAgICBncmVlaysrOworICAgICAg ICBpZiAodW4gPD0gMHgwMzljKQorICAgICAgICAgIHJldHVybih1c2pfMDM5MVt1bi0weDAzOTFd KTsKKyAgICAgICAgZ3JlZWstLTsKKyAgICAgICAgYmFkKys7CisgICAgICAgIHJldHVybigweGZm ZmQpOworICAgIH0KKyAgICBpZiAodW4gPj0gMHgwNDAxICYmIHVuIDwgMHgyMDEwKSB7ICAvKiBD eXJpbGxpYyAqLworICAgICAgICBjeXJpbGxpYysrOworICAgICAgICBpZiAodW4gPD0gMHgwNDUx KQorICAgICAgICAgIHJldHVybih1c2pfMDQwMVt1bi0weDA0MDFdKTsKKyAgICAgICAgY3lyaWxs aWMtLTsKKyAgICAgICAgYmFkKys7CisgICAgICAgIHJldHVybigweGZmZmQpOworICAgIH0KKyAg ICBpZiAodW4gPj0gMHgyMDEwICYmIHVuIDwgMHgyNTAwKSB7ICAvKiBHZW5lcmFsIHB1bmN0dWF0 aW9uICovCisgICAgICAgIHNwZWNpYWwrKzsKKyAgICAgICAgc3dpdGNoKHVuKSB7CisgICAgICAg ICAgY2FzZSAweDIwMTA6IHJldHVybigweDgxNUQpOworICAgICAgICAgIGNhc2UgMHgyMDE1OiBy ZXR1cm4oMHg4MTVDKTsKKyAgICAgICAgICBjYXNlIDB4MjAxNjogcmV0dXJuKDB4ODE2MSk7Cisg ICAgICAgICAgY2FzZSAweDIwMTg6IHJldHVybigweDgxNjUpOworICAgICAgICAgIGNhc2UgMHgy MDE5OiByZXR1cm4oMHg4MTY2KTsKKyAgICAgICAgICBjYXNlIDB4MjAxQzogcmV0dXJuKDB4ODE2 Nyk7CisgICAgICAgICAgY2FzZSAweDIwMUQ6IHJldHVybigweDgxNjgpOworICAgICAgICAgIGNh c2UgMHgyMDIwOiByZXR1cm4oMHg4MUY1KTsKKyAgICAgICAgICBjYXNlIDB4MjAyMTogcmV0dXJu KDB4ODFGNik7CisgICAgICAgICAgY2FzZSAweDIwMjU6IHJldHVybigweDgxNjQpOworICAgICAg ICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oMHg4MTYzKTsKKyAgICAgICAgICBjYXNlIDB4MjAzMDog cmV0dXJuKDB4ODFGMSk7CisgICAgICAgICAgY2FzZSAweDIwMzI6IHJldHVybigweDgxOEMpOwor ICAgICAgICAgIGNhc2UgMHgyMDMzOiByZXR1cm4oMHg4MThEKTsKKyAgICAgICAgICBjYXNlIDB4 MjAzQjogcmV0dXJuKDB4ODFBNik7CisgICAgICAgICAgY2FzZSAweDIwM0U6IHJldHVybigweDAw N0UpOworICAgICAgICAgIGNhc2UgMHgyMTAzOiByZXR1cm4oMHg4MThFKTsgIC8qIExldHRlcmxp a2Ugc3ltYm9scyAqLworICAgICAgICAgIGNhc2UgMHgyMTJCOiByZXR1cm4oMHg4MUYwKTsKKyAg ICAgICAgICBjYXNlIDB4MjE5MDogcmV0dXJuKDB4ODFBOSk7ICAvKiBBcnJvd3MgKi8KKyAgICAg ICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKDB4ODFBQSk7CisgICAgICAgICAgY2FzZSAweDIxOTI6 IHJldHVybigweDgxQTgpOworICAgICAgICAgIGNhc2UgMHgyMTkzOiByZXR1cm4oMHg4MUFCKTsK KyAgICAgICAgICBjYXNlIDB4MjFEMjogcmV0dXJuKDB4ODFDQik7CisgICAgICAgICAgY2FzZSAw eDIxRDQ6IHJldHVybigweDgxQ0MpOworICAgICAgICAgIGNhc2UgMHgyMjAwOiByZXR1cm4oMHg4 MUNEKTsgIC8qIE1hdGggKi8KKyAgICAgICAgICBjYXNlIDB4MjIwMjogcmV0dXJuKDB4ODFERCk7 CisgICAgICAgICAgY2FzZSAweDIyMDM6IHJldHVybigweDgxQ0UpOworICAgICAgICAgIGNhc2Ug MHgyMjA3OiByZXR1cm4oMHg4MURFKTsKKyAgICAgICAgICBjYXNlIDB4MjIwODogcmV0dXJuKDB4 ODFCOCk7CisgICAgICAgICAgY2FzZSAweDIyMEI6IHJldHVybigweDgxQjkpOworICAgICAgICAg IGNhc2UgMHgyMjEyOiByZXR1cm4oMHg4MTdDKTsKKyAgICAgICAgICBjYXNlIDB4MjIxQTogcmV0 dXJuKDB4ODFFMyk7CisgICAgICAgICAgY2FzZSAweDIyMUQ6IHJldHVybigweDgxRTUpOworICAg ICAgICAgIGNhc2UgMHgyMjFFOiByZXR1cm4oMHg4MTg3KTsKKyAgICAgICAgICBjYXNlIDB4MjIy MDogcmV0dXJuKDB4ODFEQSk7CisgICAgICAgICAgY2FzZSAweDIyMjc6IHJldHVybigweDgxQzgp OworICAgICAgICAgIGNhc2UgMHgyMjI4OiByZXR1cm4oMHg4MUM5KTsKKyAgICAgICAgICBjYXNl IDB4MjIyOTogcmV0dXJuKDB4ODFCRik7CisgICAgICAgICAgY2FzZSAweDIyMkE6IHJldHVybigw eDgxQkUpOworICAgICAgICAgIGNhc2UgMHgyMjJCOiByZXR1cm4oMHg4MUU3KTsKKyAgICAgICAg ICBjYXNlIDB4MjIyQzogcmV0dXJuKDB4ODFFOCk7CisgICAgICAgICAgY2FzZSAweDIyMzQ6IHJl dHVybigweDgxODgpOworICAgICAgICAgIGNhc2UgMHgyMjM1OiByZXR1cm4oMHg4MUU2KTsKKyAg ICAgICAgICBjYXNlIDB4MjIzRDogcmV0dXJuKDB4ODFFNCk7CisgICAgICAgICAgY2FzZSAweDIy NTI6IHJldHVybigweDgxRTApOworICAgICAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oMHg4MTgy KTsKKyAgICAgICAgICBjYXNlIDB4MjI2MTogcmV0dXJuKDB4ODFERik7CisgICAgICAgICAgY2Fz ZSAweDIyNjY6IHJldHVybigweDgxODUpOworICAgICAgICAgIGNhc2UgMHgyMjY3OiByZXR1cm4o MHg4MTg2KTsKKyAgICAgICAgICBjYXNlIDB4MjI2QTogcmV0dXJuKDB4ODFFMSk7CisgICAgICAg ICAgY2FzZSAweDIyNkI6IHJldHVybigweDgxRTIpOworICAgICAgICAgIGNhc2UgMHgyMjgyOiBy ZXR1cm4oMHg4MUJDKTsKKyAgICAgICAgICBjYXNlIDB4MjI4MzogcmV0dXJuKDB4ODFCRCk7Cisg ICAgICAgICAgY2FzZSAweDIyODY6IHJldHVybigweDgxQkEpOworICAgICAgICAgIGNhc2UgMHgy Mjg3OiByZXR1cm4oMHg4MUJCKTsKKyAgICAgICAgICBjYXNlIDB4MjJBNTogcmV0dXJuKDB4ODFE Qik7CisgICAgICAgICAgY2FzZSAweDIzMTI6IHJldHVybigweDgxREMpOyAgLyogQXJjICovCisg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNwZWNpYWwtLTsKKyAgICAgICAgICAgIGJh ZCsrOworICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgICAgIH0KKyAgICB9CisgICAg aWYgKHVuID49IDB4MjUwMCAmJiB1biA8IDB4MzAwMCkgeyAgLyogQm94IGRyYXdpbmcgKi8KKyAg ICAgICAgc3BlY2lhbCsrOworICAgICAgICBzd2l0Y2godW4pIHsKKyAgICAgICAgICBjYXNlIDB4 MjUwMDogcmV0dXJuKDB4ODQ5Rik7CisgICAgICAgICAgY2FzZSAweDI1MDE6IHJldHVybigweDg0 QUEpOworICAgICAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oMHg4NEEwKTsKKyAgICAgICAgICBj YXNlIDB4MjUwMzogcmV0dXJuKDB4ODRBQik7CisgICAgICAgICAgY2FzZSAweDI1MEM6IHJldHVy bigweDg0QTEpOworICAgICAgICAgIGNhc2UgMHgyNTBGOiByZXR1cm4oMHg4NEFDKTsKKyAgICAg ICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKDB4ODRBMik7CisgICAgICAgICAgY2FzZSAweDI1MTM6 IHJldHVybigweDg0QUQpOworICAgICAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oMHg4NEE0KTsK KyAgICAgICAgICBjYXNlIDB4MjUxNzogcmV0dXJuKDB4ODRBRik7CisgICAgICAgICAgY2FzZSAw eDI1MTg6IHJldHVybigweDg0QTMpOworICAgICAgICAgIGNhc2UgMHgyNTFCOiByZXR1cm4oMHg4 NEFFKTsKKyAgICAgICAgICBjYXNlIDB4MjUxQzogcmV0dXJuKDB4ODRBNSk7CisgICAgICAgICAg Y2FzZSAweDI1MUQ6IHJldHVybigweDg0QkEpOworICAgICAgICAgIGNhc2UgMHgyNTIwOiByZXR1 cm4oMHg4NEI1KTsKKyAgICAgICAgICBjYXNlIDB4MjUyMzogcmV0dXJuKDB4ODRCMCk7CisgICAg ICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigweDg0QTcpOworICAgICAgICAgIGNhc2UgMHgyNTI1 OiByZXR1cm4oMHg4NEJDKTsKKyAgICAgICAgICBjYXNlIDB4MjUyODogcmV0dXJuKDB4ODRCNyk7 CisgICAgICAgICAgY2FzZSAweDI1MkI6IHJldHVybigweDg0QjIpOworICAgICAgICAgIGNhc2Ug MHgyNTJDOiByZXR1cm4oMHg4NEE2KTsKKyAgICAgICAgICBjYXNlIDB4MjUyRjogcmV0dXJuKDB4 ODRCNik7CisgICAgICAgICAgY2FzZSAweDI1MzA6IHJldHVybigweDg0QkIpOworICAgICAgICAg IGNhc2UgMHgyNTMzOiByZXR1cm4oMHg4NEIxKTsKKyAgICAgICAgICBjYXNlIDB4MjUzNDogcmV0 dXJuKDB4ODRBOCk7CisgICAgICAgICAgY2FzZSAweDI1Mzc6IHJldHVybigweDg0QjgpOworICAg ICAgICAgIGNhc2UgMHgyNTM4OiByZXR1cm4oMHg4NEJEKTsKKyAgICAgICAgICBjYXNlIDB4MjUz QjogcmV0dXJuKDB4ODRCMyk7CisgICAgICAgICAgY2FzZSAweDI1M0M6IHJldHVybigweDg0QTkp OworICAgICAgICAgIGNhc2UgMHgyNTNGOiByZXR1cm4oMHg4NEI5KTsKKyAgICAgICAgICBjYXNl IDB4MjU0MjogcmV0dXJuKDB4ODRCRSk7CisgICAgICAgICAgY2FzZSAweDI1NEI6IHJldHVybigw eDg0QjQpOworICAgICAgICAgIGNhc2UgMHgyNUEwOiByZXR1cm4oMHg4MUExKTsgIC8qIEdlb21l dHJpYyBzaGFwZXMgKi8KKyAgICAgICAgICBjYXNlIDB4MjVBMTogcmV0dXJuKDB4ODFBMCk7Cisg ICAgICAgICAgY2FzZSAweDI1QjI6IHJldHVybigweDgxQTMpOworICAgICAgICAgIGNhc2UgMHgy NUIzOiByZXR1cm4oMHg4MUEyKTsKKyAgICAgICAgICBjYXNlIDB4MjVCQzogcmV0dXJuKDB4ODFB NSk7CisgICAgICAgICAgY2FzZSAweDI1QkQ6IHJldHVybigweDgxQTQpOworICAgICAgICAgIGNh c2UgMHgyNUM2OiByZXR1cm4oMHg4MTlGKTsKKyAgICAgICAgICBjYXNlIDB4MjVDNzogcmV0dXJu KDB4ODE5RSk7CisgICAgICAgICAgY2FzZSAweDI1Q0I6IHJldHVybigweDgxOUIpOworICAgICAg ICAgIGNhc2UgMHgyNUNFOiByZXR1cm4oMHg4MTlEKTsKKyAgICAgICAgICBjYXNlIDB4MjVDRjog cmV0dXJuKDB4ODE5Qyk7CisgICAgICAgICAgY2FzZSAweDI1RUY6IHJldHVybigweDgxRkMpOwor ICAgICAgICAgIGNhc2UgMHgyNjA1OiByZXR1cm4oMHg4MTlBKTsgIC8qIE1pc2Mgc3ltYm9scyAq LworICAgICAgICAgIGNhc2UgMHgyNjA2OiByZXR1cm4oMHg4MTk5KTsKKyAgICAgICAgICBjYXNl IDB4MjY0MDogcmV0dXJuKDB4ODE4QSk7CisgICAgICAgICAgY2FzZSAweDI2NDI6IHJldHVybigw eDgxODkpOworICAgICAgICAgIGNhc2UgMHgyNjZBOiByZXR1cm4oMHg4MUY0KTsKKyAgICAgICAg ICBjYXNlIDB4MjY2RDogcmV0dXJuKDB4ODFGMyk7CisgICAgICAgICAgY2FzZSAweDI2NkY6IHJl dHVybigweDgxRjIpOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzcGVjaWFsLS07 CisgICAgICAgICAgICBiYWQrKzsKKyAgICAgICAgICAgIHJldHVybigweGZmZmQpOworICAgICAg ICB9CisgICAgfQorICAgIGlmICh1biA+PSAweDMwMDAgJiYgdW4gPCAweDRlMDApIHsgIC8qIENK SyBzeW1ib2xzICYgcHVuYyAqLworICAgICAgICBrYW5qaSsrOworICAgICAgICBpZiAodW4gPD0g MHgzMGZmKQorICAgICAgICAgIHJldHVybih1c2pfMzAwMFt1bi0weDMwMDBdKTsKKyAgICAgICAg a2FuamktLTsKKyAgICAgICAgYmFkKys7CisgICAgICAgIHJldHVybigweGZmZmQpOworICAgIH0K KyAgICBpZiAodW4gPj0gMHhmZjAwICYmIHVuIDwgMHhmZmZmKSB7ICAvKiBIYWxmL2Z1bGwtd2lk dGggUm9tYW4gJiBLYXRha2FuYSAqLworICAgICAgICBpZiAodW4gPD0gMHhmZjlmKSB7CisgICAg ICAgICAgICBpZiAodW4gPiAweGZmNjApCisgICAgICAgICAgICAgIGthbmErKzsKKyAgICAgICAg ICAgIHJldHVybih1c2pfZmYwMFt1bi0weGZmMDBdKTsKKyAgICAgICAgfQorICAgICAgICBiYWQr KzsKKyAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgfQorICAgIGlmICh1biA+PSAweDRlMDAg JiYgdW4gPCAweGUwMDApIHsgIC8qIEthbmppICovCisgICAgICAgIGthbmppKys7CisgICAgICAg IGlmICh1biA8PSAweDlmYTApCisgICAgICAgICAgcmV0dXJuKHVzal80ZTAwW3VuLTB4NGUwMF0p OworICAgICAgICBrYW5qaS0tOworICAgICAgICBiYWQrKzsKKyAgICAgICAgcmV0dXJuKDB4ZmZm ZCk7CisgICAgfQorICAgIGlmICh1biA+PSAweGUwMDAgJiYgdW4gPCAweGZmMDApIHsgIC8qIFVz ZXItZGVmaW5lZCAoR2FpamkpICovCisgICAgICAgIGthbmppKys7CisgICAgICAgIGlmICh1biA8 PSAweGUwYmIpIHsgICAgICAgICAgICAgLyogdGVuIDE4OS1jaGFyIGNodW5rcyAqLworICAgICAg ICAgICAgcmV0dXJuKDB4ZjA0MCArICh1biAtIDB4ZTAwMCkpOworICAgICAgICB9IGVsc2UgaWYg KHVuID49IDB4ZTBiYyAmJiB1biA8PSAweGUxNzcpIHsKKyAgICAgICAgICAgIHJldHVybigweGYx NDAgKyAodW4gLSAweGUwYmMpKTsKKyAgICAgICAgfSBlbHNlIGlmICh1biA+PSAweGUxNzggJiYg dW4gPD0gMHhlMjMzKSB7CisgICAgICAgICAgICByZXR1cm4oMHhmMjQwICsgKHVuIC0gMHhlMTc4 KSk7CisgICAgICAgIH0gZWxzZSBpZiAodW4gPj0gMHhlMjM0ICYmIHVuIDw9IDB4ZTJlZikgewor ICAgICAgICAgICAgcmV0dXJuKDB4ZjM0MCArICh1biAtIDB4ZTIzNCkpOworICAgICAgICB9IGVs c2UgaWYgKHVuID49IDB4ZTJmMCAmJiB1biA8PSAweGUzYWIpIHsKKyAgICAgICAgICAgIHJldHVy bigweGY0NDAgKyAodW4gLSAweGUyZjApKTsKKyAgICAgICAgfSBlbHNlIGlmICh1biA+PSAweGUz YWMgJiYgdW4gPD0gMHhlNDY3KSB7CisgICAgICAgICAgICByZXR1cm4oMHhmNTQwICsgKHVuIC0g MHhlM2FjKSk7CisgICAgICAgIH0gZWxzZSBpZiAodW4gPj0gMHhlNDY4ICYmIHVuIDw9IDB4ZTUy MykgeworICAgICAgICAgICAgcmV0dXJuKDB4ZjY0MCArICh1biAtIDB4ZTQ2OCkpOworICAgICAg ICB9IGVsc2UgaWYgKHVuID49IDB4ZTUyNCAmJiB1biA8PSAweGU1ZGYpIHsKKyAgICAgICAgICAg IHJldHVybigweGY3NDAgKyAodW4gLSAweGU1MjQpKTsKKyAgICAgICAgfSBlbHNlIGlmICh1biA+ PSAweGU1ZTAgJiYgdW4gPD0gMHhlNjliKSB7CisgICAgICAgICAgICByZXR1cm4oMHhmODQwICsg KHVuIC0gMHhlNWUwKSk7CisgICAgICAgIH0gZWxzZSBpZiAodW4gPj0gMHhlNjljICYmIHVuIDw9 IDB4ZTc1NykgeworICAgICAgICAgICAgcmV0dXJuKDB4Zjk0MCArICh1biAtIDB4ZTY5YykpOwor ICAgICAgICB9CisgICAgICAgIGJhZCsrOworICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICB9 CisgICAgLyogTk9UUkVBQ0hFRCAqLworICAgIC8qIFNvbWUgY29tcGlsZXJzIChjb3JyZWN0bHkp IHdhcm4gb2YgInN0YXRlbWVudCBub3QgcmVhY2hlZCIgaGVyZS4gKi8KKyAgICAvKiBCdXQgb3Ro ZXJzIGdpdmUgdXAgdGhlIGdob3N0IHdpdGggIm5vIHJldHVybiB2YWx1ZSIuICBUaGUgZm9ybWVy ICovCisgICAgLyogaXMgdGhlIGxlc3NlciBvZiB0d28gZXZpbHMuICovCisgICAgYmFkKys7Cisg ICAgcmV0dXJuKDB4ZmZmZCk7Cit9CisjZW5kaWYgLyogS0FOSkkgKi8KKworLyogVW5pY29kZS10 by1ibGFoIGZ1bmN0aW9ucywgdHhfYmxhaCgpLiAqLworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tf QU5TSUMKK3R4X3B1bmMoVVNIT1JUIGMpCisjZWxzZQordHhfcHVuYyhjKSBVU0hPUlQgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjID49IDB4MjAwMCAmJiBjIDw9IDB4MjAw YSkgICAgIC8qIFZhcmlvdXMtd2lkdGggc3BhY2VzICovCisgICAgICByZXR1cm4oKENIQVIpKDB4 MjApKTsKKyAgICBlbHNlIGlmIChjID49IDB4MjAxMCAmJiBjIDw9IDB4MjAxNSkgLyogVmFyaW91 cy13aWR0aCBkYXNoZXMgKi8KKyAgICAgIHJldHVybigoQ0hBUiknLScpOworICAgIGVsc2UgaWYg KGMgPj0gMHgyMDE4ICYmIGMgPD0gMHgyMDFiKSAvKiBBc3NvcnRlZCBzaW5nbGUgcXVvdGVzICov CisgICAgICByZXR1cm4oKENIQVIpMHgyNyk7CisgICAgZWxzZSBpZiAoYyA+PSAweDIwMWMgJiYg YyA8PSAweDIwMWYpIC8qIEFzc29ydGVkIGRvdWJsZSBxdW90ZXMgKi8KKyAgICAgIHJldHVybigo Q0hBUikweDIyKTsKKyAgICBlbHNlIGlmICgoYyA+PSAweDIwMjIgJiYgYyA8PSAweDIwMjQpIHx8 IGMgPT0gMHgyMDQzKSAvKiBCdWxsZXRzICovCisgICAgICByZXR1cm4oKENIQVIpMHhiNyk7Cisg ICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MjAzOTogICAgICAgICAgICAgICAgICAgICAg LyogTGVzcy10aGFuIHNpZ24gKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKTB4M2MpOworICAgICAg Y2FzZSAweDIwM2E6ICAgICAgICAgICAgICAgICAgICAgIC8qIEdyZWF0ZXItdGhhbiBzaWduICov CisgICAgICAgIHJldHVybigoQ0hBUikweDNlKTsKKyAgICAgIGNhc2UgMHgyMDQ0OiAgICAgICAg ICAgICAgICAgICAgICAvKiBTb2xpZHVzIC0+IFNsYXNoICovCisgICAgICAgIHJldHVybigoQ0hB UikweDJmKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorfQor CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgTGF0aW4t MSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9pZGVudChVU0hPUlQgYykKKyNlbHNlCit0eF9pZGVu dChjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjID09IDB4 MjAzZSkgICAgICAgICAgICAgICAgICAgIC8qIE92ZXJsaW5lIC0+IE1hY3JvbiAqLworICAgICAg cmV0dXJuKChDSEFSKTB4YWYpOworICAgIGVsc2UgaWYgKGMgPCAweDEwMCkgICAgICAgICAgICAg ICAgIC8qIExhdGluLTEgcmFuZ2UgKi8KKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsK KyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPciBtYXliZSBmcm9t IHB1bmN0dWF0aW9uIGJsb2NrICovCisgICAgICByZXR1cm4odHhfcHVuYyhjKSk7Cit9CisKK2lu dAorI2lmZGVmIENLX0FOU0lDCit0eF91c2FzY2lpKFVTSE9SVCBjKQorI2Vsc2UKK3R4X3VzYXNj aWkoYykgVVNIT1JUIGM7ICAgICAgICAgICAgICAgICAvKiBVUyBBU0NJSSAqLworI2VuZGlmIC8q IENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDgwKQorICAgICAgcmV0dXJuKChDSEFSKShj ICYgMHhmZikpOworICAgIGVsc2UgaWYgKGMgPj0gMHgyMDAwICYmIGMgPD0gMHgyMDBhKSAvKiBW YXJpb3VzLXdpZHRoIHNwYWNlcyAqLworICAgICAgcmV0dXJuKChDSEFSKSgweDIwKSk7CisgICAg ZWxzZSBpZiAoYyA+PSAweDIwMTAgJiYgYyA8PSAweDIwMTUpIC8qIFZhcmlvdXMtd2lkdGggZGFz aGVzICovCisgICAgICByZXR1cm4oKENIQVIpJy0nKTsKKyAgICBlbHNlIGlmIChjID49IDB4MjAx OCAmJiBjIDw9IDB4MjAxYikgLyogQXNzb3J0ZWQgc2luZ2xlIHF1b3RlcyAqLworICAgICAgcmV0 dXJuKChDSEFSKTB4MjcpOworICAgIGVsc2UgaWYgKGMgPj0gMHgyMDFjICYmIGMgPD0gMHgyMDFm KSAvKiBBc3NvcnRlZCBkb3VibGUgcXVvdGVzICovCisgICAgICByZXR1cm4oKENIQVIpMHgyMik7 CisgICAgZWxzZSBpZiAoKGMgPj0gMHgyMDIyICYmIGMgPD0gMHgyMDI0KSB8fCBjID09IDB4MjA0 MykgLyogQnVsbGV0cyAqLworICAgICAgcmV0dXJuKChDSEFSKTB4YjcpOworICAgIHN3aXRjaCAo YykgeworICAgICAgY2FzZSAweDIwMzk6ICAgICAgICAgICAgICAgICAgICAgIC8qIExlc3MtdGhh biBzaWduICovCisgICAgICAgIHJldHVybigoQ0hBUikweDNjKTsKKyAgICAgIGNhc2UgMHgyMDNh OiAgICAgICAgICAgICAgICAgICAgICAvKiBHcmVhdGVyLXRoYW4gc2lnbiAqLworICAgICAgICBy ZXR1cm4oKENIQVIpMHgzZSk7CisgICAgICBjYXNlIDB4MjA0NDogICAgICAgICAgICAgICAgICAg ICAgLyogU29saWR1cyAtPiBTbGFzaCAqLworICAgICAgICByZXR1cm4oKENIQVIpMHgyZik7Cisg ICAgfQorICAgIC8qCisgICAgICBIZXJlIHdlIG1pZ2h0IGFsc28gKGEpIG1hcCBhY2NlbnRlZCBS b21hbiBsZXR0ZXJzIHRvIHVuYWNjZW50ZWQgb25lczsKKyAgICAgIChiKSBtYXAgR3JlZWsvQ3ly aWxsaWMgQSAoZXRjKSB0byBSb21hbiwgYW5kIHNvIG9uLgorICAgICovCisgICAgcmV0dXJuKChj ICYgMHhmZjgwKSA/IC0xIDogKENIQVIpKGMgJiAweDdmKSk7Cit9CisKK2ludAorI2lmZGVmIENL X0FOU0lDCit0eF9icml0aXNoKFVTSE9SVCBjKQorI2Vsc2UKK3R4X2JyaXRpc2goYykgVVNIT1JU IGM7ICAgICAgICAgICAgICAgICAvKiBCcml0aXNoICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sKKyAgICBpZiAoYyAmIDB4ZmYwMCkKKyAgICAgIHJldHVybigtMSk7CisgICAgZWxzZSBpZiAo YyA9PSAoVVNIT1JUKSAweDAwYTMpICAgICAgLyogUG91bmQgc2lnbiAqLworICAgICAgcmV0dXJu KDB4MmIpOworICAgIGVsc2UKKyAgICAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKK30KKworaW50 CisjaWZkZWYgQ0tfQU5TSUMKK3R4X2FwbDEoVVNIT1JUIGMpCisjZWxzZQordHhfYXBsMShjKSBV U0hPUlQgYzsgICAgICAgICAgICAgICAgICAgIC8qIEFwbDEgKi8KKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeworICAgIGlmIChjID49IDB4MDA0MSAmJiBjIDw9IDB4MDA1YSkgICAgIC8qIExldHRl cnMgKi8KKyAgICAgIHJldHVybihjICsgMHgyMCk7CisgICAgc3dpdGNoIChjKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogT3RoZXJzICovCisgICAgICBjYXNlIDB4MDAyNDogcmV0dXJuKChD SEFSKTB4N2UpOworICAgICAgY2FzZSAweDAwMjc6IHJldHVybigoQ0hBUikweDRiKTsKKyAgICAg IGNhc2UgMHgwMDI4OiByZXR1cm4oKENIQVIpMHgzYSk7CisgICAgICBjYXNlIDB4MDAyOTogcmV0 dXJuKChDSEFSKTB4MjIpOworICAgICAgY2FzZSAweDAwMmI6IHJldHVybigoQ0hBUikweDJkKTsK KyAgICAgIGNhc2UgMHgwMDJjOiByZXR1cm4oKENIQVIpMHgyYyk7CisgICAgICBjYXNlIDB4MDAy ZDogcmV0dXJuKChDSEFSKTB4NWYpOworICAgICAgY2FzZSAweDAwMmU6IHJldHVybigoQ0hBUikw eDJlKTsKKyAgICAgIGNhc2UgMHgwMDJmOiByZXR1cm4oKENIQVIpMHgyZik7CisgICAgICBjYXNl IDB4MDAzMDogcmV0dXJuKChDSEFSKTB4MzApOworICAgICAgY2FzZSAweDAwMzE6IHJldHVybigo Q0hBUikweDMxKTsKKyAgICAgIGNhc2UgMHgwMDMyOiByZXR1cm4oKENIQVIpMHgzMik7CisgICAg ICBjYXNlIDB4MDAzMzogcmV0dXJuKChDSEFSKTB4MzMpOworICAgICAgY2FzZSAweDAwMzQ6IHJl dHVybigoQ0hBUikweDM0KTsKKyAgICAgIGNhc2UgMHgwMDM1OiByZXR1cm4oKENIQVIpMHgzNSk7 CisgICAgICBjYXNlIDB4MDAzNjogcmV0dXJuKChDSEFSKTB4MzYpOworICAgICAgY2FzZSAweDAw Mzc6IHJldHVybigoQ0hBUikweDM3KTsKKyAgICAgIGNhc2UgMHgwMDM4OiByZXR1cm4oKENIQVIp MHgzOCk7CisgICAgICBjYXNlIDB4MDAzOTogcmV0dXJuKChDSEFSKTB4MzkpOworICAgICAgY2Fz ZSAweDAwM2E6IHJldHVybigoQ0hBUikweDNlKTsKKyAgICAgIGNhc2UgMHgwMDNiOiByZXR1cm4o KENIQVIpMHgzYyk7CisgICAgICBjYXNlIDB4MDAzYzogcmV0dXJuKChDSEFSKTB4MjMpOworICAg ICAgY2FzZSAweDAwM2Q6IHJldHVybigoQ0hBUikweDI1KTsKKyAgICAgIGNhc2UgMHgwMDNlOiBy ZXR1cm4oKENIQVIpMHgyNik7CisgICAgICBjYXNlIDB4MDAzZjogcmV0dXJuKChDSEFSKTB4NTEp OworICAgICAgY2FzZSAweDAwNWI6IHJldHVybigoQ0hBUikweDNiKTsKKyAgICAgIGNhc2UgMHgw MDVjOiByZXR1cm4oKENIQVIpMHgzZik7CisgICAgICBjYXNlIDB4MDA1ZDogcmV0dXJuKChDSEFS KTB4MjcpOworICAgICAgY2FzZSAweDAwNWY6IHJldHVybigoQ0hBUikweDQ2KTsKKyAgICAgIGNh c2UgMHgwMDdiOiByZXR1cm4oKENIQVIpMHg3Yik7CisgICAgICBjYXNlIDB4MDA3YzogcmV0dXJu KChDSEFSKTB4NGQpOworICAgICAgY2FzZSAweDAwN2Q6IHJldHVybigoQ0hBUikweDdkKTsKKyAg ICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpMHgyMSk7CisgICAgICBjYXNlIDB4MDBhZjog cmV0dXJuKChDSEFSKTB4NDApOworICAgICAgY2FzZSAweDAwZDc6IHJldHVybigoQ0hBUikweDNk KTsKKyAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4oKENIQVIpMHgyYik7CisgICAgICBjYXNlIDB4 MjE5MDogcmV0dXJuKChDSEFSKTB4NWIpOworICAgICAgY2FzZSAweDIxOTE6IHJldHVybigoQ0hB UikweDU5KTsKKyAgICAgIGNhc2UgMHgyMTkyOiByZXR1cm4oKENIQVIpMHg1ZCk7CisgICAgICBj YXNlIDB4MjE5MzogcmV0dXJuKChDSEFSKTB4NTUpOworICAgICAgY2FzZSAweDIyMDY6IHJldHVy bigoQ0hBUikweDQ4KTsKKyAgICAgIGNhc2UgMHgyMjA3OiByZXR1cm4oKENIQVIpMHg0Nyk7Cisg ICAgICBjYXNlIDB4MjIwYTogcmV0dXJuKChDSEFSKTB4NDUpOworICAgICAgY2FzZSAweDIyMTg6 IHJldHVybigoQ0hBUikweDRhKTsKKyAgICAgIGNhc2UgMHgyMjI3OiByZXR1cm4oKENIQVIpMHgy OSk7CisgICAgICBjYXNlIDB4MjIyODogcmV0dXJuKChDSEFSKTB4MjgpOworICAgICAgY2FzZSAw eDIyMmE6IHJldHVybigoQ0hBUikweDU2KTsKKyAgICAgIGNhc2UgMHgyMjNjOiByZXR1cm4oKENI QVIpMHg1NCk7CisgICAgICBjYXNlIDB4MjI2MDogcmV0dXJuKChDSEFSKTB4MmEpOworICAgICAg Y2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikweDI0KTsKKyAgICAgIGNhc2UgMHgyMjY1OiByZXR1 cm4oKENIQVIpMHg1ZSk7CisgICAgICBjYXNlIDB4MjI4MjogcmV0dXJuKChDSEFSKTB4NWEpOwor ICAgICAgY2FzZSAweDIyODM6IHJldHVybigoQ0hBUikweDU4KTsKKyAgICAgIGNhc2UgMHgyMmEy OiByZXR1cm4oKENIQVIpMHg1Yyk7CisgICAgICBjYXNlIDB4MjJhMzogcmV0dXJuKChDSEFSKTB4 N2MpOworICAgICAgY2FzZSAweDIyYTQ6IHJldHVybigoQ0hBUikweDRlKTsKKyAgICAgIGNhc2Ug MHgyMmE1OiByZXR1cm4oKENIQVIpMHg0Mik7CisgICAgICBjYXNlIDB4MjJjMjogcmV0dXJuKChD SEFSKTB4NDMpOworICAgICAgY2FzZSAweDIyYzQ6IHJldHVybigoQ0hBUikweDYwKTsKKyAgICAg IGNhc2UgMHgyMmM2OiByZXR1cm4oKENIQVIpMHg1MCk7CisgICAgICBjYXNlIDB4MjMwODogcmV0 dXJuKChDSEFSKTB4NTMpOworICAgICAgY2FzZSAweDIzMGE6IHJldHVybigoQ0hBUikweDQ0KTsK KyAgICAgIGNhc2UgMHgyMzczOiByZXR1cm4oKENIQVIpMHg0OSk7CisgICAgICBjYXNlIDB4MjM3 NDogcmV0dXJuKChDSEFSKTB4NTIpOworICAgICAgY2FzZSAweDIzNzU6IHJldHVybigoQ0hBUikw eDU3KTsKKyAgICAgIGNhc2UgMHgyMzdhOiByZXR1cm4oKENIQVIpMHg0MSk7CisgICAgICBjYXNl IDB4MjVhZjogcmV0dXJuKChDSEFSKTB4NGMpOworICAgICAgY2FzZSAweDI1Y2I6IHJldHVybigo Q0hBUikweDRmKTsKKyAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOworICAg IH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbmFk aWFuIEZyZW5jaCAqLworI2lmZGVmIENLX0FOU0lDCit0eF9mcl9jYW5hZGlhbihVU0hPUlQgYykK KyNlbHNlCit0eF9mcl9jYW5hZGlhbihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeworICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiBy YW5nZSAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAw eGUwOiByZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIGEgZ3JhdmUgKi8KKyAgICAgIGNhc2UgMHhl MjogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiBhIGNpcmN1bWZsZXggKi8KKyAgICAgIGNhc2Ug MHhlNzogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBjIGNlZGlsbGEgKi8KKyAgICAgIGNhc2Ug MHhlODogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiBlIGdyYXZlICovCisgICAgICBjYXNlIDB4 ZTk6IHJldHVybigweDdiKTsgICAgICAgICAgLyogZSBhY3V0ZSAqLworICAgICAgY2FzZSAweGVh OiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIGUgY2lyY3VtZmxleCAqLworICAgICAgY2FzZSAw eGVlOiByZXR1cm4oMHg1ZSk7ICAgICAgICAgIC8qIGkgY2lyY3VtZmxleCAqLworICAgICAgY2Fz ZSAweGY0OiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIG8gY2lyY3VtZmxleCAqLworICAgICAg Y2FzZSAweGY5OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIHUgZ3JhdmUgKi8KKyAgICAgIGNh c2UgMHhmYjogcmV0dXJuKDB4NmUpOyAgICAgICAgICAvKiB1IGNpcmN1bWZsZXggKi8KKyAgICAg IGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOworICAgIH0KK30KKworaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERhbmlzaC9Ob3J3ZWdpYW4gKi8KKyNp ZmRlZiBDS19BTlNJQwordHhfZGFuaXNoKFVTSE9SVCBjKQorI2Vsc2UKK3R4X2RhbmlzaChjKSBV U0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHhmZjAwKSAg ICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLworICAgICAgcmV0dXJuKC0xKTsK KyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweGM2OiByZXR1cm4oMHg1Yik7ICAgICAgICAg IC8qIEFFICovCisgICAgICBjYXNlIDB4ZDg6IHJldHVybigweDVjKTsgICAgICAgICAgLyogTyBz dHJva2UgKi8KKyAgICAgIGNhc2UgMHhlNjogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBhZSAq LworICAgICAgY2FzZSAweGY4OiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8gc3Ryb2tlICov CisgICAgICBjYXNlIDB4ZTU6IHJldHVybigweDdkKTsgICAgICAgICAgLyogYSByaW5nICovCisg ICAgICBjYXNlIDB4YWY6IHJldHVybigweDdlKTsgICAgICAgICAgLyogbWFjcm9uICovCisgICAg ICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEdXRjaCAqLworI2lmZGVmIENLX0FO U0lDCit0eF9kdXRjaChVU0hPUlQgYykKKyNlbHNlCit0eF9kdXRjaChjKSBVU0hPUlQgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYgMHhmZTAwKSAgICAgICAgICAgICAg ICAgICAgIC8qIE91dCBvZiByYW5nZSAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBzd2l0Y2go YykgeworICAgICAgY2FzZSAweDAwN2M6IHJldHVybigweDVkKTsgICAgICAgIC8qIHZlcnRpY2Fs IGJhciAqLworICAgICAgY2FzZSAweDAwYTM6IHJldHVybigweDIzKTsgICAgICAgIC8qIHBvdW5k IHNpZ24gKi8KKyAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oMHg3Yik7ICAgICAgICAvKiBkaWFl cmVzaXMgKi8KKyAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oMHg3ZSk7ICAgICAgICAvKiBhY3V0 ZSBhY2NlbnQgKi8KKyAgICAgIGNhc2UgMHgwMGJjOiByZXR1cm4oMHg3ZCk7ICAgICAgICAvKiAx LzQgKi8KKyAgICAgIGNhc2UgMHgwMGJlOiByZXR1cm4oMHg0MCk7ICAgICAgICAvKiAzLzQgKi8K KyAgICAgIGNhc2UgMHgwMGJkOiByZXR1cm4oMHg1Yyk7ICAgICAgICAvKiAxLzIgKi8KKyAgICAg IGNhc2UgMHgwMGZmOiByZXR1cm4oMHg1Yik7ICAgICAgICAvKiB5IGRpYWVyZXNpcyAoaWopICov CisgICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKDB4N2MpOyAgICAgICAgLyogRmxvcmluICovCisg ICAgICBkZWZhdWx0OiAgIHJldHVybigoYyAmIDB4ODApID8gLTEgOiAoQ0hBUikoYyAmIDB4N2Yp KTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGaW5uaXNoICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2Zpbm5pc2goVVNIT1JUIGMpCisjZWxz ZQordHhfZmlubmlzaChjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAg IGlmIChjICYgMHhmZjAwKSAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBvZiByYW5nZSAqLwor ICAgICAgcmV0dXJuKC0xKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweGM0OiByZXR1 cm4oMHg1Yik7ICAgICAgICAgIC8qIEEgZGlhZXJlc2lzICovCisgICAgICBjYXNlIDB4ZDY6IHJl dHVybigweDVjKTsgICAgICAgICAgLyogTyBkaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMHhjNTog cmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBBIHJpbmcgKi8KKyAgICAgIGNhc2UgMHhkYzogcmV0 dXJuKDB4NWUpOyAgICAgICAgICAvKiBVIGRpYWVyZXNpcyAqLworICAgICAgY2FzZSAweGU5OiBy ZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIGUgYWN1dGUgKi8KKyAgICAgIGNhc2UgMHhlNDogcmV0 dXJuKDB4N2IpOyAgICAgICAgICAvKiBhIGRpYWVyZXNpcyAqLworICAgICAgY2FzZSAweGY2OiBy ZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG8gZGlhZXJlc2lzICovCisgICAgICBjYXNlIDB4ZTU6 IHJldHVybigweDdkKTsgICAgICAgICAgLyogYSByaW5nICovCisgICAgICBjYXNlIDB4ZmM6IHJl dHVybigweDdlKTsgICAgICAgICAgLyogdSBkaWFlcmVzaXMgKi8KKyAgICAgIGRlZmF1bHQ6ICAg cmV0dXJuKHR4X3VzYXNjaWkoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZyZW5jaCAqLworI2lmZGVmIENLX0FOU0lDCit0eF9mcmVu Y2goVVNIT1JUIGMpCisjZWxzZQordHhfZnJlbmNoKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyog T3V0IG9mIHJhbmdlICovCisgICAgICByZXR1cm4oLTEpOworICAgIHN3aXRjaChjKSB7CisgICAg ICBjYXNlIDB4YTM6IHJldHVybigweDIzKTsgICAgICAgICAgLyogcG91bmQgc2lnbiAqLworICAg ICAgY2FzZSAweGE3OiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIHNlY3Rpb24gc2lnbiAqLwor ICAgICAgY2FzZSAweGE4OiByZXR1cm4oMHg3ZSk7ICAgICAgICAgIC8qIGRpYWVyZXNpcyAqLwor ICAgICAgY2FzZSAweGIwOiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIHJpbmcgKi8KKyAgICAg IGNhc2UgMHhiNTogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiBtaWNyb24gc2lnbiAobXUpICov CisgICAgICBjYXNlIDB4ZTA6IHJldHVybigweDQwKTsgICAgICAgICAgLyogYSBncmF2ZSAqLwor ICAgICAgY2FzZSAweGU3OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIGMgY2VkaWxsYSAqLwor ICAgICAgY2FzZSAweGU4OiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGUgZ3JhdmUgKi8KKyAg ICAgIGNhc2UgMHhlOTogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBlIGFjdXRlICovCisgICAg ICBjYXNlIDB4Zjk6IHJldHVybigweDdjKTsgICAgICAgICAgLyogdSBncmF2ZSAqLworICAgICAg ZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7CisgICAgfQorfQorCitpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2VybWFuICovCisjaWZkZWYgQ0tfQU5T SUMKK3R4X2dlcm1hbihVU0hPUlQgYykKKyNlbHNlCit0eF9nZXJtYW4oYykgVVNIT1JUIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAgICAg ICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgc3dpdGNo KGMpIHsKKyAgICAgIGNhc2UgMHhhNzogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBzZWN0aW9u IHNpZ24gKi8KKyAgICAgIGNhc2UgMHhjNDogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiBBIHVt bGF1dCAqLworICAgICAgY2FzZSAweGQ2OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIE8gdW1s YXV0ICovCisgICAgICBjYXNlIDB4ZGM6IHJldHVybigweDVkKTsgICAgICAgICAgLyogVSB1bWxh dXQgKi8KKyAgICAgIGNhc2UgMHhkZjogcmV0dXJuKDB4N2UpOyAgICAgICAgICAvKiBlc3MtemV0 ICovCisgICAgICBjYXNlIDB4ZTQ6IHJldHVybigweDdiKTsgICAgICAgICAgLyogYSB1bWxhdXQg Ki8KKyAgICAgIGNhc2UgMHhmNjogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIHVtbGF1dCAq LworICAgICAgY2FzZSAweGZjOiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIHUgdW1sYXV0Ki8K KyAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOworICAgIH0KK30KKworaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlYnJldy03ICovCisjaWZk ZWYgQ0tfQU5TSUMKK3R4X2hlYnJldzcoVVNIT1JUIGMpCisjZWxzZQordHhfaGVicmV3NyhjKSBV U0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg2MCkgICAg ICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAw eDdmKSk7CisgICAgZWxzZSBpZiAoYyA+PSAxMjMgJiYgYyA8IDEyOCkgICAgICAgLyogQVNDSUkg Ki8KKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4N2YpKTsKKyAgICBlbHNlIGlmIChjID49IDB4 MDVkMCAmJiBjIDw9IDB4MDVlYSkgLyogSGVicmV3IDI3IGNvbnRpZ3VvdXMgY2hhcmFjdGVycyAq LworICAgICAgcmV0dXJuKChDSEFSKSgoaW50KWMgLSAweDVkMCArIDk2KSk7CisgICAgZWxzZSBy ZXR1cm4oLTEpOworfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogR3JlZWsgRUxPVCA5MjcgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfZWxvdDkyNyhVU0hPUlQg YykKKyNlbHNlCit0eF9lbG90OTI3KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisgICAgaWYgKGMgPD0gMHg4MCkgeyAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgKi8K KyAgICAgICAgaWYgKGlzbG93ZXIoYykpIGMgPSB0b3VwcGVyKGMpOyAvKiBTZW5kIGFsbCBsZXR0 ZXJzIGluIHVwcGVyY2FzZSAqLworICAgICAgICByZXR1cm4oKENIQVIpKGMgJiAweDdmKSk7Cisg ICAgfQorCisvKiBHcmVlayAtLSBtYXAgYWxsIEdyZWVrIGNoYXJhY3RlcnMgdG8gdW5hY2NlbnRl ZCB1cHBlcmNhc2UgKi8KKworICAgIGlmIChjID49IDB4MDM5MSAmJiBjIDw9IDB4MDNhMSkgLyog QWxwaGEgdGhydSBSaG8gLSB1cHBlcmNhc2UgKi8KKyAgICAgIHJldHVybigoQ0hBUikoKGludClj IC0gMHgwMzkxICsgOTcpKTsKKyAgICBlbHNlIGlmIChjID49IDB4MDNhMyAmJiBjIDw9IDB4MDNh OSkgLyogU2lnbWEgdGhydSBPbWVnYSAtIHVwcGVyY2FzZSAqLworICAgICAgcmV0dXJuKChDSEFS KSgoaW50KWMgLSAweDAzOTEgKyA5NikpOworICAgIGVsc2UgaWYgKGMgPj0gMHgwM2IxICYmIGMg PD0gMHgwM2MxKSAvKiBBbHBoYSB0aHJ1IFJobyAtIGxvd2VyY2FzZSAqLworICAgICAgcmV0dXJu KChDSEFSKSgoaW50KWMgLSAweDAzOTEgKyA5NykpOworICAgIGVsc2UgaWYgKGMgPj0gMHgwM2Mz ICYmIGMgPD0gMHgwM2M5KSAvKiBTaWdtYSB0aHJ1IE9tZWdhIC0gdXBwZXJjYXNlICovCisgICAg ICByZXR1cm4oKENIQVIpKChpbnQpYyAtIDB4MDM5MSArIDk2KSk7CisgICAgc3dpdGNoIChjKSB7 CisgICAgICBjYXNlIDB4MDNjMjogcmV0dXJuKChDSEFSKTExNCk7ICAgLyogVGVybWluYWwgc2ln bWEgKi8KKyAgICAgIGNhc2UgMHgwMzg2OiByZXR1cm4oKENIQVIpOTcpOyAgICAvKiBBbHBoYSBU b25vcyAqLworICAgICAgY2FzZSAweDAzYWM6IHJldHVybigoQ0hBUik5Nyk7ICAgIC8qIGFscGhh IFRvbm9zICovCisgICAgICBjYXNlIDB4MDM4ODogcmV0dXJuKChDSEFSKTEwMSk7ICAgLyogRXBz aWxvbiBUb25vcyAqLworICAgICAgY2FzZSAweDAzYWQ6IHJldHVybigoQ0hBUikxMDEpOyAgIC8q IGVwc2lsb24gVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwMzg5OiByZXR1cm4oKENIQVIpMTAzKTsg ICAvKiBFdGEgVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwM2FlOiByZXR1cm4oKENIQVIpMTAzKTsg ICAvKiBldGEgVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwMzhhOiByZXR1cm4oKENIQVIpMTA1KTsg ICAvKiBJb3RhIFRvbm9zICovCisgICAgICBjYXNlIDB4MDNhZjogcmV0dXJuKChDSEFSKTEwNSk7 ICAgLyogaW90YSBUb25vcyAqLworICAgICAgY2FzZSAweDAzY2E6IHJldHVybigoQ0hBUikxMDUp OyAgIC8qIGlvdGEgRGlhbHl0aWthICovCisgICAgICBjYXNlIDB4MDM4YzogcmV0dXJuKChDSEFS KTExMSk7ICAgLyogT21pY3JvbiBUb25vcyAqLworICAgICAgY2FzZSAweDAzY2M6IHJldHVybigo Q0hBUikxMTEpOyAgIC8qIG9taWNyb24gVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwMzhlOiByZXR1 cm4oKENIQVIpMTE2KTsgICAvKiBVcHNpbG9uIFRvbm9zICovCisgICAgICBjYXNlIDB4MDNkMzog cmV0dXJuKChDSEFSKTExNik7ICAgLyogVXBzaWxvbiBUb25vcyAqLworICAgICAgY2FzZSAweDAz Y2Q6IHJldHVybigoQ0hBUikxMTYpOyAgIC8qIHVwc2lsb24gVG9ub3MgKi8KKyAgICAgIGNhc2Ug MHgwM2NiOiByZXR1cm4oKENIQVIpMTE2KTsgICAvKiB1cHNpbG9uIERpYWx5dGlrYSAqLworICAg ICAgY2FzZSAweDAzYjA6IHJldHVybigoQ0hBUikxMTYpOyAgIC8qIHVwc2lsb24gRGlhbHl0aWth K1Rvbm9zICovCisgICAgICBjYXNlIDB4MDM4ZjogcmV0dXJuKChDSEFSKTEyMCk7ICAgLyogT21l Z2EgVG9ub3MgKi8KKyAgICAgIGNhc2UgMHgwM2NlOiByZXR1cm4oKENIQVIpMTIwKTsgICAvKiBv bWVnYSBUb25vcyAqLworICAgICAgY2FzZSAweDAzOTA6IHJldHVybigoQ0hBUikxMDUpOyAgIC8q IGlvdGEgRGlhbHl0aWthK1Rvbm9zICovCisgICAgICBjYXNlIDB4MDNhYTogcmV0dXJuKChDSEFS KTEwNSk7ICAgLyogSW90YSBEaWFseXRpa2EgKi8KKyAgICAgIGNhc2UgMHgwM2FiOiByZXR1cm4o KENIQVIpMTE2KTsgICAvKiBVcHNpbG9uIERpYWx5dGlrYSAqLworICAgICAgY2FzZSAweDAzZDQ6 IHJldHVybigoQ0hBUikxMTYpOyAgIC8qIFVwc2lsb24gRGlhbHl0aWthICovCisgICAgICBjYXNl IDB4MDNkMDogcmV0dXJuKChDSEFSKTk4KTsgICAgLyogQWx0ZXJuYXRpdmUgYmV0YSAqLworICAg ICAgY2FzZSAweDAzZDE6IHJldHVybigoQ0hBUikxMDQpOyAgIC8qIE9wZW4gdGhldGEgKi8KKyAg ICAgIGNhc2UgMHgwM2Q1OiByZXR1cm4oKENIQVIpMTE3KTsgICAvKiBPcGVuIHBoaSAqLworICAg ICAgY2FzZSAweDAzZDY6IHJldHVybigoQ0hBUikxMTIpOyAgIC8qIEFsdGVybmF0aXZlIFBpICov CisgICAgICBkZWZhdWx0OiByZXR1cm4oLTEpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEh1bmdhcmlhbiAqLworI2lmZGVmIENLX0FOU0lD Cit0eF9odW5nYXJpYW4oVVNIT1JUIGMpCisjZWxzZQordHhfaHVuZ2FyaWFuKGMpIFVTSE9SVCBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPT0gMHgwMmRkIHx8IGMgPT0g MHgyMDMzKQorICAgICAgcmV0dXJuKDB4N2UpOyAgICAgICAgICAgICAgICAgICAgIC8qIGRvdWJs ZSBhY3V0ZSBhY2NlbnQgKi8KKyAgICBlbHNlIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAgICAg ICAvKiBPdXQgb2YgcmFuZ2UgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgc3dpdGNoKGMpIHsK KyAgICAgIGNhc2UgMHhjMTogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBBIGFjdXRlICovCisg ICAgICBjYXNlIDB4Yzk6IHJldHVybigweDViKTsgICAgICAgICAgLyogRSBhY3V0ZSAqLworICAg ICAgY2FzZSAweGQ2OiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIE8gdW1sYXV0ICovCisgICAg ICBjYXNlIDB4ZGM6IHJldHVybigweDVkKTsgICAgICAgICAgLyogVSB1bWxhdXQgKi8KKyAgICAg IGNhc2UgMHhlOTogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBlIGFjdXRlICovCisgICAgICBj YXNlIDB4ZjY6IHJldHVybigweDdjKTsgICAgICAgICAgLyogbyB1bWxhdXQgKi8KKyAgICAgIGNh c2UgMHhmYTogcmV0dXJuKDB4NjApOyAgICAgICAgICAvKiB1IGFjdXRlICovCisgICAgICBjYXNl IDB4ZmM6IHJldHVybigweDdkKTsgICAgICAgICAgLyogdSB1bWxhdXQgKi8KKyAgICAgIGRlZmF1 bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEljZWxhbmRpYyAqLworI2lmZGVmIENLX0FOU0lD Cit0eF9pY2VsYW5kaWMoVVNIT1JUIGMpCisjZWxzZQordHhfaWNlbGFuZGljKGMpIFVTSE9SVCBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweGZmMDApICAgICAgICAg ICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCisgICAgICByZXR1cm4oLTEpOworICAgIHN3 aXRjaChjKSB7CisgICAgICBjYXNlIDB4ZGU6IHJldHVybigweDQwKTsgICAgICAgICAgLyogVGhv cm4gKi8KKyAgICAgIGNhc2UgMHhkMDogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiBFdGggKi8K KyAgICAgIGNhc2UgMHhjNjogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBBRSAqLworICAgICAg Y2FzZSAweGQ2OiByZXR1cm4oMHg1ZSk7ICAgICAgICAgIC8qIE8gdW1sYXV0ICovCisgICAgICBj YXNlIDB4ZmU6IHJldHVybigweDYwKTsgICAgICAgICAgLyogdGhvcm4gKi8KKyAgICAgIGNhc2Ug MHhmMDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBldGggKi8KKyAgICAgIGNhc2UgMHhlNjog cmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiBhZSAqLworICAgICAgY2FzZSAweGY2OiByZXR1cm4o MHg3ZSk7ICAgICAgICAgIC8qIG8gdW1sYXV0ICovCisgICAgICBkZWZhdWx0OiAgIHJldHVybih0 eF91c2FzY2lpKGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJdGFsaWFuICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2l0YWxpYW4oVVNI T1JUIGMpCisjZWxzZQordHhfaXRhbGlhbihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeworICAgIGlmIChjICYgMHhmZjAwKSAgICAgICAgICAgICAgICAgICAgIC8qIE91dCBv ZiByYW5nZSAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2Fz ZSAweGEzOiByZXR1cm4oMHgyMyk7ICAgICAgICAgIC8qIHBvdW5kIHNpZ24gKi8KKyAgICAgIGNh c2UgMHhhNzogcmV0dXJuKDB4NDApOyAgICAgICAgICAvKiBzZWN0aW9uIHNpZ24gKi8KKyAgICAg IGNhc2UgMHhiMDogcmV0dXJuKDB4NWIpOyAgICAgICAgICAvKiByaW5nICovCisgICAgICBjYXNl IDB4ZTc6IHJldHVybigweDVjKTsgICAgICAgICAgLyogYyBjZWRpbGxhICovCisgICAgICBjYXNl IDB4ZTk6IHJldHVybigweDVkKTsgICAgICAgICAgLyogZSBhY3V0ZSAqLworICAgICAgY2FzZSAw eGY5OiByZXR1cm4oMHg2MCk7ICAgICAgICAgIC8qIHUgZ3JhdmUgKi8KKyAgICAgIGNhc2UgMHhl MDogcmV0dXJuKDB4N2IpOyAgICAgICAgICAvKiBhIGdyYXZlICovCisgICAgICBjYXNlIDB4ZjI6 IHJldHVybigweDdjKTsgICAgICAgICAgLyogbyBncmF2ZSAqLworICAgICAgY2FzZSAweGU4OiBy ZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIGUgZ3JhdmUgKi8KKyAgICAgIGNhc2UgMHhlYzogcmV0 dXJuKDB4N2UpOyAgICAgICAgICAvKiBpIGdyYXZlICovCisgICAgICBkZWZhdWx0OiAgIHJldHVy bih0eF91c2FzY2lpKGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBKSVMgMDIwMSBSb21hbiAqLworI2lmZGVmIENLX0FOU0lDCit0eF9q aXMwMjAxcihVU0hPUlQgYykKKyNlbHNlCit0eF9qaXMwMjAxcihjKSBVU0hPUlQgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjICYmIDB4ZmY4MCkgICAgICAgICAgICAgICAg ICAgIC8qIDcgYml0cyAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBzd2l0Y2ggKGMpIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIEFTQ0lJIHdpdGggKi8KKyAgICAgIGNhc2UgMHgw MGE1OiByZXR1cm4oOTIpOyAgICAgICAgICAvKiB0d28gZXhjZXB0aW9ucyAqLworICAgICAgY2Fz ZSAweDAwYWY6IHJldHVybigxMjYpOworICAgICAgY2FzZSAweDIwM2U6IHJldHVybigxMjYpOwor ICAgICAgZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7CisgICAgfQorfQorCitpbnQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSklTIDAyMDEgS2F0YWthbmEg Ki8KKyNpZmRlZiBDS19BTlNJQwordHhfamlzMDIwMWsoVVNIT1JUIGMpCisjZWxzZQordHhfamlz MDIwMWsoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8 IDB4ZmY2MSB8fCBjID4gMHhmZjlmKQorICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIE91dCBvZiByYW5nZSAqLworICAgIGVsc2UKKyAgICAgIHJldHVybigoaW50KWMg LSAweGZlYzApOyAgICAgICAgICAvKiAweGZmNjEgLSBhMCA9IDB4ZmVjMCAqLworfQorCitpbnQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hvcnQgS09JICovCisjaWZk ZWYgQ0tfQU5TSUMKK3R4X2tvaTcoVVNIT1JUIGMpCisjZWxzZQordHhfa29pNyhjKSBVU0hPUlQg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg1MCkKKyAgICAgIHJl dHVybigoQ0hBUikoYyAmIDB4N2YpKTsKKyAgICBlbHNlIGlmIChjID4gMHg3ZikKKyAgICAgIHJl dHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KKyAgICBz d2l0Y2goYykgeworICAgICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUik5Nyk7CisgICAgICBj YXNlIDB4MDQxMTogcmV0dXJuKChDSEFSKTk4KTsKKyAgICAgIGNhc2UgMHgwNDEyOiByZXR1cm4o KENIQVIpMTE5KTsKKyAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4oKENIQVIpMTAzKTsKKyAgICAg IGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIpMTAwKTsKKyAgICAgIGNhc2UgMHgwNDE1OiByZXR1 cm4oKENIQVIpMTAxKTsKKyAgICAgIGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpMTE4KTsKKyAg ICAgIGNhc2UgMHgwNDE3OiByZXR1cm4oKENIQVIpMTIyKTsKKyAgICAgIGNhc2UgMHgwNDE4OiBy ZXR1cm4oKENIQVIpMTA1KTsKKyAgICAgIGNhc2UgMHgwNDE5OiByZXR1cm4oKENIQVIpMTA2KTsK KyAgICAgIGNhc2UgMHgwNDFhOiByZXR1cm4oKENIQVIpMTA3KTsKKyAgICAgIGNhc2UgMHgwNDFi OiByZXR1cm4oKENIQVIpMTA4KTsKKyAgICAgIGNhc2UgMHgwNDFjOiByZXR1cm4oKENIQVIpMTA5 KTsKKyAgICAgIGNhc2UgMHgwNDFkOiByZXR1cm4oKENIQVIpMTEwKTsKKyAgICAgIGNhc2UgMHgw NDFlOiByZXR1cm4oKENIQVIpMTExKTsKKyAgICAgIGNhc2UgMHgwNDFmOiByZXR1cm4oKENIQVIp MTEyKTsKKyAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4oKENIQVIpMTE0KTsKKyAgICAgIGNhc2Ug MHgwNDIxOiByZXR1cm4oKENIQVIpMTE1KTsKKyAgICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENI QVIpMTE2KTsKKyAgICAgIGNhc2UgMHgwNDIzOiByZXR1cm4oKENIQVIpMTE3KTsKKyAgICAgIGNh c2UgMHgwNDI0OiByZXR1cm4oKENIQVIpMTAyKTsKKyAgICAgIGNhc2UgMHgwNDI1OiByZXR1cm4o KENIQVIpMTA0KTsKKyAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENIQVIpOTkpOworICAgICAg Y2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikxMjYpOworICAgICAgY2FzZSAweDA0Mjg6IHJldHVy bigoQ0hBUikxMjMpOworICAgICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUikxMjUpOworICAg ICAgY2FzZSAweDA0MmI6IHJldHVybigoQ0hBUikxMjEpOworICAgICAgY2FzZSAweDA0MmM6IHJl dHVybigoQ0hBUikxMjApOworICAgICAgY2FzZSAweDA0MmQ6IHJldHVybigoQ0hBUikxMjQpOwor ICAgICAgY2FzZSAweDA0MmU6IHJldHVybigoQ0hBUik5Nik7CisgICAgICBjYXNlIDB4MDQyZjog cmV0dXJuKChDSEFSKTExMyk7CisgICAgICBkZWZhdWx0OiByZXR1cm4oLTEpOworICAgIH0KK30K KworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnR1Z3Vlc2Ug Ki8KKyNpZmRlZiBDS19BTlNJQwordHhfcG9ydHVndWVzZShVU0hPUlQgYykKKyNlbHNlCit0eF9w b3J0dWd1ZXNlKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYg KGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCisgICAg ICByZXR1cm4oLTEpOworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4ZTA6IHJldHVybigw eGE3KTsgICAgICAgICAgLyogc2VjdGlvbiBzaWduICovCisgICAgICBjYXNlIDB4YjA6IHJldHVy bigweGMzKTsgICAgICAgICAgLyogQSB0aWxkZSAqLworICAgICAgY2FzZSAweGU3OiByZXR1cm4o MHhjNyk7ICAgICAgICAgIC8qIEMgY2VkaWxsYSAqLworICAgICAgY2FzZSAweGE3OiByZXR1cm4o MHhkNSk7ICAgICAgICAgIC8qIE8gdGlsZGUgKi8KKyAgICAgIGNhc2UgMHhlOTogcmV0dXJuKDB4 ZTMpOyAgICAgICAgICAvKiBhIHRpbGRlICovCisgICAgICBjYXNlIDB4Zjk6IHJldHVybigweGU3 KTsgICAgICAgICAgLyogYyBjZWRpbGxhICovCisgICAgICBjYXNlIDB4ZTg6IHJldHVybigweGY1 KTsgICAgICAgICAgLyogbyB0aWxkZSAqLworICAgICAgY2FzZSAweGE4OiByZXR1cm4oMHhiMCk7 ICAgICAgICAgIC8qIHJpbmcgKi8KKyAgICAgIGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWko YykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNwYW5pc2ggKi8KKyNpZmRlZiBDS19BTlNJQwordHhfc3BhbmlzaChVU0hPUlQgYykKKyNl bHNlCit0eF9zcGFuaXNoKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgaWYgKGMgJiAweGZmMDApICAgICAgICAgICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICov CisgICAgICByZXR1cm4oLTEpOworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4YTM6IHJl dHVybigweDIzKTsgICAgICAgICAgLyogcG91bmQgc2lnbiAqLworICAgICAgY2FzZSAweGE3OiBy ZXR1cm4oMHg0MCk7ICAgICAgICAgIC8qIHNlY3Rpb24gKi8KKyAgICAgIGNhc2UgMHhhMTogcmV0 dXJuKDB4NWIpOyAgICAgICAgICAvKiBpbnZlcnRlZCBleGNsYW1hdGlvbiAqLworICAgICAgY2Fz ZSAweGQxOiByZXR1cm4oMHg1Yyk7ICAgICAgICAgIC8qIE4gdGlsZGUgKi8KKyAgICAgIGNhc2Ug MHhiZjogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBpbnZlcnRlZCBxdWVzdGlvbiBtYXJrICov CisgICAgICBjYXNlIDB4YjA6IHJldHVybigweDdiKTsgICAgICAgICAgLyogcmluZyAqLworICAg ICAgY2FzZSAweGYxOiByZXR1cm4oMHg3Yyk7ICAgICAgICAgIC8qIG4gdGlsZGUgKi8KKyAgICAg IGNhc2UgMHhlNzogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiBjIGNlZGlsbGEgKi8KKyAgICAg IGRlZmF1bHQ6ICAgcmV0dXJuKHR4X3VzYXNjaWkoYykpOworICAgIH0KK30KKworaW50ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN3ZWRpc2ggKi8KKyNpZmRlZiBDS19B TlNJQwordHhfc3dlZGlzaChVU0hPUlQgYykKKyNlbHNlCit0eF9zd2VkaXNoKGMpIFVTSE9SVCBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgJiAweGZmMDApICAgICAgICAg ICAgICAgICAgICAgLyogT3V0IG9mIHJhbmdlICovCisgICAgICByZXR1cm4oLTEpOworICAgIHN3 aXRjaChjKSB7CisgICAgICBjYXNlIDB4Yzk6IHJldHVybigweDQwKTsgICAgICAgICAgLyogRSBh Y3V0ZSAqLworICAgICAgY2FzZSAweGM0OiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIEEgdW1s YXV0Ki8KKyAgICAgIGNhc2UgMHhkNjogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBPIHVtbGF1 dCAqLworICAgICAgY2FzZSAweGM1OiByZXR1cm4oMHg1ZCk7ICAgICAgICAgIC8qIEEgcmluZyAq LworICAgICAgY2FzZSAweGRjOiByZXR1cm4oMHg1ZSk7ICAgICAgICAgIC8qIFUgdW1sYXV0ICov CisgICAgICBjYXNlIDB4ZTk6IHJldHVybigweDYwKTsgICAgICAgICAgLyogZSBhY3V0ZSAqLwor ICAgICAgY2FzZSAweGU0OiByZXR1cm4oMHg3Yik7ICAgICAgICAgIC8qIGEgdW1sYXV0ICovCisg ICAgICBjYXNlIDB4ZjY6IHJldHVybigweDdjKTsgICAgICAgICAgLyogbyB1bWxhdXQgKi8KKyAg ICAgIGNhc2UgMHhlNTogcmV0dXJuKDB4N2QpOyAgICAgICAgICAvKiBhIHJpbmcgKi8KKyAgICAg IGNhc2UgMHhmYzogcmV0dXJuKDB4N2UpOyAgICAgICAgICAvKiB1IHVtbGF1dCAqLworICAgICAg ZGVmYXVsdDogICByZXR1cm4odHhfdXNhc2NpaShjKSk7CisgICAgfQorfQorCisKK2ludCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTd2lzcyBOUkMgKi8KKyNpZmRlZiBD S19BTlNJQwordHhfc3dpc3MoVVNIT1JUIGMpCisjZWxzZQordHhfc3dpc3MoYykgVVNIT1JUIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyAmIDB4ZmYwMCkgICAgICAgICAg ICAgICAgICAgICAvKiBPdXQgb2YgcmFuZ2UgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgc3dp dGNoKGMpIHsKKyAgICAgIGNhc2UgMHhmOTogcmV0dXJuKDB4MjMpOyAgICAgICAgICAvKiB1IGdy YXZlICovCisgICAgICBjYXNlIDB4ZTA6IHJldHVybigweDQwKTsgICAgICAgICAgLyogYSBncmF2 ZSAqLworICAgICAgY2FzZSAweGU5OiByZXR1cm4oMHg1Yik7ICAgICAgICAgIC8qIGUgYWN1dGUg Ki8KKyAgICAgIGNhc2UgMHhlNzogcmV0dXJuKDB4NWMpOyAgICAgICAgICAvKiBjIGNlZGlsbGEg Ki8KKyAgICAgIGNhc2UgMHhlYTogcmV0dXJuKDB4NWQpOyAgICAgICAgICAvKiBlIGNpcmN1bWZs ZXggKi8KKyAgICAgIGNhc2UgMHhlZTogcmV0dXJuKDB4NWUpOyAgICAgICAgICAvKiBpIGNpcmN1 bWZsZXggKi8KKyAgICAgIGNhc2UgMHhlODogcmV0dXJuKDB4NWYpOyAgICAgICAgICAvKiBlIGdy YXZlICovCisgICAgICBjYXNlIDB4ZjQ6IHJldHVybigweDYwKTsgICAgICAgICAgLyogbyBjaXJj dW1mbGV4ICovCisgICAgICBjYXNlIDB4ZTQ6IHJldHVybigweDdiKTsgICAgICAgICAgLyogYSB1 bWxhdXQgKi8KKyAgICAgIGNhc2UgMHhmNjogcmV0dXJuKDB4N2MpOyAgICAgICAgICAvKiBvIHVt bGF1dCAqLworICAgICAgY2FzZSAweGZjOiByZXR1cm4oMHg3ZCk7ICAgICAgICAgIC8qIHUgdW1s YXV0ICovCisgICAgICBjYXNlIDB4ZmI6IHJldHVybigweDdlKTsgICAgICAgICAgLyogdSBjaXJj dW1mbGV4ICovCisgICAgICBkZWZhdWx0OiAgIHJldHVybih0eF91c2FzY2lpKGMpKTsKKyAgICB9 Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEeWFkaWMg QVBMICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2FwbDIoVVNIT1JUIGMpCisjZWxzZQordHhfYXBs MihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjID49IDB4 MDA0MSAmJiBjIDw9IDB4MDA1YSkgICAgIC8qIExldHRlcnMgKi8KKyAgICAgIHJldHVybihjIC0g MHhhMik7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFS KTB4YTApOworICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikweGE0KTsKKyAgICAgIGNh c2UgMHgwMGEzOiByZXR1cm4oKENIQVIpMHhkNCk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJu KChDSEFSKTB4ZGMpOworICAgICAgY2FzZSAweDAwYWY6IHJldHVybigoQ0hBUikweGRhKTsKKyAg ICAgIGNhc2UgMHgwMGQ3OiByZXR1cm4oKENIQVIpMHhhMSk7CisgICAgICBjYXNlIDB4MDBmNzog cmV0dXJuKChDSEFSKTB4YWYpOworICAgICAgY2FzZSAweDIxOTA6IHJldHVybigoQ0hBUikweGJi KTsKKyAgICAgIGNhc2UgMHgyMTkxOiByZXR1cm4oKENIQVIpMHhmZSk7CisgICAgICBjYXNlIDB4 MjE5MjogcmV0dXJuKChDSEFSKTB4ZGUpOworICAgICAgY2FzZSAweDIxOTM6IHJldHVybigoQ0hB UikweGZmKTsKKyAgICAgIGNhc2UgMHgyMjA2OiByZXR1cm4oKENIQVIpMHhhZSk7CisgICAgICBj YXNlIDB4MjIwNzogcmV0dXJuKChDSEFSKTB4ZmQpOworICAgICAgY2FzZSAweDIyMGE6IHJldHVy bigoQ0hBUikweGI1KTsKKyAgICAgIGNhc2UgMHgyMjE4OiByZXR1cm4oKENIQVIpMHhiYyk7Cisg ICAgICBjYXNlIDB4MjIyODogcmV0dXJuKChDSEFSKTB4ZGYpOworICAgICAgY2FzZSAweDIyMjk6 IHJldHVybigoQ0hBUikweGQxKTsKKyAgICAgIGNhc2UgMHgyMjJhOiByZXR1cm4oKENIQVIpMHhk Mik7CisgICAgICBjYXNlIDB4MjI2MDogcmV0dXJuKChDSEFSKTB4YjApOworICAgICAgY2FzZSAw eDIyNjE6IHJldHVybigoQ0hBUikweGI2KTsKKyAgICAgIGNhc2UgMHgyMjYyOiByZXR1cm4oKENI QVIpMHhjZCk7CisgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKTB4YjgpOworICAgICAg Y2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikweGI3KTsKKyAgICAgIGNhc2UgMHgyMjgyOiByZXR1 cm4oKENIQVIpMHhlMCk7CisgICAgICBjYXNlIDB4MjI4MzogcmV0dXJuKChDSEFSKTB4ZTEpOwor ICAgICAgY2FzZSAweDIyOTY6IHJldHVybigoQ0hBUikweGQ2KTsKKyAgICAgIGNhc2UgMHgyMmEy OiByZXR1cm4oKENIQVIpMHhkNyk7CisgICAgICBjYXNlIDB4MjJhMzogcmV0dXJuKChDSEFSKTB4 ZDgpOworICAgICAgY2FzZSAweDIyYTQ6IHJldHVybigoQ0hBUikweGJhKTsKKyAgICAgIGNhc2Ug MHgyMmE1OiByZXR1cm4oKENIQVIpMHhiOSk7CisgICAgICBjYXNlIDB4MjJjNDogcmV0dXJuKChD SEFSKTB4YjEpOworICAgICAgY2FzZSAweDIzMDg6IHJldHVybigoQ0hBUikweGNmKTsKKyAgICAg IGNhc2UgMHgyMzBhOiByZXR1cm4oKENIQVIpMHhjZSk7CisgICAgICBjYXNlIDB4MjMzNzogcmV0 dXJuKChDSEFSKTB4ZDkpOworICAgICAgY2FzZSAweDIzMzk6IHJldHVybigoQ0hBUikweGNhKTsK KyAgICAgIGNhc2UgMHgyMzNkOiByZXR1cm4oKENIQVIpMHhkNSk7CisgICAgICBjYXNlIDB4MjMz ZjogcmV0dXJuKChDSEFSKTB4YmUpOworICAgICAgY2FzZSAweDIzNDA6IHJldHVybigoQ0hBUikw eGJmKTsKKyAgICAgIGNhc2UgMHgyMzQ5OiByZXR1cm4oKENIQVIpMHhkMCk7CisgICAgICBjYXNl IDB4MjM0YjogcmV0dXJuKChDSEFSKTB4YzIpOworICAgICAgY2FzZSAweDIzNGU6IHJldHVybigo Q0hBUikweGMwKTsKKyAgICAgIGNhc2UgMHgyMzUyOiByZXR1cm4oKENIQVIpMHhjMyk7CisgICAg ICBjYXNlIDB4MjM1NTogcmV0dXJuKChDSEFSKTB4YzEpOworICAgICAgY2FzZSAweDIzNTk6IHJl dHVybigoQ0hBUikweGUyKTsKKyAgICAgIGNhc2UgMHgyMzVkOiByZXR1cm4oKENIQVIpMHhiZCk7 CisgICAgICBjYXNlIDB4MjM1ZTogcmV0dXJuKChDSEFSKTB4YzkpOworICAgICAgY2FzZSAweDIz NWY6IHJldHVybigoQ0hBUikweGM3KTsKKyAgICAgIGNhc2UgMHgyMzY4OiByZXR1cm4oKENIQVIp MHhjNik7CisgICAgICBjYXNlIDB4MjM2YTogcmV0dXJuKChDSEFSKTB4Y2MpOworICAgICAgY2Fz ZSAweDIzNmI6IHJldHVybigoQ0hBUikweGNiKTsKKyAgICAgIGNhc2UgMHgyMzZjOiByZXR1cm4o KENIQVIpMHhkMyk7CisgICAgICBjYXNlIDB4MjM3MTogcmV0dXJuKChDSEFSKTB4YzUpOworICAg ICAgY2FzZSAweDIzNzI6IHJldHVybigoQ0hBUikweGM0KTsKKyAgICAgIGNhc2UgMHgyMzczOiBy ZXR1cm4oKENIQVIpMHhkYik7CisgICAgICBjYXNlIDB4MjM3NDogcmV0dXJuKChDSEFSKTB4YjMp OworICAgICAgY2FzZSAweDIzNzU6IHJldHVybigoQ0hBUikweGIyKTsKKyAgICAgIGNhc2UgMHgy MzdhOiByZXR1cm4oKENIQVIpMHhiNCk7CisgICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFS KTB4YWEpOworICAgICAgY2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikweGEyKTsKKyAgICAgIGNh c2UgMHgyNTBjOiByZXR1cm4oKENIQVIpMHhhZCk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJu KChDSEFSKTB4YTUpOworICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikweGE2KTsKKyAg ICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpMHhhYyk7CisgICAgICBjYXNlIDB4MjUxYzog cmV0dXJuKChDSEFSKTB4YTkpOworICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUikweGEz KTsKKyAgICAgIGNhc2UgMHgyNTJjOiByZXR1cm4oKENIQVIpMHhhOCk7CisgICAgICBjYXNlIDB4 MjUzNDogcmV0dXJuKChDSEFSKTB4YTcpOworICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hB UikweGFiKTsKKyAgICAgIGNhc2UgMHgyNWFmOiByZXR1cm4oKENIQVIpMHhjOCk7CisgICAgICBj YXNlIDB4MjVjYjogcmV0dXJuKChDSEFSKTB4ZGQpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg aWYgKGMgPCAweGEwKQorICAgICAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICAg ICAgcmV0dXJuKHR4X3B1bmMoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEFQTC1QbHVzICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2Fw bDMoVVNIT1JUIGMpCisjZWxzZQordHhfYXBsMyhjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDAwYTA6IHJldHVybigo Q0hBUikweGEwKTsKKyAgICAgIGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpMHhhMSk7CisgICAg ICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKTB4YTIpOworICAgICAgY2FzZSAweDAwYTM6IHJl dHVybigoQ0hBUikweGEzKTsKKyAgICAgIGNhc2UgMHgwMGE1OiByZXR1cm4oKENIQVIpMHhhNSk7 CisgICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChDSEFSKTB4YTYpOworICAgICAgY2FzZSAweDAw YTc6IHJldHVybigoQ0hBUikweGE3KTsKKyAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIp MHhhOCk7CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKTB4YWIpOworICAgICAgY2Fz ZSAweDAwYWY6IHJldHVybigoQ0hBUikweGFmKTsKKyAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4o KENIQVIpMHhiNik7CisgICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKTB4YjcpOworICAg ICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikweGJiKTsKKyAgICAgIGNhc2UgMHgwMGJmOiBy ZXR1cm4oKENIQVIpMHhiZik7CisgICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKTB4YzAp OworICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikweGMxKTsKKyAgICAgIGNhc2UgMHgw MGMyOiByZXR1cm4oKENIQVIpMHhjMik7CisgICAgICBjYXNlIDB4MDBjMzogcmV0dXJuKChDSEFS KTB4YzMpOworICAgICAgY2FzZSAweDAwYzQ6IHJldHVybigoQ0hBUikweGM0KTsKKyAgICAgIGNh c2UgMHgwMGM1OiByZXR1cm4oKENIQVIpMHhjNSk7CisgICAgICBjYXNlIDB4MDBjNjogcmV0dXJu KChDSEFSKTB4YzYpOworICAgICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUikweGM3KTsKKyAg ICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpMHhjOCk7CisgICAgICBjYXNlIDB4MDBjOTog cmV0dXJuKChDSEFSKTB4YzkpOworICAgICAgY2FzZSAweDAwY2E6IHJldHVybigoQ0hBUikweGNh KTsKKyAgICAgIGNhc2UgMHgwMGNiOiByZXR1cm4oKENIQVIpMHhjYik7CisgICAgICBjYXNlIDB4 MDBjYzogcmV0dXJuKChDSEFSKTB4Y2MpOworICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hB UikweGNkKTsKKyAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpMHhjZSk7CisgICAgICBj YXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKTB4Y2YpOworICAgICAgY2FzZSAweDAwZDE6IHJldHVy bigoQ0hBUikweGQxKTsKKyAgICAgIGNhc2UgMHgwMGQyOiByZXR1cm4oKENIQVIpMHhkMik7Cisg ICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKTB4ZDMpOworICAgICAgY2FzZSAweDAwZDQ6 IHJldHVybigoQ0hBUikweGQ0KTsKKyAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpMHhk NSk7CisgICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKTB4ZDYpOworICAgICAgY2FzZSAw eDAwZDc6IHJldHVybigoQ0hBUikweGQ3KTsKKyAgICAgIGNhc2UgMHgwMGQ4OiByZXR1cm4oKENI QVIpMHhkOCk7CisgICAgICBjYXNlIDB4MDBkOTogcmV0dXJuKChDSEFSKTB4ZDkpOworICAgICAg Y2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikweGRhKTsKKyAgICAgIGNhc2UgMHgwMGRiOiByZXR1 cm4oKENIQVIpMHhkYik7CisgICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKTB4ZGMpOwor ICAgICAgY2FzZSAweDAwZGQ6IHJldHVybigoQ0hBUikweGRkKTsKKyAgICAgIGNhc2UgMHgwMGRm OiByZXR1cm4oKENIQVIpMHhkZik7CisgICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKTB4 ZTApOworICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikweGUxKTsKKyAgICAgIGNhc2Ug MHgwMGUyOiByZXR1cm4oKENIQVIpMHhlMik7CisgICAgICBjYXNlIDB4MDBlMzogcmV0dXJuKChD SEFSKTB4ZTMpOworICAgICAgY2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUikweGU0KTsKKyAgICAg IGNhc2UgMHgwMGU1OiByZXR1cm4oKENIQVIpMHhlNSk7CisgICAgICBjYXNlIDB4MDBlNjogcmV0 dXJuKChDSEFSKTB4ZTYpOworICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikweGU3KTsK KyAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpMHhlOCk7CisgICAgICBjYXNlIDB4MDBl OTogcmV0dXJuKChDSEFSKTB4ZTkpOworICAgICAgY2FzZSAweDAwZWE6IHJldHVybigoQ0hBUikw eGVhKTsKKyAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENIQVIpMHhlYik7CisgICAgICBjYXNl IDB4MDBlYzogcmV0dXJuKChDSEFSKTB4ZWMpOworICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigo Q0hBUikweGVkKTsKKyAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpMHhlZSk7CisgICAg ICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKTB4ZWYpOworICAgICAgY2FzZSAweDAwZjE6IHJl dHVybigoQ0hBUikweGYxKTsKKyAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIpMHhmMik7 CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKTB4ZjMpOworICAgICAgY2FzZSAweDAw ZjQ6IHJldHVybigoQ0hBUikweGY0KTsKKyAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIp MHhmNSk7CisgICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKTB4ZjYpOworICAgICAgY2Fz ZSAweDAwZjc6IHJldHVybigoQ0hBUikweGY3KTsKKyAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4o KENIQVIpMHhmOSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKTB4ZmEpOworICAg ICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikweGZiKTsKKyAgICAgIGNhc2UgMHgwMGZjOiBy ZXR1cm4oKENIQVIpMHhmYyk7CisgICAgICBjYXNlIDB4MDBmZDogcmV0dXJuKChDSEFSKTB4ZmQp OworICAgICAgY2FzZSAweDAwZmY6IHJldHVybigoQ0hBUikweGZmKTsKKyAgICAgIGNhc2UgMHgy MGFjOiByZXR1cm4oKENIQVIpMHg4MCk7CisgICAgICBjYXNlIDB4MjE5MDogcmV0dXJuKChDSEFS KTB4ODQpOworICAgICAgY2FzZSAweDIxOTE6IHJldHVybigoQ0hBUikweDg2KTsKKyAgICAgIGNh c2UgMHgyMTkyOiByZXR1cm4oKENIQVIpMHg4NSk7CisgICAgICBjYXNlIDB4MjE5MzogcmV0dXJu KChDSEFSKTB4ODcpOworICAgICAgY2FzZSAweDIyMDU6IHJldHVybigoQ0hBUikweGY4KTsKKyAg ICAgIGNhc2UgMHgyMjA2OiByZXR1cm4oKENIQVIpMHg5MSk7CisgICAgICBjYXNlIDB4MjIwNzog cmV0dXJuKChDSEFSKTB4OTIpOworICAgICAgY2FzZSAweDIyMGE6IHJldHVybigoQ0hBUikweGI5 KTsKKyAgICAgIGNhc2UgMHgyMjE4OiByZXR1cm4oKENIQVIpMHhiMCk7CisgICAgICBjYXNlIDB4 MjIyODogcmV0dXJuKChDSEFSKTB4OWYpOworICAgICAgY2FzZSAweDIyMjk6IHJldHVybigoQ0hB UikweDlkKTsKKyAgICAgIGNhc2UgMHgyMjJhOiByZXR1cm4oKENIQVIpMHg5ZSk7CisgICAgICBj YXNlIDB4MjI2MDogcmV0dXJuKChDSEFSKTB4YWMpOworICAgICAgY2FzZSAweDIyNjE6IHJldHVy bigoQ0hBUikweGFkKTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpMHg4OCk7Cisg ICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKTB4ODkpOworICAgICAgY2FzZSAweDIyODI6 IHJldHVybigoQ0hBUikweDliKTsKKyAgICAgIGNhc2UgMHgyMjgzOiByZXR1cm4oKENIQVIpMHg5 Yyk7CisgICAgICBjYXNlIDB4MjI5NjogcmV0dXJuKChDSEFSKTB4YjQpOworICAgICAgY2FzZSAw eDIyYTI6IHJldHVybigoQ0hBUikweGE0KTsKKyAgICAgIGNhc2UgMHgyMmEzOiByZXR1cm4oKENI QVIpMHg4MSk7CisgICAgICBjYXNlIDB4MjJhNDogcmV0dXJuKChDSEFSKTB4ODIpOworICAgICAg Y2FzZSAweDIyYTU6IHJldHVybigoQ0hBUikweDgzKTsKKyAgICAgIGNhc2UgMHgyMmM0OiByZXR1 cm4oKENIQVIpMHhhYSk7CisgICAgICBjYXNlIDB4MjMwODogcmV0dXJuKChDSEFSKTB4OTcpOwor ICAgICAgY2FzZSAweDIzMGE6IHJldHVybigoQ0hBUikweDk4KTsKKyAgICAgIGNhc2UgMHgyMzM3 OiByZXR1cm4oKENIQVIpMHhkZSk7CisgICAgICBjYXNlIDB4MjMzOTogcmV0dXJuKChDSEFSKTB4 OGUpOworICAgICAgY2FzZSAweDIzM2Q6IHJldHVybigoQ0hBUikweGIyKTsKKyAgICAgIGNhc2Ug MHgyMzNmOiByZXR1cm4oKENIQVIpMHg5YSk7CisgICAgICBjYXNlIDB4MjM0MDogcmV0dXJuKChD SEFSKTB4OTkpOworICAgICAgY2FzZSAweDIzNDk6IHJldHVybigoQ0hBUikweGIzKTsKKyAgICAg IGNhc2UgMHgyMzRiOiByZXR1cm4oKENIQVIpMHg5Myk7CisgICAgICBjYXNlIDB4MjM0ZTogcmV0 dXJuKChDSEFSKTB4OTYpOworICAgICAgY2FzZSAweDIzNTI6IHJldHVybigoQ0hBUikweDk0KTsK KyAgICAgIGNhc2UgMHgyMzU1OiByZXR1cm4oKENIQVIpMHg5NSk7CisgICAgICBjYXNlIDB4MjM1 OTogcmV0dXJuKChDSEFSKTB4OGYpOworICAgICAgY2FzZSAweDIzNWQ6IHJldHVybigoQ0hBUikw eGE5KTsKKyAgICAgIGNhc2UgMHgyMzVlOiByZXR1cm4oKENIQVIpMHg4ZCk7CisgICAgICBjYXNl IDB4MjM1ZjogcmV0dXJuKChDSEFSKTB4YjUpOworICAgICAgY2FzZSAweDIzNjQ6IHJldHVybigo Q0hBUikweGYwKTsKKyAgICAgIGNhc2UgMHgyMzY4OiByZXR1cm4oKENIQVIpMHhmZSk7CisgICAg ICBjYXNlIDB4MjM2YTogcmV0dXJuKChDSEFSKTB4YWUpOworICAgICAgY2FzZSAweDIzNmI6IHJl dHVybigoQ0hBUikweDkwKTsKKyAgICAgIGNhc2UgMHgyMzZjOiByZXR1cm4oKENIQVIpMHhkMCk7 CisgICAgICBjYXNlIDB4MjM3MTogcmV0dXJuKChDSEFSKTB4OGIpOworICAgICAgY2FzZSAweDIz NzI6IHJldHVybigoQ0hBUikweDhhKTsKKyAgICAgIGNhc2UgMHgyMzczOiByZXR1cm4oKENIQVIp MHhiYyk7CisgICAgICBjYXNlIDB4MjM3NDogcmV0dXJuKChDSEFSKTB4YmQpOworICAgICAgY2Fz ZSAweDIzNzU6IHJldHVybigoQ0hBUikweGJlKTsKKyAgICAgIGNhc2UgMHgyMzc3OiByZXR1cm4o KENIQVIpMHhiYSk7CisgICAgICBjYXNlIDB4MjM3YTogcmV0dXJuKChDSEFSKTB4YjgpOworICAg ICAgY2FzZSAweDI1YWY6IHJldHVybigoQ0hBUikweDhjKTsKKyAgICAgIGNhc2UgMHgyNWNiOiBy ZXR1cm4oKENIQVIpMHhiMSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4odHhfcHVu YyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSUJNIEFQTDIgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfYXBsNChVU0hPUlQgYykKKyNl bHNlCit0eF9hcGw0KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAg c3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKTB4ZmYpOworICAg ICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikweGFkKTsKKyAgICAgIGNhc2UgMHgwMGEzOiBy ZXR1cm4oKENIQVIpMHg5Yyk7CisgICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChDSEFSKTB4ZGQp OworICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikweGZlKTsKKyAgICAgIGNhc2UgMHgw MGFhOiByZXR1cm4oKENIQVIpMHhhNik7CisgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFS KTB4YWEpOworICAgICAgY2FzZSAweDAwYWY6IHJldHVybigoQ0hBUikweGZkKTsKKyAgICAgIGNh c2UgMHgwMGJhOiByZXR1cm4oKENIQVIpMHhhNyk7CisgICAgICBjYXNlIDB4MDBiZjogcmV0dXJu KChDSEFSKTB4YTgpOworICAgICAgY2FzZSAweDAwYzQ6IHJldHVybigoQ0hBUikweDhlKTsKKyAg ICAgIGNhc2UgMHgwMGM1OiByZXR1cm4oKENIQVIpMHhlZSk7ICAvKiBhbmQgMHg4ZiAqLworICAg ICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUikweDgwKTsKKyAgICAgIGNhc2UgMHgwMGNjOiBy ZXR1cm4oKENIQVIpMHhkZSk7CisgICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKTB4YTUp OworICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikweDk5KTsKKyAgICAgIGNhc2UgMHgw MGQ3OiByZXR1cm4oKENIQVIpMHhmNSk7CisgICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFS KTB4OWEpOworICAgICAgY2FzZSAweDAwZGY6IHJldHVybigoQ0hBUikweGUxKTsKKyAgICAgIGNh c2UgMHgwMGUwOiByZXR1cm4oKENIQVIpMHg4NSk7CisgICAgICBjYXNlIDB4MDBlMTogcmV0dXJu KChDSEFSKTB4YTApOworICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikweDgzKTsKKyAg ICAgIGNhc2UgMHgwMGU0OiByZXR1cm4oKENIQVIpMHg4NCk7CisgICAgICBjYXNlIDB4MDBlNTog cmV0dXJuKChDSEFSKTB4ODYpOworICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikweDg3 KTsKKyAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpMHg4YSk7CisgICAgICBjYXNlIDB4 MDBlOTogcmV0dXJuKChDSEFSKTB4ODIpOworICAgICAgY2FzZSAweDAwZWE6IHJldHVybigoQ0hB UikweDg4KTsKKyAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4oKENIQVIpMHg4OSk7CisgICAgICBj YXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKTB4OGQpOworICAgICAgY2FzZSAweDAwZWQ6IHJldHVy bigoQ0hBUikweGExKTsKKyAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpMHg4Yyk7Cisg ICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKTB4OGIpOworICAgICAgY2FzZSAweDAwZjE6 IHJldHVybigoQ0hBUikweGE0KTsKKyAgICAgIGNhc2UgMHgwMGYyOiByZXR1cm4oKENIQVIpMHg5 NSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKTB4YTIpOworICAgICAgY2FzZSAw eDAwZjQ6IHJldHVybigoQ0hBUikweDkzKTsKKyAgICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENI QVIpMHg5NCk7CisgICAgICBjYXNlIDB4MDBmNzogcmV0dXJuKChDSEFSKTB4ZjYpOworICAgICAg Y2FzZSAweDAwZjg6IHJldHVybigoQ0hBUikweDliKTsKKyAgICAgIGNhc2UgMHgwMGY5OiByZXR1 cm4oKENIQVIpMHg5Nyk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKTB4YTMpOwor ICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikweDk2KTsKKyAgICAgIGNhc2UgMHgwMGZj OiByZXR1cm4oKENIQVIpMHg4MSk7CisgICAgICBjYXNlIDB4MjE5MDogcmV0dXJuKChDSEFSKTB4 OWUpOworICAgICAgY2FzZSAweDIxOTE6IHJldHVybigoQ0hBUikweGM2KTsKKyAgICAgIGNhc2Ug MHgyMTkyOiByZXR1cm4oKENIQVIpMHhhYik7CisgICAgICBjYXNlIDB4MjE5MzogcmV0dXJuKChD SEFSKTB4YzcpOworICAgICAgY2FzZSAweDIyMDY6IHJldHVybigoQ0hBUikweGI2KTsKKyAgICAg IGNhc2UgMHgyMjA3OiByZXR1cm4oKENIQVIpMHhiNyk7CisgICAgICBjYXNlIDB4MjIxODogcmV0 dXJuKChDSEFSKTB4ZjgpOworICAgICAgY2FzZSAweDIyMjg6IHJldHVybigoQ0hBUikweGViKTsK KyAgICAgIGNhc2UgMHgyMjI5OiByZXR1cm4oKENIQVIpMHhlZik7CisgICAgICBjYXNlIDB4MjIy YTogcmV0dXJuKChDSEFSKTB4YWMpOworICAgICAgY2FzZSAweDIyMzU6IHJldHVybigoQ0hBUikw eGQyKTsKKyAgICAgIGNhc2UgMHgyMjYwOiByZXR1cm4oKENIQVIpMHhmNCk7CisgICAgICBjYXNl IDB4MjI2MTogcmV0dXJuKChDSEFSKTB4Y2YpOworICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigo Q0hBUikweGYzKTsKKyAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpMHhmMik7CisgICAg ICBjYXNlIDB4MjI4MjogcmV0dXJuKChDSEFSKTB4ZTIpOworICAgICAgY2FzZSAweDIyODM6IHJl dHVybigoQ0hBUikweGUzKTsKKyAgICAgIGNhc2UgMHgyMjk2OiByZXR1cm4oKENIQVIpMHhlOSk7 CisgICAgICBjYXNlIDB4MjJhMjogcmV0dXJuKChDSEFSKTB4ZDYpOworICAgICAgY2FzZSAweDIy YTM6IHJldHVybigoQ0hBUikweGQ3KTsKKyAgICAgIGNhc2UgMHgyMmE0OiByZXR1cm4oKENIQVIp MHg5OCk7CisgICAgICBjYXNlIDB4MjJhNTogcmV0dXJuKChDSEFSKTB4OWQpOworICAgICAgY2Fz ZSAweDIyYzQ6IHJldHVybigoQ0hBUikweGQ4KTsKKyAgICAgIGNhc2UgMHgyMzA4OiByZXR1cm4o KENIQVIpMHhhOSk7CisgICAgICBjYXNlIDB4MjMwYTogcmV0dXJuKChDSEFSKTB4YmUpOworICAg ICAgY2FzZSAweDIzMzY6IHJldHVybigoQ0hBUikweDlmKTsKKyAgICAgIGNhc2UgMHgyMzM3OiBy ZXR1cm4oKENIQVIpMHhkMyk7CisgICAgICBjYXNlIDB4MjMzOTogcmV0dXJuKChDSEFSKTB4OTIp OworICAgICAgY2FzZSAweDIzM2I6IHJldHVybigoQ0hBUikweGQ1KTsKKyAgICAgIGNhc2UgMHgy MzNkOiByZXR1cm4oKENIQVIpMHhlOCk7CisgICAgICBjYXNlIDB4MjMzZjogcmV0dXJuKChDSEFS KTB4ZjApOworICAgICAgY2FzZSAweDIzNDA6IHJldHVybigoQ0hBUikweGYxKTsKKyAgICAgIGNh c2UgMHgyMzQyOiByZXR1cm4oKENIQVIpMHhkNCk7CisgICAgICBjYXNlIDB4MjM0OTogcmV0dXJu KChDSEFSKTB4ZWQpOworICAgICAgY2FzZSAweDIzNGI6IHJldHVybigoQ0hBUikweGZiKTsKKyAg ICAgIGNhc2UgMHgyMzRlOiByZXR1cm4oKENIQVIpMHhhZik7CisgICAgICBjYXNlIDB4MjM1Mjog cmV0dXJuKChDSEFSKTB4ZmMpOworICAgICAgY2FzZSAweDIzNTU6IHJldHVybigoQ0hBUikweGFl KTsKKyAgICAgIGNhc2UgMHgyMzU5OiByZXR1cm4oKENIQVIpMHhmNyk7CisgICAgICBjYXNlIDB4 MjM1ZDogcmV0dXJuKChDSEFSKTB4ZTQpOworICAgICAgY2FzZSAweDIzNWU6IHJldHVybigoQ0hB UikweDkxKTsKKyAgICAgIGNhc2UgMHgyMzVmOiByZXR1cm4oKENIQVIpMHhiNSk7CisgICAgICBj YXNlIDB4MjM2YjogcmV0dXJuKChDSEFSKTB4ZmEpOworICAgICAgY2FzZSAweDIzNzE6IHJldHVy bigoQ0hBUikweGU3KTsKKyAgICAgIGNhc2UgMHgyMzcyOiByZXR1cm4oKENIQVIpMHhlNSk7Cisg ICAgICBjYXNlIDB4MjM3MzogcmV0dXJuKChDSEFSKTB4ZWMpOworICAgICAgY2FzZSAweDIzNzQ6 IHJldHVybigoQ0hBUikweGU2KTsKKyAgICAgIGNhc2UgMHgyMzc1OiByZXR1cm4oKENIQVIpMHhm OSk7CisgICAgICBjYXNlIDB4MjM3NzogcmV0dXJuKChDSEFSKTB4ZDEpOworICAgICAgY2FzZSAw eDIzNzg6IHJldHVybigoQ0hBUikweGQwKTsKKyAgICAgIGNhc2UgMHgyMzdhOiByZXR1cm4oKENI QVIpMHhlMCk7CisgICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKTB4YzQpOworICAgICAg Y2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikweGIzKTsKKyAgICAgIGNhc2UgMHgyNTBjOiByZXR1 cm4oKENIQVIpMHhkYSk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKTB4YmYpOwor ICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikweGMwKTsKKyAgICAgIGNhc2UgMHgyNTE4 OiByZXR1cm4oKENIQVIpMHhkOSk7CisgICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKTB4 YzMpOworICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUikweGI0KTsKKyAgICAgIGNhc2Ug MHgyNTJjOiByZXR1cm4oKENIQVIpMHhjMik7CisgICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChD SEFSKTB4YzEpOworICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikweGM1KTsKKyAgICAg IGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpMHhjZCk7CisgICAgICBjYXNlIDB4MjU1MTogcmV0 dXJuKChDSEFSKTB4YmEpOworICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigoQ0hBUikweGM5KTsK KyAgICAgIGNhc2UgMHgyNTU3OiByZXR1cm4oKENIQVIpMHhiYik7CisgICAgICBjYXNlIDB4MjU1 YTogcmV0dXJuKChDSEFSKTB4YzgpOworICAgICAgY2FzZSAweDI1NWQ6IHJldHVybigoQ0hBUikw eGJjKTsKKyAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpMHhjYyk7CisgICAgICBjYXNl IDB4MjU2MzogcmV0dXJuKChDSEFSKTB4YjkpOworICAgICAgY2FzZSAweDI1NjY6IHJldHVybigo Q0hBUikweGNiKTsKKyAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpMHhjYSk7CisgICAg ICBjYXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKTB4Y2UpOworICAgICAgY2FzZSAweDI1ODA6IHJl dHVybigoQ0hBUikweGRmKTsKKyAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpMHhkYyk7 CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKTB4ZGIpOworICAgICAgY2FzZSAweDI1 OTE6IHJldHVybigoQ0hBUikweGIwKTsKKyAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIp MHhiMSk7CisgICAgICBjYXNlIDB4MjU5MzogcmV0dXJuKChDSEFSKTB4YjIpOworICAgICAgY2Fz ZSAweDI1YWY6IHJldHVybigoQ0hBUikweDkwKTsKKyAgICAgIGNhc2UgMHgyNWNiOiByZXR1cm4o KENIQVIpMHhlYSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4odHhfcHVuYyhjKSk7 CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog QVBMLTI3NDEgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfYXBsNShVU0hPUlQgYykKKyNlbHNlCit0 eF9hcGw1KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgc3dpdGNo IChjKSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKTB4YTApOworICAgICAgY2Fz ZSAweDAwYTE6IHJldHVybigoQ0hBUikweGExKTsKKyAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4o KENIQVIpMHhhMik7CisgICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKTB4YTMpOworICAg ICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikweGE4KTsKKyAgICAgIGNhc2UgMHgwMGFmOiBy ZXR1cm4oKENIQVIpMHhhZik7CisgICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKTB4YjYp OworICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikweGI3KTsKKyAgICAgIGNhc2UgMHgw MGJmOiByZXR1cm4oKENIQVIpMHhiZik7CisgICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFS KTB4YzQpOworICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikweGM1KTsKKyAgICAgIGNh c2UgMHgwMGM2OiByZXR1cm4oKENIQVIpMHhjNik7CisgICAgICBjYXNlIDB4MDBjNzogcmV0dXJu KChDSEFSKTB4YzcpOworICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikweGM4KTsKKyAg ICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENIQVIpMHhjOSk7CisgICAgICBjYXNlIDB4MDBjZDog cmV0dXJuKChDSEFSKTB4Y2QpOworICAgICAgY2FzZSAweDAwZDE6IHJldHVybigoQ0hBUikweGQx KTsKKyAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpMHhkNik7CisgICAgICBjYXNlIDB4 MDBkNzogcmV0dXJuKChDSEFSKTB4ZDcpOworICAgICAgY2FzZSAweDAwZDg6IHJldHVybigoQ0hB UikweGQ4KTsKKyAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpMHhkYyk7CisgICAgICBj YXNlIDB4MDBkZjogcmV0dXJuKChDSEFSKTB4ZGYpOworICAgICAgY2FzZSAweDAwZTA6IHJldHVy bigoQ0hBUikweGUwKTsKKyAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpMHhlMSk7Cisg ICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKTB4ZTIpOworICAgICAgY2FzZSAweDAwZTM6 IHJldHVybigoQ0hBUikweGUzKTsKKyAgICAgIGNhc2UgMHgwMGU0OiByZXR1cm4oKENIQVIpMHhl NCk7CisgICAgICBjYXNlIDB4MDBlNTogcmV0dXJuKChDSEFSKTB4ZTUpOworICAgICAgY2FzZSAw eDAwZTY6IHJldHVybigoQ0hBUikweGU2KTsKKyAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENI QVIpMHhlNyk7CisgICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKTB4ZTgpOworICAgICAg Y2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikweGU5KTsKKyAgICAgIGNhc2UgMHgwMGVhOiByZXR1 cm4oKENIQVIpMHhlYSk7CisgICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKTB4ZWIpOwor ICAgICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hBUikweGVjKTsKKyAgICAgIGNhc2UgMHgwMGVk OiByZXR1cm4oKENIQVIpMHhlZCk7CisgICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKTB4 ZWUpOworICAgICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikweGVmKTsKKyAgICAgIGNhc2Ug MHgwMGYxOiByZXR1cm4oKENIQVIpMHhmMSk7CisgICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChD SEFSKTB4ZjIpOworICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikweGYzKTsKKyAgICAg IGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpMHhmNCk7CisgICAgICBjYXNlIDB4MDBmNTogcmV0 dXJuKChDSEFSKTB4ZjUpOworICAgICAgY2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikweGY2KTsK KyAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4oKENIQVIpMHhmNyk7CisgICAgICBjYXNlIDB4MDBm OTogcmV0dXJuKChDSEFSKTB4ZjkpOworICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikw eGZhKTsKKyAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpMHhmYik7CisgICAgICBjYXNl IDB4MDBmYzogcmV0dXJuKChDSEFSKTB4ZmMpOworICAgICAgY2FzZSAweDIwYWM6IHJldHVybigo Q0hBUikweDgwKTsKKyAgICAgIGNhc2UgMHgyMTkwOiByZXR1cm4oKENIQVIpMHg4NCk7CisgICAg ICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKTB4ODYpOworICAgICAgY2FzZSAweDIxOTI6IHJl dHVybigoQ0hBUikweDg1KTsKKyAgICAgIGNhc2UgMHgyMTkzOiByZXR1cm4oKENIQVIpMHg4Nyk7 CisgICAgICBjYXNlIDB4MjIwNTogcmV0dXJuKChDSEFSKTB4ZjgpOworICAgICAgY2FzZSAweDIy MDY6IHJldHVybigoQ0hBUikweDkxKTsKKyAgICAgIGNhc2UgMHgyMjA3OiByZXR1cm4oKENIQVIp MHg5Mik7CisgICAgICBjYXNlIDB4MjIwYTogcmV0dXJuKChDSEFSKTB4YjkpOworICAgICAgY2Fz ZSAweDIyMTg6IHJldHVybigoQ0hBUikweGIwKTsKKyAgICAgIGNhc2UgMHgyMjI4OiByZXR1cm4o KENIQVIpMHg5Zik7CisgICAgICBjYXNlIDB4MjIyOTogcmV0dXJuKChDSEFSKTB4OWQpOworICAg ICAgY2FzZSAweDIyMmE6IHJldHVybigoQ0hBUikweDllKTsKKyAgICAgIGNhc2UgMHgyMjM1OiBy ZXR1cm4oKENIQVIpMHhmZCk7CisgICAgICBjYXNlIDB4MjI2MDogcmV0dXJuKChDSEFSKTB4YWMp OworICAgICAgY2FzZSAweDIyNjE6IHJldHVybigoQ0hBUikweGE2KTsKKyAgICAgIGNhc2UgMHgy MjYyOiByZXR1cm4oKENIQVIpMHhiYik7CisgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFS KTB4ODgpOworICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikweDg5KTsKKyAgICAgIGNh c2UgMHgyMjgyOiByZXR1cm4oKENIQVIpMHg5Yik7CisgICAgICBjYXNlIDB4MjI4MzogcmV0dXJu KChDSEFSKTB4OWMpOworICAgICAgY2FzZSAweDIyOTY6IHJldHVybigoQ0hBUikweGI0KTsKKyAg ICAgIGNhc2UgMHgyMmEyOiByZXR1cm4oKENIQVIpMHhhNCk7CisgICAgICBjYXNlIDB4MjJhMzog cmV0dXJuKChDSEFSKTB4ODEpOworICAgICAgY2FzZSAweDIyYTQ6IHJldHVybigoQ0hBUikweDgy KTsKKyAgICAgIGNhc2UgMHgyMmE1OiByZXR1cm4oKENIQVIpMHg4Myk7CisgICAgICBjYXNlIDB4 MjJjNDogcmV0dXJuKChDSEFSKTB4YWEpOworICAgICAgY2FzZSAweDIzMDg6IHJldHVybigoQ0hB UikweDk3KTsKKyAgICAgIGNhc2UgMHgyMzBhOiByZXR1cm4oKENIQVIpMHg5OCk7CisgICAgICBj YXNlIDB4MjMzNjogcmV0dXJuKChDSEFSKTB4YTcpOworICAgICAgY2FzZSAweDIzMzc6IHJldHVy bigoQ0hBUikweGRlKTsKKyAgICAgIGNhc2UgMHgyMzM5OiByZXR1cm4oKENIQVIpMHg4ZSk7Cisg ICAgICBjYXNlIDB4MjMzYjogcmV0dXJuKChDSEFSKTB4Y2IpOworICAgICAgY2FzZSAweDIzM2Q6 IHJldHVybigoQ0hBUikweGIyKTsKKyAgICAgIGNhc2UgMHgyMzNmOiByZXR1cm4oKENIQVIpMHg5 YSk7CisgICAgICBjYXNlIDB4MjM0MDogcmV0dXJuKChDSEFSKTB4OTkpOworICAgICAgY2FzZSAw eDIzNDI6IHJldHVybigoQ0hBUikweGNhKTsKKyAgICAgIGNhc2UgMHgyMzQ3OiByZXR1cm4oKENI QVIpMHhkNCk7CisgICAgICBjYXNlIDB4MjM0ODogcmV0dXJuKChDSEFSKTB4ZDUpOworICAgICAg Y2FzZSAweDIzNDk6IHJldHVybigoQ0hBUikweGIzKTsKKyAgICAgIGNhc2UgMHgyMzRiOiByZXR1 cm4oKENIQVIpMHg5Myk7CisgICAgICBjYXNlIDB4MjM0ZTogcmV0dXJuKChDSEFSKTB4OTYpOwor ICAgICAgY2FzZSAweDIzNTA6IHJldHVybigoQ0hBUikweGQyKTsKKyAgICAgIGNhc2UgMHgyMzUy OiByZXR1cm4oKENIQVIpMHg5NCk7CisgICAgICBjYXNlIDB4MjM1NTogcmV0dXJuKChDSEFSKTB4 OTUpOworICAgICAgY2FzZSAweDIzNTc6IHJldHVybigoQ0hBUikweGQzKTsKKyAgICAgIGNhc2Ug MHgyMzU5OiByZXR1cm4oKENIQVIpMHg4Zik7CisgICAgICBjYXNlIDB4MjM1ZDogcmV0dXJuKChD SEFSKTB4YTkpOworICAgICAgY2FzZSAweDIzNWU6IHJldHVybigoQ0hBUikweDhkKTsKKyAgICAg IGNhc2UgMHgyMzVmOiByZXR1cm4oKENIQVIpMHhiNSk7CisgICAgICBjYXNlIDB4MjM2NDogcmV0 dXJuKChDSEFSKTB4ZjApOworICAgICAgY2FzZSAweDIzNjU6IHJldHVybigoQ0hBUikweGZmKTsK KyAgICAgIGNhc2UgMHgyMzY4OiByZXR1cm4oKENIQVIpMHhmZSk7CisgICAgICBjYXNlIDB4MjM2 YTogcmV0dXJuKChDSEFSKTB4YWUpOworICAgICAgY2FzZSAweDIzNmI6IHJldHVybigoQ0hBUikw eDkwKTsKKyAgICAgIGNhc2UgMHgyMzZjOiByZXR1cm4oKENIQVIpMHhhYik7CisgICAgICBjYXNl IDB4MjM3MTogcmV0dXJuKChDSEFSKTB4OGIpOworICAgICAgY2FzZSAweDIzNzI6IHJldHVybigo Q0hBUikweDhhKTsKKyAgICAgIGNhc2UgMHgyMzczOiByZXR1cm4oKENIQVIpMHhiYyk7CisgICAg ICBjYXNlIDB4MjM3NDogcmV0dXJuKChDSEFSKTB4YmQpOworICAgICAgY2FzZSAweDIzNzU6IHJl dHVybigoQ0hBUikweGJlKTsKKyAgICAgIGNhc2UgMHgyMzc3OiByZXR1cm4oKENIQVIpMHhiYSk7 CisgICAgICBjYXNlIDB4MjM3ODogcmV0dXJuKChDSEFSKTB4YTUpOworICAgICAgY2FzZSAweDIz N2E6IHJldHVybigoQ0hBUikweGI4KTsKKyAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIp MHhjZSk7CisgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKTB4ZGIpOworICAgICAgY2Fz ZSAweDI1MGM6IHJldHVybigoQ0hBUikweGRhKTsKKyAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4o KENIQVIpMHhjYyk7CisgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKTB4YzApOworICAg ICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikweGQ5KTsKKyAgICAgIGNhc2UgMHgyNTFjOiBy ZXR1cm4oKENIQVIpMHhjMyk7CisgICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKTB4ZGQp OworICAgICAgY2FzZSAweDI1MmM6IHJldHVybigoQ0hBUikweGMyKTsKKyAgICAgIGNhc2UgMHgy NTM0OiByZXR1cm4oKENIQVIpMHhjMSk7CisgICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFS KTB4Y2YpOworICAgICAgY2FzZSAweDI1YWY6IHJldHVybigoQ0hBUikweDhjKTsKKyAgICAgIGNh c2UgMHgyNWNiOiByZXR1cm4oKENIQVIpMHhiMSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICBy ZXR1cm4odHhfcHVuYyhjKSk7CisgICAgfQorfQorCisvKiBGb3IgTGF0aW4tMSwgdXNlIHR4X2lk ZW50KCkgKi8KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExh dGluLTIgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfODg1OV8yKFVTSE9SVCBjKQorI2Vsc2UKK3R4 Xzg4NTlfMihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChj IDwgMHhhMCkKKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2goYykg eworICAgICAgY2FzZSAweDAwQTA6IHJldHVybigoQ0hBUikxNjApOworICAgICAgY2FzZSAweDAw QTQ6IHJldHVybigoQ0hBUikxNjQpOworICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hBUikx NjcpOworICAgICAgY2FzZSAweDAwQTg6IHJldHVybigoQ0hBUikxNjgpOworICAgICAgY2FzZSAw eDAwQUQ6IHJldHVybigoQ0hBUikxNzMpOworICAgICAgY2FzZSAweDAwQjA6IHJldHVybigoQ0hB UikxNzYpOworICAgICAgY2FzZSAweDAwQjQ6IHJldHVybigoQ0hBUikxODApOworICAgICAgY2Fz ZSAweDAwQjg6IHJldHVybigoQ0hBUikxODQpOworICAgICAgY2FzZSAweDAwQzE6IHJldHVybigo Q0hBUikxOTMpOworICAgICAgY2FzZSAweDAwQzI6IHJldHVybigoQ0hBUikxOTQpOworICAgICAg Y2FzZSAweDAwQzQ6IHJldHVybigoQ0hBUikxOTYpOworICAgICAgY2FzZSAweDAwQzc6IHJldHVy bigoQ0hBUikxOTkpOworICAgICAgY2FzZSAweDAwQzk6IHJldHVybigoQ0hBUikyMDEpOworICAg ICAgY2FzZSAweDAwQ0I6IHJldHVybigoQ0hBUikyMDMpOworICAgICAgY2FzZSAweDAwQ0Q6IHJl dHVybigoQ0hBUikyMDUpOworICAgICAgY2FzZSAweDAwQ0U6IHJldHVybigoQ0hBUikyMDYpOwor ICAgICAgY2FzZSAweDAwRDM6IHJldHVybigoQ0hBUikyMTEpOworICAgICAgY2FzZSAweDAwRDQ6 IHJldHVybigoQ0hBUikyMTIpOworICAgICAgY2FzZSAweDAwRDY6IHJldHVybigoQ0hBUikyMTQp OworICAgICAgY2FzZSAweDAwRDc6IHJldHVybigoQ0hBUikyMTUpOworICAgICAgY2FzZSAweDAw REE6IHJldHVybigoQ0hBUikyMTgpOworICAgICAgY2FzZSAweDAwREM6IHJldHVybigoQ0hBUiky MjApOworICAgICAgY2FzZSAweDAwREQ6IHJldHVybigoQ0hBUikyMjEpOworICAgICAgY2FzZSAw eDAwREY6IHJldHVybigoQ0hBUikyMjMpOworICAgICAgY2FzZSAweDAwRTE6IHJldHVybigoQ0hB UikyMjUpOworICAgICAgY2FzZSAweDAwRTI6IHJldHVybigoQ0hBUikyMjYpOworICAgICAgY2Fz ZSAweDAwRTQ6IHJldHVybigoQ0hBUikyMjgpOworICAgICAgY2FzZSAweDAwRTc6IHJldHVybigo Q0hBUikyMzEpOworICAgICAgY2FzZSAweDAwRTk6IHJldHVybigoQ0hBUikyMzMpOworICAgICAg Y2FzZSAweDAwRUI6IHJldHVybigoQ0hBUikyMzUpOworICAgICAgY2FzZSAweDAwRUQ6IHJldHVy bigoQ0hBUikyMzcpOworICAgICAgY2FzZSAweDAwRUU6IHJldHVybigoQ0hBUikyMzgpOworICAg ICAgY2FzZSAweDAwRjM6IHJldHVybigoQ0hBUikyNDMpOworICAgICAgY2FzZSAweDAwRjQ6IHJl dHVybigoQ0hBUikyNDQpOworICAgICAgY2FzZSAweDAwRjY6IHJldHVybigoQ0hBUikyNDYpOwor ICAgICAgY2FzZSAweDAwRjc6IHJldHVybigoQ0hBUikyNDcpOworICAgICAgY2FzZSAweDAwRkE6 IHJldHVybigoQ0hBUikyNTApOworICAgICAgY2FzZSAweDAwRkM6IHJldHVybigoQ0hBUikyNTIp OworICAgICAgY2FzZSAweDAwRkQ6IHJldHVybigoQ0hBUikyNTMpOworICAgICAgY2FzZSAweDAx MDI6IHJldHVybigoQ0hBUikxOTUpOworICAgICAgY2FzZSAweDAxMDM6IHJldHVybigoQ0hBUiky MjcpOworICAgICAgY2FzZSAweDAxMDQ6IHJldHVybigoQ0hBUikxNjEpOworICAgICAgY2FzZSAw eDAxMDU6IHJldHVybigoQ0hBUikxNzcpOworICAgICAgY2FzZSAweDAxMDY6IHJldHVybigoQ0hB UikxOTgpOworICAgICAgY2FzZSAweDAxMDc6IHJldHVybigoQ0hBUikyMzApOworICAgICAgY2Fz ZSAweDAxMEM6IHJldHVybigoQ0hBUikyMDApOworICAgICAgY2FzZSAweDAxMEQ6IHJldHVybigo Q0hBUikyMzIpOworICAgICAgY2FzZSAweDAxMEU6IHJldHVybigoQ0hBUikyMDcpOworICAgICAg Y2FzZSAweDAxMEY6IHJldHVybigoQ0hBUikyMzkpOworICAgICAgY2FzZSAweDAxMTA6IHJldHVy bigoQ0hBUikyMDgpOworICAgICAgY2FzZSAweDAxMTE6IHJldHVybigoQ0hBUikyNDApOworICAg ICAgY2FzZSAweDAxMTg6IHJldHVybigoQ0hBUikyMDIpOworICAgICAgY2FzZSAweDAxMTk6IHJl dHVybigoQ0hBUikyMzQpOworICAgICAgY2FzZSAweDAxMUE6IHJldHVybigoQ0hBUikyMDQpOwor ICAgICAgY2FzZSAweDAxMUI6IHJldHVybigoQ0hBUikyMzYpOworICAgICAgY2FzZSAweDAxMzk6 IHJldHVybigoQ0hBUikxOTcpOworICAgICAgY2FzZSAweDAxM0E6IHJldHVybigoQ0hBUikyMjkp OworICAgICAgY2FzZSAweDAxM0Q6IHJldHVybigoQ0hBUikxNjUpOworICAgICAgY2FzZSAweDAx M0U6IHJldHVybigoQ0hBUikxODEpOworICAgICAgY2FzZSAweDAxNDE6IHJldHVybigoQ0hBUikx NjMpOworICAgICAgY2FzZSAweDAxNDI6IHJldHVybigoQ0hBUikxNzkpOworICAgICAgY2FzZSAw eDAxNDM6IHJldHVybigoQ0hBUikyMDkpOworICAgICAgY2FzZSAweDAxNDQ6IHJldHVybigoQ0hB UikyNDEpOworICAgICAgY2FzZSAweDAxNDc6IHJldHVybigoQ0hBUikyMTApOworICAgICAgY2Fz ZSAweDAxNDg6IHJldHVybigoQ0hBUikyNDIpOworICAgICAgY2FzZSAweDAxNTA6IHJldHVybigo Q0hBUikyMTMpOworICAgICAgY2FzZSAweDAxNTE6IHJldHVybigoQ0hBUikyNDUpOworICAgICAg Y2FzZSAweDAxNTQ6IHJldHVybigoQ0hBUikxOTIpOworICAgICAgY2FzZSAweDAxNTU6IHJldHVy bigoQ0hBUikyMjQpOworICAgICAgY2FzZSAweDAxNTg6IHJldHVybigoQ0hBUikyMTYpOworICAg ICAgY2FzZSAweDAxNTk6IHJldHVybigoQ0hBUikyNDgpOworICAgICAgY2FzZSAweDAxNUE6IHJl dHVybigoQ0hBUikxNjYpOworICAgICAgY2FzZSAweDAxNUI6IHJldHVybigoQ0hBUikxODIpOwor ICAgICAgY2FzZSAweDAxNUU6IHJldHVybigoQ0hBUikxNzApOworICAgICAgY2FzZSAweDAxNUY6 IHJldHVybigoQ0hBUikxODYpOworICAgICAgY2FzZSAweDAxNjA6IHJldHVybigoQ0hBUikxNjkp OworICAgICAgY2FzZSAweDAxNjE6IHJldHVybigoQ0hBUikxODUpOworICAgICAgY2FzZSAweDAx NjI6IHJldHVybigoQ0hBUikyMjIpOworICAgICAgY2FzZSAweDAxNjM6IHJldHVybigoQ0hBUiky NTQpOworICAgICAgY2FzZSAweDAxNjQ6IHJldHVybigoQ0hBUikxNzEpOworICAgICAgY2FzZSAw eDAxNjU6IHJldHVybigoQ0hBUikxODcpOworICAgICAgY2FzZSAweDAxNkU6IHJldHVybigoQ0hB UikyMTcpOworICAgICAgY2FzZSAweDAxNkY6IHJldHVybigoQ0hBUikyNDkpOworICAgICAgY2Fz ZSAweDAxNzA6IHJldHVybigoQ0hBUikyMTkpOworICAgICAgY2FzZSAweDAxNzE6IHJldHVybigo Q0hBUikyNTEpOworICAgICAgY2FzZSAweDAxNzk6IHJldHVybigoQ0hBUikxNzIpOworICAgICAg Y2FzZSAweDAxN0E6IHJldHVybigoQ0hBUikxODgpOworICAgICAgY2FzZSAweDAxN0I6IHJldHVy bigoQ0hBUikxNzUpOworICAgICAgY2FzZSAweDAxN0M6IHJldHVybigoQ0hBUikxOTEpOworICAg ICAgY2FzZSAweDAxN0Q6IHJldHVybigoQ0hBUikxNzQpOworICAgICAgY2FzZSAweDAxN0U6IHJl dHVybigoQ0hBUikxOTApOworICAgICAgY2FzZSAweDAyQzc6IHJldHVybigoQ0hBUikxODMpOwor ICAgICAgY2FzZSAweDAyRDg6IHJldHVybigoQ0hBUikxNjIpOworICAgICAgY2FzZSAweDAyRDk6 IHJldHVybigoQ0hBUikyNTUpOworICAgICAgY2FzZSAweDAyREI6IHJldHVybigoQ0hBUikxNzgp OworICAgICAgY2FzZSAweDAyREQ6IHJldHVybigoQ0hBUikxODkpOworICAgICAgZGVmYXVsdDog cmV0dXJuKHR4X3B1bmMoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIExhdGluLTMgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfODg1OV8z KFVTSE9SVCBjKQorI2Vsc2UKK3R4Xzg4NTlfMyhjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIGlmIChjIDwgMHhhMCkKKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4 ZmYpKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweDAwQTA6IHJldHVybigoQ0hBUikx NjApOworICAgICAgY2FzZSAweDAwQTM6IHJldHVybigoQ0hBUikxNjMpOworICAgICAgY2FzZSAw eDAwQTQ6IHJldHVybigoQ0hBUikxNjQpOworICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hB UikxNjcpOworICAgICAgY2FzZSAweDAwQTg6IHJldHVybigoQ0hBUikxNjgpOworICAgICAgY2Fz ZSAweDAwQUQ6IHJldHVybigoQ0hBUikxNzMpOworICAgICAgY2FzZSAweDAwQjA6IHJldHVybigo Q0hBUikxNzYpOworICAgICAgY2FzZSAweDAwQjI6IHJldHVybigoQ0hBUikxNzgpOworICAgICAg Y2FzZSAweDAwQjM6IHJldHVybigoQ0hBUikxNzkpOworICAgICAgY2FzZSAweDAwQjQ6IHJldHVy bigoQ0hBUikxODApOworICAgICAgY2FzZSAweDAwQjU6IHJldHVybigoQ0hBUikxODEpOworICAg ICAgY2FzZSAweDAwQjc6IHJldHVybigoQ0hBUikxODMpOworICAgICAgY2FzZSAweDAwQjg6IHJl dHVybigoQ0hBUikxODQpOworICAgICAgY2FzZSAweDAwQkQ6IHJldHVybigoQ0hBUikxODkpOwor ICAgICAgY2FzZSAweDAwQzA6IHJldHVybigoQ0hBUikxOTIpOworICAgICAgY2FzZSAweDAwQzE6 IHJldHVybigoQ0hBUikxOTMpOworICAgICAgY2FzZSAweDAwQzI6IHJldHVybigoQ0hBUikxOTQp OworICAgICAgY2FzZSAweDAwQzQ6IHJldHVybigoQ0hBUikxOTYpOworICAgICAgY2FzZSAweDAw Qzc6IHJldHVybigoQ0hBUikxOTkpOworICAgICAgY2FzZSAweDAwQzg6IHJldHVybigoQ0hBUiky MDApOworICAgICAgY2FzZSAweDAwQzk6IHJldHVybigoQ0hBUikyMDEpOworICAgICAgY2FzZSAw eDAwQ0E6IHJldHVybigoQ0hBUikyMDIpOworICAgICAgY2FzZSAweDAwQ0I6IHJldHVybigoQ0hB UikyMDMpOworICAgICAgY2FzZSAweDAwQ0M6IHJldHVybigoQ0hBUikyMDQpOworICAgICAgY2Fz ZSAweDAwQ0Q6IHJldHVybigoQ0hBUikyMDUpOworICAgICAgY2FzZSAweDAwQ0U6IHJldHVybigo Q0hBUikyMDYpOworICAgICAgY2FzZSAweDAwQ0Y6IHJldHVybigoQ0hBUikyMDcpOworICAgICAg Y2FzZSAweDAwRDE6IHJldHVybigoQ0hBUikyMDkpOworICAgICAgY2FzZSAweDAwRDI6IHJldHVy bigoQ0hBUikyMTApOworICAgICAgY2FzZSAweDAwRDM6IHJldHVybigoQ0hBUikyMTEpOworICAg ICAgY2FzZSAweDAwRDQ6IHJldHVybigoQ0hBUikyMTIpOworICAgICAgY2FzZSAweDAwRDY6IHJl dHVybigoQ0hBUikyMTQpOworICAgICAgY2FzZSAweDAwRDc6IHJldHVybigoQ0hBUikyMTUpOwor ICAgICAgY2FzZSAweDAwRDk6IHJldHVybigoQ0hBUikyMTcpOworICAgICAgY2FzZSAweDAwREE6 IHJldHVybigoQ0hBUikyMTgpOworICAgICAgY2FzZSAweDAwREI6IHJldHVybigoQ0hBUikyMTkp OworICAgICAgY2FzZSAweDAwREM6IHJldHVybigoQ0hBUikyMjApOworICAgICAgY2FzZSAweDAw REY6IHJldHVybigoQ0hBUikyMjMpOworICAgICAgY2FzZSAweDAwRTA6IHJldHVybigoQ0hBUiky MjQpOworICAgICAgY2FzZSAweDAwRTE6IHJldHVybigoQ0hBUikyMjUpOworICAgICAgY2FzZSAw eDAwRTI6IHJldHVybigoQ0hBUikyMjYpOworICAgICAgY2FzZSAweDAwRTQ6IHJldHVybigoQ0hB UikyMjgpOworICAgICAgY2FzZSAweDAwRTc6IHJldHVybigoQ0hBUikyMzEpOworICAgICAgY2Fz ZSAweDAwRTg6IHJldHVybigoQ0hBUikyMzIpOworICAgICAgY2FzZSAweDAwRTk6IHJldHVybigo Q0hBUikyMzMpOworICAgICAgY2FzZSAweDAwRUE6IHJldHVybigoQ0hBUikyMzQpOworICAgICAg Y2FzZSAweDAwRUI6IHJldHVybigoQ0hBUikyMzUpOworICAgICAgY2FzZSAweDAwRUM6IHJldHVy bigoQ0hBUikyMzYpOworICAgICAgY2FzZSAweDAwRUQ6IHJldHVybigoQ0hBUikyMzcpOworICAg ICAgY2FzZSAweDAwRUU6IHJldHVybigoQ0hBUikyMzgpOworICAgICAgY2FzZSAweDAwRUY6IHJl dHVybigoQ0hBUikyMzkpOworICAgICAgY2FzZSAweDAwRjE6IHJldHVybigoQ0hBUikyNDEpOwor ICAgICAgY2FzZSAweDAwRjI6IHJldHVybigoQ0hBUikyNDIpOworICAgICAgY2FzZSAweDAwRjM6 IHJldHVybigoQ0hBUikyNDMpOworICAgICAgY2FzZSAweDAwRjQ6IHJldHVybigoQ0hBUikyNDQp OworICAgICAgY2FzZSAweDAwRjY6IHJldHVybigoQ0hBUikyNDYpOworICAgICAgY2FzZSAweDAw Rjc6IHJldHVybigoQ0hBUikyNDcpOworICAgICAgY2FzZSAweDAwRjk6IHJldHVybigoQ0hBUiky NDkpOworICAgICAgY2FzZSAweDAwRkE6IHJldHVybigoQ0hBUikyNTApOworICAgICAgY2FzZSAw eDAwRkI6IHJldHVybigoQ0hBUikyNTEpOworICAgICAgY2FzZSAweDAwRkM6IHJldHVybigoQ0hB UikyNTIpOworICAgICAgY2FzZSAweDAxMDg6IHJldHVybigoQ0hBUikxOTgpOworICAgICAgY2Fz ZSAweDAxMDk6IHJldHVybigoQ0hBUikyMzApOworICAgICAgY2FzZSAweDAxMEE6IHJldHVybigo Q0hBUikxOTcpOworICAgICAgY2FzZSAweDAxMEI6IHJldHVybigoQ0hBUikyMjkpOworICAgICAg Y2FzZSAweDAxMUM6IHJldHVybigoQ0hBUikyMTYpOworICAgICAgY2FzZSAweDAxMUQ6IHJldHVy bigoQ0hBUikyNDgpOworICAgICAgY2FzZSAweDAxMUU6IHJldHVybigoQ0hBUikxNzEpOworICAg ICAgY2FzZSAweDAxMUY6IHJldHVybigoQ0hBUikxODcpOworICAgICAgY2FzZSAweDAxMjA6IHJl dHVybigoQ0hBUikyMTMpOworICAgICAgY2FzZSAweDAxMjE6IHJldHVybigoQ0hBUikyNDUpOwor ICAgICAgY2FzZSAweDAxMjQ6IHJldHVybigoQ0hBUikxNjYpOworICAgICAgY2FzZSAweDAxMjU6 IHJldHVybigoQ0hBUikxODIpOworICAgICAgY2FzZSAweDAxMjY6IHJldHVybigoQ0hBUikxNjEp OworICAgICAgY2FzZSAweDAxMjc6IHJldHVybigoQ0hBUikxNzcpOworICAgICAgY2FzZSAweDAx MzA6IHJldHVybigoQ0hBUikxNjkpOworICAgICAgY2FzZSAweDAxMzE6IHJldHVybigoQ0hBUikx ODUpOworICAgICAgY2FzZSAweDAxMzQ6IHJldHVybigoQ0hBUikxNzIpOworICAgICAgY2FzZSAw eDAxMzU6IHJldHVybigoQ0hBUikxODgpOworICAgICAgY2FzZSAweDAxNUM6IHJldHVybigoQ0hB UikyMjIpOworICAgICAgY2FzZSAweDAxNUQ6IHJldHVybigoQ0hBUikyNTQpOworICAgICAgY2Fz ZSAweDAxNUU6IHJldHVybigoQ0hBUikxNzApOworICAgICAgY2FzZSAweDAxNUY6IHJldHVybigo Q0hBUikxODYpOworICAgICAgY2FzZSAweDAxNkM6IHJldHVybigoQ0hBUikyMjEpOworICAgICAg Y2FzZSAweDAxNkQ6IHJldHVybigoQ0hBUikyNTMpOworICAgICAgY2FzZSAweDAxN0I6IHJldHVy bigoQ0hBUikxNzUpOworICAgICAgY2FzZSAweDAxN0M6IHJldHVybigoQ0hBUikxOTEpOworICAg ICAgY2FzZSAweDAyRDg6IHJldHVybigoQ0hBUikxNjIpOworICAgICAgY2FzZSAweDAyRDk6IHJl dHVybigoQ0hBUikyNTUpOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOworICAg IH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExhdGlu LTQgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfODg1OV80KFVTSE9SVCBjKQorI2Vsc2UKK3R4Xzg4 NTlfNChjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwg MHhhMCkKKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2goYykgewor ICAgICAgY2FzZSAweDAwQTA6IHJldHVybigoQ0hBUikxNjApOworICAgICAgY2FzZSAweDAwQTQ6 IHJldHVybigoQ0hBUikxNjQpOworICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hBUikxNjcp OworICAgICAgY2FzZSAweDAwQTg6IHJldHVybigoQ0hBUikxNjgpOworICAgICAgY2FzZSAweDAw QUQ6IHJldHVybigoQ0hBUikxNzMpOworICAgICAgY2FzZSAweDAwQUY6IHJldHVybigoQ0hBUikx NzUpOworICAgICAgY2FzZSAweDAwQjA6IHJldHVybigoQ0hBUikxNzYpOworICAgICAgY2FzZSAw eDAwQjQ6IHJldHVybigoQ0hBUikxODApOworICAgICAgY2FzZSAweDAwQjg6IHJldHVybigoQ0hB UikxODQpOworICAgICAgY2FzZSAweDAwQzE6IHJldHVybigoQ0hBUikxOTMpOworICAgICAgY2Fz ZSAweDAwQzI6IHJldHVybigoQ0hBUikxOTQpOworICAgICAgY2FzZSAweDAwQzM6IHJldHVybigo Q0hBUikxOTUpOworICAgICAgY2FzZSAweDAwQzQ6IHJldHVybigoQ0hBUikxOTYpOworICAgICAg Y2FzZSAweDAwQzU6IHJldHVybigoQ0hBUikxOTcpOworICAgICAgY2FzZSAweDAwQzY6IHJldHVy bigoQ0hBUikxOTgpOworICAgICAgY2FzZSAweDAwQzk6IHJldHVybigoQ0hBUikyMDEpOworICAg ICAgY2FzZSAweDAwQ0I6IHJldHVybigoQ0hBUikyMDMpOworICAgICAgY2FzZSAweDAwQ0Q6IHJl dHVybigoQ0hBUikyMDUpOworICAgICAgY2FzZSAweDAwQ0U6IHJldHVybigoQ0hBUikyMDYpOwor ICAgICAgY2FzZSAweDAwRDQ6IHJldHVybigoQ0hBUikyMTIpOworICAgICAgY2FzZSAweDAwRDU6 IHJldHVybigoQ0hBUikyMTMpOworICAgICAgY2FzZSAweDAwRDY6IHJldHVybigoQ0hBUikyMTQp OworICAgICAgY2FzZSAweDAwRDc6IHJldHVybigoQ0hBUikyMTUpOworICAgICAgY2FzZSAweDAw RDg6IHJldHVybigoQ0hBUikyMTYpOworICAgICAgY2FzZSAweDAwREE6IHJldHVybigoQ0hBUiky MTgpOworICAgICAgY2FzZSAweDAwREI6IHJldHVybigoQ0hBUikyMTkpOworICAgICAgY2FzZSAw eDAwREM6IHJldHVybigoQ0hBUikyMjApOworICAgICAgY2FzZSAweDAwREY6IHJldHVybigoQ0hB UikyMjMpOworICAgICAgY2FzZSAweDAwRTE6IHJldHVybigoQ0hBUikyMjUpOworICAgICAgY2Fz ZSAweDAwRTI6IHJldHVybigoQ0hBUikyMjYpOworICAgICAgY2FzZSAweDAwRTM6IHJldHVybigo Q0hBUikyMjcpOworICAgICAgY2FzZSAweDAwRTQ6IHJldHVybigoQ0hBUikyMjgpOworICAgICAg Y2FzZSAweDAwRTU6IHJldHVybigoQ0hBUikyMjkpOworICAgICAgY2FzZSAweDAwRTY6IHJldHVy bigoQ0hBUikyMzApOworICAgICAgY2FzZSAweDAwRTk6IHJldHVybigoQ0hBUikyMzMpOworICAg ICAgY2FzZSAweDAwRUI6IHJldHVybigoQ0hBUikyMzUpOworICAgICAgY2FzZSAweDAwRUQ6IHJl dHVybigoQ0hBUikyMzcpOworICAgICAgY2FzZSAweDAwRUU6IHJldHVybigoQ0hBUikyMzgpOwor ICAgICAgY2FzZSAweDAwRjQ6IHJldHVybigoQ0hBUikyNDQpOworICAgICAgY2FzZSAweDAwRjU6 IHJldHVybigoQ0hBUikyNDUpOworICAgICAgY2FzZSAweDAwRjY6IHJldHVybigoQ0hBUikyNDYp OworICAgICAgY2FzZSAweDAwRjc6IHJldHVybigoQ0hBUikyNDcpOworICAgICAgY2FzZSAweDAw Rjg6IHJldHVybigoQ0hBUikyNDgpOworICAgICAgY2FzZSAweDAwRkE6IHJldHVybigoQ0hBUiky NTApOworICAgICAgY2FzZSAweDAwRkI6IHJldHVybigoQ0hBUikyNTEpOworICAgICAgY2FzZSAw eDAwRkM6IHJldHVybigoQ0hBUikyNTIpOworICAgICAgY2FzZSAweDAxMDA6IHJldHVybigoQ0hB UikxOTIpOworICAgICAgY2FzZSAweDAxMDE6IHJldHVybigoQ0hBUikyMjQpOworICAgICAgY2Fz ZSAweDAxMDQ6IHJldHVybigoQ0hBUikxNjEpOworICAgICAgY2FzZSAweDAxMDU6IHJldHVybigo Q0hBUikxNzcpOworICAgICAgY2FzZSAweDAxMEM6IHJldHVybigoQ0hBUikyMDApOworICAgICAg Y2FzZSAweDAxMEQ6IHJldHVybigoQ0hBUikyMzIpOworICAgICAgY2FzZSAweDAxMTA6IHJldHVy bigoQ0hBUikyMDgpOworICAgICAgY2FzZSAweDAxMTE6IHJldHVybigoQ0hBUikyNDApOworICAg ICAgY2FzZSAweDAxMTI6IHJldHVybigoQ0hBUikxNzApOworICAgICAgY2FzZSAweDAxMTM6IHJl dHVybigoQ0hBUikxODYpOworICAgICAgY2FzZSAweDAxMTY6IHJldHVybigoQ0hBUikyMDQpOwor ICAgICAgY2FzZSAweDAxMTc6IHJldHVybigoQ0hBUikyMzYpOworICAgICAgY2FzZSAweDAxMTg6 IHJldHVybigoQ0hBUikyMDIpOworICAgICAgY2FzZSAweDAxMTk6IHJldHVybigoQ0hBUikyMzQp OworICAgICAgY2FzZSAweDAxMjI6IHJldHVybigoQ0hBUikxNzEpOworICAgICAgY2FzZSAweDAx MjM6IHJldHVybigoQ0hBUikxODcpOworICAgICAgY2FzZSAweDAxMjg6IHJldHVybigoQ0hBUikx NjUpOworICAgICAgY2FzZSAweDAxMjk6IHJldHVybigoQ0hBUikxODEpOworICAgICAgY2FzZSAw eDAxMkE6IHJldHVybigoQ0hBUikyMDcpOworICAgICAgY2FzZSAweDAxMkI6IHJldHVybigoQ0hB UikyMzkpOworICAgICAgY2FzZSAweDAxMkU6IHJldHVybigoQ0hBUikxOTkpOworICAgICAgY2Fz ZSAweDAxMkY6IHJldHVybigoQ0hBUikyMzEpOworICAgICAgY2FzZSAweDAxMzY6IHJldHVybigo Q0hBUikyMTEpOworICAgICAgY2FzZSAweDAxMzc6IHJldHVybigoQ0hBUikyNDMpOworICAgICAg Y2FzZSAweDAxMzg6IHJldHVybigoQ0hBUikxNjIpOworICAgICAgY2FzZSAweDAxM0I6IHJldHVy bigoQ0hBUikxNjYpOworICAgICAgY2FzZSAweDAxM0M6IHJldHVybigoQ0hBUikxODIpOworICAg ICAgY2FzZSAweDAxNDU6IHJldHVybigoQ0hBUikyMDkpOworICAgICAgY2FzZSAweDAxNDY6IHJl dHVybigoQ0hBUikyNDEpOworICAgICAgY2FzZSAweDAxNEE6IHJldHVybigoQ0hBUikxODkpOwor ICAgICAgY2FzZSAweDAxNEI6IHJldHVybigoQ0hBUikxOTEpOworICAgICAgY2FzZSAweDAxNEM6 IHJldHVybigoQ0hBUikyMTApOworICAgICAgY2FzZSAweDAxNEQ6IHJldHVybigoQ0hBUikyNDIp OworICAgICAgY2FzZSAweDAxNTY6IHJldHVybigoQ0hBUikxNjMpOworICAgICAgY2FzZSAweDAx NTc6IHJldHVybigoQ0hBUikxNzkpOworICAgICAgY2FzZSAweDAxNjA6IHJldHVybigoQ0hBUikx NjkpOworICAgICAgY2FzZSAweDAxNjE6IHJldHVybigoQ0hBUikxODUpOworICAgICAgY2FzZSAw eDAxNjY6IHJldHVybigoQ0hBUikxNzIpOworICAgICAgY2FzZSAweDAxNjc6IHJldHVybigoQ0hB UikxODgpOworICAgICAgY2FzZSAweDAxNjg6IHJldHVybigoQ0hBUikyMjEpOworICAgICAgY2Fz ZSAweDAxNjk6IHJldHVybigoQ0hBUikyNTMpOworICAgICAgY2FzZSAweDAxNkE6IHJldHVybigo Q0hBUikyMjIpOworICAgICAgY2FzZSAweDAxNkI6IHJldHVybigoQ0hBUikyNTQpOworICAgICAg Y2FzZSAweDAxNzI6IHJldHVybigoQ0hBUikyMTcpOworICAgICAgY2FzZSAweDAxNzM6IHJldHVy bigoQ0hBUikyNDkpOworICAgICAgY2FzZSAweDAxN0Q6IHJldHVybigoQ0hBUikxNzQpOworICAg ICAgY2FzZSAweDAxN0U6IHJldHVybigoQ0hBUikxOTApOworICAgICAgY2FzZSAweDAyQzc6IHJl dHVybigoQ0hBUikxODMpOworICAgICAgY2FzZSAweDAyRDk6IHJldHVybigoQ0hBUikyNTUpOwor ICAgICAgY2FzZSAweDAyREI6IHJldHVybigoQ0hBUikxNzgpOworICAgICAgZGVmYXVsdDogcmV0 dXJuKHR4X3B1bmMoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIElTTyA4ODU5LTUgKExhdGluL0N5cmlsbGljKSAqLworI2lmZGVmIENL X0FOU0lDCit0eF84ODU5XzUoVVNIT1JUIGMpCisjZWxzZQordHhfODg1OV81KGMpIFVTSE9SVCBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweGEwKSAgICAgICAgICAg ICAgICAgICAgICAgLyogKDg4NTktNSBpcyBub3QgTGF0aW4tNSEpICovCisgICAgICByZXR1cm4o KENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHgwMEEwOiBy ZXR1cm4oKENIQVIpMTYwKTsKKyAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oKENIQVIpMjUzKTsK KyAgICAgIGNhc2UgMHgwMEFEOiByZXR1cm4oKENIQVIpMTczKTsKKyAgICAgIGNhc2UgMHgwNDAx OiByZXR1cm4oKENIQVIpMTYxKTsKKyAgICAgIGNhc2UgMHgwNDAyOiByZXR1cm4oKENIQVIpMTYy KTsKKyAgICAgIGNhc2UgMHgwNDAzOiByZXR1cm4oKENIQVIpMTYzKTsKKyAgICAgIGNhc2UgMHgw NDA0OiByZXR1cm4oKENIQVIpMTY0KTsKKyAgICAgIGNhc2UgMHgwNDA1OiByZXR1cm4oKENIQVIp MTY1KTsKKyAgICAgIGNhc2UgMHgwNDA2OiByZXR1cm4oKENIQVIpMTY2KTsKKyAgICAgIGNhc2Ug MHgwNDA3OiByZXR1cm4oKENIQVIpMTY3KTsKKyAgICAgIGNhc2UgMHgwNDA4OiByZXR1cm4oKENI QVIpMTY4KTsKKyAgICAgIGNhc2UgMHgwNDA5OiByZXR1cm4oKENIQVIpMTY5KTsKKyAgICAgIGNh c2UgMHgwNDBBOiByZXR1cm4oKENIQVIpMTcwKTsKKyAgICAgIGNhc2UgMHgwNDBCOiByZXR1cm4o KENIQVIpMTcxKTsKKyAgICAgIGNhc2UgMHgwNDBDOiByZXR1cm4oKENIQVIpMTcyKTsKKyAgICAg IGNhc2UgMHgwNDBFOiByZXR1cm4oKENIQVIpMTc0KTsKKyAgICAgIGNhc2UgMHgwNDBGOiByZXR1 cm4oKENIQVIpMTc1KTsKKyAgICAgIGNhc2UgMHgwNDEwOiByZXR1cm4oKENIQVIpMTc2KTsKKyAg ICAgIGNhc2UgMHgwNDExOiByZXR1cm4oKENIQVIpMTc3KTsKKyAgICAgIGNhc2UgMHgwNDEyOiBy ZXR1cm4oKENIQVIpMTc4KTsKKyAgICAgIGNhc2UgMHgwNDEzOiByZXR1cm4oKENIQVIpMTc5KTsK KyAgICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIpMTgwKTsKKyAgICAgIGNhc2UgMHgwNDE1 OiByZXR1cm4oKENIQVIpMTgxKTsKKyAgICAgIGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpMTgy KTsKKyAgICAgIGNhc2UgMHgwNDE3OiByZXR1cm4oKENIQVIpMTgzKTsKKyAgICAgIGNhc2UgMHgw NDE4OiByZXR1cm4oKENIQVIpMTg0KTsKKyAgICAgIGNhc2UgMHgwNDE5OiByZXR1cm4oKENIQVIp MTg1KTsKKyAgICAgIGNhc2UgMHgwNDFBOiByZXR1cm4oKENIQVIpMTg2KTsKKyAgICAgIGNhc2Ug MHgwNDFCOiByZXR1cm4oKENIQVIpMTg3KTsKKyAgICAgIGNhc2UgMHgwNDFDOiByZXR1cm4oKENI QVIpMTg4KTsKKyAgICAgIGNhc2UgMHgwNDFEOiByZXR1cm4oKENIQVIpMTg5KTsKKyAgICAgIGNh c2UgMHgwNDFFOiByZXR1cm4oKENIQVIpMTkwKTsKKyAgICAgIGNhc2UgMHgwNDFGOiByZXR1cm4o KENIQVIpMTkxKTsKKyAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4oKENIQVIpMTkyKTsKKyAgICAg IGNhc2UgMHgwNDIxOiByZXR1cm4oKENIQVIpMTkzKTsKKyAgICAgIGNhc2UgMHgwNDIyOiByZXR1 cm4oKENIQVIpMTk0KTsKKyAgICAgIGNhc2UgMHgwNDIzOiByZXR1cm4oKENIQVIpMTk1KTsKKyAg ICAgIGNhc2UgMHgwNDI0OiByZXR1cm4oKENIQVIpMTk2KTsKKyAgICAgIGNhc2UgMHgwNDI1OiBy ZXR1cm4oKENIQVIpMTk3KTsKKyAgICAgIGNhc2UgMHgwNDI2OiByZXR1cm4oKENIQVIpMTk4KTsK KyAgICAgIGNhc2UgMHgwNDI3OiByZXR1cm4oKENIQVIpMTk5KTsKKyAgICAgIGNhc2UgMHgwNDI4 OiByZXR1cm4oKENIQVIpMjAwKTsKKyAgICAgIGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpMjAx KTsKKyAgICAgIGNhc2UgMHgwNDJBOiByZXR1cm4oKENIQVIpMjAyKTsKKyAgICAgIGNhc2UgMHgw NDJCOiByZXR1cm4oKENIQVIpMjAzKTsKKyAgICAgIGNhc2UgMHgwNDJDOiByZXR1cm4oKENIQVIp MjA0KTsKKyAgICAgIGNhc2UgMHgwNDJEOiByZXR1cm4oKENIQVIpMjA1KTsKKyAgICAgIGNhc2Ug MHgwNDJFOiByZXR1cm4oKENIQVIpMjA2KTsKKyAgICAgIGNhc2UgMHgwNDJGOiByZXR1cm4oKENI QVIpMjA3KTsKKyAgICAgIGNhc2UgMHgwNDMwOiByZXR1cm4oKENIQVIpMjA4KTsKKyAgICAgIGNh c2UgMHgwNDMxOiByZXR1cm4oKENIQVIpMjA5KTsKKyAgICAgIGNhc2UgMHgwNDMyOiByZXR1cm4o KENIQVIpMjEwKTsKKyAgICAgIGNhc2UgMHgwNDMzOiByZXR1cm4oKENIQVIpMjExKTsKKyAgICAg IGNhc2UgMHgwNDM0OiByZXR1cm4oKENIQVIpMjEyKTsKKyAgICAgIGNhc2UgMHgwNDM1OiByZXR1 cm4oKENIQVIpMjEzKTsKKyAgICAgIGNhc2UgMHgwNDM2OiByZXR1cm4oKENIQVIpMjE0KTsKKyAg ICAgIGNhc2UgMHgwNDM3OiByZXR1cm4oKENIQVIpMjE1KTsKKyAgICAgIGNhc2UgMHgwNDM4OiBy ZXR1cm4oKENIQVIpMjE2KTsKKyAgICAgIGNhc2UgMHgwNDM5OiByZXR1cm4oKENIQVIpMjE3KTsK KyAgICAgIGNhc2UgMHgwNDNBOiByZXR1cm4oKENIQVIpMjE4KTsKKyAgICAgIGNhc2UgMHgwNDNC OiByZXR1cm4oKENIQVIpMjE5KTsKKyAgICAgIGNhc2UgMHgwNDNDOiByZXR1cm4oKENIQVIpMjIw KTsKKyAgICAgIGNhc2UgMHgwNDNEOiByZXR1cm4oKENIQVIpMjIxKTsKKyAgICAgIGNhc2UgMHgw NDNFOiByZXR1cm4oKENIQVIpMjIyKTsKKyAgICAgIGNhc2UgMHgwNDNGOiByZXR1cm4oKENIQVIp MjIzKTsKKyAgICAgIGNhc2UgMHgwNDQwOiByZXR1cm4oKENIQVIpMjI0KTsKKyAgICAgIGNhc2Ug MHgwNDQxOiByZXR1cm4oKENIQVIpMjI1KTsKKyAgICAgIGNhc2UgMHgwNDQyOiByZXR1cm4oKENI QVIpMjI2KTsKKyAgICAgIGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIpMjI3KTsKKyAgICAgIGNh c2UgMHgwNDQ0OiByZXR1cm4oKENIQVIpMjI4KTsKKyAgICAgIGNhc2UgMHgwNDQ1OiByZXR1cm4o KENIQVIpMjI5KTsKKyAgICAgIGNhc2UgMHgwNDQ2OiByZXR1cm4oKENIQVIpMjMwKTsKKyAgICAg IGNhc2UgMHgwNDQ3OiByZXR1cm4oKENIQVIpMjMxKTsKKyAgICAgIGNhc2UgMHgwNDQ4OiByZXR1 cm4oKENIQVIpMjMyKTsKKyAgICAgIGNhc2UgMHgwNDQ5OiByZXR1cm4oKENIQVIpMjMzKTsKKyAg ICAgIGNhc2UgMHgwNDRBOiByZXR1cm4oKENIQVIpMjM0KTsKKyAgICAgIGNhc2UgMHgwNDRCOiBy ZXR1cm4oKENIQVIpMjM1KTsKKyAgICAgIGNhc2UgMHgwNDRDOiByZXR1cm4oKENIQVIpMjM2KTsK KyAgICAgIGNhc2UgMHgwNDREOiByZXR1cm4oKENIQVIpMjM3KTsKKyAgICAgIGNhc2UgMHgwNDRF OiByZXR1cm4oKENIQVIpMjM4KTsKKyAgICAgIGNhc2UgMHgwNDRGOiByZXR1cm4oKENIQVIpMjM5 KTsKKyAgICAgIGNhc2UgMHgwNDUxOiByZXR1cm4oKENIQVIpMjQxKTsKKyAgICAgIGNhc2UgMHgw NDUyOiByZXR1cm4oKENIQVIpMjQyKTsKKyAgICAgIGNhc2UgMHgwNDUzOiByZXR1cm4oKENIQVIp MjQzKTsKKyAgICAgIGNhc2UgMHgwNDU0OiByZXR1cm4oKENIQVIpMjQ0KTsKKyAgICAgIGNhc2Ug MHgwNDU1OiByZXR1cm4oKENIQVIpMjQ1KTsKKyAgICAgIGNhc2UgMHgwNDU2OiByZXR1cm4oKENI QVIpMjQ2KTsKKyAgICAgIGNhc2UgMHgwNDU3OiByZXR1cm4oKENIQVIpMjQ3KTsKKyAgICAgIGNh c2UgMHgwNDU4OiByZXR1cm4oKENIQVIpMjQ4KTsKKyAgICAgIGNhc2UgMHgwNDU5OiByZXR1cm4o KENIQVIpMjQ5KTsKKyAgICAgIGNhc2UgMHgwNDVBOiByZXR1cm4oKENIQVIpMjUwKTsKKyAgICAg IGNhc2UgMHgwNDVCOiByZXR1cm4oKENIQVIpMjUxKTsKKyAgICAgIGNhc2UgMHgwNDVDOiByZXR1 cm4oKENIQVIpMjUyKTsKKyAgICAgIGNhc2UgMHgwNDVFOiByZXR1cm4oKENIQVIpMjU0KTsKKyAg ICAgIGNhc2UgMHgwNDVGOiByZXR1cm4oKENIQVIpMjU1KTsKKyAgICAgIGNhc2UgMHgyMTE2OiBy ZXR1cm4oKENIQVIpMjQwKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKKyAg ICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU08g ODg1OS02IChMYXRpbi9BcmFiaWMpICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4Xzg4NTlfNihVU0hP UlQgYykKKyNlbHNlCit0eF84ODU5XzYoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sKKyAgICBpZiAoYyA8IDB4YTApICAgICAgICAgICAgICAgICAgICAgICAvKiAoODg1OS02 ICE9IExhdGluLTYpICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dp dGNoKGMpIHsKKyAgICAgIGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpMTYwKTsKKyAgICAgIGNh c2UgMHgwMEE0OiByZXR1cm4oKENIQVIpMTY0KTsKKyAgICAgIGNhc2UgMHgwMEFEOiByZXR1cm4o KENIQVIpMTczKTsKKyAgICAgIGNhc2UgMHgwNjBDOiByZXR1cm4oKENIQVIpMTcyKTsKKyAgICAg IGNhc2UgMHgwNjFCOiByZXR1cm4oKENIQVIpMTg3KTsKKyAgICAgIGNhc2UgMHgwNjFGOiByZXR1 cm4oKENIQVIpMTkxKTsKKyAgICAgIGNhc2UgMHgwNjIxOiByZXR1cm4oKENIQVIpMTkzKTsKKyAg ICAgIGNhc2UgMHgwNjIyOiByZXR1cm4oKENIQVIpMTk0KTsKKyAgICAgIGNhc2UgMHgwNjIzOiBy ZXR1cm4oKENIQVIpMTk1KTsKKyAgICAgIGNhc2UgMHgwNjI0OiByZXR1cm4oKENIQVIpMTk2KTsK KyAgICAgIGNhc2UgMHgwNjI1OiByZXR1cm4oKENIQVIpMTk3KTsKKyAgICAgIGNhc2UgMHgwNjI2 OiByZXR1cm4oKENIQVIpMTk4KTsKKyAgICAgIGNhc2UgMHgwNjI3OiByZXR1cm4oKENIQVIpMTk5 KTsKKyAgICAgIGNhc2UgMHgwNjI4OiByZXR1cm4oKENIQVIpMjAwKTsKKyAgICAgIGNhc2UgMHgw NjI5OiByZXR1cm4oKENIQVIpMjAxKTsKKyAgICAgIGNhc2UgMHgwNjJBOiByZXR1cm4oKENIQVIp MjAyKTsKKyAgICAgIGNhc2UgMHgwNjJCOiByZXR1cm4oKENIQVIpMjAzKTsKKyAgICAgIGNhc2Ug MHgwNjJDOiByZXR1cm4oKENIQVIpMjA0KTsKKyAgICAgIGNhc2UgMHgwNjJEOiByZXR1cm4oKENI QVIpMjA1KTsKKyAgICAgIGNhc2UgMHgwNjJFOiByZXR1cm4oKENIQVIpMjA2KTsKKyAgICAgIGNh c2UgMHgwNjJGOiByZXR1cm4oKENIQVIpMjA3KTsKKyAgICAgIGNhc2UgMHgwNjMwOiByZXR1cm4o KENIQVIpMjA4KTsKKyAgICAgIGNhc2UgMHgwNjMxOiByZXR1cm4oKENIQVIpMjA5KTsKKyAgICAg IGNhc2UgMHgwNjMyOiByZXR1cm4oKENIQVIpMjEwKTsKKyAgICAgIGNhc2UgMHgwNjMzOiByZXR1 cm4oKENIQVIpMjExKTsKKyAgICAgIGNhc2UgMHgwNjM0OiByZXR1cm4oKENIQVIpMjEyKTsKKyAg ICAgIGNhc2UgMHgwNjM1OiByZXR1cm4oKENIQVIpMjEzKTsKKyAgICAgIGNhc2UgMHgwNjM2OiBy ZXR1cm4oKENIQVIpMjE0KTsKKyAgICAgIGNhc2UgMHgwNjM3OiByZXR1cm4oKENIQVIpMjE1KTsK KyAgICAgIGNhc2UgMHgwNjM4OiByZXR1cm4oKENIQVIpMjE2KTsKKyAgICAgIGNhc2UgMHgwNjM5 OiByZXR1cm4oKENIQVIpMjE3KTsKKyAgICAgIGNhc2UgMHgwNjNBOiByZXR1cm4oKENIQVIpMjE4 KTsKKyAgICAgIGNhc2UgMHgwNjQwOiByZXR1cm4oKENIQVIpMjI0KTsKKyAgICAgIGNhc2UgMHgw NjQxOiByZXR1cm4oKENIQVIpMjI1KTsKKyAgICAgIGNhc2UgMHgwNjQyOiByZXR1cm4oKENIQVIp MjI2KTsKKyAgICAgIGNhc2UgMHgwNjQzOiByZXR1cm4oKENIQVIpMjI3KTsKKyAgICAgIGNhc2Ug MHgwNjQ0OiByZXR1cm4oKENIQVIpMjI4KTsKKyAgICAgIGNhc2UgMHgwNjQ1OiByZXR1cm4oKENI QVIpMjI5KTsKKyAgICAgIGNhc2UgMHgwNjQ2OiByZXR1cm4oKENIQVIpMjMwKTsKKyAgICAgIGNh c2UgMHgwNjQ3OiByZXR1cm4oKENIQVIpMjMxKTsKKyAgICAgIGNhc2UgMHgwNjQ4OiByZXR1cm4o KENIQVIpMjMyKTsKKyAgICAgIGNhc2UgMHgwNjQ5OiByZXR1cm4oKENIQVIpMjMzKTsKKyAgICAg IGNhc2UgMHgwNjRBOiByZXR1cm4oKENIQVIpMjM0KTsKKyAgICAgIGNhc2UgMHgwNjRCOiByZXR1 cm4oKENIQVIpMjM1KTsKKyAgICAgIGNhc2UgMHgwNjRDOiByZXR1cm4oKENIQVIpMjM2KTsKKyAg ICAgIGNhc2UgMHgwNjREOiByZXR1cm4oKENIQVIpMjM3KTsKKyAgICAgIGNhc2UgMHgwNjRFOiBy ZXR1cm4oKENIQVIpMjM4KTsKKyAgICAgIGNhc2UgMHgwNjRGOiByZXR1cm4oKENIQVIpMjM5KTsK KyAgICAgIGNhc2UgMHgwNjUwOiByZXR1cm4oKENIQVIpMjQwKTsKKyAgICAgIGNhc2UgMHgwNjUx OiByZXR1cm4oKENIQVIpMjQxKTsKKyAgICAgIGNhc2UgMHgwNjUyOiByZXR1cm4oKENIQVIpMjQy KTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9wdW5jKGMpKTsKKyAgICB9Cit9CisKK2ludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU08gODg1OS03IChMYXRpbi9H cmVlaykgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfODg1OV83KFVTSE9SVCBjKQorI2Vsc2UKK3R4 Xzg4NTlfNyhjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChj IDwgMHhhMCkKKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2goYykg eworICAgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKTE2MCk7CisgICAgICAgIGNhc2Ug MHgwMGEzOiByZXR1cm4oKENIQVIpMTYzKTsKKyAgICAgICAgY2FzZSAweDAwYTY6IHJldHVybigo Q0hBUikxNjYpOworICAgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKTE2Nyk7CisgICAg ICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpMTY4KTsKKyAgICAgICAgY2FzZSAweDAwYTk6 IHJldHVybigoQ0hBUikxNjkpOworICAgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKTE3 MSk7CisgICAgICAgIGNhc2UgMHgwMGFjOiByZXR1cm4oKENIQVIpMTcyKTsKKyAgICAgICAgY2Fz ZSAweDAwYWQ6IHJldHVybigoQ0hBUikxNzMpOworICAgICAgICBjYXNlIDB4MDBiMDogcmV0dXJu KChDSEFSKTE3Nik7CisgICAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpMTc3KTsKKyAg ICAgICAgY2FzZSAweDAwYjI6IHJldHVybigoQ0hBUikxNzgpOworICAgICAgICBjYXNlIDB4MDBi MzogcmV0dXJuKChDSEFSKTE3OSk7CisgICAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIp MTgzKTsKKyAgICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikxODcpOworICAgICAgICBj YXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKTE4OSk7CisgICAgICAgIGNhc2UgMHgwMmJjOiByZXR1 cm4oKENIQVIpMTYyKTsKKyAgICAgICAgY2FzZSAweDAyYmQ6IHJldHVybigoQ0hBUikxNjEpOwor ICAgICAgICBjYXNlIDB4MDM4NDogcmV0dXJuKChDSEFSKTE4MCk7CisgICAgICAgIGNhc2UgMHgw Mzg1OiByZXR1cm4oKENIQVIpMTgxKTsKKyAgICAgICAgY2FzZSAweDAzODY6IHJldHVybigoQ0hB UikxODIpOworICAgICAgICBjYXNlIDB4MDM4ODogcmV0dXJuKChDSEFSKTE4NCk7CisgICAgICAg IGNhc2UgMHgwMzg5OiByZXR1cm4oKENIQVIpMTg1KTsKKyAgICAgICAgY2FzZSAweDAzOGE6IHJl dHVybigoQ0hBUikxODYpOworICAgICAgICBjYXNlIDB4MDM4YzogcmV0dXJuKChDSEFSKTE4OCk7 CisgICAgICAgIGNhc2UgMHgwMzhlOiByZXR1cm4oKENIQVIpMTkwKTsKKyAgICAgICAgY2FzZSAw eDAzOGY6IHJldHVybigoQ0hBUikxOTEpOworICAgICAgICBjYXNlIDB4MDM5MDogcmV0dXJuKChD SEFSKTE5Mik7CisgICAgICAgIGNhc2UgMHgwMzkxOiByZXR1cm4oKENIQVIpMTkzKTsKKyAgICAg ICAgY2FzZSAweDAzOTI6IHJldHVybigoQ0hBUikxOTQpOworICAgICAgICBjYXNlIDB4MDM5Mzog cmV0dXJuKChDSEFSKTE5NSk7CisgICAgICAgIGNhc2UgMHgwMzk0OiByZXR1cm4oKENIQVIpMTk2 KTsKKyAgICAgICAgY2FzZSAweDAzOTU6IHJldHVybigoQ0hBUikxOTcpOworICAgICAgICBjYXNl IDB4MDM5NjogcmV0dXJuKChDSEFSKTE5OCk7CisgICAgICAgIGNhc2UgMHgwMzk3OiByZXR1cm4o KENIQVIpMTk5KTsKKyAgICAgICAgY2FzZSAweDAzOTg6IHJldHVybigoQ0hBUikyMDApOworICAg ICAgICBjYXNlIDB4MDM5OTogcmV0dXJuKChDSEFSKTIwMSk7CisgICAgICAgIGNhc2UgMHgwMzlh OiByZXR1cm4oKENIQVIpMjAyKTsKKyAgICAgICAgY2FzZSAweDAzOWI6IHJldHVybigoQ0hBUiky MDMpOworICAgICAgICBjYXNlIDB4MDM5YzogcmV0dXJuKChDSEFSKTIwNCk7CisgICAgICAgIGNh c2UgMHgwMzlkOiByZXR1cm4oKENIQVIpMjA1KTsKKyAgICAgICAgY2FzZSAweDAzOWU6IHJldHVy bigoQ0hBUikyMDYpOworICAgICAgICBjYXNlIDB4MDM5ZjogcmV0dXJuKChDSEFSKTIwNyk7Cisg ICAgICAgIGNhc2UgMHgwM2EwOiByZXR1cm4oKENIQVIpMjA4KTsKKyAgICAgICAgY2FzZSAweDAz YTE6IHJldHVybigoQ0hBUikyMDkpOworICAgICAgICBjYXNlIDB4MDNhMzogcmV0dXJuKChDSEFS KTIxMSk7CisgICAgICAgIGNhc2UgMHgwM2E0OiByZXR1cm4oKENIQVIpMjEyKTsKKyAgICAgICAg Y2FzZSAweDAzYTU6IHJldHVybigoQ0hBUikyMTMpOworICAgICAgICBjYXNlIDB4MDNhNjogcmV0 dXJuKChDSEFSKTIxNCk7CisgICAgICAgIGNhc2UgMHgwM2E3OiByZXR1cm4oKENIQVIpMjE1KTsK KyAgICAgICAgY2FzZSAweDAzYTg6IHJldHVybigoQ0hBUikyMTYpOworICAgICAgICBjYXNlIDB4 MDNhOTogcmV0dXJuKChDSEFSKTIxNyk7CisgICAgICAgIGNhc2UgMHgwM2FhOiByZXR1cm4oKENI QVIpMjE4KTsKKyAgICAgICAgY2FzZSAweDAzYWI6IHJldHVybigoQ0hBUikyMTkpOworICAgICAg ICBjYXNlIDB4MDNhYzogcmV0dXJuKChDSEFSKTIyMCk7CisgICAgICAgIGNhc2UgMHgwM2FkOiBy ZXR1cm4oKENIQVIpMjIxKTsKKyAgICAgICAgY2FzZSAweDAzYWU6IHJldHVybigoQ0hBUikyMjIp OworICAgICAgICBjYXNlIDB4MDNhZjogcmV0dXJuKChDSEFSKTIyMyk7CisgICAgICAgIGNhc2Ug MHgwM2IwOiByZXR1cm4oKENIQVIpMjI0KTsKKyAgICAgICAgY2FzZSAweDAzYjE6IHJldHVybigo Q0hBUikyMjUpOworICAgICAgICBjYXNlIDB4MDNiMjogcmV0dXJuKChDSEFSKTIyNik7CisgICAg ICAgIGNhc2UgMHgwM2IzOiByZXR1cm4oKENIQVIpMjI3KTsKKyAgICAgICAgY2FzZSAweDAzYjQ6 IHJldHVybigoQ0hBUikyMjgpOworICAgICAgICBjYXNlIDB4MDNiNTogcmV0dXJuKChDSEFSKTIy OSk7CisgICAgICAgIGNhc2UgMHgwM2I2OiByZXR1cm4oKENIQVIpMjMwKTsKKyAgICAgICAgY2Fz ZSAweDAzYjc6IHJldHVybigoQ0hBUikyMzEpOworICAgICAgICBjYXNlIDB4MDNiODogcmV0dXJu KChDSEFSKTIzMik7CisgICAgICAgIGNhc2UgMHgwM2I5OiByZXR1cm4oKENIQVIpMjMzKTsKKyAg ICAgICAgY2FzZSAweDAzYmE6IHJldHVybigoQ0hBUikyMzQpOworICAgICAgICBjYXNlIDB4MDNi YjogcmV0dXJuKChDSEFSKTIzNSk7CisgICAgICAgIGNhc2UgMHgwM2JjOiByZXR1cm4oKENIQVIp MjM2KTsKKyAgICAgICAgY2FzZSAweDAzYmQ6IHJldHVybigoQ0hBUikyMzcpOworICAgICAgICBj YXNlIDB4MDNiZTogcmV0dXJuKChDSEFSKTIzOCk7CisgICAgICAgIGNhc2UgMHgwM2JmOiByZXR1 cm4oKENIQVIpMjM5KTsKKyAgICAgICAgY2FzZSAweDAzYzA6IHJldHVybigoQ0hBUikyNDApOwor ICAgICAgICBjYXNlIDB4MDNjMTogcmV0dXJuKChDSEFSKTI0MSk7CisgICAgICAgIGNhc2UgMHgw M2MyOiByZXR1cm4oKENIQVIpMjQyKTsKKyAgICAgICAgY2FzZSAweDAzYzM6IHJldHVybigoQ0hB UikyNDMpOworICAgICAgICBjYXNlIDB4MDNjNDogcmV0dXJuKChDSEFSKTI0NCk7CisgICAgICAg IGNhc2UgMHgwM2M1OiByZXR1cm4oKENIQVIpMjQ1KTsKKyAgICAgICAgY2FzZSAweDAzYzY6IHJl dHVybigoQ0hBUikyNDYpOworICAgICAgICBjYXNlIDB4MDNjNzogcmV0dXJuKChDSEFSKTI0Nyk7 CisgICAgICAgIGNhc2UgMHgwM2M4OiByZXR1cm4oKENIQVIpMjQ4KTsKKyAgICAgICAgY2FzZSAw eDAzYzk6IHJldHVybigoQ0hBUikyNDkpOworICAgICAgICBjYXNlIDB4MDNjYTogcmV0dXJuKChD SEFSKTI1MCk7CisgICAgICAgIGNhc2UgMHgwM2NiOiByZXR1cm4oKENIQVIpMjUxKTsKKyAgICAg ICAgY2FzZSAweDAzY2M6IHJldHVybigoQ0hBUikyNTIpOworICAgICAgICBjYXNlIDB4MDNjZDog cmV0dXJuKChDSEFSKTI1Myk7CisgICAgICAgIGNhc2UgMHgwM2NlOiByZXR1cm4oKENIQVIpMjU0 KTsKKyAgICAgICAgY2FzZSAweDIwMTU6IHJldHVybigoQ0hBUikxNzUpOworICAgICAgICBjYXNl IDB4MjAxODogcmV0dXJuKChDSEFSKTE2MSk7CisgICAgICAgIGNhc2UgMHgyMDE5OiByZXR1cm4o KENIQVIpMTYyKTsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOworICAgIH0K K30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElTTyA4ODU5 LTggKExhdGluL0hlYnJldykgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfODg1OV84KFVTSE9SVCBj KQorI2Vsc2UKK3R4Xzg4NTlfOChjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eworICAgIGlmIChjIDwgMHhhMCkKKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAg ICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikxNjApOworICAg ICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikxNjIpOworICAgICAgY2FzZSAweDAwYTM6IHJl dHVybigoQ0hBUikxNjMpOworICAgICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUikxNjQpOwor ICAgICAgY2FzZSAweDAwYTU6IHJldHVybigoQ0hBUikxNjUpOworICAgICAgY2FzZSAweDAwYTY6 IHJldHVybigoQ0hBUikxNjYpOworICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikxNjcp OworICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikxNjgpOworICAgICAgY2FzZSAweDAw YTk6IHJldHVybigoQ0hBUikxNjkpOworICAgICAgY2FzZSAweDAwZDc6IHJldHVybigoQ0hBUikx NzApOworICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikxNzEpOworICAgICAgY2FzZSAw eDAwYWM6IHJldHVybigoQ0hBUikxNzIpOworICAgICAgY2FzZSAweDAwYWQ6IHJldHVybigoQ0hB UikxNzMpOworICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikxNzQpOworICAgICAgY2Fz ZSAweDIwM2U6IHJldHVybigoQ0hBUikxNzUpOworICAgICAgY2FzZSAweDAwYjA6IHJldHVybigo Q0hBUikxNzYpOworICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikxNzcpOworICAgICAg Y2FzZSAweDAwYjI6IHJldHVybigoQ0hBUikxNzgpOworICAgICAgY2FzZSAweDAwYjM6IHJldHVy bigoQ0hBUikxNzkpOworICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigoQ0hBUikxODApOworICAg ICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikxODEpOworICAgICAgY2FzZSAweDAwYjY6IHJl dHVybigoQ0hBUikxODIpOworICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikxODMpOwor ICAgICAgY2FzZSAweDAwYjg6IHJldHVybigoQ0hBUikxODQpOworICAgICAgY2FzZSAweDAwYjk6 IHJldHVybigoQ0hBUikxODUpOworICAgICAgY2FzZSAweDAwZjc6IHJldHVybigoQ0hBUikxODYp OworICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikxODcpOworICAgICAgY2FzZSAweDAw YmM6IHJldHVybigoQ0hBUikxODgpOworICAgICAgY2FzZSAweDAwYmQ6IHJldHVybigoQ0hBUikx ODkpOworICAgICAgY2FzZSAweDAwYmU6IHJldHVybigoQ0hBUikxOTApOworICAgICAgY2FzZSAw eDIwMTc6IHJldHVybigoQ0hBUikyMjMpOworICAgICAgY2FzZSAweDA1ZDA6IHJldHVybigoQ0hB UikyMjQpOworICAgICAgY2FzZSAweDA1ZDE6IHJldHVybigoQ0hBUikyMjUpOworICAgICAgY2Fz ZSAweDA1ZDI6IHJldHVybigoQ0hBUikyMjYpOworICAgICAgY2FzZSAweDA1ZDM6IHJldHVybigo Q0hBUikyMjcpOworICAgICAgY2FzZSAweDA1ZDQ6IHJldHVybigoQ0hBUikyMjgpOworICAgICAg Y2FzZSAweDA1ZDU6IHJldHVybigoQ0hBUikyMjkpOworICAgICAgY2FzZSAweDA1ZDY6IHJldHVy bigoQ0hBUikyMzApOworICAgICAgY2FzZSAweDA1ZDc6IHJldHVybigoQ0hBUikyMzEpOworICAg ICAgY2FzZSAweDA1ZDg6IHJldHVybigoQ0hBUikyMzIpOworICAgICAgY2FzZSAweDA1ZDk6IHJl dHVybigoQ0hBUikyMzMpOworICAgICAgY2FzZSAweDA1ZGE6IHJldHVybigoQ0hBUikyMzQpOwor ICAgICAgY2FzZSAweDA1ZGI6IHJldHVybigoQ0hBUikyMzUpOworICAgICAgY2FzZSAweDA1ZGM6 IHJldHVybigoQ0hBUikyMzYpOworICAgICAgY2FzZSAweDA1ZGQ6IHJldHVybigoQ0hBUikyMzcp OworICAgICAgY2FzZSAweDA1ZGU6IHJldHVybigoQ0hBUikyMzgpOworICAgICAgY2FzZSAweDA1 ZGY6IHJldHVybigoQ0hBUikyMzkpOworICAgICAgY2FzZSAweDA1ZTA6IHJldHVybigoQ0hBUiky NDApOworICAgICAgY2FzZSAweDA1ZTE6IHJldHVybigoQ0hBUikyNDEpOworICAgICAgY2FzZSAw eDA1ZTI6IHJldHVybigoQ0hBUikyNDIpOworICAgICAgY2FzZSAweDA1ZTM6IHJldHVybigoQ0hB UikyNDMpOworICAgICAgY2FzZSAweDA1ZTQ6IHJldHVybigoQ0hBUikyNDQpOworICAgICAgY2Fz ZSAweDA1ZTU6IHJldHVybigoQ0hBUikyNDUpOworICAgICAgY2FzZSAweDA1ZTY6IHJldHVybigo Q0hBUikyNDYpOworICAgICAgY2FzZSAweDA1ZTc6IHJldHVybigoQ0hBUikyNDcpOworICAgICAg Y2FzZSAweDA1ZTg6IHJldHVybigoQ0hBUikyNDgpOworICAgICAgY2FzZSAweDA1ZTk6IHJldHVy bigoQ0hBUikyNDkpOworICAgICAgY2FzZSAweDA1ZWE6IHJldHVybigoQ0hBUikyNTApOworICAg ICAgZGVmYXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElTTyA4ODU5LTkgKExhdGluLTQpICovCisj aWZkZWYgQ0tfQU5TSUMKK3R4Xzg4NTlfOShVU0hPUlQgYykKKyNlbHNlCit0eF84ODU5XzkoYykg VVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4YTApCisg ICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNh c2UgMHgwMTFFOiByZXR1cm4oKENIQVIpMjA4KTsgICAvKiBEaWZmZXJzIGZyb20gTGF0aW4tMSBp biAqLworICAgICAgY2FzZSAweDAxMUY6IHJldHVybigoQ0hBUikyNDApOyAgIC8qIG9ubHkgc2l4 IHBsYWNlcyAqLworICAgICAgY2FzZSAweDAxMzA6IHJldHVybigoQ0hBUikyMjEpOworICAgICAg Y2FzZSAweDAxMzE6IHJldHVybigoQ0hBUikyNTMpOworICAgICAgY2FzZSAweDAxNUU6IHJldHVy bigoQ0hBUikyMjIpOworICAgICAgY2FzZSAweDAxNUY6IHJldHVybigoQ0hBUikyNTQpOworICAg ICAgZGVmYXVsdDogcmV0dXJuKHR4X2lkZW50KGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMYXRpbi02ICovCisjaWZkZWYgQ0tfQU5T SUMKK3R4Xzg4NTlfMTAoVVNIT1JUIGMpCisjZWxzZQordHhfODg1OV8xMChjKSBVU0hPUlQgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHhhMCkKKyAgICAgIHJldHVy bigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweDAwYTA6 IHJldHVybigoQ0hBUikxNjApOworICAgICAgY2FzZSAweDAwYWQ6IHJldHVybigoQ0hBUikxNzMp OworICAgICAgY2FzZSAweDAwYmQ6IHJldHVybigoQ0hBUikxODkpOworICAgICAgY2FzZSAweDAw YmU6IHJldHVybigoQ0hBUikxOTApOworICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikx OTMpOworICAgICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikxOTQpOworICAgICAgY2FzZSAw eDAwYzM6IHJldHVybigoQ0hBUikxOTUpOworICAgICAgY2FzZSAweDAwYzQ6IHJldHVybigoQ0hB UikxOTYpOworICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikxOTcpOworICAgICAgY2Fz ZSAweDAwYzY6IHJldHVybigoQ0hBUikxOTgpOworICAgICAgY2FzZSAweDAwYzk6IHJldHVybigo Q0hBUikyMDEpOworICAgICAgY2FzZSAweDAwY2I6IHJldHVybigoQ0hBUikyMDMpOworICAgICAg Y2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikyMDUpOworICAgICAgY2FzZSAweDAwY2U6IHJldHVy bigoQ0hBUikyMDYpOworICAgICAgY2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUikyMDcpOworICAg ICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikyMTEpOworICAgICAgY2FzZSAweDAwZDQ6IHJl dHVybigoQ0hBUikyMTIpOworICAgICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikyMTMpOwor ICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikyMTQpOworICAgICAgY2FzZSAweDAwZDg6 IHJldHVybigoQ0hBUikyMTYpOworICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikyMTgp OworICAgICAgY2FzZSAweDAwZGI6IHJldHVybigoQ0hBUikyMTkpOworICAgICAgY2FzZSAweDAw ZGM6IHJldHVybigoQ0hBUikyMjApOworICAgICAgY2FzZSAweDAwZGQ6IHJldHVybigoQ0hBUiky MjEpOworICAgICAgY2FzZSAweDAwZGU6IHJldHVybigoQ0hBUikyMjIpOworICAgICAgY2FzZSAw eDAwZTE6IHJldHVybigoQ0hBUikyMjUpOworICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hB UikyMjYpOworICAgICAgY2FzZSAweDAwZTM6IHJldHVybigoQ0hBUikyMjcpOworICAgICAgY2Fz ZSAweDAwZTQ6IHJldHVybigoQ0hBUikyMjgpOworICAgICAgY2FzZSAweDAwZTU6IHJldHVybigo Q0hBUikyMjkpOworICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUikyMzApOworICAgICAg Y2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikyMzMpOworICAgICAgY2FzZSAweDAwZWI6IHJldHVy bigoQ0hBUikyMzUpOworICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikyMzcpOworICAg ICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikyMzgpOworICAgICAgY2FzZSAweDAwZWY6IHJl dHVybigoQ0hBUikyMzkpOworICAgICAgY2FzZSAweDAwZjA6IHJldHVybigoQ0hBUikyNDApOwor ICAgICAgY2FzZSAweDAwZjE6IHJldHVybigoQ0hBUikyNDEpOworICAgICAgY2FzZSAweDAwZjM6 IHJldHVybigoQ0hBUikyNDMpOworICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikyNDQp OworICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikyNDUpOworICAgICAgY2FzZSAweDAw ZjY6IHJldHVybigoQ0hBUikyNDYpOworICAgICAgY2FzZSAweDAwZjg6IHJldHVybigoQ0hBUiky NDgpOworICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikyNTApOworICAgICAgY2FzZSAw eDAwZmI6IHJldHVybigoQ0hBUikyNTEpOworICAgICAgY2FzZSAweDAwZmM6IHJldHVybigoQ0hB UikyNTIpOworICAgICAgY2FzZSAweDAwZmQ6IHJldHVybigoQ0hBUikyNTMpOworICAgICAgY2Fz ZSAweDAwZmU6IHJldHVybigoQ0hBUikyNTQpOworICAgICAgY2FzZSAweDAxMDA6IHJldHVybigo Q0hBUikxOTIpOworICAgICAgY2FzZSAweDAxMDE6IHJldHVybigoQ0hBUikyMjQpOworICAgICAg Y2FzZSAweDAxMDQ6IHJldHVybigoQ0hBUikxNjEpOworICAgICAgY2FzZSAweDAxMDU6IHJldHVy bigoQ0hBUikxNzcpOworICAgICAgY2FzZSAweDAxMGM6IHJldHVybigoQ0hBUikyMDApOworICAg ICAgY2FzZSAweDAxMGQ6IHJldHVybigoQ0hBUikyMzIpOworICAgICAgY2FzZSAweDAxMTA6IHJl dHVybigoQ0hBUikyMDgpOworICAgICAgY2FzZSAweDAxMTE6IHJldHVybigoQ0hBUikxNzYpOwor ICAgICAgY2FzZSAweDAxMTI6IHJldHVybigoQ0hBUikxNjIpOworICAgICAgY2FzZSAweDAxMTM6 IHJldHVybigoQ0hBUikxNzgpOworICAgICAgY2FzZSAweDAxMTY6IHJldHVybigoQ0hBUikyMDQp OworICAgICAgY2FzZSAweDAxMTc6IHJldHVybigoQ0hBUikyMzYpOworICAgICAgY2FzZSAweDAx MTg6IHJldHVybigoQ0hBUikyMDIpOworICAgICAgY2FzZSAweDAxMTk6IHJldHVybigoQ0hBUiky MzQpOworICAgICAgY2FzZSAweDAxMjI6IHJldHVybigoQ0hBUikxNjMpOworICAgICAgY2FzZSAw eDAxMjM6IHJldHVybigoQ0hBUikxNzkpOworICAgICAgY2FzZSAweDAxMjg6IHJldHVybigoQ0hB UikxNjUpOworICAgICAgY2FzZSAweDAxMjk6IHJldHVybigoQ0hBUikxODEpOworICAgICAgY2Fz ZSAweDAxMmE6IHJldHVybigoQ0hBUikxNjQpOworICAgICAgY2FzZSAweDAxMmI6IHJldHVybigo Q0hBUikxODApOworICAgICAgY2FzZSAweDAxMmU6IHJldHVybigoQ0hBUikxOTkpOworICAgICAg Y2FzZSAweDAxMmY6IHJldHVybigoQ0hBUikyMzEpOworICAgICAgY2FzZSAweDAxMzY6IHJldHVy bigoQ0hBUikxNjYpOworICAgICAgY2FzZSAweDAxMzc6IHJldHVybigoQ0hBUikxODIpOworICAg ICAgY2FzZSAweDAxMzg6IHJldHVybigoQ0hBUikxNzQpOworICAgICAgY2FzZSAweDAxM2I6IHJl dHVybigoQ0hBUikxNjcpOworICAgICAgY2FzZSAweDAxM2M6IHJldHVybigoQ0hBUikxODMpOwor ICAgICAgY2FzZSAweDAxNDM6IHJldHVybigoQ0hBUikxNjgpOworICAgICAgY2FzZSAweDAxNDQ6 IHJldHVybigoQ0hBUikxODQpOworICAgICAgY2FzZSAweDAxNDU6IHJldHVybigoQ0hBUikyMDkp OworICAgICAgY2FzZSAweDAxNGE6IHJldHVybigoQ0hBUikxNzUpOworICAgICAgY2FzZSAweDAx NGI6IHJldHVybigoQ0hBUikxOTEpOworICAgICAgY2FzZSAweDAxNGM6IHJldHVybigoQ0hBUiky MTApOworICAgICAgY2FzZSAweDAxNGQ6IHJldHVybigoQ0hBUikyNDIpOworICAgICAgY2FzZSAw eDAxNTY6IHJldHVybigoQ0hBUikxNjkpOworICAgICAgY2FzZSAweDAxNTc6IHJldHVybigoQ0hB UikxODUpOworICAgICAgY2FzZSAweDAxNjA6IHJldHVybigoQ0hBUikxNzApOworICAgICAgY2Fz ZSAweDAxNjE6IHJldHVybigoQ0hBUikxODYpOworICAgICAgY2FzZSAweDAxNjY6IHJldHVybigo Q0hBUikxNzEpOworICAgICAgY2FzZSAweDAxNjc6IHJldHVybigoQ0hBUikxODcpOworICAgICAg Y2FzZSAweDAxNjg6IHJldHVybigoQ0hBUikyMTUpOworICAgICAgY2FzZSAweDAxNjk6IHJldHVy bigoQ0hBUikyNDcpOworICAgICAgY2FzZSAweDAxNmE6IHJldHVybigoQ0hBUikyMjMpOworICAg ICAgY2FzZSAweDAxNmI6IHJldHVybigoQ0hBUikyNTUpOworICAgICAgY2FzZSAweDAxNzI6IHJl dHVybigoQ0hBUikyMTcpOworICAgICAgY2FzZSAweDAxNzM6IHJldHVybigoQ0hBUikyNDkpOwor ICAgICAgY2FzZSAweDAxN2Q6IHJldHVybigoQ0hBUikxNzIpOworICAgICAgY2FzZSAweDAxN2U6 IHJldHVybigoQ0hBUikxODgpOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2lkZW50KGMpKTsK KyAgICB9Cit9CisKKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IElTTyA4ODU5LTE1IExhdGluLTkgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfODg1OV8xNShVU0hP UlQgYykKKyNlbHNlCit0eF84ODU5XzE1KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgaWYgKGMgPCAweGEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikp OworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4MjBBQzogcmV0dXJuKChDSEFSKTB4QTQp OyAgLyogRGlmZmVycyBmcm9tIExhdGluLTEgaW4gKi8KKyAgICAgIGNhc2UgMHgwMTYwOiByZXR1 cm4oKENIQVIpMHhBQyk7ICAvKiBvbmx5IGVpZ2h0IHBsYWNlcyAqLworICAgICAgY2FzZSAweDAx NjE6IHJldHVybigoQ0hBUikweEE4KTsKKyAgICAgIGNhc2UgMHgwMTdEOiByZXR1cm4oKENIQVIp MHhCNCk7CisgICAgICBjYXNlIDB4MDE3RTogcmV0dXJuKChDSEFSKTB4QjgpOworICAgICAgY2Fz ZSAweDAxNTI6IHJldHVybigoQ0hBUikweEJDKTsKKyAgICAgIGNhc2UgMHgwMTUzOiByZXR1cm4o KENIQVIpMHhCRCk7CisgICAgICBjYXNlIDB4MDE3ODogcmV0dXJuKChDSEFSKTB4QkUpOworICAg ICAgZGVmYXVsdDogcmV0dXJuKHR4X2lkZW50KGMpKTsKKyAgICB9Cit9CisKK2ludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbGQgS09JLTggKEVDTUEgMTEzIEZpcnN0 IEVkLikgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfa29pOChVU0hPUlQgYykKKyNlbHNlCit0eF9r b2k4KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAw eGEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaChjKSB7Cisg ICAgICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQxMTogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMjog cmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMzogcmV0dXJuKChD SEFSKSgyMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKSgyMjgg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQxNjogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQxNzogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQx ODogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxOTogcmV0dXJu KChDSEFSKSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxYTogcmV0dXJuKChDSEFSKSgy MzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxYjogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQxYzogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQxZDogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQxZTogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxZjogcmV0 dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChDSEFS KSgyNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMTogcmV0dXJuKChDSEFSKSgyNDMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQyMjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQyNDogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNTog cmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChD SEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKSgyNTQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyODogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQyYjogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQy YzogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyZDogcmV0dXJu KChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyZTogcmV0dXJuKChDSEFSKSgy MjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyZjogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQzMDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQzMTogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQzMjogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMzogcmV0 dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNDogcmV0dXJuKChDSEFS KSgxOTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNTogcmV0dXJuKChDSEFSKSgxOTcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQzNjogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQzNzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQzODogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzOTog cmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzYTogcmV0dXJuKChD SEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzYjogcmV0dXJuKChDSEFSKSgyMDQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzYzogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQzZDogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQzZTogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQz ZjogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MDogcmV0dXJu KChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MTogcmV0dXJuKChDSEFSKSgy MTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQ0MzogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQ0NDogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQ0NTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NjogcmV0 dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NzogcmV0dXJuKChDSEFS KSgyMjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ODogcmV0dXJuKChDSEFSKSgyMTkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQ0OTogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQ0YTogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQ0YjogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0Yzog cmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ZDogcmV0dXJuKChD SEFSKSgyMjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ZTogcmV0dXJuKChDSEFSKSgxOTIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ZjogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7 CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfaWRlbnQoYykpOworICAgIH0KK30KKworaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVDUy0yIHRvIEtPSTgtUiAoUnVz c2lhKSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9rb2k4cihVU0hPUlQgYykKKyNlbHNlCit0eF9r b2k4cihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwg MHgwMEEwKQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaChjKSB7 CisgICAgICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBBOTogcmV0dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBC MDogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCMjogcmV0dXJu KChDSEFSKSgxNTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCNzogcmV0dXJuKChDSEFSKSgx NTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBGNzogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQwMTogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQxMDogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQxMTogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMjogcmV0 dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMzogcmV0dXJuKChDSEFS KSgyMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNDogcmV0dXJuKChDSEFSKSgyMjggJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQxNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQxNjogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQxNzogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxODog cmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxOTogcmV0dXJuKChD SEFSKSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxQTogcmV0dXJuKChDSEFSKSgyMzUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxQjogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQxQzogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQxRDogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQx RTogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxRjogcmV0dXJu KChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKSgy NDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMTogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQyMjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQyNDogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNTogcmV0 dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChDSEFS KSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNzogcmV0dXJuKChDSEFSKSgyNTQgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQyODogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQyOTogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQyQTogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyQjog cmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyQzogcmV0dXJuKChD SEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyRDogcmV0dXJuKChDSEFSKSgyNTIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyRTogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQyRjogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQzMDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQz MTogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMjogcmV0dXJu KChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMzogcmV0dXJuKChDSEFSKSgx OTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQzNTogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQzNjogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQzNzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzODogcmV0 dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzOTogcmV0dXJuKChDSEFS KSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzQTogcmV0dXJuKChDSEFSKSgyMDMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQzQjogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQzQzogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQzRDogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzRTog cmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzRjogcmV0dXJuKChD SEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MDogcmV0dXJuKChDSEFSKSgyMTAg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MTogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQ0MjogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQ0MzogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0 NDogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NTogcmV0dXJu KChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NjogcmV0dXJuKChDSEFSKSgx OTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NzogcmV0dXJuKChDSEFSKSgyMjIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQ0ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQ0OTogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQ0QTogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0QjogcmV0 dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0QzogcmV0dXJuKChDSEFS KSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0RDogcmV0dXJuKChDSEFSKSgyMjAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQ0RTogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQ0RjogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQ1MTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIxOTog cmV0dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIxQTogcmV0dXJuKChD SEFSKSgxNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI0ODogcmV0dXJuKChDSEFSKSgxNTEg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjMyMDogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjMy MTogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwMDogcmV0dXJu KChDSEFSKSgxMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKSgx MjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwQzogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjUxODogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxQzogcmV0 dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFS KSgxMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyQzogcmV0dXJuKChDSEFSKSgxMzYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjUzQzogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU1MDogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MTog cmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MjogcmV0dXJuKChD SEFSKSgxNjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MzogcmV0dXJuKChDSEFSKSgxNjQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU1NTogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU1NjogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1 NzogcmV0dXJuKChDSEFSKSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ODogcmV0dXJu KChDSEFSKSgxNjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1OTogcmV0dXJuKChDSEFSKSgx NzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1QTogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU1QjogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU1QzogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU1RDogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1RTogcmV0 dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1RjogcmV0dXJuKChDSEFS KSgxNzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgxNzcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU2MTogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU2MjogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NDog cmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NTogcmV0dXJuKChD SEFSKSgxODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgxODQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU2ODogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2 QTogcmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2QjogcmV0dXJu KChDSEFSKSgxODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2QzogcmV0dXJuKChDSEFSKSgx OTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU4QzogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MDogcmV0 dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFS KSgxNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNDUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU5MzogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjVBMDogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7CisgICAgICBkZWZh dWx0OiByZXR1cm4odHhfaWRlbnQoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEtPSTgtVSAoVWtyYWluZSkgKi8KKyNpZmRlZiBDS19B TlNJQwordHhfa29pOHUoVVNIT1JUIGMpCisjZWxzZQordHhfa29pOHUoYykgVVNIT1JUIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4YTApCisgICAgICByZXR1cm4o KENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHgwMEEwOiBy ZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEE5OiByZXR1cm4oKENI QVIpKDE5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEIwOiByZXR1cm4oKENIQVIpKDE1NiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEIyOiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMEI3OiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMEY3OiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDAx OiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDA0OiByZXR1cm4o KENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDA2OiByZXR1cm4oKENIQVIpKDE4 MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDA3OiByZXR1cm4oKENIQVIpKDE4MyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDEwOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDExOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDEyOiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEzOiByZXR1 cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE0OiByZXR1cm4oKENIQVIp KDIyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDE3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDE4OiByZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE5OiBy ZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFBOiByZXR1cm4oKENI QVIpKDIzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFCOiByZXR1cm4oKENIQVIpKDIzNiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFDOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDFEOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDFFOiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFG OiByZXR1cm4oKENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIwOiByZXR1cm4o KENIQVIpKDI0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIxOiByZXR1cm4oKENIQVIpKDI0 MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIyOiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDIzOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDI0OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDI1OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI2OiByZXR1 cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI3OiByZXR1cm4oKENIQVIp KDI1NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI4OiByZXR1cm4oKENIQVIpKDI1MSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI5OiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDJBOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDJCOiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJDOiBy ZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJEOiByZXR1cm4oKENI QVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJFOiByZXR1cm4oKENIQVIpKDIyNCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJGOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDMwOiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDMxOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMy OiByZXR1cm4oKENIQVIpKDIxNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMzOiByZXR1cm4o KENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4oKENIQVIpKDE5 NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM1OiByZXR1cm4oKENIQVIpKDE5NyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDM2OiByZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDM3OiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDM4OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM5OiByZXR1 cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNBOiByZXR1cm4oKENIQVIp KDIwMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNCOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNDOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDNEOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDNFOiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNGOiBy ZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQwOiByZXR1cm4oKENI QVIpKDIxMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQxOiByZXR1cm4oKENIQVIpKDIxMSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQyOiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDQ0OiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ1 OiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ2OiByZXR1cm4o KENIQVIpKDE5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ3OiByZXR1cm4oKENIQVIpKDIy MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDQ5OiByZXR1cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDRBOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDRCOiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRDOiByZXR1 cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDREOiByZXR1cm4oKENIQVIp KDIyMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRFOiByZXR1cm4oKENIQVIpKDE5MiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRGOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDUxOiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDU0OiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDU2OiBy ZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDU3OiByZXR1cm4oKENI QVIpKDE2NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDkwOiByZXR1cm4oKENIQVIpKDE4OSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDkxOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMjE5OiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMjFBOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjQ4 OiByZXR1cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4o KENIQVIpKDE1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDE1 MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMzIwOiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMzIxOiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTAyOiByZXR1cm4oKENIQVIpKDEyOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTBDOiByZXR1 cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIp KDEzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDEzMiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDEzMyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTFDOiByZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTI0OiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTJDOiBy ZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENI QVIpKDEzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTNDOiByZXR1cm4oKENIQVIpKDEzOCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTUyOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU0 OiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU3OiByZXR1cm4o KENIQVIpKDE2OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU4OiByZXR1cm4oKENIQVIpKDE2 OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU5OiByZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTVBOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTVCOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTVEOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVFOiByZXR1 cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVGOiByZXR1cm4oKENIQVIp KDE3NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYxOiByZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTY2OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY3OiBy ZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY4OiByZXR1cm4oKENI QVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oKENIQVIpKDE4NyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZBOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTZDOiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg0 OiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4o KENIQVIpKDE0MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNThDOiByZXR1cm4oKENIQVIpKDE0 MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDE0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTkzOiByZXR1cm4oKENIQVIpKDE0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNUEwOiByZXR1 cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9pZGVudChj KSk7CisgICAgfQorfQorCisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBERUMgTUNTICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2RlY21jcyhVU0hPUlQgYykKKyNl bHNlCit0eF9kZWNtY3MoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBpZiAoYyA8IDB4YTApCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dp dGNoKGMpIHsKKyAgICAgIGNhc2UgMHgwMGE2OgorICAgICAgY2FzZSAweDAwYTg6CisgICAgICBj YXNlIDB4MDBhYzoKKyAgICAgIGNhc2UgMHgwMGFlOgorICAgICAgY2FzZSAweDAwYWY6CisgICAg ICBjYXNlIDB4MDBiNDoKKyAgICAgIGNhc2UgMHgwMGI4OgorICAgICAgY2FzZSAweDAwYmU6Cisg ICAgICBjYXNlIDB4MDBkMDoKKyAgICAgIGNhc2UgMHgwMGRlOgorICAgICAgY2FzZSAweDAwZjA6 CisgICAgICBjYXNlIDB4MDBmZToKKyAgICAgIGNhc2UgMHgwMGZmOgorICAgICAgICByZXR1cm4o LTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSBhbGwgdW5kZWZpbmVkIGluIERF Q01DUyAqLworICAgICAgY2FzZSAweDAwYTQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnJl bmN5IHNpZ24gKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKTB4YTgpOworICAgICAgY2FzZSAweDAx NTI6ICAgICAgICAgICAgICAgICAgICAgIC8qIE9FICovCisgICAgICAgIHJldHVybigoQ0hBUikw eGQ3KTsKKyAgICAgIGNhc2UgMHgwMTUzOiAgICAgICAgICAgICAgICAgICAgICAvKiBvZSAqLwor ICAgICAgICByZXR1cm4oKENIQVIpMHhmNyk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfaWRl bnQoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5lWFRTVEVQICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X25leHRzdGVwKFVTSE9SVCBj KQorI2Vsc2UKK3R4X25leHRzdGVwKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisgICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdy YXBoaWNzICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChj KSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBhMjogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMzogcmV0 dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFS KSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNTogcmV0dXJuKChDSEFSKSgxNjUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBhODogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhOTog cmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYTogcmV0dXJuKChD SEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzEg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBi MTogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMjogcmV0dXJu KChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMzogcmV0dXJuKChDSEFSKSgy MDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBiNzogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiODogcmV0 dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiOTogcmV0dXJuKChDSEFS KSgxOTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFSKSgyMzUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBiYzogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBiZDogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZTog cmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChD SEFSKSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSgxMjkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBjMzogcmV0dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBj NDogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJu KChDSEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgy MjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBjYTogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYjogcmV0 dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYzogcmV0dXJuKChDSEFS KSgxNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgxNDEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBkMDogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMTog cmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChD SEFSKSgxNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSgxNDcg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNDogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBk NzogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkODogcmV0dXJu KChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkOTogcmV0dXJuKChDSEFSKSgx NTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBkZDogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkZTogcmV0 dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkZjogcmV0dXJuKChDSEFS KSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgyMTMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBlMzogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNDog cmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNTogcmV0dXJuKChD SEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKSgyNDEg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBl YTogcmV0dXJuKChDSEFSKSgyMjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYjogcmV0dXJu KChDSEFSKSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKSgy MjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBmMDogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMTogcmV0 dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFS KSgyMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgyMzcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBmNjogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNzog cmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChD SEFSKSgyNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgyNDIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBm ZDogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZTogcmV0dXJu KChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChDSEFSKSgy NTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEzMTogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDE0MTogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDE0MjogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDE1MjogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1MzogcmV0 dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFS KSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJjNjogcmV0dXJuKChDSEFSKSgxOTUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDJjNzogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDJjYjogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDJkODogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkOTog cmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkYTogcmV0dXJuKChD SEFSKSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkYjogcmV0dXJuKChDSEFSKSgyMDYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkYzogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDJkZDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjAxMzogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAx NDogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxOTogcmV0dXJu KChDSEFSKSgxNjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYTogcmV0dXJuKChDSEFSKSgx ODQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYzogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjAxZDogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjAxZTogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjAyMDogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMTogcmV0 dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMjogcmV0dXJuKChDSEFS KSgxODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyNjogcmV0dXJuKChDSEFSKSgxODggJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjAzMDogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjAzOTogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAzYTogcmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjA0NDog cmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4ZmIwMTogcmV0dXJuKChD SEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4ZmIwMjogcmV0dXJuKChDSEFSKSgxNzUg JiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7CisgICAgfQorfQor CitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREcgSW50ZXJuYXRp b25hbCAqLworI2lmZGVmIENLX0FOU0lDCit0eF9kZ2koVVNIT1JUIGMpCisjZWxzZQordHhfZGdp KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweGEw KQorICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaChjKSB7CisgICAg ICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBhMTogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMjogcmV0 dXJuKChDSEFSKSgxNjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFS KSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKSgxNjYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhNTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBhODogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhOTog cmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYTogcmV0dXJuKChD SEFSKSgxNjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzcg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBi MTogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMjogcmV0dXJu KChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMzogcmV0dXJuKChDSEFSKSgx NjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBiNzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiODogcmV0 dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFS KSgxNzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgxNzYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBiZDogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBjMDogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMTog cmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChD SEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMzogcmV0dXJuKChDSEFSKSgxOTYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBj NzogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjODogcmV0dXJu KChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgy MDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBjYzogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBjZDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZTogcmV0 dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFS KSgyMDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKSgyMDggJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBkNDogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNTog cmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChD SEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkODogcmV0dXJuKChDSEFSKSgyMTQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkOTogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBk YzogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkZjogcmV0dXJu KChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgy MjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBlNDogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNTogcmV0 dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFS KSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgyMzEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBlYTogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYjog cmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChD SEFSKSgyMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgyMzYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBmMTogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBm MjogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJu KChDSEFSKSgyNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgy NDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBmOTogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0 dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFS KSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKSgyNTEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDE1MzogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDE3ODogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE5Mjog cmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDI3NjogcmV0dXJuKChD SEFSKSgyMTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMTogcmV0dXJuKChDSEFSKSgxNzUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjEyMjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2 NTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJu KChDSEFSKSgyNTUgJiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7 CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TWFjaW50b3NoIExhdGluICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X21hY2xhdGluKFVTSE9SVCBj KQorI2Vsc2UKK3R4X21hY2xhdGluKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7CisgICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdy YXBoaWNzICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChj KSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBhMTogcmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBhMjogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMzogcmV0 dXJuKChDSEFSKSgxNjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFS KSgyMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNTogcmV0dXJuKChDSEFSKSgxODAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBhOTogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYTog cmV0dXJuKChDSEFSKSgxODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChD SEFSKSgxOTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxOTQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNjggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBhZjogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBi MTogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNDogcmV0dXJu KChDSEFSKSgxNzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgx ODEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiODogcmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBiYTogcmV0dXJuKChDSEFSKSgxODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYjogcmV0 dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFS KSgxOTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSgyMDMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBjMzogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNDog cmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChD SEFSKSgxMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgxNzQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBjOTogcmV0dXJuKChDSEFSKSgxMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBj YTogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYjogcmV0dXJu KChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYzogcmV0dXJuKChDSEFSKSgy MzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBkMDogcmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMTogcmV0 dXJuKChDSEFSKSgxMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChDSEFS KSgyNDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSgyMzggJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBkNDogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBkNjogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkODog cmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkOTogcmV0dXJuKChD SEFSKSgyNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgyNDIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBkYzogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBkZDogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBk ZTogcmV0dXJuKChDSEFSKSgyMjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkZjogcmV0dXJu KChDSEFSKSgxNjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgx MzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBlNDogcmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNTogcmV0 dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFS KSgxOTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgxNDEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBlODogcmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBlOTogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBlYTogcmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYjog cmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChD SEFSKSgxNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgxNDYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBlZjogcmV0dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBmMDogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBm MTogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMjogcmV0dXJu KChDSEFSKSgxNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgx NTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBmNjogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBmNzogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmODogcmV0 dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFS KSgxNTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNTYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBmZDogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZTog cmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChD SEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEzMTogcmV0dXJuKChDSEFSKSgyNDUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1MjogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDE1MzogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDE3ODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE5 MjogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJjNjogcmV0dXJu KChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJjNzogcmV0dXJuKChDSEFSKSgy NTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkODogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDJkOTogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDJkYTogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDJkYjogcmV0dXJuKChDSEFSKSgyNTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkYzogcmV0 dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkZDogcmV0dXJuKChDSEFS KSgyNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjMDogcmV0dXJuKChDSEFSKSgxODUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjAxMzogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjAxNDogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAxODogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxOTog cmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYTogcmV0dXJuKChD SEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYzogcmV0dXJuKChDSEFSKSgyMTAg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxZDogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjAxZTogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjAyMjogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAy NjogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAzMDogcmV0dXJu KChDSEFSKSgyMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjA0NDogcmV0dXJuKChDSEFSKSgy MTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjEyMjogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjEyNjogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjIwMjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjIwNjogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIwZjogcmV0 dXJuKChDSEFSKSgxODQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIxMTogcmV0dXJuKChDSEFS KSgxODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIxYTogcmV0dXJuKChDSEFSKSgxOTUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjIxZTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjIyYjogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjI0ODogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2MDog cmV0dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChD SEFSKSgxNzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgxNzkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjVjYTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4ZjhmZjogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBk ZWZhdWx0OiByZXR1cm4odHhfcHVuYyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXBwbGUgUXVpY2tEcmF3IC8gQ1AxMDAwMCAqLwor I2lmZGVmIENLX0FOU0lDCit0eF9xdWlja2RyYXcoVVNIT1JUIGMpCisjZWxzZQordHhfcXVpY2tk cmF3KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAw eDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCisgICAgICBy ZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4 MDBhMDogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMTogcmV0 dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFS KSgxNjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNjMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhNTogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBhNzogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhODog cmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhOTogcmV0dXJuKChD SEFSKSgxNjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYTogcmV0dXJuKChDSEFSKSgxODcg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSgxNjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBh ZjogcmV0dXJuKChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMDogcmV0dXJu KChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKSgx NzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKSgxNzEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiNTogcmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBiNzogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiODogcmV0 dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFS KSgxODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiYjogcmV0dXJuKChDSEFSKSgyMDAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBiZjogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBjMTogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMjog cmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMzogcmV0dXJuKChD SEFSKSgyMDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFSKSgxMjgg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKSgxMjkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgxMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBj ODogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjOTogcmV0dXJu KChDSEFSKSgxMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYTogcmV0dXJuKChDSEFSKSgy MzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYjogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjYzogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBjZTogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZjogcmV0 dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAzOTogcmV0dXJuKChDSEFS KSgyMjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMTogcmV0dXJuKChDSEFSKSgxMzIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBkNDogcmV0dXJuKChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNTog cmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChD SEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkODogcmV0dXJuKChDSEFSKSgxNzUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkOTogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBk YzogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMDogcmV0dXJu KChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4ZmIwMTogcmV0dXJuKChDSEFSKSgy MjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkZjogcmV0dXJuKChDSEFSKSgxNjcgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBlMDogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBlMTogcmV0dXJuKChDSEFSKSgxMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBlMjogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMzogcmV0 dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNDogcmV0dXJuKChDSEFS KSgxMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlNTogcmV0dXJuKChDSEFSKSgxNDAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBlNjogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBlNzogcmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBlODogcmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlOTog cmV0dXJuKChDSEFSKSgxNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYTogcmV0dXJuKChD SEFSKSgxNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYjogcmV0dXJuKChDSEFSKSgxNDUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKSgxNDcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBlZDogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBlZTogcmV0dXJuKChDSEFSKSgxNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBl ZjogcmV0dXJuKChDSEFSKSgxNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAzYTogcmV0dXJu KChDSEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMTogcmV0dXJuKChDSEFSKSgx NTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmMjogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBmMzogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBmNDogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBmNTogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNjogcmV0 dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNzogcmV0dXJuKChDSEFS KSgyMTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmODogcmV0dXJuKChDSEFSKSgxOTEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBmOTogcmV0dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBmYTogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBmYjogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmYzog cmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMTogcmV0dXJuKChD SEFSKSgyMjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4ZmIwMjogcmV0dXJuKChDSEFSKSgyMjMg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDEzMTogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDE1MjogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1 MzogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3ODogcmV0dXJu KChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFSKSgx OTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJjNjogcmV0dXJuKChDSEFSKSgyNDYgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDJjNzogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDJkODogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDJkOTogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkYTogcmV0 dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkYjogcmV0dXJuKChDSEFS KSgyNTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJkYzogcmV0dXJuKChDSEFSKSgyNDcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDJkZDogcmV0dXJuKChDSEFSKSgyNTMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDNjMDogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAxMzogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxNDog cmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxODogcmV0dXJuKChD SEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxOTogcmV0dXJuKChDSEFSKSgyMTMg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYTogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjAxYzogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjAxZDogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAx ZTogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMjogcmV0dXJu KChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyNjogcmV0dXJuKChDSEFSKSgy MDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAzMDogcmV0dXJuKChDSEFSKSgyMjggJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjA0NDogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjEyMjogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDNhOTogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIwMjogcmV0 dXJuKChDSEFSKSgxODIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIwNjogcmV0dXJuKChDSEFS KSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIwZjogcmV0dXJuKChDSEFSKSgxODQgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjIxMTogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjIxYTogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjIxZTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIyYjog cmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI0ODogcmV0dXJuKChD SEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2MDogcmV0dXJuKChDSEFSKSgxNzMg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjI2NTogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjVjYTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4Zjhm ZjogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhf cHVuYyhjKSk7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSFAgUm9tYW4tOCAqLworI2lmZGVmIENLX0FOU0lDCit0eF9ocHJvbWFuOChVU0hP UlQgYykKKyNlbHNlCit0eF9ocHJvbWFuOChjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeworICAgIGlmIChjIDwgMHhhMCkKKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYp KTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMTYw ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikp OworICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTY4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw YTQ6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTU6IHJldHVy bigoQ0hBUikoMTgxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUiko MTg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikoMTg5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYTk6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hBUikoMTY5ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYWI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWM6IHJl dHVybigoQ0hBUikoMTYxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hB UikoMTc0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMTg4ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYjE6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYjI6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYjM6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjQ6 IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjU6IHJldHVybigo Q0hBUikoMTYzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMTc4 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwYjg6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwYmE6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOworICAgICAgY2FzZSAweDAw YmI6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmQ6IHJldHVy bigoQ0hBUikoMTYyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmY6IHJldHVybigoQ0hBUiko MTcyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hBUikoMTkzICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYzM6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzQ6IHJl dHVybigoQ0hBUikoMTk1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hB UikoMTk3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzY6IHJldHVybigoQ0hBUikoMTk4ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYzk6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2E6 IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2I6IHJldHVybigo Q0hBUikoMjAzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2M6IHJldHVybigoQ0hBUikoMjA1 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZDE6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDI6IHJldHVy bigoQ0hBUikoMjEwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hBUiko MjA5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDQ6IHJldHVybigoQ0hBUikoMjExICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZDg6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDk6IHJl dHVybigoQ0hBUikoMjE3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hB UikoMjE2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGI6IHJldHVybigoQ0hBUikoMjE4ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZGY6IHJldHVybigoQ0hBUikoMjUyICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZTA6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTE6 IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTI6IHJldHVybigo Q0hBUikoMjI2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTM6IHJldHVybigoQ0hBUikoMjI4 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZTU6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZTY6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZTc6IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTg6IHJldHVy bigoQ0hBUikoMjMzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTk6IHJldHVybigoQ0hBUiko MjMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWE6IHJldHVybigoQ0hBUikoMjM0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hBUikoMjM1ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZWM6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZWQ6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWU6IHJl dHVybigoQ0hBUikoMjM4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hB UikoMjM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjE6IHJldHVybigoQ0hBUikoMjQwICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjU6 IHJldHVybigoQ0hBUikoMjQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjY6IHJldHVybigo Q0hBUikoMjQ0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjg6IHJldHVybigoQ0hBUikoMjQ2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZmM6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmY6IHJldHVy bigoQ0hBUikoMjUzICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNTM6IHJldHVybigoQ0hBUiko MjQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNzg6IHJldHVybigoQ0hBUikoMjIxICYgMHhm ZikpOworICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOworICAg ICAgY2FzZSAweDAyNzY6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOworICAgICAgY2FzZSAw eDIwMjE6IHJldHVybigoQ0hBUikoMTc1ICYgMHhmZikpOworICAgICAgY2FzZSAweDIxMjI6IHJl dHVybigoQ0hBUikoMTc5ICYgMHhmZikpOworICAgICAgY2FzZSAweDIxOTE6IHJldHVybigoQ0hB UikoMTkxICYgMHhmZikpOworICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigoQ0hBUikoMTgzICYg MHhmZikpOworICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOworICAgICAgZGVm YXVsdDogcmV0dXJuKHR4X3B1bmMoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIENvZGUgUGFnZSA0MzcgKi8KKyNpZmRlZiBDS19B TlNJQwordHhfY3A0MzcoVVNIT1JUIGMpCisjZWxzZQordHhfY3A0MzcoYykgVVNIT1JUIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAg ICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4 ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIp KDI1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGE0OiByZXR1cm4oKENIQVIpKDE1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTU6IHJl dHVybigoQ0hBUikoMTU3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTY6IHJldHVybigoQ0hB UikoMTI0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikoMjEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgzNCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDY3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYWE6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWI6IHJl dHVybigoQ0hBUikoMTc0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hB UikoMTcwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWQ6IHJldHVybigoQ0hBUikoNDUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhZTogcmV0dXJuKChDSEFSKSg4NCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGFmOiByZXR1cm4oKENIQVIpKDIyICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYjA6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjE6IHJl dHVybigoQ0hBUikoMjQxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjI6IHJldHVybigoQ0hB UikoMjUzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjM6IHJldHVybigoQ0hBUikoNTEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBiNDogcmV0dXJuKChDSEFSKSgzOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGI2OiByZXR1cm4oKENIQVIpKDIwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjc6IHJl dHVybigoQ0hBUikoMjUwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjg6IHJldHVybigoQ0hB UikoNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiOTogcmV0dXJuKChDSEFSKSg0OSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGJjOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJkOiBy ZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJlOiByZXR1cm4oKENI QVIpKDE5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmY6IHJldHVybigoQ0hBUikoMTY4ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hBUikoNjUgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSg2NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGMyOiByZXR1cm4oKENIQVIpKDY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzM6IHJl dHVybigoQ0hBUikoNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNDogcmV0dXJuKChDSEFS KSgxNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNTogcmV0dXJuKChDSEFSKSgxNDMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgxNDYgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBjNzogcmV0dXJuKChDSEFSKSgxMjggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBjODogcmV0dXJuKChDSEFSKSg2OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM5OiBy ZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNhOiByZXR1cm4oKENI QVIpKDY5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2I6IHJldHVybigoQ0hBUikoNjkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBjYzogcmV0dXJuKChDSEFSKSg3MyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIpKDczICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwY2U6IHJldHVybigoQ0hBUikoNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZjogcmV0 dXJuKChDSEFSKSg3MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQwOiByZXR1cm4oKENIQVIp KDE5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDE6IHJldHVybigoQ0hBUikoMTY1ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZDI6IHJldHVybigoQ0hBUikoNzkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBkMzogcmV0dXJuKChDSEFSKSg3OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGQ0OiByZXR1cm4oKENIQVIpKDc5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDU6IHJldHVy bigoQ0hBUikoNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNjogcmV0dXJuKChDSEFSKSgx NTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNzogcmV0dXJuKChDSEFSKSgxMjAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBkODogcmV0dXJuKChDSEFSKSg3OSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGQ5OiByZXR1cm4oKENIQVIpKDg1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZGE6IHJldHVybigoQ0hBUikoODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYjogcmV0dXJu KChDSEFSKSg4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDE1 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRkOiByZXR1cm4oKENIQVIpKDg5ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZGU6IHJldHVybigoQ0hBUikoMTkgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBkZjogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBl MDogcmV0dXJuKChDSEFSKSgxMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMTogcmV0dXJu KChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMjogcmV0dXJuKChDSEFSKSgx MzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBlMzogcmV0dXJuKChDSEFSKSg5NyAmIDB4ZmYp KTsgLyogYS10aWxkZSAtPiBhIChub3QgMTAxID0gZSkgKi8KKyAgICAgIGNhc2UgMHgwMGU0OiBy ZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU1OiByZXR1cm4oKENI QVIpKDEzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDE0NSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVh OiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGViOiByZXR1cm4o KENIQVIpKDEzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4oKENIQVIpKDE0 MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGYwOiByZXR1cm4oKENIQVIpKDE5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjE6IHJldHVy bigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUiko MTQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMTYyICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikoMTExICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZjY6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjc6IHJl dHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjg6IHJldHVybigoQ0hB UikoMTExICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hBUikoMTUxICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZmM6IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmQ6 IHJldHVybigoQ0hBUikoMTIxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmU6IHJldHVybigo Q0hBUikoMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmZjogcmV0dXJuKChDSEFSKSgxNTIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKChDSEFSKSgxNTkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDM5MzogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDM5ODogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNh MzogcmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhNjogcmV0dXJu KChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhOTogcmV0dXJuKChDSEFSKSgy MzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiMTogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDNiNDogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDNiNTogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDNjMDogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjMzogcmV0 dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjNDogcmV0dXJuKChDSEFS KSgyMzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjNjogcmV0dXJuKChDSEFSKSgyMzcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjA3ZjogcmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjBhNzogcmV0dXJuKChDSEFSKSgxNTggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjIxOTogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIxYTog cmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIxZTogcmV0dXJuKChD SEFSKSgyMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIyOTogcmV0dXJuKChDSEFSKSgyMzkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI0ODogcmV0dXJuKChDSEFSKSgyNDcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjI2MTogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjI2NDogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2 NTogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjMxMDogcmV0dXJu KChDSEFSKSgxNjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjMyMDogcmV0dXJuKChDSEFSKSgy NDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjMyMTogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjUwMjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjUwYzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0 dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFS KSgxOTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjUyNDogcmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjUyYzogcmV0dXJuKChDSEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzNDog cmV0dXJuKChDSEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChD SEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU1MjogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU1MzogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1 NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NTogcmV0dXJu KChDSEFSKSgxODQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NjogcmV0dXJuKChDSEFSKSgx ODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NzogcmV0dXJuKChDSEFSKSgxODcgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU1ODogcmV0dXJuKChDSEFSKSgyMTIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU1OTogcmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU1YTogcmV0dXJuKChDSEFSKSgyMDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1YjogcmV0 dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1YzogcmV0dXJuKChDSEFS KSgxODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKSgxODggJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU1ZTogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU1ZjogcmV0dXJuKChDSEFSKSgxOTkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MTog cmV0dXJuKChDSEFSKSgxODEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MjogcmV0dXJuKChD SEFSKSgxODIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2NDogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU2NTogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2 NzogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2ODogcmV0dXJu KChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKSgy MDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2YTogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU2YjogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU2YzogcmV0dXJuKChDSEFSKSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU4MDogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4NDogcmV0 dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFS KSgyMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4YzogcmV0dXJuKChDSEFSKSgyMjEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU5MDogcmV0dXJuKChDSEFSKSgyMjIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5Mzog cmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChD SEFSKSgyNTQgJiAweGZmKSk7IC8qIEJsYWNrIHNxdWFyZSAqLworICAgICAgZGVmYXVsdDogcmV0 dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KKyAgICB9 Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXpvdmlh ICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X21hem92aWEoVVNIT1JUIGMpCisjZWxzZQordHhfbWF6 b3ZpYShjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwg MHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLworICAgICAg cmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAw eDAwZDM6IHJldHVybigoQ0hBUikweGEzICYgMHhmZik7ICAgLyogTyBhY3V0ZSAqLworICAgICAg Y2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikweGEyICYgMHhmZik7ICAgLyogTyBhY3V0ZSAqLwor ICAgICAgY2FzZSAweDAxMDQ6IHJldHVybigoQ0hBUikweDhmICYgMHhmZik7ICAgLyogQSBPZ29u ZWsgKi8KKyAgICAgIGNhc2UgMHgwMTA1OiByZXR1cm4oKENIQVIpMHg4NiAmIDB4ZmYpOyAgIC8q IGEgT2dvbmVrICovCisgICAgICBjYXNlIDB4MDEwNjogcmV0dXJuKChDSEFSKTB4OTUgJiAweGZm KTsgICAvKiBDIGFjdXRlICovCisgICAgICBjYXNlIDB4MDEwNzogcmV0dXJuKChDSEFSKTB4OGQg JiAweGZmKTsgICAvKiBjIGFjdXRlICovCisgICAgICBjYXNlIDB4MDExODogcmV0dXJuKChDSEFS KTB4OTAgJiAweGZmKTsgICAvKiBFIE9nb25layAqLworICAgICAgY2FzZSAweDAxMTk6IHJldHVy bigoQ0hBUikweDkxICYgMHhmZik7ICAgLyogRSBPZ29uZWsgKi8KKyAgICAgIGNhc2UgMHgwMTQx OiByZXR1cm4oKENIQVIpMHg5YyAmIDB4ZmYpOyAgIC8qIEwgc3Ryb2tlICovCisgICAgICBjYXNl IDB4MDE0MjogcmV0dXJuKChDSEFSKTB4OTIgJiAweGZmKTsgICAvKiBMIHN0cm9rZSAqLworICAg ICAgY2FzZSAweDAxNDM6IHJldHVybigoQ0hBUikweGE1ICYgMHhmZik7ICAgLyogTiBhY3V0ZSAq LworICAgICAgY2FzZSAweDAxNDQ6IHJldHVybigoQ0hBUikweGE0ICYgMHhmZik7ICAgLyogTiBh Y3V0ZSAqLworICAgICAgY2FzZSAweDAxNWE6IHJldHVybigoQ0hBUikweDk4ICYgMHhmZik7ICAg LyogUyBhY3V0ZSAqLworICAgICAgY2FzZSAweDAxNWI6IHJldHVybigoQ0hBUikweDllICYgMHhm Zik7ICAgLyogUyBhY3V0ZSAqLworICAgICAgY2FzZSAweDAxNzk6IHJldHVybigoQ0hBUikweGEw ICYgMHhmZik7ICAgLyogWiBhY3V0ZSAqLworICAgICAgY2FzZSAweDAxN2E6IHJldHVybigoQ0hB UikweGE2ICYgMHhmZik7ICAgLyogWiBhY3V0ZSAqLworICAgICAgY2FzZSAweDAxN2I6IHJldHVy bigoQ0hBUikweGExICYgMHhmZik7ICAgLyogWiBkb3QgYWJvdmUgKi8KKyAgICAgIGNhc2UgMHgw MTdjOiByZXR1cm4oKENIQVIpMHhhNyAmIDB4ZmYpOyAgIC8qIFogZG90IGFib3ZlICovCisgICAg ICBkZWZhdWx0OiByZXR1cm4odHhfY3A0MzcoYykpOworICAgIH0KK30KKworaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBDIENvZGUgUGFnZSA4NTAgKi8KKyNpZmRl ZiBDS19BTlNJQwordHhfY3A4NTAoVVNIT1JUIGMpCisjZWxzZQordHhfY3A4NTAoYykgVVNIT1JU IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4ODApICAgICAgICAg ICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KKyAgICAgIHJldHVybigoQ0hBUiko YyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4o KENIQVIpKDI1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE3 MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpKDE4OSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGEzOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGE0OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGE1OiByZXR1cm4oKENIQVIpKDE5MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE2OiByZXR1 cm4oKENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE3OiByZXR1cm4oKENIQVIp KDI0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE4OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE5OiByZXR1cm4oKENIQVIpKDE4NCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGFiOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFjOiBy ZXR1cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFkOiByZXR1cm4oKENI QVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFlOiByZXR1cm4oKENIQVIpKDE2OSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFmOiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDI0MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIy OiByZXR1cm4oKENIQVIpKDI1MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIzOiByZXR1cm4o KENIQVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI0OiByZXR1cm4oKENIQVIpKDIz OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGI2OiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGI4OiByZXR1cm4oKENIQVIpKDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI5OiByZXR1 cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIp KDE2NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJjOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIpKDE3MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGJlOiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJmOiBy ZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMwOiByZXR1cm4oKENI QVIpKDE4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMxOiByZXR1cm4oKENIQVIpKDE4MSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGMyOiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGMzOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGM0OiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM1 OiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM2OiByZXR1cm4o KENIQVIpKDE0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM3OiByZXR1cm4oKENIQVIpKDEy OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGM4OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGM5OiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGNhOiByZXR1cm4oKENIQVIpKDIxMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGNiOiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNjOiByZXR1 cm4oKENIQVIpKDIyMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNkOiByZXR1cm4oKENIQVIp KDIxNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNlOiByZXR1cm4oKENIQVIpKDIxNSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGNmOiByZXR1cm4oKENIQVIpKDIxNiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGQwOiByZXR1cm4oKENIQVIpKDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGQxOiByZXR1cm4oKENIQVIpKDE2NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQyOiBy ZXR1cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENI QVIpKDIyNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ0OiByZXR1cm4oKENIQVIpKDIyNiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ1OiByZXR1cm4oKENIQVIpKDIyOSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGQ2OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGQ3OiByZXR1cm4oKENIQVIpKDE1OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ4 OiByZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQ5OiByZXR1cm4o KENIQVIpKDIzNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRhOiByZXR1cm4oKENIQVIpKDIz MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRiOiByZXR1cm4oKENIQVIpKDIzNCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGRjOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGRkOiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGRlOiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGRmOiByZXR1 cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUwOiByZXR1cm4oKENIQVIp KDEzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUyOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGUzOiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGU0OiByZXR1cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU1OiBy ZXR1cm4oKENIQVIpKDEzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU2OiByZXR1cm4oKENI QVIpKDE0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU3OiByZXR1cm4oKENIQVIpKDEzNSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGU4OiByZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGU5OiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGVhOiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVi OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVjOiByZXR1cm4o KENIQVIpKDE0MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDE2 MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGVlOiByZXR1cm4oKENIQVIpKDE0MCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGVmOiByZXR1cm4oKENIQVIpKDEzOSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGYwOiByZXR1cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MGYxOiByZXR1cm4oKENIQVIpKDE2NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYyOiByZXR1 cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYzOiByZXR1cm4oKENIQVIp KDE2MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY0OiByZXR1cm4oKENIQVIpKDE0NyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY1OiByZXR1cm4oKENIQVIpKDIyOCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGY2OiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGY3OiByZXR1cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY4OiBy ZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY5OiByZXR1cm4oKENI QVIpKDE1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZhOiByZXR1cm4oKENIQVIpKDE2MyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZiOiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGZjOiByZXR1cm4oKENIQVIpKDEyOSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGZkOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZl OiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZmOiByZXR1cm4o KENIQVIpKDE1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpKDIx MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIpKDE1OSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMDE3OiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpKDE5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTAyOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTBjOiByZXR1 cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIp KDE5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTFjOiByZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTI0OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTJjOiBy ZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENI QVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTU0OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU3 OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVhOiByZXR1cm4o KENIQVIpKDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVkOiByZXR1cm4oKENIQVIpKDE4 OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIwMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTY5OiByZXR1cm4oKENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZjOiByZXR1 cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIp KDIyMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg0OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTkxOiByZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTkyOiByZXR1cm4oKENIQVIpKDE3NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkzOiBy ZXR1cm4oKENIQVIpKDE3OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENI QVIpKDI1NCAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAg ICAvKiBGb3IgYm94IGNoYXJhY3RlcnMgZXRjICovCisgICAgfQorfQorCitpbnQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDg1OCAqLworI2lmZGVm IENLX0FOU0lDCit0eF9jcDg1OChVU0hPUlQgYykKKyNlbHNlCit0eF9jcDg1OChjKSBVU0hPUlQg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAg ICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLworICAgICAgcmV0dXJuKChDSEFSKShj ICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDAwYTA6IHJldHVybigo Q0hBUikoMjU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTE6IHJldHVybigoQ0hBUikoMTcz ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTI6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw YTU6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTY6IHJldHVy bigoQ0hBUikoMjIxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUiko MjQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYTk6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYWE6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYWI6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWM6IHJl dHVybigoQ0hBUikoMTcwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWQ6IHJldHVybigoQ0hB UikoMjQwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikoMTY5ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYWY6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYjE6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjI6 IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjM6IHJldHVybigo Q0hBUikoMjUyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjQ6IHJldHVybigoQ0hBUikoMjM5 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjU6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikp OworICAgICAgY2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwYjc6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOworICAgICAgY2FzZSAweDAw Yjg6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjk6IHJldHVy bigoQ0hBUikoMjUxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmE6IHJldHVybigoQ0hBUiko MTY3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc1ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYmM6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYmQ6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYmU6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmY6IHJl dHVybigoQ0hBUikoMTY4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzA6IHJldHVybigoQ0hB UikoMTgzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoMTgxICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYzM6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYzQ6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzU6 IHJldHVybigoQ0hBUikoMTQzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzY6IHJldHVybigo Q0hBUikoMTQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzc6IHJldHVybigoQ0hBUikoMTI4 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzg6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikp OworICAgICAgY2FzZSAweDAwYzk6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwY2E6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOworICAgICAgY2FzZSAweDAw Y2I6IHJldHVybigoQ0hBUikoMjExICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2M6IHJldHVy bigoQ0hBUikoMjIyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUiko MjE0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikoMjE1ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwY2Y6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZDA6IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZDE6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDI6IHJl dHVybigoQ0hBUikoMjI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDM6IHJldHVybigoQ0hB UikoMjI0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDQ6IHJldHVybigoQ0hBUikoMjI2ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZDU6IHJldHVybigoQ0hBUikoMjI5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZDY6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZDc6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDg6 IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDk6IHJldHVybigo Q0hBUikoMjM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikoMjMz ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGI6IHJldHVybigoQ0hBUikoMjM0ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZGQ6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZGU6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGY6IHJldHVy bigoQ0hBUikoMjI1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hBUiko MTMzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTE6IHJldHVybigoQ0hBUikoMTYwICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikoMTMxICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZTM6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZTQ6IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTU6IHJl dHVybigoQ0hBUikoMTM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hB UikoMTQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMTM1ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZWE6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWI6 IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWM6IHJldHVybigo Q0hBUikoMTQxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigoQ0hBUikoMTYx ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWU6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZjA6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZjE6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjI6IHJldHVy bigoQ0hBUikoMTQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUiko MTYyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZjU6IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZjc6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjg6IHJl dHVybigoQ0hBUikoMTU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hB UikoMTUxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMTYzICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikoMTUwICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZmM6IHJldHVybigoQ0hBUikoMTI5ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZmQ6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmU6 IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmY6IHJldHVybigo Q0hBUikoMTUyICYgMHhmZikpOworICAgICAgY2FzZSAweDIwYWM6IHJldHVybigoQ0hBUikoMjEz ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxOTI6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikp OworICAgICAgY2FzZSAweDIwMTc6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 MDI6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MGM6IHJldHVy bigoQ0hBUikoMjE4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUiko MTkxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTkyICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1MjQ6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MmM6IHJl dHVybigoQ0hBUikoMTk0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hB UikoMTkzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3ICYg MHhmZikpOworICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTc6 IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWE6IHJldHVybigo Q0hBUikoMjAwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWQ6IHJldHVybigoQ0hBUikoMTg4 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 Njk6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NmM6IHJldHVy bigoQ0hBUikoMjA2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hBUiko MjIzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikoMjIwICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1OTI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTM6IHJl dHVybigoQ0hBUikoMTc4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hB UikoMjU0ICYgMHhmZikpOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAg IC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KKyAgICB9Cit9CisKK2ludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3dzIENvZGUgUGFnZSAxMjUwIChMYXRp bi0yKSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9jcDEyNTAoVVNIT1JUIGMpCisjZWxzZQordHhf Y3AxMjUwKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMg PCAweDgwIHx8IChjID4gMHhiZiAmJiBjIDw9IDB4ZmYpKSAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8K KyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAg IGNhc2UgMHgwMDJEOiByZXR1cm4oKENIQVIpKDB4YWQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBBMDogcmV0dXJuKChDSEFSKSgweGEwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTQ6IHJl dHVybigoQ0hBUikoMHhhNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEE2OiByZXR1cm4oKENI QVIpKDB4YTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBNzogcmV0dXJuKChDSEFSKSgweGE3 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTg6IHJldHVybigoQ0hBUikoMHhhOCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMEE5OiByZXR1cm4oKENIQVIpKDB4YTkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBBQjogcmV0dXJuKChDSEFSKSgweGFiICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwQUM6IHJldHVybigoQ0hBUikoMHhhYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFFOiBy ZXR1cm4oKENIQVIpKDB4YWUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCMDogcmV0dXJuKChD SEFSKSgweGIwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjE6IHJldHVybigoQ0hBUikoMHhi MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI0OiByZXR1cm4oKENIQVIpKDB4YjQgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBCNTogcmV0dXJuKChDSEFSKSgweGI1ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwQjY6IHJldHVybigoQ0hBUikoMHhiNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMEI3OiByZXR1cm4oKENIQVIpKDB4YjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCODog cmV0dXJuKChDSEFSKSgweGI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQkI6IHJldHVybigo Q0hBUikoMHhiYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTA0OiByZXR1cm4oKENIQVIpKDB4 YTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEwNTogcmV0dXJuKChDSEFSKSgweGI5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAxM0Q6IHJldHVybigoQ0hBUikoMHhiYyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMTNFOiByZXR1cm4oKENIQVIpKDB4YmUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDE0MTogcmV0dXJuKChDSEFSKSgweGEzICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNDI6 IHJldHVybigoQ0hBUikoMHhiMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTVBOiByZXR1cm4o KENIQVIpKDB4OGMgJiAweGZmKSk7IC8qIFMgYWN1dGUgKi8KKyAgICAgIGNhc2UgMHgwMTVFOiBy ZXR1cm4oKENIQVIpKDB4YWEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1RjogcmV0dXJuKChD SEFSKSgweGJhICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNWI6IHJldHVybigoQ0hBUikoMHg5 YyAmIDB4ZmYpKTsgLyogcyBhY3V0ZSAqLworICAgICAgY2FzZSAweDAxNjQ6IHJldHVybigoQ0hB UikoMHg4ZCAmIDB4ZmYpKTsgLyogVCBjYXJvbiAqLworICAgICAgY2FzZSAweDAxNjU6IHJldHVy bigoQ0hBUikoMHg5ZCAmIDB4ZmYpKTsgLyogdCBjYXJvbiAqLworICAgICAgY2FzZSAweDAxNzM6 IHJldHVybigoQ0hBUikoMHg5ZSAmIDB4ZmYpKTsgLyogeiBjYXJvbiAqLworICAgICAgY2FzZSAw eDAxNzk6IHJldHVybigoQ0hBUikoMHg4ZiAmIDB4ZmYpKTsgLyogWiBhY3V0ZSAqLworICAgICAg Y2FzZSAweDAxN0E6IHJldHVybigoQ0hBUikoMHg5ZiAmIDB4ZmYpKTsgLyogeiBhY3V0ZSAqLwor ICAgICAgY2FzZSAweDAxN0I6IHJldHVybigoQ0hBUikoMHhhZiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMTdDOiByZXR1cm4oKENIQVIpKDB4YmYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3 RDogcmV0dXJuKChDSEFSKSgweDhlICYgMHhmZikpOyAvKiBaIGNhcm9uICovCisgICAgICBjYXNl IDB4MDJDNzogcmV0dXJuKChDSEFSKSgweGExICYgMHhmZikpOworICAgICAgY2FzZSAweDAyRDg6 IHJldHVybigoQ0hBUikoMHhhMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMkRCOiByZXR1cm4o KENIQVIpKDB4YjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDJERDogcmV0dXJuKChDSEFSKSgw eGJkICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMTA6IGNhc2UgMHgyMDExOiAgICAgICAgIC8q IEh5cGhlbnMgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDJkICYgMHhmZikpOworICAgICAg Y2FzZSAweDIwMTI6IGNhc2UgMHgyMDEzOiAgICAgICAgIC8qIGVuLWRhc2hlcyAqLworICAgICAg ICByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxNDogY2FzZSAw eDIwMTU6ICAgICAgICAgLyogZW0tZGFzaGVzICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg5 NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE4OiAgICAgICAgICAgICAgICAgICAgICAvKiBW YXJpb3VzIHF1b3RhdGlvbiBtYXJrcy4uLiAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4OTEg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxOToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDky ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMWM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5 MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFkOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 OTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxZToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDg0ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjA6ICAgICAgICAgICAgICAgICAgICAgIC8q IERhZ2dlciAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjAyMTogICAgICAgICAgICAgICAgICAgICAgLyogRG91YmxlIERhZ2dlciAqLworICAg ICAgICByZXR1cm4oKENIQVIpKDB4ODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMjogICAg ICAgICAgICAgICAgICAgICAgLyogQnVsbGV0ICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg5 NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDI2OiAgICAgICAgICAgICAgICAgICAgICAvKiBF bGxpcHNpcyAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4ODUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjAzMDogICAgICAgICAgICAgICAgICAgICAgLyogUGVyIG1pbCAqLworICAgICAgICBy ZXR1cm4oKENIQVIpKDB4ODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjBBQzogICAgICAgICAg ICAgICAgICAgICAgLyogRXVybyAqLworICAgICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyMTIyOiAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFkZSBN YXJrICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1 bHQ6IHJldHVybigweDAwM2YpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgQ29kZSBQYWdlIDEyNTEgKEN5cmlsbGljKSAqLwor I2lmZGVmIENLX0FOU0lDCit0eF9jcDEyNTEoVVNIT1JUIGMpCisjZWxzZQordHhfY3AxMjUxKGMp IFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDgwKSAg ICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCisgICAgICByZXR1cm4o KENIQVIpKGMgJiAweGZmKSk7CisgICAgLyogVGhpcyBpcyBzaW1wbHkgdGhlIGludmVyc2Ugb2Yg dV9jcDEyNTEubWFwICovCisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MDAzYzogcmV0 dXJuKChDSEFSKSgweDhiICYgMHhmZikpOworICAgICAgY2FzZSAweDAwM2U6IHJldHVybigoQ0hB UikoMHg5YiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMDdlOiByZXR1cm4oKENIQVIpKDB4OTgg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKSgweGEwICYgMHhmZikp OworICAgICAgY2FzZSAweDAwQTQ6IHJldHVybigoQ0hBUikoMHhhNCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMEE2OiByZXR1cm4oKENIQVIpKDB4YTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBBNzogcmV0dXJuKChDSEFSKSgweGE3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTk6IHJl dHVybigoQ0hBUikoMHhhOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFCOiByZXR1cm4oKENI QVIpKDB4YWIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBQzogcmV0dXJuKChDSEFSKSgweGFj ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQUQ6IHJldHVybigoQ0hBUikoMHhhZCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMEFFOiByZXR1cm4oKENIQVIpKDB4YWUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgweGIwICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYjE6IHJldHVybigoQ0hBUikoMHhiMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI1OiBy ZXR1cm4oKENIQVIpKDB4YjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCNjogcmV0dXJuKChD SEFSKSgweGI2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjc6IHJldHVybigoQ0hBUikoMHhi NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEJCOiByZXR1cm4oKENIQVIpKDB4YmIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQwMTogcmV0dXJuKChDSEFSKSgweGE4ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MDI6IHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDAzOiByZXR1cm4oKENIQVIpKDB4ODEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwNDog cmV0dXJuKChDSEFSKSgweGFhICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDU6IHJldHVybigo Q0hBUikoMHhiZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDA2OiByZXR1cm4oKENIQVIpKDB4 YjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwNzogcmV0dXJuKChDSEFSKSgweGFmICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MDg6IHJldHVybigoQ0hBUikoMHhhMyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDA5OiByZXR1cm4oKENIQVIpKDB4OGEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQwYTogcmV0dXJuKChDSEFSKSgweDhjICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MGI6 IHJldHVybigoQ0hBUikoMHg4ZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDBjOiByZXR1cm4o KENIQVIpKDB4OGQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQwZTogcmV0dXJuKChDSEFSKSgw eGExICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MGY6IHJldHVybigoQ0hBUikoMHg4ZiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEwOiByZXR1cm4oKENIQVIpKDB4YzAgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQxMTogcmV0dXJuKChDSEFSKSgweGMxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MTI6IHJldHVybigoQ0hBUikoMHhjMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEz OiByZXR1cm4oKENIQVIpKDB4YzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxNDogcmV0dXJu KChDSEFSKSgweGM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTU6IHJldHVybigoQ0hBUiko MHhjNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE2OiByZXR1cm4oKENIQVIpKDB4YzYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQxNzogcmV0dXJuKChDSEFSKSgweGM3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MTg6IHJldHVybigoQ0hBUikoMHhjOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDE5OiByZXR1cm4oKENIQVIpKDB4YzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQx YTogcmV0dXJuKChDSEFSKSgweGNhICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWI6IHJldHVy bigoQ0hBUikoMHhjYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFjOiByZXR1cm4oKENIQVIp KDB4Y2MgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxZDogcmV0dXJuKChDSEFSKSgweGNkICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MWU6IHJldHVybigoQ0hBUikoMHhjZSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDFmOiByZXR1cm4oKENIQVIpKDB4Y2YgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQyMDogcmV0dXJuKChDSEFSKSgweGQwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MjE6IHJldHVybigoQ0hBUikoMHhkMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIyOiByZXR1 cm4oKENIQVIpKDB4ZDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyMzogcmV0dXJuKChDSEFS KSgweGQzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjQ6IHJldHVybigoQ0hBUikoMHhkNCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI1OiByZXR1cm4oKENIQVIpKDB4ZDUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQyNjogcmV0dXJuKChDSEFSKSgweGQ2ICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikoMHhkNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDI4OiByZXR1cm4oKENIQVIpKDB4ZDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyOTogcmV0 dXJuKChDSEFSKSgweGQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmE6IHJldHVybigoQ0hB UikoMHhkYSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJiOiByZXR1cm4oKENIQVIpKDB4ZGIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyYzogcmV0dXJuKChDSEFSKSgweGRjICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MmQ6IHJldHVybigoQ0hBUikoMHhkZCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDJlOiByZXR1cm4oKENIQVIpKDB4ZGUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQyZjogcmV0dXJuKChDSEFSKSgweGRmICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzA6IHJl dHVybigoQ0hBUikoMHhlMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMxOiByZXR1cm4oKENI QVIpKDB4ZTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzMjogcmV0dXJuKChDSEFSKSgweGUy ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzM6IHJldHVybigoQ0hBUikoMHhlMyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDM0OiByZXR1cm4oKENIQVIpKDB4ZTQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQzNTogcmV0dXJuKChDSEFSKSgweGU1ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MzY6IHJldHVybigoQ0hBUikoMHhlNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM3OiBy ZXR1cm4oKENIQVIpKDB4ZTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzODogcmV0dXJuKChD SEFSKSgweGU4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mzk6IHJldHVybigoQ0hBUikoMHhl OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNhOiByZXR1cm4oKENIQVIpKDB4ZWEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQzYjogcmV0dXJuKChDSEFSKSgweGViICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0M2M6IHJldHVybigoQ0hBUikoMHhlYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDNkOiByZXR1cm4oKENIQVIpKDB4ZWQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzZTog cmV0dXJuKChDSEFSKSgweGVlICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2Y6IHJldHVybigo Q0hBUikoMHhlZiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQwOiByZXR1cm4oKENIQVIpKDB4 ZjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MTogcmV0dXJuKChDSEFSKSgweGYxICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0NDI6IHJldHVybigoQ0hBUikoMHhmMiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDQzOiByZXR1cm4oKENIQVIpKDB4ZjMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQ0NDogcmV0dXJuKChDSEFSKSgweGY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDU6 IHJldHVybigoQ0hBUikoMHhmNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ2OiByZXR1cm4o KENIQVIpKDB4ZjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0NzogcmV0dXJuKChDSEFSKSgw eGY3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDg6IHJldHVybigoQ0hBUikoMHhmOCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ5OiByZXR1cm4oKENIQVIpKDB4ZjkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQ0YTogcmV0dXJuKChDSEFSKSgweGZhICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0NGI6IHJldHVybigoQ0hBUikoMHhmYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRj OiByZXR1cm4oKENIQVIpKDB4ZmMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0ZDogcmV0dXJu KChDSEFSKSgweGZkICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGU6IHJldHVybigoQ0hBUiko MHhmZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRmOiByZXR1cm4oKENIQVIpKDB4ZmYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQ1MTogcmV0dXJuKChDSEFSKSgweGI4ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0NTI6IHJldHVybigoQ0hBUikoMHg5MCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDUzOiByZXR1cm4oKENIQVIpKDB4ODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1 NDogcmV0dXJuKChDSEFSKSgweGJhICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTU6IHJldHVy bigoQ0hBUikoMHhiZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDU2OiByZXR1cm4oKENIQVIp KDB4YjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1NzogcmV0dXJuKChDSEFSKSgweGJmICYg MHhmZikpOworICAgICAgY2FzZSAweDA0NTg6IHJldHVybigoQ0hBUikoMHhiYyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDU5OiByZXR1cm4oKENIQVIpKDB4OWEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQ1YTogcmV0dXJuKChDSEFSKSgweDljICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 NWI6IHJldHVybigoQ0hBUikoMHg5ZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDVjOiByZXR1 cm4oKENIQVIpKDB4OWQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ1ZTogcmV0dXJuKChDSEFS KSgweGEyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NWY6IHJldHVybigoQ0hBUikoMHg5ZiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDkwOiByZXR1cm4oKENIQVIpKDB4YTUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQ5MTogcmV0dXJuKChDSEFSKSgweGI0ICYgMHhmZikpOworICAgICAg Y2FzZSAweDIwMTI6IHJldHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MDE0OiByZXR1cm4oKENIQVIpKDB4OTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxODogcmV0 dXJuKChDSEFSKSgweDkxICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMTk6IHJldHVybigoQ0hB UikoMHg5MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFhOiByZXR1cm4oKENIQVIpKDB4ODIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxYzogcmV0dXJuKChDSEFSKSgweDkzICYgMHhmZikp OworICAgICAgY2FzZSAweDIwMWQ6IHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMDFlOiByZXR1cm4oKENIQVIpKDB4ODQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjAyMDogcmV0dXJuKChDSEFSKSgweDg2ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjE6IHJl dHVybigoQ0hBUikoMHg4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIyOiByZXR1cm4oKENI QVIpKDB4OTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyNjogcmV0dXJuKChDSEFSKSgweDg1 ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMzE6IHJldHVybigoQ0hBUikoMHg4OSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMEFDOiAgICAgICAgICAgICAgICAgICAgICAvKiBFdXJvICovCisg ICAgICAgICAgcmV0dXJuKChDSEFSKSgweDg4ICYgMHhmZikpOworICAgICAgY2FzZSAweDIxMTY6 IHJldHVybigoQ0hBUikoMHhiOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMTIyOiByZXR1cm4o KENIQVIpKDB4OTkgJiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4oMHgwMDNmKTsKKyAg ICB9Cit9CisKK2ludCAvKiBVbmljb2RlIHRvIFdpbmRvd3MgQ29kZSBQYWdlIDEyNTIgKExhdGlu LTEpICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwMTI1MihVU0hPUlQgYykKKyNlbHNlCit0eF9j cDEyNTIoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8 IDB4ODAgfHwgKGMgPiAweDlmICYmIGMgPD0gMHhmZikpIC8qIEhhcyBDMSBncmFwaGljcyAqLwor ICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAg Y2FzZSAweDAxNTI6ICAgICAgICAgICAgICAgICAgICAgIC8qIE9FICovCisgICAgICAgIHJldHVy bigoQ0hBUikoMHg4YyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTUzOiAgICAgICAgICAgICAg ICAgICAgICAvKiBvZSAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4OWMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDE2MDogICAgICAgICAgICAgICAgICAgICAgLyogUyBjYXJvbiAqLworICAg ICAgICByZXR1cm4oKENIQVIpKDB4OGEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE2MTogICAg ICAgICAgICAgICAgICAgICAgLyogcyBjYXJvbiAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4 OWEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3ODogICAgICAgICAgICAgICAgICAgICAgLyog WSBkaWFlcmVzaXMgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDlmICYgMHhmZikpOworICAg ICAgY2FzZSAweDAxN0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIFogY2Fyb24gKi8KKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDhlICYgMHhmZikpOworICAgICAgY2FzZSAweDAxN0U6ICAgICAg ICAgICAgICAgICAgICAgIC8qIHogY2Fyb24gKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDll ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxOTI6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZs b3JpbiAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4ODMgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAxMDogY2FzZSAweDIwMTE6ICAgICAgICAgLyogSHlwaGVucyAqLworICAgICAgICByZXR1 cm4oKENIQVIpKDB4MmQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxMjogY2FzZSAweDIwMTM6 ICAgICAgICAgLyogZW4tZGFzaGVzICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE0OiBjYXNlIDB4MjAxNTogICAgICAgICAvKiBlbS1kYXNo ZXMgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDIwMTg6ICAgICAgICAgICAgICAgICAgICAgIC8qIFZhcmlvdXMgcXVvdGF0aW9uIG1hcmtzLi4u ICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MDE5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjAxYzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDkzICYgMHhmZikpOworICAgICAgY2FzZSAw eDIwMWQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyMDFlOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODQgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAyMDogICAgICAgICAgICAgICAgICAgICAgLyogRGFnZ2VyICovCisgICAgICAgIHJldHVy bigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIxOiAgICAgICAgICAgICAg ICAgICAgICAvKiBEb3VibGUgRGFnZ2VyICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4NyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIyOiAgICAgICAgICAgICAgICAgICAgICAvKiBCdWxs ZXQgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk1ICYgMHhmZikpOworICAgICAgY2FzZSAw eDIwMjY6ICAgICAgICAgICAgICAgICAgICAgIC8qIEVsbGlwc2lzICovCisgICAgICAgIHJldHVy bigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDMwOiAgICAgICAgICAgICAg ICAgICAgICAvKiBQZXIgbWlsICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4OSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMEFDOiAgICAgICAgICAgICAgICAgICAgICAvKiBFdXJvICovCisg ICAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikpOworICAgICAgY2FzZSAweDIxMjI6 ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyYWRlIE1hcmsgKi8KKyAgICAgICAgcmV0dXJuKChD SEFSKSgweDk5ICYgMHhmZikpOworICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MDAzZik7CisgICAg fQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgQ29k ZSBQYWdlIDg1MiAqLworI2lmZGVmIENLX0FOU0lDCit0eF9jcDg1MihVU0hPUlQgYykKKyNlbHNl Cit0eF9jcDg1MihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlm IChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLwor ICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAg Y2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw YTQ6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTc6IHJldHVy bigoQ0hBUikoMjQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTg6IHJldHVybigoQ0hBUiko MjQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTc0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYWQ6IHJldHVybigoQ0hBUikoMjQwICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYjA6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjQ6IHJl dHVybigoQ0hBUikoMjM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjg6IHJldHVybigoQ0hB UikoMjQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc1ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwYzE6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwYzI6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYzQ6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzc6 IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzk6IHJldHVybigo Q0hBUikoMTQ0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2I6IHJldHVybigoQ0hBUikoMjEx ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwY2Q6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwY2U6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZDM6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZDQ6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDY6IHJldHVy bigoQ0hBUikoMTUzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZDc6IHJldHVybigoQ0hBUiko MTU4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGE6IHJldHVybigoQ0hBUikoMjMzICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZGM6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZGQ6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZGY6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTE6IHJl dHVybigoQ0hBUikoMTYwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hB UikoMTMxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUikoMTMyICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZTc6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZTk6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZWI6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWQ6 IHJldHVybigoQ0hBUikoMTYxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWU6IHJldHVybigo Q0hBUikoMTQwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMTYy ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjQ6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZjY6IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZjc6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZmE6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmM6IHJldHVy bigoQ0hBUikoMTI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmQ6IHJldHVybigoQ0hBUiko MjM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMDI6IHJldHVybigoQ0hBUikoMTk4ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAxMDM6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAxMDQ6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAxMDU6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMDY6IHJl dHVybigoQ0hBUikoMTQzICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMDc6IHJldHVybigoQ0hB UikoMTM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMGM6IHJldHVybigoQ0hBUikoMTcyICYg MHhmZikpOworICAgICAgY2FzZSAweDAxMGQ6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAxMGU6IHJldHVybigoQ0hBUikoMjEwICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAxMGY6IHJldHVybigoQ0hBUikoMjEyICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMTA6 IHJldHVybigoQ0hBUikoMjA5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMTE6IHJldHVybigo Q0hBUikoMjA4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMTg6IHJldHVybigoQ0hBUikoMTY4 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMTk6IHJldHVybigoQ0hBUikoMTY5ICYgMHhmZikp OworICAgICAgY2FzZSAweDAxMWE6IHJldHVybigoQ0hBUikoMTgzICYgMHhmZikpOworICAgICAg Y2FzZSAweDAxMWI6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAx Mzk6IHJldHVybigoQ0hBUikoMTQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxM2E6IHJldHVy bigoQ0hBUikoMTQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxM2Q6IHJldHVybigoQ0hBUiko MTQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxM2U6IHJldHVybigoQ0hBUikoMTUwICYgMHhm ZikpOworICAgICAgY2FzZSAweDAxNDE6IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAxNDI6IHJldHVybigoQ0hBUikoMTM2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAxNDM6IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNDQ6IHJl dHVybigoQ0hBUikoMjI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNDc6IHJldHVybigoQ0hB UikoMjEzICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNDg6IHJldHVybigoQ0hBUikoMjI5ICYg MHhmZikpOworICAgICAgY2FzZSAweDAxNTA6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAxNTE6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAxNTQ6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNTU6 IHJldHVybigoQ0hBUikoMjM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNTg6IHJldHVybigo Q0hBUikoMjUyICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNTk6IHJldHVybigoQ0hBUikoMjUz ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNWE6IHJldHVybigoQ0hBUikoMTUxICYgMHhmZikp OworICAgICAgY2FzZSAweDAxNWI6IHJldHVybigoQ0hBUikoMTUyICYgMHhmZikpOworICAgICAg Y2FzZSAweDAxNWU6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAx NWY6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNjA6IHJldHVy bigoQ0hBUikoMjMwICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNjE6IHJldHVybigoQ0hBUiko MjMxICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNjI6IHJldHVybigoQ0hBUikoMjIxICYgMHhm ZikpOworICAgICAgY2FzZSAweDAxNjM6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAxNjQ6IHJldHVybigoQ0hBUikoMTU1ICYgMHhmZikpOworICAgICAgY2FzZSAw eDAxNjU6IHJldHVybigoQ0hBUikoMTU2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNmU6IHJl dHVybigoQ0hBUikoMjIyICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNmY6IHJldHVybigoQ0hB UikoMTMzICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNzA6IHJldHVybigoQ0hBUikoMjM1ICYg MHhmZikpOworICAgICAgY2FzZSAweDAxNzE6IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAxNzk6IHJldHVybigoQ0hBUikoMTQxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAxN2E6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOworICAgICAgY2FzZSAweDAxN2I6 IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxN2M6IHJldHVybigo Q0hBUikoMTkwICYgMHhmZikpOworICAgICAgY2FzZSAweDAxN2Q6IHJldHVybigoQ0hBUikoMTY2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxN2U6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikp OworICAgICAgY2FzZSAweDAyYzc6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikpOworICAgICAg Y2FzZSAweDAyZDg6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAy ZDk6IHJldHVybigoQ0hBUikoMjUwICYgMHhmZikpOworICAgICAgY2FzZSAweDAyZGI6IHJldHVy bigoQ0hBUikoMjQyICYgMHhmZikpOworICAgICAgY2FzZSAweDAyZGQ6IHJldHVybigoQ0hBUiko MjQxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTk2ICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1MGM6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1MTA6IHJldHVybigoQ0hBUikoMTkxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTQ6IHJl dHVybigoQ0hBUikoMTkyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hB UikoMjE3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikoMTk1ICYg MHhmZikpOworICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1MmM6IHJldHVybigoQ0hBUikoMTk0ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1MzQ6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1M2M6 IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTA6IHJldHVybigo Q0hBUikoMjA1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikp OworICAgICAgY2FzZSAweDI1NTc6IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1NWE6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 NWQ6IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjA6IHJldHVy bigoQ0hBUikoMjA0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUiko MTg1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1Njk6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1NmM6IHJldHVybigoQ0hBUikoMjA2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1ODA6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODQ6IHJl dHVybigoQ0hBUikoMjIwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hB UikoMjE5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTc2ICYg MHhmZikpOworICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1OTM6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1YTA6IHJldHVybigoQ0hBUikoMjU0ICYgMHhmZikpOworICAgICAgZGVmYXVsdDogcmV0 dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KKyAgICB9 Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3dz IENvZGUgUGFnZSAxMjUzIChHcmVlaykgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfY3AxMjUzKFVT SE9SVCBjKQorI2Vsc2UKK3R4X2NwMTI1MyhjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeworICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBD MSBncmFwaGljcyAqLworICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRj aCAoYykgeworICAgICAgY2FzZSAweDAwM2M6IHJldHVybigoQ0hBUikoMHg4YiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMDNlOiByZXR1cm4oKENIQVIpKDB4OWIgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBBMDogcmV0dXJuKChDSEFSKSgweGEwICYgMHhmZikpOworICAgICAgY2FzZSAweDAw QTM6IHJldHVybigoQ0hBUikoMHhhMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEE0OiByZXR1 cm4oKENIQVIpKDB4YTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBNTogcmV0dXJuKChDSEFS KSgweGE1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTY6IHJldHVybigoQ0hBUikoMHhhNiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEE3OiByZXR1cm4oKENIQVIpKDB4YTcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBBODogcmV0dXJuKChDSEFSKSgweGE4ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwQTk6IHJldHVybigoQ0hBUikoMHhhOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MEFBOiByZXR1cm4oKENIQVIpKDB4YWEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBQjogcmV0 dXJuKChDSEFSKSgweGFiICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQUM6IHJldHVybigoQ0hB UikoMHhhYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFEOiByZXR1cm4oKENIQVIpKDB4YWQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBRTogcmV0dXJuKChDSEFSKSgweGFlICYgMHhmZikp OworICAgICAgY2FzZSAweDAwQUY6IHJldHVybigoQ0hBUikoMHhhZiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMEIwOiByZXR1cm4oKENIQVIpKDB4YjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBCMTogcmV0dXJuKChDSEFSKSgweGIxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjI6IHJl dHVybigoQ0hBUikoMHhiMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEIzOiByZXR1cm4oKENI QVIpKDB4YjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCNTogcmV0dXJuKChDSEFSKSgweGI1 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjY6IHJldHVybigoQ0hBUikoMHhiNiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDB4YTEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBCQjogcmV0dXJuKChDSEFSKSgweGJiICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwQkQ6IHJldHVybigoQ0hBUikoMHhiZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTkyOiBy ZXR1cm4oKENIQVIpKDB4ODMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4NjogcmV0dXJuKChD SEFSKSgweGEyICYgMHhmZikpOworICAgICAgY2FzZSAweDAzODg6IHJldHVybigoQ0hBUikoMHhi OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzg5OiByZXR1cm4oKENIQVIpKDB4YjkgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDM4QTogcmV0dXJuKChDSEFSKSgweGJhICYgMHhmZikpOworICAg ICAgY2FzZSAweDAzOEM6IHJldHVybigoQ0hBUikoMHhiYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMzhFOiByZXR1cm4oKENIQVIpKDB4YmUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4Rjog cmV0dXJuKChDSEFSKSgweGJmICYgMHhmZikpOworICAgICAgY2FzZSAweDAzOTA6IHJldHVybigo Q0hBUikoMHhjMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzkxOiByZXR1cm4oKENIQVIpKDB4 YzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5MjogcmV0dXJuKChDSEFSKSgweGMyICYgMHhm ZikpOworICAgICAgY2FzZSAweDAzOTM6IHJldHVybigoQ0hBUikoMHhjMyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMzk0OiByZXR1cm4oKENIQVIpKDB4YzQgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDM5NTogcmV0dXJuKChDSEFSKSgweGM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzOTY6 IHJldHVybigoQ0hBUikoMHhjNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzk3OiByZXR1cm4o KENIQVIpKDB4YzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5ODogcmV0dXJuKChDSEFSKSgw eGM4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzOTk6IHJldHVybigoQ0hBUikoMHhjOSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzlBOiByZXR1cm4oKENIQVIpKDB4Y2EgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDM5QjogcmV0dXJuKChDSEFSKSgweGNiICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAzOUM6IHJldHVybigoQ0hBUikoMHhjYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzlE OiByZXR1cm4oKENIQVIpKDB4Y2QgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5RTogcmV0dXJu KChDSEFSKSgweGNlICYgMHhmZikpOworICAgICAgY2FzZSAweDAzOUY6IHJldHVybigoQ0hBUiko MHhjZiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2EwOiByZXR1cm4oKENIQVIpKDB4ZDAgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDNhMTogcmV0dXJuKChDSEFSKSgweGQxICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAzYTM6IHJldHVybigoQ0hBUikoMHhkMyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwM2E0OiByZXR1cm4oKENIQVIpKDB4ZDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNh NTogcmV0dXJuKChDSEFSKSgweGQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYTY6IHJldHVy bigoQ0hBUikoMHhkNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2E3OiByZXR1cm4oKENIQVIp KDB4ZDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhODogcmV0dXJuKChDSEFSKSgweGQ4ICYg MHhmZikpOworICAgICAgY2FzZSAweDAzYTk6IHJldHVybigoQ0hBUikoMHhkOSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwM2FBOiByZXR1cm4oKENIQVIpKDB4ZGEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDNhQjogcmV0dXJuKChDSEFSKSgweGRiICYgMHhmZikpOworICAgICAgY2FzZSAweDAz YUM6IHJldHVybigoQ0hBUikoMHhkYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2FEOiByZXR1 cm4oKENIQVIpKDB4ZGQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhRTogcmV0dXJuKChDSEFS KSgweGRlICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYUY6IHJldHVybigoQ0hBUikoMHhkZiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2IwOiByZXR1cm4oKENIQVIpKDB4ZTAgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDNiMTogcmV0dXJuKChDSEFSKSgweGUxICYgMHhmZikpOworICAgICAg Y2FzZSAweDAzYjI6IHJldHVybigoQ0hBUikoMHhlMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw M2IzOiByZXR1cm4oKENIQVIpKDB4ZTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiNDogcmV0 dXJuKChDSEFSKSgweGU0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYjU6IHJldHVybigoQ0hB UikoMHhlNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I2OiByZXR1cm4oKENIQVIpKDB4ZTYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiNzogcmV0dXJuKChDSEFSKSgweGU3ICYgMHhmZikp OworICAgICAgY2FzZSAweDAzYjg6IHJldHVybigoQ0hBUikoMHhlOCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwM2I5OiByZXR1cm4oKENIQVIpKDB4ZTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDNiQTogcmV0dXJuKChDSEFSKSgweGVhICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYkI6IHJl dHVybigoQ0hBUikoMHhlYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2JDOiByZXR1cm4oKENI QVIpKDB4ZWMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiRDogcmV0dXJuKChDSEFSKSgweGVk ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYkU6IHJldHVybigoQ0hBUikoMHhlZSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwM2JGOiByZXR1cm4oKENIQVIpKDB4ZWYgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDNjMDogcmV0dXJuKChDSEFSKSgweGYwICYgMHhmZikpOworICAgICAgY2FzZSAw eDAzYzE6IHJldHVybigoQ0hBUikoMHhmMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MyOiBy ZXR1cm4oKENIQVIpKDB4ZjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjMzogcmV0dXJuKChD SEFSKSgweGYzICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYzQ6IHJldHVybigoQ0hBUikoMHhm NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M1OiByZXR1cm4oKENIQVIpKDB4ZjUgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDNjNjogcmV0dXJuKChDSEFSKSgweGY2ICYgMHhmZikpOworICAg ICAgY2FzZSAweDAzYzc6IHJldHVybigoQ0hBUikoMHhmNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwM2M4OiByZXR1cm4oKENIQVIpKDB4ZjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjOTog cmV0dXJuKChDSEFSKSgweGY5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzY0E6IHJldHVybigo Q0hBUikoMHhmYSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2NCOiByZXR1cm4oKENIQVIpKDB4 ZmIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjQzogcmV0dXJuKChDSEFSKSgweGZjICYgMHhm ZikpOworICAgICAgY2FzZSAweDAzY0Q6IHJldHVybigoQ0hBUikoMHhmZCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwM2NFOiByZXR1cm4oKENIQVIpKDB4ZmUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjAxMjogcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMTQ6 IHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDE4OiByZXR1cm4o KENIQVIpKDB4OTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxOTogcmV0dXJuKChDSEFSKSgw eDkyICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMWE6IHJldHVybigoQ0hBUikoMHg4MiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIpKDB4OTMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjAxZDogcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDIwMWU6IHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDIw OiByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAyMTogcmV0dXJu KChDSEFSKSgweDg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMjI6IHJldHVybigoQ0hBUiko MHg5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDI2OiByZXR1cm4oKENIQVIpKDB4ODUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjAzMTogcmV0dXJuKChDSEFSKSgweDg5ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDIwQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEV1cm8gKi8KKyAgICAg ICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjEyMjogcmV0 dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOworICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MDAzZik7 CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog V2luZG93cyBDb2RlIFBhZ2UgMTI1NCAoVHVya2lzaCkgKi8KKyNpZmRlZiBDS19BTlNJQwordHhf Y3AxMjU0KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2NwMTI1NChjKSBVU0hPUlQgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkKKyAgICAgIHJldHVybigoQ0hBUiko YyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMTFlOiByZXR1cm4o KENIQVIpKDB4ZDAgJiAweGZmKSk7IC8qIEcgYnJldmUgICAgKi8KKyAgICAgIGNhc2UgMHgwMTMw OiByZXR1cm4oKENIQVIpKDB4ZGQgJiAweGZmKSk7IC8qIEkgd2l0aCBkb3QgKi8KKyAgICAgIGNh c2UgMHgwMTVlOiByZXR1cm4oKENIQVIpKDB4ZGUgJiAweGZmKSk7IC8qIFMgY2VkaWxsYSAgKi8K KyAgICAgIGNhc2UgMHgwMTFmOiByZXR1cm4oKENIQVIpKDB4ZjAgJiAweGZmKSk7IC8qIGcgYnJl dmUgICAgKi8KKyAgICAgIGNhc2UgMHgwMTMxOiByZXR1cm4oKENIQVIpKDB4ZmQgJiAweGZmKSk7 IC8qIGkgZG90bGVzcyAqLworICAgICAgY2FzZSAweDAxNWY6IHJldHVybigoQ0hBUikoMHhmZSAm IDB4ZmYpKTsgLyogcyBjZWRpbGxhICovCisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3AxMjUy KGMpKTsgICAgLyogVGhlIHJlc3QgaXMgbGlrZSBXaW5kb3dzIExhdGluLTEgKi8KKyAgICB9Cit9 CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0eF9jcDEyNTUoVVNIT1JUIGMpCisjZWxzZQordHhf Y3AxMjU1KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMg PCAweDA4MCkKKyAgICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaCAo YykgeworICAgICAgY2FzZSAweDIwQUM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4 ZmYpKTsgICAgLyogRVVSTyBTSUdOICovCisgICAgICBjYXNlIDB4MjAxQToKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweDgyICYgMHhmZikpOyAgICAvKiBTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1B UksgKi8KKyAgICAgIGNhc2UgMHgwMTkyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODMgJiAw eGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PSyAqLworICAgICAgY2Fz ZSAweDIwMUU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsgICAgLyogRE9V QkxFIExPVy05IFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MjAyNjoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweDg1ICYgMHhmZikpOyAgICAvKiBIT1JJWk9OVEFMIEVMTElQU0lTICov CisgICAgICBjYXNlIDB4MjAyMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg2ICYgMHhmZikp OyAgICAvKiBEQUdHRVIgKi8KKyAgICAgIGNhc2UgMHgyMDIxOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4ODcgJiAweGZmKSk7ICAgIC8qIERPVUJMRSBEQUdHRVIgKi8KKyAgICAgIGNhc2UgMHgw MkM2OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODggJiAweGZmKSk7ICAgIC8qIE1PRElGSUVS IExFVFRFUiBDSVJDVU1GTEVYIEFDQ0VOVCAqLworICAgICAgY2FzZSAweDIwMzA6CisgICAgICAg IHJldHVybigoQ0hBUikoMHg4OSAmIDB4ZmYpKTsgICAgLyogUEVSIE1JTExFIFNJR04gKi8KKyAg ICAgIGNhc2UgMHgyMDM5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OEIgJiAweGZmKSk7ICAg IC8qIFNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RFICovCisgICAgICBjYXNlIDB4MjAx ODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDkxICYgMHhmZikpOyAgICAvKiBMRUZUIFNJTkdM RSBRVU9UQVRJT04gTUFSSyAqLworICAgICAgY2FzZSAweDIwMTk6CisgICAgICAgIHJldHVybigo Q0hBUikoMHg5MiAmIDB4ZmYpKTsgICAgLyogUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLICov CisgICAgICBjYXNlIDB4MjAxQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDkzICYgMHhmZikp OyAgICAvKiBMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSyAqLworICAgICAgY2FzZSAweDIwMUQ6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYpKTsgICAgLyogUklHSFQgRE9VQkxF IFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MjAyMjoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweDk1ICYgMHhmZikpOyAgICAvKiBCVUxMRVQgKi8KKyAgICAgIGNhc2UgMHgyMDEzOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4OTYgJiAweGZmKSk7ICAgIC8qIEVOIERBU0ggKi8KKyAg ICAgIGNhc2UgMHgyMDE0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTcgJiAweGZmKSk7ICAg IC8qIEVNIERBU0ggKi8KKyAgICAgIGNhc2UgMHgwMkRDOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4OTggJiAweGZmKSk7ICAgIC8qIFNNQUxMIFRJTERFICovCisgICAgICBjYXNlIDB4MjEyMjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOyAgICAvKiBUUkFERSBNQVJLIFNJ R04gKi8KKyAgICAgIGNhc2UgMHgyMDNBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OUIgJiAw eGZmKSk7ICAgIC8qIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9URSAqLworICAgICAg Y2FzZSAweDAwQTA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBMCAmIDB4ZmYpKTsgICAgLyog Tk8tQlJFQUsgU1BBQ0UgKi8KKyAgICAgIGNhc2UgMHgwMEExOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4QTEgJiAweGZmKSk7ICAgIC8qIElOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksgKi8KKyAg ICAgIGNhc2UgMHgwMEEyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTIgJiAweGZmKSk7ICAg IC8qIENFTlQgU0lHTiAqLworICAgICAgY2FzZSAweDAwQTM6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhBMyAmIDB4ZmYpKTsgICAgLyogUE9VTkQgU0lHTiAqLworICAgICAgY2FzZSAweDIwQUE6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBNCAmIDB4ZmYpKTsgICAgLyogTkVXIFNIRVFFTCBT SUdOICovCisgICAgICBjYXNlIDB4MDBBNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE1ICYg MHhmZikpOyAgICAvKiBZRU4gU0lHTiAqLworICAgICAgY2FzZSAweDAwQTY6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhBNiAmIDB4ZmYpKTsgICAgLyogQlJPS0VOIEJBUiAqLworICAgICAgY2Fz ZSAweDAwQTc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBNyAmIDB4ZmYpKTsgICAgLyogU0VD VElPTiBTSUdOICovCisgICAgICBjYXNlIDB4MDBBODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eEE4ICYgMHhmZikpOyAgICAvKiBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwMEE5OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QTkgJiAweGZmKSk7ICAgIC8qIENPUFlSSUdIVCBTSUdOICov CisgICAgICBjYXNlIDB4MDBENzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFBICYgMHhmZikp OyAgICAvKiBNVUxUSVBMSUNBVElPTiBTSUdOICovCisgICAgICBjYXNlIDB4MDBBQjoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEFCICYgMHhmZikpOyAgICAvKiBMRUZULVBPSU5USU5HIERPVUJM RSBBTkdMRSBRVU9URSAqLworICAgICAgY2FzZSAweDAwQUM6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhBQyAmIDB4ZmYpKTsgICAgLyogTk9UIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEFEOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4QUQgJiAweGZmKSk7ICAgIC8qIFNPRlQgSFlQSEVOICov CisgICAgICBjYXNlIDB4MDBBRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFFICYgMHhmZikp OyAgICAvKiBSRUdJU1RFUkVEIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEFGOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QUYgJiAweGZmKSk7ICAgIC8qIE1BQ1JPTiAqLworICAgICAgY2FzZSAw eDAwQjA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCMCAmIDB4ZmYpKTsgICAgLyogREVHUkVF IFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEIxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjEg JiAweGZmKSk7ICAgIC8qIFBMVVMtTUlOVVMgU0lHTiAqLworICAgICAgY2FzZSAweDAwQjI6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhCMiAmIDB4ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQgVFdP ICovCisgICAgICBjYXNlIDB4MDBCMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEIzICYgMHhm ZikpOyAgICAvKiBTVVBFUlNDUklQVCBUSFJFRSAqLworICAgICAgY2FzZSAweDAwQjQ6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhCNCAmIDB4ZmYpKTsgICAgLyogQUNVVEUgQUNDRU5UICovCisg ICAgICBjYXNlIDB4MDBCNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEI1ICYgMHhmZikpOyAg ICAvKiBNSUNSTyBTSUdOICovCisgICAgICBjYXNlIDB4MDBCNjoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEI2ICYgMHhmZikpOyAgICAvKiBQSUxDUk9XIFNJR04gKi8KKyAgICAgIGNhc2UgMHgw MEI3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjcgJiAweGZmKSk7ICAgIC8qIE1JRERMRSBE T1QgKi8KKyAgICAgIGNhc2UgMHgwMEI4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjggJiAw eGZmKSk7ICAgIC8qIENFRElMTEEgKi8KKyAgICAgIGNhc2UgMHgwMEI5OgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4QjkgJiAweGZmKSk7ICAgIC8qIFNVUEVSU0NSSVBUIE9ORSAqLworICAgICAg Y2FzZSAweDAwRjc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCQSAmIDB4ZmYpKTsgICAgLyog RElWSVNJT04gU0lHTiAqLworICAgICAgY2FzZSAweDAwQkI6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhCQiAmIDB4ZmYpKTsgICAgLyogUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RF ICovCisgICAgICBjYXNlIDB4MDBCQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJDICYgMHhm ZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIgKi8KKyAgICAgIGNhc2UgMHgw MEJEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkQgJiAweGZmKSk7ICAgIC8qIFZVTEdBUiBG UkFDVElPTiBPTkUgSEFMRiAqLworICAgICAgY2FzZSAweDAwQkU6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhCRSAmIDB4ZmYpKTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJT ICovCisgICAgICBjYXNlIDB4MDBCRjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJGICYgMHhm ZikpOyAgICAvKiBJTlZFUlRFRCBRVUVTVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MDVCMDoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEMwICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQg U0hFVkEgKi8KKyAgICAgIGNhc2UgMHgwNUIxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzEg JiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBIQVRBRiBTRUdPTCAqLworICAgICAgY2FzZSAw eDA1QjI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDMiAmIDB4ZmYpKTsgICAgLyogSEVCUkVX IFBPSU5UIEhBVEFGIFBBVEFIICovCisgICAgICBjYXNlIDB4MDVCMzoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEMzICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgSEFUQUYgUUFNQVRTICov CisgICAgICBjYXNlIDB4MDVCNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEM0ICYgMHhmZikp OyAgICAvKiBIRUJSRVcgUE9JTlQgSElSSVEgKi8KKyAgICAgIGNhc2UgMHgwNUI1OgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4QzUgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBUU0VSRSAq LworICAgICAgY2FzZSAweDA1QjY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDNiAmIDB4ZmYp KTsgICAgLyogSEVCUkVXIFBPSU5UIFNFR09MICovCisgICAgICBjYXNlIDB4MDVCNzoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEM3ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUE9JTlQgUEFUQUgg Ki8KKyAgICAgIGNhc2UgMHgwNUI4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzggJiAweGZm KSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBRQU1BVFMgKi8KKyAgICAgIGNhc2UgMHgwNUI5OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QzkgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBIT0xB TSAqLworICAgICAgY2FzZSAweDA1QkI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDQiAmIDB4 ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFFVQlVUUyAqLworICAgICAgY2FzZSAweDA1QkM6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhDQyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIERB R0VTSCBPUiBNQVBJUSAqLworICAgICAgY2FzZSAweDA1QkQ6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhDRCAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIE1FVEVHICovCisgICAgICBjYXNl IDB4MDVCRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweENFICYgMHhmZikpOyAgICAvKiBIRUJS RVcgUFVOQ1RVQVRJT04gTUFRQUYgKi8KKyAgICAgIGNhc2UgMHgwNUJGOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4Q0YgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBSQUZFICovCisgICAg ICBjYXNlIDB4MDVDMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQwICYgMHhmZikpOyAgICAv KiBIRUJSRVcgUFVOQ1RVQVRJT04gUEFTRVEgKi8KKyAgICAgIGNhc2UgMHgwNUMxOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4RDEgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQT0lOVCBTSElOIERP VCAqLworICAgICAgY2FzZSAweDA1QzI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEMiAmIDB4 ZmYpKTsgICAgLyogSEVCUkVXIFBPSU5UIFNJTiBET1QgKi8KKyAgICAgIGNhc2UgMHgwNUMzOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4RDMgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBQVU5DVFVB VElPTiBTT0YgUEFTVVEgKi8KKyAgICAgIGNhc2UgMHgwNUYwOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4RDQgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMSUcuIFlJRERJU0ggRE9VQkxFIFZBViAq LworICAgICAgY2FzZSAweDA1RjE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhENSAmIDB4ZmYp KTsgICAgLyogSEVCUkVXIExJR0FUVVJFIFlJRERJU0ggVkFWIFlPRCAqLworICAgICAgY2FzZSAw eDA1RjI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhENiAmIDB4ZmYpKTsgICAgLyogSEVCUkVX IExJRy4gWUlERElTSCBET1VCTEUgWU9EICovCisgICAgICBjYXNlIDB4MDVGMzoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweEQ3ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgUFVOQ1RVQVRJT04gR0VS RVNIICovCisgICAgICBjYXNlIDB4MDVGNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ4ICYg MHhmZikpOyAgICAvKiBIRUJSRVcgUFVOQ1RVQVRJT04gR0VSU0hBWUlNICovCisgICAgICBjYXNl IDB4MDVEMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEUwICYgMHhmZikpOyAgICAvKiBIRUJS RVcgTEVUVEVSIEFMRUYgKi8KKyAgICAgIGNhc2UgMHgwNUQxOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4RTEgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgQkVUICovCisgICAgICBjYXNl IDB4MDVEMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEUyICYgMHhmZikpOyAgICAvKiBIRUJS RVcgTEVUVEVSIEdJTUVMICovCisgICAgICBjYXNlIDB4MDVEMzoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEUzICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIERBTEVUICovCisgICAgICBj YXNlIDB4MDVENDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU0ICYgMHhmZikpOyAgICAvKiBI RUJSRVcgTEVUVEVSIEhFICovCisgICAgICBjYXNlIDB4MDVENToKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEU1ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFZBViAqLworICAgICAgY2Fz ZSAweDA1RDY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFNiAmIDB4ZmYpKTsgICAgLyogSEVC UkVXIExFVFRFUiBaQVlJTiAqLworICAgICAgY2FzZSAweDA1RDc6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhFNyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBIRVQgKi8KKyAgICAgIGNh c2UgMHgwNUQ4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTggJiAweGZmKSk7ICAgIC8qIEhF QlJFVyBMRVRURVIgVEVUICovCisgICAgICBjYXNlIDB4MDVEOToKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEU5ICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFlPRCAqLworICAgICAgY2Fz ZSAweDA1REE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFQSAmIDB4ZmYpKTsgICAgLyogSEVC UkVXIExFVFRFUiBGSU5BTCBLQUYgKi8KKyAgICAgIGNhc2UgMHgwNURCOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4RUIgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgS0FGICovCisgICAg ICBjYXNlIDB4MDVEQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVDICYgMHhmZikpOyAgICAv KiBIRUJSRVcgTEVUVEVSIExBTUVEICovCisgICAgICBjYXNlIDB4MDVERDoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEVEICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIEZJTkFMIE1FTSAq LworICAgICAgY2FzZSAweDA1REU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFRSAmIDB4ZmYp KTsgICAgLyogSEVCUkVXIExFVFRFUiBNRU0gKi8KKyAgICAgIGNhc2UgMHgwNURGOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4RUYgJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgRklOQUwg TlVOICovCisgICAgICBjYXNlIDB4MDVFMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEYwICYg MHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIE5VTiAqLworICAgICAgY2FzZSAweDA1RTE6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhGMSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBT QU1FS0ggKi8KKyAgICAgIGNhc2UgMHgwNUUyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjIg JiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgQVlJTiAqLworICAgICAgY2FzZSAweDA1RTM6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGMyAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRF UiBGSU5BTCBQRSAqLworICAgICAgY2FzZSAweDA1RTQ6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhGNCAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBQRSAqLworICAgICAgY2FzZSAweDA1 RTU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGNSAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExF VFRFUiBGSU5BTCBUU0FESSAqLworICAgICAgY2FzZSAweDA1RTY6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhGNiAmIDB4ZmYpKTsgICAgLyogSEVCUkVXIExFVFRFUiBUU0FESSAqLworICAgICAg Y2FzZSAweDA1RTc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGNyAmIDB4ZmYpKTsgICAgLyog SEVCUkVXIExFVFRFUiBRT0YgKi8KKyAgICAgIGNhc2UgMHgwNUU4OgorICAgICAgICByZXR1cm4o KENIQVIpKDB4RjggJiAweGZmKSk7ICAgIC8qIEhFQlJFVyBMRVRURVIgUkVTSCAqLworICAgICAg Y2FzZSAweDA1RTk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGOSAmIDB4ZmYpKTsgICAgLyog SEVCUkVXIExFVFRFUiBTSElOICovCisgICAgICBjYXNlIDB4MDVFQToKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEZBICYgMHhmZikpOyAgICAvKiBIRUJSRVcgTEVUVEVSIFRBViAqLworICAgICAg Y2FzZSAweDIwMEU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGRCAmIDB4ZmYpKTsgICAgLyog TEVGVC1UTy1SSUdIVCBNQVJLICovCisgICAgICBjYXNlIDB4MjAwRjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEZFICYgMHhmZikpOyAgICAvKiBSSUdIVC1UTy1MRUZUIE1BUksgKi8KKyAgICAg IGRlZmF1bHQ6IHJldHVybigweDAwM2YpOworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgQXJhYmljICovCisjaWZkZWYgQ0tfQU5T SUMKK3R4X2NwMTI1NihVU0hPUlQgYykKKyNlbHNlCit0eF9jcDEyNTYoYykgVVNIT1JUIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4ODApCisgICAgICByZXR1cm4o KENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MjBBQzoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDgwICYgMHhmZikpOyAgICAvKiBFVVJPIFNJR04gKi8K KyAgICAgIGNhc2UgMHgwNjdFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODEgJiAweGZmKSk7 ICAgIC8qIEFSQUJJQyBMRVRURVIgUEVIICovCisgICAgICBjYXNlIDB4MjAxQToKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweDgyICYgMHhmZikpOyAgICAvKiBTSU5HTEUgTE9XLTkgUVVPVEFUSU9O IE1BUksgKi8KKyAgICAgIGNhc2UgMHgwMTkyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODMg JiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PSyAqLworICAgICAg Y2FzZSAweDIwMUU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsgICAgLyog RE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MjAyNjoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDg1ICYgMHhmZikpOyAgICAvKiBIT1JJWk9OVEFMIEVMTElQU0lT ICovCisgICAgICBjYXNlIDB4MjAyMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg2ICYgMHhm ZikpOyAgICAvKiBEQUdHRVIgKi8KKyAgICAgIGNhc2UgMHgyMDIxOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4ODcgJiAweGZmKSk7ICAgIC8qIERPVUJMRSBEQUdHRVIgKi8KKyAgICAgIGNhc2Ug MHgwMkM2OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODggJiAweGZmKSk7ICAgIC8qIE1PRElG SUVSIExFVFRFUiBDSVJDVU1GTEVYIEFDQ0VOVCAqLworICAgICAgY2FzZSAweDIwMzA6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg4OSAmIDB4ZmYpKTsgICAgLyogUEVSIE1JTExFIFNJR04gKi8K KyAgICAgIGNhc2UgMHgyMDM5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OEIgJiAweGZmKSk7 ICAgIC8qIFNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RFICovCisgICAgICBjYXNlIDB4 MDE1MjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDhDICYgMHhmZikpOyAgICAvKiBMQVRJTiBD QVBJVEFMIExJR0FUVVJFIE9FICovCisgICAgICBjYXNlIDB4MDY4NjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweDhEICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFRDSEVIICovCisgICAg ICBjYXNlIDB4MDY5ODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDhFICYgMHhmZikpOyAgICAv KiBBUkFCSUMgTEVUVEVSIEpFSCAqLworICAgICAgY2FzZSAweDA2QUY6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHg5MCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBHQUYgKi8KKyAgICAg IGNhc2UgMHgyMDE4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTEgJiAweGZmKSk7ICAgIC8q IExFRlQgU0lOR0xFIFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MjAxOToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDkyICYgMHhmZikpOyAgICAvKiBSSUdIVCBTSU5HTEUgUVVPVEFU SU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDFDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 OTMgJiAweGZmKSk7ICAgIC8qIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLICovCisgICAgICBj YXNlIDB4MjAxRDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk0ICYgMHhmZikpOyAgICAvKiBS SUdIVCBET1VCTEUgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDIyOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4OTUgJiAweGZmKSk7ICAgIC8qIEJVTExFVCAqLworICAgICAgY2Fz ZSAweDIwMTM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NiAmIDB4ZmYpKTsgICAgLyogRU4g REFTSCAqLworICAgICAgY2FzZSAweDIwMTQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NyAm IDB4ZmYpKTsgICAgLyogRU0gREFTSCAqLworICAgICAgY2FzZSAweDIxMjI6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsgICAgLyogVFJBREUgTUFSSyBTSUdOICovCisgICAg ICBjYXNlIDB4MjAzQToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDlCICYgMHhmZikpOyAgICAv KiBTSU5HTEUgUklHSFQtUE9JTlRJTkcgQU5HTEUgUVVPVEUgKi8KKyAgICAgIGNhc2UgMHgwMTUz OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OUMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxM IExJR0FUVVJFIE9FICovCisgICAgICBjYXNlIDB4MjAwQzoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweDlEICYgMHhmZikpOyAgICAvKiBaRVJPIFdJRFRIIE5PTi1KT0lORVIgKi8KKyAgICAgIGNh c2UgMHgyMDBEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OUUgJiAweGZmKSk7ICAgIC8qIFpF Uk8gV0lEVEggSk9JTkVSICovCisgICAgICBjYXNlIDB4MDBBMDoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEEwICYgMHhmZikpOyAgICAvKiBOTy1CUkVBSyBTUEFDRSAqLworICAgICAgY2FzZSAw eDA2MEM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBMSAmIDB4ZmYpKTsgICAgLyogQVJBQklD IENPTU1BICovCisgICAgICBjYXNlIDB4MDBBMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEEy ICYgMHhmZikpOyAgICAvKiBDRU5UIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEEzOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4QTMgJiAweGZmKSk7ICAgIC8qIFBPVU5EIFNJR04gKi8KKyAgICAg IGNhc2UgMHgwMEE0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTQgJiAweGZmKSk7ICAgIC8q IENVUlJFTkNZIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEE1OgorICAgICAgICByZXR1cm4oKENI QVIpKDB4QTUgJiAweGZmKSk7ICAgIC8qIFlFTiBTSUdOICovCisgICAgICBjYXNlIDB4MDBBNjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE2ICYgMHhmZikpOyAgICAvKiBCUk9LRU4gQkFSICov CisgICAgICBjYXNlIDB4MDBBNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE3ICYgMHhmZikp OyAgICAvKiBTRUNUSU9OIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEE4OgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4QTggJiAweGZmKSk7ICAgIC8qIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAw eDAwQTk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBOSAmIDB4ZmYpKTsgICAgLyogQ09QWVJJ R0hUIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEFCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 QUIgJiAweGZmKSk7ICAgIC8qIExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RFICovCisg ICAgICBjYXNlIDB4MDBBQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFDICYgMHhmZikpOyAg ICAvKiBOT1QgU0lHTiAqLworICAgICAgY2FzZSAweDAwQUQ6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhBRCAmIDB4ZmYpKTsgICAgLyogU09GVCBIWVBIRU4gKi8KKyAgICAgIGNhc2UgMHgwMEFF OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QUUgJiAweGZmKSk7ICAgIC8qIFJFR0lTVEVSRUQg U0lHTiAqLworICAgICAgY2FzZSAweDAwQUY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBRiAm IDB4ZmYpKTsgICAgLyogTUFDUk9OICovCisgICAgICBjYXNlIDB4MDBCMDoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEIwICYgMHhmZikpOyAgICAvKiBERUdSRUUgU0lHTiAqLworICAgICAgY2Fz ZSAweDAwQjE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCMSAmIDB4ZmYpKTsgICAgLyogUExV Uy1NSU5VUyBTSUdOICovCisgICAgICBjYXNlIDB4MDBCMjoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEIyICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQVCBUV08gKi8KKyAgICAgIGNhc2UgMHgw MEIzOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjMgJiAweGZmKSk7ICAgIC8qIFNVUEVSU0NS SVBUIFRIUkVFICovCisgICAgICBjYXNlIDB4MDBCNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eEI0ICYgMHhmZikpOyAgICAvKiBBQ1VURSBBQ0NFTlQgKi8KKyAgICAgIGNhc2UgMHgwMEI1Ogor ICAgICAgICByZXR1cm4oKENIQVIpKDB4QjUgJiAweGZmKSk7ICAgIC8qIE1JQ1JPIFNJR04gKi8K KyAgICAgIGNhc2UgMHgwMEI2OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjYgJiAweGZmKSk7 ICAgIC8qIFBJTENST1cgU0lHTiAqLworICAgICAgY2FzZSAweDAwQjc6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhCNyAmIDB4ZmYpKTsgICAgLyogTUlERExFIERPVCAqLworICAgICAgY2FzZSAw eDAwQjg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCOCAmIDB4ZmYpKTsgICAgLyogQ0VESUxM QSAqLworICAgICAgY2FzZSAweDAwQjk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCOSAmIDB4 ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQgT05FICovCisgICAgICBjYXNlIDB4MDYxQjoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEJBICYgMHhmZikpOyAgICAvKiBBUkFCSUMgU0VNSUNPTE9OICov CisgICAgICBjYXNlIDB4MDBCQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJCICYgMHhmZikp OyAgICAvKiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEUgKi8KKyAgICAgIGNhc2Ug MHgwMEJDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkMgJiAweGZmKSk7ICAgIC8qIFZVTEdB UiBGUkFDVElPTiBPTkUgUVVBUlRFUiAqLworICAgICAgY2FzZSAweDAwQkQ6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhCRCAmIDB4ZmYpKTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxG ICovCisgICAgICBjYXNlIDB4MDBCRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJFICYgMHhm ZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMgKi8KKyAgICAgIGNhc2Ug MHgwNjFGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkYgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBRVUVTVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MDYyMToKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEMxICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEhBTVpBICovCisgICAgICBj YXNlIDB4MDYyMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEMyICYgMHhmZikpOyAgICAvKiBB UkFCSUMgTFRSLiBBTEVGIFdJVEggTUFEREEgQUJPVkUgKi8KKyAgICAgIGNhc2UgMHgwNjIzOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4QzMgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMVFIuIEFM RUYgV0lUSCBIQU1aQSBBQk9WRSAqLworICAgICAgY2FzZSAweDA2MjQ6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhDNCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExUUi4gV0FXIFdJVEggSEFNWkEg QUJPVkUgKi8KKyAgICAgIGNhc2UgMHgwNjI1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzUg JiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMVFIuIEFMRUYgV0lUSCBIQU1aQSBCRUxPVyAqLworICAg ICAgY2FzZSAweDA2MjY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDNiAmIDB4ZmYpKTsgICAg LyogQVJBQklDIExUUi4gWUVIIFdJVEggSEFNWkEgQUJPVkUgKi8KKyAgICAgIGNhc2UgMHgwNjI3 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzcgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMVFIu IEFMRUYgKi8KKyAgICAgIGNhc2UgMHgwNjI4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4Qzgg JiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMVFIuIEJFSCAqLworICAgICAgY2FzZSAweDA2Mjk6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhDOSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBU RUggTUFSQlVUQSAqLworICAgICAgY2FzZSAweDA2MkE6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhDQSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBURUggKi8KKyAgICAgIGNhc2UgMHgw NjJCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0IgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBM RVRURVIgVEhFSCAqLworICAgICAgY2FzZSAweDA2MkM6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhDQyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBKRUVNICovCisgICAgICBjYXNlIDB4 MDYyRDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweENEICYgMHhmZikpOyAgICAvKiBBUkFCSUMg TEVUVEVSIEhBSCAqLworICAgICAgY2FzZSAweDA2MkU6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhDRSAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBLSEFIICovCisgICAgICBjYXNlIDB4 MDYyRjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweENGICYgMHhmZikpOyAgICAvKiBBUkFCSUMg TEVUVEVSIERBTCAqLworICAgICAgY2FzZSAweDA2MzA6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhEMCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBUSEFMICovCisgICAgICBjYXNlIDB4 MDYzMToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQxICYgMHhmZikpOyAgICAvKiBBUkFCSUMg TEVUVEVSIFJFSCAqLworICAgICAgY2FzZSAweDA2MzI6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhEMiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBaQUlOICovCisgICAgICBjYXNlIDB4 MDYzMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQzICYgMHhmZikpOyAgICAvKiBBUkFCSUMg TEVUVEVSIFNFRU4gKi8KKyAgICAgIGNhc2UgMHgwNjM0OgorICAgICAgICByZXR1cm4oKENIQVIp KDB4RDQgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgU0hFRU4gKi8KKyAgICAgIGNhc2Ug MHgwNjM1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDUgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBMRVRURVIgU0FEICovCisgICAgICBjYXNlIDB4MDYzNjoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEQ2ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIERBRCAqLworICAgICAgY2FzZSAw eDAwRDc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhENyAmIDB4ZmYpKTsgICAgLyogTVVMVElQ TElDQVRJT04gU0lHTiAqLworICAgICAgY2FzZSAweDA2Mzc6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhEOCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRFUiBUQUggKi8KKyAgICAgIGNhc2Ug MHgwNjM4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDkgJiAweGZmKSk7ICAgIC8qIEFSQUJJ QyBMRVRURVIgWkFIICovCisgICAgICBjYXNlIDB4MDYzOToKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweERBICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEFJTiAqLworICAgICAgY2FzZSAw eDA2M0E6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEQiAmIDB4ZmYpKTsgICAgLyogQVJBQklD IExFVFRFUiBHSEFJTiAqLworICAgICAgY2FzZSAweDA2NDA6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhEQyAmIDB4ZmYpKTsgICAgLyogQVJBQklDIFRBVFdFRUwgKi8KKyAgICAgIGNhc2UgMHgw NjQxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4REQgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBM RVRURVIgRkVIICovCisgICAgICBjYXNlIDB4MDY0MjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eERFICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIFFBRiAqLworICAgICAgY2FzZSAweDA2 NDM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhERiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExF VFRFUiBLQUYgKi8KKyAgICAgIGNhc2UgMHgwMEUwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 RTAgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUgKi8KKyAg ICAgIGNhc2UgMHgwNjQ0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTEgJiAweGZmKSk7ICAg IC8qIEFSQUJJQyBMRVRURVIgTEFNICovCisgICAgICBjYXNlIDB4MDBFMjoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEUyICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNV TUZMRVggKi8KKyAgICAgIGNhc2UgMHgwNjQ1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTMg JiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgTUVFTSAqLworICAgICAgY2FzZSAweDA2NDY6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFNCAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRF UiBOT09OICovCisgICAgICBjYXNlIDB4MDY0NzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU1 ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgTEVUVEVSIEhFSCAqLworICAgICAgY2FzZSAweDA2NDg6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFNiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIExFVFRF UiBXQVcgKi8KKyAgICAgIGNhc2UgMHgwMEU3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTcg JiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQSAqLworICAg ICAgY2FzZSAweDAwRTg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFOCAmIDB4ZmYpKTsgICAg LyogTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAwRTk6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFOSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwg TEVUVEVSIEUgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRUE6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhFQSAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1G TEVYICovCisgICAgICBjYXNlIDB4MDBFQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVCICYg MHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgY2Fz ZSAweDA2NDk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFQyAmIDB4ZmYpKTsgICAgLyogQVJB QklDIExFVFRFUiBBTEVGIE1BS1NVUkEgKi8KKyAgICAgIGNhc2UgMHgwNjRBOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RUQgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBMRVRURVIgWUVIICovCisg ICAgICBjYXNlIDB4MDBFRToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVFICYgMHhmZikpOyAg ICAvKiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMEVG OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RUYgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRF UiBJIFdJVEggRElBRVJFU0lTICovCisgICAgICBjYXNlIDB4MDY0QjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEYwICYgMHhmZikpOyAgICAvKiBBUkFCSUMgRkFUSEFUQU4gKi8KKyAgICAgIGNh c2UgMHgwNjRDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjEgJiAweGZmKSk7ICAgIC8qIEFS QUJJQyBEQU1NQVRBTiAqLworICAgICAgY2FzZSAweDA2NEQ6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhGMiAmIDB4ZmYpKTsgICAgLyogQVJBQklDIEtBU1JBVEFOICovCisgICAgICBjYXNlIDB4 MDY0RToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEYzICYgMHhmZikpOyAgICAvKiBBUkFCSUMg RkFUSEEgKi8KKyAgICAgIGNhc2UgMHgwMEY0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjQg JiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAg Y2FzZSAweDA2NEY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGNSAmIDB4ZmYpKTsgICAgLyog QVJBQklDIERBTU1BICovCisgICAgICBjYXNlIDB4MDY1MDoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEY2ICYgMHhmZikpOyAgICAvKiBBUkFCSUMgS0FTUkEgKi8KKyAgICAgIGNhc2UgMHgwMEY3 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjcgJiAweGZmKSk7ICAgIC8qIERJVklTSU9OIFNJ R04gKi8KKyAgICAgIGNhc2UgMHgwNjUxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjggJiAw eGZmKSk7ICAgIC8qIEFSQUJJQyBTSEFEREEgKi8KKyAgICAgIGNhc2UgMHgwMEY5OgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4RjkgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBV IFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgwNjUyOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4RkEgJiAweGZmKSk7ICAgIC8qIEFSQUJJQyBTVUtVTiAqLworICAgICAgY2FzZSAweDAwRkI6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGQiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVS IFUgV0lUSCBDSVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4MDBGQzoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEZDICYgMHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJ UyAqLworICAgICAgY2FzZSAweDIwMEU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGRCAmIDB4 ZmYpKTsgICAgLyogTEVGVC1UTy1SSUdIVCBNQVJLICovCisgICAgICBjYXNlIDB4MjAwRjoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweEZFICYgMHhmZikpOyAgICAvKiBSSUdIVC1UTy1MRUZUIE1B UksgKi8KKyAgICAgIGRlZmF1bHQ6IHJldHVybigweDAwM2YpOworICAgIH0KK30KKworaW50ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgQ29kZSBQYWdlIDEy NTcgKExhdGluLTQpICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwMTI1NyhVU0hPUlQgYykKKyNl bHNlCit0eF9jcDEyNTcoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAg ICBpZiAoYyA8IDB4ODApCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dp dGNoIChjKSB7CisgICAgICBjYXNlIDB4MDAzYzogcmV0dXJuKChDSEFSKSgweDhiICYgMHhmZikp OworICAgICAgY2FzZSAweDAwM2U6IHJldHVybigoQ0hBUikoMHg5YiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMEEwOiByZXR1cm4oKENIQVIpKDB4YTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBBMjogcmV0dXJuKChDSEFSKSgweGEyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTM6IHJl dHVybigoQ0hBUikoMHhhMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEE0OiByZXR1cm4oKENI QVIpKDB4YTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBNjogcmV0dXJuKChDSEFSKSgweGE2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQTc6IHJldHVybigoQ0hBUikoMHhhNyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMEE5OiByZXR1cm4oKENIQVIpKDB4YTkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBBQjogcmV0dXJuKChDSEFSKSgweGFiICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwQUM6IHJldHVybigoQ0hBUikoMHhhYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFEOiBy ZXR1cm4oKENIQVIpKDB4YWQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBBRTogcmV0dXJuKChD SEFSKSgweGFlICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjA6IHJldHVybigoQ0hBUikoMHhi MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEIxOiByZXR1cm4oKENIQVIpKDB4YjEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBCMjogcmV0dXJuKChDSEFSKSgweGIyICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwQjM6IHJldHVybigoQ0hBUikoMHhiMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMEI1OiByZXR1cm4oKENIQVIpKDB4YjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCNjog cmV0dXJuKChDSEFSKSgweGI2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjc6IHJldHVybigo Q0hBUikoMHhiNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEI5OiByZXR1cm4oKENIQVIpKDB4 YjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBCQjogcmV0dXJuKChDSEFSKSgweGJiICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwQkM6IHJldHVybigoQ0hBUikoMHhiYyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMEJEOiByZXR1cm4oKENIQVIpKDB4YmQgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBCRTogcmV0dXJuKChDSEFSKSgweGJlICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQzQ6 IHJldHVybigoQ0hBUikoMHhjNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEM1OiByZXR1cm4o KENIQVIpKDB4YzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjNjogcmV0dXJuKChDSEFSKSgw eGFmICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQzk6IHJldHVybigoQ0hBUikoMHhjOSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQzOiByZXR1cm4oKENIQVIpKDB4ZDMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBENTogcmV0dXJuKChDSEFSKSgweGQ1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwRDY6IHJldHVybigoQ0hBUikoMHhkNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEQ3 OiByZXR1cm4oKENIQVIpKDB4ZDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkODogcmV0dXJu KChDSEFSKSgweGE4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwREM6IHJldHVybigoQ0hBUiko MHhkYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMERGOiByZXR1cm4oKENIQVIpKDB4ZGYgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBFNDogcmV0dXJuKChDSEFSKSgweGU0ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwRTU6IHJldHVybigoQ0hBUikoMHhlNSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGU2OiByZXR1cm4oKENIQVIpKDB4YmYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBF OTogcmV0dXJuKChDSEFSKSgweGU5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjM6IHJldHVy bigoQ0hBUikoMHhmMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEY1OiByZXR1cm4oKENIQVIp KDB4ZjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBGNjogcmV0dXJuKChDSEFSKSgweGY2ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwRjc6IHJldHVybigoQ0hBUikoMHhmNyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGY4OiByZXR1cm4oKENIQVIpKDB4YjggJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBmYzogcmV0dXJuKChDSEFSKSgweGZjICYgMHhmZikpOworICAgICAgY2FzZSAweDAx MDA6IHJldHVybigoQ0hBUikoMHhjMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTAxOiByZXR1 cm4oKENIQVIpKDB4ZTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEwNDogcmV0dXJuKChDSEFS KSgweGMwICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMDU6IHJldHVybigoQ0hBUikoMHhlMCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTA2OiByZXR1cm4oKENIQVIpKDB4YzMgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDEwNzogcmV0dXJuKChDSEFSKSgweGUzICYgMHhmZikpOworICAgICAg Y2FzZSAweDAxMEM6IHJldHVybigoQ0hBUikoMHhjOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MTBEOiByZXR1cm4oKENIQVIpKDB4ZTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDExMjogcmV0 dXJuKChDSEFSKSgweGM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMTM6IHJldHVybigoQ0hB UikoMHhlNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTE2OiByZXR1cm4oKENIQVIpKDB4Y2Ig JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDExNzogcmV0dXJuKChDSEFSKSgweGViICYgMHhmZikp OworICAgICAgY2FzZSAweDAxMTg6IHJldHVybigoQ0hBUikoMHhjNiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMTE5OiByZXR1cm4oKENIQVIpKDB4ZTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDEyMjogcmV0dXJuKChDSEFSKSgweGNjICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMjM6IHJl dHVybigoQ0hBUikoMHhlYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTJhOiByZXR1cm4oKENI QVIpKDB4Y2UgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDEyYjogcmV0dXJuKChDSEFSKSgweGVl ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMmU6IHJldHVybigoQ0hBUikoMHhjMSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMTJmOiByZXR1cm4oKENIQVIpKDB4ZTEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDEzNjogcmV0dXJuKChDSEFSKSgweGNkICYgMHhmZikpOworICAgICAgY2FzZSAw eDAxMzc6IHJldHVybigoQ0hBUikoMHhlZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTNjOiBy ZXR1cm4oKENIQVIpKDB4ZWYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE0MTogcmV0dXJuKChD SEFSKSgweGQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNDI6IHJldHVybigoQ0hBUikoMHhm OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTQzOiByZXR1cm4oKENIQVIpKDB4ZDEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDE0NDogcmV0dXJuKChDSEFSKSgweGYxICYgMHhmZikpOworICAg ICAgY2FzZSAweDAxNDU6IHJldHVybigoQ0hBUikoMHhkMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMTQ2OiByZXR1cm4oKENIQVIpKDB4ZjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE0Yzog cmV0dXJuKChDSEFSKSgweGQ0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNGQ6IHJldHVybigo Q0hBUikoMHhmNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTU2OiByZXR1cm4oKENIQVIpKDB4 YWEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE1NzogcmV0dXJuKChDSEFSKSgweGJhICYgMHhm ZikpOworICAgICAgY2FzZSAweDAxNUE6IHJldHVybigoQ0hBUikoMHhkYSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMTViOiByZXR1cm4oKENIQVIpKDB4ZmEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDE2MDogcmV0dXJuKChDSEFSKSgweGQwICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNjE6 IHJldHVybigoQ0hBUikoMHhmMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTZhOiByZXR1cm4o KENIQVIpKDB4ZGIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE2YjogcmV0dXJuKChDSEFSKSgw eGZiICYgMHhmZikpOworICAgICAgY2FzZSAweDAxNzI6IHJldHVybigoQ0hBUikoMHhkOCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTczOiByZXR1cm4oKENIQVIpKDB4ZjggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDE3OTogcmV0dXJuKChDSEFSKSgweGNhICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAxN2E6IHJldHVybigoQ0hBUikoMHhlYSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTdi OiByZXR1cm4oKENIQVIpKDB4ZGQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDE3YzogcmV0dXJu KChDSEFSKSgweGZkICYgMHhmZikpOworICAgICAgY2FzZSAweDAxN2Q6IHJldHVybigoQ0hBUiko MHhkZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTdlOiByZXR1cm4oKENIQVIpKDB4ZmUgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjAxMjogcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDIwMTQ6IHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyMDE4OiByZXR1cm4oKENIQVIpKDB4OTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAx OTogcmV0dXJuKChDSEFSKSgweDkyICYgMHhmZikpOworICAgICAgY2FzZSAweDIwMWE6IHJldHVy bigoQ0hBUikoMHg4MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDFjOiByZXR1cm4oKENIQVIp KDB4OTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxZDogcmV0dXJuKChDSEFSKSgweDk0ICYg MHhmZikpOworICAgICAgY2FzZSAweDIwMWU6IHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMDIwOiByZXR1cm4oKENIQVIpKDB4ODYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjAyMTogcmV0dXJuKChDSEFSKSgweDg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDIw MjI6IHJldHVybigoQ0hBUikoMHg5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDI2OiByZXR1 cm4oKENIQVIpKDB4ODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAzMTogcmV0dXJuKChDSEFS KSgweDg5ICYgMHhmZikpOworICAgICAgY2FzZSAweDIwQUM6ICAgICAgICAgICAgICAgICAgICAg IC8qIEV1cm8gKi8KKyAgICAgICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjEyMjogcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOworICAgICAgZGVmYXVs dDogcmV0dXJuKDB4MDAzZik7CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogV2luZG93cyBDb2RlIFBhZ2UgMTI1OCAoVmlldCBOYW0pICovCisj aWZkZWYgQ0tfQU5TSUMKK3R4X2NwMTI1OChVU0hPUlQgYykKKyNlbHNlCit0eF9jcDEyNTgoYykg VVNIT1JUIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4ODApICAg ICAgICAgICAgICAgICAgICAgICAvKiBIYXMgQzEgZ3JhcGhpY3MgKi8KKyAgICAgIHJldHVybigo Q0hBUikoYyAmIDB4ZmYpKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgyMEFDOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4ODAgJiAweGZmKSk7ICAgIC8qIEVVUk8gU0lHTiAqLwor ICAgICAgY2FzZSAweDIwMUE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MiAmIDB4ZmYpKTsg ICAgLyogU0lOR0xFIExPVy05IFFVT1RBVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MDE5MjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDgzICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBM RVRURVIgRiBXSVRIIEhPT0sgKi8KKyAgICAgIGNhc2UgMHgyMDFFOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4ODQgJiAweGZmKSk7ICAgIC8qIERPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSSyAq LworICAgICAgY2FzZSAweDIwMjY6IHJldHVybigoQ0hBUikoMHg4NSAmIDB4ZmYpKTsgLyogSE9S SVpPTlRBTCBFTExJUFNJUyAqLworICAgICAgY2FzZSAweDIwMjA6IHJldHVybigoQ0hBUikoMHg4 NiAmIDB4ZmYpKTsgLyogREFHR0VSICovCisgICAgICBjYXNlIDB4MjAyMTogcmV0dXJuKChDSEFS KSgweDg3ICYgMHhmZikpOyAvKiBET1VCTEUgREFHR0VSICovCisgICAgICBjYXNlIDB4MDJDNjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg4ICYgMHhmZikpOyAgICAvKiBNT0RJRklFUiBMRVRU RVIgQ0lSQ1VNRkxFWCBBQ0NFTlQgKi8KKyAgICAgIGNhc2UgMHgyMDMwOiByZXR1cm4oKENIQVIp KDB4ODkgJiAweGZmKSk7IC8qIFBFUiBNSUxMRSBTSUdOICovCisgICAgICBjYXNlIDB4MjAzOToK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDhCICYgMHhmZikpOyAgICAvKiBTSU5HTEUgTEVGVCBB TkdMRSBRVU9UQVRJT04gTUFSSyAqLworICAgICAgY2FzZSAweDAxNTI6IHJldHVybigoQ0hBUiko MHg4QyAmIDB4ZmYpKTsgLyogTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRSAqLworICAgICAgY2Fz ZSAweDIwMTg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsgICAgLyogTEVG VCBTSU5HTEUgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgyMDE5OgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7ICAgIC8qIFJJR0hUIFNJTkdMRSBRVU9UQVRJT04g TUFSSyAqLworICAgICAgY2FzZSAweDIwMUM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5MyAm IDB4ZmYpKTsgICAgLyogTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUksgKi8KKyAgICAgIGNhc2Ug MHgyMDFEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7ICAgIC8qIFJJR0hU IERPVUJMRSBRVU9UQVRJT04gTUFSSyAqLworICAgICAgY2FzZSAweDIwMjI6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHg5NSAmIDB4ZmYpKTsgICAgLyogQlVMTEVUICovCisgICAgICBjYXNlIDB4 MjAxMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk2ICYgMHhmZikpOyAgICAvKiBFTiBEQVNI ICovCisgICAgICBjYXNlIDB4MjAxNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk3ICYgMHhm ZikpOyAgICAvKiBFTSBEQVNIICovCisgICAgICBjYXNlIDB4MDJEQzoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweDk4ICYgMHhmZikpOyAgICAvKiBTTUFMTCBUSUxERSAqLworICAgICAgY2FzZSAw eDIxMjI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsgICAgLyogVFJBREUg TUFSSyBTSUdOICovCisgICAgICBjYXNlIDB4MjAzQToKKyAgICAgICAgLyogU0lOR0xFIFJJR0hU LVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVIgSyovCisgICAgICAgIHJldHVybigoQ0hBUiko MHg5QiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTUzOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4OUMgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExJR0FUVVJFIE9FICovCisgICAgICBj YXNlIDB4MDE3ODoKKyAgICAgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIERJQUVS RVNJUyAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4OUYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBBMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEEwICYgMHhmZikpOyAgICAvKiBOTy1C UkVBSyBTUEFDRSAqLworICAgICAgY2FzZSAweDAwQTE6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhBMSAmIDB4ZmYpKTsgICAgLyogSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSyAqLworICAgICAg Y2FzZSAweDAwQTI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBMiAmIDB4ZmYpKTsgICAgLyog Q0VOVCBTSUdOICovCisgICAgICBjYXNlIDB4MDBBMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eEEzICYgMHhmZikpOyAgICAvKiBQT1VORCBTSUdOICovCisgICAgICBjYXNlIDB4MDBBNDoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweEE0ICYgMHhmZikpOyAgICAvKiBDVVJSRU5DWSBTSUdOICov CisgICAgICBjYXNlIDB4MDBBNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE1ICYgMHhmZikp OyAgICAvKiBZRU4gU0lHTiAqLworICAgICAgY2FzZSAweDAwQTY6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhBNiAmIDB4ZmYpKTsgICAgLyogQlJPS0VOIEJBUiAqLworICAgICAgY2FzZSAweDAw QTc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBNyAmIDB4ZmYpKTsgICAgLyogU0VDVElPTiBT SUdOICovCisgICAgICBjYXNlIDB4MDBBODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE4ICYg MHhmZikpOyAgICAvKiBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwMEE5OgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QTkgJiAweGZmKSk7ICAgIC8qIENPUFlSSUdIVCBTSUdOICovCisgICAg ICBjYXNlIDB4MDBBQToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFBICYgMHhmZikpOyAgICAv KiBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUiAqLworICAgICAgY2FzZSAweDAwQUI6CisgICAg ICAgIC8qIExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLICovCisgICAg ICAgIHJldHVybigoQ0hBUikoMHhBQiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMEFDOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QUMgJiAweGZmKSk7ICAgIC8qIE5PVCBTSUdOICovCisgICAg ICBjYXNlIDB4MDBBRDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFEICYgMHhmZikpOyAgICAv KiBTT0ZUIEhZUEhFTiAqLworICAgICAgY2FzZSAweDAwQUU6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhBRSAmIDB4ZmYpKTsgICAgLyogUkVHSVNURVJFRCBTSUdOICovCisgICAgICBjYXNlIDB4 MDBBRjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFGICYgMHhmZikpOyAgICAvKiBNQUNST04g Ki8KKyAgICAgIGNhc2UgMHgwMEIwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjAgJiAweGZm KSk7ICAgIC8qIERFR1JFRSBTSUdOICovCisgICAgICBjYXNlIDB4MDBCMToKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEIxICYgMHhmZikpOyAgICAvKiBQTFVTLU1JTlVTIFNJR04gKi8KKyAgICAg IGNhc2UgMHgwMEIyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjIgJiAweGZmKSk7ICAgIC8q IFNVUEVSU0NSSVBUIFRXTyAqLworICAgICAgY2FzZSAweDAwQjM6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhCMyAmIDB4ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQgVEhSRUUgKi8KKyAgICAgIGNh c2UgMHgwMEI0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjQgJiAweGZmKSk7ICAgIC8qIEFD VVRFIEFDQ0VOVCAqLworICAgICAgY2FzZSAweDAwQjU6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhCNSAmIDB4ZmYpKTsgICAgLyogTUlDUk8gU0lHTiAqLworICAgICAgY2FzZSAweDAwQjY6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhCNiAmIDB4ZmYpKTsgICAgLyogUElMQ1JPVyBTSUdOICov CisgICAgICBjYXNlIDB4MDBCNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEI3ICYgMHhmZikp OyAgICAvKiBNSURETEUgRE9UICovCisgICAgICBjYXNlIDB4MDBCODoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEI4ICYgMHhmZikpOyAgICAvKiBDRURJTExBICovCisgICAgICBjYXNlIDB4MDBC OToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEI5ICYgMHhmZikpOyAgICAvKiBTVVBFUlNDUklQ VCBPTkUgKi8KKyAgICAgIGNhc2UgMHgwMEJBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkEg JiAweGZmKSk7ICAgIC8qIE1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUiAqLworICAgICAgY2Fz ZSAweDAwQkI6CisgICAgICAgIC8qIFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJ T04gTUFSIEsqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4QkIgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBCQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJDICYgMHhmZikpOyAgICAvKiBW VUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIgKi8KKyAgICAgIGNhc2UgMHgwMEJEOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4QkQgJiAweGZmKSk7ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBPTkUg SEFMRiAqLworICAgICAgY2FzZSAweDAwQkU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCRSAm IDB4ZmYpKTsgICAgLyogVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTICovCisgICAgICBj YXNlIDB4MDBCRjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEJGICYgMHhmZikpOyAgICAvKiBJ TlZFUlRFRCBRVUVTVElPTiBNQVJLICovCisgICAgICBjYXNlIDB4MDBDMDoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEMwICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJ VEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgwMEMxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 QzEgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURSAqLwor ICAgICAgY2FzZSAweDAwQzI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDMiAmIDB4ZmYpKTsg ICAgLyogQSBDSVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4MDEwMjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEMzICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEgg QlJFVkUgKi8KKyAgICAgIGNhc2UgMHgwMEM0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzQg JiAweGZmKSk7ICAgIC8qIEEgRElBRVJFU0lTICovCisgICAgICBjYXNlIDB4MDBDNToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEM1ICYgMHhmZikpOyAgICAvKiBBIFJJTkcgKi8KKyAgICAgIGNh c2UgMHgwMEM2OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzYgJiAweGZmKSk7ICAgIC8qIExB VElOIENBUElUQUwgTEVUVEVSIEFFICovCisgICAgICBjYXNlIDB4MDBDNzoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEM3ICYgMHhmZikpOyAgICAvKiBDIENFRElMTEEgKi8KKyAgICAgIGNhc2Ug MHgwMEM4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzggJiAweGZmKSk7ICAgIC8qIEUgR1JB VkUgKi8KKyAgICAgIGNhc2UgMHgwMEM5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QzkgJiAw eGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURSAqLworICAgICAg Y2FzZSAweDAwQ0E6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDQSAmIDB4ZmYpKTsgICAgLyog RSBXSVRIIENJUkNVTUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMENCOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4Q0IgJiAweGZmKSk7ICAgIC8qIEUgV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgIGNh c2UgMHgwMzAwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0MgJiAweGZmKSk7ICAgIC8qIENP TUJJTklORyBHUkFWRSBBQ0NFTlQgKi8KKyAgICAgIGNhc2UgMHgwMENEOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4Q0QgJiAweGZmKSk7ICAgIC8qIEkgV0lUSCBBQ1VURSAqLworICAgICAgY2Fz ZSAweDAwQ0U6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDRSAmIDB4ZmYpKTsgICAgLyogSSBX SVRIIENJUkNVTUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMENGOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4Q0YgJiAweGZmKSk7ICAgIC8qIEkgV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2Ug MHgwMTEwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDAgJiAweGZmKSk7ICAgIC8qIEQgV0lU SCBTVFJPS0UgKi8KKyAgICAgIGNhc2UgMHgwMEQxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 RDEgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERSAqLwor ICAgICAgY2FzZSAweDAzMDk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhEMiAmIDB4ZmYpKTsg ICAgLyogQ09NQklOSU5HIEhPT0sgQUJPVkUgKi8KKyAgICAgIGNhc2UgMHgwMEQzOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4RDMgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVS IE8gV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRDQ6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhENCAmIDB4ZmYpKTsgICAgLyogTyBXSVRIIENJUkNVTUZMRVggKi8KKyAgICAgIGNhc2Ug MHgwMUEwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDUgJiAweGZmKSk7ICAgIC8qIExBVElO IENBUElUQUwgTEVUVEVSIE8gV0lUSCBIT1JOICovCisgICAgICBjYXNlIDB4MDBENjoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEQ2ICYgMHhmZikpOyAgICAvKiBPIFdJVEggRElBRVJFU0lTICov CisgICAgICBjYXNlIDB4MDBENzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ3ICYgMHhmZikp OyAgICAvKiBNVUxUSVBMSUNBVElPTiBTSUdOICovCisgICAgICBjYXNlIDB4MDBEODoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEQ4ICYgMHhmZikpOyAgICAvKiBPIFdJVEggU1RST0tFICovCisg ICAgICBjYXNlIDB4MDBEOToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEQ5ICYgMHhmZikpOyAg ICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgw MERBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4REEgJiAweGZmKSk7ICAgIC8qIExBVElOIENB UElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwREI6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhEQiAmIDB4ZmYpKTsgICAgLyogVSBXSVRIIENJUkNVTUZMRVggKi8K KyAgICAgIGNhc2UgMHgwMERDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4REMgJiAweGZmKSk7 ICAgIC8qIFUgV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwMUFGOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4REQgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFUg V0lUSCBIT1JOICovCisgICAgICBjYXNlIDB4MDMwMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eERFICYgMHhmZikpOyAgICAvKiBDT01CSU5JTkcgVElMREUgKi8KKyAgICAgIGNhc2UgMHgwMERG OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4REYgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxM IExFVFRFUiBTSEFSUCBTICovCisgICAgICBjYXNlIDB4MDBFMDoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEUwICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZF ICovCisgICAgICBjYXNlIDB4MDBFMToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEUxICYgMHhm ZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFICovCisgICAgICBjYXNl IDB4MDBFMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEUyICYgMHhmZikpOyAgICAvKiBTTUFM TCBBIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAxMDM6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhFMyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBC UkVWRSAqLworICAgICAgY2FzZSAweDAwRTQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFNCAm IDB4ZmYpKTsgICAgLyogU01BTEwgQSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAweDAw RTU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFNSAmIDB4ZmYpKTsgICAgLyogU01BTEwgQSBX SVRIIFJJTkcgQUJPVkUgKi8KKyAgICAgIGNhc2UgMHgwMEU2OgorICAgICAgICByZXR1cm4oKENI QVIpKDB4RTYgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBRSAqLworICAgICAg Y2FzZSAweDAwRTc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFNyAmIDB4ZmYpKTsgICAgLyog TEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBICovCisgICAgICBjYXNlIDB4MDBFODoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEU4ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBM RVRURVIgRSBXSVRIIEdSQVZFICovCisgICAgICBjYXNlIDB4MDBFOToKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEU5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFD VVRFICovCisgICAgICBjYXNlIDB4MDBFQToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVBICYg MHhmZikpOyAgICAvKiBTTUFMTCBFIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAw RUI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFQiAmIDB4ZmYpKTsgICAgLyogU01BTEwgRSBX SVRIIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAweDAzMDE6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhFQyAmIDB4ZmYpKTsgICAgLyogQ09NQklOSU5HIEFDVVRFIEFDQ0VOVCAqLworICAgICAg Y2FzZSAweDAwRUQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFRCAmIDB4ZmYpKTsgICAgLyog TEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRUU6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhFRSAmIDB4ZmYpKTsgICAgLyogU01BTEwgSSBXSVRIIENJ UkNVTUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMEVGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 RUYgJiAweGZmKSk7ICAgIC8qIFNNQUxMIEkgV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2Ug MHgwMTExOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjAgJiAweGZmKSk7ICAgIC8qIExBVElO IFNNQUxMIExFVFRFUiBEIFdJVEggU1RST0tFICovCisgICAgICBjYXNlIDB4MDBGMToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEYxICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIg TiBXSVRIIFRJTERFICovCisgICAgICBjYXNlIDB4MDMyMzoKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweEYyICYgMHhmZikpOyAgICAvKiBDT01CSU5JTkcgRE9UIEJFTE9XICovCisgICAgICBjYXNl IDB4MDBGMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEYzICYgMHhmZikpOyAgICAvKiBMQVRJ TiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBGNDoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweEY0ICYgMHhmZikpOyAgICAvKiBTTUFMTCBPIFdJVEggQ0lSQ1VN RkxFWCAqLworICAgICAgY2FzZSAweDAxQTE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGNSAm IDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT1JOICovCisgICAgICBj YXNlIDB4MDBGNjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY2ICYgMHhmZikpOyAgICAvKiBT TUFMTCBPIFdJVEggRElBRVJFU0lTICovCisgICAgICBjYXNlIDB4MDBGNzoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEY3ICYgMHhmZikpOyAgICAvKiBESVZJU0lPTiBTSUdOICovCisgICAgICBj YXNlIDB4MDBGODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY4ICYgMHhmZikpOyAgICAvKiBM QVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRSAqLworICAgICAgY2FzZSAweDAwRjk6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhGOSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVU VEVSIFUgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAwRkE6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhGQSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VU RSAqLworICAgICAgY2FzZSAweDAwRkI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGQiAmIDB4 ZmYpKTsgICAgLyogU01BTEwgVSBXSVRIIENJUkNVTUZMRVggKi8KKyAgICAgIGNhc2UgMHgwMEZD OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RkMgJiAweGZmKSk7ICAgIC8qIFNNQUxMIFUgV0lU SCBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwMUIwOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4RkQgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggSE9STiAqLwor ICAgICAgY2FzZSAweDIwQUI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGRSAmIDB4ZmYpKTsg ICAgLyogRE9ORyBTSUdOICovCisgICAgICBjYXNlIDB4MDBGRjoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEZGICYgMHhmZikpOyAgICAvKiBTTUFMTCBZIFdJVEggRElBRVJFU0lTICovCisgICAg ZGVmYXVsdDogcmV0dXJuKDB4MDAzZik7CisgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENvZGUgUGFnZSAwMzcgLSBFQkNESUMgKFUuUy4pICovCisj aWZkZWYgQ0tfQU5TSUMKK3R4X2NwMzcoVVNIT1JUIGMpCisjZWxzZQordHhfY3AzNyhjKSBVU0hP UlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHN3aXRjaCAoYykgeworICAgICAg Y2FzZSAweDAwMDA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgwMCAmIDB4ZmYpKTsgICAgLyog TlVMTCAqLworICAgICAgY2FzZSAweDAwMDE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgwMSAm IDB4ZmYpKTsgICAgLyogU1RBUlQgT0YgSEVBRElORyAqLworICAgICAgY2FzZSAweDAwMDI6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHgwMiAmIDB4ZmYpKTsgICAgLyogU1RBUlQgT0YgVEVYVCAq LworICAgICAgY2FzZSAweDAwMDM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgwMyAmIDB4ZmYp KTsgICAgLyogRU5EIE9GIFRFWFQgKi8KKyAgICAgIGNhc2UgMHgwMDlDOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4MDQgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgw MDA5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MDUgJiAweGZmKSk7ICAgIC8qIEhPUklaT05U QUwgVEFCVUxBVElPTiAqLworICAgICAgY2FzZSAweDAwODY6CisgICAgICAgIHJldHVybigoQ0hB UikoMHgwNiAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwN0Y6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHgwNyAmIDB4ZmYpKTsgICAgLyogREVMRVRFICovCisgICAg ICBjYXNlIDB4MDA5NzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDA4ICYgMHhmZikpOyAgICAv KiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA4RDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDA5ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA4RToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDBBICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBj YXNlIDB4MDAwQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDBCICYgMHhmZikpOyAgICAvKiBW RVJUSUNBTCBUQUJVTEFUSU9OICovCisgICAgICBjYXNlIDB4MDAwQzoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweDBDICYgMHhmZikpOyAgICAvKiBGT1JNIEZFRUQgKi8KKyAgICAgIGNhc2UgMHgw MDBEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MEQgJiAweGZmKSk7ICAgIC8qIENBUlJJQUdF IFJFVFVSTiAqLworICAgICAgY2FzZSAweDAwMEU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgw RSAmIDB4ZmYpKTsgICAgLyogU0hJRlQgT1VUICovCisgICAgICBjYXNlIDB4MDAwRjoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDBGICYgMHhmZikpOyAgICAvKiBTSElGVCBJTiAqLworICAgICAg Y2FzZSAweDAwMTA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgxMCAmIDB4ZmYpKTsgICAgLyog REFUQSBMSU5LIEVTQ0FQRSAqLworICAgICAgY2FzZSAweDAwMTE6CisgICAgICAgIHJldHVybigo Q0hBUikoMHgxMSAmIDB4ZmYpKTsgICAgLyogREVWSUNFIENPTlRST0wgT05FICovCisgICAgICBj YXNlIDB4MDAxMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDEyICYgMHhmZikpOyAgICAvKiBE RVZJQ0UgQ09OVFJPTCBUV08gKi8KKyAgICAgIGNhc2UgMHgwMDEzOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4MTMgJiAweGZmKSk7ICAgIC8qIERFVklDRSBDT05UUk9MIFRIUkVFICovCisgICAg ICBjYXNlIDB4MDA5RDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDE0ICYgMHhmZikpOyAgICAv KiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA4NToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDE1ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDAwODoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDE2ICYgMHhmZikpOyAgICAvKiBCQUNLU1BBQ0UgKi8KKyAgICAg IGNhc2UgMHgwMDg3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MTcgJiAweGZmKSk7ICAgIC8q IENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDE4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 MTggJiAweGZmKSk7ICAgIC8qIENBTkNFTCAqLworICAgICAgY2FzZSAweDAwMTk6CisgICAgICAg IHJldHVybigoQ0hBUikoMHgxOSAmIDB4ZmYpKTsgICAgLyogRU5EIE9GIE1FRElVTSAqLworICAg ICAgY2FzZSAweDAwOTI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgxQSAmIDB4ZmYpKTsgICAg LyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwOEY6CisgICAgICAgIHJldHVybigoQ0hBUiko MHgxQiAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwMUM6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHgxQyAmIDB4ZmYpKTsgICAgLyogRklMRSBTRVBBUkFUT1IgKi8K KyAgICAgIGNhc2UgMHgwMDFEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MUQgJiAweGZmKSk7 ICAgIC8qIEdST1VQIFNFUEFSQVRPUiAqLworICAgICAgY2FzZSAweDAwMUU6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHgxRSAmIDB4ZmYpKTsgICAgLyogUkVDT1JEIFNFUEFSQVRPUiAqLworICAg ICAgY2FzZSAweDAwMUY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgxRiAmIDB4ZmYpKTsgICAg LyogVU5JVCBTRVBBUkFUT1IgKi8KKyAgICAgIGNhc2UgMHgwMDgwOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4MjAgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDgx OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MjEgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8K KyAgICAgIGNhc2UgMHgwMDgyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MjIgJiAweGZmKSk7 ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDgzOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4MjMgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDg0Ogor ICAgICAgICByZXR1cm4oKENIQVIpKDB4MjQgJiAweGZmKSk7ICAgIC8qIENPTlRST0wgKi8KKyAg ICAgIGNhc2UgMHgwMDBBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4MjUgJiAweGZmKSk7ICAg IC8qIExJTkUgRkVFRCAqLworICAgICAgY2FzZSAweDAwMTc6CisgICAgICAgIHJldHVybigoQ0hB UikoMHgyNiAmIDB4ZmYpKTsgICAgLyogRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSyAqLworICAg ICAgY2FzZSAweDAwMUI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgyNyAmIDB4ZmYpKTsgICAg LyogRVNDQVBFICovCisgICAgICBjYXNlIDB4MDA4ODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDI4ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA4OToKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDI5ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBj YXNlIDB4MDA4QToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDJBICYgMHhmZikpOyAgICAvKiBD T05UUk9MICovCisgICAgICBjYXNlIDB4MDA4QjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDJC ICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNlIDB4MDA4QzoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweDJDICYgMHhmZikpOyAgICAvKiBDT05UUk9MICovCisgICAgICBjYXNl IDB4MDAwNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDJEICYgMHhmZikpOyAgICAvKiBFTlFV SVJZICovCisgICAgICBjYXNlIDB4MDAwNjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDJFICYg MHhmZikpOyAgICAvKiBBQ0tOT1dMRURHRSAqLworICAgICAgY2FzZSAweDAwMDc6CisgICAgICAg IHJldHVybigoQ0hBUikoMHgyRiAmIDB4ZmYpKTsgICAgLyogQkVMTCAqLworICAgICAgY2FzZSAw eDAwOTA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzMCAmIDB4ZmYpKTsgICAgLyogQ09OVFJP TCAqLworICAgICAgY2FzZSAweDAwOTE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzMSAmIDB4 ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwMTY6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHgzMiAmIDB4ZmYpKTsgICAgLyogU1lOQ0hST05PVVMgSURMRSAqLworICAgICAg Y2FzZSAweDAwOTM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzMyAmIDB4ZmYpKTsgICAgLyog Q09OVFJPTCAqLworICAgICAgY2FzZSAweDAwOTQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgz NCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwOTU6CisgICAgICAg IHJldHVybigoQ0hBUikoMHgzNSAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2Fz ZSAweDAwOTY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzNiAmIDB4ZmYpKTsgICAgLyogQ09O VFJPTCAqLworICAgICAgY2FzZSAweDAwMDQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzNyAm IDB4ZmYpKTsgICAgLyogRU5EIE9GIFRSQU5TTUlTU0lPTiAqLworICAgICAgY2FzZSAweDAwOTg6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzOCAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLwor ICAgICAgY2FzZSAweDAwOTk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzOSAmIDB4ZmYpKTsg ICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwOUE6CisgICAgICAgIHJldHVybigoQ0hB UikoMHgzQSAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgICAgY2FzZSAweDAwOUI6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHgzQiAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAg ICAgY2FzZSAweDAwMTQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHgzQyAmIDB4ZmYpKTsgICAg LyogREVWSUNFIENPTlRST0wgRk9VUiAqLworICAgICAgY2FzZSAweDAwMTU6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHgzRCAmIDB4ZmYpKTsgICAgLyogTkVHQVRJVkUgQUNLTk9XTEVER0UgKi8K KyAgICAgIGNhc2UgMHgwMDlFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4M0UgJiAweGZmKSk7 ICAgIC8qIENPTlRST0wgKi8KKyAgICAgIGNhc2UgMHgwMDFBOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4M0YgJiAweGZmKSk7ICAgIC8qIFNVQlNUSVRVVEUgKi8KKyAgICAgIGNhc2UgMHgwMDIw OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NDAgJiAweGZmKSk7ICAgIC8qIFNQQUNFICovCisg ICAgICBjYXNlIDB4MDBBMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDQxICYgMHhmZikpOyAg ICAvKiBOTy1CUkVBSyBTUEFDRSAqLworICAgICAgY2FzZSAweDAwRTI6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHg0MiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1G TEVYICovCisgICAgICBjYXNlIDB4MDBFNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDQzICYg MHhmZikpOyAgICAvKiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgY2Fz ZSAweDAwRTA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg0NCAmIDB4ZmYpKTsgICAgLyogTEFU SU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAwRTE6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg0NSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVS IEEgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwRTM6CisgICAgICAgIHJldHVybigoQ0hB UikoMHg0NiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERSAq LworICAgICAgY2FzZSAweDAwRTU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg0NyAmIDB4ZmYp KTsgICAgLyogU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFICovCisgICAgICBjYXNlIDB4 MDBFNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDQ4ICYgMHhmZikpOyAgICAvKiBMQVRJTiBT TUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEgKi8KKyAgICAgIGNhc2UgMHgwMEYxOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4NDkgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBO IFdJVEggVElMREUgKi8KKyAgICAgIGNhc2UgMHgwMEEyOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4NEEgJiAweGZmKSk7ICAgIC8qIENFTlQgU0lHTiAqLworICAgICAgY2FzZSAweDAwMkU6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHg0QiAmIDB4ZmYpKTsgICAgLyogRlVMTCBTVE9QICovCisg ICAgICBjYXNlIDB4MDAzQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDRDICYgMHhmZikpOyAg ICAvKiBMRVNTLVRIQU4gU0lHTiAqLworICAgICAgY2FzZSAweDAwMjg6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHg0RCAmIDB4ZmYpKTsgICAgLyogTEVGVCBQQVJFTlRIRVNJUyAqLworICAgICAg Y2FzZSAweDAwMkI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg0RSAmIDB4ZmYpKTsgICAgLyog UExVUyBTSUdOICovCisgICAgICBjYXNlIDB4MDA3QzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDRGICYgMHhmZikpOyAgICAvKiBWRVJUSUNBTCBMSU5FICovCisgICAgICBjYXNlIDB4MDAyNjoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweDUwICYgMHhmZikpOyAgICAvKiBBTVBFUlNBTkQgKi8K KyAgICAgIGNhc2UgMHgwMEU5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NTEgJiAweGZmKSk7 ICAgIC8qIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMEVBOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4NTIgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBF IFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAwRUI6CisgICAgICAgIHJldHVybigo Q0hBUikoMHg1MyAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMg Ki8KKyAgICAgIGNhc2UgMHgwMEU4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NTQgJiAweGZm KSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2Ug MHgwMEVEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NTUgJiAweGZmKSk7ICAgIC8qIExBVElO IFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMEVFOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4NTYgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBJIFdJVEgg Q0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAwRUY6CisgICAgICAgIHJldHVybigoQ0hBUiko MHg1NyAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMgKi8KKyAg ICAgIGNhc2UgMHgwMEVDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NTggJiAweGZmKSk7ICAg IC8qIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgwMERG OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NTkgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRF UiBTSEFSUCBTIChHRVJNQU4pICovCisgICAgICBjYXNlIDB4MDAyMToKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweDVBICYgMHhmZikpOyAgICAvKiBFWENMQU1BVElPTiBNQVJLICovCisgICAgICBj YXNlIDB4MDAyNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDVCICYgMHhmZikpOyAgICAvKiBE T0xMQVIgU0lHTiAqLworICAgICAgY2FzZSAweDAwMkE6CisgICAgICAgIHJldHVybigoQ0hBUiko MHg1QyAmIDB4ZmYpKTsgICAgLyogQVNURVJJU0sgKi8KKyAgICAgIGNhc2UgMHgwMDI5OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4NUQgJiAweGZmKSk7ICAgIC8qIFJJR0hUIFBBUkVOVEhFU0lT ICovCisgICAgICBjYXNlIDB4MDAzQjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDVFICYgMHhm ZikpOyAgICAvKiBTRU1JQ09MT04gKi8KKyAgICAgIGNhc2UgMHgwMEFDOgorICAgICAgICByZXR1 cm4oKENIQVIpKDB4NUYgJiAweGZmKSk7ICAgIC8qIE5PVCBTSUdOICovCisgICAgICBjYXNlIDB4 MDAyRDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDYwICYgMHhmZikpOyAgICAvKiBIWVBIRU4t TUlOVVMgKi8KKyAgICAgIGNhc2UgMHgwMDJGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NjEg JiAweGZmKSk7ICAgIC8qIFNPTElEVVMgKi8KKyAgICAgIGNhc2UgMHgwMEMyOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4NjIgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIEEgV0lUSCBD SVJDVU1GTEVYICovCisgICAgICBjYXNlIDB4MDBDNDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDYzICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTICovCisg ICAgICBjYXNlIDB4MDBDMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDY0ICYgMHhmZikpOyAg ICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgw MEMxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NjUgJiAweGZmKSk7ICAgIC8qIExBVElOIENB UElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwQzM6CisgICAgICAg IHJldHVybigoQ0hBUikoMHg2NiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIg QSBXSVRIIFRJTERFICovCisgICAgICBjYXNlIDB4MDBDNToKKyAgICAgICAgcmV0dXJuKChDSEFS KSgweDY3ICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRSAq LworICAgICAgY2FzZSAweDAwQzc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg2OCAmIDB4ZmYp KTsgICAgLyogQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEgKi8KKyAgICAgIGNhc2UgMHgw MEQxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NjkgJiAweGZmKSk7ICAgIC8qIExBVElOIENB UElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERSAqLworICAgICAgY2FzZSAweDAwQTY6CisgICAgICAg IHJldHVybigoQ0hBUikoMHg2QSAmIDB4ZmYpKTsgICAgLyogQlJPS0VOIEJBUiAqLworICAgICAg Y2FzZSAweDAwMkM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg2QiAmIDB4ZmYpKTsgICAgLyog Q09NTUEgKi8KKyAgICAgIGNhc2UgMHgwMDI1OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NkMg JiAweGZmKSk7ICAgIC8qIFBFUkNFTlQgU0lHTiAqLworICAgICAgY2FzZSAweDAwNUY6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg2RCAmIDB4ZmYpKTsgICAgLyogTE9XIExJTkUgKi8KKyAgICAg IGNhc2UgMHgwMDNFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4NkUgJiAweGZmKSk7ICAgIC8q IEdSRUFURVItVEhBTiBTSUdOICovCisgICAgICBjYXNlIDB4MDAzRjoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweDZGICYgMHhmZikpOyAgICAvKiBRVUVTVElPTiBNQVJLICovCisgICAgICBjYXNl IDB4MDBGODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDcwICYgMHhmZikpOyAgICAvKiBMQVRJ TiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRSAqLworICAgICAgY2FzZSAweDAwQzk6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg3MSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRU RVIgRSBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBDQToKKyAgICAgICAgLyogTEFUSU4g Q0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVggKi8KKyAgICAgICAgcmV0dXJuKChDSEFS KSgweDcyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQ0I6CisgICAgICAgIC8qIExBVElOIENB UElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDczICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQzg6CisgICAgICAgIHJldHVybigoQ0hBUiko MHg3NCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFICov CisgICAgICBjYXNlIDB4MDBDRDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDc1ICYgMHhmZikp OyAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2Ug MHgwMENFOgorICAgICAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxF WCAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4NzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBDRjoKKyAgICAgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUyAq LworICAgICAgICByZXR1cm4oKENIQVIpKDB4NzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBD QzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDc4ICYgMHhmZikpOyAgICAvKiBMQVRJTiBDQVBJ VEFMIExFVFRFUiBJIFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgwMDYwOgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4NzkgJiAweGZmKSk7ICAgIC8qIEdSQVZFIEFDQ0VOVCAqLworICAgICAg Y2FzZSAweDAwM0E6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg3QSAmIDB4ZmYpKTsgICAgLyog Q09MT04gKi8KKyAgICAgIGNhc2UgMHgwMDIzOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4N0Ig JiAweGZmKSk7ICAgIC8qIE5VTUJFUiBTSUdOICovCisgICAgICBjYXNlIDB4MDA0MDoKKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDdDICYgMHhmZikpOyAgICAvKiBDT01NRVJDSUFMIEFUICovCisg ICAgICBjYXNlIDB4MDAyNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDdEICYgMHhmZikpOyAg ICAvKiBBUE9TVFJPUEhFICovCisgICAgICBjYXNlIDB4MDAzRDoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweDdFICYgMHhmZikpOyAgICAvKiBFUVVBTFMgU0lHTiAqLworICAgICAgY2FzZSAweDAw MjI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg3RiAmIDB4ZmYpKTsgICAgLyogUVVPVEFUSU9O IE1BUksgKi8KKyAgICAgIGNhc2UgMHgwMEQ4OgorICAgICAgICAvKiBMQVRJTiBDQVBJVEFMIExF VFRFUiBPIFdJVEggU1RST0tFICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMDYxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODEgJiAweGZm KSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBBICovCisgICAgICBjYXNlIDB4MDA2MjoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweDgyICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRU RVIgQiAqLworICAgICAgY2FzZSAweDAwNjM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4MyAm IDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEMgKi8KKyAgICAgIGNhc2UgMHgwMDY0 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4ODQgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxM IExFVFRFUiBEICovCisgICAgICBjYXNlIDB4MDA2NToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eDg1ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgRSAqLworICAgICAgY2FzZSAw eDAwNjY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg4NiAmIDB4ZmYpKTsgICAgLyogTEFUSU4g U01BTEwgTEVUVEVSIEYgKi8KKyAgICAgIGNhc2UgMHgwMDY3OgorICAgICAgICByZXR1cm4oKENI QVIpKDB4ODcgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBHICovCisgICAgICBj YXNlIDB4MDA2ODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDg4ICYgMHhmZikpOyAgICAvKiBM QVRJTiBTTUFMTCBMRVRURVIgSCAqLworICAgICAgY2FzZSAweDAwNjk6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHg4OSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEkgKi8KKyAg ICAgIGNhc2UgMHgwMEFCOgorICAgICAgICAvKiBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBR VU9UQVRJT04gTUFSSyAqLworICAgICAgICByZXR1cm4oKENIQVIpKDB4OEEgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBCQjoKKyAgICAgICAgLyogUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xF IFFVT1RBVElPTiBNQVIgSyovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4QiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMEYwOgorICAgICAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgRVRIIChJ Q0VMQU5ESUMpICovCisgICAgICAgIHJldHVybigoQ0hBUikoMHg4QyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMEZEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OEQgJiAweGZmKSk7ICAgIC8q IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMEZFOgor ICAgICAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4gKElDRUxBTkRJQykgKi8KKyAgICAg ICAgcmV0dXJuKChDSEFSKSgweDhFICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQjE6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHg4RiAmIDB4ZmYpKTsgICAgLyogUExVUy1NSU5VUyBTSUdOICov CisgICAgICBjYXNlIDB4MDBCMDoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDkwICYgMHhmZikp OyAgICAvKiBERUdSRUUgU0lHTiAqLworICAgICAgY2FzZSAweDAwNkE6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHg5MSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIEogKi8KKyAg ICAgIGNhc2UgMHgwMDZCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OTIgJiAweGZmKSk7ICAg IC8qIExBVElOIFNNQUxMIExFVFRFUiBLICovCisgICAgICBjYXNlIDB4MDA2QzoKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweDkzICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgTCAq LworICAgICAgY2FzZSAweDAwNkQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NCAmIDB4ZmYp KTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIE0gKi8KKyAgICAgIGNhc2UgMHgwMDZFOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4OTUgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRF UiBOICovCisgICAgICBjYXNlIDB4MDA2RjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk2ICYg MHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgTyAqLworICAgICAgY2FzZSAweDAwNzA6 CisgICAgICAgIHJldHVybigoQ0hBUikoMHg5NyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwg TEVUVEVSIFAgKi8KKyAgICAgIGNhc2UgMHgwMDcxOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 OTggJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBRICovCisgICAgICBjYXNlIDB4 MDA3MjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweDk5ICYgMHhmZikpOyAgICAvKiBMQVRJTiBT TUFMTCBMRVRURVIgUiAqLworICAgICAgY2FzZSAweDAwQUE6CisgICAgICAgIHJldHVybigoQ0hB UikoMHg5QSAmIDB4ZmYpKTsgICAgLyogRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IgKi8KKyAg ICAgIGNhc2UgMHgwMEJBOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OUIgJiAweGZmKSk7ICAg IC8qIE1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUiAqLworICAgICAgY2FzZSAweDAwRTY6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHg5QyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTElH QVRVUkUgQUUgKi8KKyAgICAgIGNhc2UgMHgwMEI4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 OUQgJiAweGZmKSk7ICAgIC8qIENFRElMTEEgKi8KKyAgICAgIGNhc2UgMHgwMEM2OgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4OUUgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTElHQVRV UkUgQUUgKi8KKyAgICAgIGNhc2UgMHgwMEE0OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4OUYg JiAweGZmKSk7ICAgIC8qIENVUlJFTkNZIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEI1OgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QTAgJiAweGZmKSk7ICAgIC8qIE1JQ1JPIFNJR04gKi8KKyAg ICAgIGNhc2UgMHgwMDdFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTEgJiAweGZmKSk7ICAg IC8qIFRJTERFICovCisgICAgICBjYXNlIDB4MDA3MzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgw eEEyICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgUyAqLworICAgICAgY2FzZSAw eDAwNzQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBMyAmIDB4ZmYpKTsgICAgLyogTEFUSU4g U01BTEwgTEVUVEVSIFQgKi8KKyAgICAgIGNhc2UgMHgwMDc1OgorICAgICAgICByZXR1cm4oKENI QVIpKDB4QTQgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBVICovCisgICAgICBj YXNlIDB4MDA3NjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEE1ICYgMHhmZikpOyAgICAvKiBM QVRJTiBTTUFMTCBMRVRURVIgViAqLworICAgICAgY2FzZSAweDAwNzc6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhBNiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFcgKi8KKyAg ICAgIGNhc2UgMHgwMDc4OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QTcgJiAweGZmKSk7ICAg IC8qIExBVElOIFNNQUxMIExFVFRFUiBYICovCisgICAgICBjYXNlIDB4MDA3OToKKyAgICAgICAg cmV0dXJuKChDSEFSKSgweEE4ICYgMHhmZikpOyAgICAvKiBMQVRJTiBTTUFMTCBMRVRURVIgWSAq LworICAgICAgY2FzZSAweDAwN0E6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBOSAmIDB4ZmYp KTsgICAgLyogTEFUSU4gU01BTEwgTEVUVEVSIFogKi8KKyAgICAgIGNhc2UgMHgwMEExOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4QUEgJiAweGZmKSk7ICAgIC8qIElOVkVSVEVEIEVYQ0xBTUFU SU9OIE1BUksgKi8KKyAgICAgIGNhc2UgMHgwMEJGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 QUIgJiAweGZmKSk7ICAgIC8qIElOVkVSVEVEIFFVRVNUSU9OIE1BUksgKi8KKyAgICAgIGNhc2Ug MHgwMEQwOgorICAgICAgICAvKiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEggKElDRUxBTkRJQykg Ki8KKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEFDICYgMHhmZikpOworICAgICAgY2FzZSAweDAw REQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhBRCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQ SVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFICovCisgICAgICBjYXNlIDB4MDBERToKKyAgICAgICAg LyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4gKElDRUxBTkRJQykgKi8KKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEFFICYgMHhmZikpOworICAgICAgY2FzZSAweDAwQUU6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhBRiAmIDB4ZmYpKTsgICAgLyogUkVHSVNURVJFRCBTSUdOICovCisgICAg ICBjYXNlIDB4MDA1RToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEIwICYgMHhmZikpOyAgICAv KiBDSVJDVU1GTEVYIEFDQ0VOVCAqLworICAgICAgY2FzZSAweDAwQTM6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhCMSAmIDB4ZmYpKTsgICAgLyogUE9VTkQgU0lHTiAqLworICAgICAgY2FzZSAw eDAwQTU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCMiAmIDB4ZmYpKTsgICAgLyogWUVOIFNJ R04gKi8KKyAgICAgIGNhc2UgMHgwMEI3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjMgJiAw eGZmKSk7ICAgIC8qIE1JRERMRSBET1QgKi8KKyAgICAgIGNhc2UgMHgwMEE5OgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4QjQgJiAweGZmKSk7ICAgIC8qIENPUFlSSUdIVCBTSUdOICovCisgICAg ICBjYXNlIDB4MDBBNzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEI1ICYgMHhmZikpOyAgICAv KiBTRUNUSU9OIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMEI2OgorICAgICAgICByZXR1cm4oKENI QVIpKDB4QjYgJiAweGZmKSk7ICAgIC8qIFBJTENST1cgU0lHTiAqLworICAgICAgY2FzZSAweDAw QkM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCNyAmIDB4ZmYpKTsgICAgLyogVlVMR0FSIEZS QUNUSU9OIE9ORSBRVUFSVEVSICovCisgICAgICBjYXNlIDB4MDBCRDoKKyAgICAgICAgcmV0dXJu KChDSEFSKSgweEI4ICYgMHhmZikpOyAgICAvKiBWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYgKi8K KyAgICAgIGNhc2UgMHgwMEJFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QjkgJiAweGZmKSk7 ICAgIC8qIFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUyAqLworICAgICAgY2FzZSAweDAw NUI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCQSAmIDB4ZmYpKTsgICAgLyogTEVGVCBTUVVB UkUgQlJBQ0tFVCAqLworICAgICAgY2FzZSAweDAwNUQ6CisgICAgICAgIHJldHVybigoQ0hBUiko MHhCQiAmIDB4ZmYpKTsgICAgLyogUklHSFQgU1FVQVJFIEJSQUNLRVQgKi8KKyAgICAgIGNhc2Ug MHgwMEFGOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkMgJiAweGZmKSk7ICAgIC8qIE1BQ1JP TiAqLworICAgICAgY2FzZSAweDAwQTg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhCRCAmIDB4 ZmYpKTsgICAgLyogRElBRVJFU0lTICovCisgICAgICBjYXNlIDB4MDBCNDoKKyAgICAgICAgcmV0 dXJuKChDSEFSKSgweEJFICYgMHhmZikpOyAgICAvKiBBQ1VURSBBQ0NFTlQgKi8KKyAgICAgIGNh c2UgMHgwMEQ3OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4QkYgJiAweGZmKSk7ICAgIC8qIE1V TFRJUExJQ0FUSU9OIFNJR04gKi8KKyAgICAgIGNhc2UgMHgwMDdCOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4QzAgJiAweGZmKSk7ICAgIC8qIExFRlQgQ1VSTFkgQlJBQ0tFVCAqLworICAgICAg Y2FzZSAweDAwNDE6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDMSAmIDB4ZmYpKTsgICAgLyog TEFUSU4gQ0FQSVRBTCBMRVRURVIgQSAqLworICAgICAgY2FzZSAweDAwNDI6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhDMiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgQiAq LworICAgICAgY2FzZSAweDAwNDM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDMyAmIDB4ZmYp KTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyAqLworICAgICAgY2FzZSAweDAwNDQ6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhDNCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBM RVRURVIgRCAqLworICAgICAgY2FzZSAweDAwNDU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhD NSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSAqLworICAgICAgY2FzZSAw eDAwNDY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDNiAmIDB4ZmYpKTsgICAgLyogTEFUSU4g Q0FQSVRBTCBMRVRURVIgRiAqLworICAgICAgY2FzZSAweDAwNDc6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhDNyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgRyAqLworICAg ICAgY2FzZSAweDAwNDg6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDOCAmIDB4ZmYpKTsgICAg LyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgSCAqLworICAgICAgY2FzZSAweDAwNDk6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhDOSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIg SSAqLworICAgICAgY2FzZSAweDAwQUQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhDQSAmIDB4 ZmYpKTsgICAgLyogU09GVCBIWVBIRU4gKi8KKyAgICAgIGNhc2UgMHgwMEY0OgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4Q0IgJiAweGZmKSk7ICAgIC8qIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lS Q1VNRkxFWCAqLworICAgICAgY2FzZSAweDAwRjY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhD QyAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMgKi8KKyAgICAg IGNhc2UgMHgwMEYyOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0QgJiAweGZmKSk7ICAgIC8q IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgwMEYzOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4Q0UgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExF VFRFUiBPIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMEY1OgorICAgICAgICByZXR1cm4o KENIQVIpKDB4Q0YgJiAweGZmKSk7ICAgIC8qIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElM REUgKi8KKyAgICAgIGNhc2UgMHgwMDdEOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDAgJiAw eGZmKSk7ICAgIC8qIFJJR0hUIENVUkxZIEJSQUNLRVQgKi8KKyAgICAgIGNhc2UgMHgwMDRBOgor ICAgICAgICByZXR1cm4oKENIQVIpKDB4RDEgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwg TEVUVEVSIEogKi8KKyAgICAgIGNhc2UgMHgwMDRCOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 RDIgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIEsgKi8KKyAgICAgIGNhc2Ug MHgwMDRDOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDMgJiAweGZmKSk7ICAgIC8qIExBVElO IENBUElUQUwgTEVUVEVSIEwgKi8KKyAgICAgIGNhc2UgMHgwMDREOgorICAgICAgICByZXR1cm4o KENIQVIpKDB4RDQgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIE0gKi8KKyAg ICAgIGNhc2UgMHgwMDRFOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDUgJiAweGZmKSk7ICAg IC8qIExBVElOIENBUElUQUwgTEVUVEVSIE4gKi8KKyAgICAgIGNhc2UgMHgwMDRGOgorICAgICAg ICByZXR1cm4oKENIQVIpKDB4RDYgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVS IE8gKi8KKyAgICAgIGNhc2UgMHgwMDUwOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDcgJiAw eGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFAgKi8KKyAgICAgIGNhc2UgMHgwMDUx OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RDggJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElU QUwgTEVUVEVSIFEgKi8KKyAgICAgIGNhc2UgMHgwMDUyOgorICAgICAgICByZXR1cm4oKENIQVIp KDB4RDkgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVUVEVSIFIgKi8KKyAgICAgIGNh c2UgMHgwMEI5OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4REEgJiAweGZmKSk7ICAgIC8qIFNV UEVSU0NSSVBUIE9ORSAqLworICAgICAgY2FzZSAweDAwRkI6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhEQiAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYICov CisgICAgICBjYXNlIDB4MDBGQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweERDICYgMHhmZikp OyAgICAvKiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUyAqLworICAgICAgY2FzZSAweDAw Rjk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhERCAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVU VEVSIFUgV0lUSCBHUkFWRSAqLworICAgICAgY2FzZSAweDAwRkE6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhERSAmIDB4ZmYpKTsgICAgLyogU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURSAqLwor ICAgICAgY2FzZSAweDAwRkY6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhERiAmIDB4ZmYpKTsg ICAgLyogU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMgKi8KKyAgICAgIGNhc2UgMHgwMDVD OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RTAgJiAweGZmKSk7ICAgIC8qIFJFVkVSU0UgU09M SURVUyAqLworICAgICAgY2FzZSAweDAwRjc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFMSAm IDB4ZmYpKTsgICAgLyogRElWSVNJT04gU0lHTiAqLworICAgICAgY2FzZSAweDAwNTM6CisgICAg ICAgIHJldHVybigoQ0hBUikoMHhFMiAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRU RVIgUyAqLworICAgICAgY2FzZSAweDAwNTQ6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFMyAm IDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgVCAqLworICAgICAgY2FzZSAweDAw NTU6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFNCAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQ SVRBTCBMRVRURVIgVSAqLworICAgICAgY2FzZSAweDAwNTY6CisgICAgICAgIHJldHVybigoQ0hB UikoMHhFNSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgViAqLworICAgICAg Y2FzZSAweDAwNTc6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFNiAmIDB4ZmYpKTsgICAgLyog TEFUSU4gQ0FQSVRBTCBMRVRURVIgVyAqLworICAgICAgY2FzZSAweDAwNTg6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhFNyAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgWCAq LworICAgICAgY2FzZSAweDAwNTk6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFOCAmIDB4ZmYp KTsgICAgLyogTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSAqLworICAgICAgY2FzZSAweDAwNUE6Cisg ICAgICAgIHJldHVybigoQ0hBUikoMHhFOSAmIDB4ZmYpKTsgICAgLyogTEFUSU4gQ0FQSVRBTCBM RVRURVIgWiAqLworICAgICAgY2FzZSAweDAwQjI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhF QSAmIDB4ZmYpKTsgICAgLyogU1VQRVJTQ1JJUFQgVFdPICovCisgICAgICBjYXNlIDB4MDBENDoK KyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVCICYgMHhmZikpOyAgICAvKiBDQVBJVEFMIExFVFRF UiBPIFdJVEggQ0lSQ1VNRkxFWCAqLworICAgICAgY2FzZSAweDAwRDY6CisgICAgICAgIHJldHVy bigoQ0hBUikoMHhFQyAmIDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVS RVNJUyAqLworICAgICAgY2FzZSAweDAwRDI6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhFRCAm IDB4ZmYpKTsgICAgLyogQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFICovCisgICAgICBjYXNl IDB4MDBEMzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEVFICYgMHhmZikpOyAgICAvKiBDQVBJ VEFMIExFVFRFUiBPIFdJVEggQUNVVEUgKi8KKyAgICAgIGNhc2UgMHgwMEQ1OgorICAgICAgICBy ZXR1cm4oKENIQVIpKDB4RUYgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIE8gV0lUSCBU SUxERSAqLworICAgICAgY2FzZSAweDAwMzA6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGMCAm IDB4ZmYpKTsgICAgLyogRElHSVQgWkVSTyAqLworICAgICAgY2FzZSAweDAwMzE6CisgICAgICAg IHJldHVybigoQ0hBUikoMHhGMSAmIDB4ZmYpKTsgICAgLyogRElHSVQgT05FICovCisgICAgICBj YXNlIDB4MDAzMjoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEYyICYgMHhmZikpOyAgICAvKiBE SUdJVCBUV08gKi8KKyAgICAgIGNhc2UgMHgwMDMzOgorICAgICAgICByZXR1cm4oKENIQVIpKDB4 RjMgJiAweGZmKSk7ICAgIC8qIERJR0lUIFRIUkVFICovCisgICAgICBjYXNlIDB4MDAzNDoKKyAg ICAgICAgcmV0dXJuKChDSEFSKSgweEY0ICYgMHhmZikpOyAgICAvKiBESUdJVCBGT1VSICovCisg ICAgICBjYXNlIDB4MDAzNToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY1ICYgMHhmZikpOyAg ICAvKiBESUdJVCBGSVZFICovCisgICAgICBjYXNlIDB4MDAzNjoKKyAgICAgICAgcmV0dXJuKChD SEFSKSgweEY2ICYgMHhmZikpOyAgICAvKiBESUdJVCBTSVggKi8KKyAgICAgIGNhc2UgMHgwMDM3 OgorICAgICAgICByZXR1cm4oKENIQVIpKDB4RjcgJiAweGZmKSk7ICAgIC8qIERJR0lUIFNFVkVO ICovCisgICAgICBjYXNlIDB4MDAzODoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEY4ICYgMHhm ZikpOyAgICAvKiBESUdJVCBFSUdIVCAqLworICAgICAgY2FzZSAweDAwMzk6CisgICAgICAgIHJl dHVybigoQ0hBUikoMHhGOSAmIDB4ZmYpKTsgICAgLyogRElHSVQgTklORSAqLworICAgICAgY2Fz ZSAweDAwQjM6CisgICAgICAgIHJldHVybigoQ0hBUikoMHhGQSAmIDB4ZmYpKTsgICAgLyogU1VQ RVJTQ1JJUFQgVEhSRUUgKi8KKyAgICAgIGNhc2UgMHgwMERCOgorICAgICAgICByZXR1cm4oKENI QVIpKDB4RkIgJiAweGZmKSk7ICAgIC8qIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVY ICovCisgICAgICBjYXNlIDB4MDBEQzoKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEZDICYgMHhm ZikpOyAgICAvKiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTICovCisgICAgICBjYXNl IDB4MDBEOToKKyAgICAgICAgcmV0dXJuKChDSEFSKSgweEZEICYgMHhmZikpOyAgICAvKiBMQVRJ TiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUgKi8KKyAgICAgIGNhc2UgMHgwMERBOgorICAg ICAgICByZXR1cm4oKENIQVIpKDB4RkUgJiAweGZmKSk7ICAgIC8qIExBVElOIENBUElUQUwgTEVU VEVSIFUgV0lUSCBBQ1VURSAqLworICAgICAgY2FzZSAweDAwOUY6CisgICAgICAgIHJldHVybigo Q0hBUikoMHhGRiAmIDB4ZmYpKTsgICAgLyogQ09OVFJPTCAqLworICAgIGRlZmF1bHQ6IHJldHVy bigweDAwM2YpOworICAgIH0KK30KKworCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDg1NSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9jcDg1 NShVU0hPUlQgYykKKyNlbHNlCit0eF9jcDg1NShjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhh cyBDMSBncmFwaGljcyAqLworICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3 aXRjaCAoYykgeworICAgICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwYWI6IHJldHVybigoQ0hBUikoMTc0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw YmI6IHJldHVybigoQ0hBUikoMTc1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDE6IHJldHVy bigoQ0hBUikoMTMzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDI6IHJldHVybigoQ0hBUiko MTI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDM6IHJldHVybigoQ0hBUikoMTMxICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MDQ6IHJldHVybigoQ0hBUikoMTM1ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MDU6IHJldHVybigoQ0hBUikoMTM3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MDY6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDc6IHJl dHVybigoQ0hBUikoMTQxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDg6IHJldHVybigoQ0hB UikoMTQzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDk6IHJldHVybigoQ0hBUikoMTQ1ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MGE6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MGI6IHJldHVybigoQ0hBUikoMTQ5ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MGM6IHJldHVybigoQ0hBUikoMTUxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MGU6 IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MGY6IHJldHVybigo Q0hBUikoMTU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTA6IHJldHVybigoQ0hBUikoMTYx ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTE6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MTI6IHJldHVybigoQ0hBUikoMjM2ICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MTM6IHJldHVybigoQ0hBUikoMTczICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MTQ6IHJldHVybigoQ0hBUikoMTY3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTU6IHJldHVy bigoQ0hBUikoMTY5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTY6IHJldHVybigoQ0hBUiko MjM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTc6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MTg6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MTk6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MWE6IHJldHVybigoQ0hBUikoMTk5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWI6IHJl dHVybigoQ0hBUikoMjA5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWM6IHJldHVybigoQ0hB UikoMjExICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWQ6IHJldHVybigoQ0hBUikoMjEzICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MWU6IHJldHVybigoQ0hBUikoMjE1ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MWY6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MjA6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjE6 IHJldHVybigoQ0hBUikoMjI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjI6IHJldHVybigo Q0hBUikoMjMwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikoMjMy ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjQ6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MjU6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MjY6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 Mjc6IHJldHVybigoQ0hBUikoMjUyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mjg6IHJldHVy bigoQ0hBUikoMjQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUiko MjUwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmE6IHJldHVybigoQ0hBUikoMTU5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MmI6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MmM6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MmQ6IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmU6IHJl dHVybigoQ0hBUikoMTU3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmY6IHJldHVybigoQ0hB UikoMjI0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzA6IHJldHVybigoQ0hBUikoMTYwICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MzE6IHJldHVybigoQ0hBUikoMTYyICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MzI6IHJldHVybigoQ0hBUikoMjM1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MzM6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzQ6 IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzU6IHJldHVybigo Q0hBUikoMTY4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzY6IHJldHVybigoQ0hBUikoMjMz ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mzc6IHJldHVybigoQ0hBUikoMjQzICYgMHhmZikp OworICAgICAgY2FzZSAweDA0Mzg6IHJldHVybigoQ0hBUikoMTgzICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0Mzk6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 M2E6IHJldHVybigoQ0hBUikoMTk4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2I6IHJldHVy bigoQ0hBUikoMjA4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2M6IHJldHVybigoQ0hBUiko MjEwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2Q6IHJldHVybigoQ0hBUikoMjEyICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0M2U6IHJldHVybigoQ0hBUikoMjE0ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0M2Y6IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0NDA6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDE6IHJl dHVybigoQ0hBUikoMjI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDI6IHJldHVybigoQ0hB UikoMjI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDM6IHJldHVybigoQ0hBUikoMjMxICYg MHhmZikpOworICAgICAgY2FzZSAweDA0NDQ6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0NDU6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0NDY6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDc6 IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDg6IHJldHVybigo Q0hBUikoMjQ1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDk6IHJldHVybigoQ0hBUikoMjQ5 ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGE6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikp OworICAgICAgY2FzZSAweDA0NGI6IHJldHVybigoQ0hBUikoMjQxICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0NGM6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 NGQ6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGU6IHJldHVy bigoQ0hBUikoMTU2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGY6IHJldHVybigoQ0hBUiko MjIyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTE6IHJldHVybigoQ0hBUikoMTMyICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0NTI6IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0NTM6IHJldHVybigoQ0hBUikoMTMwICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0NTQ6IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTU6IHJl dHVybigoQ0hBUikoMTM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTY6IHJldHVybigoQ0hB UikoMTM4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTc6IHJldHVybigoQ0hBUikoMTQwICYg MHhmZikpOworICAgICAgY2FzZSAweDA0NTg6IHJldHVybigoQ0hBUikoMTQyICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0NTk6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0NWE6IHJldHVybigoQ0hBUikoMTQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NWI6 IHJldHVybigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NWM6IHJldHVybigo Q0hBUikoMTUwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NWU6IHJldHVybigoQ0hBUikoMTUy ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NWY6IHJldHVybigoQ0hBUikoMTU0ICYgMHhmZikp OworICAgICAgY2FzZSAweDIxMTY6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikoMTk2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 MDI6IHJldHVybigoQ0hBUikoMTc5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MGM6IHJldHVy bigoQ0hBUikoMjE4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUiko MTkxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTkyICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikoMTk1ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1MjQ6IHJldHVybigoQ0hBUikoMTgwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MmM6IHJl dHVybigoQ0hBUikoMTk0ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hB UikoMTkzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3ICYg MHhmZikpOworICAgICAgY2FzZSAweDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMTg2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTc6 IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWE6IHJldHVybigo Q0hBUikoMjAwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWQ6IHJldHVybigoQ0hBUikoMTg4 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 Njk6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NmM6IHJldHVy bigoQ0hBUikoMjA2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hBUiko MjIzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikoMjIwICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMTc2ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1OTI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTM6IHJl dHVybigoQ0hBUikoMTc4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hB UikoMjU0ICYgMHhmZikpOworICAgICAgZGVmYXVsdDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAg IC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8KKyAgICB9Cit9CisKK2ludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQQyBDb2RlIFBhZ2UgODU2ICovCisjaWZkZWYg Q0tfQU5TSUMKK3R4X2NwODU2KFVTSE9SVCBjKQorI2Vsc2UKK3R4X2NwODU2KGMpIFVTSE9SVCBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAg ICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNzICovCisgICAgICByZXR1cm4oKENIQVIpKGMg JiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChD SEFSKSgweGZmICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikoMHhk NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDB4ZjggJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKSgweGYxICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYjI6IHJldHVybigoQ0hBUikoMHhmZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGI1OiByZXR1cm4oKENIQVIpKDB4ZTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNzog cmV0dXJuKChDSEFSKSgweGZhICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGY6IHJldHVybigo Q0hBUikoMHhlMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY3OiByZXR1cm4oKENIQVIpKDB4 ZjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5MzogcmV0dXJuKChDSEFSKSgweGUyICYgMHhm ZikpOworICAgICAgY2FzZSAweDAzOTg6IHJldHVybigoQ0hBUikoMHhlOSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwM2EzOiByZXR1cm4oKENIQVIpKDB4ZTQgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDNhNjogcmV0dXJuKChDSEFSKSgweGU4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYTk6 IHJldHVybigoQ0hBUikoMHhlYSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2IxOiByZXR1cm4o KENIQVIpKDB4ZTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiNDogcmV0dXJuKChDSEFSKSgw eGViICYgMHhmZikpOworICAgICAgY2FzZSAweDAzYjU6IHJldHVybigoQ0hBUikoMHhlZSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MwOiByZXR1cm4oKENIQVIpKDB4ZTMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDNjMzogcmV0dXJuKChDSEFSKSgweGU1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAzYzQ6IHJldHVybigoQ0hBUikoMHhlNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2M2 OiByZXR1cm4oKENIQVIpKDB4ZWQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxMDogcmV0dXJu KChDSEFSKSgweDgwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTE6IHJldHVybigoQ0hBUiko MHg4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDEyOiByZXR1cm4oKENIQVIpKDB4ODIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQxMzogcmV0dXJuKChDSEFSKSgweDgzICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hBUikoMHg4NCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDE1OiByZXR1cm4oKENIQVIpKDB4ODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQx NjogcmV0dXJuKChDSEFSKSgweDg2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTc6IHJldHVy bigoQ0hBUikoMHg4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDE4OiByZXR1cm4oKENIQVIp KDB4ODggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxOTogcmV0dXJuKChDSEFSKSgweDg5ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MWE6IHJldHVybigoQ0hBUikoMHg4YSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNDFiOiByZXR1cm4oKENIQVIpKDB4OGIgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDQxYzogcmV0dXJuKChDSEFSKSgweDhjICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MWQ6IHJldHVybigoQ0hBUikoMHg4ZCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDFlOiByZXR1 cm4oKENIQVIpKDB4OGUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQxZjogcmV0dXJuKChDSEFS KSgweDhmICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hBUikoMHg5MCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDIxOiByZXR1cm4oKENIQVIpKDB4OTEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDQyMjogcmV0dXJuKChDSEFSKSgweDkyICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MjM6IHJldHVybigoQ0hBUikoMHg5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NDI0OiByZXR1cm4oKENIQVIpKDB4OTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyNTogcmV0 dXJuKChDSEFSKSgweDk1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hB UikoMHg5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDI3OiByZXR1cm4oKENIQVIpKDB4OTcg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyODogcmV0dXJuKChDSEFSKSgweDk4ICYgMHhmZikp OworICAgICAgY2FzZSAweDA0Mjk6IHJldHVybigoQ0hBUikoMHg5OSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNDJhOiByZXR1cm4oKENIQVIpKDB4OWEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDQyYjogcmV0dXJuKChDSEFSKSgweDliICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmM6IHJl dHVybigoQ0hBUikoMHg5YyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDJkOiByZXR1cm4oKENI QVIpKDB4OWQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQyZTogcmV0dXJuKChDSEFSKSgweDll ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmY6IHJldHVybigoQ0hBUikoMHg5ZiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNDMwOiByZXR1cm4oKENIQVIpKDB4YTAgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDQzMTogcmV0dXJuKChDSEFSKSgweGExICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MzI6IHJldHVybigoQ0hBUikoMHhhMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDMzOiBy ZXR1cm4oKENIQVIpKDB4YTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzNDogcmV0dXJuKChD SEFSKSgweGE0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzU6IHJldHVybigoQ0hBUikoMHhh NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDM2OiByZXR1cm4oKENIQVIpKDB4YTYgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDQzNzogcmV0dXJuKChDSEFSKSgweGE3ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0Mzg6IHJldHVybigoQ0hBUikoMHhhOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNDM5OiByZXR1cm4oKENIQVIpKDB4YTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzYTog cmV0dXJuKChDSEFSKSgweGFhICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2I6IHJldHVybigo Q0hBUikoMHhhYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDNjOiByZXR1cm4oKENIQVIpKDB4 YWMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQzZDogcmV0dXJuKChDSEFSKSgweGFkICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0M2U6IHJldHVybigoQ0hBUikoMHhhZSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNDNmOiByZXR1cm4oKENIQVIpKDB4YWYgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDQ0MDogcmV0dXJuKChDSEFSKSgweGIwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDE6 IHJldHVybigoQ0hBUikoMHhiMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQyOiByZXR1cm4o KENIQVIpKDB4YjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0MzogcmV0dXJuKChDSEFSKSgw eGIzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDQ6IHJldHVybigoQ0hBUikoMHhiNCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ1OiByZXR1cm4oKENIQVIpKDB4YjUgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDQ0NjogcmV0dXJuKChDSEFSKSgweGI2ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0NDc6IHJldHVybigoQ0hBUikoMHhiNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDQ4 OiByZXR1cm4oKENIQVIpKDB4YjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0OTogcmV0dXJu KChDSEFSKSgweGI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGE6IHJldHVybigoQ0hBUiko MHhiYSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNDRiOiByZXR1cm4oKENIQVIpKDB4YmIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDQ0YzogcmV0dXJuKChDSEFSKSgweGJjICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0NGQ6IHJldHVybigoQ0hBUikoMHhiZCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNDRlOiByZXR1cm4oKENIQVIpKDB4YmUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDQ0 ZjogcmV0dXJuKChDSEFSKSgweGJmICYgMHhmZikpOworICAgICAgY2FzZSAweDIwN2Y6IHJldHVy bigoQ0hBUikoMHhmYyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMTE2OiByZXR1cm4oKENIQVIp KDB4ZDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjIxOTogcmV0dXJuKChDSEFSKSgweGY5ICYg MHhmZikpOworICAgICAgY2FzZSAweDIyMWE6IHJldHVybigoQ0hBUikoMHhmYiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyMjFlOiByZXR1cm4oKENIQVIpKDB4ZWMgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjIyOTogcmV0dXJuKChDSEFSKSgweGVmICYgMHhmZikpOworICAgICAgY2FzZSAweDIy NDg6IHJldHVybigoQ0hBUikoMHhmNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjYxOiByZXR1 cm4oKENIQVIpKDB4ZjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjI2NDogcmV0dXJuKChDSEFS KSgweGYzICYgMHhmZikpOworICAgICAgY2FzZSAweDIyNjU6IHJldHVybigoQ0hBUikoMHhmMiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMzIwOiByZXR1cm4oKENIQVIpKDB4ZjQgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjMyMTogcmV0dXJuKChDSEFSKSgweGY1ICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1MDA6IHJldHVybigoQ0hBUikoMHhjNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTAyOiByZXR1cm4oKENIQVIpKDB4ZDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwYzogcmV0 dXJuKChDSEFSKSgweGRhICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hB UikoMHhjZiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDB4YzAg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgweGQ5ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1MWM6IHJldHVybigoQ0hBUikoMHhjMyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpKDB4ZDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjUyYzogcmV0dXJuKChDSEFSKSgweGMyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MzQ6IHJl dHVybigoQ0hBUikoMHhjMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENI QVIpKDB4YzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgweGNk ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTE6IHJldHVybigoQ0hBUikoMHhjNyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oKENIQVIpKDB4YzkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU1NzogcmV0dXJuKChDSEFSKSgweGQ3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1NWE6IHJldHVybigoQ0hBUikoMHhjOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVkOiBy ZXR1cm4oKENIQVIpKDB4ZDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChD SEFSKSgweGNjICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjM6IHJldHVybigoQ0hBUikoMHhj NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDB4Y2IgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKSgweGNhICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1NmM6IHJldHVybigoQ0hBUikoMHhjZSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTgwOiByZXR1cm4oKENIQVIpKDB4ZGYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4NDog cmV0dXJuKChDSEFSKSgweGRjICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODg6IHJldHVybigo Q0hBUikoMHhkYiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNThjOiByZXR1cm4oKENIQVIpKDB4 ZGQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MDogcmV0dXJuKChDSEFSKSgweGRlICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUikoMHhkMCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENIQVIpKDB4ZDEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU5MzogcmV0dXJuKChDSEFSKSgweGQyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1YTA6 IHJldHVybigoQ0hBUikoMHhmZSAmIDB4ZmYpKTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9j cHN1YihjKSk7ICAgICAvKiBGb3IgYm94IGNoYXJhY3RlcnMgZXRjICovCisgICAgfQorfQorCitp bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDg1 NyAqLworI2lmZGVmIENLX0FOU0lDCit0eF9jcDg1NyhVU0hPUlQgYykKKyNlbHNlCit0eF9jcDg1 NyhjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGlmIChjIDwgMHg4 MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGljcyAqLworICAgICAgcmV0 dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSAweDAw Yzc6IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmM6IHJldHVy bigoQ0hBUikoMTI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTk6IHJldHVybigoQ0hBUiko MTMwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTI6IHJldHVybigoQ0hBUikoMTMxICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZTQ6IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwZTA6IHJldHVybigoQ0hBUikoMTMzICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZTU6IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTc6IHJl dHVybigoQ0hBUikoMTM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWE6IHJldHVybigoQ0hB UikoMTM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWI6IHJldHVybigoQ0hBUikoMTM3ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZTg6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAwZWY6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwZWU6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMzE6 IHJldHVybigoQ0hBUikoMTQxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzQ6IHJldHVybigo Q0hBUikoMTQyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzU6IHJldHVybigoQ0hBUikoMTQz ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYzk6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZTY6IHJldHVybigoQ0hBUikoMTQ1ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwYzY6IHJldHVybigoQ0hBUikoMTQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAw ZjQ6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjY6IHJldHVy bigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjI6IHJldHVybigoQ0hBUiko MTQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmI6IHJldHVybigoQ0hBUikoMTUwICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwZjk6IHJldHVybigoQ0hBUikoMTUxICYgMHhmZikpOworICAg ICAgY2FzZSAweDAxMzA6IHJldHVybigoQ0hBUikoMTUyICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwZDY6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZGM6IHJl dHVybigoQ0hBUikoMTU0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjg6IHJldHVybigoQ0hB UikoMTU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTM6IHJldHVybigoQ0hBUikoMTU2ICYg MHhmZikpOworICAgICAgY2FzZSAweDAwZDg6IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDAxNWU6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAxNWY6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZTE6 IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZWQ6IHJldHVybigo Q0hBUikoMTYxICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZjM6IHJldHVybigoQ0hBUikoMTYy ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwZmE6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikp OworICAgICAgY2FzZSAweDAwZjE6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAg Y2FzZSAweDAwZDE6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDAx MWU6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOworICAgICAgY2FzZSAweDAxMWY6IHJldHVy bigoQ0hBUikoMTY3ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmY6IHJldHVybigoQ0hBUiko MTY4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWU6IHJldHVybigoQ0hBUikoMTY5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOworICAg ICAgY2FzZSAweDAwYmQ6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOworICAgICAgY2FzZSAw eDAwYmM6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYTE6IHJl dHVybigoQ0hBUikoMTczICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYWI6IHJldHVybigoQ0hB UikoMTc0ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikoMTc1ICYg MHhmZikpOworICAgICAgY2FzZSAweDIwYWM6IHJldHVybigoQ0hBUikoMjEzICYgMHhmZikpOyAv KiBFdXJvICovCisgICAgICBjYXNlIDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU5MzogcmV0dXJuKChDSEFSKSgxNzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUw MjogcmV0dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyNDogcmV0dXJu KChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMTogcmV0dXJuKChDSEFSKSgx ODEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMjogcmV0dXJuKChDSEFSKSgxODIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjMDogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBhOTogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MTogcmV0 dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NzogcmV0dXJuKChDSEFS KSgxODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKSgxODggJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhMjogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhNTogcmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjUxMDogcmV0dXJuKChDSEFSKSgxOTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxNDog cmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChD SEFSKSgxOTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyYzogcmV0dXJuKChDSEFSKSgxOTQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBl MzogcmV0dXJuKChDSEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjMzogcmV0dXJu KChDSEFSKSgxOTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1YTogcmV0dXJuKChDSEFSKSgy MDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU2OTogcmV0dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1MDogcmV0 dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2YzogcmV0dXJuKChDSEFS KSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNDogcmV0dXJuKChDSEFSKSgyMDcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBiYTogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBhYTogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBjYTogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjYjog cmV0dXJuKChDSEFSKSgyMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjODogcmV0dXJuKChD SEFSKSgyMTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZDogcmV0dXJuKChDSEFSKSgyMTQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBjZTogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBjZjogcmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUw YzogcmV0dXJuKChDSEFSKSgyMTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4ODogcmV0dXJu KChDSEFSKSgyMTkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgy MjAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNjogcmV0dXJuKChDSEFSKSgyMjEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBjYzogcmV0dXJuKChDSEFSKSgyMjIgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgyMjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBkMzogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkZjogcmV0 dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNDogcmV0dXJuKChDSEFS KSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkMjogcmV0dXJuKChDSEFSKSgyMjcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBmNTogcmV0dXJuKChDSEFSKSgyMjggJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBkNTogcmV0dXJuKChDSEFSKSgyMjkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBiNTogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkNzog cmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYTogcmV0dXJuKChD SEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkYjogcmV0dXJuKChDSEFSKSgyMzQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBkOTogcmV0dXJuKChDSEFSKSgyMzUgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBlYzogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBmZjogcmV0dXJuKChDSEFSKSgyMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBh ZjogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiNDogcmV0dXJu KChDSEFSKSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhZDogcmV0dXJuKChDSEFSKSgy NDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKSgyNDEgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiZTogcmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiNjogcmV0dXJuKChDSEFSKSgyNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBhNzogcmV0dXJuKChDSEFSKSgyNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBmNzogcmV0 dXJuKChDSEFSKSgyNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiODogcmV0dXJuKChDSEFS KSgyNDcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMDogcmV0dXJuKChDSEFSKSgyNDggJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgyNDkgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBiOTogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMzog cmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMjogcmV0dXJuKChD SEFSKSgyNTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKSgyNTQg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7 CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyogRm9yIGJveCBjaGFy YWN0ZXJzIGV0YyAqLworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBDIENvZGUgUGFnZSA4NjIgKi8KKyNpZmRlZiBDS19BTlNJQwordHhfY3A4 NjIoVVNIT1JUIGMpCisjZWxzZQordHhfY3A4NjIoYykgVVNIT1JUIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyAgICBpZiAoYyA8IDB4ODApICAgICAgICAgICAgICAgICAgICAgICAvKiBI YXMgQzEgZ3JhcGhpY3MgKi8KKyAgICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKyAgICBz d2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwNWQwOiByZXR1cm4oKENIQVIpKDEyOCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNWQxOiByZXR1cm4oKENIQVIpKDEyOSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNWQyOiByZXR1cm4oKENIQVIpKDEzMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NWQzOiByZXR1cm4oKENIQVIpKDEzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWQ0OiByZXR1 cm4oKENIQVIpKDEzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWQ1OiByZXR1cm4oKENIQVIp KDEzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWQ2OiByZXR1cm4oKENIQVIpKDEzNCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWQ3OiByZXR1cm4oKENIQVIpKDEzNSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwNWQ4OiByZXR1cm4oKENIQVIpKDEzNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwNWQ5OiByZXR1cm4oKENIQVIpKDEzNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWRhOiBy ZXR1cm4oKENIQVIpKDEzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWRiOiByZXR1cm4oKENI QVIpKDEzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWRjOiByZXR1cm4oKENIQVIpKDE0MCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWRkOiByZXR1cm4oKENIQVIpKDE0MSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwNWRlOiByZXR1cm4oKENIQVIpKDE0MiAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwNWRmOiByZXR1cm4oKENIQVIpKDE0MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWUw OiByZXR1cm4oKENIQVIpKDE0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWUxOiByZXR1cm4o KENIQVIpKDE0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWUyOiByZXR1cm4oKENIQVIpKDE0 NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWUzOiByZXR1cm4oKENIQVIpKDE0NyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwNWU0OiByZXR1cm4oKENIQVIpKDE0OCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwNWU1OiByZXR1cm4oKENIQVIpKDE0OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw NWU2OiByZXR1cm4oKENIQVIpKDE1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWU3OiByZXR1 cm4oKENIQVIpKDE1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWU4OiByZXR1cm4oKENIQVIp KDE1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWU5OiByZXR1cm4oKENIQVIpKDE1MyAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwNWVhOiByZXR1cm4oKENIQVIpKDE1NCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGEyOiByZXR1cm4oKENIQVIpKDE1NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGEzOiByZXR1cm4oKENIQVIpKDE1NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGE1OiBy ZXR1cm4oKENIQVIpKDE1NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMGE3OiByZXR1cm4oKENI QVIpKDE1OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMTkyOiByZXR1cm4oKENIQVIpKDE1OSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGUxOiByZXR1cm4oKENIQVIpKDE2MCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwMGVkOiByZXR1cm4oKENIQVIpKDE2MSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwMGYzOiByZXR1cm4oKENIQVIpKDE2MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGZh OiByZXR1cm4oKENIQVIpKDE2MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGYxOiByZXR1cm4o KENIQVIpKDE2NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGQxOiByZXR1cm4oKENIQVIpKDE2 NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFhOiByZXR1cm4oKENIQVIpKDE2NiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwMGJhOiByZXR1cm4oKENIQVIpKDE2NyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGJmOiByZXR1cm4oKENIQVIpKDE2OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MzEwOiByZXR1cm4oKENIQVIpKDE2OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGFjOiByZXR1 cm4oKENIQVIpKDE3MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJkOiByZXR1cm4oKENIQVIp KDE3MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGJjOiByZXR1cm4oKENIQVIpKDE3MiAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGExOiByZXR1cm4oKENIQVIpKDE3MyAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpKDE3NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwMGJiOiByZXR1cm4oKENIQVIpKDE3NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkxOiBy ZXR1cm4oKENIQVIpKDE3NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkyOiByZXR1cm4oKENI QVIpKDE3NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkzOiByZXR1cm4oKENIQVIpKDE3OCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTAyOiByZXR1cm4oKENIQVIpKDE3OSAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oKENIQVIpKDE4MCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTYxOiByZXR1cm4oKENIQVIpKDE4MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYy OiByZXR1cm4oKENIQVIpKDE4MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU2OiByZXR1cm4o KENIQVIpKDE4MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU1OiByZXR1cm4oKENIQVIpKDE4 NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYzOiByZXR1cm4oKENIQVIpKDE4NSAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTUxOiByZXR1cm4oKENIQVIpKDE4NiAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTU3OiByZXR1cm4oKENIQVIpKDE4NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTVkOiByZXR1cm4oKENIQVIpKDE4OCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVjOiByZXR1 cm4oKENIQVIpKDE4OSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTViOiByZXR1cm4oKENIQVIp KDE5MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTEwOiByZXR1cm4oKENIQVIpKDE5MSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oKENIQVIpKDE5MiAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIpKDE5MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTJjOiByZXR1cm4oKENIQVIpKDE5NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTFjOiBy ZXR1cm4oKENIQVIpKDE5NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENI QVIpKDE5NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTNjOiByZXR1cm4oKENIQVIpKDE5NyAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTVlOiByZXR1cm4oKENIQVIpKDE5OCAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTVmOiByZXR1cm4oKENIQVIpKDE5OSAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTVhOiByZXR1cm4oKENIQVIpKDIwMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU0 OiByZXR1cm4oKENIQVIpKDIwMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4o KENIQVIpKDIwMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY2OiByZXR1cm4oKENIQVIpKDIw MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTYwOiByZXR1cm4oKENIQVIpKDIwNCAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oKENIQVIpKDIwNSAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyNTZjOiByZXR1cm4oKENIQVIpKDIwNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy NTY3OiByZXR1cm4oKENIQVIpKDIwNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY4OiByZXR1 cm4oKENIQVIpKDIwOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY0OiByZXR1cm4oKENIQVIp KDIwOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTY1OiByZXR1cm4oKENIQVIpKDIxMCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTU5OiByZXR1cm4oKENIQVIpKDIxMSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgyNTU4OiByZXR1cm4oKENIQVIpKDIxMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyNTUyOiByZXR1cm4oKENIQVIpKDIxMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTUzOiBy ZXR1cm4oKENIQVIpKDIxNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZiOiByZXR1cm4oKENI QVIpKDIxNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTZhOiByZXR1cm4oKENIQVIpKDIxNiAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTE4OiByZXR1cm4oKENIQVIpKDIxNyAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgyNTBjOiByZXR1cm4oKENIQVIpKDIxOCAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgyNTg4OiByZXR1cm4oKENIQVIpKDIxOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTg0 OiByZXR1cm4oKENIQVIpKDIyMCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNThjOiByZXR1cm4o KENIQVIpKDIyMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTkwOiByZXR1cm4oKENIQVIpKDIy MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNTgwOiByZXR1cm4oKENIQVIpKDIyMyAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgwM2IxOiByZXR1cm4oKENIQVIpKDIyNCAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgwMGRmOiByZXR1cm4oKENIQVIpKDIyNSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgw MzkzOiByZXR1cm4oKENIQVIpKDIyNiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MwOiByZXR1 cm4oKENIQVIpKDIyNyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2EzOiByZXR1cm4oKENIQVIp KDIyOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2MzOiByZXR1cm4oKENIQVIpKDIyOSAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGI1OiByZXR1cm4oKENIQVIpKDIzMCAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwM2M0OiByZXR1cm4oKENIQVIpKDIzMSAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgwM2E2OiByZXR1cm4oKENIQVIpKDIzMiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMzk4OiBy ZXR1cm4oKENIQVIpKDIzMyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2E5OiByZXR1cm4oKENI QVIpKDIzNCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwM2I0OiByZXR1cm4oKENIQVIpKDIzNSAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjFlOiByZXR1cm4oKENIQVIpKDIzNiAmIDB4ZmYpKTsK KyAgICAgIGNhc2UgMHgwM2M2OiByZXR1cm4oKENIQVIpKDIzNyAmIDB4ZmYpKTsKKyAgICAgIGNh c2UgMHgwM2I1OiByZXR1cm4oKENIQVIpKDIzOCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjI5 OiByZXR1cm4oKENIQVIpKDIzOSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjYxOiByZXR1cm4o KENIQVIpKDI0MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIxOiByZXR1cm4oKENIQVIpKDI0 MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjY1OiByZXR1cm4oKENIQVIpKDI0MiAmIDB4ZmYp KTsKKyAgICAgIGNhc2UgMHgyMjY0OiByZXR1cm4oKENIQVIpKDI0MyAmIDB4ZmYpKTsKKyAgICAg IGNhc2UgMHgyMzIwOiByZXR1cm4oKENIQVIpKDI0NCAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgy MzIxOiByZXR1cm4oKENIQVIpKDI0NSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGY3OiByZXR1 cm4oKENIQVIpKDI0NiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oKENIQVIp KDI0NyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIwOiByZXR1cm4oKENIQVIpKDI0OCAmIDB4 ZmYpKTsKKyAgICAgIGNhc2UgMHgyMjE5OiByZXR1cm4oKENIQVIpKDI0OSAmIDB4ZmYpKTsKKyAg ICAgIGNhc2UgMHgwMGI3OiByZXR1cm4oKENIQVIpKDI1MCAmIDB4ZmYpKTsKKyAgICAgIGNhc2Ug MHgyMjFhOiByZXR1cm4oKENIQVIpKDI1MSAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyMDdmOiBy ZXR1cm4oKENIQVIpKDI1MiAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGIyOiByZXR1cm4oKENI QVIpKDI1MyAmIDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgyNWEwOiByZXR1cm4oKENIQVIpKDI1NCAm IDB4ZmYpKTsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpKDI1NSAmIDB4ZmYpKTsK KyAgICAgIGRlZmF1bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAvKiBGb3IgYm94IGNoYXJh Y3RlcnMgZXRjICovCisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUEMgQ29kZSBQYWdlIDg2NCAqLworI2lmZGVmIENLX0FOU0lDCit0eF9jcDg2 NChVU0hPUlQgYykKKyNlbHNlCit0eF9jcDg2NChjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhh cyBDMSBncmFwaGljcyAqLworICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3 aXRjaCAoYykgeworICAgICAgY2FzZSAweDAwYjA6IHJldHVybigoQ0hBUikweDgwICYgMHhmZik7 CisgICAgICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKTB4ODEgJiAweGZmKTsKKyAgICAgIGNh c2UgMHgyMjE5OiByZXR1cm4oKENIQVIpMHg4MiAmIDB4ZmYpOworICAgICAgY2FzZSAweDIyMWE6 IHJldHVybigoQ0hBUikweDgzICYgMHhmZik7CisgICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKChD SEFSKTB4ODQgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgyNTAwOiByZXR1cm4oKENIQVIpMHg4NSAm IDB4ZmYpOworICAgICAgY2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikweDg2ICYgMHhmZik7Cisg ICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKTB4ODcgJiAweGZmKTsKKyAgICAgIGNhc2Ug MHgyNTI0OiByZXR1cm4oKENIQVIpMHg4OCAmIDB4ZmYpOworICAgICAgY2FzZSAweDI1MmM6IHJl dHVybigoQ0hBUikweDg5ICYgMHhmZik7CisgICAgICBjYXNlIDB4MjUxYzogcmV0dXJuKChDSEFS KTB4OGEgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgyNTM0OiByZXR1cm4oKENIQVIpMHg4YiAmIDB4 ZmYpOworICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikweDhjICYgMHhmZik7CisgICAg ICBjYXNlIDB4MjUwYzogcmV0dXJuKChDSEFSKTB4OGQgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgy NTE0OiByZXR1cm4oKENIQVIpMHg4ZSAmIDB4ZmYpOworICAgICAgY2FzZSAweDI1MTg6IHJldHVy bigoQ0hBUikweDhmICYgMHhmZik7CisgICAgICBjYXNlIDB4MDNiMjogcmV0dXJuKChDSEFSKTB4 OTAgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgyMjFlOiByZXR1cm4oKENIQVIpMHg5MSAmIDB4ZmYp OworICAgICAgY2FzZSAweDAzYzY6IHJldHVybigoQ0hBUikweDkyICYgMHhmZik7CisgICAgICBj YXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKTB4OTMgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwMGJk OiByZXR1cm4oKENIQVIpMHg5NCAmIDB4ZmYpOworICAgICAgY2FzZSAweDAwYmM6IHJldHVybigo Q0hBUikweDk1ICYgMHhmZik7CisgICAgICBjYXNlIDB4MjI0ODogcmV0dXJuKChDSEFSKTB4OTYg JiAweGZmKTsKKyAgICAgIGNhc2UgMHgwMGFiOiByZXR1cm4oKENIQVIpMHg5NyAmIDB4ZmYpOwor ICAgICAgY2FzZSAweDAwYmI6IHJldHVybigoQ0hBUikweDk4ICYgMHhmZik7CisgICAgICBjYXNl IDB4ZmVmNzogcmV0dXJuKChDSEFSKTB4OTkgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWY4OiBy ZXR1cm4oKENIQVIpMHg5YSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZmI6IHJldHVybigoQ0hB UikweDlkICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVmYzogcmV0dXJuKChDSEFSKTB4OWUgJiAw eGZmKTsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4oKENIQVIpMHhhMCAmIDB4ZmYpOworICAg ICAgY2FzZSAweDAwYWQ6IHJldHVybigoQ0hBUikweGExICYgMHhmZik7CisgICAgICBjYXNlIDB4 ZmU4MjogcmV0dXJuKChDSEFSKTB4YTIgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwMGEzOiByZXR1 cm4oKENIQVIpMHhhMyAmIDB4ZmYpOworICAgICAgY2FzZSAweDAwYTQ6IHJldHVybigoQ0hBUikw eGE0ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmU4NDogcmV0dXJuKChDSEFSKTB4YTUgJiAweGZm KTsKKyAgICAgIGNhc2UgMHhmZThlOiByZXR1cm4oKENIQVIpMHhhOCAmIDB4ZmYpOworICAgICAg Y2FzZSAweGZlOGY6IHJldHVybigoQ0hBUikweGE5ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmU5 NTogcmV0dXJuKChDSEFSKTB4YWEgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZTk5OiByZXR1cm4o KENIQVIpMHhhYiAmIDB4ZmYpOworICAgICAgY2FzZSAweDA2MGM6IHJldHVybigoQ0hBUikweGFj ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmU5ZDogcmV0dXJuKChDSEFSKTB4YWQgJiAweGZmKTsK KyAgICAgIGNhc2UgMHhmZWExOiByZXR1cm4oKENIQVIpMHhhZSAmIDB4ZmYpOworICAgICAgY2Fz ZSAweGZlYTU6IHJldHVybigoQ0hBUikweGFmICYgMHhmZik7CisgICAgICBjYXNlIDB4MDY2MDog cmV0dXJuKChDSEFSKTB4YjAgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwNjYxOiByZXR1cm4oKENI QVIpMHhiMSAmIDB4ZmYpOworICAgICAgY2FzZSAweDA2NjI6IHJldHVybigoQ0hBUikweGIyICYg MHhmZik7CisgICAgICBjYXNlIDB4MDY2MzogcmV0dXJuKChDSEFSKTB4YjMgJiAweGZmKTsKKyAg ICAgIGNhc2UgMHgwNjY0OiByZXR1cm4oKENIQVIpMHhiNCAmIDB4ZmYpOworICAgICAgY2FzZSAw eDA2NjU6IHJldHVybigoQ0hBUikweGI1ICYgMHhmZik7CisgICAgICBjYXNlIDB4MDY2NjogcmV0 dXJuKChDSEFSKTB4YjYgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwNjY3OiByZXR1cm4oKENIQVIp MHhiNyAmIDB4ZmYpOworICAgICAgY2FzZSAweDA2Njg6IHJldHVybigoQ0hBUikweGI4ICYgMHhm Zik7CisgICAgICBjYXNlIDB4MDY2OTogcmV0dXJuKChDSEFSKTB4YjkgJiAweGZmKTsKKyAgICAg IGNhc2UgMHhmZWQxOiByZXR1cm4oKENIQVIpMHhiYSAmIDB4ZmYpOworICAgICAgY2FzZSAweDA2 MWI6IHJldHVybigoQ0hBUikweGJiICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmViMTogcmV0dXJu KChDSEFSKTB4YmMgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWI1OiByZXR1cm4oKENIQVIpMHhi ZCAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYjk6IHJldHVybigoQ0hBUikweGJlICYgMHhmZik7 CisgICAgICBjYXNlIDB4MDYxZjogcmV0dXJuKChDSEFSKTB4YmYgJiAweGZmKTsKKyAgICAgIGNh c2UgMHgwMGEyOiByZXR1cm4oKENIQVIpMHhjMCAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlODA6 IHJldHVybigoQ0hBUikweGMxICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmU4MTogcmV0dXJuKChD SEFSKTB4YzIgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZTgzOiByZXR1cm4oKENIQVIpMHhjMyAm IDB4ZmYpOworICAgICAgY2FzZSAweGZlODU6IHJldHVybigoQ0hBUikweGM0ICYgMHhmZik7Cisg ICAgICBjYXNlIDB4ZmVjYTogcmV0dXJuKChDSEFSKTB4YzUgJiAweGZmKTsKKyAgICAgIGNhc2Ug MHhmZThiOiByZXR1cm4oKENIQVIpMHhjNiAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlOGQ6IHJl dHVybigoQ0hBUikweGM3ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmU5MTogcmV0dXJuKChDSEFS KTB4YzggJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZTkzOiByZXR1cm4oKENIQVIpMHhjOSAmIDB4 ZmYpOworICAgICAgY2FzZSAweGZlOTc6IHJldHVybigoQ0hBUikweGNhICYgMHhmZik7CisgICAg ICBjYXNlIDB4ZmU5YjogcmV0dXJuKChDSEFSKTB4Y2IgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhm ZTlmOiByZXR1cm4oKENIQVIpMHhjYyAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYTM6IHJldHVy bigoQ0hBUikweGNkICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVhNzogcmV0dXJuKChDSEFSKTB4 Y2UgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWE5OiByZXR1cm4oKENIQVIpMHhjZiAmIDB4ZmYp OworICAgICAgY2FzZSAweGZlYWI6IHJldHVybigoQ0hBUikweGQwICYgMHhmZik7CisgICAgICBj YXNlIDB4ZmVhZDogcmV0dXJuKChDSEFSKTB4ZDEgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWFm OiByZXR1cm4oKENIQVIpMHhkMiAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYjM6IHJldHVybigo Q0hBUikweGQzICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmViNzogcmV0dXJuKChDSEFSKTB4ZDQg JiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWJiOiByZXR1cm4oKENIQVIpMHhkNSAmIDB4ZmYpOwor ICAgICAgY2FzZSAweGZlYmY6IHJldHVybigoQ0hBUikweGQ2ICYgMHhmZik7CisgICAgICBjYXNl IDB4ZmVjMTogcmV0dXJuKChDSEFSKTB4ZDcgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWM1OiBy ZXR1cm4oKENIQVIpMHhkOCAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlY2I6IHJldHVybigoQ0hB UikweGQ5ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVjZjogcmV0dXJuKChDSEFSKTB4ZGEgJiAw eGZmKTsKKyAgICAgIGNhc2UgMHgwMGE2OiByZXR1cm4oKENIQVIpMHhkYiAmIDB4ZmYpOworICAg ICAgY2FzZSAweDAwYWM6IHJldHVybigoQ0hBUikweGRjICYgMHhmZik7CisgICAgICBjYXNlIDB4 MDBmNzogcmV0dXJuKChDSEFSKTB4ZGQgJiAweGZmKTsKKyAgICAgIGNhc2UgMHgwMGQ3OiByZXR1 cm4oKENIQVIpMHhkZSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYzk6IHJldHVybigoQ0hBUikw eGRmICYgMHhmZik7CisgICAgICBjYXNlIDB4MDY0MDogcmV0dXJuKChDSEFSKTB4ZTAgJiAweGZm KTsKKyAgICAgIGNhc2UgMHhmZWQzOiByZXR1cm4oKENIQVIpMHhlMSAmIDB4ZmYpOworICAgICAg Y2FzZSAweGZlZDc6IHJldHVybigoQ0hBUikweGUyICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVk YjogcmV0dXJuKChDSEFSKTB4ZTMgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWRmOiByZXR1cm4o KENIQVIpMHhlNCAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZTM6IHJldHVybigoQ0hBUikweGU1 ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVlNzogcmV0dXJuKChDSEFSKTB4ZTYgJiAweGZmKTsK KyAgICAgIGNhc2UgMHhmZWViOiByZXR1cm4oKENIQVIpMHhlNyAmIDB4ZmYpOworICAgICAgY2Fz ZSAweGZlZWQ6IHJldHVybigoQ0hBUikweGU4ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVlZjog cmV0dXJuKChDSEFSKTB4ZTkgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWYzOiByZXR1cm4oKENI QVIpMHhlYSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlYmQ6IHJldHVybigoQ0hBUikweGViICYg MHhmZik7CisgICAgICBjYXNlIDB4ZmVjYzogcmV0dXJuKChDSEFSKTB4ZWMgJiAweGZmKTsKKyAg ICAgIGNhc2UgMHhmZWNlOiByZXR1cm4oKENIQVIpMHhlZCAmIDB4ZmYpOworICAgICAgY2FzZSAw eGZlY2Q6IHJldHVybigoQ0hBUikweGVlICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVlMTogcmV0 dXJuKChDSEFSKTB4ZWYgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZTdkOiByZXR1cm4oKENIQVIp MHhmMCAmIDB4ZmYpOworICAgICAgY2FzZSAweDA2NTE6IHJldHVybigoQ0hBUikweGYxICYgMHhm Zik7CisgICAgICBjYXNlIDB4ZmVlNTogcmV0dXJuKChDSEFSKTB4ZjIgJiAweGZmKTsKKyAgICAg IGNhc2UgMHhmZWU5OiByZXR1cm4oKENIQVIpMHhmMyAmIDB4ZmYpOworICAgICAgY2FzZSAweGZl ZWM6IHJldHVybigoQ0hBUikweGY0ICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVmMDogcmV0dXJu KChDSEFSKTB4ZjUgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWYyOiByZXR1cm4oKENIQVIpMHhm NiAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZDA6IHJldHVybigoQ0hBUikweGY3ICYgMHhmZik7 CisgICAgICBjYXNlIDB4ZmVkNTogcmV0dXJuKChDSEFSKTB4ZjggJiAweGZmKTsKKyAgICAgIGNh c2UgMHhmZWY1OiByZXR1cm4oKENIQVIpMHhmOSAmIDB4ZmYpOworICAgICAgY2FzZSAweGZlZjY6 IHJldHVybigoQ0hBUikweGZhICYgMHhmZik7CisgICAgICBjYXNlIDB4ZmVkZDogcmV0dXJuKChD SEFSKTB4ZmIgJiAweGZmKTsKKyAgICAgIGNhc2UgMHhmZWQ5OiByZXR1cm4oKENIQVIpMHhmYyAm IDB4ZmYpOworICAgICAgY2FzZSAweGZlZjE6IHJldHVybigoQ0hBUikweGZkICYgMHhmZik7Cisg ICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKTB4ZmUgJiAweGZmKTsKKyAgICAgIGRlZmF1 bHQ6IHJldHVybih0eF9jcHN1YihjKSk7ICAgICAvKiBGb3IgYm94IGNoYXJhY3RlcnMgZXRjICov CisgICAgfQorfQorCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UEMgQ29kZSBQYWdlIDg2NiAqLworI2lmZGVmIENLX0FOU0lDCit0eF9jcDg2NihVU0hPUlQgYykK KyNlbHNlCit0eF9jcDg2NihjKSBVU0hPUlQgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworewor ICAgIGlmIChjIDwgMHg4MCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhcyBDMSBncmFwaGlj cyAqLworICAgICAgcmV0dXJuKChDSEFSKShjICYgMHhmZikpOworICAgIHN3aXRjaCAoYykgewor ICAgICAgY2FzZSAweDAwYTA6IHJldHVybigoQ0hBUikoMjU1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDAwYTQ6IHJldHVybigoQ0hBUikoMjUzICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjA6 IHJldHVybigoQ0hBUikoMjQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDAwYjc6IHJldHVybigo Q0hBUikoMjUwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDE6IHJldHVybigoQ0hBUikoMjQw ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MDQ6IHJldHVybigoQ0hBUikoMjQyICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MDc6IHJldHVybigoQ0hBUikoMjQ0ICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MGU6IHJldHVybigoQ0hBUikoMjQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MTA6IHJldHVybigoQ0hBUikoMTI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTE6IHJldHVy bigoQ0hBUikoMTI5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTI6IHJldHVybigoQ0hBUiko MTMwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTM6IHJldHVybigoQ0hBUikoMTMxICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0MTQ6IHJldHVybigoQ0hBUikoMTMyICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0MTU6IHJldHVybigoQ0hBUikoMTMzICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0MTY6IHJldHVybigoQ0hBUikoMTM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTc6IHJl dHVybigoQ0hBUikoMTM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTg6IHJldHVybigoQ0hB UikoMTM2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MTk6IHJldHVybigoQ0hBUikoMTM3ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MWE6IHJldHVybigoQ0hBUikoMTM4ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MWI6IHJldHVybigoQ0hBUikoMTM5ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MWM6IHJldHVybigoQ0hBUikoMTQwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWQ6 IHJldHVybigoQ0hBUikoMTQxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWU6IHJldHVybigo Q0hBUikoMTQyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MWY6IHJldHVybigoQ0hBUikoMTQz ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjA6IHJldHVybigoQ0hBUikoMTQ0ICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MjE6IHJldHVybigoQ0hBUikoMTQ1ICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MjI6IHJldHVybigoQ0hBUikoMTQ2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MjM6IHJldHVybigoQ0hBUikoMTQ3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjQ6IHJldHVy bigoQ0hBUikoMTQ4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjU6IHJldHVybigoQ0hBUiko MTQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MjY6IHJldHVybigoQ0hBUikoMTUwICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0Mjc6IHJldHVybigoQ0hBUikoMTUxICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0Mjg6IHJldHVybigoQ0hBUikoMTUyICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0Mjk6IHJldHVybigoQ0hBUikoMTUzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmE6IHJl dHVybigoQ0hBUikoMTU0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmI6IHJldHVybigoQ0hB UikoMTU1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MmM6IHJldHVybigoQ0hBUikoMTU2ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0MmQ6IHJldHVybigoQ0hBUikoMTU3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0MmU6IHJldHVybigoQ0hBUikoMTU4ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0MmY6IHJldHVybigoQ0hBUikoMTU5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzA6 IHJldHVybigoQ0hBUikoMTYwICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzE6IHJldHVybigo Q0hBUikoMTYxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzI6IHJldHVybigoQ0hBUikoMTYy ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0MzM6IHJldHVybigoQ0hBUikoMTYzICYgMHhmZikp OworICAgICAgY2FzZSAweDA0MzQ6IHJldHVybigoQ0hBUikoMTY0ICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0MzU6IHJldHVybigoQ0hBUikoMTY1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 MzY6IHJldHVybigoQ0hBUikoMTY2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mzc6IHJldHVy bigoQ0hBUikoMTY3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mzg6IHJldHVybigoQ0hBUiko MTY4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0Mzk6IHJldHVybigoQ0hBUikoMTY5ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0M2E6IHJldHVybigoQ0hBUikoMTcwICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0M2I6IHJldHVybigoQ0hBUikoMTcxICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0M2M6IHJldHVybigoQ0hBUikoMTcyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2Q6IHJl dHVybigoQ0hBUikoMTczICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2U6IHJldHVybigoQ0hB UikoMTc0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0M2Y6IHJldHVybigoQ0hBUikoMTc1ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0NDA6IHJldHVybigoQ0hBUikoMjI0ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDA0NDE6IHJldHVybigoQ0hBUikoMjI1ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDA0NDI6IHJldHVybigoQ0hBUikoMjI2ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDM6 IHJldHVybigoQ0hBUikoMjI3ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDQ6IHJldHVybigo Q0hBUikoMjI4ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDU6IHJldHVybigoQ0hBUikoMjI5 ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NDY6IHJldHVybigoQ0hBUikoMjMwICYgMHhmZikp OworICAgICAgY2FzZSAweDA0NDc6IHJldHVybigoQ0hBUikoMjMxICYgMHhmZikpOworICAgICAg Y2FzZSAweDA0NDg6IHJldHVybigoQ0hBUikoMjMyICYgMHhmZikpOworICAgICAgY2FzZSAweDA0 NDk6IHJldHVybigoQ0hBUikoMjMzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGE6IHJldHVy bigoQ0hBUikoMjM0ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGI6IHJldHVybigoQ0hBUiko MjM1ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NGM6IHJldHVybigoQ0hBUikoMjM2ICYgMHhm ZikpOworICAgICAgY2FzZSAweDA0NGQ6IHJldHVybigoQ0hBUikoMjM3ICYgMHhmZikpOworICAg ICAgY2FzZSAweDA0NGU6IHJldHVybigoQ0hBUikoMjM4ICYgMHhmZikpOworICAgICAgY2FzZSAw eDA0NGY6IHJldHVybigoQ0hBUikoMjM5ICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTE6IHJl dHVybigoQ0hBUikoMjQxICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTQ6IHJldHVybigoQ0hB UikoMjQzICYgMHhmZikpOworICAgICAgY2FzZSAweDA0NTc6IHJldHVybigoQ0hBUikoMjQ1ICYg MHhmZikpOworICAgICAgY2FzZSAweDA0NWU6IHJldHVybigoQ0hBUikoMjQ3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDIxMTY6IHJldHVybigoQ0hBUikoMjUyICYgMHhmZikpOworICAgICAgY2Fz ZSAweDIyMTk6IHJldHVybigoQ0hBUikoMjQ5ICYgMHhmZikpOworICAgICAgY2FzZSAweDIyMWE6 IHJldHVybigoQ0hBUikoMjUxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MDA6IHJldHVybigo Q0hBUikoMTk2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MDI6IHJldHVybigoQ0hBUikoMTc5 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MGM6IHJldHVybigoQ0hBUikoMjE4ICYgMHhmZikp OworICAgICAgY2FzZSAweDI1MTA6IHJldHVybigoQ0hBUikoMTkxICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1MTQ6IHJldHVybigoQ0hBUikoMTkyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 MTg6IHJldHVybigoQ0hBUikoMjE3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MWM6IHJldHVy bigoQ0hBUikoMTk1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MjQ6IHJldHVybigoQ0hBUiko MTgwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1MmM6IHJldHVybigoQ0hBUikoMTk0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1MzQ6IHJldHVybigoQ0hBUikoMTkzICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1M2M6IHJldHVybigoQ0hBUikoMTk3ICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1NTA6IHJldHVybigoQ0hBUikoMjA1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTE6IHJl dHVybigoQ0hBUikoMTg2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTI6IHJldHVybigoQ0hB UikoMjEzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTM6IHJldHVybigoQ0hBUikoMjE0ICYg MHhmZikpOworICAgICAgY2FzZSAweDI1NTQ6IHJldHVybigoQ0hBUikoMjAxICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1NTU6IHJldHVybigoQ0hBUikoMTg0ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1NTY6IHJldHVybigoQ0hBUikoMTgzICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTc6 IHJldHVybigoQ0hBUikoMTg3ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTg6IHJldHVybigo Q0hBUikoMjEyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NTk6IHJldHVybigoQ0hBUikoMjEx ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWE6IHJldHVybigoQ0hBUikoMjAwICYgMHhmZikp OworICAgICAgY2FzZSAweDI1NWI6IHJldHVybigoQ0hBUikoMTkwICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1NWM6IHJldHVybigoQ0hBUikoMTg5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 NWQ6IHJldHVybigoQ0hBUikoMTg4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWU6IHJldHVy bigoQ0hBUikoMTk4ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NWY6IHJldHVybigoQ0hBUiko MTk5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjA6IHJldHVybigoQ0hBUikoMjA0ICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1NjE6IHJldHVybigoQ0hBUikoMTgxICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1NjI6IHJldHVybigoQ0hBUikoMTgyICYgMHhmZikpOworICAgICAgY2FzZSAw eDI1NjM6IHJldHVybigoQ0hBUikoMTg1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjQ6IHJl dHVybigoQ0hBUikoMjA5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjU6IHJldHVybigoQ0hB UikoMjEwICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NjY6IHJldHVybigoQ0hBUikoMjAzICYg MHhmZikpOworICAgICAgY2FzZSAweDI1Njc6IHJldHVybigoQ0hBUikoMjA3ICYgMHhmZikpOwor ICAgICAgY2FzZSAweDI1Njg6IHJldHVybigoQ0hBUikoMjA4ICYgMHhmZikpOworICAgICAgY2Fz ZSAweDI1Njk6IHJldHVybigoQ0hBUikoMjAyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NmE6 IHJldHVybigoQ0hBUikoMjE2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NmI6IHJldHVybigo Q0hBUikoMjE1ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1NmM6IHJldHVybigoQ0hBUikoMjA2 ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1ODA6IHJldHVybigoQ0hBUikoMjIzICYgMHhmZikp OworICAgICAgY2FzZSAweDI1ODQ6IHJldHVybigoQ0hBUikoMjIwICYgMHhmZikpOworICAgICAg Y2FzZSAweDI1ODg6IHJldHVybigoQ0hBUikoMjE5ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1 OGM6IHJldHVybigoQ0hBUikoMjIxICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTA6IHJldHVy bigoQ0hBUikoMjIyICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTE6IHJldHVybigoQ0hBUiko MTc2ICYgMHhmZikpOworICAgICAgY2FzZSAweDI1OTI6IHJldHVybigoQ0hBUikoMTc3ICYgMHhm ZikpOworICAgICAgY2FzZSAweDI1OTM6IHJldHVybigoQ0hBUikoMTc4ICYgMHhmZikpOworICAg ICAgY2FzZSAweDI1YTA6IHJldHVybigoQ0hBUikoMjU0ICYgMHhmZikpOworICAgICAgZGVmYXVs dDogcmV0dXJuKHR4X2Nwc3ViKGMpKTsgICAgIC8qIEZvciBib3ggY2hhcmFjdGVycyBldGMgKi8K KyAgICB9Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ QyBDb2RlIFBhZ2UgODY5ICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2NwODY5KFVTSE9SVCBjKQor I2Vsc2UKK3R4X2NwODY5KGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7Cisg ICAgaWYgKGMgPCAweDgwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFzIEMxIGdyYXBoaWNz ICovCisgICAgICByZXR1cm4oKENIQVIpKGMgJiAweGZmKSk7CisgICAgc3dpdGNoIChjKSB7Cisg ICAgICBjYXNlIDB4MDBhMDogcmV0dXJuKChDSEFSKSgyNTUgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDBhMzogcmV0dXJuKChDSEFSKSgxNTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNjog cmV0dXJuKChDSEFSKSgxMzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhNzogcmV0dXJuKChD SEFSKSgyNDUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhODogcmV0dXJuKChDSEFSKSgyNDkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBhOTogcmV0dXJuKChDSEFSKSgxNTEgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDBhYjogcmV0dXJuKChDSEFSKSgxNzQgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDBhYzogcmV0dXJuKChDSEFSKSgxMzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBh ZDogcmV0dXJuKChDSEFSKSgyNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMDogcmV0dXJu KChDSEFSKSgyNDggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMTogcmV0dXJuKChDSEFSKSgy NDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiMjogcmV0dXJuKChDSEFSKSgxNTMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDBiMzogcmV0dXJuKChDSEFSKSgxNTQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDBiNzogcmV0dXJuKChDSEFSKSgxMzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDBiYjogcmV0dXJuKChDSEFSKSgxNzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDBiZDogcmV0 dXJuKChDSEFSKSgxNzEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4NDogcmV0dXJuKChDSEFS KSgyMzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4NTogcmV0dXJuKChDSEFSKSgyNDcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDM4NjogcmV0dXJuKChDSEFSKSgxMzQgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDM4ODogcmV0dXJuKChDSEFSKSgxNDEgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDM4OTogcmV0dXJuKChDSEFSKSgxNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4YTog cmV0dXJuKChDSEFSKSgxNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4YzogcmV0dXJuKChD SEFSKSgxNDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4ZTogcmV0dXJuKChDSEFSKSgxNDkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM4ZjogcmV0dXJuKChDSEFSKSgxNTIgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDM5MDogcmV0dXJuKChDSEFSKSgxNjEgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDM5MTogcmV0dXJuKChDSEFSKSgxNjQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5 MjogcmV0dXJuKChDSEFSKSgxNjUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5MzogcmV0dXJu KChDSEFSKSgxNjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5NDogcmV0dXJuKChDSEFSKSgx NjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5NTogcmV0dXJuKChDSEFSKSgxNjggJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDM5NjogcmV0dXJuKChDSEFSKSgxNjkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDM5NzogcmV0dXJuKChDSEFSKSgxNzAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDM5ODogcmV0dXJuKChDSEFSKSgxNzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5OTogcmV0 dXJuKChDSEFSKSgxNzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5YTogcmV0dXJuKChDSEFS KSgxODEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5YjogcmV0dXJuKChDSEFSKSgxODIgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDM5YzogcmV0dXJuKChDSEFSKSgxODMgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDM5ZDogcmV0dXJuKChDSEFSKSgxODQgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDM5ZTogcmV0dXJuKChDSEFSKSgxODkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDM5Zjog cmV0dXJuKChDSEFSKSgxOTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhMDogcmV0dXJuKChD SEFSKSgxOTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhMTogcmV0dXJuKChDSEFSKSgxOTkg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhMzogcmV0dXJuKChDSEFSKSgyMDcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDNhNDogcmV0dXJuKChDSEFSKSgyMDggJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDNhNTogcmV0dXJuKChDSEFSKSgyMDkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNh NjogcmV0dXJuKChDSEFSKSgyMTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhNzogcmV0dXJu KChDSEFSKSgyMTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhODogcmV0dXJuKChDSEFSKSgy MTIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhOTogcmV0dXJuKChDSEFSKSgyMTMgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDNhYTogcmV0dXJuKChDSEFSKSgxNDUgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDNhYjogcmV0dXJuKChDSEFSKSgxNTAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDNhYzogcmV0dXJuKChDSEFSKSgxNTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhZDogcmV0 dXJuKChDSEFSKSgxNTcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhZTogcmV0dXJuKChDSEFS KSgxNTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNhZjogcmV0dXJuKChDSEFSKSgxNTkgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDNiMDogcmV0dXJuKChDSEFSKSgyNTIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDNiMTogcmV0dXJuKChDSEFSKSgyMTQgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDNiMjogcmV0dXJuKChDSEFSKSgyMTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiMzog cmV0dXJuKChDSEFSKSgyMTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiNDogcmV0dXJuKChD SEFSKSgyMjEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiNTogcmV0dXJuKChDSEFSKSgyMjIg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiNjogcmV0dXJuKChDSEFSKSgyMjQgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDNiNzogcmV0dXJuKChDSEFSKSgyMjUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDNiODogcmV0dXJuKChDSEFSKSgyMjYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNi OTogcmV0dXJuKChDSEFSKSgyMjcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiYTogcmV0dXJu KChDSEFSKSgyMjggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiYjogcmV0dXJuKChDSEFSKSgy MjkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNiYzogcmV0dXJuKChDSEFSKSgyMzAgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MDNiZDogcmV0dXJuKChDSEFSKSgyMzEgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MDNiZTogcmV0dXJuKChDSEFSKSgyMzIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MDNiZjogcmV0dXJuKChDSEFSKSgyMzMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjMDogcmV0 dXJuKChDSEFSKSgyMzQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjMTogcmV0dXJuKChDSEFS KSgyMzUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjMjogcmV0dXJuKChDSEFSKSgyMzcgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MDNjMzogcmV0dXJuKChDSEFSKSgyMzYgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MDNjNDogcmV0dXJuKChDSEFSKSgyMzggJiAweGZmKSk7CisgICAgICBjYXNl IDB4MDNjNTogcmV0dXJuKChDSEFSKSgyNDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjNjog cmV0dXJuKChDSEFSKSgyNDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjNzogcmV0dXJuKChD SEFSKSgyNDQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjODogcmV0dXJuKChDSEFSKSgyNDYg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjOTogcmV0dXJuKChDSEFSKSgyNTAgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MDNjYTogcmV0dXJuKChDSEFSKSgxNjAgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MDNjYjogcmV0dXJuKChDSEFSKSgyNTEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNj YzogcmV0dXJuKChDSEFSKSgxNjIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjZDogcmV0dXJu KChDSEFSKSgxNjMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MDNjZTogcmV0dXJuKChDSEFSKSgy NTMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjAxNTogcmV0dXJuKChDSEFSKSgxNDIgJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjAxODogcmV0dXJuKChDSEFSKSgxMzkgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjAxOTogcmV0dXJuKChDSEFSKSgxNDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjUwMDogcmV0dXJuKChDSEFSKSgxOTYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwMjogcmV0 dXJuKChDSEFSKSgxNzkgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUwYzogcmV0dXJuKChDSEFS KSgyMTggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKChDSEFSKSgxOTEgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjUxNDogcmV0dXJuKChDSEFSKSgxOTIgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjUxODogcmV0dXJuKChDSEFSKSgyMTcgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjUxYzogcmV0dXJuKChDSEFSKSgxOTUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyNDog cmV0dXJuKChDSEFSKSgxODAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUyYzogcmV0dXJuKChD SEFSKSgxOTQgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzNDogcmV0dXJuKChDSEFSKSgxOTMg JiAweGZmKSk7CisgICAgICBjYXNlIDB4MjUzYzogcmV0dXJuKChDSEFSKSgxOTcgJiAweGZmKSk7 CisgICAgICBjYXNlIDB4MjU1MDogcmV0dXJuKChDSEFSKSgyMDUgJiAweGZmKSk7CisgICAgICBj YXNlIDB4MjU1MTogcmV0dXJuKChDSEFSKSgxODYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1 NDogcmV0dXJuKChDSEFSKSgyMDEgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1NzogcmV0dXJu KChDSEFSKSgxODcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1YTogcmV0dXJuKChDSEFSKSgy MDAgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU1ZDogcmV0dXJuKChDSEFSKSgxODggJiAweGZm KSk7CisgICAgICBjYXNlIDB4MjU2MDogcmV0dXJuKChDSEFSKSgyMDQgJiAweGZmKSk7CisgICAg ICBjYXNlIDB4MjU2MzogcmV0dXJuKChDSEFSKSgxODUgJiAweGZmKSk7CisgICAgICBjYXNlIDB4 MjU2NjogcmV0dXJuKChDSEFSKSgyMDMgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2OTogcmV0 dXJuKChDSEFSKSgyMDIgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU2YzogcmV0dXJuKChDSEFS KSgyMDYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU4MDogcmV0dXJuKChDSEFSKSgyMjMgJiAw eGZmKSk7CisgICAgICBjYXNlIDB4MjU4NDogcmV0dXJuKChDSEFSKSgyMjAgJiAweGZmKSk7Cisg ICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKChDSEFSKSgyMTkgJiAweGZmKSk7CisgICAgICBjYXNl IDB4MjU5MTogcmV0dXJuKChDSEFSKSgxNzYgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5Mjog cmV0dXJuKChDSEFSKSgxNzcgJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjU5MzogcmV0dXJuKChD SEFSKSgxNzggJiAweGZmKSk7CisgICAgICBjYXNlIDB4MjVhMDogcmV0dXJuKChDSEFSKSgyNTQg JiAweGZmKSk7CisgICAgICBkZWZhdWx0OiByZXR1cm4odHhfY3BzdWIoYykpOyAgICAgLyogRm9y IGJveCBjaGFyYWN0ZXJzIGV0YyAqLworICAgIH0KK30KKworaW50ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBDIENvZGUgUGFnZSBDMCBncmFwaGljcyAqLworI2lmZGVm IENLX0FOU0lDCit0eF9zbWlsZXkoVVNIT1JUIGMpCisjZWxzZQordHhfc21pbGV5KGMpIFVTSE9S VCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPiAweDFmKQorICAgICAg cmV0dXJuKC0xKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHgwMGEwOiByZXR1cm4o KENIQVIpMCAmIDB4N2YpOworICAgICAgY2FzZSAweDAwYTc6IHJldHVybigoQ0hBUikyMSAmIDB4 N2YpOworICAgICAgY2FzZSAweDAwYjY6IHJldHVybigoQ0hBUikyMCAmIDB4N2YpOworICAgICAg Y2FzZSAweDIwMjI6IHJldHVybigoQ0hBUik3ICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjAzYzog cmV0dXJuKChDSEFSKTE5ICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjE5MDogcmV0dXJuKChDSEFS KTI3ICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjE5MTogcmV0dXJuKChDSEFSKTI0ICYgMHg3Zik7 CisgICAgICBjYXNlIDB4MjE5MjogcmV0dXJuKChDSEFSKTI2ICYgMHg3Zik7CisgICAgICBjYXNl IDB4MjE5MzogcmV0dXJuKChDSEFSKTI1ICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjE5NDogcmV0 dXJuKChDSEFSKTI5ICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjE5NTogcmV0dXJuKChDSEFSKTE4 ICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjFhODogcmV0dXJuKChDSEFSKTIzICYgMHg3Zik7Cisg ICAgICBjYXNlIDB4MjMxOTogcmV0dXJuKChDSEFSKTI4ICYgMHg3Zik7CisgICAgICBjYXNlIDB4 MjVhYzogcmV0dXJuKChDSEFSKTIyICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjViMjogcmV0dXJu KChDSEFSKTMwICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjViYTogcmV0dXJuKChDSEFSKTE2ICYg MHg3Zik7CisgICAgICBjYXNlIDB4MjViYzogcmV0dXJuKChDSEFSKTMxICYgMHg3Zik7CisgICAg ICBjYXNlIDB4MjVjNDogcmV0dXJuKChDSEFSKTE3ICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjVk ODogcmV0dXJuKChDSEFSKTggJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNWQ5OiByZXR1cm4oKENI QVIpMTAgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNWVmOiByZXR1cm4oKENIQVIpOSAmIDB4N2Yp OworICAgICAgY2FzZSAweDI2M2E6IHJldHVybigoQ0hBUikxICYgMHg3Zik7CisgICAgICBjYXNl IDB4MjYzYjogcmV0dXJuKChDSEFSKTIgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNjNjOiByZXR1 cm4oKENIQVIpMTUgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNjQwOiByZXR1cm4oKENIQVIpMTIg JiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNjQyOiByZXR1cm4oKENIQVIpMTEgJiAweDdmKTsKKyAg ICAgIGNhc2UgMHgyNjYwOiByZXR1cm4oKENIQVIpNiAmIDB4N2YpOworICAgICAgY2FzZSAweDI2 NjM6IHJldHVybigoQ0hBUik1ICYgMHg3Zik7CisgICAgICBjYXNlIDB4MjY2NTogcmV0dXJuKChD SEFSKTMgJiAweDdmKTsKKyAgICAgIGNhc2UgMHgyNjY2OiByZXR1cm4oKENIQVIpNCAmIDB4N2Yp OworICAgICAgY2FzZSAweDI2NmE6IHJldHVybigoQ0hBUikxMyAmIDB4N2YpOworICAgICAgY2Fz ZSAweDI2NmM6IHJldHVybigoQ0hBUikxNCAmIDB4N2YpOworICAgICAgZGVmYXVsdDogcmV0dXJu KC0xKTsKKyAgICB9Cit9CisKK1VTSE9SVCAgLyogSG9yaXpvbnRhbCBTY2FuIExpbmVzIFVuaWNv ZGUgc3Vic3RpdHV0aW9ucyAqLworI2lmZGVmIENLX0FOU0lDCit0eF9oc2xzdWIoVVNIT1JUIGMp CisjZWxzZQordHhfaHNsc3ViKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgaWYgKGMgPj0gMHgyM0JBICYmIGMgPD0gMHgyM0JEICkKKyAgICBzd2l0Y2ggKGMpIHsK KyAgICAgIGNhc2UgMHgyM0JBOiByZXR1cm4oMHgyNTAwKTsgICAgICAvKiBIIGxpbmUgLSBTY2Fu IDEgKi8KKyAgICAgIGNhc2UgMHgyM0JCOiByZXR1cm4oMHgyNTAwKTsgICAgICAvKiBIIGxpbmUg LSBTY2FuIDMgKi8KKyAgICAgIGNhc2UgMHgyM0JDOiByZXR1cm4oMHgyNTAwKTsgICAgICAvKiBI IGxpbmUgLSBTY2FuIDcgKi8KKyAgICAgIGNhc2UgMHgyM0JEOiByZXR1cm4oMHgyNTAwKTsgICAg ICAvKiBIIGxpbmUgLSBTY2FuIDkgKi8KKyAgICB9CisgICAgcmV0dXJuKGMpOworfQorCitVU0hP UlQgIC8qIEtlcm1pdCBmb250IDB4RT8/PyBVbmljb2RlIHN1YnN0aXR1dGlvbnMgKi8KKyNpZmRl ZiBDS19BTlNJQwordHhfdXN1YihVU0hPUlQgYykKKyNlbHNlCit0eF91c3ViKGMpIFVTSE9SVCBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaWYgKGMgPCAweEUwMDAgfHwgYyA+IDB4 RUZGRikKKyAgICAgIHJldHVybihjKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHhF MjAwOiByZXR1cm4oMHgyNTI0KTsgICAgICAvKiBFeHRlbnNpYmxlIExlZnQgQnJhY2UgTWlkZGxl ICovCisgICAgICBjYXNlIDB4RTIwMTogcmV0dXJuKDB4MjU3MCk7ICAgICAgLyogRXh0ZW5zaWJs ZSBMZWZ0IFBhcmVudGhlc2lzIGJvdCAqLworICAgICAgY2FzZSAweEUyMDI6IHJldHVybigweDI1 NmQpOyAgICAgIC8qIEV4dGVuc2libGUgbGVmdCBwYXJlbnRoZXNpcyB0b3AgKi8KKyAgICAgIGNh c2UgMHhFMjAzOiByZXR1cm4oMHgyNTE0KTsgICAgICAvKiBFeHRlbnNpYmxlIGxlZnQgU0IgYm90 ICovCisgICAgICBjYXNlIDB4RTIwNDogcmV0dXJuKDB4MjUwYyk7ICAgICAgLyogRXh0ZW5zaWJs ZSBsZWZ0IFNCIHRvcCAqLworICAgICAgY2FzZSAweEUyMDU6IHJldHVybigweDI1MWMpOyAgICAg IC8qIEV4dGVuc2libGUgcmlnaHQgYnJhY2UgbWlkZGxlICovCisgICAgICBjYXNlIDB4RTIwNjog cmV0dXJuKDB4MjU2Zik7ICAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBwYXJlbnRoZXNpcyBib3Qg Ki8KKyAgICAgIGNhc2UgMHhFMjA3OiByZXR1cm4oMHgyNTZlKTsgICAgICAvKiBFeHRlbnNpYmxl IHJpZ2h0IHBhcmVudGhlc2lzIHRvcCAqLworICAgICAgY2FzZSAweEUyMDg6IHJldHVybigweDI1 MTgpOyAgICAgIC8qIEV4dGVuc2libGUgcmlnaHQgU0IgYm90ICovCisgICAgICBjYXNlIDB4RTIw OTogcmV0dXJuKDB4MjUxMCk7ICAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBTQiB0b3AgKi8KKyAg ICAgIGNhc2UgMHhFMjBDOiByZXR1cm4oMHgwM2EzKTsgICAgICAvKiBTdW1tYXRpb24gc3ltYm9s IGJvdCAqLworICAgICAgY2FzZSAweEUyMEQ6IHJldHVybigweDAzYTMpOyAgICAgIC8qIFN1bW1h dGlvbiBzeW1ib2wgdG9wICovCisgICAgICBjYXNlIDB4RTIwRTogcmV0dXJuKDB4MjUxMCk7ICAg ICAgLyogUmlnaHQgY2VpbGluZyBjb3JuZXIgKi8KKyAgICAgIGNhc2UgMHhFMjBGOiByZXR1cm4o MHgyNTE4KTsgICAgICAvKiBSaWdodCBmbG9vciBjb3JuZXIgKi8KKyAgICAgIGNhc2UgMHhFMzAw OiByZXR1cm4oMHgyNTAyKTsgICAgICAvKiBWIGJveCBsaW5lLCBleHRlbnNpYmxlLCBsZWZ0ICov CisgICAgICBjYXNlIDB4RTMwOTogcmV0dXJuKDB4MjUwMik7ICAgICAgLyogViBib3ggbGluZSwg ZXh0ZW5zaWJsZSwgcmlnaHQgKi8KKyAgICAgIGNhc2UgMHhFMzBBOiByZXR1cm4oMHgyNThjKTsg ICAgICAvKiBEaWFnb25hbCBmaWxsLCBkYXJrLCBVTCAqLworICAgICAgY2FzZSAweEUzMEI6IHJl dHVybigweDI1OTApOyAgICAgIC8qIERpYWdvbmFsIGZpbGwsIGRhcmssIFVSICovCisgICAgICBj YXNlIDB4RTMyMDogcmV0dXJuKDB4MjU4Myk7ICAgICAgLyogUXVhZHJhbnQgTEwgKi8KKyAgICAg IGNhc2UgMHhFMzIxOiByZXR1cm4oMHgyNDkwKTsgICAgICAvKiBRdWFkcmFudCBMUiAqLworICAg ICAgY2FzZSAweEUzMjI6IHJldHVybigweDI1OGMpOyAgICAgIC8qIFF1YWRyYW50IFVMICovCisg ICAgICBjYXNlIDB4RTMyMzogcmV0dXJuKDB4MjU4OCk7ICAgICAgLyogUXVhZHJhbnQgVUwgYW5k IExMIGFuZCBMUiAqLworICAgICAgY2FzZSAweEUzMjQ6IHJldHVybigweDI1ODgpOyAgICAgIC8q IFF1YWRyYW50IFVMIGFuZCBMUiAqLworICAgICAgY2FzZSAweEUzMjU6IHJldHVybigweDI1ODgp OyAgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBMUiAqLworICAgICAgY2FzZSAweEUzMjY6IHJldHVy bigweDI1ODgpOyAgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBVUiBhbmQgTEwgKi8KKyAgICAgIGNh c2UgMHhFMzI3OiByZXR1cm4oMHgyNTg4KTsgICAgICAvKiBRdWFkcmFudCBVTCBhbmQgVVIgYW5k IExSICovCisgICAgICBjYXNlIDB4RTMyODogcmV0dXJuKDB4MjU5MCk7ICAgICAgLyogUXVhZHJh bnQgVVIgKi8KKyAgICAgIGNhc2UgMHhFMzI5OiByZXR1cm4oMHgyNTg4KTsgICAgICAvKiBRdWFk cmFudCBVUiBhbmQgTEwgYW5kIExSICovCisgICAgICBjYXNlIDB4RTQwMDogcmV0dXJuKDB4MjIx YSk7ICAgICAgLyogUmFkaWNhbCBzeW1ib2wsIHNtYWxsICovCisgICAgICBjYXNlIDB4RTQwMTog cmV0dXJuKDB4MDBiZik7ICAgICAgLyogUmV2ZXJzZSBxdWVzdGlvbiBtYXJrICovCisgICAgICBk ZWZhdWx0OiByZXR1cm4oKHVuc2lnbmVkKTB4ZmZmZCk7CisgICAgfQorfQorCitpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5pY29kZSB0byBDUDQzNyBzdWJzdGl0 dXRpb25zICovCisjaWZkZWYgQ0tfQU5TSUMKK3R4X2Nwc3ViKFVTSE9SVCBjKQorI2Vsc2UKK3R4 X2Nwc3ViKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50IHg7 CisgICAgaWYgKGMgPCAweDAwODApICAgICAgICAgICAgICAgICAgICAgLyogQVNDSUkgKi8KKyAg ICAgIHJldHVybigoQ0hBUikoYyAmIDB4ZmYpKTsKKworICAgIGlmIChjID49IDB4MDA4MCAmJiBj IDw9IDB4MDEwMCkgeworICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAgIC8q IExhdGluLTEgKi8KKyAgICAgICAgICBjYXNlIDB4MDBBMjogcmV0dXJuKDB4OWIpOyAgICAvKiBD ZW50IHNpZ24gKi8KKyAgICAgICAgICBjYXNlIDB4MDBBMzogcmV0dXJuKDE1Nik7ICAgICAvKiBQ b3VuZCBzaWduICovCisgICAgICAgICAgY2FzZSAweDAwQUM6IHJldHVybigxNzApOyAgICAgLyog Tm90IHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgwMEIwOiByZXR1cm4oMjQ4KTsgICAgIC8q IERlZ3JlZSBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MDBCMTogcmV0dXJuKDI0MSk7ICAg ICAvKiBQbHVzIG9yIG1pbnVzIHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgwMEIyOiByZXR1 cm4oMjUzKTsgICAgIC8qIFN1cGVyc2NyaXB0IDIgKi8KKyAgICAgICAgICBjYXNlIDB4MDBCMzog cmV0dXJuKDUxKTsgICAgICAvKiBTdXBlcnNjcmlwdCAzICovCisgICAgICAgICAgY2FzZSAweDAw QjY6IHJldHVybigxNCk7ICAgICAgLyogUGlsY3JvdyBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNl IDB4MDBCNzogcmV0dXJuKDI1MCk7ICAgICAvKiBDZW50ZXIgZG90LCBzbWFsbCAqLworICAgICAg ICAgIGNhc2UgMHgwMEI5OiByZXR1cm4oNDkpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDEgKi8KKyAg ICAgICAgICBjYXNlIDB4MDBEMDogcmV0dXJuKDY4KTsgICAgICAvKiBFdGggLT4gRCAqLworICAg ICAgICAgIGNhc2UgMHgwMEQ3OiByZXR1cm4oMTIwKTsgICAgIC8qIE11bHRpcGxpY2F0aW9uIHN5 bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgwMERFOiByZXR1cm4oODQpOyAgICAgIC8qIFRob3Ju IC0+IFQgKi8KKyAgICAgICAgICBjYXNlIDB4MDBGMDogcmV0dXJuKDEwMCk7ICAgICAvKiBldGgg LT4gZXRoICovCisgICAgICAgICAgY2FzZSAweDAwRjc6IHJldHVybigyNDYpOyAgICAgLyogRGl2 aXNpb24gc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDAwRkU6IHJldHVybigxMTYpOyAgICAg LyogdGhvcm4gLT4gdCAqLworICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigweDEzKTsKKyAgICAg ICAgfQorICAgIH0gZWxzZSBpZiAoYyA+PSAweDAxMDAgJiYgYyA8PSAweDAyZmYpIHsgLyogTGF0 aW4tMiBldGMgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgY2FzZSAweDAxMDM6 IHJldHVybig5Nyk7ICAgICAgLyogYSBicmV2ZSAqLworICAgICAgICAgIGNhc2UgMHgwMTA1OiBy ZXR1cm4oOTcpOyAgICAgIC8qIGEgb2dvbmVrICovCisgICAgICAgICAgY2FzZSAweDAxMDc6ICAg ICAgICAgICAgICAgICAgLyogYyBhY3V0ZSAqLworICAgICAgICAgIGNhc2UgMHgwMTBkOiByZXR1 cm4oOTkpOyAgICAgIC8qIGMgY2Fyb24gKi8KKyAgICAgICAgICBjYXNlIDB4MDEwZjogICAgICAg ICAgICAgICAgICAvKiBkIGNhcm9uICovCisgICAgICAgICAgY2FzZSAweDAxMTE6IHJldHVybigx MDApOyAgICAgLyogZCB3aXRoIHN0cm9rZSAqLworICAgICAgICAgIGNhc2UgMHgwMTE5OiAgICAg ICAgICAgICAgICAgIC8qIGUgb2dvbmVrICovCisgICAgICAgICAgY2FzZSAweDAxMWI6IHJldHVy bigxMDEpOyAgICAgLyogZSBjYXJvbiAqLworICAgICAgICAgIGNhc2UgMHgwMTFmOiByZXR1cm4o MTAzKTsgICAgIC8qIGcgYnJldmUgKi8KKyAgICAgICAgICBjYXNlIDB4MDEzMDogcmV0dXJuKDcz KTsgICAgICAvKiBDYXBpdGFsIEkgd2l0aCBEb3QgKi8KKyAgICAgICAgICBjYXNlIDB4MDEzMTog cmV0dXJuKDEwNSk7ICAgICAvKiBEb3RsZXNzIGkgKi8KKyAgICAgICAgICBjYXNlIDB4MDEzMjog cmV0dXJuKDg5KTsgICAgICAvKiBJSiA9PiBZICovCisgICAgICAgICAgY2FzZSAweDAxMzM6IHJl dHVybigxNTIpOyAgICAgLyogaWogLT4geSBkaWFlcmVzaXMgKi8KKyAgICAgICAgICBjYXNlIDB4 MDEzYTogICAgICAgICAgICAgICAgICAvKiBsIGFjdXRlICovCisgICAgICAgICAgY2FzZSAweDAx M2U6ICAgICAgICAgICAgICAgICAgLyogbCBjYXJvbiAqLworICAgICAgICAgIGNhc2UgMHgwMTQy OiByZXR1cm4oMTA4KTsgICAgIC8qIGwgd2l0aCBzdHJva2UgKi8KKyAgICAgICAgICBjYXNlIDB4 MDE0NDogICAgICAgICAgICAgICAgICAvKiBuIGFjdXRlICovCisgICAgICAgICAgY2FzZSAweDAx NDg6IHJldHVybigxMTApOyAgICAgLyogbiBjYXJvbiAqLworICAgICAgICAgIGNhc2UgMHgwMTUx OiByZXR1cm4oMTExKTsgICAgIC8qIG8gZG91YmxlIGFjdXRlICovCisgICAgICAgICAgY2FzZSAw eDAxNTI6IHJldHVybig3OSk7ICAgICAgLyogT0UgKi8KKyAgICAgICAgICBjYXNlIDB4MDE1Mzog cmV0dXJuKDExMSk7ICAgICAvKiBvZSAqLworICAgICAgICAgIGNhc2UgMHgwMTU1OiAgICAgICAg ICAgICAgICAgIC8qIHIgYWN1dGUgKi8KKyAgICAgICAgICBjYXNlIDB4MDE1OTogcmV0dXJuKDEx NCk7ICAgICAvKiByIGNhcm9uICovCisgICAgICAgICAgY2FzZSAweDAxNWI6ICAgICAgICAgICAg ICAgICAgLyogcyBhY3V0ZSAqLworICAgICAgICAgIGNhc2UgMHgwMTVmOiAgICAgICAgICAgICAg ICAgIC8qIHMgb2dvbmVrICovCisgICAgICAgICAgY2FzZSAweDAxNjE6IHJldHVybigxMTUpOyAg ICAgLyogcyBjYXJvbiAqLworICAgICAgICAgIGNhc2UgMHgwMTYzOiAgICAgICAgICAgICAgICAg IC8qIHQgb2dvbmVrICovCisgICAgICAgICAgY2FzZSAweDAxNjU6ICAgICAgICAgICAgICAgICAg LyogdCBjYXJvbiAqLworICAgICAgICAgIGNhc2UgMHgwMTY3OiByZXR1cm4oMTE2KTsgICAgIC8q IHQgd2l0aCBzdHJva2UgKi8KKyAgICAgICAgICBjYXNlIDB4MDE2ZjogICAgICAgICAgICAgICAg ICAvKiB1IHJpbmcgKi8KKyAgICAgICAgICBjYXNlIDB4MDE3MTogcmV0dXJuKDExNyk7ICAgICAv KiB1IGRvdWJsZSBhY3V0ZSAqLworICAgICAgICAgIGNhc2UgMHgwMTdhOiAgICAgICAgICAgICAg ICAgIC8qIHogYWN1dGUgKi8KKyAgICAgICAgICBjYXNlIDB4MDE3YzogICAgICAgICAgICAgICAg ICAvKiB6IGRvdCBhYm92ZSAqLworICAgICAgICAgIGNhc2UgMHgwMTdlOiByZXR1cm4oMTIyKTsg ICAgIC8qIHogY2Fyb24gKi8KKyAgICAgICAgICBjYXNlIDB4MDE5MjogcmV0dXJuKDE1OSk7ICAg ICAvKiBGdW5jdGlvbi1vZiBzeW1ib2wsIFNjcmlwdCBmICovCisgICAgICAgICAgY2FzZSAweDAx ZDA6IHJldHVybigxMDUpOyAgICAgLyogaSBjYXJvbiAqLworICAgICAgICAgIGNhc2UgMHgwMmM3 OiAgICAgICAgICAgICAgICAgIC8qIGNhcm9uIC0+IFVOSyAqLworICAgICAgICAgIGNhc2UgMHgw MmQ4OiByZXR1cm4oMHgxMyk7ICAgIC8qIGJyZXZlIC0+IFVOSyAqLworICAgICAgICAgIGNhc2Ug MHgwMmRkOiByZXR1cm4oMzQpOyAgICAgIC8qIERvdWJsZSBhY3V0ZSAtPiBEb3VibGVxdW90ZSAq LworICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigweDEzKTsKKyAgICAgICAgfQorICAgIH0gZWxz ZSBpZiAoYyA+PSAweDAzMDAgJiYgYyA8PSAweDAzZmYpIHsgLyogR3JlZWsgKi8KKyAgICAgICAg c3dpdGNoIChjKSB7CisgICAgICAgICAgY2FzZSAweDAzOTM6IHJldHVybigyMjYpOyAgICAgLyog VXBwZXJjYXNlIEdyZWVrIEdhbW1hICovCisgICAgICAgICAgY2FzZSAweDAzOTg6IHJldHVybigy MzMpOyAgICAgLyogVXBwZXJjYXNlIEdyZWVrIFRoZXRhICovCisgICAgICAgICAgY2FzZSAweDAz OUI6IHJldHVybigyMzUpOyAgICAgLyogVXBwZXJjYXNlIEdyZWVrIExhbWJkYSAqLworICAgICAg ICAgIGNhc2UgMHgwM0EwOiByZXR1cm4oMjI3KTsgICAgIC8qIFVwcGVyY2FzZSBHcmVlayBQaSAq LworICAgICAgICAgIGNhc2UgMHgwM0EzOiByZXR1cm4oMjI4KTsgICAgIC8qIFVwcGVyY2FzZSBH cmVlayBTaWdtYSAqLworICAgICAgICAgIGNhc2UgMHgwM0E0OiByZXR1cm4oMHhFQSk7ICAgIC8q IE9tZWdhICovCisgICAgICAgICAgY2FzZSAweDAzQTY6IHJldHVybigyMzIpOyAgICAgLyogVXBw ZXJjYXNlIEdyZWVrIFBoaSAqLworICAgICAgICAgIGNhc2UgMHgwM0E5OiByZXR1cm4oMjM0KTsg ICAgIC8qIFVwcGVyY2FzZSBHcmVlayBPbWVnYSAqLworICAgICAgICAgIGNhc2UgMHgwM0IxOiBy ZXR1cm4oMHhFMCk7ICAgIC8qIGFscGhhICovCisgICAgICAgICAgY2FzZSAweDAzQjI6IHJldHVy bigweEUxKTsgICAgLyogYmV0YSAqLworICAgICAgICAgIGNhc2UgMHgwM0IzOiByZXR1cm4oMjI2 KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBnYW1tYSAqLworICAgICAgICAgIGNhc2UgMHgwM0I0 OiByZXR1cm4oMHhFQik7ICAgIC8qIGRlbHRhICovCisgICAgICAgICAgY2FzZSAweDAzQjU6IHJl dHVybigyMzgpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIGVwc2lsb24gKi8KKyAgICAgICAgICBj YXNlIDB4MDNCNzogcmV0dXJuKDIzOCk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgZXRhICovCisg ICAgICAgICAgY2FzZSAweDAzQjg6IHJldHVybigyMzMpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVr IHRoZXRhICovCisgICAgICAgICAgY2FzZSAweDAzQjk6IHJldHVybigxMDUpOyAgICAgLyogTG93 ZXJjYXNlIEdyZWVrIGlvdGEgKi8KKyAgICAgICAgICBjYXNlIDB4MDNCQTogcmV0dXJuKDEwNyk7 ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsga2FwcGEgKi8KKyAgICAgICAgICBjYXNlIDB4MDNCQjog cmV0dXJuKDIzNSk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgbGFtYmRhICovCisgICAgICAgICAg Y2FzZSAweDAzQkM6IHJldHVybigyMzApOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIG11ICovCisg ICAgICAgICAgY2FzZSAweDAzQzA6IHJldHVybigyMjcpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVr IHBpICovCisgICAgICAgICAgY2FzZSAweDAzQzM6IHJldHVybigyMjkpOyAgICAgLyogTG93ZXJj YXNlIEdyZWVrIHNpZ21hICovCisgICAgICAgICAgY2FzZSAweDAzQzQ6IHJldHVybigyMzEpOyAg ICAgLyogTG93ZXJjYXNlIEdyZWVrIHRhdSAqLworICAgICAgICAgIGNhc2UgMHgwM0M2OiByZXR1 cm4oMjM3KTsgICAgIC8qIExvd2VyY2FzZSBHcmVlayBwaGkgKi8KKyAgICAgICAgICBjYXNlIDB4 MDNDNzogcmV0dXJuKDEyMCk7ICAgICAvKiBMb3dlcmNhc2UgR3JlZWsgY2hpICovCisgICAgICAg ICAgY2FzZSAweDAzQzk6IHJldHVybigyMzQpOyAgICAgLyogTG93ZXJjYXNlIEdyZWVrIG9tZWdh ICovCisgICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOworICAgICAgICB9CisgICAgfSBl bHNlIGlmIChjID49IDB4MjAwMCAmJiBjIDw9IDB4MjBmZikgeyAvKiBTdWIrU3VwZXJzY3JpcHRz ICYgQ3VycmVuY3kgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgY2FzZSAweDIw M0M6IHJldHVybigweDEzKTsgICAgLyogISEgKi8KKyAgICAgICAgICBjYXNlIDB4MjA3MDogcmV0 dXJuKDQ4KTsgICAgICAvKiBTdXBlcnNjcmlwdCAwICovCisgICAgICAgICAgY2FzZSAweDIwNzQ6 IHJldHVybig1Mik7ICAgICAgLyogU3VwZXJzY3JpcHQgNCAqLworICAgICAgICAgIGNhc2UgMHgy MDc1OiByZXR1cm4oNTMpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDUgKi8KKyAgICAgICAgICBjYXNl IDB4MjA3NjogcmV0dXJuKDU0KTsgICAgICAvKiBTdXBlcnNjcmlwdCA2ICovCisgICAgICAgICAg Y2FzZSAweDIwNzc6IHJldHVybig1NSk7ICAgICAgLyogU3VwZXJzY3JpcHQgNyAqLworICAgICAg ICAgIGNhc2UgMHgyMDc4OiByZXR1cm4oNTYpOyAgICAgIC8qIFN1cGVyc2NyaXB0IDggKi8KKyAg ICAgICAgICBjYXNlIDB4MjA3OTogcmV0dXJuKDU3KTsgICAgICAvKiBTdXBlcnNjcmlwdCA5ICov CisgICAgICAgICAgY2FzZSAweDIwN2E6IHJldHVybig0Myk7ICAgICAgLyogU3VwZXJzY3JpcHQg KyAqLworICAgICAgICAgIGNhc2UgMHgyMDdiOiByZXR1cm4oNDUpOyAgICAgIC8qIFN1cGVyc2Ny aXB0IC0gKi8KKyAgICAgICAgICBjYXNlIDB4MjA3RjogcmV0dXJuKDI1Mik7ICAgICAvKiBTdXBl cnNjcmlwdCBuICovCisgICAgICAgICAgY2FzZSAweDIwODA6IHJldHVybig0OCk7ICAgICAgLyog U3Vic2NyaXB0IDAgKi8KKyAgICAgICAgICBjYXNlIDB4MjA4MTogcmV0dXJuKDQ5KTsgICAgICAv KiBTdWJzY3JpcHQgMSAqLworICAgICAgICAgIGNhc2UgMHgyMDgyOiByZXR1cm4oNTApOyAgICAg IC8qIFN1YnNjcmlwdCAyICovCisgICAgICAgICAgY2FzZSAweDIwODM6IHJldHVybig1MSk7ICAg ICAgLyogU3Vic2NyaXB0IDMgKi8KKyAgICAgICAgICBjYXNlIDB4MjA4NDogcmV0dXJuKDUyKTsg ICAgICAvKiBTdWJzY3JpcHQgNCAqLworICAgICAgICAgIGNhc2UgMHgyMDg1OiByZXR1cm4oNTMp OyAgICAgIC8qIFN1YnNjcmlwdCA1ICovCisgICAgICAgICAgY2FzZSAweDIwODY6IHJldHVybig1 NCk7ICAgICAgLyogU3Vic2NyaXB0IDYgKi8KKyAgICAgICAgICBjYXNlIDB4MjA4NzogcmV0dXJu KDU1KTsgICAgICAvKiBTdWJzY3JpcHQgNyAqLworICAgICAgICAgIGNhc2UgMHgyMDg4OiByZXR1 cm4oNTYpOyAgICAgIC8qIFN1YnNjcmlwdCA4ICovCisgICAgICAgICAgY2FzZSAweDIwODk6IHJl dHVybig1Nyk7ICAgICAgLyogU3Vic2NyaXB0IDkgKi8KKyAgICAgICAgICBjYXNlIDB4MjA4YTog cmV0dXJuKDQzKTsgICAgICAvKiBTdWJzY3JpcHQgKyAqLworICAgICAgICAgIGNhc2UgMHgyMDhi OiByZXR1cm4oNDUpOyAgICAgIC8qIFN1YnNjcmlwdCAtICovCisgICAgICAgICAgY2FzZSAweDIw YTc6IHJldHVybigweDkzKTsgICAgLyogUGVzZXRhICovCisgICAgICAgICAgZGVmYXVsdDoKKyAg ICAgICAgICAgIHggPSB0eF9wdW5jKGMpOyAgICAgICAgICAgICAvKiBWYXJpb3VzIHNwYWNlcywg ZGFzaGVzLCBldGMgKi8KKyAgICAgICAgICAgIHJldHVybigoeCA8IDApID8gMHgxMyA6IHgpOwor ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjID49IDB4MjEwMCAmJiBjIDw9IDB4MjFmZikgeyAv KiBBcnJvd3MgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgY2FzZSAweDIxOTA6 IHJldHVybigyNyk7ICAgICAgLyogQXJyb3csIGxlZnQtcG9pbnRpbmcgKi8KKyAgICAgICAgICBj YXNlIDB4MjE5MTogcmV0dXJuKDI0KTsgICAgICAvKiBBcnJvdywgdXAtcG9pbnRpbmcgKi8KKyAg ICAgICAgICBjYXNlIDB4MjE5MjogcmV0dXJuKDI2KTsgICAgICAvKiBBcnJvdywgcmlnaHQtcG9p bnRpbmcgKi8KKyAgICAgICAgICBjYXNlIDB4MjE5MzogcmV0dXJuKDI1KTsgICAgICAvKiBBcnJv dywgZG93bi1wb2ludGluZyAqLworICAgICAgICAgIGNhc2UgMHgyMTk0OiByZXR1cm4oMHgxZCk7 ICAgIC8qIEFycm93LCBsZWZ0LXJpZ2h0ICovCisgICAgICAgICAgY2FzZSAweDIxOTU6IHJldHVy bigweDEyKTsgICAgLyogQXJyb3csIHVwLWRvd24gKi8KKyAgICAgICAgICBjYXNlIDB4MjE5Rjog cmV0dXJuKDB4MTgpOyAgICAvKiBBcnJvdywgdXAsIGRvdWJsZWhlYWQgKi8KKyAgICAgICAgICBj YXNlIDB4MjFBMTogcmV0dXJuKDB4MTkpOyAgICAvKiBBcnJvdywgZG93biwgZG91YmxlaGVhZCAq LworICAgICAgICAgIGNhc2UgMHgyMUE4OiByZXR1cm4oMHgxNyk7ICAgIC8qIEFycm93LCB1cC1k b3duIHdpdGggYmFzZSAqLworICAgICAgICAgIGNhc2UgMHgyMUQyOiByZXR1cm4oMjYpOyAgICAg IC8qIEltcGxpZXMgc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDIxRDQ6IHJldHVybigyOSk7 ICAgICAgLyogSWYgYW5kIG9ubHkgaWYgc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDIxRTQ6 IHJldHVybigweDFCKTsgICAgLyogQXJyb3csIGxlZnQsIHRvIGJhciAqLworICAgICAgICAgIGNh c2UgMHgyMUU1OiByZXR1cm4oMHgxQSk7ICAgIC8qIEFycm93LCByaWdodCwgdG8gYmFyICovCisg ICAgICAgICAgY2FzZSAweDIxRTg6IHJldHVybigweDEwKTsgICAgLyogT3V0bGluZSB3aGl0ZSBy aWdodCBhcnJvdyAqLworICAgICAgICAgIGNhc2UgMHgyMUU5OiByZXR1cm4oMHgwZik7ICAgIC8q IE91dGxpbmUgd2hpdGUgZG93biBhcnJvdyAqLworICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigw eDEzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYyA+PSAweDIyMDAgJiYgYyA8PSAweDIy ZmYpIHsgLyogTWF0aCAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIDB4 MjIwMjogcmV0dXJuKDIzNSk7ICAgICAvKiBQYXJ0aWFsIGRpZmZlcmVudGlhbCBzeW1ib2wgKi8K KyAgICAgICAgICBjYXNlIDB4MjIwNzogcmV0dXJuKDMxKTsgICAgICAvKiBOYWJsYSwgTGFwbGFj ZSBvcGVyYXRvciAqLworICAgICAgICAgIGNhc2UgMHgyMjA4OiByZXR1cm4oMHgzMyk7ICAgIC8q IChiZWNhdXNlIG9mIFFOWCBtaXN1bmRlcnN0YW5kaW5nKSAqLworICAgICAgICAgIGNhc2UgMHgy MjFBOiByZXR1cm4oMjUxKTsgICAgIC8qIFJhZGljYWwgc3ltYm9sICovCisgICAgICAgICAgY2Fz ZSAweDIyMUQ6IHJldHVybigyMzYpOyAgICAgLyogUHJvcG9ydGlvbmFsLXRvICovCisgICAgICAg ICAgY2FzZSAweDIyMUU6IHJldHVybigyMzYpOyAgICAgLyogSW5maW5pdHkgc3ltYm9sICovCisg ICAgICAgICAgY2FzZSAweDIyMjc6IHJldHVybigzMCk7ICAgICAgLyogTG9naWNhbCBBTkQgKi8K KyAgICAgICAgICBjYXNlIDB4MjIyODogcmV0dXJuKDMxKTsgICAgICAvKiBMb2dpY2FsIE9SICov CisgICAgICAgICAgY2FzZSAweDIyMjk6IHJldHVybigyMzkpOyAgICAgLyogSW50ZXJzZWN0aW9u IHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgyMjJBOiByZXR1cm4oODUpOyAgICAgIC8qIFVu aW9uIHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgyMjJCOiByZXR1cm4oMjQ0KTsgICAgIC8q IEludGVncmFsIHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgyMjM0OiByZXR1cm4oMjU0KTsg ICAgIC8qIFRoZXJlZm9yZSBzeW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MjIzQzogcmV0dXJu KDEyNik7ICAgICAvKiBDZW50ZXJlZCB0aWxkZSBvcGVyYXRvciAqLworICAgICAgICAgIGNhc2Ug MHgyMjQzOiByZXR1cm4oMjQ3KTsgICAgIC8qIEFzeW1wdG90aWNhbGx5IGVxdWFscyAqLworICAg ICAgICAgIGNhc2UgMHgyMjQ4OiByZXR1cm4oMjQ3KTsgICAgIC8qIEFsbW9zdCBlcXVhbCB0byBz eW1ib2wgKi8KKyAgICAgICAgICBjYXNlIDB4MjI2MDogcmV0dXJuKDg4KTsgICAgICAvKiBOb3Qg ZXF1YWwgc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDIyNjE6IHJldHVybigyNDApOyAgICAg LyogSWRlbnRpdHkgc3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDIyNjQ6IHJldHVybigyNDMp OyAgICAgLyogTGVzcyB0aGFuIG9yIGVxdWFsIHN5bWJvbCAqLworICAgICAgICAgIGNhc2UgMHgy MjY1OiByZXR1cm4oMjQyKTsgICAgIC8qIEdyZWF0ZXIgdGhhbiBvciBlcXVhbCBzeW1ib2wgKi8K KyAgICAgICAgICBjYXNlIDB4MjI4MjogcmV0dXJuKDQwKTsgICAgICAvKiBTdWJzZXQgc3ltYm9s ICovCisgICAgICAgICAgY2FzZSAweDIyODM6IHJldHVybig0MSk7ICAgICAgLyogU3VwZXJzZXQg c3ltYm9sICovCisgICAgICAgICAgY2FzZSAweDIyQTY6IHJldHVybigweEMzKTsgICAgLyogQXNz ZXJ0aW9uIHN5bWJvbCAqLworICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigweDEzKTsKKyAgICAg ICAgfQorICAgIH0gZWxzZSBpZiAoYyA+PSAweDIzQkEgJiYgYyA8PSAweDIzQkQgKSB7CisgICAg ICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlIDB4MjNCQTogcmV0dXJuKDB4MjUwMCk7ICAg ICAgLyogSCBsaW5lIC0gU2NhbiAxICovCisgICAgICAgIGNhc2UgMHgyM0JCOiByZXR1cm4oMHgy NTAwKTsgICAgICAvKiBIIGxpbmUgLSBTY2FuIDMgKi8KKyAgICAgICAgY2FzZSAweDIzQkM6IHJl dHVybigweDI1MDApOyAgICAgIC8qIEggbGluZSAtIFNjYW4gNyAqLworICAgICAgICBjYXNlIDB4 MjNCRDogcmV0dXJuKDB4MjUwMCk7ICAgICAgLyogSCBsaW5lIC0gU2NhbiA5ICovCisgICAgICAg IH0KKyAgICB9IGVsc2UgaWYgKGMgPj0gMHgyMzAwICYmIGMgPD0gMHgyNGZmKSB7IC8qIFRlY2gg Ki8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgY2FzZSAweDIzMDg6IHJldHVybigw eERBKTsgICAgLyogTGVmdCBjZWlsaW5nICovCisgICAgICAgICAgY2FzZSAweDIzMDk6IHJldHVy bigweEJGKTsgICAgLyogUmlnaHQgY2VpbGluZyAqLworICAgICAgICAgIGNhc2UgMHgyMzBBOiBy ZXR1cm4oMHhDMCk7ICAgIC8qIExlZnQgZmxvb3IgKi8KKyAgICAgICAgICBjYXNlIDB4MjMwQjog cmV0dXJuKDB4RDkpOyAgICAvKiBSaWdodCBmbG9vciAqLworICAgICAgICAgIGNhc2UgMHgyMzE5 OiByZXR1cm4oMHgxQyk7ICAgIC8qIFR1cm5lZCBOb3Qgc2lnbiAqLworICAgICAgICAgIGNhc2Ug MHgyMzIwOiByZXR1cm4oMjQ0KTsgICAgIC8qIEludGVncmFsIHN5bWJvbCB0b3AgKi8KKyAgICAg ICAgICBjYXNlIDB4MjMyMTogcmV0dXJuKDI0NSk7ICAgICAvKiBJbnRlZ3JhbCBzeW1ib2wgYm90 ICovCisgICAgICAgICAgY2FzZSAweDIzMjk6IHJldHVybig2MCk7ICAgICAgLyogQlJBLCBsYXJn ZSBsZWZ0IGFuZ2xlIGJyYWNrZXQgKi8KKyAgICAgICAgICBjYXNlIDB4MjMyQTogcmV0dXJuKDYy KTsgICAgICAvKiBLRVQsIGxhcmdlIHJpZ2h0IGFuZ2xlIGJyYWNrZXQgKi8KKyAgICAgICAgICBj YXNlIDB4MjQwOTogcmV0dXJuKDI2KTsgICAgICAvKiAiSFQiIGJlY29tZXMgcmlnaHQgYXJyb3cg Ki8KKyAgICAgICAgICBjYXNlIDB4MjQwQTogcmV0dXJuKDI1KTsgICAgICAvKiAiTEYiIGJlY29t ZXMgZG93biBhcnJvdyAqLworICAgICAgICAgIGNhc2UgMHgyNDBCOiByZXR1cm4oMjMpOyAgICAg IC8qICJWVCIgYmVjb21lcyB1cC1kb3duIGFycm93ICovCisgICAgICAgICAgY2FzZSAweDI0MEM6 IHJldHVybigyNCk7ICAgICAgLyogIkZGIiBiZWNvbWVzIHVwIGFycm93ICovCisgICAgICAgICAg Y2FzZSAweDI0MEQ6IHJldHVybigyNyk7ICAgICAgLyogIkNSIiBiZWNvbWVzIGxlZnQgYXJyb3cg Ki8KKyAgICAgICAgICBjYXNlIDB4MjQyNDogcmV0dXJuKDMxKTsgICAgICAvKiAiTkwiIGJlY29t ZXMgZG93biB0cmlhbmdsZSAqLworICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigweDEzKTsKKyAg ICAgICAgfQorICAgIH0gZWxzZSBpZiAoYyA+PSAweDI1MDAgJiYgYyA8PSAweDI1NTIpIHsgLyog Qm94IGRyYXdpbmcgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgY2FzZSAweDI1 MDA6IHJldHVybigxOTYpOyAgICAgLyogQ2VudGVyIGJveCBiYXIgaG9yaXpvbnRhbCAqLworICAg ICAgICAgIGNhc2UgMHgyNTAxOiByZXR1cm4oMHhDRCk7ICAgIC8qIEJvbGQgLT4gRG91YmxlICov CisgICAgICAgICAgY2FzZSAweDI1MDI6IHJldHVybigxNzkpOyAgICAgLyogQ2VudGVyIGJveCBi YXIgdmVydGljYWwgKi8KKyAgICAgICAgICBjYXNlIDB4MjUwMzogcmV0dXJuKDB4QkEpOyAgICAv KiBCb2xkICovCisgICAgICAgICAgY2FzZSAweDI1MDQ6IHJldHVybig0NSk7ICAgICAgLyogRGFz aGVkIGxpbmUgKi8KKyAgICAgICAgICBjYXNlIDB4MjUwNjogcmV0dXJuKDEyNCk7ICAgICAvKiBC cm9rZW4gdmVydGljYWwgYmFyICovCisgICAgICAgICAgY2FzZSAweDI1MEM6IHJldHVybigyMTgp OyAgICAgLyogVUwgYm94IGNvcm5lciAqLworICAgICAgICAgIGNhc2UgMHgyNTBGOiByZXR1cm4o MHhDOSk7ICAgIC8qIEJvbGQgKi8KKyAgICAgICAgICBjYXNlIDB4MjUxMDogcmV0dXJuKDE5MSk7 ICAgICAvKiBVUiBCb3ggQ29ybmVyICovCisgICAgICAgICAgY2FzZSAweDI1MTM6IHJldHVybigw eEJCKTsgICAgLyogQm9sZCAqLworICAgICAgICAgIGNhc2UgMHgyNTE0OiByZXR1cm4oMTkyKTsg ICAgIC8qIExMIGJveCBjb3JuZXIgKi8KKyAgICAgICAgICBjYXNlIDB4MjUxNzogcmV0dXJuKDB4 QzgpOyAgICAvKiBCb2xkICovCisgICAgICAgICAgY2FzZSAweDI1MTg6IHJldHVybigyMTcpOyAg ICAgLyogTFIgYm94IGNvcm5lciAqLworICAgICAgICAgIGNhc2UgMHgyNTFCOiByZXR1cm4oMHhC Qyk7ICAgIC8qIEJvbGQgKi8KKyAgICAgICAgICBjYXNlIDB4MjUxQzogcmV0dXJuKDE5NSk7ICAg ICAvKiBMZWZ0IG1pZGRsZSBib3ggc2lkZSAqLworICAgICAgICAgIGNhc2UgMHgyNTIwOiByZXR1 cm4oMHhDMyk7CisgICAgICAgICAgY2FzZSAweDI1MjM6IHJldHVybigweENDKTsgICAgLyogQm9s ZCAqLworICAgICAgICAgIGNhc2UgMHgyNTI0OiByZXR1cm4oMTgwKTsgICAgIC8qIFJpZ2h0IG1p ZGRsZSBib3ggc2lkZSAqLworICAgICAgICAgIGNhc2UgMHgyNTI4OiByZXR1cm4oMTgwKTsKKyAg ICAgICAgICBjYXNlIDB4MjUyQjogcmV0dXJuKDB4QjkpOyAgICAvKiBCb2xkICovCisgICAgICAg ICAgY2FzZSAweDI1MkM6IHJldHVybigxOTQpOyAgICAgLyogTWlkZGxlIGJveCB0b3AgKi8KKyAg ICAgICAgICBjYXNlIDB4MjUyRjogcmV0dXJuKDE5NCk7CisgICAgICAgICAgY2FzZSAweDI1MzM6 IHJldHVybigweENCKTsgICAgLyogQm9sZCAqLworICAgICAgICAgIGNhc2UgMHgyNTM0OiByZXR1 cm4oMTkzKTsgICAgIC8qIE1pZGRsZSBib3ggYm90ICovCisgICAgICAgICAgY2FzZSAweDI1Mzc6 IHJldHVybigxOTMpOworICAgICAgICAgIGNhc2UgMHgyNTNCOiByZXR1cm4oMHhDQSk7ICAgIC8q IEJvbGQgKi8KKyAgICAgICAgICBjYXNlIDB4MjUzQzogcmV0dXJuKDE5Nyk7ICAgICAvKiBCb3gg aW50ZXJzZWN0aW9uICovCisgICAgICAgICAgY2FzZSAweDI1M0Y6IHJldHVybigxOTcpOworICAg ICAgICAgIGNhc2UgMHgyNTQyOiByZXR1cm4oMTk3KTsKKyAgICAgICAgICBjYXNlIDB4MjU0Nzog cmV0dXJuKDE5Nyk7CisgICAgICAgICAgY2FzZSAweDI1NDg6IHJldHVybigxOTcpOworICAgICAg ICAgIGNhc2UgMHgyNTQ5OiByZXR1cm4oMTk3KTsKKyAgICAgICAgICBjYXNlIDB4MjU0QTogcmV0 dXJuKDE5Nyk7CisgICAgICAgICAgY2FzZSAweDI1NEI6IHJldHVybigweENFKTsgICAgLyogQm9s ZCAqLworICAgICAgICAgIGNhc2UgMHgyNTUwOiByZXR1cm4oMjA1KTsgICAgIC8qIENlbnRlciBi b3ggYmFyIGhvcml6b250YWwgZG91YmxlICovCisgICAgICAgICAgY2FzZSAweDI1NTE6IHJldHVy bigxODYpOyAgICAgLyogQ2VudGVyIGJveCBiYXIgdmVydGljYWwgZG91YmxlICovCisgICAgICAg ICAgY2FzZSAweDI1NTI6IHJldHVybigyMTMpOyAgICAgLyogVUwgYm94IGNvcm5lciBzaW5nbGUg dG8gZG91YmxlICovCisgICAgICAgICAgZGVmYXVsdDogcmV0dXJuKDB4MTMpOworICAgICAgICB9 CisgICAgfSBlbHNlIGlmIChjID49IDB4MjU1MyAmJiBjIDw9IDB4MjU3OSkgeyAvKiBNb3JlIGJv eCBkcmF3aW5nICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgIGNhc2UgMHgyNTUz OiByZXR1cm4oMjE0KTsgICAgIC8qIFVMIGJveCBjb3JuZXIgZG91YmxlIHRvIHNpbmdsZSAqLwor ICAgICAgICAgIGNhc2UgMHgyNTU0OiByZXR1cm4oMjAxKTsgICAgIC8qIFVMIGJveCBjb3JuZXIg ZG91YmxlICovCisgICAgICAgICAgY2FzZSAweDI1NTU6IHJldHVybigxODQpOyAgICAgLyogVVIg Ym94IGNvcm5lciBkb3VibGUgdG8gc2luZ2xlICovCisgICAgICAgICAgY2FzZSAweDI1NTY6IHJl dHVybigxODMpOyAgICAgLyogVVIgYm94IGNvcm5lciBzaW5nbGUgdG8gZG91YmxlICovCisgICAg ICAgICAgY2FzZSAweDI1NTc6IHJldHVybigxODcpOyAgICAgLyogVVIgYm94IGNvcm5lciBkb3Vi bGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU1ODogcmV0dXJuKDIxMik7ICAgICAvKiBMTCBib3gg Y29ybmVyIHNpbmdsZSB0byBkb3VibGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU1OTogcmV0dXJu KDIxMSk7ICAgICAvKiBMTCBib3ggY29ybmVyIGRvdWJsZSB0byBzaW5nbGUgKi8KKyAgICAgICAg ICBjYXNlIDB4MjU1QTogcmV0dXJuKDIwMCk7ICAgICAvKiBMTCBib3ggY29ybmVyIGRvdWJsZSAq LworICAgICAgICAgIGNhc2UgMHgyNTVCOiByZXR1cm4oMTkwKTsgICAgIC8qIExSIGJveCBjb3Ju ZXIgZG91YmxlIHRvIHNpbmdsZSAqLworICAgICAgICAgIGNhc2UgMHgyNTVDOiByZXR1cm4oMTg5 KTsgICAgIC8qIExSIGJveCBjb3JuZXIgc2luZ2xlIHRvIGRvdWJsZSAqLworICAgICAgICAgIGNh c2UgMHgyNTVEOiByZXR1cm4oMTg4KTsgICAgIC8qIExSIGJveCBjb3JuZXIgZG91YmxlICovCisg ICAgICAgICAgY2FzZSAweDI1NUU6IHJldHVybigxOTgpOyAgICAgLyogTGVmdCBtaWQgYm94IHNp ZGUgc2luZ2xlIHRvIGRvdWJsICovCisgICAgICAgICAgY2FzZSAweDI1NUY6IHJldHVybigxOTkp OyAgICAgLyogTGVmdCBtaWQgYm94IHNpZGUgZG91YmxlIHRvIHNpbmdsICovCisgICAgICAgICAg Y2FzZSAweDI1NjA6IHJldHVybigyMDQpOyAgICAgLyogTGVmdCBtaWRkbGUgYm94IHNpZGUgZG91 YmxlICovCisgICAgICAgICAgY2FzZSAweDI1NjE6IHJldHVybigxODEpOyAgICAgLyogUmlnaHQg Ym94IHNpZGUgZG91YmxlIHRvIHNpbmdsZSAqLworICAgICAgICAgIGNhc2UgMHgyNTYyOiByZXR1 cm4oMTgyKTsgICAgIC8qIFJpZ2h0IGJveCBzaWRlIHNpbmdsZSB0byBkb3VibGUgKi8KKyAgICAg ICAgICBjYXNlIDB4MjU2MzogcmV0dXJuKDE4NSk7ICAgICAvKiBSaWdodCBtaWRkbGUgYm94IHNp ZGUgZG91YmxlICovCisgICAgICAgICAgY2FzZSAweDI1NjQ6IHJldHVybigyMDkpOyAgICAgLyog TWlkZGxlIGJveCB0b3AgZG91YmxlIHRvIHNpbmdsZSAqLworICAgICAgICAgIGNhc2UgMHgyNTY1 OiByZXR1cm4oMjEwKTsgICAgIC8qIE1pZGRsZSBib3ggdG9wIHNpbmdsZSB0byBkb3VibGUgKi8K KyAgICAgICAgICBjYXNlIDB4MjU2NjogcmV0dXJuKDIwMyk7ICAgICAvKiBNaWRkbGUgYm94IHRv cCBkb3VibGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU2NzogcmV0dXJuKDIwNyk7ICAgICAvKiBN aWRkbGUgYm94IGJvdCBzaW5nbGUgdG8gZG91YmxlICovCisgICAgICAgICAgY2FzZSAweDI1Njg6 IHJldHVybigyMDgpOyAgICAgLyogTWlkZGxlIGJveCBib3QgZG91YmxlIHRvIHNpbmdsZSAqLwor ICAgICAgICAgIGNhc2UgMHgyNTY5OiByZXR1cm4oMjAyKTsgICAgIC8qIE1pZGRsZSBib3ggYm90 IGRvdWJsZSAqLworICAgICAgICAgIGNhc2UgMHgyNTZBOiByZXR1cm4oMjE2KTsgICAgIC8qIEJv eCBpbnRlcnNlY3Rpb24gZG91YmxlIHRvIHNpbmdsZSAqLworICAgICAgICAgIGNhc2UgMHgyNTZC OiByZXR1cm4oMjE1KTsgICAgIC8qIEJveCBpbnRlcnNlY3Rpb24gc2luZ2xlIHRvIGRvdWJsZSAq LworICAgICAgICAgIGNhc2UgMHgyNTZDOiByZXR1cm4oMjA2KTsgICAgIC8qIEJveCBpbnRlcnNl Y3Rpb24gZG91YmxlICovCisgICAgICAgICAgY2FzZSAweDI1NkQ6IHJldHVybigyMTgpOyAgICAg LyogVUwgYXJjICovCisgICAgICAgICAgY2FzZSAweDI1NkU6IHJldHVybigxOTEpOyAgICAgLyog VVIgYXJjICovCisgICAgICAgICAgY2FzZSAweDI1NkY6IHJldHVybigyMTcpOyAgICAgLyogTFIg YXJjICovCisgICAgICAgICAgY2FzZSAweDI1NzA6IHJldHVybigxOTIpOyAgICAgLyogTEwgYXJj ICovCisgICAgICAgICAgY2FzZSAweDI1NzE6IHJldHVybigxNzkpOyAgICAgLyogRGlhZ29uYWwg bGluZSBMTCB0byBVUiAqLworICAgICAgICAgIGNhc2UgMHgyNTcyOiByZXR1cm4oMTk2KTsgICAg IC8qIERpYWdvbmFsIGxpbmUgVUwgdG8gTFIgKi8KKyAgICAgICAgICBjYXNlIDB4MjU3MzogcmV0 dXJuKDg4KTsgICAgICAvKiBEaWFnb25hbCBsaW5lcyBjcm9zc2VkICovCisgICAgICAgICAgY2Fz ZSAweDI1NzU6IHJldHVybigweGIzKTsgICAgLyogSGlnaCB2ZXJ0aWNhbCBsaW5lICovCisgICAg ICAgICAgY2FzZSAweDI1NzY6IHJldHVybig0NSk7ICAgICAgLyogU2hvcnQgaG9yaXpvbnRhbCBs aW5lICovCisgICAgICAgICAgY2FzZSAweDI1Nzc6IHJldHVybigweGIzKTsgICAgLyogTG93IHZl cnRpY2FsIGxpbmUgKi8KKyAgICAgICAgICBjYXNlIDB4MjU3OTogcmV0dXJuKDB4YjMpOyAgICAv KiBIaWdoIHZlcnRpY2FsIGxpbmUgYm9sZCAqLworICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigw eDEzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYyA+PSAweDI1N2EgJiYgYyA8PSAweDI1 ZmYpIHsgLyogU3RpbGwgbW9yZSBib3ggZHJhd2luZyAqLworICAgICAgICBzd2l0Y2ggKGMpIHsK KyAgICAgICAgICBjYXNlIDB4MjU3YjogcmV0dXJuKDB4YjMpOyAgICAvKiBMb3cgdmVydGljYWwg bGluZSBib2xkICovCisgICAgICAgICAgY2FzZSAweDI1ODA6IHJldHVybigyMjMpOyAgICAgLyog UXVhZHJhbnQgVUwgYW5kIFVSICh0b3AgaGFsZikgKi8KKyAgICAgICAgICBjYXNlIDB4MjU4MTog cmV0dXJuKDB4YzQpOyAgICAvKiBTY2FuIGxpbmUgOSAqLworICAgICAgICAgIGNhc2UgMHgyNTgy OiByZXR1cm4oMHhEQyk7ICAgIC8qIEJsYWNrIGJsb2IgbG93ZXIgaGFsZiAqLworICAgICAgICAg IGNhc2UgMHgyNTg0OiByZXR1cm4oMjIwKTsgICAgIC8qIFF1YWRyYW50IExMIGFuZCBMUiAobG93 ZXIgaGFsZikgKi8KKyAgICAgICAgICBjYXNlIDB4MjU4ODogcmV0dXJuKDIxOSk7ICAgICAvKiBG aWxsIGNoYXJhY3RlciBkYXJrICovCisgICAgICAgICAgY2FzZSAweDI1OEM6IHJldHVybigyMjEp OyAgICAgLyogUXVhZHJhbnQgVUwgYW5kIExMIChsZWZ0IGhhbGYpICovCisgICAgICAgICAgY2Fz ZSAweDI1OEU6IHJldHVybigweEREKTsKKyAgICAgICAgICBjYXNlIDB4MjU5MDogcmV0dXJuKDIy Mik7ICAgICAvKiBRdWFkcmFudCBVUiBhbmQgTFIgKHJpZ2h0IGhhbGYpICovCisgICAgICAgICAg Y2FzZSAweDI1OTE6IHJldHVybigxNzYpOyAgICAgLyogRmlsbCBjaGFyYWN0ZXIgbGlnaHQgKi8K KyAgICAgICAgICBjYXNlIDB4MjU5MjogcmV0dXJuKDE3Nyk7ICAgICAvKiBGaWxsIGNoYXJhY3Rl ciBtZWRpdW0gKi8KKyAgICAgICAgICBjYXNlIDB4MjU5MzogcmV0dXJuKDE3OCk7ICAgICAvKiBG aWxsIGNoYXJhY3RlciBoZWF2eSAqLworICAgICAgICAgIGNhc2UgMHgyNTk0OiByZXR1cm4oMHhj NCk7ICAgIC8qIFNjYW4gbGluZSAxICovCisgICAgICAgICAgY2FzZSAweDI1QTA6IHJldHVybigy NTQpOyAgICAgLyogU29saWQgc3F1YXJlLCBjZW50ZXIgKi8KKyAgICAgICAgICBjYXNlIDB4MjVB NjogcmV0dXJuKDE3Nyk7ICAgICAvKiBCbG90Y2ggKi8KKyAgICAgICAgICBjYXNlIDB4MjVBQzog ICAgICAgICAgICAgICAgICAvKiBCbGFjayByZWN0YW5nbGUgKi8KKyAgICAgICAgICBjYXNlIDB4 MjVBRjogcmV0dXJuKDB4MTYpOyAgICAvKiBXaGl0ZSByZWN0YW5nbGUgKi8KKyAgICAgICAgICBj YXNlIDB4MjVCMjogICAgICAgICAgICAgICAgICAvKiBUcmlhbmdsZSwgdXAtcG9pbnRpbmcgKi8K KyAgICAgICAgICBjYXNlIDB4MjVCNDogcmV0dXJuKDB4MWUpOyAgICAvKiBUcmlhbmdsZSwgdXAt cG9pbnRpbmcgKi8KKyAgICAgICAgICBjYXNlIDB4MjVCNjogICAgICAgICAgICAgICAgICAvKiBU cmlhbmdsZSwgcmlnaHQtcG9pbnRpbmcsIGRhcmsgKi8KKyAgICAgICAgICBjYXNlIDB4MjVCNzog ICAgICAgICAgICAgICAgICAvKiBUcmlhbmdsZSwgcmlnaHQtcG9pbnRpbmcsIGxpZ2h0ICovCisg ICAgICAgICAgY2FzZSAweDI1Qjk6ICAgICAgICAgICAgICAgICAgLyogVHJpYW5nbGUsIHJpZ2h0 LXBvaW50aW5nLCBsaWdodCAqLworICAgICAgICAgIGNhc2UgMHgyNUJBOiByZXR1cm4oMHgxMCk7 ICAgIC8qIFRyaWFuZ2xlLCByaWdodC1wb2ludGluZywgbmFycm93ICovCisgICAgICAgICAgY2Fz ZSAweDI1QkM6ICAgICAgICAgICAgICAgICAgLyogVHJpYW5nbGUsIGRvd24tcG9pbnRpbmcgKi8K KyAgICAgICAgICBjYXNlIDB4MjVCRTogcmV0dXJuKDB4MWYpOyAgICAvKiBUcmlhbmdsZSwgZG93 bi1wb2ludGluZyAqLworICAgICAgICAgIGNhc2UgMHgyNUMwOiAgICAgICAgICAgICAgICAgIC8q IFRyaWFuZ2xlLCBsZWZ0LXBvaW50aW5nLCBkYXJrICovCisgICAgICAgICAgY2FzZSAweDI1QzE6 ICAgICAgICAgICAgICAgICAgLyogVHJpYW5nbGUsIGxlZnQtcG9pbnRpbmcsIGRhcmsgKi8KKyAg ICAgICAgICBjYXNlIDB4MjVDNDogcmV0dXJuKDB4MTEpOyAgICAvKiBUcmlhbmdsZSwgbGVmdC1w b2ludGluZywgbmFycm93ICovCisgICAgICAgICAgY2FzZSAweDI1QzY6IHJldHVybig0KTsgICAg ICAgLyogRGlhbW9uZCwgY2VudGVyLCBzb2xpZCAqLworICAgICAgICAgIGNhc2UgMHgyNUNCOiBy ZXR1cm4oMHgwOSk7ICAgIC8qIENpcmNsZSAqLworICAgICAgICAgIGNhc2UgMHgyNUNGOiByZXR1 cm4oMjQ5KTsgICAgIC8qIENlbnRlciBkb3QsIGxhcmdlICovCisgICAgICAgICAgY2FzZSAweDI1 ZDg6IHJldHVybigweDA4KTsgICAgLyogSW52ZXJzZSBidWxsZXQgKi8KKyAgICAgICAgICBjYXNl IDB4MjVkOTogcmV0dXJuKDB4MGEpOyAgICAvKiBJbnZlcnNlIHdoaXRlIGNpcmNsZSAqLworICAg ICAgICAgIGNhc2UgMHgyNUUyOiByZXR1cm4oMHhEOSk7ICAgIC8qIExvd2VyIHJpZ2h0IHRyaWFu Z2xlICovCisgICAgICAgICAgY2FzZSAweDI1RTM6IHJldHVybigweEMwKTsgICAgLyogTG93ZXIg bGVmdCB0cmlhbmdsZSAqLworICAgICAgICAgIGNhc2UgMHgyNUU0OiByZXR1cm4oMHhEQSk7ICAg IC8qIFVwcGVyIGxlZnQgdHJpYW5nbGUgKi8KKyAgICAgICAgICBjYXNlIDB4MjVFNTogcmV0dXJu KDB4QmYpOyAgICAvKiBVcHBlciByaWdodCB0cmlhbmdsZSAqLworICAgICAgICAgIGRlZmF1bHQ6 IHJldHVybigweDEzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYyA+PSAweDI2MDApIHsg ICAgICAgICAgIC8qIEFsbCB0aGUgcmVzdCAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAg ICAgICBjYXNlIDB4MjYzYTogcmV0dXJuKDB4MDEpOyAgICAvKiBTbWlsZXkgKi8KKyAgICAgICAg ICBjYXNlIDB4MjYzYjogcmV0dXJuKDB4MDIpOyAgICAvKiBJbnZlcnNlIFNtaWxleSAqLworICAg ICAgICAgIGNhc2UgMHgyNjNjOiByZXR1cm4oMHgwZik7ICAgIC8qIFdoaXRlIFN1biB3aXRoIFJh eXMgKi8KKyAgICAgICAgICBjYXNlIDB4MjY0MDogcmV0dXJuKDB4MGMpOyAgICAvKiBNYWxlIHNp Z24gKi8KKyAgICAgICAgICBjYXNlIDB4MjY0MjogcmV0dXJuKDB4MGIpOyAgICAvKiBGZW1hbGUg c2lnbiAqLworICAgICAgICAgIGNhc2UgMHgyNjYwOiByZXR1cm4oMHgwNik7ICAgIC8qIFNwYWRl ICovCisgICAgICAgICAgY2FzZSAweDI2NjM6IHJldHVybigweDA1KTsgICAgLyogQ2x1YiAqLwor ICAgICAgICAgIGNhc2UgMHgyNjY1OiByZXR1cm4oMHgwMyk7ICAgIC8qIEhlYXJ0ICovCisgICAg ICAgICAgY2FzZSAweDI2NjY6IHJldHVybigweDA0KTsgICAgLyogRGlhbW9uZCwgY2VudGVyLCBz b2xpZCAqLworICAgICAgICAgIGNhc2UgMHgyNjZhOiByZXR1cm4oMHgwZCk7ICAgIC8qIFF1YXJ0 ZXIgbm90ZSAqLworICAgICAgICAgIGNhc2UgMHgyNjZiOiAgICAgICAgICAgICAgICAgIC8qIEJl YW1lZCBxdWFydGVyIG5vdGVzICovCisgICAgICAgICAgY2FzZSAweDI2NmM6IHJldHVybigweDBl KTsgICAgLyogQmVhbWVkIDh0aCBub3RlcyAqLworICAgICAgICAgIGNhc2UgMHgyNzllOiByZXR1 cm4oMHgxYSk7ICAgIC8qIEJvbGQgcmlnaHQgYXJyb3cgKi8KKyAgICAgICAgICBjYXNlIDB4Mjdh MTogcmV0dXJuKDB4MWEpOyAgICAvKiBIZWF2eSBibGFjayByaWdodCBhcnJvdy4gKi8KKyAgICAg ICAgICBjYXNlIDB4RTIwMDogcmV0dXJuKDE4MCk7ICAgICAvKiBFeHRlbnNpYmxlIGxlZnQgYnJh Y2UgbWlkZGxlICovCisgICAgICAgICAgY2FzZSAweEUyMDE6IHJldHVybigxOTIpOyAgICAgLyog RXh0ZW5zaWJsZSBMZWZ0IHBhcmVudGhlc2lzIGJvdCAqLworICAgICAgICAgIGNhc2UgMHhFMjAy OiByZXR1cm4oMjE4KTsgICAgIC8qIEV4dGVuc2libGUgbGVmdCBwYXJlbnRoZXNpcyB0b3AgKi8K KyAgICAgICAgICBjYXNlIDB4RTIwMzogcmV0dXJuKDE5Mik7ICAgICAvKiBFeHRlbnNpYmxlIGxl ZnQgU0IgYm90ICovCisgICAgICAgICAgY2FzZSAweEUyMDQ6IHJldHVybigyMTgpOyAgICAgLyog RXh0ZW5zaWJsZSBsZWZ0IFNCIHRvcCAqLworICAgICAgICAgIGNhc2UgMHhFMjA1OiByZXR1cm4o MTk1KTsgICAgIC8qIEV4dGVuc2libGUgcmlnaHQgYnJhY2UgbWlkZGxlICovCisgICAgICAgICAg Y2FzZSAweEUyMDY6IHJldHVybigyMTcpOyAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBwYXJlbnRo ZXNpcyBib3QgKi8KKyAgICAgICAgICBjYXNlIDB4RTIwNzogcmV0dXJuKDE5MSk7ICAgICAvKiBF eHRlbnNpYmxlIHJpZ2h0IHBhcmVudGhlc2lzIHRvcCAqLworICAgICAgICAgIGNhc2UgMHhFMjA4 OiByZXR1cm4oMjE3KTsgICAgIC8qIEV4dGVuc2libGUgcmlnaHQgU0IgYm90ICovCisgICAgICAg ICAgY2FzZSAweEUyMDk6IHJldHVybigxOTEpOyAgICAgLyogRXh0ZW5zaWJsZSByaWdodCBTQiB0 b3AgKi8KKyAgICAgICAgICBjYXNlIDB4RTIwQzogcmV0dXJuKDIyOCk7ICAgICAvKiBTdW1tYXRp b24gc3ltYm9sIGJvdCAqLworICAgICAgICAgIGNhc2UgMHhFMjBEOiByZXR1cm4oMjI4KTsgICAg IC8qIFN1bW1hdGlvbiBzeW1ib2wgdG9wICovCisgICAgICAgICAgY2FzZSAweEUyMEU6IHJldHVy bigxOTEpOyAgICAgLyogUmlnaHQgY2VpbGluZyBjb3JuZXIgKi8KKyAgICAgICAgICBjYXNlIDB4 RTIwRjogcmV0dXJuKDIxNyk7ICAgICAvKiBSaWdodCBmbG9vciBjb3JuZXIgKi8KKyAgICAgICAg ICBjYXNlIDB4RTMwMDogcmV0dXJuKDE3OSk7ICAgICAvKiBWIGJveCBsaW5lLCBleHRlbnNpYmxl LCBsZWZ0ICovCisgICAgICAgICAgY2FzZSAweEUzMDk6IHJldHVybigxNzkpOyAgICAgLyogViBi b3ggbGluZSwgZXh0ZW5zaWJsZSwgcmlnaHQgKi8KKyAgICAgICAgICBjYXNlIDB4RTMwQTogcmV0 dXJuKDIyMSk7ICAgICAvKiBEaWFnb25hbCBmaWxsLCBkYXJrLCBVTCAqLworICAgICAgICAgIGNh c2UgMHhFMzBCOiByZXR1cm4oMjIyKTsgICAgIC8qIERpYWdvbmFsIGZpbGwsIGRhcmssIFVSICov CisgICAgICAgICAgY2FzZSAweEUzMjA6IHJldHVybigyMjEpOyAgICAgLyogUXVhZHJhbnQgTEwg Ki8KKyAgICAgICAgICBjYXNlIDB4RTMyMTogcmV0dXJuKDIyMik7ICAgICAvKiBRdWFkcmFudCBM UiAqLworICAgICAgICAgIGNhc2UgMHhFMzIyOiByZXR1cm4oMjIxKTsgICAgIC8qIFF1YWRyYW50 IFVMICovCisgICAgICAgICAgY2FzZSAweEUzMjM6IHJldHVybigyMTkpOyAgICAgLyogUXVhZHJh bnQgVUwgYW5kIExMIGFuZCBMUiAqLworICAgICAgICAgIGNhc2UgMHhFMzI0OiByZXR1cm4oMjE5 KTsgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBMUiAqLworICAgICAgICAgIGNhc2UgMHhFMzI1OiBy ZXR1cm4oMjE5KTsgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBMUiAqLworICAgICAgICAgIGNhc2Ug MHhFMzI2OiByZXR1cm4oMjE5KTsgICAgIC8qIFF1YWRyYW50IFVMIGFuZCBVUiBhbmQgTEwgKi8K KyAgICAgICAgICBjYXNlIDB4RTMyNzogcmV0dXJuKDIxOSk7ICAgICAvKiBRdWFkcmFudCBVTCBh bmQgVVIgYW5kIExSICovCisgICAgICAgICAgY2FzZSAweEUzMjg6IHJldHVybigyMjIpOyAgICAg LyogUXVhZHJhbnQgVVIgKi8KKyAgICAgICAgICBjYXNlIDB4RTMyOTogcmV0dXJuKDIxOSk7ICAg ICAvKiBRdWFkcmFudCBVUiBhbmQgTEwgYW5kIExSICovCisgICAgICAgICAgY2FzZSAweEU0MDA6 IHJldHVybigyNTEpOyAgICAgLyogUmFkaWNhbCBzeW1ib2wsIHNtYWxsICovCisgICAgICAgICAg Y2FzZSAweEU0MDE6IHJldHVybigxNjgpOyAgICAgLyogUmV2ZXJzZSBxdWVzdGlvbiBtYXJrICov CisgICAgICAgICAgY2FzZSAweEZGRkQ6IHJldHVybigweDEzKTsgICAgLyogISEgZm9yIHVua25v d24gKi8KKyAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oMHgxMyk7CisgICAgICAgIH0KKyAgICB9 CisgICAgcmV0dXJuKDB4MTMpOworfQorCisjaWZkZWYgT1MyCisvKgorICBMdWNpZGEgQ29uc29s ZSBpcyBhIFVuaWNvZGUgZm9udCwgYnV0IGl0IGlzIHZlcnkgc3BhcnNlbHkgcG9wdWxhdGVkLgor ICBTaW5jZSBpdCBpcyB0aGUgb25seSBtb25vc3BhY2UgVW5pY29kZSBmb250IG1vc3QgcGVvcGxl IGhhdmUsIHdlIGhhdmUKKyAgdG8gbWFrZSByZWFzb25hYmxlIHN1YnN0aXR1dGlvbnMgb3IgZWxz ZSAzLzQgb2YgdGhlIGdseXBocyB3aWxsIHNob3cKKyAgdXAgYXMgYmxvYnMgb24gdGhlIHNjcmVl bi4KKyovCitVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5pY29k ZSB0byBMdWNpZGEgQ29uc29sZSAqLworI2lmZGVmIENLX0FOU0lDCit0eF9sdWNpZGFzdWIoVVNI T1JUIGMpCisjZWxzZQordHhfbHVjaWRhc3ViKGMpIFVTSE9SVCBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7CisgICAgaWYgKGMgPCAweDAxODApICAgICAgICAgICAgICAgICAgICAgLyogTGF0 aW4tMSBhbmQgRXh0ZW5kZWQgQSAqLworICAgICAgcmV0dXJuKGMpOworCisvKiBGb3IgZWZmaWNp ZW5jeSB3ZSB0cnkgdG8gYXJyYW5nZSB0aGUgc2VjdGlvbnMgYnkgZnJlcXVlbmN5IG9mIHVzZS4g Ki8KKyAgICBpZiAoYyA+PSAweDIzQkEgJiYgYyA8PSAweDIzQkQpIHsKKyAgICAgICAgc3dpdGNo KGMpIHsKKyAgICAgICAgICBjYXNlIDB4MjNCQTogICAgICAgICAgICAgICAgICAgIC8qIEggbGlu ZSAtIFNjYW4gMSAqLworICAgICAgICAgIGNhc2UgMHgyM0JCOiAgICAgICAgICAgICAgICAgICAg LyogSCBsaW5lIC0gU2NhbiAzICovCisgICAgICAgICAgY2FzZSAweDIzQkM6ICAgICAgICAgICAg ICAgICAgICAvKiBIIGxpbmUgLSBTY2FuIDcgKi8KKyAgICAgICAgICBjYXNlIDB4MjNCRDogICAg ICAgICAgICAgICAgICAgIC8qIEggbGluZSAtIFNjYW4gOSAqLworICAgICAgICAgICAgcmV0dXJu KDB4MjUwMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGMgPj0gMHgyNTAwICYmIGMgPD0g MHgyNTdmKSB7ICAgLyogQm94IGRyYXdpbmcgKi8KKyAgICAgICAgaWYgKGMgPj0gMHgyNTUwICYm IGMgPD0gMHgyNTZjKQorICAgICAgICAgIHJldHVybihjKTsKKyAgICAgICAgc3dpdGNoIChjKSB7 CisgICAgICAgICAgLyogVGhlbXNlbHZlcyAqLworICAgICAgICBjYXNlIDB4MjUwMDoKKyAgICAg ICAgY2FzZSAweDI1MDI6CisgICAgICAgIGNhc2UgMHgyNTBjOgorICAgICAgICBjYXNlIDB4MjUx MDoKKyAgICAgICAgY2FzZSAweDI1MTQ6CisgICAgICAgIGNhc2UgMHgyNTE4OgorICAgICAgICBj YXNlIDB4MjUxYzoKKyAgICAgICAgY2FzZSAweDI1MjQ6CisgICAgICAgIGNhc2UgMHgyNTJjOgor ICAgICAgICBjYXNlIDB4MjUzNDoKKyAgICAgICAgY2FzZSAweDI1M2M6CisgICAgICAgICAgICBy ZXR1cm4oYyk7CisgICAgICAgICAgLyogSG9yaXpvbnRhbCBsaW5lcyAqLworICAgICAgICBjYXNl IDB4MjUwMTogICAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KKyAgICAgICAgICAgIHJldHVy bigweDI1NTApOyAgICAgICAgICAgICAvKiBVc2UgZG91YmxlICovCisgICAgICAgIGNhc2UgMHgy NTA0OgorICAgICAgICBjYXNlIDB4MjUwNToKKyAgICAgICAgY2FzZSAweDI1MDg6CisgICAgICAg IGNhc2UgMHgyNTA5OgorICAgICAgICBjYXNlIDB4MjU0YzoKKyAgICAgICAgY2FzZSAweDI1NGQ6 CisgICAgICAgIGNhc2UgMHgyNTdjOgorICAgICAgICBjYXNlIDB4MjU3ZToKKyAgICAgICAgICAg IHJldHVybigweDI1MDApOworICAgICAgICAgIC8qIFZlcnRpY2FsIGxpbmVzICovCisgICAgICAg IGNhc2UgMHgyNTAzOiAgICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLworICAgICAgICAgICAg cmV0dXJuKDB4MjU1MSk7ICAgICAgICAgICAgIC8qIFVzZSBkb3VibGUgKi8KKyAgICAgICAgY2Fz ZSAweDI1MDY6CisgICAgICAgIGNhc2UgMHgyNTA3OgorICAgICAgICBjYXNlIDB4MjUwYToKKyAg ICAgICAgY2FzZSAweDI1MGI6IC8qIE90aGVyICovCisgICAgICAgIGNhc2UgMHgyNTRlOgorICAg ICAgICBjYXNlIDB4MjU0ZjoKKyAgICAgICAgY2FzZSAweDI1N2Q6CisgICAgICAgIGNhc2UgMHgy NTdmOgorICAgICAgICBjYXNlIDB4MjU3NToKKyAgICAgICAgY2FzZSAweDI1Nzc6CisgICAgICAg IGNhc2UgMHgyNTc5OgorICAgICAgICBjYXNlIDB4MjU3YjoKKyAgICAgICAgICAgIHJldHVybigw eDI1MDIpOworICAgICAgICAgICAgLyogVXBwZXIgbGVmdCBib3ggY29ybmVyICovCisgICAgICAg IGNhc2UgMHgyNTBmOiAgICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLworICAgICAgICAgICAg cmV0dXJuKDB4MjU1NCk7ICAgICAgICAgICAgIC8qIFVzZSBkb3VibGUgKi8KKyAgICAgICAgY2Fz ZSAweDI1MGQ6IGNhc2UgMHgyNTBlOiAgICAgICAvKiBPdGhlciAqLworICAgICAgICAgICAgcmV0 dXJuKDB4MjUwYyk7CisgICAgICAgICAgLyogVXBwZXIgcmlnaHQgYm94IGNvcm5lciAqLworICAg ICAgICBjYXNlIDB4MjUxMzogICAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KKyAgICAgICAg ICAgIHJldHVybigweDI1NTcpOworICAgICAgICBjYXNlIDB4MjUxMToKKyAgICAgICAgY2FzZSAw eDI1MTI6ICAgIC8qIE90aGVyICovCisgICAgICAgICAgICByZXR1cm4oMHgyNTEwKTsKKyAgICAg ICAgICAvKiBMb3dlciBsZWZ0IGJveCBjb3JuZXIgKi8KKyAgICAgICAgY2FzZSAweDI1MTc6ICAg ICAgICAgICAgICAgICAgICAvKiBCb2xkICovCisgICAgICAgICAgICByZXR1cm4oMHgyNTVhKTsK KyAgICAgICAgY2FzZSAweDI1MTU6CisgICAgICAgIGNhc2UgMHgyNTE2OiAgICAvKiBPdGhlciAq LworICAgICAgICAgICAgcmV0dXJuKDB4MjUxNCk7CisgICAgICAgICAgLyogTG93ZXIgcmlnaHQg Ym94IGNvcm5lciAqLworICAgICAgICBjYXNlIDB4MjUxYjogICAgICAgICAgICAgICAgICAgIC8q IEJvbGQgKi8KKyAgICAgICAgICAgIHJldHVybigweDI1NWQpOworICAgICAgICBjYXNlIDB4MjUx OToKKyAgICAgICAgY2FzZSAweDI1MWE6ICAgIC8qIE90aGVyICovCisgICAgICAgICAgICByZXR1 cm4oMHgyNTE4KTsKKyAgICAgICAgICAvKiBWZXJ0aWNhbCBhbmQgcmlnaHQgKi8KKyAgICAgICAg Y2FzZSAweDI1MjM6ICAgICAgICAgICAgICAgICAgICAvKiBCb2xkICovCisgICAgICAgICAgICBy ZXR1cm4oMHgyNTYwKTsKKyAgICAgICAgY2FzZSAweDI1MWQ6CisgICAgICAgIGNhc2UgMHgyNTFl OgorICAgICAgICBjYXNlIDB4MjUxZjoKKyAgICAgICAgY2FzZSAweDI1MjA6CisgICAgICAgIGNh c2UgMHgyNTIxOgorICAgICAgICBjYXNlIDB4MjUyMjoKKyAgICAgICAgICAgIHJldHVybigweDI1 MWMpOworICAgICAgICAgIC8qIFZlcnRpY2FsIGFuZCBsZWZ0ICovCisgICAgICAgIGNhc2UgMHgy NTJiOiAgICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLworICAgICAgICAgICAgcmV0dXJuKDB4 MjU2Myk7CisgICAgICAgIGNhc2UgMHgyNTI1OgorICAgICAgICBjYXNlIDB4MjUyNjoKKyAgICAg ICAgY2FzZSAweDI1Mjc6CisgICAgICAgIGNhc2UgMHgyNTI4OgorICAgICAgICBjYXNlIDB4MjUy OToKKyAgICAgICAgY2FzZSAweDI1MmE6CisgICAgICAgICAgICByZXR1cm4oMHgyNTI0KTsKKyAg ICAgICAgICAvKiBIb3Jpem9udGFsIGFuZCBkb3duICovCisgICAgICAgICAgY2FzZSAweDI1MzM6 ICAgICAgICAgICAgICAgICAgLyogQm9sZCAqLworICAgICAgICAgICAgcmV0dXJuKDB4MjU2Nik7 CisgICAgICAgIGNhc2UgMHgyNTJkOgorICAgICAgICBjYXNlIDB4MjUyZToKKyAgICAgICAgY2Fz ZSAweDI1MmY6CisgICAgICAgIGNhc2UgMHgyNTMwOgorICAgICAgICBjYXNlIDB4MjUzMToKKyAg ICAgICAgY2FzZSAweDI1MzI6CisgICAgICAgICAgICByZXR1cm4oMHgyNTJjKTsKKyAgICAgICAg ICAgIC8qIEhvcml6b250YWwgYW5kIHVwICovCisgICAgICAgIGNhc2UgMHgyNTNiOiAgICAgICAg ICAgICAgICAgICAgLyogQm9sZCAqLworICAgICAgICAgICAgcmV0dXJuKDB4MjU2OSk7CisgICAg ICAgIGNhc2UgMHgyNTM1OiBjYXNlIDB4MjUzNjogY2FzZSAweDI1Mzc6CisgICAgICAgIGNhc2Ug MHgyNTM4OiBjYXNlIDB4MjUzOTogY2FzZSAweDI1M2E6CisgICAgICAgICAgICByZXR1cm4oMHgy NTM0KTsKKyAgICAgICAgICAvKiBIb3Jpem9udGFsIGFuZCBWZXJ0aWNhbCAqLworICAgICAgICAg IGNhc2UgMHgyNTRiOiAgICAgICAgICAgICAgICAgIC8qIEJvbGQgKi8KKyAgICAgICAgICAgIHJl dHVybigweDI1NmMpOworICAgICAgICAgIGNhc2UgMHgyNTNkOiBjYXNlIDB4MjUzZTogY2FzZSAw eDI1M2Y6CisgICAgICAgIGNhc2UgMHgyNTQwOiBjYXNlIDB4MjU0MTogY2FzZSAweDI1NDI6IGNh c2UgMHgyNTQzOgorICAgICAgICBjYXNlIDB4MjU0NDogY2FzZSAweDI1NDU6IGNhc2UgMHgyNTQ2 OiBjYXNlIDB4MjU0NzoKKyAgICAgICAgY2FzZSAweDI1NDg6IGNhc2UgMHgyNTQ5OiBjYXNlIDB4 MjU0YToKKyAgICAgICAgICAgIHJldHVybigweDI1M2MpOworICAgICAgICAgIC8qIEN1cnZlZCBj b3JuZXJzICovCisgICAgICAgICAgY2FzZSAweDI1NmQ6ICAgICAgICAgICAgICAgICAgLyogVUwg Ki8KKyAgICAgICAgICAgIHJldHVybigweDI1MGMpOworICAgICAgICAgIGNhc2UgMHgyNTZlOiAg ICAgICAgICAgICAgICAgIC8qIFVSICovCisgICAgICAgICAgICByZXR1cm4oMHgyNTEwKTsKKyAg ICAgICAgICBjYXNlIDB4MjU2ZjogICAgICAgICAgICAgICAgICAvKiBMTCAqLworICAgICAgICAg ICAgcmV0dXJuKDB4MjUxOCk7CisgICAgICAgICAgY2FzZSAweDI1NzA6ICAgICAgICAgICAgICAg ICAgLyogTFIgKi8KKyAgICAgICAgICAgIHJldHVybigweDI1MTQpOworICAgICAgICAgIGNhc2Ug MHgyNTcxOiAgICAgICAgICAgICAgICAgIC8qIERpYWdvbmFsICovCisgICAgICAgICAgICByZXR1 cm4oMHgwMDJmKTsKKyAgICAgICAgICBjYXNlIDB4MjU3MjogICAgICAgICAgICAgICAgICAvKiBP dGhlciBkaWFnb25hbCAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA1Yyk7CisgICAgICAgICAg Y2FzZSAweDI1NzM6ICAgICAgICAgICAgICAgICAgLyogRGlhZ29uYWwgY3Jvc3MgKi8KKyAgICAg ICAgICAgIHJldHVybigweDAwZDcpOworICAgICAgICAgIC8qIFBhcnRpYWwgaG9yaXpvbnRhbCBs aW5lcyAqLworICAgICAgICBjYXNlIDB4MjU3NDogY2FzZSAweDI1NzY6IGNhc2UgMHgyNTc4OiBj YXNlIDB4MjU3YToKKyAgICAgICAgICAgIHJldHVybigweDAwMmQpOworICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg KGMgPj0gMHgyMTkwICYmIGMgPD0gMHgyMWZmKSB7ICAgLyogQXJyb3dzICovCisgICAgICAgIGlm IChjID49IDB4MjE5MCAmJiBjIDw9IDB4MjE5NSB8fCBjID09IDB4MjFhOCkKKyAgICAgICAgICBy ZXR1cm4oYyk7CisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgIC8qIExlZnQtYXJyb3cg Zm9ybXMgKi8KKyAgICAgICAgY2FzZSAweDIxOWU6IGNhc2UgMHgyMWEyOiBjYXNlIDB4MjFhNDog Y2FzZSAweDIxYTk6CisgICAgICAgIGNhc2UgMHgyMWJjOiBjYXNlIDB4MjFkMDogY2FzZSAweDIx ZGE6IGNhc2UgMHgyMWRjOgorICAgICAgICBjYXNlIDB4MjFlMDogY2FzZSAweDIxZTQ6IGNhc2Ug MHgyMWU2OiBjYXNlIDB4MjFjNzoKKyAgICAgICAgICAgIHJldHVybigweDIxOTApOworICAgICAg ICAgIC8qIFJpZ2h0LWFycm93IGZvcm1zICovCisgICAgICAgIGNhc2UgMHgyMWEwOiBjYXNlIDB4 MjFhMzogY2FzZSAweDIxYTY6IGNhc2UgMHgyMWFhOgorICAgICAgICBjYXNlIDB4MjFjMDogY2Fz ZSAweDIxYzE6IGNhc2UgMHgyMWM5OiBjYXNlIDB4MjFkMjoKKyAgICAgICAgY2FzZSAweDIxZGI6 IGNhc2UgMHgyMWRkOiBjYXNlIDB4MjFlMjogY2FzZSAweDIxZTU6CisgICAgICAgIGNhc2UgMHgy MWU4OgorICAgICAgICAgICAgcmV0dXJuKDB4MjE5Mik7CisgICAgICAgICAgLyogVXAtYXJyb3cg Zm9ybXMgKi8KKyAgICAgICAgY2FzZSAweDIxOWY6IGNhc2UgMHgyMWE1OiBjYXNlIDB4MjFiZTog Y2FzZSAweDIxYmY6CisgICAgICAgIGNhc2UgMHgyMWM4OiBjYXNlIDB4MjFkMTogY2FzZSAweDIx ZGU6IGNhc2UgMHgyMWUxOgorICAgICAgICBjYXNlIDB4MjFlNzogY2FzZSAweDIxZWE6CisgICAg ICAgICAgICByZXR1cm4oMHgyMTkxKTsKKyAgICAgICAgICAvKiBEb3duLWFycm93IGZvcm1zICov CisgICAgICAgIGNhc2UgMHgyMWExOiBjYXNlIDB4MjFhNzogY2FzZSAweDIxYWY6IGNhc2UgMHgy MWMyOgorICAgICAgICBjYXNlIDB4MjFjZTogY2FzZSAweDIxY2E6IGNhc2UgMHgyMWQzOiBjYXNl IDB4MjFkZjoKKyAgICAgICAgY2FzZSAweDIxZTM6IGNhc2UgMHgyMWU5OgorICAgICAgICAgICAg cmV0dXJuKDB4MjE5Myk7CisgICAgICAgICAgLyogVXAtZG93bi1hcnJvdyBmb3JtcyAqLworICAg ICAgICBjYXNlIDB4MjFjNTogY2FzZSAweDIxZDU6CisgICAgICAgICAgICByZXR1cm4oMHgyMTk1 KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybigweGZmZmQpOworICAgICAg ICB9CisgICAgfQorICAgIGlmIChjID49IDB4MjU4MCAmJiBjIDw9IDB4MjU5ZikgeyAgIC8qIEJs b2NrIGVsZW1lbnRzICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlIDB4MjU4 MDogY2FzZSAweDI1ODQ6IGNhc2UgMHgyNTg4OiBjYXNlIDB4MjU4YzoKKyAgICAgICAgY2FzZSAw eDI1OTA6IGNhc2UgMHgyNTkxOiBjYXNlIDB4MjU5MjogY2FzZSAweDI1OTM6CisgICAgICAgICAg ICByZXR1cm4oYyk7CisgICAgICAgIGNhc2UgMHgyNTgxOiBjYXNlIDB4MjU4MjogY2FzZSAweDI1 ODM6CisgICAgICAgIGNhc2UgMHgyNTg1OiBjYXNlIDB4MjU4NjogY2FzZSAweDI1ODc6CisgICAg ICAgICAgICByZXR1cm4oMHgyNTg0KTsKKyAgICAgICAgY2FzZSAweDI1ODk6IGNhc2UgMHgyNThh OiBjYXNlIDB4MjU4YjoKKyAgICAgICAgY2FzZSAweDI1OGQ6IGNhc2UgMHgyNThlOiBjYXNlIDB4 MjU4ZjoKKyAgICAgICAgICAgIHJldHVybigweDI1OGMpOworICAgICAgICBjYXNlIDB4MjU5NToK KyAgICAgICAgICAgIHJldHVybigweDI1MDIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGMgPj0gMHgyMjAw ICYmIGMgPD0gMHgyMmZmKSB7ICAgLyogTWF0aGVtYXRpY2FsIG9wZXJhdG9ycyAqLworICAgICAg ICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAweDIyMDI6IGNhc2UgMHgyMjA2OiBjYXNlIDB4 MjIwZjogY2FzZSAweDIyMTE6IGNhc2UgMHgyMjEyOgorICAgICAgICBjYXNlIDB4MjIxOTogY2Fz ZSAweDIyMjA6IGNhc2UgMHgyMjFlOiBjYXNlIDB4MjIxZjogY2FzZSAweDIyMjk6CisgICAgICAg IGNhc2UgMHgyMjJiOiBjYXNlIDB4MjI0ODogY2FzZSAweDIyNjA6IGNhc2UgMHgyMjYxOiBjYXNl IDB4MjI2NDoKKyAgICAgICAgY2FzZSAweDIyNjU6CisgICAgICAgICAgICByZXR1cm4oYyk7Cisg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAoYyA+PSAweDIzMDAgJiYgYyA8PSAweDIzN2YpIHsgICAvKiBNaXNjZWxs YW5lb3VzIFRlY2huaWNhbCAqLworICAgICAgICBpZiAoYyA9PSAweDIzMDIgfHwgYyA9PSAweDIz MTAgfHwgYyA9PSAweDIzMjAgfHwgYyA9PSAweDIzMjEpCisgICAgICAgICAgcmV0dXJuKGMpOwor ICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICBjYXNlIDB4MjMyOTogICAgICAgICAgICAg ICAgICAvKiBCUkEgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwM2MpOworICAgICAgICAgIGNh c2UgMHgyMzJhOiAgICAgICAgICAgICAgICAgIC8qIEtFVCAqLworICAgICAgICAgICAgcmV0dXJu KDB4MDAzZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIHJldHVybigweGZmZmQp OworICAgICAgICB9CisgICAgfQorICAgIGlmIChjID49IDB4MjVhMCAmJiBjIDw9IDB4MjVmZikg eyAgIC8qIEdlb21ldHJpYyBzaGFwZXMgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAg ICAgLyogVGhlbXNlbHZlcyAqLworICAgICAgICBjYXNlIDB4MjVhMDogY2FzZSAweDI1YWM6IGNh c2UgMHgyNWIyOiBjYXNlIDB4MjViYToKKyAgICAgICAgY2FzZSAweDI1YmM6IGNhc2UgMHgyNWM0 OiBjYXNlIDB4MjVjYTogY2FzZSAweDI1Y2I6CisgICAgICAgIGNhc2UgMHgyNWQ4OiBjYXNlIDB4 MjVkOToKKyAgICAgICAgICAgIHJldHVybihjKTsKKyAgICAgICAgICAvKiBTcXVhcmVzICovCisg ICAgICAgICAgY2FzZSAweDI1YTE6IGNhc2UgMHgyNWEyOiBjYXNlIDB4MjVhMzogY2FzZSAweDI1 YTQ6CisgICAgICAgICAgY2FzZSAweDI1YTU6IGNhc2UgMHgyNWE2OiBjYXNlIDB4MjVhNzogY2Fz ZSAweDI1YTg6CisgICAgICAgIGNhc2UgMHgyNWE5OiBjYXNlIDB4MjVhYTogY2FzZSAweDI1YWI6 CisgICAgICAgIGNhc2UgMHgyNWU3OiBjYXNlIDB4MjVlODogY2FzZSAweDI1ZTk6IGNhc2UgMHgy NWVhOiBjYXNlIDB4MjVlYjoKKyAgICAgICAgICAgIHJldHVybigweDI1YTApOworICAgICAgICAg IGNhc2UgMHgyNWFkOiBjYXNlIDB4MjVhZTogY2FzZSAweDI1YWY6IC8qIFJlY3RhbmdsZXMgKi8K KyAgICAgICAgY2FzZSAweDI1YjA6IGNhc2UgMHgyNWIxOgorICAgICAgICAgICAgcmV0dXJuKDB4 MjVhYyk7CisgICAgICAgICAgY2FzZSAweDI1YjM6IGNhc2UgMHgyNWI0OiBjYXNlIDB4MjViNTog LyogVXByaWdodCB0cmlhbmdsZXMgKi8KKyAgICAgICAgY2FzZSAweDI1ZWM6IGNhc2UgMHgyNWVk OiBjYXNlIDB4MjVlZToKKyAgICAgICAgICAgIHJldHVybigweDI1YjIpOworICAgICAgICBjYXNl IDB4MjViNjogY2FzZSAweDI1Yjc6IGNhc2UgMHgyNWI4OiBjYXNlIDB4MjViOTogY2FzZSAweDI1 YmI6CisgICAgICAgICAgICByZXR1cm4oMHgyNWJhKTsgICAgICAgICAgICAgICAgICAgICAgLyog UmlnaHQtcG9pbnRpbmcgdHJpYW5nbGVzICovCisgICAgICAgICAgY2FzZSAweDI1YmQ6IGNhc2Ug MHgyNWJlOiBjYXNlIDB4MjViZjogLyogRG93bi1wb2ludGluZyB0cmlhbmdsZXMgKi8KKyAgICAg ICAgICAgIHJldHVybigweDI1YmMpOworICAgICAgICBjYXNlIDB4MjVjMDogY2FzZSAweDI1YzE6 IGNhc2UgMHgyNWMyOiBjYXNlIDB4MjVjMzogY2FzZSAweDI1YzU6CisgICAgICAgICAgICByZXR1 cm4oMHgyNWM0KTsgICAgICAgICAgICAgICAgICAgICAgLyogTGVmdC1wb2ludGluZyB0cmlhbmds ZXMgKi8KKyAgICAgICAgICBjYXNlIDB4MjVjNjogY2FzZSAweDI1Yzc6IGNhc2UgMHgyNWM4OiAv KiBEaWFtb25kcyAqLworICAgICAgICAgICAgcmV0dXJuKDB4MjY2Nik7CisgICAgICAgICAgLyog Q2lyY2xlcyAqLworICAgICAgICBjYXNlIDB4MjVjOTogY2FzZSAweDI1Y2M6IGNhc2UgMHgyNWNk OiBjYXNlIDB4MjVjZTogY2FzZSAweDI1Y2Y6CisgICAgICAgIGNhc2UgMHgyNWQwOiBjYXNlIDB4 MjVkMTogY2FzZSAweDI1ZDI6IGNhc2UgMHgyNWQzOiBjYXNlIDB4MjVkNDoKKyAgICAgICAgY2Fz ZSAweDI1ZDU6IGNhc2UgMHgyNWU2OiBjYXNlIDB4MjVlZjoKKyAgICAgICAgICAgIHJldHVybigw eDI1Y2IpOworICAgICAgICAgIC8qIEN1cnZlcyBhbmQgY29ybmVyIHRyaWFuZ2xlcyAqLworICAg ICAgICAgIGNhc2UgMHgyNWRjOiBjYXNlIDB4MjVlNDogICAgIC8qIFVMICovCisgICAgICAgICAg ICByZXR1cm4oMHgyNTBjKTsKKyAgICAgICAgICBjYXNlIDB4MjVkZDogY2FzZSAweDI1ZTU6ICAg ICAvKiBVUiAqLworICAgICAgICAgICAgcmV0dXJuKDB4MjUxMCk7CisgICAgICAgICAgY2FzZSAw eDI1ZGY6IGNhc2UgMHgyNWUzOiAgICAgLyogTEwgKi8KKyAgICAgICAgICAgIHJldHVybigweDI1 MTQpOworICAgICAgICAgIGNhc2UgMHgyNWRlOiBjYXNlIDB4MjVlMjogICAgIC8qIExSICovCisg ICAgICAgICAgICByZXR1cm4oMHgyNTE4KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg IHJldHVybigweGZmZmQpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjID49IDB4MjYwMCAm JiBjIDw9IDB4MjZmZikgeyAgIC8qIE1pc2Mgc3ltYm9scyAqLworICAgICAgICBzd2l0Y2ggKGMp IHsKKyAgICAgICAgICAvKiBUaGVtc2VsdmVzICovCisgICAgICAgIGNhc2UgMHgyNjNhOiBjYXNl IDB4MjYzYjogY2FzZSAweDI2M2M6IGNhc2UgMHgyNjQwOgorICAgICAgICBjYXNlIDB4MjY0Mjog Y2FzZSAweDI2NjA6IGNhc2UgMHgyNjYzOiBjYXNlIDB4MjY2NToKKyAgICAgICAgY2FzZSAweDI2 NjY6IGNhc2UgMHgyNjZhOiBjYXNlIDB4MjY2YjoKKyAgICAgICAgICAgIHJldHVybihjKTsKKyAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybigweGZmZmQpOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChjID49IDB4Mjc5NCAmJiBjIDw9IDB4MjdiZSkgICAgIC8qIFJpZ2h0LWFy cm93IERpbmdiYXRzICovCisgICAgICByZXR1cm4oMHgyMTkyKTsKKyAgICBpZiAoYyA+PSAweDIw NzAgJiYgYyA8PSAweDIwOWYpIHsgICAvKiBTdXBlciAmIHN1YnNjcmlwdHMgKi8KKyAgICAgICAg aWYgKGMgPT0gMHgyMDdmKSAgICAgICAgICAgICAgICAvKiBuICovCisgICAgICAgICAgcmV0dXJu KGMpOworICAgICAgICBlbHNlIGlmIChjID09IDB4MjA3MCkgICAgICAgICAgIC8qIDAgKi8KKyAg ICAgICAgICByZXR1cm4oMHgwMDMwKTsKKyAgICAgICAgZWxzZSBpZiAoYyA+PSAweDIwNzQgJiYg YyA8PSAweDIwNzkpCisgICAgICAgICAgcmV0dXJuKGMgLSAweDIwNDApOworICAgICAgICBlbHNl IGlmIChjID49IDB4MjA4MCAmJiBjIDw9IDB4MjA4OSkKKyAgICAgICAgICByZXR1cm4oYyAtIDB4 MjA1MCk7CisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlIDB4MjA3YTogY2FzZSAw eDIwOGE6CisgICAgICAgICAgICByZXR1cm4oMHgwMDJiKTsKKyAgICAgICAgY2FzZSAweDIwN2I6 IGNhc2UgMHgyMDhiOgorICAgICAgICAgICAgcmV0dXJuKDB4MDAyZCk7CisgICAgICAgIGNhc2Ug MHgyMDdjOiBjYXNlIDB4MjA4YzoKKyAgICAgICAgICAgIHJldHVybigweDAwM2QpOworICAgICAg ICBjYXNlIDB4MjA3ZDogY2FzZSAweDIwOGQ6CisgICAgICAgICAgICByZXR1cm4oMHgwMDI4KTsK KyAgICAgICAgY2FzZSAweDIwN2U6IGNhc2UgMHgyMDhlOgorICAgICAgICAgICAgcmV0dXJuKDB4 MDAyOSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAg ICAgICAgfQorICAgIH0KKyAgICBpZiAoYyA+PSAweDAxODAgJiYgYyA8PSAweDAyNGYpIHsgICAv KiBMYXRpbiBFeHRlbmRlZCBCLCBQYXJ0IEkgKi8KKyAgICAgICAgaWYgKGMgPT0gMHgwMTkyIHx8 IGMgPj0gMHgwMWZhICYmIGMgPD0gMHgwMWZmKQorICAgICAgICAgIHJldHVybihjKTsgICAgICAg ICAgICAgICAgICAgIC8qIExhdGluIEV4dGVuZGVkIEIgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7 CisgICAgICAgIGNhc2UgMHgwMTgwOiBjYXNlIDB4MDE4MzogY2FzZSAweDAxODQ6IGNhc2UgMHgw MTg1OgorICAgICAgICAgICAgcmV0dXJuKDB4MDA2Mik7ICAgICAgICAgICAgIC8qIExvd2VyY2Fz ZSBiIHZhcmlhbnRzICovCisgICAgICAgIGNhc2UgMHgwMTgxOiBjYXNlIDB4MDE4MjoKKyAgICAg ICAgICAgIHJldHVybigweDAwNDIpOyAgICAgICAgICAgICAvKiBVcHBlcmNhc2UgQiB2YXJpYW50 cyAqLworICAgICAgICBjYXNlIDB4MDE4NjogY2FzZSAweDAxODc6CisgICAgICAgICAgICByZXR1 cm4oMHgwMDQzKTsgICAgICAgICAgICAgLyogVXBwZXJjYXNlIEMgdmFyaWFudHMgKi8KKyAgICAg ICAgICBjYXNlIDB4MDE4OTogICAgICAgICAgICAgICAgICAvKiBEIHdpdGggc3Ryb2tlICovCisg ICAgICAgICAgICByZXR1cm4oMHgwMEQwKTsgICAgICAgICAgICAgLyogTG9va3MganVzdCBsaWtl IEV0aCAqLworICAgICAgICAgIGNhc2UgMHgwMThhOiAgICAgICAgICAgICAgICAgIC8qIEQgd2l0 aCBob29rICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDQ0KTsKKyAgICAgICAgICBjYXNlIDB4 MDE4ZTogY2FzZSAweDAxOTA6ICAgICAvKiBFLWxpa2UgbGV0dGVycyAqLworICAgICAgICAgICAg cmV0dXJuKDB4MDA0NSk7CisgICAgICAgICAgY2FzZSAweDAxOGY6ICAgICAgICAgICAgICAgICAg LyogZS1saWtlIGxldHRlcnMgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNjUpOworICAgICAg ICAgIGNhc2UgMHgwMTkxOiAgICAgICAgICAgICAgICAgIC8qIEYtbGlrZSAqLworICAgICAgICAg ICAgcmV0dXJuKDB4MDA0Nik7CisgICAgICAgICAgY2FzZSAweDAxOTM6ICAgICAgICAgICAgICAg ICAgLyogRy1saWtlICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDQ3KTsKKyAgICAgICAgICBj YXNlIDB4MDE5NDogICAgICAgICAgICAgICAgICAvKiBMYXRpbiBDYXBpdGFsIEdhbW1hICovCisg ICAgICAgICAgICByZXR1cm4oMHgwMzkzKTsgICAgICAgICAgICAgLyogVXNlIEdyZWVrICovCisg ICAgICAgICAgY2FzZSAweDAxOTU6ICAgICAgICAgICAgICAgICAgLyogR290aGljIGh2ICovCisg ICAgICAgICAgICByZXR1cm4oMHgwMDY4KTsgICAgICAgICAgICAgLyogVXNlIGggKi8KKyAgICAg ICAgICBjYXNlIDB4MDE5NjogICAgICAgICAgICAgICAgICAvKiBMYXRpbiBDYXBpdGFsIElvdGEg Ki8KKyAgICAgICAgICAgIHJldHVybigweDAzOTkpOyAgICAgICAgICAgICAvKiBVc2UgR3JlZWsg Ki8KKyAgICAgICAgICBjYXNlIDB4MDE5NzogICAgICAgICAgICAgICAgICAvKiBJIHdpdGggYmFy ICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDY5KTsKKyAgICAgICAgICBjYXNlIDB4MDE5ODog ICAgICAgICAgICAgICAgICAvKiBLIHdpdGggaG9vayAqLworICAgICAgICAgICAgcmV0dXJuKDB4 MDA0Qik7CisgICAgICAgICAgY2FzZSAweDAxOTk6ICAgICAgICAgICAgICAgICAgLyogayB3aXRo IGhvb2sgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNkIpOworICAgICAgICAgIGNhc2UgMHgw MTlBOiAgICAgICAgICAgICAgICAgIC8qIGwgd2l0aCBiYXIgKi8KKyAgICAgICAgICAgIHJldHVy bigweDAwNkMpOworICAgICAgICAgIGNhc2UgMHgwMTlCOiAgICAgICAgICAgICAgICAgIC8qIGxh bWJkYSB3aXRoIGJhciAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDNiYik7ICAgICAgICAgICAg IC8qIFVzZSBHcmVlayAqLworICAgICAgICAgIGNhc2UgMHgwMTlDOiAgICAgICAgICAgICAgICAg IC8qIFVwc2lkZSBkb3duIG0gKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNmQpOworICAgICAg ICAgIGNhc2UgMHgwMTlEOiAgICAgICAgICAgICAgICAgIC8qIE4gd2l0aCBsZWZ0IGhvb2sgKi8K KyAgICAgICAgICAgIHJldHVybigweDAwNGUpOworICAgICAgICAgIGNhc2UgMHgwMTlFOiAgICAg ICAgICAgICAgICAgIC8qIG4gd2l0aCBsb25nIHJpZ2h0IGxlZyAqLworICAgICAgICAgICAgcmV0 dXJuKDB4MDA2ZSk7CisgICAgICAgICAgY2FzZSAweDAxOUY6IGNhc2UgMHgwMWEwOiBjYXNlIDB4 MDFhMjogLyogTy1saWtlIGxldHRlcnMgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNGYpOwor ICAgICAgICAgIGNhc2UgMHgwMWExOiBjYXNlIDB4MDFhMzogICAgIC8qIG8tbGlrZSAqLworICAg ICAgICAgICAgcmV0dXJuKDB4MDA2Zik7CisgICAgICAgICAgY2FzZSAweDAxQTQ6ICAgICAgICAg ICAgICAgICAgLyogUCB3aXRoIGhvb2sgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNTApOwor ICAgICAgICAgIGNhc2UgMHgwMUE1OiAgICAgICAgICAgICAgICAgIC8qIHAgd2l0aCBob29rICov CisgICAgICAgICAgICByZXR1cm4oMHgwMDcwKTsKKyAgICAgICAgICBjYXNlIDB4MDFBNjogICAg ICAgICAgICAgICAgICAvKiBPbGQgTm9yc2UgWVIgKi8KKyAgICAgICAgICAgIHJldHVybigweDAw NTIpOworICAgICAgICAgIGNhc2UgMHgwMUE3OiAgICAgICAgICAgICAgICAgIC8qIEJhY2t3YXJk cyBTICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDUzKTsKKyAgICAgICAgICBjYXNlIDB4MDFB ODogY2FzZSAweDAxQUE6ICAgICAvKiBzLWxpa2UgbGV0dGVycyAqLworICAgICAgICAgICAgcmV0 dXJuKDB4MDA3Myk7CisgICAgICAgICAgY2FzZSAweDAxQTk6ICAgICAgICAgICAgICAgICAgLyog RXNoICovCisgICAgICAgICAgICByZXR1cm4oMHgwM2EzKTsgICAgICAgICAgICAgLyogTG9va3Mg anVzdCBsaWtlIFNpZ21hICovCisgICAgICAgICAgY2FzZSAweDAxQUI6IGNhc2UgMHgwMUFEOiAg ICAgLyogdC1saWtlICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDc0KTsKKyAgICAgICAgICBj YXNlIDB4MDFBQzogY2FzZSAweDAxQUU6ICAgICAvKiBULWxpa2UgKi8KKyAgICAgICAgICAgIHJl dHVybigweDAwNTQpOworICAgICAgICAgIGNhc2UgMHgwMUFGOiBjYXNlIDB4MDFCMTogICAgIC8q IFUtbGlrZSAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA1NSk7CisgICAgICAgICAgY2FzZSAw eDAxQjA6ICAgICAgICAgICAgICAgICAgLyogdS1saWtlICovCisgICAgICAgICAgICByZXR1cm4o MHgwMDc1KTsKKyAgICAgICAgICBjYXNlIDB4MDFCMjogICAgICAgICAgICAgICAgICAvKiBWLWxp a2UgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNTYpOworICAgICAgICAgIGNhc2UgMHgwMUIz OiAgICAgICAgICAgICAgICAgIC8qIFktbGlrZSAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDA1 OSk7CisgICAgICAgICAgY2FzZSAweDAxQjQ6ICAgICAgICAgICAgICAgICAgLyogeS1saWtlICov CisgICAgICAgICAgICByZXR1cm4oMHgwMDc5KTsKKyAgICAgICAgICBjYXNlIDB4MDFCNTogICAg ICAgICAgICAgICAgICAvKiBaLWxpa2UgKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNWEpOwor ICAgICAgICAgIGNhc2UgMHgwMUI2OiAgICAgICAgICAgICAgICAgIC8qIHotbGlrZSAqLworICAg ICAgICAgICAgcmV0dXJuKDB4MDA3YSk7CisgICAgICAgICAgY2FzZSAweDAxQjc6ICAgICAgICAg ICAgICAgICAgLyogWW9naCAqLworICAgICAgICAgICAgcmV0dXJuKDB4MDAzMyk7ICAgICAgICAg ICAgIC8qIFVzZSAiMyIgKi8KKyAgICAgICAgICBjYXNlIDB4MDFCRjogICAgICAgICAgICAgICAg ICAvKiBXeW5uICovCisgICAgICAgICAgICByZXR1cm4oMHgwMDc3KTsgICAgICAgICAgICAgLyog VXNlICJ3IiAqLworICAgICAgICAgIGNhc2UgMHgwMUNEOiAgICAgICAgICAgICAgICAgIC8qIEEg Y2Fyb24gKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNDEpOworICAgICAgICAgIGNhc2UgMHgw MUNFOiAgICAgICAgICAgICAgICAgIC8qIGEgY2Fyb24gKi8KKyAgICAgICAgICAgIHJldHVybigw eDAwNjEpOworICAgICAgICAgIGNhc2UgMHgwMUNGOiAgICAgICAgICAgICAgICAgIC8qIEkgY2Fy b24gKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNDkpOworICAgICAgICAgIGNhc2UgMHgwMUQw OiAgICAgICAgICAgICAgICAgIC8qIGkgY2Fyb24gKi8KKyAgICAgICAgICAgIHJldHVybigweDAw NjkpOworICAgICAgICAgIGNhc2UgMHgwMUQxOiAgICAgICAgICAgICAgICAgIC8qIE8gY2Fyb24g Ki8KKyAgICAgICAgICAgIHJldHVybigweDAwNGYpOworICAgICAgICAgIGNhc2UgMHgwMUQyOiAg ICAgICAgICAgICAgICAgIC8qIG8gY2Fyb24gKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNmYp OworICAgICAgICAgIGNhc2UgMHgwMUQzOiAgICAgICAgICAgICAgICAgIC8qIFUgY2Fyb24gKi8K KyAgICAgICAgICAgIHJldHVybigweDAwNTUpOworICAgICAgICAgIGNhc2UgMHgwMUQ0OiAgICAg ICAgICAgICAgICAgIC8qIHUgY2Fyb24gKi8KKyAgICAgICAgICAgIHJldHVybigweDAwNzUpOwor ICAgICAgICAgIC8qIFUgZGlhZXJlc2lzICsgb3RoZXIgdGhpbmdzICovCisgICAgICAgIGNhc2Ug MHgwMUQ1OiBjYXNlIDB4MDFENzogY2FzZSAweDAxRDk6IGNhc2UgMHgwMURCOgorICAgICAgICAg ICAgcmV0dXJuKDB4MDBkYyk7CisgICAgICAgICAgLyogdSBkaWFlcmVzaXMgKyBvdGhlciB0aGlu Z3MgKi8KKyAgICAgICAgY2FzZSAweDAxRDY6IGNhc2UgMHgwMURhOiBjYXNlIDB4MDFEYzoKKyAg ICAgICAgICAgIHJldHVybigweDAwZmMpOworCisgICAgICAgICAgLyogRmlsbCBpbiBtb3JlIGhl cmUgaWYgYW55Ym9keSBhc2tzICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl dHVybigweGZmZmQpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjID49IDB4MWUwMCAmJiBj IDw9IDB4MWVmZikgeyAgIC8qIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwgKi8KKyAgICAgICAg aWYgKGMgPj0gMHgxZTgwICYmIGMgPD0gMHgxZTg1KQorICAgICAgICAgIHJldHVybihjKTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgIHJldHVybigweGZmZmQpOworICAgIH0KKyAgICBpZiAoYyA+ PSAweDA0MDAgJiYgYyA8PSAweDA0ZmYpIHsgICAvKiBDeXJpbGxpYyAqLworICAgICAgICBpZiAo YyA+PSAweDA0MDAgJiYgYyA8PSAweDA0NWYgfHwgYyA9PSAweDA0OTAgIHx8IGMgPT0gMHgwNDkx KQorICAgICAgICAgIHJldHVybihjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybigw eGZmZmQpOworICAgIH0KKyAgICBpZiAoYyA+PSAweDAzNzAgJiYgYyA8PSAweDAzZmYpIHsgICAv KiBHcmVlayAqLworICAgICAgICBpZiAoYyA9PSAweDAzN2UgfHwgYyA+PSAweDAzODQgJiYgYyA8 PSAweDAzY2UpCisgICAgICAgICAgcmV0dXJuKGMpOworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAg ICAgICAgY2FzZSAweDAzNzQ6IGNhc2UgMHgwMzc1OgorICAgICAgICAgICAgcmV0dXJuKDB4MDAy Nyk7CisgICAgICAgIGNhc2UgMHgwMzdhOgorICAgICAgICAgICAgcmV0dXJuKDB4MDAyYyk7Cisg ICAgICAgICAgLyogRmlsbCBpbiBtb3JlIGhlcmUgaWYgbmVlZGVkICovCisgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoYyA+PSAweDFmMDAgJiYgYyA8PSAweDFmZmYpIHsgICAvKiBHcmVlayBFeHRlbmRlZCAqLwor ICAgICAgICAvKiBGaWxsIGluIGlmIGFza2VkICovCisgICAgICAgIHJldHVybigweGZmZmQpOwor ICAgIH0KKyAgICBpZiAoYyA+PSAweDIwYTAgJiYgYyA8PSAweDIwY2YpIHsgICAvKiBDdXJyZW5j eSBzeW1ib2xzICovCisgICAgICAgIGlmIChjID09IDB4MjBhMyB8fCBjID09IDB4MjBhNCB8fCBj ID09IDB4MjBhNyB8fCBjID09IDB4MjBhYykKKyAgICAgICAgICByZXR1cm4oYyk7CisgICAgICAg IGVsc2UKKyAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAgICB9CisgICAgaWYgKGMgPj0gMHgy MTAwICYmIGMgPD0gMHgyMTRmKSB7ICAgLyogTGV0dGVybGlrZSBzeW1ib2xzICovCisgICAgICAg IGlmIChjID09IDB4MjExNiB8fCBjID09IDB4MjEyMiB8fCBjID09IDB4MjEyNikKKyAgICAgICAg ICByZXR1cm4oYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAg ICB9CisgICAgaWYgKGMgPj0gMHgyMTUwICYmIGMgPD0gMHgyMThmKSB7ICAgLyogTnVtYmVyIGZv cm1zICovCisgICAgICAgIGlmIChjID49IDB4MjE1YiAmJiBjIDw9IDB4MjE1ZSkgLyogUm9tYW4g bnVtZXJhbHMgZXRjICovCisgICAgICAgICAgcmV0dXJuKGMpOworICAgICAgICBlbHNlCisgICAg ICAgICAgcmV0dXJuKDB4ZmZmZCk7CisgICAgfQorICAgIGlmIChjID49IDB4MDJiMCAmJiBjIDw9 IDB4MDJmZikgeyAgIC8qIFNwYWNpbmcgbW9kaWZpZXIgbGV0dGVycyAqLworICAgICAgICBpZiAo YyA9PSAweDAyYzYgfHwgYyA9PSAweDAyYzcgfHwgYyA9PSAweDAyYzkgfHwKKyAgICAgICAgICAg IGMgPj0gMHgwMmQ4ICYmIGMgPD0gMHgwMmRkKQorICAgICAgICAgIHJldHVybihjKTsKKyAgICAg ICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgMHgwMmIwOiBjYXNlIDB4MDJiMToKKyAgICAg ICAgICAgIHJldHVybigweDAwNjgpOworICAgICAgICBjYXNlIDB4MDJiMjoKKyAgICAgICAgICAg ICAgcmV0dXJuKDB4MDA2YSk7CisgICAgICAgIGNhc2UgMHgwMmIzOiBjYXNlIDB4MDJiNDogY2Fz ZSAweDAyYjU6CisgICAgICAgICAgICByZXR1cm4oMHgwMDcyKTsKKyAgICAgICAgY2FzZSAweDAy Yjc6CisgICAgICAgICAgICByZXR1cm4oMHgwMDc3KTsKKyAgICAgICAgY2FzZSAweDAyYjg6Cisg ICAgICAgICAgICByZXR1cm4oMHgwMDc5KTsKKyAgICAgICAgY2FzZSAweDAyYjk6CisgICAgICAg ICAgICByZXR1cm4oMHgwMGI0KTsKKyAgICAgICAgY2FzZSAweDAyYmE6CisgICAgICAgICAgICBy ZXR1cm4oMHgwMDIyKTsKKyAgICAgICAgY2FzZSAweDAyYmI6IGNhc2UgMHgwMmJjOiBjYXNlIDB4 MDJiZDogY2FzZSAweDAyYmU6IGNhc2UgMHgwMmJmOgorICAgICAgICAgICAgcmV0dXJuKDB4MDAy Nyk7CisgICAgICAgICAgY2FzZSAweDAyYzI6ICAgICAgcmV0dXJuKDB4MDAzYyk7CisgICAgICAg ICAgY2FzZSAweDAyYzM6ICAgICAgcmV0dXJuKDB4MDAzZSk7CisgICAgICAgICAgY2FzZSAweDAy ZGE6ICAgICAgcmV0dXJuKDB4MDBiMCk7CisgICAgICAgICAgY2FzZSAweDAyZGM6ICAgICAgcmV0 dXJuKDB4MDA3ZSk7CisgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgcmV0dXJuKDB4ZmZmZCk7 CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGMgPj0gMHgyMDAwICYmIGMgPD0gMHgyMDZmKSB7 ICAgLyogR2VuZXJhbCBQdW5jdHVhdGlvbiAqLworICAgICAgICBpZiAoYyA+PSAweDIwMTMgJiYg YyA8PSAweDIwMTUgfHwKKyAgICAgICAgICAgIGMgPj0gMHgyMDE3ICYmIGMgPD0gMHgyMDFhIHx8 CisgICAgICAgICAgICBjID49IDB4MjAxYyAmJiBjIDw9IDB4MjAxZSB8fAorICAgICAgICAgICAg YyA+PSAweDIwMjAgJiYgYyA8PSAweDIwMjIgfHwgYyA9PSAweDIwMjYgfHwgYyA9PSAweDIwMzAg fHwKKyAgICAgICAgICAgIGMgPj0gMHgyMDM5ICYmIGMgPD0gMHgyMDNhIHx8IGMgPT0gMHgyMDNj IHx8IGMgPT0gMHgyMDNlIHx8CisgICAgICAgICAgICBjID09IDB4MjA0NCkKKyAgICAgICAgICBy ZXR1cm4oYyk7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gMHgyMDE2KQorICAgICAgICAgIHJldHVy bigweDI1NTEpOworICAgICAgICBlbHNlIGlmIChjID09IDB4MjAxNykKKyAgICAgICAgICByZXR1 cm4oMHgyNTUwKTsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwNDQpCisgICAgICAgICAgcmV0 dXJuKDB4MDAyZik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4oMHhmZmZkKTsKKyAg ICB9CisgICAgaWYgKGMgPT0gMHhmYjAxIHx8IGMgPT0gMHhmYjAyKSAgICAgLyogQWxwaGFiZXRp YyBQcmVzZW50YXRpb24gRm9ybXMgKi8KKyAgICAgIHJldHVybihjKTsKKyAgICByZXR1cm4oMHhm ZmZkKTsgICAgICAgICAgICAgICAgICAgICAvKiBDYXRjaC1hbGwgKi8KK30KKyNlbmRpZiAvKiBP UzIgKi8KKworCisvKgorICBUYWJsZSBvZiBCbGFoLXRvLVVuaWNvZGUgaW5mb3JtYXRpb24gc3Ry dWN0dXJlcy4KKyAgS0VFUCBUSElTIElOIFNZTkMgV0lUSCBUSEUgVFhfYmxhaCBERUZJTklUSU9O UyBpbiBja2N1bmkuaC4KKyovCitzdHJ1Y3QgeF90b191bmljb2RlICoKK3R4cmluZm9bTUFYVFhT RVRTKzFdID0geworICAgICZ1X2FzY2lpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAw IFVTIElTTyA2NDYgKEFTQ0lJKSAqLworICAgICZ1X2JyaXRpc2gsICAgICAgICAgICAgICAgICAg ICAgICAgIC8qICAxIFVLIElTTyA2NDYgKi8KKyAgICAmdV9mcl9jYW5hZGlhbiwgICAgICAgICAg ICAgICAgICAgICAvKiAgMiBDYW5hZGlhbiBGcmVuY2ggTlJDICovCisgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIDMgQ3ViYSAqLworICAgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICA0IEN6ZWNobyAqLworICAgICZ1X2RhbmlzaCwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICA1IERhbmlzaC9Ob3J3ZWdpYW4gSVNPIDY0NiAqLwor ICAgICZ1X2R1dGNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA2IER1dGNoIE5SQyAq LworICAgICZ1X2Zpbm5pc2gsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA3IEZpbm5pc2gg TlJDICAqLworICAgICZ1X2ZyZW5jaCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA4IEZy ZW5jaCBJU08gNjQ2ICovCisgICAgJnVfZ2VybWFuLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogIDkgR2VybWFuIElTTyA2NDYgKi8KKyAgICAmdV9oZWJyZXc3LCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAxMCBIZWJyZXctNyAoREVDKSAqLworICAgICZ1X2h1bmdhcmlhbiwgICAgICAg ICAgICAgICAgICAgICAgIC8qIDExIEh1bmdhcmlhbiBJU08gNjQ2ICovCisgICAgJnVfaWNlbGFu ZGljLCAgICAgICAgICAgICAgICAgICAgICAgLyogMTIgSWNlbGFuZGljIE5SQyAqLworICAgICZ1 X2l0YWxpYW4sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzIEl0YWxpYW4gSVNPIDY0NiAq LworICAgICZ1X2ppczAyMDFyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE0IEphcGFuZXNl IFJvbWFuIElTTyA2NDYgKi8KKyAgICAmdV9qaXMwMjAxaywgICAgICAgICAgICAgICAgICAgICAg ICAvKiAxNSBKYXBhbmVzZSBLYXRha2FuYSAqLworICAgICZ1X2tvaTcsICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDE2IFNob3J0IEtPSSAqLworICAgICZ1X2RhbmlzaCwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDE3IE5vcndlZ2lhbi9EYW5pc2ggSVNPIDY0NiAqLworICAgICZ1 X3BvcnR1Z3Vlc2UsICAgICAgICAgICAgICAgICAgICAgIC8qIDE4IFBvcnR1Z3Vlc2UgSVNPIDY0 NiAqLworICAgICZ1X3NwYW5pc2gsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE5IHNwYW5p c2ggSVNPIDY0NiAqLworICAgICZ1X3N3ZWRpc2gsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDIwIFN3ZWRpc2ggSVNPIDY0NiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDIxIFN3ZWRpc2ggSVNPIDY0NiBmb3IgbmFtZXMgKi8KKyAgICAmdV9zd2lzcywg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMiBTd2lzcyBOUkMgICAqLworICAgICZ1Xzg4 NTlfMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIzIElTTyA4ODU5LTEgICovCisgICAg JnVfODg1OV8yLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjQgSVNPIDg4NTktMiAgKi8K KyAgICAmdV84ODU5XzMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNSBJU08gODg1OS0z ICAqLworICAgICZ1Xzg4NTlfNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI2IElTTyA4 ODU5LTQgICovCisgICAgJnVfODg1OV81LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjcg SVNPIDg4NTktNSAgKi8gLyogQ3lyaWxsaWMgKi8KKyAgICAmdV84ODU5XzYsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAyOCBJU08gODg1OS02ICAqLyAvKiBBcmFiaWMgKi8KKyAgICAmdV84 ODU5XzcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyOSBJU08gODg1OS03ICAqLyAvKiBH cmVlayAqLworICAgICZ1Xzg4NTlfOCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMwIElT TyA4ODU5LTggICovIC8qIEhlYnJldyAqLworICAgICZ1Xzg4NTlfOSwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDMxIElTTyA4ODU5LTkgICovCisgICAgJnVfODg1OV8xMCwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMzIgSVNPIDg4NTktMTAgKi8KKyAgICAmdV9rb2k4LCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAzMyBLT0ktOCAgICAgICAqLworICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM0IEpJUy03ICAgICAgICovCisgICAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzUgU2hpZnQgSklTICAgKi8KKyAgICBO VUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNiBKYXBhbmVzZSBFVUMgKEpB RSkgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNyBKYXBh bmVzZSBERUMgS2FuamkgKi8KKyAgICAmdV9kZWNtY3MsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAzOCBERUMgTUNTICovCisgICAgJnVfbmV4dHN0ZXAsICAgICAgICAgICAgICAgICAgICAg ICAgLyogMzkgTmVYVCAgICAqLworICAgICZ1X2RnaSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDQwIERHSSAgICAgKi8KKyAgICAmdV9tYWNsYXRpbiwgICAgICAgICAgICAgICAgICAg ICAgICAvKiA0MSBNYWNpbnRvc2ggTGF0aW4gICovCisgICAgJnVfaHByb21hbjgsICAgICAgICAg ICAgICAgICAgICAgICAgLyogNDIgSFAgUm9tYW4gOCAgICAgICAqLworICAgICZ1X2NwNDM3LCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQzIENQNDM3IC0gT3JpZ2luYWwgKi8KKyAgICAm dV9jcDg1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NCBDUDg1MCAtIFcgRXVyb3Bl ICovCisgICAgJnVfY3A4NTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDUgQ1A4NTIg LSBFIEV1cm9wZSAqLworICAgICZ1X2NwODU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDQ2IENQODU3IC0gVHVya2lzaCAgKi8KKyAgICAmdV9jcDg2MiwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA0NyBDUDg2MiAtIEhlYnJldyAgICovCisgICAgJnVfY3A4NjQsICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogNDggQ1A4NjQgLSBBcmFiaWMgICAqLworICAgICZ1X2NwODY2 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ5IENQODY2IC0gQ3lyaWxsaWMgKi8KKyAg ICAmdV9jcDg2OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MCBDUDg2OSAtIEdyZWVr ICAgICovCisgICAgJnVfZGVjc3BlYywgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTEgREVD IFNwZWNpYWwgR3JhcGhpY3MgKi8KKyAgICAmdV9kZWN0ZWNoLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA1MiBERUMgVGVjaG5pY2FsICovCisgICAgJnVfYzBwaWNzLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNTMgQzAgUGljdHVyZXMgKi8KKyAgICAmdV9jMXBpY3MsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA1NCBDMSBQaWN0dXJlcyAqLworICAgICZ1X3NtaWxleSwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDU1IElCTSBDMCBHcmFwaGljcyAqLworICAgICZ1X2hl YXRoMTlnLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU2IEhlYXRoIDE5IEdyYXBoaWNzICov CisgICAgJnVfdHZpZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTcgVFZJIEdyYXBo aWNzICovCisgICAgJnVfd3lzZV9nbiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTggV3lz ZSA2MCBHcmFwaGljcyBOb3JtYWwgKi8KKyAgICAmdV93eXNlX2cxLCAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA1OSBXeXNlIDYwIEdyYXBoaWNzIDEgKi8KKyAgICAmdV93eXNlX2cyLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA2MCBXeXNlIDYwIEdyYXBoaWNzIDIgKi8KKyAgICAmdV93 eXNlX2czLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2MSBXeXNlIDYwIEdyYXBoaWNzIDMg Ki8KKyAgICAmdV9lbG90OTI3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2MiBHcmVlayBF TE9UIDkyNyAqLworICAgICZ1X2Rnc3BlYywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYz IERHIFNwZWNpYWwgZ3JhcGhpY3MgKi8KKyAgICAmdV9kZ2xpbmUsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA2NCBERyBMaW5lIGRyYXdpbmcgKi8KKyAgICAmdV9kZ3dvcmQsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA2NSBERyBXb3JkIHByb2Nlc3NpbmcgKi8KKyAgICAmdV9ocGxp bmUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2NiBIUCBMaW5lIGRyYXdpbmcgKi8KKyAg ICAmdV9ocG1hdGgsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA2NyBIUCBNYXRoL1RlY2hu aWNhbCAqLworICAgICZ1X3FueGdycGgsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY4IFFO WCBHcmFwaGljcyAqLworICAgICZ1X3NuaWJyYWNrLCAgICAgICAgICAgICAgICAgICAgICAgIC8q IDY5IFNOSSBCcmFja2V0cyAqLworICAgICZ1X3NuaWV1cm8sICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDcwIFNOSSBFdXJvICovCisgICAgJnVfc25pZmFjZXQsICAgICAgICAgICAgICAgICAg ICAgICAgLyogNzEgU05JIEZhY2V0ICovCisgICAgJnVfc25paWJtLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogNzIgU05JIElCTSAqLworICAgICZ1X3NuaWJsYW5rcywgICAgICAgICAgICAg ICAgICAgICAgIC8qIDczIFNOSSBCbGFua3MgKi8KKyAgICAmdV9jcDEyNTIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA3NCBXaW5kb3dzIExhdGluLTEgKi8KKyAgICAmdV9jcDEyNTAsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA3NSBXaW5kb3dzIExhdGluLTIgKi8KKyAgICAmdV9j cDEyNTEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3NiBXaW5kb3dzIEN5cmlsbGljICov CisgICAgJnVfY3AxMjUzLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzcgV2luZG93cyBH cmVlayAqLworICAgICZ1X2NwMTI1NCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc4IFdp bmRvd3MgVHVya2lzaCAqLworICAgICZ1X2NwMTI1NywgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDc5IFdpbmRvd3MgTGF0aW4tNCAqLworICAgICZ1X2NwODU2LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDgwIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4NTYgKi8KKyAgICAmdV9jcDg1 NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MSBDeXJpbGxpYyBQQyBDb2RlIFBhZ2Ug ODU1ICovCisgICAgJnVfODg1OV8xLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODIgQ1A4 MTkgLSBTYW1lIGFzIDg4NTktMSAqLworICAgICZ1Xzg4NTlfMiwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDgzIENQOTEyIC0gU2FtZSBhcyA4ODU5LTIgKi8KKyAgICAmdV84ODU5XzMsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA4NCBDUDkxMyAtIFNhbWUgYXMgODg1OS0zICovCisg ICAgJnVfODg1OV80LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODUgQ1A5MTQgLSBTYW1l IGFzIDg4NTktNCAqLworICAgICZ1Xzg4NTlfNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDg2IENQOTE1IC0gU2FtZSBhcyA4ODU5LTUgKi8KKyAgICAmdV84ODU5XzYsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA4NyBDUDEwODkgLSBTYW1lIGFzIDg4NTktNiAqLworICAgICZ1Xzg4 NTlfNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg4IENQODEzIC0gU2FtZSBhcyA4ODU5 LTcgKi8KKyAgICAmdV84ODU5XzgsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4OSBDUDkx NiAtIFNhbWUgYXMgODg1OS04ICovCisgICAgJnVfODg1OV85LCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogOTAgQ1A5MjAgLSBTYW1lIGFzIDg4NTktOSAqLworICAgICZ1X2hwcm9tYW44LCAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDkxIENQMTA1MSAtIFNhbWUgYXMgSFAgUm9tYW4gOCAq LworICAgICZ1X2NwODU4LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDkyIENQODU4IC0g VyBFdXJvcGUgdy9FdXJvICovCisgICAgJnVfODg1OV8xNSwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogOTMgSVNPIDg4NTktMTUgTGF0aW4tMTUgKi8KKyAgICAmdV84ODU5XzE1LCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA5NCBDUDkyMyAtIFNhbWUgYXMgODg1OS0xNSAgKi8KKyAgICAm dV84ODU5XzcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5NSBFTE9UOTI4IC0gU2FtZSBh cyA4ODU5LTcgKi8KKyAgICAmdV9xdWlja2RyYXcsICAgICAgICAgICAgICAgICAgICAgICAvKiA5 NiBDUDEwMDAwIC0gQXBwbGUgUXVpY2tkcmF3ICovCisgICAgJnVfY3AzNywgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogOTcgQ1AzNyAtIFUuUy4gRUJDRElDICovCisgICAgJnVfY3AxMjU1 LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTggQ1AxMjU1IC0gV2luZG93cyBIZWJyZXcg Ki8KKyAgICAmdV9jcDEyNTYsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5OSBDUDEyNTYg LSBXaW5kb3dzIEFyYWJpYyAqLworICAgICZ1X2NwMTI1OCwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDEwMCBDUDEyNTggLSBXaW5kb3dzIFZpZXQgTmFtICovCisgICAgJnVfbWF6b3ZpYSwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAxIE1hem92aWEgUG9saXNoIGNvZGUgcGFnZSAq LworICAgICZ1X3RyYW5zcGFyZW50LCAgICAgICAgICAgICAgICAgICAgIC8qIDEwMiBUcmFuc3Bh cmVudCAqLworICAgICZ1X2h6MTUwMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMyBI YXplbHRpbmUgMTUwMC8xNTIwIGdyYXBoaWNzICovCisgICAgJnVfa29pOHIsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMTA0IEtPSTgtUiAqLworICAgICZ1X2tvaTh1LCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDEwNSBLT0k4LVUgKi8KKyAgICAmdV9hcGwxLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAxMDYgQVBMIDEgKElTTykgKi8KKyAgICAmdV9hcGwyLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDcgQVBMIDIgKER5YWRpYykgKi8KKyAgICAmdV9h cGwzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDggQVBMIDMgKFBsdXMpICovCisg ICAgJnVfYXBsNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA4IEFQTCA0IChJQk0p ICovCisgICAgJnVfYXBsNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTEwIEFQTCA1 ICgyNzQxKSAqLworfTsKKworLyoKKyAgVGFibGUgb2YgQmxhaC10by1Vbmljb2RlIHRyYW5zbGF0 aW9uIGZ1bmN0aW9ucy4KKyAgS0VFUCBUSElTIElOIFNZTkMgV0lUSCBUSEUgVFhfYmxhaCBERUZJ TklUSVRJT05TIGluIGNrY3VuaS5oLgorKi8KK1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCisoKnhs X3VbTUFYVFhTRVRTKzFdKShDSEFSKQorI2Vsc2UKKygqeGxfdVtNQVhUWFNFVFMrMV0pKCkKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworPSB7CisgICAgYXNjaWlfdSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogIDAgVVMgSVNPIDY0NiAoQVNDSUkpICovCisgICAgYnJpdGlzaF91LCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogIDEgVUsgSVNPIDY0NiAqLworICAgIGZyX2NhbmFkaWFu X3UsICAgICAgICAgICAgICAgICAgICAgIC8qICAyIENhbmFkaWFuIEZyZW5jaCBOUkMgKi8KKyAg ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMyBDdWJhICovCisgICAg TlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDQgQ3plY2hvICovCisgICAg ZGFuaXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDUgRGFuaXNoL05vcndlZ2lh biBJU08gNjQ2ICovCisgICAgZHV0Y2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog IDYgRHV0Y2ggTlJDICovCisgICAgZmlubmlzaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogIDcgRmlubmlzaCBOUkMgICovCisgICAgZnJlbmNoX3UsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogIDggRnJlbmNoIElTTyA2NDYgKi8KKyAgICBnZXJtYW5fdSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAgOSBHZXJtYW4gSVNPIDY0NiAqLworICAgIGhlYnJldzdfdSwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIEhlYnJldy03IChERUMpICovCisgICAgaHVuZ2Fy aWFuX3UsICAgICAgICAgICAgICAgICAgICAgICAgLyogMTEgSHVuZ2FyaWFuIElTTyA2NDYgKi8K KyAgICBpY2VsYW5kaWNfdSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMiBJY2VsYW5kaWMg Ki8KKyAgICBpdGFsaWFuX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMyBJdGFsaWFu IElTTyA2NDYgKi8KKyAgICBqaXMwMjAxcl91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAx NCBKYXBhbmVzZSBSb21hbiBJU08gNjQ2ICovCisgICAgamlzMDIwMWtfdSwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMTUgSmFwYW5lc2UgS2F0YWthbmEgKi8KKyAgICBrb2k3X3UsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAxNiBTaG9ydCBLT0kgKi8KKyAgICBkYW5pc2hfdSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxNyBOb3J3ZWdpYW4vRGFuaXNoIElTTyA2NDYg Ki8KKyAgICBwb3J0dWd1ZXNlX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAxOCBQb3J0dWd1 ZXNlIElTTyA2NDYgKi8KKyAgICBzcGFuaXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAxOSBzcGFuaXNoIElTTyA2NDYgKi8KKyAgICBzd2VkaXNoX3UsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAyMCBTd2VkaXNoIElTTyA2NDYgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAyMSBTd2VkaXNoIElTTyA2NDYgZm9yIG5hbWVzICovCisgICAg c3dpc3NfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjIgU3dpc3MgTlJDICAgKi8K KyAgICBpc29fODg1OV8xX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAyMyBJU08gODg1OS0x ICAqLworICAgIGlzb184ODU5XzJfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDI0IElTTyA4 ODU5LTIgICovCisgICAgaXNvXzg4NTlfM191LCAgICAgICAgICAgICAgICAgICAgICAgLyogMjUg SVNPIDg4NTktMyAgKi8KKyAgICBpc29fODg1OV80X3UsICAgICAgICAgICAgICAgICAgICAgICAv KiAyNiBJU08gODg1OS00ICAqLworICAgIGlzb184ODU5XzVfdSwgICAgICAgICAgICAgICAgICAg ICAgIC8qIDI3IElTTyA4ODU5LTUgICovIC8qIEN5cmlsbGljICovCisgICAgaXNvXzg4NTlfNl91 LCAgICAgICAgICAgICAgICAgICAgICAgLyogMjggSVNPIDg4NTktNiAgKi8gLyogQXJhYmljICov CisgICAgaXNvXzg4NTlfN191LCAgICAgICAgICAgICAgICAgICAgICAgLyogMjkgSVNPIDg4NTkt NyAgKi8gLyogR3JlZWsgKi8KKyAgICBpc29fODg1OV84X3UsICAgICAgICAgICAgICAgICAgICAg ICAvKiAzMCBJU08gODg1OS04ICAqLyAvKiBIZWJyZXcgKi8KKyAgICBpc29fODg1OV85X3UsICAg ICAgICAgICAgICAgICAgICAgICAvKiAzMSBJU08gODg1OS05ICAqLyAvKiBMYXRpbi01ICovCisg ICAgaXNvXzg4NTlfMTBfdSwgICAgICAgICAgICAgICAgICAgICAgLyogMzIgSVNPIDg4NTktMTAg Ki8KKyAgICBrb2k4X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMyBLT0ktOCAg ICAgICAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDM0IEpJ Uy03ICAgICAgICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MzUgU2hpZnQgSklTICAgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAzNiBKYXBhbmVzZSBFVUMgKEpBRSkgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiAzNyBKYXBhbmVzZSBERUMgS2FuamkgKi8KKyAgICBkZWNtY3NfdSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzOCBERUMgTUNTICovCisgICAgbmV4dHN0ZXBf dSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzkgTmVYVCAgICAqLworICAgIGRnaV91LCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQwIERHSSAgICAgKi8KKyAgICBtYWNsYXRp bl91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MSBNYWNpbnRvc2ggTGF0aW4gICovCisg ICAgaHByb21hbjhfdSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDIgSFAgUm9tYW4gOCAg ICAgICAqLworICAgIGNwNDM3X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQzIENQ NDM3IC0gT3JpZ2luYWwgKi8KKyAgICBjcDg1MF91LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA0NCBDUDg1MCAtIFcgRXVyb3BlICovCisgICAgY3A4NTJfdSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogNDUgQ1A4NTIgLSBFIEV1cm9wZSAqLworICAgIGNwODU3X3UsICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDQ2IENQODU3IC0gVHVya2lzaCAgKi8KKyAgICBjcDg2 Ml91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NyBDUDg2MiAtIEhlYnJldyAgICov CisgICAgY3A4NjRfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDggQ1A4NjQgLSBB cmFiaWMgICAqLworICAgIGNwODY2X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ5 IENQODY2IC0gQ3lyaWxsaWMgKi8KKyAgICBjcDg2OV91LCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA1MCBDUDg2OSAtIEdyZWVrICAgICovCisgICAgZGVjc3BlY191LCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNTEgREVDIFNwZWNpYWwgR3JhcGhpY3MgKi8KKyAgICBkZWN0ZWNo X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MiBERUMgVGVjaG5pY2FsICovCisgICAg YzBwaWNzX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNTMgQzAgUGljdHVyZXMgKi8K KyAgICBjMXBpY3NfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1NCBDMSBQaWN0dXJl cyAqLworICAgIHNtaWxleV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU1IElCTSBD MCBHcmFwaGljcyAqLworICAgIGhlYXRoMTlnX3UsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDU2IEhlYXRoIDE5IGdyYXBoaWNzICovCisgICAgdHZpZ191LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogNTcgVFZJIGdyYXBoaWNzICovCisgICAgd3lzZV9nbl91LCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNTggV3lzZSA2MCBub3JtYWwtbW9kZSBncmFwaGljcyAqLworICAg IHd5c2VfZzFfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDU5IFd5c2UgNjAgZ3JhcGhp Y3MgMSAqLworICAgIHd5c2VfZzJfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYwIFd5 c2UgNjAgZ3JhcGhpY3MgMiAqLworICAgIHd5c2VfZzNfdSwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDYxIFd5c2UgNjAgZ3JhcGhpY3MgMyAqLworICAgIGVsb3Q5MjdfdSwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDYyIEdyZWVrIEVMT1QgOTI3ICovCisgICAgZGdzcGVjX3UsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogNjMgREcgU3BlY2lhbCBncmFwaGljcyAqLworICAg IGRnbGluZV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY0IERHIExpbmUgZHJhd2lu ZyAqLworICAgIGRnd29yZF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDY1IERHIFdv cmQgcHJvY2Vzc2luZyAqLworICAgIGhwbGluZV91LCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDY2IEhQIExpbmUgZHJhd2luZyAqLworICAgIGhwbWF0aF91LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDY3IEhQIE1hdGgvVGVjaG5pY2FsICovCisgICAgcW54Z3JwaF91LCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNjggUU5YIEdyYXBoaWNzICovCisgICAgc25pYnJhY2tf dSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjkgU05JIEJyYWNrZXRzICovCisgICAgc25p ZXVyb191LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzAgU05JIEV1cm8gKi8KKyAgICBz bmlmYWNldF91LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3MSBTTkkgRmFjZXQgKi8KKyAg ICBzbmlpYm1fdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3MiBTTkkgSUJNICovCisg ICAgc25pYmxhbmtzX3UsICAgICAgICAgICAgICAgICAgICAgICAgLyogNzMgU05JIEJsYW5rcyAq LworICAgIGNwMTI1Ml91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc0IFdpbmRvd3Mg TGF0aW4tMSAqLworICAgIGNwMTI1MF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc1 IFdpbmRvd3MgTGF0aW4tMiAqLworICAgIGNwMTI1MV91LCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDc2IFdpbmRvd3MgQ3lyaWxsaWMgKi8KKyAgICBjcDEyNTNfdSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA3NyBXaW5kb3dzIEdyZWVrICovCisgICAgY3AxMjU0X3UsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNzggV2luZG93cyBUdXJraXNoICovCisgICAgY3AxMjU3 X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzkgV2luZG93cyBMYXRpbi00ICovCisg ICAgY3A4NTZfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODAgQ3lyaWxsaWMgUEMg Q29kZSBQYWdlIDg1NiAqLworICAgIGNwODU1X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDgxIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4NTYgKi8KKyAgICBpc29fODg1OV8xX3UsICAg ICAgICAgICAgICAgICAgICAgICAvKiA4MiBDUDgxOSAtIFNhbWUgYXMgODg1OS0xICovCisgICAg aXNvXzg4NTlfMl91LCAgICAgICAgICAgICAgICAgICAgICAgLyogODMgQ1A5MTIgLSBTYW1lIGFz IDg4NTktMiAqLworICAgIGlzb184ODU5XzNfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDg0 IENQOTEzIC0gU2FtZSBhcyA4ODU5LTMgKi8KKyAgICBpc29fODg1OV80X3UsICAgICAgICAgICAg ICAgICAgICAgICAvKiA4NSBDUDkxNCAtIFNhbWUgYXMgODg1OS00ICovCisgICAgaXNvXzg4NTlf NV91LCAgICAgICAgICAgICAgICAgICAgICAgLyogODYgQ1A5MTUgLSBTYW1lIGFzIDg4NTktNSAq LworICAgIGlzb184ODU5XzZfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDg3IENQMTA4OSAt IFNhbWUgYXMgODg1OS02ICovCisgICAgaXNvXzg4NTlfN191LCAgICAgICAgICAgICAgICAgICAg ICAgLyogODggQ1A4MTMgLSBTYW1lIGFzIDg4NTktNyAqLworICAgIGlzb184ODU5XzhfdSwgICAg ICAgICAgICAgICAgICAgICAgIC8qIDg5IENQOTE2IC0gU2FtZSBhcyA4ODU5LTggKi8KKyAgICBp c29fODg1OV85X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiA5MCBDUDkyMCAtIFNhbWUgYXMg ODg1OS05ICovCisgICAgaHByb21hbjhfdSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTEg Q1AxMDUxIC1TYW1lIGFzIEhQIFJvbWFuIDggKi8KKyAgICBjcDg1OF91LCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA5MiBDUDg1OCAtIFcgRXVyb3BlIHcvRXVybyAqLworICAgIGlzb184 ODU5XzE1X3UsICAgICAgICAgICAgICAgICAgICAgIC8qIDkzIElTTyA4ODU5LTE1IExhdGluIDE1 ICovCisgICAgaXNvXzg4NTlfMTVfdSwgICAgICAgICAgICAgICAgICAgICAgLyogOTQgQ1A5MjMg LSBTYW1lIGFzIDg4NTktMTUgKi8KKyAgICBpc29fODg1OV83X3UsICAgICAgICAgICAgICAgICAg ICAgICAvKiA5NSBFTE9UOTI4IC0gU2FtZSBhcyA4ODU5LTcgKi8KKyAgICBxdWlja2RyYXdfdSwg ICAgICAgICAgICAgICAgICAgICAgICAvKiA5NiBDUDEwMDAwIC0gQXBwbGUgUXVpY2tkcmF3ICov CisgICAgY3AzN191LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTcgQ1AzNyAtIFUu Uy4gRUJDRElDICovCisgICAgY3AxMjU1X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog OTggQ1AxMjU1IC0gV2luZG93cyBIZWJyZXcgKi8KKyAgICBjcDEyNTZfdSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA5OSBDUDEyNTYgLSBXaW5kb3dzIEFyYWJpYyAqLworICAgIGNwMTI1 OF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMCBDUDEyNTggLSBXaW5kb3dzIFZp ZXQgTmFtICovCisgICAgbWF6b3ZpYV91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAx IE1hem92aWEgUEMgY29kZSBwYWdlICovCisgICAgaWRlbnRfdSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMTAyIFRyYW5zcGFyZW50IC0gbm8gdHJhbnNsYXRpb24gICovCisgICAgaHox NTAwX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAzIEhhemVsdGluZSAxNTAwLzE1 MjAgZ3JhcGhpY3MgKi8KKyAgICBrb2k4cl91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAxMDQgS09JOC1SICovCisgICAga29pOHVfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMTA1IEtPSTgtVSAqLworICAgIGFwbDFfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDEwNiBBUEwgMSAoSVNPKSAqLworICAgIGFwbDJfdSwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDEwNyBBUEwgMiAoQUlYKSAqLworICAgIGFwbDNfdSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDEwOCBBUEwgMyAoUGx1cykgKi8KKyAgICBhcGw0X3UsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAxMDkgQVBMIDQgKElCTSkgKi8KKyAgICBhcGw1X3UgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMTAgQVBMIDUgKDI3NDEpICovCit9OworLyoK KyAgVGFibGUgb2YgVW5pY29kZS10by1CbGFoIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KKyAgS0VF UCBUSElTIElOIFNZTkMgV0lUSCBUSEUgVFhfYmxhaCBERUZJTklUSVRJT05TIGluIGNrY3VuaS5o LCBhbmQgYWxzbworICB3aXRoIHRoZSB0YWJsZXMgYWJvdmUuCisqLworaW50CisjaWZkZWYgQ0tf QU5TSUMKKygqeGxfdHhbTUFYVFhTRVRTKzFdKShVU0hPUlQpCisjZWxzZQorKCp4bF90eFtNQVhU WFNFVFMrMV0pKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworID0geworICAgIHR4X3VzYXNjaWks ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAwIFVTIElTTyA2NDYgKEFTQ0lJKSAqLworICAg IHR4X2JyaXRpc2gsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAxIFVLIElTTyA2NDYgKi8K KyAgICB0eF9mcl9jYW5hZGlhbiwgICAgICAgICAgICAgICAgICAgICAvKiAgMiBDYW5hZGlhbiBG cmVuY2ggTlJDICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog IDMgQ3ViYSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA0 IEN6ZWNobyAqLworICAgIHR4X2RhbmlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA1 IERhbmlzaC9Ob3J3ZWdpYW4gSVNPIDY0NiAqLworICAgIHR4X2R1dGNoLCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICA2IER1dGNoIE5SQyAqLworICAgIHR4X2Zpbm5pc2gsICAgICAgICAg ICAgICAgICAgICAgICAgIC8qICA3IEZpbm5pc2ggTlJDICAqLworICAgIHR4X2ZyZW5jaCwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qICA4IEZyZW5jaCBJU08gNjQ2ICovCisgICAgdHhfZ2Vy bWFuLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDkgR2VybWFuIElTTyA2NDYgKi8KKyAg ICB0eF9oZWJyZXc3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMCBIZWJyZXctNyAoREVD KSAqLworICAgIHR4X2h1bmdhcmlhbiwgICAgICAgICAgICAgICAgICAgICAgIC8qIDExIEh1bmdh cmlhbiBJU08gNjQ2ICovCisgICAgdHhfaWNlbGFuZGljLCAgICAgICAgICAgICAgICAgICAgICAg LyogMTIgSWNlbGFuZGljICovCisgICAgdHhfaXRhbGlhbiwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMTMgSXRhbGlhbiBJU08gNjQ2ICovCisgICAgdHhfamlzMDIwMXIsICAgICAgICAgICAg ICAgICAgICAgICAgLyogMTQgSmFwYW5lc2UgUm9tYW4gSVNPIDY0NiAqLworICAgIHR4X2ppczAy MDFrLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE1IEphcGFuZXNlIEthdGFrYW5hICovCisg ICAgdHhfa29pNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTYgU2hvcnQgS09JICov CisgICAgdHhfZGFuaXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTcgTm9yd2VnaWFu L0RhbmlzaCBJU08gNjQ2ICovCisgICAgdHhfcG9ydHVndWVzZSwgICAgICAgICAgICAgICAgICAg ICAgLyogMTggUG9ydHVndWVzZSBJU08gNjQ2ICovCisgICAgdHhfc3BhbmlzaCwgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMTkgc3BhbmlzaCBJU08gNjQ2ICovCisgICAgdHhfc3dlZGlzaCwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMjAgU3dlZGlzaCBJU08gNjQ2ICovCisgICAgTlVM TCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjEgU3dlZGlzaCBJU08gNjQ2IGZv ciBuYW1lcyAqLworICAgIHR4X3N3aXNzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIy IFN3aXNzIE5SQyAgICovCisgICAgdHhfaWRlbnQsICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogMjMgSVNPIDg4NTktMSAgKi8KKyAgICB0eF84ODU5XzIsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAyNCBJU08gODg1OS0yICAqLworICAgIHR4Xzg4NTlfMywgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDI1IElTTyA4ODU5LTMgICovCisgICAgdHhfODg1OV80LCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMjYgSVNPIDg4NTktNCAgKi8KKyAgICB0eF84ODU5XzUsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAyNyBJU08gODg1OS01ICAqLyAvKiBDeXJpbGxpYyAqLwor ICAgIHR4Xzg4NTlfNiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI4IElTTyA4ODU5LTYg ICovIC8qIEFyYWJpYyAqLworICAgIHR4Xzg4NTlfNywgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDI5IElTTyA4ODU5LTcgICovIC8qIEdyZWVrICovCisgICAgdHhfODg1OV84LCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMzAgSVNPIDg4NTktOCAgKi8gLyogSGVicmV3ICovCisgICAg dHhfODg1OV85LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzEgSVNPIDg4NTktOSAgKi8g LyogTGF0aW4tNSAqLworICAgIHR4Xzg4NTlfMTAsICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDMyIElTTyA4ODU5LTEwICovIC8qIExhdGluLTYgKi8KKyAgICB0eF9rb2k4LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiAzMyBLT0ktOCAgICAgICAqLworICAgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDM0IEpJUy03ICAgICAgICovCisgICAgTlVMTCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzUgU2hpZnQgSklTICAgKi8KKyAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNiBKYXBhbmVzZSBFVUMgKEpBRSkg Ki8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzNyBKYXBhbmVz ZSBERUMgS2FuamkgKi8KKyAgICB0eF9kZWNtY3MsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAzOCBERUMgTUNTICovCisgICAgdHhfbmV4dHN0ZXAsICAgICAgICAgICAgICAgICAgICAgICAg LyogMzkgTmVYVCAgICAqLworICAgIHR4X2RnaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDQwIERHSSAgICAgKi8KKyAgICB0eF9tYWNsYXRpbiwgICAgICAgICAgICAgICAgICAgICAg ICAvKiA0MSBNYWNpbnRvc2ggTGF0aW4gICovCisgICAgdHhfaHByb21hbjgsICAgICAgICAgICAg ICAgICAgICAgICAgLyogNDIgSFAgUm9tYW4gOCAgICAgICAqLworICAgIHR4X2NwNDM3LCAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDQzIENQNDM3IC0gT3JpZ2luYWwgKi8KKyAgICB0eF9j cDg1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0NCBDUDg1MCAtIFcgRXVyb3BlICov CisgICAgdHhfY3A4NTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDUgQ1A4NTIgLSBF IEV1cm9wZSAqLworICAgIHR4X2NwODU3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ2 IENQODU3IC0gVHVya2lzaCAgKi8KKyAgICB0eF9jcDg2MiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiA0NyBDUDg2MiAtIEhlYnJldyAgICovCisgICAgdHhfY3A4NjYsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNDggQ1A4NjQgLSBBcmFiaWMgICAqLworICAgIHR4X2NwODY2LCAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQ5IENQODY2IC0gQ3lyaWxsaWMgKi8KKyAgICB0 eF9jcDg2OSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA1MCBDUDg2OSAtIEdyZWVrICAg ICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNTEgREVDIFNw ZWNpYWwgR3JhcGhpY3MgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAg ICAvKiA1MiBERUMgVGVjaG5pY2FsICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5 ICovICAgICAgLyogNTMgQzAgUGljdHVyZXMgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5 IG9ubHkgKi8gICAgICAvKiA1NCBDMSBQaWN0dXJlcyAqLworICAgIE5VTEwsICAgICAgIC8qIERp c3BsYXkgb25seSAqLyAgICAgIC8qIDU1IElCTSBDMCBHcmFwaGljcyAqLworICAgIE5VTEwsICAg ICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDU2IEhlYXRoIDE5IGdyYXBoaWNzICovCisg ICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNTcgVFZJIGdyYXBoaWNz ICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyogNTggV3lzZSA2 MCBub3JtYWwtbW9kZSBncmFwaGljcyAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25s eSAqLyAgICAgIC8qIDU5IFd5c2UgNjAgZ3JhcGhpY3MgMSAqLworICAgIE5VTEwsICAgICAgIC8q IERpc3BsYXkgb25seSAqLyAgICAgIC8qIDYwIFd5c2UgNjAgZ3JhcGhpY3MgMiAqLworICAgIE5V TEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDYxIFd5c2UgNjAgZ3JhcGhpY3Mg MyAqLworICAgIHR4X2Vsb3Q5MjcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYyIEdyZWVr IEVMT1QgOTI3ICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICovICAgICAgLyog NjMgREcgc3BlY2lhbCBncmFwaGljcyAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25s eSAqLyAgICAgIC8qIDY0IERHIGxpbmUtZHJhd2luZyAqLworICAgIE5VTEwsICAgICAgIC8qIERp c3BsYXkgb25seSAqLyAgICAgIC8qIDY1IERHIHdvcmQtcHJvY2Vzc2luZyAqLworICAgIE5VTEws ICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDY2IEhQIGxpbmUtZHJhd2luZyAqLwor ICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAqLyAgICAgIC8qIDY3IEhQIG1hdGgvdGVj aGljYWwgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAvKiA2OCBR TlggR3JhcGhpY3MgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8gICAgICAv KiA2OSBTTkkgQnJhY2tldHMgKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9ubHkgKi8g ICAgICAvKiA3MCBTTkkgRXVybyAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25seSAq LyAgICAgIC8qIDcxIFNOSSBGYWNldCAqLworICAgIE5VTEwsICAgICAgIC8qIERpc3BsYXkgb25s eSAqLyAgICAgIC8qIDcyIFNOSSBJQk0gKi8KKyAgICBOVUxMLCAgICAgICAvKiBEaXNwbGF5IG9u bHkgKi8gICAgICAvKiA3MyBTTkkgQmxhbmtzICovCisgICAgdHhfY3AxMjUyLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNzQgV2luZG93cyBMYXRpbi0xICovCisgICAgdHhfY3AxMjUwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogNzUgV2luZG93cyBMYXRpbi0yICovCisgICAgdHhf Y3AxMjUxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNzYgV2luZG93cyBDeXJpbGxpYyAq LworICAgIHR4X2NwMTI1MywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDc3IFdpbmRvd3Mg R3JlZWsgKi8KKyAgICB0eF9jcDEyNTQsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3OCBX aW5kb3dzIFR1cmtpc2ggKi8KKyAgICB0eF9jcDEyNTcsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA3OSBXaW5kb3dzIExhdGluLTQgKi8KKyAgICB0eF9jcDg1NiwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiA4MCBDeXJpbGxpYyBQQyBDb2RlIFBhZ2UgODU2ICovCisgICAgdHhfY3A4 NTUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODEgQ3lyaWxsaWMgUEMgQ29kZSBQYWdl IDg1NSAqLworICAgIHR4X2lkZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDgyIENQ ODE5IC0gU2FtZSBhcyA4ODU5LTEgKi8KKyAgICB0eF84ODU5XzIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA4MyBDUDkxMiAtIFNhbWUgYXMgODg1OS0yICovCisgICAgdHhfODg1OV8zLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogODQgQ1A5MTMgLSBTYW1lIGFzIDg4NTktMyAqLwor ICAgIHR4Xzg4NTlfNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDg1IENQOTE0IC0gU2Ft ZSBhcyA4ODU5LTQgKi8KKyAgICB0eF84ODU5XzUsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiA4NiBDUDkxNSAtIFNhbWUgYXMgODg1OS01ICovCisgICAgdHhfODg1OV82LCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogODcgQ1AxMDg5IC0gU2FtZSBhcyA4ODU5LTYgKi8KKyAgICB0eF84 ODU5XzcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA4OCBDUDgxMyAtIFNhbWUgYXMgODg1 OS03ICovCisgICAgdHhfODg1OV84LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogODkgQ1A5 MTYgLSBTYW1lIGFzIDg4NTktOCAqLworICAgIHR4Xzg4NTlfOSwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIDkwIENQOTIwIC0gU2FtZSBhcyA4ODU5LTkgKi8KKyAgICB0eF9ocHJvbWFuOCwg ICAgICAgICAgICAgICAgICAgICAgICAvKiA5MSBDUDEwNTEgLVNhbWUgYXMgSFAgUm9tYW4gOCAq LworICAgIHR4X2NwODU4LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDkyIENQODU4IC0g VyBFdXJvcGUgdy9FdXJvICovCisgICAgdHhfODg1OV8xNSwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogOTMgSVNPIDg4NTktMTUgTGF0aW4gMTUgKi8KKyAgICB0eF84ODU5XzE1LCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiA5NCBDUDkyMyAtIFNhbWUgYXMgTGF0aW4gMTUgKi8KKyAgICB0 eF84ODU5XzcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5NSBFTE9UOTI4IC0gU2FtZSBh cyA4ODU5LTcgKi8KKyAgICB0eF9xdWlja2RyYXcsICAgICAgICAgICAgICAgICAgICAgICAvKiA5 NiBDUDEwMDAwIC0gQXBwbGUgUXVpY2tkcmF3ICovCisgICAgdHhfY3AzNywgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogOTcgQ1AzNyAtIFUuUy4gRUJDRElDICovCisgICAgdHhfY3AxMjU1 LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOTggQ1AxMjU1IC0gV2luZG93cyBIZWJyZXcg Ki8KKyAgICB0eF9jcDEyNTYsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA5OSBDUDEyNTYg LSBXaW5kb3dzIEFyYWJpYyAqLworICAgIHR4X2NwMTI1OCwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDEwMCBDUDEyNTggLSBXaW5kb3dzIFZpZXQgTmFtICovCisgICAgdHhfbWF6b3ZpYSwg ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAxIE1hem92aWEgIFBDIGNvZGUgcGFnZSAqLwor ICAgIHR4X2lkZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMiBUcmFuc3BhcmVu dCAtIG5vIHRyYW5zbGF0aW9uICovCisgICAgTlVMTCwgICAgICAgLyogRGlzcGxheSBvbmx5ICov ICAgICAgLyogMTAzIEhhemVsdGluZSAxNTAwLzE1MjAgZ3JhcGhpY3MgKi8KKyAgICB0eF9rb2k4 ciwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDQgS09JOC1SICovCisgICAgdHhfa29p OHUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA1IEtPSTgtVSAqLworICAgIHR4X2Fw bDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwNiBBUEwgMSAoSVNPKSAqLworICAg IHR4X2FwbDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwNyBBUEwgMiAoQUlYKSAq LworICAgIHR4X2FwbDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwOCBBUEwgMyAo UGx1cykgKi8KKyAgICB0eF9hcGw0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDgg QVBMIDQgKElCTSkgKi8KKyAgICB0eF9hcGw1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAxMTAgQVBMIDUgKDI3NDEpICovCit9OworCisvKgorICBUYWJsZSBvZiBGQ1MtdG8tVW5pY29k ZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCisgIEtFRVAgVEhJUyBJTiBTWU5DIFdJVEggVEhFIEZD X2JsYWggREVGSU5JVElUSU9OUyBpbiBja3V4bGEuaC4KKyovCitVU0hPUlQKKyNpZmRlZiBDS19B TlNJQworKCp4bF9mY3VbTUFYRkNTRVRTKzFdKShDSEFSKQorI2Vsc2UKKygqeGxfZmN1W01BWEZD U0VUUysxXSkoKQorI2VuZGlmIC8qIENLX0FOU0lDICovCis9IHsKKyAgICBhc2NpaV91LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAgMCBVUyBJU08gNjQ2IChBU0NJSSkgKi8KKyAgICBi cml0aXNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMSBVSyBJU08gNjQ2ICovCisg ICAgZHV0Y2hfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDIgRHV0Y2ggTlJDICov CisgICAgZmlubmlzaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDMgRmlubmlzaCBO UkMgICovCisgICAgZnJlbmNoX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDQgRnJl bmNoIElTTyA2NDYgKi8KKyAgICBmcl9jYW5hZGlhbl91LCAgICAgICAgICAgICAgICAgICAgICAv KiAgNSBDYW5hZGlhbiBGcmVuY2ggTlJDICovCisgICAgZ2VybWFuX3UsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogIDYgR2VybWFuIElTTyA2NDYgKi8KKyAgICBodW5nYXJpYW5fdSwgICAg ICAgICAgICAgICAgICAgICAgICAvKiAgNyBIdW5nYXJpYW4gSVNPIDY0NiAqLworICAgIGl0YWxp YW5fdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA4IEl0YWxpYW4gSVNPIDY0NiAqLwor ICAgIGRhbmlzaF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA5IERhbmlzaC9Ob3J3 ZWdpYW4gSVNPIDY0NiAqLworICAgIHBvcnR1Z3Vlc2VfdSwgICAgICAgICAgICAgICAgICAgICAg IC8qIDEwIFBvcnR1Z3Vlc2UgSVNPIDY0NiAqLworICAgIHNwYW5pc2hfdSwgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDExIHNwYW5pc2ggSVNPIDY0NiAqLworICAgIHN3ZWRpc2hfdSwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDEyIFN3ZWRpc2ggSVNPIDY0NiAqLworICAgIHN3aXNz X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzIFN3aXNzIE5SQyAgICovCisgICAg aXNvXzg4NTlfMV91LCAgICAgICAgICAgICAgICAgICAgICAgLyogMTQgSVNPIDg4NTktMSBMYXRp bi0xICovCisgICAgaXNvXzg4NTlfMl91LCAgICAgICAgICAgICAgICAgICAgICAgLyogMTUgSVNP IDg4NTktMiBMYXRpbi0yICovCisgICAgZGVjbWNzX3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogMTYgREVDIE1DUyAqLworICAgIG5leHRzdGVwX3UsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIDE3IE5lWFQgKi8KKyAgICBjcDQzN191LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAxOCBDUDQzNyAtIE9yaWdpbmFsICovCisgICAgY3A4NTBfdSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMTkgQ1A4NTAgLSBXIEV1cm9wZSAqLworICAgIGNwODUyX3UsICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDIwIENQODUyIC0gRSBFdXJvcGUgKi8KKyAgICBxdWlj a2RyYXdfdSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMSBDUDEwMDAwIC0gQXBwbGUgUXVp Y2tkcmF3ICovCisgICAgZGdpX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjIg REdJICovCisgICAgaHByb21hbjhfdSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjMgSFAg Um9tYW4gOCAqLworICAgIGlzb184ODU5XzVfdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDI0 IElTTyA4ODU5LTUgQ3lyaWxsaWMgKi8KKyAgICBjcDg2Nl91LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAyNSBDUDg2NiAtIEN5cmlsbGljICovCisgICAga29pN191LCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogMjYgU2hvcnQgS09JICovCisgICAga29pOF91LCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMjcgS09JLTggICAgICAgKi8KKyAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyOCBKSVMtNyAqLworICAgIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI5IFNoaWZ0LUpJUyAqLworICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMwIEphcGFuZXNlIEVVQyAqLworICAgIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMxIERFQyBLYW5qaSAqLworICAg IGhlYnJldzdfdSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMyIEhlYnJldy03IChERUMp ICovCisgICAgaXNvXzg4NTlfOF91LCAgICAgICAgICAgICAgICAgICAgICAgLyogMzMgSVNPIDg4 NTktOCBIZWJyZXcgKi8KKyAgICBjcDg2Ml91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAzNCBDUDg2MiBIZWJyZXcgKi8KKyAgICBlbG90OTI3X3UsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiAzNSBHcmVlayBFTE9UIDkyNyAqLworICAgIGlzb184ODU5XzdfdSwgICAgICAgICAg ICAgICAgICAgICAgIC8qIDM2IElTTyA4ODU5LTcgR3JlZWsgKi8KKyAgICBjcDg2OV91LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAzNyBDUDg2OSBHcmVlayAqLworICAgIGlzb184ODU5 XzE1X3UsICAgICAgICAgICAgICAgICAgICAgIC8qIDM4IElTTyA4ODU5LTE1IExhdGluLTkgKi8K KyAgICBjcDg1OF91LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzOSBDUDg1OCAtIFcg RXVyb3BlIHcvRXVybyAqLworICAgIGNwODU1X3UsICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDQwIEN5cmlsbGljIFBDIENvZGUgUGFnZSA4NTYgKi8KKyAgICBjcDEyNTFfdSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiA0MSBXaW5kb3dzIEN5cmlsbGljICovCisgICAgY3A4NTZf dSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDIgQnVsZ2FyaWFuIFBDIENvZGUgUGFn ZSA4NTYgKi8KKyAgICBjcDEyNTBfdSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA0MyBX aW5kb3dzIExhdGluLTIgKi8KKyAgICBtYXpvdmlhX3UsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA0NCBNYXpvdmlhIFBDIGNvZGUgcGFnZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDQ1IFVDUy0yICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNDYgVVRGLTggKi8KKyAgICBrb2k4cl91LCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA0NyBLT0k4LVIgKi8KKyAgICBrb2k4dV91LCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA0OCBLT0k4LVUgKi8KKyAgICBjcDEyNTJfdSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiA0OSBDUDEyNTIgKi8KK307CisKKy8qCisgIFRhYmxlIG9mIFVuaWNv ZGUtdG8tRkNTIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KKyAgS0VFUCBUSElTIElOIFNZTkMgV0lU SCBUSEUgRkNfYmxhaCBERUZJTklUSVRJT05TIGluIGNrdXhsYS5oLgorKi8KK2ludAorI2lmZGVm IENLX0FOU0lDCisoKnhsX3VmY1tNQVhGQ1NFVFMrMV0pKFVTSE9SVCkKKyNlbHNlCisoKnhsX3Vm Y1tNQVhGQ1NFVFMrMV0pKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworPSB7CisgICAgdHhfdXNh c2NpaSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDAgVVMgSVNPIDY0NiAoQVNDSUkpICov CisgICAgdHhfYnJpdGlzaCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDEgVUsgSVNPIDY0 NiAqLworICAgIHR4X2R1dGNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAyIER1dGNo IE5SQyAqLworICAgIHR4X2Zpbm5pc2gsICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAzIEZp bm5pc2ggTlJDICAqLworICAgIHR4X2ZyZW5jaCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICA0IEZyZW5jaCBJU08gNjQ2ICovCisgICAgdHhfZnJfY2FuYWRpYW4sICAgICAgICAgICAgICAg ICAgICAgLyogIDUgQ2FuYWRpYW4gRnJlbmNoIE5SQyAqLworICAgIHR4X2dlcm1hbiwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qICA2IEdlcm1hbiBJU08gNjQ2ICovCisgICAgdHhfaHVuZ2Fy aWFuLCAgICAgICAgICAgICAgICAgICAgICAgLyogIDcgSHVuZ2FyaWFuIElTTyA2NDYgKi8KKyAg ICB0eF9pdGFsaWFuLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOCBJdGFsaWFuIElTTyA2 NDYgKi8KKyAgICB0eF9kYW5pc2gsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgOSBEYW5p c2gvTm9yd2VnaWFuIElTTyA2NDYgKi8KKyAgICB0eF9wb3J0dWd1ZXNlLCAgICAgICAgICAgICAg ICAgICAgICAvKiAxMCBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KKyAgICB0eF9zcGFuaXNoLCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAxMSBzcGFuaXNoIElTTyA2NDYgKi8KKyAgICB0eF9zd2Vk aXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMiBTd2VkaXNoIElTTyA2NDYgKi8KKyAg ICB0eF9zd2lzcywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMyBTd2lzcyBOUkMgICAq LworICAgIHR4X2lkZW50LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE0IElTTyA4ODU5 LTEgTGF0aW4tMSAqLworICAgIHR4Xzg4NTlfMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IDE1IElTTyA4ODU5LTIgTGF0aW4tMiAqLworICAgIHR4X2RlY21jcywgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDE2IERFQyBNQ1MgKi8KKyAgICB0eF9uZXh0c3RlcCwgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxNyBOZVhUICovCisgICAgdHhfY3A0MzcsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMTggQ1A0MzcgLSBPcmlnaW5hbCAqLworICAgIHR4X2NwODUwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDE5IENQODUwIC0gVyBFdXJvcGUgKi8KKyAgICB0eF9jcDg1 MiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyMCBDUDg1MiAtIEUgRXVyb3BlICovCisg ICAgdHhfcXVpY2tkcmF3LCAgICAgICAgICAgICAgICAgICAgICAgLyogMjEgQ1AxMDAwMCAtIEFw cGxlIFF1aWNrZHJhdyAqLworICAgIHR4X2RnaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDIyIERHSSAqLworICAgIHR4X2hwcm9tYW44LCAgICAgICAgICAgICAgICAgICAgICAgIC8q IDIzIEhQIFJvbWFuIDggKi8KKyAgICB0eF84ODU5XzUsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAyNCBJU08gODg1OS01IEN5cmlsbGljICovCisgICAgdHhfY3A4NjYsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMjUgQ1A4NjYgLSBDeXJpbGxpYyAqLworICAgIHR4X2tvaTcsICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI2IFNob3J0IEtPSSAqLworICAgIHR4X2tvaTgs ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI3IEtPSS04ICAgICAgICovCisgICAgTlVM TCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMjggSklTLTcgKi8KKyAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyOSBTaGlmdC1KSVMgKi8KKyAgICBO VUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMCBKYXBhbmVzZSBFVUMgKi8K KyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMSBERUMgS2Fuamkg Ki8KKyAgICB0eF9oZWJyZXc3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzMiBIZWJyZXct NyAoREVDKSAqLworICAgIHR4Xzg4NTlfOCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMz IElTTyA4ODU5LTggSGVicmV3ICovCisgICAgdHhfY3A4NjIsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMzQgQ1A4NjIgSGVicmV3ICovCisgICAgdHhfZWxvdDkyNywgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMzUgR3JlZWsgRUxPVCA5MjcgKi8KKyAgICB0eF84ODU5XzcsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiAzNiBJU08gODg1OS03IEdyZWVrICovCisgICAgdHhfY3A4 NjksICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzcgQ1A4NjkgR3JlZWsgKi8KKyAgICB0 eF84ODU5XzE1LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAzOCBJU08gODg1OS0xNSBMYXRp bi05ICovCisgICAgdHhfY3A4NTgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMzkgQ1A4 NTggLSBXIEV1cm9wZSB3L0V1cm8gKi8KKyAgICB0eF9jcDg1NSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiA0MCBDeXJpbGxpYyBQQyBDb2RlIFBhZ2UgODU2ICovCisgICAgdHhfY3AxMjUx LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDEgV2luZG93cyBDeXJpbGxpYyAqLworICAg IHR4X2NwODU2LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQyIEJ1bGdhcmlhbiBQQyBD b2RlIFBhZ2UgODU2ICovCisgICAgdHhfY3AxMjUwLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogNDMgV2luZG93cyBMYXRpbi0yICovCisgICAgdHhfbWF6b3ZpYSwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogNDQgTWF6b3ZpYSBQQyBjb2RlIHBhZ2UgKi8KKyAgICBOVUxMLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiA0NSBVQ1MtMiAqLworICAgIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIDQ2IFVURi04ICovCisgICAgdHhfa29pOHIsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNDcgS09JOC1SICovCisgICAgdHhfa29pOHUsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNDggS09JOC1VICovCisgICAgdHhfY3AxMjUyICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogNDkgQ1AxMjUyICovCit9OworCisvKgorICBUYWJsZSBv ZiBUQ1MtdG8tVW5pY29kZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCisgIEtFRVAgVEhJUyBJTiBT WU5DIFdJVEggVEhFIFRDX2JsYWggREVGSU5JVElPTlMgaW4gY2t1eGxhLmguCisqLworVVNIT1JU CisjaWZkZWYgQ0tfQU5TSUMKKygqeGxfdGN1W01BWFRDU0VUUysxXSkoQ0hBUikKKyNlbHNlCiso KnhsX3RjdVtNQVhUQ1NFVFMrMV0pKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworPSB7CisgICAg TlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDAgPSBUcmFuc3BhcmVudCAq LworICAgIGFzY2lpX3UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAxID0gQVNDSUkg Ki8KKyAgICBpc29fODg1OV8xX3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAgMiBJU08gODg1 OS0xIExhdGluLTEgKi8KKyAgICBpc29fODg1OV8yX3UsICAgICAgICAgICAgICAgICAgICAgICAv KiAgMyBJU08gODg1OS0yIExhdGluLTIgKi8KKyAgICBpc29fODg1OV81X3UsICAgICAgICAgICAg ICAgICAgICAgICAvKiAgNCBJU08gODg1OS01IEN5cmlsbGljICovCisgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogIDUgSmFwYW5lc2UgRVVDICovCisgICAgaXNvXzg4 NTlfOF91LCAgICAgICAgICAgICAgICAgICAgICAgLyogIDYgSVNPIDg4NTktOCBIZWJyZXcgKi8K KyAgICBpc29fODg1OV83X3UsICAgICAgICAgICAgICAgICAgICAgICAvKiAgNyBJU08gODg1OS03 IEdyZWVrICovCisgICAgaXNvXzg4NTlfMTVfdSwgICAgICAgICAgICAgICAgICAgICAgLyogIDgg SVNPIDg4NTktMTUgTGF0aW4tOSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qICA5IFVDUy0yICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogMTAgVVRGLTggKi8KK307CisKKworLyoKKyAgVGFibGUgb2YgVW5pY29kZS10by1U Q1MgdHJhbnNsYXRpb24gZnVuY3Rpb25zLgorICBLRUVQIFRISVMgSU4gU1lOQyBXSVRIIFRIRSBU Q19ibGFoIERFRklOSVRJT05TIGluIGNrdXhsYS5oLgorKi8KK2ludAorI2lmZGVmIENLX0FOU0lD CisoKnhsX3V0Y1tNQVhUQ1NFVFMrMV0pKFVTSE9SVCkKKyNlbHNlCisoKnhsX3V0Y1tNQVhUQ1NF VFMrMV0pKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworPSB7CisgICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogIDAgPSBUcmFuc3BhcmVudCAqLworICAgIHR4X3VzYXNj aWksICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAxID0gQVNDSUkgKi8KKyAgICB0eF9pZGVu dCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMiBJU08gODg1OS0xIExhdGluLTEgKi8K KyAgICB0eF84ODU5XzIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMyBJU08gODg1OS0y IExhdGluLTIgKi8KKyAgICB0eF84ODU5XzUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAg NCBJU08gODg1OS01IEN5cmlsbGljICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogIDUgSmFwYW5lc2UgRVVDICovCisgICAgdHhfODg1OV84LCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogIDYgSVNPIDg4NTktOCBIZWJyZXcgKi8KKyAgICB0eF84ODU5Xzcs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgNyBJU08gODg1OS03IEdyZWVrICovCisgICAg dHhfODg1OV8xNSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDggSVNPIDg4NTktMTUgTGF0 aW4tOSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICA5IFVD Uy0yICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAgVVRG LTggKi8KK307CisKKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGUgVVRGOCBjb252ZXJzaW9ucyBh cmUgYmFzZWQgb24gdGhlIENvbnZlcnRVVEYgZnVuY3Rpb25zIHdyaXR0ZW4KKyAgYnkgTWFyayBF LiBEYXZpcywgY29weXJpZ2h0IDE5OTQgVGFsaWdlbnQsIEluYy4KKworICBUYWJsZXMgZm9yIHVz ZSBpbiBjYWxjdWxhdGluZyBVVEY4IGNvbnZlcnNpb25zLiAgVGhlc2UgY29udGFpbgorICBzdXBw b3J0IGZvciBJU08tMTA2NDYgd2hpY2ggc3VwcG9ydHMgYSAzMS1iaXQgY2hhciBzaXplLgorCisg IE5PVEU6IDB4bm5uVUwgaXMgTk9UIHBvcnRhYmxlIQorKi8KK1VMT05HCitvZmZzZXRzRnJvbVVU RjhbN10gPSB7CisjaWZkZWYgQ0tfQU5TSUMKKyAgICAweDAwMDAwMDAwVUwsIC8qIElnbm9yZWQg Ki8KKyAgICAweDAwMDAwMDAwVUwsIDB4MDAwMDMwODBVTCwgMHgwMDBFMjA4MFVMLAorICAgIDB4 MDNDODIwODBVTCwgMHhGQTA4MjA4MFVMLCAweDgyMDgyMDgwVUwKKyNlbHNlCisgICAgMHgwMDAw MDAwMEwsIC8qIElnbm9yZWQgKi8KKyAgICAweDAwMDAwMDAwTCwgMHgwMDAwMzA4MEwsIDB4MDAw RTIwODBMLAorICAgIDB4MDNDODIwODBMLCAodW5zaWduZWQpIDB4RkEwODIwODBMLCAodW5zaWdu ZWQpIDB4ODIwODIwODBMCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK307CisKK0NIQVIgYnl0ZXNJ blVURjhbMjU2XSA9IHsKKyAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLCAxLDEs MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgICAgMSwxLDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwK KyAgICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLCAxLDEsMSwxLDEsMSwxLDEsMSwx LDEsMSwxLDEsMSwxLAorICAgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsIDEsMSwx LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEs MSwxLDEsMSwgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAyLDIsMiwyLDIs MiwyLDIsMiwyLDIsMiwyLDIsMiwyLCAyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLAor ICAgIDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsMywzLDMsIDQsNCw0LDQsNCw0LDQsNCw1LDUs NSw1LDYsNiw2LDYKK307CisjZW5kaWYgLyogQ09NTUVOVCAqLworCitDSEFSIGZpcnN0Qnl0ZU1h cmtbN10gPSB7MHgwMCwgMHgwMCwgMHhDMCwgMHhFMCwgMHhGMCwgMHhGOCwgMHhGQ307CisKKy8q CisgIHV0ZjhfdG9fdWNzMigpIHRha2VzIG9uZSBVVEYtOCBieXRlIGF0IGEgdGltZS4gIEl0IHJl dHVybnMgYSBwb2ludGVyIHRoZQorICBVQ1MtMiBjaGFyYWN0ZXIgaWYgYW5kIG9ubHkgaWYgdGhl IGVudGlyZSBVVEYtOCBzdHJpbmcgaGFzIGJlZW4gcmVjZWl2ZWQuCisgIFJldHVybiB2YWx1ZXM6 CisgICAwOiBDb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZSByZWNlaXZlZDsgdWNzMiBwb2ludHMgdG8g dmFsaWQgdWNzMiBjaGFyYWN0ZXIuCisgID4wOiBVVEYtOCBzZXF1ZW5jZSBpbmNvbXBsZXRlLCBp Z25vcmUgdWNzMiB2YWx1ZS4KKyAgPDA6IFVURi04IGVycm9yLCAweGZmZmQgc2hvdWxkIGJlIGlu c2VydGVkIEJFRk9SRSB0aGUgdWNzMiB2YWx1ZS4KKworICBOT1RFOiBBIG5lZ2F0aXZlIHZhbHVl IGlzIHJldHVybmVkIG9ubHkgd2hlbiB0d28gcmV0dXJuIHZhbHVlcyBhcmUgaW5kaWNhdGVkLAor ICBlLmcuIHdoZW4gYSBVVEYtOCBzZXF1ZW5jZSBpcyBpbnRlcnJ1cHRlZCBieSBhbiBBU0NJSSBj aGFyLiAgSW4gdGhpcyBjYXNlCisgIHRoZSBpbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlIG11c3Qg YmUgcmVwbGFjZWQgYnkgMHhmZmZkLCBhbmQgdGhlbiB0aGUgQVNDSUkKKyAgY2hhcmFjdGVyIGlz IGtlcHQgYXMtaXMuICBJbiBvdGhlciBlcnJvciBjYXNlcywgdWNzMiBpcyBzZXQgdG8gMHhmZmZk IGFuZAorICB0aGUgcmV0dXJuIHZhbHVlIGlzIDAuCisqLworI2RlZmluZSBVVEZCVUZTSVogMTYK KworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3V0ZjhfdG9fdWNzMihDSEFSIGNoLCBVU0hPUlQgKiog dWNzMikKKyNlbHNlCit1dGY4X3RvX3VjczIoY2gsIHVjczIpIENIQVIgY2g7IFVTSE9SVCAqKiB1 Y3MyOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgc3RhdGljIFVTSE9SVCB1Y3MycmV0 dXJuID0gMDsKKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBVbmljb2RlIENvbnNvcnRpdW0gc2Ft cGxlIGNvZGUgd29ya3Mgb25seSB3aXRoIHdlbGwtZm9ybWVkIFVURjggKi8KKworICAgIGludCBp ID0gMDsKKyAgICBzdGF0aWMgaW50IGxlbiA9IDA7CisgICAgc3RhdGljIENIQVIgdXRmOFtVVEZC VUZTSVpdID0geyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH07CisgICAgVUxPTkcg dWNzNCA9IDA7CisKKyAgICB1dGY4W2xlbisrXSA9IGNoOyAgICAgICAgICAgICAgICAgICAvKiBB ZGQgY2hhciB0byBzdHJpbmcgdG8gcHJvY2VzcyAqLworCisgICAgaWYgKGxlbiA8IGJ5dGVzSW5V VEY4W3V0ZjhbMF1dKSAgICAgLyogTmVlZCBtb3JlIGJ5dGVzICovCisgICAgICByZXR1cm4oYnl0 ZXNJblVURjhbdXRmOFswXV0gLSBsZW4pOworCisgICAgc3dpdGNoIChsZW4pIHsgICAgICAgICAg ICAgICAgICAgICAgLyogSGF2ZSBjb21wbGV0ZSBzZXF1ZW5jZS4uLiAqLworICAgICAgY2FzZSA2 OiB1Y3M0ICs9IHV0ZjhbaSsrXTsgdWNzNCA8PD0gNjsgLyogKGZhbGwtdGhydSBpcyBpbnRlbnRp b25hbCkgKi8KKyAgICAgIGNhc2UgNTogdWNzNCArPSB1dGY4W2krK107IHVjczQgPDw9IDY7Cisg ICAgICBjYXNlIDQ6IHVjczQgKz0gdXRmOFtpKytdOyB1Y3M0IDw8PSA2OworICAgICAgY2FzZSAz OiB1Y3M0ICs9IHV0ZjhbaSsrXTsgdWNzNCA8PD0gNjsKKyAgICAgIGNhc2UgMjogdWNzNCArPSB1 dGY4W2krK107IHVjczQgPDw9IDY7CisgICAgICBjYXNlIDE6IHVjczQgKz0gdXRmOFtpKytdOwor ICAgIH0KKyAgICB1Y3M0IC09IG9mZnNldHNGcm9tVVRGOFtsZW5dOworICAgIHVjczJyZXR1cm4g PSAoVVNIT1JUKSh1Y3M0ICYgMHhGRkZGKTsKKyNpZmRlZiBERUJVRworICAgIC8qIFRoaXMgc2hv d3MgdGhhdCBvdXIgcmV0dXJuIHZhbHVlIGlzIGluIHRoZSBwcmV2YWlsaW5nIGJ5dGUgb3JkZXI6 ICovCisgICAgLyogZS5nLiBMRSBvbiBQQywgQkUgb24gU3BhcmMuICovCisgICAgaWYgKGRlYmxv ZykgeworICAgICAgICBjaGFyIGJ1ZlsxNl07CisgICAgICAgIHVuaW9uIGNrX3Nob3J0IHh4Owor ICAgICAgICB4eC54X3Nob3J0ID0gdWNzMnJldHVybjsKKyAgICAgICAgc3ByaW50ZihidWYsIiUw NFgiLHVjczJyZXR1cm4pOworICAgICAgICBkZWJ1ZyhGMTExLCJ1dGY4X3RvX3VjczIgc2hvcnQi LGJ1Zix1Y3MycmV0dXJuKTsKKyAgICAgICAgZGVidWcoRjEwMSwidXRmOF90b191Y3MyIGNoYXJb MF0iLCIiLHh4LnhfY2hhclswXSk7CisgICAgICAgIGRlYnVnKEYxMDEsInV0ZjhfdG9fdWNzMiBj aGFyWzFdIiwiIix4eC54X2NoYXJbMV0pOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAg ICp1Y3MyID0gJnVjczJyZXR1cm47CisgICAgbGVuID0gMDsKKyAgICByZXR1cm4oMCk7CisjZWxz ZQorICAgIC8qCisgICAgICAgUm9idXN0ZXIgY29kZSBhZGFwdGVkIGZyb20gVGhvbWFzIERpY2tl eSwgWGZyZWU4NiwKKyAgICAgICByZWNvbW1lbmRlZCBieSBNYXJrdXMgS3Vobi4KKyAgICAqLwor ICAgIHN0YXRpYyBpbnQgdXRmY291bnQgPSAwOyAgICAgICAgICAgIC8qIFBvc2l0aW9uIGluIFVU RiBzZXF1ZW5jZSAqLworICAgIGludCB1dGZlcnJvciA9IDA7ICAgICAgICAgICAgICAgICAgIC8q IEZsYWcgZm9yIG1hbGZvcm1lZCBVVEYgKi8KKyAgICB1bnNpZ25lZCBjID0gY2g7ICAgICAgICAg ICAgICAgICAgICAvKiBJbnB1dCBieXRlICovCisgICAgaW50IGhhdmV1Y3MyID0gMDsKKworICAg IGlmIChjaCA8IDB4ODApIHsgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGNoYXIuLi4gKi8K KyAgICAgICAgaWYgKHV0ZmNvdW50ID4gMCkgICAgICAgICAgICAgICAvKiBOb3QgbGVnYWwgaW4g VVRGLTggc2VxdWVuY2UgKi8KKyAgICAgICAgICB1dGZlcnJvciA9IDE7ICAgICAgICAgICAgICAg ICAvKiBzbyBmbGFnICovCisgICAgICAgIGhhdmV1Y3MyID0gMTsKKyAgICAgICAgdWNzMnJldHVy biA9IGNoOyAgICAgICAgICAgICAgICAvKiBidXQgYWxzbyByZXR1cm4gaXQgKi8KKyAgICAgICAg dXRmY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiByZXNldCBVVEYtOCBjb3VudCAqLwor ICAgIH0gZWxzZSBpZiAoY2ggPCAweGMwKSB7ICAgICAgICAgICAgIC8qIDB4ODAgPD0gYyA8IDB4 YzAuLi4gKi8KKyAgICAgICAgaWYgKHV0ZmNvdW50IDwgMSkgeyAgICAgICAgICAgICAvKiBOb3Qg dmFsaWQgaW4gZmlyc3QgcG9zaXRpb24uLi4gKi8KKyAgICAgICAgICAgIHV0ZmVycm9yID0gMTsK KyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXliZSB2YWxpZCAq LworICAgICAgICAgICAgaWYgKHVjczJyZXR1cm4gPiAweDAzZmYpIHsgIC8qIFZhbHVlIHdvdWxk IGJlID4gMHhmZmZmICovCisgICAgICAgICAgICAgICAgdXRmZXJyb3IgPSAxOyAgICAgICAgICAg Lyogc28gbm90IHZhbGlkICovCisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgLyogT0suLi4gKi8KKyAgICAgICAgICAgICAgICB1Y3MycmV0dXJuIDw8PSA2OyAgICAgICAv KiBTaGlmdCByZXN1bHQgKi8KKyAgICAgICAgICAgICAgICB1Y3MycmV0dXJuIHw9IChjaCAmIDB4 M2YpOyAvKiBhbmQgT1IgaW4gdGhpcyBieXRlICovCisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoLS11dGZjb3VudCA9PSAwKQorICAgICAgICAgICAgICBoYXZldWNzMiA9IDE7CisgICAg ICAgIH0KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjID49IDB4 YzAuLi4gKi8KKyAgICAgICAgaWYgKHV0ZmNvdW50ID4gMCkKKyAgICAgICAgICB1dGZlcnJvciA9 IDE7CisgICAgICAgIGlmIChjIDwgMHhlMCkgeworICAgICAgICAgICAgdXRmY291bnQgPSAxOwor ICAgICAgICAgICAgdWNzMnJldHVybiA9IChjICYgMHgxZik7CisgICAgICAgICAgICBoYXZldWNz MiA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ZjApIHsKKyAgICAgICAgICAgIHV0ZmNv dW50ID0gMjsKKyAgICAgICAgICAgIHVjczJyZXR1cm4gPSAoYyAmIDB4MGYpOworICAgICAgICAg ICAgaGF2ZXVjczIgPSAxOworICAgICAgICB9IGVsc2UgaWYgKGMgPCAweGY4KSB7CisgICAgICAg ICAgICB1dGZjb3VudCA9IDM7CisgICAgICAgICAgICB1Y3MycmV0dXJuID0gKGMgJiAweDA3KTsK KyAgICAgICAgICAgIGhhdmV1Y3MyID0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChjIDwgMHhmYykg eworICAgICAgICAgICAgdXRmY291bnQgPSA0OworICAgICAgICAgICAgdWNzMnJldHVybiA9IChj ICYgMHgwMyk7CisgICAgICAgICAgICBoYXZldWNzMiA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAo YyA8IDB4ZmUpIHsKKyAgICAgICAgICAgIHV0ZmNvdW50ID0gNTsKKyAgICAgICAgICAgIHVjczJy ZXR1cm4gPSAoYyAmIDB4MDEpOworICAgICAgICAgICAgaGF2ZXVjczIgPSAxOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgdXRmZXJyb3IgPSAxOworICAgICAgICAgICAgdXRmY291bnQg PSAwOworICAgICAgICB9CisgICAgfQorICAgIGlmIChoYXZldWNzMiA9PSAwICYmIHV0ZmVycm9y ICE9IDApIHsKKyAgICAgICAgaGF2ZXVjczIgPSAxOworICAgICAgICB1Y3MycmV0dXJuID0gMHhm ZmZkOworICAgICAgICB1dGZlcnJvciA9IDA7CisgICAgfQorICAgIGlmIChoYXZldWNzMikgewor ICAgICAgICAqdWNzMiA9ICZ1Y3MycmV0dXJuOworICAgICAgICBpZiAodXRmZXJyb3IpCisgICAg ICAgICAgdXRmY291bnQgPSAwIC0gdXRmY291bnQ7CisgICAgICAgIHJldHVybih1dGZjb3VudCk7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHV0ZmNvdW50ID09IDApCisgICAgICAgICAgdXRm Y291bnQrKzsKKyAgICAgICAgcmV0dXJuKHV0ZmNvdW50KTsKKyAgICB9CisjZW5kaWYgLyogQ09N TUVOVCAqLworfQorCisvKgorICB1Y3MyX3RvX3V0ZjgoKSB0YWtlcyBvbmUgdWNzMiBjaGFyYWN0 ZXIgYW5kIHJldHVybnMgdGhlIGxlbmd0aCBhbmQKKyAgYW5kIGEgcG9pbnRlciB0byBhbiBhcnJh eSBjb250YWluaW5nIHRoZSBlcXVpdmFsZW50IHV0Zjggc3RyaW5nLgorICBUaGlzIGNvZGUgY2Fu IGVhc2lseSBiZSBhbHRlcmVkIHRvIHN1cHBvcnQgVUNTNCBzaW1wbHkgYnkgY2hhbmdpbmcKKyAg dGhlIGlucHV0IGZyb20gVVNIT1JUIHRvIFVMT05HLiAgUmV0dXJuczoKKyAgID4wOiBOdW1iZXIg b2YgYnl0ZXMgaW4gdGhlIHV0Zjggc3RyaW5nLgorICAgIDA6IChvciBsZXNzKSBFcnJvci4KKyov CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit1Y3MyX3RvX3V0ZjgoVVNIT1JUIHVjczIsIENIQVIg KiogdXRmOCkKKyNlbHNlCit1Y3MyX3RvX3V0ZjgodWNzMiwgdXRmOCkgVVNIT1JUIHVjczI7IENI QVIgKiogdXRmODsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHN0YXRpYyBDSEFSIHV0 ZjhyZXR1cm5bOF09ezAsMCwwLDAsMCwwLDAsMH07CisgICAgcmVnaXN0ZXIgQ09OU1QgVUxPTkcg Ynl0ZU1hc2sgPSAweEJGOworICAgIHJlZ2lzdGVyIENPTlNUIFVMT05HIGJ5dGVNYXJrID0gMHg4 MDsKKyAgICBpbnQgdXRmOGxlbiA9IDA7CisgICAgaW50IGkgPSAwOworCisgICAgaWYgKHVjczIg PCAweDgwKSB7CisgICAgICAgIHV0ZjhsZW4gPSAxOworICAgICAgICBkZWJ1ZyhGMTAxLCJ1Y3My X3RvX3V0ZjggWDEiLCIiLHV0ZjhsZW4pOworICAgIH0gZWxzZSBpZiAodWNzMiA8IDB4ODAwKSB7 CisgICAgICAgIHV0ZjhsZW4gPSAyOworICAgICAgICBkZWJ1ZyhGMTAxLCJ1Y3MyX3RvX3V0Zjgg WDIiLCIiLHV0ZjhsZW4pOworICAgIH0gZWxzZQorI2lmZGVmIERPX1VDUzQKKyAgICAgIC8qIFRo aXMgaXMgYWx3YXlzIHRydWUgZm9yIFVDUy0yIGJ1dCB3b3VsZCBiZSBuZWVkZWQgZm9yIFVDUy00 Ki8KKyAgICAgIC8qIFdoZW4gdWNzMiBpcyBVU0hPUlQgdGhpcyBnaXZlcyBjb21waWxlciB3YXJu aW5ncy4gKi8KKyAgICAgIGlmICh1Y3MyIDw9IDB4ZmZmZikKKyNlbmRpZiAvKiBET19VQ1M0ICov CisgICAgeworICAgICAgICB1dGY4bGVuID0gMzsKKyAgICAgICAgZGVidWcoRjEwMSwidWNzMl90 b191dGY4IFgzIiwiIix1dGY4bGVuKTsKKyAgICB9CisjaWZkZWYgRE9fVUNTNAorLyogVGhlIGZv bGxvd2luZyB3b3VsZCBiZSBmb3IgVUNTLTQgKi8KKyAgICBlbHNlIGlmICh1Y3MyIDwgMHgyMDAw MDApIHsKKyAgICAgICAgdXRmOGxlbiA9IDQ7CisgICAgfSBlbHNlIGlmICh1Y3MyIDwgMHg0MDAw MDAwKSB7CisgICAgICAgIHV0ZjhsZW4gPSA1OworICAgIH0gZWxzZSBpZiAodWNzMiA8PQorI2lm ZGVmIENLX0FOU0lDCisgICAgICAgICAgICAgICAweDdGRkZGRkZGVUwgICAgICAgICAgICAgLyog KGRvZXNuJ3QgcmVhbGx5IG5lZWQgdGhlICJVIikgKi8KKyNlbHNlCisgICAgICAgICAgICAgICAw eDdGRkZGRkZGTAorI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgICAgICAgICAgICApIHsgICAg ICAgICAgICAgICAgICAgICAgLyogMzEgYml0cyA9IG1heCBmb3IgVUNTNCAqLworICAgICAgICB1 dGY4bGVuID0gNjsKKyAgICB9IGVsc2UgeworICAgICAgICB1dGY4bGVuID0gMjsKKyAgICAgICAg dWNzMiA9IDB4RkZGRDsgICAgICAgICAgICAgICAgICAvKiBSZXBsYWNlbWVudCBmb3IgaW52YWxp ZCBjaGFyICovCisgICAgfQorI2VuZGlmIC8qIERPX1VDUzQgKi8KKyAgICBpID0gdXRmOGxlbjsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmRleCBpbnRvIHV0ZjhyZXR1cm4gKi8KKyAgICB1 dGY4cmV0dXJuW2ktLV0gPSAwOyAgICAgICAgICAgICAgICAvKiBOdWxsIHRlcm1pbmF0ZSB0aGUg c3RyaW5nICovCisKKyAgICBzd2l0Y2ggKHV0ZjhsZW4pIHsgICAgICAgICAgICAgICAgICAvKiBj b2RlIGZhbGxzIHRocm91Z2ggY2FzZXMhICovCisgICAgICBjYXNlIDY6IHV0ZjhyZXR1cm5baS0t XSA9ICh1Y3MyIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2s7IHVjczIgPj49IDY7CisgICAgICBjYXNl IDU6IHV0ZjhyZXR1cm5baS0tXSA9ICh1Y3MyIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2s7IHVjczIg Pj49IDY7CisgICAgICBjYXNlIDQ6IHV0ZjhyZXR1cm5baS0tXSA9ICh1Y3MyIHwgYnl0ZU1hcmsp ICYgYnl0ZU1hc2s7IHVjczIgPj49IDY7CisgICAgICBjYXNlIDM6IHV0ZjhyZXR1cm5baS0tXSA9 ICh1Y3MyIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2s7IHVjczIgPj49IDY7CisgICAgICBjYXNlIDI6 IHV0ZjhyZXR1cm5baS0tXSA9ICh1Y3MyIHwgYnl0ZU1hcmspICYgYnl0ZU1hc2s7IHVjczIgPj49 IDY7CisgICAgICBjYXNlIDE6IHV0ZjhyZXR1cm5baS0tXSA9ICB1Y3MyIHwgZmlyc3RCeXRlTWFy a1t1dGY4bGVuXTsKKyAgICB9CisgICAgZGVidWcoRjExMSwidWNzMl90b191dGY4Iix1dGY4cmV0 dXJuLHV0ZjhsZW4pOworICAgICp1dGY4ID0gdXRmOHJldHVybjsKKyAgICByZXR1cm4odXRmOGxl bik7Cit9CisKKy8qICBVVEYtOCBmdW5jdGlvbnMuLi4gICovCisKKyNpZmRlZiBDS19BTlNJQwor ZXh0ZXJuIGludCAoKnh1ZikoVVNIT1JUKTsgICAgICAgICAgICAgIC8qIFRyYW5zbGF0aW9uIGZ1 bmN0aW9uIFVDUyB0byBGQ1MgKi8KK2V4dGVybiBVU0hPUlQgKCp4ZnUpKENIQVIpOyAgICAgICAg ICAgICAvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbiBGQ1MgdG8gVUNTICovCisjZWxzZQorZXh0ZXJu IGludCAoKnh1ZikoKTsKK2V4dGVybiBVU0hPUlQgKCp4ZnUpKCk7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KKworLyogIHUgXyB0IG8gXyBiICAtLSAgVVRGLTggdG8gQnl0ZSAgKi8KKy8qCisgICAg Q29udmVydHMgZnJvbSBVVEYtOCB0byB0aGUgY3VycmVudCB0ZXJtaW5hbCBvciBmaWxlIGNoYXJh Y3RlciBzZXQuCisgICAgQ2FsbCB3aXRoOgorICAgICAgYzogYSBzaW5nbGUgYnl0ZSwgd2hpY2gg aXMgcGFydCBvZiBhIFVURi04IHN0cmVhbS4KKyAgICBSZXR1cm5zOgorICAgICAtOTogRXJyb3Is IHdpdGggc2Vjb25kIGNoYXIgdG8gZm9sbG93IChjYWxsIHVfdG9fYjIoKSB0byBnZXQgaXQpLgor ICAgICAtMjogVUNTIGxpbmUvcGFyYWdyYXBoIGVuZCAoTFMgb3IgUFMpLgorICAgICAtMTogVVRG LTggc3RyZWFtIGlzIGluY29tcGxldGUgYW5kIG1vcmUgaW5wdXQgaXMgcmVxdWlyZWQuCisgICAg ID49MDogQnl0ZSB2YWx1ZSBvZiByZXN1bHQsIHBvc3NpYmx5IHRoZSAiZXJyb3IiIGJ5dGUgKGUu Zy4gJz8nKS4KKyAgICBSZXF1aXJlczoKKyAgICAgIEdsb2JhbCAoKnh1ZikoKSB0byBwb2ludCB0 byBhIGZ1bmN0aW9uIHRoYXQgdHJhbnNsYXRlcyBmcm9tIFVDUy0yIHRvCisgICAgICB0aGUgYXBw cm9wcmlhdGUgdGVybS9maWxlIGNoYXJhY3RlciBzZXQuCisqLworc3RhdGljIGludCBzYXZlZGJ5 dGUgPSAwOworCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2Fs bCBpZiB1X3RvX2IoKSByZXR1cm5zIC05ICovCit1X3RvX2IyKCkgeworICAgIHJldHVybigodW5z aWduZWQpKHNhdmVkYnl0ZSAmIDB4ZmYpKTsKK30KKworaW50ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFVURi04IHRvIGJ5dGUgKi8KKyNpZmRlZiBDS19BTlNJQwordV90 b19iKENIQVIgYykKKyNlbHNlCit1X3RvX2IoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7CisgICAgaW50IHg7CisgICAgVVNIT1JUICogdWNzMiwgdWM7CisgICAgaWYgKCF4dWYp ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgbm8gY29udmVyc2lvbiBmdW5jdGlvbiAq LworICAgICAgcmV0dXJuKGMpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbid0IGNvbnZl cnQgKHNob3VsZG4ndCBoYXBwZW4pLiAqLworICAgIHggPSB1dGY4X3RvX3VjczIoYywmdWNzMik7 ICAgICAgICAgIC8qIFNlbmQgZm9yIGNvbnZlcnNpb24gdG8gVUNTLTIgKi8KKyAgICBpZiAoeCA+ IDApICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgZG9uZSB5ZXQuLi4gKi8KKyAgICAg IHJldHVybigtMSk7CisgICAgdWMgPSAoeCA8IDApID8gMHhmZmZkIDogKnVjczI7ICAgICAgLyog RG9uZSwgY2hlY2sgcmVzdWx0ICovCisgICAgaWYgKHVjID09IDB4MjAyOCB8fCB1YyA9PSAweDIw MjkpICAgLyogTFMgb3IgUFMgKi8KKyAgICAgIHJldHVybigtMik7CisgICAgcmV0dXJuKCh1bnNp Z25lZCkoKCgqeHVmKSh1YykpICYgMHhmZikpOyAvKiBDb252ZXJ0IFVDUy0yIHRvIGJ5dGUgKi8K K30KKworLyogIGIgXyB0IG8gXyB1ICAtLSAgQnl0ZSB0byBVVEYtOCAgKi8KKy8qCisgIENvbnZl cnRzIGEgYnl0ZSBmcm9tIHRoZSBjdXJyZW50IHRlcm1pbmFsIG9yIGZpbGUgY2hhcmFjdGVyIHNl dCB0byBVVEYtOC4KKyAgQ2FsbCB3aXRoOgorICAgIGMuLi4uLi4uLiBUaGUgYnl0ZSB0byBiZSBj b252ZXJ0ZWQuCisgICAgYnVmLi4uLi4uIFBvaW50ZXIgdG8gYnVmZmVyIGluIHdoaWNoIHRvIHBs YWNlIHRoZSByZXN1bHQuCisgICAgYnVmbGVuLi4uIExlbmd0aCBvZiB0aGUgcmVzdWx0IGJ1ZmZl ci4KKyAgICBzZXRzaXplLi4gVGhlIHNpemUgb2YgdGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0ICgx Mjggb3IgMjU2KS4KKyAgUmVxdWlyZXM6CisgICAgR2xvYmFsICgqeGZ1KSgpIHRvIHBvaW50IHRv IHRoZSBmdW5jdGlvbiB0byBjb252ZXJ0IHRoZSBieXRlIHRvIFVDUy0yLgorICBSZXR1cm5zOgor ICAgIC0xIGlmIHRoZSB4ZnUgaXMgTlVMTDsgb3RoZXJ3aXNlOgorICAgID4wIGluZGljYXRpbmcg dGhlIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBVVEYtOCBzdHJpbmcuCisgIElmIHRoZSB0cmFu c2xhdGlvbiBmYWlscywgdGhlIFVuaWNvZGUgIlJlcGxhY2VtZW50IENoYXJhY3RlciIgaXMgcmV0 dXJuZWQKKyAgKDB4RkZGRCB0cmFuc2xhdGVkIHRvIFVURi04ID09IDB4RkZCRCkuCisqLworaW50 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ5dGUgdG8gVVRGLTggKi8K KyNpZmRlZiBDS19BTlNJQworYl90b191KENIQVIgYywgQ0hBUiAqIGJ1ZiwgaW50IGJ1Zmxlbiwg aW50IHNldHNpemUpCisjZWxzZQorYl90b191KGMsIGJ1ZiwgYnVmbGVuLCBzZXRzaXplKSBDSEFS IGMsICogYnVmOyBpbnQgYnVmbGVuLCBzZXRzaXplOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 CisgICAgQ0hBUiAqIHRtcCA9IE5VTEw7CisgICAgaW50IGksIGNvdW50ID0gMDsKKyAgICBVU0hP UlQgdWM7CisgICAgaWYgKCF4ZnUpIHsKKyAgICAgICAgZGVidWcoRjEwMCwiYl90b191IG5vIHhm dSIsIiIsMCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIHVjID0gYzsKKyAgICBp ZiAoKChzZXRzaXplID4gMTI4KSAmJiAoYyAmIDB4ODApKSB8fCBzZXRzaXplIDw9IDEyOCkgewor ICAgICAgICBpZiAoeGZ1KSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZDUy10by1VQ1MgZnVu Y3Rpb24gKi8KKyAgICAgICAgICB1YyA9ICgqeGZ1KShjKTsKKyAgICB9CisgICAgY291bnQgPSB1 Y3MyX3RvX3V0ZjgodWMsJnRtcCk7CisgICAgaWYgKGNvdW50IDwgMCkgeworICAgICAgICBidWZb MF0gPSAweGVmOyAgICAgICAgICAgICAgICAgIC8qID09IDB4RkZGRCBpbiBVVEYtOCAqLworICAg ICAgICBidWZbMV0gPSAweGJmOworICAgICAgICBidWZbMl0gPSAweGJkOworICAgICAgICBidWZb M10gPSAnXDAnOworICAgICAgICByZXR1cm4oMik7CisgICAgfQorICAgIGlmIChjb3VudCA+PSBi dWZsZW4pIHsKKyAgICAgICAgZGVidWcoRjEwMSwiV0FSTklORzogVVRGOCBidWZmZXIgb3ZlcmZs b3ciLCIiLGNvdW50KTsKKyAgICAgICAgY291bnQgPSBidWZsZW4gLSAxOworICAgIH0KKyAgICBm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgICAgICAgICAvKiBDb3B5IHRvIHJlc3VsdCBidWZm ZXIgKi8KKyAgICAgIGJ1ZltpXSA9IHRtcFtpXTsKKyAgICBidWZbaV0gPSAnXDAnOworICAgIHJl dHVybihjb3VudCk7Cit9CisKKyNpZm5kZWYgT1MyCitpbnQKK2lzdW5pY29kZSggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUZWxscyB3aGV0aGVyIHRoZSBob3N0IHdlIGFyZSAqLwor I2lmZGVmIENLX0FOU0lDICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJ1bm5pbmcgb24gc3Vw cG9ydHMgVW5pY29kZSAqLworICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGRpc3BsYXkgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgICAgICAgICkgeworI2lm ZGVmIE5UCisgICAgZXh0ZXJuIGludCB0dF91bmljb2RlOworI2lmZGVmIEtVSQorICAgIHJldHVy bih0dF91bmljb2RlKTsKKyNlbHNlIC8qIEtVSSAqLworICAgIGlmICh0dF91bmljb2RlICYmICFp c1dpbjk1KCkpCisgICAgICByZXR1cm4oMSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKDApOwor I2VuZGlmIC8qIEtVSSAqLworI2Vsc2UgLyogTlQgKi8KKyAgICByZXR1cm4oMCk7CisjZW5kaWYg LyogTlQgKi8KK30KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCgpkaWZm IC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N1bmkuaCBi L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5pLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkZmY5YgotLS0gL2Rldi9udWxsCisrKyBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjdW5pLmgKQEAgLTAsMCArMSwy NjggQEAKKy8qICBDIEsgQyBVIE4gSSAuIEggIC0tICBVbmljb2RlL1Rlcm1pbmFsIGNoYXJhY3Rl ci1zZXQgdHJhbnNsYXRpb25zICAqLworCisvKgorICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDks CisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcg WW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5H LlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1 bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorCisgIEF1dGhvcnM6CisgICAgRnJh bmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4KKyAgICAgIFRoZSBLZXJtaXQgUHJvamVjdCwg Q29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eS4KKyAgICBKZWZmcmV5IEUgQWx0bWFu IDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBvaW50cyBJ bmMuLCBOZXcgWW9yayBDaXR5CisKKyovCisKKy8qIFRlcm1pbmFsIGNoYXJhY3RlciBzZXRzICov CisKKyNpZm5kZWYgQ0tPVU5JX0gKKyNkZWZpbmUgQ0tPVU5JX0gKKyNpZmRlZiBPUzIKKyNpZm5k ZWYgQ0tPVU5JCisjZGVmaW5lIENLT1VOSSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNl IFVOSUNPREUgZm9yIE9TLzIgZnVuY3Rpb25zICovCisjZW5kaWYgLyogQ0tPVU5JICovCisjaWZk ZWYgS1VJCisjZGVmaW5lIFhfQ0tPVU5JX0lOICAgICAgICAgICAgICAgICAgICAgLyogVXNlIFVu aWNvZGUgSW5wdXQgKi8KKyNkZWZpbmUgQ0tPVU5JX09VVAorI2VuZGlmIC8qIEtVSSAqLworI2Vu ZGlmIC8qIE9TMiAqLworCisvKiBUZXJtaW5hbCBDaGFyYWN0ZXIgU2V0cyAqLworCisjZGVmaW5l IFRYX0FTQ0lJICAgICAgICAwICAgICAgICAgICAgICAgLyogVVMgQVNDSUkgKi8KKyNkZWZpbmUg VFhfQlJJVElTSCAgICAgIDEgICAgICAgICAgICAgICAvKiBCcml0aXNoIElTTyA2NDYgKi8KKyNk ZWZpbmUgVFhfQ05fRlJFTkNIICAgIDIgICAgICAgICAgICAgICAvKiBDYW5hZGlhbiBGcmVuY2gg TlJDICovCisjZGVmaW5lIFRYX0NVQkFOICAgICAgICAzICAgICAgICAgICAgICAgLyogQ3ViYSAq LworI2RlZmluZSBUWF9DWkVDSCAgICAgICAgNCAgICAgICAgICAgICAgIC8qIEN6ZWNoIFJlcHVi bGljICovCisjZGVmaW5lIFRYX0RBTklTSCAgICAgICA1ICAgICAgICAgICAgICAgLyogRGVubWFy ayAvIE5vcndheSBJU08gNjQ2ICovCisjZGVmaW5lIFRYX0RVVENIICAgICAgICA2ICAgICAgICAg ICAgICAgLyogRHV0Y2ggTlJDICovCisjZGVmaW5lIFRYX0ZJTk5JU0ggICAgICA3ICAgICAgICAg ICAgICAgLyogRmlubmlzaCBOUkMgKi8KKyNkZWZpbmUgVFhfRlJFTkNIICAgICAgIDggICAgICAg ICAgICAgICAvKiBGcmVuY2ggSVNPIDY0NiAqLworI2RlZmluZSBUWF9HRVJNQU4gICAgICAgOSAg ICAgICAgICAgICAgIC8qIEdlcm1hbiBJU08gNjQ2ICovCisjZGVmaW5lIFRYX0hFNyAgICAgICAg IDEwICAgICAgICAgICAgICAgLyogSGVicmV3IDcgKERFQykgKi8KKyNkZWZpbmUgVFhfSFVOR0FS SUFOICAgMTEgICAgICAgICAgICAgICAvKiBIdW5nYXJpYW4gSVNPIDY0NiAqLworI2RlZmluZSBU WF9JQ0VMQU5ESUMgICAxMiAgICAgICAgICAgICAgIC8qIEljZWxhbmRpYyBOUkMgKi8KKyNkZWZp bmUgVFhfSVRBTElBTiAgICAgMTMgICAgICAgICAgICAgICAvKiBJdGFsaWFuIElTTyA2NDYgKi8K KyNkZWZpbmUgVFhfSjIwMVIgICAgICAgMTQgICAgICAgICAgICAgICAvKiBKSVMgMDIwMSBKYXBh bmVzZSBSb21hbiAqLworI2RlZmluZSBUWF9KMjAxSyAgICAgICAxNSAgICAgICAgICAgICAgIC8q IEpJUyAwMjAxIEthdGFrYW5hICovCisjZGVmaW5lIFRYX0tPSTcgICAgICAgIDE2ICAgICAgICAg ICAgICAgLyogU2hvcnQgS09JICovCisjZGVmaW5lIFRYX05PUldFR0lBTiAgIDE3ICAgICAgICAg ICAgICAgLyogRGVubWFyayAvIE5vcndheSBJU08gNjQ2ICovCisjZGVmaW5lIFRYX1BPUlRVR1VF U0UgIDE4ICAgICAgICAgICAgICAgLyogUG9ydHVndWVzZSBJU08gNjQ2ICovCisjZGVmaW5lIFRY X1NQQU5JU0ggICAgIDE5ICAgICAgICAgICAgICAgLyogU3BhbmlzaCBJU08gNjQ2ICovCisjZGVm aW5lIFRYX1NXRURJU0ggICAgIDIwICAgICAgICAgICAgICAgLyogU3dlZGlzaCBJU08gNjQ2ICov CisjZGVmaW5lIFRYX1NXRV8yICAgICAgIDIxICAgICAgICAgICAgICAgLyogU3dlZGlzaCBmb3Ig bmFtZXMgSVNPIDY0NiAqLworI2RlZmluZSBUWF9TV0lTUyAgICAgICAyMiAgICAgICAgICAgICAg IC8qIFN3aXNzIE5SQyAqLworI2RlZmluZSBUWF84ODU5XzEgICAgICAyMyAgICAgICAgICAgICAg IC8qIExhdGluLTEgKi8KKyNkZWZpbmUgVFhfODg1OV8yICAgICAgMjQgICAgICAgICAgICAgICAv KiBMYXRpbi0yICovCisjZGVmaW5lIFRYXzg4NTlfMyAgICAgIDI1ICAgICAgICAgICAgICAgLyog TGF0aW4tMyAqLworI2RlZmluZSBUWF84ODU5XzQgICAgICAyNiAgICAgICAgICAgICAgIC8qIExh dGluLTQgKi8KKyNkZWZpbmUgVFhfODg1OV81ICAgICAgMjcgICAgICAgICAgICAgICAvKiBMYXRp bi9DeXJpbGxpYyAqLworI2RlZmluZSBUWF84ODU5XzYgICAgICAyOCAgICAgICAgICAgICAgIC8q IExhdGluL0FyYWJpYyAqLworI2RlZmluZSBUWF84ODU5XzcgICAgICAyOSAgICAgICAgICAgICAg IC8qIExhdGluL0dyZWVrICovCisjZGVmaW5lIFRYXzg4NTlfOCAgICAgIDMwICAgICAgICAgICAg ICAgLyogTGF0aW4vSGVicmV3ICovCisjZGVmaW5lIFRYXzg4NTlfOSAgICAgIDMxICAgICAgICAg ICAgICAgLyogTGF0aW4tNSAqLworI2RlZmluZSBUWF84ODU5XzEwICAgICAzMiAgICAgICAgICAg ICAgIC8qIExhdGluLTYgKi8KKworI2RlZmluZSBUWF9LT0k4ICAgICAgICAzMyAgICAgICAgICAg ICAgIC8qIEdPU1QgMTk3NjgtNzQgS09JLTggKi8KKworI2RlZmluZSBUWF9KSVM3ICAgICAgICAz NCAgICAgICAgICAgICAgIC8qIEpJUy03ICovCisjZGVmaW5lIFRYX1NISklTICAgICAgIDM1ICAg ICAgICAgICAgICAgLyogU2hpZnQgSklTICovCisjZGVmaW5lIFRYX0pFVUMgICAgICAgIDM2ICAg ICAgICAgICAgICAgLyogSmFwYW5lc2UgRVVDICovCisjZGVmaW5lIFRYX0pERUMgICAgICAgIDM3 ICAgICAgICAgICAgICAgLyogSmFwYW5lc2UgREVDIEthbmppICovCisKKyNkZWZpbmUgVFhfREVD TUNTICAgICAgMzggICAgICAgICAgICAgICAvKiBERUMgTUNTICovCisjZGVmaW5lIFRYX05FWFQg ICAgICAgIDM5ICAgICAgICAgICAgICAgLyogTmVYVCAqLworI2RlZmluZSBUWF9ER0kgICAgICAg ICA0MCAgICAgICAgICAgICAgIC8qIERhdGEgR2VuZXJhbCBJbnRlcm5hdGlvbmFsICovCisjZGVm aW5lIFRYX01BQ0wxICAgICAgIDQxICAgICAgICAgICAgICAgLyogTWFjaW50b3NoIExhdGluLTEg Ki8KKyNkZWZpbmUgVFhfSFBSOCAgICAgICAgNDIgICAgICAgICAgICAgICAvKiBIUCBSb21hbiA4 ICovCisKKy8qIENvZGUgcGFnZXMgKi8KKworI2RlZmluZSBUWF9DUDQzNyAgICAgICA0MyAgICAg ICAgICAgICAgIC8qIE9yaWdpbmFsICovCisjZGVmaW5lIFRYX0NQODUwICAgICAgIDQ0ICAgICAg ICAgICAgICAgLyogTXVsdGluYXRpb25hbCAoV2VzdGVybiBFdXJvcGUpICovCisjZGVmaW5lIFRY X0NQODUyICAgICAgIDQ1ICAgICAgICAgICAgICAgLyogRWFzdGVybiBFdXJvcGUgKi8KKyNkZWZp bmUgVFhfQ1A4NTcgICAgICAgNDYgICAgICAgICAgICAgICAvKiBUdXJrZXkgKi8KKyNkZWZpbmUg VFhfQ1A4NjIgICAgICAgNDcgICAgICAgICAgICAgICAvKiBIZWJyZXcgKi8KKyNkZWZpbmUgVFhf Q1A4NjQgICAgICAgNDggICAgICAgICAgICAgICAvKiBBcmFiaWMgKi8KKyNkZWZpbmUgVFhfQ1A4 NjYgICAgICAgNDkgICAgICAgICAgICAgICAvKiBDeXJpbGxpYyAqLworI2RlZmluZSBUWF9DUDg2 OSAgICAgICA1MCAgICAgICAgICAgICAgIC8qIEdyZWVrICovCisKKyNkZWZpbmUgVFhfREVDU1BF QyAgICAgNTEgICAgICAgICAgICAgICAvKiBERUMgU3BlY2lhbCBHcmFwaGljcyAqLworI2RlZmlu ZSBUWF9ERUNURUNIICAgICA1MiAgICAgICAgICAgICAgIC8qIERFQyBUZWNobmljYWwgKi8KKyNk ZWZpbmUgVFhfQzBQSUNUICAgICAgNTMgICAgICAgICAgICAgICAvKiBDMCBEaXNwbGF5IENvbnRy b2xzICovCisjZGVmaW5lIFRYX0MxUElDVCAgICAgIDU0ICAgICAgICAgICAgICAgLyogQzEgRGlz cGxheSBDb250cm9scyAqLworI2RlZmluZSBUWF9JQk1DMEdSUEggICA1NSAgICAgICAgICAgICAg IC8qIElCTSBDMCBHcmFwaGljcyAoc21pbGV5cykgKi8KKyNkZWZpbmUgVFhfSDE5R1JBUEggICAg NTYgICAgICAgICAgICAgICAvKiBIZWF0aC9aZW5pdGggMTkgR3JhcGhpY3MgKi8KKyNkZWZpbmUg VFhfVFZJR1JBUEggICAgNTcgICAgICAgICAgICAgICAvKiBUZWxldmlkZW8gR3JhcGhpY3MgKi8K KyNkZWZpbmUgVFhfV1lTRTYwR19OICAgNTggICAgICAgICAgICAgICAvKiBXeXNlIDYwIE5hdGl2 ZSBNb2RlIEdyYXBoaWNzICovCisjZGVmaW5lIFRYX1dZU0U2MEdfMSAgIDU5ICAgICAgICAgICAg ICAgLyogV3lzZSA2MCBHcmFwaGljcyAxICovCisjZGVmaW5lIFRYX1dZU0U2MEdfMiAgIDYwICAg ICAgICAgICAgICAgLyogV3lzZSA2MCBHcmFwaGljcyAyICovCisjZGVmaW5lIFRYX1dZU0U2MEdf MyAgIDYxICAgICAgICAgICAgICAgLyogV3lzZSA2MCBHcmFwaGljcyAzICovCisKKy8qIE5ldyBv bmVzIHRoYXQgY2FtZSB0b28gbGF0ZSBmb3IgdGhlIG5pY2UgZ3JvdXBpbmcuLi4gKi8KKworI2Rl ZmluZSBUWF9FTE9UOTI3ICAgICA2MiAgICAgICAgICAgICAgIC8qIEdyZWVrIEVMT1QgOTI3ICov CisjZGVmaW5lIFRYX0RHUENHUlBIICAgIDYzICAgICAgICAgICAgICAgLyogREcgUEMgR3JhcGhp Y3MgKi8KKyNkZWZpbmUgVFhfREdMREdSUEggICAgNjQgICAgICAgICAgICAgICAvKiBERyBMaW5l IERyYXdpbmcgR3JhcGhpY3MgKi8KKyNkZWZpbmUgVFhfREdXUEdSUEggICAgNjUgICAgICAgICAg ICAgICAvKiBERyBXb3JkIFByb2Nlc3NpbmcgKGV0YykgR3JhcGhpY3MgKi8KKyNkZWZpbmUgVFhf SFBMSU5FICAgICAgNjYgICAgICAgICAgICAgICAvKiBIUCBMaW5lIERyYXdpbmcgKi8KKyNkZWZp bmUgVFhfSFBNQVRIICAgICAgNjcgICAgICAgICAgICAgICAvKiBIUCBNYXRoL1RlY2huaWNhbCAq LworI2RlZmluZSBUWF9RTlhHUlBIICAgICA2OCAgICAgICAgICAgICAgIC8qIFFOWCBHcmFwaGlj cyAqLworCisvKiBTaWVtZW5zIE5peGRvcmYgY2hhcmFjdGVyIHNldHMgKi8KKworI2RlZmluZSBU WF9TTklCUkFDSyAgICA2OSAgICAgICAgICAgICAgIC8qIFNOSSA5NzgwMSBCcmFja2V0cyAqLwor I2RlZmluZSBUWF9TTklFVVJPICAgICA3MCAgICAgICAgICAgICAgIC8qIFNOSSA5NzgwMSBFdXJv ICAqLworI2RlZmluZSBUWF9TTklGQUNFVCAgICA3MSAgICAgICAgICAgICAgIC8qIFNOSSA5Nzgw MSBGYWNldCAqLworI2RlZmluZSBUWF9TTklJQk0gICAgICA3MiAgICAgICAgICAgICAgIC8qIFNO SSA5NzgwMSAiSUJNIiAqLworI2RlZmluZSBUWF9TTklCTEFOSyAgICA3MyAgICAgICAgICAgICAg IC8qIFNOSSA5NzgwMSBCbGFua3MgKi8KKworLyogV2luZG93cyBDb2RlIHBhZ2VzICovCisKKyNk ZWZpbmUgVFhfQ1AxMjUyICAgICAgNzQgICAgICAgICAgICAgICAvKiBMYXRpbi0xIFdpbmRvd3Mg Ki8KKyNkZWZpbmUgVFhfQ1AxMjUwICAgICAgNzUgICAgICAgICAgICAgICAvKiBMYXRpbi0yIFdp bmRvd3MgKi8KKyNkZWZpbmUgVFhfQ1AxMjUxICAgICAgNzYgICAgICAgICAgICAgICAvKiBDeXJp bGxpYyBXaW5kb3dzICovCisjZGVmaW5lIFRYX0NQMTI1MyAgICAgIDc3ICAgICAgICAgICAgICAg LyogR3JlZWNlIFdpbmRvd3MgKi8KKyNkZWZpbmUgVFhfQ1AxMjU0ICAgICAgNzggICAgICAgICAg ICAgICAvKiBUdXJrZXkgV2luZG93cyAqLworI2RlZmluZSBUWF9DUDEyNTcgICAgICA3OSAgICAg ICAgICAgICAgIC8qIExhdGluLTQgV2luZG93cyAqLworCisjZGVmaW5lIFRYX0NQODU2ICAgICAg IDgwICAgICAgICAgICAgICAgLyogQnVsZ2FyaWEgQ1A4NTYgKERBVEVDUyBMdGQpICovCisjZGVm aW5lIFRYX0NQODU1ICAgICAgIDgxCisjZGVmaW5lIFRYX0NQODE5ICAgICAgIDgyICAgICAgICAg ICAgICAgLyogU2FtZSBhcyBJU08gODg1OS0xICovCisjZGVmaW5lIFRYX0NQOTEyICAgICAgIDgz ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS0yICovCisjZGVmaW5lIFRYX0NQOTEz ICAgICAgIDg0ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS0zICovCisjZGVmaW5l IFRYX0NQOTE0ICAgICAgIDg1ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS00ICov CisjZGVmaW5lIFRYX0NQOTE1ICAgICAgIDg2ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08g ODg1OS01ICovCisjZGVmaW5lIFRYX0NQMTA4OSAgICAgIDg3ICAgICAgICAgICAgICAgLyogU2Ft ZSBhcyBJU08gODg1OS02ICovCisjZGVmaW5lIFRYX0NQODEzICAgICAgIDg4ICAgICAgICAgICAg ICAgLyogU2FtZSBhcyBJU08gODg1OS03ICovCisjZGVmaW5lIFRYX0NQOTE2ICAgICAgIDg5ICAg ICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS04ICovCisjZGVmaW5lIFRYX0NQOTIwICAg ICAgIDkwICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS05ICovCisjZGVmaW5lIFRY X0NQMTA1MSAgICAgIDkxICAgICAgICAgICAgICAgLyogU2FtZSBhcyBIUCBSb21hbiA4ICovCisj ZGVmaW5lIFRYX0NQODU4ICAgICAgIDkyICAgICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbCAo Vy4gRXVyb3BlKSB3L0V1cm8gKi8KKyNkZWZpbmUgVFhfODg1OV8xNSAgICAgOTMgICAgICAgICAg ICAgICAvKiBMYXRpbi05ICovCisjZGVmaW5lIFRYX0NQOTIzICAgICAgIDk0ICAgICAgICAgICAg ICAgLyogU2FtZSBhcyBJU08gODg1OS0xNSAqLworCisjZGVmaW5lIFRYX0VMT1Q5MjggICAgIDk1 ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBJU08gODg1OS03ICovCisjZGVmaW5lIFRYX0NQMTAw MDAgICAgIDk2ICAgICAgICAgICAgICAgLyogU2FtZSBhcyBvcmlnaW5hbCBBcHBsZSBRdWlja2Ry YXcgKi8KKyNkZWZpbmUgVFhfQ1AzNyAgICAgICAgOTcgICAgICAgICAgICAgICAvKiBFQkNESUMg Ki8KKyNkZWZpbmUgVFhfQ1AxMjU1ICAgICAgOTggICAgICAgICAgICAgICAvKiBJc3JhZWwgV2lu ZG93cyAqLworI2RlZmluZSBUWF9DUDEyNTYgICAgICA5OSAgICAgICAgICAgICAgIC8qIEFyYWJp YyBXaW5kb3dzICovCisjZGVmaW5lIFRYX0NQMTI1OCAgICAgMTAwICAgICAgICAgICAgICAgLyog VmlldCBOYW0gV2luZG93cyAqLworI2RlZmluZSBUWF9NQVpPVklBICAgIDEwMQorI2RlZmluZSBU WF9UUkFOU1AgICAgIDEwMiAgICAgICAgICAgICAgIC8qIFRyYW5zcGFyZW50IC0gbm8gdHJhbnNs YXRpb24gKi8KKyNkZWZpbmUgVFhfSFoxNTAwICAgICAxMDMgICAgICAgICAgICAgICAvKiBIYXpl bHRpbmUgMTUwMCBncmFwaGljcyBzZXQgKi8KKyNkZWZpbmUgVFhfS09JOFIgICAgICAxMDQgICAg ICAgICAgICAgICAvKiBLT0k4UiAtIFJ1c3NpYW4gKi8KKyNkZWZpbmUgVFhfS09JOFUgICAgICAx MDUgICAgICAgICAgICAgICAvKiBLT0k4VSAtIFVrcmFpbmlhbiAqLworI2RlZmluZSBUWF9BUEwx ICAgICAgIDEwNiAgICAgICAgICAgICAgIC8qIEFQTCBJU08gSVIgNjggKi8KKyNkZWZpbmUgVFhf QVBMMiAgICAgICAxMDcgICAgICAgICAgICAgICAvKiBEeWFkaWMgU3lzdGVtcyBJbmMgQVBMICov CisjZGVmaW5lIFRYX0FQTDMgICAgICAgMTA4ICAgICAgICAgICAgICAgLyogQVBMLVBsdXMgKEFQ TC0yMDAwKSAqLworI2RlZmluZSBUWF9BUEw0ICAgICAgIDEwOSAgICAgICAgICAgICAgIC8qIElC TSBBUEwvMiAqLworI2RlZmluZSBUWF9BUEw1ICAgICAgIDExMCAgICAgICAgICAgICAgIC8qIEFQ TC0yNzQxICovCisKKyNkZWZpbmUgTUFYVFhTRVRTICAgICAxMTEgICAgICAgICAgICAgICAvKiBO dW1iZXIgb2YgdGVybWluYWwgY2hhcmFjdGVyIHNldHMgKi8KKworLyogVGhlIGZvbGxvd2luZyBh cmUgbm90IGltcGxlbWVudGVkIHlldCAqLworLyogVVRGLTggaXMgc3VwcG9ydGVkIGFzIGEgc3Bl Y2lhbCBtb2RlIGluIEtlcm1pdCA5NSAoc2VlIHV0ZjggZmxhZykgKi8KKworI2RlZmluZSBUWF9V VEY3ICAgICAgIDEyOAorI2RlZmluZSBUWF9VVEY4ICAgICAgIDEyOQorCisjZGVmaW5lIFRYX0hF WEJZVEVTICAgMjQyICAgICAgICAgICAgICAgLyogSGV4IGJ5dGVzICovCisjZGVmaW5lIFRYX0RF QlVHICAgICAgMjQzICAgICAgICAgICAgICAgLyogRGVidWdnaW5nIGJ1dCBub3QgaGV4IGJ5dGVz ICovCisKKy8qIFRoZXNlIGFyZSBhY3R1YWxseSB1c2VkICovCisKKyNkZWZpbmUgVFhfVU5ERUYg ICAgICAyNTUgICAgICAgICAgICAgICAvKiBVbmtub3duIGNoYXJhY3Rlci1zZXQgKi8KKworLyog RmxhZyBiaXQgdmFsdWVzICovCisKKyNkZWZpbmUgWDJVX1NURCAgIDEgICAgICAgICAgICAgICAg ICAgICAvKiBIYXMgc3RhbmRhcmQgSVNPIDQ4NzMgbGF5b3V0ICovCisjZGVmaW5lIFgyVV9JU08g ICAyICAgICAgICAgICAgICAgICAgICAgLyogSVNPIHN0YW5kYXJkIGNoYXJhY3RlciBzZXQgKi8K KyNkZWZpbmUgWDJVX0pJUyAgIDQgICAgICAgICAgICAgICAgICAgICAvKiBKYXBhbiBJbmR1c3Ry aWFsIFN0YW5kYXJkICovCisjZGVmaW5lIFgyVV9DUCAgICA4ICAgICAgICAgICAgICAgICAgICAg LyogUEMgQ29kZSBQYWdlICovCisjZGVmaW5lIFgyVV9ERUMgIDE2ICAgICAgICAgICAgICAgICAg ICAgLyogREVDIFByaXZhdGUgY2hhcmFjdGVyIHNldCAqLworI2RlZmluZSBYMlVfQ1hHICAzMiAg ICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgY29kZXMgdXNlZCBmb3IgZ3JhcGhpY3MgKi8K Kworc3RydWN0IHhfdG9fdW5pY29kZSB7CisgICAgaW50IHNpemU7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogOTQsIDk2LCAxMjgsIG9yIG90aGVyICovCisgICAgaW50IG9mZnNldDsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogMCwgMzIsIDMzLCAxMjgsIDE2MCwgLi4uICovCisgICAg aW50IGZsYWdzOworICAgIGludCBmYW1pbHk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExh bmd1YWdlIGZhbWlseSwgd3JpdGluZyBzeXN0ZW0gKi8KKyAgICBjaGFyICoga2V5d2Q7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIG5hbWUgKi8KKyAgICBjaGFyICogbmFtZTsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEZXNjcmlwdGl2ZSBuYW1lICovCisgICAgaW50IGNvZGU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIHJlZyBudW1iZXIgaWYgU3RhbmRhcmQg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDUCBudW1iZXIg aWYgQ29kZS1wYWdlLCBldGMuICovCisgICAgY2hhciAqIGZpbmFsOyAgICAgICAgICAgICAgICAg ICAgICAgLyogRXNjIHNlcSBmaW5hbCBjaGFyKHMpIChJU08sIERFQykgKi8KKyAgICB1bnNpZ25l ZCBzaG9ydCBtYXBbMjU2XTsgICAgICAgICAgICAvKiBNYXBwaW5nIHRhYmxlICovCit9OworCitl eHRlcm4gc3RydWN0IGtleXRhYiB0eHJ0YWJbXTsKK2V4dGVybiBpbnQgbnR4cnRhYjsKKworI2lm bmRlZiBOVUxMCisjZGVmaW5lIE5VTEwgKGNoYXIgKikwCisjZW5kaWYgLyogTlVMTCAqLworCisj aWZuZGVmIFVTSE9SVAorI2RlZmluZSBVU0hPUlQgdW5zaWduZWQgc2hvcnQKKyNlbmRpZiAvKiBV U0hPUlQgKi8KKworI2lmbmRlZiBVTE9ORworI2RlZmluZSBVTE9ORyB1bnNpZ25lZCBsb25nCisj ZW5kaWYgLyogVUxPTkcgKi8KKworI2lmbmRlZiBDSEFSCisjZGVmaW5lIENIQVIgdW5zaWduZWQg Y2hhcgorI2VuZGlmIC8qIENIQVIgKi8KKworI2lmZGVmIENLX0FOU0lDCitleHRlcm4gVVNIT1JU ICgqeGxfdVtNQVhUWFNFVFMrMV0pKENIQVIpOyAvKiBCbGFoLXRvLVVuaWNvZGUgZnVuY3Rpb25z ICovCitleHRlcm4gaW50ICgqeGxfdHhbTUFYVFhTRVRTKzFdKShVU0hPUlQpOyAvKiBVbmljb2Rl LXRvLUJsYWggZnVuY3Rpb25zICovCisjZWxzZQorZXh0ZXJuIFVTSE9SVCAoKnhsX3VbTUFYVFhT RVRTKzFdKSgpOworZXh0ZXJuIGludCAoKnhsX3R4W01BWFRYU0VUUysxXSkoKTsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworZXh0ZXJuIHN0cnVjdCB4X3RvX3VuaWNvZGUgKiB0eHJpbmZvW01BWFRY U0VUUysxXTsKKworX1BST1RPVFlQKGludCBpc3VuaWNvZGUsICh2b2lkKSk7CitfUFJPVE9UWVAo aW50IHV0ZjhfdG9fdWNzMiwgKENIQVIsIFVTSE9SVCAqKikpOworX1BST1RPVFlQKGludCB1Y3My X3RvX3V0ZjgsIChVU0hPUlQsIENIQVIgKiopKTsKK19QUk9UT1RZUChpbnQgdHhfY3BzdWIsIChV U0hPUlQpKTsKK19QUk9UT1RZUChpbnQgdV90b19iLCAoQ0hBUikgKTsKK19QUk9UT1RZUChpbnQg dV90b19iMiwgKHZvaWQpICk7CitfUFJPVE9UWVAoaW50IGJfdG9fdSwgKENIQVIsIENIQVIgKiwg aW50LCBpbnQpICk7CisKKyNpZmRlZiBLQU5KSQorX1BST1RPVFlQKFVTSE9SVCBzal90b191biwg KFVTSE9SVCkgKTsgIC8qIFNoaWZ0LUpJUyB0byBVbmljb2RlICovCitfUFJPVE9UWVAoVVNIT1JU IHVuX3RvX3NqLCAoVVNIT1JUKSApOyAgLyogVW5pY29kZSB0byBTaGlmdC1KSVMgKi8KKyNlbmRp ZiAvKiBLQU5KSSAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKK19pbmxpbmUKKyNlbHNlCitf SW5saW5lCisjZW5kaWYgLyogTlQgKi8KK2ludAoraXN1bmljb2RlKAorI2lmZGVmIENLX0FOU0lD CisgICAgICAgICAgdm9pZAorI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgICAgICAgKSB7Cisg ICAgZXh0ZXJuIGludCB0dF91bmljb2RlOworI2lmZGVmIE5UCisjaWZkZWYgS1VJCisgICAgcmV0 dXJuKHR0X3VuaWNvZGUpOworI2Vsc2UgLyogS1VJICovCisgICAgaWYgKHR0X3VuaWNvZGUgJiYg IWlzV2luOTUoKSkKKyAgICAgIHJldHVybigxKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oMCk7 CisjZW5kaWYgLyogS1VJICovCisjZWxzZSAvKiBOVCAqLworICAgIHJldHVybigwKTsKKyNlbmRp ZiAvKiBOVCAqLworfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLT1VOSV9IICovCgpk aWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2N4bGEu aCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjeGxhLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwM2M4MQotLS0gL2Rldi9udWxsCisrKyBi L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2tjeGxhLmgKQEAgLTAsMCAr MSwzMzcgQEAKKy8qCisgIEZpbGUgQ0tDWExBLkgKKworICBTeXN0ZW0taW5kZXBlbmRlbnQgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbiBoZWFkZXIgZmlsZSBmb3IgQy1LZXJtaXQuCisqLworCisv KgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICBUaGUgS2Vy bWl0IFByb2plY3QgLSBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5LgorCisgIENv cHlyaWdodCAoQykgMTk4NSwgMjAwOSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJz aXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBT ZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRl eHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMu CisqLworLyoKKyAgTk9URToKKyAgSVNPIDIwNCBpcyBMYXRpbi0xICsgRXVyby4KKyAgSVNPIDIw NSBpcyBMYXRpbi00ICsgRXVyby4KKyAgSVNPIDIwNiBpcyBMYXRpbi03ICsgRXVyby4KKyovCisj aWZuZGVmIENLQ1hMQV9IICAgICAgICAgICAgICAgICAgICAgICAgLyogR3VhcmQgYWdhaW5zdCBt dWx0aXBsZSBpbmNsdXNpb24gKi8KKyNkZWZpbmUgQ0tDWExBX0gKKworI2lmbmRlZiBLQU5KSSAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbXMgc3VwcG9ydGluZyBLYW5qaSAqLwor I2lmZGVmIE9TMgorI2RlZmluZSBLQU5KSQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEtB TkpJICovCisKKyNpZmRlZiBOT0tBTkpJICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGNl cHQgaWYgTk9LQU5KSSBpcyBkZWZpbmVkLiAqLworI2lmZGVmIEtBTkpJCisjdW5kZWYgS0FOSkkK KyNlbmRpZiAvKiBLQU5KSSAqLworI2VuZGlmIC8qIE5PS0FOSkkgKi8KKworI2lmbmRlZiBOT1VO SUNPREUKKyNpZm5kZWYgVU5JQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmljb2Rl IHN1cHBvcnQgKi8KKyNpZmRlZiBPUzJPUlVOSVggICAgICAgICAgICAgICAgICAgICAgICAvKiBP bmx5IGZvciBLOTUsIFVOSVgsIFZNUywuLi4gKi8KKyNkZWZpbmUgVU5JQ09ERQorI2Vsc2UKKyNp ZmRlZiBWTVMKKyNkZWZpbmUgVU5JQ09ERQorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9T Mk9SVU5JWCAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNlbmRpZiAvKiBOT1VOSUNPREUgKi8K KworI2RlZmluZSBYTEFfTk9ORSAgICAwICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zbGF0aW9u IHR5cGVzIC0gbm9uZSAqLworI2RlZmluZSBYTEFfQllURSAgICAxICAgICAgICAgICAgICAgICAg IC8qIEJ5dGUtZm9yLWJ5dGUgKi8KKyNkZWZpbmUgWExBX0pBUEFOICAgMiAgICAgICAgICAgICAg ICAgICAvKiBKYXBhbmVzZSAqLworI2RlZmluZSBYTEFfVU5JQ09ERSAzICAgICAgICAgICAgICAg ICAgIC8qIFVuaWNvZGUgKi8KKworI2lmbmRlZiBVTklPUktBTkpJICAgICAgICAgICAgICAgICAg ICAgIC8qIFVuaWNvZGUgT1IgS2FuamkgKi8KKyNpZmRlZiBVTklDT0RFICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBpLmUuIHNvbWUgc3VwcG9ydCBmb3IgKi8KKyNkZWZpbmUgVU5JT1JLQU5K SSAgICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHMgKi8KKyNl bmRpZiAvKiBVTklDT0RFICovCisjaWZkZWYgS0FOSkkKKyNkZWZpbmUgVU5JT1JLQU5KSQorI2Vu ZGlmIC8qIEtBTkpJICovCisjZW5kaWYgLyogVU5JT1JLQU5KSSAqLworLyoKKyAgIERpc2FibGUg YWxsIHN1cHBvcnQgZm9yIGFsbCBjbGFzc2VzIG9mIGNoYXJhY3RlciBzZXRzCisgICBpZiBOT0NT RVRTIGlzIGRlZmluZWQuCisqLworI2lmZGVmIE5PQ1NFVFMKKworI2lmZGVmIENLT1VOSQorI3Vu ZGVmIENLT1VOSQorI2VuZGlmIC8qIENLT1VOSSAqLworI2lmZGVmIEtBTkpJCisjdW5kZWYgS0FO SkkKKyNlbmRpZiAvKiBLQU5KSSAqLworI2lmZGVmIENZUklMTElDCisjdW5kZWYgQ1lSSUxMSUMK KyNlbmRpZiAvKiBDWVJJTExJQyAqLworI2lmZGVmIExBVElOMgorI3VuZGVmIExBVElOMgorI2Vu ZGlmIC8qIExBVElOMiAqLworI2lmZGVmIEhFQlJFVworI3VuZGVmIEhFQlJFVworI2VuZGlmIC8q IEhFQlJFVyAqLworI2lmZGVmIFVOSUNPREUKKyN1bmRlZiBVTklDT0RFCisjZW5kaWYgLyogVU5J Q09ERSAqLworI2lmbmRlZiBOT1VOSUNPREUKKyNkZWZpbmUgTk9VTklDT0RFCisjZW5kaWYJLyog Tk9VTklDT0RFICovCisKKyNlbHNlIC8qIE5vdCBOT0NTRVRTIC0gUmVzdCBvZiB0aGlzIGZpbGUu Li4gKi8KKworI2lmZGVmIE5PVU5JQ09ERSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuaWNv ZGUgKi8KKyNpZmRlZiBVTklDT0RFCisjdW5kZWYgVU5JQ09ERQorI2VuZGlmIC8qIFVOSUNPREUg Ki8KKyNlbmRpZiAvKiBOT1VOSUNPREUgKi8KKworI2lmZGVmIFVOSUNPREUKKyNpZmRlZiBPUzIK KyNpZm5kZWYgQ0tPVU5JCisjZGVmaW5lIENLT1VOSSAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3BlY2lhbCBVbmljb2RlIGZlYXR1cmVzIGZvciBLOTUgKi8KKyNlbmRpZiAvKiBDS09VTkkg Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyNpZm5kZWYgT1My CisjaWZkZWYgQ0tPVU5JCisjdW5kZWYgQ0tPVU5JCisjZW5kaWYgLyogQ0tPVU5JICovCisjZW5k aWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9MQVRJTjIgICAgICAgICAgICAgICAgICAgICAgICAv KiBJZiB0aGV5IGRpZG4ndCBzYXkgIm5vIExhdGluLTIiICovCisjaWZuZGVmIExBVElOMiAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVGhlbiBpZiBMQVRJTjIgaXNuJ3QgYWxyZWFkeSAqLwor I2RlZmluZSBMQVRJTjIgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQsIGRlZmlu ZSBpdC4gKi8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyNlbmRpZiAvKiBOT0xBVElOMiAqLworCisj aWZkZWYgTk9DWVJJTExJQyAgICAgICAgICAgICAgICAgICAgICAgLyogKHNwZWxsaW5nIHZhcmlh bnQuLi4pICovCisjaWZuZGVmIE5PQ1lSSUwKKyNkZWZpbmUgTk9DWVJJTAorI2VuZGlmIC8qIE5P Q1lSSUwgKi8KKyNlbmRpZiAvKiBOT0NZUklMTElDICovCisKKyNpZm5kZWYgTk9DWVJJTCAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGV5IGRpZG4ndCBzYXkgIm5vIEN5cmlsbGljIiAq LworI2lmbmRlZiBDWVJJTExJQyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4gaWYgQ1lS SUxMSUMgaXNuJ3QgYWxyZWFkeSAqLworI2RlZmluZSBDWVJJTExJQyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGRlZmluZWQsIGRlZmluZSBpdC4gKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLwor I2VuZGlmIC8qIE5PQ1lSSUwgKi8KKworI2lmbmRlZiBOT0hFQlJFVyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIElmIHRoZXkgZGlkbid0IHNheSAibm8gSGVicmV3IiAqLworI2lmbmRlZiBIRUJS RVcgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4gaWYgSEVCUkVXIGlzbid0IGFscmVh ZHkgKi8KKyNkZWZpbmUgSEVCUkVXICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmVk LCBkZWZpbmUgaXQuICovCisjZW5kaWYgLyogSEVCUkVXICovCisjZW5kaWYgLyogTk9IRUJSRVcg Ki8KKworI2lmbmRlZiBOT0dSRUVLICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vdCBu byBHcmVlayAqLworI2lmbmRlZiBHUkVFSyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRo ZW4gaWYgR1JFRUsgaXNuJ3QgYWxyZWFkeSAqLworI2RlZmluZSBHUkVFSyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGRlZmluZWQsIGRlZmluZSBpdC4gKi8KKyNlbmRpZiAvKiBHUkVFSyAq LworI2VuZGlmIC8qIE5PR1JFRUsgKi8KKworI2lmbmRlZiBOT0tBTkpJICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIElmIG5vdCBubyBLYW5qaSAqLworI2lmbmRlZiBLQU5KSSAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHRoZW4gaWYgS0FOSkkgaXNuJ3QgYWxyZWFkeSAqLworI2RlZmlu ZSBLQU5KSSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmluZWQsIGRlZmluZSBpdC4g Ki8KKyNlbmRpZiAvKiBLQU5KSSAqLworI2VuZGlmIC8qIE5PS0FOSkkgKi8KKworLyogRmlsZSBj a2N4bGEuaCAtLSBDaGFyYWN0ZXItc2V0LXJlbGF0ZWQgZGVmaW5pdGlvbnMsIHN5c3RlbSBpbmRl cGVuZGVudCAqLworCisvKiBDb2RlcyBmb3IgS2VybWl0IFRyYW5zZmVyIFN5bnRheCBMZXZlbCAo b2Jzb2xldGUpICovCisKKyNkZWZpbmUgVFNfTDAgMCAgICAgICAgICAvKiBMZXZlbCAwIChUcmFu c3BhcmVudCkgKi8KKyNkZWZpbmUgVFNfTDEgMSAgICAgICAgICAvKiBMZXZlbCAxIChvbmUgc3Rh bmRhcmQgY2hhcmFjdGVyIHNldCkgKi8KKyNkZWZpbmUgVFNfTDIgMiAgICAgICAgICAvKiBMZXZl bCAyIChtdWx0aXBsZSBjaGFyYWN0ZXIgc2V0cyBpbiBzYW1lIGZpbGUpICovCisKKyNkZWZpbmUg VU5LIDYzICAgICAgICAgICAvKiBTeW1ib2wgdG8gdXNlIGZvciB1bmtub3duIGNoYXJhY3RlciAo NjMgPSA/KSAqLworCisvKgorICBDb2RlcyBmb3IgdGhlIGJhc2UgYWxwaGFiZXQgb2YgYSBnaXZl biBjaGFyYWN0ZXIgc2V0LgorICBUaGVzZSBhcmUgYXNzaWduZWQgaW4gcm91Z2hseSBJU08gODg1 OSBvcmRlci4KKyAgKEVhY2ggaXMgYXNzdW1lZCB0byBpbmNsdWRlIEFTQ0lJL1JvbWFuLikKKyov CisjZGVmaW5lIEFMX1VOSVYgICAgMCAgICAgICAgICAgICAgICAgICAgLyogVW5pdmVyc2FsIChs aWtlIElTTyAxMDY0NikgKi8KKyNkZWZpbmUgQUxfUk9NQU4gICAxICAgICAgICAgICAgICAgICAg ICAvKiBSb21hbiAoTGF0aW4pIGFscGhhYmV0ICovCisjZGVmaW5lIEFMX0NZUklMICAgMiAgICAg ICAgICAgICAgICAgICAgLyogQ3lyaWxsaWMgYWxwaGFiZXQgKi8KKyNkZWZpbmUgQUxfQVJBQklD ICAzICAgICAgICAgICAgICAgICAgICAvKiBBcmFiaWMgKi8KKyNkZWZpbmUgQUxfR1JFRUsgICA0 ICAgICAgICAgICAgICAgICAgICAvKiBHcmVlayAqLworI2RlZmluZSBBTF9IRUJSRVcgIDUgICAg ICAgICAgICAgICAgICAgIC8qIEhlYnJldyAqLworI2RlZmluZSBBTF9LQU5BICAgIDYgICAgICAg ICAgICAgICAgICAgIC8qIEphcGFuZXNlIEthdGFrYW5hICovCisjZGVmaW5lIEFMX0pBUEFOICAg NyAgICAgICAgICAgICAgICAgICAgLyogSmFwYW5lc2UgS2F0YWthbmErS2FuamkgaWRlb2dyYW1z ICovCisjZGVmaW5lIEFMX0hBTiAgICAgOCAgICAgICAgICAgICAgICAgICAgLyogQ2hpbmVzZS9K YXBhbmVzZS9Lb3JlYW4gaWRlb2dyYW1zICovCisjZGVmaW5lIEFMX0lORElBICAgOSAgICAgICAg ICAgICAgICAgICAgLyogSW5kaWFuIHNjcmlwdHMgKElTQ0lJKSAqLworI2RlZmluZSBBTF9WSUVU ICAgMTAgICAgICAgICAgICAgICAgICAgIC8qIFZpZXRuYW1lc2UgKFZJU0NJSSkgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGQgbW9yZSBoZXJlLi4uICov CisjZGVmaW5lIEFMX1VOSyAgIDk5OSAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93biAodHJh bnNwYXJlbnQpICovCisKKy8qIENvZGVzIGZvciBsYW5ndWFnZXMgKi8KKy8qCisgIE5PVEU6IEl0 IHdvdWxkIHBlcmhhcHMgYmUgYmV0dGVyIHRvIHVzZSBJU08gNjM5LTE5ODggMi1sZXR0ZXIgIkNv ZGVzIGZvcgorICBSZXByZXNlbnRhdGlvbiBvZiBOYW1lcyBvZiBMYW5ndWFnZXMiIGhlcmUsIHNo b3duIGluIHRoZSBjb21tZW50cyBiZWxvdy4KKyovCisjZGVmaW5lIExfQVNDSUkgICAgICAgMCAg LyogRU4gQVNDSUksIEVuZ2xpc2ggKi8KKyNkZWZpbmUgTF9VU0FTQ0lJICAgICAwICAvKiBFTiBB U0NJSSwgRW5nbGlzaCAqLworI2RlZmluZSBMX0RVVENIICAgICAgIDEgIC8qIE5MIER1dGNoICov CisjZGVmaW5lIExfRklOTklTSCAgICAgMiAgLyogRkkgRmlubmlzaCAqLworI2RlZmluZSBMX0ZS RU5DSCAgICAgIDMgIC8qIEZSIEZyZW5jaCAqLworI2RlZmluZSBMX0dFUk1BTiAgICAgIDQgIC8q IERFIEdlcm1hbiAqLworI2RlZmluZSBMX0hVTkdBUklBTiAgIDUgIC8qIEhVIEh1bmdhcmlhbiAq LworI2RlZmluZSBMX0lUQUxJQU4gICAgIDYgIC8qIElUIEl0YWxpYW4gKi8KKyNkZWZpbmUgTF9O T1JXRUdJQU4gICA3ICAvKiBOTyBOb3J3ZWdpYW4gKi8KKyNkZWZpbmUgTF9QT1JUVUdVRVNFICA4 ICAvKiBQVCBQb3J0dWd1ZXNlICovCisjZGVmaW5lIExfU1BBTklTSCAgICAgOSAgLyogRVMgU3Bh bmlzaCAqLworI2RlZmluZSBMX1NXRURJU0ggICAgMTAgIC8qIFNWIFN3ZWRpc2ggKi8KKyNkZWZp bmUgTF9TV0lTUyAgICAgIDExICAvKiBSTSBTd2lzcyAoUmhhZXRvLVJvbWFuY2UpICovCisjZGVm aW5lIExfREFOSVNIICAgICAxMiAgLyogREEgRGFuaXNoICovCisjZGVmaW5lIExfSUNFTEFORElD ICAxMyAgLyogSVMgSWNlbGFuZGljICovCisjZGVmaW5lIExfUlVTU0lBTiAgICAxNCAgLyogUlUg UnVzc2lhbiAqLworI2RlZmluZSBMX0pBUEFORVNFICAgMTUgIC8qIEpBIEphcGFuZXNlICovCisj ZGVmaW5lIExfSEVCUkVXICAgICAxNiAgLyogSVcgSGVicmV3ICovCisjZGVmaW5lIExfR1JFRUsg ICAgICAxNyAgLyogICAgR3JlZWsgKi8KKworI2RlZmluZSBNQVhMQU5HICAgICAgMTcgIC8qIE51 bWJlciBvZiBsYW5ndWFnZXMgKi8KKworLyoKKyAgRmlsZSBjaGFyYWN0ZXItc2V0cyBhcmUgZGVm aW5lZCBpbiB0aGUgc3lzdGVtLXNwZWNpZmljIGNrP3hsYS5oIGZpbGUsCisgIGV4Y2VwdCBmb3Ig dGhlIGZvbGxvd2luZyBvbmVzLCB3aGljaCBtdXN0IGJlIGF2YWlsYWJsZSB0byBhbGwgdmVyc2lv bnM6CisqLworI2RlZmluZSBGQ19UUkFOU1AgIDI1NCAgICAgICAgICAgICAgICAgIC8qIFRyYW5z cGFyZW50ICovCisjZGVmaW5lIEZDX1VOREVGICAgMjU1ICAgICAgICAgICAgICAgICAgLyogVW5k ZWZpbmVkICAgKi8KKy8qCisgIERlc2lnbmF0b3JzIGZvciBLZXJtaXQncyB0cmFuc2ZlciBjaGFy YWN0ZXIgc2V0cy4gIFRoZXNlIGFyZSBhbGwgc3RhbmRhcmQKKyAgc2V0cywgb3IgYmFzZWQgb24g dGhlbS4gIFN5bWJvbHMgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGZpcnN0IDggY2hhcmFjdGVycywK KyAgYmVjYXVzZSBzb21lIEMgcHJlcHJvY2Vzc29ycyBoYXZlIHRoaXMgbGltaXQuCisqLworLyog TElTVDEgKi8KKyNkZWZpbmUgVENfVFJBTlNQICAwICAgLyogVHJhbnNwYXJlbnQsIG5vIGNoYXJh Y3RlciB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBUQ19VU0FTQ0lJIDEgICAvKiBJU08gNjQ2IElS ViAvIFVTIDctYml0IEFTQ0lJICovCisjZGVmaW5lIFRDXzFMQVRJTiAgMiAgIC8qIElTTyA4ODU5 LTEsIExhdGluIEFscGhhYmV0IDEgKi8KKyNkZWZpbmUgVENfMkxBVElOICAzICAgLyogSVNPIDg4 NTktMiwgTGF0aW4gQWxwaGFiZXQgMiAqLworI2RlZmluZSBUQ19DWVJJTEwgIDQgICAvKiBJU08g ODg1OS01LCBMYXRpbi9DeXJpbGxpYyAqLworI2RlZmluZSBUQ19KRVVDICAgIDUgICAvKiBKYXBh bmVzZSBFVUMgPSBKSVMgMDIwMSswMjAyKzAyMDggKi8KKyNkZWZpbmUgVENfSEVCUkVXICA2ICAg LyogSVNPIDg4NTktOCwgTGF0aW4vSGVicmV3ICovCisjZGVmaW5lIFRDX0dSRUVLICAgNyAgIC8q IElTTyA4ODU5LTcsIExhdGluL0dyZWVrICovCisjZGVmaW5lIFRDXzlMQVRJTiAgOCAgIC8qIElT TyA4ODU5LTE1IExhdGluIEFscGhhYmV0IDkgKHdpdGggRXVybykgKi8KKyNkZWZpbmUgVENfVUNT MiAgICA5ICAgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiAqLworI2RlZmluZSBUQ19VVEY4 ICAgMTAgICAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVURi04ICovCisKKyNkZWZpbmUgTUFYVENT RVRTIDEwICAgLyogSGlnaGVzdCBUcmFuc2ZlciBDaGFyYWN0ZXIgU2V0IE51bWJlciAqLworCisj aWZkZWYgQ09NTUVOVAorLyoKKyAgTm90IHVzZWQgYW5kIHByb2JhYmx5IHdvbid0IGJlIGR1ZSB0 byBJU08tMTA2NDYgLyBVbmljb2RlLgorKi8KKyNkZWZpbmUgVENfM0xBVElOIDExICAvKiBJU08g ODg1OS0zLCBMYXRpbi0zICovCisjZGVmaW5lIFRDXzRMQVRJTiAxMiAgIC8qIElTTyA4ODU5LTQs IExhdGluLTQgKi8KKyNkZWZpbmUgVENfNUxBVElOIDEzICAvKiBJU08gODg1OS05LCBMYXRpbi01 ICovCisjZGVmaW5lIFRDX0FSQUJJQyAxNCAgLyogSVNPLTg4NTktNiwgTGF0aW4vQXJhYmljICov CisjZGVmaW5lIFRDX0pJUzIwOCAxNSAgLyogSmFwYW5lc2UgSklTIFggMDIwOCBtdWx0aWJ5dGUg c2V0ICovCisjZGVmaW5lIFRDX0NISU5FUyAxNiAgLyogQ2hpbmVzZSBTdGFuZGFyZCBHQiAyMzEy LTgwICovCisjZGVmaW5lIFRDX0tPUkVBTiAxNyAgLyogS29yZWFuIEtTIEMgNTYwMS0xOTg3ICov CisjZGVmaW5lIFRDX0lTQ0lJICAxOCAgLyogSW5kaWFuIHN0YW5kYXJkIGNvZGUgZm9yIGlpLi4u ICovCisjZGVmaW5lIFRDX1ZTQ0lJICAxOSAgLyogVmlldG5hbSBzdGFuZGFyZCBjb2RlIGZvciBp aS4uLiAqLworLyogZXRjLi4uICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisvKiBTdHJ1Y3R1 cmUgZm9yIGNoYXJhY3Rlci1zZXQgaW5mb3JtYXRpb24gKi8KKworc3RydWN0IGNzaW5mbyB7Cisg ICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVzY3JpcHRpdmUgbmFt ZSBvZiBjaGFyYWN0ZXIgc2V0ICovCisgICAgaW50IHNpemU7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU2l6ZSAoZS5nLiAxMjgsIDI1NiwgMTYzODQpICovCisgICAgaW50IGNvZGU7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBUQ18xTEFUSU4sIGV0Yy4gICovCisgICAg Y2hhciAqZGVzaWduYXRvcjsgICAgICAgICAgICAgICAgICAgLyogRGVzaWduYXRvciwgbGlrZSBJ Mi8xMDAgPSBMYXRpbi0xICovCisgICAgaW50IGFscGhhYmV0OyAgICAgICAgICAgICAgICAgICAg ICAgLyogQmFzZSBhbHBoYWJldCAqLworICAgIGNoYXIgKmtleXdvcmQ7ICAgICAgICAgICAgICAg ICAgICAgIC8qIEtleXdvcmQgZm9yIHRoaXMgY2hhcmFjdGVyLXNldCAqLworfTsKKworLyogU3Ry dWN0dXJlIGZvciBsYW5ndWFnZSBpbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgbGFuZ2luZm8gewor ICAgIGludCBpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExhbmd1YWdlIElEIGNv ZGUgKExfd2hhdGV2ZXIpICovCisgICAgaW50IGZjOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZSBjaGFyYWN0ZXIgc2V0IHRvIHVzZSAqLworICAgIGludCB0YzsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGNoYXJhY3RlciBzZXQgdG8gdXNlICovCisg ICAgY2hhciAqZGVzY3JpcHRpb247ICAgICAgICAgICAgICAgICAgLyogRGVzY3JpcHRpb24gb2Yg bGFuZ3VhZ2UgKi8KK307CisKKy8qIE5vdyB0YWtlIGluIHRoZSBzeXN0ZW0tc3BlY2lmaWMgZGVm aW5pdGlvbnMgKi8KKworI2lmZGVmIFVOSVgKKyNpbmNsdWRlICJja3V4bGEuaCIKKyNlbmRpZiAv KiBVTklYICovCisKKyNpZmRlZiBPU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBP Uy05ICovCisjaW5jbHVkZSAiY2t1eGxhLmgiCisjZW5kaWYgLyogT1MtOSAqLworCisjaWZkZWYg Vk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVkFYL1ZNUyAqLworI2luY2x1ZGUg ImNrdXhsYS5oIgorI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgR0VNRE9TICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQXRhcmkgU1QgKi8KKyNpbmNsdWRlICJja3V4bGEuaCIKKyNlbmRp ZiAvKiBHRU1ET1MgKi8KKworI2lmZGVmIE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIE1hY2ludG9zaCAqLworI2luY2x1ZGUgImNrbXhsYS5oIgorI2VuZGlmIC8qIE1BQyAqLwor CisjaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1MvMiAqLworI2lu Y2x1ZGUgImNrdXhsYS5oIiAgICAgICAgICAgICAgICAgICAgIC8qIFVzZXMgYmlnIFVOSVggdmVy c2lvbiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQU1JR0EgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ29tbW9kb3JlIEFtaWdhICovCisjaW5jbHVkZSAiY2t1eGxhLmgiCisj ZW5kaWYgLyogQU1JR0EgKi8KKworI2lmZGVmIGRhdGFnZW5lcmFsICAgICAgICAgICAgICAgICAg ICAgIC8qIERhdGEgR2VuZXJhbCBNViBBT1MvVlMgKi8KKyNpbmNsdWRlICJja3V4bGEuaCIKKyNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisjaWZkZWYgU1RSQVRVUyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU3RyYXR1cyBDb21wdXRlciwgSW5jLiBWT1MgKi8KKyNpbmNsdWRlICJja3V4 bGEuaCIKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBVTklDT0RFCisjaW5jbHVkZSAi Y2tjdW5pLmgiICAgICAgICAgICAgICAgICAgICAgLyogVW5pY29kZSAqLworI2VuZGlmIC8qIFVO SUNPREUgKi8KKworI2lmZGVmIEtBTkpJCisjZGVmaW5lIFVOS1NKSVMgMHg4MTdmCitfUFJPVE9U WVAoVVNIT1JUIGV1X3RvX3NqLCAoVVNIT1JUKSApOyAgLyogRVVDLUpQIHRvIFNoaWZ0LUpJUyAg Ki8KK19QUk9UT1RZUChVU0hPUlQgc2pfdG9fZXUsIChVU0hPUlQpICk7ICAvKiBTaGlmdC1KSVMg dG8gRVVDLUpQICAqLworX1BST1RPVFlQKCBpbnQgeGthbmpmLCAodm9pZCkgKTsKK19QUk9UT1RZ UCggaW50IHhrYW5qaSwgKGludCwgaW50ICgqKShjaGFyKSkgKTsKK19QUk9UT1RZUCggaW50IHhr YW5qeiwgKGludCAoKikoY2hhcikgKSApOworX1BST1RPVFlQKCBpbnQgemthbmpmLCAodm9pZCkg KTsKK19QUk9UT1RZUCggaW50IHprYW5qaSwgKGludCAoKikodm9pZCkpICk7IC8qIEthbmppIGZ1 bmN0aW9uIHByb3RvdHlwZXMgKi8KK19QUk9UT1RZUCggaW50IHprYW5qeiwgKHZvaWQpICk7Citf UFJPVE9UWVAoVk9JRCBqN2luaXQsICggdm9pZCApICk7ICAgICAgLyogSW5pdGlhbGl6ZSBKSVMt NyBwYXJzZXIgKi8KK19QUk9UT1RZUChpbnQgZ2V0ajcsICggdm9pZCApICk7ICAgICAgICAvKiBH ZXQgbmV4dCBKSVMtNyBjaGFyYWN0ZXIgKi8KKyNlbmRpZiAvKiBLQU5KSSAqLworCisjaWZuZGVm IE1BQworI2lmbmRlZiBOT0xPQ0FMCitfUFJPVE9UWVAoIGludCBjc19zaXplLCAoaW50KSApOwor X1BST1RPVFlQKCBpbnQgY3NfaXNfc3RkLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgY3NfaXNf bnJjLCAoaW50KSApOworX1BST1RPVFlQKCBWT0lEIHNldHJlbWNoYXJzZXQsIChpbnQsIGludCkg KTsKK19QUk9UT1RZUCggVk9JRCBzZXRsY2xjaGFyc2V0LCAoaW50KSApOworI2VuZGlmIC8qIE5P TE9DQUwgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKworX1BST1RPVFlQKFZPSUQgc2V0eGxhdHlwZSwg KGludCwgaW50KSk7CisKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjZW5kaWYgLyogQ0tDWExBX0gg Ki8KKworLyogRW5kIG9mIGNrY3hsYS5oICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0LmluaSBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdC5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYjMwZjM4OQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2tlcm1pdC5pbmkKQEAgLTAsMCArMSw4IEBACitDT01NRU5UIC0g U3RhbmRhcmQgQy1LZXJtaXQgaW5pdGlhbGl6YXRpb24gZmlsZQorOworZWNobworZWNobyBUaGUg dmVyeSBsb25nIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0 ZWQKK2VjaG8gd2l0aCBDLUtlcm1pdCA2LCA3LCBhbmQgOCBpcyBubyBsb25nZXIgcmVjb21tZW5k ZWQgYXMgInN0YW5kYXJkIiwKK2VjaG8gc2luY2UgaXRzIGZlYXR1cmVzIHdlcmUgbGl0dGxlIHVz ZWQuICBJdCBpcyBzdGlsbCBhdmFpbGFibGUgaW4KK2VjaG8gdGhlIEMtS2VybWl0IGRpc3RyaWJ1 dGlvbiBhcyBvY2tlcm1pdC5pbmkuCitlY2hvCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0NzAudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0NzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmE3OTZjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDIt YnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ3MC50eHQKQEAgLTAsMCArMSwxNzY5MCBAQAor CisgICBbMV1UaGUgQ29sdW1iaWEgQ3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0IHwgQ29sdW1iaWEg VW5pdmVyc2l0eQorICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNSBV U0EgbyBbMl1rZXJtaXRAY29sdW1iaWEuZWR1CisgICAuLi5zaW5jZSAxOTgxCisgICBbM11Ib21l IFs0XUtlcm1pdCA5NSBbNV1DLUtlcm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJlbnQgWzhdTmV3IFs5 XUZBUQorICAgWzEwXVN1cHBvcnQKKworU3VwcGxlbWVudCB0byBbMTFdVXNpbmcgQy1LZXJtaXQg LCAybmQgRWRpdGlvbgorCitGb3IgQy1LZXJtaXQgNy4wCisKK0FzIG9mIEMtS2VybWl0IHZlcnNp b246ICA3LjAuMTk2CitUaGlzIGZpbGUgY3JlYXRlZDogIDggRmVicnVhcnkgMjAwMAorVGhpcyBm aWxlIGxhc3QgdXBkYXRlZDoKK01vbiBBdWcgIDggMTA6Mzk6MTggMjAxMQorCisKK0F1dGhvcnM6 IEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lCitBZGRyZXNzOiBUaGUgS2Vy bWl0IFByb2plY3QKKyAgICAgICAgIENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgICAgICAgIDYxMiBX ZXN0IDExNXRoIFN0cmVldAorICAgICAgICAgTmV3IFlvcmsgTlkgMTAwMjUtNzc5OQorICAgICAg ICAgVVNBCitGYXg6ICAgICArMSAoMjEyKSA2NjItNjQ0MgorRS1NYWlsOiAgWzEyXWtlcm1pdC1z dXBwb3J0QGNvbHVtYmlhLmVkdQorV2ViOiAgICAgWzEzXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC8KK09yOiAgICAgIFsxNF1odHRwOi8vd3d3Lmtlcm1pdC1wcm9qZWN0Lm9yZy8KK09y OiAgICAgIFsxNV1odHRwOi8vd3d3LmNvbHVtYmlhLm55Yy5ueS51cy9rZXJtaXQvCisKK05PVElD RVMKKworICAgVGhpcyBkb2N1bWVudDoKKyAgICAgICAgICBDb3B5cmlnaHQg77+9IDE5OTcsIDIw MDAsIEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLgorICAgICAgICAgIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIEtlcm1pdCA5NToKKyAgICAgICAgICBDb3B5cmlnaHQg 77+9IDE5OTUsIDIwMDAsIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlCisg ICAgICAgICAgQ2l0eSBvZiBOZXcgWW9yay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgQy1L ZXJtaXQ6CisgICAgICAgICAgQ29weXJpZ2h0IO+/vSAxOTg1LCAyMDAwLAorICAgICAgICAgIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuIEFs bAorICAgICAgICAgIHJpZ2h0cyByZXNlcnZlZC4gU2VlIHRoZSBDLUtlcm1pdCBbMTZdQ09QWUlO Ry5UWFQgZmlsZSBvciB0aGUKKyAgICAgICAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgWzE3XWNr Y21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQKKyAgICAgICAgICBwZXJtaXNzaW9ucy4K KworICAgV2hlbiBLZXJiZXJvcyhUTSkgYW5kL29yIFNSUChUTSkgKFNlY3VyZSBSZW1vdGUgUGFz c3dvcmQpIGFuZC9vciBTU0wKKyAgICAgICAgICBwcm90b2NvbCBhcmUgaW5jbHVkZWQ6CisgICAg ICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IO+/vSAxOTkwLCBNYXNzYWNodXNldHRzIEluc3RpdHV0 ZSBvZgorICAgICAgICAgIFRlY2hub2xvZ3kuCisgICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0 IO+/vSAxOTkxLCAxOTkzIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YKKyAgICAgICAgICBD YWxpZm9ybmlhLgorICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCDvv70gMTk5MSwgMTk5Miwg MTk5MywgMTk5NCwgMTk5NSBieSBBVCZULgorICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCDv v70gMTk5NywgU3RhbmZvcmQgVW5pdmVyc2l0eS4KKyAgICAgICAgICBQb3J0aW9ucyBDb3B5cmln aHQg77+9IDE5OTUtMTk5NywgRXJpYyBZb3VuZyA8ZWF5QGNyeXB0b3NvZnQuY29tPi4KKworICAg Rm9yIHRoZSBmdWxsIHRleHQgb2YgdGhlIHRoaXJkLXBhcnR5IGNvcHlyaWdodCBub3RpY2VzLCBz ZWUKKyAgIFsxOF1BcHBlbmRpeCBWLgorCitXSEFUIElTIElOIFRISVMgRklMRQorCisgICBUaGlz IGZpbGUgbGlzdHMgY2hhbmdlcyBtYWRlIHRvIEMtS2VybWl0IHNpbmNlIHRoZSBzZWNvbmQgZWRp dGlvbiBvZgorICAgdGhlIGJvb2sgWzE5XVVzaW5nIEMtS2VybWl0IHdhcyBwdWJsaXNoZWQgYW5k IEMtS2VybWl0IDYuMCB3YXMgcmVsZWFzZWQKKyAgIGluIE5vdmVtYmVyIDE5OTYuIFVzZSB0aGlz IGZpbGUgYXMgYSBzdXBwbGVtZW50IHRvIHRoZSBzZWNvbmQgZWRpdGlvbgorICAgb2YgVXNpbmcg Qy1LZXJtaXQgdW50aWwgdGhlIHRoaXJkIGVkaXRpb24gaXMgcHVibGlzaGVkIHNvbWUgdGltZSBp bgorICAgMjAwMC4gSWYgdGhlICJtb3N0IHJlY2VudCB1cGRhdGUiIHNob3duIGFib3ZlIGlzIGxv bmcgYWdvLCBjb250YWN0CisgICBDb2x1bWJpYSBVbml2ZXJzaXR5IHRvIHNlZSBpZiB0aGVyZSBp cyBhIG5ld2VyIHJlbGVhc2UuCisKKyAgIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBhbHNvIHNl ZSB0aGUgWzIwXUNLQ0JXUi5UWFQgKCJDLUtlcm1pdAorICAgYmV3YXJlIikgZmlsZSBmb3IgaGlu dHMsIHRpcHMsIHRyaWNrcywgcmVzdHJpY3Rpb25zLCBmcmVxdWVudGx5IGFza2VkCisgICBxdWVz dGlvbnMsIGV0YywgcGx1cyB0aGUgc3lzdGVtLXNwZWNpZmljICJiZXdhcmUgZmlsZSIsIGUuZy4K KyAgIFsyMV1DS1VCV1IuVFhUIGZvciBVTklYLCBbMjJdQ0tWQldSLlRYVCBmb3IgVk1TLCBldGMs IGFuZCBhbHNvIGFueQorICAgc3lzdGVtLXNwZWNpZmljIHVwZGF0ZSBmaWxlcyBzdWNoIGFzIEtF Uk1JVDk1LkhUTSBmb3IgS2VybWl0IDk1IChpbiB0aGUKKyAgIERPQ1NcTUFOVUFMXCBzdWJkaXJl Y3Rvcnkgb2YgeW91ciBLOTUgZGlyZWN0b3J5KS4KKworICAgICBUaGlzIFdlYi1iYXNlZCBjb3B5 IG9mIHRoZSBDLUtlcm1pdCA3LjAgdXBkYXRlIG5vdGVzIHN1cGVyc2VkZXMgdGhlCisgICAgIHBs YWluLXRleHQgQ0tFUk1JVDIuVFhUIGZpbGUuIEFsbCBjaGFuZ2VzIGFmdGVyIDE5IEphbnVhcnkg MjAwMAorICAgICBhcHBlYXIgb25seSBoZXJlIGluIHRoZSBXZWIgdmVyc2lvbi4gSWYgeW91IG5l ZWQgYW4gdXAtdG8tZGF0ZQorICAgICBwbGFpbi10ZXh0IGNvcHksIHVzZSB5b3VyIFdlYiBicm93 c2VyIHRvIHNhdmUgdGhpcyBwYWdlIGFzIHBsYWluCisgICAgIHRleHQuCisKK0FCT1VUIEZJTEVO QU1FUworCisgICBJbiB0aGlzIGRvY3VtZW50LCBmaWxlbmFtZXMgYXJlIGdlbmVyYWxseSBzaG93 biBpbiB1cHBlcmNhc2UsIGJ1dCBvbgorICAgZmlsZSBzeXN0ZW1zIHdpdGggY2FzZS1zZW5zaXRp dmUgbmFtZXMgc3VjaCBhcyBVTklYLCBPUy05LCBhbmQgQU9TL1ZTLAorICAgbG93ZXJjYXNlIG5h bWVzIGFyZSB1c2VkOiBbMjNdY2t1YndyLnR4dCwgWzI0XWNrZXJtaXQ3MC50eHQsIGV0Yy4KKwor QURESVRJT05BTCBGSUxFUworCisgICBTZXZlcmFsIG90aGVyIGZpbGVzIGFjY29tcGFueSB0aGlz IG5ldyBLZXJtaXQgcmVsZWFzZToKKworICAgU0VDVVJJVFkuVFhUCisgICAgICAgICAgRGlzY3Vz c2lvbiBvZiBLZXJtaXQncyBuZXcgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb24KKyAgICAg ICAgICBmZWF0dXJlczoKKworICAgICAgICAgICsgWzI1XVBsYWluLXRleHQgdmVyc2lvbgorICAg ICAgICAgICsgWzI2XUhUTUwgKGh5cGVydGV4dCkgdmVyc2lvbgorCisgICBJS1NELlRYVAorICAg ICAgICAgIEhvdyB0byBpbnN0YWxsIGFuZCBtYW5hZ2UgYW4gSW50ZXJuZXQgS2VybWl0IFNlcnZp Y2UgRGFlbW9uLgorCisgICAgICAgICAgKyBbMjddUGxhaW4tdGV4dCB2ZXJzaW9uCisgICAgICAg ICAgKyBbMjhdSFRNTCAoaHlwZXJ0ZXh0KSB2ZXJzaW9uCisKKyAgICAgICAgICBBbHNvIHNlZSBb MjldY3Vpa3NkLmh0bSBmb3IgaW5zdHJ1Y3Rpb25zIGZvciB1c2UuCisKKyAgIFRFTE5FVC5UWFQK KyAgICAgICAgICBBIHRob3JvdWdoIHByZXNlbnRhdGlvbiBvZiBLZXJtaXQncyBuZXcgYWR2YW5j ZWQgVGVsbmV0IGZlYXR1cmVzCisgICAgICAgICAgYW5kIGNvbnRyb2xzLgorCisgICAgICAgICAg KyBbMzBdUGxhaW4tdGV4dCB2ZXJzaW9uCisgICAgICAgICAgKyBbMzFdSFRNTCAoaHlwZXJ0ZXh0 KSB2ZXJzaW9uCisKK1RIRSBORVcgQy1LRVJNSVQgTElDRU5TRQorCisgICBUaGUgQy1LZXJtaXQg bGljZW5zZSB3YXMgcmV3cml0dGVuIGZvciB2ZXJzaW9uIDcuMCB0byBncmFudCBhdXRvbWF0aWMK KyAgIHBlcm1pc3Npb24gdG8gcGFja2FnZXJzIG9mIGZyZWUgb3BlcmF0aW5nLXN5c3RlbSBkaXN0 cmlidXRpb25zIHRvCisgICBpbmNsdWRlIEMtS2VybWl0IDcuMC4gRXhhbXBsZXMgaW5jbHVkZSBM aW51eCAoR05VL0xpbnV4KSwgRnJlZUJTRCwKKyAgIE5ldEJTRCwgZXRjLiBUaGUgbmV3IGxpY2Vu c2UgaXMgaW4gdGhlIFszMl1DT1BZSU5HLlRYVCBmaWxlLCBhbmQgaXMKKyAgIGFsc28gZGlzcGxh eWVkIGJ5IEMtS2VybWl0IGl0c2VsZiB3aGVuIHlvdSBnaXZlIHRoZSBWRVJTSU9OIG9yCisgICBD T1BZUklHSFQgY29tbWFuZC4gVGhlIG5ldyBDLUtlcm1pdCBsaWNlbnNlIGRvZXMgbm90IGFwcGx5 IHRvCisgICBbMzNdS2VybWl0IDk1LgorCitBQ0tOT1dMRURHTUVOVFMKKworICAgVGhhbmtzIHRv IEplZmYgQWx0bWFuLCB3aG8gam9pbmVkIHRoZSBLZXJtaXQgUHJvamVjdCBpbiAxOTk1LCBmb3Ig bXVjaAorICAgb2Ygd2hhdCB5b3Ugc2VlIGluIEMtS2VybWl0IDcuMCwgZXNwZWNpYWxseSBpbiB0 aGUgbmV0d29ya2luZyBhbmQKKyAgIHNlY3VyaXR5IGFyZWFzLCBhbmQgaGlzIGtleSByb2xlIGlu IGRlc2lnbmluZyBhbmQgaW1wbGVtZW50aW5nIHRoZQorICAgSW50ZXJuZXQgS2VybWl0IFNlcnZp Y2UgRGFlbW9uLiBBbmQgc3BlY2lhbCB0aGFua3MgdG8gTHVjYXMgSGFydCBmb3IKKyAgIGxvdHMg b2YgaGVscCB3aXRoIHRoZSBWTVMgdmVyc2lvbjsgdG8gUGV0ZXIgRWljaGhvcm4gZm9yIGNvbnRp bnVvdXMKKyAgIHRlc3Rpbmcgb24gdGhlIGZ1bGwgcmFuZ2Ugb2YgSFAtVVggdmVyc2lvbnMgYW5k IGZvciBhIGNvbnNvbGlkYXRlZCBzZXQKKyAgIG9mIEhQLVVYIG1ha2VmaWxlIHRhcmdldHM7IGFu ZCB0byBDb2xpbiBBbGxlbiwgTWFyayBBbGxlbiwgUm9nZXIgQWxsZW4sCisgICBSaWMgQW5kZXJz b24sIFdpbGxpYW0gQmFkZXIsIE1pdGNoIEJha2VyLCBNaXRjaGVsbCBCYXNzLCBOZWxzb24gQmVl YmUsCisgICBHZXJyeSBCZWxhbmdlciwgSmVmZiBCZXJuc3RlbiwgTWFyayBCZXJyeW1hbiwgSm9o biBCaWdnLCBWb2xrZXIKKyAgIEJvcmNoZXJ0LCBKb25hdGhhbiBCb3N3ZWxsLCBUaW0gQm95ZXIs IEZyZWRlcmljayBCcnVja21hbiwgS2VubmV0aAorICAgQ29jaHJhbiwgSmFyZWQgQ3JhcG8sIEJp bGwgRGVsYW5leSwgSWdvciBTb2JyYWRvIERlbGdhZG8sIENsYXJlbmNlCisgICBEb2xkLCBKb2Ug RG91cG5paywgSm9obiBEdW5sYXAsIE1heCBFdmFydHMsIFBhdHJpY2sgRnJlbmNoLCBDYXJsCisg ICBGcmllZGJlcmcsIENhcmwgRnJpZW5kLCBIaXJvZnVtaSBGdWppaSwgQW5kcmV3IEdhYnJpZWws IEdhYmUgR2FyemEsCisgICBCb3lkIEdlcmJlciwgRGF2aWQgR2VyYmVyLCBHZW9yZ2UgR2lsbWVy LCBIdW50ZXIgR29hdGxleSwgREogSGFnYmVyZywKKyAgIEtldmluIEhhbmR5LCBBbmR5IEhhcnBl ciwgUmFuZG9scGggSGVyYmVyLCBTdmVuIEhvbHN0cu+/vW0sIE1pY2hhbAorICAgSmFlZ2VybWFu biwgR3JhaGFtIEplbmtpbnMsIERpY2sgSm9uZXMsIFRlcnJ5IEtlbm5lZHksIFJvYmVydCBEIEtl eXMsCisgICBOaWNrIEtpc3NlYmVydGgsIElnb3IgS292YWxlbmtvLCBEYXZpZCBMYW5lLCBBZGFt IExhdXJpZSwgSmVmZgorICAgTGllYmVybWFubiwgRXJpYyBMb252aWNrLCBIb2kgV2FuIExvdWlz LCBBcnRodXIgTWFyc2gsIEdyZWdvcmllIE1hcnRpbiwKKyAgIFBldGVyIE1hdXpleSwgRHJhZ2Fu IE1pbGljaWMsIFRvZGQgTWlsbGVyLCBDaHJpc3RpYW4gTW9uZHJ1cCwgRGFuaWVsCisgICBNb3Jh dG8sIERhdCBOZ3V5ZW4sIEhlcmIgUGV5ZXJsLCBKZWFuLVBpZXJyZSBSYWRsZXksIFN0ZXZlIFJh bmNlLAorICAgU3RlcGhlbiBSaWVobSwgTmlnZWwgUm9sZXMsIExhcnJ5IFJvc2VubWFuLCBKYXkg UyBSb3VtYW4sIERhdmlkCisgICBTYW5kZXJzb24sIEpvaG4gU2FudG9zLCBNaWNoYWVsIFNjaG1p dHosIFN0ZXZlbiBTY2h1bHR6LCBCb2IgU2hhaXIsCisgICBSaWNoYXJkIFNodWZvcmQsIEZyZWQg U21pdGgsIE1pY2hhZWwgU29rb2xvdiwgSmltIFNwYXRoLCBQZXRlciBTemVsbCwKKyAgIFRlZCBU J3NvLCBCcmlhbiBUaWxsbWFuLCBMaW51cyBUb3J2YWxkcywgUGF0cmljayBWb2xrZXJkaW5nLCBN YXJ0aW4KKyAgIFZvcmzvv71uZGVyLCBTdGV2ZSBXYWx0b24sIEtlbiBXZWF2ZXJsaW5nLCBKb2hu IFdlZWtsZXksIE1hcnRpbiBXaGl0YWtlciwKKyAgIEppbSBXaGl0YnksIE1hdHQgV2lsbG1hbiwg Sm9lbGxlbiBXaW5kc29yLCBGYXJyZWxsIFdvb2RzLCBhbmQgbWFueQorICAgb3RoZXJzIGZvciBi aW5hcmllcywgaG9zdGluZywgcmV2aWV3cywgc3VnZ2VzdGlvbnMsIGFkdmljZSwgYnVnCisgICBy ZXBvcnRzLCBhbmQgYWxsIHRoZSByZXN0IG92ZXIgdGhlIDMrIHllYXIgQy1LZXJtaXQgNy4wIGRl dmVsb3BtZW50CisgICBjeWNsZS4gVGhhbmtzIHRvIFJ1c3MgTmVsc29uIGFuZCB0aGUgYm9hcmQg b2YgdGhlIE9wZW4gU29mdHdhcmUKKyAgIEluaXRpYXRpdmUgKFszNF1odHRwOi8vd3d3Lm9wZW5z b3VyY2Uub3JnKSBmb3IgdGhlaXIgY29vcGVyYXRpb24gaW4KKyAgIGRldmVsb3BpbmcgdGhlIG5l dyBDLUtlcm1pdCBsaWNlbnNlIGFuZCB0byB0aGUgcHJvcHJpZXRvcnMgb2YgdGhvc2UKKyAgIGZy ZWUgVU5JWCBkaXN0cmlidXRpb25zIHRoYXQgaGF2ZSBpbmNvcnBvcmF0ZWQgQy1LZXJtaXQgNy4w IGZvciB0aGVpcgorICAgY29vcGVyYXRpb24gYW5kIHN1cHBvcnQsIGVzcGVjaWFsbHkgRnJlZUJT RCdzIErvv71yZyBXdW5zY2guCisKK05PVEUgVE8gS0VSTUlUIDk1IFVTRVJTCisKKyAgIEtlcm1p dCA5NSBhbmQgQy1LZXJtaXQgc2hhcmUgdGhlIHNhbWUgY29tbWFuZCBhbmQgc2NyaXB0aW5nIGxh bmd1YWdlLAorICAgdGhlIHNhbWUgS2VybWl0IGZpbGUtdHJhbnNmZXIgcHJvdG9jb2wgaW1wbGVt ZW50YXRpb24sIGFuZCBtdWNoIGVsc2UKKyAgIGJlc2lkZXMuCisKKyAgIExpa2UgdGhlIGJvb2sg WzM1XVVzaW5nIEMtS2VybWl0LCB0aGlzIGZpbGUgY29uY2VudHJhdGVzIG9uIHRoZSBhc3BlY3Rz CisgICBvZiBDLUtlcm1pdCB0aGF0IGFyZSBjb21tb24gdG8gYWxsIHZlcnNpb25zOiBVTklYLCBW TVMsIFdpbmRvd3MsIE9TLzIsCisgICBWT1MsIEFPUy9WUywgZXRjLiBQbGVhc2UgcmVmZXIgdG8g eW91ciBLZXJtaXQgOTUgZG9jdW1lbnRhdGlvbiBmb3IKKyAgIGluZm9ybWF0aW9uIHRoYXQgaXMg c3BlY2lmaWMgdG8gS2VybWl0IDk1LgorCisgICBDLUtlcm1pdCA3LjAgY29ycmVzcG9uZHMgdG8g S2VybWl0IDk1IDEuMS4xOS4KKworQy1LRVJNSVQgVkVSU0lPTlMgQU5EIFZFUlNJT04gTlVNQkVS UworCisgICAiQy1LZXJtaXQiIHJlZmVycyB0byBhbGwgdGhlIG1hbnkgcHJvZ3JhbXMgdGhhdCBh cmUgY29tcGlsZWQgaW4gd2hvbGUKKyAgIG9yIGluIHBhcnQgZnJvbSBjb21tb24gQy1sYW5ndWFn ZSBzb3VyY2UgY29kZSwgY29tcHJpc2luZzoKKworICAgICAqIEEgS2VybWl0IGZpbGUgdHJhbnNm ZXIgcHJvdG9jb2wgbW9kdWxlCisgICAgICogQSBjb21tYW5kIHBhcnNlciBhbmQgc2NyaXB0IGV4 ZWN1dGlvbiBtb2R1bGUKKyAgICAgKiBBIG1vZGVtLWRpYWxpbmcgbW9kdWxlCisgICAgICogQSBu ZXR3b3JrIHN1cHBvcnQgbW9kdWxlCisgICAgICogQSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9u IG1vZHVsZS4KKworICAgYW5kIHNldmVyYWwgb3RoZXJzLiBUaGVzZSAic3lzdGVtLWluZGVwZW5k ZW50IiBtb2R1bGVzIGFyZSBjb21iaW5lZAorICAgd2l0aCBzeXN0ZW0tZGVwZW5kZW50IG1vZHVs ZXMgZm9yIGVhY2ggcGxhdGZvcm0gdG8gcHJvdmlkZSB0aGUgcmVxdWlyZWQKKyAgIGlucHV0L291 dHB1dCBmdW5jdGlvbnMsIGFuZCBhbHNvIGluIHNvbWUgY2FzZXMgb3ZlcmxhaWQgd2l0aCBhbgor ICAgYWx0ZXJuYXRpdmUgdXNlciBpbnRlcmZhY2UsIHN1Y2ggYXMgTWFjaW50b3NoIEtlcm1pdCdz IHBvaW50LWFuZC1jbGljaworICAgaW50ZXJmYWNlLCBhbmQgaW4gc29tZSBjYXNlcyBhbHNvIGEg dGVybWluYWwgZW11bGF0b3IsIGFzIEtlcm1pdCA5NS4KKworICAgVGhlIEMtS2VybWl0IHZlcnNp b24gbnVtYmVyIHN0YXJ0ZWQgYXMgMS4wLCAuLi4gMy4wLCA0LjAsIDQuMSBhbmQgdGhlbgorICAg KGJlY2F1c2Ugb2YgY29uZnVzaW9uIGF0IHRoZSB0aW1lIHdpdGggQmVya2VsZXkgVU5JWCA0LjIp LCA0QiwgNEMsIGFuZAorICAgc28gb24sIHdpdGggdGhlIHNwZWNpZmljIGVkaXQgbnVtYmVyIGlu IHBhcmVudGhlc2VzLCBmb3IgZXhhbXBsZQorICAgNEUoMDcyKSBvciA1QSgxODgpLiBUaGlzIHNj aGVtZSB3YXMgdXNlZCB0aHJvdWdoIDVBKDE5MSksIGJ1dCBub3cgd2UKKyAgIGhhdmUgZ29uZSBi YWNrIHRvIHRoZSB0cmFkaXRpb25hbCBudW1iZXJpbmcgc2NoZW1lIHdpdGggZGVjaW1hbCBwb2lu dHM6CisgICBtYWpvci5taW5vci5lZGl0OyBmb3IgZXhhbXBsZSA3LjAuMTk2LiBJbnRlcm5hbCB2 ZXJzaW9uIG51bWJlcnMgKHRoZQorICAgXHYodmVyc2lvbikgdmFyaWFibGUpLCBob3dldmVyLCBh cmUgY29tcGF0aWJsZSBpbiBDLUtlcm1pdCA1QSB1cHdhcmRzLgorCisgICBNZWFud2hpbGUsIEMt S2VybWl0IGRlcml2YXRpdmVzIGZvciBzb21lIHBsYXRmb3JtcyAoV2luZG93cywgTWFjaW50b3No KQorICAgbWlnaHQgZ28gdGhyb3VnaCBzZXZlcmFsIHJlbGVhc2VzIHdoaWxlIEMtS2VybWl0IGl0 c2VsZiByZW1haW5zIHRoZQorICAgc2FtZS4gVGhlc2UgdmVyc2lvbnMgaGF2ZSB0aGVpciBvd24g cGxhdGZvcm0tc3BlY2lmaWMgdmVyc2lvbiBudW1iZXJzLAorICAgc3VjaCBhcyBLZXJtaXQgOTUg MS4xLjEsIDEuMS4yLCBhbmQgc28gb24uCisKKyAgIEMtS2VybWl0IFZlcnNpb24gSGlzdG9yeToK KworICAxLjAgICAgICAgMTk4MS0xOTgyICAgICAgICAgQ29tbWFuZC1saW5lIG9ubHksIDQuMiBC U0QgVU5JWCBvbmx5CisgIDIuMCAgICAgICAoKikgICAgICAgICAgICAgICAod2hvIHJlbWVtYmVy cy4uLikKKyAgMy4wICAgICAgIE1heSAxOTg0ICAgICAgICAgIENvbW1hbmQtbGluZSBvbmx5LCBz dXBwb3J0cyBzZXZlcmFsIHBsYXRmb3JtcworICA0LjAtNC4xICAgRmViLUFwciAxOTg1ICgqKSAg Rmlyc3QgaW50ZXJhY3RpdmUgYW5kIG1vZHVsYXIgdmVyc2lvbgorICA0QygwNTApICAgTWF5IDE5 ODUKKyAgNEQoMDYwKSAgIEFwcmlsIDE5ODYKKyAgNEUoMDY2KSAgIEF1Z3VzdCAxOTg3ICAgICAg IExvbmcgcGFja2V0cworICA0RSgwNjgpICAgSmFudWFyeSAxOTg4CisgIDRFKDA3MikgICBKYW51 YXJ5IDE5ODkKKyAgNEYoMDk1KSAgIEF1Z3VzdCAxOTg5ICgqKSAgIEF0dHJpYnV0ZSBwYWNrZXRz CisgIDVBKDE4OCkgICBOb3ZlbWJlciAxOTkyICAgICBTY3JpcHRpbmcsIFRDUC9JUCwgc2xpZGlu ZyB3aW5kb3dzICgxKQorICA1QSgxODkpICAgU2VwdGVtYmVyIDE5OTMgICAgQ29udHJvbC1jaGFy IHVucHJlZml4aW5nCisgIDVBKDE5MCkgICBPY3RvYmVyIDE5OTQgICAgICBSZWNvdmVyeQorICA1 QSgxOTEpICAgQXByaWwgMTk5NSAgICAgICAgT1MvMiBvbmx5CisgIDYuMC4xOTIgICBTZXB0ZW1i ZXIgMTk5NiAgICBJbnRlbGxpZ2VudCBkaWFsaW5nLCBhdXRvZG93bmxvYWQsIGxvdHMgbW9yZSAo MikKKyAgNi4xLjE5MyAgIDE5OTctOTggKCopICAgICAgIERldmVsb3BtZW50IG9ubHkKKyAgNi4x LjE5NCAgIEp1bmUgMTk5OCAgICAgICAgIEs5NSBvbmx5IC0gc3dpdGNoZXMsIGRpcmVjdG9yeSBy ZWN1cnNpb24sIG1vcmUKKyAgNy4wLjE5NSAgIEF1Z3VzdCAxOTk5ICAgICAgIElLU0QgKyBtb3Jl IChDVSBvbmx5IGFzIEs5NSAxLjEuMTgtQ1UpCisgIDcuMC4xOTYgICAxIEphbnVhcnkgMjAwMCAg ICBVbmljb2RlLCBsb3RzIG1vcmUKKworICAgKCopIE5ldmVyIGZvcm1hbGx5IHJlbGVhc2VkICg0 LjAgd2FzIGEgdG90YWwgcmV3cml0ZSkKKyAgICgxKSBVc2luZyBDLUtlcm1pdCwgMXN0IEVkaXRp b24KKyAgICgyKSBVc2luZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24KKworQ09OVEVOVFMKKworIEku ICBbMzZdQy1LRVJNSVQgRE9DVU1FTlRBVElPTgorCisgSUkuIFszN11ORVcgRkVBVFVSRVMKKwor ICAgICAoMCkgWzM4XUlOQ09NUEFUSUJJTElUSUVTIFdJVEggUFJFVklPVVMgUkVMRUFTRVMKKyAg ICAgKDEpIFszOV1QUk9HUkFNIEFORCBGSUxFIE1BTkFHRU1FTlQgQU5EIENPTU1BTkRTCisgICAg ICAgICAxLjAuICBbNDBdQnVnIGZpeGVzCisgICAgICAgICAxLjEuICBbNDFdQ29tbWFuZCBDb250 aW51YXRpb24KKyAgICAgICAgIDEuMi4gIFs0Ml1FZGl0b3IgSW50ZXJmYWNlCisgICAgICAgICAx LjMuICBbNDNdV2ViIEJyb3dzZXIgYW5kIEZUUCBJbnRlcmZhY2UKKyAgICAgICAgIDEuNC4gIFs0 NF1Db21tYW5kIEVkaXRpbmcKKyAgICAgICAgIDEuNS4gIFs0NV1Db21tYW5kIFN3aXRjaGVzCisg ICAgICAgICAgICAgICAxLjUuMS4gWzQ2XUdlbmVyYWwgU3dpdGNoIFN5bnRheAorICAgICAgICAg ICAgICAgMS41LjIuIFs0N11PcmRlciBhbmQgRWZmZWN0IG9mIFN3aXRjaGVzCisgICAgICAgICAg ICAgICAxLjUuMy4gWzQ4XURpc3Rpbmd1aXNoaW5nIFN3aXRjaGVzIGZyb20gT3RoZXIgRmllbGRz CisgICAgICAgICAgICAgICAxLjUuNC4gWzQ5XVN0YW5kYXJkIEZpbGUgU2VsZWN0aW9uIFN3aXRj aGVzCisgICAgICAgICAgICAgICAxLjUuNS4gWzUwXVNldHRpbmcgUHJlZmVyZW5jZXMgZm9yIERp ZmZlcmVudCBDb21tYW5kcworICAgICAgICAgMS42LiAgWzUxXURhdGVzIGFuZCBUaW1lcworICAg ICAgICAgMS43LiAgWzUyXVBhcnRpYWwgQ29tcGxldGlvbiBvZiBLZXl3b3JkcworICAgICAgICAg MS44LiAgWzUzXUNvbW1hbmQgUmVjYWxsCisgICAgICAgICAxLjkuICBbNTRdRVhJVCBNZXNzYWdl cworICAgICAgICAgMS4xMC4gWzU1XU1hbmFnaW5nIEtleWJvYXJkIEludGVycnVwdGlvbnMKKyAg ICAgICAgIDEuMTEuIFs1Nl1UYW1pbmcgdGhlIFdpbGQgQmFja3NsYXNoIC0tIFBhcnQgRGV1eAor ICAgICAgICAgICAgICAgMS4xMS4xLiBbNTddQmFja2dyb3VuZAorICAgICAgICAgICAgICAgMS4x MS4yLiBbNThdS2VybWl0J3MgUXVvdGluZyBSdWxlcworICAgICAgICAgICAgICAgMS4xMS4zLiBb NTldUGFzc2luZyBET1MgRmlsZW5hbWVzIGZyb20gS2VybWl0IHRvIFNoZWxsIENvbW1hbmRzCisg ICAgICAgICAgICAgICAxLjExLjQuIFs2MF1Vc2luZyBWYXJpYWJsZXMgdG8gSG9sZCBET1MgRmls ZW5hbWVzCisgICAgICAgICAgICAgICAxLjExLjUuIFs2MV1QYXNzaW5nIERPUyBGaWxlbmFtZXMg YXMgUGFyYW1ldGVycyB0byBNYWNyb3MKKyAgICAgICAgICAgICAgIDEuMTEuNi4gWzYyXVBhc3Np bmcgRE9TIEZpbGUgTmFtZXMgZnJvbSBNYWNybyBQYXJhbWV0ZXJzIHRvIHRoZSBECitPUyBTaGVs bAorICAgICAgICAgICAgICAgMS4xMS43LiBbNjNdUGFzc2luZyBET1MgRmlsZW5hbWVzIHRvIEtl cm1pdCBmcm9tIHRoZSBTaGVsbAorICAgICAgICAgMS4xMi4gWzY0XURlYnVnZ2luZworICAgICAg ICAgMS4xMy4gWzY1XUxvZ3MKKyAgICAgICAgIDEuMTQuIFs2Nl1BdXRvbWF0aWMgRmlsZS1UcmFu c2ZlciBQYWNrZXQgUmVjb2duaXRpb24gYXQgdGhlIENvbW1hbmQgUHJvCittcHQKKyAgICAgICAg IDEuMTUuIFs2N11UaGUgVFlQRSBDb21tYW5kCisgICAgICAgICAxLjE2LiBbNjhdVGhlIFJFU0VU IENvbW1hbmQKKyAgICAgICAgIDEuMTcuIFs2OV1UaGUgQ09QWSBhbmQgUkVOQU1FIENvbW1hbmRz CisgICAgICAgICAxLjE4LiBbNzBdVGhlIE1BTlVBTCBDb21tYW5kCisgICAgICAgICAxLjE5LiBb NzFdU3RyaW5nIGFuZCBGaWxlbmFtZSBNYXRjaGluZyBQYXR0ZXJucworICAgICAgICAgMS4yMC4g WzcyXU11bHRpcGxlIENvbW1hbmRzIG9uIE9uZSBMaW5lCisgICAgICAgICAxLjIxLiBbNzNdV2hh dCBEbyBJIEhhdmU/CisgICAgICAgICAxLjIyLiBbNzRdR2VuZXJhbGl6ZWQgRmlsZSBJbnB1dCBh bmQgT3V0cHV0CisgICAgICAgICAgICAgICAxLjIyLjEuIFs3NV1XaHkgQW5vdGhlciBJL08gU3lz dGVtPworICAgICAgICAgICAgICAgMS4yMi4yLiBbNzZdVGhlIEZJTEUgQ29tbWFuZAorICAgICAg ICAgICAgICAgMS4yMi4zLiBbNzddRklMRSBDb21tYW5kIEV4YW1wbGVzCisgICAgICAgICAgICAg ICAxLjIyLjQuIFs3OF1DaGFubmVsIE51bWJlcnMKKyAgICAgICAgICAgICAgIDEuMjIuNS4gWzc5 XUZJTEUgQ29tbWFuZCBFcnJvciBDb2RlcworICAgICAgICAgICAgICAgMS4yMi42LiBbODBdRmls ZSBJL08gVmFyaWFibGVzCisgICAgICAgICAgICAgICAxLjIyLjcuIFs4MV1GaWxlIEkvTyBGdW5j dGlvbnMKKyAgICAgICAgICAgICAgIDEuMjIuOC4gWzgyXUZpbGUgSS9PIEZ1bmN0aW9uIEV4YW1w bGVzCisgICAgICAgICAxLjIzLiBbODNdVGhlIEVYRUMgQ29tbWFuZAorICAgICAgICAgMS4yNC4g Wzg0XUdldHRpbmcgS2V5d29yZCBMaXN0cyB3aXRoICc/JworICAgICAoMikgWzg1XU1BS0lORyBB TkQgVVNJTkcgQ09OTkVDVElPTlMKKyAgICAgICAgIDIuMC4gWzg2XVNFVCBMSU5FIGFuZCBTRVQg SE9TVCBDb21tYW5kIFN3aXRjaGVzCisgICAgICAgICAyLjEuIFs4N11EaWFsaW5nCisgICAgICAg ICAgICAgIDIuMS4xLiBbODhdVGhlIERpYWwgUmVzdWx0IE1lc3NhZ2UKKyAgICAgICAgICAgICAg Mi4xLjIuIFs4OV1Mb25nLURpc3RhbmNlIERpYWxpbmcgQ2hhbmdlcworICAgICAgICAgICAgICAy LjEuMy4gWzkwXUZvcmNpbmcgTG9uZy1EaXN0YW5jZSBEaWFsaW5nCisgICAgICAgICAgICAgIDIu MS40LiBbOTFdRXhjaGFuZ2UtU3BlY2lmaWMgRGlhbGluZyBEZWNpc2lvbnMKKyAgICAgICAgICAg ICAgMi4xLjUuIFs5Ml1DYXV0aW9ucyBhYm91dCBDaGVhcGVzdC1GaXJzdCBEaWFsaW5nCisgICAg ICAgICAgICAgIDIuMS42LiBbOTNdQmxpbmQgRGlhbGluZyAoRGlhbGluZyB3aXRoIE5vIERpYWx0 b25lKQorICAgICAgICAgICAgICAyLjEuNy4gWzk0XVRyaW1taW5nIHRoZSBEaWFsaW5nIERpYWxv ZworICAgICAgICAgICAgICAyLjEuOC4gWzk1XUNvbnRyb2xsaW5nIHRoZSBEaWFsaW5nIFNwZWVk CisgICAgICAgICAgICAgIDIuMS45LiBbOTZdUHJldGVzdGluZyBQaG9uZSBOdW1iZXIgQ29udmVy c2lvbnMKKyAgICAgICAgICAgICAgMi4xLjEwLiBbOTddR3JlYXRlciBDb250cm9sIG92ZXIgUGFy dGlhbCBEaWFsaW5nCisgICAgICAgICAgICAgIDIuMS4xMS4gWzk4XU5ldyBESUFMLXJlbGF0ZWQg VmFyaWFibGVzIGFuZCBGdW5jdGlvbnMKKyAgICAgICAgICAgICAgMi4xLjEyLiBbOTldSW5jcmVh c2VkIEZsZXhpYmlsaXR5IG9mIFBCWCBEaWFsaW5nCisgICAgICAgICAgICAgIDIuMS4xMy4gWzEw MF1UaGUgRElBTCBtYWNybyAtIExhc3QtTWludXRlIFBob25lIE51bWJlciBDb252ZXJzaW9ucwor ICAgICAgICAgICAgICAyLjEuMTQuIFsxMDFdQXV0b21hdGljIFRvbmUvUHVsc2UgRGlhbGluZyBT ZWxlY3Rpb24KKyAgICAgICAgICAgICAgMi4xLjE1LiBbMTAyXURpYWwtTW9kaWZpZXIgVmFyaWFi bGVzCisgICAgICAgICAgICAgIDIuMS4xNi4gWzEwM11HaXZpbmcgTXVsdGlwbGUgTnVtYmVycyB0 byB0aGUgRElBTCBDb21tYW5kCisgICAgICAgICAyLjIuIFsxMDRdTW9kZW1zCisgICAgICAgICAg ICAgIDIuMi4xLiBbMTA1XU5ldyBNb2RlbSBUeXBlcworICAgICAgICAgICAgICAyLjIuMi4gWzEw Nl1OZXcgTW9kZW0gQ29udHJvbHMKKyAgICAgICAgIDIuMy4gWzEwN11URUxORVQgYW5kIFJMT0dJ TgorICAgICAgICAgICAgICAyLjMuMC4gWzEwOF1CdWcgRml4ZXMKKyAgICAgICAgICAgICAgMi4z LjEuIFsxMDldVGVsbmV0IEJpbmFyeSBNb2RlIEJ1ZyBBZGp1c3RtZW50cworICAgICAgICAgICAg ICAyLjMuMi4gWzExMF1WTVMgVUNYIFRlbG5ldCBQb3J0IEJ1ZyBBZGp1c3RtZW50CisgICAgICAg ICAgICAgIDIuMy4zLiBbMTExXVRlbG5ldCBOZXcgRW52aXJvbm1lbnQgT3B0aW9uCisgICAgICAg ICAgICAgIDIuMy40LiBbMTEyXVRlbG5ldCBMb2NhdGlvbiBPcHRpb24KKyAgICAgICAgICAgICAg Mi4zLjUuIFsxMTNdQ29ubmVjdGluZyB0byBSYXcgVENQIFNvY2tldHMKKyAgICAgICAgICAgICAg Mi4zLjYuIFsxMTRdSW5jb21pbmcgVENQIENvbm5lY3Rpb25zCisgICAgICAgICAyLjQuIFsxMTVd VGhlIEVJR0hUQklUIENvbW1hbmQKKyAgICAgICAgIDIuNS4gWzExNl1UaGUgU2VydmljZXMgRGly ZWN0b3J5CisgICAgICAgICAyLjYuIFsxMTddQ2xvc2luZyBDb25uZWN0aW9ucworICAgICAgICAg Mi43LiBbMTE4XVVzaW5nIEMtS2VybWl0IHdpdGggRXh0ZXJuYWwgQ29tbXVuaWNhdGlvbiBQcm9n cmFtcworICAgICAgICAgICAgICAyLjcuMC4gWzExOV1DLUtlcm1pdCBvdmVyIHRuMzI3MCBhbmQg dG41MjUwCisgICAgICAgICAgICAgIDIuNy4xLiBbMTIwXUMtS2VybWl0IG92ZXIgVGVsbmV0Cisg ICAgICAgICAgICAgIDIuNy4yLiBbMTIxXUMtS2VybWl0IG92ZXIgUmxvZ2luCisgICAgICAgICAg ICAgIDIuNy4zLiBbMTIyXUMtS2VybWl0IG92ZXIgU2VyaWFsIENvbW11bmljYXRpb24gUHJvZ3Jh bXMKKyAgICAgICAgICAgICAgMi43LjQuIFsxMjNdQy1LZXJtaXQgb3ZlciBTZWN1cmUgTmV0d29y ayBDbGllbnRzCisgICAgICAgICAgICAgIDIuNy40LjEuIFsxMjRdU1NICisgICAgICAgICAgICAg IDIuNy40LjIuIFsxMjVdU1NMCisgICAgICAgICAgICAgIDIuNy40LjMuIFsxMjZdU1JQCisgICAg ICAgICAgICAgIDIuNy40LjQuIFsxMjddU09DS1MKKyAgICAgICAgICAgICAgMi43LjQuNS4gWzEy OF1LZXJiZXJvcyBhbmQgU1JQCisgICAgICAgICAyLjguIFsxMjldU2NyaXB0aW5nIExvY2FsIFBy b2dyYW1zCisgICAgICAgICAyLjkuIFsxMzBdWC4yNSBOZXR3b3JraW5nCisgICAgICAgICAgICAg IDIuOS4xLiBbMTMxXUlCTSBBSVhMaW5rL1guMjUgTmV0d29yayBQcm92aWRlciBJbnRlcmZhY2Ug Zm9yIEFJWAorICAgICAgICAgICAgICAyLjkuMi4gWzEzMl1IUC1VWCBYLjI1CisgICAgICAgICAy LjEwLiBbMTMzXUFkZGl0aW9uYWwgU2VyaWFsIFBvcnQgQ29udHJvbHMKKyAgICAgICAgIDIuMTEu IFsxMzRdR2V0dGluZyBBY2Nlc3MgdG8gdGhlIERpYWxvdXQgRGV2aWNlCisgICAgICAgICAyLjEy LiBbMTM1XVRoZSBDb25uZWN0aW9uIExvZworICAgICAgICAgMi4xMy4gWzEzNl1BdXRvbWF0aWMg Q29ubmVjdGlvbi1TcGVjaWZpYyBGbG93IENvbnRyb2wgU2VsZWN0aW9uCisgICAgICAgICAyLjE0 LiBbMTM3XVRyYXBwaW5nIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCBhbmQgTG9zcworICAgICAg ICAgMi4xNS4gWzEzOF1Db250YWN0aW5nIFdlYiBTZXJ2ZXJzIHdpdGggdGhlIEhUVFAgQ29tbWFu ZAorICAgICAoMykgWzEzOV1URVJNSU5BTCBDT05ORUNUSU9OCisgICAgICAgICAzLjEuIFsxNDBd Q09OTkVDVCBDb21tYW5kIFN3aXRjaGVzCisgICAgICAgICAzLjIuIFsxNDFdVHJpZ2dlcnMKKyAg ICAgICAgIDMuMy4gWzE0Ml1UcmFuc3BhcmVudCBQcmludGluZworICAgICAgICAgMy40LiBbMTQz XUJpbmFyeSBhbmQgVGV4dCBTZXNzaW9uIExvZ3MKKyAgICAgKDQpIFsxNDRdRklMRSBUUkFOU0ZF UiBBTkQgTUFOQUdFTUVOVAorICAgICAgICAgNC4wLiBbMTQ1XUJ1ZyBGaXhlcywgTWlub3IgQ2hh bmdlcywgYW5kIENsYXJpZmljYXRpb25zCisgICAgICAgICA0LjEuIFsxNDZdRmlsZS1UcmFuc2Zl ciBGaWxlbmFtZSBUZW1wbGF0ZXMKKyAgICAgICAgIDQuMS4xLiBbMTQ3XVRlbXBsYXRlcyBpbiB0 aGUgQXMtTmFtZQorICAgICAgICAgNC4xLjIuIFsxNDhdVGVtcGxhdGVzIG9uIHRoZSBDb21tYW5k IExpbmUKKyAgICAgICAgIDQuMS4zLiBbMTQ5XVBvc3QtVHJhbnNmZXIgUmVuYW1pbmcKKyAgICAg ICAgIDQuMi4gWzE1MF1GaWxlLVRyYW5zZmVyIFBpcGVzIGFuZCBGaWx0ZXJzCisgICAgICAgICA0 LjIuMS4gWzE1MV1JbnRyb2R1Y3Rpb24KKyAgICAgICAgIDQuMi4xLjEuIFsxNTJdVGVybWlub2xv Z3kKKyAgICAgICAgIDQuMi4xLjIuIFsxNTNdTm90YXRpb24KKyAgICAgICAgIDQuMi4xLjMuIFsx NTRdU2VjdXJpdHkKKyAgICAgICAgIDQuMi4yLiBbMTU1XUNvbW1hbmRzIGZvciBUcmFuc2ZlcnJp bmcgZnJvbSBhbmQgdG8gUGlwZXMKKyAgICAgICAgIDQuMi4yLjEuIFsxNTZdU2VuZGluZyBmcm9t IGEgQ29tbWFuZAorICAgICAgICAgNC4yLjIuMi4gWzE1N11SZWNlaXZpbmcgdG8gYSBDb21tYW5k CisgICAgICAgICA0LjIuMy4gWzE1OF1Vc2luZyBGaWxlLVRyYW5zZmVyIEZpbHRlcnMKKyAgICAg ICAgIDQuMi4zLjEuIFsxNTldVGhlIFNFTkQgRmlsdGVyCisgICAgICAgICA0LjIuMy4yLiBbMTYw XVRoZSBSRUNFSVZFIEZpbHRlcgorICAgICAgICAgNC4yLjQuIFsxNjFdSW1wbGljaXQgVXNlIG9m IFBpcGVzCisgICAgICAgICA0LjIuNS4gWzE2Ml1TdWNjZXNzIGFuZCBGYWlsdXJlIG9mIFBpcGVk IENvbW1hbmRzCisgICAgICAgICA0LjIuNi4gWzE2M11DYXV0aW9ucyBhYm91dCBVc2luZyBQaXBl cyB0byBUcmFuc2ZlciBEaXJlY3RvcnkgVHJlZXMKKyAgICAgICAgIDQuMi43LiBbMTY0XVBpcGVz IGFuZCBFbmNyeXB0aW9uCisgICAgICAgICA0LjIuOC4gWzE2NV1Db21tYW5kcyBhbmQgRnVuY3Rp b25zIFJlbGF0ZWQgdG8gUGlwZXMKKyAgICAgICAgIDQuMi44LjEuIFsxNjZdVGhlIE9QRU4gIVJF QUQgYW5kIE9QRU4gIVdSSVRFIENvbW1hbmRzCisgICAgICAgICA0LjIuOC4yLiBbMTY3XVRoZSBS RURJUkVDVCBDb21tYW5kCisgICAgICAgICA0LjIuOC4zLiBbMTY4XVJlY2VpdmluZyBNYWlsIGFu ZCBQcmludCBKb2JzCisgICAgICAgICA0LjIuOC40LiBbMTY5XVBpcGUtUmVsYXRlZCBGdW5jdGlv bnMKKyAgICAgICAgIDQuMy4gWzE3MF1BdXRvbWF0aWMgUGVyLUZpbGUgVGV4dC9CaW5hcnkgTW9k ZSBTd2l0Y2hpbmcKKyAgICAgICAgIDQuMy4xLiBbMTcxXUV4Y2VwdGlvbnMKKyAgICAgICAgIDQu My4yLiBbMTcyXU92ZXJ2aWV3CisgICAgICAgICA0LjMuMy4gWzE3M11Db21tYW5kcworICAgICAg ICAgNC4zLjQuIFsxNzRdRXhhbXBsZXMKKyAgICAgICAgIDQuNC4gWzE3NV1GaWxlIFBlcm1pc3Np b25zCisgICAgICAgICA0LjQuMS4gWzE3Nl1XaGVuIEFUVFJJQlVURVMgUFJPVEVDVElPTiBpcyBP RkYKKyAgICAgICAgIDQuNC4xLjEuIFsxNzddVW5peAorICAgICAgICAgNC40LjEuMi4gWzE3OF1W TVMKKyAgICAgICAgIDQuNC4yLiBbMTc5XVdoZW4gQVRUUklCVVRFUyBQUk9URUNUSU9OIGlzIE9O CisgICAgICAgICA0LjQuMi4xLiBbMTgwXVN5c3RlbS1TcGVjaWZpYyBQZXJtaXNzaW9ucworICAg ICAgICAgNC40LjIuMS4xLiBbMTgxXVVOSVgKKyAgICAgICAgIDQuNC4yLjEuMi4gWzE4Ml1WTVMK KyAgICAgICAgIDQuNC4yLjIuIFsxODNdU3lzdGVtLUluZGVwZW5kZW50IFBlcm1pc3Npb25zCisg ICAgICAgICA0LjUuIFsxODRdRmlsZSBNYW5hZ2VtZW50IENvbW1hbmRzCisgICAgICAgICA0LjUu MS4gWzE4NV1UaGUgRElSRUNUT1JZIENvbW1hbmQKKyAgICAgICAgIDQuNS4yLiBbMTg2XVRoZSBD RCBhbmQgQkFDSyBDb21tYW5kcworICAgICAgICAgNC41LjIuMS4gWzE4N11QYXJzaW5nIEltcHJv dmVtZW50cworICAgICAgICAgNC41LjIuMi4gWzE4OF1UaGUgQ0RQQVRICisgICAgICAgICA0LjUu My4gWzE4OV1DcmVhdGluZyBhbmQgUmVtb3ZpbmcgRGlyZWN0b3JpZXMKKyAgICAgICAgIDQuNS40 LiBbMTkwXVRoZSBERUxFVEUgYW5kIFBVUkdFIENvbW1hbmRzCisgICAgICAgICA0LjYuIFsxOTFd U3RhcnRpbmcgdGhlIFJlbW90ZSBLZXJtaXQgU2VydmVyIEF1dG9tYXRpY2FsbHkKKyAgICAgICAg IDQuNy4gWzE5Ml1GaWxlLVRyYW5zZmVyIENvbW1hbmQgU3dpdGNoZXMKKyAgICAgICAgIDQuNy4x LiBbMTkzXVNFTkQgQ29tbWFuZCBTd2l0Y2hlcworICAgICAgICAgNC43LjIuIFsxOTRdR0VUIENv bW1hbmQgU3dpdGNoZXMKKyAgICAgICAgIDQuNy4zLiBbMTk1XVJFQ0VJVkUgQ29tbWFuZCBTd2l0 Y2hlcworICAgICAgICAgNC44LiBbMTk2XU1pbm9yIEtlcm1pdCBQcm90b2NvbCBJbXByb3ZlbWVu dHMKKyAgICAgICAgIDQuOC4xLiBbMTk3XU11bHRpcGxlIEF0dHJpYnV0ZSBQYWNrZXRzCisgICAg ICAgICA0LjguMi4gWzE5OF1WZXJ5IFNob3J0IFBhY2tldHMKKyAgICAgICAgIDQuOS4gWzE5OV1X aWxkY2FyZCAvIEZpbGUgR3JvdXAgRXhwYW5zaW9uCisgICAgICAgICA0LjkuMS4gWzIwMF1JbiBV TklYIEMtS2VybWl0CisgICAgICAgICA0LjkuMi4gWzIwMV1JbiBLZXJtaXQgOTUKKyAgICAgICAg IDQuOS4zLiBbMjAyXUluIFZNUywgQU9TL1ZTLCBPUy05LCBWT1MsIGV0Yy4KKyAgICAgICAgIDQu MTAuIFsyMDNdQWRkaXRpb25hbCBQYXRobmFtZSBDb250cm9scworICAgICAgICAgNC4xMS4gWzIw NF1SZWN1cnNpdmUgU0VORCBhbmQgR0VUOiBUcmFuc2ZlcnJpbmcgRGlyZWN0b3J5IFRyZWVzCisg ICAgICAgICA0LjExLjEuIFsyMDVdQ29tbWFuZC1MaW5lIE9wdGlvbnMKKyAgICAgICAgIDQuMTEu Mi4gWzIwNl1UaGUgU0VORCAvUkVDVVJTSVZFIENvbW1hbmQKKyAgICAgICAgIDQuMTEuMy4gWzIw N11UaGUgR0VUIC9SRUNVUlNJVkUgQ29tbWFuZAorICAgICAgICAgNC4xMS40LiBbMjA4XU5ldyBh bmQgQ2hhbmdlZCBGaWxlIEZ1bmN0aW9ucworICAgICAgICAgNC4xMS41LiBbMjA5XU1vdmluZyBE aXJlY3RvcnkgVHJlZXMgQmV0d2VlbiBMaWtlIFN5c3RlbXMKKyAgICAgICAgIDQuMTEuNi4gWzIx MF1Nb3ZpbmcgRGlyZWN0b3J5IFRyZWVzIEJldHdlZW4gVW5saWtlIFN5c3RlbXMKKyAgICAgICAg IDQuMTIuIFsyMTFdV2hlcmUgRGlkIE15IEZpbGUgR28/CisgICAgICAgICA0LjEzLiBbMjEyXUZp bGUgT3V0cHV0IEJ1ZmZlciBDb250cm9sCisgICAgICAgICA0LjE0LiBbMjEzXUltcHJvdmVkIFJl c3BvbnNpdmVuZXNzCisgICAgICAgICA0LjE1LiBbMjE0XURvdWJsaW5nIGFuZCBJZ25vcmluZyBD aGFyYWN0ZXJzIGZvciBUcmFuc3BhcmVuY3kKKyAgICAgICAgIDQuMTYuIFsyMTVdTmV3IEZpbGUt VHJhbnNmZXIgRGlzcGxheSBGb3JtYXRzCisgICAgICAgICA0LjE3LiBbMjE2XU5ldyBUcmFuc2Fj dGlvbiBMb2cgRm9ybWF0cworICAgICAgICAgNC4xNy4xLiBbMjE3XVRoZSBCUklFRiBGb3JtYXQK KyAgICAgICAgIDQuMTcuMi4gWzIxOF1UaGUgRlRQIEZvcm1hdAorICAgICAgICAgNC4xOC4gWzIx OV1VbnByZWZpeGluZyBOVUwKKyAgICAgICAgIDQuMTkuIFsyMjBdQ2xlYXItQ2hhbm5lbCBQcm90 b2NvbAorICAgICAgICAgNC4yMC4gWzIyMV1TdHJlYW1pbmcgUHJvdG9jb2wKKyAgICAgICAgIDQu MjAuMS4gWzIyMl1Db21tYW5kcyBmb3IgU3RyZWFtaW5nCisgICAgICAgICA0LjIwLjIuIFsyMjNd RXhhbXBsZXMgb2YgU3RyZWFtaW5nCisgICAgICAgICA0LjIwLjIuMS4gWzIyNF1TdHJlYW1pbmcg b24gU29ja2V0LXRvLVNvY2tldCBDb25uZWN0aW9ucworICAgICAgICAgNC4yMC4yLjIuIFsyMjVd U3RyZWFtaW5nIG9uIFRlbG5ldCBDb25uZWN0aW9ucworICAgICAgICAgNC4yMC4yLjMuIFsyMjZd U3RyZWFtaW5nIHdpdGggTGltaXRlZCBQYWNrZXQgTGVuZ3RoCisgICAgICAgICA0LjIwLjIuNC4g WzIyN11TdHJlYW1pbmcgb24gRGlhbHVwIENvbm5lY3Rpb25zCisgICAgICAgICA0LjIwLjIuNS4g WzIyOF1TdHJlYW1pbmcgb24gWC4yNSBDb25uZWN0aW9ucworICAgICAgICAgNC4yMC4zLiBbMjI5 XVN0cmVhbWluZyAtIFByZWxpbWluYXJ5IENvbmNsdXNpb25zCisgICAgICAgICA0LjIxLiBbMjMw XVRoZSBUUkFOU01JVCBDb21tYW5kCisgICAgICAgICA0LjIyLiBbMjMxXUNvcGluZyB3aXRoIEZh dWx0eSBLZXJtaXQgSW1wbGVtZW50YXRpb25zCisgICAgICAgICA0LjIyLjEuIFsyMzJdRmFpbHVy ZSB0byBBY2NlcHQgTW9kZXJuIE5lZ290aWF0aW9uIFN0cmluZ3MKKyAgICAgICAgIDQuMjIuMi4g WzIzM11GYWlsdXJlIHRvIE5lZ290aWF0ZSA4dGgtYml0IFByZWZpeGluZworICAgICAgICAgNC4y Mi4zLiBbMjM0XUNvcnJ1cHQgRmlsZXMKKyAgICAgICAgIDQuMjIuNC4gWzIzNV1TcHVyaW91cyBD YW5jZWxsYXRpb25zCisgICAgICAgICA0LjIyLjUuIFsyMzZdU3B1cmlvdXMgUmVmdXNhbHMKKyAg ICAgICAgIDQuMjIuNi4gWzIzN11GYWlsdXJlcyBkdXJpbmcgdGhlIERhdGEgVHJhbnNmZXIgUGhh c2UKKyAgICAgICAgIDQuMjIuNy4gWzIzOF1GcmFjdHVyZWQgRmlsZW5hbWVzCisgICAgICAgICA0 LjIyLjguIFsyMzldQmFkIEZpbGUgRGF0ZXMKKyAgICAgICAgIDQuMjMuIFsyNDBdRmlsZSBUcmFu c2ZlciBSZWNvdmVyeQorICAgICAgICAgNC4yNC4gWzI0MV1GSUxFIENPTExJU0lPTiBVUERBVEUg Q2xhcmlmaWNhdGlvbgorICAgICAgICAgNC4yNS4gWzI0Ml1BdXRvZG93bmxvYWQgSW1wcm92ZW1l bnRzCisgICAgICg1KSBbMjQzXUNMSUVOVC9TRVJWRVIKKyAgICAgICAgIDUuMC4gWzI0NF1IaW50 cworICAgICAgICAgNS4xLiBbMjQ1XU5ldyBDb21tYW5kLUxpbmUgT3B0aW9ucworICAgICAgICAg NS4yLiBbMjQ2XU5ldyBDbGllbnQgQ29tbWFuZHMKKyAgICAgICAgIDUuMy4gWzI0N11OZXcgU2Vy dmVyIENhcGFiaWxpdGllcworICAgICAgICAgNS4zLjEuIFsyNDhdQ3JlYXRpbmcgYW5kIFJlbW92 aW5nIERpcmVjdG9yaWVzCisgICAgICAgICA1LjMuMi4gWzI0OV1EaXJlY3RvcnkgTGlzdGluZ3MK KyAgICAgICAgIDUuNC4gWzI1MF1TeW50YXggZm9yIFJlbW90ZSBGaWxlbmFtZXMgd2l0aCBFbWJl ZGRlZCBTcGFjZXMKKyAgICAgICAgIDUuNS4gWzI1MV1BdXRvbWF0aWMgT3JpZW50YXRpb24gTWVz c2FnZXMgdXBvbiBEaXJlY3RvcnkgQ2hhbmdlCisgICAgICAgICA1LjYuIFsyNTJdTmV3IFNlcnZl ciBDb250cm9scworICAgICAgICAgNS43LiBbMjUzXVRpbWVvdXRzIGR1cmluZyBSRU1PVEUgSE9T VCBDb21tYW5kIEV4ZWN1dGlvbgorICAgICAoNikgWzI1NF1JTlRFUk5BVElPTkFMIENIQVJBQ1RF UiBTRVRTCisgICAgICAgICA2LjAuIFsyNTVdSVNPIDg4NTktMTUgTGF0aW4gQWxwaGFiZXQgOQor ICAgICAgICAgNi4xLiBbMjU2XVRoZSBIUC1Sb21hbjggQ2hhcmFjdGVyIFNldAorICAgICAgICAg Ni4yLiBbMjU3XUdyZWVrIENoYXJhY3RlciBTZXRzCisgICAgICAgICA2LjMuIFsyNThdQWRkaXRp b25hbCBMYXRpbi0yIENoYXJhY3RlciBTZXRzCisgICAgICAgICA2LjQuIFsyNTldQWRkaXRpb25h bCBDeXJpbGxpYyBDaGFyYWN0ZXIgU2V0cworICAgICAgICAgNi41LiBbMjYwXUF1dG9tYXRpYyBD aGFyYWN0ZXItU2V0IFN3aXRjaGluZworICAgICAgICAgNi42LiBbMjYxXVVuaWNvZGUKKyAgICAg ICAgIDYuNi4xLiBbMjYyXU92ZXJ2aWV3IG9mIFVuaWNvZGUKKyAgICAgICAgIDYuNi4yLiBbMjYz XVVDUyBCeXRlIE9yZGVyCisgICAgICAgICA2LjYuMi4gWzI2NF1VQ1MgVHJhbnNmb3JtYXRpb24g Rm9ybWF0cworICAgICAgICAgNi42LjMuIFsyNjVdQ29uZm9ybWFuY2UgTGV2ZWxzCisgICAgICAg ICA2LjYuNC4gWzI2Nl1SZWxhdGlvbnNoaXAgb2YgVW5pY29kZSB3aXRoIEtlcm1pdCdzIE90aGVy IENoYXJhY3RlciBTZXRzCisgICAgICAgICA2LjYuNS4gWzI2N11LZXJtaXQncyBVbmljb2RlIEZl YXR1cmVzCisgICAgICAgICA2LjYuNS4xLiBbMjY4XUZpbGUgVHJhbnNmZXIKKyAgICAgICAgIDYu Ni41LjIuIFsyNjldVGhlIFRSQU5TTEFURSBDb21tYW5kCisgICAgICAgICA2LjYuNS4zLiBbMjcw XVRlcm1pbmFsIENvbm5lY3Rpb24KKyAgICAgICAgIDYuNi41LjQuIFsyNzFdVGhlIFRSQU5TTUlU IENvbW1hbmQKKyAgICAgICAgIDYuNi41LjUuIFsyNzJdU3VtbWFyeSBvZiBLZXJtaXQgVW5pY29k ZSBDb21tYW5kcworICAgICAgICAgNi43LiBbMjczXUNsaWVudC9TZXJ2ZXIgQ2hhcmFjdGVyLVNl dCBTd2l0Y2hpbmcKKyAgICAgKDcpIFsyNzRdU0NSSVBUIFBST0dSQU1NSU5HCisgICAgICAgICA3 LjAuIFsyNzVdQnVnIEZpeGVzCisgICAgICAgICA3LjEuIFsyNzZdVGhlIElOUFVUIENvbW1hbmQK KyAgICAgICAgIDcuMS4xLiBbMjc3XUlOUFVUIFRpbWVvdXRzCisgICAgICAgICA3LjEuMi4gWzI3 OF1OZXcgSU5QVVQgQ29udHJvbHMKKyAgICAgICAgIDcuMS4zLiBbMjc5XUlOUFVUIHdpdGggUGF0 dGVybiBNYXRjaGluZworICAgICAgICAgNy4xLjQuIFsyODBdVGhlIElOUFVUIE1hdGNoIFJlc3Vs dAorICAgICAgICAgNy4yLiBbMjgxXU5ldyBvciBJbXByb3ZlZCBCdWlsdC1JbiBWYXJpYWJsZXMK KyAgICAgICAgIDcuMy4gWzI4Ml1OZXcgb3IgSW1wcm92ZWQgQnVpbHQtSW4gRnVuY3Rpb25zCisg ICAgICAgICA3LjQuIFsyODNdTmV3IElGIENvbmRpdGlvbnMKKyAgICAgICAgIDcuNS4gWzI4NF1V c2luZyBNb3JlIHRoYW4gVGVuIE1hY3JvIEFyZ3VtZW50cworICAgICAgICAgNy42LiBbMjg1XUNs YXJpZmljYXRpb24gb2YgRnVuY3Rpb24gQ2FsbCBTeW50YXgKKyAgICAgICAgIDcuNy4gWzI4Nl1B dXRvZG93bmxvYWQgZHVyaW5nIElOUFVUIENvbW1hbmQgRXhlY3V0aW9uCisgICAgICAgICA3Ljgu IFsyODddQnVpbHQtaW4gSGVscCBmb3IgRnVuY3Rpb25zLgorICAgICAgICAgNy45LiBbMjg4XVZh cmlhYmxlIEFzc2lnbm1lbnRzCisgICAgICAgICA3LjkuMS4gWzI4OV1Bc3NpZ25tZW50IE9wZXJh dG9ycworICAgICAgICAgNy45LjIuIFsyOTBdTmV3IEFzc2lnbm1lbnQgQ29tbWFuZHMKKyAgICAg ICAgIDcuMTAuIFsyOTFdQXJyYXlzCisgICAgICAgICA3LjEwLjEuIFsyOTJdQXJyYXkgSW5pdGlh bGl6ZXJzCisgICAgICAgICA3LjEwLjIuIFsyOTNdVHVybmluZyBhIFN0cmluZyBpbnRvIGFuIEFy cmF5IG9mIFdvcmRzCisgICAgICAgICA3LjEwLjMuIFsyOTRdQXJyYXlzIG9mIEZpbGVuYW1lcwor ICAgICAgICAgNy4xMC40LiBbMjk1XUF1dG9tYXRpYyBBcnJheXMKKyAgICAgICAgIDcuMTAuNS4g WzI5Nl1Tb3J0aW5nIEFycmF5cworICAgICAgICAgNy4xMC42LiBbMjk3XURpc3BsYXlpbmcgQXJy YXlzCisgICAgICAgICA3LjEwLjcuIFsyOThdT3RoZXIgQXJyYXkgT3BlcmF0aW9ucworICAgICAg ICAgNy4xMC44LiBbMjk5XUhpbnRzIGZvciBVc2luZyBBcnJheXMKKyAgICAgICAgIDcuMTAuOS4g WzMwMF1Eby1JdC1Zb3Vyc2VsZiBBcnJheXMKKyAgICAgICAgIDcuMTAuMTAuIFszMDFdQXNzb2Np YXRpdmUgQXJyYXlzCisgICAgICAgICA3LjExLiBbMzAyXU9VVFBVVCBDb21tYW5kIEltcHJvdmVt ZW50cworICAgICAgICAgNy4xMi4gWzMwM11GdW5jdGlvbiBhbmQgVmFyaWFibGUgRGlhZ25vc3Rp Y3MKKyAgICAgICAgIDcuMTMuIFszMDRdUmV0dXJuIFZhbHVlIG9mIE1hY3JvcworICAgICAgICAg Ny4xNC4gWzMwNV1UaGUgQVNTRVJULCBGQUlMLCBhbmQgU1VDQ0VFRCBDb21tYW5kcy4KKyAgICAg ICAgIDcuMTUuIFszMDZdVXNpbmcgQWxhcm1zCisgICAgICAgICA3LjE2LiBbMzA3XVBhc3Npbmcg QXJndW1lbnRzIHRvIENvbW1hbmQgRmlsZXMKKyAgICAgICAgIDcuMTcuIFszMDhdRGlhbG9ncyB3 aXRoIFRpbWVkIFJlc3BvbnNlcworICAgICAgICAgNy4xOC4gWzMwOV1JbmNyZWFzZWQgRmxleGli aWxpdHkgb2YgU1dJVENIIENhc2UgTGFiZWxzCisgICAgICAgICA3LjE5LiAiWzMxMF1LZXJiYW5n IiBTY3JpcHRzCisgICAgICAgICA3LjIwLiBbMzExXUlGIGFuZCBYSUYgU3RhdGVtZW50IFN5bnRh eAorICAgICAgICAgNy4yMC4xLiBbMzEyXVRoZSBJRi9YSUYgRGlzdGluY3Rpb24KKyAgICAgICAg IDcuMjAuMi4gWzMxM11Cb29sZWFuIEV4cHJlc3Npb25zIChUaGUgSUYvV0hJTEUgQ29uZGl0aW9u KQorICAgICAgICAgNy4yMS4gWzMxNF1TY3JlZW4gRm9ybWF0dGluZyBhbmQgQ3Vyc29yIENvbnRy b2wKKyAgICAgICAgIDcuMjIuIFszMTVdRXZhbHVhdGluZyBBcml0aG1ldGljIEV4cHJlc3Npb25z CisgICAgICAgICA3LjIzLiBbMzE2XUZsb2F0aW5nLVBvaW50IEFyaXRobWV0aWMKKyAgICAgICAg IDcuMjQuIFszMTddVHJhY2luZyBTY3JpcHQgRXhlY3V0aW9uCisgICAgICAgICA3LjI1LiBbMzE4 XUNvbXBhY3QgU3Vic3RyaW5nIE5vdGF0aW9uCisgICAgICAgICA3LjI2LiBbMzE5XU5ldyBXQUlU IENvbW1hbmQgT3B0aW9ucworICAgICAgICAgNy4yNi4xLiBbMzIwXVdhaXRpbmcgZm9yIE1vZGVt IFNpZ25hbHMKKyAgICAgICAgIDcuMjYuMi4gWzMyMV1XYWl0aW5nIGZvciBGaWxlIEV2ZW50cwor ICAgICAgICAgNy4yNy4gWzMyMl1SZWxheGVkIEZPUiBhbmQgU1dJVENIIFN5bnRheAorICAgICAo OCkgWzMyM11VU0lORyBPVEhFUiBGSUxFIFRSQU5TRkVSIFBST1RPQ09MUworICAgICAoOSkgWzMy NF1DT01NQU5ELUxJTkUgT1BUSU9OUworICAgICAgICAgOS4wLiBbMzI1XUV4dGVuZGVkLUZvcm1h dCBDb21tYW5kLUxpbmUgT3B0aW9ucworICAgICAgICAgOS4xLiBbMzI2XUNvbW1hbmQgTGluZSBQ ZXJzb25hbGl0aWVzCisgICAgICAgICA5LjIuIFszMjddQnVpbHQtaW4gSGVscCBmb3IgQ29tbWFu ZCBMaW5lIE9wdGlvbnMKKyAgICAgICAgIDkuMy4gWzMyOF1OZXcgQ29tbWFuZC1MaW5lIE9wdGlv bnMKKyAgICAoMTApIFszMjldQy1LRVJNSVQgQU5EIEctS0VSTUlUCisKK0lJSS4gWzMzMF1BUFBF TkRJQ0VTCisKK0lJSS4xLiBbMzMxXUNoYXJhY3RlciBTZXQgVGFibGVzCitJSUkuMS4xLiBbMzMy XVRoZSBIZXdsZXR0IFBhY2thcmQgUm9tYW44IENoYXJhY3RlciBTZXQKK0lJSS4xLjIuIFszMzNd R3JlZWsgQ2hhcmFjdGVyIFNldHMKK0lJSS4xLjIuMS4gWzMzNF1UaGUgSVNPIDg4NTktNyBMYXRp biAvIEdyZWVrIEFscGhhYmV0CitJSUkuMS4yLjIuIFszMzVdVGhlIEVMT1QgOTI3IENoYXJhY3Rl ciBTZXQKK0lJSS4xLjIuMy4gWzMzNl1QQyBDb2RlIFBhZ2UgODY5CitJSUkuMi4gWzMzN11VcGRh dGVkIENvdW50cnkgQ29kZXMKKworSVYuIFszMzhdRVJSQVRBICYgQ09SUklHRU5EQTogQ29ycmVj dGlvbnMgdG8gIlVzaW5nIEMtS2VybWl0IiAybmQgRWRpdGlvbi4KK1YuIFszMzldQURESVRJT05B TCBDT1BZUklHSFQgTk9USUNFUworCitJLiBDLUtFUk1JVCBET0NVTUVOVEFUSU9OCisKKyAgIFRo ZSB1c2VyIG1hbnVhbCBmb3IgQy1LZXJtaXQgaXM6CisKKyAgICAgRnJhbmsgZGEgQ3J1eiBhbmQg Q2hyaXN0aW5lIE0uIEdpYW5vbmUsIFszNDBdVXNpbmcgQy1LZXJtaXQsIFNlY29uZAorICAgICBF ZGl0aW9uLCBEaWdpdGFsIFByZXNzIC8gQnV0dGVyd29ydGgtSGVpbmVtYW5uLCBXb2J1cm4sIE1B LCAxOTk3LAorICAgICA2MjIgcGFnZXMsIElTQk4gMS01NTU1OC0xNjQtMS4KKworICAgWzM0MV1D TElDSyBIRVJFIGZvciByZXZpZXdzLgorCisgICBUaGUgcHJlc2VudCBkb2N1bWVudCBpcyBhIHN1 cHBsZW1lbnQgdG8gVXNpbmcgQy1LZXJtaXQgMm5kIEVkLCBub3QgYQorICAgcmVwbGFjZW1lbnQg Zm9yIGl0LgorCisgICBVUyBzaW5nbGUtY29weSBwcmljZTogJDUyLjk1OyBxdWFudGl0eSBkaXNj b3VudHMgYXZhaWxhYmxlLiBBdmFpbGFibGUKKyAgIGluIGJvb2tzdG9yZXMgb3IgZGlyZWN0bHkg ZnJvbSBDb2x1bWJpYSBVbml2ZXJzaXR5OgorCisgIFRoZSBLZXJtaXQgUHJvamVjdAorICBDb2x1 bWJpYSBVbml2ZXJzaXR5CisgIDYxMiBXZXN0IDExNXRoIFN0cmVldAorICBOZXcgWW9yayBOWSAg MTAwMjUtNzc5OQorICBVU0EKKyAgVGVsZXBob25lOiArMSAoMjEyKSA4NTQtMzcwMworICBGYXg6 ICAgICAgICsxICgyMTIpIDY2Mi02NDQyCisKKyAgIERvbWVzdGljIGFuZCBvdmVyc2VhcyBvcmRl cnMgYWNjZXB0ZWQuIFByaWNlOiBVUyAkNDQuOTUgKFVTLCBDYW5hZGEsCisgICBhbmQgTWV4aWNv KS4gU2hpcHBpbmc6ICQ0LjAwIHdpdGhpbiB0aGUgVVNBOyAkMTUuMDAgdG8gYWxsIG90aGVyCisg ICBjb3VudHJpZXMuIE9yZGVycyBtYXkgYmUgcGFpZCBieSBNYXN0ZXJDYXJkIG9yIFZpc2EsIG9y IHByZXBhaWQgYnkKKyAgIGNoZWNrIGluIFVTIGRvbGxhcnMuIEFkZCAkNjUgYmFuayBmZWUgZm9y IGNoZWNrcyBub3QgZHJhd24gb24gYSBVUworICAgYmFuay4gRG8gbm90IGluY2x1ZGUgc2FsZXMg dGF4LiBJbnF1aXJlIGFib3V0IHF1YW50aXR5IGRpc2NvdW50cy4KKworICAgWW91IGNhbiBhbHNv IG9yZGVyIGJ5IHBob25lIGZyb20gdGhlIHB1Ymxpc2hlciwgRGlnaXRhbCBQcmVzcyAvCisgICBb MzQyXUJ1dHRlcndvcnRoLUhlaW5lbWFubiwgd2l0aCBNYXN0ZXJDYXJkLCBWaXNhLCBvciBBbWVy aWNhbiBFeHByZXNzOgorCisgICsxIDgwMCAzNjYtMjY2NSAgIChXb2J1cm4sIE1hc3NhY2h1c2V0 dHMgb2ZmaWNlIGZvciBVU0EgJiBDYW5hZGEpCisgICs0NCAxODY1IDMxNDYyNyAgIChPeGZvcmQs IEVuZ2xhbmQgZGlzdHJpYnV0aW9uIGNlbnRyZSBmb3IgVUsgJiBFdXJvcGUpCisgICs2MSAwMyA5 MjQ1IDcxMTEgIChNZWxib3VybmUsIFZpYywgb2ZmaWNlIGZvciBBdXN0cmFsaWEgJiBOWikKKyAg KzY1IDM1Ni0xOTY4ICAgICAgKFNpbmdhcG9yZSBvZmZpY2UgZm9yIEFzaWEpCisgICsyNyAoMzEp IDI2ODMxMTEgIChEdXJiYW4gb2ZmaWNlIGZvciBTb3V0aCBBZnJpY2EpCisKKyAgIEEgWzM0M11H ZXJtYW4tbGFuZ3VhZ2UgZWRpdGlvbiBvZiB0aGUgRmlyc3QgRWRpdGlvbiBpcyBhbHNvIGF2YWls YWJsZToKKworICAgICBGcmFuayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgQy1L ZXJtaXQgLSBFaW5m77+9aHJ1bmcgdW5kCisgICAgIFJlZmVyZW56LCBWZXJsYWcgSGVpbnogSGVp c2UsIEhhbm5vdmVyLCBHZXJtYW55ICgxOTk0KS4gSVNCTgorICAgICAzLTg4MjI5LTAyMy00LiBE ZXV0c2NoIHZvbiBHaXNiZXJ0IFcuIFNlbGtlLiBQcmljZTogRE0gODgsMDAuIFZlcmxhZworICAg ICBIZWlueiBIZWlzZSBHbWJIICYgQ28uIEtHLCBIZWxzdG9yZmVyIFN0cmFzc2UgNywgRC0zMDYy NSBIYW5ub3Zlci4KKyAgICAgVGVsLiArNDkgKDA1IDExKSA1MyA1Mi0wLCBGYXguICs0OSAoMDUg MTEpIDUzIDUyLTEgMjkuCisKKyAgIFRoZSBbMzQ0XUtlcm1pdCBmaWxlIHRyYW5zZmVyIHByb3Rv Y29sIGlzIHNwZWNpZmllZCBpbjoKKworICAgICBGcmFuayBkYSBDcnV6LCBLZXJtaXQsIEEgRmls ZSBUcmFuc2ZlciBQcm90b2NvbCwgRGlnaXRhbCBQcmVzcywKKyAgICAgQmVkZm9yZCwgTUEsIDE5 ODcsIDM3OSBwYWdlcywgSVNCTiAwLTkzMjM3Ni04OC02LiBVUyBzaW5nbGUtY29weQorICAgICBw cmljZTogJDM5Ljk1LiBBdmFpbGFiaWxpdHkgYXMgYWJvdmUuCisKKyAgIE5ld3MgYW5kIGFydGlj bGVzIGFib3V0IEtlcm1pdCBzb2Z0d2FyZSBhbmQgcHJvdG9jb2wgYXJlIHB1Ymxpc2hlZAorICAg cGVyaW9kaWNhbGx5IGluIHRoZSBqb3VybmFsLCBbMzQ1XUtlcm1pdCBOZXdzLiBTdWJzY3JpcHRp b25zIGFyZSBmcmVlOworICAgY29udGFjdCBDb2x1bWJpYSBVbml2ZXJzaXR5IGF0IHRoZSBhZGRy ZXNzIGFib3ZlLgorCisgICBPbmxpbmUgbmV3cyBhYm91dCBLZXJtaXQgaXMgcHVibGlzaGVkIGlu IHRoZQorICAgWzM0Nl1jb21wLnByb3RvY29scy5rZXJtaXQuYW5ub3VuY2UgYW5kIFszNDddY29t cC5wcm90b2NvbHMua2VybWl0Lm1pc2MKKyAgIG5ld3Nncm91cHMuCisKK0lJLiBORVcgRkVBVFVS RVMKKworICAgU3VwcG9ydCBmb3IgdGhlIEJlbGwgTGFicyBQbGFuIDkgb3BlcmF0aW5nIHN5c3Rl bSB3YXMgYWRkZWQgdG8gdmVyc2lvbgorICAgNi4wIHRvbyBsYXRlIHRvIGJlIG1lbnRpb25lZCBp biB0aGUgYm9vayAoYWx0aG91Z2ggaXQgZG9lcyBhcHBlYXIgb24KKyAgIHRoZSBjb3ZlcikuCisK KyAgIFNwZWNpZmljIGNoYW5nZXMgYW5kIGFkZGl0aW9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlciBi eSBtYWpvciB0b3BpYywKKyAgIHJvdWdobHkgY29ycmVzcG9uZGluZyB0byB0aGUgY2hhcHRlcnMg b2YgWzM0OF1Vc2luZyBDLUtlcm1pdC4KKworMC4gSU5DT01QQVRJQklMSVRJRVMgV0lUSCBQUkVW SU9VUyBSRUxFQVNFUworCisgICAgMS4gQy1LZXJtaXQgNy4wIHVzZXMgRkFTVCBLZXJtaXQgcHJv dG9jb2wgc2V0dGluZ3MgYnkgZGVmYXVsdC4gVGhpcworICAgICAgIGluY2x1ZGVzICJ1bnByZWZp eGluZyIgb2YgY2VydGFpbiBjb250cm9sIGNoYXJhY3RlcnMuIEJlY2F1c2Ugb2YKKyAgICAgICB0 aGlzLCBmaWxlIHRyYW5zZmVycyB0aGF0IHdvcmtlZCB3aXRoIHByZXZpb3VzIHJlbGVhc2VzIG1p Z2h0IG5vdAorICAgICAgIHdvcmsgaW4gdGhlIG5ldyByZWxlYXNlIChidXQgaXQgaXMgbW9yZSBs aWtlbHkgdGhhdCB0aGV5IHdpbGwgd29yaywKKyAgICAgICBhbmQgbXVjaCBmYXN0ZXIpLiBJZiBh IHRyYW5zZmVyIGZhaWxzLCB5b3UnbGwgZ2V0IGEKKyAgICAgICBjb250ZXh0LXNlbnNpdGl2ZSBo aW50IHN1Z2dlc3RpbmcgcG9zc2libGUgY2F1c2VzIGFuZCBjdXJlcy4KKyAgICAgICBVc3VhbGx5 IFNFVCBQUkVGSVhJTkcgQUxMIGRvZXMgdGhlIHRyaWNrLgorICAgIDIuIEMtS2VybWl0IDcuMCB0 cmFuc2ZlcnMgZmlsZXMgaW4gQklOQVJZIG1vZGUgYnkgZGVmYXVsdC4gVG8gcmVzdG9yZQorICAg ICAgIHRoZSBwcmV2aW91cyBiZWhhdmlvciwgcHV0IFNFVCBGSUxFIFRZUEUgVEVYVCBpbiB5b3Vy IEMtS2VybWl0CisgICAgICAgaW5pdGlhbGl6YXRpb24gZmlsZS4KKyAgICAzLiBObyBtYXR0ZXIg d2hldGhlciBGSUxFIFRZUEUgaXMgQklOQVJZIG9yIFRFWFQgYnkgZGVmYXVsdCwgQy1LZXJtaXQK KyAgICAgICA3LjAgbm93IHN3aXRjaGVzIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXV0 b21hdGljYWxseSBvbiBhCisgICAgICAgcGVyLWZpbGUgYmFzaXMgYWNjb3JkaW5nIHRvIHZhcmlv dXMgY3JpdGVyaWEsIGluY2x1ZGluZyAoYSkgd2hpY2gKKyAgICAgICBraW5kIG9mIHBsYXRmb3Jt IGlzIG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24gKGlmIGtub3duKSwKKyAgICAg ICAoYikgdGhlIHZlcnNpb24gb2YgS2VybWl0IG9uIHRoZSBvdGhlciBlbmQsIGFuZCAoYykgdGhl IGZpbGUncyBuYW1lCisgICAgICAgKHNlZSBbMzQ5XVNlY3Rpb24gNCwgZXNwZWNpYWxseSBbMzUw XTQuMykuIFRvIGRpc2FibGUgdGhpcworICAgICAgIGF1dG9tYXRpYyBzd2l0Y2hpbmcgYW5kIHJl c3RvcmUgdGhlIGVhcmxpZXIgYmVoYXZpb3IsIHB1dCBTRVQKKyAgICAgICBUUkFOU0ZFUiBNT0RF IE1BTlVBTCBpbiB5b3VyIEMtS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUuIFRvCisgICAgICAg ZGlzYWJsZSBhdXRvbWF0aWMgc3dpdGNoaW5nIGZvciBhIHBhcnRpY3VsYXIgdHJhbnNmZXIsIGlu Y2x1ZGUgYQorICAgICAgIC9URVhUIG9yIC9CSU5BUlkgc3dpdGNoIHdpdGggeW91ciBTRU5EIG9y IEdFVCBjb21tYW5kLgorICAgIDQuIFRoZSBSRVNFTkQgYW5kIFJFR0VUIGNvbW1hbmRzIGF1dG9t YXRpY2FsbHkgc3dpdGNoIHRvIGJpbmFyeSBtb2RlOworICAgICAgIHByZXZpb3VzbHkgaWYgUkVT RU5EIG9yIFJFR0VUIHdlcmUgYXR0ZW1wdGVkIHdoZW4gRklMRSBUWVBFIHdhcworICAgICAgIFRF WFQsIHRoZXNlIGNvbW1hbmRzIHdvdWxkIGZhaWwgaW1tZWRpYXRlbHksIHdpdGggYSBtZXNzYWdl IHRlbGxpbmcKKyAgICAgICB5b3UgdGhleSB3b3JrIG9ubHkgd2hlbiB0aGUgRklMRSBUWVBFIGlz IEJJTkFSWS4gTm93IHRoZXkgc2ltcGx5IGRvCisgICAgICAgdGhpcyBmb3IgeW91LiBTZWUgWzM1 MV1TZWN0aW9uIDQuMjMgZm9yIGFkZGl0aW9uYWwgKGltcG9ydGFudCkKKyAgICAgICBpbmZvcm1h dGlvbi4KKyAgICA1LiBTRVQgUFJFRklYSU5HIENBVVRJT1VTIGFuZCBNSU5JTUFMIG5vdyBib3Ro IHByZWZpeCBsaW5lZmVlZCAoMTAgYW5kCisgICAgICAgMTM4KSBpbiBjYXNlIHJsb2dpbiwgc3No LCBvciBjdSBhcmUgImluIHRoZSBtaWRkbGUiLCBzaW5jZQorICAgICAgIG90aGVyd2lzZSA8TEY+ fiBtaWdodCBhcHBlYXIgaW4gS2VybWl0IHBhY2tldHMsIGFuZCB0aGlzIHdvdWxkCisgICAgICAg Y2F1c2UgcmxvZ2luLCBzc2gsIG9yIGN1IHRvIGRpc2Nvbm5lY3QsIHN1c3BlbmQsIGVzY2FwZSBi YWNrLCBvcgorICAgICAgIG90aGVyd2lzZSB3cmVjayB0aGUgZmlsZSB0cmFuc2Zlci4gWG9uIGFu ZCBYb2ZmIGFyZSBub3cgYWx3YXlzCisgICAgICAgcHJlZml4ZWQgdG9vLCBldmVuIHdoZW4gWG9u L1hvZmYgZmxvdyBjb250cm9sIGlzIG5vdCBpbiBlZmZlY3QsCisgICAgICAgc2luY2UgdW5wcmVm aXhpbmcgdGhlbSBoYXMgcHJvdmVuIGRhbmdlcm91cyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMuCisg ICAgNi4gSW4gVU5JWCwgVk1TLCBXaW5kb3dzLCBhbmQgT1MvMiwgdGhlIERJUkVDVE9SWSBjb21t YW5kIGlzIGJ1aWx0CisgICAgICAgaW50byBDLUtlcm1pdCBpdHNlbGYgcmF0aGVyIHRoYW4gaW1w bGVtZW50ZWQgYnkgcnVubmluZyBhbiBleHRlcm5hbAorICAgICAgIGNvbW1hbmQgb3IgcHJvZ3Jh bS4gVGhlIGJ1aWx0LWluIGNvbW1hbmQgbWlnaHQgbm90IGJlaGF2ZSB0aGUgd2F5CisgICAgICAg dGhlIHBsYXRmb3JtLXNwZWNpZmljIGV4dGVybmFsIG9uZSBkaWQsIGJ1dCBtYW55IG9wdGlvbnMg YXJlCisgICAgICAgYXZhaWxhYmxlIGZvciBjdXN0b21pemF0aW9uLiBPZiBjb3Vyc2UgdGhlIHVu ZGVybHlpbmcKKyAgICAgICBwbGF0Zm9ybS1zcGVjaWZpYyBjb21tYW5kIGNhbiBzdGlsbCBiZSBh Y2Nlc3NlZCB3aXRoICIhIiwgIkAiLCBvcgorICAgICAgICJSVU4iIHdoZXJldmVyIHRoZSBpbnN0 YWxsYXRpb24gZG9lcyBub3QgZm9yYmlkLiBJbiBVTklYLCB0aGUgImxzIgorICAgICAgIGNvbW1h bmQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGFzICJscyIgaW4gQy1LZXJtaXQuIFNlZQorICAg ICAgIFszNTJdU2VjdGlvbiA0LjUuMSBmb3IgZGV0YWlscy4KKyAgICA3LiBTRU5EID8gcHJpbnRz IGEgbGlzdCBvZiBzd2l0Y2hlcyByYXRoZXIgdGhhbiBhIGxpc3Qgb2YgZmlsZW5hbWVzLgorICAg ICAgIElmIHlvdSB3YW50IHRvIHNlZSBhIGxpc3Qgb2YgZmlsZW5hbWVzLCB1c2UgYSAoc3lzdGVt LWRlcGVuZGVudCkKKyAgICAgICBjb25zdHJ1Y3Rpb24gc3VjaCBhcyBTRU5EIC4vPyAoZm9yIFVO SVgsIFdpbmRvd3MsIG9yIE9TLzIpLCBTRU5ECisgICAgICAgW10/IChWTVMpLCBldGMuIFNlZSBb MzUzXVNlY3Rpb25zIDEuNSBhbmQgWzM1NF00LjcuMS4KKyAgICA4LiBJbiBVTklYLCBPUy05LCBh bmQgS2VybWl0IDk1LCB0aGUgd2lsZGNhcmQgY2hhcmFjdGVycyBpbiBwcmV2aW91cworICAgICAg IHZlcnNpb25zIHdlcmUgKiBhbmQgPy4gSW4gQy1LZXJtaXQgNy4wIHRoZXkgYXJlICosID8sIFss IF0sIHssIGFuZAorICAgICAgIH0sIHdpdGggZGFzaCB1c2VkIGluc2lkZSBbXSdzIHRvIGRlbm90 ZSByYW5nZXMgYW5kIGNvbW1hIHVzZWQKKyAgICAgICBpbnNpZGUge30gdG8gc2VwYXJhdGUgbGlz dCBlbGVtZW50cy4gSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBhbnkgb2YKKyAgICAgICB0aGVzZSBj aGFyYWN0ZXJzIGxpdGVyYWxseSBpbiBhIGZpbGVuYW1lLCBwcmVjZWRlIGVhY2ggb25lIHdpdGgK KyAgICAgICBiYWNrc2xhc2ggKFwpLiBTZWUgWzM1NV1TZWN0aW9uIDQuOS4KKyAgICA5LiBTRVQg UVVJRVQgeyBPTiwgT0ZGIH0gaXMgbm93IG9uIHRoZSBjb21tYW5kIHN0YWNrLCBqdXN0IGxpa2Ug U0VUCisgICAgICAgSU5QVVQgQ0FTRSwgU0VUIENPVU5ULCBTRVQgTUFDUk8gRVJST1IsIGV0Yywg YXMgZGVzY3JpYmVkIG9uIHAuNDU4CisgICAgICAgb2YgWzM1Nl1Vc2luZyBDLUtlcm1pdCwgMm5k IEVkaXRpb24uIFRoaXMgYWxsb3dzIGFueSBtYWNybyBvcgorICAgICAgIGNvbW1hbmQgZmlsZSB0 byBTRVQgUVVJRVQgT04gb3IgT0ZGIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgc2F2aW5nCisgICAg ICAgYW5kIHJlc3RvcmluZyB0aGUgZ2xvYmFsIFFVSUVUIHZhbHVlLiBGb3IgZXhhbXBsZSwgdGhp cyBsZXRzIHlvdQorICAgICAgIHdyaXRlIGEgc2NyaXB0IHRoYXQgdHJpZXMgU0VUIExJTkUgb24g bG90cyBvZiBkZXZpY2VzIHVudGlsIGl0CisgICAgICAgZmluZHMgb25lIGZyZWUgd2l0aG91dCBz cGV3aW5nIG91dCBsb2FkcyBvZiBlcnJvciBtZXNzYWdlcywgYW5kCisgICAgICAgYWxzbyB3aXRo b3V0IGRpc3R1cmJpbmcgdGhlIGdsb2JhbCBRVUlFVCBzZXR0aW5nLCB3aGF0ZXZlciBpdCB3YXMu CisgICAxMC4gQmVjYXVzZSBvZiB0aGUgbmV3ICIuIiBvcGVyYXRvciAod2hpY2ggaW50cm9kdWNl cyBhc3NpZ25tZW50cyksCisgICAgICAgbWFjcm9zIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggIi4i IGNhbiBub3QgYmUgaW52b2tlZCAiYnkgbmFtZSIuCisgICAgICAgSG93ZXZlciwgdGhleSBzdGls bCBjYW4gYmUgaW52b2tlZCB3aXRoIERPLgorICAgMTEuIFRoZSBzeW50YXggb2YgdGhlIEVWQUxV QVRFIGNvbW1hbmQgaGFzIGNoYW5nZWQuIFNlZSBbMzU3XVNlY3Rpb24KKyAgICAgICA3LjkuMi4g VG8gcmVzdG9yZSB0aGUgcHJldmlvdXMgc3ludGF4LCB1c2UgU0VUIEVWQUxVQVRFIE9MRC4KKyAg IDEyLiBUaGUgXHYoZGlyZWN0b3J5KSB2YXJpYWJsZSBub3cgaW5jbHVkZXMgdGhlIHRyYWlsaW5n IGRpcmVjdG9yeQorICAgICAgIHNlcGFyYXRvcjsgaW4gcHJldmlvdXMgcmVsZWFzZXMgaXQgZGlk IG5vdC4gVGhpcyBpcyB0byBhbGxvdworICAgICAgIGNvbnN0cnVjdGlvbnMgc3VjaCBhczoKKyAg Y2QgXHYoZGlyKWRhdGEudG1wCisKKyAgICAgICB0byB3b3JrIGFjcm9zcyBwbGF0Zm9ybXMgdGhh dCBtaWdodCBoYXZlIGRpZmZlcmVudCBkaXJlY3RvcnkKKyAgICAgICBub3RhdGlvbiwgc3VjaCBh cyBVTklYLCBXaW5kb3dzLCBhbmQgVk1TLgorICAgMTMuIFByaW9yIHRvIEMtS2VybWl0IDcuMCwg dGhlIEZMT1ctQ09OVFJPTCBzZXR0aW5nIHdhcyBnbG9iYWwgYW5kCisgICAgICAgc3RpY2t5LiBJ biBDLUtlcm1pdCA3LjAsIHRoZXJlIGlzIGFuIGFycmF5IG9mIGRlZmF1bHQgZmxvdy1jb250cm9s CisgICAgICAgdmFsdWVzIGZvciBlYWNoIGtpbmQgb2YgY29ubmVjdGlvbiwgdGhhdCBhcmUgYXBw bGllZCBhdXRvbWF0aWNhbGx5CisgICAgICAgYXQgU0VUIExJTkUvUE9SVC9IT1NUIHRpbWUuIFRo dXMgYSBTRVQgRkxPVyBjb21tYW5kIGdpdmVuIGJlZm9yZQorICAgICAgIFNFVCBMSU5FL1BPUlQv SE9TVCBpcyBsaWtlbHkgdG8gYmUgdW5kb25lLiBUaGVyZWZvcmUgU0VUIEZMT1cgY2FuCisgICAg ICAgYmUgZ3VhcmFudGVlZCB0byBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCBvbmx5IGlmIGdpdmVu IGFmdGVyIHRoZQorICAgICAgIFNFVCBMSU5FL1BPUlQvSE9TVCBjb21tYW5kLgorICAgMTQuIENo YXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gd29ya3MgZGlmZmVyZW50bHkgaW4gdGhlIFRSQU5TTUlU IGNvbW1hbmQKKyAgICAgICB3aGVuIChhKSB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0IGlzIG5vdCB0 aGUgc2FtZSBhcyB0aGUgbG9jYWwgZW5kIG9mCisgICAgICAgdGhlIHRlcm1pbmFsIGNoYXJhY3Rl ci1zZXQsIG9yIChiKSB3aGVuIHRoZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0CisgICAgICAgaXMg VFJBTlNQQVJFTlQuCisKKzEuIFBST0dSQU0gQU5EIEZJTEUgTUFOQUdFTUVOVCBBTkQgQ09NTUFO RFMKKworMS4wLiBCdWcgRml4ZXMKKworICAgVGhlIGZvbGxvd2luZyBwYXRjaGVzIHdlcmUgaXNz dWVkIHRvIGNvcnJlY3QgYnVncyBpbiBDLUtlcm1pdCA2LjAuCisgICBUaGVzZSBhcmUgZGVzY3Jp YmVkIGluIGRldGFpbCBpbiB0aGUgNi4wIFBBVENIRVMgZmlsZS4gQWxsIG9mIHRoZXNlCisgICBm aXhlcyBoYXZlIGJlZW4gaW5jb3Jwb3JhdGVkIGluIEMtS2VybWl0IDYuMSAobmV2ZXIgcmVsZWFz ZWQgZXhjZXB0IGFzCisgICBLOTUgMS4xLjE2LTE3KSBhbmQgNy4wLgorCisgMDAwMSAgIEFsbCBV TklYICAgICAgICAgQy1LZXJtaXQgbWlzaGFuZGxlcyB0aW1lc3RhbXBzIG9uIGZpbGVzIGJlZm9y ZSAxOTcwCisgMDAwMiAgIFNvbGFyaXMgMi41KysgICAgQ29tcGlsYXRpb24gZXJyb3Igb24gU29s YXJpcyAyLjUgd2l0aCBQcm8gQworIDAwMDMgICBBbGwgVk1TICAgICAgICAgIENLRVJNSVQuSU5J IEZpeCBmb3IgVk1TCisgMDAwNCAgIFZNUy9WQVgvVUNYIDIuMCAgQy1LZXJtaXQgNi4wIGNhbid0 IFRFTE5FVCBvbiBWQVgvVk1TIHdpdGggVUNYIDIuMAorIDAwMDUgICBBbGwgICAgICAgICAgICAg IEMtS2VybWl0IE1pZ2h0IFNlbmQgUGFja2V0cyBPdXRzaWRlIFdpbmRvdworIDAwMDYgICBBbGwg ICAgICAgICAgICAgIE1PVkUgZnJvbSBTRU5ELUxJU1QgZG9lcyBub3QgZGVsZXRlIG9yaWdpbmFs IGZpbGVzCisgMDAwNyAgIFNvbGFyaXMgMi41KysgICAgSGlnaGVyIHNlcmlhbCBzcGVlZHMgb24g U29sYXJpcyAyLjUKKyAwMDA4ICAgQWxsICAgICAgICAgICAgICBDLUtlcm1pdCBhcHBsaWNhdGlv biBmaWxlIG5hbWUgY2FuJ3QgY29udGFpbiBzcGFjZXMKKyAwMDA5ICAgQVQmVCA3MzAwIFVOSVhQ QyBzZXR1aWQgYW5kIGhhcmR3YXJlIGZsb3ctY29udHJvbCBwcm9ibGVtcworIDAwMTAgICBMaW51 eCBvbiBBbHBoYSAgIFBhdGNoIHRvIG1ha2UgY2t1dGlvLmMgY29tcGlsZSBvbiBMaW51eC9BbHBo YQorIDAwMTEgICBPUy05LzY4MDAwIDIuNCAgIFBhdGNoIHRvIG1ha2UgY2s5Y29uLmMgY29tcGls ZSBvbiBPUy05LzY4MDAwIDIuNAorIDAwMTIgICBNVyBDb2hlcmVudCA0LjIgIFBhdGNoZXMgZm9y IHN1Y2Nlc3NmdWwgYnVpbGQgb24gQ29oZXJlbnQgNC4yCisgMDAxMyAgIFNJTklYLVkgNS40MyAg ICAgImRlbGF5IiB2YXJpYWJsZSBjb25mbGljdHMgd2l0aCA8c3lzL2Nsb2NrLmg+CisgMDAxNCAg IFZNUy9WQVgvQ01VLUlQICAgU3ViamVjdDogUGF0Y2hlcyBmb3IgVkFYL1ZNUyA1LnggKyBDTVUt SVAKKyAwMDE1ICAgQWxsICAgICAgICAgICAgICBYRUNITyBkb2Vzbid0IGZsdXNoIGl0cyBvdXRw dXQKKyAwMDE2ICAgVk1TICAgICAgICAgICAgICBDRCBhbmQgb3RoZXIgZGlyZWN0b3J5IG9wZXJh dGlvbnMgbWlnaHQgbm90IHdvcmsKKyAwMDE3ICAgTGludXggMS4yLngrKyAgICBVc2Ugc3RhbmRh cmQgUE9TSVggaW50ZXJmYWNlIGZvciBoaWdoIHNlcmlhbCBzcGVlZHMKKyAwMDE4ICAgVU5JWCAg ICAgICAgICAgICBTRVQgV0lMRENBUkQtRVhQQU5TSU9OIFNIRUxMIGR1bXBzIGNvcmUKKyAwMDE5 ICAgQWxsICAgICAgICAgICAgICBIYXllcyBWLjM0IG1vZGVtIGluaXQgc3RyaW5nIHByb2JsZW0K KyAwMDIwICAgQWxsICAgICAgICAgICAgICBSRUFEIGNvbW1hbmQgZG9lcyBub3QgZmFpbCBpZiBm aWxlIG5vdCBvcGVuCisgMDAyMSAgIEFsbCAgICAgICAgICAgICAgUHJvYmxlbXMgd2l0aCBsb25n IGZ1bmN0aW9uIGFyZ3VtZW50cworIDAwMjIgICBBbGwgICAgICAgICAgICAgIENlcnRhaW4gXGZ1 bmN0aW9uKClzIGNhbiBtaXNiZWhhdmUKKyAwMDIzICAgQWxsICAgICAgICAgICAgICBYIE1PRCAw IGNyYXNoZXMgcHJvZ3JhbQorIDAwMjQgICBBbGwgICAgICAgICAgICAgIEludGVybmFsIGJ1bGxl dHByb29maW5nIGZvciBsb3dlcigpIGZ1bmN0aW9uCisgMDAyNSAgIE9wZW5CU0QgICAgICAgICAg UmVhbCBPcGVuQlNEIHN1cHBvcnQgZm9yIEMtS2VybWl0IDYuMAorIDAwMjYgICBBbGwgICAgICAg ICAgICAgIEluY29ycmVjdCBjaGVja3MgZm9yIG1hY3JvL2NvbW1hbmQtZmlsZSBuZXN0aW5nIGRl cHRoCisgMDAyNyAgIEFsbCAgICAgICAgICAgICAgQU5TV0VSIGRvZXNuJ3QgYXV0b21hdGljYWxs eSBDT05ORUNUCisgMDAyOCAgIEFsbCAgICAgICAgICAgICAgT3ZlcnplYWxvdXMgRVhJVCB3YXJu aW5nCisgMDAyOSAgIEFsbCAgICAgICAgICAgICAgT1VUUFVUIGRvZXNuJ3QgZWNobyB3aGVuIERV UExFWCBpcyBIQUxGCisgMDAzMCAgIEFsbCAgICAgICAgICAgICAgTWlub3IgcHJvYmxlbXMgd2l0 aCBSRU1PVEUgRElSRUNUT1JZL0RFTEVURS9ldGMKKyAwMDMxICAgQWxsICAgICAgICAgICAgICBD SEVDSyBjb21tYW5kIGJyb2tlbgorIDAwMzIgICBBbGwgICAgICAgICAgICAgIFByb2JsZW0gd2l0 aCBTRVQgVFJBTlNNSVQgRUNITworIDAwMzMgICBVTklYLCBWTVMsIGV0YyAgIEhFTFAgU0VUIFNF UlZFUiBzYXlzIHRvbyBtdWNoCisgMDAzNCAgIEFsbCAgICAgICAgICAgICAgUkVBRCBhbmQgIVJF QUQgdG9vIHBpY2t5IGFib3V0IGxpbmUgdGVybWluYXRvcnMKKyAwMDM1ICAgQWxsICAgICAgICAg ICAgICBFTkQgZnJvbSBpbnNpZGUgU1dJVENIIGRvZXNuJ3Qgd29yaworIDAwMzYgICBBbGwgICAg ICAgICAgICAgIFByb2JsZW0gdGVsbmV0dGluZyB0byBtdWx0aWhvbWVkIGhvc3RzCisgMDAzNyAg IEFsbCAgICAgICAgICAgICAgUmVkaXJlY3Rpb24gZmFpbHVyZXMgaW4gUkVNT1RFIHh4eCA+IGZp bGUKKworICAgUkVESVJFQ1Qgd2FzIG1pc3NpbmcgaW4gbWFueSBVTklYIEMtS2VybWl0IGltcGxl bWVudGF0aW9uczsgaW4gdmVyc2lvbgorICAgNy4wLCBpdCBzaG91bGQgYmUgYXZhaWxhYmxlIGlu IGFsbCBvZiB0aGVtLgorCisxLjEuIENvbW1hbmQgQ29udGludWF0aW9uCisKKyAgIENvbW1lbnRz IHRoYXQgc3RhcnQgd2l0aCAiOyIgb3IgIiMiIGNhbiBubyBsb25nZXIgYmUgY29udGludWVkLiBJ bjoKKworICA7IHRoaXMgaXMgYSBjb21tZW50IC0KKyAgZWNobyBibGFoCisKKyAgIHRoZSBFQ0hP IGNvbW1hbmQgd2lsbCBleGVjdXRlLCByYXRoZXIgdGhhbiBiZWluZyB0YWtlbiBhcyBhCisgICBj b250aW51YXRpb24gb2YgdGhlIHByZWNlZGluZyBjb21tZW50IGxpbmUuIFRoaXMgYWxsb3dzIGVh c3kKKyAgICJjb21tZW50aW5nIG91dCIgb2YgY29tbWFuZHMgZnJvbSBtYWNybyBkZWZpbml0aW9u cy4KKworICAgSG93ZXZlciwgdGhlIHRleHQgb2YgdGhlIENPTU1FTlQgY29tbWFuZCBjYW4gc3Rp bGwgYmUgY29udGludWVkIG9udG8KKyAgIHN1YnNlcXVlbnQgbGluZXM6CisKKyAgY29tbWVudCB0 aGlzIGlzIGEgY29tbWVudCAtCisgIGVjaG8gYmxhaAorCisgICBBcyBvZiB2ZXJzaW9uIDYuMCwg YmFja3NsYXNoIGlzIG5vIGxvbmdlciBhIHZhbGlkIGNvbnRpbnVhdGlvbgorICAgY2hhcmFjdGVy LiBPbmx5IGh5cGhlbiBzaG91bGQgYmUgdXNlZCBmb3IgY29tbWFuZCBjb250aW51YXRpb24uIFRo aXMgaXMKKyAgIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gaXNzdWUgY29tbWFuZHMgbGlrZSAiY2Qg YTpcIiBvbiBET1MtbGlrZQorICAgc3lzdGVtcy4KKworICAgQXMgb2YgdmVyc2lvbiA3LjA6CisK KyAgICAgKiBZb3UgY2FuIHF1b3RlIGEgZmluYWwgZGFzaCB0byBwcmV2ZW50IGl0IGZyb20gYmVp bmcgYSBjb250aW51YXRpb24KKyAgICAgICBjaGFyYWN0ZXI6CisgIGVjaG8gZm9vXC0KKworICAg ICAgIFRoaXMgcHJpbnRzICJmb28tIi4gVGhlIGNvbW1hbmQgaXMgbm90IGNvbnRpbnVlZC4KKyAg ICAgKiBZb3UgY2FuIGVudGVyIGNvbW1hbmRzIHN1Y2ggYXM6CisgIGVjaG8gZm9vIC0gOyB0aGlz IGlzIGEgY29tbWVudAorCisgICAgICAgaW50ZXJhY3RpdmVseSBhbmQgdGhleSBhcmUgcHJvcGVy bHkgdHJlYXRlZCBhcyBjb250aW51ZWQgY29tbWFuZHMuCisgICAgICAgUHJldmlvdXNseSB0aGlz IHdvcmtlZCBvbmx5IGluIGNvbW1hbmQgZmlsZXMuCisKKzEuMi4gRWRpdG9yIEludGVyZmFjZQor CisgICBTRVQgRURJVE9SIG5hbWUgWyBvcHRpb25zIF0KKyAgICAgICAgICBMZXRzIHlvdSBzcGVj aWZ5IGEgdGV4dC1lZGl0aW5nIHByb2dyYW0uIFRoZSBuYW1lIGNhbiBiZSBhIGZ1bGx5CisgICAg ICAgICAgc3BlY2lmaWVkIHBhdGhuYW1lIGxpa2UgL3Vzci9sb2NhbC9iaW4vZW1hY3MxOS9lbWFj cywgb3IgaXQgY2FuCisgICAgICAgICAgYmUgdGhlIG5hbWUgb2YgYW55IHByb2dyYW0gaW4geW91 ciBQQVRILCBlLmcuICJzZXQgZWRpdG9yCisgICAgICAgICAgZW1hY3MiLiBJbiBWTVMsIGl0IG11 c3QgYmUgYSBEQ0wgY29tbWFuZCBsaWtlICJlZGl0IiwKKyAgICAgICAgICAiZWRpdC90cHUiLCAi ZW1hY3MiLCBldGMuIElmIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIEVESVRPUiBpcworICAgICAg ICAgIGRlZmluZWQgd2hlbiBLZXJtaXQgc3RhcnRzLCBpdHMgdmFsdWUgaXMgdGhlIGRlZmF1bHQg ZWRpdG9yLiBZb3UKKyAgICAgICAgICBjYW4gYWxzbyBzcGVjaWZ5IG9wdGlvbnMgdG8gYmUgaW5j bHVkZWQgb24gdGhlIGVkaXRvciBjb21tYW5kCisgICAgICAgICAgbGluZS4gUmV0dXJucyB0byBL ZXJtaXQgd2hlbiB0aGUgZWRpdG9yIGV4aXRzLgorCisgICBFRElUIFsgZmlsZW5hbWUgXQorICAg ICAgICAgIElmIHRoZSBFRElUIGNvbW1hbmQgaXMgZ2l2ZW4gd2l0aG91dCBhIGZpbGVuYW1lLCB0 aGVuIGlmIGEKKyAgICAgICAgICBwcmV2aW91cyBmaWxlbmFtZSBoYWQgYmVlbiBnaXZlbiB0byBh biBFRElUIGNvbW1hbmQsIGl0IGlzIHVzZWQ7CisgICAgICAgICAgaWYgbm90LCB0aGUgZWRpdG9y IGlzIHN0YXJ0ZWQgd2l0aG91dCBhIGZpbGUuIElmIGEgZmlsZW5hbWUgaXMKKyAgICAgICAgICBn aXZlbiwgdGhlIGVkaXRvciBpcyBzdGFydGVkIG9uIHRoYXQgZmlsZSwgYW5kIHRoZSBmaWxlbmFt ZSBpcworICAgICAgICAgIHJlbWVtYmVyZWQgZm9yIHN1YnNlcXVlbnQgRURJVCBjb21tYW5kcy4K KworICAgU0hPVyBFRElUT1IKKyAgICAgICAgICBEaXNwbGF5cyB0aGUgZnVsbCBwYXRobmFtZSBv ZiB5b3VyIHRleHQgZWRpdG9yLCBpZiBhbnksIGFsb25nCisgICAgICAgICAgd2l0aCBhbnkgY29t bWFuZCBsaW5lIG9wdGlvbnMsIGFuZCB0aGUgZmlsZSBtb3N0IHJlY2VudGx5IGVkaXRlZAorICAg ICAgICAgIChhbmQgdGhlcmVmb3JlIHRoZSBkZWZhdWx0IGZpbGVuYW1lIGZvciB5b3VyIG5leHQg RURJVCBjb21tYW5kKS4KKworICAgUmVsYXRlZCB2YXJpYWJsZXM6IFx2KGVkaXRvciksIFx2KGVk aXRvcHRzKSwgXHYoZWRpdGZpbGUpLgorCisxLjMuIFdlYiBCcm93c2VyIGFuZCBGVFAgSW50ZXJm YWNlCisKKyAgIEMtS2VybWl0IGluY2x1ZGVzIGFuIEZUUCBjb21tYW5kLCB3aGljaCBzaW1wbHkg cnVucyB0aGUgRlRQIHByb2dyYW07CisgICBDLUtlcm1pdCBkb2VzIG5vdCBpbmNsdWRlIGFueSBi dWlsdC1pbiBzdXBwb3J0IGZvciBJbnRlcm5ldCBGaWxlCisgICBUcmFuc2ZlciBQcm90b2NvbCwg bm9yIGFueSBtZXRob2QgZm9yIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggYW4gRlRQCisgICBz ZXJ2ZXIuIEluIHZlcnNpb24gNy4wLCBob3dldmVyLCBDLUtlcm1pdCBsZXRzIHlvdSBzcGVjaWZ5 IHlvdXIgRlRQCisgICBjbGllbnQ6CisKKyAgIFNFVCBGVFAtQ0xJRU5UIFsgbmFtZSBbIG9wdGlv bnMgXSBdCisgICAgICAgICAgVGhlIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIEZUUCBleGVjdXRh YmxlLiBJbiBVTklYLCBXaW5kb3dzLCBvcgorICAgICAgICAgIE9TLzIsIGl0IGNhbiBiZSB0aGUg ZmlsZW5hbWUgb2YgYW55IGV4ZWN1dGFibGUgcHJvZ3JhbSBpbiB5b3VyCisgICAgICAgICAgUEFU SCAoZS5nLiAiZnRwLmV4ZSIgaW4gV2luZG93cywgImZ0cCIgaW4gVU5JWCk7IGVsc2V3aGVyZSAo b3IKKyAgICAgICAgICBpZiB5b3UgZG8gbm90IGhhdmUgYSBQQVRIIGRlZmluaXRpb24pLCBpdCBt dXN0IGJlIHRoZSBmdWxseQorICAgICAgICAgIHNwZWNpZmllZCBwYXRobmFtZSBvZiB0aGUgRlRQ IHByb2dyYW0uIElmIHRoZSBuYW1lIGNvbnRhaW5zIGFueQorICAgICAgICAgIHNwYWNlcywgZW5j bG9zZSBpdCBicmFjZXMuIEluY2x1ZGUgYW55IG9wdGlvbnMgYWZ0ZXIgdGhlCisgICAgICAgICAg ZmlsZW5hbWU7IHRoZXNlIGRlcGVuZCB0aGUgcGFydGljdWxhciBmdHAgY2xpZW50LgorCisgICBU aGUgV2ViIGJyb3dzZXIgaW50ZXJmYWNlIGlzIGNvdmVyZWQgaW4gdGhlIGZvbGxvd2luZyBzdWJz ZWN0aW9ucy4KKworMS4zLjEuIEludm9raW5nIHlvdXIgQnJvd3NlciBmcm9tIEMtS2VybWl0CisK KyAgIEJST1dTRSBbIHVybCBdCisgICAgICAgICAgU3RhcnRzIHlvdXIgcHJlZmVycmVkIFdlYiBi cm93c2VyIG9uIHRoZSBVUkwsIGlmIG9uZSBpcyBnaXZlbiwKKyAgICAgICAgICBvdGhlcndpc2Ug b24gdGhlIG1vc3QgcmVjZW50bHkgZ2l2ZW4gVVJMLCBpZiBhbnkuIFJldHVybnMgdG8KKyAgICAg ICAgICBLZXJtaXQgd2hlbiB0aGUgYnJvd3NlciBleGl0cy4KKworICAgU0VUIEJST1dTRVIgWyBu YW1lIFsgb3B0aW9ucyBdIF0KKyAgICAgICAgICBVc2UgdGhpcyBjb21tYW5kIHRvIHNwZWNpZnkg dGhlIG5hbWUgb2YgeW91ciBXZWIgYnJvd3NlcgorICAgICAgICAgIHByb2dyYW0sIGZvciBleGFt cGxlOiAic2V0IGJyb3dzZXIgbHlueCIuIFRoZSBuYW1lIG11c3QgYmUgaW4KKyAgICAgICAgICB5 b3VyIFBBVEgsIG9yIGVsc2UgaXQgbXVzdCBiZSBhIGZ1bGx5IHNwZWNpZmllZCBmaWxlbmFtZTsg aW4gVk1TCisgICAgICAgICAgaXQgbXVzdCBiZSBhIERDTCBjb21tYW5kLgorCisgICBTSE9XIEJS T1dTRVIKKyAgICAgICAgICBEaXNwbGF5cyB0aGUgY3VycmVudCBicm93c2VyLCBvcHRpb25zLCBh bmQgbW9zdCByZWNlbnQgVVJMLgorCisgICBSZWxhdGVkIHZhcmlhYmxlczogXHYoYnJvd3Nlciks IFx2KGJyb3dzb3B0cyksIFx2KGJyb3dzdXJsKS4KKworICAgQWxzbyBzZWUgWzM1OF1TZWN0aW9u IDIuMTU6IENvbnRhY3RpbmcgV2ViIFNlcnZlcnMgd2l0aCB0aGUgSFRUUAorICAgQ29tbWFuZC4K KworMS4zLjIuIEludm9raW5nIEMtS2VybWl0IGZyb20geW91ciBCcm93c2VyCisKKyAgIFRoZSBt ZXRob2QgZm9yIGRvaW5nIHRoaXMgZGVwZW5kcywgb2YgY291cnNlLCBvbiB5b3VyIGJyb3dzZXIu IEhlcmUgYXJlCisgICBzb21lIGV4YW1wbGVzOgorCisgICBOZXRzY2FwZSBvbiBVTklYIChYLWJh c2VkKQorICAgICAgICAgIEluIHRoZSBPcHRpb25zLT5BcHBsaWNhdGlvbnMgc2VjdGlvbiwgc2V0 IHlvdXIgVGVsbmV0CisgICAgICAgICAgYXBwbGljYXRpb24gdG86CisKKyAgeHRlcm0gLWUgL3Vz ci9sb2NhbC9iaW4va2VybWl0L2tlcm1pdCAtSiAlaCAlcAorCisgICAgICAgICAgKHJlcGxhY2Ug Ii91c3IvbG9jYWwvYmluL2tlcm1pdC9rZXJtaXQiIGJ5IEMtS2VybWl0J3MgYWN0dWFsCisgICAg ICAgICAgcGF0aG5hbWUpLiAtSiBpcyBDLUtlcm1pdCdzIGNvbW1hbmQtbGluZSBvcHRpb24gdG8g ImJlIGxpa2UKKyAgICAgICAgICBUZWxuZXQiOyAlaCBhbmQgJXAgYXJlIE5ldHNjYXBlIHBsYWNl aG9sZGVycyBmb3IgaG9zdG5hbWUgYW5kCisgICAgICAgICAgcG9ydC4KKworICAgTHlueCBvbiBV TklYCisgICAgICAgICAgQXMgZmFyIGFzIHdlIGtub3csIHRoaXMgY2FuIGJlIGRvbmUgb25seSBh dCBjb21waWxlIHRpbWUuIEFkZAorICAgICAgICAgIHRoZSBmb2xsb3dpbmcgbGluZSB0byB0aGUg THlueCB1c2VyZGVmcy5oIGZpbGUgYmVmb3JlIGJ1aWxkaW5nCisgICAgICAgICAgdGhlIEx5bngg YmluYXJ5OgorCisgICNkZWZpbmUgVEVMTkVUX0NPTU1BTkQgIi9vcHQvYmluL2tlcm1pdCAtSiIK KworICAgICAgICAgIEFuZCB0aGVuIGFkZCBsaW5lcyBsaWtlIHRoZSBmb2xsb3dpbmcgdG8gdGhl IEx5bnguY2ZnIGZpbGU6CisKKyAgRE9XTkxPQURFUjpLZXJtaXQgYmluYXJ5IGRvd25sb2FkOi9v cHQvYmluL2tlcm1pdCAtaSAtViAtcyAlcyAtYSAlczpUUlVFCisgIERPV05MT0FERVI6S2VybWl0 IHRleHQgZG93bmxvYWQ6L29wdC9iaW4va2VybWl0IC1zICVzIC1hICVzOlRSVUUKKworICBVUExP QURFUjpLZXJtaXQgYmluYXJ5IHVwbG9hZDovb3B0L2Jpbi9rZXJtaXQgLWkgLXIgLWEgJXM6VFJV RQorICBVUExPQURFUjpLZXJtaXQgdGV4dCB1cGxvYWQ6L29wdC9iaW4va2VybWl0IC1yIC1hICVz OlRSVUUKKyAgVVBMT0FERVI6S2VybWl0IHRleHQgZ2V0Oi9vcHQvYmluL2tlcm1pdCAtZyAlczpU UlVFCisgIFVQTE9BREVSOktlcm1pdCBiaW5hcnkgZ2V0Oi9vcHQvYmluL2tlcm1pdCAtaWcgJXM6 VFJVRQorCisgICBCdXQgbm9uZSBvZiB0aGUgYWJvdmUgaXMgbmVjZXNzYXJ5IGlmIHlvdSBtYWtl IEMtS2VybWl0IHlvdXIgZGVmYXVsdAorICAgVGVsbmV0IGNsaWVudCwgd2hpY2ggeW91IGNhbiBk byBieSBtYWtpbmcgYSBzeW1saW5rIGNhbGxlZCAndGVsbmV0JyB0bworICAgdGhlIEMtS2VybWl0 IDcuMCBiaW5hcnkuIFNlZSBbMzU5XVNlY3Rpb24gOS4xIGZvciBkZXRhaWxzLgorCisxLjQuIENv bW1hbmQgRWRpdGluZworCisgICBDdHJsLVcgKCJXb3JkIGRlbGV0ZSIpIHdhcyBjaGFuZ2VkIGlu IDcuMCB0byBkZWxldGUgYmFjayB0byB0aGUKKyAgIHByZXZpb3VzIG5vbi1hbHBoYW51bWVyaWMs IHJhdGhlciB0aGFuIGFsbCB0aGUgd2F5IGJhY2sgdG8gdGhlIHByZXZpb3VzCisgICBzcGFjZS4K KworMS41LiBDb21tYW5kIFN3aXRjaGVzCisKKyAgIEFzIG9mIHZlcnNpb24gNy4wLCBDLUtlcm1p dCdzIGNvbW1hbmQgcGFyc2VyIHN1cHBvcnRzIGEgbmV3IHR5cGUgb2YKKyAgIGZpZWxkLCBjYWxs ZWQgYSAic3dpdGNoIi4gVGhpcyBpcyBhbiBvcHRpb25hbCBjb21tYW5kIG1vZGlmaWVyLgorCisx LjUuMS4gR2VuZXJhbCBTd2l0Y2ggU3ludGF4CisKKyAgIEEgc3dpdGNoIGlzIGEga2V5d29yZCBi ZWdpbm5pbmcgd2l0aCBhIHNsYXNoICgvKS4gSWYgaXQgdGFrZXMgYSB2YWx1ZSwKKyAgIHRoZW4g dGhlIHZhbHVlIGlzIGFwcGVuZGVkIHRvIGl0ICh3aXRoIG5vIGludGVydmVuaW5nIHNwYWNlcyks CisgICBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAoOikgb3IgZXF1YWwgc2lnbiAoPSkuIERlcGVuZGlu ZyBvbiB0aGUgc3dpdGNoLAorICAgdGhlIHZhbHVlIG1heSBiZSBhIG51bWJlciwgYSBrZXl3b3Jk LCBhIGZpbGVuYW1lLCBhIGRhdGUvdGltZSwgZXRjLgorICAgRXhhbXBsZXM6CisKKyAgc2VuZCBv b2ZhLnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgTm8gc3dpdGNoZXMKKyAgc2Vu ZCAvYmluYXJ5IG9vZmEuemlwICAgICAgICAgICAgICAgICAgICAgIDsgQSBzd2l0Y2ggd2l0aG91 dCBhIHZhbHVlCisgIHNlbmQgL3Byb3RvY29sOnptb2RlbSBvb2ZhLnppcCAgICAgICAgICAgICA7 IEEgc3dpdGNoIHdpdGggYSB2YWx1ZSAoOikKKyAgc2VuZCAvcHJvdG9jb2w9em1vZGVtIG9vZmEu emlwICAgICAgICAgICAgIDsgQSBzd2l0Y2ggd2l0aCBhIHZhbHVlICg9KQorICBzZW5kIC90ZXh0 IC9kZWxldGUgL2FzLW5hbWU6eC54IG9vZmEudHh0ICAgOyBTZXZlcmFsIHN3aXRjaGVzCisKKyAg IExpa2Ugb3RoZXIgY29tbWFuZCBmaWVsZHMsIHN3aXRjaGVzIGFyZSBzZXBhcmF0ZWQgZnJvbSBv dGhlciBmaWVsZHMsCisgICBhbmQgZnJvbSBlYWNoIG90aGVyLCBieSB3aGl0ZXNwYWNlLCBhcyBz aG93biBpbiB0aGUgZXhhbXBsZXMganVzdAorICAgYWJvdmUuIFlvdSBjYW4gbm90IHB1dCB0aGVt IHRvZ2V0aGVyIGxpa2Ugc286CisKKyAgc2VuZC90ZXh0L2RlbGV0ZS9hcy1uYW1lOngueCBvb2Zh LnR4dAorCisgICAoYXMgeW91IG1pZ2h0IGRvIGluIFZNUyBvciBET1MsIG9yIGFzIHdlIG1pZ2h0 IG9uY2UgaGF2ZSBkb25lIGluCisgICBUT1BTLTEwIG9yIFRPUFMwLTIwLCBvciBQSVApLiBUaGlz IGlzIHByaW1hcmlseSBkdWUgdG8gYW1iaWd1aXR5CisgICBiZXR3ZWVuICIvIiBhcyBzd2l0Y2gg aW50cm9kdWNlciB2ZXJzdXMgIi8iIGFzIFVOSVggZGlyZWN0b3J5CisgICBzZXBhcmF0b3I7IGUu Zy4gaW46CisKKyAgc2VuZCAvZGVsZXRlL2FzLW5hbWU6Zm9vL3RleHQgb29mYS50eHQKKworICAg RG9lcyAiZm9vL3RleHQiIG1lYW4gdGhlIGZpbGVuYW1lIGlzICJmb28iIGFuZCB0aGUgdHJhbnNm ZXIgaXMgdG8gYmUgaW4KKyAgIHRleHQgbW9kZSwgb3IgZG9lcyBpdCBtZWFuIHRoZSBmaWxlbmFt ZSBpcyAiZm9vL3RleHQiPyBUaGVyZWZvcmUgd2UKKyAgIHJlcXVpcmUgd2hpdGVzcGFjZSBiZXR3 ZWVuIHN3aXRjaGVzIHRvIHJlc29sdmUgdGhlIGFtYmlndWl0eS4gKFRoYXQncworICAgb25seSBv bmUgb2Ygc2V2ZXJhbCBwb3NzaWJsZSBhbWJpZ3VpdGllcyAtLSBpdCBpcyBhbHNvIGNvbmNlaXZh YmxlIHRoYXQKKyAgIGEgZmlsZSBjYWxsZWQgInRleHQiIGV4aXN0cyBpbiB0aGUgcGF0aCAiL2Rl bGV0ZS9hcy1uYW1lOmZvby8iKS4KKworICAgSW4gZ2VuZXJhbCwgaWYgYSBzd2l0Y2ggY2FuIHRh a2UgYSB2YWx1ZSwgYnV0IHlvdSBvbWl0IGl0LCB0aGVuIGVpdGhlcgorICAgYSByZWFzb25hYmxl IGRlZmF1bHQgdmFsdWUgaXMgc3VwcGxpZWQsIG9yIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRl ZDoKKworICBzZW5kIC9wcmludDotUGxhc2Vyd3JpdGVyIG9vZmEudHh0ICAgICAgICAgOyBWYWx1 ZSBpbmNsdWRlZCA9IHByaW50IG9wdGlvbnMKKyAgc2VuZCAvcHJpbnQgb29mYS50eHQgICAgICAg ICAgICAgICAgICAgICAgIDsgVmFsdWUgb21pdHRlZCwgT0sKKyAgc2VuZCAvbWFpbDprZXJtaXRA Y29sdW1iaWEuZWR1IG9vZmEudHh0ICAgIDsgVmFsdWUgaW5jbHVkZWQgPSBhZGRyZXNzCisgIHNl bmQgL21haWwgb29mYS50eHQgICAgICAgICAgICAgICAgICAgICAgICA7IE5vdCBPSyAtIGFkZHJl c3MgcmVxdWlyZWQKKyAgP0FkZHJlc3MgcmVxdWlyZWQKKworICAgQ29udGV4dC1zZW5zaXRpdmUg aGVscCAoPykgYW5kIGNvbXBsZXRpb24gKEVzYyBvciBUYWIpIGFyZSBhdmFpbGFibGUgaW4KKyAg IHRoZSBub3JtYWwgbWFubmVyOgorCisgIEMtS2VybWl0PiBzZW5kIC9wcj8gU3dpdGNoLCBvbmUg b2YgdGhlIGZvbGxvd2luZzoKKyAgICAvcHJpbnQgL3Byb3RvY29sCisgIEMtS2VybWl0PiBzZW5k IC9wcm88RVNDPnRvY29sOj8gIEZpbGUtdHJhbnNmZXIgcHJvdG9jb2wsCisgICBvbmUgb2YgdGhl IGZvbGxvd2luZzoKKyAgICBrZXJtaXQgICB4bW9kZW0gICB5bW9kZW0gICB5bW9kZW0tZyAgIHpt b2RlbQorICBDLUtlcm1pdD4gc2VuZCAvcHJvdG9jb2w6azxUQUI+ZXJtaXQKKworICAgSWYgYSBz d2l0Y2ggdGFrZXMgYSB2YWx1ZSBhbmQgeW91IHVzZSBjb21wbGV0aW9uIG9uIGl0LCBhIGNvbG9u ICg6KSBpcworICAgcHJpbnRlZCBhdCB0aGUgZW5kIG9mIGl0cyBuYW1lIHRvIGluZGljYXRlIHRo aXMuIElmIGl0IGRvZXMgbm90IHRha2UgYQorICAgdmFsdWUsIGEgc3BhY2UgaXMgcHJpbnRlZC4K KworICAgQWxzbywgaWYgeW91IHR5cGUgPyBpbiBhIHN3aXRjaCBmaWVsZCwgc3dpdGNoZXMgdGhh dCB0YWtlIHZhbHVlcyBhcmUKKyAgIHNob3duIHdpdGggYSB0cmFpbGluZyBjb2xvbjsgdGhvc2Ug dGhhdCBkb24ndCB0YWtlIHZhbHVlcyBhcmUgc2hvd24KKyAgIHdpdGhvdXQgb25lLgorCisxLjUu Mi4gT3JkZXIgYW5kIEVmZmVjdCBvZiBTd2l0Y2hlcworCisgICBUaGUgb3JkZXIgb2Ygc3dpdGNo ZXMgc2hvdWxkIG5vdCBtYXR0ZXIsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIGV2YWx1YXRlZAorICAg ZnJvbSBsZWZ0IHRvIHJpZ2h0LCBzbyBpZiB5b3UgZ2l2ZSB0d28gc3dpdGNoZXMgd2l0aCBvcHBv c2l0ZSBlZmZlY3RzLAorICAgdGhlIHJpZ2h0bW9zdCBvbmUgaXMgdXNlZDoKKworICBzZW5kIC90 ZXh0IC9iaW5hcnkgb29mYS56aXAgICAgICAgICAgICAgICAgOyBTZW5kcyBvb2ZhLnppcCBpbiBi aW5hcnkgbW9kZS4KKworICAgTGlrZSBvdGhlciBjb21tYW5kIGZpZWxkcywgc3dpdGNoZXMgaGF2 ZSBubyBlZmZlY3Qgd2hhdHNvZXZlciB1bnRpbCB0aGUKKyAgIGNvbW1hbmQgaXMgZW50ZXJlZCAo YnkgcHJlc3NpbmcgdGhlIFJldHVybiBvciBFbnRlciBrZXkpLiBFdmVuIHRoZW4sCisgICBzd2l0 Y2hlcyBhZmZlY3Qgb25seSB0aGUgY29tbWFuZCB3aXRoIHdoaWNoIHRoZXkgYXJlIGluY2x1ZGVk OyB0aGV5IGRvCisgICBub3QgaGF2ZSBnbG9iYWwgZWZmZWN0IG9yIHNpZGUgZWZmZWN0cy4KKwor MS41LjMuIERpc3Rpbmd1aXNoaW5nIFN3aXRjaGVzIGZyb20gT3RoZXIgRmllbGRzCisKKyAgIEFs bCBzd2l0Y2hlcyBhcmUgb3B0aW9uYWwuIEEgY29tbWFuZCB0aGF0IHVzZXMgc3dpdGNoZXMgbGV0 cyB5b3UgZ2l2ZQorICAgYW55IG51bWJlciBvZiB0aGVtLCBpbmNsdWRpbmcgbm9uZSBhdCBhbGwu IEV4YW1wbGU6CisKKyAgc2VuZCAvYmluYXJ5IG9vZmEuemlwCisgIHNlbmQgL2JpbiAvZGVsZXRl IG9vZmEuemlwCisgIHNlbmQgL2JpbiAvYXMtbmFtZTptdXBlZW4uemlwIG9vZmEuemlwCisgIHNl bmQgb29mYS56aXAKKworICAgQnV0IGhvdyBkb2VzIEtlcm1pdCBrbm93IHdoZW4gdGhlIGZpcnN0 ICJub24tc3dpdGNoIiBpcyBnaXZlbj8gSXQgaGFzCisgICBiZWVuIHRvbGQgdG8gbG9vayBmb3Ig Ym90aCBhIHN3aXRjaCBhbmQgZm9yIHNvbWV0aGluZyBlbHNlLCB0aGUgZGF0YQorICAgdHlwZSBv ZiB0aGUgbmV4dCBmaWVsZCAoZmlsZW5hbWUsIG51bWJlciwgZXRjKS4gSW4gbW9zdCBjYXNlcywg dGhpcworICAgd29ya3Mgd2VsbC4gQnV0IGNvbmZsaWN0cyBhcmUgbm90IGltcG9zc2libGUuIFN1 cHBvc2UsIGZvciBleGFtcGxlLCBpbgorICAgVU5JWCB0aGVyZSB3YXMgYSBmaWxlIG5hbWVkICJ0 ZXh0IiBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gVGhlCisgICBjb21tYW5kIHRvIHNlbmQg aXQgd291bGQgYmU6CisKKyAgc2VuZCAvdGV4dAorCisgICBCdXQgQy1LZXJtaXQgd291bGQgdGhp bmsgdGhpcyB3YXMgdGhlICIvdGV4dCIgc3dpdGNoLiBUbyByZXNvbHZlIHRoZQorICAgY29uZmxp Y3QsIHVzZSBicmFjZXM6CisKKyAgc2VuZCB7L3RleHR9CisKKyAgIG9yIG90aGVyIGNpcmN1bWxv Y3V0aW9ucyBzdWNoIGFzICJzZW5kIC8vdGV4dCIsICJzZW5kIC8uL3RleHQiLCBldGMuCisKKyAg IFRoZSBvcHBvc2l0ZSBwcm9ibGVtIGNhbiBvY2N1ciBpZiB5b3UgZ2l2ZSBhbiBpbGxlZ2FsIHN3 aXRjaCB0aGF0CisgICBoYXBwZW5zIHRvIG1hdGNoIGEgZGlyZWN0b3J5IG5hbWUuIEZvciBleGFt cGxlOgorCisgIHNlbmQgL2Ygb29mYS50eHQKKworICAgVGhlcmUgaXMgbm8gIi9mIiBzd2l0Y2gg KHRoZXJlIGFyZSBzZXZlcmFsIHN3aXRjaGVzIHRoYXQgYmVnaW4gd2l0aAorICAgIi9mIiwgc28g Ii9mIiBpcyBhbWJpZ3VvdXMpLiBOb3cgc3VwcG9zZSB0aGVyZSBpcyBhbiAiZiIgZGlyZWN0b3J5 IGluCisgICB0aGUgcm9vdCBkaXJlY3Rvcnk7IHRoZW4gdGhpcyBjb21tYW5kIHdvdWxkIGJlIGlu dGVycHJldGVkIGFzOgorCisgICAgIFNlbmQgYWxsIHRoZSBmaWxlcyBpbiB0aGUgIi9mIiBkaXJl Y3RvcnksIGdpdmluZyBlYWNoIG9uZSBhbiBhcy1uYW1lCisgICAgIG9mICJvb2ZhLnR4dCIuCisK KyAgIFRoaXMgY291bGQgYmUgYSBtaXN0YWtlLCBvciBpdCBjb3VsZCBiZSBleGFjdGx5IHdoYXQg eW91IGludGVuZGVkOworICAgQy1LZXJtaXQgaGFzIG5vIHdheSBvZiB0ZWxsaW5nIHRoZSBkaWZm ZXJlbmNlLiBUbyBhdm9pZCBzaXR1YXRpb25zIGxpa2UKKyAgIHRoaXMsIHNwZWxsIHN3aXRjaGVz IG91dCBpbiBmdWxsIHVudGlsIHlvdSBhcmUgY29tZm9ydGFibGUgZW5vdWdoIHdpdGgKKyAgIHRo ZW0gdG8ga25vdyB0aGUgbWluaW11bSBhYmJyZXZpYXRpb24gZm9yIGVhY2ggb25lLiBIaW50OiB1 c2UgPyBhbmQKKyAgIGNvbXBsZXRpb24gd2hpbGUgdHlwaW5nIHN3aXRjaGVzIHRvIG9idGFpbiB0 aGUgbmVjZXNzYXJ5IGZlZWRiYWNrLgorCisxLjUuNC4gU3RhbmRhcmQgRmlsZSBTZWxlY3Rpb24g U3dpdGNoZXMKKworICAgVGhlIGZvbGxvd2luZyBzd2l0Y2hlcyBhcmUgdXNlZCBvbiBkaWZmZXJl bnQgZmlsZS1vcmllbnRlZCBjb21tYW5kcworICAgKHN1Y2ggYXMgU0VORCwgRElSRUNUT1JZLCBE RUxFVEUsIFBVUkdFKSB0byByZWZpbmUgdGhlIHNlbGVjdGlvbiBvZgorICAgZmlsZXMgdGhhdCBt YXRjaCB0aGUgZ2l2ZW4gc3BlY2lmaWNhdGlvbi4KKworICAgL0FGVEVSOmRhdGUtdGltZQorICAg ICAgICAgIFNlbGVjdCBvbmx5IHRob3NlIGZpbGVzIGhhdmluZyBhIGRhdGUtdGltZSBsYXRlciB0 aGFuIHRoZSBvbmUKKyAgICAgICAgICBnaXZlbi4gU2VlIFszNjBdU2VjdGlvbiAxLjYgZm9yIGRh dGUtdGltZSBmb3JtYXRzLiBTeW5vbnltOgorICAgICAgICAgIC9TSU5DRS4KKworICAgL05PVC1B RlRFUjpkYXRlLXRpbWUKKyAgICAgICAgICBTZWxlY3Qgb25seSB0aG9zZSBmaWxlcyBoYXZpbmcg YSBkYXRlLXRpbWUgbm90IGxhdGVyIHRoYW4gKGkuZS4KKyAgICAgICAgICBlYXJsaWVyIG9yIGVx dWFsIHRvKSB0aGUgb25lIGdpdmVuLiBTeW5vbnltOiAvTk9ULVNJTkNFLgorCisgICAvQkVGT1JF OmRhdGUtdGltZQorICAgICAgICAgIFNlbGVjdCBvbmx5IHRob3NlIGZpbGVzIGhhdmluZyBhIGRh dGUtdGltZSBlYXJsaWVyIHRoYW4gdGhlIG9uZQorICAgICAgICAgIGdpdmVuLgorCisgICAvTk9U LUJFRk9SRTpkYXRlLXRpbWUKKyAgICAgICAgICBTZWxlY3Qgb25seSB0aG9zZSBmaWxlcyBoYXZp bmcgYSBkYXRlLXRpbWUgbm90IGVhcmxpZXIgdGhhbgorICAgICAgICAgIChpLmUuIGxhdGVyIG9y IGVxdWFsIHRvKSB0aGUgb25lIGdpdmVuLgorCisgICAvRE9URklMRVMKKyAgICAgICAgICBVTklY IGFuZCBPUy05IG9ubHk6IFRoZSBmaWxlc3BlYyBpcyBhbGxvd2VkIHRvIG1hdGNoIGZpbGVzIHdo b3NlCisgICAgICAgICAgbmFtZXMgc3RhcnQgd2l0aCAoZG90KSBwZXJpb2QuIE5vcm1hbGx5IHRo ZXNlIGZpbGVzIGFyZSBub3QKKyAgICAgICAgICBzaG93bi4KKworICAgL05PRE9URklMRVMKKyAg ICAgICAgICAoVU5JWCBhbmQgT1MtOSBvbmx5KSBEb24ndCBzaG93IGZpbGVzIHdob3NlIG5hbWVz IHN0YXJ0IHdpdGggZG90CisgICAgICAgICAgKHBlcmlvZCkuIFRoaXMgaXMgdGhlIG9wcG9zaXRl IG9mIC9ET1RGSUxFUywgYW5kIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAgIE5vdGUgdGhhdCB3 aGVuIGEgZGlyZWN0b3J5IG5hbWUgc3RhcnRzIHdpdGggYSBwZXJpb2QsIHRoZQorICAgICAgICAg IGRpcmVjdG9yeSBhbmQgKGluIHJlY3Vyc2l2ZSBvcGVyYXRpb25zKSBhbGwgaXRzIHN1YmRpcmVj dG9yaWVzCisgICAgICAgICAgYXJlIHNraXBwZWQuCisKKyAgIC9MQVJHRVItVEhBTjpudW1iZXIK KyAgICAgICAgICBPbmx5IHNlbGVjdCBmaWxlcyBsYXJnZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVy IG9mIGJ5dGVzLgorCisgICAvU01BTExFUi1USEFOOm51bWJlcgorICAgICAgICAgIE9ubHkgc2Vs ZWN0IGZpbGVzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzLgorCisgICAv RVhDRVBUOnBhdHRlcm4KKyAgICAgICAgICBTcGVjaWZpZXMgdGhhdCBhbnkgZmlsZXMgd2hvc2Ug bmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4sIHdoaWNoCisgICAgICAgICAgY2FuIGJlIGEgcmVndWxh ciBmaWxlbmFtZSwgb3IgbWF5IGNvbnRhaW4gIioiIGFuZC9vciAiPyIKKyAgICAgICAgICBtZXRh Y2hhcmFjdGVycyAod2lsZGNhcmRzKSwgYXJlIG5vdCB0byBiZSBzZWxlY3RlZC4gRXhhbXBsZToK KworICBzZW5kIC9leGNlcHQ6Ki5sb2cgKi4qCisKKyAgICAgICAgICBzZW5kcyBhbGwgZmlsZXMg aW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGV4Y2VwdCB0aG9zZSB3aXRoIGEKKyAgICAgICAgICBm aWxldHlwZSBvZiAiLmxvZyIuIEFub3RoZXI6CisKKyAgc2VuZCAvZXhjZXB0Oioufip+ICouKgor CisgICAgICAgICAgc2VuZHMgYWxsIGZpbGVzIGV4Y2VwdCB0aGUgb25lcyB0aGF0IGxvb2sgbGlr ZSBLZXJtaXQgb3IgRU1BQ1MKKyAgICAgICAgICBiYWNrdXAgZmlsZXMgKHN1Y2ggYXMgIm9vZmEu dHh0Ln4xN34iKSAob2YgY291cnNlIHlvdSBjYW4gYWxzbworICAgICAgICAgIHVzZSB0aGUgL05P QkFDS1VQIHN3aXRjaCBmb3IgdGhpcykuCisKKyAgICAgICAgICBUaGUgcGF0dGVybiBtYXRjaGVy IGlzIHRoZSBzYW1lIG9uZSB1c2VkIGJ5IElGIE1BVENIIHN0cmluZworICAgICAgICAgIHBhdHRl cm4gKFszNjFdU2VjdGlvbiA3LjQpLCBzbyB5b3UgY2FuIHRlc3QgeW91ciBwYXR0ZXJucyB1c2lu ZworICAgICAgICAgIElGIE1BVENILiBJZiB5b3UgbmVlZCB0byBtYXRjaCBhIGxpdGVyYWwgKiBv ciA/IChldGMpLCBwcmVjZWRlCisgICAgICAgICAgaXQgYnkgYSBiYWNrc2xhc2ggKFwpLiBJZiB0 aGUgcGF0dGVybiBjb250YWlucyBhbnkgc3BhY2VzLCBpdAorICAgICAgICAgIG11c3QgYmUgZW5j bG9zZWQgaW4gYnJhY2VzOgorCisgIHNlbmQgL2V4Y2VwdDp7Rm9vIGJhcn0gKi4qCisKKyAgICAg ICAgICBUaGUgcGF0dGVybiBjYW4gYWxzbyBiZSBhIGxpc3Qgb2YgdXAgdG8gOCBwYXR0ZXJucy4g SW4gdGhpcworICAgICAgICAgIGNhc2UsIHRoZSBlbnRpcmUgcGF0dGVybiBtdXN0IGJlIGVuY2xv c2VkIGluIGJyYWNlcywgYW5kIGVhY2gKKyAgICAgICAgICBzdWItcGF0dGVybiBtdXN0IGFsc28g YmUgZW5jbG9zZWQgaW4gYnJhY2VzOyB0aGlzIGVsaW1pbmF0ZXMgdGhlCisgICAgICAgICAgbmVl ZCBmb3IgZGVzaWduYXRpbmcgYSBzZXBhcmF0b3IgY2hhcmFjdGVyLCB3aGljaCBpcyBsaWtlbHkg dG8KKyAgICAgICAgICBhbHNvIGJlIGEgbGVnYWwgZmlsZW5hbWUgY2hhcmFjdGVyIG9uIHNvbWUg cGxhdGZvcm0gb3Igb3RoZXIsCisgICAgICAgICAgYW5kIHRoZXJlZm9yZSBhIHNvdXJjZSBvZiBj b25mdXNpb24uIFlvdSBtYXkgaW5jbHVkZSBzcGFjZXMKKyAgICAgICAgICBiZXR3ZWVuIHRoZSBz dWJwYXR0ZXJucyBidXQgdGhleSBhcmUgbm90IG5lY2Vzc2FyeS4gVGhlCisgICAgICAgICAgZm9s bG93aW5nIHR3byBjb21tYW5kcyBhcmUgZXF1aXZhbGVudDoKKworICBzZW5kIC9leGNlcHQ6e3tj ayoub30ge2NrKi5jfX0gY2sqLj8KKyAgc2VuZCAvZXhjZXB0Ont7Y2sqLm99e2NrKi5jfX0gY2sq Lj8KKworICAgICAgICAgIElmIGEgcGF0dGVybiBpcyB0byBpbmNsdWRlIGEgbGl0ZXJhbCBicmFj ZSBjaGFyYWN0ZXIsIHByZWNlZGUgaXQKKyAgICAgICAgICB3aXRoICJcIi4gQWxzbyBub3RlIHRo ZSBhcHBhcmVudCBjb25mbGljdCBvZiB0aGlzIGxpc3QgZm9ybWF0CisgICAgICAgICAgYW5kIHRo ZSBzdHJpbmctbGlzdCBmb3JtYXQgZGVzY3JpYmVkIGluIFszNjJdU2VjdGlvbiA0LjkuMS4gSW4K KyAgICAgICAgICBjYXNlIHlvdSB3YW50IHRvIGluY2x1ZGUgYSB3aWxkY2FyZCBzdHJpbmctbGlz dCB3aXRoIGJyYWNlcyBvbgorICAgICAgICAgIGl0cyBvdXRlciBlbmRzIGFzIGFuIC9FWENFUFQ6 IGFyZ3VtZW50LCBkbyBpdCBsaWtlIHRoaXM6CisKKyAgc2VuZCAvZXhjZXB0Ont7e2NrdXVzci5j LGNrdXVzMi5jLGNrdXVzNi5jfX19IGNrdXVzKi5jCisKKzEuNS41LiBTZXR0aW5nIFByZWZlcmVu Y2VzIGZvciBEaWZmZXJlbnQgQ29tbWFuZHMKKworICAgQ2VydGFpbiBvZnQtdXNlZCBjb21tYW5k cyBvZmZlciBsb3RzIG9mIHN3aXRjaGVzIGJlY2F1c2UgZGlmZmVyZW50CisgICBwZW9wbGUgaGF2 ZSBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzIG9yIHByZWZlcmVuY2VzLiBGb3IgZXhhbXBsZSwgc29t ZQorICAgcGVvcGxlIHdhbnQgdG8gYmUgYWJsZSB0byBkZWxldGUgZmlsZXMgd2l0aG91dCBoYXZp bmcgdG8gd2F0Y2ggYSBsaXN0CisgICBvZiB0aGUgZGVsZXRlZCBmaWxlcyBzY3JvbGwgcGFzdCwg d2hpbGUgb3RoZXJzIHdhbnQgdG8gYmUgcHJvbXB0ZWQgZm9yCisgICBwZXJtaXNzaW9uIHRvIGRl bGV0ZSBlYWNoIGZpbGUuIERpZmZlcmVudCBwZW9wbGUgcHJlZmVyIGRpZmZlcmVudAorICAgZGly ZWN0b3J5LWxpc3Rpbmcgc3R5bGVzLiBBbmQgc28gb24uIFN1Y2ggY29tbWFuZHMgY2FuIGJlIHRh aWxvcmVkIHdpdGgKKyAgIHRoZSBTRVQgT1BUSU9OUyBjb21tYW5kOgorCisgICBTRVQgT1BUSU9O UyBjb21tYW5kIFsgc3dpdGNoIFsgc3dpdGNoIFsgLi4uIF0gXSBdCisgICAgICAgICAgU2V0cyBl YWNoIHN3aXRjaCBhcyB0aGUgZGVmYXVsdCBmb3IgdGhlIGdpdmVuIGNvbW1hbmQsIHJlcGxhY2lu ZworICAgICAgICAgIHRoZSAiZmFjdG9yeSBkZWZhdWx0Ii4gT2YgY291cnNlIHlvdSBjYW4gYWxz byBvdmVycmlkZSBhbnkKKyAgICAgICAgICBkZWZhdWx0cyBlc3RhYmxpc2hlZCBieSB0aGUgU0VU IE9QVElPTlMgY29tbWFuZCBieSBpbmNsdWRpbmcgdGhlCisgICAgICAgICAgcmVsZXZhbnQgc3dp dGNoZXMgaW4gdGhlIGFmZmVjdGVkIGNvbW1hbmQgYW55IHRpbWUgeW91IGlzc3VlIGl0LgorCisg ICBTSE9XIE9QVElPTlMKKyAgICAgICAgICBMaXN0cyB0aGUgY29tbWFuZHMgdGhhdCBhbGxvd3Mg b3B0aW9uLXNldHRpbmcsIGFuZCB0aGUgb3B0aW9ucworICAgICAgICAgIGN1cnJlbnRseSBpbiBl ZmZlY3QsIGlmIGFueSwgZm9yIGVhY2guIFN3aXRjaGVzIHRoYXQgaGF2ZQorICAgICAgICAgIHN5 bm9ueW1zIGFyZSBzaG93biB1bmRlciB0aGVpciBwcmltYXJ5IG5hbWU7IGZvciBleGFtcGxlLiAv TE9HCisgICAgICAgICAgYW5kIC9WRVJCT1NFIGFyZSBzaG93biBhcyAvTElTVC4KKworICAgQ29t bWFuZHMgZm9yIHdoaWNoIG9wdGlvbnMgbWF5IGJlIHNldCBpbmNsdWRlIERJUkVDVE9SWSwgREVM RVRFLCBQVVJHRSwKKyAgIGFuZCBUWVBFLiBFeGFtcGxlczoKKworICBTRVQgT1BUSU9OUyBESVJF Q1RPUlkgL1BBR0UgL05PQkFDS1VQIC9IRUFESU5HIC9TT1JUOkRBVEUgL1JFVkVSU0UKKyAgU0VU IE9QVElPTlMgREVMRVRFIC9MSVNUIC9OT0hFQURJTkcgL05PUEFHRSAvTk9BU0sgL05PRE9URklM RVMKKyAgU0VUIE9QVElPTlMgVFlQRSAvUEFHRQorCisgICBOb3QgbmVjZXNzYXJpbHkgYWxsIG9m IGEgY29tbWFuZCdzIHN3aXRjaGVzIGNhbiBiZSBzZXQgYXMgb3B0aW9ucy4gRm9yCisgICBleGFt cGxlLCBmaWxlIHNlbGVjdGlvbiBzd2l0Y2hlcywgc2luY2UgdGhlc2Ugd291bGQgbm9ybWFsbHkg YmUKKyAgIGRpZmZlcmVudCBmb3IgZWFjaCBjb21tYW5kLgorCisgICBQdXQgdGhlIGRlc2lyZWQg U0VUIE9QVElPTlMgY29tbWFuZHMgaW4geW91ciBDLUtlcm1pdCBjdXN0b21pemF0aW9uCisgICBm aWxlIGZvciBlYWNoIGNvbW1hbmQgd2hvc2UgZGVmYXVsdCBzd2l0Y2hlcyB5b3Ugd2FudCB0byBj aGFuZ2UgZXZlcnkKKyAgIHRpbWUgeW91IHJ1biBDLUtlcm1pdC4KKworMS42LiBEYXRlcyBhbmQg VGltZXMKKworICAgU29tZSBjb21tYW5kcyBhbmQgc3dpdGNoZXMgdGFrZSBkYXRlLXRpbWUgdmFs dWVzLCBzdWNoIGFzOgorCisgIHNlbmQgL2FmdGVyOns4LUZlYi0yMDAwIDEwOjI4OjAxfQorCisg ICBWYXJpb3VzIGRhdGUtdGltZSBmb3JtYXRzIGFyZSBhY2NlcHRhYmxlLiBUaGUgcnVsZXMgZm9y IHRoZSBkYXRlIGFyZToKKworICAgICAqIFRoZSB5ZWFyIG11c3QgaGF2ZSA0IGRpZ2l0cy4KKyAg ICAgKiBJZiB0aGUgeWVhciBjb21lcyBmaXJzdCwgdGhlIHNlY29uZCBmaWVsZCBpcyB0aGUgbW9u dGguCisgICAgICogVGhlIGRheSwgbW9udGgsIGFuZCB5ZWFyIG1heSBiZSBzZXBhcmF0ZWQgYnkg c3BhY2VzLCAvLCAtLCBvcgorICAgICAgIHVuZGVyc2NvcmUuCisgICAgICogVGhlIG1vbnRoIG1h eSBiZSBudW1lcmljICgxID0gSmFudWFyeSkgb3Igc3BlbGxlZCBvdXQgb3IKKyAgICAgICBhYmJy ZXZpYXRlZCBpbiBFbmdsaXNoLgorCisgICBJZiB0aGUgZGF0ZS10aW1lIHN0cmluZyBjb250YWlu cyBhbnkgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluCisgICBicmFjZXMuIEV4YW1wbGVz IG9mIGxlZ2FsIGRhdGVzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnByZXRh dGlvbjoKKyAgMjAwMC1GZWItOCAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKKyAgezIw MDAgRmViIDh9ICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKKyAgMjAwMC9GZWIvOCAgICAg ICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKKyAgMjAwMF9GZWJfOCAgICAgICAgICAgICAgICA4 IEZlYnJ1YXJ5IDIwMDAKKyAgMjAwMC0yLTggICAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIw MDAKKyAgMjAwMC0wMi0wOCAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKKyAgOC1GZWIt MjAwMCAgICAgICAgICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKKyAgMDgtRmViLTIwMDAgICAgICAg ICAgICAgICA4IEZlYnJ1YXJ5IDIwMDAKKyAgMTIvMjUvMjAwMCAgICAgICAgICAgICAgICAyNSBE ZWNlbWJlciAyMDAwCisgIDI1LzEyLzIwMDAgICAgICAgICAgICAgICAgMjUgRGVjZW1iZXIgMjAw MAorCisgICBUaGUgbGFzdCB0d28gZXhhbXBsZXMgc2hvdyB0aGF0IHdoZW4gdGhlIHllYXIgY29t ZXMgbGFzdCwgYW5kIHRoZSBtb250aAorICAgaXMgZ2l2ZW4gbnVtZXJpY2FsbHksIHRoZSBvcmRl ciBvZiB0aGUgZGF5IGFuZCBtb250aCBkb2Vzbid0IG1hdHRlciBhcworICAgbG9uZyBhcyB0aGUg ZGF5IGlzIDEzIG9yIGdyZWF0ZXIgKG1tL2RkL3l5eXkgaXMgY29tbW9ubHkgdXNlZCBpbiB0aGUK KyAgIFVTQSwgd2hlcmVhcyBkZC9tbS95eXl5IGlzIHRoZSBub3JtIGluIEV1cm9wZSkuIEhvd2V2 ZXI6CisKKyAgMDgvMDIvMjAwMCAgICAgICAgICAgICAgICBJcyBhbWJpZ3VvdXMgYW5kIHRoZXJl Zm9yZSBub3QgYWNjZXB0ZWQuCisKKyAgIElmIGEgZGF0ZSBpcyBnaXZlbiwgdGhlIHRpbWUgaXMg b3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIDAwOjAwOjAwLiBJZgorICAgdGhlIHRpbWUgaXMgZ2l2 ZW4gd2l0aCBhIGRhdGUsIGl0IG11c3QgZm9sbG93IHRoZSBkYXRlLCBzZXBhcmF0ZWQgYnkKKyAg IHNwYWNlLCAvLCAtLCBvciB1bmRlcnNjb3JlLCBhbmQgd2l0aCBob3VycywgbWludXRlcywgYW5k IHNlY29uZHMKKyAgIHNlcGFyYXRlZCBieSBjb2xvbiAoOikuIEV4YW1wbGU6CisKKyAgMjAwMC1G ZWItOCAxMDoyODowMSAgICAgICBSZXByZXNlbnRzIDggRmVicnVhcnkgMjAwMCwgMTA6Mjg6MDFh bQorCisgICBJZiBhIGRhdGUgaXMgbm90IGdpdmVuLCB0aGUgY3VycmVudCBkYXRlIGlzIHVzZWQg YW5kIGEgdGltZSBpcworICAgcmVxdWlyZWQuCisKKyAgIFRpbWUgZm9ybWF0IGlzIGhoOm1tOnNz IG9yIGhoOm1tIG9yIGhoIGluIDI0LWhvdXIgZm9ybWF0LCBvciBmb2xsb3dlZAorICAgYnkgImFt IiBvciAicG0iIChvciAiQU0iIG9yICJQTSIpIHRvIGluZGljYXRlIG1vcm5pbmcgb3IgYWZ0ZXJu b29uLgorICAgRXhhbXBsZXMgb2YgdGltZXMgdGhhdCBhcmUgYWNjZXB0YWJsZToKKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW50ZXJwcmV0YXRpb246CisgIDM6MjM6NTYgICAgICAgICAg ICAgICAgICAgIDM6MjM6NTZhbQorICAzOjIzOjU2YW0gICAgICAgICAgICAgICAgICAzOjIzOjU2 YW0KKyAgMzoyMzo1NnBtICAgICAgICAgICAgICAgICAgMzoyMzo1NnBtID0gMTU6MjM6NTYKKyAx NToyMzo1NiAgICAgICAgICAgICAgICAgICAgMzoyMzo1NnBtID0gMTU6MjM6NTYKKyAgMzoyM3Bt ICAgICAgICAgICAgICAgICAgICAgMzoyMzowMHBtID0gMTU6MjM6MDAKKyAgMzoyM1BNICAgICAg ICAgICAgICAgICAgICAgMzoyMzowMHBtID0gMTU6MjM6MDAKKyAgM3BtICAgICAgICAgICAgICAg ICAgICAgICAgMzowMDowMHBtID0gMTU6MDA6MDAKKworICAgRXhhbXBsZXMgb2YgbGVnYWwgZGF0 ZS10aW1lczoKKworICBzZW5kIC9hZnRlcjp7OCBGZWIgMjAwMCAxMDoyODowMX0KKyAgc2VuZCAv YWZ0ZXI6OF9GZWJfMjAwMF8xMDoyODowMQorICBzZW5kIC9hZnRlcjo4LUZlYi0yMDAwLzEwOjI4 OjAxCisgIHNlbmQgL2FmdGVyOjIwMDAvMDIvMDgvMTA6Mjg6MDEKKyAgc2VuZCAvYWZ0ZXI6MjAw MC8wMi8wOF8xMDoyODowMQorICBzZW5kIC9hZnRlcjoyMDAwLzAyLzA4XzEwOjI4OjAxYW0KKyAg c2VuZCAvYWZ0ZXI6MjAwMC8wMi8wOF8xMDoyODowMXBtCisgIHNlbmQgL2FmdGVyOjIwMDAvMDIv MDhfMTA6MjhwbQorICBzZW5kIC9hZnRlcjoyMDAwLzAyLzA4XzEwcG0KKyAgc2VuZCAvYWZ0ZXI6 MTA6MDA6MDBwbQorICBzZW5kIC9hZnRlcjoxMDowMHBtCisgIHNlbmQgL2FmdGVyOjEwcG0KKyAg c2VuZCAvYWZ0ZXI6MjIKKworICAgRmluYWxseSwgdGhlcmUgaXMgYSBzcGVjaWFsIGFsbC1udW1l cmljIGZvcm1hdCB5b3UgY2FuIHVzZToKKworICB5eXl5bW1kZCBoaDptbTpzcworCisgICBGb3Ig ZXhhbXBsZToKKworICAyMDAwMDIwOCAxMDoyODowMQorCisgICBUaGlzIGlzIEtlcm1pdCdzIHN0 YW5kYXJkIGRhdGUtdGltZSBmb3JtYXQgKGJhc2VkIG9uIElTTyA4NjAxKSwgYW5kIGlzCisgICBh Y2NlcHRlZCAoYW1vbmcgb3RoZXIgZm9ybWF0cykgYnkgYW55IGNvbW1hbmQgb3Igc3dpdGNoIHRo YXQgcmVxdWlyZXMgYQorICAgZGF0ZS10aW1lLCBhbmQgaXMgb3V0cHV0IGJ5IGFueSBmdW5jdGlv biB3aG9zZSByZXN1bHQgaXMgYSBjYWxlbmRhcgorICAgZGF0ZS10aW1lLgorCisgICBUaGVyZSBh cmUgbm8gb3B0aW9uYWwgcGFydHMgdG8gdGhpcyBmb3JtYXQgYW5kIGl0IG11c3QgYmUgZXhhY3Rs eSAxNworICAgY2hhcmFjdGVycyBsb25nLCBwdW5jdHVhdGVkIGFzIHNob3duIChleGNlcHQgeW91 IGNhbiBzdWJzdGl0dXRlCisgICB1bmRlcnNjb3JlIGZvciBzcGFjZSBpbiBjb250ZXh0cyB3aGVy ZSBhIHNpbmdsZSAid29yZCIgaXMgcmVxdWlyZWQpLgorICAgVGhlIHRpbWUgaXMgaW4gMjQtaG91 ciBmb3JtYXQgKDIzOjAwOjAwIGlzIDExOjAwcG0pLiBUaGlzIGlzIHRoZSBmb3JtYXQKKyAgIHJl dHVybmVkIGJ5IFxmZGF0ZShmaWxlbmFtZSksIHNvIHlvdSBjYW4gYWxzbyB1c2UgY29uc3RydWN0 aW9ucyBsaWtlCisgICB0aGlzOgorCisgIHNlbmQgL2FmdGVyOlxmZGF0ZShvb2ZhLnR4dCkKKwor ICAgd2hpY2ggbWVhbnMgImFsbCBmaWxlcyBuZXdlciB0aGFuIG9vZmEudHh0Ii4KKworICAgQmVz aWRlcyBleHBsaWNpdCBkYXRlcywgeW91IGNhbiBhbHNvIHVzZSB0aGUgYW55IG9mIHRoZSBmb2xs b3dpbmcKKyAgIHNob3J0Y3V0czoKKworICAgVE9EQVkKKyAgICAgICAgICBTdGFuZHMgZm9yIHRo ZSBjdXJyZW50IGRhdGUgYXQgMDA6MDA6MDAuCisKKyAgIFRPREFZIDEyOjM0OjU2CisgICAgICAg ICAgU3RhbmRzIGZvciB0aGUgY3VycmVudCBkYXRlIGF0IHRoZSBnaXZlbiB0aW1lLgorCisgICBZ RVNURVJEQVkKKyAgICAgICAgICBTdGFuZHMgZm9yIHllc3RlcmRheSdzIGRhdGUgYXQgMDA6MDA6 MDAuIEEgdGltZSBtYXkgYWxzbyBiZQorICAgICAgICAgIGdpdmVuLgorCisgICBUT01PUlJPVwor ICAgICAgICAgIFN0YW5kcyBmb3IgdG9tb3Jyb3cncyBkYXRlIGF0IDAwOjAwOjAwLiBBIHRpbWUg bWF5IGFsc28gYmUKKyAgICAgICAgICBnaXZlbi4KKworICAgKyBudW1iZXIgeyBEQVlTLCBXRUVL UywgTU9OVEhTLCBZRUFSUyB9IFsgdGltZSBdCisgICAgICAgICAgSXMgcmVwbGFjZWQgYnkgdGhl IGZ1dHVyZSBkYXRlIGluZGljYXRlZCwgcmVsYXRpdmUgdG8gdGhlCisgICAgICAgICAgY3VycmVu dCBkYXRlLiBJZiB0aGUgdGltZSBpcyBvbWl0dGVkLCAwMDowMDowMCBpcyB1c2VkLgorICAgICAg ICAgIEV4YW1wbGVzOiArM2RheXMsICsyd2Vla3MsICsxeWVhciwgKzM3bW9udGhzLgorCisgICAt IG51bWJlciB7IERBWVMsIFdFRUtTLCBNT05USFMsIFlFQVJTIH0gWyB0aW1lIF0KKworICAgICAg ICAgIElzIHJlcGxhY2VkIGJ5IHRoZSBwYXN0IGRhdGUgaW5kaWNhdGVkLCByZWxhdGl2ZSB0byB0 aGUgY3VycmVudAorICAgICAgICAgIGRhdGUuIElmIHRoZSB0aW1lIGlzIG9taXR0ZWQsIDAwOjAw OjAwIGlzIHVzZWQuCisKKyAgIFRoZSB0aW1lIGNhbiBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgZGF0 ZSBzaG9ydGN1dCBieSBhbnkgb2YgdGhlIHNhbWUKKyAgIHNlcGFyYXRvcnMgdGhhdCBhcmUgYWxs b3dlZCBmb3IgZXhwbGljaXQgZGF0ZS10aW1lczogc3BhY2UsIGh5cGhlbiwKKyAgIHNsYXNoLCBw ZXJpb2QsIG9yIHVuZGVyc2NvcmUuIEluIHN3aXRjaGVzIGFuZCBvdGhlciBzcGFjZS1kZWxpbWl0 ZWQKKyAgIGZpZWxkcywgdXNlIG5vbi1zcGFjZXMgdG8gc2VwYXJhdGUgZGF0ZS90aW1lIGZpZWxk cywgb3IgZW5jbG9zZSB0aGUKKyAgIGRhdGUtdGltZSBpbiBicmFjZXMsIGUuZy46CisKKyAgcHVy Z2UgL2JlZm9yZTotNGRheXNfMTI6MDA6MDAKKyAgcHVyZ2UgL2JlZm9yZTp7LSA0IGRheXMgMTI6 MDA6MDB9CisKKyAgIE9mIGNvdXJzZSB5b3UgY2FuIGFsc28gdXNlIHZhcmlhYmxlczoKKworICBk ZWZpbmUgXCVuIDQzCisgIHB1cmdlIC9iZWZvcmU6LVwlbmRheXNfMTI6MDA6MDAKKworICAgU2hv cnRjdXQgbmFtZXMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIGFueSBsZW5ndGggdGhhdCBzdGlsbAor ICAgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYW55IG90aGVyIG5hbWUgdGhhdCBjYW4gYXBwZWFy IGluIHRoZSBzYW1lCisgICBjb250ZXh0LCBlLmcuICJUT0QiIGZvciB0b2RheSwgIlkiIGZvciB5 ZXN0ZXJkYXkuIEFsc28sIHRoZSBzcGVjaWFsCisgICBhYmJyZXZpYXRpb24gIndrcyIgaXMgYWNj ZXB0ZWQgZm9yIFdFRUtTLCBhbmQgInlycyIgZm9yICJZRUFSUyIuCisKKyAgIChUbyBzZWUgaG93 IHRvIHNwZWNpZnkgZGF0ZXMgcmVsYXRpdmUgdG8gYSBzcGVjaWZpYyBkYXRlLCByYXRoZXIgdGhh bgorICAgdGhlIGN1cnJlbnQgb25lLCBzZWUgdGhlIFszNjNdXGZtamQoKSBmdW5jdGlvbiBkZXNj cmlwdGlvbiBiZWxvdy4pCisKKyAgIFlvdSBjYW4gY2hlY2sgZGF0ZSBmb3JtYXRzIHdpdGggdGhl IERBVEUgY29tbWFuZC4gREFURSBieSBpdHNlbGYgcHJpbnRzCisgICB0aGUgY3VycmVudCBkYXRl IGFuZCB0aW1lIGluIHN0YW5kYXJkIGZvcm1hdDogeXl5eW1tZGQgaGg6bW06c3MuIERBVEUKKyAg IGZvbGxvd2VkIGJ5IGEgZGF0ZSBhbmQvb3IgdGltZSAoaW5jbHVkaW5nIHNob3J0Y3V0cykgY29u dmVydHMgaXQgdG8KKyAgIHN0YW5kYXJkIGZvcm1hdCBpZiBpdCBjYW4gdW5kZXJzdGFuZCBpdCwg b3RoZXJ3aXNlIGl0IHByaW50cyBhbiBlcnJvcgorICAgbWVzc2FnZS4KKworICAgVGhlIGZvbGxv d2luZyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBkZWFsIHdpdGggZGF0ZXMgYW5kIHRpbWVzOyBh bnkKKyAgIGZ1bmN0aW9uIGFyZ3VtZW50IGRlc2lnbmF0ZWQgYXMgImRhdGUtdGltZSIgY2FuIGJl IGluIGFueSBvZiB0aGUKKyAgIGZvcm1hdHMgZGVzY3JpYmVkIGFib3ZlLgorCisgICBcdihkYXkp CisgICAgICAgICAgVGhlIGZpcnN0IHRocmVlIGxldHRlcnMgb2YgdGhlIEVuZ2xpc2ggd29yZCBm b3IgdGhlIGN1cnJlbnQgZGF5CisgICAgICAgICAgb2YgdGhlIHdlZWssIGUuZy4gIldlZCIuCisK KyAgIFxmZGF5KGRhdGUtdGltZSkKKyAgICAgICAgICBUaGUgZmlyc3QgdGhyZWUgbGV0dGVycyBv ZiB0aGUgRW5nbGlzaCB3b3JkIGZvciBkYXkgb2YgdGhlIHdlZWsKKyAgICAgICAgICBvZiB0aGUg Z2l2ZW4gZGF0ZS4gSWYgYSB0aW1lIGlzIGluY2x1ZGVkLCBpdCBpcyBpZ25vcmVkLgorICAgICAg ICAgIEV4YW1wbGU6IFxmZGF5KDggRmViIDE5ODgpID0gIk1vbiIuCisKKyAgIFx2KG5kYXkpCisg ICAgICAgICAgVGhlIG51bWVyaWMgZGF5IG9mIHRoZSB3ZWVrOiAwID0gU3VuZGF5LCAxID0gTW9u ZGF5LCAuLi4sIDYgPQorICAgICAgICAgIFNhdHVyZGF5LgorCisgICBcZm5kYXkoZGF0ZS10aW1l KQorICAgICAgICAgIFRoZSBudW1lcmljIGRheSBvZiB0aGUgd2VlayBmb3IgdGhlIGdpdmVuIGRh dGUuIElmIGEgdGltZSBpcworICAgICAgICAgIGluY2x1ZGVkLCBpdCBpcyBpZ25vcmVkLiBFeGFt cGxlOiBcZm5kYXkoOCBGZWIgMTk4OCkgPSAiMSIuCisKKyAgIFx2KGRhdGUpCisgICAgICAgICAg VGhlIGN1cnJlbnQgZGF0ZSBhcyBkZCBtbW0geXl5eSwgZS5nLiAiMDggRmViIDIwMDAiIChhcyBp biB0aGlzCisgICAgICAgICAgZXhhbXBsZSwgYSBsZWFkaW5nIHplcm8gaXMgc3VwcGxpZWQgZm9y IGRheS1vZi1tb250aCBsZXNzIHRoYW4KKyAgICAgICAgICAxMCkuCisKKyAgIFx2KG5kYXRlKQor ICAgICAgICAgIFRoZSBjdXJyZW50IGRhdGUgaW4gbnVtZXJpYyBmb3JtYXQ6IHl5eXltbWRkLCBl LmcuICIyMDAwMDIwOCIuCisKKyAgIFx2KHRpbWUpCisgICAgICAgICAgVGhlIGN1cnJlbnQgdGlt ZSBhcyBoaDptbTpzcywgZS5nLiAiMTU6Mjc6MTQiLgorCisgICBcZnRpbWUodGltZSkKKyAgICAg ICAgICBUaGUgZ2l2ZW4gZnJlZS1mb3JtYXQgZGF0ZSBhbmQvb3IgdGltZSAoZS5nLiAiM3BtIikg cmV0dXJucyB0aGUKKyAgICAgICAgICB0aW1lICh3aXRob3V0IHRoZSBkYXRlKSBjb252ZXJ0ZWQg dG8gaGg6bW06c3MgMjQtaG91ciBmb3JtYXQsCisgICAgICAgICAgZS5nLiAiMTU6MDA6MDAiICh0 aGUgZGF0ZSwgaWYgZ2l2ZW4sIGlzIGlnbm9yZWQpLgorCisgICBcdihudGltZSkKKyAgICAgICAg ICBUaGUgY3VycmVudCB0aW1lIGFzIHNlY29uZHMgc2luY2UgbWlkbmlnaHQsIGUuZy4gIjU1NjM0 Ii4KKworICAgXHYodGZ0aW1lKQorICAgICAgICAgIFRoZSBlbGFwc2VkIHRpbWUgb2YgdGhlIG1v c3QgcmVjZW50IGZpbGUtdHJhbnNmZXIgb3BlcmF0aW9uIGluCisgICAgICAgICAgc2Vjb25kcy4K KworICAgXHYoaW50aW1lKQorICAgICAgICAgIFRoZSBlbGFwc2VkIHRpbWUgZm9yIHRoZSBtb3N0 IHJlY2VudCBJTlBVVCBjb21tYW5kIHRvIGNvbXBsZXRlLAorICAgICAgICAgIGluIG1pbGxpc2Vj b25kcy4KKworICAgXGZudGltZSh0aW1lKQorICAgICAgICAgIFRoZSBnaXZlbiBmcmVlLWZvcm1h dCBkYXRlIGFuZC9vciB0aW1lIGlzIGNvbnZlcnRlZCB0byBzZWNvbmRzCisgICAgICAgICAgc2lu Y2UgbWlkbmlnaHQgKHRoZSBkYXRlLCBpZiBnaXZlbiwgaXMgaWdub3JlZCkuIFRoaXMgZnVuY3Rp b24KKyAgICAgICAgICByZXBsYWNlcyBcZnRvZDJzZWNzKCksIHdoaWNoIGlzIG5vdyBhIHN5bm9u eW0gZm9yIFxmbnRpbWUoKS4KKyAgICAgICAgICBVbmxpa2UgXGZ0b2Qyc2VjcygpLCBcZm50aW1l KCkgYWxsb3dzIGEgZGF0ZSB0byBiZSBpbmNsdWRlZCwgYW5kCisgICAgICAgICAgaXQgYWxsb3dz IHRoZSB0aW1lIHRvIGJlIGluIGZyZWUgZm9ybWF0IChsaWtlIDNwbSksIGFuZCBpdAorICAgICAg ICAgIGFsbG93cyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gYmUgbW9yZSB0aGFuIDI0IGhvdXJzLiBF LmcuCisgICAgICAgICAgXGZudGltZSg0ODowMDowMCkgPSAxNzI4MDAuIEV4YW1wbGUgb2YgdXNl OgorCisgIHNldCBhbGFybSBcZm50aW1lKDQ4OjAwOjAwKSA7IHNldCBhbGFybSA0OCBob3VycyBm cm9tIG5vdy4KKworICAgXGZuMnRpbWUoc2Vjb25kcykKKyAgICAgICAgICBUaGUgZ2l2ZW4gbnVt YmVyIG9mIHNlY29uZHMgaXMgY29udmVydGVkIHRvIGhoOm1tOnNzIGZvcm1hdC4KKworICAgXGZk YXRlKGZpbGVuYW1lKQorICAgICAgICAgIFJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiBkYXRlLXRp bWUgb2YgdGhlIGdpdmVuIGZpbGUgaW4gc3RhbmRhcmQKKyAgICAgICAgICBmb3JtYXQ6IHl5eXlt bWRkIGhoOm1tOnNzLgorCisgICBcZmN2dGRhdGUoZGF0ZS10aW1lKQorICAgICAgICAgIENvbnZl cnRzIGEgZnJlZS1mb3JtYXQgZGF0ZSBhbmQvb3IgdGltZSB0byBLZXJtaXQgc3RhbmRhcmQKKyAg ICAgICAgICBmb3JtYXQ6IHl5eXltbWRkIGhoOm1tOnNzLiBJZiBubyBhcmd1bWVudCBpcyBnaXZl biwgcmV0dXJucyB0aGUKKyAgICAgICAgICBjdXJyZW50IGRhdGUtdGltZSBpbiBzdGFuZGFyZCBm b3JtYXQuIElmIGEgZGF0ZSBpcyBnaXZlbiBidXQgbm8KKyAgICAgICAgICB0aW1lLCB0aGUgY29u dmVydGVkIGRhdGUgaXMgcmV0dXJuZWQgd2l0aG91dCBhIHRpbWUuIElmIGEgdGltZQorICAgICAg ICAgIGlzIGdpdmVuIHdpdGggbm8gZGF0ZSwgdGhlIGN1cnJlbnQgZGF0ZSBpcyBzdXBwbGllZC4g RXhhbXBsZXM6CisKKyAgXGZjdnRkYXRlKDQgSnVsIDIwMDAgMjoyMToxN3BtKSA9IDIwMDAwNzA0 IDE0OjIxOjE3CisgIFxmY3Z0ZGF0ZSgpID0gMjAwMDA3MDQgMTQ6MjE6MTcgKG9uIDQgSnVsIDIw MDAgYXQgMjoyMToxN3BtKS4KKyAgXGZjdnRkKDQgSnVsIDIwMDApID0gMjAwMDA3MDQKKyAgXGZj dnRkKDZwbSkgPSAyMDAwMDcwNCAxODowMDowMCAob24gNCBKdWwgMjAwMCBhdCA2OjAwcG0pLgor CisgICBcZmRheW9meWVhcihkYXRlLXRpbWUpCisgICBcZmRveShkYXRlLXRpbWUpCisgICAgICAg ICAgQ29udmVydHMgYSBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lIHRvIHl5eXlkZGQsIHdo ZXJlIGRkZCBpcworICAgICAgICAgIHRoZSAzLWRpZ2l0IGRheSBvZiB0aGUgeWVhciwgYW5kIDEg SmFudWFyeSBpcyBEYXkgMS4gSWYgYSB0aW1lCisgICAgICAgICAgaXMgaW5jbHVkZWQgd2l0aCB0 aGUgZGF0ZSwgaXQgaXMgcmV0dXJuZWQgaW4gc3RhbmRhcmQgZm9ybWF0LiBJZgorICAgICAgICAg IGEgZGF0ZSBpcyBpbmNsdWRlZCBidXQgbm8gdGltZSwgdGhlIGRhdGUgaXMgcmV0dXJuZWQgd2l0 aG91dCBhCisgICAgICAgICAgdGltZS4gSWYgYSB0aW1lIGlzIGdpdmVuIHdpdGggbm8gZGF0ZSwg dGhlIHRpbWUgaXMgY29udmVydGVkIGFuZAorICAgICAgICAgIHRoZSBjdXJyZW50IGRhdGUgaXMg c3VwcGxpZWQuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUKKyAgICAgICAgICBjdXJyZW50 IGRhdGUtdGltZSBpcyByZXR1cm5lZC4gU3lub255bTogXGZkb3koKS4gRXhhbXBsZXM6CisKKyAg XGZkZGF5b2Z5ZWFyKDQgSnVsIDIwMDAgMjoyMToxN3BtKSA9IDIwMDAxODUgMTQ6MjE6MTcKKyAg XGZkb3koKSA9IDIwMDAxODUgMTQ6MjE6MTcgKG9uIDQgSnVsIDIwMDAgYXQgMjoyMToxN3BtKS4K KyAgXGZkb3koNCBKdWwgMjAwMCkgPSAyMDAwMTg1CisgIFxmZG95KDZwbSkgPSAyMDAwMTg1IDE4 OjAwOjAwIChvbiA0IEp1bCAyMDAwIGF0IDY6MDBwbSkuCisKKyAgIE5vdGU6IFRoZSB5eXl5ZGRk IGRheS1vZi15ZWFyIGZvcm1hdCBpcyBvZnRlbiBlcnJvbmVvdXNseSByZWZlcnJlZCB0bworICAg YXMgYSBKdWxpYW4gZGF0ZS4gSG93ZXZlciwgYSB0cnVlIEp1bGlhbiBkYXRlIGlzIGEgc2ltcGxl IGNvdW50aW5nCisgICBudW1iZXIsIHRoZSBudW1iZXIgb2YgZGF5cyBzaW5jZSBhIGNlcnRhaW4g Zml4ZWQgZGF5IGluIHRoZSBwYXN0LgorICAgWzM2NF1TZWUgXGZtamQoKSBiZWxvdy4KKworICAg XGZkb3kyZGF0ZShkYXRlLXRpbWUpCisgICAgICAgICAgQ29udmVydHMgYSBkYXRlIG9yIGRhdGUt dGltZSBpbiBkYXktb2YteWVhciBmb3JtYXQgdG8gYSBzdGFuZGFyZAorICAgICAgICAgIGZvcm1h dCBkYXRlLiBBIHl5eXlkZGQtZm9ybWF0IGRhdGUgbXVzdCBiZSBzdXBwbGllZDsgdGltZSBpcwor ICAgICAgICAgIG9wdGlvbmFsLiBUaGUgZ2l2ZW4gZGF0ZSBpcyBjb252ZXJ0ZWQgdG8geXl5eW1t ZGQgZm9ybWF0LiBJZiBhCisgICAgICAgICAgdGltZSBpcyBnaXZlbiwgaXQgaXMgY29udmVydGVk IHRvIDI0LWhvdXIgZm9ybWF0LiBFeGFtcGxlczoKKworICBcZmRveTJkYXRlKDIwMDAxODUpID0g MjAwMDA3MDQKKyAgXGZkb3kyKDIwMDAxODUgM3BtKSA9IDIwMDAwNzA0IDE1OjAwOjAwCisKKyAg IFxmbWpkKGRhdGUtdGltZSkKKyAgICAgICAgICBDb252ZXJ0cyBmcmVlLWZvcm1hdCBkYXRlIGFu ZC9vciB0aW1lIHRvIGEgTW9kaWZpZWQgSnVsaWFuIERhdGUKKyAgICAgICAgICAoTUpEKSwgdGhl IG51bWJlciBvZiBkYXlzIHNpbmNlIDE3IE5vdiAxODU4IDAwOjAwOjAwLiBJZiBhIHRpbWUKKyAg ICAgICAgICBpcyBnaXZlbiwgaXQgaXMgaWdub3JlZC4gRXhhbXBsZXM6CisKKyAgXGZtamQoNCBK dWwgMjAwMCkgPSA1MDk5OAorICBcZm1qZCgxNyBOb3YgMTg1OCkgPSAwCisgIFxmbWpkKDE2IE5v diAxODU4KSA9IC0xCisKKyAgIFxmbWpkMmRhdGUobWpkKQorICAgICAgICAgIENvbnZlcnRzIGFu IE1KRCAoaW50ZWdlcikgdG8gc3RhbmRhcmQgZGF0ZSBmb3JtYXQsIHl5eXltbWRkOgorCisgIFxm bWpkMig1MDk5OCkgPSA0IEp1bCAxOTk4CisgIFxmbWpkMigwKSA9IDE3IE5vdiAxODU4CisgIFxm bWpkMigtMSkgPSAxNiBOb3YgMTg1OAorICBcZm1qZDIoLTM2NSkgPSAxNyBOb3YgMTg1NworCisg ICBNSkRzIGFyZSBub3JtYWwgaW50ZWdlcnMgYW5kLCB1bmxpa2UgRE9ZcywgbWF5IGJlIGFkZGVk LCBzdWJ0cmFjdGVkLAorICAgZXRjLCB3aXRoIGVhY2ggb3RoZXIgb3Igd2l0aCBvdGhlciBpbnRl Z2VycywgdG8gb2J0YWluIG1lYW5pbmdmdWwKKyAgIHJlc3VsdHMuIEZvciBleGFtcGxlLCB0byBm aW5kIG91dCB0aGUgZGF0ZSAyMTIgZGF5cyBhZ286CisKKyAgZWNobyBcZm1qZDJkYXRlKFxmbWpk KCktMjEyKQorCisgICBDb25zdHJ1Y3Rpb25zIHN1Y2ggYXMgdGhpcyBjYW4gYmUgdXNlZCBpbiBh bnkgY29tbWFuZCB3aGVyZSBhIGRhdGUtdGltZQorICAgaXMgcmVxdWlyZWQsIGUuZy46CisKKyAg c2VuZCAvYWZ0ZXI6XGZtamQyZGF0ZShcZm1qZCgpLTIxMikKKworICAgdG8gc2VuZCBhbGwgZmls ZXMgdGhhdCBhcmUgbm90IG9sZGVyIHRoYW4gMjEyIGRheXMgKHRoaXMgaXMgZXF1aXZhbGVudAor ICAgdG8gInNlbmQgL2FmdGVyOi0yMTJkYXlzIikuCisKKyAgIE1KRHMgYWxzbyBoYXZlIG90aGVy IHJlZ3VsYXJpdGllcyBub3QgZXhoaWJpdGVkIGJ5IG90aGVyIGRhdGUgZm9ybWF0cy4KKyAgIEZv ciBleGFtcGxlLCBcZm1vZHVsdXMoXGZtamQoYW55LWRhdGUpLDcpIGdpdmVzIHRoZSBkYXkgb2Yg dGhlIHdlZWsgZm9yCisgICBhbnkgZGF0ZSAod2hlcmUgND1TdW4sIDU9TW9uLCAuLi4sIDM9U2F0 KS4gKEhvd2V2ZXIsIGl0IGlzIGVhc2llciB0bworICAgdXNlIFxmbmRheSgpIGZvciB0aGlzIHB1 cnBvc2UsIGFuZCBpdCBnaXZlcyB0aGUgbW9yZSBjb252ZW50aW9uYWwKKyAgIHJlc3VsdCBvZiAw PVN1biwgMT1Nb24sIC4uLiwgNj1TYXQpLgorCisgICBOb3RlIHRoYXQgaWYgTUpEcyBhcmUgdG8g YmUgY29tcGFyZWQsIHRoZXkgbXVzdCBiZSBjb21wYXJlZCBudW1lcmljYWxseQorICAgKElGIDws ID0sID4pIGFuZCBub3QgbGV4aWNhbGx5IChJRiBMTFQsIEVRVUFMLCBMR1QpLCB3aGVyZWFzIERP WXMgbXVzdAorICAgYmUgY29tcGFyZWQgbGV4aWNhbGx5IGlmIHRoZXkgaW5jbHVkZSBhIHRpbWUg KHdoaWNoIGNvbnRhaW5zICI6IgorICAgY2hhcmFjdGVycyk7IGhvd2V2ZXIsIGlmIERPWXMgZG8g bm90IGluY2x1ZGUgYSB0aW1lLCB0aGV5IG1heSBhbHNvIGJlCisgICBjb21wYXJlZCBudW1lcmlj YWxseS4KKworICAgSW4gYW55IGNhc2UsIGxleGljYWwgY29tcGFyaXNvbiBvZiBET1lzIGFsd2F5 cyBwcm9kdWNlcyB0aGUgYXBwcm9wcmlhdGUKKyAgIHJlc3VsdCwgYXMgZG9lcyBudW1lcmljIGNv bXBhcmlzb24gb2YgTUpEcy4KKworICAgVGhlIHNhbWUgY29tbWVudHMgYXBwbHkgdG8gc29ydGlu Zy4gQWxzbyBub3RlIHRoYXQgRE9ZcyBhcmUgZml4ZWQKKyAgIGxlbmd0aCwgYnV0IE1KRHMgY2Fu IHZhcnkgaW4gbGVuZ3RoLiBIb3dldmVyLCBhbGwgTUpEcyBiZXR3ZWVuIDMgQXByaWwKKyAgIDE4 ODYgYW5kIDMwIEF1ZyAyMTMyIGFyZSA1IGRlY2ltYWwgZGlnaXRzIGxvbmcuIChNSkRzIGJlY29t ZSA2IGRpZ2l0cworICAgbG9uZyBvbiAzMSBBdWcgMjEzMiwgYW5kIDcgZGlnaXRzIGxvbmcgb24g MTMgT2N0IDQ1OTYpLgorCisxLjcuIFBhcnRpYWwgQ29tcGxldGlvbiBvZiBLZXl3b3JkcworCisg ICBQYXJ0aWFsIGNvbXBsZXRpb24gb2Yga2V5d29yZHMgd2FzIGFkZGVkIGluIEMtS2VybWl0IDcu MC4gSW4gcHJpb3IKKyAgIHZlcnNpb25zLCBpZiBjb21wbGV0aW9uIHdhcyBhdHRlbXB0ZWQgKGJ5 IHByZXNzaW5nIHRoZSBFc2Mgb3IgVGFiIGtleSkKKyAgIG9uIGEgc3RyaW5nIHRoYXQgbWF0Y2hl ZCBkaWZmZXJlbnQga2V5d29yZHMsIHlvdSdkIGp1c3QgZ2V0IGEgYmVlcC4gTm93CisgICBLZXJt aXQgY29tcGxldGVzIHVwIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hlcmUgdGhlIHBvc3NpYmx5 IG1hdGNoaW5nCisgICBrZXl3b3JkcyBkaWZmZXIgYW5kIHRoZW4gYmVlcHMuIEZvciBleGFtcGxl OgorCisgIEMtS2VybWl0PiBzZW5kIC9uPFRhYj4KKworICAgd2hpY2ggbWF0Y2hlcyAvTk9ULUJF Rk9SRSBhbmQgL05PVC1BRlRFUiwgbm93IGNvbXBsZXRlcyB1cCB0byB0aGUgZGFzaDoKKworICBD LUtlcm1pdD4gc2VuZCAvbjxUYWI+b3QtPEJlZXA+CisKKyAgIFBhcnRpYWwgY29tcGxldGlvbiB3 b3JrcyBmb3IgZmlsZW5hbWVzIHRvbyAoYXMgaXQgaGFzIGZvciBzb21lIHllYXJzKS4KKworMS44 LiBDb21tYW5kIFJlY2FsbAorCisgICBDLUtlcm1pdCBoYXMgaGFkIGEgY29tbWFuZCBoaXN0b3J5 IGJ1ZmZlciBmb3Igc29tZSB0aW1lLCB3aGljaCBjb3VsZCBiZQorICAgc2Nyb2xsZWQgaW50ZXJh Y3RpdmVseSB1c2luZyBjb250cm9sIGNoYXJhY3RlcnMgb3IgKGluIEtlcm1pdCA5NSBvbmx5KQor ICAgYXJyb3cga2V5cy4gVmVyc2lvbiA3LjAgYWRkcyBhIFJFRE8gY29tbWFuZCB0aGF0IGFsbG93 cyB0aGUgbW9zdCByZWNlbnQKKyAgIGNvbW1hbmQgbWF0Y2hpbmcgYSBnaXZlbiBwYXR0ZXJuIHRv IGJlIHJlLWV4ZWN1dGVkOgorCisgICB7IFJFRE8sIFJSLCBeIH0gWyBwYXR0ZXJuIF0KKyAgICAg ICAgICBTZWFyY2ggdGhlIGNvbW1hbmQgaGlzdG9yeSBsaXN0IGZvciB0aGUgbW9zdCByZWNlbnQg Y29tbWFuZCB0aGF0CisgICAgICAgICAgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybiwgYW5kIGlm IG9uZSBpcyBmb3VuZCwgZXhlY3V0ZSBpdAorICAgICAgICAgIGFnYWluLgorCisgICBUaGUgcGF0 dGVybiBjYW4gYmUgYSBzaW1wbGUgc3RyaW5nIChsaWtlICJzZW5kIiksIGluIHdoaWNoIGNhc2Ug dGhlCisgICBsYXN0IFNFTkQgY29tbWFuZCBpcyByZS1leGVjdXRlZC4gT3IgaXQgY2FuIGNvbnRh aW4gd2lsZGNhcmQgY2hhcmFjdGVycworICAgIioiIGFuZC9vciAiPyIsIHdoaWNoIG1hdGNoIGFu eSBzdHJpbmcgYW5kIGFueSBzaW5nbGUgY2hhcmFjdGVyLAorICAgcmVzcGVjdGl2ZWx5IChub3Rl IHRoYXQgIj8iIG11c3QgYmUgcHJlY2VkZWQgYnkgYmFja3NsYXNoIHRvIG92ZXJyaWRlCisgICBp dHMgbm9ybWFsIGZ1bmN0aW9uIG9mIGdpdmluZyBoZWxwKSwgYW5kIGluIG1vc3QgQy1LZXJtaXQg dmVyc2lvbnMgbWF5CisgICBhbHNvIGluY2x1ZGUgW10gY2hhcmFjdGVyIGxpc3RzIGFuZCB7fSBz dHJpbmcgbGlzdHMgKHNlZSBbMzY1XVNlY3Rpb24KKyAgIDQuOSkuCisKKyAgIFRoZSBtYXRjaCB3 b3JrcyBieSBhcHBlbmRpbmcgIioiIHRvIHRoZSBlbmQgb2YgdGhlIGdpdmVuIHBhdHRlcm4gKGlm CisgICB5b3UgZGlkbid0IHB1dCBvbmUgdGhlcmUgeW91cnNlbGYpLiBUaHVzICJyZWRvICpvb2Zh IiBiZWNvbWVzICJyZWRvCisgICAqb29mYSoiIGFuZCB0aGVyZWZvcmUgbWF0Y2hlcyB0aGUgbW9z dCByZWNlbnQgY29tbWFuZCB0aGF0IGNvbnRhaW5zCisgICAib29mYSIgYW55d2hlcmUgd2l0aGlu IHRoZSBjb21tYW5kLiBJZiB5b3Ugd2FudCB0byBpbmhpYml0IHRoZQorICAgYXBwbGljYXRpb24g b2YgdGhlIHRyYWlsaW5nICIqIiwgZS5nLiB0byBmb3JjZSBtYXRjaGluZyBhIHN0cmluZyBhdCB0 aGUKKyAgIGVuZCBvZiBhIGNvbW1hbmQsIGVuY2xvc2UgdGhlIHBhdHRlcm4gaW4gYnJhY2VzOgor CisgIHJlZG8geypvb2ZhfQorCisgICBtYXRjaGVzIHRoZSBtb3N0IHJlY2VudCBjb21tYW5kIHRo YXQgZW5kcyB3aXRoICJvb2ZhIi4KKworICAgUkVETyBjb21tYW5kcyB0aGVtc2VsdmVzIGFyZSBu b3QgZW50ZXJlZCBpbnRvIHRoZSBjb21tYW5kIGhpc3RvcnkgbGlzdC4KKyAgIElmIG5vIHBhdHRl cm4gaXMgZ2l2ZW4sIHRoZSBwcmV2aW91cyAobm9uLVJFRE8pIGNvbW1hbmQgaXMgcmUtZXhlY3V0 ZWQuCisgICBUaGUgUkVET25lIGNvbW1hbmQgaXMgcmVpbnNlcnRlZCBhdCB0aGUgZW5kIG9mIHRo ZSBjb21tYW5kIGhpc3RvcnkKKyAgIGJ1ZmZlciwgc28gdGhlIGNvbW1hbmQgc2Nyb2xsYmFjayBj aGFyYWN0ZXIgKEN0cmwtUCwgQ3RybC1CLCBvcgorICAgVXBhcnJvdykgY2FuIHJldHJpZXZlIGl0 LgorCisgICBFeGFtcGxlczoKKworICBDLUtlcm1pdD4gZWNobyBmb28KKyAgZm9vCisgIEMtS2Vy bWl0PiBzaG93IGFsYXJtCisgIChubyBhbGFybSBzZXQpCisgIEMtS2VybWl0PiBlY2hvIGJsYWgK KyAgYmxhaAorICBDLUtlcm1pdD4gcmVkbyAgICAgICAgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQK KyAgYmxhaAorICBDLUtlcm1pdD4gcmVkbyBzICAgICAgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQg c3RhcnRpbmcgd2l0aCAicyIKKyAgKG5vIGFsYXJtIHNldCkKKyAgQy1LZXJtaXQ+IHJlZG8gZWNo byBmICAgOyBNb3N0IHJlY2VudCBjb21tYW5kIHN0YXJ0aW5nIHdpdGggImVjaG8gZiIKKyAgZm9v CisgIEMtS2VybWl0PiByZWRvICpmb28gICAgIDsgTW9zdCByZWNlbnQgY29tbWFuZCB0aGF0IGhh cyAiZm9vIiBpbiBpdAorICBmb28KKyAgQy1LZXJtaXQ+IDxDdHJsLVA+ICAgICAgOyBTY3JvbGwg YmFjaworICBDLUtlcm1pdD4gZWNobyBmb28gICAgICA7IFRoZSBSRURPbmUgY29tbWFuZCBpcyB0 aGVyZQorICBDLUtlcm1pdD4gcmVkbyB7KmZvb30gICA7IE1vc3QgcmVjZW50IGNvbW1hbmQgdGhh dCBlbmRzIHdpdGggImZvbyIKKyAgZm9vCisgIEMtS2VybWl0PgorCisgICBTaW5jZSBSRURPLCBS RURJQUwsIGFuZCBSRURJUkVDVCBhbGwgc3RhcnQgdGhlIHNhbWUgd2F5LCBhbmQgUkVEIGlzIHRo ZQorICAgZGVzaWduYXRlZCBub24tdW5pcXVlIGFiYnJldmlhdGlvbiBmb3IgUkVESUFMLCBSRURP IG11c3QgYmUgc3BlbGxlZCBvdXQKKyAgIGluIGZ1bGwuIEZvciBjb252ZW5pZW5jZSwgUlIgaXMg aW5jbHVkZWQgYXMgYW4gaW52aXNpYmxlIGVhc3ktdG8tdHlwZQorICAgc3lub255bSBmb3IgUkVE Ty4gWW91IGNhbiBhbHNvIHVzZSB0aGUgIl4iIGNoYXJhY3RlciBmb3IgdGhpczoKKworICBDLUtl cm1pdD4gXiAgICAgICAgICAgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQKKyAgQy1LZXJtaXQ+IF4g cyAgICAgICAgICAgOyBNb3N0IHJlY2VudCBjb21tYW5kIHN0YXJ0aW5nIHdpdGggInMiCisgIEMt S2VybWl0PiBecyAgICAgICAgICAgIDsgRGl0dG8gKHNwYWNlIG5vdCByZXF1aXJlZCBhZnRlciAi XiIpLgorICBDLUtlcm1pdD4gXipmb28gICAgICAgICA7IE1vc3QgcmVjZW50IGNvbW1hbmQgdGhh dCBoYXMgImZvbyIgaW4gaXQuCisgIEMtS2VybWl0PiBeeypmb299ICAgICAgIDsgTW9zdCByZWNl bnQgY29tbWFuZCBlbmRzIHdpdGggImZvbyIuCisKKyAgIFVubGlrZSB0aGUgbWFudWFsIGNvbW1h bmQtaGlzdG9yeS1zY3JvbGxpbmcga2V5cywgdGhlIFJFRE8gY29tbWFuZCBjYW4KKyAgIGJlIHVz ZWQgaW4gYSBzY3JpcHQsIGJ1dCBpdCdzIG5vdCByZWNvbW1lbmRlZCAoc2luY2UgdGhlIGNvbW1h bmQgdG8gYmUKKyAgIFJFRE9uZSBtaWdodCBub3QgYmUgZm91bmQsIHNvIGlmIHRoZSBSRURPIGNv bW1hbmQgZmFpbHMsIHlvdSBjYW4ndCB0ZWxsCisgICB3aGV0aGVyIGl0IHdhcyBiZWNhdXNlIFJF RE8gZmFpbGVkIHRvIGZpbmQgdGhlIHJlcXVlc3RlZCBjb21tYW5kLCBvcgorICAgYmVjYXVzZSB0 aGUgY29tbWFuZCB3YXMgZm91bmQgYnV0IGl0IGZhaWxlZCkuCisKKzEuOS4gRVhJVCBNZXNzYWdl cworCisgICBUaGUgRVhJVCBhbmQgUVVJVCBjb21tYW5kcyBub3cgYWNjZXB0IGFuIG9wdGlvbmFs IG1lc3NhZ2UgdG8gYmUKKyAgIHByaW50ZWQuIFRoaXMgbWFrZXMgdGhlIHN5bnRheCBvZiBFWElU IGFuZCBRVUlUIGp1c3QgbGlrZSBFTkQgYW5kIFNUT1A6CisKKyAgIHsgRVhJVCwgUVVJVCwgRU5E LCBTVE9QIH0gWyBzdGF0dXMtY29kZSBbIG1lc3NhZ2UgXSBdCisKKyAgIHdoZXJlIHN0YXR1cy1j b2RlIGlzIGEgbnVtYmVyICgwIGluZGljYXRpbmcgc3VjY2Vzcywgbm9uemVybyBpbmRpY2F0aW5n CisgICBmYWlsdXJlKS4gVGhpcyBpcyBoYW5keSBpbiBzY3JpcHRzIHRoYXQgYXJlIG5ldmVyIHN1 cHBvc2VkIHRvIGVudGVyCisgICBpbnRlcmFjdGl2ZSBtb2RlOgorCisgIGRpYWwgNzY1NDMyMQor ICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBtYWtlIGNvbm5lY3Rpb24gLSB0cnkgYWdhaW4gbGF0ZXIu CisKKyAgIFByZXZpb3VzbHkgdGhpcyBjb3VsZCBvbmx5IGJlIGRvbmUgaW4gdHdvIHN0ZXBzOgor CisgIGRpYWwgNzY1NDMyMQorICB4aWYgZmFpbCB7IGVjaG8gQ2FuJ3QgbWFrZSBjb25uZWN0aW9u IC0gdHJ5IGFnYWluIGxhdGVyLCBleGl0IDEgfQorCisgICBBIHN0YXR1cyBjb2RlIG11c3QgYmUg aW5jbHVkZWQgaW4gb3JkZXIgdG8gc3BlY2lmeSBhIG1lc3NhZ2UuIEluIHRoZQorICAgY2FzZSBv ZiBFWElUIGFuZCBRVUlULCB0aGUgZGVmYXVsdCBzdGF0dXMgY29kZSBpcyBjb250YWluZWQgaW4g dGhlCisgICB2YXJpYWJsZSBcdihleGl0c3RhdHVzKSwgYW5kIGlzIHNldCBhdXRvbWF0aWNhbGx5 IGJ5IHZhcmlvdXMgZXZlbnRzCisgICAoZmlsZSB0cmFuc2ZlciBmYWlsdXJlcywgZXRjOyBpdCBj YW4gYWxzbyBiZSBzZXQgZXhwbGljaXRseSB3aXRoIHRoZQorICAgU0VUIEVYSVQgU1RBVFVTIGNv bW1hbmQpLiBJZiB5b3Ugd2FudCB0byBnaXZlIGFuIEVYSVQgb3IgUVVJVCBjb21tYW5kCisgICB3 aXRoIGEgbWVzc2FnZSwgYnV0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGV4aXQgc3RhdHVzIGZyb20g d2hhdCBpdAorICAgbm9ybWFsbHkgd291bGQgaGF2ZSBiZWVuLCB1c2UgdGhlIFx2KGV4aXRzdGF0 dXMpIHZhcmlhYmxlLCBlLmcuOgorCisgICBleGl0IFx2KGV4aXRzdGF0dXMpIEdvb2RieWUgZnJv bSBcdihjbWRmaWxlKS4KKworICAgVGhlIEVYSVQgc3RhdHVzIGlzIHJldHVybmVkIHRvIHRoZSBz eXN0ZW0gc2hlbGwgb3Igd2hhdGV2ZXIgb3RoZXIKKyAgIHByb2Nlc3MgaW52b2tlZCBDLUtlcm1p dCwgZS5nLiBpbiBVTklYOgorCisgIEMtS2VybWl0PiBleGl0IDk3IGJ5ZSBieWUKKyAgYnllIGJ5 ZQorICAkIGVjaG8gJD8KKyAgOTcKKyAgJAorCisxLjEwLiBNYW5hZ2luZyBLZXlib2FyZCBJbnRl cnJ1cHRpb25zCisKKyAgIFdoZW4gQy1LZXJtaXQgaXMgaW4gY29tbWFuZCBvciBmaWxlLXRyYW5z ZmVyIG1vZGUgKGFzIG9wcG9zZWQgdG8KKyAgIENPTk5FQ1QgbW9kZSksIGl0IGNhbiBiZSBpbnRl cnJ1cHRlZCB3aXRoIEN0cmwtQy4gVmVyc2lvbiA3LjAgYWRkcyB0aGUKKyAgIGFiaWxpdHkgdG8g ZGlzYXJtIHRoZSBDdHJsLUMgaW50ZXJydXB0OgorCisgICBTRVQgQ09NTUFORCBJTlRFUlJVUFQg eyBPTiwgT0ZGIH0KKyAgICAgICAgICBDT01NQU5EIElOVEVSUlVQVCBpcyBPTiBieSBkZWZhdWx0 LCBtZWFuaW5nIHRoZSBDdHJsLUMgY2FuIGJlCisgICAgICAgICAgdXNlZCB0byBpbnRlcnJ1cHQg YSBjb21tYW5kIG9yIGEgZmlsZSB0cmFuc2ZlciBpbiBwcm9ncmVzcy4gVXNlCisgICAgICAgICAg T0ZGIHRvIGRpc2FibGUgdGhlc2UgaW50ZXJydXB0aW9ucywgYW5kIHVzZSBpdCB3aXRoIGdyZWF0 CisgICAgICAgICAgY2F1dGlvbiBmb3Igb2J2aW91cyByZWFzb25zLgorCisgICBTRVQgVFJBTlNG RVIgSU5URVJSVVBUIHsgT04sIE9GRiB9CisgICAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBk aXNhYmxlIGtleWJvYXJkIGludGVycnVwdGlvbiBvZiBmaWxlCisgICAgICAgICAgdHJhbnNmZXIg d2hlbiBDLUtlcm1pdCBpcyBpbiBsb2NhbCBtb2RlLCBvciB0byByZS1lbmFibGUgaXQKKyAgICAg ICAgICBhZnRlciBpdCBoYXMgYmVlbiBkaXNhYmxlZC4gVGhpcyBhcHBsaWVzIHRvIHRoZSBYLCBa LCBFLCBhbmQKKyAgICAgICAgICBzaW1pbGFyIGtleXMgYXMgd2VsbCBhcyB0byB0aGUgc3lzdGVt IGludGVycnVwdCBjaGFyYWN0ZXIsCisgICAgICAgICAgdXN1YWxseSBDdHJsLUMuIFRoaXMgaXMg ZGlzdGluY3QgZnJvbSBTRVQgVFJBTlNGRVIgQ0FOQ0VMTEFUSU9OLAorICAgICAgICAgIHdoaWNo IHRlbGxzIHdoZXRoZXIgcGFja2V0IG1vZGUgY2FuIGJlIGV4aXRlZCBieSBzZW5kaW5nIGEKKyAg ICAgICAgICBzcGVjaWFsIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuCisKKyAgIFNldmVyYWwgb3Ro ZXIgY29tbWFuZHMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHByZXNzaW5nIGFueSBrZXkgd2hpbGUK KyAgIHRoZXkgYXJlIGFjdGl2ZS4gVmVyc2lvbiA3LjAgYWRkcyB0aGUgYWJpbGl0eSB0byBkaXNh YmxlIHRoaXMgZm9ybSBvZgorICAgaW50ZXJydXB0aW9uIGFsc286CisKKyAgIFNFVCBJTlBVVCBD QU5DRUxMQVRJT04geyBPTiwgT0ZGIH0KKyAgICAgICAgICBXaGV0aGVyIGFuIElOUFVUIGNvbW1h bmQgaW4gcHJvZ3Jlc3MgY2FuIGJlIGludGVycnVwdGVkIGJ5CisgICAgICAgICAgcHJlc3Npbmcg YSBrZXkuIE5vcm1hbGx5IE9OLiBTZXR0aW5nIElOUFVUIENBTkNFTExBVElPTiBPRkYKKyAgICAg ICAgICBtYWtlcyBJTlBVVCBjb21tYW5kcyB1bmludGVycnVwdGlibGUgZXhjZXB0IGJ5IEN0cmwt QyAodW5sZXNzCisgICAgICAgICAgQ09NTUFORCBJTlRFUlJVUFRJT04gaXMgYWxzbyBPRkYpLgor CisgICBTRVQgU0xFRVAgQ0FOQ0VMTEFUSU9OIHsgT04sIE9GRiB9CisgICAgICAgICAgV2hldGhl ciBhIFNMRUVQLCBQQVVTRSwgb3IgV0FJVCBjb21tYW5kIGluIHByb2dyZXNzIGNhbiBiZQorICAg ICAgICAgIGludGVycnVwdGVkIGJ5IHByZXNzaW5nIGEga2V5LiBOb3JtYWxseSBPTi4gU2V0dGlu ZyBTTEVFUAorICAgICAgICAgIENBTkNFTExBVElPTiBPRkYgbWFrZXMgdGhlc2UgY29tbWFuZHMg dW5pbnRlcnJ1cHRpYmxlIGV4Y2VwdCBieQorICAgICAgICAgIEN0cmwtQyAodW5sZXNzIENPTU1B TkQgSU5URVJSVVBUSU9OIGlzIGFsc28gT0ZGKS4gU3lub255bXM6IFNFVAorICAgICAgICAgIFBB VVNFIENBTkNFTExBVElPTiwgU0VUIFdBSVQgQ0FOQ0VMTEFUSU9OLgorCisgICBTbyB0byBtYWtl IGNlcnRhaW4gYSBzY3JpcHQgaXMgbm90IGludGVycnVwdGlibGUgYnkgdGhlIHVzZXIsIGluY2x1 ZGUKKyAgIHRoZXNlIGNvbW1hbmRzOgorCisgIFNFVCBUUkFOU0ZFUiBJTlRFUlJVUFQgT0ZGCisg IFNFVCBTTEVFUCBDQU5DRUxMQVRJT04gT0ZGCisgIFNFVCBJTlBVVCBDQU5DRUxMQVRJT04gT0ZG CisgIFNFVCBDT01NQU5EIElOVEVSUlVQVElPTiBPRkYKKworICAgTWFrZSBzdXJlIHRvIHR1cm4g dGhlbSBiYWNrIG9uIGFmdGVyd2FyZHMgaWYgaW50ZXJydXB0aW9uIGlzIHRvIGJlCisgICByZS1l bmFibGVkLgorCisgICBXaGVuIGEgUEFVU0UsIFNMRUVQLCBXQUlULCBvciBJTlBVVCBjb21tYW5k IGlzIGludGVycnVwdGVkIGZyb20gdGhlCisgICBrZXlib2FyZCwgdGhlIG5ldyB2YXJpYWJsZSBc dihrYmNoYXIpIGNvbnRhaW5zIGEgY29weSBvZiB0aGUgKGZpcnN0KQorICAgY2hhcmFjdGVyIHRo YXQgd2FzIHR5cGVkIGFuZCBjYXVzZWQgdGhlIGludGVycnVwdGlvbiwgcHJvdmlkZWQgaXQgd2Fz CisgICBub3QgdGhlIGNvbW1hbmQgaW50ZXJydXB0IGNoYXJhY3RlciAodXN1YWxseSBDdHJsLUMp LiBJZiB0aGVzZSBjb21tYW5kcworICAgY29tcGxldGUgc3VjY2Vzc2Z1bGx5IG9yIHRpbWUgb3V0 IHdpdGhvdXQgYSBrZXlib2FyZCBpbnRlcnJ1cHRpb24sIHRoZQorICAgXHYoa2JjaGFyKSB2YXJp YWJsZSBpcyBlbXB0eS4KKworICAgVGhlIFx2KGtiY2hhcikgdmFyaWFibGUgKGxpa2UgYW55IG90 aGVyIHZhcmlhYmxlKSBjYW4gYmUgdGVzdGVkIHdpdGg6CisKKyAgaWYgZGVmaW5lZCBcdihrYmNo YXIpIGNvbW1hbmQKKworICAgVGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgaWYgdGhlIHZhcmlhYmxl IGlzIG5vdCBlbXB0eS4KKworICAgVGhlIFx2KGtiY2hhcikgdmFyaWFibGUgY2FuIGJlIHJlc2V0 IHdpdGggV0FJVCAwIChQQVVTRSAwLCBTTEVFUCAwLAorICAgZXRjKS4KKworMS4xMS4gVGFtaW5n IFRoZSBXaWxkIEJhY2tzbGFzaCAtLSBQYXJ0IERldXgKKworICAgWzM2Nl1Vc2luZyBDLUtlcm1p dCwgMm5kIEVkaXRpb24sIGNvbnRhaW5zIGEgYnJpZWYgc2VjdGlvbiwgIlRhbWluZyB0aGUKKyAg IFdpbGQgQmFja3NsYXNoIiwgb24gcGFnZSA0OCwgd2hpY2ggc3Vic2VxdWVudCBleHBlcmllbmNl IGhhcyBzaG93biB0bworICAgYmUgaW5hZGVxdWF0ZSBmb3IgS2VybWl0IHVzZXJzIGludGVudCBv biB3cml0aW5nIHNjcmlwdHMgdGhhdCBkZWFsIHdpdGgKKyAgIFdpbmRvd3MsIERPUywgYW5kIE9T LzIgZmlsZW5hbWVzLCBpbiB3aGljaCBiYWNrc2xhc2ggKFwpIGlzIHVzZWQgYXMgdGhlCisgICBk aXJlY3Rvcnkgc2VwYXJhdG9yLiBUaGlzIHNlY3Rpb24gZmlsbHMgaW4gdGhlIGJsYW5rcy4KKwor MS4xMS4xLiBCYWNrZ3JvdW5kCisKKyAgIFRoZSBLZXJtaXQgY29tbWFuZCBsYW5ndWFnZSBzaGFy ZXMgYSBjZXJ0YWluIHVuYXZvaWRhYmxlIGJ1dCBhbm5veWluZworICAgY2hhcmFjdGVyaXN0aWMg d2l0aCBtb3N0IG90aGVyIGNvbW1hbmQgbGFuZ3VhZ2VzIHRoYXQgYXJlIGNhcGFibGUgb2YKKyAg IHN0cmluZyByZXBsYWNlbWVudCwgbmFtZWx5IHRoZSBuZWNlc3NpdHkgdG8gInF1b3RlIiBjZXJ0 YWluIGNoYXJhY3RlcnMKKyAgIHdoZW4geW91IHdhbnQgdGhlbSB0byBiZSB0YWtlbiBsaXRlcmFs bHkuIFRoaXMgaXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUKKyAgIGZhY3RzIHRoYXQ6CisKKyAgICAx LiBPbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIG11c3QgYmUgc2V0IGFzaWRlIHRvIGRlbm90ZSByZXBs YWNlbWVudCwKKyAgICAgICByYXRoZXIgdGhhbiBhY3RpbmcgYXMgbGl0ZXJhbCB0ZXh0LgorICAg IDIuIFdlIGhhdmUgb25seSA5NiBwcmludGFibGUgY2hhcmFjdGVycyB0byB3b3JrIHdpdGggaW4g QVNDSUksIHdoaWNoCisgICAgICAgaXMgc3RpbGwgdGhlIG9ubHkgdW5pdmVyc2FsbHkgcG9ydGFi bGUgY2hhcmFjdGVyIHNldC4KKyAgICAzLiBUaGVyZSBpcyBubyBzaW5nbGUgcHJpbnRhYmxlIGNo YXJhY3RlciB0aGF0IGlzIHVudXNlZCBldmVyeXdoZXJlLgorICAgIDQuIFZhcmlhYmxlcyBhcmUg bm90IHJlc3RyaWN0ZWQgdG8gY2VydGFpbiBjb250ZXh0cywgYXMgdGhleSBhcmUgaW4KKyAgICAg ICBmb3JtYWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIGxpa2UgQyBhbmQgRm9ydHJhbiwgYnV0IGNh biBhcHBlYXIKKyAgICAgICBhbnl3aGVyZSBhdCBhbGwgd2l0aGluIGEgY29tbWFuZCwgYW5kIHRo ZXJlZm9yZSByZXF1aXJlIHNwZWNpYWwKKyAgICAgICBzeW50YXguCisKKyAgIFRodXMgdGhlcmUg Y2FuIGJlIGNvbmZsaWN0cy4gVG8gaWxsdXN0cmF0ZSwgdGhlIHN0YW5kYXJkIFVOSVggc2hlbGwK KyAgIHVzZXMgZG9sbGFyIHNpZ24gKCQpIHRvIGludHJvZHVjZSB2YXJpYWJsZXMuIFNvIHRoZSBz aGVsbCBjb21tYW5kOgorCisgIGVjaG8gJFRFUk0KKworICAgZGlzcGxheXMgdGhlIHZhbHVlIG9m IHRoZSBURVJNIHZhcmlhYmxlLCBlLmcuIHZ0MzIwLiBCdXQgc3VwcG9zZSB5b3UKKyAgIHdhbnQg dG8gZGlzcGxheSBhIHJlYWwgZG9sbGFyIHNpZ246CisKKyAgZWNobyBUaGUgcHJpY2UgaXMgJDEw LjIwCisKKyAgIFRoaXMgY2F1c2VzIHRoZSBzaGVsbCB0byBldmFsdWF0ZSB0aGUgdmFyaWFibGUg IiQxIiwgd2hpY2ggbWlnaHQgb3IKKyAgIG1pZ2h0IG5vdCBleGlzdCwgYW5kIHN1YnN0aXR1dGUg aXRzIHZhbHVlLCBlLmcuOgorCisgIFRoZSBwcmljZSBpcyAwLjIwCisKKyAgIChpbiB0aGlzIGNh c2UgdGhlICQxIHZhcmlhYmxlIGhhZCBubyB2YWx1ZS4pIFRoaXMgaXMgcHJvYmFibHkgbm90IHdo YXQKKyAgIHlvdSB3YW50ZWQuIFRvIGZvcmNlIHRoZSBkb2xsYXIgc2lnbiB0byBiZSB0YWtlbiBs aXRlcmFsbHksIHlvdSBtdXN0CisgICBhcHBseSBhICJxdW90aW5nIHJ1bGUiLCBzdWNoIGFzICJw cmVjZWRlIGEgY2hhcmFjdGVyIGJ5IGJhY2tzbGFzaCAoXCkKKyAgIHRvIGZvcmNlIHRoZSBzaGVs bCB0byB0YWtlIHRoZSBjaGFyYWN0ZXIgbGl0ZXJhbGx5IjoKKworICBlY2hvIFRoZSBwcmljZSBp cyBcJDEwLjIwCisgIFRoZSBwcmljZSBpcyAkMTAuMjAKKworICAgQnV0IG5vdyBzdXBwb3NlIHlv dSB3YW50IHRoZSBiYWNrc2xhc2ggQU5EIHRoZSBkb2xsYXIgc2lnbiB0byBiZSB0YWtlbgorICAg bGl0ZXJhbGx5OgorCisgIGVjaG8gVGhlIHByaWNlIGlzIFxcJDEwLjIwCisKKyAgIFRoaXMgZG9l c24ndCB3b3JrLCBzaW5jZSB0aGUgZmlyc3QgYmFja3NsYXNoIHF1b3RlcyB0aGUgc2Vjb25kIG9u ZSwKKyAgIHRoZXJlYnkgbGVhdmluZyB0aGUgZG9sbGFyIHNpZ24gdW5xdW90ZWQgYWdhaW46CisK KyAgVGhlIHByaWNlIGlzIFwwLjIwCisKKyAgIFF1b3RpbmcgdGhlIGRvbGxhciBzaWduIHJlcXVp cmVzIGFkZGl0aW9uIG9mIGEgdGhpcmQgYmFja3NsYXNoOgorCisgIGVjaG8gVGhlIHByaWNlIGlz IFxcXCQxMC4yMAorICBUaGUgcHJpY2UgaXMgXCQxMC4yMAorCisgICBUaGUgZmlyc3QgYmFja3Ns YXNoIHF1b3RlcyB0aGUgc2Vjb25kIG9uZSwgYW5kIHRoZSB0aGlyZCBiYWNrc2xhc2gKKyAgIHF1 b3RlcyB0aGUgZG9sbGFyIHNpZ24uCisKKyAgIEV2ZXJ5IGNvbW1hbmQgbGFuZ3VhZ2UgLS0gYWxs IFVOSVggc2hlbGxzLCBWTVMgRENMLCBET1MgQmF0Y2gsIEFPUy9WUworICAgQ0xJLCBldGMgZXRj IC0tIGhhcyBzaW1pbGFyIHJ1bGVzLiBVTklYIHNoZWxsIHJ1bGVzIGFyZSBwcm9iYWJseSB0aGUK KyAgIG1vc3QgY29tcGxpY2F0ZWQsIHNpbmNlIG1hbnkgcHJpbnRhYmxlIGNoYXJhY3RlcnMgLS0g bm90IGp1c3Qgb25lIC0tCisgICBhcmUgc3BlY2lhbCB0aGVyZTogZG9sbGFyIHNpZ24sIHNpbmds ZSBxdW90ZSwgZG91YmxlIHF1b3RlLCBiYWNrc2xhc2gsCisgICBhc3RlcmlzaywgYWNjZW50IGdy YXZlLCBudW1iZXIgc2lnbiwgYW1wZXJzYW5kLCBxdWVzdGlvbiBtYXJrLAorICAgcGFyZW50aGVz ZXMsIGJyYWNrZXRzLCBicmFjZXMsIGV0YyAtLSBwcmFjdGljYWxseSBldmVyeQorICAgbm9uLWFs cGhhbnVtZXJpYyBjaGFyYWN0ZXIgbmVlZHMgc29tZSBmb3JtIG9mIHF1b3RpbmcgaWYgaXQgaXMg dG8gYmUKKyAgIHRha2VuIGxpdGVyYWxseS4gQW5kIHRvIGFkZCB0byB0aGUgY29uZnVzaW9uLCB0 aGUgVU5JWCBzaGVsbCBvZmZlcnMKKyAgIG1hbnkgZm9ybXMgb2YgcXVvdGluZywgYW5kIG1hbnkg YWx0ZXJuYXRpdmUgVU5JWCBzaGVsbHMgYXJlIGF2YWlsYWJsZSwKKyAgIGVhY2ggdXNpbmcgc2xp Z2h0bHkgZGlmZmVyZW50IHN5bnRheC4KKworMS4xMS4yLiBLZXJtaXQncyBRdW90aW5nIFJ1bGVz CisKKyAgIEtlcm1pdCdzIGJhc2ljIHF1b3RpbmcgcnVsZXMgYXJlIHNpbXBsZSBieSBjb21wYXJp c29uICh0aGVyZSBhcmUsIG9mCisgICBjb3Vyc2UsIGFkZGl0aW9uYWwgc3ludGF4IHJlcXVpcmVt ZW50cyBmb3IgbWFjcm8gZGVmaW5pdGlvbnMsIGNvbW1hbmQKKyAgIGJsb2NrcywgZnVuY3Rpb24g Y2FsbHMsIGV0YywgYnV0IHRoZXkgYXJlIG5vdCByZWxldmFudCBoZXJlKS4KKworICAgVGhlIGZv bGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBzcGVjaWFsIGluIEtlcm1pdCBjb21tYW5kczoKKworICAg QmFja3NsYXNoIChcKQorICAgICAgICAgIEludHJvZHVjZXMgYSB2YXJpYWJsZSwgb3IgdGhlIG51 bWVyaWMgcmVwcmVzZW50YXRpb24gb2YgYQorICAgICAgICAgIHNwZWNpYWwgY2hhcmFjdGVyLCBv ciBhIGZ1bmN0aW9uLCBvciBvdGhlciBpdGVtIGZvcgorICAgICAgICAgIHN1YnN0aXR1dGlvbi4g SWYgdGhlIGJhY2tzbGFzaCBpcyBmb2xsb3dlZCBieSBhIGRpZ2l0IG9yIGJ5IGFueQorICAgICAg ICAgIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczoKKworICB4LCBvLCBkLCBtLCBzLCBmLCB2 LCAkLCAlLCAmLCA6LCB7CisKKyAgICAgICAgICB0aGlzIGluZGljYXRlcyBhIHNwZWNpYWwgc3Vi c3RpdHV0aW9uIGl0ZW07IG90aGVyd2lzZSB0aGUKKyAgICAgICAgICBmb2xsb3dpbmcgY2hhcmFj dGVyIGlzIHRvIGJlIHRha2VuIGxpdGVyYWxseSAoZXhjZXB0aW9uczogXCBhdAorICAgICAgICAg IGVuZCBvZiBsaW5lIGlzIHRha2VuIGxpdGVyYWxseTsgXG4sIFxiLCBhbmQgXG4gYXJlIHNwZWNp YWwgaXRlbXMKKyAgICAgICAgICBpbiB0aGUgT1VUUFVUIGNvbW1hbmQgb25seSkuCisKKyAgIFNl bWljb2xvbiAoOykKKyAgICAgICAgICAoT25seSB3aGVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBs aW5lIG9yIHByZWNlZGVkIGJ5IGF0IGxlYXN0CisgICAgICAgICAgb25lIHNwYWNlIG9yIHRhYikg SW50cm9kdWNlcyBhIGNvbW1lbnQuCisKKyAgIE51bWJlciBzaWduICgjKQorICAgICAgICAgIChP bmx5IHdoZW4gYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgb3IgcHJlY2VkZWQgYnkgYXQgbGVh c3QKKyAgICAgICAgICBvbmUgc3BhY2Ugb3IgdGFiKSBKdXN0IGxpa2Ugc2VtaWNvbG9uOyBpbnRy b2R1Y2VzIGEgY29tbWVudC4KKworICAgUXVlc3Rpb24gbWFyayAoPykKKyAgICAgICAgICAoT25s eSBhdCB0aGUgY29tbWFuZCBwcm9tcHQgLSBub3QgaW4gY29tbWFuZCBmaWxlcyBvciBtYWNyb3Mp CisgICAgICAgICAgUmVxdWVzdHMgY29udGV4dC1zZW5zaXRpdmUgaGVscC4KKworICAgVG8gZm9y Y2UgS2VybWl0IHRvIHRha2UgYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMgbGl0ZXJhbGx5LCBzaW1w bHkKKyAgIHByZWNlZGUgaXQgYnkgYSBiYWNrc2xhc2ggKFwpLgorCisgICBTb3VuZHMgZWFzeSEg QW5kIGl0IGlzLCBleGNlcHQgd2hlbiBiYWNrc2xhc2ggYWxzbyBoYXMgYSBzcGVjaWFsCisgICBt ZWFuaW5nIHRvIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0sIGFzIGl0IGRvZXMgaW4g RE9TLCBXaW5kb3dzLAorICAgYW5kIE9TLzIsIHdoZXJlIGl0IHNlcnZlcyBhcyB0aGUgZGlyZWN0 b3J5IHNlcGFyYXRvciBpbiBmaWxlbmFtZXMgc3VjaAorICAgYXM6CisKKyAgRDpcSzk1XEtFWU1B UFNcUkVBRC5NRQorCisgICBVc2luZyBvdXIgcnVsZSwgd2Ugd291bGQgbmVlZCB0byByZWZlciB0 byB0aGlzIGZpbGUgaW4gS2VybWl0IGNvbW1hbmRzCisgICBhcyBmb2xsb3dzOgorCisgIEQ6XFxL OTVcXEtFWU1BUFNcXFJFQUQuTUUKKworICAgQnV0IHRoaXMgd291bGQgbm90IGJlIG9idmlvdXMg dG8gbmV3IHVzZXJzIG9mIEtlcm1pdCBzb2Z0d2FyZSBvbiBET1MsCisgICBXaW5kb3dzLCBvciBP Uy8yLCBhbmQgaXQgd291bGQgYmUgYW5ub3lpbmcgdG8gc2Vhc29uZWQgb25lcy4gVGh1cworICAg TVMtRE9TIEtlcm1pdCBhbmQgS2VybWl0IDk1IGdvIHRvIHJhdGhlciBleHRyZW1lIGxlbmd0aHMg dG8gYWxsb3cgdGhlCisgICBtb3JlIG5hdHVyYWwgbm90YXRpb24sIGFzIGluOgorCisgIHNlbmQg ZDpcazk1XGtleW1hcHNccmVhZC5tZQorCisgICBUaGUgcmVhc29uIHRoaXMgaXMgdHJpY2t5IGlz IHRoYXQgd2UgYWxzbyBuZWVkIHRvIGFsbG93IGZvciB2YXJpYWJsZXMKKyAgIGFuZCBvdGhlciBl eHByZXNzaW9ucyBpbnRyb2R1Y2VkIGJ5IGJhY2tzbGFzaCBpbiB0aGUgc2FtZSBjb21tYW5kLiBG b3IKKyAgIGV4YW1wbGUsIHN1cHBvc2UgXCVhIGlzIGEgdmFyaWFibGUgd2hvc2UgdmFsdWUgaXMg Im9vZmEiICh3aXRob3V0IHRoZQorICAgcXVvdGVzKS4gV2hhdCBkb2VzIHRoZSBmb2xsb3dpbmcg Y29tbWFuZCBkbz8KKworICBzZW5kIGQ6XCVhCisKKyAgIERvZXMgaXQgc2VuZCB0aGUgZmlsZSBu YW1lZCAib29mYSIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9mIHRoZSBEOgorICAgZGlzaywg b3IgZG9lcyBpdCBzZW5kIGEgZmlsZSBuYW1lZCAiJWEiIGluIHRoZSByb290IGRpcmVjdG9yeSBv ZiB0aGUgRDoKKyAgIGRpc2s/IFRoaXMgaXMgdGhlIGtpbmQgb2YgdHJvdWJsZSB3ZSBnZXQgaW50 byB3aGVuIHdlIGF0dGVtcHQgdG8gYmVuZAorICAgdGhlIHJ1bGVzIGluIHRoZSBpbnRlcmVzdCBv ZiB1c2VyIGZyaWVuZGxpbmVzcy4gKFRoZSBhbnN3ZXIgaXM6IGlmIHRoZQorICAgdmFyaWFibGUg XCVhIGhhcyBkZWZpbml0aW9uIHRoYXQgaXMgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmlsZSwg dGhhdAorICAgZmlsZSBpcyBzZW50OyBpZiBhIGZpbGUgZDpcJWEgZXhpc3RzLCBpdCBpcyBzZW50 OyBvdGhlcndpc2UgaWYgYm90aAorICAgY29uZGl0aW9ucyBhcmUgdHJ1ZSwgdGhlIHZhcmlhYmxl IHRha2VzIHByZWNlZGVuY2UsIGFuZCB0aGUgbGl0ZXJhbAorICAgZmlsZW5hbWUgY2FuIGJlIGZv cmNlZCBieSBxdW90aW5nOiBcXCVhLikKKworICAgSW4gS2VybWl0IDk1IChidXQgbm90IE1TLURP UyBLZXJtaXQpLCB3ZSBhbHNvIGJlbmQgdGhlIHJ1bGVzIGFub3RoZXIKKyAgIHdheSBieSBhbGxv d2luZyB5b3UgdG8gdXNlIGZvcndhcmQgc2xhc2ggKC8pIHJhdGhlciB0aGFuIGJhY2tzbGFzaCAo XCkKKyAgIGFzIHRoZSBkaXJlY3Rvcnkgc2VwYXJhdG9yOgorCisgIHNlbmQgZDovazk1L2tleW1h cHMvcmVhZC5tZQorCisgICBUaGlzIGxvb2tzIG1vcmUgbmF0dXJhbCB0byBVTklYIHVzZXJzLCBh bmQgaW4gZmFjdCBpcyBwZXJmZWN0bHkKKyAgIGFjY2VwdGFibGUgdG8gdGhlIFdpbmRvd3MgOTUv OTgvTlQgYW5kIE9TLzIgb3BlcmF0aW5nIHN5c3RlbXMgb24gdGhlCisgICBBUEkgbGV2ZWwuIEJV VCAodGhlcmUgaXMgYWx3YXlzIGEgImJ1dCIpIHRoZSBNaWNyb3NvZnQgc2hlbGwsCisgICBDT01N QU5ELkNPTSwgZm9yIFdpbmRvd3MgOTUvOTggYW5kIE5UIGRvZXMgbm90IGFsbG93IHRoaXMgbm90 YXRpb24sIGFuZAorICAgdGhlcmVmb3JlIGl0IGNhbiBub3QgYmUgdXNlZCBpbiBhbnkgS2VybWl0 IGNvbW1hbmQgLS0gc3VjaCBhcyBSVU4gLS0KKyAgIHRoYXQgaW52b2tlcyB0aGUgV2luZG93cyBj b21tYW5kIHNoZWxsIEFORCB5b3VyIGNvbW1hbmQgc2hlbGwgaXMKKyAgIENPTU1BTkQuQ09NIG9y IGFueSBvdGhlciBzaGVsbCB0aGF0IGRvZXMgbm90IGFsbG93IGZvcndhcmQgc2xhc2ggYXMKKyAg IGRpcmVjdG9yeSBzZXBhcmF0b3IgKHNvbWUgYWx0ZXJuYXRpdmUgc2hlbGxzIGRvIGFsbG93IHRo aXMpLgorCisgICAgIE5PVEU6IFRoZXJlIGV4aXN0cyBhIHdpZGUgdmFyaWV0eSBvZiBhbHRlcm5h dGl2ZSBzaGVsbHMgZnJvbSB0aGlyZAorICAgICBwYXJ0aWVzIHRoYXQgZG8gbm90IGhhdmUgdGhp cyByZXN0cmljdGlvbi4gSWYgeW91IGFyZSB1c2luZyBhIHNoZWxsCisgICAgIHRoYXQgYWNjZXB0 cyBmb3J3YXJkIHNsYXNoIGFzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciwgeW91IGNhbiBzdG9wCisg ICAgIHJlYWRpbmcgcmlnaHQgbm93IC0tIFVOTEVTUyAodGhlcmUgaXMgYWx3YXlzIGFuICJ1bmxl c3MiKSB5b3Ugd2FudAorICAgICB5b3VyIHNjcmlwdHMgdG8gYmUgcG9ydGFibGUgdG8gc3lzdGVt cyB0aGF0IGhhdmUgb3RoZXIgc2hlbGxzLiBBbHNvCisgICAgIG5vdGUgdGhhdCBzb21lIFdpbmRv d3Mgc2hlbGxzIG1pZ2h0IGFjdHVhbGx5IFJFUVVJUkUgZm9yd2FyZCBzbGFzaGVzCisgICAgIChp bnN0ZWFkIG9mIGJhY2tzbGFzaGVzKSBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9yczsgd2UgZG8gbm90 IHRyZWF0CisgICAgIHRoaXMgc2l0dWF0aW9uIGJlbG93LCBidXQgdGhlIHRyZWF0bWVudCBpcyBv YnZpb3VzIC0tIHVzZSBzbGFzaAorICAgICByYXRoZXIgYmFja3NsYXNoIGFzIHRoZSBkaXJlY3Rv cnkgc2VwYXJhdG9yLgorCisxLjExLjMuIFBhc3NpbmcgRE9TIEZpbGVuYW1lcyBmcm9tIEtlcm1p dCB0byBTaGVsbCBDb21tYW5kcworCisgICBUaGUgZm9sbG93aW5nIEtlcm1pdCBjb21tYW5kcyBp bnZva2UgdGhlIHN5c3RlbSBjb21tYW5kIHNoZWxsOgorCisgIFJVTiAoYW5kIGl0cyBzeW5vbnlt cyAhIGFuZCBAKQorICBSRURJUkVDVAorICBQSVBFCisKKyAgIEVhY2ggb2YgdGhlc2UgY29tbWFu ZHMgdGFrZXMgYSBzaGVsbCBjb21tYW5kIGFzIGFuIG9wZXJhbmQuIFRoZXNlIHNoZWxsCisgICBj b21tYW5kcyBhcmUgbm90LCBhbmQgY2FuIG5vdCBiZSwgcGFyc2VkIGJ5IEtlcm1pdCBzaW5jZSBL ZXJtaXQgZG9lcworICAgbm90IGtub3cgdGhlIHN5bnRheCBvZiBzaGVsbCBjb21tYW5kcywgYW5k IHNvIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UKKyAgIGJldHdlZW4gYSBrZXl3b3JkLCBhIGZp bGVuYW1lLCBhIHZhcmlhYmxlLCBhIHN3aXRjaCwgb3Igb3RoZXIgaXRlbS4KKyAgIFRoZXJlZm9y ZSB0aGUgcnVsZXMgY2FuIG5vdCBiZSBiZW50IHNpbmNlIEtlcm1pdCBkb2Vzbid0IGtub3cgd2hl cmUgb3IKKyAgIGhvdyB0byBiZW5kIHRoZW0uIFRvIGlsbHVzdHJhdGUgKHVzaW5nIHRoZSByZWd1 bGFyIFdpbmRvd3Mgc2hlbGwpOgorCisgIHJ1biBjOlxcd2luZG93c1xcY29tbWFuZFxcY2hrZHNr LmV4ZQorCisgICB3b3JrcyBPSywgYnV0OgorCisgIHJ1biBjOi93aW5kb3dzL2NvbW1hbmQvY2hr ZHNrLmV4ZQorCisgICBpcyBub3QgYWNjZXB0ZWQgYnkgQ09NTUFORC5DT00uIEJ1dDoKKworICBy dW4gYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5leGUKKworICAgcmVzdWx0cyBpbiBLZXJtaXQg YXBwbHlpbmcgaXRzIHF1b3RpbmcgcnVsZXMgYmVmb3JlIHNlbmRpbmcgdGhlIHRleHQgdG8KKyAg IHRoZSBzaGVsbC4gU2luY2UgInciIGFuZCAiYyIgYXJlIG5vdCBpbiB0aGUgbGlzdCBvZiBiYWNr c2xhc2gtaXRlbQorICAgY29kZXMsIHRoZSBiYWNrc2xhc2ggbWVhbnMgInRha2UgdGhlIGZvbGxv d2luZyBjaGFyYWN0ZXIgbGl0ZXJhbGx5Ii4KKyAgIFRodXMsIGJ5IHRoZSB0aW1lIHRoaXMgZmls ZW5hbWUgZ2V0cyB0byB0aGUgV2luZG93cyBzaGVsbCwgaXQgaGFzCisgICBiZWNvbWU6CisKKyAg Yzp3aW5kb3dzY29tbWFuZGNoa2Rzay5leGUKKworICAgd2hpY2ggaXMgcHJvYmFibHkgbm90IHdo YXQgeW91IHdhbnRlZC4gKElmICJ3IiBhbmQgImMiIHdlcmUgaW4gdGhlCisgICBsaXN0LCB0aGUg cmVzdWx0cyBjb3VsZCBiZSBldmVuIHN0cmFuZ2VyLikgRXZlbiBtb3JlIGNvbmZ1c2luZyBpcyB0 aGUKKyAgIGNhc2Ugd2hlcmUgYSBkaXJlY3Rvcnkgb3IgZmlsZW5hbWUgc3RhcnRzIHdpdGggb25l IG9yIG1vcmUgZGlnaXRzOgorCisgIHJ1biBjOlwxMjNcbG90dXMuZXhlCisKKyAgIGluIHdoaWNo ICJcMTIzIiBpcyB0aGUgS2VybWl0IG5vdGF0aW9uIGZvciBBU0NJSSBjaGFyYWN0ZXIgMTIzLCB3 aGljaAorICAgaGFwcGVucyB0byBiZSBsZWZ0IGJyYWNlICh7KSwgcmVzdWx0aW5nIGluICJjOnts b3R1cy5leGUiLgorCisgICBTbyB3aGVuIHBhc3NpbmcgZmlsZW5hbWVzIHRvIGEgV2luZG93cyBz aGVsbCwgYWx3YXlzIHVzZSBkb3VibGUKKyAgIGJhY2tzbGFzaGVzIGFzIGRpcmVjdG9yeSBzZXBh cmF0b3JzLCB0byBlbnN1cmUgdGhhdCB0aGUgc2hlbGwgZ2V0cworICAgc2luZ2xlIGJhY2tzbGFz aGVzOgorCisgIHJ1biBjOlxcd2luZG93c1xcY29tbWFuZFxcY2hrZHNrLmV4ZQorICBydW4gYzpc XDEyM1xcbG90dXMuZXhlCisKKyAgIFNpbWlsYXIgcHJvYmxlbXMgbWlnaHQgb2NjdXIgd2l0aCB0 aGUgYnVpbHQtaW4gRURJVCwgQlJPV1NFLCBhbmQgRlRQCisgICBjb21tYW5kcy4gVGhlc2UgY29t bWFuZHMgcmVzdWx0IGluIEtlcm1pdCBidWlsZGluZyBhIHNoZWxsIGNvbW1hbmQKKyAgIGludGVy bmFsbHkgdG8gaW52b2tlIHRoZSBhc3NvY2lhdGVkIGhlbHBlciBwcm9ncmFtOyB0aGUgZm9ybSBv ZiB0aGlzCisgICBjb21tYW5kIG1pZ2h0IGNvbmZsaWN0IHdpdGggdGhlIGZvcm0gZGVtYW5kZWQg YnkgY2VydGFpbiBhbHRlcm5hdGl2ZQorICAgc2hlbGxzLgorCisxLjExLjQuIFVzaW5nIFZhcmlh YmxlcyB0byBIb2xkIERPUyBGaWxlbmFtZXMKKworICAgTm93IHRvIHRoZSBuZXh0IGxldmVsLiBT dXBwb3NlIHlvdSB3YW50IHRvIHdyaXRlIGEgc2NyaXB0IGluIHdoaWNoCisgICBmaWxlbmFtZXMg YXJlIHBhcmFtZXRlcnMsIGFuZCB0aGVyZWZvcmUgYXJlIHN0b3JlZCBpbiB2YXJpYWJsZXMuCisg ICBFeGFtcGxlOgorCisgIGRlZmluZSBcJWYgYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5leGUK KyAgLi4uCisgIHJ1biBcJWYKKworICAgT2J2aW91c2x5IHRoaXMgd29uJ3Qgd29yayBmb3IgdGhl IHJlYXNvbnMganVzdCBub3RlZDsgdGhlIFJVTiBjb21tYW5kCisgICByZXF1aXJlcyBkaXJlY3Rv cnkgc2VwYXJhdG9ycyBiZSBjb2RlZCBhcyBkb3VibGUgYmFja3NsYXNoZXM6CisKKyAgZGVmaW5l IFwlZiBjOlxcd2luZG93c1xcY29tbWFuZFxcY2hrZHNrLmV4ZQorICAuLi4KKyAgcnVuIFwlZgor CisgICBUaGlzIHdpbGwgd29yazsgbm8gc3VycHJpc2VzIGhlcmUuIEhvd2V2ZXIsIGlmIHlvdSBo YWQgdXNlZCBBU1NJR04KKyAgIHJhdGhlciB0aGFuIERFRklORSwgeW91IG1pZ2h0IGhhdmUgYmVl biBzdXJwcmlzZWQgYWZ0ZXIgYWxsOyByZXZpZXcKKyAgIHBhZ2VzIDM0OC0zNDkgb2YgWzM2N11V c2luZyBDLUtlcm1pdCAoMm5kIEVkKSBmb3IgdGhlIGRpZmZlcmVuY2UKKyAgIGJldHdlZW4gREVG SU5FIGFuZCBBU1NJR04uCisKKyAgIFdlIGhhdmUgc2FpZCB0aGF0IGFueSBLZXJtaXQgOTUgb3Ig TVMtRE9TIEtlcm1pdCBjb21tYW5kIHRoYXQgcGFyc2VzCisgICBmaWxlbmFtZXMgaXRzZWxmIC0t IFNFTkQsIGZvciBleGFtcGxlIC0tIGRvZXMgbm90IHJlcXVpcmUgZG91YmxlCisgICBiYWNrc2xh c2hlcyBzaW5jZSBpdCBrbm93cyBpdCBpcyBwYXJzaW5nIGEgZmlsZW5hbWUuIFNvIHNpbmNlIHRo ZQorICAgZm9sbG93aW5nIHdvcmtzOgorCisgIHNlbmQgYzpcd2luZG93c1xjb21tYW5kXGNoa2Rz ay5leGUKKworICAgU2hvdWxkIHRoZSBmb2xsb3dpbmcgYWxzbyB3b3JrPworCisgIGRlZmluZSBc JWYgYzpcd2luZG93c1xjb21tYW5kXGNoa2Rzay5leGUKKyAgLi4uCisgIHNlbmQgXCVmCisKKyAg IEFuc3dlcjogTm8uIFdoeT8gQmVjYXVzZSBcJWYgaXMgZXZhbHVhdGVkICJyZWN1cnNpdmVseSIs IHRvIGFsbG93IGZvcgorICAgdGhlIHBvc3NpYmlsaXR5IHRoYXQgaXRzIGRlZmluaXRpb24gY29u dGFpbnMgZnVydGhlciB2YXJpYWJsZQorICAgcmVmZXJlbmNlcy4gVGhpcyBpcyB0cnVlIG9mIGFs bCAiYmFja3NsYXNoLXBlcmNlbnQtbGV0dGVyIiAob3IgLWRpZ2l0KQorICAgdmFyaWFibGVzLCBh bmQgYWxzbyBmb3IgYXJyYXkgcmVmZXJlbmNlcy4gU28gXCVmIGJlY29tZXMKKyAgIGM6XHdpbmRv d3NcY29tbWFuZFxjaGtkc2suZXhlLCB3aGljaCBiZWNvbWVzCisgICBjOndpbmRvd3Njb21tYW5k Y2hrZHNrLmV4ZS4KKworICAgVGhlIHRyaWNrIGhlcmUgaXMgdG8gdXNlIHRoZSAib3RoZXIiIGtp bmQgb2YgdmFyaWFibGUsIHRoYXQgaXMKKyAgIGV2YWx1YXRlZCBvbmx5ICJvbmUgbGV2ZWwgZGVl cCIgcmF0aGVyIHRoYW4gcmVjdXJzaXZlbHk6CisKKyAgZGVmaW5lIGZpbGVuYW1lIGM6XHdpbmRv d3NcY29tbWFuZFxjaGtkc2suZXhlCisgIC4uLgorICBzZW5kIFxtKGZpbGVuYW1lKQorCisgICBT aW1pbGFybHkgaWYgeW91IHdhbnQgdG8gcHJvbXB0IHRoZSB1c2VyIGZvciBhIGZpbGVuYW1lOgor CisgIGFzayBmaWxlbmFtZSB7IFBsZWFzZSB0eXBlIGEgZmlsZW5hbWU6IH0KKyAgIFBsZWFzZSB0 eXBlIGEgZmlsZW5hbWU6IGM6XHdpbmRvd3NcY29tbWFuZFxjaGtkc2suZXhlCisgIHNlbmQgXG0o ZmlsZW5hbWUpCisKKzEuMTEuNS4gUGFzc2luZyBET1MgRmlsZW5hbWVzIGFzIFBhcmFtZXRlcnMg dG8gTWFjcm9zCisKKyAgIFN1cHBvc2UgeW91IHdhbnQgdG8gcGFzcyBhIERPUyBmaWxlbmFtZSBj b250YWluaW5nIGJhY2tzbGFzaGVzIGFzIGEKKyAgIHBhcmFtZXRlciB0byBhIEtlcm1pdCBtYWNy by4gVGhpcyByYWlzZXMgdHdvIGlzc3VlczoKKworICAgIDEuIFBhcmFtZXRlcnMgdG8gbWFjcm9z IGFyZSAianVzdCB0ZXh0IiBhbmQgc28gYXJlIGZ1bGx5IGV2YWx1YXRlZAorICAgICAgIGJlZm9y ZSB0aGV5IGFyZSBwYXNzZWQgdG8gdGhlIG1hY3JvLgorICAgIDIuIE9uY2UgaW5zaWRlIHRoZSBt YWNybywgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIFwlMSwgXCUyLCAuLi4gXCU5IGFyZQorICAgICAg IHRoZSB0eXBlIG9mIHZhcmlhYmxlIHRoYXQgaXMgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5LgorCisg ICBUaHVzIGEgRE9TIGZpbGVuYW1lIGlzIHJ1aW5lZCBvbmNlIGluIHRoZSBhY3Qgb2YgcGFyc2lu ZyB0aGUgbWFjcm8KKyAgIGludm9jYXRpb24sIGFuZCBhZ2FpbiB3aGVuIHJlZmVycmluZyB0byBp dCBmcm9tIHdpdGhpbiB0aGUgbWFjcm8uIFRvCisgICBpbGx1c3RyYXRlLCBzdXBwb3NlICJ0ZXN0 IiBpcyBhIG1hY3JvLiBUaGVuIGluIHRoZSBpbnZvY2F0aW9uOgorCisgIHRlc3QgYzpcbXlkaXJc YmxhaC50eHQKKworICAgImM6bXlkaXJibGFoLnR4dCIgaXMgYXNzaWduZWQgdG8gXCUxLiBIb3dl dmVyLCBpZiB3ZSBkb3VibGUgdGhlCisgICBiYWNrc2xhc2hlczoKKworICB0ZXN0IGM6XFxteWRp clxcYmxhaC50eHQKKworICAgImM6XG15ZGlyXGJsYWgudHh0IiBpcyBhc3NpZ25lZCB0byBcJTEu IEJ1dCB0aGVuIHdoZW4geW91IHJlZmVyIHRvIFwlMQorICAgaW4gdGhlIG1hY3JvLCBpdCBpcyBl dmFsdWF0ZWQgcmVjdXJzaXZlbHksIHJlc3VsdGluZyBpbgorICAgImM6bXlkaXJibGFoLnR4dCIu IFRvIGlsbHVzdHJhdGU6CisKKyAgZGVmaW5lIHRlc3QgZWNobyBcJTEKKyAgdGVzdCBjOlxteWRp clxibGFoLnR4dAorICBjOm15ZGlyYmxhaC50eHQKKyAgdGVzdCBjOlxcbXlkaXJcXGJsYWgudHh0 CisgIGM6bXlkaXJibGFoLnR4dAorICB0ZXN0IGM6XFxcXG15ZGlyXFxcXGJsYWgudHh0CisgIGM6 XG15ZGlyXGJsYWgudHh0CisKKyAgIExldCdzIGFkZHJlc3MgZWFjaCBwYXJ0IG9mIHRoZSBwcm9i bGVtIHNlcGFyYXRlbHkuIEZpcnN0LCBpbnNpZGUgdGhlCisgICBtYWNyby4gWW91IGNhbiB1c2Ug dGhlIFxmY29udGVudHMoKSBmdW5jdGlvbiB0byBmb3JjZSBhCisgICBiYWNrc2xhc2gtcGVyY2Vu dCB2YXJpYWJsZSAoc3VjaCBhcyBhIG1hY3JvIGFyZ3VtZW50KSB0byBiZSBldmFsdWF0ZWQKKyAg IG9uZSBsZXZlbCBkZWVwIGluc3RlYWQgb2YgcmVjdXJzaXZlbHksIGZvciBleGFtcGxlOgorCisg IGRlZmluZSB0ZXN0IGVjaG8geyBUaGUgZmlsZW5hbWUgaXMgIlxmY29udGVudHMoXCUxKSJ9CisK KyAgdGVzdCBjOlxteWRpclxibGFoLnR4dCAgICAgICAgICAgICAgIDsgV2UgZG9uJ3QgZXhwZWN0 IHRoaXMgdG8gd29yaworICAgVGhlIGZpbGVuYW1lIGlzICJjOm15ZGlyYmxhaC50eHQiICAgOyBh bmQgaXQgZG9lc24ndC4KKyAgdGVzdCBjOlxcbXlkaXJcXGJsYWgudHh0ICAgICAgICAgICAgIDsg QnV0IHRoaXMgZG9lcy4uLgorICAgVGhlIGZpbGVuYW1lIGlzICJjOlxteWRpclxibGFoLnR4dCIK KworICAgVGh1cyBpZiB0aGUgZmlsZW5hbWUgYXJyaXZlcyBpbnNpZGUgdGhlIG1hY3JvIHdpdGgg c2luZ2xlIGJhY2tzbGFzaGVzLAorICAgdGhlIGJhY2tzbGFzaGVzIGFyZSBwcmVzZXJ2ZWQgaWYg eW91IGFsd2F5cyByZWZlciB0byB0aGUgcGFyYW1ldGVyCisgICB0aHJvdWdoIHRoZSBcZmNvbnRl bnRzKCkgZnVuY3Rpb24uCisKKyAgIE5vdyBob3cgdG8gZW5zdXJlIHRoYXQgYmFja3NsYXNoZXMg YXJlIG5vdCBzdHJpcHBlZCBvciBtaXNpbnRlcnByZXRlZAorICAgd2hlbiBwYXNzaW5nIGEgZmls ZW5hbWUgdG8gYSBtYWNybz8gVGhpcyBicmluZ3MgdXMgYmFjayB0byB3aGF0IHdlCisgICBsZWFy bmVkIGluIGVhcmxpZXIgc2VjdGlvbnM6CisKKyAgICAxLiBJZiBpdCBpcyBhIGxpdGVyYWwgZmls ZW5hbWUsIGVpdGhlciBkb3VibGUgdGhlIGJhY2tzbGFzaGVzLCBvciAoaWYKKyAgICAgICB0aGUg ZmlsZW5hbWUgaXMgdG8gYmUgdXNlZCBvbmx5IHdpdGhpbiBLZXJtaXQgaXRzZWxmIGFuZCBub3Qg cGFzc2VkCisgICAgICAgdG8gYSBET1Mgc2hlbGwsIG9yIGl0IGlzIHRvIGJlIHBhc3NlZCB0byBh biBhbHRlcm5hdGl2ZSBzaGVsbCB0aGF0CisgICAgICAgYWNjZXB0cyBmb3J3YXJkIHNsYXNoIGFz IGEgZGlyZWN0b3J5IHNlcGFyYXRvciksIHVzZSBmb3J3YXJkIHNsYXNoCisgICAgICAgaW5zdGVh ZCBvZiBiYWNrc2xhc2ggYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IuCisgICAgMi4gSWYgaXQg aXMgYSB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIGEgZmlsZW5hbWUsIG1ha2Ugc3VyZSB5b3UgdXNl IGEKKyAgICAgICBtYWNyby1zdHlsZSB2YXJpYWJsZSBuYW1lLCByYXRoZXIgdGhhbiBhCisgICAg ICAgYmFja3NsYXNoLXBlcmNlbnQtY2hhcmFjdGVyIG5hbWUuCisKKyAgIEV4YW1wbGVzOgorCisg IGRlZmluZSB0ZXN0IGVjaG8gXGZjb250ZW50cyhcJTEpCisgIGRlZmluZSBmaWxlbmFtZSBjOlxt eWRpclxibGFoLnR4dAorCisgIHRlc3QgYzpcXG15ZGlyXFxibGFoLnR4dCAgOyBMaXRlcmFsIGZp bGVuYW1lIHdpdGggZG91YmxlIGJhY2tzbGFzaGVzCisgIGM6XG15ZGlyXGJsYWgudHh0CisKKyAg dGVzdCBjOi9teWRpci9ibGFoLnR4dCAgICA7IExpdGVyYWwgZmlsZW5hbWUgd2l0aCBmb3J3YXJk IHNsYXNoZXMKKyAgYzovbXlkaXIvYmxhaC50eHQKKworICB0ZXN0IFxtKGZpbGVuYW1lKSAgICAg ICAgIDsgVmFyaWFibGUKKyAgYzpcbXlkaXJcYmxhaC50eHQKKworICAgQnV0IHdoYXQgaWYgeW91 IGRvbid0IGxpa2UgdGhlc2UgcnVsZXMgYW5kIHlvdSBzdGlsbCB3YW50IHRvIHBhc3MgYQorICAg bGl0ZXJhbCBmaWxlbmFtZSBjb250YWluaW5nIHNpbmdsZSBiYWNrc2xhc2hlcyB0byBhIG1hY3Jv PyBUaGlzIGlzCisgICBwb3NzaWJsZSB0b28sIGJ1dCBhIGJpdCB0cmlja3k6IHR1cm4gY29tbWFu ZCBxdW90aW5nIG9mZiBiZWZvcmUKKyAgIGludm9raW5nIHRoZSBtYWNybywgYW5kIHRoZW4gdHVy biBpdCBiYWNrIG9uIGluc2lkZSB0aGUgbWFjcm8uIEV4YW1wbGU6CisKKyAgZGVmaW5lIHRlc3Qg c2V0IGNvbW1hbmQgcXVvdGluZyBvbiwgZWNobyBcZmNvbnRlbnRzKFwlMSkKKworICBzZXQgY29t bWFuZCBxdW90aW5nIG9mZgorICB0ZXN0IGM6XG15ZGlyXGJsYWgudHh0CisgIGM6XG15ZGlyXGJs YWgudHh0CisKKyAgIFVwb24gcmV0dXJuIGZyb20gdGhlIG1hY3JvLCBjb21tYW5kIHF1b3Rpbmcg aXMgYmFjayBvbiAoc2luY2UgdGhlIG1hY3JvCisgICB0dXJuZWQgaXQgb24pLgorCisgICBPYnZp b3VzbHkgdGhpcyB0cmljayBjYW4gbm90IGJlIHVzZWQgaWYgdGhlIGZpbGVuYW1lIGlzIHN0b3Jl ZCBpbiBhCisgICB2YXJpYWJsZSwgc2luY2UgaXQgcHJldmVudHMgdGhlIHZhcmlhYmxlIGZyb20g YmVpbmcgZXZhbHVhdGVkLgorCisxLjExLjYuIFBhc3NpbmcgRE9TIEZpbGUgTmFtZXMgZnJvbSBN YWNybyBQYXJhbWV0ZXJzIHRvIHRoZSBET1MgU2hlbGwKKworICAgTm93IHN1cHBvc2UgeW91IG5l ZWQgdG8gcGFzcyBhIERPUyBmaWxlbmFtZSB0byBhIG1hY3JvLCBhbmQgdGhlIG1hY3JvCisgICBu ZWVkcyB0byBwYXNzIGl0LCBpbiB0dXJuLCB0byB0aGUgV2luZG93cyBzaGVsbCB2aWEgKHNheSkg S2VybWl0J3MgUlVOCisgICBjb21tYW5kLiBUaGlzIHdvcmtzIHRvbzoKKworICBkZWZpbmUgeHJ1 biBydW4gXGZjb250ZW50cyhcJTEpCisgIHhydW4gYzpcXHdpbmRvd3NcXGNvbW1hbmRcXGNoa2Rz ay5leGUKKworICAgKG9yIHlvdSBjYW4gdXNlIHRoZSBTRVQgQ09NTUFORCBRVU9USU5HIE9GRiAv IE9OIHRlY2huaXF1ZSBkZXNjcmliZWQKKyAgIGFib3ZlIHRvIGF2b2lkIHRoZSBkb3VibGUgYmFj a3NsYXNoZXMuKSBCdXQuLgorCisgIHhydW4gYzovd2luZG93cy9jb21tYW5kL2Noa2Rzay5leGUK KworICAgZG9lcyBub3Qgd29yayBpZiB0aGUgV2luZG93cyBzaGVsbCBkb2VzIG5vdCByZWNvZ25p emUgIi8iIGFzIGEKKyAgIGRpcmVjdG9yeSBzZXBhcmF0b3IuIElmIHRoZXJlIGlzIGEgY2hhbmNl IHRoYXQgYSBmaWxlbmFtZSBtaWdodCBiZQorICAgcGFzc2VkIHRvIHRoZSBtYWNybyBpbiB0aGlz IGZvcm0sIHRoZSBtYWNybyB3aWxsIG5lZWQgdG8gY29udmVydCBpdCB0bworICAgYSBmb3JtIGFj Y2VwdGFibGUgdG8gdGhlIHNoZWxsOgorCisgIGRlZmluZSB4cnVuIHJ1biBcZnJlcGxhY2UoXGZj b250ZW50cyhcJTEpLC8sXFwpCisKKyAgIEhlcmUgd2UgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMg KGlmIGFueSkgb2YgIi8iIGluIHRoZSBhcmd1bWVudCB3aXRoCisgICAiXCIgcHJpb3IgdG8gaXNz dWluZyB0aGUgUlVOIGNvbW1hbmQuIE9mIGNvdXJzZSwgaW4gb3JkZXIgdG8gc3BlY2lmeQorICAg IlwiIGFzIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgaW4gdGhlIFxmcmVwbGFjZSgpIGFyZ3VtZW50IGxp c3QsIHdlIGhhdmUgdG8KKyAgIGRvdWJsZSBpdC4KKworMS4xMS43LiBQYXNzaW5nIERPUyBGaWxl bmFtZXMgdG8gS2VybWl0IGZyb20gdGhlIFNoZWxsCisKKyAgIEFzIG5vdGVkIGluIHRoZSBtYW51 YWwsIHRoZSBcJkBbXSBhcnJheSBjb250YWlucyBLZXJtaXQncyBjb21tYW5kLWxpbmUKKyAgIGFy Z3VtZW50cy4gU3VwcG9zZSBvbmUgb2YgdGhlc2UgYXJndW1lbnRzLCBzYXkgXCZAWzNdLCBpcyBh IERPUworICAgZmlsZW5hbWUgc3VjaCBhcyBDOlxGT09cQkFSXEJBWlxPT0ZBLlRYVC4gKE5vdGU6 IEluIEMtS2VybWl0IDcuMCBhbmQKKyAgIEs5NSAxLjEuMTggYW5kIGxhdGVyLCBjb21tYW5kLWxp bmUgYXJndW1lbnRzIGFmdGVyICI9IiBvciAiLS0iIGFyZSBhbHNvCisgICBhdmFpbGFibGUgaW4g dGhlIHRvcC1sZXZlbCBcJTEuLjkgdmFyaWFibGVzOyBzZWUgWzM2OF1TZWN0aW9uIDcuNS4pCisK KyAgIE9mIGNvdXJzZSB5b3UgY2FuIGVsaW1pbmF0ZSBhbnkgcHJvYmxlbXMgYnkgdXNpbmcgZm9y d2FyZCBzbGFzaGVzCisgICByYXRoZXIgdGhhbiBiYWNrc2xhc2hlcyBpbiB0aGUgZmlsZW5hbWUs IGJ1dCBzb21ldGltZXMgdGhpcyBpcyBub3QKKyAgIHBvc3NpYmxlLCBhcyB3aGVuIHRoZSBLZXJt aXQgY29tbWFuZCBsaW5lIGlzIGJlaW5nIGdlbmVyYXRlZCBieSBhbm90aGVyCisgICBwcm9ncmFt IHRoYW4gY2FuIG9ubHkgZ2VuZXJhdGUgIm5hdGl2ZSIgZm9ybWF0IERPUyBmaWxlbmFtZXMuCisK KyAgIEFzIG5vdGVkIGluIHRoZSBtYW51YWwsICJcJXgiIHZhcmlhYmxlcyBhbmQgXCZ4W10gYXJy YXlzIGFyZSBhbHdheXMKKyAgIGV2YWx1YXRlZCAiYWxsIHRoZSB3YXkiIChyZWN1cnNpdmVseSku IElmIHRoZSBjb250ZW50cyBvZiBvbmUgb2YgdGhlc2UKKyAgIHZhcmlhYmxlcyBjb250YWlucyBi YWNrc2xhc2hlcywgdGhpcyBjYXVzZXMgYW5vdGhlciBsZXZlbCBvZgorICAgZXZhbHVhdGlvbi4K KworICAgVGhlcmUgaXMgYW5vdGhlciBraW5kIG9mIHZhcmlhYmxlLCB3aGljaCBpcyBldmFsdWF0 ZWQgb25seSAib25lIGxldmVsCisgICBkZWVwIi4gWW91IGNhbiB1c2UgdGhpcyB0byBwcmV2ZW50 IGludGVycHJldGF0aW9uIG9mIHRoZSBiYWNrc2xhc2hlcyBpbgorICAgdGhlIGZpbGVuYW1lcy4g RXhhbXBsZToKKworICBhc3NpZ24gZmlsZW5hbWUgXGZjb250ZW50cyhcJkBbM10pICA7IFRyYW5z ZmVyIGNvbnRlbnRzCisgIC4uLgorICBzZW5kIFxtKGZpbGVuYW1lKQorCisgICBPciwgbW9yZSBz aW1wbHk6CisKKyAgc2VuZCBcZmNvbnRlbnRzKFwmQFszXSkKKworMS4xMi4gRGVidWdnaW5nCisK KyAgIFRoZSBkZWJ1ZyBsb2cgaXMgcHJvZHVjZWQgd2hlbiB5b3UgZ2l2ZSBhICJsb2cgZGVidWci IGNvbW1hbmQuIFRoaXMgaXMKKyAgIG5vcm1hbGx5IGRvbmUgYXQgdGhlIHJlcXVlc3Qgb2YgdGhl IEtlcm1pdCBoZWxwIGRlc2ssIGZvciBmb3J3YXJkaW5nIHRvCisgICB0aGUgS2VybWl0IGRldmVs b3BlcnMgZm9yIGFuYWx5c2lzIGFzIGEgbGFzdCByZXNvcnQgaW4gdHJvdWJsZXNob290aW5nCisg ICBwcm9ibGVtcy4gKExhc3QgcmVzb3J0IGJlY2F1c2UgaXQgY2FuIGdyb3cgcXVpdGUgaHVnZSBp biBhIHZlcnkgc2hvcnQKKyAgIHRpbWUuKSBJbiBjYXNlcyB3aGVyZSB0aW1pbmcgaW5mb3JtYXRp b24gaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBhCisgICBwcm9ibGVtLCB5b3UgY2FuIHRl bGwgQy1LZXJtaXQgdG8gcHV0IGEgdGltZXN0YW1wIG9uIGVhY2ggZGVidWcgbG9nCisgICBsaW5l IGJ5IGdpdmluZyB0aGUgY29tbWFuZDoKKworICBTRVQgREVCVUcgVElNRVNUQU1QIE9OCisKKyAg IEF0IGFueSB0aW1lIGJlZm9yZSBvciBhZnRlciBhY3RpdmF0aW5nIHRoZSBkZWJ1ZyBsb2cgKFNF VCBERUJVRworICAgVElNRVNUQU1QIE9GRiB0dXJucyBvZmYgdGltZXN0YW1waW5nKS4gVGltZXN0 YW1wcyBjYW4gYmUgdHVybmVkIG9mZiBhbmQKKyAgIG9uIGFzIGRlc2lyZWQgd2hpbGUgbG9nZ2lu Zy4gT2J2aW91c2x5LCB0aGV5IGluY3JlYXNlIHRoZSBzaXplIGFuZAorICAgZ3Jvd3RoIHJhdGUg b2YgdGhlIGxvZyBzaWduaWZpY2FudGx5LCBhbmQgc28gc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5 LgorICAgVGltZXN0YW1wcyBhcmUgb2YgdGhlIGZvcm0gaGg6bW06c3MueHh4LCB3aGVyZSAueHh4 IGlzIHRob3VzYW5kcyBvZiBhCisgICBzZWNvbmQgKGJ1dCBpcyBpbmNsdWRlZCBvbmx5IG9uIHBs YXRmb3JtcyB0aGF0IGluY2x1ZGUgdGhpcyBmZWF0dXJlKS4KKworMS4xMy4gTG9ncworCisgICBJ biBVTklYIEMtS2VybWl0IGFuZCBpbiBLLTk1LCB5b3UgY2FuIG5vdyBkaXJlY3QgYW55IGxvZyB0 byBhIHBpcGUuCisgICBUaGlzIG5vdCBvbmx5IGxldHMgeW91IHNlbmQgeW91ciBsb2dzIHRvIHBs YWNlcyBvdGhlciB0aGFuIGRpc2sgZmlsZXMsCisgICBidXQgYWxzbyBsZXRzIHlvdSBjdXN0b21p emUgdGhlbSB0byBhbnkgZGVzaXJlZCBkZWdyZWUuCisKKyAgIExPRyB7IERFQlVHLCBQQUNLRVRT LCBTRVNTSU9OLCBUUkFOU0FDVElPTiwgQ09OTkVDVElPTiB9IHsgZmlsZSwgcGlwZSB9CisgICAg ICAgICAgLi4uCisgICAgICAgICAgQSAicGlwZSIgaXMgdGhlIG5hbWUgb2YgYSBjb21tYW5kLCBw cmVjZWRlZCBieSBhIHZlcnRpY2FsIGJhci4KKyAgICAgICAgICBJZiB0aGUgcGlwZSBjb250YWlu cyBhbnkgc3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcy4KKworICAgSGVyZSBh cmUgc29tZSBleGFtcGxlcyBmb3IgVU5JWCAoYWx3YXlzIHJlbWVtYmVyIHRoZSBpbXBvcnRhbmNl IG9mCisgICBnZXR0aW5nIHRoZSBVTklYIHNoZWxsIHF1b3RpbmcgcnVsZXMgcmlnaHQpOgorCisg ICBMT0cgVFJBTlNBQ1RJT05TIHxscHIKKyAgICAgICAgICBUaGlzIHNlbmRzIHRoZSB0cmFuc2Fj dGlvbiBsb2cgdG8gdGhlIGRlZmF1bHQgVU5JWCBwcmludGVyLAorICAgICAgICAgIHJhdGhlciB0 aGFuIHRvIGEgZmlsZSAodXNlICJscCIgcmF0aGVyIHRoYW4gImxwciIgaWYgbmVjZXNzYXJ5KS4K KworICAgTE9HIFRSQU5TQUNUSU9OUyB7fCBteWZpbHRlciA+IHQubG9nfQorICAgICAgICAgIEZv ciB0aG9zZSB3aG8gZG9uJ3QgbGlrZSB0aGUgZm9ybWF0IG9mIHRoZSB0cmFuc2FjdGlvbiBsb2cs IG9yCisgICAgICAgICAgd2FudCB0byBleHRyYWN0IGNlcnRhaW4gaW5mb3JtYXRpb24gZnJvbSBp dDsgd3JpdGUgeW91ciBvd24KKyAgICAgICAgICBvdXRwdXQgZmlsdGVyLgorCisgICBMT0cgU0VT U0lPTiB7fCBscHIgLVBsYXNlcndyaXRlcn0KKyAgICAgICAgICBUaGlzIHNlbmRzIHRoZSBzZXNz aW9uIGxvZyB0byBhIHNwZWNpZmljIFVOSVggcHJpbnRlciwgcmF0aGVyCisgICAgICAgICAgdGhh biB0byBhIGZpbGUuIE5vdGUgdGhlIGJyYWNlcyBhcm91bmQgdGhlIHBpcGVsaW5lLiBUaGVzZSBh cmUKKyAgICAgICAgICByZXF1aXJlZCBiZWNhdXNlIGl0IGNvbnRhaW5zIHNwYWNlcy4KKworICAg TE9HIERFQlVHIHt8IHRhaWwgLTEwMCA+IGRlYnVnLmxvZ30KKyAgICAgICAgICBUaGlzIGNhdXNl cyB0aGUgZGVidWcgbG9nIGZpbGUgdG8gY29udGFpbiBvbmx5IHRoZSBmaW5hbCAxMDAKKyAgICAg ICAgICBsaW5lcy4gU3VwcG9zZSBDLUtlcm1pdCBjcmFzaGVzIHVuZGVyIHNvbWUgdW5wcmVkaWN0 YWJsZQorICAgICAgICAgIGNpcmN1bXN0YW5jZXMsIGFuZCB5b3UgbmVlZCBhIGRlYnVnIGxvZyB0 byBjYXRjaCBpdCBpbiB0aGUgYWN0LgorICAgICAgICAgIEJ1dCB0aGUgZGVidWcgbG9nIGNhbiBn cm93IHRvIGh1Z2UgcHJvcG9ydGlvbnMgdmVyeSBxdWlja2x5LAorICAgICAgICAgIHBvc3NpYmx5 IGZpbGxpbmcgdXAgdGhlIGRpc2suIFBpcGluZyB0aGUgZGVidWcgbG9nIHRocm91Z2gKKyAgICAg ICAgICAidGFpbCIgcmVzdWx0cyBpbiBrZWVwaW5nIG9ubHkgdGhlIGxhc3QgMTAwIGxpbmVzIChv ciBvdGhlcgorICAgICAgICAgIG51bWJlciBvZiB5b3VyIGNob2ljZSkuCisKKyAgIExPRyBERUJV RyB7fCBncmVwICJeVEVMTkVUIiA+IGRlYnVnLmxvZ30KKyAgICAgICAgICBUaGlzIG9uZSBzaG93 cyBob3cgdG8gbG9nIG9ubHkgVGVsbmV0IG5lZ290aWF0aW9ucy4gUGlwaW5nIHRoZQorICAgICAg ICAgIGRlYnVnIGxvZyB0aHJvdWdoIGdyZXAgb3IgZWdyZXAgbGV0cyB5b3UgbG9nIG9ubHkgc3Bl Y2lmaWMKKyAgICAgICAgICBpbmZvcm1hdGlvbiwgcmF0aGVyIHRoYW4gZXZlcnl0aGluZy4gIm1h biBncmVwIiBmb3IgZnVydGhlcgorICAgICAgICAgIGluZm8uCisKKyAgIExPRyBERUJVRyB7fCBn emlwIC1jID4gZGVidWcubG9nLmd6fQorICAgICAgICAgIENyZWF0ZXMgYSBmdWxsIGRlYnVnIGxv ZywgYnV0IGNvbXByZXNzZWQgYnkgZ3ppcCB0byBzYXZlIHNwYWNlLgorCisgICBMT0cgUEFDS0VU UyB7fCB0ciAiXFwwMSIgIlgiIHwgY3V0IC1jOS0gPiBwYWNrZXQubG9nfQorICAgICAgICAgIFRo aXMgb25lIHdyaXRlcyB0aGUgcmVndWxhciBwYWNrZXQgbG9nLCBidXQgdHJhbnNsYXRlcyB0aGUK KyAgICAgICAgICBDdHJsLUEgdGhhdCBzdGFydHMgZWFjaCBwYWNrZXQgdG8gdGhlIGxldHRlciAi WCIgYW5kIHJlbW92ZXMgdGhlCisgICAgICAgICAgcy1ubi1ubi0gbm90YXRpb24gZnJvbSB0aGUg YmVnaW5uaW5nIG9mIGVhY2ggbGluZS4gTm90ZSB0aGUKKyAgICAgICAgICBkb3VibGUgYmFja3Ns YXNoIChub3JtYWwgS2VybWl0IHF1b3RpbmcgcnVsZXMpLiAibWFuIHRyIiBhbmQKKyAgICAgICAg ICAibWFuIGN1dCIgZm9yIGZ1cnRoZXIgaW5mby4KKworICAgU2VlIFszNjldU2VjdGlvbiAyLjEy IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IGNvbm5lY3Rpb24gbG9nLgorCisxLjE0LiBB dXRvbWF0aWMgRmlsZS1UcmFuc2ZlciBQYWNrZXQgUmVjb2duaXRpb24gYXQgdGhlIENvbW1hbmQg UHJvbXB0CisKKyAgIEJlZ2lubmluZyBpbiB2ZXJzaW9uIDcuMCwgQy1LZXJtaXQgY2FuIHJlY29n bml6ZSBLZXJtaXQgKGFuZCBpbiBzb21lCisgICBjYXNlcyBhbHNvIFptb2RlbSkgZmlsZS10cmFu c2ZlciBwYWNrZXRzIHdoaWxlIGF0IGl0cyBjb21tYW5kIHByb21wdC4KKyAgIFRoaXMgaXMgY29u dmVuaWVudCAoZm9yIGV4YW1wbGUpLCBpZiB5b3UgZXNjYXBlZCBiYWNrIGZyb20gYSByZW1vdGUK KyAgIEtlcm1pdCBwcm9ncmFtIGFuZCB0b2xkIHRoZSBsb2NhbCBLZXJtaXQgcHJvZ3JhbSB0byBz ZW5kIGEgZmlsZSwgYnV0CisgICBmb3Jnb3QgdG8gdGVsbCB0aGUgcmVtb3RlIEtlcm1pdCBwcm9n cmFtIHRvIHJlY2VpdmUgaXQgKGFuZCB0aGUgbG9jYWwKKyAgIEtlcm1pdCBkaWQgbm90IGhhdmUg dGhlICJzZW5kIGEgS2VybWl0IHJlY2VpdmUgY29tbWFuZCIgZmVhdHVyZQorICAgYXZhaWxhYmxl KS4gVGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBjb21tYW5kOgor CisgICBTRVQgQ09NTUFORCBBVVRPRE9XTkxPQUQgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBXaGVu IE9OLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgdGhlIGNvbW1hbmQgcGFyc2VyIHJlY29nbml6ZXMK KyAgICAgICAgICBLZXJtaXQgcGFja2V0cyB3aGVuIEtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZS4g QW4gUyBwYWNrZXQgbWFrZXMKKyAgICAgICAgICBpdCBnbyBpbnRvIHJlY2VpdmUgbW9kZSwgYW4g SSBwYWNrZXQgbWFrZXMgaXQgZ28gaW50byBzZXJ2ZXIKKyAgICAgICAgICBtb2RlLiBXaGVuIE9G RiwgcGFja2V0IHJlY29nbml0aW9uIGlzIGRpc2FibGVkIGFuZCB0aGUgYmVoYXZpb3IKKyAgICAg ICAgICB3aGVuIGEgcGFja2V0IGlzIHJlY2VpdmVkIGF0IHRoZSBjb21tYW5kIHByb21wdCBpcyBh cyBpdCB3YXMgaW4KKyAgICAgICAgICBDLUtlcm1pdCA2LjEgYW5kIGVhcmxpZXIgKG5hbWVseSB0 byBwcmludCBhbiBlcnJvciBtZXNzYWdlKS4KKworICAgQ09NTUFORCBBVVRPRE9XTkxPQUQgaXMg dGhlIGNvbW1hbmQtbW9kZSBlcXVpdmFsZW50IG9mIFRFUk1JTkFMCisgICBBVVRPRE9XTkxPQUQs IHdoaWNoIGlzIGVmZmVjdGl2ZSBkdXJpbmcgQ09OTkVDVCBtb2RlLgorCisxLjE1LiBUaGUgVFlQ RSBDb21tYW5kCisKKyAgIFRoZSBUWVBFIGNvbW1hbmQgbm93IGFjY2VwdHMgYSBzZWxlY3Rpb24g b2Ygb3B0aW9uYWwgc3dpdGNoZXMKKyAgIChbMzcwXVNlY3Rpb24gMS41KSwgYW5kIGFsc28gc2V0 cyBzZXZlcmFsIHZhcmlhYmxlcy4KKworICAgU3ludGF4OiBUWVBFIFsgc3dpdGNoZXMuLi4gXSBm aWxlbmFtZQorCisgICBWYXJpYWJsZXM6CisKKyAgIFx2KHR5X2xuKQorICAgICAgICAgIExpbmUg bnVtYmVyIG9mIGN1cnJlbnQgbGluZSAoZHVyaW5nIFRZUEUgY29tbWFuZDsgc2VlIC9QUkVGSVgp CisKKyAgIFx2KHR5X2xjKQorICAgICAgICAgIExpbmUgY291bnQgb2YgZmlsZSBtb3N0IHJlY2Vu dGx5IFRZUEVkLgorCisgICBcdih0eV9tYykKKyAgICAgICAgICBNYXRjaCBjb3VudCBvZiBmaWxl IG1vc3QgcmVjZW50bHkgVFlQRWQgKHNlZSAvTUFUQ0gpLgorCisgICBTd2l0Y2hlczoKKworICAg L1BBR0UKKyAgICAgICAgICBJZiAvUEFHRSBpcyBpbmNsdWRlZCwgS2VybWl0IHBhdXNlcyBhdCB0 aGUgZW5kIG9mIGVhY2ggc2NyZWVuZnVsCisgICAgICAgICAgYW5kIGlzc3VlcyBhICJtb3JlPyIg cHJvbXB0LiBZb3UgbWF5IHByZXNzIHRoZSBzcGFjZSBiYXIgdG8gdmlldworICAgICAgICAgIHRo ZSBuZXh0IHBhZ2UgKHNjcmVlbmZ1bCksIG9yIHByZXNzICJxIiBvciAibiIgdG8gcmV0dXJuIHRv IHRoZQorICAgICAgICAgIEMtS2VybWl0IHByb21wdC4gSWYgdGhpcyBzd2l0Y2ggaXMgZ2l2ZW4s IGl0IG92ZXJyaWRlcyB0aGUKKyAgICAgICAgICBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIHNldHRp bmcgZm9yIHRoaXMgY29tbWFuZCBvbmx5LiBJZiBpdCBpcworICAgICAgICAgIG5vdCBnaXZlbiwg cGFnaW5nIGlzIGFjY29yZGluZyB0byBDT01NQU5EIE1PUkUtUFJPTVBUSU5HLgorCisgICAvTk9Q QUdFCisgICAgICAgICAgRG8gbm90IHBhdXNlIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW5mdWw7 IHNob3cgdGhlIHdob2xlIGZpbGUKKyAgICAgICAgICAob3IgYWxsIHNlbGVjdGVkIGxpbmVzKSBh dCBvbmNlLiBJZiB0aGlzIHN3aXRjaCBpcyBnaXZlbiwgaXQKKyAgICAgICAgICBvdmVycmlkZXMg dGhlIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgc2V0dGluZyBmb3IgdGhpcyBjb21tYW5kCisgICAg ICAgICAgb25seS4gSWYgaXQgaXMgbm90IGdpdmVuLCBwYWdpbmcgaXMgYWNjb3JkaW5nIHRvIENP TU1BTkQKKyAgICAgICAgICBNT1JFLVBST01QVElORy4KKworICAgL0hFQURbOm5dCisgICAgICAg ICAgT25seSBzaG93IHRoZSBmaXJzdCBuIGxpbmVzIG9mIHRoZSBmaWxlICh3aGVyZSBuIGlzIGEg bnVtYmVyKS4KKyAgICAgICAgICBJZiBuIGlzIG9taXR0ZWQsIDEwIGlzIHVzZWQuCisKKyAgIC9U QUlMWzpuXQorICAgICAgICAgIE9ubHkgc2hvdyB0aGUgbGFzdCBuIGxpbmVzIG9mIHRoZSBmaWxl ICh3aGVyZSBuIGlzIGEgbnVtYmVyKS4gSWYKKyAgICAgICAgICBuaXMgb21pdHRlZCwgMTAgaXMg dXNlZC4gTm90ZTogL0hFQUQgYW5kIC9UQUlMIGNhbid0IGJlCisgICAgICAgICAgY29tYmluZWQ7 IGlmIHlvdSBnaXZlIGJvdGggc3dpdGNoZXMsIG9ubHkgdGhlIG1vc3QgcmVjZW50IG9uZSBpcwor ICAgICAgICAgIHVzZWQuCisKKyAgIC9NQVRDSDpwYXR0ZXJuCisgICAgICAgICAgT25seSB0eXBl IGxpbmVzIGZyb20gdGhlIGZpbGUgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybiAoc2VlCisg ICAgICAgICAgWzM3MV1TZWN0aW9uIDQuOS4xIGZvciBwYXR0ZXJuIG5vdGF0aW9uKS4gVU5JWCB1 c2VycyBmYW1pbGlhcgorICAgICAgICAgIHdpdGggZ3JlcCBzaG91bGQgbm90ZSBhIHNpZ25pZmlj YW50IGRpZmZlcmVuY2U6IHRoZXJlIGlzIG5vCisgICAgICAgICAgaW1wbGllZCAiKiIgYXQgdGhl IGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBwYXR0ZXJuLiBUaHVzOgorCisgIFRZUEUgL01BVENI OmZvbyAgICBMaXN0cyBsaW5lcyB3aG9zZSBlbnRpcmUgY29udGVudHMgYXJlICJmb28iLgorICBU WVBFIC9NQVRDSDpmb28qICAgTGlzdHMgbGluZXMgdGhhdCBzdGFydCB3aXRoICJmb28iLgorICBU WVBFIC9NQVRDSDoqZm9vICAgTGlzdHMgbGluZXMgdGhhdCBlbmQgd2l0aCAiZm9vIi4KKyAgVFlQ RSAvTUFUQ0g6KmZvbyogIExpc3RzIGxpbmVzIHRoYXQgaGF2ZSAiZm9vIiBhbnl3aGVyZSBpbiB0 aGVtLgorCisgICAgICAgICAgL0hFQUQgYW5kIC9UQUlMIGFwcGx5IGFmdGVyIC9NQVRDSCwgc28g InR5cGUgL3RhaWw6MjAgL21hdGNoOngqIgorICAgICAgICAgIHNob3dzIHRoZSBsYXN0IDIwIGxp bmVzIGluIHRoZSBmaWxlIHRoYXQgc3RhcnQgd2l0aCAieCIuCisKKyAgIC9QUkVGSVg6c3RyaW5n CisgICAgICAgICAgUHJpbnQgdGhlIGdpdmVuIHN0cmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIGVh Y2ggbGluZS4gVGhlIHN0cmluZworICAgICAgICAgIG1heSBiZSBhIGNvbnN0YW50LCBhIHZhcmlh YmxlLCBvciBhIHF1b3RlZCB2YXJpYWJsZS4gSWYgaXQncyBhbgorICAgICAgICAgIHVucXVvdGVk IHZhcmlhYmxlLCBpdHMgdmFsdWUgYXQgdGhlIHRpbWUgdGhlIFRZUEUgY29tbWFuZCB3YXMKKyAg ICAgICAgICBnaXZlbiBpcyB1c2VkIGFzIGEgY29uc3RhbnQuIElmIGl0IGlzIGEgcXVvdGVkIHZh cmlhYmxlLCBpdCBpcworICAgICAgICAgIHJlLWV2YWx1YXRlZCBmb3IgZWFjaCBsaW5lOyBhIHVz ZWZ1bCB2YXJpYWJsZSBmb3IgdGhpcyBjb250ZXh0CisgICAgICAgICAgaXMgXHYodHlfbG4pICh0 aGUgbGluZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgbGluZSBiZWluZyB0eXBlZCkuCisgICAgICAg ICAgSWYgdGhlIHByZWZpeCBpcyB0byBpbmNsdWRlIHNwYWNlcywgaXQgbXVzdCBiZSBlbmNsb3Nl ZCBpbgorICAgICAgICAgIGJyYWNlcy4gRXhhbXBsZXM6CisKKyAgICAgICAgdHlwZSAvcHJlZml4 Ontvb2ZhLnR4dDogfSAvbWF0Y2g6KnRoaW5nKiBvb2ZhLnR4dAorICAgICAgICAgICAgICAgIFBy aW50cyBhbGwgbGluZXMgaW4gb29mYS50eHQgdGhhdCBjb250YWluICJ0aGluZyIgd2l0aCB0aGUK KyAgICAgICAgICAgICAgICBmaWxlbmFtZSBpdHNlbGYgYXMgdGhlIHByZWZpeCAoc2ltaWxhciB0 byBVTklYIGdyZXApLgorCisgICAgICAgIHR5cGUgL3ByZWZpeDp7XHYodGltZSkuIH0gb29mYS50 eHQKKyAgICAgICAgICAgICAgICBQcmVmaXhlcyBlYWNoIGxpbmUgb2Ygb29mYS50eHQgd2l0aCB0 aGUgdGltZSBhdCB3aGljaCB0aGUKKyAgICAgICAgICAgICAgICBUWVBFIGNvbW1hbmQgd2FzIGdp dmVuIChvbmUgYmFja3NsYXNoKQorCisgICAgICAgIHR5cGUgL3ByZWZpeDp7XFx2KHRpbWUpLiB9 IG9vZmEudHh0CisgICAgICAgICAgICAgICAgUHJlZml4ZXMgZWFjaCBsaW5lIG9mIG9vZmEudHh0 IHdpdGggdGhlIHRpbWUgYXQgd2hpY2ggdGhhdAorICAgICAgICAgICAgICAgIGxpbmUgaXMgYmVp bmcgdHlwZWQgKHR3byBiYWNrc2xhc2hlcykuCisKKyAgICAgICAgdHlwZSAvcHJlZml4OntcXHYo dHlfbG4pLiB9IG9vZmEudHh0CisgICAgICAgICAgICAgICAgUHJlZml4ZXMgZWFjaCBsaW5lIG9m IG9vZmEudHh0IHdpdGggaXRzIGxpbmUgbnVtYmVyLgorCisgICAgICAgIHR5cGUgL3ByZWZpeDp7 XFxmbHBhZChcXHYodHlfbG4pLDQpLiB9IG9vZmEudHh0CisgICAgICAgICAgICAgICAgU2FtZSBh cyB0aGUgcHJldmlvdXMgZXhhbXBsZSwgZXhjZXB0IHRoZSBsaW5lIG51bWJlciBpcworICAgICAg ICAgICAgICAgIHJpZ2h0LWFkanVzdGVkIGluIGEgNC1jb2x1bW4gZmllbGQuCisKKyAgIC9XSURU SFs6bl0KKyAgICAgICAgICBUcnVuY2F0ZXMgZWFjaCBsaW5lIGF0IGNvbHVtbiBuICh3aGljaCBt dXN0IGJlIGEgbnVtYmVyKSBwcmlvcgorICAgICAgICAgIHRvIHByaW50aW5nIGl0LiBUaGlzIG9w dGlvbiBjYW4gYmUgdXNlZCBmb3IgbG9uZyBsaW5lcyB3aGVuIHlvdQorICAgICAgICAgIGRvbid0 IHdhbnQgdGhlbSB0byB3cmFwLiBJZiBuaXMgb21pdHRlZCwgeW91ciBjdXJyZW50IHNjcmVlbgor ICAgICAgICAgIHdpZHRoIGlzIHVzZWQuCisKKyAgIC9DT1VOVAorICAgICAgICAgIENvdW50cyBs aW5lcyBhbmQgLS0gaWYgL01BVENIIHdhcyBpbmNsdWRlZCwgbWF0Y2hlcyAtLSBidXQgZG9lcwor ICAgICAgICAgIG5vdCBwcmludCBhbnkgbGluZXMgZnJvbSB0aGUgZmlsZS4gVGhlIGxpbmUgYW5k IG1hdGNoIGNvdW50IGlzCisgICAgICAgICAgc2hvd24gYXQgdGhlIGVuZCwgYW5kIHRoZSB2YXJp YWJsZXMgXHYodHlfbGMpIGFuZCBcdih0eV9sbSkgYXJlCisgICAgICAgICAgc2V0IGFjY29yZGlu Z2x5LgorCisgICBTRVQgT1BUSU9OUyBUWVBFIHsgL1BBR0UsIC9OT1BBR0UsIC9XSURUSDpuIH0K KyAgICAgICAgICBTZXRzIHRoZSBwYWdpbmcgZGVmYXVsdCBmb3IgVFlQRSBjb21tYW5kcywgd2hp Y2ggY2FuIGJlCisgICAgICAgICAgb3ZlcnJpZGRlbiBpbiBhbnkgcGFydGljdWxhciBUWVBFIGNv bW1hbmQgYnkgaW5jbHVkaW5nIHRoZQorICAgICAgICAgIGRlc2lyZWQgc3dpdGNoLgorCisgICBJ ZiBhIFRZUEUgY29tbWFuZCBpcyBnaXZlbiB3aXRoIG5vIHN3aXRjaCwgYW5kIG5vIFNFVCBPUFRJ T05TIFRZUEUKKyAgIHNlbGVjdGlvbiBpcyBpbiBlZmZlY3QsIHBhZ2luZyBpcyBhY2NvcmRpbmcg dG8geW91ciBDT01NQU5ECisgICBNT1JFLVBST01QVElORyBzZXR0aW5nIChTSE9XIENPTU1BTkQp LgorCisxLjE2LiBUaGUgUkVTRVQgQ29tbWFuZAorCisgICBUaGUgUkVTRVQgY29tbWFuZCwgYWRk ZWQgaW4gNy4wLCBjbG9zZXMgYWxsIG9wZW4gZmlsZXMgYW5kIGxvZ3MsIGJ1dAorICAgZG9lcyBu b3QgYWZmZWN0IHRoZSBvcGVuIGNvbm5lY3Rpb24gKGlmIGFueSkuCisKKzEuMTcuIFRoZSBDT1BZ IGFuZCBSRU5BTUUgQ29tbWFuZHMKKworICAgQXMgb2YgQy1LZXJtaXQgNy4wLCBpbiB0aGUgVU5J WCB2ZXJzaW9uIG9ubHksIHRoZSBDT1BZIGFuZCBSRU5BTUUKKyAgIGNvbW1hbmRzIGFyZSBidWls dCBpbiBhbmQgZG8gbm90IGNhbGwgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0ncyBDT1BZIG9yCisg ICBSRU5BTUUgY29tbWFuZC4gVGhpcyBhbGxvd3MgdGhlbSB0byB3b3JrIGluICJOT1BVU0giIHZl cnNpb25zIGFuZCBvdGhlcgorICAgY2lyY3Vtc3RhbmNlcyB3aGVyZSBpdCBjYW4ndCBhY2Nlc3Mg c3lzdGVtIGNvbW1hbmRzLCBhbmQgaXQgYWxsb3dzIGZpbGUKKyAgIGNvcHlpbmcgYW5kIHJlbmFt aW5nIHRvIGJlIGRvbmUgcG9ydGFibHkgaW4gc2NyaXB0cy4gVGhlCisgICBjaGFyYWN0ZXJpc3Rp Y3Mgb2YgdGhlIGJ1aWx0LWluIENPUFkgb3IgUkVOQU1FIGluY2x1ZGU6CisgICAgICogSXQgZmFp bHMgaWYgdGhlIHNvdXJjZSBmaWxlIGlzIGEgZGlyZWN0b3J5IG9yIGlzIHdpbGQgb3IgbGFja3Mg cmVhZAorICAgICAgIGFjY2Vzcy4KKyAgICAgKiBJdCBmYWlscyBpZiB0aGUgc291cmNlIGZpbGUg aXMgdGhlIGRlc3RpbmF0aW9uIGZpbGUuCisgICAgICogSXQgYWxsb3dzIHRoZSBkZXN0aW5hdGlv biBmaWxlIHRvIGJlIGEgZGlyZWN0b3J5LCBpbiB3aGljaCBjYXNlIHRoZQorICAgICAgIHNvdXJj ZSBmaWxlIGlzIGNvcGllZCAob3IgcmVuYW1lZCkgaW50byBpdCB3aXRoIHRoZSBzYW1lIG5hbWUu CisgICAgICogSXQgb3ZlcndyaXRlcyBhbiBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlIGlmIGl0 cyBwZXJtaXNzaW9uCisgICAgICAgYWxsb3dzLgorICAgICAqIEl0IHNldHMgdGhlIG5ldyBmaWxl J3MgcGVybWlzc2lvbiBhY2NvcmRpbmcgdG8gdW1hc2sgYnV0IGFsc28KKyAgICAgICBjYXJyaWVz IGZvcndhcmQgdGhlIHNvdXJjZSBmaWxlJ3MgZXhlY3V0ZSBwZXJtaXNzaW9uIGJpdHMgaWYgdGhl CisgICAgICAgZGVzdGluYXRpb24gZmlsZSBkaWQgbm90IGFscmVhZHkgZXhpc3QuCisgICAgICog SXQgZmFpbHMgaWYgaW50ZXJydXB0ZWQgYnkgQ3RybC1DLgorICAgICAqIFVwb24gZXJyb3IsIGl0 IHByaW50cyBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlLgorICAgICAqIEl0IHJldHVybnMgc3RhbmRh cmRpemVkIGVycm9yIGNvZGVzIHRoYXQgY2FuIGJlIHRlc3RlZCBieSBJRgorICAgICAgIFNVQ0NF U1MgLyBGQUlMLgorCisgICBUaGVzZSBjb21tYW5kcyBub3cgYWxzbyBhY2NlcHQgdGhlIGZvbGxv d2luZyBzd2l0Y2hlczoKKworICAvTElTVCAoL0xPRywgL1ZFUkJPU0UpICAgID0gUHJpbnQgImZp bGUxID0+IGZpbGUyIChPSykiIChvciBlcnJvciBtZXNzYWdlKS4KKyAgL05PTElTVCAoL05PTE9H LCAvUVVJRVQpICA9IERvbid0IHByaW50IGFueXRoaW5nIChleGNlcHQgZXJyb3IgbWVzc2FnZXMp LgorCisgICAvTk9MSVNUIGlzIHRoZSBkZWZhdWx0LgorCisgICBUaGUgc2FtZSBidWlsdC1pbiBj b2RlIGlzIHVzZWQgYnkgdGhlIFVOSVggQy1LZXJtaXQgc2VydmVyIHRvIGV4ZWN1dGUKKyAgIFJF TU9URSBDT1BZIGNvbW1hbmRzIChleGNlcHQgaW4gdGhpcyBjYXNlIG5vIHN3aXRjaGVzIGFyZSBh dmFpbGFibGUpLgorCisgICBUaGUgQ09QWSBjb21tYW5kIGFsc28gYWNjZXB0cyB0aGUgZm9sbG93 aW5nIGFkZGl0aW9uYWwgc3dpdGNoZXMuIFdoZW4KKyAgIGFueSBvZiB0aGVzZSBhcmUgZ2l2ZW4g KGFuZCB0aGV5IGNhbiBiZSB1c2VkIGluIGFueSBjb21iaW5hdGlvbiBleGNlcHQKKyAgIC9TV0FQ IGFuZCAvQVBQRU5EKSwgc29tZSBvZiB0aGUgY2hlY2tzIGxpc3RlZCBhYm92ZSBhcmUgcmVsYXhl ZCwgYW5kCisgICB0aHVzIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGdldCBpbnRvIHRyb3VibGUg aW4gY2VydGFpbiBjYXNlcywgZS5nLgorICAgd2hlbiB0aGUgc291cmNlIGFuZCB0YXJnZXQgZmls ZXMgYXJlIHRoZSBzYW1lIGZpbGU6CisKKyAgL0FQUEVORCAgICAgICAgICAgICAgICAgICA9IEFw cGVuZCBzb3VyY2UgZmlsZSB0byBkZXN0aW5hdGlvbiBmaWxlLgorICAvU1dBUC1CWVRFUyAgICAg ICAgICAgICAgID0gU3dhcCBieXRlcyAoc2VlIFszNzJdU2VjdGlvbiA2LjYuNSkuCisgIC9GUk9N QjY0ICAgICAgICAgICAgICAgICAgPSBEZWNvZGUgdGhlIHNvdXJjZSBmaWxlIGZyb20gQmFzZTY0 IGVuY29kaW5nLgorICAvVE9CNjQgICAgICAgICAgICAgICAgICAgID0gRW5jb2RlIHRoZSB0YXJn ZXQgZmlsZSBpbiBCYXNlNjQuCisKKyAgIEJhc2U2NCBpcyB0aGUgZW5jb2RpbmcgY29tbW9ubHkg dXNlZCBmb3IgZW5jbG9zdXJlcyBpbiBJbnRlcm5ldCBlbWFpbC4KKworMS4xOC4gVGhlIE1BTlVB TCBDb21tYW5kCisKKyAgIFRoZSBNQU5VQUwgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBhY2Nlc3Mg dGhlIGFwcHJvcHJpYXRlIEtlcm1pdCBtYW51YWwKKyAgIG9yIG90aGVyIG1hbnVhbC4gVGhlIGdl bmVyYWwgc3ludGF4IGlzOgorCisgICBNQU5VQUwgWyBzdHJpbmcgXQorICAgICAgICAgIElmIHRo ZSBzdHJpbmcgaXMgb21pdHRlZCwgQy1LZXJtaXQgYXNrcyB0aGUgdW5kZXJseWluZyBzeXN0ZW0g dG8KKyAgICAgICAgICBhY2Nlc3MgdGhlIEMtS2VybWl0IG1hbnVhbCB1c2luZyB3aGF0ZXZlciBt ZXRob2QgaXMgYXBwcm9wcmlhdGUKKyAgICAgICAgICBmb3IgdGhlIHN5c3RlbS4KKworICAgVGhl IHNwZWNpZmljIGFjdGlvbiBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0uIEluIFVOSVgsIGEgIm1hbiIg Y29tbWFuZCBpcworICAgaXNzdWVkOyAia2VybWl0IiBpcyB0aGUgZGVmYXVsdCBhcmd1bWVudCBi dXQgb3RoZXIgbWFudWFsIHRvcGljcyBtYXkgYmUKKyAgIHNwZWNpZmllZC4gSWYgdGhlICJtYW4i IGNvbW1hbmQgYWxsb3dzIGluZGV4IG9yIHN0cmluZyBzZWFyY2hpbmcsIHRoZQorICAgYXBwcm9w cmlhdGUgc3ludGF4IG1heSBiZSBpbmNsdWRlZC4KKworICAgSW4gS2VybWl0IDk1LCB0aGUgTUFO VUFMIGNvbW1hbmQgYnJpbmdzIHVwIHRoZSBIVE1MIG9ubGluZSBLOTUgbWFudWFsLgorCisgICBJ biBWTVMgYW5kIGVsc2V3aGVyZSwgIm1hbiIgaXMgc2ltcGx5IHRyYW5zbGF0ZWQgdG8gImhlbHAi LCB3aXRoIGEKKyAgIGRlZmF1bHQgYXJndW1lbnQgb2YgImtlcm1pdCI7IG90aGVyIGFuZC9vciBh ZGRpdGlvbmFsIGFyZ3VtZW50cyBtYXkgYmUKKyAgIGluY2x1ZGVkIGFjY29yZGluZyB0byB0aGUg ZGVmaW5pdGlvbiBvZiB0aGUgc3lzdGVtJ3MgImhlbHAiIGNvbW1hbmQuCisKKyAgIENvcnJlY3Qg b3BlcmF0aW9uIG9mIHRoZSAibWFuIiBjb21tYW5kIGluIEMtS2VybWl0IGRlcGVuZHMgb24gdGhl CisgICBhcHByb3ByaWF0ZSBtYW4gcGFnZSBvciBoZWxwIHRvcGljIGhhdmluZyBiZWVuIGluc3Rh bGxlZCBpbiB0aGUgcmlnaHQKKyAgIHBsYWNlIHdpdGggdGhlIHJpZ2h0IHBlcm1pc3Npb25zIGFu ZCBmb3JtYXQuCisKKzEuMTkuIFN0cmluZyBhbmQgRmlsZW5hbWUgTWF0Y2hpbmcgUGF0dGVybnMK KworICAgQSBwYXR0ZXJuIGlzIGEgc3RyaW5nIHRoYXQgaW5jbHVkZXMgc3BlY2lhbCBub3RhdGlv biBmb3IgbWF0Y2hpbmcKKyAgIGNsYXNzZXMgb3Igc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMuIEMt S2VybWl0IDcuMCAvIEs5NSAxLjEuMTkgc3VwcG9ydHMKKyAgIHBhdHRlcm5zIGluIHNldmVyYWwg cGxhY2VzOgorCisgICAgICogRmlsZW5hbWVzIChbMzczXVNlY3Rpb24gNC45KQorICAgICAqIFNX SVRDSCBjYXNlIGxhYmVscyAoWzM3NF1TZWN0aW9uIDcuMTgpCisgICAgICogVGhlIG5ldyBJRiBN QVRDSCBzdGF0ZW1lbnQgKFszNzVdU2VjdGlvbiA3LjQpCisgICAgICogVFlQRSAvTUFUQ0ggKFsz NzZdU2VjdGlvbiAxLjE1KQorICAgICAqIFNFVCBGSUxFIFRFWFQtUEFUVEVSTlMgYW5kIEJJTkFS WS1QQVRURVJOUyAoWzM3N11TZWN0aW9uIDQuMykKKyAgICAgKiBUaGUgXGZzZWFyY2goKSBhbmQg XGZhcnJheWxvb2soKSBmdW5jdGlvbnMgKFszNzhdU2VjdGlvbnMgNy4zIGFuZAorICAgICAgIFsz NzldNy4xMC43KQorICAgICAqIFRoZSBcZnBhdHRlcm4oKSBmdW5jdGlvbiB1c2VkIHdpdGggW00s UkVdSU5QVVQgKFszODBdU2VjdGlvbiA3LjEpCisKKyAgIFBhdHRlcm5zIGFyZSBhbHNvIGNhbGxl ZCB3aWxkY2FyZHMsIGVzcGVjaWFsbHkgd2hlbiB1c2VkIGZvciBmaWxlbmFtZQorICAgbWF0Y2hp bmcuIEMtS2VybWl0J3MgcGF0dGVybiBzeW50YXggaXMgZXhwbGFpbmVkIGluIFszODFdU2VjdGlv biA0LjkuMSwKKyAgIGFuZCBhbHNvIGJ5IHRoZSBIRUxQIFdJTERDQVJEUyBjb21tYW5kLgorCisx LjIwLiBNdWx0aXBsZSBDb21tYW5kcyBvbiBPbmUgTGluZQorCisgICBBcyBvZiBDLUtlcm1pdCA3 LjAsIGNvbW1hbmRzIGNhbiBiZSBncm91cGVkIHRvZ2V0aGVyIG9uIG9uZSBsaW5lIGJ5CisgICBz ZXBhcmF0aW5nIHRoZSBjb21tYW5kcyB3aXRoIGNvbW1hcyBhbmQgZW5jbG9zaW5nIHRoZSBsaXN0 IGluIGJyYWNlcy4KKyAgIEZvciBleGFtcGxlOgorCisgIEMtS2VybWl0PiB7IGVjaG8gT25lLCBl Y2hvIFR3bywgZWNobyBUaHJlZSB9CisgIEMtS2VybWl0PiBkbyB7IGVjaG8gT25lLCBlY2hvIFR3 bywgZWNobyBUaHJlZSB9CisKKyAgIENvbW1hbmQgbGlzdHMgY2FuIGJlIG5lc3RlZDoKKworICBb IGRvIF0geyBlY2hvIE9uZSwgZWNobyBUd28sIGlmIHRydWUgeyBlY2hvIEEsIGVjaG8gQn0sIGVj aG8gVGhyZWUgfQorCisgICBhbmQgdGhlIEVORCBjb21tYW5kIHdvcmtzIGFzIGl0IGRvZXMgaW4g bWFjcm9zOgorCisgIFsgZG8gXSB7IGVjaG8gT25lLCBlY2hvIFR3bywgaWYgdHJ1ZSBlbmQsIGVj aG8gVGhyZWUgfQorCisgICBUaGUgIm9uZSBsaW5lIiBzdHJpY3R1cmUgaXMsIG9mIGNvdXJzZSwg cGxpYW50IHRvIGxpbmUtY29udGludWF0aW9uCisgICBjb252ZW50aW9ucywgbmFtZWx5IHRoYXQg bGluZXMgZW5kaW5nIGluIGh5cGhlbiAoLSkgb3IgbGVmdCBicmFjZSAoeykKKyAgIGFyZSB0byBi ZSBjb250aW51ZWQuIFRodXMgdGhlIGZpcnN0IGV4YW1wbGUgY2FuIGFsc28gYmUgcmVuZGVyZWQ6 CisKKyAgWyBkbyBdIHsKKyAgICAgIGVjaG8gT25lCisgICAgICBlY2hvIFR3bworICAgICAgZWNo byBUaHJlZQorICB9CisKKyAgICh0aGUgImRvIiBpcyBvcHRpb25hbCkuCisKKzEuMjEuIFdoYXQg RG8gSSBIYXZlPworCisgICBDLUtlcm1pdCBjYW4gYmUgYnVpbHQgZm9yIGh1bmRyZWRzIG9mIGRp ZmZlcmVudCBwbGF0Zm9ybXMgd2l0aAorICAgcHJhY3RpY2FsbHkgY291bnRsZXNzIGNvbmZpZ3Vy YXRpb24gb3B0aW9ucy4gQ2VydGFpbiBjb21tYW5kcyBtaWdodCBub3QKKyAgIGJlIGF2YWlsYWJs ZSBpbiBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zLCBldGMuIEV2ZW4gb24gdGhlIHNhbWUgcGxhdGZv cm0sCisgICBkaWZmZXJlbnQgYnVpbGRzIGFyZSBwb3NzaWJsZTogIm1heGltdW0gZnVuY3Rpb25h bGl0eSIsICJtaW5pbXVtIHNpemUiLAorICAgIm1heGltdW0gcGVyZm9ybWFuY2UiLCBhbmQgc28g b24uIFlvdSBjYW4gZmluZCBvdXQgYSBsb3QgYWJvdXQgdGhlCisgICBjb25maWd1cmF0aW9uIG9m IHlvdXIgQy1LZXJtaXQgcHJvZ3JhbSB3aXRoIHRoZSBTSE9XIEZFQVRVUkVTIGNvbW1hbmQuCisg ICBPZiBjb3Vyc2UsIGEgbG90IG9mIHdoYXQgaXQgc2F5cywgZXNwZWNpYWxseSBpbiB0aGUgYm90 dG9tIHBhcnQsIG1pZ2h0CisgICBzZWVtIGxpa2UgZ2liYmVyaXNoLCBidXQgY2FuIGJlIGRlY2lw aGVyZWQgd2l0aCBhIFJvc2V0dGEgU3RvbmUgKHN1Y2gKKyAgIGFzIHRoZSBDLUtlcm1pdCBzb3Vy Y2Ugb3IgdGhlIFszODJdY2tjY2ZnLnR4dCBmaWxlKS4gSW4gYW55IGNhc2UsIHRoZQorICAgb3V0 cHV0IGZyb20gU0hPVyBGRUFUVVJFUyBtaWdodCBlYXNpbHkgZXhwbGFpbiB3aHkgc29tZSBleHBl Y3RlZAorICAgZmVhdHVyZSBpcyBtaXNzaW5nLCBvciBzb21lIGJ1ZmZlciBpcyBzbWFsbGVyIHRo YW4gZXhwZWN0ZWQuIEhlcmUncyBhCisgICBzYW1wbGUgb2YgdGhlIGJvdHRvbSBzZWN0aW9uIGZv ciB0aGUgU3VuT1MgdmVyc2lvbjoKKworQy1LZXJtaXQgNy4wLjE5NiwgMSBKYW4gMjAwMAorCitN YWpvciBvcHRpb25hbCBmZWF0dXJlcyBpbmNsdWRlZDoKKyBOZXR3b3JrIHN1cHBvcnQgKHR5cGUg U0hPVyBORVQgZm9yIGZ1cnRoZXIgaW5mbykKKyBUZWxuZXQgS2VybWl0IE9wdGlvbgorIEhhcmR3 YXJlIGZsb3cgY29udHJvbAorIEV4dGVybmFsIFhZWk1PREVNIHByb3RvY29sIHN1cHBvcnQKKyBM YXRpbi0xIChXZXN0IEV1cm9wZWFuKSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uCisgTGF0aW4t MiAoRWFzdCBFdXJvcGVhbikgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgorIEN5cmlsbGljIChS dXNzaWFuLCBVa3JhaW5pYW4sIGV0YykgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgorIEdyZWVr IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24KKyBIZWJyZXcgY2hhcmFjdGVyLXNldCB0cmFuc2xh dGlvbgorIEphcGFuZXNlIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24KKyBVbmljb2RlIGNoYXJh Y3Rlci1zZXQgdHJhbnNsYXRpb24KKyBQc2V1ZG90ZXJtaW5hbCBjb250cm9sCisgUkVESVJFQ1Qg Y29tbWFuZAorIFJFU0VORCBjb21tYW5kCisgRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3Bs YXkKKyBDb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZworIFN0cmVhbWluZworIEF1dG9kb3du bG9hZAorCitNYWpvciBvcHRpb25hbCBmZWF0dXJlcyBub3QgaW5jbHVkZWQ6CisgTm8gS2VyYmVy b3MoVE0pIGF1dGhlbnRpY2F0aW9uCisgTm8gU1JQKFRNKSAoU2VjdXJlIFJlbW90ZSBQYXNzd29y ZCkgcHJvdG9jb2wKKyBObyBTZWN1cmUgU29ja2V0cyBMYXllciAoU1NMKSBwcm90b2NvbAorIE5v IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBwcm90b2NvbAorIE5vIGVuY3J5cHRpb24K KyBObyBYIFdpbmRvd3MgZm9yd2FyZGluZworCitIb3N0IGluZm86CisgTWFjaGluZTogICAgc3Vu NG0KKyBNb2RlbDogICAgICAodW5rbm93bikKKyBPUzogICAgICAgICBTdW5PUworIE9TIFJlbGVh c2U6IDQuMS4zX1UxCisgT1MgVmVyc2lvbjogNAorCitUYXJnZXQ6IHN1bm9zNDFnc2MKK0dDQyB2 ZXJzaW9uOiAyLjcuMgorQ29tcGlsZWQgRGVjIDMxIDE5OTkgMTA6Mzg6NTQsIG9wdGlvbnM6Cisg X19HTlVDX18gX19TVERDX18gX1BPU0lYX0pPQl9DT05UUk9MIF9TQ19KT0JfQ09OVFJPTCBBUlJB WVJFRkxFTj0xMDI0IEJJR0JVRk9LCisgQlJPV1NFUiBCU0Q0IENLX0FOU0lDIENLX0FQQyBDS19B VVRPREwgQ0tfQ1VSU0VTIENLX0ROU19TUlYgQ0tfRU5WSVJPTk1FTlQKKyBDS19GQVNUIENLX0xP R0lOIENLX01LRElSIENLX05BV1MgQ0tfUENUX0JBUiBDS19QRVJNUyBDS19SRUNBTEwgQ0tfUlRT Q1RTCisgQ0tfU1BFRUQgQ0tfVElNRVJTIENLX1RNUERJUiBDS19UVEdXU0laIENLX1RUWUZEIENL X1dSRUZSRVNIIENLRVhFQworIENLRkxPQVQ9ZG91YmxlIENLR0hOTEhPU1QgY2ttYXhmaWxlcz02 NCBDS01BWE9QRU49NjQgQ0tNQVhQQVRIPTEwMjMgQ0tSRUFMUEFUSAorIENLUkVHRVggQ0tTWVNM T0cgQ0tUVU5JTkcgQ01EQkw9MzI3NjMgQ01EREVQPTY0IENPTkdTUEQgRENNREJVRiBESVJFTlQg RFlOQU1JQworIEZORkxPQVQgRk9SREVQVEg9MzIgR0ZUSU1FUiBIQUREUkxJU1QgSERCVVVDUCBJ RkRFQlVHIElLU19PUFRJT04gSUtTREIKKyBJS1NEQ09ORiBJTkJVRlNJWkU9MzI3NjggSU5QQlVG U0laPTQwOTYgTUFDX01BWD0xNjM4NCBNQUNMRVZFTD0xMjggTUFYRERJUj0zMgorIE1BWEROVU1T PTQwOTUgTUFYR0VUUEFUSD0xMjggTUFYVEFLRT01NCBNQVhXTEQ9MTAyNDAwIE1TRU5ETUFYPTEw MjQgTkVUQ01ECisgTkVUQ09OTiBORVRQVFkgTk9LVkVSQlMgTk9TRVRCVUYgT0JVRlNJWkU9MzI3 NjggUEFSU0VOU0UgUEFUVEVSTlMgUElQRVNFTkQKKyBSRU5BTUUgUkxPR0NPREUgU0FWRURVSUQg U0VMRUNUIFNJR19WIFNPTF9TT0NLRVQgc3BhcmMgU1RSRUFNSU5HIHN1biBTVU5PUzQKKyBTWVNU SU1FSCBUQ1BTT0NLRVQgVElNRUggVExPRyBUTkNPREUgVFRMRUJVRiBUVFNQRExJU1QgVUlEQlVG TEVOPTI1NiBVTklYCisgVU5QUkVGSVhaRVJPIFVTRV9MU1RBVCBVU0VfTUVNQ1BZIFZOQU1MPTQw OTYgV0hBVEFNSSBYRlJDQU4gWl9NQVhDSEFOPTQ2Cisgel9tYXhjaGFuPTQ2IFpYUkVXSU5ECisK KyBieXRlIG9yZGVyOiBiaWcgZW5kaWFuCisKKyBzaXplb2ZzOiBpbnQ9NCBsb25nPTQgc2hvcnQ9 MiBjaGFyPTEgY2hhcio9NCBmbG9hdD00IGRvdWJsZT04CisKKyBmbG9hdGluZy1wb2ludDogcHJl Y2lzaW9uPTE2IHJvdW5kaW5nPTEKKworICAgV2l0aG91dCBnb2luZyBpbnRvIGRldGFpbCBhYm91 dCB3aGF0IGFsbCB0aGUgbm90YXRpb24gbWVhbnMsIG5vdGljZSBhCisgICBjb3VwbGUgdGhpbmdz OgorCisgICAgICogVGhlIE9wdGlvbnMgc2VjdGlvbiBzaG93cyBzeW1ib2xzICgibWFjcm9zIikg aW4gZWZmZWN0IGR1cmluZworICAgICAgIGNvbXBpbGF0aW9uLCB0b2dldGhlciB3aXRoIHRoZWly IHZhbHVlcyAoZm9yIHRob3NlIHRoYXQgaGF2ZQorICAgICAgIHZhbHVlcykuIFRoZSBvcHRpb25z IGFyZSBsaXN0ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHRvIG1ha2UgYW55CisgICAgICAgcGFy dGljdWxhciBvcHRpb24gZWFzaWVyIHRvIGZpbmQuCisgICAgICogTUFYV0xEIGlzIHRoZSBtYXhp bXVtIG51bWJlciBvZiBmaWxlcyB0aGF0IGEgd2lsZGNhcmQgY2FuIGV4cGFuZAorICAgICAgIHRv LgorICAgICAqIEFueXRoaW5nIHN0YXJ0aW5nIHdpdGggIk5PIiBpcyBhIGZlYXR1cmUgKG9yIHNv bWV0aGluZyBvdGhlciB0aGFuIGEKKyAgICAgICBmZWF0dXJlKSB0aGF0IGhhcyBiZWVuIGRlbGli ZXJhdGVseSAiY29tcGlsZWQgb3V0Iiwgb3Igb21pdHRlZC4KKyAgICAgKiBJbXBvcnRhbnQgaXRl bXMgZm9yIHNjcmlwdCB3cml0ZXJzIGluY2x1ZGU6IENNREJMPTMyNzYzICh0aGUgc2l6ZQorICAg ICAgIG9mIHRoZSBjb21tYW5kIGJ1ZmZlciBhbmQgdGhlcmVmb3JlIHRoZSBtYXhpbXVtIGxlbmd0 aCBmb3IgYSBtYWNybworICAgICAgIG9yIHZhcmlhYmxlIGRlZmluaXRpb247IENNRERFUD02NCAo dGhlIGxpbWl0IG9uIHJlY3Vyc2lvbiBkZXB0aCk7CisgICAgICAgRk9SREVQVEg9MzIgKHRoZSBu ZXN0aW5nIGxpbWl0IG9uIEZPUiBsb29wcyk7IElOQlVGU0laRT0zMjc2OCAodGhlCisgICAgICAg c2l6ZSBvZiB0aGUgSU5QVVQgY29tbWFuZCBjaXJjdWxhciBidWZmZXIpOyBNQUNfTUFYPTE2Mzg0 ICh0aGUKKyAgICAgICBtYXhpbXVtIG51bWJlciBvZiBtYWNyb3MpLCBldGMuCisKKyAgIFNlZSB0 aGUgWzM4M11ja2NjZmcudHh0IGZpbGUgZm9yIGRldGFpbHMuCisKKzEuMjIuIEdlbmVyYWxpemVk IEZpbGUgSW5wdXQgYW5kIE91dHB1dAorCisgICBDLUtlcm1pdCA3LjAgYWRkcyBhIG5ldyBnZW5l cmFsaXplZCBJL08gc3lzdGVtIGZvciBzdHJlYW0gZmlsZXMsCisgICBhdWdtZW50aW5nIChhbmQg dG8gc29tZSBleHRlbnQsIG92ZXJsYXBwaW5nIHdpdGgpIHRoZSBvbGRlciBPUEVOLCBSRUFELAor ICAgV1JJVEUsIGFuZCBDTE9TRSBjb21tYW5kcy4gSW4gdGhlIG5ldyBmaWxlIGkvbyBzeXN0ZW0s IHdoaWNoIGNhbiBiZQorICAgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIHRoZSBvbGQgb25lLCBh bGwgY29tbWFuZHMgYXJlIGdyb3VwZWQgdG9nZXRoZXIKKyAgIHVuZGVyIHRoZSBuZXcgRklMRSBr ZXl3b3JkLCBhbmQgc29tZSByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzCisgICBhcmUg YWRkZWQuCisKKzEuMjIuMS4gV2h5IEFub3RoZXIgSS9PIFN5c3RlbT8KKworICAgVGhlIHdlbGwt a25vd24gTE9HLCBPUEVOLCBSRUFELCBXUklURSwgYW5kIENMT1NFIGNvbW1hbmRzIGhhdmUgdGhl CisgICBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgICAgMS4gT25seSBvbmUgUkVBRCBmaWxl IGFuZCBvbmUgV1JJVEUgZmlsZSBjYW4gYmUgb3BlbiBhdCBhIHRpbWUuCisgICAgMi4gVGhlIFJF QUQgYW5kIFdSSVRFIGNvbW1hbmRzIGFyZSBzdHJpY3RseSBsaW5lIG9yaWVudGVkLgorICAgIDMu IFRoZXNlIGNvbW1hbmRzIGNhbiBub3QgYmUgdXNlZCB3aXRoIGJpbmFyeSBmaWxlcy4KKyAgICA0 LiBUaGV5IGRvIG5vdCBzdXBwb3J0IHJlYWQvd3JpdGUgYWNjZXNzIG9yIHJhbmRvbSBhY2Nlc3Mu CisgICAgNS4gVGhlIHN5bnRheCBpcyBhIGJpdCBjb3VudGVyaW50dWl0aXZlIGZvciBwcm9ncmFt bWVycy4KKworICAgVGhlIG5ldyBmaWxlIGkvbyBzeXN0ZW0gYWxsb3dzIG11bHRpcGxlIGZpbGVz IHRvIGJlIG9wZW4gYXQgb25jZSwgaW4KKyAgIGFueSBkZXNpcmVkIGNvbWJpbmF0aW9uIG9mIG1v ZGVzIChyZWFkL3dyaXRlL2FwcGVuZCkgc3VwcG9ydGVkIGJ5IHRoZQorICAgb3BlcmF0aW5nIHN5 c3RlbSwgZm9yIGxpbmUsIGJsb2NrIChyZWNvcmQpLCBvciBjaGFyYWN0ZXIgaS9vLCBmb3IKKyAg IHNlcXVlbnRpYWwgb3IgcmFuZG9tIGFjY2VzcywgdXNpbmcgY29uc2lzdGVudCBzeW50YXggYW5k IGNvbnZlbnRpb25zLgorCisgICBUaGUgbmV3IHN5c3RlbSwgaG93ZXZlciwgZG9lcyBub3QgcmVw bGFjZSB0aGUgb2xkIG9uZSwgc2luY2UgdGhlIG9sZAorICAgc3lzdGVtIHN0aWxsIG11c3QgYmUg dXNlZCBmb3I6CisKKyAgICAxLiBUaGUgc2Vzc2lvbiwgcGFja2V0LCBkZWJ1ZywgdHJhbnNhY3Rp b24sIGFuZCBjb25uZWN0aW9uIGxvZ3MuCisgICAgMi4gUmVhZGluZyBhbmQgd3JpdGluZyBjb21t YW5kcyByYXRoZXIgdGhhbiBmaWxlcy4KKyAgICAzLiBFeGlzdGluZyBzY3JpcHRzLgorCisgICBU aGUgbmV3IHN5c3RlbSB3b3JrcyBvbmx5IHdpdGggcmVndWxhciBmaWxlcywgbm90IHdpdGggY29t bWFuZHMgb3IKKyAgIHBpcGVzIG9yIG1haWxib3hlcyBvciBwc2V1ZG90ZXJtaW5hbHMuIE5vIHNw ZWNpYWwgcHJvdmlzaW9ucyBhcmUgbWFkZQorICAgaW4gdGhlIEZJTEUgY29tbWFuZHMgZm9yIGhh bmRsaW5nIGRldmljZXMgb3IgbmV0d29yayBjb25uZWN0aW9ucywgbm9yCisgICBmb3IgcHJldmVu dGluZyB5b3UgZnJvbSB0cnlpbmcgdG8gb3BlbiB0aGVtOyBpZiB0aGUgdW5kZXJseWluZworICAg b3BlcmF0aW5nIHN5c3RlbSB0cmVhdHMgdGhlbSBsaWtlIHJlZ3VsYXIgc3RyZWFtIGRpc2sgZmls ZXMsIHRoZSBGSUxFCisgICBjb21tYW5kcyAoZXhjZXB0LCBvZiBjb3Vyc2UgU0VFSywgUkVXSU5E LCBhbmQgQ09VTlQpIG1pZ2h0IHdvcmsgd2l0aAorICAgdGhlbS4gKEluIEMgcHJvZ3JhbW1pbmcg dGVybXMsIHRoZSBGSUxFIGNvbW1hbmRzIGFyZSwgYXQgcHJlc2VudCwKKyAgIG5vdGhpbmcgbW9y ZSB0aGFuIGEgZnJvbnQgZW5kIHRvIGZvcGVuKCkgLyBmcmVhZCgpIC8gZndyaXRlKCkgLworICAg ZmNsb3NlKCkgYW5kIGZyaWVuZHMsIHdoaWNoIGFyZSBhIHBvcnRhYmxlIEFQSSB0byBzZXF1ZW50 aWFsIGZpbGVzLCBidXQKKyAgIHRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUgZm9yIHBs YXRmb3JtcyBsaWtlIFZNUyBhbmQgVk9TIHRoYXQKKyAgIGhhdmUgbW9yZSBjb21wbGljYXRlZCBm aWxlIHN5c3RlbXMuKQorCisgICBEZWZpbml0aW9uczoKKworICAgQ2hhbm5lbAorICAgICAgICAg IEEgbnVtYmVyIGFzc2lnbmVkIHRvIGEgZmlsZSB3aGVuIGl0IGlzIG9wZW5lZCwgYnkgd2hpY2gg aXQgbXVzdAorICAgICAgICAgIGJlIHJlZmVycmVkIHRvIGluIGFsbCBpbnB1dC9vdXRwdXQgb3Bl cmF0aW9ucy4KKworICAgUmVhZC9Xcml0ZSBQb2ludGVyCisgICAgICAgICAgVGhlIGN1cnJlbnQg cG9zaXRpb24gaW4gYW4gb3BlbiBmaWxlLCBleHByZXNzZWQgYXMgdGhlIDAtYmFzZWQKKyAgICAg ICAgICBieXRlIGNvdW50IGZyb20gdGhlIGJlZ2lubmluZy4KKworMS4yMi4yLiBUaGUgRklMRSBD b21tYW5kCisKKyAgIEZJTEUga2V5d29yZCBbIHN3aXRjaGVzIF0gY2hhbm5lbCBbIGRhdGEgXQor ICAgICAgICAgIFRoZSBrZXl3b3JkIHNwZWNpZmllcyB0aGUgZnVuY3Rpb246IEZJTEUgT1BFTiwg RklMRSBSRUFELCBGSUxFCisgICAgICAgICAgV1JJVEUsIEZJTEUgQ0xPU0UsIGV0Yy4gRm9yIGNv bnZlbmllbmNlIChhbmQgZm9yIGZhbWlsaWFyaXR5IHRvCisgICAgICAgICAgQyBwcm9ncmFtbWVy cyksIHRoZSB0d28td29yZCBGSUxFIGNvbW1hbmRzIGNhbiBiZSBzaG9ydGVuZWQgdG8KKyAgICAg ICAgICB0aGUgc2luZ2xlIHdvcmRzIEZPUEVOLCBGUkVBRCwgRldSSVRFLCBGQ0xPU0UsIGFuZCBz byBvbi4KKyAgICAgICAgICBTd2l0Y2hlcyBhcmUgb3B0aW9uYWwsIGFuZCBtb2RpZnkgb3IgYW1w bGlmeSB0aGUgcmVxdWVzdGVkIGZpbGUKKyAgICAgICAgICBmdW5jdGlvbi4KKworICAgQXMgaW4g QywgRm9ydHJhbiwgYW5kIG90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcywgb3BlbiBmaWxlcyBh cmUKKyAgIHJlZmVycmVkIHRvIGJ5ICJjaGFubmVscyIsIGludGVnZXJzIHN1Y2ggYXMgMCwgMSwg MiwgMywgYW5kIHNvIG9uLiBBCisgICBjaGFubmVsIG51bWJlciBpcyBhc3NpZ25lZCB3aGVuIHlv dSBvcGVuIGEgZmlsZS4gVGhlIG51bWJlciBvZgorICAgYXZhaWxhYmxlIGNoYW5uZWxzIGRlcGVu ZHMgb24gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSwgYW5kIGNhbgorICAgYmUgc2Vl biBpbiB0aGUgdmFyaWFibGU6CisKKyAgXHYoZl9tYXgpCisKKyAgIG9yIGJ5IGdpdmluZyB0aGUg RklMRSBMSVNUIChGTElTVCkgY29tbWFuZC4gQ2hhbm5lbHMgYXJlIGRpc2N1c3NlZCBpbgorICAg Z3JlYXRlciBkZXRhaWwgaW4gWzM4NF1TZWN0aW9uIDEuMjIuNC4KKworICAgRklMRSBjb21tYW5k IGVycm9ycyBjYW4gYmUgY2F1Z2h0IHdpdGggSUYgRkFJTCBhZnRlciB0aGUgRklMRSBjb21tYW5k LgorICAgSW4gYWRkaXRpb24sIHRoZSBcdihmX2Vycm9yKSB2YXJpYWJsZSBpcyBzZXQgdG8gdGhl IGNvbXBsZXRpb24gY29kZSBvZgorICAgdGhlIGNvbW1hbmQ6IDAgaWYgbm8gZXJyb3IsIG9yIGEg bmVnYXRpdmUgbnVtYmVyIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAgIFRoZSBlcnJvciBjb2Rl cyBhcmUgbGlzdGVkIGluIFszODVdU2VjdGlvbiAxLjIyLjUuCisKKyAgIFRoZSBjb21tYW5kIHRv IG9wZW4gYSBmaWxlIGlzOgorCisgICBGSUxFIE9QRU4gWyBzd2l0Y2hlcyBdIHZhcmlhYmxlIGZp bGVuYW1lCisgICAgICAgICAgT3BlbnMgYSBmaWxlIGZvciB0aGUgdHlwZSBvZiBhY2Nlc3Mgc3Bl Y2lmaWVkIGJ5IHRoZSBzd2l0Y2hlcywKKyAgICAgICAgICBvciBmb3IgcmVhZC1vbmx5IGFjY2Vz cyBpZiBubyBzd2l0Y2hlcyBhcmUgZ2l2ZW4uIFVwb24gc3VjY2VzcywKKyAgICAgICAgICBhIGNo YW5uZWwgbnVtYmVyIGlzIGFzc2lnbmVkIHRvIHRoaXMgZmlsZSBhbmQgc3RvcmVkIGluIHRoZQor ICAgICAgICAgIGdpdmVuIHZhcmlhYmxlIHNvIHlvdSBjYW4gcmVmZXIgdG8gdGhlIG9wZW4gZmls ZSBpbiBzdWJzZXF1ZW50CisgICAgICAgICAgaS9vIGNvbW1hbmRzLiBJZiB0aGUgZmlsZSBjYW4g bm90IGJlIG9wZW5lZCwgdGhlIEZJTEUgT1BFTgorICAgICAgICAgIGNvbW1hbmQgZmFpbHMuIFN5 bm9ueW06IEZPUEVOLgorCisgICBUaGUgRklMRSBPUEVOIHN3aXRjaGVzIGFyZToKKworICAgL1JF QUQKKyAgICAgICAgICBPcGVuIHRoZSBmaWxlIGZvciByZWFkIGFjY2Vzcy4gSWYgbm8gc3dpdGNo ZXMgYXJlIGdpdmVuLCAvUkVBRAorICAgICAgICAgIGlzIGFzc3VtZWQuIElmIHRoZSBmaWxlIGRv ZXMgbm90IGV4aXN0IG9yIGNhbid0IGJlIG9wZW5lZCBmb3IKKyAgICAgICAgICByZWFkIGFjY2Vz cywgdGhlIEZJTEUgT1BFTiBjb21tYW5kIGZhaWxzLgorCisgICAvV1JJVEUKKyAgICAgICAgICBB bGxvdyB3cml0aW5nLiBJZiBhIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cywg aXQgaXMKKyAgICAgICAgICBvdmVyd3JpdHRlbiB1bmxlc3MgL1JFQUQgb3IgL0FQUEVORCBpcyBh bHNvIGluY2x1ZGVkLiBJZiBhIGZpbGUKKyAgICAgICAgICBvZiB0aGUgZ2l2ZW4gbmFtZSBkb2Vz IG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZC4KKworICAgL0FQUEVORAorICAgICAgICAgIEVxdWl2 YWxlbnQgdG8gL1dSSVRFLCBleGNlcHQgdGhhdCBpZiB0aGUgZmlsZSBleGlzdHMsIGl0IGlzIG5v dAorICAgICAgICAgIGRlc3Ryb3llZC4gVGhlIHJlYWQvd3JpdGUgcG9pbnRlciBpcyBzZXQgdG8g dGhlIGVuZCBvZiB0aGUgZmlsZSwKKyAgICAgICAgICBzbyB1bmxlc3MgeW91IGNoYW5nZSBpdCB3 aXRoIEZJTEUgU0VFSyBvciBSRVdJTkQgKHNlZSBiZWxvdyksCisgICAgICAgICAgdGhlIGZpcnN0 IEZJTEUgV1JJVEUgY29tbWFuZCBhZGRzIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUsCisgICAgICAg ICAgcHJlc2VydmluZyB3aGF0IHdhcyB0aGVyZSBhbHJlYWR5LiBJZiAvV1JJVEUgaXMgYWxzbyBn aXZlbiwgaXQKKyAgICAgICAgICBpcyBpZ25vcmVkLgorCisgICAvQklOQVJZCisgICAgICAgICAg T3BlbiB0aGUgZmlsZSBpbiAiYmluYXJ5IiBtb2RlLCByYXRoZXIgdGhhbiB0ZXh0IG1vZGUuIFRo aXMKKyAgICAgICAgICBzd2l0Y2ggaXMgbWVhbmluZ2xlc3MgKGJ1dCBzdGlsbCBjYW4gYmUgdXNl ZCkgaW4gVU5JWC4gSW4gVk1TLAorICAgICAgICAgIFdpbmRvd3MsIGFuZCBPUy8yLCBpdCBpbmhp Yml0cyBlbmQtb2YtbGluZSBwcm9jZXNzaW5nIGFuZAorICAgICAgICAgIGNvbnZlcnNpb24sIGFu ZCBzbyBzaG91bGQgYmUgdXNlZCBmb3IgYmluYXJ5IGZpbGVzIGFuZC9vciBmaWxlcworICAgICAg ICAgIHRoYXQgYXJlIHRvIGJlIGFjY2Vzc2VkIGluIHJlY29yZCBvciBjaGFyYWN0ZXIgbW9kZSBy YXRoZXIgdGhhbgorICAgICAgICAgIGxpbmUgYnkgbGluZS4KKworICAgVGhlIHZhcmlhYmxlIGZv ciB0aGUgY2hhbm5lbCBudW1iZXIgY2FuIGJlIGFueSBraW5kIG9mIHZhcmlhYmxlOiB0aGUKKyAg IFwleCBraW5kLCBhIG1hY3JvIG5hbWUsIG9yIGFuIGFycmF5IGVsZW1lbnQuIEJ1dCBpdCBtdXN0 IGJlIGEgdmFyaWFibGUsCisgICBub3QgYSBudW1iZXIgLS0gQy1LZXJtaXQgYXNzaWducyB0aGUg Y2hhbm5lbCBudW1iZXI7IHlvdSBjYW4ndCB0ZWxsIGl0CisgICB3aGF0IG51bWJlciB0byB1c2Uu CisKKyAgIEV4YW1wbGU6CisKKyAgRklMRSBPUEVOIFwlYyBvb2ZhLnR4dCAgICAgICAgICAgICAg ICAgIDsgT3BlbiBvb2ZhLnR4dCBmb3IgcmVhZGluZy4KKyAgSUYgRkFJTCBleGl0IDEgQ2FuJ3Qg b3BlbiBvb2ZhLnR4dCAgICAgIDsgQWx3YXlzIGNoZWNrIHRvIHNlZSBpZiBpdCB3b3JrZWQuCisg IEVDSE8gb29mYS50eHQ6IGNoYW5uZWwgPSBcJWMKKworICAgSWYgdGhlIGZpbGUgb29mYS50eHQg aXMgb3BlbmVkIHN1Y2Nlc3NmdWxseSwgYSBjaGFubmVsIG51bWJlciBpcworICAgYXNzaWduZWQg dG8gdGhlIHZhcmlhYmxlIFwlYy4gSGVyZSdzIGFub3RoZXIgZXhhbXBsZSB1c2luZyBhIG1hY3Jv IG5hbWUKKyAgIGZvciB0aGUgY2hhbm5lbCBudW1iZXI6CisKKyAgRklMRSBPUEVOIGNoYW5uZWwg b29mYS50eHQgICAgICAgICAgICAgIDsgT3BlbiBvb2ZhLnR4dCBmb3IgcmVhZGluZy4KKyAgSUYg U1VDQ0VTUyBFQ0hPIG9vZmEudHh0OiBjaGFubmVsID0gXG0oY2hhbm5lbCkKKworICAgU3dpdGNo ZXMgY2FuIGJlIGNvbWJpbmVkIHdoZW4gaXQgbWFrZXMgc2Vuc2UgYW5kIHRoZSB1bmRlcmx5aW5n CisgICBvcGVyYXRpbmcgc3lzdGVtIGFsbG93cyBpdC4gRm9yIGV4YW1wbGUsIHRvIG9wZW4gYSBm aWxlIGluIGJpbmFyeSBtb2RlCisgICBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyAoc29tZXRpbWVz IGNhbGxlZCAidXBkYXRlIik6CisKKyAgRklMRSBPUEVOIC9SRUFEIC9XUklURSAvQklOQVJZIFwl YyBidWRnZXQuZGIKKworICAgU29tZSBjb21iaW5hdGlvbnMgbWlnaHQgYmUgYWxsb3dlZCwgb3Ro ZXJzIG5vdC4gRm9yIGV4YW1wbGUgL1JFQUQKKyAgIC9BUFBFTkQgd2lsbCB1c3VhbGx5IG5vdCBi ZSBhbGxvd2VkLiAvV1JJVEUgL0FQUEVORCBpcyB0cmVhdGVkIGFzCisgICAvQVBQRU5ELgorCisg ICBBIG1ham9yIGFkdmFudGFnZSBvZiB0aGUgbmV3IHN5c3RlbSBvdmVyIHRoZSBvbGRlciBvbmUg aXMgdGhhdCB5b3UgY2FuCisgICBoYXZlIG11bHRpcGxlIGZpbGVzIG9wZW4gYXQgb25jZS4gU3Vw cG9zZSwgZm9yIGV4YW1wbGUsIHRoYXQgeW91IHdhbnQKKyAgIHRvIG9wZW4gYWxsIHRoZSBmaWxl cyBpbiBhIGNlcnRhaW4gZGlyZWN0b3J5IGF0IG9uY2U6CisKKyAgLlwlbiA6PSBcZmZpbGVzKC91 c3Ivb2xnYSosJmYpICAgICAgICAgIDsgR2V0IGZpbGUgbGlzdCBpbnRvIGFycmF5LgorICBpZiAo ID4gXCVuIFx2KGZfbWF4KSApIHsgICAgICAgICAgICAgICAgOyBNYWtlIHN1cmUgdGhlcmUgYXJl bid0IHRvbyBtYW55LgorICAgICAgZXhpdCAxIHtcdihkaXIpOiBcJW4gPSBUb28gbWFueSBmaWxl c30KKyAgfQorICBkZWNsYXJlIFwmY1tcJW5dICAgICAgICAgICAgICAgICAgICAgICAgOyBNYWtl IGFycmF5IGZvciBjaGFubmVsIG51bWJlcnMuCisgIGZvciBcJWkgMSBcJW4gMSB7ICAgICAgICAg ICAgICAgICAgICAgICA7IExvb3AgdG8gb3BlbiBldmVyeSBmaWxlLi4uCisgICAgICBmaWxlIG9w ZW4gXCZjW1wlaV0gXCZmW1wlaV0gICAgICAgICA7IFRyeSB0byBvcGVuIHRoaXMgb25lCisgICAg ICBpZiBmYWlsIGV4aXQgMSBPcGVuIGVycm9yOiBcJmZbXCVpXSA7IENoZWNrIGZvciBmYWlsdXJl CisgIH0KKworICAgSWYgdGhpcyBsb29wIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIHRoZSBcJmNb XSBhcnJheSB3aWxsIGNvbnRhaW4gXCVuCisgICBjaGFubmVsIG51bWJlcnMgb2Ygb3BlbiBmaWxl cyBpbiBlbGVtZW50cyAxIHRocm91Z2ggXCVuLgorCisgICBBbnkgZmlsZSB0aGF0IHlvdSBvcGVu IHdpdGggRklMRSBPUEVOIHN0YXlzIG9wZW4gdW50aWwgS2VybWl0IGV4aXRzLCBvcgorICAgeW91 IGNsb3NlIGl0IGV4cGxpY2l0bHkuIFRoZSBjb21tYW5kIHRvIGNsb3NlIGEgZmlsZSBpczoKKwor ICAgRklMRSBDTE9TRSB7IEFMTCwgY2hhbm5lbCB9CisgICAgICAgICAgSWYgYSBjaGFubmVsIG51 bWJlciBpcyBnaXZlbiBhbmQgdGhlIGNoYW5uZWwgcmVmZXJzIHRvIGFuIG9wZW4KKyAgICAgICAg ICBmaWxlLCB0aGUgZmlsZSBpcyBjbG9zZWQgYW5kIHRoZSBjaGFubmVsIGlzIGZyZWVkIGZvciBy ZXVzZTsgaWYKKyAgICAgICAgICB0aGUgY2hhbm5lbCBkb2VzIG5vdCByZWZlciB0byBhbiBvcGVu IGZpbGUsIGFuIGVycm9yIG1lc3NhZ2UgaXMKKyAgICAgICAgICBwcmludGVkIGFuZCB0aGUgY29t bWFuZCBmYWlscy4gSWYgQUxMIGlzIHNwZWNpZmllZCBpbnN0ZWFkIG9mIGEKKyAgICAgICAgICBz cGVjaWZpYyBjaGFubmVsLCBhbGwgZmlsZXMgb3BlbmVkIHdpdGggRklMRSBPUEVOIGFyZSBjbG9z ZWQgYW5kCisgICAgICAgICAgaWYgYWxsIG9wZW4gZmlsZXMgd2VyZSBjbG9zZWQgc3VjY2Vzc2Z1 bGx5IChldmVuIGlmIG5vIGZpbGVzCisgICAgICAgICAgd2VyZSBvcGVuKSwgdGhlIGNvbW1hbmQg c3VjY2VlZHM7IGlmIGFueSBvcGVuIGZpbGUgY291bGQgbm90IGJlCisgICAgICAgICAgY2xvc2Vk LCB0aGUgY29tbWFuZCBmYWlsczsgaG93ZXZlciwgYWxsIG9wZW4gZmlsZXMgdGhhdCBjb3VsZCBi ZQorICAgICAgICAgIGNsb3NlZCBhcmUgc3RpbGwgY2xvc2VkLiBTeW5vbnltOiBGQ0xPU0UuCisK KyAgIEZJTEUgQ0xPU0UgbWlnaHQgZmFpbCBiZWNhdXNlLCBmb3IgZXhhbXBsZSwgdGhlIGRpc2sg ZmlsbGVkIHVwIG9yIGEKKyAgIHF1b3RhIHdhcyBleGNlZWRlZC4gRXhhbXBsZToKKworICBmb3Bl biAvd3JpdGUgXCVjIG5ldy50eHQgICAgICAgICAgICAgICAgOyBPcGVuIG5ldy50eHQgZm9yIHdy aXRpbmcuCisgIGlmIGZhaWwgZXhpdCAxICAgICAgICAgICAgICAgICAgICAgICAgICA7IENoZWNr IGZvciBlcnJvci4KKyAgZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsg Q2xvc2UgdGhlIGZpbGUgd2UganVzdCBvcGVuZWQuCisKKyAgIFRoaXMgY3JlYXRlcyBhIDAtbGVu Z3RoIGZpbGUgY2FsbGVkIG5ldy50eHQuCisKKyAgIE5vdGUgdGhhdCBGSUxFIE9QRU4gL1dSSVRF ICh3aXRob3V0IC9SRUFEIG9yIC9BUFBFTkQpIGFsd2F5cyBjcmVhdGVzIGEKKyAgIG5ldyBmaWxl LCBhbmQgdGhlcmVmb3JlIGRlc3Ryb3lzIGFueSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSB0aGF0 IG1pZ2h0CisgICBhbHJlYWR5IGV4aXN0IChhc3N1bWluZyB5b3UgaGF2ZSBwZXJtaXNzaW9uIHRv IGRlbGV0ZSBpdCkuIFRvIGF2b2lkCisgICBvdmVyd3JpdGluZyBleGlzdGluZyBmaWxlcywgc2lt cGx5IGNoZWNrIGZpcnN0OgorCisgIGlmIGV4aXN0IG5ldy50eHQgZXhpdCAxIHtGYXRhbCAtIG5l dy50eHQgYWxyZWFkeSBleGlzdHN9CisgIGZvcGVuIC93cml0ZSBcJWMgbmV3LnR4dAorICBpZiBm YWlsIC4uLgorCisgICBUaGUgbmV4dCB0d28gY29tbWFuZHMgZ2l2ZSBpbmZvcm1hdGlvbiBhYm91 dCBvcGVuIGZpbGVzOgorCisgICBGSUxFIFNUQVRVUyBjaGFubmVsCisgICAgICAgICAgVGVsbHMg dGhlIG5hbWUgb2YgdGhlIGZpbGUsIGlmIGFueSwgb3BlbiBvbiB0aGUgZ2l2ZW4gY2hhbm5lbAor ICAgICAgICAgIGFuZCB0aGUgc3dpdGNoZXMgaXQgd2FzIG9wZW5lZCB3aXRoLiBUaGUgcmVhZC93 cml0ZSBwb2ludGVyIGlzCisgICAgICAgICAgYWxzbyBzaG93bjsgdGhpcyBpcyB3aGVyZSB0aGUg bmV4dCByZWFkIG9yIHdyaXRlIHdpbGwgb2NjdXI7CisgICAgICAgICAgIltFT0ZdIiBpcyBzaG93 biBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgb3BlbiBmaWxlIGlzIHRoZQorICAgICAg ICAgIGVuZCAtLSBpLmUuIHRoZSBuZXh0IHJlYWQgd2lsbCBmYWlsIGlmIHRoZSBmaWxlIHdhcyBv cGVuZWQgaW4KKyAgICAgICAgICAvUkVBRCBtb2RlOyB0aGUgbmV4dCB3cml0ZSB3aWxsIGFkZCBt YXRlcmlhbCB0byB0aGUgZW5kLiBUaGUKKyAgICAgICAgICBjdXJyZW50IGxpbmUgbnVtYmVyICgw LWJhc2VkKSBpcyBhbHNvIHNob3duIGlmIGtub3duLiBUaGUgRklMRQorICAgICAgICAgIFNUQVRV UyBjb21tYW5kIHN1Y2NlZWRzIGlmIHRoZSBjaGFubmVsIGlzIG9wZW4sIGFuZCBmYWlscyBpZgor ICAgICAgICAgIHRoZXJlIGlzIG5vIG9wZW4gZmlsZSBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCwgb3Ig aWYgdGhlIGNoYW5uZWwKKyAgICAgICAgICBudW1iZXIgaXMgaW52YWxpZCBvciBvdXQgb2YgcmFu Z2UuIFN5bm9ueW06IEZTVEFUVVMuCisKKyAgIEZJTEUgTElTVAorICAgICAgICAgIExpc3RzIHRo ZSBjaGFubmVsIG51bWJlciBhbmQgbmFtZSBvZiBlYWNoIG9wZW4gZmlsZSwgYWxvbmcgd2l0aAor ICAgICAgICAgIGl0cyBPUEVOIG1vZGVzIChSLCBXLCBBLCBCLCBSVywgZXRjKSBhbmQgaXRzIGN1 cnJlbnQgcmVhZC93cml0ZQorICAgICAgICAgIHBvaW50ZXIgb3IgIltFT0ZdIiBpZiBpdCBpcyBh dCB0aGUgZW5kLiBBbHNvIHRlbGxzIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICBmaWxlcyBjdXJy ZW50bHkgb3BlbmVkIHdpdGggRklMRSBPUEVOLCBwbHVzIHRoZSBtYXhpbXVtIG51bWJlcgorICAg ICAgICAgIG9mIG9wZW4gZmlsZXMgYWxsb3dlZCBieSB0aGUgc3lzdGVtIGFuZCB0aGUgbWF4aW11 bSBudW1iZXIKKyAgICAgICAgICBhbGxvd2VkIGZvciBGSUxFIE9QRU4uIFN5bm9ueW06IEZMSVNU LgorCisgICBOZXh0IGNvbWUgdGhlIGNvbW1hbmRzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGZp bGVzOgorCisgICBGSUxFIFJFQUQgWyBzd2l0Y2hlcyBdIGNoYW5uZWwgWyB2YXJpYWJsZSBdCisg ICAgICAgICAgUmVhZHMgZGF0YSBmcm9tIHRoZSBmaWxlIG9uIHRoZSBnaXZlbiBjaGFubmVsIG51 bWJlciBpbnRvIHRoZQorICAgICAgICAgIHZhcmlhYmxlLCBpZiBvbmUgd2FzIGdpdmVuOyBpZiBu byB2YXJpYWJsZSB3YXMgZ2l2ZW4sIHRoZSByZXN1bHQKKyAgICAgICAgICBpcyBwcmludGVkIG9u IHRoZSBzY3JlZW4uIElNUE9SVEFOVDogVGhlIHZhcmlhYmxlIHNob3VsZAorICAgICAgICAgIG5v cm1hbGx5IGJlIGEgbWFjcm8gbmFtZSByYXRoZXIgdGhhbiBhIFwleCBvciBcJnhbXSB2YXJpYWJs ZSBpZgorICAgICAgICAgIHlvdSB3YW50IGJhY2tzbGFzaCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxl IHRvIGJlIHRha2VuIGxpdGVyYWxseQorICAgICAgICAgIChzZWUgcHAuNDA4LTQxMiBvZiBbMzg2 XVVzaW5nIEMtS2VybWl0IGZvciBhbiBleHBsYW5hdGlvbjsgeW91CisgICAgICAgICAgY2FuIGFs c28gcmVhZCBpbnRvIGEgXCV4IG9yIFwmeFtdIHZhcmlhYmxlLCBidXQgdGhlbiB5b3UgbXVzdAor ICAgICAgICAgIHJlbWVtYmVyIHRvIHByb3RlY3QgZnV0dXJlIHJlZmVyZW5jZXMgdG8gYnkgXGZj b250ZW50cygpIGlmIHlvdQorICAgICAgICAgIGRvbid0IHdhbnQgQy1LZXJtaXQgdG8gcHJvY2Vz cyBhbnkgYmFja3NsYXNoZXMgaXQgbWlnaHQKKyAgICAgICAgICBjb250YWluKS4gVGhlIGRlc2ly ZWQgYW1vdW50IG9mIGRhdGEgKGFjY29yZGluZyB0byB0aGUgc3dpdGNoZXMpCisgICAgICAgICAg aXMgcmVhZCBmcm9tIHRoZSBmaWxlIGF0IHRoZSBjdXJyZW50IHJlYWQvd3JpdGUgcG9pbnRlciwg YW5kCisgICAgICAgICAgdXBvbiBjb21wbGV0aW9uIHRoZSByZWFkL3dyaXRlIHBvc2l0aW9uIGlz IHVwZGF0ZWQgdG8gZmlyc3QgYnl0ZQorICAgICAgICAgIGFmdGVyIHRoZSBkYXRhIHRoYXQgd2Fz IHJlYWQsIG5vIG1hdHRlciB3aGF0IHN3aXRjaGVzIHdlcmUKKyAgICAgICAgICBnaXZlbi4gU3lu b255bTogRlJFQUQuCisKKyAgIEZJTEUgV1JJVEUgWyBzd2l0Y2hlcyBdIGNoYW5uZWwgdGV4dAor ICAgICAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gdGV4dCB0byB0aGUgZmlsZSBvbiB0aGUgZ2l2ZW4g Y2hhbm5lbCBudW1iZXIuCisgICAgICAgICAgVGhlIHRleHQsIG9mIGNvdXJzZSwgY2FuIGJlIGxp dGVyYWwgdGV4dCBvciBhIHZhcmlhYmxlLCBvciBhbnkKKyAgICAgICAgICBjb21iaW5hdGlvbi4g SWYgdGhlIHRleHQgbWlnaHQgY29udGFpbiBsZWFkaW5nIG9yIHRyYWlsaW5nCisgICAgICAgICAg c3BhY2VzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluIGJyYWNlcyBpZiB5b3Ugd2FudCB0byBwcmVz ZXJ2ZQorICAgICAgICAgIHRoZW0uIFN5bm9ueW06IEZXUklURS4KKworICAgQmVmb3JlIHByb2Nl ZWRpbmcsIGEgY2F1dGlvbiBhYm91dCB0aGUgTlVMIGNoYXJhY3Rlci4gQy1LZXJtaXQgaXMgc28K KyAgIG5hbWVkIGJlY2F1c2UgaXQgaXMgYSBLZXJtaXQgcHJvZ3JhbSB3cml0dGVuIGluIHRoZSBD IGxhbmd1YWdlLiBJbiBDLAorICAgY2hhcmFjdGVyIHN0cmluZ3MgYXJlIHJlcHJlc2VudGVkIGFz IGEgc2VxdWVuY2Ugb2Ygbm9uLU5VTCBieXRlcworICAgdGVybWluYXRlZCBieSBhIE5VTCBieXRl IChhIGJ5dGUgaW4gd2hpY2ggYWxsIGJpdHMgYXJlIDApLiBUaHVzIGEgQworICAgc3RyaW5nIGNh biBub3QgY29udGFpbiBOVUwgYnl0ZXM7IGl0IGFsd2F5cyBlbmRzIHdpdGggdGhlIGZpcnN0IE5V TAorICAgYnl0ZS4gQy1LZXJtaXQgdmFyaWFibGVzIGFyZSBpbXBsZW1lbnRlZCBhcyBDIHN0cmlu Z3MgYW5kIHRoZXJlZm9yZQorICAgY2FuJ3QgY29udGFpbiBOVUwgYnl0ZXMgZWl0aGVyLCBzbyB0 aGUgRklMRSBSRUFEIGFuZCBGSUxFIFdSSVRFCisgICBjb21tYW5kcyBkbyBub3QgaGFuZGxlIGZp bGVzIG9yIHN0cmluZ3MgdGhhdCBjb250YWluIE5VTCBieXRlcywgZXhjZXB0CisgICB3aGVuIHRo ZSAvQ0hBUkFDVEVSIHN3aXRjaCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBGSUxFIFJFQUQgb3IgV1JJ VEUKKyAgIGNvbW1hbmQsIG9yIHdoZW4gL0xQQUQ6MCBvciAvUlBBRDowIGlzIGdpdmVuIHdpdGgg dGhlIEZJTEUgV1JJVEUKKyAgIGNvbW1hbmQ7IHRoZXNlIHN3aXRjaGVzIGFyZSBleHBsYWluZWQg YmVsb3cuCisKKyAgIEFsc28gbm90ZSB0aGF0IEtlcm1pdCBjYW4gbm90IGJlIHVzZWQgcmVhZCBv ciB3cml0ZSBiaW5hcnkgbnVtYmVycyBpbgorICAgdGhlIG1hY2hpbmUncyBpbnRlcm5hbCBmb3Jt YXQgKGludGVnZXIgb3IgZmxvYXRpbmctcG9pbnQpOyBpbiBnZW5lcmFsLAorICAgbnVtYmVycyBj YW4gYmUgcHJvY2Vzc2VkIG9ubHkgd2hlbiByZXByZXNlbnRlZCBhcyBudW1lcmljIG9yCisgICBm bG9hdGluZy1wb2ludCBzdHJpbmdzLgorCisgICBGSUxFIFJFQUQgc3dpdGNoZXMgYXJlOgorCisg ICAvTElORQorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGEgbGluZSBvZiB0ZXh0IGlzIHRvIGJl IHJlYWQuIEEgbGluZSBpcyBkZWZpbmVkCisgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSB1bmRl cmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0ncyB0ZXh0LWZpbGUgZm9ybWF0LgorICAgICAgICAgIEZv ciBleGFtcGxlLCBpbiBVTklYIGEgbGluZSBpcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdXAg dG8KKyAgICAgICAgICBhbmQgaW5jbHVkaW5nIGEgbGluZWZlZWQsIG9yIHRoZSBlbmQgb2YgdGhl IGZpbGUsIHdoaWNoIGV2ZXIKKyAgICAgICAgICBjb21lcyBmaXJzdC4gVGhlIGxpbmUgdGVybWlu YXRvciAoaWYgYW55KSBpcyByZW1vdmVkIGJlZm9yZQorICAgICAgICAgIGFzc2lnbmluZyB0aGUg dGV4dCB0byB0aGUgdmFyaWFibGUuIElmIG5vIHN3aXRjaGVzIGFyZSBpbmNsdWRlZAorICAgICAg ICAgIHdpdGggdGhlIEZJTEUgUkVBRCBjb21tYW5kLCAvTElORSBpcyBhc3N1bWVkLiBOb3JtYWxs eSB0aGlzCisgICAgICAgICAgc3dpdGNoIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIGZpbGVzIG9w ZW5lZCBpbiAvQklOQVJZIG1vZGUgKGJ1dAorICAgICAgICAgIG5vdGhpbmcgcHJldmVudHMgaXQg ZWl0aGVyKS4KKworICAgL1NJWkU6bnVtYmVyCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgdGhl IGdpdmVuIG51bWJlciBvZiBieXRlcyAoY2hhcmFjdGVycykgaXMgdG8gYmUKKyAgICAgICAgICBy ZWFkLiBUaGUgYWN0dWFsIG51bWJlciBvZiBieXRlcyByZXR1cm5lZCB3aWxsIGJlIGxlc3MgaWYg dGhlCisgICAgICAgICAgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZCAob3IgYSBOVUwgYnl0ZSBpcyBl bmNvdW50ZXJlZCkuIEZvcgorICAgICAgICAgIGV4YW1wbGUsIGlmIGEgZmlsZSBpcyA1MTQgYnl0 ZXMgbG9uZywgRklMRSBSRUFEIC9TSVpFOjUxMgorICAgICAgICAgIHJldHVybnMgNTEyIGJ5dGVz IHRoZSBmaXJzdCB0aW1lIGFuZCAyIGJ5dGVzIHRoZSBzZWNvbmQgdGltZS4KKyAgICAgICAgICBG SUxFIFJFQUQgL1NJWkUgcHJvdmlkZXMgYSBraW5kIG9mICJyZWNvcmQgaS9vIiBmb3IgZmlsZXMg dGhhdAorICAgICAgICAgIGRvIG5vdCBuZWNlc3NhcmlseSBjb250YWluIGxpbmVzLiBUaGUgcmVz dWx0aW5nIGJsb2NrIG9mCisgICAgICAgICAgY2hhcmFjdGVycyBpcyBhc3NpZ25lZCB0byB0aGUg dmFyaWFibGUgd2l0aG91dCBhbnkgZWRpdGluZy4KKyAgICAgICAgICBTeW5vbnltOiAvQkxPQ0su CisKKyAgIC9DSEFSQUNURVIKKyAgICAgICAgICBFcXVpdmFsZW50IHRvIC9TSVpFOjEuIElmIEZJ TEUgUkVBRCAvQ0hBUiBzdWNjZWVkcyBidXQgdGhlCisgICAgICAgICAgdmFyaWFibGUgaXMgZW1w dHksIHRoaXMgaW5kaWNhdGVzIGEgTlVMIGJ5dGUgd2FzIHJlYWQuIFN5bm9ueW06CisgICAgICAg ICAgQllURS4KKworICAgRklMRSBXUklURSBzd2l0Y2hlcyBhcmU6CisKKyAgIC9MSU5FCisgICAg ICAgICAgU3BlY2lmaWVzIHRoYXQgYW4gYXBwcm9wcmlhdGUgbGluZSB0ZXJtaW5hdG9yIGlzIHRv IGJlIGFkZGVkIHRvCisgICAgICAgICAgdGhlIGVuZCBvZiB0aGUgdGV4dC4gSWYgbm8gc3dpdGNo ZXMgYXJlIGluY2x1ZGVkLCAvTElORSBpcworICAgICAgICAgIGFzc3VtZWQuCisKKyAgIC9TSVpF Om51bWJlcgorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0 ZXMgKGNoYXJhY3RlcnMpIGlzIHRvIGJlCisgICAgICAgICAgd3JpdHRlbi4gSWYgdGhlIGdpdmVu IHRleHQgaXMgbG9uZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLCBpdAorICAgICAgICAgIGlz IHRydW5jYXRlZDsgaWYgaXMgc2hvcnRlciwgaXQgaXMgcGFkZGVkIGFjY29yZGluZyAvTFBBRCBh bmQKKyAgICAgICAgICAvUlBBRCBzd2l0Y2hlcy4gU3lub255bTogL0JMT0NLLgorCisgICAvTFBB RFs6dmFsdWVdCisgICAgICAgICAgSWYgL1NJWkUgd2FzIGdpdmVuLCBidXQgdGhlIHRleHQgaXMg c2hvcnRlciB0aGFuIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgICBzaXplLCB0aGUgdGV4dCBpcyBw YWRkZWQgb24gdGhlIGxlZnQgd2l0aCBzdWZmaWNpZW50IGNvcGllcyBvZgorICAgICAgICAgIHRo ZSBjaGFyYWN0ZXIgd2hvc2UgQVNDSUkgdmFsdWUgaXMgZ2l2ZW4gdG8gd3JpdGUgdGhlIGdpdmVu CisgICAgICAgICAgbGVuZ3RoLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIDMyICh0aGUgY29k ZSBmb3IgU3BhY2UpIGlzCisgICAgICAgICAgdXNlZC4gVGhlIHZhbHVlIGNhbiBhbHNvIGJlIDAg dG8gd3JpdGUgdGhlIGluZGljYXRlZCBudW1iZXIgb2YKKyAgICAgICAgICBOVUwgYnl0ZXMuIElm IC9TSVpFIHdhcyBub3QgZ2l2ZW4sIHRoaXMgc3dpdGNoIGlzIGlnbm9yZWQuCisKKyAgIC9SUEFE Wzp2YWx1ZV0KKyAgICAgICAgICBMaWtlIExQQUQsIGJ1dCBwYWRzIG9uIHRoZSByaWdodC4KKwor ICAgL0NIQVJBQ1RFUgorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IG9uZSBjaGFyYWN0ZXIgc2hv dWxkIGJlIHdyaXR0ZW4uIElmIHRoZSB0ZXh0IGlzCisgICAgICAgICAgZW1wdHkgb3Igbm90IGdp dmVuLCBhIE5VTCBjaGFyYWN0ZXIgaXMgd3JpdHRlbjsgb3RoZXJ3aXNlIHRoZQorICAgICAgICAg IGZpcnN0IGNoYXJhY3RlciBvZiB0ZXh0IGlzIGdpdmVuLiBTeW5vbnltOiAvQllURS4KKworICAg L1NUUklORworICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHRoZSB0ZXh0IGlzIHRvIGJlIHdyaXR0 ZW4gYXMtaXMsIHdpdGggbm8KKyAgICAgICAgICB0ZXJtaW5hdG9yIGFkZGVkLgorCisgICBIZXJl J3MgYW4gZXhhbXBsZSBpbiB3aGljaCB3ZSBjb3B5IGEgdGV4dCBmaWxlIGxpbmUgYnkgbGluZToK KworICBmaWxlIG9wZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAgICAgICAgICAgOyBPcGVuIGlucHV0 IGZpbGUKKyAgaWYgZmFpbCBleGl0IDEgQ2FuJ3Qgb3BlbiBpbnB1dCBmaWxlICAgIDsgQ2hlY2sg dGhhdCBpdCdzIG9wZW4KKyAgZmlsZSBvcGVuIC93cml0ZSBcJWQgbmV3LnR4dCAgICAgICAgICAg IDsgT3BlbiBvdXRwdXQgZmlsZQorICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBvcGVuIG91dHB1dCBm aWxlICAgOyBDaGVjaworICB3aGlsZSB0cnVlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg OyBMb29wIHRvIGNvcHkgbGluZXMKKyAgICAgIGZpbGUgcmVhZCAvbGluZSBcJWMgbGluZSAgICAg ICAgICAgIDsgUmVhZCBhIGxpbmUKKyAgICAgIGlmIGZhaWwgYnJlYWsgICAgICAgICAgICAgICAg ICAgICAgIDsgQXNzdW1lIGZhaWx1cmUgPSBlbmQgb2YgZmlsZQorICAgICAgZmlsZSB3cml0ZSAv bGluZSBcJWQge1xtKGxpbmUpfSAgICAgOyBXcml0ZSB0aGUgbGluZSB0byBvdXRwdXQgZmlsZQor ICAgICAgaWYgZmFpbCBleGl0IDEgV3JpdGUgZmFpbHVyZSAgICAgICAgOyBGYWlsdXJlIGhlcmUg aXMgZmF0YWwKKyAgfQorICBmaWxlIGNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAg OyBDbG9zZSB0aGUgdHdvIGZpbGVzCisgIGZpbGUgY2xvc2UgXCVkCisKKyAgIE5vdGUgdGhhdCBz aW5jZSAvTElORSBpcyB0aGUgZGVmYXVsdCBmb3IgYm90aCBGSUxFIFJFQUQgYW5kIEZJTEUgV1JJ VEUsCisgICBpdCBjYW4gYmUgb21pdHRlZCBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHdo ZXJlIHdlIGFsc28gdXNlIHRoZQorICAgc2hvcnQgbmFtZXMgZm9yIHRoZSBGSUxFIGNvbW1hbmRz LgorCisgIGZvcGVuIC9yZWFkIFwlYyBvb2ZhLnR4dCAgICAgICAgICAgICAgICA7IE9wZW4gaW5w dXQgZmlsZQorICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBvcGVuIGlucHV0IGZpbGUgICAgOyBDaGVj ayB0aGF0IGl0J3Mgb3BlbgorICBmb3BlbiAvd3JpdGUgXCVkIG5ldy50eHQgICAgICAgICAgICAg ICAgOyBPcGVuIG91dHB1dCBmaWxlCisgIGlmIGZhaWwgZXhpdCAxIENhbid0IG9wZW4gb3V0cHV0 IGZpbGUgICA7IENoZWNrCisgIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IExvb3AgdG8gY29weSBsaW5lcworICAgICAgZnJlYWQgXCVjIGxpbmUgICAgICAgICAgICAg ICAgICAgICAgOyBSZWFkIGEgbGluZQorICAgICAgaWYgZmFpbCBicmVhayAgICAgICAgICAgICAg ICAgICAgICAgOyBBc3N1bWUgZmFpbHVyZSA9IGVuZCBvZiBmaWxlCisgICAgICBmd3JpdGUgXCVk IHtcbShsaW5lKX0gICAgICAgICAgICAgICA7IFdyaXRlIHRoZSBsaW5lIHRvIG91dHB1dCBmaWxl CisgICAgICBpZiBmYWlsIGV4aXQgMSBXcml0ZSBmYWlsdXJlICAgICAgICA7IEZhaWx1cmUgaGVy ZSBpcyBmYXRhbAorICB9CisgIGZjbG9zZSBcJWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IENsb3NlIHRoZSB0d28gZmlsZXMKKyAgZmNsb3NlIFwlZAorCisgICBIZXJlJ3MgdGhlIHNh bWUgZXhhbXBsZSB1c2luZyAicmVjb3JkIGkvbyIgKHRoZSBvcGVuIGFuZCBjbG9zZQorICAgc2Vx dWVuY2VzIGFyZSBhcmUgb21pdHRlZCBzaW5jZSB0aGV5IGFyZSB0aGUgc2FtZSBhcyBhYm92ZSku IFRoZSByZXN1bHQKKyAgIGlzIHRoZSBzYW1lLCBidXQgZXhlY3V0aW9uIGlzIG11Y2ggZmFzdGVy OgorCisgIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvb3AgdG8g Y29weSBibG9ja3MKKyAgICAgIGZyZWFkIC9zaXplOjUxMiBcJWMgYmxvY2sgICAgICAgICAgIDsg UmVhZCBhIGJsb2NrIGludG8gXCVhCisgICAgICBpZiBmYWlsIGJyZWFrICAgICAgICAgICAgICAg ICAgICAgICA7IEFzc3VtZSBmYWlsdXJlID0gZW5kIG9mIGZpbGUKKyAgICAgIGZ3cml0ZSAvc3Ry aW5nIFwlZCB7XG0oYmxvY2spfSAgICAgIDsgV3JpdGUgdGhlIGJsb2NrIHRvIG91dHB1dCBmaWxl CisgICAgICBpZiBmYWlsIGV4aXQgMSBXcml0ZSBmYWlsdXJlICAgICAgICA7IEZhaWx1cmUgaGVy ZSBpcyBmYXRhbAorICB9CisKKyAgIEFsdGhvdWdoIHJlY29yZCBpL28gaXMgZmFzdGVyLCBpdCBz aG91bGQgbm90IGJlIHVzZWQgaW4gbGluZS1vcmllbnRlZAorICAgYXBwbGljYXRpb25zLCBzaW5j ZSBpdCByZXR1cm5zIGFyYml0cmFyeSBjaHVua3Mgb2YgdGhlIGZpbGUgdG8geW91cgorICAgc2Ny aXB0LCByYXRoZXIgdGhhbiBsaW5lcy4gSW4gdGhpcyBleGFtcGxlLCBGV1JJVEUgL1NUUklORyBp cyB1c2VkCisgICByYXRoZXIgdGhhbiBGV1JJVEUgL1NJWkU6NTEyIHRvIGF2b2lkIHRoZSBsYXN0 IG91dHB1dCBibG9jayBiZWluZworICAgcGFkZGVkIGJleW9uZCB0aGUgb3JpZ2luYWwgZmlsZSdz IGxlbmd0aC4KKworICAgQSBmaWxlIGNhbiBhbHNvIGJlIGNvcGllZCBjaGFyYWN0ZXIgYnkgY2hh cmFjdGVyLCBidXQgdGhpcyBpcyBtdWNoCisgICBzbG93ZXIgdGhhbiBsaW5lIGkvbyBhbmQgVkVS WSBtdWNoIHNsb3dlciB0aGFuIGJsb2NrIGkvbzoKKworICB3aGlsZSB0cnVlIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOyBMb29wIHRvIGNvcHkgYmxvY2tzCisgICAgICBmcmVhZCAvY2hh ciBcJWMgYyAgICAgICAgICAgICAgICAgICA7IFJlYWQgYSBjaGFyYWN0ZXIgaW50byBjCisgICAg ICBpZiBmYWlsIGJyZWFrICAgICAgICAgICAgICAgICAgICAgICA7IEFzc3VtZSBmYWlsdXJlID0g ZW5kIG9mIGZpbGUKKyAgICAgIGZ3cml0ZSAvY2hhciBcJWQge1xtKGMpfSAgICAgICAgICAgIDsg V3JpdGUgY2hhcmFjdGVyIHRvIG91dHB1dCBmaWxlCisgICAgICBpZiBmYWlsIGV4aXQgMSBXcml0 ZSBmYWlsdXJlICAgICAgICA7IEZhaWx1cmUgaXMgZmF0YWwKKyAgfQorCisgICBBbHRob3VnaCBj aGFyYWN0ZXIgaS9vIGlzIHNsb3csIGl0IGlzIHRoZSBvbmx5IHdheSB0byBwcm9jZXNzIGZpbGVz CisgICB0aGF0IGNvbnRhaW4gTlVMIGNoYXJhY3RlcnMgKGkuZS4gYnl0ZXMgY29tcG9zZWQgb2Yg b25seSB6ZXJvIGJpdHMpLiBJbgorICAgdGhlIGV4YW1wbGUgYWJvdmUsIHdoZW4gImZyZWFkIC9j aGFyIFwlYyBjIiByZXR1cm5zIGEgTlVMLCB0aGUgYworICAgdmFyaWFibGUgaXMgZW1wdHkuIEJ1 dCBzaW5jZSB0aGUgRlJFQUQgL0NIQVIgY29tbWFuZCBkaWQgbm90IGZhaWwsIHdlCisgICBrbm93 IHRoZSByZXN1bHQgd2FzIHJlYWxseSBhIE5VTC4gRldSSVRFIC9DSEFSLCB3aGVuIGdpdmVuIGFu IGVtcHR5CisgICB2YXJpYWJsZSAob3Igbm8gdmFyaWFibGUgYXQgYWxsKSB3cml0ZXMgYSBOVUwu IFRodXMgdGhlIGxvb3AgYWJvdmUgd2lsbAorICAgY29weSBhbnkgZmlsZSBhdCBhbGwgKHZlcnkg c2xvd2x5KS4gSW4gbm9uLWNvcHlpbmcgYXBwbGljYXRpb25zLCBOVUxzCisgICBhcmUgZGV0ZWN0 ZWQgbGlrZSB0aGlzOgorCisgIGZyZWFkIC9jaGFyIFwlYyBjCisgIGlmIGZhaWwgKGRvIHNvbWV0 aGluZykKKyAgaWYgbm90IGRlZiBjIChhIE5VTCBieXRlIHdhcyByZWFkKQorCisgICBGaW5hbGx5 IHNvbWUgYWR2YW5jZWQgZmlsZSBvcGVyYXRpb25zOgorCisgICBGSUxFIEZMVVNIIGNoYW5uZWwK KyAgICAgICAgICBGb3Igb3V0cHV0IGZpbGVzIG9ubHk6IGNvbW1pdHMgYWxsIHByZXZpb3VzIHdy aXRlcyB0byBkaXNrLCBpbgorICAgICAgICAgIGNhc2UgdGhlIGNvbXB1dGVyIHdhcyBidWZmZXJp bmcgdGhlbS4gU3lub255bTogRkZMVVNILgorCisgICBGSUxFIENPVU5UIFsgeyAvQllURVMsIC9M SU5FUywgL0xJU1QsIC9OT0xJU1QgfSBdIGNoYW5uZWwKKyAgICAgICAgICBCeSBkZWZhdWx0LCBv ciBpZiB0aGUgL0JZVEVTIHN3aXRjaCBpcyBnaXZlbiwgY291bnRzIHRoZSBieXRlcworICAgICAg ICAgIGluIHRoZSBmaWxlLCBpZiBhbnksIG9wZW4gb24gdGhlIGdpdmVuIGNoYW5uZWwuIElmIHRo ZSAvTElORVMKKyAgICAgICAgICBzd2l0Y2ggaXMgZ2l2ZW4sIGNvdW50cyBsaW5lcyBpbiB0aGUg ZmlsZS4gSWYgdGhlIC9MSVNUIHN3aXRjaAorICAgICAgICAgIGlzIGdpdmVuLCB0aGUgcmVzdWx0 IGlzIHByaW50ZWQuIElmIHRoZSAvTk9MSVNUIHN3aXRjaCBpcyBnaXZlbiwKKyAgICAgICAgICB0 aGUgcmVzdWx0IGlzIG5vdCBwcmludGVkLiAvUVVJRVQgaXMgYSBzeW5vbnltIGZvciAvTk9MSVNU LiBJZgorICAgICAgICAgIG5laXRoZXIgL0xJU1Qgbm9yIC9OT0xJU1QgaXMgZ2l2ZW4sIHRoZSBy ZXN1bHQgaXMgcHJpbnRlZCBpZiB0aGUKKyAgICAgICAgICBjb21tYW5kIGlzIGdpdmVuIGF0IHRv cCBsZXZlbCwgaS5lLiBub3QgZnJvbSBhIGNvbW1hbmQgZmlsZSBvcgorICAgICAgICAgIG1hY3Jv LiBJbiBhbGwgY2FzZXMsIHRoZSByZXN1bHQgb2YgdGhlIG1vc3QgcmVjZW50IEZJTEUgQ09VTlQK KyAgICAgICAgICBjb21tYW5kIGlzIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUgXHYoZl9jb3VudCku IE5vdGUgdGhhdCBGSUxFCisgICAgICAgICAgQ09VTlQgL0xJTkUgd29ya3MgKGFuZCBjYW4gb25s eSB3b3JrKSBieSByZWFkaW5nIHRoZSBlbnRpcmUKKyAgICAgICAgICBmaWxlOyBleHBlY3QgaXQg dG8gdGFrZSBzb21lIHRpbWUgaWYgdGhlIGZpbGUgaXMgbGFyZ2UuIFN5bm9ueW06CisgICAgICAg ICAgRkNPVU5ULgorCisgICBGSUxFIFJFV0lORCBjaGFubmVsCisgICAgICAgICAgTW92ZXMgdGhl IHJlYWQvd3JpdGUgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgorICAgICAg ICAgIEVxdWl2YWxlbnQgdG8gRklMRSBTRUVLIGNoYW5uZWwgMC4gU3lub255bTogRlJFV0lORC4K KworICAgRklMRSBTRUVLIFsgc3dpdGNoZXMgXSBjaGFubmVsIHsgW3srLC19XW51bWJlciwgTEFT VCwgRU9GIH0KKyAgICAgICAgICBNb3ZlcyB0aGUgcmVhZC93cml0ZSBwb2ludGVyIGZvciB0aGUg ZmlsZSBvbiB0aGlzIGNoYW5uZWwgdG8gdGhlCisgICAgICAgICAgZ2l2ZW4gcG9zaXRpb24sIHdo aWNoIG1heSBiZSBhIGJ5dGUgKGNoYXJhY3RlcikgbnVtYmVyIG9yIGEgbGluZQorICAgICAgICAg IG51bWJlciwgZXhwcmVzc2VkIGluIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSB0ZXJtcy4K KyAgICAgICAgICBTd2l0Y2hlczoKKworICAgICAgICAvQllURQorICAgICAgICAgICAgICAgIFRo ZSBudW1iZXIgZ2l2ZW4gaXMgYSBieXRlIG51bWJlci4gU3lub255bTogL0NIQVJBQ1RFUi4KKwor ICAgICAgICAvTElORQorICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgZ2l2ZW4gaXMgYSBsaW5l IG51bWJlci4KKworICAgICAgICAvQUJTT0xVVEUKKyAgICAgICAgICAgICAgICBUaGUgbnVtYmVy IGdpdmVuIGlzIGFic29sdXRlLgorCisgICAgICAgIC9SRUxBVElWRQorICAgICAgICAgICAgICAg IFRoZSBudW1iZXIgZ2l2ZW4gaXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCisK KyAgICAgICAgICBCeSBkZWZhdWx0LCBvciBpZiB0aGUgL0JZVEUgc3dpdGNoIGlzIGdpdmVuLCB0 aGUgbnVtYmVyIGlzIGEKKyAgICAgICAgICBieXRlIG51bWJlciAoMCA9IGZpcnN0IGJ5dGUpLiBJ ZiAvTElORSBpcyBnaXZlbiwgdGhlIG51bWJlciBpcyBhCisgICAgICAgICAgbGluZSBudW1iZXIg KDAgPSBmaXJzdCBsaW5lKS4gRU9GIG1lYW5zIHRvIG1vdmUgdG8gdGhlIGVuZCBvZgorICAgICAg ICAgIHRoZSBmaWxlLiBMQVNUIG1lYW5zIHRvIG1vdmUgdG8gdGhlIGxhc3QgbGluZSBvciBjaGFy YWN0ZXIgb2YKKyAgICAgICAgICB0aGUgZmlsZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBh IGxpbmUgb3IgY2hhcmFjdGVyIHNlZWsuCisKKyAgICAgICAgICBJZiBuZWl0aGVyIHRoZSAvUkVM QVRJVkUgbm9yIHRoZSAvQUJTT0xVVEUgc3dpdGNoIGlzIGdpdmVuLCB0aGVuCisgICAgICAgICAg aWYgYSBzaWduZWQgbnVtYmVyIGlzIGdpdmVuLCB0aGUgbW90aW9uIGlzIHJlbGF0aXZlIHRvIHRo ZQorICAgICAgICAgIGN1cnJlbnQgcG9zaXRpb24uIEFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0 ZXMgdG8gYSBuZWdhdGl2ZQorICAgICAgICAgIG51bWJlciBpcyBub3QgY29uc2lkZXJlZCBzaWdu ZWQgZm9yIHRoaXMgcHVycG9zZTsgdGhhdCBpcywgYQorICAgICAgICAgIHNpZ24gKCsgb3IgLSkg bXVzdCBiZSBpbmNsdWRlZCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorICAgICAgICAg IG51bWJlciBpbiB0aGUgY29tbWFuZCBpdHNlbGYgdG8gZm9yY2UgYSByZWxhdGl2ZSBzZWVrIChp biB0aGUKKyAgICAgICAgICBhYnNlbmNlIG9mIC9SRUxBVElWRSBvciAvQUJTT0xVVEUpLgorCisg ICAgICAgICAgSWYgdGhlIG51bWJlciBoYXMgbm8gc2lnbiwgb3IgaWYgdGhlIC9BQlNPTFVURSBz d2l0Y2ggaXMgZ2l2ZW4sCisgICAgICAgICAgdGhlIG51bWJlciByZXByZXNlbnRzIGFuIGFic29s dXRlIHBvc2l0aW9uIChyZWxhdGl2ZSB0byB0aGUKKyAgICAgICAgICBiZWdpbm5pbmcgb2YgdGhl IGZpbGUpLiBTdWJzZXF1ZW50IEZJTEUgUkVBRHMgb3IgV1JJVEVzIHdpbGwKKyAgICAgICAgICB0 YWtlIHBsYWNlIGF0IHRoZSBuZXcgcG9zaXRpb24uCisKKyAgICAgICAgICBJZiB0aGUgcmVhZC93 cml0ZSBwb2ludGVyIGlzIHBsYWNlZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBmaWxlLCBhCisgICAg ICAgICAgc3Vic2VxdWVudCBGSUxFIFJFQUQgd2lsbCBmYWlsLCBidXQgYSBGSUxFIFdSSVRFIHdp bGwgc3VjY2VlZAorICAgICAgICAgIChwb3NzaWJseSBjcmVhdGluZyBhIGZpbGUgd2l0aCAiaG9s ZXMiKS4gSWYgYSBGSUxFIFNFRUsgL0JZVEUKKyAgICAgICAgICBjb21tYW5kIGlzIGdpdmVuLCB0 aGUgY3VycmVudCBsaW5lIGJlY29tZXMgdW5rbm93biAodW5sZXNzIHRoZQorICAgICAgICAgIHBv c2l0aW9uIGlzIDApIGFuZCBzdWJzZXF1ZW50IEZJTEUgU0VFSyAvUkVMQVRJVkUgL0xJTkUgY29t bWFuZHMKKyAgICAgICAgICB3aWxsIGZhaWwgdW50aWwgdGhlIG5leHQgbm9uLXJlbGF0aXZlIEZJ TEUgU0VFSyAvTElORSBjb21tYW5kIGlzCisgICAgICAgICAgZ2l2ZW4uIFN5bm9ueW06IEZTRUVL LgorCisgICBBbiBhYnNvbHV0ZSBGSUxFIFNFRUsgdG8gYSBuZWdhdGl2ZSBwb3NpdGlvbiBmYWls cyBzaWxlbnRseSwgYXMgZG9lcyBhCisgICByZWxhdGl2ZSBzZWVrIHRvIGEgcG9zaXRpb24gYmVm b3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCisKKyAgIEEgY2F1dGlvbiBhYm91dCByZWxh dGl2ZSBTRUVLczogcmVtZW1iZXIgdGhhdCB0aGUgbnVtYmVyIGlzIHJlbGF0aXZlIHRvCisgICB0 aGUgY3VycmVudCBwb3NpdGlvbi4gV2hlbmV2ZXIgeW91IHJlYWQgb3Igd3JpdGUsIHRoaXMgY2hh bmdlcyB0aGUKKyAgIHBvc2l0aW9uLiBJbiBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMs IGFzc3VtZSB0aGUgZmlsZSBvcGVuIG9uCisgICBjaGFubmVsIFwlYyBpcyBwb3NpdGlvbmVkIGF0 IGxpbmUgbiAodGhlIEZSRUFEIHRhcmdldCB2YXJpYWJsZSBpcworICAgb21pdHRlZCBmb3IgbGFj ayBvZiBzcGFjZSk6CisKKyAgeyBGUkVBRCBcJWMsIEZTRUVLIC9MSU5FIFwlYyAtMSwgRlJFQUQg XCVjIH0gIDwtLSBSZWFkcyBsaW5lIG4gdHdpY2UKKyAgeyBGUkVBRCBcJWMsIEZTRUVLIC9MSU5F IFwlYyArMCwgRlJFQUQgXCVjIH0gIDwtLSBSZWFkcyBsaW5lcyBuIGFuZCBuKzEKKyAgeyBGUkVB RCBcJWMsIEZTRUVLIC9MSU5FIFwlYyArMSwgRlJFQUQgXCVjIH0gIDwtLSBSZWFkcyBsaW5lcyBu IGFuZCBuKzIKKyAgeyBGUkVBRCBcJWMsIEZTRUVLIC9MSU5FIFwlYyAtMiwgRlJFQUQgXCVjIH0g IDwtLSBSZWFkcyBsaW5lcyBuIGFuZCBuLTEKKyAgeyBGUkVBRCBcJWMsIEZTRUVLIC9MSU5FIFwl YyAtMywgRlJFQUQgXCVjIH0gIDwtLSBSZWFkcyBsaW5lcyBuIGFuZCBuLTIKKworICAgQW5vdGhl ciBjYXV0aW9uOiBVc2luZyBGU0VFSyBhbmQgRlJFQUQgL1NJWkUgdG8gcmVwZWF0ZWRseSByZWFk IHRoZQorICAgc2FtZSBkaXNrIGJsb2NrIChlLmcuIHdoZW4gc2FtcGxpbmcgYSBkYXRhYmFzZSBy ZWNvcmQgdGhhdCBpcworICAgZnJlcXVlbnRseSB1cGRhdGVkKSBtaWdodCBub3QgZ2l2ZSB5b3Ug dXBkYXRlZCBkaXNrIGJsb2NrcyBkdWUgdG8gdGhlCisgICBpbnRlcm5hbCBidWZmZXJpbmcgYW5k IGNhY2hpbmcgb2YgdGhlIEMgbGlicmFyeSAodGhpcyBwcm9iYWJseSB2YXJpZXMKKyAgIGZyb20g b25lIHBsYXRmb3JtL2NvbXBpbGVyIGNvbWJpbmF0aW9uIHRvIGFub3RoZXIpLiBJZiBuZWNlc3Nh cnkgeW91CisgICBjYW4gZm9yY2UgYSBmcmVzaCBkaXNrIHJlYWQgd2l0aCBhIGNsb3NlL29wZW4g c2VxdWVuY2U6CisKKyAgRkNMT1MgXCVjCisgIEZPUEVOIFwlYyBzYW1lZmlsZW5hbWUKKyAgRlNF RUsgXCVjIHNhbWVzcG90CisgIEZSRUFEIC9TSVpFOmhvd21hbnlieXRlcyBcJWMgdmFyaWFibGUK KworMS4yMi4zLiBGSUxFIENvbW1hbmQgRXhhbXBsZXMKKworICAgVG8gcmVhZCB0aGUgbGFzdCAx MCBsaW5lcyBvZiBhIHRleHQgZmlsZSBpbnRvIGFuIGFycmF5OgorCisgIGZvcGVuIC9yZWFkIFwl YyBvb2ZhLnR4dCAgICAgICAgICAgICAgICA7IE9wZW4gdGhlIGZpbGUKKyAgaWYgZmFpbCBleGl0 IDEgQ2FuJ3Qgb3BlbiBvb2ZhLnR4dCAgICAgIDsgQWx3YXlzIGNoZWNrIGZvciBmYWlsdXJlCisg IGRjbCBcJmFbMTBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IERlY2xhcmUgYSAxMC1l bGVtZW50IGFycmF5CisgIGZjb3VudCAvbGluZSBcJWMgICAgICAgICAgICAgICAgICAgICAgICA7 IENvdW50IGxpbmVzIGluIHRoZSBmaWxlCisgIGZzZWVrIC9saW5lIFwlYyBcdihmX2NvdW50KS0x MCAgICAgICAgICA7IFNlZWsgdG8gMTAgbGluZXMgZnJvbSB0aGUgZW5kCisgIGlmIGZhaWwgZXhp dCAxIENhbid0IHNlZWsgICAgICAgICAgICAgICA7IENoZWNrIGZvciBmYWlsdXJlCisgIGZvciBc JWkgMSAxMCAxIHsgZnJlYWQgXCVjIFwmYVtcJWldIH0gICA7IFJlYWQgdGhlIGxhc3QgMTAgbGlu ZXMKKyAgZmNsb3NlIFwlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ2xvc2UgdGhl IGZpbGUKKworICAgTm90ZSB0aGF0IGJsYW5rIGxpbmVzIHNob3cgdXAgYXMgZW1wdHkgKHVuZGVm aW5lZCkgYXJyYXkgZWxlbWVudHMsIGZvcgorICAgZXhhbXBsZSBpZiB5b3UgZ2l2ZSBhICJzaG93 IGFycmF5IGEiIGNvbW1hbmQgYXQgdGhpcyBwb2ludC4gVGhpcyBpcworICAgbm9ybWFsLiBZb3Ug Y2FuIHN0aWxsIHVzZSB0aGVzZSBlbGVtZW50czsgZS5nLjoKKworICBmb3IgXCVpIDEgMTAgMSB7 IGVjaG8gXCVpLiBcJmFbXCVpXSB9ICAgOyBEaXNwbGF5IHRoZSAxMCBsaW5lcworCisgICBIZXJl IGlzIGhvdyB0byByZWFkIHRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIChhbHJlYWR5IG9wZW4gb24g Y2hhbm5lbAorICAgXCVjKToKKworICBmc2VlayAvbGluZSBcJWMgbGFzdCAgICAgICAgICAgICAg ICAgICAgOyBTZWVrIGRpcmVjdGx5IHRvIGxhc3QgbGluZQorCisgICBBbHRlcm5hdGl2ZWx5Ogor CisgIGZzZWVrIC9saW5lIFwlYyBlb2YgICAgICAgICAgICAgICAgICAgICA7IFNlZWsgdG8gZW5k IG9mIGZpbGUKKyAgZnNlZWsgL2xpbmUgXCVjIC0xICAgICAgICAgICAgICAgICAgICAgIDsgU2Vl ayB0byBiZWdpbm5pbmcgb2YgbGFzdCBsaW5lCisKKyAgIEFsdGVybmF0aXZlbHk6CisKKyAgZmNv dW50IC9saW5lIFwlYyAgICAgICAgICAgICAgICAgICAgICAgIDsgQ291bnQgdGhlIGZpbGUncyBs aW5lcworICBmc2VlayAvbGluZSBcJWMgXHYoZl9jb3VudCktMSAgICAgICAgICAgOyBTZWVrIHRv IGxhc3QgbGluZQorICBmcmVhZCBcJWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBS ZWFkIGl0CisKKyAgIFRvIHJlYWQgZXZlcnkgb3RoZXIgbGluZSBmcm9tIHRoZSBmaWxlICh1c2lu ZyByZWxhdGl2ZSBTRUVLKSwgc2tpcHBpbmcKKyAgIHRoZSBmaXJzdCBsaW5lOgorCisgIGZvcGVu IC9yZWFkIFwlYyBvb2ZhLnR4dCAgICAgICAgICAgICAgICA7IE9wZW4gdGhlIGZpbGUKKyAgd2hp bGUgKCBzdWNjZXNzICkgeyAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCB0aHJvdWdoIGxpbmVz CisgICAgICBmc2VlayAvbGluZSBcJWMgKzEgICAgICAgICAgICAgICAgICA7IFNraXAgYSBsaW5l CisgICAgICBpZiBzdWNjZXNzIGZyZWFkIFwlYyAgICAgICAgICAgICAgICA7IFJlYWQgJiBkaXNw bGF5IGEgbGluZQorICB9CisgIGZjbG9zZSBcJWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7IENsb3NlIHRoZSBmaWxlCisKKyAgIEhlcmUgaXMgaG93IHRvIHJlYWQgdGhlIGxpbmVzIG9m IGEgZmlsZSBpbiByZXZlcnNlIG9yZGVyOgorCisgIGZvcGVuIC9yZWFkIFwlYyBvb2ZhLnR4dCAg ICAgICAgICAgICAgICA7IE9wZW4KKyAgaWYgZmFpbCBleGl0IDEgICAgICAgICAgICAgICAgICAg ICAgICAgIDsgQ2hlY2sKKyAgZnNlZWsgL2xpbmUgXCVjIGxhc3QgICAgICAgICAgICAgICAgICAg IDsgU2VlayB0byBsYXN0IGxpbmUKKyAgd2hpbGUgc3VjY2VzcyB7ICAgICAgICAgICAgICAgICAg ICAgICAgIDsgTG9vcAorICAgICAgZnJlYWQgXCVjICAgICAgICAgICAgICAgICAgICAgICAgICAg OyBSZWFkIGxpbmUKKyAgICAgIGZzZWVrIC9saW5lIFwlYyAtMiAgICAgICAgICAgICAgICAgIDsg U2VlayBiYWNrd2FyZHMgdHdvIGxpbmVzCisgIH0KKyAgZmNsb3NlIFwlYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgQ2xvc2UgdGhlIGZpbGUKKworICAgVGhlIGxvb3Agd29ya3MgYmVj YXVzZSBhIHJlbGF0aXZlIFNFRUsgb3V0c2lkZSB0aGUgZmlsZSBmYWlscy4KKworICAgSXQgaXMg YWxzbyBwb3NzaWJsZSB0byB1c2UgYmxvY2sgaS9vIHRvIG1hbmFnZSByYW5kb20tYWNjZXNzIGZp bGVzIHdpdGgKKyAgIGZpeGVkLWxlbmd0aCByZWNvcmRzIChhcyBsb25nIGFzIHRoZXkgZG9uJ3Qg Y29udGFpbiBOVUwgY2hhcmFjdGVycykuCisgICBTdXBwb3NlLCBmb3IgZXhhbXBsZSwgeW91IGhh dmUgYSBmaWxlIG9mICJjYXJkIGltYWdlIiByZWNvcmRzIHdpdGgKKyAgIGZpeGVkLWZpZWxkIGlu Zm9ybWF0aW9uIGFib3V0IGN1c3RvbWVycywgc3VjaCBhczoKKworICBOYW1lOiAgICAgQ29sdW1u cyAgMS0zMiAgKGNvbHVtbiBudW1iZXJzIGFyZSAxLWJhc2VkKQorICBBZGRyZXNzOiAgQ29sdW1u cyAzMy03MgorICBCYWxhbmNlOiAgQ29sdW1ucyA3My04MAorCisgICBUaGUgcmVjb3JkcyBhcmUg aW5kZXhlZCBieSBjdXN0b21lciBudW1iZXIsIHN0YXJ0aW5nIHdpdGggMC4gVGhlcmUgYXJlCisg ICBubyBsaW5lIHRlcm1pbmF0b3JzIHNlcGFyYXRpbmcgdGhlbS4gVGhlcmVmb3JlIHRoZSByZWNv cmQgZm9yIGN1c3RvbWVyCisgICBudW1iZXIgbiBzdGFydHMgYXQgcG9zaXRpb24gbnggODAgKFwl bio4MCkuCisKKyAgIE5vdyBzdXBwb3NlIHdlIHJlY2VpdmVkIGEgcGF5bWVudCBmcm9tIGN1c3Rv bWVyIG51bWJlciAxNzMgYW5kIHdhbnQgdG8KKyAgIHVwZGF0ZSB0aGUgYmFsYW5jZToKKworICAu XCVuID0gMTczICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ3VzdG9tZXIgKHJlY29y ZCkgbnVtYmVyCisgIC5cJWEgPSAxMi43MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBB bW91bnQKKyAgZm9wZW4gL3JlYWQgL3dyaXRlIFwlYyBjdXN0b21lci5kYiAgICAgICA7IE9wZW4g dGhlIGZpbGUKKyAgaWYgZmFpbCBzdG9wIDEgT1BFTiBGQUlMRUQ6IFxmX2Vycm1zZygpICA7IENo ZWNrCisgIGZzZWVrIC9ieXRlIFwlYyA4MCpcJW4gICAgICAgICAgICAgICAgICAgOyBTZWVrIHRv IHJlY29yZAorICBmcmVhZCAvc2l6ZTo4MCBcJWMgciAgICAgICAgICAgICAgICAgICAgIDsgUmVh ZCB0aGUgcmVjb3JkCisgIGlmIGZhaWwgc3RvcCAxIFJFQUQgRkFJTEVEOiBcZl9lcnJtc2coKSAg OyBDaGVjayAoSU1QT1JUQU5UKQorICAuXCViIDo9IFxmcmlnaHQoXG0ociksOCkgICAgICAgICAg ICAgICAgIDsgRXh0cmFjdCB0aGUgYmFsYW5jZQorICAuXCViIDo9IFxmZnBhZGQoXCViLFwlYSwy KSAgICAgICAgICAgICAgIDsgQWRkIHRoZSBuZXcgcGF5bWVudAorICBpZiBmYWlsIHN0b3AgMSBB UklUSE1FVElDIEVSUk9SOiBcJWIvXCVhIDsgQ2F0Y2ggYmFkIHJlY29yZHMKKyAgLnIgOj0ge1xm bGVmdChcbShyKSw3MilcZmxwYWQoXCViLDgpfSAgICA7IFVwZGF0ZSB0aGUgcmVjb3JkCisgIGZz ZWVrIC9ieXRlIFwlYyA4MCpcJW4gICAgICAgICAgICAgICAgICAgOyBSZXBvc2l0aW9uIHRvIHNh bWUgc3BvdAorICBmd3JpdGUgL3NpemU6ODAgXCVjIHtcbShyKX0gICAgICAgICAgICAgIDsgUmVw bGFjZSB0aGUgcmVjb3JkCisgIGlmIGZhaWwgc3RvcCAxIFdSSVRFIEZBSUxFRDogXGZfZXJybXNn KCkgOyBDaGVjaworICBmY2xvc2UgXCVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsg Q2xvc2UgdGhlIGZpbGUKKworICAgUkVNRU1CRVI6IFVzaW5nIEZJTEUgU0VFSyB0byBtb3ZlIGJl eW9uZCB0aGUgZW5kIG9mIGZpbGUgY2FuIHJlc3VsdCBpbgorICAgYSBmaWxlIHdpdGggaG9sZXMg d2hlbiB3cml0aW5nOyB3aGVuIHJlYWRpbmcsIGFuIGVuZC1vZi1maWxlIGVycm9yIHdpbGwKKyAg IG9jY3VyIC0tIGJlIHN1cmUgdG8gY2hlY2sgZm9yIGl0LgorCisxLjIyLjQuIENoYW5uZWwgTnVt YmVycworCisgICBDLUtlcm1pdCdzIGNoYW5uZWwgbnVtYmVycyBhcmUgaW50ZWdlcnMgZnJvbSAw IHRvIHNvbWUKKyAgIHBsYXRmb3JtLWRlcGVuZGVudCBsaW1pdCwgc3VjaCBhcyA0NiBvciAxOTg1 ICh0aGUgdmFsdWUgb2YgXHYoZl9tYXgpKS4KKyAgIFRoaXMgaXMgdGhlIGxpbWl0IHBsYWNlZCBi eSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB0aGUgbnVtYmVyIG9mIGZpbGVzCisgICB0aGF0IG1h eSBiZSBvcGVuZWQgYnkgb25lIHByb2Nlc3Mgb3IgdXNlciBvciBqb2IsIG1pbnVzIHRoZSBzdGFu ZGFyZAorICAgaW5wdXQsIG91dHB1dCwgYW5kIGVycm9yIGZpbGVzLCBhbmQgbWludXMgdGhlIG51 bWJlciBvZiBmaWxlcyByZXNlcnZlZAorICAgYnkgQy1LZXJtaXQgZm9yIGxvZ3MsIE9QRU4gUkVB RCBhbmQgV1JJVEUsIGFuZCBmaWxlIHRyYW5zZmVyIChhbmQgbWF5YmUKKyAgIHNvbWUgY29tbWFu ZCBmaWxlcyAtLSB0aGUgXHYoZl9tYXgpIG51bWJlciBjYW4ndCBiZSBleGFjdCkuCisKKyAgIEFs dGhvdWdoIHlvdSBtdXN0IGluY2x1ZGUgYSB2YXJpYWJsZSBpbiB0aGUgRklMRSBPUEVOIGNvbW1h bmQsIHRvIHdoaWNoCisgICB0aGUgY2hhbm5lbCBudW1iZXIgaXMgYXNzaWduZWQsIHlvdSBkb24n dCBoYXZlIHRvIHVzZSBhIHZhcmlhYmxlIGluIHRoZQorICAgb3RoZXIgRklMRSBjb21tYW5kcyBp ZiB5b3Uga25vdyB3aGF0IHRoZSBudW1iZXIgaXMgLS0geW91IGNhbiBqdXN0IHB1dAorICAgdGhl IG51bWJlci4gVGhpcyBzYXZlcyB5b3UgYSBmZXcga2V5c3Ryb2tlcyB3aGVuIHR5cGluZyBjb21t YW5kcyBhdCB0aGUKKyAgIHByb21wdDoKKworICBmb3BlbiBcJWMgb29mYS50eHQKKyAgZmxpc3QK KyAgMC4gL3Vzci9vbGdhLm9vZmEudHh0IChSKSAwCisKKyAgIFRoaXMgdGVsbHMgdGhlIGNoYW5u ZWwgbnVtYmVyIGlzIDAgKHRoZSBudW1iZXIgb24gdGhlIGxlZnQgaXMgdGhlCisgICBjaGFubmVs IGZpbGUncyBjaGFubmVsIG51bWJlcikuIE9mIGNvdXJzZSB5b3UgY2FuIGFsc28gZmluZCBpdCBi eQorICAgZWNob2luZyB0aGUgdmFyaWFibGU6CisKKyAgZWNobyBcJWMKKyAgMAorCisgICBPciB3 aXRoICJmc3RhdHVzIFwlYyIuIE5vdyB5b3UgY2FuIHR5cGUgY29tbWFuZHMgbGlrZToKKworICBm cmVhZCAwCisKKyAgIHRvIHJlYWQgYSBsaW5lIGZyb20gdGhlIGZpbGUuIE9idmlvdXNseSwgaG93 ZXZlciwgdXNpbmcgZGlnaXRzIHJhdGhlcgorICAgdGhhbiBhIHZhcmlhYmxlIGZvciB0aGUgY2hh bm5lbCBudW1iZXIgd291bGQgYmUgcG9vciBwcmFjdGljZSBpbiBhCisgICBzY3JpcHQuCisKKyAg IElmIGluIGNvbW1hbmRzIGxpa2U6CisKKyAgZnJlYWQgXCVjIFwlYQorCisgICB5b3UgaGF2ZSB0 cm91YmxlIHJlbWVtYmVyaW5nIHdoaWNoIHZhcmlhYmxlIGlzIHdoaWNoLCBub3RlIHRoYXQgdGhl CisgICBjaGFubmVsIG51bWJlciBpcywgaW5kZWVkLCBhIG51bWJlci4gQW55d2hlcmUgQy1LZXJt aXQgYWNjZXB0cyBhIG51bWJlcgorICAgaXQgY2FuIGFsc28gYWNjZXB0IGFuIGV4cHJlc3Npb24s IHNvIHlvdSBjYW4gcHV0IHBhcmVudGhlc2VzIGFyb3VuZCB0aGUKKyAgIGNoYW5uZWwgbnVtYmVy IHRvIHJlbWluZCB5b3UgaXQncyB0aGUgY2hhbm5lbCBudW1iZXIgYW5kIG5vdCB0aGUKKyAgIHZh cmlhYmxlIGludG8gd2hpY2ggZGF0YSBpcyB0byBiZSByZWFkOgorCisgIGZyZWFkIChcJWMpIFwl YQorCisgICBOb3JtYWxseSBjaGFubmVsIG51bWJlcnMgYXJlIGFzc2lnbmVkIHNlcXVlbnRpYWxs eSBhcyAwLCAxLCAyLCAuLi4gdXAKKyAgIHRvIHRoZSBsaW1pdC4gSG93ZXZlciwgb25jZSB5b3Ug c3RhcnQgY2xvc2luZyBmaWxlcywgdGhlcmUgY2FuIGJlIGhvbGVzCisgICBpbiB0aGUgc2VxdWVu Y2UuIE5ldyBjaGFubmVscyBhcmUgYXNzaWduZWQgdG8gZmlsbCBpbiB0aGUgaG9sZXMuIFRodXMK KyAgIHlvdSBjYW4ndCBkZXBlbmQgb24gY2hhbm5lbCBudW1iZXJzIGJlaW5nIGluIGFueSBwYXJ0 aWN1bGFyIHNlcXVlbmNlLgorCisxLjIyLjUuIEZJTEUgQ29tbWFuZCBFcnJvcnMKKworICAgRWFj aCBGSUxFIGNvbW1hbmQgc2V0cyB0aGUgdmFyaWFibGUgXHYoZl9lcnJvcikgdG8gb25lIG9mIHRo ZSBmb2xsb3dpbmcKKyAgIHZhbHVlczoKKworICAgIDAgPSBObyBlcnJvcgorICAgLTEgPSBTeXN0 ZW0gZXJyb3IKKyAgIC0yID0gQXR0ZW1wdCB0byByZWFkIGFmdGVyIGVuZCBvZiBmaWxlCisgICAt MyA9IENoYW5uZWwgbm90IG9wZW4KKyAgIC00ID0gQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdl IChuZWdhdGl2ZSBvciB0b28gbGFyZ2UpCisgICAtNSA9IE51bWVyaWMgYXJndW1lbnQgKHNpemUs IC4uLikgb3V0IG9mIHJhbmdlCisgICAtNiA9IEZpbGUgbm90IGZvdW5kCisgICAtNyA9IEJhZCBv ciBtaXNzaW5nIGZpbGVuYW1lCisgICAtOCA9IFRvbyBtYW55IGZpbGVzIGFyZSBhbHJlYWR5IG9w ZW4gKEZJTEUgT1BFTiBvbmx5KQorICAgLTkgPSBGb3JiaWRkZW4gb3BlcmF0aW9uIChlLmcuIHdy aXRlIHRvIGEgcmVhZC1vbmx5IGZpbGUpCisgIC0xMCA9IEFjY2VzcyBkZW5pZWQKKyAgLTExID0g SWxsZWdhbCBjb21iaW5hdGlvbiBvZiBPUEVOIG1vZGVzIChGSUxFIE9QRU4gb25seSkKKyAgLTEy ID0gQnVmZmVyIG92ZXJmbG93CisgIC0xMyA9IEN1cnJlbnQgbGluZSBudW1iZXIgdW5rbm93biAo Zm9yIHJlbGF0aXZlIGxpbmUgc2Vla3MpCisgIC0xNCB0aHJvdWdoIC05ODogUmVzZXJ2ZWQuCisg IC05OSA9IFJlcXVlc3RlZCBvcGVyYXRpb24gbm90IGltcGxlbWVudGVkIGluIHRoaXMgdmVyc2lv biBvZiBDLUtlcm1pdAorIC05OTkgPSBVbmtub3duIGVycm9yCisKKyAgIFdoZW4gXHYoZl9lcnJv cikgaXMgLTEsIHRoaXMgbWVhbnMgdGhlIEZJTEUgY29tbWFuZCBmYWlsZWQgYmVjYXVzZQorICAg YmVjYXVzZSBvZiBhIHN5c3RlbSBlcnJvciwgaW4gd2hpY2ggY2FzZSB5b3UgY2FuIGV4YW1pbmUg dGhlIGZvbGxvd2luZworICAgdmFyaWFibGVzOgorCisgIFx2KGVycm5vKSAgICAgPSBTeXN0ZW0g ZXJyb3IgbnVtYmVyLgorICBcdihlcnJzdHJpbmcpID0gRXJyb3IgbWVzc2FnZSBjb3JyZXNwb25k aW5nIHRvIFx2KGVycm5vKS4KKworICAgQSBzcGVjaWFsIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBm b3IgdHJhbnNsYXRpbmcgdGhlIFx2KGZfZXJyb3IpIGNvZGUgdG8KKyAgIGFuIGVycm9yIG1lc3Nh Z2Ugc3RyaW5nOgorCitcZl9lcnJtc2coW2NvZGVdKQorICBJZiB0aGUgY29kZSBpcyAtMSwgcmV0 dXJucyBlcnJvciBtZXNzYWdlIG9mIHRoZSBtb3N0IHJlY2VudCBzeXN0ZW0KKyAgZXJyb3I7IG90 aGVyd2lzZSBpZiB0aGUgY29kZSBpcyBhIHZhbGlkIFx2KGZfZXJyb3IpIHZhbHVlLCB0aGUgYXNz b2NpYXRlZAorICBtZXNzYWdlIGlzIHJldHVybmVkLiAgSWYgdGhlIGNvZGUgaXMgb21pdHRlZCwg dGhlIHN0YXR1cyBtZXNzYWdlCisgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgXHYoZl9l cnJvcikgdmFsdWUgaXMgcmV0dXJuZWQuCisKKyAgIEEgRklMRSBjb21tYW5kIHRoYXQgZmFpbHMg cHJpbnRzIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlCisgICBhdXRvbWF0aWNhbGx5LCBl eGNlcHQgd2hlbiB0aGUgY29tbWFuZCBpcyBSRUFEIG9yIFNFRUsgYW5kIHRoZSBlcnJvciBpcwor ICAgLTIgKGVuZCBvZiBmaWxlKTsgaW4gdGhhdCBjYXNlLCB0aGUgY29tbWFuZCBzdGlsbCBmYWls cywgYnV0IGRvZXMgbm90CisgICBwcmludCBhIG1lc3NhZ2UuIFRoaXMgYWxsb3dzIGNvbnN0cnVj dGlvbnMgc3VjaCBhczoKKworICBmb3BlbiBcJWMgb29mYS50eHQKKyAgd2hpbGUgc3VjY2VzcyB7 IGZyZWFkIFwlYyB9CisgIGZjbG9zZSBcJWMKKworICAgdG8gd29yayBhcyBleHBlY3RlZCwgaS5l LiB3aXRob3V0IGFuIGFubm95aW5nIG1lc3NhZ2Ugd2hlbiB0aGUgZW5kIG9mCisgICBmaWxlIGlz IHJlYWNoZWQuCisKKzEuMjIuNi4gRmlsZSBJL08gVmFyaWFibGVzCisKKyAgIFRoZSB2YXJpYWJs ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlIGkvbyBwYWNrYWdlIGFyZToKKworICAgXHYoZl9j b3VudCkKKyAgICAgICAgICBSZXN1bHQgb2YgdGhlIG1vc3QgcmVjZW50IEZJTEUgQ09VTlQgKEZD T1VOVCkgY29tbWFuZC4KKworICAgXHYoZl9lcnJvcikKKyAgICAgICAgICBOdW1lcmljIGVycm9y IGNvZGUgb2YgbW9zdCByZWNlbnQgRklMRSBjb21tYW5kICgwID0gbm8gZXJyb3IpLgorCisgICBc dihmX21heCkKKyAgICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBvcGVuIHNpbXVsdGFu ZW91c2x5LgorCisxLjIyLjcuIEZpbGUgSS9PIEZ1bmN0aW9ucworCisgICBTb21lIG9mIHRoZSBG SUxFIGNvbW1hbmRzIGNhbiBhbHNvIGJlIGlzc3VlZCBhcyBmdW5jdGlvbiBjYWxscywgd2hpY2gK KyAgIG1ha2VzIHNjcmlwdCB3cml0aW5nIGEgYml0IG1vcmUgY29udmVuaWVudCwgZXNwZWNpYWxs eSBmb3IgQworICAgcHJvZ3JhbW1lcnMuIEFsc28sIHNldmVyYWwgZnVuY3Rpb25zIGFyZSBwcm92 aWRlZCB0aGF0IGRvIG5vdCBoYXZlCisgICBjb21tYW5kIGVxdWl2YWxlbnRzLiBFYWNoIG9mIHRo ZXNlIGZ1bmN0aW9ucyB0YWtlcyBhIGNoYW5uZWwgbnVtYmVyIGFzCisgICB0aGUgZmlyc3QgYXJn dW1lbnQuIFRoZXNlIGZ1bmN0aW9ucyBkbyBub3Qgd29yayBmb3IgT1BFTiB7IFJFQUQsICFSRUFE LAorICAgV1JJVEUsICFXUklURSwgYW5kIEFQUEVORCB9IGZpbGVzLgorCisgICBcZl9zdGF0dXMo Y2hhbm5lbCkKKyAgICAgICAgICBSZXR1cm5zIDAgaWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4s IG90aGVyd2lzZSBhIG51bWJlciBiZXR3ZWVuCisgICAgICAgICAgMSBhbmQgMTUgd2hpY2ggaXMg dGhlIHN1bSBvZiB0aGUgT1BFTiBtb2RlczoKKworICAxID0gL1JFQUQKKyAgMiA9IC9XUklURQor ICA0ID0gL0FQUEVORAorICA4ID0gL0JJTkFSWQorCisgICBUaGUgcmVtYWluaW5nIGZ1bmN0aW9u cyB3b3JrIG9ubHkgZm9yIG9wZW4gY2hhbm5lbHMuIEVhY2ggb2YgdGhlc2UKKyAgIGZ1bmN0aW9u cyBjYW4gZmFpbCBmb3IgdGhlIGFwcGxpY2FibGUgcmVhc29ucyBsaXN0ZWQgaW4gWzM4N11TZWN0 aW9uCisgICAxLjIyLjUuIEZvciBpbnN0cnVjdGlvbnMgb24gaGFuZGxpbmcgZnVuY3Rpb24gZXJy b3JzLCBzZWUgWzM4OF1TZWN0aW9uCisgICA3LjEyLgorCisgICBcZl9wb3MoY2hhbm5lbCkKKyAg ICAgICAgICBSZXR1cm5zIHRoZSBmaWxlJ3MgY3VycmVudCByZWFkL3dyaXRlIHBvaW50ZXIgKDAt YmFzZWQpLiBUaGVyZQorICAgICAgICAgIGlzIG5vIEZJTEUgY29tbWFuZCBlcXVpdmFsZW50Lgor CisgICBcZl9saW5lKGNoYW5uZWwpCisgICAgICAgICAgUmV0dXJucyB0aGUgZmlsZSdzIGN1cnJl bnQgbGluZSBudW1iZXIgKDAtYmFzZWQpLCBpZiBrbm93biwKKyAgICAgICAgICBvdGhlcndpc2Ug LTEuIFRoZXJlIGlzIG5vIEZJTEUgY29tbWFuZCBlcXVpdmFsZW50LiBUaGUgbGluZQorICAgICAg ICAgIG51bWJlciBpcyBrbm93biBhcyBsb25nIGFzIG5vIGNoYXJhY3RlciBvciBibG9jayBpL28g aGFzIGJlZW4KKyAgICAgICAgICBkb25lIG9uIHRoZSBjaGFubmVsLgorCisgICBcZl9oYW5kbGUo Y2hhbm5lbCkKKyAgICAgICAgICBSZXR1cm5zIHRoZSAiZmlsZSBoYW5kbGUiIG9mIHRoZSBmaWxl LiBUaGF0IGlzLCBpdCB0cmFuc2xhdGVzCisgICAgICAgICAgdGhlIHBvcnRhYmxlIEMtS2VybWl0 IGNoYW5uZWwgbnVtYmVyIGludG8gYSBzeXN0ZW0tc3BlY2lmaWMgZmlsZQorICAgICAgICAgIGhh bmRsZSBvciBudW1iZXIgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIG90aGVyIHByb2dyYW1zIG9uIHRo ZQorICAgICAgICAgIHNhbWUgcGxhdGZvcm0uIEluIFVOSVggdGhpcyBpcyBhIGZpbGUgZGVzY3Jp cHRvci4gVGhlcmUgaXMgbm8KKyAgICAgICAgICBGSUxFIGNvbW1hbmQgZXF1aXZhbGVudC4KKwor ICAgXGZfZW9mKGNoYW5uZWwpCisgICAgICAgICAgUmV0dXJucyAxIGlmIHRoZSByZWFkL3dyaXRl IHBvaW50ZXIgb2YgdGhlIGZpbGUgb24gdGhlIGdpdmVuCisgICAgICAgICAgY2hhbm5lbCBpcyBh dCB0aGUgZW5kIG9mIHRoZSBmaWxlLCAwIG90aGVyd2lzZS4gQ29udmVuaWVudCBpbgorICAgICAg ICAgIFdISUxFIHN0YXRlbWVudHMsIGUuZy46CisKKyAgICB3aGlsZSBub3QgXGZfZW9mKFwlYykg eyBmcmVhZCBcJWMgfQorCisgICBcZl9nZXRjaGFyKGNoYW5uZWwpCisgICAgICAgICAgRXF1aXZh bGVudCB0byBGUkVBRCAvQ0hBUi4gUmV0dXJucyB0aGUgY2hhcmFjdGVyIGFjdHVhbGx5IHJlYWQu CisgICAgICAgICAgSWYgXGZfZ2V0Y2hhcigpIGRvZXMgbm90IGZhaWwgYnV0IHRoZSByZXR1cm4g dmFsdWUgaXMgZW1wdHksCisgICAgICAgICAgdGhpcyBtZWFucyBhIE5VTEwgY2hhcmFjdGVyIHdh cyByZWFkLgorCisgICBcZl9nZXRsaW5lKGNoYW5uZWwpCisgICAgICAgICAgRXF1aXZhbGVudCB0 byBGUkVBRCAvTElORS4gUmV0dXJucyB0aGUgbGluZSBhY3R1YWxseSByZWFkLCBidXQKKyAgICAg ICAgICB3aXRoIHRoZSBsaW5lIHRlcm1pbmF0b3Igc3RyaXBwZWQuIElmIFxmX2dldGxpbmUoKSBk b2VzIG5vdCBmYWlsCisgICAgICAgICAgYnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgZW1wdHksIHRo aXMgbm9ybWFsbHkgbWVhbnMgYW4gZW1wdHkgbGluZQorICAgICAgICAgIHdhcyByZWFkLgorCisg ICBcZl9nZXRibG9jayhjaGFubmVsLG4pCisgICAgICAgICAgRXF1aXZhbGVudCB0byBGUkVBRCAv U0laRTpuLiBSZXR1cm5zIHRoZSBibG9jayBvZiBjaGFyYWN0ZXJzCisgICAgICAgICAgYWN0dWFs bHkgcmVhZC4gSWYgdGhlIHJldHVybmVkIGJsb2NrIGlzIHNtYWxsZXIgdGhhbiBuLCBpdAorICAg ICAgICAgIGluZGljYXRlcyBlaXRoZXIgdGhhdCB0aGUgZW5kIG9mIGZpbGUgd2FzIHJlYWNoZWQg b3IgYSBOVUwKKyAgICAgICAgICBjaGFyYWN0ZXIgaXMgaW4gdGhlIGJsb2NrLgorCisgICBcZl9w dXRjaGFyKGNoYW5uZWwsYykKKyAgICAgICAgICBFcXVpdmFsZW50IHRvIEZXUklURSAvQ0hBUkFD VEVSLiBXcml0ZXMgdGhlIGNoYXJhY3RlciBjLiBJZiBjCisgICAgICAgICAgY29udGFpbnMgbW9y ZSB0aGFuIG9uZSBjaGFyYWN0ZXIsIG9ubHkgdGhlIGZpcnN0IGlzIHdyaXR0ZW4uIElmCisgICAg ICAgICAgYyBpcyBlbXB0eSBhIE5VTCBpcyB3cml0dGVuLiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg Y2hhcmFjdGVycworICAgICAgICAgIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBl cnJvciBjb2RlIHVwb24gZmFpbHVyZS4KKworICAgXGZfcHV0bGluZShjaGFubmVsLHN0cmluZykK KyAgICAgICAgICBFcXVpdmFsZW50IHRvIEZXUklURSAvTElORS4gV3JpdGVzIHRoZSBzdHJpbmcg YW5kIGFkZHMgdGhlCisgICAgICAgICAgYXBwcm9wcmlhdGUgbGluZSB0ZXJtaW5hdGlvbiBjaGFy YWN0ZXIgb3Igc2VxdWVuY2UuIElmIHRoZQorICAgICAgICAgIHN0cmluZyBpcyBlbXB0eSBvciBv bWl0dGVkLCBhbiBlbXB0eSBsaW5lIGlzIHdyaXR0ZW4uIFJldHVybnMKKyAgICAgICAgICB0aGUg bnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVy cm9yCisgICAgICAgICAgY29kZSB1cG9uIGZhaWx1cmUuCisKKyAgIFxmX3B1dGJsb2NrKGNoYW5u ZWwsc3RyaW5nKQorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gRldSSVRFIC9TVFJJTkcuIFdyaXRl cyB0aGUgc3RyaW5nIGFzIGdpdmVuLiBJZiB0aGUKKyAgICAgICAgICBzdHJpbmcgaXMgZW1wdHkg b3Igb21pdHRlZCwgbm90aGluZyBpcyB3cml0dGVuLiBSZXR1cm5zIHRoZQorICAgICAgICAgIG51 bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJv cgorICAgICAgICAgIGNvZGUgdXBvbiBmYWlsdXJlLgorCisxLjIyLjguIEZpbGUgSS9PIEZ1bmN0 aW9uIEV4YW1wbGVzCisKKyAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0ICAgICAgICAgICAgOyBP cGVuIG91ciBmYXZvcml0ZSBmaWxlIGZvciByZWFkaW5nCisgIGlmIGZhaWx1cmUgZXhpdCAxICAg ICAgICAgICAgICAgICAgIDsgQ2hlY2sgdGhhdCBpdCdzIG9wZW4KKyAgd2hpbGUgbm90IFxmX2Vv ZihcJWMpIHsgICAgICAgICAgICAgOyBMb29wIHVudGlsIEVPRgorICAgICAgLmxpbmUgOj0gXGZf Z2V0bGluZShcJWMpICAgICAgICA7IEdldCBhIGxpbmUKKyAgICAgIGlmIHN1Y2Nlc3MgZWNobyB7 XG0obGluZSl9ICAgICAgOyBFY2hvIGl0CisgIH0KKyAgaWYgbm90IFxmX2VvZihcJWMpIHsgICAg ICAgICAgICAgICAgOyBDaGVjayByZWFzb24gZm9yIGxvb3AgZXhpdAorICAgICAgZXhpdCAxIEZp bGUgRXJyb3I6IFxmX2Vycm1zZygpICA7IElmIG5vdCBFT0Ygc2F5IHNvLgorICB9CisKKyAgZnJl d2luZCBcJWMgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXdpbmQgdGhlIGZpbGUKKyAgd2hp bGUgbm90IFxmX2VvZihcJWMpIHsgICAgICAgICAgICAgOyBTYW1lIHRoaW5nIGJ1dCB3aXRoIGJs b2NrIGkvbworICAgICAgLmJsb2NrIDo9IFxmX2dldGJsb2NrKFwlYywyNTYpICA7IChtdWNoIGZh c3RlciB0aGFuIGxpbmUgaS9vKQorICAgICAgaWYgc3VjY2VzcyB4ZWNobyB7XG0oYmxvY2spfQor ICB9CisKKyAgZnJld2luZCBcJWMgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXdpbmQgYWdh aW4KKyAgd2hpbGUgbm90IFxmX2VvZihcJWMpIHsgICAgICAgICAgICAgOyBTYW1lIGRlYWwgYnV0 IHdpdGggY2hhcmFjdGVyIGkvbworICAgICAgLmMgOj0gXGZfZ2V0Y2hhcihcJWMpICAgICAgICAg ICA7IChtdWNoIHNsb3dlciB0aGFuIGxpbmUgaS9vKQorICAgICAgaWYgc3VjY2VzcyB4ZWNobyB7 XG0oYyl9CisgIH0KKyAgY2xvc2UgXCVjCisKKyAgIFRvIGNsb3NlIGFsbCBvcGVuIGZpbGVzIChl cXVpdmFsZW50IHRvIEZDTE9TRSBBTEwpOgorCisgIGZvciBcJWkgMCBcdihmX21heCktMSAxIHsK KyAgICAgIGlmIFxmX3N0YXR1cyhcJWkpIGZjbG9zZSBcJWkKKyAgfQorCisxLjIzLiBUaGUgRVhF QyBDb21tYW5kCisKKyAgIFRoZSBFWEVDIGNvbW1hbmQgaXMgYXZhaWxhYmxlIG9ubHkgaW4gVU5J WC4KKworICAgRVhFQyBbIC9SRURJUkVDVCBdIGNvbW1hbmQgWyBhcmcxIFsgYXJnMiBbIC4uLiBd IF0KKyAgICAgICAgICBSdW5zIHRoZSBnaXZlbiBjb21tYW5kIHdpdGggdGhlIGFyZ3VtZW50cyBp biBzdWNoIGEgd2F5IHRoYXQgdGhlCisgICAgICAgICAgY29tbWFuZCByZXBsYWNlcyBDLUtlcm1p dCBpbiBtZW1vcnksIGFuZCBDLUtlcm1pdCBjZWFzZXMgdG8KKyAgICAgICAgICBleGVjdXRlLiBF WEVDIGlzIGxpa2UgUlVOLCBleGNlcHQgaW5zdGVhZCBvZiByZXR1cm5pbmcgdG8KKyAgICAgICAg ICBDLUtlcm1pdCB3aGVuIGZpbmlzaGVkLCB0aGUgY29tbWFuZCByZXR1cm5zIHRvIHdoYXRldmVy IHByb2Nlc3MKKyAgICAgICAgICBpbnZva2VkIEtlcm1pdC4KKworICAgSW4gdGhlIG5vcm1hbCBj YXNlLCBubyBmaWxlcyBhcmUgY2xvc2VkLCBzbyB0aGUgRVhFQydkIGNvbW1hbmQgaW5oZXJpdHMK KyAgIHRoZSBvcGVuIGZpbGVzLCByZWFkL3dyaXRlIHBvaW50ZXJzLCB3b3JraW5nIGRpcmVjdG9y eSwgcHJvY2VzcyBJRCwKKyAgIHVzZXIgSUQgKHVubGVzcyBjb21tYW5kIGlzIFNVSUQpLCBncm91 cCBJRCAodW5sZXNzIGNvbW1hbmQgaXMgU0dJRCksCisgICBncm91cHMsIGV0Yy4gKEluIFVOSVgs IHRoZSBFWEVDIGNvbW1hbmQgaXMgc2ltcGx5IGEgZnJvbnQgZW5kIGZvcgorICAgZXhlY3ZwKCku KQorCisgICBJZiB0aGUgL1JFRElSRUNUIHN3aXRjaCBpcyBpbmNsdWRlZCwgdGhlbiBpZiBhIGNv bm5lY3Rpb24gaXMgb3BlbiAoU0VUCisgICBMSU5FIG9yIFNFVCBIT1NUKSwgaXQgYmVjb21lcyB0 aGUgc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dCBvZiB0aGUKKyAgIEVYRUMnZCBwcm9ncmFtLiBJ ZiBubyBjb25uZWN0aW9uIGlzIG9wZW4sIHRoZSAvUkVESVJFQ1Qgc3dpdGNoIGhhcyBubworICAg ZWZmZWN0LiBGb3IgZXhhbXBsZSB0byB1c2UgQy1LZXJtaXQgZm9yIFBQUCBkaWFsaW5nIGluIExp bnV4OgorCisgIHNldCBtb2RlbSB0eXBlIHVzciAgICAgICAgICA7IFNwZWNpZnkgdGhlIGtpbmQg b2YgbW9kZW0geW91IGhhdmUKKyAgc2V0IGxpbmUgL2Rldi90dHlTMSAgICAgICAgIDsgU3BlY2lm eSB0aGUgZGV2aWNlIGl0J3MgY29ubmVjdGVkIHRvCisgIHNldCBzcGVlZCA1NzYwMCAgICAgICAg ICAgICA7IGFuZCB0aGUgc3BlZWQKKyAgc2V0IGZsb3cgcnRzL2N0cyAgICAgICAgICAgIDsgYW5k IGZsb3cgY29udHJvbC4KKyAgc2V0IGRpYWwgcmV0cmllcyAxMDAgICAgICAgIDsgVHJ5IHRoZSBk aWFsIHNlcXVlbmNlIHVwIHRvIDEwMCB0aW1lcy4KKyAgZGlhbCB7ezktMjEyLTU1NS0xMjEyfXs5 LTIxMi01NTUtMTIxM317OS0yMTItNTU1LTEyMTR9ezktMjEyLTU1NS0xMjE1fX0KKyAgaWYgZmFp bCBleGl0IDEKKyAgZm9yIFwlaSAxIDE2IDEgeyAgICAgICAgICAgIDsgVHJ5IHVwIHRvIDE2IHRp bWVzIHRvIGdldCBsb2dpbiBwcm9tcHQKKyAgICAgIGlucHV0IDEwIExvZ2luOiAgICAgICAgIDsg V2FpdCAxMCBzZWMgZm9yIGl0IHRvIGFwcGVhcgorICAgICAgaWYgc3VjY2VzcyBicmVhayAgICAg ICAgOyBHb3QgaXQgLSBwcm9jZWVkLi4uCisgICAgICBvdXRwdXQgXDEzICAgICAgICAgICAgICA7 IFNlbmQgYSBjYXJyaWFnZSByZXR1cm4gYW5kIHRyeSBhZ2FpbgorICB9CisgIGlmICggPiBcJWkg MTYgKSBzdG9wIDEgTk8gTE9HSU4gUFJPTVBUCisgIGxpbmVvdXQgXChteXVzZXJpZCkgICAgICAg ICA7IFNlbmQgdXNlciBJRAorICBpbnB1dCAzMCBhc3N3b3JkOiAgICAgICAgICAgOyBXYWl0IGZv ciBQYXNzd29yZCBwcm9tcHQKKyAgaWYgZmFpbCBzdG9wIDEgTk8gUEFTU1dPUkQgUFJPTVBUCisg IGxpbmVvdXQgXG0obXlwYXNzd29yZCkgICAgICA7IFNlbmQgdGhlIHBhc3N3b3JkLgorICBleGVj IC9yZWRpcmVjdCBwcHBkICAgICAgICAgOyBSZXBsYWNlIG91cnNlbHZlcyB3aXRoIHBwcGQuCisK KyAgIEluIHRoaXMgZXhhbXBsZSB3ZSBhc3N1bWUgdGhhdCB0aGUgc2NyaXB0IGhhcyBhbHJlYWR5 IHNldCB1cCB0aGUKKyAgIG15dXNlcmlkIGFuZCBteXBhc3N3b3JkIHZhcmlhYmxlcyAtLSBub3Jt YWxseSB0aGUgcGFzc3dvcmQgc2hvdWxkIGJlCisgICBwcm9tcHRlZCBmb3IsIHJhdGhlciB0aGFu IHN0b3JlZCBvbiBkaXNrLiBOb3RpY2UgdGhlIGFkdmFudGFnZXMgb3ZlcgorICAgdGhlIHdlbGwt a25vd24gImNoYXQgc2NyaXB0IjoKKyAgICAgKiBZb3UgZG9uJ3QgaGF2ZSB0byBjb250cm9sIHRo ZSBtb2RlbSBpdHNlbGYgd2l0aCBBVCBjb21tYW5kczsKKyAgICAgICBLZXJtaXQncyBESUFMIGNv bW1hbmQgZG9lcyB0aGlzIGZvciB5b3UuCisgICAgICogWW91IGNhbiBoYXZlIEtlcm1pdCBhdXRv bWF0aWNhbGx5IHJlZGlhbCBhcyBtYW55IHRpbWVzIGFzIHlvdSB3YW50CisgICAgICAgdW50aWwg aXQgZ2V0cyBhIGNvbm5lY3Rpb24gKGlmIHRoaXMgaXMgbGVnYWwgaW4geW91ciBjb3VudHJ5KS4K KyAgICAgKiBZb3UgY2FuIGhhdmUgS2VybWl0IGZldGNoIHRoZSBudW1iZXIgb3IgbnVtYmVycyBm cm9tIGEgZGlhbGluZworICAgICAgIGRpcmVjdG9yeS4KKyAgICAgKiBZb3UgY2FuIGhhdmUgS2Vy bWl0IGN5Y2xlIHRocm91Z2ggYSBsaXN0IG9mIHBob25lIG51bWJlcnMgKHRoaXMgaXMKKyAgICAg ICBuZXcgaW4gQy1LZXJtaXQgNy4wOyBzZWUgWzM4OV1TZWN0aW9uIDIuMS4xNikgd2l0aG91dCBo YXZpbmcgdG8KKyAgICAgICBlbnRlciB0aGUgbnVtYmVycyBpbiBhIGRpYWxpbmcgZGlyZWN0b3J5 LgorICAgICAqIERpYWxpbmcgaXMgbG9jYXRpb24taW5kZXBlbmRlbnQ7IHlvdSBjYW4gdXNlIHRo ZSBzYW1lIHNjcmlwdCB0bworICAgICAgIGRpYWwgZnJvbSBkaWZmZXJlbnQgYXJlYXMgb3IgY291 bnRyaWVzLgorICAgICAqIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZSwgdGhlIGZ1bGwgcG93 ZXIgb2YgS2VybWl0J3Mgc2NyaXB0CisgICAgICAgbGFuZ3VhZ2UgaXMgYXZhaWxhYmxlIHRvIG1h bmFnZSB0aGUgZGlhbG9nIHdpdGggdGhlIHRlcm1pbmFsIHNlcnZlcgorICAgICAgIG9yIG90aGVy IGRldmljZSB0aGF0IGFuc3dlcnMgdGhlIHBob25lIGNhbGwuCisKKyAgIE5PVEU6IFBQUCBhbmQg U0xJUCBkaWFsaW5nIGFyZSBub3QgYXZhaWxhYmxlIGluIFdpbmRvd3MgOTUvOTgvTlQvMjAwMCwK KyAgIHdob3NlIEFQSXMgZG8gbm90IHByb3ZpZGUgYSBtZXRob2QgZm9yIGFuIGFwcGxpY2F0aW9u IHRvIGhhbmQgb3ZlciBhCisgICBjb25uZWN0aW9uIHRvIHRoZSBQUFAgb3IgU0xJUCBkcml2ZXIu CisKKzEuMjQuIEdldHRpbmcgS2V5d29yZCBMaXN0cyB3aXRoICc/JworCisgICBTdXBwb3NlIHlv dSB0eXBlICJ0ZSIgYXQgdGhlIEMtS2VybWl0PiA2LjAgcHJvbXB0IGFuZCB0aGVuIEVzYyBvciBU YWIKKyAgIHRvIHJlcXVlc3Qga2V5d29yZCBjb21wbGV0aW9uLiBLZXJtaXQgYmVlcHMsIGluZGlj YXRpbmcgdGhhdCBtb3JlIHRoYW4KKyAgIG9uZSBjb21tYW5kIHN0YXJ0cyB3aXRoICJ0ZSIuIEJ1 dCBpZiB5b3UgdHlwZSAnPycgdG8gc2VlIHdoYXQgdGhleSBhcmUsCisgICBLZXJtaXQgc2hvd3Mg b25seSAidGVsbmV0Ii4gU28gd2h5IHRoZSBiZWVwPyBCZWNhdXNlIG9mIGludmlzaWJsZQorICAg a2V5d29yZHMgbGlrZSAidGVsb3B0IiwgInRlcm1pbmFsIiwgYW5kICJ0ZXh0Ii4gTG90cyBvZiBr ZXl3b3JkcyBhcmUKKyAgIGludmlzaWJsZSBiZWNhdXNlIHRoZXkgYXJlIGVpdGhlciBzeW5vbnlt cyBmb3Igb3RoZXIga2V5d29yZHMgb3IgZWxzZQorICAgZXNvdGVyaWMgb3B0aW9ucyB0byBiZSB1 c2VkIG9ubHkgaW4gc3BlY2lhbCBjaXJjdW1zdGFuY2VzLCBzbyB3ZSBkb24ndAorICAgd2FudCB0 aGVtIGNsdXR0ZXJpbmcgdXAgdGhlIG1lbnVzLgorCisgICBCdXQgdGhlbiB0aGVyZSBpcyBubyB3 YXkgZm9yIHlvdSB0byBkaXNjb3ZlciB0aGVtLiBTbyBpbiBDLUtlcm1pdCA3LjAsCisgICBpZiB5 b3UgdHlwZSAnPycgQUZURVIgdGhlIGJlZ2lubmluZyBvZiBhIGtleXdvcmQgZmllbGQsIHRoZW4g aW52aXNpYmxlCisgICBrZXl3b3JkcyBhcmUgc2hvd24gdG9vOgorCisgIEMtS2VybWl0PiB0ZTxF c2M+PEJFRVA+CisgIEMtS2VybWl0PiB0ZT8gQ29tbWFuZCwgb25lIG9mIHRoZSBmb2xsb3dpbmc6 CisgICB0ZWxuZXQgICAgdGVsb3B0ICAgIHRlcm1pbmFsICB0ZXh0CisgIEMtS2VybWl0PnRlCisK KyAgIEJ1dCBpZiAnPycgaXMgdHlwZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkLCBvbmx5 IHZpc2libGUga2V5d29yZHMKKyAgIGFyZSBzaG93biwgYXMgYmVmb3JlIChzbywgaW4gdGhpcyBl eGFtcGxlLCBpZiAnPycgaXMgdHlwZWQgYXQgdGhlCisgICBDLUtlcm1pdD4gcHJvbXB0LCAidGVs bmV0IiBpcyB0aGUgb25seSBjb21tYW5kIHNob3duIHRoYXQgc3RhcnRzIHdpdGgKKyAgICJ0ZSIp LgorCisyLiBNQUtJTkcgQU5EIFVTSU5HIENPTk5FQ1RJT05TIFRoZSBTRVQgTElORSwgU0VUIEhP U1QsIGFuZCBTRVQgUE9SVCAoYQorc3lub255bSBmb3IgU0VUIExJTkUpIGNvbW1hbmRzIGhhdmUg bmV3IHN5bm9ueW1zLCBpbiB3aGljaCB0aGUgd29yZCBTRVQgaXMKK3JlcGxhY2VkIGJ5IHRoZSB3 b3JkIE9QRU46IE9QRU4gTElORSwgZXRjLiBUaGVyZSBpcyBubyBuZXcgZnVuY3Rpb25hbGl0eQor aGVyZSwgYnV0IE9QRU4gaXMgYSBiZXR0ZXIgdmVyYiwgc2luY2UgU0VUIGdlbmVyYWxseSB0YWtl cyBubyBhY3Rpb24sIHdoZXJlYXMKK3RoZXNlIGNvbW1hbmRzIGFjdHVhbGx5IHRyeSB0byBvcGVu IGEgY29ubmVjdGlvbi4gRnVydGhlcm1vcmUsIHRoZXJlIGlzIHRoZQorc3ltbWV0cnkgd2l0aCBD TE9TRS4gMi4wLiBTRVQgTElORSBhbmQgU0VUIEhPU1QgQ29tbWFuZCBTd2l0Y2hlc1RoZSBTRVQg TElORQorKFNFVCBQT1JUKSBhbmQgU0VUIEhPU1QgY29tbWFuZHMgbm93IGFsbG93IHN3aXRjaGVz IGJlZm9yZSB0aGUgZGV2aWNlIG9yIGhvc3QKK25hbWUsIGluIG1vc3QgY2FzZXMsIGFuZCB1bmRl ciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIGFsc28gYXQgdGhlIGVuZC4gVGhlCituZXcgc3ludGF4 IGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHN5bnRheDsgdGh1cyBT RVQgTElORSwKK1NFVCBQT1JULCBhbmQgU0VUIEhPU1QgY29tbWFuZHMgaW4gY29tbWFuZCBmaWxl cyB3cml0dGVuIGZvciBDLUtlcm1pdCA2LjAgb3IKK2VhcmxpZXIgc3RpbGwgd29yay4gVGhlIGV4 cGFuZGVkIHN5bnRheCBpczoKKworeyBPUEVOLCBTRVQgfSB7IExJTkUsIFBPUlQsIEhPU1QgfSBb IHN3aXRjaGVzIF0gZGV2aWNlLW9yLWFkZHJlc3MgWyBzd2l0Y2hlcworXQorCitUaGUgZmlyc3Qg Z3JvdXAgb2Ygc3dpdGNoZXMgaXM6CisKKyAgIC9ORVRXT1JLLVRZUEU6e1RDUC9JUCxYLjI1LFBJ UEUsUFRZLi4ufQorICAgICAgICAgIFdoZW4gbW9yZSB0aGFuIG9uZSBuZXR3b3JrIHR5cGUgaXMg YXZhaWxhYmxlLCB0aGlzIGxldHMgeW91CisgICAgICAgICAgc3BlY2lmeSB0aGUgdHlwZSBvZiBu ZXR3b3JrIHRvIHVzZSBmb3IgdGhpcyBjb25uZWN0aW9uIHdpdGhvdXQKKyAgICAgICAgICBhZmZl Y3RpbmcgeW91ciBnbG9iYWwgU0VUIE5FVFdPUksgVFlQRS4gU2VlIFszOTBdU2VjdGlvbiAyLjcK KyAgICAgICAgICBhYm91dCBwaXBlcyBhbmQgcHR5cy4KKworICAgL1VTRVJJRDpbc3RyaW5nXQor ICAgICAgICAgIFRoaXMgc3dpdGNoIGlzIGVxdWl2YWxlbnQgdG8gU0VUIExPR0lOIFVTRVJJRC4g SWYgYSBzdHJpbmcgaXMKKyAgICAgICAgICBnaXZlbiwgaXQgc2VudCB0byBob3N0IGR1cmluZyBU ZWxuZXQgbmVnb3RpYXRpb25zOyBpZiB0aGlzCisgICAgICAgICAgc3dpdGNoIGlzIGdpdmVuIGJ1 dCB0aGUgc3RyaW5nIGlzIG9taXR0ZWQsIG5vIHVzZXIgSUQgaXMgc2VudCB0bworICAgICAgICAg IHRoZSBob3N0LiBJZiB0aGlzIHN3aXRjaCBpcyBub3QgZ2l2ZW4sIHlvdXIgY3VycmVudCBMT0dJ TiBVU0VSSUQKKyAgICAgICAgICAoXHYodXNlcmlkKSB2YWx1ZSksIGlmIGFueSwgaXMgc2VudC4g VW5saWtlIG1vc3Qgb3RoZXIgc3dpdGNoZXMsCisgICAgICAgICAgdGhpcyBvbmUgaXMgInN0aWNr eSIsIHNpbmNlIHRoZSB2YWx1ZSBtdXN0IHBlcnNpc3QgdGhyb3VnaG91dAorICAgICAgICAgIHRo ZSBzZXNzaW9uIGluIGNhc2UgdGhlIHNlcnZlciByZXF1ZXN0cyB0aGUgSUQgc3RyaW5nIGF0IGEg bGF0ZXIKKyAgICAgICAgICB0aW1lLgorCisgICAvQ09OTkVDVAorICAgICAgICAgIEVudGVyIENP Tk5FQ1QgbW9kZSBpbW1lZGlhdGVseSBhbmQgYXV0b21hdGljYWxseSBhZnRlciB0aGUKKyAgICAg ICAgICBkZXZpY2Ugb3IgY29ubmVjdGlvbiBpcyBvcGVuLiBPbiBzZXJpYWwgZGV2aWNlcywgaG93 ZXZlciwgd2hlbgorICAgICAgICAgIENBUlJJRVItV0FUQ0ggaXMgbm90IE9GRiwgd2FpdCB1cCB0 byAxIHNlY29uZCBmb3IgdGhlIENhcnJpZXIKKyAgICAgICAgICBEZXRlY3Qgc2lnbmFsIHRvIGFw cGVhciBiZWZvcmUgdHJ5aW5nIHRvIGNvbm5lY3QsIHRvIGdpdmUgdGhlCisgICAgICAgICAgZGV2 aWNlIHRpbWUgdG8gcmVhY3QgRFRSLCB3aGljaCBtaWdodCBoYXZlIGJlZW4gb2ZmIHByaW9yIHRv CisgICAgICAgICAgb3BlbmluZyB0aGUgZGV2aWNlLgorCisgICAvU0VSVkVSCisgICAgICAgICAg RW50ZXIgc2VydmVyIG1vZGUgaW1tZWRpYXRlbHkgYW5kIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhl IGRldmljZQorICAgICAgICAgIG9yIGNvbm5lY3Rpb24gaXMgb3Blbi4gVHJlYXRtZW50IG9mIGNh cnJpZXIgaXMgdGhlIHNhbWUgYXMgZm9yCisgICAgICAgICAgL0NPTk5FQ1QuCisKKyAgIC9XQUlU CisgICAvTk9XQUlUCisgICAgICAgICAgRm9yIFRlbG5ldCBjb25uZWN0aW9ucyBvbmx5OiBMaWtl IFNFVCBURUxORVQgV0FJVCB7IE9OLCBPRkYgfSwKKyAgICAgICAgICBidXQgYXBwbGllcyBvbmx5 IHRvIHRoaXMgY29ubmVjdGlvbiwgYW5kIGluIGZhY3QgYXBwbGllcyBvbmx5CisgICAgICAgICAg d2hlbiBPUEVOaW5nIHRoaXMgY29ubmVjdGlvbiAod2hpY2ggaXMgdXN1YWxseSB0aGUgb25seSBw bGFjZSBpdAorICAgICAgICAgIG1hdHRlcnMpLiBUeXBpY2FsbHkgeW91IHdvdWxkIHVzZSBURUxO RVQgL05PV0FJVCB0byBtYWtlIGEKKyAgICAgICAgICBjb25uZWN0aW9uIHRvIGEgbWlzYmVoYXZp bmcgVGVsbmV0IHNlcnZlciB0aGF0IGRvZXMgbm90IHJlcGx5IHRvCisgICAgICAgICAgbmVnb3Rp YXRpb25zIGFzIHJlcXVpcmVkIGJ5IHRoZSBUZWxuZXQgcHJvdG9jb2wgZGVmaW5pdGlvbi4KKwor ICAgTm90ZTogL0NPTk5FQ1QgYW5kIC9TRVJWRVIgc3dpdGNoZXMgYXJlIG5vdCBhdmFpbGFibGUg aW4gdGhlIFJMT0dJTiBhbmQKKyAgIFRFTE5FVCBjb21tYW5kcywgc2luY2UgdGhlc2UgY29tbWFu ZHMgYWxyZWFkeSBpbmNsdWRlIGFuIGltcGxpY2l0CisgICAvQ09OTkVDVCBhbmQgcHJlY2x1ZGUg YXV0b21hdGljIGVudHJ5IGludG8gc2VydmVyIG1vZGUuCisKKyAgIFRoZSAvQ09OTkVDVCBhbmQg L1NFUlZFUiBzd2l0Y2hlcyBhcmUgZXNwZWNpYWxseSB1c2VmdWwgd2l0aCAic2V0IGhvc3QKKyAg ICoiIGNvbm5lY3Rpb25zLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3Ugd2FudCB0byBzdGFydCBh IEtlcm1pdCBzZXJ2ZXIKKyAgIG9uIHNvY2tldCAzMDAwIG9mIHlvdXIgVENQIGhvc3QuIE5vcm1h bGx5IHlvdSB3b3VsZCBoYXZlIHRvIGdpdmUgdGhlCisgICBjb21tYW5kOgorCisgIHNldCBob3N0 ICogMzAwMAorCisgICBhbmQgdGhlbiB3YWl0IGZvciBhIGNvbm5lY3Rpb24gdG8gY29tZSBpbiwg YW5kIG9ubHkgdGhlbiBjb3VsZCB5b3UgZ2l2ZQorICAgdGhlIFNFUlZFUiBjb21tYW5kIChvciBl bHNlIGRlZmluZSBhIG1hY3JvIHRvIGRvIHRoaXMsIGFuZCB0aGVuIGV4ZWN1dGUKKyAgIHRoZSBt YWNybykuIE5vdyB5b3UgY2FuIGRvIGl0IGluIG9uZSBzdGVwOgorCisgIHNldCBob3N0IC9zZXJ2 ZXIgKiAzMDAwCisKKyAgIFRoaXMgdGVsbHMgQy1LZXJtaXQgdG8gd2FpdCBmb3IgdGhlIGNvbm5l Y3Rpb24gYW5kIHRoZW4gZW50ZXIgc2VydmVyCisgICBtb2RlIG9uY2UgaXQgY29tZXMgaW4sIG5v IG1hdHRlciBob3cgbG9uZyBpdCB0YWtlcy4gU2ltaWxhcmx5LCAic2V0CisgICBob3N0IC9jb25u ICoiIGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIGEgImNoYXQiIGNvbm5lY3Rpb24gdG8gY29tZSBp bi4KKworICAgQW5vdGhlciBzZXQgb2Ygc3dpdGNoZXMgaXMgYXZhaWxhYmxlIGluIFZNUyBvbmx5 LCBmb3IgdXNlIG9ubHkgd2l0aCBTRVQKKyAgIExJTkU6CisKKyAgIC9TSEFSRQorICAgICAgICAg IEFsbG93cyB0aGUgU0VUIExJTkUgZGV2aWNlIHRvIGJlIG9wZW5lZCBpbiBzaGFyZWQgbW9kZS4g Tm9ybWFsbHkKKyAgICAgICAgICBpdCBtYWtlcyBubyBzZW5zZSB0byBvcGVuIGEgc2VyaWFsIGRl dmljZSBpbiBzaGFyZWQgbW9kZSwgYnV0CisgICAgICAgICAgaXQncyBuZWNlc3Nhcnkgd2hlbiBD LUtlcm1pdCBpcyBydW5uaW5nIGluIGFuIGVudmlyb25tZW50IHN1Y2gKKyAgICAgICAgICBhcyBE RUNJbnRhY3QsIHRoYXQgb3BlbnMgeW91ciBqb2IncyBjb250cm9sbGluZyB0ZXJtaW5hbCBpbiBz dWNoCisgICAgICAgICAgYSB3YXkgdGhhdCBDLUtlcm1pdCBjYW4ndCBvcGVuIGl0IHRvbywgdW5s ZXNzIGl0IGVuYWJsZXMgU0hBUkUKKyAgICAgICAgICBwcml2aWxlZ2UuIE5vdGU6IFNIQVJFIHBy aXZpbGVnZSBpcyByZXF1aXJlZC4KKworICAgL05PU0hBUkUKKyAgICAgICAgICBSZXF1aXJlcyB0 aGF0IHRoZSBTRVQgTElORSBkZXZpY2Ugbm90IGJlIGluIHVzZSBieSBhbnkgb3RoZXIKKyAgICAg ICAgICBwcm9jZXNzIGluIG9yZGVyIGZvciBpdCB0byBiZSBzdWNjZXNzZnVsbHkgb3BlbmVkIGJ5 IEMtS2VybWl0LgorICAgICAgICAgIElmIG5laXRoZXIgL1NIQVJFIG5vciAvTk9TSEFSRSBpcyBz cGVjaWZpZWQsIC9OT1NIQVJFIGlzIHVzZWQuCisKKyAgIFRoZSBzZWNvbmQgZ3JvdXAgb2Ygc3dp dGNoZXMgaXM6CisKKyAgIC9OTy1URUxORVQtSU5JVAorICAgICAgICAgIERvIG5vdCBzZW5kIGlu aXRpYWwgVGVsbmV0IG5lZ290aWF0aW9ucyBldmVuIGlmIHRoaXMgaXMgYSBUZWxuZXQKKyAgICAg ICAgICBwb3J0LgorCisgICAvUkFXLVNPQ0tFVAorICAgICAgICAgIFRoaXMgaXMgYSBjb25uZWN0 aW9uIHRvIGEgcmF3IFRDUCBzb2NrZXQgKFszOTFdU2VjdGlvbiAyLjMuNSkuCisKKyAgIC9STE9H SU4KKyAgICAgICAgICBVc2UgUmxvZ2luIHByb3RvY29sIGV2ZW4gaWYgdGhpcyBpcyBub3QgYW4g UmxvZ2luIHBvcnQuCisKKyAgIC9URUxORVQKKyAgICAgICAgICBTZW5kIGluaXRpYWwgVGVsbmV0 IG5lZ290aWF0aW9ucyBldmVuIGlmIHRoaXMgaXMgbm90IGEgVGVsbmV0CisgICAgICAgICAgcG9y dC4KKworICAgQXMgb2YgQy1LZXJtaXQgNy4wIGFuZCBLOTUgMS4xLjE5LCB0aGUgVEVMTkVUIGNv bW1hbmQgaW5jbHVkZXMgYW4KKyAgIGltcGxpY2l0IC9URUxORVQgc3dpdGNoLiBTbyBpZiB5b3Ug VEVMTkVUIHRvIGEgbm9uLVRFTE5FVCBwb3J0LCBLZXJtaXQKKyAgIHNlbmRzIGluaXRpYWwgVGVs bmV0IG5lZ290aWF0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZSwgc2luY2UgdGhhdCdzIHdoYXQKKyAg ICJ0ZWxuZXQiIG1lYW5zLgorCisgICBJZiB5b3Ugd2FudCB0byBtYWtlIGEgY29ubmVjdGlvbiB0 byBhIG5vbi1UZWxuZXQgcG9ydCB3aXRob3V0IHNlbmRpbmcKKyAgIGluaXRpYWwgVGVsbmV0IG5l Z290aWF0aW9ucywgdXNlOgorCisgIHNldCBob3N0IFsgL2Nvbm5lY3QgXSBuYW1lLW9yLWFkZHJl c3MgcG9ydAorCisgICBvcjoKKworICB0ZWxuZXQgbmFtZS1vci1hZGRyZXNzIHBvcnQgL25vLXRl bG5ldC1pbml0CisKKyAgIEFkZGl0aW9uYWwgc3dpdGNoZXMgbWlnaHQgYmUgYWRkZWQgaW4gdGhl IGZ1dHVyZTsgdHlwZSAic2V0IGhvc3QgPyIgb3IKKyAgICJzZXQgbGluZSA/IiB0byBzZWUgYSBj dXJyZW50IGxpc3QuCisKKzIuMS4gRGlhbGluZworCisgICBBdXRvbWF0aWMgcmVkaWFsaW5nIGlz IGlsbGVnYWwgb3IgcmVzdHJpY3RlZCBpbiBtYW55IGNvdW50cmllcywgc28KKyAgIHVudGlsIEMt S2VybWl0IDcuMCwgaXQgd2FzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGkuZS4gdW50aWwgYSBTRVQg RElBTAorICAgUkVUUklFUyBjb21tYW5kIHdhcyBnaXZlbi4gSW4gQy1LZXJtaXQgNy4wLCBpZiBu byBTRVQgRElBTCBSRVRSSUVTCisgICBjb21tYW5kIGhhcyBiZWVuIGdpdmVuLCBhIGRlZmF1bHQg aXMgcGlja2VkIGR5bmFtaWNhbGx5IGF0IERJQUwgdGltZQorICAgYmFzZWQgb24gdGhlIGNhbGxp bmcgY291bnRyeSBjb2RlLCBpZiBrbm93bi4gQXQgdGhpcyB3cml0aW5nLCB0aGUgb25seQorICAg Y291bnRyeSBjb2RlIGtub3duIHRvIGhhdmUgbm8gcmVzdHJpY3Rpb25zIG9uIGF1dG9tYXRpYyBy ZWRpYWxpbmcgaXMgMS4KKyAgIFNvIGluIHRoaXMgY2FzZSBhIGxpbWl0IG9mIDEwIGlzIGNob3Nl bjsgb3RoZXJ3aXNlIDEuIElmIHlvdSBoYXZlIG5vdAorICAgZ2l2ZW4gYW4gZXhwbGljaXQgU0VU IERJQUwgUkVUUklFUyBjb21tYW5kLCBTSE9XIERJQUwgc2hvd3MgdGhlIHZhbHVlCisgICBhcyAi KGF1dG8pIiwgYW5kIHRoZW4gdGhlIHZhbHVlIGFjdHVhbGx5IHVzZWQgaXMgc2hvd24gd2hlbiB5 b3UgZ2l2ZQorICAgdGhlIERJQUwgY29tbWFuZC4KKworICAgQXMgb2YgQy1LZXJtaXQgNy4wLCBh dXRvbWF0aWMgcmVkaWFsaW5nIGlzIGF1dG9tYXRpY2FsbHkgY2FuY2VsZWQgaWYKKyAgIHRoZSBj YWxsIGNvdWxkIG5vdCBiZSBwbGFjZWQgYmVjYXVzZSBubyBkaWFsdG9uZSB3YXMgZGV0ZWN0ZWQu CisKKzIuMS4xLiBUaGUgRGlhbCBSZXN1bHQgTWVzc2FnZQorCisgICBJZiBESUFMIERJU1BMQVkg aXMgbm90IE9OLCB0aGUgIkNhbGwgY29tcGxldGUiIG1lc3NhZ2Ugbm93IHNob3dzIHRoZQorICAg bW9kZW0ncyBjYWxsIHJlc3VsdCBtZXNzYWdlLCBmb3IgZXhhbXBsZToKKworICBEaWFsaW5nOiAu Li4KKyAgQ2FsbCBjb21wbGV0ZTogIkNPTk5FQ1QgMzEyMDAvQVJRL1YzMi9MQVBNL1Y0MkJJUyIK KworICAgVGhlIGV4YWN0IGZvcm1hdCBhbmQgY29udGVudHMgb2YgdGhpcyBtZXNzYWdlLCBvZiBj b3Vyc2UsIGRlcGVuZHMgb24KKyAgIHRoZSBtYWtlLCBtb2RlbCwgYW5kIGNvbmZpZ3VyYXRpb24g b2YgeW91ciBtb2RlbSwgc28gdXNlIHlvdXIgbW9kZW0KKyAgIG1hbnVhbCB0byBpbnRlcnByZXQg aXQuIFRoZSBjYWxsIHJlc3VsdCBtZXNzYWdlIGlzIGFsc28gYXZhaWxhYmxlIGluCisgICBDLUtl cm1pdCdzIFx2KGRpYWxyZXN1bHQpIHZhcmlhYmxlLgorCisgIEMtS2VybWl0PiBlY2hvIFx2KGRp YWxyZXN1bHQpCisgIENPTk5FQ1QgMzEyMDAvQVJRL1YzMi9MQVBNL1Y0MkJJUworICBDLUtlcm1p dD4gZWNobyBTcGVlZCA9IFxmd29yZChcdihkaWFscmVzdWx0KSwyKQorICBTcGVlZCA9IDMxMjAw CisgIEMtS2VybWl0PgorCisgICBTdXBwb3NlIHlvdXIgbW9kZW0gcmVwb3J0cyB0aGUgbW9kdWxh dGlvbiBzcGVlZCBhcyBzaG93biBhYm92ZSBhbmQgeW91CisgICB3YW50IHRvIGVuc3VyZSB5b3Vy IGNhbGwgaXMgY29tcGxldGVkIGF0IChzYXkpIDI0MDAwIGJwcyBvciBtb3JlLiBZb3UKKyAgIGNh biB1c2UgYSBsaXR0bGUgbWFjcm8gdG8gZG8gdGhlIGpvYjoKKworZGVmaW5lIEhTRElBTCB7ICAg ICAgICAgICAgICAgIDsgSGlnaCBTcGVlZCBESUFMCisgICAgbG9jYWwgXCVzCisgICAgaWYgPCBc dihhcmdjKSAxIGlmIG5vdCBkZWYgXHYoZGlhbG51bWJlcikgZW5kIDEgVXNhZ2U6IFwlMCBudW1i ZXIKKyAgICBzZXQgZGlhbCByZXRyaWVzIDEwMAorICAgIHNldCBkaWFsIGludGVydmFsIDEKKyAg ICB3aGlsZSB0cnVlIHsKKyAgICAgICAgZGlhbCBcJSoKKyAgICAgICAgaWYgZmFpbCBlbmQgMSBE SUFMIGZhaWxlZC4KKyAgICAgICAgYXNnIFwlcyBcZndvcmQoXHYoZGlhbHJlc3VsdCksMikKKyAg ICAgICAgaWYgZGVmIFwlcyBpZiBudW1lcmljIFwlcyBpZiBub3QgPCBcJXMgMjQwMDAgYnJlYWsK KyAgICB9Cit9CisKKyAgIChTZWUgWzM5Ml1TZWN0aW9uIDcuNSBhYm91dCB0aGUgXCUqIHZhcmlh YmxlLikKKworMi4xLjIuIExvbmctRGlzdGFuY2UgRGlhbGluZyBDaGFuZ2VzCisKKyAgIER1ZSB0 byB0aGUgZ2x1dCBvZiBjZWxsIHBob25lcywgcGFnZXJzLCBmYXggbWFjaGluZXMsIElTUHMsIGV0 YywgYXJlYQorICAgY29kZXMgYW5kIGRpYWxpbmcgcnVsZXMgYXJlIGNoYW5naW5nIGFsbCB0aGUg dGltZS4gSW4gdGhlIE5vcnRoCisgICBBbWVyaWNhbiBOdW1iZXJpbmcgUGxhbiAoTkFOUCkgY291 bnRyaWVzIChVU0EsIENhbmFkYSwgZXRjKSwgYXJlYSBjb2RlcworICAgYXJlIHNwbGl0IG9yIG92 ZXJsYXllZCB3aXRoIGluY3JlYXNpbmcgZnJlcXVlbmN5LCBhbmQgMTAtIGFuZCAxMS1kaWdpdAor ICAgZGlhbGluZyBpcyBncmFkdWFsbHkgYmVjb21pbmcgdGhlIG5vcm0gZm9yIGxvY2FsIGNhbGxz LiBDaGFuZ2VzIGFyZQorICAgb2NjdXJyaW5nIEluIEV1cm9wZSwgdG9vLCBwYXJ0bHkgZm9yIHRo ZXNlIHJlYXNvbnMgYW5kIHBhcnRseSBiZWNhdXNlCisgICBvZiBzb21lIG5ldyBFQyBydWxlcy4K KworICAgSW4gRnJhbmNlLCBlZmZlY3RpdmUgMTggT2N0b2JlciAxOTk2LCBhbGwgY2FsbHMsIGV2 ZW4gbG9jYWwgb25lcywgbXVzdAorICAgYmUgZGlhbGVkIHdpdGggYW4gYXJlYSBjb2RlLiBGcmVu Y2ggYXJlYSBjb2RlcyBhcmUgcHJlc2VudGx5IDEtZGlnaXQKKyAgIG51bWJlcnMsIDEtNiwgYW5k IHRoZSBsb25nLWRpc3RhbmNlIGRpYWxpbmcgcHJlZml4IGlzIDAuIEFsbCBjYWxscworICAgd2l0 aGluIEZyYW5jZSBhcmUgY29uc2lkZXJlZCBsb25nIGRpc3RhbmNlIGFuZCBiZWdpbiB3aXRoIDAx LCAwMiwgLi4uLAorICAgMDYuCisKKyAgIEVmZmVjdGl2ZSAxIE1heSAxOTk3LCBhbGwgY2FsbHMg d2l0aGluIHRoZSBVUyBzdGF0ZSBvZiBNYXJ5bGFuZCwgZXZlbgorICAgbG9jYWwgb25lcywgbXVz dCBiZSBkaWFsZWQgd2l0aCBhbiBhcmVhIGNvZGUgYnV0IHdpdGhvdXQgdGhlCisgICBsb25nLWRp c3RhbmNlIHByZWZpeCAtLSB0aGlzIGlzIHRoZSBub3cgd2lkZWx5LWtub3duIE5vcnRoIEFtZXJp Y2FuCisgICBwaGVub21lbm9uIG9mICJ0ZW4gZGlnaXQgZGlhbGluZyIuIFRoZSBzYW1lIGlzIGhh cHBlbmluZyBlbHNld2hlcmUgLS0KKyAgIG1hbnkgY2l0aWVzIGluIEZsb3JpZGEgYWRvcHRlZCAx MC1kaWdpdCBkaWFsaW5nIGluIDE5OTguCisKKyAgIEluIEl0YWx5IGJlZ2lubmluZyAxOSBKdW5l IDE5OTgsIGFsbCBjYWxscyB0byBmaXhlZCAoYXMgb3Bwb3NlZCB0bworICAgbW9iaWxlKSBudW1i ZXJzIG11c3QgYmUgcHJlZml4ZWQgYnkgMC4gV2hlbiBjYWxsaW5nIGludG8gSXRhbHkgZnJvbQor ICAgb3V0c2lkZSwgdGhlIDAgbXVzdCBmb2xsb3cgdGhlIGNvdW50cnkgY29kZSAoMzkpLiBDYWxs cyB0byBjZWxsIHBob25lcywKKyAgIGhvd2V2ZXIsIG11c3QgYmUgcGxhY2VkIHdpdGhvdXQgdGhl IDAuIFRoZW4gb24gMjkgRGVjZW1iZXIgMjAwMCwgdGhlIDAKKyAgIHdpbGwgYmVjb21lIGEgNCAo Zm9yIGNhbGxpbmcgZml4ZWQgbnVtYmVycykgYW5kIGEgcHJlZml4IG9mIDMgbXVzdCB1c2VkCisg ICBmb3IgY2FsbGluZyBtb2JpbGUgcGhvbmVzLiBNb3JlIGluZm8gYXQ6CisgICBodHRwOi8vd3d3 LnRlbGVjb21pdGFsaWEuaXQvbnBubi8uCisKKyAgIEluIFNwYWluLCBlZmZlY3RpdmUgNCBBcHJp bCAxOTk4LCB3aXRoIGhhcmQgY3V0b3ZlciBvbiAxOCBKdWx5IDE5OTgsCisgICBhbGwgY2FsbHMg d2l0aGluIHRoZSBjb3VudHJ5IG11c3QgYmUgZGlhbGVkIHdpdGggOSBkaWdpdHMsIGFuZCBhbGwK KyAgIGNhbGxzIGZyb20gb3V0c2lkZSBTcGFpbiBtdXN0IGFsc28gYmUgZGlhbGVkIHdpdGggOSBk aWdpdHMgKGFmdGVyIHRoZQorICAgY291bnRyeSBjb2RlLCAzNCkuIFRoZSBuZXcgOS1kaWdpdCBu dW1iZXJzIGFsbCBiZWdpbiB3aXRoICI5Ii4gTW9yZQorICAgaW5mbyBhdDogWzM5M11odHRwOi8v d3d3LnRlbGVmb25pY2EuZXMvY2FtYmlvZGVudW1lcmFjaW9uLworCisgICBTZXZlcmFsIG5ldyBk aWFsaW5nIGZlYXR1cmVzIGFuZCBjb21tYW5kcyBoYXZlIGJlZW4gYWRkZWQgaW4gdmVyc2lvbgor ICAgNi4xIGFuZCA3LjAgdG8gYWRkcmVzcyB0aGVzZSBjaGFuZ2VzLgorCisgICBDLUtlcm1pdCA2 LjAgYW5kIEtlcm1pdCA5NSAxLjEuMTEgYW5kIGVhcmxpZXIgaGFuZGxlIHRoZSBGcmVuY2gKKyAg IHNpdHVhdGlvbiB2aWEgYSByZWFzb25hYmxlIHN1YnRlcmZ1Z2UgKHNldHRpbmcgdGhlIGxvY2Fs IGFyZWEgY29kZSB0byBhCisgICBub25leGlzdGVudCBvbmUpLCBidXQgZGlkIG5vdCBoYW5kbGUg InRlbi1kaWdpdCBkaWFsaW5nIiB3ZWxsIGF0IGFsbDsKKyAgIHRoZSByZWNvbW1lbmRlZCB0ZWNo bmlxdWUgd2FzIHRvIGNoYW5nZSB0aGUgbG9uZy1kaXN0YW5jZSBkaWFsaW5nCisgICBwcmVmaXgg dG8gbm90aGluZywgYnV0IHRoaXMgZGVmZWF0ZWQgS2VybWl0J3MgImxpc3QgbnVtYmVycyBmb3Ig b25lCisgICBuYW1lIiBmZWF0dXJlIHdoZW4gdGhlIG51bWJlcnMgd2VyZSBpbiBkaWZmZXJlbnQg bG9jYXRpb25zLiBGb3IKKyAgIGV4YW1wbGU6CisKKyAgc2V0IGRpYWwgbGQtcHJlZml4CisgIGRp YWwgb25saW5lc2VydmljZQorCisgICB3aGVyZSAib25saW5lc2VydmljZSIgaXMgYSBkaWFsaW5n IGRpcmVjdG9yeSBlbnRyeSBuYW1lIGNvcnJlc3BvbmRpbmcKKyAgIHRvIGVudHJpZXMgdGhhdCBh cmUgaW4gKHNheSkgTWFyeWxhbmQgYXMgd2VsbCBhcyBvdGhlciBzdGF0ZXMsIHdvdWxkCisgICBu b3QgY29ycmVjdGx5IGRpYWwgdGhlIG51bWJlcnMgbm90IGluIE1hcnlsYW5kLgorCisgICBBIG5l dyBjb21tYW5kIGxldHMgeW91IHNwZWNpZnkgYSBsaXN0IG9mIGFyZWEgY29kZXMgdG8gYmUgY29u c2lkZXJlZAorICAgbG9jYWwsIGV4Y2VwdCB0aGF0IHRoZSBhcmVhIGNvZGUgbXVzdCBiZSBkaWFs ZWQ6CisKKyAgIFNFVCBESUFMIExDLUFSRUEtQ09ERVMgWyBhcmVhY29kZSBbIGFyZWFjb2RlIFsg YXJlYWNvZGUgWyAuLi4gXSBdIF0gXQorICAgICAgICAgIFRoZSBsaXN0IG1heSBpbmNsdWRlIHVw IHRvIDMyIGFyZWEgY29kZXMuIElmIGEgbnVtYmVyIGlzIGNhbGxlZAorICAgICAgICAgIHdob3Nl IGFyZWEgY29kZSBpcyBpbiB0aGlzIGxpc3QsIGl0IGlzIGRpYWxlZCBXSVRIT1VUIHRoZQorICAg ICAgICAgIGxvbmctZGlzdGFuY2UgcHJlZml4LCBidXQgV0lUSCB0aGUgYXJlYSBjb2RlLgorCisg ICBTbyBpbiBNYXJ5bGFuZCwgd2hpY2ggKGxhc3QgdGltZSB3ZSBsb29rZWQpIGhhcyB0d28gYXJl YSBjb2RlcywgNDEwIGFuZAorICAgMzAxLCB0aGUgc2V0dXAgd291bGQgYmU6CisKKyAgU0VUIERJ QUwgTEMtQVJFQS1DT0RFUyA0MTAgMzAxCisKKyAgIEV4YW1wbGU6CisKKyAgU0VUIERJQUwgTEQt UFJFRklYIDEKKyAgU0VUIERJQUwgQVJFQS1DT0RFIDMwMQorICBTRVQgRElBTCBMQy1BUkVBLUNP REVTIDQxMCAzMDEgPC0tIEFyZWEgY29kZXMgaW4gMTAtZGlnaXQgZGlhbGluZyByZWdpb24KKyAg RElBTCArMSAoMzAxKSA3NjUtNDMyMSAgICAgICAgIDwtLSBEaWFscyAzMDE3NjU0MzIxICAobG9j YWwgd2l0aCBhcmVhIGNvZGUpCisgIERJQUwgKzEgKDQxMCkgNzY1LTQzMjEgICAgICAgICA8LS0g RGlhbHMgNDEwNzY1NDMyMSAgKGxvY2FsIHdpdGggYXJlYSBjb2RlKQorICBESUFMICsxICgyMTIp IDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDEyMTI3NjU0MzIxIChsb25nIGRpc3RhbmNlKQor CisgICBUaGUgU0VUIERJQUwgTEMtQVJFQS1DT0RFUyBjb21tYW5kIGRvZXMgbm90IHJlcGxhY2Ug dGhlIFNFVCBESUFMCisgICBBUkVBLUNPREUgY29tbWFuZC4gVGhlIGxhdHRlciBzcGVjaWZpZXMg dGhlIGFyZWEgY29kZSB5b3UgYXJlIGRpYWxpbmcKKyAgIGZyb20uIElmIHRoZSBjYWxsZWQgbnVt YmVyIGlzIGluIHRoZSBzYW1lIGFyZWEgY29kZSwgdGhlbiB0aGUgYXJlYSBjb2RlCisgICBpcyBk aWFsZWQgaWYgaXQgaXMgYWxzbyBpbiB0aGUgTEMtQVJFQS1DT0RFUyBsaXN0LCBhbmQgaXQgaXMg bm90IGRpYWxlZAorICAgb3RoZXJ3aXNlLiBTbyBpZiAiMzAxIiBoYWQgbm90IGFwcGVhcmVkIGlu IHRoZSBMQy1BUkVBLUNPREVTIGxpc3QgaW4KKyAgIHRoZSBwcmV2aW91cyBleGFtcGxlOgorCisg IFNFVCBESUFMIExELVBSRUZJWCAxCisgIFNFVCBESUFMIEFSRUEtQ09ERSAzMDEKKyAgU0VUIERJ QUwgTEMtQVJFQS1DT0RFUyA0MTAgICAgIDwtLSBBcmVhIGNvZGVzIGluIDEwLWRpZ2l0IGRpYWxp bmcgcmVnaW9uCisgIERJQUwgKzEgKDMwMSkgNzY1LTQzMjEgICAgICAgICA8LS0gRGlhbHMgNzY1 NDMyMSAgICAgKGxvY2FsKQorICBESUFMICsxICg0MTApIDc2NS00MzIxICAgICAgICAgPC0tIERp YWxzIDQxMDc2NTQzMjEgIChsb2NhbCB3aXRoIGFyZWEgY29kZSkKKyAgRElBTCArMSAoMjEyKSA3 NjUtNDMyMSAgICAgICAgIDwtLSBEaWFscyAxMjEyNzY1NDMyMSAobG9uZyBkaXN0YW5jZSkKKwor ICAgVGhlIG5ldyBLZXJtaXQgdmVyc2lvbnMgYWxzbyBhZGQgYSBMb2NhbCBDYWxsIFByZWZpeCBh bmQgTG9jYWwgQ2FsbAorICAgU3VmZml4LCBpbiBjYXNlIHlvdSBoYXZlIGFueSBuZWVkIGZvciBp dC4gVGhlc2UgYXJlIGFkZGVkIHRvIHRoZQorICAgYmVnaW5uaW5nIGFuZCBvZiBsb2NhbCBwaG9u ZSBudW1iZXJzIChpLmUuIG51bWJlcnMgdGhhdCBhcmUgbm90CisgICBsb25nLWRpc3RhbmNlIG9y IGludGVybmF0aW9uYWwpLiBFeGFtcGxlczoKKworICBTRVQgRElBTCBMRC1QUkVGSVggMQorICBT RVQgRElBTCBMQy1QUkVGSVggOQorICBTRVQgRElBTCBMQy1TVUZGSVggKgorICBTRVQgRElBTCBM Qy1BUkVBLUNPREVTIDQxMCAgICAgPC0tIEFyZWEgY29kZXMgaW4gMTAtZGlnaXQgZGlhbGluZyBy ZWdpb24KKyAgU0VUIERJQUwgQVJFQS1DT0RFIDMwMQorICBESUFMICsxICgzMDEpIDc2NS00MzIx ICAgICAgICAgPC0tIERpYWxzIDk3NjU0MzIxKiAgICAgKGxvY2FsKQorICBESUFMICsxICg0MTAp IDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDk0MTA3NjU0MzIxKiAgKGxvY2FsIHdpdGggYXJl YSBjb2RlKQorICBESUFMICsxICgyMTIpIDc2NS00MzIxICAgICAgICAgPC0tIERpYWxzIDEyMTI3 NjU0MzIxICAgKGxvbmcgZGlzdGFuY2UpCisKKzIuMS4zLiBGb3JjaW5nIExvbmctRGlzdGFuY2Ug RGlhbGluZworCisgICBTdXBwb3NlIGEgbnVtYmVyIGlzIGluIHlvdXIgY291bnRyeSBhbmQgYXJl YSwgYnV0IGZvciBzb21lIHJlYXNvbiB5b3UKKyAgIG5lZWQgdG8gZGlhbCBpdCBsb25nLWRpc3Rh bmNlIGFueXdheSAoYXMgaXMgYWx3YXlzIHRoZSBjYXNlIGluIEZyYW5jZSkuCisgICBUaGVyZSBo YXZlIGFsd2F5cyBiZWVuIHZhcmlvdXMgd2F5cyB0byBoYW5kbGUgdGhpczoKKworICAgIDEuIFRl bXBvcmFyaWx5IHNldCB5b3VyIGFyZWEgY29kZSB0byBhIGRpZmZlcmVudCAob3Igbm9uZXhpc3Rl bnQgb3IKKyAgICAgICBpbXBvc3NpYmxlKSBvbmUgKGJ1dCB0aGlzIHJlcXVpcmVkIGtub3dsZWRn ZSBvZiB3aGljaCBhcmVhIGNvZGVzCisgICAgICAgd2VyZSBub25leGlzdGVudCBvciBpbXBvc3Np YmxlIGluIGVhY2ggY291bnRyeSkuCisgICAgMi4gRGlhbCB0aGUgbnVtYmVyIGxpdGVyYWxseSBp bnN0ZWFkIG9mIHVzaW5nIHRoZSBwb3J0YWJsZSBmb3JtYXQsIGJ1dAorICAgICAgIHRoaXMgZGVm ZWF0cyB0aGUgcHVycG9zZSBvZiB0aGUgcG9ydGFibGUgZGlhbGluZyBkaXJlY3RvcnkuCisKKyAg IE5vdyB0aGVyZSBpcyBhbHNvIGEgbmV3IGNvbW1hbmQgdGhhdCwgdmVyeSBzaW1wbHksIGNhbiBm b3JjZQorICAgbG9uZy1kaXN0YW5jZSBkaWFsaW5nOgorCisgICBTRVQgRElBTCBGT1JDRS1MT05H LURJU1RBTkNFIHsgT04sIE9GRiB9CisgICAgICAgICAgSWYgYSBjYWxsIGlzIHBsYWNlZCB0byBh IHBvcnRhYmxlIHBob25lIG51bWJlciB3aXRoaW4gdGhlIHNhbWUKKyAgICAgICAgICBjb3VudHJ5 IGNvZGUgYXMgdGhlIGNhbGxpbmcgbnVtYmVyLCBpdCBpcyBkaWFsZWQgd2l0aCB0aGUKKyAgICAg ICAgICBsb25nLWRpc3RhbmNlIHByZWZpeCBhbmQgdGhlIGFyZWEgY29kZSBpZiBGT1JDRS1MT05H LURJU1RBTkNFIGlzCisgICAgICAgICAgT04uIElmIE9GRiwgdGhlIHJlZ3VsYXIgcnVsZXMgYW5k IHByb2NlZHVyZXMgYXBwbHkuCisKKyAgIEV4YW1wbGUgKEZyYW5jZSk6CisKKyAgU0VUIERJQUwg Q09VTlRSWS1DT0RFIDMzCisgIFNFVCBESUFMIEFSRUEtQ09ERSA2CisgIFNFVCBESUFMIEZPUkNF LUxPTkctRElTVEFOQ0UgT04KKworICAgKEluIGZhY3QsIFNFVCBESUFMIENPVU5UUlktQ09ERSAz MyBhdXRvbWF0aWNhbGx5IHNldHMgRElBTAorICAgRk9SQ0UtTE9ORy1ESVNUQU5DRSBPTi4uLikK KworICAgRXhhbXBsZSAoVVNBLCBmb3IgYSBjZXJ0YWluIHR5cGUgb2YgcmV2ZXJzZS1jaGFyZ2Ug Y2FsbGluZyBpbiB3aGljaCB0aGUKKyAgIGNhbGxlZCBudW1iZXIgbXVzdCBhbHdheXMgYmUgZnVs bHkgc3BlY2lmaWVkKToKKworICBTRVQgRElBTCBQUkVGSVggMTgwMDI2NjYzMjgkICAgICA7IDEt ODAwLUNPTExFQ1QKKyAgU0VUIERJQUwgQ09VTlRSWS1DT0RFIDEKKyAgU0VUIERJQUwgQVJFQS1D T0RFIDIxMgorICBTRVQgRElBTCBGT1JDRS1MT05HLURJU1RBTkNFIE9OCisKKyAgIEV4YW1wbGUg KFRvcm9udG8sIHdoZXJlIGNhbGxzIHRvIGV4Y2hhbmdlIDk3NiB3aXRoaW4gYXJlYSBjb2RlIDQx NiBtdXN0CisgICBiZSBkaWFsZWQgYXMgbG9uZyBkaXN0YW5jZSwgZXZlbiB3aGVuIHlvdSBhcmUg ZGlhbGluZyBmcm9tIGFyZWEgY29kZQorICAgNDE2KToKKworICBTRVQgRElBTCBDT1VOVFJZLUNP REUgMQorICBTRVQgRElBTCBBUkVBLUNPREUgNDE2CisgIFNFVCBESUFMIEZPUkNFLUxPTkctRElT VEFOQ0UgT04KKyAgRElBTCArMSAoNDE2KSA5NzYteHh4eAorCisgICBJZiBkaWFsaW5nIG1ldGhv ZHMgd2VyZSBjb25zaXN0ZW50IGFuZCBzZW5zaWJsZSwgb2YgY291cnNlIGl0IHdvdWxkIGJlCisg ICBwb3NzaWJsZSB0byBhbHdheXMgZGlhbCBldmVyeSBkb21lc3RpYyBjYWxsIGFzIGlmIGl0IHdl cmUgbG9uZworICAgZGlzdGFuY2UuIEJ1dCBpbiBtYW55IGxvY2F0aW9ucyB0aGlzIGRvZXNuJ3Qg d29yayBvciBpZiBpdCBkb2VzLCBpdAorICAgY29zdHMgZXh0cmEuIFRoZSBmb2xsb3dpbmcgbWFj cm8gY2FuIGJlIHVzZWQgZm9yIGRpYWxpbmcgYW55IGdpdmVuCisgICBudW1iZXIgd2l0aCBmb3Jj ZWQgbG9uZy1kaXN0YW5jZSBmb3JtYXQ6CisKKyAgZGVmaW5lIExESUFMIHsKKyAgICAgIGxvY2Fs IFwleAorICAgICAgc2V0IGRpYWwgZm9yY2UtbG9uZy1kaXN0YW5jZSBvbgorICAgICAgZGlhbCBc JSoKKyAgICAgIGFzZyBcJXggXHYoc3VjY2VzcykKKyAgICAgIHNldCBkaWFsIGZvcmNlLWxvbmct ZGlzdGFuY2Ugb2ZmCisgICAgICBlbmQgXCV4CisgIH0KKworICAgKFNlZSBbMzk0XVNlY3Rpb24g Ny41IGFib3V0IHRoZSBcJSogdmFyaWFibGUuKQorCisyLjEuNC4gRXhjaGFuZ2UtU3BlY2lmaWMg RGlhbGluZyBEZWNpc2lvbnMKKworICAgVGhpcyBhcHBsaWVzIG1haW5seSB0byB0aGUgTm9ydGgg QW1lcmljYW4gTnVtYmVyaW5nIFBsYW4gKE5BTlApLiBSZWZlcgorICAgdG8gdGhlIHNlY3Rpb24g IkFsdGVybmF0aXZlIG5vdGF0aW9ucyIgaW4gWzM5NV1Vc2luZyBDLUtlcm1pdCAybmQKKyAgIEVk aXRpb24sIHBhZ2VzIDEwNi0xMDcsIGFuZCB0aGUgc3RvcnkgYWJvdXQgVG9yb250byBvbiBwYWdl IDExMC4gVXNpbmcKKyAgIHRoZSBuZXcgTEMtQVJFQS1DT0RFUyBsaXN0LCB3ZSBjYW4gYWRkcmVz cyB0aGUgcHJvYmxlbSBieSB0cmVhdGluZyB0aGUKKyAgIGV4Y2hhbmdlIGFzIHBhcnQgb2YgdGhl IGFyZWEgY29kZToKKworICBTRVQgRElBTCBMRC1QUkVGSVggMQorICBTRVQgRElBTCBBUkVBLUNP REUgNDE2CisgIFNFVCBESUFMIExDLUFSRUEtQ09ERVMgOTA1Mjc2CisgIERJQUwgKzEgNDE2IDc2 NSA0MzIxICAgICAgICAgICAgICAgPC0tIDc2NTQzMjEgICAgICAobG9jYWwpCisgIERJQUwgKzEg OTA1IDI3NiA0MzIxICAgICAgICAgICAgICAgPC0tIDkwNTI3NjQzMjEgICAobG9jYWwgd2l0aCBh cmVhIGNvZGUpCisgIERJQUwgKzEgOTA1IDUyOCA0MzIxICAgICAgICAgICAgICAgPC0tIDE5MDU1 Mjg0MzIxICAobG9uZyBkaXN0YW5jZSkKKworICAgVGhlIHNhbWUgdGVjaG5pcXVlIGNhbiBiZSB1 c2VkIGluIE1hc3NhY2h1c2V0dHMgKHN0b3J5IGF0IHRvcCBvZiBwYWdlCisgICAxMTEpIGFuZCBp biBhbnkgb3RoZXIgcGxhY2Ugd2hlcmUgZGlhbGluZyB0byBzb21lIGV4Y2hhbmdlcyB3aXRoaW4g YQorICAgcGFydGljdWxhciBhcmVhIGNvZGUgaXMgbG9jYWwsIGJ1dCB0byBvdGhlcnMgaW4gdGhl IHNhbWUgYXJlYSBjb2RlIGlzCisgICBsb25nIGRpc3RhbmNlLgorCisyLjEuNS4gQ2F1dGlvbnMg YWJvdXQgQ2hlYXBlc3QtRmlyc3QgRGlhbGluZworCisgICBLZXJtaXQgZG9lcyBub3QgbWFpbnRh aW4gYSBrbm93bGVkZ2UgYmFzZSBvZiB0ZWxlcGhvbnkgaW5mb3JtYXRpb247IGl0CisgICBvbmx5 IHByb3ZpZGVzIHRoZSB0b29scyB0byBsZXQgeW91IGVudGVyIGEgcGhvbmUgbnVtYmVyIGluIGEg c3RhbmRhcmQKKyAgIGZvcm1hdCBhbmQgZGlhbCBpdCBjb3JyZWN0bHkgZnJvbSBhbnkgbG9jYXRp b24gaW4gbW9zdCBjYXNlcy4KKworICAgSW4gcGFydGljdWxhciwgS2VybWl0IGRvZXMgbm90IGRp ZmZlcmVudGlhdGUgdGhlIGNoYXJnaW5nIG1ldGhvZCBmcm9tCisgICB0aGUgZGlhbGluZyBtZXRo b2QuIElmIGEgY2FsbCB0aGF0IGlzIERJQUxFRCBhcyBsb25nLWRpc3RhbmNlIChlLmcuCisgICBm cm9tIDIxMiB0byA3MTggaW4gY291bnRyeSBjb2RlIDEpIGlzIG5vdCBDSEFSR0VEIGFzIGxvbmcg ZGlzdGFuY2UsIHdlCisgICBoYXZlIG5vIHdheSBvZiBrbm93aW5nIHRoYXQgd2l0aG91dCBrZWVw aW5nIGEgbWF0cml4IG9mIGNoYXJnaW5nCisgICBpbmZvcm1hdGlvbiBmb3IgZXZlcnkgYXJlYS1j b2RlIGNvbWJpbmF0aW9uIHdpdGhpbiBldmVyeSBjb3VudHJ5LCBhbmQKKyAgIGFueSBzdWNoIG1h dHJpeCB3b3VsZCBiZSBvYnNvbGV0ZSBmaXZlIG1pbnV0ZXMgYWZ0ZXIgaXQgd2FzCisgICBjb25z dHJ1Y3RlZC4gVGh1cywgImNoZWFwZXN0LWZpcnN0IiBzb3J0aW5nIGlzIG9ubHkgYXMgcmVsaWFi bGUgYXMgb3VyCisgICBhc3N1bXB0aW9uIHRoYXQgdGhlIGNoYXJnaW5nIG1ldGhvZCBmb2xsb3dz IHRoZSBkaWFsaW5nIG1ldGhvZC4gQSBnb29kCisgICBpbGx1c3RyYXRpb24gd291bGQgYmUgY2Vy dGFpbiBvbmxpbmUgc2VydmljZXMgdGhhdCBoYXZlIHRvbGwtZnJlZQorICAgZGlhbHVwIG51bWJl cnMgd2hpY2ggdGhleSBjaGFyZ2UgeW91IGEgcHJlbWl1bSAoaW4geW91ciBvbmxpbmUgc2Vydmlj ZQorICAgYmlsbCkgZm9yIHVzaW5nLgorCisyLjEuNi4gQmxpbmQgRGlhbGluZyAoRGlhbGluZyB3 aXRoIE5vIERpYWx0b25lKQorCisgICBDLUtlcm1pdCdzIGluaXQgc3RyaW5nIGZvciBIYXllcy1s aWtlIG1vZGVtcyBnZW5lcmFsbHkgaW5jbHVkZXMgYW4gWDQKKyAgIGNvbW1hbmQgdG8gZW5hYmxl IGFzIG1hbnkgcmVzdWx0IGNvZGVzIGFzIHBvc3NpYmxlLCBzbyB0aGF0IEtlcm1pdCBjYW4KKyAg IHJlYWN0IGFwcHJvcHJpYXRlbHkgdG8gZGlmZmVyZW50IGZhaWx1cmUgcmVhc29ucy4gT25lIG9m IHRoZSByZXN1bHQKKyAgIGNvZGVzIHRoYXQgWDQgZW5hYmxlcyBpcyAiTk8gRElBTFRPTkUiLiBB IHBlcmhhcHMgbm90IG9idmlvdXMgc2lkZQorICAgZWZmZWN0IG9mIGVuYWJsaW5nIHRoaXMgcmVz dWx0IGNvZGUgdGhhdCB0aGUgbW9kZW0gbXVzdCBoZWFyIGRpYWx0b25lCisgICBiZWZvcmUgaXQg d2lsbCBkaWFsLgorCisgICBJdCBpcyBiZWNvbWluZyBpbmNyZWFzaW5nbHkgbmVjZXNzYXJ5IHRv IGZvcmNlIGEgbW9kZW0gdG8gZGlhbCBldmVuCisgICB0aG91Z2ggaXQgZG9lcyBub3QgaGVhciBh IGRpYWx0b25lIG9uIHRoZSBwaG9uZSBsaW5lOyBmb3IgZXhhbXBsZSwgd2l0aAorICAgUEJYcyB0 aGF0IGhhdmUgc3RyYW5nZSBkaWFsdG9uZXMsIG9yIHdpdGggcGhvbmUgc3lzdGVtcyBpbiBkaWZm ZXJlbnQKKyAgIGNvdW50cmllcywgb3Igd2l0aCBJU0ROIHBob25lcywgZXRjLiBUaGlzIGlzIGNh bGxlZCAiYmxpbmQgZGlhbGluZyIuCisKKyAgIEMtS2VybWl0IDcuMCBoYXMgdHdvIG5ldyBjb21t YW5kcyB0byBjb3BlIHdpdGggdGhpcyBzaXR1YXRpb246CisKKyAgIFNFVCBESUFMIElHTk9SRS1E SUFMVE9ORSB7IE9OLCBPRkYgfQorICAgICAgICAgIE9GRiAodGhlIGRlZmF1bHQpIG1lYW5zIHRv IHRlbGwgdGhlIG1vZGVtIHRvIHdhaXQgZm9yIGRpYWx0b25lCisgICAgICAgICAgYmVmb3JlIGRp YWxpbmcuIE9OIG1lYW5zIHRvIGVuYWJsZSAiYmxpbmQgZGlhbGluZyIsIGkuZS4gdGVsbAorICAg ICAgICAgIHRoZSBtb2RlbSBOT1QgdG8gd2FpdCBmb3IgZGlhbHRvbmUgYmVmb3JlIGRpYWxpbmcu IEdlbmVyYWxseQorICAgICAgICAgIHRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IHNlbmRpbmcgQVRY MyB0byB0aGUgbW9kZW0ganVzdCBwcmlvciB0bworICAgICAgICAgIGRpYWxpbmcuIFNFVCBNT0RF TSBUWVBFIHh4eCBhbmQgdGhlbiBTSE9XIE1PREVNIGRpc3BsYXlzCisgICAgICAgICAgS2VybWl0 J3MgYnVpbHQtaW4gImlnbm9yZSBkaWFsdG9uZSIgY29tbWFuZC4KKworICAgU0VUIERJQUwgQ09N TUFORCBJR05PUkUtRElBTFRPTkUgdGV4dAorICAgICAgICAgIFRoaXMgbGV0cyB5b3UgY2hhbmdl IHRoZSBidWlsdC1pbiBpZ25vcmUtZGlhbHRvbmUgY29tbWFuZCAoc3VjaAorICAgICAgICAgIGFz IEFUWDMpIHRvIHdoYXRldmVyIHlvdSBjaG9vc2UsIGluIGNhc2UgdGhlIGJ1aWx0LWluIG9uZSBk b2VzCisgICAgICAgICAgbm90IHdvcmssIG9yIGFub3RoZXIgY29tbWFuZCB3b3JrcyBiZXR0ZXIu CisKKyAgIE5vdGVzOgorICAgIDEuIFRoZSBpZ25vcmUtZGlhbHRvbmUgY29tbWFuZCBpcyBub3Qg c2VudCB1bmxlc3MgU0VUIERJQUwKKyAgICAgICBJR05PUkUtRElBTFRPTkUgaXMgT04uCisgICAg Mi4gVGhlIEFUWDMgY29tbWFuZCBnZW5lcmFsbHkgZGlzYWJsZXMgbm90IG9ubHkgTk8gRElBTFRP TkUsIGJ1dCBhbHNvCisgICAgICAgQlVTWS4gU28gdGhpcyB3aWxsIHByZXZlbnQgS2VybWl0IGZy b20gZGV0ZWN0aW5nIHdoZW4gdGhlIGxpbmUgaXMKKyAgICAgICBidXN5LiBUaGlzIGlzIGEgcHJv cGVydHkgb2YgdGhlIG1vZGVtLCBub3Qgb2YgS2VybWl0LgorCisyLjEuNy4gVHJpbW1pbmcgdGhl IERpYWxpbmcgRGlhbG9nCisKKyAgIFRoZSBjb21tYW5kOgorCisgIFNFVCBNT0RFTSBDT01NQU5E IGFjdGlvbiBbIGNvbW1hbmQgXQorCisgICBpcyB1c2VkIHRvIG92ZXJyaWRlIEtlcm1pdCdzIGJ1 aWx0LWluIG1vZGVtIGNvbW1hbmRzIGZvciBlYWNoIGFjdGlvbiwKKyAgIGZvciBlYWNoIGtpbmQg b2YgbW9kZW0gaW4gaXRzIGludGVybmFsIGRhdGFiYXNlLiBJZiB5b3UgaW5jbHVkZSBhCisgICBj b21tYW5kLCB0aGlzIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4gb25lLiBJZiB5b3Ug b21pdCB0aGUKKyAgIGNvbW1hbmQsIHRoaXMgcmVzdG9yZXMgdGhlIG9yaWdpbmFsIGJ1aWx0LWlu IGNvbW1hbmQuCisKKyAgIElmIHlvdSB3YW50IHRvIG9taXQgdGhlIGNvbW1hbmQgYWx0b2dldGhl ciwgc28gS2VybWl0IGRvZXNuJ3Qgc2VuZCB0aGUKKyAgIGNvbW1hbmQgYXQgYWxsLCBvciB3YWl0 IGZvciBhIHJlc3BvbnNlLCB1c2U6CisKKyAgU0VUIE1PREVNIENPTU1BTkQgYWN0aW9uIHt9CisK KyAgIFRoYXQgaXMsIHNwZWNpZnkgYSBwYWlyIG9mIGVtcHR5IGJyYWNlcyBhcyB0aGUgY29tbWFu ZCwgZm9yIGV4YW1wbGU6CisKKyAgU0VUIE1PREVNIENPTU1BTkQgRVJST1ItQ09SUkVDVElPTiBP TiB7fQorCisyLjEuOC4gQ29udHJvbGxpbmcgdGhlIERpYWxpbmcgU3BlZWQKKworICAgVGhlIHJh dGUgYXQgd2hpY2ggY2hhcmFjdGVycyBhcmUgc2VudCB0byB0aGUgbW9kZW0gZHVyaW5nIGRpYWxp bmcgaXMKKyAgIG5vcm1hbGx5IGNvbnRyb2xsZWQgYnkgdGhlIGJ1aWx0LWluIG1vZGVtIGRhdGFi YXNlLiBZb3UgbWlnaHQgd2FudCB0bworICAgb3ZlcnJpZGUgdGhpcyBpZiBLZXJtaXQgc2VlbXMg dG8gYmUgZGlhbGluZyB0b28gc2xvd2x5LCBvciBpdCBpcworICAgc2VuZGluZyBjaGFyYWN0ZXJz IHRvIHRoZSBtb2RlbSBmYXN0ZXIgdGhhbiB0aGUgbW9kZW0gaGFuZGxlIHRoZW0uIEEKKyAgIG5l dyBjb21tYW5kIHdhcyBhZGRlZCBmb3IgdGhpcyBpbiBDLUtlcm1pdCA3LjA6CisKKyAgIFNFVCBE SUFMIFBBQ0lORyBudW1iZXIKKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBtaWxs aXNlY29uZHMgKHRob3VzYW5kdGhzIG9mIHNlY29uZHMpIHRvCisgICAgICAgICAgcGF1c2UgYmV0 d2VlbiBlYWNoIGNoYXJhY3RlciB3aGVuIHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIG1vZGVtCisg ICAgICAgICAgZHVyaW5nIERJQUwgb3IgQU5TV0VSIGNvbW1hbmQgZXhlY3V0aW9uLiAwIG1lYW5z IG5vIHBhdXNlIGF0CisgICAgICAgICAgYWxsLCAtMSAodGhlIGRlZmF1bHQpIG9yIGFueSBvdGhl ciBuZWdhdGl2ZSBudW1iZXIgbWVhbnMgdG8gdXNlCisgICAgICAgICAgdGhlIHZhbHVlIGZyb20g dGhlIGRhdGFiYXNlLiBBbnkgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIGlzIHRoZQorICAgICAgICAg IG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gcGF1c2UuCisKKyAgIEhJTlQ6IFlvdSBtaWdodCBh bHNvIG5lZWQgdG8gY29udHJvbCB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgbW9kZW0KKyAgIGdlbmVy YXRlcyBUb3VjaCBUb25lcyBkdXJpbmcgZGlhbGluZywgZm9yIGV4YW1wbGUgd2hlbiBzZW5kaW5n IGEKKyAgIG51bWVyaWMgcGFnZS4gVGhlcmUgYXJlIHR3byB3YXlzIHRvIGRvIHRoaXMuIE9uZSB3 YXkgaXMgdG8gaW5zZXJ0IHBhdXNlCisgICBjaGFyYWN0ZXJzIGludG8gdGhlIGRpYWxpbmcgc3Ry aW5nLiBGb3IgbW9kZW1zIHRoYXQgdXNlIHRoZSBBVCBjb21tYW5kCisgICBzZXQsIHRoZSBwYXVz ZSBjaGFyYWN0ZXIgaXMgY29tbWEgKCwpIGFuZCBjYXVzZXMgYSAyLXNlY29uZCBwYXVzZS4gT24K KyAgIG1vc3QgbW9kZW1zLCB5b3UgY2FuIHVzZSB0aGUgUzggcmVnaXN0ZXIgdG8gY2hhbmdlIHRo ZSBwYXVzZSBpbnRlcnZhbAorICAgY2F1c2VkIGJ5IGNvbW1hIGluIHRoZSBkaWFsaW5nIHN0cmlu Zy4gVGhlIG90aGVyIHdheSBpcyB0byBzZXQgeW91cgorICAgbW9kZW0ncyB0b25lIGdlbmVyYXRp b24gaW50ZXJ2YWwsIGlmIGl0IGhhcyBhIGNvbW1hbmQgZm9yIHRoYXQuIE1vc3QKKyAgIEFULWNv bW1hbmQtc2V0IG1vZGVtcyB1c2UgUzExIGZvciB0aGlzOyB0aGUgdmFsdWUgaXMgaW4gbWlsbGlz ZWNvbmRzLgorICAgRm9yIGV4YW1wbGUgb24gVVNSIG1vZGVtczoKKworICBBVFMxMT0yMDAKKwor ICAgc2VsZWN0cyBhbiBpbnRlcnZhbCBvZiAyMDAgbWlsbGlzZWNvbmRzIHRvIHNlcGFyYXRlIGVh Y2ggZGlhbGluZyB0b25lLgorCisgICBIaW50OiBUbyBhZGQgUy1SZWdpc3RlciBzZXR0aW5ncyBv ciBvdGhlciBjb21tYW5kcyB0byB5b3VyIGRpYWxpbmcKKyAgIHByb2NlZHVyZSwgdXNlIHRoZSBu ZXcgU0VUIE1PREVNIENPTU1BTkQgUFJFRElBTC1JTklUIGNvbW1hbmQKKyAgIChbMzk2XVNlY3Rp b24gMi4yLjIpLgorCisyLjEuOS4gUHJldGVzdGluZyBQaG9uZSBOdW1iZXIgQ29udmVyc2lvbnMK KworICAgVGhlIExPT0tVUCBjb21tYW5kIG5vdyBhY2NlcHRzIHRlbGVwaG9uZSBudW1iZXJzIGFz IHdlbGwgYXMKKyAgIGRpcmVjdG9yeS1lbnRyeSBuYW1lcywgZm9yIGV4YW1wbGU6CisKKyAgTE9P S1VQICsxICgyMTIpIDc2NTQzMjEKKworICAgV2hlbiBnaXZlbiBhIHBob25lIG51bWJlciwgTE9P S1VQIHByaW50cyB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgdGhlCisgICBwaG9uZSBudW1iZXIg Zm9yIGRpYWxpbmcgdW5kZXIgdGhlIGN1cnJlbnQgZGlhbGluZyBydWxlcy4gRm9yIGV4YW1wbGUs CisgICBpZiBteSBjb3VudHJ5IGNvZGUgaXMgMSBhbmQgbXkgYXJlYSBjb2RlIGlzIDIxMiwgYW5k IEkgYW0gZGlhbGluZyBvdXQKKyAgIGZyb20gYSBQQlggd2hvc2Ugb3V0c2lkZS1saW5lIHByZWZp eCBpcyAiOTMsIjoKKworICBDLUtlcm1pdD4gbG9va3VwICsxICgyMTIpIDc2NTQzMjEKKyAgKzEg KDIxMikgNzY1NDMyMSA9PiA5Myw3NjU0MzIxCisgIEMtS2VybWl0PgorCisgICBZb3UgY2FuIGFs c28gdXNlIHRoZSBcZmRpYWxjb252ZXJ0KHBob25lLW51bWJlcikgZnVuY3Rpb24gKFszOTddU2Vj dGlvbgorICAgMi4xLjExKSB0byBkbyB0aGlzIHByb2dyYW1tYXRpY2FsbHk6CisKKyAgQy1LZXJt aXQ+IGVjaG8gIlxmZGlhbGNvbnZlcnQoKzEgKDIxMikgNzY1NDMyMSkiCisgICI5Myw3NjU0MzIx IgorICBDLUtlcm1pdD4KKworICAgU28gdGhlIG5ldyBMT09LVVAgYmVoYXZlcyBhcyBmb2xsb3dz OgorCisgICBMT09LVVAgcG9ydGFibGUtZm9ybWF0LXBob25lLW51bWJlcgorICAgICAgICAgIERp c3BsYXlzIGhvdyB0aGUgbnVtYmVyIHdvdWxkIGFjdHVhbGx5IGJlIGRpYWxlZCBTZXRzIEZBSUxV UkUgaWYKKyAgICAgICAgICB0aGVyZSB3YXMgYSBjb252ZXJzaW9uIGVycm9yLCBvdGhlcndpc2Ug U1VDQ0VTUy4KKworICAgTE9PS1VQIGxpdGVyYWwtZm9ybWF0LXBob25lLW51bWJlcgorICAgICAg ICAgIERpc3BsYXlzIHRoZSBzYW1lIGxpdGVyYWwtZm9ybWF0LXBob25lLW51bWJlciBBbHdheXMg c2V0cworICAgICAgICAgIFNVQ0NFU1MuCisKKyAgIExPT0tVUCBkaWFsaW5nLWRpcmVjdG9yeS1u YW1lCisgICAgICAgICAgRGlzcGxheXMgYWxsIG1hdGNoaW5nIGVudHJpZXMgYW5kIGNvbnZlcnRz IHBvcnRhYmxlIHBob25lCisgICAgICAgICAgbnVtYmVycy4gU2V0cyBTVUNDRVNTIGlmIGF0IGxl YXN0IG9uZSBlbnRyeSB3YXMgZm91bmQsIG90aGVyd2lzZQorICAgICAgICAgIEZBSUxVUkUuCisK KyAgIExPT0tVUCA9YW55dGhpbmcKKyAgICAgICAgICBEaXNwbGF5cyAiPWFueXRoaW5nIiBhbmQg c2V0cyBTVUNDRVNTLgorCisgICBUaGVyZSBpcywgYXQgcHJlc2VudCwgbm8gcHJvZ3JhbW1hdGlj IHdheSB0byBmZXRjaCBudW1iZXJzIGZyb20gdGhlCisgICBkaWFsaW5nIGRpcmVjdG9yeS4gVGhp cyB3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIGEgZnV0dXJlIHJlbGVhc2UuCisKKzIuMS4xMC4gR3Jl YXRlciBDb250cm9sIG92ZXIgUGFydGlhbCBEaWFsaW5nCisKKyAgIFRoZSBmb2xsb3dpbmcgcnVs ZXMgbm93IGFwcGx5IHRvIHBhcnRpYWwgZGlhbGluZzoKKworICAgICAqIFBob25lIG51bWJlciB0 cmFuc2Zvcm1hdGlvbnMgYmFzZWQgb24gY291bnRyeSBhbmQgYXJlYSBjb2RlLAorICAgICAgIGFw cGxpY2F0aW9uIG9mIHByZWZpeGVzLCBldGMsIGFyZSBwZXJmb3JtZWQgb25seSBvbiB0aGUgZmly c3QKKyAgICAgICBQRElBTC4KKyAgICAgKiBFYWNoIFBESUFMIGFyZ3VtZW50IGlzIGxvb2tlZCB1 cCBpbiB0aGUgZGlhbGluZyBkaXJlY3RvcnksIHNvIGl0IGlzCisgICAgICAgcG9zc2libGUgaGF2 ZSBkaXJlY3RvcnkgZW50cmllcyBmb3IgcGllY2VzIG9mIHBob25lIG51bWJlcnMgb3IKKyAgICAg ICBvdGhlciBpbmZvcm1hdGlvbi4KKyAgICAgKiBTdWZmaXhlcyBhcmUgbm90IGFwcGxpZWQgYXV0 b21hdGljYWxseSwgc2luY2UgdGhlcmUgaXMgbm8gd2F5IGZvcgorICAgICAgIEMtS2VybWl0IHRv IGtub3cgaW4gd2hpY2ggUERJQUwgc2VnbWVudCB5b3Ugd2FudCB0aGVtIHRvIGJlCisgICAgICAg YXBwbGllZC4KKworICAgSG93ZXZlciwgdGhlIHN1ZmZpeCB0aGF0ICp3b3VsZCogaGF2ZSBiZWVu IGFwcGxpZWQsIGJhc2VkIG9uIHRoZQorICAgZGlhbGluZyBydWxlcyB0aGF0IHdlcmUgaW52b2tl ZCB3aGVuIHByb2Nlc3NpbmcgdGhlIGZpcnN0IFBESUFMCisgICBjb21tYW5kLCBpcyBzdG9yZWQg aW4gdGhlIHZhcmlhYmxlOgorCisgIFx2KGRpYWxzdWZmaXgpCisKKyAgIHdoaWNoIHlvdSBjYW4g aW5jbHVkZSBpbiBhbnkgc3Vic2VxdWVudCBQRElBTCBvciBESUFMIGNvbW1hbmRzLgorCisgICBF eGFtcGxlOgorCisgIHBkaWFsIHtcbShteV9sb25nX2Rpc3RhbmNlX3BhZ2VyX251bWJlcl9wYXJ0 XzEpfQorICBwZGlhbCB7XG0obXlfbG9uZ19kaXN0YW5jZV9wYWdlcl9udW1iZXJfcGFydF8yKX0K KyAgcGRpYWwge1x2KGRpYWxzdWZmaXgpfQorICBwZGlhbCB7XG0obXlfbG9uZ19kaXN0YW5jZV9w YWdlcl9udW1iZXJfcGFydF8zKX0KKyAgcGRpYWwge0BcbShudW1lcmljX3BhZ2VyX2NvZGUpI30K KworMi4xLjExLiBOZXcgRElBTC1yZWxhdGVkIFZhcmlhYmxlcyBhbmQgRnVuY3Rpb25zCisKKyAg IFxmZGlhbGNvbnZlcnQocykKKyAgICAgICAgICBzIGlzIGEgcGhvbmUgbnVtYmVyIGluIGVpdGhl ciBsaXRlcmFsIG9yIHBvcnRhYmxlIGZvcm1hdCAobm90IGEKKyAgICAgICAgICBkaWFsaW5nIGRp cmVjdG9yeSBlbnRyeSBuYW1lKS4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRpYWwKKyAgICAg ICAgICBzdHJpbmcgdGhhdCB3b3VsZCBhY3R1YWxseSBiZSB1c2VkIGJ5IHRoZSBESUFMIGNvbW1h bmQgd2hlbgorICAgICAgICAgIGRpYWxpbmcgZnJvbSB0aGUgY3VycmVudCBsb2NhdGlvbiwgYWZ0 ZXIgcHJvY2Vzc2luZyBjb3VudHJ5CisgICAgICAgICAgY29kZSwgYXJlYSBjb2RlLCBhbmQgb3Ro ZXIgU0VUIERJQUwgdmFsdWVzLCBhbmQgc2hvdWxkIGJlIHRoZQorICAgICAgICAgIHNhbWUgYXMg dGhlIHJlc3VsdCBvZiBMT09LVVAgd2hlbiBnaXZlbiBhIHRlbGVwaG9uZSBudW1iZXIuCisKKyAg IFx2KGRpYWxzdWZmaXgpCisgICAgICAgICAgQ29udGFpbnMgdGhlIHN1ZmZpeCwgaWYgYW55LCB0 aGF0IHdhcyBhcHBsaWVkIGluIHRoZSBtb3N0IHJlY2VudAorICAgICAgICAgIERJQUwgY29tbWFu ZCwgb3IgdGhlIHN1ZmZpeCB0aGF0IHdvdWxkIGhhdmUgYmVlbiBhcHBsaWVkIGluIHRoZQorICAg ICAgICAgIG1vc3QgcmVjZW50IFBESUFMIGNvbW1hbmQuIFVzZSB0aGlzIHZhcmlhYmxlIHRvIHNl bmQgdGhlIGRpYWwKKyAgICAgICAgICBzdWZmaXggYXQgYW55IGRlc2lyZWQgcG9pbnQgaW4gYSBQ RElBTCBzZXF1ZW5jZS4KKworICAgXHYoZGlhbHR5cGUpCisgICAgICAgICAgQSBudW1iZXIgaW5k aWNhdGluZyB0aGUgdHlwZSBvZiBjYWxsIHRoYXQgd2FzIG1vc3QgcmVjZW50bHkKKyAgICAgICAg ICBwbGFjZWQuIENhbiBiZSB1c2VkIGFmdGVyIGEgbm9ybWFsIERJQUwgY29tbWFuZCwgb3IgYWZ0 ZXIgdGhlCisgICAgICAgICAgZmlyc3QgUERJQUwgY29tbWFuZCBpbiBhIFBESUFMIHNlcXVlbmNl LiBWYWx1ZXMgYXJlOgorCisgIC0yOiBVbmtub3duIGJlY2F1c2UgVEFQSSBoYW5kbGVkIHRoZSBw aG9uZSBudW1iZXIgdHJhbnNsYXRpb24uCisgIC0xOiBVbmtub3duIGJlY2F1c2Ugc29tZSBraW5k IG9mIGVycm9yIG9jY3VycmVkLgorICAgMDogSW50ZXJuYWwgd2l0aGluIFBCWC4KKyAgIDE6IFRv bGwtZnJlZS4KKyAgIDI6IExvY2FsIHdpdGhpbiBjYWxsaW5nIGFyZWEuCisgICAzOiBVbmtub3du IChlLmcuIGJlY2F1c2UgYSBsaXRlcmFsLWZvcm1hdCBwaG9uZSBudW1iZXIgd2FzIGdpdmVuKS4K KyAgIDQ6IExvbmcgZGlzdGFuY2Ugd2l0aGluIGNvdW50cnkuCisgICA1OiBJbnRlcm5hdGlvbmFs CisKKyAgIFx2KGRpYWxjb3VudCkKKyAgICAgICAgICBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUg RElBTCByZXRyeSBjb3VudGVyLCBmb3IgdXNlIGluIGEgRElBTAorICAgICAgICAgIG1hY3JvIChb Mzk4XVNlY3Rpb24gMi4xLjEzKS4KKworICAgXHYoZCRweCkKKyAgICAgICAgICBQQlggRXhjaGFu Z2UgKHNlZSBbMzk5XVNlY3Rpb24gMi4xLjEyKS4KKworICAgT3RoZXIgZGlhbC1yZWxhdGVkIHZh cmlhYmxlcywgYWxyZWFkeSBkb2N1bWVudGVkIGluIFs0MDBdVXNpbmcgQy1LZXJtaXQKKyAgIChv ciBvdGhlciBzZWN0aW9ucyBvZiB0aGlzIGRvY3VtZW50LCBlLmcuIFs0MDFdU2VjdGlvbiAyLjEu MSksIGluY2x1ZGUKKyAgIFx2KGRpYWxudW1iZXIpLCBcdihkaWFsc3RhdHVzKSwgZXRjLiBBIGNv bnZlbmllbnQgd2F5IHRvIGRpc3BsYXkgYWxsIG9mCisgICB0aGVtIGlzOgorCisgIHNob3cgdmFy aWFibGUgZGlhbCAgOyBoaW50OiBhYmJyZXZpYXRlICJzaG8gdmFyIGRpYWwiCisKKyAgIFRoaXMg c2hvd3MgdGhlIHZhbHVlcyBvZiBhbGwgdGhlIHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBzdGFydCB3 aXRoCisgICAiZGlhbCIuIEFsc28gInNob3cgdmFyaWFibGUgZCQiICh0byBzaG93IHRoZSBcdihk JC4uLikgdmFyaWFibGVzKS4KKworMi4xLjEyLiBJbmNyZWFzZWQgRmxleGliaWxpdHkgb2YgUEJY IERpYWxpbmcKKworICAgUmVmZXIgdG8gWzQwMl1Vc2luZyBDLUtlcm1pdCwgMm5kIEVkaXRpb24s IHBhZ2VzIDEwNy0xMDguIFJlY2FsbCB0aGF0CisgICB0aHJlZSBjb21tYW5kcyBhcmUgbmVlZGVk IHRvIGNvbmZpZ3VyZSBDLUtlcm1pdCBmb3IgZGlhbGluZyBmcm9tIGEgUEJYOgorCisgIFNFVCBE SUFMIFBCWC1FWENIQU5HRSBudW1iZXIKKyAgU0VUIERJQUwgUEJYLUlOU0lERS1QUkVGSVggbnVt YmVyCisgIFNFVCBESUFMIFBCWC1PVVRTSURFLVBSRUZJWCBudW1iZXIKKworICAgVW5mb3J0dW5h dGVseSwgdGhpcyBtb2RlbCBkb2VzIG5vdCBhY2NvbW1vZGF0ZSBQQlhzIHRoYXQgaGF2ZSBtb3Jl IHRoYW4KKyAgIG9uZSBleGNoYW5nZS4gRm9yIGV4YW1wbGUgb3VyIFBCWCBhdCBDb2x1bWJpYSBV bml2ZXJzaXR5ICh3aGljaCBtdXN0CisgICBoYW5kbGUgbW9yZSB0aGFuIDEwLDAwMCBwaG9uZXMp IGhhcyA4NTMteHh4eCBhbmQgODU0LXh4eHggZXhjaGFuZ2VzLgorCisgICBCZWdpbm5pbmcgaW4g Qy1LZXJtaXQgNy4wLCB0aGUgU0VUIERJQUwgUEJYLUVYQ0hBTkdFIGNvbW1hbmQgYWNjZXB0cyBh CisgICBsaXN0IG9mIGV4Y2hhbmdlcywgZS5nLjoKKworICBTRVQgRElBTCBQQlgtRVhDSEFOR0Ug ODUzIDg1NAorCisgICAobXVsdGlwbGUgZXhjaGFuZ2VzIGFyZSBzZXBhcmF0ZWQgYnkgc3BhY2Vz LCBub3QgY29tbWFzKS4KKworICAgU28gbm93IHdoZW4gZGlhbGluZyBhIHBvcnRhYmxlLWZvcm1h dCBudW1iZXIgdGhhdCBoYXMgdGhlIHNhbWUgY291bnRyeQorICAgYW5kIGFyZWEgY29kZXMgYXMg dGhvc2Ugb2YgeW91ciBkaWFsaW5nIGxvY2F0aW9uLCBDLUtlcm1pdCBjb21wYXJlcyB0aGUKKyAg IGV4Y2hhbmdlIG9mIHRoZSBkaWFsZWQgbnVtYmVyIHdpdGggZWFjaCBudW1iZXIgaW4gdGhlIFBC WCBFeGNoYW5nZSBsaXN0CisgICAocmF0aGVyIHRoYW4gd2l0aCBhIHNpbmdsZSBQQlggRXhjaGFu Z2UgbnVtYmVyLCBhcyBpdCBkaWQgZm9ybWVybHkpIHRvCisgICBkZXRlcm1pbmUgd2hldGhlciB0 aGlzIGlzIGFuIGludGVybmFsIFBCWCBudW1iZXIgb3IgYW4gZXh0ZXJuYWwgY2FsbC4KKyAgIElm IGl0IGlzIGFuIGV4dGVybmFsIGNhbGwsIHRoZW4gdGhlIFBCWCBPdXRzaWRlIFByZWZpeCBpcyBh cHBsaWVkLCBhbmQKKyAgIHRoZW4gdGhlIG5vcm1hbCBkaWFsaW5nIHJ1bGVzIGZvciBsb2NhbCBv ciBsb25nLWRpc3RhbmNlIGNhbGxzLgorCisgICBJZiBpdCBpcyBhbiBpbnNpZGUgY2FsbCwgdGhl IGV4Y2hhbmdlIGlzIHJlcGxhY2VkIGJ5IHRoZSBQQlggSW5zaWRlCisgICBQcmVmaXguIEJ1dCBp ZiB0aGUgUEJYIGhhcyBtb3JlIHRoYW4gb25lIGV4Y2hhbmdlLCBhIHNpbmdsZSBmaXhlZCBQQlgK KyAgIEluc2lkZSBQcmVmaXggaXMgcHJvYmFibHkgbm90IHN1ZmZpY2llbnQuIEZvciBleGFtcGxl LCBhdCBDb2x1bWJpYQorICAgVW5pdmVyc2l0eSwgd2UgbXVzdCBkaWFsIDMteHh4eCBmb3IgYW4g aW50ZXJuYWwgY2FsbCB0byA4NTMteHh4eCwgYnV0CisgICA0LXh4eHggZm9yIGEgY2FsbCB0byA4 NTQteHh4eC4gVGhhdCBpcywgdGhlIGluc2lkZSBwcmVmaXggaXMgdGhlIGZpbmFsCisgICBkaWdp dCBvZiB0aGUgZXhjaGFuZ2Ugd2UgYXJlIGRpYWxpbmcuIEZvciB0aGlzIHJlYXNvbiwgQy1LZXJt aXQgNy4wCisgICBwcm92aWRlcyBhIG1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIGluc2lkZSBwcmVm aXggZHluYW1pY2FsbHkgYXQgZGlhbGluZworICAgdGltZSwgY29uc2lzdGluZyBvZiBhIG5ldyB2 YXJpYWJsZSBhbmQgbmV3IHN5bnRheCBmb3IgdGhlIFNFVCBESUFMCisgICBQQlgtSU5TSURFLVBS RUZJWCBjb21tYW5kOgorCisgICBcdihkJHB4KQorICAgICAgICAgIFRoaXMgdmFyaWFibGUgY29u dGFpbnMgdGhlIGV4Y2hhbmdlIHRoYXQgd2FzIG1hdGNoZWQgd2hlbiBhIFBCWAorICAgICAgICAg IGludGVybmFsIGNhbGwgd2FzIGRldGVjdGVkLiBGb3IgZXhhbXBsZSwgaWYgdGhlIFBCWCBleGNo YW5nZQorICAgICAgICAgIGxpc3QgaXMgIjg1MyA4NTQiIGFuZCBhIGNhbGwgaXMgcGxhY2VkIHRv ICsxICgyMTIpIDg1NC05OTk5LAorICAgICAgICAgIFx2KGQkcHgpIGlzIHNldCB0byA4NTQuCisK KyAgIFNFVCBESUFMIFBCWC1JTlNJREUtUFJFRklYIFxmeHh4KC4uLikKKyAgICAgICAgICBJZiB0 aGUgUEJYIEluc2lkZSBQcmVmaXggaXMgZGVmaW5lZCB0byBiZSBhIGZ1bmN0aW9uLCBpdHMKKyAg ICAgICAgICBldmFsdWF0aW9uIGlzIGRlZmVycmVkIHVudGlsIGRpYWxpbmcgdGltZS4gTm9ybWFs bHksIHRoaXMgd291bGQKKyAgICAgICAgICBiZSBhIHN0cmluZyBmdW5jdGlvbiBoYXZpbmcgXHYo ZCRweCkgYXMgYW4gb3BlcmFuZC4gT2YgY291cnNlLAorICAgICAgICAgIHlvdSBjYW4gc3RpbGwg c3BlY2lmeSBhIGNvbnN0YW50IHN0cmluZywgYXMgYmVmb3JlLgorCisgICBTbyBnaXZlbiB0aGUg Zm9sbG93aW5nIHNldHVwOgorCisgIFNFVCBESUFMIENPVU5UUlktQ09ERSAxCisgIFNFVCBESUFM IEFSRUEtQ09ERSAyMTIKKyAgU0VUIERJQUwgUEJYLU9VVFNJREUtUFJFRklYIDkzLAorICBTRVQg RElBTCBQQlgtRVhDSEFOR0UgODUzIDg1NAorICBTRVQgRElBTCBQQlgtSU5TSURFLVBSRUZJWCBc ZnJpZ2h0KFx2KGQkcHgpLDEpCisKKyAgIFRoZSBmb2xsb3dpbmcgbnVtYmVycyBnaXZlIHRoZSBy ZXN1bHRzIGluZGljYXRlZDoKKworIE51bWJlciAgICAgICAgICAgICAgICAgICBSZXN1bHQKKyAg KzEgKDIxMikgODU0LTk4NzYgICAgICAgIDQtOTg3NgorICArMSAoMjEyKSA4NTMtMTIzNCAgICAg ICAgMy0xMjM0CisgICsxICgyMTIpIDc2NS00MzIxICAgICAgICA5Myw3NjUtNDMyMQorICArMSAo MzMzKSA3NjUtNDMyMSAgICAgICAgOTMsMTMzMzc2NS00MzIxCisKKyAgIEZ1cnRoZXJtb3JlLCB0 aGUgS19QQlhfWENIIGVudmlyb25tZW50IHZhcmlhYmxlIG1heSBub3cgYmUgc2V0IHRvIGEKKyAg IGxpc3Qgb2YgZXhjaGFuZ2VzIHRvIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZSBDLUtlcm1pdCdz IFBCWCBleGNoYW5nZQorICAgbGlzdCwgZm9yIGV4YW1wbGUgKGluIFVOSVgga3NoIG9yIGJhc2gp OgorCisgIGV4cG9ydCBLX1BCWF9YQ0g9Ijg1MyA4NTQiCisKKyAgIChRdW90ZXMgcmVxdWlyZWQg YmVjYXVzZSBvZiB0aGUgc3BhY2UuKSBPZiBjb3Vyc2UsIHRoaXMgdmFyaWFibGUgY2FuCisgICBh bHNvIGJlIHNldCB0byBhIHNpbmdsZSBleGNoYW5nZSwgYXMgYmVmb3JlOgorCisgIGV4cG9ydCBL X1BCWF9YQ0g9ODUzCisKKzIuMS4xMy4gVGhlIERJQUwgbWFjcm8gLSBMYXN0LU1pbnV0ZSBQaG9u ZSBOdW1iZXIgQ29udmVyc2lvbnMKKworICAgQWZ0ZXIgYSBESUFMIG9yIExPT0tVUCBjb21tYW5k IGlzIGdpdmVuLCBhIGxpc3Qgb2YgcGhvbmUgbnVtYmVycyBpcworICAgYXNzZW1ibGVkIGZyb20g dGhlIGRpYWxpbmcgZGlyZWN0b3J5IChpZiBhbnkpLCB3aXRoIGFsbAorICAgbG9jYXRpb24tZGVw ZW5kZW50IGNvbnZlcnNpb24gcnVsZXMgYXBwbGllZCBhcyBkZXNjcmliZWQgaW4gQ2hhcHRlciA1 CisgICBvZiBbNDAzXVVzaW5nIEMtS2VybWl0LgorCisgICBIb3dldmVyLCBhZGRpdGlvbmFsIGNv bnZlcnNpb25zIG1pZ2h0IHN0aWxsIGJlIHJlcXVpcmVkIGF0IHRoZSBsYXN0CisgICBtaW51dGUg YmFzZWQgb24gbG9jYWwgb3IgZXBoZW1lcmFsIGNvbmRpdGlvbnMuIFNvIHRoYXQgeW91IGNhbiBo YXZlIHRoZQorICAgZmluYWwgd29yZCBvbiB0aGUgZXhhY3QgZm9ybWF0IG9mIHRoZSBkaWFsIHN0 cmluZywgQy1LZXJtaXQgNy4wIGxldHMKKyAgIHlvdSBwYXNzIHRoZSBjb252ZXJ0ZWQgc3RyaW5n IHRocm91Z2ggYSBtYWNybyBvZiB5b3VyIG93biBkZXNpZ24gZm9yCisgICBmaW5hbCBwcm9jZXNz aW5nIGJlZm9yZSBkaWFsaW5nLiBUaGUgcmVsZXZhbnQgY29tbWFuZCBpczoKKworICAgU0VUIERJ QUwgTUFDUk8gWyBuYW1lIF0KKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBtYWNy byB0byBiZSBydW4gb24gZWFjaCBwaG9uZSBudW1iZXIKKyAgICAgICAgICBhZnRlciBhbGwgYnVp bHQtaW4gY29udmVyc2lvbnMgaGF2ZSBiZWVuIGFwcGxpZWQsIGp1c3QgYmVmb3JlCisgICAgICAg ICAgdGhlIG51bWJlciBpcyBkaWFsZWQuIElmIG5vIG5hbWUgaXMgZ2l2ZW4sIG5vIG1hY3JvIGlz IHJ1bi4gVGhlCisgICAgICAgICAgcGhvbmUgbnVtYmVyLCBhcyBpdCB3b3VsZCBoYXZlIGJlZW4g ZGlhbGVkIGlmIHRoZXJlIHdlcmUgbm8gZGlhbAorICAgICAgICAgIG1hY3JvLCBpcyBwYXNzZWQg dG8gdGhlIG1hY3JvLgorCisgICBUaGUgZGlhbCBtYWNybyBjYW4gZG8gYW55dGhpbmcgYXQgYWxs IChleGNlcHQgc3RhcnQgYSBmaWxlIHRyYW5zZmVyKS4KKyAgIEhvd2V2ZXIsIHRoZSBub3JtYWwg dXNlIGZvciB0aGUgbWFjcm8gd291bGQgYmUgdG8gbW9kaWZ5IHRoZSBwaG9uZQorICAgbnVtYmVy LiBGb3IgdGhpcyByZWFzb24gdGhlIHBob25lIG51bWJlciBpcyBwYXNzZWQgdG8gdGhlIG1hY3Jv IGFzCisgICBhcmd1bWVudCBudW1iZXIgMSAoXCUxKS4gVG8gY2F1c2UgYSBtb2RpZmllZCBudW1i ZXIgdG8gYmUgZGlhbGVkLCB0aGUKKyAgIG1hY3JvIHNob3VsZCB0ZXJtaW5hdGUgd2l0aCBhIFJF VFVSTiBzdGF0ZW1lbnQgc3BlY2lmeWluZyBhIHJldHVybgorICAgdmFsdWUuIFRvIGxlYXZlIHRo ZSBudW1iZXIgYWxvbmUsIHRoZSBtYWNybyBzaG91bGQgc2ltcGx5IGVuZC4gRXhhbXBsZToKKwor ICBkZWZpbmUgeHh4IHJldHVybiAxMDEwODg4OTk5OSRcJTEKKyAgc2V0IGRpYWwgbWFjcm8geHh4 CisgIGRpYWwgeHl6Y29ycAorCisgICBUaGlzIGRlZmluZXMgYSBESUFMIE1BQ1JPIGNhbGxlZCB4 eHgsIHdoaWNoIHB1dHMgYW4gYWNjZXNzIGNvZGUgb24gdGhlCisgICBmcm9udCBvZiB0aGUgbnVt YmVyLiBBbm90aGVyIGV4YW1wbGUgbWlnaHQgYmU6CisKKyAgZGVmIHh4eCBpZiBlcXVhbCAiXHYo bW9kZW0pIiAiaGF5ZXMtMTIwMCIgcmV0dXJuIFxmcmVwbGFjZShcJTEsJCx7LCwsLCx9KQorICBz ZXQgZGlhbCBtYWNybyB4eHgKKyAgZGlhbCB4eXpjb3JwCisKKyAgIHdoaWNoIHJlcGxhY2VzIGFu eSBkb2xsYXItc2lnbiBpbiB0aGUgZGlhbCBzdHJpbmcgYnkgYSBzZXJpZXMgb2YgZml2ZQorICAg Y29tbWFzLCBlLmcuIGJlY2F1c2UgdGhpcyBwYXJ0aWN1bGFyIG1vZGVtIGRvZXMgbm90IHN1cHBv cnQgdGhlICJ3YWl0CisgICBmb3IgYm9uZyIgZmVhdHVyZSAocmVtZW1iZXIgdGhhdCBjb21tYXMg dGhhdCBhcmUgdG8gYmUgaW5jbHVkZWQKKyAgIGxpdGVyYWxseSBpbiBmdW5jdGlvbiBhcmd1bWVu dHMgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMgdG8KKyAgIGRpc3Rpbmd1aXNoIHRoZW0gZnJv bSB0aGUgY29tbWFzIHRoYXQgc2VwYXJhdGUgdGhlIGFyZ3VtZW50cykgYW5kIHdoZW4KKyAgIHRo ZSBJRiBjb25kaXRpb24gaXMgbm90IHNhdGlzZmllZCwgdGhlIG1hY3JvIGRvZXMgbm90IHJldHVy biBhIHZhbHVlLAorICAgYW5kIHNvIHRoZSBudW1iZXIgaXMgbm90IG1vZGlmaWVkLiBUaGVuIHdo ZW4gYSBESUFMIGNvbW1hbmQgaXMgZ2l2ZW4KKyAgIHJlZmVyZW5jaW5nIGEgZGlhbGluZyBkaXJl Y3RvcnkgZW50cnksICJ4eXpjb3JwIi4gVGhlIG1hY3JvIGlzCisgICBhdXRvbWF0aWNhbGx5IGFw cGxpZWQgdG8gZWFjaCBtYXRjaGluZyBudW1iZXIuCisKKyAgIE51bWVyb3VzIGRpYWwtLCBtb2Rl bS0sIGNvbW11bmljYXRpb25zLSwgYW5kIHRpbWUtcmVsYXRlZCB2YXJpYWJsZXMgYXJlCisgICBh dmFpbGFibGUgZm9yIGRlY2lzaW9uIG1ha2luZyB5b3VyIGRpYWwgbWFjcm8uIFR5cGUgU0hPVyBW QVJJQUJMRVMgZm9yCisgICBhIGxpc3QuIE9mIHBhcnRpY3VsYXIgaW50ZXJlc3QgaXMgdGhlIFx2 KGRpYWxjb3VudCkgdmFyaWFibGUsIHdoaWNoCisgICB0ZWxscyBob3cgbWFueSB0aW1lcyB0aGUg RElBTCBjb21tYW5kIGdvbmUgdGhyb3VnaCBpdHMgcmV0cnkgbG9vcDogMSBvbgorICAgdGhlIGZp cnN0IHRyeSwgMiBvbiB0aGUgc2Vjb25kLCAzIG9uIHRoZSB0aGlyZCwgYW5kIHNvIG9uLCBhbmQg dGhlCisgICBcdihkaWFscmVzdWx0KSBhbmQgXHYoZGlhbHN0YXR1cykgdmFyaWFibGVzLgorCisg ICBIZXJlIGFyZSBzb21lIG90aGVyIGFwcGxpY2F0aW9ucyBmb3IgdGhlIERJQUwgTUFDUk8gKGZy b20gdXNlcnMpOgorCisgICAgICogUGhvbmUgbnVtYmVycyBpbiB0aGUgZGlhbGluZyBkaXJlY3Rv cnkgYXJlIGZvcm1hdHRlZCB3aXRoICctJyBmb3IKKyAgICAgICByZWFkYWJpbGl0eSwgYnV0IHNv bWUgbW9kZW1zIGRvbid0IGxpa2UgdGhlIGh5cGhlbnMsIHNvIHRoZSBESUFMCisgICAgICAgbWFj cm8gaXMgdXNlZCB0byByZW1vdmUgdGhlbSBiZWZvcmUgZGlhbGluZzsgZS5nIDAwOTAtMTIzLTQ1 Ni03OC05OQorICAgICAgIGJlY29tZXMgMDA5MDEyMzQ1Njc4OTk6ICJkZWYgeHh4IHJldHVybiBc ZnJlcGxhY2UoXCUxLC0pIi4KKyAgICAgKiBUbyBzZXQgc29tZSBzcGVjaWZpYyBtb2RlbSAob3Ig b3RoZXIpIG9wdGlvbnMgZGVwZW5kaW5nIG9uIHRoZQorICAgICAgIGNhbGxlZCBjdXN0b21lciBv ciB0ZWxlcGhvbmUgbnVtYmVyLgorICAgICAqIENob29zaW5nIHRoZSBtb3N0IGFwcHJvcHJpYXRl IHByb3ZpZGVyIGJhc2VkIG9uIChlLmcuKSB0aW1lIG9mIGRheSwKKyAgICAgICBvciBjeWNsaW5n IHRocm91Z2ggYSBsaXN0IG9mIHByb3ZpZGVycyBpbiBjYXNlIHNvbWUgcHJvdmlkZXJzIG1pZ2h0 CisgICAgICAgYmUgYnVzeS4KKworICAgVG8gaWxsdXN0cmF0ZSB0aGUgZmluYWwgaXRlbSwgc3Vw cG9zZSB5b3UgaGF2ZSBhIGNob2ljZSBhbW9uZyBtYW55CisgICBwaG9uZSBzZXJ2aWNlIHByb3Zp ZGVyczsgdGhlIHByb3ZpZGVyIGlzIGNob3NlbiBieSBkaWFsaW5nIGFuIGFjY2VzcworICAgY29k ZSBiZWZvcmUgdGhlIG51bWJlci4gRGlmZmVyZW50IHByb3ZpZGVycyBtaWdodCBiZSBiZXR0ZXIg KGUuZy4KKyAgIGNoZWFwZXIpIGZvciBjZXJ0YWluIHRpbWVzIG9mIGRheSBvciBkYXlzIG9mIHRo ZSB3ZWVrLCBvciBmb3IgZGlhbGluZworICAgY2VydGFpbiBsb2NhdGlvbnM7IHlvdSBjYW4gdXNl IHRoZSBESUFMIG1hY3JvIHRvIGFkZCB0aGUgYWNjZXNzIGZvciB0aGUKKyAgIG1vc3QgZGVzaXJh YmxlIHByb3ZpZGVyLgorCisgICBTaW1pbGFybHksIHdoZW4gdGhlIHNhbWUgbnVtYmVyIG1pZ2h0 IGJlIHJlYWNoZWQgdGhyb3VnaCBtdWx0aXBsZQorICAgcHJvdmlkZXJzLCBpdCdzIHBvc3NpYmxl IHRoYXQgb25lIHByb3ZpZGVyIG1pZ2h0IG5vdCBiZSBhYmxlIHRvCisgICBjb21wbGV0ZSB0aGUg Y2FsbCwgYnV0IGFub3RoZXIgb25lIGNhbi4gSW4gdGhhdCBjYXNlLCB5b3UgY2FuIHVzZSB0aGUK KyAgIERJQUwgbWFjcm8gdG8gc3dpdGNoIHByb3ZpZGVycyBlYWNoIHRpbWUgdGhyb3VnaCB0aGUg RElBTCBsb29wIC0tCisgICB0aGF0J3Mgd2hlcmUgdGhlIFx2KGRpYWxjb3VudCkgdmFyaWFibGUg Y29tZXMgaW4gaGFuZHkuCisKKyAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZCBjYW4gYmUgdXNlZCB0 byBkZWJ1ZyB0aGUgRElBTCBtYWNybzoKKworICAgU0VUIERJQUwgVEVTVCB7IE9OLCBPRkYgfQor ICAgICAgICAgIE5vcm1hbGx5IE9GRiwgc28gdGhlIERJQUwgY29tbWFuZCBhY3R1YWxseSBkaWFs cy4gV2hlbiBPTiwgdGhlCisgICAgICAgICAgRElBTCBjb21tYW5kIHBlcmZvcm1zIGFsbCBsb29r dXBzIGFuZCBudW1iZXIgY29udmVyc2lvbnMsIGFuZAorICAgICAgICAgIHRoZW4gZ29lcyB0aHJv dWdoIHRoZSBudW1iZXIgbGlzdCBhbmQgcmV0cnkgbG9vcCwgYnV0IGluc3RlYWQgb2YKKyAgICAg ICAgICBhY3R1YWxseSBkaWFsaW5nLCBsaXN0cyB0aGUgbnVtYmVycyBpdCB3b3VsZCBoYXZlIGNh bGxlZCBpZiBub25lCisgICAgICAgICAgb2YgdGhlIERJQUwgYXR0ZW1wdHMgc3VjY2VlZGVkIChv ciBtb3JlIHByZWNpc2VseSwgZXZlcnkgbnVtYmVyCisgICAgICAgICAgd2FzIGFsd2F5cyBidXN5 KS4KKworMi4xLjE0LiBBdXRvbWF0aWMgVG9uZS9QdWxzZSBEaWFsaW5nIFNlbGVjdGlvbgorCisg ICBTRVQgRElBTCBNRVRIT0QgeyBBVVRPLCBERUZBVUxULCBQVUxTRSwgVE9ORSB9CisgICAgICAg ICAgQ2hvb3NlcyB0aGUgZGlhbGluZyBtZXRob2QgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCisKKyAg IFByaW9yIHRvIHZlcnNpb24gNy4wLCBDLUtlcm1pdCdzIERJQUwgTUVUSE9EIHdhcyBERUZBVUxU IGJ5IGRlZmF1bHQsCisgICBtZWFuaW5nIGl0IGRvZXMgbm90IHNwZWNpZnkgYSBkaWFsaW5nIG1l dGhvZCB0byB0aGUgbW9kZW0sIGJ1dCByZWxpZXMKKyAgIG9uIHRoZSBtb2RlbSB0byBoYXZlIGFu IGFwcHJvcHJpYXRlIGRlZmF1bHQgZGlhbGluZyBtZXRob2Qgc2V0LiBTbywgZm9yCisgICBleGFt cGxlLCB3aGVuIHVzaW5nIEhheWVzIGNvbXBhdGlibGUgbW9kZW1zLCB0aGUgZGlhbCBzdHJpbmcg d291bGQgYmUKKyAgIHNvbWV0aGluZyBsaWtlIEFURDc2NTQzMjEsIHJhdGhlciB0aGFuIEFURFQ3 NjU0MzIxIG9yIEFURFA3NjU0MzIxLgorCisgICBJbiBDLUtlcm1pdCA3LjAgYW5kIEs5NSAxLjEu MTksIHRoZSBkaWFsIG1ldGhvZCBjYW4gYmUgc2V0IGZyb20gdGhlCisgICBlbnZpcm9ubWVudCB2 YXJpYWJsZToKKworICBLX0RJQUxfTUVUSE9ECisKKyAgIHdoZW4gS2VybWl0IHN0YXJ0cy4gVGhl IHZhbHVlcyBjYW4gYmUgVE9ORSwgUFVMU0UsIG9yIERFRkFVTFQsIGUuZy4KKyAgIChVTklYKToK KworICBzZXQgS19ESUFMX01FVEhPRD1UT05FOyBleHBvcnQgS19ESUFMX01FVEhPRAorCisgICBJ biB0aGUgYWJzZW5jZSBvZiBhIEtfRElBTF9NRVRIT0QgZGVmaW5pdGlvbiwgdGhlIG5ldyBkZWZh dWx0IFNFVCBESUFMCisgICBNRVRIT0QgaXMgQVVUTyByYXRoZXIgdGhhbiBERUZBVUxULiBXaGVu IERJQUwgTUVUSE9EIGlzIEFVVE8gYW5kIHRoZQorICAgbG9jYWwgY291bnRyeSBjb2RlIGlzIGtu b3duLCB0aGVuIGlmIHRvbmUgZGlhbGluZyBpcyB1bml2ZXJzYWxseQorICAgYXZhaWxhYmxlIGlu IHRoZSBjb3JyZXNwb25kaW5nIGFyZWEsIHRvbmUgZGlhbGluZyBpcyB1c2VkOyBpZiBkaWFsaW5n CisgICBmcm9tIGEgbG9jYXRpb24gd2hlcmUgcHVsc2UgZGlhbGluZyBpcyBtYW5kYXRvcnksIHB1 bHNlIGRpYWxpbmcgaXMKKyAgIHVzZWQuCisKKyAgIFRoZSAidG9uZSBjb3VudHJ5IiBhbmQgInB1 bHNlIGNvdW50cnkiIGxpc3RzIGFyZSBwcmVsb2FkZWQgYWNjb3JkaW5nIHRvCisgICBvdXIga25v d2xlZGdlIGF0IHRoZSB0aW1lIG9mIHJlbGVhc2UuIFlvdSBjYW4gc2VlIHRoZWlyIGNvbnRlbnRz IGluIHRoZQorICAgU0hPVyBESUFMIGxpc3RpbmcuIFlvdSBjYW4gY2hhbmdlIHRoZSBsaXN0cyB3 aXRoOgorCisgICBTRVQgRElBTCBUT05FLUNPVU5UUklFUyBbIGNjIFsgY2MgWyAuLi4gXSBdIF0K KyAgICAgICAgICBSZXBsYWNlcyB0aGUgY3VycmVudCBUT05FLUNPVU5UUklFUyBsaXN0IHdpdGgg dGhlIG9uZSBnaXZlbi4KKyAgICAgICAgICBFYWNoIGNjIGlzIGEgY291bnRyeSBjb2RlOyBzZXBh cmF0ZSB0aGVtIHdpdGggc3BhY2VzIChub3QKKyAgICAgICAgICBjb21tYXMpLiBFeGFtcGxlOgor CisgIHNldCBkaWFsIHRvbmUtY291bnRyaWVzIDEgMzU4IDQ0IDQ2IDQ5CisKKyAgICAgICAgICBJ ZiBubyBjb3VudHJ5IGNvZGVzIGFyZSBnaXZlbiwgdGhlIGN1cnJlbnQgbGlzdCwgaWYgYW55LCBp cworICAgICAgICAgIHJlbW92ZWQsIGluIHdoaWNoIGNhc2UgU0VUIERJQUwgTUVUSE9EIEFVVE8g aXMgZXF1aXZhbGVudCB0byBTRVQKKyAgICAgICAgICBESUFMIE1FVEhPRCBERUZBVUxULgorCisg ICBTRVQgRElBTCBQVUxTRS1DT1VOVFJJRVMgWyBjYyBbIGNjIFsgLi4uIF0gXSBdCisgICAgICAg ICAgUmVwbGFjZXMgdGhlIGN1cnJlbnQgUFVMU0UtQ09VTlRSSUVTIGxpc3Qgd2l0aCB0aGUgb25l IGdpdmUuCisgICAgICAgICAgU3ludGF4IGFuZCBvcGVyYXRpb24gaXMgbGlrZSBTRVQgRElBTCBU T05FLUNPVU5UUklFUy4KKworICAgSWYgdGhlIHNhbWUgY291bnRyeSBjb2RlIGFwcGVhcnMgaW4g Ym90aCBsaXN0cywgUHVsc2UgdGFrZXMgcHJlY2VkZW5jZS4KKworICAgVGhlIFNFVCBESUFMIFRP TkUtIGFuZCBQVUxTRS1DT1VOVFJJRVMgY29tbWFuZHMgcGVyZm9ybSBubyB2ZXJpZmljYXRpb24K KyAgIHdoYXRzb2V2ZXIgb24gdGhlIGNjJ3MsIHNpbmNlIGFsbW9zdCBhbnkgc3ludGF4IG1pZ2h0 IGJlIGxlZ2FsIGluIHNvbWUKKyAgIHNldHRpbmdzLiBGdXJ0aGVybW9yZSwgdGhlcmUgaXMgbm8g ZmFjaWxpdHkgdG8gZWRpdCB0aGUgbGlzdHM7IHlvdSBjYW4KKyAgIG9ubHkgcmVwbGFjZSB0aGUg d2hvbGUgbGlzdC4gSG93ZXZlciwgc2luY2UgdGhlIG9ubHkgcHVycG9zZSBvZiB0aGVzZQorICAg bGlzdHMgaXMgdG8gZXN0YWJsaXNoIGEgYmFzaXMgZm9yIHBpY2tpbmcgdG9uZSBvciBwdWxzZSBk aWFsaW5nCisgICBhdXRvbWF0aWNhbGx5LCBhbGwgeW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGVm ZmVjdCBvZiB0aGUgbGlzdCBpcyB0bworICAgc2V0IGEgc3BlY2lmaWMgZGlhbGluZyBtZXRob2Qg d2l0aCBTRVQgRElBTCBNRVRIT0QgVE9ORSBvciBTRVQgRElBTAorICAgTUVUSE9EIFBVTFNFLgor CisyLjEuMTUuIERpYWwtTW9kaWZpZXIgVmFyaWFibGVzCisKKyAgIEFzIG9mIEMtS2VybWl0IDcu MCwgZGlhbCBtb2RpZmllcnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgZm9sbG93aW5nCisgICB2YXJp YWJsZXM6CisKKyBcdihkbV9scCkgTG9uZyBwYXVzZQorIFx2KGRtX3NwKSBTaG9ydCBwYXVzZQor IFx2KGRtX3BkKSBQdWxzZSBkaWFsCisgXHYoZG1fdGQpIFRvbmUgZGlhbAorIFx2KGRtX3dhKSBX YWl0IGZvciBhbnN3ZXIKKyBcdihkbV93ZCkgV2FpdCBmb3IgZGlhbHRvbmUKKyBcdihkbV9yYykg UmV0dXJuIHRvIGNvbW1hbmQgbW9kZQorCisgICBZb3UgY2FuIHVzZSB0aGVzZSBpbiB5b3VyIGRp YWwgc3RyaW5ncyBpbiBwbGFjZSBvZiBoYXJkd2lyZWQgbW9kaWZpZXJzCisgICBsaWtlICJAIiwg IiwiLCBldGMsIGZvciBpbmNyZWFzZWQgcG9ydGFiaWxpdHkgb2Ygc2NyaXB0cy4gRXhhbXBsZToK KworICBDLUtlcm1pdD5zZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzCisgIEMtS2VybWl0PnNobyB2 YXJpYWJsZXMgZG0KKyAgIFx2KGRtX2xwKSA9ICwKKyAgIFx2KGRtX3NwKSA9IC8KKyAgIFx2KGRt X3BkKSA9IFAKKyAgIFx2KGRtX3RkKSA9IFQKKyAgIFx2KGRtX3dhKSA9IEAKKyAgIFx2KGRtX3dk KSA9IFcKKyAgIFx2KGRtX3JjKSA9IDsKKyAgQy1LZXJtaXQ+ZXhpdAorCisyLjEuMTYuIEdpdmlu ZyBNdWx0aXBsZSBOdW1iZXJzIHRvIHRoZSBESUFMIENvbW1hbmQKKworICAgUHJpb3IgdG8gQy1L ZXJtaXQgNy4wLCB0aGUgb25seSB3YXkgdG8gZ2l2ZSBhIERJQUwgY29tbWFuZCBhIGxpc3Qgb2YK KyAgIHBob25lIG51bWJlcnMgdG8gdHJ5IHVudGlsIG9uZSBhbnN3ZXJzIHdhcyB0byBjcmVhdGUg YSBkaWFsaW5nCisgICBkaXJlY3RvcnkgdGhhdCBoYWQgbXVsdGlwbGUgZW50cmllcyB1bmRlciB0 aGUgc2FtZSBuYW1lLCBhbmQgdGhlbiB1c2UKKyAgIHRoYXQgZW50cnkgbmFtZSBpbiB0aGUgRElB TCBjb21tYW5kLiBOb3cgYSBsaXN0IG9mIG51bWJlcnMgY2FuIGJlIGdpdmVuCisgICB0byB0aGUg RElBTCBjb21tYW5kIGRpcmVjdGx5IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgIGRpYWwg e3tudW1iZXIxfXtudW1iZXIyfXtudW1iZXIzfS4uLn0KKworICAgVGhpcyBpcyB0aGUgc2FtZSBs aXN0IGZvcm1hdCB1c2VkIGJ5IFNFTkQgL0VYQ0VQVDogYW5kIG90aGVyIGNvbW1hbmRzCisgICB0 aGF0IGFsbG93IGEgbGlzdCB3aGVyZSBub3JtYWxseSBhIHNpbmdsZSBpdGVtIGlzIGdpdmVuLiBS ZXN0cmljdGlvbnMKKyAgIG9uIHRoaXMgZm9ybSBvZiB0aGUgRElBTCBjb21tYW5kIGFyZToKKwor ICAgICAqIFRoZSBmaXJzdCB0d28gYnJhY2VzIG11c3QgYmUgYWRqYWNlbnQ7IHNwYWNpbmcgaXMg b3B0aW9uYWwKKyAgICAgICB0aGVyZWFmdGVyLgorICAgICAqIEVhY2ggbnVtYmVyIG11c3QgYmUg YW4gYWN0dWFsIG51bWJlciB0byBkaWFsLCBub3QgYSBkaWFsaW5nCisgICAgICAgZGlyZWN0b3J5 IGVudHJ5LgorICAgICAqIERpYWxpbmcgZGlyZWN0b3J5IGVudHJpZXMgbWF5IG5vdCBjb250YWlu IG51bWJlciBsaXN0cyBpbiB0aGlzCisgICAgICAgZm9ybWF0LgorCisgICBJbiBhbGwgb3RoZXIg cmVzcGVjdHMsIHRoZSBudW1iZXJzIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkgaGFkIGJlZW4KKyAg IGZldGNoZWQgZnJvbSB0aGUgZGlhbGluZyBkaXJlY3Rvcnk7IHRoZXkgY2FuIGJlIGluIGxpdGVy YWwgb3IgcG9ydGFibGUKKyAgIGZvcm1hdCwgZXRjLiBFeGFtcGxlOgorCisgIGRpYWwge3s3NjU0 MzIxfSB7KzEgKDIxMikgNTU1MTIxMn0geyAxLTIxMi01NTU2Nzg5IH19CisKKyAgIFRoZSBsaXN0 IGNhbiBiZSBhbnkgbGVuZ3RoIGF0IGFsbCwgd2l0aGluIHJlYXNvbi4KKworICAgVGhpcyBmZWF0 dXJlIGlzIGVzcGVjaWFsbHkgaGFuZHkgZm9yIHVzZSB3aXRoIHRoZSBLOTUgRGlhbGVyLCBhbGxv d2luZworICAgYSBsaXN0IG9mIHBob25lIG51bWJlcnMgdG8gYmUgc3BlY2lmaWVkIGluIHRoZSBU ZWxlcGhvbmUgTnVtYmVyIGJveAorICAgd2l0aG91dCBoYXZpbmcgdG8gc2V0IHVwIG9yIHJlZmVy ZW5jZSBhIHNlcGFyYXRlIGRpYWxpbmcgZGlyZWN0b3J5LgorCisgICBZb3UgY2FuIGFsc28gdXNl IGl0IHRvIGFkZCBjb21tb25seS1kaWFsZWQgc2VxdWVuY2VzIGFzIHZhcmlhYmxlcyBpbgorICAg eW91ciBDLUtlcm1pdCBjdXN0b21pemF0aW9uIGZpbGUsIGUuZy46CisKKyAgZGVmaW5lIHdvcmsg e3s3NjU0MzIxfXs3NjU0MzIyfXs3NjU0MzIzfX0KKworICAgYW5kIHRoZW46CisKKyAgZGlhbCB7 XG0od29yayl9CisKKyAgICh0aGUgdmFyaWFibGUgbmFtZSBtdXN0IGJlIGVuY2xvc2VkIGluIGJy YWNlcykuCisKKyAgIE9yIG1vcmUgc2ltcGx5OgorCisgIGRlZmluZSB3b3JrIGRpYWwge3s3NjU0 MzIxfXs3NjU0MzIyfXs3NjU0MzIzfX0KKworICAgYW5kIHRoZW46CisKKyAgd29yaworCisyLjIu IE1vZGVtcworCisyLjIuMS4gTmV3IE1vZGVtIFR5cGVzCisKKyAgIFNpbmNlIEMtS2VybWl0IDYu MDoKKworICBhdGxhcy1uZXdjb20tMzM2MDBpZnhDIEF0bGFzL05ld2NvbSAzMzYwMAorICBhdHQt a2VlcGludG91Y2ggICAgICAgIEFUJlQgS2VlcGluVG91Y2ggUENNQ0lBIFYuMzJiaXMgQ2FyZCBN b2RlbQorICBhdHQtMTkwMC1zdHUtaWlpICAgICAgIEFUJlQgU2VjdXJlIERhdGEgU1RVLUlJSSBN b2RlbCAxOTAwCisgIGF0dC0xOTEwLXN0dS1paWkgICAgICAgQVQmVCBTZWN1cmUgRGF0YSBTVFUt SUlJIE1vZGVsIDE5MTAKKyAgYmVzdGRhdGEgICAgICAgICAgICAgICBCZXN0IERhdGEKKyAgY2Fy ZGluYWwgICAgICAgICAgICAgICBDYXJkaW5hbCBWLjM0IE1WUDI4OFggc2VyaWVzLgorICBjb21w YXEgICAgICAgICAgICAgICAgIENvbXBhcSBEYXRhK0ZheCAoZS5nLiBpbiBQcmVzYXJpbykKKyAg ZnVqaXRzdSAgICAgICAgICAgICAgICBGdWppdHN1IEZheC9Nb2RlbSBBZGFwdGVyCisgIGdlbmVy aWMtaGlnaC1zcGVlZCAgICAgQW55IG1vZGVybiBlcnJvci1jb3JyZWN0aW5nIGRhdGEtY29tcHJl c3NpbmcgbW9kZW0KKyAgaXR1LXQtdjI1dGVyL3YyNTAgICAgICBJVFUtVCAoQ0NJVFQpIFYuMjV0 ZXIgKFYuMjUwKSBzdGFuZGFyZCBjb21tYW5kIHNldAorICBtZWdhaGVydHotYXR0LXYzNCAgICAg IE1lZ2FoZXJ0eiBBVCZUIFYuMzQKKyAgbWVnYWhlcnR6LXhqYWNrICAgICAgICBNZWdhaGVydHog WC1KYWNrCisgIG1vdG9yb2xhLWNvZGV4ICAgICAgICAgTW90b3JvbGEgQ29kZXggMzI2WCBTZXJp ZXMKKyAgbW90b3JvbGEtbW9udGFuYSAgICAgICBNb3Rvcm9sYSBNb250YW5hCisgIG10NTYzNHpw eCAgICAgICAgICAgICAgTXVsdGl0ZWNoIE1UNTYzNFpQWAorICByb2Nrd2VsbC12OTAgICAgICAg ICAgIFJvY2t3ZWxsIFYuOTAgNTZLCisgIHJvbG0tMjQ0cGMgICAgICAgICAgICAgU2llbWVucy9S b2xtIDI0NFBDIChBVCBjb21tYW5kIHNldCkKKyAgcm9sbS02MDAtc2VyaWVzICAgICAgICBTaWVt ZW5zL1JvbG0gNjAwIFNlcmllcyAoQVQgY29tbWFuZCBzZXQpCisgIHNwaXJpdC1paSAgICAgICAg ICAgICAgUXVpY2tDb21tIFNwaXJpdCBJSQorICBzdXByYXNvbmljICAgICAgICAgICAgIFN1cHJh U29uaWMgVjI4OCsKKyAgc3VwcmEtZXhwcmVzcy12OTAgICAgICBTdXByYSBFeHByZXNzIFYuOTAK KworICAgT25lIG9mIHRoZSBuZXcgdHlwZXMsICJnZW5lcmljLWhpZ2gtc3BlZWQiIG5lZWRzIGEg Yml0IG9mIGV4cGxhbmF0aW9uLgorICAgVGhpcyB0eXBlIHdhcyBhZGRlZCB0byBlYXNpbHkgaGFu ZGxlIG90aGVyIHR5cGVzIHRoYXQgYXJlIG5vdAorICAgZXhwbGljaXRseSBjb3ZlcmVkLCB3aXRo b3V0IGdvaW5nIHRocm91Z2ggdGhlIGJvdGhlciBvZiBhZGRpbmcgYQorICAgY29tcGxldGUgdXNl ci1kZWZpbmVkIG1vZGVtIHR5cGUuIFRoaXMgb25lIHdvcmtzIGZvciBtb2Rlcm4gbW9kZW1zIHRo YXQKKyAgIHVzZSB0aGUgQVQgY29tbWFuZCBzZXQsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgYWxs IHRoZSBkZWZhdWx0CisgICAoImZhY3RvcnkiKSBzZXR0aW5ncyBvZiB0aGUgbW9kZW0gKGEpIGFy ZSBhcHByb3ByaWF0ZSBmb3IgS2VybWl0LCAoYikKKyAgIGluY2x1ZGUgZXJyb3IgY29ycmVjdGlv biwgZGF0YSBjb21wcmVzc2lvbiwgYW5kIHNwZWVkIGJ1ZmZlcmluZzsgYW5kCisgICAoYykgYXJl IHJlY2FsbGFibGUgd2l0aCB0aGUgY29tbWFuZCBBVCZGLgorCisgICBJZiB0aGUgY29tbWFuZCB0 byByZWNhbGwgeW91ciBtb2RlbSdzIHByb2ZpbGUgaXMgbm90IEFUJkYsIHVzZSB0aGUgU0VUCisg ICBNT0RFTSBDT01NQU5EIElOSVQtU1RSSU5HIGNvbW1hbmQgdG8gc3BlY2lmeSB0aGUgYXBwcm9w cmlhdGUgbW9kZW0KKyAgIGNvbW1hbmQuIFRoZSBkZWZhdWx0IGluaXQtc3RyaW5nIGlzIEFUJkZc MTMgKHRoYXQgaXMsIEFULCBhbXBlcnNhbmQsIEYsCisgICBhbmQgdGhlbiBjYXJyaWFnZSByZXR1 cm4pOyBhIHN1cnZleSBvZiBhYm91dCAyMCBtb2Rlcm4gbW9kZW0gdHlwZXMKKyAgIHNob3dzIHRo ZXkgYWxsIHN1cHBvcnQgdGhpcywgYnV0IHRoZXkgbWlnaHQgbWVhbiBkaWZmZXJlbnQgdGhpbmdz IGJ5CisgICBpdC4gRm9yIGV4YW1wbGUsIHRoZSBVU1IgU3BvcnRzdGVyIG9yIENvdXJpZXIgbmVl ZHMgQVQmRjEgKG5vdCBBVCZGLAorICAgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBBVCZGMCwgd2hp Y2ggcmVjYWxscyBhbiBpbmFwcHJvcHJpYXRlIHByb2ZpbGUpLAorICAgc28gZm9yIFVTUiBtb2Rl bXM6CisKKyAgc2V0IG1vZGVtIHR5cGUgZ2VuZXJpYy1oaWdoLXNwZWVkCisgIHNldCBtb2RlbSBj b21tYW5kIGluaXQgQVQmRjFcMTMKKworICAgT2YgY291cnNlLCBVU1IgbW9kZW1zIGFscmVhZHkg aGF2ZSB0aGVpciBvd24gYnVpbHQtaW4gbW9kZW0gdHlwZS4gQnV0CisgICBpZiB5b3UgdXNlIHRo aXMgb25lIGluc3RlYWQsIGl0IHdpbGwgZGlhbCBmYXN0ZXIgYmVjYXVzZSBpdCBoYXMgZmV3ZXIK KyAgIGNvbW1hbmRzIHRvIGdpdmUgdG8gdGhlIG1vZGVtOyBpbiB0aGF0IHNlbnNlICImRjEiIGlz IGxpa2UgYSBtYWNybyB0aGF0CisgICBidW5kbGVzIG51bWVyb3VzIGNvbW1hbmRzIGludG8gYSBz aW5nbGUgb25lLiBTZWUgeW91ciBtb2RlbSBtYW51YWwgZm9yCisgICBkZXRhaWxzIGFib3V0IGZh Y3RvcnkgcHJvZmlsZXMgYW5kIGNvbW1hbmRzIHRvIHJlY2FsbCB0aGVtLgorCisgICBXQVJOSU5H OiBEbyBub3QgdXNlIHRoZSBnZW5lcmljLWhpZ2gtc3BlZWQgbW9kZW0gdHlwZSBpbiBvcGVyYXRp bmcKKyAgIHN5c3RlbXMgbGlrZSBWTVMgd2hlcmUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIG5v dCBhdmFpbGFibGUsIGF0IGxlYXN0CisgICBub3QgdW5sZXNzIHlvdSBjaGFuZ2UgdGhlIGluaXQg c3RyaW5nIGZyb20gQVQmRlwxMyB0byBzb21ldGhpbmcgZWxzZQorICAgdGhhdCBlbmFibGVzIGxv Y2FsIFhvbi9Yb2ZmIG9yIG90aGVyIGFwcHJvcHJpYXRlIHR5cGUgb2YgZmxvdyBjb250cm9sLgor CisgICBBbHNvIHNlZSBbNDA0XVNlY3Rpb24gMi4xLjcgZm9yIGFkZGl0aW9uYWwgaGludHMgYWJv dXQgbWFraW5nIGRpYWxpbmcKKyAgIGdvIGZhc3Rlci4KKworMi4yLjIuIE5ldyBNb2RlbSBDb250 cm9scworCisgICBTRVQgTU9ERU0gQ0FQQUJJTElUSUVTIGxpc3QKKyAgICAgICAgICBJbiBDLUtl cm1pdCA3LjAsIHRoaXMgY29tbWFuZCBhdXRvbWF0aWNhbGx5IHR1cm5zIE1PREVNCisgICAgICAg ICAgU1BFRUQtTUFUQ0hJTkcgT0ZGIGlmIFNCIChTcGVlZCBCdWZmZXJpbmcpIGlzIGluIHRoZSBs aXN0LCBhbmQKKyAgICAgICAgICB0dXJucyBpdCBPTiBpZiBTQiBpcyBhYnNlbnQuCisKKyAgIFNF VCBNT0RFTSBDT01NQU5EIFBSRURJQUwtSU5JVCBbIHRleHQgXQorICAgICAgICAgIENvbW1hbmRz IHRvIGJlIHNlbnQgdG8gdGhlIG1vZGVtIGp1c3QgcHJpb3IgdG8gZGlhbGluZy4gTm9ybWFsbHkK KyAgICAgICAgICBub25lLgorCisgICBTRVQgTU9ERU0gU1BFQUtFUiB7IE9OLCBPRkYgfQorICAg ICAgICAgIERldGVybWluZXMgd2hldGhlciBtb2RlbSBzcGVha2VyIGlzIG9uIG9yIG9mZiB3aGls ZSBjYWxsIGlzCisgICAgICAgICAgYmVpbmcgcGxhY2VkLiBPTiBieSBkZWZhdWx0LiBOb3RlOiBU aGlzIGNvbW1hbmQgZG9lcyBub3QgcHJvdmlkZQorICAgICAgICAgIGZpbmUtZ3JhaW5lZCBjb250 cm9sIG92ZXIgd2hlbiB0aGUgc3BlYWtlciBpcyBvbiBvciBvZmYuCisgICAgICAgICAgTm9ybWFs bHksIE9OIG1lYW5zIHdoaWxlIHRoZSBjYWxsIGlzIGJlaW5nIHBsYWNlZCwgdW50aWwgdGhlCisg ICAgICAgICAgcG9pbnQgYXQgd2hpY2ggY2FycmllciBpcyBzdWNjZXNzZnVsbHkgZXN0YWJsaXNo ZWQuIElmIHlvdXIKKyAgICAgICAgICBtb2RlbSBoYXMgYSBkaWZmZXJlbnQgc3BlYWtlciBvcHRp b24gdGhhdCB5b3Ugd2FudCB0byBjaG9vc2UsCisgICAgICAgICAgdGhlbiB1c2UgdGhlIFNFVCBN T0RFTSBDT01NQU5EIFNQRUFLRVIgT04gdGV4dCBjb21tYW5kIHRvCisgICAgICAgICAgc3BlY2lm eSB0aGlzIG9wdGlvbi4KKworICAgU0VUIE1PREVNIENPTU1BTkQgU1BFQUtFUiB7IE9OLCBPRkYg fSBbIHRleHQgXQorICAgICAgICAgIFNwZWNpZnkgb3Igb3ZlcnJpZGUgdGhlIGNvbW1hbmRzIHRv IHR1cm4geW91ciBtb2RlbSdzIHNwZWFrZXIgb24KKyAgICAgICAgICBhbmQgb2ZmLgorCisgICBT RVQgTU9ERU0gVk9MVU1FIHsgTE9XLCBNRURJVU0sIEhJR0ggfQorICAgICAgICAgIFdoZW4gTU9E RU0gU1BFQUtFUiBpcyBvbiwgc2VsZWN0IHZvbHVtZS4gTm90ZTogSW4gc29tZSBtb2RlbXMsCisg ICAgICAgICAgZXNwZWNpYWxseSBpbnRlcm5hbCBvbmVzLCB0aGVzZSBjb21tYW5kcyBoYXZlIG5v IGVmZmVjdDsgdGhpcyBpcworICAgICAgICAgIGEgbGltaXRhdGlvbiBvZiB0aGUgcGFydGljdWxh ciBtb2RlbSwgbm90IG9mIEtlcm1pdC4KKworICAgU0VUIE1PREVNIENPTU1BTkQgVk9MVU1FIHsg TE9XLCBNRURJVU0sIEhJR0ggfSBbIHRleHQgXQorICAgICAgICAgIFNwZWNpZnkgb3Igb3ZlcnJp ZGUgdGhlIGNvbW1hbmRzIHRvIHNldCB5b3VyIG1vZGVtJ3Mgc3BlYWtlcgorICAgICAgICAgIHZv bHVtZS4KKworICAgU0VUIE1PREVNIENPTU1BTkQgSUdOT1JFLURJQUxUT05FIFsgdGV4dCBdCisg ICAgICAgICAgVGhlIGNvbW1hbmQgdG8gZW5hYmxlIGJsaW5kIGRpYWxpbmcgKFs0MDVdU2VjdGlv biAyLjEuNikuCisKKyAgIFNFVCBNT0RFTSBFU0NBUEUtQ0hBUkFDVEVSIGNvZGUKKyAgICAgICAg ICBIYXMgYmVlbiBhdWdtZW50ZWQgdG8gYWxsb3cgY29kZXMgb2YgMCBvciBsZXNzOiA8IDAgbWVh bnMgdGhlCisgICAgICAgICAgZXNjYXBlIG1lY2hhbmlzbSBpcyBkaXNhYmxlZC4gPSAwIG1lYW5z IHRvIHVzZSAocmVzdG9yZSkgdGhlCisgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBt b2RlbSBkYXRhYmFzZS4gPiAwIGFuZCA8IDEyOCBpcyBhCisgICAgICAgICAgbGl0ZXJhbCB2YWx1 ZSB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lLiA+IDEyNyBtZWFucworICAg ICAgICAgIHRoZSBlc2NhcGUgbWVjaGFuaXNtIGlzIGRpc2FibGVkLiBUaGlzIGFmZmVjdHMgIm1v ZGVtIGhhbmd1cCIuCisgICAgICAgICAgV2hlbiB0aGUgZXNjYXBlIG1lY2hhbmlzbSBpcyBkaXNh YmxlZCwgYnV0IFNFVCBNT0RFTQorICAgICAgICAgIEhBTkdVUC1NRVRIT0QgaXMgTU9ERU0tQ09N TUFORCwgaXQgc2VuZHMgdGhlIGhhbmd1cCBjb21tYW5kCisgICAgICAgICAgaW1tZWRpYXRlbHks IHdpdGhvdXQgdGhlIDxwYXVzZT4rKys8cGF1c2U+IGJ1c2luZXNzIGZpcnN0LiBUaGlzCisgICAg ICAgICAgaXMgdXNlZnVsIChmb3IgZXhhbXBsZSkgd2hlbiBzZW5kaW5nIGxvdHMgb2YgbnVtZXJp YyBwYWdlcywgYQorICAgICAgICAgIHByb2Nlc3MgaW4gd2hpY2ggbmV2ZXIgd2UgZ28gb25saW5l LCBhbmQgc28gbmV2ZXIgbmVlZCB0byBlc2NhcGUKKyAgICAgICAgICBiYWNrLiBFbGltaW5hdGlu ZyB0aGUgdW5uZWNlc3NhcnkgcGF1c2VzIGFuZCBlc2NhcGUgc2VxdWVuY2UKKyAgICAgICAgICBh bGxvd3MgYSBsb3QgbW9yZSBwYWdlcyB0byBiZSBzZW50IHBlciB1bml0IHRpbWUuCisKKyAgIFJl Y2FsbCB0aGF0IEMtS2VybWl0IGNhbiBkaWFsIG1vZGVtcyB0byB3aGljaCBpdCBpcyBjb25uZWN0 ZWQgdmlhCisgICBUQ1AvSVAgKFRlbG5ldCBvciBSbG9naW4pIGFzIGRlc2NyaWJlZCBvbiBwYWdl IDEyNiBvZiBbNDA2XVVzaW5nCisgICBDLUtlcm1pdCwgMm5kIEVkLiBJbiB0aGlzIGNhc2UgdGhl IE1PREVNIEhBTkdVUC1NRVRIT0Qgc2hvdWxkIGJlCisgICBNT0RFTS1DT01NQU5ELCBzaW5jZSBS Uy0yMzIgc2lnbmFscyBkb24ndCB3b3JrIG92ZXIgVENQL0lQIGNvbm5lY3Rpb25zLgorICAgQXMg bm90ZWQgaW4gdGhlIG1hbnVhbCwgc3VjaCBjb25uZWN0aW9ucyBhcmUgc2V0IHVwIGJ5IHRoZSBm b2xsb3dpbmcKKyAgIHNlcXVlbmNlOgorCisgIHNldCBob3N0IGhvc3QgWyBwb3J0IF0KKyAgc2V0 IG1vZGVtIHR5cGUgbmFtZQorICBkaWFsIG51bWJlcgorCisgICBCdXQgdGhpcyBjYW4gY2F1c2Ug Y29tcGxpY2F0aW9ucyB3aGVuIHlvdSB1c2UgS2VybWl0IHRvIHN3aXRjaCBiZXR3ZWVuCisgICBz ZXJpYWwgYW5kIFRDUC9JUCBjb25uZWN0aW9ucy4gSW4gdGhlIGZvbGxvd2luZyBzZXF1ZW5jZToK KworICBzZXQgaG9zdCBuYW1lCisgIHNldCBtb2RlbSB0eXBlIG5hbWUKKyAgc2V0IHBvcnQgbmFt ZQorCisgICB0aGUgZmlyc3QgdHdvIGNvbW1hbmRzIG9iZXkgdGhlIHJ1bGVzIGZvciBkaWFsaW5n IG91dCBvdmVyIFRlbG5ldC4KKyAgIEhvd2V2ZXIsIHRoZSBTRVQgUE9SVCBjb21tYW5kIHJlcXVp cmVzIHRoYXQgS2VybWl0IGNsb3NlIGl0cyBjdXJyZW50CisgICAoVGVsbmV0KSBjb25uZWN0aW9u IGJlZm9yZSBpdCBjYW4gb3BlbiB0aGUgc2VyaWFsIHBvcnQgKHNpbmNlIEtlcm1pdAorICAgY2Fu IG9ubHkgaGF2ZSBvbmUgY29ubmVjdGlvbiBvcGVuIGF0IGEgdGltZSkuIEJ1dCBzaW5jZSBhIG1v ZGVtIHR5cGUKKyAgIHdhcyBzZXQgYWZ0ZXIgdGhlICJzZXQgaG9zdCIgY29tbWFuZCB3YXMgZ2l2 ZW4sIEtlcm1pdCBhc3N1bWVzIGl0IGlzIGEKKyAgIFRlbG5ldCBkaWFsb3V0IGNvbm5lY3Rpb24g YW5kIHNvIHNlbmRzIHRoZSBtb2RlbSdzIGhhbmd1cCBzZXF1ZW5jZSBpcworICAgc2VudCB0byB0 aGUgVGVsbmV0IGhvc3QuIFRvIGF2b2lkIHRoaXMsIGNsb3NlIHRoZSBuZXR3b3JrIGNvbm5lY3Rp b24KKyAgIGV4cGxpY2l0bHkgYmVmb3JlIG9wZW5pbmcgdGhlIHNlcmlhbCBvbmU6CisKKyAgc2V0 IGhvc3QgbmFtZQorICBjbG9zZQorICBzZXQgbW9kZW0gdHlwZSBuYW1lCisgIHNldCBwb3J0IG5h bWUKKworMi4zLiBURUxORVQgYW5kIFJMT0dJTgorCisgICBGb3IgYWRkaXRpb25hbCBiYWNrZ3Jv dW5kLCBwbGVhc2UgYWxzbyByZWFkIHRoZSBbNDA3XVRFTE5FVC5UWFQgZmlsZSwKKyAgIGFsc28g YXZhaWxhYmxlIG9uIHRoZSBXZWIgaW4gWzQwOF1IVE1MIGZvcm1hdC4KKworICAgQ2F1dGlvbnM6 CisKKyAgICAgKiBJZiBtYWtpbmcgYSBUZWxuZXQgY29ubmVjdGlvbiB3aXRoIEMtS2VybWl0IHRh a2VzIGEgdmVyeSBsb25nIHRpbWUsCisgICAgICAgbGlrZSBvdmVyIGEgbWludXRlLCB3aGVyZWFz IHRoZSBzeXN0ZW0gVGVsbmV0IHByb2dyYW0gbWFrZXMgdGhlCisgICAgICAgc2FtZSBjb25uZWN0 aW9uIGltbWVkaWF0ZWx5LCB0cnkgaW5jbHVkaW5nIHRoZSAvTk9XQUlUIHN3aXRjaDoKKyAgQy1L ZXJtaXQ+IHRlbG5ldCAvbm93YWl0IGhvc3RuYW1lCisKKyAgICAgICBTZWUgWzQwOV1URUxORVQu VFhUIG9yIFs0MTBdVEVMTkVULkhUTSBmb3IgZGV0YWlscy4gSWYgaXQgYWxzbworICAgICAgIHRh a2VzIGEgdmVyeSBsb25nIHRpbWUgdG8gbWFrZSBhIFRlbG5ldCBjb25uZWN0aW9uIHdpdGggc3lz dGVtCisgICAgICAgVGVsbmV0LCB0aGVuIHRoZSBkZWxheSBpcyBtb3N0IGxpa2VseSBjYXVzZWQg YnkgcmV2ZXJzZSBETlMgbG9va3VwcworICAgICAgIHdoZW4geW91ciBob3N0IGlzIG5vdCBwcm9w ZXJseSByZWdpc3RlcmVkIGluIEROUy4KKyAgICAgKiBXaGVuIHN1cHBseWluZyBudW1lcmljIElQ IGFkZHJlc3NlcyB0byBDLUtlcm1pdCBvciB0byBhbnkgb3RoZXIKKyAgICAgICBhcHBsaWNhdGlv biAocmVndWxhciBUZWxuZXQsIFJsb2dpbiwgZXRjKSwgZG8gbm90IGluY2x1ZGUgbGVhZGluZwor ICAgICAgIDAncyBpbiBhbnkgZmllbGRzIHVubGVzcyB5b3UgaW50ZW5kIGZvciB0aG9zZSBmaWVs ZHMgdG8gYmUKKyAgICAgICBpbnRlcnByZXRlZCBhcyBvY3RhbCAob3IgaGV4KSBudW1iZXJzLiBU aGUgZGVzY3JpcHRpb24gb2YgdGhlCisgICAgICAgSW50ZXJuZXQgYWRkcmVzcyBpbnRlcnByZXRl ciAodGhlIHNvY2tldHMgbGlicmFyeSBpbmV0X2FkZHIoKQorICAgICAgIHJvdXRpbmUpIGluY2x1 ZGVzIHRoZXNlIHdvcmRzOgorCisgICAgIEFsbCBudW1iZXJzIHN1cHBsaWVkIGFzICJwYXJ0cyIg aW4gYSAiLiIgbm90YXRpb24gbWF5IGJlIGRlY2ltYWwsCisgICAgIG9jdGFsLCBvciBoZXhhZGVj aW1hbCwgYXMgc3BlY2lmaWVkIGluIHRoZSBDIGxhbmd1YWdlICh0aGF0IGlzLCBhCisgICAgIGxl YWRpbmcgMHggb3IgMFggaW1wbGllcyBoZXhhZGVjaW1hbDsgb3RoZXJ3aXNlLCBhIGxlYWRpbmcg MCBpbXBsaWVzCisgICAgIG9jdGFsOyBvdGhlcndpc2UsIHRoZSBudW1iZXIgaXMgaW50ZXJwcmV0 ZWQgYXMgZGVjaW1hbCkuCisgICAgICAgVG8gaWxsdXN0cmF0ZSwgMTI4LjU5LjM5LjIgYW5kIDEy OC4wNTkuMDM5LjAwMiBhcmUgbm90IHRoZSBzYW1lCisgICAgICAgaG9zdCEgRXZlbiB0aG91Z2gg bW9zdCBvZiB0aGUgZmllbGRzIGNvbnRhaW4gbm9uLW9jdGFsIGRpZ2l0cy4KKyAgICAgICBVc2lu ZyBzeXN0ZW0gVGVsbmV0IChub3QgS2VybWl0KToKKyAgJCB0ZWxuZXQgMTI4LjA1OS4wMzkuMDAy CisgIFRyeWluZyAxMjguNDkuMzMuMiAuLi4KKworICAgICAgIE9mIGNvdXJzZSB0aGUgc2FtZSB0 aGluZyBoYXBwZW5zIHdpdGggS2VybWl0IGJlY2F1c2UgaXQgdXNlcyAoYXMgaXQKKyAgICAgICBt dXN0KSB0aGUgc2FtZSBzeXN0ZW0gc2VydmljZSBmb3IgcmVzb2x2aW5nIG5ldHdvcmsgYWRkcmVz c2VzIHRoYXQKKyAgICAgICBUZWxuZXQsIEZUUCwgYW5kIGFsbCBvdGhlciBUQ1AvSVAgYXBwbGlj YXRpb25zIHVzZS4KKyAgICAgKiBUaGUgUkxPR0lOIHNlY3Rpb24gb24gcGFnZSAxMjMgZG9lcyBu b3QgbWFrZSBpdCBjbGVhciB0aGF0IHlvdSBjYW4KKyAgICAgICB1c2UgdGhlIFNFVCBURUxORVQg VEVSTUlOQUwtVFlQRSBjb21tYW5kIHRvIGdvdmVybiB0aGUgdGVybWluYWwKKyAgICAgICB0eXBl IHRoYXQgaXMgcmVwb3J0ZWQgYnkgQy1LZXJtaXQgdG8gdGhlIFJMT0dJTiBzZXJ2ZXIuCisgICAg ICogTm90ZSB0aGF0IHRoZSBTRVQgVENQIGNvbW1hbmRzIGRlc2NyaWJlZCBvbiBwYWdlcyAxMjIt MTIzIG1pZ2h0IGJlCisgICAgICAgYWJzZW50OyBzb21lIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQg VENQL0lQIGRvIG5vdCBzdXBwb3J0IHRoZXNlCisgICAgICAgcGFydGljdWxhciBjb250cm9scy4K KworICAgTmV3IGNvbW1hbmRzOgorCisgICBURUxPUFQgeyBBTywgQVlULCBCUkVBSywgQ0FOQ0VM LCBFQywgRUwsIEVPRiwgRU9SLCBHQSwgSVAsIERNQVJLLAorICAgICAgICAgIERPLCBET05ULCBO T1AsIFNCLCBTRSwgU1VTUCwgV0lMTCwgV09OVCB9CisgICAgICAgICAgVGhpcyBjb21tYW5kIHdh cyBhdmFpbGFibGUgcHJldmlvdXNseSwgYnV0IHN1cHBvcnRlZCBvbmx5IERPLAorICAgICAgICAg IERPTlQsIFdJTEwsIGFuZCBXT05ULiBOb3cgaXQgbGV0cyB5b3Ugc2VuZCBhbGwgdGhlIFRlbG5l dAorICAgICAgICAgIHByb3RvY29sIGNvbW1hbmRzLiBOb3RlIHRoYXQgY2VydGFpbiBjb21tYW5k cyBkbyBub3QgcmVxdWlyZSBhCisgICAgICAgICAgcmVzcG9uc2UsIGFuZCB0aGVyZWZvcmUgY2Fu IGJlIHVzZWQgYXMgbm9uZGVzdHJ1Y3RpdmUgInByb2JlcyIKKyAgICAgICAgICB0byBzZWUgaWYg dGhlIFRlbG5ldCBzZXNzaW9uIGlzIHN0aWxsIG9wZW47IGUuZy46CisKKyAgc2V0IGhvc3QgeHl6 Y29ycC5jb20KKyAgLi4uCisgIHRlbG9wdCBub3AKKyAgaWYgZmFpbCBzdG9wIDEgQ29ubmVjdGlv biBsb3N0CisKKyAgIFNFVCBUQ1AgQUREUkVTUyBbIGlwLWFkZHJlc3MgXQorICAgICAgICAgIFNw ZWNpZmllcyB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgY29tcHV0ZXIgdGhhdCBDLUtlcm1pdCBpcwor ICAgICAgICAgIHJ1bm5pbmcgb24uIE5vcm1hbGx5IHRoaXMgaXMgbm90IG5lY2Vzc2FyeS4gVGhl IGV4Y2VwdGlvbiB3b3VsZAorICAgICAgICAgIGJlIGlmIHlvdXIgbWFjaGluZSBoYXMgbXVsdGlw bGUgbmV0d29yayBhZGFwdGVycyAocGh5c2ljYWwgb3IKKyAgICAgICAgICB2aXJ0dWFsKSB3aXRo IGEgZGlmZmVyZW50IGFkZHJlc3MgZm9yIGVhY2ggYWRhcHRlciBBTkQgeW91IHdhbnQKKyAgICAg ICAgICBDLUtlcm1pdCB0byB1c2UgYSBzcGVjaWZpYyBhZGRyZXNzIHdoZW4gbWFraW5nIG91dGdv aW5nCisgICAgICAgICAgY29ubmVjdGlvbnMgb3IgYWNjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rp b25zLgorCisgICBTRVQgVENQIEROUy1TRVJWSUNFLVJFQ09SRFMgeyBPTiwgT0ZGIH0KKyAgICAg ICAgICBUZWxscyBDLUtlcm1pdCB3aGV0aGVyIHRvIHRyeSB0byB1c2UgRE5TIFNSViByZWNvcmRz IHRvCisgICAgICAgICAgZGV0ZXJtaW5lIHRoZSBob3N0IGFuZCBwb3J0IG51bWJlciB1cG9uIHdo aWNoIHRvIGZpbmQgYW4KKyAgICAgICAgICBhZHZlcnRpc2VkIHNlcnZpY2UuIEZvciBleGFtcGxl LCBpZiBhIGhvc3Qgd2FudHMgcmVndWxhciBUZWxuZXQKKyAgICAgICAgICBjb25uZWN0aW9ucyBy ZWRpcmVjdGVkIHRvIHNvbWUgcG9ydCBvdGhlciB0aGFuIDIzLCB0aGlzIGZlYXR1cmUKKyAgICAg ICAgICBhbGxvd3MgQy1LZXJtaXQgdG8gYXNrIHRoZSBob3N0IHdoaWNoIHBvcnQgaXQgc2hvdWxk IHVzZS4gU2luY2UKKyAgICAgICAgICBub3QgYWxsIGRvbWFpbiBzZXJ2ZXJzIGFyZSBzZXQgdXAg dG8gYW5zd2VyIHN1Y2ggcmVxdWVzdHMsIHRoaXMKKyAgICAgICAgICBmZWF0dXJlIGlzIE9GRiBi eSBkZWZhdWx0LgorCisgICBTRVQgVENQIFJFVkVSU0UtRE5TLUxPT0tVUCB7IE9OLCBPRkYsIEFV VE8gfQorICAgICAgICAgIFRlbGxzIEtlcm1pdCB3aGV0aGVyIHRvIHBlcmZvcm0gYSByZXZlcnNl IEROUyBsb29rdXAgb24gVENQL0lQCisgICAgICAgICAgY29ubmVjdGlvbnMuIFRoaXMgYWxsb3dz IEtlcm1pdCB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBob3N0bmFtZQorICAgICAgICAgIG9mIHRo ZSBob3N0IGl0IGlzIGNvbm5lY3RlZCB0bywgd2hpY2ggaXMgdXNlZnVsIGZvciBjb25uZWN0aW9u cworICAgICAgICAgIHRvIGhvc3QgcG9vbHMsIGFuZCBpcyByZXF1aXJlZCBmb3IgS2VyYmVyb3Mg Y29ubmVjdGlvbnMgdG8gaG9zdAorICAgICAgICAgIHBvb2xzIGFuZCBmb3IgaW5jb21pbmcgY29u bmVjdGlvbnMuIElmIHRoZSBvdGhlciBob3N0IGRvZXMgbm90CisgICAgICAgICAgaGF2ZSBhIERO UyBlbnRyeSwgdGhlIHJldmVyc2UgbG9va3VwIGNvdWxkIHRha2UgYSBsb25nIHRpbWUKKyAgICAg ICAgICAobWludXRlcykgdG8gZmFpbCwgYnV0IHRoZSBjb25uZWN0aW9uIHdpbGwgc3RpbGwgYmUg bWFkZS4gVHVybgorICAgICAgICAgIHRoaXMgb3B0aW9uIE9GRiBmb3Igc3BlZWRpZXIgY29ubmVj dGlvbnMgaWYgeW91IGRvIG5vdCBuZWVkIHRvCisgICAgICAgICAga25vdyBleGFjdGx5IHdoaWNo IGhvc3QgeW91IGFyZSBjb25uZWN0ZWQgdG8gYW5kIHlvdSBhcmUgbm90CisgICAgICAgICAgdXNp bmcgS2VyYmVyb3MuIEFVVE8sIHRoZSBkZWZhdWx0LCBtZWFucyB0aGUgbG9va3VwIGlzIGRvbmUg b24KKyAgICAgICAgICBob3N0bmFtZXMsIGJ1dCBub3Qgb24gbnVtZXJpYyBJUCBhZGRyZXNzZXMu CisKKyAgIFNFVCBURUxORVQgV0FJVC1GT1ItTkVHT1RJQVRJT05TIHsgT04sIE9GRiB9CisgICAg ICAgICAgRWFjaCBUZWxuZXQgb3B0aW9uIG11c3QgYmUgZnVsbHkgbmVnb3RpYXRlZCBlaXRoZXIg T24gb3IgT2ZmCisgICAgICAgICAgYmVmb3JlIHRoZSBzZXNzaW9uIGNhbiBjb250aW51ZS4gVGhp cyBpcyBlc3BlY2lhbGx5IHRydWUgd2l0aAorICAgICAgICAgIG9wdGlvbnMgdGhhdCByZXF1aXJl IHN1Yi1uZWdvdGlhdGlvbnMgc3VjaCBhcyBBdXRoZW50aWNhdGlvbiwKKyAgICAgICAgICBFbmNy eXB0aW9uLCBhbmQgS2VybWl0OyBmb3IgcHJvcGVyIHN1cHBvcnQgb2YgdGhlc2Ugb3B0aW9ucwor ICAgICAgICAgIEtlcm1pdCBtdXN0IHdhaXQgZm9yIHRoZSBuZWdvdGlhdGlvbnMgdG8gY29tcGxl dGUuIE9mIGNvdXJzZSwKKyAgICAgICAgICBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdo ZXRoZXIgYSByZXBseSBpcyBkZWxheWVkIG9yIG5vdAorICAgICAgICAgIGNvbWluZyBhdCBhbGws IGFuZCBzbyB3aWxsIHdhaXQgYSBtaW51dGUgb3IgbW9yZSBmb3IgcmVxdWlyZWQKKyAgICAgICAg ICByZXBsaWVzIGJlZm9yZSBjb250aW51aW5nIHRoZSBzZXNzaW9uLiBJZiB5b3Uga25vdyB0aGF0 IEtlcm1pdCdzCisgICAgICAgICAgVGVsbmV0IHBhcnRuZXIgd2lsbCBub3QgYmUgc2VuZGluZyB0 aGUgcmVxdWlyZWQgcmVwbGllcywgeW91IGNhbgorICAgICAgICAgIHNldCB0aGlzIG9wdGlvbiBv ZiBPRkYgdG8gYXZvaWQgdGhlIGxvbmcgdGltZW91dHMuIE9yIHlvdSBjYW4KKyAgICAgICAgICBp bnN0cnVjdCBLZXJtaXQgdG8gUkVGVVNFIHNwZWNpZmljIG9wdGlvbnMgd2l0aCB0aGUgU0VUIFRF TE9QVAorICAgICAgICAgIGNvbW1hbmQuCisKKyAgIFNFVCBURUxPUFQgWyB7IC9DTElFTlQsIC9T RVJWRVIgfSBdIG9wdGlvbgorICAgICAgICAgIHsgQUNDRVBURUQsIFJFRlVTRUQsIFJFUVVFU1RF RCwgUkVRVUlSRUQgfQorICAgICAgICAgIFsgeyBBQ0NFUFRFRCwgUkVGVVNFRCwgUkVRVUVTVEVE LCBSRVFVSVJFRCB9IF0KKyAgICAgICAgICBTRVQgVEVMT1BUIGxldHMgeW91IHNwZWNpZnkgcG9s aWN5IHJlcXVpcmVtZW50cyBmb3IgS2VybWl0J3MKKyAgICAgICAgICBoYW5kbGluZyBvZiBUZWxu ZXQgb3B0aW9uIG5lZ290aWF0aW9ucy4gU2V0dGluZyBhbiBvcHRpb24gaXMKKyAgICAgICAgICBS RVFVSVJFRCBjYXVzZXMgS2VybWl0IHRvIG9mZmVyIHRoZSBvcHRpb24gdG8gdGhlIHBlZXIgYW5k CisgICAgICAgICAgZGlzY29ubmVjdCBpZiB0aGUgb3B0aW9uIGlzIHJlZnVzZWQuIFJFUVVFU1RF RCBjYXVzZXMgS2VybWl0IHRvCisgICAgICAgICAgb2ZmZXIgYW4gb3B0aW9uIHRvIHRoZSBwZWVy LiBBQ0NFUFRFRCByZXN1bHRzIGluIG5vIG9mZmVyIGJ1dAorICAgICAgICAgIEtlcm1pdCB3aWxs IGF0dGVtcHQgdG8gbmVnb3RpYXRlIHRoZSBvcHRpb24gaWYgaXQgaXMgcmVxdWVzdGVkLgorICAg ICAgICAgIFJFRlVTRUQgaW5zdHJ1Y3RzIEtlcm1pdCB0byByZWZ1c2UgdGhlIG9wdGlvbiBpZiBp dCBpcyByZXF1ZXN0ZWQKKyAgICAgICAgICBieSB0aGUgcGVlci4KKworICAgICAgICAgIFNvbWUg b3B0aW9ucyBhcmUgbmVnb3RpYXRlZCBpbiB0d28gZGlyZWN0aW9ucyBhbmQgYWNjZXB0CisgICAg ICAgICAgc2VwYXJhdGUgcG9saWNpZXMgZm9yIGVhY2ggZGlyZWN0aW9uOyB0aGUgZmlyc3Qga2V5 d29yZCBhcHBsaWVzCisgICAgICAgICAgdG8gS2VybWl0IGl0c2VsZiwgdGhlIHNlY29uZCBhcHBs aWVzIHRvIEtlcm1pdCdzIFRlbG5ldCBwYXJ0bmVyOworICAgICAgICAgIGlmIHRoZSBzZWNvbmQg a2V5d29yZCBpcyBvbWl0dGVkLCBhbiBhcHByb3ByaWF0ZQorICAgICAgICAgIChvcHRpb24tc3Bl Y2lmaWMpIGRlZmF1bHQgaXMgYXBwbGllZC4gWW91IGNhbiBhbHNvIGluY2x1ZGUgYQorICAgICAg ICAgIC9DTElFTlQgb3IgL1NFUlZFUiBzd2l0Y2ggdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgZ2l2 ZW4gcG9saWNpZXMKKyAgICAgICAgICBhcHBseSB3aGVuIEtlcm1pdCBpcyB0aGUgVGVsbmV0IGNs aWVudCBvciB0aGUgVGVsbmV0IHNlcnZlcjsgaWYKKyAgICAgICAgICBubyBzd2l0Y2ggaXMgZ2l2 ZW4sIHRoZSBjb21tYW5kIGFwcGxpZXMgdG8gdGhlIGNsaWVudC4KKworICAgICAgICAgIE5vdGUg dGhhdCBzb21lIG9mIEtlcm1pdCdzIFRlbG5ldCBwYXJ0bmVycyBmYWlsIHRvIHJlZnVzZQorICAg ICAgICAgIG9wdGlvbnMgdGhhdCB0aGV5IGRvIG5vdCByZWNvZ25pemUgYW5kIGluc3RlYWQgZG8g bm90IHJlc3BvbmQgYXQKKyAgICAgICAgICBhbGwuIEluIHRoaXMgY2FzZSBpdCBpcyBwb3NzaWJs ZSB0byB1c2UgU0VUIFRFTE9QVCB0byBpbnN0cnVjdAorICAgICAgICAgIEtlcm1pdCB0byBSRUZV U0UgdGhlIG9wdGlvbiBiZWZvcmUgY29ubmVjdGluZyB0byB0aGUgcHJvYmxlbQorICAgICAgICAg IGhvc3QsIHRodXMgc2tpcHBpbmcgdGhlIHByb2JsZW1hdGljIG5lZ290aWF0aW9uLgorCisgICAg ICAgICAgVXNlIFNIT1cgVEVMT1BUIHRvIHZpZXcgY3VycmVudCBUZWxuZXQgT3B0aW9uIG5lZ290 aWF0aW9uCisgICAgICAgICAgc2V0dGluZ3MuIFNIT1cgVEVMTkVUIGRpc3BsYXlzIGN1cnJlbnQg VGVsbmV0IHNldHRpbmdzLgorCisyLjMuMC4gQnVnIEZpeGVzCisKKyAgIElmICJzZXQgaG9zdCBu b25leGlzdGVudC1ob3N0IiB3YXMgZ2l2ZW4gKGFuZCBpdCBwcm9wZXJseSBmYWlsZWQpLAorICAg Zm9sbG93ZWQgYnkgY2VydGFpbiBjb21tYW5kcyBsaWtlIFNFTkQsIHRoZSBvcmlnaW5hbCBsaW5l IGFuZCBtb2RlbQorICAgdHlwZSB3ZXJlIG5vdCByZXN0b3JlZCBhbmQgQy1LZXJtaXQgdGhvdWdo dCB0aGF0IGl0IHN0aWxsIGhhZCBhIG5ldHdvcmsKKyAgIGhvc3RuYW1lOyBmaXhlZCBpbiA3LjAu CisKKzIuMy4xLiBUZWxuZXQgQmluYXJ5IE1vZGUgQnVnIEFkanVzdG1lbnRzCisKKyAgIFNFVCBU RUxORVQgQlVHIEJJTkFSWS1NRS1NRUFOUy1VLVRPTyB7IE9OLCBPRkYgfSB3YXMgYWRkZWQgdG8g ZWRpdCAxOTIKKyAgIGFmdGVyIHRoZSBib29rIHdhcyBwcmludGVkLiBBbHNvIFNFVCBURUxORVQg QlVHIEJJTkFSWS1VLU1FQU5TLU1FLVRPTy4KKyAgIFRoZSBkZWZhdWx0IGZvciBib3RoIGlzIE9G Ri4gT04gc2hvdWxkIGJlIHVzZWQgd2hlbiBjb21tdW5pY2F0aW5nIHdpdGgKKyAgIGEgVGVsbmV0 IHBhcnRuZXIgKGNsaWVudCBvciBzZXJ2ZXIpIHRoYXQgbWlzdGFrZW5seSBiZWxpZXZlcyB0aGF0 CisgICB0ZWxsaW5nIEMtS2VybWl0IHRvIGVudGVyIFRlbG5ldCBiaW5hcnkgbW9kZSBhbHNvIG1l YW5zIHRoYXQgaXQsIHRvbywKKyAgIGlzIGluIGJpbmFyeSBtb2RlLCBjb250cmFyeSB0byB0aGUg VGVsbmV0IHNwZWNpZmljYXRpb24sIHdoaWNoIHNheXMKKyAgIHRoYXQgYmluYXJ5IG1vZGUgbXVz dCBiZSBuZWdvdGlhdGVkIGluIGVhY2ggZGlyZWN0aW9uIHNlcGFyYXRlbHkuCisKKzIuMy4yLiBW TVMgVUNYIFRlbG5ldCBQb3J0IEJ1ZyBBZGp1c3RtZW50CisKKyAgIEEgbmV3IGNvbW1hbmQsIFNF VCBUQ1AgVUNYLVBPUlQtQlVHLCB3YXMgYWRkZWQgZm9yIFZNUyB2ZXJzaW9ucyB3aXRoCisgICBV Q1ggKERFQyBUQ1AvSVApLCBhcHBseWluZyBvbmx5IHRvIGVhcmx5IHZlcnNpb25zIG9mIFVDWCwg bGlrZSAyLjIgb3IKKyAgIGVhcmxpZXIuIElmIHlvdSB0cnkgdG8gdXNlIFZNUyBDLUtlcm1pdCB0 byBtYWtlIGEgVGVsbmV0IGNvbm5lY3Rpb24KKyAgIHVzaW5nIGEgcG9ydCBuYW1lIChsaWtlICJ0 ZWxuZXQiLCB3aGljaCBpcyB1c2VkIGJ5IGRlZmF1bHQpLCB0aGUKKyAgIHVuZGVybHlpbmcgVUNY IGdldHNlcnZieW5hbWUoKSBmdW5jdGlvbiBtaWdodCByZXR1cm4gdGhlIHNlcnZpY2UgbnVtYmVy CisgICB3aXRoIGl0cyBieXRlcyBzd2FwcGVkIGFuZCB0aGUgY29ubmVjdGlvbiB3aWxsIGZhaWwu IElmICJ0ZWxuZXQKKyAgIGhvc3RuYW1lIDIzIiB3b3JrcywgdGhlbiB5b3VyIHZlcnNpb24gb2Yg VUNYIGhhcyB0aGlzIGJ1ZyBhbmQgeW91IGNhbgorICAgcHV0ICJzZXQgdGNwIHVjeC1wb3J0LWJ1 ZyBvbiIgaW4geW91ciBDS0VSTUlULklOSSBmaWxlIHRvIGdldCBhcm91bmQKKyAgIGl0LgorCisy LjMuMy4gVGVsbmV0IE5ldyBFbnZpcm9ubWVudCBPcHRpb24KKworICAgVGhlIFRFTE5FVCBORVct RU5WSVJPTk1FTlQgb3B0aW9uIChbNDExXVJGQyAxNTcyKSBpcyBzdXBwb3J0ZWQgYXMgNy4wLgor ICAgVGhpcyBvcHRpb24gYWxsb3dzIHRoZSBDLUtlcm1pdCBUZWxuZXQgY2xpZW50IHRvIHNlbmQg Y2VydGFpbgorICAgd2VsbC1rbm93biB2YXJpYWJsZXMgdG8gdGhlIFRlbG5ldCBzZXJ2ZXIsIGlu Y2x1ZGluZyBVU0VSLCBQUklOVEVSLAorICAgRElTUExBWSwgYW5kIHNldmVyYWwgb3RoZXJzLiBU aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluCisgICBXaW5kb3dzIGFuZCBPUy8y LCBkaXNhYmxlZCBieSBkZWZhdWx0IGVsc2V3aGVyZS4gVGhlIGNvbW1hbmQgdG8gZW5hYmxlCisg ICBhbmQgZGlzYWJsZSBpdCBpczoKKworICBTRVQgVEVMTkVUIEVOVklST05NRU5UIHsgT04sIE9G RiB9CisKKyAgIFdoZW4gT04sIGFuZCB5b3UgVGVsbmV0IHRvIGFub3RoZXIgY29tcHV0ZXIsIHlv dSBtaWdodCAob3IgbWlnaHQgbm90KQorICAgbm90aWNlIHRoYXQgdGhlICJsb2dpbjoiIG9yICJV c2VybmFtZToiIHByb21wdCBkb2VzIG5vdCBhcHBlYXIgLS0KKyAgIHRoYXQncyBiZWNhdXNlIHlv dXIgdXNlcm5hbWUgd2FzIHNlbnQgYWhlYWQsIGluIHdoaWNoIGNhc2UgdGhlIHJlbW90ZQorICAg c3lzdGVtIG1pZ2h0IHByb21wdCB5b3Ugb25seSBmb3IgeW91ciBwYXNzd29yZCAoc2ltaWxhciB0 byBSbG9naW4pLiBVc2UKKyAgICJzZXQgdGVsbmV0IGVudmlyb25tZW50IG9mZiIgdG8gZGVmZWF0 IHRoaXMgZmVhdHVyZSwgcGFydGljdWxhcmx5IGluCisgICBzY3JpcHRzIHdoZXJlIHRoZSBkaWFs b2cgbXVzdCBiZSBwcmVkaWN0YWJsZS4gWW91IGNhbiBhbHNvIHVzZSB0aGlzCisgICBjb21tYW5k IHRvIHNwZWNpZnkgb3Igb3ZlcnJpZGUgc3BlY2lmaWMgd2VsbC1rbm93biBlbnZpcm9ubWVudCB2 YXJpYWJsZQorICAgdmFsdWVzOgorCisgU0VUIFRFTE5FVCBFTlZJUk9OTUVOVCB7IEFDQ1QsRElT UExBWSxKT0IsUFJJTlRFUixTWVNURU1UWVBFLFVTRVIgfSBbIHRleHQgXQorCisyLjMuNC4gVGVs bmV0IExvY2F0aW9uIE9wdGlvbgorCisgICBUaGUgVEVMTkVUIExPQ0FUSU9OIG9wdGlvbiAoWzQx Ml1SRkMgNzc5KSBpcyBzdXBwb3J0ZWQgaW4gNy4wLiBUaGlzCisgICBvcHRpb24gYWxsb3dzIHRo ZSBDLUtlcm1pdCBUZWxuZXQgY2xpZW50IHRvIHNlbmQgYSBsb2NhdGlvbiBzdHJpbmcgdG8KKyAg IHRoZSBzZXJ2ZXIgaWYgdGhlIHNlcnZlciBpbmRpY2F0ZXMgaXRzIHdpbGxpbmduZXNzIHRvIGFj Y2VwdCBvbmUuIElmIGFuCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lZCBMT0NBVElPTiBl eGlzdHMgYXQgdGhlIHRpbWUgQy1LZXJtaXQgc3RhcnRzLAorICAgaXRzIHZhbHVlIGlzIHVzZWQg YXMgdGhlIGxvY2F0aW9uIHN0cmluZy4gSWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LAorICAgdXNl OgorCisgIFNFVCBURUxORVQgTE9DQVRJT04gdGV4dAorCisgICBJZiB5b3Ugb21pdCB0aGUgdGV4 dCBmcm9tIHRoaXMgY29tbWFuZCwgdGhlIFRlbG5ldCBsb2NhdGlvbiBmZWF0dXJlIGlzCisgICBk aXNhYmxlZC4KKworICAgU0VUIFRFTE5FVCBFTlZJUk9OTUVOVCBESVNQTEFZIGlzIHVzZWQgdG8g c2V0IHRoZSBESVNQTEFZIHZhcmlhYmxlIHRoYXQKKyAgIGlzIHNlbnQgdG8gdGhlIGhvc3QsIGFz IHdlbGwgYXMgdGhlIFhESVNQTEFZIGxvY2F0aW9uLgorCisyLjMuNS4gQ29ubmVjdGluZyB0byBS YXcgVENQIFNvY2tldHMKKworICAgVGhlIFNFVCBIT1NUIGFuZCBURUxORVQgY29tbWFuZHMgbm93 IGFjY2VwdCBhbiBvcHRpb25hbCBzd2l0Y2gsCisgICAvUkFXLVNPQ0tFVCwgYXQgdGhlIGVuZCwg b25seSBpZiB5b3UgZmlyc3QgZ2l2ZSBhIGhvc3QgYW5kIGEgcG9ydC4KKyAgIEV4YW1wbGU6CisK KyAgc2V0IGhvc3QgeHl6Y29ycC5jb20gMjMgL3Jhdy1zb2NrZXQKKyAgc2V0IGhvc3QgMTI4LjQ5 LjM5LjI6MjAwMCAvcmF3LXNvY2tldAorICB0ZWxuZXQgeHl6Y29ycC5jb20gMzAwMCAvcmF3CisK KyAgIFdpdGhvdXQgdGhpcyBzd2l0Y2gsIEMtS2VybWl0IGJlaGF2ZXMgYXMgYSBUZWxuZXQgY2xp ZW50IHdoZW4gKGEpIHRoZQorICAgcG9ydCBpcyAyMyBvciAxNjQ5LCBvciAoYikgdGhlIHBvcnQg aXMgbm90IDUxMyBhbmQgdGhlIHNlcnZlciBzZW50IHdoYXQKKyAgIGFwcGVhcmVkIHRvIGJlIFRl bG5ldCBuZWdvdGlhdGlvbnMgLS0gdGhhdCBpcywgbWVzc2FnZXMgc3RhcnRpbmcgd2l0aAorICAg MHhGRiAoSUFDKS4gV2l0aCB0aGlzIHN3aXRjaCwgS2VybWl0IHNob3VsZCB0cmVhdCBhbGwgaW5j b21pbmcgYnl0ZXMgYXMKKyAgIHJhdyBkYXRhLCBhbmQgd2lsbCBub3QgZW5nYWdlIGluIGFueSBU ZWxuZXQgbmVnb3RpYXRpb25zIG9yIE5WVCBDUkxGCisgICBtYW5pcHVsYXRpb25zLiBUaGlzIGFs bG93cyB0cmFuc3BhcmVudCBvcGVyYXRpb24gdGhyb3VnaCAoZS5nLikgcmF3IFRDUAorICAgcG9y dHMgb24gQ2lzY28gdGVybWluYWwgc2VydmVycywgdGhyb3VnaCB0aGUgJ21vZGVtZCcgbW9kZW0g c2VydmVyLAorICAgZXRjLgorCisyLjMuNi4gSW5jb21pbmcgVENQIENvbm5lY3Rpb25zCisKKyAg IEFjY29tcGxpc2hlZCB2aWEgU0VUIEhPU1QgKiBwb3J0LCB3ZXJlIGludHJvZHVjZWQgaW4gQy1L ZXJtaXQgNi4wLCBidXQKKyAgIGZvciBVTklYIG9ubHkuIEluIFZlcnNpb24gNy4wLCB0aGV5IGFy ZSBhbHNvIGF2YWlsYWJsZSBmb3IgVk1TLgorCisyLjQuIFRoZSBFSUdIVEJJVCBDb21tYW5kCisK KyAgIEVJR0hUQklUIGlzIHNpbXBseSBhIHNob3J0aGFuZCBmb3I6IFNFVCBQQVJJVFkgTk9ORSwg U0VUIFRFUk1JTkFMCisgICBCWVRFU0laRSA4LCBTRVQgQ09NTUFORCBCWVRFU0laRSA4OyB0aGF0 IGlzLCBhIHdheSB0byBzZXQgdXAgYW4gOC1iaXQKKyAgIGNsZWFuIGNvbm5lY3Rpb24gaW4gYSBz aW5nbGUgY29tbWFuZC4KKworMi41LiBUaGUgU2VydmljZXMgRGlyZWN0b3J5CisKKyAgIENoYXB0 ZXIgNyBvZiBbNDEzXVVzaW5nIEMtS2VybWl0IGRvZXMgbm90IG1lbnRpb24gdGhlIFVMT0dJTiBt YWNybywKKyAgIHdoaWNoIGlzIHVzZWQgYnkgb3VyIHNhbXBsZSBzZXJ2aWNlcyBkaXJlY3Rvcnks IENLRVJNSVQuS05ELiBVbmxpa2UKKyAgIFVOSVhMT0dJTiwgVk1TTE9HSU4sIGV0YywgdGhpcyBv bmUgaXMgZm9yIHVzZSB3aXRoIHN5c3RlbXMgdGhhdCByZXF1aXJlCisgICBhIHVzZXIgSUQgYnV0 IG5vIHBhc3N3b3JkLiBUaGVyZWZvcmUgaXQgZG9lc24ndCBwcm9tcHQgZm9yIGEgcGFzc3dvcmQK KyAgIG9yIHdhaXQgZm9yIGEgcGFzc3dvcmQgcHJvbXB0IGZyb20gdGhlIHJlbW90ZSBzZXJ2aWNl LgorCisgICBJbiB2ZXJzaW9uIDcuMCwgdGhlIENBTEwgbWFjcm8gd2FzIGNoYW5nZWQgdG8gbm90 IGV4ZWN1dGUgYSBTRVQgTU9ERU0KKyAgIFRZUEUgY29tbWFuZCBpZiB0aGUgZ2l2ZW4gbW9kZW0g dHlwZSB3YXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgb25lOworICAgb3RoZXJ3aXNlIHRoZSBu ZXcgU0VUIE1PREVNIFRZUEUgY29tbWFuZCB3b3VsZCBvdmVyd3JpdGUgYW55CisgICBjdXN0b21p emF0aW9ucyB0aGF0IHRoZSB1c2VyIGhhZCBtYWRlIHRvIHRoZSBtb2RlbSBzZXR0aW5ncy4gRGl0 dG8gZm9yCisgICBTRVQgTElORSAvIFNFVCBQT1JUIGFuZCBTRVQgU1BFRUQuCisKKzIuNi4gQ2xv c2luZyBDb25uZWN0aW9ucworCisgICBVbnRpbCB2ZXJzaW9uIDcuMCwgdGhlcmUgd2FzIG5ldmVy IGFuIG9idmlvdXMgYW5kIGdlbmVyYWwgd2F5IHRvIGNsb3NlCisgICBhIGNvbm5lY3Rpb24uIElm IGEgc2VyaWFsIGNvbm5lY3Rpb24gd2FzIG9wZW4sIGl0IGNvdWxkIGJlIGNsb3NlZCBieQorICAg InNldCBsaW5lIiBvciAic2V0IHBvcnQiIChnaXZpbmcgbm8gZGV2aWNlIG5hbWUpOyBpZiBhIG5l dHdvcmsKKyAgIGNvbm5lY3Rpb24gd2FzIG9wZW4sIGl0IGNvdWxkIGJlIGNsb3NlZCBieSAic2V0 IGhvc3QiIChubyBob3N0IG5hbWUpLgorCisgICBJbiB2ZXJzaW9uIDcuMCwgYSBuZXcgY29tbWFu ZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gaW4gYW4gb2J2aW91cyBhbmQKKyAgIHN0cmFpZ2h0Zm9y d2FyZCB3YXksIG5vIG1hdHRlciB3aGF0IHRoZSBjb25uZWN0aW9uIHR5cGU6CisKKyAgQ0xPU0Ug WyBDT05ORUNUSU9OIF0KKworICAgVGhlIENMT1NFIGNvbW1hbmQgd2FzIGFscmVhZHkgcHJlc2Vu dCwgYW5kIHJlcXVpcmVkIGFuIG9wZXJhbmQgc3VjaCBhcworICAgREVCVUctTE9HLCBXUklURS1G SUxFLCBldGMsIGFuZCBzbyBjb3VsZCBuZXZlciBiZSBnaXZlbiBieSBpdHNlbGYuIFRoZQorICAg bmV3IENPTk5FQ1RJT04gb3BlcmFuZCBpcyBub3cgdGhlIGRlZmF1bHQgb3BlcmFuZCBmb3IgQ0xP U0UsIHNvIENMT1NFCisgICBieSBpdHNlbGYgY2xvc2VzIHRoZSBjb25uZWN0aW9uLCBpZiBvbmUg aXMgb3BlbiwganVzdCBhcyB5b3Ugd291bGQKKyAgIGV4cGVjdCwgZXNwZWNpYWxseSBpZiB5b3Ug YXJlIGEgVGVsbmV0IG9yIEZ0cCB1c2VyLgorCisgICBBbHNvIHNlZSB0aGUgZGVzY3JpcHRpb24g b2YgdGhlIG5ldyBTRVQgQ0xPU0UtT04tRElTQ09OTkVDVCBjb21tYW5kIGluCisgICBbNDE0XVNl Y3Rpb24gMi4xMC4KKworMi43LiBVc2luZyBDLUtlcm1pdCB3aXRoIEV4dGVybmFsIENvbW11bmlj YXRpb24gUHJvZ3JhbXMKKworICAgQy1LZXJtaXQgNy4wIGluY2x1ZGVzIGEgbmV3IGFiaWxpdHkg dG8gY3JlYXRlIGFuZCBjb25kdWN0IHNlc3Npb25zCisgICB0aHJvdWdoIG90aGVyIGNvbW11bmlj YXRpb25zIHByb2dyYW1zLiBUd28gbWV0aG9kcyBhcmUgYXZhaWxhYmxlOgorCisgICAgMS4gUHR5 IChwc2V1ZG90ZXJtaW5hbCk6IFRoZSBleHRlcm5hbCBwcm9ncmFtIGlzIHJ1biBvbiBhCisgICAg ICAgInBzZXVkb3Rlcm1pbmFsIiwgd2hpY2ggaXMgY29udHJvbGxlZCBieSBLZXJtaXQuIFRoaXMg bWV0aG9kIHdvcmtzCisgICAgICAgd2l0aCBwcmFjdGljYWxseSBhbnkgZXh0ZXJuYWwgcHJvZ3Jh bSwgYnV0IGl0IGlzIG5vdCBwb3J0YWJsZS4gQXQKKyAgICAgICB0aGlzIHdyaXRpbmcsIGl0IHdv cmtzIG9ubHkgb24gc29tZSAobm90IGFsbCkgVU5JWCB2ZXJzaW9ucywgYW5kCisgICAgICAgbm90 IG9uIGFueSBub24tVU5JWCBwbGF0Zm9ybXMuCisgICAgMi4gUGlwZTogVGhlIGV4dGVybmFsIHBy b2dyYW0ncyBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0IGFyZQorICAgICAgIHJlZGlyZWN0ZWQg dGhyb3VnaCBhICJwaXBlIiBjb250cm9sbGVkIGJ5IEtlcm1pdC4gVGhpcyBtZXRob2QgaXMKKyAg ICAgICByZWxhdGl2ZWx5IHBvcnRhYmxlIC0tIGl0IHNob3VsZCB3b3JrIGFjcm9zcyBhbGwgVU5J WCB2ZXJzaW9ucywgYW5kCisgICAgICAgaXQgYWxzbyB3b3JrcyBpbiBXaW5kb3dzIGFuZCBPUy8y IC0tIGJ1dCBpdCBpcyBlZmZlY3RpdmUgb25seSB3aGVuCisgICAgICAgdGhlIGV4dGVybmFsIHBy b2dyYW0gYWN0dWFsbHkgdXNlcyBzdGFuZGFyZCBpL28gKGFuZCBtYW55IGRvbid0KS4KKworICAg VGhlIHR3byBtZXRob2RzIGFyZSBzdGFydGVkIGRpZmZlcmVudGx5IGJ1dCBhcmUgdXNlZCB0aGUg c2FtZSB3YXkKKyAgIHRoZXJlYWZ0ZXIuCisKKyAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmVhdHVy ZSBpcyB0byBsZXQgeW91IHVzZSBDLUtlcm1pdCBzZXJ2aWNlcyBsaWtlCisgICBmaWxlIHRyYW5z ZmVyLCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLCBzY3JpcHRpbmcsIGF1dG9tYXRpYyBkaWFs aW5nLAorICAgZXRjLCBvbiBjb25uZWN0aW9ucyB0aGF0IEtlcm1pdCBjYW4ndCBvdGhlcndpc2Ug bWFrZSBpdHNlbGYuCisKKyAgIFRoaXMgZmVhdHVyZSBpcyB0aGUgb3Bwb3NpdGUgb2YgdGhlIFJF RElSRUNUIGZlYXR1cmUsIGluIHdoaWNoIEMtS2VybWl0CisgICBtYWtlcyB0aGUgY29ubmVjdGlv biwgYW5kIHJlZGlyZWN0cyBhbiBleHRlcm5hbCAobG9jYWwpIGNvbW1hbmQgb3IKKyAgIHByb2dy YW0gb3ZlciB0aGlzIGNvbm5lY3Rpb24uIEluIGEgcHR5IG9yIHBpcGUgY29ubmVjdGlvbiwgQy1L ZXJtaXQKKyAgIHJ1bnMgYW5kIGNvbnRyb2xzIGEgbG9jYWwgY29tbWFuZCBvciBwcm9ncmFtLCB3 aGljaCBtYWtlcyB0aGUKKyAgIGNvbm5lY3Rpb24uIChUaGUgc2FtZSBtZXRob2QgY2FuIGJlIHVz ZWQgdG8gc2ltcGx5IHRvIGNvbnRyb2wgYSBsb2NhbAorICAgcHJvZ3JhbSB3aXRob3V0IG1ha2lu ZyBhIGNvbm5lY3Rpb247IHNlZSBbNDE1XVNlY3Rpb24gMi44LikKKworICAgVG8gZmluZCBvdXQg aWYgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCBpbmNsdWRlcyBQVFkgc3VwcG9ydCwgdHlwZSAic2hv dworICAgZmVhdHVyZXMiIGFuZCBsb29rIGZvciBORVRQVFkgaW4gdGhlIGFscGhhYmV0aWNhbCBs aXN0IG9mIG9wdGlvbnMuIEZvcgorICAgcGlwZXMsIGxvb2sgZm9yIE5FVENNRC4KKworICAgVGhl IGNvbW1hbmRzIGFyZToKKworICAgU0VUIE5FVFdPUksgVFlQRSBQVFkgb3IgU0VUIE5FVFdPUksg VFlQRSBQSVBFCisgICBTRVQgSE9TVCBjb21tYW5kCisgICAgICAgICAgd2hlcmUgY29tbWFuZCBp cyBhbnkgaW50ZXJhY3RpdmUgY29tbWFuZC4gSWYgdGhlIGNvbW1hbmQgZG9lcworICAgICAgICAg IG5vdCB1c2Ugc3RhbmRhcmQgaS9vLCB5b3UgbXVzdCB1c2UgU0VUIE5FVFdPUksgVFlQRSBQVFku CisKKyAgIE5vdGVzOgorCisgICAgICogQ09NTUFORCBpcyBhbiBpbnZpc2libGUgc3lub255bSBm b3IgUElQRS4KKyAgICAgKiBUaGUgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50cyBhcmUgY2FzZS1z ZW5zaXRpdmUgaW4gVU5JWC4KKworICAgVGhlIFNFVCBORVRXT1JLIFRZUEUsIFNFVCBIT1NUIHNl cXVlbmNlIHNldHMgdGhlIGdpdmVuIG5ldHdvcmsgdHlwZSBmb3IKKyAgIGFsbCBzdWJzZXF1ZW50 IFNFVCBIT1NUIGNvbW1hbmRzIHVudGlsIGFub3RoZXIgU0VUIE5FVFdPUksgVFlQRSBjb21tYW5k CisgICBpcyBnaXZlbiB0byBjaGFuZ2UgaXQuCisKKyAgIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG5l dyAvTkVUV09SSy1UWVBFOlBUWSBvciAvTkVUV09SSy1UWVBFOlBJUEUgKG9yCisgICBzaW1wbHkg L1BJUEUgb3IgL1BUWSkgc3dpdGNoZXMgb24gdGhlIFNFVCBIT1NUIGNvbW1hbmQgaXRzZWxmOgor CisgIFNFVCBIT1NUIC9ORVRXT1JLLVRZUEU6UElQRSBjb21tYW5kICA7IFRoZXNlIHR3byBhcmUg dGhlIHNhbWUKKyAgU0VUIEhPU1QgL1BJUEUgY29tbWFuZAorCisgIFNFVCBIT1NUIC9ORVRXT1JL LVRZUEU6UFRZIGNvbW1hbmQgICA7IERpdHRvCisgIFNFVCBIT1NUIC9QVFkgY29tbWFuZAorCisg ICBUaGVzZSBhcmUgbGlrZSBTRVQgTkVUV09SSyBUWVBFIGZvbGxvd2VkIGJ5IFNFVCBIT1NULCBl eGNlcHQgdGhleSBhcHBseQorICAgb25seSB0byB0aGUgY29ubmVjdGlvbiBiZWluZyBtYWRlIGFu ZCBkbyBub3QgY2hhbmdlIHRoZSBnbG9iYWwgbmV0d29yaworICAgdHlwZSBzZXR0aW5nIChzZWUg WzQxNl1TZWN0aW9uIDEuNSBhYm91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICBzd2l0Y2hl cyBhbmQgU0VUIGNvbW1hbmRzKS4KKworICAgSW5jbHVkZSBhbnkgY29tbWFuZC1saW5lIG9wdGlv bnMgd2l0aCB0aGUgY29tbWFuZCB0aGF0IG1pZ2h0IGJlIG5lZWRlZCwKKyAgIGFzIGluIHRoaXMg ZXhhbXBsZSB3aGVyZSBDLUtlcm1pdCB1c2VzIGFub3RoZXIgY29weSBvZiBpdHNlbGYgYXMgdGhl CisgICBjb21tdW5pY2F0aW9ucyBwcm9ncmFtOgorCisgIFNFVCBIT1NUIC9QSVBFIC9DT05ORUNU IGtlcm1pdCAtWVFKIHh5emNvcnAuY29tCisKKyAgICAgSU1QT1JUQU5UOiBJbiBVbml4LCB3aWxk Y2FyZHMgYW5kIHJlZGlyZWN0b3JzIGFyZSBpbnRlcnByZXRlZCBieSB0aGUKKyAgICAgc2hlbGwu IElmIHlvdSB3YW50IHRvIHJ1biBhIHByb2dyYW0gd2l0aCAoc2F5KSBTRVQgSE9TVCAvUFRZIHdp dGgKKyAgICAgaXRzIGkvbyByZWRpcmVjdGVkIG9yIHdpdGggd2lsZGNhcmQgZmlsZSBhcmd1bWVu dHMsIHlvdSB3aWxsIG5lZWQgdG8KKyAgICAgaW52b2tlIHRoZSBzaGVsbCB0b28uIEV4YW1wbGU6 CisKK1NFVCBIT1NUIC9QVFkge3NoIC1jICJjcnlwdCA8IGZvby54In0KK1NFVCBIT1NUIC9QVFkg e3NoIC1jICJncmVwIHNvbWVzdHJpbmcgKi50eHQifQorCisgICBBcyB1c3VhbCwgaWYgeW91IGlu Y2x1ZGUgdGhlIC9DT05ORUNUIHN3aXRjaCwgU0VUIEhPU1QgZW50ZXJzIENPTk5FQ1QKKyAgIG1v ZGUgaW1tZWRpYXRlbHkgdXBvbiBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiB0aGUgZ2l2ZW4gY29t bWFuZC4KKyAgIFRoZXJlZm9yZSBuZXcgY29tbWFuZHMgYXJlIGF2YWlsYWJsZSBhcyBhIHNob3J0 aGFuZCBmb3IgU0VUIEhPU1QKKyAgIC9DT05ORUNUIC9QVFkgYW5kIC9QSVBFOgorCisgICBQVFkg WyBjb21tYW5kIF0KKyAgIFBJUEUgWyBjb21tYW5kIF0KKyAgICAgICAgICBUaGUgUFRZIGFuZCBQ SVBFIGNvbW1hbmRzIHdvcmsgbGlrZSB0aGUgVEVMTkVUIGFuZCBSTE9HSU4KKyAgICAgICAgICBj b21tYW5kczogdGhleSBzZXQgdXAgdGhlIGNvbm5lY3Rpb24gKGluIHRoaXMgY2FzZSwgdXNpbmcg dGhlCisgICAgICAgICAgZ2l2ZW4gY29tbWFuZCkgYW5kIHRoZW4gZW50ZXIgQ09OTkVDVCBtb2Rl IGF1dG9tYXRpY2FsbHkgKGlmIHRoZQorICAgICAgICAgIFBJUEUgb3IgUFRZIGNvbW1hbmQgaXMg Z2l2ZW4gd2l0aG91dCBhIGNvbW1hbmQsIGl0IGNvbnRpbnVlcyB0aGUKKyAgICAgICAgICBjdXJy ZW50IHNlc3Npb24gaWYgb25lIGlzIGFjdGl2ZTsgb3RoZXJ3aXNlIGl0IGdpdmVzIGFuIGVycm9y CisgICAgICAgICAgbWVzc2FnZSkuCisKKyAgIFRoZSBQSVBFIGNvbW1hbmQgaXMgbmFtZWQgYWZ0 ZXIgdGhlIG1lY2hhbmlzbSBieSB3aGljaCBDLUtlcm1pdAorICAgY29tbXVuaWNhdGVzIHdpdGgg dGhlIGNvbW1hbmQ6IFVOSVggcGlwZXMuIEMtS2VybWl0J3MgaS9vIGlzICJwaXBlZCIKKyAgIHRo cm91Z2ggdGhlIGdpdmVuIGNvbW1hbmQuIEhlcmUgaXMgYSB0eXBpY2FsIGV4YW1wbGU6CisKKyAg UElQRSBybG9naW4gLTggeHl6Y29ycC5jb20KKworICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvOgor CisgIFNFVCBIT1NUIC9QSVBFIHJsb2dpbiAtOCB4eXpjb3JwLmNvbQorICBDT05ORUNUCisKKyAg IGFuZCB0bzoKKworICBTRVQgSE9TVCAvUElQRSAvQ09OTkVDVCBybG9naW4gLTggeHl6Y29ycC5j b20KKworICAgSU1QT1JUQU5UOgorICAgICAgICAgIElmIHlvdSBhcmUgd3JpdGluZyBhIHNjcmlw dCwgZG8gbm90IHVzZSB0aGUgUElQRSwgUFRZLCBURUxORVQsCisgICAgICAgICAgb3IgUkxPR0lO IGNvbW1hbmQgdW5sZXNzIHlvdSByZWFsbHkgd2FudCBDLUtlcm1pdCB0byBlbnRlcgorICAgICAg ICAgIENPTk5FQ1QgbW9kZSBhdCB0aGF0IHBvaW50LiBOb3JtYWxseSBTRVQgSE9TVCBpcyB1c2Vk IGluIHNjcmlwdHMKKyAgICAgICAgICB0byBhbGxvdyB0aGUgbG9naW4gYW5kIG90aGVyIGRpYWxv Z3MgdG8gYmUgY29udHJvbGxlZCBieSB0aGUKKyAgICAgICAgICBzY3JpcHQgaXRzZWxmLCByYXRo ZXIgdGhhbiBieSBhbiBhY3RpdmVseSBwYXJ0aWNpcGF0aW5nIGh1bWFuIGF0CisgICAgICAgICAg dGhlIGtleWJvYXJkLgorCisgICBUaHJvdWdocHV0IG9mIHB0eSBhbmQgcGlwZSBjb25uZWN0aW9u cyBpcyBsaW1pdGVkIGJ5IHRoZSBwZXJmb3JtYW5jZSBvZgorICAgdGhlIGNob3NlbiBjb21tYW5k IG9yIHByb2dyYW0gYW5kIGJ5IHRoZSBpbnRlcnByb2Nlc3MgY29tbXVuaWNhdGlvbgorICAgKElQ QykgbWV0aG9kIHVzZWQgYW5kL29yIGJ1ZmZlcmluZyBjYXBhY2l0eSBvZiB0aGUgcGlwZSBvciBw dHksIHdoaWNoCisgICBpbiB0dXJuIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5n IHN5c3RlbS4KKworICAgSW4gb25lIHRyaWFsIChvbiBTdW5PUyA0LjEuMyksIHdlIG9ic2VydmVk IGZpbGUgdHJhbnNmZXIgcmF0ZXMgb3ZlciBhbgorICAgcmxvZ2luIGNvbm5lY3Rpb24gcHJvY2Vl ZGluZyBhdCAyMDBLY3BzIGZvciBkb3dubG9hZHMsIGJ1dCBvbmx5IDEwS2NwcworICAgZm9yIHVw bG9hZHMgb24gdGhlIHNhbWUgY29ubmVjdGlvbiB3aXRoIHRoZSBzYW1lIHNldHRpbmdzIChzaW1p bGFyCisgICBkaXNwYXJpdGllcyB3ZXJlIG5vdGVkIGluIEhQLVVYKS4gRXhhbWluYXRpb24gb2Yg dGhlIGxvZ3MgcmV2ZWFsZWQgdGhhdAorICAgYSB3cml0ZSB0byB0aGUgcGlwZSBjb3VsZCB0YWtl IGFzIGxvbmcgYXMgNSBzZWNvbmRzLCB3aGVyZWFzIHJlYWRzIHdlcmUKKyAgIHByYWN0aWNhbGx5 IGluc3RhbnRhbmVvdXMuIE9uIHRoZSBvdGhlciBoYW5kLCB1c2luZyBUZWxuZXQgYXMgdGhlCisg ICBleHRlcm5hbCBwcm9ncmFtIHJhdGhlciB0aGFuIHJsb2dpbiwgZG93bmxvYWRzIGFuZCB1cGxv YWRzIHdlcmUgYmV0dGVyCisgICBtYXRjaGVkIGF0IGFib3V0IDE3N0sgZWFjaC4KKworICAgTW9z dCBleHRlcm5hbCBjb21tdW5pY2F0aW9uIHByb2dyYW1zLCBsaWtlIEMtS2VybWl0IGl0c2VsZiwg aGF2ZSBlc2NhcGUKKyAgIGNoYXJhY3RlcnMgb3Igc2VxdWVuY2VzLiBOb3JtYWxseSB0aGVzZSBi ZWdpbiB3aXRoIChvciBjb25zaXN0IGVudGlyZWx5CisgICBvZikgYSBjb250cm9sIGNoYXJhY3Rl ci4gWW91IG11c3QgYmUgc3VyZSB0aGF0IHRoaXMgY29udHJvbCBjaGFyYWN0ZXIKKyAgIGlzIG5v dCAidW5wcmVmaXhlZCIgd2hlbiB1cGxvYWRpbmcgZmlsZXMsIG90aGVyd2lzZSB0aGUgZXh0ZXJu YWwKKyAgIHByb2dyYW0gd2lsbCAiZXNjYXBlIGJhY2siIHRvIGl0cyBwcm9tcHQsIG9yIGNsb3Nl IHRoZSBjb25uZWN0aW9uLCBvcgorICAgdGFrZSBzb21lIG90aGVyIHVud2FudGVkIGFjdGlvbi4g V2hlbiBpbiBDT05ORUNUIG1vZGUsIG9ic2VydmUgdGhlCisgICBwcm9ncmFtJ3Mgbm9ybWFsIGlu dGVyYWN0aW9uIHJ1bGVzLiBPZiBjb3Vyc2UgQy1LZXJtaXQncyBvd24gZXNjYXBlCisgICBjaGFy YWN0ZXIgKG5vcm1hbGx5IEN0cmwtXCkgaXMgYWN0aXZlIHRvbywgdW5sZXNzIHlvdSBoYXZlIHRh a2VuIHNvbWUKKyAgIGFjdGlvbiB0byBkaXNhYmxlIGl0LgorCisgICBPbiBQVFkgY29ubmVjdGlv bnMsIHRoZSB1bmRlcmx5aW5nIFBUWSBkcml2ZXIgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUKKyAg IHRyYW5zcGFyZW50IHRvIGNvbnRyb2wgY2hhcmFjdGVycyAtLSBmb3IgZXhhbXBsZSwgaXQgbWln aHQgZXhwYW5kIHRhYnMsCisgICB0cmFuc2xhdGUgY2FycmlhZ2UgcmV0dXJucywgZ2VuZXJhdGUg c2lnbmFscyBpZiBpdCBzZWVzIGFuIGludGVycnVwdAorICAgY2hhcmFjdGVyLCBhbmQgc28gb24u IFNpbWlsYXIgdGhpbmdzIG1pZ2h0IGhhcHBlbiBvbiBhIFBJUEUgY29ubmVjdGlvbi4KKyAgIEZv ciB0aGlzIHJlYXNvbiwgaWYgeW91IHBsYW4gdG8gdHJhbnNmZXIgZmlsZXMgb3ZlciBhIFBUWSBv ciBQSVBFCisgICBjb25uZWN0aW9uLCB0ZWxsIHRoZSBmaWxlIHNlbmRlciB0bzoKKworICAgU0VU IFBSRUZJWElORyBBTEwKKyAgICAgICAgICBUaGlzIGNhdXNlcyBhbGwgY29udHJvbCBjaGFyYWN0 ZXJzIHRvIGJlIHByZWZpeGVkIGFuZAorICAgICAgICAgIHRyYW5zbWl0dGVkIGFzIHByaW50YWJs ZSBBU0NJSSBjaGFyYWN0ZXJzLgorCisgICBJZiB0aGUgZXh0ZXJuYWwgY29ubmVjdGlvbiBwcm9n cmFtIGlzIG5vdCA4LWJpdCBjbGVhbiwgeW91IHNob3VsZCBhbHNvOgorCisgICBTRVQgUEFSSVRZ IFNQQUNFCisgICAgICAgICAgVGhpcyBjYXVzZXMgOC1iaXQgZGF0YSB0byBiZSBlbmNvZGVkIGlu IDcgYml0cyB1c2luZyBzaW5nbGUKKyAgICAgICAgICBhbmQvb3IgbG9ja2luZyBzaGlmdHMuCisK KyAgIEFuZCBpZiBpdCBkb2VzIG5vdCBtYWtlIGEgcmVsaWFibGUgY29ubmVjdGlvbiAoc3VjaCBh cyB0aG9zZSBtYWRlIGJ5CisgICBUZWxuZXQsIFJsb2dpbiwgU3NoLCBldGMpLCB5b3Ugc2hvdWxk OgorCisgICBTRVQgU1RSRUFNSU5HIE9GRgorICAgICAgICAgIFRoaXMgZm9yY2VzIEMtS2VybWl0 IHRvIHRyZWF0IHRoZSBjb25uZWN0aW9uIGFzIHVucmVsaWFibGUgYW5kCisgICAgICAgICAgdG8g ZW5nYWdlIGluIGl0cyBub3JtYWwgQUNLL05BSyBwcm90b2NvbCBmb3IgZXJyb3IgZGV0ZWN0aW9u IGFuZAorICAgICAgICAgIGNvcnJlY3Rpb24sIHJhdGhlciB0aGFuICJzdHJlYW1pbmciIGl0cyBw YWNrZXRzLCBhcyBpdCBub3JtYWxseQorICAgICAgICAgIGRvZXMgb24gYSBuZXR3b3JrIGNvbm5l Y3Rpb24gKFs0MTddU2VjdGlvbiA0LjIwKS4KKworICAgSW4gc29tZSBjYXNlcywgYnVmZmVyIHNp emVzIG1pZ2h0IGJlIHJlc3RyaWN0ZWQsIHNvIHlvdSBtaWdodCBhbHNvIG5lZWQKKyAgIHRvIHJl ZHVjZSB0aGUgS2VybWl0IHBhY2tldCBsZW5ndGggdG8gZml0OyB0aGlzIGlzIGEgdHJpYWwtYW5k LWVycm9yCisgICBhZmZhaXIuIEZvciBleGFtcGxlLCBpZiB0cmFuc2ZlcnMgYWx3YXlzIGZhaWwg d2l0aCA0MDAwLWJ5dGUgcGFja2V0cywKKyAgIHRyeSAyMDAwLiBJZiB0aGF0IGZhaWxzIHRvbywg dHJ5IDEwMDAsIGFuZCBzbyBvbi4gVGhlIGNvbW1hbmRzIGFyZToKKworICAgU0VUIFJFQ0VJVkUg UEFDS0VULUxFTkdUSCBudW1iZXIKKyAgICAgICAgICBUaGlzIHRlbGxzIHRoZSBmaWxlIHJlY2Vp dmVyIHRvIHRlbGwgdGhlIGZpbGUgc2VuZGVyIHRoZSBsb25nZXN0CisgICAgICAgICAgcGFja2V0 IGxlbmd0aCBpdCBjYW4gYWNjZXB0LgorCisgICBTRVQgU0VORCBQQUNLRVQtTEVOR1RIIG51bWJl cgorICAgICAgICAgIFRoaXMgdGVsbHMgdGhlIGZpbGUgc2VuZGVyIG5vdCB0byBzZW5kIHBhY2tl dHMgbG9uZ2VyIHRoYW4gdGhlCisgICAgICAgICAgZ2l2ZW4gbGVuZ3RoLCBldmVuIGlmIHRoZSBy ZWNlaXZlciBzYXlzIGxvbmdlciBvbmVzIGFyZSBPSy4gT2YKKyAgICAgICAgICBjb3Vyc2UsIGlm IHRoZSByZWNlaXZlcidzIGxlbmd0aCBpcyBzaG9ydGVyLCB0aGUgc2hvcnRlciBsZW5ndGgKKyAg ICAgICAgICBpcyB1c2VkLgorCisgICBJZiBub25lIG9mIHRoaXMgc2VlbXMgdG8gaGVscCwgdHJ5 IGZhbGxpbmcgYmFjayB0byB0aGUgYmFyZSBtaW5pbXVtLAorICAgbG93ZXN0LWNvbW1vbi1kZW5v bWluYXRvciBwcm90b2NvbCBzZXR0aW5nczoKKworICAgUk9CVVNUCisgICAgICAgICAgTm8gc2xp ZGluZyB3aW5kb3dzLCBubyBzdHJlYW1pbmcsIG5vIGNvbnRyb2wtY2hhcmFjdGVyCisgICAgICAg ICAgdW5wcmVmaXhpbmcsIHBhY2tldCBsZW5ndGggOTAuCisKKyAgIEFuZCB0aGVuIHdvcmsgeW91 ciB3YXkgYmFjayB1cCBieSB0cmlhbCBhbmQgZXJyb3IgdG8gZ2V0IGdyZWF0ZXIKKyAgIHRocm91 Z2hwdXQuCisKKyAgIE5vdGUgdGhhdCB3aGVuIHN0YXJ0aW5nIGEgUElQRSBjb25uZWN0aW9uLCBh bmQgdGhlIGNvbm5lY3Rpb24gcHJvZ3JhbQorICAgKHN1Y2ggYXMgdGVsbmV0IG9yIHJsb2dpbikg cHJpbnRzIHNvbWUgZ3JlZXRpbmcgb3IgaW5mb3JtYXRpb24gbWVzc2FnZXMKKyAgIGJlZm9yZSBz dGFydGluZyB0aGUgY29ubmVjdGlvbiwgdGhlc2UgYXJlIHF1aXRlIGxpa2VseSB0byBiZSBwcmlu dGVkCisgICB3aXRoIGEgc3RhaXJzdGVwIGVmZmVjdCAobGluZWZlZWQgd2l0aG91dCBjYXJyaWFn ZSByZXR1cm4pLiBUaGlzIGlzCisgICBiZWNhdXNlIHRoZSBwcm9ncmFtIGlzIG5vdCBjb25uZWN0 ZWQgd2l0aCB0aGUgVU5JWCB0ZXJtaW5hbCBkcml2ZXI7CisgICB0aGVyZSdzIG5vdCBtdWNoIEtl cm1pdCBjYW4gZG8gYWJvdXQgaXQuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZSwKKyAgIGV2 ZXJ5dGhpbmcgc2hvdWxkIGdvIGJhY2sgdG8gbm9ybWFsLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4g b24gYSBQVFkKKyAgIGNvbm5lY3Rpb24gYmVjYXVzZSBhIFBUWSBpcywgaW5kZWVkLCBhIHRlcm1p bmFsLgorCisgICBPbiBhIHNpbWlsYXIgbm90ZSwgc29tZSBjb25uZWN0aW9uIHByb2dyYW1zIChs aWtlIFNvbGFyaXMgMi41IHJsb2dpbikKKyAgIG1pZ2h0IHByaW50IGxvdHMgb2YgZXJyb3IgbWVz c2FnZXMgbGlrZSAiaW9jdGwgVElPQ0dFVFA6IGludmFsaWQKKyAgIGFyZ3VtZW50IiB3aGVuIHVz ZWQgdGhyb3VnaCBhIHBpcGUuIFRoZXkgYXJlIGFubm95aW5nIGJ1dCB1c3VhbGx5CisgICBoYXJt bGVzcy4gSWYgeW91IHdhbnQgdG8gYXZvaWQgdGhlc2UgbWVzc2FnZXMsIGFuZCB5b3VyIHNoZWxs IGFsbG93cworICAgcmVkaXJlY3Rpb24gb2Ygc3RkZXJyLCB5b3UgY2FuIHJlZGlyZWN0IHN0ZGVy ciBpbiB5b3VyIHBpcGUgY29tbWFuZCwgYXMKKyAgIGluIHRoaXMgZXhhbXBsZSB3aGVyZSB0aGUg dXNlcidzIHNoZWxsIGlzIGJhc2g6CisKKyAgUElQRSBybG9naW4geHl6Y29ycC5jb20gMj4gL2Rl di9udWxsCisKKyAgIE9yIHVzZSBQVFkgcmF0aGVyIHRoYW4gUElQRSwgc2luY2UgUFRZIGlzIGF2 YWlsYWJsZSBvbiBTb2xhcmlzLgorCisyLjcuMC4gQy1LZXJtaXQgb3ZlciB0bjMyNzAgYW5kIHRu NTI1MAorCisgICBOb3cgeW91IGNhbiBtYWtlIGEgY29ubmVjdGlvbiBmcm9tIEMtS2VybWl0ICJk aXJlY3RseSIgdG8gYW4gSUJNCisgICBtYWluZnJhbWUgYW5kIHRyYW5zZmVyIGZpbGVzIHdpdGgg aXQsIGFzc3VtaW5nIGl0IGhhcyBLZXJtaXQtMzcwCisgICBpbnN0YWxsZWQuIEJlY2F1c2UgdG4z MjcwIGlzIG5laXRoZXIgOC1iaXQgY2xlYW4gbm9yIHRyYW5zcGFyZW50IHRvCisgICBjb250cm9s IGNoYXJhY3RlcnMsIHlvdSBtdXN0IGdpdmUgdGhlc2UgY29tbWFuZHM6CisKKyAgU0VUIFBSRUZJ WElORyBBTEwgICA7IFByZWZpeCBhbGwgY29udHJvbCBjaGFyYWN0ZXJzCisgIFNFVCBQQVJJVFkg U1BBQ0UgICAgOyBUZWxuZXQgY29ubmVjdGlvbnMgYXJlIHVzdWFsbHkgbm90IDgtYml0IGNsZWFu CisKKyAgIGFuZCB0aGVuOgorCisgIFNFVCBIT1NUIC9QVFkgL0NPTk5FQ1QgdG4zMjcwIGFiY2Nv cnAuY29tCisKKyAgIG9yIHNpbXBseToKKworICBwdHkgdG4zMjcwIGFiY2NvcnAuY29tCisKKyAg IFNFVCBIT1NUIC9QSVBFIGRvZXMgbm90IHdvcmsgaW4gdGhpcyBjYXNlLCBhdCBsZWFzdCBub3Qg Zm9yIGZpbGUKKyAgIHRyYW5zZmVyLiBGaWxlIHRyYW5zZmVyIGRvZXMgd29yaywgaG93ZXZlciwg d2l0aCBTRVQgSE9TVCAvUFRZLAorICAgcHJvdmlkZWQgeW91IHVzZSB0aGUgZGVmYXVsdCBwYWNr ZXQgbGVuZ3RoIG9mIDkwIGJ5dGVzOyBhbnl0aGluZyBsb25nZXIKKyAgIHNlZW1zIHRvIGtpbGwg dGhlIHNlc3Npb24uCisKKyAgIFlvdSBjYW4gYWxzbyBtYWtlIGNvbm5lY3Rpb25zIHRvIElCTSBB Uy80MDAgY29tcHV0ZXJzIGlmIHlvdSBoYXZlIGEKKyAgIHRuNTI1MCBwcm9ncmFtIGluc3RhbGxl ZDoKKworICBwdHkgdG41MjUwIGhvc3RuYW1lCisKKyAgIEluIHRoaXMgY2FzZSwgaG93ZXZlciwg ZmlsZSB0cmFuc2ZlciBpcyBwcm9iYWJseSBub3QgaW4gdGhlIGNhcmRzIHNpbmNlCisgICBub2Jv ZHkgaGFzIGV2ZXIgc3VjY2VlZGVkIGluIHdyaXRpbmcgYSBLZXJtaXQgcHJvZ3JhbSBmb3IgdGhl IEFTLzQwMC4KKyAgIEhpbnQ6CisKKyAgZGVmaW5lIHRuMzI3MCB7CisgICAgICBjaGVjayBwdHkK KyAgICAgIGlmIGZhaWwgZW5kIDEgU29ycnkgLSBubyBQVFkgc3VwcG9ydC4uLgorICAgICAgcHR5 IHRuMzI3MCBcJSoKKyAgfQorCisgICBTaW1pbGFybHkgZm9yIHRuNTI1MC4gTm90ZSB0aGF0IENI RUNLIFBUWSBhbmQgQ0hFQ0sgUElQRSBjYW4gYmUgdXNlZCBpbgorICAgbWFjcm9zIGFuZCBzY3Jp cHRzIHRvIHRlc3Qgd2hldGhlciBQVFkgb3IgUElQRSBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KKwor Mi43LjEuIEMtS2VybWl0IG92ZXIgVGVsbmV0CisKKyAgIEFsdGhvdWdoIEMtS2VybWl0IGluY2x1 ZGVzIGl0cyBvd24gVGVsbmV0IGltcGxlbWVudGF0aW9uLCB5b3UgbWlnaHQKKyAgIG5lZWQgdG8g dXNlIGFuIGV4dGVybmFsIFRlbG5ldCBwcm9ncmFtIHRvIG1ha2UgY2VydGFpbiBjb25uZWN0aW9u czsKKyAgIHBlcmhhcHMgYmVjYXVzZSBpdCBoYXMgYWNjZXNzIG9yIHNlY3VyaXR5IGZlYXR1cmVz IG5vdCBhdmFpbGFibGUgaW4KKyAgIEMtS2VybWl0IGl0c2VsZi4gQXMgbm90ZWQgYWJvdmUsIHRo ZSBvbmx5IHByZWNhdXRpb25zIG5lY2Vzc2FyeSBhcmUKKyAgIHVzdWFsbHk6CisKKyAgU0VUIFBS RUZJWElORyBBTEwgICA7IFByZWZpeCBhbGwgY29udHJvbCBjaGFyYWN0ZXJzCisgIFNFVCBQQVJJ VFkgU1BBQ0UgICAgOyBUZWxuZXQgY29ubmVjdGlvbnMgbWlnaHQgbm90IGJlIDgtYml0IGNsZWFu CisKKyAgIGFuZCB0aGVuOgorCisgIFNFVCBIT1NUIC9QVFkgKG9yIC9QSVBFKSAvQ09OTkVDVCB0 ZWxuZXQgYWJjY29ycC5jb20KKworICAgb3IsIGVxdWl2YWxlbnRseToKKworICBQVFkgKG9yIFBJ UEUpIHRlbG5ldCBhYmNjb3JwLmNvbQorCisyLjcuMi4gQy1LZXJtaXQgb3ZlciBSbG9naW4KKwor ICAgQy1LZXJtaXQgaW5jbHVkZXMgaXRzIG93biBSbG9naW4gY2xpZW50LCBidXQgdGhpcyBjYW4g bm9ybWFsbHkgYmUgdXNlZAorICAgb25seSBpZiB5b3UgYXJlIHJvb3QsIHNpbmNlIHRoZSBybG9n aW4gVENQIHBvcnQgaXMgcHJpdmlsZWdlZC4gQnV0IHB0eXMKKyAgIGFuZCBwaXBlcyBsZXQgeW91 IG1ha2UgcmxvZ2luIGNvbm5lY3Rpb25zIHdpdGggQy1LZXJtaXQgdGhyb3VnaCB5b3VyCisgICBj b21wdXRlcidzIGV4dGVybmFsIHJsb2dpbiBwcm9ncmFtLCB3aGljaCBpcyBub3JtYWxseSBpbnN0 YWxsZWQgYXMgYQorICAgcHJpdmlsZWdlZCBwcm9ncmFtOgorCisgIFNFVCBQUkVGSVhJTkcgQUxM CisKKyAgIGFuZCB0aGVuOgorCisgIFNFVCBIT1NUIC9QVFkgKG9yIC9QSVBFKSAvQ09OTkVDVCBy bG9naW4gLTggYWJjY29ycC5jb20KKworICAgb3IsIGVxdWl2YWxlbnRseToKKworICBQVFkgKG9y IFBJUEUpIHJsb2dpbiAtOCBhYmNjb3JwLmNvbQorCisgICBUaGUgIi04IiBvcHRpb24gdG8gcmxv Z2luIGVuYWJsZXMgdHJhbnNtaXNzaW9uIG9mIDgtYml0IGRhdGEuIElmIHRoaXMKKyAgIGlzIG5v dCBhdmFpbGFibGUsIHRoZW4gaW5jbHVkZSBTRVQgUEFSSVRZIFNQQUNFIGlmIHlvdSBpbnRlbmQg dG8KKyAgIHRyYW5zZmVyIGZpbGVzLgorCisgICBOb3RlIHRoYXQgdGhlIG5vcm1hbCBlc2NhcGUg c2VxdWVuY2UgZm9yIHJsb2dpbiBpcyBDYXJyaWFnZSBSZXR1cm4KKyAgIGZvbGxvd2VkIGJ5IFRp bGRlICh+KSwgYnV0IG9ubHkgd2hlbiB0aGUgdGlsZGUgaXMgZm9sbG93ZWQgYnkgY2VydGFpbgor ICAgb3RoZXIgY2hhcmFjdGVyczsgdGhlIGV4YWN0IGJlaGF2aW9yIGRlcGVuZHMgb24geW91ciBy bG9naW4gY2xpZW50LCBzbworICAgcmVhZCBpdHMgZG9jdW1lbnRhdGlvbi4KKworMi43LjMuIEMt S2VybWl0IG92ZXIgU2VyaWFsIENvbW11bmljYXRpb24gUHJvZ3JhbXMKKworICAgUHR5cyBhbmQg cGlwZXMgYWxzbyBsZXQgeW91IHVzZSBwcm9ncmFtcyB0aGF0IG1ha2Ugc2VyaWFsIGNvbm5lY3Rp b25zLAorICAgc3VjaCBhcyBjdSBvciB0aXAuIEZvciBleGFtcGxlLCBDLUtlcm1pdCBjYW4gYmUg dXNlZCB0aHJvdWdoIGN1IHRvIG1ha2UKKyAgIGNvbm5lY3Rpb25zIHRoYXQgb3RoZXJ3aXNlIG1p Z2h0IG5vdCBiZSBhbGxvd2VkLCBlLmcuIGJlY2F1c2UgQy1LZXJtaXQKKyAgIGlzIG5vdCBpbnN0 YWxsZWQgd2l0aCB0aGUgcmVxdWlyZWQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIGRpYWxvdXQK KyAgIGRldmljZSBhbmQgdGhlIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5LgorCisgICBTdXBwb3Nl IHlvdXIgVVVDUCBEZXZpY2VzIGZpbGUgY29udGFpbnMgYW4gZW50cnkgZm9yIGEgc2VyaWFsIGRl dmljZQorICAgdHR5MDQgdG8gYmUgdXNlZCBmb3IgZGlyZWN0IGNvbm5lY3Rpb25zLCBidXQgdGhp cyBkZXZpY2UgaXMgcHJvdGVjdGVkCisgICBhZ2FpbnN0IHlvdSAoYW5kIEtlcm1pdCB3aGVuIHlv dSBydW4gaXQpLiBJbiB0aGlzIGNhc2UgeW91IGNhbjoKKworICBTRVQgQ09OVFJPTCBQUkVGSVgg QUxMCisgIFBUWSAob3IgUElQRSkgY3UgLWwgdHR5MDQKKworICAgKFNpbWlsYXJseSBmb3IgZGlh bG91dCBkZXZpY2VzLCBleGNlcHQgdGhlbiB5b3UgYWxzbyBuZWVkIHRvIGluY2x1ZGUKKyAgIHRo ZSBwaG9uZSBudW1iZXIgaW4gdGhlICJjdSIgY29tbWFuZC4pCisKKyAgIEFzIHdpdGggb3RoZXIg Y29tbXVuaWNhdGlvbiBwcm9ncmFtcywgd2F0Y2ggb3V0IGZvciBjdSdzIGVzY2FwZQorICAgc2Vx dWVuY2UsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSBybG9naW4gcHJvZ3JhbSdzOiBDYXJyaWFn ZSBSZXR1cm4KKyAgIGZvbGxvd2VkIGJ5IFRpbGRlIChmb2xsb3dlZCBieSBhbm90aGVyIGNoYXJh Y3RlciB0byBzcGVjaWZ5IGFuIGFjdGlvbiwKKyAgIGxpa2UgIi4iIGZvciBjbG9zaW5nIHRoZSBj b25uZWN0aW9uIGFuZCBleGl0aW5nIGZyb20gY3UpLgorCisyLjcuNC4gQy1LZXJtaXQgb3ZlciBT ZWN1cmUgTmV0d29yayBDbGllbnRzCisKKyAgICAgRElTQ0xBSU1FUjogVGhlcmUgYXJlIGxhd3Mg aW4gdGhlIFVTQSBhbmQgb3RoZXIgY291bnRyaWVzIHJlZ2FyZGluZworICAgICB1c2UsIGltcG9y dCwgYW5kL29yIGV4cG9ydCBvZiBlbmNyeXB0aW9uIGFuZC9vciBkZWNyeXB0aW9uIG9yIG90aGVy CisgICAgIGZvcm1zIG9mIHNlY3VyaXR5IHNvZnR3YXJlLCBhbGdvcml0aG1zLCB0ZWNobm9sb2d5 LCBhbmQgaW50ZWxsZWN0dWFsCisgICAgIHByb3BlcnR5LiBUaGUgS2VybWl0IFByb2plY3QgYXR0 ZW1wdHMgdG8gZm9sbG93IGFsbCBrbm93biBzdGF0dXRlcywKKyAgICAgYW5kIG5laXRoZXIgaW50 ZW5kcyBub3Igc3VnZ2VzdHMgdGhhdCBLZXJtaXQgc29mdHdhcmUgY2FuIG9yIHNob3VsZAorICAg ICBiZSB1c2VkIGluIGFueSB3YXksIGluIGFueSBsb2NhdGlvbiwgdGhhdCBjaXJjdW12ZW50cyBh bnkKKyAgICAgcmVndWxhdGlvbnMsIGxhd3MsIHRyZWF0aWVzLCBjb3ZlbmFudHMsIG9yIG90aGVy IGxlZ2l0aW1hdGUgY2Fub25zCisgICAgIG9yIGluc3RydW1lbnRzIG9mIGxhdywgaW50ZXJuYXRp b25hbCByZWxhdGlvbnMsIHRyYWRlLCBldGhpY3MsIG9yCisgICAgIHByb3ByaWV0eS4KKworICAg Rm9yIHNlY3VyZSBjb25uZWN0aW9ucyBvciBjb25uZWN0aW9ucyB0aHJvdWdoIGZpcmV3YWxscywg Qy1LZXJtaXQgNy4wCisgICBjYW4gYmUgYSBLZXJiZXJvcywgU1JQLCBhbmQvb3IgU09DS1MgY2xp ZW50IHdoZW4gYnVpbHQgd2l0aCB0aGUKKyAgIGFwcHJvcHJpYXRlIG9wdGlvbnMgYW5kIGxpYnJh cmllcy4gQnV0IG90aGVyIGFwcGxpY2F0aW9uLWxldmVsIHNlY3VyaXR5CisgICBhY3JvbnltcyBh bmQgbWV0aG9kcyAtLSBTU0gsIFNTTCwgU1JQLCBUTFMgLS0gcG9wIHVwIGF0IGFuIGFsYXJtaW5n CisgICByYXRlIGFuZCBhcmUgKGEpIGltcG9zc2libGUgdG8ga2VlcCB1cCB3aXRoLCAoYikgdXN1 YWxseSBtdXR1YWxseQorICAgaW5jb21wYXRpYmxlLCBhbmQgKGMpIGhhdmUgcmVzdHJpY3Rpb25z IG9uIGV4cG9ydCBvciByZWRpc3RyaWJ1dGlvbiBhbmQKKyAgIHNvIGNhbm5vdCBiZSBpbmNsdWRl ZCBpbiBDLUtlcm1pdCBpdHNlbGYuCisKKyAgIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIGEgc2VjdXJl IHRleHQtYmFzZWQgVGVsbmV0IChvciBvdGhlcikgY2xpZW50IHRoYXQKKyAgIGVtcGxveXMgb25l IG9mIHRoZXNlIHNlY3VyaXR5IG1ldGhvZHMsIHlvdSBjYW4gdXNlIEMtS2VybWl0ICJ0aHJvdWdo IgorICAgaXQgdmlhIGEgcHR5IG9yIHBpcGUuCisKKzIuNy40LjEuIFNTSAorCisgICBDLUtlcm1p dCBkb2VzIG5vdCBhbmQgY2FuIG5vdCBpbmNvcnBvcmF0ZSBTU0ggZHVlIHRvIGxpY2Vuc2luZywg cGF0ZW50LAorICAgYW5kIFVTQSBleHBvcnQgbGF3IHJlc3RyaWN0aW9ucy4KKworICAgVGhlIFVO SVggU1NIIGNsaWVudCBkb2VzIG5vdCB1c2Ugc3RhbmRhcmQgaW5wdXQvb3V0cHV0LCBhbmQgdGhl cmVmb3JlCisgICBjYW4gYmUgdXNlZCBvbmx5IGJ5IEtlcm1pdCdzIFBUWSBpbnRlcmZhY2UsIGlm IG9uZSBpcyBwcmVzZW50LiBUaGUKKyAgIGNhdXRpb25zIGFib3V0IGZpbGUgdHJhbnNmZXIsIGV0 YywgYXJlIHRoZSBzYW1lIGFzIGZvciBSbG9naW4uIEV4YW1wbGU6CisKKyAgU0VUIFBSRUZJWElO RyBBTEwKKyAgUFRZIHNzaCBYWVpDT1JQLkNPTQorCisgICBPciwgZm9yIGEgc2NyaXB0ZWQgc2Vz c2lvbjoKKworICBTRVQgUFJFRklYSU5HIEFMTAorICBTRVQgSE9TVCAvUFRZIHNzaCBYWVpDT1JQ LkNPTQorCisgICBIaW50OgorCisgIGRlZmluZSBzc2ggeworICAgICAgY2hlY2sgcHR5CisgICAg ICBpZiBmYWlsIGVuZCAxIFNvcnJ5IC0gbm8gUFRZIHN1cHBvcnQuLi4KKyAgICAgIHB0eSBzc2gg XCUqCisgIH0KKworMi43LjQuMi4gU1NMCisKKyAgIFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wp IGlzIGFub3RoZXIgVENQL0lQIHNlY3VyaXR5IG92ZXJsYXksIHRoaXMgb25lCisgICBkZXNpZ25l ZCBieSBhbmQgZm9yIE5ldHNjYXBlLiBBbiBTU0wgVGVsbmV0IGNsaWVudCBpcyBhdmFpbGFibGUg Zm9yCisgICBVTklYIGZyb20gdGhlIFVuaXZlcnNpdHkgb2YgUXVlZW5zbGFuZC4gTW9yZSBpbmZv IGF0OgorCisgIFs0MThdaHR0cDovL3d3dy5wc3kudXEub3ouYXUvfmZ0cC9DcnlwdG8vCisKKyAg IEludGVyb3BlcmFiaWxpdHkgd2l0aCBDLUtlcm1pdCBpcyB1bmtub3duLiBDLUtlcm1pdCBhbHNv IGluY2x1ZGVzIGl0cworICAgb3duIGJ1aWx0LWluIFNTTC9UTFMgc3VwcG9ydCwgYnV0IGl0IGlz IG5vdCBleHBvcnRhYmxlOyBbNDE5XUNMSUNLIEhFUkUKKyAgIGZpbGUgZm9yIGRldGFpbHMuCisK KzIuNy40LjMuIFNSUAorCisgICBTUlAoVE0pIGlzIFN0YW5mb3JkIFVuaXZlcnNpdHkncyBTZWN1 cmUgUmVtb3RlIFBhc3N3b3JkIHByb3RvY29sLiBBbgorICAgU1JQIFRlbG5ldCBjbGllbnQgaXMg YXZhaWxhYmxlIGZyb20gU3RhbmZvcmQ6CisKKyAgWzQyMF1odHRwOi8vc3JwLnN0YW5mb3JkLmVk dS9zcnAvCisKKyAgIFN0YW5mb3JkJ3MgU1JQIFRlbG5ldCBjbGllbnQgZm9yIFVOSVggaGFzIGJl ZW4gdGVzdGVkIG9uIFN1bk9TIGFuZAorICAgd29ya3MgZmluZSB3aXRoIEMtS2VybWl0LCBhcyBk ZXNjcmliZWQgaW4gWzQyMV1TZWN0aW9uIDIuNy4xLCBlLmcuCisKKyAgU0VUIFBSRUZJWCBBTEwK KyAgUFRZIChvciBQSVBFKSBzcnAtdGVsbmV0IHhlbm9uLnN0YW5mb3JkLmVkdQorCisgICBDLUtl cm1pdCBpdHNlbGYgY2FuIGJlIGJ1aWx0IGFzIGFuIFNSUCBUZWxuZXQgY2xpZW50IG9uIHN5c3Rl bXMgdGhhdAorICAgaGF2ZSBsaWJzcnAuYSBpbnN0YWxsZWQ7IHRoZSBDLUtlcm1pdCBzdXBwb3J0 IGNvZGUsIGhvd2V2ZXIsIG1heSBub3QgYmUKKyAgIGV4cG9ydGVkIG91dHNpZGUgdGhlIFVTQSBv ciBDYW5hZGEuCisKKzIuNy40LjQuIFNPQ0tTCisKKyAgIEMtS2VybWl0IGNhbiBiZSBidWlsdCBh cyBhIFNPQ0tTLWF3YXJlIGNsaWVudCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBhCisgICBTT0NLUyBs aWJyYXJ5LiBTZWUgc2VjdGlvbiA4LjEuMSBvZiB0aGUgWzQyMl1ja2NjZmcudHh0IGZpbGUuCisK KyAgIEMtS2VybWl0IDcuMCBjYW4gYWxzbyBiZSBydW4gb3ZlciBTT0NLU2lmaWVkIFRlbG5ldCBv ciBybG9naW4gY2xpZW50cworICAgd2l0aCBTRVQgTkVUV09SSyBUWVBFIENPTU1BTkQuIFN1cHBv c2UgdGhlIFRlbG5ldCBwcm9ncmFtIG9uIHlvdXIKKyAgIHN5c3RlbSBpcyBTT0NLUyBlbmFibGVk IGJ1dCBDLUtlcm1pdCBpcyBub3QuIE1ha2UgS2VybWl0IGNvbm5lY3Rpb25zCisgICBsaWtlIHRo aXM6CisKKyAgU0VUIFBSRUZJWCBBTEwKKyAgUFRZIChvciBQSVBFKSB0ZWxuZXQgenp6LmNvbQor CisyLjcuNC41LiBLZXJiZXJvcworCisgICBVTklYIEMtS2VybWl0IGNhbiBiZSBidWlsdCB3aXRo IE1JVCBLZXJiZXJvcyBJViBvciBWIGF1dGhlbnRpY2F0aW9uIGFuZAorICAgZW5jcnlwdGlvbi4g SW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gYSBbNDIzXXNlcGFyYXRlIGRvY3VtZW50Lgor ICAgQWRkaXRpb25hbCBtb2R1bGVzIGFyZSByZXF1aXJlZCB0aGF0IGNhbiBub3QgYmUgZXhwb3J0 ZWQgZnJvbSB0aGUgVVNBCisgICB0byBhbnkgY291bnRyeSBleGNlcHQgQ2FuYWRhLCBieSBVUyBs YXcuCisKKyAgIElmIHlvdSBoYXZlIEtlcmJlcm9zIGluc3RhbGxlZCBidXQgeW91IGRvbid0IGhh dmUgYSBLZXJiZXJpemVkIHZlcnNpb24KKyAgIG9mIEMtS2VybWl0LCB5b3UgY2FuIHVzZSBrdGVs bmV0IGFzIEMtS2VybWl0J3MgZXh0ZXJuYWwgY29tbXVuaWNhdGlvbnMKKyAgIHByb2dyYW0gdG8g bWFrZSBzZWN1cmUgY29ubmVjdGlvbnMgd2l0aG91dCBnaXZpbmcgdXAgQy1LZXJtaXQncworICAg c2VydmljZXM6CisKKyAgU0VUIFBSRUZJWCBBTEwKKyAgUFRZIChvciBQSVBFKSBrdGVsbmV0IGNp YS5nb3YKKworMi44LiBTY3JpcHRpbmcgTG9jYWwgUHJvZ3JhbXMKKworICAgSWYgeW91ciB2ZXJz aW9uIG9mIEtlcm1pdCBoYXMgUFRZIHN1cHBvcnQgYnVpbHQgaW4sIHRoZW4gYW55IHRleHQtYmFz ZWQKKyAgIHByb2dyYW0gY2FuIGJlIGludm9rZWQgd2l0aCBTRVQgSE9TVCAvUFRZIG9yIGVxdWl2 YWxlbnQgY29tbWFuZCBhbmQKKyAgIGNvbnRyb2xsZWQgdXNpbmcgdGhlIG5vcm1hbCBzZXF1ZW5j ZSBvZiBPVVRQVVQsIElOUFVULCBJRiBTVUNDRVNTCisgICBjb21tYW5kcyAodGhpcyBpcyB0aGUg c2FtZSBzZXJ2aWNlIHRoYXQgaXMgcHJvdmlkZWQgYnkgdGhlICdleHBlY3QnCisgICBwcm9ncmFt LCBidXQgY29udHJvbGxlZCBieSB0aGUgS2VybWl0IHNjcmlwdCBsYW5ndWFnZSByYXRoZXIgdGhh biBUY2wpLgorCisgICBXaGVuIFBUWSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gYW55 IHByb2dyYW0gdGhhdCB1c2VzIHN0YW5kYXJkCisgICBpbnB1dCBhbmQgb3V0cHV0IGNhbiBiZSBp bnZva2VkIHdpdGggU0VUIEhPU1QgL1BJUEUuCisKKyAgIEhlcmUncyBhbiBleGFtcGxlIGluIHdo aWNoIHdlIHN0YXJ0IGFuIGV4dGVybmFsIEtlcm1pdCBwcm9ncmFtLCB3YWl0CisgICBmb3IgaXRz IHByb21wdCwgZ2l2ZSBpdCBhIFZFUlNJT04gY29tbWFuZCwgYW5kIHRoZW4gZXh0cmFjdCB0aGUg bnVtZXJpYworICAgdmVyc2lvbiBudW1iZXIgZnJvbSBpdHMgcmVzcG9uc2U6CisKKyAgc2V0IGhv c3QgL3B0eSBrZXJtaXQgLVkKKyAgaWYgZmFpbCBzdG9wIDEge0Nhbid0IHN0YXJ0IGV4dGVybmFs IGNvbW1hbmR9CisgIGlucHV0IDEwIEMtS2VybWl0PgorICBpZiBmYWlsIHN0b3AgMSB7Tm8gQy1L ZXJtaXQ+IHByb21wdH0KKyAgb3V0cHV0IHZlcnNpb25cMTMKKyAgaW5wdXQgMTAge051bWVyaWM6 IH0KKyAgaWYgZmFpbCBzdG9wIDEge05vIG1hdGNoIGZvciAiTnVtZXJpYzoifQorICBjbGVhciBp bnB1dAorICBpbnB1dCAxMCBcMTAKKyAgZWNobyBWRVJTSU9OID0gIlxmc3Vic3RyKFx2KGlucHV0 KSwxLDYpIgorICBvdXRwdXQgZXhpdFwxMworCisgICBUaGlzIHRlY2huaXF1ZSBjb3VsZCBiZSB1 c2VkIHRvIGNvbnRyb2wgYW55IG90aGVyIGludGVyYWN0aXZlIHByb2dyYW0sCisgICBldmVuIHRo b3NlIHRoYXQgZG8gc2NyZWVuIGZvcm1hdHRpbmcgKGxpa2UgRW1hY3Mgb3IgVmkpLCBpZiB5b3Ug Y2FuCisgICBmaWd1cmUgb3V0IHRoZSBzZXF1ZW5jZSBvZiBldmVudHMuIElmIHlvdXIgS2VybWl0 IHByb2dyYW0gZG9lc24ndCBoYXZlCisgICBQVFkgc3VwcG9ydCwgdGhlbiB0aGUgY29tbWFuZHMg YXJlIHJlc3RyaWN0ZWQgdG8gdGhvc2UgdXNpbmcgc3RhbmRhcmQKKyAgIGkvbywgaW5jbHVkaW5n IGNlcnRhaW4gc2hlbGxzLCBpbnRlcmFjdGl2ZSB0ZXh0LW1vZGUgImhhcmRjb3B5IiBlZGl0b3Jz CisgICBsaWtlIGV4LCBhbmQgc28gb24uCisKKyAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIFBUWSBp bnRlcmZhY2UsIHlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBpdCBydW5zCisgICB0aGUgZ2l2ZW4g cHJvZ3JhbSBvciBjb21tYW5kIGRpcmVjdGx5IG9uIHRoZSBwdHksIHdpdGhvdXQgYW55CisgICBp bnRlcnZlbmluZyBzaGVsbCB0byBpbnRlcnByZXQgbWV0YWNoYXJhY3RlcnMsIHJlZGlyZWN0b3Jz LCBldGMuIElmIHlvdQorICAgbmVlZCB0aGlzIHNvcnQgb2YgdGhpbmcsIGluY2x1ZGUgdGhlIGFw cHJvcHJpYXRlIHNoZWxsIGludm9jYXRpb24gYXMKKyAgIHBhcnQgb2YgeW91ciBjb21tYW5kOyBm b3IgZXhhbXBsZToKKworICBwdHkgZWNobyAqCisKKyAgIGp1c3QgZWNob2VzICIqIjsgd2hlcmVh czoKKworICBwdHkga3NoIC1jICJlY2hvICoiCisKKyAgIGVjaG9lcyBhbGwgdGhlIGZpbGVuYW1l cyB0aGF0IGtzaCBmaW5kcyBtYXRjaGluZyAiKiIuCisKKyAgIFNpbWlsYXJseSBmb3IgcmVkaXJl Y3Rpb246CisKKyAgc2V0IGhvc3QgL3B0eSBrc2ggLWMgImNhdCA+IGZvbyIgIDsgTm90ZTogdXNl IHNoZWxsIHF1b3RpbmcgcnVsZXMgaGVyZQorICBzZXQgdHJhbnNtaXQgZW9mIFw0CisgIHRyYW5z bWl0IGJhcgorCisgICBBbmQgZm9yIHRoYXQgbWF0dGVyLCBmb3IgYnVpbHQtaW4gc2hlbGwgY29t bWFuZHM6CisKKyAgc2V0IGhvc3QgL3B0eSBrc2ggLWMgImZvciBpIGluICo7IGRvIGVjaG8gJGk7 IGRvbmUiCisKKyAgIFRoZSBQSVBFIGludGVyZmFjZSwgb24gdGhlIG90aGVyIGhhbmQsIGludm9r ZXMgdGhlIHNoZWxsIGF1dG9tYXRpY2FsbHksCisgICBzbzoKKworICBwaXBlIGVjaG8gKgorCisg ICBwcmludHMgZmlsZW5hbWVzLCBub3QgIioiLgorCisyLjkuIFguMjUgTmV0d29ya2luZworCisg ICBYLjI1IG5ldHdvcmtpbmcgaXMgZG9jdW1lbnRlZCBpbiBbNDI0XVVzaW5nIEMtS2VybWl0LCAy bmQgRWRpdGlvbi4gV2hlbgorICAgdGhlIGJvb2sgd2FzIHB1Ymxpc2hlZCwgWC4yNSB3YXMgYXZh aWxhYmxlIG9ubHkgaW4gU3VuT1MsIFNvbGFyaXMsIGFuZAorICAgU3RyYXR1cyBWT1MuIFVubGlr ZSBUQ1AvSVAsIFguMjUgQVBJcyBhcmUgbm90IHN0YW5kYXJkaXplZDsgZWFjaAorICAgdmVuZG9y J3MgWC4yNSBsaWJyYXJpZXMgYW5kIHNlcnZpY2VzIChpZiB0aGV5IGhhdmUgdGhlbSBhdCBhbGwp IGFyZQorICAgdW5pcXVlLgorCisgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIG5ldyBhZGRpdGlv bnMuCisKKzIuOS4xLiBJQk0gQUlYTGluay9YLjI1IE5ldHdvcmsgUHJvdmlkZXIgSW50ZXJmYWNl IGZvciBBSVgKKworICAgU3VwcG9ydCBmb3IgWC4yNSB3YXMgYWRkZWQgdmlhIElCTSdzIE5ldHdv cmsgUHJvdmlkZXIgSW50ZXJmYWNlIChOUEkpLAorICAgQUlYTGluay9YLjI1IDEuMSwgdG8gdGhl IEFJWCA0LnggdmVyc2lvbiBvZiBDLUtlcm1pdCA3LjAuCisgICBVbmZvcnR1bmF0ZWx5LCBBSVhM aW5rL1guMjUgaXMgYSByYXRoZXIgYmFyZS1ib25lcyBmYWNpbGl0eSwgbGFja2luZyBpbgorICAg cGFydGljdWxhciBhbnkgZm9ybSBvZiBQQUQgc3VwcG9ydCAoWC4zLCBYLjI4LCBYLjI5KS4gVGh1 cywgdGhlIEFJWAorICAgdmVyc2lvbiBvZiBDLUtlcm1pdCwgd2hlbiBidWlsdCB0byBpbmNsdWRl IFguMjUgbmV0d29ya2luZywgaGFzIG5laXRoZXIKKyAgIGEgUEFEIGNvbW1hbmQsIG5vciBhIFNF VCBQQUQgY29tbWFuZC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlCisgICB1bmRlcmx5aW5nIEFJ WCBzeXN0ZW06IG5vIFBBRCBzdXBwb3J0LiBUaHVzIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZl CisgICBhbiBpbnRlcmFjdGl2ZSBzaGVsbCBzZXNzaW9uIG92ZXIgYW4gWC4yNSBjb25uZWN0aW9u IGludG8gYW4gQUlYIHN5c3RlbQorICAgKGFzIGZhciBhcyB3ZSBrbm93KSwgZXZlbiBmcm9tIFgu MjUtY2FwYWJsZSBLZXJtaXQgdmVyc2lvbnMgKHN1Y2ggYXMKKyAgIFNvbGFyaXMgb3IgVk9TKSB0 aGF0IGRvIGluY2x1ZGUgUEFEIHN1cHBvcnQuCisKKyAgIFRodXMgdGhlIFguMjUgY2FwYWJpbGl0 aWVzIGluIEFJWCBDLUtlcm1pdCBhcmUgbGltaXRlZCB0byBwZWVyLXRvLXBlZXIKKyAgIGNvbm5l Y3Rpb25zLCBlLmcuIGZyb20gYSBDLUtlcm1pdCBjbGllbnQgdG8gYSBDLUtlcm1pdCBzZXJ2ZXIu IFVubGlrZQorICAgdGhlIFNvbGFyaXMsIFN1bk9TLCBhbmQgVk9TIHZlcnNpb25zLCB0aGUgQUlY IHZlcnNpb24gY2FuIGFjY2VwdAorICAgaW5jb21pbmcgWC4yNSBjb25uZWN0aW9uczoKKworICBz ZXQgbmV0d29yayB0eXBlIHguMjUKKyAgaWYgZmFpbCBzdG9wIDEgU29ycnkgLSBubyBYLjI1IHN1 cHBvcnQKKyAgOyBQdXQgYW55IGRlc2lyZWQgRElTQUJMRSBvciBFTkFCTEUgb3IgU0VUIGNvbW1h bmRzIGhlcmUuCisgIHNldCBob3N0IC9zZXJ2ZXIgKgorICBpZiBmYWlsIHN0b3AgMSBYLjI1ICJz ZXQgaG9zdCAqIiBmYWlsZWQKKworICAgQW5kIHRoZW4gYWNjZXNzIGl0IGZyb20gdGhlIGNsaWVu dCBhcyBmb2xsb3dzOgorCisgIHNldCBuZXR3b3JrIHR5cGUgeC4yNQorICBpZiBmYWlsIHN0b3Ag MSBTb3JyeSAtIG5vIFguMjUgc3VwcG9ydAorICBzZXQgaG9zdCB4eHh4eHh4IDsgU3BlY2lmeSB0 aGUgWC4yNS9YLjEyMSBhZGRyZXNzCisgIGlmIGZhaWwgc3RvcCAxIENhbid0IG9wZW4gY29ubmVj dGlvbgorCisgICBBbmQgYXQgdGhpcyBwb2ludCB0aGUgY2xpZW50IGNhbiB1c2UgdGhlIGZ1bGwg cmFuZ2Ugb2YgY2xpZW50IGNvbW1hbmRzOgorICAgU0VORCwgR0VULCBSRU1PVEUgeHh4LCBGSU5J U0gsIEJZRS4KKworICAgVGhlIEFJWCB2ZXJzaW9uIGFsc28gYWRkcyB0d28gbmV3IHZhcmlhYmxl czoKKworICAgXHYoeDI1bG9jYWxfbnVhKQorICAgICAgICAgIFRoZSBsb2NhbCBYLjI1IGFkZHJl c3MuCisKKyAgIFx2KHgyNXJlbW90ZV9udWEpCisgICAgICAgICAgVGhlIFguMjUgYWRkcmVzcyBv ZiB0aGUgaG9zdCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgorCisgICBDLUtl cm1pdCdzIEFJWCBYLjI1IGNsaWVudCBoYXMgbm90IGJlZW4gdGVzdGVkIGFnYWluc3QgYW55dGhp bmcgb3RoZXIKKyAgIHRoYW4gYSBDLUtlcm1pdCBYLjI1IHNlcnZlciBvbiBBSVguIEl0IGlzIG5v dCBrbm93biBpZiBpdCB3aWxsCisgICBpbnRlcm9wZXJhdGUgd2l0aCBDLUtlcm1pdCBzZXJ2ZXJz IG9uIFNvbGFyaXMsIFN1bk9TLCBvciBWT1MuCisKKyAgIFRvIG1ha2UgYW4gWC4yNSBjb25uZWN0 aW9uIGZyb20gQUlYIEMtS2VybWl0LCB5b3UgbXVzdDoKKworICBzZXQgeDI1IGNhbGwtdXNlci1k YXRhIHh4eHgKKworICAgd2hlcmUgeHh4eCBjYW4gYmUgYW55IGV2ZW4tbGVuZ3RoIHN0cmluZyBv ZiBoZXhhZGVjaW1hbCBkaWdpdHMsIGUuZy4KKyAgIDEyM0FCQy4KKworMi45LjIuIEhQLVVYIFgu MjUKKworICAgQWx0aG91Z2ggQy1LZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IGluY2x1ZGUgYnVp bHQtaW4gc3VwcG9ydCBmb3IgSFAtVVgKKyAgIFguMjUsIGl0IGNhbiBzdGlsbCBiZSB1c2VkIHRv IG1ha2UgWC4yNSBjb25uZWN0aW9ucyBhcyBmb2xsb3dzOiBzdGFydAorICAgS2VybWl0IGFuZCB0 ZWxsIGl0IHRvOgorCisgIHNldCBwcmVmaXhpbmcgYWxsCisgIHNldCBwYXJpdHkgc3BhY2UKKyAg cHR5IHBhZGVtIGFkZHJlc3MKKworICAgVGhpcyBzaG91bGQgd29yayBpbiBIUC1VWCA5LjAwIGFu ZCBsYXRlciAoc2VlIFs0MjVdU2VjdGlvbiAyLjcpLiBJZiB5b3UKKyAgIGhhdmUgYW4gZWFybGll ciBIUC1VWCB2ZXJzaW9uLCBvciB0aGUgUFRZIGludGVyZmFjZSBkb2Vzbid0IHdvcmsgb3IKKyAg IGlzbid0IGF2YWlsYWJsZSwgdHJ5OgorCisgIHNldCBwcmVmaXhpbmcgYWxsCisgIHNldCBwYXJp dHkgc3BhY2UKKyAgcGlwZSBwYWRlbSBhZGRyZXNzCisKKyAgIEZhaWxpbmcgdGhhdCwgdXNlIEtl cm1pdCB0byB0ZWxuZXQgdG8gbG9jYWxob3N0IGFuZCB0aGVuIGFmdGVyIGxvZ2dpbmcKKyAgIGJh Y2sgaW4sIHN0YXJ0IHBhZGVtIGFzIHlvdSB3b3VsZCBub3JtYWxseSBkbyB0byBjb25uZWN0IG92 ZXIgWC4yNS4KKworMi4xMC4gQWRkaXRpb25hbCBTZXJpYWwgUG9ydCBDb250cm9scworCisgICBD LUtlcm1pdCA3LjAgYWRkcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciBncmVhdGVyIGNvbnRy b2wgb3ZlcgorICAgc2VyaWFsIHBvcnRzLiBUaGVzZSBjb21tYW5kcyBhcmUgYXZhaWxhYmxlIG9u bHkgaW4gQy1LZXJtaXQgdmVyc2lvbnMKKyAgIHdob3NlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5 c3RlbXMgcHJvdmlkZSB0aGUgY29ycmVzcG9uZGluZyBzZXJ2aWNlcworICAgKHN1Y2ggYXMgUE9T SVggYW5kIFVOSVggU3lzdGVtIFYpLCBhbmQgZXZlbiB0aGVuIHRoZWlyIHN1Y2Nlc3NmdWwKKyAg IG9wZXJhdGlvbiBkZXBlbmRzIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNwZWNpZmljIGRl dmljZSBhbmQKKyAgIGRyaXZlci4KKworICAgU0VUIERJU0NPTk5FQ1QgeyBPTiwgT0ZGIH0KKyAg ICAgICAgICBPbiBhIFNFVCBMSU5FIG9yIFNFVCBQT1JUIGNvbm5lY3Rpb24gd2l0aCBTRVQgQ0FS UklFUiBPTiBvcgorICAgICAgICAgIEFVVE8sIGlmIHRoZSBjYXJyaWVyIHNpZ25hbCBkcm9wcyBk dXJpbmcgdGhlIGNvbm5lY3Rpb24sCisgICAgICAgICAgaW5kaWNhdGluZyB0aGF0IHRoZSBjb25u ZWN0aW9uIGhhcyBiZWVuIGxvc3QsIGFuZCBDLUtlcm1pdAorICAgICAgICAgIG5vdGljZXMgaXQs IHRoaXMgc2V0dGluZyBnb3Zlcm5zIHdoYXQgaGFwcGVucyBuZXh0LiBXaXRoIFNFVAorICAgICAg ICAgIERJU0NPTk5FQ1QgT0ZGLCB3aGljaCBpcyBjb25zaXN0ZW50IHdpdGggcHJldmlvdXMgYmVo YXZpb3IsIGFuZAorICAgICAgICAgIHRoZXJlZm9yZSB0aGUgZGVmYXVsdCwgQy1LZXJtaXQgY29u dGludWVzIHRvIGtlZXAgdGhlIGRldmljZQorICAgICAgICAgIG9wZW4gYW5kIGFsbG9jYXRlZC4g V2l0aCBTRVQgRElTQ09OTkVDVCBPTiwgQy1LZXJtaXQKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5 IGNsb3NlcyBhbmQgcmVsZWFzZXMgdGhlIGRldmljZSB3aGVuIGl0IHNlbnNlcyBhCisgICAgICAg ICAgY2FycmllciBvbi10by1vZmYgdHJhbnNpdGlvbiwgdGh1cyBhbGxvd2luZyBvdGhlcnMgdG8g dXNlIGl0LgorICAgICAgICAgIEhvd2V2ZXIsIGl0IHJlbWFpbnMgdGhlIGRlZmF1bHQgZGV2aWNl IGZvciBpL28gKERJQUwsIFJFRElBTCwKKyAgICAgICAgICBJTlBVVCwgU0VORCwgQ09OTkVDVCwg ZXRjKSwgc28gaWYgYSBzdWJzZXF1ZW50IGkvbyBjb21tYW5kIGlzCisgICAgICAgICAgZ2l2ZW4s IHRoZSBkZXZpY2UgaXMgcmVvcGVuZWQgaWYgaXQgaXMgc3RpbGwgYXZhaWxhYmxlLiBXaGVuIGl0 CisgICAgICAgICAgaGFzIGJlZW4gYXV0b21hdGljYWxseSBjbG9zZWQgaW4gdGhpcyBtYW5uZXIs IFNIT1cKKyAgICAgICAgICBDT01NVU5JQ0FUSU9OUyBwdXRzICIoY2xvc2VkKSIgYWZ0ZXIgaXRz IG5hbWUsIGFuZCBpbiBVTklYLCB0aGUKKyAgICAgICAgICBsb2NrZmlsZSBkaXNhcHBlYXJzIC0t IGJvdGggZnJvbSBTSE9XIENPTU0gYW5kIGZyb20gdGhlIGxvY2tmaWxlCisgICAgICAgICAgZGly ZWN0b3J5IGl0c2VsZi4gU3lub255bTogU0VUIENMT1NFLU9OLURJU0NPTk5FQ1QuCisKKyAgIFNF VCBFWElUIE9OLURJU0NPTk5FQ1QgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBMaWtlIERJU0NPTk5F Q1QsIGJ1dCBtYWtlcyB0aGUgcHJvZ3JhbSBleGl0IGlmIGEgY29ubmVjdGlvbgorICAgICAgICAg IGRyb3BzLgorCisgICBOb3RlIHRoYXQgU0VUIENMT1NFLU9OLURJU0NPTk5FQ1QgYW5kIFNFVCBF WElUIE9OLURJU0NPTk5FQ1QgYXBwbHkgb25seQorICAgdG8gY29ubmVjdGlvbnMgdGhhdCBkcm9w OyB0aGV5IGRvIG5vdCBhcHBseSB0byBjb25uZWN0aW9ucyB0aGF0IGNhbid0CisgICBiZSBtYWRl IGluIHRoZSBmaXJzdCBwbGFjZS4gRm9yIGV4YW1wbGUsIHRoZXkgaGF2ZSBubyBlZmZlY3Qgd2hl biBhIFNFVAorICAgTElORSwgU0VUIEhPU1QsIFRFTE5FVCwgb3IgRElBTCBjb21tYW5kIGZhaWxz LgorCisgICBIQU5HVVAKKyAgICAgICAgICBJZiBbQ0xPU0UtT04tXURJU0NPTk5FQ1QgaXMgT04s IGFuZCB0aGUgSEFOR1VQIGNvbW1hbmQgaXMgZ2l2ZW4KKyAgICAgICAgICBvbiBhIHNlcmlhbCBk ZXZpY2UsIGFuZCB0aGUgY2FycmllciBzaWduYWwgaXMgbm8gbG9uZ2VyIHByZXNlbnQKKyAgICAg ICAgICBhZnRlciB0aGUgSEFOR1VQIGNvbW1hbmQsIHRoZSBkZXZpY2UgaXMgY2xvc2VkIGFuZCBy ZWxlYXNlZC4KKworICAgU0VUIFBBUklUWSBIQVJEV0FSRSB7IEVWRU4sIE9ERCB9CisgICAgICAg ICAgVW5saWtlIFNFVCBQQVJJVFkgeyBFVkVOLCBPREQsIE1BUkssIFNQQUNFIH0sIHdoaWNoIHNl bGVjdHMgNworICAgICAgICAgIGRhdGEgYml0cyBwbHVzIHRoZSBpbmRpY2F0ZWQga2luZCBvZiBw YXJpdHkgKHRvIGJlIGRvbmUgaW4KKyAgICAgICAgICBzb2Z0d2FyZSBieSBLZXJtaXQgaXRzZWxm KSwgU0VUIFBBUklUWSBIQVJEV0FSRSBzZWxlY3RzIDggZGF0YQorICAgICAgICAgIGJpdHMgcGx1 cyBldmVuIG9yIG9kZCBwYXJpdHksIHRvIGJlIGRvbmUgYnkgdGhlIHVuZGVybHlpbmcKKyAgICAg ICAgICBoYXJkd2FyZSwgb3BlcmF0aW5nIHN5c3RlbSwgb3IgZGV2aWNlIGRyaXZlci4gVGhpcyBj b21tYW5kIGlzCisgICAgICAgICAgZWZmZWN0aXZlIG9ubHkgd2l0aCBhIFNFVCBMSU5FIG9yIFNF VCBQT1JUIGRldmljZS4gVGhhdCBpcywgaXQKKyAgICAgICAgICBoYXMgbm8gZWZmZWN0IGluIHJl bW90ZSBtb2RlLCBub3Igb24gbmV0d29yayBjb25uZWN0aW9ucy4gVGhlcmUKKyAgICAgICAgICBp cyBwcmVzZW50bHkgbm8gbWV0aG9kIGZvciBzZWxlY3RpbmcgOCBkYXRhIGJpdHMgcGx1cyBtYXJr IG9yCisgICAgICAgICAgc3BhY2UgcGFyaXR5LiBJZiBoYXJkd2FyZSBwYXJpdHkgaXMgaW4gZWZm ZWN0LCB0aGUgdmFyaWFibGUKKyAgICAgICAgICBcdihod3Bhcml0eSkgaXMgc2V0IHRvICJldmVu IiBvciAib2RkIi4gTm90ZTogc29tZSBwbGF0Zm9ybXMKKyAgICAgICAgICBtaWdodCBhbHNvIHN1 cHBvcnQgc2V0dGluZ3Mgb2YgU1BBQ0UsIE1BUkssIG9yIE5PTkUuCisKKyAgIFNFVCBTVE9QLUJJ VFMgeyAxLCAyIH0KKyAgICAgICAgICBUaGlzIHRlbGxzIHRoZSBudW1iZXIgb2YgMS1iaXRzIHRv IGluc2VydCBhZnRlciBhbiBvdXRib3VuZAorICAgICAgICAgIGNoYXJhY3RlcidzIGRhdGEgYW5k IHBhcml0eSBiaXRzLCB0byBzZXBhcmF0ZSBpdCBmcm9tIHRoZSBuZXh0CisgICAgICAgICAgY2hh cmFjdGVyLiBOb3JtYWxseSAxLiBDaG9vc2luZyAyIHN0b3AgYml0cyBzaG91bGQgZG8gbm8gaGFy bSwKKyAgICAgICAgICBidXQgd2lsbCBzbG93IGRvd24gc2VyaWFsIHRyYW5zbWlzc2lvbiBieSBh cHByb3hpbWF0ZWx5IDEwCisgICAgICAgICAgcGVyY2VudC4gSGlzdG9yaWNhbGx5LCAyIHN0b3Ag Yml0cyB3ZXJlIHVzZWQgd2l0aCBUZWxldHlwZXMgKGF0CisgICAgICAgICAgMTEwIGJwcyBvciBi ZWxvdykgZm9yIHByaW50LWhlYWQgcmVjb3ZlcnkgdGltZS4gVGhlcmUgaXMKKyAgICAgICAgICBw cmVzZW50bHkgbm8gbWV0aG9kIGZvciBjaG9vc2luZyBhbnkgbnVtYmVyIG9mIHN0b3AgYml0cyBi ZXNpZGVzCisgICAgICAgICAgMSBhbmQgMi4KKworICAgU0VUIFNFUklBTCBbIGRwcyBdCisgICAg ICAgICAgZHBzIHN0YW5kcyBmb3IgRGF0YS1iaXRzLCBQYXJpdHksIFN0b3AtYml0cy4gVGhpcyBp cyB0aGUKKyAgICAgICAgICBub3RhdGlvbiBmYW1pbGlhciB0byBtYW55IHBlb3BsZSBmb3Igc2Vy aWFsIHBvcnQgY29uZmlndXJhdGlvbjoKKyAgICAgICAgICA3RTEsIDhOMSwgN08yLCBldGMuIFRo ZSBkYXRhIGJpdHMgbnVtYmVyIGFsc28gYmVjb21lcyB0aGUKKyAgICAgICAgICBURVJNSU5BTCBC WVRFU0laRSBzZXR0aW5nLiBUaGUgc2Vjb25kIGNoYXJhY3RlciBpcyBFIGZvciBFdmVuLCBPCisg ICAgICAgICAgZm9yIE9kZCwgTSBmb3IgTWFyaywgUyBmb3IgU3BhY2UsIG9yIE4gZm9yIE5vbmUu IFRoZSBsaXN0IG9mCisgICAgICAgICAgYXZhaWxhYmxlIG9wdGlvbnMgZGVwZW5kcyBvbiB0aGUg Y2FwYWJpbGl0aWVzIG9mIHRoZSBzcGVjaWZpYworICAgICAgICAgIHBsYXRmb3JtLiBJZiBkcHMg aXMgb21pdHRlZCwgOE4xIGlzIHVzZWQuIFR5cGUgInNldCBzZXJpYWwgPyIKKyAgICAgICAgICBm b3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBjaG9pY2VzLiBFeGFtcGxlczoKKworICAgICAgICBTRVQg U0VSSUFMIDdFMQorICAgICAgICAgICAgICAgIEVxdWl2YWxlbnQgdG8gU0VUIFBBUklUWSBFVkVO LCBTRVQgU1RPUC1CSVRTIDEsIFNFVCBURVJNCisgICAgICAgICAgICAgICAgQllURSA3LgorCisg ICAgICAgIFNFVCBTRVJJQUwgOE4xCisgICAgICAgICAgICAgICAgRXF1aXZhbGVudCB0byBTRVQg UEFSSVRZIE5PTkUsIFNFVCBTVE9QLUJJVFMgMSwgU0VUIFRFUk0KKyAgICAgICAgICAgICAgICBC WVRFIDguCisKKyAgICAgICAgU0VUIFNFUklBTCA3RTIKKyAgICAgICAgICAgICAgICBFcXVpdmFs ZW50IHRvIFNFVCBQQVJJVFkgRVZFTiBhbmQgU0VUIFNUT1AtQklUUyAyLCBTRVQKKyAgICAgICAg ICAgICAgICBURVJNIEJZVEUgNy4KKworICAgICAgICBTRVQgU0VSSUFMIDhFMgorICAgICAgICAg ICAgICAgIFNhbWUgYXMgU0VUIFBBUklUWSBIQVJEV0FSRSBFVkVOLCBTRVQgU1RPUC1CSVRTIDIs IFNFVAorICAgICAgICAgICAgICAgIFRFUk0gQllURSA4LgorCisgICAgICAgIFNFVCBTRVJJQUwK KyAgICAgICAgICAgICAgICBTYW1lIGFzIFNFVCBQQVJJVFkgTk9ORSBhbmQgU0VUIFNUT1AtQklU UyAxLCBTRVQgVEVSTSBCWVRFCisgICAgICAgICAgICAgICAgOC4KKworICAgTm90ZXM6CisKKyAg ICAgKiBUaGUgU0VUIFNFUklBTCB4eDIgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIG9ubHkgaW4gS2Vy bWl0IHZlcnNpb25zCisgICAgICAgd2hlcmUgdGhlIFNFVCBQQVJJVFkgSEFSRFdBUkUgY29tbWFu ZCBpcyBhbHNvIGF2YWlsYWJsZS4gKFNIT1cKKyAgICAgICBGRUFUVVJFUyBpbmNsdWRlcyAiSFdQ QVJJVFkiIGluIGl0cyBvcHRpb25zIGxpc3QuKQorICAgICAqIFRoZSBTRVQgU0VSSUFMIDd4eCBh bmQgOE4xIG9wdGlvbnMgYWZmZWN0IHRoZSBzb2Z0d2FyZSBwYXJpdHkKKyAgICAgICBzZXR0aW5n LCBldmVuIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zLgorICAgICAqIEFzIG5vdGVkIGluIHRoZSBt YW51YWwsIHNlbGVjdGluZyA4IGRhdGEgYml0cyBkb2VzIG5vdCBnaXZlIHlvdQorICAgICAgIDgt Yml0IHRlcm1pbmFsIHNlc3Npb25zIGluIENPTk5FQ1QgbW9kZSB1bmxlc3MgeW91IGFsc28gU0VU CisgICAgICAgVEVSTUlOQUwgQllURVNJWkUgOC4gVGhlIGRlZmF1bHQgdGVybWluYWwgYnl0ZXNp emUgcmVtYWlucyA3LCB0bworICAgICAgIHByb3RlY3QgYWdhaW5zdCB0aGUgc2l0dWF0aW9uIHdo ZXJlIHRoZSByZW1vdGUgaG9zdCBpcyBnZW5lcmF0aW5nCisgICAgICAgcGFyaXR5IGJ1dCB5b3Ug ZG9uJ3Qga25vdyBhYm91dCBpdC4gSWYgdGhlIHRlcm1pbmFsIGJ5dGVzaXplIHdhcyA4CisgICAg ICAgYnkgZGVmYXVsdCBhbmQgeW91IENPTk5FQ1RlZCB0byBzdWNoIGEgaG9zdCwgeW91IHdvdWxk IHNlZSBvbmx5CisgICAgICAgZ2FyYmFnZSBvbiB5b3VyIHNjcmVlbi4KKyAgICAgKiBJZiB5b3Ug ZG8gbm90IGdpdmUgYSBTRVQgU1RPUC1CSVRTIG9yIFNFVCBTRVQgU0VSSUFMIGNvbW1hbmQsCisg ICAgICAgQy1LZXJtaXQgZG9lcyBub3QgYXR0ZW1wdCB0byBzZXQgdGhlIGRldmljZSdzIHN0b3Ag Yml0czsgaW5zdGVhZCwKKyAgICAgICBpdCB1c2VzIHdoYXRldmVyIHNldHRpbmcgdGhlIGRldmlj ZSB1c2VzIHdoZW4gbm90IGdpdmVuIGV4cGxpY2l0CisgICAgICAgaW5zdHJ1Y3Rpb25zIGFib3V0 IHN0b3AgYml0cy4KKworICAgU0hPVyBDT01NVU5JQ0FUSU9OUyBkaXNwbGF5cyB0aGUgY3VycmVu dCBzZXR0aW5ncy4gU3RvcCBiaXRzIGFuZAorICAgaGFyZHdhcmUgcGFyaXR5IGFyZSBzaG93biBv bmx5IGZvciBTRVQgUE9SVCAvIFNFVCBMSU5FIChzZXJpYWwpCisgICBkZXZpY2VzLCBzaW5jZSB0 aGV5IGRvIG5vdCBhcHBseSB0byBuZXR3b3JrIGNvbm5lY3Rpb25zIG9yIHRvIHJlbW90ZQorICAg bW9kZS4gU1RPUC1CSVRTIGlzIHNob3duIGFzICIoZGVmYXVsdCkiIGlmIHlvdSBoYXZlIG5vdCBn aXZlbiBhbgorICAgZXhwbGljaXQgU0VUIFNUT1AtQklUUyBvciBTRVQgU0VSSUFMIGNvbW1hbmQu CisKKyAgIFRoZSBcdihzZXJpYWwpIHZhcmlhYmxlIHNob3dzIHRoZSBTRVQgU0VSSUFMIHNldHRp bmcgKDhOMSwgN0UxLCBldGMpLgorCisyLjExLiBHZXR0aW5nIEFjY2VzcyB0byB0aGUgRGlhbG91 dCBEZXZpY2UKKworICAgICBUaGlzIHNlY3Rpb24gaXMgZm9yIFVOSVggb25seTsgbm90ZSB0aGUg c3BlY2lhbCB3b3JkcyBhYm91dCBRTlggYXQKKyAgICAgdGhlIGVuZC4gQWxzbyBzZWUgWzQyNl1T ZWN0aW9uIDIuMCBmb3IgU0VUIExJTkUgc3dpdGNoZXMsCisgICAgIHBhcnRpY3VsYXJseSB0aGUg L1NIQVJFIHN3aXRjaCBmb3IgVk1TIG9ubHkuCisKKyAgIEMtS2VybWl0IGRvZXMgaXRzIGJlc3Qg dG8gb2JleSB0aGUgVVVDUCBsb2NrZmlsZSBjb252ZW50aW9ucyBvZiBlYWNoCisgICBwbGF0Zm9y bSAobWFjaGluZSwgb3BlcmF0aW5nIHN5c3RlbSwgT1MgdmVyc2lvbikgd2hlcmUgaXQgcnVucywg aWYgdGhhdAorICAgcGxhdGZvcm0gdXNlcyBVVUNQLgorCisgICBCdXQgc2ltcGx5IG9iZXlpbmcg dGhlIGNvbnZlbnRpb25zIGlzIG9mdGVuIG5vdCBnb29kIGVub3VnaCwgZHVlIHRvIHRoZQorICAg aW5jcmVhc2luZyBsaWtlbGlob29kIHRoYXQgYSBwYXJ0aWN1bGFyIHNlcmlhbCBkZXZpY2UgbWln aHQgaGF2ZSBtb3JlCisgICB0aGFuIG9uZSBuYW1lIChlLmcuIC9kZXYvdHR5MDAgYW5kIC9kZXYv dGVybS8wMCBhcmUgdGhlIHNhbWUgZGV2aWNlIGluCisgICBVbml4d2FyZSA3OyAvZGV2L2N1YSBh bmQgL2Rldi9jdWZhIGFyZSB0aGUgc2FtZSBkZXZpY2UgaW4gTmVYVFNURVApLAorICAgcGx1cyB0 aGUgaW5jcmVhc2luZ2x5IHdpZGVzcHJlYWQgdXNlIG9mIHN5bWxpbmtzIGZvciBkZXZpY2UgbmFt ZXMsIHN1Y2gKKyAgIGFzIC9kZXYvbW9kZW0uCisKKyAgIEMtS2VybWl0IDcuMCBnb2VzIHRvIGdy ZWF0ZXIgbGVuZ3RocyB0aGFuIHByZXZpb3VzIHZlcnNpb25zIHRvCisgICBzdWNjZXNzZnVsbHkg aW50ZXJsb2NrIHdpdGggb3RoZXIgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbSAoYW5kIG90aGVyCisg ICBpbnN0YW5jZXMgb2YgS2VybWl0IGl0c2VsZik7IGZvciBleGFtcGxlLCBieToKKworICAgICAq IENyZWF0aW9uIG9mIGR1YWwgbG9ja2ZpbGVzIHdoZW5ldmVyIGEgc3ltbGluayBpcyB1c2VkOyBv bmUgZm9yIHRoZQorICAgICAgIGxpbmsgbmFtZSBhbmQgb25lIGZvciB0aGUgcmVhbCBuYW1lLgor ICAgICAqIENyZWF0aW9uIG9mIGR1YWwgbG9ja2ZpbGVzIGluIEhQLVVYIGFjY29yZGluZyB0byBI UCBydWxlcy4KKyAgICAgKiBDcmVhdGlvbiBvZiBkdWFsIHVwcGVyY2FzZS9sb3dlcmNhc2UgbG9j a2ZpbGUgbmFtZXMgaW4gU0NPCisgICAgICAgVU5JWC9PRFQvT1NSNS4KKyAgICAgKiBUaGUgdXNl IG9mIHR0eWxvY2soKSBpbiB2ZXJzaW9ucyBvZiBBSVggd2hlcmUgaXQgd29ya3MuCisgICAgICog VGhlIHVzZSwgd2hlcmV2ZXIgcG9zc2libGUsIG9mIGxvY2tmaWxlIG5hbWVzIGJhc2VkIG9uCisg ICAgICAgaW5vZGUvbWFqb3IvbWlub3IgZGV2aWNlIG51bWJlciByYXRoZXIgdGhhbiBkZXZpY2Ug bmFtZS4KKworICAgU2VlIHRoZSBbNDI3XWNrdWlucy50eHQgYW5kIFs0MjhdY2t1YndyLnR4dCBm aWxlcyBmb3IgZGV0YWlscy4KKworICAgUU5YIGlzIGFsbW9zdCB1bmlxdWUgYW1vbmcgVU5JWCB2 YXJpZXRpZXMgaW4gaGF2aW5nIG5vIFVVQ1AgcHJvZ3JhbXMKKyAgIG5vciBVVUNQLW9yaWVudGVk IGRpYWxvdXQtZGV2aWNlIGxvY2tpbmcgY29udmVudGlvbnMuIFFOWCBkb2VzLAorICAgaG93ZXZl ciwgYWxsb3cgYSBwcm9ncmFtIHRvIGdldCB0aGUgZGV2aWNlIG9wZW4gY291bnQuIFRoaXMgY2Fu IG5vdCBiZQorICAgYSByZWxpYWJsZSBmb3JtIG9mIGxvY2tpbmcgdW5sZXNzIGFsbCBhcHBsaWNh dGlvbnMgZG8gaXQgKGFuZCB0aGV5CisgICBkb24ndCksIHNvIGJ5IGRlZmF1bHQsIEtlcm1pdCB1 c2VzIHRoaXMgaW5mb3JtYXRpb24gb25seSBmb3IgcHJpbnRpbmcgYQorICAgd2FybmluZyBtZXNz YWdlIHN1Y2ggYXM6CisKKyAgQy1LZXJtaXQ+c2V0IGxpbmUgL2Rldi9zZXIxCisgIFdBUk5JTkcg LSAiL2Rldi9zZXIxIiBsb29rcyBidXN5Li4uCisKKyAgIEhvd2V2ZXIsIGlmIHlvdSB3YW50IHRv IHVzZSBpdCBhcyBhIGxvY2ssIHlvdSBjYW4gZG8gc28gd2l0aDoKKworICBTRVQgUU5YLVBPUlQt TE9DSyB7IE9OLCBPRkYgfQorCisgICBRTlgtUE9SVC1MT0NLIGlzIE9GRiBieSBkZWZhdWx0OyBp ZiB5b3Ugc2V0IGluIE9OLCBDLUtlcm1pdCBmYWlscyB0bworICAgb3BlbiBhbnkgZGlhbG91dCBk ZXZpY2Ugd2hlbiBpdHMgb3BlbiBjb3VudCBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyCisgICBwcm9j ZXNzIGhhcyBpdCBvcGVuLiBTSE9XIENPTU0gKGluIFFOWCBvbmx5KSBkaXNwbGF5cyB0aGUgc2V0 dGluZywgYW5kCisgICBpZiB5b3UgaGF2ZSBhIHBvcnQgb3BlbiwgaXQgYWxzbyBzaG93cyB0aGUg Y3VycmVudCBvcGVuIGNvdW50ICh3aXRoCisgICBDLUtlcm1pdCdzIG93biBhY2Nlc3MgYWx3YXlz IGNvdW50aW5nIGFzIDEpLgorCisyLjEyLiBUaGUgQ29ubmVjdGlvbiBMb2cKKworICAgQy1LZXJt aXQgNy4wIGFkZHMgdGhlIGFiaWxpdHkgdG8gbG9nIGNvbm5lY3Rpb25zLCBzbyB5b3UgY2FuIHNl ZSB3aGVyZQorICAgeW91J3ZlIGJlZW4gYW5kIGhhdmUgYSByZWNvcmQgb2YgY2FsbHMgeW91J3Zl IG1hZGUuIEEgY29ubmVjdGlvbiBpcworICAgZGVmaW5lZCBhcyBhbnkgY29tbXVuaWNhdGlvbnMg c2Vzc2lvbiB0aGF0IGlzIGJlZ3VuIGJ5IFNFVCBMSU5FLCBTRVQKKyAgIFBPUlQsIERJQUwsIFNF VCBIT1NULCBURUxORVQsIG9yIFJMT0dJTi4gQ29ubmVjdGlvbnMgYXJlIG5vdCBsb2dnZWQKKyAg IHVubGVzcyB5b3UgcmVxdWVzdCBpdDsgdGhlIGNvbW1hbmQgaXM6CisKKyAgIExPRyBDWCBbIGZp bGVuYW1lIFsgeyBORVcsIEFQUEVORCB9IF0gXQorICAgICAgICAgIEVuYWJsZXMgbG9nZ2luZyBv ZiBjb25uZWN0aW9ucyBpbiB0aGUgZ2l2ZW4gZmlsZS4gSWYgdGhlCisgICAgICAgICAgdHJhaWxp bmcgeyBORVcsIEFQUEVORCB9IGtleXdvcmQgaXMgb21pdHRlZCwgdGhlIGZpbGUgaXMgb3BlbmVk CisgICAgICAgICAgZm9yIGFwcGVuZGluZzsgaS5lLiBuZXcgcmVjb3JkcyBhcmUgd3JpdHRlbiB0 byB0aGUgZW5kLiBJZiBORVcKKyAgICAgICAgICBpcyBzcGVjaWZpZWQsIGEgbmV3IGZpbGUgaXMg Y3JlYXRlZDsgaWYgYSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgICBhbHJlYWR5IGV4 aXN0ZWQsIGl0IGlzIG92ZXJ3cml0dGVuLiBJZiB0aGUgZmlsZW5hbWUgaXMgb21pdHRlZCwKKyAg ICAgICAgICBDWC5MT0cgaW4geW91ciBob21lIChsb2dpbikgZGlyZWN0b3J5IGlzIHVzZWQgKG5v dGU6IHVwcGVyY2FzZSkuCisgICAgICAgICAgVG8gYWNjZXB0IGFsbCBkZWZhdWx0cywganVzdCB1 c2UgImxvZyBjb25uZWN0aW9ucyIgKG9yICJsIGMiIGZvcgorICAgICAgICAgIHNob3J0KS4gU3lu b255bTogTE9HIENPTk5FQ1RJT05TLgorCisgICBDTE9TRSBDWC1MT0cKKyAgICAgICAgICBUaGlz IGNsb3NlcyB0aGUgY29ubmVjdGlvbiBsb2cgaWYgaXQgd2FzIG9wZW4uIChOb3RlLCB0aGUgQ0xP U0UKKyAgICAgICAgICBDT05ORUNUSU9OIGNvbW1hbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGl0 c2VsZikuCisKKyAgIFNIT1cgQ1gKKyAgICAgICAgICBUaGlzIHNob3dzIHlvdXIgY3VycmVudCBj b25uZWN0aW9uLCBpZiBhbnksIGluY2x1ZGluZyB0aGUKKyAgICAgICAgICBlbGFwc2VkIHRpbWUg KHNpbmNlIHlvdSBvcGVuZWQgaXQpLiBTeW5vbnltOiBTSE9XIENPTk5FQ1RJT04uCisKKyAgIFx2 KGN4X3RpbWUpCisgICAgICAgICAgVGhpcyB2YXJpYWJsZSBzaG93cyB0aGUgZWxhcHNlZCB0aW1l IG9mIHlvdXIgY3VycmVudCBjb25uZWN0aW9uLAorICAgICAgICAgIG9yIGlmIHRoZXJlIGlzIG5v IGN1cnJlbnQgY29ubmVjdGlvbiwgb2YgeW91ciBtb3N0IHJlY2VudAorICAgICAgICAgIGNvbm5l Y3Rpb24sIG9mIGlmIHRoZXJlIGhhdmUgYmVlbiBubyBjb25uZWN0aW9ucywgMC4KKworICAgVGhl IGNvbm5lY3Rpb24gY29udGFpbnMgb25lIGxpbmUgcGVyIGNvbm5lY3Rpb24sIG9mIHRoZSBmb3Jt OgorCisgIHl5eXltbWRkIGhoOm1tOnNzIHVzZXJuYW1lIHBpZCBwPXYgWyBwPXYgWyAuLi4gXSBd CisKKyAgIHdoZXJlIHRoZSB0aW1lc3RhbXAgKGluIGNvbHVtbnMgMS0xOCkgc2hvd3Mgd2hlbiB0 aGUgY29ubmVjdGlvbiB3YXMKKyAgIG1hZGU7IHVzZXJuYW1lIGlzIHRoZSBsb2dpbiBpZGVudGl0 eSBvZiB0aGUgcGVyc29uIHdobyBtYWRlIHRoZQorICAgY29ubmVjdGlvbjsgcGlkIGlzIEtlcm1p dCdzIHByb2Nlc3MgSUQgd2hlbiBpdCBtYWRlIHRoZSBjb25uZWN0aW9uLiBUaGUKKyAgIHAncyBh cmUgcGFyYW1ldGVycyB0aGF0IGRlcGVuZCBvbiB0aGUgdHlwZSBvZiBjb25uZWN0aW9uLCBhbmQg dGhlIHYncworICAgYXJlIHRoZWlyIHZhbHVlczoKKworICBUID0gQ29ubmVjdGlvbiBUeXBlIChU Q1AsIFNFUklBTCwgRElBTCwgREVDTkVULCBldGMpLgorICBIID0gVGhlIG5hbWUgb2YgdGhlIEhv c3QgZnJvbSB3aGljaCB0aGUgY29ubmVjdGlvbiB3YXMgbWFkZS4KKyAgTiA9IERlc3RpbmF0aW9u IHBob25lIE51bWJlciBvciBOZXR3b3JrIGhvc3QgbmFtZSBvciBhZGRyZXNzLgorICBEID0gU2Vy aWFsIGNvbm5lY3Rpb25zIG9ubHk6IERldmljZSBuYW1lLgorICBPID0gRGlhbGVkIGNhbGxzIG9u bHk6IE9yaWdpbmF0aW5nIGNvdW50cnkgY29kZSAmIGFyZWEgY29kZSBpZiBrbm93bi4KKyAgRSA9 IEVsYXBzZWQgdGltZSBpbiBoaDptbTpzcyBmb3JtYXQgKG9yIGhoaDptbTpzcywgZXRjKS4KKwor ICAgSWYgeW91IGFsd2F5cyB3YW50IHRvIGtlZXAgYSBjb25uZWN0aW9uIGxvZywgc2ltcGx5IGFk ZDoKKworICBsb2cgY29ubmVjdGlvbnMKKworICAgdG8geW91ciBDLUtlcm1pdCBjdXN0b21pemF0 aW9uIGZpbGUuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgaWYgeW91IG1ha2UgYQorICAgbG90IG9mIGNv bm5lY3Rpb25zLCB5b3VyIENYLkxPRyB3aWxsIGdyb3cgYW5kIGdyb3cuIFlvdSBjYW4gaGFuZGxl IHRoaXMKKyAgIGJ5IGFkZGluZyBhICJsb2dyb3RhdGUiIHByb2NlZHVyZSBsaWtlIHRoZSBmb2xs b3dpbmcgdG8geW91cgorICAgY3VzdG9taXphdGlvbiBmaWxlLCBiZWZvcmUgdGhlICJsb2cgY29u bmVjdGlvbnMiIGNvbW1hbmQ6CisKKyAgZGVmaW5lIExPR1JPVEFURSB7ICAgICAgICAgICAgICAg ICAgICA7IERlZmluZSBMT0dST1RBVEUgbWFjcm8KKyAgICAgIGxvY2FsIFwlaSBcJW0gXCVkIFwl biBcJWYgTUFYCisgICAgICBkZWYgTUFYIDQgICAgICAgICAgICAgICAgICAgICAgICAgOyBIb3cg bWFueSBtb250aHMgdG8ga2VlcAorICAgICAgaWYgbm90IGRlZiBcJTEgLSAgICAgICAgICAgICAg ICAgIDsgTm8gYXJndW1lbnQgZ2l2ZW4KKyAgICAgICAgZW5kIDEgXCUwOiBObyBmaWxlbmFtZSBn aXZlbgorICAgICAgaWYgbm90ID0gMSBcZmZpbGVzKFwlMSkgLSAgICAgICAgIDsgRXhhY3RseSAx IGZpbGUgbXVzdCBtYXRjaAorICAgICAgICBlbmQgMSBcJTA6IFwlMSAtIEZpbGUgbm90IGZvdW5k CisgICAgICAuXCVkIDo9IFxmc3Vic3RyKFxmZGF0ZShcJTEpLDEsNikgOyBBcmcgT0sgLSBnZXQg ZmlsZSB5ZWFyICYgbW9udGgKKyAgICAgIGlmID0gXCVkIC0gICAgICAgICAgICAgICAgICAgICAg ICA7IENvbXBhcmUgZmlsZSB5ZWFyICYgbW9udGgKKyAgICAgICAgXGZzdWJzdHIoXHYobmRhdGUp LDEsNikgLSAgICAgICA7IHdpdGggY3VycmVudCB5ZWFyICYgbW9udGgKKyAgICAgICAgICBlbmQg MCAgICAgICAgICAgICAgICAgICAgICAgICA7IFNhbWUgeWVhciAmIG1vbnRoIC0gZG9uZQorICAg ICAgcmVuYW1lIFwlMSBcJTEuXCVkICAgICAgICAgICAgICAgIDsgRGlmZmVyZW50IC0gcmVuYW1l IGZpbGUKKyAgICAgIC5cJW4gOj0gXGZmaWxlcyhcJTEuKikgICAgICAgICAgICA7IEhvdyBtYW55 IG9sZCBmaWxlcworICAgICAgaWYgPCBcJW4gXG0oTUFYKSBlbmQgMCAgICAgICAgICAgIDsgTm90 IGVub3VnaCB0byByb3RhdGUKKyAgICAgIC5cJW0gOj0gXCUxLjk5OTk5OSAgICAgICAgICAgICAg ICA7IEluaXRpYWwgY29tcGFyZSBzdHJpbmcKKyAgICAgIGZvciBcJWkgMSBcJW4gMSB7ICAgICAg ICAgICAgICAgICA7IExvb3AgdGhydSBvbGQgbG9ncworICAgICAgICAgLlwlZiA6PSBcZm5leHRm aWxlKCkgICAgICAgICAgIDsgR2V0IG5leHQgZmlsZSBuYW1lCisgICAgICAgICBpZiBsbHQgXCVm IFwlbSAuXCVtIDo9IFwlZiAgICAgOyBJZiB0aGlzIG9uZSBvbGRlciByZW1lbWJlciBpdAorICAg ICAgfQorICAgICAgZGVsZXRlIFwlbSAgICAgICAgICAgICAgICAgICAgICAgIDsgRGVsZXRlIHRo ZSBvbGRlc3Qgb25lCisgIH0KKyAgbG9nIGNvbm5lY3Rpb25zICAgICAgICAgICAgICAgICAgICAg ICA7IE5vdyBvcGVuIHRoZSAocG9zc2libHkgbmV3KSBsb2cKKyAgbG9ncm90YXRlIFx2KGhvbWUp Q1guTE9HICAgICAgICAgICAgICA7IFJ1biB0aGUgTE9HUk9UQVRFIG1hY3JvCisKKyAgIEFzIHlv dSBjYW4gc2VlLCB0aGlzIGNvbXBhcmVzIHRoZSB5eXl5bW0gcG9ydGlvbiBvZiB0aGUgbW9kaWZp Y2F0aW9uCisgICBkYXRlIChcZmRhdGUoKSkgb2YgdGhlIGdpdmVuIGZpbGUgKFwlMSkgd2l0aCB0 aGUgY3VycmVudCB5eXl5bW0uIElmCisgICB0aGV5IGRpZmZlciwgdGhlIGN1cnJlbnQgZmlsZSBo YXMgdGhlIHl5eXltbSBzdWZmaXggKGZyb20gaXRzIG1vc3QKKyAgIHJlY2VudCBtb2RpZmljYXRp b24gZGF0ZSkgYXBwZW5kZWQgdG8gaXRzIG5hbWUuIFRoZW4gd2Ugc2VhcmNoIHRocm91Z2gKKyAg IGFsbCBvdGhlciBzdWNoIGZpbGVzLCBmaW5kIHRoZSBvbGRlc3Qgb25lLCBhbmQgZGVsZXRlIGl0 LiBUaHVzIHRoZQorICAgY3VycmVudCBsb2csIHBsdXMgdGhlIGxvZ3MgZnJvbSB0aGUgbW9zdCBy ZWNlbnQgZm91ciBtb250aHMsIGFyZSBrZXB0LgorICAgVGhpcyBpcyBhbGwgZG9uZSBhdXRvbWF0 aWNhbGx5IGV2ZXJ5IHRpbWUgeW91IHN0YXJ0IEMtS2VybWl0LgorCisgICBPbiBtdWx0aXVzZXIg c3lzdGVtcywgaXQgaXMgcG9zc2libGUgdG8ga2VlcCBhIHNpbmdsZSwgc2hhcmVkLAorICAgc3lz dGVtLXdpZGUgY29ubmVjdGlvbiBsb2csIGJ1dCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCBzaW5j ZSAoYSkgaXQKKyAgIHJlcXVpcmVzIHlvdSBrZWVwIGEgcHVibGljbHkgd3JpdGUtYWNjZXNzaWJs ZSBsb2dmaWxlIChhIGdsYXJpbmcgdGFyZ2V0CisgICBmb3IgbWlzY2hpZWYpLCBhbmQgKGIpIGl0 IHdvdWxkIHJlcXVpcmUgZWFjaCB1c2VyIHRvIGxvZyB0byB0aGF0IGZpbGUKKyAgIGFuZCBub3Qg ZGlzYWJsZSBsb2dnaW5nLiBBIGJldHRlciBtZXRob2QgZm9yIGxvZ2dpbmcgY29ubmVjdGlvbnMs IGluCisgICBVTklYIGF0IGxlYXN0LCBpcyBzeXNsb2dnaW5nIChzZWUgWzQyOV1ja3VpbnMudHh0 IFNlY3Rpb24gMTUgYW5kCisgICBbNDMwXVNlY3Rpb24gNC4yIG9mIHRoZSBbNDMxXUlLU0QgQWRt aW5pc3RyYXRpb24gR3VpZGUgZm9yIGRldGFpbHMpLgorCisyLjEzLiBBdXRvbWF0aWMgQ29ubmVj dGlvbi1TcGVjaWZpYyBGbG93IENvbnRyb2wgU2VsZWN0aW9uCisKKyAgIEJlZ2lubmluZyBpbiBD LUtlcm1pdCA3LjAsIHRoZSBhcHByb3ByaWF0ZSBmbG93LWNvbnRyb2wgbWV0aG9kIGZvciBlYWNo CisgICBjb25uZWN0aW9uIHR5cGUgaXMga2VwdCBpbiBhIHRhYmxlLCBmb3IgZXhhbXBsZToKKwor ICBSZW1vdGU6ICAgICAgICAgICBOT05FCisgIE1vZGVtOiAgICAgICAgICAgIFJUUy9DVFMKKyAg RGlyZWN0LVNlcmlhbDogICAgTk9ORQorICBUQ1BJUDogICAgICAgICAgICBOT05FCisKKyAgIFRo ZSBzaXplIG9mIHRoZSB0YWJsZSBhbmQgdmFsdWVzIGZvciBlYWNoIGNvbm5lY3Rpb24gdHlwZSBj YW4gdmFyeSBmcm9tCisgICBwbGF0Zm9ybSB0byBwbGF0Zm9ybS4gVHlwZSAic2V0IGZsb3cgPyIg Zm9yIGEgbGlzdCBvZiBhdmFpbGFibGUKKyAgIGZsb3ctY29udHJvbCB0eXBlcy4KKworICAgVGhl IHRhYmxlIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGtp bmQgb2YgZmxvdworICAgY29udHJvbCB3aGVuZXZlciB5b3UgbWFrZSBhIGNvbm5lY3Rpb24uIFlv dSBjYW4gZGlzcGxheSB0aGUgdGFibGUgd2l0aDoKKworICBTSE9XIEZMT1ctQ09OVFJPTAorCisg ICBUaGUgZGVmYXVsdHMgYXJlIGFzIGZvbGxvd3M6CisKKyAgIFJlbW90ZToKKyAgICAgICAgICBO T05FIG9yIFhPTi9YT0ZGLiBUaGlzIGlzIGJlY2F1c2UgQy1LZXJtaXQgaXMgbm90IGFsbG93ZWQg dG8KKyAgICAgICAgICBmaW5kIG91dCB3aGF0IHR5cGUgb2YgY29ubmVjdGlvbiB0aGUgaW5jb21p bmcgdXNlciBoYXMgKCopLiBObworICAgICAgICAgIGtpbmQgb2YgZmxvdyBjb250cm9sIHdpbGwg d29yayBvbiBldmVyeSBraW5kIG9mIGNvbm5lY3Rpb24sCisgICAgICAgICAgaW5jbHVkaW5nICh1 bmV4cGVjdGVkbHkpIEtFRVAsIHdoaWNoIHdlIHdvdWxkIGhhdmUgbGlrZWQgdG8gdXNlLAorICAg ICAgICAgIGJ1dCBub3QgdHVybmluZyBvZmYgZmxvdyBjb250cm9sIGF0IHRoZSByZW1vdGUgZW5k IGR1cmluZyBmaWxlCisgICAgICAgICAgdHJhbnNmZXIgb24gVENQL0lQIGNvbm5lY3Rpb25zIGlz IGZhdGFsIHRvIHRoZSB0cmFuc2ZlciAoZXhjZXB0CisgICAgICAgICAgaW4gVk1TIGFuZCBIUC1V WCwgd2hlcmUgaXQgbXVzdCBiZSBzZXQgdG8gWG9uL1hvZmYhKSBUaGVyZWZvcmUKKyAgICAgICAg ICBpZiB5b3UgYXJlIGRpYWxpbmcgaW4gdG8gYSBzZXJpYWwgcG9ydCBvbiBhIHNlcnZlciAoVU5J WCBvciBWTVMpCisgICAgICAgICAgd2hlcmUgQy1LZXJtaXQgaXMgcnVubmluZywgeW91IHdpbGwg bmVlZCB0byB0ZWxsIEMtS2VybWl0IHRvCisgICAgICAgICAgInNldCBmbG93IGtlZXAiIGJlZm9y ZSB0cmFuc2ZlcnJpbmcgZmlsZXMgKGFzc3VtaW5nIHRoZSBtb2RlbQorICAgICAgICAgIGFuZCBw b3J0IGFyZSBjb25maWd1cmVkIGNvcnJlY3RseSBieSB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3I7 CisgICAgICAgICAgb3RoZXJ3aXNlIHlvdSdsbCBuZWVkIHRvIGdpdmUgYSBzcGVjaWZpYyBraW5k IG9mIGZsb3cgY29udHJvbCwKKyAgICAgICAgICBlLmcuICJzZXQgZmxvdyB4b24veG9mZiIpLCBz byBpbiB0aGlzIGNhc2UgQy1LZXJtaXQgd2lsbCBub3QKKyAgICAgICAgICBkaXNhYmxlIGZsb3cg Y29udHJvbCwgYXMgaXQgbXVzdCBkbyB3aGVuIHlvdSBhcmUgY29taW5nIHZpYQorICAgICAgICAg IFRlbG5ldCAoZGlyZWN0bHkgb3IgdGhyb3VnaCBhIHRlcm1pbmFsIHNlcnZlciwgZXhjZXB0IG9u IFZNUyBhbmQKKyAgICAgICAgICBIUC1VWCkuCisKKyAgIE1vZGVtOgorICAgICAgICAgIFRoaXMg YXBwbGllcyB3aGVuIHlvdSBkaWFsIG91dCB3aXRoIGEgbW9kZW0uIEluIHRoaXMgY2FzZSwgdGhl CisgICAgICAgICAgTU9ERU0gRkxPVy1DT05UUk9MIHNldHRpbmcgdGFrZXMgYWZmZWN0IGFmdGVy IHRoZSBTRVQgRkxPVworICAgICAgICAgIHNldHRpbmcsIHNvIGl0IGNhbiBwaWNrIHRoZSBtb3N0 IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbCBmb3IKKyAgICAgICAgICB0aGUgY29tYmluYXRpb24g b2YgdGhlIHBhcnRpY3VsYXIgbW9kZW0gYW5kIHRoZQorICAgICAgICAgIGNvbXB1dGVyL3BvcnQv ZHJpdmVyIHRoYXQgaXMgZGlhbGluZy4KKworICAgRGlyZWN0LVNlcmlhbDoKKyAgICAgICAgICBU aGUgZGVmYXVsdCBoZXJlIGlzIE5PTkUgYmVjYXVzZSBDLUtlcm1pdCBoYXMgbm8gd2F5IG9mIGtu b3dpbmcKKyAgICAgICAgICB3aGF0IGtpbmQgb2YgZmxvdyBjb250cm9sLCBpZiBhbnksIGlzIG9y IGNhbiBiZSBkb25lIGJ5IHRoZQorICAgICAgICAgIGRldmljZSBhdCB0aGUgb3RoZXIgZW5kIG9m IHRoZSBjb25uZWN0aW9uLiBSVFMvQ1RTIHdvdWxkIGJlIGEKKyAgICAgICAgICBiYWQgY2hvaWNl IGhlcmUsIGJlY2F1c2UgaWYgdGhlIENUUyBzaWduYWwgaXMgbm90IGFzc2VydGVkLCB0aGUKKyAg ICAgICAgICBjb25uZWN0aW9uIHdpbGwgaGFuZy4gQW5kIHNpbmNlIGRpcmVjdCBjb25uZWN0aW9u cyBhcmUgb2Z0ZW4KKyAgICAgICAgICBtYWRlIHdpdGggMy13aXJlIGNhYmxlcywgdGhlcmUgaXMg YSBnb29kIGNoYW5jZSB0aGUgQ1RTIHNpZ25hbAorICAgICAgICAgIHdpbGwgbm90IGJlIHJlY2Vp dmVkLgorCisgICBUQ1BJUDoKKyAgICAgICAgICBOT05FLCBzaW5jZSBUQ1AgYW5kIElQIHByb3Zp ZGUgdGhlaXIgb3duIGZsb3cgY29udHJvbAorICAgICAgICAgIHRyYW5zcGFyZW50bHkgdG8gdGhl IGFwcGxpY2F0aW9uLCBleGNlcHQgaW4gVk1TLCB3aGVyZSBYb24vWG9mZgorICAgICAgICAgIGlz IHRoZSBkZWZhdWx0IGR1ZSB0byB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBWTVMgVENQL0lQCisg ICAgICAgICAgcHJvZHVjdHMuCisKKyAgIE90aGVyIG5ldHdvcmtzOgorICAgICAgICAgIE5PTkUs IHNpbmNlIG5ldHdvcmtzIHNob3VsZCBwcm92aWRlIHRoZWlyIGZsb3cgY29udHJvbAorICAgICAg ICAgIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9uLgorCisgICAoKikgVGhpcyBpcyBw b3NzaWJseSB0aGUgd29yc3QgZmVhdHVyZSBvZiBVTklYLCBWTVMsIGFuZCBvdGhlcgorICAgcGxh dGZvcm1zIHdoZXJlIEMtS2VybWl0IHJ1bnMuIElmIEMtS2VybWl0IHdhcyBhYmxlIHRvIGFzayB0 aGUKKyAgIG9wZXJhdGluZyBzeXN0ZW0gd2hhdCBraW5kIG9mIGNvbm5lY3Rpb24gaXQgaGFkIHRv IHRoZSB1c2VyLCBpdCBjb3VsZAorICAgc2V0IHVwIG1hbnkgdGhpbmdzIGZvciB5b3UgYXV0b21h dGljYWxseS4KKworICAgWW91IGNhbiBtb2RpZnkgdGhlIGRlZmF1bHQtZmxvdy1jb250cm9sIHRh YmxlIHdpdGg6CisKKyAgU0VUIEZMT1ctQ09OVFJPTCAveHh4IHsgTk9ORSwgS0VFUCwgUlRTL0NU UywgWE9OL1hPRkYsIC4uLiB9CisKKyAgIHdoZXJlICJ4eHgiIGlzIHRoZSBjb25uZWN0aW9uIHR5 cGUsIGUuZy4KKworICBTRVQgRkxPVyAvUkVNT1RFIE5PTkUKKyAgU0VUIEZMT1cgL0RJUkVDVCBS VFMvQ1RTCisKKyAgIElmIHlvdSBsZWF2ZSBvdXQgdGhlIHN3aXRjaCwgU0VUIEZMT1cgd29ya3Mg YXMgYmVmb3JlLCBjaG9vc2luZyB0aGUKKyAgIGZsb3cgY29udHJvbCBtZXRob2QgdG8gYmUgdXNl ZCBvbiB0aGUgY3VycmVudCBjb25uZWN0aW9uOgorCisgIFNFVCBGTE9XIFhPTi9YT0ZGCisKKyAg IFRodXMsIHdoZW5ldmVyIHlvdSBtYWtlIGEgY29ubmVjdGlvbiB3aXRoIFNFVCBQT1JULCBTRVQg TElORSwgRElBTCwgU0VUCisgICBIT1NULCBURUxORVQsIFJMT0dJTiwgZXRjLCBhbiBhcHByb3By aWF0ZSBmb3JtIG9mIGZsb3cgY29udHJvbCBpcworICAgc2VsZWN0ZWQgYXV0b21hdGljYWxseS4g WW91IGNhbiBvdmVycmlkZSB0aGUgYXV0b21hdGljIHNlbGVjdGlvbiB3aXRoIGEKKyAgIHN1YnNl cXVlbnQgU0VUIEZMT1cgY29tbWFuZCwgc3VjaCBhcyBTRVQgRkxPVyBOT05FIChubyBzd2l0Y2gK KyAgIGluY2x1ZGVkKS4KKworICAgVGhlIGZsb3cgY29udHJvbCBpcyBjaGFuZ2VkIGF1dG9tYXRp Y2FsbHkgdG9vIHdoZW4geW91IGdpdmUgYSBTRVQgTU9ERU0KKyAgIFRZUEUgY29tbWFuZC4gRm9y IGV4YW1wbGUsIHN1cHBvc2UgeW91ciBvcGVyYXRpbmcgc3lzdGVtIChzYXkgTGludXgpCisgICBz dXBwb3J0cyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKFJUUy9DVFMpLiBOb3cgc3VwcG9zZSB5b3Ug Z2l2ZSB0aGUKKyAgIGZvbGxvd2luZyBjb21tYW5kczoKKworICBzZXQgbGluZSAvZGV2L3R0eVMy ICAgIDsgQXV0b21hdGljYWxseSBzZXRzIGZsb3cgdG8gTk9ORQorICBzZXQgbW9kZW0gdHlwZSB1 c3IgICAgIDsgQXV0b21hdGljYWxseSBzZXRzIGZsb3cgdG8gUlRTL0NUUworICBzZXQgbW9kZW0g dHlwZSByb2xtICAgIDsgRG9lc24ndCBzdXBwb3J0IFJUUy9DVFMgc28gbm93IGZsb3cgaXMgWE9O L1hPRkYKKworICAgSU1QT1JUQU5UOiBUaGlzIG5ldyBmZWF0dXJlIHRlbmRzIHRvIG1ha2UgdGhl IG9yZGVyIG9mIFNFVCBMSU5FL0hPU1QKKyAgIGFuZCBTRVQgRkxPVyBjb21tYW5kcyBtYXR0ZXIs IHdoZXJlIGl0IGRpZG4ndCBiZWZvcmUuIEZvciBleGFtcGxlLCBpbgorICAgVk1TOgorCisgIFNF VCBGTE9XIEtFRVAKKyAgU0VUIExJTkUgVFRBMDoKKworICAgdGhlIFNFVCBMSU5FIHVuZG9lcyB0 aGUgU0VUIEZMT1cgS0VFUCBjb21tYW5kOyB0aGUgc2VxdWVuY2Ugbm93IG11c3QKKyAgIGJlOgor CisgIFNFVCBGTE9XIC9ESVJFQ1QgS0VFUAorICBTRVQgTElORSBUVEEwOgorCisgICBvcjoKKwor ICBTRVQgTElORSBUVEEwOgorICBTRVQgRkxPVyBLRUVQCisKKzIuMTQuIFRyYXBwaW5nIENvbm5l Y3Rpb24gRXN0YWJsaXNobWVudCBhbmQgTG9zcworCisgICBJZiB5b3UgZGVmaW5lIGEgbWFjcm8g Y2FsbGVkIE9OX09QRU4sIGl0IGlzIGV4ZWN1dGVkIGFueSB0aW1lIHRoYXQgYQorICAgU0VUIExJ TkUsIFNFVCBQT1JULCBTRVQgSE9TVCwgVEVMTkVULCBSTE9HSU4gb3Igc2ltaWxhciBjb21tYW5k CisgICBzdWNjZWVkcyBpbiBvcGVuaW5nIGEgY29ubmVjdGlvbi4gVGhlIGFyZ3VtZW50IGlzIHRo ZSBob3N0IG9yIGRldmljZQorICAgbmFtZSAoYXMgc2hvd24gYnkgU0hPVyBDT01NVU5JQ0FUSU9O UywgYW5kIHRoZSBzYW1lIGFzIFx2KGxpbmUpKS4gVGhpcworICAgbWFjcm8gY2FuIGJlIHVzZWQg Zm9yIGFsbCBzb3J0cyBvZiB0aGluZ3MsIGxpa2UgYXV0b21hdGljYWxseSBzZXR0aW5nCisgICBj b25uZWN0aW9uLSBvciBob3N0LXNwZWNpZmljIHBhcmFtZXRlcnMgd2hlbiB0aGUgY29ubmVjdGlv biBpcyBvcGVuZWQuCisgICBFeGFtcGxlOgorCisgIGRlZiBPTl9PUEVOIHsKKyAgICAgIHN3aXRj aCBcJTEgeworICAgICAgICA6YWJjY29ycC5jb20sIHNldCByZWxpYWJsZSBvZmYsIGJyZWFrCisg ICAgICAgIDp4eXpjb3JwLmNvbSwgc2V0IHJlY2VpdmUgcGFja2V0LWxlbmd0aCAxMDAwLCBicmVh aworICAgICAgICBldGMgZXRjLi4uCisgICAgICB9CisgIH0KKworICAgSWYgeW91IGRlZmluZSBh IG1hY3JvIGNhbGxlZCBPTl9DTE9TRSwgaXQgd2lsbCBiZSBleGVjdXRlZCBhbnkgdGltZQorICAg dGhhdCBhIFNFVCBMSU5FLCBTRVQgUE9SVCwgU0VUIEhPU1QsIFRFTE5FVCwgUkxPR0lOIG9yIGFu eSBvdGhlciBraW5kCisgICBvZiBjb25uZWN0aW9uIHRoYXQgQy1LZXJtaXQgaGFzIG1hZGUgaXMg Y2xvc2VkLCBlaXRoZXIgYnkgdGhlIHJlbW90ZSBvcgorICAgYnkgYSBsb2NhbCBDTE9TRSwgSEFO R1VQLCBvciBFWElUIGNvbW1hbmQgb3Igb3RoZXIgbG9jYWwgYWN0aW9uLCBzdWNoCisgICBhcyB3 aGVuIGEgbmV3IGNvbm5lY3Rpb24gaXMgb3BlbmVkIGJlZm9yZSBhbiBvbGQgb25lIHdhcyBleHBs aWNpdGx5CisgICBjbG9zZWQuCisKKyAgIEFzIHNvb24gYXMgQy1LZXJtaXQgbm90aWNlcyB0aGUg Y29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQsIHRoZQorICAgT05fQ0xPU0UgbWFjcm8gaXMgaW52 b2tlZCBhdCAoYSkgdGhlIHRvcCBvZiB0aGUgY29tbWFuZCBwYXJzaW5nIGxvb3AsCisgICBvciAo Yikgd2hlbiBhIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGltcGxpY2l0bHkgYnkgYSBjb21tYW5kIHN1 Y2ggYXMgU0VUCisgICBMSU5FIHRoYXQgY2xvc2VzIGFueSBvcGVuIGNvbm5lY3Rpb24gcHJpb3Ig dG8gbWFraW5nIGEgbmV3IGNvbm5lY3Rpb24sCisgICBvciAoYykgd2hlbiBDLUtlcm1pdCBjbG9z ZXMgYW4gb3BlbiBjb25uZWN0aW9uIGluIHRoZSBhY3Qgb2YgZXhpdGluZy4KKworICAgVGhlIE9O X0NMT1NFIG1hY3JvIHdhcyBpbnNwaXJlZCBieSB0aGUgbmV2ZXJlbmRpbmcgcXVlc3QgdG8gdW5p dGUKKyAgIEtlcm1pdCBhbmQgU1NILiBJbiB0aGlzIGNhc2UgdXNpbmcgdGhlICJ0dW5uZWwiIG1l Y2hhbmlzbToKKworICBkZWYgVFVOTkVMIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgXCUxID0gaG9zdCB0byB0dW5uZWwgdG8KKyAgICAgIGxvY2FsIFwlcAorICAgICAgaWYgbm90 IGRlZiBcJTEgc3RvcCAxCisgICAgICBhc3NpZ24gdHVubmVsaG9zdCBcJTEgICAgICAgICAgICAg ICAgICAgOyBNYWtlIGdsb2JhbCBjb3B5CisgICAgICB1bmRlZiBvbl9jbG9zZQorICAgICAgc2V0 IG1hY3JvIGVycm9yIG9mZgorICAgICAgY2xvc2UgY29ubmVjdGlvbiAgICAgICAgICAgICAgICAg ICAgICAgIDsgSWdub3JlIGFueSBlcnJvcgorICAgICAgb3BlbiAhcmVhZCB0dW5uZWwgc3RhcnQg XCUxCisgICAgICByZWFkIFwlcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBHZXQg cG9ydCBudW1iZXIKKyAgICAgIGlmIGZhaWwgc3RvcCAxIFR1bm5lbCBmYWlsdXJlOiBcJTEKKyAg ICAgIGNsb3NlIHJlYWQKKyAgICAgIGlmIGZhaWwgc3RvcCAxIFR1bm5lbCBmYWlsdXJlOiBcJTEg ICAgICA7IFNlZSBbNDMyXVNlY3Rpb24gNC4yLjguMQorICAgICAgYXNzaWduIG9uX2Nsb3NlIHsg ICAgICAgICAgICAgICAgICAgICAgIDsgU2V0IHVwIGNsb3NlIGhhbmRsZXIKKyAgICAgICAgICBl Y2hvIENsb3NpbmcgdHVubmVsOiBcbSh0dW5uZWxob3N0KQorICAgICAgICAgICF0dW5uZWwgc3Rv cCBcbSh0dW5uZWxob3N0KQorICAgICAgICAgIHVuZGVmIG9uX2Nsb3NlCisgICAgICB9CisgICAg ICBzZXQgaG9zdCBsb2NhbGhvc3Q6XCVwIC90ZWxuZXQKKyAgICAgIGlmIHN1Y2Nlc3MgZW5kIDAK KyAgICAgIHVuZGVmIG9uX2Nsb3NlCisgICAgICBzdG9wIDEgQ29ubmVjdGlvbiBmYWlsdXJlOiBc JTEKKyAgfQorCisgICBJbiB0aGlzIGNhc2UsIHdoZW4gdGhlIGNvbm5lY3Rpb24gc3RvcHMsIHdl IGFsc28gbmVlZCB0byBzaHV0IGRvd24gdGhlCisgICB0dW5uZWwsIGV2ZW4gaWYgaXQgaXMgYXQg YSBsYXRlciB0aW1lIGFmdGVyIFRVTk5FTCBoYXMgZmluaXNoZWQKKyAgIGV4ZWN1dGluZy4gVGhp cyB3YXkgd2UgY2FuIGVzY2FwZSBiYWNrLCByZWNvbm5lY3QsIHRyYW5zZmVyIGZpbGVzLCBhbmQK KyAgIHNvIG9uIHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIGJyb2tlbiBieSBsb2dnaW5nIG91dCBm cm9tIHRoZSByZW1vdGUsIG9yCisgICBieSBleHBsaWNpdGx5IGNsb3NpbmcgaXQsIG9yIGJ5IEVY SVRpbmcgZnJvbSBDLUtlcm1pdCwgYXQgd2hpY2ggdGltZQorICAgdGhlIHR1bm5lbCBpcyBzaHV0 IGRvd24uCisKKyAgIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCBubyBtYXR0ZXIgaG93 LCB0aGUgT05fQ0xPU0UgbWFjcm8KKyAgIGV4ZWN1dGVzIGFuZCB0aGVuIHVuZGVmaW5lcyAoZGVz dHJveXMpIGl0c2VsZiwgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0bworICAgYmUgY2xvc2luZyB0dW5u ZWxzIGluIHRoZSBmdXR1cmUgd2hlbiB3ZSBjbG9zZSBzdWJzZXF1ZW50IGNvbm5lY3Rpb25zLgor CisgICBPdGhlciBzdWNoIHRyaWNrcyBjYW4gYmUgaW1hZ2luZWQsIGluY2x1ZGluZyBlbmRpbmcg T05fQ0xPU0Ugd2l0aCBhCisgICBTVE9QIGNvbW1hbmQgdG8gZm9yY2UgdGhlIGNvbW1hbmQgc3Rh Y2sgdG8gYmUgcGVlbGVkIGFsbCB0aGUgd2F5IGJhY2sKKyAgIHRvIHRoZSB0b3AsIGZvciBleGFt cGxlIGluIGEgZGVlcGx5IG5lc3RlZCBzY3JpcHQgdGhhdCBkZXBlbmRzIG9uIHRoZQorICAgY29u bmVjdGlvbiBiZWluZyBvcGVuOgorCisgIGRlZiBvbl9jbG9zZSB7IHN0b3AgMSBDT05ORUNUSU9O IExPU1QgfQorCisgICBXaGVuIEMtS2VybWl0IGludm9rZXMgdGhlIE9OX0NMT1NFIG1hY3JvLCBp dCBzdXBwbGllcyBvbmUgYXJndW1lbnQKKyAgIChcJTEpOiB0aGUgcmVhc29uIHRoZSBjb25uZWN0 aW9uIHdhcyBjbG9zZWQgYXMgYSBudW1iZXIsIG9uZSBvZiB0aGUKKyAgIGZvbGxvd2luZzoKKwor ICAyIC0gRmF0YWwgZmFpbHVyZSB0byBuZWdvdGlhdGUgYSByZXF1aXJlZCBpdGVtIG9uIGEgbmV0 d29yayBjb25uZWN0aW9uLgorICAxIC0gQ2xvc2VkIGJ5IEMtS2VybWl0IGNvbW1hbmQuCisgIDAg LSBBbGwgb3RoZXJzIChub3JtYWxseSBjbG9zZWQgYnkgcmVtb3RlKS4KKworICAgd2hpY2ggbWF5 IGJlIHVzZWQgZm9yIGFueSBwdXJwb3NlOyBmb3IgZXhhbXBsZSwgdG8gYWRkIGEgY29tbWVudCB0 byB0aGUKKyAgIGNvbm5lY3Rpb24gbG9nOgorCisgIGRlZiBvbl9jbG9zZSB7CisgICAgICBsb2Nh bCBcJW0KKyAgICAgIGlmIG5vdCBvcGVuIGN4IGVuZCAwCisgICAgICBzd2l0Y2ggXCUxIHsKKyAg ICAgICAgOjAsIC5cJW0gPSBDbG9zZWQgYnkgcmVtb3RlLCBicmVhaworICAgICAgICA6MSwgLlwl bSA9IENsb3NlZCBieSBtZSwgYnJlYWsKKyAgICAgICAgOjIsIC5cJW0gPSBOZXR3b3JrIHByb3Rv Y29sIG5lZ290aWF0aW9uIGZhaWx1cmUsIGJyZWFrCisgICAgICB9CisgICAgICBpZiBkZWYgXCVt IHdyaXRlbG4gY3ggeyMgXCVtfQorICB9CisKKzIuMTUuIENvbnRhY3RpbmcgV2ViIFNlcnZlcnMg d2l0aCB0aGUgSFRUUCBDb21tYW5kCisKKyAgIEMtS2VybWl0IDcuMCAoYXQgdGhpcyB3cml0aW5n LCB0aGUgVU5JWCB2ZXJzaW9uIG9ubHkpIHN1cHBvcnRzIGRpcmVjdAorICAgY29udGFjdCBhbmQg aW50ZXJhY3Rpb24gd2l0aCBXZWIgc2VydmVycyB2aWEgSFRUUCAxLjAgcHJvdG9jb2wuIFRvIG1h a2UKKyAgIGEgY29ubmVjdGlvbiwgdXNlIEtlcm1pdCdzIG5vcm1hbCBtZXRob2QgZm9yIG1ha2lu ZyBhIFRDUC9JUAorICAgY29ubmVjdGlvbiwgYnV0IHNwZWNpZnkgdGhlIEhUVFAgcG9ydDoKKwor ICBTRVQgSE9TVCBob3N0IGh0dHAgWyBzd2l0Y2hlcyBdCisKKyAgIHdoZXJlIGhvc3QgaXMgdGhl IElQIGhvc3RuYW1lIG9yIGFkZHJlc3MsIGFuZCBodHRwIGlzIHRoZSBuYW1lIG9mIHRoZQorICAg VENQIHBvcnQgZm9yIHRoZSBXZWIgc2VydmVyLiBSZWxldmFudCBzd2l0Y2hlcyBpbmNsdWRlOgor CisgICAvUkFXCisgICAgICAgICAgVHJlYXQgdGhlIGNvbm5lY3Rpb24gYXMgYSB0cmFuc3BhcmVu dCBiaW5hcnkgcGlwZS4gVGhpcyBzd2l0Y2gKKyAgICAgICAgICBtYXkgYmUgcmVxdWlyZWQgaWYg YSBwb3J0IG90aGVyIHRoYW4gJ2h0dHAnIGlzIHVzZWQuCisKKyAgIC9TU0wKKyAgICAgICAgICBN YWtlIGFuIHNlY3VyZSBwcml2YXRlIGNvbm5lY3Rpb24gd2l0aCBTU0wgKG9ubHkgaWYgU1NMIHN1 cHBvcnQKKyAgICAgICAgICBpcyBpbmNsdWRlZCBpbiB5b3VyIHZlcnNpb24gb2YgS2VybWl0KS4g SW4gdGhpcyBjYXNlIHRoZSBwb3J0CisgICAgICAgICAgbmFtZSBtaWdodCBuZWVkIHRvIGJlIGh0 dHBzIHJhdGhlciB0aGFuIGh0dHAsIGUuZy4gInNldCBob3N0CisgICAgICAgICAgc2VjdXJlc2Vy dmVyLnh5emNvcnAuY29tIGh0dHBzIC9zc2wiLgorCisgICAvVExTCisgICAgICAgICAgTWFrZSBh biBzZWN1cmUgcHJpdmF0ZSBjb25uZWN0aW9uIHdpdGggVExTIChvbmx5IGlmIFRMUyBzdXBwb3J0 CisgICAgICAgICAgaXMgaW5jbHVkZWQgaW4geW91ciB2ZXJzaW9uIG9mIEtlcm1pdCkuIEluIHRo aXMgY2FzZSB0aGUgcG9ydAorICAgICAgICAgIG5hbWUgd291bGQgYmUgaHR0cHMgcmF0aGVyIHRo YW4gaHR0cC4KKworICAgVGhlbiB5b3UgY2FuIGlzc3VlIGFuIEhUVFAgY29tbWFuZC4gSW4gbW9z dCBjYXNlcywgdGhlIHNlcnZlciBjbG9zZXMKKyAgIHRoZSBjb25uZWN0aW9uIHdoZW4gdGhlIGNv bW1hbmQgaXMgY29tcGxldGUuIEV4YW1wbGU6CisKKyAgU0VUIEhPU1Qgd3d3LmNvbHVtYmlhLmVk dSBodHRwCisgIElGIEZBSUwgRVhJVCAxIENhbid0IGNvbnRhY3Qgc2VydmVyCisgIEhUVFAgR0VU IGtlcm1pdC9pbmRleC5odG1sCisKKyAgIEF0IHRoaXMgcG9pbnQgdGhlIGNvbm5lY3Rpb24gaXMg Y2xvc2VkLCBzaW5jZSB0aGF0J3MgaG93IEhUVFAgMS4wCisgICB3b3Jrcy4gSWYgeW91IHdhbnQg dG8gcGVyZm9ybSBhZGRpdGlvbmFsIG9wZXJhdGlvbnMsIHlvdSBtdXN0IGVzdGFibGlzaAorICAg YSBuZXcgY29ubmVjdGlvbiB3aXRoIGFub3RoZXIgU0VUIEhPU1QgY29tbWFuZC4KKworICAgVGhl IEhUVFAgY29tbWFuZCBhY3RzIGFzIGEgY2xpZW50IHRvIHRoZSBXZWIgc2VydmVyLCBleGNlcHQg aW5zdGVhZCBvZgorICAgZGlzcGxheWluZyB0aGUgcmVzdWx0cyBsaWtlIGEgV2ViIGJyb3dzZXIg d291bGQsIGl0IHN0b3JlcyB0aGVtLiBBbnkKKyAgIEhUVFAgY29tbWFuZCBjYW4gKGJ1dCBuZWVk IG5vdCkgaW5jbHVkZSBhbnkgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcKKyAgIHN3aXRjaGVzOgor CisgICAvQUdFTlQ6dXNlci1hZ2VudAorICAgICAgICAgIElkZW50aWZpZXMgdGhlIGNsaWVudCB0 byB0aGUgc2VydmVyOyAiQy1LZXJtaXQiIG9yICJLZXJtaXQtOTUiCisgICAgICAgICAgYnkgZGVm YXVsdC4KKworICAgL0hFQURFUjpoZWFkZXItbGluZQorICAgICAgICAgIFVzZWQgZm9yIHNwZWNp ZnlpbmcgYW55IG9wdGlvbmFsIGhlYWRlcnMuIEEgbGlzdCBvZiBoZWFkZXJzIGlzCisgICAgICAg ICAgcHJvdmlkZWQgdXNpbmcgYnJhY2VzIGZvciBncm91cGluZzoKKworICAvSEVBREVSOnt7dGFn OnZhbHVlfXt0YWc6dmFsdWV9Li4ufQorCisgICAgICAgICAgRm9yIGEgbGlzdGluZyBvZiB2YWxp ZCB0YWcgdmFsdWUgYW5kIHZhbHVlIGZvcm1hdHMgc2VlIFs0MzNdUkZDCisgICAgICAgICAgMTk0 NTogSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIC0tIEhUVFAvMS4wLiBBIG1heGltdW0gb2YK KyAgICAgICAgICBlaWdodCBoZWFkZXJzIG1heSBiZSBzcGVjaWZpZWQuCisKKyAgIC9VU0VSOm5h bWUKKyAgICAgICAgICBJbiBjYXNlIGEgcGFnZSByZXF1aXJlcyBhIHVzZXJuYW1lIGZvciBhY2Nl c3MuCisKKyAgIC9QQVNTV09SRDpwYXNzd29yZAorICAgICAgICAgIEluIGNhc2UgYSBwYWdlIHJl cXVpcmVzIGEgcGFzc3dvcmQgZm9yIGFjY2Vzcy4KKworICAgL0FSUkFZOmFycmF5bmFtZQorICAg ICAgICAgIFRlbGxzIEtlcm1pdCB0byBzdG9yZSB0aGUgcmVzcG9uc2UgaGVhZGVycyBpbiB0aGUg Z2l2ZW4gYXJyYXksCisgICAgICAgICAgb25lIGxpbmUgcGVyIGVsZW1lbnQuIFRoZSBhcnJheSBu ZWVkIG5vdCBiZSBkZWNsYXJlZCBpbiBhZHZhbmNlLgorICAgICAgICAgIEV4YW1wbGU6CisKKyAg Qy1LZXJtaXQ/IGh0dHAgL2FycmF5OmMgZ2V0IGtlcm1pdC9pbmRleC5odG1sCisgIEMtS2VybWl0 PyBzaG93IGFycmF5IGMKKyAgRGltZW5zaW9uID0gOQorICAxLiBEYXRlOiBGcmksIDI2IE5vdiAx OTk5IDIzOjEyOjIyIEdNVAorICAyLiBTZXJ2ZXI6IEFwYWNoZS8xLjMuNCAoVW5peCkKKyAgMy4g TGFzdC1Nb2RpZmllZDogTW9uLCAwNiBTZXAgMTk5OSAyMjozNTo1OCBHTVQKKyAgNC4gRVRhZzog ImJjMDQ5LWY3Mi0zN2Q0NDFjZSIKKyAgNS4gQWNjZXB0LVJhbmdlczogYnl0ZXMKKyAgNi4gQ29u dGVudC1MZW5ndGg6IDM5NTQKKyAgNy4gQ29ubmVjdGlvbjogY2xvc2UKKyAgOC4gQ29udGVudC1U eXBlOiB0ZXh0L2h0bWwKKworICAgQXMgeW91IGNhbiBzZWUsIHRoZSBoZWFkZXIgbGluZXMgYXJl IGxpa2UgTUlNRSBlLW1haWwgaGVhZGVyIGxpbmVzOgorICAgaWRlbnRpZmllciwgY29sb24sIHZh bHVlLiBUaGUgL0FSUkFZIHN3aXRjaCBpcyB0aGUgb25seSBtZXRob2QKKyAgIGF2YWlsYWJsZSB0 byBhIHNjcmlwdCB0byBwcm9jZXNzIHRoZSBzZXJ2ZXIgcmVzcG9uc2VzIGZvciBhIFBPU1Qgb3Ig UFVUCisgICBjb21tYW5kLgorCisgICBUaGUgSFRUUCBjb21tYW5kcyBhcmU6CisKKyAgIEhUVFAg WyBzd2l0Y2hlcyBdIEdFVCByZW1vdGUtZmlsZW5hbWUgWyBsb2NhbC1maWxlbmFtZSBdCisgICAg ICAgICAgUmV0cmlldmVzIHRoZSBuYW1lZCBmaWxlLiBJZiBhIGxvY2FsLWZpbGVuYW1lIGlzIGdp dmVuLCB0aGUgZmlsZQorICAgICAgICAgIGlzIHN0b3JlZCBsb2NhbGx5IHVuZGVyIHRoYXQgbmFt ZTsgb3RoZXJ3aXNlIGl0IGlzIHN0b3JlZCB3aXRoCisgICAgICAgICAgaXRzIG93biBuYW1lLgor CisgICBIVFRQIFsgc3dpdGNoZXMgXSBIRUFEIHJlbW90ZS1maWxlbmFtZSBsb2NhbC1maWxlbmFt ZQorICAgICAgICAgIExpa2UgR0VUIGV4Y2VwdCB3aXRob3V0IGFjdHVhbGx5IGdldHRpbmcgdGhl IGZpbGU7IGluc3RlYWQgaXQKKyAgICAgICAgICBnZXRzIG9ubHkgdGhlIGhlYWRlcnMsIHN0b3Jp bmcgdGhlbSBpbnRvIHRoZSBnaXZlbiBmaWxlLCB3aG9zZQorICAgICAgICAgIG5hbWUgbXVzdCBi ZSBnaXZlbiwgb25lIGxpbmUgcGVyIGhlYWRlciBpdGVtLCBhcyBzaG93biBhYm92ZSBpbgorICAg ICAgICAgIHRoZSAvQVJSQVk6IHN3aXRjaCBkZXNjcmlwdGlvbi4KKworICAgSFRUUCBbIHN3aXRj aGVzIF0gSU5ERVggcmVtb3RlLWRpcmVjdG9yeSBbIGxvY2FsLWZpbGVuYW1lIF0KKyAgICAgICAg ICBSZXRyaWV2ZXMgdGhlIGZpbGUgbGlzdGluZyBmb3IgdGhlIGdpdmVuIHNlcnZlciBkaXJlY3Rv cnkuIE5PVEU6CisgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgbW9z dCBXZWIgc2VydmVycy4KKworICAgSFRUUCBbIHN3aXRjaGVzIF0gUE9TVCBbIC9NSU1FLVRZUEU6 dHlwZSBdIGxvY2FsLWZpbGUgcmVtb3RlLWZpbGUKKyAgICAgICAgICBVc2VkIHRvIHNlbmQgYSBy ZXNwb25zZSBhcyBpZiBpdCB3ZXJlIHNlbnQgZnJvbSBhIGZvcm0uIFRoZSBkYXRhCisgICAgICAg ICAgdG8gYmUgcG9zdGVkIG11c3QgYmUgcmVhZCBmcm9tIGEgZmlsZS4KKworICAgSFRUUCBbIHN3 aXRjaGVzIF0gUFVUIFsgL01JTUUtVFlQRTp0eXBlIF0gbG9jYWwtZmlsZSByZW1vdGUtZmlsZQor ICAgICAgICAgIFVwbG9hZHMgYSBsb2NhbCBmaWxlIHRvIGEgc2VydmVyIGZpbGUuCisKKyAgIEhU VFAgWyBzd2l0Y2hlcyBdIERFTEVURSByZW1vdGUtZmlsZW5hbWUKKyAgICAgICAgICBJbnN0cnVj dHMgdGhlIHNlcnZlciB0byBkZWxldGUgdGhlIHNwZWNpZmllZCBmaWxlbmFtZS4KKworMy4gVEVS TUlOQUwgQ09OTkVDVElPTgorCiszLjEuIENPTk5FQ1QgQ29tbWFuZCBTd2l0Y2hlcworCisgICBU aGUgZm9sbG93aW5nIHN3aXRjaGVzIChzZWUgWzQzNF1TZWN0aW9uIDEuNSkgd2VyZSBhZGRlZCB0 byB0aGUgQ09OTkVDVAorICAgY29tbWFuZCBpbiA3LjA6CisKKyAgIC9RVUlFVExZCisgICAgICAg ICAgRG9uJ3QgcHJpbnQgdGhlICJDb25uZWN0aW5nIHRvLi4uIiBvciAiQmFjayBhdC4uLiIgbWVz c2FnZXMuIENRCisgICAgICAgICAgaXMgYW4gaW52aXNpYmxlIGNvbW1hbmQgc3lub255bSBmb3Ig Q09OTkVDVCAvUVVJRVRMWS4KKworICAgL1RSSUdHRVI6c3RyaW5nCisgICAgICAgICAgU3BlY2lm eSBhIHRyaWdnZXIgb3IgdHJpZ2dlcnMgKFs0MzVdU2VjdGlvbiAzLjIpIGVmZmVjdGl2ZSBmb3IK KyAgICAgICAgICB0aGlzIENPTk5FQ1QgY29tbWFuZCBvbmx5LCB0ZW1wb3JhcmlseSBvdmVycmlk aW5nIGFueSBjdXJyZW50CisgICAgICAgICAgU0VUIFRFUk1JTkFMIFRSSUdHRVIgdmFsdWVzIChb NDM2XVNlY3Rpb24gMy4yKS4KKworICAgTm90ZTogT3RoZXIgc3dpdGNoZXMgbWlnaHQgYWxzbyBi ZSBhdmFpbGFibGU7IHR5cGUgImNvbm5lY3QgPyIgZm9yIGEKKyAgIGxpc3QsICJoZWxwIGNvbm5l Y3QiIGZvciBhIGRlc2NyaXB0aW9uIG9mIGVhY2guCisKKzMuMi4gVHJpZ2dlcnMKKworICAgVHJp Z2dlcnMgd2VyZSBhZGRlZCBmb3IgVU5JWCwgVk1TLCBBT1MvVlMsIGFuZCBLOTUgaW4gQy1LZXJt aXQgNy4wLgorCisgICBTRVQgVEVSTUlOQUwgVFJJR0dFUiBzdHJpbmcKKyAgICAgICAgICBUZWxs cyBDLUtlcm1pdCB0byBsb29rIGZvciB0aGUgZ2l2ZW4gc3RyaW5nIGR1cmluZyBhbGwKKyAgICAg ICAgICBzdWJzZXF1ZW50IENPTk5FQ1Qgc2Vzc2lvbnMsIGFuZCBpZiBzZWVuLCB0byByZXR1cm4g dG8gY29tbWFuZAorICAgICAgICAgIG1vZGUgYXV0b21hdGljYWxseSwgYXMgaWYgeW91IGhhZCBl c2NhcGVkIGJhY2sgbWFudWFsbHkuIElmIHRoZQorICAgICAgICAgIHN0cmluZyBpbmNsdWRlcyBh bnkgc3BhY2VzLCB5b3UgbXVzdCBlbmNsb3NlIGl0IGluIGJyYWNlcy4KKyAgICAgICAgICBFeGFt cGxlOgorCisgIHNldCB0ZXJtaW5hbCB0cmlnZ2VyIHtOTyBDQVJSSUVSfQorCisgICBDb21wYXJp c29ucyBhcmUgbWFkZSBhZnRlciBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLgorCisgICBJZiBh IHN0cmluZyBpcyB0byBpbmNsdWRlIGEgbGl0ZXJhbCBicmFjZSBjaGFyYWN0ZXIsIHByZWNlZGUg aXQgd2l0aCBhCisgICBiYWNrc2xhc2g6CisKKyAgOyBNeSBtb2RlbSBhbHdheXMgbWFrZXMgdGhp cyBub2lzZSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3Q6CisgIHNldCB0ZXJtaW5hbCB0cmln Z2VyIHx8fHBwcFx7XHtce1x7VVVVVVVVVQorCisgICBJZiB5b3Ugd2FudCBLZXJtaXQgdG8gbG9v ayBmb3IgbW9yZSB0aGFuIG9uZSBzdHJpbmcgc2ltdWx0YW5lb3VzbHksIHVzZQorICAgdGhlIGZv bGxvd2luZyBzeW50YXg6CisKKyAgc2V0IHRlcm1pbmFsIHRyaWdnZXIge3tzdHJpbmcxfXtzdHJp bmcyfS4uLntzdHJpbmdufX0KKworICAgSW4gdGhpcyBjYXNlLCBDLUtlcm1pdCB3aWxsIHJldHVy biB0byBjb21tYW5kIG1vZGUgYXV0b21hdGljYWxseSBpZiBhbnkKKyAgIG9mIHRoZSBnaXZlbiBz dHJpbmdzIGlzIGVuY291bnRlcmVkLiBVcCB0byA4IHN0cmluZ3MgbWF5IGJlIHNwZWNpZmllZC4K KworICAgSWYgdGhlIG1vc3QgcmVjZW50IHJldHVybiB0byBjb21tYW5kIG1vZGUgd2FzIGNhdXNl ZCBieSBhIHRyaWdnZXIsIHRoZQorICAgbmV3IHZhcmlhYmxlLCBcdih0cmlnZ2VyKSwgc2hvd3Mg dGhlIHRyaWdnZXIgdmFsdWU7IG90aGVyd2lzZQorICAgXHYodHJpZ2dlcikgaXMgZW1wdHkuCisK KyAgIFRoZSBTSE9XIFRSSUdHRVIgY29tbWFuZCBkaXNwbGF5cyB0aGUgU0VUIFRFUk1JTkFMIFRS SUdHRVIgdmFsdWVzIGFzCisgICB3ZWxsIGFzIHRoZSBcdih0cmlnZ2VyKSB2YWx1ZS4KKworMy4z LiBUcmFuc3BhcmVudCBQcmludGluZworCisgICBBcyBub3RlZCBpbiB0aGUgbWFudWFsLCBDLUtl cm1pdCdzIENPTk5FQ1QgY29tbWFuZCBvbiBVTklYIGlzIG5vdCBhCisgICB0ZXJtaW5hbCBlbXVs YXRvciwgYnV0IHJhdGhlciBhICJzZW1pdHJhbnNwYXJlbnQgcGlwZSIgYmV0d2VlbiB0aGUKKyAg IHRlcm1pbmFsIG9yIGVtdWxhdG9yIHlvdSBhcmUgdXNpbmcgdG8gYWNjZXNzIEMtS2VybWl0LCBh bmQgdGhlIHJlbW90ZQorICAgaG9zdCB0byB3aGljaCBDLUtlcm1pdCBpcyBjb25uZWN0ZWQuIFRo ZSAic2VtaXRyYW5zcGFyZW50IiBxdWFsaWZpZXIgaXMKKyAgIGJlY2F1c2Ugb2YgY2hhcmFjdGVy LXNldCB0cmFuc2xhdGlvbiBhcyB3ZWxsIGFzIHNldmVyYWwgYWN0aW9ucyB0YWtlbgorICAgYnkg dGhlIGVtdWxhdG9yIGluIHJlc3BvbnNlIHRvIHRoZSBjaGFyYWN0ZXJzIG9yIHN0cmluZ3MgdGhh dCBwYXNzCisgICB0aHJvdWdoIGl0LCBzdWNoIGFzIEFQQ3MsIEtlcm1pdCBwYWNrZXRzIChhdXRv ZG93bmxvYWQpLCB0cmlnZ2VycywgZXRjLgorCisgICBUaGUgVU5JWCB2ZXJzaW9uIG9mIEMtS2Vy bWl0IDcuMCBhZGRzIGFub3RoZXIgc3VjaCBhY3Rpb246IFRyYW5zcGFyZW50CisgICBwcmludGlu ZywgYWxzbyBjYWxsZWQgQ29udHJvbGxlciBwcmludGluZyAoYXMgZGlzdGluY3QgZnJvbSBBdXRv cHJpbnQKKyAgIG9yIGxpbmUgb3Igc2NyZWVuIHByaW50KS4gSXQgaXMgaW50ZW5kZWQgbWFpbmx5 IGZvciB1c2Ugb24gVU5JWAorICAgd29ya3N0YXRpb24gY29uc29sZXMgKGFzIG9wcG9zZWQgdG8g cmVtb3RlIGxvZ2lucyksIGJ1dCB3aXRoIHNvbWUgY2FyZQorICAgY2FuIGFsc28gYmUgdXNlZCB3 aGVuIGFjY2Vzc2luZyBDLUtlcm1pdCByZW1vdGVseS4KKworICAgVHJhbnNwYXJlbnQgcHJpbnRp bmcgaXMgcmVsYXRlZCB0byBBUEMgYnkgc2hhcmluZyBDLUtlcm1pdCdzIGJ1aWx0LWluCisgICBB TlNJIGVzY2FwZS1zZXF1ZW5jZSBwYXJzZXIgdG8gZGV0ZWN0ICJwcmludGVyIG9uIiBhbmQgInBy aW50ZXIgb2ZmIgorICAgc2VxdWVuY2VzIGZyb20gdGhlIGhvc3QuIFdoZW4gdGhlIHByaW50ZXIt b24gc2VxdWVuY2UgaXMgcmVjZWl2ZWQsIGFsbAorICAgc3Vic2VxdWVudCBhcnJpdmluZyBjaGFy YWN0ZXJzIC0tIGluY2x1ZGluZyBOVUwsIGNvbnRyb2wgY2hhcmFjdGVycywKKyAgIGFuZCBlc2Nh cGUgc2VxdWVuY2VzIC0tIGFyZSBzZW50IHRvIHRoZSBTRVQgUFJJTlRFUiBkZXZpY2UgaW5zdGVh ZCBvZgorICAgdG8geW91ciBzY3JlZW4gdW50aWwgdGhlIHByaW50ZXItb2ZmIHNlcXVlbmNlIGlz IHJlY2VpdmVkLCBvciB5b3UKKyAgIGVzY2FwZSBiYWNrLCB3aGljaGV2ZXIgaGFwcGVucyBmaXJz dC4gVGhlc2UgYnl0ZXMgYXJlIG5vdCB0cmFuc2xhdGVkIG9yCisgICBtb2RpZmllZCBvciBmaWx0 ZXJlZCBpbiBhbnkgd2F5IGJ5IEtlcm1pdCAoZXhjZXB0IGZvciBwb3NzaWJseQorICAgc3RyaXBw aW5nIG9mIHRoZSA4dGggYml0LCBhcyBub3RlZCBiZWxvdyksIGJ1dCBpZiBmaWx0ZXJpbmcgb3IK KyAgIHRyYW5zbGF0aW9uIGlzIGRlc2lyZWQsIHRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSB5 b3VyIFNFVCBQUklOVEVSCisgICBzZWxlY3Rpb24gKGUuZy4gYnkgY2hvb3NpbmcgYSBwaXBlbGlu ZSBvZiBmaWx0ZXJzKS4KKworICAgQnkgZGVmYXVsdCwgeW91ciBTRVQgUFJJTlRFUiBkZXZpY2Ug aXMgeW91ciBkZWZhdWx0IFVOSVggcHJpbnRlciwgYnV0CisgICBpdCBjYW4gYWxzbyBiZSBhIGZp bGUsIGEgY29tbWFuZCwgb3IgdGhlIG51bGwgZGV2aWNlICh3aGljaCBjYXVzZXMgYWxsCisgICBw cmludGVyIG1hdGVyaWFsIHRvIGJlIGRpc2NhcmRlZCkuIFNlZSBbNDM3XVVzaW5nIEMtS2VybWl0 LCAybmQgRWQuLAorICAgcC40MSBmb3IgZGV0YWlscy4KKworICAgVHJhbnNwYXJlbnQgcHJpbnRp bmcgaXMgY29udHJvbGxlZCBieSB0aGUgY29tbWFuZDoKKworICAgU0VUIFRFUk1JTkFMIFBSSU5U IHsgT04sIE9GRiB9CisgICAgICAgICAgV2hlbiBPTiwgdHJhbnNwYXJlbnQtcHJpbnQgc2VxdWVu Y2VzIGFyZSBvYmV5ZWQsIGFuZCBwcmludGluZworICAgICAgICAgIG9jY3VycyBvbiB0aGUgc3lz dGVtIHdoZXJlIEMtS2VybWl0IGlzIHJ1bm5pbmcuIFdoZW4gT0ZGLAorICAgICAgICAgIHRyYW5z cGFyZW50IHByaW50IHNlcXVlbmNlcyBhcmUgaWdub3JlZCBhbmQgcGFzc2VkIHRocm91Z2ggdG8K KyAgICAgICAgICB5b3VyIGFjdHVhbCB0ZXJtaW5hbCBvciBlbXVsYXRvciwgYWxvbmcgd2l0aCB0 aGUgZGF0YSB0aGV5CisgICAgICAgICAgZW5jbG9zZS4gT0ZGIGlzIHRoZSBkZWZhdWx0LCBmb3Ig Y29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIKKyAgICAgICAgICBDLUtlcm1pdCByZWxlYXNlcy4g QXMgbm90ZWQgaW4gdGhlIG1hbnVhbCwgd2hlbiB0aGUgY3VycmVudCBTRVQKKyAgICAgICAgICBQ UklOVEVSIGRldmljZSBpcyBhIGZpbGUsIHRyYW5zcGFyZW50LXByaW50IG1hdGVyaWFsIGlzIGFw cGVuZGVkCisgICAgICAgICAgdG8gaXQ7IHRoZSBmaWxlIGlzIG5vdCBvdmVyd3JpdHRlbi4KKwor ICAgU0VUIFRFUk1JTkFMIEJZVEVTSVpFIHsgNywgOCB9CisgICBTRVQgUEFSSVRZIHsgRVZFTiwg T0RELCBNQVJLLCBTUEFDRSwgTk9ORSB9CisgICAgICAgICAgSWYgdGhlIHRlcm1pbmFsIGJ5dGVz aXplIGlzIDcsIG9yIFBBUklUWSBpcyBub3QgTk9ORSwgdGhlIDh0aAorICAgICAgICAgIGJpdCBv ZiBlYWNoIGJ5dGUgaXMgc3RyaXBwZWQgcHJpb3IgdG8gcHJpbnRpbmcuCisKKyAgIFRoZSB0cmFu c3BhcmVudC1wcmludCBlc2NhcGUgc2VxdWVuY2VzIGFyZToKKworICAgPEVTQz5bNWkKKyAgICAg ICAgICBQcmludGVyIE9uLiBTZW5kIGFsbCBzdWJzZXF1ZW50IGluY29taW5nIGJ5dGVzIHRvIHRo ZSBwcmludGVyCisgICAgICAgICAgd2l0aG91dCBhbnkga2luZCBvZiBmaWx0ZXJpbmcsIHRyYW5z bGF0aW9uLCBvciBhbHRlcmF0aW9uLiBOb3RlOgorICAgICAgICAgIDxFU0M+IHN0YW5kcyBmb3Ig QVNDSUkgY2hhcmFjdGVyIG51bWJlciAyNyAoZGVjaW1hbCksIEVzY2FwZS4KKworICAgPEVTQz5b NGkKKyAgICAgICAgICBQcmludGVyIE9mZi4gUmVzdW1lIGRpc3BsYXlpbmcgaW5jb21pbmcgYnl0 ZXMgb24gdGhlIHNjcmVlbi4KKworICAgVGhlc2UgYXJlIHRoZSBzYW1lIHNlcXVlbmNlcyB1c2Vk IGJ5IERFQyBWVDEwMCBhbmQgaGlnaGVyIHRlcm1pbmFscyBhbmQKKyAgIG90aGVyIEFOU0kgWDMu NjQgYW5kIElTTyA2NDI5IGNvbXBhdGlibGUgdGVybWluYWxzLiBUaGVyZSBpcyBubworICAgcHJv dmlzaW9uIGZvciBzZWxlY3Rpbmcgb3RoZXIgcHJpbnRlci1jb250cm9sIHNlcXVlbmNlcy4KKwor ICAgUmVzdHJpY3Rpb25zOgorCisgICAgMS4gWW91IG11c3QgU0VUIFRFUk0gVFJBTlNQQVJFTlQt UFJJTlQgT04gYmVmb3JlIHlvdSBjYW4gdXNlIHRoaXMKKyAgICAgICBmZWF0dXJlLgorICAgIDIu IE9ubHkgdGhlIDctYml0IGZvcm1zIG9mIHRoZSBlc2NhcGUgc2VxdWVuY2VzIGFyZSBzdXBwb3J0 ZWQuIFRoZQorICAgICAgIDgtYml0IENTSSBDMSBjb250cm9sIGlzIG5vdCByZWNvZ25pemVkLgor ICAgIDMuIEF1dG9wcmludCBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSB0aGlzIHJlcXVpcmVzIGEg ZnVsbC1mbGVkZ2VkCisgICAgICAgdGVybWluYWwgZW11bGF0b3Igd2l0aCBkaXJlY3QgYWNjZXNz IHRvIHRoZSBzY3JlZW4uCisgICAgNC4gVGhlIHN0YXJ0LXByaW50IGFuZCBzdG9wLXByaW50IHNl cXVlbmNlcyBwYXNzIHRocm91Z2ggdG8gdGhlIHNjcmVlbgorICAgICAgICh0aGVyZSBpcyBubyB3 YXkgdG8gYXZvaWQgdGhpcyB3aXRob3V0IGNhdXNpbmcgdW5hY2NlcHRhYmxlIGRlbGF5cworICAg ICAgIG9yIGRlYWRsb2NrcyBpbiBDT05ORUNUIG1vZGUpLiBUaHVzIGlmIHlvdXIgdGVybWluYWwg b3IgZW11bGF0b3IKKyAgICAgICBhbHNvIHN1cHBvcnRzIHRyYW5zcGFyZW50IHByaW50aW5nIHZp YSB0aGVzZSBzYW1lIHNlcXVlbmNlcywgYW4KKyAgICAgICBlbXB0eSBmaWxlIHdpbGwgYmUgc2Vu dCB0byBpdHMgcHJpbnRlci4gTm9ybWFsbHkgdGhpcyBoYXMgbm8KKyAgICAgICBlZmZlY3QuCisK KyAgIFBvaW50ICg0KSBpcyBzaW1pbGFyIHRvIHRoZSBzaXR1YXRpb24gd2l0aCBhdXRvZG93bmxv YWQgYW5kIEFQQyAtLSB3aGVuCisgICB5b3UgaGF2ZSBzZXZlcmFsIEtlcm1pdCBjbGllbnRzIGlu IGEgY2hhaW4sIHlvdSBzaG91bGQgdGFrZSBjYXJlIHRoYXQKKyAgIHRoZXNlIGZlYXR1cmVzIGFy ZSBlbmFibGVkIGluIG9ubHkgb25lIG9mIHRoZW0uCisKKyAgIEV4YW1wbGUgMToKKworICBzZXQg cHJpbnRlciB7fGxwciAtUGxhc2VyfSAgOyBTcGVjaWZ5IHRoZSBwcmludGVyIChpZiBub3QgZGVm YXVsdCkuCisgIHNldCB0ZXJtIHByaW50IG9uICAgICAgICAgICA7IEVuYWJsZSB0cmFuc3BhcmVu dCBwcmludGluZy4KKyAgc2V0IHRlcm0gYnl0ZSA4ICAgICAgICAgICAgIDsgRW5hYmxlIDgtYml0 IGNoYXJhY3RlcnMuCisgIGNvbm5lY3QgICAgICAgICAgICAgICAgICAgICA7IEVudGVyIENPTk5F Q1QgbW9kZS4KKworICAgRXhhbXBsZSAyOgorCisgIHNldCBwcmludGVyIC9ob21lL3VzZXJzL29s Z2EvcHJpbnRlci5sb2cgIDsgU2VuZCBwcmludGVyIG1hdGVyaWFsIHRvIGEgZmlsZS4KKworICAg RXhhbXBsZSAzOgorCisgIHNldCBwcmludGVyIHt8IGdyZXAgLXYgXlJlY2VpdmVkIHwgbHByfSAg IDsgRmlsdGVyIG91dCBzb21lIGxpbmVzCisKKyAgIFRoZW4gdXNlICJwY3ByaW50IiBvciAidnRw cmludCIgY29tbWFuZHMgb24gdGhlIGhvc3QgdG8gaW5pdGlhdGUKKyAgIHRyYW5zcGFyZW50IHBy aW50IG9wZXJhdGlvbnMuIFNlZSBbNDM4XVVzaW5nIEMtS2VybWl0LCAybmQgRWQuLCBwLjQwNgor ICAgZm9yIGRldGFpbHMuCisKKyAgIEhlcmUgaXMgYSBzYW1wbGUgInBjcHJpbnQiIHNoZWxsIHNj cmlwdCBmb3IgVU5JWDoKKworICAjIS9iaW4vc2gKKyAgZWNobyAtbiAnPEVTQz5bNWknCisgIGlm IFsgJCMgLWVxIDAgXTsgdGhlbgorICAgIGNhdAorICBlbHNlCisgICAgY2F0ICQqCisgIGZpCisg IGVjaG8gLW4gJzxGRj48RVNDPls0aScKKyAgIyAoZW5kKQorCisgICAoUmVwbGFjZSAiPEVTQz4i IGJ5IHRoZSBhY3R1YWwgQVNDSUkgRXNjYXBlIGNoYXJhY3RlciBhbmQgIjxGRj4iIGJ5IHRoZQor ICAgQVNDSUkgRm9ybWZlZWQgY2hhcmFjdGVyKS4KKworICAgSWYgeW91IGFsd2F5cyB3YW50IHRy YW5zcGFyZW50IHByaW50aW5nIGVuYWJsZWQsIHB1dCAic2V0IHRlcm0gcHJpbnQKKyAgIG9uIiBp biB5b3VyIEMtS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSAofi8ubXlrZXJtcmMgaW4gVU5JWCku IFRoZSAic2V0CisgICB0ZXJtIGJ5dGVzaXplIiBzZWxlY3Rpb24sIGhvd2V2ZXIsIGlzIGEgcHJv cGVydHkgb2YgZWFjaCBzZXBhcmF0ZQorICAgY29ubmVjdGlvbi4KKworMy40LiBCaW5hcnkgYW5k IFRleHQgU2Vzc2lvbiBMb2dzCisKKyAgIEMtS2VybWl0IDcuMCBjb3JyZWN0cyBhbiBvdmVyc2ln aHQgaW4gZWFybGllciByZWxlYXNlcywgaW4gd2hpY2ggYmluYXJ5CisgICBzZXNzaW9uIGxvZ3Mg KFNFVCBTRVNTSU9OLUxPRyBCSU5BUlkpIHRyYW5zbGF0ZWQgY2hhcmFjdGVyIHNldHMgYW5kCisg ICBwZXJmb3JtZWQgdmFyaW91cyBmb3JtYXR0aW5nIHRyYW5zZm9ybWF0aW9ucyAoZS5nLiAibmV3 bGluZSBtb2RlIikKKyAgIGJlZm9yZSB3cml0aW5nIGNoYXJhY3RlcnMgdG8gdGhlIHNlc3Npb24g bG9nLiBJbiBDLUtlcm1pdCA3LjAsCisgICBiaW5hcnktbW9kZSBzZXNzaW9uIGxvZ2dpbmcgd3Jp dGVzIGNoYXJhY3RlcnMgYXMgdGhleSBjb21lIGluLCBiZWZvcmUKKyAgIGFueXRoaW5nIChvdGhl ciB0aGF0IHBhcml0eS1iaXQgc3RyaXBwaW5nKSBpcyBkb25lIHRvIHRoZW0uIFRleHQtbW9kZQor ICAgc2Vzc2lvbiBsb2dnaW5nIHJlY29yZHMgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgcHJvY2Vzc2lu Zy4KKworNC4gRklMRSBUUkFOU0ZFUgorCisgICBFdmVyeSBmaWxlIGlzIHRyYW5zZmVycmVkIGVp dGhlciBpbiB0ZXh0IG1vZGUgKHdoaWNoIGltcGxpZXMKKyAgIHJlY29yZC1mb3JtYXQgYW5kIGNo YXJhY3Rlci1zZXQgdHJhbnNsYXRpb24pIG9yIGJpbmFyeSBtb2RlIChpbiB3aGljaAorICAgZWFj aCBieXRlIGlzIHNlbnQgbGl0ZXJhbGx5IHdpdGhvdXQgYW55IGtpbmQgb2YgY29udmVyc2lvbiku IFRoZSBtb2RlCisgICBpbiB3aGljaCBhIGZpbGUgaXMgdHJhbnNmZXJyZWQgaXMgY29udHJvbGxl ZCBieSAoYSkgdGhlIGRlZmF1bHQgbW9kZSwKKyAgIGluIHRoZSBhYnNlbmNlIG9mIGFueSBvdGhl ciBpbmRpY2F0aW9uczsgKGIpIHRoZSBTRVQgRklMRSBUWVBFIGNvbW1hbmQ7CisgICAoYykgdmFy aW91cyBhdXRvbWF0aWMgbWVjaGFuaXNtcyBiYXNlZCBvbiBjbGllbnQvc2VydmVyIG5lZ290aWF0 aW9ucywKKyAgIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBvciBmaWxlbmFtZSBwYXR0ZXJucywgZXRj LgorCisgICBUaGUgZGVmYXVsdCBGSUxFIFRZUEUgd2FzIGNoYW5nZWQgZnJvbSBURVhUIHRvIEJJ TkFSWSBpbiBDLUtlcm1pdCA3LjAKKyAgIGJlY2F1c2U6CisKKyAgICAgKiBUcmFuc2ZlcnJpbmcg YSB0ZXh0IGZpbGUgaW4gYmluYXJ5IG1vZGUgZG9lcyBsZXNzIGRhbWFnZSB0aGFuCisgICAgICAg dHJhbnNmZXJyaW5nIGEgYmluYXJ5IGZpbGUgaW4gdGV4dCBtb2RlLgorICAgICAqIE9ubHkgYmlu YXJ5LW1vZGUgdHJhbnNmZXJzIGNhbiBiZSByZWNvdmVyZWQgZnJvbSB0aGUgcG9pbnQgb2YKKyAg ICAgICBmYWlsdXJlLgorICAgICAqIFRoZSBhdXRvbWF0aWMgdHJhbnNmZXItbW9kZSBtZWNoYW5p c21zIHN3aXRjaCB0byB0ZXh0IG1vZGUgb24gYQorICAgICAgIHBlci1maWxlIGJhc2lzIGFueXdh eSwgc28gb25seSB0aG9zZSBmaWxlcyB0aGF0IGFyZSBub3QgY292ZXJlZCBieQorICAgICAgIHRo ZSBhdXRvbWF0aWMgbWVjaGFuaXNtcyBhcmUgYWZmZWN0ZWQuCisgICAgICogQWxsIGZpbGUgdHJh bnNmZXJzIG9uIHRoZSBXZWIgYXJlIGRvbmUgaW4gYmluYXJ5IG1vZGUsIHNvIHBlb3BsZQorICAg ICAgIGFyZSBhY2N1c3RvbWVkIHRvIGl0IGFuZCBleHBlY3QgaXQuCisKKzQuMC4gQlVHIEZJWEVT LCBNSU5PUiBDSEFOR0VTLCBBTkQgQ0xBUklGSUNBVElPTlMKKworNC4wLjAuIEZpbGVuYW1lcyB3 aXRoIFNwYWNlcworCisgICBGaWxlbmFtZXMgdGhhdCBjb250YWluIHNwYWNlcyBhcmUgYSBtYWpv ciBudWlzYW5jZSB0byBhIHByb2dyYW0gbGlrZQorICAgS2VybWl0LCB3aG9zZSBjb21tYW5kIGxh bmd1YWdlIGlzIGxpbmUtIGFuZCB3b3JkLW9yaWVudGVkLCBpbiB3aGljaAorICAgd29yZHMgYXJl IHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIGEgZmlsZW5hbWUgaXMgYXNzdW1lZCB0byBiZSBhICJ3 b3JkIi4KKyAgIEluIGdlbmVyYWwgKHVubGVzcyBub3RlZCBvdGhlcndpc2UgaW4gdGhlIGRlc2Ny aXB0aW9uIG9mIGEgcGFydGljdWxhcgorICAgY29tbWFuZCksIHRoZXJlIGlzIG9ubHkgb25lIHdh eSB0byByZWZlciB0byBzdWNoIGZpbGVzIGluIEtlcm1pdAorICAgY29tbWFuZHMsIGFuZCB0aGF0 IGlzIHRvIGVuY2xvc2UgdGhlIG5hbWUgaW4gYnJhY2VzOgorCisgIHNlbmQge3RoaXMgZmlsZX0K KworICAgVGVsbHMgS2VybWl0IHRvIHNlbmQgdGhlIGZpbGUgd2hvc2UgbmFtZSBpcyAidGhpcyBm aWxlIiAodHdvIHdvcmRzLCBubworICAgcXVvdGVzKS4gT2YgY291cnNlLCB2YXJpb3VzIGNpcmN1 bWxvY3V0aW9ucyBhcmUgYWxzbyBwb3NzaWJsZSwgc3VjaCBhczoKKworICBkZWZpbmUgXCVhIHRo aXMgZmlsZQorICBzZW5kIFwlYQorCisgICBCVVQsIHBlcmhhcHMgY29udHJhcnkgdG8gZXhwZWN0 YXRpb24sIHlvdSBjYW4ndCB1c2UgIlwzMiIgdG8gcmVwcmVzZW50CisgICB0aGUgc3BhY2U6CisK KyAgc2VuZCB0aGlzXDMyZmlsZQorCisgICBkb2VzIG5vdCB3b3JrLiBXaHk/IEJlY2F1c2UgdGhl IEtlcm1pdCBwYXJzZXIsIHdoaWNoIG11c3Qgd29yayBvbiBtYW55CisgICBvcGVyYXRpbmcgc3lz dGVtcyBpbmNsdWRpbmcgV2luZG93cywgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoYXQgeW91Cisg ICBtZWFuIGJ5ICJ0aGlzXDMyZmlsZSIuIERvIHlvdSBtZWFuIGEgZmlsZSB3aG9zZSBuYW1lIGlz ICJ0aGlzIGZpbGUiIGluCisgICB0aGUgY3VycmVudCBkaXJlY3Rvcnk/IE9yIGRvIHlvdSBtZWFu IGEgZmlsZSB3aG9zZSBuYW1lIGlzICIzMmZpbGUiIGluCisgICB0aGUgInRoaXMiIHN1YmRpcmVj dG9yeSBvZiB0aGUgY3VycmVudCBkaXJlY3Rvcnk/IEd1ZXNzaW5nIHdvbid0IGRvCisgICBoZXJl OyBLZXJtaXQgbXVzdCBiZWhhdmUgY29uc2lzdGVudGx5IGFuZCBkZXRlcm1pbmlzdGljYWxseSBp biBhbGwKKyAgIGNhc2VzIG9uIGFsbCBwbGF0Zm9ybXMuCisKKyAgIE5vdGUgdGhhdCB5b3UgY2Fu J3QgdXNlIEVzYyBvciBUYWIgd2l0aGluIHsuLi59IGZvciBmaWxlbmFtZQorICAgY29tcGxldGlv biwgb3IgcXVlc3Rpb24gbWFyayB0byBnZXQgYSBmaWxlbmFtZSBsaXN0LiBIb3dldmVyLCB5b3Ug Y2FuCisgICBpbmNsdWRlIHdpbGRjYXJkczsgZm9yIGV4YW1wbGU6CisKKyAgc2VuZCB7KiAqfQor CisgICBzZW5kcyBhbGwgZmlsZXMgd2hvc2UgbmFtZSBjb250YWlucyBhIHNwYWNlLgorCisgICBB bGwgdGhpbmdzIGNvbnNpZGVyZWQsIGl0IGlzIGJlc3QgdG8gYXZvaWQgc3BhY2VzIGluIGZpbGUg YW5kIGRpcmVjdG9yeQorICAgbmFtZXMgaWYgeW91IGNhbi4gQWxzbyBzZWUgWzQzOV1TZWN0aW9u IDUuNCBvbiB0aGlzIHRvcGljLgorCis0LjAuMS4gUGFja2V0IG91dCBvZiBXaW5kb3cKKworICAg Qy1LZXJtaXQgNi4wIGNvdWxkIHNlbmQgcGFja2V0cyAib3V0IG9mIHdpbmRvdyIgaWYgdGhlIHdp bmRvdyBzaXplIHdhcworICAgZ3JlYXRlciB0aGFuIDEgYW5kIEFDS3MgaGFkIGFycml2ZWQgb3V0 IG9mIG9yZGVyLiBGaXhlZCBpbiA2LjEuCisKKzQuMC4yLiBNT1ZFIGFmdGVyIEFERCBTRU5ELUxJ U1QKKworICAgQUREIFNFTkQtTElTVCBmb2xsb3dlZCBieSBNT1ZFIGRpZCBub3QgZGVsZXRlIG9y aWdpbmFsIGZpbGVzOyBmaXhlZCBpbgorICAgNi4xLiBDYXJyaWVyIGxvc3Mgd2FzIG5vdCBkZXRl Y3RlZCBkdXJpbmcgdHJhbnNmZXI7IGluIDcuMCBDLUtlcm1pdAorICAgY2hlY2tzIGZvciB0aGlz IChidXQgcmVzdWx0cyBjYW4gbm90IGJlIGd1YXJhbnRlZWQpLiBJbiBhbnkgY2FzZSwgdGhlCisg ICBwcm90b2NvbCB3aWxsIGV2ZW50dWFsbHkgdGltZSBvdXQgaWYgdGhlIGNvbm5lY3Rpb24gaXMg bG9zdC4KKworNC4wLjMuIEdFVCBhbmQgUkVDRUlWRSBBcy1OYW1lcworCisgICBJbiA1QSgxOTAp IHRocm91Z2ggNi4wLjE5MiwgdGhlIEdFVCBhbmQgUkVDRUlWRSBhcy1uYW1lIGRpZCBub3QKKyAg IHByb3Blcmx5IG92ZXJyaWRlIHRoZSBSRUNFSVZFIFBBVEhOQU1FUyBzZXR0aW5nLiBJbiA3LjAg aXQgZG9lcy4KKworNC4wLjQuIE5ldyBCcmllZiBTdGF0aXN0aWNzIExpc3RpbmcKKworICAgVmVy c2lvbiA3LjAgYWRkcyBhIC9CUklFRiBzd2l0Y2ggdG8gdGhlIFNUQVRJU1RJQ1MgY29tbWFuZCwg dG8gZGlzcGxheQorICAgYSBzaG9ydCBmaWxlLXRyYW5zZmVyIHN0YXRpc3RpY3MgcmVwb3J0LiAv QlJJRUYgaXMgbm93IHRoZSBkZWZhdWx0LiBVc2UKKyAgIC9WRVJCT1NFIHRvIHNlZSB0aGUgZnVs bCBkaXNwbGF5LCB3aGljaCBpcyBhYm91dCAyNSBsaW5lcyBsb25nLgorCis0LjAuNS4gSW1wcm92 ZWQgRkFTVCBDb21tYW5kCisKKyAgIFRoZSBwcmVpbnN0YWxsZWQgZGVmaW5pdGlvbiBvZiB0aGUg RkFTVCBtYWNybyBkaWQgbm90IHRha2UgZW5vdWdoCisgICBmYWN0b3JzIGludG8gYWNjb3VudC4g Tm93IGl0IHNldHMgcGFja2V0IGxlbmd0aHMgYW5kIHdpbmRvdyBzaXplcworICAgYXBwcm9wcmlh dGUgdG8gdGhlIGNvbmZpZ3VyYXRpb24uIEZ1cnRoZXJtb3JlLCBpbiBJUklYIG9ubHksIGl0IG1p Z2h0CisgICByZXN0cmljdCB0aGUgU0VORCBwYWNrZXQgbGVuZ3RoIHRvIDQwMDAsIHRvIHdvcmsg YXJvdW5kIGEgYnVnIGluIHRoZQorICAgSVJJWCBUZWxuZXQgc2VydmVyLCBkZXBlbmRpbmcgb24g dGhlIElSSVggdmVyc2lvbiAoc2VlIFs0NDBdY2t1YndyLnR4dCwKKyAgIElSSVggc2VjdGlvbiku IFRvIHNlZSB0aGUgYnVpbHQtaW4gZGVmaW5pdGlvbiBvZiB0aGUgRkFTVCBtYWNybywgdHlwZQor ICAgInNob3cgbWFjcm8gZmFzdCIuIFRvIGNoYW5nZSBpdCwgc2ltcGx5IGRlZmluZSBpdCB0byBi ZSB3aGF0ZXZlciB5b3UKKyAgIHdhbnQgLS0gaXQncyBqdXN0IGEgbWFjcm8sIGxpa2UgYW55IG90 aGVyLgorCis0LjAuNi4gVGhlIFNFVCBTRU5EIEJBQ0tVUCBDb21tYW5kCisKKyAgIFZlcnNpb24g Ny4wIGFkZHMgU0VUIFNFTkQgQkFDS1VQIHsgT04sIE9GRiB9LiBUaGlzIHRlbGxzIHdoZXRoZXIg YmFja3VwCisgICBmaWxlcyBzaG91bGQgYmUgc2VudC4gQmFja3VwIGZpbGVzIGFyZSB0aGUgb25l cyBjcmVhdGVkIGJ5IEtlcm1pdCAoYW5kCisgICBFTUFDUywgYW5kIHBvc3NpYmx5IG90aGVyIGFw cGxpY2F0aW9ucykgdG8gcHJlc2VydmUgb2xkIGNvcGllcyBvZiBmaWxlcworICAgd2hlbiBjcmVh dGluZyBuZXcgb25lcyB3aXRoIHRoZSBzYW1lIG5hbWUuIEtlcm1pdCBkb2VzIHRoaXMgd2hlbgor ICAgcmVjZWl2aW5nIGEgZmlsZSBhbmQgaXRzIEZJTEUgQ09MTElTSU9OIHNldHRpbmcgaXMgQkFD S1VQIChvciBSRU5BTUUsCisgICBpbiB3aGljaCBjYXNlIGl0IHRoZSBuZXcgZmlsZSBnZXRzIHRo ZSBiYWNrdXAgbmFtZSkuIE9uIG1vc3QgcGxhdGZvcm1zLAorICAgdGhlIGJhY2t1cCBuYW1lIGlz IGZvcm1lZCBieSBhZGRpbmc6CisKKyAgLn5ufgorCisgICB0byB0aGUgZW5kIG9mIHRoZSBmaWxl bmFtZSwgd2hlcmUgIm4iIGlzIGEgbnVtYmVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlCisgICBvcmln aW5hbCBmaWxlIGlzIG9vZmEudHh0LCBhIGJhY2t1cCBmaWxlIG1pZ2h0IGJlIGNhbGxlZDoKKwor ICBvb2ZhLnR4dC5+MX4KKworICAgKG9yIG9vZmEudHh0Ln4yfiwgZXRjKS4gSWYgeW91IFNFVCBT RU5EIEJBQ0tVUCBPRkYsIHRoaXMgdGVsbHMgS2VybWl0CisgICBub3QgdG8gc2VuZCBmaWxlcyB0 aGF0IGhhdmUgYmFja3VwIG5hbWVzLiBOb3JtYWxseSwgU0VUIFNFTkQgQkFDS1VQIGlzCisgICBP TiAoYXMgc2hvd24gYnkgU0hPVyBQUk9UT0NPTCksIGFuZCBiYWNrdXAgZmlsZXMgYXJlIHNlbnQg aWYgdGhlaXIKKyAgIG5hbWVzIG1hdGNoIHRoZSBTRU5EIGZpbGUgc3BlY2lmaWNhdGlvbi4KKwor ICAgQWxzbyBzZWUgUFVSR0UsIFNFVCBGSUxFIENPTExJU0lPTiwgU0VORCAvTk9CQUNLVVAsIERJ UkVDVE9SWQorICAgL1tOT11CQUNLVVAuCisKKzQuMC43LiBUaGUgU0VUIHsgU0VORCwgUkVDRUlW RSB9IFZFUlNJT04tTlVNQkVSUyBDb21tYW5kCisKKyAgIFZNUyBPbmx5LiBOb3JtYWxseSB3aGVu IHNlbmRpbmcgZmlsZXMsIFZNUyBDLUtlcm1pdCBzdHJpcHMgdGhlIHZlcnNpb24KKyAgIG51bWJl ci4gRm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlIGlzIEZPTy5CQVI7MzQsIHRoZSBuYW1lIGlzIHNl bnQgYXMKKyAgIEZPTy5CQVIgKHdpdGhvdXQgdGhlICI7MzQiKS4gSWYgeW91IHdhbnQgdG8ga2Vl cCB2ZXJzaW9uIG51bWJlcnMgb24KKyAgIHdoZW4gc2VuZGluZyBmaWxlcywgdXNlIFNFVCBTRU5E IFZFUlNJT04tTlVNQkVSUyBPTi4gVGhlIGVmZmVjdCBkZXBlbmRzCisgICBvbiB0aGUgcmVjZWl2 ZXIuCisKKyAgIE5vcm1hbGx5IHdoZW4gcmVjZWl2aW5nIGZpbGVzLCBhbmQgYW4gaW5jb21pbmcg ZmlsZW5hbWUgaW5jbHVkZXMgYQorICAgVk1TLXN0eWxlIHZlcnNpb24gbnVtYmVyIChzdWNoIGFz IEZPTy5CQVI7MzQpIFZNUyBDLUtlcm1pdCBzdHJpcHMgaXQKKyAgIGJlZm9yZSB0cnlpbmcgdG8g Y3JlYXRlIHRoZSBuZXcgZmlsZTsgdGhpcyB3YXkgdGhlIG5ldyBmaWxlIHJlY2VpdmVzCisgICB0 aGUgbmV4dCBoaWdoZXN0IHZlcnNpb24gbnVtYmVyIGluIHRoZSBjdXN0b21hcnkgbWFubmVyIGZv ciBWTVMuIElmIHlvdQorICAgd2FudCB2ZXJzaW9uIG51bWJlcnMgb24gaW5jb21pbmcgZmlsZW5h bWVzIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgdGhlCisgICBuZXcgZmlsZXMsIHVzZSBTRVQgUkVD RUlWRSBWRVJTSU9OLU5VTUJFUlMgT04uCisKKyAgIE5vcm1hbGx5IHRoZXNlIGNvbW1hbmRzIHdv dWxkIGJlIGVmZmVjdGl2ZSBvbmx5IHdoZW4gVk1TIEMtS2VybWl0IGlzCisgICBleGNoYW5naW5n IGZpbGVzIHdpdGggYSBub24tVk1TIEtlcm1pdCBwcm9ncmFtLCBzaW5jZSBWTVMtdG8tVk1TCisg ICB0cmFuc2ZlcnMgdXNlIGxhYmVsZWQgbW9kZSB1bmxlc3MgeW91IGhhdmUgZ29uZSBvdXQgb2Yg eW91ciB3YXkgdG8KKyAgIGRlZmVhdCBpdC4KKworICAgRXhhbXBsZTogWW91IHdhbnQgdG8gc2Vu ZCBhbGwgdmVyc2lvbnMgb2YgYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50CisgICBkaXJlY3Rvcnkg ZnJvbSBhIFZNUyBDLUtlcm1pdCBjbGllbnQgdG8gYSBVTklYIEMtS2VybWl0IHNlcnZlci4gVXNl OgorCisgIHNldCBzZW5kIHZlcnNpb24tbnVtYmVycyBvbgorICBzZW5kICouKjsqCisKKyAgIFRo ZSByZXN1bHRpbmcgVW5peCBmaWxlcyB3aWxsIGhhdmUgVk1TLXN0eWxlIHZlcnNpb24gbnVtYmVy cyBhcyBwYXJ0IG9mCisgICB0aGVpciBuYW1lLCBmb3IgZXhhbXBsZSAiZm9vLmJhcjsxIiwgImZv by5iYXI7MiIsIGV0Yy4KKworICAgTm93IHN1cHBvc2UgeW91IHdhbnQgdG8gc2VuZCB0aGVzZSBm aWxlcyBmcm9tIFVuaXggdG8gYW5vdGhlciBWTVMKKyAgIHN5c3RlbSBhbmQgcHJlc2VydmUgdGhl IHZlcnNpb24gbnVtYmVycy4gQWdhaW4gd2UgaGF2ZSBhIFVuaXggQy1LZXJtaXQKKyAgIHNlcnZl ciBhbmQgVk1TIEMtS2VybWl0IGNsaWVudC4gR2l2ZSB0aGVzZSBjb21tYW5kcyB0byB0aGUgY2xp ZW50OgorCisgIHNldCByZWNlaXZlIHZlcnNpb24tbnVtYmVycyBvbgorICBnZXQgKgorCis0LjAu OC4gVGhlIFNFVCB7IFNFTkQsIFJFQ0VJVkUgfSB7IE1PVkUtVE8sIFJFTkFNRS1UTyB9IENvbW1h bmRzCisKKyAgIFRoZXNlIGNvbW1hbmRzIGFyZSBwZXJzaXN0ZW50IGdsb2JhbCB2ZXJzaW9ucyBv ZiB0aGUgL01PVkUtVE86IGFuZAorICAgL1JFTkFNRS1UTzogc3dpdGNoZXMgb2YgdGhlIFNFTkQs IEdFVCwgYW5kIFJFQ0VJVkUgY29tbWFuZHMuIFRoZXkKKyAgIHNob3VsZCBub3JtYWxseSBiZSB1 c2VkIG9ubHkgd2hlbiBzZXR0aW5nIHVwIGEgZGVkaWNhdGVkCisgICB0cmFuc2FjdGlvbi1wcm9j ZXNzaW5nIGFwcGxpY2F0aW9uLCBpbiB3aGljaCBlYWNoIGZpbGUgaXMgdG8gYmUgbW92ZWQKKyAg IG9yIHJlbmFtZWQgaW1tZWRpYXRlbHkgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBpcyB0cmFuc2Zl cnJlZAorICAgc3VjY2Vzc2Z1bGx5LCBzbyB0aGF0IChmb3IgZXhhbXBsZSkgYW4gaW5kZXBlbmRl bnQsIGNvbmN1cnJlbnQgcHJvY2VzcworICAgY2FuIG5vdGljZSB3aGVuIG5ldyBmaWxlcyBhcHBl YXIgYW5kIHByb2Nlc3MgdGhlbSBpbW1lZGlhdGVseSB3aXRob3V0CisgICBoYXZpbmcgdG8gZ3Vl c3Mgd2hldGhlciB0aGV5IGFyZSBjb21wbGV0ZS4KKworNC4wLjkuIFNFVCBGSUxFIElOQ09NUExF VEUgQVVUTworCisgICBTRVQgRklMRSBJTkNPTVBMRVRFIHsgS0VFUCwgRElTQ0FSRCB9LCB3aGlj aCB0ZWxscyB3aGV0aGVyIHRvIGtlZXAgb3IKKyAgIGRpc2NhcmQgaW5jb21wbGV0ZWx5IHJlY2Vp dmVkIGZpbGVzLCBoYXMgYSBuZXcgb3B0aW9uLCBBVVRPLCB3aGljaCBpcworICAgYWxzbyB0aGUg ZGVmYXVsdC4gSXQgbWVhbnMgS0VFUCB0aGUgaW5jb21wbGV0ZSBmaWxlIGlmIHRoZSB0cmFuc2Zl ciBpcworICAgaW4gYmluYXJ5IG1vZGUsIG90aGVyd2lzZSBESVNDQVJEIGl0LiBUaGlzIHJlZHVj ZXMgdGhlIGNoYW5jZXMgdGhhdCBhCisgICBzdWJzZXF1ZW50IHJlY292ZXJ5IG9wZXJhdGlvbiAo UkVTRU5ELCBSRUdFVCwgZXRjKSBjb3VsZCBwcm9kdWNlIGEKKyAgIGNvcnJ1cHQgZmlsZSwgc2lu Y2UgcmVjb3Zlcnkgd29ya3Mgb25seSBmb3IgYmluYXJ5LW1vZGUgdHJhbnNmZXJzLgorCis0LjEu IEZJTEUtVFJBTlNGRVIgRklMRU5BTUUgVEVNUExBVEVTCisKKyAgIEZpbGUtdHJhbnNmZXIgZmls ZW5hbWUgdGVtcGxhdGVzIGFsbG93IGZpbGVzIHRvIGJlIHJlbmFtZWQKKyAgIGF1dG9tYXRpY2Fs bHkgYnkgdGhlIGZpbGUgc2VuZGVyLCB0aGUgcmVjZWl2ZXIsIG9yIGJvdGgsIGR1cmluZworICAg dHJhbnNmZXIgb2YgZ3JvdXBzIG9mIGZpbGVzLgorCis0LjEuMS4gVGVtcGxhdGVzIGluIHRoZSBB cy1OYW1lCisKKyAgIFByaW9yIHRvIEMtS2VybWl0IDYuMSBhbmQgS2VybWl0IDk1IDEuMS4xMiB0 aGUgb25seSBvcHRpb25zIHRoYXQgY291bGQKKyAgIGJlIHVzZWQgdG8gYWZmZWN0IHRoZSBuYW1l cyBvZiBmaWxlcyBiZWluZyB0cmFuc2ZlcnJlZCB3ZXJlIFNFVAorICAgRklMRU5BTUVTIHsgTElU RVJBTCwgQ09OVkVSVEVEIH0gYW5kIFNFVCB7IFNFTkQsIFJFQ0VJVkUgfSBQQVRITkFNRVMgewor ICAgT04sIE9GRiB9LCBwbHVzIHRoZSAiYXMtbmFtZSIgZmVhdHVyZSBvZiB0aGUgU0VORCAoTU9W RSwgZXRjKSBhbmQKKyAgIFJFQ0VJVkUgY29tbWFuZHMuCisKKyAgIFByZXZpb3VzbHksIHRoZSBh cy1uYW1lIGNvdWxkIGJlIHVzZWQgb25seSBmb3IgYSBzaW5nbGUgZmlsZS4gRm9yCisgICBleGFt cGxlOgorCisgIFNFTkQgRk9PIEJBUgorCisgICB3b3VsZCBzZW5kIHRoZSBmaWxlIEZPTyB1bmRl ciB0aGUgbmFtZSBCQVIsIGJ1dDoKKworICBTRU5EICouVFhUIGFueXRoaW5nCisKKyAgIHdhcyBu b3QgYWxsb3dlZCwgc2luY2UgaXQgd291bGQgZ2l2ZSB0aGUgc2FtZSBuYW1lIHRvIGVhY2ggZmls ZSB0aGF0CisgICB3YXMgc2VudC4gV2hlbiByZWNlaXZpbmc6CisKKyAgUkVDRUlWRSBGT08KKwor ICAgd291bGQgcmVuYW1lIHRoZSBmaXJzdCBpbmNvbWluZyBmaWxlIHRvIEZPTyBiZWZvcmUgc3Rv cmluZyBpdCBvbiB0aGUKKyAgIGRpc2ssIGJ1dCBzdWJzZXF1ZW50IGZpbGVzIHdvdWxkIG5vdCBi ZSByZW5hbWVkIHRvIEZPTywgc2luY2UgdGhpcworICAgd291bGQgcmVzdWx0IGluIG92ZXJ3cml0 aW5nIHRoZSBzYW1lIGZpbGUgcmVwZWF0ZWRseS4gSW5zdGVhZCwgdGhleQorICAgd2VyZSBzdG9y ZWQgdW5kZXIgdGhlIG5hbWVzIHRoZXkgYXJyaXZlZCB3aXRoLgorCisgICBCZWdpbm5pbmcgaW4g Qy1LZXJtaXQgNi4xIGFuZCBLZXJtaXQgOTUgMS4xLjEyLCBpdCBpcyBwb3NzaWJsZSB0bworICAg c3BlY2lmeSBhcy1uYW1lcyBpbiBTRU5ELCBSRUNFSVZFLCBhbmQgcmVsYXRlZCBjb21tYW5kcyBl dmVuIGZvciBmaWxlCisgICBncm91cHMuIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IHVzaW5nIHJl cGxhY2VtZW50IHZhcmlhYmxlcyBpbiB0aGUKKyAgIGFzLW5hbWUsIGFsb25nIHdpdGggb3B0aW9u YWwgbWF0ZXJpYWwgc3VjaCBjaGFyYWN0ZXItc3RyaW5nIGZ1bmN0aW9ucworICAgYW5kL29yIGNv bnN0YW50IHN0cmluZ3MuIEFuIGFzLW5hbWUgY29udGFpbmluZyByZXBsYWNlbWVudCB2YXJpYWJs ZXMgaXMKKyAgIGNhbGxlZCBhIGZpbGVuYW1lIHRlbXBsYXRlLgorCisgICBUaGUga2V5IHRvIGZp bGVuYW1lIHRlbXBsYXRlcyBpcyB0aGUgbmV3IHZhcmlhYmxlOgorCisgIFx2KGZpbGVuYW1lKQor CisgICBEdXJpbmcgZmlsZSB0cmFuc2ZlciBpdCBpcyByZXBsYWNlZCBieSB0aGUgbmFtZSBvZiBl YWNoIGZpbGUgY3VycmVudGx5CisgICBiZWluZyB0cmFuc2ZlcnJlZCAoYWZ0ZXIgdHJhbnNmZXIs IGl0IGlzIHRoZSBuYW1lIG9mIHRoZSBsYXN0IGZpbGUKKyAgIHRyYW5zZmVycmVkKS4KKworICAg U28sIGZvciBleGFtcGxlOgorCisgIHNlbmQgKi50eHQgXHYoZmlsZW5hbWUpLm5ldworCisgICBz ZW5kcyBlYWNoIGZpbGUgd2l0aCBpdHMgb3duIG5hbWUsIGJ1dCB3aXRoICIubmV3IiBhcHBlbmRl ZCB0byBpdC4gT2YKKyAgIGNvdXJzZSBpZiB0aGUgbmFtZSBhbHJlYWR5IGNvbnRhaW5zIHBlcmlv ZHMsIHRoaXMgY291bGQgY29uZnVzZSB0aGUKKyAgIGZpbGUgcmVjZWl2ZXIsIHNvIHlvdSBjYW4g YWxzbyBhY2hpZXZlIGZhbmNpZXIgZWZmZWN0cyB3aXRoCisgICBjb25zdHJ1Y3Rpb25zIGxpa2U6 CisKKyAgc2VuZCAqLnR4dCBcZnJlcGxhY2UoXHYoZmlsZW5hbWUpLC4sXykubmV3CisKKyAgIHdo aWNoIHJlcGxhY2VzIGFsbCBwZXJpb2RzIGluIHRoZSBvcmlnaW5hbCBmaWxlbmFtZSBieSB1bmRl cnNjb3JlcywgYW5kCisgICB0aGVuIGFwcGVuZHMgIi5uZXciIHRvIHRoZSByZXN1bHQuIFNvLCBm b3IgZXhhbXBsZSwgb29mYS50eHQgd291bGQgYmUKKyAgIHNlbnQgYXMgb29mYV90eHQubmV3Lgor CisgICBBbm90aGVyIG5ldyB2YXJpYWJsZSB0aGF0IGlzIHVzZWZ1bCBpbiB0aGlzIHJlZ2FyZCBp cyBcdihmaWxlbnVtYmVyKSwKKyAgIHdoaWNoIGlzIHRoZSBvcmRpbmFsIG51bWJlciBvZiB0aGUg Y3VycmVudCBmaWxlIGluIHRoZSBmaWxlIGdyb3VwLCBzbworICAgeW91IGNhbiBhbHNvOgorCisg IHNlbmQgKi50eHQgRklMRVxmbHBhZChcdihmaWxlbnVtKSwyLDApCisKKyAgIHJlc3VsdGluZyBp biBhIHNlcmllcyBvZiBmaWxlcyBjYWxsZWQgRklMRTAwLCBGSUxFMDEsIEZJTEUwMiwgZXRjLiAo QXQKKyAgIHRoZSBlbmQgb2YgdGhlIHRyYW5zZmVyLCBcdihmaWxlbnVtKSB0ZWxscyB0aGUgbnVt YmVyIG9mIGZpbGVzIHRoYXQKKyAgIHdlcmUgdHJhbnNmZXJyZWQpLgorCisgICBJZiB5b3Ugc3Bl Y2lmeSBhIGNvbnN0YW50IGFzLW5hbWUgd2hlbiBzZW5kaW5nIGEgZmlsZSBncm91cDoKKworICBz ZW5kICoudHh0IHRoaXNuYW1lb25seQorCisgICBLZXJtaXQgY29tcGxhaW5zIGFuZCBhc2tzIHlv dSB0byBpbmNsdWRlIHJlcGxhY2VtZW50IHZhcmlhYmxlcyBpbiB0aGUKKyAgIGFzLW5hbWUuIFlv dSBzaG91bGQgZ2VuZXJhbGx5IHVzZSBcdihmaWxlbmFtZSkgb3IgXHYoZmlsZW51bWJlcikgZm9y CisgICB0aGlzIHB1cnBvc2UsIHNpbmNlIG90aGVyIHZhcmlhYmxlcyAod2l0aCB0aGUgcG9zc2li bGUgZXhjZXB0aW9uIG9mCisgICBkYXRlL3RpbWUgcmVsYXRlZCB2YXJpYWJsZXMpIGRvIG5vdCBj aGFuZ2UgZnJvbSBvbmUgZmlsZSB0byB0aGUgbmV4dC4KKyAgIEJ1dCBLZXJtaXQgYWNjZXB0cyBh bnkgYXMtbmFtZSBhdCBhbGwgdGhhdCBjb250YWlucyBhbnkga2luZCBvZgorICAgdmFyaWFibGVz IGZvciBmaWxlIGdyb3VwLCBldmVuIGlmIHRoZSB2YXJpYWJsZSB3aWxsIG5vdCBjaGFuZ2UuIFNv OgorCisgIHNlbmQgKi50eHQgXCVhCisKKyAgIGlzIGFjY2VwdGVkLCBidXQgYWxsIGZpbGVzIGFy ZSBzZW50IHdpdGggdGhlIHNhbWUgbmFtZSAodGhlIHZhbHVlIG9mCisgICBcJWEsIGlmIGl0IGhh cyBvbmUgYW5kIGl0IGlzIGNvbnN0YW50KS4gSWYgdGhlIHZhcmlhYmxlIGhhcyBubyB2YWx1ZSBh dAorICAgYWxsLCB0aGUgZmlsZXMgYXJlIHNlbnQgdW5kZXIgdGhlaXIgb3duIG5hbWVzLgorCisg ICBPZiBjb3Vyc2UsIHRoZSB2YWx1ZSBvZiBcJWEgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUgbmVl ZCBub3QgYmUKKyAgIGNvbnN0YW50OgorCisgIGRlZmluZSBcJWEgRklMRVxmbHBhZChcdihmaWxl bnVtKSwyLDApX2F0X1x2KHRpbWUpCisgIHNlbmQgKi50eHQgXCVhCisKKyAgIFRoZSBSRUNFSVZF IGNvbW1hbmQsIHdoZW4gZ2l2ZW4gd2l0aG91dCBhbiBhcy1uYW1lLCBiZWhhdmVzIGFzIGFsd2F5 cywKKyAgIHN0b3JpbmcgYWxsIGluY29taW5nIGZpbGVzIHVuZGVyIHRoZSBuYW1lcyB0aGV5IGFy cml2ZSB3aXRoLCBzdWJqZWN0IHRvCisgICBTRVQgRklMRSBOQU1FIGFuZCBTRVQgUkVDRUlWRSBQ QVRITkFNRVMgbW9kaWZpY2F0aW9ucyAoWzQ0MV1TZWN0aW9uCisgICA0LjEwKS4KKworICAgSG93 ZXZlciwgd2hlbiBhbiBhcy1uYW1lIGlzIGdpdmVuIGluIHRoZSBSRUNFSVZFIGNvbW1hbmQsIGl0 IGlzIGFwcGxpZWQKKyAgIHRvIGFsbCBpbmNvbWluZyBmaWxlcyByYXRoZXIgdGhhbiB0byBqdXN0 IHRoZSBmaXJzdC4gSWYgaXQgZG9lcyBub3QKKyAgIGNvbnRhaW4gcmVwbGFjZW1lbnQgdmFyaWFi bGVzLCB0aGVuIHRoZSBjdXJyZW50IEZJTEUgQ09MTElTSU9OIHNldHRpbmcKKyAgIGdvdmVybnMg dGhlIHJlc3VsdC4gRm9yIGV4YW1wbGU6CisKKyAgcmVjZWl2ZSBmb28KKworICAgd2lsbCByZXN1 bHQgaW4gaW5jb21pbmcgZmlsZXMgbmFtZWQgZm9vLCBmb28ufjF+LCBmb28ufjJ+LCBhbmQgc28g b24sCisgICB3aXRoIHRoZSBkZWZhdWx0IEZJTEUgQ09MTElTSU9OIHNldHRpbmcgb2YgQkFDS1VQ LiBJZiBpdCBkb2VzIGNvbnRhaW4KKyAgIHJlcGxhY2VtZW50IHZhcmlhYmxlcywgb2YgY291cnNl IHRoZXkgYXJlIHVzZWQuCisKKyAgIFdoZW4gcmVjZWl2aW5nIGZpbGVzLCB0aGUgXHYoZmlsZW5h bWUpIHZhcmlhYmxlIHJlZmVycyB0byB0aGUgbmFtZSB0aGF0CisgICB3YXMgcmVjZWl2ZWQgaW4g dGhlIGluY29taW5nIGZpbGUtaGVhZGVyIHBhY2tldCwgQkVGT1JFIGFueSBwcm9jZXNzaW5nCisg ICBieSBTRVQgRklMRSBOQU1FUyBvciBTRVQgUkVDRUlWRSBQQVRITkFNRVMuIFNpbmNlIHRoZSBm aWxlbmFtZXMgaW4KKyAgIGZpbGUtaGVhZGVyIHBhY2tldHMgYXJlIHVzdWFsbHkgaW4gdXBwZXJj YXNlLCB5b3Ugd291bGQgbmVlZCB0byBjb252ZXJ0CisgICB0aGVtIGV4cGxpY2l0bHkgaWYgeW91 IHdhbnQgdGhlbSBpbiBsb3dlcmNhc2UsIGUuZy46CisKKyAgcmVjZWl2ZSBcZmxvd2VyKFx2KGZp bGVuYW1lKSkubmV3CisKKzQuMS4yLiBUZW1wbGF0ZXMgb24gdGhlIENvbW1hbmQgTGluZQorCisg ICBPbiB0aGUgY29tbWFuZC1saW5lLCB1c2UgdGVtcGxhdGVzIGFzIHNob3duIGFib3ZlIGFzIHRo ZSAtYSBvcHRpb24KKyAgIGFyZ3VtZW50LCBiZWFyaW5nIGluIG1pbmQgdGhlIHByb3BlbnNpdHkg b2YgVU5JWCBhbmQgcGVyaGFwcyBvdGhlcgorICAgc2hlbGxzIHRvIHRyZWF0IGJhY2tzbGFzaCBh cyBhIHNoZWxsIGVzY2FwZSBjaGFyYWN0ZXIuIFNvIGluIFVOSVggKGZvcgorICAgZXhhbXBsZSk6 CisKKyAga2VybWl0IC1zIG9vZmEuKiAtYSB4LlxcdihmaWxlbnVtKQorCisgICBCeSB0aGUgd2F5 LCB0aGlzIHJlcHJlc2VudHMgYSBjaGFuZ2UgZnJvbSA2LjAgYW5kIGVhcmxpZXIgcmVsZWFzZXMg aW4KKyAgIHdoaWNoIHRoZSBhcy1uYW1lICgtYSBhcmd1bWVudCBvciBvdGhlcndpc2UpIHdhcyBu b3QgZXZhbHVhdGVkIGJ5IHRoZQorICAgY29tbWFuZCBwYXJzZXIuIFRodXMsIGZvciBleGFtcGxl LCBpbiBWTVMgKHdoZXJlIHRoZSBzaGVsbCBkb2VzIG5vdAorICAgY2FyZSBhYm91dCBiYWNrc2xh c2hlcyksIGl0IHdhcyBwb3NzaWJsZSB0bzoKKworICBrZXJtaXQgLXMgb29mYS50eHQgLWEgYzpc dG1wXG9vZmEudHh0CisKKyAgIE5vdyBiYWNrc2xhc2hlcyBpbiB0aGUgYXMtbmFtZSBtdXN0IGJl IHF1b3RlZCBub3Qgb25seSBmb3IgdGhlIHNoZWxsCisgICAoaWYgbmVjZXNzYXJ5KSBidXQgYWxz byBmb3IgS2VybWl0IGl0c2VsZjoKKworICBrZXJtaXQgLXMgb29mYS50eHQgLWEgYzpcXHRtcFxc b29mYS50eHQgICAgICA7IEtlcm1pdCBvbmx5CisgIGtlcm1pdCAtcyBvb2ZhLnR4dCAtYSBjOlxc XFx0bXBcXFxcb29mYS50eHQgIDsgU2hlbGwgYW5kIEtlcm1pdAorCisgICBZb3UgY2FuIGFsc28g dXNlIHRoZSBcZmxpdGVyYWwoKSBmdW5jdGlvbiBmb3IgdGhpczoKKworICBrZXJtaXQgLXMgb29m YS50eHQgLWEgXGZsaXRlcmFsKGM6XHRtcFxvb2ZhLnR4dCkgICAgICA7IEtlcm1pdCBvbmx5Cisg IGtlcm1pdCAtcyBvb2ZhLnR4dCAtYSBcXGZsaXRlcmFsKGM6XFx0bXBcXG9vZmEudHh0KSAgIDsg U2hlbGwgYW5kIEtlcm1pdAorCis0LjEuMy4gUG9zdC1UcmFuc2ZlciBSZW5hbWluZworCisgICBG aWxlbmFtZSB0ZW1wbGF0ZXMgYXJlIG5vdyBhbHNvIHVzZWZ1bCBpbiBTRVQgeyBTRU5ELCBSRUNF SVZFIH0KKyAgIFJFTkFNRS1UTyBhbmQgaW4gdGhlIC9SRU5BTUUtVE86IHN3aXRjaCwgdGhhdCBj YW4gYmUgZ2l2ZW4gdG8gdGhlIFNFTkQsCisgICBHRVQsIG9yIFJFQ0VJVkUgY29tbWFuZHM7IHRo aXMgaXMgc2ltaWxhciB0byBhbiBhcy1uYW1lLCBidXQgaXMKKyAgIGVmZmVjdGl2ZSBvbiBhIHBl ci1maWxlIGJhc2lzIGlmIGFuZCBvbmx5IGlmIHRoZSBmaWxlIHdhcyB0cmFuc2ZlcnJlZAorICAg c3VjY2Vzc2Z1bGx5LgorCisgICBNT1ZFLVRPIGFuZCBSRU5BTUUtVE8gYWRkcmVzcyBhIHJlcXVp cmVtZW50IGNvbW1vbmx5IHN0YXRlZCBmb3IKKyAgIHRyYW5zYWN0aW9uIHByb2Nlc3NpbmcgYW5k IHNpbWlsYXIgc3lzdGVtcy4gU3VwcG9zZSwgZm9yIGV4YW1wbGUsIGEKKyAgIGNlbnRyYWwgc3lz dGVtICJYIiBhY2NlcHRzIGNvbm5lY3Rpb25zIGZyb20gbXVsdGlwbGUgY2xpZW50cworICAgc2lt dWx0YW5lb3VzbHk7IGEgcHJvY2VzcyBvbiBYIHdhaXRzIGZvciBhIGZpbGUgdG8gYXBwZWFyIGFu ZCB0aGVuCisgICBwcm9jZXNzZXMgdGhlIGZpbGUuIFRoaXMgcHJvY2VzcyBtdXN0IGhhdmUgYSB3 YXkgb2Yga25vd2luZyB3aGVuIHRoZQorICAgZmlsZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGFuZCBz dWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgYmVmb3JlIGl0IHN0YXJ0cworICAgdG8gcHJvY2VzcyBp dC4gVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGVhc2lseSB1c2luZyBDLUtlcm1pdCdzIFNFVCB7 CisgICBTRU5ELCBSRUNFSVZFIH0geyBNT1ZFLVRPLCBSRU5BTUUtVE8gfSBjb21tYW5kIG9yIC9N T1ZFLVRPOiBvcgorICAgL1JFTkFNRS1UTzogc3dpdGNoZXMsIGRlc2NyaWJlZCBpbiBbNDQyXVNl Y3Rpb25zIDQuNy4xIHRocm91Z2gKKyAgIFs0NDNdNC43LjMuCisKKyAgIEhlcmUncyBhbiBleGFt cGxlIGZvciB0aGUgY2xpZW50IHNpZGUsIGluIHdoaWNoIGZpbGVzIHRvIGJlIHNlbnQgYXJlCisg ICBwbGFjZWQgaW4gYSBjZXJ0YWluIGRpcmVjdG9yeSAoL3Vzci9vbGdhL3Rvc2VuZCBpbiB0aGlz IGV4YW1wbGUpIGJ5CisgICBhbm90aGVyIHByb2Nlc3Mgd2hlbiB0aGV5IGFyZSByZWFkeSB0byBn by4gVGhpcyBtaWdodCBiZSBpbiBhIGhvc3BpdGFsCisgICBvciBiaWcgZG9jdG9yJ3Mgb2ZmaWNl LCB3aGVyZSBtZWRpY2FsIGluc3VyYW5jZSBjbGFpbXMgYXJlIGVudGVyZWQgYXQgYQorICAgbnVt YmVyIG9mIHdvcmtzdGF0aW9ucywgYW5kIHRoZW4gZGVwb3NpdGVkIGluIHRoZSAidG9zZW5kIiBk aXJlY3RvcnksCisgICBmcm9tIHdoaWNoIHRoZXkgYXJlIHNlbnQgdG8gYSBjbGFpbXMgY2xlYXJp bmdob3VzZS4gV2UgYXNzdW1lIHRoZQorICAgY29ubmVjdGlvbiBpcyBhbHJlYWR5IG1hZGUgYW5k IGEgS2VybWl0IHNlcnZlciBpcyBvbiB0aGUgb3RoZXIgZW5kLgorCisgIGxvY2FsIHNyY2RpciBm aW5kaXIgICAgICAgICAgICAgIDsgRGVjbGFyZSBsb2NhbCAoYXV0b21hdGljKSB2YXJpYWJsZXMK KyAgYXNzaWduIHNyY2RpciAvdXNyL29sZ2EvdG9zZW5kICAgOyBMb2NhbCBzb3VyY2UgZGlyZWN0 b3J5IChmaWxlcyB0byBzZW5kKQorICBhc3NpZ24gZmluZGlyIC91c3Ivb2xnYS9zZW50ICAgICA7 IFdoZXJlIHRvIG1vdmUgZmlsZXMgYWZ0ZXIgdGhleSBhcmUgc2VudAorICBsb2cgdHJhbnNhY3Rp b25zICAgICAgICAgICAgICAgICA7IEtlZXAgYSBsb2cgb2YgdHJhbnNmZXJzCisgIGNkIFxtKHNy Y2RpcikgICAgICAgICAgICAgICAgICAgIDsgQ2hhbmdlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5 CisgIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAgICAgICAgIDsgTG9vcCBmb3JldmVyLi4uCisg ICAgICBzZW5kIC9tb3ZlLXRvOlxtKGZpbmRpcikgKiAgIDsgU2VuZCBhbGwgZmlsZXMKKyAgICAg IHNsZWVwIDYwICAgICAgICAgICAgICAgICAgICAgOyBTbGVlcCBhIG1pbnV0ZQorICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7IEdvIGJhY2sgYW5kIGRvIGl0IGFnYWluCisKKyAg IE5vdGUgaG93IHNpbXBsZSB0aGlzIGlzLiBPbmNlIGVhY2ggZmlsZSBpcyBzZW50LCBpdCBpcyBt b3ZlZCBzbyBpdAorICAgd29uJ3QgYmUgc2VudCBhZ2FpbiAoeW91IGNvdWxkIGFsc28gdXNlIFNF TkQgL1JFTkFNRS1UTzogb3IgZXZlbiBTRU5ECisgICAvREVMRVRFKS4gSWYgYSB0cmFuc2ZlciBm YWlscywgdGhlIGZpbGUgaXMgbm90IG1vdmVkIGFuZCBzbyB3ZSB0cnkKKyAgIGFnYWluIHRvIHNl bmQgaXQgbmV4dCB0aW1lIGFyb3VuZC4gSWYgdGhlcmUgYXJlIG5vIGZpbGVzIHRvIHNlbmQsIHRo ZQorICAgU0VORCBjb21tYW5kIGRvZXMgbm90aGluZyBidXQgYSBtZXNzYWdlIGlzIHByaW50ZWQ7 IHlvdSBjYW4gYXZvaWQgdGhlCisgICBtZXNzYWdlIGJ5IGNoZWNraW5nIGZpcnN0IHRvIHNlZSBp ZiBhbnkgZmlsZXMgYXJlIGluIHRoZSBkaXJlY3Rvcnk6CisKKyAgd2hpbGUgdHJ1ZSB7ICAgICAg ICAgICAgICAgICAgICAgOyBMb29wIGZvcmV2ZXIuLi4KKyAgICAgIGlmID4gXGZmaWxlcygqKSAw IC0gICAgICAgICAgOyBJZiB0aGVyZSBhcmUgYW55IGZpbGVzCisgICAgICAgIHNlbmQgL21vdmUt dG86XG0oZmluZGlyKSAqIDsgc2VuZCB0aGVtLgorICAgICAgc2xlZXAgNjAgICAgICAgICAgICAg ICAgICAgICA7IFNsZWVwIGEgbWludXRlLgorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7IEdvIGJhY2sgYW5kIGRvIGl0IGFnYWluLgorCisgICBJdCdzIGV2ZW4gc2ltcGxlciBv biB0aGUgc2VydmVyIHNpZGUgKGhlcmUgYWdhaW4gd2UgYXNzdW1lIHRoZQorICAgY29ubmVjdGlv biBpcyBhbHJlYWR5IGluIHBsYWNlKToKKworICBsb2NhbCByY3ZkaXIgZmluZGlyICAgICAgICAg ICAgICA7IERlY2xhcmUgbG9jYWwgKGF1dG9tYXRpYykgdmFyaWFibGVzCisgIGFzc2lnbiByY3Zk aXIgL3Vzci9pdmFuL3RtcCAgICAgIDsgVGVtcG9yYXJ5IHJlY2VpdmluZyBkaXJlY3RvcnkKKyAg YXNzaWduIGZpbmRpciAvdXNyL2l2YW4vbmV3ICAgICAgOyBXaGVyZSB0byBtb3ZlIGZpbGVzIGFm dGVyIHJlY2VwdGlvbgorICBsb2cgdHJhbnNhY3Rpb25zICAgICAgICAgICAgICAgICA7IEtlZXAg YSBsb2cgb2YgdHJhbnNmZXJzCisgIGNkIFxtKHJjdmRpcikgICAgICAgICAgICAgICAgICAgIDsg Q2hhbmdlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5CisgIHNldCByZWNlaXZlIG1vdmUtdG8gXG0o ZmluZGlyKSAgIDsgRGVjbGFyZSBtb3ZlLXRvIGRpcmVjdG9yeS4KKyAgc2VydmVyICAgICAgICAg ICAgICAgICAgICAgICAgICAgOyBFbnRlciBzZXJ2ZXIgbW9kZS4KKworICAgQSBzZXBhcmF0ZSBw cm9jZXNzIChlLmcuIHRoZSBtZWRpY2FsIGNsYWltLWZvcm0gZGVjb2RlcikgY2FuIGxvb2sgZm9y CisgICBmaWxlcyBhcHBlYXJpbmcgaW4gdGhlIC91c3IvaXZhbi9uZXcgZGlyZWN0b3J5IGFuZCBw cm9jZXNzIHRoZW0gd2l0aAorICAgZXZlcnkgY29uZmlkZW5jZSB0aGF0IHRoZXkgaGF2ZSBiZWVu IGNvbXBsZXRlbHkgcmVjZWl2ZWQuCisKKyAgIE5vdGUgdGhhdCB0aGUgdXNlIG9mIE1PVkUtVE8g Y2FuIHJlc3VsdCBpbiBtb3ZlZCBmaWxlcyBvdmVyd3JpdGluZyBvbmUKKyAgIGFub3RoZXIgKHRo ZSBhcHBsaWNhdGlvbiB3b3VsZCBub3JtYWxseSBhdm9pZCB0aGlzIGJ5IGFzc2lnbmluZyBlYWNo CisgICB0cmFuc2FjdGlvbiBhIHVuaXF1ZSwgZS5nLiBiYXNlZCBvbiBjdXN0b21lciBudW1iZXIg YW5kIGNsYWltIG51bWJlcikuCisgICBCdXQgaWYgZmlsZW5hbWUgY29sbGlzaW9ucyBhcmUgYSBw b3NzaWJpbGl0eSBpbiB5b3VyIGFwcGxpY2F0aW9uLAorICAgUkVOQU1FLVRPIG1pZ2h0IGJlIGEg YmV0dGVyIGNob2ljZTsgeW91IGNhbiB1c2UgYW55IHZhcmlhYmxlcyB5b3UgbGlrZQorICAgaW4g dGhlIHRlbXBsYXRlIHRvIGVuc3VyZSB1bmlxdWVuZXNzIG9mIHRoZSBSRU5BTUUtVE8gZmlsZW5h bWU7IGZvcgorICAgZXhhbXBsZToKKworICBTRVQgUkVDRUlWRSBSRU5BTUUtVE8gXHYoZmlsZW5h bWUpX1x2KG5kYXRlKV9cdihudGltZSlfXHYodXNlcmlkKV9cdihwaWQpCisKKzQuMi4gRklMRS1U UkFOU0ZFUiBQSVBFUyBBTkQgRklMVEVSUworCis0LjIuMS4gSU5UUk9EVUNUSU9OCisKKyAgIEJl Z2lubmluZyBpbiBDLUtlcm1pdCA2LjEgYW5kIEtlcm1pdCA5NSAxLjEuMTIsIGl0IGlzIHBvc3Np YmxlIHRvIHNlbmQKKyAgIGZyb20gYSBjb21tYW5kLCBvciAicGlwZSIsIGFzIHdlbGwgYXMgZnJv bSBhIGZpbGUsIGFuZCB0byByZWNlaXZlIHRvIGEKKyAgIHBpcGUgb3IgY29tbWFuZC4gSW4gYSB0 eXBpY2FsIGV4YW1wbGUsIHdlIG1pZ2h0IHdhbnQgdG8gdHJhbnNmZXIgYW4KKyAgIGVudGlyZSBk aXJlY3RvcnkgdHJlZSBmcm9tIG9uZSBVTklYIHN5c3RlbSB0byBhbm90aGVyIChidXQgd2l0aG91 dAorICAgdXNpbmcgdGhlIG1ldGhvZHMgZGVzY3JpYmVkIGluIFs0NDRdU2VjdGlvbnMgNC4zICwg WzQ0NV00LjEwLAorICAgWzQ0Nl00LjExLCBhbmQgWzQ0N100LjE1KS4gV2UgY291bGQgZG8gdGhp cyBpbiBtdWx0aXBsZSBzdGVwcyBhcworICAgZm9sbG93czoKKworICAxLiBDcmVhdGUgYSB0YXIg YXJjaGl2ZSBvZiB0aGUgZGVzaXJlZCBkaXJlY3RvcnkgdHJlZQorICAyLiBDb21wcmVzcyB0aGUg dGFyIGFyY2hpdmUKKyAgMy4gVHJhbnNmZXIgaXQgaW4gYmluYXJ5IG1vZGUgdG8gdGhlIG90aGVy IGNvbXB1dGVyCisgIDQuIERlY29tcHJlc3MgaXQKKyAgNS4gRXh0cmFjdCB0aGUgZGlyZWN0b3J5 IHRyZWUgZnJvbSB0aGUgdGFyIGFyY2hpdmUKKworICAgQnV0IHRoaXMgaXMgaW5jb252ZW5pZW50 IGFuZCBpdCByZXF1aXJlcyBhIHRlbXBvcmFyeSBmaWxlLCB3aGljaCBtaWdodAorICAgYmUgbGFy Z2VyIHRoYW4gd2UgaGF2ZSByb29tIGZvci4KKworICAgVGhlIG5ldyBwaXBlLXRyYW5zZmVyIGZl YXR1cmUgbGV0cyB5b3UgZG8gc3VjaCB0aGluZ3MgaW4gYSBzaW5nbGUgc3RlcCwKKyAgIGFuZCB3 aXRob3V0IGludGVybWVkaWF0ZSBmaWxlcy4KKworICAgQWRkaXRpb25hbCBuZXcgZmVhdHVyZXMs IGFsc28gZGlzY3Vzc2VkIGhlcmUsIGxldCB5b3Ugc3BlY2lmeSBwcmUtIGFuZAorICAgcG9zdC0g cHJvY2Vzc2luZyBmaWx0ZXJzIGZvciBvdXRib3VuZCBhbmQgaW5jb21pbmcgZmlsZXMsIGFuZCBn aXZlIHlvdQorICAgYSB3YXkgdG8gaW5zZXJ0IHRoZSBvdXRwdXQgZnJvbSBzaGVsbCBvciBzeXN0 ZW0gY29tbWFuZHMgaW50byBDLUtlcm1pdAorICAgY29tbWFuZHMuCisKKyAgIFRoZSBmaWxlLXRy YW5zZmVyIHJlbGF0ZWQgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBvbmx5IHdpdGggS2VybWl0Cisg ICBwcm90b2NvbCwgbm90IHdpdGggYW55IGV4dGVybmFsIHByb3RvY29scywgbm9yIHdpdGggSzk1 J3MgYnVpbHQtaW4KKyAgIFhZWk1PREVNIHByb3RvY29scyAoYmVjYXVzZSBYWVpNT0RFTSByZWNv dmVycyBmcm9tIHRyYW5zbWlzc2lvbiBlcnJvcnMKKyAgIGJ5IHJld2luZGluZyB0aGUgc291cmNl IGZpbGUsIGFuZCB5b3UgY2FuJ3QgcmV3aW5kIGEgcGlwZSkuCisKKyAgIFRoaXMgc2VjdGlvbiBi ZWdpbnMgYnkgZGlzY3Vzc2luZyB0aGUgc2ltcGxlIGFuZCBzdHJhaWdodGZvcndhcmQgdXNlIG9m CisgICB0aGVzZSBmZWF0dXJlcyBpbiBVTklYLCBpbiB3aGljaCBwaXBlcyBhbmQgaW5wdXQvb3V0 cHV0IHJlZGlyZWN0aW9uIGFyZQorICAgYSBmdW5kYW1lbnRhbCBjb21wb25lbnQgYW5kIHRoZXJl Zm9yZSAianVzdCB3b3JrIiwgYW5kIHRoZW4gZ29lcyBvbiB0bworICAgZGlzY3VzcyB0aGVpciBv cGVyYXRpb24gaW4gV2luZG93cyBhbmQgT1MvMiwgd2hlcmUgbWF0dGVycyBhcmUgbXVjaAorICAg bW9yZSBjb21wbGljYXRlZC4KKworNC4yLjEuMS4gVEVSTUlOT0xPR1kKKworICAgU3RhbmRhcmQg SW5wdXQKKyAgICAgICAgICBUaGlzIGlzIGEgcHJlY2lzZSB0ZWNobmljYWwgdGVybSBkZW5vdGlu ZyB0aGUgbm9ybWFsIHNvdXJjZSBvZgorICAgICAgICAgIGlucHV0IGZvciBhIGNvbW1hbmQgb3Ig cHJvZ3JhbSwgd2hpY2ggaXMgdGhlIGtleWJvYXJkIG9mIHlvdXIKKyAgICAgICAgICB0ZXJtaW5h bCBieSBkZWZhdWx0LCBidXQgd2hpY2ggY2FuIGJlIHJlZGlyZWN0ZWQgdG8gYSBmaWxlIG9yCisg ICAgICAgICAgcGlwZS4KKworICAgU3RkaW4KKyAgICAgICAgICBBYmJyZXZpYXRpb24gZm9yIFN0 YW5kYXJkIElucHV0LgorCisgICBTdGFuZGFyZCBPdXRwdXQKKyAgICAgICAgICBBIHByZWNpc2Ug dGVjaG5pY2FsIHRlcm0gZGVub3RpbmcgdGhlIG5vcm1hbCBkZXN0aW5hdGlvbiBmb3IKKyAgICAg ICAgICBvdXRwdXQgZnJvbSBhIGNvbW1hbmQgb3IgcHJvZ3JhbSwgd2hpY2ggaXMgeW91ciB0ZXJt aW5hbCBzY3JlZW4KKyAgICAgICAgICBieSBkZWZhdWx0LCBidXQgd2hpY2ggY2FuIGJlIHJlZGly ZWN0ZWQgdG8gYSBmaWxlLgorCisgICBTdGRvdXQKKyAgICAgICAgICBBYmJyZXZpYXRpb24gZm9y IFN0YW5kYXJkIE91dHB1dC4KKworICAgU3RkaW8KKyAgICAgICAgICBBYmJyZXZpYXRpb24gZm9y IFN0YW5kYXJkIElucHV0IC8gU3RhbmRhcmQgT3V0cHV0LgorCisgICBJL08KKyAgICAgICAgICBB YmJyZXZpYXRpb24gZm9yIElucHV0IC8gT3V0cHV0LgorCisgICBTaGVsbAorICAgICAgICAgIFRl eHQtYmFzZWQgc3lzdGVtIGNvbW1hbmQgcHJvY2Vzc29yLCBzdWNoIGFzIHRoZSBVTklYIHNoZWxs LCBET1MKKyAgICAgICAgICBDT01NQU5ELkNPTSwgZXRjLgorCisgICBQaXBlCisgICAgICAgICAg QSBtZWNoYW5pc20gYnkgd2hpY2ggdGhlIHN0YW5kYXJkIG91dHB1dCBvZiBvbmUgcHJvZ3JhbSBp cyBzZW50CisgICAgICAgICAgdG8gdGhlIHN0YW5kYXJkIGlucHV0IG9mIGFub3RoZXIuCisKKyAg IFBpcGVsaW5lCisgICAgICAgICAgQSBzZXJpZXMgb2YgcHJvZ3JhbXMgY29ubmVjdGVkIGJ5IHBp cGVzLgorCis0LjIuMS4yLiBOT1RBVElPTgorCisgICBJbiBjb21tYW5kIGRlc2NyaXB0aW9ucywg ImNvbW1hbmQiIGlzIHJlcGxhY2VkIGJ5IGEgc2hlbGwgb3Igc3lzdGVtCisgICBjb21tYW5kIG9y IHBpcGVsaW5lLiBUaGUgY29tbWFuZCBuYW1lcyBzcGVjaWZpZWQgaW4gdGhlc2UgY29tbWFuZHMg YXJlCisgICBpbnRlcnByZXRlZCBieSB5b3VyIHNoZWxsLCBqdXN0IGFzIGlmIHlvdSB3ZXJlIHR5 cGluZyB0aGVtIGF0IHRoZSBzaGVsbAorICAgcHJvbXB0LCBhbmQgc28gaWYgdGhleSBhcmUgaW4g eW91ciBQQVRILCB0aGV5IHdpbGwgYmUgZm91bmQgaW4gdGhlCisgICBleHBlY3RlZCBtYW5uZXIu IFRoZXJlZm9yZSB5b3UgZG9uJ3QgaGF2ZSB0byBzcGVjaWZ5IGNvbXBsZXRlIHBhdGhuYW1lcwor ICAgZm9yIGNvbW1hbmRzIHRoYXQgYXJlIHByb2dyYW1zIChidXQgaXQgc2hvdWxkbid0IGh1cnQg aWYgeW91IGRvKS4KKworICAgVGhlIG5vcm1hbCBub3RhdGlvbiBmb3IgSS9PIHJlZGlyZWN0aW9u IGlzIGFzIGZvbGxvd3M6CisKKyAgPCAgUmVhZCBTdGRpbiBmcm9tIHRoZSBnaXZlbiBmaWxlLgor ICA+ICBTZW5kIFN0ZG91dCB0byB0aGUgZ2l2ZW4gZmlsZS4KKyAgfCAgU2VuZCBTdGRvdXQgZnJv bSB0aGUgY29tbWFuZCBvbiB0aGUgbGVmdCB0byB0aGUgY29tbWFuZCBvbiB0aGUgcmlnaHQuCisK KyAgIEV4YW1wbGVzOgorCisgICBzb3J0IDwgZm9vID4gYmFyCisgICAgICAgICAgU29ydHMgdGhl IGxpbmVzIGluIGZpbGUgImZvbyIgYW5kIHdyaXRlcyB0aGUgcmVzdWx0cyB0byBmaWxlCisgICAg ICAgICAgImJhciIKKworICAgZ3JlcCAtYyAic29tZSB0ZXh0IiAqLnR4dCB8IGdyZXAgLXYgIjow IiB8IHNvcnQgfCBwciAtMyB8IGxwcgorICAgICAgICAgIFRoaXMgaXMgYSBjb21tYW5kIHBpcGVs aW5lIGNvbXBvc2VkIG9mIDUgY29tbWFuZHM6CisKKyAgIGdyZXAgLWMgInNvbWUgdGV4dCIgKi50 eHQKKyAgICAgICAgICBMb29rcyBpbiBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgZW5kIHdpdGggIi50 eHQiIGZvciB0aGUgc3RyaW5nCisgICAgICAgICAgInNvbWUgdGV4dCIgYW5kIHdyaXRlcyB0byBT dGRvdXQgdGhlIG5hbWVzIG9mIGVhY2ggZmlsZSBmb2xsb3dlZAorICAgICAgICAgIGJ5IGEgY29s b24gYW5kIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgaW4gZWFjaC4KKworICAgZ3JlcCAtdiAi OjAiCisgICAgICAgICAgUHJpbnRzIHRvIFN0ZG91dCB0aGUgbGluZXMgZnJvbSBTdGRpbiB0aGF0 IGRvIE5PVCBjb250YWluIHRoZQorICAgICAgICAgIHN0cmluZyAiOjAiLCBpbiB0aGlzIGNhc2Us IGl0IHJlbW92ZXMgdGhlIG5hbWVzIG9mIGZpbGVzIHRoYXQgZG8KKyAgICAgICAgICBub3QgY29u dGFpbiAic29tZSB0ZXh0Ii4KKworICAgc29ydAorICAgICAgICAgIFNvcnRzIHRoZSBsaW5lcyBm cm9tIFN0ZGluIGFscGhhYmV0aWNhbGx5IHRvIFN0ZG91dC4KKworICAgcHIgLTMKKyAgICAgICAg ICBBcnJhbmdlcyB0aGUgbGluZXMgZnJvbSBTdGRpbiBpbiB0aHJlZSBjb2x1bW5zLgorCisgICBs cHIKKyAgICAgICAgICBQcmludHMgaXRzIFN0ZGluIG9uIHRoZSBkZWZhdWx0IHByaW50ZXIuCisK KyAgIE5vdGUgdGhhdCB0aGUgS2VybWl0IGZlYXR1cmVzIGRlc2NyaWJlZCBoZXJlIHdvcmsgb25s eSB3aXRoIGNvbW1hbmRzCisgICB0aGF0IHVzZSBTdGRpby4gSWYgeW91IGF0dGVtcHQgdG8gdXNl IHRoZW0gd2l0aCBjb21tYW5kcyB3aG9zZSBpbnB1dAorICAgYW5kIG91dHB1dCBjYW4gbm90IGJl IHJlZGlyZWN0ZWQsIEtlcm1pdCB3aWxsIG1vc3QgbGlrZWx5IGdldCBzdHVjay4KKyAgIEtlcm1p dCBoYXMgbm8gd2F5IG9mIHRlbGxpbmcgaG93IGFuIGV4dGVybmFsIGNvbW1hbmQgd29ya3MsIG5v ciB3aGF0CisgICB0aGUgc3ludGF4IG9mIHRoZSBzaGVsbCBpcywgc28gaXQncyB1cCB0byB5b3Ug dG8gbWFrZSBzdXJlIHlvdSB1c2UKKyAgIHRoZXNlIGZlYXR1cmVzIG9ubHkgd2l0aCByZWRpcmVj dGFibGUgY29tbWFuZHMuCisKKyAgIFRoZSBxdW90aW5nIHJ1bGVzIG9mIHlvdXIgc2hlbGwgYXBw bHkgdG8gdGhlIGNvbW1hbmQuIFRodXMgaW4gVU5JWCwKKyAgIHdoZXJlIEMtS2VybWl0IHRyaWVz IHRvIHVzZSB5b3VyIHByZWZlcnJlZCBzaGVsbCBmb3IgcnVubmluZyBjb21tYW5kcywKKyAgIHNo ZWxsICJtZXRhY2hhcmFjdGVycyIgd2l0aGluIGNvbW1hbmRzIG11c3QgYmUgZXNjYXBlZCBpZiB0 aGV5IGFyZSB0bworICAgYmUgdGFrZW4gbGl0ZXJhbGx5LCB1c2luZyB0aGUgbWV0aG9kcyBub3Jt YWwgZm9yIHlvdXIgc2hlbGwuIEZvcgorICAgZXhhbXBsZSwgdGhlIFVOSVggdHIgKHRyYW5zbGF0 ZSkgY29tbWFuZCBtdXN0IGhhdmUgaXRzIGFyZ3VtZW50cyBpbgorICAgcXVvdGVzOgorCisgIHRy ICJbYS16XSIgIltBLVpdIgorCisgICBvdGhlcndpc2UgdGhlIHNoZWxsIGlzIGxpa2VseSB0byBy ZXBsYWNlIHRoZW0gYnkgYWxsIGZpbGVuYW1lcyB0aGF0CisgICBtYXRjaCwgd2hpY2ggaXMgcHJv YmFibHkgbm90IHdoYXQgeW91IHdhbnQuIFRoaXMgaXMgYWxzbyB0cnVlIHdoZW4KKyAgIHVzaW5n IHlvdXIgc2hlbGwgZGlyZWN0bHksIGFuZCBoYXMgbm90aGluZyB0byBkbyB3aXRoIEtlcm1pdC4K KworNC4yLjEuMy4gU0VDVVJJVFkKKworICAgU29tZSBzaXRlcyBtaWdodCBub3Qgd2lzaCB0byBh bGxvdyBhY2Nlc3MgdG8gc3lzdGVtIGNvbW1hbmRzIG9yCisgICBleHRlcm5hbCBwcm9ncmFtcyBm cm9tIHdpdGhpbiBLZXJtaXQuIFN1Y2ggYWNjZXNzLCBpbmNsdWRpbmcgYWxsIHRoZQorICAgZmVh dHVyZXMgZGVzY3JpYmVkIGhlcmUsIGNhbiBiZSBkaXNhYmxlZCBpbiB2YXJpb3VzIHdheXM6CisK KyAgICAxLiBXaGVuIGJ1aWxkaW5nIGZyb20gc291cmNlIGNvZGUsIGluY2x1ZGUgLUROT1BVU0gg YW1vbmcgdGhlIENGTEFHUy4KKyAgICAyLiBBdCBydW50aW1lLCBnaXZlIHRoZSBOT1BVU0ggY29t bWFuZC4KKyAgICAzLiBGb3Igc2VydmVyIG1vZGUsIGdpdmUgdGhlIERJU0FCTEUgSE9TVCBjb21t YW5kLgorICAgIDQuIEltcGxpY2l0IHVzZSBvZiBwaXBlcyBjYW4gYmUgZGlzYWJsZWQgYXMgZGVz Y3JpYmVkIGluIFs0NDhdU2VjdGlvbgorICAgICAgIDQuMi40LgorCisgICBOb3RlOiAzIGFuZCA0 IGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBoYXZlIGRvbmUgMSBvciAyLgorCis0LjIuMi4gQ29t bWFuZHMgZm9yIFRyYW5zZmVycmluZyBmcm9tIGFuZCB0byBQaXBlcworCisgICBTRU5EIC9DT01N QU5EIHNlbmRzIGRhdGEgZnJvbSBhIGNvbW1hbmQgb3IgY29tbWFuZCBwaXBlbGluZSwgYW5kCisg ICBSRUNFSVZFIC9DT01NRU5UIHdyaXRlcyBkYXRhIHRvIGEgY29tbWFuZCBvciBwaXBlbGluZS4g VGhlIEdFVCAvQ09NTUFORAorICAgY29tbWFuZCBhc2tzIGEgc2VydmVyIHRvIHNlbmQgbWF0ZXJp YWwsIGFuZCB0aGVuIHdyaXRlcyB0aGUgaW5jb21pbmcKKyAgIG1hdGVyaWFsIHRvIGEgY29tbWFu ZCBvciBwaXBlbGluZS4gVGhlc2UgZmVhdHVyZXMsIGFsb25nIHdpdGggc3dpdGNoZXMKKyAgIChs aWtlICIvQ09NTUFORCIsIGRlc2NyaWJlZCBpbiBbNDQ5XVNlY3Rpb24gNC43KSBhcmUgbmV3IHRv IEMtS2VybWl0CisgICA2LjEuIFRoZSBmb2xsb3dpbmcgc3lub255bXMgYXJlIGFsc28gcHJvdmlk ZWQ6CisKKyAgQ1NFTkQgICAgPSBTRU5EIC9DT01NQU5ECisgIENSRUNFSVZFID0gUkVDRUlWRSAv Q09NTUFORAorICBDR0VUICAgICA9IEdFVCAvQ09NTUFORAorCisgICBOb25lIG9mIHRoZXNlIGNv bW1hbmRzIGNhbiBiZSB1c2VkIGlmIGEgU0VORCBvciBSRUNFSVZFIEZJTFRFUgorICAgKHJlc3Bl Y3RpdmVseSwgWzQ1MF1TZWN0aW9uIDQuMi4zKSBpcyBpbiBlZmZlY3QsIG9yIGlmIGEgTk9QVVNI IGNvbW1hbmQKKyAgIChbNDUxXVNlY3Rpb24gNC4yLjEuMykgaGFzIGJlZW4gZ2l2ZW4sIG9yIGlm IHRoZSBjdXJyZW50IHByb3RvY29sIGlzCisgICBub3QgS2VybWl0LgorCis0LjIuMi4xLiBTZW5k aW5nIGZyb20gYSBDb21tYW5kCisKKyAgIFNFTkQgL0NPTU1BTkQgY29tbWFuZCBbIGFzLW5hbWUg XQorICAgU0VORCAvQVMtTkFNRTphcy1uYW1lIC9DT01NQU5EIGNvbW1hbmQKKyAgIENTRU5EIGNv bW1hbmQgWyBhcy1uYW1lIF0KKyAgICAgICAgICBUaGVzZSB0aHJlZSBmb3JtcyBhcmUgdGhlIHNh bWUuIFRoZXkgd29yayBsaWtlIHRoZSBTRU5EIGNvbW1hbmQsCisgICAgICAgICAgYnV0IGluc3Rl YWQgb2Ygc2VuZGluZyBhIGZpbGUsIGl0IHNlbmRzIHRoZSBzdGFuZGFyZCBvdXRwdXQgb2YKKyAg ICAgICAgICB0aGUgZ2l2ZW4gY29tbWFuZCwgZWl0aGVyIHVuZGVyIHRoZSBjb21tYW5kJ3Mgb3du IG5hbWUsIG9yIGVsc2UKKyAgICAgICAgICB3aXRoIHRoZSBnaXZlbiBhcy1uYW1lLiBJZiB0aGUg Y29tbWFuZCBjb250YWlucyBzcGFjZXMsIGl0IG11c3QKKyAgICAgICAgICBiZSBlbmNsb3NlZCBp biBicmFjZXMuIEJyYWNlcyBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB0aGUKKyAgICAgICAgICBh cy1uYW1lIGlmIGl0IGNvbnRhaW5zIHNwYWNlcy4gSWYgYnJhY2VzIGFyZSBpbmNsdWRlZCBhcm91 bmQKKyAgICAgICAgICBlaXRoZXIgdGhlIGNvbW1hbmQgb3IgdGhlIGFzLW5hbWUsIHRoZXkgYXJl IHJlbW92ZWQgYWZ0ZXIKKyAgICAgICAgICBwYXJzaW5nIGJ1dCBiZWZvcmUgdXNlLiBBcyB3aXRo IFNFTkQsIHRoZSB0cmFuc2ZlciBpcyBpbiB0ZXh0IG9yCisgICAgICAgICAgYmluYXJ5IG1vZGUg YWNjb3JkaW5nIHRoZSBjdXJyZW50IEZJTEUgVFlQRSBzZXR0aW5nLCB1bmxlc3MgeW91CisgICAg ICAgICAgb3ZlcnJpZGUgdGhlIGdsb2JhbCB0cmFuc2ZlciBtb2RlIGJ5IGluY2x1ZGluZyBhIC9U RVhUIG9yCisgICAgICAgICAgL0JJTkFSWSBzd2l0Y2guIFRoZSBjb21tYW5kIG11c3QgcmVxdWly ZSBubyBpbnB1dC4KKworICAgV2hlbiBzZW5kaW5nIGZyb20gYSBjb21tYW5kIG9yIHBpcGVsaW5l LCBDLUtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcKKyAgIGluIGFkdmFuY2UgaG93IG11Y2gg ZGF0YSB3aWxsIGJlIHNlbnQsIGFuZCBzbyBpdCBjYW4gbm90IHNlbmQgdGhlIHNpemUKKyAgIHRv IHRoZSBvdGhlciBLZXJtaXQgaW4gdGhlIEF0dHJpYnV0ZSBwYWNrZXQsIGFuZCBzbyB0aGUgcmVj ZWl2aW5nCisgICBLZXJtaXQgaGFzIG5vIHdheSBvZiBkaXNwbGF5aW5nICJwZXJjZW50IGRvbmUi IG9yIGEgcHJvZ3Jlc3MgYmFyCisgICAodGhlcm1vbWV0ZXIpLgorCisgICBFeGFtcGxlcyB0aGF0 IG1ha2Ugc2Vuc2UgaW4gdGV4dCBtb2RlIChpbGx1c3RyYXRlZCBieSBjb21tb24gVU5JWAorICAg Y29tbWFuZHMpOgorCisgICBTRU5EIC9DT01NQU5EIGZpbmdlcgorICAgQ1NFTkQgZmluZ2VyCisg ICAgICAgICAgc2VuZHMgdGhlIGN1cnJlbnQgImZpbmdlciIgbGlzdGluZyAod2hvJ3MgbG9nZ2Vk IGluKSB1bmRlciB0aGUKKyAgICAgICAgICBuYW1lICJmaW5nZXIiLiBUaGUgdHdvIGZvcm1zICJz ZW5kIC9jb21tYW5kIiBhbmQgImNzZW5kIiBhcmUKKyAgICAgICAgICBlcXVpdmFsZW50OyB3ZSB3 b24ndCBib3RoZXIgc2hvd2luZyB0aGVtIGJvdGggaW4gdGhlIHJlc3Qgb2YgdGhlCisgICAgICAg ICAgZXhhbXBsZXMuCisKKyAgIFNFTkQgL0NPTU1BTkQ6e2Zpbmdlcn0KKyAgIENTRU5EIHtmaW5n ZXJ9CisgICAgICAgICAgU2FtZSBhcyBwcmV2aW91cyBleGFtcGxlIChicmFjZXMgYXJlIHJlbW92 ZWQgZnJvbSAie2Zpbmdlcn0iKS4KKworICAgU0VORCAvQ09NTUFORDp7IGZpbmdlciB9CisgICBD U0VORCB7IGZpbmdlciB9CisgICAgICAgICAgU2FtZSBhcyBwcmV2aW91cyBleGFtcGxlLCBidXQg bm90ZSB0aGF0IHRoZSBzcGFjZXMgYXJlIGtlcHQuCisgICAgICAgICAgVGhpcyBkb2VzIG5vdCBw cmV2ZW50IHRoZSBzaGVsbCBmcm9tIHJ1bm5pbmcgdGhlICJmaW5nZXIiCisgICAgICAgICAgcHJv Z3JhbSwgYnV0IGl0cyBvdXRwdXQgaXMgc2VudCB1bmRlciB0aGUgbmFtZSAiIGZpbmdlciAiICh3 aXRoCisgICAgICAgICAgYSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSkuCisKKyAgIFNFTkQg L0NPTU1BTkQ6ZmluZ2VyIC9BUy1OQU1FOnVzZXJsaXN0CisgICBDU0VORCBmaW5nZXIgdXNlcmxp c3QKKyAgICAgICAgICBzZW5kcyB0aGUgY3VycmVudCBmaW5nZXIgbGlzdGluZyB1bmRlciB0aGUg bmFtZSAidXNlcmxpc3QiLgorCisgICBTRU5EIC9DT01NQU5EOntmaW5nZXIgfCBzb3J0IC1yfSAv QVMtTkFNRTp1c2VybGlzdAorICAgQ1NFTkQge2ZpbmdlciB8IHNvcnQgLXJ9IHVzZXJsaXN0Cisg ICAgICAgICAgc2VuZHMgdGhlIGN1cnJlbnQgZmluZ2VyIGxpc3RpbmcsIHNvcnRlZCBpbiByZXZl cnNlIG9yZGVyLCB1bmRlcgorICAgICAgICAgIHRoZSBuYW1lICJ1c2VybGlzdCIuIFRoZSBicmFj ZXMgYXJlIG5lZWRlZCB0byBkaXN0aW5ndWlzaCB0aGUKKyAgICAgICAgICBjb21tYW5kIGZyb20g dGhlIGFzLW5hbWUuCisKKyAgIFNFTkQgL0NPTU1BTkQ6e2ZpbmdlciB8IHNvcnQgLXJ9IC9BUy1O QU1FOnt1c2VybGlzdH0KKyAgIENTRU5EIHtmaW5nZXIgfCBzb3J0IC1yfSB7dXNlcmxpc3R9Cisg ICAgICAgICAgU2FtZSBhcyBwcmV2aW91cyBleGFtcGxlIChicmFjZXMgYXJlIHJlbW92ZWQgZnJv bSAie3VzZXJsaXN0fSIpLgorCisgICBTRU5EIC9DT01NQU5EOntmaW5nZXIgfCBzb3J0IC1yfQor ICAgICAgICAgIC9BUy1OQU1FOntcZnJlcGxhY2UoXHYoZmlsZW5hbWUpLFwzMixfKX0KKworICAg Q1NFTkQge2ZpbmdlciB8IHNvcnQgLXJ9IHtcZnJlcGxhY2UoXHYoZmlsZW5hbWUpLFwzMixfKX0K KyAgICAgICAgICBMaWtlIHRoZSBwcmV2aW91cyBleGFtcGxlLCBidXQgc2VuZHMgdGhlIG91dHB1 dCBvZiB0aGUgY29tbWFuZAorICAgICAgICAgIHVuZGVyIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5k LCBidXQgd2l0aCBhbGwgc3BhY2VzIChcMzIpCisgICAgICAgICAgcmVwbGFjZWQgYnkgdW5kZXJz Y29yZXMsIHNvIHRoZSBhcy1uYW1lIGlzICJmaW5nZXJffF9zb3J0Xy1yIi4KKworICAgRXhhbXBs ZXMgdGhhdCBtYWtlIHNlbnNlIGluIGJpbmFyeSBtb2RlICh0aHJlZSBlcXVpdmFsZW50IGZvcm1z IGFyZQorICAgc2hvd24pOgorCisgICBTRU5EIC9DT01NQU5EIC9CSU5BUlkge3RhciBjZiAtIC4g fCBnemlwIC1jfSBteWRpci50YXIuZ3oKKyAgIFNFTkQgL0NPTU1BTkQgL0JJTkFSWSAvQVMtTkFN RTpteWRpci50YXIuZ3oge3RhciBjZiAtIC4gfCBnemlwIC1jfQorICAgQ1NFTkQgL0JJTkFSWSB7 dGFyIGNmIC0gLiB8IGd6aXAgLWN9IG15ZGlyLnRhci5negorICAgICAgICAgIE1ha2VzIGEgdGFy IGFyY2hpdmUgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBjb21wcmVzc2VzIGl0IHdpdGgKKyAg ICAgICAgICB0aGUgR05VIGd6aXAgcHJvZ3JhbSwgYW5kIHNlbmRzIGl0IGFzICJteWRpci50YXIu Z3oiLiBUaGUgb3RoZXIKKyAgICAgICAgICBLZXJtaXQgY2FuLCBvZiBjb3Vyc2UsIGp1c3Qgc3Rv cmUgaXQgYXMgYSBmaWxlLCBvciBpdCBjYW4gdXNlCisgICAgICAgICAgQ1JFQ0VJVkUgdG8gdW5j b21wcmVzcyBhbmQgZGVhcmNoaXZlIGl0IGFzIHBhcnQgb2YgdGhlIHRyYW5zZmVyCisgICAgICAg ICAgcHJvY2Vzcy4KKworICAgV2hlbiB1c2luZyBhICJwaXBlbGluZSIgb2YgY29tbWFuZHMgaW4g dGhlIGNvbW1hbmQgZmllbGQsIG9idmlvdXNseSwKKyAgIHRoZSBmaXJzdCBjb21tYW5kIG11c3Qg bm90IHJlcXVpcmUgYW55IGlucHV0LCBhbmQgdGhlIGxhc3QgY29tbWFuZAorICAgc2hvdWxkIHBy b2R1Y2Ugc29tZSBvdXRwdXQsIGFuZCBhbGwgaW50ZXJtZWRpYXRlIGNvbW1hbmRzIHNob3VsZCBn ZXQKKyAgIHNvbWUgaW5wdXQgYW5kIHByb2R1Y2Ugc29tZSBvdXRwdXQuCisKKzQuMi4yLjIuIFJl Y2VpdmluZyB0byBhIENvbW1hbmQKKworICAgUkVDRUlWRSAvQ09NTUFORCBjb21tYW5kCisgICBD UkVDRUlWRSBjb21tYW5kCisgICAgICAgICAgVGhpcyBpcyBsaWtlIFJFQ0VJVkUsIGV4Y2VwdCBp bmNvbWluZyBtYXRlcmlhbCBpcyB3cml0dGVuIHRvIHRoZQorICAgICAgICAgIHN0YW5kYXJkIGlu cHV0IG9mIHRoZSBnaXZlbiBjb21tYW5kLCBpbiB0ZXh0IG9yIGJpbmFyeSBtb2RlCisgICAgICAg ICAgYWNjb3JkaW5nIHRvIHRoZSBub3JtYWwgcnVsZXMgZm9yIGZpbGUgcmVjZXB0aW9uLiBCZSBz dXJlIHRvCisgICAgICAgICAgaW5jbHVkZSBhIHJlZGlyZWN0b3IgdG8gYSBmaWxlIChpZiB0aGUg Y29tbWFuZCBub3JtYWxseSB3cml0ZXMKKyAgICAgICAgICB0byBzdGFuZGFyZCBvdXRwdXQpLCBv ciB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIHdvbid0IGdvCisgICAgICAgICAgYW55d2hlcmUu IFRoZSBjb21tYW5kIG1heSBjb250YWluIHNwYWNlczsgYnJhY2VzIGFyZSBub3QgbmVlZGVkLAor ICAgICAgICAgIGJ1dCB0aGV5IGFyZSByZW1vdmVkIGlmIHVzZWQuCisKKyAgIFdBUk5JTkc6IEMt S2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZyBhbnl0aGluZyBhYm91dCB0aGUgY29tbWFuZCwg b3IKKyAgIGV2ZW4gd2hldGhlciBpdCBpcyBhIGNvbW1hbmQuIFRodXMgdGhpcyBjb21tYW5kIHdp bGwgYWx3YXlzIGNhdXNlCisgICBDLUtlcm1pdCB0byBlbnRlciBwcm90b2NvbCBtb2RlLCBhcyBs b25nIGFzIHNvbWUgdGV4dCBpcyBzcGVjaWZpZWQgaW4KKyAgIHRoZSBjb21tYW5kIGZpZWxkLiBI b3dldmVyLCBpZiB0aGUgdGV4dCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEKKyAgIGNvbW1hbmQs IHRoZSB0cmFuc2ZlciB3aWxsIGV2ZW50dWFsbHkgZmFpbCB3aXRoIGEgbWVzc2FnZSBzdWNoIGFz CisgICAiRXJyb3Igd3JpdGluZyBkYXRhIiBvciAiRmFpbHVyZSB0byBjbG9zZSBmaWxlIi4KKwor ICAgRXhhbXBsZXMgZm9yIHRleHQgbW9kZSAoaW4gVU5JWCk6CisKKyAgIFJFQ0VJVkUgL0NPTU1B TkQgc29ydCAtciA+IHJldmVyc2UudHh0CisgICBDUkVDRUlWRSBzb3J0IC1yID4gcmV2ZXJzZS50 eHQKKyAgICAgICAgICBUaGUgdGV4dCB0aGF0IGlzIHJlY2VpdmVkIGlzIHNvcnRlZCBpbiByZXZl cnNlIG9yZGVyIGFuZCBzdG9yZWQKKyAgICAgICAgICBpbiB0aGUgZmlsZSAicmV2ZXJzZS50eHQi LiBUaGUgdHdvIGZvcm1zIHNob3duIGFyZSBlcXVpdmFsZW50LgorCisgICBSRUNFSVZFIC9DT01N QU5EIHtzb3J0IC1yID4gcmV2ZXJzZS50eHR9CisgICBDUkVDRUlWRSB7c29ydCAtciA+IHJldmVy c2UudHh0fQorICAgICAgICAgIFRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBleGFtcGxlOyBpZiBi cmFjZXMgYXJlIGluY2x1ZGVkLCB0aGV5CisgICAgICAgICAgYXJlIHNpbXBseSByZW1vdmVkLgor CisgICBSRUNFSVZFIC9DT01NQU5EIHtzb3J0IC1yID4gXGZsb3dlcihcdihmaWxlbmFtZSkpLnJl dmVyc2V9CisgICBDUkVDRUlWRSB7c29ydCAtciA+IFxmbG93ZXIoXHYoZmlsZW5hbWUpKS5yZXZl cnNlfQorICAgICAgICAgIFNhbWUgYnV0IHN0b3JlcyByZXN1bHQgdW5kZXIgdGhlIGluY29taW5n IGZpbGVuYW1lLCBsb3dlcmNhc2VkLAorICAgICAgICAgIGFuZCB3aXRoICIucmV2ZXJzZSIgYXBw ZW5kZWQgdG8gaXQuCisKKyAgIFJFQ0VJVkUgL0NPTU1BTkQgc29ydAorICAgQ1JFQ0VJVkUgc29y dAorICAgICAgICAgIERvZXMgbm90aGluZyB1c2VmdWwsIHNpbmNlIHRoZSBvdXRwdXQgb2Ygc29y dCBoYXMgbm93aGVyZSB0byBnby4KKworICAgUkVDRUlWRSAvQ09NTUFORCBzb3J0IC1yIHwgcHIg LTMgfCBscHIgLVBsYXNlcmpldAorICAgQ1JFQ0VJVkUgc29ydCAtciB8IHByIC0zIHwgbHByIC1Q bGFzZXJqZXQKKyAgICAgICAgICBUaGUgdGV4dCB0aGF0IGlzIHJlY2VpdmVkIGlzIHNvcnRlZCBp biByZXZlcnNlIG9yZGVyLCBhcnJhbmdlZAorICAgICAgICAgIGludG8gdGhyZWUgY29sdW1ucywg YW5kIHNlbnQgdG8gdGhlICJsYXNlcmpldCIgcHJpbnRlci4KKworICAgRXhhbXBsZXMgZm9yIGJp bmFyeSBtb2RlOgorCisgICBSRUNFSVZFIC9DT01NQU5EOntndW56aXAgLWMgfCB0YXIgeGYgLX0K KyAgIENSRUNFSVZFIHtndW56aXAgLWMgfCB0YXIgeGYgLX0KKyAgICAgICAgICBBc3N1bWluZyB0 aGUgZGF0YSB0aGF0IGlzIHJlY2VpdmVkIGlzIGEgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSwKKyAg ICAgICAgICB1bmNvbXByZXNzZXMgdGhlIGFyY2hpdmUgYW5kIHBhc3NlcyBpdCB0byB0YXIgZm9y IGV4dHJhY3Rpb24uIEluCisgICAgICAgICAgdGhpcyBjYXNlIHRoZSBicmFjZXMgYXJlIG5lZWRl ZCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgZmluYWwgIi0iCisgICAgICAgICAgd291bGQgYmUgdGFr ZW4gYXMgYSBjb21tYW5kIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKHNlZQorICAgICAgICAgIFs0 NTJdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZGl0aW9uLCBwLjMzKS4KKworICAgR0VUIC9DT01NQU5E IHJlbW90ZS1maWxlIGNvbW1hbmQKKyAgIEdFVCAvQ09NTUFORCAvQVMtTkFNRTpjb21tYW5kIHJl bW90ZS1maWxlCisgICBDR0VUIHJlbW90ZS1maWxlIGNvbW1hbmQKKyAgICAgICAgICBUaGlzIGNv bW1hbmQgdGVsbHMgdGhlIEtlcm1pdCBjbGllbnQgdG8gc2VuZCBhIEdFVCByZXF1ZXN0IGZvcgor ICAgICAgICAgIHRoZSBnaXZlbiByZW1vdGUgZmlsZSB0byBhIEtlcm1pdCBzZXJ2ZXIuIFVubGlr ZSBHRVQsIGhvd2V2ZXIsCisgICAgICAgICAgdGhlIGluY29taW5nIG1hdGVyaWFsIGlzIHdyaXR0 ZW4gdG8gYSBjb21tYW5kLCByYXRoZXIgdGhhbiB0byBhCisgICAgICAgICAgZmlsZS4gSWYgdGhl IHJlbW90ZS1maWxlIG9yIHRoZSBjb21tYW5kIGNvbnRhaW4gc3BhY2VzLCB0aGV5CisgICAgICAg ICAgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMuIFRoZSBzYW1lIGNhdXRpb25zIGFib3V0IHRo ZSBjb21tYW5kCisgICAgICAgICAgYXBwbHkgYXMgZm9yIENSRUNFSVZFLgorCisgICBFeGFtcGxl cyAoZm9yIFVOSVgpOgorCisgICBHRVQgL0NPTU1BTkQgb29mYS50eHQgc29ydCAtciA+IG9vZmEu bmV3CisgICBHRVQgL0NPTU1BTkQge29vZmEudHh0fSB7c29ydCAtciA+IG9vZmEubmV3fQorICAg Q0dFVCBvb2ZhLnR4dCBzb3J0IC1yID4gb29mYS5uZXcKKyAgIENHRVQge29vZmEudHh0fSB7c29y dCAtciA+IG9vZmEubmV3fQorICAgICAgICAgIFRoZXNlIGZvdXIgYXJlIGVxdWl2YWxlbnQuIEVh Y2ggb2YgdGhlbSByZXF1ZXN0cyB0aGUgc2VydmVyIHRvCisgICAgICAgICAgc2VuZCBpdHMgIm9v ZmEudHh0IiBmaWxlLCBhbmQgYXMgaXQgYXJyaXZlcywgaXQgaXMgc29ydGVkIGluCisgICAgICAg ICAgcmV2ZXJzZSBvcmRlciBhbmQgd3JpdHRlbiB0byAib29mYS5uZXciLgorCisgICBHRVQgL0NP TU1BTkQge3Byb2ZpbGUgZXhlYyBhfSBscHIKKyAgIEdFVCAvQ09NTUFORCB7cHJvZmlsZSBleGVj IGF9IHtscHJ9CisgICBHRVQgL0NPTU1BTkQgL0FTLU5BTUU6bHByIHtwcm9maWxlIGV4ZWMgYX0K KyAgIEdFVCAvQ09NTUFORCAvQVMtTkFNRTp7bHByfSB7cHJvZmlsZSBleGVjIGF9CisgICBHRVQg L0NPTU1BTkQgL0FTOmxwciB7cHJvZmlsZSBleGVjIGF9CisgICBDR0VUIHtwcm9maWxlIGV4ZWMg YX0gbHByCisgICBDR0VUIHtwcm9maWxlIGV4ZWMgYX0ge2xwcn0KKyAgICAgICAgICBIZXJlIHRo ZSByZW1vdGUgZmlsZW5hbWUgY29udGFpbnMgc3BhY2VzIHNvIGl0IE1VU1QgYmUgZW5jbG9zZWQK KyAgICAgICAgICBpbiBicmFjZXMuIEFzIGl0IGFycml2ZXMgaXQgaXMgc2VudCB0byB0aGUgbHBy IHByb2dyYW0gZm9yCisgICAgICAgICAgcHJpbnRpbmcuIEJyYWNlcyBhcmUgb3B0aW9uYWwgYXJv dW5kICJscHIiIHNpbmNlIGl0IGNvbnRhaW5zIG5vCisgICAgICAgICAgc3BhY2VzLgorCisgICBH RVQgL0NPTU1BTkQgKi50eHQge2NhdCA+PiBuZXcudHh0fQorICAgR0VUIC9BUy1OQU1FOntjYXQg Pj4gbmV3LnR4dH0gL0NPTU1BTkQgKi50eHQKKyAgIENHRVQgKi50eHQge2NhdCA+PiBuZXcudHh0 fQorICAgICAgICAgIFRoaXMgZ2V0cyBhbGwgdGhlICIudHh0IiBmaWxlcyBmcm9tIHRoZSBzZXJ2 ZXIgYW5kIGNvbmNhdGVuYXRlcworICAgICAgICAgIHRoZW0gYWxsIGludG8gYSBzaW5nbGUgIm5l dy50eHQiIGZpbGUgb24gdGhlIGNsaWVudC4KKworICAgR0VUIC9DT01NQU5EICoudHh0IHtlY2hv IFx2KGZpbGVuYW1lKT4+bmV3LnR4dDtjYXQ+Pm5ldy50eHR9CisgICBDR0VUICoudHh0IHtlY2hv IFx2KGZpbGVuYW1lKT4+bmV3LnR4dDtjYXQ+Pm5ldy50eHR9CisgICAgICAgICAgQXMgYWJvdmUs IGJ1dCBpbnNlcnRzIGVhY2ggZmlsZSdzIG5hbWUgYmVmb3JlIGl0cyBjb250ZW50cy4KKworNC4y LjMuIFVzaW5nIEZpbGUtVHJhbnNmZXIgRmlsdGVycworCisgICBUaGUgY29tbWFuZHMgZGVzY3Jp YmVkIGluIFs0NTNdU2VjdGlvbiA0LjIuMiBsZXQgeW91IHNlbmQgdGhlIG91dHB1dCBvZgorICAg YSBjb21tYW5kLCBvciByZWNlaXZlIGRhdGEgaW50byBhIGNvbW1hbmQuIEJ1dCB3aGF0IGlmIHlv dSB3YW50IHRvCisgICBzcGVjaWZ5IHByZXByb2Nlc3NpbmcgZm9yIGZpbGVzIHRoYXQgeW91IHNl bmQsIG9yIHBvc3Rwcm9jZXNzaW5nIG9mCisgICBmaWxlcyB0aGF0IHlvdSByZWNlaXZlLCBldmVu IHdoZW4gbXVsdGlwbGUgZmlsZXMgYXJlIGludm9sdmVkPyBGb3IgdGhpcworICAgeW91IG5lZWQg YSB3YXkgdG8gc3BlY2lmeSBzZW5kIGFuZCByZWNlaXZlIGZpbHRlcnMuIFRoZSBjb21tYW5kcyBh cmUKKyAgIFNFVCBTRU5EIEZJTFRFUiBhbmQgU0VUIFJFQ0VJVkUgRklMVEVSOyBTSE9XIFBST1RP Q09MIGRpc3BsYXlzIHRoZQorICAgY3VycmVudCBzZXR0aW5ncy4KKworNC4yLjMuMS4gVGhlIFNF TkQgRmlsdGVyCisKKyAgIFNFVCBTRU5EIEZJTFRFUiBbIGNvbW1hbmQgXQorICAgICAgICAgIFRo aXMgY29tbWFuZCBzcGVjaWZpZXMgYSBjb21tYW5kIHRvIGJlIHJ1biBvbiBhbnkgZmlsZSB0aGF0 IHlvdQorICAgICAgICAgIFNFTkQgKG9yIE1PVkUsIE1TRU5ELCBldGMpLiBJdCBhbHNvIGFwcGxp ZXMgdG8gZmlsZXMgc2VudCB3aGVuCisgICAgICAgICAgaW4gc2VydmVyIG1vZGUsIGluIHJlc3Bv bnNlIHRvIEdFVCBjb21tYW5kcywgYnV0IG5vdCB0byB0aGUKKyAgICAgICAgICByZXN1bHRzIG9m IFJFTU9URSBjb21tYW5kcyBsaWtlIFJFTU9URSBESVJFQ1RPUlksIFJFTU9URSBUWVBFLAorICAg ICAgICAgIFJFTU9URSBIT1NULCBldGMuIFRoZSBjb21tYW5kIG1heSBiZSwgYnV0IG5lZWQgbm90 IGJlLCBlbmNsb3NlZAorICAgICAgICAgIGluIGJyYWNlczsgaWYgaXQgaXMsIHRoZSBicmFjZXMg YXJlIHN0cmlwcGVkIGJlZm9yZSB1c2UuIFRoZQorICAgICAgICAgIG91dHB1dCBvZiB0aGlzIGNv bW1hbmQgaXMgc2VudCwgcmF0aGVyIHRoYW4gdGhlIGZpbGUgaXRzZWxmLiBUaGUKKyAgICAgICAg ICBjdXJyZW50IEZJTEUgVFlQRSBzZXR0aW5nIChURVhUIG9yIEJJTkFSWSkgYXBwbGllcyB0byB0 aGUgb3V0cHV0CisgICAgICAgICAgb2YgdGhlIGNvbW1hbmQuIFRoZSBjb21tYW5kIG11c3QgY29u dGFpbiBhdCBsZWFzdCBvbmUgaW5zdGFuY2UKKyAgICAgICAgICBvZiBcdihmaWxlbmFtZSksIGZv ciB3aGljaCB0aGUgbmFtZSBvZiB0aGUgYWN0dWFsIGZpbGUgaXMKKyAgICAgICAgICBzdWJzdGl0 dXRlZC4gSWYgdGhlIGNvbW1hbmQgaXMgb21pdHRlZCwgdGhlIHNlbmQgZmlsdGVyIGlzCisgICAg ICAgICAgcmVtb3ZlZCBhbmQgZmlsZXMgYXJlIHNlbnQgaW4gdGhlIG5vcm1hbCBtYW5uZXIuCisK KyAgIFRoZSBTRVQgU0VORCBGSUxURVIgc2V0cyB1cCBhICJnbG9iYWwiIGZpbHRlciAtLSB0aGF0 IGlzLCBvbmUgdGhhdAorICAgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudCBmaWxlLXNlbmRpbmcg Y29tbWFuZHMgdW50aWwgeW91IGNoYW5nZSBvcgorICAgcmVtb3ZlIGl0LiBZb3UgY2FuIGFsc28g c3BlY2lmeSBhICJsb2NhbCIgZmlsdGVyIHRvIGJlIHVzZWQgaW4gYQorICAgc3BlY2lmaWMgZmls ZS1zZW5kaW5nIGNvbW1hbmQgYnkgdXNpbmcgdGhlIC9GSUxURVIgc3dpdGNoIChzZWUKKyAgIFs0 NTRdU2VjdGlvbiAxLjUpOyBmb3IgZXhhbXBsZToKKworICBTRU5EIC9GSUxURVI6Y29tbWFuZCBb IG90aGVyLXN3aXRjaGVzIF0gZmlsZW5hbWUKKworICAgQmVzaWRlcyBcdihmaWxlbmFtZSksIHlv dSBjYW4gaW5jbHVkZSBhbnkgb3RoZXIgc2NyaXB0IHByb2dyYW1taW5nCisgICBub3RhdGlvbiBp biB0aGUgc2VuZCBmaWx0ZXI6IHZhcmlhYmxlIG5hbWVzLCBhcnJheSByZWZlcmVuY2VzLCBjYWxs cyB0bworICAgYnVpbHQtaW4gc3RyaW5nIG9yIG90aGVyIGZ1bmN0aW9ucywgYW5kIHNvIG9uLiBU aGVzZSBhcmUgZXZhbHVhdGVkCisgICBkdXJpbmcgZmlsZSB0cmFuc2ZlciwgTk9UIGR1cmluZyBw YXJzaW5nLCBhbmQgdGhleSBhcmUgZXZhbHVhdGVkCisgICBzZXBhcmF0ZWx5IGZvciBlYWNoIGZp bGUuCisKKyAgIFdoZW4gdGhlIFNFTkQgb3IgTU9WRSAoU0VORCAvREVMRVRFKSBjb21tYW5kIGlz IHVzZWQgd2l0aCBhIHNlbmQKKyAgIGZpbHRlciwgdGhlIG91dHB1dCBmcm9tIHRoZSBmaWx0ZXIg aXMgc2VudCB1bmRlciB0aGUgZmlsZSdzIG9yaWdpbmFsCisgICBuYW1lIHVubGVzcyB5b3Ugc3Bl Y2lmeSBhbiAiYXMtbmFtZSIgb3IgdGVtcGxhdGUuIFRoZSBBdHRyaWJ1dGUgcGFja2V0CisgICAo aWYgYW55KSBjb250YWlucyB0aGUgb3JpZ2luYWwgZmlsZSdzIGF0dHJpYnV0ZXMgKHNpemUsIGNy ZWF0aW9uIGRhdGUsCisgICBldGMpLiBTbyAoZm9yIGV4YW1wbGUpIGlmIHRoZSBmaWx0ZXIgY2hh bmdlcyB0aGUgZmlsZSdzIHNpemUsIHRoZQorICAgcHJvZ3Jlc3MgdGhlcm1vbWV0ZXIgbWlnaHQg YmUgd3JvbmcuIChXZSBjYW4ndCBzZW5kIHRoZSBzaXplIG9mIHRoZQorICAgb3V0cHV0IGZyb20g dGhlIGZpbHRlciwgYmVjYXVzZSBpdCBpcyBub3Qga25vd24gdW50aWwgdGhlIHRyYW5zZmVyIGlz CisgICBmaW5pc2hlZC4pIElmIHlvdSBwcmVmZXIgdGhhdCB0aGUgc2l6ZSBub3QgYmUgc2VudCwg dXNlICJzZXQgYXR0cmlidXRlcworICAgc2l6ZSBvZmYiLgorCisgICBZb3UgY2FuIG5vdCB1c2Ug c2VuZCBmaWx0ZXJzIHdpdGggUkVTRU5EIChTRU5EIC9SRUNPVkVSKSBvciBQU0VORCAoU0VORAor ICAgL1NUQVJUKS4KKworICAgRXhhbXBsZXMgZm9yIHRleHQgbW9kZToKKworICAgU0VUIFNFTkQg RklMVEVSIHNvcnQgLXIgXHYoZmlsZW5hbWUpIDsgQnJhY2VzIG1heSBiZSBvbWl0dGVkCisgICBT RVQgU0VORCBGSUxURVIge3NvcnQgLXIgXHYoZmlsZW5hbWUpfSA7IEJyYWNlcyBtYXkgYmUgaW5j bHVkZWQKKyAgIFNFTkQgKi50eHQKKyAgICAgICAgICBUaGlzIHNlbmRzIGV2ZXJ5IGZpbGUgaW4g dGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdob3NlIG5hbWUgZW5kcworICAgICAgICAgIHdpdGggIi50 eHQiIHVuZGVyIGl0cyBvd24gbmFtZSwgYnV0IHdpdGggaXRzIGxpbmVzIHNvcnRlZCBpbgorICAg ICAgICAgIHJldmVyc2Ugb3JkZXIuCisKKyAgIFNFTkQgL0ZJTFRFUjp7c29ydCAtciBcdihmaWxl bmFtZSl9ICoudHh0CisgICAgICAgICAgU2FtZSBhcyBhYm92ZSwgYnV0IHRoZSBmaWx0ZXIgYXBw bGllcyBvbmx5IHRvIHRoaXMgU0VORCBjb21tYW5kLgorICAgICAgICAgIEJyYWNlcyBhcmUgcmVx dWlyZWQgaW4gdGhpcyBjYXNlLgorCisgICBTRVQgU0VORCBGSUxURVIge3NvcnQgLXIgXHYoZmls ZW5hbWUpfQorICAgU0VORCBvb2ZhLnR4dCByZXZlcnNlLnR4dAorICAgICAgICAgIFNlbmRzIHRo ZSBvb2ZhLnR4dCBmaWxlIHdpdGggaXRzIGxpbmVzIHNvcnRlZCBpbiByZXZlcnNlIG9yZGVyCisg ICAgICAgICAgdW5kZXIgdGhlIG5hbWUgInJldmVyc2UudHh0Ii4KKworICAgU0VUIFNFTkQgRklM VEVSIHtzb3J0IC1yIFx2KGZpbGVuYW1lKX0KKyAgIFNFTkQgb29mYS4qIFx2KGZpbGVuYW1lKS5y ZXZlcnNlCisgICAgICAgICAgU2VuZHMgYWxsIHRoZSBvb2ZhLiogZmlsZXMgd2l0aCB0aGVpciBs aW5lcyBzb3J0ZWQgaW4gcmV2ZXJzZQorICAgICAgICAgIG9yZGVyOyBlYWNoIGZpbGUgaXMgc2Vu dCB1bmRlciBpdHMgb3duIG5hbWUgYnV0IHdpdGggIi5yZXZlcnNlIgorICAgICAgICAgIGFwcGVu ZGVkIHRvIGl0LgorCisgICBTRVQgU0VORCBGSUxURVIge3RyICJbYS16XSIgIltBLVpdIiA8IFx2 KGZpbGVuYW1lKX0KKyAgIFNFTkQgKi50eHQKKyAgICAgICAgICBTZW5kcyBhbGwgIi50eHQiIGZp bGVzIHVuZGVyIHRoZWlyIG93biBuYW1lcywgYnV0IHVwcGVyY2FzaW5nCisgICAgICAgICAgdGhl aXIgY29udGVudHMuCisKKyAgIE5vdGUgdGhhdCB0aGUgU0VORCBGSUxURVIgYXBwbGllcyBub3Qg b25seSB0byBmaWxlcyB0aGF0IGFyZSBzZW50IHdpdGgKKyAgIFNFTkQsIE1PVkUsIE1TRU5ELCBl dGMsIGJ1dCBhbHNvIHRvIGZpbGVzIHNlbnQgYnkgdGhlIEMtS2VybWl0IHNlcnZlcgorICAgaW4g cmVzcG9uc2UgdG8gR0VUIHJlcXVlc3RzLgorCisgICBFeGFtcGxlcyBmb3IgYmluYXJ5IG1vZGU6 CisKKyAgIFNFVCBTRU5EIEZJTFRFUiB7Z3ppcCAtYyBcdihmaWxlbmFtZSl9CisgICBTRU5EIC9C SU5BUlkgb29mYS50eHQgb29mYS50eHQuZ3oKKyAgICAgICAgICBTZW5kcyB0aGUgb29mYS50eHQg ZmlsZSwgY29tcHJlc3NlZCBieSBnemlwLCBhcyBvb2ZhLnR4dC5nei4KKworICAgU0VORCAvQklO QVJZIC9GSUxURVI6e2d6aXAgLWMgXHYoZmlsZW5hbWUpfSBvb2ZhLnR4dCBvb2ZhLnR4dC5negor ICAgICAgICAgIEFzIGFib3ZlLCBidXQgdGhlIGZpbHRlciBhcHBsaWVzIG9ubHkgdG8gdGhpcyBT RU5EIGNvbW1hbmQuCisKKyAgIFNFVCBTRU5EIEZJTFRFUiB7Z3ppcCAtYyBcdihmaWxlbmFtZSl9 CisgICBTRU5EIC9CSU5BUlkgb29mYS4qIFxmdXBwZXIoXHJlcGxhY2UoXHYoZmlsZW5hbWUpLC4s XykpLkdaCisgICAgICAgICAgU2VuZHMgYWxsIHRoZSBvb2ZhLiogZmlsZXMsIGNvbXByZXNzZWQg YnkgZ3ppcCwgZWFjaCB1bmRlciBpdHMKKyAgICAgICAgICBvd24gbmFtZSwgYnV0IHdpdGggdGhl IG5hbWUgdXBwZXJjYXNlZCwgYWxsIHBlcmlvZHMgd2l0aGluIHRoZQorICAgICAgICAgIG5hbWUg Y29udmVydGVkIHRvIHVuZGVyc2NvcmVzLCBhbmQgIi5HWiIgYXBwZW5kZWQgdG8gaXQuIFNvLCBm b3IKKyAgICAgICAgICBleGFtcGxlLCAib29mYS50eHQiIGlzIHNlbnQgYXMgIk9PRkFfVFhULkda Ii4KKworICAgSW4gdGhlIGd6aXAgZXhhbXBsZXMsIG5vdGUgdGhhdCB0aGUgYW1vdW50IG9mIGRh dGEgdGhhdCBpcyBzZW50IGlzCisgICBub3JtYWxseSBsZXNzIHRoYW4gdGhlIG9yaWdpbmFsIGZp bGUgc2l6ZSBiZWNhdXNlIGd6aXAgY29tcHJlc3NlcyB0aGUKKyAgIGZpbGUuIEJ1dCBLZXJtaXQg c2VuZHMgdGhlIG9yaWdpbmFsIGZpbGUgc2l6ZSBhaGVhZCBpbiB0aGUgYXR0cmlidXRlCisgICBw YWNrZXQgYW55d2F5ICh1bmxlc3MgeW91IHRlbGwgaXQgbm90IHRvbykuIFRodXMgdGhlIHRyYW5z ZmVyIHdpbGwKKyAgIHByb2JhYmx5IGFwcGVhciB0byB0ZXJtaW5hdGUgZWFybHksIGUuZy4gd2hl biB0aGUgcmVjZWl2ZXIncworICAgZmlsZS10cmFuc2ZlciBkaXNwbGF5IHRoZXJtb21ldGVyIGlz IG9ubHkgYXQgNDAlLiBJZiB0aGlzIGFubm95cyB5b3UsCisgICB0ZWxsIEtlcm1pdCB0byAic2V0 IGF0dHJpYnV0ZSBsZW5ndGggb2ZmIi4gT24gdGhlIG90aGVyIGhhbmQsIHlvdSBjYW4KKyAgIHVz ZSB0aGUgZmluYWwgcG9zaXRpb24gb2YgdGhlIHRoZXJtb21ldGVyIGFzIGEgbWVhc3VyZSBvZiB0 aGUKKyAgIGVmZmVjdGl2ZW5lc3Mgb2YgY29tcHJlc3Npb24uCisKKzQuMi4zLjIuIFRoZSBSRUNF SVZFIEZpbHRlcgorCisgICBTRVQgUkVDRUlWRSBGSUxURVIgWyBjb21tYW5kIF0KKyAgICAgICAg ICBUaGlzIGNvbW1hbmQgc3BlY2lmaWVzIHRoYXQgdGhlIGdpdmVuIGNvbW1hbmQgd2lsbCBiZSBy dW4gb24gYW55CisgICAgICAgICAgZmlsZSB0aGF0IGlzIHJlY2VpdmVkIGJlZm9yZSBpdCBpcyB3 cml0dGVuIHRvIGRpc2suIFRoZSBjb21tYW5kCisgICAgICAgICAgbWF5IGJlLCBidXQgbmVlZCBu b3QgYmUsIGVuY2xvc2VkIGluIGJyYWNlczsgaWYgaXQgaXMgdGhlIGJyYWNlcworICAgICAgICAg IGFyZSBzdHJpcHBlZCBiZWZvcmUgdXNlLiBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBhcmUK KyAgICAgICAgICBlcXVpdmFsZW50OgorCisgIFNFVCBSRUNFSVZFIEZJTFRFUiBzb3J0IC1yID4g XHYoZmlsZW5hbWUpCisgIFNFVCBSRUNFSVZFIEZJTFRFUiB7c29ydCAtciA+IFx2KGZpbGVuYW1l KX0KKworICAgVGhlIFJFQ0VJVkUgZmlsdGVyIGNvbW1hbmQgbWF5IGNvbnRhaW4gYSAiXHYoZmls ZW5hbWUpIiBzZXF1ZW5jZSB0byBiZQorICAgcmVwbGFjZWQgYnkgdGhlIGluY29taW5nIGZpbGVu YW1lIGZyb20gdGhlIGZpbGUgaGVhZGVyIHBhY2tldCwgYnV0IGl0CisgICBpcyBub3QgcmVxdWly ZWQuIEhvd2V2ZXIgeW91IG11c3QgdXNlIGl0IHdoZW5ldmVyIHlvdXIgZmlsdGVyIHdvdWxkCisg ICBub3JtYWxseSB3cml0ZSB0byBTdGRvdXQsIG90aGVyd2lzZSBpdHMgb3V0cHV0IHdpbGwgYmUg bG9zdC4KKworICAgVGhlIFJFQ0VJVkUgZmlsdGVyIGNvbW1hbmQgbWF5IGNvbnRhaW4gb25lIG9y IG1vcmUgIlx2KGZpbGVuYW1lKSIKKyAgIHNlcXVlbmNlIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBp bmNvbWluZyBmaWxlbmFtZSBmcm9tIHRoZSBmaWxlIGhlYWRlcgorICAgcGFja2V0LCBidXQgaXQg aXMgbm90IHJlcXVpcmVkLiBIb3dldmVyIHlvdSBtdXN0IHVzZSBpdCB3aGVuZXZlciB5b3VyCisg ICBmaWx0ZXIgd291bGQgbm9ybWFsbHkgd3JpdGUgdG8gU3Rkb3V0LCBvdGhlcndpc2UgaXRzIG91 dHB1dCB3aWxsIGJlCisgICBsb3N0LgorCisgICBSRUNFSVZFIC9GSUxURVI6Y29tbWFuZCBhbmQg R0VUIC9GSUxURVI6Y29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvCisgICBzcGVjaWZ5IGEgZmls dGVyIHRvIGJlIHVzZWQgZm9yIG9ubHkgb25lIGZpbGUtdHJhbnNmZXIgb3BlcmF0aW9uLgorCisg ICBVTklYIGV4YW1wbGVzIGZvciB0ZXh0IG1vZGU6CisKKyAgIFNFVCBSRUNFSVZFIEZJTFRFUiBs cHIKKyAgIFJFQ0VJVkUKKyAgICAgICAgICBBbGwgdGhlIGZpbGVzIHRoYXQgYXJlIHJlY2VpdmVk IGFyZSBzZW50IHRvIHRoZSBkZWZhdWx0IFVOSVgKKyAgICAgICAgICBwcmludCBzcG9vbGVyLgor CisgICBSRUNFSVZFIC9GSUxURVI6bHByCisgICAgICAgICAgU2FtZSBhcyBhYm92ZSwgZXhjZXB0 IHRoZSBscHIgZmlsdGVyIGlzIHVzZWQgb25seSB3aXRoIHRoaXMKKyAgICAgICAgICBSRUNFSVZF IGNvbW1hbmQuCisKKyAgIFJFQ0VJVkUgbHByCisgICAgICAgICAgVGhpcyBpcyBwcm9iYWJseSBu b3Qgd2hhdCB5b3Ugd2FudDsgaXQgY3JlYXRlcyBhIGZpbGUgY2FsbGVkCisgICAgICAgICAgbHBy LgorCisgICBTRVQgUkVDRUlWRSBGSUxURVIge3NvcnQgLXIgPiBcdihmaWxlbmFtZSl9CisgICBS RUNFSVZFCisgICAgICAgICAgU3RvcmVzIGVhY2ggaW5jb21pbmcgZmlsZSB3aXRoIGl0cyBsaW5l cyBzb3J0ZWQgaW4gcmV2ZXJzZQorICAgICAgICAgIG9yZGVyLCB1bmRlciBpdHMgb3duIG5hbWUu CisKKyAgIFJFQ0VJVkUgL0ZJTFRFUjp7c29ydCAtciA+IFx2KGZpbGVuYW1lKX0KKyAgICAgICAg ICBBcyBhYm92ZSwgYnV0IHRoZSBmaWx0ZXIgaXMgdXNlZCBvbmx5IGZvciB0aGlzIFJFQ0VJVkUg Y29tbWFuZC4KKworICAgU0VUIFJFQ0VJVkUgRklMVEVSIHNvcnQgLXIgPiBcdihmaWxlbmFtZSkK KyAgIFJFQ0VJVkUgcmV2ZXJzZS50eHQKKyAgICAgICAgICBTdG9yZXMgZWFjaCBpbmNvbWluZyBm aWxlIHdpdGggaXRzIGxpbmVzIHNvcnRlZCBpbiByZXZlcnNlCisgICAgICAgICAgb3JkZXIsIHVu ZGVyIHRoZSBuYW1lICJyZXZlcnNlLnR4dCIuIFRoZSBhY3R1YWwgcmVzdWx0IGRlcGVuZHMKKyAg ICAgICAgICBvbiB0aGUgRklMRSBDT0xMSVNJT04gc2V0dGluZy4gSWYgaXQgaXMgT1ZFUldSSVRF IGFuZCBtdWx0aXBsZQorICAgICAgICAgIGZpbGVzIGFycml2ZSwgdGhlbiBlYWNoIGluY29taW5n IGZpbGUgZGVzdHJveXMgdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgICBJZiBpdCBpcyBCQUNL VVAgKHRoZSBkZWZhdWx0KSwgZmlsZW5hbWUgY29uZmxpY3RzIGFyZSByZXNvbHZlIGJ5CisgICAg ICAgICAgYWRkaW5nICJ2ZXJzaW9uIG51bWJlcnMiIHRvIHRoZSBmaWxlbmFtZXM6IHJldmVyc2Uu dHh0LAorICAgICAgICAgIHJldmVyc2UudHh0Ln4xfiwgcmV2ZXJzZS50eHQufjJ+LCBldGMuCisK KyAgIFNFVCBSRUNFSVZFIEZJTFRFUiBzb3J0IC1yID4gXHYoZmlsZW5hbWUpCisgICBSRUNFSVZF IFx2KGZpbGVuYW1lKS5yZXZlcnNlCisgICAgICAgICAgU3RvcmVzIGVhY2ggaW5jb21pbmcgZmls ZSB3aXRoIGl0cyBsaW5lcyBzb3J0ZWQgaW4gcmV2ZXJzZQorICAgICAgICAgIG9yZGVyLCB1bmRl ciB0aGUgbmFtZSBpdCBhcnJpdmVkIHdpdGgsIGJ1dCB3aXRoICIucmV2ZXJzZSIKKyAgICAgICAg ICBhcHBlbmRlZCB0byBpdC4KKworICAgU0VUIFJFQ0VJVkUgRklMVEVSIHNvcnQgLXIgPiBcdihm aWxlbmFtZSkKKyAgIFJFQ0VJVkUgXGZsb3dlcihcdihmaWxlbmFtZSkpLnJldmVyc2UKKyAgICAg ICAgICBMaWtlIHRoZSBwcmV2aW91cyBleGFtcGxlLCBidXQgZW5zdXJlcyB0aGF0IHRoZSBmaWxl bmFtZSBpcworICAgICAgICAgIGxvd2VyY2FzZS4KKworICAgICAgICAgIEV4YW1wbGVzIGZvciBi aW5hcnkgbW9kZToKKworICAgU0VUIFJFQ0VJVkUgRklMVEVSIGd1bnppcCAtYyA+IFx2KGZpbGVu YW1lKQorICAgUkVDRUlWRQorICAgICAgICAgIFRoaXMgcmVjZWl2ZXMgb25lIG9yIG1vcmUgcHJl c3VtYWJseSBjb21wcmVzc2VkIGZpbGUgYW5kCisgICAgICAgICAgdW5jb21wcmVzc2VzIGVhY2gg b25lIGludG8gYSBmaWxlIGhhdmluZyB0aGUgc2FtZSBuYW1lIGl0IHdhcworICAgICAgICAgIHNl bnQgd2l0aC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBmaWxlIGlzIHNlbnQgd2l0aCB0aGUgbmFtZQor ICAgICAgICAgIE9PRkEuVFhULkdaLCBpdCBpcyBzdG9yZWQgd2l0aCB0aGF0IG5hbWUsIGV2ZW4g YWZ0ZXIKKyAgICAgICAgICBkZWNvbXByZXNzaW9uLgorCisgICBTRVQgUkVDRUlWRSBGSUxURVIg Z3VuemlwIC1jID4gXHYoZmlsZW5hbWUpCisgICBSRUNFSVZFIFxmbG93ZXIoXGZzdWJzdHJpbmco XHYoZmlsZW5hbWUpLDEsXGZsZW5ndGgoXHYoZmlsZW5hbWUpKS0zKSkKKyAgICAgICAgICBMaWtl IHRoZSBwcmV2aW91cyBleGFtcGxlLCBidXQgdGhlIHJlc3VsdGluZyBmaWxlbmFtZSBoYXMgaXRz CisgICAgICAgICAgcmlnaHRtb3N0IHRocmVlIGNoYXJhY3RlcnMgcmVtb3ZlZCBmcm9tIGl0IGFu ZCB0aGUgcmVtYWluZGVyIGlzCisgICAgICAgICAgbG93ZXJjYXNlZC4gU28gaWYgdGhlIGluY29t aW5nIGZpbGVuYW1lIGlzIE9PRkEuVFhULkdaLCBpdCBpcworICAgICAgICAgIHN0b3JlZCBhcyBv b2ZhLnR4dCBhZnRlciBkZWNvbXByZXNzaW9uLgorCisgICBPZiBjb3Vyc2UgeW91IGRvbid0IHdh bnQgdG8gdHlwZSBzdWNoIGxvbmcgaGlkZW91cyBjb21tYW5kcywgc28gd2UgaGF2ZQorICAgYWxz byBpbnRyb2R1Y2VkIHNldmVyYWwgbmV3IGZ1bmN0aW9uczoKKworICAgXGZzdHJpcHgoc3RyaW5n WyxjaGFyYWN0ZXJdKQorICAgICAgICAgIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgcmlnaHRt b3N0IHNlZ21lbnQgb2YgdGhlIHN0cmluZyB0aGF0CisgICAgICAgICAgc3RhcnRzIHdpdGggdGhl IGdpdmVuIGNoYXJhY3Rlci4gSWYgbm8gY2hhcmFjdGVyIGlzIGdpdmVuLAorICAgICAgICAgIHBl cmlvZCAoLikgaXMgdXNlZC4gVGh1cyBpdCBpcyBtb3N0IGNvbnZlbmllbnRseSB1c2VkIGZvcgor ICAgICAgICAgIHN0cmlwcGluZyB0aGUgZXh0ZW5zaW9uIGZyb20gYSBmaWxlbmFtZSAob3IgdGhl IGRlY2ltYWwgcG9ydGlvbgorICAgICAgICAgIGZyb20gYSBmbG9hdGluZy1wb2ludCBudW1iZXIg d3JpdHRlbiBpbiBVUy9VSyBzdHlsZSkuIEV4YW1wbGVzOgorCisgICBcZnN0cmlweChPT0ZBLlRY VC5HWikgICAgICAgICAgICAgPT4gT09GQS5UWFQKKyAgIFxmc3RyaXB4KE9PRkEuVFhULkdaLC4p ICAgICAgICAgICA9PiBPT0ZBLlRYVAorICAgXGZzdHJpcHgoT09GQS5UWFQuR1osWCkgICAgICAg ICAgID0+IE9PRkEuVAorICAgXGZzdHJpcHgoXGZzdHJpcHgoT09GQS5UWFQuR1opKSAgID0+IE9P RkEKKyAgIFxmc3RyaXB4KCQxMDAuMDApICAgICAgICAgICAgICAgICA9PiAkMTAwCisKKyAgIFxm c3RyaXBuKHN0cmluZyxudW1iZXIpCisgICAgICAgICAgUmVtb3ZlcyB0aGUgcmlnaHRtb3N0IG51 bWJlciBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmluZy4KKyAgICAgICAgICBFeGFtcGxlczoKKwor ICAgXGZzdHJpcG4oT09GQS5UWFQuR1opICAgICAgICAgICAgID0+IE9PRkEuVFhULkdaCisgICBc ZnN0cmlwbihPT0ZBLlRYVC5HWiwzKSAgICAgICAgICAgPT4gT09GQS5UWFQKKyAgIFxmc3RyaXBu KE9PRkEuVFhULkdaLDcpICAgICAgICAgICA9PiBPT0ZBCisKKyAgIFxmc3RyaXBiKHN0cmluZ1ss YzFbLGMyXV0pCisgICAgICAgICAgU3RyaXBzIGVuY2xvc2luZyBtYXRjaGluZyBicmFjZXMsIGJy YWNrZXRzLCBwYXJlbnRoZXNlcywgb3IKKyAgICAgICAgICBxdW90ZXMgZnJvbSB0aGUgc3RyaW5n LiBUaGUgc2Vjb25kIGFyZ3VtZW50LCBjMSwgc3BlY2lmaWVzIHdoaWNoCisgICAgICAgICAga2lu ZCBvZiBlbmNsb3N1cmUgdG8gbG9vayBmb3I7IGlmIG5vdCBzcGVjaWZpZWQsIGFueSBlbmNsb3Np bmcKKyAgICAgICAgICAoKSwgW10sIDw+LCB7fSwgIiIsICcnLCBvciBgJyBhcmUgcmVtb3ZlZC4g SWYgYzEgaXMgc3BlY2lmaWVkCisgICAgICAgICAgYW5kIGMyIGlzIG5vdCwgdGhlbiBpZiBjMSBp cyBhbiBvcGVuaW5nIGJyYWNlLCBicmFja2V0LCBvcgorICAgICAgICAgIHBhcmVudGhlc2lzLCB0 aGUgbWF0Y2hpbmcgY2xvc2luZyBvbmUgaXMgc3VwcGxpZWQgYXV0b21hdGljYWxseQorICAgICAg ICAgIGFzIGMyLiBJZiBib3RoIGMxIGFuZCBjMiBhcmUgc3BlY2lmaWVkLCB0aGVuIHRvIGJlIHN0 cmlwcGVkIHRoZQorICAgICAgICAgIHN0cmluZyBtdXN0IGJlZ2luIHdpdGggYzEgYW5kIGVuZCB3 aXRoIGMyLiBJZiB0aGUgc3RyaW5nIGlzIG5vdAorICAgICAgICAgIGVuY2xvc2VkIGluIHRoZSBp bmRpY2F0ZWQgbWFubmVyLCB0aGUgcmVzdWx0IGlzIHRoZSBvcmlnaW5hbAorICAgICAgICAgIHN0 cmluZy4gRXhhbXBsZXM6CisKKyAgIFxmc3RyaXBiKCJhYmMiKSAgICAgICAgICAgICAgICAgICA9 PiBhYmMKKyAgIFxmc3RyaXBiKFthYmNdKSAgICAgICAgICAgICAgICAgICA9PiBhYmMKKyAgIFxm c3RyaXBiKFthYmMpICAgICAgICAgICAgICAgICAgICA9PiBbYWJjCisgICBcZnN0cmlwYig8YWJj PikgICAgICAgICAgICAgICAgICAgPT4gYWJjCisgICBcZnN0cmlwYig8YWJjPixbKSAgICAgICAg ICAgICAgICAgPT4gPGFiYz4KKyAgIFxmc3RyaXBiKChhYmMpKSAgICAgICAgICAgICAgICAgICA9 PiBhYmMKKyAgIFxmc3RyaXBiKChhYmMpLFspICAgICAgICAgICAgICAgICA9PiAoYWJjKQorICAg XGZzdHJpcGIoKGFiYykseyh9KSAgICAgICAgICAgICAgID0+IGFiYworICAgXGZzdHJpcGIoK2Fi YyspICAgICAgICAgICAgICAgICAgID0+ICthYmMrCisgICBcZnN0cmlwYigrYWJjKywrKSAgICAg ICAgICAgICAgICAgPT4gYWJjCisgICBcZnN0cmlwYigrYWJjKywrLF4pICAgICAgICAgICAgICAg PT4gK2FiYysKKyAgIFxmc3RyaXBiKCthYmNeLCssXikgICAgICAgICAgICAgICA9PiBhYmMKKyAg IFxmc3RyaXBiKCdhYmMnKSAgICAgICAgICAgICAgICAgICA9PiBhYmMKKyAgIFxmc3RyaXBiKGBh YmMnKSAgICAgICAgICAgICAgICAgICA9PiBhYmMKKyAgIFxmc3RyaXBiKGBgYWJjJycpICAgICAg ICAgICAgICAgICA9PiBgYWJjJworICAgXGZzdHJpcGIoXGZzdHJpcGIoYGBhYmMnJykpICAgICAg ID0+IGFiYworCisgICAgICAgICAgTm90aWNlIHRoZSBzcGVjaWFsIHN5bnRheCByZXF1aXJlZCBm b3IgaW5jbHVkaW5nIGEgbGl0ZXJhbAorICAgICAgICAgIHBhcmVudGhlc2lzIGluIHRoZSBhcmd1 bWVudCBsaXN0LiBBcyB0aGUgbGFzdCB0d28gZXhhbXBsZXMKKyAgICAgICAgICBpbGx1c3RyYXRl LCBcZnN0cmlwYigpIHN0cmlwcyBvbmx5IG9uZSBsZXZlbCBhdCBhdCBhIHRpbWU7CisgICAgICAg ICAgbmVzdGluZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHNtYWxsIGZpeGVkIG51bWJlciBvZiBs ZXZlbHM7CisgICAgICAgICAgbG9vcHMgY2FuIGJlIHVzZWQgdG8gc3RyaXAgbGFyZ2VyIG9yIGlu ZGV0ZXJtaW5hdGUgbnVtYmVycyBvZgorICAgICAgICAgIGxldmVscy4KKworICAgXGZsb3Aoc3Ry aW5nWyxjaGFyXSkKKyAgICAgICAgICBSZW1vdmVzIHRoZSBsZWZ0bW9zdCBzZWdtZW50IG9mIHRo ZSBzdHJpbmcgdGhhdCBlbmRzIHdpdGggdGhlCisgICAgICAgICAgZ2l2ZW4gY2hhcmFjdGVyLiBJ ZiBubyBjaGFyYWN0ZXIgaXMgZ2l2ZW4sIHBlcmlvZCAoLikgaXMgdXNlZC4KKyAgICAgICAgICBF eGFtcGxlczoKKworICBcZmxvcChPT0ZBLlRYVC5HWikgICAgICAgICAgICAgICA9PiBUWFQuR1oK KyAgXGZsb3AoT09GQS5UWFQuR1osLikgICAgICAgICAgICAgPT4gVFhULkdaCisgIFxmbG9wKE9P RkEuVFhULkdaLFgpICAgICAgICAgICAgID0+IFQuR1oKKworICAgICAgICAgIFRvIHJlbW92ZSB0 aGUgbGVmdG1vc3QgbnVtYmVyIGNoYXJhY3RlcnMsIGp1c3QgdXNlCisgICAgICAgICAgXGZzdWJz dHJpbmcocyxudW1iZXIrMSkuIFRvIHJldHVybiB0aGUgcmlnaHRtb3N0IG51bWJlcgorICAgICAg ICAgIGNoYXJhY3RlcnMsIHVzZSBcZnJpZ2h0KHMsbnVtYmVyKS4KKworICAgU28gdGhlIGhpZGVv dXMgZXhhbXBsZToKKworICByZWNlaXZlIFxmbG93ZXIoXGZzdWJzdHJpbmcoXHYoZmlsZW5hbWUp LDEsXGZsZW5ndGgoXHYoZmlsZW5hbWUpKS0zKSkKKworICAgY2FuIG5vdyBiZSB3cml0dGVuIGFz OgorCisgIHJlY2VpdmUgXGZsb3dlcihcZnN0cmlweChcdihmaWxlbmFtZSkpKQorCisgICBUaGF0 IGlzLCB0aGUgZmlsZW5hbWUgc3RyaXBwZWQgb2YgaXRzIGV4dGVuc2lvbiBhbmQgdGhlbiBsb3dl cmNhc2VkLgorICAgVGhpcyBpcyBub3Qgb25seSBzaG9ydGVyIGFuZCBsZXNzIGhpZGVvdXMsIGJ1 dCBhbHNvIGRvZXMgbm90IGRlcGVuZCBvbgorICAgdGhlIGxlbmd0aCBvZiB0aGUgZXh0ZW5zaW9u IGJlaW5nIDMuCisKKyAgIE5vdGUgdGhhdCB3aGVuIGEgcmVjZWl2ZSBmaWx0ZXIgaXMgaW4gZWZm ZWN0LCB0aGlzIG92ZXJyaWRlcyB5b3VyIEZJTEUKKyAgIENPTExJU0lPTiBzZXR0aW5nLCBzaW5j ZSBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoYXQgdGhlIGZpbmFsCisgICBkZXN0aW5h dGlvbiBmaWxlbmFtZSB3aWxsIGJlIChiZWNhdXNlIGl0IGRvZXMgbm90IGtub3csIGFuZCBjYW4g bm90IGJlCisgICBleHBlY3RlZCB0byBrbm93LCB0aGUgc3ludGF4IG9mIGV2ZXJ5IHZlcnNpb24g b2YgZXZlcnkgY29tbWFuZCBzaGVsbCBvbgorICAgZXZlcnkgcGxhdGZvcm0gb24gdGhlIHBsYW5l dCkuCisKKzQuMi40LiBJbXBsaWNpdCBVc2Ugb2YgUGlwZXMKKworICAgSWYgeW91IHdpc2gsIEMt S2VybWl0IGNhbiBhbHNvIGV4YW1pbmUgaW5jb21pbmcgZmlsZW5hbWVzIHRvIHNlZSBpZgorICAg dGhleSBzdGFydCB3aXRoICIhIiwgYW5kIGlmIHNvLCB0aGUgc3Vic2VxdWVudCB0ZXh0IGlzIHRy ZWF0ZWQgYXMgYQorICAgY29tbWFuZCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uIEZvciBleGFt cGxlLCBpZiBhIEtlcm1pdCBjbGllbnQgaXMKKyAgIGdpdmVuIHRoZSBmb2xsb3dpbmcgY29tbWFu ZDoKKworICBnZXQgeyFmaW5nZXIgfCBzb3J0fQorCisgICB0aGUgc2VydmVyIG9uIHRoZSBvdGhl ciBlbmQsIGlmIGl0IHN1cHBvcnRzIHRoaXMgZmVhdHVyZSwgd2lsbCBydW4gdGhlCisgICAiZmlu Z2VyIiBwcm9ncmFtLCBwaXBlIGl0cyBzdGFuZGFyZCBvdXRwdXQgdG8gdGhlICJzb3J0IiBwcm9n cmFtLCBhbmQKKyAgIHNlbmQgc29ydCdzIHN0YW5kYXJkIG91dHB1dCBiYWNrIHRvIHlvdS4gU2lt aWxhcmx5LCBpZiB5b3U6CisKKyAgc2VuZCBvb2ZhLnR4dCAhc29ydCAtciA+IG9vZmEubmV3CisK KyAgIG9yLCBlcXVpdmFsZW50bHk6CisKKyAgc2VuZCBvb2ZhLnR4dCB7IXNvcnQgLXIgPiBvb2Zh Lm5ld30KKworICAgb3I6CisKKyAgc2VuZCAvYXMtbmFtZTp7IXNvcnQgLXIgPiBvb2ZhLm5ld30g b29mYS50eHQKKworICAgdGhpcyBoYXMgdGhlIHJlY2VpdmVyIHNlbmQgdGhlIGNvbnRlbnRzIG9m IHRoZSBpbmNvbWluZyBvb2ZhLnR4dCBmaWxlCisgICB0byB0aGUgc29ydCBwcm9ncmFtLCB3aGlj aCBzb3J0cyB0aGUgdGV4dCBpbiByZXZlcnNlIG9yZGVyIGFuZCBzdG9yZXMKKyAgIHRoZSByZXN1 bHQgaW4gb29mYS5uZXcuCisKKyAgIFRoaXMgdXNlIG9mIHRoZSBleGNsYW1hdGlvbiBtYXJrIHNo b3VsZCBiZSBmYW1pbGlhciB0byBVTklYIHVzZXJzIGFzCisgICB0aGUgImJhbmciIGZlYXR1cmUg dGhhdCBsZXRzIHlvdSBydW4gYW4gZXh0ZXJuYWwgYXBwbGljYXRpb24gb3IgY29tbWFuZAorICAg ZnJvbSB3aXRoaW4gYW5vdGhlciBhcHBsaWNhdGlvbi4KKworICAgS2VybWl0J3MgImJhbmciIGZl YXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgc2luY2UgaXQgaXMgbm90IHVuaGVhcmQKKyAg IGZvciBmaWxlbmFtZXMgdG8gYWN0dWFsbHkgYmVnaW4gd2l0aCAiISIuIFNvIGlmIHlvdSB3YW50 IHRvIHVzZSB0aGlzCisgICBmZWF0dXJlLCB5b3UgbXVzdCBlbmFibGUgaXQgd2l0aCB0aGUgZm9s bG93aW5nIGNvbW1hbmQ6CisKKyAgIFNFVCBUUkFOU0ZFUiBQSVBFUyB7IE9OLCBPRkYgfQorICAg ICAgICAgIE9OIGVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mICIhIiBub3RhdGlvbiBpbiBpbmNv bWluZyBmaWxlbmFtZXMKKyAgICAgICAgICBkdXJpbmcgZmlsZSB0cmFuc2ZlciBhcyBhbiBpbmRp Y2F0b3IgdGhhdCB0aGUgcmVtYWluaW5nIHRleHQgaXMKKyAgICAgICAgICB0aGUgbmFtZSBvZiBh IGNvbW1hbmQuIE9GRiwgdGhlIGRlZmF1bHQsIGRpc2FibGVzIHRoaXMgZmVhdHVyZQorICAgICAg ICAgIGFuZCB1c2VzIHRoZSB0ZXh0IGFzIGEgZmlsZW5hbWUgaW4gdGhlIG5vcm1hbCBmYXNoaW9u LiBUaGlzCisgICAgICAgICAgY29tbWFuZCBkb2VzIE5PVCBhZmZlY3QgU0VORCAvQ09NTUFORCwg R0VUIC9DT01NQU5ELCBDU0VORCwgZXRjLgorCisgICBTbyB1c2luZyBhIGNvbWJpbmF0aW9uIG9m IENTRU5EIChTRU5EIC9DT01NQU5EKSBhbmQgdGhlICJiYW5nIiBmZWF0dXJlLAorICAgeW91IGNh biB0cmFuc2ZlciBhIGRpcmVjdG9yeSB0cmVlIGFsbCBpbiBvbmUgY29tbWFuZCAoYXNzdW1pbmcg dGhlCisgICByZW1vdGUgS2VybWl0IHN1cHBvcnRzIHBpcGUgdHJhbnNmZXJzIGFuZCBoYXMgdGhl bSBlbmFibGVkKToKKworICBDU0VORCB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9IHshZ3VuemlwIC1j IHwgdGFyIHhmIC19CisKKyAgIG9yOgorCisgIFNFTkQgL0NPTU1BTkQ6e3RhciBjZiAtIC4gfCBn emlwIC1jfSAvYXM6eyFndW56aXAgLWMgfCB0YXIgeGYgLX0KKworICAgUGF5IGNsb3NlIGF0dGVu dGlvbiB0byB0aGUgc3ludGF4LiBCcmFjZXMgYXJlIG5lZWRlZCBhcm91bmQgdGhlIGNvbW1hbmQK KyAgIGJlY2F1c2UgaXQgY29udGFpbnMgc3BhY2VzOyBicmFjZXMgYXJlIG5lZWRlZCBhcm91bmQg dGhlIGFzLW5hbWUKKyAgIGJlY2F1c2UgaXQgZW5kcyB3aXRoICItIi4gVGhlIGFzLW5hbWUgbXVz dCBiZWdpbiB3aXRoICIhIiBvciByZWNlaXZpbmcKKyAgIEtlcm1pdCB3aWxsIG5vdCByZWNvZ25p emUgaXQgYXMgYSBjb21tYW5kLiBUaGUgQ1NFTkQgY29tbWFuZCBtdXN0IE5PVAorICAgYmVnaW4g d2l0aCAiISIgdW5sZXNzIHlvdSBhcmUgcnVubmluZyBhIGNvbW1hbmQgd2hvc2UgbmFtZSByZWFs bHkgZG9lcworICAgc3RhcnQgdGhhdCBjaGFyYWN0ZXIuCisKKyAgIFNpbWlsYXJseSwgeW91IGhh dmUgYSBLZXJtaXQgc2VydmVyIHNlbmQgYSBkaXJlY3RvcnkgdHJlZSB0byBiZQorICAgdW5wYWNr ZWQgb24gdGhlIGNsaWVudCBlbmQ6CisKKyAgQ0dFVCB7IXRhciBjZiAtIC4gfCBnemlwIC1jfSB7 Z3VuemlwIC1jIHwgdGFyIHhmIC19CisKKyAgIG9yOgorCisgIEdFVCAvQ09NTUFORCB7IXRhciBj ZiAtIC4gfCBnemlwIC1jfSAvYXM6e2d1bnppcCAtYyB8IHRhciB4ZiAtfQorCisgICBOb3RpY2Ug aG93LCBpbiB0aGlzIGNhc2UsIHRoZSBiYW5nIGlzIHJlcXVpcmVkIGluIHRoZSByZW1vdGUgY29t bWFuZCwKKyAgIHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gYSBmaWxlbmFtZSwgYnV0IG5vdCBpbiB0 aGUgbG9jYWwgY29tbWFuZCwgc2luY2UKKyAgIGJ5IGRlZmluaXRpb24gb2YgQ0dFVCAob3IgR0VU IC9DT01NQU5EKSwgaXQgaXMga25vd24gdG8gYmUgYSBjb21tYW5kLgorCisgICBTRU5EIGFuZCBS RUNFSVZFIEZJTFRFUnMgc3VwZXJzZWRlIHRoZSBiYW5nIGZlYXR1cmUuIEZvciBleGFtcGxlLCBp ZiBhCisgICBmaWxlIGFycml2ZXMgdW5kZXIgdGhlIG5hbWUgIiFndW56aXAgLWMgfCB0YXIgeGYg LSIsIGJ1dCB0aGUgcmVjZWl2aW5nCisgICBLZXJtaXQgYWxzbyBoYXMgYmVlbiBnaXZlbiBhIGNv bW1hbmQgbGlrZToKKworICBzZXQgcmVjZWl2ZSBmaWx0ZXIgc29ydCAtciA+IFx2KGZpbGVuYW1l KQorCisgICB0aGVuIHRoZSBpbmNvbWluZyBkYXRhIHdpbGwgYmUgc29ydGVkIHJhdGhlciB0aGFu IGd1bnppcHBlZC4KKworICAgRmluYWxseSwgaWYgU0VUIFRSQU5TRkVSIFBJUEVTIGlzIE9OIChh bmQgaW4gdGhpcyBjYXNlLCB0aGlzIG11c3QgYmUKKyAgIGRvbmUgaW4geW91ciBDLUtlcm1pdCBp bml0aWFsaXphdGlvbiBmaWxlKSwgeW91IGNhbiBzZW5kIGZyb20gYSBwaXBlIG9uCisgICB0aGUg Qy1LZXJtaXQgY29tbWFuZCBsaW5lOgorCisgIGtlcm1pdCAtcyAiIWZpbmdlciB8IHNvcnQgLXIi IC1hIHVzZXJsaXN0CisKKyAgIEluIHRoaXMgY2FzZSB0aGUgImZpbGVuYW1lIiBjb250YWlucyBz cGFjZXMgYW5kIHNvIG11c3QgYmUgcXVvdGluZworICAgdXNpbmcgeW91ciBzaGVsbCdzIHF1b3Rp bmcgcnVsZXMuCisKKzQuMi41LiBTdWNjZXNzIGFuZCBGYWlsdXJlIG9mIFBpcGVkIENvbW1hbmRz CisKKyAgIENvbW1hbmRzIG9yIHByb2dyYW1zIHN0YXJ0ZWQgYnkgS2VybWl0IGFzIGEgcmVzdWx0 IG9mIENTRU5EIG9yIENSRUNFSVZFCisgICBjb21tYW5kcywgQ0dFVCwgU0VORCAvQ09NTUFORCwg UkVESVJFQ1QgY29tbWFuZHMgKHNlZSBbNDU1XVNlY3Rpb24KKyAgIDQuMi44LjIpLCBpbXBsaWNp dCB1c2Ugb2YgcGlwZXMsIFJVTiBjb21tYW5kcywgYW5kIHNvIGZvcnRoLCBzaG91bGQKKyAgIHJl dHVybiB0aGVpciBleGl0IHN0YXR1cyBjb2RlcyB0byB0aGUgS2VybWl0IGNvbW1hbmQgdGhhdCBj YXVzZWQgdGhlbQorICAgdG8gYmUgcnVuLCBhbmQgdGhlcmVmb3JlIElGIFNVQ0NFU1MgYW5kIElG IEZBSUxVUkUgdGVzdHMgYWZ0ZXIgdGhlc2UKKyAgIGNvbW1hbmRzIHNob3VsZCB3b3JrIGFzIGV4 cGVjdGVkLiBGb3IgZXhhbXBsZToKKworICBDU0VORCBibGFoIDwgZmlsZW5hbWUKKworICAgc2hv dWxkIGZhaWwgaWYgdGhlcmUgaXMgbm8gY29tbWFuZCBjYWxsZWQgImJsYWgiIG9yIGlmIHRoZXJl IGlzIG5vIGZpbGUKKyAgIGNhbGxlZCAiZmlsZW5hbWUiLiBIb3dldmVyLCB0aGlzIGlzIG5vdCBm b29scHJvb2YgYW5kIHNvbWV0aW1lcworICAgQy1LZXJtaXQgbWlnaHQgdGhpbmsgYSBjb21tYW5k IHN1Y2NlZWRlZCB3aGVuIGl0IGZhaWxlZCwgb3IgdmljZSB2ZXJzYS4KKyAgIFRoaXMgaXMgbW9z dCBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gdGhlIGhpZ2hseSBzeXN0ZW0tZGVwZW5kZW50IG1ldGhv ZHMKKyAgIHRoYXQgS2VybWl0IG11c3QgdXNlIHRvIGRldGVybWluZSBhIGNvbW1hbmQncyBleGl0 IHN0YXR1cyBjb2RlIGRvIG5vdAorICAgc3VwcGx5IHRoZSByaWdodCBpbmZvcm1hdGlvbi4KKwor ICAgSXQgY2FuIGFsc28gaGFwcGVuIGJlY2F1c2Ugc29tZSBjb21tYW5kcyBtaWdodCBkZWZpbmUg c3VjY2VzcyBhbmQKKyAgIGZhaWx1cmUgZGlmZmVyZW50bHkgZnJvbSB3aGF0IHlvdSBleHBlY3Qs IG9yIGJlY2F1c2UgeW91IGFyZSB1c2luZyBhCisgICBwaXBlbGluZSBjb21wb3NlZCBvZiBtYW55 IGNvbW1hbmRzLCBhbmQgb25lIG9mIHRoZW0gZmFpbHMgdG8gcGFzcworICAgZmFpbGluZyBleGl0 IHN0YXR1cyBjb2RlcyB1cCB0aGUgY2hhaW4uIFRoZSBtb3N0IGxpa2VseSBjdWxwcml0IGlzIHRo ZQorICAgc2hlbGwgaXRzZWxmLCB3aGljaCBpbiBtb3N0IGNhc2VzIG11c3QgYmUgaW50ZXJwb3Nl ZCBiZXR3ZWVuIEtlcm1pdCBhbmQKKyAgIGFueSBleHRlcm5hbCBwcm9ncmFtIHRvIGJlIHJ1bi4K KworICAgSW4gYW55IGNhc2UsIHlvdSBjYW4gZXhhbWluZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxl IHRvIGZpbmQgb3V0IHRoZQorICAgZXhpdCBzdGF0dXMgY29kZSByZXR1cm5lZCB0byBLZXJtaXQg YnkgdGhlIHByb2Nlc3MgbW9zdCByZWNlbnRseSBydW4gYnkKKyAgIGFueSBjb21tYW5kIHRoYXQg cnVucyBleHRlcm5hbCBjb21tYW5kcyBvciBwcm9ncmFtcywgaW5jbHVkaW5nIENTRU5ELAorICAg Q1JFQ0VJVkUsIFJFRElSRUNULCBSVU4sIGV0YzoKKworICBcdihwZXhpdHN0YXQpCisKKyAgIElu IFVOSVgsIFdpbmRvd3MgYW5kIE9TLzIsIHRoZSB2YWx1ZSBzaG91bGQgYmUgLTIgaWYgbm8gY29t bWFuZCBoYXMKKyAgIGJlZW4gcnVuIHlldCwgMCBpZiB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCBz dWNjZWVkZWQsIC0xLCAtMywgb3IgLTQgaWYKKyAgIHRoZXJlIHdhcyBhbiBpbnRlcm5hbCBlcnJv ciwgYW5kIGEgcG9zaXRpdmUgbnVtYmVyIHJldHVybmVkIGJ5IHRoZQorICAgY29tbWFuZCBpdHNl bGYgaWYgdGhlIGNvbW1hbmQgZmFpbGVkLiBJZiB0aGUgbnVtYmVyIGlzIGluIHRoZSByYW5nZQor ICAgMS0xMjcsIHRoaXMgaXMgdGhlIHByb2dyYW0ncyBleGl0IHN0YXR1cyBjb2RlLiBJZiBpdCBp cyAxMjggb3IgZ3JlYXRlciwKKyAgIHRoaXMgaXMgc3VwcG9zZWQgdG8gaW5kaWNhdGUgdGhhdCB0 aGUgY29tbWFuZCBvciBwcm9ncmFtIHdhcworICAgaW50ZXJydXB0ZWQgb3IgdGVybWluYXRlZCBm cm9tIG91dHNpZGUgaXRzZWxmLgorCisgICBJbiBXaW5kb3dzIDk1IGFuZCA5OCwgdGhlIHJldHVy biB2YWx1ZXMgb2YgdGhlIGRlZmF1bHQgc2hlbGwgYXJlCisgICB1bnJlbGlhYmxlOyB2YXJpb3Vz IHRoaXJkLXBhcnR5IHNoZWxscyBjYW4gYmUgdXNlZCB0byB3b3JrIGFyb3VuZCB0aGlzCisgICBk ZWZpY2llbmN5LgorCisgICBJbiBWTVMsIGl0IGlzIHRoZSBhY3R1YWwgZXhpdCBzdGF0dXMgY29k ZSBvZiB0aGUgY29tbWFuZCB0aGF0IHdhcyBydW4uCisgICBUaGlzIGlzIGFuIG9kZCBudW1iZXIg aWYgdGhlIGNvbW1hbmQgc3VjY2VlZGVkLCBhbmQgYW4gZXZlbiBudW1iZXIgaWYKKyAgIGl0IGZh aWxlZC4gWW91IGNhbiBzZWUgdGhlIGFzc29jaWF0ZWQgbWVzc2FnZSBhcyBmb2xsb3dzOgorCisg IHJ1biB3cml0ZSBzeXMkb3V0cHV0IGYkbWVzc2FnZShcdihwZXhpdHN0YXQpKQorCisgICBPciwg bW9yZSBjb252ZW5pZW50bHksIHVzZSB0aGUgbmV3IEtlcm1pdCBmdW5jdGlvbjoKKworICBlY2hv IFxmZXJyc3RyaW5nKFx2KHBleGl0c3RhdCkpCisKKyAgIHdoaWNoIGNvbnZlcnRzIGEgc3lzdGVt IGVycm9yIGNvZGUgKG51bWJlcikgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgIG1lc3NhZ2UuCisK KzQuMi42LiBDYXV0aW9ucyBhYm91dCBVc2luZyBQaXBlcyB0byBUcmFuc2ZlciBEaXJlY3Rvcnkg VHJlZXMKKworICAgQWx0aG91Z2ggdXRpbGl0aWVzIHN1Y2ggYXMgdGFyIGFuZCB6aXAvdW56aXAg bWlnaHQgYmUgYXZhaWxhYmxlIG9uCisgICBkaWZmZXJlbnQgcGxhdGZvcm1zIChzdWNoIGFzIFVO SVggYW5kIFdpbmRvd3MpLCB0aGlzIGRvZXMgbm90CisgICBuZWNlc3NhcmlseSBtZWFuIHlvdSBj YW4gdXNlIHRoZW0gc3VjY2Vzc2Z1bGx5IHRvIHRyYW5zZmVyIGRpcmVjdG9yeQorICAgdHJlZXMg YmV0d2VlbiB1bmxpa2UgcGxhdGZvcm1zLiBGb3IgZXhhbXBsZToKKworICBDU0VORCB7dGFyIGNm IC0gLiB8IGd6aXAgLWN9IHshZ3VuemlwIC1jIHwgdGFyIHhmIC19CisKKyAgIHdoZW4gdXNlZCBm cm9tIFVOSVggdG8gV2luZG93cyB3aWxsIGhhdmUgc2F0aXNmYWN0b3J5IHJlc3VsdHMgZm9yCisg ICBiaW5hcnkgZmlsZXMsIGJ1dCBub3QgZm9yIHRleHQgZmlsZXMuIFVOSVggdGV4dCBmaWxlcyBo YXZlIGxpbmVzIGVuZGluZworICAgd2l0aCBMaW5lZmVlZCAoTEYpIG9ubHksIHdoZXJlYXMgV2lu ZG93cyB0ZXh0IGZpbGVzIGhhdmUgbGluZXMgZW5kaW5nCisgICBpbiBDYXJyaWFnZSBSZXR1cm4g YW5kIExpbmVmZWVkIChDUkxGKS4gVGh1cyBhbnkgdGV4dCBmaWxlcyB0aGF0IHdlcmUKKyAgIGlu IHRoZSBhcmNoaXZlIGZvcm1lZCBieSB0aGUgZmlyc3QgdGFyIGNvbW1hbmQgd2lsbCBiZSB1bnBh Y2tlZCBieSB0aGUKKyAgIHNlY29uZCB0YXIgY29tbWFuZCBpbiB0aGVpciBvcmlnaW5hbCBmb3Jt LCBhbmQgd2lsbCBkaXNwbGF5IGFuZCBwcmludAorICAgaW5jb3JyZWN0bHkgaW4gV2luZG93cyAo ZXhjZXB0IGluIGFwcGxpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbgorICAgZXhwbGljaXRseSBjb2Rl ZCB0byBoYW5kbGUgVU5JWC1mb3JtYXQgdGV4dCBmaWxlcykuIE9uIHRoZSBvdGhlciBoYW5kCisg ICBpZiB5b3UgdG9sZCBnemlwIHRvIHVzZSAidGV4dCBtb2RlIiB0byBkbyByZWNvcmQgZm9ybWF0 IGNvbnZlcnNpb24KKyAgIChhc3N1bWluZyB0aGVyZSB3YXMgYSB3YXkgdG8gdGVsbCBpdCwgYXMg dGhlcmUgaXMgd2l0aCBtb3N0ICJ6aXAiCisgICBwcm9ncmFtcyksIHRoaXMgd291bGQgZGVzdHJv eSBhbnkgYmluYXJ5IGZpbGVzIGluIHRoZSBhcmNoaXZlLgorCisgICBGdXJ0aGVybW9yZSwgaWYg dGhlIGFyY2hpdmUgY29udGFpbnMgdGV4dCBmaWxlcyB0aGF0IGFyZSB3cml0dGVuIGluCisgICBs YW5ndWFnZXMgb3RoZXIgdGhhbiBFbmdsaXNoLCB0aGUgInNwZWNpYWwiIChhY2NlbnRlZCBhbmQv b3Igbm9uLVJvbWFuKQorICAgY2hhcmFjdGVycyBhcmUgTk9UIHRyYW5zbGF0ZWQsIGFuZCBhcmUg dGhlcmVmb3JlIGxpa2VseSBzaG93IHVwIGFzCisgICBnaWJiZXJpc2ggb24gdGhlIHRhcmdldCBz eXN0ZW0uIEZvciBleGFtcGxlLCBXZXN0IEV1cm9wZWFuIGxhbmd1YWdlcworICAgYXJlIHVzdWFs bHkgZW5jb2RlZCBpbiBJU08gTGF0aW4gQWxwaGFiZXQgMSBpbiBVTklYLCBidXQgaW4gUEMgY29k ZQorICAgcGFnZSA4NTAgb24gdGhlIFBDLiBDYXBpdGFsIEEgd2l0aCBhY3V0ZSBhY2NlbnQgaXMg Y29kZSBwb2ludCAxOTMKKyAgIChkZWNpbWFsKSBMYXRpbi0xLCBidXQgMTgxIGluIENQODUwLiBT byBBLWFjdXRlIGluIHRoZSBVTklYIGZpbGUKKyAgIGJlY29tZXMgTWlkZGxlIEJveCBCb3R0b20g b24gdGhlIFBDLCBhbmQgc2ltaWxhcmx5IGZvciBhbGwgdGhlIG90aGVyCisgICBzcGVjaWFsIGNo YXJhY3RlcnMsIGFuZCBmb3IgYWxsIG90aGVyIGxhbmd1YWdlcyAtLSBHcmVlaywgUnVzc2lhbiwK KyAgIEhlYnJldywgSmFwYW5lc2UsIGV0Yy4KKworICAgU28gd2hlbiB0cmFuc2ZlcnJpbmcgdGV4 dCBmaWxlcyBiZXR3ZWVuIHVubGlrZSBwbGF0Zm9ybXMsIHlvdSBzaG91bGQKKyAgIHVzZSBkaXJl Y3QgS2VybWl0IGZpbGUgdHJhbnNmZXJzIHNvIEtlcm1pdCBjYW4gYXBwbHkgdGhlIG5lZWRlZAor ICAgcmVjb3JkLWZvcm1hdCBhbmQgY2hhcmFjdGVyLXNldCB0cmFuc2Zvcm1hdGlvbnMuIFVzZSBw aXBlbGluZXMKKyAgIGNvbnRhaW5pbmcgYXJjaGl2ZXJzIGxpa2UgdGFyIG9yIHppcCBvbmx5IGlm IGFsbCB0aGUgZmlsZXMgYXJlIGJpbmFyeQorICAgb3IgdGhlIHR3byBzeXN0ZW1zIHVzZSB0aGUg c2FtZSByZWNvcmQgZm9ybWF0IGFuZCBjaGFyYWN0ZXIgc2V0IGZvcgorICAgdGV4dCBmaWxlcy4K KworICAgQWxzbyBzZWUgWzQ1Nl1TZWN0aW9ucyA0LjMsIFs0NTddNC4xMCwgWzQ1OF00LjExLCBh bmQgWzQ1OV00LjE1IGZvciBob3cKKyAgIHRvIHRyYW5zZmVyIGRpcmVjdG9yeSB0cmVlcyBiZXR3 ZWVuIGJvdGggbGlrZSBhbmQgdW5saWtlIHN5c3RlbXMKKyAgIGRpcmVjdGx5IHdpdGggS2VybWl0 LgorCis0LjIuNy4gUGlwZXMgYW5kIEVuY3J5cHRpb24KKworICAgT2YgY291cnNlIHBpcGVsaW5l cyBjb3VsZCBiZSB1c2VkIGZvciBlbmNyeXB0ZWQgZmlsZSB0cmFuc2ZlcnMsCisgICBhc3N1bWlu ZyBwcm9wZXIgcHJlY2F1dGlvbnMgY291bGQgYmUgdGFrZW4gY29uY2VybmluZyB0aGUgdHJhbnNt aXNzaW9uCisgICBvZiB0aGUga2V5LiBCdXQgdGhlcmUgaXMgcmFyZWx5IGEgZ29vZCB3YXkgdG8g ZG8gdGhpcy4gVG8gaWxsdXN0cmF0ZQorICAgdXNpbmcgVU5JWCBjcnlwdDoKKworICBjc2VuZCB7 Y3J5cHQga2V5IDwgZmlsZW5hbWV9IHshY3J5cHQga2V5ID4gZmlsZW5hbWV9CisKKyAgIE9yLCBt b3JlIGFtYml0aW91c2x5OgorCisgIGNzZW5kIHt0YXIgY2YgLSAuIHwgZ3ppcCAtYyB8IGNyeXB0 IGtleX0geyFjcnlwdCBrZXkgfCBndW56aXAgLWMgfCB0YXIgeGYgLX0KKworICAgdHJhbnNtaXRz IHRoZSBrZXkgaW4gdGhlIGZpbGUgaGVhZGVyIHBhY2tldCBhcyBwYXJ0IG9mIHRoZSAoY2xlYXIt dGV4dCkKKyAgIHJlbW90ZSBjb21tYW5kLCBkZWZlYXRpbmcgdGhlIGVudGlyZSBwdXJwb3NlIG9m IGVuY3J5cHRpbmcgdGhlIGZpbGUKKyAgIGRhdGEuCisKKyAgIEJ1dCBpZiB5b3UgYXJlIGNvbm5l Y3RlZCBpbiB0ZXJtaW5hbCBtb2RlIHRvIHRoZSByZW1vdGUgY29tcHV0ZXIgYW5kCisgICB0eXBl OgorCisgIGNyZWNlaXZlIHtjcnlwdCBrZXkgPiBmaWxlbmFtZX0KKworICAgYXQgdGhlIHJlbW90 ZSBLZXJtaXQgcHJvbXB0LCB5b3UgaGF2ZSBhbHNvIHRyYW5zbWl0dGVkIHRoZSBrZXkgaW4gY2xl YXIKKyAgIHRleHQgb3ZlciB0aGUgY29tbXVuaWNhdGlvbnMgbGluay4KKworICAgQXQgcHJlc2Vu dCwgdGhlIG9ubHkgc2VjdXJlIHdheSB0byB1c2UgQ1NFTkQgYW5kIENSRUNFSVZFIHdpdGggYW4K KyAgIGVuY3J5cHRpb24gZmlsdGVyIGlzIHRvIGhhdmUgYSBodW1hbiBvcGVyYXRvciBhdCBib3Ro IGVuZHMsIHNvIHRoZSBrZXkKKyAgIGRvZXMgbm90IGhhdmUgdG8gYmUgdHJhbnNtaXR0ZWQuCisK KyAgIFRoZW9yZXRpY2FsbHkgaXQgd291bGQgYmUgcG9zc2libGUgdG8gdXNlIFBHUCBzb2Z0d2Fy ZSAoUHJldHR5IEdvb2QKKyAgIFByaXZhY3ksIGJ5IFBoaWwgWmltbWVybWFuLCBQaGlsJ3MgUHJl dHR5IEdvb2QgU29mdHdhcmUpIHRvIGF2b2lkIGtleQorICAgdHJhbnNtaXNzaW9uIChzaW5jZSBQ R1AgdXNlcyBzZXBhcmF0ZSBwdWJsaWMgYW5kIHByaXZhdGUga2V5IGFuZCAibGV0cworICAgeW91 IGNvbW11bmljYXRlIHNlY3VyZWx5IHdpdGggcGVvcGxlIHlvdSd2ZSBuZXZlciBtZXQsIHdpdGgg bm8gc2VjdXJlCisgICBjaGFubmVscyBuZWVkZWQgZm9yIHByaW9yIGV4Y2hhbmdlIG9mIGtleXMi KSwgYnV0IHRoZSBzcGVjaWZpYyBtZXRob2QKKyAgIGhhcyB5ZXQgdG8gYmUgd29ya2VkIG91dC4K KworICAgICBISU5UOiBTZWUgdGhlIFBHUCBVc2VyJ3MgR3VpZGUsIGUuZy4gYXQ6CisgICAgIFs0 NjBdaHR0cDovL3d3dy50ZWxzdHJhLmNvbS5hdS9kb2NzL1BHUC8KKyAgICAgRXNwZWNpYWxseSB0 aGUgdG9waWMgIlVzaW5nIFBHUCBhcyBhIFVOSVgtU3R5bGUgRmlsdGVyIjoKKyAgICAgWzQ2MV1o dHRwOi8vd3d3LnRlbHN0cmEuY29tLmF1L2RvY3MvUEdQL3BncGRvYzIvcGdwZG9jMl8xNy5odG1s CisKKyAgIEluIGFueSBjYXNlLCBiZXR0ZXIgYW5kIG1vcmUgY29udmVuaWVudCBzZWN1cml0eSBv cHRpb25zIGFyZSBub3cKKyAgIGF2YWlsYWJsZTogS2VyYmVyb3MgYXV0aGVudGljYXRpb24gYW5k IGVuY3J5cHRpb24gKFs0NjJdQ0xJQ0sgSEVSRSBmb3IKKyAgIGRldGFpbHMpIGFuZCB0aGUgbmV3 IGFiaWxpdHkgdG8gcnVuIEMtS2VybWl0ICJ0aG91Z2giIG90aGVyCisgICBjb21tdW5pY2F0aW9u IHByb2dyYW1zLCBkZXNjcmliZWQgaW4gWzQ2M11TZWN0aW9uIDIuNy4KKworNC4yLjguIENvbW1h bmRzIGFuZCBGdW5jdGlvbnMgUmVsYXRlZCB0byBQaXBlcworCis0LjIuOC4xLiBUaGUgT1BFTiAh UkVBRCBhbmQgT1BFTiAhV1JJVEUgQ29tbWFuZHMKKworICAgVGhlc2UgYXJlIGRlc2NyaWJlZCBp biBbNDY0XVVzaW5nIEMtS2VybWl0LCBhbmQgYXJlIGdlbmVyYWxseSB1c2VmdWwKKyAgIHdpdGgg cmVhZGluZyBvdXRwdXQgZnJvbSBjb21tYW5kcyB0aGF0IHByb2R1Y2UgbW9yZSB0aGFuIG9uZSBs aW5lIG9uCisgICB0aGVpciBzdGFuZGFyZCBvdXRwdXQsIG9yIHdyaXRpbmcgbXVsdGlwbGUgbGlu ZXMgaW50byBjb21tYW5kcyB0aGF0CisgICBhY2NlcHQgdGhlbSBvbiB0aGVpciBzdGFuZGFyZCBp bnB1dC4KKworICAgSW4gQy1LZXJtaXQgNy4wIENMT1NFICFSRUFEIGlzIGFjY2VwdGVkIGFzIGEg c3lub255bSBmb3IgQ0xPU0UgUkVBRCwKKyAgIGFuZCBDTE9TRSAhV1JJVEUgZm9yIENMT1NFIFdS SVRFLgorCisgICBUZXN0aW5nIHRoZSBzdWNjZXNzIGFuZCBmYWlsdXJlIG9mIHRoZXNlIGNvbW1h bmRzLCBob3dldmVyLCBjYW4gYmUgYQorICAgYml0IHRyaWNreS4gQ29uc2lkZXI6CisKKyAgb3Bl biAhcmVhZCBsYWxhc2tqZnNsZGtmanNsZGtmagorCisgICAod2hlcmUgImxhbGFza2pmc2xka2Zq c2xka2ZqIiBpcyBuZWl0aGVyIGEgdmFsaWQgY29tbWFuZCBub3IgdGhlIG5hbWUKKyAgIG9mIGEg cHJvZ3JhbSBvciBzY3JpcHQgdGhhdCBjYW4gYmUgcnVuKS4gT1BFTiAhUkVBRCwgaW4gVU5JWCBh dCBsZWFzdCwKKyAgIHRyYW5zbGF0ZXMgdGhpcyBpbnRvIGV4ZWNsKHNoZWxscGF0aCxzaGVsbG5h bWUsIi1jIixjb21tYW5kKS4gVGhpcworICAgbWVhbnMgaXQgc3RhcnRzIHlvdXIgcHJlZmVycmVk IHNoZWxsIChlLmcuIGZyb20gdGhlIFNIRUxMIGVudmlyb25tZW50CisgICB2YXJpYWJsZSkgYW5k IGFza3MgaXQgdG8gZXhlY3V0ZSB0aGUgZ2l2ZW4gY29tbWFuZC4gSXQgbXVzdCBiZSB0aGlzCisg ICB3YXksIGJlY2F1c2UgeW91ciBjb21tYW5kIGNhbiBiZSBhIGVpdGhlciBhbiBpbnRlcm5hbCBz aGVsbCBjb21tYW5kCisgICAod2hpY2ggb25seSB5b3VyIHNoZWxsIGNhbiBleGVjdXRlKSBvciBh biBleHRlcm5hbCBjb21tYW5kLCB3aGljaCBvbmx5CisgICB5b3VyIHNoZWxsIGtub3dzIGhvdyB0 byBmaW5kIChpdCBrbm93cyB5b3VyIFBBVEggYW5kIGludGVycHJldHMsIGV0YykuCisgICBUaGVy ZWZvcmUgdW5sZXNzIE9QRU4gIVJFQUQgY2FuJ3Qgc3RhcnQgeW91ciBzaGVsbCwgaXQgYWx3YXlz IHN1Y2NlZWRzLgorCisgICBDb250aW51aW5nIHdpdGggdGhlIG5vbmV4aXN0ZW50LWNvbW1hbmQg ZXhhbXBsZToKKworICBDLUtlcm1pdD4gb3BlbiAhcmVhZCBsYWxhc2tqZnNsZGtmanNsZGtmagor ICBDLUtlcm1pdD4gc3RhdHVzCisgICBTVUNDRVNTCisgIEMtS2VybWl0PiByZWFkIGxpbmUKKyAg Qy1LZXJtaXQ+IHN0YXR1cworICAgU1VDQ0VTUworICBDLUtlcm1pdD4gZWNobyAiXG0obGluZSki CisgICJiYXNoOiBsYWxhc2tqZnNsZGtmanNsZGtmajogY29tbWFuZCBub3QgZm91bmQiCisgIEMt S2VybWl0PiBjbG9zZSByZWFkCisgIEMtS2VybWl0PiBzdGF0dXMKKyAgIEZBSUxVUkUKKyAgQy1L ZXJtaXQ+CisKKyAgIEluIG90aGVyIHdvcmRzLCB0aGUgZmFpbHVyZSBjYW4gbm90IGJlIGRldGVj dGVkIG9uIE9QRU4sIHNpbmNlIHRoZSBPUEVOCisgICBjb21tYW5kIHN1Y2NlZWRzIGlmIGl0IGNh biBzdGFydCB5b3VyIHNoZWxsLiBJdCBjYW4ndCBiZSBkZXRlY3RlZCBvbgorICAgUkVBRCwgc2lu Y2UgYWxsIHRoaXMgZG9lcyBpcyByZWFkIG91dHB1dCBmcm9tIHRoZSBzaGVsbCwgd2hpY2ggaW4g dGhpcworICAgY2FzZSBoYXBwZW5zIHRvIGJlIGFuIGVycm9yIG1lc3NhZ2UuIEhvd2V2ZXIsIGZh aWx1cmUgSVMgZGV0ZWN0ZWQgdXBvbgorICAgY2xvc2UsIHNpbmNlIHRoaXMgaXMgdGhlIG9jY2Fz aW9uIHVwb24gd2hpY2ggdGhlIHNoZWxsIGdpdmVzIEtlcm1pdCBpdHMKKyAgIGV4aXQgc3RhdHVz IGNvZGUuCisKKyAgIEZvciBhbiBpbGx1c3RyYXRpb24gb2YgdGhpcyBzaXR1YXRpb24sIHNlZSBb NDY1XVNlY3Rpb24gMi4xNC4KKworNC4yLjguMi4gVGhlIFJFRElSRUNUIENvbW1hbmQKKworICAg QSBzZWNvbmQgbWV0aG9kIG9mIEkvTyByZWRpcmVjdGlvbiBpcyBvZmZlcmVkIGJ5IHRoZSBSRURJ UkVDVCBjb21tYW5kLgorICAgVGhpcyBpcyBhIHJhdGhlciBhZHZhbmNlZCBhbmQgdHJpY2t5IGZl YXR1cmUgdGhhdCBpcyBwcmVzZW50bHkKKyAgIHN1cHBvcnRlZCBvbmx5IGluIFVOSVggQy1LZXJt aXQsIGluIE9TLTkgQy1LZXJtaXQsIGFuZCBpbiBLZXJtaXQgOTUuCisgICBTeW50YXg6CisKKyAg IFJFRElSRUNUIGNvbW1hbmQKKyAgICAgICAgICBSdW5zIHRoZSBnaXZlbiBjb21tYW5kLCBzZW5k aW5nIGl0cyBzdGFuZGFyZCBvdXRwdXQgdG8gdGhlCisgICAgICAgICAgY3VycmVudCBjb21tdW5p Y2F0aW9ucyBjaGFubmVsIChTRVQgTElORSwgU0VUIFBPUlQsIG9yIFNFVCBIT1NUCisgICAgICAg ICAgY29ubmVjdGlvbiksIGFuZCByZWFkaW5nIGl0cyBzdGFuZGFyZCBpbnB1dCBmcm9tIHRoZSBz YW1lCisgICAgICAgICAgY29ubmVjdGlvbi4gV29ya3Mgb25seSBpbiBsb2NhbCBtb2RlIC0tIGku ZS4gYSBjb25uZWN0aW9uIGlzCisgICAgICAgICAgcmVxdWlyZWQgLS0gYW5kIHRoZW4gb25seSBp ZiB0aGUgZ2l2ZW4gY29tbWFuZCB1c2VzIFN0YW5kYXJkCisgICAgICAgICAgSS9PLgorCisgICBF eGFtcGxlOgorCisgIHJlZGlyZWN0IGZpbmdlcgorCisgICBydW5zIHRoZSBsb2NhbCAiZmluZ2Vy IiBjb21tYW5kIGFuZCBzZW5kcyBpdHMgb3V0cHV0IG92ZXIgdGhlCisgICBjb25uZWN0aW9uIGFz IHBsYWluIHRleHQsIHdoZXJlIHByZXN1bWFibHkgdGhlcmUgaXMgYSBwcm9jZXNzIHNldCB1cCB0 bworICAgcmVhZCBpdC4gQW5vdGhlciBleGFtcGxlOgorCisgIHJlZGlyZWN0IGZpbmdlciB8IHNv cnQgLXIKKworICAgc2hvd3MgdGhlIHVzZSBvZiBhIHBpcGVsaW5lLgorCisgICBOb3RlOiBSRURJ UkVDVCBkaWZmZXJzIGZyb20gQ1NFTkQvQ1JFQ0VJVkUgaW4gdHdvIGltcG9ydGFudCB3YXlzOiAo MSkKKyAgIGl0IGRvZXMgbm90IHVzZSB0aGUgS2VybWl0IHByb3RvY29sLCBhbmQgKDIpIGl0IHVz ZXMgYSBiaWRpcmVjdGlvbmFsCisgICBwaXBlIHJhdGhlciB0aGFuIGEgb25lLXdheSBwaXBlLgor CisgICBUaGUgcHJpbWFyeSB1c2Ugb2YgdGhlIFJFRElSRUNUIGNvbW1hbmQgaXMgdG8gcnVuIGV4 dGVybmFsIHByb3RvY29scywKKyAgIHN1Y2ggYXMgc3ovcnogaW4gVU5JWCBmb3IgWk1PREVNLCB3 aGVuIHRoZXkgd29yayBvdmVyIFN0YW5kYXJkIEkvTygqKS4KKyAgIEV4YW1wbGU6CisKKyAgc2V0 IGhvc3QgeHl6Y29ycC5jb20KKyAgKGxvZ2luLCBldGMpCisgIHJlZGlyZWN0IHN6IG9vZmEuemlw CisKKyAgIGxldHMgeW91IG1ha2UgYSBUZWxuZXQgY29ubmVjdGlvbiB3aXRoIEMtS2VybWl0IGFu ZCB0aGVuIGRvIGEgWk1PREVNCisgICB0cmFuc2ZlciBvdmVyIGl0LiBaTU9ERU0gcHJvdG9jb2wg bWVzc2FnZXMgZ28gYm90aCB3YXlzIG92ZXIgdGhlIHNhbWUKKyAgIGNvbm5lY3Rpb24gc2ltdWx0 YW5lb3VzbHkuCisKKyAgIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBDLUtlcm1pdCBvbiBVTklYIGFz IHlvdXIgUFBQIGRpYWxlciBhbmQgdGhlbiB0bworICAgUkVESVJFQ1QgdGhlIGNvbm5lY3Rpb24g dG8gdGhlIFBQUCBzb2Z0d2FyZSwgYnV0IEMtS2VybWl0IDcuMCBvZmZlcnMgYQorICAgYmV0dGVy IGFwcHJvYWNoIHRvIFBQUCBkaWFsaW5nIGluIGl0cyBuZXcgRVhFQyBjb21tYW5kIChbNDY2XVNl Y3Rpb24KKyAgIDEuMjMpLgorCisgICBJbiB0aGVvcnksIHlvdSBjYW4gYWxzbyByZWRpcmVjdCBh biBpbnRlcmFjdGl2ZSBwcm9jZXNzLiBGb3IgZXhhbXBsZSwKKyAgIHN1cHBvc2UgeW91IHRlbGwg S2VybWl0IDk1IHRvIHdhaXQgZm9yIGFuIGluY29taW5nIFRDUC9JUCBjb25uZWN0aW9uOgorCisg IHNldCBob3N0ICogMzAwMAorCisgICBhbmQgdGhlbiB0ZWxsIEMtS2VybWl0IG9uIFVOSVggdG86 CisKKyAgc2V0IGhvc3Qga2VybWl0OTVob3N0bmFtZSAzMDAwCisgIHJlZGlyZWN0IGtzaAorCisg ICBhbmQgdGhlbiB0ZWxsIEtlcm1pdCA5NSB0byBDT05ORUNUOiBub3cgeW91IGFyZSB0YWxraW5n IHRvIHRoZSBVTklYCisgICBLLXNoZWxsOyB5b3UgY2FuIGdpdmUgY29tbWFuZHMgKHB3ZCwgbHMs IGV0YykgYW5kIHNlZSB0aGUgcmVzdWx0cy4gSW4KKyAgIHByYWN0aWNlLCB0aGUgSy1zaGVsbCdz IHRlcm1pbmFsIG1vZGVzIGFyZSBtZXNzZWQgdXAgYmVjYXVzZSAoYSkgaXQgaXMKKyAgIG5vdCBn b2luZyB0aHJvdWdoIHRoZSBVbml4IHRlcm1pbmFsIGRyaXZlciwgYW5kIChiKSBpdCBpcyAic21h cnQiIGFuZAorICAga25vd3MgaXQgaXMgYmVpbmcgcmVkaXJlY3RlZCwgYW5kIHNvIGFjdHMgaW4g YSBkZWNpZGVkbHkgaW5ob3NwaXRhYmxlCisgICBtYW5uZXIgKG90aGVyIGFwcGxpY2F0aW9ucyBs aWtlIEVNQUNTLCB2aSwgZXRjLCBzaW1wbHkgcmVmdXNlIHRvIHJ1biBpZgorICAgdGhlaXIgc3Rh bmRhcmQgaS9vIGhhcyBiZWVuIHJlZGlyZWN0ZWQpLgorCisgICAgICgqKSBUaGUgcHVibGljbHkt ZGlzdHJpYnV0ZWQgc3ovcnogcHJvZ3JhbXMgZG8gbm90IHdvcmsgYXMgY2xpZW50cy4KKyAgICAg SG93ZXZlciwgT21lbiBUZWNobm9sb2d5IGRvZXMgb2ZmZXIgYW4gdXAtdG8tZGF0ZSByZWRpcmVj dGFibGUKKyAgICAgY2xpZW50IFhZWk1PREVNIHByb2dyYW0gY2FsbGVkIGNyenN6LgorCis0LjIu OC4zLiBSZWNlaXZpbmcgTWFpbCBhbmQgUHJpbnQgSm9icworCisgICBBcyBvZiA3LjAsIGFuZCBp biBVTklYIG9ubHksIGZpbGVzIHRoYXQgYXJlIHNlbnQgdG8gQy1LZXJtaXQgYXMgbWFpbAorICAg KHdoZW4gdGhlIG90aGVyIEtlcm1pdCB1c2VzIGEgTUFJTCBvciBTRU5EIC9NQUlMIGNvbW1hbmQp IG9yIHRvIGJlCisgICBwcmludGVkICh2aWEgUkVNT1RFIFBSSU5UIG9yIFNFTkQgL1BSSU5UKSBh cmUgbm93IHBpcGVkIGRpcmVjdGx5IHRvIHRoZQorICAgbWFpbCBvciBwcmludCBwcm9ncmFtLCBy YXRoZXIgdGhhbiB3cml0dGVuIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhlbgorICAgbWFpbGVk IG9yIHByaW50ZWQgYW5kIHRoZW4gZGVsZXRlZC4gVGhpcyBoYXMgdGhlIGFkdmFudGFnZXMgb2Yg KGEpIG5vdAorICAgcmVxdWlyaW5nIGEgdGVtcG9yYXJ5IGZpbGUsIGFuZCAoYikgYWxsb3dpbmcg bWFpbCB0byBoYXZlIGEgcHJvcGVyCisgICBzdWJqZWN0IGluIHBsYWNlIG9mIHRoZSBmaWxlbmFt ZS4gVGVtcG9yYXJ5IGZpbGVzIHdlcmUgYmFkIG5vdCBvbmx5CisgICBiZWNhdXNlIHRoZXkgcmVx dWlyZWQgKGEpIHNwYWNlLCBhbmQgKGIpIHdyaXRhYmlsaXR5IG9mIHRoZSBjdXJyZW50CisgICBk aXJlY3RvcnksIGJ1dCBhbHNvIGJlY2F1c2UgdXNpbmcgdGhlbSBjb3VsZCByZXN1bHQgaW4gd2lw aW5nIG91dCBhbgorICAgZXhpc3RpbmcgZmlsZS4gU2VlIFs0NjddU2VjdGlvbiA0LjcgZm9yIG1v cmUgYWJvdXQgU0VORCAvTUFJTCBhbmQgU0VORAorICAgL1BSSU5ULgorCis0LjIuOC40LiBQaXBl LVJlbGF0ZWQgRnVuY3Rpb25zCisKKyAgIFRoZSBcZmNvbW1hbmQoY29tbWFuZCkgZnVuY3Rpb24g cnVucyB0aGUgZ2l2ZW4gc2hlbGwgb3Igc3lzdGVtIGNvbW1hbmQKKyAgIGFuZCByZXR1cm5zIHRo ZSBjb21tYW5kJ3Mgc3RhbmRhcmQgb3V0cHV0IGFzIGl0cyB2YWx1ZSAod2l0aCBhbnkKKyAgIG5l d2xpbmUgY2hhcmFjdGVycyBzdHJpcHBlZCBmcm9tIHRoZSBlbmQpLCB1bmxlc3MgdGhlIHJlc3Vs dCBpcyB0b28KKyAgIGxvbmcsIGluIHdoaWNoIGNhc2UgaXQgcmV0dXJucyB0aGUgZW1wdHkgc3Ry aW5nLiBUaGUgbWF4aW11bSBsZW5ndGggZm9yCisgICB0aGUgcmVzdWx0IGlzIGF0IGxlYXN0IDEw MjIgYnl0ZXMsIGFuZCBpdCBtaWdodCBiZSBsb25nZXIgb24gc29tZQorICAgcGxhdGZvcm1zLiBF eGFtcGxlcyAoVU5JWCk6CisKKyAgQy1LZXJtaXQ+IGVjaG8gIlxmY29tbWFuZChkYXRlKSIKKyAg IkZyaSBBcHIgMTggMTM6MzE6NDIgMTk5NyIKKyAgQy1LZXJtaXQ+IGVjaG8gIlxmY29tbWFuZChm aW5nZXIgfCB3YyAtbCkiIDsgaG93IG1hbnkgdXNlcnMgbG9nZ2VkIGluPworICAiICAgICAgODMi CisgIEMtS2VybWl0PiBldmFsdWF0ZSBcZmNvbW1hbmQoZmluZ2VyIHwgd2MgLWwpICogMgorICAx NjYKKyAgQy1LZXJtaXQ+IGVjaG8gV2VsY29tZSB0byBcZmNvbW1hbmQodHR5KSBvbiBcZmNvbW1h bmQoZGF0ZSkKKyAgV2VsY29tZSB0byAvZGV2L3R0eXJlIG9uIEZyaSBBcHIgMTggMTM6MzE6NDIg MTk5NworICBDLUtlcm1pdD4gZWNobyAiXGZjb21tYW5kKGxzIG9vZmEuKikiCisgICJvb2ZhLmMK KyAgb29mYS5oCisgIG9vZmEubyIKKyAgQy1LZXJtaXQ+IGNkIC9kaXJlY3Rvcnktd2l0aC10aG91 c2FuZHMtb2YtZmlsZXMKKyAgQy1LZXJtaXQ+IGVjaG8gIlxmY29tbWFuZChscyAtbCkiIDsgVGhp cyB3b3VsZCBiZSB0b28gbG9uZworICAiIgorICBDLUtlcm1pdD4KKworICAgSWYgYSBjb21tYW5k J3Mgb3V0cHV0IHdvdWxkIGJlIHRvbyBsb25nLCB5b3UgY2FuIHVzZSB0aGUgb3RoZXIsIG1vcmUK KyAgIGxhYm9yaW91cyBtZXRob2Qgb2YgcmVhZGluZyBmcm9tIGEgY29tbWFuZDogT1BFTiAhUkVB RCBjb21tYW5kLCBSRUFECisgICBlYWNoIGxpbmUsIENMT1NFICFSRUFELgorCisgICBUaGUgXGZy YXdjb21tYW5kKGNvbW1hbmQpIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBcZmNvbW1hbmQoY29t bWFuZCksCisgICBleGNlcHQgaXQgZG9lcyBub3QgcmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmUgY2hh cmFjdGVyczoKKworICBDLUtlcm1pdD4gZWNobyAiXGZyYXdjb21tYW5kKGRhdGUpIgorICAiRnJp IEFwciAxOCAxMzozMTo0MiAxOTk3CisgICIKKyAgQy1LZXJtaXQ+IGVjaG8gIlxmcmF3Y29tbWFu ZChscyBvb2ZhLiopIgorICAib29mYS5jCisgIG9vZmEuaAorICBvb2ZhLm8KKyAgIgorICBDLUtl cm1pdD4KKworICAgVXNlIFxmcmF3Y29tbWFuZCgpIGlmIHlvdSB3YW50IHRvIHJldGFpbiB0aGUg ZmluYWwgbGluZSB0ZXJtaW5hdG9ycywgb3IKKyAgIGlmIHRoZSBjb21tYW5kJ3Mgb3V0cHV0IGlz ICJiaW5hcnkiLiBCdXQgcmVtZW1iZXIgdGhhdCBpZiB0aGUgcmVzdWx0IG9mCisgICB0aGlzIChv ciBhbnkgb3RoZXIpIGZ1bmN0aW9uIGNvbnRhaW5zIGFueSBOVUwgKEFTQ0lJIGNvZGUgMCkKKyAg IGNoYXJhY3RlcnMsIHRoZSBmaXJzdCBOVUwgd2lsbCB0ZXJtaW5hdGUgdGhlIHJlc3VsdCBzdHJp bmcgYmVjYXVzZSB0aGlzCisgICBpcyBob3cgQyBzdHJpbmdzIHdvcmsgKGl0J3MgIkMtS2VybWl0 IiwgcmVtZW1iZXI/KS4KKworICAgVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VmdWwgbm90IG9ubHkg bG9jYWxseSwgYnV0IGFsc28gaW4gdGhlCisgICBjbGllbnQvc2VydmVyIGFyZW5hLiBJZiB5b3Ug bmVlZCB0byBnZXQgdGhlIHJlc3VsdHMgZnJvbSBhIHN5c3RlbQorICAgY29tbWFuZCBvbiB0aGUg c2VydmVyIGVuZCBpbnRvIGEgdmFyaWFibGUgb24gdGhlIGNsaWVudCBlbmQsIGp1c3QgZG86CisK KyAgWyByZW1vdGUgXSBxdWVyeSBrZXJtaXQgY29tbWFuZChkYXRlKQorCisgICBUaGUgcmVzdWx0 IGlzIGluIHRoZSBsb2NhbCBcdihxdWVyeSkgdmFyaWFibGU7IHNlZSBbNDY4XVVzaW5nIEMtS2Vy bWl0LAorICAgMm5kIEVkLiwgcHAuMzU5LTM2MCBmb3IgZGV0YWlscy4KKworNC4zLiBBdXRvbWF0 aWMgUGVyLUZpbGUgVGV4dC9CaW5hcnkgTW9kZSBTd2l0Y2hpbmcKKworICAgV2hlbiB0cmFuc2Zl cnJpbmcgZmlsZXMgYmV0d2VlbiBsaWtlIHN5c3RlbXMgKGUuZy4gVU5JWC10by1VTklYKSwKKyAg IGJpbmFyeSBtb2RlIGNhbiBiZSB1c2VkIGZvciBhbGwgZmlsZXMgdW5sZXNzIGNoYXJhY3Rlci1z ZXQgdHJhbnNsYXRpb24KKyAgIGlzIG5lZWRlZCwgYW5kIGluIGZhY3QgS2VybWl0IHByb2dyYW1z IG9mIHJlY2VudCB2aW50YWdlIHJlY29nbml6ZSBlYWNoCisgICBvdGhlcnMnIHBsYXRmb3JtcyBh bmQgc3dpdGNoIHRvIGJpbmFyeSBtb2RlIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpcworICAgYXBw cm9wcmlhdGUgKGUuZy4gRE9TIHRvIE9TLzIsIG9yIFVOSVggdG8gVU5JWCkuIChFeGNlcHRpb246 IExBQkVMRUQKKyAgIG1vZGUgaXMgY2hvc2VuIGZvciBWTVMtdG8tVk1TIGFuZCBPUy8yLXRvLU9T LzIgdHJhbnNmZXJzIHNvIGNvbXBsZXgKKyAgIGZpbGUgZm9ybWF0cyBjYW4gYmUgcHJlc2VydmVk LikKKworICAgT24gYSBjbGllbnQvc2VydmVyIGNvbm5lY3Rpb24gYmV0d2VlbiBsaWtlIHN5c3Rl bXMsIHRoZSB0cmFuc2ZlciBtb2RlCisgICBpcyBjdXJyZW50bHkgZGV0ZXJtaW5lZCBieSB0aGUg ZmlsZSBzZW5kZXIsIHJhdGhlciB0aGFuIGFsd2F5cyBieSB0aGUKKyAgIGNsaWVudC4gSWYgdGhl IGNsaWVudCBpcyBzZW5kaW5nLCBpdCBjb250cm9scyB0aGUgdHJhbnNmZXIgbW9kZS4gSWYgYQor ICAgR0VUIGNvbW1hbmQgaXMgc2VudCB0byB0aGUgc2VydmVyLCB0aGUgc2VydmVyIHNlbmRzIGFs bCBmaWxlcyBpbiBiaW5hcnkKKyAgIG1vZGUgaWYgaXRzIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQg aXMgVFJBTlNQQVJFTlQ7IG90aGVyd2lzZSBpdCB1c2VzCisgICB0ZXh0IG1vZGUgZm9yIHRleHQg ZmlsZXMgKGFjY29yZGluZyB0byBpdHMgdGV4dC1wYXR0ZXJuIGxpc3QpIGFuZAorICAgYmluYXJ5 IG1vZGUgZm9yIGJpbmFyeSBmaWxlcy4gT2YgY291cnNlLCB0aGUgY2xpZW50IGNhbiBjb250cm9s IHRoZQorICAgc2VydmVyJ3MgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCB3aXRoIHRoZSBSRU1PVEUg U0VUIFRSQU5TRkVSCisgICBDSEFSQUNURVItU0VUIGNvbW1hbmQuCisKKyAgIFdoZW4gdHJhbnNm ZXJyaW5nIGZpbGVzIGJldHdlZW4gdW5saWtlIHN5c3RlbXMsIGhvd2V2ZXIsIChlLmcuCisgICBV TklYLXRvLURPUyksIHNvbWUgZmlsZXMgKHN1Y2ggYXMgZXhlY3V0YWJsZSBwcm9ncmFtIGltYWdl cykgbXVzdCBiZQorICAgdHJhbnNmZXJyZWQgaW4gYmluYXJ5IG1vZGUgYnV0IG90aGVycyAoc3Vj aCBhcyBwbGFpbi10ZXh0IGZpbGVzKSBtdXN0CisgICBiZSB0cmFuc2ZlcnJlZCBpbiB0ZXh0IG1v ZGUgc28gdGhlaXIgcmVjb3JkIGZvcm1hdCBhbmQgY2hhcmFjdGVyIHNldHMKKyAgIGNhbiBiZSBh cHByb3ByaWF0ZWx5IGNvbnZlcnRlZC4gSWYgYSBiaW5hcnkgZmlsZSBpcyB0cmFuc2ZlcnJlZCBp biB0ZXh0CisgICBtb2RlLCBpdCBpcyBydWluZWQuIElmIGEgdGV4dCBmaWxlIGlzIHRyYW5zZmVy cmVkIGluIGJpbmFyeSBtb2RlLCB0aGVuCisgICBhdCB0aGUgdmVyeSBsZWFzdCwgaXRzIGZvcm1h dCBjYW4gYmUgaW5jb3JyZWN0OyBhdCB3b3JzdCBpdCBpcyBhbHNvCisgICBjb3JydXB0ZWQgYmVj YXVzZSBpdHMgY2hhcmFjdGVyIHNldCB3YXMgbm90IGNvbnZlcnRlZCAoaW4gZXh0cmVtZSBjYXNl cworICAgdGhlIGNvcnJ1cHRpb24gaXMgdG90YWwsIGUuZy4gYmVjYXVzZSBvbmUgc3lzdGVtIGlz IEFTQ0lJLWJhc2VkIGFuZCB0aGUKKyAgIG90aGVyIEVCQ0RJQykuCisKKzQuMy4xLiBFeGNlcHRp b25zCisKKyAgIFZNUyBDLUtlcm1pdCwgd2hlbiBzZW5kaW5nIGZpbGVzIHRvIGEgbm9uLVZNUyBz eXN0ZW0sIHN3aXRjaGVzIHRvIHRleHQKKyAgIG9yIGJpbmFyeSBtb2RlIGF1dG9tYXRpY2FsbHkg Zm9yIGVhY2ggZmlsZSwgYmFzZWQgb24gdGhlIHJlY29yZCBmb3JtYXQKKyAgIGluIHRoZSBmaWxl J3MgZGlyZWN0b3J5IGVudHJ5OyB0aHVzIHRoZSBtZWNoYW5pc21zIGRlc2NyaWJlZCBpbiB0aGlz CisgICBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBWTVMgQy1LZXJtaXQsIHlldCB0aGUgZWZmZWN0 IGlzIHRoZSBzYW1lOgorICAgYXV0b21hdGljIHRleHQvYmluYXJ5IG1vZGUgc3dpdGNoaW5nIHdo ZW4gVk1TIEMtS2VybWl0IGlzIHNlbmRpbmcKKyAgIGZpbGVzLiBTZWUgdGhlIFZNUyBBcHBlbmRp eCBvZiBbNDY5XVVzaW5nIEMtS2VybWl0IGZvciBkZXRhaWxzLgorCisgICBLZXJtaXQgdmVyc2lv bnMgdGhhdCBzdXBwb3J0IExBQkVMRUQgb3IgSU1BR0UgdHJhbnNmZXIgbW9kZSBhcmUKKyAgIGxp a2V3aXNlIG5vdCBhZmZlY3RlZCBieSB0aGlzIGZlYXR1cmUgd2hlbiBvbmUgb2YgdGhvc2UgbW9k ZXMgaXMKKyAgIHNlbGVjdGVkIChub3JtYWxseSB1c2VkIG9ubHkgd2hlbiB0cmFuc2ZlcnJpbmcg YmV0d2VlbiBsaWtlIHN5c3RlbXMpLgorCisgICBLZXJtaXQgdmVyc2lvbnMgdGhhdCBzdXBwb3J0 IGZpbGUtdHJhbnNmZXIgcGlwZXMgYW5kIGZpbHRlcnMgYXJlIG5vdAorICAgYWZmZWN0ZWQgYnkg dGhpcyBmZWF0dXJlIHdoZW4gcGlwZXMgb3IgZmlsdGVycyBhcmUgdXNlZCwgc2luY2UgdGhlCisg ICBvdXRwdXQgb2YgYSBwaXBlIG9yIGZpbHRlciAoc3VjaCBhcyBnemlwKSBpcyBsaWtlbHkgdG8g cmVxdWlyZSB0cmFuc2ZlcgorICAgaW4gYSBkaWZmZXJlbnQgbW9kZSB0aGFuIHRoZSBvcmlnaW5h bCBmaWxlLgorCisgICBGaW5hbGx5LCBTRU5EIC9URVhUIG9yIFNFTkQgL0JJTkFSWSB3aWxsIGZv cmNlIGZpbGVzIHRvIGJlIHNlbnQgaW4gdGhlCisgICBpbmRpY2F0ZWQgbW9kZSwgb3ZlcnJpZGlu ZyBhbGwgYXV0b21hdGljIHRyYW5zZmVyLW1vZGUtY2hvb3NpbmcKKyAgIG1lY2hhbmlzbXMuCisK KzQuMy4yLiBPdmVydmlldworCisgICBTdXBwb3NlIHlvdSBnaXZlIEMtS2VybWl0IGEgY29tbWFu ZCBsaWtlOgorCisgIFNFTkQgKi4qCisKKyAgIEFuZCBzdXBwb3NlIHRoZSBwYXR0ZXJuICouKiBt YXRjaGVzIGEgbWl4dHVyZSBvZiB0ZXh0IGZpbGVzIChzdWNoIGFzCisgICBwcm9ncmFtIHNvdXJj ZSBjb2RlKSBhbmQgYmluYXJ5IGZpbGVzIChzdWNoIG9zIG9iamVjdCBtb2R1bGVzIG9yCisgICBl eGVjdXRhYmxlIHByb2dyYW1zKS4KKworICAgQy1LZXJtaXQgNi4wIGFuZCBlYXJsaWVyIChleGNl cHQgb24gVk1TKSBzZW5kIGFsbCBmaWxlcyBpbiB0aGUgc2FtZQorICAgbW9kZTogd2hhdGV2ZXIg eW91IHNhaWQgaW4geW91ciBtb3N0IHJlY2VudCBTRVQgRklMRSBUWVBFIGNvbW1hbmQsIG9yCisg ICBlbHNlIHdoYXRldmVyIG1vZGUgd2FzIGNob3NlbiBhdXRvbWF0aWNhbGx5IGFjY29yZGluZyB0 byB0aGUgcnVsZXMgb24KKyAgIHBhZ2UgMjM2IG9mIFVzaW5nIEMtS2VybWl0LCAybmQgRWQuCisK KyAgIEJ1dCB3aGVuIHRleHQgYW5kIGJpbmFyeSBmaWxlcyBhcmUgbWl4ZWQgaW4gdGhlIHNhbWUg Z3JvdXAsIGFuZCB0aGUKKyAgIGZpbGVzIGFyZSBiZWluZyB0cmFuc2ZlcnJlZCB0byBhbiB1bmxp a2Ugc3lzdGVtIChlLmcuIFVOSVggdG8gSUJNCisgICBNYWluZnJhbWUpLCB0aGlzIHJlc3VsdHMg aW4gY29ycnVwdGlvbiBvZiBlaXRoZXIgYWxsIHRoZSB0ZXh0IGZpbGVzIG9yCisgICBhbGwgdGhl IGJpbmFyeSBmaWxlcy4KKworICAgU3RyZWFtLW9yaWVudGVkIGZpbGUgc3lzdGVtcyBzdWNoIGFz IGluIFVOSVggYW5kIERPUyBkbyBub3QgcmVjb3JkIGFueQorICAgaW5mb3JtYXRpb24gYWJvdXQg dGhlIGZpbGUgdG8gdGVsbCB1cyB3aGV0aGVyIHRoZSBmaWxlIHNob3VsZCBiZQorICAgdHJhbnNm ZXJyZWQgaW4gYmluYXJ5IG9yIHRleHQgbW9kZSwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gc2Vs ZWN0IHRoZQorICAgdHJhbnNmZXIgbW9kZSBmb3IgZWFjaCBmaWxlIGluIGEgZ3JvdXAgYXV0b21h dGljYWxseSB3aXRoIGFueQorICAgY2VydGFpbnR5LgorCisgICBIb3dldmVyLCB3ZSBjYW4gdXNl IHNvbWUgZmFpcmx5LXdlbGwgZXN0YWJsaXNoZWQgZmlsZSBuYW1pbmcKKyAgIGNvbnZlbnRpb25z IGZvciB0aGlzIHB1cnBvc2UuIEMtS2VybWl0IDcuMCBsZXRzIHlvdSBwcm92aWRlIGxpc3RzIG9m CisgICBmaWxlbmFtZSBwYXR0ZXJucyB0aGF0IGFyZSB1c2VkIHRvIHNlcGFyYXRlbHkgZGV0ZXJt aW5lIHRoZSBmaWxlIHR5cGUKKyAgIGZvciBlYWNoIGluZGl2aWR1YWwgZmlsZSBiZWluZyB0cmFu c2ZlcnJlZC4gQSBwYXR0ZXJuIGlzIGEgc3RyaW5nLAorICAgcG9zc2libHkgY29udGFpbmluZyB0 aGUgc3BlY2lhbCBjaGFyYWN0ZXJzICIqIiAoYXN0ZXJpc2ssIHdoaWNoIG1hdGNoZXMKKyAgIGFu eSBzdHJpbmcgb2YgemVybyBvZiBtb3JlIGNoYXJhY3RlcnMpIGFuZC9vciAiPyIgKHF1ZXN0aW9u IG1hcmssIHdoaWNoCisgICBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyKS4gRm9yIGV4YW1w bGUgImEqYiIgbWF0Y2hlcyBhbGwgZmlsZXMKKyAgIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggImEi IGFuZCBlbmQgd2l0aCAiYiIsIHN1Y2ggYXMgImFiIiwgImFyYiIsCisgICAiYWJhYmFiYWJhYiIs IGV0YywgYnV0IG5vdCAiYWJiYSIuIEFuZCAiYT9iIiBtYXRjaGVzIGFueSBmaWxlIHdob3NlCisg ICBuYW1lIHN0YXJ0cyB3aXRoICJhIiwgZW5kcyB3aXRoICJiIiwgYW5kIGlzIGV4YWN0bHkgMyBj aGFyYWN0ZXJzIGxvbmcuCisKKyAgICAgTk9URTogV2hlbiB0eXBpbmcgY29tbWFuZHMgYXQgdGhl IEMtS2VybWl0IHByb21wdCwgeW91IG11c3QgcHJlZml4CisgICAgICI/IiB3aXRoIFwgdG8gb3Zl cnJpZGUgaXRzIG5vcm1hbCBmdW5jdGlvbiBvZiBnaXZpbmcgaGVscC4KKworICAgKEFsc28gc2Vl IFs0NzBdU2VjdGlvbiA0LjkgZm9yIGFkZGl0aW9uYWwgcGF0dGVybi1tYXRjaGluZyBub3RhdGlv bnMKKyAgIHRoYXQgbWlnaHQgYmUgYXZhaWxhYmxlIGluIHlvdXIgdmVyc2lvbiBvZiBDLUtlcm1p dC4pCisKKyAgIFdoZW4geW91IGhhdmUgc3BlY2lmaWVkIGZpbGVuYW1lIHJlY29nbml0aW9uIHBh dHRlcm5zLCBDLUtlcm1pdCBjYW4KKyAgIHRyYW5zZmVyIHRoZSBvbmVzIHdob3NlIG5hbWVzIG1h dGNoIGFueSBvZiB0aGUgYmluYXJ5LW1vZGUgcGF0dGVybnMgaW4KKyAgIGJpbmFyeSBtb2RlLCBh bmQgdGhvc2Ugd2l0aCBuYW1lcyB0aGF0IG1hdGNoIGFueSBvZiB0aGUgdGV4dC1tb2RlCisgICBw YXR0ZXJucyBpbiB0ZXh0IG1vZGUsIGFuZCB0aG9zZSB3aG9zZSBuYW1lcyBtYXRjaCBuZWl0aGVy IGluIHRoZQorICAgcHJldmFpbGluZyBtb2RlIHlvdSBoYXZlIGNob3Nlbiwgb3IgdGhhdCB3YXMg Y2hvc2VuIGF1dG9tYXRpY2FsbHkgdmlhCisgICBwZWVyIHJlY29nbml0aW9uLgorCis0LjMuMy4g Q29tbWFuZHMKKworICAgU0VUIEZJTEUgUEFUVEVSTlMgeyBPTiwgT0ZGLCBBVVRPIH0KKyAgICAg ICAgICBUaGlzIHRlbGxzIEtlcm1pdCB3aGV0aGVyIHRvIGRvIHBlci1maWxlIGZpbGVuYW1lCisg ICAgICAgICAgcGF0dGVybi1tYXRjaGluZyB0byBkZXRlcm1pbmUgdGV4dCBvciBiaW5hcnkgbW9k ZS4gVGhlIG5vcm1hbAorICAgICAgICAgIGFuZCBkZWZhdWx0IHNldHRpbmcgaXMgQVVUTywgd2hp Y2ggbWVhbnMgdG8gdXNlIHBhdHRlcm4gbGlzdHMgdG8KKyAgICAgICAgICBzd2l0Y2ggdHJhbnNm ZXIgbW9kZSBvbmx5IHdoZW4gaXQgaXMgY2VydGFpbiB0aGF0IHRoZSBvdGhlcgorICAgICAgICAg IEtlcm1pdCBwcm9ncmFtIHN1cHBvcnRzIGF1dG9tYXRpYyBub3RpZmljYXRpb24gb2YgdHJhbnNm ZXIgbW9kZQorICAgICAgICAgICh2aWEgQXR0cmlidXRlIHBhY2tldHMpIG9uIGEgcGVyLWZpbGUg YmFzaXMgKHRoaXMgaW5mb3JtYXRpb24gaXMKKyAgICAgICAgICBvYnRhaW5lZCBhdXRvbWF0aWNh bGx5IGR1cmluZyBwcm90b2NvbCBzdGFydHVwIG5lZ290aWF0aW9uKS4gT04KKyAgICAgICAgICBt ZWFucyB0byBhbHdheXMgZGV0ZXJtaW5lIHRoZSB0cmFuc2ZlciBtb2RlIGZyb20gdGhlIGZpbGVu YW1lCisgICAgICAgICAgYW5kIHBhdHRlcm4gbGlzdCB3aGVuIHNlbmRpbmcgZmlsZXMuIFVzZSBP RkYgdG8gZGlzYWJsZSB0aGlzCisgICAgICAgICAgZmVhdHVyZSAod2l0aG91dCByZXNldHRpbmcg eW91ciBwYXR0ZXJuIGxpc3RzKS4gQWxzbyBub3RlIHRoYXQKKyAgICAgICAgICBpZiB5b3UgaGF2 ZSBzZWxlY3RlZCBMQUJFTEVEIGZpbGUgdHJhbnNmZXIgKFNFVCBGSUxFIFRZUEUKKyAgICAgICAg ICBMQUJFTEVEKSwgdGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZmlsZW5hbWUtbWF0Y2hpbmcg cGF0dGVybnMKKyAgICAgICAgICBhbmQgYWxsIGZpbGVzIGFyZSBzZW50IGluIGxhYmVsZWQgbW9k ZS4KKworICAgU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMCisgICAgICAgICAgRGlzYWJsZXMgdGhl IHVzZSBvZiBmaWxlbmFtZSBwYXR0ZXJucywgbm8gbWF0dGVyIHdoYXQgdGhlIEZJTEUKKyAgICAg ICAgICBQQVRURVJOUyBzZXR0aW5nLgorCisgICBSRU1PVEUgU0VUIFRSQU5TRkVSIE1PREUgTUFO VUFMCisgICAgICAgICAgQ2xpZW50IGNvbW1hbmQgdG8gZGlzYWJsZSBhdXRvbWF0aWMgdHJhbnNm ZXIgbW9kZSwgYW5kIHRoZXJlZm9yZQorICAgICAgICAgIGFsc28gZmlsZW5hbWUgcGF0dGVybnMs IGluIHRoZSBzZXJ2ZXIuIFN5bm9ueW06IFJFTU9URSBTRVQgWEZFUgorICAgICAgICAgIE1PREUg TUFOVUFMLgorCisgICB7IEdFVCwgU0VORCwgZXRjIH0geyAvQklOQVJZLCAvVEVYVCB9CisgICAg ICAgICAgSW5jbHVkaW5nIGEgL0JJTkFSWSBvciAvVEVYVCAob3IsIHdoZXJlIHN1cHBvcnRlZCwg L0lNQUdFIG9yCisgICAgICAgICAgL0xBQkVMRUQpIHN3aXRjaCB3aXRoIGEgZmlsZS10cmFuc2Zl ciBjb21tYW5kIGNoYW5nZXMgdGhlCisgICAgICAgICAgdHJhbnNmZXIgbW9kZSB0byBtYW51YWwg Zm9yIHRoYXQgY29tbWFuZCBvbmx5LCBhbmQgdGhlcmVmb3JlCisgICAgICAgICAgZGlzYWJsZXMg cGF0dGVybnMgdGhhdCB0aGF0IGNvbW1hbmQuCisKKyAgIFNFVCBGSUxFIEJJTkFSWS1QQVRURVJO UyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAuLi4gXSBdIF0KKyAgICAgICAgICBBIGxp c3Qgb2YgemVybyBvciBtb3JlIHBhdHRlcm5zLCBzZXBhcmF0ZWQgYnkgc3BhY2VzIChub3QKKyAg ICAgICAgICBjb21tYXMpLiBMZXR0ZXJzIGluIGEgcGF0dGVybiBhcmUgY2FzZS1zZW5zaXRpdmUg aWYgdGhlCisgICAgICAgICAgdW5kZXJseWluZyBmaWxlbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZl IChhcyBpbiBVTklYKSwgYW5kCisgICAgICAgICAgY2FzZS1pbnNlbnNpdGl2ZSBvdGhlcndpc2Ug KGFzIGluIFdpbmRvd3MpLiBJZiBhIGZpbGUncyBuYW1lIGlzCisgICAgICAgICAgbWF0Y2hlZCBi eSBhbnkgcGF0dGVybiBpbiB0aGUgbGlzdCBhbmQgU0VUIEZJTEUgUEFUVEVSTlMgaXMgT04sCisg ICAgICAgICAgdGhlIGZpbGUgaXMgc2VudCBpbiBiaW5hcnkgbW9kZS4gRXhhbXBsZXM6CisKKyAg U0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TICouZ3ogKi5aICoudGFyICouemlwICoubyAqLnNvICou YSAqLm91dCA7IFVOSVgKKyAgU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TICouRVhFICouWklQICou T0JKICouQ09NIDsgRE9TIG9yIE9TLzIgb3IgV2luZG93cworCisgICAgICAgICAgSWYgYSBwYXR0 ZXJuIGNvbnRhaW5zIHNwYWNlcywgZW5jbG9zZSBpdCBpbiBicmFjZXMuCisKKyAgIFNFVCBGSUxF IFRFWFQtUEFUVEVSTlMgWyBwYXR0ZXJuIFsgcGF0dGVybiBbIHBhdHRlcm4gLi4uIF0gXSBdCisg ICAgICAgICAgTGlrZSBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMsIGJ1dCB0aGUgcGF0dGVybnMg Y2hvb3NlIHRleHQKKyAgICAgICAgICBmaWxlcyByYXRoZXIgdGhhbiBiaW5hcnkgb25lcy4gRXhh bXBsZXM6CisKKyAgU0VUIEZJTEUgVEVYVC1QQVRURVJOUyAqLlRYVCAqLktTQyAqLkhUTSogKi5C QVQgOyBET1MsIFdpbmRvd3MsIE9TLzIKKworICAgQUREIEJJTkFSWS1QQVRURVJOUyBbIHBhdHRl cm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAuLi4gXSBdIF0KKyAgICAgICAgICBBZGRzIG9uZSBvciBt b3JlIHBhdHRlcm5zIHRvIHRoZSBCSU5BUlktUEFUVEVSTiBsaXN0LgorCisgICBBREQgVEVYVC1Q QVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAuLi4gXSBdIF0KKyAgICAgICAg ICBBZGRzIG9uZSBvciBtb3JlIHBhdHRlcm5zIHRvIHRoZSBURVhULVBBVFRFUk4gbGlzdC4KKwor ICAgUkVNT1ZFIEJJTkFSWS1QQVRURVJOUyBbIHBhdHRlcm4gWyBwYXR0ZXJuIFsgcGF0dGVybiAu Li4gXSBdIF0KKyAgICAgICAgICBSZW1vdmVzIG9uZSBvciBtb3JlIHBhdHRlcm5zIGZyb20gdGhl IEJJTkFSWS1QQVRURVJOIGxpc3QuIFRoZQorICAgICAgICAgIGdpdmVuIHBhdHRlcm5zIGFyZSBt YXRjaGVkIHdpdGggdGhlIG9uZXMgaW4gdGhlIEJJTkFSWS1QQVRURVJOUworICAgICAgICAgIGxp c3Qgd2l0aCBjYXNlIHNlbnNpdGl2aXR5IGlmIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtIGhh cworICAgICAgICAgIGNhc2Utc2Vuc2l0aXZlIG5hbWVzIChhcyBkbyBVTklYIGFuZCBPUy05KSwg b3RoZXJ3aXNlIHdpdGggY2FzZQorICAgICAgICAgIGluZGVwZW5kZW5jZS4KKworICAgUkVNT1ZF IFRFWFQtUEFUVEVSTlMgWyBwYXR0ZXJuIFsgcGF0dGVybiBbIHBhdHRlcm4gLi4uIF0gXSBdCisg ICAgICAgICAgUmVtb3ZlcyBvbmUgb3IgbW9yZSBwYXR0ZXJucyBmcm9tIHRoZSBURVhULVBBVFRF Uk4gbGlzdC4KKworICAgU0hPVyBQQVRURVJOUworICAgICAgICAgIERpc3BsYXlzIHRoZSBjdXJy ZW50IHBhdHRlcm4gc2VsZWN0aW9ucy4KKworICAgV2hlbmV2ZXIgeW91IGdpdmUgYSBTRVQgRklM RSBCSU5BUlktUEFUVEVSTlMgb3IgU0VUIEZJTEUgVEVYVC1QQVRURVJOUworICAgY29tbWFuZCwg dGhlIHByZXZpb3VzIGxpc3QgaXMgcmVwbGFjZWQuIElmIHlvdSBnaXZlIG9uZSBvZiB0aGVzZQor ICAgY29tbWFuZHMgd2l0aG91dCBhIHBhdHRlcm4gbGlzdCwgdGhlIHByZXZpb3VzIGxpc3QgaXMg cmVtb3ZlZC4KKworICAgV2hlbiBwYXR0ZXJucyBhcmUgYWN0aXZlIGFuZCBmaWxlcyBhcmUgYmVp bmcgc2VudCwgdGV4dCBwYXR0ZXJucyAoaWYKKyAgIGFueSkgYXJlIGFwcGxpZWQgZmlyc3QgKGJ1 dCBvbmx5IGlmIG5vdCBSRVNFTkRpbmcgYW5kIG5vdCBzZW5kaW5nIGluCisgICBMQUJFTEVEIG1v ZGUpLCB0aGVuIGJpbmFyeSBwYXR0ZXJucywgc28gaWYgdGhlIHNhbWUgcGF0dGVybiBhcHBlYXJz IGluCisgICBib3RoIGxpc3RzLCBiaW5hcnkgbW9kZSBpcyBjaG9zZW4uCisKKzQuMy40LiBFeGFt cGxlcworCisgICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IG1pZ2h0IGJlIHVzZWQgd2hlbiBzZW5k aW5nIGZpbGVzIGZyb20gVU5JWDoKKworICBzZXQgZmlsZSB0eXBlIGJpbmFyeQorICBzZXQgZmls ZSB0ZXh0LXBhdHRlcm5zICouYyAqLmggKi53ICoudHh0IG1ha2VmaWxlCisgIHNldCBmaWxlIGJp bmFyeS1wYXR0ZXJucyAqLm8KKyAgbXNlbmQgbWFrZWZpbGUgd2VybWl0IHdhcnQgY2sqLltjd2hv XSBjayoudHh0CisKKyAgIE5vdGUgdGhhdCAid2VybWl0IiBhbmQgIndhcnQiIGRvIG5vdCBtYXRj aCBhbnkgcGF0dGVybnMgc28gdGhleSBhcmUKKyAgIHNlbnQgaW4gdGhlIHByZXZhaWxpbmcgbW9k ZSwgd2hpY2ggaXMgYmluYXJ5LiBBbHNvIG5vdGUgdGhlIHVzZSBvZgorICAgIm1ha2VmaWxlIiBh cyBhIHBhdHRlcm4gdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSB3aWxkY2FyZCBjaGFyYWN0ZXJz CisgICAodGhlcmUgaXMgbm8gb3RoZXIgY29udmVudGlvbiB0byBkaXN0aW5ndWlzaCBhbW9uZyAi d2VybWl0IiBhbmQgIndhcnQiLAorICAgd2hpY2ggYXJlIGJpbmFyeSBleGVjdXRhYmxlcywgYW5k ICJtYWtlZmlsZSIsIHdoaWNoIGlzIGEgdGV4dCBmaWxlLAorICAgcHVyZWx5IGJ5IHRoZWlyIG5h bWVzKS4KKworICAgTW9zdCBDLUtlcm1pdCBpbXBsZW1lbnRhdGlvbnMgaGF2ZSBhIGRlZmF1bHQg cGF0dGVybiBsaXN0IGJ1aWx0IGluLAorICAgd2hpY2ggaW5jbHVkZXMgcGF0dGVybnMgdGhhdCBh cmUgYWxtb3N0IGNlcnRhaW4gdG8gc3VjY2VlZCBpbiBwaWNraW5nCisgICB0aGUgcmlnaHQgdHJh bnNmZXIgbW9kZS4gT3RoZXJzIGFyZSBvbWl0dGVkIGR1ZSB0byBhbWJpZ3VpdHkuIEZvcgorICAg ZXhhbXBsZSAiLmhscCIsIGFuZCAiLmluaSIgYXJlIGdlbmVyYWxseSBiaW5hcnkgdHlwZXMgaW4g V2luZG93cyBidXQKKyAgIHRleHQgdHlwZXMgZXZlcnl3aGVyZSBlbHNlLgorCisgICAgIE5PVEU6 ICIuZG9jIiwgdXNlZCBmb3IgZGVjYWRlcyB0byBkZW5vdGUgcGxhaW4tdGV4dCBkb2N1bWVudGF0 aW9uCisgICAgIGZpbGVzLCBub3cgbW9yZSBvZnRlbiB0aGFuIG5vdCBkZW5vdGVzIGEgTWljcm9z b2Z0IFdvcmQgRG9jdW1lbnQsIHNvCisgICAgICIuZG9jIiBpcyBub3cgY29uc2lkZXJlZCBhIGJp bmFyeSB0eXBlIHNpbmNlIGl0IGRvZXMgbGVzcyBoYXJtIHRvCisgICAgIHRyYW5zZmVyIGEgcGxh aW4tdGV4dCBkb2N1bWVudCBpbiBiaW5hcnkgbW9kZSB0aGFuIGl0IGRvZXMgdG8KKyAgICAgdHJh bnNmZXIgYW4gTVMgV29yZCBmaWxlIGluIHRleHQgbW9kZSAoZXhjZXB0IHdoZW4gSUJNIG1haW5m cmFtZXMKKyAgICAgYXJlIGludm9sdmVkISkKKworICAgICBBTk9USEVSIE5PVEU6ICIuY29tIiBm aWxlcyBhcmUgYmluYXJ5IGluIERPUy1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLAorICAgICBidXQg dGhleSBhcmUgdGV4dCAoRENMIGNvbW1hbmQgcHJvY2VkdXJlcykgaW4gVk1TLiBWTVMgQy1LZXJt aXQKKyAgICAgc2VuZHMgLkNPTSBmaWxlcyBpbiB0ZXh0IG1vZGU7IEs5NSBzZW5kcyB0aGVtIGlu IGJpbmFyeSBtb2RlLiBJZiB5b3UKKyAgICAgZG93bmxvYWQgYSAuQ09NIGZpbGUgZnJvbSBWTVMg dG8gRE9TIG9yIFdpbmRvd3MsIGFuZCB0aGVuIHVwbG9hZCBpdAorICAgICB0byBhbm90aGVyIFZN UyBzeXN0ZW0sIGJlIHN1cmUgdG8gdXNlIFNFTkQgL1RFWFQgdG8gcHJlc2VydmUgaXRzCisgICAg IHRleHRuZXNzLgorCisgICBZb3UgY2FuIHNlZSB0aGUgZGVmYXVsdCBwYXR0ZXJuIGxpc3QgYnkg c3RhcnRpbmcgQy1LZXJtaXQgd2l0aG91dCBpdHMKKyAgIGluaXRpYWxpemF0aW9uIGZpbGUgKGUu Zy4gImtlcm1pdCAtWSIpIGFuZCB1c2luZyB0aGUgU0hPVyBQQVRURVJOUworICAgY29tbWFuZC4g SWYgeW91IHdpbGwgYmUgZGVwZW5kaW5nIG9uIHRoaXMgZmVhdHVyZSwgYmUgc3VyZSB0byBleGFt aW5lCisgICB0aGUgbGlzdCBjYXJlZnVsbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYXBwbGlj YXRpb25zIHRoYXQgeW91IHVzZS4KKworICAgVGhlIGRlZmF1bHQgcGF0dGVybiBsaXN0IGRvZXMg bm90IHRha2UgImJhY2t1cCBmaWxlcyIgaW50byBhY2NvdW50CisgICBiZWNhdXNlIChhKSBwZW9w bGUgdXN1YWxseSBkb24ndCB3YW50IHRvIHRyYW5zZmVyIHRoZW07IGFuZCAoYikgaXQKKyAgIHdv dWxkIG1ha2UgdGhlIHBhdHRlcm4gbGlzdHMgbW9yZSB0aGFuIHR3aWNlIGFzIGxvbmcuIEZvciBl eGFtcGxlLCB3ZQorICAgd291bGQgbmVlZCB0byBpbmNsdWRlIGJvdGggKi50eHQgYW5kICoudHh0 Ln5bMC05XSp+IGZvciAiLnR4dCIgZmlsZXMsCisgICBhbmQgc2ltaWxhcmx5IGZvciBhbGwgdGhl IG90aGVycy4gSW5zdGVhZCwgeW91IGNhbiB1c2UgU0VORCAvTk9CQUNLVVAKKyAgIChvciBTRVQg U0VORCBCQUNLVVAgT0ZGKSB0byBza2lwIG92ZXIgYWxsIGJhY2t1cCBmaWxlcy4KKworICAgUHV0 IHlvdXIgbW9zdCBjb21tb25seS11c2VkIHNhZmUgcGF0dGVybiBkZWNsYXJhdGlvbnMgaW4geW91 ciBDLUtlcm1pdAorICAgY3VzdG9taXphdGlvbiBmaWxlIChja2VybW9kLmluaSwgLm15a2VybXJj LCBrOTVjdXN0b20uaW5pLCBldGMpLgorCisgICBBcyBub3RlZCwgU0VUIEZJTEUgUEFUVEVSTlMg aXMgT04gYnkgZGVmYXVsdC4gU29tZXRpbWVzLCBob3dldmVyLCBpdCBpcworICAgZGVzaXJhYmxl LCBvciBuZWNlc3NhcnksIHRvIGZvcmNlIGZpbGVzIHRvIGJlIHNlbnQgaW4gYSBwYXJ0aWN1bGFy CisgICBtb2RlLCBhbmQgb2Z0ZW4gdGhpcyBtdXN0IGJlIGRvbmUgZnJvbSB0aGUgY29tbWFuZCBs aW5lIChlLmcuIHdoZW4KKyAgIHVzaW5nIEtlcm1pdCBhcyBhIGRvd25sb2FkIGhlbHBlciBpbiBh IFdlYiBicm93c2VyIGxpa2UgTHlueCkuIFRoZSAtVgorICAgY29tbWFuZC1saW5lIG9wdGlvbnMg aXMgZXF1aXZhbGVudCB0byBTRVQgRklMRSBQQVRURVJOUyBPRkYgYW5kIFNFVAorICAgVFJBTlNG RVIgTU9ERSBNQU5VQUwuIEV4YW1wbGU6CisKKyAga2VybWl0IC1WaXMgb29mYS50eHQKKworICAg Zm9yY2VzIG9vZmEudHh0IHRvIGJlIHNlbnQgaW4gYmluYXJ5IG1vZGUsIGV2ZW4gdGhvdWdoICIu dHh0IiBtaWdodAorICAgbWF0Y2ggYSB0ZXh0IHBhdHRlcm4uCisKKzQuNC4gRmlsZSBQZXJtaXNz aW9ucworCisgICAiUGVybWlzc2lvbnMiIHJlZmVycyB0byBhIGNvZGUgYXNzb2NpYXRlZCB3aXRo IGEgZmlsZSB0aGF0IHNwZWNpZmllcworICAgd2hvIGlzIGFsbG93ZWQgdG8gYWNjZXNzIGl0LCBh bmQgaW4gd2hhdCBtYW5uZXIuIEZvciBleGFtcGxlLCB0aGUKKyAgIG93bmVyLCB0aGUgbWVtYmVy cyBvZiBvbmUgb3IgbW9yZSBncm91cHMsIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciwgYW5kCisg ICBldmVyeWJvZHkgZWxzZSwgbWlnaHQgYmUgYWxsb3dlZCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBv ZiBSZWFkLCBXcml0ZSwKKyAgIEFwcGVuZCwgRXhlY3V0ZSwgb3IgTGlzdGluZyBhY2Nlc3MuCisK KyAgIFRoZSBwZXJtaXNzaW9uIGNvZGUgZ29lcyBieSBkaWZmZXJlbnQgbmFtZXMgb24gZGlmZmVy ZW50IHBsYXRmb3Jtcy4gSW4KKyAgIFVOSVgsIGl0IG1pZ2h0IGJlIGNhbGxlZCB0aGUgZmlsZW1v ZGUuIEluIFZNUywgaXQgaXMgY2FsbGVkIHRoZSBmaWxlCisgICBwcm90ZWN0aW9uIChvciBwcm90 ZWN0aW9uIG1hc2spLgorCisgICBUaGUgY29tbWVudHMgaW4gdGhpcyBzZWN0aW9uIHByZXNlbnRs eSBhcHBseSBvbmx5IHRvIHRoZSBVTklYIGFuZCBWTVMKKyAgIHZlcnNpb25zIG9mIEMtS2VybWl0 LCB0byB3aGljaCB0aGVzZSBmZWF0dXJlcyB3ZXJlIGFkZGVkIGluIHZlcnNpb24KKyAgIDcuMDsg dGhlIERPUywgV2luZG93cywgYW5kIE9TLzIgZmlsZSBzeXN0ZW1zIGVtYm9keSBubyBub3Rpb25z IG9mCisgICBwcm90ZWN0aW9uLCBhbmQgc28gTVMtRE9TIEtlcm1pdCBhbmQgS2VybWl0IDk1IGRv IG5vdCBzZW5kIGZpbGUKKyAgIHBlcm1pc3Npb25zLCBhbmQgaWdub3JlIHRoZW0gd2hlbiByZWNl aXZlZC4KKworICAgVGhlIHBlcm1pc3Npb25zIGZvciBhIHJlY2VpdmVkIGZpbGUgYXJlIGRldGVy bWluZWQgYnkgYSBjb21iaW5hdGlvbiBvZgorICAgdGhlIGZpbGUgdHJhbnNmZXIgbW9kZSAoVk1T LXRvLVZNUyB0cmFuc2ZlcnMgb25seSksIHdoZXRoZXIgYSBmaWxlIG9mCisgICB0aGUgc2FtZSBu YW1lIGV4aXN0cyBhbHJlYWR5LCB3aGV0aGVyIHBlcm1pc3Npb25zIG9mIHRoZSBmaWxlIGFyZQor ICAgcmVjZWl2ZWQgaW4gdGhlIGZpbGUgYXR0cmlidXRlIHBhY2tldCwgYW5kIHRoZSBzZXR0aW5n IG9mIEFUVFJJQlVURVMKKyAgIFBST1RFQ1RJT04uCisKKyAgIFRoZSBkZWZhdWx0IGZvciBBVFRS SUJVVEVTIFBST1RFQ1RJT04gaXMgT04uIElmIG5vIGF0dHJpYnV0ZXMgYXJlCisgICByZWNlaXZl ZCwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZiBhdHRyaWJ1dGVzIFBST1RFQ1RJT04gd2Vy ZSBPRkYuCisKKyAgIEZvciBWTVMtdG8tVk1TIHRyYW5zZmVycywgdGhlIGRlZmF1bHQgTEFCRUxF RCBtb2RlIHNpbXBseSBjb3BpZXMgdGhlCisgICBwcm90ZWN0aW9uIGNvZGUgZnJvbSBzb3VyY2Ug dG8gZGVzdGluYXRpb24uCisKKzQuNC4xLiBXaGVuIEFUVFJJQlVURVMgUFJPVEVDVElPTiBpcyBP RkYKKworICAgSWYgbm8gZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGV4aXN0cywgc3lzdGVtIGRlZmF1 bHRzIGRldGVybWluZSB0aGUKKyAgIHBlcm1pc3Npb25zIG9mIHRoZSBuZXcgZmlsZS4gT3RoZXJ3 aXNlLCB0aGUgYWN0aW9ucyB0YWtlbiBkZXBlbmQgb24gdGhlCisgICBjdXJyZW50IEZJTEUgQ09M TElTSU9OIHNldHRpbmc6IEJBQ0tVUCwgT1ZFUldSSVRFLCBSRU5BTUUsIGV0YywgYXMKKyAgIGRv Y3VtZW50ZWQgaW4gWzQ3MV1Vc2luZyBDLUtlcm1pdC4gQnV0IG5vdyB0aGUgbmV3IGZpbGUgKGlm IGl0IGlzCisgICBjcmVhdGVkIGF0IGFsbCkgYXV0b21hdGljYWxseSBpbmhlcml0cyB0aGUgcGVy bWlzc2lvbnMgKG1vZGUgYml0cykgb2YKKyAgIHRoZSBleGlzdGluZyBmaWxlIGluIGEgd2F5IHRo YXQgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBwbGF0Zm9ybS4KKworNC40LjEuMS4gVW5peAorCisg ICBBbGwgbW9kZSBiaXRzIGFyZSBpbmhlcml0ZWQgZXhjZXB0IHRoZSBkaXJlY3RvcnkgYml0LCBz aW5jZSB0aGUKKyAgIGluY29taW5nIGZpbGUgY2FuIG5vdCBwb3NzaWJseSBiZSBhIGRpcmVjdG9y eS4gKEluIGFueSBjYXNlLCBpdCBpcyBub3QKKyAgIHBvc3NpYmxlIHRvIHJlY2VpdmUgYSBmaWxl IHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcKKyAgIGRpcmVjdG9yeSB1bmxl c3MgRklMRSBDT0xMSVNJT04gaXMgc2V0IHRvIFJFTkFNRSkuCisKKzQuNC4xLjIuIFZNUworCisg ICBGaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZSwgdHJhbnNmZXJy ZWQgaW4gbW9kZXMKKyAgIG90aGVyIHRoYW4gTEFCRUxFRCBiZXR3ZWVuIFZNUyBzeXN0ZW1zLCBp bmhlcml0IHRoZSBwcm90ZWN0aW9uIG9mIHRoZQorICAgcHJpb3IgdmVyc2lvbi4KKworNC40LjIg V2hlbiBBVFRSSUJVVEVTIFBST1RFQ1RJT04gaXMgT04KKworICAgRmlsZSBwZXJtaXNzaW9ucyBj YW4gYmUgY29udmV5ZWQgYXMgcGFydCBvZiB0aGUgZmlsZSB0cmFuc2ZlciBwcm9jZXNzLAorICAg aW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBLZXJtaXQgcHJvdG9jb2wgZGVmaW5pdGlvbi4gSWYgdGhl IGZpbGUgc2VuZGVyCisgICBwdXRzIHN5c3RlbS1kZXBlbmRlbnQgYW5kL29yIHN5c3RlbS1pbmRl cGVuZGVudCB2ZXJzaW9ucyBvZiB0aGUgZmlsZQorICAgcHJvdGVjdGlvbiAocGVybWlzc2lvbnMp IGludG8gdGhlIEF0dHJpYnV0ZSAoQSkgcGFja2V0LCB0aGUgZmlsZQorICAgcmVjZWl2ZXIgY2Fu IHNldCB0aGUgbmV3IGZpbGUncyBwZXJtaXNzaW9ucyBmcm9tIHRoZW0uIE90aGVyd2lzZSwgdGhl CisgICBwZXJtaXNzaW9ucyBhcmUgc2V0IHRoZSBzYW1lIGFzIGZvciBBVFRSSUJVVEVTIFBST1RF Q1RJT04gT0ZGLgorCisgICBXaGVuIHRoZSBpbmNvbWluZyBBIHBhY2tldCBjb250YWlucyBzeXN0 ZW0tZGVwZW5kZW50IHBlcm1pc3Npb25zLCB0aGUKKyAgIGZpbGUgcmVjZWl2ZXIgY2hlY2tzIHRv IHNlZSBpZiB0aGUgc2VuZGVyIGhhcyB0aGUgc2FtZSBzeXN0ZW0gSUQgKGUuZy4KKyAgIGJvdGgg dGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBzeXN0ZW1zIGFyZSBVTklYLCBvciBib3RoIGFyZSBW TVMpOyBpZgorICAgc28sIGl0IGRlY29kZXMgYW5kIHVzZXMgdGhlIHN5c3RlbS1kZXBlbmRlbnQg cGVybWlzc2lvbnM7IG90aGVyd2lzZSBpdAorICAgdXNlcyB0aGUgZ2VuZXJpYyBvbmVzIChpZiBh bnkpIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIG93bmVyIGZpZWxkLAorICAgc2V0dGluZyB0aGUg b3RoZXIgZmllbGRzIGFwcHJvcHJpYXRlbHkgYXMgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcK KyAgIHNlY3Rpb25zLgorCisgICBTZXR0aW5nIHRoZSBpbmNvbWluZyBmaWxlJ3MgcHJvdGVjdGlv biBmcm9tIHRoZSBBIHBhY2tldCBpcyBjb250cm9sbGVkCisgICBieSBTRVQgQVRUUklCVVRFUyBQ Uk9URUNUSU9OIChvciBQRVJNSVNTSU9OKSwgd2hpY2ggaXMgT04gYnkgZGVmYXVsdCwKKyAgIGFu ZCBpdHMgc3RhdHVzIGlzIGRpc3BsYXllZCBieSBTSE9XIEFUVFJJQlVURVMuCisKKyAgIFRoZSBt YWluIGJlbmVmaXQgb2YgdGhpcyBmZWF0dXJlIGlzIHRvIG5vdCBoYXZlIHRvICJjaG1vZCAreCIg YW4KKyAgIGV4ZWN1dGFibGUgZmlsZSBhZnRlciB0cmFuc2ZlciBmcm9tIFVOSVggdG8gVU5JWC4g SXRzIGNyb3NzLXBsYXRmb3JtCisgICBiZW5lZml0cyBhcmUgbGVzcyBldmlkZW50LCBwZXJoYXBz IHRvIHJldGFpbiB0aGUgc3RhdHVzIG9mIHRoZSBVbml4ICd4JworICAgYml0IG9uIGEgVk1TIHN5 c3RlbSwgZm9yIHN1YnNlcXVlbnQgdHJhbnNmZXIgYmFjayB0byBhIFVuaXggc3lzdGVtLgorCis0 LjQuMi4xLiBTeXN0ZW0tU3BlY2lmaWMgUGVybWlzc2lvbnMKKworICAgU3lzdGVtLXNwZWNpZmlj IGZpbGUgcGVybWlzc2lvbnMgYXJlIHVzZWQgd2hlbiB0aGUgdHdvIEtlcm1pdCBwcm9ncmFtcwor ICAgcmVjb2duaXplIGVhY2ggb3RoZXIgYXMgcnVubmluZyBvbiB0aGUgc2FtZSB0eXBlIG9mIHN5 c3RlbS4gRm9yCisgICBleGFtcGxlLCBib3RoIGFyZSBydW5uaW5nIHVuZGVyIHNvbWUgZm9ybSBv ZiBVTklYIChpdCBkb2Vzbid0IG1hdHRlcgorICAgd2hpY2ggVU5JWCB2YXJpYXRpb24gLS0gSFAt VVgsIFNvbGFyaXMsIEFJWCwgZXRjIC0tIGFsbCB1c2UgdGhlIHNhbWUKKyAgIHNjaGVtZSBmb3Ig ZmlsZSBwZXJtaXNzaW9ucyk7IG9yIGJvdGggYXJlIHJ1bm5pbmcgdW5kZXIgVk1TIChldmVuIGlm CisgICBvbmUgaXMgb24gYW4gQWxwaGEgYW5kIHRoZSBvdGhlciBvbiBhIFZBWCwgYW5kL29yIG9u ZSBpcyBvbGQgYW5kIHRoZQorICAgb3RoZXIgaXMgbmV3KS4KKworNC40LjIuMS4xLiBVTklYCisK KyAgIFVOSVggc3VwcG9ydHMgdGhyZWUgY2F0ZWdvcmllcyBvZiB1c2VycywgRmlsZSBPd25lciwg R3JvdXAsIGFuZCBXb3JsZCwKKyAgIGFuZCB0aHJlZSB0eXBlcyBvZiBmaWxlIGFjY2VzcyBwZXJt aXNzaW9uOiBSZWFkLCBXcml0ZSwgYW5kIEV4ZWN1dGUuCisgICBUaHVzLCBhIFVOSVggZmlsZSdz IHBlcm1pc3Npb25zIGFyZSBleHByZXNzZWQgaW4gOSBiaXRzLgorCisgICBUaGUgc3lzdGVtLWRl cGVuZGVudCBwZXJtaXNzaW9uIHN0cmluZyBmb3IgVU5JWCBpcyBhIDMtZGlnaXQgb2N0YWwKKyAg IHN0cmluZywgdGhlIGxvdy1vcmRlciA5IGJpdHMgb2YgdGhlIHN0X21vZGUgbWVtYmVyIG9mIHRo ZSBzdGF0IHN0cnVjdDsKKyAgIHdlIGRlbGliZXJhdGVseSBjaG9wIG9mZiB0aGUgImZpbGUgZm9y bWF0IiBiaXRzIGJlY2F1c2UgdGhleSBhcmUgbm90CisgICBwZXJtaXNzaW9ucywgbm9yIGRvIHdl IGNvbnZleSB0aGUgc2V0dWlkL3NldGdpZCBiaXRzLCBsb2NrIGJpdCwgc3RpY2t5CisgICBiaXQs IGV0Yy4KKworNC40LjIuMS4yLiBWTVMKKworICAgVk1TIHN1cHBvcnRzIGZvdXIgY2F0ZWdvcmll cyBvZiB1c2VycywgU3lzdGVtLCBGaWxlIE93bmVyLCBHcm91cCwgYW5kCisgICBXb3JsZCwgYW5k IGZvdXIgdHlwZXMgb2YgZmlsZSBhY2Nlc3MgcGVybWlzc2lvbjogUmVhZCwgV3JpdGUsIEV4ZWN1 dGUsCisgICBhbmQgRGVsZXRlLiBUaHVzLCBhIFZNUyBmaWxlJ3MgcGVybWlzc2lvbnMgYXJlIGV4 cHJlc3NlZCBpbiAxNiBiaXRzLgorCisgICBUaGUgc3lzdGVtLWRlcGVuZGVudCBwcm90ZWN0aW9u IHN0cmluZyBmb3IgVk1TIGlzIGEgNC1kaWdpdCBoZXhhZGVjaW1hbAorICAgc3RyaW5nLCBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBpbnRlcm5hbC1mb3JtYXQgcHJvdGVjdGlvbiB3b3JkIG9mIHRoZQor ICAgZmlsZSAoUldFRCBmb3IgZWFjaCBvZiBXb3JsZCxHcm91cCxPd25lcixTeXN0ZW0pLiBBIG5l dyBmaWxlIG5vcm1hbGx5CisgICBnZXRzIGFsbCAxNiBwcm90ZWN0aW9uIGJpdHMgZnJvbSB0aGUg b3JpZ2luYWwgZmlsZSBvZiB0aGUgc2FtZSBuYW1lLgorCisgICBOb3RlOiBWTVMtdG8tVk1TIHRy YW5zZmVycyB0YWtlIHBsYWNlIGluIExBQkVMRUQgbW9kZSB3aGVuIHRoZSB0d28KKyAgIEMtS2Vy bWl0cyByZWNvZ25pemUgZWFjaCBvdGhlcidzIHBsYXRmb3JtIGFzIFZNUyAodW5sZXNzIHlvdSBo YXZlCisgICBkaXNhYmxlZCBMQUJFTEVELW1vZGUgdHJhbnNmZXJzKS4gSW4gdGhpcyBjYXNlLCBh bGwgb2YgYSBmaWxlJ3MKKyAgIGF0dHJpYnV0ZXMgYXJlIHByZXNlcnZlZCBpbiB0aGUgdHJhbnNm ZXIgYW5kIHRoZSBwcm90ZWN0aW9uIG1hc2sgKGFuZAorICAgb3RoZXIgaW5mb3JtYXRpb24pIGlz IHRha2VuIGZyb20gdGhlIGZpbGUncyBpbnRlcm5hbCBpbmZvcm1hdGlvbiwgYW5kCisgICB0aGlz IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhbnkgaW5mb3JtYXRpb24gaW4gdGhlIEF0dHJpYnV0ZSBw YWNrZXRzLgorICAgWW91IGNhbiBkZWZlYXQgdGhlIGF1dG9tYXRpYyBzd2l0Y2hpbmcgaW50byBM QUJFTEVEIG1vZGUgKGlmIHlvdSB3YW50CisgICB0bykgd2l0aCBTRVQgVFJBTlNGRVIgTU9ERSBN QU5VQUwuCisKKzQuNC4yLjIuIFN5c3RlbS1JbmRlcGVuZGVudCBQZXJtaXNzaW9ucworCisgICBU aGUgc3lzdGVtLWluZGVwZW5kZW50ICgiZ2VuZXJpYyIpIHByb3RlY3Rpb24gaXMgdXNlZCB3aGVu IHRoZSBzeXN0ZW0KKyAgIElEcyBvZiB0aGUgdHdvIEtlcm1pdCBwcm9ncmFtcyBkbyBub3QgYWdy ZWUgKGUuZy4gb25lIGlzIFVOSVgsIHRoZQorICAgb3RoZXIgaXMgVk1TKS4gVGhlIGdlbmVyaWMg cHJvdGVjdGlvbiBhdHRyaWJ1dGUgaW5jbHVkZXMgdGhlIGZvbGxvd2luZworICAgcGVybWlzc2lv bnMgKG5vdCBhbGwgYXJlIGFwcGxpY2FibGUgdG8gZXZlcnkgZmlsZSBzeXN0ZW0pOiBSZWFkLCBX cml0ZSwKKyAgIEFwcGVuZCwgRXhlY3V0ZSwgRGVsZXRlLCBTZWFyY2guIFRoZSBnZW5lcmljIHBl cm1pc3Npb25zIGFyZSBkZXJpdmVkCisgICBmcm9tIHRoZSBvd25lciBwZXJtaXNzaW9ucyBvZiB0 aGUgc291cmNlIGZpbGUsIHRodXMsIGEgVW5peCAndycKKyAgIHBlcm1pc3Npb24gYmVjb21lcyBW TVMgV3JpdGUsRGVsZXRlLgorCisgICBUaGUgT3duZXIgZmllbGQgb2YgdGhlIG5ldyBmaWxlJ3Mg cGVybWlzc2lvbnMgaXMgc2V0IGZyb20gdGhlIGluY29taW5nCisgICBnZW5lcmljIHByb3RlY3Rp b24gYXR0cmlidXRlLgorCisgICBJbiBVTklYLCB0aGUgR3JvdXAgYW5kIFdvcmxkIHBlcm1pc3Np b25zIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHlvdXIKKyAgIHVtYXNrLCBleGNlcHQgdGhhdCBleGVj dXRlIHBlcm1pc3Npb24gaXMgTk9UIHNldCBpbiB0aGVzZSBmaWVsZHMgaWYgaXQKKyAgIHdhcyBu b3QgYWxzbyBzZXQgaW4gdGhlIGdlbmVyaWMgcHJvdGVjdGlvbiAoYW5kIGNvbnNlcXVlbnRseSwg aXMgc2V0IGluCisgICB0aGUgT3duZXIgZmllbGQpLgorCisgICBJbiBWTVMsIHRoZSBTeXN0ZW0s IEdyb3VwLCBhbmQgV29ybGQgcGVybWlzc2lvbnMgYXJlIHNldCBhY2NvcmRpbmcgdG8KKyAgIHRo ZSBwcm9jZXNzIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9uIChhcyBzaG93biBpbiBWTVMgYnkgU0hP VworICAgUFJPVEVDVElPTiksIGV4Y2VwdCB0aGF0IG5vIHBlcm1pc3Npb25zIGFyZSBhbGxvd2Vk IGluIHRoZXNlIGZpZWxkcworICAgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBnZW5lcmlj IHBlcm1pc3Npb25zLgorCisgICBOb3RlIHRoYXQgdGhlIFZNUyBhbmQgVU5JWCBpbnRlcnByZXRh dGlvbnMgb2YgRXhlY3V0ZSBwZXJtaXNzaW9uIGFyZQorICAgbm90IGlkZW50aWNhbC4gSW4gVU5J WCwgYSBmaWxlIChiaW5hcnkgZXhlY3V0YWJsZSwgc2hlbGwgc2NyaXB0LCBldGMpCisgICBtYXkg bm90IGJlIGV4ZWN1dGVkIHVubGVzcyBpdCBoYXMgRXhlY3V0ZSBwZXJtaXNzaW9uLCBhbmQgbm9y bWFsbHkKKyAgIGZpbGVzIHRoYXQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZXhlY3V0aW9uIGRvIG5v dCBoYXZlIEV4ZWN1dGUKKyAgIHBlcm1pc3Npb24uIEluIFZNUywgUmVhZCBwZXJtaXNzaW9uIGlt cGxpY2l0bHkgc3VwcGxpZXMgRXhlY3V0ZQorICAgY2FwYWJpbGl0eS4gR2VuZXJhbGx5IGZpbGVz IHRoYXQgaGF2ZSBSZWFkIHBlcm1pc3Npb24gYWxzbyBoYXZlCisgICBleHBsaWNpdCBFeGVjdXRl IHBlcm1pc3Npb24sIGJ1dCBmaWxlcyAoYmluYXJ5IGV4ZWN1dGFibGVzLCBEQ0wgY29tbWFuZAor ICAgcHJvY2VkdXJlcykgdGhhdCBoYXZlIFJlYWQgcGVybWlzc2lvbiBhbmQgbm90IEV4ZWN1dGUg cGVybWlzc2lvbiBjYW4KKyAgIHN0aWxsIGJlIGV4ZWN1dGVkLgorCis0LjUuIEZpbGUgTWFuYWdl bWVudCBDb21tYW5kcworCis0LjUuMS4gVGhlIERJUkVDVE9SWSBDb21tYW5kCisKKyAgIFByaW9y IHRvIEMtS2VybWl0IDcuMCwgdGhlIERJUkVDVE9SWSBjb21tYW5kIGFsd2F5cyByYW4gYW4gZXh0 ZXJuYWwKKyAgIHN5c3RlbSBjb21tYW5kIChzdWNoIGFzICJscyIgb24gVU5JWCkgb3IgcHJvZ3Jh bSB0byBwcm9kdWN0IHRoZQorICAgZGlyZWN0b3J5IGxpc3RpbmcuIFRoaXMgaGFkIGNlcnRhaW4g YWR2YW50YWdlcywgbW9zdGx5IHRoYXQgeW91IGNvdWxkCisgICBpbmNsdWRlIHN5c3RlbS1kZXBl bmRlbnQgb3B0aW9ucyBmb3IgY3VzdG9taXplZCBsaXN0aW5ncywgZS5nLiBvbiBVTklYOgorCisg IGRpciAtbHQgYyogfCBtb3JlCisKKyAgIG9yIGluIFZNUzoKKworICBkaXJlY3RvcnkgL3NpemUv ZGF0ZS9wcm90ZWN0aW9uL2V4Y2VwdD0qLm9iaiBvb2ZhLio7MAorCisgICBUaGlzIGFwcHJvYWNo LCBob3dldmVyLCBjYXJyaWVzIHNvbWUgZGlzYWR2YW50YWdlczogQy1LZXJtaXQgY2FuJ3QKKyAg IHJldHVybiBTVUNDRVNTIG9yIEZBSUxVUkUgc3RhdHVzIGZvciAoZS5nLikgImRpciBmb28iIGFj Y29yZGluZyB0bworICAgd2hldGhlciB0aGUgZmlsZSAiZm9vIiBleGlzdHM7IGFuZCBpdCBydW5z IGFuIGluZmVyaW9yIHByb2Nlc3MsIHdoaWNoCisgICBtaWdodCBiZSBhIHByb2JsZW0gaW4gc29t ZSBlbnZpcm9ubWVudHMgZm9yIHJlc291cmNlIGFuZC9vciBzZWN1cml0eQorICAgcmVhc29ucywg YW5kIHdvbid0IHdvcmsgYXQgYWxsIGluIGEgIm5vcHVzaCIgZW52aXJvbm1lbnQgKGUuZy4gb25l IGluCisgICB3aGljaCBDLUtlcm1pdCBpcyBjb25maWd1cmVkIHRvIGZvcmJpZCBhY2Nlc3MgdG8g ZXh0ZXJpb3IgY29tbWFuZHMgYW5kCisgICBwcm9ncmFtcywgZS5nLiBpbiBhIFZNUyAiY2FwdGl2 ZSBhY2NvdW50IikuCisKKyAgIEluIEMtS2VybWl0IDcuMCBvbiBWTVMgYW5kIFVOSVgsIGFuZCBp biBLOTUgMS4xLjE5IGFuZCBsYXRlciwgdGhlCisgICBESVJFQ1RPUlkgY29tbWFuZCBpcyBpbnRl cm5hbCB0byBLZXJtaXQuIEl0IGNhbiBiZSBydW4gaW4gYSAibm9wdXNoIgorICAgZW52aXJvbm1l bnQgYW5kIHJldHVybnMgU1VDQ0VTUyBvciBGQUlMVVJFIHN0YXR1cyBhcHByb3ByaWF0ZWx5LiBJ bgorICAgVU5JWCBpdCBwcmludHMgYWxsIGRhdGVzIGFuZCB0aW1lcyBpbiBhIGNvbnNpc3RlbnQg d2F5ICh1bmxpa2UgbHMpLiBJbgorICAgVk1TIGl0IHByaW50cyBwcmVjaXNlIGZpbGUgc2l6ZXMs IHJhdGhlciB0aGFuICJibG9ja3MiLiBJdCBvZmZlcnMKKyAgIHNldmVyYWwgZm9ybWF0dGluZyBh bmQgb3RoZXIgb3B0aW9ucywgYnV0IGl0IGlzIG5vdCBuZWNlc3NhcmlseSBtb3JlCisgICBmbGV4 aWJsZSB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGV4dGVybmFsIGNvbW1hbmRzIG9yIHByb2dyYW1z ICh0aGUgVU5JWAorICAgImxzIiBwcm9ncmFtLCB0aGUgVk1TICJkaXJlY3RvcnkiIGNvbW1hbmQp LiBUaGUgc3ludGF4IGlzOgorCisgICBESVJFQ1RPUlkgWyBzd2l0Y2ggWyBzd2l0Y2ggWyAuLi4g XSBdIF0gWyBmaWxlc3BlYyBdCisKKyAgIElmIG5vIGZpbGVzcGVjIGlzIGdpdmVuLCBhbGwgZmls ZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFyZSBsaXN0ZWQuCisKKyAgIE9wdGlvbmFsIHN3 aXRjaGVzIGluY2x1ZGUgYWxsIHRoZSBzdGFuZGFyZCBmaWxlLXNlbGVjdGlvbiBzd2l0Y2hlcwor ICAgcHJlc2VudGVkIGluIFs0NzJdU2VjdGlvbiAxLjUuNCwgcGx1czoKKworICAgL0FMTAorICAg ICAgICAgIFNob3cgYm90aCByZWd1bGFyIGZpbGVzIGFuZCBkaXJlY3RvcmllczsgdGhpcyBpcyB0 aGUgZGVmYXVsdC4KKworICAgL0FSUkFZOngKKyAgICAgICAgICBJbnN0ZWFkIG9mIGRpc3BsYXlp bmcgYSBkaXJlY3RvcnkgbGlzdGluZywgcHV0IHRoZSBmaWxlcyB0aGF0CisgICAgICAgICAgd291 bGQgaGF2ZSBiZWVuIHNob3duIChiYXNlZCBvbiB0aGUgZmlsZXNwZWMgYW5kIG90aGVyIHNlbGVj dGlvbgorICAgICAgICAgIHN3aXRjaGVzKSBpbiB0aGUgZ2l2ZW4gYXJyYXkuIFRoZSBhcnJheSBu ZWVkIG5vdCAoYW5kIHNob3VsZAorICAgICAgICAgIG5vdCkgYmUgcHJlZGVjbGFyZWQ7IGlmIHRo ZSBhcnJheSBhbHJlYWR5IGV4aXN0cywgaXQgaXMKKyAgICAgICAgICBkZXN0cm95ZWQgYW5kIHJl dXNlZC4gVGhlIGFycmF5IG5hbWUgY2FuIGJlIGEgc2luZ2xlIGxldHRlciwKKyAgICAgICAgICBs aWtlICJhIiwgb3IgYW55IGZ1bGxlciBmb3JtLCBzdWNoIGFzICImYSIsICJcJmEiLCAiXCZhW10i LCBldGMuCisgICAgICAgICAgSWYgdGhlIC9BUlJBWSBzd2l0Y2ggaXMgaW5jbHVkZWQsIHRoZSBm b2xsb3dpbmcgb3RoZXIgc3dpdGNoZXMKKyAgICAgICAgICBhcmUgaWdub3JlZDogL0JSSUVGLCAv VkVSQk9TRSwgL0hFQURJTkcsIC9QQUdFLCAvRU5HTElTSERBVEUsCisgICAgICAgICAgL0lTT0RB VEUsIC9YRkVSTU9ERSwgL01FU1NBR0UsIC9TT1JULCAvUkVWRVJTRSwgL0FTQ0VORElORy4gSW4K KyAgICAgICAgICBvdGhlciB3b3Jkcywgb25seSBmaWxlIHNlbGVjdGlvbiBzd2l0Y2hlcyBhcmUg bWVhbmluZ2Z1bCB3aXRoCisgICAgICAgICAgL0FSUkFZOiAvRklMRVMsIC9ESVJFQ1RPUklFUywg L0FMTCwgL0RPVEZJTEVTLCAvTk9CQUNLVVAsCisgICAgICAgICAgL1JFQ1VSU0lWRSwgL1NNQUxM RVIsIC9MQVJHRVIsIC9BRlRFUiwgL0JFRk9SRSwgL0VYQ0VQVCwgZXRjLgorICAgICAgICAgIFRo ZSByZXN1bHRpbmcgYXJyYXkgaGFzIHRoZSBudW1iZXIgb2YgZmlsZXMgKG4pIGFzIGl0cyAwdGgK KyAgICAgICAgICBlbGVtZW50LCBhbmQgdGhlIGZpbGVuYW1lcyBpbiBlbGVtZW50cyAxIHRocm91 Z2ggbiBFeGFtcGxlOgorCisgIGRpciAvYXJyYXk6JmEgL2ZpbGVzIC9ub2JhY2t1cCAvYWZ0ZXI6 MTk5OTAxMDEgL2xhcmdlcjoxMDAwMCBbYWJdKgorICBzaG93IGFycmF5ICZhCisKKyAgIC9GSUxF UworICAgICAgICAgIE9ubHkgc2hvdyByZWd1bGFyIGZpbGVzLgorCisgICAvRElSRUNUT1JJRVMK KyAgICAgICAgICBPbmx5IHNob3cgZGlyZWN0b3JpZXMuCisKKyAgIC9CQUNLVVAKKyAgICAgICAg ICBJbiBVTklYLCBPUy05LCBLLTk1LCBhbmQgb3RoZXIgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IFNF VCBGSUxFCisgICAgICAgICAgQ09MTElTSU9OIEJBQ0tVUCBhbmQgY3JlYXRlIGJhY2t1cCBmaWxl cyBieSBhcHBlbmRpbmcgLn5ufiB0bworICAgICAgICAgIHRoZSBmaWxlbmFtZSAod2hlcmUgIm4i IGlzIGEgbnVtYmVyKSwgL0JBQ0tVUCBtZWFucyB0byBpbmNsdWRlCisgICAgICAgICAgdGhlc2Ug ZmlsZXMgaW4gZGlyZWN0b3J5IGxpc3RpbmdzLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorCisgICAv Tk9CQUNLVVAKKyAgICAgICAgICBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAvQkFDS1VQOiB0aGF0 IGlzLCBkbyBub3QgaW5jbHVkZSBiYWNrdXAKKyAgICAgICAgICBmaWxlcyBpbiB0aGUgbGlzdGlu Zy4KKworICAgL0JSSUVGCisgICAgICAgICAgTGlzdCBmaWxlbmFtZXMgb25seTsgdXNlIGEgY29t cGFjdCBmb3JtYXQsIGFzIG1hbnkgZmlsZW5hbWVzIGFzCisgICAgICAgICAgd2lsbCBmaXQgYWNy b3NzIHRoZSBzY3JlZW4gKGJhc2VkIG9uIHRoZSBsb25nZXN0IG5hbWUpLiBBIGJyaWVmCisgICAg ICAgICAgbGlzdGluZyBpcyBhbHdheXMgc29ydGVkIGFscGhhYmV0aWNhbGx5LgorCisgICAvVkVS Qk9TRQorICAgICAgICAgIExpc3Qgb25lIGZpbGUgcGVyIGxpbmUsIGFuZCBpbmNsdWRlIGRhdGUs IHNpemUsIGFuZCAoaW4gVU5JWAorICAgICAgICAgIG9ubHkpIHBlcm1pc3Npb25zIG9mIGVhY2gg ZmlsZS4gVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgL0JSSUVGLAorICAgICAgICAgIGFuZCBpcyB0 aGUgZGVmYXVsdC4KKworICAgL1BBR0UKKyAgICAgICAgICBQYXVzZSBhdCB0aGUgZW5kIG9mIGVh Y2ggc2NyZWVuZnVsIGFuZCBnaXZlIGEgIm1vcmU/IiBwcm9tcHQsCisgICAgICAgICAgZXZlbiBp ZiBTRVQgQ09NTUFORCBNT1JFLVBST01QVElORyBpcyBPRkYuCisKKyAgIC9OT1BBR0UKKyAgICAg ICAgICBEb24ndCBwYXVzZSBhdCB0aGUgZW5kIG9mIGVhY2ggc2NyZWVuZnVsIGFuZCBnaXZlIGEg Im1vcmU/IgorICAgICAgICAgIHByb21wdCwgZXZlbiBpZiBTRVQgQ09NTUFORCBNT1JFLVBST01Q VElORyBpcyBPTi4gSWYgbmVpdGhlcgorICAgICAgICAgIC9QQUdFIG9yIC9OT1BBR0UgaXMgZ2l2 ZW4sIHBhZ2luZyBpcyBhY2NvcmRpbmcgdG8gdGhlIHByZXZhaWxpbmcKKyAgICAgICAgICBDT01N QU5EIE1PUkUtUFJPTVBUSU5HIHNldHRpbmcgKHdoaWNoIGNhbiBiZSBkaXNwbGF5ZWQgd2l0aCBT SE9XCisgICAgICAgICAgQ09NTUFORCkuCisKKyAgIC9FTkdMSVNIREFURQorICAgICAgICAgIFNo b3cgZGF0ZXMgaW4gZGQtbW1tLXl5eXkgZm9ybWF0OyBtbW0gaXMgdGhlIGZpcnN0IHRocmVlIGxl dHRlcnMKKyAgICAgICAgICBvZiB0aGUgRW5nbGlzaCBtb250aCBuYW1lLgorCisgICAvSVNPREFU RQorICAgICAgICAgIFNob3cgZGF0ZXMgaW4geXl5eS1tbS1kZCBmb3JtYXQ7IG1tIGlzIHRoZSBt b250aCBudW1iZXIsIDEtMTIuCisgICAgICAgICAgVGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgL0VO R0xJU0hEQVRFLCBhbmQgaXMgdGhlIGRlZmF1bHQuCisKKyAgIC9IRUFESU5HUworICAgICAgICAg IFByaW50IGEgaGVhZGluZyBiZWZvcmUgdGhlIGxpc3RpbmcgYW5kIGEgc3VtbWFyeSBhdCB0aGUg ZW5kLgorCisgICAvTk9IRUFESU5HUworICAgICAgICAgIERvbid0IHByaW50IGEgaGVhZGluZyBi ZWZvcmUgdGhlIGxpc3Rpbmcgb3IgYSBzdW1tYXJ5IGF0IHRoZQorICAgICAgICAgIGVuZC4gVGhp cyBpcyB0aGUgb3Bwb3NpdGUgb2YgL0hFQURJTkdTLCBhbmQgaXMgdGhlIGRlZmF1bHQuCisKKyAg IC9YRkVSTU9ERQorICAgICAgICAgIE9ubHkgaW4gS2VybWl0IHByb2dyYW1zIHRoYXQgc3VwcG9y dCBTRVQgRklMRSBQQVRURVJOUy4gSWYgdGhpcworICAgICAgICAgIHN3aXRjaCBpcyBpbmNsdWRl ZCwgYW5kIHRoZSBmaWxlbmFtZSBtYXRjaGVzIGFueSBGSUxFCisgICAgICAgICAgQklOQVJZLVBB VFRFUk4gKFs0NzNdU2VjdGlvbiA0LjMpLCAiKEIpIiBpcyBwcmludGVkIGFmdGVyIHRoZQorICAg ICAgICAgIGZpbGVuYW1lOyBvdGhlcndpc2UsIGlmIGl0IG1hdGNoZXMgYSBGSUxFIFRFWFQtUEFU VEVSTiwgIihUKSIgaXMKKyAgICAgICAgICBwcmludGVkLgorCisgICAvTk9YRkVSTU9ERQorICAg ICAgICAgIERvbid0IGRpc3BsYXkgdHJhbnNmZXItbW9kZSBpbmRpY2F0b3JzLiBUaGlzIGlzIHRo ZSBvcHBvc2l0ZSBvZgorICAgICAgICAgIC9YRkVSTU9ERSBhbmQgaXMgdGhlIGRlZmF1bHQuCisK KyAgIC9SRUNVUlNJVkUKKyAgICAgICAgICBTaG93IGZpbGVzIG5vdCBvbmx5IGluIHRoZSBnaXZl biBkaXJlY3RvcnksIGJ1dCBhbHNvIGluIGl0cworICAgICAgICAgIHN1YmRpcmVjdG9yaWVzIChp ZiBhbnkpLCB0aGVpciBzdWJkaXJlY3RvcmllcywgZXRjLgorCisgICAvTk9SRUNVUlNJVkUKKyAg ICAgICAgICBEb24ndCBzaG93IGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzLiBUaGlzIGlzIHRoZSBv cHBvc2l0ZSBvZgorICAgICAgICAgIC9SRUNVUlNJVkUsIGFuZCBpcyB0aGUgZGVmYXVsdC4KKwor ICAgL01FU1NBR0U6dGV4dAorICAgICAgICAgIFRoaXMgbGV0cyB5b3Ugc3BlY2lmeSBhIHNob3J0 IHRleHQgc3RyaW5nIHRvIGJlIGFwcGVuZGVkIHRvIHRoZQorICAgICAgICAgIGVuZCBvZiBlYWNo IGRpcmVjdG9yeSBsaXN0aW5nIGxpbmUgKGEgc3BhY2UgaXMgc3VwcGxpZWQKKyAgICAgICAgICBh dXRvbWF0aWNhbGx5KS4gSWYgdGhlIHRleHQgY29udGFpbnMgYW55IHNwYWNlcywgZW5jbG9zZSBp dCBpbgorICAgICAgICAgIGJyYWNlcywgZS5nLiAvTUVTU0FHRTp7dHdvIHdvcmRzfS4KKworICAg L05PTUVTU0FHRQorICAgICAgICAgIERvbid0IGFwcGVuZCBhbnkgbWVzc2FnZSB0byB0aGUgZW5k IG9mIGVhY2ggZGlyZWN0b3J5IGxpc3RpbmcKKyAgICAgICAgICBsaW5lIChkZWZhdWx0KS4KKwor ICAgL1NPUlQ6W3tOQU1FLFNJWkUsREFURX1dCisgICAgICAgICAgU29ydCB0aGUgbGlzdGluZyBi eSBuYW1lLCBzaXplLCBvciBkYXRlLiBJZiB0aGUgL1NPUlQgc3dpdGNoIGlzCisgICAgICAgICAg Z2l2ZW4gYnV0IHRoZSAic29ydC1ieSIga2V5d29yZCBpcyBvbWl0dGVkLCB0aGUgbGlzdGluZyBp cworICAgICAgICAgIHNvcnRlZCBieSBuYW1lLiAvU09SVDpOQU1FIC9BU0NFTkRJTkcgKGFscGhh YmV0aWMgc29ydCBieSBuYW1lKQorICAgICAgICAgIGlzIHRoZSBkZWZhdWx0LgorCisgICAvTk9T T1JUCisgICAgICAgICAgRG9uJ3Qgc29ydCB0aGUgbGlzdGluZy4gRmlsZXMgYXJlIGxpc3RlZCBp biB3aGF0ZXZlciBvcmRlciB0aGV5CisgICAgICAgICAgYXJlIHN1cHBsaWVkIGJ5IHRoZSBvcGVy YXRpbmcgc3lzdGVtLCBlLmcuIGlub2RlIG9yZGVyIGluIFVOSVguCisKKyAgIC9SRVZFUlNFCisg ICAgICAgICAgSWYgdGhlIC9TT1JUIHN3aXRjaCBpcyBnaXZlbiwgcmV2ZXJzZSB0aGUgb3JkZXIg b2YgdGhlIHNvcnQuCisgICAgICAgICAgU3lub255bTogL0RFU0NFTkRJTkcuCisKKyAgIC9BU0NF TkRJTkcKKyAgICAgICAgICBJZiB0aGUgL1NPUlQgc3dpdGNoIGlzIGdpdmVuLCBzb3J0IHRoZSBs aXN0aW5nIGluIG5vcm1hbCBvcmRlci4KKyAgICAgICAgICBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBv ZiAvUkVWRVJTRSBhbmQgaXMgdGhlIGRlZmF1bHQuCisKKyAgIE5vdGUgdGhhdCBtb3N0IG9mIHRo ZSBESVJFQ1RPUlktc3BlY2lmaWMgc3dpdGNoZXMgY29tZSBpbiBwYWlycywgaW4KKyAgIHdoaWNo IG9uZSBtZW1iZXIgb2YgYSBwYWlyIChlLmcuIC9OT0hFQURJTkdTKSBpcyB0aGUgb3Bwb3NpdGUg b2YgdGhlCisgICBvdGhlciAoZS5nLiAvSEVBRElOR1MpLgorCisgICBJZiB5b3UgYWx3YXlzIHdh bnQgdG8gdXNlIGNlcnRhaW4gb3B0aW9ucywgeW91IGNhbiBzZXQgdGhlbSB3aXRoIHRoZQorICAg U0VUIE9QVElPTlMgRElSRUNUT1JZIGNvbW1hbmQgKFs0NzRdU2VjdGlvbiAxLjUuNSkuIFVzZSBT SE9XIE9QVElPTlMgdG8KKyAgIGxpc3QgdGhlIG9wdGlvbnMgY3VycmVudGx5IGluIGVmZmVjdC4g VG8gbWFrZSB0aGUgZGVzaXJlZCBvcHRpb25zIGFwcGx5CisgICBldmVyeSB0aW1lIHlvdSBydW4g Qy1LZXJtaXQsIHB1dCBhIFNFVCBPUFRJT05TIERJUkVDVE9SWSBjb21tYW5kIGluCisgICB5b3Vy IEMtS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSwgc3BlY2lmeWluZyB0aGUgZGVzaXJlZCBvcHRp b25zLgorICAgT3B0aW9ucyBzZXQgaW4gdGhpcyBtYW5uZXIgYXBwbHkgdG8gZXZlcnkgc3Vic2Vx dWVudCBESVJFQ1RPUlkgY29tbWFuZC4KKyAgIE9mIGNvdXJzZSwgaWYgeW91IGluY2x1ZGUgc3dp dGNoZXMgaW4gYSBESVJFQ1RPUlkgY29tbWFuZCwgdGhlc2UKKyAgIG92ZXJyaWRlIGFueSBkZWZh dWx0cywgYnVpbHQtaW4gb3IgY3VzdG9tLiBFeGFtcGxlOgorCisgIERJUkVDVE9SWSAgICAgICAg ICAgIDsgVXNlICJmYWN0b3J5IGRlZmF1bHRzIgorICBTRVQgT1BUSU9OUyBESVJFQ1RPUlkgL1NP UlQ6U0laRSAvUkVWRVJTRSAvSEVBRElOR1MgIDsgQ3VzdG9taXplIGRlZmF1bHRzCisgIERJUkVD VE9SWSAgICAgICAgICAgIDsgVXNlIGN1c3RvbWl6ZWQgZGVmYXVsdHMKKyAgRElSIC9TT1JUOk5B TUUgICAgICAgOyBPdmVycmlkZSBjdXN0b21pemVkIGRlZmF1bHQgU09SVCBrZXkKKyAgU0VUIE9Q VCBESVIgL1JFQ1VSUyAgOyBBZGQgL1JFQ1VSU0lWRSB0byBjdXN0b21pemVkIGRlZmF1bHRzCisg IERJUiAvQVNDRU5EICAgICAgICAgIDsgT3ZlcnJpZGUgY3VzdG9taXplZCBkZWZhdWx0IFNPUlQg b3JkZXIKKworICAgTm90ZXM6CisKKyAgICAgKiBPbmx5IGEgc2luZ2xlIHNvcnQga2V5IGlzIHN1 cHBvcnRlZDsgdGhlcmUgaXMgcHJlc2VudGx5IG5vIHdheSB0bworICAgICAgIGhhdmUgbXVsdGlw bGUgc29ydCBrZXlzLgorICAgICAqIElmIHRoZSAvQlJJRUYgc3dpdGNoIGlzIGdpdmVuLCBhbGwg b3RoZXIgc3dpdGNoZXMgKGV4Y2VwdAorICAgICAgIC9bTk9dUkVDVVJTSVZFLCAvW05PXURPVEZJ TEVTLCAvRElSRUNUT1JJRVMsIC9GSUxFUywgYW5kIC9BTEwpIGFyZQorICAgICAgIGlnbm9yZWQu CisgICAgICogL1NPUlQ6YW55dGhpbmcgZ2l2ZXMgaW5jb3JyZWN0IHJlc3VsdHMgaWYgYW55IGZp bGVzIGhhdmUgbGVuZ3RocworICAgICAgIGdyZWF0ZXIgdGhhbiAxMCBkaWdpdHMgKGkuZS4gdGhh dCBhcmUgbW9yZSB0aGFuIDk5OTk5OTk5OTkgYnl0ZXMKKyAgICAgICBsb25nLCBpLmUuIGlmIHRo ZXkgYXJlIDEwR0Igb3IgbW9yZSBpbiBzaXplKSBiZWNhdXNlIHRoZSBvdmVybG9uZworICAgICAg IGxlbmd0aCBmaWVsZCBjYXVzZXMgdGhlIGRhdGUgYW5kIG5hbWUgZmllbGRzIHRvIGJlIG1pc2Fs aWduZWQuCisgICAgICogL1NPUlQ6TkFNRSBpcyByZWR1bmRhbnQgaW4gVk1TIHNpbmNlIFZNUyBy ZXR1cm5zIGZpbGVuYW1lcyBpbgorICAgICAgIGFscGhhYmV0aWMgb3JkZXIgYW55d2F5LgorICAg ICAqIC9TT1JUOk5BTUUgaWdub3JlcyBhbHBoYWJldGljIGNhc2Ugb24gcGxhdGZvcm1zIHdoZXJl IGNhc2UgZG9lcyBub3QKKyAgICAgICBtYXR0ZXIgaW4gZmlsZW5hbWVzLCBidXQgdGhpcyB3b3Jr cyBvbmx5IGZvciB1bmFjY2VudGVkIFJvbWFuCisgICAgICAgbGV0dGVycyBBLVouCisgICAgICog L1NPUlQ6TkFNRSBpcyBjdXJyZW50bHkgYmFzZWQgb24gY29kZSB2YWx1ZXMsIGFuZCBzbyB3b3Jr cyBmaW5lIGZvcgorICAgICAgIEFTQ0lJLCBidXQgd2lsbCBwcm9iYWJseSBwcm9kdWNlIHVuZXhw ZWN0ZWQgcmVzdWx0cyBmb3IgZmlsZXMgd2l0aAorICAgICAgIG5vbi1BU0NJSSBvciA4LWJpdCBj aGFyYWN0ZXJzIGluIHRoZWlyIG5hbWVzLiAoTG9jYWxlLWJhc2VkIHNvcnRpbmcKKyAgICAgICBy YWlzZXMgcmF0aGVyIHNpZ25pZmljYW50IGlzc3VlcyBvZiBwb3J0YWJpbGl0eSwgc2l6ZSwgcGVy Zm9ybWFuY2UsCisgICAgICAgZXRjLikKKyAgICAgKiAvU09SVDpEQVRFIHdvcmtzIHJpZ2h0IG9u bHkgZm9yIElTTy1mb3JtYXQgZGF0ZXMsIG5vdCBFbmdsaXNoIG9uZXMuCisgICAgICogL1NPUlQ6 U0laRSBzb3J0cyB0aGUgc2l6ZSBmaWVsZCBsZXhpY2FsbHkuIE9uIHNvbWUgcGxhdGZvcm1zIChl LmcuCisgICAgICAgV2luZG93cyksIHRoZSBzaXplIG9mIGEgZGlyZWN0b3J5IGZpbGUgaXMgbGlz dGVkIGFzICI8RElSPiIgcmF0aGVyCisgICAgICAgdGhhbiBhcyBhIG51bWJlcjsgaW4gdGhpcyBj YXNlLCB0aGUgIjxESVI+IiBmaWxlcyBhcmUgZ2F0aGVyZWQgYXQKKyAgICAgICB0aGUgZW5kIChv ciBiZWdpbm5pbmcsIGRlcGVuZGluZyBvbiB0aGUgc29ydCBvcmRlcikgb2YgdGhlIGxpc3Rpbmcu CisgICAgICogL1JFQ1VSU0lWRSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZCBpbiBBT1MvVlMuIFVz ZSB0aGUgbm9ybWFsCisgICAgICAgc3lzdGVtLXNwZWNpZmljIGZpbGVzcGVjIG5vdGF0aW9uLCBl LmcuICJkaXIgIy50eHQiLgorICAgICAqIC9SRUNVUlNJVkUgaGFzIG5vIGFmZmVjdCB3aGVuIGEg ZnVsbCwgYWJzb2x1dGUgcGF0aG5hbWUgaXMgZ2l2ZW47CisgICAgICAgZS5nLiAiZGlyIC9yZWN1 cnNpdmUgL3RtcC9mb28iICh3aGVyZSAiZm9vIiBpcyBhIHJlZ3VsYXIgZmlsZSkgb25seQorICAg ICAgIHNob3dzIHRoZSAiL3RtcC9mb28iIGZpbGUuIElmIHlvdSB3YW50IHRvIHNlZSBhbGwgImZv byIgZmlsZXMgaW4KKyAgICAgICB0aGUgL3RtcCB0cmVlLCBkbyAiY2QgL3RtcCIgYW5kIHRoZW4g ImRpciAvcmVjdXJzaXZlIGZvbyIuCisgICAgICogSWYgYSBmaWxlIHNpemUgb2YgLTEgaXMgc2hv d24sIG9yIGRhdGUtdGltZSBvZiAwMDAwLTAwLTAwIDAwOjAwOjAwLAorICAgICAgIHRoaXMgbWVh bnMgdGhlIGZpbGUgd2FzIGxvY2F0ZWQsIGJ1dCBhY2Nlc3MgdG8gaW5mb3JtYXRpb24gYWJvdXQK KyAgICAgICB0aGUgZmlsZSB3YXMgZGVuaWVkIHRvIEMtS2VybWl0LgorICAgICAqIEluIFZNUywg aWYgRk9PLkRJUjsxIGlzIGEgZGlyZWN0b3J5IHdpdGhpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5 LAorICAgICAgICJkaXJlY3RvcnkgZm9vIiBhbmQgImRpcmVjdG9yeSBbLmZvb10iIGxpc3QgdGhl IGZpbGVzIGluIHRoZSBbLkZPT10KKyAgICAgICBzdWJkaXJlY3RvcnksIGJ1dCAiZGlyZWN0b3J5 IGZvby5kaXIiIGxpc3RzIHRoZSBkaXJlY3RvcnkgZmlsZQorICAgICAgIGl0c2VsZjsgc2ltaWxh cmx5IGZvciAiKi5kaXIiIHZlcnN1cyAiWy4qXSIsIGV0Yy4KKyAgICAgKiBJbiBVTklYLCBpZiAi Zm9vIiBpcyBhIGRpcmVjdG9yeSB3aXRoaW4geW91ciBjdXJyZW50IGRpcmVjdG9yeSwKKyAgICAg ICAiZGlyZWN0b3J5IGZvbyIgbGlzdHMgdGhlIGZpbGVzIGluIHRoZSBmb28gZGlyZWN0b3J5LiBJ ZiB5b3Ugd2FudAorICAgICAgIHRvIGxpc3QgdGhlIGZvbyBkaXJlY3RvcnkgZmlsZSBpdHNlbGYs IHB1dCBhbiBhc3RlcmlzayBhdCB0aGUgZW5kOgorICAgICAgICJkaXIgZm9vKiIuCisKKyAgIEhp bnQ6IEhvdyB0byBmaW5kIHRoZSBiaWdnZXN0IGZpbGVzIGluIGEgZGlyZWN0b3J5IHRyZWU6CisK KyAgY2QgeHh4IDsgKHJvb3Qgb2YgdHJlZSkKKyAgZGlyZWN0b3J5IC9zb3J0OnNpemUgL3JlY3Vy c2l2ZSAvcmV2ZXJzZSAvZG90ZmlsZXMgL3BhZ2UKKworICAgQW5vdGhlciBoaW50OiBJZiB5b3Ug b2Z0ZW4gdXNlIHNldmVyYWwgZGlmZmVyZW50IGRpcmVjdG9yeS1saXN0aW5nCisgICBmb3JtYXRz LCBkZWZpbmUgbWFjcm8gc2hvcnRjdXRzIGZvciB0aGVtOgorCisgIERFRklORSBXRCBESVJFQ1RP UlkgL1NPUlQ6REFURSAvUkVWRVJTRSBcJSogIDsgUmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVy CisgIERFRklORSBTRCBESVJFQ1RPUlkgL1NPUlQ6U0laRSAvUkVWRVJTRSBcJSogIDsgUmV2ZXJz ZSBvcmRlciBvZiBzaXplCisgIERFRklORSBORCBESVJFQ1RPUlkgL1NPUlQ6TkFNRSAvQVNDRU5E IFwlKiAgIDsgQWxwaGFiZXRpY2FsIGJ5IG5hbWUKKyAgREVGSU5FIERMIERJUiAvRElSIC9TT1JU Ok5BTUUgL0FTQ0VORCBcJSogICAgOyBBbHBoYWJldGljYWwgZGlyZWN0b3J5IGxpc3QKKworICAg UHV0IHRoZXNlIGRlZmluaXRpb25zIGluIHlvdXIgQy1LZXJtaXQgY3VzdG9taXphdGlvbiBmaWxl LiBOb3RlIHRoYXQKKyAgICJcJSoiIChbNDc1XVNlY3Rpb24gNy41KSBpbiB0aGVzZSBkZWZpbml0 aW9ucyBsZXRzIHlvdSBpbmNsdWRlIG90aGVyCisgICBzd2l0Y2hlcyBpbiB5b3VyIG1hY3JvIGlu dm9jYXRpb25zLCBlLmcuOgorCisgIHdkIC9oZWFkaW5ncyAqLnR4dAorCisgICBPZiBjb3Vyc2Ug eW91IGNhbiBzdGlsbCBhY2Nlc3MgeW91ciBleHRlcm5hbCBkaXJlY3RvcnkgbGlzdGluZyBwcm9n cmFtCisgICBieSB1c2luZyBSVU4gb3IgIiEiLCBlLmcuIGluIFZNUzoKKworICBydW4gZGlyZWN0 b3J5IC9zaXplL2RhdGUvcHJvdGVjdGlvbi9leGNlcHQ9Ki5vYmogb29mYS4qOzAKKworICAgb3I6 CisKKyAgIWRpciAvc2l6ZS9kYXRlL3Byb3QvZXhjPSoub2JqIG9vZmEuKjswCisKKyAgIEluIFVO SVgsIHVzZSAiIWxzIiBvciBqdXN0ICJscyIgKHdoaWNoIGlzIGEgc3BlY2lhbCBzeW5vbnltIGZv ciAiIWxzIikuCisKKzQuNS4yLiBUaGUgQ0QgYW5kIEJBQ0sgQ29tbWFuZHMKKworICAgSW4gQy1L ZXJtaXQgNy4wLCB0aGUgQ0QgY29tbWFuZCBoYXMgYSBuZXcgZnJpZW5kLCB0aGUgQkFDSyBjb21t YW5kLgorICAgQkFDSyBtZWFucyAiQ0QgdG8gbXkgcHJldmlvdXMgY3VycmVudCBkaXJlY3Rvcnki LiBBIHNlY29uZCBCQUNLIGJyaW5ncworICAgeW91IGJhY2sgdG8gd2hlcmUgeW91IHdlcmUgYmVm b3JlIHRoZSBmaXJzdCBvbmU7IHRodXMgc3VjY2Vzc2l2ZSBCQUNLCisgICBjb21tYW5kcyBzd2l0 Y2ggYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0d28gZGlyZWN0b3JpZXMuCisKKzQuNS4yLjEuIFBh cnNpbmcgSW1wcm92ZW1lbnRzCisKKyAgIFRoZSBDRCBjb21tYW5kLCBhcyB3ZWxsIGFzIG90aGVy IGNvbW1hbmRzIHRoYXQgcGFyc2UgYSBkaXJlY3RvcnkgbmFtZSwKKyAgIHdlcmUgY2hhbmdlZCBp biA3LjAgdG8gcHJvdmlkZSBhbGwgdGhlIGV4cGVjdGVkIGZ1bmN0aW9uczogY29tcGxldGlvbgor ICAgb24gVGFiIG9yIEVzYywgZGlyZWN0b3J5LW5hbWUgbGlzdHMgb24gPywgZXRjLiBPdGhlciBh ZmZlY3RlZCBjb21tYW5kcworICAgaW5jbHVkZSBTRVQgU0VSVkVSIEdFVC1QQVRILCBTRVQgVEVN UC1ESVJFQ1RPUlksIFNFVCBGSUxFCisgICBET1dOTE9BRC1ESVJFQ1RPUlksIGFuZCBTUEFDRS4g Q0QgYW5kIFJFTU9URSBDRCBhbHNvIG5vdyB3b3JrIHdpdGgKKyAgIGxvZ2ljYWwgbmFtZXMuCisK KyAgIEluIFZNUywgdGhlIHNpdHVhdGlvbiBpcyBhIGJpdCBjb21wbGljYXRlZCBzaW5jZSBhIGRp cmVjdG9yeSBuYW1lIGNhbgorICAgbG9vayBsaWtlICJERVY6IiwgIltGT08uQkFSXSIsICJERVY6 W0ZPTy5CQVJdIiwgIltGT09dQkFSLkRJUjsxIiwgZXRjLgorICAgQ29tcGxldGlvbiBhbmQgPy1o ZWxwIG1pZ2h0IG5vdCBhbHdheXMgd29yaywgYnV0IHRoZXkgZG8gaW4gbWFueSBjYXNlcy4KKyAg IEV4YW1wbGVzOgorCisgIGNkID8gICAgICAgICAgIExpc3RzIGFsbCBzdWJkaXJlY3RvcmllcyBv ZiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKyAgY2QgW10/ICAgICAgICAgRGl0dG8KKyAgY2Qgaz8g ICAgICAgICAgRGl0dG8sIGJ1dCBvbmx5IHRob3NlIHN0YXJ0aW5nIHdpdGggSworICBjZCBbZm9v XT8gICAgICBMaXN0cyBhbGwgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIFtGT09dIGRpcmVjdG9yeQor ICBjZCBbLV0/ICAgICAgICBMaXN0cyBhbGwgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIHN1cGVyaW9y IGRpcmVjdG9yeQorICBjZCBbLS1dPyAgICAgICBMaXN0cyBhbGwgc3ViZGlyZWN0b3JpZXMgb2Yg dGhlIGRpcmVjdG9yeSAyIGxldmVscyB1cAorICBjZCBbLi4uXT8gICAgICBMaXN0cyBhbGwgZGly ZWN0b3JpZXMgYmVsb3cgdGhlIGN1cnJlbnQgb25lCisgIGNkIFtmb28uPyAgICAgIERvZXMgbm90 IHdvcmsuCisKKyAgIEMtS2VybWl0IGFsbG93cyBhbGwgb2YgdGhlIGZvbGxvd2luZyBpbiBWTVM6 CisKKyAgY2QgYmFyICAgICAgICAgQ0QgdG8gc3ViZGlyZWN0b3J5IEJBUiBvZiB0aGUgY3VycmVu dCBkaXJlY3RvcnkKKyAgY2QgLmJhciAgICAgICAgRGl0dG8KKyAgY2QgWy5iYXJdICAgICAgRGl0 dG8KKyAgY2QgYmFyLmRpciAgICAgZXRjLi4uCisgIGNkIGJhci5kaXI7CisgIGNkIGJhci5kaXI7 MQorICBjZCBbZm9vLmJhcl0KKyAgY2QgPGZvby5iYXI+CisgIGNkIGJhci5iYXogICAgIFRoaXMg Y2FuIGdvIG1vcmUgdGhhbiAxIGxldmVsIGRlZXAuLi4KKyAgY2QgZGlyOiAgICAgICAgKHdoZXJl IGxvZ2ljYWwgbmFtZSBESVIgaXMgZGVmaW5lZCBhcyBbRk9PLkJBUl0pCisKKyAgIEFzIHdlbGwg YXMgdGhlIGZvbGxvd2luZzoKKworICBjZCAuLiAgICAgICAgICBHbyB1cCBvbmUgbGV2ZWwgYXMg aW4gVU5JWAorICBjZCAuICAgICAgICAgICBUaGUgY3VycmVudCBkaXJlY3RvcnkKKyAgY2QgICAg ICAgICAgICAgTXkgbG9naW4gZGlyZWN0b3J5CisKKyAgIE5vdGUgdGhhdCAiY2QgLSIgKGdvIHVw IG9uZSBsZXZlbCkgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCwgYmVjYXVzZQorICAgIi0iIGlz IEtlcm1pdCdzIGNvbW1hbmQgY29udGludWF0aW9uIGNoYXJhY3Rlci4gSG93ZXZlciwgImNkIFst XSIsIGFuZAorICAgIgorICAgY2Qgey19IiBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCAoYW5kIHNv IGRvZXMgImNkIC4uIiwgd2hpY2ggaXMgZWFzaWVyCisgICB0byB0eXBlKS4KKworNC41LjIuMi4g VGhlIENEUEFUSAorCisgICBUaGUgQ0QgY29tbWFuZCBpbiB0aGUgVU5JWCwgV2luZG93cywgT1Mv MiwgYW5kIFZNUyB2ZXJzaW9ucyBvZgorICAgQy1LZXJtaXQsIGFzIG9mIHZlcnNpb24gNi4xIC8g MS4xLjEyLCBzZWFyY2hlcyB0aGUgQ0RQQVRIIGZvciB0aGUgZ2l2ZW4KKyAgIGRpcmVjdG9yeSwg aWYgaXQgaXMgbm90IGFic29sdXRlIGFuZCBpZiBhIENEUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJs ZQorICAgaXMgZGVmaW5lZC4gRXhhbXBsZSAoaW4gVU5JWCBrc2ggb3IgYmFzaCk6CisKKyAgJCBl eHBvcnQgQ0RQQVRIPSRIT01FOiRIT01FL2tlcm1pdDovdG1wCisKKyAgIE5vdyBpZiB5b3UgZ2l2 ZSBhICJjZCB4eHgiIGNvbW1hbmQsIG5vIG1hdHRlciB3aGF0IHlvdXIgY3VycmVudAorICAgZGly ZWN0b3J5IGlzLCBpZiB0aGUgInh4eCIgZGlyZWN0b3J5IGlzIG5vdCBhIHN1YmRpcmVjdG9yeSBv ZiB5b3VyCisgICBjdXJyZW50IGRpcmVjdG9yeSwgdGhlbiB0aGUgeHh4IHN1YmRpcmVjdG9yeSBv ZiB5b3VyIGhvbWUgZGlyZWN0b3J5IGlzCisgICB1c2VkIG9yIGlmIHRoYXQgZG9lcyBub3QgZXhp c3QsIHRoZW4gdGhlIHh4eCBzdWJkaXJlY3Rvcnkgb2YgdGhlIGtlcm1pdAorICAgc3ViZGlyZWN0 b3J5IG9mIHlvdXIgaG9tZSBkaXJlY3RvcnkgaXMgdXNlZCBvciBpZiB0aGF0IGRvZXMgbm90IGV4 aXN0LAorICAgdGhlbiAvdG1wL3h4eCBpcyB1c2VkLiBUaGlzIGlzIGhvdyB0aGUga3NoICJjZCIg Y29tbWFuZCB3b3JrcywgYW5kIG5vdworICAgdGhlIEMtS2VybWl0IENEIGNvbW1hbmQgd29ya3Mg dGhlIHNhbWUgd2F5LgorCisgICBJbiBWTVMsIHlvdSBjYW4gZGVmaW5lIENEUEFUSCB0byBiZSBh IGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluCisgICBhY3R1YWwgZGlyZWN0b3J5IGRl bGltaXRlcnMsIGFuZC9vciBsb2dpY2FsIG5hbWVzIHJlcHJlc2VudGluZworICAgZGlyZWN0b3Jp ZXMsIHVzaW5nIGNvbW1hcyB0byBzZXBhcmF0ZSB0aGVtLCBlLmcuOgorCisgICQgZGVmaW5lIGNk cGF0aCBbSE9NRV0sW1NPTUVPVEhFUkRJUl0sW0hPTUUuTUlTQ10KKyAgJCBkZWZpbmUgY2RwYXRo IFNZUyRMT0dJTjosRElTSzE6W0hPTUVdLERJU0syOltTQ1JBVENILklWQU5dCisKKyAgIEV4YW1w bGU6CisKKyAgJCBkZWZpbmUgY2RwYXRoIFNZUyRMT0dJTjosW0lWQU5dLFtPTEFGXSxbT0xHQS5N SVNDXQorICAkIGtlcm1pdAorICBESVNLMTpbT0xHQV0gQy1LZXJtaXQ+IGNkIGJsYWgKKworICAg dHJpZXMgdGhlIEJMQUggc3ViZGlyZWN0b3J5IG9mIHRoZSB1c2VyJ3MgbG9naW4gZGlyZWN0b3J5 LCB0aGVuCisgICBbT0xHQS5CTEFIXSwgW0lWQU4uQkxBSF0sIFtPTEFGLkJMQUhdLCBhbmQgW09M R0EuTUlTQy5CTEFIXSwgaW4gdGhhdAorICAgb3JkZXIsIHVzaW5nIHRoZSBmaXJzdCBvbmUgaXQg ZmluZHMsIGZhaWxpbmcgaWYgaXQgZmluZHMgbm9uZS4KKworICAgSW4gQy1LZXJtaXQgNy4wLCB5 b3UgbWF5IGFsc28gc2V0IHRoZSBDRFBBVEggZnJvbSB0aGUgS2VybWl0IHByb21wdDoKKworICAg U0VUIENEIFBBVEggcGF0aAorICAgICAgICAgIEFsbG93cyB0aGUgQ0QgUEFUSCB0byBiZSBzZXQg ZnJvbSB3aXRoaW4gQy1LZXJtaXQuCisKKyAgIFNIT1cgQ0Qgc2hvd3MgdGhlIENEIHBhdGggYW5k IGFsbCBvdGhlciBpbmZvcm1hdGlvbiByZWxldmFudCB0byB0aGUgQ0QKKyAgIGNvbW1hbmQuCisK KzQuNS4yLjMuIENEIE1lc3NhZ2VzCisKKyAgIFdoZW5ldmVyIHlvdSBjaGFuZ2UgZGlyZWN0b3J5 LCB5b3UgY2FuIGhhdmUgQy1LZXJtaXQgZGlzcGxheSBhICJSZWFkCisgICBNZSIgZmlsZSBmcm9t IHRoZSBuZXcgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuIFRoZSBjb21tYW5kcyBhcmU6CisKKyAg IFNFVCBDRCBNRVNTQUdFIHsgT04sIE9GRiwgRklMRSBsaXN0IH0KKyAgICAgICAgICBPTiBlbmFi bGVzIHRoaXMgZmVhdHVyZTsgT0ZGICh0aGUgZGVmYXVsdCkgZGlzYWJsZXMgaXQuIEZpbGUKKyAg ICAgICAgICBsZXRzIHlvdSBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSAiUmVhZCBNZSIgZmlsZS4g QSBsaXN0IG9mIG5hbWVzCisgICAgICAgICAgdG8gbG9vayBmb3IgY2FuIGJlIGdpdmVuIGluIHRo ZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgIHt7bmFtZTF9e25hbWUyfXtuYW1lM317Li4ufX0KKwor ICAgICAgICAgIGUuZy46CisKKyAgU0VUIFNFUlZFUiBDRC1NRVNTQUdFIEZJTEUge3suLy5yZWFk bWV9e1JFQURNRS5UWFR9e1JFQUQuTUV9fQorCisgICAgICAgICAgVGhlIGRlZmF1bHQgbGlzdCBv ZiBDRC1tZXNzYWdlIGZpbGVzIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisKKyAgIFNIT1cgQ0Qgc2hv d3MgeW91ciBjdXJyZW50IGRpcmVjdG9yeSwgcHJldmlvdXMgZGlyZWN0b3J5LCBDRCBwYXRoLCBh bmQKKyAgIENEIG1lc3NhZ2UgaW5mby4KKworNC41LjMuIENyZWF0aW5nIGFuZCBSZW1vdmluZyBE aXJlY3RvcmllcworCisgICBUaGUgTUtESVIgY29tbWFuZCBub3cgYWxsb3dzIHlvdSB0byBjcmVh dGUgbXVsdGlwbGUgZGlyZWN0b3JpZXMgYXQKKyAgIG9uY2U6CisKKyAgQy1LZXJtaXQ+IG1rZGly IGEvYi9jL2QKKworICAgY3JlYXRlcyB0aGUgZGlyZWN0b3J5IGEgaW4gdGhlIGN1cnJlbnQgZGly ZWN0b3J5IChpZiBpdCBkb2Vzbid0IGV4aXN0CisgICBhbHJlYWR5KSwgYW5kIHRoZW4gY3JlYXRl cyBzdWJkaXJlY3RvcnkgYiBpbiB0aGUgYSBkaXJlY3RvcnkgKGlmIGl0CisgICBkaWRuJ3QgZXhp c3QgYWxyZWFkeSksIGFuZCBzbyBvbi4KKworICAgSWYgeW91IHVzZSBNS0RJUiB0byB0cnkgdG8g Y3JlYXRlIGEgZGlyZWN0b3J5IHRoYXQgYWxyZWFkeSBleGlzdHMsCisgICBDLUtlcm1pdCB3aWxs IHByaW50IGEgd2FybmluZyAoIj9EaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMiKSwgYnV0IHRoZQor ICAgTUtESVIgY29tbWFuZCB3aWxsIHN0aWxsIHN1Y2NlZWQuIElmIHlvdSB3YW50IHRvIGF2b2lk IHRoZSB3YXJuaW5nCisgICBtZXNzYWdlLCB1c2UgSUYgRElSRUNUT1JZIGZpcnN0IHRvIGNoZWNr IGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeQorICAgZXhpc3RzLgorCisgICBUaGUgUk1ESVIgY29t bWFuZCwgaG93ZXZlciwgd2lsbCBub3QgcmVtb3ZlIG1vcmUgdGhhbiBvbmUgZGlyZWN0b3J5LAor ICAgbm9yIHdpbGwgaXQgcmVtb3ZlIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgYW55IGZpbGVz LiAoVGhlcmUgaXMsIGFzCisgICB5ZXQsIG5vIFJNRElSIC9SRUNVUlNJVkUgY29tbWFuZCwgYWx0 aG91Z2ggb25lIG1pZ2h0IGJlIGFkZGVkIGxhdGVyLikKKworICAgSW4gVk1TLCB0aGVzZSBjb21t YW5kcyAobGlrZSBDRCkgYXJlIG1vcmUgZm9yZ2l2aW5nIG9mIHlvdXIgc3ludGF4IHRoYW4KKyAg IGlzIHRoZSBEQ0wgY29tbWFuZCBzaGVsbDsgIm1rZGlyIG9vZmEiIGlzIGVxdWl2YWxlbnQgdG8g Im1rZGlyIFsub29mYV0iCisgICBhbmQgc28gb24uIEFsc28gaW4gVk1TLCB5b3UnbGwgZmluZCB0 aGF0IEMtS2VybWl0J3MgUk1ESVIgY29tbWFuZCBpcworICAgZWFzaWVyIHRoYW4gZGVsZXRpbmcg YSBkaXJlY3RvcnkgaW4gRENMLCBzaW5jZSBpdCBhdXRvbWF0aWNhbGx5IGZpcnN0CisgICBnaXZl cyBpdCBvd25lciBkZWxldGUgcGVybWlzc2lvbiBpZiB5b3UgYXJlIHRoZSBvd25lci4KKworNC41 LjQuIFRoZSBERUxFVEUgYW5kIFBVUkdFIENvbW1hbmRzCisKKyAgIFRoZSBERUxFVEUgY29tbWFu ZCBub3cgb2ZmZXJzIGEgc2VsZWN0aW9uIG9mIHN3aXRjaGVzLCBhbmQgaGFzIGEgbmV3CisgICBj b21wYW5pb24sIHRoZSBQVVJHRSBjb21tYW5kLiBGaXJzdCwgREVMRVRFOgorCisgICBERUxFVEUg WyBzd2l0Y2hlcy4uLiBdIGZpbGVzcGVjCisgICAgICAgICAgRGVsZXRlcyB0aGUgZmlsZSBvciBm aWxlcyB0aGF0IG1hdGNoIHRoZSBmaWxlc3BlYywgd2hpY2ggbWF5CisgICAgICAgICAgY29udGFp biB3aWxkY2FyZHMgKFs0NzZdU2VjdGlvbiA0LjkpLgorCisgICBPcHRpb25hbCBzd2l0Y2hlcyBp bmNsdWRlIHRoZSBzdGFuZGFyZCBmaWxlLXNlbGVjdGlvbiBzd2l0Y2hlcworICAgcHJlc2VudGVk IGluIFs0NzddU2VjdGlvbiAxLjUuNCwgcGx1czoKKworICAgL0FTSworICAgICAgICAgIEJlZm9y ZSBkZWxldGluZyBlYWNoIGZpbGUsIGFzayBwZXJtaXNzaW9uIGludGVyYWN0aXZlbHkuIEFuc3dl cnMKKyAgICAgICAgICBhcmUgWWVzIG9yIE9LIChkZWxldGUgdGhlIGZpbGUpLCBObyAoZG9uJ3Qg ZGVsZXRlIGl0KSwgb3IgUXVpdAorICAgICAgICAgIChzdG9wIGV4ZWN1dGluZyB0aGUgREVMRVRF IGNvbW1hbmQpLgorCisgICAvTk9BU0sKKyAgICAgICAgICBEb24ndCBhc2sgcGVybWlzc2lvbiB0 byBkZWxldGUgZWFjaCBmaWxlLgorCisgICAvTElTVAorICAgICAgICAgIExpc3QgZWFjaCBmaWxl IGFuZCBzaG93IHdoZXRoZXIgaXQgd2FzIGRlbGV0ZWQuIFN5bm9ueW1zOiAvTE9HLAorICAgICAg ICAgIC9WRVJCT1NFLgorCisgICAvTk9MSVNUCisgICAgICAgICAgRG9uJ3QgbGlzdCBmaWxlcyB3 aGlsZSBkZWxldGluZyB0aGVtLiBTeW5vbnltczogL05PTE9HLCAvUVVJRVQuCisKKyAgIC9IRUFE SU5HCisgICAgICAgICAgUHJpbnQgYSBoZWFkaW5nIGFuZCBzdW1tYXJ5IGxpbmUuCisKKyAgIC9O T0hFQURJTkcKKyAgICAgICAgICBEb24ndCBwcmludCBhIGhlYWRpbmcgYW5kIHN1bW1hcnkgbGlu ZS4KKworICAgL1BBR0UKKyAgICAgICAgICBXaGVuIGxpc3RpbmcsIHBhdXNlIGF0IHRoZSBlbmQg b2YgZWFjaCBzY3JlZW5mdWwgYW5kIGdpdmUgdGhlCisgICAgICAgICAgIk1vcmU/IiBwcm9tcHQu IElmIHlvdSByZXBseSAibiIgKG5vKSwgdGhlIERFTEVURSBjb21tYW5kCisgICAgICAgICAgdGVy bWluYXRlcy4KKworICAgL1NJTVVMQVRFCisgICAgICAgICAgRG8gZXZlcnl0aGluZyBpbXBsaWVk IGJ5IHRoZSBnaXZlbiBzd2l0Y2hlcyBhbmQgZmlsZXNwZWMsIGV4Y2VwdAorICAgICAgICAgIGRv IG5vdCBhY3R1YWxseSBkZWxldGUgYW55IGZpbGVzLiBUaGlzIGxldHMgeW91IHByZXZpZXcgd2hp Y2gKKyAgICAgICAgICBmaWxlcyB3b3VsZCBiZSBkZWxldGVkOyBpbXBsaWVzIC9MSVNULgorCisg ICBOb3cgdGhlIFBVUkdFIGNvbW1hbmQ6CisKKyAgIFBVUkdFIFsgc3dpdGNoZXMuLi4gXSBbIGZp bGVzcGVjIF0KKyAgICAgICAgICAoVk1TIG9ubHkpIFJ1bnMgdGhlIERDTCBQVVJHRSBjb21tYW5k LiBTd2l0Y2hlcyBhbmQgZmlsZXNwZWMsIGlmCisgICAgICAgICAgYW55LCBhcmUgcGFzc2VkIGRp cmVjdGx5IHRvIERDTCB3aXRob3V0IHBhcnNpbmcgb3IgdmVyaWZpY2F0aW9uLgorICAgICAgICAg IERlbGV0ZXMgZXhjZXNzIHZlcnNpb25zIG9mIHRoZSBnaXZlbiAob3IgYWxsKSBmaWxlcy4gVGhl IHJlc3Qgb2YKKyAgICAgICAgICB0aGlzIHNlY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gVk1TLgor CisgICBQVVJHRSBbIHN3aXRjaGVzLi4uIF0gWyBmaWxlc3BlYyBdCisgICAgICAgICAgKFVOSVgg b25seSkgRGVsZXRlcyAiYmFja3VwIGZpbGVzIiB0aGF0IG1hdGNoIHRoZSBmaWxlc3BlYywKKyAg ICAgICAgICB3aGljaCBtYXkgY29udGFpbiB3aWxkY2FyZHMgKFs0NzhdU2VjdGlvbiA0LjkpLiBJ ZiBubyBmaWxlc3BlYworICAgICAgICAgIGlzIGdpdmVuLCBhbGwgYmFja3VwIGZpbGVzIGluIHRo ZSBjdXJyZW50IGRpcmVjdG9yeSBhcmUgc2VsZWN0ZWQKKyAgICAgICAgICAoc3ViamVjdCB0byBt b2RpZmljYXRpb24gYnkgYW55IHN3aXRjaGVzKS4gRG8gbm90IGluY2x1ZGUgYmFja3VwCisgICAg ICAgICAgbm90YXRpb24gaW4gdGhlIGZpbGVzcGVjLgorCisgICBFeHBsYW5hdGlvbjoKKworICAg VG8gYXZvaWQgZGVzdHJveWluZyBwcmVleGlzdGluZyBmaWxlcyB3aGVuIGEgbmV3IGZpbGUgYXJy aXZlcyB0aGF0IGhhcworICAgdGhlIHNhbWUgbmFtZSwgQy1LZXJtaXQgYmFja3MgdXAgdGhlIG9s ZCBmaWxlIGJ5IGFwcGVuZGluZyBhICJiYWNrdXAKKyAgIG51bWJlciIgdG8gaXRzIG5hbWUuIElu IFVOSVgsIHRoZSBiYWNrdXAgc3VmZml4IGNvbnNpc3RzIG9mIGEgcGVyaW9kLCBhCisgICB0aWxk ZSwgYSBudW1iZXIsIGFuZCBhbm90aGVyIHRpbGRlLiBGb3IgZXhhbXBsZSwgaWYgYSBmaWxlIGNh bGxlZAorICAgb29mYS50eHQgZXhpc3RzIGFuZCBhIG5ldyBvb2ZhLnR4dCBmaWxlIGFycml2ZXMs IHRoZSBvcmlnaW5hbCBpcworICAgcmVuYW1lZCB0byBvb2ZhLnR4dC5+MX4uIElmIGFub3RoZXIg b29mYS50eHQgZmlsZSBhcnJpdmVzLCB0aGUgZXhpc3RpbmcKKyAgIG9uZSBpcyByZW5hbWVkIHRv IG9vZmEudHh0Ln4yfi4gQW5kIHNvIG9uLiBUaGlzIHN5c3RlbSBpcyBjb21wYXRpYmxlCisgICB3 aXRoIHRoZSBvbmUgdXNlZCBieSBFTUFDUy4gVGh1cyBvdmVyIHRpbWUsIGlmIHlvdSByZWNlaXZl IGEgbG90IG9mCisgICBmaWxlcyB3aXRoIEMtS2VybWl0IG9yIGVkaXQgdGhlbSB3aXRoIEVNQUNT LCBiYWNrdXAgZmlsZXMgY2FuIGJ1aWxkIHVwLgorICAgVGhlIG5ldyBQVVJHRSBjb21tYW5kIGxl dHMgeW91IGNsZWFuIG91dCBhY2N1bXVsYXRlZCBiYWNrdXAgZmlsZXM6CisKKyAgIE9wdGlvbmFs IHN3aXRjaGVzIGluY2x1ZGUgdGhlIHN0YW5kYXJkIGZpbGUtc2VsZWN0aW9uIHN3aXRjaGVzCisg ICBwcmVzZW50ZWQgaW4gWzQ3OV1TZWN0aW9uIDEuNS40LCBwbHVzIGFsbCB0aGUgc3dpdGNoZXMg bGlzdGVkIGFib3ZlIGZvcgorICAgdGhlIERFTEVURSBjb21tYW5kLCBwbHVzOgorCisgICAvS0VF UDpuCisgICAgICAgICAgUmV0YWlucyB0aGUgbiBtb3N0IHJlY2VudCAoaGlnaGVzdC1udW1iZXJl ZCkgYmFja3VwIGZpbGVzIGZvcgorICAgICAgICAgIGVhY2ggZmlsZS4gRm9yIGV4YW1wbGUsIGlm IG9vZmEudHh0LCBvb2ZhLnR4dC5+MX4sIG9vZmEudHh0Ln4yfiwKKyAgICAgICAgICBvb2ZhLnR4 dC5+MTB+LCBvb2ZhLnR4dC5+MTJ+LCBhbmQgb29mYS50eHQufjEwMH4gZXhpc3QsICJwdXJnZQor ICAgICAgICAgIC9rZWVwOjIgb29mYS50eHQiIGRlbGV0ZXMgb29mYS50eHQufjF+LCBvb2ZhLnR4 dC5+Mn4sIGFuZAorICAgICAgICAgIG9vZmEudHh0Ln4xMH4sIGFuZCBrZWVwcyBvb2ZhLnR4dCwg b29mYS50eHQufjEyfiwgYW5kCisgICAgICAgICAgb29mYS50eHQufjEwMH4uIElmIC9LRUVQIGlz IGdpdmVuIHdpdGhvdXQgYSBudW1iZXIsIG9uZSAodGhlCisgICAgICAgICAgaGlnaGVzdCBudW1i ZXJlZCkgYmFja3VwIGZpbGUgaXMga2VwdC4KKworICAgQ0FVVElPTjogVGhlIFBVUkdFIGNvbW1h bmQgc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuICoufip+IGZpbGVzIHRydWx5CisgICBhcmUgYmFj a3VwIGZpbGVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBFTUFDUywgYW5kIGl0IGlzIHRoZSBERUZB VUxUIGZvcgorICAgQy1LZXJtaXQuIEhvd2V2ZXIsIGlmIEMtS2VybWl0J3MgRklMRSBDT0xMSVNJ T04gaGFzIGJlZW4gc2V0IHRvIFJFTkFNRSwKKyAgIG5ld2x5IHJlY2VpdmVkIGZpbGVzIHdpbGwg bG9vayBsaWtlIGJhY2t1cCBmaWxlcy4gSW4gdGhhdCBjYXNlLCBkb24ndAorICAgdXNlIHRoZSBQ VVJHRSBjb21tYW5kIG9yIHlvdSdsbCBiZSByZW1vdmluZyBuZXcgZmlsZXMgcmF0aGVyIHRoYW4g b2xkCisgICBvbmVzLiAoVXNlIFNIT1cgRklMRSB0byBmaW5kIHRoZSBGSUxFIENPTExJU0lPTiBz ZXR0aW5nLikKKworICAgVGhlIFBVUkdFIGNvbW1hbmQgaXMgcHJlc2VudGx5IGF2YWlsYWJsZSBv bmx5IGluIFVOSVguIFRoZSBjb21tYW5kCisgICBzdWNjZWVkcyBpZiBpdCBkZWxldGVkIGFueSBm aWxlcywgb3IgaWYgaXQgZGVsZXRlZCBubyBmaWxlcyBidXQgdGhlcmUKKyAgIHdlcmUgbm8gZXJy b3JzLiBJdCBmYWlscyBpZiBpdCBkZWxldGVkIG5vIGZpbGVzIGFuZCB0aGVyZSB3ZXJlIGVycm9y cworICAgKGkuZS4gZGVsZXRpb24gd2FzIGF0dGVtcHRlZCBidXQgZmFpbGVkKS4gSW4gVk1TLCBi YWNrdXAgZmlsZSB2ZXJzaW9ucworICAgYXJlIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUg T1MsIGFuZCBhIFBVUkdFIGNvbW1hbmQgY2FuIGJlIHVzZWQgYXQKKyAgIHRoZSBWTVMgcHJvbXB0 IHRvIGNsZWFuIHRoZW0gdXAuCisKKyAgIElmIHlvdSB3YW50IGNlcnRhaW4gc3dpdGNoZXMgdG8g YmUgc3VwcGxpZWQgYXV0b21hdGljYWxseSB3aXRoIGVhY2gKKyAgIERFTEVURSBvciBQVVJHRSBj b21tYW5kLCB5b3UgY2FuIHNldCB0aGVtIHdpdGggU0VUIE9QVElPTlMKKyAgIChbNDgwXVNlY3Rp b24gMS41LjUpIGFuZCB5b3UgY2FuIGRpc3BsYXkgYW55IHN1Y2ggc2V0dGluZ3Mgd2l0aCBTSE9X CisgICBPUFRJT05TLiBPZiBjb3Vyc2UgeW91IGNhbiBvdmVycmlkZSB0aGVtIG9uIGEgcGVyLWNv bW1hbmQgYmFzaXMgYnkKKyAgIGluY2x1ZGluZyBzd2l0Y2hlcyBpbiB5b3VyIFBVUkdFIG9yIERF TEVURSBjb21tYW5kLgorCisgICBBbHNvIHNlZSBTRVQgRklMRSBDT0xMSVNJT04sIFNIT1cgRklM RSwgU0VORCAvTk9CQUNLVVAsIFNFVCBTRU5ECisgICBCQUNLVVAsIGFuZCBESVJFQ1RPUlkgL1tO T11CQUNLVVAuCisKKzQuNi4gU3RhcnRpbmcgdGhlIFJlbW90ZSBLZXJtaXQgU2VydmVyIEF1dG9t YXRpY2FsbHkKKworICAgQXMgbm90ZWQgb24gcGFnZXMgMjc1LTI3NiBvZiBbNDgxXVVzaW5nIEMt S2VybWl0IDJuZCBlZGl0aW9uLCB5b3UgY2FuCisgICBoYXZlIEtlcm1pdCBzZW5kICJrZXJtaXQg cmVjZWl2ZSIgY29tbWFuZHMgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzIGluCisgICBsb2NhbCBt b2RlIGFuZCB5b3UgZ2l2ZSBhIFNFTkQgb3Igc2ltaWxhciBjb21tYW5kLCB0byBzdGFydCB0aGUg cmVtb3RlCisgICBLZXJtaXQgcmVjZWl2ZXIgaW4gY2FzZSBpdCBpcyBub3QgYWxyZWFkeSBzdGFy dGVkLiBUaGUgImtlcm1pdCByZWNlaXZlIgorICAgY29tbWFuZHMgYXJlIHNwZWNpZmllZCBieToK KworICBTRVQgUFJPVE9DT0wgS0VSTUlUIGJpbmFyeS1yZWNlaXZlLWNvbW1hbmQgdGV4dC1yZWNl aXZlLWNvbW1hbmQKKworICAgQXMgb2YgdmVyc2lvbiA3LjAsIGEgS2VybWl0IHByb3RvY29sIG9w dGlvbiBoYXMgYmVlbiBhZGRlZCB0byBzZW5kIGEKKyAgIHN0cmluZyB0byB0aGUgaG9zdCBpbiBh ZHZhbmNlIG9mIGFueSBLZXJtaXQgcGFja2V0cyB3aGVuIHlvdSBnaXZlIGEKKyAgIEdFVC1jbGFz cyBvciBSRU1PVEUgY29tbWFuZC4gVGhpcyB3aWxsIHN3aXRjaCB0aGUgcmVtb3RlIEMtS2VybWl0 IGludG8KKyAgIHRoZSBhcHByb3ByaWF0ZSBtb2RlIG9yLCBpZiB0aGUgcmVtb3RlIHN5c3RlbSBp cyBhdCBhIHN5c3RlbSBjb21tYW5kCisgICAoc2hlbGwpIHByb21wdCwgZXhlY3V0ZSB0aGUgc3Ry aW5nIG9uIHRoZSByZW1vdGUgc3lzdGVtLiBUaGUgbmV3IHN5bnRheAorICAgb2YgdGhlIFNFVCBQ Uk9UT0NPTCBLRVJNSVQgY29tbWFuZCBpczoKKworICBTRVQgUFJPVE9DT0wgS0VSTUlUIFsgczEg WyBzMiBbIHMzIF0gXSBdCisKKyAgIHdoZXJlOgorCisgICAgICAgRGVmYXVsdCAgICAgICAgIE1l YW5pbmcKKyAgczEgIHtrZXJtaXQgLWlyfSAgICAgUmVtb3RlICJrZXJtaXQgcmVjZWl2ZSBpbiBi aW5hcnkgbW9kZSIgY29tbWFuZC4KKyAgczIgIHtrZXJtaXQgLXJ9ICAgICAgUmVtb3RlICJrZXJt aXQgcmVjZWl2ZSBpbiB0ZXh0IG1vZGUiIGNvbW1hbmQuCisgIHMzICB7a2VybWl0IC14fSAgICAg IFJlbW90ZSAic3RhcnQga2VybWl0IHNlcnZlciIgY29tbWFuZC4KKworICAgTk9URTogSWYgdGhl IHJlbW90ZSBLZXJtaXQgaXMgNi4wLCB0aGUgZm9sbG93aW5nIGFyZSByZWNvbW1lbmRlZCBmb3IK KyAgIGZhc3Qgc3RhcnR1cCBhbmQgaGlnaC1wZXJmb3JtYW5jZSBmaWxlIHRyYW5zZmVyIChzZWUg QXBwZW5kaXggSSBpbgorICAgWzQ4Ml1Vc2luZyBDLUtlcm1pdCwgc2Vjb25kIEVkaXRpb24sIGZv ciBjb21tYW5kLWxpbmUgb3B0aW9ucyk6CisKKyAgczEgICBrZXJtaXQgLVlRaXIgICAoS2VybWl0 IHJlY2VpdmUgYmluYXJ5LCBza2lwIGluaXQgZmlsZSwgZmFzdC4pCisgIHMyICAga2VybWl0IC1Z UVRyICAgKEtlcm1pdCByZWNlaXZlIHRleHQsIHNraXAgaW5pdCBmaWxlLCBmYXN0LikKKyAgczMg ICBrZXJtaXQgLVlReCAgICAoS2VybWl0IHNlcnZlciwgc2tpcCBpbml0IGZpbGUsIGZhc3QuKQor CisgICBJZiB0aGUgcmVtb3RlIGlzIEMtS2VybWl0IDcuMCBvciBsYXRlciwgY2hhbmdlIHRoZSAt eCBvcHRpb24gKGVudGVyCisgICBzZXJ2ZXIgbW9kZSkgdG8gLU8gKHVwcGVyY2FzZSBsZXR0ZXIg TyksIHdoaWNoIG1lYW5zICJlbnRlciBzZXJ2ZXIgbW9kZQorICAgZm9yIE9uZSB0cmFuc2FjdGlv biBvbmx5KTsgdGhpcyB3YXksIGl0IGlzIG5vdCBzdHVjayBpbiBzZXJ2ZXIgYWZ0ZXIKKyAgIHRo ZSB0cmFuc2Zlci4gQWxzbyBub3RlIHRoYXQgdGhlIFEgaXMgcmVkdW5kYW50IGluIHZlcnNpb24g Ny4wLCBzaW5jZQorICAgZmFzdCBLZXJtaXQgcHJvdG9jb2wgc2V0dGluZ3MgYXJlIG5vdyB0aGUg ZGVmYXVsdC4KKworICAgTm90ZSB0aGF0IGluIGNhc2UgdGhlIEMtS2VybWl0IGV4ZWN1dGFibGUg aXMgY2FsbGVkICJ3ZXJtaXQiIG9yCisgICAiY2tlcm1pdCIgeW91IGNhbiBjaGFuZ2UgImtlcm1p dCIgaW4gdGhlIHN0cmluZ3MgYWJvdmUgdG8gIndlcm1pdCIgb3IKKyAgICJja2VybWl0IiBhbmQg Qy1LZXJtaXQgNy4wIG9yIGxhdGVyIHdpbGwgcmVjb2duaXplIHRoZXNlIGFzIHN5bm9ueW1zCisg ICBmb3IgImtlcm1pdCIsIGluIGNhc2UgaXQgaXMgYXQgaXRzIGNvbW1hbmQgcHJvbXB0IHdoZW4g b25lIG9mIHRoZXNlCisgICBzdHJpbmdzIGlzIHNlbnQgdG8gaXQuCisKKzQuNy4gRmlsZS1UcmFu c2ZlciBDb21tYW5kIFN3aXRjaGVzCisKKyAgIE92ZXIgdGhlIHllYXJzLCB2YXJpb3VzIG5ldyBt ZXRob2RzIG9mIHRyYW5zZmVycmluZyBhIGZpbGUgaGF2ZQorICAgYWNjdW11bGF0ZWQsIHVudGls IHdlIGhhZCwgaW4gYWRkaXRpb24gdG8gdGhlIFNFTkQgY29tbWFuZCwgYWxzbyBNT1ZFCisgICAo c2VuZCBhbmQgdGhlbiBkZWxldGUpLCBNQUlMIChzZW5kIGFzIGVtYWlsKSwgUkVNT1RFIFBSSU5U IChzZW5kIHRvIGJlCisgICBwcmludGVkKSwgQ1NFTkQgKHNlbmQgdGhlIG91dHB1dCBvZiBhIGNv bW1hbmQpLCBQU0VORCAoc2VuZCBhIHBhcnQgb2YgYQorICAgZmlsZSksIEJTRU5EIChzZW5kIGlu IGJpbmFyeSBtb2RlKSwgUkVTRU5EIChyZXN1bWUgYW4gaW50ZXJydXB0ZWQKKyAgIFNFTkQpLCBl dGMgZXRjLiBTaW1pbGFybHk6IEdFVCwgUkVHRVQsIENHRVQsIFJFVFJJRVZFLCBhbmQgc28gb24u CisKKyAgIE5vdCBvbmx5IGlzIGl0IGNvbmZ1c2luZyB0byBoYXZlIGRpZmZlcmVudCBuYW1lcyBm b3IgdGhlc2UgY29tbWFuZHMsCisgICBtYW55IG9mIHdoaWNoIGFyZSBub3QgcmVhbCB3b3Jkcywg YnV0IHRoaXMgYWxzbyBkb2VzIG5vdCBhbGxvdyBhbGwKKyAgIGNvbWJpbmF0aW9ucywgbGlrZSAi c2VuZCBhIGZpbGUgYXMgbWFpbCwgdGhlbiBkZWxldGUgaXQiLgorCisgICBJbiBDLUtlcm1pdCA3 LjAsIHRoZSBTRU5ELCBHRVQsIGFuZCBSRUNFSVZFIGNvbW1hbmRzIHdlcmUgcmVzdHJ1Y3R1cmVk CisgICB0byBhY2NlcHQgbW9kaWZpZXIgc3dpdGNoZXMgKHN3aXRjaGVzIGFyZSBleHBsYWluZWQg aW4gWzQ4M11TZWN0aW9uCisgICAxLjUpLgorCis0LjcuMS4gU0VORCBDb21tYW5kIFN3aXRjaGVz CisKKyAgIFdpdGhvdXQgc3dpdGNoZXMsIHRoZSBTRU5EIGNvbW1hbmQgc3RpbGwgd29ya3MgZXhh Y3RseSBhcyBiZWZvcmU6CisKKyAgc2VuZCBvb2ZhLnR4dCAgICAgIDsgc2VuZCBhIHNpbmdsZSBm aWxlCisgIHNlbmQgb29mYS4qICAgICAgICA7IHNlbmQgbXVsdGlwbGUgZmlsZXMKKyAgc2VuZCBv b2ZhLnR4dCB4LnggIDsgc2VuZCBvb2ZhLnR4dCBhcyB4LnggKHRlbGwgcmVjZWl2ZXIgaXRzIG5h bWUgaXMgeC54KQorICBzZW5kICAgICAgICAgICAgICAgOyBzZW5kIGZyb20gU0VORC1MSVNUCisK KyAgIEJ1dCBub3cgdGhlIGZvbGxvd2luZyBtb2RpZmllciBzd2l0Y2hlcyBtYXkgYmUgaW5jbHVk ZWQgYmV0d2VlbiAic2VuZCIKKyAgIGFuZCB0aGUgZmlsZW5hbWUuIFplcm8sIG9uZSwgdHdvLCBv ciBtb3JlIHN3aXRjaGVzIG1heSBiZSBpbmNsdWRlZCBpbgorICAgYW55IGNvbWJpbmF0aW9uIHRo YXQgbWFrZXMgc2Vuc2UuIFN3aXRjaCBuYW1lcyAoc3VjaCBhcyAvQklOQVJZKSBjYW4gYmUKKyAg IGFiYnJldmlhdGVkLCBqdXN0IGxpa2UgYW55IG90aGVyIGtleXdvcmRzLiBNb3N0IG9mIHRoZXNl IHN3aXRjaGVzIHdvcmsKKyAgIG9ubHkgd2hlbiB1c2luZyBLZXJtaXQgcHJvdG9jb2wgKC9URVhU IGFuZCAvQklOQVJZIGFyZSB0aGUgZXhjZXB0aW9ucykuCisKKyAgIC9BRlRFUjpkYXRlLXRpbWUK KyAgICAgICAgICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIChvciwg aW4gVk1TLCBjcmVhdGVkKQorICAgICAgICAgIGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUgKHNl ZSBbNDg0XVNlY3Rpb24gMS42KSBhcmUgdG8gYmUgc2VudC4KKyAgICAgICAgICBFeGFtcGxlczoK KworICBzZW5kIC90ZXh0IC9hZnRlcjp7Mi1GZWItMTk5NyAxMDoyODozMH0gKi50eHQKKyAgc2Vu ZCAvdGV4dCAvYWZ0ZXI6XGZkYXRlKG9vZmEudHh0KSAqLnR4dAorCisgICAgICAgICAgU3lub255 bTogL1NJTkNFLgorCisgICAvQVJSQVk6YXJyYXluYW1lCisgICAgICAgICAgU3BlY2lmaWVzIHRo YXQgaW5zdGVhZCBvZiBzZW5kaW5nIGEgZmlsZSwgQy1LZXJtaXQgaXMgdG8gc2VuZAorICAgICAg ICAgIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXkuIFNpbmNlIGFuIGFycmF5IGRvZXMg bm90IGhhdmUgYQorICAgICAgICAgIGZpbGVuYW1lLCB5b3Ugc2hvdWxkIGluY2x1ZGUgYW4gL0FT LU5BTUUgc3dpdGNoIHRvIHNwZWNpZnkgdGhlCisgICAgICAgICAgbmFtZSB1bmRlciB3aGljaCB0 aGUgYXJyYXkgaXMgdG8gYmUgc2VudCAoaWYgeW91IGRvIG5vdCwgdGhlCisgICAgICAgICAgbmFt ZSAiX2FycmF5X3hfIiBpcyB1c2VkLCB3aGVyZSAneCcgaXMgcmVwbGFjZWQgYnkgdGhlIGFycmF5 CisgICAgICAgICAgZGVzaWduYXRvcikuIFNlZSBbNDg1XXNlY3Rpb24gNy4xMCBmb3IgYXJyYXkt bmFtZSBzeW50YXguIEFzCisgICAgICAgICAgbm90ZWQgaW4gdGhhdCBzZWN0aW9uLCB5b3UgY2Fu IGFsc28gaW5jbHVkZSBhIHJhbmdlIHRvIGhhdmUgYQorICAgICAgICAgIHNlZ21lbnQgb2YgdGhl IGFycmF5IHNlbnQsIHJhdGhlciB0aGFuIHRoZSB3aG9sZSB0aGluZzsgZm9yCisgICAgICAgICAg ZXhhbXBsZTogInNlbmQgL2FycmF5OiZhWzEwMDoxOTldIi4gSXQgaXMgc3Ryb25nbHkgcmVjb21t ZW5kZWQKKyAgICAgICAgICB0aGF0IHlvdSBhY2NvbXBhbnkgdGhlIC9BUlJBWSBzd2l0Y2ggd2l0 aCBhIC9URVhUIG9yIC9CSU5BUlkKKyAgICAgICAgICBzd2l0Y2ggdG8gZm9yY2UgdGhlIGRlc2ly ZWQgdHJhbnNmZXIgbW9kZSwgc2luY2Ugb3RoZXJ3aXNlIHRoZQorICAgICAgICAgIHZhcmlvdXMg YXV0b21hdGljIG1lY2hhbmlzbXMgbWlnaHQgc3dpdGNoIHRvIGJpbmFyeSBtb2RlIHdoZW4KKyAg ICAgICAgICB5b3UgcmVhbGx5IHdhbnRlZCB0ZXh0LCBvciB2aWNlIHZlcnNhLiBJbiB0ZXh0IG1v ZGUgYSBsaW5lCisgICAgICAgICAgdGVybWluYXRvciBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIGVh Y2ggYXJyYXkgZWxlbWVudCwgYnV0IG5vdCBpbgorICAgICAgICAgIGJpbmFyeSBtb2RlLiBGb3Ig ZGV0YWlscyBhbmQgZXhhbXBsZXMgc2VlIFs0ODZdU2VjdGlvbiA3LjEwLjExLgorCisgICAvQVMt TkFNRTp0ZXh0CisgICAgICAgICAgU3BlY2lmaWVzICJ0ZXh0IiBhcyB0aGUgbmFtZSB0byBzZW5k IHRoZSBmaWxlIHVuZGVyLiBZb3UgY2FuCisgICAgICAgICAgYWxzbyBzdGlsbCBzcGVjaWZ5IHRo ZSBhcy1uYW1lIGFzIHRoZSBzZWNvbmQgZmlsZW5hbWUgb24gdGhlCisgICAgICAgICAgU0VORCBj b21tYW5kIGxpbmUuIFRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIGFyZSBlcXVpdmFsZW50Ogor CisgIHNlbmQgb29mYS50eHQgb29mYS5uZXcKKyAgc2VuZCAvYXM6b29mYS5uZXcgb29mYS50eHQK KworICAgL0JFRk9SRTpkYXRlLXRpbWUKKyAgICAgICAgICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRo b3NlIGZpbGVzIG1vZGlmaWVkIChvciwgaW4gVk1TLCBjcmVhdGVkKQorICAgICAgICAgIGJlZm9y ZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIChbNDg3XVNlY3Rpb24gMS42KSBhcmUgdG8gYmUgc2VudC4K KworICAgL0JJTkFSWQorICAgICAgICAgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIgaW4gYmluYXJ5 IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlCisgICAgICAgICAgZ2xvYmFsIHRyYW5zZmVyIG1v ZGUsIG92ZXJyaWRpbmcgbm90IG9ubHkgdGhlIEZJTEUgVFlQRSBhbmQKKyAgICAgICAgICBUUkFO U0ZFUiBNT0RFIHNldHRpbmdzLCBidXQgYWxzbyB0aGUgRklMRSBQQVRURVJOIHNldHRpbmcsIGJ1 dAorICAgICAgICAgIGZvciB0aGlzIFNFTkQgY29tbWFuZCBvbmx5LiBJbiBvdGhlciB3b3Jkcywg U0VORCAvQklOQVJZIG1lYW5zCisgICAgICAgICAgd2hhdCBpdCBzYXlzOiBzZW5kIHRoZSBmaWxl IGluIGJpbmFyeSBtb2RlLCByZWdhcmRsZXNzIG9mIGFueQorICAgICAgICAgIG90aGVyIHNldHRp bmdzLiBFeGFtcGxlOgorCisgIHNldCBmaWxlIHR5cGUgdGV4dCAgICAgIDsgU2V0IGdsb2JhbCB0 cmFuc2ZlciBtb2RlIHRvIHRleHQKKyAgc2VuZCAvYmluYXJ5IG9vZmEuemlwICAgOyBTZW5kIGEg ZmlsZSBpbiBiaW5hcnkKKyAgc2VuZCBvb2ZhLnR4dCAgICAgICAgICAgOyBUaGlzIG9uZSBpcyBz ZW50IGluIHRleHQgbW9kZQorCisgICAvQ09NTUFORAorICAgICAgICAgIFNFTkQgL0NPTU1BTkQg aXMgZXF1aXZhbGVudCB0byBDU0VORCAoWzQ4OF1TZWN0aW9uIDQuMi4yKSAtLSBpdAorICAgICAg ICAgIHNheXMgdG8gc2VuZCB0aGUgb3V0cHV0IGZyb20gYSBjb21tYW5kLCByYXRoZXIgdGhhbiB0 aGUgY29udGVudHMKKyAgICAgICAgICBvZiBhIGZpbGUuIFRoZSBmaXJzdCAiZmlsZW5hbWUiIG9u IHRoZSBTRU5EIGNvbW1hbmQgbGluZSBpcworICAgICAgICAgIGludGVycHJldGVkIGFzIHRoZSBu YW1lIG9mIGEgY29tbWFuZDsgdGhlIHNlY29uZCAoaWYgYW55KSBpcyB0aGUKKyAgICAgICAgICBh cy1uYW1lLiBFeGFtcGxlczoKKworICBzZW5kIC9jb21tYW5kIHtncmVwIFN1bmRheSBvb2ZhLnR4 dH0gc3VuZGF5LnR4dAorICBzZW5kIC9hcy1uYW1lOnN1bmRheS50eHQgL2NvbW1hbmQge2dyZXAg U3VuZGF5IG9vZmEudHh0fQorICBzZW5kIC9iaW4gL2NvbW1hbmQge3RhciBjZiAtIC4gfCBnemlw IC1jfSB7IWd1bnppcCAtYyB8IHRhciB4ZiAtfQorCisgICAvREVMRVRFCisgICAgICAgICAgRGVs ZXRlcyB0aGUgZmlsZSAob3IgZWFjaCBmaWxlIGluIHRoZSBncm91cCkgYWZ0ZXIgaXQgaGFzIGJl ZW4KKyAgICAgICAgICBzZW50IHN1Y2Nlc3NmdWxseSAoYnV0IGRvZXMgbm90IGRlbGV0ZSBpdCBp ZiBpdCB3YXMgbm90IHNlbnQKKyAgICAgICAgICBzdWNjZXNzZnVsbHkpLiBTRU5EIC9ERUxFVEUg aXMgZXF1aXZhbGVudCB0byBNT1ZFLiBIYXMgbm8gZWZmZWN0CisgICAgICAgICAgd2hlbiB1c2Vk IHdpdGggL0NPTU1BTkQuIEV4YW1wbGU6CisKKyAgc2VuZCAvZGVsZXRlICoubG9nCisKKyAgIC9E T1RGSUxFUworICAgICAgICAgIChVTklYIGFuZCBPUy05IG9ubHkpIE5vcm1hbGx5IGZpbGVzIHdo b3NlIG5hbWVzIGJlZ2luIHdpdGggIi4iCisgICAgICAgICAgYXJlIHNraXBwZWQgd2hlbiBtYXRj aGluZyB3aWxkY2FyZHMgdGhhdCBkbyBub3QgYWxzbyBiZWdpbiB3aXRoCisgICAgICAgICAgIi4i LiBJbmNsdWRlIC9ET1RGSUxFUyB0byBmb3JjZSB0aGVzZSBmaWxlcyB0byBiZSBpbmNsdWRlZCB0 b28uCisKKyAgIC9SRUNVUlNJVkUKKyAgICAgICAgICBEZXNjZW5kIHRoZSB0aHJvdWdoIHRoZSBk aXJlY3RvcnkgdHJlZSB3aGVuIGxvY2F0aW5nIGZpbGVzIHRvCisgICAgICAgICAgc2VuZC4gQXV0 b21hdGljYWxseSBzZXRzIC9QQVRITkFNRVM6UkVMQVRJVkUuIEV4cGxhaW5lZCBpbgorICAgICAg ICAgIFs0ODldU2VjdGlvbiA0LjExIC4KKworICAgL0VYQ0VQVDpwYXR0ZXJuCisgICAgICAgICAg U2VlIFs0OTBdU2VjdGlvbiAxLjUuNC4KKworICAgL05PQkFDS1VQCisgICAgICAgICAgVGhpcyBt ZWFucyB0byBza2lwIGJhY2t1cCBmaWxlcyB3aGVuIHNlbmRpbmcsIGV2ZW4gaWYgdGhleSBtYXRj aAorICAgICAgICAgIHRoZSBTRU5EIGZpbGUgc3BlY2lmaWNhdGlvbi4gVGhpcyBpcyBlcXVpdmFs ZW50IHRvIHVzaW5nIFNFTkQKKyAgICAgICAgICAvRVhDRVBUIGFuZCBpbmNsdWRpbmcgKi5+WzAt OV0qfiBpbiB0aGUgZXhjZXB0aW9uIGxpc3QgKG9yICoufip+CisgICAgICAgICAgaWYgS2VybWl0 IHdhcyBidWlsdCB3aXRob3V0IHBhdHRlcm4tbWF0Y2hpbmcgc3VwcG9ydDsgc2VlCisgICAgICAg ICAgWzQ5MV1TZWN0aW9uIDQuOS4xKS4gSW5jbHVkaW5nIHRoaXMgc3dpdGNoIGlzIGVxdWl2YWxl bnQgdG8KKyAgICAgICAgICBnaXZpbmcgU0VUIFNFTkQgQkFDS1VQIE9GRiAoWzQ5Ml1TZWN0aW9u IDQuMC42KSBwcmlvciB0byBTRU5ELAorICAgICAgICAgIGV4Y2VwdCBpdHMgZWZmZWN0IGlzIGxv Y2FsIHRvIHRoZSBTRU5EIGNvbW1hbmQgd2l0aCB3aGljaCBpdCB3YXMKKyAgICAgICAgICBnaXZl bi4KKworICAgL05PRE9URklMRVMKKyAgICAgICAgICBUaGUgb3Bwb3NpdGUgb2YgL0RPVEZJTEVT IChxLnYuKQorCisgICAvRklMRU5BTUVTOntDT05WRVJURUQsTElURVJBTH0KKyAgICAgICAgICBV c2UgdGhpcyBzd2l0Y2ggdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZ2xvYmFsIFNFVCBGSUxFIE5B TUVTCisgICAgICAgICAgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5LgorCisgICAvRklM VEVSOmNvbW1hbmQKKyAgICAgICAgICBUaGlzIHNwZWNpZmllcyBhIGZpbHRlciB0byBwYXNzIHRo ZSBmaWxlIHRocm91Z2ggYmVmb3JlIHNlbmRpbmcKKyAgICAgICAgICBpdC4gU2VlIHRoZSBbNDkz XXNlY3Rpb24gb24gZmlsZS10cmFuc2ZlciBwaXBlcyBhbmQgZmlsdGVycy4gVGhlCisgICAgICAg ICAgL0ZJTFRFUiBzd2l0Y2ggYXBwbGllcyBvbmx5IHRvIHRoZSBmaWxlLXRyYW5zZmVyIGNvbW1h bmQgaXQgaXMKKyAgICAgICAgICBnaXZlbiB3aXRoOyBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlIGds b2JhbCBTRU5EIEZJTFRFUiBzZXR0aW5nLAorICAgICAgICAgIGlmIGFueS4KKworICAgL0lNQUdF CisgICAgICAgICAgVk1TOiBTZW5kcyBpbiBpbWFnZSBtb2RlLiBOb24tVk1TOiBzYW1lIGFzIC9C SU5BUlkuCisKKyAgIC9MQUJFTEVECisgICAgICAgICAgVk1TIGFuZCBPUy8yIG9ubHk6IFNlbmRz IGluIGxhYmVsZWQgbW9kZS4KKworICAgL0xBUkdFUi1USEFOOm51bWJlcgorICAgICAgICAgIFNw ZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgdGhhdCBhcmUgbG9uZ2VyIHRoYW4gdGhlIGdp dmVuCisgICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIGFyZSB0byBiZSBzZW50LgorCisgICAvTElT VEZJTEU6ZmlsZW5hbWUKKyAgICAgICAgICBTcGVjaWZpZXMgdGhhdCB0aGUgZmlsZXMgdG8gYmUg c2VudCBhcmUgbGlzdGVkIGluIGEgZmlsZSB3aXRoCisgICAgICAgICAgdGhlIGdpdmVuIGZpbGVu YW1lLiBUaGUgZmlsZSBjb250YWlucyBvbmUgZmlsZW5hbWUgcGVyIGxpbmUuCisgICAgICAgICAg VGhlc2UgZmlsZW5hbWVzIGFyZSBub3QgY2hlY2tlZCBpbiBhbnkgd2F5OyBlYWNoIGZpbGVuYW1l IGlzCisgICAgICAgICAgdGFrZW4gYW5kIGRvZXMgbm90IHVzZSBvciBkZXBlbmQgb24gYW55IEtl cm1pdC1zcGVjaWZpYyBzeW50YXguCisgICAgICAgICAgSW4gcGFydGljdWxhciwgYmFja3NsYXNo ZXMgYXJlIG5vdCB0cmVhdGVkIHNwZWNpYWxseSwgbGVhZGluZworICAgICAgICAgIGFuZCB0cmFp bGluZyBzcGFjZXMgYXJlIG5vdCBzdHJpcHBlZCwgZXRjLiBIb3dldmVyLCBpZiBhCisgICAgICAg ICAgZmlsZW5hbWUgY29udGFpbnMgd2lsZGNhcmRzLCB0aGV5IGFyZSBleHBhbmRlZC4gRXhhbXBs ZTogSWYgYQorICAgICAgICAgIGZpbGUgbmFtZWQgZmlsZXMudHh0IGNvbnRhaW5zIHRoZSBmb2xs b3dpbmcgbGluZXM6CisKKyAgYmxhaC50eHQKKyAgb29mYSoKKyAgeC54CisKKyAgICAgICAgICAo YnV0IHdpdGhvdXQgbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXMpLCB0aGVuIHRoZSBDLUtlcm1p dAorICAgICAgICAgIGNvbW1hbmQgInNlbmQgL2xpc3RmaWxlOmZpbGVzLnR4dCIgd2lsbCBzZW5k IHRoZSBmaWxlcyBibGFoLnR4dCwKKyAgICAgICAgICB4LngsIGFuZCBhbGwgZmlsZXMgd2hvc2Ug bmFtZXMgc3RhcnQgd2l0aCAib29mYSIsIGFzc3VtaW5nIHRoZQorICAgICAgICAgIGZpbGVzIGV4 aXN0IGFuZCBhcmUgcmVhZGFibGUuIFRoZSAvTElTVEZJTEUgc3dpdGNoLCBjYW4sIG9mCisgICAg ICAgICAgY291cnNlLCBiZSB1c2VkIHdpdGggb3RoZXIgc3dpdGNoZXMgd2hlbiBpdCBtYWtlcyBz ZW5zZSwgZm9yCisgICAgICAgICAgZXhhbXBsZSwgL0VYQ0VQVCwgL0JJTkFSWSwgL0FGVEVSLCAv U01BTExFUiwgL01PVkUtVE8sIC9ERUxFVEUsCisgICAgICAgICAgL0FTLU5BTUUgd2l0aCBhIHRl bXBsYXRlLCBldGMuCisKKyAgIC9NQUlMOmFkZHJlc3MKKyAgICAgICAgICBTZW5kcyB0aGUgZmls ZSBhcyBlLW1haWwgdG8gdGhlIGdpdmVuIGFkZHJlc3Mgb3IgYWRkcmVzc2VzLgorICAgICAgICAg ICJzZW5kIC9tYWlsOmFkZHJlc3MgZmlsZW5hbWUiIGlzIGVxdWl2YWxlbnQgdG8gIm1haWwgZmls ZW5hbWUKKyAgICAgICAgICBhZGRyZXNzIi4gWW91IGNhbiBpbmNsdWRlIG11bHRpcGxlIGFkZHJl c3NlcyBzZXBhcmF0ZWQgYnkKKyAgICAgICAgICBjb21tYXMuIEV4YW1wbGVzOgorCisgIHNlbmQg L21haWw6a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1IHBhY2tldC5sb2cKKyAgc2VuZCAvbWFp bDpjbWcsZmRjLGpyZCBvb2ZhLnR4dAorCisgICAgICAgICAgQXMgd2l0aCBhbnkgc3dpdGNoIGFy Z3VtZW50LCBpZiB0aGUgYWRkcmVzcyBvciBhZGRyZXNzIGxpc3QKKyAgICAgICAgICBjb250YWlu cyBhbnkgc3BhY2VzLCB5b3UgbXVzdCBlbmNsb3NlIGl0IGluIGJyYWNlcy4gVGhlIGZvcm1hdAor ICAgICAgICAgIG9mIHRoZSBhZGRyZXNzZXMgbXVzdCBhZ3JlZSB3aXRoIHRoYXQgdW5kZXJzdG9v ZCBieSB0aGUKKyAgICAgICAgICBtYWlsLXNlbmRpbmcgcHJvZ3JhbSBvbiB0aGUgcmVjZWl2ZXIn cyBjb21wdXRlci4KKworICAgL01PVkUtVE86ZGlyZWN0b3J5LW5hbWUKKyAgICAgICAgICBTcGVj aWZpZXMgdGhhdCBhZnRlciBlYWNoIChvciB0aGUgb25seSkgc291cmNlIGZpbGUgaXMgc2VudAor ICAgICAgICAgIHN1Y2Nlc3NmdWxseSwgYW5kIE9OTFkgaWYgaXQgaXMgc2VudCBzdWNjZXNzZnVs bHksIGl0IHNob3VsZCBiZQorICAgICAgICAgIG1vdmVkIHRvIHRoZSBuYW1lZCBkaXJlY3Rvcnku IElmIHRoZSBkaXJlY3RvcnkgbmFtZSBjb250YWlucworICAgICAgICAgIHNwYWNlcywgZW5jbG9z ZSBpdCBpbiBicmFjZXMuIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsCisgICAgICAg ICAgaXQgaXMgY3JlYXRlZCBpZiBwb3NzaWJsZTsgaWYgaXQgY2FuJ3QgYmUgY3JlYXRlZCwgdGhl IGNvbW1hbmQKKyAgICAgICAgICBmYWlscyBhbmQgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVk LiBFeGFtcGxlOgorCisgIHNlbmQgL3RleHQgL21vdmUtdG86L3VzZXJzL29sZ2EvYmFja3VwLyAq LnR4dAorCisgICAvTk9ULUFGVEVSOmRhdGUtdGltZQorICAgICAgICAgIFNwZWNpZmllcyB0aGF0 IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbgorICAgICAg ICAgIGRhdGUgYW5kIHRpbWUgYXJlIHRvIGJlIHNlbnQuCisKKyAgIC9OT1QtQkVGT1JFOmRhdGUt dGltZQorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQg YXQgb3IgYWZ0ZXIgdGhlIGdpdmVuCisgICAgICAgICAgZGF0ZSBhbmQgdGltZSBhcmUgdG8gYmUg c2VudC4KKworICAgL1BBVEhOQU1FUzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZFfQorICAgICAgICAg IFVzZSB0aGlzIHN3aXRjaCB0byBvdmVycmlkZSB0aGUgY3VycmVudCBnbG9iYWwgU0VUIFNFTkQK KyAgICAgICAgICBQQVRITkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5LiAvUEFU SE5BTUVTOkFCU09MVVRFIG9yCisgICAgICAgICAgUkVMQVRJVkUgYWxzbyBzZXRzIC9GSUxFTkFN RVM6TElURVJBTCAoYWxzbyBmb3IgdGhpcyB0cmFuc2ZlcgorICAgICAgICAgIG9ubHkpIHNpbmNl IHBhdGhuYW1lcyBhcmUgbm90IHNlbnQgb3RoZXJ3aXNlLgorCisgICAvUkVOQU1FLVRPOnRleHQK KyAgICAgICAgICBTcGVjaWZpZXMgdGhhdCBhZnRlciB0aGUgKG9yIGVhY2gpIHNvdXJjZSBmaWxl IGlzIHNlbnQKKyAgICAgICAgICBzdWNjZXNzZnVsbHksIGFuZCBPTkxZIGlmIGl0IGlzIHNlbnQg c3VjY2Vzc2Z1bGx5LCBpdCBzaG91bGQgYmUKKyAgICAgICAgICByZW5hbWVkIHRvIHRoZSBuYW1l IGdpdmVuLiBJZiB0aGUgbmFtZSBjb250YWlucyBzcGFjZXMsIGVuY2xvc2UKKyAgICAgICAgICBp dCBpbiBicmFjZXMuIElmIGEgZmlsZSBncm91cCBpcyBiZWluZyBzZW50LCB0aGVuIHRoZSAidGV4 dCIKKyAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2YXJpYWJsZSByZWZlcmVuY2Ugc3VjaCBhcyBc dihmaWxlbmFtZSkgKHNlZQorICAgICAgICAgIFs0OTRdU2VjdGlvbiA0LjEpLiBFeGFtcGxlOgor CisgIHNlbmQgL3JlbmFtZS10bzpva19cdihmaWxlbmFtZSkgKi4qCisKKyAgICAgICAgICBUaGlz IHNlbmRzIGVhY2ggZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGlmIGl0IHdhcyBz ZW50CisgICAgICAgICAgc3VjY2Vzc2Z1bGx5LCBjaGFuZ2VzIGl0cyBuYW1lIHRvIGJlZ2luIHdp dGggIm9rXyIuCisKKyAgIC9TTUFMTEVSLVRIQU46bnVtYmVyCisgICAgICAgICAgU3BlY2lmaWVz IHRoYXQgb25seSB0aG9zZSBmaWxlcyB0aGF0IGFyZSBzbWFsbGVyIHRoYW4gdGhlIGdpdmVuCisg ICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIGFyZSB0byBiZSBzZW50LgorCisgICAvU1VCSkVDVDp0 ZXh0CisgICAgICAgICAgU3ViamVjdCBmb3IgZW1haWwuIEFjdHVhbGx5LCB0aGlzIGlzIGp1c3Qg YSBzeW5vbnltIGZvcgorICAgICAgICAgIC9BUy1OQU1FLiBJZiB0aGUgdGV4dCBpbmNsdWRlcyBz cGFjZXMsIHlvdSBtdXN0IGVuY2xvc2UgaXQgaW4KKyAgICAgICAgICBicmFjZXMuIElmIHlvdSBk b24ndCBzcGVjaWZ5IGEgc3ViamVjdCAob3IgYXMtbmFtZSksIHRoZSBuYW1lIG9mCisgICAgICAg ICAgdGhlIGZpbGUgaXMgdXNlZCBhcyB0aGUgc3ViamVjdC4gRXhhbXBsZToKKworICBzZW5kIC9t YWlsOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdSAvc3Viajp7QXMgcmVxdWVzdGVkfSBwYWNr ZXQubG9nCisKKyAgIC9QUklOVDpvcHRpb25zCisgICAgICAgICAgU2VuZHMgdGhlIGZpbGUgdG8g YmUgcHJpbnRlZCwgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIG9wdGlvbnMgZm9yCisgICAgICAgICAg dGhlIHByaW50ZXIuIEVxdWl2YWxlbnQgdG8gUkVNT1RFIFBSSU5UIGZpbGVuYW1lIG9wdGlvbnMu CisgICAgICAgICAgRXhhbXBsZXM6CisKKyAgc2VuZCAvcHJpbnQgb29mYS50eHQgICAgICAgICAg ICAgIDsgTm8gb3B0aW9ucy4KKyAgc2VuZCAvcHJpbnQ6L2NvcGllcz0zIG9vZmEudHh0ICAgIDsg Ii9jb3BpZXM9MyIgaXMgYSBWTVMgUFJJTlQgc3dpdGNoLgorICBzZW5kIC9wcmludDotIzMgb29m YS50eHQgICAgICAgICAgOyAiLSMzIiBpcyBhIFVOSVggbHByIHN3aXRjaC4KKworICAgL1BST1RP Q09MOm5hbWUKKyAgICAgICAgICBVc2VzIHRoZSBnaXZlbiBwcm90b2NvbCB0byBzZW5kIHRoZSBm aWxlIChLZXJtaXQsIFptb2RlbSwgZXRjKQorICAgICAgICAgIGZvciB0aGlzIHRyYW5zZmVyIHdp dGhvdXQgY2hhbmdpbmcgZ2xvYmFsIHByb3RvY29sLiBPbmx5CisgICAgICAgICAgYXZhaWxhYmxl IGluIEtlcm1pdCA5NSwgVU5JWCwgYW5kIE9TLTkuIEV4YW1wbGU6CisKKyAgc2V0IHByb3RvY29s IGtlcm1pdCAgICAgICAgICAgICAgIDsgU2V0IGdsb2JhbCBwcm90b2NvbAorICBzZW5kIC9wcm90 bzp6bW9kZW0gL2JpbiBvb2ZhLnppcCAgOyBTZW5kIGp1c3QgdGhpcyBmaWxlIHdpdGggWm1vZGVt CisgIHNlbmQgb29mYS50eHQgICAgICAgICAgICAgICAgICAgICA7IFRoaXMgZmlsZSBpcyBzZW50 IHdpdGggS2VybWl0CisKKyAgIC9RVUlFVAorICAgICAgICAgIFdoZW4gc2VuZGluZyBpbiBsb2Nh bCBtb2RlLCB0aGlzIHN1cHByZXNzZXMgdGhlIGZpbGUtdHJhbnNmZXIKKyAgICAgICAgICBkaXNw bGF5LgorCisgICAvUkVDT1ZFUgorICAgICAgICAgIFVzZWQgdG8gcmVjb3ZlciBmcm9tIGEgcHJl dmlvdXNseSBpbnRlcnJ1cHRlZCB0cmFuc2ZlcjsgU0VORAorICAgICAgICAgIC9SRUNPVkVSIGlz IGVxdWl2YWxlbnQgdG8gUkVTRU5ELiBSZWNvdmVyeSBvbmx5IHdvcmtzIGluIGJpbmFyeQorICAg ICAgICAgIG1vZGU7IFNFTkQgL1JFQ09WRVIgYW5kIFJFU0VORCBpbmNsdWRlIGFuIGltcGxpZWQg L0JJTkFSWQorICAgICAgICAgIHN3aXRjaC4gRXZlbiB0aGVuLCByZWNvdmVyeSB3aWxsIHN1Y2Nl c3NmdWwgb25seSBpZiAoYSkgdGhlCisgICAgICAgICAgb3JpZ2luYWwgKGludGVycnVwdGVkKSB0 cmFuc2ZlciB3YXMgYWxzbyBpbiBiaW5hcnkgbW9kZSwgb3IgKGIpCisgICAgICAgICAgaWYgaXQg d2FzIGluIHRleHQgbW9kZSwgdGhlIHR3byBLZXJtaXQgcHJvZ3JhbXMgcnVuIG9uIHBsYXRmb3Jt cworICAgICAgICAgIHdoZXJlIHRleHQtbW9kZSB0cmFuc2ZlcnMgYXJlIG5vdCBsZW5ndGgtY2hh bmdpbmcuCisKKyAgIC9TVEFSVElORzpudW1iZXIKKyAgICAgICAgICBTdGFydHMgc2VuZGluZyB0 aGUgZmlsZSBmcm9tIHRoZSBnaXZlbiBieXRlIHBvc2l0aW9uLiBTRU5ECisgICAgICAgICAgL1NU QVJUSU5HOm4gZmlsZW5hbWUgaXMgZXF1aXZhbGVudCB0byBQU0VORCBmaWxlbmFtZSBuLgorCisg ICAvVEVYVAorICAgICAgICAgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIgaW4gdGV4dCBtb2RlIHdp dGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwKKyAgICAgICAgICB0cmFuc2ZlciBtb2RlLCBvdmVy cmlkaW5nIG5vdCBvbmx5IHRoZSBGSUxFIFRZUEUgYW5kIFRSQU5TRkVSCisgICAgICAgICAgTU9E RSBzZXR0aW5ncywgYnV0IGFsc28gdGhlIEZJTEUgUEFUVEVSTiBzZXR0aW5nLCBmb3IgdGhpcyBT RU5ECisgICAgICAgICAgY29tbWFuZCBvbmx5LiBJbiBvdGhlciB3b3JkcywgU0VORCAvVEVYVCBy ZWFsbHkgc2VuZCB0aGUgZmlsZSBpbgorICAgICAgICAgIHRleHQgbW9kZSwgcmVnYXJkbGVzcyBv ZiBhbnkgb3RoZXIgc2V0dGluZ3Mgb3IgbmVnb3RpYXRpb25zLgorCisgICBBYm91dCBtYWlsLi4u IFJlZmVyIHRvIFs0OTVdU2VjdGlvbiA0LjcuMS4gVGhlIHNhbWUgcnVsZXMgYXBwbHkgYXMgZm9y CisgICBmaWxlIHRyYW5zZmVyLiBJZiB5b3UgYXJlIG1haWxpbmcgbXVsdGlwbGUgZmlsZXMsIHlv dSBjYW4ndCB1c2UgYW4KKyAgIGFzLW5hbWUgKGluIHRoaXMgY2FzZSwgYSBzdWJqZWN0KSB1bmxl c3MgaXQgY29udGFpbnMgcmVwbGFjZW1lbnQKKyAgIHZhcmlhYmxlcyBsaWtlIFx2KGZpbGVudW0p LiBGb3IgZXhhbXBsZSwgaWYgeW91OgorCisgIHNlbmQgL21haWw6c29tZWJvZHlAeHl6LmNvbSAq LnR4dAorCisgICBUaGVuIGVhY2ggZmlsZSB3aWxsIGFycml2ZSBhcyBhIHNlcGFyYXRlIGVtYWls IG1lc3NhZ2Ugd2l0aCBpdHMgbmFtZSBhcworICAgdGhlIHN1YmplY3QuIEJ1dCBpZiB5b3U6CisK KyAgc2VuZCAvbWFpbDpzb21lYm9keUB4eXouY29tIC9zdWJqZWN0OntIZXJlIGlzIGEgZmlsZX0g Ki50eHQKKworICAgVGhlbiBlYWNoIGZpbGUgbWVzc2FnZSB3aWxsIGhhdmUgdGhlIHNhbWUgc3Vi amVjdCwgd2hpY2ggaXMgcHJvYmFibHkKKyAgIG5vdCB3aGF0IHlvdSB3YW50LiBZb3UgY2FuIGdl dCBhcm91bmQgdGhpcyB3aXRoIGNvbnN0cnVjdGlvbnMgbGlrZToKKworICBzZW5kIC9tYWlsOnNv bWVib2R5QHh5ei5jb20gL3N1YmplY3Q6e0hlcmUgaXMgXHYoZmlsZW5hbWUpfSAqLnR4dAorCisg ICB3aGljaCBlbWJlZCB0aGUgZmlsZW5hbWUgaW4gdGhlIHN1YmplY3QuCisKKyAgIFRoZSBNT1ZF LCBDU0VORCwgTUFJTCwgYW5kIFJFU0VORCBjb21tYW5kcyBub3cgYWxzbyBhY2NlcHQgdGhlIHNh bWUKKyAgIHN3aXRjaGVzLiBBbmQgdGhlIHN3aXRjaGVzIGFyZSBhbHNvIG9wZXJhdGl2ZSB3aGVu IHNlbmRpbmcgZnJvbSBhCisgICBTRU5ELUxJU1QgKHNlZSBbNDk2XVVzaW5nIEMtS2VybWl0LCAy bmQgRWQsIHBwLjE5MS0xOTIpLCBzbywgZm9yCisgICBleGFtcGxlLCBpdCBpcyBub3cgcG9zc2li bGUgdG8gU0VORCAvUFJJTlQgb3IgU0VORCAvTUFJTCBmcm9tIGEKKyAgIFNFTkQtTElTVC4KKwor ICAgVGhlIE1TRU5EIGFuZCBNTU9WRSBjb21tYW5kcyBhbHNvIHRha2Ugc3dpdGNoZXMsIGJ1dCBu b3QgYWxsIG9mIHRoZW0uCisgICBXaXRoIHRoZXNlIGNvbW1hbmRzLCB3aGljaCB0YWtlIGFuIGFy Yml0cmFyeSBsaXN0IG9mIGZpbGVzcGVjcywgeW91IGNhbgorICAgdXNlIC9CSU5BUlksIC9ERUxF VEUsIC9NQUlMLCAvUFJJTlQsIC9QUk9UT0NPTCwgL1FVSUVULCAvUkVDT1ZFUiwgYW5kCisgICAv VEVYVCAoYW5kIC9JTUFHRSBvciAvTEFCRUxFRCwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSku IE1NT1ZFIGlzCisgICBlcXVpdmFsZW50IHRvIE1TRU5EIC9ERUxFVEUuIChJZiB5b3Ugd2FudCB0 byBzZW5kIGEgZ3JvdXAgb2YgZmlsZXMsIGJ1dAorICAgaW4gbWl4ZWQgdHJhbnNmZXIgbW9kZXMg d2l0aCBwZXItZmlsZSBhcy1uYW1lcywgdXNlIEFERCBTRU5ELUxJU1QgYW5kCisgICB0aGVuIFNF TkQuKQorCisgICBUaGUgTVNFTkQvTU1PVkUgc3dpdGNoZXMgY29tZSBiZWZvcmUgdGhlIGZpbGVu YW1lcywgYW5kIGFwcGx5IHRvIGFsbCBvZgorICAgdGhlbToKKworICBtc2VuZCAvcHJpbnQgL3Rl eHQgKi5sb2cgb29mYS50eHQgL2V0Yy9tb3RkCisKKyAgIElmIHlvdSB0eXBlIGFueSBvZiB0aGVz ZSBjb21tYW5kcyAoU0VORCwgQ1NFTkQsIE1TRU5ELCBldGMpIGZvbGxvd2VkIGJ5CisgICBhIHF1 ZXN0aW9uIG1hcmsgKD8pLCB5b3Ugd2lsbCBzZWUgYSBsaXN0IG9mIHRoZSBzd2l0Y2hlcyB5b3Ug Y2FuIHVzZS4KKyAgIElmIHlvdSB3YW50IHRvIHNlZSBhIGxpc3Qgb2YgZmlsZW5hbWVzLCB5b3Un bGwgbmVlZCB0byB0eXBlIHNvbWV0aGluZworICAgbGlrZSAic2VuZCAuLz8iIChVTklYLCBPUy8y LCBXaW5kb3dzLCBldGMpLCBvciAic2VuZCBbXT8iIChWTVMpLCBldGMuCisgICBPZiBjb3Vyc2Us IHlvdSBjYW4gYWxzbyB0eXBlIHBpZWNlcyBvZiBhIGZpbGVuYW1lIChhbnl0aGluZyB0aGF0IGRv ZXMKKyAgIG5vdCBzdGFydCB3aXRoICIvIikgYW5kIHRoZW4gIj8iIHRvIGdldCBhIGxpc3Qgb2Yg ZmlsZW5hbWVzIHRoYXQgc3RhcnQKKyAgIHRoYXQgd2F5OyBlLmcuICJzZW5kIHguPyIgc3RpbGwg d29ya3MgYXMgYmVmb3JlLgorCisgICBJbiBVTklYLCB3aGVyZSAiLyIgaXMgYWxzbyB0aGUgZGly ZWN0b3J5IHNlcGFyYXRvciwgdGhlcmUgaXMgdXN1YWxseSBubworICAgYW1iaWd1aXR5IGJldHdl ZW4gYSBmdWxseS1zcGVjaWZpZWQgcGF0aG5hbWUgYW5kIGEgc3dpdGNoLCBleGNlcHQgd2hlbgor ICAgYSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhIHN3 aXRjaCAoYXMgbm90ZWQgaW4KKyAgIFs0OTddU2VjdGlvbiAxLjUpOgorCisgIHNlbmQgL2V0Yy9t b3RkICAgICAgICAgICAgICAgICAgICAgICAgOyBXb3JrcyBhcyBleHBlY3RlZAorICBzZW5kIC9j b21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgIDsgPz8/CisKKyAgIFRoZSBzZWNvbmQgZXhh bXBsZSBpbnRlcnByZXRzICIvY29tbWFuZCIgYXMgYSBzd2l0Y2gsIG5vdCBhIGZpbGVuYW1lLgor ICAgVG8gc2VuZCBhIGZpbGUgYWN0dWFsbHkgY2FsbGVkICJjb21tYW5kIiBpbiB0aGUgcm9vdCBk aXJlY3RvcnksIHVzZToKKworICBzZW5kIHsvY29tbWFuZH0KKworICAgb3Igb3RoZXIgc3lzdGVt LWRlcGVuZGVudCBmb3JtcyBzdWNoIGFzIC8vY29tbWFuZCwgLy4vY29tbWFuZCwKKyAgIGM6L2Nv bW1hbmQsIGV0Yywgb3IgY2QgdG8gLyBhbmQgdGhlbiAic2VuZCBjb21tYW5kIi4KKworNC43LjIu IEdFVCBDb21tYW5kIFN3aXRjaGVzCisKKyAgIFdpdGhvdXQgc3dpdGNoZXMsIHRoZSBHRVQgY29t bWFuZCBzdGlsbCB3b3JrcyBhYm91dCB0aGUgc2FtZSBhcyBiZWZvcmU6CisKKyAgZ2V0IG9vZmEu dHh0ICAgICAgICAgICAgICAgICAgICAgICAgICA7IEdFVCBhIHNpbmdsZSBmaWxlCisgIGdldCBv b2ZhLiogICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBHRVQgbXVsdGlwbGUgZmlsZXMKKwor ICAgSG93ZXZlciwgdGhlIG1lY2hhbmlzbSBmb3IgaW5jbHVkaW5nIGFuICJhcy1uYW1lIiBoYXMg Y2hhbmdlZC4KKyAgIFByZXZpb3VzbHksIGluIG9yZGVyIHRvIGluY2x1ZGUgYW4gYXMtbmFtZSwg eW91IHdlcmUgcmVxdWlyZWQgdG8gdXNlCisgICB0aGUgIm11bHRpbGluZSIgZm9ybSBvZiBHRVQ6 CisKKyAgZ2V0CisgIHJlbW90ZS1maWxlc3BlYworICBsb2NhbC1uYW1lCisKKyAgIFRoaXMgd2Fz IGJlY2F1c2UgdGhlIHJlbW90ZSBmaWxlc3BlYyBtaWdodCBjb250YWluIHNwYWNlcywgYW5kIHNv IHRoZXJlCisgICB3b3VsZCBiZSBubyBnb29kIHdheSBvZiB0ZWxsaW5nIHdoZXJlIGl0IGVuZGVk IGFuZCB3aGVyZSB0aGUgbG9jYWwgbmFtZQorICAgYmVnYW4sIGUuZzoKKworICBnZXQgcHJvZmls ZSBleGVjIGEgZm9vCisKKyAgIEJ1dCBub3cgc2luY2Ugd2UgY2FuIHVzZSB7YnJhY2VzfSBmb3Ig Z3JvdXBpbmcsIHdlIGRvbid0IG5lZWQgdGhlCisgICBtdWx0aWxpbmUgR0VUIGZvcm0gYW55IG1v cmUsIGFuZCBpbiBmYWN0LCBzdXBwb3J0IGZvciBpdCBoYXMgYmVlbgorICAgcmVtb3ZlZC4gSWYg eW91IGdpdmUgYSBHRVQgY29tbWFuZCBieSBpdHNlbGYgb24gYSBsaW5lLCBpdCBmYWlscyBhbmQg YW4KKyAgIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZC4gVGhlIG5ldyBmb3JtIGlzOgorCisgICBH RVQgWyBzd2l0Y2hlcy4uLiBdIHJlbW90ZS1uYW1lIFsgbG9jYWwtbmFtZSBdCisgICAgICAgICAg QXNrIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUgZmlsZSB3aG9zZSBuYW1lIGlzIHJlbW90ZS1uYW1l LiBJZgorICAgICAgICAgIHRoZSBvcHRpb25hbCBsb2NhbC1uYW1lIGlzIGdpdmVuLCBzdG9yZSBp dCBsb2NhbGx5IHVuZGVyIHRoaXMKKyAgICAgICAgICBuYW1lLiBJZiB0aGUgcmVtb3RlLW5hbWUg b3IgbG9jYWwtbmFtZSBjb250YWlucyBzcGFjZXMsIHRoZXkKKyAgICAgICAgICBtdXN0IGJlIGVu Y2xvc2VkIGluIGJyYWNlczoKKworICBnZXQge3Byb2ZpbGUgZXhlYyBhfSBmb28KKyAgZ2V0IG9v ZmEudHh0IHt+L015IEZpbGVzL09vZmEgdGV4dH0KKworICAgSWYgeW91IHdhbnQgdG8gZ2l2ZSBh IGxpc3Qgb2YgcmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbnMsIHVzZSB0aGUgTUdFVAorICAgY29t bWFuZDoKKworICAgTUdFVCBbIHN3aXRjaGVzLi4uIF0gcmVtb3RlLW5hbWUgWyByZW1vdGUtbmFt ZSBbIHJlbW90ZS1uYW1lIC4uLiBdIF0KKyAgICAgICAgICBBc2sgdGhlIHNlcnZlciB0byBzZW5k IHRoZSBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgZ2l2ZW4uCisKKyAgIE5vdyB5b3UgY2FuIGFsc28g aW5jbHVkZSBtb2RpZmllciBzd2l0Y2hlcyBiZXR3ZWVuIEdFVCBvciBNR0VUIGFuZCB0aGUKKyAg IHJlbW90ZS1uYW1lOyBtb3N0IG9mIHRoZSBzYW1lIHN3aXRjaGVzIGFzIFNFTkQ6CisKKyAgIC9B Uy1OQU1FOnRleHQKKyAgICAgICAgICBTcGVjaWZpZXMgInRleHQiIGFzIHRoZSBuYW1lIHRvIHN0 b3JlIHRoZSBpbmNvbWluZyBmaWxlIHVuZGVyLgorICAgICAgICAgIChUaGlzIHN3aXRjaCBpcyBu b3QgYXZhaWxhYmxlIGZvciBNR0VULikgWW91IGNhbiBhbHNvIHN0aWxsCisgICAgICAgICAgc3Bl Y2lmeSB0aGUgYXMtbmFtZSBhcyB0aGUgc2Vjb25kIGZpbGVuYW1lIG9uIHRoZSBHRVQgY29tbWFu ZAorICAgICAgICAgIGxpbmUuIFRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmRzIGFyZSBlcXVpdmFs ZW50OgorCisgIGdldCBvb2ZhLnR4dCBvb2ZhLm5ldworICBnZXQgL2FzOm9vZmEubmV3IG9vZmEu dHh0CisKKyAgIC9CSU5BUlkKKyAgICAgICAgICBUZWxscyB0aGUgc2VydmVyIHRvIHNlbmQgdGhl IGdpdmVuIGZpbGUocykgaW4gYmluYXJ5IG1vZGUKKyAgICAgICAgICB3aXRob3V0IGFmZmVjdGlu ZyB0aGUgZ2xvYmFsIHRyYW5zZmVyIG1vZGUuIEV4YW1wbGU6CisKKyAgc2V0IGZpbGUgdHlwZSB0 ZXh0ICAgICAgOyBTZXQgZ2xvYmFsIHRyYW5zZmVyIG1vZGUgdG8gdGV4dAorICBnZXQgL2JpbmFy eSBvb2ZhLnppcCAgICA7IGdldCBhIGZpbGUgaW4gYmluYXJ5IG1vZGUKKyAgZ2V0IG9vZmEudHh0 ICAgICAgICAgICAgOyBUaGlzIG9uZSBpcyB0cmFuc2ZlcnJlZCBpbiB0ZXh0IG1vZGUKKworICAg ICAgICAgIE9yLCBwZXJoYXBzIG1vcmUgdG8gdGhlIHBvaW50OgorCisgIGdldCAvYmluYXJ5IGZv by50eHQgICAgIDsgd2hlcmUgIioudHh0IiBpcyBhIHRleHQtcGF0dGVybgorCisgICAgICAgICAg VGhpcyBoYXMgdGhlIGV4cGVjdGVkIGVmZmVjdCBvbmx5IGlmIHRoZSBzZXJ2ZXIgaXMgQy1LZXJt aXQgNy4wCisgICAgICAgICAgb3IgbGF0ZXIgb3IgSzk1IDEuMS4xOSBvciBsYXRlci4KKworICAg L0NPTU1BTkQKKyAgICAgICAgICBHRVQgL0NPTU1BTkQgaXMgZXF1aXZhbGVudCB0byBDR0VUIChb NDk4XVNlY3Rpb24gNC4yLjIpIC0tIGl0CisgICAgICAgICAgc2F5cyB0byByZWNlaXZlIHRoZSBm aWxlIGludG8gdGhlIHN0YW5kYXJkIGlucHV0IG9mIGEgY29tbWFuZCwKKyAgICAgICAgICByYXRo ZXIgdGhhbiBzYXZpbmcgaXQgb24gZGlzay4gVGhlIC9BUy1OQU1FIG9yIHRoZSBzZWNvbmQKKyAg ICAgICAgICAiZmlsZW5hbWUiIG9uIHRoZSBHRVQgY29tbWFuZCBsaW5lIGlzIGludGVycHJldGVk IGFzIHRoZSBuYW1lIG9mCisgICAgICAgICAgYSBjb21tYW5kLiBFeGFtcGxlczoKKworICBnZXQg L2NvbW1hbmQgc3VuZGF5LnR4dCB7Z3JlcCBTdW5kYXkgb29mYS50eHR9CisgIGdldCAvY29tbWFu ZCAvYXMtbmFtZTp7Z3JlcCBTdW5kYXkgb29mYS50eHR9IHN1bmRheS50eHQKKyAgZ2V0IC9iaW4g L2NvbW1hbmQgeyFndW56aXAgLWMgfCB0YXIgeGYgLX0ge3RhciBjZiAtIC4gfCBnemlwIC1jfQor CisgICAvREVMRVRFCisgICAgICAgICAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBkZWxldGUg dGhlIGZpbGUgKG9yIGVhY2ggZmlsZSBpbiB0aGUKKyAgICAgICAgICBncm91cCkgYWZ0ZXIgaXQg aGFzIGJlZW4gdHJhbnNmZXJyZWQgc3VjY2Vzc2Z1bGx5IChidXQgbm90IHRvCisgICAgICAgICAg ZGVsZXRlIGl0IGlmIGl0IHdhcyBub3Qgc2VudCBzdWNjZXNzZnVsbHkpLiBHRVQgL0RFTEVURSBp cworICAgICAgICAgIGVxdWl2YWxlbnQgdG8gUkVUUklFVkUuIEV4YW1wbGU6CisKKyAgZ2V0IC9k ZWxldGUgKi5sb2cKKworICAgL0VYQ0VQVDpwYXR0ZXJuCisgICAgICAgICAgU3BlY2lmaWVzIHRo YXQgYW55IGZpbGVzIHdob3NlIG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuLCB3aGljaAorICAgICAg ICAgIGNhbiBiZSBhIHJlZ3VsYXIgZmlsZW5hbWUsIG9yIG1heSBjb250YWluICIqIiBhbmQvb3Ig Ij8iCisgICAgICAgICAgbWV0YWNoYXJhY3RlcnMsIGFyZSB0byBiZSByZWZ1c2VkIHVwb24gYXJy aXZhbC4gVG8gc3BlY2lmeQorICAgICAgICAgIG11bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4KSwg dXNlIG91dGVyIGJyYWNlcyBhcm91bmQgdGhlIGdyb3VwLAorICAgICAgICAgIGFuZCBpbm5lciBi cmFjZXMgYXJvdW5kIGVhY2ggcGF0dGVybjoKKworICAvRVhDRVBUOnt7cGF0dGVybjF9e3BhdHRl cm4yfS4uLn0KKworICAgICAgICAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgU0VORCAvRVhDRVBU IGluIFs0OTldU2VjdGlvbiA0LjcuMSBmb3IKKyAgICAgICAgICBleGFtcGxlcywgZXRjLiBSZWZ1 c2FsIGlzIGFjY29tcGxpc2hlZCB1c2luZyB0aGUgQXR0cmlidXRlCisgICAgICAgICAgUmVqZWN0 aW9uIG1lY2hhbmlzbSAocmVhc29uICJuYW1lIiksIHdoaWNoIHdvcmtzIG9ubHkgd2hlbgorICAg ICAgICAgIEF0dHJpYnV0ZSBwYWNrZXRzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgbmVnb3RpYXRl ZC4KKworICAgL0ZJTEVOQU1FUzp7Q09OVkVSVEVELExJVEVSQUx9CisgICAgICAgICAgVXNlIHRo aXMgc3dpdGNoIHRvIG92ZXJyaWRlIHRoZSBjdXJyZW50IGdsb2JhbCBTRVQgRklMRSBOQU1FUwor ICAgICAgICAgIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIgb25seS4KKworICAgL0ZJTFRFUjpj b21tYW5kCisgICAgICAgICAgVGhpcyBzcGVjaWZpZXMgYSBmaWx0ZXIgdG8gcGFzcyB0aGUgaW5j b21pbmcgZmlsZSB0aHJvdWdoIGJlZm9yZQorICAgICAgICAgIHdyaXRpbmcgdG8gZGlzay4gU2Vl IHRoZSBbNTAwXXNlY3Rpb24gb24gZmlsZS10cmFuc2ZlciBwaXBlcyBhbmQKKyAgICAgICAgICBm aWx0ZXJzLiBUaGUgL0ZJTFRFUiBzd2l0Y2ggYXBwbGllcyBvbmx5IHRvIHRoZSBmaWxlLXRyYW5z ZmVyCisgICAgICAgICAgY29tbWFuZCBpdCBpcyBnaXZlbiB3aXRoOyBpdCBkb2VzIG5vdCBhZmZl Y3QgdGhlIGdsb2JhbCBSRUNFSVZFCisgICAgICAgICAgRklMVEVSIHNldHRpbmcsIGlmIGFueS4K KworICAgL0lNQUdFCisgICAgICAgICAgVk1TOiBUcmFuc2ZlciBpbiBpbWFnZSBtb2RlLiBOb24t Vk1TOiBzYW1lIGFzIC9CSU5BUlkuCisKKyAgIC9MQUJFTEVECisgICAgICAgICAgVk1TIGFuZCBP Uy8yIG9ubHk6IFNwZWNpZmllcyBsYWJlbGVkIHRyYW5zZmVyIG1vZGUuCisKKyAgIC9NT1ZFLVRP OmRpcmVjdG9yeQorICAgICAgICAgIFRoaXMgdGVsbHMgQy1LZXJtaXQgdG8gbW92ZSBlYWNoIGZp bGUgdGhhdCBpcyBzdWNjZXNzZnVsbHkKKyAgICAgICAgICByZWNlaXZlZCB0byB0aGUgZ2l2ZW4g ZGlyZWN0b3J5LiBGaWxlcyB0aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgcmVj ZWl2ZWQgYXJlIG5vdCBtb3ZlZC4gQnkgZGVmYXVsdCwgZmlsZXMgYXJlIG5vdCBtb3ZlZC4KKwor ICAgL1BBVEhOQU1FUzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZFLEFVVE99CisgICAgICAgICAgVXNl IHRoaXMgc3dpdGNoIHRvIG92ZXJyaWRlIHRoZSBjdXJyZW50IGdsb2JhbCBTRVQgUkVDRUlWRQor ICAgICAgICAgIFBBVEhOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVyIG9ubHkuIC9QQVRI TkFNRVM6QUJTT0xVVEUgb3IKKyAgICAgICAgICBSRUxBVElWRSBhbHNvIHNldHMgL0ZJTEVOQU1F UzpMSVRFUkFMIChhbHNvIGZvciB0aGlzIHRyYW5zZmVyCisgICAgICAgICAgb25seSkgc2luY2Ug aW5jb21pbmcgcGF0aG5hbWVzIHdvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIHBhdGhuYW1lcworICAg ICAgICAgIG90aGVyd2lzZS4gU2VlIFs1MDFdU2VjdGlvbiA0LjEwLgorCisgICAvUVVJRVQKKyAg ICAgICAgICBXaGVuIHNlbmRpbmcgaW4gbG9jYWwgbW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBm aWxlLXRyYW5zZmVyCisgICAgICAgICAgZGlzcGxheS4KKworICAgL1JFQ09WRVIKKyAgICAgICAg ICBVc2VkIHRvIHJlY292ZXIgZnJvbSBhIHByZXZpb3VzbHkgaW50ZXJydXB0ZWQgdHJhbnNmZXI7 IEdFVAorICAgICAgICAgIC9SRUNPVkVSIGlzIGVxdWl2YWxlbnQgdG8gUkVHRVQuIFJlY292ZXJ5 IG9ubHkgd29ya3MgaW4gYmluYXJ5CisgICAgICAgICAgbW9kZTsgU0VORCAvUkVDT1ZFUiBhbmQg UkVTRU5EIGluY2x1ZGUgYW4gaW1wbGllZCAvQklOQVJZCisgICAgICAgICAgc3dpdGNoLiBFdmVu IHRoZW4sIHJlY292ZXJ5IHdpbGwgc3VjY2Vzc2Z1bCBvbmx5IGlmIChhKSB0aGUKKyAgICAgICAg ICBvcmlnaW5hbCAoaW50ZXJydXB0ZWQpIHRyYW5zZmVyIHdhcyBhbHNvIGluIGJpbmFyeSBtb2Rl LCBvciAoYikKKyAgICAgICAgICBpZiBpdCB3YXMgaW4gdGV4dCBtb2RlLCB0aGUgdHdvIEtlcm1p dCBwcm9ncmFtcyBydW4gb24gcGxhdGZvcm1zCisgICAgICAgICAgd2hlcmUgdGV4dC1tb2RlIHRy YW5zZmVycyBhcmUgbm90IGxlbmd0aC1jaGFuZ2luZy4KKworICAgL1JFQ1VSU0lWRQorICAgICAg ICAgIFRlbGxzIHRoZSBzZXJ2ZXIgdGhhdCB0aGUgR0VUIGZpbGUgc3BlY2lmaWNhdGlvbiBhcHBs aWVzCisgICAgICAgICAgcmVjdXJzaXZlbHkuIFRoaXMgc3dpdGNoIGFsc28gYXV0b21hdGljYWxs eSBzZXRzCisgICAgICAgICAgL1BBVEhOQU1FUzpSRUxBVElWRSBpbiBib3RoIHRoZSBzZXJ2ZXIg QU5EIHRoZSBjbGllbnQuIFdoZW4gdXNlZAorICAgICAgICAgIGluIGNvbmp1bmN0aW9uIHdpdGgg L0RFTEVURSwgdGhpcyAibW92ZXMiIGEgZGlyZWN0b3J5IHRyZWUgZnJvbQorICAgICAgICAgIHRo ZSBzZXJ2ZXIncyBjb21wdXRlciB0byB0aGUgY2xpZW50J3MgY29tcHV0ZXIgKGV4Y2VwdCB0aGF0 IG9ubHkKKyAgICAgICAgICByZWd1bGFyIGZpbGVzIGFyZSBkZWxldGVkIGZyb20gdGhlIHNlcnZl cidzIGNvbXB1dGVyLCBub3QKKyAgICAgICAgICBkaXJlY3RvcmllczsgdGh1cyB0aGUgb3JpZ2lu YWwgZGlyZWN0b3JpZXMgd2lsbCBiZSBsZWZ0LCBidXQKKyAgICAgICAgICB3aWxsIGNvbnRhaW4g bm8gZmlsZXMpLiBOb3RlIHRoYXQgYWxsIHNlcnZlcnMgdGhhdCBzdXBwb3J0CisgICAgICAgICAg L1JFQ1VSU0lWRSBkbyBub3QgbmVjZXNzYXJpbHkgZG8gc28gaW4gY29tYmluYXRpb24gd2l0aCBv dGhlcgorICAgICAgICAgIHN3aXRjaGVzLCBzdWNoIGFzIC9SRUNPVkVSLiAoU2VydmVycyB0aGF0 IGRvIGluY2x1ZGUgQy1LZXJtaXQKKyAgICAgICAgICA3LjAgYW5kIGxhdGVyLCBLOTUgMS4xLjE5 IGFuZCBsYXRlci4pCisKKyAgIC9SRU5BTUUtVE86c3RyaW5nCisgICAgICAgICAgVGhpcyB0ZWxs cyBDLUtlcm1pdCB0byByZW5hbWUgZWFjaCBmaWxlIHRoYXQgaXMgc3VjY2Vzc2Z1bGx5CisgICAg ICAgICAgcmVjZWl2ZWQgdG8gdGhlIGdpdmVuIHN0cmluZy4gRmlsZXMgdGhhdCBhcmUgbm90IHN1 Y2Nlc3NmdWxseQorICAgICAgICAgIHJlY2VpdmVkIGFyZSBub3QgcmVuYW1lZC4gQnkgZGVmYXVs dCwgZmlsZXMgYXJlIG5vdCByZW5hbWVkLiBUaGUKKyAgICAgICAgICBzdHJpbmcgY2FuIGJlIGEg bGl0ZXJhbCBzdHJpbmcsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHdoZW4gb25seQorICAgICAgICAg IG9uZSBmaWxlIGlzIGJlaW5nIHJlY2VpdmVkLCBvciBpdCBjYW4gY29udGFpbiBvbmUgb3IgbW9y ZQorICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSB0byBiZSBldmFsdWF0ZWQgYXQgdGhlIHRp bWUgZWFjaCBmaWxlIGlzCisgICAgICAgICAgcmVjZWl2ZWQsIHN1Y2ggYXMgXHYoZmlsZW5hbWUp LCBcdihmaWxlbnVtYmVyKSwgXHYobnRpbWUpLAorICAgICAgICAgIFx2KHBpZCksIFx2KHVzZXIp LCBldGMuIFdBUk5JTkc6IGlmIHlvdSBnaXZlIGEgbGl0ZXJhbCBzdHJpbmcKKyAgICAgICAgICBh bmQgbW9yZSB0aGFuIG9uZSBmaWxlIGFycml2ZXMsIGVhY2ggaW5jb21pbmcgZmlsZSB3aWxsIGJl IGdpdmVuCisgICAgICAgICAgdGhlIHNhbWUgbmFtZSAoYnV0IFNFVCBGSUxFIENPTExJU0lPTiBC QUNLVVAgb3IgUkVOQU1FIGNhbiBiZQorICAgICAgICAgIHVzZWQgdG8ga2VlcCB0aGUgaW5jb21p bmcgZmlsZXMgZnJvbSBvdmVyd3JpdGluZyBlYWNoIG90aGVyKS4KKworICAgL1RFWFQKKyAgICAg ICAgICBUZWxscyB0aGUgc2VydmVyIHRvIHBlcmZvcm0gdGhpcyB0cmFuc2ZlciBpbiB0ZXh0IG1v ZGUgd2l0aG91dAorICAgICAgICAgIGFmZmVjdGluZyBpdHMgZ2xvYmFsIHRyYW5zZmVyIG1vZGUu IFNlZSAvQklOQVJZIGZvciBhZGRpdGlvbmFsCisgICAgICAgICAgaW5mby4KKworICAgVGhlIC9N QUlMIGFuZCAvUFJJTlQgb3B0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSAoYXMgdGhleSBhcmUgZm9y IFNFTkQpLAorICAgYnV0IHlvdSBjYW4gdXNlIC9DT01NQU5EIHRvIGFjaGlldmUgdGhlIHNhbWUg ZWZmZWN0LCBhcyBpbiB0aGVzZSBVTklYCisgICBleGFtcGxlczoKKworICBnZXQgL2NvbW1hbmQg b29mYS50eHQge21haWwga2VybWl0QGNvbHVtYmlhLmVkdX0KKyAgZ2V0IC9jb21tYW5kIG9vZmEu dHh0IGxwcgorCisgICBJbiBPUy8yIG9yIFdpbmRvd3MsIHlvdSBjYW4gR0VUIGFuZCBwcmludCBs aWtlIHRoaXM6CisKKyAgZ2V0IG9vZmEudHh0IHBybgorCisgICBUaGUgQ0dFVCwgUkVHRVQsIFJF VFJJRVZFIGNvbW1hbmRzIGFsc28gYWNjZXB0IHRoZSBzYW1lIHN3aXRjaGVzIGFzCisgICBHRVQu IENHRVQgYXV0b21hdGljYWxseSBzZXRzIC9DT01NQU5EOyBSRUdFVCBhdXRvbWF0aWNhbGx5IHNl dHMKKyAgIC9SRUNPVkVSIGFuZCAvQklOQVJZLCBhbmQgUkVUUklFVkUgYXV0b21hdGljYWxseSBz ZXRzIC9ERUxFVEUuCisKKzQuNy4zLiBSRUNFSVZFIENvbW1hbmQgU3dpdGNoZXMKKworICAgV2l0 aG91dCBzd2l0Y2hlcywgdGhlIFJFQ0VJVkUgY29tbWFuZCBzdGlsbCB3b3JrcyBhcyBiZWZvcmU6 CisKKyAgcmVjZWl2ZSAgICAgICAgICAgIDsgUmVjZWl2ZXMgZmlsZXMgdW5kZXIgdGhlaXIgb3du IG5hbWVzCisgIHJlY2VpdmUgL3RtcCAgICAgICA7IERpdHRvLCBidXQgaW50byB0aGUgL3RtcCBk aXJlY3RvcnkKKyAgciAgICAgICAgICAgICAgICAgIDsgU2FtZSBhcyAicmVjZWl2ZSIKKyAgcmVj ZWl2ZSBmb28udHh0ICAgIDsgUmVjZWl2ZXMgYSBmaWxlIGFuZCByZW5hbWVzIHRvIGZvby50eHQK KworICAgTm93IHlvdSBjYW4gYWxzbyBpbmNsdWRlIG1vZGlmaWVyIHN3aXRjaGVzIG1heSBiZSBp bmNsdWRlZCBiZXR3ZWVuCisgICAicmVjZWl2ZSIgYW5kIHRoZSBhcy1uYW1lOyBtb3N0IG9mIHRo ZSBzYW1lIHN3aXRjaGVzIGFzIEdFVDoKKworICAgL0FTLU5BTUU6dGV4dAorICAgICAgICAgIFNw ZWNpZmllcyAidGV4dCIgYXMgdGhlIG5hbWUgdG8gc3RvcmUgdGhlIGluY29taW5nIGZpbGUgdW5k ZXIuCisgICAgICAgICAgWW91IGNhbiBhbHNvIHN0aWxsIHNwZWNpZnkgdGhlIGFzLW5hbWUgYXMg YSBmaWxlbmFtZSBvbiB0aGUKKyAgICAgICAgICBjb21tYW5kIGxpbmUuIFRoZSBmb2xsb3dpbmcg dHdvIGNvbW1hbmRzIGFyZSBlcXVpdmFsZW50OgorCisgIHIgb29mYS5uZXcKKyAgciAvYXM6b29m YS5uZXcKKworICAgL0JJTkFSWQorICAgICAgICAgIFBlcmZvcm1zIHRoaXMgdHJhbnNmZXIgaW4g YmluYXJ5IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlCisgICAgICAgICAgZ2xvYmFsIHRyYW5z ZmVyIG1vZGUuIE5PVEU6IFRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgdGhlIGluY29taW5nCisgICAg ICAgICAgZmlsZXR5cGUgKGFzIGl0IGRvZXMgd2l0aCBHRVQpLCBzbyB0aGlzIHN3aXRjaCBpcyB1 c2VmdWwgb25seSBpZgorICAgICAgICAgIEFUVFJJQlVURSBUWVBFIGlzIE9GRiwgb3IgaWYgdGhl IG90aGVyIEtlcm1pdCBkb2VzIG5vdCBzZW5kIGEKKyAgICAgICAgICBUWVBFICh0ZXh0IG9yIGJp bmFyeSkgYXR0cmlidXRlLiBJbiBhbnkgY2FzZSwgaXQgaGFzIG5vIGFmZmVjdAorICAgICAgICAg IHdoYXRzb2V2ZXIgb24gdGhlIGZpbGUgc2VuZGVyLgorCisgICAvQ09NTUFORAorICAgICAgICAg IFJFQ0VJVkUgL0NPTU1BTkQgaXMgZXF1aXZhbGVudCB0byBDUkVDRUlWRSAoWzUwMl1TZWN0aW9u IDQuMi4yKQorICAgICAgICAgIC0tIGl0IHNheXMgdG8gcmVjZWl2ZSB0aGUgZmlsZSBpbnRvIHRo ZSBzdGFuZGFyZCBpbnB1dCBvZiBhCisgICAgICAgICAgY29tbWFuZCwgcmF0aGVyIHRoYW4gc2F2 aW5nIGl0IG9uIGRpc2suIFRoZSAvQVMtTkFNRSBvciB0aGUKKyAgICAgICAgICAiZmlsZW5hbWUi IG9uIHRoZSBSRUNFSVZFIGNvbW1hbmQgbGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aGUKKyAgICAg ICAgICBuYW1lIG9mIGEgY29tbWFuZC4KKworICByIC9jb21tYW5kIHtncmVwIFN1bmRheSBvb2Zh LnR4dH0KKyAgciAvY29tbWFuZCAvYXMtbmFtZTp7Z3JlcCBTdW5kYXkgb29mYS50eHR9CisgIHIg L2JpbiAvY29tbWFuZCB7dGFyIGNmIC0gLiB8IGd6aXAgLWN9CisKKyAgIC9FWENFUFQ6cGF0dGVy bgorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0 aGUgcGF0dGVybiwgd2hpY2gKKyAgICAgICAgICBjYW4gYmUgYSByZWd1bGFyIGZpbGVuYW1lLCBv ciBtYXkgY29udGFpbiAiKiIgYW5kL29yICI/IgorICAgICAgICAgIG1ldGFjaGFyYWN0ZXJzLCBh cmUgdG8gYmUgcmVmdXNlZCB1cG9uIGFycml2YWwuIFRvIHNwZWNpZnkKKyAgICAgICAgICBtdWx0 aXBsZSBwYXR0ZXJucyAodXAgdG8gOCksIHVzZSBvdXRlciBicmFjZXMgYXJvdW5kIHRoZSBncm91 cCwKKyAgICAgICAgICBhbmQgaW5uZXIgYnJhY2VzIGFyb3VuZCBlYWNoIHBhdHRlcm46CisKKyAg L0VYQ0VQVDp7e3BhdHRlcm4xfXtwYXR0ZXJuMn0uLi59CisKKyAgICAgICAgICBTZWUgdGhlIGRl c2NyaXB0aW9uIG9mIFNFTkQgL0VYQ0VQVCBpbiBbNTAzXVNlY3Rpb24gNC43LjEgZm9yCisgICAg ICAgICAgZXhhbXBsZXMsIGV0Yy4gUmVmdXNhbCBpcyBhY2NvbXBsaXNoZWQgdXNpbmcgdGhlIEF0 dHJpYnV0ZQorICAgICAgICAgIFJlamVjdGlvbiBtZWNoYW5pc20gKHJlYXNvbiAibmFtZSIpLCB3 aGljaCB3b3JrcyBvbmx5IHdoZW4KKyAgICAgICAgICBBdHRyaWJ1dGUgcGFja2V0cyBoYXZlIGJl ZW4gc3VjY2Vzc2Z1bGx5IG5lZ290aWF0ZWQuCisKKyAgIC9GSUxFTkFNRVM6e0NPTlZFUlRFRCxM SVRFUkFMfQorICAgICAgICAgIFVzZSB0aGlzIHN3aXRjaCB0byBvdmVycmlkZSB0aGUgY3VycmVu dCBnbG9iYWwgU0VUIEZJTEUgTkFNRVMKKyAgICAgICAgICBzZXR0aW5nIGZvciB0aGlzIHRyYW5z ZmVyIG9ubHkuCisKKyAgIC9GSUxURVI6Y29tbWFuZAorICAgICAgICAgIFRoaXMgc3BlY2lmaWVz IGEgZmlsdGVyIHRvIHBhc3MgdGhlIGluY29taW5nIGZpbGUgdGhyb3VnaCBiZWZvcmUKKyAgICAg ICAgICB3cml0aW5nIHRvIGRpc2suIFNlZSB0aGUgWzUwNF1zZWN0aW9uIG9uIGZpbGUtdHJhbnNm ZXIgcGlwZXMgYW5kCisgICAgICAgICAgZmlsdGVycy4gVGhlIC9GSUxURVIgc3dpdGNoIGFwcGxp ZXMgb25seSB0byB0aGUgZmlsZS10cmFuc2ZlcgorICAgICAgICAgIGNvbW1hbmQgaXQgaXMgZ2l2 ZW4gd2l0aDsgaXQgZG9lcyBub3QgYWZmZWN0IHRoZSBnbG9iYWwgUkVDRUlWRQorICAgICAgICAg IEZJTFRFUiBzZXR0aW5nLCBpZiBhbnkuCisKKyAgIC9JTUFHRQorICAgICAgICAgIFZNUzogVHJh bnNmZXIgaW4gaW1hZ2UgbW9kZS4gTm9uLVZNUzogc2FtZSBhcyAvQklOQVJZLiBTZWUKKyAgICAg ICAgICBjb21tZW50cyB1bmRlciBSRUNFSVZFIC9CSU5BUlkuCisKKyAgIC9MQUJFTEVECisgICAg ICAgICAgVk1TIGFuZCBPUy8yIG9ubHk6IFNwZWNpZmllcyBsYWJlbGVkIHRyYW5zZmVyIG1vZGUu IFNlZSBjb21tZW50cworICAgICAgICAgIHVuZGVyIFJFQ0VJVkUgL0JJTkFSWS4KKworICAgL01P VkUtVE86ZGlyZWN0b3J5CisgICAgICAgICAgVGhpcyB0ZWxscyBDLUtlcm1pdCB0byBtb3ZlIGVh Y2ggZmlsZSB0aGF0IGlzIHN1Y2Nlc3NmdWxseQorICAgICAgICAgIHJlY2VpdmVkIHRvIHRoZSBn aXZlbiBkaXJlY3RvcnkuIEZpbGVzIHRoYXQgYXJlIG5vdCBzdWNjZXNzZnVsbHkKKyAgICAgICAg ICByZWNlaXZlZCBhcmUgbm90IG1vdmVkLiBCeSBkZWZhdWx0LCBmaWxlcyBhcmUgbm90IG1vdmVk LgorCisgICAvUEFUSE5BTUVTOntBQlNPTFVURSxSRUxBVElWRSxPRkYsQVVUT30KKyAgICAgICAg ICBVc2UgdGhpcyBzd2l0Y2ggdG8gb3ZlcnJpZGUgdGhlIGN1cnJlbnQgZ2xvYmFsIFNFVCBSRUNF SVZFCisgICAgICAgICAgUEFUSE5BTUVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIgb25seS4g U2VlIFs1MDVdU2VjdGlvbiA0LjEwLgorCisgICAvUkVDVVJTSVZFCisgICAgICAgICAgV2hlbiB1 c2VkIHdpdGggdGhlIFJFQ0VJVkUgY29tbWFuZCwgL1JFQ1VSU0lWRSBpcyBzaW1wbHkgYQorICAg ICAgICAgIHN5bm9ueW0gZm9yIC9QQVRITkFNRVM6UkVMQVRJVkUuCisKKyAgIC9SRU5BTUUtVE86 c3RyaW5nCisgICAgICAgICAgVGhpcyB0ZWxscyBDLUtlcm1pdCB0byByZW5hbWUgZWFjaCBmaWxl IHRoYXQgaXMgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgcmVjZWl2ZWQgdG8gdGhlIGdpdmVuIHN0 cmluZy4gRmlsZXMgdGhhdCBhcmUgbm90IHN1Y2Nlc3NmdWxseQorICAgICAgICAgIHJlY2VpdmVk IGFyZSBub3QgcmVuYW1lZC4gQnkgZGVmYXVsdCwgZmlsZXMgYXJlIG5vdCByZW5hbWVkLiBUaGUK KyAgICAgICAgICBzdHJpbmcgY2FuIGJlIGEgbGl0ZXJhbCBzdHJpbmcsIHdoaWNoIGlzIGFwcHJv cHJpYXRlIHdoZW4gb25seQorICAgICAgICAgIG9uZSBmaWxlIGlzIGJlaW5nIHJlY2VpdmVkLCBv ciBpdCBjYW4gY29udGFpbiBvbmUgb3IgbW9yZQorICAgICAgICAgIHZhcmlhYmxlcyB0aGF0IGFy ZSB0byBiZSBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgZWFjaCBmaWxlIGlzCisgICAgICAgICAgcmVj ZWl2ZWQsIHN1Y2ggYXMgXHYoZmlsZW5hbWUpLCBcdihmaWxlbnVtYmVyKSwgXHYobnRpbWUpLAor ICAgICAgICAgIFx2KHBpZCksIFx2KHVzZXIpLCBldGMuIFdBUk5JTkc6IGlmIHlvdSBnaXZlIGEg bGl0ZXJhbCBzdHJpbmcKKyAgICAgICAgICBhbmQgbW9yZSB0aGFuIG9uZSBmaWxlIGFycml2ZXMs IGVhY2ggaW5jb21pbmcgZmlsZSB3aWxsIGJlIGdpdmVuCisgICAgICAgICAgdGhlIHNhbWUgbmFt ZSAoYnV0IFNFVCBGSUxFIENPTExJU0lPTiBCQUNLVVAgb3IgUkVOQU1FIGNhbiBiZQorICAgICAg ICAgIHVzZWQgdG8ga2VlcCB0aGUgaW5jb21pbmcgZmlsZXMgZnJvbSBvdmVyd3JpdGluZyBlYWNo IG90aGVyKS4KKworICAgL1FVSUVUCisgICAgICAgICAgV2hlbiByZWNlaXZpbmcgaW4gbG9jYWwg bW9kZSwgdGhpcyBzdXBwcmVzc2VzIHRoZSBmaWxlLXRyYW5zZmVyCisgICAgICAgICAgZGlzcGxh eS4KKworICAgL1RFWFQKKyAgICAgICAgICBSZWNlaXZlcyBpbiB0ZXh0IG1vZGUgd2l0aG91dCBh ZmZlY3RpbmcgdGhlIGdsb2JhbCB0cmFuc2ZlcgorICAgICAgICAgIG1vZGUuIFNlZSBjb21tZW50 cyB1bmRlciBSRUNFSVZFIC9CSU5BUlkuCisKKyAgIFRoZSAvTUFJTCBhbmQgL1BSSU5UIG9wdGlv bnMgYXJlIG5vdCBhdmFpbGFibGUsIGJ1dCB5b3UgY2FuIHVzZQorICAgL0NPTU1BTkQgdG8gYWNo aWV2ZSB0aGUgc2FtZSBlZmZlY3QsIGFzIGluIHRoZXNlIFVOSVggZXhhbXBsZXM6CisKKyAgciAv Y29tbWFuZCB7bWFpbCBrZXJtaXRAY29sdW1iaWEuZWR1fQorICByIC9jb21tYW5kIGxwcgorCisg ICBJbiBPUy8yIG9yIFdpbmRvd3MsIHlvdSBjYW4gUkVDRUlWRSBhbmQgcHJpbnQgbGlrZSB0aGlz OgorCisgIHJlY2VpdmUgcHJuCisKKyAgIFRoZSBDUkVDRUlWRSBjb21tYW5kIG5vdyBhbHNvIGFj Y2VwdHMgdGhlIHNhbWUgc3dpdGNoZXMuCisKKzQuOC4gTWlub3IgS2VybWl0IFByb3RvY29sIElt cHJvdmVtZW50cworCis0LjguMS4gTXVsdGlwbGUgQXR0cmlidXRlIFBhY2tldHMKKworICAgQy1L ZXJtaXQgNy4wIG5vdyBzZW5kcyBtb3JlIHRoYW4gb25lIEF0dHJpYnV0ZSBwYWNrZXQgaWYgYSBm aWxlJ3MKKyAgIGF0dHJpYnV0ZXMgZG8gbm90IGZpdCBpbnRvIGEgc2luZ2xlIHBhY2tldCBvZiB0 aGUgbmVnb3RpYXRlZCBsZW5ndGguIElmCisgICBhIHBhcnRpY3VsYXIgYXR0cmlidXRlIChzdWNo IGFzIGZpbGUgY3JlYXRpb24gZGF0ZS10aW1lKSBkb2VzIG5vdCBmaXQKKyAgIHdpdGhpbiB0aGUg bmVnb3RpYXRlZCBsZW5ndGggKHdoaWNoIHdpbGwgb25seSBoYXBwZW4gd2hlbiB0aGUKKyAgIG5l Z290aWF0ZWQgbGVuZ3RoIGlzIGFyb3VuZCAyMCBvciBsZXNzKSwgdGhhdCBhdHRyaWJ1dGUgaXMg bm90IHNlbnQgYXQKKyAgIGFsbC4KKworNC44LjIuIFZlcnkgU2hvcnQgUGFja2V0cworCisgICBU aGVyZSBhcmUgY2VydGFpbiBzaXR1YXRpb25zIHdoZXJlIGV4dHJlbWVseSBzaG9ydCBwYWNrZXRz IG11c3QgYmUKKyAgIHVzZWQ7IDIwIG9yIDMwIGJ5dGVzIGF0IG1vc3QuIFRoaXMgY2FuIGhhcHBl biB3aGVuIG9uZSBvciBtb3JlIGRldmljZXMKKyAgIGFsb25nIHRoZSBjb21tdW5pY2F0aW9uIHBh dGggaGF2ZSB2ZXJ5IHNtYWxsIGJ1ZmZlcnMgYW5kIGxhY2sgYW4KKyAgIGVmZmVjdGl2ZSBtZWFu cyBvZiBmbG93IGNvbnRyb2wuIEV4YW1wbGVzIGFyZSBzb21ldGltZXMgY2l0ZWQgaW52b2x2aW5n CisgICByYWRpbyBtb2RlbXMuCisKKyAgIFdoZW4gdGhlIG1heGltdW0gcGFja2V0IGxlbmd0aCBp cyBzaG9ydGVyIHRoYW4gY2VydGFpbiBwYWNrZXRzIHRoYXQKKyAgIHdvdWxkIGJlIHNlbnQsIHRo b3NlIHBhY2tldHMgYXJlIGVpdGhlciB0cnVuY2F0ZWQgb3IgZWxzZSBicm9rZW4gdXAKKyAgIGlu dG8gbXVsdGlwbGUgcGFja2V0cy4gU3BlY2lmaWNhbGx5OgorCisgICAgMS4gUGFyYW1ldGVyIG5l Z290aWF0aW9uIHBhY2tldHMgKEksIFMsIGFuZCB0aGVpciBBQ0tzKSBhcmUgdHJ1bmNhdGVkCisg ICAgICAgdG8gdGhlIG5lZ290aWF0ZWQgbGVuZ3RoLiBBbnkgcGFyYW1ldGVycyB0aGF0IGRvIG5v dCBmaXQgYXJlIHJlc2V0CisgICAgICAgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuIFRoZXJlIGlz IG5vIHByb3Zpc2lvbiBpbiB0aGUgS2VybWl0CisgICAgICAgcHJvdG9jb2wgZm9yIGZyYWdtZW50 YXRpb24gYW5kIHJlYXNzZW1ibHkgb2YgcGFyYW1ldGVyIHN0cmluZ3MuCisgICAgMi4gRmlsZSBo ZWFkZXIgcGFja2V0cyAoY29udGFpbmluZyB0aGUgZmlsZW5hbWUpIGFyZSBzaW1wbHkgdHJ1bmNh dGVkLgorICAgICAgIFRoZXJlIGlzIG5vIHByb3Zpc2lvbiBpbiB0aGUgS2VybWl0IHByb3RvY29s IGZvciBmcmFnbWVudGF0aW9uIGFuZAorICAgICAgIHJlYXNzZW1ibHkgb2YgZmlsZW5hbWVzLgor ICAgIDMuIEF0dHJpYnV0ZSBwYWNrZXRzIGFyZSBmcmFnbWVudGVkIGFuZCByZWFzc2VtYmxlZCBh cyBkZXNjcmliZWQgaW4KKyAgICAgICA0LjguMSB3aXRob3V0IGxvc3Mgb2YgZGF0YSwgZXhjZXB0 IGluIGNhc2UgYSBmaWVsZCB3aWxsIG5vdCBmaXQgYXQKKyAgICAgICBhbGwgaW4gdGhlIG5lZ290 aWF0ZWQgbGVuZ3RoICh0aGUgbG9uZ2VzdCBhdHRyaWJ1dGUgaXMgdXN1YWxseSB0aGUKKyAgICAg ICBkYXRlIGFuZCB0aW1lIG9mIGZpbGUgY3JlYXRpb24vbW9kaWZpY2F0aW9uKSBiZWNhdXNlIG9m IHRoZSBydWxlCisgICAgICAgdGhhdCBhdHRyaWJ1dGVzIG1heSBub3QgYmUgYnJva2VuIGFjcm9z cyBwYWNrZXRzLgorICAgIDQuIERhdGEgcGFja2V0cyBhbmQgb3RoZXIgcGFja2V0cyBhcmUgdW5h ZmZlY3RlZCAtLSB0aGV5IGNhbiBiZSBhcworICAgICAgIHNob3J0IGFzIHRoZXkgbmVlZCB0byBi ZSwgd2l0aGluIHJlYXNvbi4KKworNC45LiBXaWxkY2FyZCAvIEZpbGUgR3JvdXAgRXhwYW5zaW9u CisKKyAgICJXaWxkY2FyZCIgcmVmZXJzIHRvIHRoZSBub3RhdGlvbiB1c2VkIGluIGZpbGVuYW1l cyB0byBzcGVjaWZ5IGEgZ3JvdXAKKyAgIG9mIGZpbGVzIGJ5IHBhdHRlcm4gbWF0Y2hpbmcuCisK KzQuOS4xLiBJbiBVTklYIEMtS2VybWl0CisKKyAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCwgQy1L ZXJtaXQgd2FzIGNhcGFibGUgb2YgZXhwYW5kaW5nIHdpbGRjYXJkCisgICBzdHJpbmdzIGNvbnRh aW5pbmcgb25seSB0aGUgIm1ldGFjaGFyYWN0ZXJzIiAnKicgYW5kICc/JzoKKworICAgKgorICAg ICAgICAgIE1hdGNoZXMgYW55IHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLiBG b3IgZXhhbXBsZToKKyAgICAgICAgICAiY2sqLmMiIG1hdGNoZXMgYWxsIGZpbGVzIHdob3NlIG5h bWVzIHN0YXJ0IHdpdGggImNrIiBhbmQgZW5kCisgICAgICAgICAgd2l0aCAiLmMiLCBpbmNsdWRp bmcgImNrLmMiLgorCisgICA/CisgICAgICAgICAgTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3Rl ci4gRm9yIGV4YW1wbGUsICJjaz8uYyIgbWF0Y2hlcyBhbGwKKyAgICAgICAgICBmaWxlcyB3aG9z ZSBuYW1lcyBhcmUgZXhhY3RseSA1IGNoYXJhY3RlcnMgbG9uZyBhbmQgc3RhcnQgd2l0aAorICAg ICAgICAgICJjayIgYW5kIGVuZCB3aXRoICIuYyIuIFdoZW4gdHlwaW5nIGNvbW1hbmRzIGF0IHRo ZSBwcm9tcHQsIHlvdQorICAgICAgICAgIG11c3QgcHJlY2VkZSBhbnkgcXVlc3Rpb24gbWFyayB0 byBiZSB1c2VkIGZvciBtYXRjaGluZyBieSBhCisgICAgICAgICAgYmFja3NsYXNoIChcKSB0byBv dmVycmlkZSB0aGUgbm9ybWFsIGZ1bmN0aW9uIG9mIHF1ZXN0aW9uIG1hcmssCisgICAgICAgICAg d2hpY2ggaXMgcHJvdmlkaW5nIG1lbnVzIGFuZCBmaWxlIGxpc3RzLgorCisgICBDLUtlcm1pdCA3 LjAgYWRkcyB0aGUgYWRkaXRpb25hbCBmZWF0dXJlcyB0aGF0IHVzZXJzIG9mIGtzaCwgY3NoLCBh bmQKKyAgIGJhc2ggYXJlIGFjY3VzdG9tZWQgdG86CisKKyAgIFthYmNdCisgICAgICAgICAgU3F1 YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIGxpc3Qgb2YgY2hhcmFjdGVycyBtYXRjaGVzIGFueQor ICAgICAgICAgIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlIGxpc3QuIEV4YW1wbGU6IGNrdXVzci5b Y2hdIG1hdGNoZXMKKyAgICAgICAgICBja3V1c3IuYyBhbmQgY2t1dXNyLmguCisKKyAgIFthLXpd CisgICAgICAgICAgU3F1YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIHJhbmdlIG9mIGNoYXJhY3Rl cnM7IHRoZSBoeXBoZW4KKyAgICAgICAgICBzZXBhcmF0ZXMgdGhlIGxvdyBhbmQgaGlnaCBlbGVt ZW50cyBvZiB0aGUgcmFuZ2UuIEZvciBleGFtcGxlLAorICAgICAgICAgIFthLXpdIG1hdGNoZXMg YW55IGNoYXJhY3RlciBmcm9tIGEgdG8gei4KKworICAgW2FjZG0tel0KKyAgICAgICAgICBMaXN0 cyBhbmQgcmFuZ2VzIG1heSBiZSBjb21iaW5lZC4gVGhpcyBleGFtcGxlIG1hdGNoZXMgYSwgYywg ZCwKKyAgICAgICAgICBvciBtIHRocm91Z2ggei4KKworICAge3N0cmluZzEsc3RyaW5nMiwuLi59 CisgICAgICAgICAgQnJhY2VzIGVuY2xvc2UgYSBsaXN0IG9mIHN0cmluZ3MgdG8gYmUgbWF0Y2hl ZC4gRm9yIGV4YW1wbGU6CisgICAgICAgICAgY2t7dWZpbyx2Y29uLGNtYWl9LmMgbWF0Y2hlcyBj a3VmaW8uYywgY2t2Y29uLmMsIG9yIGNrY21haS5jLgorICAgICAgICAgIFRoZSBzdHJpbmdzIG1h eSB0aGVtc2VsdmVzIGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMsIGJyYWNrZXQKKyAgICAgICAgICBs aXN0cywgb3IgaW5kZWVkLCBvdGhlciBsaXN0cyBvZiBzdHJpbmdzLCBidXQgKHdoZW4gbWF0Y2hp bmcKKyAgICAgICAgICBmaWxlbmFtZXMpIHRoZXkgbWF5IG5vdCBjb250YWluIGRpcmVjdG9yeSBz ZXBhcmF0b3JzLgorCisgICAgICAgICAgVGh1cywgdGhlIG1ldGFjaGFyYWN0ZXJzIGluIGZpbGVu YW1lcyAoYW5kIGluIGFueSBvdGhlciBmaWVsZAorICAgICAgICAgIHRoYXQgY2FuIGJlIGEgcGF0 dGVybiwgc3VjaCBhcyB0aGUgSUYgTUFUQ0ggcGF0dGVybiwgU0VORCBvciBHRVQKKyAgICAgICAg ICBleGNlcHRpb24gbGlzdHMsIGV0YykgYXJlOgorCisgKiA/IFsgeworCisgICAgICAgICAgQW5k IHdpdGhpbiBicmFjZXMgb25seSwgY29tbWEgKCwpIGlzIGEgbWV0YWNoYXJhY3Rlci4KKworICAg VG8gaW5jbHVkZSBhIG1ldGFjaGFyYWN0ZXIgaW4gYSBwYXR0ZXJuIGxpdGVyYWxseSwgcHJlY2Vk ZSBpdCB3aXRoIGEKKyAgIGJhY2tzbGFzaCAnXCcgKG9yIHR3byBpZiB5b3UgYXJlIHBhc3Npbmcg dGhlIHBhdHRlcm4gdG8gYSBtYWNybykuCisgICBFeGFtcGxlczoKKworICBzZW5kIGEqYiAgICAg IDsgU2VuZCBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAnYScgYW5kIGVuZCB3aXRo ICdiJy4KKyAgc2VuZCBhP2IgICAgICA7IERpdHRvLCBidXQgdGhlIG5hbWUgbXVzdCBiZSBleGFj dGx5IHRocmVlIGNoYXJhY3RlcnMgbG9uZy4KKyAgc2VuZCBhW2Etel1iICA7IERpdHRvLCBidXQg dGhlIHNlY29uZCBjaGFyYWN0ZXIgbXVzdCBiZSBhIGxvd2VyY2FzZSBsZXR0ZXIuCisgIHNlbmQg YVt4XC16XWIgOyBEaXR0bywgZXhjZXB0IHRoZSBzZWNvbmQgY2hhcmFjdGVyIG11c3QgYmUgJ3gn LCAnLScsIG9yICd5Jy4KKyAgc2VuZCBhW2doaV1iICA7IERpdHRvLCBleGNlcHQgdGhlIHNlY29u ZCBjaGFyYWN0ZXIgbXVzdCBiZSAnZycsICdoJywgb3IgJ2knLgorICBzZW5kIGFbPypdYiAgIDsg RGl0dG8sIGV4Y2VwdCB0aGUgc2Vjb25kIGNoYXJhY3RlciBtdXN0IGJlICc/JyBvciAnKicuCisg IHNlbmQgYVtcP1wqXWIgOyBTYW1lIGFzIHByZXZpb3VzLgorICBzZW5kICo/W2Etel0qIDsgQWxs IGZpbGVzIHdpdGggbmFtZXMgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyCisgICAg ICAgICAgICAgICAgOyB0aGF0IGlzIGZvbGxvd2VkIGJ5IGEgbG93ZXJjYXNlIGxldHRlci4KKwor ICAgT3IsIG1vcmUgcHJhY3RpY2FsbHk6CisKKyAgc2VuZCBja1tjdXddKi5bY3doXSAgOyBTZW5k IHRoZSBVTklYIEMtS2VybWl0IHNvdXJjZSBmaWxlcy4KKworICAgVG8gcmVmZXIgdG8gdGhlIEMt S2VybWl0IHNvdXJjZXMgZmlsZXMgYW5kIG1ha2VmaWxlIGFsbCBpbiBvbmUKKyAgIGZpbGVzcGVj OgorCisgIHt7bWFrZWZpbGUsY2tbY3V3XSouW2N3aF19fQorCisgICAoTk9URTogaWYgdGhlIGVu dGlyZSBwYXR0ZXJuIGlzIGEge3N0cmluZ2xpc3R9LCB5b3UgbXVzdCBlbmNsb3NlIGl0IGl0Cisg ICBUV08gcGFpcnMgb2YgYnJhY2VzLCBzaW5jZSB0aGUgU0VORCBjb21tYW5kIHN0cmlwcyB0aGUg b3V0ZXIgYnJhY2UKKyAgIHBhaXIsIGJlY2F1c2Ugb2YgdGhlICJlbmNsb3NlIGluIGJyYWNlcyBp ZiB0aGUgZmlsZW5hbWUgY29udGFpbnMKKyAgIHNwYWNlcyIgcnVsZSkuCisKKyAgIElmIHRoZSBt YWtlZmlsZSBpcyBjYWxsZWQgY2t1a2VyLm1hazoKKworICBja1tjdXddKi57W2N3aF0sbWFrfQor CisgICAoTk9URTogZG91YmxlIGJyYWNlcyBhcmUgbm90IG5lZWRlZCBoZXJlIHNpbmNlIHRoZSBw YXR0ZXJuIGRvZXMgbm90CisgICBib3RoIGJlZ2luIGFuZCBlbmQgd2l0aCBhIGJyYWNlLikKKwor ICAgVG8gYWRkIGluIGFsbCB0aGUgQy1LZXJtaXQgdGV4dCBmaWxlczoKKworICBja1tjdXddKi57 W2N3aF0sbWFrLHR4dH0KKworICAgQWxsIG9mIHRoZXNlIGZlYXR1cmVzIGNhbiBiZSB1c2VkIGFu eXdoZXJlIHlvdSB3b3VsZCB0eXBlIGEgZmlsZW5hbWUKKyAgIHRoYXQgaXMgYWxsb3dlZCB0byBj b250YWluIHdpbGRjYXJkcy4KKworICAgV2hlbiB5b3UgYXJlIHR5cGluZyBhdCB0aGUgY29tbWFu ZCBwcm9tcHQsIGFuIGV4dHJhIGxldmVsIG9mIHF1b3RpbmcgaXMKKyAgIHJlcXVpcmVkIGZvciB0 aGUgJz8nIGNoYXJhY3RlciB0byBkZWZlYXQgaXRzIHJlZ3VsYXIgZnVuY3Rpb24gb2YKKyAgIHBy b2R1Y2luZyBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBtYXRjaCB3aGF0IHlvdSBoYXZlIHR5cGVkIHNv IGZhciwgZm9yCisgICBleGFtcGxlOgorCisgIHNlbmQgY2tbY3VdPworCisgICBsaXN0cyBhbGwg dGhlIGZpbGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggY2tjIGFuZCBja3UuIElmIHlvdSBxdW90 ZQorICAgdGhlIHF1ZXN0aW9uIG1hcmssIGl0IGlzIHVzZWQgYXMgYSBwYXR0ZXJuLW1hdGNoaW5n IGNoYXJhY3RlciwgZm9yCisgICBleGFtcGxlOgorCisgIHNlbmQgY2tcP1tmdF1pby5jCisKKyAg IHNlbmRzIGFsbCB0aGUgZmlsZSBhbmQgY29tbXVuaWNhdGlvbnMgaS9vIG1vZHVsZXMgZm9yIGFs bCB0aGUKKyAgIHBsYXRmb3JtczogY2t1ZmlvLmMsIGNrdXRpby5jLCBja3ZmaW8uYywgY2t2dGlv LmMsIGV0Yy4KKworICAgSWYsIGhvd2V2ZXIsIGEgZmlsZW5hbWUgYWN0dWFsbHkgY29udGFpbnMg YSBxdWVzdGlvbiBtYXJrIGFuZCB5b3UgbmVlZAorICAgdG8gcmVmZXIgdG8gaXQgb24gdGhlIGNv bW1hbmQgbGluZSwgeW91IG11c3QgdXNlIHRocmVlICgzKSBiYWNrc2xhc2hlcy4KKyAgIEZvciBl eGFtcGxlLCBpZiB0aGUgZmlsZSBpcyBhY3R1YWxseSBjYWxsZWQgY2s/ZmlvLmMsIHlvdSB3b3Vs ZCB1c2U6CisKKyAgc2VuZCBja1xcXD9maW8uYworCisgICBGdXJ0aGVyIG5vdGVzIG9uIHF1b3Rp bmc6CisKKyAgICAgKiBBIHNpbmdsZSBiYWNrc2xhc2ggaXMgc3VmZmljaWVudCBmb3IgcXVvdGlu ZyBhIHNwZWNpYWwgY2hhcmFjdGVyIGF0CisgICAgICAgdGhlIGNvbW1hbmQgcHJvbXB0IG9yIGlu IGEgY29tbWFuZCBmaWxlLiBIb3dldmVyLCB3aGVuIHBhc3NpbmcKKyAgICAgICBwYXR0ZXJucyB0 byBtYWNyb3MgeW91J2xsIG5lZWQgZG91YmxlIGJhY2tzbGFzaGVzLCBhbmQgd2hlbgorICAgICAg IHJlZmVycmluZyB0byB0aGVzZSBwYXR0ZXJucyB3aXRoaW4gdGhlIG1hY3JvLCB5b3UnbGwgbmVl ZCB0byB1c2UKKyAgICAgICBcZmNvbnRlbnRzKFwlMSkgKHNlZSBbNTA2XVNlY3Rpb24gMS4xMS41 KS4gWW91IHNob3VsZCBlbmNsb3NlIG1hY3JvCisgICAgICAgYXJndW1lbnQgcmVmZXJlbmNlcyBp biBicmFjZXMgaW4gY2FzZSBncm91cGVkIGFyZ3VtZW50cyB3ZXJlCisgICAgICAgcGFzc2VkLiBF eGFtcGxlOgorIGRlZmluZSBpc21hdGNoIHsKKyAgICAgaWYgbWF0Y2gge1xmY29udChcJTEpfSB7 XGZjb250KFwlMil9IHsKKyAgICAgICAgIGVuZCAwIE1BVENICisgICAgIH0gZWxzZSB7CisgICAg ICAgICBlbmQgMSBOTyBNQVRDSAorICAgICB9CisgfQorIGlzbWF0Y2ggYWIqeXogYSpcXCoqeiAg ICAgICAgICAgOyBCYWNrc2xhc2ggbXVzdCBiZSBkb3VibGVkCisgaXNtYXRjaCB7YWJjIGRlZiB4 eXp9ICpiKmUqeSogICA7IEJyYWNlcyBtdXN0IGJlIHVzZWQgZm9yIGdyb3VwaW5nCisKKyAgICAg KiBXYXRjaCBvdXQgZm9yIHBvc3NpYmxlIGNvbmZsaWN0cyBiZXR3ZWVuIHt9IGluIGZpbGVuYW1l IHBhdHRlcm5zCisgICAgICAgYW5kIHt9IHVzZWQgZm9yIGdyb3VwaW5nIG11bHRpcGxlIHdvcmRz IGludG8gYSBzaW5nbGUgZmllbGQsIHdoZW4KKyAgICAgICB0aGUgcGF0dGVybiBoYXMgb3V0ZXIg YnJhY2VzLiBGb3IgZXhhbXBsZSwgaW46CisgICAgIGlmIG1hdGNoIHthYmMgeHl6fSB7YSogKnp9 IGVjaG8gVEhFWSBNQVRDSAorCisgICAgICAgYnJhY2VzIG11c3QgYmUgdXNlZCB0byBncm91cCAi YWJjIHh5eiIgaW50byBhIHNpbmdsZSBzdHJpbmcuIEtlcm1pdAorICAgICAgIHN0cmlwcyBvZmYg dGhlIGJyYWNlcyBiZWZvcmUgY29tcGFyaW5nIHRoZSBzdHJpbmcgd2l0aCB0aGUgcGF0dGVybi4K KyAgICAgICBUaGVyZWZvcmU6CisgaWYgbWF0Y2ggbWFrZWZpbGUge21ha2VmaWxlLE1ha2VmaWxl fSBlY2hvIFRIRVkgTUFUQ0gKKworICAgICAgIGRvZXMgbm90IHdvcmssIGJ1dDoKKyBpZiBtYXRj aCBtYWtlZmlsZSB7e21ha2VmaWxlLE1ha2VmaWxlfX0gZWNobyBUSEVZIE1BVENICisKKyAgICAg ICBkb2VzLgorICAgICAqIElmIHlvdSB1c2UgYSBwYXR0ZXJuIHRoYXQgaGFzIG91dGVyIGJyYWNl cywgbGlrZSB7Ki50eHQsKi5kb2N9LCBpbgorICAgICAgIGEgZmllbGQgdGhhdCBhY2NlcHRzIGEg cGF0dGVybiBsaXN0IChsaWtlIFNFTkQgL0VYQ0VQVDp4eHgpLCB5b3UnbGwKKyAgICAgICBuZWVk IHRvIGFkZCB0d28gZXh0cmEgc2V0cyBvZiBvdXRlciBicmFjZXM6Cisgc2VuZCAvZXhjZXB0Ont7 eyoudHh0LCouZG9jfX19ICouKgorCisgICBDLUtlcm1pdCdzIG5ldyBwYXR0ZXJuIG1hdGNoaW5n IGNhcGFiaWxpdGllcyBhcmUgYWxzbyB1c2VkIHdoZW4KKyAgIEMtS2VybWl0IGlzIGluIHNlcnZl ciBtb2RlLCBzbyBub3cgeW91IGNhbiBzZW5kIHJlcXVlc3RzIHN1Y2ggYXM6CisKKyAgZ2V0IGNr W2N1d10qLltjd2hdCisKKyAgIHRvIGEgQy1LZXJtaXQgc2VydmVyIHdpdGhvdXQgaGF2aW5nIHRv IHRlbGwgaXQgdG8gU0VUIFdJTEQgU0hFTEwgZmlyc3QuCisgICBQcmV2aW91c2x5IHRoaXMgd291 bGQgaGF2ZSByZXF1aXJlZDoKKworICBtZ2V0IGNrYyouYyBja2MqLncgY2tjKi5oIGNrdSouYyBj a3UqLncgY2t1Ki5oIGNrdyouYyBja3cqLncgY2t3Ki5oCisKKyAgIFRoZSBuZXcgcGF0dGVybiBt YXRjaGluZyBmZWF0dXJlcyBtYWtlIFNFVCBXSUxEIFNIRUxMIHJlZHVuZGFudCwgYW5kCisgICBi YXJyaW5nIGFueSBvYmplY3Rpb25zLCBpdCB3aWxsIGV2ZW50dWFsbHkgYmUgcGhhc2VkIG91dC4g KE9uZSBwb3NzaWJsZQorICAgcmVhc29uIGZvciByZXRhaW5pbmcgaXQgd291bGQgYmUgYXMgYW4g ZXNjYXBlIG1lY2hhbmlzbSB3aGVuIEtlcm1pdAorICAgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUg dW5kZXJseWluZyBmaWxlIHN5c3RlbS4pCisKKyAgIEJ5IHRoZSB3YXksIHBhdHRlcm5zIHN1Y2gg YXMgdGhlc2UgYXJlIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcworICAgInJlZ3VsYXIgZXhwcmVz c2lvbnMiLCBidXQgdGhleSBhcmUgbm90IHF1aXRlIHRoZSBzYW1lLiBJbiBhIHRydWUKKyAgIHJl Z3VsYXIgZXhwcmVzc2lvbiAoZm9yIGV4YW1wbGUpLCAiKiIgbWVhbnMgInplcm8gb3IgbW9yZSBy ZXBldGl0aW9ucworICAgb2YgdGhlIHByZXZpb3VzIGl0ZW0iLCBzbyAoZm9yIGV4YW1wbGUpLCAi KFswLTldKikiIHdvdWxkIG1hdGNoIHplcm8gb3IKKyAgIG1vcmUgZGlnaXRzIGluIHBhcmVudGhl c2VzLiBJbiBLZXJtaXQgKGFuZCBpbiBtb3N0IHNoZWxscyksIHRoaXMKKyAgIG1hdGNoZXMgb25l IGRpZ2l0IGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzLCB3aXRoaW4KKyAgIHBh cmVudGhlc2VzLiBIZXJlIGFyZSBzb21lIGhpbnRzOgorCisgICAgICogQWx0aG91Z2ggeW91IGNh bid0IG1hdGNoIGFueSBzZXF1ZW5jZSBvZiBkaWdpdHMgKG9yIGxldHRlcnMsIGV0YyksCisgICAg ICAgeW91IGNhbiBtYXRjaCAoc2F5KSAxLCAyLCBvciAzIG9mIHRoZW0gaW4gcm93LiBGb3IgZXhh bXBsZSwgdGhlCisgICAgICAgZm9sbG93aW5nIHBhdHRlcm4gbWF0Y2hlcyBLZXJtaXQgYmFja3Vw IGZpbGVzICh3aXRoIGJhY2t1cCBudW1iZXJzCisgICAgICAgZnJvbSAxIHRvIDk5OSk6CisgKi5+ e1sxLTldLFsxLTldWzAtOV0sWzEtOV1bMC05XVswLTldfX4KKworICAgICAqIFRoZXJlIGlzIHBy ZXNlbnRseSBubyBOT1Qgb3BlcmF0b3IsIHNvIG5vIHdheSB0byBtYXRjaCBhbnkKKyAgICAgICBj aGFyYWN0ZXIgb3Igc3RyaW5nIEVYQ0VQVCB0aGUgb25lKHMpIHNob3duLgorCisgICBJbiBvdGhl ciB3aWxkY2FyZGluZyBuZXdzLi4uCisKKyAgICAgKiBZb3UgbWF5IG5vdyAic2VuZCB4eHgiIHdo ZXJlICJ4eHgiIGlzIGEgZGlyZWN0b3J5IG5hbWUsIGFuZCB0aGlzCisgICAgICAgd2lsbCBzZW5k IGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgZGlyZWN0b3J5IHh4eCwgYXMgaWYgeW91IGhhZCB0eXBl ZAorICAgICAgICJzZW5kIHh4eC8qIi4gWW91IGNhbiBhbHNvIHVzZSB0aGUgc3BlY2lhbCBzaG9y dGhhbmQgInNlbmQgLiIgdG8KKyAgICAgICBzZW5kIGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgY3Vy cmVudCBkaXJlY3RvcnkuCisgICAgICogVG8gZWFzaWx5IHNraXAgb3ZlciBiYWNrdXAgZmlsZXMg KHRoZSBvbmVzIHdob3NlIG5hbWVzIGVuZCBsaWtlCisgICAgICAgLn4yMn4pIHdoZW4gc2VuZGlu ZywgeW91IGNhbiB1c2UgU0VORCAvTk9CQUNLVVAgKHNlZSBbNTA3XVNlY3Rpb24KKyAgICAgICA0 LjAuNiBmb3IgZGV0YWlscykuCisgICAgICogV2hlbiBjaG9vc2luZyBLZXJtaXQgdG8gZXhwYW5k IHdpbGRjYXJkcywgcmF0aGVyIHRoYW4gdGhlIHNoZWxsLAorICAgICAgIHlvdSBjYW4gY2hvb3Nl IHdoZXRoZXIgImRvdCBmaWxlcyIgLS0gZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aAorICAg ICAgICIuIiwgd2hpY2ggYXJlIG5vcm1hbGx5ICJpbnZpc2libGUiIC0tIHNob3VsZCBiZSBtYXRj aGVkOgorIFNFVCBXSUxEIEtFUk1JVCAvTk8tTUFUQ0gtRE9ULUZJTEVTICh0aGlzIGlzIHRoZSBk ZWZhdWx0KQorIFNFVCBXSUxEIEtFUk1JVCAvTUFUQ0gtRE9ULUZJTEVTICAgICh0aGlzIGFsbG93 cyBtYXRjaGluZyBvZiAiLiIgZmlsZXMpCisKKyAgICAgICBvciBpbmNsdWRlIHRoZSAvRE9URklM RVMgb3IgL05PRE9URklMRVMgc3dpdGNoIG9uIHRoZSBjb21tYW5kIHlvdQorICAgICAgIGFyZSB1 c2luZywgc3VjaCBhcyBTRU5EIG9yIERJUkVDVE9SWS4KKyAgICAgKiBDb21tYW5kcyBzdWNoIGFz IERJUkVDVE9SWSBhbmQgU0VORCBhbGxvdyByZWN1cnNpdmUgZGlyZWN0b3J5CisgICAgICAgdHJh dmVyc2FsLiBUaGVyZSBhcmUgYWxzbyBuZXcgZnVuY3Rpb25zIGZvciB0aGlzIHRvIHVzZSBpbiBz Y3JpcHRzLgorICAgICAgIFNlZSBbNTA4XVNlY3Rpb24gNC4xMSBmb3IgZGV0YWlscy4KKworICAg V2hlbiBidWlsZGluZyBmaWxlIGxpc3RzIGluIFVOSVgsIEMtS2VybWl0IGZvbGxvd3Mgc3ltYm9s aWMgbGlua3MuCisgICBCZWNhdXNlIG9mIHRoaXMsIHlvdSBtaWdodCBlbmNvdW50ZXIgYW55IG9y IGFsbCBvZiB0aGUgZm9sbG93aW5nCisgICBwaGVub21lbmE6CisKKyAgICAgKiBNdWx0aXBsZSBj b3BpZXMgb2YgdGhlIHNhbWUgZmlsZTsgZS5nLiBvbmUgZnJvbSBpdHMgcmVhbCBkaXJlY3RvcnkK KyAgICAgICBhbmQgb3RoZXJzIGZyb20gbGlua3MgdG8gaXRzIHJlYWwgZGlyZWN0b3J5LCBpZiBi b3RoIHRoZSByZWFsCisgICAgICAgZGlyZWN0b3J5IGFuZCB0aGUgbGlua3MgdG8gaXQgYXJlIGlu IHRoZSB3aWxkY2FyZCBleHBhbnNpb24gbGlzdC4KKyAgICAgKiBBIGNvbW1hbmQgbWlnaHQgdW5l eHBlY3RlZGx5ICJoYW5nIiBmb3IgYSBsb25nIHRpbWUgYmVjYXVzZSBhbiBORlMKKyAgICAgICBs aW5rIG1pZ2h0IG5vdCBiZSByZXNwb25kaW5nLCBvciB0aGUgZGlyZWN0b3J5IHlvdSBhcmUgbG9v a2luZyBhdAorICAgICAgIGNvbnRhaW5zIGEgbGluayB0byBhIGh1Z2UgZGlyZWN0b3J5IHRyZWUg KGV4YW1wbGU6ICJkaXJlY3RvcnkKKyAgICAgICAvcmVjdXJzaXZlIC9ldGMiIHdoZW4gL2V0Yy9z cG9vbCBpcyBhIHN5bWxpbmsgdG8gL3Zhci9zcG9vbCwgd2hpY2gKKyAgICAgICBpcyBhIGxhcmdl IG9yZ2FuaXphdGlvbidzIGluY29taW5nIGVtYWlsIGRpcmVjdG9yeSwgY29udGFpbmluZyB0ZW5z CisgICAgICAgb2YgdGhvdXNhbmRzIG9mIHN1YmRpcmVjdG9yaWVzKS4KKworICAgVGhlIHNpemUg b2YgdGhlIGZpbGUgbGlzdCB0aGF0IEtlcm1pdCBjYW4gYnVpbGQgaXMgbGltaXRlZCBpbiBtb3N0 CisgICBDLUtlcm1pdCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBsaW1pdCwgaWYgYW55LCBkZXBlbmRz IG9uIHRoZQorICAgaW1wbGVtZW50YXRpb24uIFVzZSB0aGUgU0hPVyBGRUFUVVJFUyBjb21tYW5k IGFuZCBsb29rIGluIHRoZQorICAgYWxwaGFiZXRpemVkIG9wdGlvbnMgbGlzdCBmb3IgTUFYV0xE IHRvIHNlZSB0aGUgdmFsdWUuCisKKzQuOS4yLiBJbiBLZXJtaXQgOTUKKworICAgS2VybWl0IDk1 IDEuMS4xOSBhbmQgbGF0ZXIgdXNlcyB0aGUgc2FtZSBwYXR0ZXJuIG1hdGNoaW5nIHN5bnRheCBh cyBpbgorICAgVU5JWCwgYnV0IChhcyBhbHdheXMpIHlvdSB3aWxsIGVuY291bnRlciBudW1lcm91 cyBkaWZmaWN1bHRpZXMgaWYgeW91CisgICB1c2UgYmFja3NsYXNoIChcKSBhcyB0aGUgZGlyZWN0 b3J5IHNlcGFyYXRvci4gSW4gYW55IGNvbW1hbmQgd2hlcmUgSzk1CisgICBwYXJzZXMgZmlsZW5h bWVzIGl0c2VsZiAodGhhdCBpcywgcHJhY3RpY2FsbHkgYW55IGZpbGUtb3JpZW50ZWQgY29tbWFu ZAorICAgZXhjZXB0IFJVTiksIHlvdSBjYW4gdXNlIGZvcndhcmQgc2xhc2ggKC8pIGFzIHRoZSBk aXJlY3Rvcnkgc2VwYXJhdG9yCisgICB0byBhdm9pZCBhbGwgdGhlIG5hc3R5IGNvbmZsaWN0cy4K KworNC45LjMuIEluIFZNUywgQU9TL1ZTLCBPUy05LCBWT1MsIGV0Yy4KKworICAgUGxhdGZvcm1z IG90aGVyIHRoYW4gVU5JWCwgV2luZG93cyA5NS85OC9OVCwgYW5kIE9TLzIgaGF2ZSB0aGVpciBv d24KKyAgIGZpbGVuYW1lIG1hdGNoaW5nIGNhcGFiaWxpdGllcyB0aGF0IGFyZSwgaW4gZ2VuZXJh bCwgZGlmZmVyZW50IGZyb20KKyAgIEtlcm1pdCdzIGJ1aWx0LWluIG9uZXMgYW5kIGluIGFueSBj YXNlIG1pZ2h0IGNvbmZsaWN0IHdpdGggdGhlbS4gRm9yCisgICBleGFtcGxlLCBbXSBlbmNsb3Nl cyBkaXJlY3RvcnkgbmFtZXMgaW4gVk1TLgorCisgICBOZXZlcnRoZWxlc3MgeW91IGNhbiBzdGls bCB1c2UgYWxsIHRoZSBwYXR0ZXJuLW1hdGNoaW5nIGNhcGFiaWxpdGllcworICAgZGVzY3JpYmVk IGluIFs1MDldU2VjdGlvbiA0LjkuMSBieSBsb2FkaW5nIGEgZmlsZSBsaXN0IGludG8gYW4gYXJy YXkKKyAgIChlLmcuIHdpdGggXGZmaWxlcygqLCZhKSwgc2VlIFs1MTBdU2VjdGlvbiA0LjExLjMp IGFuZCB0aGVuIHVzaW5nIElGCisgICBNQVRDSCBvbiB0aGUgbWVtYmVycy4KKworNC4xMC4gQWRk aXRpb25hbCBQYXRobmFtZSBDb250cm9scworCisgICBJbiB2ZXJzaW9uIDYuMCBhbmQgZWFybGll ciwgQy1LZXJtaXQncyBTRVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTCisgICBjb21tYW5k IGhhZCBvbmx5IE9OIGFuZCBPRkYgYXMgb3B0aW9ucy4gSW4gdmVyc2lvbiA3LjAsIHRoZXJlIGFy ZSBtb3JlCisgICBjaG9pY2VzOgorCisgICBTRVQgU0VORCBQQVRITkFNRVMgT0ZGCisgICAgICAg ICAgV2hlbiBzZW5kaW5nIGEgZmlsZSwgc3RyaXAgYWxsIGRpc2svZGlyZWN0b3J5IGluZm9ybWF0 aW9uIGZyb20KKyAgICAgICAgICB0aGUgbmFtZS4gRXhhbXBsZTogInNlbmQgL3Vzci9vbGdhL2xl dHRlcnMvb29mYS50eHQiIHNlbmRzIHRoZQorICAgICAgICAgIGZpbGUgYXMgIm9vZmEudHh0Ii4g VGhpcyBhcHBsaWVzIHRvIGFjdHVhbCBmaWxlbmFtZXMsIG5vdCB0byBhbnkKKyAgICAgICAgICBh cy1uYW1lIHlvdSBtaWdodCBzcGVjaWZ5LgorCisgICBTRVQgU0VORCBQQVRITkFNRVMgUkVMQVRJ VkUKKyAgICAgICAgICBXaGVuIHNlbmRpbmcgYSBmaWxlLCBsZWF2ZSB0aGUgcGF0aG5hbWUgb24g YXMgZ2l2ZW4uIEZvcgorICAgICAgICAgIGV4YW1wbGUsIGlmIHlvdXIgY3VycmVudCBkaXJlY3Rv cnkgaXMgL3Vzci9vbGdhLCAic2VuZAorICAgICAgICAgIGxldHRlcnMvb29mYS50eHQiIHNlbmRz IHRoZSBmaWxlIGFzICJsZXR0ZXJzL29vZmEudHh0Iiwgbm90CisgICAgICAgICAgIi91c3Ivb2xn YS9sZXR0ZXJzL29vZmEudHh0IiBvciAibGV0dGVycy50eHQiLgorCisgICBTRVQgU0VORCBQQVRI TkFNRVMgQUJTT0xVVEUKKyAgICAgICAgICBXaGVuIHNlbmRpbmcgYSBmaWxlLCBjb252ZXJ0IGl0 cyBuYW1lIHRvIHRoZSBmdWxsLCBhYnNvbHV0ZQorICAgICAgICAgIGxvY2FsIHBhdGhuYW1lLiBG b3IgZXhhbXBsZSwgaWYgeW91ciBjdXJyZW50IGRpcmVjdG9yeSBpcworICAgICAgICAgIC91c3Iv b2xnYSwgInNlbmQgbGV0dGVycy9vb2ZhLnR4dCIgc2VuZHMgdGhlIGZpbGUgYXMKKyAgICAgICAg ICAiL3Vzci9vbGdhL2xldHRlcnMvb29mYS50eHQiLiBOT1RFOiBFdmVuIHdpdGggdGhpcyBzZXR0 aW5nLAorICAgICAgICAgIGRldmljZSBhbmQvb3Igbm9kZSBuYW1lcyBhcmUgbm90IGluY2x1ZGVk LiBGb3IgZXhhbXBsZSwgaW4gVk1TLAorICAgICAgICAgIGFueSBub2RlIG9yIGRldmljZSBuYW1l IGlzIHN0cmlwcGVkOyBpbiBXaW5kb3dzIG9yIE9TLzIsIGFueQorICAgICAgICAgIGRpc2sgbGV0 dGVyIGlzIHN0cmlwcGVkLgorCisgICBTRVQgUkVDRUlWRSBQQVRITkFNRVMgT0ZGCisgICAgICAg ICAgV2hlbiByZWNlaXZpbmcgYSBmaWxlLCBzdHJpcCBhbGwgZGlzay9kaXJlY3RvcnkgaW5mb3Jt YXRpb24gZnJvbQorICAgICAgICAgIHRoZSBuYW1lIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHN0b3Jl IGl0LiBUaGlzIGFwcGxpZXMgdG8gaW5jb21pbmcKKyAgICAgICAgICBmaWxlbmFtZSwgbm90IHRv IGFueSBhcy1uYW1lIHlvdSBtaWdodCBzcGVjaWZ5LiBFeGFtcGxlOiBJZiBhCisgICAgICAgICAg ZmlsZSBhcnJpdmVzIHVuZGVyIHRoZSBuYW1lICIvdXNyL29sZ2EvbGV0dGVycy9vb2ZhLnR4dCIg aXQgaXMKKyAgICAgICAgICBzdG9yZWQgc2ltcGx5IGFzICJvb2ZhLnR4dCIgaW4geW91ciBkb3du bG9hZCBkaXJlY3Rvcnkgb3IsIGlmIG5vCisgICAgICAgICAgZG93bmxvYWQgZGlyZWN0b3J5IGhh cyBiZWVuIHNwZWNpZmllZCwgaW4geW91ciBjdXJyZW50CisgICAgICAgICAgZGlyZWN0b3J5Lgor CisgICBTRVQgUkVDRUlWRSBQQVRITkFNRVMgUkVMQVRJVkUKKyAgICAgICAgICBXaGVuIHJlY2Vp dmluZyBhIGZpbGUsIGxlYXZlIHRoZSBwYXRobmFtZSBvbiBhcyBpdCBhcHBlYXJzIGluCisgICAg ICAgICAgdGhlIGluY29taW5nIG5hbWUsIGJ1dCBpZiB0aGUgaW5jb21pbmcgbmFtZSBhcHBlYXJz IHRvIGJlCisgICAgICAgICAgYWJzb2x1dGUsIG1ha2UgaXQgcmVsYXRpdmUgdG8geW91ciBjdXJy ZW50IG9yIGRvd25sb2FkCisgICAgICAgICAgZGlyZWN0b3J5LiBFeGFtcGxlczoKKworICAgICAg ICAgICsgIm9vZmEudHh0IiBpcyBzdG9yZWQgYXMgIm9vZmEudHh0Ii4KKyAgICAgICAgICArICJs ZXR0ZXJzL29vZmEudHh0IiBpcyBzdG9yZWQgYXMgImxldHRlcnMvb29mYS50eHQiOyB0aGUKKyAg ICAgICAgICAgICJsZXR0ZXJzIiBzdWJkaXJlY3RvcnkgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5v dCBhbHJlYWR5CisgICAgICAgICAgICBleGlzdC4KKyAgICAgICAgICArICIvdXNyL29sZ2EvbGV0 dGVycy9vb2ZhLnR4dCIgaXMgc3RvcmVkIGFzCisgICAgICAgICAgICAidXNyL29sZ2EvbGV0dGVy cy9vb2ZhLnR4dCIgaW4geW91ciBjdXJyZW50IG9yIGRvd25sb2FkCisgICAgICAgICAgICBkaXJl Y3RvcnksIGFuZCB0aGUgInVzciIsICJ1c3Ivb2xnYSIsIGV0YywgZGlyZWN0b3JpZXMgYXJlCisg ICAgICAgICAgICBjcmVhdGVkIGlmIHRoZXkgZG8gbm90IGV4aXN0LgorCisgICBTRVQgUkVDRUlW RSBQQVRITkFNRVMgQUJTT0xVVEUKKyAgICAgICAgICBUaGUgaW5jb21pbmcgZmlsZW5hbWUgaXMg dXNlZCBhcyBnaXZlbi4gVGh1cyBpdCBjYW5ub3QgYmUgc3RvcmVkCisgICAgICAgICAgdW5sZXNz IHRoZSBnaXZlbiBwYXRoIChpZiBhbnkpIGFscmVhZHkgZXhpc3RzIG9yIGNhbiBiZSBjcmVhdGVk LgorICAgICAgICAgIEluIHRoaXMgY2FzZSwgbm9kZSwgZGV2aWNlLCBvciBkaXNrIGRlc2lnbmF0 aW9ucyBhcmUgTk9UCisgICAgICAgICAgc3RyaXBwZWQsIHNpbmNlIHRoZXkgbW9zdCBsaWtlbHkg d2VyZSBnaXZlbiBleHBsaWNpdGx5IGJ5IHRoZQorICAgICAgICAgIHVzZXIgYXMgYW4gYXMtbmFt ZSwgbWVhbnQgdG8gYmUgdXNlZCBhcyBnaXZlbi4KKworICAgU0VUIFJFQ0VJVkUgUEFUSE5BTUVT IEFVVE8KKyAgICAgICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0LCBhbmQgbWVhbnMgUkVMQVRJVkUg aWYgdGhlIHNlbmRlciB0ZWxscyBtZQorICAgICAgICAgIGl0IGlzIGEgcmVjdXJzaXZlIHRyYW5z ZmVyLCBPRkYgb3RoZXJ3aXNlLgorCisgICBTZXQgRklMRSBOQU1FUyBDT05WRVJURUQgbm93IGFs c28gYWZmZWN0cyBwYXRobmFtZXMgdG9vLiBXaGVuIFBBVEhOQU1FUworICAgYXJlIFJFTEFUSVZF IG9yIEFCU09MVVRFIGFuZCBGSUxFIE5BTUVTIGFyZSBDT05WRVJURUQsIHRoZSBmaWxlIHNlbmRl cgorICAgY29udmVydHMgaXRzIG5hdGl2ZSBkaXJlY3RvcnktbmFtZSBmb3JtYXQgdG8gVU5JWCBm b3JtYXQsIGFuZCB0aGUgZmlsZQorICAgcmVjZWl2ZXIgY29udmVydHMgZnJvbSBVTklYIGZvcm1h dCB0byBpdHMgbmF0aXZlIG9uZTsgdGh1cyBVTklYIGZvcm1hdAorICAgaXMgdGhlIGNvbW1vbiBp bnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gZm9yIGRpcmVjdG9yeSBoaWVyYXJjaGllcywgYXMK KyAgIGl0IGlzIGluIHRoZSBaSVAvVU5aSVAgcHJvZ3JhbXMgKHdoaWNoIGlzIHdoeSBaSVAgYXJj aGl2ZXMgYXJlCisgICB0cmFuc3BvcnRhYmxlIGFtb25nLCBVTklYLCBET1MsIGFuZCBWTVMpLgor CisgICBIZXJlJ3MgYW4gZXhhbXBsZSBpbiB3aGljaCBhIGZpbGUgaXMgc2VudCBmcm9tIFdpbmRv d3MgdG8gVU5JWCB3aXRoCisgICByZWxhdGl2ZSBwYXRobmFtZXMgYW5kIEZJTEUgTkFNRVMgQ09O VkVSVEVEOgorCisgIFNvdXJjZSBuYW1lICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZSBuYW1l ICAgICAgRGVzdGluYXRpb24gTmFtZQorICBDOlxLOTVcVE1QXE9PRkEuVFhUICAgICAgICBLOTUv VE1QL09PRkEuVFhUICAgICAgIGs5NS90bXAvb29mYS50eHQKKworICAgSW4gYSBtb3JlIGNvbXBs aWNhdGVkIGV4YW1wbGUsIHdlIHNlbmQgdGhlIHNhbWUgZmlsZSBmcm9tIFdpbmRvd3MgdG8KKyAg IFZNUzoKKworICBTb3VyY2UgbmFtZSAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGUgbmFtZSAg ICAgIERlc3RpbmF0aW9uIE5hbWUKKyAgQzpcSzk1XFRNUFxPT0ZBLlRYVCAgICAgICAgSzk1L1RN UC9PT0ZBLlRYVCAgICAgICBbLks5NS5UTVBdT09GQS5UWFQKKworICAgKE5vdGUgdGhhdCBkaXNr IGxldHRlcnMgYW5kIGRldmljZSBkZXNpZ25hdGlvbnMgYXJlIGFsd2F5cyBzdHJpcHBlZAorICAg d2hlbiBwYXRobmFtZXMgYXJlIHJlbGF0aXZlKS4KKworICAgQXMgeW91IGNhbiBpbWFnaW5lLCBh cyBtb3JlIGFuZCBtb3JlIGRpcmVjdG9yeSBmb3JtYXRzIGFyZSBjb25zaWRlcmVkLAorICAgdGhp cyBhcHByb2FjaCBrZWVwcyBtYXR0ZXJzIHNpbXBsZTogb24gZWFjaCBwbGF0Zm9ybSwgS2VybWl0 IG11c3Qga25vdworICAgb25seSBpdHMgb3duIGxvY2FsIGZvcm1hdCBhbmQgdGhlIGNvbW1vbiBp bnRlcm1lZGlhdGUgb25lLiBJbiBtb3N0CisgICBjYXNlcywgdGhlIHJlY2VpdmVyIGNhbiBkZXRl Y3Qgd2hpY2ggZm9ybWF0IGlzIHVzZWQgYXV0b21hdGljYWxseS4KKworNC4xMS4gUmVjdXJzaXZl IFNFTkQgYW5kIEdFVDogVHJhbnNmZXJyaW5nIERpcmVjdG9yeSBUcmVlcworCisgICBDLUtlcm1p dCA3LjAgaW4gc2VsZWN0ZWQgdmVyc2lvbnMgKFVOSVgsIFZNUywgVk9TLCBBT1MvVlMsIFdpbmRv d3MsIGFuZAorICAgT1MvMiBhdCB0aGlzIHdyaXRpbmcpIG5vdyBwZXJtaXRzIHRoZSBTRU5EIGNv bW1hbmQgdG8gdHJhdmVyc2UKKyAgIGRpcmVjdG9yaWVzICJyZWN1cnNpdmVseSIgaWYgeW91IGFz ayBpdCB0bzsgdGhhdCBpcywgdG8gc2VuZCBmaWxlcyBmcm9tCisgICB0aGUgY3VycmVudCBvciBz cGVjaWZpZWQgZGlyZWN0b3J5IGFuZCBhbGwgb2YgaXRzIHN1YmRpcmVjdG9yaWVzIHRvbywKKyAg IGFuZCB0aGVpciBzdWJkaXJlY3RvcmllcywgZXRjLiAoU29tZSBvdGhlciBjb21tYW5kcyBjYW4g ZG8gdGhpcyB0b28sCisgICBpbmNsdWRpbmcgRElSRUNUT1JZLikKKworICAgVGhpcyBmZWF0dXJl IGlzIG5ldyB0byBVTklYLCBXaW5kb3dzLCBWT1MsIGFuZCBPUy8yLiBWTVMgYW5kIEFPUy9WUwor ICAgaGF2ZSBhbHdheXMgaW5jbHVkZWQgIndpbGRjYXJkIiBvciAidGVtcGxhdGUiIGNoYXJhY3Rl cnMgdGhhdCBhbGxvdworICAgdGhpcywgYW5kIGluIHRoaXMgY2FzZSwgcmVjdXJzaXZlIGRpcmVj dG9yeSB0cmF2ZXJzYWwgY291bGQgaGFwcGVuCisgICBiZWhpbmQgS2VybWl0J3MgYmFjaywgaS5l LiBLZXJtaXQgZG9lcyBub3QgaGF2ZSB0byBkbyBpdCBpdHNlbGYgKGluCisgICBWTVMsIHRoZSBu b3RhdGlvbiBpcyAiWy4uLl0iIG9yICJbZGlyZWN0b3J5Li4uXSI7IGluIEFPUy9WUyBpcyAiIyIp LiBJbgorICAgQy1LZXJtaXQgNy4wLCBob3dldmVyLCBTRU5EIC9SRUNVUlNJVkUgaXMgc3VwcG9y dGVkIGJ5IEMtS2VybWl0IGl0c2VsZgorICAgZm9yIFZNUy4KKworNC4xMS4xLiBDb21tYW5kLUxp bmUgT3B0aW9ucworCisgICBUbyBkZXNjZW5kIGEgZGlyZWN0b3J5IHRyZWUgd2hlbiBzZW5kaW5n IGZpbGVzLCB1c2UgdGhlIC1MIGNvbW1hbmQtbGluZQorICAgb3B0aW9uIHRvIGluZGljYXRlIHRo YXQgdGhlIHNlbmQgb3BlcmF0aW9uIGlzIHRvIGJlIHJlY3Vyc2l2ZSwgYW5kCisgICBpbmNsdWRl IGEgbmFtZSBvciBwYXR0ZXJuIHRvIGJlIHNlbnQuIFdoZW4gZ2l2aW5nIGEgcGF0dGVybiwgeW91 IHNob3VsZAorICAgZW5jbG9zZSBpdCBpbiBxdW90ZXMgdG8gcHJldmVudCB0aGUgc2hlbGwgZnJv bSBleHBhbmRpbmcgaXQuIEV4YW1wbGVzOgorCisgICQga2VybWl0IC1McyAiL3Vzci9vbGdhLyoi ICMgc2VuZCBhbGwgb2YgT2xnYSdzIGZpbGVzIGluIGFsbCBoZXIgZGlyZWN0b3JpZXMKKyAgJCBr ZXJtaXQgLUxzIGZvby50eHQgICAgICAgIyBzZW5kIGFsbCBmb28udHh0IGZpbGVzIGluIHRoaXMg ZGlyZWN0b3J5IHRyZWUKKyAgJCBrZXJtaXQgLUxzICIqLnR4dCIgICAgICAgIyBzZW5kIGFsbCAu dHh0IGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IHRyZWUKKyAgJCBrZXJtaXQgLUxzICJsZXR0ZXJz LyoiICAgIyBzZW5kIGFsbCBmaWxlcyBpbiB0aGUgbGV0dGVycyBkaXJlY3RvcnkgdHJlZQorICAk IGtlcm1pdCAtTHMgbGV0dGVycyAgICAgICAjIHNlbmQgYWxsIGZpbGVzIGluIHRoZSBsZXR0ZXJz IGRpcmVjdG9yeSB0cmVlCisgICQga2VybWl0IC1McyAiKiIgICAgICAgICAgICMgc2VuZCBhbGwg ZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZQorICAkIGtlcm1pdCAtTHMgLiAgICAgICAgICAg ICAjIFVOSVggb25seTogc2VuZCBhbGwgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdHJlZQorICAk IGtlcm1pdCAtcyAuICAgICAgICAgICAgICAjIFVOSVggb25seTogYSBmaWxlbmFtZSBvZiAuIGlt cGxpZXMgLUwKKworICAgSWYgeW91IGxldCB0aGUgc2hlbGwgZXhwYW5kIHdpbGRjYXJkcywgS2Vy bWl0IG9ubHkgc2VuZHMgZmlsZXMgd2hvc2UKKyAgIG5hbWVzIG1hdGNoIGZpbGVzIGluIHRoZSBj dXJyZW50IG9yIGdpdmVuIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUgc2hlbGwKKyAgIHJlcGxhY2Vz IGFuIHVucXVvdGVkIHdpbGRjYXJkIGV4cHJlc3Npb24gd2l0aCB0aGUgbGlzdCBvZiBtYXRjaGlu ZworICAgZmlsZXMgLS0gYW5kIHRoZSBzaGVsbCBkb2VzIG5vdCBidWlsZCByZWN1cnNpdmUgbGlz dHMuIE5vdGUgdGhhdCB0aGUKKyAgICIuIiBub3RhdGlvbiBmb3IgdGhlIHRyZWUgcm9vdGVkIGF0 IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBhbGxvd2VkCisgICBvbmx5IGluIFVOSVgsIHNpbmNl IGluIFdpbmRvd3MgYW5kIE9TLzIsIGl0IG1lYW5zICIqLioiIChub25yZWN1cnNpdmUpLgorCis0 LjExLjIuIFRoZSBTRU5EIC9SRUNVUlNJVkUgQ29tbWFuZAorCisgICBJZiB5b3UgaW5jbHVkZSB0 aGUgL1JFQ1VSU0lWRSBzd2l0Y2ggaW4gYSBTRU5EIChvciBNT1ZFLCBvciBzaW1pbGFyKQorICAg Y29tbWFuZCwgaXQgbWVhbnMgdG8gZGVzY2VuZCB0aGUgY3VycmVudCBvciBzcGVjaWZpZWQgZGly ZWN0b3J5IHRyZWUKKyAgIHNlYXJjaGluZyBmb3IgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhl IGdpdmVuIG5hbWUgb3IgcGF0dGVybi4gU2luY2UKKyAgIHRoaXMgaXMgbm90IHRlcnJpYmx5IHVz ZWZ1bCB1bmxlc3MgeW91IGFsc28gaW5jbHVkZSBwYXRobmFtZXMgd2l0aCB0aGUKKyAgIG91dGJv dW5kIGZpbGVzLCB0aGUgL1JFQ1VSU0lWRSBzd2l0Y2ggYWxzbyBpbmNsdWRlcyBhbiBpbXBsaWNp dAorICAgL1BBVEhOQU1FUzpSRUxBVElWRSBzd2l0Y2ggKHdoaWNoIHlvdSBjYW4gdW5kbyBieSBp bmNsdWRpbmcgYW4gZXhwbGljaXQKKyAgIC9QQVRITkFNRVMgc3dpdGNoIGFmdGVyIHRoZSAvUkVD VVJTSVZFIHN3aXRjaCkuCisKKyAgIEV4YW1wbGVzOgorCisgICBTRU5EIC9SRUNVUlNJVkUgKgor ICAgICAgICAgIFNlbmRzIGFsbCBvZiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5 IGFuZCBhbGwgdGhlCisgICAgICAgICAgZmlsZXMgaW4gYWxsIG9mIGl0cyBzdWJkaXJlY3Rvcmll cywgYW5kIGFsbCBvZiB0aGVpcgorICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLCBldGMsIGluY2x1 ZGluZyB0aGVpciByZWxhdGl2ZSBwYXRobmFtZXMuIEVtcHR5CisgICAgICAgICAgZGlyZWN0b3Jp ZXMgYXJlIG5vdCBzZW50LgorCisgICBTRU5EIC9SRUNVUlNJVkUgL1BBVEhOQU1FUzpBQlNPTFVU RSAqCisgICAgICAgICAgU2VuZHMgYWxsIG9mIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJl Y3RvcnkgYW5kIGFsbCB0aGUKKyAgICAgICAgICBmaWxlcyBpbiBhbGwgb2YgaXRzIHN1YmRpcmVj dG9yaWVzLCBhbmQgYWxsIG9mIHRoZWlyCisgICAgICAgICAgc3ViZGlyZWN0b3JpZXMsIGV0Yywg aW5jbHVkaW5nIHRoZWlyIGFic29sdXRlIHBhdGhuYW1lcy4KKworICAgU0VORCAvUkVDVVJTSVZF IC9QQVRITkFNRVM6T0ZGICoKKyAgICAgICAgICBTZW5kcyBhbGwgb2YgdGhlIGZpbGVzIGluIHRo ZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgYWxsIHRoZQorICAgICAgICAgIGZpbGVzIGluIGFsbCBv ZiBpdHMgc3ViZGlyZWN0b3JpZXMsIGFuZCBhbGwgb2YgdGhlaXIKKyAgICAgICAgICBzdWJkaXJl Y3RvcmllcywgZXRjLCB3aXRob3V0IHBhdGhuYW1lcy4KKworICAgU0VORCAvUkVDVVJTSVZFIC91 c3Ivb2xnYS8qCisgICAgICAgICAgU2VuZHMgYWxsIG9mIHRoZSBmaWxlcyBpbiB0aGUgL3Vzci9v bGdhIGRpcmVjdG9yeSBhbmQgYWxsIHRoZQorICAgICAgICAgIGZpbGVzIGluIGFsbCBvZiBpdHMg c3ViZGlyZWN0b3JpZXMsIGFuZCBhbGwgb2YgdGhlaXIKKyAgICAgICAgICBzdWJkaXJlY3Rvcmll cywgZXRjLgorCisgICBTRU5EIC9SRUNVUlNJVkUgL3Vzci9vbGdhIChvciAvdXNyL29sZ2EvKQor ICAgICAgICAgIFNhbWUgYXMgYWJvdmUuIElmIHRoZSBuYW1lIGlzIGEgZGlyZWN0b3J5IG5hbWUg KHdpdGggb3Igd2l0aG91dAorICAgICAgICAgIGEgdHJhaWxpbmcgc2xhc2gpLCBpdHMgZmlsZXMg YXJlIHNlbnQsIGFuZCB0aG9zZSBvZiBpdHMKKyAgICAgICAgICBzdWJkaXJlY3RvcmllcywgYW5k IHRoZWlyIHN1YmRpcmVjdG9yaWVzLCBldGMgKHNlZSBbNTExXVNlY3Rpb24KKyAgICAgICAgICA0 LjkpLgorCisgICBTRU5EIC9SRUNVUlNJVkUgL1RFWFQgL3Vzci9vbGdhLyoudHh0CisgICAgICAg ICAgQXMgYWJvdmUsIGJ1dCBvbmx5IGZpbGVzIHdob3NlIG5hbWVzIGVuZCB3aXRoICIudHh0IiBh cmUgc2VudCwKKyAgICAgICAgICBhbmQgdGhleSBhcmUgc2VudCBpbiB0ZXh0IG1vZGUgKGFzIHRo ZXkgd291bGQgYmUgYnkgZGVmYXVsdAorICAgICAgICAgIGFueXdheSBpZiBTRVQgRklMRSBQQVRU RVJOUyBpcyBPTiBvciBBVVRPKS4KKworICAgU0VORCAuCisgICAgICAgICAgVU5JWCBvbmx5OiBT ZW5kIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICBTRU5EIC9S RUNVUlNJVkUgLgorICAgICAgICAgIFVOSVggb25seTogU2VuZHMgYWxsIG9mIHRoZSBmaWxlcyBp biB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kCisgICAgICAgICAgYWxsIG9mIGl0cyBzdWJkaXJl Y3RvcmllcywgZXRjIChbNTEyXVNlY3Rpb24gNC45KS4KKworICAgVGhlIC9SRUNVUlNJVkUgc3dp dGNoIGlzIGRpZmZlcmVudCBmcm9tIG1vc3Qgb3RoZXIgc3dpdGNoZXMgaW4gdGhhdCBpdHMKKyAg IGVmZmVjdCBpcyBpbW1lZGlhdGUgKGJ1dCBzdGlsbCBsb2NhbCB0byB0aGUgY29tbWFuZCBpbiB3 aGljaCBpdCBpcworICAgZ2l2ZW4pLCBiZWNhdXNlIGl0IGRldGVybWluZXMgaG93IGZpbGVuYW1l cyBhcmUgdG8gYmUgcGFyc2VkLiBGb3IKKyAgIGV4YW1wbGUsICJzZW5kICoudHh0IiBmYWlscyB3 aXRoIGEgcGFyc2UgZXJyb3IgKCJObyBmaWxlcyBtYXRjaCIpIGlmCisgICB0aGVyZSBhcmUgbm8g Ki50eHQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBidXQgInNlbmQgL3JlY3Vyc2l2 ZQorICAgKi50eHQiIHN1Y2NlZWRzIGlmIHRoZXJlIGFyZSAiLnR4dCIgZmlsZXMgYW55d2hlcmUg aW4gdGhlIHRyZWUgcm9vdGVkCisgICBhdCB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgIFRo ZSAvUkVDVVJTSVZFIHN3aXRjaCBhbHNvIGFmZmVjdHMgdGhlIGZpbGUgbGlzdHMgZGlzcGxheWVk IGlmIHlvdSB0eXBlCisgICAiPyIgaW4gYSBmaWxlbmFtZSBmaWVsZC4gInNlbmQgLi8/IiBsaXN0 cyB0aGUgcmVndWxhciBmaWxlcyBpbiB0aGUKKyAgIGN1cnJlbnQgZGlyZWN0b3J5LCBidXQgInNl bmQgL3JlY3Vyc2l2ZSAuLz8iIGxpc3RzIHRoZSBlbnRpcmUgZGlyZWN0b3J5CisgICB0cmVlIHJv b3RlZCBhdCB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKzQuMTEuMy4gVGhlIEdFVCAvUkVDVVJT SVZFIENvbW1hbmQKKworICAgSW4gYSBjbGllbnQvc2VydmVyIHNldHRpbmcsIHRoZSBjbGllbnQg Y2FuIGFsc28gcmVxdWVzdCBhIHJlY3Vyc2l2ZQorICAgdHJhbnNmZXIgd2l0aDoKKworICAgR0VU IC9SRUNVUlNJVkUgWyBvdGhlciBzd2l0Y2hlcyBdIHJlbW90ZS1maWxlc3BlYyBbIGxvY2FsLXNw ZWMgXQorCisgICBJbiB3aGljaCByZW1vdGUgZmlsZSBzcGVjaWZpY2F0aW9uIGNhbiBiZSBhIGRp cmVjdG9yeSBuYW1lLCBhIGZpbGVuYW1lLAorICAgYSB3aWxkY2FyZCwgb3IgYW55IGNvbWJpbmF0 aW9uLiBJZiB0aGUgbG9jYWwtc3BlYyBpcyBub3QgZ2l2ZW4gKGFuZAorICAgUEFUSE5BTUVTIGFy ZSBSRUxBVElWRSksIGluY29taW5nIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBnbyBpbnRvIHRoZQor ICAgY3VycmVudCBsb2NhbCBkaXJlY3RvcnkuIElmIGxvY2FsLXNwZWMgaXMgZ2l2ZW4gYW5kIGlz IGEgZGlyZWN0b3J5LCBpdAorICAgYmVjb21lcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSBpbnRvIHdo aWNoIHRoZSBpbmNvbWluZyBmaWxlcyBhbmQKKyAgIGRpcmVjdG9yaWVzIGFyZSBwbGFjZWQuIElm IGxvY2FsLXNwZWMgaGFzIHRoZSBzeW50YXggb2YgYSBkaXJlY3RvcnkKKyAgIG5hbWUgKGUuZy4g aW4gVU5JWCBpdCBlbmRzIHdpdGggLyksIEMtS2VybWl0IGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSBh bmQKKyAgIHRoZW4gcGxhY2VzIHRoZSBpbmNvbWluZyBmaWxlcyBpbnRvIGl0LiBJZiBsb2NhbC1z cGVjIGlzIGEgZmlsZW5hbWUKKyAgIChub3QgcmVjb21tZW5kZWQpLCB0aGVuIGFsbCBpbmNvbWlu ZyBmaWxlcyBhcmUgc3RvcmVkIHdpdGggdGhhdCBuYW1lCisgICB3aXRoIGNvbGxpc2lvbnMgaGFu ZGxlZCBhY2NvcmRpbmcgdG8gdGhlIEZJTEUgQ09MTElTSU9OIHNldHRpbmcuCisKKyAgIEFnYWlu LCB0aGUgbm9ybWFsIG1ldGhvZCBmb3IgdHJhbnNmZXJyaW5nIGRpcmVjdG9yeSB0cmVlcyB1c2Vz IHJlbGF0aXZlCisgICBwYXRobmFtZXMsIGFuZCB0aGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhl IHNlbmRlciBoYXMgYmVlbiBnaXZlbiB0aGUKKyAgIC9SRUNVUlNJVkUgc3dpdGNoLiBUaGUgYWN0 aW9uIGF0IHRoZSByZWNlaXZlciBkZXBlbmRzIG9uIGl0cyBSRUNFSVZFCisgICBQQVRITkFNRVMg c2V0dGluZy4gVGhlIGRlZmF1bHQgaXMgQVVUTywgbWVhbmluZyB0aGF0IGlmIHRoZSBzZW5kZXIK KyAgIHRlbGxzIGl0IHRvIGV4cGVjdCBhIHJlY3Vyc2l2ZSB0cmFuc2ZlciwgdGhlbiBpdCBzaG91 bGQgYXV0b21hdGljYWxseQorICAgc3dpdGNoIHRvIHJlbGF0aXZlIHBhdGhuYW1lcyBmb3IgdGhp cyB0cmFuc2ZlciBvbmx5OyBvdGhlcndpc2UgaXQgb2JleXMKKyAgIHRoZSBSRUNFSVZFIFBBVEhO QU1FUyBzZXR0aW5nIG9mIE9GRiwgQUJTT0xVVEUsIG9yIFJFTEFUSVZFLgorCisgICBXaGF0IGhh cHBlbnMgaWYgYSBmaWxlIGFycml2ZXMgdGhhdCBoYXMgYW4gYWJzb2x1dGUgcGF0aG5hbWUsIHdo ZW4gdGhlCisgICByZWNlaXZlciBoYXMgYmVlbiB0b2xkIHRvIHVzZSBvbmx5IHJlbGF0aXZlIHBh dGhuYW1lcz8gQXMgYSBzZWN1cml0eQorICAgcHJlY2F1dGlvbiwgaW4gdGhpcyBjYXNlIHRoZSBy ZWNlaXZlciB0cmVhdHMgdGhlIG5hbWUgYXMgaWYgaXQgd2FzCisgICByZWxhdGl2ZS4gRm9yIGV4 YW1wbGUsIGlmIGEgZmlsZSBhcnJpdmVzIGFzOgorCisgIC91c3Ivb2xnYS9vb2ZhLnR4dAorCisg ICBUaGUgcmVjZWl2ZXIgY3JlYXRlcyBhICJ1c3IiIHN1YmRpcmVjdG9yeSBpbiBpdHMgY3VycmVu dCBkaXJlY3RvcnksIGFuZAorICAgdGhlbiBhbiAib2xnYSIgc3ViZGlyZWN0b3J5IHVuZGVyIHRo ZSAidXNyIiBzdWJkaXJlY3RvcnkgaW4gd2hpY2ggdG8KKyAgIHN0b3JlIHRoZSBpbmNvbWluZyBm aWxlLgorCisgICBTdXBwb3NlLCBob3dldmVyIHRoZXJlIGlzIGEgc2VxdWVuY2Ugb2YgZGlyZWN0 b3JpZXM6CisKKyAgL3Vzci9vbGdhL2EvYi9jL2QvCisKKyAgIGluIHdoaWNoICJhIiBjb250YWlu cyBub3RoaW5nIGJ1dCBhIHN1YmRpcmVjdG9yeSAiYiIsIHdoaWNoIGluIHR1cm4KKyAgIGNvbnRh aW5zIG5vdGhpbmcgYnV0IGEgc3ViZGlyZWN0b3J5ICJjIiwgd2hpY2ggaW4gdHVybiBjb250YWlu cyBub3RoaW5nCisgICBidXQgYSBzdWJkaXJlY3RvcnkgImQiLCB3aGljaCBjb250YWlucyBub3Ro aW5nIGF0IGFsbC4gVGh1cyB0aGVyZSBhcmUKKyAgIG5vIGZpbGVzIGluIHRoZSAiL3Vzci9vbGdh L2EvIiB0cmVlLCBhbmQgc28gaXQgaXMgbm90IHNlbnQsIGFuZAorICAgdGhlcmVmb3JlIGl0IGlz IG5vdCByZXByb2R1Y2VkIG9uIHRoZSB0YXJnZXQgY29tcHV0ZXIuCisKKzQuMTEuNC4gTmV3IGFu ZCBDaGFuZ2VkIEZpbGUgRnVuY3Rpb25zCisKKyAgIEMtS2VybWl0IDcuMCBhZGRzIHRoZSBmb2xs b3dpbmcgZnVuY3Rpb25zOgorCisgICBcZmZpbGVzKHBhdHRlcm5bLCZhXSkKKyAgICAgICAgICBU aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNoYW5nZWQgdG8gbWF0Y2ggb25seSByZWd1bGFyIGZpbGVz IGluCisgICAgICAgICAgdGhlIGN1cnJlbnQgb3IgZ2l2ZW4gZGlyZWN0b3J5LCBhbmQgdG8gdGFr ZSBhbiBvcHRpb25hbCBhcnJheQorICAgICAgICAgIG5hbWUgYXMgYSBzZWNvbmQgYXJndW1lbnQg KGV4cGxhaW5lZCBiZWxvdykuCisKKyAgIFxmZGlyZWN0b3JpZXMocGF0dGVyblssJmFdKQorICAg ICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBkaXJlY3RvcmllcyB0aGF0IG1hdGNoIHRoZSBn aXZlbiBwYXR0ZXJuLgorICAgICAgICAgIElmIHRoZSBwYXR0ZXJuIGRvZXMgbm90IGluY2x1ZGUg YSBkaXJlY3RvcnksIHRoZW4gdGhlIHNlYXJjaCBpcworICAgICAgICAgIHBlcmZvcm1lZCBpbiB0 aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgIFxmcmZpbGVzKHBhdHRlcm5bLCZhXSkKKyAgICAg ICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlIGN1cnJlbnQgb3IgZ2l2ZW4g ZGlyZWN0b3J5CisgICAgICAgICAgYW5kIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMsIGFuZCB0 aGVpciBzdWJkaXJlY3RvcmllcywgZXRjLAorICAgICAgICAgIHRoYXQgbWF0Y2ggdGhlIGdpdmVu IHBhdHRlcm4uIFdhcm5pbmcgLS0gdGhpcyBvbmUgY2FuIHRha2UgcXVpdGUKKyAgICAgICAgICBz b21lIHRpbWUgaWYgcGVyZm9ybWVkIGF0IHRoZSByb290IG9mIGEgbGFyZ2UgZGlyZWN0b3J5IHRy ZWUuCisKKyAgIFxmcmRpcmVjdG9yaWVzKHBhdHRlcm5bLCZhXSkKKyAgICAgICAgICBSZXR1cm5z IHRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgaW4gdGhlIGN1cnJlbnQgb3IgZ2l2ZW4KKyAgICAg ICAgICBkaXJlY3RvcnkgYW5kIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMsIGFuZCB0aGVpcgor ICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLCBldGMsIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRl cm4uCisKKyAgIEVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGJ1aWxkcyB1cCBhIGxpc3Qgb2YgZmls ZXMgdG8gYmUgcmV0dXJuZWQgYnkgdGhlCisgICBcZm5leHRmaWxlKCkgZnVuY3Rpb24sIGp1c3Qg YXMgXGZmaWxlcygpIGFsd2F5cyBoYXMgZG9uZS4gKFRoaXMgY2FuCisgICBhbHNvIGJlIGRvbmUg d2l0aCB0aGUgL0FSUkFZIHN3aXRjaCBvZiB0aGUgRElSRUNUT1JZIGNvbW1hbmQ7IHNlZQorICAg WzUxM11TZWN0aW9ucyA0LjUuMSBhbmQgWzUxNF03LjEwKS4KKworICAgRWFjaCBvZiB0aGVzZSBm dW5jdGlvbnMgY2FuIGJlIGdpdmVuIGFuIGFycmF5IG5hbWUgYXMgYW4gb3B0aW9uYWwKKyAgIHNl Y29uZCBhcmd1bWVudC4gSWYgYW4gYXJyYXkgbmFtZSBpcyBzdXBwbGllZCwgdGhlIGFycmF5IHdp bGwgY29udGFpbgorICAgdGhlIG51bWJlciBvZiBmaWxlcyBhcyBpdHMgMHRoIGVsZW1lbnQsIGFu ZCB0aGUgZmlsZW5hbWVzIGluIGVsZW1lbnRzIDEKKyAgIHRocm91Z2ggbGFzdC4gSWYgdGhlIGFy cmF5IGFscmVhZHkgZXhpc3RlZCwgaXRzIHByZXZpb3VzIGNvbnRlbnRzIGFyZQorICAgbG9zdC4g Rm9yIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjb250YWlucyB0d28gZmlsZXMs CisgICBvb2ZhLnR4dCBhbmQgZm9vLmJhciwgdGhlbiAiXGZmaWxlcygqLCZhKSIgY3JlYXRlcyBh biBhcnJheSBcJmFbXSB3aXRoCisgICBhIGRpbWVuc2lvbiBvZiAyLCBjb250YWluaW5nIHRoZSBm b2xsb3dpbmcgZWxlbWVudHM6CisKKyBcJmFbMF0gPSAyCisgXCZhWzFdID0gb29mYS50eHQKKyBc JmFbMl0gPSBmb28uYmFyCisKKyAgIElmIG5vIGZpbGVzIG1hdGNoIHRoZSBzcGVjaWZpY2F0aW9u IGdpdmVuIGluIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlCisgICBhcnJheSBnZXRzIGEgZGltZW5z aW9uIG9mIDAsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHVuZGVjbGFyaW5nIHRoZQorICAgYXJyYXku CisKKyAgIE5vdGUgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGFycmF5IGlzIGZpbGxlZCAo YW5kIGluIHdoaWNoCisgICBcZm5leHRmaWxlKCkgcmV0dXJucyBmaWxlbmFtZXMpIGlzIGluZGV0 ZXJtaW5hdGUgKGJ1dCBzZWUgWzUxNV1TZWN0aW9uCisgICA3LjEwLjUpLgorCisgICBIZXJlJ3Mg YW4gZXhhbXBsZSB0aGF0IGJ1aWxkcyBhbmQgcHJpbnRzIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGUg d2hvc2UKKyAgIG5hbWVzIGVuZCBpbiAudHh0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQg YWxsIGl0cyBkZXNjZW5kZW50czoKKworICBhc2cgXCVuIFxmcmZpbGVzKCoudHh0KQorICBkZWNs YXJlIFwmYVtcJW5dCisgIGZvciBcJWkgMSBcJW4gMSB7CisgICAgICBhc2cgXCZhW1wlaV0gXGZu ZXh0ZmlsZSgpCisgICAgICBlY2hvIFxmbHBhZChcJWksNCkuICJcJmFbXCVpXSIKKyAgfQorCisg ICBBbHRlcm5hdGl2ZWx5LCB1c2luZyB0aGUgYXJyYXkgbWV0aG9kLCBhbmQgdGhlbiBwcmludGlu ZyB0aGUgZmlsZW5hbWVzCisgICBpbiBhbHBoYWJldGljIG9yZGVyIChzZWUgWzUxNl1TZWN0aW9u IDcuMTAuMyBhbmQgWzUxN103LjEwLjUpOgorCisgIGFzZyBcJW4gXGZyZmlsZXMoKi50eHQsJmEp CisgIHNvcnQgJmEKKyAgZm9yIFwlaSAxIFwlbiAxIHsKKyAgICAgIGVjaG8gXGZscGFkKFwlaSw0 KS4gIlwmYVtcJWldIgorICB9CisKKyAgIE9yIGV2ZW4gbW9yZSBzaW1wbHk6CisKKyAgYXNnIFwl biBcZnJmaWxlcygqLnR4dCwmYSkKKyAgc29ydCAmYQorICBzaG93IGFycmF5ICZhCisKKyAgIEFz IG5vdGVkIGVsc2V3aGVyZSwgdGhlIGZpbGUgbGlzdHMgYnVpbHQgYnkgXGZmaWxlcygpLCBcZnJm aWxlcygpLCBldGMsCisgICBhcmUgbm93ICJzYWZlIiBpbiB0aGUgc2Vuc2UgdGhhdCBTRU5EIGFu ZCBvdGhlciBmaWxlLXJlbGF0ZWQgY29tbWFuZHMKKyAgIGNhbiByZWZlcmVuY2UgXGZuZXh0Zmls ZSgpIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSBsaXN0OgorCisgIHNldCBzZW5kIHBhdGhuYW1lcyBy ZWxhdGl2ZQorICBmb3IgXCVpIDEgXGZyZmlsZXMoKi50eHQpIDEgeworICAgICAgYXNnIFwlYSBc Zm5leHRmaWxlKCkKKyAgICAgIGVjaG8gU2VuZGluZyBcJWEuLi4KKyAgICAgIHNlbmQgXCVhCisg ICAgICBpZiBmYWlsIGJyZWFrCisgIH0KKworICAgQ29weWluZyB0byBhbiBhcnJheSAoYXMgc2hv d24gb24gcC4zOTggb2YgWzUxOF1Vc2luZyBDLUtlcm1pdCAybmQgRWQpCisgICBpcyBubyBsb25n ZXIgbmVjZXNzYXJ5LgorCis0LjExLjUuIE1vdmluZyBEaXJlY3RvcnkgVHJlZXMgQmV0d2VlbiBM aWtlIFN5c3RlbXMKKworNC4xMS41LjEuIFVOSVggdG8gVU5JWAorCisgICBUcmFuc2ZlcnJpbmcg YSBkaXJlY3RvcnkgdHJlZSBmcm9tIG9uZSBjb21wdXRlciB0byBhbm90aGVyIHJlcGxpY2F0ZXMK KyAgIHRoZSBmaWxlIHNlbmRlcidzIGFycmFuZ2VtZW50IG9mIGZpbGVzIGFuZCBkaXJlY3Rvcmll cyBvbiB0aGUgZmlsZQorICAgcmVjZWl2ZXIncyBjb21wdXRlci4gTm9ybWFsbHkgdGhpcyBpcyBk b25lIHVzaW5nIHJlbGF0aXZlIHBhdGhuYW1lcywKKyAgIHNpbmNlIHRoZSB1c2VyIElEcyBtaWdo dCBub3QgYmUgaWRlbnRpY2FsIG9uIHRoZSB0d28gY29tcHV0ZXJzLiBMZXQncworICAgc2F5IGJv dGggY29tcHV0ZXJzIGFyZSBVTklYIGJhc2VkLCBydW5uaW5nIEMtS2VybWl0IDcuMCBvciBsYXRl ci4gT24KKyAgIHRoZSBzZW5kaW5nIGNvbXB1dGVyIChsZWF2aW5nIG91dCB0aGUgY29ubmVjdGlv biBkZXRhaWxzLCBldGMpOgorCisgIEMtS2VybWl0PiBjZCAvdXNyL29sZ2EKKyAgQy1LZXJtaXQ+ IHNlbmQgL3JlY3Vyc2l2ZSAuCisKKyAgIFRoZSAvUkVDVVJTSVZFIHN3aXRjaCB0ZWxscyBDLUtl cm1pdCB0byBkZXNjZW5kIHRocm91Z2ggdGhlIGRpcmVjdG9yeQorICAgdHJlZSBhbmQgdG8gaW5j bHVkZSByZWxhdGl2ZSBwYXRobmFtZXMgb24gb3V0Ym91bmQgZmlsZW5hbWVzLgorCisgICBPbiB0 aGUgcmVjZWl2aW5nIGNvbXB1dGVyOgorCisgIEMtS2VybWl0PiBta2RpciBvbGdhcy1maWxlcyAg ICAgICAgICAgOyBNYWtlIGEgbmV3IGRpcmVjdG9yeS4KKyAgQy1LZXJtaXQ+IGNkIG9sZ2FzLWZp bGVzICAgICAgICAgICAgICA7IENEIHRvIGl0LgorICBDLUtlcm1pdD4gcmVjZWl2ZSAvcmVjdXJz aXZlICAgICAgICAgIDsgPSAvUEFUSE5BTUVTOlJFTEFUSVZFCisKKyAgIEVhY2ggS2VybWl0IHBy b2dyYW0gcmVjb2duaXplcyB0aGF0IHRoZSBvdGhlciBpcyBydW5uaW5nIHVuZGVyIFVOSVggYW5k CisgICBzd2l0Y2hlcyB0byBiaW5hcnkgbW9kZSBhbmQgbGl0ZXJhbCBmaWxlbmFtZXMgYXV0b21h dGljYWxseS4KKyAgIERpcmVjdG9yaWVzIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgb24gdGhl IHJlY2VpdmluZyBzeXN0ZW0gYXMKKyAgIG5lZWRlZC4gRmlsZSBkYXRlcyBhbmQgcGVybWlzc2lv bnMgYXJlIGF1dG9tYXRpY2FsbHkgcmVwcm9kdWNlZCBmcm9tCisgICBzb3VyY2UgdG8gZGVzdGlu YXRpb24uCisKKzQuMTEuNS4yLiBWTVMgdG8gVk1TCisKKyAgIFRvIHNlbmQgcmVjdXJzaXZlbHkg ZnJvbSBWTVMsIHNpbXBseSBpbmNsdWRlIHRoZSAvUkVDVVJTSVZFIHN3aXRjaCwgZm9yCisgICBl eGFtcGxlIGF0IHRoZSBzZW5kZXI6CisKKyAgJCBrZXJtaXQKKyAgQy1LZXJtaXQ+IGNkIFtvbGdh XQorICBDLUtlcm1pdD4gc2VuZCAvcmVjdXJzaXZlICouKjswCisKKyAgIEFuZCBhdCB0aGUgcmVj ZWl2ZXI6CisKKyAgQy1LZXJtaXQ+IGNkIFsub2xnYV0KKyAgQy1LZXJtaXQ+IHJlY2VpdmUgL3Jl Y3Vyc2l2ZQorCisgICBUaGUgbm90YXRpb24gIi4uLiIgd2l0aGluIGRpcmVjdG9yeSBicmFja2V0 cyBpbiBWTVMgbWVhbnMgInRoaXMKKyAgIGRpcmVjdG9yeSBhbmQgYWxsIGRpcmVjdG9yaWVzIGJl bG93IGl0IjsgdGhlIC9SRUNVUlNJVkUgc3dpdGNoLCB3aGVuCisgICBnaXZlbiB0byB0aGUgc2Vu ZGVyLCBpbXBsaWVzIHRoZSB1c2Ugb2YgIi4uLiIgaW4gdGhlIGZpbGUgc3BlY2lmaWNhdGlvbgor ICAgc28geW91IGRvbid0IGhhdmUgdG8gaW5jbHVkZSAiLi4uIjsgYnV0IGl0IG1ha2VzIG5vIGRp ZmZlcmVuY2UgaWYgeW91CisgICBkbzoKKworICAkIGtlcm1pdAorICBDLUtlcm1pdD4gc2VuZCAv cmVjdXJzaXZlIFtvbGdhLi4uXSouKjswCisKKyAgIEFuZCBhdCB0aGUgcmVjZWl2ZXI6CisKKyAg Qy1LZXJtaXQ+IGNkIFsub2xnYV0KKyAgQy1LZXJtaXQ+IHJlY2VpdmUgL3JlY3Vyc2l2ZQorCisg ICBJbiBlaXRoZXIgY2FzZSwgc2luY2UgYm90aCBzeXN0ZW1zIHJlY29nbml6ZSBlYWNoIG90aGVy IGFzIFZNUywgdGhleQorICAgc3dpdGNoIGludG8gTEFCRUxFRCB0cmFuc2ZlciBtb2RlIGF1dG9t YXRpY2FsbHkuCisKKzQuMTEuNi4gTW92aW5nIERpcmVjdG9yeSBUcmVlcyBCZXR3ZWVuIFVubGlr ZSBTeXN0ZW1zCisKKyAgIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZpY3VsdGllcyB3aXRoIHJlY3Vy c2l2ZSB0cmFuc2ZlcnMgYmV0d2VlbiB1bmxpa2UKKyAgIHN5c3RlbXM6CisKKyAgICAgKiBGaWxl IGZvcm1hdHMgY2FuIGJlIGRpZmZlcmVudCwgZXNwZWNpYWxseSB0ZXh0IGZpbGVzIGNoYXJhY3Rl ciBzZXRzCisgICAgICAgYW5kIHJlY29yZCBmb3JtYXRzLiBUaGlzIGNhbiBub3cgYmUgaGFuZGxl ZCBieSB1c2luZyBTRVQgRklMRQorICAgICAgIFBBVFRFUk4sIFNFVCBGSUxFIFRFWFQtUEFUVEVS TlMsIGFuZCBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMKKyAgICAgICAoWzUxOV1TZWN0aW9uIDQu MykuCisgICAgICogRmlsZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIGRpZmZlcmVudC4gRm9yIGV4 YW1wbGUsIG9uZSBzeXN0ZW0KKyAgICAgICBtaWdodCBhbGxvdyAoYW5kIHVzZSkgbG9uZ2VyIGZp bGVuYW1lcyB0aGFuIHRoZSBvdGhlci4gWW91IGNhbiB0ZWxsCisgICAgICAgS2VybWl0IGhvdyB0 byBoYW5kbGUgZmlsZSBuYW1lcyB3aXRoIHRoZSBub3JtYWwgInNldCBmaWxlIG5hbWVzIgorICAg ICAgIGFuZCAic2V0IGZpbGUgY29sbGlzaW9uIiBtZWNoYW5pc21zLiBNb3N0IG1vZGVybiBLZXJt aXRzIGFyZSBmYWlybHkKKyAgICAgICB0b2xlcmFudCBvZiBpbGxlZ2FsIGZpbGVuYW1lcyBhbmQg c2hvdWxkIG5vdCBmYWlsIHNpbXBseSBiZWNhdXNlIG9mCisgICAgICAgYW4gaW5jb21pbmcgZmls ZW5hbWU7IHJhdGhlciwgaXQgd2lsbCBkbyBpdHMgYmVzdCB0byBjb252ZXJ0IGl0IHRvCisgICAg ICAgYSByZWNvZ25pemFibGUgYW5kIHVuaXF1ZSBsZWdhbCBmaWxlbmFtZS4KKyAgICAgKiBEaXJl Y3Rvcnkgbm90YXRpb25zIGNhbiBiZSBkaWZmZXJlbnQsIGUuZy4gYmFja3NsYXNoZXMgaW5zdGVh ZCBvZgorICAgICAgIHNsYXNoZXMsIGJyYWNrZXRzLCBwYXJlbnRoZXNlcywgc3BhY2VzLCBldGMu IEJ1dCB0aGlzIGlzIG5vdworICAgICAgIGhhbmRsZWQgYnkgY29udmVydGluZyBwYXRobmFtZXMg dG8gYSBzdGFuZGFyZCBmb3JtYXQgZHVyaW5nCisgICAgICAgdHJhbnNmZXIgKFs1MjBdU2VjdGlv biA0LjEwKS4KKworICAgU28gbm93LCBmb3IgdGhlIGZpcnN0IHRpbWUsIGl0IGlzIHBvc3NpYmxl IHRvIHNlbmQgZGlyZWN0b3J5IHRyZWVzCisgICBhbW9uZyBhbnkgY29tYmluYXRpb24gb2YgVU5J WCwgRE9TLCBXaW5kb3dzLCBPUy8yLCBWTVMsIEFPUy9WUywgZXRjLgorICAgSGVyZSdzIGFuIGV4 YW1wbGUgc2VuZGluZyBmaWxlcyBmcm9tIGFuIEhQLVVYIHN5c3RlbSAod2hlcmUgdGV4dCBmaWxl cworICAgYXJlIGVuY29kZWQgaW4gdGhlIEhQIFJvbWFuOCBjaGFyYWN0ZXIgc2V0KSB0byBhIFBD IHdpdGggSzk1ICh3aGVyZQorICAgdGV4dCBmaWxlcyBhcmUgZW5jb2RlZCBpbiBDUDg1MCk6CisK KyBTZW5kZXI6CisgIGNkIHh4eCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ0QgdG8gcm9v dCBvZiBzb3VyY2UgdHJlZQorICBzZXQgZmlsZSB0eXBlIGJpbmFyeSAgICAgICAgICAgICA7IERl ZmF1bHQgdHJhbnNmZXIgbW9kZQorICBzZXQgZmlsZSBjaGFyYWN0ZXItc2V0IGhwLXJvbWFuOCA7 IExvY2FsIGNoYXJhY3RlciBzZXQgZm9yIHRleHQgZmlsZXMKKyAgc2V0IHhmZXIgY2hhcmFjdGVy LXNldCBsYXRpbjEgICAgOyBUcmFuc2ZlciBjaGFyYWN0ZXIgc2V0CisgIHNldCBmaWxlIHBhdHRl cm5zIG9uICAgICAgICAgICAgIDsgRW5hYmxlIGF1dG9tYXRpYyBmaWxlLXR5cGUgc3dpdGNoaW5n Li4uCisgIHNldCBmaWxlIGJpbmFyeS1wYXR0ZXJucyAqLlogKi5neiAqLm8gIDsgYmFzZWQgb24g dGhlc2UgcGF0dGVybnMuLi4KKyAgc2V0IGZpbGUgdGV4dC1wYXR0ZXJucyAqLnR4dCAqLmMgKi5o ICAgOyBmb3IgYmluYXJ5IGFuZCB0ZXh0IGZpbGVzLgorICBzZW5kIC9yZWN1cnNpdmUgKiAgICAg ICAgICAgICAgICA7IFNlbmQgYWxsIHRoZSBmaWxlIGluIHRoaXMgZGlyZWN0b3J5IHRyZWUKKwor IFJlY2VpdmVyOgorICBjZCB5eXkgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENEIHRvIHJv b3Qgb2YgZGVzdGluYXRpb24gdHJlZQorICBzZXQgZmlsZSBjaGFyYWN0ZXItc2V0IGNwODUwICAg ICA7IExvY2FsIGNoYXJhY3RlciBzZXQgZm9yIHRleHQgZmlsZXMKKyAgcmVjZWl2ZSAvcGF0aG5h bWVzOnJlbGF0aXZlICAgICAgOyBSZWNlaXZlIHdpdGggcGF0aG5hbWVzCisKKyAgIE5vdGVzOgor ICAgICAqIFJlcGxhY2UgInh4eCIgYW5kICJ5eXkiIHdpdGggdGhlIGRlc2lyZWQgZGlyZWN0b3Jp ZXMuCisgICAgICogUmVwbGFjZSB0aGUgZmlsZSBjaGFyYWN0ZXIgc2V0cyBhcHByb3ByaWF0ZWx5 LgorICAgICAqIENoYW5nZSB0aGUgcGF0dGVybnMgYXMgbmVlZGVkIChvciBqdXN0IHVzZSB0aGUg YnVpbHQtaW4gZGVmYXVsdAorICAgICAgIGxpc3RzKS4KKyAgICAgKiBTRU5EIC9SRUNVUlNJVkUg YWxzbyBpbXBsaWVzIC9QQVRITkFNRVM6UkVMQVRJVkUuCisgICAgICogVGhlIGZpbGUgc2VuZGVy IHRlbGxzIHRoZSBmaWxlIHJlY2VpdmVyIHRoZSB0cmFuc2ZlciBtb2RlIG9mIGVhY2gKKyAgICAg ICBmaWxlLgorICAgICAqIFRoZSBmaWxlIHNlbmRlciB0ZWxscyB0aGUgZmlsZSByZWNlaXZlciB0 aGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldC4KKyAgICAgKiBCeSBkZWZhdWx0LCBkZXN0aW5hdGlv biBmaWxlIGRhdGVzIHdpbGwgYmUgdGhlIHNhbWUgYXMgb24gdGhlCisgICAgICAgc291cmNlLgor ICAgICAqIE1hbnkgb2YgdGhlIHNldHRpbmdzIHNob3duIG1pZ2h0IGFscmVhZHkgYmUgc2V0IGJ5 IGRlZmF1bHQuCisgICAgICogU2VlIFs1MjFdU2VjdGlvbnMgNC4zLCBbNTIyXTQuMTAsIGFuZCBb NTIzXTQuMTUgZm9yIGFkZGl0aW9uYWwKKyAgICAgICBleHBsYW5hdGlvbi4KKworICAgSWYgeW91 IGFyZSByZWZyZXNoaW5nIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSBvbiB0aGUgZGVzdGluYXRpb24K KyAgIGNvbXB1dGVyLCB1c2UgInNldCBmaWxlIGNvbGxpc2lvbiB1cGRhdGUiIG9yIG90aGVyIGFw cHJvcHJpYXRlIGZpbGUKKyAgIGNvbGxpc2lvbiBvcHRpb24gdG8gaGFuZGxlIGZpbGVuYW1lIGNv bGxpc2lvbnMuCisKKzQuMTIuIFdoZXJlIERpZCBNeSBGaWxlIEdvPworCisgICBOb3cgdGhhdCBL ZXJtaXQgY2FuIGJlIHN0YXJ0ZWQgYnkgY2xpY2tpbmcgb24gZGVza3RvcCBpY29ucyAodGh1cwor ICAgb2JzY3VyaW5nIHRoZSBjb25jZXB0IG9mICJjdXJyZW50IGRpcmVjdG9yeSIpLCBhbmQgY2Fu IGhhdmUgYSBkb3dubG9hZAorICAgZGlyZWN0b3J5LCBhbmQgY2FuIGNyZWF0ZSBkaXJlY3Rvcmll cyBmb3IgaW5jb21pbmcgZmlsZXMgb24gdGhlIGZseSwKKyAgIGV0Yywgc29tZXRpbWVzIGl0IGlz IGVhc3kgdG8gbG9zZSBhIGZpbGUgYWZ0ZXIgdHJhbnNmZXIuIE9mIGNvdXJzZSwgaWYKKyAgIHlv dSBrZWVwIGEgdHJhbnNhY3Rpb24gbG9nOgorCisgIExPRyBUUkFOU0FDVElPTlMKKworICAgaXQg d2lsbCByZWNvcmQgdGhlIGZhdGUgYW5kIGZpbmFsIHJlc3RpbmcgcGxhY2Ugb2YgZWFjaCBmaWxl LiBCdXQgaW4KKyAgIGNhc2UgeW91IGRpZCBub3Qga2VlcCBhIGxvZywgdGhlIG5ldyBjb21tYW5k OgorCisgIFdIRVJFCisKKyAgIGFkZGVkIGluIEMtS2VybWl0IDcuMCwgZ2l2ZXMgeW91IGFzIG11 Y2ggaW5mb3JtYXRpb24gYXMgaXQgaGFzIGFib3V0CisgICB0aGUgbG9jYXRpb24gb2YgdGhlIGxh c3QgZmlsZXMgdHJhbnNmZXJyZWQsIGluY2x1ZGluZyB0aGUgcGF0aG5hbWUKKyAgIHJlcG9ydGVk IGJ5IHRoZSByZWNlaXZpbmcgS2VybWl0LCBpZiBhbnksIHdoZW4gQy1LZXJtaXQgaXMgdGhlIHNl bmRlci4KKyAgIFRoaXMgaW5mb3JtYXRpb24gd2FzIGFsc28gYWRkZWQgdG8gU0hPVyBGSUxFIGlu IHNvbWV3aGF0IGxlc3MgZGV0YWlsLgorCis0LjEzLiBGaWxlIE91dHB1dCBCdWZmZXIgQ29udHJv bAorCisgICAoVU5JWCBvbmx5KS4gVGhlIG5ldyBjb21tYW5kIFNFVCBGSUxFIE9VVFBVVCBsZXRz IHlvdSBjb250cm9sIGhvdworICAgaW5jb21pbmcgZmlsZXMgYXJlIHdyaXR0ZW4gdG8gZGlzazoK KworICAgU0VUIEZJTEUgT1VUUFVUIEJVRkZFUkVEIFsgc2l6ZSBdCisgICAgICAgICAgQ2hvb3Nl cyBidWZmZXJlZCBmaWxlIG91dHB1dDsgdGhpcyBpcyB0aGUgZGVmYXVsdC4gVU5JWCBkb2VzIGl0 cworICAgICAgICAgIG5vcm1hbCBzb3J0IG9mIGRpc2sgYnVmZmVyaW5nLiBUaGUgb3B0aW9uYWwg c2l6ZSBzcGVjaWZpZXMKKyAgICAgICAgICBLZXJtaXQncyBvd24gZmlsZSBvdXRwdXQgYnVmZmVy IHNpemUsIGFuZCB0aGVyZWZvcmUgdGhlCisgICAgICAgICAgZnJlcXVlbmN5IG9mIGRpc2sgYWNj ZXNzZXMgKHdyaXRlKCkgc3lzdGVtIGNhbGxzKSAtLSB0aGUgYmlnZ2VyCisgICAgICAgICAgdGhl IHNpemUsIHRoZSBmZXdlciB0aGUgZGlzayBhY2Nlc3Nlcy4KKworICAgU0VUIEZJTEUgT1VUUFVU IFVOQlVGRkVSRUQgWyBzaXplIF0KKyAgICAgICAgICBUaGlzIGZvcmNlcyBlYWNoIGZpbGUgb3V0 cHV0IHdyaXRlKCkgY2FsbCB0byBhY3R1YWxseSBjb21taXQgdGhlCisgICAgICAgICAgZGF0YSB0 byBkaXNrIGltbWVkaWF0ZWx5LiBDaG9vc2luZyB0aGlzIG9wdGlvbiB3aWxsIHVzdWFsbHkgc2xv dworICAgICAgICAgIGZpbGUgcmVjZXB0aW9uIGRvd24uCisKKyAgIFNFVCBGSUxFIE9VVFBVVCBC TE9DS0lORworICAgICAgICAgIFdyaXRlKCkgY2FsbHMgc2hvdWxkIG5vdCByZXR1cm4gdW50aWwg dGhleSBhcmUgY29tcGxldGUuIFRoaXMgaXMKKyAgICAgICAgICB0aGUgbm9ybWFsIHNldHRpbmcs IGFuZCBpdCBsZXRzIEtlcm1pdCBkZXRlY3QgZGlzay13cml0ZSBlcnJvcnMKKyAgICAgICAgICBp bW1lZGlhdGVseS4KKworICAgU0VUIEZJTEUgT1VUUFVUIE5PTkJMT0NLSU5HCisgICAgICAgICAg V3JpdGUoKSBjYWxscyBzaG91bGQgcmV0dXJuIGltbWVkaWF0ZWx5LiBUaGlzIGNhbiBzcGVlZCB1 cCBmaWxlCisgICAgICAgICAgcmVjZXB0aW9uLCBidXQgYWxzbyBkZWxheSB0aGUgZGV0ZWN0aW9u IG9mIGRpc2std3JpdGUgZXJyb3JzLgorCisgICBFeHBlcmltZW50YXRpb24gd2l0aCB0aGVzZSBw YXJhbWV0ZXJzIHNob3VsZCBiZSBoYXJtbGVzcywgYW5kIG1pZ2h0IChvcgorICAgbWlnaHQgbm90 KSBoYXZlIGEgcGVyY2VwdGlibGUsIGV2ZW4gZHJhbWF0aWMsIGVmZmVjdCBvbiBwZXJmb3JtYW5j ZS4KKworNC4xNC4gSW1wcm92ZWQgUmVzcG9uc2l2ZW5lc3MKKworICAgSW4gdmVyc2lvbiA3LjAs IEMtS2VybWl0J3MgZmlsZS10cmFuc2ZlciBwcm90b2NvbCBlbmdpbmUgaGFzIGJlZW4gdHVuZWQK KyAgIGZvciBhZGRpdGlvbmFsIHNwZWVkIGFuZCByZXNwb25zaXZlbmVzcy4KKworICAgICAqIEJp bmFyeS1tb2RlIHRyYW5zZmVycyBvdmVyIDgtYml0IGNvbm5lY3Rpb25zLCBhIHZlcnkgY29tbW9u IGNhc2UsCisgICAgICAgYXJlIG5vdyBoYW5kbGVkIGluIGEgc3BlY2lhbCB3YXkgdGhhdCBtaW5p bWl6ZXMgb3ZlcmhlYWQuCisgICAgICogU0VUIFRSQU5TRkVSIENSQy1DQUxDVUxBVElPTiBpcyBu b3cgT0ZGIGJ5IGRlZmF1bHQsIHJhdGhlciB0aGFuIE9OLgorICAgICAgIChUaGlzIGFmZmVjdHMg b25seSB0aGUgb3ZlcmFsbCBwZXItdHJhbnNmZXIgQ1JDLCBcdihjcmMxNiksIG5vdCB0aGUKKyAg ICAgICBwZXItcGFja2V0IENSQ3MpCisgICAgICogQ29ubmVjdGlvbiBsb3NzIGR1cmluZyBmaWxl IHRyYW5zZmVyIGlzIG5vdyBkZXRlY3RlZCBpbW1lZGlhdGVseSBpbgorICAgICAgIG1vc3QgY2Fz ZXMgb24gSW50ZXJuZXQgY29ubmVjdGlvbnMgYW5kIG9uIHNlcmlhbCBjb25uZWN0aW9ucyB3aGVu CisgICAgICAgQ0FSUklFUi1XQVRDSCBpcyBub3Qgc2V0IHRvIE9GRi4KKworNC4xNS4gRG91Ymxp bmcgYW5kIElnbm9yaW5nIENoYXJhY3RlcnMgZm9yIFRyYW5zcGFyZW5jeQorCisgICBUaGUgZm9s bG93aW5nIGNvbW1hbmRzIHdlcmUgYWRkZWQgaW4gNy4wLCBwcmltYXJpbHkgdG8gYWxsb3cgc3Vj Y2Vzc2Z1bAorICAgZmlsZSB0cmFuc2ZlciB0aHJvdWdoIEFSUEFuZXQgVEFDcyBhbmQgd2l0aCBI b25leXdlbGwgRFBTNiBzeXN0ZW1zLCBidXQKKyAgIGNhbiBiZSB1c2VkIGluIGFueSBzZXR0aW5n IHdoZXJlIHRoZXkgbWlnaHQgYmUgbmVlZGVkOgorCisgICBTRVQgU0VORCBET1VCTEUtQ0hBUiB7 IFsgY2hhciBbIGNoYXIgWyAuLi4gXSBdIF0sIE5PTkUgfQorICAgICAgICAgIFRlbGxzIEMtS2Vy bWl0IHRvIGRvdWJsZSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcnMgKHVzZSBkZWNpbWFsCisgICAg ICAgICAgbm90YXRpb24pIGluIHBhY2tldHMgdGhhdCBpdCBzZW5kcy4gRm9yIGV4YW1wbGUsIGlm IHlvdSBhcmUKKyAgICAgICAgICBzZW5kaW5nIGZpbGVzIHRocm91Z2ggYSBkZXZpY2UgdGhhdCB1 c2VzIEAgYXMgYW4gZXNjYXBlCisgICAgICAgICAgY2hhcmFjdGVyLCBidXQgYWxsb3dzIHlvdSB0 byBzZW5kIGEgc2luZ2xlIGNvcHkgb2YgQCB0aHJvdWdoIGJ5CisgICAgICAgICAgZG91Ymxpbmcg aXQsIHVzZSAic2V0IHNlbmQgZG91YmxlIDY0Ii4KKworICAgU0VUIFJFQ0VJVkUgSUdOT1JFLUNI QVIgWyBjaGFyIFsgY2hhciBbIC4uLiBdIF0gXQorICAgICAgICAgIFRlbGxzIEMtS2VybWl0IHRv IGlnbm9yZSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcihzKSBpbiBpbmNvbWluZworICAgICAgICAg IHBhY2tldHMuIFVzZSB0aGlzLCBmb3IgZXhhbXBsZSwgd2hlbiBzb21ldGhpbmcgYmV0d2VlbiB0 aGUKKyAgICAgICAgICBzZW5kZXIgYW5kIHJlY2VpdmVyIGlzIGluc2VydGluZyBsaW5lZmVlZHMg Zm9yIHdyYXBwaW5nLCBOVUxzCisgICAgICAgICAgZm9yIHBhZGRpbmcsIGV0Yy4KKworNC4xNi4g TmV3IEZpbGUtVHJhbnNmZXIgRGlzcGxheSBGb3JtYXRzCisKKyAgIFNFVCBUUkFOU0ZFUiBESVNQ TEFZIHsgQlJJRUYsIENSVCwgRlVMTFNDUkVFTiwgTk9ORSwgU0VSSUFMIH0KKyAgICAgICAgICBT ZWxlY3RzIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgZm9ybWF0LgorCisgICBCUklFRiBpcyB0 aGUgbmV3IG9uZS4gVGhpcyB3cml0ZXMgb25lIGxpbmUgdG8gdGhlIHNjcmVlbiBwZXIgZmlsZSwK KyAgIHNob3dpbmcgdGhlIGZpbGUncyBuYW1lLCB0cmFuc2ZlciBtb2RlLCBzaXplLCB0aGUgc3Rh dHVzIG9mIHRoZQorICAgdHJhbnNmZXIsIGFuZCB3aGVuIHRoZSB0cmFuc2ZlciBpcyBzdWNjZXNz ZnVsLCB0aGUgZWZmZWN0aXZlIGRhdGEgcmF0ZQorICAgaW4gY2hhcmFjdGVycyBwZXIgc2Vjb25k IChDUFMpLiBFeGFtcGxlOgorCisgIFNFTkQgY2tjZm4zLm8gKGJpbmFyeSkgKDU5MjE2IGJ5dGVz KTogT0sgKDAuMTA0IHNlYywgNTcwMjA2IGNwcykKKyAgU0VORCBja2NmbnMubyAoYmluYXJ5KSAo MTE0NDM2IGJ5dGVzKTogT0sgKDAuMTQ4IHNlYywgNzcyMDA2IGNwcykKKyAgU0VORCBja2NtYWku YyAodGV4dCkgKDc5MTQ3IGJ5dGVzKTogT0sgKDAuMTgwIHNlYywgNDM4NTQzIGNwcykKKyAgU0VO RCBja2NtYWkubyAoYmluYXJ5KSAoMzUzOTYgYnl0ZXMpOiBPSyAoMC4wNjAgc2VjLCA1ODc0OTQg Y3BzKQorICBTRU5EIGNrY25ldC5vIChiaW5hcnkpICg2Mjc3MiBieXRlcyk6IFJFRlVTRUQKKyAg U0VORCBja2Nwcm8ubyAoYmluYXJ5KSAoMTIxNDQ4IGJ5dGVzKTogT0sgKDAuMTczIHNlYywgNzAz OTI4IGNwcykKKyAgU0VORCBja2Nwcm8udyAodGV4dCkgKDYzNjg3IGJ5dGVzKTogT0sgKDAuMTQx IHNlYywgNDUzMDU5IGNwcykKKyAgU0VORCBtYWtlZmlsZSAodGV4dCkgKDE4NjYzNiBieXRlcyk6 IE9LICgwLjQ0NCBzZWMsIDQyMDQ3MSBjcHMpCisgIFNFTkQgd2VybWl0IChiaW5hcnkpICgxMDY0 OTYwIGJ5dGVzKTogT0sgKDIuMjA3IHNlYywgNDgyNDc3IGNwcykKKworICAgTm90ZSB0aGF0IHRy YW5zZmVyIHRpbWVzIGFyZSBub3cgb2J0YWluZWQgaW4gZnJhY3Rpb25hbCBzZWNvbmRzLCByYXRo ZXIKKyAgIHRoYW4gd2hvbGUgc2Vjb25kcywgc28gdGhlIENQUyBmaWd1cmVzIGFyZSBtb3JlIGFj Y3VyYXRlICh0aGUgZGlzcGxheQorICAgc2hvd3MgMyBkZWNpbWFsIHBsYWNlcywgYnV0IGludGVy bmFsbHkgdGhlIGZpZ3VyZSBpcyBnZW5lcmFsbHkgcHJlY2lzZQorICAgdG8gdGhlIG1pY3Jvc2Vj b25kKS4KKworNC4xNy4gTmV3IFRyYW5zYWN0aW9uIExvZyBGb3JtYXRzCisKKyAgIFRoZSBuZXcg Y29tbWFuZDoKKworICBTRVQgVFJBTlNBQ1RJT04tTE9HIHsgVkVSQk9TRSwgRlRQLCBCUklFRiBb IHNlcGFyYXRvciBdIH0KKworICAgbGV0cyB5b3UgY2hvb3NlIHRoZSBmb3JtYXQgb2YgdGhlIHRy YW5zYWN0aW9uIGxvZy4gVkVSQk9TRSAodGhlCisgICBkZWZhdWx0KSBpbmRpY2F0ZXMgdGhlIHRy YWRpdGlvbmFsIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhlIGJvb2suIEJSSUVGCisgICBhbmQgRlRQ IGFyZSBuZXcuIFRoaXMgY29tbWFuZCBtdXN0IGJlIGdpdmVuIHByaW9yIHRvIHRoZSBMT0cKKyAg IFRSQU5TQUNUSU9OIGNvbW1hbmQgaWYgYSBub24tVkVSQk9TRSB0eXBlIGlzIGRlc2lyZWQuCisK KzQuMTcuMS4gVGhlIEJSSUVGIEZvcm1hdAorCisgICBCUklFRiBjaG9vc2VzIGEgb25lLWxpbmUg cGVyIGZpbGUgZm9ybWF0IHN1aXRhYmxlIGZvciBkaXJlY3QKKyAgIGltcG9ydGF0aW9uIGludG8g ZGF0YWJhc2VzIGxpa2UgSW5mb3JtaXgsIE9yYWNsZSwgb3IgU3liYXNlLCBpbiB3aGljaDoKKwor ICAgICAqIEVhY2ggcmVjb3JkIGhhcyA4IGZpZWxkcy4KKyAgICAgKiBGaWVsZHMgYXJlIHNlcGFy YXRlZCBieSBhIG5vbi1hbHBoYW51bWVyaWMgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKyAgICAgKiBU aGUgZGVmYXVsdCBzZXBhcmF0b3IgY2hhcmFjdGVyIGlzIGNvbW1hICgsKS4KKyAgICAgKiBBbnkg ZmllbGQgY29udGFpbmluZyB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBlbmNsb3NlZCBpbgor ICAgICAgIGRvdWJsZXF1b3Rlcy4KKyAgICAgKiBUaGUgZmluYWwgZmllbGQgaXMgZW5jbG9zZWQg aW4gZG91YmxlcXVvdGVzLgorCisgICBUaGUgZmllbGRzIGFyZToKKworICAgIDEuIERhdGUgaW4g eXl5eW1tZGQgZm9ybWF0CisgICAgMi4gVGltZSBpbiBoaDptbTpzcyBmb3JtYXQKKyAgICAzLiBB Y3Rpb246IFNFTkQgb3IgUkVDVgorICAgIDQuIFRoZSBsb2NhbCBmaWxlbmFtZQorICAgIDUuIFRo ZSBzaXplIG9mIHRoZSBmaWxlCisgICAgNi4gVGhlIHRyYW5zZmVyIG1vZGUgKHRleHQsIGJpbmFy eSwgaW1hZ2UsIGxhYmVsZWQpCisgICAgNy4gVGhlIHN0YXR1cyBvZiB0aGUgdHJhbnNmZXI6IE9L IG9yIEZBSUxFRAorICAgIDguIEFkZGl0aW9uYWwgc3RhdHVzLWRlcGVuZGVudCBpbmZvLCBpbiBk b3VibGVxdW90ZXMuCisKKyAgIEV4YW1wbGVzOgorCisgIDIwMDAwMjA4LDEyOjA4OjUyLFJFQ1Ys L3Uvb2xnYS9vb2ZhLnR4dCw1MjQ2LHRleHQsT0ssIjAuMjg0c2VjIDE4NDQzY3BzIgorICAyMDAw MDIwOCwxMjowOTozMSxTRU5ELC91L29sZ2Evb29mYS5leGUsMzI3NjgsYmluYXJ5LE9LLCIxLjI0 M3NlYyAyNjM2MmNwcyIKKyAgMjAwMDAyMDgsMTI6MTA6MDIsU0VORCwiL3Uvb2xnYS9hLGIiLDEw MTMwLHRleHQsRkFJTEVELCJSZWZ1c2VkOiBkYXRlIgorCisgICBOb3RlIGhvdyB0aGUgZmlsZW5h bWUgaXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzIGluIHRoZSBmaW5hbCBleGFtcGxlLAorICAg YmVjYXVzZSBpdCBjb250YWlucyBhIGNvbW1hLgorCisgICBUbyBvYnRhaW4gQlJJRUYgZm9ybWF0 LCB5b3UgbXVzdCBnaXZlIHRoZSBTRVQgVFJBTlNBQ1RJT04tTE9HIEJSSUVGCisgICBjb21tYW5k IGJlZm9yZSB0aGUgTE9HIFRSQU5TQUNUSU9OUyBjb21tYW5kLiAoSWYgeW91IGdpdmUgdGhlbSBp biB0aGUKKyAgIG9wcG9zaXRlIG9yZGVyLCBhIGhlYWRpbmcgaXMgd3JpdHRlbiB0byB0aGUgbG9n IGJ5IHRoZSBMT0cgY29tbWFuZC4pCisKKzQuMTcuMi4gVGhlIEZUUCBGb3JtYXQKKworICAgU0VU IFRSQU5TQUNUSU9OLUxPRyBGVFAgKGF2YWlsYWJsZSBvbmx5IGluIFVOSVgpIGNob29zZXMgYSBm b3JtYXQgdGhhdAorICAgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBXVS1GVFBEIChXYXNoaW5ndG9u IFVuaXZlcnNpdHkgRlRQIGRhZW1vbikgbG9nLAorICAgYW5kIHNvIGNhbiBiZSBwcm9jZXNzZWQg YnkgYW55IHNvZnR3YXJlIHRoYXQgcHJvY2Vzc2VzIHRoZSBXVS1GVFBEIGxvZy4KKyAgIEl0IGxv Z3Mgb25seSB0cmFuc2ZlcnMgaW4gYW5kIG91dCwgYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsZWQg KGJ1dAorICAgc3VjY2VzcyBvciBmYWlsdXJlIGlzIG5vdCBpbmRpY2F0ZWQsIGR1ZSB0byBsYWNr IG9mIGEgZmllbGQgaW4gdGhlCisgICBXVS1GVFBEIGxvZyBmb3JtYXQgZm9yIHRoaXMgcHVycG9z ZSkuIE5vbi10cmFuc2ZlciBldmVudHMgYXJlIG5vdAorICAgcmVjb3JkZWQuCisKKyAgIFVubGlr ZSBvdGhlciBsb2dzLCB0aGUgRlRQLWZvcm1hdCB0cmFuc2FjdGlvbiBsb2cgaXMgb3BlbmVkIGlu IGFwcGVuZAorICAgbW9kZSBieSBkZWZhdWx0LiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IGtl ZXAgYSByZWNvcmQgb2YgYWxsIHlvdXIKKyAgIGtlcm1pdCB0cmFuc2ZlcnMsIGFuZCBpdCBhbHNv IGFsbG93cyB0aGUgc2FtZSBsb2cgdG8gYmUgc2hhcmVkIGJ5CisgICBtdWx0aXBsZSBzaW11bHRh bmVvdXMgS2VybWl0IHByb2Nlc3NlcyBvciAocGVybWlzc2lvbnMgcGVybWl0dGluZykKKyAgIHVz ZXJzLiBZb3UgY2FuLCBvZiBjb3Vyc2UsIGZvcmNlIGNyZWF0aW9uIG9mIGEgbmV3IGxvZ2ZpbGUg YnkKKyAgIHNwZWNpZnlpbmcgdGhlIE5FVyBrZXl3b3JkIGFmdGVyIHRoZSBmaWxlbmFtZSwgZS5n LgorCisgIGxvZyB0cmFuc2FjdGlvbnMgb29mYS5sb2cgbmV3CisKKyAgIEFsbCByZWNvcmRzIGlu IHRoZSBGVFAtc3R5bGUgbG9nIGFyZSBpbiBhIGNvbnNpc3RlbnQgZm9ybWF0LiBUaGUgZmlyc3QK KyAgIGZpZWxkIGlzIGZpeGVkLWxlbmd0aCBhbmQgY29udGFpbnMgc3BhY2VzOyBzdWJzZXF1ZW50 IGZpZWxkcyBhcmUKKyAgIHZhcmlhYmxlIGxlbmd0aCwgY29udGFpbiBubyBzcGFjZXMsIGFuZCBh cmUgc2VwYXJhdGVkIGJ5IG9uZSBvciBtb3JlCisgICBzcGFjZXMuIFRoZSBmaWVsZHMgYXJlOgor CisgICBUaW1lc3RhbXAKKyAgICAgICAgICBUaGlzIGlzIGFuIGFzY3RpbWUtc3R5bGUgdGltZXN0 YW1wLCBleGFtcGxlOiAiV2VkIFNlcCAxNgorICAgICAgICAgIDIwOjE5OjA1IDE5OTkiIEl0IGlz IGFsd2F5cyBleGFjdGx5IDI0IGNoYXJhY3RlcnMgbG9uZywgYW5kIHRoZQorICAgICAgICAgIHN1 YmZpZWxkcyBhcmUgYWx3YXlzIGluIGZpeGVkIHBvc2l0aW9ucy4KKworICAgRWxhcHNlZCB0aW1l CisgICAgICAgICAgVGhlIHdob2xlIG51bWJlciBvZiBzZWNvbmRzIHJlcXVpcmVkIHRvIHRyYW5z ZmVyIHRoZSBmaWxlLCBhcyBhCisgICAgICAgICAgc3RyaW5nIG9mIGRlY2ltYWwgZGlnaXRzLCBl LmcuICIyNCIuCisKKyAgIENvbm5lY3Rpb24KKyAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbmV0 d29yayBob3N0IHRvIHdoaWNoIEMtS2VybWl0IGlzIGNvbm5lY3RlZCwgb3IKKyAgICAgICAgICB0 aGUgbmFtZSBvZiB0aGUgc2VyaWFsIGRldmljZSB0aHJvdWdoIHdoaWNoIGl0IGhhcyBkaWFsZWQg KG9yCisgICAgICAgICAgaGFzIGEgZGlyZWN0IGNvbm5lY3Rpb24pLCBvciAiL2Rldi90dHkiIGZv ciB0cmFuc2ZlcnMgaW4gcmVtb3RlCisgICAgICAgICAgbW9kZS4KKworICAgQnl0ZXMgdHJhbnNm ZXJyZWQKKyAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkLCBkZWNpbWFs IGRpZ2l0cywgZS5nLiAiMTUzNzkwNCIuCisKKyAgIEZpbGVuYW1lCisgICAgICAgICAgVGhlIG5h bWUgb2YgdGhlIGZpbGUgdGhhdCB3YXMgdHJhbnNmZXJyZWQsIGUuZy4KKyAgICAgICAgICAiL3B1 Yi9mdHAva2VybWl0L2EvUkVBRE1FLlRYVCIuIElmIHRoZSBmaWxlbmFtZSBjb250YWlucyBhbnkK KyAgICAgICAgICBzcGFjZXMgb3IgY29udHJvbCBjaGFyYWN0ZXJzLCBlYWNoIHN1Y2ggY2hhcmFj dGVyIGlzIHJlcGxhY2VkIGJ5CisgICAgICAgICAgYW4gdW5kZXJzY29yZSAoJ18nKSBjaGFyYWN0 ZXIuCisKKyAgIE1vZGUKKyAgICAgICAgICBUaGUgbGV0dGVyICdiJyBpZiB0aGUgZmlsZSB3YXMg dHJhbnNmZXJyZWQgaW4gYmluYXJ5IG1vZGUsIG9yCisgICAgICAgICAgJ2EnIGlmIGl0IHdhcyB0 cmFuc2ZlcnJlZCBpbiB0ZXh0IChBU0NJSSkgbW9kZS4KKworICAgT3B0aW9ucworICAgICAgICAg IFRoaXMgZmllbGQgYWx3YXlzIGNvbnRhaW5zIGFuIHVuZGVyc2NvcmUgKCdfJykgY2hhcmFjdGVy LgorCisgICBEaXJlY3Rpb24KKyAgICAgICAgICBUaGUgbGV0dGVyICdvJyBpZiB0aGUgZmlsZSB3 YXMgdHJhbnNmZXJyZWQgT3V0LCBhbmQgJ2knIGlmIHRoZQorICAgICAgICAgIGZpbGUgd2FzIHRy YW5zZmVycmVkIEluLgorCisgICBVc2VyIGNsYXNzCisgICAgICAgICAgVGhlIGxldHRlciAncicg aW5kaWNhdGVzIHRoZSBmaWxlIHdhcyB0cmFuc2ZlcnJlZCBieSBhIFJlYWwKKyAgICAgICAgICB1 c2VyLgorCisgICBVc2VyIGlkZW50aWZpY2F0aW9uCisgICAgICAgICAgVGhlIElEIG9mIHRoZSB1 c2VyIHdobyB0cmFuc2ZlcnJlZCB0aGUgZmlsZS4KKworICAgU2VydmVyIGlkZW50aWZpY2F0aW9u CisgICAgICAgICAgVGhlIHN0cmluZyAia2VybWl0Ii4gVGhpcyBkaXN0aW5ndWlzaGVzIGEgS2Vy bWl0IHRyYW5zZmVyIGxvZworICAgICAgICAgIHJlY29yZCBmcm9tIGEgV1UtRlRQRCByZWNvcmQs IHdoaWNoIGNvbnRhaW5zICJmdHAiIGluIHRoaXMKKyAgICAgICAgICBmaWVsZC4KKworICAgQXV0 aGVudGljYXRpb24gY2xhc3MKKyAgICAgICAgICBUaGUgZGlnaXQgJzEnIGlmIHdlIGtub3cgdGhl IHVzZXIncyBJRCBvbiB0aGUgY2xpZW50IHN5c3RlbSwKKyAgICAgICAgICBvdGhlcndpc2UgJzAn LiBDdXJyZW50bHksIGFsd2F5cyAnMCcuCisKKyAgIEF1dGhlbnRpY2F0ZWQgdXNlcgorICAgICAg ICAgIElmIHRoZSBhdXRoZW50aWNhdGlvbiBjbGFzcyBpcyAnMScsIHRoaXMgaXMgdGhlIHVzZXIn cyBJRCBvbiB0aGUKKyAgICAgICAgICBjbGllbnQgc3lzdGVtLiBPdGhlcndpc2UgaXQgaXMgYW4g YXN0ZXJpc2sgKCcqJykuIEN1cnJlbnRseSBpdAorICAgICAgICAgIGlzIGFsd2F5cyBhbiBhc3Rl cmlzay4KKworICAgRXhhbXBsZXM6CisKKyAgVGh1IE9jdCAyMiAxNzo0Mjo0OCAxOTk4IDAgKiA5 NCAvdXNyL29sZ2EvbmV3LnggYSBfIGkgciBvbGdhIGtlcm1pdCAwICoKKyAgVGh1IE9jdCAyMiAx Nzo1MToyOSAxOTk4IDEgKiAxNDc4OTkgL3Vzci9vbGdhL3Rlc3QuYyBhIF8gbyByIG9sZ2Ega2Vy bWl0IDAgKgorICBUaHUgT2N0IDIyIDE3OjUxOjQ0IDE5OTggMSAqIDIzNSAvdXNyL29sZ2EvdGVz dC5vIGIgXyBpIHIgb2xnYSBrZXJtaXQgMCAqCisgIEZyaSBPY3QgMjMgMTI6MTA6MjUgMTk5OCAw ICogMjM1IC91c3Ivb2xnYS94LmtzYyBhIF8gbyByIG9sZ2Ega2VybWl0IDAgKgorCisgICBOb3Rl IHRoYXQgYW4gZnRwLWZvcm1hdCB0cmFuc2FjdGlvbiBsb2cgY2FuIGFsc28gYmUgc2VsZWN0ZWQg b24gdGhlCisgICBLZXJtaXQgY29tbWFuZCBsaW5lIGFzIGZvbGxvd3M6CisKKyAga2VybWl0IC0t eGZlcmZpbGU6ZmlsZXNwZWMKKworICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvOgorCisgIFNFVCBU UkFOU0FDVElPTi1MT0cgRlRQCisgIExPRyBUUkFOU0FDVElPTlMgZmlsZXNwZWMgQVBQRU5ECisK KyAgIENvbmNlaXZhYmx5IGl0IGNvdWxkIGJlIHBvc3NpYmxlIHRvIGhhdmUgYSBzeXN0ZW0td2lk ZSBzaGFyZWQgS2VybWl0CisgICBsb2csIGV4Y2VwdCB0aGF0IFVOSVggbGFja3MgYW55IG5vdGlv biBvZiBhbiBhcHBlbmQtb25seSBmaWxlOyB0aHVzIGFueQorICAgdXNlciB3aG8gY291bGQgYXBw ZW5kIHRvIHRoZSBsb2cgY291bGQgYWxzbyBkZWxldGUgaXQgKG9yIGFsdGVyIGl0KS4KKyAgIFRo aXMgcHJvYmxlbSBjb3VsZCBiZSB3b3JrZWQgYXJvdW5kIHVzaW5nIHNldHVpZC9zZXRnaWQgdHJp Y2tzLCBidXQKKyAgIHRoZXNlIHdvdWxkIG1vc3QgbGlrZWx5IGludGVyZmVyZSB3aXRoIHRoZSBv dGhlciBzZXR1aWQvc2V0Z2lkIHRyaWNrcworICAgQy1LZXJtaXQgbXVzdCB1c2UgZm9yIGdldHRp bmcgYXQgZGlhbG91dCBkZXZpY2VzIGFuZCBVVUNQIGxvZ2ZpbGVzLgorCis0LjE4LiBVbnByZWZp eGluZyBOVUwKKworICAgQXMgb2YgNi4xLjE5MyBBbHBoYS4xMCwgQy1LZXJtaXQgY2FuIGZpbmFs bHkgc2VuZCBhbmQgcmVjZWl2ZQorICAgZmlsZS10cmFuc2ZlciBwYWNrZXRzIGluIHdoaWNoIE5V TCAoQVNDSUkgMCkgaXMgdW5wcmVmaXhlZCAobm8gbW9yZQorICAgTlVMLXRlcm1pbmF0ZWQgcGFj a2V0cyEpLiBOVUwgaXMsIG9mIGNvdXJzZSwgZXh0cmVtZWx5IHByZXZhbGVudCBpbgorICAgYmlu YXJ5IGZpbGVzIHN1Y2ggYXMgZXhlY3V0YWJsZXMsIGFuZCB0aGlzIGhhcyBiZWVuIGEgc2lnbmlm aWNhbnQKKyAgIHNvdXJjZSBvZiBwYWNrZXQgb3ZlcmhlYWQuIEZvciBleGFtcGxlLCB3aGVuIHRy YW5zZmVycmluZyBpdHNlbGYgKHRoZQorICAgU3VuT1MgQy1LZXJtaXQgZXhlY3V0YWJsZSkgd2l0 aCBtaW5pbWFsIHByZWZpeGluZyBhbmQgOTAwMC1ieXRlCisgICBwYWNrZXRzLCB3ZSBzZWU6CisK KyAgRmlsZSBzaXplOiAgICAgICAgICAgICAgICAgICAgICAgMTA2NDk2MAorICBQYWNrZXQgY2hh cnMgd2l0aCAwIHByZWZpeGVkOiAgICAxMTk5NjI5ICBvdmVyaGVhZCA9IDEyLjY1JQorICBQYWNr ZXQgY2hhcnMgd2l0aCAwIHVucHJlZml4ZWQ6ICAxMDYyMzkzICBvdmVyaGVhZCA9IC0wLjAzJQor CisgICBUcmFuc2ZlciByYXRlcyBnbyB1cCBhY2NvcmRpbmdseSwgbm90IG9ubHkgYmVjYXVzZSBv ZiB0aGUgcmVkdWNlZAorICAgYW1vdW50IG9mIGkvbywgYnV0IGFsc28gYmVjYXVzZSBsZXNzIGNv bXB1dGF0aW9uIGlzIHJlcXVpcmVkIG9uIGVhY2gKKyAgIGVuZC4KKworNC4xOS4gQ2xlYXItQ2hh bm5lbCBQcm90b2NvbAorCisgICBOb3cgdGhhdCBDLUtlcm1pdCBpdHNlbGYgaXMgY2FwYWJsZSBv ZiBzZW5kaW5nIGFuZCByZWNlaXZpbmcgYW55IGJ5dGUKKyAgIGF0IGFsbCBvbiBhIGNsZWFyIGNo YW5uZWwgKFs1MjRdU2VjdGlvbiA0LjE4KSwgaXQgaXMsIGZvciB0aGUgZmlyc3QKKyAgIHRpbWUs IGluIGEgcG9zaXRpb24gdG8gbmVnb3RpYXRlIGEgY2xlYXIgY2hhbm5lbCB3aXRoIHRoZSBvdGhl ciBLZXJtaXQsCisgICBnaXZpbmcgaXQgcGVybWlzc2lvbiAoYnV0IG5vdCByZXF1aXJpbmcgaXQp IHRvIHVucHJlZml4IGFueSBhbmQgYWxsCisgICBjaGFyYWN0ZXJzIHRoYXQgaXQga25vd3MgYXJl IHNhZmUuIEluIGdlbmVyYWwgdGhpcyBtZWFucyBhbGwgYnV0IHRoZQorICAgS2VybWl0IHN0YXJ0 LW9mLXBhY2tldCBjaGFyYWN0ZXIgKG5vcm1hbGx5IEN0cmwtQSksIENhcnJpYWdlIFJldHVybgor ICAgKG5vdCBvbmx5IEtlcm1pdCdzIGVuZC1vZi1wYWNrZXQgY2hhcmFjdGVyLCBidXQgYWxzbyB0 cmVhdGVkIHNwZWNpYWxseQorICAgb24gVGVsbmV0IE5WVCBsaW5rcyksIGFuZCBJQUMgKDI1NSwg YWxzbyBzcGVjaWFsIHRvIFRlbG5ldCkuCisKKyAgIEJ5IGRlZmF1bHQsIEMtS2VybWl0IHdpbGwg c2F5IGl0IGhhcyBhIGNsZWFyIGNoYW5uZWwgb25seSBpZiBpdCBoYXMKKyAgIG9wZW5lZCBhIFRD UCBzb2NrZXQuIFNpbmNlIHRoZSBLZXJtaXQgcHJvZ3JhbSBvbiB0aGUgZmFyIGVuZCBvZiBhCisg ICBUQ1AvSVAgY29ubmVjdGlvbiBnZW5lcmFsbHkgZG9lcyBub3Qga25vdyBpdCBoYXMgYSBUQ1Av SVAgY29ubmVjdGlvbiwKKyAgIGl0IHdpbGwgbm90IGFubm91bmNlIGEgY2xlYXIgY2hhbm5lbCB1 bmxlc3MgaXQgaGFzIGJlZW4gdG9sZCB0byBkbyBzby4KKyAgIFRoZSBjb21tYW5kIGlzOgorCisg ICBTRVQgQ0xFQVItQ0hBTk5FTCB7IE9OLCBPRkYsIEFVVE8gfQorCisgICBBVVRPIGlzIHRoZSBk ZWZhdWx0LCBtZWFuaW5nIHRoYXQgdGhlIGNsZWFyLWNoYW5uZWwgc3RhdHVzIGlzCisgICBkZXRl cm1pbmVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgdHlwZSBvZiBjb25uZWN0aW9uLiBPTiBtZWFu cyB0bworICAgYW5ub3VuY2UgYSBjbGVhciBjaGFubmVsLCBPRkYgbWVhbnMgbm90IHRvIGFubm91 bmNlIGl0LiBVc2UgU0hPVworICAgU1RSRUFNSU5HIChbNTI1XVNlY3Rpb24gNC4yMCkgdG8gc2Vl IHRoZSBjdXJyZW50IENMRUFSLUNIQU5ORUwgc3RhdHVzLgorICAgU3lub255bTogU0VUIENMRUFS Q0hBTk5FTC4KKworICAgQ0xFQVItQ0hBTk5FTCBpcyBhbHNvIHNldCBpZiB5b3Ugc3RhcnQgQy1L ZXJtaXQgd2l0aCB0aGUgLUkgc3dpdGNoIChzZWUKKyAgIFs1MjZdU2VjdGlvbiA0LjIwKS4KKwor ICAgV2hlbmV2ZXIgYSBjbGVhciBjaGFubmVsIGlzIG5lZ290aWF0ZWQsIHRoZSByZXN1bHRpbmcg Y29udHJvbC1jaGFyYWN0ZXIKKyAgIHVucHJlZml4aW5nIGlzICJzdGlja3kiOyB0aGF0IGlzLCBp dCByZW1haW5zIGluIGVmZmVjdCBhZnRlciB0aGUKKyAgIHRyYW5zZmVyIHNvIHlvdSBjYW4gdXNl IFNIT1cgQ09OVFJPTCB0byBzZWUgd2hhdCB3YXMgbmVnb3RpYXRlZC4KKworICAgWW91IGNhbiBh bHNvIHNlZSB3aGV0aGVyIGEgY2xlYXIgY2hhbm5lbCB3YXMgbmVnb3RpYXRlZCBpbiB0aGUKKyAg IFNUQVRJU1RJQ1MgL1ZFUkJPU0UgRGlzcGxheS4KKworICAgVGhlIGFkdmFudGFnZSBvZiB0aGUg Y2xlYXIgY2hhbm5lbCBmZWF0dXJlIGlzIHRoYXQgaXQgY2FuIG1ha2UgZmlsZQorICAgdHJhbnNm ZXJzIGdvIGZhc3RlciBhdXRvbWF0aWNhbGx5LiBUaGUgZGlzYWR2YW50YWdlIHdvdWxkIGJlCisg ICBmaWxlLXRyYW5zZmVyIGZhaWx1cmVzIGlmIHRoZSBjaGFubmVsIGlzIG5vdCB0cnVseSBjbGVh ciwgZm9yIGV4YW1wbGUKKyAgIGlmIEMtS2VybWl0IG1hZGUgYSBUZWxuZXQgY29ubmVjdGlvbiB0 byBhIHRlcm1pbmFsIHNlcnZlciwgYW5kIHRoZW4KKyAgIGRpYWxlZCBvdXQgZnJvbSB0aGVyZTsg b3IgaWYgQy1LZXJtaXQgbWFkZSBhbiBSbG9naW4gY29ubmVjdGlvbiB0byBob3N0CisgICBhbmQg dGhlbiBtYWRlIGEgVGVsbmV0IGNvbm5lY3Rpb24gZnJvbSB0aGVyZSB0byBhbm90aGVyIGhvc3Qu IElmIGEgZmlsZQorICAgdHJhbnNmZXIgZmFpbHMgb24gYSBUQ1AvSVAgY29ubmVjdGlvbiwgdXNl IFNIT1cgQ09OVFJPTCB0byBjaGVjaworICAgd2hldGhlciBjb250cm9sIGNoYXJhY3RlcnMgYmVj YW1lIHVucHJlZml4ZWQgYXMgYSByZXN1bHQgb2YgcHJvdG9jb2wKKyAgIG5lZ290aWF0aW9ucywg YW5kL29yIFNIT1cgU1RSRUFNSU5HIChbNTI3XVNlY3Rpb24gNC4yMCkgdG8gc2VlIGlmCisgICAi Y2xlYXItY2hhbm5lbCIgd2FzIG5lZ290aWF0ZWQuIElmIHRoaXMgaGFwcGVuZWQsIHVzZSBTRVQg Q0xFQVItQ0hBTk5FTAorICAgT0ZGIGFuZCBTRVQgUFJFRklYSU5HIENBVVRJT1VTIChvciB3aGF0 ZXZlcikgdG8gcHJldmVudCBpdCBmcm9tCisgICBoYXBwZW5pbmcgYWdhaW4uCisKKzQuMjAuIFN0 cmVhbWluZyBQcm90b2NvbAorCisgICBBIG5ldyBLZXJtaXQgcHJvdG9jb2wgb3B0aW9uIGNhbGxl ZCAic3RyZWFtaW5nIiB3YXMgYWRkZWQgaW4gQy1LZXJtaXQKKyAgIDcuMC4gVGhlIGlkZWEgaXMg dGhhdCBpZiB0aGUgdHdvIEtlcm1pdCBwYXJ0bmVycyBoYXZlIGEgcmVsaWFibGUKKyAgIHRyYW5z cG9ydCAoc3VjaCBhcyBUQ1AvSVAgb3IgWC4yNSkgYmV0d2VlbiB0aGVtLCB0aGVuIHRoZXJlIGlz IG5vIG5lZWQKKyAgIHRvIHNlbmQgQUNLcyBmb3IgRGF0YSBwYWNrZXRzLCBvciBOQUtzLCBzaW5j ZSBhIHJlbGlhYmxlIHRyYW5zcG9ydAorICAgd2lsbCwgYnkgZGVmaW5pdGlvbiwgZGVsaXZlciBh bGwgcGFja2V0cyBpbiBvcmRlciBhbmQgdW5kYW1hZ2VkLiBPbgorICAgc3VjaCBhIGNvbm5lY3Rp b24sIHN0cmVhbWluZyBjdXRzIGRvd24gbm90IG9ubHkgb24gS2VybWl0IHByb2dyYW0KKyAgIG92 ZXJoZWFkIChzd2l0Y2hpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiByZWFkaW5nIGFuZCBzZW5k aW5nCisgICBwYWNrZXRzKSwgYnV0IGFsc28gdGVuZHMgdG8gbWFrZSB0aGUgdW5kZXJseWluZyB0 cmFuc3BvcnQgdXNlIGl0c2VsZgorICAgbW9yZSBlZmZpY2llbnRseSAoZS5nLiBieSBkZWZlYXRp bmcgdGhlIE5hZ2xlIGFsZ29yaXRobSBhbmQvb3IgRGVsYXllZAorICAgQUNLIHN0cmF0YWdlbSBv ZiB0aGUgVENQIGxheWVyKS4gRnVydGhlcm1vcmUsIGl0IGFsbG93cyB0cmFuc2ZlcnMgdG8KKyAg IHdvcmsgc21vb3RobHkgb24gZXh0cmVtZWx5IHNsb3cgbmV0d29yayBjb25nZXN0aW9ucyB0aGF0 IHdvdWxkCisgICBvdGhlcndpc2UgY2F1c2UgdGltZW91dHMgYW5kIHJldHJhbnNtaXNzaW9ucywg YW5kIGV2ZW4gZmFpbHVyZSB3aGVuIHRoZQorICAgcmV0cnkgbGltaXQgd2FzIGV4Y2VlZGVkLgor CisgICBUaGUgdHJpY2sgaXMga25vd2luZyB3aGVuIHdlIGNhbiBzdHJlYW06CisKKyAgICAxLiBJ ZiBDLUtlcm1pdCBoYXMgb3BlbmVkIGEgVENQIHNvY2tldCBvciBYLjI1IGNvbm5lY3Rpb24sIGl0 IG9mZmVycworICAgICAgIHN0cmVhbS4KKyAgICAyLiBJZiBDLUtlcm1pdCBoYXMgYmVlbiBzdGFy dGVkIHdpdGggdGhlIC1JICh1cHBlcmNhc2UpIG9wdGlvbiwgb3IgaWYKKyAgICAgICBpdCBoYXMg YmVlbiB0b2xkIHRvIFNFVCBSRUxJQUJMRSBPTiwgaXQgb2ZmZXJzIHRvIHN0cmVhbS4KKyAgICAz LiBJZiBDLUtlcm1pdCBpcyBpbiByZW1vdGUgbW9kZSwgYW5kIGhhcyBiZWVuIHRvbGQgdG8gU0VU IFJFTElBQkxFCisgICAgICAgQVVUTyAob3IgT04pLCBpdCBhbHdheXMgb2ZmZXJzIHRvIHN0cmVh bSwgYW5kIGFsc28gYWx3YXlzIGFncmVlcyB0bworICAgICAgIHN0cmVhbSwgaWYgdGhlIG90aGVy IEtlcm1pdCBvZmZlcnMuIFVubGVzcyB5b3UgdGFrZSBleHBsaWNpdAorICAgICAgIGFjdGlvbnMg dG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLCB0aGlzIGFsbG93cyB0aGUgbG9jYWwgS2VybWl0ICh0 aGUKKyAgICAgICBvbmUgdGhhdCBtYWRlIHRoZSBjb25uZWN0aW9uLCBhbmQgc28ga25vd3Mgd2hl dGhlciBpdCdzIHJlbGlhYmxlKQorICAgICAgIHRvIGNvbnRyb2wgc3RyZWFtaW5nLgorCisgICAo Tm90ZSB0aGF0IGFuIG9mZmVyIHRvIHN0cmVhbSBhbHNvIHJlc3VsdHMgaW4gYSBDbGVhci1DaGFu bmVsCisgICBhbm5vdW5jZW1lbnQgaWYgQ0xFQVItQ0hBTk5FTCBpcyBzZXQgdG8gQVVUTzsgc2Vl IFs1MjhdU2VjdGlvbiA0LjE5LikKKworICAgV2hlbiBCT1RIIEtlcm1pdHMgb2ZmZXIgdG8gc3Ry ZWFtLCB0aGVuIHRoZXkgc3RyZWFtOyBvdGhlcndpc2UgdGhleQorICAgZG9uJ3QuIFRodXMgc3Ry ZWFtaW5nLWNhcGFibGUgS2VybWl0IHByb2dyYW1zIGludGVyb3BlcmF0ZQorICAgYXV0b21hdGlj YWxseSBhbmQgdHJhbnNwYXJlbnRseSB3aXRoIG5vbnN0cmVhbWluZyBvbmVzLiBJZiB0aGUgdHdv CisgICBLZXJtaXRzIGRvIGFncmVlIHRvIHN0cmVhbSwgeW91J2xsIHNlZSB0aGUgd29yZCAiU1RS RUFNSU5HIiBvbiB0aGUKKyAgIGZ1bGxzY3JlZW4gZmlsZS10cmFuc2ZlciBkaXNwbGF5IGluIHRo ZSBXaW5kb3cgU2xvdHMgZmllbGQuIFlvdSBjYW4KKyAgIGFsc28gZmluZCBvdXQgYWZ0ZXJ3YXJk cyB3aXRoIHRoZSBTVEFUSVNUSUNTIG9yIFNIT1cgU1RSRUFNSU5HCisgICBjb21tYW5kcy4KKwor ICAgICBXQVJOSU5HOiBBdXRvbWF0aWMgY2hvaWNlIG9mIHN0cmVhbWluZyBpcyBiYXNlZCBvbiB0 aGUgYXNzdW1wdGlvbiBvZgorICAgICBhICJkaXJlY3QiIGVuZC10by1lbmQgbmV0d29yayBjb25u ZWN0aW9uOyBmb3IgZXhhbXBsZSwgYSBUZWxuZXQgb3IKKyAgICAgUmxvZ2luIGNvbm5lY3Rpb24g ZnJvbSBob3N0IEEgdG8gaG9zdCBCLCBhbmQgdHJhbnNmZXJyaW5nIGZpbGVzCisgICAgIGJldHdl ZW4gQSBhbmQgQi4gSG93ZXZlciwgaWYgeW91ciBjb25uZWN0aW9uIGhhcyBhZGRpdGlvbmFsCisg ICAgIGNvbXBvbmVudHMgLS0gc29tZXRoaW5nICJpbiB0aGUgbWlkZGxlIiAoQikgdGhhdCB5b3Ug aGF2ZSBtYWRlIGEKKyAgICAgbmV0d29yayBjb25uZWN0aW9uIHRvLCB3aGljaCBtYWtlcyBhIHNl cGFyYXRlIGNvbm5lY3Rpb24gdG8gdGhlCisgICAgIGRlc3RpbmF0aW9uIGhvc3QgKEMpLCB0aGVu IHlvdSBkb24ndCByZWFsbHkgaGF2ZSBhIHJlbGlhYmxlCisgICAgIGNvbm5lY3Rpb24sIGJ1dCBD LUtlcm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgdGhpczsgdHJhbnNmZXJyaW5nCisgICAgIGZp bGVzIGJldHdlZW4gQSBhbmQgQyB3aWxsIHByb2JhYmx5IGZhaWwuIEluIHN1Y2ggY2FzZXMsIHlv dSdsbCBuZWVkCisgICAgIHRvIHRlbGwgdGhlICpsb2NhbCogQy1LZXJtaXQgdG8gInNldCByZWxp YWJsZSBvZmYiIGJlZm9yZQorICAgICB0cmFuc2ZlcnJpbmcgZmlsZXMgKGl0IGRvZXMgbm8gZ29v ZCB0byBnaXZlIHRoaXMgY29tbWFuZCB0byB0aGUKKyAgICAgcmVtb3RlIEtlcm1pdCBzaW5jZSB0 aGUgbG9jYWwgb25lIGNvbnRyb2xzIHRoZSBSRUxJQUJMRSBzZXR0aW5nKS4KKworICAgU3RyZWFt aW5nIGlzIGxpa2UgdXNpbmcgYW4gaW5maW5pdGUgd2luZG93IHNpemUsIHdpdGggbm8gdGltZW91 dHMgYW5kCisgICBubyB0b2xlcmFuY2UgZm9yIHRyYW5zbWlzc2lvbiBlcnJvcnMgKHNpbmNlIHRo ZXJlIHNob3VsZG4ndCBiZSBhbnkpLiBJdAorICAgcmVsaWVzIG9uIHRoZSB1bmRlcmx5aW5nIHRy YW5zcG9ydCBmb3IgZmxvdyBjb250cm9sLCBlcnJvciBjb3JyZWN0aW9uLAorICAgdGltZW91dHMs IGFuZCByZXRyYW5zbWlzc2lvbi4gVGh1cyBpdCBpcyB2ZXJ5IHN1aXRhYmxlIGZvciB1c2Ugb24K KyAgIFRDUC9JUCBjb25uZWN0aW9ucywgZXNwZWNpYWxseSBzbG93IG9yIGJ1cnN0eSBvbmVzLCBz aW5jZSBLZXJtaXQncworICAgcGFja2V0IHRpbWVvdXRzIHdvbid0IGludGVyZmVyZSB3aXRoIHRo ZSB0cmFuc2ZlciAtLSBlYWNoIHBhY2tldCB0YWtlcworICAgYXMgbG9uZyB0byByZWFjaCBpdHMg ZGVzdGluYXRpb24gYXMgaXQgdGFrZXMgVENQIHRvIGRlbGl2ZXIgaXQuIElmIFRDUAorICAgY2Fu J3QgZGVsaXZlciB0aGUgcGFja2V0IHdpdGhpbiBpdHMgb3duIHRpbWVvdXQgcGVyaW9kIChvdmVy IHdoaWNoCisgICBLZXJtaXQgaGFzIG5vIGNvbnRyb2wpLCBpdCBzaWduYWxzIGEgZmF0YWwgZXJy b3IuIEp1c3QgbGlrZSBGVFAuCisKKyAgIFN0cmVhbWluZyBnb2VzIG11Y2ggZmFzdGVyIHRoYW4g bm9uLXN0cmVhbWluZyB3aGVuIGEgcmVsYXRpdmVseSBzbWFsbAorICAgcGFja2V0IGxlbmd0aCBp cyB1c2VkLCBhbmQgaXQgdGVuZHMgdG8gZ28gZmFzdGVyIHRoYW4gbm9uLXN0cmVhbWluZworICAg d2l0aCBldmVuIHRoZSBsb25nZXN0IHBhY2tldCBsZW5ndGhzLiBUaGUgS2VybWl0IHdpbmRvdyBz aXplIGlzCisgICBpcnJlbGV2YW50IHRvIHN0cmVhbWluZyBwcm90b2NvbCwgYnV0IHN0aWxsIG1p Z2h0IGFmZmVjdCBwZXJmb3JtYW5jZSBpbgorICAgc21hbGwgd2F5cyBzaW5jZSBpdCBjYW4gcmVz dWx0IGluIGRpZmZlcmVudCBwYXRocyB0aHJvdWdoIHRoZSBjb2RlLgorCisgICBUaGUgZGVmaW5p dGlvbiBvZiAicmVsaWFibGUgdHJhbnNwb3J0IiBkb2VzIG5vdCBuZWNlc3NhcmlseSBkZW1hbmQK KyAgIDgtYml0IGFuZCBjb250cm9sLWNoYXJhY3RlciB0cmFuc3BhcmVuY3kuIFN0cmVhbWluZyBj YW4gd29yayB3aXRoCisgICBwYXJpdHkgYW5kL29yIGNvbnRyb2wtY2hhcmFjdGVyIHByZWZpeGlu ZyBqdXN0IGFzIHdlbGwgKGJ1dCBub3QgYXMKKyAgIGZhc3QpIGFzIHdpdGhvdXQgdGhlbTsgaW4g c3VjaCBjYXNlcyB5b3UgY2FuIGxlYXZlIFJFTElBQkxFIHNldCB0byBPTiwKKyAgIGJ1dCBzZXQg Q0xFQVJDSEFOTkVMIGFuZC9vciBQQVJJVFkgYXBwcm9wcmlhdGVseS4KKworICAgTWF4aW11bSBw ZXJmb3JtYW5jZSAtLSBjb21wYXJhYmxlIHRvIGFuZCBvZnRlbiBleGNlZWRpbmcgRlRQIC0tIGlz CisgICBhY2hpZXZlZCBvbiBzb2NrZXQtdG8tc29ja2V0IGNvbm5lY3Rpb25zIChpbiB3aGljaCB0 aGUgY29uc2lkZXJhYmxlCisgICBvdmVyaGVhZCBvZiB0aGUgdGVybWluYWwgZHJpdmVyIGFuZCBU ZWxuZXQgb3IgUmxvZ2luIHNlcnZlciBpcworICAgZWxpbWluYXRlZCkgd2l0aCBsb25nIHBhY2tl dHMgYW5kIHRoZSBuZXcgImJyaWVmIiBmaWxlLXRyYW5zZmVyIGRpc3BsYXkKKyAgIChbNTI5XVNl Y3Rpb24gNC4xNikuCisKKzQuMjAuMS4gQ29tbWFuZHMgZm9yIFN0cmVhbWluZworCisgICBTRVQg UkVMSUFCTEUgeyBPTiwgT0ZGLCBBVVRPIH0KKyAgICAgICAgICBTRVQgUkVMSUFCTEUgT04gdGVs bHMgS2VybWl0IHRoYXQgaXQgaGFzIGEgcmVsaWFibGUgdHJhbnNwb3J0LgorICAgICAgICAgIFNF VCBSRUxJQUJMRSBPRkYgdGVsbHMgS2VybWl0IHRoZSB0cmFuc3BvcnQgaXMgbm90IHJlbGlhYmxl LgorICAgICAgICAgIFNFVCBSRUxJQUJMRSBBVVRPIHRlbGxzIEtlcm1pdCB0aGF0IGl0IHNob3Vs ZCBTRVQgUkVMSUFCTEUgT04KKyAgICAgICAgICB3aGVuZXZlciBpdCBtYWtlcyBhIHJlbGlhYmxl IGNvbm5lY3Rpb24gKGUuZy4gVEVMTkVUIG9yIFNFVCBIT1NUCisgICAgICAgICAgb24gYSBUQ1Av SVAgb3IgWC4yNSBuZXR3b3JrKSwgYW5kIHdoZW4gaW4gcmVtb3RlIG1vZGUgaXQgc2hvdWxkCisg ICAgICAgICAgYmVsaWV2ZSB0aGUgdHJhbnNwb3J0IGlzIHJlbGlhYmxlIGlmIHRoZSBvdGhlciBL ZXJtaXQgc2F5cyBpdCBpcworICAgICAgICAgIGR1cmluZyBLZXJtaXQgcHJvdG9jb2wgbmVnb3Rp YXRpb24uCisKKyAgIEFVVE8gaXMgdGhlIGRlZmF1bHQ7IHRoZSBLZXJtaXQgcHJvZ3JhbSB0aGF0 IG1ha2VzIHRoZSBjb25uZWN0aW9uIGtub3dzCisgICB3aGV0aGVyIGl0IGlzIHJlbGlhYmxlLCBh bmQgdGVsbHMgdGhlIHJlbW90ZSBLZXJtaXQuCisKKyAgIFRoZSBSRUxJQUJMRSBzZXR0aW5nIGhh cyBzZXZlcmFsIGVmZmVjdHMsIGluY2x1ZGluZzoKKworICAgICAqIEl0IGNhbiBhZmZlY3QgdGhl IHRpbWVvdXRzIHVzZWQgZHVyaW5nIG5vcm1hbCBBQ0svTkFLIHByb3RvY29sLgorICAgICAqIEl0 IGNhbiBhZmZlY3QgdGhlIGNsZWFyLWNoYW5uZWwgYW5ub3VuY2VtZW50LgorICAgICAqIEl0IGNh biBhZmZlY3Qgc3RyZWFtaW5nLgorCisgICBJZiB5b3UgVEVMTkVUIG9yIFNFVCBIT1NUIHNvbWV3 aGVyZSwgdGhpcyBpbmNsdWRlcyBhbiBpbXBsaWNpdCBTRVQKKyAgIFJFTElBQkxFIE9OIGNvbW1h bmQuIFRoZSAtSSBjb21tYW5kLWxpbmUgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gU0VUCisgICBS RUxJQUJMRSBPTi4KKworICAgU2luY2UgU0VUIFJFTElBQkxFIE9OIChhbmQgLUkpIGFsc28gaW1w bGllcyBTRVQgQ0xFQVIgQ0hBTk5FTCBPTiwgeW91CisgICBtaWdodCBmaW5kIHRoYXQgaW4gY2Vy dGFpbiBjYXNlcyB5b3UgbmVlZCB0byB0ZWxsIEtlcm1pdCB0aGF0IGV2ZW4KKyAgIHRob3VnaCB0 aGUgY29ubmVjdGlvbiBpcyByZWxpYWJsZSwgaXQgZG9lc24ndCBoYXZlIGEgY2xlYXIgY2hhbm5l bAorICAgYWZ0ZXIgYWxsOgorCisgIFNFVCBDTEVBUi1DSEFOTkVMIE9GRgorICBTRVQgUFJFRklY SU5HIENBVVRJT1VTIDsgb3Igd2hhdGV2ZXIuLi4KKworICAgWW91IGNhbiBjb250cm9sIHN0cmVh bWluZyB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXIgaXRlbXMgd2l0aDoKKworICBTRVQgU1RS RUFNSU5HIHsgT04sIE9GRiwgQVVUTyB9CisKKyAgIEFVVE8gaXMgdGhlIGRlZmF1bHQsIG1lYW5p bmcgc3RyZWFtaW5nIHdpbGwgb2NjdXIgaWYgS2VybWl0IGhhcyBtYWRlIGEKKyAgIFRDUC9JUCBj b25uZWN0aW9uIG9yIGlmIFJFTElBQkxFIGlzIE9OIChvciBpdCB3YXMgc3RhcnRlZCB3aXRoIHRo ZSAtSQorICAgY29tbWFuZCBsaW5lIG9wdGlvbikuIE9GRiBtZWFucyBkb24ndCBzdHJlYW07IE9O IG1lYW5zIG9mZmVyIHRvIHN0cmVhbQorICAgbm8gbWF0dGVyIHdoYXQuCisKKzQuMjAuMi4gRXhh bXBsZXMgb2YgU3RyZWFtaW5nCisKKyAgIEhlcmUgd2UgbG9vayBhdCB0aGUgdXNlIGFuZCBiZWhh dmlvciBvZiBzdHJlYW1pbmcgb24gc2V2ZXJhbCBkaWZmZXJlbnQKKyAgIGtpbmRzIG9mIGNvbm5l Y3Rpb25zLCBhbmQgY29tcGFyZSBpdHMgcGVyZm9ybWFuY2Ugd2l0aCBub24tc3RyZWFtaW5nCisg ICB0cmFuc2ZlcnMuCisKKzQuMjAuMi4xLiBTdHJlYW1pbmcgb24gU29ja2V0LXRvLVNvY2tldCBD b25uZWN0aW9ucworCisgICBIZXJlIHdlIGdldCBzdHJlYW1pbmcgYXV0b21hdGljYWxseSB3aGVu IGJvdGggS2VybWl0IHByb2dyYW1zIGFyZQorICAgY2FwYWJsZSBvZiBpdCwgc2luY2UgdGhleSBi b3RoIG1ha2Ugc29ja2V0IGNvbm5lY3Rpb25zLiBGb3IgZXhhbXBsZSwgb24KKyAgIHRoZSBmYXIg ZW5kOgorCisgIEMtS2VybWl0PiBzZXQgaG9zdCAqIDMwMDAKKyAgQy1LZXJtaXQ+IHNlcnZlcgor CisgICBhbmQgb24gdGhlIG5lYXIgZW5kOgorCisgIEMtS2VybWl0PiBzZXQgaG9zdCBmb28uYmFy Lnh5ei5jb20gMzAwMAorICAobm93IGdpdmUgU0VORCBhbmQgR0VUIGNvbW1hbmQpCisKKyAgIEFs bCBzdWJzZXF1ZW50IGZpbGUgdHJhbnNmZXJzIHVzZSBzdHJlYW1pbmcgYXV0b21hdGljYWxseS4K KworICAgSGVyZSBhcmUgdGhlIHJlc3VsdHMgZnJvbSA4NCB0cmlhbHMsIHJ1biBvbiBhIHByb2R1 Y3Rpb24gbmV0d29yaywKKyAgIGRpc2stdG8tZGlzaywgaW4gd2hpY2ggYSAxLU1CIGJpbmFyeSBm aWxlICh0aGUgU3VuT1MgQy1LZXJtaXQgU3BhcmMKKyAgIGV4ZWN1dGFibGUpIHdhcyBzZW50IGZy b20gYSBTdW4gU3BhcmMtMTAgd2l0aCBTdW5PUyA0LjEuMyB0byBhbiBJQk0KKyAgIFBvd2VyIFNl cnZlciA4NTAgd2l0aCBBSVggNC4xLCBzb2NrZXQtdG8tc29ja2V0LCBvdmVyIGEgMTBNYnBzIDEw QmFzZVQKKyAgIEV0aGVybmV0LCB1c2luZyBtaW5pbWFsIGNvbnRyb2wtY2hhcmFjdGVyIHVucHJl Zml4aW5nLCB3aW5kb3cgc2l6ZXMKKyAgIGZyb20gMTAgdG8gMzIsIGFuZCBwYWNrZXQgc2l6ZXMg ZnJvbSAxNDUwIHRvIDkwMTA6CisKKyAgICAgICAgICAgICAgICBTdHJlYW1pbmcgICAgTm9uc3Ry ZWFtaW5nCisgIE1heCBDUFMgICAgICAgICA3NDg5NTUgICAgICAgIDY4MzM1NAorICBNaW4gQ1BT ICAgICAgICAgMjIxNTIyICAgICAgICAxNzI0OTEKKyAgTWVhbiBDUFMgICAgICAgIDY0NjEzNCAg ICAgICAgNTU4NjgwCisgIE1lZGlhbiBDUFMgICAgICA2NzgwNDMgICAgICAgIDU5NTg3NAorICBT dGQgRGV2ICAgICAgICAgMTAxNDI0ICAgICAgICAxMTE0OTMKKworICAgQ29ycmVsYXRpb25zOgor CisgIENQUyBhbmQgd2luZG93IHNpemU6ICAgLTAuMDM2CisgIENQUyBhbmQgcGFja2V0IGxlbmd0 aDogIDAuMjU0CisgIENQUyBhbmQgc3RyZWFtaW5nOiAgICAgIDAuMzgyCisKKyAgIE5vdGUgdGhh dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gc3RyZWFtaW5nIGFuZCB0aHJvdWdocHV0IGlzCisg ICBzaWduaWZpY2FudGx5IHN0cm9uZ2VyIHRoYW4gdGhhdCBiZXR3ZWVuIENQUyBhbmQgd2luZG93 IHNpemUgb3IgcGFja2V0CisgICBsZW5ndGguCisKKyAgIEFsc28gbm90ZSB0aGF0IHRoaXMgYW5k IGFsbCBvdGhlciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgaW4gdGhpcworICAgc2VjdGlvbiBh cmUgc25hcHNob3RzIGluIHRpbWU7IHRoZSByZXN1bHRzIGNvdWxkIGJlIG11Y2ggZGlmZmVyZW50 IGF0CisgICBvdGhlciB0aW1lcyB3aGVuIHRoZSBsb2FkIG9uIHRoZSBzeXN0ZW1zIGFuZC9vciB0 aGUgbmV0d29yayBpcyBoaWdoZXIKKyAgIG9yIGxvd2VyLgorCisgICBJbiBhIHNpbWlsYXIgc29j a2V0LXRvLXNvY2tldCB0cmlhbCwgYnV0IHRoaXMgdGltZSBvdmVyIGEgd2lkZS1hcmVhCisgICBU Q1AvSVAgY29ubmVjdGlvbiAoZnJvbSBOZXcgWW9yayBDaXR5IHRvIExvZ2FuLCBVdGFoLCBhYm91 dCAyMDAwCisgICBtaWxlcyksIHRoZSBmb2xsb3dpbmcgcmVzdWx0cyB3ZXJlIG9idGFpbmVkOgor CisgICAgICAgICAgICAgICAgU3RyZWFtaW5nICAgIE5vbnN0cmVhbWluZworICBNYXggQ1BTICAg ICAgICAgMzM4MjI2ICAgICAgICAzMTgyMDMKKyAgTWluIENQUyAgICAgICAgIDE5MTY1OSAgICAg ICAgMTMyMzE0CisgIE1lYW4gQ1BTICAgICAgICAyOTM3NDQgICAgICAgIDI1OTI0MAorICBNZWRp YW4gQ1BTICAgICAgMzAwODQ1ICAgICAgICAyNzMyNzEKKyAgU3RkIERldiAgICAgICAgICA0MTkx NCAgICAgICAgIDUyMzUxCisKKyAgIENvcnJlbGF0aW9uczoKKworICBDUFMgYW5kIHdpbmRvdyBz aXplOiAgICAwLjE2NAorICBDUFMgYW5kIHBhY2tldCBsZW5ndGg6ICAwLjEyMworICBDUFMgYW5k IHN0cmVhbWluZzogICAgICAwLjM0NgorCis0LjIwLjIuMi4gU3RyZWFtaW5nIG9uIFRlbG5ldCBD b25uZWN0aW9ucworCisgICBJbiB0aGlzIGNhc2UgdGhlIGxvY2FsIGNvcHkgb2YgS2VybWl0IGlz IHRvbGQgdG8gVEVMTkVUIG9yIFNFVCBIT1NULAorICAgYW5kIHNvIGl0IGtub3dzIGl0IGhhcyBh IHJlbGlhYmxlIGNvbm5lY3Rpb24gYW5kIC0tIHVubGVzcyBpdCBoYXMgYmVlbgorICAgdG9sZCBu b3QgdG8gLS0gd2lsbCBvZmZlciB0byBzdHJlYW0sIGFuZCB0aGUgb3RoZXIgS2VybWl0IHByb2dy YW0sCisgICBzaW5jZSBpdCBoYXMgU1RSRUFNSU5HIHNldCB0byBBVVRPLCBhZ3JlZXMuCisKKyAg IFNpbmNlIHdlIGhhdmUgYSByZWxpYWJsZSBjb25uZWN0aW9uLCB3ZSdsbCBhbHNvIGdldCBjb250 cm9sLWNoYXJhY3RlcgorICAgdW5wcmVmaXhpbmcgYXV0b21hdGljYWxseSBiZWNhdXNlIG9mIHRo ZSBuZXcgY2xlYXItY2hhbm5lbCBwcm90b2NvbAorICAgKFs1MzBdU2VjdGlvbiA0LjE5KS4KKwor ICAgQW55IGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyBzdHJlYW1pbmcgYXJlIGZhdGFsIHRvIHRo ZSB0cmFuc2Zlci4gVGhlCisgICBtZXNzYWdlIGlzICJUcmFuc21pc3Npb24gZXJyb3Igb24gcmVs aWFibGUgbGluayIuIFNob3VsZCB0aGlzIGhhcHBlbjoKKworICAgIDEuIENoZWNrIHRoZSByZW1v dGUgS2VybWl0J3MgZmxvdyBjb250cm9sIHNldHRpbmcgKFNIT1cKKyAgICAgICBDT01NVU5JQ0FU SU9OUykuIElmIGl0IGlzIE5PTkUsIGNoYW5nZSBpdCB0byBYT04vWE9GRiwgb3IgdmljZQorICAg ICAgIHZlcnNhLiBJZiBpdCBpcyBYT04vWE9GRiAob3IgeW91IGp1c3QgY2hhbmdlZCBpdCB0byBY T0ZGL1hPRkYpLAorICAgICAgIG1ha2Ugc3VyZSB0aGUgZmlsZSBzZW5kZXIgaXMgcHJlZml4aW5n IHRoZSBYT04gYW5kIFhPRkYgY2hhcmFjdGVycy4KKyAgICAgICBJbiB0aGUgbW9zdCBkcmFzdGlj IGNhc2UsIHVzZSAic2V0IHByZWZpeCBhbGwiIHRvIGZvcmNlIHByZWZpeGluZworICAgICAgIG9m IGFsbCBjb250cm9sIGNoYXJhY3RlcnMuCisgICAgMi4gVGhlIHJlbW90ZSBUZWxuZXQgc2VydmVy IG1pZ2h0IGNob3Agb2ZmIHRoZSA4dGggYml0LiBJbiB0aGF0IGNhc2UsCisgICAgICAgdGVsbCBD LUtlcm1pdCB0byAic2V0IHBhcml0eSBzcGFjZSIuIE9yLCB5b3UgbWlnaHQgYmUgYWJsZSB0byBm b3JjZQorICAgICAgIHRoZSBUZWxuZXQgdG8gYWxsb3cgZWlnaHQtYml0IGRhdGEgYnkgdGVsbGlu ZyBDLUtlcm1pdCB0byAic2V0CisgICAgICAgdGVsb3B0IGJpbmFyeSByZXF1ZXN0IGFjY2VwdCIg LS0gdGhhdCBpcywgcmVxdWVzdCB0aGUgVGVsbmV0IHNlcnZlcgorICAgICAgIHRvIGVudGVyIGJp bmFyeSBtb2RlLCBhbmQgYWNjZXB0IGJpbmFyeS1tb2RlIGJpZHMgZnJvbSB0aGUgc2VydmVyLgor ICAgIDMuIFRoZSByZW1vdGUgVGVsbmV0IHNlcnZlciBtaWdodCBoYXZlIGEgYnVmZmVyaW5nIGxp bWl0YXRpb24uIElmIGEKKyAgICAgICBhbmQgYiBkb24ndCBjdXJlIHRoZSBwcm9ibGVtLCB0ZWxs IHRoZSBmaWxlIHJlY2VpdmVyIHRvICJzZXQKKyAgICAgICByZWNlaXZlIHBhY2tldC1sZW5ndGgg MTAwMCIgKG9yIG90aGVyIG51bWJlciAtLSB1c2UgdGhlIGxhcmdlc3Qgb25lCisgICAgICAgdGhh dCB3b3JrcykuIFRoaXMgdG9vLCBpcyBubyBkaWZmZXJlbnQgZnJvbSB0aGUgbm9uLXN0cmVhbWlu ZyBjYXNlCisgICAgICAgKG1vcmUgYWJvdXQgdGhpcyBpbiBbNTMxXVNlY3Rpb24gNC4yMC4yLjMp LgorCisgICBBbmQgcmVtZW1iZXIgeW91IGNhbiBjb250aW51ZSBpbnRlcnJ1cHRlZCBiaW5hcnkt bW9kZSB0cmFuc2ZlcnMgd2hlcmUKKyAgIHRoZXkgbGVmdCBvZmYgd2l0aCB0aGUgUkVTRU5EICg9 IFNFTkQgL1JFQ09WRVIpIGNvbW1hbmQuCisKKyAgIEhlcmUgYXJlIHRoZSBmaWd1cmVzIGZvciB0 aGUgc2FtZSA4NCB0cmlhbHMgYmV0d2VlbiB0aGUgc2FtZSBTdW4gYW5kCisgICBJQk0gaG9zdHMg YXMgaW4gNC4yMC4yLjEsIG9uIHRoZSBzYW1lIG5ldHdvcmssIGJ1dCBvdmVyIGEgVGVsbmV0Cisg ICBjb25uZWN0aW9uIHJhdGhlciB0aGFuIHNvY2tldC10by1zb2NrZXQ6CisKKyAgICAgICAgICAg ICAgICAgIFN0cmVhbWluZyAgICBOb25zdHJlYW1pbmcKKyAgTWF4IENQUyAgICAgICAgIDM1MDA4 OCAgICAgICAgMzIyNTIzCisgIE1pbiBDUFMgICAgICAgICAgOTU1NDcgICAgICAgIDE3MzE1Mgor ICBNZWFuIENQUyAgICAgICAgMzIxMzcyICAgICAgICAyODE4MzAKKyAgTWVkaWFuIENQUyAgICAg IDM0MjYwNCAgICAgICAgMjkxNDY5CisgIFN0ZCBEZXYgICAgICAgICAgNDA1MDMgICAgICAgICAy OTk0OAorCisgICBDb3JyZWxhdGlvbnM6CisKKyAgQ1BTIGFuZCB3aW5kb3cgc2l6ZTogICAgMC4w MDEKKyAgQ1BTIGFuZCBwYWNrZXQgbGVuZ3RoOiAgMC4xNTIKKyAgQ1BTIGFuZCBzdHJlYW1pbmc6 ICAgICAgMC4xMjgKKworICAgSGVyZSB0aGUgZWZmZWN0IGlzIG5vdCBhcyBlbXBoYXRpYyBhcyBp biB0aGUgc29ja2V0LXRvLXNvY2tldCBjYXNlLCB5ZXQKKyAgIG9uIHRoZSB3aG9sZSBzdHJlYW1p bmcgdGVuZHMgdG8gYmUgYmVuZWZpY2lhbC4KKworICAgQWRkaXRpb25hbCBtZWFzdXJlbWVudHMg b24gSFAtVVggdXNpbmcgQy1LZXJtaXQgNy4wIEJldGEuMDY6CisKKyAgICAgICAgICAgICAgICAg IFdpbmRvd2luZyAgICAgU3RyZWFtaW5nCisgIEhQLVVYIDgtPjggICAgICBub3QgdGVzdGVkICAg ICAgIDE0S2NwcworICBIUC1VWCA4LT45ICAgICAgbm90IHRlc3RlZCAgICAgICA3NktjcHMKKyAg SFAtVVggOC0+MTAgICAgICAzNktjcHMgICAgICAgICAgNjZLY3BzCisgIEhQLVVYIDktPjkgICAg ICBub3QgdGVzdGVkICAgICAgMTkwS2NwcworICBIUC1VWCA5LT4xMCAgICAgMTYwS2NwcyAgICAg ICAgIDM3OEtjcHMKKworNC4yMC4yLjMuIFN0cmVhbWluZyB3aXRoIExpbWl0ZWQgUGFja2V0IExl bmd0aAorCisgICBUaGUgSVJJWCB0ZWxuZXQgc2VydmVyIChhdCBsZWFzdCB0aGUgb25lcyBvYnNl cnZlZCBpbiBJUklYIDUuMyBhbmQgNi4yKQorICAgZG9lcyBub3QgYWxsb3cgS2VybWl0IHRvIHNl bmQgcGFja2V0cyBsb25nZXIgdGhhbiA0MDk2IGJ5dGVzLiBUaHVzIHdoZW4KKyAgIHNlbmRpbmcg ZnJvbSBJUklYIEMtS2VybWl0IHdoZW4gaXQgaXMgb24gdGhlIHJlbW90ZSBlbmQgb2YgYSBUZWxu ZXQKKyAgIGNvbm5lY3Rpb24sIHRoZSBwYWNrZXQgbGVuZ3RoIG11c3QgYmUgNEsgb3IgbGVzcy4g VHJpYWxzIGluIHRoaXMgY2FzZQorICAgKGluIHdoaWNoIHBhY2tldCBsZW5ndGhzIHJhbmdlIGZy b20gMTQ1MCB0byA0MDAwKSBzaG93IGEgc3Ryb25nCisgICBhZHZhbnRhZ2UgZm9yIHN0cmVhbWlu Zywgd2hpY2ggd291bGQgYmUgZXZpZGVudCBpbiBhbnkgb3RoZXIgY2FzZSB3aGVyZQorICAgdGhl IHBhY2tldCBsZW5ndGggaXMgcmVzdHJpY3RlZCwgYW5kIHN0cm9uZ2VyIHRoZSBzaG9ydGVyIHRo ZSBtYXhpbXVtCisgICBwYWNrZXQgbGVuZ3RoLgorCisgICAgICAgICAgICAgICAgICBTdHJlYW1p bmcgICAgTm9uc3RyZWFtaW5nCisgIE1heCBDUFMgICAgICAgICA0MjYxODcgICAgICAgIDM2Njg3 MAorICBNaW4gQ1BTICAgICAgICAgNDA3NTAwICAgICAgICAyNzY1MTcKKyAgTWVhbiBDUFMgICAg ICAgIDQxNTIyNiAgICAgICAgMzM5MTY4CisgIE1lZGlhbiBDUFMgICAgICA0MTQxMzkgICAgICAg IDM0MzgwMworICBTdGQgRGV2ICAgICAgICAgICA2MDk0ICAgICAgICAgMjU4NTEKKworICAgQ29y cmVsYXRpb25zOgorCisgIENQUyBhbmQgd2luZG93IHNpemU6ICAgIDAuMTE2CisgIENQUyBhbmQg cGFja2V0IGxlbmd0aDogIDAuMjQxCisgIENQUyBhbmQgc3RyZWFtaW5nOiAgICAgIDAuOTAxCisK KzQuMjAuMi40LiBTdHJlYW1pbmcgb24gRGlhbHVwIENvbm5lY3Rpb25zCisKKyAgIEhlcmUgImRp YWx1cCIgcmVmZXJzIHRvIGEgImRpcmVjdCIgZGlhbHVwIGNvbm5lY3Rpb24sIG5vdCBhIFNMSVAg b3IgUFBQCisgICBjb25uZWN0aW9uLCB3aGljaCBpcyBvbmx5IGEgcGFydGljdWxhciBraW5kIG9m IFRDUC9JUCBjb25uZWN0aW9uLgorCisgICBBdHRlbXB0IHRoaXMgYXQgeW91ciBvd24gcmlzaywg YW5kIHRoZW4gb25seSBpZiAoYSkgeW91IGhhdmUKKyAgIGVycm9yLWNvcnJlY3RpbmcgbW9kZW1z LCBhbmQgKGIpIHRoZSBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBtb2RlbXMgYW5kCisgICBjb21w dXRlcnMgYXJlIGFsc28gZXJyb3ItZnJlZSwgcGVyZmVjdGx5IGZsb3ctY29udHJvbGxlZCwgYW5k IGZyZWUgb2YKKyAgIGludGVycnVwdCBjb25mbGljdHMuIFN0cmVhbWluZyBjYW4gYmUgdXNlZCBl ZmZlY3RpdmVseSBhbmQgdG8gZmFpcmx5CisgICBnb29kIGFkdmFudGFnZSBvbiBzdWNoIGNvbm5l Y3Rpb25zLCBidXQgcmVtZW1iZXIgdGhhdCB0aGUgdHJhbnNmZXIgaXMKKyAgIGZhdGFsIGlmIGV2 ZW4gb25lIGVycm9yIGlzIGRldGVjdGVkIChhbHNvIHJlbWVtYmVyIHRoYXQgc2hvdWxkIGEKKyAg IGJpbmFyeS1tb2RlIHRyYW5zZmVyIGZhaWwsIGl0IGNhbiBiZSByZWNvdmVyZWQgZnJvbSB0aGUg cG9pbnQgb2YKKyAgIGZhaWx1cmUgd2l0aCBSRVNFTkQpLgorCisgICBUbyB1c2Ugc3RyZWFtaW5n IG9uIGFuIHVucmVsaWFibGUgY29ubmVjdGlvbiwgeW91IG11c3QgdGVsbCBib3RoCisgICBLZXJt aXRzIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgcmVsaWFibGU6CisKKyAga2VybWl0IC1JCisKKyAg IG9yOgorCisgIEMtS2VybWl0PiBzZXQgcmVsaWFibGUgb24KKworICAgSW4gdGhpcyBjYXNlLCBp dCB3aWxsIHByb2JhYmx5IGJlIG5lY2Vzc2FyeSB0byBwcmVmaXggc29tZSBjb250cm9sCisgICBj aGFyYWN0ZXJzLCBmb3IgZXhhbXBsZSBpZiB5b3VyIGNvbm5lY3Rpb24gaXMgdGhyb3VnaCBhIHRl cm1pbmFsIHNlcnZlcgorICAgdGhhdCBoYXMgYW4gZXNjYXBlIGNoYXJhY3Rlci4gTW9zdCBDaXNj byB0ZXJtaW5hbCBzZXJ2ZXJzLCBmb3IgZXhhbXBsZSwKKyAgIHJlcXVpcmUgQ3RybC1eICgzMCwg YXMgd2VsbCBhcyBpdHMgaGlnaC1iaXQgZXF1aXZhbGVudCwgMTU4KSB0byBiZQorICAgcHJlZml4 ZWQuIFRvIHVucHJlZml4IHRoZXNlLCB5b3UnbGwgbmVlZCB0byBkZWZlYXQgdGhlICJjbGVhciBj aGFubmVsIgorICAgZmVhdHVyZToKKworICBDLUtlcm1pdD4gc2V0IHJlbGlhYmxlIG9uCisgIEMt S2VybWl0PiBzZXQgY2xlYXItY2hhbm5lbCBvZmYKKyAgQy1LZXJtaXQ+IHNldCBwcmVmaXhpbmcg bm9uZQorICBDLUtlcm1pdD4gc2V0IGNvbnRyb2wgcHJlZml4IDEgMTMgMzAgMTU4IDsgYW5kIHdo YXRldmVyIGVsc2UgaXMgbmVjZXNzYXJ5CisKKyAgIERpYWx1cCB0cmlhbHMgd2VyZSBkb25lIHVz aW5nIGZpeGVkIGxhcmdlIHdpbmRvdyBhbmQgcGFja2V0IHNpemVzLiBUaGV5CisgICBjb21wYXJl IHVwbG9hZGluZyBhbmQgZG93bmxvYWRpbmcgb2YgdHdvIGNvbW1vbiB0eXBlcyBvZiBmaWxlcywg d2l0aAorICAgYW5kIHdpdGhvdXQgc3RyZWFtaW5nLiBDb25maWd1cmF0aW9uOgorCisgICAgIEhQ LTkwMDAvNzE1LzMzIC0tIDU3NjAwYnBzLCBSVFMvQ1RTIC0tIFVTUiBDb3VyaWVyIFYuMzQgLS0K KyAgICAgVi4zNCtWLjQyLCAzMTIwMGJwcyAtLSBVU1IgVi4zNCsgUmFja21vdW50IC0tIDU3NjAw YnBzLCBSVFMvQ1RTIC0tCisgICAgIENpc2NvIHRlcm1pbmFsIHNlcnZlciAtLSBTb2xhcmlzIDIu NS4xLiBQYWNrZXQgc2l6ZSA9IDgwMDAsIFdpbmRvdworICAgICBTaXplID0gMzAsIENvbnRyb2wg Q2hhcmFjdGVyIFVucHJlZml4aW5nIE1pbmltYWwgKGJ1dCBpbmNsdWRpbmcgdGhlCisgICAgIENp c2NvIGVzY2FwZSBjaGFyYWN0ZXIpLgorCisgICBTaW5jZSB0aGlzIGlzIG5vdCBhIHRydWx5IHJl bGlhYmxlIGNvbm5lY3Rpb24sIGEgZmV3IHRyaWFscyBmYWlsZWQgd2hlbgorICAgYSBiYWQgcGFj a2V0IHdhcyByZWNlaXZlZCAobW9zdCBsaWtlbHkgZHVlIHRvIFVBUlQgb3ZlcnJ1bnMpOyB0aGUK KyAgIGZhaWx1cmUgd2FzIGdyYWNlZnVsIGFuZCBpbW1lZGlhdGUsIGFuZCB0aGUgbWVzc2FnZSB3 YXMgaW5mb3JtYXRpdmUuCisgICBUaGUgcmVzdWx0cyBvZiB0ZW4gc3VjY2Vzc2Z1bCB0cmlhbHMg dXBsb2FkaW5nIGFuZCBkb3dubG9hZGluZyB0aGUgdHdvCisgICBmaWxlcyB3aXRoIGFuZCB3aXRo b3V0IHN0cmVhbWluZyBhcmU6CisKKyAgICAgICAgICAgIFN0cmVhbWluZy4uCisgICAgICAgICAg ICBPZmYgICAgT24KKyAgIFVwbG9hZCAgIDUxOTQgICA1NTY1ICAgdHh0ICg9IEMgc291cmNlIGNv ZGUsIDc4SykKKyAgICAgICAgICAgIDMxMzUgICAzNDA2ICAgZ3ogICg9IGd6aXAgZmlsZSwgY29t cHJlc3NlZCwgODVLKQorIERvd25sb2FkICAgNTE5NCAgIDU1NjUgICB0eHQKKyAgICAgICAgICAg IDMwNDEgICAzNDA2ICAgZ3oKKworICAgRWFjaCBDUFMgZmlndXJlIGlzIHRoZSBtZWFuIG9mIDEw IHJlc3VsdHMuCisKKyAgIEEgYnJpZWYgdGVzdCB3YXMgYWxzbyBwZXJmb3JtZWQgb24gYSBMQVQt YmFzZWQgZGlhbG91dCBjb25uZWN0aW9uIGZyb20KKyAgIGEgVkFYIDMxMDAgd2l0aCBWTVMgNS41 IHRvIGEgVVNSIENvdXJpZXIgVi4zNCBjb25uZWN0ZWQgdG8gYSBERUNzZXJ2ZXIKKyAgIDcwMCBh dCAxOTIwMCBicHMuIFRoZSAxLU1CIFNwYXJjIGV4ZWN1dGFibGUgZG93bmxvYWRlZCBmcm9tIGEg U3VuIHRvCisgICB0aGUgVkFYIGF0IDExMDBjcHMgd2l0aG91dCBzdHJlYW1pbmcgYW5kIDE5MDBj cHMgd2l0aCBzdHJlYW1pbmcsIHVzaW5nCisgICA4MDAwLWJ5dGUgcGFja2V0cywgMzAgd2luZG93 IHNsb3RzLCBhbmQgbWluaW1hbCBwcmVmaXhpbmcgaW4gYm90aAorICAgY2FzZXMuCisKKzQuMjAu Mi41LiBTdHJlYW1pbmcgb24gWC4yNSBDb25uZWN0aW9ucworCisgICBXZSBoYXZlIG9ubHkgbGlt aXRlZCBhY2Nlc3MgdG8gWC4yNSBuZXR3b3Jrcy4gT25lIHRyaWFsIHdhcyBwZXJmb3JtZWQKKyAg IGluIHdoaWNoIHRoZSAxTUIgU29sYXJpcyAyLjQgU3BhcmMgZXhlY3V0YWJsZSB3YXMgdHJhbnNm ZXJyZWQgb3ZlciBhCisgICBTdW5MaW5rIFguMjUgY29ubmVjdGlvbjsgbm90aGluZyBpcyBrbm93 biBhYm91dCB0aGUgYWN0dWFsIHBoeXNpY2FsCisgICBjb25uZWN0aW9uLiBXaXRoIGEgcGFja2V0 IGxlbmd0aCBvZiA4MDAwIGFuZCBhIHdpbmRvdyBzaXplIG9mIDMwLCB0aGUKKyAgIGZpbGUgdHJh bnNmZXJyZWQgYXQgNjQwMCBjcHMgKHVzaW5nIGEgbWF4aW11bSBvZiA2IHdpbmRvdyBzbG90cyku IFdpdGgKKyAgIHRoZSBzYW1lIHBhY2tldCBsZW5ndGgsIGJ1dCB3aXRoIHN0cmVhbWluZywgaXQg dHJhbnNmZXJyZWQgd2l0aG91dAorICAgbWlzaGFwIGF0IDY3MTAgY3BzLCBhYm91dCA1JSBmYXN0 ZXIuCisKKzQuMjAuMy4gU3RyZWFtaW5nIC0gUHJlbGltaW5hcnkgQ29uY2x1c2lvbnMKKworICAg VGhlIHJlc3VsdHMgdmFyeSB3aXRoIHRoZSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24sIGJ1dCBhcmUg Z29vZCBvdmVyYWxsLgorICAgQWx0aG91Z2ggbnVtZXJvdXMgbG93ZXItbGV2ZWwgdHJpY2tzIGNh biBiZSB1c2VkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UKKyAgIG9uIHNwZWNpZmljIHBsYXRmb3Jt cyBvciBjb25uZWN0aW9uIG1ldGhvZHMsIHN0cmVhbWluZyBvY2N1cnMgYXQgYQorICAgaGlnaCwg c3lzdGVtLWluZGVwZW5kZW50IGxldmVsIG9mIHRoZSBLZXJtaXQgcHJvdG9jb2wgYW5kIHRoZXJl Zm9yZSBjYW4KKyAgIGFwcGx5IHRvIGFsbCB0eXBlcyBvZiBwbGF0Zm9ybXMgYW5kIChyZWxpYWJs ZSkgY29ubmVjdGlvbnMKKyAgIHRyYW5zcGFyZW50bHkuCisKKzQuMjEuIFRoZSBUUkFOU01JVCBD b21tYW5kCisKKyAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCwgdGhlIFRSQU5TTUlUIGNvbW1hbmQg dHJhbnNtaXR0ZWQgaW4gdGV4dCBvcgorICAgYmluYXJ5IG1vZGUgYWNjb3JkaW5nIHRvIFNFVCBG SUxFIFRZUEUgeyBURVhULCBCSU5BUlkgfS4gQnV0IG5vdyB0aGF0CisgICBiaW5hcnkgbW9kZSBp cyBsaWtlbHkgdG8gYmUgdGhlIGRlZmF1bHQgZm9yIHByb3RvY29sIHRyYW5zZmVycywgaXQgaXMK KyAgIGV2aWRlbnQgdGhhdCB0aGlzIG5vdCBhbHNvIGFuIGFwcHJvcHJpYXRlIGRlZmF1bHQgZm9y IFRSQU5TTUlULCBzaW5jZQorICAgYmluYXJ5LW1vZGUgVFJBTlNNSVQgaXMgYSByYXRoZXIgc3Bl Y2lhbGl6ZWQgYW5kIHRyaWNreSBvcGVyYXRpb24uCisgICBUaGVyZWZvcmUsIFRSQU5TTUlUIGRl ZmF1bHRzIHRvIHRleHQgbW9kZSBhbHdheXMsIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICBGSUxFIFRZ UEUgc2V0dGluZy4KKworICAgQy1LZXJtaXQgNy4wIGV4cGFuZHMgdGhlIGNhcGFiaWxpdGllcyBv ZiB0aGUgVFJBTlNNSVQgY29tbWFuZCBieSBhZGRpbmcKKyAgIHRoZSBmb2xsb3dpbmcgc3dpdGNo ZXMgKHNlZSBbNTMyXVNlY3Rpb24gMS41KS4gVGhlIG5ldyBzeW50YXggaXM6CisKKyAgVFJBTlNN SVQgWyBzd2l0Y2hlcy4uLiBdIGZpbGVuYW1lCisKKyAgIFplcm8gb3IgbW9yZSBzd2l0Y2hlcyBt YXkgYmUgaW5jbHVkZWQ6CisKKyAgIC9QSVBFCisgICAgICAgICAgV2hlbiAvUElQRSBpcyBpbmNs dWRlZCwgImZpbGVuYW1lIiBpcyBpbnRlcnByZXRlZCBhcyBhIHN5c3RlbQorICAgICAgICAgIGNv bW1hbmQgb3IgcHJvZ3JhbSB3aG9zZSBvdXRwdXQgaXMgdG8gYmUgc2VudC4gU3lub255bToKKyAg ICAgICAgICAvQ09NTUFORC4gRXhhbXBsZToKKworICB0cmFuc21pdCAvcGlwZSBmaW5nZXIKKwor ICAgICAgICAgIFlvdSBtYXkgZW5jbG9zZSB0aGUgY29tbWFuZCBpbiBicmFjZXMsIGJ1dCB5b3Ug ZG9uJ3QgaGF2ZSB0bzoKKworICB4bWl0IC9waXBlIHtscyAtbCB8IHNvcnQgLXIgKzAuMjIgLTAu MzIgfCBoZWFkfQorCisgICAvQklOQVJZCisgICAgICAgICAgVHJhbnNtaXRzIHRoZSBmaWxlIChv ciBwaXBlIG91dHB1dCkgaW4gYmluYXJ5IG1vZGUuCisKKyAgIC9URVhUCisgICAgICAgICAgVHJh bnNtaXRzIHRoZSBmaWxlIChvciBwaXBlIG91dHB1dCkgaW4gbGluZS1vcmllbnRlZCB0ZXh0IG1v ZGUuCisgICAgICAgICAgQ3VycmVudCBGSUxFIENIQVJBQ1RFUi1TRVQgYW5kIFRFUk1JTkFMIENI QVJBQ1RFUi1TRVQgc2VsZWN0aW9ucworICAgICAgICAgIGdvdmVybiB0cmFuc2xhdGlvbi4gRGVm YXVsdC4KKworICAgL1RSQU5TUEFSRU5UCisgICAgICAgICAgU3BlY2lmaWVzIHRleHQgbW9kZSB3 aXRob3V0IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24sIG5vIG1hdHRlcgorICAgICAgICAgIHdo YXQgdGhlIEZJTEUgYW5kIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgc2VsZWN0aW9ucyBhcmUuCisK KyAgIC9OT1dBSVQKKyAgICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gU0VUIFRSQU5TTUlU IFBST01QVCAwLCBidXQgZm9yIHRoaXMKKyAgICAgICAgICBUUkFOU01JVCBjb21tYW5kIG9ubHku IEFwcGxpZXMgb25seSB0byB0ZXh0IG1vZGU7IGl0IG1lYW5zIHRvCisgICAgICAgICAgbm90IHdh aXQgZm9yIGFueSBraW5kIG9mIGVjaG8gb3IgdHVybmFyb3VuZCBjaGFyYWN0ZXIgYWZ0ZXIKKyAg ICAgICAgICBzZW5kaW5nIGEgbGluZSBiZWZvcmUgc2VuZGluZyB0aGUgbmV4dCBsaW5lLiAoTm9y bWFsbHkgS2VybWl0CisgICAgICAgICAgd2FpdHMgZm9yIGEgbGluZWZlZWQuKQorCisgICBXaGVu IFRSQU5TTUlUIEVDSE8gaXMgT04sIEMtS2VybWl0IHRyaWVzIHRvIHJlYWQgYmFjayB0aGUgZWNo byBvZiBlYWNoCisgICBjaGFyYWN0ZXIgdGhhdCBpcyBzZW50LiBQcmlvciB0byBDLUtlcm1pdCA3 LjAsIDEgc2Vjb25kIHdhcyBhbGxvd2VkIGZvcgorICAgZWFjaCBlY2hvIHRvIGFwcGVhcjsgaWYg aXQgZGlkbid0IHNob3cgdXAgaW4gYSBzZWNvbmQsIHRoZSBUUkFOU01JVAorICAgY29tbWFuZCB3 b3VsZCBmYWlsLiBTaW1pbGFybHkgZm9yIHRoZSBUUkFOU01JVCBQUk9NUFQgY2hhcmFjdGVyLgor ICAgSG93ZXZlciwgd2l0aCB0b2RheSdzIGNvbmdlc3RlZCBJbnRlcm5ldCBjb25uZWN0aW9ucywg ZXRjLCBtb3JlIHRpbWUgaXMKKyAgIG9mdGVuIG5lZWRlZDoKKworICAgU0VUIFRSQU5TTUlUIFRJ TUVPVVQgbnVtYmVyCisKKyAgIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gd2Fp dCBmb3IgYW4gZWNobyBvciB0aGUgcHJvbXB0CisgICBjaGFyYWN0ZXIgd2hlbiBUUkFOU01JVCBQ Uk9NUFQgaXMgbm9uemVybzsgdGhlIGRlZmF1bHQgd2FpdCBpcyAxCisgICBzZWNvbmQuIElmIHlv dSBzcGVjaWZ5IDAsIHRoZSB3YWl0IGlzIGluZGVmaW5pdGUuIFdoZW4gYSB0aW1lb3V0CisgICBp bnRlcnZhbCBvZiAwIGlzIHNwZWNpZmllZCwgYW5kIGEgZGVzaXJlZCBlY2hvIG9yIHByb21wdCBk b2VzIG5vdCBzaG93CisgICB1cCwgdGhlIFRSQU5TTUlUIGNvbW1hbmQgd2lsbCBub3QgdGVybWlu YXRlIHVudGlsIG9yIHVubGVzcyB5b3UKKyAgIGludGVycnVwdCBpdCB3aXRoIEN0cmwtQzsgdXNl IFNFVCBUUkFOU01JVCBUSU1FT1VUIDAgd2l0aCBjYXV0aW9uLgorCisgICBOb3RlOiB0byBibGFz dCBhIGZpbGUgb3V0IHRoZSBjb21tdW5pY2F0aW9ucyBjb25uZWN0aW9uIHdpdGhvdXQgYW55Cisg ICBraW5kIG9mIHN5bmNocm9uaXphdGlvbiBvciB0aW1lb3V0cyBvciBvdGhlciBtYW5uZXIgb2Yg Y2hlY2tpbmcsIHVzZToKKworICBTRVQgVFJBTlNNSVQgRUNITyBPRkYKKyAgU0VUIFRSQU5TTUlU IFBST01QVCAwIChvciBpbmNsdWRlIHRoZSAvTk9XQUlUIHN3aXRjaCkKKyAgU0VUIFRSQU5TTUlU IFBBVVNFIDAKKyAgVFJBTlNNSVQgWyBzd2l0Y2hlcyBdIGZpbGVuYW1lCisKKyAgIEluIHRoaXMg Y2FzZSwgdGV4dC1maWxlIHRyYW5zbWlzc2lvbiBpcyBub3QtbGluZSBvcmllbnRlZCBhbmQgbGFy Z2UKKyAgIGJsb2NrcyBjYW4gYmUgc2VudCwgcmVzdWx0aW5nIGluIGEgc2lnbmlmaWNhbnQgcGVy Zm9ybWFuY2UgaW1wcm92ZW1lbnQKKyAgIG92ZXIgbGluZS1hdC1hdC10aW1lIHRyYW5zbWlzc2lv bi4gU3VjY2Vzc2Z1bCBvcGVyYXRpb24gZGVwZW5kcyAoZXZlbgorICAgbW9yZSB0aGFuIHVzdWFs IGZvciB0aGUgVFJBTlNNSVQgY29tbWFuZCEpIG9uIGEgY2xlYW4gY29ubmVjdGlvbiB3aXRoCisg ICBlZmZlY3RpdmUgZmxvdyBjb250cm9sLgorCisgICBGb3IgZGV0YWlscyBvbiBUUkFOU01JVCBh bmQgY2hhcmFjdGVyIHNldHMsIHNlZSBbNTMzXVNlY3Rpb24gNi42LjUuNC4KKworICA0LjIyLiBD b3Bpbmcgd2l0aCBGYXVsdHkgS2VybWl0IEltcGxlbWVudGF0aW9ucworCisgICBLZXJtaXQgcHJv dG9jb2wgaGFzIGJlZW4gaW1wbGVtZW50ZWQgaW4gcXVpdGUgYSBmZXcgdGhpcmQtcGFydHkKKyAg IGNvbW1lcmNpYWwsIHNoYXJld2FyZSwgYW5kIGZyZWV3YXJlIHNvZnR3YXJlIHBhY2thZ2VzLCB3 aXRoIHZhcnlpbmcKKyAgIGRlZ3JlZXMgb2Ygc3VjY2Vzcy4gSW4gbW9zdCBjYXNlcyBvcGVyYXRp b24gaXMgc2F0aXNmYWN0b3J5IGJ1dCBzbG93IC0tCisgICBvbmx5IHRoZSBiYXJlIG1pbmltdW0g c3Vic2V0IG9mIHRoZSBwcm90b2NvbCBpcyBhdmFpbGFibGUgLS0gc2hvcnQKKyAgIHBhY2tldHMs IG5vIHNsaWRpbmcgd2luZG93cywgbm8gYXR0cmlidXRlcywgZXRjLiBJbiBvdGhlciBjYXNlcywg dGhlCisgICBpbXBsZW1lbnRhdGlvbiBpcyBpbmNvcnJlY3QsIHJlc3VsdGluZyBpbiBmYWlsdXJl cyBhdCB0aGUgaW5pdGlhbAorICAgbmVnb3RpYXRpb24gc3RhZ2Ugb3IgY29ycnVwdGVkIGZpbGVz LgorCisgICBDLUtlcm1pdCA3LjAgYW5kIEtlcm1pdCA5NSAxLjEuMTkgaW5jbHVkZSBzb21lIG5l dyBkZWZlbnNlIG1lY2hhbmlzbXMKKyAgIHRvIGhlbHAgY29wZSB3aXRoIHRoZSBtb3N0IGNvbW1v biBzaXR1YXRpb25zLiBIb3dldmVyLCBiZWFyIGluIG1pbmQKKyAgIHRoZXJlIGlzIG9ubHkgc28g bXVjaCB3ZSBjYW4gZG8gaW4gc3VjaCBjYXNlcyAtLSB0aGUgcmVzcG9uc2liaWxpdHkgZm9yCisg ICBmaXhpbmcgdGhlIHByb2JsZW0gbGllcyB3aXRoIHRoZSBtYWtlciBvZiB0aGUgZmF1bHR5IHNv ZnR3YXJlLgorCisgICAgNC4yMi4xLiBGYWlsdXJlIHRvIEFjY2VwdCBNb2Rlcm4gTmVnb3RpYXRp b24gU3RyaW5ncworCisgICBUaGUgcHVibGlzaGVkIEtlcm1pdCBwcm90b2NvbCBzcGVjaWZpY2F0 aW9uIHN0YXRlcyB0aGF0IG5ldyBmaWVsZHMgY2FuCisgICBiZSBhZGRlZCB0byB0aGUgcGFyYW1l dGVyIG5lZ290aWF0aW9uIHN0cmluZy4gVGhlc2UgYXJlIHRvIGJlIGlnbm9yZWQKKyAgIGJ5IGFu eSBLZXJtaXQgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZW07IHRo aXMgaXMKKyAgIHdoYXQgbWFrZXMgdGhlIEtlcm1pdCBwcm90b2NvbCBleHRlbnNpYmxlLiBVbmZv cnR1bmF0ZWx5LCBzb21lIEtlcm1pdAorICAgaW1wbGVtZW50YXRpb25zIGJlY29tZSBjb25mdXNl ZCAob3Igd29yc2UpIHdoZW4gcmVjZWl2aW5nIGEgbmVnb3RpYXRpb24KKyAgIHN0cmluZyBsb25n ZXIgdGhhbiB0aGUgb25lIHRoZXkgZXhwZWN0LiBZb3UgY2FuIHRyeSB3b3JraW5nIGFyb3VuZCBz dWNoCisgICBwcm9ibGVtcyBieSB0ZWxsaW5nIEtlcm1pdCB0byBzaG9ydGVuIGl0cyBuZWdvdGlh dGlvbiBzdHJpbmcgKGFuZCB0aHVzCisgICBkaXNhYmxlIHRoZSBjb3JyZXNwb25kaW5nIG5ldyBm ZWF0dXJlcyk6CisKKyAgU0VUIFNFTkQgTkVHT1RJQVRJT04tU1RSSU5HLU1BWC1MRU5HVEggbnVt YmVyCisKKyAgIFRyeSBhIG51bWJlciBsaWtlIDEwLiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdHJ5 IDksIDgsIDcsIDYsIGFuZCBzbyBvbi4KKworICAgIDQuMjIuMi4gRmFpbHVyZSB0byBOZWdvdGlh dGUgOHRoLWJpdCBQcmVmaXhpbmcKKworICAgVGhlIHB1Ymxpc2hlZCBLZXJtaXQgcHJvdG9jb2wg c3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCA4dGgtYml0CisgICBwcmVmaXhpbmcgKHdoaWNoIGFs bG93cyB0cmFuc2ZlciBvZiA4LWJpdCBkYXRhIG92ZXIgYSA3LWJpdCBjb25uZWN0aW9uKQorICAg b2NjdXJzIGlmIHRoZSBmaWxlIHNlbmRlciBwdXRzIGEgdmFsaWQgcHJlZml4IGNoYXJhY3RlciAo bm9ybWFsbHkgIiYiKQorICAgaW4gdGhlIDh0aC1iaXQtcHJlZml4IGZpZWxkIG9mIHRoZSBuZWdv dGlhdGlvbiBzdHJpbmcsIGFuZCB0aGUgcmVjZWl2ZXIKKyAgIHB1dHMgZWl0aGVyIGEgbGV0dGVy ICJZIiBvciB0aGUgc2FtZSBwcmVmaXggY2hhcmFjdGVyLiBBdCBsZWFzdCBvbmUKKyAgIGZhdWx0 eSBLZXJtaXQgaW1wbGVtZW50YXRpb24gZXhpc3RzIHRoYXQgZG9lcyBub3QgYWNjZXB0IHRoZSBs ZXR0ZXIKKyAgICJZIi4gVG8gZm9yY2UgQy1LZXJtaXQgLyBLLTk1IHRvIHJlcGx5IHdpdGggdGhl IG90aGVyIEtlcm1pdCdzIHByZWZpeAorICAgY2hhcmFjdGVyIHJhdGhlciB0aGFuIGEgIlkiLCBn aXZlIHRoZSBmb2xsb3dpbmcgKGludmlzaWJsZSkgY29tbWFuZDoKKworICBTRVQgUThGTEFHIE9O CisKKyAgIFVzZSBTRVQgUThGTEFHIE9GRiB0byByZXN0b3JlIHRoZSBub3JtYWwgYmVoYXZpb3Iu CisKKyAgICA0LjIyLjMuIENvcnJ1cHQgRmlsZXMKKworICAgUmVmZXIgdG8gWzUzNF1TZWN0aW9u IDQuMjIuMi4gU29tZSBLZXJtaXQgaW1wbGVtZW50YXRpb25zIG1pc3Rha2VubHkKKyAgIGludGVy cHJldCB0aGUgIlkiIGFzIGEgcHJlZml4IGNoYXJhY3Rlci4gVGhlbiwgd2hlbmV2ZXIgYSBsZXR0 ZXIgWQorICAgYXBwZWFycyBpbiB0aGUgZGF0YSwgdGhlIFkgYW5kIHRoZSBjaGFyYWN0ZXIgdGhh dCBmb2xsb3dzIGl0IGFyZQorICAgcmVwbGFjZWQgYnkgYSBnYXJiYWdlIGNoYXJhY3Rlci4gQXQg dGhpcyB3cml0aW5nLCB3ZSBhcmUgbm90IHN1cmUgaWYKKyAgIHRoZXJlIGlzIGFueSBzb2x1dGlv biwgYnV0IHRyeSAic2V0IHNlbmQgbmVnb3RpYXRpb24tc3RyaW5nLW1heC1sZW5ndGgKKyAgIDYi IGFuZC9vciAic2V0IHE4ZmxhZyBvbiIuCisKKyAgIEZpbGUgY29ycnVwdGlvbiBjYW4gYWxzbyBv Y2N1ciB3aGVuIGNvbnRyb2wgY2hhcmFjdGVycyB3aXRoaW4gdGhlIGZpbGUKKyAgIGRhdGEgYXJl IHNlbnQgd2l0aG91dCBwcmVmaXhpbmcsIGFzIGF0IGxlYXN0IHNvbWUgYXJlIGJ5IGRlZmF1bHQg aW4KKyAgIEMtS2VybWl0IDcuMCBhbmQgSy05NS4gU29tZSBLZXJtaXQgaW1wbGVtZW50YXRpb25z IGRvIG5vdCBoYW5kbGUKKyAgIGluY29taW5nICJiYXJlIiBjb250cm9sIGNoYXJhY3RlcnMuIFRv IHdvcmsgYXJvdW5kLCAic2V0IHByZWZpeGluZworICAgYWxsIi4KKworICAgIDQuMjIuNC4gU3B1 cmlvdXMgQ2FuY2VsbGF0aW9ucworCisgICBUaGUgS2VybWl0IHByb3RvY29sIHNwZWNpZmljYXRp b24gc3RhdGVzIHRoYXQgaWYgYW4gQUNLIHRvIGEgRGF0YQorICAgcGFja2V0IGNvbnRhaW5zIFgg aW4gaXRzIGRhdGEgZmllbGQsIHRoZSB0cmFuc2ZlciBvZiB0aGUgY3VycmVudCBmaWxlCisgICBp cyBjYW5jZWxlZCwgYW5kIGlmIGl0IGNvbnRhaW5zIGEgWiwgdGhlIGVudGlyZSB0cmFuc2ZlciBp cyBjYW5jZWxlZC4KKyAgIEF0IGxlYXN0IG9uZSBvdmVyemVhbG91cyBLZXJtaXQgaW1wbGVtZW50 YXRpb24gYXBwbGllcyB0aGlzIHJ1bGUgdG8KKyAgIG5vbi1EYXRhIHBhY2tldHMgYXMgd2VsbCwg dGhlIHR5cGljYWwgc3ltcHRvbSBiZWluZyB0aGF0IGFueSBhdHRlbXB0IHRvCisgICB0cmFuc2Zl ciBhIGZpbGUgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBYIG9yIFogcmVzdWx0cyBpbiBjYW5jZWxs YXRpb24uCisgICBUaGlzIGlzIGJlY2F1c2UgdGhlIGZpbGUgcmVjZWl2ZXIgdHlwaWNhbGx5IHNl bmRzIGJhY2sgdGhlIG5hbWUgdW5kZXIKKyAgIHdoaWNoIGl0IHN0b3JlZCB0aGUgZmlsZSAod2hp Y2ggbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBuYW1lIGl0CisgICB3YXMgc2VudCB3aXRo KSBpbiB0aGUgQUNLIHRvIHRoZSBGaWxlIEhlYWRlciBwYWNrZXQuIFRoaXMgaXMKKyAgIGluZm9y bWF0aW9uIG9ubHkgYW5kIHNob3VsZCBub3QgY2F1c2UgY2FuY2VsbGF0aW9uLiBUbyB3b3JrIGFy b3VuZCB0aGUKKyAgIHByb2JsZW0sIHVzZToKKworICBTRVQgRi1BQ0stQlVHIHsgT04sIE9GRiB9 CisKKyAgIE9OIHRlbGxzIEtlcm1pdCBub3QgdG8gc2VuZCBiYWNrIHRoZSBmaWxlbmFtZSBpbiB0 aGUgQUNLIHRvIHRoZSBmaWxlCisgICBoZWFkZXIgcGFja2V0IGFzIGl0IG5vcm1hbGx5IHdvdWxk IGRvIChPRkYgcHV0cyBLZXJtaXQgYmFjayB0byBub3JtYWwKKyAgIGFmdGVyIHVzaW5nIE9OKS4K KworICAgQSB2YXJpYXRpb24gb24gdGhlIHRoaXMgYnVnIG9jY3VycyBpbiBhbiBvYnNjdXJlIEtl cm1pdCBwcm9ncmFtIGZvcgorICAgTVVNUFM6IFdoZW4gdGhpcyBLZXJtaXQgcHJvZ3JhbSBzZW5k cyBhIGZpbGUgY2FsbGVkIChzYXkpIEZPTy5CQVIsIGl0CisgICByZXF1aXJlcyB0aGF0IHRoZSBB Q0sgdG8gaXRzIEYgcGFja2V0IGNvbnRhaW4gZXhhY3RseSB0aGUgc2FtZSBuYW1lLAorICAgRk9P LkJBUi4gSG93ZXZlciwgQy1LZXJtaXQgbGlrZXMgdG8gc2VuZCBiYWNrIHRoZSBmdWxsIHBhdGhu YW1lLAorICAgY2F1c2luZyB0aGUgTVVNUFMgS2VybWl0IHRvIGZhaWwuIFNFVCBGLUFDSy1CVUcg T04gZG9lc24ndCBoZWxwIGhlcmUuCisgICBTbyBhIHNlcGFyYXRlIGNvbW1hbmQgaGFzIGJlZW4g YWRkZWQgdG8gaGFuZGxlIHRoaXMgc2l0dWF0aW9uOgorCisgIFNFVCBGLUFDSy1QQVRIIHsgT04s IE9GRiB9CisKKyAgIE5vcm1hbGx5IGl0IGlzIE9OIChyZWdhcmRsZXNzIG9mIHRoZSBTRVQgU0VO RCBQQVRITkFNRVMgc2V0dGluZykuIFVzZQorICAgU0VUIEYtQUNLLVBBVEggT0ZGIHRvIGluc3Ry dWN0IEtlcm1pdCB0byBzZW5kIGJhY2sgb25seSB0aGUgZmlsZW5hbWUKKyAgIHdpdGhvdXQgdGhl IHBhdGggaW4gdGhlIEFDSyB0byB0aGUgRiBwYWNrZXQuCisKKyAgICA0LjIyLjUuIFNwdXJpb3Vz IFJlZnVzYWxzCisKKyAgIFNvbWUgS2VybWl0IGltcGxlbWVudGF0aW9ucywgbm90YWJseSBQRFAt MTEgS2VybWl0IDMuNjAgYW5kIGVhcmxpZXIsCisgICBoYXZlIGJ1Z3MgaW4gdGhlaXIgaGFuZGxp bmcgb2YgQXR0cmlidXRlIHBhY2tldHMgdGhhdCBjYW4gY2F1c2UKKyAgIHVud2FycmFudGVkIHJl ZnVzYWwgb2YgaW5jb21pbmcgZmlsZXMsIGUuZy4gYmFzZWQgb24gZGF0ZSBvciBzaXplLiBUaGlz CisgICBjYW4gYmUgd29ya2VkIGFyb3VuZCBieSB0ZWxsaW5nIG9uZSBvciBib3RoIG9mIHRoZSBL ZXJtaXQgcGFydG5lcnMgdG86CisKKyAgU0VUIEFUVFJJQlVURVMgT0ZGCisKKyAgICA0LjIyLjYu IEZhaWx1cmVzIGR1cmluZyB0aGUgRGF0YSBUcmFuc2ZlciBQaGFzZQorCisgICBUaGlzIGNhbiBi ZSBjYXVzZWQgYnkgY29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcgKFs1MzVdU2VjdGlvbgor ICAgNC4yMi4zICksIGFuZCBmaXhlZCBieToKKworICBTRVQgUFJFRklYSU5HIEFMTAorCisgICBJ dCBjYW4gYWxzbyBoYXZlIG51bWVyb3VzIG90aGVyIGNhdXNlcywgZXhwbGFpbmVkIGluIENoYXB0 ZXIgMTAgb2YKKyAgIFs1MzZdVXNpbmcgQy1LZXJtaXQ6IHRoZSBjb25uZWN0aW9uIGlzIG5vdCA4 LWJpdCB0cmFuc3BhcmVudCAoc28gdXNlCisgICAic2V0IHBhcml0eSBzcGFjZSIgb3Igc29tZXN1 Y2gpLCBpbmFkZXF1YXRlIGZsb3cgY29udHJvbCwgZXRjLiBDb25zdWx0CisgICB0aGUgbWFudWFs LgorCisgICAgNC4yMi43LiBGcmFjdHVyZWQgRmlsZW5hbWVzCisKKyAgIEF0IGxlYXN0IG9uZSB3 ZWxsLWtub3duIFBDLWJhc2VkIGNvbW11bmljYXRpb25zIHBhY2thZ2UgbmVnb3RpYXRlcyBkYXRh CisgICBjb21wcmVzc2lvbiwgd2hpY2ggKGFjY29yZGluZyB0byB0aGUgcHJvdG9jb2wgc3BlY2lm aWNhdGlvbikgYXBwbGllcyB0bworICAgYm90aCB0aGUgZmlsZW5hbWUgYW5kIHRoZSBmaWxlIGRh dGEsIGJ1dCB0aGVuIGZhaWxzIHRvIGRlY29tcHJlc3MgdGhlCisgICBmaWxlbmFtZS4gRXhhbXBs ZTogQy1LZXJtaXQgc2VuZHMgYSBmaWxlIGNhbGxlZCBSMDAwMTAxLkRBVCAod2hlcmUKKyAgIDAw MDEwMSBtaWdodCBiZSBub24tWTJLLXdpc2UgWVlNTUREIG5vdGF0aW9uKSwgYW5kIHRoZSBwYWNr YWdlIGluCisgICBxdWVzdGlvbiBzdG9yZXMgdGhlIGZpbGVzIGFzIFJ+IzAxMDEuREFULiBXb3Jr YXJvdW5kOiBUZWxsIEMtS2VybWl0IHRvCisgICBTRVQgUkVQRUFUIENPVU5UUyBPRkYuCisKKyAg ICA0LjIyLjguIEJhZCBGaWxlIERhdGVzCisKKyAgIEF0IGxlYXN0IG9uZSB3ZWxsLWtub3duIFBD LWJhc2VkIGNvbW11bmljYXRpb25zIHBhY2thZ2UgbmVnb3RpYXRlcyB0aGUKKyAgIHBhc3Npbmcg b2YgZmlsZSB0aW1lc3RhbXBzIGZyb20gc2VuZGVyIHRvIHJlY2VpdmVyLCBidXQgd2hlbiBpdCBp cworICAgc2VuZGluZyBmaWxlcywgaXQgYWx3YXlzIGdpdmVzIHRoZW0gYSB0aW1lc3RhbXAgb2Yg MSBGZWJydWFyeSAxOTcwLgorICAgV29ya2Fyb3VuZDogdGVsbCBDLUtlcm1pdCB0byBTRVQgQVRU UklCVVRFIERBVEUgT0ZGLiBZb3UgZG9uJ3QgZ2V0IHRoZQorICAgZmlsZSdzIHJlYWwgZGF0ZSwg YnV0IHlvdSBhbHNvIGRvbid0IGdldCAxIEZlYiAxOTcwOyBpbnN0ZWFkIHRoZSBmaWxlCisgICBn ZXRzIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCisKKyAgNC4yMy4gRmlsZSBUcmFuc2ZlciBS ZWNvdmVyeQorCisgICBQcmlvciB0byBDLUtlcm1pdCA3LjAsIFJFU0VORCAoU0VORCAvUkVDT1ZF UikgYW5kIFJFR0VUIChHRVQgL1JFQ09WRVIpCisgICByZWZ1c2VkIHRvIHdvcmsgaWYgRklMRSBU WVBFIHdhcyBub3QgQklOQVJZIG9yIHRoZSAvQklOQVJZIHN3aXRjaCB3YXMKKyAgIG5vdCBpbmNs dWRlZC4gTm93IHRoZXNlIGNvbW1hbmRzIGluY2x1ZGUgYW4gaW1wbGllZCAvQklOQVJZIHN3aXRj aCwKKyAgIG1lYW5pbmcgdGhleSBzZXQgdGhlIGZpbGUgdHlwZSB0byBiaW5hcnkgZm9yIHRoZSBk dXJhdGlvbiBvZiB0aGUKKyAgIGNvbW1hbmQgYXV0b21hdGljYWxseS4KKworICAgSW4gdGhlIGNs aWVudC9zZXJ2ZXIgYXJyYW5nZW1lbnQsIHRoaXMgYWxzbyBmb3JjZXMgdGhlIHNlcnZlciBpbnRv CisgICBiaW5hcnkgbW9kZSAoaWYgaXQgaXMgQy1LZXJtaXQgNy4wIG9yIGdyZWF0ZXIsIG9yIEs5 NSAxLjEuMTkgb3IKKyAgIGdyZWF0ZXIpIHNvIHRoZSByZWNvdmVyeSBvcGVyYXRpb24gcHJvY2Vl ZHMsIGp1c3QgYXMgeW91IGFza2VkIGFuZAorICAgZXhwZWN0ZWQuCisKKyAgIEJVVC4uLiBKdXN0 IGFzIGJlZm9yZSwgdGhlIHJlc3VsdHMgYXJlIGNvcnJlY3Qgb25seSB1bmRlciB0aGUgZm9sbG93 aW5nCisgICBjb25kaXRpb25zOgorCisgICAgICogSWYgdGhlIHByaW9yIGludGVycnVwdGVkIHRy YW5zZmVyIHdhcyBhbHNvIGluIGJpbmFyeSBtb2RlOyBvcjoKKyAgICAgKiBJZiB0aGUgcHJpb3Ig dHJhbnNmZXIgd2FzIGluIHRleHQgbW9kZSBhbmQgdGhlIG90aGVyIGNvbXB1dGVyIHdhcyBhCisg ICAgICAgImxpa2UgcGxhdGZvcm0iIChlLmcuIFVOSVgtdG8tVU5JWCwgV2luZG93cy10by1XaW5k b3dzLAorICAgICAgIERPUy10by1XaW5kb3dzKSBBTkQgdGhlcmUgd2FzIG5vIGNoYXJhY3Rlci1z ZXQgdHJhbnNsYXRpb24gKGkuZS4KKyAgICAgICBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIHdhcyBU UkFOU1BBUkVOVCkuCisKKyAgIE5vdGUgdGhhdCB0aGVzZSBjaXJjdW1zdGFuY2VzIGFyZSBtb3Jl IGxpa2VseSB0byBvYnRhaW4gaW4gQy1LZXJtaXQKKyAgIDcuMCwgaW4gd2hpY2g6CisKKyAgICAg KiBUaGUgZGVmYXVsdCBGSUxFIFRZUEUgaW4gQy1LZXJtaXQgNy4wIGlzIEJJTkFSWS4KKyAgICAg KiBUaGUgZGVmYXVsdCBGSUxFIElOQ09NUExFVEUgc2V0dGluZyBpcyBBVVRPLCB3aGljaCBtZWFu cyBLRUVQIGlmCisgICAgICAgdGhlIHRyYW5zZmVyIGlzIGluIGJpbmFyeSBtb2RlLCBESVNDQVJE IG90aGVyd2lzZS4KKyAgICAgKiBDLUtlcm1pdCA3LjAsIEtlcm1pdCA5NSAxLjEuMTcsIGFuZCBN Uy1ET1MgS2VybWl0IDMuMTUgYW5kIGxhdGVyCisgICAgICAgY2FuIHJlY29nbml6ZSAibGlrZSBw bGF0Zm9ybXMiIGFuZCBzd2l0Y2ggaW50byBiaW5hcnkgbW9kZQorICAgICAgIGF1dG9tYXRpY2Fs bHkuIFRyYW5zZmVycyBiZXR3ZWVuIGxpa2UgcGxhdGZvcm1zIGFyZSBhbHdheXMgYmluYXJ5Cisg ICAgICAgdW5sZXNzIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVk LCBhbmQgdGhlbiBpcworICAgICAgIHN0aWxsIGJpbmFyeSBmb3IgYWxsIGZpbGVzIHdob3NlIG5h bWVzIG1hdGNoIGEgYmluYXJ5IHBhdHRlcm4sCisgICAgICAgdW5sZXNzIHRoZSBhdXRvbWF0aWMg bWVjaGFuaXNtcyBoYXZlIGJlZW4gZGlzYWJsZWQgKHdpdGggYSAvVEVYVAorICAgICAgIHN3aXRj aCwgb3Igd2l0aCBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwpLgorICAgICAqIFNFTkQgL0JJTkFS WSBhbmQgR0VUIC9CSU5BUlkgYWx3YXlzIGZvcmNlIGJpbmFyeS1tb2RlIHRyYW5zZmVycywKKyAg ICAgICBldmVuIHdoZW4gRklMRSBUWVBFIGlzIFRFWFQsIGV2ZW4gd2hlbiBUUkFOU0ZFUiBNT0RF IGlzIEFVVE9NQVRJQywKKyAgICAgICBldmVuIHdoZW4gUEFUVEVSTlMgYXJlIE9OIGFuZCB0aGUg ZmlsZSdzIG5hbWUgbWF0Y2hlcyBhIHRleHQKKyAgICAgICBwYXR0ZXJuLgorCisgICBCdXQgYWxz byBub3RlIHRoYXQgdGhlIGF1dG9tYXRpYyBjbGllbnQvc2VydmVyIHRyYW5zZmVyLW1vZGUKKyAg IGFkanVzdG1lbnRzIGRvIG5vdCB3b3JrIHdpdGggdmVyc2lvbnMgb2YgQy1LZXJtaXQgcHJpb3Ig dG8gNy4wIG9yIEs5NQorICAgcHJpb3IgdG8gMS4xLjE2LgorCisgICBJZiB0aGUgcHJpb3IgdHJh bnNmZXIgd2FzIGluIHRleHQgbW9kZToKKworICAgICAqIElmIHRleHQtbW9kZSB0cmFuc2ZlcnMg YmV0d2VlbiB0aGUgdHdvIHBsYXRmb3JtcyBhcmUKKyAgICAgICAibGVuZ3RoLWNoYW5naW5nIiAo YXMgdGhleSBhcmUgYmV0d2VlbiBVTklYIC0tIHdoaWNoIHRlcm1pbmF0ZXMKKyAgICAgICB0ZXh0 IGxpbmVzIHdpdGggTEYgLS0gYW5kIERPUyBvciBXaW5kb3dzIC0tIHdoaWNoIHRlcm1pbmF0ZXMg dGV4dAorICAgICAgIGxpbmVzIHdpdGggQ1JMRiksIHRoZSByZWNvdmVyZWQgZmlsZSB3aWxsIGJl IGNvcnJ1cHQuCisgICAgICogSWYgdGV4dC1tb2RlIHRyYW5zZmVycyBiZXR3ZWVuIHRoZSB0d28g cGxhdGZvcm1zIGFyZSBub3QKKyAgICAgICBsZW5ndGgtY2hhbmdpbmcsIGJ1dCBjaGFyYWN0ZXIt c2V0IHRyYW5zbGF0aW9uIHdhcyBhY3RpdmUgaW4gdGhlCisgICAgICAgcHJpb3IgdHJhbnNmZXIs IHRoZSByZXN1bHQgd2lsbCBiZSBhIGZpbGUgaW4gd2hpY2ggdGhlIGZpcnN0IHBhcnQKKyAgICAg ICBoYXMgdHJhbnNsYXRlZCBjaGFyYWN0ZXJzIGFuZCB0aGUgc2Vjb25kIHBhcnQgZG9lcyBub3Qu CisKKyAgIEJ1dCBpbiBDLUtlcm1pdCA3LjAgYW5kIEs5NSAxLjEuMTkgYW5kIGxhdGVyLCBpbmNv bXBsZXRlbHkgdHJhbnNmZXJyZWQKKyAgIHRleHQgZmlsZXMgYXJlIG5vdCBrZXB0IHVubGVzcyB5 b3UgY2hhbmdlIHRoZSBkZWZhdWx0LiBCdXQgaWYgeW91IGhhdmUKKyAgIGRvbmUgdGhpcywgYW5k IHlvdSBoYXZlIGFuIGluY29tcGxldGVseSB0cmFuc2ZlcnJlZCB0ZXh0IGZpbGUsIHlvdSdsbAor ICAgbmVlZCB0bzoKKworICAgICAqIFRyYW5zZmVyIHRoZSB3aG9sZSBmaWxlIGFnYWluIGluIHRl eHQgbW9kZSwgb3I6CisgICAgICogVXNlIFNFTkQgL1NUQVJUSU5HLUFUOiB0byByZWNvdmVyIHRo ZSB0cmFuc2ZlciBhdCB0aGUgY29ycmVjdAorICAgICAgIHBvaW50OyBidXQgeW91IGhhdmUgdG8g ZmluZCBvdXQgd2hhdCB0aGF0IHBvaW50IGlzLCBhcyBkZXNjcmliZWQgaW4KKyAgICAgICB0aGUg bWFudWFsLgorCisgICBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93aW5nIHdoZXRoZXIgdGhlIHBy ZXZpb3VzIHRyYW5zZmVyIHdhcyBpbiB0ZXh0CisgICBvciBiaW5hcnkgbW9kZSBzbyBpdCBpcyB5 b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGNob29zZSB0aGUgYXBwcm9wcmlhdGUKKyAgIHJlY292ZXJ5 IG1ldGhvZC4KKworICAgSWYgeW91IHVzZSBDLUtlcm1pdCB0byBtYWludGFpbiBwYXJhbGxlbCBk aXJlY3RvcmllcyBvbiBkaWZmZXJlbnQKKyAgIGNvbXB1dGVycywgdXNpbmcgU0VUIEZJTEUgQ09M TElTSU9OIHRvIHRyYW5zZmVyIG9ubHkgdGhvc2UgZmlsZXMgdGhhdAorICAgY2hhbmdlZCBzaW5j ZSBsYXN0IHRpbWUsIGFuZCB0aGUgZmlsZXMgYXJlIGJpZyBlbm91Z2ggKG9yIHRoZQorICAgY29u bmVjdGlvbiBzbG93IGVub3VnaCkgdG8gcmVxdWlyZSBTRU5EIC9SRUNPVkVSIHRvIHJlc3VtZSBp bnRlcnJ1cHRlZAorICAgdHJhbnNmZXJzLCB5b3Ugc2hvdWxkIHJlbWVtYmVyIHRoYXQgU0VORCAv UkVDT1ZFUiAoUkVTRU5EKSBvdmVycmlkZXMKKyAgIGFsbCBGSUxFIENPTExJU0lPTiBzZXR0aW5n cy4gVGhlcmVmb3JlIHlvdSBzaG91bGQgdXNlIFNFTkQgL1JFQ09WRVIKKyAgIChSRVNFTkQpIG9u bHkgb24gdGhlIGZpbGUgdGhhdCB3YXMgaW50ZXJydXB0ZWQsIG5vdCB0aGUgZmlsZSBncm91cC4g Rm9yCisgICBleGFtcGxlLCBpZiB0aGUgb3JpZ2luYWwgdHJhbnNmZXIgd2FzIGluaXRpYXRlZCB3 aXRoOgorCisgIFNFTkQgKgorCisgICBhbmQgd2FzIGludGVycnVwdGVkLCB0aGVuIGFmdGVyIHJl ZXN0YWJsaXNoaW5nIHlvdXIgY29ubmVjdGlvbiBhbmQKKyAgIHN0YXJ0aW5nIHRoZSBLZXJtaXQg cmVjZWl2ZXIgd2l0aCBTRVQgRklMRSBDT0xMSVNJT04gVVBEQVRFIG9uIHRoZQorICAgcmVtb3Rl IGVuZCwgdXNlIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgYXQgdGhlIHNlbmRlciB0byByZXN1bWUg dGhlCisgICB0cmFuc2ZlcjoKKworICBTRU5EIC9SRUNPVkVSIG5hbWUtb2YtaW50ZXJydXB0ZWQt ZmlsZQorCisgICBhbmQgdGhlbjoKKworICBTRU5EICoKKworICAgKEluIEMtS2VybWl0IDcuMCBh bmQgbGF0ZXIsIFx2KGZpbGVuYW1lKSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZQorICAg bW9zdCByZWNlbnRseSB0cmFuc2ZlcnJlZCwgYXMgbG9uZyB5b3UgaGF2ZSBub3QgRVhJVGVkIGZy b20gS2VybWl0IG9yCisgICBjaGFuZ2VkIGRpcmVjdG9yeSwgZXRjLgorCisgIDQuMjQuIEZJTEUg Q09MTElTSU9OIFVQREFURSBDbGFyaWZpY2F0aW9uCisKKyAgIEluIFVOSVgsIGZpbGUgbW9kaWZp Y2F0aW9uIGRhdGVzIGFyZSB1c2VkIHdoZW4gY29tcGFyaW5nIHRoZSBmaWxlIGRhdGUKKyAgIHdp dGggdGhlIGRhdGUgaW4gdGhlIGF0dHJpYnV0ZSBwYWNrZXQuIEluIFZNUywgaG93ZXZlciwgdGhl IGZpbGUKKyAgIGNyZWF0aW9uIGRhdGUgaXMgdXNlZC4gVGhlc2UgdHdvIHBvbGljaWVzIHJlZmxl Y3QgdGhlIHByZWZlcmVuY2VzIG9mCisgICB0aGUgdHdvIHVzZXIgY29tbXVuaXRpZXMuCisKKyAg IEFsc28sIHJlbWVtYmVyIHRoYXQgdGhlIGZpbGUgZGF0ZS90aW1lIGdpdmVuIGluIHRoZSBhdHRy aWJ1dGUgcGFja2V0IGlzCisgICB0aGUgbG9jYWwgdGltZSBhdCB0aGUgZmlsZSBzZW5kZXIuIEF0 IHByZXNlbnQsIG5vIHRpbWV6b25lIGNvbnZlcnNpb25zCisgICBhcmUgZGVmaW5lZCBpbiBvciBw ZXJmb3JtZWQgYnkgdGhlIEtlcm1pdCBwcm90b2NvbC4gVGhpcyBpcyBwcmltYXJpbHkKKyAgIGJl Y2F1c2UgdGhpcyBmZWF0dXJlIHdhcyBkZXNpZ25lZCBhdCBhIHRpbWUgd2hlbiBtYW55IG9mIHRo ZSBzeXN0ZW1zCisgICB3aGVyZSBLZXJtaXQgcnVucyBoYWQgbm8gY29uY2VwdCBvZiB0aW1lem9u ZSwgYW5kIHRoZXJlZm9yZSB3b3VsZCBiZQorICAgdW5hYmxlIHRvIGNvbnZlcnQgKHNheSwgdG8v ZnJvbSBHTVQgb3IgVVRDIG9yIFp1bHUgdGltZSkuCisKKyAgIEFzIGEgY29uc2VxdWVuY2UsIHNv bWUgdW5leHBlY3RlZCByZXN1bHRzIG1pZ2h0IG9jY3VyIHdoZW4gdHJhbnNmZXJyaW5nCisgICBm aWxlcyBhY3Jvc3MgdGltZXpvbmVzOyBlLmcuIGNvbW1hbmRzIG9uIHRoZSB0YXJnZXQgc3lzdGVt IHRoYXQgYXJlCisgICBzZW5zaXRpdmUgdG8gZmlsZSBkYXRlcyBtaWdodCBub3Qgd29yayAoVU5J WCAibWFrZSIsIGJhY2t1cHMsIGV0YykuCisKKyAgIFRpbWV6b25lIGhhbmRsaW5nIGlzIGRlZmVy cmVkIGZvciBhIGZ1dHVyZSByZWxlYXNlLgorCisgIDQuMjUuIEF1dG9kb3dubG9hZCBJbXByb3Zl bWVudHMKKworICAgUmVmZXIgdG8gcGFnZXMgMTY0LTE2NSBvZiBbNTM3XVVzaW5nIEMtS2VybWl0 IGFib3V0IHRoZSBoYXphcmRzIG9mCisgICBhdXRvZG93bmxvYWQgd2hlbiBDLUtlcm1pdCBpcyAi aW4gdGhlIG1pZGRsZSIuIEFzIG9mIEMtS2VybWl0IDcuMCwgbm8KKyAgIG1vcmUgaGF6YXJkcy4g SWYgQy1LZXJtaXQgaGFzIFRFUk1JTkFMIEFVVE9ET1dOTE9BRCBPTiBhbmQgaXQgZGV0ZWN0cyBh CisgICBwYWNrZXQgb2YgdGhlIGN1cnJlbnQgcHJvdG9jb2wgdHlwZSAoS2VybWl0IG9yIFptb2Rl bSksIGl0ICJlcmFzZXMiIHRoZQorICAgdmlzdWFsIGFzcGVjdCBvZiB0aGUgcGFja2V0IHRoYXQg d291bGQgYmUgc2VlbiBieSB0aGUgdGVybWluYWwgKG9yLAorICAgbW9yZSB0byB0aGUgcG9pbnQs IHRoZSBlbXVsYXRvciwgc3VjaCBhcyBLOTUpLiBUaGlzIHdheSwgb25seSBDLUtlcm1pdAorICAg Z29lcyBpbnRvIFJFQ0VJVkUgbW9kZSwgYW5kIG5vdCBhbHNvIHRoZSB0ZXJtaW5hbCBlbXVsYXRv ciB0aHJvdWdoCisgICB3aGljaCBDLUtlcm1pdCBpcyBhY2Nlc3NlZC4gQW5kIHRoZXJlZm9yZSwg aXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0bworICAgU0VUIFRFUk1JTkFMIEFVVE9ET1dOTE9B RCBPRkYgdG8gcHJldmVudCBtdWx0aXBsZSBLZXJtaXRzIGZyb20gZ29pbmcKKyAgIGludG8gcmVj ZWl2ZSBtb2RlIGF0IG9uY2UsIGJ1dCBvZiBjb3Vyc2UgaXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRv CisgICBlbnN1cmUgdGhhdCwgd2hlbiB5b3UgaGF2ZSBtdWx0aXBsZSBLZXJtaXRzIGluIGEgY2hh aW4sIHRoYXQgdGhlCisgICBkZXNpcmVkIG9uZSByZWNlaXZlcyB0aGUgYXV0b2Rvd25sb2FkLgor CisgICBUaGUgZGVmYXVsdHMgaGF2ZSBub3QgYmVlbiBjaGFuZ2VkOyBLZXJtaXQgOTUgc3RpbGwg aGFzIGF1dG9kb3dubG9hZCBPTgorICAgYnkgZGVmYXVsdCwgYW5kIEMtS2VybWl0IGhhcyBpdCBP RkYgYnkgZGVmYXVsdC4KKworICA1LiBDTElFTlQvU0VSVkVSCisKKyAgNS4wLiBIaW50cworCisg ICBJZiB5b3UgdXNlIFNFVCBTRVJWRVIgR0VULVBBVEggdG8gc2V0IHVwIHlvdXIgc2VydmVyLCBh bmQgdGhlIEdFVC1QQVRICisgICBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzZXJ2ZXIncyBjdXJyZW50 IGRpcmVjdG9yeSwgY2xpZW50cyBjYW4gYmVjb21lCisgICBxdWl0ZSBjb25mdXNlZC4gRm9yIGV4 YW1wbGUsICJyZW1vdGUgZGlyIG9vZmEudHh0IiBzaG93cyBhIGZpbGUgbmFtZWQKKyAgIG9vZmEu dHh0LCBidXQgImdldCBvb2ZhLnR4dCIgZmFpbHMuIEluIHRoaXMgc2l0dWF0aW9uLCB5b3Ugc2hv dWxkCisgICBlaXRoZXIgRElTQUJMRSBESVIgb3IgbWFrZSB5b3VyIEdFVC1QQVRIIGluY2x1ZGUg dGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgIDUuMS4gTmV3IENvbW1hbmQtTGluZSBPcHRpb25z CisKKyAgIFRoZSAtRyBjb21tYW5kLWxpbmUgb3B0aW9uIGlzIGxpa2UgLWcgKEdFVCksIGV4Y2Vw dCB0aGUgaW5jb21pbmcgZmlsZQorICAgaXMgc2VudCB0byBzdGFuZGFyZCBvdXRwdXQgcmF0aGVy IHRoYW4gd3JpdHRlbiB0byBkaXNrLgorCisgICBUaGUgLUkgb3B0aW9uICgiSW50ZXJuZXQiKSBp cyB1c2VkIHRvIHRlbGwgYSByZW1vdGUgQy1LZXJtaXQgcHJvZ3JhbQorICAgdGhhdCB5b3UgYXJl IGNvbWluZyBpbiB2aWEgSW50ZXJuZXQgVGVsbmV0IG9yIFJsb2dpbiBhbmQgdGhlcmVmb3JlIGhh dmUKKyAgIGEgcmVsaWFibGUgY29ubmVjdGlvbi4gVGhlIC1JIG9wdGlvbiBpcyBlcXVpdmFsZW50 IHRvIFNFVCBSRUxJQUJMRSBPTgorICAgYW5kIFNFVCBGTE9XIE5PTkUuCisKKyAgIFRoZSAtTyBv cHRpb24gKCJPbmx5IE9uZSIpIHRlbGxzIEMtS2VybWl0IHRvIGVudGVyIHNlcnZlciBtb2RlIGJ1 dCB0aGVuCisgICBleGl0IGFmdGVyIHRoZSBmaXJzdCBjbGllbnQgb3BlcmF0aW9uLgorCisgICBT ZWUgWzUzOF1TZWN0aW9uIDkuMyBmb3IgZGV0YWlscy4KKworICA1LjIuIE5ldyBDbGllbnQgQ29t bWFuZHMKKworICAgQllFIGFuZCBGSU5JU0ggbm8gbG9uZ2VyIHRyeSB0byBkbyBhbnl0aGluZyBp ZiBhIGNvbm5lY3Rpb24gaXMgbm90CisgICBhY3RpdmUuIFRodXMgYSBzZXF1ZW5jZSBsaWtlICJo YW5ndXAiIGZvbGxvd2VkIGJ5ICJieWUiIG9yICJmaW5pc2giCisgICB3aWxsIG5vIGxvbmdlciBn ZXQgc3R1Y2sgaW4gYSBsb25nIHRpbWVvdXQtYW5kLXJldHJhbnNtaXNzaW9uIGN5Y2xlLAorICAg bm9yIHdpbGwgaXQgdHJ5IHRvIG9wZW4gYSBuZXcgY29ubmVjdGlvbi4KKworICAgUkVNT1RFIEVY SVQKKyAgICAgICAgICBTaW1pbGFyIHRvIEZJTklTSCwgZXhjZXB0IGl0IGVuc3VyZXMgdGhhdCB0 aGUgS2VybWl0IHNlcnZlcgorICAgICAgICAgIHByb2dyYW0gZXhpdHMgYmFjayB0byB0aGUgb3Bl cmF0aW5nIHN5c3RlbSBvciBzaGVsbCBwcm9tcHQuCisgICAgICAgICAgKEZJTklTSCB3b3VsZCBy ZXR1cm4gaXQgdG8gaXRzIGludGVyYWN0aXZlIHByb21wdCBpZiBpdCB3YXMKKyAgICAgICAgICBz dGFydGVkIGluIGludGVyYWN0aXZlIG1vZGUsIGFuZCB3b3VsZCBjYXVzZSBpdCB0byBleGl0IGlm IGl0CisgICAgICAgICAgZW50ZXJlZCBzZXJ2ZXIgbW9kZSB2aWEgY29tbWFuZC1saW5lIG9wdGlv bi4pIFdoZW4gQy1LZXJtaXQgaXMKKyAgICAgICAgICB0byBiZSB0aGUgc2VydmVyLCB5b3UgY2Fu IHVzZSB7IEVOQUJMRSwgRElTQUJMRSB9IEVYSVQgdG8KKyAgICAgICAgICBjb250cm9sIHRoZSBj bGllbnQncyBhY2Nlc3MgdG8gdGhpcyBmZWF0dXJlLgorCisgICBSRU1PVEUgTUtESVIgZGlyZWN0 b3J5LW5hbWUKKyAgICAgICAgICBUZWxscyB0aGUgY2xpZW50IHRvIGFzayB0aGUgc2VydmVyIHRv IGNyZWF0ZSBhIGRpcmVjdG9yeSB3aXRoCisgICAgICAgICAgdGhlIGdpdmVuIG5hbWUsIHdoaWNo IGNhbiBiZSBhYnNvbHV0ZSBvciByZWxhdGl2ZS4gVGhlIHN5bnRheCBvZgorICAgICAgICAgIHRo ZSBkaXJlY3RvcnkgbmFtZSBkZXBlbmRzIG9uIHRoZSBLZXJtaXQgc2VydmVyIChzZWUgWzUzOV1u ZXh0CisgICAgICAgICAgc2VjdGlvbik7IGluIGFsbCBjYXNlcywgaXQgY2FuIGJlIGluIHRoZSBz eW50YXggb2YgdGhlIHN5c3RlbQorICAgICAgICAgIHdoZXJlIHRoZSBzZXJ2ZXIgaXMgcnVubmlu ZyAoVU5JWCwgVk1TLCBET1MsIGV0YykgYnV0IG5ld2VyCisgICAgICAgICAgc2VydmVycyBhbHNv IGFjY2VwdCBVTklYIHN5bnRheCwgbm8gbWF0dGVyIHdoYXQgdGhlIHVuZGVybHlpbmcKKyAgICAg ICAgICBwbGF0Zm9ybS4gVGhlIHNlcnZlciB3aWxsIG5vdCBleGVjdXRlIHRoaXMgY29tbWFuZCBp ZiAoYSkgaXQKKyAgICAgICAgICBkb2VzIG5vdCB1bmRlcnN0YW5kIGl0LCAoYikgYSBESVNBQkxF IE1LRElSIGNvbW1hbmQgaGFzIGJlZW4KKyAgICAgICAgICBnaXZlbiwgb3IgKGMpIGEgRElTQUJM RSBDV0QgY29tbWFuZCBoYXMgYmVlbiBnaXZlbjsgb3RoZXJ3aXNlLAorICAgICAgICAgIHRoZSBj b21tYW5kIGlzIGV4ZWN1dGVkLCBidXQgd2lsbCBmYWlsIGlmIHRoZSBkaXJlY3RvcnkgY2FuIG5v dAorICAgICAgICAgIGJlIGNyZWF0ZWQsIGluIHdoaWNoIGNhc2VzIG1vc3Qgc2VydmVycyB3aWxs IGF0dGVtcHQgdG8gcmV0dXJuIGEKKyAgICAgICAgICBtZXNzYWdlIGdpdmluZyB0aGUgcmVhc29u IGZvciBmYWlsdXJlLiBUaGUgUkVNT1RFIE1LRElSIGNvbW1hbmQKKyAgICAgICAgICBzdWNjZWVk cyBpZiB0aGUgcmVtb3RlIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCBvciBpZiBpdCBhbHJlYWR5Cisg ICAgICAgICAgZXhpc3RzIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgbmVlZCB0byBiZSBjcmVhdGVk LCBhbmQgZmFpbHMKKyAgICAgICAgICBvdGhlcndpc2UuCisKKyAgIFJFTU9URSBSTURJUiBkaXJl Y3RvcnktbmFtZQorICAgICAgICAgIFRlbGxzIHRoZSBjbGllbnQgdG8gYXNrIHRoZSBzZXJ2ZXIg dG8gcmVtb3ZlIChkZWxldGUpIGEKKyAgICAgICAgICBkaXJlY3Rvcnkgd2l0aCB0aGUgZ2l2ZW4g bmFtZS4gVGhlIHNhbWUgY29uc2lkZXJhdGlvbnMgYXBwbHkgYXMKKyAgICAgICAgICBmb3IgUkVN T1RFIE1LRElSLgorCisgICBSRU1PVEUgU0VUIEZJTEUgSU5DT01QTEVURSB7IERJU0NBUkQsIEtF RVAsIEFVVE8gfQorICAgICAgICAgIFByZXZpb3VzbHkgdGhpcyB3YXMgb25seSBhdmFpbGFibGUg aW4gaXRzIGVhcmxpZXIgZm9ybSwgUkVNT1RFCisgICAgICAgICAgU0VUIElOQ09NUExFVEUgKG5v IEZJTEUpLiBUaGUgZWFybGllciBmb3JtIGlzIHN0aWxsIGF2YWlsYWJsZSwKKyAgICAgICAgICBi dXQgaW52aXNpYmxlLiBBbHNvLCBBVVRPIHdhcyBhZGRlZCwgbWVhbmluZyBLRUVQIGlmIGluIGJp bmFyeQorICAgICAgICAgIG1vZGUsIERJU0NBUkQgb3RoZXJ3aXNlLgorCisgICBSRU1PVEUgU0VU IFRSQU5TRkVSIE1PREUgeyBBVVRPTUFUSUMsIE1BTlVBTCB9CisgICAgICAgICAgVGVsbHMgdGhl IGNsaWVudCB0byBhc2sgdGhlIHNlcnZlciB0byBzZXQgdGhlIGdpdmVuCisgICAgICAgICAgZmls ZS10cmFuc2ZlciBtb2RlLiBBdXRvbWF0aWMgbWVhbnMgKHJvdWdobHkpOiBpZiB0aGUgY2xpZW50 IGFuZAorICAgICAgICAgIHRoZSBzZXJ2ZXIgYXJlIHJ1bm5pbmcgb24gdGhlIHNhbWUga2luZCBv ZiBjb21wdXRlciAoZS5nLiBib3RoCisgICAgICAgICAgYXJlIG9uIFVOSVgpLCB0aGVuIHVzZSBi aW5hcnkgbW9kZSBhdXRvbWF0aWNhbGx5OyBpZiB0aGUgc3lzdGVtCisgICAgICAgICAgdHlwZXMg YXJlIGRpZmZlcmVudCwgdXNlIHNvbWUgb3RoZXIgbWV0aG9kIHRvIGF1dG9tYXRpY2FsbHkKKyAg ICAgICAgICBkZXRlcm1pbmUgdGV4dCBvciBiaW5hcnkgbW9kZSwgc3VjaCBhcyBmaWxlbmFtZSBw YXR0ZXJuCisgICAgICAgICAgbWF0Y2hpbmcuIE1BTlVBTCBtZWFucywgaW4gdGhpcyBjb250ZXh0 LCBvYmV5IHRoZSBjbGllbnQncyBGSUxFCisgICAgICAgICAgVFlQRSBzZXR0aW5nIChURVhUIG9y IEJJTkFSWSkuIFN5bm9ueW06IFJFTU9URSBTRVQgWEZFUiBNT0RFLgorCisgICBbIFJFTU9URSBd IFFVRVJZIEtFUk1JVCBmdW5jdGlvbihhcmdzLi4uKQorICAgICAgICAgIFByaW9yIHRvIEMtS2Vy bWl0IDcuMCwgdGhlIGFyZ3VtZW50cyB3ZXJlIG5vdCBldmFsdWF0ZWQgbG9jYWxseS4KKyAgICAg ICAgICBUaHVzIGl0IHdhcyBub3QgcG9zc2libGUgdG8gaGF2ZSB0aGUgc2VydmVyIHJ1biB0aGUg ZnVuY3Rpb24KKyAgICAgICAgICB3aXRoIGNsaWVudC1zaWRlIHZhcmlhYmxlcyBhcyBhcmd1bWVu dHMuIE5vdzoKKworICBkZWZpbmUgXCVhIG9vZmEuKgorICByZW1vdGUgcXVlcnkga2VybWl0IGZp bGVzKFwlYSkgICAgOyBDbGllbnQncyBcJWEKKyAgcmVtb3RlIHF1ZXJ5IGtlcm1pdCBmaWxlcyhc XCVhKSAgIDsgU2VydmVyJ3MgXCVhCisKKyAgIFsgUkVNT1RFIF0gTE9HSU4gWyB1c2VyIFsgcGFz c3dvcmQgXSBdCisgICAgICAgICAgTE9HSU4gaXMgbm93IGEgc3lub255bSBmb3IgUkVNT1RFIExP R0lOLgorCisgICBMT0dPVVQKKyAgICAgICAgICBUaGlzIGNvbW1hbmQsIHdoZW4gZ2l2ZW4gaW4g bG9jYWwgbW9kZSwgaXMgZXF1aXZhbGVudCB0byBSRU1PVEUKKyAgICAgICAgICBMT0dPVVQuIFdo ZW4gZ2l2ZW4gYXQgdGhlIElLU0QgcHJvbXB0LCBpdCBsb2dzIG91dCB0aGUgSUtTRC4KKyAgICAg ICAgICBXaGVuIGdpdmVuIGF0IHRoZSBDLUtlcm1pdCBwcm9tcHQgd2hlbiBpdCBoYXMgbm8gY29u bmVjdGlvbiwgaXQKKyAgICAgICAgICBkb2VzIG5vdGhpbmcuCisKKyAgIE5vdGUgdGhhdCBpbiBD LUtlcm1pdCA3LjAsIHRoZSBSRU1PVEUgKG9yIFIpIHByZWZpeCBpcyBub3QgcmVxdWlyZWQgZm9y CisgICBRVUVSWSwgc2luY2UgdGhlcmUgaXMgbm8gbG9jYWwgUVVFUlkgY29tbWFuZC4gVGhlIG5l dyB0b3AtbGV2ZWwgUVVFUlkKKyAgIGNvbW1hbmQgZG9lcyBleGFjdGx5IHdoYXQgUkVNT1RFIFFV RVJZIChSUVVFUlkpIGRvZXMuCisKKyAgIEFsbCBSRU1PVEUgY29tbWFuZHMgbm93IGhhdmUgc2lu Z2xlLXdvcmQgc2hvcnRjdXRzOgorCisgU2hvcnRjdXQgICBGdWxsIEZvcm0KKyAgUkFTRyAgICAg ICBSRU1PVEUgQVNTSUdOCisgIFJDRCAgICAgICAgUkVNT1RFIENECisgIFJDT1BZICAgICAgUkVN T1RFIENPUFkKKyAgUkRFTCAgICAgICBSRU1PVEUgREVMRVRFCisgIFJESVIgICAgICAgUkVNT1RF IERJUkVDVE9SWQorICBSRVhJVCAgICAgIFJFTU9URSBFWElUCisgIFJIRUxQICAgICAgUkVNT1RF IEhFTFAKKyAgUkhPU1QgICAgICBSRU1PVEUgSE9TVAorICBSUFdEICAgICAgIFJFTU9URSBQV0QK KyAgUlNFVCAgICAgICBSRU1PVEUgU0VUCisgIGV0Yy4KKworICAgVGhlIFIgcHJlZml4IGlzIG5v dCBhcHBsaWVkIHRvIExPR0lOIGJlY2F1c2UgdGhlcmUgaXMgYWxyZWFkeSBhbiBSTE9HSU4KKyAg IGNvbW1hbmQgd2l0aCBhIGRpZmZlcmVudCBtZWFuaW5nLiBJdCBpcyBub3QgYXBwbGllZCB0byBM T0dPVVQgZWl0aGVyLAorICAgc2luY2UgTE9HT1VUIGtub3dzIHdoYXQgdG8gZG8gaW4gZWFjaCBj YXNlLCBhbmQgZm9yIHN5bW1ldHJ5IHdpdGgKKyAgIExPR0lOLgorCisgICAgNS4yLjEuIFJlbW90 ZSBQcm9jZWR1cmUgRGVmaW5pdGlvbnMgYW5kIENhbGxzCisKKyAgIFRoaXMgaXMgbm90aGluZyBu ZXcsIGJ1dCBpdCBtaWdodCBub3QgYmUgb2J2aW91cy4uLiBSRU1PVEUgQVNTSUdOIGFuZAorICAg UkVNT1RFIFFVRVJZIG1heSBiZSB1c2VkIHRvIGFjaGlldmUgcmVtb3RlIHByb2NlZHVyZSBleGVj dXRpb24uIFRoZQorICAgcmVtb3RlIHByb2NlZHVyZSBjYW4gYmUgZGVmaW5lZCBsb2NhbGx5IG9y IHJlbW90ZWx5LgorCisgICBBIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBpcyBhY2NvbXBsaXNoZWQg YXMgbm90ZWQgaW4gdGhlIHByZXZpb3VzCisgICBzZWN0aW9uOgorCisgIFsgcmVtb3RlIF0gcXVl cnkga2VybWl0IGZ1bmN0aW9uLW5hbWUoYXJncy4uLikKKworICAgVGhpcyBpbnZva2VzIGFueSBm dW5jdGlvbiB0aGF0IGlzIGJ1aWx0IGluIHRvIHRoZSBLZXJtaXQgc2VydmVyLCBlLmcuOgorCisg IFsgcmVtb3RlIF0gcXVlcnkga2VybWl0IHNpemUoZm9vLmJhcikKKworICAgcmV0dXJucyB0aGUg c2l6ZSBvZiB0aGUgcmVtb3RlIGZpbGUsIGZvby5iYXIuCisKKyAgIE5vdyBub3RlIHRoYXQgQy1L ZXJtaXQgaW5jbHVkZXMgYW4gXGZleGVjdXRlKCkgZnVuY3Rpb24sIGFsbG93aW5nIGl0IHRvCisg ICBleGVjdXRlIGFueSBtYWNybyBhcyBpZiBpdCB3ZXJlIGEgYnVpbHQtaW4gZnVuY3Rpb24uIFNv IHN1cHBvc2UgTVlNQUNSTworICAgaXMgdGhlIG5hbWUgb2YgYSBtYWNybyBkZWZpbmVkIGluIHRo ZSBzZXJ2ZXIuIFlvdSBjYW4gZXhlY3V0ZSBpdCBmcm9tCisgICB0aGUgY2xpZW50IGFzIGZvbGxv d3MgKHRoZSByZWR1bmRhbnQgInJlbW90ZSIgcHJlZml4IGlzIG9taXR0ZWQgaW4gdGhlCisgICBy ZW1haW5pbmcgZXhhbXBsZXMpOgorCisgIHF1ZXJ5IGtlcm1pdCBleGVjdXRlKG15bWFjcm8gYXJn MSBhcmcyLi4uKQorCisgICBUaGUgcmV0dXJuIHZhbHVlLCBpZiBhbnksIGlzIHRoZSB2YWx1ZSBv ZiB0aGUgUkVUVVJOIGNvbW1hbmQgdGhhdAorICAgdGVybWluYXRlZCBleGVjdXRpb24gb2YgdGhl IG1hY3JvLCBmb3IgZXhhbXBsZToKKworICBkZWZpbmUgYWRkdHdvbnVtYmVycyByZXR1cm4gXGZl dmFsKFwlMStcJTIpCisKKyAgIFRoZSBjbGllbnQgaW52b2NhdGlvbiB3b3VsZCBiZToKKworICBx dWVyeSBrZXJtaXQgZXhlY3V0ZShhZGR0d29udW1iZXJzIDMgNCkKKyAgNworCisgICBUaGUgcmVz dWx0ICgiNyIgaW4gdGhpcyBjYXNlKSBpcyBhbHNvIGFzc2lnbmVkIHRvIHRoZSBjbGllbnQncwor ICAgXHYocXVlcnkpIHZhcmlhYmxlLgorCisgICBUbyBleGVjdXRlIGEgcmVtb3RlIHN5c3RlbSBj b21tYW5kIG9yIGNvbW1hbmQgcHJvY2VkdXJlIChzaGVsbCBzY3JpcHQsCisgICBldGMpIHVzZToK KworICBxdWVyeSBrZXJtaXQgY29tbWFuZChuYW1lIGFyZ3MuLi4pCisKKyAgIEZpbmFsbHksIHN1 cHBvc2UgeW91IHdhbnQgdGhlIGNsaWVudCB0byBzZW5kIGEgbWFjcm8gdG8gdGhlIHNlcnZlciB0 bworICAgYmUgZXhlY3V0ZWQgb24gdGhlIHNlcnZlciBlbmQuIFRoaXMgaXMgZG9uZSBhcyBmb2xs b3dzOgorCisgIHJlbW90ZSBhc3NpZ24gbWFjcm9uYW1lIGRlZmluaXRpb24KKyAgcXVlcnkga2Vy bWl0IGV4ZWN1dGUobWFjcm9uYW1lIGFyZzEgYXJnMi4uLikKKworICAgUXVvdGluZyBpcyByZXF1 aXJlZCBpZiB0aGUgZGVmaW5pdGlvbiBjb250YWlucyBmb3JtYWwgcGFyYW1ldGVycy4KKworICA1 LjMuIE5ldyBTZXJ2ZXIgQ2FwYWJpbGl0aWVzCisKKyAgICA1LjMuMS4gQ3JlYXRpbmcgYW5kIFJl bW92aW5nIERpcmVjdG9yaWVzCisKKyAgIFRoZSBDLUtlcm1pdCA3LjAgc2VydmVyIHJlc3BvbmRz IHRvIFJFTU9URSBNS0RJUiBhbmQgUkVNT1RFIFJNRElSCisgICBjb21tYW5kcy4gVGhlIGRpcmVj dG9yeSBuYW1lIG1heSBiZSBpbiBlaXRoZXIgdGhlIG5hdGl2ZSBmb3JtYXQgb2YgdGhlCisgICBz ZXJ2ZXIncyBjb21wdXRlciwgb3IgaW4gVU5JWCBmb3JtYXQuIEZvciBleGFtcGxlLCBhIHNlcnZl ciBydW5uaW5nIG9uCisgICBWTVMgd2l0aCBhIGN1cnJlbnQgZGlyZWN0b3J5IG9mIFtJVkFOXSBj YW4gYWNjZXB0IGNvbW1hbmRzIGZyb20gdGhlCisgICBjbGllbnQgbGlrZToKKworICByZW1vdGUg bWtkaXIgb2xnYSAgICAgICAgIDsgTWFrZXMgW0lWQU4uT0xHQV0gKG5vbnNwZWNpZmljIGZvcm1h dCkKKyAgcmVtb3RlIG1rZGlyIC5vbGdhICAgICAgICA7IE1ha2VzIFtJVkFOLk9MR0FdIChWTVMg Zm9ybWF0IHdpdGhvdXQgYnJhY2tldHMpCisgIHJlbW90ZSBta2RpciBvbGdhLyAgICAgICAgOyBN YWtlcyBbSVZBTi5PTEdBXSAoVU5JWCByZWxhdGl2ZSBmb3JtYXQpCisgIHJlbW90ZSBta2RpciAv aXZhbi9vbGdhICAgOyBNYWtlcyBbSVZBTi5PTEdBXSAoVU5JWCBhYnNvbHV0ZSBmb3JtYXQpCisg IHJlbW90ZSBta2RpciBbaXZhbi5vbGdhXSAgOyBNYWtlcyBbSVZBTi5PTEdBXSAoVk1TIGFic29s dXRlIGZvcm1hdCkKKyAgcmVtb3RlIG1rZGlyIFsub2xnYV0gICAgICA7IE1ha2VzIFtJVkFOLk9M R0FdIChWTVMgcmVsYXRpdmUgZm9ybWF0KQorCisgICAgNS4zLjEuMS4gQ3JlYXRpbmcgRGlyZWN0 b3JpZXMKKworICAgSWYgYSBkaXJlY3RvcnkgbmFtZSBpcyBnaXZlbiB0aGF0IGNvbnRhaW5zIG1v cmUgdGhhbiBvbmUgc2VnbWVudCB0aGF0CisgICBkb2VzIG5vdCBleGlzdCwgdGhlIHNlcnZlciBh dHRlbXB0cyB0byBjcmVhdGUgYWxsIHRoZSBzZWdtZW50cy4gRm9yCisgICBleGFtcGxlLCBpZiB0 aGUgY2xpZW50IHNheXM6CisKKyAgUkVNT1RFIE1LRElSIGxldHRlcnMvYW5ncnkKKworICAgYSAi bGV0dGVycyIgc3ViZGlyZWN0b3J5IGlzIGNyZWF0ZWQgaW4gdGhlIHNlcnZlcidzIGN1cnJlbnQg ZGlyZWN0b3J5CisgICBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCBhbmQgdGhlbiBhbiAi YW5ncnkiIHN1YmRpcmVjdG9yeSBpcworICAgY3JlYXRlZCBiZW5lYXRoIGl0LCBpZiBpdCBkb2Vz IG5vdCBhbHJlYWR5IGhhdmUgb25lLiBUaGlzIGNhbiByZXBlYXRlZAorICAgdG8gYW55IHJlYXNv bmFibGUgZGVwdGg6CisKKyAgUkVNT1RFIE1LRElSIGEvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20v bi9vL3AvcS9yL3MvdC91L3Yvdy96L3kvegorCisgICAgNS4zLjEuMi4gUmVtb3ZpbmcgRGlyZWN0 b3JpZXMKKworICAgV2hlbiBhdHRlbXB0aW5nIHRvIGV4ZWN1dGUgYSBSRU1PVEUgUk1ESVIsIHRo ZSBzZXJ2ZXIgY2FuIHJlbW92ZSBvbmx5IGEKKyAgIHNpbmdsZSBkaXJlY3RvcnksIG5vdCBhbiBl bnRpcmUgc2VxdWVuY2Ugb3IgdHJlZS4gVGhlIHN5c3RlbSBzZXJ2aWNlCisgICB0aGF0IGlzIGNh bGxlZCB0byByZW1vdmUgdGhlIGRpcmVjdG9yeSBnZW5lcmFsbHkgcmVxdWlyZXMgbm90IG9ubHkg dGhhdAorICAgdGhlIHNlcnZlciBwcm9jZXNzIGhhcyB3cml0ZSBkZWxldGUgYWNjZXNzLCBidXQg YWxzbyB0aGF0IHRoZSBkaXJlY3RvcnkKKyAgIGNvbnRhaW4gbm8gZmlsZXMuCisKKyAgIEluIHRo ZSBmdXR1cmUsIGEgUkVNT1RFIFJNRElSIC9SRUNVUlNJVkUgY29tbWFuZCAoYW5kIHRoZSBhY2Nv bXBhbnlpbmcKKyAgIHByb3RvY29sKSBtaWdodCBiZSBhZGRlZC4gRm9yIG5vdywgdXNlIHRoZSBl cXVpdmFsZW50IFJFTU9URSBIT1NUCisgICBjb21tYW5kKHMpLCBpZiBhbnkuCisKKyAgICA1LjMu Mi4gRGlyZWN0b3J5IExpc3RpbmdzCisKKyAgIERpcmVjdG9yeSBsaXN0aW5ncyBhcmUgZ2VuZXJh dGVkIGJ5IEMtS2VybWl0IGl0c2VsZiwgcmF0aGVyIHRoYW4gYnkKKyAgIHJ1bm5pbmcgdGhlIHVu ZGVybHlpbmcgc3lzdGVtJ3MgZGlyZWN0b3J5IGNvbW1hbmQuIFNvbWUgY29udHJvbCBvdmVyCisg ICB0aGUgbGlzdGluZyBmb3JtYXQgY2FuIGJlIG9idGFpbmVkIHdpdGggdGhlIFNFVCBPUFRJT05T IERJUkVDVE9SWQorICAgY29tbWFuZCAoWzU0MF1TZWN0aW9uIDQuNS4xKS4gVGhlIGZvbGxvd2lu ZyBvcHRpb25zIGFmZmVjdCBsaXN0aW5ncworICAgc2VudCBieSB0aGUgc2VydmVyOiAvW05PXUhF QURJTkcsIC9bTk9dRE9URklMRVMsIGFuZCAvW05PXUJBQ0tVUC4gSW4KKyAgIFVOSVggYW5kIFZN UywgdGhlIGxpc3RpbmcgaXMgYWx3YXlzIHNvcnRlZCBieSBmaWxlbmFtZS4gVGhlcmUgaXMsIGF0 CisgICBwcmVzZW50LCBubyBwcm90b2NvbCBkZWZpbmVkIGZvciB0aGUgY2xpZW50IHRvIHJlcXVl c3QgbGlzdGluZyBvcHRpb25zCisgICBvZiB0aGUgc2VydmVyOyB0aGlzIG1pZ2h0IGJlIGFkZGVk IGluIHRoZSBmdXR1cmUuCisKKyAgIFRoZSBzZXJ2ZXIncyBkaXJlY3RvcnkgbGlzdGluZ3MgYXJl IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgICBQcm90ZWN0aW9uIG9yIHBlcm1pc3Npb25z OgorICAgICAgICAgIEluIFVOSVggYW5kIE9TLTksIHRoaXMgaXMgYSAxMC1jaGFyYWN0ZXIgZmll bGQsIGxlZnQgYWRqdXN0ZWQuCisgICAgICAgICAgSW4gVk1TIGl0IGlzIGEgMjItY2hhcmFjdGVy IGZpZWxkLCBsZWZ0LWFkanVzdGVkLiBJbiBlYWNoIGNhc2UsCisgICAgICAgICAgdGhlIHByb3Rl Y3Rpb24gLyBwZXJtaXNzaW9uIGNvZGVzIGFyZSBzaG93biBpbiB0aGUgc2VydmVyCisgICAgICAg ICAgcGxhdGZvcm0ncyBuYXRpdmUgZm9ybWF0LiBJbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcywg dGhpcyBmaWVsZAorICAgICAgICAgIGlzIG5vdCBzaG93bi4KKworICAgU2l6ZSBpbiBieXRlczoK KyAgICAgICAgICBUaGlzIGlzIGFsd2F5cyBhIDEwLWNoYXJhY3RlciBmaWVsZC4gVGhlIGZpbGUn cyBzaXplIGlzIHNob3duIGFzCisgICAgICAgICAgYSBkZWNpbWFsIG51bWJlciwgcmlnaHQgYWRq dXN0ZWQgaW4gdGhlIGZpZWxkLiBJZiB0aGUgZmlsZSBpcyBhCisgICAgICAgICAgZGlyZWN0b3J5 IGFuZCBpdHMgc2l6ZSBjYW4gbm90IGJlIG9idGFpbmVkLCB0aGUgc2l6ZSBpcyBzaG93biBhcwor ICAgICAgICAgICI8RElSPiIuIFR3byBibGFua3MgZm9sbG93IHRoaXMgZmllbGQuCisKKyAgIERh dGU6CisgICAgICAgICAgQWx3YXlzIGluIHl5eXktbW0tZGQgaGg6bW06c3MgbnVtZXJpYyBmb3Jt YXQsIGFuZCB0aGVyZWZvcmUgMTkKKyAgICAgICAgICBjaGFyYWN0ZXJzIGxvbmcuIElmIHRoZSBm aWxlJ3MgZGF0ZS90aW1lIGNhbid0IGJlIG9idGFpbmVkLAorICAgICAgICAgIHplcm9zICgwKSBh cmUgc2hvd24gZm9yIGFsbCB0aGUgZGlnaXRzLiBUaGlzIGZpZWxkIGlzIGZvbGxvd2VkCisgICAg ICAgICAgYnkgdHdvIGJsYW5rcy4KKworICAgRmlsZW5hbWU6CisgICAgICAgICAgVGhpcyBmaWVs ZCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIEZpbGVuYW1lcyBhcmUgc2hvd24KKyAg ICAgICAgICByZWxhdGl2ZSB0byB0aGUgc2VydmVyJ3MgY3VycmVudCBkaXJlY3RvcnkuIEluIFVO SVgsIHN5bWJvbGljCisgICAgICAgICAgbGlua3MgYXJlIHNob3duIGFzIHRoZXkgYXJlIGluIGFu ICJscyAtbCIgbGlzdGluZyBhcyAibGlua25hbWUKKyAgICAgICAgICAtPiBmaWxlbmFtZSIuCisK KyAgIEluIFVOSVggYW5kIFZNUywgbGlzdGluZ3MgYXJlIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIg aW4gYWxwaGFiZXRpY2FsCisgICBvcmRlciBvZiBmaWxlbmFtZS4gVGhlcmUgYXJlIHByZXNlbnRs eSBubyBvdGhlciBzb3J0IG9yIHNlbGVjdGlvbgorICAgb3B0aW9ucy4KKworICAgSG93ZXZlciwg c2luY2UgdGhlc2UgYXJlIGZpeGVkLWZpZWxkIGxpc3RpbmdzLCBhbGwgZmllbGRzIGNhbiBiZSB1 c2VkCisgICBhcyBzb3J0IGtleXMgYnkgZXh0ZXJuYWwgc29ydCBwcm9ncmFtcy4gTm90ZSwgaW4g cGFydGljdWxhciwgdGhhdCB0aGUKKyAgIGZvcm1hdCB1c2VkIGZvciB0aGUgZGF0ZSBhbGxvd3Mg YSBub3JtYWwgbGV4aWNhbCBvbiB0aGF0IGZpZWxkIHRvCisgICBhY2hpZXZlIHRoZSBkYXRlIG9y ZGVyaW5nLiBGb3IgZXhhbXBsZSwgbGV0J3MgYXNzdW1lIHdlIGhhdmUgYSBVTklYCisgICBjbGll bnQgYW5kIGEgVU5JWCBzZXJ2ZXIuIEluIHRoaXMgY2FzZSwgdGhlIHNlcnZlcidzIGxpc3Rpbmcg aGFzIHRoZQorICAgZGF0ZSBpbiBjb2x1bW5zIDIyLTQwLCBhbmQgdGh1cyBjb3VsZCBiZSBzb3J0 ZWQgYnkgdGhlIFVOSVggc29ydAorICAgcHJvZ3JhbSB1c2luZyAic29ydCArMC4yMiAtMC40MCIg b3IgaW4gcmV2ZXJzZSBvcmRlciBieSAic29ydCArMC4yMgorICAgLTAuNDByIi4KKworICAgU2lu Y2UgdGhlIFVOSVggY2xpZW50IGNhbiBwaXBlIHJlc3BvbnNlcyB0byBSRU1PVEUgY29tbWFuZHMg dGhyb3VnaAorICAgZmlsdGVycywgYW55IGRlc2lyZWQgc29ydGluZyBjYW4gYmUgYWNjb21wbGlz aGVkIHRoaXMgd2F5LCBmb3IgZXhhbXBsZToKKworQy1LZXJtaXQ+IHJlbW90ZSBkaXJlY3Rvcnkg fCBzb3J0ICswLjIyIC0wLjQwCisKKyAgIFlvdSBjYW4gYWxzbyBzb3J0IGJ5IHNpemU6CisKKyAg Qy1LZXJtaXQ+IHJlbW90ZSBkaXJlY3RvcnkgfCBzb3J0ICswLjExIC0wLjE5CisKKyAgIFlvdSBj YW4gdXNlIHNvcnQgb3B0aW9ucyB0byBzZWxlY3QgcmV2ZXJzZSBvciBhc2NlbmRpbmcgb3JkZXIu ICJtYW4KKyAgIHNvcnQiIChpbiBVTklYKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gQW5kIG9mIGNv dXJzZSwgeW91IGNhbiBwaXBlIHRoZXNlCisgICBsaXN0aW5ncyB0aHJvdWdoIGFueSBvdGhlciBm aWx0ZXIgb2YgeW91ciBjaG9pY2UsIHN1Y2ggYXMgZ3JlcCB0byBza2lwCisgICB1bndhbnRlZCBs aW5lcy4KKworICA1LjQuIFN5bnRheCBmb3IgUmVtb3RlIEZpbGVuYW1lcyB3aXRoIEVtYmVkZGVk IFNwYWNlcworCisgICBDLUtlcm1pdCBhbmQgSzk1LCB3aGVuIGluIHNlcnZlciBtb2RlLCBhc3N1 bWUgdGhhdCBhbnkgc3BhY2VzIGluIHRoZQorICAgZmlsZSBzcGVjaWZpY2F0aW9uIGluIGFuIGlu Y29taW5nIEdFVCBjb21tYW5kIGFyZSBmaWxlbmFtZSBzZXBhcmF0b3JzLgorICAgVGh1cyBpZiB0 aGUgY2xpZW50IGdpdmVzIGEgY29tbWFuZCBsaWtlOgorCisgIGdldCB7b29mYS50eHQgb29mYS5i aW59CisKKyAgIG9yLCBlcXVpdmFsZW50bHk6CisKKyAgbWdldCBvb2ZhLnR4dCBvb2ZhLmJpbgor CisgICB0aGUgc2VydmVyIHRyaWVzIHRvIHNlbmQgdGhlIHR3byBmaWxlcywgb29mYS50eHQgYW5k IG9vZmEuYmluLiBCdXQgd2hhdAorICAgaWYgeW91IHdhbnQgdGhlIHNlcnZlciB0byBzZW5kIHlv dSBhIGZpbGUgbmFtZWQsIHNheToKKworICBEOlxIUCBPZmZpY2VKZXQgNTAwXEltYWdlc1xNeSBQ cmV0dHkgUGljdHVyZSBEb3QgUENMCisKKyAgIEhvdyBkb2VzIHRoZSBzZXJ2ZXIga25vdyB0aGlz IGlzIHN1cHBvc2VkIHRvIGJlIG9uZSBmaWxlIGFuZCBub3Qgc2V2ZW4/CisgICBJbiB0aGlzIGNh c2UsIHlvdSBuZWVkIHRvIHRoZSBzZW5kIGZpbGUgbmFtZSB0byB0aGUgc2VydmVyIGVuY2xvc2Vk IGluCisgICBlaXRoZXIgY3VybHkgYnJhY2VzOgorCisgIHtEOlxIUCBPZmZpY2VKZXQgNTAwXElt YWdlc1xNeSBQcmV0dHkgUGljdHVyZSBEb3QgUENMfQorCisgICBvciBBU0NJSSBkb3VibGVxdW90 ZXM6CisKKyAgIkQ6XEhQIE9mZmljZUpldCA1MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERv dCBQQ0wiCisKKyAgIFRoZSBtZXRob2QgZm9yIGRvaW5nIHRoaXMgZGVwZW5kcyBvbiB5b3VyIGNs aWVudC4gSWYgeW91ciBjbGllbnQgaXMKKyAgIEMtS2VybWl0IDcuMCwgYW55IHJlY2VudCB2ZXJz aW9uIG9mIEtlcm1pdCA5NSwgb3IgTVMtRE9TIEtlcm1pdCAzLjE2LAorICAgdGhlbiB5b3UgaGF2 ZSB0byBlbmNsb3NlIHRoZSBuYW1lIGluIGJyYWNlcyBqdXN0IHNvIHRoZSBjbGllbnQgY2FuCisg ICBwYXJzZSBpdCwgc28gdG8gc2VuZCBicmFjZXMgb3IgZG91YmxlcXVvdGVzIHRvIHRoZSBzZXJ2 ZXIsIHlvdSBtdXN0IHB1dAorICAgdGhlbSBpbnNpZGUgdGhlIGZpcnN0LCBvdXRzaWRlIHBhaXIg b2YgYnJhY2VzLiBBbmQgeW91IGFsc28gbmVlZCB0bworICAgZG91YmxlIHRoZSBiYWNrc2xhc2hl cyB0byBwcmV2ZW50IHRoZW0gZnJvbSBiZWluZyBpbnRlcnByZXRlZDoKKworICBnZXQge3tEOlxc SFAgT2ZmaWNlSmV0IDUwMFxcSW1hZ2VzXFxNeSBQcmV0dHkgUGljdHVyZSBEb3QgUENMfX0KKyAg Z2V0IHsiRDpcXEhQIE9mZmljZUpldCA1MDBcXEltYWdlc1xcTXkgUHJldHR5IFBpY3R1cmUgRG90 IFBDTCJ9CisKKyAgIFRvIGdldCBhcm91bmQgdGhlIHJlcXVpcmVtZW50IHRvIGRvdWJsZSBiYWNr c2xhc2hlcyBpbiBsaXRlcmFsCisgICBmaWxlbmFtZXMsIG9mIGNvdXJzZSB5b3UgY2FuIGFsc28g dXNlOgorCisgIHNldCBjb21tYW5kIHF1b3Rpbmcgb2ZmCisgIGdldCB7e0Q6XEhQIE9mZmljZUpl dCA1MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERvdCBQQ0x9fQorICBnZXQgeyJEOlxIUCBP ZmZpY2VKZXQgNTAwXEltYWdlc1xNeSBQcmV0dHkgUGljdHVyZSBEb3QgUENMIn0KKyAgc2V0IGNv bW1hbmQgcXVvdGluZyBvbgorCisgICBJZiB5b3UgYXJlIGdpdmluZyBhICJrZXJtaXQiIGNvbW1h bmQgdG8gdGhlIFVOSVggc2hlbGwsIHlvdSBoYXZlIHRvCisgICBvYnNlcnZlIHRoZSBzaGVsbCdz IHF1b3RpbmcgcnVsZXMsIHNvbWV0aGluZyBsaWtlIHRoaXM6CisKKyAga2VybWl0IC1pZyAie0Q6 XEhQIE9mZmljZUpldCA1MDBcSW1hZ2VzXE15IFByZXR0eSBQaWN0dXJlIERvdCBQQ0x9IgorCisg ICBIZXJlLCB0aGUgcXVvdGVzIGdvIG9uIHRoZSBvdXRzaWRlIHNvIFVOSVggd2lsbCBwYXNzIHRo ZSBlbnRpcmUKKyAgIGZpbGVuYW1lLCBzcGFjZXMsIGJyYWNlcywgYW5kIGFsbCwgYXMgYSBzaW5n bGUgYXJndW1lbnQgdG8gS2VybWl0LCBhbmQKKyAgIHRoZSBiYWNrc2xhc2hlcyBhcmUgbm90IGRv dWJsZWQgYmVjYXVzZSAoYSkgdGhlIFVOSVggc2hlbGwgaWdub3JlcyB0aGVtCisgICBzaW5jZSB0 aGV5IGFyZSBpbiBhIHF1b3RlZCBzdHJpbmcsIGFuZCAoYikgS2VybWl0IGlnbm9yZXMgdGhlbSBz aW5jZQorICAgdGhlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyIGlzIG5vdCBhY3RpdmF0ZWQg aW4gdGhpcyBjYXNlLgorCisgIDUuNS4gQXV0b21hdGljIE9yaWVudGF0aW9uIE1lc3NhZ2VzIHVw b24gRGlyZWN0b3J5IENoYW5nZQorCisgICBDLUtlcm1pdCA3LjAsIHdoZW4gYWN0aW5nIGFzIGEg c2VydmVyLCBjYW4gc2VuZCBhbiBvcmllbnRhdGlvbiBtZXNzYWdlCisgICB0byB0aGUgY2xpZW50 IHdoZW5ldmVyIHRoZSBzZXJ2ZXIgZGlyZWN0b3J5IGNoYW5nZXMuIEZvciBleGFtcGxlLCB3aGVu CisgICB0aGUgY2xpZW50IGdpdmVzIGEgUkVNT1RFIENEIGNvbW1hbmQsIHRoZSBzZXJ2ZXIgc2Vu ZHMgdGhlIGNvbnRlbnRzIG9mCisgICB0aGUgbmV3IGRpcmVjdG9yeSdzICJSZWFkIE1lIiBmaWxl IHRvIHRoZSBjbGllbnQncyBzY3JlZW4uIFRoZQorICAgZm9sbG93aW5nIGNvbW1hbmRzIGdvdmVy biB0aGlzIGZlYXR1cmU6CisKKyAgIFNFVCBTRVJWRVIgQ0QtTUVTU0FHRSBGSUxFIG5hbWUKKyAg ICAgICAgICBHaXZlbiB0byB0aGUgc2VydnIsIGFsbG93cyB0aGUgbWVzc2FnZS1maWxlIG5hbWUg dG8gYmUgc3BlY2lmaWVkCisgICAgICAgICAgYXQgcnVudGltZS4gQSBsaXN0IG9mIG5hbWVzIHRv IGxvb2sgZm9yIGNhbiBiZSBnaXZlbiBpbiB0aGUKKyAgICAgICAgICBmb2xsb3dpbmcgZm9ybWF0 OgorCisgIHt7bmFtZTF9e25hbWUyfXtuYW1lM317Li4ufX0KKworICAgICAgICAgIGUuZy4gU0VU IFNFUlZFUiBDRC1NRVNTQUdFIEZJTEUKKyAgICAgICAgICB7ey4vLnJlYWRtZX17UkVBRE1FLlRY VH17UkVBRC5NRX19CisKKyAgIFJFTU9URSBTRVQgU0VSVkVSIENELU1FU1NBR0UgeyBPTiwgT0ZG IH0KKyAgICAgICAgICBHaXZlbiB0byB0aGUgY2xpZW50LCBsZXRzIHRoZSBjbGllbnQgY29udHJv bCB3aGV0aGVyIHRoZSBzZXJ2ZXIKKyAgICAgICAgICBzZW5kcyBhdXRvbWF0aWMgQ0QgbWVzc2Fn ZXMuCisKKyAgIFNIT1cgU0VSVkVSCisgICAgICAgICAgR2l2ZW4gdG8gc2VydmVyLCBpbmNsdWRl cyBDRC1NZXNzYWdlIHN0YXR1cy4KKworICAgVGhlIGRlZmF1bHQgQ0QgbWVzc2FnZSBmaWxlIG5h bWUgaXMgc3lzdGVtIGRlcGVuZGVudC4gU0hPVyBDRCBvciBTSE9XCisgICBTRVJWRVIgZGlzcGxh eXMgdGhlIGxpc3QuIEFsc28gc2VlIFs1NDFdU2VjdGlvbiA0LjUuMi4KKworICA1LjYuIE5ldyBT ZXJ2ZXIgQ29udHJvbHMKKworICAgRElTQUJMRSBFTkFCTEUKKyAgICAgICAgICBBbGxvd3MgdGhl IHNlcnZlciB0byBjb25maWd1cmVkIHN1Y2ggdGhhdCBESVNBQkxFZCBmZWF0dXJlcyBjYW4KKyAg ICAgICAgICBub3QgYmUgcmUtZW5hYmxlZCBieSBhbnkgbWVhbnMgLS0gZS5nLiBpZiB0aGUgY2xp ZW50IGlzIHNvbWVob3cKKyAgICAgICAgICBhYmxlIHRvIGdldCB0aGUgc2VydmVyIGludG8gY29t bWFuZCBtb2RlLiBPbmNlIERJU0FCTEVkLCBFTkFCTEUKKyAgICAgICAgICBjYW4gbm90IGJlIHJl LUVOQUJMRWQuCisKKyAgIFNFVCBTRVJWRVIgSURMRS1USU1FT1VUIHNlY29uZHMKKyAgICAgICAg ICBUaGlzIHdhcyBhdmFpbGFibGUgcHJldmlvdXNseSBpbiBLZXJtaXQgOTUgb25seS4gTm93IGl0 IGNhbiBiZQorICAgICAgICAgIHVzZWQgaW4gQy1LZXJtaXQgYWxzbyB0byBzcGVjaWZ5IGEgbWF4 aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0aGUKKyAgICAgICAgICBzZXJ2ZXIgaXMgYWxsb3dlZCB0 byBiZSBpZGxlIGJlZm9yZSBleGl0aW5nIHNlcnZlciBtb2RlLiAwCisgICAgICAgICAgc2Vjb25k cyBtZWFucyBubyBpZGxlIHRpbWVvdXQuIEluIEMtS2VybWl0IChidXQgbm90IEstOTUpLCBTRVQK KyAgICAgICAgICBTRVJWRVIgVElNRU9VVCBhbmQgU0VUIFNFUlZFUiBJRExFLVRJTUVPVVQgYXJl IG11dHVhbGx5CisgICAgICAgICAgZXhjbHVzaXZlIC0tIHlvdSBjYW4gaGF2ZSBvbmUgb3IgdGhl IG90aGVyIChvciBuZWl0aGVyKSwgYnV0IG5vdAorICAgICAgICAgIGJvdGguIChTZXJ2ZXIgdGlt ZW91dHMgYXJlIGZvciB0aGUgYmVuZWZpdCBvZiBwcmltaXRpdmUgS2VybWl0CisgICAgICAgICAg Y2xpZW50cyB0aGF0IGFyZSBub3QgY2FwYWJsZSBvZiB0aW1pbmcgb3V0IG9uIHRoZWlyIG93bjsg dG8gb3VyCisgICAgICAgICAga25vd2xlZGdlLCBubyBzdWNoIGNsaWVudHMgYXJlIHN0aWxsIGlu IGNpcmN1bGF0aW9uLikKKworICAgU0VUIFNFUlZFUiBLRUVQQUxJVkUgeyBPTiwgT0ZGIH0KKyAg ICAgICAgICAoU2VlIG5leHQgc2VjdGlvbikuCisKKyAgNS43LiBUaW1lb3V0cyBkdXJpbmcgUkVN T1RFIEhPU1QgQ29tbWFuZCBFeGVjdXRpb24KKworICAgUHJpb3IgdG8gQy1LZXJtaXQgNy4wLCB0 aGUgQy1LZXJtaXQgc2VydmVyIHdvdWxkIGJsb2NrIHdhaXRpbmcgZm9yCisgICBvdXRwdXQgZnJv bSBhIHN5c3RlbSBjb21tYW5kIGludm9rZWQgdmlhIFJFTU9URSBIT1NUIGZyb20gdGhlIGNsaWVu dC4KKyAgIElmIHRoZSBzeXN0ZW0gY29tbWFuZCB0b29rIGEgbG9uZyB0aW1lIHRvIGV4ZWN1dGUs IHRoZSBjbGllbnQgd291bGQKKyAgIHRpbWUgb3V0IGFuZCBzZW5kIE5BSyBwYWNrZXRzLiBJZiB0 aGUgY29tbWFuZCB0b29rIHRvbyBsb25nLCB0aGUgY2xpZW50CisgICB3b3VsZCByZWFjaCBpdHMg cmV0cnkgbGltaXQgYW5kIGdpdmUgdXAuIEV2ZW4gaWYgaXQgZGlkbid0LCB0aGUgTkFLcworICAg d291bGQgY2F1c2UgdW5uZWNlc3NhcnkgcmV0cmFuc21pc3Npb25zLgorCisgICBJbiB2ZXJzaW9u IDcuMCwgdGhlIEMtS2VybWl0IHNlcnZlciAoVk1TIGFuZCBzZWxlY3QoKS1jYXBhYmxlIFVOSVgK KyAgIHZlcnNpb25zIG9ubHkpLCBzZW5kcyAia2VlcGFsaXZlIHBhY2tldHMiIChlbXB0eSBkYXRh IHBhY2tldHMpIG9uY2UgcGVyCisgICBzZWNvbmQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHN5c3Rl bSBjb21tYW5kIHRvIGNvbXBsZXRlLiBUaGlzIHByb2NlZHVyZQorICAgc2hvdWxkIGJlIGVudGly ZWx5IHRyYW5zcGFyZW50IHRvIHRoZSBLZXJtaXQgY2xpZW50LCBhbmQgc2hvdWxkIHByZXZlbnQK KyAgIHRoZSB1bndhbnRlZCB0aW1lb3V0cyBhbmQgTkFLcy4gV2hlbiBDLUtlcm1pdCA3LjAgaXRz ZWxmIChvciBLOTUKKyAgIDEuMS4xOSkgaXMgdGhlIGNsaWVudCwgaXQgcHJpbnRzIGRvdHMgdG8g c2hvdyB0aGUga2VlcGFsaXZlIHBhY2tldHMuCisKKyAgIFRoZSBrZWVwYWxpdmUgZmVhdHVyZSBj YW4gYmUgdHVybmVkIG9mZiBhbmQgb24gd2l0aDoKKworICBTRVQgU0VSVkVSIEtFRVBBTElWRSB7 IE9OLCBPRkYgfQorCisgICBOb3JtYWxseSBpdCBzaG91bGQgYmUgb24uIFR1cm4gaXQgb2ZmIGl0 IGlmIGNhdXNlcyB0cm91YmxlIHdpdGggdGhlCisgICBjbGllbnQsIG9yIGlmIGl0IHNlZW1zIHRv IHNsb3cgZG93biB0aGUgc2VydmVyIChhcyBpdCBtaWdodCBvbiBzb21lCisgICBwbGF0Zm9ybXMg dW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzKS4KKworICA2LiBJTlRFUk5BVElPTkFMIENIQVJB Q1RFUiBTRVRTCisKKyAgIFN1cHBvcnQgZm9yIHNldmVyYWwgbmV3IHNpbmdsZS1ieXRlIGNoYXJh Y3RlciBzZXRzIHdhcyBhZGRlZCBpbgorICAgQy1LZXJtaXQgNy4wLiBVbmljb2RlIC8gSVNPIDEw NjQ2IGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBidXQgaXMgYSBoaWdoCisgICBwcmlvcml0eSBmb3Ig Zm9ydGhjb21pbmcgcmVsZWFzZXMuCisKKyAgNi4wLiBJU08gODg1OS0xNSBMYXRpbiBBbHBoYWJl dCA5CisKKyAgIFRvIGFjY29tbW9kYXRlIHRoZSBFdXJvIGN1cnJlbmN5IHN5bWJvbCwgYW5kIHRv IGNvcnJlY3Qgc2V2ZXJhbCBvdGhlcgorICAgbG9uZ3N0YW5kaW5nIHByb2JsZW1zIHdpdGggSVNP IExhdGluIEFscGhhYmV0IDEsIElTTyA4ODU5LTE1IExhdGluCisgICBBbHBoYWJldCA5IHdhcyBp c3N1ZWQgaW4gTWF5IDE5OTguIEl0IGlzIHN1cHBvcnRlZCBieSBDLUtlcm1pdCA3LjAgYXMgYQor ICAgdHJhbnNmZXIgY2hhcmFjdGVyIHNldCwgYSBmaWxlIGNoYXJhY3RlciBzZXQsIGFuZCBhIHRl cm1pbmFsIGNoYXJhY3RlcgorICAgc2V0LiBUcmFuc2xhdGlvbnMgdGhhdCBwcmVzZXJ2ZSB0aGUg bmV3IGNoYXJhY3RlcnMgYXJlIGF2YWlsYWJsZQorICAgYmV0d2VlbiBMYXRpbi05IGFuZCBzZXZl cmFsIG90aGVyIHNldHMgaW5jbHVkaW5nOgorCisgIFBDIENvZGUgUGFnZSA4NTggICAgICAgICAo V2VzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMsIHNpbWlsYXIgdG8gQ1A4NTApCisgIFdpbmRvd3Mg Q29kZSBQYWdlIDEyNTIgICAoV2VzdGVybiBFdXJvcGVhbiBsYW5ndWFnZXMsIHNpbWlsYXIgdG8g TGF0aW4tMSkKKyAgV2luZG93cyBDb2RlIFBhZ2UgMTI1MCAgIChFYXN0ZXJuIEV1cm9wZWFuIGxh bmd1YWdlcywgc2ltaWxhciB0byBMYXRpbi0yKQorCisgICBUaGUgTGF0aW4tOSB0cmFuc2ZlciBj aGFyYWN0ZXIgc2V0IGFsc28gYWxsb3dzIGZvciB0aGUgT0UgZGlncmFwaAorICAgY2hhcmFjdGVy LCB1c2VkIHByaW1hcmlseSBpbiBGcmVuY2gsIHRvIGJlIHByZXNlcnZlZCBpbiB0cmFuc2ZlcnMK KyAgIGludm9sdmluZyB0aGUgREVDIE1DUyBvciBOZVhUIGNoYXJhY3RlciBzZXRzLgorCisgICBU aGUgRXVybyBjaGFyYWN0ZXIgaXMgYWxzbyBwcmVzZW50IGluIHRoZSBVbml2ZXJzYWwgQ2hhcmFj dGVyIFNldCwKKyAgIGRlc2NyaWJlZCBpbiBbNTQyXVNlY3Rpb24gNi42LgorCisgIDYuMS4gVGhl IEhQLVJvbWFuOCBDaGFyYWN0ZXIgU2V0CisKKyAgIFRoZSBIUC1Sb21hbjggY2hhcmFjdGVyIHNl dCBpcyBzdXBwb3J0ZWQgaW4gQy1LZXJtaXQgNi4wIGFuZCBsYXRlciBidXQKKyAgIHdhcyBvbWl0 dGVkIGZyb20gVGFibGUgVklJLTQgaW4gdGhlIDJuZCBFZGl0aW9uIG9mIFVzaW5nIEMtS2VybWl0 IGR1ZQorICAgdG8gbGFjayBvZiBzcGFjZS4gSXQgaXMgbGlzdGVkIGluIFs1NDNdQXBwZW5kaXgg SUlJLgorCisgIDYuMi4gR3JlZWsgQ2hhcmFjdGVyIFNldHMKKworICAgR3JlZWsgY2hhcmFjdGVy IHNldHMgd2VyZSBhZGRlZCBpbiA2LjE6CisKKyAgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCB7IENQ ODY5LCBFTE9UOTI3LCBHUkVFSy1JU08gfQorICBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCB7 IEdSRUVLLUlTTyB9CisKKyAgIEdSRUVLLUlTTyBpcyBJU08gODg1OS03LCB3aGljaCB0aGUgc2Ft ZSBhcyBFTE9UIDkyOC4KKworICAgVGhlIG5ldyBHcmVlayBjaGFyYWN0ZXIgc2V0cyBhcmUgbGlz dGVkIGluIFs1NDRdQXBwZW5kaXggSUlJLgorCisgIDYuMy4gQWRkaXRpb25hbCBMYXRpbi0yIENo YXJhY3RlciBTZXRzCisKKyAgIFRoZSBmb2xsb3dpbmcgaGF2ZSBiZWVuIGFkZGVkIGFzIEZJTEUg YW5kIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVRzOgorCisgICBNQVpPVklBLVBDCisgICAgICAgICAg QSBQQyBjb2RlIHBhZ2UgdXNlZCBpbiBQb2xhbmQsIGVxdWl2YWxlbnQgdG8gQ1A0MzcsIGJ1dCB3 aXRoIDE4CisgICAgICAgICAgc3Vic3RpdHV0aW9ucyBuZWVkZWQgZm9yIFBvbGlzaC4KKworICAg Q1AxMjUwCisgICAgICAgICAgVGhlIFdpbmRvd3MgTGF0aW4gMiBDb2RlIFBhZ2UuIEVxdWl2YWxl bnQgdG8gSVNPIDg4NTktMiwgYnV0CisgICAgICAgICAgd2l0aCBkaWZmZXJlbnQgZW5jb2Rpbmcu CisKKyAgNi40LiBBZGRpdGlvbmFsIEN5cmlsbGljIENoYXJhY3RlciBTZXRzCisKKyAgIFRoZSBm b2xsb3dpbmcgaGF2ZSBiZWVuIGFkZGVkIGFzIEZJTEUgYW5kIFRFUk1JTkFMIENIQVJBQ1RFUi1T RVRzOgorCisgICBCVUxHQVJJQS1QQworICAgICAgICAgIFRoaXMgaXMgdGhlIEN5cmlsbGljIFBD IGNvZGUgcGFnZSB1c2VkIGluIEJ1bGdhcmlhLCB3aGVyZSBpdCBpcworICAgICAgICAgIGNhbGxl ZCBDb2RlIFBhZ2UgODU2LiBJdCBpcyBhdHRyaWJ1dGVkIHRvIGEgY29tcGFueSBjYWxsZWQKKyAg ICAgICAgICBEQVRFQywgSW5jLCBidXQgQ1A4NTYgaXMgbm90IGEgcHJvcGVyIGRlc2lnbmF0aW9u LCBzaW5jZSBpdAorICAgICAgICAgIHJlZmVycyB0byBhIEhlYnJldyBDb2RlIFBhZ2UgKHNlZSB0 aGUgSUJNIFJlZ2lzdHJ5KS4KKworICAgQ1A4NTUKKyAgICAgICAgICBUaGlzIFBDIENvZGUgUGFn ZSBjb250YWlucyBhbGwgdGhlIEN5cmlsbGljIGxldHRlcnMgdGhhdCBhcmUKKyAgICAgICAgICBh bHNvIGluIElTTyA4ODU5LTUsIGFuZCBpcyB0aGVyZWZvcmUgdXNlZnVsIGZvciBub24tUnVzc2lh bgorICAgICAgICAgIEN5cmlsbGljIHRleHQgKFVrcmFpbmlhbiwgQmVsYXJ1c2lhbiwgZXRjKSwg dW5saWtlIENQODY2LCB3aGljaAorICAgICAgICAgIGhhcyBhIHNtYWxsZXIgcmVwZXJ0b2lyZSBv ZiBDeXJpbGxpYyBsZXR0ZXJzLgorCisgICBDUDEyNTEKKyAgICAgICAgICBUaGUgV2luZG93cyBD eXJpbGxpYyBDb2RlIFBhZ2UuIEVxdWl2YWxlbnQgdG8gQ1A4NTUsIGJ1dCB3aXRoCisgICAgICAg ICAgZGlmZmVyZW50IGVuY29kaW5nLgorCisgICBLT0k4UgorICAgICAgICAgIEFuIGV4dGVuc2lv biB0byAiT2xkIEtPSS04IiB0aGF0IGFkZHMgdXBwZXIgYW5kIGxvd2VyIGNhc2UKKyAgICAgICAg ICBDeXJpbGxpYyBsZXR0ZXIgSW8gKGxvb2tzIGxpa2UgUm9tYW4gRSB3aXRoIGRpYWVyZXNpcykg cGx1cyBhCisgICAgICAgICAgc2VsZWN0aW9uIG9mIGJveC1kcmF3aW5nIGNoYXJhY3RlcnMgdG8g Y29sdW1ucyA4IHRocm91Z2ggMTEsCisgICAgICAgICAgd2hpY2ggYXJlIHZhY2FudCBpbiBvcmln aW5hbCBPbGQgS09JLTguIEtPSTgtUiBpcyB1c2VkIGZvciB0aGUKKyAgICAgICAgICBSdXNzaWFu IGxhbmd1YWdlLiBJdCBpcyBzcGVjaWZpZWQgaW4gWzU0NV1SRkMgMTQ4OS4KKworICAgS09JOFUK KyAgICAgICAgICBBIHNpbWlsYXIgZXh0ZW5zaW9uIG9mIE9sZCBLT0ktOCwgYnV0IGZvciBVa3Jh aW5pYW4uIEl0IGlzCisgICAgICAgICAgc3BlY2lmaWVkIGluIFs1NDZdUkZDIDIzMTkuCisKKyAg Ni41LiBBdXRvbWF0aWMgQ2hhcmFjdGVyLVNldCBTd2l0Y2hpbmcKKworICAgUHJpb3IgdG8gdmVy c2lvbiA3LjAsIEMtS2VybWl0J3MgZmlsZSBjaGFyYWN0ZXItc2V0IGFsd2F5cyBoYWQgdG8gYmUK KyAgIHNldCBleHBsaWNpdGx5LiBJbiA3LjAgYW5kIGxhdGVyLCBpdCBpcyBzZXQgYXV0b21hdGlj YWxseSB3aGVuOgorCisgICAgMS4gVGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgKGFzIGl0IGlzIHVu bGVzcyB5b3UgZGlzYWJsZSBpdCkuCisgICAgMi4gQW4gaW5jb21pbmcgdGV4dC1tb2RlIHRyYW5z ZmVyIGluY2x1ZGVzIGEgdHJhbnNmZXItY2hhcmFjdGVyLXNldAorICAgICAgIGFubm91bmNlciBh bmQgeW91IGhhdmUgbm90IHByZXZpb3VzbHkgZ2l2ZW4gYSBTRVQgRklMRQorICAgICAgIENIQVJB Q1RFUi1TRVQgY29tbWFuZC4gSW4gdGhpcyBjYXNlLCBDLUtlcm1pdCBzd2l0Y2hlcyB0byBhbgor ICAgICAgIGFwcHJvcHJpYXRlIGZpbGUgY2hhcmFjdGVyIHNldC4gRm9yIGV4YW1wbGUsIG9uIGFu IEhQLVVYCisgICAgICAgd29ya3N0YXRpb24sIGFuIGluY29taW5nIExhdGluLTEgZmlsZSBhdXRv bWF0aWNhbGx5IHNlbGVjdHMKKyAgICAgICBIUC1Sb21hbjggZm9yIHRoZSBsb2NhbCBjb3B5IG9m IHRoZSBmaWxlOyBpbiBEYXRhIEdlbmVyYWwgQU9TL1ZTLAorICAgICAgIGl0IHdvdWxkIHNlbGVj dCBERyBJbnRlcm5hdGlvbmFsLgorICAgIDMuIFlvdSBnaXZlIGEgU0VUIFRSQU5TRkVSIENIQVJB Q1RFUi1TRVQgY29tbWFuZCB3aXRob3V0IGhhdmluZworICAgICAgIHByZXZpb3VzbHkgc3BlY2lm aWVkIGEgRklMRSBDSEFSQUNURVItU0VULiBBbiBhcHByb3ByaWF0ZSBmaWxlCisgICAgICAgY2hh cmFjdGVyLXNldCBpcyBjaG9zZW4gYXV0b21hdGljYWxseS4KKworICAgSW4gYWRkaXRpb24sIHdo ZW4geW91IGdpdmUgYSBTRVQgRklMRSBDSEFSQUNURVItU0VUIGNvbW1hbmQsIHRoZQorICAgYXBw cm9wcmlhdGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBpcyBhdXRvbWF0aWNhbGx5IGNob3Nlbiwg dG8gYmUgdXNlZAorICAgd2hlbiB5b3UgYXJlIHNlbmRpbmcgZmlsZXMgKGJ1dCB0aGlzIGRvZXMg bm90IG92ZXJyaWRlIHRoZSBvbmUKKyAgIGFubm91bmNlZCBieSB0aGUgc2VuZGVyIHdoZW4geW91 IGFyZSByZWNlaXZpbmcgZmlsZXMpLgorCisgICBZb3UgbWlnaHQgbm90IGFncmVlIGFib3V0IHdo YXQgaXMgImFwcHJvcHJpYXRlIiwgc28gb2YgY291cnNlIHlvdSBjYW4KKyAgIGRpc2FibGUgb3Ig Y2hhbmdlIGFsbCBvZiB0aGUgYWJvdmUgYWN0aW9ucy4KKworICAgWW91IGNhbiBkaXNhYmxlIChv ciByZS1lbmFibGUpIHRoZSBuZXcgYXV0b21hdGljIGNoYXJhY3Rlci1zZXQKKyAgIHN3aXRjaGlu ZyBmZWF0dXJlIGluIGVhY2ggZGlyZWN0aW9uIHNlcGFyYXRlbHk6CisKKyAgIFNFVCBSRUNFSVZF IENIQVJBQ1RFUi1TRVQtU0VMRUNUSU9OIHsgQVVUT01BVElDLCBNQU5VQUwgfQorICAgICAgICAg IEFVVE9NQVRJQyBpcyB0aGUgZGVmYXVsdCwgY2F1c2luZyB0aGUgYmVoYXZpb3IgZGVzY3JpYmVk IGFib3ZlCisgICAgICAgICAgd2hlbiBhbiBpbmNvbWluZyBmaWxlIGFycml2ZXMuIENob29zZSBN QU5VQUwgdG8gZGVmZWF0IHRoaXMKKyAgICAgICAgICBiZWhhdmlvciBhbmQgZm9yY2UgeW91ciBj dXJyZW50IEZJTEUgQ0hBUkFDVEVSLVNFVCBzZXR0aW5nIHRvIGJlCisgICAgICAgICAgdXNlZCwg bm8gbWF0dGVyIHdoYXQgaXQgaXMuIE5vdGUgdGhhdCBTRVQgUkVDRUlWRSBDSEFSQUNURVItU0VU CisgICAgICAgICAgTUFOVUFMIGRvZXMgbm90IGRpc2FibGUgcmVjb2duaXRpb24gb2YgdGhlIGlu Y29taW5nIHRyYW5zZmVyCisgICAgICAgICAgY2hhcmFjdGVyLXNldCBhbm5vdW5jZXIsIGFuZCB0 cmFuc2xhdGlvbiBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgY2hhcmFjdGVyLXNl dCB0byB5b3VyIGN1cnJlbnQgZmlsZSBjaGFyYWN0ZXItc2V0LiBUbyBkaXNhYmxlCisgICAgICAg ICAgdGhhdCwgdXNlIFNFVCBBVFRSSUJVVEUgQ0hBUkFDVEVSLVNFVCBPRkYuCisKKyAgIFNFVCBT RU5EIENIQVJBQ1RFUi1TRVQtU0VMRUNUSU9OIHsgQVVUT01BVElDLCBNQU5VQUwgfQorICAgICAg ICAgIEFnYWluIEFVVE9NQVRJQyBpcyB0aGUgZGVmYXVsdCwgY2F1c2luZyB0aGUgYmVoYXZpb3Ig ZGVzY3JpYmVkCisgICAgICAgICAgYWJvdmUgd2hlbiB5b3UgZ2l2ZSBhIFNFVCB7IEZJTEUsIFRS QU5TRkVSIH0gQ0hBUkFDVEVSLVNFVAorICAgICAgICAgIGNvbW1hbmQuIFVzZSBNQU5VQUwgdG8g YWxsb3cgeW91IHRvIHNwZWNpZnkgdGhlIHRyYW5zZmVyIGFuZAorICAgICAgICAgIGZpbGUgY2hh cmFjdGVyLXNldHMgaW5kZXBlbmRlbnRseS4KKworICAgU0hPVyBDSEFSQUNURVItU0VUUworICAg ICAgICAgIFRlbGxzIHNldHRpbmdzIG9mIHsgU0VORCwgUkVDRUlWRSB9IENIQVJBQ1RFUi1TRVQt U0VMRUNUSU9OLgorCisgICBOb3JtYWxseSwgaG93ZXZlciwgaXQgaXMgbW9yZSBjb252ZW5pZW50 IHRvIGxlYXZlIGF1dG9tYXRpYyBzd2l0Y2hpbmcKKyAgIGFjdGl2ZSwgYW5kIGNoYW5nZSBhbnkg YXNzb2NpYXRpb25zIHRoYXQgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgeW91cgorICAgYXBwbGlj YXRpb24sIGFyZWEsIG9yIGNvdW50cnkuIFRoZSBjb21tYW5kcyBhcmU6CisKKyAgIFNIT1cgQVNT T0NJQVRJT05TCisgICAgICAgICAgVGhpcyBjb21tYW5kIGxpc3RzIGFsbCB0aGUgYXNzb2NpYXRp b25zIGluIGVhY2ggZGlyZWN0aW9uOiBmb3IKKyAgICAgICAgICBlYWNoIHBvc3NpYmxlIHRyYW5z ZmVyIGNoYXJhY3Rlci1zZXQsIGl0IGxpc3RzIHRoZSBhc3NvY2lhdGVkCisgICAgICAgICAgZmls ZSBjaGFyYWN0ZXItc2V0LCBhbmQgdmljZSB2ZXJzYS4gVGhlc2UgYXJlIHR3byBzZXBhcmF0ZSBh bmQKKyAgICAgICAgICBpbmRlcGVuZGVudCBsaXN0cy4KKworICAgQVNTT0NJQVRFIFRSQU5TRkVS LUNIQVJBQ1RFUi1TRVQgbmFtZTEgWyBuYW1lMiBdCisgICAgICAgICAgQ2hhbmdlcyB0aGUgYXNz b2NpYXRpb24gZm9yIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IG5hbWUxIHRvCisgICAgICAg ICAgYmUgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCBuYW1lMi4gSWYgbmFtZTIgaXMgb21pdHRlZCwg YXV0b21hdGljCisgICAgICAgICAgc3dpdGNoaW5nIGlzIGRpc2FibGVkIGZvciB0aGlzIHRyYW5z ZmVyIGNoYXJhY3Rlci1zZXQgb25seS4KKworICAgQVNTT0NJQVRFIEZJTEUtQ0hBUkFDVEVSLVNF VCBuYW1lMSBbIG5hbWUyIF0KKyAgICAgICAgICBDaGFuZ2VzIHRoZSBhc3NvY2lhdGlvbiBmb3Ig dGhlIGZpbGUgY2hhcmFjdGVyLXNldCBuYW1lMSB0byBiZQorICAgICAgICAgIHRoZSB0cmFuc2Zl ciBjaGFyYWN0ZXItc2V0IG5hbWUyLiBJZiBuYW1lMiBpcyBvbWl0dGVkLCBhdXRvbWF0aWMKKyAg ICAgICAgICBzd2l0Y2hpbmcgaXMgZGlzYWJsZWQgZm9yIHRoaXMgZmlsZSBjaGFyYWN0ZXItc2V0 IG9ubHkuCisKKyAgNi42LiBVTklDT0RFCisKKyAgIEMtS2VybWl0IDcuMCBhZGRzIHN1cHBvcnQg Zm9yIFVuaWNvZGUsIHRoZSBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldCwKKyAgIGZvcjoKKworICAg ICAqIEZpbGUgVHJhbnNmZXIgKFNFTkQsIFJFQ0VJVkUsIEdFVCwgZXRjKQorICAgICAqIFRlcm1p bmFsIGNvbm5lY3Rpb24gKENPTk5FQ1QpCisgICAgICogVW5ndWFyZGVkIGZpbGUgY2FwdHVyZSAo TE9HIFNFU1NJT04pCisgICAgICogVW5ndWFyZGVkIGZpbGUgdHJhbnNtaXNzaW9uIChUUkFOU01J VCkKKyAgICAgKiBMb2NhbCBmaWxlIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbiAoVFJBTlNMQVRF KQorCisgICBDLUtlcm1pdCBpcyBub3QsIGhvd2V2ZXIsIGEgIlVuaWNvZGUgYXBwbGljYXRpb24i IGluIHRoZSBzZW5zZSB0aGF0IGl0cworICAgY29tbWFuZHMsIG1lc3NhZ2VzLCBvciB1c2VyIGlu dGVyZmFjZSBhcmUgVW5pY29kZS4gUmF0aGVyLCBpdCBpcworICAgIlVuaWNvZGUgYXdhcmUiIGlu IGl0cyBhYmlsaXR5IHRvIGhhbmRsZSBhbmQgY29udmVydCBVbmljb2RlIHRleHQgaW4KKyAgIHRo ZSBjb3Vyc2Ugb2YgZmlsZSB0cmFuc2ZlciBhbmQgdGVybWluYWwgY29ubmVjdGlvbiwgYW5kIHlv dSBjYW4gYWxzbworICAgdXNlIEtlcm1pdCB0byBjb252ZXJ0IGxvY2FsIGZpbGVzIGJldHdlZW4g VW5pY29kZSBhbmQgb3RoZXIgY2hhcmFjdGVyCisgICBzZXRzLiBUTEEnczoKKworICBCTVAgLSBC YXNlIE11bHRpbGluZ3VhbCBQbGFuZQorICBCT00gLSBCeXRlIE9yZGVyIE1hcmsKKyAgQ0pLIC0g Q2hpbmVzZSwgSmFwYW5lc2UsIGFuZCBLb3JlYW4KKyAgSVNPIC0gSW50ZXJuYXRpb25hbCBTdGFu ZGFyZHMgT3JnYW5pemF0aW9uCisgIFRMQSAtIFRocmVlLUxldHRlciBBY3JvbnltCisgIFVDUyAt IFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0CisgIFVURiAtIFVDUyBUcmFuc2Zvcm1hdGlvbiBGb3Jt YXQKKworICAgVW5pY29kZSBhbmQgSVNPIDEwNjQ2IGFyZSB0aGUgY29vcmRpbmF0ZWQgYW5kIGNv bXBhdGlibGUgY29ycG9yYXRlIGFuZAorICAgaW50ZXJuYXRpb25hbCBzdGFuZGFyZHMgZm9yIHRo ZSBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldCAoVUNTKS4gVW5saWtlCisgICBzaW5nbGUtYnl0ZSBh bmQgZXZlbiBtb3N0IG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0cywgdGhlIFVDUyBjYW4KKyAgIHJl cHJlc2VudCBhbGwgY2hhcmFjdGVycyBpbiBldmVyeSBleGlzdGluZyB3cml0aW5nIHN5c3RlbS4g QSBmbGF0CisgICBwbGFpbi10ZXh0IGZpbGUgZW5jb2RlZCBpbiBzb21lIGZvcm0gb2YgVUNTIGNh biBjb250YWluIGFueSBtaXh0dXJlIG9mCisgICBFbmdsaXNoLCBTcGFuaXNoLCBJdGFsaWFuLCBH ZXJtYW4sIEhlYnJldywgQXJhYmljLCBHcmVlaywgUnVzc2lhbiwKKyAgIEFybWVuaWFuLCBHZW9y Z2lhbiwgSmFwYW5lc2UsIENoaW5lc2UsIEtvcmVhbiwgVmlldG5hbWVzZSwgVGliZXRhbiwKKyAg IEhpbmRpLCBCZW5nYWxpLCBUYW1pbCwgVGhhaSwgRXRoaW9waWMsIGFuZCBzbyBvbiwgcGx1cyBz Y2llbnRpZmljIGFuZAorICAgbWF0aGVtYXRpY2FsIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIHRleHRz IGluIFJ1bmVzLCBPZ2hhbSwgR2xhZ29saXRpYywKKyAgIGFuZCBvdGhlciBoaXN0b3JpYyBzY3Jp cHRzLgorCisgICBUaGUgVUNTIGFscmVhZHkgY292ZXJzIHRoZXNlIHNjcmlwdHMgYW5kIG1hbnkg bW9yZSwgYnV0IGl0J3MgYW4KKyAgIGV2b2x2aW5nIHN0YW5kYXJkIHdpdGggZWZmb3J0cyB1bmRl cndheSB0byBhY2NvbW1vZGF0ZSBldmVuIG1vcmUKKyAgIGxhbmd1YWdlcyBhbmQgd3JpdGluZyBz eXN0ZW1zLiBTdXBwb3J0IGlzIGdyb3dpbmcgZm9yIG5hdGl2ZSBVQ1MgdXNlIG9uCisgICBtYW55 IHBsYXRmb3JtcyBhbmQgaW4gbWFueSBhcHBsaWNhdGlvbnMuIFRoZSBnb2FsIG9mIHRoZSBmcmFt ZXJzIG9mIHRoZQorICAgVUNTIGlzIGZvciBpdCB0byByZXBsYWNlIEFTQ0lJLCB0aGUgSVNPIExh dGluIEFscGhhYmV0cywgSVNDSUksIFZJU0NJSSwKKyAgIHRoZSBDaGluZXNlLCBKYXBhbmVzZSwg YW5kIEtvcmVhbiAoQ0pLKSBtdWx0aWJ5dGUgc2V0cywgZXRjLCBhcyB3ZWxsIGFzCisgICB0aGUg bWFueSBwcml2YXRlIGNoYXJhY3RlciBzZXRzIGluIHVzZSB0b2RheSwgaW4gb3RoZXIgd29yZHMg dG8gYmVjb21lCisgICAqdGhlKiBVbml2ZXJzYWwgQ2hhcmFjdGVyIFNldC4KKworICAgVW50aWwg dGhhdCB0aW1lLCBob3dldmVyLCBjb252ZXJzaW9ucyBiZXR3ZWVuIGV4aXN0aW5nIHNldHMgYW5k IHRoZSBVQ1MKKyAgIHdpbGwgYmUgbmVjZXNzYXJ5IHdoZW4gbW92aW5nIHRleHQgYmV0d2VlbiBw bGF0Zm9ybXMgYW5kIGFwcGxpY2F0aW9ucy4KKyAgIE5vdyBLZXJtaXQgY2FuIGhlbHAuCisKKyAg ICA2LjYuMS4gT3ZlcnZpZXcgb2YgVW5pY29kZQorCisgICBGb3IgYSBtb3JlIGNvbXBsZXRlIHBp Y3R1cmUsIHBsZWFzZSB2aXNpdDoKKworICBbNTQ3XWh0dHA6Ly93d3cudW5pY29kZS5vcmcvCisK KyAgIGFuZCBhY2Nlc3MgdGhlIHZhcmlvdXMgb25saW5lIGludHJvZHVjdGlvbnMsIEZBUXMsIHRl Y2huaWNhbCByZXBvcnRzLAorICAgYW5kIG90aGVyIGluZm9ybWF0aW9uLiBGb3IgZ3JlYXRlciBk ZXB0aCwgb3JkZXIgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mCisgICB0aGUgcHVibGlzaGVkIFVuaWNv ZGUgU3RhbmRhcmQuIFRoZSBmb2xsb3dpbmcgb3ZlcnZpZXcgY29udGFpbnMgYSBncmVhdAorICAg bWFueSBvdmVyc2ltcGxpZmljYXRpb25zIGFuZCBwZXJoYXBzIGFuIG9waW5pb24gb3IgdHdvLgor CisgICBBdCBwcmVzZW50LCB0aGUgVUNTIGlzIGEgMTYtYml0ICgyLWJ5dGUpIGNoYXJhY3RlciBz ZXQsIGJ1dCB3aXRoCisgICBwcm92aXNpb25zIHRvIGdyb3cgdG8gYSA0LWJ5dGUgc2V0LiBVQ1Mt MiByZWZlcnMgdG8gdGhlIHR3by1ieXRlIHNldCwKKyAgIGFsc28gY2FsbGVkIHRoZSBCYXNlIE11 bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIKKyAgIGhhcyAx NiBiaXRzLCBhbmQgdGhlcmVmb3JlIHRoZXJlIGFyZSAyXjE2ID0gNjU1MzYgcG9zc2libGUgY2hh cmFjdGVycy4KKyAgIFRoZSBmaXJzdCAxMjggY2hhcmFjdGVycyBhcmUgdGhlIHNhbWUgYXMgVVMg QVNDSUkgKEMwIGNvbnRyb2wKKyAgIGNoYXJhY3RlcnMgYW5kIERFTCBpbmNsdWRlZCksIHRoZSBu ZXh0IDMyIGFyZSB0aGUgQzEgY29udHJvbCBjaGFyYWN0ZXJzCisgICBvZiBJU08gNjQyOSwgYW5k IHRoZSBuZXh0IDk2IGFyZSB0aGUgUmlnaHQgSGFsZiBvZiBJU08gODg1OS0xIExhdGluCisgICBB bHBoYWJldCAxLiBUaGUgcmVtYWluaW5nIHRlbnMgb2YgdGhvdXNhbmRzIG9mIGNoYXJhY3RlcnMg YXJlIGFycmFuZ2VkCisgICBuZXdseSBmb3IgdGhlIFVDUywgdXN1YWxseSAoYnV0IG5vdCBhbHdh eXMpIGluIHNlY3Rpb25zIGNvcnJlc3BvbmRpbmcKKyAgIHRvIGV4aXN0aW5nIHN0YW5kYXJkcywg c3VjaCBhcyBJU08gTGF0aW4vQ3lyaWxsaWMsIG9mdGVuIHBsdXMKKyAgIGFkZGl0aW9uYWwgY2hh cmFjdGVycyBub3QgYXBwZWFyaW5nIGluIHRoZSBleGlzdGluZyBzdGFuZGFyZHMgZHVlIHRvCisg ICBsYWNrIG9mIHNwYWNlIChvciBvdGhlciByZWFzb25zKS4KKworICAgSVNPIDEwNjQ2IGFsbG93 cyBmb3IgYWRkaXRpb25hbCBwbGFuZXMsIGUuZy4gZm9yIEVneXB0aWFuIGhpZXJvZ2x5cGhpY3MK KyAgIG9yIGFuY2llbnQgKG9yIG90aGVyIGVzb3RlcmljKSBDSksgY2hhcmFjdGVycywgYnV0IHRo ZXNlIHBsYW5lcyBhcmUgbm90CisgICB5ZXQgZGVmaW5lZCBhbmQgc28gd2Ugd2lsbCBzYXkgbm90 aGluZyBtb3JlIGFib3V0IHRoZW0gaGVyZSwgZXhjZXB0CisgICB0aGF0IHRoZWlyIHVzZSB3aWxs IHJlcXVpcmUgdGhlIDQtYnl0ZSBmb3JtIG9mIFVDUywgY2FsbGVkIFVDUy00LCBpbgorICAgc29t ZSBmb3JtIChtb3JlIGFib3V0ICJmb3JtcyIgaW4gWzU0OF1TZWN0aW9uIDYuNi4yKS4KKworICAg VW5pY29kZSBhbmQgSVNPIDEwNjQ2IGFyZSBjb25zdGFudGx5IHVuZGVyIHJldmlzaW9uLCBtYWlu bHkgdG8gYWRkIG5ldworICAgY2hhcmFjdGVycy4gVGhlIFVuaWNvZGUgcmV2aXNpb24gaXMgZGVu b3RlZCBieSBhIHZlcnNpb24gbnVtYmVyLCBzdWNoCisgICBhcyAxLjAsIDEuMSwgMi4wLCAzLjAu IFRoZSBJU08gMTA2NDYgc3RhbmRhcmQgcmV2aXNpb24gaXMgaWRlbnRpZmllZCBieQorICAgRWRp dGlvbiAoc3VjaCBhcyBJU08gMTA2NDYtMSAxOTkzKSwgcGx1cyByZWZlcmVuY2UgdG8gYW55IGFt ZW5kbWVudHMuCisgICBUaGUgZmlyc3QgdmVyc2lvbnMgb2YgdGhlc2Ugc3RhbmRhcmRzIGluY2x1 ZGVkIGVuY29kaW5ncyBmb3IgS29yZWFuCisgICBIYW5ndWwgc3lsbGFibGVzIChKYW1vcyk7IHRo ZXNlIGVuY29kaW5ncyB3ZXJlIGNoYW5nZWQgaW4gdmVyc2lvbiAxLjEKKyAgIG9mIFVuaWNvZGUg YW5kIGJ5IEFtZW5kbWVudCA1IHRvIElTTyAxMDY0Ni0xLiBUaGUgVW5pY29kZSBUZWNobmljYWwK KyAgIENvbW1pdHRlZSBhbmQgdGhlIElTTyBhY2tub3dsZWRnZSB0aGF0IHRoaXMgd2FzIGEgYmFk IHRoaW5nIHRvIGRvLCBhbmQKKyAgIHByb21pc2UgbmV2ZXIgY2hhbmdlIGVuY29kaW5ncyBvciBj aGFyYWN0ZXIgbmFtZXMgYWdhaW4sIHNpbmNlIHRoaXMKKyAgIHBvc2VzIHNlcmlvdXMgcHJvYmxl bXMgZm9yIGNvbmZvcm1hbmNlIGFuZCBkYXRhIGludGVyY2hhbmdlLgorCisgICBBIFVDUy0yIHZh bHVlIGlzIGN1c3RvbWFyaWx5IHdyaXR0ZW4gbGlrZSB0aGlzOgorCisgIFUreHh4eAorCisgICB3 aGVyZSAieHh4eCIgcmVwcmVzZW50cyBmb3VyIGhleGFkZWNpbWFsIGRpZ2l0cywgMC05IGFuZCBB LUYuIEZvcgorICAgZXhhbXBsZSwgVSswMDQxIGlzICJBIiwgVSswMEMxIGlzIEEtYWN1dGUsIFUr MDQyRiBpcyB1cHBlcmNhc2UgQ3lyaWxsaWMKKyAgICJZYSIsIFUrRkI0RiBpcyBIZWJyZXcgTGln YXR1cmUgQWxlZiBMYW1lZCwgYW5kIFUrRkZGRCBpcyB0aGUgc3BlY2lhbAorICAgY2hhcmFjdGVy IHRoYXQgbWVhbnMgIm5vdCBhIGNoYXJhY3RlciIuCisKKyAgIE1vc3QgY2hhcmFjdGVycyBmcm9t IHdpZGVseS11c2VkIGFscGhhYmV0aWMgd3JpdGluZyBzeXN0ZW1zIHN1Y2ggYXMgdGhlCisgICBX ZXN0IEV1cm9wZWFuIG9uZXMsIEN5cmlsbGljLCBHcmVlaywgSGVicmV3LCBWaWV0bmFtZXNlLCBl dGMsIGFyZQorICAgYXZhaWxhYmxlIGluICJwcmVjb21wb3NlZCIgZm9ybTsgZm9yIGV4YW1wbGUg VXBwZXJjYXNlIExhdGluIExldHRlciBBCisgICB3aXRoIEFjdXRlIEFjY2VudCBpcyBhIHNpbmds ZSBjaGFyYWN0ZXIgKGFzIGl0IGlzIGluIExhdGluLTEpLiBIb3dldmVyLAorICAgdGhlIFVDUyBh bHNvIHBlcm1pdHMgY29tcG9zaXRpb24gb2YgYSBiYXNlIGNoYXJhY3RlciB3aXRoIG9uZSBvciBt b3JlCisgICBub25zcGFjaW5nIGRpYWNyaXRpY3MuIFRoaXMgbWVhbnMgdGhlIHNhbWUgY2hhcmFj dGVyIGNhbiBiZSByZXByZXNlbnRlZAorICAgaW4gbW9yZSB0aGFuIG9uZSB3YXksIHdoaWNoIGNh biBwcmVzZW50IHByb2JsZW1zIGluIG1hbnkgYXBwbGljYXRpb24KKyAgIGFyZWFzLCBpbmNsdWRp bmcgdHJhbnNmZXIgYW5kIGNoYXJhY3Rlci1zZXQgY29udmVyc2lvbiBvZiB0ZXh0LgorCisgICBD b252ZXJzaW9uIGZyb20gQVNDSUkgb3IgTGF0aW4tMSB0byBVQ1MtMiB0ZXh0IGlzICJ0cml2aWFs Ijogc2ltcGx5CisgICBpbnNlcnQgYSBOVUwgKDApIGJ5dGUgYmVmb3JlIGVhY2ggQVNDSUkgb3Ig TGF0aW4tMSBieXRlLiBDb252ZXJ0aW5nIGluCisgICB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24gKHBy b3ZpZGVkIHRoZSBVQ1MtMiBmaWxlIGNvbnRhaW5zIG9ubHkgVSswMDAwIHRvCisgICBVKzAwRkYp IGlzIGVxdWFsbHkgc2ltcGxlIChpZiB3ZSBpZ25vcmUgdGhlIGlzc3VlIG9mIGNvbXBvc2l0aW9u KToKKyAgIHJlbW92ZSBldmVyeSBzZWNvbmQgKE5VTCkgYnl0ZS4gQ29udmVyc2lvbiBvZiBvdGhl ciBjaGFyYWN0ZXIgc2V0cyB0bworICAgYW5kIGZyb20gVUNTLCBob3dldmVyLCByZXF1aXJlcyB0 YWJsZXMgb3IgYWxnb3JpdGhtcyBzcGVjaWZpYyB0byBlYWNoCisgICBzZXQuIE5ldmVydGhlbGVz cywgdGhlIHJlbGF0aXZlbHkgdHJhbnNwYXJlbnQgdXB3YXJkcyBjb21wYXRpYmlsaXR5CisgICBm cm9tIEFTQ0lJIGFuZCBMYXRpbi0xLCBpbiB3aGljaCBhIHZlcnkgbGFyZ2Ugc2hhcmUgb2YgdGhl IHdvcmxkJ3MKKyAgIHRleHR1YWwgZGF0YSBpcyBlbmNvZGVkLCBnaXZlcyB0aGUgVUNTIGFuIGVu dHJlZSBvbnRvIGV4aXN0aW5nCisgICBwbGF0Zm9ybXMuCisKKyAgIEJ1dCB0aGUgMi1ieXRlIGZv cm1hdCBhbmQgdGhlIHByZXBvbmRlcmFuY2Ugb2YgTlVMIGFuZCBvdGhlciBjb250cm9sCisgICBi eXRlcyBpbiBVQ1MtMiB0ZXh0IHBvc2UgcHJvYmxlbXMgZm9yIGN1cnJlbnQgYXBwbGljYXRpb25z IGFuZAorICAgdHJhbnNtaXNzaW9uIG1ldGhvZHMuIEFuZCB0byBtYWtlIG1hdHRlcnMgd29yc2Us IGRpZmZlcmVudCBoYXJkd2FyZQorICAgcGxhdGZvcm1zIHN0b3JlIFVDUy0yIGNoYXJhY3RlcnMg aW4gZGlmZmVyZW50IGJ5dGUgb3JkZXIuIFRodXMgYSBVQ1MtMgorICAgZmlsZSB0cmFuc2ZlcnJl ZCBieSBGVFAgKG9yIGFjY2Vzc2VkIHZpYSBORlMsIGV0YykgYmV0d2VlbiB0d28KKyAgIGNvbXB1 dGVycyB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUgbWlnaHQgaGF2ZSBpdHMgYnl0ZXMgaW4g dGhlIHdyb25nCisgICBvcmRlciAob3Igd29yc2U7IHNlZSBbNTQ5XVNlY3Rpb24gNi42LjUuMSAp LgorCisgICAgNi42LjIuIFVDUyBCeXRlIE9yZGVyCisKKyAgIENvbnNpZGVyIHRoZSBudW1iZXIg MS4gSW4gYW4gOC1iaXQgYnl0ZSwgdGhpcyB3b3VsZCBiZSByZXByZXNlbnRlZCBieQorICAgdGhl IGZvbGxvd2luZyBzZXJpZXMgb2YgMC0gYW5kIDEtYml0czoKKworICArLS0tLS0tLS0tLS0tLS0t LS0rCisgIHwgMCAwIDAgMCAwIDAgMCAxIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tKworCisgICBU aGVyZWZvcmUgaW4gYSAxNi1iaXQgIndvcmQiIHRoZSByZXByZXNlbnRhdGlvbiBtaWdodCBiZToK KworICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMCAwIDAgMCAw IDAgMCAwIHwgMCAwIDAgMCAwIDAgMCAxIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tKworCisgICBOb3cgY29uc2lkZXIgdGhlIG51bWJlciAyNTYsIHdoaWNoIGlzIDIg dG8gdGhlIDh0aCBwb3dlci4gVGhlIGJpbmFyeQorICAgcmVwcmVzZW50YXRpb24gaXMgMTAwMDAw MDAwICgxIGZvbGxvd2VkIGJ5IDggemVyb3MpLiAyNTYgd291bGQgZ28gaW50bworICAgYSAxNi1i aXQgd29yZCBsaWtlIHRoaXM6CisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tKworICB8IDAgMCAwIDAgMCAwIDAgMSB8IDAgMCAwIDAgMCAwIDAgMCB8CisgICstLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKKworICAgV2hlbiBhIGNvbXB1dGVyIHdvcmtz IHRoaXMgd2F5LCBpdCBpcyBzYWlkIHRvIGJlIEJpZyBFbmRpYW4sIG1lYW5pbmcgaXQKKyAgIHB1 dHMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgKGJpZ2dlc3QpIGJ5dGUgZmlyc3QgKG9uIHRoZSAibGVm dCIpIGluIGEKKyAgIDE2LWJpdCB3b3JkLCBhbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUg c2Vjb25kIChvbiB0aGUgcmlnaHQpLgorCisgICBIb3dldmVyLCBzb21lIG90aGVyIGNvbXB1dGVy cyBoYXZlIHRoZSBvcHBvc2l0ZSBhcnJhbmdlbWVudCwgY2FsbGVkCisgICBMaXR0bGUgRW5kaWFu LCBpbiB3aGljaCAxIGlzOgorCisgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LSsKKyAgfCAwIDAgMCAwIDAgMCAwIDEgfCAwIDAgMCAwIDAgMCAwIDAgfAorICArLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIGFuZCAyNTYgaXM6CisKKyAgKy0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworICB8IDAgMCAwIDAgMCAwIDAgMCB8IDAg MCAwIDAgMCAwIDAgMSB8CisgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsK KworICAgQ29tcHV0ZXJzIHN1Y2ggYXMgU3BhcmMsIE1JUFMsIFBBLVJJU0MsIGFuZCBQb3dlclBD IGFyZSBCaWcgRW5kaWFuLAorICAgd2hlcmVhcyB0aGUgUEMgYW5kIHRoZSBBbHBoYSBhcmUgTGl0 dGxlIEVuZGlhbi4gRW5kaWFubmVzcyBoYXMgbmV2ZXIKKyAgIGJlZW4gYW4gaXNzdWUgd2l0aCA3 LSBvciA4LWJpdCBjaGFyYWN0ZXJzLCBidXQgaXQgaXMgd2l0aCBVQ1MKKyAgIGNoYXJhY3RlcnMu IEl0IGNhbiBiZSBhIHRyaWNreSBidXNpbmVzcyB0byBzaGFyZSBvciB0cmFuc2ZlciBhIFVDUy0y CisgICBmaWxlIGJldHdlZW4gdHdvIGRpZmZlcmVudCBraW5kcyBvZiBjb21wdXRlcnMuCisKKyAg IFRvIGFsbGV2aWF0ZSAoYnV0IG5vdCBlbnRpcmVseSBzb2x2ZSkgdGhlIHByb2JsZW0sIFVDUy0y IGZpbGVzIGFyZQorICAgc3VwcG9zZWQgdG8gYmVnaW4gd2l0aCB0aGUgVW5pY29kZSBjaGFyYWN0 ZXIgVStGRUZGLCBaZXJvLVdpZHRoCisgICBOby1CcmVhayBTcGFjZSAoWldOQlMpLiBUaGlzIGlz IGEga2luZCBvZiAibm8tb3AiIChub3RlOiBhbnkgc3VjaAorICAgYXNzZXJ0aW9uIG11c3Qgbm9y bWFsbHkgYmUgcXVhbGlmaWVkIHdpdGggbWFueSAiYnV0IGlmcyIgYW5kICJleGNlcHRzIgorICAg d2hpY2ggYXJlIG9taXR0ZWQgaGVyZSBpbiB0aGUgaW50ZXJlc3Qgb2YgYnJldml0eSkuIElmIHRo ZSBieXRlcyBhcmUKKyAgIHJldmVyc2VkIHRoZSBaV05CUyBiZWNvbWVzIFUrRkZGRSwgd2hpY2gg aXMgbm90IChhbmQgbmV2ZXIgd2lsbCBiZSkgYQorICAgZGVmaW5lZCBVQ1MgY2hhcmFjdGVyLiBV K0ZFRkYgYXQgdGhlIGJlZ2lubmluZyBvZiBhIFVDUyBmaWxlIGlzCisgICB0aGVyZWZvcmUgY2Fs bGVkIGEgQnl0ZSBPcmRlciBNYXJrLCBvciBCT00uCisKKyAgIEFueSBhcHBsaWNhdGlvbiB0aGF0 IGNyZWF0ZXMgYSBVQ1MtMiAob3IgVVRGLTE2LCBvciBVQ1MtNCkgZmlsZSBzaG91bGQKKyAgIGlu Y2x1ZGUgYSBCT00sIGFuZCBhbnkgYXBwbGljYXRpb24gdGhhdCByZWFkcyBvbmUgc2hvdWxkIHRl c3QgZm9yIGEKKyAgIEJPTSwgYW5kIGlmIG9uZSBpcyBmb3VuZCwgaW5mZXIgdGhlIGJ5dGUgb3Jk ZXIgZnJvbSBpdC4gVGhpcyBpcyBhCisgICBjb252ZW50aW9uLCBob3dldmVyIC0tIG5vdCBhIHN0 YW5kYXJkIG9yIGEgcmVxdWlyZW1lbnQgLS0gYW5kCisgICBhcHBsaWNhdGlvbnMgdmFyeSBpbiB0 aGVpciBhYmlsaXR5IHRvIGhhbmRsZSBCT01zIGFuZCAiYmFja3dhcmRzIiBVQ1MtMgorICAgZmls ZXMuCisKKyAgIE5vdGUgdGhhdCBhIEJPTSBpcyB1c2VmdWwgb25seSBhdCB0aGUgYmVnaW5uaW5n IG9mIGEgZmlsZS4gSWYgeW91CisgICBhcHBlbmQgb25lIFVDUy0yIGZpbGUgdG8gYW5vdGhlciwg YW5kIGJvdGggaGF2ZSBCT01zLCB0aGUgaW50ZXJuYWwgQk9NCisgICBpcyBubyBsb25nZXIgYSBC T00uIEFuZCBpZiB0aGUgYnl0ZSBvcmRlcnMgb2YgdGhlIHR3byBmaWxlcyBkaWZmZXIsCisgICB0 aGVuIGVpdGhlciB0aGUgZmlyc3QgcGFydCBvciB0aGUgc2Vjb25kIHdpbGwgYmUgYmFja3dhcmRz LiAoVmFyaW91cworICAgb3RoZXIgdW5kZXNpcmFibGUgZWZmZWN0cyBtaWdodCBhbHNvIG9jY3Vy LCBub3QgZGlzY3Vzc2VkIGhlcmUuKQorCisgICAgNi42LjIuIFVDUyBUcmFuc2Zvcm1hdGlvbiBG b3JtYXRzCisKKyAgIFVDUyB0ZXh0dWFsIGRhdGEgY2FuIGJlIG1vZGlmaWVkIGluIHZhcmlvdXMg d2F5cyBmb3IgdHJhbnNtaXNzaW9uIG9yCisgICBzdG9yYWdlLiBBbnkgb2ZmaWNpYWxseSBzYW5j dGlvbmVkIG1ldGhvZCBvZiBkb2luZyB0aGlzIGlzIGNhbGxlZCBhIFVDUworICAgVHJhbnNmb3Jt YXRpb24gRm9ybWF0LCBvciBVVEYuIE9uZSBzdWNoIG1ldGhvZCwgY2FsbGVkIFVURi0xNiwgaXMK KyAgIGVzc2VudGlhbGx5IGlkZW50aWNhbCB3aXRoIFVDUy0yIGV4Y2VwdCB0aGF0IGl0IGRlc2ln bmF0ZXMgY2VydGFpbiBjb2RlCisgICB2YWx1ZXMgYXMgImVzY2FwZSBzZXF1ZW5jZXMiIChjYWxs ZWQgc3Vycm9nYXRlIHBhaXJzKSB0byBhY2Nlc3MKKyAgIGNoYXJhY3RlcnMgaW4gb3RoZXIgcGxh bmVzIHdpdGhvdXQgaGF2aW5nIHRvIHVzZSBmdWxsIFVDUy00LiBXZSB3b24ndAorICAgZGlzY3Vz cyBVVEYtMTYgZnVydGhlciBoZXJlLCBzaW5jZSBhdCB0aGUgbW9tZW50IHRoZXJlIGFyZSBubyBv dGhlcgorICAgcGxhbmVzLiBTZXZlcmFsIG90aGVyIFVURidzIChzdWNoIGFzIFVURi0xLCBVVEYt MiwgYW5kIFVURi03KSBoYXZlCisgICBmYWxsZW4gaW50byBkaXN1c2UgYW5kIGFyZSBub3QgZGlz Y3Vzc2VkIGhlcmUuIFRoZSBtb3N0IGltcG9ydGFudAorICAgdHJhbnNmb3JtYXRpb24gZm9ybWF0 IHRvZGF5IGlzIFVURi04LgorCisgICBVVEYtOCwgc28gY2FsbGVkIGJlY2F1c2UgaXQgInNlcmlh bGl6ZXMiIFVDUy0yIGRhdGEgaW50byBhIHN0cmVhbSBvZgorICAgOC1iaXQgYnl0ZXMsIGlzIGRl c2lnbmVkIHRvIGFsbG93IHRoZSBVQ1MgdG8gd29yayB3aXRoIHByZXNlbnQtZGF5CisgICBjb21t dW5pY2F0aW9ucyBnZWFyLCBjb21wdXRlcnMsIGFuZCBzb2Z0d2FyZS4gVGhlIG1vc3QgaW1wb3J0 YW50CisgICBwcm9wZXJ0aWVzIG9mIFVURi04IGFyZSB0aGF0IGJ5dGUgb3JkZXIgaXMgY29uc3Rh bnQgKG5vIGJ5dGUgc3dhcHBpbmcpCisgICBhbmQgYWxsICg3LWJpdCkgQVNDSUkgY2hhcmFjdGVy cyByZXByZXNlbnQgdGhlbXNlbHZlcy4gVGhlcmVmb3JlCisgICBjb252ZXJzaW9uIGJldHdlZW4g QVNDSUkgYW5kIFVURi04IGlzIG5vIGNvbnZlcnNpb24gYXQgYWxsLCBhbmQKKyAgIGFwcGxpY2F0 aW9ucyBvciBwbGF0Zm9ybXMgKHN1Y2ggYXMgUGxhbiA5IGZyb20gQmVsbCBMYWJzKSB0aGF0IHVz ZQorICAgVVRGLTggImZvciBldmVyeXRoaW5nIiBjYW4gc3RpbGwgcnVuIHRyYWRpdGlvbmFsIEFT Q0lJLW9ubHkKKyAgIGFwcGxpY2F0aW9ucyBhbmQgYmUgYWNjZXNzZWQgZnJvbSB0aGVtLiBJbiBw YXJ0aWN1bGFyLCB1bmxpa2UgVUNTLTIsCisgICBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBub3QgcGFk ZGVkIHdpdGggTlVMIGJ5dGVzLiBCdXQgYWxzbyB1bmxpa2UgVUNTLTIsCisgICB0aGVyZSBpcyBu byB0cmFuc3BhcmVuY3kgZm9yIExhdGluLTEgb3IgYW55IG90aGVyIG5vbi1BU0NJSSBjaGFyYWN0 ZXIKKyAgIHNldC4gRXZlcnkgbm9uLUFTQ0lJIFVDUy0yIGNoYXJhY3RlciBpcyByZXByZXNlbnRl ZCBieSBhIHNlcXVlbmNlIG9mIDIKKyAgIG9yIDMgVVRGLTggYnl0ZXMuIFRodXMgVVRGLTggaXMg bW9yZSBjb21wYWN0IHRoYW4gVUNTLTIgZm9yIHRleHQKKyAgIGNvbnRhaW5pbmcgYSBwcmVwb25k ZXJhbmNlIG9mIEFCQydzIChvciBvdGhlciBBU0NJSSBjaGFyYWN0ZXJzKSwgYWJvdXQKKyAgIHRo ZSBzYW1lIGFzIFVDUy0yIGZvciBvdGhlciBhbHBoYWJldGljIHNjcmlwdHMgKEN5cmlsbGljLCBS b21hbiwgR3JlZWssCisgICBldGMpLCBhbmQgbGFyZ2VyIHRoYW4gVUNTLTIgZm9yIENoaW5lc2Us IEphcGFuZXNlLCBhbmQgS29yZWFuLgorCisgICBUaGUgVVRGLTggdW5jb2Rpbmcgb2YgdGhlIFVD UyBoYXMgYmVlbiBhZG9wdGVkIGJ5IHRoZSBJbnRlcm5ldCBhcyB0aGUKKyAgIHByZWZlcnJlZCBj aGFyYWN0ZXIgc2V0IGZvciBuZXcgYXBwbGljYXRpb25zLCBhbmQgaXMgZ3JhZHVhbGx5IGJlaW5n CisgICByZXRyb2ZpdHRlZCBpbnRvIHRyYWRpdGlvbmFsIGFwcGxpY2F0aW9ucyBsaWtlIEZUUCAo WzU1MF1SRkMgMjY0MCkuCisKKyAgICA2LjYuMy4gQ29uZm9ybWFuY2UgTGV2ZWxzCisKKyAgIEFs dGhvdWdoIHRoZSBVbmljb2RlIGFuZCBJU08gMTA2NDYgc3RhbmRhcmRzIGJvdGggZGVzY3JpYmUg dGhlIHNhbWUKKyAgIGNoYXJhY3RlciBzZXQsIHRoZXNlIHN0YW5kYXJkcyBkaWZmZXIgaW4gbWFu eSB3YXlzLCBpbmNsdWRpbmcgdGhlaXIKKyAgIHN0YXRlZCByZXF1aXJlbWVudHMgZm9yIGNvbmZv cm1hbmNlIGFuZCB0aGVpciBjbGFzc2lmaWNhdGlvbiBvZgorICAgY29uZm9ybWFuY2UgbGV2ZWxz LgorCisgICBLZXJtaXQgaGFzIGFsd2F5cyBhYmlkZWQgYnkgSVNPIGNoYXJhY3Rlci1zZXQgc3Rh bmRhcmRzLCBpbmNsdWRpbmcgSVNPCisgICBjaGFyYWN0ZXItc2V0IGRlc2lnbmF0aW9uIGFuZCBp bnZvY2F0aW9uIG1ldGhvZHMuIEluIGFkYXB0aW5nIFVuaWNvZGUsCisgICB0aGVyZWZvcmUsIHdl IGhhZCB0byBjaG9vc2UgZnJvbSBhbW9uZyB0aGUgYXZhaWxhYmxlIElTTyBkZXNpZ25hdGlvbnMK KyAgIHdoaWNoLCBpbiB0dXJuLCBjb3JyZXNwb25kIHdpdGggSVNPIDEwNjQ2IGNvbmZvcm1hbmNl IGxldmVscy4gQXQKKyAgIHByZXNlbnQsIEtlcm1pdCBjbGFpbXMgdGhlIGxvd2VzdCBjb25mb3Jt YW5jZSBsZXZlbCwgMSwgbWVhbmluZworICAgKHJvdWdobHkpIHRoYXQgaXQgZG9lcyBub3QgaGFu ZGxlIGNvbWJpbmluZyBmb3JtcyBhbmQgaXQgZG9lcyBub3QKKyAgIGhhbmRsZSBLb3JlYW4gSGFu Z3VsIEphbW9zIChqdXN0IGFzLCBhdCBwcmVzZW50LCBpdCBkb2VzIG5vdCBoYW5kbGUKKyAgIEtv cmVhbiBpbiBnZW5lcmFsKS4gTm90ZSB0aGF0IElTTyAxMDY0NiBDb25mb3JtYW5jZSBMZXZlbHMg MSBhbmQgMgorICAgc2lkZXN0ZXAgdGhlIGlzc3VlIG9mIHRoZSBjb2RlIGNoYW5nZXMgZm9yIEtv cmVhbiBIYW5ndWwgYnkgYW5ub3VuY2luZworICAgbm9uLXN1cHBvcnQgZm9yIEhhbmd1bCByZWdh cmRsZXNzIG9mIGVuY29kaW5nLgorCisgICBJU08gMTA2NDYgQ29uZm9ybWFuY2UgTGV2ZWwgMSBp cyBhcHByb3hpbWF0ZWx5IGVxdWl2YWxlbnQgdG8gVW5pY29kZQorICAgTm9ybWFsaXphdGlvbiBG b3JtIEMgKGRlc2NyaWJlZCBpbiBVbmljb2RlIFRlY2huaWNhbCBSZXBvcnQgMTUsCisgICBpbmNv cnBvcmF0ZWQgaW50byBVbmljb2RlIDMuMCkuCisKKyAgIEFzIG5vdGVkIGluIFs1NTFdU2VjdGlv biA2LjYuMiwgS2VybWl0IGRvZXMgbm90IGNsYWltIHRvIHN1cHBvcnQgVVRGLTE2CisgICBhdCB0 aGUgcHJlc2VudCB0aW1lLCBoZW5jZSB0aGUgVUNTLTIgbm9tZW5jbGF0dXJlLiBLZXJtaXQgdHJl YXRzCisgICBzdXJyb2dhdGVzIGp1c3QgYXMgaWYgdGhleSB3ZXJlIGFueSBvdGhlciBVQ1MtMiBj aGFyYWN0ZXJzLCByYXRoZXIgdGhhbgorICAgYXMgZXNjYXBlcyB0byBvdGhlciBwbGFuZXMsIHdo aWNoIG1lYW5zIHRoYXQgKGV4Y2VwdCB3aGVuIGNvbnZlcnRpbmcKKyAgIGJldHdlZW4gVUNTLTIg YW5kIFVURi04KSB0aGV5IGFyZSB0cmFuc2xhdGVkIHRvICJlcnJvciIgY2hhcmFjdGVycywKKyAg IHNpbmNlIChhKSBubyBvdGhlciBwbGFuZXMgYXJlIGRlZmluZWQgeWV0IChhbmQgaWYgdGhleSB3 ZXJlLCBubyBvdGhlcgorICAgY2hhcmFjdGVyIHNldHMgc3VwcG9ydGVkIGJ5IEtlcm1pdCB3b3Vs ZCBlbmNvZGUgdGhlaXIgY2hhcmFjdGVycyksIGFuZAorICAgKGIpIG5vIHZhbGlkIHN1cnJvZ2F0 ZSBjaGFyYWN0ZXIgY29ycmVzcG9uZHMgdG8gYW55IG90aGVyIFVDUy0yCisgICBjaGFyYWN0ZXIu CisKKyAgIEEgbWlub3IgeWV0IHNpZ25pZmljYW50IGFzcGVjdCBvZiBVbmljb2RlIDMuMCBhbmQg c29tZSByZWNlbnQKKyAgIHBlcnR1cmJhdGlvbiBvZiBJU08gMTA2NDYtMSAocHJvYmFibHkgQW1l bmRtZW50IDE4LCAiU3ltYm9scyBhbmQgT3RoZXIKKyAgIENoYXJhY3RlcnMiKSBpcyB0aGUgYWRk aXRpb24gb2YgdGhlIEV1cm8gU2lnbiBhdCBVKzIwQUMuIEFzIG5vdGVkIGluCisgICBbNTUyXVNl Y3Rpb24gNi4wLCBLZXJtaXQncyAiRXVybyBjb21wbGlhbmNlIiBpbmNsdWRlcyBjb252ZXJzaW9u CisgICBiZXR3ZWVuIExhdGluIEFscGhhYmV0IDkgYW5kIHZhcmlvdXMgUEMgY29kZSBwYWdlcy4g VGV4dCBjYW4gYWxzbyBiZQorICAgY29udmVydGVkIGJldHdlZW4gVUNTLTIgb3IgVVRGLTggYW5k IGFueSBvdGhlciBFdXJvLWNvbXBsaWFudCBjaGFyYWN0ZXIKKyAgIHNldCAoTGF0aW4tOSwgQ1A4 NTgsIENQMTI1MCwgQ1AxMjUyKSB3aXRob3V0IGxvc3Mgb2YgdGhlIEV1cm8gU2lnbi4KKworICAg IDYuNi40LiBSZWxhdGlvbnNoaXAgb2YgVW5pY29kZSB3aXRoIEtlcm1pdCdzIE90aGVyIENoYXJh Y3RlciBTZXRzCisKKyAgIEtlcm1pdCdzIGNoYXJhY3RlciBzZXRzIGFyZSBkaXZpZGVkIGludG8g dHdvIGdyb3Vwczogc2luZ2xlLWJ5dGUgc2V0cworICAgKHN1Y2ggYXMgUm9tYW4sIEhlYnJldywg Q3lyaWxsaWMsIEdyZWVrKSBhbmQgbXVsdGlieXRlICh2YXJpb3VzCisgICBKYXBhbmVzZSBzZXRz KS4gVGhlIHR3byBncm91cHMgYXJlIGRpc3RpbmN0IHNpbmNlIG9uZSBub3JtYWxseSB3b3VsZAor ICAgbm90IGV4cGVjdCB0byBjb252ZXJ0IEthbmppIGlkZW9ncmFtcyB0byBSb21hbiAob3Igb3Ro ZXIpIGxldHRlcnMsIG9yCisgICB2aWNlIHZlcnNhLgorCisgICBVbmljb2RlIGNoYXJhY3Rlci1z ZXQgY29udmVyc2lvbiB3b3JrcyB3aXRoIGJvdGggZ3JvdXBzLCBidXQgb2J2aW91c2x5CisgICB0 aGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHJlcGVydG9pcmVzIG9mIHRoZSBzb3VyY2UgYW5kIGRl c3RpbmF0aW9uCisgICBjaGFyYWN0ZXItc2V0cyBib3RoIGluY2x1ZGluZyB0aGUgY2hhcmFjdGVy cyBpbiB0aGUgZmlsZS4gRm9yIGV4YW1wbGUsCisgICB5b3UgY2FuIHRyYW5zbGF0ZSBhIEh1bmdh cmlhbiB0ZXh0IGZpbGUgYmV0d2VlbiBMYXRpbi0yIGFuZCBVbmljb2RlLAorICAgYnV0IG5vdCBi ZXR3ZWVuIChzYXkpIFVuaWNvZGUgYW5kIExhdGluL0dyZWVrLiBCeSB0aGUgc2FtZSB0b2tlbiB5 b3UKKyAgIGNhbiBjb252ZXJ0IEphcGFuZXNlIHRleHQgZnJvbSBTaGlmdC1KSVMgb3IgRVVDIG9y IEpJUy03IHRvIFVuaWNvZGUgYW5kCisgICBiYWNrLCBidXQgeW91IGNhbid0IGNvbnZlcnQgdGhl IHNhbWUgZmlsZSB0byAoc2F5KSBMYXRpbi0xIGlmIGl0CisgICBjb250YWlucyBKYXBhbmVzZSBj aGFyYWN0ZXJzLgorCisgICAgIEpJUy03IGlzIGVxdWl2YWxlbnQgdG8gREVDIEthbmppIGFuZCBJ U08tMjAyMi1KUCBleGNlcHQgdGhhdCB0aGUKKyAgICAgbGF0dGVyIHR3byBkbyBub3Qgc3VwcG9y dCBoYWxmd2lkdGggS2F0YWthbmEuIEtlcm1pdCB0cmVhdHMgYWxsCisgICAgIHRocmVlIG9mIHRo ZXNlIHNldHMgdGhlIHNhbWUgd2F5LCBpLmUuIGFzIEpJUy03LgorCisgICBBcyBub3RlZCwgS2Vy bWl0IHByZXNlbnRseSBkb2VzIG5vdCBoYW5kbGUgY29tYmluaW5nIGRpYWNyaXRpY3MsIGFuZCBz bworICAgd2lsbCBub3QgY29ycmVjdGx5IGNvbnZlcnQgVUNTIGZpbGVzIHRoYXQgdXNlIHRoZW0g aW50byBhIHNpbmdsZS1ieXRlCisgICBjaGFyYWN0ZXIgc2V0LiBGb3IgZXhhbXBsZSwgaWYgYSBV Q1MgZmlsZSBjb250YWlucyBMYXRpbiBDYXBpdGFsIExldHRlcgorICAgQSAoVSswMDQxKSBmb2xs b3dlZCBieSBDb21iaW5pbmcgQWN1dGUgQWNjZW50IChVKzAzMDEpLCB0aGUgcmVzdWx0IHdpbGwK KyAgIGJlIGEgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSwgQSBmb2xsb3dlZCBieSBhbm90aGVyIGNo YXJhY3Rlci4gVGhpcyBpcworICAgd2hhdCBpcyBtZWFudCBieSBDb25mb3JtYW5jZSBMZXZlbCAx LiAoVGhlIHNpdHVhdGlvbiBncm93cyB3b3JzZSB3aXRoCisgICBtdWx0aXBsZSBkaWFjcml0aWNz LCBzaW5jZSB0aGV5IGNhbiBvY2N1ciBpbiBhbnkgb3JkZXIuKQorCisgICBBIGhpZ2hlciBsZXZl bCBvZiBjb25mb3JtYW5jZSBpcyBwb3NzaWJsZSwgaW4gd2hpY2ggImNhbm9uaWNhbAorICAgZXF1 aXZhbGVuY2VzIiBhcmUgaGFuZGxlZCB2aWEgYWxnb3JpdGhtcyBhbmQgZGF0YWJhc2VzLCBhdCBz b21lCisgICAocGVyaGFwcyBjb25zaWRlcmFibGUpIGNvc3QgaW4gcGVyZm9ybWFuY2UsIHNpbmNl IGEgZmFpciBhbW91bnQgb2YKKyAgIGFkZGl0aW9uYWwgY29kZSBtdXN0IGJlIGV4ZWN1dGVkIGZv ciBldmVyeSBjaGFyYWN0ZXIgZHVyaW5nIGRhdGEKKyAgIHRyYW5zZmVyIChkYXRhYmFzZSBsb29r dXAsIHNvcnRpbmcgb2YgY29tYmluaW5nIHNlcXVlbmNlcyBpbnRvCisgICBjYW5vbmljYWwgb3Jk ZXIsIGV0YykuIFRoaXMgY2FuIGJlIGFkZGVkIGluIGZ1dHVyZSByZWxlYXNlcyBpZiB0aGVyZSBp cworICAgYSBuZWVkIChidXQgaW4gbWFueSBjYXNlcywgcHJlLSBhbmQgcG9zdHBvc3Rwcm9jZXNz aW5nIG1pZ2h0IGJlIGEKKyAgIGJldHRlciBvcHRpb24pLgorCisgICBXaXRoaW4gdGhlc2UgY29u c3RyYWludHMsIEtlcm1pdCBjb252ZXJ0cyBiZXR3ZWVuIHRoZSBVQ1MgYW5kIGl0cyBvdGhlcgor ICAgY2hhcmFjdGVyIHNldHMuIEZvciBleGFtcGxlLCBhIG1peHR1cmUgb2YgUnVzc2lhbiBhbmQg RW5nbGlzaCAoYW5kL29yCisgICBEdXRjaCwgb3IgTGF0aW4pIHRleHQgY2FuIGJldCBjb252ZXJ0 ZWQgYmV0d2VlbiB0aGUgVUNTIGFuZCBJU08KKyAgIExhdGluL0N5cmlsbGljIG9yIEtPSS04LiBC dXQgc2luY2UgS2VybWl0IGRvZXMgbm90IHByZXNlbnRseSBzdXBwb3J0CisgICBBcmFiaWMgY2hh cmFjdGVyLXNldCBjb252ZXJzaW9uLCB0aGUgbmV3IGF2YWlsYWJpbGl0eSBvZiBVQ1MgY29udmVy c2lvbgorICAgZG9lcyBub3QgbWVhbiB0aGF0IEtlcm1pdCBjYW4gY29udmVydCBmcm9tIEFyYWJp YyBVQ1MgdGV4dCB0byBzb21lCisgICBvdGhlciBjaGFyYWN0ZXIgc2V0LCBiZWNhdXNlIEtlcm1p dCBkb2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlcgorICAgY2hhcmFjdGVyIHNldCB0aGF0IGluY2x1 ZGVzIEFyYWJpYy4gRGl0dG8gZm9yIFRoYWksIEFybWVuaWFuLCBHZW9yZ2lhbiwKKyAgIFRpYmV0 YW4sIENoaW5lc2UsIEtvcmVhbiwgZXRjLiBIb3dldmVyLCBLZXJtaXQgQ0FOIGNvbnZlcnQgQXJh YmljIChvcgorICAgYW55IG90aGVyIHNjcmlwdCkgYmV0d2VlbiBVQ1MtMiBhbmQgVVRGLTguCisK KyAgIENvbnNpZGVyaW5nIEN5cmlsbGljIG1vcmUgY2FyZWZ1bGx5LCBub3RlIHRoYXQgdGhlIFVD UyBhbHNvIGNvbnRhaW5zCisgICBudW1lcm91cyBDeXJpbGxpYyBjaGFyYWN0ZXJzIG5vdCBmb3Vu ZCBpbiBhbnkgb2YgdGhlIEN5cmlsbGljIHNldHMgKElTTworICAgTGF0aW4vQ3lyaWxsaWMsIEtP STgsIENQODY2LCBldGMpIHRoYXQgS2VybWl0IHN1cHBvcnRzOyBjaGFyYWN0ZXJzCisgICBuZWVk ZWQgZm9yIEFia2hhc2lhbiwgWWFrdXQsIFRhdGFyLCBCYXNoa2lyLCBBbHRhaWMsIE9sZCBDaHVy Y2gKKyAgIFNsYXZvbmljLCBldGM7IFVDUyB0ZXh0IGNvbnRhaW5pbmcgYW55IG9mIHRoZXNlIGhp c3RvcmljIG9yICJleHRlbmRlZCIKKyAgIEN5cmlsbGljIGNoYXJhY3RlcnMgY2FuIG5vdCBiZSBj b252ZXJ0ZWQgdG8gYW55IG9mIEtlcm1pdCdzIGN1cnJlbnQKKyAgIHNpbmdsZS1ieXRlIEN5cmls bGljIHNldHMgd2l0aG91dCBsb3NzLiBUaGUgc2l0dWF0aW9uIGlzIHNpbWlsYXIgZm9yCisgICBH cmVlaywgSGVicmV3LCBldGMsIGFuZCBldmVuIHdvcnNlIGZvciBKYXBhbmVzZSBzaW5jZSBVbmlj b2RlIGNvbnRhaW5zCisgICB0aG91c2FuZHMgb2YgS2FuamlzIHRoYXQgYXJlIGxhY2tpbmcgZnJv bSB0aGUgSmFwYW5lc2UgY2hhcmFjdGVyIHNldHMKKyAgIGJhc2VkIG9uIEpJUyBYIDAyMDgsIHN1 Y2ggYXMgRVVDLUpQLCBKSVMtNywgYW5kIFNoaWZ0LUpJUy4KKworICAgSW4gZ2VuZXJhbCwgd2hl biBjb252ZXJ0aW5nIGZyb20gVUNTIHRvIGEgc2luZ2xlLWJ5dGUgc2V0LCB0aGVyZSBpcworICAg YWx3YXlzIHRoZSBwb3NzaWJpbGl0eSBvZiBkYXRhIGxvc3MsIGp1c3QgYXMgdGhlcmUgaXMgd2hl biBjb252ZXJ0aW5nCisgICBmcm9tIGFueSBsYXJnZXIgc2V0IHRvIGEgc21hbGxlciBvbmUuIEZv ciBleGFtcGxlLCBpZiBhIFVDUyBmaWxlCisgICBjb250YWlucyBEZXZhbmFnYXJpIGNoYXJhY3Rl cnMsIHRoZXNlIGNoYXJhY3RlcnMgd2lsbCBiZSBsb3N0IHdoZW4KKyAgIGNvbnZlcnRpbmcgdG8g KHNheSkgTGF0aW4tMSwganVzdCBhcyBSb21hbiB2b3dlbHMgd2l0aCBhY3V0ZSBhY2NlbnRzCisg ICBhcmUgbG9zdCB3aGVuIGNvbnZlcnRpbmcgZnJvbSBMYXRpbi0xIChhbiA4LWJpdCBzZXQpIHRv IEdlcm1hbiBJU08gNjQ2CisgICAoYSA3LWJpdCBzZXQpLgorCisgICAgNi42LjUuIEtlcm1pdCdz IFVuaWNvZGUgRmVhdHVyZXMKKworICAgQy1LZXJtaXQgY2FuIGNvbnZlcnQgYmV0d2VlbiBVQ1Mt MiBvciBVVEYtOCBhbmQgYW55IG9mIGl0cyBvdGhlcgorICAgY2hhcmFjdGVyIHNldHMsIGFuZCBh bHNvIGJldHdlZW4gVUNTLTIgYW5kIFVURi04LiBXaGVuIGNvbnZlcnRpbmcKKyAgIGJldHdlZW4g VUNTLTIgb3IgVVRGLTggYW5kIGEgbm9uLVVuaWNvZGUgY2hhcmFjdGVyIHNldCAoc3VjaCBhcwor ICAgTGF0aW4tMSksIHRoZSBVQ1MgTGluZSBTZXBhcmF0b3IgKExTLCBVKzIwMjgpIGFuZCBQYXJh Z3JhcGggU2VwYXJhdG9yCisgICAoUFMsIFUrMjAyOSkgY2hhcmFjdGVycyBhcmUgY29udmVydGVk IHRvIHRoZSBhcHByb3ByaWF0ZSBsaW5lCisgICB0ZXJtaW5hdG9yIChDUiwgTEYsIG9yIENSTEYp LiBXaGVuIGNvbnZlcnRpbmcgZnJvbSBhIG5vbi1Vbmljb2RlIHNldCB0bworICAgVUNTLTIgb3Ig VVRGLTgsIGhvd2V2ZXIsIGxpbmUgdGVybWluYXRvcnMgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gTFMg b3IKKyAgIFBTLiBUaGlzIGlzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcmVjb21tZW5kYXRpb25z IG9mIFVuaWNvZGUgVGVjaG5pY2FsCisgICBSZXBvcnQgIzEzLgorCisgICBXaGVuIEMtS2VybWl0 IHN0YXJ0cywgaXQgdGVzdHMgdGhlIG5hdGl2ZSBieXRlIG9yZGVyIG9mIHRoZSBjb21wdXRlci4K KyAgIFlvdSBjYW4gc2VlIHRoZSByZXN1bHQgaW4gdGhlIFNIT1cgRkVBVFVSRVMgb3IgU0hPVyBG SUxFIGRpc3BsYXkuIEl0J3MKKyAgIGFsc28gYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZSBcdihi eXRlb3JkZXIpOiAwIG1lYW5zIEJpZyBFbmRpYW4sIDEKKyAgIG1lYW5zIExpdHRsZSBFbmRpYW4u CisKKyAgIFdoZW4gVUNTLTIgaXMgaW52b2x2ZWQgaW4gZmlsZSB0cmFuc2ZlciBvciB0cmFuc2xh dGlvbiwgdGhlIGZvbGxvd2luZworICAgY29tbWFuZHMgdGVsbCBDLUtlcm1pdCB3aGF0IHRvIGRv IGFib3V0IGJ5dGUgb3JkZXI6CisKKyAgIFNFVCBGSUxFIFVDUyBCWVRFLU9SREVSIHsgQklHLUVO RElBTiwgTElUVExFLUVORElBTiB9CisgICAgICAgICAgVGhpcyBpcyBmb3IgcmVhZGluZyBVQ1Mt MiBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYSBCT00sIGFuZCBhbHNvCisgICAgICAgICAgZm9yIHdy aXRpbmcgVUNTLTIgZmlsZXMuIElmIHRoaXMgY29tbWFuZCBpcyBub3QgZ2l2ZW4sIHRoZQorICAg ICAgICAgIG1hY2hpbmUncyBuYXRpdmUgYnl0ZSBvcmRlciBpcyB1c2VkIHdoZW4gd3JpdGluZyBV Q1MtMiBmaWxlcywKKyAgICAgICAgICBhbmQgYWxzbyB3aGVuIHJlYWRpbmcgVUNTLTIgZmlsZXMg dGhhdCBkb24ndCBoYXZlIGEgQk9NLgorCisgICBTRVQgRklMRSBVQ1MgQk9NIHsgT04sIE9GRiB9 CisgICAgICAgICAgVGhpcyBzZXR0aW5nIGlzIHVzZWQgd2hlbiBjcmVhdGluZyBVQ1MtMiBmaWxl cy4gQSBCT00gaXMgYWRkZWQKKyAgICAgICAgICBhdCB0aGUgYmVnaW5uaW5nIGJ5IGRlZmF1bHQu IFVzZSBPRkYgdG8gbm90IGFkZCB0aGUgQk9NLiBUaGlzCisgICAgICAgICAgY29tbWFuZCBoYXMg bm8gYWZmZWN0IHdoZW4gd3JpdGluZyBmaWxlcy4KKworICAgQ09QWSAvU1dBUC1CWVRFUyBzb3Vy Y2VmaWxlIGRlc3RpbmF0aW9uZmlsZQorICAgICAgICAgIFVzZSB0aGlzIGZvciBmaXhpbmcgYSBV Q1MtMiBmaWxlIHdob3NlIGJ5dGVzIGFyZSBpbiB0aGUgd3JvbmcKKyAgICAgICAgICBvcmRlci4K KworICAgVXNlIFNIT1cgRklMRSB0byBkaXNwbGF5IHRoZSBGSUxFIFVDUyBzZXR0aW5ncy4KKwor ICAgUGxlYXNlIG5vdGUsIGFnYWluLCB0aGF0IEMtS2VybWl0J3MgdXNlciBpbnRlcmZhY2UsIGlu Y2x1ZGluZyBpdHMKKyAgIHNjcmlwdCBsYW5ndWFnZSwgaXMgbm90IGludGVybmF0aW9uYWxpemVk IGluIGFueSB3YXkuIFN0cmluZworICAgY29tcGFyaXNvbnMsIGNhc2UgY29udmVyc2lvbiwgYW5k IHNvIG9uLCB3b3JrIG9ubHkgZm9yIFVTIEFTQ0lJCisgICAoY29tcGFyaXNvbnMgZm9yIGVxdWFs aXR5IHdvcmsgd2l0aCBvdGhlciBzZXRzLCBidXQgbm90CisgICBsZXhpY2FsbHktZ3JlYXRlci1v ci1sZXNzLXRoYW4gb3IgY2FzZWxlc3MgY29tcGFyaXNvbnM7IGV2ZW4KKyAgIGNvbXBhcmlzb25z IGZvciBlcXVhbGl0eSBjYW4gZmFpbCB3aGVuIGNvbXBvc2VkIGNoYXJhY3RlcnMgb3IgYnl0ZQor ICAgb3JkZXIgYXJlIGludm9sdmVkKS4gU3RyaW5nIGZ1bmN0aW9ucyBzdWNoIGFzIFxmaW5kZXgo KSBhbmQKKyAgIFxmc3Vic3RyaW5nKCkgdGhhdCByZWZlcmVuY2UgYnl0ZSBwb3NpdGlvbnMgZG8g anVzdCB0aGF0OyB0aGV5IHdvbid0CisgICB3b3JrIHdpdGggVVRGLTggdGV4dCB0aGF0IGNvbnRh aW5zIGFueSBub24tQVNDSUkgY2hhcmFjdGVycywgYW5kIHRoZXkKKyAgIHdpbGwgbm90IHdvcmsg d2l0aCBVQ1MtMiB0ZXh0IGF0IGFsbCBzaW5jZSB0aGV5IHVzZSBDIHN0cmluZ3MKKyAgIGludGVy bmFsbHksIHdoaWNoIGFyZSBOVUwtdGVybWluYXRlZC4gVGhlc2UgYXJlIGp1c3QgYSBmZXcgZXhh bXBsZXMgdG8KKyAgIGlsbHVzdHJhdGUgdGhhdCBuZWl0aGVyIFVuaWNvZGUgbm9yIGFueSBvdGhl ciBjaGFyYWN0ZXItc2V0IGJleW9uZAorICAgQVNDSUkgaXMgc3VwcG9ydGVkIGF0IHRoZSB1c2Vy LWludGVyZmFjZSwgY29tbWFuZCwgb3Igc2NyaXB0aW5nIGxldmVsCisgICBpbiB0aGlzIHZlcnNp b24gb2YgQy1LZXJtaXQuCisKKyAgICA2LjYuNS4xLiBGaWxlIFRyYW5zZmVyCisKKyAgIEtlcm1p dCBzdXBwb3J0cyBib3RoIFVDUy0yIGFuZCBVVEYtOCBhcyBmaWxlIGFuZCB0cmFuc2ZlciBjaGFy YWN0ZXIKKyAgIHNldHMgaW4gdGV4dC1tb2RlIGZpbGUgdHJhbnNmZXIuCisKKyAgIFRvIHNlbGVj dCBVQ1MtMiBvciBVVEYtOCBhcyBhIGZpbGUgY2hhcmFjdGVyLXNldCwgdXNlOgorCisgIFNFVCBG SUxFIENIQVJBQ1RFUi1TRVQgeyBVQ1MyLCBVVEY4IH0KKworICAgSWYgeW91IHdhbnQgdG8gc2Vu ZCBhIFVDUy0yIHRleHQgZmlsZSAob3Igc2F2ZSBhbiBpbmNvbWluZyBmaWxlIGluCisgICBVQ1Mt MiBmb3JtYXQpLCB0ZWxsIEtlcm1pdCB0bzoKKworICBTRVQgRklMRSBDSEFSQUNURVItU0VUIFVD UzIKKworICAgYW5kIGlmIHlvdSB3YW50IHRvIHNlbmQgYSBVVEYtOCB0ZXh0IGZpbGUgKG9yIHN0 b3JlIGFuIGluY29taW5nIGZpbGUgaW4KKyAgIFVURi04IGZvcm1hdCksIHRlbGwgS2VybWl0IHRv OgorCisgIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgVVRGOAorCisgICBXaGVuIHNlbmRpbmcgVUNT LTIgZmlsZXMsIEtlcm1pdCBkZXRlcm1pbmVzIHRoZSBieXRlIG9yZGVyIGZyb20gdGhlCisgICBC T00sIGlmIHRoZXJlIGlzIG9uZSAoYW5kIGlmIHRoZXJlIGlzIGEgQk9NLCBpdCBpcyBzdHJpcHBl ZCwgaS5lLiBub3QKKyAgIHNlbnQpLiBJZiB0aGVyZSBpcyBubyBCT00sIHRoZSBieXRlIG9yZGVy IGlzIHRoZSBvbmUgc3BlY2lmaWVkIGluIHRoZQorICAgbW9zdCByZWNlbnQgU0VUIEZJTEUgVUNT IEJZVEUtT1JERVIgY29tbWFuZCwgaWYgYW55LCBvdGhlcndpc2UgdGhlCisgICBjb21wdXRlcidz IG5hdGl2ZSBieXRlIG9yZGVyIGlzIGFzc3VtZWQuIFdoZW4gc3RvcmluZyBpbmNvbWluZyBmaWxl cyBhcworICAgVUNTLTIsIHRoZSBieXRlIG9yZGVyIGlzIGFjY29yZGluZyBTRVQgRklMRSBVQ1Mg QllURS1PUkRFUiwgaWYgZ2l2ZW4sCisgICBvdGhlcndpc2UgdGhlIG5hdGl2ZSBvbmU7IGEgQk9N IGlzIHdyaXR0ZW4gYWNjb3JkaW5nIHRvIFNFVCBGSUxFIFVDUworICAgQk9NLgorCisgICBBIHRy YW5zZmVyIGNoYXJhY3Rlci1zZXQgc2hvdWxkIGJlIGNob3NlbiB0aGF0IGluY2x1ZGVzIGFsbCBv ZiB0aGUKKyAgIGNoYXJhY3RlcnMgaW4gdGhlIHNvdXJjZSBmaWxlLiBTbywgZm9yIGV4YW1wbGUs IGlmIHlvdSBhcmUgc2VuZGluZyBhCisgICBVQ1MtMiBmaWxlIGNvbnRhaW5pbmcgb25seSBHZXJt YW4tbGFuZ3VhZ2UgdGV4dCwgeW91ciB0cmFuc2ZlcgorICAgY2hhcmFjdGVyLXNldCBjYW4gYmUg TGF0aW4tMSwgTGF0aW4tMiwgTGF0aW4tOSwgVUNTLTIsIG9yIFVURi04LiBCdXQgaWYKKyAgIHlv dSBhcmUgc2VuZGluZyBhIGZpbGUgdGhhdCBjb250YWlucyBhIGNvbWJpbmF0aW9uIG9mIEhlYnJl dyBhbmQgR3JlZWssCisgICB5b3VyIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgbXVzdCBiZSBVQ1Mt MiBvciBVVEYtOCBpZiB5b3UgZG9uJ3Qgd2FudCB0bworICAgbG9zZSBvbmUgc2NyaXB0IG9yIHRo ZSBvdGhlci4gRnVydGhlcm1vcmUsIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0CisgICBtdXN0 IGJlIG9uZSB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgcmVjZWl2aW5nIEtlcm1pdCBwcm9ncmFt LiBTaW5jZQorICAgVUNTIHN1cHBvcnQgaXMgbmV3LCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBv dGhlciBLZXJtaXQgcHJvZ3JhbSAoaWYgaXQKKyAgIHN1cHBvcnRzIGNoYXJhY3RlciBzZXRzIGF0 IGFsbCkgZG9lcyBub3Qgc3VwcG9ydCBpdCwgYnV0IGRvZXMgc3VwcG9ydAorICAgc2luZ2xlLWJ5 dGUgc2V0cyBzdWNoIGFzIExhdGluLTEsIExhdGluL0N5cmlsbGljLCBldGMuCisKKyAgIFRvIHNl bGVjdCBVQ1MtMiBvciBVVEYtOCBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQsIHVzZToKKwor ICBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCB7IFVDUzIsIFVURjggfQorCisgICBJdCBpcyB1 cCB0byB0aGUgcmVjZWl2aW5nIEtlcm1pdCBwcm9ncmFtIHRvIGNvbnZlcnQgdGhlIHRyYW5zZmVy IGZvcm1hdAorICAgdG8gaXRzIG93biBsb2NhbCBmb3JtYXQsIGlmIG5lY2Vzc2FyeS4gSWYgaXQg ZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUKKyAgIFVURi04IG9yIFVDUy0yIHRyYW5zZmVyIGNoYXJh Y3Rlci1zZXQsIGFuZCB5b3VyIGZpbGUgY2FuIG5vdCBiZQorICAgYWRlcXVhdGVseSByZXByZXNl bnRlZCBieSBhbnkgc2luZ2xlLWJ5dGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCAoc3VjaAorICAg YXMgTGF0aW4tMSBvciBMYXRpbi9DeXJpbGxpYykgdGhlbiwgaWYgVVRGLTggZm9ybWF0IGlzIGFj Y2VwdGFibGUgb24KKyAgIHRoZSByZWNlaXZpbmcgY29tcHV0ZXIsIHVzZSBVVEYtOCBhcyB0aGUg dHJhbnNmZXIgY2hhcmFjdGVyLXNldCwgd2l0aAorICAgdGhlIHJlY2VpdmVyIHRvbGQgdG8gInNl dCB1bmtub3duLWNoYXIga2VlcCIsIG9yIHdpdGggdGhlIHNlbmRlciB0b2xkCisgICB0byAic2V0 IGF0dHJpYnV0ZSBjaGFyIG9mZiIuIElmIHlvdSB3YW50IHRoZSBmaWxlIHRvIGJlIHN0b3JlZCBp biBVQ1MtMgorICAgZm9ybWF0IGF0IHRoZSByZWNlaXZlciwgc2VuZCBpdCBpdCBiaW5hcnkgbW9k ZSBpZiB0aGUgc291cmNlIGZpbGUgaXMKKyAgIGFsc28gVUNTLTIsIG9yIGVsc2UgdXNlIHRoZSBU UkFOU0xBVEUgY29tbWFuZCAobmV4dCBzZWN0aW9uKSB0byBjb252ZXJ0CisgICBpdCB0byBVQ1Mt MiBmaXJzdCwgdGhlbiBzZW5kIGl0IGluIGJpbmFyeSBtb2RlLiBZb3Ugc2hvdWxkIG5vdCB1c2UK KyAgIFVDUy0yIGFzIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBpbiB0ZXh0LW1vZGUgdHJhbnNm ZXJzIHRvIEtlcm1pdAorICAgcHJvZ3JhbXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LCBiZWNhdXNl IHRoZXkgYXJlIGxpa2VseSB0byBjb3JydXB0IHRoZQorICAgcmVzdWx0IHRoZSBzYW1lIHdheSBG VFAgd291bGQgKHNlZSB0aGUgZmluYWwgcGFyYWdyYXBoIG9mIHRoaXMKKyAgIHNlY3Rpb24pLgor CisgICBXaGVuIFVDUy0yIGlzIHRoZSB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0LCBpdCBhbHdheXMg Z29lcyBpbnRvIEtlcm1pdAorICAgcGFja2V0cyBpbiBCaWcgRW5kaWFuIGZvcm1hdCwgd2l0aCBu byBCT00uIEFzIGFsd2F5cywgdGhlIHRyYW5zZmVyCisgICBjaGFyYWN0ZXItc2V0IGlzIGFubm91 bmNlZCBieSB0aGUgc2VuZGVyIHRvIHRoZSByZWNlaXZlci4gVGhlCisgICBhbm5vdW5jZW1lbnQg Zm9yIFVDUy0yIGlzICJJMTYyIiAoSVNPIFJlZ2lzdHJhdGlvbiAxNjIgPSBVQ1MtMiBMZXZlbCAx KQorICAgYW5kIGJ5IGRlZmluaXRpb24gaXQgaXMgQmlnIEVuZGlhbiAodGhlIHN0YW5kYXJkcyBz YXkgdGhhdCB3aGVuIFVDUy0yCisgICBpcyBzZXJpYWxpemVkIGludG8gYnl0ZXMsIHRoZSBvcmRl ciBtdXN0IGJlIEJpZyBFbmRpYW4pLiBUaGUKKyAgIGFubm91bmNlbWVudCBmb3IgVVRGLTggaXMg IkkxOTAiIChVVEYtOCBMZXZlbCAxKS4KKworICAgV2hlbiByZWNlaXZpbmcgYSBmaWxlIHdob3Nl IHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgaXMgVUNTLTIgb3IgVVRGLTgsCisgICB5b3UgbXVzdCBj aG9vc2UgdGhlIGFwcHJvcHJpYXRlIGZpbGUgY2hhcmFjdGVyIHNldCBmb3IgdGhlIHJlc3VsdC4K KyAgIFRoZXJlIGlzIG5vIHdheSBLZXJtaXQgY2FuIGRvIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNh bGx5LCBzaW5jZSBVQ1MKKyAgIGRhdGEgY2FuIGJlIGluIGFueSBzY3JpcHQgYXQgYWxsLCBvciBh bnkgY29tYmluYXRpb24uCisKKyAgIEluIGdlbmVyYWwsIFVURi04IG9yIFVDUy0yIHNob3VsZCBi ZSBjaG9zZW4gYXMgYSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0CisgICBpZiB0aGUgc291cmNlIGZp bGUgaXMgYWxzbyBlbmNvZGVkIGluIHNvbWUgZm9ybSBvZiBVQ1MgYW5kIGl0IGNvbnRhaW5zCisg ICBtb3JlIHRoYW4gb25lIHNjcmlwdC4gQnV0IHRoZXJlIGFyZSBvdGhlciBzaXR1YXRpb25zIHdo ZXJlIHdoZXJlIFVURi04CisgICBvciBVQ1MtMiBvZmZlciBhZHZhbnRhZ2VzLiBGb3IgZXhhbXBs ZSwgc3VwcG9zZSB0aGUgc291cmNlIGZpbGUgaXMgb24gYQorICAgTmVYVHN0YXRpb24gYW5kIHRo ZSBkZXN0aW5hdGlvbiBmaWxlIGlzIG9uIFZNUy4gQm90aCB0aGUgTmVYVCBhbmQgdGhlCisgICBE RUMgTXVsdGluYXRpb25hbCBjaGFyYWN0ZXIgc2V0cyBpbmNsdWRlIHRoZSBGcmVuY2ggT0UgZGln cmFwaCwgYnV0CisgICBMYXRpbi0xIGRvZXMgbm90LiBUaGVyZWZvcmUgRnJlbmNoIHdvcmRzIGNv bnRhaW5pbmcgdGhpcyBjaGFyYWN0ZXIKKyAgIG1pZ2h0IG5vdCBhcnJpdmUgaW50YWN0IHdoZW4g TGF0aW4tMSBpcyB0aGUgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCwgYnV0CisgICB3aWxsIHdpdGgg VVRGLTggb3IgVUNTLTIsIHNpbmNlIHRoZSBVQ1MgaW5jbHVkZXMgdGhlIE9FIGRpZ3JhcGggKGJ1 dCBzbworICAgZG9lcyBMYXRpbi05KS4KKworICAgVUNTLTIgc2hvdWxkIGJlIGNob3NlbiBhcyBh IHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgb25seSBmb3IgSmFwYW5lc2UKKyAgIHRleHQgZmlsZXMg dGhhdCBjb250YWluIGEgbGFyZ2UgcHJlcG9uZGVyYW5jZSBvZiBLYW5qaSwgc2luY2UgaW4gdGhp cworICAgY2FzZSAoYW5kIG9ubHkgdGhpcyBjYXNlKSBVQ1MtMiAodHdvIGJ5dGVzIHBlciBLYW5q aSkgaXMgbW9yZSBlZmZpY2llbnQKKyAgIHRoYW4gVVRGLTggKHRocmVlIGJ5dGVzIHBlciBLYW5q aSkuIFRoZSBzYW1lIHdpbGwgYmUgdHJ1ZSBmb3IgQ2hpbmVzZQorICAgYW5kIEtvcmVhbiB3aGVu IHRoZXkgYXJlIHN1cHBvcnRlZCBieSBLZXJtaXQuIFVDUy0yIHNob3VsZCBuZXZlciBiZQorICAg dXNlZCBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgd2l0aCBhIHRyYW5zZmVyIHBhcnRuZXIg dGhhdCBkb2VzIG5vdAorICAgc3VwcG9ydCBVQ1MtMiBzaW5jZSB0aGlzIGNhbiBjYXVzZSBmaWxl IGNvcnJ1cHRpb24gKHNlZSBsYXN0IHBhcmFncmFwaAorICAgaW4gdGhpcyBzZWN0aW9uKS4KKwor ICAgTm90ZSB0aGF0IEtlcm1pdCdzIHJlcGVhdC1jb3VudCBjb21wcmVzc2lvbiBpcyAxMDAlIGlu ZWZmZWN0aXZlIGZvcgorICAgVUNTLTIsIGFuZCBpcyBhbHNvIGluZWZmZWN0aXZlIGZvciBtdWx0 aWJ5dGUgY2hhcmFjdGVycyBpbiBVVEYtOCBhbmQKKyAgIEVVQy1KUDsgdGhpcyBpcyBiZWNhdXNl IHJlcGVhdC1jb21wcmVzc2lvbiBpcyBhIHRyYW5zcG9ydC1sZXZlbAorICAgbWVjaGFuaXNtIHRo YXQgb3BlcmF0ZXMgb24gYSBwZXItYnl0ZSBiYXNpczsgaXQgaGFzIG5vIGtub3dsZWRnZSBvZiB0 aGUKKyAgIGRpc3RpbmN0aW9uIGJldHdlZW4gYSBieXRlIGFuZCBhIGNoYXJhY3Rlci4KKworICAg V2hlbiBDLUtlcm1pdCBzdGFydHMsIGl0IHNldHMgdXAgYXNzb2NpYXRpb25zIChbNTUzXVNlY3Rp b24gNi41KSBmb3IKKyAgIGluY29taW5nIGZpbGVzIHdob3NlIHRyYW5zZmVyIGNoYXJhY3RlciBz ZXRzIGFyZSBVQ1MtMiBvciBVVEYtOAorICAgYXBwcm9wcmlhdGVseSBmb3IgdGhlIHBsYXRmb3Jt IHNvIHRoYXQgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCBmb3IgdGhlCisgICBpbmNvbWluZyBmaWxl IGlzIFVDUy0yIGluIFdpbmRvd3MgYW5kIFVURi04IGVsc2V3aGVyZS4gT3RoZXJ3aXNlLAorICAg Qy1LZXJtaXQgZG9lcyBub3QgbWFrZSBhbnkgZGVmYXVsdCBhc3NvY2lhdGlvbnMgZm9yIFVDUy0y IG9yIFVURi04LCBidXQKKyAgIG9mIGNvdXJzZSB5b3UgbWF5IGFkZCBvciBjaGFuZ2UgYXNzb2Np YXRpb25zIHRvIHN1aXQgeW91ciBuZWVkcyBhbmQKKyAgIHByZWZlcmVuY2VzIGJ5IGluY2x1ZGlu ZyB0aGUgYXBwcm9wcmlhdGUgQVNTT0NJQVRFIGNvbW1hbmRzIGluIHlvdXIKKyAgIEtlcm1pdCBz dGFydHVwIGZpbGUuIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGEgUEMgdXNlciBhbmQgZGVhbCBv bmx5CisgICB3aXRoIHRleHQgd3JpdHRlbiBpbiBHcmVlayBhbmQgRW5nbGlzaCwgeW91IGNhbjoK KworICBBU1NPQ0lBVEUgVFJBTlNGRVItQ0hBUkFDVEVSLVNFVCBVVEY4IENQODY5CisgIEFTU09D SUFURSBUUkFOU0ZFUi1DSEFSQUNURVItU0VUIFVDUzIgQ1A4NjkKKyAgQVNTT0NJQVRFIEZJTEUt Q0hBUkFDVEVSLVNFVCBDUDg2OSBVVEY4CisKKyAgIE5vdGUgdGhhdCB3aGVuIGZpbGUgdHJhbnNm ZXIgaW52b2x2ZXMgY29udmVyc2lvbiBiZXR3ZWVuIGEgc2luZ2xlLWJ5dGUKKyAgIGNoYXJhY3Rl ciBzZXQgYW5kIFVDUy0yIG9yIFVURi04LCB0aGUgZmlsZS10cmFuc2ZlciB0aGVybW9tZXRlciBh bmQKKyAgIGVzdGltYXRlZCB0aW1lIGxlZnQgbWlnaHQgYmUgaW5hY2N1cmF0ZSwgc2luY2UgdGhl eSBhcmUgYmFzZWQgb24gdGhlCisgICBzb3VyY2UgZmlsZSBzaXplLCBub3QgdGhlIHRyYW5zZmVy IGVuY29kaW5nLiBUaGlzIGlzIHB1cmVseSBhIGNvc21ldGljCisgICBpc3N1ZSBhbmQgZG9lcyBu b3QgZWZmZWN0IHRoZSBmaW5hbCByZXN1bHQuIChBbmQgaXMgbm90LCBzdHJpY3RseQorICAgc3Bl YWtpbmcsIGEgYnVnOyBLZXJtaXQgcHJvdG9jb2wgcHJlc2VudGx5IGluY2x1ZGVzIG5vIG1ldGhv ZCBmb3IgdGhlCisgICBzZW5kZXIgdG8gZnVybmlzaCBhbiAiZXN0aW1hdGVkIHRyYW5zZmVyIHNp emUiIHRvIHRoZSByZWNlaXZlciwgYW5kIGluCisgICBhbnkgY2FzZSBhbnkgc3VjaCBndWVzcyBj b3VsZCBiZSBhcyBmYXIgb2ZmIGFzIHRoZSBmaWxlIHNpemUsIGdpdmVuIHRoZQorICAgbWFueSBv dGhlciBmYWN0b3JzIHRoYXQgY29tZSBpbnRvIHBsYXksIHN1Y2ggYXMgY29tcHJlc3Npb24gYW5k CisgICBwcmVmaXhpbmcpLgorCisgICBBIGNhdXRpb24gYWJvdXQgRlRQIGFuZCBVQ1MtMi4gQXMg bm90ZWQgcHJldmlvdXNseSwgaWYgeW91IHRyYW5zZmVyIGEKKyAgIFVDUy0yIGZpbGUgd2l0aCBG VFAgaW4gYmluYXJ5IG1vZGUgYmV0d2VlbiB0d28gY29tcHV0ZXJzIHdpdGggb3Bwb3NpdGUKKyAg IEVuZGlhbm5lc3MsIHRoZSByZXN1bHQgd2lsbCBoYXZlIGl0cyBieXRlcyBpbiB0aGUgd3Jvbmcg b3JkZXIuIEhvd2V2ZXIsCisgICBpZiB5b3UgdXNlIEZUUCB0byB0cmFuc2ZlciBhIFVDUy0yIGZp bGUgaW4gImFzY2lpIiAodGV4dCkgbW9kZSB0byBBTlkKKyAgIGNvbXB1dGVyLCBldmVuIGlmIGl0 IGlzIGlkZW50aWNhbCB0byB5b3VycywgdGhlIHJlc3VsdCB3aWxsIGJlCisgICBjb3JydXB0ZWQg YmVjYXVzZSBGVFAncyBsaW5lLXRlcm1pbmF0b3IgY29udmVyc2lvbnMgZG8gbm90IGFjY291bnQg Zm9yCisgICBVQ1MtMi4gVGhlIHNhbWUgaG9sZHMgd2hlbiBzZW5kaW5nIGZyb20gYSBVQ1MtYXdh cmUgS2VybWl0IHByb2dyYW0gdG8KKyAgIGFuIG9sZGVyIEtlcm1pdCBwcm9ncmFtIGluIHRleHQg bW9kZSB3aXRoIGEgdHJhbnNmZXIgY2hhcmFjdGVyLXNldCBvZgorICAgVUNTLTIuIFNvIHVzZSBV Q1MtMiBhcyBhIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgT05MWSB3aXRoIGEgVUNTLTItYXdhcmUK KyAgIEtlcm1pdCBwYXJ0bmVyLgorCisgICAgNi42LjUuMi4gVGhlIFRSQU5TTEFURSBDb21tYW5k CisKKyAgIEluIEtlcm1pdCB2ZXJzaW9ucyB0aGF0IGhhdmUgVW5pY29kZSBzdXBwb3J0IGluY2x1 ZGVkLCBUUkFOU0xBVEUgbm93CisgICBhbHdheXMgZ29lcyB0aHJvdWdoIFVuaWNvZGU7IHRoYXQg aXMsIHRoZSBzb3VyY2Ugc2V0IGlzIGNvbnZlcnRlZCB0bworICAgVUNTLTIgYW5kIHRoZW5jZSB0 byB0aGUgdGFyZ2V0IHNldC4gVGhpcyBpcyBhIG1ham9yIGltcHJvdmVtZW50LCBzaW5jZQorICAg aW4gcHJpb3IgcmVsZWFzZXMsIEMtS2VybWl0IGhhZCB0byBwaWNrIHRoZSAibW9zdCBhcHByb3By aWF0ZSIgdHJhbnNmZXIKKyAgIGNoYXJhY3Rlci1zZXQgYXMgdGhlIGludGVybWVkaWF0ZSBzZXQs IGFuZCB0aGlzIHdvdWxkIHJlc3VsdCBpbiB0aGUKKyAgIGxvc3Mgb2YgYW55IGNoYXJhY3RlcnMg dGhhdCB0aGUgc291cmNlIGFuZCB0YXJnZXQgc2V0cyBoYWQgaW4gY29tbW9uCisgICBidXQgd2Vy ZSBsYWNraW5nIGZyb20gdGhlIGludGVybWVkaWF0ZSBzZXQgKGZvciBleGFtcGxlIHRoZSBPRSBk aWdyYXBoCisgICB3aGVuIHRyYW5zbGF0aW5nIGZyb20gTmVYVCB0byBERUMgTUNTIHRocm91Z2gg TGF0aW4tMSkuIFRoaXMgbmV2ZXIKKyAgIGhhcHBlbnMgd2hlbiBVbmljb2RlIGlzIHRoZSBpbnRl cm1lZGlhdGUgc2V0IGJlY2F1c2UgVW5pY29kZSBpcyBhCisgICBzdXBlcnNldCBvZiBhbGwgb3Ro ZXIgY2hhcmFjdGVyIHNldHMgc3VwcG9ydGVkIGJ5IEtlcm1pdC4gQSBtb3JlCisgICBkcmFtYXRp YyBleGFtcGxlIHdvdWxkIGJlIHRyYW5zbGF0aW9uIGJldHdlZW4gQ3lyaWxsaWMgUEMgY29kZSBw YWdlIDg2NgorICAgYW5kIEtPSTgtUiAoWzU1NF1TZWN0aW9uIDYuNCk7IGZvcm1lcmx5IGFsbCB0 aGUgbGluZS0gYW5kIGJveC1kcmF3aW5nCisgICBjaGFyYWN0ZXJzIHdvdWxkIGJlIGxvc3QgKHNp bmNlIElTTyA4ODU5LTUgZG9lcyBub3QgaGF2ZSBhbnkpOyBub3cgdGhlCisgICBvbmVzIHRoYXQg dGhlc2UgdHdvIHNldHMgaGF2ZSBpbiBjb21tb24gYXJlIHByZXNlcnZlZC4KKworICAgVUNTLTIg YW5kIFVURi04IGFyZSBub3cgYm90aCBzdXBwb3J0ZWQgYXMgc291cmNlLWZpbGUgYW5kCisgICBk ZXN0aW5hdGlvbi1maWxlIGNoYXJhY3RlciBzZXRzIGJ5IEMtS2VybWl0J3MgVFJBTlNMQVRFIGNv bW1hbmQsIGZvcgorICAgZXhhbXBsZToKKworICB0cmFuc2xhdGUgb29mYS50eHQgdWNzMiBsYXRp bjEgb29mYS1sMS50eHQKKworICAgdHJhbnNsYXRlcyBvb2ZhLnR4dCBmcm9tIFVDUy0yIHRvIExh dGluLTEsIHN0b3JpbmcgdGhlIHJlc3VsdCBhcworICAgb29mYS1sMS50eHQuIFNpbWlsYXJseToK KworICB0cmFuc2xhdGUgb29mYS50eHQgdXRmOCBsYXRpbjEgb29mYS1sMS50eHQKKyAgdHJhbnNs YXRlIG9vZmEudHh0IGxhdGluMSB1Y3MyIG9vZmEtdWNzMi50eHQKKyAgdHJhbnNsYXRlIG9vZmEu dHh0IGxhdGluMSB1dGY4IG9vZmEtdXRmOC50eHQKKyAgdHJhbnNsYXRlIG9vZmEudHh0IHVjczIg dXRmOCBvb2ZhLXV0ZjgudHh0CisgIHRyYW5zbGF0ZSBvb2ZhLnR4dCB1dGY4IHVjczIgb29mYS11 Y3MyLnR4dAorCisgICBUcmVhdG1lbnQgb2YgdGhlIFVDUy0yIEJPTSBpcyBleGFjdGx5IHRoZSBz YW1lIGFzIGZvciBmaWxlIHRyYW5zZmVyLgorICAgTm90ZSB0aGF0IGlmIGEgVUNTLTIgc291cmNl IGZpbGUgaXMgaW4gdGhlICJ3cm9uZyIgYnl0ZSBvcmRlciBhbmQgbGFja3MKKyAgIGEgQk9NLCBh bmQgeW91IGRvbid0IHRlbGwgS2VybWl0IGFib3V0IGl0IHdpdGggU0VUIEZJTEUgVUNTIEJZVEUt T1JERVIsCisgICB0aGUgcmVzdWx0IG9mIHRoZSB0cmFuc2xhdGlvbiBpcyB0b3RhbCBnaWJiZXJp c2guIFJlY2FsbCB0aGF0IHlvdSBjYW4KKyAgIHVzZSBDT1BZIC9TV0FQLUJZVEVTIHRvIHN3aXRj aCB0aGUgYnl0ZSBvcmRlciBvZiBhbiBlcnJhbnQgVUNTLTIgZmlsZQorICAgKG9yIGFueSBvdGhl ciBmaWxlIGZvciB0aGF0IG1hdHRlciwgaWYgeW91IGNhbiB0aGluayBvZiBhIHJlYXNvbiB0byku CisgICBBbHNvIG5vdGUgdGhhdDoKKworICB0cmFuc2xhdGUgb29mYS50eHQgdWNzMiB1Y3MyIG5l dy50eHQKKworICAgUHJvZHVjZXMgYSByZXN1bHQgaW4gdGhlIG5hdGl2ZSAob3IgU0VUIEZJTEUg VUNTKSBieXRlLW9yZGVyIGFzIGxvbmcgYXMKKyAgIG9vZmEudHh0IGhhcyBhIEJPTS4KKworICAg QXMgYSBzaWRlIGJlbmVmaXQgb2YgdGhlIFVuaWNvZGUgd29yaywgdGhlIFRSQU5TTEFURSBjb21t YW5kIG5vdyB3b3JrcworICAgZm9yIHRoZSBmaXJzdCB0aW1lIGFsc28gZm9yIGFsbCBKYXBhbmVz ZSBjaGFyYWN0ZXIgc2V0cyB0aGF0IEtlcm1pdAorICAgc3VwcG9ydHMuIEluIG90aGVyIHdvcmRz LCBpZiB5b3UgaGF2ZSBhIEphcGFuZXNlIHRleHQgZmlsZSBpbiBhbnkgb2YKKyAgIHRoZSBmb2xs b3dpbmcgZW5jb2RpbmdzOgorCisgIEVVQy1KUAorICBTaGlmdC1KSVMKKyAgSklTLTcKKyAgVUNT LTIKKyAgVVRGLTgKKworICAgWW91IGNhbiB1c2UgdGhlIFRSQU5TTEFURSBjb21tYW5kIHRvIGNv bnZlcnQgdG8gYW55IG90aGVyIGVuY29kaW5nIGZyb20KKyAgIHRoZSBzYW1lIGxpc3QuCisKKyAg ICA2LjYuNS4zLiBUZXJtaW5hbCBDb25uZWN0aW9uCisKKyAgIFRoZSBDT05ORUNUIGNvbW1hbmQg bm93IGFsbG93cyBVVEYtOCBhcyBhIGxvY2FsIG9yIHJlbW90ZSB0ZXJtaW5hbAorICAgY2hhcmFj dGVyLXNldDoKKworICBTRVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCB7IC4uLiwgVVRGOCB9IHsg Li4uLCBVVEY4IH0KKyAgU0VUIFRFUk1JTkFMIFJFTU9URS1DSEFSQUNURVItU0VUIHsgLi4uLCBV VEY4IH0KKyAgU0VUIFRFUk1JTkFMIExPQ0FMLUNIQVJBQ1RFUi1TRVQgeyAuLi4sIFVURjggfQor CisgICAoUmVjYWxsIHRoYXQgS2VybWl0J3MgdGVybWluYWwgY2hhcmFjdGVyLXNldCBoYXMgdHdv ICJlbmRzIiAtLSB0aGUgc2V0CisgICB1c2VkIG9uIHRoZSBob3N0IHRvIHdoaWNoIEtlcm1pdCBp cyBjb25uZWN0ZWQsIGFuZCB0aGUgc2V0IHVzZWQgb24gdGhlCisgICBsb2NhbCBrZXlib2FyZCBh bmQgc2NyZWVuLikKKworICAgVUNTLTIgaXMgbm90IHN1cHBvcnRlZCBhcyBhIHRlcm1pbmFsIGNo YXJhY3Rlci1zZXQgKGVpdGhlciBlbmQpIHNpbmNlCisgICAoYSkgaXQgaXMgbm90IHVzZWQgdGhh dCB3YXkgYW55d2hlcmUgdG8gb3VyIGtub3dsZWRnZSwgYW5kIChiKSB0aGUKKyAgIHByb2JsZW1z IG9mIEVuZGlhbm5lc3MgYW5kIHRoZSBoaWdoIGxpa2VsaWhvb2Qgb2YgbG9zcyBvZgorICAgc3lu Y2hyb25pemF0aW9uIG1ha2UgaXQgaW1wcmFjdGljYWwuIChUZWxlY29tbXVuaWNhdGlvbnMgaXMK KyAgIGJ5dGUtb3JpZW50ZWQ7IGlmIG9uZSBieXRlLCBvciBhbnkgb2RkIG51bWJlciBvZiBieXRl cywgaXMgbG9zdCBiZWNhdXNlCisgICBvZiBidWZmZXIgb3ZlcnJ1bnMsIGNpcmN1aXQgcmVzZXRz LCBldGMgKG9yIGxpa2V3aXNlIGlmIGEgYnVyc3Qgb2YKKyAgIG5vaXNlIGFwcGVhcnMgdGhhdCB0 YWtlcyB0aGUgZ3Vpc2Ugb2YgYW4gb2RkIG51bWJlciBvZiBieXRlcyksIHRoZSBieXRlCisgICBv cmRlciBvZiB0aGUgc3Vic2VxdWVudCBkYXRhIHN0cmVhbSB3aWxsIGJlIGJhY2t3YXJkczsgdW5s aWtlIFVURi04IGFuZAorICAgdHJhZGl0aW9uYWwgYnl0ZS1iYXNlZCBjaGFyYWN0ZXIgc2V0cywg VUNTLTIgaXMgbm90ICJzZWxmCisgICBzeW5jaHJvbml6aW5nIi4pCisKKyAgIFVURi04IGRvZXMg bm90IGhhdmUgYnl0ZS1vcmRlciBvciBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMgYW5kIGlzCisg ICBncm93aW5nIGluIHBvcHVsYXJpdHkgYXMgYSB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0IGFzIHdl bGwgYXMgaW4gb3RoZXIKKyAgIGFwcGxpY2F0aW9uIGFyZWFzLiBJdCBhbGxvd3MgYSBzaW5nbGUg dGVybWluYWwgc2Vzc2lvbiB0byB1c2UgbXVsdGlwbGUKKyAgIHNjcmlwdHMgKFJvbWFuLCBDeXJp bGxpYywgR3JlZWssIGV0Yykgd2l0aG91dCBJU08gMjAyMiBjaGFyYWN0ZXItc2V0CisgICBzd2l0 Y2hpbmcgKHdoaWNoIHRlcm1pbmFsIGVtdWxhdG9ycyBsaWtlIEtlcm1pdCA5NSBjYW4gaGFuZGxl IGJ1dCBmZXcKKyAgIGhvc3QgYXBwbGljYXRpb25zIHVuZGVyc3RhbmQgb3IgdXNlKSwgYW5kIG1l c2hlcyBuaWNlbHkgd2l0aCB0aGUKKyAgIFVuaWNvZGUgc2NyZWVuIGZvbnRzIHRoYXQgYXJlIGJl Z2lubmluZyB0byBhcHBlYXIuCisKKyAgIFVURi04IHdhcyBmaXJzdCB1c2VkIGluIFBsYW4gOSBh bmQgc29vbiB3aWxsIGJlIGF2YWlsYWJsZSBpbiBMaW51eC4gSXQKKyAgIHdpbGwgcHJvYmFibHkg c3ByZWFkIGZyb20gdGhlcmUgKFVuaWNvZGUgaW4gc29tZSBmb3JtIGlzLCBvZiBjb3Vyc2UsCisg ICBhbHNvIHVzZWQgaW4gV2luZG93cyBOVCwgYnV0IG9ubHkgaW50ZXJuYWxseSAtLSBub3QgZm9y IGFjY2VzcyBmcm9tCisgICBvdXRzaWRlKS4KKworICAgVG8gdXNlIFVURi04IG9yIGFueSBvdGhl ciBjaGFyYWN0ZXIgc2V0IHRoYXQgdXNlcyA4LWJpdCBieXRlcyBpbiB5b3VyCisgICB0ZXJtaW5h bCBzZXNzaW9uLCBiZSBzdXJlIHRvIHRlbGwgQy1LZXJtaXQgdG86CisKKyAgU0VUIFRFUk1JTkFM IEJZVEVTSVpFIDgKKyAgU0VUIENPTU1BTkQgQllURVNJWkUgOAorICBTRVQgUEFSSVRZIE5PTkUK KworICAgKG9yIHVzZSB0aGUgc2hvcnRjdXQgY29tbWFuZCwgRUlHSFRCSVQsIHdoaWNoIGRvZXMg YWxsIHRocmVlIGF0IG9uY2UpLgorCisgICBJbiBhIHNldHVwIHdoZXJlIHlvdXIgbG9jYWwgS2Vy bWl0IHByb2dyYW0gdXNlcyBhIHNpbmdsZS1ieXRlIGNoYXJhY3RlcgorICAgc2V0IHN1Y2ggYXMg UEMgQ29kZSBQYWdlIDg1MCBhbmQgdGhlIHJlbW90ZSBob3N0IHVzZXMgVVRGLTg6CisKKyAgU0VU IFRFUk0gQ0hBUiBVVEY4IENQODUwCisKKyAgIG9yOgorCisgIFNFVCBURVJNIFJFTU9URSBDSEFS IFVURjgKKyAgU0VUIFRFUk0gTE9DQUwgQ0hBUiBDUDg1MAorCisgICBhbGwgd29ya3MgYXMgZXhw ZWN0ZWQuIFVURi04IHRleHQgb24gdGhlIHJlbW90ZSBkaXNwbGF5cyBjb3JyZWN0bHkgb24KKyAg IHlvdXIgc2NyZWVuLCBhbmQgd2hlbiB5b3UgdHlwZSBDUDg1MCBjaGFyYWN0ZXJzLCB0aGV5IGFy ZSB0cmFuc2xhdGVkIHRvCisgICBVVEYtOCBzZXF1ZW5jZXMgZm9yIHRyYW5zbWlzc2lvbiwgYW5k IHRoZSBlY2hvIGZyb20gdGhlIGhvc3QgaXMKKyAgIHRyYW5zbGF0ZWQgZnJvbSBVVEYtOCBiYWNr IHRvIENQODUwLiBUZWxuZXQgbmVnb3RpYXRpb25zIGFuZAorICAgYXV0b2Rvd25sb2FkIHRha2Ug cGxhY2UgYmVmb3JlIGFueSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIGFuZCB3b3JrCisgICBh cyBiZWZvcmUuIFRoZSBzZXNzaW9uIGxvZyAoaWYgdGV4dCBtb2RlIHdhcyBzZWxlY3RlZCBmb3Ig aXQpIGNvbnRhaW5zCisgICBvbmx5IHRoZSBsb2NhbCB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0LiBB bmQgc28gb24uCisKKyAgIEtlcm1pdCBtZXJlbHkgc3VwcGxpZXMgdHJhbnNsYXRpb25zIGZyb20g VVRGLTggdG8geW91ciBsb2NhbCB0ZXJtaW5hbAorICAgY2hhcmFjdGVyLXNldCAodGhpcyBpbmNs dWRlcyB0cmVhdGluZyBVVEYtOCBMaW5lIFNlcGFyYXRvciBhbmQKKyAgIFBhcmFncmFwaCBzZXBh cmF0b3IgYXMgQ1JMRikuIEhvd2V2ZXIsIEtlcm1pdCBkb2VzIGRvZXMgbm90LCBhdAorICAgcHJl c2VudCwgcGVyZm9ybSAiY2Fub25pY2FsaXphdGlvbiIgb2YgY29tcG9zZWQgc2VxdWVuY2VzLCBu b3IgZG9lcyBpdAorICAgYXV0b21hdGljYWxseSBleGVjdXRlIGJpZGlyZWN0aW9uYWxpdHkgYWxn b3JpdGhtcyBmb3IgZGlzcGxheSBvZgorICAgbWl4ZWQtZGlyZWN0aW9uIHRleHQgKGUuZy4gSGVi cmV3IGFuZCBFbmdsaXNoKS4gU3VjaCBwcmVzZW50YXRpb24KKyAgIGlzc3VlcywgbGlrZSBhbGwg b3RoZXJzIGluIHRoZSB0ZXJtaW5hbC1ob3N0IHJlZ2ltZSwgYXJlIGxlZnQgdG8gdGhlCisgICBo b3N0LgorCisgICBCeSB0aGUgd2F5LCBDLUtlcm1pdCBhbHNvIGFsbG93cyBVVEYtOCB0byBiZSB0 aGUgbG9jYWwgZW5kIG9mIHRoZQorICAgdGVybWluYWwgY2hhcmFjdGVyLXNldCwgYnV0IHNvIGZh ciB0aGlzIGNvZGUgaXMgbm90IHRlc3RlZCwgc2luY2Ugd2UKKyAgIGRvbid0IGhhdmUgYSBVVEYt OCBjb25zb2xlIG9yIHRlcm1pbmFsIHRvIHdvcmsgd2l0aC4gSG93ZXZlciwgaXQgY2FuIGJlCisg ICBzdGF0ZWQgd2l0aG91dCBkb3VidCB0aGF0IEMtS2VybWl0J3Mga2V5IG1hcHBpbmcgd2lsbCBu b3Qgd29yayBmb3IKKyAgIFVURi04IHZhbHVlcywgc2luY2UgKGEpIHRoZSBrZXkgbWFwIGlzIGlu ZGV4ZWQgYnkgOC1iaXQgYnl0ZSB2YWx1ZXMgYW5kCisgICAoYikgQy1LZXJtaXQgcmVhZHMga2V5 c3Ryb2tlcyBhIGJ5dGUgYXQgYSB0aW1lICh0aGVzZSBjb21tZW50cyBkbyBub3QKKyAgIGFwcGx5 IHRvIEs5NSwgd2hpY2ggaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGtleWJvYXJkIGFuZCBjYW4g cmVhZAorICAgIndpZGUiIGtleWNvZGVzIGFuZCB1c2VzIHRoZW0gdG8gaW5kZXggYSAid2lkZSIg a2V5bWFwKS4KKworICAgUmVzdHJpY3Rpb25zOiBBcyBub3RlZCwgdGhlIENPTk5FQ1QgY29tbWFu ZCBkb2VzIG5vdCBzdXBwb3J0IFVDUy0yIGFzIGEKKyAgIFJFTU9URSBURVJNSU5BTCBjaGFyYWN0 ZXItc2V0LiBOZWl0aGVyIGRvZXMgaXQgc3VwcG9ydCB0aGUgSmFwYW5lc2UKKyAgIHNldHMgRVVD LUpQLCBKSVMtNywgYW5kIFNoaWZ0LUpJUy4gU3VwcG9ydCBmb3IgdGhlIEphcGFuZXNlIHNldHMg KGFuZAorICAgcG9zc2libHkgQ2hpbmVzZSBhbmQgS29yZWFuIHRvbykgbWlnaHQgYmUgYWRkZWQg aW4gYSBmdXR1cmUgcmVsZWFzZS4KKyAgIFNpbmNlIHRoZSBUUkFOU01JVCBjb21tYW5kIChuZXh0 IHNlY3Rpb24pIHVzZXMgdGhlIHNhbWUgUkVNT1RFIFRFUk1JTkFMCisgICBjaGFyYWN0ZXItc2V0 cyBhcyB0aGUgQ09OTkVDVCBjb21tYW5kLCBpdCBoYXMgdGhlIHNhbWUgcmVzdHJpY3Rpb25zLgor CisgICAgNi42LjUuNC4gVGhlIFRSQU5TTUlUIENvbW1hbmQKKworICAgQXMgZGVzY3JpYmVkIGlu IENoYXB0ZXIgMTUgb2YgWzU1NV1Vc2luZyBDLUtlcm1pdCBhbmQgWzU1Nl1TZWN0aW9uIDQuMjEK KyAgIG9mIHRoaXMgZG9jdW1lbnQsIHRoZSBUUkFOU01JVCBjb21tYW5kIGNhbiBiZSB1c2VkIHRv IHVwbG9hZCBhIGZpbGUKKyAgIHdpdGhvdXQgcHJvdG9jb2wsIG1vcmUgb3IgbGVzcyBhcyBpZiB5 b3Ugd2VyZSB0eXBpbmcgaXQgb24geW91cgorICAga2V5Ym9hcmQgd2hpbGUgY29ubmVjdGVkIHRv IHRoZSBob3N0LiBXaGVuIFRSQU5TTUlUdGluZyBpbiB0ZXh0IG1vZGUsCisgICB0aGUgZmlsZSdz IGNoYXJhY3RlciBzZXQgaXMgY29udmVydGVkIHRvIHRoZSBob3N0J3MgdW5sZXNzIHlvdSBoYXZl IFNFVAorICAgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCBUUkFOU1BBUkVOVCwgb3IgeW91IGluY2x1 ZGUgdGhlIG5ldyBUUkFOU01JVAorICAgc3dpdGNoLCAvVFJBTlNQQVJFTlQuCisKKyAgIEJlZm9y ZSBDLUtlcm1pdCA3LjAsIHRoZSBmaWxlIGNoYXJhY3Rlci1zZXQgd2FzIGFzc3VtZWQgdG8gYmUg dGhlIHNhbWUKKyAgIGFzIHRoZSBsb2NhbCBlbmQgb2YgdGhlIHRlcm1pbmFsIGNoYXJhY3Rlci1z ZXQsIGFuZCB0aGUgVFJBTlNNSVQKKyAgIGNvbW1hbmQgdXNlZCB0aGUgc2FtZSB0cmFuc2xhdGlv bnMgYXMgdGhlIENPTk5FQ1QgY29tbWFuZCwgaWdub3JpbmcgdGhlCisgICBmaWxlIGNoYXJhY3Rl ci1zZXQuCisKKyAgIEluIEMtS2VybWl0IDcuMCwgdGhhdCBhc3N1bXB0aW9uIChhIHBvb3Igb25l IHRvIGJlZ2luIHdpdGgpIGNhbiBubworICAgbG9uZ2VyIGJlIG1hZGUsIHNpbmNlIFVDUy0yIGNh biBiZSBhIGZpbGUgY2hhcmFjdGVyLXNldCBidXQgbm90IGEKKyAgIHRlcm1pbmFsIGNoYXJhY3Rl ci1zZXQuIFNvIG5vdyB0aGUgZmlsZSdzIGNoYXJhY3Rlci1zZXQgaXMgZ2l2ZW4gYnkKKyAgIHlv dXIgbW9zdCByZWNlbnQgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBjb21tYW5kLiBUaGUgaG9zdCdz IGNoYXJhY3RlcgorICAgc2V0IGlzIHRoZSByZW1vdGUgZW5kIG9mIHlvdXIgbW9zdCByZWNlbnQg U0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQKKyAgIGNvbW1hbmQ6CisKKyAgU0VUIFRFUk1JTkFM IENIQVJBQ1RFUi1TRVQgcmVtb3RlLXNldCBbIGxvY2FsLXNldCBdCisKKyAgIG9yOgorCisgIFNF VCBURVJNSU5BTCBSRU1PVEUtQ0hBUkFDVEVSLVNFVCByZW1vdGUtc2V0CisKKyAgIFRoZSBUUkFO U01JVCBjb21tYW5kIGNvbnZlcnRzIGVhY2ggc291cmNlLWZpbGUgY2hhcmFjdGVyIGZyb20gdGhl IEZJTEUKKyAgIGNoYXJhY3Rlci1zZXQgdG8gdGhlIFJFTU9URSBURVJNSU5BTCBjaGFyYWN0ZXIt c2V0LCBhbmQgdGhlbiB0cmFuc21pdHMKKyAgIHRoZSB0cmFuc2xhdGVkIGNoYXJhY3RlcnMgYWNj b3JkaW5nIHRvIHlvdXIgU0VUIFRSQU5TTUlUIHByZWZlcmVuY2VzCisgICAoQ2hhcHRlciAxNSku CisKKyAgIElmIHlvdSBoYXZlIFNFVCBUUkFOU01JVCBFQ0hPIE9OLCBhbmQgdGhlIGhvc3QgaXMg ZWNob2luZyB0aGUKKyAgIHRyYW5zbWl0dGVkIGNoYXJhY3RlcnMsIHRoZSBlY2hvcyBhcmUgY29u dmVydGVkIGZyb20gdGhlIHJlbW90ZQorICAgdGVybWluYWwgY2hhcmFjdGVyLXNldCB0byB0aGUg bG9jYWwgdGVybWluYWwgY2hhcmFjdGVyLXNldC4KKworICBbIEEgcGljdHVyZSB3b3VsZCBoZWxw Li4uIF0KKworICAgQ29uZnVzZWQ/IExldCdzIHdvcmsgdGhyb3VnaCBhbiBleGFtcGxlLiBTdXBw b3NlIHlvdXIgbG9jYWwgY29tcHV0ZXIgaXMKKyAgIGEgTmVYVHN0YXRpb24sIG9uIHdoaWNoIHRl eHQgZmlsZXMgYXJlIGVuY29kZWQgaW4gdGhlIE5lWFQgY2hhcmFjdGVyCisgICBzZXQsIGFuZCB0 aGF0IHRoZSByZW1vdGUgY29tcHV0ZXIgaXMgYSBEYXRhIEdlbmVyYWwgQVZpaU9OLCB3aGljaCB1 c2VzCisgICB0aGUgRGF0YSBHZW5lcmFsIEludGVybmF0aW9uYWwgY2hhcmFjdGVyIHNldC4gRnVy dGhlciBzdXBwb3NlIHRoYXQgeW91CisgICBhcmUgbG9nZ2VkIGluIHRvIHRoZSBOZVhUIGZyb20g YSBWVDIyMCB0ZXJtaW5hbCB3aGljaCB1c2VzIHRoZSBERUMKKyAgIE11bHRpbmF0aW9uYWwgY2hh cmFjdGVyIHNldC4KKworICAgWW91IG5lZWQgdG8gY29udmVydCB0aGUgZmlsZSBmcm9tIE5lWFQg ZW5jb2RpbmcgdG8gREcgZW5jb2RpbmcgYW5kCisgICBjb252ZXJ0IHRoZSBlY2hvZXMgZnJvbSBE RyBlbmNvZGluZyB0byBERUMgZW5jb2RpbmcuIFNvIG9uIHRoZSBOZVhULAorICAgdGVsbCBDLUtl cm1pdCB0bzoKKworICBlaWdodGJpdAorICBzZXQgZmlsZSBjaGFyYWN0ZXItc2V0IG5leHQKKyAg c2V0IHRlcm0gY2hhcmFjdGVyLXNldCBkZy1pbnRlcm5hdGlvbmFsIGRlYy1tY3MKKyAgdHJhbnNt aXQgL3RleHQgbmV4dGRhdGEudHh0CisKKyAgIChUaGlzIGFzc3VtZXMgeW91IGhhdmUgc29tZSBz b3J0IG9mIGNvbGxlY3Rpb24gcHJvY2VzcyBhbHJlYWR5IHNldCB1cAorICAgb24gdGhlIERhdGEg R2VuZXJhbCwgc3VjaCBhcyBhIHRleHQgZWRpdG9yIG9yIHRoZSB2ZW5lcmFibGUgImNhdCA+Cisg ICBmb28iLiBUaGUgRUlHSFRCSVQgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIFNFVCBURVJNSU5B TCBCWVRFU0laRSA4LAorICAgU0VUIENPTU1BTkQgQllURVNJWkUgOCwgU0VUIFBBUklUWSBOT05F LikKKworICAgVG8gZnVydGhlciBjb21wbGljYXRlIG1hdHRlcnMsIHN1cHBvc2UgeW91ciBsb2Nh bCB0ZXJtaW5hbCBjaGFyYWN0ZXIKKyAgIHNldCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVtb3RlIG9u ZSwgc28geW91IGRvbid0IG5lZWQgdGVybWluYWwKKyAgIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRp b24sIGJ1dCB5b3UgbmVlZCB0byBUUkFOU01JVCBhIGZpbGUgdGhhdCBpcyBpbiBhCisgICBkaWZm ZXJlbnQgY2hhcmFjdGVyIHNldCBhbmQgeW91IHdhbnQgaXQgdHJhbnNsYXRlZCB0byB0aGUgaG9z dCBzZXQuIEluCisgICB0aGlzIGNhc2UsIHVzZSBTRVQgVEVSTSBDSEFSQUNURVItU0VUIHRvIGFj dHVhbGx5IHNwZWNpZnkgdGhlIGNoYXJhY3RlcgorICAgc2V0IHVzZWQgb24gZWFjaCBlbmQsIHJh dGhlciB0aGFuIHNwZWNpZnlpbmcgVFJBTlNQQVJFTlQ6CisKKyAgZWlnaHRiaXQKKyAgc2V0IGZp bGUgY2hhcmFjdGVyLXNldCB1Y3MyCisgIHNldCB0ZXJtIGNoYXJhY3Rlci1zZXQgbGF0aW4xIGxh dGluMQorICB0cmFuc21pdCAvdGV4dCB1Y3MyZGF0YS50eHQKKworICAgVGhlIGRpc3RpbmN0aW9u IGJldHdlZW46CisKKyAgU0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgeHh4IHl5eQorCisgICAo d2hlcmUgeHh4IGFuZCB5eXkgYXJlIHRoZSBzYW1lIHNldCkgYW5kOgorCisgIFNFVCBURVJNSU5B TCBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5UCisKKyAgIGlzIG5ldyB0byBDLUtlcm1pdCA3LjAs IGJ1dCBhZmZlY3RzIG9ubHkgdGhlIFRSQU5TTUlUIGNvbW1hbmQuCisKKyAgIFRoZSBUUkFOU01J VCBjb21tYW5kIGN1cnJlbnRseSBkb2VzIG5vdGhpbmcgc3BlY2lhbCB3aXRoIFVDUy0yL1VURi04 CisgICBMaW5lIGFuZCBQYXJhZ3JhcGggU2VwYXJhdG9yIGNoYXJhY3RlcnM7IG1vcmUgZXhwZXJp ZW5jZSBpcyByZXF1aXJlZCB0bworICAgZmluZCBvdXQgaG93IHRoZXNlIGJlaGF2ZSBpbiBhIGdl bnVpbmUgVW5pY29kZSB0ZXJtaW5hbC1ob3N0IHNldHRpbmcuCisKKyAgIFJlc3RyaWN0aW9uczog QXMgbm90ZWQsIHRoZSBUUkFOU01JVCBjb21tYW5kIHRyYW5zbGF0ZXMgZnJvbSB0aGUgRklMRQor ICAgY2hhcmFjdGVyLXNldCB0byB0aGUgUkVNT1RFIFRFUk1JTkFMIGNoYXJhY3Rlci1zZXQuIFRo aXMgcnVsZXMgb3V0CisgICB0cmFuc2xhdGlvbnMgdG8gYW55IGNoYXJhY3RlciBzZXQgdGhhdCBp cyBub3Qgc3VwcG9ydGVkIGFzIGEgUkVNT1RFCisgICBURVJNSU5BTCBjaGFyYWN0ZXItc2V0LCBz dWNoIGFzIFVDUy0yLCBFVUMtSlAsIEpJUy03LCBhbmQgU2hpZnQtSklTLgorCisgICAgNi42LjUu NS4gU3VtbWFyeSBvZiBLZXJtaXQgVW5pY29kZSBDb21tYW5kcworCisgICBTcGVjaWZ5aW5nIGZp bGUgY2hhcmFjdGVyLXNldCBhbmQgYnl0ZSBvcmRlcjoKKyAgICAgICAgICBTRVQgRklMRSBDSEFS QUNURVItU0VUIHsgLi4uLCBVQ1MyLCBVVEY4IH0KKyAgICAgICAgICBSRU1PVEUgU0VUIEZJTEUg Q0hBUkFDVEVSLVNFVCB7IC4uLiwgVUNTMiwgVVRGOCB9IChTZWUgbmV4dAorICAgICAgICAgIHNl Y3Rpb24pCisgICAgICAgICAgU0VUIEZJTEUgVUNTIEJPTSB7IE9OLCBPRkYgfQorICAgICAgICAg IFNFVCBGSUxFIFVDUyBCWVRFLU9SREVSIHsgQklHLUVORElBTiwgTElUVExFLUVORElBTiB9CisK KyAgIFNwZWNpZnlpbmcgdGhlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQ6CisgICAgICAgICAgU0VU IFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgeyAuLi4sIFVDUy0yLCBVVEYtOCB9CisgICAgICAgICAg UkVNT1RFIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIHsgLi4uLCBVQ1MtMiwgVVRGLTggfQor CisgICBTcGVjaWZ5aW5nIHRoZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0OgorICAgICAgICAgIFNF VCBURVJNSU5BTCBDSEFSQUNURVItU0VUIHsgLi4uLCBVVEY4IH0geyAuLi4sIFVURjggfQorICAg ICAgICAgIFNFVCBURVJNSU5BTCBSRU1PVEUtQ0hBUkFDVEVSLVNFVCB7IC4uLiwgVVRGOCB9Cisg ICAgICAgICAgU0VUIFRFUk1JTkFMIExPQ0FMLUNIQVJBQ1RFUi1TRVQgeyAuLi4sIFVURjggfQor CisgICBEaXNwbGF5aW5nIHNldHRpbmdzOgorICAgICAgICAgIFNIT1cgRklMRQorICAgICAgICAg IFNIT1cgVFJBTlNGRVIKKyAgICAgICAgICBTSE9XIFRFUk1JTkFMCisgICAgICAgICAgU0hPVyBD SEFSQUNURVItU0VUUworCisgICBDb21tYW5kcyB0aGF0IHVzZSB0aGVzZSBzZXR0aW5ncyBpbmNs dWRlOgorICAgICAgICAgIFNFTkQsIFJFQ0VJVkUsIEdFVCwgZXRjLgorICAgICAgICAgIENPTk5F Q1QKKyAgICAgICAgICBUUkFOU01JVAorICAgICAgICAgIExPRyBTRVNTSU9OCisKKyAgIENvbnZl cnRpbmcgZmlsZXM6CisgICAgICAgICAgVFJBTlNMQVRFIGluZmlsZSB7IC4uLiwgVUNTLTIsIFVU Ri04IH0geyAuLi4sIFVDUy0yLCBVVEYtOCB9CisgICAgICAgICAgb3V0ZmlsZQorICAgICAgICAg IENPUFkgL1NXQVAtQllURVMgaW5maWxlIG91dGZpbGUKKworICA2LjcuIENsaWVudC9TZXJ2ZXIg Q2hhcmFjdGVyLVNldCBTd2l0Y2hpbmcKKworICAgQSBzaW1wbGUgbWVjaGFuaXNtIGhhcyBiZWVu IGFkZGVkIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gY2hhbmdlIHRoZQorICAgc2VydmVyJ3MgRklM RSBDSEFSQUNURVItU0VUOgorCisgICBSRU1PVEUgU0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBuYW1l CisgICAgICAgICAgVGhlIGNsaWVudCBhc2tzIHRoZSBzZXJ2ZXIgdG8gY2hhbmdlIGl0cyBmaWxl IGNoYXJhY3Rlci1zZXQgdG8KKyAgICAgICAgICB0aGUgb25lIGdpdmVuLiBUaGUgbmFtZSBtdXN0 IG1hdGNoIG9uZSBvZiB0aGUgc2VydmVyJ3MgZmlsZQorICAgICAgICAgIGNoYXJhY3Rlci1zZXQg bmFtZXMuIEZvciBjb252ZW5pZW5jZSwgQy1LZXJtaXQgdXNlcyBpdHMgb3duIGZpbGUKKyAgICAg ICAgICBjaGFyYWN0ZXItc2V0IGtleXdvcmQgbGlzdCBmb3IgcGFyc2luZyB0aGlzIGNvbW1hbmQg c28geW91IGNhbgorICAgICAgICAgIHVzZSA/IGZvciBoZWxwIGFuZCBUYWIgb3IgRXNjIGZvciBj b21wbGV0aW9uLiBIb3dldmVyLCBzaW5jZSB0aGUKKyAgICAgICAgICBzZXJ2ZXIgbWlnaHQgaGF2 ZSBhIGRpZmZlcmVudCByZXBlcnRvaXJlIChvciBldmVuIHVzZSBkaWZmZXJlbnQKKyAgICAgICAg ICBuYW1lcyBmb3IgdGhlIHNhbWUgc2V0cyksIEMtS2VybWl0IGFjY2VwdHMgYW55IHN0cmluZyB5 b3Ugc3VwcGx5CisgICAgICAgICAgYW5kIHNlbmRzIGl0IHRvIHRoZSBzZXJ2ZXIuIFRoZSBzZXJ2 ZXIsIGlmIGl0IHN1cHBvcnRzIHRoaXMKKyAgICAgICAgICBjb21tYW5kIChDLUtlcm1pdCA3LjAg YW5kIEs5NSAxLjEuMTkgZG8pLCBzZXRzIGl0cyBmaWxlCisgICAgICAgICAgY2hhcmFjdGVyLXNl dCBhcyByZXF1ZXN0ZWQsIGFuZCBhbHNvIGRpc2FibGVzIGF1dG9tYXRpYworICAgICAgICAgIGNo YXJhY3Rlci1zZXQgc3dpdGNoaW5nIChbNTU3XVNlY3Rpb24gNi41KS4gSWYgdGhlIHNlcnZlciBk b2VzCisgICAgICAgICAgbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kIG9yIGlmIGl0IGRvZXMgbm90 IHN1cHBvcnQgdGhlIGdpdmVuCisgICAgICAgICAgY2hhcmFjdGVyIHNldCwgdGhlIFJFTU9URSBT RVQgRklMRSBDSEFSQUNURVItU0VUIGNvbW1hbmQgZmFpbHMuCisKKyAgIEhlcmUncyBhbiBleGFt cGxlIHRoYXQgc2VuZHMgYSBKYXBhbmVzZSB0ZXh0IGZpbGUgZW5jb2RlZCBpbiBTaGlmdC1KSVMK KyAgIHRvIGEgc2VydmVyIHVzaW5nIGV2ZXJ5IGNvbWJpbmF0aW9uIG9mIEtlcm1pdCdzIEphcGFu ZXNlLWNhcGFibGUgZmlsZQorICAgYW5kIHRyYW5zZmVyIGNoYXJhY3RlciBzZXRzOgorCisgIGRj bCBcJnhbXSA9IGV1YyB1Y3MyIHV0ZjggICAgICAgICAgICAgOyB0cmFuc2ZlciBjaGFyYWN0ZXIt c2V0cworICBkY2wgXCZ5W10gPSBldSB1YyB1dCAgICAgICAgICAgICAgICAgIDsgMi1sZXR0ZXIg YWJicmV2aWF0aW9ucyBmb3IgdGhlbQorICBkY2wgXCZmW10gPSBzaGlmdCBldWMgamlzNyB1Y3My IHV0ZjggIDsgZmlsZSBjaGFyYWN0ZXItc2V0cworICBkY2wgXCZnW10gPSBzaiBldSBqNyB1YyB1 dCAgICAgICAgICAgIDsgMi1sZXR0ZXIgYWJicmV2aWF0aW9ucworCisgIHNldCBmaWxlIGNoYXIg c2hpZnQtamlzICAgICAgICAgICAgICAgOyBsb2NhbCBmaWxlIGNoYXJhY3Rlci1zZXQgaXMgU2hp ZnQtSklTCisgIGZvciBcJWkgMSBcZmRpbSgmeCkgMSB7ICAgICAgICAgICAgICAgOyBmb3IgZWFj aCB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0Li4uCisgICAgICBzZXQgeGZlciBjaGFyIFwmeFtcJWld ICAgICAgICAgICAgOyBzZXQgaXQKKyAgICAgIGZvciBcJWogMSBcZmRpbSgmZikgMSB7ICAgICAg ICAgICA7IGZvciBlYWNoIHJlbW90ZSBmaWxlIGNoYXJhY3Rlci1zZXQuLi4KKyAgICAgICAgICBy ZW1vdGUgc2V0IGZpbGUgY2hhciBcJmZbXCVqXSA7IHNldCBpdAorICAgICAgICAgIGlmIGZhaWwg ZXhpdCAxIFNFUlZFUiBSRUpFQ1RFRCBDSEFSU0VUCisgICAgICAgICAgc2VuZCAvdGV4dCBtZWli by1zai5odG1sIG1laWJvLXNqLVwmeVtcJWldLVwmZ1tcJWpdLnR4dCA7IHNlbmQgdGhlIGZpbAor ZQorICAgICAgICAgIGlmIGZhaWwgZXhpdCAxIFRSQU5TRkVSIEZBSUxFRAorICAgICAgfQorICB9 CisKKyAgIFRoZSBLZXJtaXQtMzcwIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFJFTU9URSBTRVQg RklMRSBDSEFSQUNURVItU0VULAorICAgYnV0IHNpbmNlIGl0IHN1cHBvcnRzIFJFTU9URSBLRVJN SVQgY29tbWFuZHMsIHlvdSBjYW4gZ2V0IHRoZSBzYW1lCisgICBlZmZlY3Qgd2l0aCBSRU1PVEUg S0VSTUlUIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgbmFtZS4KKworICA3LiBTQ1JJUFQgUFJPR1JB TU1JTkcKKworICAgKEFsc28gc2VlIFs1NThdU2VjdGlvbiAyLjgsIFNjcmlwdGluZyBMb2NhbCBQ cm9ncmFtcy4pCisKKyAgNy4wLiBCdWcgRml4ZXMKKworICAgVGhlIGZvbGxvd2luZyBzY3JpcHQg cHJvZ3JhbW1pbmcgYnVncyB3ZXJlIGZpeGVkIGluIEMtS2VybWl0IDcuMDoKKworICAgICAqIElG IEVYSVNUIGFuZCBJRiBESVJFQ1RPUlkgd2VyZSBmaXhlZCB0byBwcm9wZXJseSBzdHJpcCBicmFj ZXMgZnJvbQorICAgICAgIGFyb3VuZCB0aGVpciBhcmd1bWVudHMsIHNvICJpZiBkaXJlY3Rvcnkg e0M6XFByb2dyYW0gRmlsZXN9IiwgZXRjLAorICAgICAgIHdvdWxkIHdvcmsgYXMgZXhwZWN0ZWQu IEhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgZmlsZSBvcgorICAgICAgIGRpcmVjdG9y eSBuYW1lIGlzIGFjdHVhbGx5IGVuY2xvc2VkIGluIGJyYWNlcywgdGhlIGJyYWNlcyBtdXN0IGJl CisgICAgICAgZG91YmxlZC4KKyAgICAgKiBUaGUgUkVBRCBjb21tYW5kIGRpZCBub3QgZmFpbCBp ZiB0aGUgUkVBRCBmaWxlIHdhc24ndCBvcGVuOyBub3cgaXQKKyAgICAgICBkb2VzLgorICAgICAq IFRoZSBSRUFEIGNvbW1hbmQgcmVmdXNlZCB0byByZWFkIHRoZSBsYXN0IG9yIG9ubHkgbGluZSBv ZiBhIGZpbGUgaWYKKyAgICAgICBpdCBkaWQgbm90IGVuZCB3aXRoIGEgcHJvcGVyIGxpbmUgdGVy bWluYXRvcjsgbm93IGl0IGRvZXMuCisgICAgICogVGhlIEVORCBjb21tYW5kLCB3aGVuIGdpdmVu IGZyb20gd2l0aGluIGEgU1dJVENIIHN0YXRlbWVudCwgZGlkIG5vdAorICAgICAgIGV4aXQgZnJv bSB0aGUgY3VycmVudCBtYWNybyBvciBjb21tYW5kIGZpbGU7IGluc3RlYWQgaXQganVzdAorICAg ICAgIHRlcm1pbmF0ZWQgdGhlIFNXSVRDSC4KKworICA3LjEuIFRoZSBJTlBVVCBDb21tYW5kCisK KyAgIDcuMS4xLiBJTlBVVCBUaW1lb3V0cworCisgICBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIElO UFVUIGNvbW1hbmQgb24gcGFnZSA0MjIgZmFpbHMgdG8gbWVudGlvbiB0aGUKKyAgIGZvbGxvd2lu ZyB0d28gcG9pbnRzIGFib3V0IHRoZSB0aW1lb3V0ICh3aGljaCBhcHBseSB0byBDLUtlcm1pdCA2 LjAgYW5kCisgICBsYXRlcik6CisKKyAgICAxLiAiSU5QVVQgLTEgdGV4dCIgKG9yICJJTlBVVCBc JXggdGV4dCIsIHdoZXJlIFwleCBpcyBhbnkgdmFyaWFibGUKKyAgICAgICB3aG9zZSB2YWx1ZSBp cyAtMSBvciBsZXNzKSBtZWFucyAid2FpdCBmb3JldmVyIi4gVGhpcyBmb3JtIG9mIHRoZQorICAg ICAgIElOUFVUIGNvbW1hbmQgZmFpbHMgb25seSBpZiBpdCBpcyBpbnRlcnJ1cHRlZCwgc2luY2Ug aXQgd2lsbCBuZXZlcgorICAgICAgIHRpbWUgb3V0LgorICAgIDIuIElOUFVUIDAgcGVyZm9ybXMg YSBub25ibG9ja2luZyByZWFkIG9mIG1hdGVyaWFsIHRoYXQgaGFzIGFscmVhZHkKKyAgICAgICBh cnJpdmVkIGJ1dCBoYXMgbm90IHlldCBiZWVuIHJlYWQsIGFuZCBzdWNjZWVkcyBpbW1lZGlhdGVs eSBpZiB0aGUKKyAgICAgICB0YXJnZXQgc3RyaW5nIGlzIGZvdW5kLCBvciBmYWlscyBpbW1lZGlh dGVseSBpZiBpdCBpcyBub3QgZm91bmQuCisKKyAgIFRoZSBzYW1lIHBvaW50cyBhcHBseSB0byBN SU5QVVQuIFJFSU5QVVQgaWdub3JlcyBpdHMgdGltZW91dCBwYXJhbWV0ZXIuCisKKyAgICA3LjEu Mi4gTmV3IElOUFVUIENvbnRyb2xzCisKKyAgIFRoZSBmb2xsb3dpbmcgbmV3IElOUFVUIGNvbnRy b2xzIHdlcmUgYWRkZWQgaW4gdmVyc2lvbiA3LjA6CisKKyAgIFNFVCBJTlBVVCBBVVRPRE9XTkxP QUQgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBFeHBsYWluZWQgaW4gWzU1OV1TZWN0aW9uIDcuNy4K KworICAgU0VUIElOUFVUIENBTkNFTExBVElPTiB7IE9OLCBPRkYgfQorICAgICAgICAgIFRoaXMg Z292ZXJucyB3aGV0aGVyIGFuIElOUFVUIGNvbW1hbmQgY2FuIGJlIGNhbmNlbGVkIGJ5CisgICAg ICAgICAgInByZXNzaW5nIGFueSBrZXkiIG9uIHRoZSBrZXlib2FyZC4gTm9ybWFsbHkgaXQgY2Fu IGJlLCBpbiB3aGljaAorICAgICAgICAgIGNhc2UgdGhlIElOUFVUIGNvbW1hbmQgZmFpbHMgaW1t ZWRpYXRlbHkgYW5kIFx2KGluc3RhdHVzKSBpcyBzZXQKKyAgICAgICAgICB0byAyLCBpbmRpY2F0 aW5nIGludGVycnVwdGlvbi4gU0VUIElOUFVUIENBTkNFTExBVElPTiBPRkYKKyAgICAgICAgICBk aXNhYmxlcyBrZXlib2FyZCBjYW5jZWxsYXRpb25zOyB0aHVzIGlmIHRoZSBzZWFyY2ggdGV4dCBp cyBub3QKKyAgICAgICAgICBlbmNvdW50ZXJlZCwgdGhlIElOUFVUIGNvbW1hbmQgd2lsbCBydW4g Zm9yIGl0cyBlbnRpcmUgdGltZW91dAorICAgICAgICAgIGludGVydmFsLiBTRVQgSU5QVVQgQ0FO Q0VMTEFUSU9OIE9GRiBkb2VzIG5vdCBkaXNhYmxlCisgICAgICAgICAgaW50ZXJydXB0aW9uIGJ5 IEN0cmwtQywgaG93ZXZlcjsgZXZlcnkgY29tbWFuZCBuZWVkcyBhbgorICAgICAgICAgIGVtZXJn ZW5jeSBleGl0LiAoSWYgeW91IHJlYWxseSB3YW50IHRvIGRpc2FibGUgaW50ZXJydXB0aW9uIGJ5 CisgICAgICAgICAgQ3RybC1DLCB1c2UgU0VUIENPTU1BTkQgSU5URVJSVVBUSU9OIE9GRi4pCisK KyAgIEFsc28gc2VlIFs1NjBdU2VjdGlvbiA3LjIgZm9yIGFueSBuZXcgdmFyaWFibGVzIHJlbGF0 ZWQgdG8gSU5QVVQuCisKKyAgICA3LjEuMy4gSU5QVVQgd2l0aCBQYXR0ZXJuIE1hdGNoaW5nCisK KyAgIEMtS2VybWl0IDcuMCBhbGxvd3MgSU5QVVQsIE1JTlBVVCwgYW5kIFJFSU5QVVQgdGFyZ2V0 cyB0byBiZSBhIHBhdHRlcm4KKyAgIChleHBsYWluZWQgaW4gWzU2MV1TZWN0aW9ucyAxLjE5IGFu ZCBbNTYyXTQuOSkuIFRoaXMgc29sdmVzIGEKKyAgIGxvbmctc3RhbmRpbmcgcHJvYmxlbSBpbGx1 c3RyYXRlZCBieSB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOiBhIGNlcnRhaW4KKyAgIGNvbXBhbnkg aGFzIGEgYmFuayBvZiBUQ1AvSVAgbW9kZW0gc2VydmVycywgd2l0aCBob3N0bmFtZXMgc2VydmVy MSwKKyAgIHNlcnZlcjIsIHNlcnZlcjMsIGFuZCBzbyBvbi4gRWFjaCBzZXJ2ZXIncyBwcm9tcHQg aXMgaXRzIG5hbWUsIGZvbGxvd2VkCisgICBieSBhIGNvbG9uICg6KSwgZm9yIGV4YW1wbGUgIlNl cnZlcjcyOiIuIFdpdGhvdXQgSU5QVVQgcGF0dGVybnMsIGl0CisgICB3b3VsZCBiZSByYXRoZXIg ZGlmZmljdWx0IHRvIHdhaXQgZm9yIHRoZSBwcm9tcHQuIFRoZSBicnV0ZSBmb3JjZQorICAgYXBw cm9hY2g6CisKKyAgbWlucHV0IDIwIFNlcnZlcjE6IFNlcnZlcjI6IFNlcnZlcjM6IC4uLiAoZW51 bWVyYXRpbmcgZWFjaCBvbmUpCisKKyAgIGlzIHN1YmplY3QgdG8gZmFpbHVyZSB3aGVuZXZlciBh IG5ldyBzZXJ2ZXIgaXMgYWRkZWQuIEEgbW9yZSBzdWJ0bGUKKyAgIGFwcHJvYWNoOgorCisgIGlu cHV0IDIwIFNlcnZlcgorICBpZiBmYWlsIC4uLgorICBpbnB1dCAyIDoKKworICAgaXMgbGlhYmxl IHRvIGZhbHNlIHBvc2l0aXZlcywgZS5nLiAiV2VsY29tZSB0byB0aGUgWFlaIENvcnAgTW9kZW0K KyAgIFNlcnZlci4gUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyBtZXNzYWdlOiIuLi4KKworICAg V2l0aCBwYXR0ZXJucywgeW91IGNhbiBtYXRjaCB0aGUgcHJvbXB0IHdpdGggIlNlcnZlcio6IiAo d2hpY2ggZG9lc24ndAorICAgc29sdmUgdGhlICJmYWxzZSBwb3NpdGl2ZXMiIHByb2JsZW0sIGJ1 dCBjZXJ0YWlubHkgaXMgbW9yZSBjb21wYWN0IHRoYW4KKyAgIHRoZSBicnV0ZSBmb3JjZSBtZXRo b2QpLCBvciB3aXRoIG1vcmUgc3BlY2lmaWMgcGF0dGVybnMgc3VjaCBhcworICAgIlNlcnZlclsx LTldOiIgYW5kICJTZXJ2ZXJbMS05XVswLTldOiIsIG9yIGVxdWl2YWxlbnRseToKKworICBTZXJ2 ZXJ7WzEtOV0sWzEtOV1bMC05XX06CisKKyAgIG1lYW5pbmcgdGhlIHdvcmQgIlNlcnZlciIgZm9s bG93ZWQgYnkgYSBzaW5nbGUgZGlnaXQgKDEtOSkgb3IgYnkgdHdvCisgICBkaWdpdHMgcmVwcmVz ZW50aW5nIGEgbnVtYmVyIGZyb20gMSB0byA5OSwgZm9sbG93ZWQgYnkgYSBjb2xvbi4KKworICAg SU5QVVQgcGF0dGVybiBtYXRjaGluZyBoYXMgYmVlbiBhZGRlZCBpbiBhIHdheSB0aGF0IGRvZXMg bm90IGludGVyZmVyZQorICAgd2l0aCBleGlzdGluZyBzY3JpcHRzLiBObyBuZXcgY29tbWFuZHMg b3Igc3dpdGNoZXMgYXJlIHVzZWQuIFRoZSBzaW1wbGUKKyAgIHJ1bGUgaXM6IGlmIGFuIElOUFVU IHNlYXJjaCB0YXJnZXQgaXMgdGhlIGFyZ3VtZW50IG9mIHRoZSAobmV3KQorICAgXGZwYXR0ZXJu KCkgZnVuY3Rpb24sIGl0IGlzIGEgcGF0dGVybi4gT3RoZXJ3aXNlIGl0IGlzIHRha2VuIGxpdGVy YWxseSwKKyAgIGFzIGJlZm9yZS4gRm9yIGV4YW1wbGU6CisKKyAgaW5wdXQgNSBhKmIKKworICAg c2VhcmNoZXMgZm9yIGFuICdhJyBmb2xsb3dlZCBieSBhbiBhc3RlcmlzayAoJyonKSwgZm9sbG93 ZWQgYnkgYSAnYicuCisgICBCdXQ6CisKKyAgaW5wdXQgNSBcZnBhdHRlcm4oYSpiKQorCisgICBz ZWFyY2hlcyBmb3IgYW4gJ2EnIGZvbGxvd2VkIGJ5IGFueXRoaW5nIGF0IGFsbCB1cCB0byBhbmQg aW5jbHVkaW5nIHRoZQorICAgZmlyc3QgJ2InLiBUaGlzIG1lYW5zIHRoYXQgYW55IHNlYXJjaCB0 YXJnZXQgdG8gSU5QVVQsIE1JTlBVVCwgb3IKKyAgIFJFSU5QVVQgY2FuIGJlIGEgcGF0dGVybiBv ciBhIGxpdGVyYWwgc3RyaW5nLCBhbmQgaW4gcGFydGljdWxhciB0aGF0CisgICBNSU5QVVQgY2Fu IGFjY29tbW9kYXRlIGFueSBtaXh0dXJlIG9mIHBhdHRlcm5zIGFuZCBsaXRlcmFsIHN0cmluZ3Mu CisKKyAgIEluIHNlbGVjdGluZyBwYXR0ZXJucywgbm90ZSB0aGF0OgorCisgICAgICogQSBsZWFk aW5nICcqJyBpcyBhbHdheXMgaW1wbGllZCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGluY2x1ZGUg b25lLgorICAgICAqIEEgdHJhaWxpbmcgJyonIGlzIG1lYW5pbmdsZXNzIGFuZCBpZ25vcmVkLgor ICAgICAqIEEgJyonIGJ5IGl0c2VsZiBtYXRjaGVzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBh cnJpdmVzLgorCisgICBBIHN5bnRheCBub3RlOiBJZiB5b3VyIHBhdHRlcm4gaXMgYSBzZWxlY3Rp b24gbGlzdCwgbWVhbmluZyBhIGxpc3Qgb2YKKyAgIGFsdGVybmF0aXZlcyBzZXBhcmF0ZWQgYnkg Y29tbWFzIGFuZCBlbmNsb3NlZCBpbiBicmFjZXMsIHRoZW4gdGhlIG91dGVyCisgICBicmFjZXMg d2lsbCBiZSBzdHJpcHBlZCBieSB2YXJpb3VzIGxldmVscyBvZiBwYXJzZXJzLCBzbyB5b3UgbXVz dAorICAgaW5jbHVkZSB0aHJlZSBvZiBlYWNoOgorCisgIGlucHV0IDEwIFxmcGF0dGVybih7e3th YmMsbW5vLHh5en19fSkKKworICAgTm90ZSB0aGF0IHRoaXMgaXMgZXF1aXZhbGVudCB0bzoKKwor ICBtaW5wdXQgMTAgYWJjIG1ubyB4eXoKKworICAgZXhjZXB0IGZvciB0aGUgc2V0dGluZyBvZiB0 aGUgXHYobWlucHV0KSB2YXJpYWJsZS4KKworICAgQW5kIGEgY2F1dGlvbjogSU5QVVQgcGF0dGVy biBtYXRjaGluZyBoYXMgYSBsaW1pdGF0aW9uIHRoYXQgeW91CisgICBwcm9iYWJseSBuZXZlciBu b3RpY2VkIHdpdGggbGl0ZXJhbC1zdHJpbmcgbWF0Y2hpbmcsIG5hbWVseSB0aGF0IHRoZXJlCisg ICBpcyBhIGxpbWl0IG9uIHRoZSBzaXplIG9mIHRoZSBtYXRjaC4gRm9yIGV4YW1wbGUsIGlmIHRo ZSBwYXR0ZXJuIGlzCisgICAiYSpiIiwgdGhlIG1hdGNoIHdpbGwgc3VjY2VlZCBpZiB0aGUgJ2En IGFuZCAnYicgYXJlIG5vdCBzZXBhcmF0ZWQgYnkKKyAgIG1vcmUgdGhhbiAoc2F5KSA4SyBieXRl cywgYnV0IHdpbGwgZmFpbCBpZiB0aGV5IGFyZSBmYXJ0aGVyIGFwYXJ0IHRoYW4KKyAgIHRoYXQu IEluIHN1Y2ggY2FzZXMsIGl0IGJldHRlciB0byB1c2UgdHdvIElOUFVUcyAoZS5nLiAiaW5wdXQg MTAgYSIgYW5kCisgICB0aGVuICJpbnB1dCAxMDAgYiIpLgorCisgICAgNy4xLjQuIFRoZSBJTlBV VCBNYXRjaCBSZXN1bHQKKworICAgVGhlIHJlc3VsdCBvZiBhbnkgSU5QVVQsIE1JTlBVVCwgb3Ig UkVJTlBVVCBjb21tYW5kLCBubyBtYXR0ZXIgd2hldGhlcgorICAgdGhlIHNlYXJjaCB0YXJnZXRz IGFyZSBwYXR0ZXJucyBvciBsaXRlcmFsIHN0cmluZ3MsIGlzIGF2YWlsYWJsZSBpbiB0aGUKKyAg IG5ldyBcdihpbm1hdGNoKSB2YXJpYWJsZS4gRm9yIGV4YW1wbGU6CisKKyAgbWlucHV0IDEwIGNh dCBcZnBhdHRlcm4oW2RoXW9nKQorICBpZiBzdWNjZXNzIGVjaG8gTUlOUFVUIG1hdGNoZWQgIlx2 KGlubWF0Y2gpIgorCisgICBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gYSBwYXR0ZXJu IHdhcyBtYXRjaGVkLCBzaW5jZSBpdCBtYWtlcworICAgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQg dGhlIHBhdHRlcm4gYXZhaWxhYmxlIHRvIEtlcm1pdDsgdGhlcmUgd291bGQgYmUKKyAgIG5vIHdh eSB0byBnZXQgaXQgb3RoZXJ3aXNlLgorCisgICBBZnRlciBhbiBJTlBVVCBjb21tYW5kLCB5b3Ug Y2FuIHZpZXcgYWxsIHRoZSBJTlBVVC1yZWxhdGVkIHZhcmlhYmxlcyBieQorICAgdHlwaW5nICJz aG93IHZhcmlhYmxlcyBpbiIgKGFiYnJldmlhdGUgYXMgInNobyB2YXIgaW4iKSwgd2hpY2ggc2hv d3MKKyAgIHRoZSB2YWx1ZXMgb2YgYWxsIGJ1aWx0LWluIHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBz dGFydCB3aXRoICJpbiIuCisKKyAgNy4yLiBOZXcgb3IgSW1wcm92ZWQgQnVpbHQtSW4gVmFyaWFi bGVzCisKKyAgIFx2KGJsb2NrY2hlY2spCisgICAgICAgICAgQ3VycmVudCBCTE9DSy1DSEVDSyBz ZXR0aW5nLCAxLCAyLCAzLCBvciA0LiA0IGlzIHRoZSBjb2RlIGZvcgorICAgICAgICAgIEJMQU5L LUZSRUUtMi4KKworICAgXHYoYnl0ZW9yZGVyKQorICAgICAgICAgIFRoZSBtYWNoaW5lJ3MgYnl0 ZSBvcmRlcjogMCA9IEJpZyBFbmRpYW4sIDEgPSBMaXR0bGUgRW5kaWFuLgorCisgICBcdihjbWRi dWZzaXplKQorICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGNvbW1hbmQgYnVmZmVyLCB3aGlj aCBpcyB0aGUgbWF4aW11bSBzaXplIGZvcgorICAgICAgICAgIGEgbWFjcm8sIGEgY29tbWFuZCwg YSB2YXJpYWJsZSwgb3IgYW55dGhpbmcgZWxzZSBpbiBDLUtlcm1pdCdzCisgICAgICAgICAgc2Ny aXB0IGxhbmd1YWdlLgorCisgICBcdihjdHR5KQorICAgICAgICAgIFRoZSBkZXZpY2UgbmFtZSBv ZiBDLUtlcm1pdCdzIGNvbnRyb2xsaW5nIChsb2dpbikgdGVybWluYWwuCisKKyAgIFx2KGZpbGVu YW1lKQorICAgICAgICAgIERlc2NyaWJlZCBpbiBbNTYzXVNlY3Rpb25zIDQuMSBhbmQgWzU2NF00 LjIuCisKKyAgIFx2KGZpbGVudW1iZXIpCisgICAgICAgICAgRGVzY3JpYmVkIGluIFs1NjVdU2Vj dGlvbnMgNC4xIGFuZCBbNTY2XTQuMi4KKworICAgXHYoZmlsZXNwZWMpCisgICAgICAgICAgQXMg b2YgQy1LZXJtaXQgNy4wLCBjb250YWlucyBmdWxseSBxdWFsaWZpZWQgZmlsZW5hbWVzIHJhdGhl cgorICAgICAgICAgIHRoYW4gKHVzdWFsbHkpIHJlbGF0aXZlIG9uZXMuCisKKyAgIFx2KHJldHVy bikKKyAgICAgICAgICBOb3cgaG9sZHMgdGhlIEVORCBuIHZhbHVlIG9mIHRoZSBtYWNybyB0aGF0 IG1vc3QgcmVjZW50bHkKKyAgICAgICAgICByZXR1cm5lZCwgaW4gY2FzZSBFTkQgd2FzIHVzZWQg cmF0aGVyIHRoYW4gUkVUVVJOLgorCisgICBcdihlZGl0b3IpCisgICAgICAgICAgUGF0aG5hbWUg b2YgcHJlZmVycmVkIHRleHQgZWRpdG9yCisKKyAgIFx2KGVkaXRvcHRzKQorICAgICAgICAgIENv bW1hbmQtbGluZSBvcHRpb25zIGZvciBlZGl0b3IKKworICAgXHYoZWRpdGZpbGUpCisgICAgICAg ICAgRmlsZSBtb3N0IHJlY2VudGx5IGVkaXRlZAorCisgICBcdihicm93c2VyKQorICAgICAgICAg IFBhdGhuYW1lIG9mIHByZWZlcnJlZCBXZWIgYnJvd3NlcgorCisgICBcdihicm93c29wdHMpCisg ICAgICAgICAgQ29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIFdlYiBicm93c2VyCisKKyAgIFx2KGJy b3dzdXJsKQorICAgICAgICAgIFVSTCBtb3N0IHJlY2VudGx5IGdpdmVuIHRvIFdlYiBicm93c2Vy CisKKyAgIFx2KGRpYWx0eXBlKQorICAgICAgICAgIFR5cGUgb2YgY2FsbCBtb3N0IHJlY2VudGx5 IHBsYWNlZCAoc2VlIFs1NjddU2VjdGlvbiAyLjEuMTEpLgorCisgICBcdihrYmNoYXIpCisgICAg ICAgICAgVGhlIGNoYXJhY3RlciwgaWYgYW55LCB0aGF0IHdhcyB0eXBlZCBhdCB0aGUga2V5Ym9h cmQgdG8gdG8KKyAgICAgICAgICBpbnRlcnJ1cHQgdGhlIG1vc3QgcmVjZW50IFBBVVNFLCBTTEVF UCwgV0FJVCwgTVNMRUVQLCBvciBJTlBVVAorICAgICAgICAgIGNvbW1hbmQ7IGVtcHR5IGlmIHRo ZSBtb3N0IHJlY2VudCBzdWNoIGNvbW1hbmQgd2FzIG5vdAorICAgICAgICAgIGludGVycnVwdGVk IGZyb20gdGhlIGtleWJvYXJkLgorCisgICBcdihsb2NrZGlyKQorICAgICAgICAgIFVOSVggb25s eSAtIFRoZSBuYW1lIG9mIHRoZSBVVUNQIGxvY2tmaWxlIGRpcmVjdG9yeSwgaWYga25vd24sCisg ICAgICAgICAgb3RoZXJ3aXNlICIodW5rbm93bikiLgorCisgICBcdihsb2NrcGlkKQorICAgICAg ICAgIFVOSVggb25seSAtIFBJRCBvZiBwcm9jZXNzIHRoYXQgb3ducyB0aGUgY29tbXVuaWNhdGlv biBwb3J0IHRoYXQKKyAgICAgICAgICB5b3UgdHJpZWQgdG8gb3BlbiB3aXRoIGEgU0VUIExJTkUg Y29tbWFuZCB0aGF0IGZhaWxlZCBiZWNhdXNlCisgICAgICAgICAgdGhlIHBvcnQgd2FzIGluIHVz ZSwgb3RoZXJ3aXNlIGVtcHR5LiBUaGlzIHZhcmlhYmxlIGlzIHNldCB3aXRoCisgICAgICAgICAg ZXZlcnkgU0VUIExJTkUgY29tbWFuZC4KKworICAgXHYoY3hfdGltZSkKKyAgICAgICAgICBJZiBu byBjb25uZWN0aW9uIChTRVQgSE9TVCwgU0VUIExJTkUsIERJQUwsIFRFTE5FVCwgZXRjKSBpcwor ICAgICAgICAgIGFjdGl2ZSwgdGhpcyBpcyAwLiBJZiBhIGNvbm5lY3Rpb24gaXMgYWN0aXZlLCB0 aGlzIGlzIHRoZSBudW1iZXIKKyAgICAgICAgICBvZiBzZWNvbmRzIHNpbmNlIHRoZSBjb25uZWN0 aW9uIHdhcyBtYWRlLgorCisgICBcdihod3Bhcml0eSkKKyAgICAgICAgICBJZiBoYXJkd2FyZSBw YXJpdHkgaXMgaW4gZWZmZWN0LCB0aGlzIHZhcmlhYmxlIGdpdmVzIGl0cyB2YWx1ZSwKKyAgICAg ICAgICBzdWNoIGFzICJldmVuIiBvciAib2RkIiAoaW4gd2hpY2ggY2FzZSwgdGhlIFx2KHBhcml0 eSkgdmFyaWFibGUKKyAgICAgICAgICB3aWxsIGJlICJub25lIikuIE90aGVyd2lzZSB0aGlzIHZh cmlhYmxlIGlzIGVtcHR5LgorCisgICBcdihzZXJpYWwpCisgICAgICAgICAgQ3VycmVudCBzZXJp YWwgcG9ydCBzZXR0aW5ncyBpbiA4TjEgZm9ybWF0IChbNTY4XVNlY3Rpb24gMi4xMCkuCisKKyAg IFx2KGVycm5vKQorICAgICAgICAgIEluIFVOSVgsIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBD IHJ1bnRpbWUgZXJybm8gdmFyaWFibGUsCisgICAgICAgICAgd2hpY2ggaXMgcXVpdGUgdm9sYXRp bGUgKG1lYW5pbmcgdGhhdCBvZnRlbiBhbiAiaW50ZXJlc3RpbmciCisgICAgICAgICAgZXJyb3Ig Y29kZSBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc29tZSBvdGhlciBsaWJyYXJ5IGNhbGwgb3IKKyAg ICAgICAgICBzeXN0ZW0gc2VydmljZSB0aGF0IHNldHMgZXJybm8gYmVmb3JlIHlvdSBoYXZlIGEg Y2hhbmNlIHRvIGxvb2sKKyAgICAgICAgICBhdCBpdCkuIEluIFZNUywgdGhlIGVycm9yIGNvZGUg cmV0dXJuZWQgYnkgdGhlIHN5c3RlbSBvciBsaWJyYXJ5CisgICAgICAgICAgY2FsbCB0aGF0IG1v c3QgcmVjZW50bHkgZmFpbGVkIChzdWNjZXNzIGNvZGVzIGFyZSBub3Qgc2F2ZWQpLgorICAgICAg ICAgIE5vdCBhdmFpbGFibGUgaW4gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCisKKyAgIFx2KGVy cnN0cmluZykKKyAgICAgICAgICBUaGUgVU5JWCBvciBWTVMgc3lzdGVtIGVycm9yIG1lc3NhZ2Ug dGhhdCBjb3JyZXNwb25kcyB0bworICAgICAgICAgIFx2KGVycm5vKS4gTm90IGF2YWlsYWJsZSBp biBhbGwgT1Mncy4gQWxzbyBzZWUKKyAgICAgICAgICBbNTY5XVxmZXJyc3RyaW5nKCkuCisKKyAg IFx2KHNldGxpbmVtc2cpCisgICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UsIGlmIGFueSwgZnJv bSB0aGUgbW9zdCByZWNlbnQgU0VUIExJTkUsIFNFVAorICAgICAgICAgIFBPUlQsIFNFVCBIT1NU LCBURUxORVQsIG9yIG90aGVyIGNvbm5lY3Rpb24tbWFraW5nIGNvbW1hbmQuIFRoaXMKKyAgICAg ICAgICBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgXHYoZXJyc3RyaW5nKSBzaW5jZSB0 aGVzZQorICAgICAgICAgIGNvbW1hbmRzIG1pZ2h0IGZhaWwgd2l0aG91dCBnZW5lcmF0aW5nIGEg c3lzdGVtIGVycm9yIGNvZGUsIGZvcgorICAgICAgICAgIGV4YW1wbGUgKGluIFVOSVgpIGJlY2F1 c2UgYSBsb2NrZmlsZSBleGlzdGVkIGluZGljYXRpbmcgdGhlCisgICAgICAgICAgZGV2aWNlIHdh cyBhc3NpZ25lZCBieSBhbm90aGVyIHVzZXIuCisKKyAgIFx2KGV4aXRzdGF0dXMpCisgICAgICAg ICAgVGhlIGV4aXQgc3RhdHVzIEMtS2VybWl0IHdvdWxkIHJldHVybiBpZiBpdCBleGl0ZWQgbm93 LgorCisgICBcdihwZXhpdHN0YXQpCisgICAgICAgICAgVGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBp bmZlcmlvciBwcm9jZXNzIG1vc3QgcmVjZW50bHkgaW52b2tlZCBieQorICAgICAgICAgIEMtS2Vy bWl0IChieSBSVU4sICEsIFJFRElSRUNULCBTRU5EIC9DT01NQU5ELCBldGMpLiBJbiBWTVMsIHRo aXMKKyAgICAgICAgICBjb2RlIGNhbiBiZSBnaXZlbiB0byBcZmVycnN0cmluZygpIHRvIGdldCB0 aGUgY29ycmVzcG9uZGluZworICAgICAgICAgIGVycm9yIG1lc3NhZ2UgKGluIFVOSVgsIHByb2dy YW0vY29tbWFuZCByZXR1cm4gY29kZXMgYXJlIG5vdCB0aGUKKyAgICAgICAgICBzYW1lIGFzIHN5 c3RlbSBlcnJvciBjb2RlcykuIE5vdCBhdmFpbGFibGUgaW4gb3BlcmF0aW5nIHN5c3RlbXMKKyAg ICAgICAgICBvdGhlciB0aGFuIFVOSVggYW5kIFZNUy4gU2VlIFs1NzBdU2VjdGlvbiA0LjIuNSBm b3IgZGV0YWlscy4KKworICAgXHYoaW5tYXRjaCkKKyAgICAgICAgICBUaGUgaW5jb21pbmcgc3Ry aW5nIG9mIGNoYXJhY3RlcnMsIGlmIGFueSwgdGhhdCBtYXRjaGVkIHRoZSBtb3N0CisgICAgICAg ICAgcmVjZW50IElOUFVULCBSRUlOUFVULCBvciBNSU5QVVQgY29tbWFuZC4KKworICAgXHYoaW50 aW1lKQorICAgICAgICAgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzICh0aG91c2FuZHRocyBv ZiBzZWNvbmRzKSBpdCB0b29rIGZvcgorICAgICAgICAgIHRoZSBtb3N0IHJlY2VudCBJTlBVVCBj b21tYW5kIHRvIGZpbmQgaXRzIG1hdGNoLCBvciAtMSBpZiBubworICAgICAgICAgIElOUFVUIGNv bW1hbmQgaGFzIGJlZW4gZ2l2ZW4geWV0LiBJZiB0aGUgSU5QVVQgY29tbWFuZCB0aW1lZAorICAg ICAgICAgIG91dCwgdGhlIHZhbHVlIGlzIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMTAwMCB0aW1l cyB0aGUgSU5QVVQKKyAgICAgICAgICB0aW1lb3V0LiBJZiBJTlBVVCBmYWlsZWQgZm9yIHNvbWUg b3RoZXIgcmVhc29uLCB0aGUgdmFsdWUgaXMKKyAgICAgICAgICB1bmRlZmluZWQgKFx2KGluc3Rh dHVzKSBnaXZlcyBJTlBVVCBjb21wbGV0aW9uIHN0YXR1cykuIElmIHlvdXIKKyAgICAgICAgICB2 ZXJzaW9uIG9mIEMtS2VybWl0IGlzIGJ1aWx0IHdpdGhvdXQgaGlnaC1wcmVjaXNpb24KKyAgICAg ICAgICBmbG9hdGluZy1wb2ludCB0aW1lcnMsIHRoaXMgbnVtYmVyIHdpbGwgYWx3YXlzIGJlIGEg bXVsdGlwbGUgb2YKKyAgICAgICAgICAxMDAwLgorCisgICBcdihpbndhaXQpCisgICAgICAgICAg VGhlIG51bWJlciBvZiBzZWNvbmRzIHNwZWNpZmllZCBhcyB0aGUgdGltZW91dCBpbiB0aGUgbW9z dAorICAgICAgICAgIHJlY2VudCBJTlBVVCBjb21tYW5kLgorCisgICBcdihkaWFsc3VmZml4KQor ICAgICAgICAgIERpYWxpbmcgc3VmZml4IGZvciB1c2UgZHVyaW5nIFBESUFMIHNlcXVlbmNlOyBz ZWUgWzU3MV1TZWN0aW9uCisgICAgICAgICAgMi4xLjEwLgorCisgICBcdihwaWQpCisgICAgICAg ICAgVU5JWCwgVk1TLCBhbmQgSzk1IG9ubHkuIEMtS2VybWl0J3MgcHJpbWFyeSBwcm9jZXNzIElE LCBudW1lcmljLAorICAgICAgICAgIGRlY2ltYWwuIElmIHlvdSB3YW50IHRvIHNob3cgaXQgaW4g aGV4LCB1c2UgXGZuMmhleChcdihwaWQpKSBJZgorICAgICAgICAgIHlvdSB3YW50IHRvIHNob3cg aXQgaW4gb2N0YWwsIHVzZSBcZm4yb2N0YWwoXHYocGlkKSkuCisKKyAgIFx2KHByaW50ZXIpCisg ICAgICAgICAgQ3VycmVudCBwcmludGVyIG5hbWUgb3IgU0VUIFBSSU5URVIgdmFsdWUuCisKKyAg IFx2KHBfY3RsKQorICAgICAgICAgIENvbnRyb2wgcHJlZml4IGNoYXIgXHYocF84Yml0KSA4LWJp dCBwcmVmaXggY2hhciAoaWYgcGFyaXR5IG5vdAorICAgICAgICAgIG5vbmUpCisKKyAgIFx2KHBf cnB0KQorICAgICAgICAgIFJlcGVhdCBwcmVmaXggY2hhciAoaWYgcmVwZWF0IGNvbXByZXNzaW9u IGVuYWJsZWQpCisKKyAgIFx2KGhlcmFsZCkKKyAgICAgICAgICBLZXJtaXQncyB2ZXJzaW9uIGhl cmFsZAorCisgICBcdih0ZXN0KQorICAgICAgICAgIEtlcm1pdCdzIHRlc3QgdmVyc2lvbiwgaWYg YW55LCBvciAwIGlmIHRoaXMgaXMgbm90IGEgdGVzdAorICAgICAgICAgIHZlcnNpb24uIFR5cGlj YWwgdmFsdWVzIGZvciB0ZXN0IHZlcnNpb25zIGFyZSAiQWxwaGEuMDMiIG9yCisgICAgICAgICAg IkJldGEuMTQiLgorCisgICBcdihzZW5kbGlzdCkKKyAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVu dHJpZXMgaW4gdGhlIFNFTkQtTElTVCwgMCBpZiBub25lLiBOb3RlOiBlbnRyaWVzCisgICAgICAg ICAgZG8gbm90IG5lY2Vzc2FyaWx5IGNvcnJlc3BvbmQgdG8gZmlsZXMsIHNpbmNlIGFuIGVudHJ5 IG1pZ2h0CisgICAgICAgICAgY29udGFpbiB3aWxkY2FyZHMuIEFsc28gbm90ZSB0aGF0IHRoZSB2 YWx1ZSBkb2VzIG5vdCBnbyBiYWNrIHRvCisgICAgICAgICAgMCBhZnRlciB0aGUgZmlsZXMgaW4g dGhlIGxpc3QgYXJlIHNlbnQuIFRvIHJlc2V0IHRoaXMgdmFyaWFibGUsCisgICAgICAgICAgdXNl IENMRUFSIFNFTkQtTElTVC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyB2YXJpYWJsZSBpcyB0bworICAg ICAgICAgIGRldGVybWluZSBpZiBhIFNFTkQgY29tbWFuZCwgd2hlbiBnaXZlbiB3aXRob3V0IGFu eSBmaWxlbmFtZXMsCisgICAgICAgICAgd2lsbCBiZSBsZWdhbC4gRXhhbXBsZToKKworICB4aWYg XHYoc2VuZGxpc3QpIHsgc2VuZCB9IGVsc2UgeyBzZW5kIG9vZmEudHh0IH0KKworICAgXHYodHJp Z2dlcikKKyAgICAgICAgICBJZiB0aGUgbW9zdCByZWNlbnQgQ09OTkVDVCBzZXNzaW9uIHdhcyB0 ZXJtaW5hdGVkIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICBieSBhIHRyaWdnZXIsIHRoaXMgdmFy aWFibGUgY29udGFpbnMgdGhlIHRyaWdnZXIgdmFsdWUuCisKKyAgIFx2KHR5X2xuKQorICAgICAg ICAgIFRZUEUgbGluZSBudW1iZXIgKGR1cmluZyBUWVBFKQorCisgICBcdih0eV9sYykKKyAgICAg ICAgICBUWVBFIGxpbmUgY291bnQgKGFmdGVyIFRZUEUpCisKKyAgIFx2KHR5X21jKQorICAgICAg ICAgIFRZUEUgbWF0Y2ggY291bnQgKGFmdGVyIFRZUEUpCisKKyAgIFx2KHhmZXJzdGF0KQorICAg ICAgICAgIFN0YXR1cyBvZiBtb3N0IHJlY2VudCBmaWxlIHRyYW5zZmVyOgorCistMTogTm8gdHJh bnNmZXIgeWV0CisgMDogU3VjY2VlZGVkCisgMTogRmFpbGVkCisKKyAgIFx2KHhmZXJtc2cpCisg ICAgICAgICAgSWYgdGhlIG1vc3QgcmVjZW50IGZpbGUgdHJhbnNmZXIgZmFpbGVkLCB0aGlzIGlz IHRoZSByZWFzb24uIElmCisgICAgICAgICAgaXQgc3VjY2VlZGVkLCBcdih4ZmVybXNnKSBpcyBh biBlbXB0eSBzdHJpbmcuCisKKyAgIFx2KHRmdGltZSkKKyAgICAgICAgICBUb3RhbCBlbGFwc2Vk IHRpbWUgb2YgbW9zdCByZWNlbnQgZmlsZSB0cmFuc2ZlciBvcGVyYXRpb24sIGluCisgICAgICAg ICAgc2Vjb25kcy4KKworICAgXHYodGV4dGRpcikKKyAgICAgICAgICBEaXJlY3RvcnkgdGhhdCBo b2xkcyAob3IgaXMgc3VwcG9zZWQgdG8gaG9sZCkgS2VybWl0IHRleHQgZmlsZXMKKyAgICAgICAg ICBzdWNoIGFzIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMsIHJlbGVhc2Ugbm90ZXMsIHVwZGF0 ZSBub3RlcywKKyAgICAgICAgICByZWFkLW1lIGZpbGVzLCAiYmV3YXJlIiBmaWxlcywgZXRjLgor CisgICBcdihuYW1lKQorICAgICAgICAgIFRoZSBuYW1lIHdpdGggd2hpY2ggdGhlIEtlcm1pdCBw cm9ncmFtIHdhcyBpbnZva2VkLCBlLmcuCisgICAgICAgICAgImtlcm1pdCIsICJ3ZXJtaXQiLCAi azk1IiwgImsyIiwgZXRjIChzZWUgWzU3Ml1TZWN0aW9uIDkuMSkuCisKKyAgIFx2KG9zbmFtZSkK KyAgICAgICAgICBOYW1lIG9mIG9wZXJhdGluZyBzeXN0ZW0gb24gY29tcHV0ZXIgd2hlcmUgQy1L ZXJtaXQgaXMgcnVubmluZywKKyAgICAgICAgICBvYnRhaW5lZCBhdCBydW50aW1lIChmcm9tIHVu YW1lIG9yIGVxdWl2YWxlbnQpLgorCisgICBcdihvc3ZlcnNpb24pCisgICAgICAgICAgVmVyc2lv biBvZiBvcGVyYXRpbmcgc3lzdGVtIG9uIGNvbXB1dGVyIHdoZXJlIEMtS2VybWl0IGlzCisgICAg ICAgICAgcnVubmluZywgb2J0YWluZWQgYXQgcnVudGltZSAoZnJvbSB1bmFtZSBvciBlcXVpdmFs ZW50KS4KKworICAgXHYob3NyZWxlYXNlKQorICAgICAgICAgIFJlbGVhc2Ugb2Ygb3BlcmF0aW5n IHN5c3RlbSBvbiBjb21wdXRlciB3aGVyZSBDLUtlcm1pdCBpcworICAgICAgICAgIHJ1bm5pbmcs IG9idGFpbmVkIGF0IHJ1bnRpbWUgKGZyb20gdW5hbWUgb3IgZXF1aXZhbGVudCkuCisKKyAgIFx2 KG1vZGVsKQorICAgICAgICAgIFRoZSBzcGVjaWZpYyBoYXJkd2FyZSBtb2RlbCBvZiB0aGUgY29t cHV0ZXIgd2hlcmUgQy1LZXJtaXQgaXMKKyAgICAgICAgICBydW5uaW5nLCBpZiBrbm93bi4KKwor ICAgXHYobWF0aF9waSkKKyAgICAgICAgICBUaGUgdmFsdWUgb2YgUGkgKHNlZSBbNTczXVNlY3Rp b24gNy4yMykKKworICAgXHYobWF0aF9lKQorICAgICAgICAgIFRoZSB2YWx1ZSBvZiBlIChzZWUg WzU3NF1TZWN0aW9uIDcuMjMpCisKKyAgIFx2KG1hdGhfcHJlY2lzaW9uKQorICAgICAgICAgIEhv dyBtYW55IHNpZ25pZmljYW50IGRpZ2l0cyBpbiBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKwor ICAgXHYoZl9jb3VudCkKKyAgICAgICAgICBSZXN1bHQgb2YgdGhlIG1vc3QgcmVjZW50IEZJTEUg Q09VTlQgKEZDT1VOVCkgY29tbWFuZC4KKworICAgXHYoZl9lcnJvcikKKyAgICAgICAgICBOdW1l cmljIGVycm9yIGNvZGUgb2YgbW9zdCByZWNlbnQgRklMRSBjb21tYW5kLgorCisgICBcdihmX21h eCkKKyAgICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyBvcGVuIHNpbXVsdGFuZW91c2x5 LgorCisgICBUaGUgbWF0aCBjb25zdGFudHMgYXJlIGdpdmVuIGluIHRoZSBwcmVjaXNpb24gb2Yg dW5kZXJseWluZyBjb21wdXRlcidzCisgICBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorCisg ICBOb3RlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFx2KG9zbmFtZSksIFx2KG9zdmVyc2lvbiks IGFuZAorICAgXHYocGxhdGZvcm0pOyB0aGUgbGF0dGVyIHJlZmVycyB0byB0aGUgcGxhdGZvcm0g Zm9yIHdoaWNoIGFuZC9vciB1cG9uCisgICB3aGljaCBDLUtlcm1pdCB3YXMgYnVpbHQsIGFzIG9w cG9zZWQgdG8gdGhlIG9uZSBvbiB3aGljaCBpdCBpcyBhY3R1YWxseQorICAgcnVubmluZy4gQWxz byBub3RlIHRoYXQgZWFjaCBvcGVyYXRpbmcgc3lzdGVtIGNhbiwgYW5kIHByb2JhYmx5IHdpbGws CisgICBpbnRlcnByZXQgYW5kIGZpbGwgaW4gdGhlIG9zKiB2YXJpYWJsZXMgZGlmZmVyZW50bHks IG9yIG5vdCBhdCBhbGwuCisKKyAgIFRoZSBTSE9XIFZBUklBQkxFUyBjb21tYW5kIG5vdyBhY2Nl cHRzIGEgdmFyaWFibGUgbmFtZSwgcHJlZml4LCBvcgorICAgcGF0dGVybjoKKworICBzaG93IHZh cmlhYmxlcyAgICAgICAgIFNob3dzIGFsbCB2YXJpYWJsZXMuCisgIHNob3cgdmFyaWFibGVzIHQg ICAgICAgU2hvd3MgYWxsIHZhcmlhYmxlcyB0aGF0IHN0YXJ0IHdpdGggInQiLgorICBzaG93IHZh cmlhYmxlcyAqdmVyKiAgIFNob3dzIGFsbCB2YXJpYWJsZXMgd2hvc2UgbmFtZXMgY29udGFpbiAi dmVyIi4KKyAgc2hvdyB2YXJpYWJsZXMgKnZlciAgICBEaXR0byAoYW4gaW1wbGllZCAiKiIgaXMg YXBwZW5kZWQpLgorCisgIDcuMy4gTmV3IG9yIEltcHJvdmVkIEJ1aWx0LUluIEZ1bmN0aW9ucwor CisgICBUaGUgZm9sbG93aW5nIG5ldyBmaWxlLWkvbyBmdW5jdGlvbnMgYXJlIGV4cGxhaW5lZCBp biBbNTc1XVNlY3Rpb24KKyAgIDEuMjIuCisKKyAgXGZfc3RhdHVzKGNoYW5uZWwpICAgICAgICAg ICBTdGF0dXMgb2YgZmlsZSBvcGVuIG9uIGNoYW5uZWwKKyAgXGZfcG9zKGNoYW5uZWwpICAgICAg ICAgICAgICBSZWFkL3dyaXRlIChieXRlKSBwb2ludGVyIG9mIGdpdmVuIGZpbGUKKyAgXGZfbGlu ZShjaGFubmVsKSAgICAgICAgICAgICBDdXJyZW50IGxpbmUgb2YgZmlsZQorICBcZl9oYW5kbGUo Y2hhbm5lbCkgICAgICAgICAgIEhhbmRsZSBvZiBmaWxlCisgIFxmX2VvZihjaGFubmVsKSAgICAg ICAgICAgICAgV2hldGhlciBnaXZlbiBmaWxlIGlzIGF0IEVPRgorICBcZl9nZXRjaGFyKGNoYW5u ZWwpICAgICAgICAgIFJlYWQgYSBjaGFyIGZyb20gZ2l2ZW4gZmlsZQorICBcZl9nZXRsaW5lKGNo YW5uZWwpICAgICAgICAgIFJlYWQgYSBsaW5lIGZyb20gZ2l2ZW4gZmlsZQorICBcZl9nZXRibG9j ayhjaGFubmVsLG4pICAgICAgIFJlYWQgYSBibG9jayBmcm9tIGdpdmVuIGZpbGUKKyAgXGZfcHV0 Y2hhcihjaGFubmVsLGMpICAgICAgICBXcml0ZSBhIGNoYXIgdG8gZ2l2ZW4gZmlsZQorICBcZl9w dXRsaW5lKGNoYW5uZWwsc3RyaW5nKSAgIFdyaXRlIGEgbGluZSB0byBnaXZlbiBmaWxlCisgIFxm X3B1dGJsb2NrKGNoYW5uZWwsc3RyaW5nKSAgV3JpdGUgYSBibG9jayB0byBnaXZlbiBmaWxlCisK KyAgIFRoZSBmb2xsb3dpbmcgbmV3IGRhdGUtdGltZS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZXhw bGFpbmVkIGluCisgICBbNTc2XVNlY3Rpb24gMS42OgorCisgIFxmZGF5KCkgICAgICAgICAgICAg ICAgUmV0dXJucyBkYXkgb2Ygd2VlayBvZiBnaXZlbiBkYXRlCisgIFxmbmRheSgpICAgICAgICAg ICAgICAgUmV0dXJucyBudW1lcmljIGRheSBvZiB3ZWVrIG9mIGdpdmVuIGRhdGUKKyAgXGZ0aW1l KCkgICAgICAgICAgICAgICBSZXR1cm5zIHRpbWUgcG9ydGlvbiBvZiBnaXZlbiBkYXRlLXRpbWUK KyAgXGZudGltZSgpICAgICAgICAgICAgICBDb252ZXJ0cyB0aW1lIHRvIHNlY29uZHMgc2luY2Ug bWlkbmlnaHQKKyAgXGZuMnRpbWUoKSAgICAgICAgICAgICBDb252ZXJ0cyBzZWNvbmRzIHNpbmNl IG1pZG5pZ2h0IHRvIGhoOm1tOnNzCisgIFxmY3Z0ZGF0ZShkYXRlLXRpbWUpICAgQ29udmVydHMg ZnJlZS1mb3JtYXQgZGF0ZSB0byB5eXl5bW1kZCBoaDptbTpzcworICBcZmRheW9meWVhcihkYXRl LXRpbWUpIENvbnZlcnRzIGRhdGUgdG8geXl5eWRkZCAoZGF5LW9mLXllYXIpIGZvcm1hdAorICBc ZmRveShkYXRlLXRpbWUpICAgICAgIFN5bm9ueW0gZm9yIFxmZGF5b2Z5ZWFyKCkKKyAgXGZkb3ky ZGF0ZShkYXlvZnllYXIpICBDb252ZXJ0cyB5eXl5ZGRkIHRvIHl5eXltbWRkCisgIFxmbWpkKGRh dGUtdGltZSkgICAgICAgQ29udmVydHMgZnJlZS1mb3JtYXQgZGF0ZSB0byBNb2RpZmllZCBKdWxp YW4gRGF0ZQorICBcZm1qZDJkYXRlKG1qZCkgICAgICAgIENvbnZlcnRzIG1vZGlmaWVkIEp1bGlh biBkYXRlIHRvIHl5eXltbWRkCisKKyAgIFRoZSBuZXcgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRp YyBmdW5jdGlvbnMgYXJlIGV4cGxhaW5lZCBpbgorICAgWzU3N11TZWN0aW9uIDcuMjMuIGYxIGFu ZCBmMiBhcmUgZmxvYXRpbmctcG9pbnQgKHJlYWwpIG51bWJlcnM7IGQgaXMKKyAgIHRoZSBudW1i ZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gc2hvdzoKKworICBcZmZwYWJzb2x1dGUoZjEsZCkgICAg IEFic29sdXRlIHZhbHVlIG9mIGYxCisgIFxmZnBhZGQoZjEsZjIsZCkgICAgICAgZjEgKyBmMQor ICBcZmZwY29zaW5lKGYxLGQpICAgICAgIENvc2luZSBvZiBmMQorICBcZmZwZGl2aWRlKGYxLGYy LGQpICAgIGYxIGRpdmlkZWQgYnkgZjIKKyAgXGZmcGV4cChmMSxkKSAgICAgICAgICBlIHRvIHRo ZSBmMSBwb3dlcgorICBcZmZwaW50KGYxKSAgICAgICAgICAgIEludGVnZXIgcGFydCBvZiBmMQor ICBcZmZwbG9nMTAoZjEsZCkgICAgICAgIExvZyBiYXNlIDEwIG9mIGYxCisgIFxmZnBsb2duKGYx LGQpICAgICAgICAgTmF0dXJhbCBsb2cgb2YgZjEKKyAgXGZmcG1heGltdW0oZjEsZjIsZCkgICBN YXhpbXVtIG9mIGYxIGFuZCBmMgorICBcZmZwbWluaW11bShmMSxmMixkKSAgIE1pbmltdW0gb2Yg ZjEgYW5kIGYyCisgIFxmZnBtb2R1bHVzKGYxLGYyLGQpICAgTW9kdWx1cyBvZiBmMSBhbmQgZjIK KyAgXGZmcG11bHRpcGx5KGYxLGYyLGQpICBQcm9kdWN0IG9mIGYxIGFuZCBmMgorICBcZmZwcmFp c2UoZjEsZjIsZCkgICAgIFJhaXNlIGYxIHRvIHBvd2VyIGYyCisgIFxmZnByb3VuZChmMSxkKSAg ICAgICAgUm91bmQgZjEgdG8gZCBwbGFjZXMKKyAgXGZmcHNpbmUoZjEsZCkgICAgICAgICBTaW5l IG9mIGYxCisgIFxmZnBzcXJ0KGYxLGQpICAgICAgICAgU3F1YXJlIHJvb3Qgb2YgZjEKKyAgXGZm cHN1YnRyYWN0KGYxLGYyLGQpICBmMiAtIGYxCisgIFxmZnB0YW5nZW50KGYxLGQpICAgICAgVGFu Z2VudCBvZiBmMQorCisgICBJbnRlZ2VyIG51bWJlciBmdW5jdGlvbnM6CisKKyAgIFxmYWJzb2x1 dGUobikKKyAgICAgICAgICBBYnNvbHV0ZSB2YWx1ZSBvZiBpbnRlZ2VyIG4uCisKKyAgIFxmcmFu ZG9tKG4pCisgICAgICAgICAgUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQg bi0xLgorCisgICBcZnJhZGl4KHMsbjEsbjIpCisgICAgICAgICAgSWYgdGhlIHN0cmluZyBzIGlz IGFuIGludGVnZXIgaW4gcmFkaXggbjEsIHRoZSByZXN1bHQgaXMgdGhlCisgICAgICAgICAgc2Ft ZSBudW1iZXIgZXhwcmVzc2VkIGluIHJhZGl4IG4yLCB3aGVyZSBuMSBhbmQgbjIgbWF5IGJlIGFu eQorICAgICAgICAgIG51bWJlciBmcm9tIDIgdGhyb3VnaCAzNiwgZXhwcmVzc2VkIGFzIGRlY2lt YWwgbnVtYmVycywgb3IKKyAgICAgICAgICB2YXJpYWJsZXMgKGV0YykgdGhhdCBldmFsdWF0ZSB0 byBkZWNpbWFsIG51bWJlcnMuIEZvciB0aGUgc291cmNlCisgICAgICAgICAgYW5kIHJlc3VsdCwg dGhlIGRpZ2l0cyBvZiBhbnkgcmFkaXgsIHIsIGFyZSB0aGUgZmlyc3QgcgorICAgICAgICAgIGNo YXJhY3RlcnMgaW4gdGhlIHNlcXVlbmNlIDAtOSxhLXogKGNhc2UgZG9lc24ndCBtYXR0ZXIgZm9y IHRoZQorICAgICAgICAgIGxldHRlcnMpLiBUaGUgc3RyaW5nIHMgbWF5IGhhdmUgYSBzaWduLCAr IG9yIC07IGlmIGl0IHN0YXJ0cworICAgICAgICAgIHdpdGggYSBtaW51cyAoLSkgc2lnbiwgdGhl IHJlc3VsdCBhbHNvIGhhcyBhIG1pbnVzIHNpZ24uCisKKyAgIFRoZSBcZnJhZGl4KCkgZnVuY3Rp b24gZG9lcyBub3Qgd29yayB3aXRoIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuIEl0CisgICBkb2Vz IG5vdCByZXZlYWwgdGhlIGludGVybmFsIHN0b3JhZ2UgZm9ybWF0IG9mIGEgbnVtYmVyOyBmb3Ig ZXhhbXBsZSwKKyAgIFxmcmFkaXgoLTEsMTAsMTYpIGlzIC0xLCBub3Qgc29tZXRoaW5nIGxpa2Ug RkZGRkZGRkZGRi4gSWYgYWxsIHRocmVlCisgICBhcmd1bWVudHMgYXJlIG5vdCBnaXZlbiwgb3Ig aWYgbjEgb3IgbjIgYXJlIG5vdCBudW1iZXJzIGJldHdlZW4gMiBhbmQKKyAgIDM2IGluY2x1c2l2 ZSwgb3IgcyBpcyBub3QgYSBudW1iZXIgaW4gcmFkaXggbjEsIGFuIGVycm9yIG9jY3VycyBhbmQg dGhlCisgICBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuIFxmcmFkaXgoKSBhbHNvIGRvZXMgbm90 IG9mZmVyCisgICBleHRlbmRlZC1wcmVjaXNpb24gYXJpdGhtZXRpYzsgbnVtYmVyIHZhbHVlcyBh cmUgbGltaXRlZCB0byB0aG9zZQorICAgZXhwcmVzc2VkIGFzIGEgbG9uZyBpbnRlZ2VyIGluIHRo ZSBhcmNoaXRlY3R1cmUgb2YgdGhlIHVuZGVybHlpbmcKKyAgIGNvbXB1dGVyLCB1c3VhbGx5IDMy IG9yIDY0IGJpdHMuIElmIHlvdSBnaXZlIGl0IGFuIGFyZ3VtZW50IHdob3NlCisgICBhYnNvbHV0 ZSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiBjYW4gYmUgaGVsZCBpbiBhbiB1bnNpZ25lZCBsb25nLCB0 aGUKKyAgIHJlc3VsdCBpcyAtMS4KKworICAgVGhlIG5leHQgZm91ciBhcmUgc2hvcnRoYW5kIGZ1 bmN0aW9ucyBmb3IgZGVjaW1hbC9oZXhhZGVjaW1hbCBhbmQKKyAgIGRlY2ltYWwvb2N0YWwgbnVt YmVyIGNvbnZlcnNpb246CisKKyAgIFxmbjJoZXgobikKKyAgICAgICAgICBSZXR1cm5zIHRoZSBo ZXhhZGVjaW1hbCAoYmFzZSAxNikgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXIKKyAgICAg ICAgICBuLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFxmaGV4aWZ5KHMpLCB3aGljaCB0cmVhdHMg aXRzIGFyZ3VtZW50CisgICAgICAgICAgYXMgYSBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIu IFRoZSByZXN1bHQgaXMgYWx3YXlzCisgICAgICAgICAgbGVmdC1wYWRkZWQgd2l0aCAwJ3MgdG8g bWFrZSBpdHMgbGVuZ3RoIGV2ZW4uIEV4YW1wbGVzOgorCisgIFxuMmhleCgwKSAgID0gIjAwIiAg ICAgICAgICAgICAgICAgICAgXGZoZXhpZnkoMCkgICA9ICIzMCIKKyAgXG4yaGV4KDI1NSkgPSAi ZmYiICAgICAgICAgICAgICAgICAgICBcZmhleGlmeSgyNTUpID0gIjMyMzUzNSIKKyAgXG4yaGV4 KDI1NikgPSAiMDEwMCIgICAgICAgICAgICAgICAgICBcZmhleGlmeSgyNTYpID0gIjMyMzUzNiIK KworICAgXGZoZXgybih4KQorICAgICAgICAgIENvbnZlcnRzIGhleGFkZWNpbWFsIG51bWJlciB4 IHRvIGRlY2ltYWwgZXF1aXZhbGVudCBkZWNpbWFsCisgICAgICAgICAgbnVtYmVyLiBUaGlzIGlz IHRoZSBpbnZlcnNlIG9mIFxmbjJoZXgoKS4gRXF1aXZhbGVudCB0bworICAgICAgICAgIFxmcmFk aXgocywxNiwxMCkuCisKKyAgIFxmbjJvY3RhbChuKQorICAgICAgICAgIFJldHVybnMgdGhlIG9j dGFsIChiYXNlIDgpIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgbi4KKyAgICAgICAgICBF eGFtcGxlczoKKworICBcbjJvY3RhbCgwKSA9ICIwIgorICBcbjJvY3QoMjU1KSA9ICIzNzciCisg IFxuMm9jdCgyNTYpID0gIjQwMCIKKyAgRXF1aXZhbGVudCB0byBcZnJhZGl4KG4sMTAsOCkuCisK KyAgIFxmb2N0Mm4obikKKyAgICAgICAgICBSZXR1cm5zIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0 aW9uIG9mIHRoZSBnaXZlbiBvY3RhbCBudW1iZXIsIG4uCisgICAgICAgICAgVGhlIGludmVyc2Ug b2YgXGZuMm9jdGFsKCkuIEVxdWl2YWxlbnQgdG8gXGZyYWRpeChuLDgsMTApLgorCisgICBTdHJp bmcgZnVuY3Rpb25zOgorCisgICBccyhuYW1lW246bV0pCisgICAgICAgICAgRXF1aXZhbGVudCB0 byBcZnN1YnN0cmluZyhcbShuYW1lKSxuLG0pIChbNTc4XVNlY3Rpb24gNy4yNCkuCisKKyAgIFw6 KG5hbWVbbjptXSkKKyAgICAgICAgICBFcXVpdmFsZW50IHRvIFxmc3Vic3RyaW5nKG5hbWUsbixt KSAod2hlcmUgIm5hbWUiIGlzIGFueQorICAgICAgICAgIFwtcXVhbnRpdHkpIChbNTc5XVNlY3Rp b24gNy4yNCkuCisKKyAgIFxmbGVmdChzLG4pCisgICAgICAgICAgVGhlIGxlZnRtb3N0IG5jaGFy YWN0ZXJzIG9mIHN0cmluZyBzOyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgXGZzdWJzdHJpbmco cywxLG4pLgorCisgICBcZnN0cmlweChzdHJpbmcsY2hhcikKKyAgICAgICAgICBSZXR1cm5zIHRo ZSBwYXJ0IG9mIHRoZSBzdHJpbmcgdXAgdG8gdGhlIHJpZ2h0bW9zdCBvY2N1cnJlbmNlLAorICAg ICAgICAgIGlmIGFueSwgb2YgdGhlIGdpdmVuIGNoYXJhY3Rlci4gVGhlIGRlZmF1bHQgY2hhcmFj dGVyIGlzIHBlcmlvZAorICAgICAgICAgICguKSBFeGFtcGxlczoKKworICBcZnN0cmlweChmb28v YmFyLC8pICAgICAgICAgICAgICAgICA9ICJmb28iCisgIFxmc3RyaXB4KGZvby9iYXIvYmF6LC8p ICAgICAgICAgICAgID0gImZvby9iYXIiCisgIFxmc3RyaXB4KGF1dG9leGVjLmJhdCwuKSAgICAg ICAgICAgID0gImF1dG9leGVjIgorICBcZnN0cmlweChhdXRvZXhlYy5iYXQpICAgICAgICAgICAg ICA9ICJhdXRvZXhlYyIKKyAgXGZzdHJpcHgoZnN0cmlweChmb28vYmFyL2JheiwvKSwvKSAgPSAi Zm9vIgorCisgICBcZmxvcChzdHJpbmcsY2hhcmFjdGVyKQorICAgICAgICAgIFJldHVybnMgdGhl IHBvcnRpb24gb2YgdGhlIHN0cmluZyBzdGFydGluZyBhZnRlciB0aGUgZmlyc3QKKyAgICAgICAg ICBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiBjaGFyYWN0ZXIuIFRoZSBkZWZhdWx0IGNoYXJhY3Rl ciBpcworICAgICAgICAgIHBlcmlvZCAoLikgRXhhbXBsZXM6CisKKyAgXGZsb3AoYXV0b2V4ZWMu YmF0KSAgICAgICAgICAgICAgICAgPSAiYmF0IgorICBcZmxvcChiYXouZm9vL2JhcikgICAgICAg ICAgICAgICAgICA9ICJmb28vYmFyIgorICBcZmxvcChiYXouZm9vL2JhciwvKSAgICAgICAgICAg ICAgICA9ICJiYXIKKworICAgXGZzdHJpcG4oc3RyaW5nLG4pCisgICAgICAgICAgUmV0dXJucyB0 aGUgc3RyaW5nIHdpdGggbmNoYXJhY3RlcnMgcmVtb3ZlZCBmcm9tIHRoZSBlbmQuCisgICAgICAg ICAgRXhhbXBsZToKKworICBcZnN0cmlwbigxMjM0NTY3OCwzKSAgICAgICAgICAgICAgICA9ICIx MjM0NSIKKworICAgICAgICAgIChGb3IgbW9yZSBkaXNjdXNzaW9uIG9mIFxmc3RyaXB4KCksIFxm c3RyaXBuKCksIGFuZCBcZmxvcCgpIHNlZQorICAgICAgICAgIFs1ODBdU2VjdGlvbiA0LjIuMyku CisKKyAgIFxmYjY0ZW5jb2RlKHMpCisgICAgICAgICAgUmV0dXJucyB0aGUgQmFzZS02NCBlbmNv ZGluZyBvZiB0aGUgc3RyaW5nIHMuCisKKyAgIFxmYjY0ZGVjb2RlKHMpCisgICAgICAgICAgUmV0 dXJucyB0aGUgZGVjb2Rpbmcgb2YgdGhlIEJhc2UtNjQgc3RyaW5nIHMuIEZhaWxzIGlmIHMgaXMg bm90CisgICAgICAgICAgYSBCYXNlLTY0IHN0cmluZywgb3IgaWYgaXRzIGxlbmd0aCBpcyBub3Qg YSBtdWx0aXBsZSBvZiA0LiBOb3RlCisgICAgICAgICAgdGhhdCBpZiBhbnkgb2YgdGhlIHJlc3Vs dCBieXRlcyBhcmUgbnVsbCAoMCksIHRoZSByZXN1bHQgc3RyaW5nCisgICAgICAgICAgc3RvcHMg dGhlcmUuIFRoZXJlIGlzIG5vIHdheSB0byByZXByZXNlbnQgc3RyaW5ncyB0aGF0IGNvbnRhaW4K KyAgICAgICAgICBudWxsIGJ5dGVzIGluIEMtS2VybWl0ICh0aGUgc2FtZSBpcyB0cnVlIGZvciBc ZnVuaGV4aWZ5KCkpLgorCisgICBcZndvcmQoczEsbixzMixzMykKKyAgICAgICAgICBFeHRyYWN0 cyB3b3JkIG51bWJlciBuZnJvbSBzdHJpbmcgczEuIEJ5IGRlZmF1bHQsIGEgIndvcmQiIGlzCisg ICAgICAgICAgYW55IHNlcXVlbmNlIG9mIEFTQ0lJIGxldHRlcnMgb3IgZGlnaXRzOyBuaXMgMS1i YXNlZC4gSWYgbiBpcworICAgICAgICAgIG9taXR0ZWQsICIxIiBpcyB1c2VkLiBFeGFtcGxlczoK KworICBcZndvcmQob25lIHR3byB0aHJlZSkgICAgPSAib25lIgorICBcZndvcmQob25lIHR3byB0 aHJlZSwxKSAgPSAib25lIgorICBcZndvcmQob25lIHR3byB0aHJlZSwyKSAgPSAidHdvIgorICBc ZndvcmQob25lIHR3byB0aHJlZSwzKSAgPSAidGhyZWUiCisKKyAgICAgICAgICBhbmQ6CisKKyAg ICBcZndvcmQoXHYoZGlhbHJlc3VsdCksMikgPSAiMzEyMDAiCisKKyAgICAgICAgICBpcyAiMzEy MDAiIGlmIFx2KGRpYWxyZXN1bHQpIGlzIChlLmcuKSAiQ09OTkVDVAorICAgICAgICAgIDMxMjAw L0FSUS9WMzIvTEFQTS9WNDJCSVMiLgorCisgICAgICAgICAgSWYgeW91IGluY2x1ZGUgczIsIHRo aXMgcmVwbGFjZXMgdGhlIGRlZmF1bHQgYnJlYWsgc2V0LiBGb3IKKyAgICAgICAgICBleGFtcGxl LCBzdXBwb3NlIHlvdSBoYXZlIGEgc3RyaW5nIFwlYSB3aG9zZSB2YWx1ZSBpczoKKworICAkMTUw LjAwICQzMDAuMDAgJDM5Ljk1CisKKyAgICAgICAgICBhbmQgeW91IHdhbnQgZWFjaCBkb2xsYXIg YW1vdW50IHRvIGJlIGEgd29yZDsgdXNlOgorCisgIFxmd29yZChcJWEsXCVuLHsgfSkKKworICAg ICAgICAgIFRoaXMgcmV0dXJucyBkb2xsYXIgYW1vdW50IG51bWJlciBcJW4sIGUuZy4gIiQzMDAu MDAiIGZvciBcJW4gPQorICAgICAgICAgIDIuICJ7IH0iIGRlbm90ZXMgYSBzcGFjZSAoeW91IG11 c3QgZW5jbG9zZSBpdCBpbiBicmFjZXMsCisgICAgICAgICAgb3RoZXJ3aXNlIGl0IGlzIHNxdWVl emVkIG91dCkuIE5vdGUgdGhhdCBBU0NJSSBjb250cm9sCisgICAgICAgICAgY2hhcmFjdGVycyBh cmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBicmVhayBzZXQ7IHlvdSBkb24ndCBoYXZlCisgICAg ICAgICAgdG8gc3BlY2lmeSB0aGVtIChhbmQgeW91IGNhbid0IG5vdCBzcGVjaWZ5IHRoZW0pLgor CisgICAgICAgICAgVGhlIG9wdGlvbmFsIHMzIGFyZ3VtZW50IGxpc3RzIGNoYXJhY3RlcnMgKGV2 ZW4gY29udHJvbAorICAgICAgICAgIGNoYXJhY3RlcnMpIHRoYXQgbm9ybWFsbHkgd291bGQgYmUg Y29uc2lkZXJlZCBzZXBhcmF0b3JzIHRoYXQKKyAgICAgICAgICB5b3Ugd2FudCBpbmNsdWRlZCBp biB3b3Jkcy4gU28gdGhlIGRvbGxhcnMtYW5kLWNlbnRzIGV4YW1wbGUKKyAgICAgICAgICBjb3Vs ZCBhbHNvIGJlIGhhbmRsZWQgdGhpcyB3YXk6CisKKyAgXGZ3b3JkKFwlYSxcJW4sLCQuKQorCisg ICAgICAgICAgaW4gb3RoZXIgd29yZHMsIHVzZSB0aGUgZGVmYXVsdCBzZXBhcmF0b3IgbGlzdCwg YnV0IHJlbW92ZSAiJCIKKyAgICAgICAgICBhbmQgIi4iIGZyb20gaXQgc28gdGhleSB3aWxsIGJl IGNvbnNpZGVyZWQgcGFydCBvZiBhIHdvcmQuCisKKyAgICAgICAgICBOb3RlIHRoYXQgc2luY2Ug OC1iaXQgY2hhcmFjdGVycyBhcmUgbm90IEFTQ0lJLCB0aGV5IGFjdCBhcworICAgICAgICAgIGJy ZWFrIGNoYXJhY3RlcnMgdW5sZXNzIHlvdSBwdXQgdGhlbSBpbiB0aGUgaW5jbHVkZSBsaXN0Lgor ICAgICAgICAgIFN1cHBvc2UsIGZvciBleGFtcGxlLCB5b3UgaGF2ZSBhIGZpbGUgaW4gd2hpY2gg ZWFjaCBsaW5lIGlzIGEKKyAgICAgICAgICBUYWItc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMsIG51 bWJlcnMsIG9yIHBocmFzZXMgdGhhdCBtaWdodAorICAgICAgICAgIGNvbnRhaW4gcHVuY3R1YXRp b24sIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICQgYW5kIEAsIDgtYml0IGJpdAorICAgICAgICAg IGNoYXJhY3RlcnMsIGV0YyAobGlrZSBzb21ldGhpbmcgdGhhdCBtaWdodCBoYXZlIGJlZW4gZXhw b3J0ZWQKKyAgICAgICAgICBmcm9tIGEgc3ByZWFkc2hlZXQgb3IgZGF0YWJhc2UpLCBhbmQgeW91 IHdhbnQgdG8gc3BsaXQgb25seSBvbgorICAgICAgICAgIFRhYjsgaGVyZSBpcyBhIHdheSAoXG0o bGluZSkgaXMgYSBsaW5lIHJlYWQgZnJvbSB0aGUgZmlsZSk6CisKK3VuZGVmIGtlZXAKK2ZvciBc JWkgMSAyNTUgMSB7CisgICAgaWYgPT0gXCVpIDkgY29udGludWUKKyAgICAua2VlcCA6PSBcbShr ZWVwKVxmY2hhcihcJWkpCit9Cit3aGlsZSB0cnVlIHsKKyAgICBmcmVhZCAvbGluZSBcJWMgbGlu ZQorICAgIGlmIGZhaWwgYnJlYWsKKyAgICAuXCVuIDo9IFxmc3BsaXQoXG0obGluZSksJmEsXDks XG0oa2VlcCkpCisgICAgLi4uCit9CisKKyAgICAgICAgICBUaGlzIHByb2JsZW0gaXMgYWRkcmVz c2VkIGluIFs1ODFdQy1LZXJtaXQgOS4wLgorCisgICBcZnNwbGl0KHMxLCZhLHMyLHMzKQorICAg ICAgICAgIFRoaXMgaXMgbGlrZSBcZndvcmQoKSwgZXhjZXB0IGluc3RlYWQgb2YgZXh0cmFjdGlu ZyBhbmQKKyAgICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWN1bGFyIHdvcmQgZnJvbSBzdHJpbmcg czEsIGl0IGNvdW50cyB0aGUgd29yZHMKKyAgICAgICAgICBhbmQgb3B0aW9uYWxseSBhc3NpZ25z IHRoZW0gdG8gdGhlIGFycmF5IHdob3NlIGlkZW50aWZ5aW5nCisgICAgICAgICAgbGV0dGVyLCBh LXosIGlzIGdpdmVuIGFmdGVyIHRoZSAiJiIgaW4gdGhlIHNlY29uZCBhcmd1bWVudCwgd2l0aAor ICAgICAgICAgIHRoZSBmaXJzdCB3b3JkIGdvaW5nIGludG8gZWxlbWVudCAxLCB0aGUgc2Vjb25k IGludG8gZWxlbWVudCAyLAorICAgICAgICAgIGFuZCBzbyBvbi4gVGhlIHJ1bGVzIHJlZ2FyZGlu ZyBicmVhayBhbmQgaW5jbHVkZSBsaXN0cyAoczIgYW5kCisgICAgICAgICAgczMpIGFyZSBleGFj dGx5IHRoZSBzYW1lIGFzIGZvciBcZndvcmQoKS4gXGZzcGxpdCgpIHJldHVybnMgdGhlCisgICAg ICAgICAgbnVtYmVyIG9mIHdvcmRzIHRoYXQgd2VyZSBhc3NpZ25lZCwgd2hpY2ggaXMgZWl0aGVy IHRoZSBudW1iZXIKKyAgICAgICAgICBvZiB3b3JkcyBpbiB0aGUgc3RyaW5nLCBvciB0aGUgZGlt ZW5zaW9uIG9mIHRoZSBhcnJheSwgd2hpY2hldmVyCisgICAgICAgICAgaXMgbGVzcy4gSWYgdGhl IGFycmF5IGlzIG5vdCBkZWNsYXJlZCwgXGZzcGxpdCgpIGNyZWF0ZXMgaXQgYW5kCisgICAgICAg ICAgcmV0dXJucyBhIG51bWJlciB3aGljaCBpcyBib3RoIHRoZSBudW1iZXIgb2Ygd29yZHMgaW4g czEgYW5kIHRoZQorICAgICAgICAgIGRpbWVuc2lvbiBvZiB0aGUgbmV3IGFycmF5LiBFeGFtcGxl czoKKworICBkZWNsYXJlIFwmd1syMF0gICAgICAgIDsgKE9wdGlvbmFsLikKKyAgLi4uCisgIHJl YWQgXCVzICAgICAgICAgICAgICAgOyBcJXMgaXMgIlRoaXMgaXMgYSBzZW50ZW5jZSB3aXRoIHNl dmVuIHdvcmRzLiIKKyAgLi4uCisgIGVjaG8gIlxmc3BsaXQoXCVzKSIgICAgOyBUaGlzIHdvdWxk IHByaW50ICI3Ii4KKyAgZWNobyAiXGZzcGxpdChcJXMsJncpIiA7IERpdHRvLCBhbmQgYWxzbyBh c3NpZ25zIHRoZW0gdG8gYXJyYXkgXCZ3W10uCisKKyAgZWNobyAiXCZ3WzddIiAgICAgICAgICA7 IFRoaXMgd291bGQgcHJpbnQgIndvcmRzIi4KKworICAgICAgICAgIElmIHRoZSBsaW5lIGNvbnRh aW5lZCBmaWVsZHMgdGhhdCB3ZXJlIGRlbGltaXRlZCBieSBjb2xvbiAoOiksCisgICAgICAgICAg eW91IHdvdWxkIHVzZSBcZnNwbGl0KFwlcywmdyw6KS4gSWYgdGhlIGZpZWxkcyB3ZXJlIGRlbGlt aXRlZCBieQorICAgICAgICAgIGNvbW1hLCB0aGVuIHlvdSB3b3VsZCB1c2UgXGZzcGxpdChcJXMs Jncseyx9KTsgaW4gdGhpcyBjYXNlIHRoZQorICAgICAgICAgIGxpdGVyYWwgY29tbWEgbXVzdCBi ZSBlbmNsb3NlZCBpbiBicmFjZXMgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbQorICAgICAgICAgIHRo ZSBjb21tYSB0aGF0IHNlcGFyYXRlcyBmdW5jdGlvbiBhcmd1bWVudHMuIFRvIGdldCBhIHdvcmQg Y291bnQKKyAgICAgICAgICB3aXRob3V0IGxvYWRpbmcgYW4gYXJyYXksIGJ1dCBzdGlsbCBzcGVj aWZ5IGJyZWFrIGFuZC9vciBpbmNsdWRlCisgICAgICAgICAgbGlzdHMsIGxlYXZlIHRoZSBhcnJh eSBhcmd1bWVudCBlbXB0eToKKworICAgZWNobyAiXGZzcGxpdChcJXMsLDopIiA7IFVzZSBjb2xv biBhcyB0aGUgc2VwYXJhdG9yLgorCisgICAgICAgICAgV0FSTklOR1M6CisKKyAgICAgICAgIDEu IElmIHlvdSB1c2UgdGhlIHNhbWUgYXJyYXkgcmVwZWF0ZWRseSwgXGZzcGxpdCgpIGxlYXZlcyBh bnkKKyAgICAgICAgICAgIHRyYWlsaW5nIG1lbWJlcnMgdW5kaXN0dXJiZWQuIEZvciBleGFtcGxl OgorICBkY2wgXCZ3WzEwXQorICBcZnNwbGl0KDEgMiAzIDQgNSwmdykgOyBTZXRzIFwmd1sxXSB0 aHJ1IFwmd1s1XS4KKyAgXGZzcGxpdChhIGIgYywmdykgICAgIDsgU2V0cyBcJndbMV0tWzNdIGxl YXZpbmcgWzRdLVs1XSBhcyB0aGV5IHdlcmUuCisKKyAgICAgICAgIDIuIElmIHlvdSBhbGxvdyBc ZnNwbGl0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgKGJ5IG5vdCBkZWNsYXJpbmcgaXQKKyAgICAgICAg ICAgIGZpcnN0KSwgaXQgaXMgZGltZW5zaW9uZWQgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBp dCB3YXMKKyAgICAgICAgICAgIGNyZWF0ZWQgd2l0aDoKKyAgXGZzcGxpdCgxIDIgMywmeCkgICAg IDsgQ3JlYXRlcyBhbiBhcnJheSBcJnhbXSB3aXRoIDMgZWxlbWVudHMuCisgIFxmc3BsaXQoYSBi IGMgZCBlLCZ4KSA7IFRoaXMgb3ZlcmZsb3dzIHRoZSBhcnJheS4KKworICAgICAgICAgIFRodXMg aWYgeW91IHdhbnQgdG8gdXNlIFxmc3BsaXQoKSByZXBlYXRlZGx5IG9uIHRoZSBzYW1lIGFycmF5 LAorICAgICAgICAgIGVpdGhlciBkaW1lbnNpb24gaXQgaW4gYWR2YW5jZSB0byB0aGUgbWF4aW11 bSBleHBlY3RlZCBzaXplIChhbmQKKyAgICAgICAgICB0aGVuIHNvbWUgLS0gbW9yZSBlZmZpY2ll bnQpLCBvciBlbHNlIGRlc3Ryb3kgaXQgYWZ0ZXIgZWFjaCB1c2UKKyAgICAgICAgICAodG8gYWxs b3cgZm9yIHVuZXhwZWN0ZWRseSBsYXJnZSBhcmd1bWVudHMpLiBFeGFtcGxlIHVzaW5nIGEKKyAg ICAgICAgICBkeW5hbWljIGFycmF5OgorCisgIGZvcGVuIC9yZWFkIFwlYyBzb21lLWZpbGUKKyAg aWYgZmFpbCAuLi4KKyAgc2V0IGZ1bmN0aW9uIGVycm9yIG9uICAgIDsgU2VlIFs1ODJdU2VjdGlv biA3LjEyCisgIHdoaWxlIHRydWUgeworICAgICAgZGNsIFwmd1tdICAgICAgICAgICAgOyBEZXN0 cm95IFwmW3ddIGVhY2ggdGltZSB0aHJ1IHRoZSBsb29wCisgICAgICBmcmVhZCAvbGluZSBcJWMg XCVhCisgICAgICBpZiBmYWlsIGJyZWFrCisgICAgICBhc2cgXCV4IFxmc3BsaXQoXCVhLCZ3KQor ICAgICAgaWYgZmFpbCAuLi4KKyAgICAgIDsgKGRvIHdoYXQgeW91IHdhbnQgd2l0aCBcJndbXSBo ZXJlLi4uKQorICB9CisgIGZjbG9zZSBcJWMKKworICAgXGZyaW5kZXgoczEsczIsbikKKyAgICAg ICAgICBUaGUgIm4iIGFyZ3VtZW50IHRvIFxmcmluZGV4KCkgbm93IHdvcmtzIGNvbnNpc3RlbnRs eSAoaW4gbWlycm9yCisgICAgICAgICAgaW1hZ2UpIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgXGZp bmRleCgpIGFyZ3VtZW50LiBJbiBlYWNoIGNhc2UsCisgICAgICAgICAgdGhlIChuLTEpLW1vc3Qg Y2hhcmFjdGVycyBvZiBzMiBhcmUgaWdub3JlZCBpbiB0aGUgc2VhcmNoOyBmb3IKKyAgICAgICAg ICBmaW5kZXgsIHRoaXMgbWVhbnMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBzZWFyY2gg aXMgbiAodGhlCisgICAgICAgICAgZGVmYXVsdCBuIGlzIDEsIGFuZCAwIGlzIHRyZWF0ZWQgbGlr ZSAxKS4gRm9yIFxmcmluZGV4KCkgaXQKKyAgICAgICAgICBtZWFucyB0aGUgZGVmYXVsdCBzdGFy dGluZyBwb2ludCBpczoKKworICBsZW5ndGgoczIpIC0gbGVuZ3RoKHMxKSAtIG4gKHdpdGggdGhl IHNhbWUgZGVmYXVsdHMgZm9yIG4pLgorCisgICBcZnNlYXJjaChwYXR0ZXJuLHN0cmluZ1sscG9z aXRpb25dKQorICAgICAgICAgIEV4YWN0bHkgbGlrZSBcZmluZGV4KCksIGV4Y2VwdCB3aXRoIGEg cGF0dGVybiAoc2VlIFs1ODNdU2VjdGlvbgorICAgICAgICAgIDcuOSkgcmF0aGVyIHRoYW4gYSBs aXRlcmFsIHN0cmluZy4KKworICAgXGZyc2VhcmNoKHBhdHRlcm4sc3RyaW5nWyxwb3NpdGlvbl0p CisgICAgICAgICAgRXhhY3RseSBsaWtlIFxmcmluZGV4KCksIGV4Y2VwdCB3aXRoIGEgcGF0dGVy biByYXRoZXIgdGhhbiBhCisgICAgICAgICAgbGl0ZXJhbCBzdHJpbmcuCisKKyAgICAgICAgICBG aWxlIEZ1bmN0aW9uczoKKworICAgXGZmaWxlcygpLCBcZm5leHRmaWxlKCkKKyAgICAgICAgICBJ dCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGNvcHkgdGhlIGZpbGUgbGlzdCB0byBhbiBhcnJh eQorICAgICAgICAgIGJlZm9yZSB1c2UsIGFzIHNob3duIG9uIHAuMzk4IG9mIFs1ODRdVXNpbmcg Qy1LZXJtaXQgMm5kCisgICAgICAgICAgRWRpdGlvbi4gXGZmaWxlcygpIGFuZCBmcmllbmRzIG5v dyBtYWtlIHRoZWlyIG93biBzYWZlIGNvcGllcyBvZgorICAgICAgICAgIHRoZSBmaWxlIGxpc3Qu IFRodXMgY29uc3RydWN0aW9ucyBsaWtlIHRoZSBmb2xsb3dpbmcgYXJlIG5vdworICAgICAgICAg IHBvc3NpYmxlOgorCisgIGZvciBcJWkgMSBcZmZpbGVzKCoudHh0KSAxIHsgc2VuZCBcZm5leHRm aWxlKCkgfQorCisgICAgICAgICAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIG5ldyBmdW5jdGlv biBcZnJmaWxlcygpLAorICAgICAgICAgIFxmZGlyZWN0b3JpZXMoKSwgYW5kIFxmcmRpcmVjdG9y aWVzKCksIGRlc2NyaWJlZCBpbiBbNTg1XVNlY3Rpb24KKyAgICAgICAgICA0LjExLjMuCisKKyAg ICAgICAgICBCdXQgbm90ZSB0aGF0IGVhY2ggcmVmZXJlbmNlIHRvIFxmbmV4dGZpbGUoKSBzdGls bCBnZXRzIHlvdSB0aGUKKyAgICAgICAgICBuZXh0IGZpbGUuIFNvICJpZiBuZXdlciBcZm5leHRm aWxlKCkgZm9vLnR4dCBzZW5kIFxmbmV4dGZpbGUoKSIKKyAgICAgICAgICBjb21wYXJlcyBvbmUg ZmlsZSdzIGFnZSB3aXRoIHRoYXQgb2YgZm9vLnR4dCwgYW5kIHRoZW4gc2VuZHMgYW4KKyAgICAg ICAgICBlbnRpcmVseSBkaWZmZXJlbnQgZmlsZS4gSWYgeW91J3JlIGdvaW5nIHRvIHJlZmVyIHRv IHRoZSBzYW1lCisgICAgICAgICAgZmlsZSBtb3JlIHRoYW4gb25jZSwgYXNzaWduIGl0IHRvIGEg dmFyaWFibGU6CisKKyAgYXNnIFwlZiBcZm5leHRmaWxlKCkKKyAgaWYgbmV3ZXIgXCVmIGZvby50 eHQgc2VuZCBcJWYKKworICAgICAgICAgIChub3RlOiBhc3NpZ24sIG5vdCBkZWZpbmUpLgorCisg ICAgICAgICAgQWxzbyBub3RlIHRoYXQgXGZmaWxlcygpLCBcZnJmaWxlcygpLCBcZmRpcmVjdG9y aWVzKCksIGFuZAorICAgICAgICAgIFxmcmRpcmVjdG9yaWVzKCkgYWxsIG5vdyBhY2NlcHQgb24g b3B0aW9uYWwgMm5kIGFyZ3VtZW50OiB0aGUKKyAgICAgICAgICBuYW1lIG9mIGFuIGFycmF5IHRv IGxvYWQgd2l0aCB0aGUgcmVzdWx0aW5nIGZpbGUgb3IgZGlyZWN0b3J5CisgICAgICAgICAgbGlz dCwgZXhwbGFpbmVkIGluIFs1ODZdU2VjdGlvbiA0LjExLjMuIFNvIHlvdSBjYW4gYWxzbyBsb2Fk IGFuCisgICAgICAgICAgYXJyYXkgd2l0aCB0aGUgZmlsZWxpc3Qgd2hlbiB5b3UgbmVlZCB0byBy ZWZlciB0byB0aGUgc2FtZSBmaWxlCisgICAgICAgICAgbW9yZSB0aGFuIG9uY2U6CisKKyAgZm9y IFwlaSAxIFxmZmlsZXMoKiwmYSkgMSB7IGlmIG5ld2VyIFwmYVtcJWldIGZvby50eHQgc2VuZCBc JmFbXCVpXSB9CisKKyAgIFxmcGVybWlzc2lvbnMoZmlsZSkKKyAgICAgICAgICBSZXR1cm5zIHRo ZSBwbGF0Zm9ybS1zcGVjaWZpYyBwZXJtaXNzaW9ucyBzdHJpbmcgZm9yIHRoZSBmaWxlLAorICAg ICAgICAgIHN1Y2ggYXMgIi1ydy1ydy1yLS0iIGluIFVOSVggb3IgIihSV0UsUldFLFJFLEUpIiBp biBWTVMuCisKKyAgIFxmZGlybmFtZShmKQorICAgICAgICAgIEdpdmVuIGEgZmlsZSBzcGVjaWZp Y2F0aW9uIGYsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29tcGxldGUKKyAgICAgICAgICBw YXRobmFtZSBvZiBkaXJlY3RvcnkgdGhlIGZpbGUgaXMgaW4uCisKKyAgIEFycmF5IEZ1bmN0aW9u czoKKworICAgXGZkaW1lbnNpb24oJmEpCisgICAgICAgICAgUmV0dXJucyB0aGUgZGltZW5zaW9u IGRlY2xhcmVkIGZvciB0aGUgYXJyYXkgd2hvc2UgaWRlbnRpZnlpbmcKKyAgICAgICAgICBsZXR0 ZXIsIGEteiwgb3Igc3BlY2lhbCBjaGFyYWN0ZXIgIl8iIG9yICJAIiwgaXMgZ2l2ZW4gYWZ0ZXIg dGhlCisgICAgICAgICAgIiYiIGluIHRoZSBhcmd1bWVudC4gSWYgdGhlIGFycmF5IGlzIG5vdCBk ZWNsYXJlZCwgMCBpcworICAgICAgICAgIHJldHVybmVkLiBOb3RlIHRoYXQgd2hlbiB1c2VkIHdp dGggdGhlIG1hY3JvIGFyZ3VtZW50IHZlY3RvcgorICAgICAgICAgIGFycmF5LCBcJl9bXSAoc2Vl IFs1ODddU2VjdGlvbiA3LjUpLCB0aGUgdmFsdWUgb2YgdGhpcyBmdW5jdGlvbgorICAgICAgICAg IGlzIG9uZSBsZXNzIHRoYW4gXHYoYXJnYyksIGFuZCB3aGVuIHVzZWQgd2l0aCB0aGUgQy1LZXJt aXQKKyAgICAgICAgICBjb21tYW5kLWxpbmUgYXJndW1lbnQgdmVjdG9yIGFycmF5LCBcJkBbXSwg aXQgaXMgZXF1YWwgdG8gdGhlCisgICAgICAgICAgXHYoYXJncykgdmFyaWFibGUuIEV4YW1wbGVz OgorCisgIGVjaG8gXGZkaW1lbnNpb24oJmEpICAgICAgIDsgTm90IGRlY2xhcmVkLgorICAwCisg IGRlY2xhcmUgXCZhWzEyXSAgICAgICAgICAgIDsgTm93IGl0J3MgZGVjbGFyZWQuCisgIGVjaG8g XGZkaW0oJmEpCisgIDEyCisKKyAgIFxmYXJyYXlsb29rKHBhdHRlcm4sYXJyYXluYW1lKQorICAg ICAgICAgIExvb2tzIGluIHRoZSBnaXZlbiBhcnJheSBmb3IgdGhlIHBhdHRlcm4gYW5kIHJldHVy bnMgdGhlIGluZGV4CisgICAgICAgICAgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBtYXRjaGVz LCBpZiBhbnksIG9yIC0xIGlmIG5vbmUgbWF0Y2guCisgICAgICAgICAgVGhlIGFycmF5bmFtZSBj YW4gaW5jbHVkZSBhIHJhbmdlIHNwZWNpZmllciB0byByZXN0cmljdCB0bworICAgICAgICAgIHNl YXJjaCB0byBhIHNlZ21lbnQgb2YgdGhlIGFycmF5LCBlLmcuCisgICAgICAgICAgXGZhcnJheWxv b2soKnh5eiosJmFbMzI6NjNdKS4gRm9yIGdyZWF0ZXIgZGV0YWlsIHNlZQorICAgICAgICAgIFs1 ODhdU2VjdGlvbiA3LjEwLjcuCisKKyAgIFxmdGFibGVsb29rKGtleXdvcmQsYXJyYXluYW1lWyxk ZWxpbWl0ZXJdKQorICAgICAgICAgIExvb2tzIGluIHRoZSBnaXZlbiAidGFibGUiLCB3aGljaCBt dXN0IGJlIHNvcnRlZCwgZm9yIHRoZSBnaXZlbgorICAgICAgICAgIGtleXdvcmQuIFJldHVybnMg dGhlIGluZGV4IG9mIHRoZSB0YWJsZSBlbGVtZW50IHRoYXQgdW5pcXVlbHkKKyAgICAgICAgICBt YXRjaGVzIHRoZSBnaXZlbiBrZXl3b3JkLCBvciAtMSBpZiBub25lIG1hdGNoLCBvciAtMiBpZiBt b3JlCisgICAgICAgICAgdGhhbiAxIG1hdGNoLiBGb3IgZ3JlYXRlciBkZXRhaWwgc2VlIFs1ODld U2VjdGlvbiA3LjEwLjcuCisKKyAgIE90aGVyIG5ldyBmdW5jdGlvbnM6CisKKyAgIFxmaXAyaGV4 KHMpCisgICAgICAgICAgQ29udmVydHMgYSBkb3R0ZWQgZGVjaW1hbCBJUCBhZGRyZXNzIHRvIGFu IDgtZGlnaXQgaGV4YWRlY2ltYWwKKyAgICAgICAgICBudW1iZXIuIFxmaXAyaGV4KDEyOC41OS4z OS4yKSA9IDgwM2IyNzAyLgorCisgICBcZmhleDJpcCh4KQorICAgICAgICAgIENvbnZlcnRzIGFu IDgtZGlnaXQgaGV4YWRlY2ltYWwgSVAgYWRkcmVzcyB0byBkb3R0ZWQgZGVjaW1hbAorICAgICAg ICAgIGZvcm0sIGUuZy4gXGZoZXgyaXAoODAzYjI3MDIpID0gMTI4LjU5LjM5LjIuIFRoZSBpbnZl cnNlIG9mCisgICAgICAgICAgXGZpcDJoZXgoKS4KKworICAgXGZjb21tYW5kKCkKKyAgIFxmcmF3 Y29tbWFuZCgpCisgICAgICAgICAgVGhlc2UgcnVuIGFuIGV4dGVybmFsIGNvbW1hbmQgYW5kIHJl dHVybiBpdHMgb3V0cHV0OyBzZWUKKyAgICAgICAgICBbNTkwXVNlY3Rpb24gNC4yLjguNC4KKwor ICAgXGZkaWFsY29udmVydChzKQorICAgICAgICAgIHMgaXMgYSBwaG9uZSBudW1iZXIgaW4gZWl0 aGVyIGxpdGVyYWwgb3IgcG9ydGFibGUgZm9ybWF0IChub3QgYQorICAgICAgICAgIGRpYWxpbmcg ZGlyZWN0b3J5IGVudHJ5IG5hbWUpLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZGlhbAorICAg ICAgICAgIHN0cmluZyB0aGF0IHdvdWxkIGFjdHVhbGx5IGJlIHVzZWQgd2hlbiBkaWFsaW5nIGZy b20gdGhlIGN1cnJlbnQKKyAgICAgICAgICBsb2NhdGlvbiAoYWZ0ZXIgcHJvY2Vzc2luZyBjb3Vu dHJ5IGNvZGUsIGFyZWEgY29kZSwgYW5kIG90aGVyCisgICAgICAgICAgU0VUIERJQUwgdmFsdWVz KS4KKworICAgXGZlcnJzdHJpbmcobikKKyAgICAgICAgICBSZXR1cm5zIHRoZSBzeXN0ZW0gZXJy b3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIChudW1lcmljKQorICAgICAgICAgIGVycm9y IGNvZGUgbi4gVU5JWCBhbmQgVk1TIG9ubHkuIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAg ICAgICAgXHYoZXJybm8pIG9yIFx2KHBleGl0c3RhdCkuIFNlZSBbNTkxXVNlY3Rpb24gNC4yLjUg Zm9yIGEgdXNhZ2UKKyAgICAgICAgICBleGFtcGxlLiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXNu J3Qgd29yayBpbiBXaW5kb3dzIGJlY2F1c2UKKyAgICAgICAgICB0aGVyZSBpcyBub3QgYSBjb25z aXN0ZW50IGVycm9yLWNvZGUtdG8tbWVzc2FnZSBtYXBwaW5nOyBlcnJvcgorICAgICAgICAgIGNv ZGUgIngiIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24K KyAgICAgICAgICB3aGV0aGVyIGl0IGNvbWVzIGZyb20gdGhlIEMgcnVudGltZSBsaWJyYXJ5LCBX aW5zb2NrLCBhCisgICAgICAgICAgV2luZG93cy0zMiBBUEksIFRBUEksIGV0YywKKworICAgXGZw YXR0ZXJuKHMpCisgICAgICAgICAgVXNlZCBpbiBJTlBVVCwgUkVJTlBVVCwgYW5kIE1JTlBVVCBj b21tYW5kcyB0byBkZW5vdGUgc2VhcmNoCisgICAgICAgICAgc3RyaW5ncyB0aGF0IGFyZSB0byBi ZSB0cmVhdGVkIGFzIHBhdHRlcm5zIHJhdGhlciB0aGFuCisgICAgICAgICAgbGl0ZXJhbGx5Lgor CisgICBBbHNvIHNlZSBbNTkyXVNlY3Rpb24gNy44IG9uIGJ1aWx0LWluIGhlbHAgZm9yIGZ1bmN0 aW9ucy4KKworICA3LjQuIE5ldyBJRiBDb25kaXRpb25zCisKKyAgIElGIEFWQUlMQUJMRSBmZWF0 dXJlIGNvbW1hbmQKKyAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiB0aGUgZ2l2ZW4g ZmVhdHVyZSBpcyBhdmFpbGFibGUuCisgICAgICAgICAgUHJlc2VudGx5IHVzZWQgb25seSB0byBk ZXRlcm1pbmUgaWYgc3BlY2lmaWMgYXV0aGVudGljYXRpb24gYW5kCisgICAgICAgICAgZW5jcnlw dGlvbiBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFR5cGUgImlmIGF2YWlsYWJsZSA/IiB0byBzZWUK KyAgICAgICAgICB3aGljaCBmZWF0dXJlcyBtYXkgYmUgdGVzdGVkLgorCisgICBJRiBGTE9BVCBm MSBjb21tYW5kCisgICAgICAgICAgRXhlY3V0ZXMgY29tbWFuZCBpZiBmMSBpcyBhIGxlZ2FsIGZs b2F0aW5nIHBvaW50IG51bWJlciAod2hpY2gKKyAgICAgICAgICBpbmNsdWRlcyBpbnRlZ2Vycyku IFVzZSB0aGlzIHRvIHByZXZlcmlmeSBhcmd1bWVudHMgZm9yIHRoZQorICAgICAgICAgIFxmZnAu Li4oKSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGZ1bmN0aW9ucywgZS5nLiAiaWYgZmxvYXQK KyAgICAgICAgICBcJTEgZWNobyBcZmZwaW50KFwlMSkiLgorCisgICBJRiA9PSBuMSBuMiBjb21t YW5kCisgICAgICAgICAgU3lub255bSBmb3IgImlmID0iIChudW1lcmljIGVxdWFsaXR5KS4gTm90 ZSB0aGF0IGFzIG9mIEMtS2VybWl0CisgICAgICAgICAgNy4wLCB0aGlzIGFuZCBhbGwgb3RoZXIg bnVtZXJpYyBjb21wYXJpc29uIG9wZXJhdG9ycyBhbHNvIHdvcmsKKyAgICAgICAgICBmb3IgZmxv YXRpbmctcG9pbnQgbnVtYmVycy4KKworICAgSUYgIT0gbjEgbjIgY29tbWFuZAorICAgICAgICAg IEV4ZWN1dGVzIHRoZSBjb21tYW5kIGlmIG4xIGFuZCBuMiBhcmUgYm90aCBudW1iZXJzIG9yIHZh cmlhYmxlcworICAgICAgICAgIGNvbnRhaW5pbmcgbnVtYmVycyBhbmQgdGhlIHZhbHVlIG9mIG4x IGlzIG5vdCBlcXVhbCB0byB0aGUgdmFsdWUKKyAgICAgICAgICBvZiBuMi4gVGhpcyBpcyBlcXVp dmFsZW50IHRvICJpZiBub3QgPSBuMSBuMiIuCisKKyAgIElGIDw9IG4xIG4yIGNvbW1hbmQKKyAg ICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiBuMSBhbmQgbjIgYXJlIGJvdGggbnVtYmVy cyBvciB2YXJpYWJsZXMKKyAgICAgICAgICBjb250YWluaW5nIG51bWJlcnMgYW5kIHRoZSB2YWx1 ZSBvZiBuMSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KKyAgICAgICAgICB0aGUgdmFsdWUgb2Yg bjIuIFRoaXMgaXMgZXF1aXZhbGVudCB0byAiaWYgbm90ID4gbjEgbjIiLgorCisgICBJRiA+PSBu MSBuMiBjb21tYW5kCisgICAgICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYgbjEgYW5kIG4y IGFyZSBib3RoIG51bWJlcnMgb3IgdmFyaWFibGVzCisgICAgICAgICAgY29udGFpbmluZyBudW1i ZXJzIGFuZCB0aGUgdmFsdWUgb2YgbjEgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisgICAgICAg ICAgdG8gdGhlIHZhbHVlIG9mIG4yLiBFcXVpdmFsZW50IHRvICJpZiBub3QgPCBuMSBuMiIuCisK KyAgIElGIENPTU1BTkQgd29yZCBjb21tYW5kCisgICAgICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1h bmQgaWYgd29yZCBpcyBhIGJ1aWx0LWluIEMtS2VybWl0IGNvbW1hbmQuCisgICAgICAgICAgRXhh bXBsZToKKworICBpZiBub3QgY29tbWFuZCBjb3B5IGRlZmluZSB7IGNvcHkgcnVuIGNvcHkgXCUx IFwlMiB9Ii4KKworICAgICAgICAgIFRoaXMgZGVmaW5lcyBhIENPUFkgbWFjcm8gdGhhdCBydW5z IGFuIGV4dGVybmFsIENPUFkgY29tbWFuZCBpZgorICAgICAgICAgIENPUFkgaXMgbm90IGFscmVh ZHkgYSBidWlsdC1pbiBjb21tYW5kLgorCisgICBJRiBMT0NBTCBjb21tYW5kCisgICAgICAgICAg RXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYgS2VybWl0IGlzIGluIGxvY2FsIG1vZGUsIGkuZS4gaWYg aXQgaGFzCisgICAgICAgICAgYSBTRVQgTElORSwgU0VUIFBPUlQsIG9yIFNFVCBIT1NUIChURUxO RVQsIFJMT0dJTiwgZXRjKSBkZXZpY2UKKyAgICAgICAgICBvciBjb25uZWN0aW9uIG9wZW4uIERv ZXMgbm90IGV4ZWN1dGUgdGhlIGNvbW1hbmQgaWYgaW4gcmVtb3RlCisgICAgICAgICAgbW9kZS4K KworICAgSUYgTUFUQ0ggc3RyaW5nIHBhdHRlcm4gY29tbWFuZAorICAgICAgICAgIEV4ZWN1dGVz IHRoZSBjb21tYW5kIGlmIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVybi4gRm9yIGEKKyAg ICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgc3ludGF4IGZvciB0aGUgcGF0dGVybiwgc2VlIFs1 OTNdU2VjdGlvbgorICAgICAgICAgIDQuOS4xLiBJZiB5b3Ugd2FudCB0byB0ZXN0IGlmIHRoZSBz dHJpbmcgY29udGFpbnMgcGF0dGVybiwgdXNlCisgICAgICAgICAgSUYgXGZzZWFyY2gocGF0dGVy bixzdHJpbmcpLgorCisgICBJRiBPUEVOIHsgREVCVUctTE9HLCBTRVNTSU9OLUxPRywgVFJBTlNB Q1RJT04tTE9HLCAuLi4gfSBjb21tYW5kCisgICAgICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQg aWYgdGhlIGdpdmVuIGZpbGUgaXMgb3BlbiwgZmFpbHMgaWYgaXQgaXMKKyAgICAgICAgICBub3Qg b3Blbi4gVHlwZSBJRiBPUEVOID8gZm9yIGEgY29tcGxldGUgbGlzdCBvZiBmaWxlcyB0aGF0IGNh bgorICAgICAgICAgIGJlIGNoZWNrZWQgKGFsbCB0aGUgZmlsZXMgdGhhdCBjYW4gYmUgb3BlbmVk IHdpdGggdGhlIE9QRU4gb3IKKyAgICAgICAgICBMT0cgY29tbWFuZHMpLgorCisgICBJRiBRVUlF VCBjb21tYW5kCisgICAgICAgICAgRXhlY3V0ZXMgdGhlIGNvbW1hbmQgaWYgU0VUIFFVSUVUIGlz IE9OLCBhbmQgZG9lcyBub3QgZXhlY3V0ZSBpdAorICAgICAgICAgIGlmIFNFVCBRVUlFVCBpcyBP RkYuIEV4YW1wbGU6IElGIE5PVCBRVUlFVCBFQ0hPIHsgVGhpcyBpcyBhCisgICAgICAgICAgbWVz c2FnZS59LgorCisgICBJRiBSRUFEQUJMRSBuYW1lCisgICAgICAgICAgU3VjY2VlZHMgaWYgbmFt ZSBpcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeQorICAgICAgICAg IHRoYXQgaXMgcmVhZGFibGUuCisKKyAgIElGIFdSSVRFQUJMRSBuYW1lCisgICAgICAgICAgU3Vj Y2VlZHMgaWYgbmFtZSBpcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9y eQorICAgICAgICAgIHRoYXQgaXMgd3JpdGFibGUsIGUuZy46CisKKyAgaWYgbm90IHdyaXRlYWJs ZSBcdihsb2NrZGlyKSBlY2hvIFBsZWFzZSByZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMh CisKKyAgIElGIEZMQUcgY29tbWFuZAorICAgICAgICAgIFRoaXMgdGVzdHMgYSB1c2VyLXNldHRh YmxlIGNvbmRpdGlvbiwgd2hpY2ggY2FuIG1lYW4gYW55dGhpbmcKKyAgICAgICAgICB5b3UgbGlr ZS4gU0VUIEZMQUcgT04gY2F1c2VzIHN1YnNlcXVlbnQgSUYgRkxBRyBjb21tYW5kcyB0bworICAg ICAgICAgIHN1Y2NlZWQ7IFNFVCBGTEFHIE9GRiBjYXVzZXMgdGhlbSB0byBmYWlsLiBPbmUgd2F5 IHRvIHVzZSBpdAorICAgICAgICAgIHdvdWxkIGJlIGZvciBkZWJ1Z2dpbmcgeW91ciBzY3JpcHRz OyBwcmVjZWRlIGFueSBkZWJ1Z2dpbmcKKyAgICAgICAgICBzdGF0ZW1lbnRzIHdpdGggSUYgRkxB Ry4gVGhlbiBTRVQgRkxBRyBvbiB0byBkZWJ1ZyB5b3VyIHNjcmlwdCwKKyAgICAgICAgICBTRVQg RkxBRyBPRkYgdG8gcnVuIGl0IHdpdGhvdXQgZGVidWdnaW5nLiBBbm90aGVyIGNvbW1vbiB1c2Ug aXMKKyAgICAgICAgICBmb3IgY2F1c2luZyBhbiBpbm5lciBsb29wIHRvIGNhdXNlIGFuIG91dGVy IGxvb3AgdG8gZXhpdC4KKworICAgSUYgQy1LRVJNSVQgY29tbWFuZAorICAgICAgICAgIEMtS2Vy bWl0LCBidXQgbm90IEtlcm1pdCA5NSBvciBNUy1ET1MgS2VybWl0LCBleGVjdXRlcyB0aGUKKyAg ICAgICAgICBjb21tYW5kLgorCisgICBJRiBLLTk1IGNvbW1hbmQKKyAgICAgICAgICBLZXJtaXQg OTUsIGJ1dCBub3QgQy1LZXJtaXQgb3IgTVMtRE9TIEtlcm1pdCwgZXhlY3V0ZXMgdGhlCisgICAg ICAgICAgY29tbWFuZC4KKworICAgSUYgTVMtS0VSTUlUIGNvbW1hbmQKKyAgICAgICAgICBNUy1E T1MgS2VybWl0LCBidXQgbm90IEMtS2VybWl0IG9yIEtlcm1pdCA5NSwgZXhlY3V0ZXMgdGhlCisg ICAgICAgICAgY29tbWFuZC4KKworICA3LjUuIFVzaW5nIE1vcmUgdGhhbiBUZW4gTWFjcm8gQXJn dW1lbnRzCisKKyAgIFRoZSBcdihhcmdjKSB2YXJpYWJsZSBub3cgZ2l2ZXMgdGhlIGFjdHVhbCBu dW1iZXIgb2YgYXJndW1lbnRzLCBldmVuIGlmCisgICB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhh biA5OgorCisgIEMtS2VybWl0PiBkZWZpbmUgeHggZWNobyBcdihhcmdjKQorICBDLUtlcm1pdD4g eHggYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6Cisg IDI3CisKKyAgIFJlbWVtYmVyIHRoYXQgXHYoYXJnYykgaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhl IG1hY3JvIGl0c2VsZiwgc28gaXQgaXMKKyAgIGFsd2F5cyBhdCBsZWFzdCAxLCBhbmQgaXMgYWx3 YXlzIDEgZ3JlYXRlciB0aGFuIHRoZSBhY3R1YWwgbnVtYmVyIG9mCisgICBhcmd1bWVudHMuIEFz IGluIHZlcnNpb25zIDYuMCBhbmQgZWFybGllciwgaWYgbW9yZSB0aGFuIDkgYXJndW1lbnRzIGFy ZQorICAgZ2l2ZW4sIG9ubHkgdGhlIGZpcnN0IG5pbmUgYXJlIGFzc2lnbmVkIHRvIHRoZSB2YXJp YWJsZXMgXCUxLi5cJTkuCisKKyAgIFRoZSBcJl9bXSBhcnJheSwgZGlzY3Vzc2VkIG9uIHBhZ2Ug MzUzIG9mIFs1OTRdVXNpbmcgQy1LZXJtaXQsIDJuZCBlZCwKKyAgIG5vdyBob2xkcyBhbGwgdGhl IGFyZ3VtZW50cywgdXAgdG8gc29tZSBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgbGltaXQKKyAg ICg2NCBvciBncmVhdGVyKSwgcmF0aGVyIHRoYW4gb25seSB0aGUgZmlyc3QgOS4gVG8gaWxsdXN0 cmF0ZTogdGhlCisgICBmb2xsb3dpbmcgbWFjcm8gdGVsbHMgdGhlIG51bWJlciBvZiBhcmd1bWVu dHMgaXQgd2FzIGNhbGxlZCB3aXRoIGFuZAorICAgdGhlbiBwcmludHMgdGhlbToKKworICBkZWZp bmUgc2hvd19hbGxfYXJncyB7CisgICAgICBsb2NhbCBcJWkKKyAgICAgIGVjaG8gXCZfWzBdIC0g TnVtYmVyIG9mIGFyZ3VtZW50czogXGZldmFsKFx2KGFyZ2MpLTEpCisgICAgICBmb3IgXCVpIDEg XHYoYXJnYyktMSAxIHsgZWNobyBcZmxwYWQoXCVpLDMpLiAiXCZfW1wlaV0iIH0KKyAgfQorCisg ICBXaXRoaW4gYSBtYWNybyBcJl9bMF0sIGxpa2UgXCUwLCBjb250YWlucyB0aGUgbmFtZSBvZiB0 aGUgbWFjcm8uCisKKyAgIEF0IHRvcCBsZXZlbCwgdGhlIFwmX1tdIGFycmF5IGlzIGZpbGxlZCBh cyBmb2xsb3dzOgorCisgICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IG9uIHRoZSBDLUtlcm1p dCBjb21tYW5kIGxpbmUgd2FzIGEgZmlsZW5hbWUsCisgICAgICAgb3IgQy1LZXJtaXQgd2FzIGlu dm9rZWQgZnJvbSBhICJLZXJiYW5nIiBzY3JpcHQgKFs1OTVdU2VjdGlvbgorICAgICAgIDcuMTkp LCBlbGVtZW50IDAgY29udGFpbnMgdGhlIGZpbGVuYW1lLCBhbmQgZWxlbWVudHMgMSB0aHJvdWdo CisgICAgICAgXHYoYXJnYyktMSBob2xkIHRoZSByZW1haW5pbmcgY29tbWFuZC1saW5lIGFyZ3Vt ZW50cy4KKyAgICAgKiBPdGhlcndpc2UgdGhlIHByb2dyYW0gbmFtZSBnb2VzIGluIGVsZW1lbnQg MCwgYW5kIGVsZW1lbnRzIDEKKyAgICAgICB0aHJvdWdoIFx2KGFyZ2MpLTEgaG9sZCBhbnkgYXJn dW1lbnRzIHRoYXQgd2VyZSBpbmNsdWRlZCBhZnRlciAiLS0iCisgICAgICAgb3IgIj0iCisKKyAg IFRoZSBuZXcgXCUqIHZhcmlhYmxlLCB3aGVuIHVzZWQgd2l0aGluIGEgbWFjcm8sIGlzIHJlcGxh Y2VkIGJ5IHRoZSB0ZXh0CisgICB0aGF0IGZvbGxvd2VkIHRoZSBtYWNybyBuYW1lIGluIHRoZSBt YWNybyBpbnZvY2F0aW9uLiBJZiBubyBhcmd1bWVudHMKKyAgIHdlcmUgZ2l2ZW4sIFwlKiBpcyBy ZXBsYWNlZCBieSB0aGUgZW1wdHkgc3RyaW5nLiBFeGFtcGxlczoKKworICBDLUtlcm1pdD4gZGVm aW5lIHh4IGVjaG8gW1wlKl0KKyAgQy1LZXJtaXQ+IGRlZmluZSBcJWEgb29mYQorICBDLUtlcm1p dD4geHgKKyAgW10KKyAgQy1LZXJtaXQ+IHh4IFwlYQorICBbb29mYV0KKyAgQy1LZXJtaXQ+IHh4 IGEKKyAgW2FdCisgIEMtS2VybWl0PiB4eCBhIGIKKyAgW2EgYl0KKyAgQy1LZXJtaXQ+IHh4IGEg YiBjCisgIFthIGIgY10KKyAgQy1LZXJtaXQ+IHh4IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0g biBvIHAgcSByIHMgdCB1IHYgdyB4IHkgegorICBbYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBu IG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6XQorCisgICBOb3RlIHRoYXQgXCUqIGNhbiBub3QgYmUg dXNlZCBhdCB0b3AgbGV2ZWwsIHNpbmNlIEtlcm1pdCBkb2VzIG5vdCBoYXZlCisgICBhY2Nlc3Mg dG8gdGhlIHJhdyBjb21tYW5kIGxpbmUgKG9ubHkgdG8gaXRzIGVsZW1lbnRzIHNlcGFyYXRlbHks IGFmdGVyCisgICB0aGV5IGhhdmUgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIHNoZWxsIGFuZCB0aGUg QyBsaWJyYXJ5KS4KKworICAgQy1LZXJtaXQgNy4wIGFsc28gYWRkcyBhIFNISUZUIGNvbW1hbmQ6 CisKKyAgIFNISUZUIFsgbnVtYmVyIF0KKyAgICAgICAgICBTaGlmdHMgdGhlIG1hY3JvIGFyZ3Vt ZW50cyAoZXhjZXB0IGFyZ3VtZW50IDApIHRoZSBnaXZlbiBudW1iZXIKKyAgICAgICAgICBvZiBw bGFjZXMgdG8gdGhlIGxlZnQgYW5kIGFkanVzdHMgXHYoYXJnYykgYWNjb3JkaW5nbHkuIFRoZQor ICAgICAgICAgIGRlZmF1bHQgbnVtYmVyIGlzIDEuCisKKyAgIFRvIGlsbHVzdHJhdGUsIHN1cHBv c2UgbWFjcm8gWFhYIGlzIGludm9rZWQgYXMgZm9sbG93czoKKworICB4eHggYXJnMSBhcmcyIGFy ZzMKKworICAgVGhlbiBpbnNpZGUgWFhYLCBcJTEgaXMgImFyZzEiLCBcJTIgaXMgImFyZzIiLCBh bmQgXCUzIGlzICJhcmczIi4gQWZ0ZXIKKyAgIGEgU0hJRlQgY29tbWFuZCBpcyBnaXZlbiBpbnNp ZGUgWFhYLCB0aGVuIFwlMSBpcyAiYXJnMiIsIFwlMiBpcyAiYXJnMyIsCisgICBhbmQgXCUzIGlz IGVtcHR5LiBcJTAgKHRoZSBuYW1lIG9mIHRoZSBtYWNybykgcmVtYWlucyB1bmNoYW5nZWQuCisK KyAgIElmIG1vcmUgdGhhbiA5IGFyZ3VtZW50cyB3ZXJlIGdpdmVuLCB0aGVuIGFyZ3VtZW50cyBh cmUgc2hpZnRlZCBpbnRvCisgICB0aGUgXCUxLi45IHZhcmlhYmxlcyBmcm9tIHRoZSBhcmd1bWVu dCB2ZWN0b3IgYXJyYXkuCisKKyAgIEF0IHRvcCBsZXZlbCwgdGhlIFNISUZUIGNvbW1hbmQgb3Bl cmF0ZXMgb24gdGhlIFwmX1tdIGFycmF5IGFuZCBcJTEuLjkKKyAgIHZhcmlhYmxlczsgdGhlIFwm QFtdIGFycmF5IGlzIG5vdCBhZmZlY3RlZC4gU2VlIFs1OTZdU2VjdGlvbiA3LjE2IGZvcgorICAg ZGV0YWlscy4KKworICAgVGhlIFwlKiB2YXJpYWJsZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIFNI SUZUIGNvbW1hbmQuCisKKyAgNy42LiBDbGFyaWZpY2F0aW9uIG9mIEZ1bmN0aW9uIENhbGwgU3lu dGF4CisKKyAgIFNwYWNlcyBhcmUgbm9ybWFsbHkgc3RyaXBwZWQgZnJvbSB0aGUgZnJvbnQgYW5k IGJhY2sgb2YgZWFjaCBmdW5jdGlvbgorICAgYXJndW1lbnQ7IHRvIHByZXZlbnQgdGhpcyBlbmNs b3NlIHRoZSBhcmd1bWVudCBpbiBicmFjZXM6CisKKyAgXGZzcGxpdChcJWEsJmEseyB9KQorCisg ICBIb3dldmVyLCBmdW5jdGlvbiBjYWxscyB0aGF0IGNvbnRhaW4gc3BhY2VzIGNhbiBtYWtlIHRy b3VibGUgd2hlbiB0aGUKKyAgIGZ1bmN0aW9uIGlzIHRvIGJlIHVzZWQgaW4gYSAid29yZCIgZmll bGQsIHNpbmNlIHNwYWNlIHNlcGFyYXRlcyB3b3Jkcy4KKyAgIEZvciBleGFtcGxlOgorCisgIGZv ciBcJWkgMSBcZnNwbGl0KFwlYSwmYSx7IH0pIDEgeworICAgIGVjaG8gXCVpLiAiXCZhW1wlaV0i CisgIH0KKworICAgSW4gbW9zdCBjYXNlcywgdGhlIHRyb3VibGUgY2FuIGJlIGF2ZXJ0ZWQgYnkg ZW5jbG9zaW5nIHRoZSBmdW5jdGlvbgorICAgcmVmZXJlbmNlIGluIGJyYWNlczoKKworICBmb3Ig XCVpIDEge1xmc3BsaXQoXCVhLCZhLHsgfSl9IDEgeworICAgIGVjaG8gXCVpLiAiXCZhW1wlaV0i CisgIH0KKworICAgb3IgYnkgcmVwbGFjaW5nIHNwYWNlcyB3aXRoIFwzMiAodGhlIEFTQ0lJIGNv ZGUgZm9yIHNwYWNlKToKKworICBmb3IgXCVpIDEgXGZzcGxpdChcJWEsJmEsXDMyKSAxIHsKKyAg ICBlY2hvIFwlaS4gIlwmYVtcJWldIgorICB9CisKKyAgIEJyYWNlcyBhcmUgYWxzbyB1c2VkIGlu IGZ1bmN0aW9uIGNhbGxzIHRvIGluZGljYXRlIGdyb3VwaW5nLiBGb3IKKyAgIGV4YW1wbGU6CisK KyAgXGZzdWJzdHJpbmcoYWJjZCwyLDIpID0gImJjIgorCisgICBCdXQgc3VwcG9zZSAiYWJjZCIg bmVlZGVkIHRvIGNvbnRhaW4gYSBjb21tYToKKworICBcZnN1YnN0cmluZyhhYixjZCwyLDIpCisK KyAgIFRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3IsIHNpbmNlICJjZCIgYXBwZWFycyB0byBiZSB0 aGUgc2Vjb25kCisgICBhcmd1bWVudCwgd2hlbiByZWFsbHkgeW91IHdhbnQgdGhlIGZpcnN0ICIy IiB0byBiZSB0aGUgc2Vjb25kIGFyZ3VtZW50LgorICAgQnJhY2VzIHRvIHRoZSByZXNjdWU6CisK KyAgXGZzdWJzdHJpbmcoe2FiLGNkfSwyLDIpID0gImIsIgorCisgICBTaW1pbGFybHksIGxlYWRp bmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBhcmUgc3RyaXBwZWQgZnJvbSBlYWNoIGFyZ3VtZW50LAor ICAgc286CisKKyAgXGZzdWJzdHJpbmcoIGFiY2QgLDIsMikgPSAiYmMiCisKKyAgIGJ1dCBicmFj ZXMgcHJlc2VydmUgdGhlbToKKworICBcZnN1YnN0cmluZyh7IGFiY2QgfSwyLDIpID0gImFiIgor CisgICBHaXZlbiB0aGVzZSBzcGVjaWFsIHVzZXMgZm9yIGJyYWNlcywgdGhlcmUgaXMgbm8gd2F5 IHRvIHBhc3MgbGl0ZXJhbAorICAgYnJhY2VzIHRvIHRoZSBmdW5jdGlvbiBpdHNlbGYuIEZvciBl eGFtcGxlOgorCisgIFxmc3Vic3RyaW5nKGFie2NkLDIsMikKKworICAgY2F1c2VzIGFuIGVycm9y LgorCisgICBTbyBpZiB5b3UgbmVlZCBhIGZ1bmN0aW9uIHRvIGluY2x1ZGUgYnJhY2VzLCBkZWZp bmUgYSB2YXJpYWJsZQorICAgY29udGFpbmluZyB0aGUgc3RyaW5nIHRoYXQgaGFzIGJyYWNlcy4g RXhhbXBsZToKKworICBkZWZpbmUgXCVhIGFie2NkCisgIFxmc3Vic3RyaW5nKFwlYSwyLDIpID0g ImJ7IgorCisgICBJZiB0aGUgc3RyaW5nIGlzIHRvIHN0YXJ0IHdpdGggYSBsZWFkaW5nIGJyYWNl IGFuZCBlbmQgd2l0aCBhIGNsb3NpbmcKKyAgIGJyYWNlLCB0aGVuIGRvdWJsZSBicmFjZXMgbXVz dCBhcHBlYXIgYXJvdW5kIHRoZSBzdHJpbmcgKHdoaWNoIGl0c2VsZgorICAgaXMgZW5jbG9zZWQg aW4gYnJhY2VzKToKKworICBkZWZpbmUgXCVhIHt7e2Zvb319fQorICBcZnN1YnN0cmluZyhcJWEp ID0gIntmb299IgorCisgICBUaGlzIGFsc28gd29ya3MgZm9yIGFueSBvdGhlciBraW5kIG9mIHN0 cmluZzoKKworICBkZWZpbmUgXCVhIHt7YWJ7Y2R9fQorICBlY2hvIFxmc3Vic3RyaW5nKFwlYSkg PSAiYWJ7Y2QiCisKKyAgNy43LiBBdXRvZG93bmxvYWQgZHVyaW5nIElOUFVUIENvbW1hbmQgRXhl Y3V0aW9uCisKKyAgIEFzIG9mIDYuMSAvIDEuMS4xMiwgQy1LZXJtaXQgY2FuIGJlIHRvbGQgdG8g bG9vayBmb3IgaW5jb21pbmcgS2VybWl0CisgICAob3IgWm1vZGVtKSBwYWNrZXRzIGR1cmluZyBl eGVjdXRpb24gb2YgYW4gSU5QVVQgY29tbWFuZC4gQnkgZGVmYXVsdAorICAgKGZvciBjb25zaXN0 ZW5jeSB3aXRoIGVhcmxpZXIgcmVsZWFzZXMpLCB0aGlzIGlzIG5vdCBkb25lLiBZb3UgY2FuCisg ICBlbmFibGUgdGhpcyBmZWF0dXJlIHdpdGg6CisKKyAgU0VUIElOUFVUIEFVVE9ET1dOTE9BRCBP TgorCisgICAoYW5kIGRpc2FibGUgaXQgYWdhaW4gd2l0aCBPRkYuKQorCisgICBPbmUgcG9zc2li bGUgdXNlIGZvciB0aGlzIGZlYXR1cmUgaXMgYXMgYSBzZXJ2ZXIgbW9kZSB3aXRoIGEgdGltZQor ICAgbGltaXQ6CisKKyAgSU5QVVQgMzYwMCBzZWNyZXQtc3RyaW5nLXRvLWVuZC10aGUtSU5QVVQt Y29tbWFuZAorCisgICBJbiB0aGlzIGV4YW1wbGUsIGFueSBHRVQsIFNFTkQsIG9yIFJFTU9URSBj b21tYW5kcyByZWNlaXZlZCB3aXRoaW4gb25lCisgICBob3VyICgzNjAwIHNlY29uZHMpIG9mIHdo ZW4gdGhlIElOUFVUIGNvbW1hbmQgd2FzIGlzc3VlZCB3aWxsIGJlCisgICBleGVjdXRlZC4gSGVy ZSdzIGFub3RoZXIgZXhhbXBsZSwgaW4gd2hpY2ggd2Ugd2FudCB0byBzdGF5IG9wZW4gdW50aWwK KyAgIDExOjMwcG0sIG9yIHVudGlsIGludGVycnVwdGVkIGJ5IHNldmVuIGNvbnNlY3V0aXZlIEN0 cmwtQyAoXDMpCisgICBjaGFyYWN0ZXJzOgorCisgIElOUFVUIDIzOjMwOjAwIFwzXDNcM1wzXDNc M1wzCisKKyAgIFRoZSBJTlBVVCBBVVRPRE9XTkxPQUQgc2V0dGluZyBpcyBkaXNwbGF5ZWQgYnkg U0hPVyBTQ1JJUFRTIG9yIFNIT1cKKyAgIElOUFVULgorCisgIDcuOC4gQnVpbHQtaW4gSGVscCBm b3IgRnVuY3Rpb25zLgorCisgICBCZWdpbm5pbmcgaW4gQy1LZXJtaXQgNy4wLCB5b3UgbWF5IG9i dGFpbiBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjYWxsaW5nCisgICBjb252ZW50aW9ucyBhbmQgcmV0 dXJuIHZhbHVlcyBvZiBhbnkgYnVpbHQtaW4gZnVuY3Rpb24sIHN1Y2ggYXMKKyAgIFxmc3Vic3Ry aW5nKCksIHdpdGggdGhlIG5ldyBIRUxQIEZVTkNUSU9OIGNvbW1hbmQ7IGdpdmUgdGhlIGZ1bmN0 aW9uJ3MKKyAgIG5hbWUgd2l0aG91dCB0aGUgbGVhZGluZyAiXGYiLCBlLmcuICJoZWxwIGZ1bmMg c3Vic3RyaW5nIi4gWW91IGNhbiB1c2UKKyAgID8sIGNvbXBsZXRpb24sIGFuZCBhYmJyZXZpYXRp b24gaW4gdGhlIG5vcm1hbCBtYW5uZXIuCisKKyAgNy45LiBWYXJpYWJsZSBBc3NpZ25tZW50cwor CisgICAgNy45LjEuIEFzc2lnbm1lbnQgT3BlcmF0b3JzCisKKyAgIFByb2dyYW1tZXJzIGFjY3Vz dG9tZWQgdG8gbGFuZ3VhZ2VzIHN1Y2ggYXMgQyBvciBGb3J0cmFuIG1pZ2h0IGZpbmQKKyAgIEtl cm1pdCdzIG1ldGhvZCBvZiBhc3NpZ25pbmcgdmFsdWVzIHRvIHZhcmlhYmxlcyB1bm5hdHVyYWwg b3IgYXdrd2FyZC4KKyAgIEJlZ2lubmluZyBpbiBDLUtlcm1pdCA3LjAsIHlvdSBjYW4gdXNlIHRo ZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUKKyAgIG5vdGF0aW9uOgorCisgLm5hbWUgPSB2YWx1ZSAg ICBpcyBlcXVpdmFsZW50IHRvICAgREVGSU5FIG5hbWUgdmFsdWUKKyAubmFtZSA6PSB2YWx1ZSAg IGlzIGVxdWl2YWxlbnQgdG8gICBBU1NJR04gbmFtZSB2YWx1ZQorIC5uYW1lIDo6PSB2YWx1ZSAg aXMgZXF1aXZhbGVudCB0byAgIEFTU0lHTiBuYW1lIFxmZXZhbCh2YWx1ZSkKKworICAgV2hlbiB0 aGUgY29tbWFuZCBiZWdpbnMgd2l0aCBhIHBlcmlvZCAoLiksIHRoaXMgaW5kaWNhdGVzIGFuCisg ICBhc3NpZ25tZW50LiBUaGUgbmFtZSBjYW4gYmUgYSBtYWNybyBuYW1lLCBhIFwle2RpZ2l0LGxl dHRlcn0gdmFyaWFibGUsCisgICBvciBhbiBhcnJheSBlbGVtZW50LiBUaGVyZSBjYW4gYmUgc3Bh Y2UocykgYmV0d2VlbiAiLiIgYW5kIHRoZSBuYW1lLgorICAgRXhhbXBsZXM6CisKKyAgLlwlYSA9 IFRoaXMgaXMgYSBzdHJpbmcgIDsgU2FtZSBhcyAiZGVmaW5lIFwlYSBUaGlzIGlzIGEgc3RyaW5n IgorICBlY2hvIFwlYQorICBUaGlzIGlzIGEgc3RyaW5nCisKKyAgLnh4eCA9IFwlYSAgICAgICAg ICAgICAgIDsgU2FtZSBhcyAiZGVmaW5lIHh4eCBcJWEiCisgIGVjaG8gXG0oeHh4KQorICBcJWEK KworICAueHh4IDo9IFwlYSAgICAgICAgICAgICAgOyBTYW1lIGFzICJhc3NpZ24geHh4IFwlYSIK KyAgZWNobyBcbSh4eHgpCisgIFRoaXMgaXMgYSBzdHJpbmcKKworICBkZWNsYXJlIFwmYVsyXSAg ICAgICAgICAgOyBVc2Ugd2l0aCBhcnJheXMuLi4KKyAgZGVmaW5lIFwlaSAyCisgIC5cJmFbMV0g PSBmaXJzdAorICAuXCZhW1wlaV0gPSBzZWNvbmQKKworICAgVGhlIGZvbGxvd2luZyBzZXF1ZW5j ZSBpbGx1c3RyYXRlcyB0aGUgZGlmZmVyZW5jZXMgYW1vbmcgdGhyZWUgbGV2ZWxzCisgICBvZiBl dmFsdWF0aW9uOgorCisgIC5cJXggPSAyICAgICAgICAgIDsgRGVmaW5lIGEgdmFyaWFibGUgdG8g aGF2ZSBhIG51bWVyaWMgdmFsdWUKKyAgLlwleSA9ICgzICsgXCV4KSAgOyBEZWZpbmUgYW5vdGhl ciB2YXJpYWJsZSBhcyBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24KKworICAueHh4ID0gNCAqIFwl eSAgICA7ICI9IiBzaW1wbHkgY29waWVzIHRoZSByaWdodC1oYW5kIHNpZGUuCisgIGVjaG8gXG0o eHh4KQorICA0ICogXCV5CisKKyAgLnh4eCA6PSA0ICogXCV5ICAgOyAiOj0iIGV2YWx1YXRlcyB0 aGUgdmFyaWFibGVzIGZpcnN0LCB0aGVuIGNvcGllcy4KKyAgZWNobyBcbSh4eHgpCisgIDQgKiAo MyArIDIpCisKKyAgLnh4eCA6Oj0gNCAqIFwleSAgOyAiOjo9IiBldmFsdWF0ZXMgdGhlIGV4cHJl c3Npb24sIHRoZW4gY29waWVzLgorICBlY2hvIFxtKHh4eCkKKyAgMjAKKworICAgWW91IGNhbiBh bHNvIHVzZSB0aGlzIHN5bnRheCB0byBjbGVhciAodW5kZWZpbmUpIGEgdmFyaWFibGU6CisKKyAg LlwlYSA9IG9vZmEgICAgICAgOyBEZWZpbmUgdGhlIHZhcmlhYmxlCisgIGVjaG8gIlwlYSIKKyAg Im9vZmEiCisgIC5cJWEgICAgICAgICAgICAgIDsgQ2xlYXIgdGhlIHZhcmlhYmxlCisgIGVjaG8g IlwlYSIKKyAgIiIKKworICAgRXh0cmEgY3JlZGl0OiBDYW4geW91IGd1ZXNzIHdoYXQgaGFwcGVu cyBiZWxvdyB3aGVuIHRoZSBmaWxlICJhYmMiIGRvZXMKKyAgIG5vdCBleGlzdD8KKworICBmb3Bl biAvcmVhZCBcJWMgYWJjCisgIGlmIGZhaWwgLi4uCisKKyAgICA3LjkuMi4gTmV3IEFzc2lnbm1l bnQgQ29tbWFuZHMKKworICAgUmVjYWxsIHRoZSBERUZJTkUgYW5kIEFTU0lHTiBjb21tYW5kcywg YW5kIHRoZWlyIGhpZGRlbiBjb3VudGVycGFydHMsCisgICBfREVGSU5FIGFuZCBfQVNTSUdOLiBU aGUgZm9ybWVyIHRha2UgdGhlIHZhcmlhYmxlIG5hbWUgbGl0ZXJhbGx5LCB0aGUKKyAgIGxhdHRl ciBldmFsdWF0ZSB0aGUgdmFyaWFibGUtbmFtZSBmaWVsZCB0byBmb3JtIHRoZSB2YXJpYWJsZSBu YW1lCisgICBkeW5hbWljYWxseS4gRXhhbXBsZXM6CisKKyAgREVGSU5FIFwleCBmb28gICAgOyBT ZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgXCV4IHRvICJmb28iLgorICBERUZJTkUgXCVh IFwleCAgICA7IFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBcJWEgdG8gIlwleCIuCisg IF9ERUZJTkUgeF9cJWEgXCV4IDsgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHhfZm9v IHRvICJcJXgiLgorICBBU1NJR04gXCVhIFwleCAgICA7IFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2 YXJpYWJsZSBcJWEgdG8gdGhlICJmb28iLgorICBfQVNTSUdOIHhfXCVhIFwleCA7IFNldHMgdGhl IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSB4X2ZvbyB0byAiZm9vIi4KKworICAgVGhpcyBjb25jZXB0 IGhhcyBiZWVuIGNhcnJpZWQgb3ZlciB0byB0aGUgcmVtYWluaW5nIHZhcmlhYmxlLWFzc2lnbm1l bnQKKyAgIGNvbW1hbmRzOiBFVkFMVUFURSwgSU5DUkVNRU5ULCBhbmQgREVDUkVNRU5UOgorCisg ICBFVkFMVUFURSB2YXJpYWJsZW5hbWUgZXhwcmVzc2lvbgorICAgICAgICAgIEV2YWx1YXRlcyB0 aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFuZCBhc3NpZ25zIGl0cyB2YWx1ZSB0byB0aGUKKyAg ICAgICAgICB2YXJpYWJsZSB3aG9zZSBuYW1lIGlzIGdpdmVuLiBFeGFtcGxlOiAiZXZhbCBcJWEg MSsxIiBhc3NpZ25zCisgICAgICAgICAgIjIiIHRvIFwlYS4KKworICAgX0VWQUxVQVRFIG1ldGFu YW1lIGV4cHJlc3Npb24KKyAgICAgICAgICBFdmFsdWF0ZXMgdGhlIGFyaXRobWV0aWMgZXhwcmVz c2lvbiBhbmQgYXNzaWducyBpdHMgdmFsdWUgdG8gdGhlCisgICAgICAgICAgdmFyaWFibGUgd2hv c2UgbmFtZSBpcyBjb21wdXRlZCBmcm9tIHRoZSBnaXZlbiBtZXRhbmFtZS4KKyAgICAgICAgICBF eGFtcGxlOiAiZXZhbCBmb288XCVhPjo6XCUxIFwlMiAqIChcJTMgKyBcJTQpIiBhc3NpZ25zIHRo ZQorICAgICAgICAgIHZhbHVlIG9mICJcJTIgKiAoXCUzICsgXCU0KSIgdG8gdGhlIHZhcmlhYmxl IHdob3NlIG5hbWUgaXMKKyAgICAgICAgICBjb21wdXRlZCBmcm9tICJmb288XCVhPjo6XCUxIi4K KworICAgSU5DUkVNRU5UIHZhcmlhYmxlbmFtZSBbIGV4cHJlc3Npb24gXQorICAgICAgICAgIEV2 YWx1YXRlcyB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFuZCBhZGRzIGl0cyB2YWx1ZSB0byB0 aGUKKyAgICAgICAgICB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgd2hvc2UgbmFtZSBpcyBnaXZlbi4g RXhhbXBsZTogImluY3JlbWVudAorICAgICAgICAgIFwlYSIuCisKKyAgIF9JTkNSRU1FTlQgbWV0 YW5hbWUgWyBleHByZXNzaW9uIF0KKyAgICAgICAgICBFdmFsdWF0ZXMgdGhlIGFyaXRobWV0aWMg ZXhwcmVzc2lvbiBhbmQgYWRkcyBpdHMgdmFsdWUgdG8gdGhlCisgICAgICAgICAgdmFsdWUgb2Yg dGhlIHZhcmlhYmxlIHdob3NlIG5hbWUgaXMgY29tcHV0ZWQgZnJvbSB0aGUgZ2l2ZW4KKyAgICAg ICAgICBtZXRhbmFtZS4gRXhhbXBsZTogIl9pbmNyZW1lbnQgV29yZHM6OlwlMS5jb3VudFtcJTJd Ii4KKworICAgREVDUkVNRU5UIHZhcmlhYmxlbmFtZSBbIGV4cHJlc3Npb24gXQorICAgICAgICAg IEV2YWx1YXRlcyB0aGUgYXJpdGhtZXRpYyBleHByZXNzaW9uIGFuZCBzdWJ0cmFjdHMgaXRzIHZh bHVlIGZyb20KKyAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHdob3NlIG5hbWUg aXMgZ2l2ZW4uCisKKyAgIF9ERUNSRU1FTlQgbWV0YW5hbWUgWyBleHByZXNzaW9uIF0KKyAgICAg ICAgICBFdmFsdWF0ZXMgdGhlIGFyaXRobWV0aWMgZXhwcmVzc2lvbiBhbmQgc3VidHJhY3RzIGl0 cyB2YWx1ZSBmcm9tCisgICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSB3aG9zZSBu YW1lIGlzIGNvbXB1dGVkIGZyb20gdGhlIGdpdmVuCisgICAgICAgICAgbWV0YW5hbWUuCisKKyAg IFdBUk5JTkc6IFRoZSBzeW50YXggb2YgdGhlIEVWQUxVQVRFIGNvbW1hbmQgaGFzIGNoYW5nZWQg c2luY2UgQy1LZXJtaXQKKyAgIDYuMCBhbmQgSzk1IDEuMS4xNy4gUHJldmlvdXNseSwgaXQgZGlk IG5vdCBpbmNsdWRlIGEgdmFyaWFibGUgbmFtZSwKKyAgIG9ubHkgYW4gZXhwcmVzc2lvbi4gVG8g cmVzdG9yZSB0aGUgb2xkIGJlaGF2aW9yLCB1c2UgU0VUIEVWQUxVQVRFIE9MRC4KKyAgIFRvIHJl dHVybiB0byB0aGUgbmV3IGJlaGF2aW9yIGFmdGVyIHJlc3RvcmluZyB0aGUgb2xkIGJlaGF2aW9y LCB1c2UgU0VUCisgICBFVkFMVUFURSBORVcuCisKKyAgIE5PVEU6IFRoZXJlIGFyZSBubyBhbmFs b2dzIHRvIHRoZSAiXyIgY29tbWFuZHMgZm9yIHRoZSBvcGVyYXRvcnMKKyAgIGRlc2NyaWJlZCBp biBbNTk3XVNlY3Rpb24gNy45LjE7IHRob3NlIG9wZXJhdG9ycyBjYW4gbm90IGJlIHVzZWQgdG8K KyAgIGFzc2lnbiB2YWx1ZXMgdG8gdmFyaWFibGVzIHdob3NlIG5hbWVzIG11c3QgYmUgY29tcHV0 ZWQuCisKKyAgNy4xMC4gQXJyYXlzCisKKyAgIEMtS2VybWl0IDcuMCBhZGRzIGxvdHMgb2YgbmV3 IGFycmF5LXJlbGF0ZWQgZmVhdHVyZXMsIGFuZCBncm91cHMgdGhlbQorICAgdG9nZXRoZXIgdW5k ZXIgdGhlIE5FVyBBUlJBWSBjb21tYW5kOgorCisgICBBUlJBWSB7IENMRUFSLCBDT1BZLCBERUNM QVJFLCBERVNUUk9ZLCBSRVNJWkUsIFNIT1csIFNPUlQgfQorCisgICBJbiBlYWNoIG9mIHRoZSBB UlJBWSBjb21tYW5kcywgd2hlcmV2ZXIgYW4gYXJyYXkgbmFtZSBpcyBleHBlY3RlZCwKKyAgICJz aG9ydCBmb3JtcyIgbWF5IGJlIHVzZWQuIEZvciBleGFtcGxlLCBhbGwgb2YgdGhlIGZvbGxvd2lu ZyBhcmUKKyAgIGFjY2VwdGFibGU6CisKKyAgYXJyYXkgc2hvdyBcJmFbXSAgKG9yIFNIT1cgQVJS QVkuLi4pCisgIGFycmF5IHNob3cgJmFbXQorICBhcnJheSBzaG93IGFbXQorICBhcnJheSBzaG93 ICZhCisgIGFycmF5IHNob3cgYQorCisgICBJbiBhZGRpdGlvbiwgcmFuZ2VzIGFyZSBhY2NlcHRl ZCBpbiB0aGUgQVJSQVkgQ09QWSwgQVJSQVkgQ0xFQVIsIEFSUkFZCisgICBTRVQsIEFSUkFZIFNI T1csIGFuZCBBUlJBWSBTT1JUIGNvbW1hbmRzOgorCisgIGFycmF5IGNsZWFyIFwmYVsxNl0gICAg IDsgQ2xlYXJzIDE2IHRocnUgZW5kCisgIGFycmF5IGNsZWFyICZhWzE2XSAgICAgIDsgRGl0dG8K KyAgYXJyYXkgY2xlYXIgYVsxNl0gICAgICAgOyBEaXR0bworCisgIGFycmF5IGNsZWFyIFwmYVsx NjozMl0gIDsgQ2xlYXJzIDE2IHRocnUgMzIKKyAgYXJyYXkgY2xlYXIgJmFbMTY6MzJdICAgOyBE aXR0bworICBhcnJheSBjbGVhciBhWzE2OjMyXSAgICA7IERpdHRvCisKKyAgIFdoZW4gdXNpbmcg YXJyYXkgbmFtZXMgYXMgZnVuY3Rpb24gYXJndW1lbnRzLCB5b3UgbXVzdCBvbWl0IHRoZSAiXCIg YW5kCisgICB5b3UgbXVzdCBpbmNsdWRlIHRoZSAiJiIuIFlvdSBtYXkgb3B0aW9uYWxseSBpbmNs dWRlIGVtcHR5IGJyYWNrZXRzLgorICAgRXhhbXBsZXM6CisKKyAgXGZzcGxpdChcJWEsYSkgICAg ICAgICAgOyBCYWQKKyAgXGZzcGxpdChcJWEsXCZhKSAgICAgICAgOyBCYWQKKyAgXGZzcGxpdChc JWEsJmFbM10pICAgICAgOyBCYWQKKworICBcZnNwbGl0KFwlYSwmYSkgICAgICAgICA7IEdvb2QK KyAgXGZzcGxpdChcJWEsJmFbXSkgICAgICAgOyBHb29kCisKKyAgICA3LjEwLjEuIEFycmF5IElu aXRpYWxpemVycworCisgICBCZWdpbm5pbmcgaW4gQy1LZXJtaXQgNy4wLCB5b3UgbWF5IGluaXRp YWxpemUgYW4gYXJyYXkgLS0gaW4gd2hvbGUgb3IKKyAgIGluIHBhcnQgLS0gaW4gaXRzIGRlY2xh cmF0aW9uOgorCisgICBbIEFSUkFZIF0gREVDTEFSRSBhcnJheS1uYW1lW3NpemVdIFsgPSBdIFsg dmFsdWUxIFsgdmFsdWUyIFsuLi5dIF0gXQorCisgICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZl cnNpb25zIDVBIGFuZCA2LjAsIHRoZSBBUlJBWSBrZXl3b3JkIGlzCisgICBvcHRpb25hbC4gREVD TEFSRSBjYW4gYWxzbyBiZSBzcGVsbGVkIERDTC4KKworICAgSW5pdGlhbGl6ZXJzIGFyZSAoYSkg b3B0aW9uYWwsIChiKSBzdGFydCB3aXRoIGVsZW1lbnQgMSwgKGMpIG11c3QgYmUKKyAgIGVuY2xv c2VkIGluIGJyYWNlcyBpZiB0aGV5IGNvbnRhaW4gc3BhY2VzLCBhbmQgKGQpIGFyZSBldmFsdWF0 ZWQKKyAgIGFjY29yZGluZyB0byBub3JtYWwgcnVsZXMgYnkgdGhlIERFQ0xBUkUgY29tbWFuZCBw cmlvciB0byBhc3NpZ25tZW50LgorICAgVGh1cyB0aGUgYXNzaWdubWVudHMgbWFkZSBoZXJlIGFy ZSB0aGUgc2FtZSBhcyB0aG9zZSBtYWRlIGJ5IHRoZSBBU1NJR04KKyAgIGNvbW1hbmQuIFRoaXMg YWxsb3dzIHlvdSB0byBpbml0aWFsaXplIGFycmF5IGVsZW1lbnRzIGZyb20gdGhlIHZhbHVlcwor ICAgb2Ygb3RoZXIgdmFyaWFibGVzLiBJZiB5b3UgYWN0dWFsbHkgd2FudCB0byBpbml0aWFsaXpl IGFuIGFycmF5IGVsZW1lbnQKKyAgIHRvIHZhcmlhYmxlJ3MgbmFtZSwgYXMgb3Bwb3NlZCB0byBp dHMgdmFsdWUsIHVzZSBkb3VibGUgYmFja3NsYXNoZXMgKGFzCisgICBpbiAiXFwmYSIsICJcXHYo dGltZSkiLCBldGMpLgorCisgICBUaGUgc2l6ZSAoZGltZW5zaW9uKSBvZiB0aGUgYXJyYXkgaXMg b3B0aW9uYWwuIElmIHRoZSBzaXplIGlzIG9taXR0ZWQsCisgICBhcyBpbiAiXCZhW10iLCB0aGVu IHRoZSBhcnJheSBzaXplcyBpdHNlbGYgdG8gdGhlIG51bWJlciBvZgorICAgaW5pdGlhbGl6ZXJz OyBpZiB0aGVyZSBhcmUgbm8gaW5pdGlhbGl6ZXJzIHRoZSBhcnJheSBpcyBub3QgZGVjbGFyZWQK KyAgIG9yLCBpZiBpdCB3YXMgZGVjbGFyZWQgcHJldmlvdXNseSwgaXQgaXMgZGVzdHJveWVkLiBJ ZiBhIHNpemUgaXMgZ2l2ZW4sCisgICBhbnkgZXh0cmEgZWxlbWVudHMgaW4gdGhlIGluaXRpYWxp emF0aW9uIGxpc3QgYXJlIGRpc2NhcmRlZCBhbmQKKyAgIGlnbm9yZWQuCisKKyAgIE5PVEU6IFVu bGlrZSBpbiBDLCB0aGUgbGlzdCBvZiBpbml0aWFsaXplcnMgaXMgTk9UIGVuY2xvc2VkIGluIGJy YWNlcy4KKyAgIEluc3RlYWQsIGJyYWNlcyBhcmUgdXNlZCB0byBncm91cCBtdWx0aXBsZSB3b3Jk cyB0b2dldGhlci4gU286CisKKyAgQVJSQVkgREVDTEFSRSBcJmFbXSA9IHsgb25lIHR3byB0aHJl ZSB9CisKKyAgIHdvdWxkIGNyZWF0ZSBhbiBhcnJheSB3aXRoIHR3byBlbGVtZW50cyAoMCBhbmQg MSksIHdpdGggZWxlbWVudCAxCisgICBoYXZpbmcgdGhlIHZhbHVlICIgb25lIHR3byB0aHJlZSAi LgorCisgICBFeGFtcGxlczoKKworICAgQVJSQVkgREVDTEFSRSBcJmFbMTZdCisgICAgICAgICAg RGVjbGFyZXMgdGhlIGFycmF5IFwmYSB3aXRoIDE3IGVsZW1lbnRzICgwIHRocm91Z2ggMTYpLCBp biB3aGljaAorICAgICAgICAgIGFsbCBlbGVtZW50cyBhcmUgaW5pdGlhbGx5IGVtcHR5LiBJZiB0 aGUgYXJyYXkgXCZhW10gZXhpc3RlZAorICAgICAgICAgIGJlZm9yZSwgdGhlIGVhcmxpZXIgY29w eSBpcyBkZXN0cm95ZWQuCisKKyAgIEFSUkFZIERFQ0xBUkUgJmFbMTZdCisgICBBUlJBWSBERUNM QVJFIGFbMTZdCisgICBBUlJBWSBEQ0wgXCZhWzE2XQorICAgQVJSQVkgRENMICZhWzE2XQorICAg QVJSQVkgRENMIGFbMTZdCisgICBERUNMQVJFIFwmYVsxNl0KKyAgIERFQ0xBUkUgJmFbMTZdCisg ICBERUNMQVJFIGFbMTZdCisgICBEQ0wgXCZhWzE2XQorICAgRENMICZhWzE2XQorICAgRENMIGFb MTZdCisgICAgICAgICAgQWxsIG9mIHRoZSBhYm92ZSBhcmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0 IGV4YW1wbGUuCisKKyAgIEFSUkFZIERFQ0xBUkUgXCZhWzE2XSA9IGFscGhhIGJldGEge2dhbW1h IGRlbHRhfQorICAgICAgICAgIERlY2xhcmVzIHRoZSBhcnJheSBcJmEgd2l0aCAxNyBlbGVtZW50 cyAoMCB0aHJvdWdoIDE2KSwKKyAgICAgICAgICBpbml0aWFsaXppbmcgXCZhWzFdIHRvICJhbHBo YSIsIFwmYVsyXSB0byAiYmV0YSIsIGFuZCBcJmFbM10gdG8KKyAgICAgICAgICAiZ2FtbWEgZGVs dGEiLiBUaGUgcmVtYWluaW5nIGVsZW1lbnRzIGFyZSBlbXB0eS4KKworICAgQVJSQVkgREVDTEFS RSBcJmFbXSA9IGFscGhhIGJldGEge2dhbW1hIGRlbHRhfQorICAgICAgICAgIFNhbWUgYXMgdGhl IHByZXZpb3VzIGV4YW1wbGUsIGJ1dCB0aGUgYXJyYXkgaXMgYXV0b21hdGljYWxseQorICAgICAg ICAgIGRpbWVuc2lvbmVkIHRvIDMuCisKKyAgIEFSUkFZIERFQ0xBUkUgXCZhWzNdID0gYWxwaGEg YmV0YSB7Z2FtbWEgZGVsdGF9IGVwc2lsb24gemV0YQorICAgICAgICAgIFRvbyBtYW55IGluaXRp YWxpemVyczsgb25seSB0aGUgZmlyc3QgdGhyZWUgYXJlIGtlcHQuCisKKyAgIEFSUkFZIERFQ0xB UkUgXCZhWzBdCisgICBBUlJBWSBERUNMQVJFIFwmYVtdCisgICBBUlJBWSBERUNMQVJFICZhW10K KyAgIEFSUkFZIERFQ0xBUkUgJmEKKyAgIEFSUkFZIERFQ0xBUkUgYQorICAgREVDTEFSRSBcJlsw XQorICAgREVDTEFSRSBhCisgICBEQ0wgYQorICAgICAgICAgIEFsbCBvZiB0aGVzZSBhcmUgZXF1 aXZhbGVudC4gRWFjaCBkZXN0cm95cyBcJmFbXSBpZiBpdCBleGlzdHMuCisgICAgICAgICAgRGVj bGFyaW5nIGFuIGFycmF5IHdpdGggYSBkaW1lbnNpb24gb2YgMCBpcyB0aGUgc2FtZSBhcyBBUlJB WQorICAgICAgICAgIERFU1RST1kgYXJyYXluYW1lLgorCisgICBBUlJBWSBERUNMQVJFIFwmYVtd ID0gXCUxIFwlMiBcJTMKKyAgICAgICAgICBEZWNsYXJlcyB0aGUgYXJyYXkgXCZhIHdpdGggMyBl bGVtZW50cyAoMCB0aHJvdWdoIDMpLAorICAgICAgICAgIGluaXRpYWxpemluZyBcJmFbMV0gdG8g dGhlIHZhbHVlIG9mIFwlMSwgXCZhWzJdIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgIFwlMiwg YW5kIFwmYVszXSB0byB0aGUgdmFsdWUgb2YgXCUzLiBJbiB0aGlzIGNhc2UsIGFueSByZWZlcmVu Y2UKKyAgICAgICAgICB0byBvbmUgb2YgdGhlc2UgYXJyYXkgZWxlbWVudHMgaXMgcmVwbGFjZWQg YnkgdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICAgIGNvcnJlc3BvbmRpbmcgXCVuIHZhcmlhYmxl IGF0IHRoZSB0aW1lIHRoZSBkZWNsYXJhdGlvbiB3YXMKKyAgICAgICAgICBleGVjdXRlZCAoaW1t ZWRpYXRlIGV2YWx1YXRpb247IHRoZSBhcnJheSBlbGVtZW50J3MgdmFsdWUgZG9lcworICAgICAg ICAgIG5vdCBjaGFuZ2UgaWYgdGhlIGluaXRpYWxpemVyIHZhcmlhYmxlJ3MgdmFsdWUgY2hhbmdl cykuCisKKyAgIEFSUkFZIERFQ0xBUkUgXCZhW10gPSBcXCUxIFxcJTIgXFwlMworICAgICAgICAg IERlY2xhcmVzIHRoZSBhcnJheSBcJmEgd2l0aCAzIGVsZW1lbnRzICgwIHRocm91Z2ggMyksCisg ICAgICAgICAgaW5pdGlhbGl6aW5nIFwmYVsxXSB0byB0aGUgc3RyaW5nICJcJTEiLCBcJmFbMl0g dG8gIlwlMiIsIGFuZAorICAgICAgICAgIFwmYVszXSB0byAiXCUzIi4gSW4gdGhpcyBjYXNlIGFu eSByZWZlcmVuY2UgdG8gb25lIG9mIHRoZXNlCisgICAgICAgICAgYXJyYXkgZWxlbWVudHMgaXMg cmVwbGFjZWQgYnkgdGhlIENVUlJFTlQgdmFsdWUgb2YgdGhlCisgICAgICAgICAgY29ycmVzcG9u ZGluZyBcJW4gdmFyaWFibGUgKGRlZmVycmVkIGV2YWx1YXRpb24gLS0gdGhlIGFycmF5CisgICAg ICAgICAgZWxlbWVudCdzIHZhbHVlIGZvbGxvd3MgdGhlIHZhbHVlIG9mIHRoZSBpbml0aWFsaXpl ciB2YXJpYWJsZSkuCisKKyAgIFRoZSBlcXVhbCBzaWduICg9KSBwcmVjZWRpbmcgdGhlIGluaXRp YWxpemVyIGxpc3QgaXMgb3B0aW9uYWwsIGJ1dCBpcworICAgcmVjb21tZW5kZWQgZm9yIGNsYXJp dHkuIElmIHlvdSBuZWVkIHRvIGluaXRpYWxpemUgZWxlbWVudCAxIHRvIGEKKyAgIGxpdGVyYWwg ZXF1YWwgc2lnbiwgdXNlIHR3byBvZiB0aGVtLCBzZXBhcmF0ZWQgYnkgYSBzcGFjZSwgYXMgaW4g dGhpcworICAgZXhhbXBsZToKKworICBBUlJBWSBERUNMQVJFIFwmYVtdID0gPSArIC0gKiAvCisK KyAgIFJlbWVtYmVyLCBlbGVtZW50IDAgaXMgbm90IGluaXRpYWxpemVkIGJ5IHRoZSBERUNMQVJF IGNvbW1hbmQuIFRvCisgICBpbml0aWFsaXplIGVsZW1lbnQgMCwgdXNlIGEgcmVndWxhciBERUZJ TkUgb3IgQVNTSUdOIGNvbW1hbmQ6CisKKyAgQVJSQVkgREVDTEFSRSBcJmFbXSBvbmUgdHdvIHRo cmVlIGZvdXIgZml2ZSBzaXggc2V2ZW4gZWlnaHQgbmluZQorICBERUZJTkUgXCZhWzBdIHplcm8K KworICAgRmluYWxseSwgcmVtZW1iZXIgdGhhdCBldmVyeSBjb21tYW5kIGxldmVsIGhhcyBpdHMg b3duIGxvY2FsIGFycmF5LAorICAgXCZfW10sIGNvbnRhaW5pbmcgYWxsIHRoZSBtYWNybyBhcmd1 bWVudHMgKFwlMCwgXCUxLCAuLi4pIGZvciB0aGF0CisgICBsZXZlbC4gU2VlIFs1OThdU2VjdGlv biA3LjUgZm9yIGRldGFpbHMuCisKKyAgICA3LjEwLjIuIFR1cm5pbmcgYSBTdHJpbmcgaW50byBh biBBcnJheSBvZiBXb3JkcworCisgICBUaGUgXGZzcGxpdChzMSwmYSxzMixzMykgZnVuY3Rpb24g YXNzaWducyB0aGUgd29yZHMgb2Ygc3RyaW5nIHMxIHRvCisgICBzdWNjZXNzaXZlIGVsZW1lbnRz IG9mIHRoZSBhcnJheSAoYmVnaW5uaW5nIHdpdGggZWxlbWVudCAxKSB3aG9zZQorICAgaWRlbnRp ZnlpbmcgbGV0dGVyLCBhLXosIGlzIGdpdmVuIGFmdGVyIHRoZSAiJiIgaW4gdGhlIHNlY29uZCBh cmd1bWVudCwKKyAgIHVzaW5nIGJyZWFrIGFuZCBpbmNsdWRlIGNoYXJhY3RlcnMgZ2l2ZW4gaW4g czIgYW5kIHMzLiBTZWUgWzU5OV1TZWN0aW9uCisgICA3LjMgZm9yIGRldGFpbHMuCisKKyAgICA3 LjEwLjMuIEFycmF5cyBvZiBGaWxlbmFtZXMKKworICAgU2VlIFs2MDBdU2VjdGlvbiA0LjExLjMg Zm9yIG5ld3MgYWJvdXQgaG93IFxmZmlsZXMoKSBhbmQgcmVsYXRlZAorICAgZnVuY3Rpb25zIGNh biBhc3NpZ24gYSBsaXN0IG9mIGZpbGVuYW1lcyB0byBhbiBhcnJheS4gVG8gcmVjYXBpdHVsYXRl CisgICBicmllZmx5IGhlcmU6CisKKyAgXGZmaWxlcygqLCZhKQorCisgICBhc3NpZ25zIGFsbCBm aWxlcyB0aGF0IG1hdGNoIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgYXJyYXkgZGVub3RlZCBi eQorICAgdGhlIHNlY29uZCBhcmd1bWVudC4gSWYgdGhlIGFycmF5IGhhcyBub3QgYmVlbiBkZWNs YXJlZCwgaXQgaXMgZGVjbGFyZWQKKyAgIGF1dG9tYXRpY2FsbHksIHdpdGggZXhhY3RseSB0aGUg bnVtYmVyIG9mIGVsZW1lbnRzIG5lZWRlZCB0byBob2xkIHRoZQorICAgZmlsZSBsaXN0OyBpZiBp dCB3YXMgcHJldmlvdXNseSBkZWNsYXJlZCwgaXQgaXMgZGVzdHJveWVkIGFuZCByZXVzZWQuCisg ICBUaGUgZmlsZW5hbWVzIGFyZSBhc3NpZ25lZCBzdGFydGluZyBhdCBhcnJheSBlbGVtZW50IDEu IEVsZW1lbnQgMCBob2xkcworICAgdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0aGUgbGlzdC4KKwor ICAgVGhlIERJUkVDVE9SWSBjb21tYW5kIChbNjAxXVNlY3Rpb24gNC41LjEpIGNhbiBhbHNvIGNy ZWF0ZSBmaWxlbmFtZQorICAgYXJyYXlzIGlmIHlvdSBnaXZlIGl0IHRoZSAvQVJSQVk6IHN3aXRj aDsgdGhpcyBhbGxvd3Mgc2VsZWN0aW9uCisgICBjcml0ZXJpYSBiZXlvbmQgd2hldGhlciB0aGUg ZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KKworICAgQWxsIGZ1bmN0aW9ucyBh bmQgY29tbWFuZHMgdGhhdCBjcmVhdGUgZmlsZW5hbWUgYXJyYXlzIHN0b3JlIHRoZSBudW1iZXIK KyAgIG9mIGZpbGVuYW1lcywgbiwgYXMgZWxlbWVudCAwIG9mIHRoZSBhcnJheSwgYW5kIHRoZSBm aWxlbmFtZXMgYXMKKyAgIGVsZW1lbnRzIDEgdGhyb3VnaCBuLgorCisgICAgNy4xMC40LiBBdXRv bWF0aWMgQXJyYXlzCisKKyAgIEluIGEgY29tbWFuZCBmaWxlIG9yIG1hY3JvLCB5b3UgY2FuIG5v dyBoYXZlIGxvY2FsIChhdXRvbWF0aWMpIGFycmF5cy4KKyAgIEp1c3QgZ2l2ZSB0aGUgbmFtZSBm b2xsb3dlZCBieSBlbXB0eSBzdWJzY3JpcHQgYnJhY2tldHMgKG5vIHNwYWNlcworICAgaW5zaWRl IHRoZSBicmFja2V0cyBwbGVhc2UpIGluIGEgTE9DQUwgY29tbWFuZCwgYW5kIHRoZW4gZGVjbGFy ZSB0aGUKKyAgIGFycmF5OgorCisgIExPQ0FMIFwlYSBcJmFbXSBvb2ZhCisgIEFSUkFZIERFQ0xB UkUgXCZhWzMyXSA9IHZhbHVlMSB2YWx1ZTIgdmFsdWUzIC4uLgorCisgICBUaGlzIGRlY2xhcmVz IHRoZSBzY2FsYXIgdmFyaWFibGUgXCVhLCB0aGUgYXJyYXkgXCZhW10sIGFuZCB0aGUgbWFjcm8K KyAgIG5hbWUgIm9vZmEiIHRvIGJlIGxvY2FsLCBhbmQgdGhlbiBkZWNsYXJlcyB0aGUgbmV3IGxv Y2FsIGNvcHkgb2YgXCZhW10KKyAgIHdpdGggMzIgZWxlbWVudHMsIHBlcmhhcHMgYXNzaWduaW5n IHNvbWUgaW5pdGlhbCB2YWx1ZXMuIFdoZW4gQy1LZXJtaXQKKyAgIGV4aXRzIGZyb20gdGhlIGNv bW1hbmQgZmlsZSBvciBtYWNybyBjb250YWluaW5nIHRoZXNlIGNvbW1hbmQsIHRoZQorICAgcHJl dmlvdXMgXCZhW10gYXJyYXkgaXMgcmVzdG9yZWQgKGFuZCBpZiB0aGVyZSB3YXMgbm8gXCZhW10g YXQgYW55CisgICBoaWdoZXIgbGV2ZWwsIHRoaXMgd2lsbCBzdGlsbCBiZSB0cnVlKS4gVGhlIHBy b2Nlc3MgY2FuIGJlIHJlcGVhdGVkIHRvCisgICBhbnkgbGV2ZWwuIFRodXMgaXQgaXMgbm93IHNh ZmUgdG8gd3JpdGUgc2NyaXB0cyBvciBtYWNyb3MgY29udGFpbmluZworICAgYXJyYXlzIHdpdGhv dXQgZGFuZ2VyIG9mIGludGVyZmVyaW5nIHdpdGggZ2xvYmFsIGFycmF5cyBvZiB0aGUgc2FtZQor ICAgbmFtZS4KKworICAgSnVzdCBhcyBzY2FsYXJzIGFyZSBpbmhlcml0ZWQgYnkgbG93ZXIgY29t bWFuZCBsZXZlbHMsIHNvIGFyZSBhcnJheXMuCisgICBTbywgZm9yIGV4YW1wbGUsIGlmIFwmYVtd IGlzIGRlY2xhcmVkIGF0IHRvcCBsZXZlbCwgYWxsIGxvd2VyIGxldmVscworICAgd2lsbCBzZWUg aXQgdW5sZXNzIHRoZXkgaW5jbHVkZSBhICJsb2NhbCBcJmFbXSIgc3RhdGVtZW50LCBpbiB3aGlj aAorICAgY2FzZSBhbGwgbGV2ZWxzIGF0IGFuZCBiZW5lYXRoIHRoZSBsZXZlbCB3aGVyZSB0aGUg TE9DQUwgc3RhdGVtZW50IHdhcworICAgZXhlY3V0ZWQgd2lsbCBzZWUgdGhlIGxvY2FsIGNvcHku IFRoaXMgdG9vIGNhbiBiZSByZXBlYXRlZCB0byBhbnkKKyAgIGxldmVsLgorCisgICBPbiB0aGUg b3RoZXIgaGFuZCwgaWYgeW91IERFQ0xBUkUgYW4gYXJyYXkgYXQgYSBsb3dlciBjb21tYW5kIGxl dmVsCisgICB3aXRob3V0IGFsc28gbWFraW5nIGl0IExPQ0FMLCB0aGlzIHJlcGxhY2VzIHRoZSBj b3B5IHRoYXQgd2FzIGRlY2xhcmVkCisgICBhdCB0aGUgbG93ZXN0IGNvbW1hbmQgbGV2ZWwgYWJv dmUgdGhpcyBvbmUuCisKKyAgICA3LjEwLjUuIFNvcnRpbmcgQXJyYXlzCisKKyAgIEFsdGhvdWdo IGFycmF5cyBjYW4gYmUgc29ydGVkIHVzaW5nIEZPUiBsb29wcyBhcyBzaG93biBvbiBwYWdlIDM4 MyBvZgorICAgVXNpbmcgQy1LZXJtaXQsIDJuZCBFZC4sIHRoaXMgaW52b2x2ZXMgcXVpdGUgYSBi aXQgb2YgcmVwZXRpdGl2ZQorICAgaW50ZXJwcmV0YXRpb24gYnkgdGhlIGNvbW1hbmQgcGFyc2Vy LCBhbmQgc28gY2FuIGJlIHNsb3cgZm9yIGxhcmdlCisgICBhcnJheXMuIEZvciB0aGlzIHJlYXNv biwgQy1LZXJtaXQgNy4wIGFkZHMgYSBidWlsdC1pbiBTT1JUIGNvbW1hbmQ6CisKKyAgIEFSUkFZ IFNPUlQgWyBzd2l0Y2hlcyBdIGFycmF5IFsgYXJyYXkyIF0KKyAgICAgICAgICBTb3J0cyB0aGUg Z2l2ZW4gYXJyYXkgaW4gcGxhY2UuIFNvcnRpbmcgaXMgc3RyaWN0bHkgbGV4aWNhbAorICAgICAg ICAgIChzdHJpbmcgYmFzZWQpLiBUaGUgYXJyYXkgbmFtZSBjYW4gYmUgZ2l2ZW4gZnVsbHksIGUu Zy4gIlwmYVtdIiwKKyAgICAgICAgICBvciB0aGUgIlwiIGFuZC9vciAiJiIgYW5kL29yIGJyYWNr ZXRzIGNhbiBiZSBvbWl0dGVkLCBlLmcuCisgICAgICAgICAgImFycmF5IHNvcnQgXCZhW10iLCAi c29ydCAmYSIsICJzb3J0IGEiLiBBbHNvLCBhIHJhbmdlIGNhbiBiZQorICAgICAgICAgIGluZGlj YXRlZCBpbiB0aGUgYnJhY2tldHMgYXMgbm90ZWQgaW4gWzYwMl1TZWN0aW9uIDcuMTAsIHRvCisg ICAgICAgICAgcmVzdHJpY3QgdGhlIHNvcnQgdG8gYSByYW5nZSBvZiBlbGVtZW50cyAoZXF1aXZh bGVudCB0byB0aGUKKyAgICAgICAgICAvUkFOR0Ugc3dpdGNoLCBkZXNjcmliZWQganVzdCBiZWxv dyksIGUuZy4gImFycmF5IHNvcnQKKyAgICAgICAgICAmYVsyMDozMF0iLgorCisgICBBIHNlY29u ZCBhcnJheSBtYXkgYmUgc3BlY2lmaWVkLiBJZiBpdCBpcywgYW5kIGlmIGl0IGlzIGF0IGxlYXN0 IGFzIGJpZworICAgYXMgdGhlIGZpcnN0IGFycmF5LCBpdCBpcyBzb3J0ZWQgYWNjb3JkaW5nIHRv IHRoZSBmaXJzdCBhcnJheS4gRm9yIGEKKyAgIHNhbXBsZSBhcHBsaWNhdGlvbiwgc2VlIFs2MDNd U2VjdGlvbiA3LjEwLjEwLgorCisgICBTZWUgWzYwNF1TZWN0aW9uIDEuNSBmb3IgYW4gZXhwbGFu YXRpb24gb2Ygc3dpdGNoZXMuIFRoZSBvcHRpb25hbAorICAgc3dpdGNoZXMgYXJlOgorCisgICAv Q0FTRTp7T04sT0ZGfQorICAgICAgICAgIC9DQVNFOk9OIG1lYW5zIHRoYXQgYWxwaGFiZXRpYyBj YXNlIGlzIHNpZ25pZmljYW50IGluCisgICAgICAgICAgY29tcGFyaXNvbnM7IHVwcGVyY2FzZSBs ZXR0ZXJzIGFyZSBzb3J0ZWQgYmVmb3JlIGxvd2VyY2FzZSBvbmVzLgorICAgICAgICAgIC9DQVNF Ok9GRiBtZWFucyBjYXNlIGlzIGlnbm9yZWQsIGUuZy4gIkEiIGlzIHRoZSBzYW1lIGFzICJhIi4g SWYKKyAgICAgICAgICB0aGlzIHN3aXRjaCBpcyBub3QgZ2l2ZW4sIHNvcnRpbmcgaXMgYWNjb3Jk aW5nIHRoZSBjdXJyZW50IFNFVAorICAgICAgICAgIENBU0Ugc2V0dGluZy4KKworICAgL0tFWTpu CisgICAgICAgICAgQ29tcGFyaXNvbiBiZWdpbnMgYXQgcG9zaXRpb24gbigxLWJhc2VkKSBpbiBl YWNoIHN0cmluZy4gSWYgbm8KKyAgICAgICAgICBrZXkgaXMgZ2l2ZW4sIHRoZSBlbnRpcmUgc3Ry aW5ncyBhcmUgY29tcGFyZWQuIE9ubHkgb25lIGtleSBjYW4KKyAgICAgICAgICBiZSBnaXZlbi4g SWYgYW4gYXJyYXkgZWxlbWVudCBpcyBzaG9ydGVyIHRoYW4gdGhlIGtleSB2YWx1ZSwgbiwKKyAg ICAgICAgICB0aGF0IGVsZW1lbnQgaXMgY29uc2lkZXJlZCBlbXB0eSBmb3IgY29tcGFyaXNvbiBw dXJwb3NlcywgYW5kCisgICAgICAgICAgdGhlcmVmb3JlIGxleGljYWxseSBsZXNzIHRoYW4gYW55 IGVsZW1lbnQgYXQgbGVhc3QgbmNoYXJhY3RlcnMKKyAgICAgICAgICBsb25nLgorCisgICAvTlVN RVJJQworICAgICAgICAgIElmIHRoaXMgc3dpdGNoIGlzIGluY2x1ZGVkLCBpdCBtZWFucyBzb3J0 aW5nIHNob3VsZCBiZSBudW1lcmljLAorICAgICAgICAgIHJhdGhlciB0aGFuIGxleGljYWwuIFRo ZSBzb3J0IGtleSBpcyB0aGUgc3RyaW5nIHN0YXJ0aW5nIGF0IHRoZQorICAgICAgICAgIGtleSBw b3NpdGlvbiwgc2tpcHBpbmcgYW55IGxlYWRpbmcgYmxhbmtzIG9yIHRhYnMsIGFuZCB0aGVuIGFz CisgICAgICAgICAgbXVjaCBvZiB0aGUgc3RyaW5nIGZyb20gdGhhdCBwb2ludCBvbiB0aGF0IGZp dHMgdGhlIGRlZmluaXRpb24KKyAgICAgICAgICBvZiAibnVtZXJpYyIsIHRlcm1pbmF0aW5nIGF0 IHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdAorICAgICAgICAgIHF1YWxpZnkuIEEg bnVtZXJpYyBzdHJpbmcgaGFzIGFuIG9wdGlvbmFsIHNpZ24gKCsgb3IgLSkgZm9sbG93ZWQKKyAg ICAgICAgICBieSBvbmUgb3IgbW9yZSBkaWdpdHMsIGFuZCAoaWYgeW91ciB2ZXJzaW9uIG9mIEtl cm1pdCB3YXMgYnVpbHQKKyAgICAgICAgICB3aXRoIGZsb2F0aW5nLXBvaW50IHN1cHBvcnQ7IHNl ZSBbNjA1XVNlY3Rpb24gNy4yMyApIHplcm8gb3Igb25lCisgICAgICAgICAgZGVjaW1hbCBwb2lu dCAocGVyaW9kKS4gSWYgYm90aCAvQ0FTRSBhbmQgL05VTUVSSUMgYXJlIGdpdmVuLAorICAgICAg ICAgIC9OVU1FUklDIHRha2VzIHByZWNlZGVuY2UuCisKKyAgIC9SQU5HRTpuWzptXQorICAgICAg ICAgIFNvcnQgZWxlbWVudHMgbnRocm91Z2ggbSBvZiB0aGUgYXJyYXkuIEJ5IGRlZmF1bHQsIHRo ZSBlbnRpcmUKKyAgICAgICAgICBhcnJheSBmcm9tIGVsZW1lbnQgMSB0byBpdHMgZGltZW5zaW9u ZWQgc2l6ZSBpcyBzb3J0ZWQsIHdoaWNoCisgICAgICAgICAgbWlnaHQgcHJvZHVjZSBzdXJwcmlz aW5nIHJlc3VsdHMgaWYgdGhlIGFycmF5IGlzIG5vdCBmdWxsOyBzZWUKKyAgICAgICAgICBleGFt cGxlIGluIFs2MDZdU2VjdGlvbiA3LjEwLjcuIElmICI6bSIgaXMgb21pdHRlZCBmcm9tIHRoZQor ICAgICAgICAgIHJhbmdlLCB0aGUgZGltZW5zaW9uZWQgc2l6ZSBpcyB1c2VkLiBUaHVzLCB0byBz b3J0IGFuIGVudGlyZQorICAgICAgICAgIGFycmF5LCBcJmFbXSwgaW5jbHVkaW5nIGl0cyAwdGgg ZWxlbWVudCwgdXNlICJzb3J0IC9yYW5nZTowICZhIi4KKyAgICAgICAgICBZb3UgY2FuIGFsc28g c29ydCBhbnkgZGVzaXJlZCBzZWN0aW9uIG9mIGFuIGFycmF5LCBlLmcuICJzb3J0CisgICAgICAg ICAgL3JhbmdlOjEwOjIwICZhIiBvciAic29ydCAvcmFuZ2U6XCVpOlwlai0xICZiIi4gQXMgbm90 ZWQgYWJvdmUsCisgICAgICAgICAgeW91IGNhbiBhbHNvIHNwZWNpZnkgYSByYW5nZSBpbiB0aGUg YXJyYXktbmFtZSBicmFja2V0cy4gSWYgeW91CisgICAgICAgICAgc3BlY2lmeSBhIHJhbmdlIGlu IHRoZSBhcnJheS1uYW1lIGJyYWNrZXRzIEFORCB3aXRoIGEgL1JBTkdFCisgICAgICAgICAgc3dp dGNoLCB0aGUgb25lcyBpbiB0aGUgYnJhY2tldHMgdGFrZSBwcmVjZWRlbmNlLgorCisgICAvUkVW RVJTRQorICAgICAgICAgIFNvcnQgaW4gcmV2ZXJzZSBvcmRlci4gSWYgdGhpcyBzd2l0Y2ggaXMg bm90IGdpdmVuLCB0aGUgYXJyYXkgaXMKKyAgICAgICAgICBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9y ZGVyLgorCisgICBSZW1lbWJlciB0aGF0IG51bWVyaWMgc3dpdGNoIGFyZ3VtZW50cyBjYW4gYmUg bnVtYmVycywgYXJpdGhtZXRpYworICAgZXhwcmVzc2lvbnMsIG9yIHZhcmlhYmxlcyB3aG9zZSB2 YWx1ZXMgYXJlIG51bWJlcnMgb3IgZXhwcmVzc2lvbnMsIGFzCisgICBpbGx1c3RyYXRlZCBpbiB0 aGUgL1JBTkdFIGV4YW1wbGVzIGFib3ZlLgorCisgICBBIHR5cGljYWwgc29ydGluZyBhcHBsaWNh dGlvbiBtaWdodCBiZSB0byBsaXN0IHN0dWRlbnRzJyB0ZXN0IHNjb3JlcyBpbgorICAgZGVzY2Vu ZGluZyBvcmRlci4gU3VwcG9zZSB5b3UgaGFkIHRoZSBmb2xsb3dpbmcgcmVjb3JkczoKKworICBv bGFmICAgICAgNjUKKyAgb2xnYSAgICAgIDk4CisgIGl2YW4gICAgICA4MworICB4ZW5hICAgICAx MDAKKworICAgKGFuZCBzbyBvbikgc3RvcmVkIGluIGFycmF5IFwmc1tdIChlLmcuIGJ5IHJlYWRp bmcgdGhlbSBmcm9tIGEgZmlsZSBhcworICAgaWxsdXN0cmF0ZWQgaW4gWzYwN11zZWN0aW9uIDcu MTAuNykuIEluIHRoZXNlIHJlY29yZHMsIHRoZSBzdHVkZW50J3MKKyAgIG5hbWUgaXMgaW4gY29s dW1ucyAxLTkgYW5kIHRoZSBzY29yZSBpbiAxMC0xMi4gU28gdG8gcmVhcnJhbmdlIHRoZSBsaXN0 CisgICBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIHNjb3JlOgorCisgIHNvcnQgL2tleToxMCAvcmV2 ZXJzZSAmcworCisgICBUaGVuIHRvIGxpc3QgeW91ciB0b3AgZml2ZSBzdHVkZW50czoKKworICBm b3IgXCVpIDEgNSAxIHsgZWNobyBcJnNbXCVpXSB9CisKKyAgIE9yIG1vcmUgc2ltcGx5IChzZWUg bmV4dCBzZWN0aW9uKToKKworICBzaG93IGFycmF5IGFbMTo1XQorCisgICBUbyBpbGx1c3RyYXRl IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBsZXhpY2FsIGFuZCBhIG51bWVyaWMgc29ydCwKKyAg IHN1cHBvc2UgeW91IGhhdmUgdGhlIGZvbGxvd2luZyByZWNvcmRzICh0aGUgbGluZXMgdGhhdCBh cmUgbnVtYmVyZWQsCisgICBzdGFydGluZyBhdCBjb2x1bW4gMSkgaW4gYXJyYXkgXCZhW106CisK KyAgICBDb2x1bW4gICAxICAgICAgICAgMgorICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwCisKKyAg IDEuIEl2YW4gMTAuMCAyLiBPbGFmIDkuOTUgMy4gT2xnYSAxMDEuNQorCisgICBBUlJBWSBTT1JU IC9LRVk6MTAgJmFbXSB3b3VsZCBvcmRlciB0aGVtIDMsMSwyLCBidXQgQVJSQVkgU09SVCAvS0VZ OjEwCisgICAvTlVNRVJJQyAmYVtdIHdvdWxkIG9yZGVyIHRoZW0gMiwxLDMuCisKKyAgICA3LjEw LjYuIERpc3BsYXlpbmcgQXJyYXlzCisKKyAgIFRoZSBTSE9XIEFSUkFZIGNvbW1hbmQgKG9yIEFS UkFZIFNIT1cpIG5vdyBhY2NlcHRzIGFuIG9wdGlvbmFsCisgICBhcnJheS1uYW1lIGFyZ3VtZW50 OgorCisgIFNIT1cgQVJSQVkgXCZhW10KKworICAgKHlvdSBjYW4gbGVhdmUgb2ZmIHRoZSBcLCB0 aGUgXCYsIGFuZC9vciB0aGUgW10ncyBpZiB5b3UgbGlrZTsgInNob3cKKyAgIGFycmF5IGEiIGlz IGVxdWl2YWxlbnQgdG8gInNob3cgYXJyYXkgXCZhW10iKS4gV2hlbiBhbiBhcnJheSBpcworICAg c3BlY2lmaWVkLCBpdHMgZGltZW5zaW9uIGlzIHNob3duIGFuZCBhbGwgZGVmaW5lZCAobm9uLWVt cHR5KSBlbGVtZW50cworICAgYXJlIGxpc3RlZC4KKworICAgRXhhbXBsZToKKworICBhc3NpZ24g XCVuIFxmZmlsZXMoKiwmYSkgIDsgRmlsbCBhbiBhcnJheSB3aXRoIGZpbGVuYW1lcyAoWzYwOF1T ZWN0aW9uIDQuMTEuMykKKyAgc2hvdyBhcnJheSBcJmFbXSAgICAgICAgICA7IFNob3cgdGhlIGFy cmF5IHdlIGp1c3QgcmVhZAorICBhcnJheSBzaG93IFwmYVtdICAgICAgICAgIDsgU2FtZSBhcyBw cmV2aW91cworICBhcnJheSBzb3J0IFwmYVtdICAgICAgICAgIDsgU29ydCB0aGUgYXJyYXkKKyAg YXJyYXkgc2hvdyBcJmFbXSAgICAgICAgICA7IFNob3cgaXQgYWZ0ZXIgc29ydGluZworICBhcnJh eSBzaG93IFwmYSAgICAgICAgICAgIDsgU2hvdyBpdCBhZ2FpbgorICBhcnJheSBzaG93ICZhICAg ICAgICAgICAgIDsgU2hvdyBpdCBhZ2FpbgorICBhcnJheSBzaG93IGEgICAgICAgICAgICAgIDsg U2hvdyBpdCBhZ2FpbgorCisgICAoVGhlIGZpbmFsIGZvdXIgY29tbWFuZHMgZGVtb25zdHJhdGUg dGhlIGFsdGVybmF0aXZlIGZvcm1zIHRoYXQgYXJlCisgICBhY2NlcHRlZCBmb3IgdGhlIGFycmF5 IG5hbWUuKQorCisgICBJZiB5b3UgU0hPVyBBUlJBWSB3aXRob3V0IGdpdmluZyBhbiBhcnJheSBu YW1lLCBhbGwgZGVmaW5lZCBhcnJheXMgYXJlCisgICBsaXN0ZWQgYnkgbmFtZSBhbmQgZGltZW5z aW9uLCBidXQgdGhlaXIgY29udGVudHMgYXJlIG5vdCBzaG93bi4KKworICAgWW91IGNhbiBhbHNv IHNob3cgYSBwaWVjZSBvZiBhbiBhcnJheSBieSBpbmNsdWRpbmcgYSBzdWJzY3JpcHQgb3IgcmFu Z2UKKyAgIHdpdGhpbiB0aGUgYXJyYXkgYnJhY2tldHM6CisKKyAgYXJyYXkgc2hvdyBcJmFbNV0g ICAgICAgICA7IFNob3dzIFwmYVs1XQorICBhcnJheSBzaG93ICZhWzM6OF0gICAgICAgIDsgU2hv d3MgXCZhWzNdIHRocm91Z2ggXCZhWzhdCisgIGFycmF5IHNob3cgYVs6XCVuLTFdICAgICAgOyBT aG93cyBcJmFbMF0gdGhyb3VnaCBcJmFbXCVuLTFdCisKKyAgICA3LjEwLjcuIE90aGVyIEFycmF5 IE9wZXJhdGlvbnMKKworICAgQVJSQVkgREVTVFJPWSBhcnJheW5hbWUKKyAgICAgICAgICBEZXN0 cm95cyBhbmQgdW5kZWNsYXJlcyB0aGUgbmFtZWQgYXJyYXkuIFN1YnNjcmlwdHMgb3IgcmFuZ2Vz CisgICAgICAgICAgYXJlIG5vdCBhY2NlcHRlZCBpbiB0aGlzIGNvbW1hbmQuCisKKyAgIEFSUkFZ IENPUFkgYXJyYXkxIGFycmF5MgorICAgICAgICAgIENvcGllcyB0aGUgZmlyc3QgYXJyYXkgdG8g dGhlIHNlY29uZCBhcnJheS4gSWYgdGhlIHRhcmdldCBhcnJheQorICAgICAgICAgIGhhcyBub3Qg YmVlbiBkZWNsYXJlZCwgaXQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdpdGggdGhlIHNhbWUK KyAgICAgICAgICBzaXplIGFzIHRoZSBmaXJzdC4gSWYgaXQgaGFzIGJlZW4gZGVjbGFyZWQsIGl0 IHdpbGwgYmUgdXNlZCBhcworICAgICAgICAgIGRlY2xhcmVkOyBpZiB0aGUgc291cmNlIGFycmF5 IGlzIGxhcmdlciwgb25seSBhcyBtdWNoIG9mIGl0IGFzCisgICAgICAgICAgd2lsbCBmaXQgaXMg Y29waWVkIHRvIHRoZSB0YXJnZXQgYXJyYXkuIFN5bnRheCBmb3IgYXJyYXkxIGFuZAorICAgICAg ICAgIGFycmF5MiBpcyBhcyBpbiBBUlJBWSBTSE9XIChTSE9XIEFSUkFZKS4gRXhhbXBsZToKKwor ICAuXCVuIDo9IFxmZmlsZXMoKiwmYSkgIDsgQ3JlYXRlIGFuZCBsb2FkIGFycmF5IEEgd2l0aCBh IGZpbGUgbGlzdC4KKyAgYXJyYXkgY29weSAmYSAmYiAgICAgICA7IENvcHkgYXJyYXkgQSB0byBh cnJheSBCLgorCisgICAgICAgICAgVGhlIEFSUkFZIENPUFkgY29tbWFuZCBhbHNvIGxldHMgeW91 IGNvcHkgcGllY2VzIG9mIGFycmF5cyBieQorICAgICAgICAgIGluY2x1ZGluZyByYW5nZSBzcGVj aWZpZXJzLCBhcyBpbiB0aGVzZSBleGFtcGxlczoKKworICAgICAgICBBUlJBWSBDT1BZIFwmYVs0 OjI3XSBcJmIKKyAgICAgICAgICAgICAgICBUaGlzIGNvcGllcyBcJmFbXSBlbGVtZW50cyA0LTI3 IHRvIFwmYltdIGVsZW1lbnRzIDEtMjMsCisgICAgICAgICAgICAgICAgY3JlYXRpbmcgXCZiW10g aWYgbmVjZXNzYXJ5IG9yLCBpZiBcJmJbXSBpcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgZGVj bGFyZWQsIHN0b3BwaW5nIGVhcmx5IGlmIGl0cyBzaXplIGlzIGxlc3MgdGhhbiAyMy4KKworICAg ICAgICBBUlJBWSBDT1BZIFwmYVs0OjI3XSBcJmJbMTJdCisgICAgICAgICAgICAgICAgVGhpcyBj b3BpZXMgXCZhW10gZWxlbWVudHMgNC0yNyB0byBcJmJbXSBlbGVtZW50cyAxMi0zNSwKKyAgICAg ICAgICAgICAgICBjcmVhdGluZyBcJmJbXSBpZiBuZWNlc3Nhcnkgb3IsIGlmIFwmYltdIGlzIGFs cmVhZHkKKyAgICAgICAgICAgICAgICBkZWNsYXJlZCwgc3RvcHBpbmcgZWFybHkgaWYgaXRzIHNp emUgaXMgbGVzcyB0aGFuIDM1LgorCisgICAgICAgIEFSUkFZIENPUFkgXCZhWzQ6MjddIFwmYlsx MjoxNF0KKyAgICAgICAgICAgICAgICBUaGlzIGNvcGllcyBcJmFbXSBlbGVtZW50cyA0LTYgdG8g XCZiW10gZWxlbWVudHMgMTItMTQsCisgICAgICAgICAgICAgICAgY3JlYXRpbmcgXCZiW10gaWYg bmVjZXNzYXJ5IG9yLCBpZiBcJmJbXSBpcyBhbHJlYWR5CisgICAgICAgICAgICAgICAgZGVjbGFy ZWQsIHN0b3BwaW5nIGVhcmx5IGlmIGl0cyBzaXplIGlzIGxlc3MgdGhhbiAxNC4KKworICAgICAg ICBBUlJBWSBDT1BZIFwmYVsxNzpdIFwmYgorICAgICAgICAgICAgICAgIFRoaXMgY29waWVzIGFs bCB0aGUgZWxlbWVudHMgb2YgXCZhW10gc3RhcnRpbmcgd2l0aCAxNworICAgICAgICAgICAgICAg IHVudGlsIHRoZSBsYXN0IHRvIFwmYltdLCBjcmVhdGluZyBcJmJbXSBpZiBuZWNlc3Nhcnkgb3Is CisgICAgICAgICAgICAgICAgaWYgXCZiW10gaXMgYWxyZWFkeSBkZWNsYXJlZCwgc3RvcHBpbmcg ZWFybHkgaWYgXCZiW10gaXMKKyAgICAgICAgICAgICAgICBub3QgYmlnIGVub3VnaC4gU3VwcG9z ZSwgZm9yIGV4YW1wbGUsIHlvdSBoYXZlIGEgc2NyaXB0CisgICAgICAgICAgICAgICAgd2hvc2Ug YXJndW1lbnRzIGFyZSBzdHJpbmcxLCBzdHJpbmcyLCBhbmQgYSBsaXN0IG9mIGZpbGVzLAorICAg ICAgICAgICAgICAgIHdob3NlIGpvYiBpcyB0byBjaGFuZ2UgYWxsIG9jY3VycmVuY2VzIG9mIHN0 cmluZzEgdG8KKyAgICAgICAgICAgICAgICBzdHJpbmcyIGluIGVhY2ggb2YgdGhlIGZpbGVzLiBC dXQgaWYgdGhlIGxpc3Qgb2YgZmlsZXMgaXMKKyAgICAgICAgICAgICAgICBvbWl0dGVkLCB0aGVu ICIqIiAoYWxsIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSkgaXMKKyAgICAgICAgICAg ICAgICBhc3N1bWVkOgorCitpZiA8IFx2KGFyZ2MpIDMgZXhpdCAxICJVc2FnZTogXCUwIHN0cmlu ZzEgc3RyaW5nMiBbIGZpbGVzIF0iCitpZiBub3QgZGVmIFwlMyB7CisgICAgLm4gOj0gXGZmaWxl cygqLCZhKQorfSBlbHNlIHsKKyAgICBhcnJheSBjb3B5ICZfWzM6XSAmYQorICAgIC5uIDo9IFxm ZGltKCZhKQorfQorZm9yIGkgMSBuIDEgeworICAgICEgY2F0IFwmYVtpXSB8IHNlZCAtZSAic3xc JTF8XCUyfGciID4gL3RtcC9feAorICAgIHJlbmFtZSAvdG1wL194IFwmYVtpXQorfQorCisgICAg ICAgIEFSUkFZIENPUFkgXCZhWzE3XSBcJmIKKyAgICAgICAgICAgICAgICBTYW1lIGFzIHByZXZp b3VzIGV4YW1wbGUuCisKKyAgIEFSUkFZIENMRUFSIGFycmF5bmFtZQorICAgICAgICAgIFNldHMg YWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXkgdG8gdGhlIGVtcHR5IHZhbHVlLiBZb3UgbWF5 CisgICAgICAgICAgYWxzbyBpbmNsdWRlIGEgcmFuZ2Ugc3BlY2lmaWVyIHRvIGNsZWFyIG9ubHkg YSBzZWxlY3RlZCBwb3J0aW9uCisgICAgICAgICAgb2YgdGhlIGFycmF5OyBmb3IgZXhhbXBsZSAi YXJyYXkgY2xlYXIgXCZhWzM3OjIxNF0iLiBJZiB0aGUKKyAgICAgICAgICByYW5nZSBpcyBvdXQg b2YgYm91bmRzLCBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBhcnJheSB0aGF0IGlzIGluCisgICAgICAg ICAgYm91bmRzIGlzIGNsZWFyZWQuCisKKyAgIEFSUkFZIFNFVCBhcnJheW5hbWUgWyB2YWx1ZSBd CisgICAgICAgICAgU2V0cyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheSB0byB0aGUgZ2l2 ZW4gdmFsdWUuIElmIG5vCisgICAgICAgICAgdmFsdWUgaXMgZ2l2ZW4sIHRoZSBhcnJheSBpcyBj bGVhcmVkLiBZb3UgbWF5IGFsc28gaW5jbHVkZSBhCisgICAgICAgICAgcmFuZ2Ugc3BlY2lmaWVy IHRvIHNldCBvbmx5IGEgc2VsZWN0ZWQgcG9ydGlvbiBvZiB0aGUgYXJyYXk7IGZvcgorICAgICAg ICAgIGV4YW1wbGUgImFycmF5IHNldCBcJmFbMTo5XSAtMSIuIElmIHRoZSByYW5nZSBpcyBvdXQg b2YgYm91bmRzLAorICAgICAgICAgIG9ubHkgdGhlIHBhcnQgb2YgdGhlIGFycmF5IHRoYXQgaXMg aW4gYm91bmRzIGlzIHNldC4KKworICAgQVJSQVkgUkVTSVpFIGFycmF5bmFtZSBzaXplCisgICAg ICAgICAgUmVzaXplcyB0aGUgZ2l2ZW4gYXJyYXkuIElmIHRoZSBzaXplIGlzIGdyZWF0ZXIgdGhh biB0aGUgYXJyYXkncworICAgICAgICAgIGN1cnJlbnQgZGltZW5zaW9uLCBuZXcgZW1wdHkgZWxl bWVudHMgYXJlIGFkZGVkIHRvIHRoZSBlbmQuIElmCisgICAgICAgICAgdGhlIHNpemUgaXMgbGVz cyB0aGFuIHRoZSBjdXJyZW50IGRpbWVuc2lvbiwgdGhlIGV4dHJhIGVsZW1lbnRzCisgICAgICAg ICAgYXJlIGRpc2NhcmRlZC4gTm90ZTogSWYgeW91IGhhdmUgc3RvcmVkIHRoZSBhcnJheSBzaXpl IGluCisgICAgICAgICAgZWxlbWVudCAwLCBBUlJBWSBSRVNJWkUgZG9lcyBub3QgY2hhbmdlIHRo aXMgdmFsdWUuIEFsdGVybmF0aXZlCisgICAgICAgICAgbm90YXRpb246IEFSUkFZIFJFU0laRSBh cnJheW5hbWVbc2l6ZV0uIEZvciBhIHByYWN0aWNhbCBleGFtcGxlLAorICAgICAgICAgIHNlZSBb NjA5XVNlY3Rpb24gNy4xMC4xMS4KKworICAgXGZhcnJheWxvb2socGF0dGVybixhcnJheW5hbWUp CisgICAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qg ZWxlbWVudCBvZiB0aGUKKyAgICAgICAgICBnaXZlbiBhcnJheSB0aGF0IG1hdGNoZXMgdGhlIGdp dmVuIHBhdHRlcm4gKGZvciBkZXRhaWxzIGFib3V0CisgICAgICAgICAgcGF0dGVybiBzeW50YXgs IHNlZSBbNjEwXXNlY3Rpb24gNC45KS4gVGhlIGFycmF5IG5hbWUgY2FuCisgICAgICAgICAgaW5j bHVkZSBhIHJhbmdlIHNwZWNpZmljYXRpb24gdG8gcmVzdHJpY3QgdGhlIHNlYXJjaCB0byBhIGdp dmVuCisgICAgICAgICAgc2VnbWVudCBvZiB0aGUgYXJyYXkuIElmIG5vIGVsZW1lbnRzIG1hdGNo IHRoZSBwYXR0ZXJuLCAtMSBpcworICAgICAgICAgIHJldHVybmVkLgorCisgICBcZnRhYmxlbG9v ayhrZXl3b3JkLGFycmF5bmFtZVssZGVsaW1pdGVyXSkKKyAgICAgICAgICBMb29rcyBpbiB0aGUg Z2l2ZW4gInRhYmxlIiwgd2hpY2ggbXVzdCBiZSBzb3J0ZWQsIGZvciB0aGUgZ2l2ZW4KKyAgICAg ICAgICBrZXl3b3JkLiBUaGUga2V5d29yZCBuZWVkIG5vdCBiZSBzcGVsbGVkIG91dCBpbiBmdWxs LgorICAgICAgICAgIFBhdHRlcm4tbWF0Y2hpbmcgY2hhcmFjdGVycyBzaG91bGQgbm90IGJlIGlu Y2x1ZGVkIGFzIHBhcnQgb2YKKyAgICAgICAgICB0aGUga2V5d29yZC4gVGhlIGZ1bmN0aW9uIHJl dHVybnMgdGhlIGluZGV4IG9mIHRoZSB0YWJsZSBlbGVtZW50CisgICAgICAgICAgdGhhdCB1bmlx dWVseSBtYXRjaGVzIHRoZSBnaXZlbiBrZXl3b3JkLCBvciAtMSBpZiBub25lIG1hdGNoLCBvcgor ICAgICAgICAgIC0yIGlmIG1vcmUgdGhhbiAxIG1hdGNoLgorCisgICBBICJ0YWJsZSIgaXMgYW4g YXJyYXkgdGhhdCBpcyBzb3J0ZWQgaW4gbGV4aWNhbCBvcmRlcjsgZWFjaCBvZiBpdHMKKyAgIGVs ZW1lbnRzIG1heSBjb250YWluIG11bHRpcGxlIGZpZWxkcywgZGVsaW1pdGVkIGJ5IHRoZSBnaXZl biBkZWxpbWl0ZXIKKyAgIGNoYXJhY3RlciBvciwgaWYgbm8gZGVsaW1pdGVyIGlzIHNwZWNpZmll ZCwgYSBjb2xvbiAoOikuCisKKyAgIFRoZSBcZmFycmF5bG9vaygpIGZ1bmN0aW9uIGRvZXMgZXhh Y3RseSB3aGF0IHlvdSB0ZWxsIGl0LiBJZiB5b3UgZ2l2ZQorICAgaXQgYSBwYXR0ZXJuIHRoYXQg ZG9lcyBub3QgaW5jbHVkZSB3aWxkY2FyZCBjaGFyYWN0ZXJzIChzdWNoIGFzICosID8sCisgICBl dGMpLCBpdCByZXF1aXJlcyBhbiBleGFjdCBtYXRjaC4gRm9yIGV4YW1wbGU6CisKKyAgXGZhcnJh eWxvb2sob29mYSwmYSkKKworICAgc2VhcmNoZXMgZm9yIHRoZSBmaXJzdCBlbGVtZW50IG9mIFwm YVtdIHdob3NlIHZhbHVlIGlzICJvb2ZhIi4gQnV0OgorCisgIFxmYXJyYXlsb29rKG9vZmEqLCZh KQorCisgICBmaW5kcyB0aGUgZmlyc3QgZWxlbWVudCB3aG9zZSB2YWx1ZSBzdGFydHMgd2l0aCAi b29mYSIsIGFuZDsKKworICBcZmFycmF5bG9vaygqb29mYSwmYSkKKworICAgZmluZHMgdGhlIGZp cnN0IGVsZW1lbnQgd2hvc2UgdmFsdWUgZW5kcyB3aXRoICJvb2ZhIiwgYW5kOworCisgIFxmYXJy YXlsb29rKCpvb2ZhKiwmYSkKKworICAgZmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgd2hvc2UgdmFs dWUgY29udGFpbnMgIm9vZmEiLgorCisgICBIZXJlJ3MgYSBzaW1wbGUgZGVtb25zdHJhdGlvbiBv ZiBsb29raW5nIHVwIHBhdHRlcm5zIGluIGFycmF5czoKKworICBsb2NhbCBcJmFbXSBcJXggXCVu CisgIGRlY2xhcmUgXCZhW10gPSB6ZXJvIG9uZSB0d28gdGhyZWUgZm91ciBmaXZlIHNpeCBzZXZl biBlaWdodCBuaW5lIHRlbgorICB3aGlsZSB0cnVlIHsKKyAgICAgIC5cJXggPSAxCisgICAgICAu XCVuID0gMAorICAgICAgYXNrIFwlYSB7IFBhdHRlcm4/IH0KKyAgICAgIGlmIG5vdCBkZWYgXCVh IGV4aXQgMCBEb25lLgorICAgICAgd2hpbGUgPD0gXCV4IFxmZGltKCZhKSB7CisgICAgICAgICAg LlwleCA6PSBcZmFycmF5bG9vayhcJWEsJmFbXCV4XSkKKyAgICAgICAgICBpZiAoIDwgXCV4IDAg KSBicmVhaworICAgICAgICAgIGVjaG8gXGZscGFkKFwleCwzKS4gXCZhW1wleF0KKyAgICAgICAg ICBpbmNyZW1lbnQgXCV4CisgICAgICAgICAgaW5jcmVtZW50IFwlbgorICAgICAgfQorICAgICAg aWYgKCA8IFwlbiAxICkgZWNobyBQYXR0ZXJuIG5vdCBmb3VuZCAtICJcJWEiCisgIH0KKworICAg VGhlIGFycmF5IG5lZWQgbm90IGJlIHNvcnRlZC4gV2hlbiBhIHBhdHRlcm4gaXMgZ2l2ZW4sIGEg c2VhcmNoIGlzCisgICBwZXJmb3JtZWQ7IGlmIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBtYXRjaGlu ZyBlbGVtZW50J3MgaW5kZXggYW5kIHRoZQorICAgZWxlbWVudCBpdHNlbGYgYXJlIHByaW50ZWQs IGFuZCB0aGUgc2VhcmNoIGJlZ2lucyBhZ2FpbiBhdCB0aGUgbmV4dAorICAgZWxlbWVudC4gVGh1 cyBlYWNoIG1hdGNoaW5nIGVsZW1lbnQgaXMgcHJpbnRlZC4gSWYgbm9uZSBtYXRjaCwgdGhlCisg ICAiUGF0dGVybiBub3QgZm91bmQiIG1lc3NhZ2UgaXMgcHJpbnRlZC4gVGhlIHByb2Nlc3MgcmVw ZWF0cyBmb3IgYXMgbWFueQorICAgcGF0dGVybnMgYXMgdGhlIHVzZXIgd2FudHMgdG8gdHlwZSwg YW5kIHRlcm1pbmF0ZXMgd2hlbiB0aGUgdXNlciB0eXBlcworICAgYW4gZW1wdHkgcGF0dGVybi4K KworICAgTm93IGxldCdzIGJ1aWxkIGEgbGl0dGxlIGNvbW1hbmQgcGFyc2VyLCBjb25zaXN0aW5n IG9mIGEga2V5d29yZCB0YWJsZSwKKyAgIGFuZCBhIGxvb3AgdG8gbG9vayB1cCB0aGUgdXNlcidz IGNvbW1hbmRzIGluIGl0IHdpdGggXGZ0YWJsZWxvb2soKS4gSW4KKyAgIHRoaXMgY2FzZSB0aGUg YXJyYXkgZWxlbWVudHMgaGF2ZSAiZmllbGRzIiBzZXBhcmF0ZWQgYnkgY29sb24gKDopIC0tIGEK KyAgIGtleXdvcmQgYW5kIGEgdmFsdWUuIEtleXdvcmQgdGFibGVzIG11c3QgYmUgc29ydGVkIGlm IFx0YWJsZWxvb2soKSBpcworICAgdG8gd29yayByaWdodCwgc28gYWZ0ZXIgZGVjbGFyaW5nIGFu ZCBpbml0aWFsaXppbmcgdGhlIHRhYmxlIGFycmF5LCB3ZQorICAgc29ydCBpdC4KKworICBsb2Nh bCBcJmtbXSBcJWEgXCVpIFwlbgorCisgIGFycmF5IGRlY2xhcmUgXCZrW10gPSBkcml2ZTo5IGRv OjggZGlzY3Vzczo3IGxpdmU6NiBzcGVuZDo1IGhlbHA6NCBxdWl0OjAKKworICBhcnJheSBzb3J0 ICZrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IE1ha2Ugc3VyZSBhcnJheSBpcyBzb3J0 ZWQKKyAgZWNobyBUeXBlICJoZWxwIiBmb3IgaGVscC4gICAgICAgICAgICAgICAgOyBQcmludCBn cmVldGluZyAmIGluc3RydWN0aW9ucworCisgIHdoaWxlIHRydWUgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsgTG9vcCB0byBnZXQgY29tbWFuZHMKKyAgICAgIHVuZGVmaW5lIFwlYQor ICAgICAgd2hpbGUgbm90IGRlZmluZWQgXCVhIHsgICAgICAgICAgICAgICA7IEdldCBhIGNvbW1h bmQKKyAgICAgICAgICBhc2sgXCVhIHsgQ29tbWFuZD8gfQorICAgICAgfQorICAgICAgLlwlbiA6 PSBcZnRhYmxlbG9vayhcJWEsJmspICAgICAgICAgICA7IExvb2sgdXAgdGhlIGNvbW1hbmQKKyAg ICAgIHN3aXRjaCBcJW4geyAgICAgICAgICAgICAgICAgICAgICAgICAgOyBIYW5kbGUgZXJyb3Jz CisgICAgICAgIDotMSwgZWNobyBOb3QgZm91bmQgLSAiXCVhIiAgICAgICAgIDsgRG9lc24ndCBt YXRjaAorICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIDotMiwgZWNobyBBbWJpZ3VvdXMg LSAiXCVhIiAgICAgICAgIDsgTWF0Y2hlcyB0b28gbWFueQorICAgICAgICAgICAgIGNvbnRpbnVl CisgICAgICB9CisgICAgICBzd2l0Y2ggXGZ3b3JkKFwma1tcJW5dLDIpIHsgICAgICAgICAgIDsg RGlzcGF0Y2ggYWNjb3JkaW5nIHRvIHZhbHVlCisgICAgICAgICA6OSwgZWNobyBEcml2aW5nLi4u LCBicmVhaworICAgICAgICAgOjgsIGVjaG8gRG9pbmcuLi4sIGJyZWFrCisgICAgICAgICA6Nywg ZWNobyBEaXNjdXNzaW5nLi4uLCBicmVhaworICAgICAgICAgOjYsIGVjaG8gTGl2aW5nLi4uLCBi cmVhaworICAgICAgICAgOjUsIGVjaG8gU3BlbmRpbmcuLi4sIGJyZWFrCisgICAgICAgICA6NCwg ZWNobyB7IENvbW1hbmRzIChtYXkgYmUgYWJicmV2aWF0ZWQpOn0KKyAgICAgICAgICAgICBmb3Ig XCVpIDEgXGZkaW0oJmspIDEgeworICAgICAgICAgICAgICAgIGVjaG8geyAgXCVpLiBcZndvcmQo XCZrW1wlaV0sMSkgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhaworICAgICAg ICAgOjAsIGV4aXQgMCBCeWUhCisgICAgICAgICA6ZGVmYXVsdCwgc3RvcCAxIEludGVybmFsIGVy cm9yCisgICAgICB9CisgIH0KKworICAgSW4gdGhpcyBleGFtcGxlLCBrZXl3b3JkcyBhcmUgImRy aXZlIiwgImRvIiwgImRpc2N1c3MiLCBldGMsIGFuZCB0aGVpcgorICAgdmFsdWVzIGFyZSB1bmlx dWUgbnVtYmVycyAodmFsdWVzIG5lZWQgbm90IGJlIG51bWJlcnMsIGFuZCB0aGVyZSBuZWVkCisg ICBub3QgYmUgb25seSBvbmUgdmFsdWUgLS0gdGhlcmUgY2FuIGJlIDAsIDEsIDIsIG9yIG1vcmUg b2YgdGhlbSkuIFRoZQorICAgdXNlciB0eXBlcyBhIGNvbW1hbmQsIHdoaWNoIGNhbiBiZSB0aGUg d2hvbGUgd29yZCAobGlrZSAiaGVscCIpIG9yIGFueQorICAgYWJicmV2aWF0aW9uIChsaWtlICJo ZWwiLCAiaGUiLCBvciBqdXN0ICJoIikuIElmIHRoaXMgZG9lcyBub3QgbWF0Y2gKKyAgIGFueSBr ZXl3b3JkcywgXGZ0YWJsZWxvb2soKSByZXR1cm5zIC0xOyBpZiBpdCBtYXRjaGVzIG1vcmUgdGhh biBvbmUgKGFzCisgICB3b3VsZCAiZCIpLCBpdCByZXR1cm5zIC0yLiBPdGhlcndpc2UgdGhlIGFy cmF5IGluZGV4IGlzIHJldHVybmVkLCAxIG9yCisgICBoaWdoZXIuCisKKyAgIEdpdmVuIHRoZSBh cnJheSBpbmRleCBcJW4sIHdlIGNhbiBnZXQgdGhlIHRhYmxlIHZhbHVlcyBhcyBmb2xsb3dzOgor CisgIFxmd29yZChcJmtbXCVuXSwxKSBpcyB0aGUga2V5d29yZCAoZmlyc3QgZmllbGQpCisgIFxm d29yZChcJmtbXCVuXSwyKSBpcyB0aGUgdmFsdWUgKHNlY29uZCBmaWVsZCwgaW4gdGhpcyBjYXNl IGEgbnVtYmVyKQorCisgICBJbiBvdXIgZXhhbXBsZSwgd2UgdXNlIHRoZSB2YWx1ZSAobnVtYmVy KSBhcyB0aGUgU1dJVENIIHZhcmlhYmxlLiBBcworICAgbm90ZWQsIFxmYWJsZWxvb2soKSBleHBl Y3RzIHRoZSBhcnJheSBlbGVtZW50cyB0byBjb250YWluIG11bHRpcGxlCisgICBmaWVsZHMgc2Vw YXJhdGVkIGJ5IGNvbG9uICg6KSAob3Igb3RoZXIgY2hhcmFjdGVyIHRoYXQgeW91IHNwZWNpZnks CisgICBlLmcuIFxmdGFibGVsb29rKFwlYSwmYSxeKSkgYW5kIHdoZW4gbWF0Y2hpbmcgdGhlIGtl eXdvcmQsIGlnbm9yZXMgdGhlCisgICBmaXJzdCBkZWxpbWl0ZXIgYW5kIGV2ZXJ5dGhpbmcgYWZ0 ZXIgaXQuCisKKyAgICA3LjEwLjguIEhpbnRzIGZvciBVc2luZyBBcnJheXMKKworICAgQyBwcm9n cmFtbWVycyBhcmUgYWNjdXN0b21lZCB0byBvdXQtb2YtYm91bmRzIGFycmF5IHJlZmVyZW5jZXMg Y2F1c2luZworICAgY29yZSBkdW1wcyBvciB3b3JzZS4gSW4gQy1LZXJtaXQ6CisKKyAgICAgKiBB IHJlZmVyZW5jZSB0byBhbiBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGVsZW1lbnQgcmV0dXJucyB0 aGUgZW1wdHkKKyAgICAgICBzdHJpbmcuCisgICAgICogQW4gYXR0ZW1wdCB0byBzZXQgdGhlIHZh bHVlIG9mIGFuIGFycmF5IGVsZW1lbnQgdGhhdCBpcyBvdXQgb2YKKyAgICAgICBib3VuZHMgb3Ig dGhhdCBoYXMgbm90IGJlZW4gZGVjbGFyZWQgc2ltcGx5IGZhaWxzLgorCisgICBDIHByb2dyYW1t ZXJzIGV4cGVjdCBhbiBhcnJheSBvZiBzaXplIG4gdG8gaGF2ZSBlbGVtZW50cyAwIHRocm91Z2gg bi0xLgorICAgRm9ydHJhbiBwcm9ncmFtbWVycyBleHBlY3QgdGhlIHNhbWUgYXJyYXkgdG8gaGF2 ZSBlbGVtZW50cyAxIHRocm91Z2ggbi4KKyAgIEMtS2VybWl0IGFjY29tbW9kYXRlcyBib3RoIHN0 eWxlczsgd2hlbiB5b3UgZGVjbGFyZSBhbiBhcnJheSBvZiBzaXplIG4sCisgICBpdCBoYXMgbisx IGVsZW1lbnRzLCAwIHRocm91Z2ggbiwgYW5kIHlvdSBjYW4gdXNlIHRoZSBhcnJheSBpbiB5b3Vy CisgICBhY2N1c3RvbWVkIG1hbm5lciwgMC1iYXNlZCBvciAxLWJhc2VkLgorCisgICBIb3dldmVy LCBub3RlIHRoYXQgQy1LZXJtaXQgaGFzIGNlcnRhaW4gYmlhc2VzIHRvd2FyZHMgMS1iYXNlZCBh cnJheXM6CisKKyAgICAgKiBBc3NpZ25tZW50IG9mIGZpbGUgbGlzdHMgc3RhcnRzIHdpdGggZWxl bWVudCAxIChbNjExXVNlY3Rpb24KKyAgICAgICA3LjEwLjMpLgorICAgICAqIEFzc2lnbm1lbnQg YnkgXGZzcGxpdCgpIHN0YXJ0cyB3aXRoIGVsZW1lbnQgMSAoWzYxMl1TZWN0aW9uIDcuMykuCisg ICAgICogQXJyYXkgaW5pdGlhbGl6YXRpb24gc2tpcHMgdGhlIDB0aCBlbGVtZW50LiBUbyBpbml0 aWFsaXplIGEgMC1iYXNlZAorICAgICAgIGFycmF5LCB1c2Ugc29tZXRoaW5nIGxpa2UgdGhpczoK KyAgZGVjbGFyZSBcJmFbM10gPSBvbmUgdHdvIHRocmVlCisgIC5cJmFbMF0gPSB6ZXJvCisKKyAg ICAgKiBUaGUgQVJSQVkgU09SVCBjb21tYW5kIHNraXBzIHRoZSAwdGggZWxlbWVudCB1bmxlc3Mg eW91IGluY2x1ZGUKKyAgICAgICAvUkFOR0U6MAorICAgICAqIFRoZSBTSElGVCBjb21tYW5kIGln bm9yZXMgZWxlbWVudCAwIG9mIHRoZSBcJl9bXSBhcnJheS4KKworICAgVGhlIGRpc3RpbmN0aW9u IGJldHdlZW4gYW4gYXJyYXkncyBkaW1lbnNpb25lZCBzaXplIGFuZCB0aGUgbnVtYmVyIG9mCisg ICBlbGVtZW50cyBpbiB0aGUgYXJyYXkgaXMgaW1wb3J0YW50IHdoZW4gc29ydGluZy4gVG8gaWxs dXN0cmF0ZToKKworICBkZWNsYXJlIFwmYVsxMDBdICAgICAgICAgICAgICAgICAgOyBEZWNsYXJl IGFycmF5ICZhIHdpdGggMTAwIGVsZW1lbnRzCisgIGZvcGVuIC9yZWFkIFwlYyBvb2ZhLnR4dCAg ICAgICAgICA7IE9wZW4gYSBmaWxlCisgIGlmIGZhaWwuLi4KKyAgZm9yIFwlaSAxIFxmZGltKCZh KSAxIHsgICAgICAgICAgIDsgUmVhZCB0aGUgZmlsZSBpbnRvIHRoZSBhcnJheQorICAgICAgZnJl YWQgXCVjIFwmYVtcJWldCisgICAgICBpZiBmYWlsIGJyZWFrCisgIH0KKyAgZmNsb3NlIFwlYwor ICBpZiA+IFwlaSBcZmRpbSgmYSkgZW5kIDEgRmlsZSBoYXMgdG9vIG1hbnkgbGluZXMgZm9yIGFy cmF5LgorICAuXCVuIDo6PSBcJWkgLSAxCisgIGVjaG8gRmlsZSBoYXMgXCVuIGxpbmUocykuCisK KyAgIExldCdzIHNheSB0aGUgZmlsZSBoYWQgOTUgbGluZXMuIFRoaXMgbGVhdmVzIGVsZW1lbnRz IDk2LTEwMCBvZiB0aGUKKyAgIGFycmF5IGVtcHR5LiBOb3cgc3VwcG9zZSB5b3Ugc29ydCB0aGUg YXJyYXkgYW5kIHdyaXRlIG91dCB0aGUgcmVzdWx0OgorCisgIHNvcnQgJmEgICAgICAgICAgICAg ICAgICAgICAgICAgICA7IFNvcnQgdGhlIHdob2xlIGFycmF5CisgIGZvcGVuIC93cml0ZSBcJW8g b29mYS50eHQuc29ydGVkICA7IE9wZW4gYW4gb3V0cHV0IGZpbGUKKyAgaWYgZmFpbCAuLi4KKyAg Zm9yIFwlaSAxIFwlbiAxIHsgICAgICAgICAgICAgICAgIDsgV3JpdGUgb3V0IDk1IHJlY29yZHMK KyAgICAgIGZ3cml0ZSAvbGluZSBcJW8gXCZhW1wlaV0KKyAgICAgIGlmIGZhaWwgZW5kIDEgV3Jp dGUgZXJyb3IKKyAgfQorICBjbG9zZSB3cml0ZQorCisgICBZb3UgbWlnaHQgYmUgc3VycHJpc2Vk IGF0IHRoZSBjb250ZW50cyBvZiAib29mYS50eHQuc29ydGVkIiAtLSBmaXZlCisgICBlbXB0eSBl bGVtZW50cywgOTYtMTAwLCBmbG9hdGVkIHRvIHRoZSB0b3Agb2YgdGhlIGFycmF5IGluIHRoZSBz b3J0LAorICAgYW5kIHNpbmNlIHlvdXIgd3JpdGUgbG9vcCBvbmx5IGhhZCA5NSBpdGVyYXRpb25z LCB0aGUgZmluYWwgNSBsaW5lcyBvZgorICAgdGhlIHNvcnRlZCBmaWxlIGFyZSBsb3N0LgorCisg ICBUaGVyZWZvcmUsIHdoZW4gZGVhbGluZyB3aXRoIHBhcnRpYWxseSBmaWxsZWQgYXJyYXlzIC0t IGVzcGVjaWFsbHkgd2hlbgorICAgc29ydGluZyB0aGVtIC0tIHJlbWVtYmVyIHRvIHNwZWNpZnkg dGhlIG51bWJlciBvZiBlbGVtZW50cy4gQSBoYW5keSB3YXkKKyAgIG9mIHJlY29yZGluZyBhbiBh cnJheSdzICJ0cnVlIiBzaXplIGlzIHRvIHB1dCBpdCBpbiB0aGUgMHRoIGVsZW1lbnQuCisgICBU aGF0IHdheSwgaXQgInRyYXZlbHMgd2l0aCB0aGUgYXJyYXkiLiBUbyBpbGx1c3RyYXRlIChjb250 aW51aW5nIHRoZQorICAgcHJldmlvdXMgZXhhbXBsZSBhdCB0aGUgImNsb3NlIHJlYWQiIHN0YXRl bWVudCk6CisKKyAgY2xvc2UgcmVhZAorICBpZiA+IFwlaSBcZmRpbSgmYSkgZW5kIDEgRmlsZSBo YXMgdG9vIG1hbnkgbGluZXMgZm9yIGFycmF5LgorICAuXCZhWzBdIDo6PSBcJWkgLSAxICAgICA7 IEFzc2lnbiBudW1iZXIgb2YgbGluZXMgdG8gXCZhWzBdLgorICBlY2hvIEZpbGUgaGFzIFwmYVsw XSBsaW5lKHMpLgorICBzb3J0IC9yYW5nZToxOlwmYVswXSAmYQorICBvcGVuIHdyaXRlIG9vZmEu dHh0LnNvcnRlZAorICBpZiBmYWlsIC4uLgorICBmb3IgXCVpIDEgXCZhWzBdIDEgeworICAgICAg d3JpdGVsbiBmaWxlIFwmYVtcJWpdCisgICAgICBpZiBmYWlsIGVuZCAxIFdyaXRlIGVycm9yCisg IH0KKyAgY2xvc2Ugd3JpdGUKKworICAgTm90ZSB0aGUgU09SVCBzd2l0Y2gsIC9SQU5HRToxOlwm YVswXS4gVGhpcyBrZWVwcyB0aGUgc29ydCAxLWJhc2VkLCBhbmQKKyAgIHVzZXMgZWxlbWVudCAw IG9mIHRoZSBhcnJheSBhcyBpdHMgc2l6ZSBpbmRpY2F0b3IuCisKKyAgIEZpbmFsbHksIG5vdGUg dGhhdCBldmVuIHRob3VnaCBzb21lIGNvbW1hbmRzIG9yIGZ1bmN0aW9ucyBtaWdodCBwdXQgYQor ICAgc2l6ZSBpbiBhcnJheSBlbGVtZW50IDAsIG5vIGJ1aWx0LWluIGZ1bmN0aW9ucyBvciBjb21t YW5kcyBkZXBlbmQgb24gYQorICAgc2l6ZSBhY3R1YWxseSBiZWluZyB0aGVyZS4gVGh1cyB5b3Ug YXJlIHBlcmZlY3RseSBmcmVlIHRvIHJlcGxhY2UgdGhlCisgICBzaXplIHdpdGggc29tZXRoaW5n IGVsc2UgYW5kIHRyZWF0IHRoZSBhcnJheSBhcyAwLWJhc2VkLgorCisgICAgNy4xMC45LiBEby1J dC1Zb3Vyc2VsZiBBcnJheXMKKworICAgS2VybWl0J3MgXCZ4W10gYXJyYXlzIGFyZSBuaWNlIGJl Y2F1c2Ugb2YgdGhlIGFjY29tcGFueWluZyBidWlsdC1pbgorICAgZnVuY3Rpb25hbGl0eSAtLSBB UlJBWSBjb21tYW5kcywgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgbG9hZCBhbmQKKyAgIHNlYXJj aCBhcnJheXMsIGF1dG9tYXRpYyBldmFsdWF0aW9uIG9mIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMg d2l0aGluCisgICB0aGUgc3Vic2NyaXB0IGJyYWNrZXRzLCBhbmQgc28gb24uIFlldCB0aGV5IGFs c28gaGF2ZSBjZXJ0YWluCisgICBsaW1pdGF0aW9uczoKKworICAgIDEuIEV4Y2VwdCB3aGVuIGNy ZWF0ZWQgYnkgZHluYW1pYyBsb2FkaW5nIChlLmcuIGJ5IFxmZmlsZXMoKSkgdGhleQorICAgICAg IG11c3QgYmUgZGVjbGFyZWQgYW5kIGRpbWVuc2lvbmVkIGluIGFkdmFuY2UuCisgICAgMi4gSW5k aWNlcyBtdXN0IGJlIG51bWVyaWMsIHBvc2l0aXZlLCBhbmQgaW4gcmFuZ2UuCisgICAgMy4gVGhl cmUgY2FuIGJlIG9ubHkgb25lIGRpbWVuc2lvbi4gTWF0cmljZXMgb3Igb3RoZXIKKyAgICAgICBo aWdoZXItZGltZW5zaW9uZWQgYXJyYXlzIGFyZSBub3QgYXZhaWxhYmxlLgorCisgICBCdXQgbm9u ZSBvZiB0aGlzIGlzIHRvIHNheSB5b3UgY2FuJ3QgaW52ZW50IGFueSBraW5kIG9mIGRhdGEgc3Ry dWN0dXJlCisgICB5b3UgbGlrZS4gSW4gWzYxM11TZWN0aW9uIDcuOS4yIHlvdSBjYW4gc2VlIHNv bWUgZXhhbXBsZXMuIEhlcmUncworICAgYW5vdGhlciAoY291cnRlc3kgb2YgRGF0IFRodWMgTmd1 eWVuKSwgaW4gd2hpY2ggYSBwYWlyIG9mIG1hdHJpY2VzIGlzCisgICBjcmVhdGVkIGFuZCB0aGVu IGFkZGVkOiBubyBkaW1lbnNpb25pbmcgbmVjZXNzYXJ5LgorCisgIC5yb3cgPSA0CisgIC5jb2wg PSA5CisKKyAgOyBNQUNSTyBUTyBQUklOVCBBIE1BVFJJWAorICBkZWZpbmUgUE1BVFJJWCB7Cisg ICAgICBlY2hvIE1hdHJpeCBcJTE6CisgICAgICBmb3IgXCVyIDEgXG0ocm93KSAxIHsKKyAgICAg ICAgICBmb3IgXCVjIDEgXG0oY29sKSAxIHsKKyAgICAgICAgICAgICAgeGVjaG8gXGZscGFkKFxt KFwlMVtcJXJdW1wlY10pLDQpCisgICAgICAgICAgfQorICAgICAgICAgIGVjaG8KKyAgICAgIH0K KyAgICAgIGVjaG8KKyAgfQorICA7IENSRUFURSBNQVRSSUNFUyBBIEFORCBCCisgIGZvciBcJXIg MSBcbShyb3cpIDEgeworICAgICAgZm9yIFwlYyAxIFxtKGNvbCkgMSB7CisgICAgICAgICAgX2V2 YWwgQVtcJXJdW1wlY10gXCVyICsgXCVjCisgICAgICAgICAgX2V2YWwgQltcJXJdW1wlY10gXCVy ICogXCVjCisgICAgICB9CisgIH0KKyAgOyBDUkVBVEUgTUFUUklYIEMgPSBTVU0gT0YgTUFUUklY IEEgQU5EIE1BVFJJWCBCCisgIGZvciBcJXIgMSBcbShyb3cpIDEgeworICAgICAgZm9yIFwlYyAx IFxtKGNvbCkgMSB7CisgICAgICAgICAgX2V2YWwgQ1tcJXJdW1wlY10gXG0oQVtcJXJdW1wlY10p ICsgXG0oQltcJXJdW1wlY10pCisgICAgICB9CisgIH0KKyAgcG1hdHJpeCBBICA7IFByaW50IE1h dHJpeCBBCisgIHBtYXRyaXggQiAgOyBQcmludCBNYXRyaXggQgorICBwbWF0cml4IEMgIDsgUHJp bnQgTWF0cml4IEMKKworICAgSW4gdGhlIGV4YW1wbGUsIHdlIHVzZSBtYXRyaXgtbGlrZSBub3Rh dGlvbiB0byBjcmVhdGUgbWFjcm9zIHdpdGggbmFtZXMKKyAgIGxpa2UgIkFbMV1bMV0iLCAiQlsz XVs3XSIsIGFuZCBzbyBvbi4KKworICAgIDcuMTAuMTAuIEFzc29jaWF0aXZlIEFycmF5cworCisg ICBBbiBhc3NvY2lhdGl2ZSBhcnJheSBpcyBhIHNwZWNpYWwga2luZCBvZiBEby1JdC1Zb3Vyc2Vs ZiBhcnJheS4gSXQKKyAgIGRpZmZlcnMgZnJvbSBhIHJlZ3VsYXIgYXJyYXkgaW4gdGhhdCBpdHMg aW5kaWNlcyBuZWVkIG5vdCBiZSBudW1iZXJzIC0tCisgICB0aGV5IGNhbiBiZSBhbnl0aGluZyBh dCBhbGwgLS0gd29yZHMsIGZpbGVuYW1lcywgbmFtZXMgb2YgbW9udGhzLCBhbnkKKyAgIGNoYXJh Y3RlciBzdHJpbmcgYXQgYWxsLCBhbmQgdGhhdCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgKGFuZCBp biBmYWN0CisgICBjYW4ndCBiZSkgZGVjbGFyZWQuIEFuIGFzc29jaWF0aXZlIGFycmF5IGVsZW1l bnQgaXMgc2ltcGx5IGEgbWFjcm8KKyAgIHdob3NlIG5hbWUgZW5kcyB3aXRoIGFuIGluZGV4IGVu Y2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzLCBmb3IgZXhhbXBsZToKKworICBmaWxlPG9vZmEudHh0 PgorCisgICBNb3JlIGZvcm1hbGx5OgorCisgIGJhc2VuYW1lPGluZGV4PgorCisgICBBbiBhc3Nv Y2lhdGl2ZSBhcnJheSBpcyBhIGNvbGxlY3Rpb24gb2YgYWxsIGFzc29jaWF0aXZlIGFycmF5IGVs ZW1lbnRzCisgICB0aGF0IGhhdmUgdGhlIHNhbWUgYmFzZW5hbWUuIEFueSBudW1iZXIgb2YgYXNz b2NpYXRpdmUgYXJyYXlzLCBlYWNoCisgICB3aXRoIGFueSBudW1iZXIgb2YgZWxlbWVudHMsIGNh biBleGlzdCBhdCB0aGUgc2FtZSB0aW1lLgorCisgICBBbiBhc3NvY2lhdGl2ZSBhcnJheSBlbGVt ZW50IGNhbiBiZSBhc3NpZ25lZCBhIHZhbHVlLCBzdWNoIGFzICIxIiwganVzdAorICAgbGlrZSBh bnkgb3RoZXIgbWFjcm86CisKKyAgZGVmaW5lIGZpbGU8b29mYS50eHQ+IDEgICAgIDsgR2l2ZSAi ZmlsZTxvb2ZhLnR4dD4iIHRoZSB2YWx1ZSAiMSIuCisKKyAgIG9yOgorCisgIGFzc2lnbiBmaWxl PG9vZmEudHh0PiBcJWEgICA7IEdpdmUgaXQgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBcJWEu CisKKyAgIEhvd2V2ZXIsIHNpbmNlIGFuIGFzc29jaWF0aXZlIGFycmF5IGVsZW1lbnQgaXMgYSBt YWNybywgaXQgbWF5IG5vdCBoYXZlCisgICBhbiBlbXB0eSAobnVsbCkgdmFsdWUsIHNpbmNlIGFz c2lnbmluZyBhbiBlbXB0eSB2YWx1ZSB0byBhIG1hY3JvCisgICB1bmRlZmluZXMgdGhlIG1hY3Jv LgorCisgICBZb3UgY2FuIHJlZmVyIHRvIHRoZSB2YWx1ZSBvZiBhbiBhc3NvY2lhdGl2ZSBhcnJh eSBlbGVtZW50IHVzaW5nIHRoZQorICAgZmFtaWxpYXIgbm90YXRpb24gZm9yIG1hY3JvIHZhbHVl czoKKworICBlY2hvIFxtKGZpbGU8b29mYS50eHQ+KSAgICAgOyBFY2hvIHRoZSB2YWx1ZSBvZiAi ZmlsZTxvb2ZhLnR4dD4iLgorCisgICBBc3NvY2lhdGl2ZSBhcnJheXMgYXJlIG1vc3QgdXNlZnVs LCBob3dldmVyLCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAgIGluZGV4IGlzIGEgdmFyaWFibGUu IEluIHRoYXQgY2FzZSwgeW91IG11c3QgdXNlIHRoZSAiaGlkZGVuIiBmb3JtcyBvZgorICAgdGhl IERFRklORSBvciBBU1NJR04gY29tbWFuZHMgdGhhdCBldmFsdWF0ZSB0aGUgbWFjcm8gbmFtZSBi ZWZvcmUKKyAgIG1ha2luZyB0aGUgYXNzaWdubWVudCAoc2VlIFs2MTRdVXNpbmcgQy1LZXJtaXQs IHBhZ2UgNDU3KS4gRXhhbXBsZToKKworICBkZWZpbmUgXCVmIG9vZmEudHh0CisgIF9kZWZpbmUg ZmlsZTxcJWY+IDEKKyAgZWNobyBmaWxlPFwlZj4gPSBcbShmaWxlPFwlZj4pCisKKyAgIHByaW50 czoKKworICBmaWxlPG9vZmEudHh0PiA9IDEKKworICAgYW5kIHRoZW46CisKKyAgX2luY3JlbWVu dCBmaWxlPFwlZj4KKyAgZWNobyBmaWxlPFwlZj4gPSBcbShmaWxlPFwlZj4pCisKKyAgIHByaW50 czoKKworICBmaWxlPG9vZmEudHh0PiA9IDIKKworICAgV2hhdCBhcmUgYXNzb2NpYXRpdmUgYXJy YXlzIGdvb2QgZm9yPyBUaGUgY2xhc3NpYyBleGFtcGxlIGlzICJ3b3JkCisgICBjb3VudHMiOiBm aW5kaW5nIHRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCB3b3JkIGlzIHVzZWQgaW4gYSB0ZXh0Cisg ICB3aXRob3V0IGtub3dpbmcgaW4gYWR2YW5jZSB3aGF0IHRoZSB3b3JkcyBhcmUuIFdpdGhvdXQg YXNzb2NpYXRpdmUKKyAgIGFycmF5cywgeW91ciBwcm9ncmFtIHdvdWxkIGhhdmUgdG8gYnVpbGQg YSB0YWJsZSBvZiBzb21lIGtpbmQsIGFuZAorICAgZXZlcnkgdGltZSBhIHdvcmQgd2FzIGVuY291 bnRlcmVkLCBsb29rIGl0IHVwIGluIHRoZSB0YWJsZSB0byBmaW5kIGl0cworICAgcG9zaXRpb24g YW5kIGNvdW50ZXIsIG9yIGFkZCBpdCB0byB0aGUgdGFibGUgaWYgaXQgd2Fzbid0IGZvdW5kIC0t IGEKKyAgIHRpbWUtY29uc3VtaW5nIGFuZCBsYWJvcmlvdXMgcHJvY2Vzcy4gQXNzb2NpYXRpdmUg YXJyYXlzLCBob3dldmVyLCBsZXQKKyAgIHlvdSB1c2UgdGhlIHdvcmQgaXRzZWxmIGFzIHRoZSB0 YWJsZSBpbmRleCBhbmQgdGhlcmVmb3JlIHNpZGVzdGVwIGFsbAorICAgdGhlIHRhYmxlIGJ1aWxk aW5nIGFuZCBsb29rdXBzLgorCisgICBMZXQncyB3b3JrIHRocm91Z2ggYSBwcmFjdGljYWwgZXhh bXBsZS4gU3VwcG9zZSB5b3UgaGF2ZSBhCisgICBmaWxlLXRyYW5zZmVyIGxvZyBpbiB3aGljaCBl YWNoIGxpbmUgaXMgY29tcG9zZWQgb2YgYSBudW1iZXIgb2YKKyAgIGJsYW5rLXNlcGFyYXRlZCBm aWVsZHMsIGFuZCB0aGUgOXRoIGZpZWxkIGlzIGEgZmlsZW5hbWUgKHdoaWNoIGhhcHBlbnMKKyAg IHRvIGJlIHRoZSBmb3JtYXQgb2YgY2VydGFpbiBGVFAgc2VydmVyIGxvZ3MsIGFzIHdlbGwgYXMg b2YgQy1LZXJtaXQncworICAgbmV3IEZUUC1mb3JtYXQgdHJhbnNhY3Rpb24gbG9nLCBkZXNjcmli ZWQgaW4gWzYxNV1TZWN0aW9uIDQuMTcuMiksIGZvcgorICAgZXhhbXBsZToKKworICBXZWQgSnVs IDE0IDA5OjM1OjMxIDE5OTkgMjIgeHgubWl0LmVkdSAxMzQxMiAvcHViL2Z0cC9tbS9pbnRyby50 eHQgLi4uLgorCisgICBhbmQgeW91IHdhbnQgdG8gZmluZCBvdXQgaG93IG1hbnkgdGltZXMgZWFj aCBmaWxlIHdhcyB0cmFuc2ZlcnJlZC4gVGhlCisgICBmb2xsb3dpbmcgY29kZSBidWlsZHMgYW4g YXNzb2NpYXRpdmUgYXJyYXksIGZpbGU8PiwgY29udGFpbmluZyB0aGUKKyAgIGNvdW50cyBmb3Ig ZWFjaCBmaWxlOgorCisgIGxvY2FsIG5hbWUgbGluZSBtYXggXCVjIFwlbiAgICAgICAgICA7IERl Y2xhcmUgbG9jYWwgdmFyaWFibGVzCisgIGZvcGVuIC9yZWFkIFwlYyAvdmFyL2xvZy9mdHBkLmxv ZyAgICA7IE9wZW4gdGhlIGxvZyBmaWxlIChbNjE2XVNlY3Rpb24gMS4yMikKKyAgaWYgZmFpbCBl eGl0IDEgQ2FuJ3Qgb3BlbiBsb2cgICAgICAgIDsgQ2hlY2sKKyAgd2hpbGUgdHJ1ZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgIDsgTG9vcCBmb3IgZWFjaCByZWNvcmQKKyAgICAgIGZyZWFkIC9s aW5lIFwlYyBsaW5lICAgICAgICAgICAgIDsgUmVhZCBhIGxpbmUKKyAgICAgIGlmIGZhaWwgYnJl YWsgICAgICAgICAgICAgICAgICAgIDsgQ2hlY2sgZm9yIGVuZCBvZiBmaWxlCisgICAgICAubmFt ZSA6PSBcZndvcmQoXG0obGluZSksOSx7IH0pICA7IEdldCA5dGggZmllbGQgPSBmaWxlbmFtZSAo U2VjIDcuMykKKyAgICAgIF9pbmNyZW1lbnQgZmlsZTxcbShuYW1lKT4gICAgICAgIDsgSW5jcmVt ZW50IGl0cyBjb3VudGVyIChTZWMgNy45LjIpCisgIH0KKyAgZmNsb3NlIFwlYyAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsgQ2xvc2UgZmlsZSB3aGVuIGRvbmUuCisKKyAgIE5vdGUgdGhhdCBf SU5DUkVNRU5UIChhbmQgSU5DUkVNRU5ULCBhbmQgW19dREVDUkVNRU5UKSB0cmVhdCBhbiBlbXB0 eQorICAgKGkuZS4gbm9uZXhpc3RlbnQpIHZhcmlhYmxlIGFzIGhhdmluZyBhIHZhbHVlIG9mIDAs IGFuZCB0aGVyZWZvcmUKKyAgIGNyZWF0ZXMgdGhlIHZhcmlhYmxlIHdpdGggYSB2YWx1ZSBvZiAx LgorCisgICBBdCB0aGlzIHBvaW50LCBpZiB5b3UgdG9sZCBLZXJtaXQgdG8gInNob3cgbWFjcm8g ZmlsZTwiLCBpdCB3b3VsZCBsaXN0CisgICB0aGUgYXNzb2NpYXRpdmUgYXJyYXkuIEJ1dCBzaW5j ZSB5b3UgZG9uJ3QgbmVjZXNzYXJpbHkga25vdyB0aGUgbmFtZXMKKyAgIG9mIHRoZSBmaWxlcyBp biB0aGUgYXJyYXksIG9yIGV2ZW4gaG93IG1hbnkgZWxlbWVudHMgYXJlIGluIHRoZSBhcnJheSwK KyAgIGhvdyBjYW4geW91IHVzZSBpdCBpbiBhIHNjcmlwdCBwcm9ncmFtPworCisgICBUaGUgaWRl YSBvZiBjcmVhdGluZyBtYWNybyBuYW1lcyB0aGF0IGluY2x1ZGUgY2hhcmFjdGVyLXN0cmluZyBp bmRpY2VzCisgICBlbmNsb3NlZCBpbiBhbmdsZSBicmFja2V0cyBpcyBwZXJmZWN0bHkgYXJiaXRy YXJ5IGFuZCBkb2Vzbid0IGRlcGVuZCBvbgorICAgYW55IEtlcm1pdCBmZWF0dXJlcyB0aGF0IHdl cmVuJ3QgYWxyZWFkeSB0aGVyZSAtLSB3ZSBjb3VsZCBqdXN0IGFzCisgICBlYXNpbHkgaGF2ZSB1 c2VkIHNvbWUgb3RoZXIgbm90YXRpb24sIHN1Y2ggYXMgImZpbGVbaW5kZXhdIiwKKyAgICJmaWxl OmluZGV4Iiwgb3IgImZpbGUuaW5kZXgiLCBhbmQgdGhlIGNvZGUgYWJvdmUgd291bGQgaGF2ZSB3 b3JrZWQKKyAgIGp1c3QgYXMgd2VsbCAod2l0aCB0aGUgY29ycmVzcG9uZGluZyBzeW50YXggYWRq dXN0bWVudHMpLiBCdXQgdG8gYmUKKyAgIGFibGUgdG8gdXNlIGFuIGFzc29jaWF0aXZlIGFycmF5 IGluIGEgcHJvZ3JhbSBhZnRlciB0aGUgYXJyYXkgaXMgYnVpbHQsCisgICB3ZSBuZWVkIGEgbWV0 aG9kIG9mIGFjY2Vzc2luZyBhbGwgaXRzIGVsZW1lbnRzIHdpdGhvdXQga25vd2luZyBpbgorICAg YWR2YW5jZSB3aGF0IHRoZXkgYXJlLiBUaGF0J3Mgd2hlcmUgdGhlIGNob3NlbiBub3RhdGlvbiBj b21lcyBpbi4KKworICAgRmlyc3Qgb2YgYWxsLCBhbnkgbWFjcm8gbmFtZSB0aGF0IGVuZHMgd2l0 aCAiPHh4eD4iICh3aGVyZSAieHh4IiBpcyBhbnkKKyAgIHN0cmluZykgaXMgY2FzZSBzZW5zaXRp dmUsIHVubGlrZSBhbGwgb3RoZXIgbWFjcm8gbmFtZXMsIHdoaWNoIGFyZSBjYXNlCisgICBpbmRl cGVuZGVudC4gVG8gaWxsdXN0cmF0ZSwgImZpbGU8b29mYS50eHQ+IiBhbmQgImZpbGU8T09GQS5U WFQ+IiBhcmUKKyAgIHR3byBkaXN0aW5jdCBtYWNyb3MsIHdoZXJlYXMgIk9PRkEiLCAiT29mYSIs IGFuZCAib29mYSIsIHdoZW4gdXNlZCBhcworICAgbWFjcm8gbmFtZXMsIGFyZSBhbGwgdGhlIHNh bWUuCisKKyAgIFNlY29uZCwgdGhlIG5ldyBcZmFhY29udmVydCgpIGZ1bmN0aW9uIGNvbnZlcnRz IGFuIGFzc29jaWF0aXZlIGFycmF5CisgICAodGhhdCBpcywgYWxsIG1hY3JvcyB3aXRoIG5hbWVz IG9mIHRoZSBmb3JtICJiYXNlPGluZGV4PiIgdGhhdCBoYXZlIHRoZQorICAgc2FtZSAiYmFzZSIg cGFydCkgaW50byBhIHBhaXIgb2YgcmVndWxhciBhcnJheXMgYW5kIHJldHVybnMgdGhlIG51bWJl cgorICAgb2YgZWxlbWVudHM6CisKKyAgXGZhYWNvbnZlcnQobmFtZSwmYVssJmJdKQorCisgICAi bmFtZSIgaXMgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0aXZlIGFycmF5LCB3aXRob3V0IHRoZSBh bmdsZSBicmFja2V0cworICAgb3IgaW5kZXggKCJmaWxlIiBpbiBvdXIgZXhhbXBsZSkuCisKKyAg IFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSByZWd1bGFyIGFycmF5IGluIHdo aWNoIHRvIHN0b3JlCisgICB0aGUgaW5kaWNlcyBvZiB0aGUgYXNzb2NpYXRpdmUgYXJyYXkgKGZp bGVuYW1lcyBpbiBvdXIgZXhhbXBsZSk7IGlmIGFuCisgICBhcnJheSBvZiB0aGlzIG5hbWUgYWxy ZWFkeSBleGlzdHMsIGl0IGlzIGRlc3Ryb3llZCB1bmxlc3MgdGhlIGFycmF5IGlzCisgICBMT0NB TC4gVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGFub3RoZXIgcmVndWxhciBhcnJh eSBpbiB3aGljaAorICAgdG8gc3RvcmUgdGhlIHZhbHVlcyAodGhlIGNvdW50cyBpbiBvdXIgZXhh bXBsZSksIHdpdGggdGhlIHNhbWUgcnVsZXMKKyAgIGFib3V0IGFycmF5IG5hbWUgY29sbGlzaW9u cy4gSWYgeW91IGNhcmUgb25seSBhYm91dCB0aGUgaW5kaWNlcyBhbmQgbm90CisgICB0aGUgdmFs dWVzLCB5b3UgY2FuIG9taXQgdGhlIHRoaXJkIGFyZ3VtZW50IHRvIFxmYWFjb252ZXJ0KCkuIElu IGFueQorICAgY2FzZSwgdGhlIGFzc29jaWF0aXZlIGFycmF5IGlzIGNvbnZlcnRlZCwgbm90IGNv cGllZDogaXRzIGVsZW1lbnRzIGFyZQorICAgbW92ZWQgdG8gdGhlIHNwZWNpZmllZCByZWd1bGFy IGFycmF5cywgc28gYWZ0ZXIgY29udmVyc2lvbiB0aGUgb3JpZ2luYWwKKyAgIGFzc29jaWF0aXZl IGFycmF5IGlzIGdvbmUuCisKKyAgIEFzIHdpdGggb3RoZXIgYXJyYXktbG9hZGluZyBmdW5jdGlv bnMsIFxmYWFjb252ZXJ0KCkgc2V0cyBlbGVtZW50IDAgb2YKKyAgIGVhY2ggYXJyYXkgdG8gdGhl IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkuCisKKyAgIFRvIGNvbnRpbnVlIG91ciBl eGFtcGxlOgorCisgIC5tYXggOj0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OyBNYXhpbXVtIGNvdW50CisgIC5cJW4gOj0gXGZhYWNvbnZlcnQoZmlsZSwmYSwmYikgICAgICAg ICAgICAgOyBDb252ZXJ0CisgIGZvciBcJWkgMSBcJW4gMSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgOyBMb29wIHRocm91Z2ggdmFsdWVzCisgICAgICBlY2hvIFxmbHBhZChcJWksMykuIFwm YVtcJWldOiBcJmJbXCVpXSAgOyBFY2hvIHRoaXMgcGFpcgorICAgICAgaWYgKCA+IFwmYltcJWld IFxtKG1heCkgKSB7ICAgICAgICAgICAgIDsgQ2hlY2sgZm9yIG5ldyBtYXhpbXVtCisgICAgICAg ICAgLm5hbWUgOj0gXCZhW1wlaV0KKyAgICAgICAgICAubWF4ICA6PSBcJmJbXCVpXQorICAgICAg fQorICB9CisgIGVjaG8gTW9zdCBwb3B1bGFyIGZpbGU6IFxtKG5hbWUpLCBhY2Nlc3NlczogXG0o bWF4KQorCisgICBUaGlzIGxpc3RzIHRoZSBmaWxlcyBhbmQgY291bnRzIGFuZCB0aGVuIGFubm91 bmNlcyB3aGljaCBmaWxlIGhhcyB0aGUKKyAgIGhpZ2hlc3QgY291bnQuCisKKyAgIE5vdyBzdXBw b3NlIHlvdSB3YW50IHRvIHNvcnQgdGhlIGFycmF5IHBhaXIgY3JlYXRlZCBmcm9tIGFuIGFzc29j aWF0aXZlCisgICBhcnJheS4gSW4gb3VyIGV4YW1wbGUsIFwmYVtdIGNvbnRhaW5zIGZpbGVuYW1l cywgYW5kIFwmYltdIGNvbnRhaW5zIHRoZQorICAgYXNzb2NpYXRlZCBjb3VudHMuIEhlcmUgd2Ug dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIEFSUkFZIFNPUlQgY29tbWFuZCdzCisgICBhYmlsaXR5IHRv IHNvcnQgYSBzZWNvbmQgYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBmaXJzdCBvbmU6CisKKyAgYXJy YXkgc29ydCAvcmV2ZXJzZSAvbnVtZXJpYyAmYiAmYSAgICAgICAgICA7IERlc2NlbmRpbmcgc29y dCBieSBjb3VudAorCisgICBOb3cgdG8gc2VlIHRoZSB0b3AgZml2ZSBmaWxlcyBhbmQgdGhlaXIg Y291bnRzOgorCisgIGVjaG8gVGhlIHRvcCA1IGZpbGVzIGFyZToKKyAgZm9yIFwlaSAxIDUgMSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvb3AgdGhyb3VnaCB0b3AgNSB2YWx1ZXMK KyAgICAgIGVjaG8gXGZscGFkKFwlaSwzKS4gXCZhW1wlaV06IFwmYltcJWldICA7IEVjaG8gdGhp cyBwYWlyCisgIH0KKworICAgIDcuMTAuMTEuIFRyYW5zZmVycmluZyBBcnJheSBDb250ZW50cyB0 byBPdGhlciBDb21wdXRlcnMKKworICAgVGhlIFNFTkQgL0FSUkFZOmFycmF5bmFtZSBjb21tYW5k IChbNjE3XVNlY3Rpb24gNC43LjEpIGFsbG93cyB5b3UgdG8KKyAgIHNlbmQgdGhlIGNvbnRlbnRz IG9mIGFueSBhcnJheSwgb3IgYW55IGNvbnRpZ3VvdXMgc2VnbWVudCBvZiBpdCwgaW4KKyAgIGVp dGhlciB0ZXh0IG9yIGJpbmFyeSBtb2RlIHRvIGFub3RoZXIgY29tcHV0ZXIsIHVzaW5nIEtlcm1p dCBwcm90b2NvbC4KKyAgIFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIEMtS2VybWl0J3Mg b3RoZXIgZmVhdHVyZXMgKHRoZSBhcnJheQorICAgZmVhdHVyZXMgZGVzY3JpYmVkIGluIHRoaXMg c2VjdGlvbjsgdGhlIGZpbGUgaS9vIHBhY2thZ2UgZnJvbQorICAgWzYxOF1TZWN0aW9uIDEuMjI7 IGl0cyBkZWNpc2lvbi1tYWtpbmcsIHBhdHRlcm4tbWF0Y2hpbmcsIGFuZCBzdHJpbmcKKyAgIG1h bmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGFuZCBzbyBvbikgdGhlIHBvc3NpYmlsaXRpZXMgYXJl IGVuZGxlc3M6CisgICBleHRyYWN0cyBvZiBsYXJnZSBmaWxlcywgcmVtb3RlIGRhdGFiYXNlIHF1 ZXJpZXMsIC4uLiwgYWxsIHdpdGhvdXQKKyAgIHJlY291cnNlIHRvIHN5c3RlbS1kZXBlbmRlbnQg bWVjaGFuaXNtcyBzdWNoIFVOSVggcGlwZXMgYW5kIGZpbHRlcnMsCisgICB0aHVzIGVuc3VyaW5n IGNyb3NzLXBsYXRmb3JtIHBvcnRhYmlsaXR5IG9mIHNjcmlwdHMgdGhhdCB1c2UgdGhlc2UKKyAg IGZlYXR1cmVzLgorCisgICBXaGVuIHNlbmRpbmcgYW4gYXJyYXkgaW4gdGV4dCBtb2RlLCBLZXJt aXQgYXBwZW5kcyBhIGxpbmUgdGVybWluYXRvciB0bworICAgZWFjaCBhcnJheSBlbGVtZW50LCBl dmVuIGVtcHR5IG9uZXMsIGFuZCBpdCBhbHNvIGNvbnZlcnRzIHRoZSBjaGFyYWN0ZXIKKyAgIHNl dCBmcm9tIHlvdXIgY3VycmVudCBGSUxFIGNoYXJhY3Rlci1zZXQgdG8geW91ciBjdXJyZW50IFRS QU5TRkVSCisgICBjaGFyYWN0ZXItc2V0LCBpZiBhbnkuIE5vIGNvbnZlcnNpb25zIGFyZSBtYWRl IG9yIGxpbmUgdGVybWluYXRpb25zCisgICBhZGRlZCBpbiBiaW5hcnkgbW9kZS4gRm9yIGV4YW1w bGUsIHRoZSBmb2xsb3dpbmcgYXJyYXk6CisKKyAgZGNsIFwmYVtdID0gT25lIFR3byBUaHJlZSBG b3VyIEZpdmUgU2l4CisKKyAgIGlzIHNlbnQgYXMgc2l4IGxpbmVzLCBvbmUgd29yZCBwZXIgbGlu ZSwgaW4gdGV4dCBtb2RlLCBhbmQgYXMgdGhlIGJhcmUKKyAgIHVudGVybWluYXRlZCBzdHJpbmcg Ik9uZVR3b1RocmVlRm91ckZpdmVTaXgiIGluIGJpbmFyeSBtb2RlLgorCisgICBZb3Ugc2hvdWxk IGFsd2F5cyBpbmNsdWRlIGEgL1RFWFQgb3IgL0JJTkFSWSBzd2l0Y2ggaW4gYW55IFNFTkQgL0FS UkFZCisgICBjb21tYW5kIHRvIGZvcmNlIHRoZSBkZXNpcmVkIHRyYW5zZmVyIG1vZGUsIG90aGVy d2lzZSB5b3UncmUgbGlrZWx5IHRvCisgICBiZSBzdXJwcmlzZWQgYnkgdGhlIGVmZmVjdHMgZGVz Y3JpYmVkIGluIFs2MTldU2VjdGlvbiA0LjMuCisKKyAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6 CisKKyAgIHNlbmQgL3RleHQgL2FycmF5OlwmYVtdCisgICAgICAgICAgU2VuZHMgdGhlIGVudGly ZSBjb250ZW50cyBvZiB0aGUgYXJyYXkgXCZhW10gaW4gdGV4dCBtb2RlLiBTaW5jZQorICAgICAg ICAgIGFuIGFzLW5hbWUgaXMgbm90IGluY2x1ZGVkLCB0aGUgcmVjZWl2ZXIgaXMgdG9sZCB0aGUg ZmlsZW5hbWUgaXMKKyAgICAgICAgICBfYXJyYXlfYV8uCisKKyAgIHNlbmQgL3RleHQgL2FycmF5 OiZhW10KKyAgIHNlbmQgL3RleHQgL2FycmF5OmFbXQorICAgc2VuZCAvdGV4dCAvYXJyYXk6JmEK KyAgIHNlbmQgL3RleHQgL2FycmF5OmEKKyAgICAgICAgICBUaGVzZSBhcmUgYWxsIGVxdWl2YWxl bnQgdG8gdGhlIHByZXZpb3VzIGV4YW1wbGUuCisKKyAgIHNlbmQgL3RleHQgL2FycmF5OiZhIC9h cy1uYW1lOmZvby5iYXIKKyAgICAgICAgICBBcyBhYm92ZSwgYnV0IHRoZSBhcnJheSBpcyBzZW50 IHVuZGVyIHRoZSBuYW1lIGZvby5iYXIuCisKKyAgIHNlbmQgL3RleHQgL2FycmF5OiZhWzEwMDox OTldIC9hczpmb28uYmFyCisgICAgICAgICAgQXMgYWJvdmUsIGJ1dCBvbmx5IHRoZSBlbGVtZW50 cyBmcm9tIDEwMCB0aHJvdWdoIDE5OSBhcmUgc2VudC4KKworICAgSW4gdGV4dC1tb2RlIHRyYW5z ZmVycywgY2hhcmFjdGVyIHNldHMgYXJlIHRyYW5zbGF0ZWQgYWNjb3JkaW5nIHRvIHlvdXIKKyAg IGN1cnJlbnQgc2V0dGluZ3MsIGp1c3QgYXMgZm9yIHRleHQgZmlsZXMuIEluIGJpbmFyeSBtb2Rl LCBvZiBjb3Vyc2UsCisgICB0aGVyZSBpcyBubyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIG9y IG90aGVyIGNvbnZlcnNpb24gb2YgYW55IGtpbmQuCisgICBCdXQgcmVtZW1iZXIgdGhhdCBhcnJh eSBlbGVtZW50cyBjYW4gbm90IGNvbnRhaW4gdGhlIE5VTCAoQVNDSUkgMCkKKyAgIGNoYXJhY3Rl ciwgc2luY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgYXMgTlVMLXRlcm1pbmF0ZWQgc3RyaW5ncy4K KworICAgSGVyZSdzIGFuIGV4YW1wbGUgdGhhdCBzaG93cyBob3cgdG8gc2VuZCBhbGwgdGhlIGxp bmVzICh1cCB0byAxMDAwIG9mCisgICB0aGVtKSBmcm9tIGEgZmlsZSBhbmltYWxzLnR4dCB0aGF0 IGNvbnRhaW4gdGhlIHdvcmRzICJjYXQiLCAiZG9nIiwgb3IKKyAgICJob2ciIChzZWUgWzYyMF1T ZWN0aW9uIDQuOSBhYm91dCBwYXR0ZXJuIG1hdGNoaW5nKToKKworICBkZWNsYXJlIFwmYVsxMDAw XQorICBmb3BlbiAvcmVhZCBcJWMgYW5pbWFscy50eHQKKyAgaWYgZmFpbCBleGl0IDEKKyAgLlwl aSA9IDAKKyAgd2hpbGUgdHJ1ZSB7CisgICAgICBmcmVhZCBcJWMgbGluZQorICAgICAgaWYgZmFp bCBicmVhaworICAgICAgaWYgbWF0Y2gge1xtKGxpbmUpfSB7KntjYXQsW2RoXW9nfSp9IHsKKyAg ICAgICAgICBpbmNyZW1lbnQgXCVpCisgICAgICAgICAgaWYgKCA+IFwlaSBcZmRpbSgmYSkgKSBi cmVhaworICAgICAgICAgIC5cJmFbXCVpXSA6PSBcbShsaW5lKQorICAgICAgfQorICB9CisgIGZj bG9zZSBcJWMKKyAgc2VuZCAvYXJyYXk6YVsxOlwlaV0gL3RleHQKKworICAgTm90ZSB0aGF0IHdl IGFyZSBjYXJlZnVsIHRvIHNlbmQgb25seSB0aGUgcGFydCBvZiB0aGUgYXJyYXkgdGhhdCB3YXMK KyAgIGZpbGxlZCwgbm90IHRoZSBlbnRpcmUgYXJyYXksIGJlY2F1c2UgdGhlcmUgYXJlIGxpa2Vs eSB0byBiZSBsb3RzIG9mCisgICB1bnVzZWQgZWxlbWVudHMgYXQgdGhlIGVuZCwgYW5kIHRoZXNl IHdvdWxkIGJlIHNlbnQgYXMgYmxhbmsgbGluZXMKKyAgIG90aGVyd2lzZS4KKworICAgVGhpcyBl eGFtcGxlIHJhaXNlcyBhbiBpbnRlcmVzdGluZyBxdWVzdGlvbjogd2hhdCBpZiB3ZSB3YW50IHRv IHNlbmQKKyAgIEFMTCB0aGUgbWF0Y2hpbmcgbGluZXMsIGV2ZW4gaWYgdGhlcmUgYXJlIG1vcmUg dGhhbiAxMDAwIG9mIHRoZW0sIGJ1dAorICAgd2UgZG9uJ3Qga25vdyB0aGUgbnVtYmVyIGluIGFk dmFuY2U/IENsZWFybHkgdGhlIHByb2JsZW0gaXMgbGltaXRlZCBieQorICAgS2VybWl0J3MgKGFu ZCB0aGUgY29tcHV0ZXIncykgbWVtb3J5LiBJZiB0aGVyZSBhcmUgYSB0aG91c2FuZCB0cmlsbGlv bgorICAgbWF0Y2hpbmcgbGluZXMsIHRoZXkgbW9zdCBsaWtlbHkgd2lsbCBub3QgZml0IGluIG1l bW9yeSwgYW5kIGluIHRoaXMKKyAgIGNhc2UgdGhlIG9ubHkgc29sdXRpb24gaXMgdG8gd3JpdGUg dGhlbSBmaXJzdCB0byBhIHRlbXBvcmFyeSBmaWxlIG9uCisgICBtYXNzIHN0b3JhZ2UgYW5kIHRo ZW4gc2VuZCB0aGUgdGVtcG9yYXJ5IGZpbGUgYW5kIGRlbGV0ZSBpdCBhZnRlcndhcmRzLgorCisg ICBIb3dldmVyLCB3aGVuIHRoZSBzZWxlY3Rpb24gaXMgbGlrZWx5IHRvIGZpdCBpbiBtZW1vcnks IHRoZQorICAgb25jZS1mYW1pbGlhciB0ZWNobmlxdWUgb2YgaW5pdGlhbCBhbGxvY2F0aW9uIHdp dGggZXh0ZW50cyBjYW4gYmUgdXNlZDoKKworICBpZiBtYXRjaCB7XG0obGluZSl9IHsqe2NhdCxb ZGhdb2d9Kn0geworICAgICAgaW5jcmVtZW50IFwlaQorICAgICAgaWYgKCA+IFwlaSBcZmRpbSgm YSkgKSB7CisgICAgICAgICAgYXJyYXkgcmVzaXplIGEgXGZkaW0oJmEpKzEwMAorICAgICAgICAg IGlmIGZhaWwgc3RvcCAxIE1FTU9SWSBGVUxMCisgICAgICAgICAgZWNobyBORVcgRElNRU5TSU9O OiBcZmRpbSgmYSkKKyAgICAgIH0KKyAgICAgIC5cJmFbXCVpXSA6PSBcbShsaW5lKQorICB9CisK KyAgIFRoaXMgZ3Jvd3MgdGhlIGFycmF5IGluIGNodW5rcyBvZiAxMDAgYXMgbmVlZGVkLgorCisg IDcuMTEuIE9VVFBVVCBDb21tYW5kIEltcHJvdmVtZW50cworCisgICBMSU5FT1VUIFsgdGV4dCBd CisgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIGV4YWN0bHkgbGlrZSBPVVRQVVQsIGV4Y2VwdCBp dCBzdXBwbGllcyBhCisgICAgICAgICAgY2FycmlhZ2UgcmV0dXJuIGF0IHRoZSBlbmQgb2YgdGhl IHRleHQuICJsaW5lb3V0IGV4aXQiIGlzCisgICAgICAgICAgZXhhY3RseSB0aGUgc2FtZSBhcyAi b3V0cHV0IGV4aXRcMTMiLgorCisgICBTRVQgT1VUUFVUIFNQRUNJQUwtRVNDQVBFUyB7IE9OLCBP RkYgfQorICAgICAgICAgIFRoaXMgY29tbWFuZCBsZXRzIHlvdSB0ZWxsIEMtS2VybWl0IHdoZXRo ZXIgdG8gcHJvY2VzcyBcTiwgXEwsCisgICAgICAgICAgYW5kIFxCIHNwZWNpYWxseSBpbiBhbiBP VVRQVVQgY29tbWFuZCwgYXMgZGlzdGluY3QgZnJvbSBvdGhlciBcCisgICAgICAgICAgc2VxdWVu Y2VzIChzdWNoIGFzIFwlYSwgXDEzLCBcdih0aW1lKSwgZXRjKS4gTm9ybWFsbHkgdGhlCisgICAg ICAgICAgc3BlY2lhbCBlc2NhcGVzIGFyZSBoYW5kbGVkLiBVc2UgU0VUIE9VVFBVVCBTUEVDSUFM LUVTQ0FQRVMgT0ZGCisgICAgICAgICAgdG8gZGlzYWJsZSB0aGVtLgorCisgICBEaXNhYmxpbmcg c3BlY2lhbCBlc2NhcGVzIGlzIG5lY2Vzc2FyeSBpbiBzaXR1YXRpb25zIHdoZW4geW91IG5lZWQg dG8KKyAgIHRyYW5zbWl0IGxpbmVzIG9mIGRhdGEgYW5kIHlvdSBoYXZlIG5vIGNvbnRyb2wgb3Zl ciB3aGF0IGlzIGluIHRoZQorICAgbGluZXMuIEZvciBleGFtcGxlLCBhIGZpbGUgb29mYS50eHQg dGhhdCBjb250YWluczoKKworICBUaGlzIGlzIGEgZmlsZQorICBJdCBoYXMgXCVhIHZhcmlhYmxl cyBpbiBpdAorICBBbmQgaXQgaGFzIFxCIGluIGl0LgorICBBbmQgaXQgaGFzIFxMIGluIGl0Lgor ICBBbmQgaXQgaGFzIFxOIGluIGl0LgorICBBbmQgdGhpcyBpcyB0aGUgbGFzdCBsaW5lLgorCisg ICBjYW4gYmUgc2VudCBsaWtlIHRoaXM6CisKKyAgbG9jYWwgbGluZQorICBzZXQgb3V0cHV0IHNw ZWNpYWwtZXNjYXBlcyBvZmYKKyAgZm9wZW4gL3JlYWQgXCVjIG9vZmEudHh0CisgIGlmIGZhaWwg c3RvcCAxIENhbid0IG9wZW4gb29mYS50eHQKKyAgd2hpbGUgc3VjY2VzcyB7CisgICAgICBmcmVh ZCBcJWMgbGluZQorICAgICAgaWYgZmFpbCBicmVhaworICAgICAgOyBBZGQgZmlsdGVyaW5nIG9y IHByb2Nlc3NpbmcgY29tbWFuZHMgaGVyZS4uLgorICAgICAgb3V0cHV0IFxtKGxpbmUpXDEzCisg IH0KKworICA3LjEyLiBGdW5jdGlvbiBhbmQgVmFyaWFibGUgRGlhZ25vc3RpY3MKKworICAgSW4g Qy1LZXJtaXQgNi4wIGFuZCBlYXJsaWVyLCB0aGUgb25seSBkaWFnbm9zdGljIHJldHVybmVkIGJ5 IGEgZmFpbGluZworICAgZnVuY3Rpb24gY2FsbCB3YXMgYW4gZW1wdHkgdmFsdWUsIHdoaWNoIChh KSBjb3VsZCBub3QgYmUgZGlzdGluZ3Vpc2hlZAorICAgZnJvbSBhbiBlbXB0eSB2YWx1ZSByZXR1 cm5lZCBieSBhIHN1Y2Nlc3NmdWwgZnVuY3Rpb24gY2FsbDsgKGIpIGRpZCBub3QKKyAgIGdpdmUg YW55IGluZGljYXRpb24gb2YgdGhlIGNhdXNlIG9mIGZhaWx1cmU7IGFuZCAoYykgZGlkIG5vdCBj YXVzZSB0aGUKKyAgIGVuY2xvc2luZyBzdGF0ZW1lbnQgdG8gZmFpbC4gQy1LZXJtaXQgNy4wIGNv cnJlY3RzIHRoZXNlIGRlZmljaWVuY2llcy4KKworICAgU0VUIEZVTkNUSU9OIERJQUdOT1NUSUNT IHsgT04sIE9GRiB9CisgICAgICAgICAgd2hlbiBPTiwgYWxsb3dzIGJ1aWx0LWluIGZ1bmN0aW9u cyB0byByZXR1cm4gZGlhZ25vc3RpYyBtZXNzYWdlcworICAgICAgICAgIHdoZW4gaW1wcm9wZXJs eSByZWZlcmVuY2VkLCBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4gRlVOQ1RJT04KKyAgICAg ICAgICBESUFHTk9TVElDUyBhcmUgT04gYnkgZGVmYXVsdC4gV2hlbiBPRkYsIGltcHJvcGVybHkg cmVmZXJlbmNlZAorICAgICAgICAgIGZ1bmN0aW9ucyBjb250aW51ZSB0byByZXR1cm4gYW4gZW1w dHkgc3RyaW5nLiBUaGlzIGNvbW1hbmQgYWxzbworICAgICAgICAgIGFmZmVjdHMgYnVpbHQtaW4g dmFyaWFibGVzOyBpbiB0aGlzIGNhc2UsIGFuIGVycm9yIG1lc3NhZ2UgaXMKKyAgICAgICAgICBy ZXR1cm5lZCBvbmx5IGlmIHRoZSB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdC4gV2hlbiBGVU5DVElP TgorICAgICAgICAgIERJQUdOT1NUSUNTIGFyZSBPTiwgdGhlIGVycm9yIG1lc3NhZ2UgaXMgYWxz byBwcmludGVkLgorCisgICBGb3IgdmFyaWFibGVzLCB0aGUgb25seSBtZXNzYWdlIGlzOgorCisg IDxFUlJPUjpOT19TVUNIX1ZBUklBQkxFOlx2KG5hbWUpPgorCisgICB3aGVyZSAibmFtZSIgaXMg dGhlIG5hbWUgb2YgdGhlIG5vbmV4aXN0ZW50IHZhcmlhYmxlLgorCisgICBGb3IgZnVuY3Rpb25z LCB0aGUgZGlhZ25vc3RpYyBtZXNzYWdlIGlzOgorCisgIDxFUlJPUjptZXNzYWdlOlxmbmFtZSgp PgorCisgICB3aGVyZSAibWVzc2FnZSIgaXMgcmVwbGFjZWQgYnkgYSBtZXNzYWdlLCBhbmQgIm5h bWUiIGlzIHJlcGxhY2VkIGJ5IHRoZQorICAgZnVuY3Rpb24gbmFtZSwgZS5nLiA8RVJST1I6QVJH X05PVF9OVU1FUklDOlxmbW9kKCk+LiBNZXNzYWdlcyBpbmNsdWRlOgorCisgIEFSR19CQURfQVJS QVkgICAgICAgQW4gYXJndW1lbnQgY29udGFpbnMgYSBtYWxmb3JtZWQgYXJyYXkgcmVmZXJlbmNl LgorICBBUkdfQkFEX0RBVEUgICAgICAgIEFuIGFyZ3VtZW50IGNvbnRhaW5zIGEgbWFsZm9ybWVk IGRhdGUgYW5kL29yIHRpbWUuCisgIEFSR19CQURfUEhPTkVOVU0gICAgQW4gYXJndW1lbnQgY29u dGFpbnMgYSBtYWxmb3JtZWQgdGVsZXBob25lIG51bWJlci4KKyAgQVJHX0JBRF9WQVJJQUJMRSAg ICBBbiBhcmd1bWVudCBjb250YWlucyBhIG1hbGZvcm1lZCBcJXggdmFyaWFibGUuCisgIEFSR19J TkNPTVBMRVRFICAgICAgQW4gYXJndW1lbnQgaXMgaW5jb21wbGV0ZSAoZS5nLiBhIGJyb2tlbiBC YXNlNjQgc3RyaW5nKS4KKyAgQVJHX0VWQUxfRkFJTFVSRSAgICBBbiBhcmd1bWVudCBjb3VsZCBu b3QgYmUgZXZhbHVhdGVkIChpbnRlcm5hbCBlcnJvcikuCisgIEFSR19OT1RfQVJSQVkgICAgICAg QW4gYXJndW1lbnQgcmVmZXJlbmNlcyBhbiBhcnJheSB0aGF0IGlzIG5vdCBkZWNsYXJlZC4KKyAg QVJHX05PVF9OVU1FUklDICAgICBBbiBhcmd1bWVudCB0aGF0IG11c3QgYmUgaW50ZWdlciBjb250 YWlucyBub24tZGlnaXRzLgorICBBUkdfTk9UX0ZMT0FUICAgICAgIEFuIGFyZ3VtZW50IGhhcyBi YWQgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGZvcm1hdC4KKyAgQVJHX05PVF9WQVJJQUJMRSAgICBB biBhcmd1bWVudCB0aGF0IG11c3QgYmUgYSB2YXJpYWJsZSBpcyBub3QgYSB2YXJpYWJsZS4KKyAg QVJHX09VVF9PRl9SQU5HRSAgICBBbiBhcmd1bWVudCdzIG51bWVyaWMgdmFsdWUgaXMgdG9vIGJp ZyBvciB0b28gc21hbGwsCisgICAgICAgICAgICAgICAgICAgICAgb3IgYW4gYXJndW1lbnQgY29u dGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzIChlLmcuIGEgaGV4CisgICAgICAgICAgICAgICAgICAg ICAgb3IgQmFzZS02NCBzdHJpbmcpLgorICBBUkdfVE9PX0xPTkcgICAgICAgIEFuIGFyZ3VtZW50 J3MgdmFsdWUgaXMgdG9vIGxvbmcuCisgIEFSUkFZX0ZBSUxVUkUgICAgICAgRmFpbHVyZSB0byBj cmVhdGUgYW4gYXJyYXkuCisgIERJVklERV9CWV9aRVJPICAgICAgRXhlY3V0aW9uIG9mIHRoZSBm dW5jdGlvbiB3b3VsZCBjYXVzZSBkaXZpc2lvbiBieSB6ZXJvLgorICBGTE9BVElOR19QT0lOVF9P UCAgIEV4ZWN1dGlvbiBlcnJvciBpbiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbi4KKyAgRklM RV9OT1RfRk9VTkQgICAgICBGaWxlbmFtZSBhcmd1bWVudCBuYW1lcyBhIGZpbGUgdGhhdCBjYW4n dCBiZSBmb3VuZC4KKyAgRklMRV9OT1RfUkVBREFCTEUgICBGaWxlbmFtZSBhcmd1bWVudCBpcyBu b3QgYSByZWd1bGFyIGZpbGUuCisgIEZJTEVfTk9UX0FDQ0VTU0lCTEUgRmlsZW5hbWUgYXJndW1l bnQgbmFtZXMgYSBmaWxlIHRoYXQgaXMgcmVhZC1wcm90ZWN0ZWQuCisgIEZJTEVfRVJST1IgICAg ICAgICAgT3RoZXIgZXJyb3Igd2l0aCBmaWxlbmFtZSBhcmd1bWVudC4KKyAgRklMRV9OT1RfT1BF TiAgICAgICBBIGZpbGUgZnVuY3Rpb24gd2FzIGdpdmVuIGEgY2hhbm5lbCB0aGF0IGlzIG5vdCBv cGVuLgorICBGSUxFX0VSUk9SXy1uICAgICAgIEEgZmlsZSBmdW5jdGlvbiBnb3QgZXJyb3IgLW4g KFs2MjFdU2VjdGlvbiAxLjIyKS4KKyAgTE9PS1VQX0ZBSUxVUkUgICAgICBFcnJvciBsb29raW5n IHVwIGZ1bmN0aW9uIChzaG91bGRuJ3QgaGFwcGVuKS4KKyAgTUFMTE9DX0ZBSUxVUkUgICAgICBG YWlsdXJlIHRvIGFsbG9jYXRlIG5lZWRlZCBtZW1vcnkgKHNob3VsZG4ndCBoYXBwZW4pLgorICBO QU1FX0FNQklHVU9VUyAgICAgIFRoZSBmdW5jdGlvbiBpcyBub3QgdW5pcXVlbHkgaWRlbnRpZmll ZC4KKyAgTUlTU0lOR19BUkcgICAgICAgICBBIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG1pc3Npbmcu CisgIE5PX1NVQ0hfRlVOQ1RJT04gICAgQW4gYXJndW1lbnQgcmVmZXJlbmNlcyBhIGZ1bmN0aW9u IHRoYXQgaXMgbm90IGRlZmluZWQuCisgIE5PX1NVQ0hfTUFDUk8gICAgICAgQW4gYXJndW1lbnQg cmVmZXJlbmNlcyBhIG1hY3JvIHRoYXQgaXMgbm90IGRlZmluZWQuCisgIFJFU1VMVF9UT09fTE9O RyAgICAgVGhlIHJlc3VsdCBvZiBhIGZ1bmN0aW9uIGlzIHRvbyBsb25nLgorICBVTktOT1dOX0ZV TkNUSU9OICAgIEludGVybmFsIGVycm9yIGxvY2F0aW5nIGZ1bmN0aW9uIChzaG91bGRuJ3QgaGFw cGVuKS4KKworICAgRXhhbXBsZXM6CisKKyAgYXNzaWduIFwlbSBcZm1vZCgpCisgID88RVJST1I6 TUlTU0lOR19BUkc6XGZtb2QoKT4KKyAgZWNobyAiXGZjb250ZW50cyhcJW0pIgorICAiPEVSUk9S Ok1JU1NJTkdfQVJHOlxmbW9kKCk+IgorICBlY2hvIFxmbW9kKDMseCkKKyAgPzxFUlJPUjpBUkdf Tk9UX05VTUVSSUM6XGZtb2QoKT4KKyAgZWNobyBcZm1vZCgzLDQtMioyKQorICA/PEVSUk9SOkRJ VklERV9CWV9aRVJPOlxmbW9kKCk+CisKKyAgIE5vdGljZSB0aGUgdXNlIG9mIFxmY29udGVudHMo KSBpbiBlY2hvaW5nIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIHRoYXQKKyAgIGNvbnRhaW5zIGEg cmV0dXJuZWQgZXJyb3IgbWVzc2FnZS4gVGhhdCdzIGJlY2F1c2UgdGhlIGVycm9yIG1lc3NhZ2UK KyAgIGluY2x1ZGVzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBvciBmdW5jdGlvbiB0aGF0IGZh aWxlZCwgc28geW91IG11c3QKKyAgIHVzZSBcZmNvbnRlbnRzKCkgdG8gcHJldmVudCBpdCBmcm9t IGJlaW5nIGV2YWx1YXRlZCBhZ2FpbiAtLSBvdGhlcndpc2UKKyAgIHRoZSBzYW1lIGVycm9yIHdp bGwgb2NjdXIuCisKKyAgIFRoZSBoYW5kbGluZyBvZiBmdW5jdGlvbiBhbmQgdmFyaWFibGUgZXJy b3JzIGlzIGNvbnRyb2xsZWQgYnk6CisKKyAgIFNFVCBGVU5DVElPTiBFUlJPUiB7IE9OLCBPRkYg fQorICAgICAgICAgIFRlbGxzIHdoZXRoZXIgaW52YWxpZCBmdW5jdGlvbiBjYWxscyBvciB2YXJp YWJsZSByZWZlcmVuY2VzCisgICAgICAgICAgc2hvdWxkIGNhdXNlIGNvbW1hbmQgZXJyb3JzLiBG VU5DVElPTiBFUlJPUiBpcyBPTiBieSBkZWZhdWx0LgorICAgICAgICAgIFdoZW4gT04sIGFuZCBh biBlcnJvciBpcyBkaWFnbm9zZWQgaW4gYSBidWlsdC1pbiBmdW5jdGlvbiBvcgorICAgICAgICAg IHZhcmlhYmxlLCB0aGUgY29tbWFuZCB0aGF0IGluY2x1ZGVzIHRoZSBmdW5jdGlvbiBjYWxsIG9y CisgICAgICAgICAgdmFyaWFibGUgcmVmZXJlbmNlIGZhaWxzLiBUaGUgZmFpbGluZyBjb21tYW5k IGNhbiBiZSBoYW5kbGVkIGluCisgICAgICAgICAgdGhlIG5vcm1hbCB3YXkgd2l0aCBJRiBGQUlM VVJFIC8gSUYgU1VDQ0VTUywgU0VUIFRBS0UgRVJST1IsIG9yCisgICAgICAgICAgU0VUIE1BQ1JP IEVSUk9SLgorCisgICBXaGVuIEZVTkNUSU9OIERJQUdOT1NUSUNTIGlzIE9GRiwgdGhlcmUgaXMg bm8gZXJyb3IgbWVzc2FnZS4KKworICAgU0hPVyBTQ1JJUFRTIGRpc3BsYXlzIHRoZSBjdXJyZW50 IEZVTkNUSU9OIERJQUdOT1NUSUNTIGFuZCBFUlJPUgorICAgc2V0dGluZ3MuCisKKyAgNy4xMy4g UmV0dXJuIFZhbHVlIG9mIE1hY3JvcworCisgICBJbiBDLUtlcm1pdCA1QSBhbmQgNi4wLCB0aGVy ZSBhcmUgdHdvIHdheXMgdG8gcmV0dXJuIG9uZSBsZXZlbCBmcm9tIGEKKyAgIG1hY3JvOiBSRVRV Uk4gdmFsdWUgYW5kIEVORCBudW1iZXIgdGV4dC4gV2hlbiBSRVRVUk4gaXMgdXNlZCwgdGhlCisg ICB2YWx1ZSwgd2hpY2ggY2FuIGJlIGEgbnVtYmVyIG9yIGEgdGV4dCBzdHJpbmcsIGlzIGFzc2ln bmVkIHRvCisgICBcdihyZXR1cm4pLiBXaGVuIEVORCB3YXMgdXNlZCwgaG93ZXZlciwgXHYocmV0 dXJuKSB3YXMgbm90IHNldC4KKyAgIFNVQ0NFU1MvRkFJTFVSRSB3YXMgc2V0IGFjY29yZGluZyB0 byB3aGV0aGVyIHRoZSBudW1iZXIgd2FzIHplcm8sIGFuZAorICAgdGhlIHRleHQgd2FzIHByaW50 ZWQsIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBudW1iZXIgd2FzIGxvc3QuCisKKyAgIElu IEMtS2VybWl0IDcuMCwgdGhlIEVORCBudW1iZXIgaXMgYXZhaWxhYmxlIGluIHRoZSBcdihyZXR1 cm4pCisgICB2YXJpYWJsZS4KKworICA3LjE0LiBUaGUgQVNTRVJULCBGQUlMLCBhbmQgU1VDQ0VF RCBDb21tYW5kcy4KKworICAgVGhlIEFTU0VSVCBjb21tYW5kIGlzIGp1c3QgbGlrZSB0aGUgSUYg Y29tbWFuZCwgYnV0IHdpdGhvdXQgYSBjb21tYW5kCisgICB0byBleGVjdXRlLiBJdCBzaW1wbHkg c3VjY2VlZHMgb3IgZmFpbHMsIGFuZCB0aGlzIGNhbiBiZSB0ZXN0ZWQgYnkgYQorICAgc3Vic2Vx dWVudCBJRiBTVUNDRVNTIG9yIElGIEZBSUxVUkUgY29tbWFuZC4gRXhhbXBsZToKKworICBBU1NF UlQgPSAxIDEKKyAgSUYgU1VDQ0VTUyBlY2hvIDEgPSAxLgorCisgICBUaGUgRkFJTCBjb21tYW5k IGRvZXMgbm90aGluZywgYnV0IGFsd2F5cyBmYWlscy4gVGhlIFNVQ0NFRUQgY29tbWFuZAorICAg ZG9lcyBub3RoaW5nLCBidXQgYWx3YXlzIHN1Y2NlZWRzLgorCisgICBUaGVzZSBjb21tYW5kcyBh cmUgaGFuZHkgaW4gZGVidWdnaW5nIHNjcmlwdHMgd2hlbiB5b3Ugd2FudCB0byBpbmR1Y2UgYQor ICAgZmFpbHVyZSAob3Igc3VjY2VzcykgdGhhdCBub3JtYWxseSB3b3VsZCBub3Qgb2NjdXIsIGUu Zy4gZm9yIHRlc3RpbmcKKyAgIGJsb2NrcyBvZiBjb2RlIHRoYXQgbm9ybWFsbHkgYXJlIG5vdCBl eGVjdXRlZC4KKworICA3LjE1LiBVc2luZyBBbGFybXMKKworICAgQWxhcm1zIG1heSBiZSBzZXQg aW4gdHdvIHdheXM6CisKKyAgIFNFVCBBTEFSTSBudW1iZXIKKyAgICAgICAgICBTZXRzIGFuIGFs YXJtIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgImZyb20gbm93IiwgaS5lLgorICAg ICAgICAgIGluIHRoZSBmdXR1cmUsIHJlbGF0aXZlIHRvIHdoZW4gdGhlIFNFVCBBTEFSTSBjb21t YW5kIHdhcyBnaXZlbi4KKyAgICAgICAgICBFeGFtcGxlczoKKworICBzZXQgYWxhcm0gNjAgICAg ICAgIDsgNjAgc2Vjb25kcyBmcm9tIG5vdworICBzZXQgYWxhcm0gKzYwICAgICAgIDsgVGhlIHNh bWUgYXMgIjYwIgorICBzZXQgYWxhcm0gLTYwICAgICAgIDsgTm90IGxlZ2FsIC0geW91IGNhbid0 IHNldCBhbiBhbGFybSBpbiB0aGUgcGFzdC4KKyAgc2V0IGFsYXJtIDYwKjYwICAgICA7IDYwIG1p bnV0ZXMgZnJvbSBub3cuCisgIHNldCBhbGFybSBcJWErMTAgICAgOyBZb3UgY2FuIHVzZSB2YXJp YWJsZXMsIGV0Yy4KKworICAgU0VUIEFMQVJNIGhoOm1tOnNzCisgICAgICAgICAgU2V0cyBhbiBh bGFybSBmb3IgdGhlIHNwZWNpZmllZCB0aW1lLiBJZiB0aGUgZ2l2ZW4gdGltZSBpcworICAgICAg ICAgIGVhcmxpZXIgdGhhbiB0aGUgY3VycmVudCB0aW1lLCB0aGUgYWxhcm0gaXMgc2V0IGZvciB0 aGUgZ2l2ZW4KKyAgICAgICAgICB0aW1lIGluIHRoZSBuZXh0IGRheS4gWW91IG1heSBnaXZlIHRo ZSB0aW1lIGluIHZhcmlvdXMgZm9ybWF0czoKKworICBzZXQgYWxhcm0gMTU6MDA6MDAgIDsgMzow MDowMHBtCisgIHNldCBhbGFybSAzOjAwOjAwcG0gOyAzOjAwOjAwcG0KKyAgc2V0IGFsYXJtIDM6 MDBwbSAgICA7IDM6MDA6MDBwbQorICBzZXQgYWxhcm0gM3BtICAgICAgIDsgMzowMDowMHBtCisK KyAgIFNIT1cgQUxBUk0KKyAgICAgICAgICBEaXNwbGF5cyB0aGUgY3VycmVudCBhbGFybSwgaWYg YW55LCBpbiBzdGFuZGFyZCBkYXRlLXRpbWUgZm9ybWF0CisgICAgICAgICAgKHNlZSBbNjIyXVNl Y3Rpb24gMS42KTogeXl5eW1tZGQgaGg6bW06c3MuCisKKyAgIElGIEFMQVJNIGNvbW1hbmQKKyAg ICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBpZiBhbiBhbGFybSBoYXMgYmVlbiBzZXQgYW5k IHRoZSBhbGFybSB0aW1lCisgICAgICAgICAgaGFzIHBhc3NlZC4KKworICAgSUYgQUxBUk0geyBj b21tYW5kLWxpc3QgfSBbIEVMU0UgeyBjb21tYW5kLWxpc3QgfSBdCisgICAgICAgICAgRXhlY3V0 ZXMgdGhlIGNvbW1hbmQtbGlzdCBpZiBhbiBhbGFybSBoYXMgYmVlbiBzZXQgYW5kIHRoZSBhbGFy bQorICAgICAgICAgIHRpbWUgaGFzIHBhc3NlZC4gT3RoZXJ3aXNlLCBpZiBhbiBFTFNFIHBhcnQg aXMgZ2l2ZW4sIGl0cworICAgICAgICAgIGNvbW1hbmQtbGlzdCBpcyBleGVjdXRlZC4KKworICAg Q0xFQVIgQUxBUk0KKyAgICAgICAgICBDbGVhcnMgdGhlIGFsYXJtLgorCisgICBPbmx5IG9uZSBh bGFybSBtYXkgYmUgc2V0IGF0IGEgdGltZS4KKworICAgRXhhbXBsZTogU3VwcG9zZSB5b3UgaGF2 ZSBhIHNjcmlwdCB0aGF0IGlzIGFsd2F5cyBydW5uaW5nLCBhbmQgdGhhdAorICAgdHJhbnNmZXJz IGZpbGVzIHBlcmlvZGljYWxseSwgYW5kIHRoYXQga2VlcHMgYSB0cmFuc2FjdGlvbiBsb2cuIFN1 cHBvc2UKKyAgIHlvdSB3YW50IHRvIHN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIGxvZyBlYWNoIGRh eToKKworICBsb2cgdHJhbnNhY3Rpb25zIFx2KGRhdGUpLmxvZworICBzZXQgYWxhcm0gMDA6MDA6 MDAgICAgICAgICAgICAgICAgICAgICA7IFNldCBhbiBhbGFybSBmb3IgbWlkbmlnaHQKKyAgd2hp bGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBNYWluIHNjcmlwdCBsb29wCisg ICAgICB4aWYgYWxhcm0geyAgICAgICAgICAgICAgICAgICAgICAgIDsgSWYgdGhlIGFsYXJtIHRp bWUgaXMgcGFzdC4uLgorICAgICAgICAgIGNsb3NlIHRyYW5zYWN0aW9ucyAgICAgICAgICAgICA7 IENsb3NlIGN1cnJlbnQgbG9nCisgICAgICAgICAgbG9nIHRyYW5zYWN0aW9ucyBcdihkYXRlKS5s b2cgIDsgU3RhcnQgbmV3IG9uZQorICAgICAgICAgIHBhdXNlIDEgICAgICAgICAgICAgICAgICAg ICAgICA7IFRvIG1ha2Ugc3VyZSAwMDowMDowMCBpcyBwYXN0CisgICAgICAgICAgc2V0IGFsYXJt IDAwOjAwOjAwICAgICAgICAgICAgIDsgU2V0IGEgbmV3IGFsYXJtCisgICAgICB9CisgICAgICA7 IHB1dCB0aGUgcmVzdCBvZiB0aGUgc2NyaXB0IGhlcmUuLi4KKyAgfQorCisgICBOb3RlIHRoYXQg SUYgQUxBUk0gLS0gbm8gbWF0dGVyIHdoZXRoZXIgaXQgc3VjY2VlZHMgb3IgZmFpbHMgLS0gZG9l cworICAgTk9UIGNsZWFyIGFuIGV4cGlyZWQgYWxhcm0uIFRodXMsIG9uY2UgYW4gYWxhcm0gaGFz IGV4cGlyZWQsIGV2ZXJ5IElGCisgICBBTEFSTSB3aWxsIHN1Y2NlZWQgdW50aWwgdGhlIGFsYXJt IGlzIGNsZWFyZWQgKHdpdGggdGhlIENMRUFSIEFMQVJNCisgICBjb21tYW5kKSBvciByZXNldCB3 aXRoIGEgbmV3IFNFVCBBTEFSTSBjb21tYW5kLgorCisgIDcuMTYuIFBhc3NpbmcgQXJndW1lbnRz IHRvIENvbW1hbmQgRmlsZXMKKworICAgQmVnaW5uaW5nIGluIHZlcnNpb24gNy4wLCBDLUtlcm1p dCBhY2NlcHRzIGFyZ3VtZW50cyBvbiB0aGUgVEFLRQorICAgY29tbWFuZCBsaW5lLCBmb3IgZXhh bXBsZToKKworICBDLUtlcm1pdD4gdGFrZSBvb2ZhLmtzYyBvbmUgdHdvIHt0aGlzIGlzIHRocmVl fSBmb3VyCisKKyAgIFRoaXMgYXV0b21hdGljYWxseSBzZXRzIHRoZSB2YXJpYWJsZXMgXCUxIHRo cm91Z2ggXCU5IHRvIHRoZSBhcmd1bWVudHMsCisgICBhbmQgXCUwIHRvIHRoZSBuYW1lIG9mIHRo ZSBmaWxlLCBpbiB0aGlzIGNhc2U6CisKKyAgXCUwID0gL3Vzci9vbGdhL29vZmEua3NjCisgIFwl MSA9IG9uZQorICBcJTIgPSB0d28KKyAgXCUzID0gdGhpcyBpcyB0aHJlZQorICBcJTQgPSBmb3Vy CisKKyAgIGFuZCBcJTUuLlwlOSBhcmUgdW5kZWZpbmVkIChlbXB0eSkuIEFyZ3VtZW50cyBwYXN0 IHRoZSBuaW50aCBhcmUKKyAgIGF2YWlsYWJsZSBpbiB0aGUgXCZfW10gYXJndW1lbnQtdmVjdG9y IGFycmF5ICggWzYyM11TZWN0aW9uIDcuNSkuCisKKyAgIFRoZSB2YXJpYWJsZXMgYXJlIHRob3Nl IGF0IHRoZSBjdXJyZW50IG1hY3JvIGxldmVsLiBUaHVzLCBpZiB0aGUgVEFLRQorICAgY29tbWFu ZCBpcyBleGVjdXRlZCBmcm9tIHdpdGhpbiBhIG1hY3JvLCB0aGUgbWFjcm8ncyBhcmd1bWVudHMg YXJlCisgICByZXBsYWNlZCBieSB0aG9zZSBnaXZlbiBvbiB0aGUgVEFLRSBjb21tYW5kIGxpbmUg KGJ1dCBvbmx5IGlmIGF0IGxlYXN0CisgICBvbmUgYXJndW1lbnQgaXMgZ2l2ZW4pLiBUaGUgY29t bWFuZCBzaG93biBhYm92ZSBpcyBleGFjdGx5IGVxdWl2YWxlbnQKKyAgIHRvOgorCisgIGFzc2ln biBcJTAgL3Vzci9vbGdhL29vZmEua3NjCisgIGFzc2lnbiBcJTEgb25lCisgIGFzc2lnbiBcJTIg dHdvCisgIGFzc2lnbiBcJTMgdGhpcyBpcyB0aHJlZQorICBhc3NpZ24gXCU0IGZvdXIKKyAgYXNz aWduIFwlNQorICBhc3NpZ24gXCU2CisgIGFzc2lnbiBcJTcKKyAgYXNzaWduIFwlOAorICBhc3Np Z24gXCU5CisgIHRha2Ugb29mYS5rc2MKKworICAgUmVtZW1iZXIsIHRoZSB2YXJpYWJsZXMgXCUw Li5cJTkgYXJlIG9uIHRoZSBtYWNybyBjYWxsIHN0YWNrLCBhbmQKKyAgIGNvbW1hbmQgZmlsZXMg YXJlIGluZGVwZW5kZW50IG9mIHRoZSBtYWNybyBzdGFjay4gVGh1cywgaWYgYSBjb21tYW5kCisg ICBmaWxlIFRBS0VzIGFub3RoZXIgY29tbWFuZCBmaWxlIGFuZCBwYXNzZXMgYXJndW1lbnRzIHRv IGl0LCB0aGUKKyAgIHZhcmlhYmxlcyBhcmUgY2hhbmdlZCBmcm9tIHRoYXQgcG9pbnQgb24gZm9y IGJvdGggZmlsZXMsIGFuZCBzbyBmb3J0aAorICAgZm9yIGFsbCBsZXZlbHMgb2YgbmVzdGVkIGNv bW1hbmQgZmlsZXMgd2l0aG91dCBpbnRlcnZlbmluZyBtYWNybworICAgaW52b2NhdGlvbnMuCisK KyAgIEl0IHdvdWxkIGhhdmUgYmVlbiBwb3NzaWJsZSB0byBjaGFuZ2UgQy1LZXJtaXQgdG8gdXNl IHRoZSBvdmVyYWxsCisgICBjb21tYW5kIHN0YWNrLCByYXRoZXIgdGhhbiB0aGUgbWFjcm8gc3Rh Y2ssIGZvciBhcmd1bWVudHMgLS0gdGhpcyB3b3VsZAorICAgaGF2ZSBtYWRlIFRBS0Ugd29yayBl eGFjdGx5IGxpa2UgRE8sIHdoaWNoIGlzICJuaWNlciIsIGJ1dCBpdCB3b3VsZAorICAgYWxzbyBo YXZlIGJyb2tlbiBjb3VudGxlc3MgZXhpc3Rpbmcgc2NyaXB0cy4gSG93ZXZlciwgdGhlIG5ldyBT SElGVAorICAgY29tbWFuZCAoWzYyNF1TZWN0aW9uIDcuNSkgbWFrZXMgaXQgcG9zc2libGUgdG8g Y3JlYXRlIGFuIGFsdGVybmF0aXZlCisgICBUQUtFIGNvbW1hbmQgdGhhdCBkb2VzIGluZGVlZCBz YXZlIGFuZCByZXN0b3JlIHRoZSBhcmd1bWVudCB2YXJpYWJsZXMKKyAgIGF0IGl0cyBvd24gbGV2 ZWwgYXJvdW5kIGV4ZWN1dGlvbiBvZiBhIGNvbW1hbmQgZmlsZToKKworICBkZWZpbmUgbXRha2Ug eworICAgICBsb2NhbCBcJWYKKyAgICAgYXNzaWduIFwlZiBcZmNvbnRlbnRzKFwlMSkKKyAgICAg c2hpZnQKKyAgICAgdGFrZSBcJWYKKyAgfQorCisgICBDLUtlcm1pdCA3LjAgYWxzbyBzdXBwb3J0 cyBhIG5ldywgZWFzaWVyIHdheSB0byBwYXNzIGFyZ3VtZW50cyB0bworICAgc2NyaXB0cyBmcm9t IHRoZSBzeXN0ZW0gY29tbWFuZCBsaW5lOgorCisgIGtlcm1pdCBmaWxlbmFtZSBhcmcxIGFyZzIg YXJnMyAuLi4KKworICAgaW4gd2hpY2ggYXJnMSwgYXJnMiwgYXJnMyAoZXRjKSBhcmUgYXJndW1l bnRzIGZvciB0aGUgc2NyaXB0ICh3aG9zZQorICAgZmlsZW5hbWUgaXMgZ2l2ZW4pLCBhbmQgYXJl IGFzc2lnbmVkIHRvIFwlMSwgXCUyLCAuLi4gXCU5LiBUaGUgZmlsZW5hbWUKKyAgIGlzIGFzc2ln bmVkIHRvIFwlMC4gVGhpcyBhcHBsaWVzIGVxdWFsbHkgdG8gIktlcmJhbmciIHNjcmlwdHMgaW4g VU5JWAorICAgKFs2MjVdU2VjdGlvbiA3LjE5KS4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhh dmUgYSBmaWxlIGNhbGxlZAorICAgInNob3dhcmdzIiBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcg bGluZXM6CisKKyAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKworICBlY2hvIEhlbGxvIGZyb20g XCUwCisgIHNob3cgYXJncworICBleGl0CisKKyAgIChleGNlcHQgbm90IGluZGVudGVkLCBzaW5j ZSB0aGUgIiMhIiBsaW5lIG11c3QgYmUgb24gdGhlIGxlZnQgbWFyZ2luKS4KKyAgIElmIHlvdSBn aXZlIHRoaXMgZmlsZSBleGVjdXRlIHBlcm1pc3Npb246CisKKyAgY2htb2QgK3ggc2hvd2FyZ3MK KworICAgdGhlbiB5b3UgY2FuIHJ1biBpdCBleGFjdGx5IGFzIHlvdSB3b3VsZCBydW4gYSBVTklY IHNoZWxsIHNjcmlwdCwgZS5nLjoKKworICAkIHNob3dhcmdzIG9uZSB0d28gdGhyZWUKKyAgSGVs bG8gZnJvbSAvdXNyL29sZ2Evc2hvd2FyZ3MKKyAgVG9wLWxldmVsIGFyZ3VtZW50cyAoXHYoYXJn YykgPSA0KToKKyAgIFwmX1swXSA9IC91c3Ivb2xnYS9zaG93YXJncworICAgXCZfWzFdID0gb25l CisgICBcJl9bMl0gPSB0d28KKyAgIFwmX1szXSA9IHRocmVlCisKKyAgIEZ1cnRoZXJtb3JlLCB0 aGUgXCZfW10gYXJyYXkgbm93IGNvbnRhaW5zIHRoZSBmaWxlbmFtZSwgaWYgb25lIHdhcworICAg Z2l2ZW4gYXMgdGhlIGZpcnN0IGNvbW1hbmQgbGluZSBhcmd1bWVudCwgb3IgaXQgaXMgYSAiS2Vy YmFuZyIgc2NyaXB0LAorICAgaW4gZWxlbWVudCAwLgorCisgICBPdGhlcndpc2UgZWxlbWVudCAw IGlzIHByb2dyYW0gbmFtZSwgYW5kIGVsZW1lbnRzIDEgdGhyb3VnaCBcdihhcmdjKS0xCisgICBj b250YWluIHRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBpZiBhbnksIHRoYXQgYXBwZWFyIGFm dGVyICItLSIgb3IKKyAgICI9IiwgaWYgYW55LiBUaGlzIGFycmF5IGlzIHNhdmVkIGFuZCByZXN0 b3JlZCBhcm91bmQgbWFjcm8gY2FsbHM7CisgICByZWNhbGwgdGhhdCBpbnNpZGUgbWFjcm9zIGl0 IGNvbnRhaW5zIHRoZSBtYWNybyBhcmd1bWVudCB2ZWN0b3IKKyAgIChhbGxvd2luZyB5b3UgdG8g YWNjZXNzIGFyZ3VtZW50cyBwcm9ncmFtbWF0aWNhbGx5LCBhbmQgdG8gaGF2ZSBtb3JlCisgICB0 aGFuIDkgb2YgdGhlbSkuCisKKyAgIEF0IHRvcCBsZXZlbCwgbm90aWNlIHRoZSBkaWZmZXJlbmNl IGJldHdlZW4gdGhlIFwmQFtdIGFuZCBcJl9bXSBhcnJheXMuCisgICBUaGUgZm9ybWVyIGluY2x1 ZGVzIEMtS2VybWl0IG9wdGlvbnM7IHRoZSBsYXR0ZXIgb21pdHMgdGhlbS4KKworICA3LjE3LiBE aWFsb2dzIHdpdGggVGltZWQgUmVzcG9uc2VzCisKKyAgIFRoZSBBU0ssIEFTS1EsIEdFVE9LLCBh bmQgR0VUQyBjb21tYW5kcyAobGV0J3MgY2FsbCB0aGVtIHRoZSAiQVNLLWNsYXNzCisgICBjb21t YW5kcyIpIGxldCB5b3Ugd3JpdGUgc2NyaXB0cyB0aGF0IGNhcnJ5IG9uIGRpYWxvZ3Mgd2l0aCB0 aGUgdXNlciwKKyAgIGFza2luZyB0aGVtIGZvciB0ZXh0LCBhIFllcy9ObyBhbnN3ZXIsIG9yIGEg Y2hhcmFjdGVyLCByZXNwZWN0aXZlbHkuCisgICBQcmlvciB0byBDLUtlcm1pdCA3LjAsIHRoZXNl IHF1ZXN0aW9ucyB3b3VsZCBhbHdheXMgd2FpdCBmb3JldmVyIGZvciBhbgorICAgYW5zd2VyLiBJ biBDLUtlcm1pdCA3LjAsIHlvdSBtYXkgc3BlY2lmeSBhIHRpbWUgbGltaXQgZm9yIHRoZW0gd2l0 aCB0aGUKKyAgIG5ldyBjb21tYW5kOgorCisgICBTRVQgQVNLLVRJTUVSIG51bWJlcgorICAgICAg ICAgIFNldHMgYSB0aW1lLWxpbWl0IG9uIEFTSy1DTEFTUyBjb21tYW5kcyB0byB0aGUgZ2l2ZW4g bnVtYmVyIG9mCisgICAgICAgICAgc2Vjb25kcy4gSWYgdGhlIG51bWJlciBpcyAwIG9yIGxlc3Ms IHRoZXJlIGlzIG5vIHRpbWUgbGltaXQgYW5kCisgICAgICAgICAgdGhlc2UgY29tbWFuZHMgd2Fp dCBmb3JldmVyIGZvciBhIHJlc3BvbnNlLiBBbnkgdGltZXIgdGhhdCBpcworICAgICAgICAgIGVz dGFibGlzaGVkIGJ5IHRoaXMgY29tbWFuZCByZW1haW5zIGluIGVmZmVjdCBmb3IgYWxsIGZ1dHVy ZQorICAgICAgICAgIEFTSy1jbGFzcyBjb21tYW5kcyB1bnRpbCBhbm90aGVyIFNFVCBBU0stVElN RVIgY29tbWFuZCBpcyBnaXZlbgorICAgICAgICAgIChlLmcuIHdpdGggYSB2YWx1ZSBvZiAwIHRv IGRpc2FibGUgQVNLIHRpbWVvdXRzKS4KKworICAgSUYgQVNLVElNRU9VVCBjb21tYW5kCisgICAg ICAgICAgQW4gQVNLLWNsYXNzIGNvbW1hbmQgdGhhdCB0aW1lcyBvdXQgcmV0dXJucyBhIGZhaWx1 cmUgc3RhdHVzLgorICAgICAgICAgIFlvdSBjYW4gdGVzdCBleHBsaWNpdGx5IGZvciBhIHRpbWVv dXQgd2l0aDoKKworICA3LjE4LiBJbmNyZWFzZWQgRmxleGliaWxpdHkgb2YgU1dJVENIIENhc2Ug TGFiZWxzCisKKyAgIFByaW9yIHRvIEMtS2VybWl0IDcuMCAvIEs5NSAxLjEuMTksIHRoZSBjYXNl IGxhYmVscyBpbiBTV0lUQ0gKKyAgIHN0YXRlbWVudHMgd2VyZSBzdHJpbmcgY29uc3RhbnRzLgor CisgICBOb3cgY2FzZSBsYWJlbHMgY2FuIGJlIHZhcmlhYmxlcywgZnVuY3Rpb24gY2FsbHMsIG9y IGFueSBtaXh0dXJlIG9mCisgICB0aGVzZSB3aXRoIGVhY2ggb3RoZXIgYW5kL29yIHdpdGggcmVn dWxhciBjaGFyYWN0ZXJzLgorCisgICBGdXJ0aGVybW9yZSwgYWZ0ZXIgdGhlIGNhc2UgbGFiZWwg aXMgZXZhbHVhdGVkLCBpdCBpcyB0cmVhdGVkIG5vdCBhcyBhCisgICBzdHJpbmcgY29uc3RhbnQs IGJ1dCBhcyBhIHBhdHRlcm4gYWdhaW5zdCB3aGljaCB0aGUgU1dJVENIIHZhcmlhYmxlIGlzCisg ICBtYXRjaGVkIChbNjI2XVNlY3Rpb24gNC45LjEpLgorCisgICBUaGlzIGludHJvZHVjZXMgYSBw b3NzaWJsZSBpbmNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyByZWxlYXNlcywKKyAgIHNpbmNl IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBpbiBjYXNlIGxhYmVscyBhcmUgbm8gbG9uZ2VyIHRh a2VuCisgICBsaXRlcmFsbHk6CisKKyAgXCAqID8gWyB7CisKKyAgIEFueSBzY3JpcHRzIHRoYXQg cHJldmlvdXNseSBpbmNsdWRlZCBhbnkgb2YgdGhlc2UgY2hhcmFjdGVycyBpbiBjYXNlCisgICBs YWJlbHMgbXVzdCBub3cgcXVvdGUgdGhlbSB3aXRoIGJhY2tzbGFzaCAoXCkuCisKKyAgNy4xOS4g IktlcmJhbmciIFNjcmlwdHMKKworICAgSW4gVU5JWCBvbmx5LCBLZXJtaXQgc2NyaXB0cyBjYW4g YmUgc3RvcmVkIGluIGZpbGVzIGFuZCBydW4gImRpcmVjdGx5IiwKKyAgIHdpdGhvdXQgc3RhcnRp bmcgS2VybWl0IGZpcnN0IChhcyBub3RlZCBvbiBwYWdlIDQ2NyBvZiB0aGUgbWFudWFsKSwKKyAg IGp1c3QgYXMgYSBzaGVsbCBzY3JpcHQgY2FuIGJlICJydW4iIGFzIGlmIGl0IHdlcmUgYSBwcm9n cmFtLiBUaGlzCisgICBzZWN0aW9uIGFtcGxpZmllcyBvbiB0aGF0IGlkZWEgYSBiaXQsIGFuZCBw cmVzZW50cyBzb21lIG5ldyBhc3BlY3RzIG9mCisgICB2ZXJzaW9uIDcuMCB0aGF0IG1ha2UgaXQg ZWFzaWVyIHRvIHdyaXRlIGFuZCBydW4gS2VybWl0IHNjcmlwdHMKKyAgIGRpcmVjdGx5LgorCisg ICAgIE5PVEU6IE9uIG5vbi1VTklYIHBsYXRmb3Jtcywgc3VjaCBhcyBWTVMgb3IgV2luZG93cywg S2VyYmFuZyBzY3JpcHRzCisgICAgIGNhbiBiZSBydW4gYXMgImtlcm1pdCArIHNjcmlwdGZpbGVu YW1lIGFyZzEgYXJnMiBhcmczIC4uLiIuIFdpbmRvd3MKKyAgICAgOTUvOTgvTlQgZmlsZSBhc3Nv Y2lhdGlvbnMgZG8gbm90IGFsbG93IGZvciB0aGUgcGFzc2luZyBvZgorICAgICBwYXJhbWV0ZXJz LiBJbiBWTVMsIGhvd2V2ZXIsIHlvdSBjYW4gYWNoaWV2ZSB0aGUgS2VyYmFuZyBlZmZlY3QgYnkK KyAgICAgZGVmaW5pbmcgYSBzeW1ib2wsIGFzIGluIHRoaXMgZXhhbXBsZToKKworICAkIGF1dG90 ZWxuZXQgOj09ICIkU1lTJFRPT0xTOktFUk1JVC5FWEUgKyBBVVRPVEVMTkVULktTQyIKKworICAg ICBhbmQgdGhlbiBydW5uaW5nIHRoZSBzY3JpcHQgbGlrZSBhbnkgb3RoZXIgY29tbWFuZDoKKwor ICAkIGF1dG90ZWxuZXQgeHl6Y29ycC5jb20gbXl1c2VyaWQKKworICAgICBTZWUgWzYyN11TZWN0 aW9uIDkuMyBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlICIrIiBzeW1ib2wuCisKKyAgIFVOSVgg c2hlbGwgc2NyaXB0cyBjYW4gc3BlY2lmeSB3aGljaCBzaGVsbCBzaG91bGQgcnVuIHRoZW0gYnkg aW5jbHVkaW5nCisgICBhICJzaGViYW5nIiBsaW5lIGF0IHRoZSB0b3AsIGUuZy46CisKKyAgIyEv YmluL3NoCisKKyAgIChidXQgbm90IGluZGVudGVkOyB0aGUgc2hlYmFuZyBsaW5lIG11c3QgYmUg b24gdGhlIGxlZnQgbWFyZ2luKS4gVGhlCisgICB0ZXJtICJzaGViYW5nIiBpcyBhIGNvbnRyYWN0 aW9uIG9mICJzaGVsbCIgYW5kICJiYW5nIi4gIkJhbmciIGlzIGEKKyAgIHNsYW5nIHdvcmQgZm9y IHRoZSBleGNsYW1hdGlvbiBtYXJrICgiISIpOyAic2hlYmFuZyIgaXRzZWxmIGlzIGFuCisgICBB bWVyaWNhbiBzbGFuZyB3b3JkIHVzZWQgaW4gaW4gdGhlIHBocmFzZSAidGhlIHdob2xlIHNoZWJh bmciLgorCisgICBXZSBjYW4gcnVuIEtlcm1pdCBzY3JpcHRzIGRpcmVjdGx5IHRvbywgYnkgaW5j bHVkaW5nIGEgInNoZWJhbmciIGxpbmUKKyAgIHRoYXQgbmFtZXMgS2VybWl0IGFzIHRoZSAic2hl bGwiOyB0aHVzIHdlIGNhbGwgdGhlc2UgIktlcmJhbmciIHNjcmlwdHMuCisgICBUaGlzIG1lY2hh bmlzbSBoYXMgYmVlbiBjb25zaWRlcmFibHkgc2ltcGxpZmllZCBpbiBDLUtlcm1pdCA3LjAgdG8K KyAgIGZhY2lsaXRhdGUgQy1LZXJtaXQncyB1c2UgYSBzY3JpcHRpbmcgdG9vbCBqdXN0IGxpa2Ug YW55IG9mIHRoZSBVTklYCisgICBzaGVsbHMgb3Igc2NyaXB0aW5nIGxhbmd1YWdlcy4gVGhlIHJ1 bGVzIGFyZSB0aGUgc2FtZSBhcyBmb3Igc2hlbGwKKyAgIHNjcmlwdHM6CisKKyAgICAxLiBUaGUg Zmlyc3QgbGluZSBvZiB0aGUgS2VybWl0IHNjcmlwdCBtdXN0IGJlZ2luIHdpdGggIiMhIgorICAg ICAgIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBwcm9n cmFtIHRoYXQgd2lsbAorICAgICAgIGV4ZWN1dGUgdGhlIHNjcmlwdCAoaW4gdGhpcyBjYXNlLCBD LUtlcm1pdCByYXRoZXIgdGhhbiBhIFVOSVgKKyAgICAgICBzaGVsbCksIGZvbGxvd2VkIGJ5IGFu eSBLZXJtaXQgY29tbWFuZC1saW5lIG9wdGlvbnMuIFRvIHN1cHByZXNzCisgICAgICAgZXhlY3V0 aW9uIG9mIHRoZSBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlIGFuZCB0byBtYWtlIGNvbW1h bmQKKyAgICAgICBsaW5lIGFyZ3VtZW50cyBhdmFpbGFibGUgdG8gdGhlIHNjcmlwdCwgdGhlIGZp bmFsIG9wdGlvbiBzaG91bGQgYmUKKyAgICAgICAiKyI6CisgICMhL3Vzci9sb2NhbC9iaW4va2Vy bWl0ICsKKworICAgICAgIFNvbWUgdXNlcnMgaGF2ZSByZXBvcnRlZCB0aGF0IGluIHNvbWUgY2ly Y3Vtc3RhbmNlcyBhIHNwYWNlIG1pZ2h0CisgICAgICAgYmUgbmVjZXNzYXJ5IGFmdGVyIHRoZSBw bHVzIHNpZ247IHRoaXMgZGVwZW5kcyBvbiB5b3VyIHNoZWxsIC0tIGl0CisgICAgICAgaGFzIG5v dGhpbmcgdG8gZG8gd2l0aCBLZXJtaXQuIEluIG1vc3QgY2FzZXMsIG5vIHNwYWNlIGlzIG5lZWRl ZC4KKyAgICAyLiBUaGUgZmlsZSBtdXN0IGhhdmUgZXhlY3V0ZSBwZXJtaXNzaW9uIChncmFudGVk IHZpYSAiY2htb2QgK3gKKyAgICAgICBmaWxlbmFtZSIpLgorCisgICBXaGVuIEMtS2VybWl0IGlz IGludm9rZWQgZnJvbSBhIEtlcmJhbmcgc2NyaXB0IChvciBmcm9tIHRoZSBzeXN0ZW0KKyAgIHBy b21wdCB3aXRoIGEgIisiIGNvbW1hbmQtbGluZSBhcmd1bWVudCwgd2hpY2ggYW1vdW50cyB0byB0 aGUgc2FtZQorICAgdGhpbmcpLCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgcnVsZXMgYXBwbHk6CisK KyAgICAxLiBUaGUgQy1LZXJtaXQgaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBOT1QgZXhlY3V0ZWQg YXV0b21hdGljYWxseS4gSWYKKyAgICAgICB5b3Ugd2FudCBpdCB0byBiZSBleGVjdXRlZCwgaW5j bHVkZSBhIFRBS0UgY29tbWFuZCBmb3IgaXQgaW4gdGhlCisgICAgICAgc2NyaXB0LCBlLmcuICJ0 YWtlIFx2KGhvbWUpLmtlcm1yYyIuIChJbiBwcmV2aW91cyByZWxlYXNlcywgdGhlCisgICAgICAg aW5pdGlhbGl6YXRpb24gZmlsZSB3YXMgYWx3YXlzIGV4ZWN1dGVkLCB3aXRoIG5vIHdheSB0byBw cmV2ZW50IGl0CisgICAgICAgZXhjZXB0IGZvciB0aGUgdXNlciB0byBpbmNsdWRlIEtlcm1pdC1z cGVjaWZpYyBjb21tYW5kIGxpbmUgb3B0aW9ucworICAgICAgIHdoaWNoIGhhZCBub3RoaW5nIHRv IGRvIHdpdGggdGhlIHNjcmlwdCkuIE1hbnkgc2NyaXB0cyBoYXZlIG5vIG5lZWQKKyAgICAgICBm b3IgdGhlIHN0YW5kYXJkIEtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLCB3aGljaCBpcyBxdWl0 ZSBsZW5ndGh5CisgICAgICAgYW5kIG5vdCBvbmx5IGRlbGF5cyBzdGFydHVwIG9mIHRoZSBzY3Jp cHQsIGJ1dCBhbHNvIHNwZXdzIGZvcnRoCisgICAgICAgbnVtZXJvdXMgbWVzc2FnZXMgdGhhdCBh cmUgbW9zdCBsaWtlbHkgdW5yZWxhdGVkIHRvIHRoZSBzY3JpcHQuCisgICAgMi4gSWYgdGhlIGlu aXRpYWxpemF0aW9uIGZpbGUgaXMgbm90IGV4ZWN1dGVkLCBuZWl0aGVyIGlzIHlvdXIKKyAgICAg ICBjdXN0b21pemF0aW9uIGZpbGUsIHNpbmNlIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIGlzIHRo ZSBjb21tYW5kCisgICAgICAgZmlsZSBmcm9tIHdoaWNoIHRoZSBjdXN0b21pemF0aW9uIGZpbGUg aXMgVEFLRW4uIEFnYWluLCB5b3UgY2FuCisgICAgICAgaW5jbHVkZSBhIFRBS0UgY29tbWFuZCBm b3IgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgaWYgZGVzaXJlZCwgb3IKKyAgICAgICBmb3IgdGhl IGN1c3RvbWl6YXRpb24gZmlsZSBieSBpdHNlbGYsIG9yIGZvciBhbnkgb3RoZXIgZmlsZS4KKyAg ICAzLiBDLUtlcm1pdCBkb2VzIG5vdCBwcm9jZXNzIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYXQg YWxsLiBJbnN0ZWFkLAorICAgICAgIGl0IHBhc3NlcyBhbGwgd29yZHMgb24gdGhlIGNvbW1hbmQg bGluZSBhZnRlciB0aGUgIisiIHRvIHRoZSBzY3JpcHQKKyAgICAgICBhcyBcJTAgKHRoZSBzY3Jp cHQgbmFtZSksIFwlMS4uXCU5ICh0aGUgZmlyc3QgbmluZSBhcmd1bWVudHMpLCBhcworICAgICAg IHdlbGwgYXMgaW4gdGhlIGFyZ3VtZW50IHZlY3RvciBhcnJheSBcJl9bXS4gVGhlIHZhcmlhYmxl IFx2KGFyZ2MpCisgICAgICAgaXMgc2V0IHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgIndvcmRzIiAo YXMgcGFzc2VkIGJ5IHRoZSBzaGVsbCB0bworICAgICAgIEtlcm1pdCkgaW5jbHVkaW5nIHRoZSBz Y3JpcHQgbmFtZS4gUXVvdGluZyBhbmQgZ3JvdXBpbmcgcnVsZXMgYXJlCisgICAgICAgdGhvc2Ug b2YgdGhlIHNoZWxsLgorICAgIDQuIEF0IGFueSBwb2ludCB3aGVyZSB0aGUgc2NyaXB0IHRlcm1p bmF0ZXMsIGl0IG11c3QgaW5jbHVkZSBhbiBFWElUCisgICAgICAgY29tbWFuZCBpZiB5b3Ugd2Fu dCBpdCB0byBleGl0IGJhY2sgdG8gdGhlIHNoZWxsOyBvdGhlcndpc2UKKyAgICAgICBDLUtlcm1p dCBlbnRlcnMgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIG1vZGUgd2hlbiB0aGUgc2NyaXB0CisgICAg ICAgdGVybWluYXRlcy4gVGhlIEVYSVQgY29tbWFuZCBjYW4gaW5jbHVkZSBhIG51bWVyaWMgc3Rh dHVzIHRvIGJlCisgICAgICAgcmV0dXJuZWQgdG8gdGhlIHNoZWxsICgwLCAxLCBldGMpLCBwbHVz IGFuIG9wdGlvbmFsIG1lc3NhZ2UuCisKKyAgIEhlcmUgaXMgYSBzaW1wbGUgS2VyYmFuZyBzY3Jp cHQgdGhhdCBwcmludHMgaXRzIGFyZ3VtZW50czoKKworICAjL3Vzci9sb2NhbC9iaW4va2VybWl0 ICsKKyAgZWNobyBIZWxsbyBmcm9tIFwlMAorICBmb3IgXCVpIDAgXHYoYXJnYyktMSAxIHsKKyAg ICAgIGVjaG8gXCVpLiAiXCZfW1wlaV0iCisgIH0KKyAgZXhpdCAwCisKKyAgIFNhdmUgdGhpcyBm aWxlIGFzIChzYXkpICJzaG93YXJncyIsIHRoZW4gZ2l2ZSBpdCBleGVjdXRlIHBlcm1pc3Npb24g YW5kCisgICBydW4gaXQgKHRoZSBcJl9bXSBhcnJheSBpcyB0aGUgc2FtZSBhcyBcJTAuLlwlOSwg YnV0IGFsbG93cyB5b3UgdG8KKyAgIHJlZmVyIHRvIGFyZ3VtZW50IHZhcmlhYmxlcyBwcm9ncmFt bWF0aWNhbGx5OyBzZWUgWzYyOF1TZWN0aW9uIDcuNSkuCisgICAoWWVzLCB5b3UgY291bGQgc3Vi c3RpdHV0ZSBTSE9XIEFSR1VNRU5UUyBmb3IgdGhlIGxvb3AuKQorCisgICQgY2htb2QgK3ggc2hv d2FyZ3MKKyAgJCAuL3Nob3dhcmdzIG9uZSAidGhpcyBpcyB0d28iIHRocmVlCisKKyAgIFRoZSBz Y3JpcHQgZGlzcGxheXMgaXRzIGFyZ3VtZW50czoKKworICBIZWxsbyBmcm9tIC91c3Ivb2xnYS9z aG93YXJncworICAwLiAiL3Vzci9vbGdhL3Nob3dhcmdzIgorICAxLiAib25lIgorICAyLiAidGhp cyBpcyB0d28iCisgIDMuICJ0aHJlZSIKKyAgJAorCisgICBOb3RpY2UgdGhhdCBubyBiYW5uZXJz IG9yIGdyZWV0aW5ncyBhcmUgcHJpbnRlZCBhbmQgdGhhdCBzdGFydHVwIGlzCisgICBpbnN0YW50 YW5lb3VzLCBqdXN0IGxpa2UgYSBzaGVsbCBzY3JpcHQuIEFsc28gbm90aWNlIHRoYXQgZ3JvdXBp bmcgb2YKKyAgIGFyZ3VtZW50cyBpcyBkZXRlcm1pbmVkIGJ5ICpzaGVsbCogcXVvdGluZyBydWxl cywgbm90IEtlcm1pdCBvbmVzLAorICAgc2luY2UgdGhlIGNvbW1hbmQgbGluZSBpcyBwYXJzZWQg YnkgdGhlIHNoZWxsIGJlZm9yZSBLZXJtaXQgZXZlciBzZWVzCisgICBpdC4KKworICAgT2YgY291 cnNlIHlvdSBjYW4gcHV0IGFueSBjb21tYW5kcyBhdCBhbGwgaW50byBhIEtlcmJhbmcgc2NyaXB0 LiBJdCBjYW4KKyAgIHJlYWQgYW5kIHdyaXRlIGZpbGVzLCBtYWtlIGNvbm5lY3Rpb25zLCB0cmFu c2ZlciBmaWxlcywgYW55dGhpbmcgdGhhdAorICAgS2VybWl0IGNhbiBkbyAtLSBiZWNhdXNlIGl0 ICppcyogS2VybWl0LiBBbmQgb2YgY291cnNlLCBLZXJiYW5nIHNjcmlwdHMKKyAgIGNhbiBhbHNv IGJlIGV4ZWN1dGVkIGZyb20gdGhlIEtlcm1pdCBwcm9tcHQgKG9yIGZyb20gYW5vdGhlciBzY3Jp cHQpCisgICB3aXRoIGEgVEFLRSBjb21tYW5kOyB0aGUgS2VyYmFuZyBsaW5lIGlzIGlnbm9yZWQg c2luY2UgaXQgc3RhcnRzIHdpdGgKKyAgICIjIiwgd2hpY2ggaXMgYSBjb21tZW50IGludHJvZHVj ZXIgdG8gS2VybWl0IGp1c3QgYXMgaXQgaXMgdG8gdGhlIFVOSVgKKyAgIHNoZWxsLiBJbiBWTVMg YW5kIG90aGVyIG5vbi1VTklYIHBsYXRmb3JtcywgdGhlIEtlcmJhbmcgbGluZSBoYXMgbm8KKyAg IGVmZmVjdCBhbmQgY2FuIGJlIG9taXR0ZWQuCisKKyAgIEl0IG1pZ2h0IGJlIGRlc2lyYWJsZSBm b3IgYSBzY3JpcHQgdG8ga25vdyB3aGV0aGVyIGl0IGhhcyBiZWVuIGludm9rZWQKKyAgIGRpcmVj dGx5IGZyb20gdGhlIHNoZWxsIChhcyBhIEtlcmJhbmcgc2NyaXB0KSBvciBieSBhIFRBS0UgY29t bWFuZAorICAgZ2l2ZW4gdG8gdGhlIEtlcm1pdCBwcm9tcHQgb3IgaW4gYSBLZXJtaXQgY29tbWFu ZCBmaWxlIG9yIG1hY3JvLiBUaGlzCisgICBjYW4gYmUgZG9uZSBhcyBpbiB0aGlzIGV4YW1wbGU6 CisKKyAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKworICBhc3NpZ24gXCVtIFxmYmFzZW5hbWUo XCUwKQorICBkZWZpbmUgdXNhZ2UgeyBleGl0IDEge3VzYWdlOiBcJW0gcGhvbmVudW1iZXIgbWVz c2FnZX0gfQorICBkZWZpbmUgYXBhZ2UgeyAoZGVmaW5pdGlvbiBvZiBBUEFHRS4uLikgfSA7IChT ZWUgWzYyOV1ib29rIHBwLjQ1NC00NTYpCisgIHhpZiBlcXVhbCAiXCUwIiAiXHYoY21kZmlsKSIg eworICAgICAgaWYgbm90IGRlZiBcJTEgdXNhZ2UKKyAgICAgIGlmIG5vdCBkZWYgXCUyIHVzYWdl CisgICAgICBhcGFnZSB7XCUxfSB7XCUyfQorICAgICAgZXhpdCBcdihzdGF0dXMpCisgIH0KKwor ICAgSW4gYSBLZXJiYW5nIHNjcmlwdCwgXCUwIGFuZCBcdihjbWRmaWxlKSBhcmUgdGhlIHNhbWU7 IGJvdGggb2YgdGhlbSBhcmUKKyAgIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQuIFdoZW4gYSBzY3Jp cHQgaXMgaW52b2tlZCBieSBhIEtlcm1pdCBUQUtFCisgICBjb21tYW5kLCBcJTAgaXMgdGhlIG5h bWUgb2YgdGhlIEtlcm1pdCBwcm9ncmFtLCBidXQgXHYoY21kZmlsZSkgaXMgdGhlCisgICBuYW1l IG9mIHRoZSBzY3JpcHQuIEluIHRoZSBleGFtcGxlIGFib3ZlLCBhIG1hY3JvIGNhbGxlZCBBUEFH RSBpcworICAgZGVmaW5lZC4gSWYgdGhlIHNjcmlwdCB3YXMgaW52b2tlZCBkaXJlY3RseSwgdGhl IEFQQUdFIG1hY3JvIGlzIGFsc28KKyAgIGV4ZWN1dGVkLiBPdGhlcndpc2UsIGl0IGlzIGF2YWls YWJsZSBmb3Igc3Vic2VxdWVudCBhbmQgcGVyaGFwcworICAgcmVwZWF0ZWQgdXNlIGxhdGVyIGlu IHRoZSBLZXJtaXQgc2Vzc2lvbi4KKworICAgQW4gZXNwZWNpYWxseSBoYW5keSB1c2UgZm9yIEtl cmJhbmcgc2NyaXB0cyBpcyB0byBoYXZlIHRoZQorICAgaW5pdGlhbGl6YXRpb24gZmlsZSBpdHNl bGYgYmUgb25lLiBTaW5jZSB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24KKyAgIGZpbGUgaXMg cmF0aGVyIGxvbmcgYW5kIHRpbWUtY29uc3VtaW5nIHRvIGV4ZWN1dGUsIGl0IGlzIG9mdGVuIG92 ZXJraWxsCisgICBpZiB5b3Ugd2FudCB0byBzdGFydCBLZXJtaXQganVzdCB0byB0cmFuc2ZlciBh IGZpbGUuIE9mIGNvdXJzZSB0aGVyZQorICAgYXJlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyB0byBz dXBwcmVzcyBpbml0aWFsaXphdGlvbi1maWxlIGV4ZWN1dGlvbiwKKyAgIGV0YywgYnV0IGFub3Ro ZXIgYXBwcm9hY2ggaXMgdG8gInJ1biIgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgd2hlbiB5b3UK KyAgIHdhbnQgaXRzIGZlYXR1cmVzIChub3RhYmx5IHRoZSBzZXJ2aWNlcyBkaXJlY3RvcnkpLCBh bmQgcnVuIEMtS2VybWl0CisgICBkaXJlY3RseSB3aGVuIHlvdSBkb24ndC4gQSBzZXR1cCBsaWtl IHRoaXMgcmVxdWlyZXMgdGhhdCAoYSkgdGhlCisgICBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBm aWxlIGlzIGNvbmZpZ3VyZWQgYXMgYSBLZXJiYW5nIHNjcmlwdCAoaGFzCisgICAjIS9wYXRoLi4u L2tlcm1pdCBhcyBmaXJzdCBsaW5lKSwgaGFzIGV4ZWN1dGUgcGVybWlzc2lvbiwgYW5kIGlzIGlu CisgICB5b3VyIFBBVEg7IGFuZCAoYikgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBhIC5rZXJtcmMgZmls ZSBpbiB5b3VyIGxvZ2luCisgICBkaXJlY3RvcnkuCisKKyAgNy4yMC4gSUYgYW5kIFhJRiBTdGF0 ZW1lbnQgU3ludGF4CisKKyAgIFRoZSBJRiBjb21tYW5kIGhhcyBiZWVuIGltcHJvdmVkIGluIHR3 byBzaWduaWZpY2FudCB3YXlzIGluIEMtS2VybWl0CisgICA3LjAsIGRlc2NyaWJlZCBpbiB0aGUg Zm9sbG93aW5nIHN1YnNlY3Rpb25zLiBBbGwgY2hhbmdlcyBhcmUgYmFja3dhcmRzCisgICBjb21w YXRpYmxlLgorCisgICAgNy4yMC4xLiBUaGUgSUYvWElGIERpc3RpbmN0aW9uCisKKyAgIFRoZSBk aXN0aW5jdGlvbiBiZXR3ZWVuIElGIGFuZCBYSUYgaXMgbm8gbG9uZ2VyIGltcG9ydGFudCBhcyBv ZgorICAgQy1LZXJtaXQgNy4wLiBZb3Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIElGIGluIGFsbCBj YXNlcyAoYW5kIG9mIGNvdXJzZSwKKyAgIGFsc28gWElGIGZvciBiYWNrd2FyZHMgY29tcGF0aWJp bGl0eSkuIEluIHRoZSBwYXN0LCBJRiB3YXMgdXNlZCBmb3IKKyAgIHNpbmdsZS1jb21tYW5kIFRI RU4gcGFydHMsIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgYSBzZXBhcmF0ZSBFTFNFCisgICBjb21t YW5kOgorCisgIElGIGNvbmRpdGlvbiBjb21tYW5kMSAgICA7IFRIRU4gcGFydAorICBFTFNFIGNv bW1hbmQyICAgICAgICAgICAgOyBFTFNFIHBhcnQKKworICAgd2hlcmVhcyBYSUYgd2FzIHJlcXVp cmVkIGlmIGVpdGhlciBwYXJ0IGhhZCBtdWx0aXBsZSBjb21tYW5kczoKKworICBYSUYgY29uZGl0 aW9uIHsgY29tbWFuZCwgY29tbWFuZCwgLi4uIH0gRUxTRSB7IGNvbW1hbmQsIGNvbW1hbmQsIC4u LiB9CisKKyAgIFRoZSBzeW50YWN0aWMgZGlmZmVyZW5jZXMgd2VyZSBwcmltYXJpbHkgdGhhdCBJ RiAvIEVMU0Ugd2FzIHR3bworICAgY29tbWFuZHMgb24gdHdvIHNlcGFyYXRlIGxpbmVzLCB3aGVy ZWFzIFhJRiB3YXMgb25lIGNvbW1hbmQgb24gb25lCisgICBsaW5lLCBhbmQgdGhhdCBYSUYgYWxs b3dlZCAoYW5kIGluIGZhY3QgcmVxdWlyZWQpIGJyYWNlcyBhcm91bmQgaXRzCisgICBjb21tYW5k IGxpc3RzLCB3aGVyZWFzIElGIGRpZCBub3QgYWxsb3cgdGhlbS4KKworICAgRnVydGhlcm1vcmUs IHRoZSBjaGFpbmluZyBvciBuZXN0aW5nIG9mIHBhcnRzIGFuZCBjb25kaXRpb25zIHdhcworICAg aW5jb25zaXN0ZW50LiBGb3IgZXhhbXBsZSwgdGhlIElGIGNvbW1hbmQgY291bGQgYmUgdXNlZCBs aWtlIHRoaXM6CisKKyAgSUYgY29uZGl0aW9uIGNvbW1hbmQKKyAgRUxTRSBJRiBjb25kaXRpb24g Y29tbWFuZAorICBFTFNFIElGIGNvbmRpdGlvbiBjb21tYW5kCisgIEVMU0UgSUYgY29uZGl0aW9u IGNvbW1hbmQKKyAgLi4uCisKKyAgIGJ1dCBYSUYgY291bGQgbm90LiBDLUtlcm1pdCA3LjAgYWNj ZXB0cyB0aGUgb2xkIHN5bnRheCBhbmQgZXhlY3V0ZXMgaXQKKyAgIHRoZSBzYW1lIGFzIHByZXZp b3VzIHZlcnNpb25zLCBidXQgYWxzbyBhY2NlcHRzIGEgbmV3IHVuaWZpZWQgYW5kIG1vcmUKKyAg IGNvbnZlbmllbnQgc3ludGF4OgorCisgICBJRiBjb25kaXRpb24gY29tbWFuZC1saXN0IFsgRUxT RSBjb21tYW5kLWxpc3QgXQorCisgICBvcjoKKworSUYgY29uZGl0aW9uIGNvbW1hbmQtbGlzdAor RUxTRSBjb21tYW5kLWxpc3QKKworICAgaW4gd2hpY2ggdGhlIEVMU0UgcGFydCBpcyBvcHRpb25h bCwgYW5kIHdoZXJlIGNvbW1hbmQtbGlzdCBjYW4gYmUgYQorICAgc2luZ2xlIGNvbW1hbmQgKHdp dGggb3Igd2l0aG91dCBicmFjZXMgYXJvdW5kIGl0KSBvciBhIGxpc3Qgb2YgY29tbWFuZHMKKyAg IGVuY2xvc2VkIGluIGJyYWNlcy4gRXhhbXBsZXM6CisKKyAgIEV4YW1wbGUgMToKKworICBJRiBj b25kaXRpb24geyBjb21tYW5kMSwgY29tbWFuZDIgfSBFTFNFIHsgY29tbWFuZDMsIGNvbW1hbmQ0 IH0KKworICAgRXhhbXBsZSAyIChzYW1lIGFzIEV4YW1wbGUgMSk6CisKKyAgSUYgY29uZGl0aW9u IHsKKyAgICAgY29tbWFuZDEKKyAgICAgY29tbWFuZDIKKyAgfSBFTFNFIHsKKyAgICAgY29tbWFu ZDMKKyAgICAgY29tbWFuZDQKKyAgfQorCisgICBFeGFtcGxlIDMgKHNhbWUgYXMgMSBhbmQgMik6 CisKKyAgSUYgY29uZGl0aW9uIHsKKyAgICAgY29tbWFuZDEKKyAgICAgY29tbWFuZDIKKyAgfQor ICBFTFNFIHsgY29tbWFuZDMsIGNvbW1hbmQ0IH0KKworICAgRXhhbXBsZSA0IChzYW1lIGFzIDEt Myk6CisKKyAgSUYgY29uZGl0aW9uIHsKKyAgICAgY29tbWFuZDEKKyAgICAgY29tbWFuZDIKKyAg fQorICBFTFNFIHsKKyAgICAgY29tbWFuZDMKKyAgICAgY29tbWFuZDQKKyAgfQorCisgICBFeGFt cGxlIDUgKEVMU0UgY2FuIGJlIGZvbGxvd2VkIGJ5IGFub3RoZXIgY29tbWFuZCk6CisKKyAgSUYg Y29uZGl0aW9uMSB7CisgICAgIGNvbW1hbmQxCisgICAgIGNvbW1hbmQyCisgIH0gRUxTRSBJRiBj b25kaXRpb24yIHsKKyAgICAgY29tbWFuZDMKKyAgICAgY29tbWFuZDQKKyAgfSBFTFNFIHsKKyAg ICAgY29tbWFuZDUKKyAgICAgY29tbWFuZDYKKyAgfQorCisgICBFeGFtcGxlIDUgc3VnZ2VzdHMg b3RoZXIgcG9zc2liaWxpdGllczoKKworICBJRiBjb25kaXRpb24geworICAgICBjb21tYW5kMQor ICAgICBjb21tYW5kMgorICB9IEVMU0UgRk9SIHZhcmlhYmxlIGluaXRpYWwgZmluYWwgaW5jcmVt ZW50IHsKKyAgICAgY29tbWFuZDMKKyAgICAgY29tbWFuZDQKKyAgfQorCisgICBBbmQgdGhpcyB0 b28gaXMgcG9zc2libGUsIGV4Y2VwdCBmb3Igc29tZSBub24tb2J2aW91cyBxdW90aW5nCisgICBj b25zaWRlcmF0aW9uczoKKworICBkY2wgXCZhWzZdID0gb25lIHR3byB0aHJlZSBmb3VyIGZpdmUg c2l4CisKKyAgSUYgPCBcJW4gMyB7CisgICAgICBlY2hvIFxcJW4gaXMgdG9vIHNtYWxsOiBcJW4K KyAgfSBFTFNFIEZPUiBcXCVpIDEgXFwlbiAxIHsKKyAgICAgIGVjaG8gXFwlaS4gXFwmYVtcXCVp XQorICB9CisKKyAgIChUaGUgbG9vcCB2YXJpYWJsZSBtdXN0IGJlIHF1b3RlZCBpbiB0aGlzIGNv bnRleHQgdG8gcHJldmVudCBwcmVtYXR1cmUKKyAgIGV2YWx1YXRpb24uKQorCisgICBNYW55IEMg cHJvZ3JhbW1lcnMgcHJlZmVyIHRvIGNvZGUgSUYtRUxTRSwgV0hJTEUsIEZPUiwgYW5kIFNXSVRD SCB3aXRoCisgICB0aGUgYmxvY2stb3BlbiBicmFja2V0IG9uIGl0cyBvd24gbGluZS4gVGhpcyBk b2VzIG5vdCB3b3JrIGluIEtlcm1pdDoKKworICBJRiBjb25kaXRpb24gICAgICAgIDsgVEhJUyBG T1JNQVQgRE9FUyBOT1QgTk9UIFdPUksKKyAgeworICAgICBjb21tYW5kMQorICAgICBjb21tYW5k MgorICB9CisgIEVMU0UKKyAgeworICAgICBjb21tYW5kMworICAgICBjb21tYW5kNAorICB9CisK KyAgIEV4cGxhbmF0aW9uOiB0aGUgS2VybWl0IGNvbW1hbmQgbGFuZ3VhZ2UgaXMgbGluZSBvcmll bnRlZDsgZWFjaCBsaW5lIGlzCisgICBhIGNvbW1hbmQsIGVhY2ggY29tbWFuZCBpcyBhIGxpbmUu IFRoZSBmaXJzdCBsaW5lIGFib3ZlLCBoYXZpbmcgbm8gaGludAorICAgb2YgY29udGludWF0aW9u LCBpcyBhbiBpbmNvbXBsZXRlIGNvbW1hbmQsIHlldCBzeW50YWN0aWNhbGx5IGNvcnJlY3QgLS0K KyAgIGFuIElGIHN0YXRlbWVudCB3aXRoIGFuIGVtcHR5IFRIRU4gcGFydC4gSW50ZXJlc3Rpbmds eSBlbm91Z2gsIHNpbmNlCisgICB0aGUgbmV4dCBsaW5lIGJlZ2lucyB3aXRoICJ7IiBpdCBpcyBh IGJsb2NrIHRoYXQgKGluIFs2MzBdQy1LZXJtaXQgOC4wCisgICBhbmQgbGF0ZXIpIGlzIGEgYmxv Y2sgdGhhdCBpcyBleGVjdXRlZCB1bmNvbmRpdGlvbmFsbHkuIFRodXMgdGhlCisgICBjb21tYW5k cyBpbiB0aGUgVEhFTiBwYXJ0IGFyZSBleGVjdXRlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhl CisgICBjb25kaXRpb24gaXMgdHJ1ZSAtLSBub3Qgd2hhdCB5b3Ugd2FudGVkIQorCisgICBUaGUg bmV3IGJsb2NrIHN5bnRheCB1c2VkIGluIHRoZSBJRiwgV0hJTEUsIEZPUiwgYW5kIFNXSVRDSCBj b21tYW5kcworICAgZW1wbG95cyBjZXJ0YWluIHRyaWNrcyB0byBhbGxvdyBtdWx0aXBsZSBsaW5l cyB0byBiZSB0cmVhdGVkIGFzIGEKKyAgIHNpbmdsZSBsaW5lOgorCisgICAgICogQW55IGxpbmUg ZW5kaW5nIHdpdGggInsiIChpZ25vcmluZyB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cykgbWFya3MK KyAgICAgICB0aGUgYmVnaW5uaW5nIG9mIGEgYmxvY2s7CisgICAgICogQW55IGxpbmUgYmVnaW5u aW5nIHdpdGggIn0iIChpZ25vcmluZyB3aGl0ZXNwYWNlKSBtYXJrcyB0aGUgZW5kIG9mCisgICAg ICAgYSBibG9jazsKKyAgICAgKiBMaW5lIGJyZWFrcyB3aXRoaW4gYSBibG9jayBzZXBhcmF0ZSBj b21tYW5kczsgdGhlIGNvbW1hIGlzIGltcGxpZWQKKyAgICAgICBieSB0aGUgbGluZSBlbmQuCisK KyAgIFRodXM6CisKKyAgSUYgY29uZGl0aW9uIHsKKyAgICAgY29tbWFuZDEKKyAgICAgY29tbWFu ZDIKKyAgfSBFTFNFIHsKKyAgICAgY29tbWFuZDMKKyAgICAgY29tbWFuZDQKKyAgfQorCisgICBp cyAiYXNzZW1ibGVkIiBpbnRvOgorCisgIElGIGNvbmRpdGlvbiB7IGNvbW1hbmQxLCBjb21tYW5k MiB9IEVMU0UgeyBjb21tYW5kMywgY29tbWFuZDQgfQorCisgICBOb3RlIHRoZSBhZGRpdGlvbiBv ZiBjb21tYXMgdG8gc2VwYXJhdGUgY29tbWFuZHMgd2l0aGluIGJsb2Nrcy4gQXMKKyAgIGFsd2F5 cywgaWYgeW91IG5lZWQgY29udGludWUgYSBjb21tYW5kIG9udG8gYWRkaXRpb25hbCBsaW5lcywg eW91IGNhbgorICAgZW5kIHRoZSBjb250aW51ZWQgbGluZXMgd2l0aCB0aGUgY29udGludWF0aW9u IGNoYXJhY3RlciwgIi0iLiBZb3UgY2FuCisgICBhbHNvIGRvIHRoaXMgaWYgeW91IHdhbnQgdG8g cHV0IG9wZW5pbmcgYnJhY2tldHMgb24gdGhlaXIgb3duIGxpbmU6CisKKyAgSUYgY29uZGl0aW9u IC0KKyAgeworICAgICBjb21tYW5kMQorICAgICBjb21tYW5kMgorICB9CisgIEVMU0UgLQorICB7 CisgICAgIGNvbW1hbmQzCisgICAgIGNvbW1hbmQ0CisgIH0KKworICAgIDcuMjAuMi4gQm9vbGVh biBFeHByZXNzaW9ucyAoVGhlIElGL1dISUxFIENvbmRpdGlvbikKKworICAgUHJpb3IgdG8gQy1L ZXJtaXQgNy4wLCB0aGUgSUYgYW5kIFdISUxFIGNvbW1hbmRzIGFjY2VwdGVkIG9ubHkgYSBzaW5n bGUKKyAgIEJvb2xlYW4gKCJ0cnVlIG9yIGZhbHNlIikgYXNzZXJ0aW9uLCBlLmcuICJpZiA+IFwl bSAwIGNvbW1hbmQiIG9yICJpZgorICAgZXhpc3QgZmlsZW5hbWUgY29tbWFuZCIuIFRoZXJlIHdh cyBubyB3YXkgdG8gZm9ybSBCb29sZWFuIGV4cHJlc3Npb25zCisgICBhbmQsIGluIHBhcnRpY3Vs YXIsIG5vdGhpbmcgdGhhdCBhcHByb2FjaGVkIGEgQm9vbGVhbiBPUiBmdW5jdGlvbiAoQU5ECisg ICBjb3VsZCBiZSBzaW11bGF0ZWQgYnkgY29uY2F0ZW5hdGluZyBJRiBzdGF0ZW1lbnRzOiAiaWYg Y29uZGl0aW9uMSBpZgorICAgY29uZGl0aW9uMi4uIikuCisKKyAgIEMtS2VybWl0IDcuMCAoYW5k IEs5NSAxLjEuMTkpIGFsbG93IGdyb3VwaW5nIG9mIEJvb2xlYW4gYXNzZXJ0aW9ucworICAgdXNp bmcgcGFyZW50aGVzZXMgYW5kIGNvbWJpbmluZyB0aGVtIHVzaW5nIEFORCAob3IgJiYpIGFuZCBP UiAob3IgfHwpLgorICAgRWFjaCBvZiB0aGVzZSBvcGVyYXRvcnMgLS0gaW5jbHVkaW5nIHRoZSBw YXJlbnRoZXNlcyAtLSBpcyBhIGZpZWxkIGFuZAorICAgbXVzdCBiZSBzZXQgb2ZmIGJ5IHNwYWNl cy4gQU5EIGhhcyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIE9SLCBOT1QgaGFzCisgICBoaWdoZXIg cHJlY2VkZW5jZSB0aGFuIEFORCwgYnV0IHBhcmVudGhlc2VzIGNhbiBiZSB1c2VkIHRvIGZvcmNl IGFueQorICAgZGVzaXJlZCBvcmRlciBvZiBldmFsdWF0aW9uLiBUaGUgb2xkIHN5bnRheCBpcyBz dGlsbCBhY2NlcHRlZC4KKworICAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKworICBkZWZpbmUg XCV6IDAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRGVmaW5lIHNvbWUgdmFyaWFibGVzCisg IGRlZmluZSBcJW4gMSAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmb3IgdXNlIGluIHRoZSBl eGFtcGxlcy4KKworICBpZiA+IFwlbiBcJXogZWNobyBcJW4gaXMgZ3JlYXRlci4gICAgIDsgT3Jp Z2luYWwgZm9ybWF0IC0gc3RpbGwgYWNjZXB0ZWQuCisgIGlmICggPiBcJW4gXCV6ICkgZWNobyBc JW4gaXMgZ3JlYXRlci4gOyBQYXJlbnRoZXNlcyBtYXkgYmUgdXNlZCBpbiA3LjAuCisgIGlmICgg PiBcJW4gXCV6ICYmIG5vdCA9IFwleiAwICkgLi4uICAgOyBUd28gYXNzZXJ0aW9ucyBjb21iaW5l ZCB3aXRoIEFORC4KKyAgaWYgKCA+IFwlbiBcJXogYW5kIG5vdCA9IFwleiAwICkgLi4uICA7IFNh bWUgYXMgcHJldmlvdXMgKCJhbmQiID0gIiYmIikuCisgIGlmICggPiBcJW4gXCV6IHx8IG5vdCA9 IFwleiAwICkgLi4uICAgOyBUd28gYXNzZXJ0aW9ucyBjb21iaW5lZCB3aXRoIE9SLgorICBpZiAo ID4gXCVuIFwleiBvciBub3QgPSBcJXogMCApIC4uLiAgIDsgU2FtZSBhcyBwcmV2aW91cyAoIm9y IiA9ICJ8fCIpLgorICBpZiAoID4gXCVuIFwleiB8fCAhPSBcJXogMCApIC4uLiAgICAgIDsgRGl0 dG8gKCIhPSIgPSAibm90ID0iKS4KKyAgd2hpbGUgKCAxICkgeyAuLi4gfSAgICAgICAgICAgICAg ICAgICA7IEp1c3QgbGlrZSBDLgorCisgICBOb3RpY2UgdGhlIHNwYWNlcyBhcm91bmQgYWxsIG9w ZXJhdG9ycyBpbmNsdWRpbmcgdGhlIHBhcmVudGhlc2VzIC0tCisgICB0aGVzZSBhcmUgcmVxdWly ZWQuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgc2hvdyBob3cgcGFyZW50aGVzZXMgY2FuIGJlCisg ICB1c2VkIHRvIGFsdGVyIHRoZSBwcmVjZWRlbmNlIG9mIHRoZSBBTkQgYW5kIE9SIG9wZXJhdG9y czoKKworICBpZiAoIGZhbHNlIHx8IGZhbHNlICYmIGZhbHNlIHx8IHRydWUgKSAsLi4gICAgICAg ICA7IFRydWUKKyAgaWYgKCBmYWxzZSB8fCAoIGZhbHNlICYmIGZhbHNlICkgfHwgdHJ1ZSApIC4u LiAgICAgOyBTYW1lIGFzIHByZXZpb3VzCisgIGlmICggKCBmYWxzZSB8fCBmYWxzZSApICYmICgg ZmFsc2UgfHwgdHJ1ZSApICkgLi4uIDsgRmFsc2UKKworICAgU2ltaWxhcmx5IGZvciBOT1Q6CisK KyAgaWYgKCBub3QgdHJ1ZSAmJiBmYWxzZSApIC4uLiAgICAgICAgICA7IEZhbHNlIChOT1QgYmlu ZHMgdG8gVFJVRSBvbmx5KQorICBpZiAoICggbm90IHRydWUgKSAmJiBmYWxzZSApIC4uLiAgICAg IDsgU2FtZSBhcyBwcmV2aW91cworICBpZiAoIG5vdCAoIHRydWUgJiYgZmFsc2UgKSApIC4uLiAg ICAgIDsgVHJ1ZSAoTk9UIGJpbmRzIHRvIChUUlVFICYmIEZBTFNFKSkKKworICAgTm90ZXM6CisK KyAgICAxLiBUaGUgc3ludGF4IG9mIHRoZSBCb29sZWFuIGV4cHJlc3Npb24gaXRzZWxmIGhhcyBu b3QgY2hhbmdlZDsgZWFjaAorICAgICAgIGV4cHJlc3Npb24gYmVnaW5zIHdpdGggYSBrZXl3b3Jk IG9yIHRva2VuIHN1Y2ggYXMgIkVYSVNUIiwgIj4iLCBvcgorICAgICAgICI9IiwgZXRjOyBvcGVy YXRvcnMgc3VjaCBhcyAiPCIsICI9IiwgYW5kICI+IiBkbyBub3QgZ28gYmV0d2VlbgorICAgICAg IHRoZWlyIG9wZXJhbmRzIGJ1dCBwcmVjZWRlIHRoZW0gYXMgYmVmb3JlOyB0aGlzIG1pZ2h0IGJl IGNhbGxlZAorICAgICAgICJyZXZlcnNlIHJldmVyc2UgUG9saXNoIG5vdGF0aW9uIjsgaXQgYWxs b3dzIGRldGVybWluaXN0aWMKKyAgICAgICBvbi10aGUtZmx5IHBhcnNpbmcgb2YgdGhlc2UgZXhw cmVzc2lvbnMgYXQgdGhlIEMtS2VybWl0PiBwcm9tcHQgYXMKKyAgICAgICB3ZWxsIGFzIGluIHNj cmlwdHMsIGFuZCBhbGxvd3MgPy1oZWxwIHRvIGJlIGdpdmVuIGZvciBlYWNoIGl0ZW0KKyAgICAg ICB3aGVuIElGIG9yIFdISUxFIGNvbW1hbmRzIGFyZSB0eXBlZCBhdCB0aGUgcHJvbXB0LgorICAg IDIuIFBhcmVudGhlc2VzIGFyZSByZXF1aXJlZCB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUg Qm9vbGVhbgorICAgICAgIGFzc2VydGlvbi4KKyAgICAzLiBQYXJlbnRoZXNlcyBhcmUgbm90IHJl cXVpcmVkLCBidXQgYXJlIGFsbG93ZWQsIHdoZW4gdGhlcmUgaXMgb25seQorICAgICAgIG9uZSBC b29sZWFuIGFzc2VydGlvbi4KKyAgICA0LiBFdmFsdWF0aW9uIG9mIEJvb2xlYW4gYXNzZXJ0aW9u cyBvY2N1cnMgbGVmdCB0byByaWdodCwgYnV0IHRoZQorICAgICAgIHJlc3VsdGluZyBCb29sZWFu IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGFmdGVyd2FyZHMgYWNjb3JkaW5nIHRvCisgICAgICAg dGhlIHJ1bGVzIG9mIHByZWNlZGVuY2UuIEFsbCBCb29sZWFuIGFzc2VydGlvbnMgYXJlIGFsd2F5 cworICAgICAgIGV2YWx1YXRlZDsgdGhlcmUgaXMgbm8gImVhcmx5IHN0b3BwaW5nIiBwcm9wZXJ0 eSBhbmQgdGhlcmVmb3JlIG5vCisgICAgICAgcXVlc3Rpb24gYWJvdXQgd2hlbiBvciBpZiBzaWRl IGVmZmVjdHMgd2lsbCBvY2N1ciAtLSBpZiBhbnkgQm9vbGVhbgorICAgICAgIGFzc2VydGlvbiBo YXMgc2lkZSBlZmZlY3RzLCB0aGV5IHdpbGwgYWx3YXlzIG9jY3VyLiAoRWFybHkgc3RvcHBpbmcK KyAgICAgICBpcywgaG93ZXZlciwgcG9zc2libGUgd2l0aCB0aGUgWzYzMV1TLUV4cHJlc3Npb24g SUYgaW50cm9kdWNlZCBpbgorICAgICAgIEMtS2VybWl0IDguMC4pCisKKyAgIENvbnN0cnVjdGlv bnMgb2YgYXJiaXRyYXJ5IGNvbXBsZXhpdHkgYXJlIHBvc3NpYmxlLCB3aXRoaW4gcmVhc29uLgor CisgICBBbHNvIHNlZSBbNjMyXVNlY3Rpb24gNy40IGZvciBuZXcgSUYgLyBXSElMRSBjb25kaXRp b25zLgorCisgIDcuMjEuIFNjcmVlbiBGb3JtYXR0aW5nIGFuZCBDdXJzb3IgQ29udHJvbAorCisg ICBDLUtlcm1pdCA3LjAgYWRkcyBhIHNpbXBsZSB3YXkgdG8gY3JlYXRlIGZvcm1hdHRlZCBzY3Jl ZW5zLCB0aGUgU0NSRUVOCisgICBjb21tYW5kOgorCisgICBTQ1JFRU4geyBDTEVBUiwgQ0xFT0ws IE1PVkUtVE8gcm93IFsgY29sdW1uIF0gfQorICAgICAgICAgIFBlcmZvcm1zIHNjcmVlbi1mb3Jt YXR0aW5nIGFjdGlvbnMuIENvcnJlY3Qgb3BlcmF0aW9uIG9mIHRoZXNlCisgICAgICAgICAgY29t bWFuZHMgZGVwZW5kcyBvbiBwcm9wZXIgdGVybWluYWwgc2V0dXAgb24gYm90aCBlbmRzIG9mIHRo ZQorICAgICAgICAgIGNvbm5lY3Rpb24gLS0gbWFpbmx5IHRoYXQgdGhlIGhvc3QgdGVybWluYWwg dHlwZSBpcyBzZXQgdG8gYWdyZWUKKyAgICAgICAgICB3aXRoIHRoZSBraW5kIG9mIHRlcm1pbmFs IG9yIHRoZSBlbXVsYXRpb24geW91IGFyZSB2aWV3aW5nCisgICAgICAgICAgQy1LZXJtaXQgdGhy b3VnaC4gVGhlIFVOSVggdmVyc2lvbiB1c2VzIHRlcm1pbmZvIG9yIHRlcm1jYXAgKG5vdAorICAg ICAgICAgIGN1cnNlcyk7IHRoZSBWTVMgdmVyc2lvbiB1c2VzIFNNRzsgSy05NSB1c2VzIGl0cyBi dWlsdCBpbiBzY3JlZW4KKyAgICAgICAgICBtYW5hZ2VyLgorCisgICBTQ1JFRU4gQ0xFQVIKKyAg ICAgICAgICBNb3ZlcyB0aGUgY3Vyc29yIHRvIGhvbWUgcG9zaXRpb24gYW5kIGNsZWFycyB0aGUg ZW50aXJlIHNjcmVlbi4KKyAgICAgICAgICBTeW5vbnltczogQ0xFQVIgQ09NTUFORC1TQ1JFRU4g QUxMIChLLTk1IG9ubHkpLCBDTFMsIENMRUFSCisgICAgICAgICAgU0NSRUVOLgorCisgICBTQ1JF RU4gQ0xFT0wKKyAgICAgICAgICBDbGVhcnMgZnJvbSB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRp b24gdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICAgICAgICBTeW5vbnltOiBDTEVBUiBDT01N QU5ELVNDUkVFTiBFT0wgKEstOTUgb25seSkKKworICAgU0NSRUVOIE1PVkUtVE8gcm93IGNvbHVt bgorICAgICAgICAgIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGluZGljYXRlZCByb3cgYW5kIGNv bHVtbi4gVGhlIHJvdyBhbmQKKyAgICAgICAgICBjb2x1bW4gbnVtYmVycyBhcmUgMS1iYXNlZCwg c28gb24gYSAyNHg4MCBzY3JlZW4gdGhlIGhvbWUKKyAgICAgICAgICBwb3NpdGlvbiBpcyAxIDEg YW5kIHRoZSBsb3dlciByaWdodCBjb3JuZXIgaXMgMjQgODAuIElmIGEgcm93IG9yCisgICAgICAg ICAgY29sdW1uIG51bWJlciBpcyBnaXZlbiB0aGF0IHRvbyBsYXJnZSBmb3Igd2hhdCBLZXJtaXQg b3IgdGhlCisgICAgICAgICAgb3BlcmF0aW5nIHN5c3RlbSB0aGlua3MgaXMgeW91ciBzY3JlZW4g c2l6ZSwgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgbnVtYmVyIGlzIHN1YnN0aXR1dGVkLgor CisgICBUaGVzZSBlc2NhcGUgc2VxdWVuY2VzIHVzZWQgYnkgdGhlc2UgY29tbWFuZHMgZGVwZW5k cyBvbiB0aGUgcGxhdGZvcm0uCisgICBJbiBVTklYLCB5b3VyIFRFUk0gZW52aXJvbm1lbnQgdmFy aWFibGUgaXMgdXNlZCB0byBxdWVyeSB0aGUKKyAgIHRlcm1pbmZvL3Rlcm1jYXAgZGF0YWJhc2U7 IGlmIHRoZSBxdWVyeSBmYWlscywgQU5TSS9WVDEwMCBzZXF1ZW5jZXMgYXJlCisgICB1c2VkLiBJ biBWTVMsIHRoZSBTTUcgbGlicmFyeSBpcyB1c2VkLCB3aGljaCBzZW5kcyBzZXF1ZW5jZXMgYmFz ZWQgb24KKyAgIHlvdXIgVk1TIHRlcm1pbmFsIHR5cGUuIEs5NSBkb2VzIGl0cyBvd24gc2NyZWVu IGNvbnRyb2wuIE9uIG90aGVyCisgICBwbGF0Zm9ybXMgKHN1Y2ggYXMgQU9TL1ZTLCBWT1MsIGV0 YyksIHNjcmVlbiBmb3JtYXR0aW5nIGlzIG5vdAorICAgc3VwcG9ydGVkLCBhbmQgdGhlIFNDUkVF TiBjb21tYW5kIGRvZXMgbm90aGluZy4KKworICAgVGhlIHRocmVlIFNDUkVFTiBhY3Rpb25zIGNh biBiZSB1c2VkIGluIHNjcmlwdHMgdG8gcHJvZHVjZSBtZW51cywKKyAgIGZvcm1hdHRlZCBzY3Jl ZW5zLCBkeW5hbWljIGRpc3BsYXlzLCBldGMuIFJlbGF0ZWQgdmFyaWFibGVzIGluY2x1ZGU6CisK KyAgXHYodGVybWluYWwpICAgICBUaGUgdHlwZSB0ZXJtaW5hbCBDLUtlcm1pdCB0aGlua3MgeW91 IGhhdmUuCisgIFx2KHJvd3MpICAgICAgICAgVGhlIG51bWJlciBvZiByb3dzIEMtS2VybWl0IHRo aW5rcyB5b3VyIHRlcm1pbmFsIGhhcy4KKyAgXHYoY29sdW1ucykgICAgICBUaGUgbnVtYmVyIG9m IGNvbHVtbnMgQy1LZXJtaXQgdGhpbmtzIHlvdXIgdGVybWluYWwgaGFzLgorCisgICBBbmQgZnVu Y3Rpb25zOgorCisgIFxmc2NybmN1cngoKSAgICAgVGhlIGN1cnJlbnQgWCBjb29yZGluYXRlIG9m IHRoZSBjdXJzb3IgKEstOTUgb25seSkuCisgIFxmc2NybmN1cnkoKSAgICAgVGhlIGN1cnJlbnQg WSBjb29yZGluYXRlIG9mIHRoZSBjdXJzb3IgKEstOTUgb25seSkuCisgIFxmc2NybnN0cih4LHks bikgVGhlIHN0cmluZyBvZiBsZW5ndGggbmF0IHBvc2l0aW9uICh4LHkpIChLLTk1IG9ubHkpLgor CisgICBBbmQgY29tbWFuZHM6CisKKyAgRUNITyBzdHJpbmcgICAgICBXcml0ZXMgc3RyaW5nICsg Q1JMRiBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uCisgIFhFQ0hPIHN0cmluZyAgICAg V3JpdGVzIHN0cmluZyBhdCBjdXJyZW50IGN1cnNvciBwb3NpdGlvbjsgQ1JMRiBub3Qgc3VwcGxp ZWQuCisgIEdFVEMgdiBwcm9tcHQgICAgSXNzdWVzIHByb21wdCwgcmVhZHMgb25lIGNoYXJhY3Rl ciBpbnRvIHZhcmlhYmxlIHYsIG5vIGVjaG8uCisKKyAgIEFuZCBzcGVjaWFsIGNoYXJhY3RlcnM6 CisKKyAgQ3RybC1MICAgICAgICAgICBBdCB0aGUgQy1LZXJtaXQ+IGNvbW1hbmQgcHJvbXB0LCBv ciBpbiBhIEMtS2VybWl0IGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgd29ya3MgbGlrZSBS ZXR1cm4gb3IgRW50ZXIsIGJ1dCBhbHNvIGNsZWFycyB0aGUgc2NyZWVuCisKKyAgIEV4YW1wbGUg MTogQSBtYWNybyB0aGF0IHByaW50cyBhIG1lc3NhZ2UgXCUxIGF0IGN1cnNvciBwb3NpdGlvbgor ICAgKFwlMixcJTMpOgorCisgIGRlZmluZSBNU0cgeworICAgICAgaWYgbm90IGRlZiBcJTMgZGVm IFwlMyAwICAgICAgICAgICAgIDsgRGVmYXVsdCBjb2x1bW4gdG8gMAorICAgICAgaWYgPiBcdihh cmdjKSAyIHNjcmVlbiBtb3ZlIFwlMiBcJTMgIDsgTW92ZSB0byBnaXZlbiByb3cvY29sIChpZiBh bnkpCisgICAgICBzY3JlZW4gY2xlb2wgICAgICAgICAgICAgICAgICAgICAgICAgOyBDbGVhciB0 byBlbmQgb2YgbGluZQorICAgICAgaWYgZGVmIFwlMSB4ZWNobyBcZmNvbnRlbnRzKFwlMSkgICAg IDsgUHJpbnQgbWVzc2FnZSAoaWYgYW55KQorICB9CisKKyAgIEV4YW1wbGUgMjogQSBtYWNybyBw dXQgdGhlIGN1cnNvciBvbiB0aGUgYm90dG9tIHNjcmVlbiBsaW5lLCBsZWZ0CisgICBtYXJnaW46 CisKKyAgZGVmaW5lIEJPVCB7CisgICAgICBzY3JlZW4gbW92ZSBcdihyb3dzKSAwCisgIH0KKwor ICAgRXhhbXBsZSAzOiBBIG1hY3JvIHRvIGNlbnRlciBtZXNzYWdlIFwlMSBvbiBsaW5lIFwlMi4K KworICBkZWZpbmUgQ0VOVEVSIHsKKyAgICAgIGlmIG5vdCBkZWYgXCUyIGRlZiBcJTIgMQorICAg ICAgLlwleCA6Oj0gKFx2KGNvbHMpLVxmbGVuKFwlMSkpLzIKKyAgICAgIG1zZyB7XCUxfSB7XCUy fSB7XCV4fQorICB9CisKKyAgIEV4YW1wbGUgNDogQSBzaW1wbGUgbWVudSAoYnVpbGRpbmcgb24g RXhhbXBsZXMgMS0zKToKKworICBkZWYgXCVjIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsgTWVudSBjaG9pY2UgdmFyaWFibGUKKyAgc2NyZWVuIGNsZWFyICAgICAgICAgICAgICAgICAg ICAgICAgICA7IENsZWFyIHRoZSBzY3JlZW4KKyAgY2VudGVyIHtXZWxjb21lIHRvIFRoaXMgTWVu dX0gMiAgICAgICA7IERpc3BsYXkgdGhlIG1lbnUKKyAgbXNnIHtDaG9pY2VzOn0gNAorICBtc2cg eyAxLiBGaWxlfSA2CisgIG1zZyB7IDIuIEVkaXR9IDcKKyAgbXNnIHsgMy4gRXhpdH0gOAorICB3 aGlsZSAoICE9IFwlYyAzICkgeyAgICAgICAgICAgICAgICAgIDsgUmVhZCBhbmQgdmVyaWZ5IGNo b2ljZQorICAgICAgd2hpbGUgdHJ1ZSB7ICAgICAgICAgICAgICAgICAgICAgIDsgS2VlcCB0cnlp bmcgdGlsbCB3ZSBnZXQgYSBnb29kIG9uZQorICAgICAgICAgIHNjcmVlbiBtb3ZlIDEwICAgICAg ICAgICAgICAgIDsgTW92ZSB0byBsaW5lIDEwCisgICAgICAgICAgc2NyZWVuIGNsZW9sICAgICAg ICAgICAgICAgICAgOyBDbGVhciB0aGlzIGxpbmUKKyAgICAgICAgICBnZXRjIFwlYyB7WW91ciBj aG9pY2U6IH0gICAgICA7IFByb21wdCBhbmQgZ2V0IGFuZCBlY2hvIDEgY2hhcmFjdGVyCisgICAg ICAgICAgeGVjaG8gXCVjCisgICAgICAgICAgaWYgKCBub3QgbnVtZXJpYyBcJWMgKSB7IG1zZyB7 Tm90IG51bWVyaWMgLSAiXCVjIn0gMTIsIGNvbnRpbnVlIH0KKyAgICAgICAgICBpZiAoID49IFwl YyAxICYmIDw9IFwlYyAzICkgYnJlYWsKKyAgICAgICAgICBtc2cge091dCBvZiByYW5nZSAtICJc JWMifSAxMgorICAgICAgfQorICAgICAgc3dpdGNoIFwlYyB7ICAgICAgICAgICAgICAgICAgICAg IDsgVmFsaWQgY2hvaWNlIC0gZXhlY3V0ZSBpdC4KKyAgICAgICAgOjEsIG1zZyB7RmlsaW5nLi4u IH0gMTIsIGJyZWFrCisgICAgICAgIDoyLCBtc2cge0VkaXRpbmcuLi59IDEyLCBicmVhaworICAg ICAgICA6MywgbXNnIHtFeGl0aW5nLi4ufSAxMiwgYnJlYWsKKyAgICAgIH0KKyAgfQorICBlY2hv IEJ5ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgRXhpdCBjaG9zZW4gLSBzYXkgZ29v ZGJ5ZS4KKyAgYm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExlYXZlIGN1 cnNvciBhdCBzY3JlZW4gYm90dG9tLgorICBleGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsgQW5kIGV4aXQuCisKKyAgIFNpbWlsYXIgc2NyaXB0cyBjYW4gd29yayBvdmVyIHRo ZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb247IHN1YnN0aXR1dGUKKyAgIElOUFVUIGFuZCBPVVRQ VVQgZm9yIEdFVEMgYW5kIEVDSE8vWEVDSE8uCisKKyAgNy4yMi4gRXZhbHVhdGluZyBBcml0aG1l dGljIEV4cHJlc3Npb25zCisKKyAgIEEgbmV3IGFyaXRobWV0aWMgb3BlcmF0b3Igd2FzIGFkZGVk IHRvIHRoZSBsaXN0IHJlY29nbml6ZWQgYnkgdGhlCisgICBFVkFMVUFURSBjb21tYW5kLCB0aGUg XGZldmFsKCkgZnVuY3Rpb24sIGFuZCB3aGljaCBjYW4gYWxzbyBiZSB1c2VkCisgICBhbnl3aGVy ZSBlbHNlIGFyaXRobWV0aWMgZXhwcmVzc2lvbnMgYXJlIGFjY2VwdGVkIChudW1lcmljIGNvbW1h bmQKKyAgIGZpZWxkcywgYXJyYXkgc3Vic2NyaXB0cywgZXRjKToKKworICAgUHJlZml4ICIhIgor ICAgICAgICAgIFRoaXMgb3BlcmF0b3IgaW52ZXJ0cyB0aGUgInRydXRoIHZhbHVlIiBvZiB0aGUg bnVtYmVyIG9yCisgICAgICAgICAgYXJpdGhtZXRpYyBleHByZXNzaW9uIHRoYXQgZm9sbG93cy4g SWYgdGhlIHZhbHVlIG9mIHRoZSBvcGVyYW5kCisgICAgICAgICAgaXMgMCwgdGhlIHJlc3VsdCBp cyAxLiBJZiB0aGUgdmFsdWUgaXMgbm9uemVybywgdGhlIHJlc3VsdCBpcyAwLgorCisgICBFeGFt cGxlczoKKworICBzZXQgZXZhbCBvbGQKKyAgZXZhbHVhdGUgMAorICAwCisKKyAgZXZhbHVhdGUg ITAKKyAgMQorCisgIGV2YWx1YXRlICEzCisgIDAKKworICBldmFsdWF0ZSAhKC0zKQorICAwCisK KyAgLlwlYSA9IDEKKyAgLlwlYiA9IDAKKyAgZXZhbHVhdGUgIShcJWF8XCViKQorICAwCisKKyAg ZXZhbHVhdGUgIShcJWEmXCViKQorICAxCisKKyAgZXZhbHVhdGUgISghKFwlYSZcJWIpKQorICAw CisKKyAgIE5vdGUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gUHJlZml4ICEgKGludmVydCB0cnV0 aCB2YWx1ZSkgYW5kIFN1ZmZpeCAhCisgICAoZmFjdG9yaWFsKS4gQWxzbyB0aGUgZGlzdGluY3Rp b24gYmV0d2VlbiBQcmVmaXggISBhbmQgUHJlZml4IH4gKHdoaWNoCisgICBpbnZlcnRzIGFsbCB0 aGUgYml0cyBpbiBpdHMgb3BlcmFuZCkuIEFsc28gbm90ZSB0aGF0IHByZWZpeCBvcGVyYXRvcnMK KyAgICghLCAtLCBhbmQgfikgY2FuIG5vdCBiZSBhZGphY2VudCB1bmxlc3MgeW91IHVzZSBwYXJl bnRoZXNlcyB0bworICAgc2VwYXJhdGUgdGhlbSwgYXMgc2hvd24gaW4gdGhlIGZpbmFsIGV4YW1w bGUgYWJvdmUuCisKKyAgNy4yMy4gRmxvYXRpbmctUG9pbnQgQXJpdGhtZXRpYworCisgICAgIEZv ciBhIG1vcmUgY29udmVuaWVudCB3YXkgb2YgZGVhbGluZyB3aXRoIGZsb2F0aW5nLXBvaW50IG51 bWJlcnMKKyAgICAgdGhhbiB0aGUgb25lIGRlc2NyaWJlZCBoZXJlLCBzZWUgdGhlIFs2MzNdQy1L ZXJtaXQgOC4wIHVwZGF0ZSBub3RlcywKKyAgICAgdGhlIHNlY3Rpb24gb24gWzYzNF1TLUV4cHJl c3Npb25zLgorCisgICBDLUtlcm1pdCA3LjAgYWRkcyBsaW1pdGVkIHN1cHBvcnQgZm9yIGZsb2F0 aW5nLXBvaW50IG51bWJlcnMgKG51bWJlcnMKKyAgIHRoYXQgaGF2ZSBmcmFjdGlvbmFsIHBhcnRz LCBsaWtlIDMuMTQxNTkyNjUzKS4gVGhpcyBzdXBwb3J0IGlzIHByb3ZpZGVkCisgICB0aHJvdWdo IGEgc21hbGwgcmVwZXJ0b2lyZSBvZiBmdW5jdGlvbnMgYW5kIGluIEJvb2xlYW4gZXhwcmVzc2lv bnMgdGhhdAorICAgY29tcGFyZSBudW1iZXJzLCBidXQgZG9lcyBub3QgYXBwbHkgdG8gbnVtYmVy IHBhcnNpbmcgaW4gZ2VuZXJhbCwgb3IgdG8KKyAgIGV4cHJlc3Npb24gZXZhbHVhdGlvbiwgYXJy YXkgc3Vic2NyaXB0cywgdGhlIElOQ1JFTUVOVCBhbmQgREVDUkVNRU5UCisgICBjb21tYW5kcywg b3IgaW4gYW55IGNvbnRleHQgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQgaW4gdGhpcyBzZWN0aW9u LgorCisgICBBIGZsb2F0aW5nIHBvaW50IG51bWJlciBoYXMgYW4gb3B0aW9uYWwgc2lnbiAoKyBv ciAtKSwgZm9sbG93ZWQgYnkgYQorICAgc2VyaWVzIG9mIGRlY2ltYWwgZGlnaXRzIGNvbnRhaW5p bmcgZWl0aGVyIHplcm8gb3Igb25lIHBlcmlvZCAoLikKKyAgIGNoYXJhY3Rlciwgd2hpY2ggaXMg dGhlIGRlY2ltYWwgcG9pbnQuIFRoZSB1c2Ugb2YgY29tbWEgb3IgYW55IG90aGVyCisgICBjaGFy YWN0ZXIgYmVzaWRlcyBwZXJpb2QgYXMgYSBkZWNpbWFsIHBvaW50IGlzIG5vdCBzdXBwb3J0ZWQu CisgICBTY2llbnRpZmljIG5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZWl0aGVyLiBFeGFtcGxl cyBvZiBsZWdhbAorICAgZmxvYXRpbmctcG9pbnQgbnVtYmVyczoKKworICAwICAgICAgICAgICAg ICAgIEludGVnZXJzIGNhbiBiZSB1c2VkCisgIDEgICAgICAgICAgICAgICAgRGl0dG8KKyAgMi4g ICAgICAgICAgICAgICBBIGRlY2ltYWwgcG9pbnQgd2l0aG91dCBkZWNpbWFsIGRpZ2l0cworICAz LjAgICAgICAgICAgICAgIEEgZGVjaW1hbCBwb2ludCB3aXRoIGRlY2ltYWwgZGlnaXRzCisgIDMu MTQxNTkyNjUzICAgICAgRGl0dG8KKyAtNC4wICAgICAgICAgICAgICBBIG5lZ2F0aXZlIHNpZ24g Y2FuIGJlIGluY2x1ZGVkCisgKzUuMCAgICAgICAgICAgICAgQSBwb3NpdGl2ZSBzaWduIGNhbiBi ZSBpbmNsdWRlZAorCisgICBFeGFtcGxlcyBvZiBub3RhdGlvbnMgdGhhdCBhcmUgbm90IGFjY2Vw dGVkOgorCisgIDEsMDAwLDAwMCAgICAgICAgU2VwYXJhdG9ycyBjYW4gbm90IGJlIHVzZWQKKyAg MS4wMDAuMDAwICAgICAgICBEaXR0byAob3IgbXVsdGlwbGUgZGVjaW1hbCBwb2ludHMpCisgIDYu MDIyMTM3RTIzICAgICAgTm8gc2NpZW50aWZpYyBub3RhdGlvbgorICA2LjYyNjA2ODY4ZS0zNCAg IERpdHRvCisgIDEyLjUrNi4yNSAgICAgICAgTm8gImJhcmUiIGV4cHJlc3Npb25zCisKKyAgIFlv dSBjYW4gdXNlIElGIEZMT0FUIHRlc3QgYSBzdHJpbmcgb3IgdmFyaWFibGUgdG8gc2VlIGlmIGl0 J3MgaW4KKyAgIGFjY2VwdGFibGUgZmxvYXRpbmctcG9pbnQgZm9ybWF0LiBFeGFtcGxlOgorCisg IGFzayBcJWYgeyBUeXBlIGEgbnVtYmVyOiB9CisgIGlmIG5vdCBkZWYgXCVmIC5cJWYgPSAwLjAK KyAgaWYgbm90IGZsb2F0IFwlZiBzdG9wIDEgSW52YWxpZCBmbG9hdGluZy1wb2ludCBudW1iZXI6 ICJcJWYiCisKKyAgIEMtS2VybWl0J3MgZmxvYXRpbmctcG9pbnQgc3VwcG9ydCwgbGlrZSBpdHMg c3VwcG9ydCBmb3Igd2hvbGUgbnVtYmVycworICAgKGludGVnZXJzKSwgcmVsaWVzIG9uIHRoZSBj YXBhYmlsaXRpZXMgb2YgdGhlIHVuZGVybHlpbmcgY29tcHV0ZXIuIFlvdXIKKyAgIGNvbXB1dGVy IGhhcyBvbmx5IGEgbGltaXRlZCBhbW91bnQgb2YgcHJlY2lzaW9uIGZvciBudW1iZXJzLCBkZXBl bmRpbmcKKyAgIG9uIGl0cyBhcmNoaXRlY3R1cmUuIFRodXMgZmxvYXRpbmctcG9pbnQgbnVtYmVy cyB0aGF0IGhhdmUgdG9vIG1hbnkKKyAgIGRpZ2l0cyB3aWxsIG5vdCBiZSBhY2N1cmF0ZTsgYWRk aW5nIGEgdmVyeSBzbWFsbCBudW1iZXIgdG8gYSB2ZXJ5IGxhcmdlCisgICBvbmUgbWlnaHQgaGF2 ZSBubyBlZmZlY3QgYXQgYWxsOyBhbmQgc28gb24uIEZvciBkZXRhaWxzLCByZWFkIGEgdGV4dCBv bgorICAgbnVtZXJpY2FsIGFuYWx5c2lzLiBFeGFtcGxlOgorCisgIC5cJWEgPSAxMTExMTExMTEx MTExMTExMTExMSAgOyBBIGxvbmcgbnVtYmVyCisgIC5cJWIgPSAyMjIyMjIyMjIyMjIyMjIyMjIy MiAgOyBBbm90aGVyIG9uZQorICBlY2hvIFxmZnBhZGQoXCVhLFwlYikgICAgICAgIDsgQWRkIHRo ZW0gLSB0aGUgcmVzdWx0IHNob3VsZCBiZSBhbGwgMydzCisgIDMzMzMzMzMzMzMzMzMzMzMwMDAw LjAgICAgICAgOyBTZWUgdGhlIHJlc3VsdAorCisgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBjb21w dXRlciBoYXMgMTYgZGlnaXRzIG9mIHByZWNpc2lvbjsgYWZ0ZXIgdGhhdCwKKyAgIHRoZSAobG93 LW9yZGVyKSBkaWdpdHMgYXJlIHNldCB0byAwLCBzaW5jZSB0aGUgY29tcHV0ZXIgZG9lc24ndCBr bm93CisgICB3aGF0IHRoZXkgcmVhbGx5IGFyZS4gSW4gZmFjdCwgdGhlIGNvbXB1dGVyIHJldHVy bnMgcmFuZG9tIGRpZ2l0cywgYnV0CisgICBLZXJtaXQgc2V0cyBhbGwgZGlnaXRzIGJleW9uZCB0 aGUgY29tcHV0ZXIncyBwcmVjaXNpb24gdG8gMC4KKworICAgQy1LZXJtaXQncyBmbG9hdGluZy1w b2ludCBmdW5jdGlvbnMgaGF2ZSBuYW1lcyBvZiB0aGUgZm9ybQorICAgIlxmZnB4eHgoYXJncyki ICgiXGYiIGZvciBmdW5jdGlvbiwgImZwIiBmb3IgZmxvYXRpbmctcG9pbnQpLCB3aGVyZQorICAg Inh4eCIgaXMgcmVwbGFjZWQgYnkgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBzdWNoIGFzICJz cXJ0IiwgYW5kCisgICAiYXJncyIgaXMgdGhlIGFyZ3VtZW50IGxpc3QsIGNvbnNpc3Rpbmcgb2Yg b25lIG9yIHR3byBmbG9hdGluZy1wb2ludAorICAgbnVtYmVycyAoZGVwZW5kaW5nIG9uIHRoZSBm dW5jdGlvbiksIGFuZCBhbiBvcHRpb25hbCAiZCIgYXJndW1lbnQgdGhhdAorICAgc2F5cyBub3cg bWFueSBkZWNpbWFsIHBsYWNlcyBzaG91bGQgYmUgc2hvd24gaW4gdGhlIHJlc3VsdC4gRXhhbXBs ZToKKworICBcZmZwZGl2KDEwLDMsMSkgcmV0dXJucyAiMy4zIgorICBcZmZwZGl2KDEwLDMsMikg cmV0dXJucyAiMy4zMyIKKyAgXGZmcGRpdigxMCwzLDMpIHJldHVybnMgIjMuMzMzIgorCisgICBh bmQgc28gb24sIHVwIHRvIHRoZSBwcmVjaXNpb24gb2YgdGhlIGNvbXB1dGVyLiBJZiB0aGUgZGVj aW1hbC1wbGFjZXMKKyAgIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiB6ZXJvLCB0aGUgZnJhY3Rpb25h bCBwYXJ0IG9mIHRoZSByZXN1bHQgaXMKKyAgIHRydW5jYXRlZDoKKworICBcZmZwZGl2KDEwLDMs LTEpIHJldHVybnMgIjMiLgorCisgICBJZiB0aGUgZGVjaW1hbC1wbGFjZXMgYXJndW1lbnQgaXMg MCwgb3IgaXMgb21pdHRlZCwgQy1LZXJtaXQgcmV0dXJucyBhcworICAgbWFueSBkZWNpbWFsIHBs YWNlcyBhcyBhcmUgbWVhbmluZ2Z1bCBpbiB0aGUgY29tcHV0ZXIncyBmbG9hdGluZy1wb2ludAor ICAgcHJlY2lzaW9uLCB0cnVuY2F0aW5nIGFueSBleHRyYW5lb3VzIHRyYWlsaW5nIDAnczoKKwor ICBcZmZwZGl2KDEwLDgpIHJldHVybnMgIjEuMjUiLgorICBcZmZwZGl2KDEwLDQpIHJldHVybnMg IjIuNSIuCisgIFxmZnBkaXYoMTAsMikgcmV0dXJucyAiNS4wIi4KKyAgXGZmcGRpdigxMCwzKSBy ZXR1cm5zICIzLjMzMzMzMzMzMzMzMzMzMyIgKGZvciAxNi1kaWdpdCBwcmVjaXNpb24pLgorCisg ICBUaGVyZSBpcyBubyB3YXkgdG8gcmVxdWVzdCB0aGF0IGEgZmxvYXRpbmctcG9pbnQgZnVuY3Rp b24gcmV0dXJuIGEKKyAgIGRlY2ltYWwgcG9pbnQgYnV0IG5vIGRlY2ltYWwgcGxhY2VzLiBIb3dl dmVyLCB0aGlzIGlzIGVhc3kgZW5vdWdoIHRvCisgICBhY2NvbXBsaXNoIGluIG90aGVyIHdheXMs IGZvciBleGFtcGxlIGJ5IHN1cHBseWluZyBpdCBvdXRzaWRlIHRoZQorICAgZnVuY3Rpb24gY2Fs bDoKKworICBlY2hvIFxmZnBhZGQoXCVhLFwlYiwtMSkuCisKKyAgIEtlcm1pdCdzIGZsb2F0aW5n LXBvaW50IGZ1bmN0aW9ucyBhbHdheXMgcm91bmQgdGhlIHJlc3VsdCBmb3IgdGhlCisgICByZXF1 ZXN0ZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHdoZW4gdGhlICJkIiBhcmd1bWVudCBpcyBn aXZlbiBhbmQKKyAgIGhhcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwIChzZWUgdGhlIGRlc2NyaXB0 aW9uIG9mIFxmZnByb3VuZCgpIGp1c3QKKyAgIGJlbG93KS4KKworICAgRmxvYXRpbmctcG9pbnQg YXJndW1lbnRzIGNhbiBiZSBjb25zdGFudHMgaW4gZmxvYXRpbmctcG9pbnQgZm9ybWF0IG9yCisg ICB2YXJpYWJsZXMgd2hvc2UgdmFsdWVzIGFyZSBmbG9hdGluZy1wb2ludCBudW1iZXJzLiBJZiBh IGZsb2F0aW5nLXBvaW50CisgICBhcmd1bWVudCBpcyBvbWl0dGVkLCBvciBpcyBhIHZhcmlhYmxl IHdpdGggbm8gdmFsdWUsIDAuMCBpcyBzdXBwbGllZAorICAgYXV0b21hdGljYWxseS4gRXhhbXBs ZToKKworICBkZWYgXCV4IDk5OS45OTkKKyAgdW5kZWYgXCV5CisgIGVjaG8gXGZmcG1pbihcJXgs XCV5KQorICAwLjAKKworICAgT3IgZXF1aXZhbGVudGx5OgorCisgIGVjaG8gXGZmcG1pbig5OTku OTk5KQorICAwLjAKKworICAgVGhlIGZsb2F0aW5nLXBvaW50IGZ1bmN0aW9ucyBhcmU6CisKKyAg IFxmZnByb3VuZChmMSxkKQorICAgICAgICAgIFJldHVybnMgZjEgcm91bmRlZCB0byBkIGRlY2lt YWwgcGxhY2VzLiBGb3IgdGhpcyBmdW5jdGlvbiBvbmx5LAorICAgICAgICAgIGQgPSAwIChvciBk IG9taXR0ZWQpIGhhcyBhIHNwZWNpYWwgbWVhbmluZzogcmV0dXJuIHRoZSBpbnRlZ2VyCisgICAg ICAgICAgcGFydCBvZiBmMSByb3VuZGVkIGFjY29yZGluZyB0byB0aGUgZnJhY3Rpb25hbCBwYXJ0 LiBFeGFtcGxlczoKKworICBcZmZwcm91bmQoMi43NDY1MywtMSkgcmV0dXJucyAiMiIgKGZyYWN0 aW9uIHRydW5jYXRlZCwgbm8gcm91bmRpbmcpLgorICBcZmZwcm91bmQoMi43NDY1MywwKSAgcmV0 dXJucyAiMyIgKGludGVnZXIgcGFydCBpcyByb3VuZGVkKS4KKyAgXGZmcHJvdW5kKDIuNzQ2NTMp ICAgIHJldHVybnMgIjMiIChkIG9taXR0ZWQgc2FtZSBhcyBkID0gMCkuCisgIFxmZnByb3VuZCgy Ljc0NjUzLDEpICByZXR1cm5zICIyLjciLgorICBcZmZwcm91bmQoMi43NDY1MywyKSAgcmV0dXJu cyAiMi43NSIuCisgIFxmZnByb3VuZCgyLjc0NjUzLDMpICByZXR1cm5zICIyLjc0NyIuCisgIFxm ZnByb3VuZCgyLjc0NjUzLDQpICByZXR1cm5zICIyLjc0NjUiLCBldGMuCisKKyAgIFxmZnBhZGQo ZjEsZjIsZCkKKyAgICAgICAgICBSZXR1cm5zIHRoZSBzdW0gb2YgZjEgYW5kIGYyLgorCisgICBc ZmZwc3VidHJhY3QoZjEsZjIsZCkKKyAgICAgICAgICBTdWJ0cmFjdHMgZjIgZnJvbSBmMSBhbmQg cmV0dXJucyB0aGUgcmVzdWx0LgorCisgICBcZmZwbXVsdGlwbHkoZjEsZjIsZCkKKyAgICAgICAg ICBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIGYxIGFuZCBmMi4KKworICAgXGZmcGRpdmlkZShmMSxm MixkKQorICAgICAgICAgIElmIGYyIGlzIG5vdCAwLCBkaXZpZGVzIGYxIGJ5IGYyIGFuZCByZXR1 cm5zIHRoZSBxdW90aWVudC4KKyAgICAgICAgICBJZiBmMiBpcyAwLCBhIERJVklERV9CWV9aRVJP IGVycm9yIG9jY3Vycy4KKworICAgXGZmcHJhaXNlKGYxLGYyLGQpCisgICAgICAgICAgSWYgZjEg PSAwIGFuZCBmMiA8PSAwLCBvciBpZiBmMSA8IDAgYW5kIGYyIGhhcyBhIGZyYWN0aW9uYWwKKyAg ICAgICAgICBwYXJ0LCBhbiBBUkdfT1VUX09GX1JBTkdFIGVycm9yIG9jY3Vyczsgb3RoZXJ3aXNl IGYxIHJhaXNlZCB0bworICAgICAgICAgIHRoZSBmMiBwb3dlciBpcyByZXR1cm5lZC4KKworICAg XGZmcHNxcnQoZjEsZCkKKyAgICAgICAgICBJZiBmMSA+PSAwLCByZXR1cm5zIHRoZSBzcXVhcmUg cm9vdCBvZiBmMTsgb3RoZXJ3aXNlCisgICAgICAgICAgQVJHX09VVF9PRl9SQU5HRS4KKworICAg XGZmcGFic29sdXRlKGYxLGQpCisgICAgICAgICAgUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUg b2YgZjEgKGkuZS4gZjEgd2l0aG91dCBhIHNpZ24pLiBUaGlzCisgICAgICAgICAgaXMgdGhlIGZs b2F0aW5nLXBvaW50IGFuYWxvZyBvZiBcZmFic29sdXRlKG4xKS4KKworICAgXGZmcGludChmMSkK KyAgICAgICAgICBSZXR1cm5zIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZjEuIEVxdWl2YWxlbnQgdG8g XGZmcHJvdW5kKGYxLC0xKS4KKworICAgXGZmcGV4cChmMSxkKQorICAgICAgICAgIFRoZSBiYXNl IG9mIG5hdHVyYWwgbG9nYXJpdGhtcywgZSAoMi43MTgyODIuLi4pLCByYWlzZWQgdG8gdGhlCisg ICAgICAgICAgZjEgcG93ZXIuCisKKyAgIFxmZnBsb2duKGYxLGQpCisgICAgICAgICAgVGhlIG5h dHVyYWwgbG9nYXJpdGhtIG9mIGYxICh0aGUgcG93ZXIgdG8gd2hpY2ggZSBtdXN0IGJlIHJhaXNl ZAorICAgICAgICAgIHRvIG9idGFpbiBmMSkuCisKKyAgIFxmZnBsb2cxMChmMSxkKQorICAgICAg ICAgIFRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBmMSAodGhlIHBvd2VyIHRvIHdoaWNoIDEwIG11 c3QgYmUKKyAgICAgICAgICByYWlzZWQgdG8gb2J0YWluIGYxKS4KKworICAgXGZmcG1vZHVsdXMo ZjEsZjIsZCkKKyAgICAgICAgICBJZiBmMiBpcyBub3QgMCwgdGhlIHJlbWFpbmRlciBhZnRlciBk aXZpZGluZyBmMSBieSBmMi4KKyAgICAgICAgICBJZiBmMiBpcyAwLCBhIERJVklERV9CWV9aRVJP IGVycm9yIG9jY3Vycy4KKyAgICAgICAgICBUaGlzIGlzIHRoZSBmbG9hdGluZy1wb2ludCBhbmFs b2cgb2YgXGZtb2QobjEsbjIpLgorCisgICBcZmZwbWF4aW11bShmMSxmMixkKQorICAgICAgICAg IFJldHVybnMgdGhlIG1heGltdW0gb2YgZjEgYW5kIGYyLiBUaGlzIGlzIHRoZSBmbG9hdGluZy1w b2ludAorICAgICAgICAgIGFuYWxvZyBvZiBcZm1heChuMSxuMikuCisKKyAgIFxmZnBtaW5pbXVt KGYxLGYyLGQpCisgICAgICAgICAgUmV0dXJucyB0aGUgbWluaW11bSBvZiBmMSBhbmQgZjIuIFRo aXMgaXMgdGhlIGZsb2F0aW5nLXBvaW50CisgICAgICAgICAgYW5hbG9nIG9mIFxmbWluKG4xLG4y KS4KKworICAgXGZmcHNpbmUoZjEsZCkKKyAgICAgICAgICBSZXR1cm5zIHRoZSBzaW5lIG9mIGYx IHJhZGlhbnMuCisKKyAgIFxmZnBjb3NpbmUoZjEsZCkKKyAgICAgICAgICBSZXR1cm5zIHRoZSBj b3NpbmUgb2YgZjEgcmFkaWFucy4KKworICAgXGZmcHRhbmdlbnQoZjEsZCkKKyAgICAgICAgICBS ZXR1cm5zIHRoZSB0YW5nZW50IG9mIGYxIHJhZGlhbnMuCisKKyAgIE5vdGUgdGhhdCBhbGwgb2Yg dGhlc2UgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHdpdGggaW50ZWdlciBhcmd1bWVudHMuIElmCisg ICB5b3Ugd2FudCBhbiBpbnRlZ2VyIHJlc3VsdCwgc3BlY2lmeSBkID0gLTEgKHRvIHRydW5jYXRl KSBvciBmZWVkIHRoZQorICAgcmVzdWx0IHRvIFxmZnByb3VuZCh4eHgsMCkgKHRvIHJvdW5kKS4K KworICAgRmxvYXRpbmctcG9pbnQgbnVtYmVycyAob3IgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyB0 aGF0IHJldHVybiB0aGVtKSBjYW4KKyAgIGJlIHVzZWQgaW4gQm9vbGVhbiBleHByZXNzaW9ucyAo c2VlIFs2MzVdU2VjdGlvbiA3LjIwLjIpIHRoYXQgY29tcGFyZQorICAgbnVtYmVyczoKKworICA9 IHggeQorICAhPSB4IHkKKyAgPCB4IHkKKyAgPiB4IHkKKyAgPD0geCB5CisgID49IHggeQorCisg ICBJbiB0aGVzZSBleGFtcGxlcywgeCBhbmQgeSBjYW4gYmUgZWl0aGVyIGludGVnZXJzIG9yIGZs b2F0aW5nLXBvaW50CisgICBudW1iZXJzIGluIGFueSBjb21iaW5hdGlvbi4gSW4gYW4gYXJpdGht ZXRpYyBjb21wYXJpc29uIG9mIGFuIGludGVnZXIKKyAgIGFuZCBhIGZsb2F0aW5nLXBvaW50IG51 bWJlciwgdGhlIGludGVnZXIgaXMgY29udmVydGVkIHRvIGZsb2F0aW5nLXBvaW50CisgICBiZWZv cmUgdGhlIGNvbXBhcmlzb24gaXMgbWFkZS4gRXhhbXBsZXM6CisKKyAgLlwldCA9IDMuMDAwMDAw MDAwCisgIC5cJWYgPSAzLjE0MTU5MjY1MworICAuXCVpID0gMworCisgIGlmID4gXCVmIFwlaSBl Y2hvIFBpIGlzIGdyZWF0ZXIuCisgIGlmID0gXCV0IFwlaSBlY2hvICJcJWkiID0gIlwldCIuCisK KyAgIEEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGNhbiBhbHNvIGJlIHVzZWQgaW46CisKKyAgSUYg bnVtYmVyIGNvbW1hbmQKKworICAgd2hlcmUgdGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgaWYgdGhl IG51bWJlciBpcyBub256ZXJvLiBJZiB0aGUgbnVtYmVyCisgICBpcyBmbG9hdGluZy1wb2ludCwg dGhlIGNvbW1hbmQgaXMgbm90IGV4ZWN1dGVkIGlmIHRoZSBudW1iZXIgaXMgMC4wLAorICAgYW5k IGlzIGV4ZWN1dGVkIG90aGVyd2lzZS4KKworICAgRmxvYXRpbmctcG9pbnQgbnVtYmVycyBjYW4g YmUgc29ydGVkIHVzaW5nIEFSUkFZIFNPUlQgL05VTUVSSUMgKHNlZQorICAgWzYzNl1TZWN0aW9u IDcuMTAuNSApLgorCisgICBUd28gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzIGFyZSBwcm92aWRl ZDoKKworICBcdihtYXRoX3BpKSA9IFBpICgzLjE0MTU5MjY1My4uLikKKyAgXHYobWF0aF9lKSAg PSBlLCB0aGUgYmFzZSBvZiBuYXR1cmFsIGxvZ2FyaXRobXMgKDIuNzE4MjguLi4pCisKKyAgIFRo ZXNlIGFyZSBnaXZlbiB0byB0aGUgY29tcHV0ZXIncyBwcmVjaXNpb24sIGUuZy4gMTYgZGlnaXRz LiBUaGlzCisgICBudW1iZXIgaXRzZWxmIGlzIGF2YWlsYWJsZSBpbiBhIHZhcmlhYmxlOgorCisg ICBcdihtYXRoX3ByZWNpc2lvbikKKyAgICAgICAgICBIb3cgbWFueSBzaWduaWZpY2FudCBkaWdp dHMgaW4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCisKKyAgNy4yNC4gVHJhY2luZyBTY3JpcHQg RXhlY3V0aW9uCisKKyAgIFRoZSBUUkFDRSBjb21tYW5kIGlzIGhhbmR5IGZvciBkZWJ1Z2dpbmcg c2NyaXB0cy4KKworICAgVFJBQ0UgWyB7IC9PTiwgL09GRiB9IF0gWyB7IEFTU0lHTk1FTlRTLCBD T01NQU5ELUxFVkVMLCBBTEwgfSBdCisgICAgICAgICAgU2VsZWN0cyB0cmFjaW5nIG9mIHRoZSBn aXZlbiBvYmplY3QuCisKKyAgIE9wdGlvbmFsIHN3aXRjaGVzIGFyZSAvT04gYW5kIC9PRkYuIElm IG5vIHN3aXRjaCBpcyBnaXZlbiwgL09OIGlzCisgICBpbXBsaWVkLiBUaGUgdHJhY2Ugb2JqZWN0 cyBhcmUgQVNTSUdOTUVOVFMsIENPTU1BTkQtTEVWRUwsIGFuZCBBTEwuIFRoZQorICAgZGVmYXVs dCBvYmplY3QgaXMgQUxMLCBtZWFuaW5nIHRvIHNlbGVjdCBhbGwgdHJhY2Ugb2JqZWN0cyAoYmVz aWRlcworICAgQUxMKS4gVGh1cyBUUkFDRSBieSBpdHNlbGYgc2VsZWN0cyB0cmFjaW5nIG9mIGV2 ZXJ5dGhpbmcsIGFzIGRvZXMgVFJBQ0UKKyAgIC9PTiwgYW5kIFRSQUNFIC9PRkYgdHVybnMgb2Zm IGFsbCB0cmFjaW5nLgorCisgICBXaGVuIHRyYWNpbmcgb2YgQVNTSUdOTUVOVFMgaXMgb24sIGV2 ZXJ5IHRpbWUgdGhlIHZhbHVlIG9mIGFueQorICAgdXNlci1kZWZpbmVkIHZhcmlhYmxlIG9yIG1h Y3JvIGNoYW5nZXMsIEMtS2VybWl0IHByaW50cyBvbmUgb2YgdGhlCisgICBmb2xsb3dpbmc6CisK KyAgID4+PiBuYW1lOiAidmFsdWUiCisgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxl IG9yIG1hY3JvIGZvbGxvd2VkIGJ5IHRoZSBuZXcgdmFsdWUgaW4KKyAgICAgICAgICBxdW90ZXMu IFRoaXMgaW5jbHVkZXMgaW1wbGljaXQgbWFjcm8tcGFyYW1ldGVyIGFzc2lnbm1lbnRzCisgICAg ICAgICAgZHVyaW5nIG1hY3JvIGludm9jYXRpb24uCisKKyAgID4+PiBuYW1lOiAodW5kZWYpCisg ICAgICAgICAgVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgdmFyaWFibGUgb3IgbWFjcm8gaGFzIGJl ZW4gdW5kZWZpbmVkLgorCisgICA8PDwgbmFtZTogInZhbHVlIgorICAgICAgICAgIEZvciBSRVRV Uk4gc3RhdGVtZW50czogdGhlIG5hbWUgb2YgdGhlIG1hY3JvIGFuZCB0aGUgcmV0dXJuCisgICAg ICAgICAgdmFsdWUuCisKKyAgIDw8PCBuYW1lOiAobnVsbCkKKyAgICAgICAgICBGb3IgUkVUVVJO IHN0YXRlbWVudHMgdGhhdCBpbmNsdWRlIG5vIHZhbHVlIG9yIGFuIGVtcHR5IHZhbHVlLgorCisg ICBXaGVuIHRyYWNpbmcgb2YgQ09NTUFORC1MRVZFTCBpcyBvbiwgQy1LZXJtaXQgcHJpbnRzOgor CisgICBbbl0gK0Y6ICJuYW1lIgorICAgICAgICAgIFdoZW5ldmVyIGEgY29tbWFuZCBmaWxlIGlz IGVudGVyZWQsIHdoZXJlICJuIiBpcyB0aGUgY29tbWFuZAorICAgICAgICAgIGxldmVsICgwID0g dG9wKTsgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgZmlsZSBpcyBzaG93biBpbgorICAgICAgICAg IHF1b3Rlcy4KKworICAgW25dICtNOiAibmFtZSIKKyAgICAgICAgICBXaGVuZXZlciBhIG1hY3Jv IGlzIGVudGVyZWQ7ICJuIiBpcyB0aGUgY29tbWFuZCBsZXZlbC4gVGhlIG5hbWUKKyAgICAgICAg ICBvZiB0aGUgbWFjcm8gaXMgc2hvd24gaW4gcXVvdGVzLgorCisgICBbbl0gLUY6ICJuYW1lIgor ICAgICAgICAgIFdoZW5ldmVyIGEgY29tbWFuZCBmaWxlIGlzIHJlZW50ZXJlZCBmcm9tIGJlbG93 LCB3aGVuIGEgbWFjcm8gb3IKKyAgICAgICAgICBjb21tYW5kIGZpbGUgdGhhdCBpdCBoYXMgaW52 b2tlZCBoYXMgcmV0dXJuZWQuCisKKyAgIFtuXSAtTTogIm5hbWUiCisgICAgICAgICAgV2hlbmV2 ZXIgYSBtYWNybyBpcyByZWVudGVyZWQgZnJvbSBiZWxvdy4KKworICAgRm9yIG90aGVyIGRlYnVn Z2luZyB0b29scywgc2VlIFNIT1cgQVJHUywgU0hPVyBTVEFDSywgU0VUIFRBS0UsIFNFVAorICAg TUFDUk8sIGFuZCBvZiBjb3Vyc2UsIEVDSE8uCisKKyAgNy4yNS4gQ29tcGFjdCBTdWJzdHJpbmcg Tm90YXRpb24KKworICAgSXQgaXMgb2Z0ZW4gZGVzaXJhYmxlIHRvIGV4dHJhY3QgYSBzdWJzdHJp bmcgZnJvbSBhIHN0cmluZyB3aGljaCBpcworICAgc3RvcmVkIGluIGEgdmFyaWFibGUsIGFuZCBm b3IgdGhpcyB3ZSBoYXZlIHRoZSBcZnN1YnN0cmluZygpIGZ1bmN0aW9uLAorICAgd2hpY2ggaXMg dXNlZCBsaWtlIHRoaXM6CisKKyAgZGVmaW5lIFwlYSAxMjM0NTY3ODkwCisgIGVjaG8gXGZzdWJz dHJpbmcoXCVhLDMsNCkgOyBzdWJzdHJpbmcgZnJvbSAzcmQgY2hhcmFjdGVyIGxlbmd0aCA0Cisg IDM0NTYKKworICAgb3IgbGlrZSB0aGlzIHdpdGggbWFjcm8tbmFtZWQgdmFyaWFibGVzOgorCisg IGRlZmluZSBzdHJpbmcgMTIzNDU2Nzg5MAorICBlY2hvIFxmc3Vic3RyaW5nKFxtKHN0cmluZyks Myw0KQorICAzNDU2CisKKyAgIEMtS2VybWl0IDcuMCBhZGRzIGEgcGFpciBvZiBhbHRlcm5hdGl2 ZSBjb21wYWN0IG5vdGF0aW9uczoKKworXDoodmFyaWFibGVuYW1lW3N0YXJ0Omxlbmd0aF0pICA8 LS0gU3Vic3RyaW5nIG9mIHZhcmlhYmxlJ3MgdmFsdWUKK1xzKG1hY3JvbmFtZVtzdGFydDpsZW5n dGhdKSAgICAgPC0tIFN1YnN0cmluZyBvZiBtYWNybydzIGRlZmluaXRpb24KKworICAgVGhlc2Ug YXJlIGV4YWN0bHkgZXF1aXZhbGVudCB0byB1c2luZyBcZnN1YnN0cmluZygpLCBleGNlcHQgbW9y ZQorICAgY29tcGFjdCB0byB3cml0ZSBhbmQgYWxzbyBmYXN0ZXIgc2luY2UgZXZhbHVhdGlvbiBp cyBpbiBvbmUgc3RlcAorICAgaW5zdGVhZCBvZiB0d28uCisKKyAgIFRoZSAiXDooKSIgbm90YXRp b24gY2FuIGJlIHVzZWQgd2l0aCBhbnkgS2VybWl0IHZhcmlhYmxlLCB0aGF0IGlzLAorICAgYWxt b3N0IGFueXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggYSBiYWNrc2xhc2g6CisKKyAgXDooXCVhWzI6 Nl0pICAgICAgPC0tIGVxdWl2YWxlbnQgdG8gXGZzdWJzdHJpbmcoXCVhLDIsNikKKyAgXDooXCZ4 WzFdWzI6Nl0pICAgPC0tIGVxdWl2YWxlbnQgdG8gXGZzdWJzdHJpbmcoXCZ4WzFdLDIsNikKKyAg XDooXG0oZm9vKVsyOjZdKSAgPC0tIGVxdWl2YWxlbnQgdG8gXGZzdWJzdHJpbmcoXG0oZm9vKSwy LDYpCisgIFw6KFx2KHRpbWUpWzI6Nl0pIDwtLSBlcXVpdmFsZW50IHRvIFxmc3Vic3RyaW5nKFx2 KHRpbWUpLDIsNikKKyAgXDooXCQoVEVSTSlbMjo2XSkgPC0tIGVxdWl2YWxlbnQgdG8gXGZzdWJz dHJpbmcoXCQoVEVSTSksMiw2KQorICBcOihBQkNERUZHSFsyOjZdKSA8LS0gZXF1aXZhbGVudCB0 byBcZnN1YnN0cmluZyhBQkNERUZHSCwyLDYpCisKKyAgIFdoYXRldmVyIGFwcGVhcnMgYmV0d2Vl biB0aGUgbGVmdCBwYXJlbnRoZXNpcyBhbmQgdGhlIGxlZnQgYnJhY2tldCBpcworICAgZXZhbHVh dGVkIGFuZCB0aGVuIHRoZSBpbmRpY2F0ZWQgc3Vic3RyaW5nIG9mIHRoZSByZXN1bHQgaXMgcmV0 dXJuZWQuCisKKyAgIFRoZSAiXHMoKSIgbm90YXRpb24gaXMgdGhlIHNhbWUsIGV4Y2VwdCBhZnRl ciBldmFsdWF0aW5nIHRoZSB2YXJpYWJsZSwKKyAgIHRoZSByZXN1bHQgaXMgdHJlYXRlZCBhcyBh IG1hY3JvIG5hbWUgYW5kIGlzIGxvb2tlZCB1cCBpbiB0aGUgbWFjcm8KKyAgIHRhYmxlLiBUaGVu IHRoZSBpbmRpY2F0ZWQgc3Vic3RyaW5nIG9mIHRoZSBtYWNybyBkZWZpbml0aW9uIGlzCisgICBy ZXR1cm5lZC4gRXhhbXBsZToKKworICBkZWZpbmUgdGVzdGluZyBhYmNkZWZnaGlqa2xtbm9wcXJz dHV2d3h5egorICBkZWZpbmUgXCVhIHRlc3RpbmcKKworICBccyh0ZXN0aW5nWzI6Nl0pICAtLT4g IGJjZGVmZworICBcOih0ZXN0aW5nWzI6Nl0pICAtLT4gIGVzdGluZworICBcOihcJWFbMjo2XSkg ICAgICAtLT4gIGVzdGluZworICBccyhcJWFbMjo2XSkgICAgICAtLT4gIGJjZGVmZworCisgICBO b3RlIHRoYXQgdGhlIGZvbGxvd2luZyB0d28gZXhhbXBsZXMgYXJlIGVxdWl2YWxlbnQ6CisKKyAg XDooXG0oZm9vKVsyOjZdKQorICBccyhmb29bMjo2XSkKKworICAgVGhlIGZpcnN0IG51bWJlciBp biB0aGUgYnJhY2tldHMgaXMgdGhlIDEtYmFzZWQgc3RhcnRpbmcgcG9zaXRpb24uIElmCisgICBp dCBpcyBvbWl0dGVkLCBvciBsZXNzIHRoYW4gMSwgaXQgaXMgdHJlYXRlZCBhcyAxLiBJZiBpdCBp cyBncmVhdGVyCisgICB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgYW4gZW1wdHkgc3Ry aW5nIGlzIHJldHVybmVkLgorCisgICBUaGUgc2Vjb25kIG51bWJlciBpcyB0aGUgbGVuZ3RoIG9m IHRoZSBkZXNpcmVkIHN1YnN0cmluZy4gSWYgdGhlIHNlY29uZAorICAgbnVtYmVyIGlzIG9taXR0 ZWQsIGlzIGxlc3MgdGhhbiAwLCBvciB3b3VsZCBiZSBwYXN0IHRoZSBlbmQgb2YgdGhlCisgICBz dHJpbmcsIHRoZW4gInRocm91Z2ggdGhlIGVuZCBvZiB0aGUgc3RyaW5nIiBpcyBhc3N1bWVkLiBJ ZiBpdCBpcyAwLAorICAgdGhlIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKworICAgSWYgdGhl IGJyYWNrZXRzIGFyZSBlbXB0eSBvciBvbWl0dGVkLCB0aGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJl dHVybmVkLgorCisgICBUaGUgc3RhcnRpbmcgcG9zaXRpb24gYW5kIGxlbmd0aCBuZWVkIG5vdCBi ZSBsaXRlcmFsIG51bWJlcnM7IHRoZXkgY2FuCisgICBhbHNvIGJlIHZhcmlhYmxlcywgZnVuY3Rp b25zLCBhcml0aG1ldGljIGV4cHJlc3Npb25zLCBvciBldmVuIG90aGVyCisgICBccygpIG9yIFw6 KCkgcXVhbnRpdGllczsgYW55dGhpbmcgdGhhdCBldmFsdWF0ZXMgdG8gYSBudW1iZXIsIGZvcgor ICAgZXhhbXBsZToKKworICBccyhibG9ja1sxMDI1OlxmaGV4Mm4oXHMoYmxvY2tbXCViOlwlbis0 XSkpLzJdKQorCisgICBTeW50YWN0aWNhbGx5LCBcbShuYW1lKSBhbmQgXHMobmFtZSkgZGlmZmVy IG9ubHkgaW4gdGhhdCB0aGUgc2VxdWVuY2UKKyAgIFsqXSBhdCB0aGUgZW5kIG9mIHRoZSBuYW1l ICh3aGVyZSAqIGlzIGFueSBzZXF1ZW5jZSBvZiAwIG9yIG1vcmUKKyAgIGNoYXJhY3RlcnMpIGlz IHRyZWF0ZWQgYXMgc3Vic3RyaW5nIG5vdGF0aW9uIGluIFxzKG5hbWUpLCBidXQgaXMKKyAgIGNv bnNpZGVyZWQgcGFydCBvZiB0aGUgbmFtZSBpbiBcbShuYW1lKSAodG8gc2VlIHdoeSwgc2VlIFs2 MzddU2VjdGlvbgorICAgNy4xMC45KS4KKworICA3LjI2LiBOZXcgV0FJVCBDb21tYW5kIE9wdGlv bnMKKworICAgVGhlIFdBSVQgY29tbWFuZCBoYXMgYmVlbiBleHRlbmRlZCB0byBhbGxvdyB3YWl0 aW5nIGZvciBkaWZmZXJlbnQga2luZHMKKyAgIG9mIHRoaW5ncyAoZm9ybWVybHkgaXQgb25seSB3 YWl0ZWQgZm9yIG1vZGVtIHNpZ25hbHMpLiBOb3cgaXQgYWxzbyBjYW4KKyAgIHdhaXQgZm9yIGZp bGUgZXZlbnRzLgorCisgICAgNy4yNi4xLiBXYWl0aW5nIGZvciBNb2RlbSBTaWduYWxzCisKKyAg IFRoZSBwcmV2aW91cyBzeW50YXg6CisKKyAgV0FJVCB0aW1lIHsgQ0QsIERTUiwgUlRTLCBSSSwg Li4uIH0KKworICAgaGFzIGNoYW5nZWQgdG86CisKKyAgV0FJVCB0aW1lIE1PREVNLVNJR05BTFMg eyBDRCwgRFNSLCBSVFMsIFJJLCAuLi4gfQorCisgICBIb3dldmVyLCB0aGUgcHJldmlvdXMgc3lu dGF4IGlzIHN0aWxsIGFjY2VwdGVkLiBUaGUgYmVoYXZpb3IgaXMgdGhlCisgICBzYW1lIGluIGVp dGhlciBjYXNlLgorCisgICAgNy4yNi4yLiBXYWl0aW5nIGZvciBGaWxlIEV2ZW50cworCisgICBU aGUgbmV3IFdBSVQgb3B0aW9uOgorCisgIFdBSVQgdGltZSBGSUxFIHsgQ1JFQVRJT04sIERFTEVU SU9OLCBNT0RJRklDQVRJT04gfSBmaWxlbmFtZQorCisgICBsZXRzIHlvdSB0ZWxsIEtlcm1pdCB0 byB3YWl0IHRoZSBnaXZlbiBhbW91bnQgb2YgdGltZSAob3IgdW50aWwgdGhlCisgICBnaXZlbiB0 aW1lIG9mIGRheSkgZm9yIGEgZmlsZSB3aG9zZSBuYW1lIGlzIGZpbGVuYW1lIHRvIGJlIGNyZWF0 ZWQsCisgICBkZWxldGVkLCBvciBtb2RpZmllZCwgcmVzcGVjdGl2ZWx5LiBUaGUgZmlsZW5hbWUg bWF5IG5vdCBjb250YWluCisgICB3aWxkY2FyZHMuIElmIHRoZSBzcGVjaWZpZWQgZXZlbnQgZG9l cyBub3Qgb2NjdXIgd2l0aGluIHRoZSB0aW1lIGxpbWl0LAorICAgb3IgaWYgV0FJVCBDQU5DRUxM QVRJT04gaXMgT04gYW5kIHlvdSBpbnRlcnJ1cHQgZnJvbSB0aGUga2V5Ym9hcmQKKyAgIGJlZm9y ZSB0aGUgdGltZSBpcyB1cCwgdGhlIFdBSVQgY29tbWFuZCBmYWlscy4gSWYgdGhlIGV2ZW50IGlz CisgICBNT0RJRklDQVRJT04gYW5kIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgY29tbWFu ZCBmYWlscy4gT3RoZXJ3aXNlLAorICAgaWYgdGhlIGdpdmVuIGV2ZW50IG9jY3VycyB3aXRoaW4g dGhlIHRpbWUgbGltaXQsIHRoZSBjb21tYW5kIHN1Y2NlZWRzLgorICAgRXhhbXBsZXM6CisKKyAg IFdBSVQgNjAwIEZJTEUgREVMRVRJT04gb29mYS50bXAKKyAgICAgICAgICBXYWl0IHVwIHRvIDEw IG1pbnV0ZXMgZm9yIGZpbGUgb29mYS50bXAgdG8gZGlzYXBwZWFyLgorCisgICBXQUlUIDIzOjU5 OjU5IEZJTEUgTU9EIG9yZGVycy5kYgorICAgICAgICAgIFdhaXQgdW50aWwganVzdCBiZWZvcmUg bWlkbmlnaHQgZm9yIHRoZSBvcmRlcnMuZGIgZmlsZSB0byBiZQorICAgICAgICAgIGNoYW5nZWQu CisKKyAgIEV4YW1wbGU6IFN1cHBvc2UgeW91IHdhbnQgdG8gaGF2ZSB0aGUgY3VycmVudCBjb3B5 IG9mIC9ldGMvbW90ZCBvbiB5b3VyCisgICBzY3JlZW4gYXQgYWxsIHRpbWVzLCBhbmQgeW91IHdh bnQgdG8gaGVhciBhIGJlbGwgd2hlbmV2ZXIgaXQgY2hhbmdlczoKKworICBkZWYgXCVmIC9ldGMv bW90ZCAgICAgICAgICAgICAgICAgICAgICA7IFRoZSBmaWxlIG9mIGludGVyZXN0LgorICB3aGls ZSAxIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvb3AgZm9yZXZlci4uLgorICAg ICAgY2xzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IENsZWFyIHRoZSBzY3JlZW4u CisgICAgICBlY2hvIFwlZjogXHYoZGF0ZSkgXHYodGltZSkuLi4gICAgIDsgUHJpbnQgMi1saW5l IGhlYWRpbmcuLi4KKyAgICAgIGVjaG8KKyAgICAgIGlmICggbm90IGV4aXN0IFwlZiApIHsgICAg ICAgICAgICAgOyBJZiBmaWxlIGRvZXNuJ3QgZXhpc3QsCisgICAgICAgICAgZWNobyBcJWYgZG9l cyBub3QgZXhpc3QuLi4gICAgIDsgcHJpbnQgbWVzc2FnZSwKKyAgICAgICAgICB3YWl0IDYwMCBm aWxlIGNyZWF0IFwlZiAgICAgICAgOyBhbmQgd2FpdCBmb3IgaXQgdG8gYXBwZWFyLgorICAgICAg ICAgIGNvbnRpbnVlCisgICAgICB9CisgICAgICBiZWVwICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsgU29tZXRoaW5nIG5ldyAtIGJlZXAuCisgICAgICB0eXBlIC9oZWFkOlx2KHJvd3Mt MikgXCVmICAgICAgICAgIDsgRGlzcGxheSB0aGUgZmlsZQorICAgICAgaWYgZmFpbCBleGl0IDEg XCVmOiBcZmVycnN0cmluZygpICA7IChjaGVja2luZyBmb3IgZXJyb3JzKS4KKyAgICAgIHdhaXQg OTk5IGZpbGUgbW9kIFwlZiAgICAgICAgICAgICAgOyBXYWl0IGZvciBpdCB0byBjaGFuZ2UuCisg IH0KKworICAgVGhpcyBub3RpY2VzIHdoZW4gdGhlIGZpbGUgaXMgY3JlYXRlZCwgZGVsZXRlZCwg b3IgbW9kaWZpZWQsIGFuZCBhY3RzCisgICBvbmx5IHRoZW4gKG9yIHdoZW4geW91IGludGVycnVw dCBpdCB3aXRoKTsgdGhlIHRpbWUgc2hvd24gaW4gdGhlCisgICBoZWFkaW5nIGlzIHRoZSB0aW1l IG9mIHRoZSBtb3N0IHJlY2VudCBldmVudCAoaW5jbHVkaW5nIHdoZW4gdGhlCisgICBwcm9ncmFt IHN0YXJ0ZWQpLgorCisgICBTZWUgWzYzOF1TZWN0aW9uIDEuMTAsIHdoZXJlIHRoZSBcdihrYmNo YXIpIHZhcmlhYmxlIGlzIGV4cGxhaW5lZC4gVGhpcworICAgbGV0cyB5b3UgbW9kaWZ5IGEgbG9v cCBsaWtlIHRoZSBvbmUgYWJvdmUgdG8gYWxzbyBhY2NlcHQKKyAgIHNpbmdsZS1jaGFyYWN0ZXIg Y29tbWFuZHMsIHdoaWNoIGludGVycnVwdCB0aGUgV0FJVCwgYW5kIGRpc3BhdGNoCisgICBhY2Nv cmRpbmdseS4gRm9yIGV4YW1wbGU6CisKKyAgd2FpdCA5OTkgZmlsZSBtb2QgXCVmICAgICAgICAg ICAgICA7IFdhaXQgZm9yIHRoZSBmaWxlIHRvIGNoYW5nZS4KKyAgaWYgZGVmaW5lZCBcdihrYmNo YXIpIHsgICAgICAgICAgICA7IEludGVycnVwdGVkIGZyb20ga2V5Ym9hcmQ/CisgICAgICBzd2l0 Y2ggXHYoa2JjaGFyKSB7ICAgICAgICAgICAgOyBIYW5kbGUgdGhlIGtleXN0cm9rZS4uLgorICAg ICAgICA6cSwgZXhpdCAgICAgICAgICAgICAgICAgICAgIDsgUSB0byBRdWl0CisgICAgICAgIDpo LCBlY2hvIGJsYWggYmxhaCwgYnJlYWsgICAgOyBIIGZvciBIZWxwCisgICAgICAgIDpkZWZhdWx0 LCBiZWVwLCBjb250aW51ZSAgICAgOyBBbnl0aGluZyBlbHNlIGJlZXAgYW5kIGlnbm9yZQorICAg ICAgfQorICB9CisKKyAgIFRoaXMgbGV0cyB5b3Ugd3JpdGUgZXZlbnQtZHJpdmVuIGFwcGxpY2F0 aW9ucyB0aGF0IHdhaXQgZm9yIHVwIHRvIHRocmVlCisgICBldmVudHMgYXQgb25jZTogYSBmaWxl IG9yIG1vZGVtIGV2ZW50LCBhIHRpbWVvdXQsIGFuZCBhIGtleXN0cm9rZS4KKworICA3LjI3LiBS ZWxheGVkIEZPUiBhbmQgU1dJVENIIFN5bnRheAorCisgICBGb3IgY29uc2lzdGVuY3kgd2l0aCB0 aGUgZXh0ZW5kZWQgSUYgYW5kIFdISUxFIHN5bnRheCwgdGhlIEZPUiBhbmQKKyAgIFNXSVRDSCBj b250cm9sIGxpc3RzIG1heSAoYnV0IG5lZWQgbm90IGJlKSBlbmNsb3NlZCBpbiBwYXJlbnRoZXNl czoKKworICBGT1IgKCBcJWkgMSBcJW4gMSApIHsgY29tbWFuZC1saXN0Li4uIH0KKyAgU1dJVENI ICggXCVjICkgeyBjb21tYW5kLWxpc3QuLi4gfQorCisgICBJbiB0aGUgRk9SIGNvbW1hbmQsIHRo ZSBpbmNyZW1lbnQgaXRlbSBjYW4gYmUgb21pdHRlZCBpZiB0aGUgY29udHJvbAorICAgbGlzdCBp cyBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcywgaW4gd2hpY2ggY2FzZSB0aGUgaW5jcmVtZW50IGRl ZmF1bHRzCisgICBhcHByb3ByaWF0ZWx5IHRvIDEgb3IgLTEsIGRlcGVuZGluZyBvbiB0aGUgdmFs dWVzIG9mIHRoZSBmaXJzdCB0d28KKyAgIHZhcmlhYmxlcy4KKworICAgQXMgd2l0aCBJRiwgdGhl IHBhcmVudGhlc2VzIGFyb3VuZCB0aGUgRk9SLWNvbW1hbmQgY29udHJvbCBsaXN0IG11c3QgYmUK KyAgIHNldCBvZmYgYnkgc3BhY2VzIChpbiB0aGUgU1dJVENIIGNvbW1hbmQsIHRoZSBzcGFjZXMg YXJlIG5vdCByZXF1aXJlZAorICAgc2luY2UgdGhlIFNXSVRDSCBleHByZXNzaW9uIGlzIGEgc2lu Z2xlIGFyaXRobWV0aWMgZXhwcmVzc2lvbikuCisKKyAgIEFsc28sIG91dGVyIGJyYWNlcyBhcm91 bmQgdGhlIGNvbW1hbmQgbGlzdCBhcmUgc3VwcGxpZWQgYXV0b21hdGljYWxseQorICAgaWYgeW91 IG9taXQgdGhlbSwgZS5nLjoKKworICBGT1IgKCBcJWkgMSAlbiAxICkgZWNobyBcJWkKKworICA4 LiBVU0lORyBPVEhFUiBGSUxFIFRSQU5TRkVSIFBST1RPQ09MUworCisgICBJbiBDLUtlcm1pdCA3 LjAsIGFsdGVybmF0aXZlIHByb3RvY29scyBjYW4gYmUgc2VsZWN0ZWQgdXNpbmcgc3dpdGNoZXMu CisgICBTd2l0Y2hlcyBhcmUgZGVzY3JpYmVkIGluIFs2MzldU2VjdGlvbiAxLjU7IHRoZSB1c2Ug b2YKKyAgIHByb3RvY29sLXNlbGVjdGlvbiBzd2l0Y2hlcyBpcyBkZXNjcmliZWQgaW4gWzY0MF1T ZWN0aW9uIDQuNy4xLgorICAgRXhhbXBsZToKKworICBzZW5kIC9iaW5hcnkgL3Byb3RvY29sOnpt b2RlbSB4LnRhci5negorCisgICBOb3RlIHRoYXQgZmlsZSB0cmFuc2ZlciByZWNvdmVyeSB3b3Jr cyBvbmx5IHdpdGggS2VybWl0IGFuZCBabW9kZW0KKyAgIHByb3RvY29scy4gV2l0aCBabW9kZW0s IHJlY292ZXJ5IGNhbiBiZSBpbml0aWF0ZWQgb25seSBieSB0aGUgc2VuZGVyLgorCisgICBPbmx5 IHByZS0xOTg4IHZlcnNpb25zIG9mIHRoZSBwdWJsaWNseS1kaXN0cmlidXRlZCBzei9yeiBwcm9n cmFtcyB1c2UKKyAgIFN0YW5kYXJkIEkvTzsgdGhvc2UgcmVsZWFzZWQgbGF0ZXIgdGhhbiB0aGF0 IGRvIG5vdCB1c2UgU3RhbmRhcmQgSS9PCisgICBhbmQgdGhlcmVmb3JlIGRvIG5vdCB3b3JrIHdp dGggUkVESVJFQ1QuIEhvd2V2ZXIsIE9tZW4gVGVjaG5vbG9neSBkb2VzCisgICBvZmZlciBhbiB1 cC10by1kYXRlIHJlZGlyZWN0YWJsZSB2ZXJzaW9uIGNhbGxlZCBjcnpzeiwgd2hpY2ggbXVzdCBi ZQorICAgbGljZW5zZWQgZm9yIHVzZToKKworICAgICAiVW5peCBDcnogYW5kIENzeiBzdXBwb3J0 IFhNT0RFTSwgWU1PREVNLCBhbmQgWk1PREVNIHRyYW5zZmVycyB3aGVuCisgICAgIGNhbGxlZCBi eSBkaWFsLW91dCBwcm9ncmFtcyBzdWNoIGFzIEtlcm1pdCBhbmQgY2VydGFpbiB2ZXJzaW9ucyBv ZgorICAgICBjdSgxKS4gVGhleSBhcmUgY2xpZW50cyBkZXNpZ25lZCBmb3IgdGhpcyB1c2UuCisK KyAgICAgIkNyeiBhbmQgQ3N6IGFyZSBDb3B5cmlnaHRlZCBzaGFyZXdhcmUgcHJvZ3JhbXMuIFVz ZSBvZiB0aGVzZQorICAgICBwcm9ncmFtcyBiZXlvbmQgYSBicmllZiBldmFsdWF0aW9uIHBlcmlv ZCByZXF1aXJlcyByZWdpc3RyYXRpb24uCisgICAgIFBsZWFzZSBwcmludCB0aGUgIm1haWxlci5y eiIgZmlsZSwgZmlsbCBvdXQgdGhlIGZvcm0gYW5kIHJldHVybiBzYW1lCisgICAgIHdpdGggeW91 ciByZWdpc3RyYXRpb24uIgorCisgICBUbyB1c2UgdGhlIGNyenN6IHByb2dyYW1zIGFzIHlvdXIg ZXh0ZXJuYWwgWFlaTU9ERU0gcHJvZ3JhbXMgaW4KKyAgIEMtS2VybWl0LCBmb2xsb3cgdGhlIGlu c3RydWN0aW9ucyBpbiB0aGUgYm9vaywgYnV0IHB1dCBhICJjIiBiZWZvcmUKKyAgIGVhY2ggY29t bWFuZCwgZS5nLjoKKworICBzZXQgcHJvdG9jb2wgem1vZGVtIHtjc3ogJXN9IHtjc3ogLWEgJXN9 IGNyeiBjcnogY3J6IGNyegorCisgICBUbyB1c2UgWm1vZGVtIHByb3RvY29sIG92ZXIgVGVsbmV0 IG9yIG90aGVyIG5vbi10cmFuc3BhcmVudAorICAgY29ubmVjdGlvbnMsIHlvdSBtaWdodCBuZWVk IHRvIGFkZCB0aGUgLWUgKEVzY2FwZSkgb3B0aW9uOgorCisgIHNldCBwcm90b2NvbCB6bW9kZW0g e2NzeiAtZSAlc30ge2NzeiAtZSAtYSAlc30gY3J6IGNyeiBjcnogY3J6CisKKyAgOS4gQ09NTUFO RC1MSU5FIE9QVElPTlMKKworICA5LjAuIEV4dGVuZGVkLUZvcm1hdCBDb21tYW5kLUxpbmUgT3B0 aW9ucworCisgICBTdGFuZGFyZCBVTklYIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZSBhIHNpbmds ZSBsZXR0ZXIuIEMtS2VybWl0IGhhcworICAgcnVuIG91dCBvZiBsZXR0ZXJzLCBzbyBuZXcgb3B0 aW9ucyBhcmUgaW4gYSBuZXcgZXh0ZW5kZWQgZm9ybWF0OgorCisgLS13b3JkWzphcmddCisKKyAg IHdoZXJlIGEga2V5d29yZCAocmF0aGVyIHRoYW4gYSBzaW5nbGUgbGV0dGVyKSBzcGVjaWZpZXMg dGhlIGZ1bmN0aW9uLAorICAgYW5kIGlmIGFuIGFyZ3VtZW50IGlzIHRvIGJlIGluY2x1ZGVkLCBp dCBpcyBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAob3IKKyAgIGVxdWFsIHNpZ24pLiBNb3N0IG9mIHRo ZSBuZXcgZXh0ZW5kZWQtZm9ybWF0IGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZQorICAgb25seSBm b3IgdXNlIHdpdGggdGhlIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIERhZW1vbjsgc2VlIHRoZSBb NjQxXUlLU0QKKyAgIEFkbWluaXN0cmF0aW9uIEd1aWRlIGZvciBkZXRhaWxzLiBIb3dldmVyLCBz ZXZlcmFsIG9mIHRoZW0gYXJlIGFsc28KKyAgIGdlbmVyYWwgaW4gbmF0dXJlOgorCisgICAtLW5v aW50ZXJydXB0cworICAgICAgICAgIERpc2FibGVzIGtleWJvYXJkIGludGVycnVwdHMgdGhhdCBh cmUgbm9ybWFsbHkgZW5hYmxlZCwgd2hpY2gKKyAgICAgICAgICBhcmUgdXN1YWxseSBDdHJsLUMg KHRvIGludGVycnVwdCBhIGNvbW1hbmQpIGFuZCBDdHJsLVogKFVOSVgKKyAgICAgICAgICBvbmx5 LCB0byBzdXNwZW5kIEMtS2VybWl0KS4KKworICAgLS1oZWxwCisgICAgICAgICAgTGlzdHMgdGhl IGV4dGVuZGVkIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSBpbgorICAg ICAgICAgIHlvdXIgdmVyc2lvbiBvZiBDLUtlcm1pdC4gSWYgYW55IG9wdGlvbnMgc2VlbSB0byBi ZSBtaXNzaW5nLAorICAgICAgICAgIHRoYXQgaXMgYmVjYXVzZSB5b3VyIGNvcHkgb2YgQy1LZXJt aXQgd2FzIGJ1aWx0IHdpdGgKKyAgICAgICAgICBjb21waWxlLXRpbWUgb3B0aW9ucyB0byBkZXNl bGVjdCB0aGVtLgorCisgICAtLWhlbHBmaWxlOmZpbGVuYW1lCisgICAgICAgICAgU3BlY2lmaWVz IHRoZSBuYW1lIG9mIGEgZmlsZSB0byBiZSBkaXNwbGF5ZWQgaWYgdGhlIHVzZXIgdHlwZXMKKyAg ICAgICAgICBIRUxQIChub3QgZm9sbG93ZWQgYnkgYSBzcGVjaWZpYyBjb21tYW5kIG9yIHRvcGlj KSwgaW4gcGxhY2Ugb2YKKyAgICAgICAgICB0aGUgYnVpbHQtaW4gdG9wLWxldmVsIGhlbHAgdGV4 dC4gVGhlIGZpbGUgbmVlZCBub3QgZml0IG9uIG9uZQorICAgICAgICAgIHNjcmVlbjsgbW9yZS1w cm9tcHRpbmcgaXMgdXNlZCBpZiB0aGUgZmlsZSBpcyBtb3JlIHRoYW4gb25lCisgICAgICAgICAg c2NyZWVuIGxvbmcgaWYgQ09NTUFORCBNT1JFLVBST01QVElORyBpcyBPTiwgYXMgaXQgaXMgYnkK KyAgICAgICAgICBkZWZhdWx0LgorCisgICAtLWJhbm5lcmZpbGU6ZmlsZW5hbWUKKyAgICAgICAg ICBUaGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIG1lc3NhZ2UgdG8gYmUgcHJpbnRlZCBh ZnRlciB0aGUKKyAgICAgICAgICB1c2VyIGxvZ3MgaW4sIGluIHBsYWNlIG9mIHRoZSBub3JtYWwg bWVzc2FnZSAoQ29weXJpZ2h0IG5vdGljZSwKKyAgICAgICAgICAiVHlwZSBIRUxQIG9yID8gZm9y IGhlbHAiLCAiRGVmYXVsdCB0cmFuc2ZlciBtb2RlIGlzLi4uIiwgZXRjKS4KKworICAgLS1jZG1l c3NhZ2U6e29uLG9mZiwwLDEsMn0KKyAgICAgICAgICBGb3IgdXNlIGluIHRoZSBTZXJ2ZXItU2lk ZSBTZXJ2ZXIgY29uZmlndXJhdGlvbjsgd2hlbmV2ZXIgdGhlCisgICAgICAgICAgY2xpZW50IHRl bGxzIHRoZSBzZXJ2ZXIgdG8gY2hhbmdlIGRpcmVjdG9yeSwgdGhlIHNlcnZlciBzZW5kcworICAg ICAgICAgIHRoZSBjb250ZW50cyBvZiBhICJyZWFkIG1lIiBmaWxlIHRvIHRoZSBjbGllbnQncyBz Y3JlZW4uIFRoaXMKKyAgICAgICAgICBmZWF0dXJlIGlzIE9uIGJ5IGRlZmF1bHQsIGFuZCBvcGVy YXRlcyBvbmx5IGluIGNsaWVudC9zZXJ2ZXIKKyAgICAgICAgICBtb2RlIHdoZW4gT04gb3IgMS4g SWYgc2V0IHRvIDIgb3IgaGlnaGVyLCBpdCBhbHNvIG9wZXJhdGVzIHdoZW4KKyAgICAgICAgICB0 aGUgQ0QgY29tbWFuZCBpcyBnaXZlbiBhdCB0aGUgSUtTRD4gcHJvbXB0LiBTeW5vbnltOiAtLWNk bXNnLgorCisgICAtLWNkZmlsZTpmaWxlbmFtZQorICAgICAgICAgIFdoZW4gY2RtZXNzYWdlIGlz IG9uLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSAicmVhZCBtZSIgZmlsZSB0bworICAgICAgICAg IGJlIHNlbnQuIE5vcm1hbGx5IHlvdSB3b3VsZCBzcGVjaWZ5IGEgcmVsYXRpdmUgKG5vdCBhYnNv bHV0ZSkKKyAgICAgICAgICBuYW1lLCBzaW5jZSB0aGUgZmlsZSBpcyBvcGVuZWQgdXNpbmcgdGhl IGxpdGVyYWwgbmFtZSB5b3UKKyAgICAgICAgICBzcGVjaWZpZWQsIGFmdGVyIGNoYW5naW5nIHRv IHRoZSBuZXcgZGlyZWN0b3J5LiBFeGFtcGxlOgorCisgIC0tY2RmaWxlOlJFQUQuTUUKKworICAg ICAgICAgIFlvdSBjYW4gYWxzbyBnaXZlIGEgbGlzdCBvZiB1cCB0byA4IGZpbGVuYW1lcyBieSAo YSkgZW5jbG9zaW5nCisgICAgICAgICAgZWFjaCBmaWxlbmFtZSBpbiBicmFjZXMsIGFuZCAoYikg ZW5jbG9zaW5nIHRoZSBlbnRpcmUgbGlzdCBpbgorICAgICAgICAgIGJyYWNlcy4gRXhhbXBsZToK KyAgICAgICAgICAtLWNkZmlsZTp7ey4vLnJlYWRtZX17UkVBRC5NRX17YWFhcmVhZG1lLnR4dH17 UkVBRE1FfXtyZWFkLXRoaXMtCisgICAgICAgICAgZmlyc3R9fSBXaGVuIGEgbGlzdCBpcyBnaXZl biwgaXQgaXMgc2VhcmNoZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0CisgICAgICAgICAgYW5kIHRoZSBm aXJzdCBmaWxlIGZvdW5kIGlzIGRpc3BsYXllZC4gVGhlIGRlZmF1bHQgbGlzdCBmb3IgVU5JWAor ICAgICAgICAgIGlzOgorCisgIHt7Li8ucmVhZG1lfXtSRUFETUUuVFhUfXtSRUFELk1FfX0KKwor ICA5LjEuIENvbW1hbmQgTGluZSBQZXJzb25hbGl0aWVzCisKKyAgIEJlZ2lubmluZyBpbiB2ZXJz aW9uIDcuMCwgaWYgdGhlIEMtS2VybWl0IGJpbmFyeSBpcyByZW5hbWVkIHRvICJ0ZWxuZXQiCisg ICAob3IgVEVMTkVULkVYRSwgdGVsbmV0LnByLCBldGMsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZv cm0pLCBpdCBhY2NlcHRzCisgICB0aGUgVGVsbmV0IGNvbW1hbmQgbGluZToKKworICB0ZWxuZXQg WyBob3N0IFsgcG9ydCBdIF0KKworICAgSW4gVW5peCwgeW91IGNhbiBhY2hpZXZlIHRoZSBzYW1l IGVmZmVjdCB3aXRoIGEgc3ltbGluazoKKworICBjZCAvdXNyL2JpbgorICBtdiB0ZWxuZXQgb2xk dGVsbmV0CisgIGxuIC1scyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgdGVsbmV0CisKKyAgIFdoZW4g aW5zdGFsbGVkIGluIHRoaXMgbWFubmVyLCBDLUtlcm1pdCBhbHdheXMgcmVhZHMgaXRzIGluaXRp YWxpemF0aW9uCisgICBmaWxlLiBJZiBubyBob3N0IChhbmQgdGhlcmVmb3JlIG5vIHBvcnQpIGlz IGdpdmVuLCBDLUtlcm1pdCBzdGFydHMgaW4KKyAgIGludGVyYWN0aXZlIHByb21wdGluZyBtb2Rl LiBJZiBhIGhvc3QgaXMgZ2l2ZW4gYXMgdGhlIGZpcnN0CisgICBjb21tYW5kLWxpbmUgYXJndW1l bnQsIEMtS2VybWl0IG1ha2VzIGEgY29ubmVjdGlvbiB0byBpdC4gVGhlIGhvc3QKKyAgIGFyZ3Vt ZW50IGNhbiBiZSBhbiBJUCBob3N0IG5hbWUgb3IgYWRkcmVzcywgb3IgdGhlIG5hbWUgb2YgYSBU Q1AvSVAKKyAgIGVudHJ5IGluIHlvdXIgQy1LZXJtaXQgbmV0d29yayBkaXJlY3RvcnkuCisKKyAg IElmIGEgcG9ydCBpcyBnaXZlbiwgaXQgaXMgdXNlZC4gSWYgYSBwb3J0IGlzIG5vdCBnaXZlbiwg dGhlbiBpZiB0aGUKKyAgIGhvc3RuYW1lIHdhcyBmb3VuZCBpbiB5b3VyIG5ldHdvcmsgZGlyZWN0 b3J5IGFuZCBwb3J0IHdhcyBhbHNvIGxpc3RlZAorICAgdGhlcmUsIHRoZW4gdGhhdCBwb3J0IGlz IHVzZWQuIE90aGVyd2lzZSBwb3J0IDIzICh0aGUgVGVsbmV0IHBvcnQpIGlzCisgICB1c2VkLgor CisgICBXaGVuIEMtS2VybWl0IGlzIGNhbGxlZCAidGVsbmV0IiBhbmQgaXQgaXMgaW52b2tlZCB3 aXRoIGEgaG9zdG5hbWUgb24KKyAgIHRoZSBjb21tYW5kIGxpbmUsIGl0IGV4aXRzIGF1dG9tYXRp Y2FsbHkgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgICBXaGlsZSB0aGUgY29ubmVj dGlvbiBpcyBvcGVuLCBob3dldmVyLCB5b3UgbWF5IGVzY2FwZSBiYWNrIGFuZCBmb3J0aCBhcwor ICAgbWFueSB0aW1lcyBhcyB5b3UgbGlrZSwgdHJhbnNmZXIgZmlsZXMsIGV0Yy4KKworICAgQW4g cmxvZ2luIHBlcnNvbmFsaXR5IGlzIGFsc28gYXZhaWxhYmxlLCBidXQgaXQgaXMgbGVzcyB1c2Vm dWwsIGF0CisgICBsZWFzdCBpbiBVTklYIGFuZCBWTVMsIHdoZXJlIHRoZSBSbG9naW4gVENQIHBv cnQgaXMgcHJpdmlsZWdlZC4KKworICAgVGhlIG5ldyB2YXJpYWJsZSBcdihuYW1lKSBpbmRpY2F0 ZXMgdGhlIG5hbWUgd2l0aCB3aGljaCBDLUtlcm1pdCB3YXMKKyAgIGludm9rZWQgKCJrZXJtaXQi LCAid2VybWl0IiwgIms5NSIsICJ0ZWxuZXQiLCBldGMpLgorCisgIDkuMi4gQnVpbHQtaW4gSGVs cCBmb3IgQ29tbWFuZCBMaW5lIE9wdGlvbnMKKworICAgImtlcm1pdCAtaCIsIGdpdmVuIGZyb20g dGhlIHN5c3RlbSBwcm9tcHQsIGxpc3RzIGFzIG1hbnkgY29tbWFuZC1saW5lCisgICBvcHRpb25z IGFzIHdpbGwgZml0IG9uIGEgc3RhbmRhcmQgMjR4ODAgc2NyZWVuLiBGb3IgbW9yZSBjb21wcmVo ZW5zaXZlCisgICBoZWxwLCB1c2UgdGhlIGludGVyYWN0aXZlIEhFTFAgT1BUSU9OUyBjb21tYW5k IHRoYXQgd2FzIGFkZGVkIGluCisgICBDLUtlcm1pdCA3LjA6CisKKyAgIEhFTFAgT1BUSU9OUwor ICAgRXhwbGFpbnMgaG93IGNvbW1hbmQtbGluZSBvcHRpb25zIHdvcmssIHRoZWlyIHN5bnRheCwg ZXRjLgorCisgICBIRUxQIE9QVElPTlMgQUxMCisgICBMaXN0cyBhbGwgY29tbWFuZC1saW5lIG9w dGlvbnMgYW5kIGdpdmVzIGJyaWVmIGhlbHAgYWJvdXQgZWFjaCBvbmUuCisKKyAgIEhFTFAgT1BU SU9OIHgKKyAgIEdpdmVzIGJyaWVmIGhlbHAgYWJvdXQgb3B0aW9uICJ4Ii4KKworICAgSEVMUCBF WFRFTkRFRC1PUFRJT05TCisgICBMaXN0cyB0aGUgYXZhaWxhYmxlIGV4dGVuZGVkLWZvcm1hdCBj b21tYW5kLWxpbmUgb3B0aW9ucy4KKworICAgSEVMUCBFWFRFTkRFRC1PUFRJT04geHh4CisgICBH aXZlcyBoZWxwIGZvciB0aGUgc3BlY2lmaWVkIGV4dGVuZGVkIG9wdGlvbi4KKworICA5LjMuIE5l dyBDb21tYW5kLUxpbmUgT3B0aW9ucworCisgICBDb21tYW5kLWxpbmUgb3B0aW9ucyBhZGRlZCBz aW5jZSBDLUtlcm1pdCA2LjAgYXJlOgorCisgICArCisgICAgICAgICAgKHBsdXMgc2lnbiBieSBp dHNlbGYpOiBUaGUgbmV4dCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIHNjcmlwdAorICAgICAg ICAgIHRvIGV4ZWN1dGU7IGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcmUgaWdub3JlZCBieSBD LUtlcm1pdAorICAgICAgICAgIGl0c2VsZiwgYnV0IHBhc3NlZCB0byB0aGUgc2NyaXB0IGFzIHRv cC1sZXZlbCBjb3BpZXMgb2YgXCUxLAorICAgICAgICAgIFwlMiwgZXRjOyB0aGUgXCZfW10gaXMg YWxzbyBzZXQgYWNjb3JkaW5nbHkuIFwlMCBhbmQgXCZfWzBdCisgICAgICAgICAgYmVjb21lIHRo ZSBuYW1lIG9mIHRoZSBzY3JpcHQgZmlsZSwgcmF0aGVyIHRoYW4gdGhlIHBhdGhuYW1lIG9mCisg ICAgICAgICAgdGhlIEMtS2VybWl0IHByb2dyYW0sIHdoaWNoIGlzIGl0cyBub3JtYWwgdmFsdWUu IFByaW1hcmlseSBmb3IKKyAgICAgICAgICB1c2UgaW4gdGhlIHRvcCBsaW5lIG9mICJLZXJiYW5n IiBzY3JpcHRzIGluIFVOSVggKHNlZQorICAgICAgICAgIFs2NDJdU2VjdGlvbiA3LjE5KS4gRXhh bXBsZSBmcm9tIFVOSVggY29tbWFuZCBsaW5lOgorCisgICQga2VybWl0IFsgcmVndWxhciBrZXJt aXQgYXJncyBdICsgZmlsZW5hbWUKKworICAgICAgICAgIFNhbXBsZSBmaXJzdCBsaW5lIG9mIEtl cmJhbmcgc2NyaXB0OgorCisgICMhL3Vzci9sb2NhbC9iaW4va2VybWl0ICsKKworICAgLS0KKyAg ICAgICAgICAodHdvIGh5cGhlbnMgc3Vycm91bmRlZCBieSB3aGl0ZXNwYWNlKSBFcXVpdmFsZW50 IHRvICI9IiwgZm9yCisgICAgICAgICAgY29tcGF0aWJpbGl0eSB3aXRoIFVOSVggZ2V0b3B0KDEs MykuCisKKyAgIC1HCisgICAgICAgICAgR0VUIChsaWtlIC1nKSwgYnV0IHNlbmQgdGhlIGluY29t aW5nIGZpbGUgdG8gc3RhbmRhcmQgb3V0cHV0LgorICAgICAgICAgIEV4YW1wbGU6ICJrZXJtaXQg LUcgb29mYS50eHQgfCBscHIiIHJldHJpZXZlcyBhIGZpbGUgZnJvbSB5b3VyCisgICAgICAgICAg bG9jYWwgY29tcHV0ZXIgKHByb3ZpZGluZyBpdCBpcyBydW5uaW5nIGEgS2VybWl0IHByb2dyYW0g dGhhdAorICAgICAgICAgIHN1cHBvcnRzIHRoZSBhdXRvZG93bmxvYWQgZmVhdHVyZSBhbmQgaGFz IGl0IGVuYWJsZWQpIGFuZCBwcmludHMKKyAgICAgICAgICBpdC4KKworICAgLU8KKyAgICAgICAg ICBlcXVpdmFsZW50IHRvIC14IChzdGFydCB1cCBpbiBzZXJ2ZXIgbW9kZSksIGJ1dCBleGl0cyBh ZnRlciB0aGUKKyAgICAgICAgICBmaXJzdCBjbGllbnQgY29tbWFuZCBoYXMgYmVlbiBleGVjdXRl ZCAobW5lbW9uaWM6IE8gPSBPbmx5IE9uZSkuCisgICAgICAgICAgVGhpcyBvbmUgaXMgaGFuZHkg cmVwbGFjaW5nICJrZXJtaXQgLXgiIGluIHRoZSAiYXV0b21hdGljYWxseQorICAgICAgICAgIHN0 YXJ0IEtlcm1pdCBvbiB0aGUgb3RoZXIgZW5kIiBzdHJpbmc6CisKKyAgc2V0IHByb3RvY29sIGtl cm1pdCB7a2VybWl0IC1pcn0ge2tlcm1pdCAtcn0ge2tlcm1pdCAteH0KKworICAgICAgICAgIHNp bmNlIC14IGxlYXZlcyB0aGUgcmVtb3RlIEtlcm1pdCBpbiBzZXJ2ZXIgbW9kZSBhZnRlciB0aGUK KyAgICAgICAgICB0cmFuc2Zlciwgd2hpY2ggY2FuIGJlIGNvbmZ1c2luZywgd2hlcmVhcyAtTyBt YWtlcyBpdCBnbyBhd2F5CisgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgdHJhbnNm ZXIuCisKKyAgIC1MCisgICAgICAgICAgUmVjdXJzaXZlLCB3aGVuIHVzZWQgaW4gY29tYmluYXRp b24gd2l0aCAtcyAobW5lbW9uaWM6IEwgPQorICAgICAgICAgIExldmVscykuIEluIFVOSVggb3Ig b3RoZXIgZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBzaGVsbCBleHBhbmRzCisgICAgICAgICAgd2ls ZGNhcmRzIGl0c2VsZiwgdGhlIC1zIGFyZ3VtZW50LCBpZiBpdCBjb250YWlucyB3aWxkY2FyZHMs CisgICAgICAgICAgbXVzdCBiZSBxdW90ZWQgdG8gcHJldmVudCB0aGlzLCBlLmcuOgorCisgIGtl cm1pdCAtTCAtcyAiKi5jIgorCisgICAgICAgICAgSW4gVU5JWCBvbmx5LCAia2VybWl0IC1MIC1z IC4iIG1lYW5zIHRvIHNlbmQgdGhlIGN1cnJlbnQKKyAgICAgICAgICBkaXJlY3RvcnkgdHJlZS4g U2VlIFs2NDNdU2VjdGlvbnMgNC4xMCBhbmQgWzY0NF00LjExIGFib3V0CisgICAgICAgICAgcmVj dXJzaXZlIGZpbGUgdHJhbnNmZXIuCisKKyAgIC1WCisgICAgICAgICAgRXF1aXZhbGVudCB0byBT RVQgRklMRSBQQVRURVJOUyBPRkYgKFs2NDVdU2VjdGlvbiA0LjMpIGFuZCBTRVQKKyAgICAgICAg ICBUUkFOU0ZFUiBNT0RFIE1BTlVBTC4gSW4gb3RoZXIgd29yZHMsIHRha2UgdGhlIEZJTEUgVFlQ RSBzZXR0aW5nCisgICAgICAgICAgbGl0ZXJhbGx5LiBGb3IgZXhhbXBsZSwgImtlcm1pdCAtVlQg b29mYS5iaW4iIG1lYW5zIHNlbmQgdGhlCisgICAgICAgICAgZmlsZSBpbiBUZXh0IG1vZGUsIG5v IG1hdHRlciB3aGF0IGl0cyBuYW1lIGlzIGFuZCBubyBtYXR0ZXIKKyAgICAgICAgICB3aGV0aGVy IGEga2luZHJlZCBzcGlyaXQgaXMgcmVjb2duaXplZCBhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZQor ICAgICAgICAgIGNvbm5lY3Rpb24uCisKKyAgIC0wCisgICAgICAgICAgKGRpZ2l0IHplcm8pIG1l YW5zICJiZSAxMDAlIHRyYW5zcGFyZW50IGluIENPTk5FQ1QgbW9kZSIuIFRoaXMKKyAgICAgICAg ICBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgc2VyaWVzIG9mIGNvbW1hbmRzOiBTRVQg UEFSSVRZCisgICAgICAgICAgTk9ORSwgU0VUIENPTU1BTkQgQllURVNJWkUgOCwgU0VUIFRFUk1J TkFMIEJZVEVTSVpFIDgsIFNFVCBGTE9XCisgICAgICAgICAgTk9ORSwgU0VUIFRFUk0gRVNDQVBF IERJU0FCTEVELCBTRVQgVEVSTSBDSEFSIFRSQU5TUEFSRU5ULCBTRVQKKyAgICAgICAgICBURVJN IEFVVE9ET1dOTE9BRCBPRkYsIFNFVCBURVJNIEFQQyBPRkYsIFNFVCBURUxPUFQgS0VSTUlUCisg ICAgICAgICAgUkVGVVNFIFJFRlVTRS4KKworICAxMC4gQy1LRVJNSVQgQU5EIEctS0VSTUlUCisK KyAgIEV2ZXJ5IG11bHRpZnVuY3Rpb25lZCBhbmQgbG9uZy1saXZlZCBzb2Z0d2FyZSBwcm9ncmFt IGdyb3dzIGluCisgICBjb21wbGV4aXR5IGFuZCBzaXplIG92ZXIgdGltZSB0byBtZWV0IHRoZSBu ZWVkcyBhbmQgcmVxdWVzdHMgb2YgaXRzCisgICB1c2VycyBhbmQgdGhlIGRlbWFuZHMgb2YgdGhl IHVuZGVybHlpbmcgdGVjaG5vbG9neSBhcyBpdCBjaGFuZ2VzLgorCisgICBFdmVudHVhbGx5IHVz ZXJzIGJlZ2luIHRvIG5vdGljZSBob3cgYmlnIHRoZSBhcHBsaWNhdGlvbiBoYXMgZ3Jvd24sIGhv dworICAgbXVjaCBkaXNrIHNwYWNlIGl0IG9jY3VwaWVzLCBob3cgbG9uZyBpdCB0YWtlcyB0byBs b2FkLCBhbmQgdGhleSBzdGFydAorICAgdG8gbG9uZyBmb3IgdGhlIGdvb2Qgb2xkIGRheXMgd2hl biBpdCB3YXMgbGVhbiBhbmQgbWVhbi4gTm90IGxvbmcgYWZ0ZXIKKyAgIHRoYXQgdGhleSBiZWdp biBhc2tpbmcgZm9yIGEgImxpZ2h0IiB2ZXJzaW9uIHRoYXQgb25seSBkb2VzIHRoZSBiYXNpY3MK KyAgIHdpdGggbm8gZnJpbGxzLgorCisgICBBbmQgc28gaXQgaXMgd2l0aCBDLUtlcm1pdC4gQSAi bGlnaHQiIHZlcnNpb24gb2YgS2VybWl0IHdhcyByZWxlYXNlZAorICAgKGZvciBVTklYIG9ubHkp IGluIERlY2VtYmVyIDE5OTkgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlOwor ICAgdGh1cyBpdCBpcyBjYWxsZWQgRy1LZXJtaXQgKGZvciBHTlUgS2VybWl0KS4gQWxsIGl0IGRv ZXMgaXMgc2VuZCBhbmQKKyAgIHJlY2VpdmUgZmlsZXMsIHBlcmlvZC4gWW91IGNhbiBmaW5kIGl0 IGF0OgorCisgIFs2NDZdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2drZXJtaXQuaHRt bAorCisgICBXaGVyZSB0aGUgQy1LZXJtaXQgNy4wIGJpbmFyeSBtaWdodCBiZSBhbnl3aGVyZSBm cm9tIDEgdG8gMyBtaWxsaW9uCisgICBieXRlcyBpbiBzaXplLCB0aGUgRy1LZXJtaXQgYmluYXJ5 IHJhbmdlcyBmcm9tIDMwSyB0byAxMDBLLCBkZXBlbmRpbmcKKyAgIG9uIHRoZSB1bmRlcmx5aW5n IGFyY2hpdGVjdHVyZSAoUklTQyB2cyBDSVNDLCBldGMpLgorCisgICBHLUtlcm1pdCBhbmQgQy1L ZXJtaXQgbWF5IHJlc2lkZSBzaWRlLWJ5LXNpZGUgb24gdGhlIHNhbWUgY29tcHV0ZXIuCisgICBH LUtlcm1pdCBkb2VzIG5vdCBtYWtlIGNvbm5lY3Rpb25zOyBpdCBkb2VzIG5vdCBoYXZlIGEgc2Ny aXB0IGxhbmd1YWdlOworICAgaXQgZG9lcyBub3QgdHJhbnNsYXRlIGNoYXJhY3RlciBzZXRzLiBH LUtlcm1pdCBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mCisgICBDLUtlcm1pdCB3aGVuOgorCisgICAg ICogSXQgaXMgb24gdGhlIHJlbW90ZSBlbmQuCisgICAgICogRmlsZXMgYXJlIHRvIGJlIHRyYW5z ZmVycmVkIGluIGJpbmFyeSBtb2RlIG9yIGluIHRleHQgbW9kZSB3aXRob3V0CisgICAgICAgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbi4KKyAgICAgKiBGaWxlIHRpbWVzdGFtcHMgZG9uJ3QgbmVl ZCB0byBiZSBwcmVzZXJ2ZWQuCisKKyAgIEluIHN1Y2ggY2FzZXMgRy1LZXJtaXQgbWlnaHQgYmUg cHJlZmVycmVkIHNpbmNlIGl0IGdlbmVyYWxseSBzdGFydHMgdXAKKyAgIGZhc3RlciwgYW5kIHll dCB0cmFuc2ZlcnMgZmlsZXMganVzdCBhcyBmYXN0IG9uIG1vc3QgKGJ1dCBub3QKKyAgIG5lY2Vz c2FyaWx5IGFsbCkga2luZHMgb2YgY29ubmVjdGlvbnM7IGZvciBleGFtcGxlLCBpdCBzdXBwb3J0 cworICAgc3RyZWFtaW5nIChbNjQ3XVNlY3Rpb24gNC4yMCkuCisKKyAgIEctS2VybWl0IGlzIGFs c28gaGFuZHkgZm9yIGJvb3RzdHJhcHBpbmcuIEl0IGlzIGVhc2llciB0byBsb2FkIG9uIGEgbmV3 CisgICBjb21wdXRlciB0aGFuIEMtS2VybWl0IC0tIGl0IGZpdHMgb24gYSBmbG9wcHkgZGlza2V0 dGUgd2l0aCBwbGVudHkgb2YKKyAgIHJvb20gdG8gc3BhcmUuIFRodXMgaWYgeW91IGhhdmUgKHNh eSkgYW4gb2xkIFBDIHJ1bm5pbmcgKHNheSkgU0NPIFhlbml4CisgICBhbmQgbm8gbmV0d29yayBj b25uZWN0aW9uLCB5b3UgY2FuIGRvd25sb2FkIHRoZSBYZW5peCB2ZXJzaW9uIG9mCisgICBHLUtl cm1pdCB0byAoc2F5KSBhIERPUyBvciBXaW5kb3dzIFBDLCBjb3B5IGl0IHRvIGRpc2tldHRlLCBy ZWFkIHRoZQorICAgZGlza2V0dGUgb24gWGVuaXggd2l0aCAiZG9zcmVhZCIsIGFuZCB0aGVuIHVz ZSBHLUtlcm1pdCB0byByZWNlaXZlCisgICBDLUtlcm1pdCAod2hpY2ggZG9lcyBub3QgZml0IG9u IGEgZGlza2V0dGUpLiBJZiBkaXNrZXR0ZXMgYXJlbid0IGFuCisgICBvcHRpb24sIG90aGVyIGJv b3RzdHJhcHBpbmcgbWV0aG9kcyBhcmUgcG9zc2libGUgdG9vIC0tIHNlZSB0aGUKKyAgIFs2NDhd Ry1LZXJtaXQgd2ViIHBhZ2UgZm9yIGRldGFpbHMuCisKK0lJSS4gQVBQRU5ESUNFUworCisgIElJ SS4xLiBDaGFyYWN0ZXIgU2V0IFRhYmxlcworCisgICAgSUlJLjEuMS4gVGhlIEhld2xldHQgUGFj a2FyZCBSb21hbjggQ2hhcmFjdGVyIFNldAorCitkZWMgY29sL3JvdyBvY3QgaGV4ICBkZXNjcmlw dGlvbgorMTYwICAxMC8wMCAgMjQwICBBMCAgKFVuZGVmaW5lZCkKKzE2MSAgMTAvMDEgIDI0MSAg QTEgIEEgZ3JhdmUKKzE2MiAgMTAvMDIgIDI0MiAgQTIgIEEgY2lyY3VtZmxleAorMTYzICAxMC8w MyAgMjQzICBBMyAgRSBncmF2ZQorMTY0ICAxMC8wNCAgMjQ0ICBBNCAgRSBjaXJjdW1mbGV4Cisx NjUgIDEwLzA1ICAyNDUgIEE1ICBFIGRpYWVyZXNpcworMTY2ICAxMC8wNiAgMjQ2ICBBNiAgSSBj aXJjdW1mbGV4CisxNjcgIDEwLzA3ICAyNDcgIEE3ICBJIGRpYWVyZXNpcworMTY4ICAxMC8wOCAg MjUwICBBOCAgQWN1dGUgYWNjZW50CisxNjkgIDEwLzA5ICAyNTEgIEE5ICBHcmF2ZSBhY2NlbnQK KzE3MCAgMTAvMTAgIDI1MiAgQUEgIENpcmN1bWZsZXggYWNjZW50CisxNzEgIDEwLzExICAyNTMg IEFCICBEaWFlcmVzaXMKKzE3MiAgMTAvMTIgIDI1NCAgQUMgIFRpbGRlIGFjY2VudAorMTczICAx MC8xMyAgMjU1ICBBRCAgVSBncmF2ZQorMTc0ICAxMC8xNCAgMjU2ICBBRSAgVSBjaXJjdW1mbGV4 CisxNzUgIDEwLzE1ICAyNTcgIEFGICBMaXJhIHN5bWJvbAorMTc2ICAxMS8wMCAgMjYwICBCMCAg VG9wIGJhciAobWFjcm9uKQorMTc3ICAxMS8wMSAgMjYxICBCMSAgWSBhY3V0ZQorMTc4ICAxMS8w MiAgMjYyICBCMiAgeSBhY3V0ZQorMTc5ICAxMS8wMyAgMjYzICBCMyAgRGVncmVlIFNpZ24KKzE4 MCAgMTEvMDQgIDI2NCAgQjQgIEMgY2VkaWxsYQorMTgxICAxMS8wNSAgMjY1ICBCNSAgYyBjZWRp bGxhCisxODIgIDExLzA2ICAyNjYgIEI2ICBOIHRpbGRlCisxODMgIDExLzA3ICAyNjcgIEI3ICBu IHRpbGRlCisxODQgIDExLzA4ICAyNzAgIEI4ICBJbnZlcnRlZCBleGNsYW1hdGlvbiBtYXJrCisx ODUgIDExLzA5ICAyNzEgIEI5ICBJbnZlcnRlZCBxdWVzdGlvbiBtYXJrCisxODYgIDExLzEwICAy NzIgIEJBICBDdXJyZW5jeSBzeW1ib2wKKzE4NyAgMTEvMTEgIDI3MyAgQkIgIFBvdW5kIHN0ZXJs aW5nIHN5bWJvbAorMTg4ICAxMS8xMiAgMjc0ICBCQyAgWWVuIHN5bWJvbAorMTg5ICAxMS8xMyAg Mjc1ICBCRCAgUGFyYWdyYXBoCisxOTAgIDExLzE0ICAyNzYgIEJFICBGbG9yaW4gKEd1aWxkZXIp IHN5bWJvbAorMTkxICAxMS8xNSAgMjc3ICBCRiAgQ2VudCBzeW1ib2wKKzE5MiAgMTIvMDAgIDMw MCAgQzAgIGEgY2lyY3VtZmxleAorMTkzICAxMi8wMSAgMzAxICBDMSAgZSBjaXJjdW1mbGV4Cisx OTQgIDEyLzAyICAzMDIgIEMyICBvIGNpcmN1bWZsZXgKKzE5NSAgMTIvMDMgIDMwMyAgQzMgIHUg Y2lyY3VtZmxleAorMTk2ICAxMi8wNCAgMzA0ICBDNCAgYSBhY3V0ZQorMTk3ICAxMi8wNSAgMzA1 ICBDNSAgZSBhY3V0ZQorMTk4ICAxMi8wNiAgMzA2ICBDNiAgbyBhY3V0ZQorMTk5ICAxMi8wNyAg MzA3ICBDNyAgdSBhY3V0ZQorMjAwICAxMi8wOCAgMzEwICBDOCAgYSBncmF2ZQorMjAxICAxMi8w OSAgMzExICBDOSAgZSBncmF2ZQorMjAyICAxMi8xMCAgMzEyICBDQSAgbyBncmF2ZQorMjAzICAx Mi8xMSAgMzEzICBDQiAgdSBncmF2ZQorMjA0ICAxMi8xMiAgMzE0ICBDQyAgYSBkaWFlcmVzaXMK KzIwNSAgMTIvMTMgIDMxNSAgQ0QgIGUgZGlhZXJlc2lzCisyMDYgIDEyLzE0ICAzMTYgIENFICBv IGRpYWVyZXNpcworMjA3ICAxMi8xNSAgMzE3ICBDRiAgdSBkaWFlcmVzaXMKKzIwOCAgMTMvMDAg IDMyMCAgRDAgIEEgcmluZworMjA5ICAxMy8wMSAgMzIxICBEMSAgaSBjaXJjdW1mbGV4CisyMTAg IDEzLzAyICAzMjIgIEQyICBPIHdpdGggc3Ryb2tlCisyMTEgIDEzLzAzICAzMjMgIEQzICBBRSBk aWdyYXBoCisyMTIgIDEzLzA0ICAzMjQgIEQ0ICBhIHJpbmcKKzIxMyAgMTMvMDUgIDMyNSAgRDUg IGkgYWN1dGUKKzIxNCAgMTMvMDYgIDMyNiAgRDYgIG8gd2l0aCBzdHJva2UKKzIxNSAgMTMvMDcg IDMyNyAgRDcgIGFlIGRpZ3JhcGgKKzIxNiAgMTMvMDggIDMzMCAgRDggIEEgZGlhZXJlc2lzCisy MTcgIDEzLzA5ICAzMzEgIEQ5ICBpIGdyYXZlCisyMTggIDEzLzEwICAzMzIgIERBICBPIGRpYWVy ZXNpcworMjE5ICAxMy8xMSAgMzMzICBEQiAgVSBkaWFlcmVzaXMKKzIyMCAgMTMvMTIgIDMzNCAg REMgIEUgYWN1dGUKKzIyMSAgMTMvMTMgIDMzNSAgREQgIGkgZGlhZXJlc2lzCisyMjIgIDEzLzE0 ICAzMzYgIERFICBHZXJtYW4gc2hhcnAgcworMjIzICAxMy8xNSAgMzM3ICBERiAgTyBjaXJjdW1m bGV4CisyMjQgIDE0LzAwICAzNDAgIEUwICBBIGFjdXRlCisyMjUgIDE0LzAxICAzNDEgIEUxICBB IHRpbGRlCisyMjYgIDE0LzAyICAzNDIgIEUyICBhIHRpbGRlCisyMjcgIDE0LzAzICAzNDMgIEUz ICBJY2VsYW5kaWMgRXRoCisyMjggIDE0LzA0ICAzNDQgIEU0ICBJY2VsYW5kaWMgZXRoCisyMjkg IDE0LzA1ICAzNDUgIEU1ICBJIGFjdXRlCisyMzAgIDE0LzA2ICAzNDYgIEU2ICBJIGdyYXZlCisy MzEgIDE0LzA3ICAzNDcgIEU3ICBPIGFjdXRlCisyMzIgIDE0LzA4ICAzNTAgIEU4ICBPIGdyYXZl CisyMzMgIDE0LzA5ICAzNTEgIEU5ICBPIHRpbGRlCisyMzQgIDE0LzEwICAzNTIgIEVBICBvIHRp bGRlCisyMzUgIDE0LzExICAzNTMgIEVCICBTIGNhcm9uCisyMzYgIDE0LzEyICAzNTQgIEVDICBz IGNhcm9uCisyMzcgIDE0LzEzICAzNTUgIEVEICBVIGFjdXRlCisyMzggIDE0LzE0ICAzNTYgIEVF ICBZIGRpYWVyZXNpcworMjM5ICAxNC8xNSAgMzU3ICBFRiAgeSBkaWFlcmVzaXMKKzI0MCAgMTUv MDAgIDM2MCAgRjAgIEljZWxhbmRpYyBUaG9ybgorMjQxICAxNS8wMSAgMzYxICBGMSAgSWNlbGFu ZGljIHRob3JuCisyNDIgIDE1LzAyICAzNjIgIEYyICBNaWRkbGUgZG90CisyNDMgIDE1LzAzICAz NjMgIEYzICBHcmVlayBtdQorMjQ0ICAxNS8wNCAgMzY0ICBGNCAgUGlsY3JvdyBzaWduCisyNDUg IDE1LzA1ICAzNjUgIEY1ICBGcmFjdGlvbiAzLzQKKzI0NiAgMTUvMDYgIDM2NiAgRjYgIExvbmcg ZGFzaCwgaG9yaXpvbnRhbCBiYXIKKzI0NyAgMTUvMDcgIDM2NyAgRjcgIEZyYWN0aW9uIDEvNAor MjQ4ICAxNS8wOCAgMzcwICBGOCAgRnJhY3Rpb24gMS8yCisyNDkgIDE1LzA5ICAzNzEgIEY5ICBG ZW1pbmluZSBvcmRpbmFsCisyNTAgIDE1LzEwICAzNzIgIEZBICBNYXNjdWxpbmUgb3JkaW5hbAor MjUxICAxNS8xMSAgMzczICBGQiAgTGVmdCBndWlsbGVtb3QKKzI1MiAgMTUvMTIgIDM3NCAgRkMg IFNvbGlkIGJveAorMjUzICAxNS8xMyAgMzc1ICBGRCAgUmlnaHQgZ3VpbGxlbW90CisyNTQgIDE1 LzE0ICAzNzYgIEZFICBQbHVzIG9yIG1pbnVzIHNpZ24KKzI1NSAgMTUvMTUgIDM3NyAgRkYgIChV bmRlZmluZWQpCisKKyAgICBJSUkuMS4yLiBHcmVlayBDaGFyYWN0ZXIgU2V0cworCisgICAgSUlJ LjEuMi4xLiBUaGUgSVNPIDg4NTktNyBMYXRpbiAvIEdyZWVrIEFscGhhYmV0ID0gRUxPVCA5MjgK KworZGVjIGNvbC9yb3cgb2N0IGhleCAgZGVzY3JpcHRpb24KKzE2MCAgMTAvMDAgIDI0MCAgQTAg IE5vLWJyZWFrIHNwYWNlCisxNjEgIDEwLzAxICAyNDEgIEExICBMZWZ0IHNpbmdsZSBxdW90YXRp b24gbWFyaworMTYyICAxMC8wMiAgMjQyICBBMiAgcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJr CisxNjMgIDEwLzAzICAyNDMgIEEzICBQb3VuZCBzaWduCisxNjQgIDEwLzA0ICAyNDQgIEE0ICAo VU5VU0VEKQorMTY1ICAxMC8wNSAgMjQ1ICBBNSAgKFVOVVNFRCkKKzE2NiAgMTAvMDYgIDI0NiAg QTYgIEJyb2tlbiBiYXIKKzE2NyAgMTAvMDcgIDI0NyAgQTcgIFBhcmFncmFwaCBzaWduCisxNjgg IDEwLzA4ICAyNTAgIEE4ICBEaWFlcmVzaXMgKERpYWx5dGlrYSkKKzE2OSAgMTAvMDkgIDI1MSAg QTkgIENvcHlyaWdodCBzaWduCisxNzAgIDEwLzEwICAyNTIgIEFBICAoVU5VU0VEKQorMTcxICAx MC8xMSAgMjUzICBBQiAgTGVmdCBhbmdsZSBxdW90YXRpb24KKzE3MiAgMTAvMTIgIDI1NCAgQUMg IE5vdCBzaWduCisxNzMgIDEwLzEzICAyNTUgIEFEICBTb2Z0IGh5cGhlbgorMTc0ICAxMC8xNCAg MjU2ICBBRSAgKFVOVVNFRCkKKzE3NSAgMTAvMTUgIDI1NyAgQUYgIEhvcml6b250YWwgYmFyIChQ YXJlbnRoZXRpa2kgcGF2bGEpCisxNzYgIDExLzAwICAyNjAgIEIwICBEZWdyZWUgc2lnbgorMTc3 ICAxMS8wMSAgMjYxICBCMSAgUGx1cy1taW51cyBzaWduCisxNzggIDExLzAyICAyNjIgIEIyICBT dXBlcnNjcmlwdCB0d28KKzE3OSAgMTEvMDMgIDI2MyAgQjMgIFN1cGVyc2NyaXB0IHRocmVlCisx ODAgIDExLzA0ICAyNjQgIEI0ICBBY2NlbnQgKHRvbm9zKQorMTgxICAxMS8wNSAgMjY1ICBCNSAg RGlhZXJlc2lzIGFuZCBhY2NlbnQgKERpYWx5dGlrYSBhbmQgVG9ub3MpCisxODIgIDExLzA2ICAy NjYgIEI2ICBBbHBoYSB3aXRoIGFjY2VudAorMTgzICAxMS8wNyAgMjY3ICBCNyAgTWlkZGxlIGRv dCAoQW5vIFRlbGVpYSkKKzE4NCAgMTEvMDggIDI3MCAgQjggIEVwc2lsb24gd2l0aCBhY2NlbnQK KzE4NSAgMTEvMDkgIDI3MSAgQjkgIEV0YSB3aXRoIGFjY2VudAorMTg2ICAxMS8xMCAgMjcyICBC QSAgSW90YSB3aXRoIGFjY2VudAorMTg3ICAxMS8xMSAgMjczICBCQiAgUmlnaHQgYW5nbGUgcXVv dGF0aW9uCisxODggIDExLzEyICAyNzQgIEJDICBPbWljcm9uIHdpdGggYWNjZW50CisxODkgIDEx LzEzICAyNzUgIEJEICBPbmUgaGFsZgorMTkwICAxMS8xNCAgMjc2ICBCRSAgVXBzaWxvbiB3aXRo IGFjY2VudAorMTkxICAxMS8xNSAgMjc3ICBCRiAgT21lZ2Egd2l0aCBhY2NlbnQKKzE5MiAgMTIv MDAgIDMwMCAgQzAgIGlvdGEgd2l0aCBkaWFlcmVzaXMgYW5kIGFjY2VudAorMTkzICAxMi8wMSAg MzAxICBDMSAgQWxwaGEKKzE5NCAgMTIvMDIgIDMwMiAgQzIgIEJldGEKKzE5NSAgMTIvMDMgIDMw MyAgQzMgIEdhbW1hCisxOTYgIDEyLzA0ICAzMDQgIEM0ICBEZWx0YQorMTk3ICAxMi8wNSAgMzA1 ICBDNSAgRXBzaWxvbgorMTk4ICAxMi8wNiAgMzA2ICBDNiAgWmV0YQorMTk5ICAxMi8wNyAgMzA3 ICBDNyAgRXRhCisyMDAgIDEyLzA4ICAzMTAgIEM4ICBUaGV0YQorMjAxICAxMi8wOSAgMzExICBD OSAgSW90YQorMjAyICAxMi8xMCAgMzEyICBDQSAgS2FwcGEKKzIwMyAgMTIvMTEgIDMxMyAgQ0Ig IExhbWRhCisyMDQgIDEyLzEyICAzMTQgIENDICBNdQorMjA1ICAxMi8xMyAgMzE1ICBDRCAgTnUK KzIwNiAgMTIvMTQgIDMxNiAgQ0UgIEtzaQorMjA3ICAxMi8xNSAgMzE3ICBDRiAgT21pY3Jvbgor MjA4ICAxMy8wMCAgMzIwICBEMCAgUGkKKzIwOSAgMTMvMDEgIDMyMSAgRDEgIFJobworMjEwICAx My8wMiAgMzIyICBEMiAgKFVOVVNFRCkKKzIxMSAgMTMvMDMgIDMyMyAgRDMgIFNpZ21hCisyMTIg IDEzLzA0ICAzMjQgIEQ0ICBUYXUKKzIxMyAgMTMvMDUgIDMyNSAgRDUgIFVwc2lsb24KKzIxNCAg MTMvMDYgIDMyNiAgRDYgIFBoaQorMjE1ICAxMy8wNyAgMzI3ICBENyAgS2hpCisyMTYgIDEzLzA4 ICAzMzAgIEQ4ICBQc2kKKzIxNyAgMTMvMDkgIDMzMSAgRDkgIE9tZWdhCisyMTggIDEzLzEwICAz MzIgIERBICBJb3RhIHdpdGggZGlhZXJlc2lzCisyMTkgIDEzLzExICAzMzMgIERCICBVcHNpbG9u IHdpdGggZGlhZXJlc2lzCisyMjAgIDEzLzEyICAzMzQgIERDICBhbHBoYSB3aXRoIGFjY2VudAor MjIxICAxMy8xMyAgMzM1ICBERCAgZXBzaWxvbiB3aXRoIGFjY2VudAorMjIyICAxMy8xNCAgMzM2 ICBERSAgZXRhIHdpdGggYWNjZW50CisyMjMgIDEzLzE1ICAzMzcgIERGICBpb3RhIHdpdGggYWNj ZW50CisyMjQgIDE0LzAwICAzNDAgIEUwICB1cHNpbG9uIHdpdGggZGlhZXJlc2lzIGFuZCBhY2Nl bnQKKzIyNSAgMTQvMDEgIDM0MSAgRTEgIGFscGhhCisyMjYgIDE0LzAyICAzNDIgIEUyICBiZXRh CisyMjcgIDE0LzAzICAzNDMgIEUzICBnYW1tYQorMjI4ICAxNC8wNCAgMzQ0ICBFNCAgZGVsdGEK KzIyOSAgMTQvMDUgIDM0NSAgRTUgIGVwc2lsb24KKzIzMCAgMTQvMDYgIDM0NiAgRTYgIHpldGEK KzIzMSAgMTQvMDcgIDM0NyAgRTcgIGV0YQorMjMyICAxNC8wOCAgMzUwICBFOCAgdGhldGEKKzIz MyAgMTQvMDkgIDM1MSAgRTkgIGlvdGEKKzIzNCAgMTQvMTAgIDM1MiAgRUEgIGthcHBhCisyMzUg IDE0LzExICAzNTMgIEVCICBsYW1kYQorMjM2ICAxNC8xMiAgMzU0ICBFQyAgbXUKKzIzNyAgMTQv MTMgIDM1NSAgRUQgIG51CisyMzggIDE0LzE0ICAzNTYgIEVFICBrc2kKKzIzOSAgMTQvMTUgIDM1 NyAgRUYgIG9taWNyb24KKzI0MCAgMTUvMDAgIDM2MCAgRjAgIHBpCisyNDEgIDE1LzAxICAzNjEg IEYxICByaG8KKzI0MiAgMTUvMDIgIDM2MiAgRjIgIHRlcm1pbmFsIHNpZ21hCisyNDMgIDE1LzAz ICAzNjMgIEYzICBzaWdtYQorMjQ0ICAxNS8wNCAgMzY0ICBGNCAgdGF1CisyNDUgIDE1LzA1ICAz NjUgIEY1ICB1cHNpbG9uCisyNDYgIDE1LzA2ICAzNjYgIEY2ICBwaGkKKzI0NyAgMTUvMDcgIDM2 NyAgRjcgIGtoaQorMjQ4ICAxNS8wOCAgMzcwICBGOCAgcHNpCisyNDkgIDE1LzA5ICAzNzEgIEY5 ICBvbWVnYQorMjUwICAxNS8xMCAgMzcyICBGQSAgaW90YSB3aXRoIGRpYWVyZXNpcworMjUxICAx NS8xMSAgMzczICBGQiAgdXBzaWxvbiB3aXRoIGRpYWVyZXNpcworMjUyICAxNS8xMiAgMzc0ICBG QyAgb21pY3JvbiB3aXRoIGRpYWVyZXNpcworMjUzICAxNS8xMyAgMzc1ICBGRCAgdXBzaWxvbiB3 aXRoIGFjY2VudAorMjU0ICAxNS8xNCAgMzc2ICBGRSAgb21lZ2Egd2l0aCBhY2NlbnQKKzI1NSAg MTUvMTUgIDM3NyAgRkYgIChVTlVTRUQpCisKKyAgICBJSUkuMS4yLjIuIFRoZSBFTE9UIDkyNyBD aGFyYWN0ZXIgU2V0CisKK2RlYyBjb2wvcm93IG9jdCBoZXggIGRlc2NyaXB0aW9uCisgMzIgIDAy LzAwICAgNDAgIDIwICBTUEFDRQorIDMzICAwMi8wMSAgIDQxICAyMSAgRVhDTEFNQVRJT04gTUFS SworIDM0ICAwMi8wMiAgIDQyICAyMiAgUVVPVEFUSU9OIE1BUksKKyAzNSAgMDIvMDMgICA0MyAg MjMgIE5VTUJFUiBTSUdOCisgMzYgIDAyLzA0ICAgNDQgIDI0ICBET0xMQVIgU0lHTgorIDM3ICAw Mi8wNSAgIDQ1ICAyNSAgUEVSQ0VOVCBTSUdOCisgMzggIDAyLzA2ICAgNDYgIDI2ICBBTVBFUlNB TkQKKyAzOSAgMDIvMDcgICA0NyAgMjcgIEFQT1NUUk9QSEUKKyA0MCAgMDIvMDggICA1MCAgMjgg IExFRlQgUEFSRU5USEVTSVMKKyA0MSAgMDIvMDkgICA1MSAgMjkgIFJJR0hUIFBBUkVOVEhFU0lT CisgNDIgIDAyLzEwICAgNTIgIDJBICBBU1RFUklTSworIDQzICAwMi8xMSAgIDUzICAyQiAgUExV UyBTSUdOCisgNDQgIDAyLzEyICAgNTQgIDJDICBDT01NQQorIDQ1ICAwMi8xMyAgIDU1ICAyRCAg SFlQSEVOLCBNSU5VUyBTSUdOCisgNDYgIDAyLzE0ICAgNTYgIDJFICBQRVJJT0QsIEZVTEwgU1RP UAorIDQ3ICAwMi8xNSAgIDU3ICAyRiAgU09MSURVUywgU0xBU0gKKyA0OCAgMDMvMDAgICA2MCAg MzAgIERJR0lUIFpFUk8KKyA0OSAgMDMvMDEgICA2MSAgMzEgIERJR0lUIE9ORQorIDUwICAwMy8w MiAgIDYyICAzMiAgRElHSVQgVFdPCisgNTEgIDAzLzAzICAgNjMgIDMzICBESUdJVCBUSFJFRQor IDUyICAwMy8wNCAgIDY0ICAzNCAgRElHSVQgRk9VUgorIDUzICAwMy8wNSAgIDY1ICAzNSAgRElH SVQgRklWRQorIDU0ICAwMy8wNiAgIDY2ICAzNiAgRElHSVQgU0lYCisgNTUgIDAzLzA3ICAgNjcg IDM3ICBESUdJVCBTRVZFTgorIDU2ICAwMy8wOCAgIDcwICAzOCAgRElHSVQgRUlHSFQKKyA1NyAg MDMvMDkgICA3MSAgMzkgIERJR0lUIE5JTkUKKyA1OCAgMDMvMTAgICA3MiAgM0EgIENPTE9OCisg NTkgIDAzLzExICAgNzMgIDNCICBTRU1JQ09MT04KKyA2MCAgMDMvMTIgICA3NCAgM0MgIExFU1Mt VEhBTiBTSUdOLCBMRUZUIEFOR0xFIEJSQUNLRVQKKyA2MSAgMDMvMTMgICA3NSAgM0QgIEVRVUFM UyBTSUdOCisgNjIgIDAzLzE0ICAgNzYgIDNFICBHUkVBVEVSLVRIQU4gU0lHTiwgUklHSFQgQU5H TEUgQlJBQ0tFVAorIDYzICAwMy8xNSAgIDc3ICAzRiAgUVVFU1RJT04gTUFSSworIDY0ICAwNC8w MCAgMTAwICA0MCAgQ09NTUVSQ0lBTCBBVCBTSUdOCisgNjUgIDA0LzAxICAxMDEgIDQxICBDQVBJ VEFMIExFVFRFUiBBCisgNjYgIDA0LzAyICAxMDIgIDQyICBDQVBJVEFMIExFVFRFUiBCCisgNjcg IDA0LzAzICAxMDMgIDQzICBDQVBJVEFMIExFVFRFUiBDCisgNjggIDA0LzA0ICAxMDQgIDQ0ICBD QVBJVEFMIExFVFRFUiBECisgNjkgIDA0LzA1ICAxMDUgIDQ1ICBDQVBJVEFMIExFVFRFUiBFCisg NzAgIDA0LzA2ICAxMDYgIDQ2ICBDQVBJVEFMIExFVFRFUiBGCisgNzEgIDA0LzA3ICAxMDcgIDQ3 ICBDQVBJVEFMIExFVFRFUiBHCisgNzIgIDA0LzA4ICAxMTAgIDQ4ICBDQVBJVEFMIExFVFRFUiBI CisgNzMgIDA0LzA5ICAxMTEgIDQ5ICBDQVBJVEFMIExFVFRFUiBJCisgNzQgIDA0LzEwICAxMTIg IDRBICBDQVBJVEFMIExFVFRFUiBKCisgNzUgIDA0LzExICAxMTMgIDRCICBDQVBJVEFMIExFVFRF UiBLCisgNzYgIDA0LzEyICAxMTQgIDRDICBDQVBJVEFMIExFVFRFUiBMCisgNzcgIDA0LzEzICAx MTUgIDREICBDQVBJVEFMIExFVFRFUiBNCisgNzggIDA0LzE0ICAxMTYgIDRFICBDQVBJVEFMIExF VFRFUiBOCisgNzkgIDA0LzE1ICAxMTcgIDRGICBDQVBJVEFMIExFVFRFUiBPCisgODAgIDA1LzAw ICAxMjAgIDUwICBDQVBJVEFMIExFVFRFUiBQCisgODEgIDA1LzAxICAxMjEgIDUxICBDQVBJVEFM IExFVFRFUiBRCisgODIgIDA1LzAyICAxMjIgIDUyICBDQVBJVEFMIExFVFRFUiBSCisgODMgIDA1 LzAzICAxMjMgIDUzICBDQVBJVEFMIExFVFRFUiBTCisgODQgIDA1LzA0ICAxMjQgIDU0ICBDQVBJ VEFMIExFVFRFUiBUCisgODUgIDA1LzA1ICAxMjUgIDU1ICBDQVBJVEFMIExFVFRFUiBVCisgODYg IDA1LzA2ICAxMjYgIDU2ICBDQVBJVEFMIExFVFRFUiBWCisgODcgIDA1LzA3ICAxMjcgIDU3ICBD QVBJVEFMIExFVFRFUiBXCisgODggIDA1LzA4ICAxMzAgIDU4ICBDQVBJVEFMIExFVFRFUiBYCisg ODkgIDA1LzA5ICAxMzEgIDU5ICBDQVBJVEFMIExFVFRFUiBZCisgOTAgIDA1LzEwICAxMzIgIDVB ICBDQVBJVEFMIExFVFRFUiBaCisgOTEgIDA1LzExICAxMzMgIDVCICBMRUZUIFNRVUFSRSBCUkFD S0VUCisgOTIgIDA1LzEyICAxMzQgIDVDICBSRVZFUlNFIFNPTElEVVMsIEJBQ0tTTEFTSAorIDkz ICAwNS8xMyAgMTM1ICA1RCAgUklHSFQgU1FVQVJFIEJSQUNLRVQKKyA5NCAgMDUvMTQgIDEzNiAg NUUgIENJUkNVTUZMRVggQUNDRU5UCisgOTUgIDA1LzE1ICAxMzcgIDVGICBVTkRFUlNDT1JFCisg OTYgIDA2LzAwICAxNDAgIDYwICBBQ0NFTlQgR1JBVkUKKyA5NyAgMDYvMDEgIDE0MSAgNjEgIEdS RUVLIExFVFRFUiBBTFBIQQorIDk4ICAwNi8wMiAgMTQyICA2MiAgR1JFRUsgTEVUVEVSIEJFVEEK KyA5OSAgMDYvMDMgIDE0MyAgNjMgIEdSRUVLIExFVFRFUiBHQU1NQQorMTAwICAwNi8wNCAgMTQ0 ICA2NCAgR1JFRUsgTEVUVEVSIERFTFRBCisxMDEgIDA2LzA1ICAxNDUgIDY1ICBHUkVFSyBMRVRU RVIgRVBTSUxPTgorMTAyICAwNi8wNiAgMTQ2ICA2NiAgR1JFRUsgTEVUVEVSIFpFVEEKKzEwMyAg MDYvMDcgIDE0NyAgNjcgIEdSRUVLIExFVFRFUiBFVEEKKzEwNCAgMDYvMDggIDE1MCAgNjggIEdS RUVLIExFVFRFUiBUSEVUQQorMTA1ICAwNi8wOSAgMTUxICA2OSAgR1JFRUsgTEVUVEVSIElPVEEK KzEwNiAgMDYvMTAgIDE1MiAgNkEgIEdSRUVLIExFVFRFUiBLQVBQQQorMTA3ICAwNi8xMSAgMTUz ICA2QiAgR1JFRUsgTEVUVEVSIExBTURBCisxMDggIDA2LzEyICAxNTQgIDZDICBHUkVFSyBMRVRU RVIgTVUKKzEwOSAgMDYvMTMgIDE1NSAgNkQgIEdSRUVLIExFVFRFUiBOVQorMTEwICAwNi8xNCAg MTU2ICA2RSAgR1JFRUsgTEVUVEVSIEtTSQorMTExICAwNi8xNSAgMTU3ICA2RiAgR1JFRUsgTEVU VEVSIE9NSUNST04KKzExMiAgMDcvMDAgIDE2MCAgNzAgIEdSRUVLIExFVFRFUiBQSQorMTEzICAw Ny8wMSAgMTYxICA3MSAgR1JFRUsgTEVUVEVSIFJITworMTE0ICAwNy8wMiAgMTYyICA3MiAgR1JF RUsgTEVUVEVSIFNJR01BCisxMTUgIDA3LzAzICAxNjMgIDczICBHUkVFSyBMRVRURVIgVEFVCisx MTYgIDA3LzA0ICAxNjQgIDc0ICBHUkVFSyBMRVRURVIgVVBTSUxPTgorMTE3ICAwNy8wNSAgMTY1 ICA3NSAgR1JFRUsgTEVUVEVSIEZJCisxMTggIDA3LzA2ICAxNjYgIDc2ICBHUkVFSyBMRVRURVIg WEkKKzExOSAgMDcvMDcgIDE2NyAgNzcgIEdSRUVLIExFVFRFUiBQU0kKKzEyMCAgMDcvMDggIDE3 MCAgNzggIEdSRUVLIExFVFRFUiBPTUVHQQorMTIxICAwNy8wOSAgMTcxICA3OSAgU1BBQ0UKKzEy MiAgMDcvMTAgIDE3MiAgN0EgIFNQQUNFCisxMjMgIDA3LzExICAxNzMgIDdCICBMRUZUIENVUkxZ IEJSQUNLRVQsIExFRlQgQlJBQ0UKKzEyNCAgMDcvMTIgIDE3NCAgN0MgIFZFUlRJQ0FMIExJTkUs IFZFUlRJQ0FMIEJBUgorMTI1ICAwNy8xMyAgMTc1ICA3RCAgUklHSFQgQ1VSTFkgQlJBQ0tFVCwg UklHSFQgQlJBQ0UKKzEyNiAgMDcvMTQgIDE3NiAgN0UgIFRJTERFCisxMjcgIDA3LzE1ICAxNzcg IDdGICBSVUJPVVQsIERFTEVURQorCisgICAgSUlJLjEuMi4zLiBQQyBDb2RlIFBhZ2UgODY5CisK KyAgICh0byBiZSBmaWxsZWQgaW4uLi4pCisKKyAgICBJSUkuMi4gVXBkYXRlZCBDb3VudHJ5IENv ZGVzCisKKyAgIERhdGU6IE1vbiwgNyBBcHIgMTk5NyAyMzoyMzo0OSBFRFQKKyAgIEZyb206IERh dmUgTGVpYm9sZCA8ZGxlaWJvbGRAZWxzZS5uZXQ+CisgICBOZXdzZ3JvdXBzOiBjb21wLmRjb20u dGVsZWNvbQorICAgU3ViamVjdDogRXgtVVNTUiBDb3VudHJ5IENvZGVzIFByb2ZpbGUKKyAgIE9y Z2FuaXphdGlvbjogVEVMRUNPTSBEaWdlc3QKKworICAgRXgtVVNTUiBDb3VudHJ5IENvZGVzIFBy b2ZpbGUKKyAgIDQgQXByaWwgMTk5NworCisgICBCZWxvdyBpcyBhIHN1bW1hcnkgb2YgdGhlIGNv dW50cnkgY29kZXMgdGhhdCBoYXZlIGZvcm1lZCBpbiB0aGUgd2FrZSBvZgorICAgdGhlIFVTU1Ig ZGlzc29sdXRpb24sIGFsb25nIHdpdGggc29tZSB1cGRhdGVkIGZpbmRpbmdzIGFuZCByZXBvcnRz LgorICAgQWRkaXRpb25hbCBvciBjb3JyZWN0ZWQgaW5mb3JtYXRpb24gb24gYW55IG9mIHRoZXNl IG5hdGlvbnMgd291bGQgYmUKKyAgIHdlbGNvbWUgKGMvbyBkbGVpYm9sZEBlbHNlLm5ldCkuCisg ICAgICogS3lyZ3l6IFJlcHVibGljIGNvdW50cnkgY29kZSA5OTYgd2lsbCB0YWtlIGVmZmVjdCwg YXQgbGVhc3QgaW4KKyAgICAgICBDYW5hZGEsIGVmZmVjdGl2ZSAxIE1heSAxOTk3LCBhY2NvcmRp bmcgdG8gQ1JUQyBUZWxlY29tIE9yZGVyCisgICAgICAgOTctNDY0LCBiYXNlZCBvbiBTdGVudG9y IFRhcmlmZiBOb3RpY2UgNDMzLiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uCisgICAgICAgd2hldGhl ciB0aGVyZSB3aWxsIGJlIGEgcGVybWlzc2l2ZSBkaWFsaW5nIHBlcmlvZCBpbnZvbHZlZCBvciBm b3IKKyAgICAgICBob3cgbG9uZyBzdWNoIGEgcGVybWlzc2l2ZSBvcGVyYXRpb24gd291bGQgcmVt YWluLgorICAgICAqIENvdW50cnkgY29kZSA5OTIgd2FzIHJlcG9ydGVkIGFzIGEgcmVjZW50IGFz c2lnbm1lbnQgZm9yCisgICAgICAgVGFqaWtpc3Rhbiwgd2hpY2ggd2lsbCBiZSBtb3ZpbmcgZnJv bSBjb3VudHJ5IGNvZGUgNyBhdCBzb21lCisgICAgICAgdW5rbm93biB0aW1lLgorICAgICAqIFV6 YmVraXN0YW4gaGFzIGl0cyBvd24gY291bnRyeSBjb2RlIGFzc2lnbm1lbnQsIGJ1dCBJIGhhdmUg bm8KKyAgICAgICBpbmZvcm1hdGlvbiBpZiB0aGlzIGlzIGluIHNlcnZpY2UgeWV0IG9yIHdoYXQg aW1wbGVtZW50YXRpb24gZGF0ZXMKKyAgICAgICBoYXZlIGJlZW4gc2V0LgorICAgICAqIEthemFr c3RhbiBkb2VzIG5vdCBoYXZlIGEga25vd24gc2VwYXJhdGUgY291bnRyeSBjb2RlIGFzc2lnbm1l bnQgYXQKKyAgICAgICBwcmVzZW50LiBJdCByZW1haW5zIGluIGNvdW50cnkgY29kZSA3IGZvciB0 aGUgdGltZSBiZWluZy4KKyAgICAgKiBSdXNzaWEgc2VlbXMgZGVzdGluZWQgdG8ga2VlcCBjb3Vu dHJ5IGNvZGUgNy4KKyAgICAgKiBSZWNlbnQgbmV3cyByZXBvcnRzIHNwZWFrIG9mIHNvbWUgYWdy ZWVtZW50cyBmb3JtaW5nIGJldHdlZW4gUnVzc2lhCisgICAgICAgYW5kIEJlbGFydXMuIFdoaWxl IHRoZXJlIGlzIG5vIG91dHJpZ2h0IHJldW5pZmljYXRpb24geWV0LCB0aGVyZSBpcworICAgICAg IGV4cGVjdGVkIHRvIGJlIG11Y2ggY2xvc2VyIHRpZXMgYmV0d2VlbiB0aGUgdHdvIG5hdGlvbnMu IFdoZXRoZXIKKyAgICAgICB0aGlzIHdpbGwgbGVhZCB0byBhIHJldW5pZmljYXRpb24gb2YgdGVs ZXBob25lIGNvZGVzIHJlbWFpbnMgdG8gYmUKKyAgICAgICBzZWVuLgorCisgICBJbiB0aGUgdGFi bGUsICJFZmZlY3RpdmUiIG1lYW5zIHRoZSBkYXRlIGF0IHdoaWNoIHRoZSBjb3VudHJ5IGNvZGUK KyAgIGJlZ2FuIHNlcnZpY2UgKHdoaWNoIGNvdWxkIHZhcnkgYWNjb3JkaW5nIHRvIHRoZSBuYXRp b24pLiAiTWFuZGF0b3J5IgorICAgbWVhbnMgdGhlIGRhdGUgYXQgd2hpY2ggdGhlIGNvdW50cnkg Y29kZSA3IGlzIGludmFsaWQgZm9yIGNhbGxzIHRvIHRoYXQKKyAgIG5hdGlvbi4gVGhlcmUgYXJl IGEgbnVtYmVyIG9mIHF1ZXN0aW9uIG1hcmtzIHNpbmNlIGV4YWN0IGRhdGVzIGhhdmUgbm90Cisg ICBiZWVuIGNvbGxlY3RlZCBpbiBhbGwgY2FzZXMuCisKK0NDICBOYXRpb24gICAgICAgICAgICBF ZmZlY3RpdmUgICAgIE1hbmRhdG9yeSAgICBOb3RlcworCiszNzAgTGl0aHVhbmlhICAgICAgICAg MTk5Mz8gICAgICAgICA/Pz8gICAgICAgICAgQW5ub3VuY2VkIEphbiAxOTkzCiszNzEgTGF0dmlh ICAgICAgICAgICAgMTk5Mz8gICAgICAgICA/Pz8KKzM3MiBFc3RvbmlhICAgICAgICAgICAxIEZl YiAxOTkzPyAgIE1hcmNoIDE5OTM/CiszNzMgTW9sZG92YSAgICAgICAgICAgMTk5Mz8gICAgICAg ICA/Pz8gICAgICAgICAgQW5ub3VuY2VkIEphbiAxOTkzCiszNzQgQXJtZW5pYSAgICAgICAgICAg MSBNYXkgMTk5NSAgICAxIEp1bHkgMTk5NSAgQW5ub3VuY2VkIEphbiAxOTk1IChJVFUpCiszNzUg QmVsYXJ1cyAgICAgICAgICAgMTYgQXByIDE5OTUgICAxOTk3PworMzgwIFVrcmFpbmUgICAgICAg ICAgIDE2IEFwciAxOTk1ICAgT2N0IDE5OTU/Cis3ICAgS2F6YWtzdGFuICAgICAgICAgKG5vIGtu b3duIGNoYW5nZXMpCis3ICAgUnVzc2lhICAgICAgICAgICAgKHByZXN1bWFibHkgbm90IGNoYW5n aW5nKQorOTkyIFRhamlraXN0YW4gICAgICAgID8/PyAgICAgICAgICAgPz8/ICAgICAgICAgIEFu bm91bmNlZCAxOTk2LTc/Cis5OTMgVHVya21lbmlzdGFuICAgICAgMyBKYW4gMTk5NyAgICAzIEFw ciAxOTk3ICAgQ2FuYWRhIGFzIG9mIDI5IE5vdiAxOTk2Cis5OTQgQXplcmJhaWphbiAgICAgICAg U2VwdCAxOTk0PyAgICA/Pz8gICAgICAgICAgQW5ub3VuY2VkIDE5OTIKKzk5NSBHZW9yZ2lhICAg ICAgICAgICAxOTk0PyAgICAgICAgID8/PyAgICAgICAgICByZWY6IFRlbGVjb20gRGlnZXN0IE9j dCAxOTk0Cis5OTYgS3lyZ3l6IFJlcHVibGljICAgMSBNYXkgMTk5NyAgICA/Pz8gICAgICAgICAg cmVmOiBTdGVudG9yIENhbmFkYS9DUlRDCis5OTggVXpiZWtpc3RhbiAgICAgICAgPz8/ICAgICAg ICAgICA/Pz8gICAgICAgICAgQW5ub3VuY2VkIDE5OTY/IChJVFUpCisKKyAgIERldGFpbHMgY291 cnRlc3kgVG9ieSBOaXhvbiwgSVRVLCBTdGVudG9yIChDYW5hZGEpLCBDUlRDIChDYW5hZGEpLAor ICAgVEVMRUNPTSBEaWdlc3QgKGluY2x1ZGluZyBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgZm9yIHRo ZSBjb3VudHJ5IGNvZGUKKyAgIGxpc3RpbmdzKS4KKworSVYuIEVSUkFUQSAmIENPUlJJR0VOREEK KworICAgVGhlIGZvbGxvd2luZyBlcnJvcnMgaW4gWzY0OV1Vc2luZyBDLUtlcm1pdCwgU2Vjb25k IEVkaXRpb24sIGZpcnN0CisgICBwcmludGluZywgaGF2ZSBiZWVuIG5vdGVkLgorCisgICBGaXJz dCwgc29tZSBtaXNzaW5nIGFja25vd2xlZGdlbWVudHMgZm9yIEMtS2VybWl0IDYuMDogSkUgSm9u ZXMgb2YKKyAgIE1pY3Jvd2FyZSBmb3IgaGVscCB3aXRoIE9TLTksIE5pZ2VsIFJvbGVzIGZvciBo aXMgaGVscCB3aXRoIFBsYW4gOSwKKyAgIEx1Y2FzIEhhcnQgZm9yIGhlbHAgd2l0aCBWTVMgYW5k IERpZ2l0YWwgVU5JWCwgSWdvciBLb3ZhbGVua28gZm9yIGhpcworICAgaGVscCB3aXRoIFFOWC4g QW5kIGxhdGVyLCB0byBTdXNhbiBLbGVpbm1hbm4gZm9yIGhlciBoZWxwIHdpdGggRGViaWFuCisg ICBMaW51eCBwYWNrYWdpbmc7IFBhdHJpY2sgVm9sa2VyZGluZyBmb3IgaGlzIGhlbHAgd2l0aCBT bGFja3dhcmUgTGludXgKKyAgIHBhY2thZ2luZzsgSmltIEtub2JsZSBmb3IgaGlzIGhlbHAgd2l0 aCBSZWQgSGF0IExpbnV4IHBhY2thZ2luZzsgYW5kIHRvCisgICBkb3plbnMgb2Ygb3RoZXJzIGZv ciBzZW5kaW5nIGluZGl2aWR1YWwgQy1LZXJtaXQgYmluYXJpZXMgZm9yIHZhcmllZAorICAgYW5k IGRpdmVyc2UgcGxhdGZvcm1zLgorCisgICBUaGFua3MgdG8gSmFtZXMgU3BhdGggZm9yIGJvdGgg YmluYXJpZXMgYW5kIHJlcG9ydGluZyBtYW55IG9mIHRoZSB0eXBvcworICAgbm90ZWQgYmVsb3cu IEFsc28gdG8gRGF0IFRodWMgTmd1eWVuIGZvciBzcG90dGluZyBzZXZlcmFsIHR5cG9zLgorCitQ QUdFICAgIFJFTUFSS1MKK0NPVkVSICAgIkNPUyIgaXMgYSBtaXNwcmludC4gIFRoZXJlIGlzIG5v IENPUy4gIFByZXRlbmQgaXQgc2F5cyAiU0NPIiBvciAiVk9TIi4KKyAgICAgICAgKFRoaXMgaXMg Zml4ZWQgaW4gdGhlIHNlY29uZCBwcmludGluZy4pCisgeHhpICAgIFNlY29uZCBsaW5lOiBGcmVk IFNtaXRoJ3MgYWZmaWxpYXRpb24gc2hvdWxkIGJlIENvbXB1dHJpdGlvbi4KKyA4MyAgICAgQ2hh bmdlICJjb21tYW5kcyBvdGhlciIgdG8gImNvbW1hbmRzIGFzIG90aGVyIiAoMXN0IHBhcmFncmFw aCkKKyA4NyAgICAgQ2hhbmdlICJUaGUgdGhlIiB0byAiVGhlIiAoMm5kIHBhcmFncmFwaCkKKyA5 MiAgICAgInNldCBtb2RlbS10eXBlIHVzZXItZGVmaW5lZCBzdXByYSIgc2hvdWxkIGJlICJzZXQg bW9kZW0gdHlwZSAuLi4iCisgOTUgICAgIENoYW5nZSAiVkkiIHRvICJ2aSIgKDFzdCBwYXJhZ3Jh cGgpCisgOTYgICAgIENoYW5nZSAiaXQgaXQiIHRvICJpdCBpcyIgKDFzdCBwYXJhZ3JhcGgpCisg OTcgICAgIENoYW5nZSAiYWR2YW50YWdlIGEgbGl0ZXJhbCIgdG8gImFkdmFudGFnZSBvZiBhIGxp dGVyYWwiICgybmQKKyAgICAgICAgcGFyYWdyYXBoKQorMTAyICAgICBUaGUgY2FsbC13YWl0aW5n IGV4YW1wbGUgd291bGQgYmUgYmV0dGVyIGFzIFNFVCBESUFMIFBSRUZJWCAqNzBXCisgICAgICAg IChyYXRoZXIgdGhhbiAiKjcwLCIpIGJlY2F1c2UgdGhlIGZvcm1lciB3aWxsIG5vdCBjYXVzZSBh biBpbmNvcnJlY3QKKyAgICAgICAgY2FsbCB0byBiZSBwbGFjZWQgd2l0aCBwdWxzZSBkaWFsaW5n LgorMTIzICAgICBUaGlyZCBwYXJhZ3JhcGggZnJvbSBib3R0b206ICIuLm90aGVyd2lzZSBpZiBh IHlvdXIgbG9jYWwgdXNlcm5hbWUuLiIKKyAgICAgICAgc2hvdWxkIGJlICIuLm90aGVyd2lzZSB5 b3VyIGxvY2FsIHVzZXJuYW1lLi4iLgorMTYwICAgICBEZWxldGUgdGhlICJpdCIgYmV0d2VlbiAi YW5kIiBhbmQgInRvIiAoMm5kIHBhcmFncmFwaCkKKzE4NSAgICAgSW4gIldoZW4gVFJBTlNGRVIg RElTUExBWSBpcyBPRkYsIEMtS2VybWl0IHNraXBzIHRoZSBkaXNwbGF5Li4uIiwKKyAgICAgICAg Ik9GRiIgc2hvdWxkIGJlICJOT05FIi4KKzE4NyAgICAgVGhlIGxhc3QgcGFyYWdyYXBoIHNheXMg dGhlICJBIGNvbW1hbmQiIGlzIGlnbm9yZWQsIHNob3VsZCBiZSAiUyIuCisxOTQgICAgIENoYW5n ZSAiaXQga25vd24iIHRvICJpdCBpcyBrbm93biIgKDR0aCBwYXJhZ3JhcGgpLgorMjM1ICAgICBJ biBDLUtlcm1pdCA3LjAsIHRoZSBzeW50YXggb2YgdGhlIEdFVCBjb21tYW5kIGNoYW5nZWQuICBN R0VUIG5vdworICAgICAgICBtdXN0IGJlIHVzZWQgdG8gZ2V0IGEgbGlzdCBvZiBmaWxlcyBhbmQg dGhlcmUgaXMgbm8gbW9yZSBtdWx0aWxpbmUKKyAgICAgICAgR0VUIGNvbW1hbmQuCisyNjggICAg IExhc3QgcGFyYWdyYXBoOiAiZWZmZWN0IiBzaG91bGQgYmUgImFmZmVjdCIuCisyNzUgICAgIElu IHRoZSBTRVQgUFJPVE9DT0wgS0VSTUlUIGRlc2NyaXB0aW9uLCB0aGUgZm9sbG93aW5nIHNlbnRl bmNlIGlzCisgICAgICAgIGluY29ycmVjdCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQ6ICdJZiB5b3Ug b21pdCB0aGUgY29tbWFuZHMsIHRoZQorICAgICAgICBkZWZhdWx0IG9uZXMgYXJlIHJlc3RvcmVk OiAia2VybWl0IC1pciIgYW5kICJrZXJtaXQgLXIiIHJlc3BlY3RpdmVseSIuCisgICAgICAgIFRo ZSBjb3JyZWN0IGluZm9ybWF0aW9uIGlzIGdpdmVuIGF0IHRoZSBib3R0b20gb2YgcGFnZSAyODEu CisyNzkgICAgIDl0aCBsaW5lLiAgVGhlIGRlY2ltYWwgdmFsdWUgb2YgU1QgaXMgMTU2LCBub3Qg MTU1LgorMjk1ICAgICBJbiB0aGUgc3RlcHBpbmcgc3RvbmVzLCBza2lwIGFoZWFkIHRvIENoYXB0 ZXIgMTcgb24gcC4gMzI3LgorMjk4ICAgICBUYWJsZSAxNi0yLCBQb3J0dWd1ZXNlIGVudHJ5LiAg Q29sdW1uIDQvMDAgc2hvdWxkIHNob3cgc2VjdGlvbiBzaWduLAorICAgICAgICBub3QgYWN1dGUg YWNjZW50LgorMzE2ICAgICBPdGhlciBsYW5ndWFnZXMgd3JpdHRlbiBpbiB0aGUgSGVicmV3IGFs cGhhYmV0IGluY2x1ZGUgS2FyYWltIChhIFR1cmtpYworICAgICAgICBsYW5ndWFnZSBzcG9rZW4g aW4gTGl0aHVhbmlhIGFuZCBQb2xhbmQpLCBKdWRlby1LdXJkaXNoLCBhbmQgSnVkZW8tCisgICAg ICAgIEdlb3JnaWFuLgorMzMyICAgICBVTkRFRklORSBkZWZpbml0aW9uLCBjaGFuZ2UgIlRoaXMg anVzdCIgdG8gIlRoaXMgaXMganVzdCIuCiszNDQgICAgIEl0IG1pZ2h0IGJlIG5lY2Vzc2FyeSB0 byBzZXQgdGhlIG1vZGVtJ3MgcHVsc2UgZ2VuZXJhdGlvbiByYXRlIHdoZW4KKyAgICAgICAgc2Vu ZGluZyBudW1lcmljIHBhZ2VzOyBtb3N0IEhheWVzIGNvbXBhdGlibGUgbW9kZW1zIHVzZSB0aGUg UzExCisgICAgICAgIHJlZ2lzdGVyIGZvciB0aGlzLgorMzUwICAgICBEZWxldGUgImlzIiBmcm9t IGJldHdlZW4gIkl0IiBhbmQgImNlYXNlcyIgKDR0aCBwYXJhZ3JhcGgpCiszNTEgICAgIFRvcCAt IGJvdGggb2NjdXJyZW5jZXMgb2YgInByaW50IFwlYSIgc2hvdWxkIGJlICJlY2hvIFwlYSIuCisz NjQgICAgIFx2KGlucHV0KSBhbmQgXHYocXVlcnkpIG91dCBvZiBhbHBoYWJldGljYWwgb3JkZXIu CiszNzggICAgIEluIHRoZSBNWVNFTkQgbWFjcm8sICJpZiBub3QgXG0ocmMpIGdvdG8gYmFkIiBz aG91bGQgYmU6CisgICAgICAgICJpZiBcbShyYykgZ290byBiYWQiIChyZW1vdmUgdGhlICJub3Qi KS4KKzM4Mi0zODMgSXQgc2hvdWxkIGJlIHN0YXRlZCB0aGF0IHRoZSBsb29wIGNvbnRyb2wgdmFy aWFibGUgbXVzdCBiZSBvZiB0aGUgXCVhCisgICAgICAgIHR5cGUsIG9yIGVsc2UgYW4gYXJyYXkg ZWxlbWVudDsgbWFjcm8gbmFtZXMgY2FuIG5vdCBiZSB1c2VkIGZvciB0aGlzLgorMzgzICAgICBJ biBsaW5lIDMsICJcJWZbXCVpXSIgc2hvdWxkIGJlICJcJmZbXCVpXSIuCiszODMgICAgIEluIHRo ZSBzb3J0IGV4YW1wbGUsIGl0IHNob3VsZCBiZSBzdGF0ZWQgdGhhdCB0aGUgYXJyYXkgaXMgMS1i YXNlZC4KKzM4NyAgICAgQ2hhbmdlICJZb3UgY2FuIGxpc3QiIHRvICJZb3UgY2FuIGdldCBhIGxp c3QiICg1dGggcGFyYWdyYXBoKQorMzkzICAgICBcRnZlcmlmeSgpIGRlc2NyaXB0aW9uLiAgVGhl IDNyZCBzZW50ZW5jZSBjb3VsZCBiZSBzdGF0ZWQgbW9yZSBjbGVhcmx5CisgICAgICAgIGFzICJJ ZiBhbGwgY2hhcmFjdGVycyBpbiBzdHJpbmcyIGFyZSBhbHNvIGluIHN0cmluZzEsIDAgaXMgcmV0 dXJuZWQuIgorMzk4ICAgICBDb3B5aW5nIFxmZmlsZXMoKSByZXN1bHRzIHRvIGFuIGFycmF5IGJl Zm9yZSBpcyBub3QgcmVxdWlyZWQgYXMgb2YKKyAgICAgICAgQy1LZXJtaXQgNy4wIChzZWUgWzY1 MF1TZWN0aW9uIDcuMykuCis0MDMgICAgIEluICIoXCVhICsgMykgKiAoXCViICA1KSIsIGEgbWlu dXMgc2lnbiBpcyBtaXNzaW5nIGJldHdlZW4gYiBhbmQgNS4KKzQwNyAgICAgQy1LZXJtaXQgNy4w IG5vIGxvbmdlciBzdXBwb3J0cyBtdWx0aWxpbmUgR0VULiAgQ2hhbmdlCisgICAgICAgICJnZXQs IFwlMSwgXCUyIiB0byAiZ2V0IHtcJTF9IHtcJTJ9IiBvciAiZ2V0IC9hczp7XCUyfSB7XCUxfSIu Cis0MDkgICAgIFJFQUQgZXhhbXBsZSB3aGlsZSBsb29wIHNob3VsZCBiZToKKyAgICAgICAgd2hp bGUgc3VjY2VzcyB7IGVjaG8gXG0obGluZSksIHJlYWQgbGluZSB9Cis0MDkgICAgICJXUklURSBm aWxlIiBzaG91bGQgYmUgIldSSVRFIGtleXdvcmQiICh5b3UgY2FuJ3QgcHV0IGEgZmlsZW5hbWUg dGhlcmUpCisgICAgICAgIChUaGUgc2FtZSBhcHBsaWVzIHRvIFdSSVRFLUxJTkUgLyBXUklURUxO KS4KKzQxNCAgICAgXEZ1bmhleGlmeSgpIG1pc3NpbmcgZnJvbSBUYWJsZSAxOC0zLgorNDI1ICAg ICBNSU5QVVQgZGVmaW5pdGlvbiwgY2hhbmdlIDJuZCAidGV4dDIiIHRvICJ0ZXh0MyIuCis0MzYg ICAgIFNldmVyYWwgbGluZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgVU5JWExPR0lOIG1hY3JvIGxp c3RpbmcuCisgICAgICAgIEFmdGVyIHRoZSAieGlmIGZhaWwiIGJsb2NrLCBpbnNlcnQ6CisKKyAg ICAgICAgICBvdXQgXCUxXDEzICAgICAgICAgICAgICAgICAgICA7IFNlbmQgdXNlcm5hbWUsIGNh cnJpYWdlIHJldHVybgorICAgICAgICAgIGlucCA1IFBhc3N3b3JkOiAgICAgICAgICAgICAgIDsg V2FpdCA1IHNlYyBmb3IgdGhpcyBwcm9tcHQKKyAgICAgICAgICBpZiBmYWlsIGVuZCAxIE5vIHBh c3N3b3JkIHByb21wdAorICAgICAgICAgIHBhdXNlICAgICAgICAgICAgICAgICAgICAgICAgIDsg V2FpdCBhIHNlYworICAgICAgICAgIG91dCBcJTJcMTMgICAgICAgICAgICAgICAgICAgIDsgU2Vu ZCBwYXNzd29yZAorCis0NDAgICAgIENoYW5nZSAic2V0IHRlcm1pbmFsIGJ5dGVzemllIiB0byAi c2V0IHRlcm1pbmFsIGJ5dGVzaXplIi4KKyAgICAgICAgQ2hhbmdlICJpbnB1dCBQYXNzd29yZDoi IHRvICJpbnB1dCAxMCBQYXNzd29yZCIuCis0NDggICAgIEZyYW5jaGlzZSBzY3JpcHQ6ICJhY2Nl c3MgbGluZSIgc2hvdWxkIGJlICJhY2Nlc3MgXG0obGluZSkiLgorNDUzICAgICBUaGVyZSBhcmUg dHdvIGluY29ycmVjdGx5IGNvZGVkIElGIHN0YXRlbWVudHMgaW4gdGhlIERFTElWRVIgbWFjcm8K KyAgICAgICAgZGVmaW5pdGlvbi4gIFJlcGxhY2UgYm90aCBvY2N1cnJlbmNlcyBvZiAiaWYgPiBc JTEgXCUzIHsiIHdpdGgKKyAgICAgICAgInhpZiA+IFwlaSBcJTMgeyIgKHJlcGxhY2UgImlmIiBi eSAieGlmIiBhbmQgIlwlMSIgd2l0aCAiXCVpIikuCis0NTMgICAgICJ0aGUgdGhlIiAobGFzdCBw YXJhZ3JhcGgpIHNob3VsZCBiZSAidGhlIi4KKzQ1NCAgICAgRU9UIChsYXN0IHBhcmFncmFwaCkg aXMgRW5kIG9mIFRyYW5zbWlzc2lvbiwgbm90IEVuZCBvZiBUZXh0LgorNDU3ICAgICBfREVGSU5F IGRlZmluaXRpb246ICJuYW1lIGNvbnN0cnVjdGVkIiBzaG91bGQgYmUgIm5hbWUgaXMgY29uc3Ry dWN0ZWQiLgorNDU3ICAgICAibWFjcm8gZm9yIGFuZCIgKGxhc3QgcGFyYWdyYXBoKSBzaG91bGQg YmUgIm1hY3JvIGFuZCIuCis0NTkgICAgIFNob3VsZCBleHBsYWluIHRoYXQgXHYodXNlcikgaXMg YSBsZWdhbCBhYmJyZXZpYXRpb24gb2YgXHYodXNlcmlkKS4KKzQ4MCAgICAgRmlndXJlIElJLTIg aXMgYmFja3dhcmRzOyB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQgYml0IGlzIHRyYW5zbWl0dGVkCisg ICAgICAgIGZpcnN0LCB0aGVuIHVwIHRvIHRoZSBoaWdoZXN0LCBhbmQgdGhlIHBhcml0eSBiaXQg bGFzdC4KKzUzNCAgICAgVGhlIFZNUyBBcHBlbmRpeCBzZWN0aW9uIG9uIE9kZCBSZWNvcmQgTGVu Z3RocyBubyBsb25nZXIgYXBwbGllczsKKyAgICAgICAgQy1LZXJtaXQgNy4wIGhhbmRsZXMgb2Rk IHJlY29yZCBsZW5ndGhzIGFzIHdlbGwgYXMgZXZlbiBvbmVzLgorNTU5ICAgICBUYWJsZSBWSUlJ LTMsIFBvcnR1Z3Vlc2UgZW50cnkuICBDb2x1bW4gNC8wMCBzaG91bGQgc2hvdyBzZWN0aW9uIHNp Z24sCisgICAgICAgIG5vdCBhY3V0ZSBhY2NlbnQuCis1NjAtNTYzIEhQLVJvbWFuOCBtaXNzaW5n IGZyb20gVGFibGUgVklJLTQ7IHRoZXJlIHdhc24ndCByb29tIHRvIHNxdWVlemUgaXQgaW4uCisg ICAgICAgIEl0IGlzIGxpc3RlZCBpbiBzZWN0aW9uIElJKDYpLgorNTY1ICAgICAiZCBzdHJva2Ui IGluIFRhYmxlIFZJSS01IGhhcyB0aGUgd3JvbmcgYXBwZWFyYW5jZTsgdGhlIHN0ZW0gc2hvdWxk CisgICAgICAgIGJlIHVwcmlnaHQuICBUaGUgbGV0dGVyIHNob3duIGluIHRoZSB0YWJsZSBpcyBh Y3R1YWxseSBhIGxvd2VyY2FzZQorICAgICAgICBJY2VsYW5kaWMgZXRoLCB3aGljaCBoYXMgYSBj dXJ2ZWQgc3RlbS4KKzYwMS02MDQgQmVCb3gsIEJlT1MsIFBsYW4gOSwgYW5kIHByb2JhYmx5IG90 aGVycyBub3QgbGlzdGVkIGluIHRyYWRlbWFya3MuCis2MDQgICAgIFRoZSB3b3JkcyAiU0NSSUJF IFRFWFQgRk9STUFUVEVSIiBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdAorICAgICAgICBz ZW50ZW5jZSBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoZSBDb2xvcGhvbi4gIFRoZXkgc2hv dWxkIGhhdmUKKyAgICAgICAgYmVlbiBpbiB0aGUgSW5kZXguCitJbmRleDogIE1pc3NpbmcgZW50 cmllczogU0VUIHsgU0VORCwgUkVDRUlWRSB9IFBBVEhOQU1FUywgQ2FsbCB3YWl0aW5nLCAuLi4K KyAgICAgICAgXEYoKSAgICAgICAgICAgIFBhZ2UgNjA1LCBhZGQgYWxzbyA0MTMtNDE0CisgICAg ICAgIFxGYnJlYWsgICAgICAgICAzODkKKyAgICAgICAgXEZjYXBpdGFsaXplICAgIDM5MAorICAg ICAgICBcRmNoZWNrc3VtICAgICAgNDE0CisgICAgICAgIFxGY3JjMTYgICAgICAgICA0MTQKKyAg ICAgICAgXEZleGVjdXRlICAgICAgIDQxNAorICAgICAgICBcRmhleGlmeSAgICAgICAgMzkwCisg ICAgICAgIFxGbHRyaW0gICAgICAgICAzOTEKKyAgICAgICAgXEZyZXBlYXQgICAgICAgIDM5Mgor ICAgICAgICBcRnNwYXduICAgICAgICAgMzkyCisgICAgICAgIFxGdG9kMnNlY3MgICAgICAzOTkK KyAgICAgICAgXHYoKSBidWlsdF9pbiAgIFBhZ2UgNjA2LCBhZGQgYWxzbyAzNjEtMzY0CisgICAg ICAgIFx2KF9saW5lKSAgICAgICAzNTQsIDM2MQorICAgICAgICBcdihhcGNhY3RpdmUpICAgMzYx CisgICAgICAgIFx2KGNoYXJzZXQpICAgICAzNjIKKyAgICAgICAgXHYoY3B1KSAgICAgICAgIDM2 MgorICAgICAgICBcdihjcmMxNikgICAgICAgMzU3LCAzNjIKKyAgICAgICAgXHYoZCR4eHgpICAg ICAgIGFkZCBwYWdlIDM2MgorICAgICAgICBcdihkaWFsbnVtYmVyKSAgMzYyCisgICAgICAgIFx2 KGRpYWxyZXN1bHQpICAzNjIKKyAgICAgICAgXHYoZXJybm8pICAgICAgIDM2MgorICAgICAgICBc dihlcnJzdHJpbmcpICAgMzYyCisgICAgICAgIFx2KGV4ZWRpcikgICAgICAzNjIKKyAgICAgICAg XHYoaW5pZGlyKSAgICAgIDM2MworICAgICAgICBcdihpcGFkZHJlc3MpICAgMzYzCisgICAgICAg IFx2KGtleWJvYXJkKSAgICAzNjMKKyAgICAgICAgXHYobWFjcm8pICAgICAgIDM2MworICAgICAg ICBcdihtaW5wdXQpICAgICAgMzYzCisgICAgICAgIFx2KG1feHh4KSAgICAgICA5NCwgMzYzCisg ICAgICAgIFx2KHBhc3N3b3JkKSAgICAzNjQKKyAgICAgICAgXHYocXVlcnkpICAgICAgIDM2NAor ICAgICAgICBcdihwcm9tcHQpICAgICAgMzY0CisgICAgICAgIFx2KHNwZWVkKSAgICAgICAzNTYs IDM2NAorICAgICAgICBcdihzdGFydHVwKSAgICAgMzY0CisgICAgICAgIFx2KHN0YXR1cykgICAg ICAzNjQKKyAgICAgICAgXHYoc3lzaWQpICAgICAgIDM2NAorICAgICAgICBcdihzeXN0ZW0pICAg ICAgMzY0CisgICAgICAgIFx2KGZzaXplKSAgICAgICBhdCBsb3dlciBoYWxmIHBhZ2UgNjA2IHNo b3VsZCByZWFkIFx2KHRmc2l6ZSkKKyAgICAgICAgXHYoeHZlcnNpb24pICAgIDM2NAorICAgICAg ICBCRUVQIENvbW1hbmQgICAgNDAKKyAgICAgICAgU0VUIEZMT1cgICAgICAgIDYyLCAyMTIKKwor ICAgRmlndXJlIElJLTUgb24gcGFnZSA0OTMuIFRoZSBwaW4gYXNzaWdubWVudHMgb2YgdGhlIE1p bmkgRGluLTgKKyAgIGNvbm5lY3RvciBhcmUgbm90IGRlc2NyaWJlZCBhbnl3aGVyZS4gQXMgbm90 ZWQgaW4gdGhlIHRleHQsIHRoZXNlIHRlbmQKKyAgIHRvIHZhcnkgZnJvbSB2ZW5kb3IgdG8gdmVu ZG9yLiBPbmUgY29tbW9uIGFycmFuZ2VtZW50IGlzOgorCisgIDEuIEhTS291dCAoSGFuZHNoYWtl IG91dCAtLSBkZWZpbml0aW9uIGRlcGVuZHMgb24gc29mdHdhcmUpCisgIDIuIEhTS2luICAoSGFu ZHNoYWtlIGluIG9yIGV4dGVybmFsIGNsb2NrKQorICAzLiBUeEQtCisgIDQuIE5vdCB1c2VkCisg IDUuIFJ4RC0KKyAgNi4gVHhEKworICA3LiBOb3QgdXNlZAorICA4LiBSeEQrCisKKyAgIE5vdGUg dGhlICJiYWxhbmNlZCBwYWlycyIgZm9yIFJlY2VpdmUgRGF0YSAoUnhEKSBhbmQgVHJhbnNtaXQg RGF0YQorICAgKFR4RCksIGFuZCB0aGUgdXR0ZXIgbGFjayBvZiBtb2RlbSBzaWduYWxzLiBUaGVz ZSBjb25uZWN0b3JzIGZvbGxvdyB0aGUKKyAgIFJTLTQyMyBzdGFuZGFyZCwgcmF0aGVyIHRoYW4g UlMtMjMyLiBJbiBzb21lIGFycmFuZ2VtZW50cywgUGluIDEgaXMKKyAgIHVzZWQgZm9yIERUUiBh bmQgUGluIDIgZm9yIENEOyBpbiBvdGhlcnMgUGluIDEgaXMgUlRTIGFuZCBQaW4gMiBpcyBDVFMu CisKKyAgIFBsZWFzZSBzZW5kIHJlcG9ydHMgb2Ygb3RoZXIgZXJyb3JzIHRvIHRoZSBhdXRob3Jz LCBhcyB3ZWxsIGFzCisgICBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnRzLCBhZGRpdGlvbmFs IGluZGV4IGVudHJpZXMsIGFuZCBhbnkgb3RoZXIKKyAgIGNvbW1lbnRzOgorCisgICBbNjUxXWtl cm1pdEBjb2x1bWJpYS5lZHUKKworQVBQRU5ESVggVi4gQURESVRJT05BTCBDT1BZUklHSFQgTk9U SUNFUworCisgICBUaGUgZm9sbG93aW5nIGNvcHlyaWdodHMgY292ZXIgc29tZSBvZiB0aGUgc291 cmNlIGNvZGUgdXNlZCBpbiB0aGUKKyAgIGRldmVsb3BtZW50IG9mIEMtS2VybWl0LCBLZXJtaXQg OTUsIG9yIEtlcm1pdCA5NSBzdXBwb3J0IGxpYnJhcmllcy4KKworLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgIENvcHlyaWdodCAo YykgMTk5NSBieSBPeSBPbmxpbmUgU29sdXRpb25zIEx0ZC4gICAgICAgICAgICAgICAqLworLyog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLworLyogICBEaXN0cmlidXRpb24gb2YgdGhpcyBzb3VyY2UgY29k ZSBpcyBzdHJpY3RseSBmb3JiaWRkZW4uIFVzZSBvZiB0aGlzICAgICovCisvKiAgIHNvdXJjZSBj b2RlIGlzIGdyYW50ZWQgdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ29sdW1iaWEgQy1LZXJtaXQgcHJv amVjdCAgICovCisvKiAgIHRvIGJlIGRpc3RyaWJ1dGVkIGluIGJpbmFyeSBmb3JtYXQgb25seS4g UGxlYXNlIGZhbWlsaWFyaXplIHlvdXJzZWxmICAgICovCisvKiAgIHdpdGggdGhlIGFjY29tcGFu eWluZyBMSUNFTlNFLlAgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov CisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgIHVz ZWQgZm9yIFhtb2RlbSwgWW1vZGVtLCBhbmQgWm1vZGVtIHByb3RvY29sIGluIEtlcm1pdCA5NSAo cDk1LmRsbCwKKyAgIHAyLmRsbCkKKworICAgQ29weXJpZ2h0IChjKSAxOTk3IFN0YW5mb3JkIFVu aXZlcnNpdHkKKworICAgVGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciByZXZlbnVlLWdlbmVy YXRpbmcgcHVycG9zZXMgbWF5IHJlcXVpcmUgYQorICAgbGljZW5zZSBmcm9tIHRoZSBvd25lcnMg b2YgdGhlIHVuZGVybHlpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5LgorICAgU3BlY2lmaWNhbGx5 LCB0aGUgU1JQLTMgcHJvdG9jb2wgbWF5IG5vdCBiZSB1c2VkIGZvciByZXZlbnVlLWdlbmVyYXRp bmcKKyAgIHB1cnBvc2VzIHdpdGhvdXQgYSBsaWNlbnNlLgorCisgICBXaXRoaW4gdGhhdCBjb25z dHJhaW50LCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZQor ICAgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlz IGhlcmVieSBncmFudGVkCisgICB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZXMgYW5kIHRoaXMKKyAgIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBp biBhbGwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZAorICAgZG9jdW1lbnRhdGlv bi4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUy1JUyIgQU5EIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTLCBJTVBMSUVEIE9SIE9USEVSV0lTRSwgSU5D TFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCisgICBXQVJSQU5UWSBPRiBNRVJDSEFOVEFC SUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyAgIElOIE5PIEVW RU5UIFNIQUxMIFNUQU5GT1JEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUws CisgICBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIE9SIEFO WSBEQU1BR0VTCisgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRB IE9SIFBST0ZJVFMsIFdIRVRIRVIgT1IgTk9UCisgICBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBEQU1BR0UsIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAgIEFSSVNJTkcg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRI SVMKKyAgIFNPRlRXQVJFLgorCisgICBVc2VkIGZvciBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkIChU TSkgcHJvdG9jb2wgKFNSUCkgaW4gQy1LZXJtaXQsIEtlcm1pdAorICAgOTUgKGs5NS5leGUsIGsy LmV4ZSwgazk1Y3J5cHQuZGxsLCBrMmNyeXB0LmRsbCkKKworICAgQ29weXJpZ2h0IDE5OTAgYnkg dGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuIEFsbCBSaWdodHMKKyAg IFJlc2VydmVkLgorCisgICBFeHBvcnQgb2YgdGhpcyBzb2Z0d2FyZSBmcm9tIHRoZSBVbml0ZWQg U3RhdGVzIG9mIEFtZXJpY2EgbWF5IHJlcXVpcmUgYQorICAgc3BlY2lmaWMgbGljZW5zZSBmcm9t IHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuIEl0IGlzIHRoZQorICAgcmVzcG9uc2liaWxp dHkgb2YgYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24gY29udGVtcGxhdGluZyBleHBvcnQgdG8K KyAgIG9idGFpbiBzdWNoIGEgbGljZW5zZSBiZWZvcmUgZXhwb3J0aW5nLgorCisgICBXSVRISU4g VEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlz dHJpYnV0ZQorICAgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBw dXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcworICAgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRo YXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorICAgY29waWVzIGFu ZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlCisgICBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUg bmFtZSBvZiBNLkkuVC4gbm90IGJlCisgICB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0 eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKKyAgIHNvZnR3YXJlIHdpdGhvdXQg c3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gTS5JLlQuIG1ha2VzIG5vCisgICBy ZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9y IGFueSBwdXJwb3NlLgorICAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mg b3IgaW1wbGllZCB3YXJyYW50eS4KKworICAgVXNlZCBmb3IgVGVsbmV0IEF1dGhlbnRpY2F0aW9u IE9wdGlvbiwgVGVsbmV0IEVuY3J5cHRpb24gT3B0aW9uLCBhbmQKKyAgIEtlcmJlcm9zIChUTSkg YXV0aGVudGljYXRpb24gaW4gQy1LZXJtaXQsIEtlcm1pdCA5NSAoazk1LmV4ZSwgazIuZXhlLAor ICAgazk1Y3J5cHQuZGxsLCBrMmNyeXB0LmRsbCkKKworICAgQ29weXJpZ2h0IChjKSAxOTkxLCAx OTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgICBBbGwg cmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgIG1l dDoKKyAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKyAgICAgICBkaXN0cmlidXRpb24uCisgICAgMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgICAgICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorCisg ICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZl cnNpdHkgb2YKKyAgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMu CisgICAgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz IG9mIGl0cworICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK KyAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMKKyAgIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IKKyAgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAgIEJVU0lORVNTIElOVEVSUlVQ VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICAg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IKKyAgIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAgIEFEVklTRUQgT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisgICBVc2VkIGZvciBUZWxuZXQgQXV0aGVudGljYXRp b24gT3B0aW9uLCBUZWxuZXQgRW5jcnlwdGlvbiBPcHRpb24sIGFuZAorICAgS2VyYmVyb3MgKFRN KSBhdXRoZW50aWNhdGlvbiBpbiBDLUtlcm1pdCwgS2VybWl0IDk1IChrOTUuZXhlLCBrMi5leGUs CisgICBrOTVjcnlwdC5kbGwsIGsyY3J5cHQuZGxsKQorCisgICBDb3B5cmlnaHQgKEMpIDE5OTUt MTk5NyBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkgQWxsIHJpZ2h0cworICAgcmVzZXJ2 ZWQuCisKKyAgIFRoaXMgcGFja2FnZSBpcyBhbiBERVMgaW1wbGVtZW50YXRpb24gd3JpdHRlbiBi eSBFcmljIFlvdW5nCisgICAoZWF5QGNyeXB0c29mdC5jb20pLiBUaGUgaW1wbGVtZW50YXRpb24g d2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybQorICAgd2l0aCBNSVQncyBsaWJkZXMuCisKKyAg IFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1 c2UgYXMgbG9uZyBhcworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRv LiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXBwbHkKKyAgIHRvIGFsbCBjb2RlIGZvdW5kIGlu IHRoaXMgZGlzdHJpYnV0aW9uLgorCisgICBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3Ms IGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICAgdGhlIGNvZGUgYXJlIG5v dCB0byBiZSByZW1vdmVkLiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsCisg ICBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbiBhcyB0aGUgYXV0aG9yIG9m IHRoYXQgdGhlIFNTTAorICAgbGlicmFyeS4gVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0 ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbQorICAgc3RhcnR1cCBvciBpbiBkb2N1bWVudGF0aW9u IChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIHBhY2thZ2UuCisKKyAg IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICAgbWV0OgorICAgIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0IG5vdGljZSwKKyAg ICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LgorICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICAgIGRpc3Ry aWJ1dGlvbi4KKyAgICAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAgICAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6IFRoaXMgcHJvZHVjdAorICAgICAgIGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKworICAg VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQgQU5Z IEVYUFJFU1MgT1IKKyAgIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRSBJTVBMSUVECisgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgICBESVNDTEFJTUVELiBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S CisgICBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCisgICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICAgT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg ICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAgIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICAgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisKKyAgIFRoZSBsaWNlbnNlIGFuZCBkaXN0cmlidXRpb24gdGVy bXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uCisgICBvciBkZXJpdmF0aXZl IG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gaS5lLiB0aGlzIGNvZGUgY2Fubm90Cisg ICBzaW1wbHkgYmUgY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGlj ZW5zZSBbaW5jbHVkaW5nCisgICB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLl0KKworICAgVGhlIHJl YXNvbiBiZWhpbmQgdGhpcyBiZWluZyBzdGF0ZWQgaW4gdGhpcyBkaXJlY3QgbWFubmVyIGlzIHBh c3QKKyAgIGV4cGVyaWVuY2UgaW4gY29kZSBzaW1wbHkgYmVpbmcgY29waWVkIGFuZCB0aGUgYXR0 cmlidXRpb24gcmVtb3ZlZCBmcm9tCisgICBpdCBhbmQgdGhlbiBiZWluZyBkaXN0cmlidXRlZCBh cyBwYXJ0IG9mIG90aGVyIHBhY2thZ2VzLiBUaGlzCisgICBpbXBsZW1lbnRhdGlvbiB3YXMgYSBu b24tdHJpdmlhbCBhbmQgdW5wYWlkIGVmZm9ydC4KKworICAgVXNlZCBERVMgZW5jcnlwdGlvbiBp biBLZXJtaXQgOTUgKGs5NWNyeXB0LmRsbCwgazJjcnlwdC5kbGwpCisgICAgIF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwor CisgKiBUaGlzIGlzIHZlcnNpb24gMS4xIG9mIENyeXB0b0xpYgorICoKKyAqIFRoZSBhdXRob3Jz IG9mIHRoaXMgc29mdHdhcmUgYXJlIEphY2sgTGFjeSwgRG9uIE1pdGNoZWxsIGFuZCBNYXR0IEJs YXplCisgKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0 LCAxOTk1IGJ5IEFUJlQuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgYW5kIG1vZGlmeSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQgZmVlCisgKiBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQg dGhhdCB0aGlzIGVudGlyZSBub3RpY2UgaXMgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb2Yg YW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weSBvcgorICogbW9kaWZpY2F0 aW9uIG9mIHRoaXMgc29mdHdhcmUgYW5kIGluIGFsbCBjb3BpZXMgb2YgdGhlIHN1cHBvcnRpbmcK KyAqIGRvY3VtZW50YXRpb24gZm9yIHN1Y2ggc29mdHdhcmUuCisgKgorICogTk9URToKKyAqIFNv bWUgb2YgdGhlIGFsZ29yaXRobXMgaW4gY3J5cHRvbGliIG1heSBiZSBjb3ZlcmVkIGJ5IHBhdGVu dHMuCisgKiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVzZXIgdG8gZW5zdXJlIHRo YXQgYW55IHJlcXVpcmVkCisgKiBsaWNlbnNlcyBhcmUgb2J0YWluZWQuCisgKgorICoKKyAqIFNP TUUgUEFSVFMgT0YgQ1JZUFRPTElCIE1BWSBCRSBSRVNUUklDVEVEIFVOREVSIFVOSVRFRCBTVEFU RVMgRVhQT1JUCisgKiBSRUdVTEFUSU9OUy4KKyAqCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBC RUlORyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAq IFdBUlJBTlRZLiAgSU4gUEFSVElDVUxBUiwgTkVJVEhFUiBUSEUgQVVUSE9SUyBOT1IgQVQmVCBN QUtFIEFOWQorICogUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgQ09OQ0VS TklORyBUSEUgTUVSQ0hBTlRBQklMSVRZCisgKiBPRiBUSElTIFNPRlRXQVJFIE9SIElUUyBGSVRO RVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorCisgICBVc2VkIGZvciBCaWcgTnVtYmVy IGxpYnJhcnkgaW4gS2VybWl0IDk1IChrOTVjcnlwdC5kbGwsIGsyY3J5cHQuZGxsKS4KKworICAg WyBbNjUyXVRvcCBdIFsgWzY1M11DLUtlcm1pdCBdIFsgWzY1NF1LZXJtaXQgSG9tZSBdCisgICAg IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXworCisgICBDS0VSTUlUNzAuSFRNIC8gVGhlIEtlcm1pdCBQcm9qZWN0IC8gQ29s dW1iaWEgVW5pdmVyc2l0eSAvIDggRmViIDIwMDAgLworICAgTGFzdCB1cGRhdGU6IDggQXVnIDIw MTEKKworUmVmZXJlbmNlcworCisgICAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KKyAgIDIu IG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1CisgICAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvaW5kZXguaHRtbAorICAgNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2s5NS5odG1sCisgICA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5o dG1sCisgICA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tzY3JpcHRzLmh0bWwK KyAgIDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdXJyZW50Lmh0bWwKKyAgIDgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC93aGF0c25ldy5odG1sCisgICA5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZmFxLmh0bWwKKyAgMTAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwKKyAgMTEuIGh0dHA6Ly93d3cuYW1hem9uLmNv bS9ncC9wcm9kdWN0LzE1NTU1ODE2NDE/aWU9VVRGOCZ0YWc9YWxlaWRtb3JlbGRvbS0yMCZsaW5r Q29kZT1hczImY2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUmY3JlYXRpdmVBU0lOPTE1NTU1ODE2NDEK KyAgMTIuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1bWJpYS5lZHUKKyAgMTMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAgMTQuIGh0dHA6Ly93d3cua2VybWl0LXByb2plY3Qu b3JnLworICAxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5ueWMubnkudXMva2VybWl0LworICAxNi4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9DT1BZSU5HLlRYVAorICAxNy4gZnRw Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NtYWkuYworICAxOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3h2CisgIDE5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyAgMjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUva2VybWl0L2YvY2tjYndyLnR4dAorICAyMS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvZi9ja3Vid3IudHh0CisgIDIyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9mL2NrdmJ3ci50eHQKKyAgMjMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2YvY2t1YndyLnR4dAorICAyNC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9j a2VybWl0NzAudHh0CisgIDI1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL3Nl Y3VyaXR5LnR4dAorICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5 Lmh0bQorICAyNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9pa3NkLnR4dAor ICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lrc2QuaHRtCisgIDI5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Vpa3NkLmh0bQorICAzMC4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi90ZWxuZXQudHh0CisgIDMxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvdGVsbmV0Lmh0bQorICAzMi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvZi9DT1BZSU5HLlRYVAorICAzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2s5NS5odG1sCisgIDM0LiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnLworICAzNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgIDM2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGkKKyAgMzcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWkKKyAgMzguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MAorICAzOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxCisgIDQwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMAorICA0MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjEKKyAgNDIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yCisgIDQzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMworICA0NC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjQKKyAgNDUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41CisgIDQ2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS4xCisgIDQ3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS4yCisgIDQ4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS4zCisgIDQ5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS40CisgIDUw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS41Cisg IDUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNgor ICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjcK KyAgNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS44 CisgIDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEu OQorICA1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gx LjEwCisgIDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuMTEKKyAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4MS4xMS4xCisgIDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDEuMTEuMgorICA1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gxLjExLjMKKyAgNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4MS4xMS40CisgIDYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDEuMTEuNQorICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjExLjYKKyAgNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMS43CisgIDY0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTIKKyAgNjUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xMworICA2Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE0CisgIDY3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTUKKyAgNjguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xNgorICA2OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjE3CisgIDcwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTgKKyAgNzEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xOQorICA3Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIwCisgIDcz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjEKKyAg NzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMgor ICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIy LjEKKyAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 MS4yMi4yCisgIDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDEuMjIuMworICA3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gxLjIyLjQKKyAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4MS4yMi41CisgIDgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDEuMjIuNgorICA4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjcKKyAgODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMi44CisgIDgzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjMKKyAgODQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yNAorICA4NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyCisgIDg2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMAorICA4Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEKKyAgODguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjEKKyAgODkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjIKKyAgOTAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjMKKyAgOTEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjQKKyAgOTIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjUKKyAgOTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjYKKyAg OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjcK KyAgOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4x LjgKKyAgOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Mi4xLjkKKyAgOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Mi4xLjEwCisgIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDIuMS4xMQorICA5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gyLjEuMTIKKyAxMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Mi4xLjEzCisgMTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xNAorIDEwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTUKKyAxMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjE2CisgMTA0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMgorIDEwNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjIuMQorIDEwNi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjIuMgorIDEwNy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjMKKyAxMDguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4zLjAKKyAxMDkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4zLjEKKyAxMTAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4zLjIKKyAxMTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4zLjMKKyAx MTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4zLjQK KyAxMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4z LjUKKyAxMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Mi4zLjYKKyAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Mi40CisgMTE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDIuNQorIDExNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3gyLjYKKyAxMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Mi43CisgMTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDIuNy4wCisgMTIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDIuNy4xCisgMTIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDIuNy4yCisgMTIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDIuNy4zCisgMTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDIuNy40CisgMTI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy40LjEKKyAxMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQuMgorIDEyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjcuNC4zCisgMTI3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy40LjQKKyAxMjguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43LjQuNQorIDEyOS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjgKKyAxMzAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi45CisgMTMx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuOS4xCisg MTMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuOS4y CisgMTMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIu MTAKKyAxMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Mi4xMQorIDEzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3gyLjEyCisgMTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDIuMTMKKyAxMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Mi4xNAorIDEzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3gyLjE1CisgMTM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDMKKyAxNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4My4xCisgMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDMuMgorIDE0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gzLjMKKyAxNDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4My40CisgMTQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQKKyAxNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4wCisgMTQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuMQorIDE0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjEuMQorIDE0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjEuMgorIDE0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEuMworIDE1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIKKyAxNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjEKKyAxNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjEuMQorIDE1My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMS4yCisgMTU0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4xLjMKKyAxNTUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjIKKyAxNTYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjIuMQorIDE1 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMi4y CisgMTU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu Mi4zCisgMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuMi4zLjEKKyAxNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC4yLjMuMgorIDE2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjIuNAorIDE2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjIuNQorIDE2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjIuNgorIDE2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuNworIDE2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuOAorIDE2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuOC4xCisgMTY3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44LjIKKyAxNjguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjguMworIDE2OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuOC40CisgMTcwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMworIDE3MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMuMQorIDE3 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMuMgor IDE3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMu MworIDE3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjMuNAorIDE3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjQKKyAxNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC40LjEKKyAxNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC40LjEuMQorIDE3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjQuMS4yCisgMTc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuNC4yCisgMTgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuNC4yLjEKKyAxODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC40LjIuMS4xCisgMTgyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNC4yLjEuMgorIDE4My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjQuMi4yCisgMTg0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNQorIDE4NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjUuMQorIDE4Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjUuMgorIDE4 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjUuMi4x CisgMTg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu NS4yLjIKKyAxODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC41LjMKKyAxOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NC41LjQKKyAxOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC42CisgMTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuNworIDE5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjcuMQorIDE5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjcuMgorIDE5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjcuMworIDE5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjgKKyAxOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC44LjEKKyAxOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC44LjIKKyAxOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45CisgMjAwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4xCisgMjAxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4yCisgMjAyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuOS4zCisgMjAzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTAKKyAyMDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMQorIDIwNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExLjEKKyAyMDYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMS4yCisgMjA3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEuMwor IDIwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEx LjQKKyAyMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4xMS41CisgMjEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuMTEuNgorIDIxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjEyCisgMjEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMTMKKyAyMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4xNAorIDIxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjE1CisgMjE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMTYKKyAyMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC4xNworIDIxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3LjEKKyAyMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xNy4yCisgMjE5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTgKKyAyMjAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOQorIDIyMS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwCisgMjIyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAuMQorIDIyMy4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwLjIKKyAyMjQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMC4yLjEKKyAyMjUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMC4yLjIK KyAyMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4y MC4yLjMKKyAyMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC4yMC4yLjQKKyAyMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4yMC4yLjUKKyAyMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC4yMC4zCisgMjMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuMjEKKyAyMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMgorIDIzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyLjEKKyAyMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMi4yCisgMjM0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjIuMworIDIzNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyLjQKKyAyMzYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMi41CisgMjM3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjIuNgorIDIzOC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIyLjcKKyAy MzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMi44 CisgMjQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu MjMKKyAyNDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yNAorIDI0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjI1CisgMjQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDUKKyAyNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NS4wCisgMjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDUuMQorIDI0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g1LjIKKyAyNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4NS4zCisgMjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDUuMy4xCisgMjQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDUuMy4yCisgMjUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDUuNAorIDI1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g1LjUKKyAyNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NS42CisgMjUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDUuNworIDI1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g2CisgMjU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDYuMAorIDI1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g2LjEKKyAyNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ni4yCisgMjU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDYuMworIDI1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g2LjQKKyAyNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Ni41CisgMjYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNgorIDI2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuMQorIDI2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuMgorIDI2NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuMgorIDI2NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuMworIDI2Ni4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuNAorIDI2Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuNQorIDI2OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2LjYuNS4xCisgMjY5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi41LjIKKyAy NzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ni42LjUu MworIDI3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g2 LjYuNS40CisgMjcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDYuNi41LjUKKyAyNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ni43CisgMjc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcKKyAyNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ny4wCisgMjc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMQorIDI3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g3LjEuMQorIDI3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjEuMgorIDI3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g3LjEuMworIDI4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEuNAorIDI4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIKKyAyODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4zCisgMjgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNAorIDI4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjUKKyAyODUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny42CisgMjg2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNworIDI4Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjgKKyAyODguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45CisgMjg5LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuOS4xCisgMjkwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuOS4yCisgMjkxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAKKyAyOTIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4xCisgMjkzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMgorIDI5NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjMKKyAy OTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC40 CisgMjk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MTAuNQorIDI5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjEwLjYKKyAyOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ny4xMC43CisgMjk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMTAuOAorIDMwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjEwLjkKKyAzMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4xMAorIDMwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjExCisgMzAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTIKKyAzMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMworIDMwNS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE0CisgMzA2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTUKKyAzMDcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xNgorIDMwOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE3CisgMzA5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTgKKyAzMTAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xOQorIDMxMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIwCisgMzEyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjAuMQorIDMxMy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIwLjIKKyAz MTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yMQor IDMxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIy CisgMzE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MjMKKyAzMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny4yNAorIDMxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjI1CisgMzE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuMjYKKyAzMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4Ny4yNi4xCisgMzIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuMjYuMgorIDMyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjI3CisgMzIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDgKKyAzMjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4OQorIDMyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g5LjAKKyAzMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4OS4xCisgMzI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDkuMgorIDMyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g5LjMKKyAzMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4MTAKKyAzMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4aWlpCisgMzMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeGlpaS4xCisgMzMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGlpaS4xLjEKKyAzMzMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEuMgorIDMzNC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWkuMS4yLjEKKyAzMzUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlpLjEuMi4yCisgMzM2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeGlpaS4xLjIuMwor IDMzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWku MgorIDMzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hp dgorIDMzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3h2 CisgMzQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyAzNDEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2JyZXZpZXdzLmh0bWwKKyAzNDIuIGh0dHA6 Ly93d3cuYmh1c2EuY29tLworIDM0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L21h bnVhbHMuaHRtbCNja2RlCisgMzQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvbWFu dWFscy5odG1sI2t0YgorIDM0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L25ld3Mu aHRtbAorIDM0Ni4gbmV3czpjb21wLnByb3RvY29scy5rZXJtaXQuYW5ub3VuY2UKKyAzNDcuIG5l d3M6Y29tcC5wcm90b2NvbHMua2VybWl0Lm1pc2MKKyAzNDguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2IyLmh0bQorIDM0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0CisgMzUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDQuMworIDM1MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g0LjIzCisgMzUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuNS4xCisgMzUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNQorIDM1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjcuMQorIDM1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuCisgMzU2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tiMi5odG0KKyAzNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny45LjIKKyAzNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xNQorIDM1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g5LjEKKyAzNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS42CisgMzYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNAorIDM2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuMQorIDM2My4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI21qZAorIDM2NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI21qZAorIDM2NS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyAzNjYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDM2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrYjIuaHRtCisgMzY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDcuNQorIDM2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gyLjEyCisgMzcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDEuNQorIDM3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g0LjkuMQorIDM3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3g2LjYuNQorIDM3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyAzNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xOAorIDM3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjQKKyAzNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4xNQorIDM3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMKKyAzNzguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4zCisgMzc5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNworIDM4MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEKKyAzODEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45LjEKKyAzODIuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjY2ZnLnR4dAorIDM4My4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NjZmcudHh0CisgMzg0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMjIuNAorIDM4NS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjUKKyAzODYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDM4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyLjUKKyAzODguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMgorIDM4OS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTYKKyAzOTAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43CisgMzkxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMy41CisgMzkyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNQorIDM5My4gaHR0cDov L3d3dy50ZWxlZm9uaWNhLmVzL2NhbWJpb2RlbnVtZXJhY2lvbi8KKyAzOTQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41CisgMzk1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyAzOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4yLjIKKyAzOTcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xLjExCisgMzk4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuMS4xMworIDM5OS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTIKKyA0MDAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQwMS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMQorIDQwMi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNDAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tiMi5odG0KKyA0MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4Mi4xLjcKKyA0MDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Mi4xLjYKKyA0MDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2IyLmh0bQorIDQwNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi90 ZWxuZXQudHh0CisgNDA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVsbmV0Lmh0 bQorIDQwOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi90ZWxuZXQudHh0Cisg NDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVsbmV0Lmh0bQorIDQxMS4gZnRw Oi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMTU3Mi50eHQKKyA0MTIuIGZ0cDovL2Z0cC5pc2ku ZWR1L2luLW5vdGVzL3JmYzc3OS50eHQKKyA0MTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2IyLmh0bQorIDQxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3gyLjEwCisgNDE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDIuOAorIDQxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gxLjUKKyA0MTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4NC4yMAorIDQxOC4gaHR0cDovL3d3dy5wc3kudXEub3ouYXUvfmZ0cC9D cnlwdG8vCisgNDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRt CisgNDIwLiBodHRwOi8vc3JwLnN0YW5mb3JkLmVkdS9zcnAvCisgNDIxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDIuNy4xLAorIDQyMi4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja2NjZmcudHh0CisgNDIzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtCisgNDI0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0MjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Mi43CisgNDI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDIuMAorIDQyNy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvZi9ja3VpbnMudHh0CisgNDI4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9mL2NrdWJ3ci50eHQKKyA0MjkuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Yv Y2t1aW5zLnR4dAorIDQzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lrc2QuaHRt bCN4NC4yCisgNDMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCisg NDMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi44 LjEKKyA0MzMuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzE5NDUudHh0CisgNDM0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNQorIDQzNS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gzLjIKKyA0MzYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4My4yCisgNDM3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0MzguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDQzOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g1LjQKKyA0NDAuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2YvY2t1YndyLnR4dAorIDQ0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCisgNDQyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCisgNDQzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4zCisgNDQ0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMworIDQ0NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCisgNDQ2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEKKyA0NDcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xNQorIDQ0OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuNAorIDQ0OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjcKKyA0NTAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjMKKyA0NTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjEuMwor IDQ1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNDUzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4yCisgNDU0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNQorIDQ1NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuOC4yCisg NDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMwor IDQ1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEw CisgNDU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu MTEKKyA0NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4xNQorIDQ2MC4gaHR0cDovL3d3dy50ZWxzdHJhLmNvbS5hdS9kb2NzL1BHUC8KKyA0NjEuIGh0 dHA6Ly93d3cudGVsc3RyYS5jb20uYXUvZG9jcy9QR1AvcGdwZG9jMi9wZ3Bkb2MyXzE3Lmh0bWwK KyA0NjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG0KKyA0NjMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi43CisgNDY0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0NjUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Mi4xNAorIDQ2Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIzCisgNDY3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNworIDQ2OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNDY5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0NzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45CisgNDcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tiMi5odG0KKyA0NzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4MS41LjQKKyA0NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4NC4zCisgNDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDEuNS41CisgNDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuNQorIDQ3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyA0NzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41LjQKKyA0NzguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45CisgNDc5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS40CisgNDgwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNS41CisgNDgxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0ODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2IyLmh0bQorIDQ4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3gxLjUKKyA0ODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0NzAuaHRtbCN4MS42CisgNDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMTAKKyA0ODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4xMC4xMQorIDQ4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjYKKyA0ODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjIKKyA0ODkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMQorIDQ5MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUuNAorIDQ5MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkuMQorIDQ5Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjAuNgorIDQ5My4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIKKyA0OTQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xCisgNDk1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCisgNDk2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA0OTcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41CisgNDk4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4yCisgNDk5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCisgNTAwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMgorIDUwMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCisgNTAyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMi4yCisgNTAzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNy4xCisgNTA0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMgorIDUw NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjEwCisg NTA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuMTEu NQorIDUwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjAuNgorIDUwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjExCisgNTA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDQuOS4xCisgNTEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDQuMTEuMworIDUxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjkKKyA1MTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC45CisgNTEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDQuNS4xCisgNTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwjeDcuMTAKKyA1MTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN4Ny4xMC41CisgNTE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMworIDUxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjUKKyA1MTguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDUxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMKKyA1MjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMAorIDUyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjMKKyA1MjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMAorIDUyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE1CisgNTI0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTgKKyA1MjUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMAorIDUyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIwCisgNTI3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMjAKKyA1MjguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xOQorIDUyOS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE2CisgNTMwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTkKKyA1MzEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yMC4yLjMKKyA1MzIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS41CisgNTMz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNi41LjQK KyA1MzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4y Mi4yCisgNTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuMjIuMworIDUzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisg NTM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5odG0KKyA1MzguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4OS4zCisgNTM5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDUuMi4xCisgNTQwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNS4xCisgNTQx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuNS4yCisg NTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDYuNgor IDU0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3hpaWkK KyA1NDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4aWlp CisgNTQ1LiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMxNDg5LnR4dAorIDU0Ni4gZnRw Oi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjMxOS50eHQKKyA1NDcuIGh0dHA6Ly93d3cudW5p Y29kZS5vcmcvCisgNTQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDYuNi4yCisgNTQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDYuNi41LjEKKyA1NTAuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzI2 NDAudHh0CisgNTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDYuNi4yCisgNTUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcw Lmh0bWwjeDYuMAorIDU1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g2LjUKKyA1NTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4Ni40CisgNTU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tiMi5o dG0KKyA1NTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4yMQorIDU1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g2LjUKKyA1NTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Mi44CisgNTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuNworIDU2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g3LjIKKyA1NjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAu aHRtbCN4MS4xOQorIDU2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3 MC5odG1sI3g0LjkKKyA1NjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC4xCisgNTY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDcwLmh0bWwjeDQuMgorIDU2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ3MC5odG1sI3g0LjEKKyA1NjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4NC4yCisgNTY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDcwLmh0bWwjeDIuMS4xMQorIDU2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sI3gyLjEwCisgNTY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjZmVycnN0cmluZworIDU3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuNQorIDU3MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gyLjEuMTAKKyA1NzIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4OS4xCisgNTczLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjMKKyA1NzQuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yMworIDU3NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyCisgNTc2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDEuNgorIDU3Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIzCisgNTc4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMjQKKyA1NzkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4yNAorIDU4MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjIuMworIDU4 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrOTAuaHRtbAorIDU4Mi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEyCisgNTgzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuOQorIDU4NC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNTg1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMTEuMworIDU4Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjExLjMKKyA1ODcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41CisgNTg4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNworIDU4OS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjcKKyA1 OTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4yLjgu NAorIDU5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0 LjIuNQorIDU5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g3LjgKKyA1OTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4NC45LjEKKyA1OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQor IDU5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE5 CisgNTk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu MTYKKyA1OTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 Ny45LjEKKyA1OTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRt bCN4Ny41CisgNTk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDcuMworIDYwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g0LjExLjMKKyA2MDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 NzAuaHRtbCN4NC41LjEKKyA2MDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0NzAuaHRtbCN4Ny4xMAorIDYwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ3MC5odG1sI3g3LjEwLjEwCisgNjA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDEuNQorIDYwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIzCisgNjA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuNworIDYwNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjEwLjcKKyA2MDguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4xMS4zCisgNjA5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMTEKKyA2MTAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45CisgNjExLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMworIDYxMi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjMKKyA2MTMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny45LjIKKyA2MTQu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDYxNS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3LjIKKyA2MTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMgorIDYxNy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjcuMQorIDYxOC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjIyCisgNjE5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQuMworIDYy MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyA2 MjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4MS4yMgor IDYyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjYK KyA2MjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny41 CisgNjI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcu NQorIDYyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3 LjE5CisgNjI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDQuOS4xCisgNjI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0 bWwjeDkuMworIDYyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5o dG1sI3g3LjUKKyA2MjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2IyLmh0bQor IDYzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisgNjMx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKKyA2MzIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny40CisgNjMz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwKKyA2MzQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQorIDYzNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjIwLjIKKyA2MzYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4Ny4xMC41Cisg NjM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAu OQorIDYzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gx LjEwCisgNjM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuNQorIDY0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjcuMQorIDY0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lrc2QuaHRtbAor IDY0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g3LjE5 CisgNjQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDQu MTAKKyA2NDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC4xMQorIDY0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1s I3g0LjMKKyA2NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9na2VybWl0Lmh0bWwK KyA2NDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC4y MAorIDY0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2drZXJtaXQuaHRtbAorIDY0 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgNjUwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMworIDY1MS4gbWFpbHRv Omtlcm1pdEBjb2x1bWJpYS5lZHUKKyA2NTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0NzAuaHRtbCN0b3AKKyA2NTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKKyA2NTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja2VybWl0ODAudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a2VybWl0ODAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NmI2OGIK LS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrZXJtaXQ4MC50eHQKQEAgLTAsMCArMSwxMDI4NiBAQAorCisgICBbMV1UaGUgQ29sdW1iaWEg Q3Jvd24gVGhlIEtlcm1pdCBQcm9qZWN0IHwgQ29sdW1iaWEgVW5pdmVyc2l0eQorICAgNjEyIFdl c3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNSBVU0EgbyBbMl1rZXJtaXRAY29sdW1i aWEuZWR1CisgICAuLi5zaW5jZSAxOTgxCisgICBbM11Ib21lIFs0XUtlcm1pdCA5NSBbNV1DLUtl cm1pdCBbNl1TY3JpcHRzIFs3XUN1cnJlbnQgWzhdTmV3IFs5XUZBUQorICAgWzEwXVN1cHBvcnQK KworQy1LZXJtaXQgOC4wIFVwZGF0ZSBOb3RlcworCisgICBbIFsxMV1Db250ZW50cyBdIFsgWzEy XUMtS2VybWl0IF0gWyBbMTNdS2VybWl0IEhvbWUgXQorCitTZWNvbmQgU3VwcGxlbWVudCB0byBb MTRdVXNpbmcgQy1LZXJtaXQsIDJuZCBFZGl0aW9uCisKK0ZvciBDLUtlcm1pdCA4LjAKKworICAg QXMgb2YgQy1LZXJtaXQgdmVyc2lvbjogOC4wLjIxMQorICAgRGF0ZSBvZiBDLUtlcm1pdCByZWxl YXNlOiAxMCBBcHJpbCAyMDAzCisgICBUaGlzIGZpbGUgbGFzdCB1cGRhdGVkOiBNb24gU2VwIDEz IDA4OjUyOjM2IDIwMTAKKworICAgICAqIElGIFlPVSBBUkUgUkVBRElORyBBIFBMQUlOLVRFWFQg dmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50LCBub3RlIHRoYXQKKyAgICAgICBpdCBpcyBhIHBsYWlu LXRleHQgZHVtcCBvZiBhIFdlYiBwYWdlLiBZb3UgY2FuIHZpc2l0IHRoZSBvcmlnaW5hbAorICAg ICAgIChhbmQgcG9zc2libHkgbW9yZSB1cC10by1kYXRlKSBXZWIgcGFnZSBoZXJlOgorICBbMTVd aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisKKyAgICAgKiBJ ZiB5b3UgYXJlIHJlYWRpbmcgdGhlIEhUTUwgdmVyc2lvbiBvZiB0aGlzIGZpbGUgd2l0aCBhIEdV SSBXZWIKKyAgICAgICBicm93c2VyLCB0aGUgZmVhdHVyZXMgYWRkZWQgc2luY2UgQy1LZXJtaXQg OC4wLjIwMSBhcmUgc2hvd24gaW4gcmVkCisgICAgICAgaWYgeW91ciBicm93c2VyIGFuZCBtb25p dG9yIHBlcm1pdC4gRmVhdHVyZXMgdGhhdCB3ZXJlIG5ldyB0bworICAgICAgIHZlcnNpb25zIDgu MC4yMDAgYW5kIDIwMSBhcmUgaW4gYmxhY2suCisKK0F1dGhvcnM6IEZyYW5rIGRhIENydXogYW5k IENocmlzdGluZSBNLiBHaWFub25lCitBZGRyZXNzOiBUaGUgS2VybWl0IFByb2plY3QKKyAgICAg ICAgIENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgICAgICAgIDYxMiBXZXN0IDExNXRoIFN0cmVldAor ICAgICAgICAgTmV3IFlvcmsgTlkgMTAwMjUtNzc5OQorICAgICAgICAgVVNBCitGYXg6ICAgICAr MSAoMjEyKSA2NjItNjQ0MgorRS1NYWlsOiAgWzE2XWtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVk dQorV2ViOiAgICAgWzE3XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KK09yOiAgICAg IFsxOF1odHRwOi8vd3d3Lmtlcm1pdC1wcm9qZWN0Lm9yZy8KK09yOiAgICAgIFsxOV1odHRwOi8v d3d3LmNvbHVtYmlhLm55Yy5ueS51cy9rZXJtaXQvCisKK05PVElDRVMKKworICAgVGhpcyBkb2N1 bWVudDoKKyAgICAgICAgICBDb3B5cmlnaHQg77+9IDE5OTcsIDIwMDIsIEZyYW5rIGRhIENydXog YW5kIENocmlzdGluZSBNLiBHaWFub25lLgorICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisKKyAgIEtlcm1pdCA5NToKKyAgICAgICAgICBDb3B5cmlnaHQg77+9IDE5OTUsIDIwMDIsIFRy dXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlCisgICAgICAgICAgQ2l0eSBvZiBO ZXcgWW9yay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgQy1LZXJtaXQ6CisgICAgICAgICAg Q29weXJpZ2h0IO+/vSAxOTg1LCAyMDAyLAorICAgICAgICAgIFRydXN0ZWVzIG9mIENvbHVtYmlh IFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuIEFsbAorICAgICAgICAgIHJpZ2h0 cyByZXNlcnZlZC4gU2VlIHRoZSBDLUtlcm1pdCBbMjBdQ09QWUlORy5UWFQgZmlsZSBvciB0aGUK KyAgICAgICAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgWzIxXWNrY21haS5jIG1vZHVsZSBmb3Ig ZGlzY2xhaW1lciBhbmQKKyAgICAgICAgICBwZXJtaXNzaW9ucy4KKworICAgV2hlbiBLZXJiZXJv cyhUTSkgYW5kL29yIFNSUChUTSkgKFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQpIGFuZC9vcgorICAg ICAgICAgIFNTTC9UTFMgcHJvdG9jb2wgYXJlIGluY2x1ZGVkOgorICAgICAgICAgIFBvcnRpb25z IENvcHlyaWdodCDvv70gMTk5MCwgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YKKyAgICAgICAg ICBUZWNobm9sb2d5LgorICAgICAgICAgIFBvcnRpb25zIENvcHlyaWdodCDvv70gMTk5MSwgMTk5 MyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mCisgICAgICAgICAgQ2FsaWZvcm5pYS4KKyAg ICAgICAgICBQb3J0aW9ucyBDb3B5cmlnaHQg77+9IDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5 OTUgYnkgQVQmVC4KKyAgICAgICAgICBQb3J0aW9ucyBDb3B5cmlnaHQg77+9IDE5OTcsIFN0YW5m b3JkIFVuaXZlcnNpdHkuCisgICAgICAgICAgUG9ydGlvbnMgQ29weXJpZ2h0IO+/vSAxOTk1LTE5 OTcsIEVyaWMgWW91bmcgPGVheUBjcnlwdG9zb2Z0LmNvbT4uCisKKyAgIEZvciB0aGUgZnVsbCB0 ZXh0IG9mIHRoZSB0aGlyZC1wYXJ0eSBjb3B5cmlnaHQgbm90aWNlcywgc2VlCisgICBbMjJdQXBw ZW5kaXggVi4KKworV0hBVCBJUyBJTiBUSElTIEZJTEUKKworICAgVGhpcyBmaWxlIGxpc3RzIGNo YW5nZXMgbWFkZSB0byBDLUtlcm1pdCBzaW5jZSB2ZXJzaW9uIDcuMCB3YXMgcmVsZWFzZWQKKyAg IGluIEphbnVhcnkgMjAwMC4gVXNlIHRoaXMgZmlsZSBhcyBhIHN1cHBsZW1lbnQgdG86CisKKyAg ICAgKiBUaGUgc2Vjb25kIGVkaXRpb24gb2YgWzIzXVVzaW5nIEMtS2VybWl0OyBhbmQ6CisgICAg ICogVGhlIFsyNF1DLUtlcm1pdCA3LjAgVXBkYXRlIE5vdGVzLiBBbHNvIGF2YWlsYWJsZSBpbiBw bGFpbi10ZXh0CisgICAgICAgZm9ybSBhcyBbMjVdY2tlcm1pdDcwLnR4dC4KKworICAgdW50aWwg dGhlIHRoaXJkIGVkaXRpb24gb2YgVXNpbmcgQy1LZXJtaXQgaXMgcHVibGlzaGVkLiBXZSBhcG9s b2dpemUKKyAgIGZvciB0aGUgc2NhdHRlcmVkIGRvY3VtZW50YXRpb24gYW5kIHdpbGwgY29uc29s aWRhdGUgaXQgd2hlbiB3ZSBhcmUKKyAgIGFibGUuCisKK0FERElUSU9OQUwgRklMRVMKKworICAg U2V2ZXJhbCBvdGhlciBmaWxlcyBhY2NvbXBhbnkgdGhpcyBuZXcgS2VybWl0IHJlbGVhc2U6CisK KyAgIFsyNl1ja3V0dXRvci5odG1sCisgICAgICAgICAgQy1LZXJtaXQgVHV0b3JpYWwgKGZvciBV bml4KS4gQWxzbyBkaXN0cmlidXRlZCBpbiBOcm9mZiBmb3JtIGFzCisgICAgICAgICAgWzI3XWNr dWtlci5uciwgdGhlIFVuaXggQy1LZXJtaXQgbWFudWFsIHBhZ2UuCisKKyAgIFsyOF1zZWN1cml0 eS5odG0KKyAgICAgICAgICBEaXNjdXNzaW9uIG9mIEtlcm1pdCdzIG5ldyBhdXRoZW50aWNhdGlv biBhbmQgZW5jcnlwdGlvbgorICAgICAgICAgIGZlYXR1cmVzLCB1cGRhdGVkIGZvciBDLUtlcm1p dCA4LjAuCisKKyAgIFsyOV10ZWxuZXQuaHRtCisgICAgICAgICAgRGV0YWlsZWQgZG9jdW1lbnRh dGlvbiBvZiBLZXJtaXQncyBUZWxuZXQgY2xpZW50LCB1cGRhdGVkIGZvcgorICAgICAgICAgIEMt S2VybWl0IDguMC4KKworICAgWzMwXWZ0cHNjcmlwdHMuaHRtbAorICAgICAgICAgIFR1dG9yaWFs OiBXcml0aW5nIEZUUCBhdXRvbWF0aW9uIHNjcmlwdHMKKworICAgWzMxXWNrY2J3ci5odG1sCisg ICAgICAgICAgUGxhdGZvcm0taW5kZXBlbmRlbnQgQy1LZXJtaXQgaGludHMgYW5kIHRpcHMuIEFs c28gZGlzdHJpYnV0ZWQKKyAgICAgICAgICBpbiBwbGFpbiB0ZXh0IGZvcm0gYXMgWzMyXWNrY2J3 ci50eHQKKworICAgWzMzXWNrdWJ3ci5odG1sCisgICAgICAgICAgVW5peC1zcGVjaWZpYyBDLUtl cm1pdCBoaW50cyBhbmQgdGlwcy4gQWxzbyBkaXN0cmlidXRlZCBpbiBwbGFpbgorICAgICAgICAg IHRleHQgZm9ybSBhcyBbMzRdY2t1YndyLnR4dC4KKworICAgWzM1XWNrdmJ3ci5odG1sCisgICAg ICAgICAgVk1TLXNwZWNpZmljIEMtS2VybWl0IGhpbnRzIGFuZCB0aXBzLiBBbHNvIGRpc3RyaWJ1 dGVkIGluIHBsYWluCisgICAgICAgICAgdGV4dCBmb3JtIGFzIFszNl1ja3Zid3IudHh0LgorCisg ICBbMzddY2t1aW5zLmh0bWwKKyAgICAgICAgICBVbml4IEMtS2VybWl0IGluc3RhbGxhdGlvbiBp bnN0cnVjdGlvbnMuIEFsc28gZGlzdHJpYnV0ZWQgaW4KKyAgICAgICAgICBwbGFpbiB0ZXh0IGZv cm0gYXMgWzM4XWNrdWlucy50eHQuCisKKyAgIFszOV1ja3ZpbnMuaHRtbAorICAgICAgICAgIFZN UyBDLUtlcm1pdCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLiBBbHNvIGRpc3RyaWJ1dGVkIGlu CisgICAgICAgICAgcGxhaW4gdGV4dCBmb3JtIGFzIFs0MF1ja3ZpbnMudHh0LgorCisgICBbNDFd Y2tjY2ZnLmh0bWwKKyAgICAgICAgICBDb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25z LiBBbHNvIGRpc3RyaWJ1dGVkIGluIHBsYWluCisgICAgICAgICAgdGV4dCBmb3JtIGFzIFs0Ml1j a2NjZmcudHh0LgorCisgICBbNDNdY2tjcGxtLmh0bWwKKyAgICAgICAgICBDLUtlcm1pdCBQcm9n cmFtIExvZ2ljIE1hbnVhbC4gQWxzbyBkaXN0cmlidXRlZCBpbiBwbGFpbiB0ZXh0CisgICAgICAg ICAgZm9ybSBhcyBbNDRdY2tjcGxtLnR4dC4KKworICAgWzQ1XWlrc2QuaHRtbAorICAgICAgICAg IEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIEFkbWluaXN0cmF0b3JzIEd1aWRlIGZvciBVbml4Lgor CisgICBbNDZdc2tlcm1pdC5odG1sCisgICAgICAgICAgQy1LZXJtaXQgYXMgYW4gU1NIIFN1YnN5 c3RlbSAoU0ZUUCBzZXJ2ZXIgcmVwbGFjZW1lbnQpLgorCisgICBbIFs0N11Ub3AgXSBbIFs0OF1D LUtlcm1pdCBdIFsgWzQ5XUtlcm1pdCBIb21lIF0KKworQ09OVEVOVFMKKworICAgICBbNTBdMC4g V0hBVCdTIE5FVworICAgICBbNTFdMS4gRklYRVMgU0lOQ0UgVkVSU0lPTiA3LjAuMTk2CisgICAg IFs1Ml0yLiBTU0ggQU5EIEhUVFAKKyAgICAgICAgIFs1M10yLjEuIFNTSCBDb25uZWN0aW9ucwor ICAgICAgICAgWzU0XTIuMi4gSFRUUCBDb25uZWN0aW9ucworICAgICAgICAgICAgWzU1XTIuMi4x LiBIVFRQIENvbW1hbmQgU3dpdGNoZXMKKyAgICAgICAgICAgIFs1Nl0yLjIuMi4gSFRUUCBBY3Rp b24gQ29tbWFuZHMKKyAgICAgICAgICAgIFs1N10yLjIuMy4gSFRUUCBIZWFkZXJzCisgICAgICAg ICAgICBbNThdMi4yLjQuIFNlY3VyZSBIVFRQIENvbm5lY3Rpb25zCisgICAgICAgICAgICBbNTld Mi4yLjUuIEhUVFAgVmFyaWFibGVzCisgICAgICAgICAgICBbNjBdMi4yLjYuIFRoZSBIVFRQIENv bW1hbmQtTGluZSBQZXJzb25hbGl0eQorICAgICBbNjFdMy4gVEhFIEJVSUxULUlOIEZUUCBDTElF TlQKKyAgICAgICAgIFs2Ml0zLjEuIE1ha2luZyBhbmQgTWFuYWdpbmcgRlRQIENvbm5lY3Rpb25z CisgICAgICAgICAgICBbNjNdMy4xLjEuIEtlcm1pdCBDb21tYW5kLUxpbmUgT3B0aW9ucyBmb3Ig RlRQCisgICAgICAgICAgICBbNjRdMy4xLjIuIFRoZSBGVFAgQ29tbWFuZC1MaW5lIFBlcnNvbmFs aXR5CisgICAgICAgICAgICBbNjVdMy4xLjMuIFRoZSBGVFAgVVJMIEludGVycHJldGVyCisgICAg ICAgICAgICBbNjZdMy4xLjQuIEludGVyYWN0aXZlIEZUUCBTZXNzaW9uIEVzdGFibGlzaG1lbnQK KyAgICAgICAgIFs2N10zLjIuIE1ha2luZyBTZWN1cmUgRlRQIENvbm5lY3Rpb25zCisgICAgICAg ICBbNjhdMy4zLiBTZXR0aW5nIEZUUCBQcmVmZXJlbmNlcworICAgICAgICAgWzY5XTMuNC4gTWFu YWdpbmcgRGlyZWN0b3JpZXMgYW5kIEZpbGVzCisgICAgICAgICBbNzBdMy41LiBVcGxvYWRpbmcg RmlsZXMgV2l0aCBGVFAKKyAgICAgICAgICAgIFs3MV0zLjUuMS4gRlRQIFBVVCBTd2l0Y2hlcwor ICAgICAgICAgICAgWzcyXTMuNS4yLiBVcGRhdGUgTW9kZQorICAgICAgICAgICAgWzczXTMuNS4z LiBSZWNvdmVyeQorICAgICAgICAgWzc0XTMuNi4gRG93bmxvYWRpbmcgRmlsZXMgV2l0aCBGVFAK KyAgICAgICAgICAgIFs3NV0zLjYuMS4gRlRQIEdFVCBTd2l0Y2hlcworICAgICAgICAgICAgWzc2 XTMuNi4yLiBGaWxlbmFtZSBDb2xsaXNpb25zCisgICAgICAgICAgICBbNzddMy42LjMuIFJlY292 ZXJ5CisgICAgICAgICBbNzhdMy43LiBUcmFuc2xhdGluZyBDaGFyYWN0ZXIgU2V0cworICAgICAg ICAgICAgWzc5XTMuNy4xLiBDaGFyYWN0ZXIgU2V0cyBhbmQgVXBsb2FkaW5nCisgICAgICAgICAg ICBbODBdMy43LjIuIENoYXJhY3RlciBTZXRzIGFuZCBEb3dubG9hZGluZworICAgICAgICAgWzgx XTMuOC4gRlRQIENvbW1hbmQgU2hvcnRjdXRzCisgICAgICAgICBbODJdMy45LiBEdWFsIFNlc3Np b25zCisgICAgICAgICBbODNdMy4xMC4gQXV0b21hdGluZyBGVFAgU2Vzc2lvbnMKKyAgICAgICAg ICAgIFs4NF0zLjEwLjEuIEZUUC1TcGVjaWZpYyBWYXJpYWJsZXMgYW5kIEZ1bmN0aW9ucworICAg ICAgICAgICAgWzg1XTMuMTAuMi4gRXhhbXBsZXMKKyAgICAgICAgICAgIFs4Nl0zLjEwLjMuIEF1 dG9tYXRpbmcgU2VjdXJlIEZUUCBDb25uZWN0aW9ucworICAgICAgICAgWzg3XTMuMTEuIEFkdmFu Y2VkIEZUUCBQcm90b2NvbCBGZWF0dXJlcyAgWzg4XTQuIEZJTEUgU0NBTk5JTkcKKyAgICBbODld NS4gRklMRSBBTkQgRElSRUNUT1JZIE5BTUVTIENPTlRBSU5JTkcgU1BBQ0VTCisgICAgWzkwXTYu IE9USEVSIENPTU1BTkQgUEFSU0lORyBJTVBST1ZFTUVOVFMKKyAgICAgICAgIFs5MV02LjEuIEdy b3VwaW5nIE1hY3JvIEFyZ3VtZW50cworICAgICAgICAgWzkyXTYuMi4gRGlyZWN0b3J5IGFuZCBG aWxlIE5hbWUgQ29tcGxldGlvbgorICAgICAgICAgWzkzXTYuMy4gUGFzc2luZyBBcmd1bWVudHMg dG8gQ29tbWFuZCBGaWxlcworICAgICAgICAgWzk0XTYuNC4gTW9yZS1Qcm9tcHRpbmcKKyAgICAg ICAgIFs5NV02LjUuIENvbW1hcyBpbiBNYWNybyBEZWZpbml0aW9ucworICAgICAgICAgWzk2XTYu Ni4gQXJyb3cgS2V5cworICAgIFs5N103LiBORVcgQ09NTUFORFMgQU5EIFNXSVRDSEVTCisgICAg Wzk4XTguIFNDUklQVElORyBJTVBST1ZFTUVOVFMKKyAgICAgICAgIFs5OV04LjEuIFBlcmZvcm1h bmNlIGFuZCBEZWJ1Z2dpbmcKKyAgICAgICAgIFsxMDBdOC4yLiBVc2luZyBNYWNyb3MgYXMgTnVt ZXJpYyBWYXJpYWJsZXMKKyAgICAgICAgIFsxMDFdOC4zLiBOZXcgSUYgQ29uZGl0aW9ucworICAg ICAgICAgWzEwMl04LjQuIFRoZSBPTl9VTktOT1dOX0NPTU1BTkQgYW5kIE9OX0NEIE1hY3Jvcwor ICAgICAgICAgWzEwM104LjUuIFRoZSBTSE9XIE1BQ1JPIENvbW1hbmQKKyAgICAgICAgIFsxMDRd OC42LiBBcnJheXMKKyAgICAgICAgIFsxMDVdOC43LiBOZXcgb3IgSW1wcm92ZWQgQnVpbHQtaW4g VmFyaWFibGVzIGFuZCBGdW5jdGlvbnMKKyAgICAgICAgIFsxMDZdOC44LiBUaGUgUkVUVVJOIGFu ZCBFTkQgQ29tbWFuZHMKKyAgICAgICAgIFsxMDddOC45LiBVTkRFRklOaW5nIEdyb3VwcyBvZiBW YXJpYWJsZXMKKyAgICAgICAgIFsxMDhdOC4xMC4gVGhlIElOUFVUIGFuZCBNSU5QVVQgQ29tbWFu ZHMKKyAgICAgICAgIFsxMDldOC4xMS4gTGVhcm5lZCBTY3JpcHRzCisgICAgICAgICBbMTEwXTgu MTIuIFBhdHRlcm4gTWF0Y2hpbmcKKyAgICAgICAgIFsxMTFdOC4xMy4gRGF0ZXMgYW5kIFRpbWVz CisgICAgICAgICBbMTEyXTguMTQuIFRyYXBwaW5nIEtleWJvYXJkIEludGVycnVwdGlvbgorICAg IFsxMTNdOS4gUy1FWFBSRVNTSU9OUworICAgICAgICAgWzExNF05LjEuIFdoYXQgaXMgYW4gUy1F eHByZXNzaW9uPworICAgICAgICAgWzExNV05LjIuIEludGVnZXIgYW5kIEZsb2F0aW5nLVBvaW50 LUFyaXRobWV0aWMKKyAgICAgICAgIFsxMTZdOS4zLiBIb3cgdG8gVXNlIFMtRXhwcmVzc2lvbnMK KyAgICAgICAgIFsxMTddOS40LiBTdW1tYXJ5IG9mIEJ1aWx0LWluIENvbnN0YW50cyBhbmQgT3Bl cmF0b3JzCisgICAgICAgICBbMTE4XTkuNS4gVmFyaWFibGVzCisgICAgICAgICBbMTE5XTkuNi4g QXNzaWdubWVudHMgYW5kIFNjb3BlCisgICAgICAgICBbMTIwXTkuNy4gQ29uZGl0aW9uYWwgRXhw cmVzc2lvbnMKKyAgICAgICAgIFsxMjFdOS44LiBFeHRlbnNpYmlsaXR5CisgICAgICAgICBbMTIy XTkuOS4gRXhhbXBsZXMKKyAgICAgICAgIFsxMjNdOS4xMC4gRGlmZmVyZW5jZXMgZnJvbSBBbGdl YnJhaWMgTm90YXRpb24KKyAgICAgICAgIFsxMjRdOS4xMS5EaWZmZXJlbmNlcyBmcm9tIExpc3AK KyAgICBbMTI1XTEwLiBGSUxFIFRSQU5TRkVSCisgICAgWzEyNl0xMS4gTU9ERU1TIEFORCBESUFM SU5HCisgICAgWzEyN10xMi4gVEVSTUlOQUwgQ09OTkVDVElPTgorICAgIFsxMjhdMTMuIENIQVJB Q1RFUiBTRVRTCisgICAgWzEyOV0xNC4gRElBTE9VVCBGUk9NIFRFTE5FVCBURVJNSU5BTCBTRVJW RVJTCisgICAgWzEzMF0xNS4gQ09QSU5HIFdJVEggQlJPS0VOIEtFUk1JVCBQQVJUTkVSUworICAg IFsxMzFdMTYuIE5FVyBDT01NQU5ELUxJTkUgT1BUSU9OUworICAgIFsxMzJdMTcuIExPR1MKKwor ICAgWyBbMTMzXVRvcCBdIFsgWzEzNF1DLUtlcm1pdCBdIFsgWzEzNV1LZXJtaXQgSG9tZSBdCisK KzAuIFdIQVQnUyBORVcKKworICAgVGhlIEluaXRpYWxpemF0aW9uIGFuZCBDdXN0b21pemF0aW9u IEZpbGVzCisgICAgICAgICAgQy1LZXJtaXQgOC4wIG5vdyBzdXBwb3J0cyBzcGVjaWZpY2F0aW9u IG9mIHRoZSBpbml0aWFsaXphdGlvbgorICAgICAgICAgIGZpbGUgbmFtZSAocGF0aCkgaW4gYW4g ZW52aXJvbm1lbnQgdmFyaWFibGUsIENLRVJNSVRfSU5JLiBJdAorICAgICAgICAgIGFsc28gcmVs aWVzIGZhciBsZXNzIHRoYW4gYmVmb3JlIG9uIHRoZSBpbml0aWFsaXphdGlvbiBmb3IKKyAgICAg ICAgICBmdW5jdGlvbmluZy4gU2VlIFsxMzZdU2VjdGlvbiA1IG9mIHRoZSBVbml4IEMtS2VybWl0 CisgICAgICAgICAgWzEzN11pbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBkZXRhaWxzLiBB cyBvZiB2ZXJzaW9uCisgICAgICAgICAgOC4wLjIwMSwgQy1LZXJtaXQgYWxzbyBleGVjdXRlcyB5 b3VyIGN1c3RvbWl6YXRpb24gZmlsZSAoaWYgeW91CisgICAgICAgICAgaGF2ZSBvbmUpIGV2ZW4g aWYgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgd2FzIG5vdCBmb3VuZC4KKyAgICAgICAgICBQcmV2 aW91c2x5LCB0aGUgY3VzdG9taXphdGlvbiBmaWxlIHdhcyBleGVjdXRlZCBieSBhIFRBS0UKKyAg ICAgICAgICBjb21tYW5kIGluIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIChhbmQgaXQgc3RpbGwg aXMsIGlmIGFuCisgICAgICAgICAgaW5pdGlhbGl6YXRpb24gaXMgZm91bmQpLgorCisgICBJbmNv bXBhdGlibGUgQ2hhbmdlcworICAgICAgICAgIEFzIGFsd2F5cywgd2UgZG8gb3VyIGJlc3QgdG8g YXZvaWQgY2hhbmdlcyB0aGF0IGJyZWFrIGV4aXN0aW5nCisgICAgICAgICAgc2NyaXB0cy4gSG93 ZXZlciwgQy1LZXJtaXQgOC4wIGRvZXMgaW5jbHVkZSBhIHJhdGhlciBwZXJ2YXNpdmUKKyAgICAg ICAgICBzeW50YXggY2hhbmdlIHRoYXQgbWlnaHQgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHNjcmlw dHMgdGhhdAorICAgICAgICAgIGRlcGVuZCBvbiB0aGUgcHJldmlvdXMgYmVoYXZpb3IuIEFzIGRl c2NyaWJlZCBpbiBbMTM4XVNlY3Rpb24gNSwKKyAgICAgICAgICBDLUtlcm1pdCBub3cgYWNjZXB0 cyBkb3VibGVxdW90ZXMgaW4gbW9zdCBjb250ZXh0cyB3aGVyZSB5b3UKKyAgICAgICAgICBwcmV2 aW91c2x5IGhhZCB0byB1c2UgYnJhY2VzIHRvIGdyb3VwIG11bHRpcGxlIHdvcmRzIGludG8gYQor ICAgICAgICAgIHNpbmdsZSBmaWVsZCwgb3IgdG8gZm9yY2UgaW5jbHVzaW9uIG9mIGxlYWRpbmcg b3IgdHJhaWxpbmcKKyAgICAgICAgICBibGFua3MuIE1vc3Qgbm90aWNlYWJseSwgaW4gQy1LZXJt aXQgNy4wIGFuZCBlYXJsaWVyOgorCisgIGVjaG8ge3RoaXMgaXMgYSBzdHJpbmd9CisKKyAgICAg ICAgICB3b3VsZCBwcmludDoKKworICB0aGlzIGlzIGEgc3RyaW5nCisKKyAgICAgICAgICB3aGVy ZWFzOgorCisgIGVjaG8gInRoaXMgaXMgYSBzdHJpbmciCisKKyAgICAgICAgICBwcmludGVkOgor CisgICJ0aGlzIGlzIGEgc3RyaW5nIgorCisgICAgICAgICAgSW4gQy1LZXJtaXQgOC4wLCBib3Ro IHByaW50OgorCisgIHRoaXMgaXMgYSBzdHJpbmcKKworICAgICAgICAgIFRvIGZvcmNlIHRoZSBk b3VibGVxdW90ZXMgdG8gYmUgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBzdHJpbmcsCisgICAgICAg ICAgdXNlIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorCisgIGVjaG8geyJ0aGlzIGlz IGEgc3RyaW5nIn0KKyAgZWNobyAiInRoaXMgaXMgYSBzdHJpbmciIgorCisgICAgICAgICAgU2lt aWxhcmx5LCB0byBmb3JjZSBicmFjZXMgdG8gYmUgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBzdHJp bmc6CisKKyAgZWNobyAie3RoaXMgaXMgYSBzdHJpbmd9IgorICBlY2hvIHt7dGhpcyBpcyBhIHN0 cmluZ319CisKKyAgICAgICAgICBPdGhlciBpbmNvbXBhdGliaWxpdGllczoKKworICAgICAgICAg MS4gVXNpbmcgdGhlIFNFVCBIT1NUIGNvbW1hbmQgdG8gbWFrZSBIVFRQIGNvbm5lY3Rpb25zIGlz IG5vCisgICAgICAgICAgICBsb25nZXIgc3VwcG9ydGVkLiBJbnN0ZWFkLCB1c2UgdGhlIG5ldyBI VFRQIE9QRU4gY29tbWFuZCwKKyAgICAgICAgICAgIGRlc2NyaWJlZCBpbiBbMTM5XVNlY3Rpb24g Mi4yLgorCisgICBDLUtlcm1pdCA3LjEgQWxwaGEuMDEgKDggRGVjZW1iZXIgMjAwMCkKKworICAg ICBJdHMgbWFqb3IgbmV3IGZlYXR1cmVzIGFyZSB0aG9zZSBsaXN0ZWQgaW4gdGhlIFsxNDBdVGFi bGUgb2YKKyAgICAgICAgICBDb250ZW50czogdGhlIEZUUCBjbGllbnQsIGZpbGUgc2Nhbm5pbmcs IGNvbW1hbmQgcGFyc2luZyBhbmQKKyAgICAgICAgICBzY3JpcHRpbmcgaW1wcm92ZW1lbnRzLCBT LUV4cHJlc3Npb25zLCBhbmQgc3VwcG9ydCBmb3IgdGhlCisgICAgICAgICAgVGVsbmV0IENvbSBQ b3J0IE9wdGlvbiwgcGx1cyB3aWRlciBhdmFpbGFiaWxpdHkgb2YgdGhlIEtlcmJlcm9zLAorICAg ICAgICAgIFNTTC9UTFMsIGFuZCBTUlAgc2VjdXJpdHkgb3B0aW9ucyBmb3Igc2VjdXJlIEludGVy bmV0CisgICAgICAgICAgY29ubmVjdGlvbnMuCisKKyAgIEMtS2VybWl0IDcuMS4xOTkgQWxwaGEu MDIgKDQgSmFudWFyeSAyMDAxKQorCisgICAgICAgICAgKyBDLUtlcm1pdCBub3cgYWNjZXB0cyBb MTQxXUZUUCwgVEVMTkVULCBhbmQgSUtTRCBVUkxzIGFzIGl0cworICAgICAgICAgICAgZmlyc3Qg Y29tbWFuZC1saW5lIGFyZ3VtZW50LgorICAgICAgICAgICsgQ2hhcmFjdGVyLXNldCB0cmFuc2xh dGlvbiBhZGRlZCB0byB0aGUgRlRQIGNsaWVudCBmb3IKKyAgICAgICAgICAgIFsxNDJdZmlsZW5h bWVzLgorICAgICAgICAgICsgT3B0aW9uYWwgWzE0M11zZXR0aW5nIG9mIGRhdGUgb2YgaW5jb21p bmcgZmlsZXMgYnkgRlRQIFtNXUdFVAorICAgICAgICAgICAgZnJvbSB0aGUgc2VydmVyIGRhdGUu CisgICAgICAgICAgKyBbMTQ0XUZUUCBDSEVDSyBmaWxlbmFtZSBhZGRlZCB0byBsZXQgRlRQIGNs aWVudCBjaGVjayB0aGUKKyAgICAgICAgICAgIGV4aXN0ZW5jZSBvZiBhIGZpbGUgb24gdGhlIHNl cnZlci4KKyAgICAgICAgICArIFsxNDVdRlRQIEdFVCAvTkFNRUxJU1Q6ZmlsZW5hbWUgYWRkZWQg dG8gZ2V0IGxpc3Qgb2Ygc2VydmVyCisgICAgICAgICAgICBmaWxlbmFtZXMgaW50byBhIGxvY2Fs IGZpbGUuCisgICAgICAgICAgKyBbMTQ2XUZUUCBbTV1QVVQgL1NFUlZFUi1SRU5BTUU6dGVtcGxh dGUgYWRkZWQgdG8gbWFrZSBzZXJ2ZXIKKyAgICAgICAgICAgIHJlbmFtZSBhIGZpbGUgYXMgaW5k aWNhdGVkIGJ5IHRoZSB0ZW1wbGF0ZSBhZnRlciBpdCBoYXMKKyAgICAgICAgICAgIGFycml2ZWQg Y29tcGxldGVseS4KKyAgICAgICAgICArIEZUUCBbTV1HRVQgL1NFUlZFUi1SRU5BTUU6dGVtcGxh dGUgYWRkZWQgdG8gbWFrZSBzZXJ2ZXIgcmVuYW1lCisgICAgICAgICAgICBhIGZpbGUgYXMgaW5k aWNhdGVkIGJ5IHRoZSB0ZW1wbGF0ZSBhZnRlciBpdCBoYXMgYmVlbiBzZW50CisgICAgICAgICAg ICBjb21wbGV0ZWx5LgorICAgICAgICAgICsgRlRQIFsxNDddVkRJUkVDVE9SWSBhZGRlZCBmb3Ig Z2V0dGluZyB2ZXJib3NlIGRpcmVjdG9yeQorICAgICAgICAgICAgbGlzdGluZ3MgZnJvbSBUT1BT LTIwLgorICAgICAgICAgICsgWzE0OF1GVFAgVFlQRSBURU5FWCBhZGRlZCBmb3IgdHJhbnNmZXJy aW5nIDgtYml0IGJpbmFyeSBmaWxlcworICAgICAgICAgICAgd2l0aCBQRFAtMTBzLgorICAgICAg ICAgICsgQWRkZWQgWzE0OV1hdXRvbWF0aWMgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmcgZm9y IEZUUAorICAgICAgICAgICAgW01dR0VULCBiYXNlZCBvbiBmaWxlbmFtZSBwYXR0ZXJucyAoZS5n LiAqLnppcCwgKi5neiwgKi5leGUKKyAgICAgICAgICAgIGFyZSBiaW5hcnk7ICoudHh0LCAqLmMg YXJlIHRleHQpLgorICAgICAgICAgICsgWzE1MF1TRVQgU0VORCBJLVBBQ0tFVFMgT0ZGIGFkZGVk IGZvciBjb3Bpbmcgd2l0aCBLZXJtaXQKKyAgICAgICAgICAgIHNlcnZlcnMgdGhhdCBkbyBub3Qg c3VwcG9ydCBJIHBhY2tldHMuCisgICAgICAgICAgKyBBIG5ldyBvcHRpb24gd2FzIGFkZGVkIHRv IFsxNTFdXGZ3b3JkKCkgYW5kIFxmc3BsaXQoKSBmb3IKKyAgICAgICAgICAgIHBhcnNpbmcgY29t bWEtc2VwYXJhdGVkIGxpc3RzIHRoYXQgbWlnaHQgY29udGFpbiBlbXB0eQorICAgICAgICAgICAg ZWxlbWVudHMuCisgICAgICAgICAgKyBCdWcgZml4ZXMgaW5jbHVkaW5nOgorICAgICAgICAgICAg ICAgbyB7fSBvciAiIiBjb3VsZCBub3QgYmUgdXNlZCBhcyBleHBlY3RlZCB0byByZXByZXNlbnQg dGhlCisgICAgICAgICAgICAgICAgIGVtcHR5IHN0cmluZy4KKyAgICAgICAgICAgICAgIG8gLC0g b24gYSBsaW5lIGJ5IGl0c2VsZiBpbiBhIG1hY3JvIGRlZmluaXRpb24gY2F1c2VkCisgICAgICAg ICAgICAgICAgIHN1YnNlcXVlbnQgc3RhdGVtZW50cyB0byBiZSBza2lwcGVkLgorICAgICAgICAg ICAgICAgbyBGVFAgW01dR0VUIGRpZG4ndCB3b3JrIHJpZ2h0IGlmIHBhdGggc2VnbWVudHMgd2Vy ZQorICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiB0aGUgZmlsZXNwZWMuCisgICAgICAgICAg ICAgICBvIEZUUCBNR0VULCBpZiBpbnRlcnJ1cHRlZCwgZGlkIG5vdCBjbGVhciBpdHMgZmlsZSBs aXN0LgorICAgICAgICAgICAgICAgbyBWYXJpb3VzIHByb2JsZW1zIHdpdGggRlRQIFBVVCAvQVMt TkFNRSB0aGF0IG5vYm9keQorICAgICAgICAgICAgICAgICBub3RpY2VkLgorICAgICAgICAgICAg ICAgbyBTb21lIEZUUCBtZXNzYWdlcyBhbmQgZGlzcGxheXMgaW50ZXJmZXJlZCB3aXRoIGVhY2gK KyAgICAgICAgICAgICAgICAgb3RoZXIuCisgICAgICAgICAgICAgICBvIFBhcnNpbmcgb2YgWUVT VEVSREFZLCBUT0RBWSwgYW5kIFRPTU9SUk9XIGluIGRhdGUtdGltZQorICAgICAgICAgICAgICAg ICBmaWVsZHMgd2FzIGJyb2tlbi4KKyAgICAgICAgICAgICAgIG8gQXV0b21hdGljIG9sZC10by1u ZXcgZGlhbGluZyBkaXJlY3RvcnkgZm9ybWF0IGNvbnZlcnNpb24KKyAgICAgICAgICAgICAgICAg d2FzIGJyb2tlbiBvbiBWTVMuCisgICAgICAgICAgICAgICBvIFZhcmlvdXMgc291cmNlLWNvZGUg cG9ydGFiaWxpdHkgcHJvYmxlbXMgZml4ZWQuCisgICAgICAgICAgKyBJbXByb3ZlbWVudCBvZiB2 YXJpb3VzIEhFTFAgYW5kIFNIT1cgbWVzc2FnZXMuCisKKyAgIEMtS2VybWl0IDcuMS4xOTkgQWxw aGEuMDQgKDEgQXByaWwgMjAwMSkKKworICAgICAgICAgICsgQmlnIGNoYW5nZXM6CisgICAgICAg ICAgICAgICBvIENoYW5nZWQgZGVmYXVsdCBtb2RlbSB0eXBlIGZyb20gTk9ORSB0byBHRU5FUklD LgorICAgICAgICAgICAgICAgbyBHZW5lcmljIGRpYWxpbmcgbm93IHNlbmRzIG5vIGluaXQgc3Ry aW5nIGF0IGFsbC4KKyAgICAgICAgICAgICAgIG8gQ2hhbmdlZCBkZWZhdWx0IHRlcm1pbmFsIGJ5 dGVzaXplIGZyb20gNyB0byA4LgorICAgICAgICAgICsgTmV3IGZlYXR1cmVzOgorICAgICAgICAg ICAgICAgbyBTRVQgU0VTU0lPTi1MT0cgVElNRVNUQU1QRUQtVEVYVCBmb3IgdGltZXN0YW1wZWQg c2Vzc2lvbgorICAgICAgICAgICAgICAgICBsb2cuCisgICAgICAgICAgKyBOZXcgbW9kZW0gdHlw ZXM6CisgICAgICAgICAgICAgICBvIENvbmV4YW50IG1vZGVtIGZhbWlseQorICAgICAgICAgICAg ICAgbyBMdWNlbnQgVkVOVVMgY2hpcHNldAorICAgICAgICAgICAgICAgbyBQQ1RlbCBWLjkwIGNo aXBzZXQKKyAgICAgICAgICAgICAgIG8gWm9vbSBWLjkwCisgICAgICAgICAgICAgICBvIFpvb20g Vi45MgorICAgICAgICAgICsgRlRQIGNsaWVudDoKKyAgICAgICAgICAgICAgIG8gRlRQIE9QRU4g L1BBU1NJVkUgYW5kIC9BQ1RJVkUgc3dpdGNoZXMgYWRkZWQuCisgICAgICAgICAgICAgICBvIE5v dyB3b3JrcyB3aXRoIHNlcnZlcnMgdGhhdCB0aGF0IGRvbid0IGluY2x1ZGUgcGF0aCBpbgorICAg ICAgICAgICAgICAgICBOTFNUIHJlc3BvbnNlLgorICAgICAgICAgICAgICAgbyBGaXhlZCBTRU5E IC9SRUNVUlNJVkUgbm90IHRvIGZvbGxvdyBzeW1saW5rcyAoVU5JWCkuCisgICAgICAgICAgICAg ICBvIFNFVCBGVFAgVkVSQk9TRS1NT0RFIGRlZmF1bHQgaXMgbm93IE9GRiBpbnN0ZWFkIG9mIE9O LgorICAgICAgICAgICsgS2VybWl0IHByb3RvY29sOgorICAgICAgICAgICAgICAgbyBGaXhlZCB3 aGF0IEkgaG9wZSBpcyB0aGUgbGFzdCAiUmVjZWl2ZSB3aW5kb3cgZnVsbCIKKyAgICAgICAgICAg ICAgICAgZXJyb3IuCisgICAgICAgICAgICAgICBvIFNFVCBQUkVGSVhJTkcgb3IgU0VUIENPTlRS T0wgUFJFRklYIG5vdyBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgIHNldHMgQ0xFQVJD SEFOTkVMIE9GRi4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgaW5jb3JyZWN0IHJlcG9ydCBvZiBu dW1iZXIgb2YgZmlsZXMgdHJhbnNmZXJyZWQgYXQKKyAgICAgICAgICAgICAgICAgZW5kIG9mIHRy YW5zZmVyLgorICAgICAgICAgICAgICAgbyBGaXhlZCBTRU5EIC9SRUNVUlNJVkUgbm90IHRvIGZv bGxvdyBzeW1saW5rcyAoVU5JWCkuCisgICAgICAgICAgKyBVTklYOgorICAgICAgICAgICAgICAg byBIVFRQIGFuZCBzaGFkb3cgcGFzc3dvcmRzIGVuYWJsZWQgZm9yIFNDTyA1LjAuNi4KKyAgICAg ICAgICAgICAgIG8gRXZlbiB3aXRoIFNFVCBGSUxFTkFNRVMgQ09OVkVSVEVELCBzcGFjZXMgd2Vy ZSBzdGlsbAorICAgICAgICAgICAgICAgICBhY2NlcHRlZCBpbiBpbmNvbWluZyBmaWxlbmFtZXM7 IG5vdyB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8KKyAgICAgICAgICAgICAgICAgdW5kZXJzY29yZXMu CisgICAgICAgICAgICAgICBvIEFkZGVkIHN1cHBvcnQgZm9yIGNvbXBpbGUtdGltZSBta3RlbXAo KS9ta3N0ZW1wKCkKKyAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLgorICAgICAgICAgICsgVk1T OgorICAgICAgICAgICAgICAgbyBTZXNzaW9uLWxvZyBmb3JtYXQgZm9yIHNjcmlwdGVkIHNlc3Np b25zIGZpeGVkLgorICAgICAgICAgICsgU2NyaXB0aW5nOgorICAgICAgICAgICAgICAgbyBGaXhl ZCBcZnJkaXIoKSBub3QgdG8gZm9sbG93IHN5bWxpbmtzIChVTklYKS4KKyAgICAgICAgICAgICAg IG8gRml4ZWQgXGZkYXkoKSBub3QgdG8gZHVtcCBjb3JlIGZvciBkYXRlcyBwcmlvciB0byAxNyBN YXIKKyAgICAgICAgICAgICAgICAgMTg1OC4KKyAgICAgICAgICArIEdlbmVyYWw6CisgICAgICAg ICAgICAgICBvICJDbG9zaW5nIGJsYWguLi4iIG1lc3NhZ2UgdXBvbiBleGl0IGNvdWxkIG5vdCBi ZQorICAgICAgICAgICAgICAgICBzdXBwcmVzc2VkLgorICAgICAgICAgICAgICAgbyBBZGRlZCAv UEFHRSBhbmQgL05PUEFHRSB0byBERUxFVEUgc3dpdGNoZXMuCisgICAgICAgICAgICAgICBvIEFk ZGVkIEdPIHJlc3BvbnNlIGZvciBERUxFVEUgL0FTSyAoZGVsZXRlIGFsbCB0aGUgcmVzdAorICAg ICAgICAgICAgICAgICB3aXRob3V0IGFza2luZykuCisgICAgICAgICAgICAgICBvIEFkZGVkIEdP IHJlc3BvbnNlIHRvICJtb3JlPyIgcHJvbXB0IChmb3IgbXVsdGktcGFnZQorICAgICAgICAgICAg ICAgICBzY3JlZW4gb3V0cHV0KS4KKyAgICAgICAgICAgICAgIG8gVXBkYXRlZCBIRUxQIHRleHRz LgorCisgICBDLUtlcm1pdCA3LjEuMTk5IEJldGEuMDEgKDEwIE1heSAyMDAxKQorCisgICAgICAg ICAgKyBGVFAgY2xpZW50IHZlcmJvc2l0eSBhZGp1c3RtZW50cy4KKyAgICAgICAgICArIEJ1ZyB3 aXRoIGdlbmVyaWMgbW9kZW0gZGlhbGluZyBwYXVzaW5nIHNldmVyYWwgc2VjcyBmaXhlZC4KKyAg ICAgICAgICArIFNFVCBIT1NUIC9VU0VSOiwgU0VUIExPR0lOIFVTRVJJRCwgZXRjLCBmaXhlZCB3 aGVuIGdpdmVuIG5vCisgICAgICAgICAgICB1c2VyIElELgorICAgICAgICAgICsgQSBjb3VwbGUg XHYoZG1fYmxhaCkgZGlhbCBtb2RpZmllciB2YXJpYWJsZXMgYWRkZWQuCisgICAgICAgICAgKyAi LS12ZXJzaW9uIiBjb21tYW5kLWxpbmUgc3dpdGNoIGFkZGVkLgorICAgICAgICAgICsgRml4ZWQg TmV0QlNEIHNlcmlhbC1wb3J0IERUUiBoYW5kbGluZy4KKyAgICAgICAgICArIExvdHMgb2Ygc3lu dGF4IGNsZWFudXBzIGZvciBGbGV4ZWxpbnQgYW5kIGdjYyAtV2FsbC4KKyAgICAgICAgICArIEZp eGVkIG1vZGVtLXR5cGUgYWxpYXNlcyB0byBub3QgdGFrZSBwcmVjZWRlbmNlIG92ZXIgcmVhbAor ICAgICAgICAgICAgbmFtZXMuCisgICAgICAgICAgKyBGaXhlZCBmdW5ueSB0cmVhdG1lbnQgb2Yg ZG91YmxlcXVvdGVzIGJ5IEVDSE8gY29tbWFuZC4KKyAgICAgICAgICArIEVuYWJsZWQgU0VUIFNF U1NJT04tTE9HIGZvciBWTVMgYW5kIG90aGVyIG5vbi1VTklYIHBsYXRmb3Jtcy4KKyAgICAgICAg ICArIEZpeGVkIGNoYW5naW5nIGRpcmVjdGlvbiBpbiBjb21tYW5kIGhpc3RvcnkgYnVmZmVyLgor ICAgICAgICAgICsgRml4ZWQgaGFuZGxpbmcgb2YgSUtTRCBVUkxzLgorICAgICAgICAgICsgTWFk ZSBzdXJlIERFTEVURSBwcmludHMgYSBtZXNzYWdlIGlmIGl0IGdvdCBhbnkgZXJyb3JzLgorCisg ICBDLUtlcm1pdCA4LjAuMjAwIEJldGEuMDIgKDI4IEp1bmUgMjAwMSkKKworICAgICAgICAgICsg TWFqb3IgdmVyc2lvbiBudW1iZXIgaW5jcmVhc2VkIGZyb20gNyB0byA4LgorICAgICAgICAgICsg WzE1Ml1TU0ggY29tbWFuZC4KKyAgICAgICAgICArIE1vcmUtY29uc2lzdGVudCBLZXJtaXQgcHJv dG9jb2wgZGVmYXVsdHMuCisgICAgICAgICAgKyBDT05ORUNUIGlkbGUgdGltZW91dCBhbmQgYWN0 aW9uIHNlbGVjdGlvbi4KKyAgICAgICAgICArIENPTk5FQ1Qgc3RhdHVzIHZhcmlhYmxlLgorICAg ICAgICAgICsgQSB3YXkgdG8gYWxsb2NhdGUgbW9yZSBzcGFjZSBmb3IgZmlsZW5hbWUgbGlzdHMu CisgICAgICAgICAgKyBQc2V1ZG90ZXJtaW5hbCBoYW5kbGVyIGZpeGVkIGZvciBsYXRlLW1vZGVs IExpbnV4ZXMuCisgICAgICAgICAgKyBDb21tYW5kLWxpbmUgb3B0aW9uIC1kZCBmb3IgdGltZXN0 YW1wZWQgZGVidWcgbG9nLgorICAgICAgICAgICsgRG93bmxvYWQgZGlyZWN0b3J5IG5vdyB3b3Jr cyBmb3IgZXh0ZXJuYWwgcHJvdG9jb2xzIHRvby4KKyAgICAgICAgICArIEdSRVAgL0NPVU5UOnZh cmlhYmxlLgorICAgICAgICAgICsgU0VUIEFUVFJJQlVURSBSRUNPUkQtRk9STUFUIHsgT0ZGLCBP TiB9LgorICAgICAgICAgICsgQnVnIGZpeGVzLgorCisgICBDLUtlcm1pdCA4LjAuMjAwIEJldGEu MDMgKDkgU2VwIDIwMDEpCisKKyAgICAgICAgICArIFsxNTNdSFRUUCAxLjEgY29ubmVjdGlvbnMg YW5kIHNjcmlwdGluZworICAgICAgICAgICsgWzE1NF1PTl9DVFJMQyBtYWNybyBmb3IgdHJhcHBp bmcgQ3RybC1DIGluIHNjcmlwdHMKKyAgICAgICAgICArIFsxNTVdRGF0ZS10aW1lIHBhcnNpbmcg aW1wcm92ZW1lbnRzLCB0aW1lem9uZXMsIGNvbXBhcmlzb24sCisgICAgICAgICAgICBhcml0aG1l dGljCisgICAgICAgICAgKyBbMTU2XVBhdHRlcm4tbWF0Y2hpbmcgaW1wcm92ZW1lbnRzCisgICAg ICAgICAgKyBGVFAgaW1wcm92ZW1lbnRzCisgICAgICAgICAgKyBTRVQgRVhJVCBIQU5HVVAgeyBP TiwgT0ZGIH0KKyAgICAgICAgICArIFNFVCBGSUxFIEVPRiB7IENUUkwtWiwgTEVOR1RIIH0KKyAg ICAgICAgICArIEFTS1tRXSAvVElNRU9VVAorICAgICAgICAgICsgQnVnIGZpeGVzCisgICAgICAg ICAgKyBOZXcgcGxhdGZvcm1zCisKKyAgIEMtS2VybWl0IDguMC4yMDAgQmV0YS4wNCAoMTYgTm92 IDIwMDEpCisKKyAgICAgICAgICArIFsxNTddTmV3IFVuaXggbWFuIHBhZ2UKKyAgICAgICAgICAr IFsxNThdTmV3IFVuaXggaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucworICAgICAgICAgICsgU0VU IFRFTE9QVCBwb2xpY2llcyBhcmUgbm93IGVuZm9yY2VkIG9uIG5vbi1UZWxuZXQgcG9ydHMgaWYK KyAgICAgICAgICAgIHRoZSBzZXJ2ZXIgYmVnaW5zIFRlbG5ldCBuZWdvdGlhdGlvbnMuCisgICAg ICAgICAgKyBTRVQgVEVSTUlOQUwgSURMRS1BQ1RJT04geyBURUxORVQtTk9QLCBURUxORVQtQVlU IH0uCisgICAgICAgICAgKyBVVUNQIGxvY2tmaWxlIGNyZWF0aW9uIHJhY2UgY29uZGl0aW9uIGZp eGVkLgorICAgICAgICAgICsgRGlhbG91dCwgbW9kZW0gc2lnbmFscywgaGFuZ3VwLCBoYXJkd2Fy ZSBmbG93IGNvbnRyb2wsIGV0YywKKyAgICAgICAgICAgIHRlc3RlZCBleHRlbnNpdmVseSBvbiBt YW55IHBsYXRmb3JtcywgbnVtZXJvdXMgcHJvYmxlbXMgZml4ZWQuCisgICAgICAgICAgKyBJbXBy b3ZlZCBoaW50cyB3aGVuIGRpYWxpbmcgZmFpbHMuCisgICAgICAgICAgKyBTRVQgU1RPUC1CSVRT IDIgY2FuIG5vdyBiZSBnaXZlbiB3aXRob3V0IFNFVCBGTE9XIEhBUkRXQVJFLgorICAgICAgICAg ICsgTWFqb3IgaW1wcm92ZW1lbnRzIGluIFJGQyAyMjE3IFRlbG5ldCBDb20tUG9ydCBDb250cm9s LgorICAgICAgICAgICsgSW1wcm92ZWQgYWJpbGl0eSB0byBSRURJQUwgYSBtb2RlbSBzZXJ2ZXIg cG9ydC4KKyAgICAgICAgICArIGtlcm1pdCAtaCBub3cgc2hvd3MgdGhlIGNvbW1hbmQgbmFtZSBp biB0aGUgdXNhZ2UgdXNhZ2UKKyAgICAgICAgICAgIHN0cmluZy4KKyAgICAgICAgICArIGtlcm1p dCAtaCBub3cgc2hvd3MgQUxMIGNvbW1hbmQtbGluZSBvcHRpb25zLgorICAgICAgICAgICsga2Vy bWl0IC1zIGJsYWgsIHdoZXJlIGJsYWggaXMgYSBzeW1saW5rLCBub3cgd29ya3MuCisgICAgICAg ICAgKyAtLW5vcGVybXMgY29tbWFuZC1saW5lIG9wdGlvbiA9IFNFVCBBVFRSSUJVVEUgUEVSTUlT U0lPTlMgT0ZGLgorICAgICAgICAgICsgSFRUUCBhbmQgSFRUUFMgVVJMcyBub3cgc3VwcG9ydGVk IG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICAgICAgKyBBbiBodHRwIGNvbW1hbmQtbGluZSBw ZXJzb25hbGl0eSBpcyBub3cgYXZhaWxhYmxlLgorICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24g ZmlsZSBzdHJlYW1saW5lZCB0byBsb2FkIGZhc3RlciwgYW5hY2hyb25pc21zCisgICAgICAgICAg ICByZW1vdmVkLgorICAgICAgICAgICsgVXBkYXRlZCBORVdTLCBJTlRSTywgSEVMUCB0ZXh0LCBT SE9XIGNvbW1hbmRzLiBJbiBwYXJ0aWN1bGFyLAorICAgICAgICAgICAgc2VlIFNIT1cgQ09NTSwg SEVMUCBTRVQgTElORSwgSEVMUCBXQUlULgorICAgICAgICAgICsgRGF0ZS90aW1lIGFyaXRobWV0 aWMgcm91dGluZXMgY29udmVydGVkIGZyb20gZmxvYXRpbmctcG9pbnQgdG8KKyAgICAgICAgICAg IGludGVnZXIgYXJpdGhtZXRpYyAoaW50ZXJuYWxseSkgZm9yIGdyZWF0ZXIgYWNjdXJhY3kgYW5k CisgICAgICAgICAgICBwb3J0YWJpbGl0eS4KKyAgICAgICAgICArIFF1b3RlZCBzdHJpbmdzIGNv bnRhaW5pbmcgY29tbWFzIG5vIGxvbmdlciBicmVhayBtYWNybworICAgICAgICAgICAgZXhlY3V0 aW9uLgorICAgICAgICAgICsgRHluYW1pYyBLZXJtaXQgZmlsZS10cmFuc2ZlciB0aW1lb3V0cyBh cmUgbm93IG11Y2ggbW9yZQorICAgICAgICAgICAgYWdncmVzc2l2ZS4KKyAgICAgICAgICArIE5l dyAiaG90IGtleXMiIHRvIHR1cm4gZGVidWcubG9nIG9uL29mZiBkdXJpbmcgZmlsZSB0cmFuc2Zl ci4KKyAgICAgICAgICArIEltcHJvdmVkIGhpbnRzIHdoZW4gZmlsZSB0cmFuc2ZlciBmYWlscy4K KyAgICAgICAgICArIEZUUCBDRCBvcmllbnRhdGlvbiBtZXNzYWdlcyBhcmUgbm93IHByaW50ZWQu CisgICAgICAgICAgKyAtUiBub3cgYWNjZXB0ZWQgb24gdGhlIEZUUCBjb21tYW5kIGxpbmUgdG8g cmVxdWVzdCBSZWN1cnNpb24uCisgICAgICAgICAgKyAtbSBhbGxvd3MgQWN0aXZlIG9yIFBhc3Np dmUgbW9kZSB0byBiZSBjaG9zZW4gb24gdGhlIEZUUAorICAgICAgICAgICAgY29tbWFuZCBsaW5l LgorICAgICAgICAgICsgLWRkIG9uIHRoZSBGVFAgY29tbWFuZCBsaW5lIGNyZWF0ZXMgYSB0aW1l c3RhbXBlZCBkZWJ1Zy5sb2cuCisgICAgICAgICAgKyBGVFAgY29tbWFuZC1saW5lIHNlY3VyaXR5 IG9wdGlvbnMgZmlsbGVkIGluLgorICAgICAgICAgICsgSW1wcm92ZWQgYXV0b21hdGljIHRleHQv YmluYXJ5IG1vZGUgc3dpdGNoaW5nIGZvciBNR0VULgorICAgICAgICAgICsgUmVtb3ZlZCBzcHVy aW91cyBlcnJvciBtZXNzYWdlcyB0aGF0IHNvbWV0aW1lcyBvY2N1ciBkdXJpbmcKKyAgICAgICAg ICAgIE1HRVQuCisgICAgICAgICAgKyBESVJFQ1RPUlksIEdSRVAsIFRZUEUsIEhFQUQsIGFuZCBU QUlMIG5vdyBoYXZlIGEgL09VVFBVVDpmaWxlCisgICAgICAgICAgICBvcHRpb24uCisgICAgICAg ICAgKyBUWVBFIC9OVU1CRVIgYWRkcyBsaW5lIG51bWJlcnMuCisgICAgICAgICAgKyBDQVQgPSBU WVBFIC9OT1BBR0U7IE1PUkUgPSBUWVBFIC9QQUdFLgorICAgICAgICAgICsgR0VUT0sgPy1oZWxw IGZpeGVkLgorICAgICAgICAgICsgXHYodGltZXN0YW1wKSAoPSAiXHYobmRhdGUpIFx2KHRpbWUp IikKKyAgICAgICAgICArIFx2KGhvdXIpIChob3VyIG9mIHRoZSBkYXksIDAtMjMpCisgICAgICAg ICAgKyBcZnVuaXgyZG9zcGF0aCgpIGNvbnZlcnRzIGEgVU5JWCBwYXRoICgvKSB0byBhIERPUyBv bmUgKFwpLgorICAgICAgICAgICsgXGZkb3MydW5peHBhdGgoKSBjb252ZXJ0cyBhIERPUyAoV2lu ZG93cywgT1MvMikgcGF0aCB0byBhIFVOSVgKKyAgICAgICAgICAgIG9uZS4KKyAgICAgICAgICAr IFxma2V5d29yZHZhbCgpIHBhcnNlcyBuYW1lPXZhbHVlIHBhaXIsIGFsbG93cyBtYWNybyBrZXl3 b3JkCisgICAgICAgICAgICBwYXJhbWV0ZXJzLgorICAgICAgICAgICsgV2Ugbm93IG1ha2UgZXZl cnkgYXR0ZW1wdCB0byBub3Qgd3JpdGUgcGFzc3dvcmRzIHRvIHRoZQorICAgICAgICAgICAgZGVi dWcubG9nLgorICAgICAgICAgICsgTmV3IENlcnRpZmljYXRlIEF1dGhvcml0eSBjZXJ0aWZpY2F0 ZXMgZmlsZSwgaW5jbHVkZXMgdGhlCisgICAgICAgICAgICBLZXJtaXQgUHJvamVjdCBhdCBDb2x1 bWJpYSBVbml2ZXJzaXR5IHNvIHlvdSBjYW4gYWNjZXNzIG91cgorICAgICAgICAgICAgSUtTRCBz ZWN1cmVseS4KKyAgICAgICAgICArIFNlY3VyZSB0YXJnZXRzIGltcHJvdmVkIGFuZCBiZXR0ZXIg ZG9jdW1lbnRlZCBpbiBVbml4CisgICAgICAgICAgICBtYWtlZmlsZS4KKyAgICAgICAgICArIEFs bCBMaW51eCAobGliYyBhbmQgZ2xpYmMpIGJ1aWxkcyBjb25zb2xpZGF0ZWQgdW5kZXIgIm1ha2UK KyAgICAgICAgICAgIGxpbnV4Ii4KKyAgICAgICAgICArIEhQLVVYIG1ha2VmaWxlIHRhcmdldHMg bm93IGhhdmUgY29uc2lzdGVudCBuYW1lcy4KKyAgICAgICAgICArIE5ldyBhaXg1MCBhbmQgYWl4 NTEgdGFyZ2V0cyBhZGRlZC4KKworICAgQy1LZXJtaXQgOC4wLjIwMCBGaW5hbCAoMTIgRGVjIDIw MDEpCisKKyAgICAgICAgICArIFJlbW90ZS9sb2NhbC1tb2RlIGNvbmZ1c2lvbiBvbiBzb21lIHBs YXRmb3JtcyBpbnRyb2R1Y2VkIGluCisgICAgICAgICAgICBCZXRhLjA0LCBmaXhlZC4KKyAgICAg ICAgICArIE1hbnkgb2YgdGhlIG1ha2VmaWxlIHRhcmdldHMgYWRqdXN0ZWQsIG5ldyBvbmVzIGFk ZGVkLgorICAgICAgICAgICsgTmV3ICJtYWtlIGluc3RhbGwiIHRhcmdldCBzaG91bGQgcGxlYXNl IG1vc3QgcGVvcGxlLgorICAgICAgICAgICsgTmV3IGNvbW1hbmQ6IFNIT1cgSUtTRC4KKyAgICAg ICAgICArIEZUUCBvdmVyIFRMUy4KKyAgICAgICAgICArIExhc3QtbWludXRlIHRvdWNodXBzIHRv IHRleHQgbWVzc2FnZXMsIEhFTFAgdGV4dCwgZXRjLgorICAgICAgICAgICsgRW5hYmxlIG1vZGVt LXNpZ25hbCByZWFkaW5nIGZvciBTQ08gT1NSNSBhbmQgVW5peHdhcmUgNy4KKyAgICAgICAgICAr IFNwZWNpYWwgc3VwZXJmYXN0IFRSQU5TTUlUIC9CSU5BUlkgL05PRUNITyAvTk9XQUlUIG1vZGUg YWRkZWQuCisgICAgICAgICAgKyBGaXhlZCBQQlggZGlhbGluZyBpbiB1bm1hcmtlZC1hcmVhLWNv ZGUgY2FzZS4KKyAgICAgICAgICArIEltcHJvdmVkIFNIT1cgQ09NTVVOSUNBVElPTlMgdGVsbHMg bG9ja2ZpbGUgZGlyZWN0b3J5LCB0eXBpY2FsCisgICAgICAgICAgICBkaWFsb3V0IGRldmljZSBu YW1lLgorICAgICAgICAgICsgU29tZSBGVFAgT1BFTiBjb21tYW5kIHBhcnNpbmcgcHJvYmxlbXMg Zml4ZWQuCisgICAgICAgICAgKyBTb21lIGVycm9ycyBpbiBkYXRlIGFyaXRobWV0aWMgZml4ZWQu CisgICAgICAgICAgKyBOZXcgY29tbWFuZDogU0VUIFRFUk1JTkFMIEFVVE9ET1dOTE9BRCB7IC4u LiwgRVJST1IgeyBTVE9QLAorICAgICAgICAgICAgQ09OVElOVUUgfSB9CisgICAgICAgICAgKyBO ZXcgY29tbWFuZDogSEVMUCBGSVJFV0FMTC4KKyAgICAgICAgICArIFNFVCBNT0RFTSBIQU5HVVAt TUVUSE9EIERUUiBhZGRlZCBhcyBzeW5vbnltIGZvciBSUzIzMi1TSUdOQUwKKyAgICAgICAgICAr IFN1cHBvcnQgZm9yIHNlY3VyZSBVUkwgcHJvdG9jb2xzIGFkZGVkOiB0ZWxuZXRzOiwgZnRwczos CisgICAgICAgICAgICBodHRwczouCisKKyAgIEMtS2VybWl0IDguMC4yMDEgKDggRmViIDIwMDIp CisKKyAgICAgICAgICArIEluc3RhbGxhYmlsaXR5IGFzIGFuIFsxNTldU1NIIHYyIFN1YnN5c3Rl bS4KKyAgICAgICAgICArIFsxNjBdU0VUIExPQ1VTIGNvbW1hbmQuCisgICAgICAgICAgKyBbMTYx XUwtdmVyc2lvbnMgb2YgQ0QsIERJUiwgREVMRVRFLCBNS0RJUiwgZXRjLCB0byBmb3JjZSBsb2Nh bAorICAgICAgICAgICAgZXhlY3V0aW9uLgorICAgICAgICAgICsgWzE2Ml1VU0VSIGFuZCBBQ0NP VU5UIGFkZGVkIGFzIHN5bm9ueW1zIGZvciBGVFAgVVNFUiBhbmQgRlRQCisgICAgICAgICAgICBB Q0NPVU5ULgorICAgICAgICAgICsgWzE2M11TSE9XIFZBUklBQkxFUyBub3cgYWNjZXB0cyBhIGxp c3Qgb2YgdmFyaWFibGVzLgorICAgICAgICAgICsgUnVkaW1lbnRhcnkgc3VwcG9ydCBmb3IgWzE2 NF1DYWxsZXIgSUQgd2hlbiByZWNlaXZpbmcgcGhvbmUKKyAgICAgICAgICAgIGNhbGxzLgorICAg ICAgICAgICsgVXAvRG93biBbMTY1XUFycm93LWtleSBuYXZpZ2F0aW9uIG9mIGNvbW1hbmQgaGlz dG9yeSBidWZmZXIuCisgICAgICAgICAgKyBbMTY2XUF1dG9tYXRpYyBleGVjdXRpb24gb2YgY3Vz dG9taXphdGlvbiBmaWxlIGlmIGluaXQgZmlsZSBpcworICAgICAgICAgICAgbWlzc2luZy4KKwor ICAgQy1LZXJtaXQgOC4wLjIwNiBCZXRhLjAxICgxMSBPY3QgMjAwMikKKworICAgICAgICBOZXcg Y29tbWFuZHM6CisKKyAgICAgICAgICAgICAgIG8gT1JJRU5UQVRJT04gbGlzdHMgbG9jYXRpb24t cmVsYXRlZCB2YXJpYWJsZXMgYW5kIHRoZWlyCisgICAgICAgICAgICAgICAgIHZhbHVlcy4KKyAg ICAgICAgICAgICAgIG8gS0NEIGNoYW5nZXMgdG8gc3BlY2lhbCBkaXJlY3RvcmllcyBieSB0aGVp ciBzeW1ib2xpYworICAgICAgICAgICAgICAgICBuYW1lcyAoImtjZCA/IiBmb3IgYSBsaXN0KS4K KyAgICAgICAgICAgICAgIG8gU0VUIENEIEhPTUUgcGF0aCB0byBzcGVjaWZ5IGhvbWUgZGlyZWN0 b3J5IGZvciBDRCBhbmQgS0NECisgICAgICAgICAgICAgICAgIGNvbW1hbmRzLgorICAgICAgICAg ICAgICAgbyBDT05USU5VRSBnaXZlbiBhdCB0b3AgbGV2ZWwgaXMgZXF1aXZhbGVudCB0byBFTkQg LS0gaGFuZHkKKyAgICAgICAgICAgICAgICAgd2hlbiBQUk9NUFQnZWQgb3V0IG9mIGEgc2NyaXB0 LCB0byBjb250aW51ZSB0aGUgc2NyaXB0LgorCisgICAgICAgIE5ldyBzd2l0Y2hlcyBvciBvcGVy YW5kcyBmb3IgZXhpc3RpbmcgY29tbWFuZHM6CisKKyAgICAgICAgICAgICAgIG8gR0VUT0sgL1RJ TUVPVVQKKyAgICAgICAgICAgICAgIG8gQVNLLCBBU0tRLCBHRVRPSyAvUVVJRVQgKHN1cHByZXNz ZXMgZXJyb3IgbWVzc2FnZSBvbgorICAgICAgICAgICAgICAgICB0aW1lb3V0KQorICAgICAgICAg ICAgICAgbyBDT1BZIC9BUFBFTkQgbm93IGFsbG93cyBjb25jYXRlbmF0aW5nIG11bHRpcGxlIHNv dXJjZQorICAgICAgICAgICAgICAgICBmaWxlcyBpbnRvIG9uZSBkZXN0IGZpbGUuCisgICAgICAg ICAgICAgICBvIFNFVCBUQ1AgeyBIVFRQLVBST1hZLCBTT0NLUy1TRVJWRVIgfSAvVVNFUiwgL1BB U1NXT1JELgorICAgICAgICAgICAgICAgbyBESVJFQ1RPUlkgY29tbWFuZCBub3cgYWNjZXB0cyBt dWx0aXBsZSBmaWxlc3BlY3MsIGUuZy4KKyAgICAgICAgICAgICAgICAgImRpciBhIGIgYyIuCisK KyAgICAgICAgU0VUIFFVSUVUIE9OIG5vdyBhbHNvIGFwcGxpZXMgdG86CisKKyAgICAgICAgICAg ICAgIG8gU0VUIEhPU1QgY29ubmVjdGlvbiBwcm9ncmVzcyBtZXNzYWdlcy4KKyAgICAgICAgICAg ICAgIG8gIlByZXNzIHRoZSBYIG9yIEUga2V5IHRvIGNhbmNlbCIgZmlsZS10cmFuc2ZlciBtZXNz YWdlLgorICAgICAgICAgICAgICAgbyBSRU1PVEUgQ0QgcmVzcG9uc2UuCisgICAgICAgICAgICAg ICBvIFJFTU9URSBMT0dJTiByZXNwb25zZS4KKworICAgICAgICBJbXByb3ZlbWVudHMgYW5kIG5l dyBmZWF0dXJlczoKKworICAgICAgICAgICAgICAgbyBOdW1lcm91cyBGVFAgY2xpZW50IGZpeGVz IGFuZCBuZXcgZmVhdHVyZXMsIGxpc3RlZCBiZWxvdy4KKyAgICAgICAgICAgICAgIG8gQy1LZXJt aXQsIHdoZW4gaW4gcmVtb3RlIG1vZGUgYXQgdGhlIGVuZCBvZiBhIGZpbGUKKyAgICAgICAgICAg ICAgICAgdHJhbnNmZXIsIG5vdyBwcmludHMgYSBvbmUtbGluZSAid2hlcmUiIG1lc3NhZ2UuIENv bnRyb2wKKyAgICAgICAgICAgICAgICAgd2l0aCBTRVQgVFJBTlNGRVIgUkVQT1JULgorICAgICAg ICAgICAgICAgbyBVbml4IG1ha2VmaWxlICJpbnN0YWxsIiB0YXJnZXQgbm93IGNyZWF0ZXMgYW4g VU5JTlNUQUxMCisgICAgICAgICAgICAgICAgIHNjcmlwdC4KKyAgICAgICAgICAgICAgIG8gSW1w cm92ZWQgb3BlcmF0aW9uIGFuZCBwZXJmb3JtYW5jZSBvbiBSRkMgMjIxNyBUZWxuZXQKKyAgICAg ICAgICAgICAgICAgY29ubmVjdGlvbnMuCisgICAgICAgICAgICAgICBvIEltcHJvdmVkIENPTk5F Q1QgKGludGVyYWN0aXZlIHRlcm1pbmFsIGNvbm5lY3Rpb24pCisgICAgICAgICAgICAgICAgIHBl cmZvcm1hbmNlLgorICAgICAgICAgICAgICAgbyBIRUxQIHRleHQgdXBkYXRlZCBmb3IgbWFueSBj b21tYW5kcy4KKworICAgICAgICBOZXcgb3IgZml4ZWQgbWFrZWZpbGUgdGFyZ2V0czoKKworICAg ICAgICAgICAgICAgbyBTb2xhcmlzIDkgKHNldmVyYWwgdmFyaWF0aW9ucykKKyAgICAgICAgICAg ICAgIG8gQ29uY3VycmVudCBQb3dlck1BWAorICAgICAgICAgICAgICAgbyBNYWMgT1MgWCAxMC4y CisgICAgICAgICAgICAgICBvIEZyZWVCU0QgMS4wCisgICAgICAgICAgICAgICBvIEZyZWVCU0Qg NC42LCA1LjAKKyAgICAgICAgICAgICAgIG8gQUlYIDUuMiwgNS4zCisKKyAgICAgICAgQnVncyBm aXhlZCAoZ2VuZXJhbCk6CisKKyAgICAgICAgICAgICAgIG8gRmFpbHVyZSB0byBydW4gaW4gVk1T IEJhdGNoIGZpeGVkLgorICAgICAgICAgICAgICAgbyBMRElSRUNUT1JZIGZpeGVkIHRvIHJ1biBL ZXJtaXQncyBidWlsdC1pbiBESVJFQ1RPUlkKKyAgICAgICAgICAgICAgICAgY29tbWFuZCByYXRo ZXIgdGhhbiBhbiBleHRlcm5hbCBvbmUuCisgICAgICAgICAgICAgICBvIEZpeGVkIFNvbGFyaXMg YW5kIG90aGVyIFNWT1JQT1NJWCBidWlsZHMgdG8gZmluZCBvdXQKKyAgICAgICAgICAgICAgICAg dGhlaXIgZnVsbCBob3N0bmFtZXMgcmF0aGVyIHRoYW4ganVzdCB0aGUgInVuYW1lIC1uIgorICAg ICAgICAgICAgICAgICBuYW1lLgorICAgICAgICAgICAgICAgbyBGaXhlZCBzb21lIHByb2JsZW1z IG1hdGNoaW5nIHN0cmluZ3MgdGhhdCBzdGFydCB3aXRoICIuIi4KKyAgICAgICAgICAgICAgIG8g Rml4ZWQgc29tZSBwcm9ibGVtcyBtYXRjaGluZyBwYXR0ZXJuIHRoYXQgY29udGFpbiB7YSxiLGN9 CisgICAgICAgICAgICAgICAgIGxpc3RzLgorICAgICAgICAgICAgICAgbyBGaXhlZCBlcnJvbmVv dXMgcmVwb3J0aW5nIG9mIHRleHQtbW9kZSByZWNlcHRpb24gYXMKKyAgICAgICAgICAgICAgICAg YmluYXJ5IHdoZW4gc2VuZGVyIGRpZCBub3QgcmVwb3J0IHRoZSBmaWxlIHNpemUgKGNvc21ldGlj CisgICAgICAgICAgICAgICAgIG9ubHkpLgorICAgICAgICAgICAgICAgbyBNYW55IHByb2JsZW1z IHdpdGggU1dJVENIIHN0YXRlbWVudHMgZml4ZWQuCisgICAgICAgICAgICAgICBvIEZpeGVkIFNF VCBPUFRJT05TIERJUkVDVE9SWSAvRE9URklMRVMgdG8gd29yayBmb3Igc2VydmVyCisgICAgICAg ICAgICAgICAgIHRvby4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgREVMRVRFIHRvIHByaW50IGFu IGVycm9yIG1lc3NhZ2UgaWYgdGhlIGZpbGUgd2FzCisgICAgICAgICAgICAgICAgIG5vdCBmb3Vu ZC4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgU0VUIENPTlRST0wgVU5QUkVGSVggQUxMIGFuZCBT RVQgUFJFRklYSU5HIE5PTkUgdG8KKyAgICAgICAgICAgICAgICAgZG8gdGhlIHNhbWUgdGhpbmcu CisgICAgICAgICAgICAgICBvIEZpeGVkIGJ1Z3MgZXhlY3V0aW5nIG1hY3JvcyBmcm9tIHdpdGhp biB0aGUgT05fRVhJVAorICAgICAgICAgICAgICAgICBtYWNyby4KKyAgICAgICAgICAgICAgIG8g XGZkYXkoKSBhbmQgXGZuZGF5KCkgZml4ZWQgZm9yIGRhdGVzIHByaW9yIHRvIDE3IE5vdgorICAg ICAgICAgICAgICAgICAxODU4LgorICAgICAgICAgICAgICAgbyBTZXJpYWwgc3BlZWQtY2hhbmdp bmcgYnVnIGluIExpbnV4IGZpeGVkLgorICAgICAgICAgICAgICAgbyAiVW5iYWxhbmNlZCBicmFj ZXMiIHNjcmlwdCBwYXJzaW5nIGVycm9ycyB3aGVuIHVzaW5nCisgICAgICAgICAgICAgICAgIFx7 bnVtYmVyfSBmaXhlZC4KKyAgICAgICAgICAgICAgIG8gImlmIGRlZmluZWQgXHYobmFtZSkiIGZp eGVkIHRvIGJlaGF2ZSBhcyBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgICAgICAgICAgIGJvb2su CisgICAgICAgICAgICAgICBvIEZpeGVkIFByb2JsZW1zIGNhdXNlZCBieSBMT0NBTCB2YXJpYWJs ZXMgd2hvc2UgbmFtZXMgYXJlCisgICAgICAgICAgICAgICAgIGxlZnQgc3Vic3RyaW5ncyBvZiBt YWNybyBuYW1lcy4KKyAgICAgICAgICAgICAgIG8gVGhlIElOUFVUIGNvbW1hbmQgd2FzIGZpeGVk IHRvIGhvbm9yIHRoZSBQQVJJVFkgc2V0dGluZy4KKyAgICAgICAgICAgICAgIG8gRml4ZWQgYnVn IHdpdGggQ09QWSB0byBleGlzdGluZyBmaWxlIHRoYXQgaXMgbG9uZ2VyIHRoYW4KKyAgICAgICAg ICAgICAgICAgc291cmNlIGZpbGUuCisgICAgICAgICAgICAgICBvIFJFSU5QVVQgY29tbWFuZCBm YWlsZWQgdG8gc3RyaXAgYnJhY2VzL3F1b3RlcyBhcm91bmQgaXRzCisgICAgICAgICAgICAgICAg IHRhcmdldCBzdHJpbmcuCisgICAgICAgICAgICAgICBvIE5ldHdvcmsgZGlyZWN0b3J5IGxvb2t1 cHMgZGlkbid0IHdvcmsgZm9yIFNTSAorICAgICAgICAgICAgICAgICBjb25uZWN0aW9ucy4KKyAg ICAgICAgICAgICAgIG8gUkVNT1RFIFNFVCB7IEZJTEUsIFRSQU5TRkVSIH0gQ0hBUkFDVEVSLVNF VCBmaXhlZC4KKyAgICAgICAgICAgICAgIG8gQ2xvc2VkIHNvbWUgaG9sZXMgd2hlcmVieSBhbiBp bmNvbXBsZXRlbHkgcmVjZWl2ZWQgZmlsZQorICAgICAgICAgICAgICAgICB3YXMgbm90IGRlbGV0 ZWQgd2hlbiBTRVQgRklMRSBJTkNPTVBMRVRFIGlzIERJU0NBUkQsIGUuZy4KKyAgICAgICAgICAg ICAgICAgd2hlbiB0aGUgS2VybWl0IGlzIGh1bmcgdXAgdXBvbi4KKyAgICAgICAgICAgICAgIG8g U0VUIFhGRVIgQ0hBUkFDVEVSLVNFVCBUUkFOU1BBUkVOVCBmaXhlZCB0byBkbyB0aGUgc2FtZQor ICAgICAgICAgICAgICAgICBhcyBTRVQgWEZFUiBUUkFOU0xBVElPTiBPRkYuCisgICAgICAgICAg ICAgICBvIFNFVCBIT1NUIFBUWSAoZS5nLiBTU0gpIGNvbm5lY3Rpb24gZml4ZWQgdG8gcGFzcyBh bG9uZworICAgICAgICAgICAgICAgICB3aW5kb3ctc2l6ZSBjaGFuZ2VzLgorICAgICAgICAgICAg ICAgbyBDLUtlcm1pdCBzZWFyY2ggcGF0aCBmb3IgVEFLRSBmaWxlcyB3YXMgYWNjaWRlbnRhbGx5 CisgICAgICAgICAgICAgICAgIGRpc2FibGVkLgorCisgICAgICAgIEZUUCBjbGllbnQgYnVncyBm aXhlZDoKKworICAgICAgICAgICAgICAgbyBDaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uIHdhcyBi cm9rZW4gb24gbGl0dGxlLWVuZGlhbgorICAgICAgICAgICAgICAgICAoZS5nLiBQQykgYXJjaGl0 ZWN0dXJlcy4KKyAgICAgICAgICAgICAgIG8gRlRQIFBVVCAvU0VSVkVSLVJFTkFNRTosIC9SRU5B TUUtVE86LCAvTU9WRS1UTzogc3dpdGNoZXMKKyAgICAgICAgICAgICAgICAgd2VyZSBzdGlja3ku CisgICAgICAgICAgICAgICBvIE1ha2UgU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMIGFwcGx5IHRv IEZUUC4KKyAgICAgICAgICAgICAgIG8gTWFrZSBTRVQgRklMRSBJTkNPTVBMRVRFIHsgS0VFUCwg RElTQ0FSRCB9IGFwcGx5IHRvIEZUUC4KKyAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgL1VQREFU RSBoYW5kbGVkIGVxdWFsIHRpbWVzIGluY29ycmVjdGx5LgorICAgICAgICAgICAgICAgbyBGVFAg TUdFVCAvUkVDT1ZFUiBmaXhlZCB0byBpZ25vcmUgZmlsZSBkYXRlcywgdXNlIG9ubHkKKyAgICAg ICAgICAgICAgICAgc2l6ZS4KKyAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgL1JFQ09WRVIgc29t ZXRpbWVzIGRvd25sb2FkZWQgZmlsZXMgaXQgZGlkbid0CisgICAgICAgICAgICAgICAgIG5lZWQg dG8uCisgICAgICAgICAgICAgICBvIEZUUCBkb3dubG9hZHMgd2l0aCBUUkFOU0ZFUiBESVNQTEFZ IEJSSUVGIGNvdWxkIGdpdmUKKyAgICAgICAgICAgICAgICAgbWlzbGVhZGluZyBlcnJvciBtZXNz YWdlcy4KKyAgICAgICAgICAgICAgIG8gRlRQIE1HRVQgdGVtcCBmaWxlIG5vdCBkZWxldGVkIGlm IEZUUCBERUJVRyBzZXQgdG8gT0ZGCisgICAgICAgICAgICAgICAgIGFmdGVyIGl0IHdhcyBPTi4K KyAgICAgICAgICAgICAgIG8gTE9DVVMgbm90IHN3aXRjaGVkIGJhY2sgd2hlbiBGVFAgY29ubmVj dGlvbiBpcyBsb3N0LgorICAgICAgICAgICAgICAgbyBTZXQgaW5jb21pbmcgZmlsZSBkYXRlIGV2 ZW4gaWYgaXQgd2FzIG5vdCBjb21wbGV0ZWx5CisgICAgICAgICAgICAgICAgIHJlY2VpdmVkLgor ICAgICAgICAgICAgICAgbyBGVFAgTUdFVCBzZW50IFNJWkUgYW5kIE1EVE0gY29tbWFuZHMgZXZl biB3aGVuIGl0IGRpZG4ndAorICAgICAgICAgICAgICAgICBoYXZlIHRvLgorICAgICAgICAgICAg ICAgbyBGVFAgTUdFVCBzZW50IFNJWkUgYW5kIE1EVE0gY29tbWFuZHMgZXZlbiB3aGVuIGl0IGtu ZXcKKyAgICAgICAgICAgICAgICAgdGhleSB3b3VsZG4ndCB3b3JrLgorICAgICAgICAgICAgICAg byBGVFAgTUdFVCBmYWlsZWQgaWYgbm8gZmlsZXMgd2VyZSBzZWxlY3RlZCBmb3IgZG93bmxvYWQu CisgICAgICAgICAgICAgICBvIEZUUCBNR0VUIGEqIGIqIGMqIHdvdWxkIGZhaWwgdG8gZ2V0IGFu eSBjKidzIGlmIG5vIGIqJ3MKKyAgICAgICAgICAgICAgICAgZXhpc3RlZC4KKyAgICAgICAgICAg ICAgIG8gQmlnIHByb2JsZW1zIGNhbmNlbGluZyBNR0VUIHdpdGggQ3RybC1DLgorICAgICAgICAg ICAgICAgbyBTb21lIGV4dHJhbmVvdXMgTE9DVVMgZGlhbG9ncyBzcXVlbGNoZWQuCisgICAgICAg ICAgICAgICBvIFNvbWUgaW5jb25zaXN0ZW5jaWVzIGluIFNFVCBGVFAgRklMRU5BTUVTIEFVVE8g Zml4ZWQuCisgICAgICAgICAgICAgICBvIEZpeGVkIGZpbGUtZGVzY3JpcHRvciBwaWxldXAgYWZ0 ZXIgbXVsdGlwbGUgTUdFVHMgd2hlbgorICAgICAgICAgICAgICAgICB1c2luZyBta3N0ZW1wKCku CisgICAgICAgICAgICAgICBvIEZpeGVkICJtZ2V0IGZvbyIsIHdoZXJlIGZvbyBpcyBhIGRpcmVj dG9yeSBuYW1lLgorCisgICAgICAgIEZUUCBpbXByb3ZlbWVudHM6CisKKyAgICAgICAgICAgICAg IG8gTmV3IFsxNjddRlRQIHByb3RvY29sIGZlYXR1cmVzIGFkZGVkIChGRUFULCBNTFNEKS4KKyAg ICAgICAgICAgICAgIG8gRlRQIE1HRVQgL1JFQ1VSU0lWRSBub3cgd29ya3MgYXMgZXhwZWN0ZWQg aWYgc2VydmVyCisgICAgICAgICAgICAgICAgIHN1cHBvcnRzIE1MU0QuCisgICAgICAgICAgICAg ICBvIEZUUCBNR0VUIC9EQVRFUy1ESUZGRVIgdG8gZG93bmxvYWQgaWYgbG9jYWwgYW5kIHJlbW90 ZQorICAgICAgICAgICAgICAgICBmaWxlIGRhdGVzIGRpZmZlci4KKyAgICAgICAgICAgICAgIG8g RlRQIERBVEVTIGRlZmF1bHQgY2hhbmdlZCB0byBPTi4KKyAgICAgICAgICAgICAgIG8gRlRQIE1Q VVQsIE1HRVQgL0VYQ0VQVCBub3cgYWxsb3dzIHVwIHRvIDY0IHBhdHRlcm5zICh1cAorICAgICAg ICAgICAgICAgICBmcm9tIDgpLgorICAgICAgICAgICAgICAgbyBUb3AtbGV2ZWwgU0lURSBhbmQg UEFTU0lWRSBjb21tYW5kcyBhZGRlZCBmb3IKKyAgICAgICAgICAgICAgICAgY29udmVuaWVuY2Uu CisgICAgICAgICAgICAgICBvIE1HRVQgL0NPTExJU0lPTjpBUFBFTkQgL0FTLU5BTUU6bmV3Zmls ZSAqLiogcHV0cyBhbGwKKyAgICAgICAgICAgICAgICAgcmVtb3RlIGZpbGVzIGludG8gb25lIGxv Y2FsIGZpbGUuCisgICAgICAgICAgICAgICBvIFNFVCBGVFAgU0VSVkVSLVRJTUUtT0ZGU0VUIGZv ciB3aGVuIHNlcnZlciBoYXMgd3JvbmcKKyAgICAgICAgICAgICAgICAgdGltZXpvbmUgc2V0Lgor ICAgICAgICAgICAgICAgbyBBbGxvdyBmb3IgYWx0ZXJuYXRpdmUgc2VydmVyIGludGVycHJldGF0 aW9ucyBvZiBbTV1NUFVUCisgICAgICAgICAgICAgICAgIC9VTklRVUUuCisgICAgICAgICAgICAg ICBvIFNFVCBGVFAgQU5PTllNT1VTLVBBU1NXT1JEIGxldHMgeW91IHNwZWNpZnkgdGhlIGRlZmF1 bHQKKyAgICAgICAgICAgICAgICAgYW5vbnltb3VzIHBhc3N3b3JkLgorICAgICAgICAgICAgICAg byBBbGxvdyAiR0VUIC9SRUNVUlNJVkUgcGF0aC9maWxlIiB0byBmb3JjZSBsb2NhbAorICAgICAg ICAgICAgICAgICBzdWJkaXJlY3RvcnkgY3JlYXRpb24uCisgICAgICAgICAgICAgICBvIFNFVCBG VFAgRElTUExBWSBpcyBsaWtlIFNFVCBUUkFOU0ZFUiBESVNQTEFZIGJ1dCBhcHBsaWVzCisgICAg ICAgICAgICAgICAgIG9ubHkgdG8gRlRQLgorICAgICAgICAgICAgICAgbyBGVFAgeyBFTkFCTEUs IERJU0FCTEUgfSBuZXctcHJvdG9jb2wtZmVhdHVyZS1uYW1lLgorICAgICAgICAgICAgICAgbyBG VFAgTUdFVCAvTk9ET1RGSUxFUy4KKyAgICAgICAgICAgICAgIG8gRGVidWcgbG9nIG5vdyByZWNv cmRzIEZUUCBjb21tYW5kcyBhbmQgcmVzcG9uc2VzIGluCisgICAgICAgICAgICAgICAgIGdyZXAt YWJsZSBmb3JtYXQuCisKKyAgIFsgWzE2OF1Ub3AgXSBbIFsxNjldQ29udGVudHMgXSBbIFsxNzBd Qy1LZXJtaXQgXSBbIFsxNzFdS2VybWl0IEhvbWUgXQorCisxLiBGSVhFUyBTSU5DRSBWRVJTSU9O IDcuMC4xOTYgRmlyc3QsIHRoZSBjaGFuZ2VzIGZyb20gNy4wLjE5NiB0byA3LjAuMTk3Li4uCitT b3VyY2UgYW5kIG1ha2VmaWxlIHR3ZWFrcyB0byBnZXQgc3VjY2Vzc2Z1bCBidWlsZHMgb24gcGxh dGZvcm1zIHRoYXQgd2VyZQorbm90IGF2YWlsYWJsZSBpbiB0aW1lIGZvciB0aGUgNy4wIHJlbGVh c2U6CisKKyAgICAgKiA0LjJCU0QKKyAgICAgKiA0LjNCU0QKKyAgICAgKiBBSVggNC4zCisgICAg ICogQVQmVCAzQjIgYW5kIDNCMjAKKyAgICAgKiBCZU9TIDQuNQorICAgICAqIENMSVgKKyAgICAg KiBJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWLzM4NiBSMy4yIFY0LjEuMQorICAgICAqIE9TLTkv NjgwMDAKKyAgICAgKiBPU0YvMSAxLjMuCisgICAgICogUFMvMiBBSVggMS4yLjEKKyAgICAgKiBT Q08gT1NSNS4wLngKKyAgICAgKiBTQ08gWGVuaXggMi4zLjQKKyAgICAgKiBTSU5JWCA1LjQxL0lu dGVsCisgICAgICogU3RyYXR1cyBGVFgKKyAgICAgKiBTdHJhdHVzIFZPUworICAgICAqIFN1bk9T IDQuMSB3aXRoIFguMjUKKyAgICAgKiBVbHRyaXggNC4yCisgICAgICogVW5peHdhcmUgMi4wCisK KyAgIFRoZXJlIHdlcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIGZyb20gMTk2IHRvIDE5Ny4KKwor ICAgRml4ZXMgYXBwbGllZCBhZnRlciBDLUtlcm1pdCA3LjAuMTk3IHdhcyByZWxlYXNlZDoKKwor ICAgU291cmNlIGNvZGU6IEJpZyBmbGV4ZWxpbnQgYW5kICJnY2MgLVdhbGwiIGF1ZGl0IGFuZCBj bGVhbnVwLgorCisgICBDb25maWd1cmF0aW9uOgorICAgICAqIFNvbGFyaXMgUlRTL0NUUyAoaGFy ZHdhcmUgZmxvdyBjb250cm9sKSBkaWRuJ3Qgd29yay4KKyAgICAgKiBCU0RJIFJUUy9DVFMgd29y a2VkIG9ubHkgaW4gb25lIGRpcmVjdGlvbi4KKyAgICAgKiBGcmVlQlNEIDQuMCB3aXRoIG5jdXJz ZXMgNS4wIGJyb2tlIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2luZy4KKyAgICAgKiBRTlgtMzIg YnVpbGQgbGFja2VkIC1EQklHQlVGT0sgc28gY291bGRuJ3QgZXhlY3V0ZSBiaWcgbWFjcm9zLgor CisgICBDb25uZWN0aW9uczoKKyAgICAgKiBTRVQgSE9TVCAvUFRZIGRpZG4ndCB3b3JrIG9uIHNv bWUgcGxhdGZvcm1zLgorICAgICAqIEJyb2tlbiBTRVQgSE9TVCAvVVNFUjp4eHggL1BBU1NXT1JE Onl5eSAvQUNDT1VOVDp6enogc3dpdGNoZXMKKyAgICAgICBmaXhlZC4KKyAgICAgKiBUcmFuc3Bh cmVudCBwcmludGluZyB3YXMgYnJva2VuIGluIFVuaXguCisgICAgICogQU5TV0VSIDAgKHdhaXQg Zm9yZXZlcikgZGlkbid0IHdvcmsuCisgICAgICogU29tZSBwcm9ibGVtcyBpbiBNdWx0aXRlY2gg bW9kZW0gY29tbWFuZCBzdHJpbmdzLgorICAgICAqIFNwdXJpb3VzICI/U29ycnksIGNhbid0IGNv bmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsIiBlcnJvcnMuCisgICAgICogRGlzYWJsaW5nIG1vZGVt IGNvbW1hbmQgc3RyaW5ncyBieSBzZXR0aW5nIHRoZW0gdG8gbm90aGluZyBicm9rZQorICAgICAg IGRpYWxpbmcuCisgICAgICogU0VUIERJQUwgVElNRU9VVCB2YWx1ZSB3YXMgdXN1YWxseSBpZ25v cmVkLgorICAgICAqIFNFVCBESUFMIE1FVEhPRCBQVUxTRSBkaWRuJ3Qgd29yay4KKyAgICAgKiBD ZXJ0YWluIG1vZGVtIGNvbW1hbmRzLCBpZiBjaGFuZ2VkLCBub3QgcmVmcmVzaGVkIGlmIG1vZGVt IHR5cGUKKyAgICAgICBjaGFuZ2VkLgorICAgICAqIFNFVCBTRVNTSU9OLUxPRyBjb21tYW5kIHdh cyBtaXNzaW5nIGZyb20gVk1TLgorICAgICAqIFZNUyBzZXNzaW9uIGxvZyBmb3JtYXQgZml4ZWQg Zm9yIHNjcmlwdHMuCisgICAgICogSEFOR1VQIGJ5IGRyb3BwaW5nIERUUiBkaWRuJ3Qgd29yayBp biBOZXRCU0QuCisgICAgICogU0VUIEZMT1cgL0FVVE8gdmVyc3VzIFNFVCBGTE9XIGNvbmZ1c2lv biBmaXhlZC4KKyAgICAgKiBTcHVyaW91cyBzZWNvbmRhcnkgU29sYXJpcyBsb2NrZmlsZSByZW1v dmVkLgorICAgICAqIFNDTyBPU1I1IERUUiBPbi9PZmYgaGFuZ3VwLgorICAgICAqIFVVQ1AgbG9j a2ZpbGUgcmFjZSBjb25kaXRpb24uCisKKyAgIENvbW1hbmRzIGFuZCBzY3JpcHRzOgorICAgICAq IE1pc3NpbmcgQ0FVVElPVVMgYW5kIEZBU1QgY29tbWFuZHMgcmVzdG9yZWQuCisgICAgICogQnJv a2VuIFBUWSBjb21tYW5kIGluIGxhdGUtbW9kZWwgTGludXhlcyBmaXhlZCAoQVBJIGNoYW5nZWQp LgorICAgICAqIEZpeGVkIG9mZi1ieS1vbmUgZXJyb3IgaW4gY29tbWFuZCByZWNhbGwgd2hlbiBz d2l0Y2hpbmcgZGlyZWN0aW9uLgorICAgICAqIEZpeGVkIHJlY2FsbCBvZiBjb21tYW5kcyB0aGF0 IGNvbnRhaW4gJz8nLgorICAgICAqIENPUFkgL1NXQVAtQllURVMgZGlkbid0IHdvcmsgb24gc29t ZSBhcmNoaXRlY3R1cmVzLgorICAgICAqIFZhcmlvdXMgY29tYmluYXRpb25zIG9mIENPUFkgc3dp dGNoZXMgZGlkbid0IHdvcmsuCisgICAgICogVmFyaW91cyBwcm9ibGVtcyB3aXRoIENPUFkgb3Ig UkVOQU1FIHdpdGggYSBkaXJlY3RvcnkgbmFtZSBhcworICAgICAgIHRhcmdldC4KKyAgICAgKiBT SElGVCBkaWRuJ3QgZGVjcmVtZW50IFx2KGFyZ2MpIGlmIHVzZWQgd2l0aGluIElGLCBFTFNFLCBv ciBTV0lUQ0gKKyAgICAgICBibG9jay4KKyAgICAgKiBTSElGVCBkaWRuJ3QgYWZmZWN0IHRoZSBc JSogdmFyaWFibGUuCisgICAgICogRGl2aWRlIGJ5IHplcm8gaW1wcm9wZXJseSBoYW5kbGVkIGlu IHNvbWUgXGZ1bmN0aW9uKClzLgorICAgICAqIFByb2JsZW1zIHdpdGggUkVUVVJOIGZyb20gcmln aHQtcmVjdXJzaXZlIGZ1bmN0aW9ucy4KKyAgICAgKiBGU0VFSyAvTElORSBcJWMgTEFTVCBkaWRu J3Qgd29yayBpZiBhbHJlYWR5IGF0IGVuZC4KKyAgICAgKiBTb21lIGJ1ZmZlciB2dWxuZXJhYmls aXRpZXMgYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgd2VyZQorICAgICAgIGRpc2NvdmVyZWQg YW5kIGZpeGVkLgorICAgICAqIFxmcmRpcmVjdG9yeSgpIGZpeGVkIG5vdCB0byBmb2xsb3cgc3lt Ym9saWMgbGlua3MuCisgICAgICogU0VUIEVYSVQgV0FSTklORyBPRkYgZml4ZWQgdG8gd29yayB3 aGVuIEVYSVQgZ2l2ZW4gaW4gYSBzY3JpcHQuCisgICAgICogTWlzc2luZyBERUxFVEUgYW5kIE1L RElSIGVycm9yIG1lc3NhZ2UgZml4ZWQuCisgICAgICogXGZkYXkoKSBjb3JlIGR1bXAgZm9yIGFu Y2llbnQgZGF0ZXMgZml4ZWQuCisKKyAgIEZpbGUgdHJhbnNmZXI6CisgICAgICogU0VORCAvQ09N TUFORCB3YXMgYnJva2VuLgorICAgICAqIENSRUNFSVZFIHdhcyBicm9rZW4gKGJ1dCBSRUNFSVZF IC9DT01NQU5EIHdhcyBPSykuCisgICAgICogUXVvdGluZyB3aWxkY2FyZCBjaGFycyBpbiBmaWxl bmFtZXMgZGlkbid0IHdvcmsuCisgICAgICogUHJvYmxlbXMgY2FuY2VsaW5nIHN0cmVhbWluZyBm aWxlIHRyYW5zZmVycyB3aXRoIFggb3IgWi4KKyAgICAgKiBQcm9ibGVtcyBzaGlmdGluZyBiZXR3 ZWVuIHN0cmVhbWluZyBhbmQgd2luZG93aW5nIGZpbGUgdHJhbnNmZXIuCisgICAgICogTm9uLUZV TEwgZmlsZS10cmFuc2ZlciBkaXNwbGF5cyBlcnJvbmVvdXNseSBzYWlkIFNUUkVBTUlORyB3aGVu CisgICAgICAgbm90LgorICAgICAqIEFuIGFjdGl2ZSBTRU5ELUxJU1QgcHJldmVudGVkIEdFVCBm cm9tIHdvcmtpbmcuCisgICAgICogU0VUIFNFUlZFUiBHRVQtUEFUSCBpbnRlcnByZXRhdGlvbiBv ZiByZWxhdGl2ZSBuYW1lcyBsaWtlICIuIiB3YXMKKyAgICAgICB3cm9uZy4KKyAgICAgKiBUaGUg TUFJTCBjb21tYW5kIHdhcyBicm9rZW4uCisgICAgICogImtlcm1pdCAtcyAqIiBtaWdodCBoYXZl IHNraXBwZWQgc29tZSBmaWxlcy4KKyAgICAgKiBUcmFuc2FjdGlvbiBsb2cgZW50cmllcyB3ZXJl IG5vdCBtYWRlIGZvciBleHRlcm5hbCBwcm90b2NvbAorICAgICAgIHRyYW5zZmVycy4KKyAgICAg KiBGaWxlIGNvdW50IHJlcG9ydCBmaXhlZCB0byBzaG93IG51bWJlciBvZiBmaWxlcyBhY3R1YWxs eQorICAgICAgIHRyYW5zZmVycmVkLgorICAgICAqIEZpeGVkIGZpbGVuYW1lIGNvbnZlcnNpb24g dG8gY29udmVydCBzcGFjZXMgdG8gdW5kZXJzY29yZXMuCisgICAgICogTWFkZSBTRVQgUFJFRklY SU5HIC8gU0VUIENPTlRST0wgUFJFRklYIGFsc28gYWRqdXN0IENMRUFSQ0hBTk5FTC4KKyAgICAg KiBNb3JlICJSZWNlaXZlIHdpbmRvdyBmdWxsIiBlcnJvcnMgZml4ZWQuCisgICAgICogQnJva2Vu IHRlcm1pbmFsIGJ1ZmZlcmluZyBhZnRlciBjdXJzZXMgZGlzcGxheSBpbiBTb2xhcmlzIGZpeGVk LgorICAgICAqIFNFVCBGSUxFIElOQ09NUExFVEUgRElTQ0FSRCBkaWQgbm90IHdvcmsgaW4gYWxs IGNhc2VzLgorICAgICAqIFBhY2tldCBsb2cgY2hhbmdlZCB0byByZWZvcm1hdCB0aGUgc3RhcnQt b2YtcGFja2V0IGNoYXJhY3RlcgorICAgICAgIHByaW50YWJseS4KKyAgICAgKiBEeW5hbWljIHRp bWVvdXRzIGNvdWxkIGdyb3cgcmlkaWN1bG91c2x5IGxhcmdlLgorCisgICBDaGFyYWN0ZXIgc2V0 czoKKyAgICAgKiBIZWJyZXctNyB0cmFuc2xhdGlvbnMgbWlzc2VkIHRoZSBsZXR0ZXIgVGF2Lgor ICAgICAqIEMxIGFyZWEgb2YgQ1AxMjUyIHdhcyBpZ25vcmVkLgorICAgICAqIFNFVCBUUkFOU0ZF UiBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5UIGNvdWxkIGdpdmUgZ2FyYmFnZQorICAgICAgIHRy YW5zbGF0aW9ucy4KKyAgICAgKiBUUkFOU0xBVEUgbWlnaHQgbm90IHdvcmsgb24gTGl0dGxlIEVu ZGlhbiBhcmNoaXRlY3R1cmVzLgorICAgICAqIEluc3VmZmljaWVudCByYW5nZSBjaGVja2luZyBp biBjZXJ0YWluIFRSQU5TTEFURSBvcGVyYXRpb25zLgorCisgICBUaGUgZm9sbG93aW5nIGJ1Z3Mg aW4gQy1LZXJtaXQgOC4wLjIwMCB3ZXJlIGZpeGVkIGluIDguMC4yMDE6CisKKyAgICAgKiBBbiBv YnNjdXJlIHBhdGggdGhyb3VnaCB0aGUgY29kZSBjb3VsZCBjYXVzZSB0aGUgVW5peCB2ZXJzaW9u IG9mCisgICAgICAgQy1LZXJtaXQgdG8gZHVtcCBjb3JlIGR1cmluZyBpdHMgc3RhcnR1cCBzZXF1 ZW5jZS4gVGhpcyBoYXBwZW5lZCB0bworICAgICAgIG9ubHkgb25lIHBlcnNvbiwgYnV0IG5vdyBp dCdzIGZpeGVkLgorICAgICAqIFdoZW4gQy1LZXJtaXQgOC4wIGlzIGluIEtlcm1pdCBzZXJ2ZXIg bW9kZSBhbmQgdGhlIGNsaWVudCBzYXlzICJnZXQKKyAgICAgICBibGFoIiwgd2hlcmUgYmxhaCAo b24gdGhlIHNlcnZlcikgaXMgYSBzeW1saW5rIHJhdGhlciB0aGFuIGEgcmVhbAorICAgICAgIGZp bGUsIHRoZSBzZXJ2ZXIgdW5yZWFzb25hYmx5IHJlZnVzZWQgdG8gc2VuZCB0aGUgbGlua2VkLXRv IGZpbGUuCisgICAgICogV2hlbiBDLUtlcm1pdCBpcyBhbiBGVFAgY2xpZW50IGFuZCBzYXlzICJn ZXQgZm9vL2JhciIgKGkuZS4gYQorICAgICAgIGZpbGVuYW1lIHRoYXQgaW5jbHVkZXMgb25lIG9y IG1vcmUgcGF0aCBzZWdtZW50cyksIGl0IGZhaWxlZCB0bworICAgICAgIGFjY2VwdCB0aGUgaW5j b21pbmcgZmlsZSAodGhpcyBoYXBwZW5lZCBvbmx5IHdpdGggR0VULCBub3QgTUdFVCkuCisgICAg ICogQXJyYXkgcmVmZXJlbmNlcyBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZSBidXQgb25seSBs b3dlcmNhc2UKKyAgICAgICBhcnJheSBsZXR0ZXJzIHdlcmUgYWNjZXB0ZWQuCisgICAgICogU0hP VyBWQVJJQUJMRVMgZHVtcGVkIGNvcmUgb24gXHYoc2V4cHJlc3Npb24pIGFuZCBcdihzdmFsdWUp LgorICAgICAqIFNwdXJpb3VzIHJlZnVzYWxzIG9mIHJlbW90ZSBkaXJlY3RvcnkgbGlzdGluZ3Mg aWYgdGhlIHJlbW90ZQorICAgICAgIHNlcnZlcidzIGRhdGUgd2FzIHNldCBpbiB0aGUgcGFzdC4K KyAgICAgKiBJbiBBSVgsIGFuZCBtYXliZSBlbHNld2hlcmUgdG9vLCBLZXJtaXQncyBDT1BZIGNv bW1hbmQgYWx3YXlzCisgICAgICAgZmFpbGVkIHdpdGggIlNvdXJjZSBhbmQgZGVzdGluYXRpb24g YXJlIHRoZSBzYW1lIGZpbGUiIHdoZW4gdGhlCisgICAgICAgZGVzdGluYXRpb24gZmlsZSBkaWRu J3QgZXhpc3QuCisgICAgICogVGhlIFZNUyB2ZXJzaW9uIG9mIEMtS2VybWl0IGRpZCBub3Qgd29y ayBpbiBCYXRjaCBvciB3aGVuIFNQQVdOJ2QuCisgICAgICAgVG8gY29tcG91bmQgdGhlIHByb2Js ZW0sIGl0IGFsc28gcHJldHR5IG11Y2ggaWdub3JlZCB0aGUgLUIgYW5kIC16CisgICAgICAgY29t bWFuZC1saW5lIG9wdGlvbnMsIHdob3NlIHB1cnBvc2UgaXMgdG8gd29yayBhcm91bmQgc3VjaAor ICAgICAgIHByb2JsZW1zLgorICAgICAqIEMtS2VybWl0IDguMCBjb3VsZCBub3QgYmUgYnVpbHQg b24gSVJJWCA1LnguCisgICAgICogVGhlIEMtS2VybWl0IDguMCBidWlsZCBmb3IgUU5YNiBzYWlk IGl0IHdhcyBhbiAiKHVua25vd24gdmVyc2lvbikiLgorCisgICBPdGhlciBmaXhlcyBhcmUgbGlz dGVkIGluIHRoZSBbMTcyXXByZXZpb3VzIHNlY3Rpb24uCisKKyAgIFsgWzE3M11Ub3AgXSBbIFsx NzRdQ29udGVudHMgXSBbIFsxNzVdQy1LZXJtaXQgXSBbIFsxNzZdS2VybWl0IEhvbWUgXQorCisy LiBTU0ggQU5EIEhUVFAKKworMi4xLiBTU0ggQ29ubmVjdGlvbnMKKworICAgICBUaGlzIHNlY3Rp b24gZG9lcyBub3QgYXBwbHkgdG8gWzE3N11LZXJtaXQgOTUgMi4wLCB3aGljaCBoYXMgaXRzIG93 bgorICAgICBidWlsdC1pbiBTU0ggY2xpZW50LCB3aGljaCBpcyBkb2N1bWVudGVkIFsxNzhdU0VQ QVJBVEVMWS4KKworICAgT24gbW9zdCBVTklYIHBsYXRmb3JtcywgQy1LZXJtaXQgY2FuIG1ha2Ug U1NIIChTZWN1cmUgU0hlbGwpIGNvbm5lY3Rpb24KKyAgIGJ5IHJ1bm5pbmcgdGhlIGV4dGVybmFs IFNTSCBjb21tYW5kIG9yIHByb2dyYW0gdGhyb3VnaCBpdHMKKyAgIHBzZXVkb3Rlcm1pbmFsIGlu dGVyZmFjZS4gVGhlIGNvbW1hbmQgaXM6CisKKyAgIFNTSCB0ZXh0CisgICAgICAgICAgVGVsbHMg S2VybWl0IHRvIHN0YXJ0IHRoZSBleHRlcm5hbCBTU0ggY2xpZW50LCBwYXNzaW5nIHRoZSBnaXZl bgorICAgICAgICAgIHRleHQgdG8gaXQgb24gdGhlIGNvbW1hbmQgbGluZS4gTm9ybWFsbHkgdGhl IHRleHQgaXMganVzdCB0aGUKKyAgICAgICAgICBob3N0bmFtZSwgYnV0IGl0IGNhbiBiZSBhbnl0 aGluZyBlbHNlIHRoYXQgaXMgYWNjZXB0YWJsZSB0byB0aGUKKyAgICAgICAgICBzc2ggY2xpZW50 LiBJZiB0aGUgY29tbWFuZCBzdWNjZWVkcywgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZSBhbmQKKyAg ICAgICAgICBLZXJtaXQgYXV0b21hdGljYWxseSBlbnRlcnMgQ09OTkVDVCAodGVybWluYWwpIG1v ZGUuIFlvdSBjYW4gdXNlCisgICAgICAgICAgdGhlIFNTSCBjb21tYW5kIHRvIG1ha2UgYSBjb25u ZWN0aW9uIHRvIGFueSBob3N0IHRoYXQgaGFzIGFuIFNTSAorICAgICAgICAgIHNlcnZlci4KKwor ICAgS2VybWl0J3MgU1NIIGNvbW1hbmQgZ2l2ZXMgeW91IGFsbCB0aGUgZmVhdHVyZXMgb2YgS2Vy bWl0IG9uIGFuIFNTSAorICAgY29ubmVjdGlvbjogY29tbWFuZCBsYW5ndWFnZSwgZmlsZSB0cmFu c2ZlciwgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbiwKKyAgIHNjcmlwdGluZywgYW5kIGFsbCB0 aGUgcmVzdC4gQnkgZGVmYXVsdCwgQy1LZXJtaXQgaW52b2tlcyBTU0ggd2l0aCAiLWUKKyAgIG5v bmUiLCB3aGljaCBkaXNhYmxlcyB0aGUgc3NoIGVzY2FwZSBjaGFyYWN0ZXIgYW5kIG1ha2VzIHRo ZSBjb25uZWN0aW9uCisgICB0cmFuc3BhcmVudCBmb3IgcHVycG9zZXMgb2YgZmlsZSB0cmFuc2Zl ci4gWW91IGNhbiwgaG93ZXZlciwgY2hhbmdlIHRoZQorICAgU1NIIGludm9jYXRpb24gdG8gd2hh dGV2ZXIgZWxzZSB5b3UgbWlnaHQgbmVlZCAoYW4gZXhwbGljaXQgcGF0aCwKKyAgIGFkZGl0aW9u YWwgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgZXRjKSB3aXRoOgorCisgICBTRVQgU1NIIENPTU1B TkQgdGV4dAorICAgICAgICAgIFNwZWNpZmllcyB0aGUgc3lzdGVtIGNvbW1hbmQgdGhhdCBLZXJt aXQncyBTU0ggY29tbWFuZCBzaG91bGQKKyAgICAgICAgICB1c2UgdG8gaW52b2tlIHRoZSBleHRl cm5hbCBTU0ggY2xpZW50LiBVc2UgdGhpcyBjb21tYW5kIHRvCisgICAgICAgICAgc3VwcGx5IGEg c3BlY2lmaWMgcGF0aCBvciBhbHRlcm5hdGl2ZSBuYW1lLCBvciB0byBpbmNsdWRlCisgICAgICAg ICAgZGlmZmVyZW50IG9yIG1vcmUgY29tbWFuZC1saW5lIG9wdGlvbnMuCisKKyAgIEluIG1vc3Qg Y2FzZXMsIHRoZXNlIGNvbm5lY3Rpb25zIHdvcmsgcXVpdGUgd2VsbC4gVGhleSBjYW4gYmUgc2Ny aXB0ZWQKKyAgIGxpa2UgYW55IG90aGVyIGNvbm5lY3Rpb24sIGFuZCBmaWxlIHRyYW5zZmVyIGdv ZXMgYXMgZmFzdCBhcywgb3IgZmFzdGVyCisgICB0aGFuLCBvbiBhIHJlZ3VsYXIgVGVsbmV0IGNv bm5lY3Rpb24uIEluIHNvbWUgY2FzZXMsIGhvd2V2ZXIsIHRoZQorICAgdW5kZXJseWluZyBwc2V1 ZG90ZXJtaW5hbCBkcml2ZXIgaXMgYSBsaW1pdGluZyBmYWN0b3IsIHJlc3VsdGluZyBpbgorICAg c2xvdyBvciBmYWlsZWQgZmlsZSB0cmFuc2ZlcnMuIFNvbWV0aW1lcyB5b3UgY2FuIHdvcmsgYXJv dW5kIHN1Y2gKKyAgIHByb2JsZW1zIGJ5IHJlZHVjaW5nIHRoZSBLZXJtaXQgcGFja2V0IGxlbmd0 aC4gTm90ZSB0aGF0IEtlcm1pdCBkb2VzCisgICBub3QgY29uc2lkZXIgU1NIIGNvbm5lY3Rpb25z IHRvIGJlIHJlbGlhYmxlLCBzbyBpdCBkb2VzIG5vdCBvZmZlciB0bworICAgdXNlIHN0cmVhbWlu ZyBpbiBLZXJtaXQgcHJvdG9jb2wgdHJhbnNmZXJzIChidXQgeW91IGNhbiBmb3JjZSBpdCB3aXRo CisgICBTRVQgUkVMSUFCTEUgb3IgU0VUIFNUUkVBTUlORyBpZiB5b3Ugd2lzaCkuCisKKyAgIFRo ZSBTU0ggY29tbWFuZCBpcyBsaWtlIHRoZSBURUxORVQgY29tbWFuZDogaXQgZW50ZXJzIENPTk5F Q1QgbW9kZQorICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUuIFRo ZXJlZm9yZSwgdG8gc2NyaXB0IGFuIFNTSAorICAgY29ubmVjdGlvbiwgdXNlOgorCisgIHNldCBo b3N0IC9wdHkgc3NoIC1lIG5vbmUgWyBvdGhlci1vcHRpb25zIF0gaG9zdAorICBpZiBmYWlsIC4u LgorCisgICB0byBtYWtlIHRoZSBjb25uZWN0aW9uLgorCisgICBIZXJlJ3MgYSBzZXF1ZW5jZSB0 aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgYSBjb25uZWN0aW9uIHRvIGEgZ2l2ZW4gaG9zdAorICAg dXNpbmcgVGVsbmV0IGlmIHRoZSBob3N0IGFjY2VwdHMgaXQsIG90aGVyd2lzZSBTU0g6CisKKyAg aWYgbm90IGRlZmluZWQgXCUxIGV4aXQgMSBVc2FnZTogXCUwIGhvc3QKKyAgc2V0IHF1aWV0IG9u CisgIHNldCBob3N0IFwlMSAyMyAvdGVsbmV0CisgIGlmIGZhaWwgeworICAgICAgc2V0IGhvc3Qg L3B0eSBzc2ggLWwgXG0odXNlcikgLWUgbm9uZSBcJTEKKyAgICAgIGlmIGZhaWwgZXhpdCAxIFwl MTogVGVsbmV0IGFuZCBTU0ggYm90aCBmYWlsCisgICAgICBlY2hvIFNTSCBjb25uZWN0aW9uIHRv IFwlMSBzdWNjZXNzZnVsCisgIH0gZWxzZSB7CisgICAgICBlY2hvIFRlbG5ldCBjb25uZWN0aW9u IHRvIFwlMSBzdWNjZXNzZnVsCisgIH0KKworICAgSW4gU1NIIHYyLCBpdCBpcyBwb3NzaWJsZSB0 byBtYWtlIGFuIFNTSCBjb25uZWN0aW9uIGRpcmVjdCB0byBhIEtlcm1pdAorICAgc2VydmVyIHN5 c3RlbSBpZiB0aGUgaG9zdCBhZG1pbmlzdHJhdG9yIGhhcyBjb25maWd1cmVkIHRoZSBTU0ggc2Vy dmVyCisgICB0byBhbGxvdyB0aGlzOyBbMTc5XUNMSUNLIEhFUkUgZm9yIGRldGFpbHMuCisKKyAg IFNpbmNlIEtlcm1pdCB1c2VzIGV4dGVybmFsIHNzaCBjbGllbnQgc29mdHdhcmUsIGFuZCBzaW5j ZSB0aGVyZSBhcmUKKyAgIGRpZmZlcmVudCBzc2ggY2xpZW50cyAoYW5kIGRpZmZlcmVudCByZWxl YXNlcyBvZiBlYWNoIG9uZSksIHRoZSBleGFjdAorICAgY29tbWFuZCB0byBiZSB1c2VkIHRvIG1h a2UgYW4gU1NIL0tlcm1pdCBjb25uZWN0aW9uIGNhbiB2YXJ5LiBIZXJlIGlzCisgICB0aGUgY29t bWFuZCBmb3IgdGhlIE9wZW5TU0ggMy4wLjJwMSBjbGllbnQ6CisKK3NldCBob3N0IC9waXBlIHNz aCAtZSBub25lIFsgLWwgdXNlcm5hbWUgXSAtVCAtcyBob3N0bmFtZSBrZXJtaXQKKworICAgRXhh bXBsZToKKworc2V0IGhvc3QgL3BpcGUgc3NoIC1lIG5vbmUgLWwgb2xnYSAtVCAtcyBocS54eXpj b3JwLmNvbSBrZXJtaXQKKworICAgVGhlIFNTSCBjbGllbnQgbWlnaHQgb3IgbWlnaHQgbm90IHBy b21wdCB5b3UgZm9yIGEgcGFzc3dvcmQgb3Igb3RoZXIKKyAgIGluZm9ybWF0aW9uIGJlZm9yZSBp dCBtYWtlcyB0aGUgY29ubmVjdGlvbjsgdGhpcyBkZXBlbmRzIG9uIHlvdXIgU1NICisgICBjb25m aWd1cmF0aW9uICh5b3VyIHB1YmxpYyBhbmQgcHJpdmF0ZSBrZXlzLCB5b3VyIGF1dGhvcml6ZWQg aG9zdHMKKyAgIGZpbGUsIGV0YykuIEhlcmUncyBhIGJyaWVmIHN5bm9wc2lzIG9mIHRoZSBPcGVu U1NIIGNsaWVudCBjb21tYW5kCisgICBzeW50YXggKCJtYW4gc3NoIiBmb3IgZGV0YWlscyk6CisK KyAgIC1lIG5vbmUKKyAgICAgICAgICBUaGlzIHRlbGxzIHRoZSBTU0ggY2xpZW50IHRvIHVzZSBu byBlc2NhcGUgY2hhcmFjdGVyLiBTaW5jZSB3ZQorICAgICAgICAgIHdpbGwgYmUgdHJhbnNmZXJy aW5nIGZpbGVzIGFjcm9zcyB0aGUgY29ubmVjdGlvbiwgd2UgZG9uJ3Qgd2FudAorICAgICAgICAg IHRoZSBjb25uZWN0aW9uIHRvIHN1ZGRlbmx5IGJsb2NrIGJlY2F1c2Ugc29tZSBjaGFyYWN0ZXIg aW4gdGhlCisgICAgICAgICAgZGF0YS4KKworICAgLWwgdXNlcm5hbWUKKyAgICAgICAgICBUaGlz IGlzIHRoZSB1c2VybmFtZSBvbiB0aGUgcmVtb3RlIGhvc3QuIFlvdSBjYW4gb21pdCB0aGUgLWwK KyAgICAgICAgICBvcHRpb24gYW5kIGl0cyBhcmd1bWVudCBpZiB5b3VyIGxvY2FsIGFuZCByZW1v dGUgdXNlcm5hbWVzIGFyZQorICAgICAgICAgIHRoZSBzYW1lLiBJZiB0aGV5IGFyZSBkaWZmZXJl bnQsIHlvdSBtdXN0IHN1cHBseSB0aGUgcmVtb3RlCisgICAgICAgICAgdXNlcm5hbWUuCisKKyAg IC1UCisgICAgICAgICAgVGhpcyB0ZWxscyB0aGUgU1NIIGNsaWVudCB0byB0ZWxsIHRoZSBTU0gg c2VydmVyIG5vdCB0byBhbGxvY2F0ZQorICAgICAgICAgIGEgcHNldWRvdGVybWluYWwuIFdlIGFy ZSBub3QgbWFraW5nIGEgdGVybWluYWwgY29ubmVjdGlvbiwgd2UKKyAgICAgICAgICBkb24ndCBu ZWVkIGEgdGVybWluYWwsIGFuZCBpbiBmYWN0IGlmIGEgdGVybWluYWwgd2VyZSBhbGxvY2F0ZWQK KyAgICAgICAgICBvbiB0aGUgcmVtb3RlIGVuZCwgdGhlIGNvbm5lY3Rpb24gd291bGQgbm90IHdv cmsuCisKKyAgIC1zIC4uLiBrZXJtaXQKKyAgICAgICAgICBUaGlzIHRlbGxzIHRoZSBTU0ggY2xp ZW50IHRvIHRlbGwgdGhlIFNTSCBzZXJ2ZXIgdG8gc3RhcnQgdGhlCisgICAgICAgICAgc3BlY2lm aWVkIHN1YnN5c3RlbSAoImtlcm1pdCIpIG9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZS4gVGhl CisgICAgICAgICAgc3Vic3lzdGVtIG5hbWUgY29tZXMgYWZ0ZXIgdGhlIGhvc3RuYW1lLgorCisg ICBob3N0bmFtZQorICAgICAgICAgIFRoZSBJUCBob3N0IG5hbWUgb3IgYWRkcmVzcyBvZiB0aGUg ZGVzaXJlZCBob3N0LgorCisgICBZb3UgbWlnaHQgd2FudCB0byBpbmNsdWRlIG90aGVyIG9yIGFk ZGl0aW9uYWwgc3NoIGNvbW1hbmQtbGluZSBvcHRpb25zOworICAgIm1hbiBzc2giIGV4cGxhaW5z IHdoYXQgdGhleSBhcmUuIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgZm9yIHRoZQorICAgT3BlblNT SCAzLjAuMnAxIGNsaWVudDoKKworICAgLW9DbGVhckFsbEZvcndhcmRpbmdzIHllcworICAgLW9G b3J3YXJkQWdlbnQgbm8KKyAgIC1vRm9yd2FyZFgxMSBubworICAgLW9GYWxsYmFja1RvUnNoIG5v CisgICAgICAgICAgVGhlc2UgZW5zdXJlIHRoYXQgYSBzZWN1cmUgY29ubmVjdGlvbiBpcyB1c2Vk IGFuZCB0aGF0IHRoZQorICAgICAgICAgIGNvbm5lY3Rpb24gdXNlZCBmb3IgZmlsZSB0cmFuc2Zl ciBpcyBub3QgYWxzbyB1c2VkIGZvcgorICAgICAgICAgIGZvcndhcmRpbmcgb3RoZXIgdGhpbmdz IHRoYXQgbWlnaHQgYmUgc3BlY2lmaWVkIGluIHRoZQorICAgICAgICAgIHNzaF9jb25maWcgZmls ZS4KKworICAgLW9Qcm90b2NvbCAyCisgICAgICAgICAgKGkuZS4gU1NIIHYyKSBFbnN1cmVzIHRo YXQgdGhlIG5lZ290aWF0ZWQgcHJvdG9jb2wgc3VwcG9ydHMKKyAgICAgICAgICBzdWJzeXN0ZW1z LgorCisgICBPbmNlIHlvdSBoYXZlIGFuIFNTSCBjb25uZWN0aW9uIHRvIGEgS2VybWl0IHNlcnZl ciwgaXQncyBqdXN0IGxpa2UgYW55CisgICBvdGhlciBjb25uZWN0aW9uIHRvIGEgS2VybWl0IHNl cnZlciAoYW5kIHZlcnkgc2ltaWxhciB0byBhIGNvbm5lY3Rpb24KKyAgIHRvIGFuIEZUUCBzZXJ2 ZXIpLiBZb3UgZ2l2ZSB0aGUgY2xpZW50IGZpbGUgdHJhbnNmZXIgYW5kIG1hbmFnZW1lbnQKKyAg IGNvbW1hbmRzIGZvciB0aGUgc2VydmVyLCBhbmQgdGhlIHNlcnZlciBleGVjdXRlcyB0aGVtLiBP ZiBjb3Vyc2UgeW91CisgICBjYW4gYWxzbyBnaXZlIHRoZSBjbGllbnQgYW55IG90aGVyIGNvbW1h bmRzIHlvdSB3aXNoLgorCisgICBbIFsxODBdU1NIIEtlcm1pdCBTZXJ2ZXIgU3Vic3lzdGVtIF0g WyBbMTgxXUtlcm1pdCA5NSBCdWlsdC1pbiBTU0gKKyAgIENsaWVudCBdCisKKzIuMi4gSFRUUCBD b25uZWN0aW9ucworCisgICBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wsIG9yIEhUVFAsIGlz IHRoZSBhcHBsaWNhdGlvbiBwcm90b2NvbCBvZgorICAgdGhlIFdvcmxkIFdpZGUgV2ViIChXV1cp LCB1c2VkIGJldHdlZW4gV2ViIGJyb3dzZXJzIChjbGllbnRzKSBhbmQgV2ViCisgICBzZXJ2ZXJz LiBJdCBhbGxvd3MgYSBjbGllbnQgdG8gZ2V0IGZpbGVzIGZyb20gd2Vic2l0ZXMsIHVwbG9hZCBm aWxlcyB0bworICAgd2Vic2l0ZXMsIGRlbGV0ZSBmaWxlcyBmcm9tIHdlYnNpdGVzLCBnZXQgaW5m b3JtYXRpb24gYWJvdXQgd2Vic2l0ZQorICAgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCBhbmQgaW50 ZXJhY3Qgd2l0aCBzZXJ2ZXItc2lkZSBDR0kgc2NyaXB0cy4KKyAgIEMtS2VybWl0IGluY2x1ZGVz IGFuIEhUVFAgY2xpZW50IGNhcGFibGUgb2YgYm90aCBjbGVhci10ZXh0IGFuZCBzZWN1cmUKKyAg IEhUVFAgY29ubmVjdGlvbnMsIHRoYXQgY2FuIGRvIGFsbCB0aGVzZSB0YXNrcyBhbmQgY2FuIGJl IGF1dG9tYXRlZAorICAgdGhyb3VnaCB0aGUgS2VybWl0IHNjcmlwdGluZyBsYW5ndWFnZS4KKwor ICAgQWx0aG91Z2ggQy1LZXJtaXQgNy4wIGNvdWxkIG1ha2UgSFRUUCBjb25uZWN0aW9ucyB0byBX ZWIgc2VydmVycywgaXQKKyAgIGNvdWxkIGRvIHNvIG9ubHkgd2hlbiBubyBvdGhlciBjb25uZWN0 aW9uIHdhcyBvcGVuLCBhbmQgdGhlIHByb2NlZHVyZQorICAgd2FzIHNvbWV3aGF0IGF3a3dhcmQu IEMtS2VybWl0IDguMCBpbXByb3ZlcyBtYXR0ZXJzIGJ5OgorCisgICAgICogQWxsb3dpbmcgYW4g SFRUUCBjb25uZWN0aW9uIHRvIGJlIG9wZW4gYXQgdGhlIHNhbWUgdGltZSBhcyBhCisgICAgICAg cmVndWxhciBTRVQgTElORSBvciBTRVQgSE9TVCBjb25uZWN0aW9uLCBhbmQgYWxzbyBhdCB0aGUg c2FtZSB0aW1lCisgICAgICAgYXMgYW4gRlRQIGNvbm5lY3Rpb24gKFsxODJdU2VjdGlvbiAzKTsK KyAgICAgKiBVcGdyYWRpbmcgdGhlIEhUVFAgcHJvdG9jb2wgbGV2ZWwgZnJvbSAxLjAgdG8gMS4x LCB0aHVzIGFsbG93aW5nCisgICAgICAgZm9yIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMsIGluIHdo aWNoIGEgc2VyaWVzIG9mIGNvbW1hbmRzIGNhbiBiZQorICAgICAgIHNlbnQgb24gdGhlIHNhbWUg Y29ubmVjdGlvbiwgcmF0aGVyIHRoYW4gb25seSBvbmUgYXMgaW4gSFRUUCAxLjAKKyAgICAgICAo YW5kIEMtS2VybWl0IDcuMCk7CisgICAgICogUHJvdmlkaW5nIGZvciAib25lLXNob3QiIFVSTC1k cml2ZW4gSFRUUCBvcGVyYXRpb25zIHN1Y2ggYXMgR0VUIG9yCisgICAgICAgUFVULgorICAgICAq IFByb3ZpZGluZyBhIGRpc3RpbmN0IEhUVFAgY29tbWFuZC1saW5lIHBlcnNvbmFsaXR5LgorCisg ICBQZXJzaXN0ZW50IEhUVFAgY29ubmVjdGlvbnMgYXJlIG1hbmFnZWQgd2l0aCB0aGUgZm9sbG93 aW5nIGNvbW1hbmRzOgorCisgICBIVFRQIFsgc3dpdGNoZXMgXSBPUEVOIFsgc2VjdXJpdHktb3B0 aW9ucyBdIGhvc3Qtb3ItdXJsIFsgcG9ydCBdCisgICAgICAgICAgT3BlbnMgYSBwZXJzaXN0ZW50 IGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBob3N0IChJUCBob3N0CisgICAgICAgICAgbmFt ZSBvciBhZGRyZXNzKSBvbiB0aGUgc3BlY2lmaWVkIHBvcnQuIElmIGFueSBzd2l0Y2hlcworICAg ICAgICAgIChvcHRpb25zLCBsaXN0ZWQgaW4gdGhlIG5leHQgc2VjdGlvbikgYXJlIGluY2x1ZGVk LCB0aGVpciB2YWx1ZXMKKyAgICAgICAgICBhcmUgc2F2ZWQgYW5kIHVzZWQgZm9yIGFsbCBzdWJz ZXF1ZW50IEhUVFAgYWN0aW9uIGNvbW1hbmRzIG9uCisgICAgICAgICAgdGhlIHNhbWUgY29ubmVj dGlvbi4gSWYgbm8gcG9ydCBpcyBzcGVjaWZpZWQsIEhUVFAgKDgwKSBpcyB1c2VkLgorICAgICAg ICAgIEEgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9yIChVUkwsIFsxODNdUkZDIDE3MzgpIGNhbiBi ZSBnaXZlbgorICAgICAgICAgIGluc3RlYWQgb2YgYSBob3N0bmFtZSAob3IgYWRkcmVzcykgYW5k IHBvcnQgKGJ1dCB0aGUgVVJMIGNhbiBub3QKKyAgICAgICAgICBpbmNsdWRlIGEgZGlyZWN0b3J5 L2ZpbGUgcGF0aCkuIFRoZSBzZWN1cml0eSBvcHRpb25zIGFyZQorICAgICAgICAgIGV4cGxhaW5l ZCBbMTg0XWJlbG93LiBUaGUgSFRUUCBPUEVOIGNvbW1hbmQgcmVwbGFjZXMgdGhlCisgICAgICAg ICAgQy1LZXJtaXQgNy4wIFNFVCBIT1NUIGhvc3RuYW1lIEhUVFAgY29tbWFuZCwgd2hpY2ggbm8g bG9uZ2VyCisgICAgICAgICAgd29ya3Mgd2l0aCBIVFRQIEdFVCBhbmQgcmVsYXRlZCBjb21tYW5k cy4KKworICAgSFRUUCBDTE9TRQorICAgICAgICAgIENsb3NlcyBhbnkgb3BlbiBIVFRQIGNvbm5l Y3Rpb24gYW5kIGNsZWFycyBhbnkgc2F2ZWQgc3dpdGNoCisgICAgICAgICAgdmFsdWVzLgorCisg ICBBIFVSTCBzdGFydHMgd2l0aCBhIHByb3RvY29sIG5hbWUsIHdoaWNoIG11c3QgYmUgaHR0cCBv ciBodHRwcyBpbiB0aGlzCisgICBjYXNlOyBvcHRpb25hbGx5IGluY2x1ZGVzIGEgdXNlcm5hbWUg YW5kIHBhc3N3b3JkOyBhbmQgbXVzdCBjb250YWluIGEKKyAgIGhvc3QgbmFtZSBvciBhZGRyZXNz OgorCisgIHByb3RvY29sOi8vW3VzZXJbLnBhc3N3b3JkXV1AaG9zdFs6cG9ydF1bVVJJXQorCisg ICBIVFRQIGlzIEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbC4gSFRUUFMgaXMgdGhlIHNlY3Vy ZSAoU1NML1RMUykKKyAgIHZlcnNpb24gb2YgSFRUUC4gVGhlIFRDUCBzZXJ2aWNlIHBvcnQgaXMg ZGVyaXZlZCBmcm9tIHRoZSBwcm90b2NvbAorICAgcHJlZml4IChzbyBub3JtYWxseSB0aGUgIjpw b3J0IiBmaWVsZCBpcyBvbWl0dGVkKS4gVGh1cyB0aGUgVVJMCisgICBwcm90b2NvbCBuYW1lIHNw ZWNpZmllcyBhIGRlZmF1bHQgVENQIHNlcnZpY2UgcG9ydCBhbmQgdGhlIFVSTCB1c2VyIGFuZAor ICAgcGFzc3dvcmQgZmllbGRzIGNhbiB0YWtlIHRoZSBwbGFjZSBvZiB0aGUgL1VTRVIgYW5kIC9Q QVNTV09SRCBzd2l0Y2hlcworICAgKFsxODVdU2VjdGlvbiAyLjIuMSkuIFRoZSBvcHRpb25hbCBV UkkgaXMgYSAiY29tcGFjdCBzdHJpbmcgb2YKKyAgIGNoYXJhY3RlcnMgZm9yIGlkZW50aWZ5aW5n IGFuIGFic3RyYWN0IG9yIHBoeXNpY2FsIHJlc291cmNlIiAoWzE4Nl1SRkMKKyAgIDIzOTYpLCBz dWNoIGFzIGEgZmlsZS4gSXQgbXVzdCBiZWdpbiB3aXRoIGEgc2xhc2ggKC8pOyBpZiB0aGUgVVJJ IGlzCisgICBvbWl0dGVkLCAiLyIgaXMgc3VwcGxpZWQuIEV4YW1wbGVzOgorCisgICBodHRwIG9w ZW4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCisgICAgICAgICAgRXF1aXZhbGVudCB0byBodHRw IG9wZW4gd3d3LmNvbHVtYmlhLmVkdSBvciBodHRwIG9wZW4KKyAgICAgICAgICB3d3cuY29sdW1i aWEuZWR1IGh0dHAuCisKKyAgIGh0dHAgb3BlbiBodHRwczovL29sZ2Euc2VjcmV0QHd3dzEueHl6 Y29ycC5jb20vCisgICAgICAgICAgRXF1aXZhbGVudCB0byBodHRwIC91c2VyOm9sZ2EgL3Bhc3M6 c2VjcmV0IG9wZW4gd3d3MS54eXpjb3JwLmNvbQorICAgICAgICAgIGh0dHBzLgorCisgICBQZXJz aXN0ZW5jZSBpcyBhY2NvbXBsaXNoZWQgdW5pbGF0ZXJhbGx5IGJ5IEMtS2VybWl0IDguMC4gQW4g SFRUUCAxLjAKKyAgIHNlcnZlciBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gYWZ0ZXIgZWFjaCBhY3Rp b24uIEFsdGhvdWdoIEhUVFAgMS4xCisgICBhbGxvd3MgbXVsdGlwbGUgYWN0aW9ucyBvbiB0aGUg c2FtZSBjb25uZWN0aW9uLCBhbiBIVFRQIDEuMSBzZXJ2ZXIKKyAgIHRlbmRzIHRvIGNsb3NlIHRo ZSBjb25uZWN0aW9uIGlmIGl0IGlzIGlkbGUgZm9yIG1vcmUgdGhhbiBhIGZldworICAgc2Vjb25k cywgdG8gZGVmZW5kIGl0c2VsZiBhZ2FpbnN0IGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MuIEJ1 dCB3aGVuCisgICB5b3UgdXNlIEtlcm1pdCdzIEhUVFAgT1BFTiBjb21tYW5kIHRvIGNyZWF0ZSBh IGNvbm5lY3Rpb24sIEtlcm1pdAorICAgcmVvcGVucyBpdCBhdXRvbWF0aWNhbGx5IChpZiBuZWNl c3NhcnkpIGZvciBlYWNoIEhUVFAgYWN0aW9uIHVudGlsIHlvdQorICAgY2xvc2UgaXQgd2l0aCBI VFRQIENMT1NFLCByZWdhcmRsZXNzIG9mIHRoZSBzZXJ2ZXIncyBIVFRQIHByb3RvY29sCisgICB2 ZXJzaW9uLCBvciBob3cgbWFueSB0aW1lcyBpdCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCisKKyAg IEZpcmV3YWxscyBjYW4gYmUgbmVnb3RpYXRlZCB0aHJvdWdoIHByb3hpZXMgd2l0aCB0aGUgZm9s bG93aW5nCisgICBjb21tYW5kczoKKworICAgU0VUIFRDUCBIVFRQLVBST1hZIFsgaG9zdFs6cG9y dF0gXQorICAgICAgICAgIElmIGEgaG9zdCAoYnkgaG9zdG5hbWUgb3IgSVAgYWRkcmVzcykgaXMg c3BlY2lmaWVkLCBLZXJtaXQgdXNlcworICAgICAgICAgIGl0IGFzIGEgcHJveHkgc2VydmVyIHdo ZW4gYXR0ZW1wdGluZyBvdXRnb2luZyBUQ1AgY29ubmVjdGlvbnMgLS0KKyAgICAgICAgICBub3Qg b25seSBIVFRQIGNvbm5lY3Rpb25zLCBidXQgYWxsIFRDUC9JUCBjb25uZWN0aW9ucywgVGVsbmV0 CisgICAgICAgICAgYW5kIEZUUCBpbmNsdWRlZC4gVGhpcyBhbGxvd3MgS2VybWl0IHRvIGFkYXB0 IHRvIHRoZSBIVFRQCisgICAgICAgICAgZmlyZXdhbGwgcGVuZXRyYXRpb24gbWV0aG9kIChhcyBv cHBvc2VkIHRvIG90aGVyIG1ldGhvZHMgc3VjaCBhcworICAgICAgICAgIFNPQ0tTNCkuIElmIG5v IGhvc3RuYW1lIG9yIGlwLWFkZHJlc3MgaXMgc3BlY2lmaWVkLCBhbnkKKyAgICAgICAgICBwcmV2 aW91c2x5IHNwZWNpZmllZCBQcm94eSBzZXJ2ZXIgaXMgcmVtb3ZlZC4gSWYgbm8gcG9ydCBudW1i ZXIKKyAgICAgICAgICBpcyBzcGVjaWZpZWQsIHRoZSAiaHR0cCIgc2VydmljZSBpcyB1c2VkLiBU aGlzIGNvbW1hbmQgbXVzdCBiZQorICAgICAgICAgIGdpdmVuIGJlZm9yZSB0aGUgSFRUUCBPUEVO IGNvbW1hbmQgaWYgYSBwcm94eSBpcyB0byBiZSB1c2VkIG9yCisgICAgICAgICAgY2FuY2VsZWQu CisKKyAgIEhUVFAgWyBzd2l0Y2hlcyBdIENPTk5FQ1QgaG9zdFs6cG9ydF0KKyAgICAgICAgICBJ bnN0cnVjdHMgdGhlIEhUVFAgc2VydmVyIHRvIGFjdCBhcyBhIHByb3h5LCBlc3RhYmxpc2hpbmcg YQorICAgICAgICAgIGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBob3N0IChJUCBob3N0bmFt ZSBvciBhZGRyZXNzKSBvbiB0aGUKKyAgICAgICAgICBnaXZlbiBwb3J0ICg4MCA9IEhUVFAgYnkg ZGVmYXVsdCkgYW5kIHRvIHJlZGlyZWN0IGFsbCBkYXRhCisgICAgICAgICAgdHJhbnNtaXR0ZWQg YmV0d2VlbiBLZXJtaXQgYW5kIGl0c2VsZiB0byB0aGUgZ2l2ZW4gaG9zdCBmb3IgdGhlCisgICAg ICAgICAgbGlmZSBvZiB0aGUgY29ubmVjdGlvbi4gVGhpcyBjb21tYW5kIGlzIHRvIGJlIHVzZWQg b25seSBmb3IKKyAgICAgICAgICBkZWJ1Z2dpbmcgSFRUUCBwcm94eSBjb25uZWN0aW9ucy4gSWYg YSBwcm94eSBjb25uZWN0aW9uIGlzCisgICAgICAgICAgcmVxdWlyZWQsIGluc3RydWN0IEtlcm1p dCB0byB1c2UgdGhlIHByb3h5IHdpdGggdGhlIFNFVCBUQ1AKKyAgICAgICAgICBIVFRQLVBST1hZ IGNvbW1hbmQuCisKKzIuMi4xLiBIVFRQIENvbW1hbmQgU3dpdGNoZXMKKworICAgSFRUUCBzd2l0 Y2hlcywgbGlrZSBhbGwgb3RoZXIgc3dpdGNoZXMsIGFyZSBvcHRpb25hbC4gV2hlbiBIVFRQCisg ICBzd2l0Y2hlcyBhcmUgaW5jbHVkZWQgd2l0aCB0aGUgSFRUUCBPUEVOIGNvbW1hbmQsIHRoZXkg YXBwbHkKKyAgIGF1dG9tYXRpY2FsbHkgdG8gdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgSFRUUCBh Y3Rpb25zIChHRVQsIFBVVCwgLi4uKQorICAgb24gdGhlIHNhbWUgY29ubmVjdGlvbiB1bnRpbCBh biBIVFRQIENMT1NFIGNvbW1hbmQgaXMgZ2l2ZW4uIFNvIGlmIHlvdQorICAgaW5jbHVkZSBzd2l0 Y2hlcyAob3IgdGhlIGVxdWl2YWxlbnQgVVJMIGZpZWxkcywgc3VjaCBhcyB1c2VyIGFuZAorICAg cGFzc3dvcmQpIGluIHRoZSBIVFRQIE9QRU4gY29tbWFuZCwgeW91IGNhbiBvbWl0IHRoZW0gZnJv bSBzdWJzZXF1ZW50CisgICBjb21tYW5kcyBvbiB0aGUgc2FtZSBjb25uZWN0aW9uLiBJZiB0aGUg Y29ubmVjdGlvbiBoYXMgY2xvc2VkIHNpbmNlCisgICB5b3VyIGxhc3QgY29tbWFuZCwgaXQgaXMg YXV0b21hdGljYWxseSByZW9wZW5lZCB3aXRoIHRoZSBzYW1lIG9wdGlvbnMuCisKKyAgIElmIHlv dSBpbmNsdWRlIHN3aXRjaGVzIHdpdGggYW4gSFRUUCBhY3Rpb24gY29tbWFuZCAoc3VjaCBhcyBH RVQgb3IKKyAgIFBVVCksIHRoZXkgYXBwbHkgb25seSB0byB0aGF0IGNvbW1hbmQuCisKKyAgIC9V U0VSOm5hbWUKKyAgICAgICAgICBUbyBiZSB1c2VkIGluIGNhc2UgYSBwYWdlIHJlcXVpcmVzIGEg dXNlcm5hbWUgZm9yIGFjY2Vzcy4gVGhlCisgICAgICAgICAgdXNlcm5hbWUgaXMgc2VudCB3aXRo IHBhZ2UgcmVxdWVzdHMuIElmIGl0IGlzIGdpdmVuIHdpdGggdGhlCisgICAgICAgICAgT1BFTiBj b21tYW5kIGl0IGlzIHNhdmVkIHVudGlsIG5lZWRlZC4gSWYgYSB1c2VybmFtZSBpcyBpbmNsdWRl ZAorICAgICAgICAgIGluIGEgVVJMLCBpdCBvdmVycmlkZXMgdGhlIHVzZXJuYW1lIGdpdmVuIGlu IHRoZSBzd2l0Y2guCisgICAgICAgICAgQ0FVVElPTjogVXNlcm5hbWUgYW5kIHBhc3N3b3JkIChh bmQgYWxsIG90aGVyIGluZm9ybWF0aW9uLAorICAgICAgICAgIGluY2x1ZGluZyBjcmVkaXQgY2Fy ZCBudW1iZXJzIGFuZCBvdGhlciBtYXRlcmlhbCB0aGF0IHlvdSBtaWdodAorICAgICAgICAgIHBy ZWZlciB0byBwcm90ZWN0IGZyb20gcHVibGljIHZpZXcpIGFyZSBzZW50IGFjcm9zcyB0aGUgbmV0 d29yaworICAgICAgICAgIGluIGNsZWFyIHRleHQgb24gcmVndWxhciBIVFRQIGNvbm5lY3Rpb25z LCBidXQgYXV0aGVudGljYXRpb24gaXMKKyAgICAgICAgICBwZXJmb3JtZWQgc2VjdXJlbHkgb24g SFRUUFMgY29ubmVjdGlvbnMuCisKKyAgIC9QQVNTV09SRDp0ZXh0CisgICAgICAgICAgVG8gYmUg dXNlZCBpbiBjYXNlIGEgd2ViIHBhZ2UgcmVxdWlyZXMgYSBwYXNzd29yZCBmb3IgYWNjZXNzLgor ICAgICAgICAgIFRoZSBwYXNzd29yZCBpcyBzZW50IHdpdGggcGFnZSByZXF1ZXN0cy4gSWYgaXQg aXMgZ2l2ZW4gd2l0aCB0aGUKKyAgICAgICAgICBPUEVOIGNvbW1hbmQgaXQgaXMgc2F2ZWQgdW50 aWwgbmVlZGVkLiBJZiBhIHBhc3N3b3JkIGlzIGdpdmVuIGluCisgICAgICAgICAgYSBVUkwsIGl0 IG92ZXJyaWRlcyB0aGUgb25lIGdpdmVuIGhlcmUuIENBVVRJT046IChzYW1lIGFzIGZvcgorICAg ICAgICAgIC9VU0VSOikuCisKKyAgIC9BR0VOVDp1c2VyLWFnZW50CisgICAgICAgICAgSWRlbnRp ZmllcyB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBhZ2Vu dAorICAgICAgICAgIHN0cmluZywgd2hpY2ggaXMgIkMtS2VybWl0IiAoZm9yIEMtS2VybWl0KSBv ciAiS2VybWl0LTk1IiAoZm9yCisgICAgICAgICAgS2VybWl0IDk1KS4KKworICAgL0FSUkFZOmFy cmF5LWRlc2lnbmF0b3IKKyAgICAgICAgICBUZWxscyBLZXJtaXQgdG8gc3RvcmUgdGhlIHJlc3Bv bnNlIGhlYWRlcnMgaW4gdGhlIGdpdmVuIGFycmF5LAorICAgICAgICAgIG9uZSBsaW5lIHBlciBl bGVtZW50LiBUaGUgYXJyYXkgbmVlZCBub3QgYmUgZGVjbGFyZWQgaW4gYWR2YW5jZS4KKyAgICAg ICAgICBFeGFtcGxlOiAvYXJyYXk6JmEuCisKKyAgIC9UT1NDUkVFTgorICAgICAgICAgIFRlbGxz IEtlcm1pdCB0byBkaXNwbGF5IGFueSByZXNwb25zZSB0ZXh0IG9uIHRoZSBzY3JlZW4uIEl0Cisg ICAgICAgICAgYXBwbGllcyBpbmRlcGVuZGVudGx5IG9mIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZp Y2F0aW9uOyB0aHVzIGl0CisgICAgICAgICAgaXMgcG9zc2libGUgdG8gaGF2ZSB0aGUgc2VydmVy IHJlc3BvbnNlIGdvIHRvIHRoZSBzY3JlZW4sIGEKKyAgICAgICAgICBmaWxlLCBib3RoLCBvciBu ZWl0aGVyLgorCisgICAvSEVBREVSOmhlYWRlci1pdGVtKHMpCisgICAgICAgICAgVXNlZCBmb3Ig c3BlY2lmeWluZyBhbnkgb3B0aW9uYWwgaGVhZGVycyB0byBiZSBzZW50IHdpdGggSFRUUAorICAg ICAgICAgIHJlcXVlc3RzLgorCisgIC9IRUFERVI6dGFnOnZhbHVlCisKKyAgICAgICAgICBUbyBz ZW5kIG1vcmUgdGhhbiBvbmUgaGVhZGVyLCB1c2UgYnJhY2VzIGZvciBncm91cGluZzoKKworICAv SEVBREVSOnt7dGFnOnZhbHVlfXt0YWc6dmFsdWV9Li4ufQorCisgICAgICAgICAgRm9yIGEgbGlz dCBvZiB2YWxpZCB0YWdzIGFuZCB2YWx1ZSBmb3JtYXRzIHNlZSBbMTg3XVJGQyAyNjE2LAorICAg ICAgICAgICJIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgLS0gSFRUUC8xLjEiLiBBIG1heGlt dW0gb2YgZWlnaHQKKyAgICAgICAgICBoZWFkZXJzIG1heSBiZSBzcGVjaWZpZWQuCisKKzIuMi4y LiBIVFRQIEFjdGlvbiBDb21tYW5kcworCisgICBIVFRQIGFjdGlvbnMgY2FuIG9jY3VyIHdpdGhp biBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiwgb3IgdGhleSBjYW4gYmUKKyAgIHNlbGYtY29udGFp bmVkICgiY29ubmVjdGlvbmxlc3MiKS4gQSBwZXJzaXN0ZW50IEhUVFAgY29ubmVjdGlvbiBiZWdp bnMKKyAgIHdpdGggYW4gSFRUUCBPUEVOIGNvbW1hbmQsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9y ZSBIVFRQIGFjdGlvbgorICAgY29tbWFuZHMsIGFuZCBpcyB0ZXJtaW5hdGVkIHdpdGggYW4gSFRU UCBDTE9TRSBjb21tYW5kOgorCisgIGh0dHAgb3BlbiB3d3cuY29sdW1iaWEuZWR1CisgIGlmIGZh aWx1cmUgc3RvcCAxIEhUVFAgT1BFTiBmYWlsZWQ6IFx2KGh0dHBfbWVzc2FnZSkKKyAgaHR0cCBn ZXQga2VybWl0L2luZGV4Lmh0bWwKKyAgaWYgZmFpbHVyZSBzdG9wIDEgSFRUUCBHRVQgZmFpbGVk OiBcdihodHRwX21lc3NhZ2UpCisgIChtb3JlIGFjdGlvbnMgcG9zc2libGUgaGVyZS4uLikKKyAg aHR0cCBjbG9zZQorCisgICBBIHNlbGYtY29udGFpbmVkIEhUVFAgYWN0aW9uIG9jY3VycyB3aGVu IGEgVVJMIGlzIGdpdmVuIGluc3RlYWQgb2YgYQorICAgcmVtb3RlIGZpbGUgbmFtZSB0byBhbiBI VFRQIGFjdGlvbiBjb21tYW5kLiBJbiB0aGlzIGNhc2UsIEtlcm1pdCBtYWtlcworICAgdGhlIEhU VFAgY29ubmVjdGlvbiwgdGFrZXMgdGhlIGFjdGlvbiwgYW5kIHRoZW4gY2xvc2VzIHRoZSBjb25u ZWN0aW9uLgorICAgSWYgYW4gSFRUUCBjb25uZWN0aW9uIHdhcyBhbHJlYWR5IG9wZW4sIGl0IGlz IGNsb3NlZCBzaWxlbnRseSBhbmQKKyAgIGF1dG9tYXRpY2FsbHkuCisKKyAgaHR0cCBnZXQgaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKworICAgS2VybWl0J3MgSFRU UCBhY3Rpb24gY29tbWFuZHMgYXJlIGFzIGZvbGxvd3MuIFN3aXRjaGVzIG1heSBiZSBpbmNsdWRl ZAorICAgd2l0aCBhbnkgb2YgdGhlc2UgdG8gb3ZlcnJpZGUgc3dpdGNoIChvciBkZWZhdWx0KSB2 YWx1ZXMgZ2l2ZW4gaW4gdGhlCisgICBIVFRQIE9QRU4gY29tbWFuZC4KKworICAgSFRUUCBbIHN3 aXRjaGVzIF0gR0VUIHJlbW90ZS1maWxlbmFtZSBbIGxvY2FsLWZpbGVuYW1lIF0KKyAgICAgICAg ICBSZXRyaWV2ZXMgdGhlIG5hbWVkIGZpbGUgZnJvbSB0aGUgc2VydmVyIHNwZWNpZmllZCBpbiB0 aGUgbW9zdAorICAgICAgICAgIHJlY2VudCBIVFRQIE9QRU4gY29tbWFuZCBmb3Igd2hpY2ggYSBj b3JyZXNwb25kaW5nIEhUVFAgQ0xPU0UKKyAgICAgICAgICBjb21tYW5kIGhhcyBub3QgYmVlbiBn aXZlbi4gVGhlIGZpbGVuYW1lIG1heSBub3QgaW5jbHVkZQorICAgICAgICAgIHdpbGRjYXJkcyAo SFRUUCBwcm90b2NvbCBkb2VzIG5vdCBzdXBwb3J0IHRoZW0pLiBJZiBubyBIVFRQIE9QRU4KKyAg ICAgICAgICBjb21tYW5kIGlzIGluIGVmZmVjdCwgdGhpcyBmb3JtIG9mIHRoZSBIVFRQIEdFVCBj b21tYW5kIGZhaWxzLgorICAgICAgICAgIFRoZSBkZWZhdWx0IGxvY2FsIGZpbGVuYW1lIGlzIHRo ZSBzYW1lIGFzIHRoZSByZW1vdGUgbmFtZSwgYnV0CisgICAgICAgICAgd2l0aCBhbnkgcGF0aG5h bWUgc3RyaXBwZWQuIEZvciBleGFtcGxlLCB0aGUgY29tbWFuZCBodHRwIGdldAorICAgICAgICAg IGtlcm1pdC9pbmRleC5odG1sIHN0b3JlcyB0aGUgZmlsZSBpbiB0aGUgY3VycmVudCBsb2NhbCBk aXJlY3RvcnkKKyAgICAgICAgICBhcyBpbmRleC5odG1sLiBJZiB0aGUgL0hFQURFUlM6IHN3aXRj aCBpcyBpbmNsdWRlZCwgaW5mb3JtYXRpb24KKyAgICAgICAgICBhYm91dCB0aGUgZmlsZSBpcyBh bHNvIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIGFycmF5IChleHBsYWluZWQKKyAgICAgICAgICBp biBbMTg4XVNlY3Rpb24gMi4yLjMpLiBBbGwgZmlsZXMgYXJlIHRyYW5zZmVycmVkIGluIGJpbmFy eQorICAgICAgICAgIG1vZGUuIEhUVFAgZG9lcyBub3QgcHJvdmlkZSBmb3IgcmVjb3JkLWZvcm1h dCBvciBjaGFyYWN0ZXItc2V0CisgICAgICAgICAgY29udmVyc2lvbi4KKworICAgSFRUUCBbIHN3 aXRjaGVzIF0gR0VUIHVybCBbIGxvY2FsLWZpbGVuYW1lIF0KKyAgICAgICAgICBXaGVuIEhUVFAg R0VUIGlzIGdpdmVuIGEgVVJMIHJhdGhlciB0aGFuIGEgZmlsZW5hbWUsIEtlcm1pdAorICAgICAg ICAgIG9wZW5zIGEgY29ubmVjdGlvbiB0byB0aGUgZGVzaWduYXRlZCBzZXJ2ZXIgKGNsb3Npbmcg YW55CisgICAgICAgICAgcHJldmlvdXNseSBvcGVuIEhUVFAgY29ubmVjdGlvbiksIGdldHMgdGhl IGZpbGUsIGFuZCB0aGVuIGNsb3NlcworICAgICAgICAgIHRoZSBjb25uZWN0aW9uLiBJZiB0aGUg VVJMIGRvZXMgbm90IGluY2x1ZGUgYSBmaWxlbmFtZSwKKyAgICAgICAgICBpbmRleC5odG1sIGlz IHN1cHBsaWVkLiBUaGlzIGlzIHRoZSBzZWxmLWNvbnRhaW5lZCBvbmUtc3RlcAorICAgICAgICAg ICJjb25uZWN0aW9ubGVzcyIgbWV0aG9kIGZvciBnZXR0aW5nIGEgZmlsZSBmcm9tIGEgV2ViIHNl cnZlci4KKyAgICAgICAgICBUaGUgZGF0YSBpcyBub3QgaW50ZXJwcmV0ZWQ7IEhUVFAgR0VUIGlz IGxpa2UgImx5bnggLXNvdXJjZSIKKyAgICAgICAgICByYXRoZXIgdGhhbiAibHlueCAtZHVtcCIu CisKKyAgIEluIHRoZSByZW1haW5pbmcgSFRUUCBhY3Rpb24gY29tbWFuZHMsIHRoZSBkaXN0aW5j dGlvbiBiZXR3ZWVuIGEgcmVtb3RlCisgICBmaWxlbmFtZSBhbmQgYSBVUkwgYXJlIHRoZSBzYW1l IGFzIGluIHRoZSBIVFRQIEdFVCBjb21tYW5kLgorCisgICBIVFRQIFsgc3dpdGNoZXMgXSBIRUFE IHJlbW90ZS1maWxlbmFtZS1vci11cmwgWyBsb2NhbC1maWxlbmFtZSBdCisgICAgICAgICAgTGlr ZSBHRVQgZXhjZXB0IHdpdGhvdXQgYWN0dWFsbHkgZ2V0dGluZyB0aGUgZmlsZTsgaW5zdGVhZCBp dAorICAgICAgICAgIHJldHJpZXZlcyBvbmx5IHRoZSBoZWFkZXJzLiBJZiB0aGUgL0FSUkFZOiBv ciAvVE9TQ1JFRU4gc3dpdGNoCisgICAgICAgICAgaXMgaW5jbHVkZWQsIHRoZXJlIGlzIG5vIGRl ZmF1bHQgbG9jYWwgb3V0cHV0IGZpbGVuYW1lIGJ1dCB5b3UKKyAgICAgICAgICBjYW4gc3RpbGwg c3BlY2lmeSBvbmUuIElmIG5laXRoZXIgb2YgdGhlc2Ugc3dpdGNoZXMgaXMgaW5jbHVkZWQsCisg ICAgICAgICAgdGhlIGRlZmF1bHQgbG9jYWwgZmlsZW5hbWUgaXMgdGhlIHNhbWUgYXMgdGhlIHJl bW90ZSBmaWxlbmFtZSwKKyAgICAgICAgICBidXQgd2l0aCBhbnkgcGF0aCBzdHJpcHBlZCBhbmQg d2l0aCAiLmhlYWQiIGFwcGVuZGVkLiBUaGUgSEVBRAorICAgICAgICAgIGNvbW1hbmQgY2FuIGJl IHVzZWQgaW4gYSBzY3JpcHQgd2l0aCB0aGUgL0FSUkFZOiBzd2l0Y2ggdG8KKyAgICAgICAgICBy ZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVxdWVzdGVkIHJlc291cmNlIHRvIGRldGVy bWluZQorICAgICAgICAgIHdoZXRoZXIgdGhlIHJlc291cmNlIHNob3VsZCBhY3R1YWxseSBiZSBy ZXRyaWV2ZWQgd2l0aCBhCisgICAgICAgICAgc3Vic2VxdWVudCBHRVQgcmVxdWVzdC4KKworICAg SFRUUCBbIHN3aXRjaGVzIF0gSU5ERVggcmVtb3RlLWRpcmVjdG9yeS1vci11cmwgWyBsb2NhbC1m aWxlbmFtZSBdCisgICAgICAgICAgQXNrcyB0aGUgc2VydmVyIHRvIHNlbmQgYSBsaXN0aW5nIG9m IHRoZSBmaWxlcyBpbiB0aGUgZ2l2ZW4KKyAgICAgICAgICBzZXJ2ZXIgZGlyZWN0b3J5LiBUaGlz IGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCBieSBtb3N0IFdlYgorICAgICAgICAgIHNlcnZlcnMu IEV2ZW4gd2hlbiBpdCBpcyBzdXBwb3J0ZWQsIHRoZXJlIGlzIG5vIHN0YW5kYXJkIGZvcm1hdAor ICAgICAgICAgIGZvciB0aGUgbGlzdGluZy4KKworICAgSFRUUCBbIHN3aXRjaGVzIF0gUE9TVCBb IC9NSU1FLVRZUEU6dHlwZSBdIHNvdXJjZS1maWxlCisgICAgICAgICAgcmVtb3RlLXBhdGgtb3It dXJsIFsgcmVzdWx0LWZpbGUgXQorICAgICAgICAgIFNlbmRzIGRhdGEgdG8gYSBwcm9jZXNzIHJ1 bm5pbmcgb24gdGhlIHJlbW90ZSBob3N0OyB0aGUgcmVzdWx0CisgICAgICAgICAgaXMgdXN1YWxs eSBhbiBIVE1MIGZpbGUgYnV0IGNvdWxkIGJlIGFueXRoaW5nLiBUaGUgZGF0YSB0byBiZQorICAg ICAgICAgIHBvc3RlZCBtdXN0IGJlIHJlYWQgZnJvbSBhIGxvY2FsIGZpbGUgKHRoZSBzb3VyY2Ut ZmlsZSkuIElmIGEKKyAgICAgICAgICByZXN1bHQgZmlsZSBpcyBzcGVjaWZpZWQsIEtlcm1pdCBz dG9yZXMgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGluCisgICAgICAgICAgaXQuCisKKyAgIEhUVFAg WyBzd2l0Y2hlcyBdIFBVVCBbIE1JTUUtVFlQRTp0eXBlIF0gbG9jYWwtZmlsZSBbCisgICAgICAg ICAgcmVtb3RlLWZpbGUtb3ItdXJsIFsgcmVzdWx0LWZpbGUgXSBdCisgICAgICAgICAgVXBsb2Fk cyBhIGxvY2FsIGZpbGUgdG8gdGhlIHNlcnZlci4gT25seSB0aGUgbmFtZSBvZiBhIHNpbmdsZQor ICAgICAgICAgIGZpbGUgY2FuIGJlIGdpdmVuOyB3aWxkY2FyZHMgKGFuZCBncm91cCB0cmFuc2Zl cnMpIGFyZSBub3QKKyAgICAgICAgICBzdXBwb3J0ZWQgYnkgSFRUUCBwcm90b2NvbC4gSWYgbm8g cmVtb3RlIGZpbGVuYW1lIGlzIGdpdmVuLCB0aGUKKyAgICAgICAgICBmaWxlIGlzIHNlbnQgd2l0 aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBsb2NhbCBmaWxlLCBidXQgd2l0aCBhbnkKKyAgICAgICAg ICBwYXRobmFtZSBzdHJpcHBlZC4KKworICAgSFRUUCBbIHN3aXRjaGVzIF0gREVMRVRFIHJlbW90 ZS1maWxlLW9yLXVybCBbIGxvY2FsLXJlc3VsdC1maWxlIF0KKyAgICAgICAgICBBc2tzIHRoZSBz ZXJ2ZXIgdG8gZGVsZXRlIHRoZSBzcGVjaWZpZWQgc2luZ2xlIGZpbGUuIElmIGEgcmVzdWx0Cisg ICAgICAgICAgZmlsZSBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgY29udGFpbiBhbnkgcmVzcG9uc2Ug ZGF0YSByZXR1cm5lZCBieQorICAgICAgICAgIHRoZSBzZXJ2ZXIuCisKKyAgIE5vdGUgdGhlIGxp bWl0YXRpb25zIG9mIEhUVFAgcHJvdG9jb2wgY29tcGFyZWQgdG8gKHNheSkgRlRQIG9yIEtlcm1p dC4KKyAgIFRoZXJlIGlzIG5vIGNvbW1hbmQgZm9yIGNoYW5naW5nIGRpcmVjdG9yaWVzLCBubyBz dGFuZGFyZCB3YXkgdG8gZ2V0CisgICBmaWxlIG9yIGRpcmVjdG9yeSBsaXN0cywgbm8gd2F5IHRv IHRyYW5zZmVyIGZpbGUgZ3JvdXBzIGJ5IHVzaW5nCisgICB3aWxkY2FyZCBub3RhdGlvbiwgZXRj LCBhbmQgdGhlcmVmb3JlIG5vIGdvb2Qgd2F5IHRvIChzYXkpIGZldGNoIGFsbAorICAgcGFnZXMs IGRlc2NlbmQgdGhyb3VnaCBzdWJkaXJlY3RvcmllcywgcGVyZm9ybSBhdXRvbWF0aWMgdXBkYXRl cywgZXRjLgorICAgVGhlcmUgaXMgbm8gYXNzdXJhbmNlIGEgY29ubmVjdGlvbiB3aWxsIHN0YXkg b3BlbiBhbmQsIGFzIG5vdGVkLCB0aGVyZQorICAgaXMgbm8gcHJvdmlzaW9uIGZvciBkYXRhIGNv bnZlcnNpb24gYmV0d2VlbiB1bmxpa2UgcGxhdGZvcm1zLiBUaGUKKyAgIGRhdGEncyBNSU1FIGhl YWRlcnMgY2FuIGJlIHVzZWQgZm9yIHBvc3Rwcm9jZXNzaW5nLgorCisyLjIuMy4gSFRUUCBIZWFk ZXJzCisKKyAgIEVhY2ggSFRUUCByZXF1ZXN0IGFuZCByZXNwb25zZSBjb250YWlucyBhIHNldCBv ZiBuYW1lL3ZhbHVlIHBhaXJzCisgICBjYWxsZWQgaGVhZGVycy4gSFRUUCBoZWFkZXJzIGFyZSBz cGVjaWZpZWQgaW4gWzE4OV1SRkMgMjYxNi4gRm9yCisgICBleGFtcGxlLCBhbiBIVFRQIEdFVCBy ZXF1ZXN0IGZvciAvaW5kZXguaHRtbCBvbiB3d3cuY29sdW1iaWEuZWR1CisgICBjb250YWlucyB0 aGUgZm9sbG93aW5nIGhlYWRlcnM6CisKKyAgR0VUIC9pbmRleC5odG1sIEhUVFAvMS4xCisgIEhv c3Q6IHd3dy5jb2x1bWJpYS5lZHU6ODAKKyAgVXNlci1hZ2VudDogQy1LZXJtaXQgOC4wCisgIEF1 dGhvcml6YXRpb246IEJhc2ljIGJhc2U2NC1lbmNvZGVkLXVzZXJuYW1lLXBhc3N3b3JkCisKKyAg IFRoZXNlIG1pZ2h0IGJlIGZvbGxvd2VkIGJ5IGFueSBvdGhlcnMgc3BlY2lmaWVkIHdpdGggYSAv SEVBREVSUzoKKyAgIHN3aXRjaDoKKworICBBY2NlcHQ6IGltYWdlL2dpZiwgaW1hZ2UveC14Yml0 bWFwLCBpbWFnZS9qcGVnLCAqLioKKyAgQWNjZXB0LUVuY29kaW5nOiBnemlwCisgIEFjY2VwdC1M YW5ndWFnZTogZW4KKyAgQWNjZXB0LUNoYXJzZXQ6IGlzby04ODU5LTEsdXRmLTgKKyAgQ29va2ll OiBjb29raWUtZGF0YQorCisgICBUaGUgc2VydmVyIHNlbmRzIGJhY2sgYSBzaG9ydCByZXBvcnQg YWJvdXQgdGhlIGZpbGUgcHJpb3IgdG8gc2VuZGluZworICAgdGhlIGZpbGUgY29udGVudHMuIEV4 YW1wbGU6CisKKyAgSFRUUC8xLjEgMjAwIE9LCisgIERhdGU6IEZyaSwgMjQgQXVnIDIwMDEgMjE6 MDk6MzkgR01UCisgIFNlcnZlcjogQXBhY2hlLzEuMy40IChVbml4KQorICBMYXN0LU1vZGlmaWVk OiBNb24sIDA2IEF1ZyAyMDAxIDIxOjE2OjEzIEdNVAorICBFVGFnOiAiMWZhMTM3LTEwZDctM2I2 ZjA5MWQiCisgIEFjY2VwdC1SYW5nZXM6IGJ5dGVzCisgIENvbnRlbnQtTGVuZ3RoOiA0MzExCisg IENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgIElmIHlvdSB3YW50IHRvIGhhdmUgdGhpcyBp bmZvcm1hdGlvbiBhdmFpbGFibGUgdG8gYSBLZXJtaXQgc2NyaXB0IHlvdQorICAgY2FuIHVzZSB0 aGUgL0FSUkFZIHN3aXRjaCB0byBoYXZlIEtlcm1pdCBwdXQgaXQgaW4gYXJyYXksIG9uZSBsaW5l IHBlcgorICAgYXJyYXkgZWxlbWVudC4gRXhhbXBsZToKKworICBzZXQgZXhpdCB3YXJuaW5nIG9m ZgorICBodHRwIG9wZW4gd3d3LmNvbHVtYmlhLmVkdQorICBpZiBmYWlsIGV4aXQgMSBDYW4ndCBy ZWFjaCBzZXJ2ZXIKKyAgaHR0cCAvYXJyYXk6JmEgZ2V0IC9pbmRleC5odG1sCisgIGlmIGZhaWwg ZXhpdCAxIENhbid0IGdldCBmaWxlCisgIGVjaG8gSGVhZGVyIGxpbmVzOiBcZmRpbSgmYSkKKyAg Zm9yIFwlaSAxIFxmZGltKCZhKSAxIHsKKyAgICAgIGVjaG8gXCVpLiBcJmFbXCVpXQorICB9CisK KyAgIE5vdGUgdGhhdCB0aGUgIkRhdGU6IiBpdGVtIGlzIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRp bWU7IHRoZQorICAgIkxhc3QtTW9kaWZpZWQ6IiBpdGVtIGlzIHRoZSBmaWxlJ3MgbW9kaWZpY2F0 aW9uIGRhdGUgYW5kIHRpbWUuIEFuCisgICBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSB0aGlz IGluZm9ybWF0aW9uIGlzIHByZXNlbnRlZCBpbgorICAgWzE5MF1TZWN0aW9uIDguMTMuNy4KKwor Mi4yLjQuIFNlY3VyZSBIVFRQIENvbm5lY3Rpb25zCisKKyAgIFNTTC9UTFMgKFNlY3VyZSBTb2Nr ZXRzIExheWVyIC8gVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5KSBpcyB0aGUKKyAgIHByb3RvY29s IHVzZWQgdG8gc2VjdXJlIEhUVFAsIFNNVFAsIGFuZCBvdGhlciBJbnRlcm5ldCBhcHBsaWNhdGlv bnMuCisgICBTZWUgdGhlIFsxOTFdQy1LZXJtaXQgUmVmZXJlbmNlIFNlY3Rpb24gNS40IGZvciBh biBpbnRyb2R1Y3Rpb24gdG8KKyAgIFNTTC9UTFMuIFRvIG1ha2UgYSBzZWN1cmUgSFRUUCBjb25u ZWN0aW9uLCB5b3UgbmVlZDoKKworICAgIDEuIEEgc2VjdXJlIGNsaWVudCAoYSB2ZXJzaW9uIG9m IEMtS2VybWl0IG9yIEtlcm1pdCA5NSB3aXRoIFNTTC9UTFMKKyAgICAgICBzZWN1cml0eSBidWls dCBpbikuIFR5cGUgImNoZWNrIHNzbCIgYXQgdGhlIEtlcm1pdCBwcm9tcHQgdG8gbWFrZQorICAg ICAgIHN1cmUgeW91IGhhdmUgaXQuCisgICAgMi4gQSBzZWN1cmUgc2VydmVyIHRvIGNvbm5lY3Qg dG8uCisgICAgMy4gVGhlIENBIFJvb3QgQ2VydGlmaWNhdGUgdXNlZCB0byBhdXRoZW50aWNhdGUg dGhlIHNlcnZlciB0byB0aGUKKyAgICAgICBjbGllbnQuIChzZWUgWzE5Ml1TZWN0aW9uIDE1IG9m IHRoZSBzZWN1cml0eSByZWZlcmVuY2UgZm9yIGFuCisgICAgICAgaW50cm9kdWN0aW9uIHRvIGNl cnRpZmljYXRlcykuCisKKyAgIEFuZCB5b3UgbXVzdCBtYWtlIGEgY29ubmVjdGlvbiB0byB0aGUg c2VjdXJlIEhUVFAgcG9ydDogc2VydmljZSBuYW1lCisgICBIVFRQUywgcG9ydCBudW1iZXIgNDQz IChhcyBvcHBvc2VkIHRvIHNlcnZpY2UgSFRUUCwgcG9ydCA4MCkuIFlvdSBjYW4KKyAgIGFsc28g bWFrZSBzZWN1cmUgY29ubmVjdGlvbnMgdG8gb3RoZXIgcG9ydHMgYnkgaW5jbHVkaW5nIHRoZSAv VExTIG9yCisgICAvU1NMIHN3aXRjaCB3aXRoIHRoZSBIVFRQIE9QRU4gY29tbWFuZCwgaWYgdGhl IGhvc3Qgc3VwcG9ydHMgU1NML1RMUyBvbgorICAgdGhlIGdpdmVuIHBvcnQ6CisKKyAgIFRoZSBx dWFsaXR5IG9mIHRoZSBTU0wvVExTIGNvbm5lY3Rpb24gZGVwZW5kcyBvbiB0aGUgY2lwaGVyIHN1 aXRlLgorICAgVGhlcmUgYXJlIHNldmVyYWwgcG9zc2liaWxpdGllczoKKworICAgQW5vbnltb3Vz IGNpcGhlciBzdWl0ZToKKyAgICAgICAgICBJZiBhbiBhbm9ueW1vdXMgY2lwaGVyIHN1aXRlIGlz IG5lZ290aWF0ZWQsIHRoZSBjb25uZWN0aW9uIGlzCisgICAgICAgICAgZW5jcnlwdGVkIGJ1dCB0 aGVyZSBpcyBubyBhdXRoZW50aWNhdGlvbi4gVGhpcyBjb25uZWN0aW9uIGlzCisgICAgICAgICAg c3ViamVjdCB0byBhIE1hbi1Jbi1UaGUtTWlkZGxlIChNSVRNKSBhdHRhY2suCisKKyAgIFguNTA5 IGNlcnRpZmljYXRlIG9uIHRoZSBzZXJ2ZXI6CisgICAgICAgICAgV2hlbiB5b3UgY29ubmVjdCB0 byBjZXJ0YWluIHNlY3VyZSBzZXJ2ZXJzLCBhbiBYLjUwOSBjZXJ0aWZpY2F0ZQorICAgICAgICAg IGlzIHJldHVybmVkLiBUaGlzIGNlcnRpZmljYXRlIGlzIGlzc3VlZCB0byBhIHNwZWNpYWwgaG9z dG5hbWUsCisgICAgICAgICAgc29tZXRoaW5nIGxpa2Ugd3d3MS54eXpjb3JwLmNvbSBvciB3d3dz Lnh5emNvcnAuY29tIChyYXRoZXIgdGhhbgorICAgICAgICAgIHRoZSBub3JtYWwgd3d3Lnh5emNv cnAuY29tKS4gSXQgaXMgc2lnbmVkIGJ5IHRoZSBob3N0J3MKKyAgICAgICAgICBDZXJ0aWZpY2F0 ZSBBdXRob3JpdHkgKENBKS4gSWYgdGhlIGhvc3QgY2VydGlmaWNhdGUgaXMKKyAgICAgICAgICBj b25maWd1cmVkIG9uIHRoZSBjbGllbnQsIGl0IGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0aGUKKyAg ICAgICAgICBjZXJ0aWZpY2F0ZSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuIElmIHRoZSBjZXJ0 aWZpY2F0ZSBpdAorICAgICAgICAgIHZlcmlmaWVkIGFzIGF1dGhlbnRpYywgYSBjaGVjayBpcyBt YWRlIHRvIGVuc3VyZSBpdCBoYXMgbm90CisgICAgICAgICAgZXhwaXJlZCBhbmQgaXQgd2FzIGlz c3VlZCB0byB0aGUgaG9zdCB5b3Ugd2VyZSBhdHRlbXB0aW5nIHRvCisgICAgICAgICAgY29ubmVj dCB0by4gSWYgeW91IGhhZCBhc2tlZCB0byBjb25uZWN0IHRvIChzYXkpIHd3dy54eXpjb3JwLmNv bQorICAgICAgICAgIGJ1dCB3ZXJlIGdpdmVuIGEgY2VydGlmaWNhdGUgZm9yIHd3dzEueHl6Y29y cC5jb20sIHlvdSB3b3VsZCBiZQorICAgICAgICAgIHByb21wdGVkIGZvciBwZXJtaXNzaW9uIHRv IGNvbnRpbnVlLgorCisgICAgICAgICAgSWYgdGhlIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQsIHRo ZSBjb25uZWN0aW9uIHdvdWxkIGJlIGVuY3J5cHRlZAorICAgICAgICAgIHdpdGggb25lLXdheSAo c2VydmVyLXRvLWNsaWVudCkgYXV0aGVudGljYXRpb24uIFRoaXMgY29ubmVjdGlvbgorICAgICAg ICAgIGlzIG5vdCBzdWJqZWN0IHRvIGEgTUlUTSBhdHRhY2suCisKKyAgICAgICAgICBJZiBhIHVz ZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgdHJhbnNtaXR0ZWQgb3ZlciB0aGlzIGNvbm5lY3Rpb24s CisgICAgICAgICAgdGhleSBhcmUgbm90IHN1YmplY3QgdG8gaW50ZXJjZXB0aW9uLiBIb3dldmVy LCB0aGUgc3RhbmRhcmQKKyAgICAgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggcGFzc2luZyB0 aGUgcGFzc3dvcmQgdG8gdGhlIGhvc3QgZm9yCisgICAgICAgICAgdmVyaWZpY2F0aW9uIGFwcGx5 OyBmb3IgZXhhbXBsZSwgaWYgdGhlIGhvc3QgaGFzIGJlZW4KKyAgICAgICAgICBjb21wcm9taXNl ZCwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgY29tcHJvbWlzZWQuCisKKyAgIFguNTA5IGNsaWVudCBj ZXJ0aWZpY2F0ZToKKyAgICAgICAgICBJZiBhIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNo ZWQgd2l0aCBhbiBYLjUwOSBzZXJ2ZXIKKyAgICAgICAgICBjZXJ0aWZpY2F0ZSwgdGhlIHNlcnZl ciBjYW4gYXNrIHRoZSBjbGllbnQgdG8gc2VuZCBhIGNlcnRpZmljYXRlCisgICAgICAgICAgb2Yg aXRzIG93bi4gVGhpcyBjZXJ0aWZpY2F0ZSBtdXN0IGJlIHZlcmlmaWVkIGFnYWluc3QgYSBDQSBS b290CisgICAgICAgICAgY2VydGlmaWNhdGUuIFRoZSBjZXJ0aWZpY2F0ZSBpdHNlbGYgKG9yIHN1 YmplY3QgaW5mbyBmcm9tIHRoZQorICAgICAgICAgIGNlcnRpZmljYXRlKSBpcyB1c2VkIHRvIGRl dGVybWluZSB0aGUgYXV0aG9yaXphdGlvbiBmb3IgdGhlCisgICAgICAgICAgY2xpZW50LCBhbmQg aWYgc3VjY2Vzc2Z1bCwgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBuZWVkIG5vdCBiZQorICAg ICAgICAgIHNlbnQgdG8gdGhlIHNlcnZlci4KKworICAgS2VyYmVyb3MgNToKKyAgICAgICAgICBJ bnN0ZWFkIG9mIHVzaW5nIFguNTA5IGNlcnRpZmljYXRlcywgS2VyYmVyb3MgNSBjYW4gYmUgdXNl ZCB0bworICAgICAgICAgIHBlcmZvcm0gdGhlIGF1dGhlbnRpY2F0aW9uIGFuZCBrZXkgZXhjaGFu Z2UuIEluIHRoaXMgc2l0dWF0aW9uLAorICAgICAgICAgIHRoZXJlIGlzIG11dHVhbCBhdXRoZW50 aWNhdGlvbiBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KKyAgICAgICAgICBUaGUgS2Vy YmVyb3MgNSBwcmluY2lwYWwgaXMgdXNlZCBieSB0aGUgc2VydmVyIHRvIGxvb2sgdXAgdGhlCisg ICAgICAgICAgYXBwcm9wcmlhdGUgYXV0aG9yaXphdGlvbiBkYXRhLiBUaGVyZSBpcyBubyBuZWVk IHRvIHNlbmQKKyAgICAgICAgICB1c2VybmFtZSBhbmQgcGFzc3dvcmQuCisKKyAgIEFuIEhUVFAg Y29ubmVjdGlvbiBpcyBtYWRlIHdpdGggdGhlIEhUVFAgT1BFTiBjb21tYW5kOgorCisgICBIVFRQ IFsgc3dpdGNoZXMgXSBPUEVOIFsgeyAvU1NMLCAvVExTIH0gXSBob3N0IFsgcG9ydCBdCisgICAg ICAgICAgSWYgL1NTTCBvciAvVExTIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCAodGhlc2UgYXJlIHN5 bm9ueW1zKSwgb3IKKyAgICAgICAgICBpZiB0aGUgc2VydmljZSBpcyBIVFRQUyBvciB0aGUgcG9y dCBpcyA0NDMsIGEgc2VjdXJlIGNvbm5lY3Rpb24KKyAgICAgICAgICBpcyBhdHRlbXB0ZWQgdXNp bmcgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24gc2V0dGluZ3M7IHNlZSBIRUxQCisgICAgICAg ICAgU0VUIEFVVEhFTlRJQ0FUSU9OIGZvciBkZXRhaWxzIChbMTkzXVNlY3Rpb24gNi4yIG9mIHRo ZSBzZWN1cml0eQorICAgICAgICAgIHJlZmVyZW5jZSkuIElmIHRoZSBubyAvU1NMIG9yIC9UTFMg c3dpdGNoIGlzIGluY2x1ZGVkIGJ1dCB0aGUKKyAgICAgICAgICBwb3J0IGlzIDQ0MyBvciB0aGUg c2VydmljZSBpcyBIVFRQUywgYSBzZWN1cmUgY29ubmVjdGlvbiBpcworICAgICAgICAgIGF0dGVt cHRlZC4gSWYgYW4gL1NTTCBvciAvVExTIHN3aXRjaCBpcyBpbmNsdWRlZCBidXQgYSBwb3J0IGlz CisgICAgICAgICAgbm90IHNwZWNpZmllZCwgYW4gU1NML1RMUyBjb25uZWN0aW9uIGlzIGF0dGVt cHRlZCBvbiB0aGUgZGVmYXVsdAorICAgICAgICAgIHBvcnQgKDgwKS4KKworICAgQ2VydGlmaWNh dGVzIGFyZSBjb3ZlcmVkIGluIHRoZSBzZXBhcmF0ZSBbMTk0XUtlcm1pdCBTZWN1cml0eSBSZWZl cmVuY2UKKyAgIGZvciBDLUtlcm1pdCA4LjAuIFlvdSBzaG91bGQgbGV0IEtlcm1pdCBrbm93IHRv IHZlcmlmeSBjZXJ0aWZpY2F0ZXMKKyAgIHdpdGggdGhlIFNFVCBBVVRIRU5USUNBVElPTiBUTFMg Y29tbWFuZC4gRm9yIGV4YW1wbGU6CisKKyAgIFNFVCBBVVRIRU5USUNBVElPTiBUTFMgQ1JMLURJ UiBkaXJlY3RvcnkKKyAgICAgICAgICBTcGVjaWZpZXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlu cyBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGZpbGVzCisgICAgICAgICAgd2hlcmUgZWFjaCBmaWxl IGlzIG5hbWVkIGJ5IHRoZSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0aGF0IGhhcworICAgICAg ICAgIGJlZW4gcmV2b2tlZC4KKworICAgU0VUIEFVVEhFTlRJQ0FUSU9OIFRMUyBDUkwtRklMRSBm aWxlbmFtZQorICAgICAgICAgIFNwZWNpZmllcyBhIGZpbGUgdGhhdCBjb250YWlucyBhIGxpc3Qg b2YgY2VydGlmaWNhdGUKKyAgICAgICAgICByZXZvY2F0aW9ucy4KKworICAgU0VUIEFVVEhFTlRJ Q0FUSU9OIFRMUyBWRVJJRlktRElSIGRpcmVjdG9yeQorICAgICAgICAgIFNwZWNpZmllcyBhIGRp cmVjdG9yeSB0aGF0IGNvbnRhaW5zIHJvb3QgQ0EgY2VydGlmaWNhdGUgZmlsZXMKKyAgICAgICAg ICB1c2VkIHRvIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUgY2hhaW5zIHByZXNlbnRlZCBieSB0aGUg cGVlci4KKyAgICAgICAgICBFYWNoIGZpbGUgaXMgbmFtZWQgYnkgYSBoYXNoIG9mIHRoZSBjZXJ0 aWZpY2F0ZS4KKworICAgU0VUIEFVVEhFTlRJQ0FUSU9OIFRMUyBWRVJJRlktRklMRSBmaWxlbmFt ZQorICAgICAgICAgIFNwZWNpZmllcyBhIGZpbGUgdGhhdCBjb250YWlucyByb290IENBIGNlcnRp ZmljYXRlcyB0byBiZSB1c2VkCisgICAgICAgICAgZm9yIHZlcmlmeWluZyBjZXJ0aWZpY2F0ZSBj aGFpbnMuCisKKyAgIFNFVCBBVVRIRU5USUNBVElPTiBUTFMgVkVSSUZZIE9GRgorICAgICAgICAg IFRlbGxzIEtlcm1pdCBub3QgdG8gcmVxdWlyZSBhIGNlcnRpZmljYXRlIGFuZCBhY2NlcHQgYW55 CisgICAgICAgICAgY2VydGlmaWNhdGUgdGhhdCBpcyBwcmVzZW50ZWQgcmVnYXJkbGVzcyBvZiB3 aGV0aGVyIGl0IGlzIHZhbGlkLgorCisgICBUaGVyZSBhcmUgbWFueSBvdGhlciBvcHRpb25zOyBz ZWUgdGhlIHNlY3VyaXR5IGRvY3VtZW50IGZvciBkZXRhaWxzLgorCisgICBOb3cgc3VwcG9zZSB5 b3UgbmVlZCBuZWVkIHRvIGZldGNoIHRoZSBmaWxlIGRlbm90ZWQgYnkgdGhlIGZvbGxvd2luZwor ICAgVVJMOgorCisgIGh0dHBzOi8vbXl1c2VyaWQ6bXlwYXNzd29yZEB3d3dzLnh5emNvcnAuY29t L2NsaWVudHMvaW5mby9zZWNyZXQuaHRtbAorCisgICBPbmNlIHlvdSBoYXZlIHNldCB1cCB0aGUg aGFuZGxpbmcgb2YgY2VydGlmaWNhdGVzIGFzIGRlc2lyZWQsIHlvdSBjYW4KKyAgIHVzZSB0aGUg Zm9sbG93aW5nIEtlcm1pdCBjb21tYW5kczoKKworICBodHRwIC91c2VyOm15dXNlcmlkIC9wYXNz d29yZDpteXBhc3N3b3JkIG9wZW4gd3d3MS54eXpjb3JwLmNvbSBodHRwcworICBpZiBzdWNjZXNz IHsKKyAgICAgIGh0dHAgZ2V0IC9jbGllbnRzL2luZm8vc2VjcmV0Lmh0bWwKKyAgICAgIGh0dHAg Y2xvc2UKKyAgfQorCisgICBBcyBhbm90aGVyIGV4YW1wbGUsIGxldCdzIHNheSB0aGF0IHlvdSBo YXZlIGEgd2ViIGZvcm0geW91IG5lZWQgdG8KKyAgIHBvcHVsYXRlIHdpdGggdGhyZWUgZmllbGRz OiByZWQsd2hpdGUgYW5kIGJsdWUuCisKKyAgPEZPUk0gQUNUSU9OPSJodHRwOi8vd3d3Lnh5emNv cnAuY29tL2NnaS1iaW4vZm9ybS5jZ2kiIE1FVEhPRD0iUE9TVCI+CisgIDxJTlBVVCBOQU1FPSJS ZWQiPgorICA8SU5QVVQgTkFNRT0iV2hpdGUiPgorICA8SU5QVVQgTkFNRT0iQmx1ZSI+CisgIDwv Rk9STT4KKworICAgWW91IGNhbiBoYW5kbGUgdGhpcyB3aXRoIHRoZSBIVFRQIFBPU1QgY29tbWFu ZC4gVGhlIGRhdGEgdG8gYmUgcG9zdGVkCisgICBpcyBzdG9yZWQgaW4gdGhlIGxvY2FsIGZpbGUg ZGF0YS50eHQuCisKKyAgUmVkPXNldmVuIHN0cmlwZXMmV2hpdGU9c2l4IHN0cmlwZXMmQmx1ZT1m aWZ0eSBzdGFycworCisgICBhbmQgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciB3aWxsIGJl IHN0b3JlZCBpbnRvIHJlc3BvbnNlLnR4dC4KKworICBodHRwIG9wZW4gd3d3Lnh5emNvcnAuY29t IGh0dHAKKyAgaWYgc3VjY2VzcyB7CisgICAgaHR0cCAvYXJyYXk6YyBwb3N0IGRhdGEudHh0IC9j Z2ktYmluL2Zvcm0uY2dpIHJlc3BvbnNlLnR4dAorICAgIGh0dHAgY2xvc2UKKyAgfQorCisgICBJ biB0aGlzIHNjZW5hcmlvLCB0aGUgQ29tbW9uIEdhdGV3YXkgSW50ZXJmYWNlIChDR0kpIHNlbmRz IGEgcmVzcG9uc2UKKyAgIHdoZXRoZXIgaXQgc3VjY2VlZHMgb3IgZmFpbHMgaW4gYSBzY3JpcHQt ZGVwZW5kZW50IG1hbm5lci4gVGhlIHNjcmlwdAorICAgY2FuIGVpdGhlciByZXBvcnQgc3VjY2Vz cyBhbmQgZW5jbG9zZSB0aGUgcmVzcG9uc2UgZGF0YTsgb3IgaXQgbWlnaHQKKyAgIHNlbmQgYSAz MDIgRm91bmQgZXJyb3Igd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlICJMb2NhdGlvbjoiIGhlYWRl cgorICAgc2hvdWxkIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBVUkwgYXQgd2hpY2ggdGhlIGRh dGEgY2FuIGJlIGZvdW5kLgorCisyLjIuNS4gSFRUUCBWYXJpYWJsZXMKKworICAgXHYoaHR0cF9j b2RlKQorICAgICAgICAgIFRoZSBIVFRQIHByb3RvY29sIGNvZGUgbnVtYmVyIG9mIHRoZSBtb3N0 IHJlY2VudCBzZXJ2ZXIgcmVwbHksCisgICAgICAgICAgZS5nLiA0MDQgZm9yICJub3QgZm91bmQi LgorCisgICBcdihodHRwX2Nvbm5lY3RlZCkKKyAgICAgICAgICAxIHdoZW4gYW4gSFRUUCBjb25u ZWN0aW9uIGlzIG9wZW4sIDAgd2hlbiB0aGVyZSBpcyBubyBIVFRQCisgICAgICAgICAgY29ubmVj dGlvbi4KKworICAgXHYoaHR0cF9ob3N0KQorICAgICAgICAgIElmIGFuIEhUVFAgY29ubmVjdGlv biBpcyBvcGVuLCB0aGUgaG9zdG5hbWU6cG9ydCwgZS5nLgorICAgICAgICAgIHd3dy5jb2x1bWJp YS5lZHU6ODA7IG90aGVyd2lzZSwgZW1wdHkuCisKKyAgIFx2KGh0dHBfbWVzc2FnZSkKKyAgICAg ICAgICBTZXJ2ZXIgZXJyb3IgbWVzc2FnZSwgaWYgYW55LCBmcm9tIG1vc3QgcmVjZW50IEhUVFAg Y29tbWFuZC4KKworICAgXHYoaHR0cF9zZWN1cml0eSkKKyAgICAgICAgICBBIGxpc3Qgb2YgdGhl IHNlY3VyaXR5IHBhcmFtZXRlcnMgYW5kIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAg ICBjb25uZWN0aW9uLCBpZiBhbnkuIEVtcHR5IGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCB0byBh IHNlY3VyZQorICAgICAgICAgIHNlcnZlciwgb3IgdGhlcmUgaXMgbm8gY29ubmVjdGlvbi4KKwor ICAgVG8gZGlzcGxheSBhbGwgdGhlIEhUVFAgdmFyaWFibGVzIGF0IG9uY2UsIHR5cGUgU0hPVyBW QVIgSFRUUDoKKworICBDLUtlcm1pdD4gaHR0cCBvcGVuIHd3dy5jb2x1bWJpYS5lZHUKKyAgQy1L ZXJtaXQ+IGh0dHAgZ2V0IGxramxramxramxragorICBDLUtlcm1pdD4gc2hvIHZhciBodHRwCisg ICBcdihodHRwX2NvZGUpID0gNDA0CisgICBcdihodHRwX2Nvbm5lY3RlZCkgPSAxCisgICBcdiho dHRwX2hvc3QpID0gd3d3LmNvbHVtYmlhLmVkdTo4MAorICAgXHYoaHR0cF9tZXNzYWdlKSA9IE5v dCBGb3VuZAorICAgXHYoaHR0cF9zZWN1cml0eSkgPSBOVUxMCisgIEMtS2VybWl0PgorCisyLjIu Ni4gVGhlIEhUVFAgQ29tbWFuZC1MaW5lIFBlcnNvbmFsaXR5CisKKyAgIElmIHlvdSBpbnZva2Ug Qy1LZXJtaXQgd2l0aCB0aGUgbmFtZSAiaHR0cCIgb3IgImh0dHBzIiwgeW91IGNhbiB1c2UgYQor ICAgc3BlY2lhbCBzZXQgb2YgSFRUUC1zcGVjaWZpYyBjb21tYW5kLWxpbmUgb3B0aW9ucy4gWW91 IGNhbiBkbyB0aGlzIGJ5CisgICBjcmVhdGluZyBhIHN5bWJvbGljIGxpbmtlICJodHRwIiBvciAi aHR0cHMiIHRvIHRoZSBDLUtlcm1pdCA4LjAKKyAgIGV4ZWN1dGFibGUsIG9yIGJ5IGhhdmluZyBh IHNlcGFyYXRlIGNvcHkgb2YgaXQgY2FsbGVkICJodHRwIiBvcgorICAgImh0dHBzIi4gSGVyZSdz IHRoZSB1c2FnZSBtZXNzYWdlICgiaHR0cCAtaCIpOgorCisgIFVzYWdlOiAuL2h0dHAgaG9zdCBb IG9wdGlvbnMuLi4gXQorICAgLWggICAgICAgICAgICAgVGhpcyBtZXNzYWdlLgorICAgLWQgICAg ICAgICAgICAgRGVidWcgdG8gZGVidWcubG9nLgorICAgLVMgICAgICAgICAgICAgU3RheSAoaXNz dWUgY29tbWFuZCBwcm9tcHQgd2hlbiBkb25lKS4KKyAgIC1ZICAgICAgICAgICAgIERvIG5vdCBl eGVjdXRlIEtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLgorICAgLXEgICAgICAgICAgICAgUXVp ZXQgKHN1cHByZXNzIG1vc3QgbWVzc2FnZXMpLgorICAgLXUgbmFtZSAgICAgICAgVXNlcm5hbWUu CisgICAtUCBwYXNzd29yZCAgICBQYXNzd29yZC4KKyAgIC1nIHBhdGhuYW1lICAgIEdldCByZW1v dGUgcGF0aG5hbWUuCisgICAtcCBwYXRobmFtZSAgICBQdXQgcmVtb3RlIHBhdGhuYW1lLgorICAg LUggcGF0aG5hbWUgICAgSGVhZCByZW1vdGUgcGF0aG5hbWUuCisgICAtbCBwYXRobmFtZSAgICBM b2NhbCBwYXRoIGZvciAtZywgLXAsIGFuZCAtSC4KKyAgIC16IG9wdFs9dmFsdWVdIFNlY3VyaXR5 IG9wdGlvbnMuLi4KKyAgICAgIGNlcnQ9ZmlsZSAgIENsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlCisg ICAgICBjZXJ0c29rICAgICBBY2NlcHQgYWxsIGNlcnRpZmljYXRlcworICAgICAga2V5PWZpbGUg ICAgQ2xpZW50IHByaXZhdGUga2V5IGZpbGUKKyAgICAgIHNlY3VyZSAgICAgIFVzZSBTU0wKKyAg ICAgIHZlcmlmeT1uICAgIDAgPSBub25lLCAxID0gcGVlciAsIDIgPSBjZXJ0aWZpY2F0ZSByZXF1 aXJlZAorCisgICBUaGUgImhvc3QiIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGEgV2ViIGhvc3Qs IGUuZy4gd3d3LmNvbHVtYmlhLmVkdS4KKyAgIFRoZSBhY3Rpb24gb3B0aW9ucyBhcmUgLXAsIC1n LCBhbmQgLUguIElmIHlvdSBnaXZlIGFuIGFjdGlvbiBvcHRpb24sCisgICBLZXJtaXQgZG9lcyB0 aGUgYWN0aW9uIGFuZCB0aGVuIGV4aXRzLiBJZiB5b3UgZ2l2ZSBhIGhvc3Qgd2l0aG91dCBhbgor ICAgYWN0aW9uIG9wdGlvbiwgS2VybWl0IG1ha2VzIGFuIEhUVFAgY29ubmVjdGlvbiB0byB0aGUg aG9zdCBhbmQgdGhlbgorICAgZ2l2ZXMgeW91IHRoZSBDLUtlcm1pdCBwcm9tcHQuIEhlcmUncyBh IHNpbXBsZSBleGFtcGxlIHRoYXQgZmV0Y2hlcyBhCisgICBwdWJsaWNseSByZWFkYWJsZSBXZWIg cGFnZToKKworICBodHRwIHd3dy5jb2x1bWJpYS5lZHUgLWcga2VybWl0L2luZGV4Lmh0bWwKKwor ICAgSWYgeW91IG5lZWQgdG8gYWNjZXNzIGEgd2Vic2l0ZSBmb3Igd2hpY2ggYSB1c2VybmFtZSBh bmQgcGFzc3dvcmQgYXJlCisgICByZXF1aXJlZCwgeW91IGNhbiBzdXBwbHkgdGhlbSBvbiB0aGUg Y29tbWFuZCBsaW5lIHdpdGggLXUgYW5kIC1QLiBJZgorICAgeW91IGluY2x1ZGUgYSB1c2VybmFt ZSBidXQgb21pdCB0aGUgcGFzc3dvcmQsIEtlcm1pdCBwcm9tcHRzIHlvdSBmb3IKKyAgIGl0Ogor CisgIGh0dHAgd3d3LmNvbHVtYmlhLmVkdSAtdSBvbGdhIC1wIGtlcm1pdC9pbmRleC5odG1sIC1s IGluZGV4Lmh0bWwKKyAgUGFzc3dvcmQ6CisKKyAgIE5vdGUgdGhhdCB3aGVuIFBVVCdpbmcgZmls ZXMgdG8gd2Vic2l0ZXMsIHlvdSBoYXZlIHRvIHN1cHBseSBib3RoIHRoZQorICAgLXAgKHJlbW90 ZSBwYXRobmFtZSkgYW5kIC1sIChsb2NhbCBwYXRoKSBvcHRpb25zLgorCisgICBJZiB5b3VyIHZl cnNpb24gb2YgS2VybWl0IGlzIGJ1aWx0IHdpdGggU1NML1RMUyBzZWN1cml0eSwgeW91IGNhbiBh bHNvCisgICB1c2UgdGhlIC16IG9wdGlvbiB0byBtYWtlIHNlY3VyZSBIVFRQIChodHRwcykgY29u bmVjdGlvbnMuCisKKyAgIEZpbmFsbHksIGFzIG5vdGVkIGluIFsxOTVdU2VjdGlvbiAxNiwgeW91 IGNhbiBhbHNvIGdpdmUgYSBVUkwgaW5zdGVhZAorICAgb2YgYSBob3N0IG5hbWUgYW5kIG9wdGlv bnMuCisKKyAgIFsgWzE5Nl1Ub3AgXSBbIFsxOTddQ29udGVudHMgXSBbIFsxOThdQy1LZXJtaXQg SG9tZSBdIFsgWzE5OV1LZXJtaXQKKyAgIEhvbWUgXQorCiszLiBLRVJNSVQnUyBCVUlMVC1JTiBG VFAgQ0xJRU5UCisKKyAgICAgMy4xLiAgWzIwMF1NYWtpbmcgYW5kIE1hbmFnaW5nIEZUUCBDb25u ZWN0aW9ucworICAgICAzLjIuICBbMjAxXU1ha2luZyBTZWN1cmUgRlRQIENvbm5lY3Rpb25zCisg ICAgIDMuMy4gIFsyMDJdU2V0dGluZyBGVFAgUHJlZmVyZW5jZXMKKyAgICAgMy40LiAgWzIwM11N YW5hZ2luZyBEaXJlY3RvcmllcyBhbmQgRmlsZXMKKyAgICAgMy41LiAgWzIwNF1VcGxvYWRpbmcg RmlsZXMgV2l0aCBGVFAKKyAgICAgMy42LiAgWzIwNV1Eb3dubG9hZGluZyBGaWxlcyBXaXRoIEZU UAorICAgICAzLjcuICBbMjA2XVRyYW5zbGF0aW5nIENoYXJhY3RlciBTZXRzCisgICAgIDMuOC4g IFsyMDddRlRQIENvbW1hbmQgU2hvcnRjdXRzCisgICAgIDMuOS4gIFsyMDhdRHVhbCBTZXNzaW9u cworICAgICAzLjEwLiBbMjA5XUF1dG9tYXRpbmcgRlRQIFNlc3Npb25zCisgICAgIDMuMTEuIFsy MTBdQWR2YW5jZWQgRlRQIFByb3RvY29sIEZlYXR1cmVzCisKKyAgIEVhcmxpZXIgdmVyc2lvbnMg b2YgQy1LZXJtaXQgYW5kIEs5NSBpbmNsdWRlZCBhbiBGVFAgY29tbWFuZCwgYnV0IGl0CisgICBz aW1wbHkgaW52b2tlZCBhbiBleHRlcm5hbCBGVFAgY2xpZW50LiBOb3csIGJ5IHBvcHVsYXIgZGVt YW5kLCBLZXJtaXQKKyAgIGluY2x1ZGVzIGl0cyBvd24gYnVpbHQtaW4gRlRQIGNsaWVudCB0aGF0 IG9mZmVycyB0aGUgZm9sbG93aW5nCisgICBhZHZhbnRhZ2VzIG92ZXIgdHJhZGl0aW9uYWwgRlRQ IGNsaWVudHMgKGFuZCBpdHMgcHJldmlvdXMgaW50ZXJmYWNlIHRvCisgICB0aGVtKToKKworICAg ICAqIEFueSBvZiBLZXJtaXQncyBidWlsdC1pbiBbMjExXXNlY3VyaXR5IG1ldGhvZHMgY2FuIGJl IHVzZWQgdG8KKyAgICAgICBlc3RhYmxpc2ggYW5kIGNvbmR1Y3Qgc2VjdXJlIEZUUCBzZXNzaW9u cyB3aXRoIFsyMTJdRlRQIHNlcnZlcnMKKyAgICAgICB0aGF0IHN1cHBvcnQgdGhlc2UgbWV0aG9k cy4gKFNlY3VyaXR5IG1vZHVsZXMgY2FuIGJlIHN1YmplY3QgdG8KKyAgICAgICBleHBvcnQgcmVz dHJpY3Rpb25zLikKKyAgICAgKiBLZXJtaXQncyBGVFAgY2xpZW50IHVzZXMgInBhc3NpdmUgbW9k ZSIgYnkgZGVmYXVsdCB0byBhdm9pZAorICAgICAgIGJsb2NrYWdlIGJ5IGZpcmV3YWxscyBhbmQg bmV0d29yayBhZGRyZXNzIHRyYW5zbGF0b3JzLiBPZiBjb3Vyc2UKKyAgICAgICBhY3RpdmUgbW9k ZSBjYW4gYmUgY2hvc2VuIHRvbyB3aGVuIG5lZWRlZC4KKyAgICAgKiBbMjEzXUNoYXJhY3RlciBz ZXRzIGNhbiBiZSB0cmFuc2xhdGVkIGFzIHBhcnQgb2YgdGhlIHRyYW5zZmVyCisgICAgICAgcHJv Y2VzcyBldmVuIHdoZW4gdGhlIEZUUCBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBjaGFyYWN0ZXIt c2V0CisgICAgICAgdHJhbnNsYXRpb24sIGluY2x1ZGluZyB0by9mcm9tIHRoZSBuZXcgSW50ZXJu ZXQgc3RhbmRhcmQKKyAgICAgICBpbnRlcm5hdGlvbmFsIGNoYXJhY3RlciBzZXQsIFsyMTRdVW5p Y29kZSBVVEYtOC4gVGhpcyBpbmNsdWRlcyBib3RoCisgICAgICAgdGhlIGZpbGUncyBuYW1lIGFu ZCAoZm9yIHRleHQgZmlsZXMgb25seSkgaXRzIGNvbnRlbnRzLgorICAgICAqIEFsbCBvZiBDLUtl cm1pdCdzIFsyMTVdZmlsZS1zZWxlY3Rpb24gbWVjaGFuaXNtcyBhcmUgYXZhaWxhYmxlOgorICAg ICAgIHNpemUsIGRhdGUsIG5hbWUgcGF0dGVybnMgYW5kIGxpc3RzLCBleGNlcHRpb24gbGlzdHMs IGV0Yy4KKyAgICAgKiBbMjE2XUF0b21pYyBmaWxlIG1vdmVtZW50IGNhcGFiaWxpdGllcyBhcmUg cHJvdmlkZWQgKGRlbGV0ZSwgbW92ZSwKKyAgICAgICBvciByZW5hbWUgZmlsZXMgYXV0b21hdGlj YWxseSBhZnRlciBzdWNjZXNzZnVsIHRyYW5zZmVyKS4KKyAgICAgKiBUaGUgY29ycmVjdCBmaWxl IHR5cGUsICJhc2NpaSIgKGkuZS4gdGV4dCkgb3IgYmluYXJ5LCBpcyBjaG9zZW4KKyAgICAgICBh dXRvbWF0aWNhbGx5IGZvciBlYWNoIGZpbGUgKGV4cGxhaW5lZCBpbiBbMjE3XVNlY3Rpb24gNCks IGFuZCBhbnkKKyAgICAgICBtaXh0dXJlIG9mIHRleHQgYW5kIGJpbmFyeSBmaWxlcyBjYW4gYmUg c2VudCBpbiBhIHNpbmdsZSBvcGVyYXRpb24sCisgICAgICAgZXZlbiBhY3Jvc3MgcGxhdGZvcm1z LgorICAgICAqIFVwZGF0ZSBtb2RlICgiZG9uJ3QgYm90aGVyIHRyYW5zZmVycmluZyBmaWxlcyB0 aGF0IGRpZG4ndCBjaGFuZ2UKKyAgICAgICBzaW5jZSBsYXN0IHRpbWUiKSBhbmQgcmVjb3Zlcnkg KHJlc3VtcHRpb24gb2YgYW4gaW50ZXJydXB0ZWQKKyAgICAgICB0cmFuc2ZlciBmcm9tIHRoZSBw b2ludCBvZiBmYWlsdXJlKSBhcmUgYXZhaWxhYmxlIGluIGJvdGgKKyAgICAgICBkaXJlY3Rpb25z LgorICAgICAqIFdoZW4gdXBsb2FkaW5nIGZpbGVzIGZyb20gVU5JWCB0byBVTklYLCB0aGUgZmls ZSdzIHBlcm1pc3Npb25zIGNhbgorICAgICAgIGJlIHByZXNlcnZlZCBpZiBkZXNpcmVkLgorICAg ICAqIFJlY3Vyc2l2ZSBkaXJlY3RvcnktdHJlZSBQVVRzIGFyZSBzdXBwb3J0ZWQgYmV0d2VlbiBh bnkgdHdvCisgICAgICAgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0cmVlLXN0cnVjdHVyZWQgZmlsZSBz eXN0ZW1zLiBSZWN1cnNpdmUgR0VUcworICAgICAgIGFyZSBzdXBwb3J0ZWQgYmV0d2VlbiBsaWtl IHBsYXRmb3JtcyBpZiB0aGUgc2VydmVyIGNvb3BlcmF0ZXMgYW5kCisgICAgICAgYmV0d2VlbiBs aWtlIG9yIHVubGlrZSBwbGF0Zm9ybXMgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBNTFNECisgICAg ICAgKFsyMThdU2VjdGlvbiAzLjExKS4KKyAgICAgKiBXaGVuIHJlY2VpdmluZyBmaWxlcywgYWxs IG9mIEtlcm1pdCdzIGZpbGUgY29sbGlzaW9uIGFjdGlvbnMgYXJlCisgICAgICAgYXZhaWxhYmxl OiBiYWNrdXAsIHVwZGF0ZSwgcmVmdXNlLCByZW5hbWUsIGV0Yy4KKyAgICAgKiBNdWx0aS1maWxl IHRyYW5zZmVycyBjYW4gYmUgaW50ZXJydXB0ZWQgb24gYSBwZXItZmlsZSBiYXNpcywKKyAgICAg ICBhdXRvbWF0aWNhbGx5IHNraXBwaW5nIHRvIHRoZSBuZXh0IGZpbGUuCisgICAgICogRlRQIHNl c3Npb25zIGFyZSBbMjE5XWZ1bGx5IHNjcmlwdGFibGUuCisgICAgICogQW4gZW50aXJlIEZUUCBz ZXNzaW9uIChjb25uZWN0LCBsb2dpbiwgQ0QsIHVwbG9hZCBvciBkb3dubG9hZCwKKyAgICAgICBs b2dvdXQpIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB3aXRob3V0IHVzaW5n IGEKKyAgICAgICBzY3JpcHQuCisgICAgICogQWxsIG9mIEtlcm1pdCdzIGxvZ2dpbmcgb3B0aW9u cyBhbmQgZm9ybWF0cyBhcmUgYXZhaWxhYmxlIHRvIGtlZXAKKyAgICAgICBhbiBhY2N1cmF0ZSBh bmQgY29tcGxldGUgcmVjb3JkIG9mIGVhY2ggY29ubmVjdGlvbiBhbmQgZmlsZQorICAgICAgIHRy YW5zZmVyLCBhbmQgdG8gYWlkIGluIHRyb3VibGVzaG9vdGluZy4KKyAgICAgKiBBbGwgb2YgS2Vy bWl0J3MgZmlsZS10cmFuc2ZlciBkaXNwbGF5IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQorICAgICAg IChmdWxsc2NyZWVuLCBicmllZiwgQ1JULCBzZXJpYWwsIG5vbmUpLgorCisgICBBbmQgYmVzdCBv ZiBhbGw6CisgICAgICogS2VybWl0IGRvZXNuJ3QgZ2l2ZSB5b3UgdGhvc2UgYW5ub3lpbmcgcGVy LWZpbGUgcHJvbXB0cyBldmVyeSB0aW1lCisgICAgICAgeW91IHN0YXJ0IGEgbXVsdGktZmlsZSB0 cmFuc2ZlciB3aXRob3V0IHJlbWVtYmVyaW5nIHRvIGdpdmUgYQorICAgICAgICJwcm9tcHQiIGNv bW1hbmQgZmlyc3QgOi0pLgorCisgICBbIFsyMjBdVG9wIF0gWyBbMjIxXUZUUCBUb3AgXSBbIFsy MjJdRlRQIENsaWVudCBPdmVydmlldyBdIFsgWzIyM11GVFAKKyAgIFNjcmlwdCBUdXRvcmlhbCBd IFsgWzIyNF1DLUtlcm1pdCBIb21lIF0gWyBbMjI1XUtlcm1pdCBIb21lIF0KKworMy4xLiBNYWtp bmcgYW5kIE1hbmFnaW5nIEZUUCBDb25uZWN0aW9ucworCisgICBFYWNoIGNvcHkgb2YgS2VybWl0 IGNhbiBoYXZlIG9uZSBGVFAgY29ubmVjdGlvbiBvcGVuIGF0IGEgdGltZS4gRlRQCisgICBjb25u ZWN0aW9ucyBhcmUgaW5kZXBlbmRlbnQgb2YgcmVndWxhciB0ZXJtaW5hbCBjb25uZWN0aW9uczsg YSB0ZXJtaW5hbAorICAgY29ubmVjdGlvbiAoc2VyaWFsIG9yIG5ldHdvcmsgdmlhIFNFVCBMSU5F LCBESUFMLCBTRVQgSE9TVCwgVEVMTkVULAorICAgZXRjKSBtYXkgYmUsIGJ1dCBuZWVkIG5vdCBi ZSwgb3BlbiBhdCB0aGUgc2FtZSB0aW1lIGFzIGFuIEZUUAorICAgY29ubmVjdGlvbiwgYW5kIHRl cm1pbmFsIGNvbm5lY3Rpb25zIGNhbiBhbHNvIGJlIGNsb3NlZCwgYW5kIG5ldworICAgY29ubmVj dGlvbnMgb3BlbmVkLCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIEZUUCBjb25uZWN0aW9u IChhbmQKKyAgIHZpY2UgdmVyc2EpLiBUaHVzLCBmb3IgZXhhbXBsZSwgS2VybWl0IGNhbiBoYXZl IGFuIEZUUCBjb25uZWN0aW9uIGFuZCBhCisgICBURUxORVQgY29ubmVjdGlvbiBvcGVuIHRvIHRo ZSBzYW1lIGhvc3Qgc2ltdWx0YW5lb3VzbHksIHVzaW5nIHRoZQorICAgVEVMTkVUIGNvbm5lY3Rp b24gKGUuZy4pIHRvIHNlbmQgbWFpbCBvciB0YWtlIG90aGVyIGRlc2lyZWQgYWN0aW9ucyBhcwor ICAgdmFyaW91cyBGVFAgYWN0aW9ucyBjb21wbGV0ZS4gT2YgY291cnNlLCBlYWNoIGNvcHkgb2Yg S2VybWl0IGNhbiBkbworICAgb25seSBvbmUgdGhpbmcgYXQgYSB0aW1lLCBzbyBpdCBjYW4ndCAo Zm9yIGV4YW1wbGUpIHRyYW5zZmVyIGEgZmlsZQorICAgd2l0aCBGVFAgYW5kIGFub3RoZXIgZmls ZSB3aXRoIEtlcm1pdCBwcm90b2NvbCBzaW11bHRhbmVvdXNseS4KKworICAgQSBLZXJtaXQgRlRQ IHNlc3Npb24gY2FuIGJlIGVzdGFibGlzaGVkIGJ5IFsyMjZdY29tbWFuZC1saW5lIG9wdGlvbnMs CisgICBieSBbMjI3XVVSTCwgb3IgYnkgWzIyOF1pbnRlcmFjdGl2ZSBjb21tYW5kcy4KKworMy4x LjEuIEtlcm1pdCBDb21tYW5kLUxpbmUgT3B0aW9ucyBmb3IgRlRQCisKKyAgIFRoZSBuZXcgY29t bWFuZC1saW5lIG9wdGlvbiAnLTknIChzb3JyeSwgd2UncmUgb3V0IG9mIGxldHRlcnMpIGNhbiBi ZQorICAgdXNlZCB3aGVuIHN0YXJ0aW5nIEMtS2VybWl0LCB0ZWxsaW5nIGl0IHRvIG1ha2UgYW4g RlRQIGNvbm5lY3Rpb246CisKKyAga2VybWl0IC05IGhvc3RuYW1lCisKKyAgIG9yIGlmIGEgbm9u LWRlZmF1bHQgRlRQIHBvcnQgaXMgbmVlZGVkOgorCisgIGtlcm1pdCAtOSBob3N0bmFtZTpwb3J0 CisKKyAgIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSB1c2VybmFtZSBvbiB0aGUgY29tbWFuZCBs aW5lIHdpdGggdGhlIC1NICgiTXkKKyAgIFVzZXIgSUQiKSBvcHRpb24gdGhhdCB3YXMgYWxyZWFk eSB0aGVyZSBmb3Igb3RoZXIgY29ubmVjdGlvbiB0eXBlczoKKworICBrZXJtaXQgLTkgaG9zdG5h bWUgLU0gb2xnYQorCisgICBJZiB5b3Ugc3BlY2lmeSB0aGUgdXNlcm5hbWUgb24gdGhlIGNvbW1h bmQgbGluZSwgS2VybWl0IHVzZXMgaXQgd2hlbgorICAgbWFraW5nIHRoZSBjb25uZWN0aW9uIGFu ZCBkb2VzIG5vdCBwcm9tcHQgeW91IGZvciBpdCAoYnV0IGl0IGRvZXMKKyAgIHByb21wdCB5b3Ug Zm9yIHRoZSBwYXNzd29yZCBpZiBvbmUgaXMgcmVxdWlyZWQpLgorCisgICBPbmNlIHRoZSBjb25u ZWN0aW9uIGlzIG1hZGUsIHlvdSBnZXQgdGhlIHJlZ3VsYXIgS2VybWl0IHByb21wdCwgYW5kIGNh bgorICAgZ2l2ZSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBzdWNoIGFzIHRoZSBvbmVzIGRlc2NyaWJl ZCBiZWxvdy4gV2hlbiB5b3UKKyAgIGdpdmUgYSBCWUUgY29tbWFuZCwgS2VybWl0IGNsb3NlcyB0 aGUgc2Vzc2lvbiBhbmQgZXhpdHMsIGp1c3QgYXMgYQorICAgcmVndWxhciBGVFAgY2xpZW50IHdv dWxkIGRvLiBJZiB5b3UgZG9uJ3Qgd2FudCBLZXJtaXQgdG8gZXhpdCB3aGVuIHlvdQorICAgZ2l2 ZSBhIEJZRSBjb21tYW5kLCBpbmNsdWRlIHRoZSAtUyAoIlN0YXkiKSBvcHRpb24gb24gdGhlIGNv bW1hbmQgbGluZS4KKworICAgT3RoZXIgS2VybWl0IGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQg YXJlIG5vdCBzcGVjaWZpYyB0byBub24tRlRQCisgICBjb25uZWN0aW9ucyBzaG91bGQgYWZmZWN0 IHRoZSBGVFAgc2Vzc2lvbiBpbiB0aGUgZXhwZWN0ZWQgd2F5czsgZm9yCisgICBleGFtcGxlLCAt aSBhbmQgLVQgZm9yY2UgYmluYXJ5IGFuZCB0ZXh0IG1vZGUgdHJhbnNmZXJzLCByZXNwZWN0aXZl bHkuCisKKyAgIEZpbGUgdHJhbnNmZXJzIGNhbiBub3QgYmUgaW5pdGlhdGVkIG9uIHRoZSAia2Vy bWl0IC05IiBjb21tYW5kIGxpbmU7CisgICBmb3IgdGhhdCB5b3UgbmVlZCB0byB1c2UgS2VybWl0 J3MgRlRQIHBlcnNvbmFsaXR5IChuZXh0IHNlY3Rpb24pIG9yIHlvdQorICAgY2FuIHVzZSBVUkxz IChbMjI5XVNlY3Rpb24gMy4xLjMpLgorCiszLjEuMi4gVGhlIEZUUCBDb21tYW5kLUxpbmUgUGVy c29uYWxpdHkKKworICAgSWYgeW91IHdhbnQgdG8gcmVwbGFjZSB5b3VyIHJlZ3VsYXIgRlRQIGNs aWVudCB3aXRoIEMtS2VybWl0LCB5b3UgY2FuCisgICBtYWtlIGEgbGluayBjYWxsZWQgImZ0cCIg dG8gdGhlIEMtS2VybWl0IGJpbmFyeSAob3IgeW91IGNhbiBzdG9yZSBhCisgICBjb3B5IG9mIHRo ZSBDLUtlcm1pdCBiaW5hcnkgdW5kZXIgdGhlIG5hbWUgImZ0cCIpLiBXaGVuIEMtS2VybWl0IGlz CisgICBpbnZva2VkIHdpdGggYSBwcm9ncmFtIG5hbWUgb2YgImZ0cCIgKG9yICJGVFAiLCBjYXNl IGRvZXNuJ3QgbWF0dGVyKSwKKyAgIGl0IGFzc3VtZXMgdGhlIGNvbW1hbmQtbGluZSBwZXJzb25h bGl0eSBvZiB0aGUgcmVndWxhciBGVFAgY2xpZW50OgorCisgIGZ0cCBbIG9wdGlvbnMgXSBob3N0 bmFtZSBbIHBvcnQgXQorCisgICBJbiB0aGlzIGNhc2UgdGhlIG9wdGlvbnMgYXJlIGxpa2UgdGhv c2Ugb2YgYSByZWd1bGFyIEZUUCBjbGllbnQ6CisKKyAgLWQgIERlYnVnOiBlbmFibGVzIGRlYnVn IG1lc3NhZ2VzIGFuZCBjcmVhdGVzIGEgZGVidWcubG9nIGZpbGUuCisgIC1uICBObyBhdXRvbG9n aW46IEtlcm1pdCBzaG91bGQgbm90IHNlbmQgeW91ciB1c2VyIElEIGF1dG9tYXRpY2FsbHkuCisg IC10ICBQYWNrZXQgdHJhY2U6IGFjY2VwdGVkIGJ1dCBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIC1k LgorICAtdiAgVmVyYm9zZTogYWNjZXB0ZWQgYnV0IGlnbm9yZWQgKG9wZXJhdGlvbiBpcyB2ZXJi b3NlIGJ5IGRlZmF1bHQpLgorICAtaSAgTm90IGludGVyYWN0aXZlOiBhY2NlcHRlZCBidXQgaWdu b3JlZC4KKworICAgYW5kIHRoZSBob3N0bmFtZSBjYW4gYWxzbyBiZSBhIFVSTCAoZXhwbGFpbmVk IGluIFsyMzBdU2VjdGlvbiAzLjEuMykuCisgICBUbyBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgVENQ IHBvcnQgZm9yIHRoZSBGVFAgc2VydmVyLCBpbmNsdWRlIHRoZSBwb3J0CisgICBudW1iZXIgb3Ig bmFtZSBhZnRlciB0aGUgaG9zdG5hbWUuCisKKyAgIFRoZXJlIGFyZSBhbHNvIHNvbWUgYm9udXMg b3B0aW9ucyB0aGF0IGFsbG93IHlvdSB0byBleGVjdXRlIGFuIGVudGlyZQorICAgRlRQIHNlc3Np b24gZnJvbSB0aGUgc2hlbGwgY29tbWFuZCBsaW5lLCBhcyBsb25nIGFzIHlvdSBkb24ndCBpbmNs dWRlCisgICB0aGUgLW4gb3B0aW9uLiBUaGVzZSBhcmUgbm90IGF2YWlsYWJsZSB3aXRoIHJlZ3Vs YXIgRlRQIGNsaWVudHMsIGFuZCBhdAorICAgbGVhc3Qgb25lIG9mIHRoZXNlIG9wdGlvbnMgKC1n KSBjb25mbGljdHMgd2l0aCBVTklYIGZ0cCAod2hlcmUgLWcgbWVhbnMKKyAgICJubyBnbG9iYmlu ZyIsIHdoaWNoIGRvZXMgbm90IGFwcGx5IHRvIEtlcm1pdCksIGFuZCBzb21lIG9mIHRoZW0gKGxp a2UKKyAgIHRoZSBvcHRpb25zIGFib3ZlKSBhbHNvIGNvbmZsaWN0IHdpdGggcmVndWxhciBLZXJt aXQgY29tbWFuZC1saW5lCisgICBvcHRpb25zOgorCisgIC1tIG1vZGUgICAgICA9ICJwYXNzaXZl IiAoZGVmYXVsdCkgb3IgImFjdGl2ZSIKKyAgLVkgICAgICAgICAgICBEb24ndCBleGVjdXRlIHRo ZSBLZXJtaXQgaW5pdGlhbGl6YXRpb24gZmlsZSBbMV0KKyAgLXEgICAgICAgICAgICBRdWlldCwg c3VwcHJlc3NlcyBhbGwgYnV0IGVycm9yIG1lc3NhZ2VzIFsxXQorICAtUyAgICAgICAgICAgIFN0 YXksIGRvbid0IGV4aXQgYXV0b21hdGljYWxseSBbMV0KKyAgLUEgICAgICAgICAgICBBdXRvbG9n aW4gYW5vbnltb3VzbHkgWzJdCisgIC11IG5hbWUgICAgICAgVXNlcm5hbWUgZm9yIGF1dG9sb2dp biBbMl0gKHN5bm9ueW06IC1NIFsxXSkKKyAgLVAgcGFzc3dvcmQgICBQYXNzd29yZCBmb3IgYXV0 b2xvZ2luIChzZWUgY2F1dGlvbnMgYmVsb3cpIFsyXQorICAtRCBkaXJlY3RvcnkgIGNkIGFmdGVy IGF1dG9sb2dpbiBbMl0KKyAgLWIgICAgICAgICAgICBCaW5hcnkgbW9kZSBbMl0KKyAgLWEgICAg ICAgICAgICBUZXh0ICgiYXNjaWkiKSBtb2RlIFsyXSAoc3lub255bTogLVQgWzFdKQorICAtUiAg ICAgICAgICAgIFJlY3Vyc2l2ZSAod29ya3Mgd2l0aCAtcCkgWzRdCisgIC1wIGZpbGVzICAgICAg RmlsZXMgdG8gcHV0ICh1cGxvYWQpIGFmdGVyIGF1dG9sb2dpbiBbMl0gKHN5bm9ueW06IC1zIFsx XSkKKyAgLWcgZmlsZXMgICAgICBGaWxlcyB0byBnZXQgKGRvd25sb2FkKSBhZnRlciBhdXRvbG9n aW4gWzNdCisKKyAgIFsxXSBTYW1lIGFzIEtlcm1pdCwgbm90IGF2YWlsYWJsZSBpbiByZWd1bGFy IEZUUCBjbGllbnRzLgorICAgWzJdIENvbmZsaWN0cyB3aXRoIEtlcm1pdCwgbm90IGF2YWlsYWJs ZSBpbiByZWd1bGFyIEZUUCBjbGllbnRzLgorICAgWzNdIFNhbWUgYXMgS2VybWl0LCBjb25mbGlj dHMgd2l0aCByZWd1bGFyIEZUUCBjbGllbnRzLgorICAgWzRdIENvbmZsaWN0cyB3aXRoIEtlcm1p dCwgYXZhaWxhYmxlIGluIHNvbWUgRlRQIGNsaWVudHMuCisKKyAgIEZhbmNpZXIgb3B0aW9ucyBz dWNoIGFzIHJlc3RhcnQsIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24sIGZpbGVuYW1lCisgICBj b2xsaXNpb24gc2VsZWN0aW9uLCBhdXRvbWF0aWMgbW92ZS9yZW5hbWUvZGVsZXRlLCBldGMsIGFy ZSBub3QKKyAgIGF2YWlsYWJsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmU7IGZvciB0aGVzZSB5b3Ug Y2FuIHVzZSB0aGUgY29tbWFuZHMKKyAgIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rp b25zLiBUaGUgLVIgb3B0aW9uIG1pZ2h0IGFsc28gd29yayB3aXRoCisgICAtZyAoR0VUKSBidXQg dGhhdCBkZXBlbmRzIG9uIHRoZSBzZXJ2ZXIuCisKKyAgIFRoZSBmb2xsb3dpbmcgc2VjdXJpdHkg b3B0aW9ucyBhcmUgYWxzbyBhdmFpbGFibGUsIGV4cGxhaW5lZCBpbgorICAgWzIzMV1TZWN0aW9u IDMuMjoKKworICAtayByZWFsbSAgICAgIEtlcmJlcm9zIDQgcmVhbG0gWzRdCisgIC1mICAgICAg ICAgICAgS2VyYmVyb3MgNSBjcmVkZW50aWFscyBmb3J3YXJkaW5nIFs0XQorICAteCAgICAgICAg ICAgIGF1dG9lbmNyeXB0aW9uIG1vZGUgWzRdCisgIC1jIGNpcGhlciAgICAgU1JQIGNpcGhlciB0 eXBlIFs0XQorICAtSCBoYXNoICAgICAgIFNSUCBlbmNyeXB0aW9uIGhhc2ggWzRdCisgIC16IG9w dGlvbiAgICAgU2VjdXJpdHkgb3B0aW9ucyBbNF0KKworICAgSWYgeW91IGluY2x1ZGUgLUEgb3Ig c3BlY2lmeSBhIG5hbWUgb2YgImFub255bW91cyIgb3IgImZ0cCIsIHlvdSBhcmUKKyAgIGxvZ2dl ZCBpbiBhbm9ueW1vdXNseSBhbmQsIGluIHRoZSBhYnNlbmNlIG9mIC1QLCBLZXJtaXQgYXV0b21h dGljYWxseQorICAgc3VwcGxpZXMgYSBwYXNzd29yZCBvZiAidXNlckBob3N0Iiwgd2hlcmUgInVz ZXIiIGlzIHlvdXIgbG9jYWwgdXNlciBJRCwKKyAgIGFuZCAiaG9zdCIgaXMgdGhlIGhvc3RuYW1l IG9mIHRoZSBjb21wdXRlciB3aGVyZSBLZXJtaXQgaXMgcnVubmluZy4gSWYKKyAgIHlvdSBkbyBu b3QgaW5jbHVkZSAtcCBvciAtZywgS2VybWl0IGVudGVycyBjb21tYW5kIG1vZGUgc28geW91IGNh biB0eXBlCisgICBjb21tYW5kcyBvciBleGVjdXRlIHRoZW0gZnJvbSBhIHNjcmlwdC4KKworICAg SWYgeW91IGluY2x1ZGUgLXAgb3IgLWcsIEtlcm1pdCBhdHRlbXB0cyB0byB0cmFuc2ZlciB0aGUg c3BlY2lmaWVkCisgICBmaWxlcyBhbmQgdGhlbiBleGl0cyBhdXRvbWF0aWNhbGx5IGF0IHRoZSBl bmQgb2YgdGhlIHRyYW5zZmVyIHVubGVzcworICAgeW91IGFsc28gaW5jbHVkZWQgLVMgKFN0YXkp LiBJdCB1c2VzIHRoZSAiYnJpZWYiIGZpbGUgdHJhbnNmZXIgZGlzcGxheQorICAgKG9uZSBsaW5l IHBlciBmaWxlKSB1bmxlc3MgeW91IGluY2x1ZGUgdGhlIC1xIG9wdGlvbiB0byBzdXBwcmVzcyBp dC4KKworICAgV2hlbiB1cGxvYWRpbmcgZmlsZXMgd2l0aCAtcCwgS2VybWl0IHN3aXRjaGVzIGF1 dG9tYXRpY2FsbHkgYmV0d2VlbgorICAgdGV4dCBhbmQgYmluYXJ5IG1vZGUgZm9yIGVhY2ggZmls ZS4KKworICAgV2hlbiBkb3dubG9hZGluZywgeW91IGNhbiBlaXRoZXIgc3BlY2lmeSBhIHBhcnRp Y3VsYXIgbW9kZSAodGV4dCBvcgorICAgYmluYXJ5KSB0byBiZSB1c2VkIGZvciBhbGwgdGhlIGZp bGVzLCBvciB5b3UgY2FuIGxldCBLZXJtaXQgc2VsZWN0IHRoZQorICAgdHlwZSBmb3IgZWFjaCBm aWxlIGF1dG9tYXRpY2FsbHksIGJhc2VkIG9uIGl0cyBuYW1lIChzZWUgWzIzMl1TZWN0aW9ucwor ICAgMy41IGFuZCBbMjMzXTMuNiBmb3IgZ3JlYXRlciBkZXRhaWwpLiBJbiBVTklYIGJlIHN1cmUg dG8gcXVvdGUgYW55CisgICB3aWxkY2FyZCBjaGFyYWN0ZXJzIHRvIHByZXZlbnQgdGhlIHNoZWxs IGZyb20gZXhwYW5kaW5nIHRoZW0sIGFzIHNob3duCisgICBpbiB0aGUgZXhhbXBsZXMganVzdCBi ZWxvdy4gRmlsZW5hbWUgY29sbGlzaW9ucyBhcmUgaGFuZGxlZCBhY2NvcmRpbmcKKyAgIEtlcm1p dCdzIEZJTEUgQ09MTElTSU9OIHNldHRpbmcgKGlmIHNwZWNpZmllZCBpbiB5b3VyIEtlcm1pdAor ICAgY3VzdG9taXphdGlvbiBmaWxlOyBvdGhlcndpc2UgdGhlIGRlZmF1bHQsIHdoaWNoIGlzIEJB Q0tVUCkuCisKKyAgIEl0IHNob3VsZCBnbyB3aXRob3V0IHNheWluZyB0aGF0IHRoZSAtUCBvcHRp b24gc2hvdWxkIGJlIHVzZWQgd2l0aAorICAgY2F1dGlvbi4gSW4gYWRkaXRpb24gdG8gdGhlIHdl bGwta25vd24gcmlza3Mgb2YgdHJhbnNtaXR0aW5nIHBsYWludGV4dAorICAgcGFzc3dvcmRzIG92 ZXIgdGhlIEludGVybmV0LCBpbiB0aGlzIGNhc2UgdGhlIHBhc3N3b3JkIGFsc28gZWNob3MgdG8K KyAgIHRoZSBzY3JlZW4gaWYgeW91IHR5cGUgaXQsIGFuZCBjYW4gYmUgc2VlbiBpbiBwcyBhbmQg dyBsaXN0aW5ncyB0aGF0CisgICBzaG93IHRoZSB1c2VyJ3MgY3VycmVudGx5IGFjdGl2ZSBjb21t YW5kIGFuZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLgorICAgVGh1cyBjb21tYW5kLWxpbmUgRlRQ IHNlc3Npb25zIGFyZSBtb3N0IGFwcHJvcHJpYXRlIGZvciBzZWN1cmUgb3IKKyAgIGFub255bW91 cyBjb25uZWN0aW9ucyAodGhvc2UgdGhhdCBkbyBub3QgcmVxdWlyZSBwYXNzd29yZHMpLgorCisg ICBIZXJlJ3MgYW4gZXhhbXBsZSBpbiB3aGljaCB5b3UgZG93bmxvYWQgdGhlIGxhdGVzdCBDLUtl cm1pdCAidGFyYmFsbCIKKyAgIGZyb20gdGhlIENvbHVtYmlhIFVuaXZlcnNpdHkgRlRQIGFyY2hp dmU6CisKKyAgZnRwIC1BIGtlcm1pdC5jb2x1bWJpYS5lZHUgLWJnIGtlcm1pdC9hcmNoaXZlcy9j a2VybWl0LnRhci5negorCisgICBUaGlzIGFzc3VtZXMgdGhhdCAiZnRwIiBpcyBhIHN5bWJvbGlj IGxpbmsgdG8gQy1LZXJtaXQuIEl0IGxvZ3MgeW91IGluCisgICBhbm9ueW1vdXNseSBhbmQgZ2V0 cyB0aGUgY2tlcm1pdC50YXIuZ3ogZmlsZSBpbiBiaW5hcnkgbW9kZSBmcm9tIHRoZQorICAga2Vy bWl0L2FyY2hpdmVzIGRpcmVjdG9yeS4KKworICAgSGVyZSdzIGEgc2xpZ2h0bHkgbW9yZSBhbWJp dGlvdXMgZXhhbXBsZSB0aGF0IGlsbHVzdHJhdGVzIENEJ2luZyB0byB0aGUKKyAgIGRlc2lyZWQg c2VydmVyIGRpcmVjdG9yeSB0byBnZXQgYSBncm91cCBvZiBmaWxlcyBpbiB0ZXh0IG1vZGUgKGlu IHRoaXMKKyAgIGNhc2UgdGhlIEMtS2VybWl0IHNvdXJjZSBmaWxlcyk6CisKKyAgZnRwIC1BIGtl cm1pdC5jb2x1bWJpYS5lZHUgLUQga2VybWl0L2YgLWFnICJja1tjdXddKi5bY3doXSIgbWFrZWZp bGUKKworICAgSW4gdGhpcyBjYXNlIHdlIENEIHRvIHRoZSBrZXJtaXQvZiBkaXJlY3Rvcnkgc28g d2UgZG9uJ3QgaGF2ZSB0bworICAgaW5jbHVkZSBpdCBpbiBlYWNoIGZpbGUgc3BlY2lmaWNhdGlv biwgYW5kIHdlIHF1b3RlIHRoZSBja1tjdXddKi5bY3doXQorICAgc3BlY2lmaWNhdGlvbiBzbyB0 aGUgc2hlbGwgZG9lc24ndCBleHBhbmQgaXQsIHNpbmNlIHdlIGhhdmUgdG8gcGFzcyBpdAorICAg YXMtaXMgdG8gdGhlIHNlcnZlci4gTm90ZSBhbHNvIHRoYXQgdGhlIHF1b3RlcyBkb24ndCBnbyBh cm91bmQgdGhlCisgICBlbnRpcmUgZmlsZSBsaXN0OyBvbmx5IGFyb3VuZCBlYWNoIGZpbGUgc3Bl Y2lmaWNhdGlvbiB0aGF0IG5lZWRzIHRvIGJlCisgICBxdW90ZWQuCisKKyAgIEhlcmUncyBvbmUg bW9yZSBleGFtcGxlLCB0aGF0IHVwbG9hZHMgYSBkZWJ1ZyBsb2cgZmlsZSBpbiBiaW5hcnkgbW9k ZQorICAgdG8gdGhlIEtlcm1pdCBpbmNvbWluZyBkaXJlY3RvcnkgKGFzIHdlIG1pZ2h0IGFzayB5 b3UgdG8gZG8gd2hlbgorICAgZm9sbG93aW5nIHVwIG9uIGEgcHJvYmxlbSByZXBvcnQpOgorCisg IGZ0cCAtQSBrZXJtaXQuY29sdW1iaWEuZWR1IC1EIGtlcm1pdC9pbmNvbWluZyAtYnAgZGVidWcu bG9nCisKKyAgIEluIHRoaXMgY2FzZSB0aGUgLUQgb3B0aW9uIGlzIHJlcXVpcmVkIHRvIHRlbGwg dGhlIHNlcnZlciB3aGVyZSB0byBwdXQKKyAgIHRoZSBpbmNvbWluZyBmaWxlLgorCisgICBVbmxl c3MgdGhlIC1ZIG9wdGlvbiBpcyBpbmNsdWRlZCwgeW91ciBLZXJtaXQgaW5pdGlhbGl6YXRpb24g ZmlsZQorICAgKC5teWtlcm1yYyBpbiBVTklYLCBLOTUuSU5JIGluIFdpbmRvd3MpIGlzIGV4ZWN1 dGVkIGJlZm9yZSB0aGUgY29tbWFuZAorICAgbGluZSBvcHRpb25zLCBzbyB5b3UgY2FuIHNldCBh bnkgRlRQLXJlbGF0ZWQgcHJlZmVyZW5jZXMgdGhlcmUsIGFzCisgICBkZXNjcmliZWQgaW4gdGhl IHN1YnNlcXVlbnQgc2VjdGlvbnMuCisKKzMuMS4zLiBUaGUgRlRQIFVSTCBJbnRlcnByZXRlcgor CisgICBJZiBLZXJtaXQgaXMgaW52b2tlZCB3aXRoIGVpdGhlciBpdHMgcmVndWxhciBwZXJzb25h bGl0eSAoYXMgImtlcm1pdCIpCisgICAgICAgICAgb3IgaXRzIEZUUCBwZXJzb25hbGl0eSAoYXMg ImZ0cCIpLCB5b3UgY2FuIGFsc28gZ2l2ZSBhIFVSTAorICAgICAgICAgIChVbml2ZXJzYWwgUmVz b3VyY2UgTG9jYXRvcikgaW5zdGVhZCBvZiBhIGhvc3RuYW1lIGFuZCBvcHRpb25zLAorICAgICAg ICAgIHdpdGggb3Igd2l0aG91dCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZDoKKyAgICAgICAgICBm dHAgZnRwOi8vdXNlcjpwYXNzd29yZEBob3N0L3BhdGgKKyAgICAgICAgICBmdHAgZnRwOi8vdXNl ckBob3N0L3BhdGgKKyAgICAgICAgICBmdHAgZnRwOi8vQGhvc3QvcGF0aCAgIChvciBmdHA6Ly86 QGhvc3QvcGF0aCkKKyAgICAgICAgICBmdHAgZnRwOi8vaG9zdC9wYXRoCisgICAgICAgICAga2Vy bWl0IGZ0cDovL2hvc3QvcGF0aAorCisgICBJZiB0aGUgRlRQIHBlcnNvbmFsaXR5IGlzIHVzZWQs IHRoZSBzZXJ2aWNlIG11c3QgYmUgImZ0cCIuIEluIGFsbAorICAgY2FzZXMsIGEgaG9zdG5hbWUg b3IgYWRkcmVzcyBtdXN0IGJlIGluY2x1ZGVkLiBJZiBhIHVzZXIgaXMgaW5jbHVkZWQKKyAgIGJ1 dCBubyBwYXNzd29yZCwgeW91IGFyZSBwcm9tcHRlZCBmb3IgdGhlIHBhc3N3b3JkLiBJZiBhIHBh dGgKKyAgIChmaWxlbmFtZSkgaXMgaW5jbHVkZWQ6CisgICAgICogSWYgIkAiIGlzIGluY2x1ZGVk IHdpdGhvdXQgYSB1c2VyLCBLZXJtaXQgcHJvbXB0cyBmb3IgdGhlIHVzZXJuYW1lCisgICAgICAg YW5kIHBhc3N3b3JkLgorICAgICAqIElmIG5vIHVzZXIgYW5kIG5vICJAIiBhcmUgaW5jbHVkZWQs ICJhbm9ueW1vdXMiIGlzIHVzZWQuCisgICAgICogR0VUIGlzIGFzc3VtZWQuCisKKyAgIElmIG5v IHBhdGggKGFuZCBubyBhY3Rpb24gb3B0aW9ucykgYXJlIGluY2x1ZGVkLCBhbiBpbnRlcmFjdGl2 ZSBGVFAKKyAgICAgICAgICBzZXNzaW9uIGlzIHN0YXJ0ZWQsIGFzIGluIHRoaXMgZXhhbXBsZToK KyAgICAgICAgICBmdHAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdQorCisgICBJZiBhIHBhdGgg aXMgaW5jbHVkZWQsIGJ1dCBhIHVzZXJuYW1lIGlzIG5vdCBpbmNsdWRlZCwgImFub255bW91cyIg aXMKKyAgIHVzZWQgYW5kIGFuIGFwcHJvcHJpYXRlIHVzZXJAaG9zdCBwYXNzd29yZCBpcyBzdXBw bGllZCBhdXRvbWF0aWNhbGx5LgorICAgSWYgYXV0aGVudGljYXRpb24gaXMgc3VjY2Vzc2Z1bCwg S2VybWl0IGF0dGVtcHRzIHRvIEdFVCB0aGUgZmlsZQorICAgaW5kaWNhdGVkIGJ5IHRoZSBwYXRo IG9yLCBpZiB0aGUgcGF0aCBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSwgaXQKKyAgIGFza3Mg dGhlIHNlcnZlciBmb3IgYSBkaXJlY3RvcnkgbGlzdGluZy4gSW4gYm90aCBjYXNlcywgS2VybWl0 CisgICBkaXNjb25uZWN0cyBmcm9tIHRoZSBzZXJ2ZXIgYW5kIGV4aXRzIGFmdGVyIHRoZSBvcGVy YXRpb24gaXMgY29tcGxldGUKKyAgICh1bmxlc3MgeW91IGhhdmUgaW5jbHVkZWQgdGhlIC1TIG9w dGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lKS4KKworICAgSGVyZSdzIGFuIGV4YW1wbGUgdGhhdCBn ZXRzIGEgbGlzdGluZyBvZiB0aGUgS2VybWl0IGRpcmVjdG9yeSBhdCB0aGUKKyAgICAgICAgICBL ZXJtaXQgZnRwIHNpdGU6CisgICAgICAgICAgZnRwIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0LworCisgICBUaGlzIGV4YW1wbGUgZ2V0cyB0aGUgdG9wLWxldmVsIFJFQUQuTUUgZmls ZSBmcm9tIHRoZSBzYW1lIGRpcmVjdG9yeToKKyAgICAgICAgICBmdHAgZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvUkVBRC5NRQorCisgICBIZXJlJ3MgdGhlIHNhbWUgZXhhbXBsZSwg YnV0IHJlcXVlc3RpbmcgYSB0ZXh0LW1vZGUgdHJhbnNmZXI6CisgICAgICAgICAgZnRwIC1UIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L1JFQUQuTUUKKyAgICAgICAgICBUaGlzIGls bHVzdHJhdGVzIHRoYXQgeW91IGNhbiBtaXggY29tbWFuZC1saW5lIG9wdGlvbnMgYW5kIFVSTHMK KyAgICAgICAgICBpZiB5b3UgZGVzaXJlLgorCisgICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IGxv Z3MgaW4gYXMgYSAoZmljdGl0aW91cykgcmVhbCB1c2VyIHRvIGdldCBhCisgICAgICAgICAgZmls ZToKKyAgICAgICAgICBmdHAgZnRwOi8vb2xnYUBmdHAueHl6Y29ycC5jb20vcmVzdW1lLnR4dAor ICAgICAgICAgIFRoZSBwYXNzd29yZCBpcyBub3QgaW5jbHVkZWQsIHNvIEtlcm1pdCBwcm9tcHRz IGZvciBpdC4KKworICAgVGhpcyBzY2hlbWUgYWxsb3dzIEtlcm1pdCB0byBiZSB1c2VkIGFzIHRo ZSBGVFAgaGVscGVyIG9mIG90aGVyCisgICBhcHBsaWNhdGlvbnMsIHN1Y2ggYXMgV2ViIGJyb3dz ZXJzLCB3aXRoIGFsbCBpdHMgYWR2YW50YWdlcyBvdmVyIG90aGVyCisgICBGVFAgY2xpZW50cyAo ZXNwZWNpYWxseSB0aGUgb25lcyB0aGF0IGFyZSBidWlsdCBpbiB0byBtb3N0IFdlYgorICAgYnJv d3NlcnMpLCBlLmcuIHRoYXQgaXQgY2FuIGJlIGdpdmVuIHdpbGRjYXJkcywgYW5kIGl0IGNhbiBw aWNrIHRleHQKKyAgIGFuZCBiaW5hcnkgbW9kZSBhdXRvbWF0aWNhbGx5IGZvciBlYWNoIGZpbGUu CisKKyAgIEhJTlQ6IHN1cHBvc2Ugc29tZWJvZHkgc2VuZHMgeW91IGFuIEZUUCBVUkwgaW4gZW1h aWwsIG9yIHlvdSBzZWUgaXQgaW4KKyAgIHNvbWUgdGV4dC4gSWYgeW91ciB0ZXJtaW5hbCBzY3Jl ZW4gc3VwcG9ydHMgY29weS9wYXN0ZSwgY29weSB0aGUgdXJsLAorICAgYW5kIHRoZW4gYXQgdGhl IHNoZWxsIHByb21wdCB0eXBlICJrZXJtaXQiLCBhIHNwYWNlLCBhbmQgdGhlbiBwYXN0ZSB0aGUK KyAgIFVSTCwgZS5nLjoKKworICAkIGtlcm1pdCBmdHA6Ly9hbHBoYS5ncmVlbmllLm5ldC9wdWIv bWdldHR5L3NvdXJjZS8xLjEvbWdldHR5MS4xLjI3LU8KKworICAgIiQgaXMgdGhlIHNoZWxsIHBy b21wdDsgdGhlIHBhcnQgeW91IHR5cGUgaXMgdW5kZXJsaW5lZCwgdGhlIHJlc3QgaXMKKyAgIHBh c3RlZCBpbi4gS2VybWl0IGRvZXMgdGhlIHJlc3QuCisKKzMuMS40LiBJbnRlcmFjdGl2ZSBGVFAg U2Vzc2lvbiBFc3RhYmxpc2htZW50CisKKyAgIEFzIHlvdSByZWFkIHRoaXMgYW5kIHRoZSBmb2xs b3dpbmcgc2VjdGlvbnMsIGJlYXIgaW4gbWluZCB0aGF0IGFueQorICAgY29tbWFuZCB0aGF0IGNh biBiZSBnaXZlbiBhdCB0aGUgcHJvbXB0IGNhbiBhbHNvIGJlIHVzZWQgaW4gYSBzY3JpcHQKKyAg IHByb2dyYW0uIEtlcm1pdCdzIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZSBpcyB0aGUgc2Ft ZSBhcyBpdHMKKyAgIGludGVyYWN0aXZlIGNvbW1hbmQgbGFuZ3VhZ2UuIFsyMzRdQ0xJQ0sgSEVS RSBpZiB5b3Ugd291bGQgbGlrZSB0bworICAgbGVhcm4gYSBiaXQgbW9yZSBhYm91dCBzY3JpcHQg d3JpdGluZy4KKworICAgQW4gRlRQIHNlc3Npb24gaXMgZXN0YWJsaXNoZWQgd2l0aCB0aGUgRlRQ IE9QRU4gY29tbWFuZDoKKworICAgRlRQIFsgT1BFTiBdIFsgeyAvU1NMLCAvVExTIH0gXSBob3N0 bmFtZSBbIHN3aXRjaGVzIF0gWyBwb3J0IF0KKyAgICAgICAgICBPcGVucyBhbiBGVFAgY29ubmVj dGlvbiB0byB0aGUgZ2l2ZW4gaG9zdCBvbiB0aGUgZ2l2ZW4gcG9ydCBhbmQsCisgICAgICAgICAg aWYgRlRQIEFVVE9MT0dJTiBpcyBPTiwgYWxzbyBsb2dzIHlvdSBpbiB0byB0aGUgc2VydmVyLAor ICAgICAgICAgIHByb21wdGluZyBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGlmIG5lY2Vzc2Fy eS4gSWYgbm8gcG9ydCBpcworICAgICAgICAgIHNwZWNpZmllZCwgdGhlIHJlZ3VsYXIgRlRQIHBy b3RvY29sIHBvcnQgKDIxKSBpcyB1c2VkLiBUaGUgT1BFTgorICAgICAgICAgIGtleXdvcmQgaXMg b3B0aW9uYWwgKHVubGVzcyB0aGUgaG9zdG5hbWUgY29uZmxpY3RzIHdpdGggb25lIG9mCisgICAg ICAgICAgdGhlIEZUUCBjb21tYW5kIGtleXdvcmRzLCB3aGljaCB5b3UgY2FuIGxpc3QgYnkgdHlw aW5nICJmdHAgPyIpLgorCisgICBUaGUgaG9zdG5hbWUgY2FuIGJlIGFuIElQIGhvc3QgbmFtZSwg bnVtZXJpYyBJUCBhZGRyZXNzLCBvciBpZiB5b3UgaGF2ZQorICAgYSBuZXR3b3JrIGRpcmVjdG9y eSBhY3RpdmUgKFNFVCBORVRXT1JLIERJUkVDVE9SWTsgc2VlIENoYXB0ZXIgNiBvZgorICAgWzIz NV1Vc2luZyBDLUtlcm1pdCksIGFuIGVudHJ5IG5hbWUgaW4gdGhlIGRpcmVjdG9yeS4gSW4gdGhl IGxhdHRlcgorICAgY2FzZSwgaWYgdGhlIGdpdmVuIGhvc3RuYW1lIG1hdGNoZXMgZXhhY3RseSBv bmUgZW50cnksIHRoZSBhc3NvY2lhdGVkCisgICBuYW1lIG9yIGFkZHJlc3MgaXMgdXNlZDsgaWYg aXQgbWF0Y2hlcyBtb3JlIHRoYW4gb25lLCBLZXJtaXQgY3ljbGVzCisgICB0aHJvdWdoIHRoZW0g dW50aWwgb25lIGlzIGZvdW5kIHRoYXQgY2FuIGJlIG9wZW5lZDsgaWYgaXQgbWF0Y2hlcyBub25l LAorICAgdGhlbiB0aGUgaG9zdG5hbWUgaXMgdXNlZCBhcy1pcy4gSWYgYSBkaXJlY3RvcnkgaXMg YWN0aXZlIGJ1dCB5b3Ugd2FudAorICAgdG8gYnlwYXNzIGRpcmVjdG9yeSBsb29rdXAsIGluY2x1 ZGUgYW4gIj0iIHNpZ24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAgIGhvc3RuYW1lLCBhbmQv b3IgdXNlIGEgbnVtZXJpYyBJUCBhZGRyZXNzLgorCisgICBXaGVuIGFuIEZUUCBjb25uZWN0aW9u IGlzIG9wZW5lZCwgdGhlIGRlZmF1bHQgZmlsZS10cmFuc2ZlciBtb2RlIGlzIHNldAorICAgdG8g YmluYXJ5IGlmIHRoZSBjbGllbnQgYW5kIHNlcnZlciBwbGF0Zm9ybXMgYXJlIGFsaWtlIChlLmcu IGJvdGggb2YKKyAgIHRoZW0gYXJlIHNvbWUga2luZCBvZiBVTklYKSwgYW5kIHRvIHRleHQgKCJh c2NpaSIpIGlmIHRoZXkgYXJlIG5vdAorICAgYWxpa2UuIFRoaXMgaGFzIG5vIHBhcnRpY3VsYXIg ZWZmZWN0IGZvciB1cGxvYWRpbmcgc2luY2UgS2VybWl0CisgICBhdXRvbWF0aWNhbGx5IHN3aXRj aGVzIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IG1vZGUgZm9yIGVhY2ggZmlsZSwgYnV0CisgICBt aWdodCBiZSBpbXBvcnRhbnQgZm9yIGRvd25sb2FkaW5nLiBUaGUgY29ubmVjdGlvbiBpcyBhbHNv IHNldCB0bworICAgU3RyZWFtIG1vZGUgYW5kIEZpbGUgc3RydWN0dXJlLiBSZWNvcmQtIG9yIHBh Z2Utb3JpZW50ZWQgZmlsZSB0cmFuc2ZlcnMKKyAgIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IEMtS2Vy bWl0J3MgRlRQIGNsaWVudC4KKworICAgVGhlIG9wdGlvbmFsIEZUUCBPUEVOIHN3aXRjaGVzIGFy ZToKKworICAgL0FOT05ZTU9VUworICAgICAgICAgIExvZ3MgeW91IGluIGFub255bW91c2x5LCBh dXRvbWF0aWNhbGx5IHN1cHBseWluZyB1c2VybmFtZQorICAgICAgICAgICJhbm9ueW1vdXMiIGFu ZCB1c2VyQGhvc3QgYXMgdGhlIHBhc3N3b3JkLCBiYXNlZCBvbiB5b3VyIGxvY2FsCisgICAgICAg ICAgdXNlciBhbmQgaG9zdCBuYW1lcy4KKworICAgL05PTE9HSU4KKworICAgICAgICAgIE92ZXJy aWRlcyBTRVQgRlRQIEFVVE9MT0dJTiBPTiBmb3IgdGhpcyBjb25uZWN0aW9uIG9ubHkuCisKKyAg IC9VU0VSOm5hbWUKKyAgICAgICAgICBVc2VzIHRoZSBnaXZlbiB1c2VybmFtZSB0byBsb2cgeW91 IGluLCB0aHVzIGF2b2lkaW5nIHRoZSBOYW1lOgorICAgICAgICAgIHByb21wdC4KKyAgICAgICAg ICBPdmVycmlkZXMgU0VUIEZUUCBBVVRPTE9HSU4gT0ZGIGZvciB0aGlzIGNvbm5lY3Rpb24gb25s eS4KKworICAgL1BBU1NXT1JEOnRleHQKKyAgICAgICAgICBVc2VzIHRoZSBnaXZlbiB0ZXh0IGFz IHlvdXIgcGFzc3dvcmQsIHRodXMgYXZvaWRpbmcgdGhlCisgICAgICAgICAgUGFzc3dvcmQ6IHBy b21wdC4gVGhpcyBzd2l0Y2ggaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UgaW4KKyAgICAgICAg ICBzY3JpcHQgZmlsZXMsIHdoaWNoIHdvdWxkIGJlIGEgc2VjdXJpdHkgcmlzay4KKworICAgL0FD Q09VTlQ6dGV4dAorICAgICAgICAgIFVzZXMgdGhlIGdpdmVuIHRleHQgYXMgeW91ciBhY2NvdW50 IChvciBzZWNvbmRhcnkgcGFzc3dvcmQsCisgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSByZXF1 aXJlbWVudHMgb2YgdGhlIHNlcnZlcjsgbW9zdCBzZXJ2ZXJzIGRvIG5vdAorICAgICAgICAgIHJl cXVpcmUgb3IgYWNjZXB0IGFuIGFjY291bnQgbmFtZSkuIElmIGFuIGFjY291bnQgaXMgbm90Cisg ICAgICAgICAgc3VwcGxpZWQsIHlvdSBhcmUgbm90IHByb21wdGVkIGZvciBvbmUuCisKKyAgIC9Q QVNTSVZFCisgICAgICAgICAgT3BlbnMgdGhlIGNvbm5lY3Rpb24gaW4gcGFzc2l2ZSBtb2RlLiBQ YXNzaXZlIG1vZGUgaXMgdGhlCisgICAgICAgICAgZGVmYXVsdCBpbiBLZXJtaXQncyBGVFAgY2xp ZW50LCB1bmxpa2UgaW4gbW9zdCBvdGhlcnMsIHNpbmNlIGl0CisgICAgICAgICAgd29ya3MgYmV0 dGVyIHRocm91Z2ggZmlyZXdhbGxzLiBUaGUgL1BBU1NJVkUgYW5kIC9BQ1RJVkUKKyAgICAgICAg ICBzd2l0Y2hlcyBhcHBseSBvbmx5IHRvIHRoZSBjb25uZWN0aW9uIHRoYXQgaXMgYmVpbmcgb3Bl bmVkLCBhbmQKKyAgICAgICAgICBkbyBub3QgYWZmZWN0IHRoZSBnbG9iYWwgRlRQIFBBU1NJVkUt TU9ERSBzZXR0aW5nLgorCisgICAvQUNUSVZFCisgICAgICAgICAgT3BlbnMgdGhlIGNvbm5lY3Rp b24gaW4gYWN0aXZlIG1vZGUuIFVzZSB0aGlzIHN3aXRjaCBpZiB0aGUKKyAgICAgICAgICBzZXJ2 ZXIgZG9lcyBub3Qgc3VwcG9ydCBwYXNzaXZlIG1vZGUsIG9yIHVzZSB0aGUgY29tbWFuZCBTRVQg RlRQCisgICAgICAgICAgUEFTU0lWRS1NT0RFIE9GRi4KKworICAgL05PSU5JVAorICAgICAgICAg IEFkZGVkIGluIEMtS2VybWl0IDguMC4yMDEuICAgVGVsbHMgQy1LZXJtaXQgbm90IHRvIHNlbmQg UkVTVCwKKyAgICAgICAgICBTVFJVLCBGRUFULCBhbmQgTU9ERSBjb21tYW5kcyB0byB0aGUgc2Vy dmVyIHdoZW4gdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICBpcyBvcGVuZWQsIHNpbmNlIHRoZXNl IGhhdmUgYmVlbiByZXBvcnRlZCB0byBjYXVzZSBjb25mdXNpb24gaW4KKyAgICAgICAgICBjZXJ0 YWluIHNlcnZlcnMuCisKKyAgIFdoZW4gYSB1c2VybmFtZSBvciBwYXNzd29yZCBpcyBtaXNzaW5n LCBhIHByb21wdCBpcyBpc3N1ZWQgYXQgdGhlCisgICBjb250cm9sbGluZyB0ZXJtaW5hbCBhbmQg eW91IG11c3QgdHlwZSB0aGUgcmVzcG9uc2U7IHRoZSByZXNwb25zZSBjYW4KKyAgIG5vdCBiZSBz Y3JpcHRlZC4gVXNlIHRoZSBzd2l0Y2hlcyB0byBhdm9pZCBwcm9tcHRzLCBvciBvbmUgb2YgdGhl CisgICBzZWN1cmUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhlIG5leHQg c2VjdGlvbiwgb3Igc2VlCisgICBbMjM2XVNFVCBGVFAgQVVUT0xPR0lOIGFuZCB0aGUgWzIzN11G VFAgVVNFUiBhbmQgc2ltaWxhciBjb21tYW5kcworICAgZGVzY3JpYmVkIGxhdGVyIGluIHRoaXMg c2VjdGlvbi4KKworICAgRXhhbXBsZXM6CisKKyAgZnRwIG9wZW4ga2VybWl0LmNvbHVtYmlhLmVk dSAvYW5vbnltb3VzICA7IE9wZW4gYW5kIGxvZyBpbiBhbm9ueW1vdXNseQorICBmdHAga2VybWl0 LmNvbHVtYmlhLmVkdSAvYW5vbnltb3VzICAgICAgIDsgVGhlIE9QRU4ga2V5d29yZCBjYW4gYmUg b21pdHRlZAorICBmdHAgeHl6Y29ycC5jb20gICAgICAgICAgICAgICAgICAgICAgICAgIDsgT3Bl biBhbmQgbWF5YmUgcHJvbXB0IGZvciB1c2VybmFtZQorICBmdHAgeHl6Y29ycC5jb20gL3VzZXI6 b2xnYSAgICAgICAgICAgICAgIDsgT3BlbiBhbmQgbG9nIGluIGFzIG9sZ2EKKyAgZnRwIHRlc3Rp bmcuYWJjY29ycC5jb20gNDQ5ICAgICAgICAgICAgICA7IFNwZWNpZnkgYSBzcGVjaWFsIFRDUCBw b3J0IG51bWJlcgorICBmdHAgdGVzdGluZy5hYmNjb3JwLmNvbSAvdXNlcjpvbGFmIC9wYXNzd29y ZDpzZWNyZXQgNDQ5CisKKyAgIFRoZSBGVFAgT1BFTiBjb21tYW5kIHN1Y2NlZWRzIGlmIGEgY29u bmVjdGlvbiB3YXMgb3BlbmVkIHRvIHRoZSBzZXJ2ZXIKKyAgIChldmVuIGlmIHRoZSBnaXZlbiB1 c2VybmFtZSBhbmQgcGFzc3dvcmQgd2VyZSBub3QgdmFsaWQpIGFuZCBmYWlscworICAgb3RoZXJ3 aXNlIChzZWUgWzIzOF1TZWN0aW9uIDMuOCBmb3IgZGV0YWlscykuCisKKyAgIFdoZW4geW91ciBG VFAgc2Vzc2lvbiBpcyBjb21wbGV0ZSwgeW91IGNhbiB0ZXJtaW5hdGUgaXQgYXMgZm9sbG93czoK KworICAgRlRQIEJZRQorICAgICAgICAgIENsb3NlcyB0aGUgRlRQIGNvbm5lY3Rpb24gaWYgb25l IHdhcyBvcGVuLiBUaGUgRlRQIHByZWZpeCBjYW4gYmUKKyAgICAgICAgICBvbWl0dGVkIGlmIG5v IG90aGVyIGNvbm5lY3Rpb24gaXMgb3BlbiBhdCB0aGUgc2FtZSB0aW1lIChzZWUKKyAgICAgICAg ICBbMjM5XVNlY3Rpb24gMy44IGZvciBkZXRhaWxzKS4gSWYgYSBjb25uZWN0aW9uIGxvZyBpcyBh Y3RpdmUsIGFuCisgICAgICAgICAgRlRQIHJlY29yZCBpcyB3cml0dGVuIHRvIGl0LiBJZiBLZXJt aXQgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgLTkKKyAgICAgICAgICBjb21tYW5kLWxpbmUgb3B0aW9u IG9yIHdpdGggaXRzIEZUUCBjb21tYW5kLWxpbmUgcGVyc29uYWxpdHksCisgICAgICAgICAgYW5k IHRoZSAtUyAoU3RheSkgb3B0aW9uIHdhcyBub3QgZ2l2ZW4sIEFORCB0aGVyZSBpcyBubyBvdGhl cgorICAgICAgICAgIGFjdGl2ZSBjb25uZWN0aW9uLCB0aGUgRlRQIEJZRSBjb21tYW5kIGFsc28g ZXhpdHMsIGp1c3QgYXMgaXQKKyAgICAgICAgICBkb2VzIG9uIGEgcmVndWxhciBGVFAgY2xpZW50 LiBTeW5vbnltczogRlRQIENMT1NFLCBGVFAgUVVJVCAoYnV0CisgICAgICAgICAgaWYgdGhlIEZU UCBwcmVmaXggaXMgb21pdHRlZCBmcm9tIFFVSVQsIHRoaXMgYmVjb21lcyB0aGUgcmVndWxhcgor ICAgICAgICAgIEtlcm1pdCBRVUlUIGNvbW1hbmQsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gRVhJ VDsgaS5lLiBpdCBjbG9zZXMKKyAgICAgICAgICB0aGUgY29ubmVjdGlvbiBhbmQgZXhpdHMgZnJv bSBLZXJtaXQpLgorCisgICBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGFj aGlldmUgZ3JlYXRlciBjb250cm9sIG92ZXIgdGhlCisgICBjb25uZWN0aW9uIGFuZCBsb2dpbiBw cm9jZXNzOgorCisgICBTRVQgRlRQIEFOT05ZTU9VUy1QQVNTV09SRCB0ZXh0CisgICAgICAgICAg QWxsb3dzIHlvdSB0byBjaG9vc2UgdGhlIHBhc3N3b3JkIHRleHQgdG8gYmUgc2VudCBhdXRvbWF0 aWNhbGx5CisgICAgICAgICAgYnkgS2VybWl0IHdoZW4geW91IG9wZW4gYW4gRlRQIGNvbm5lY3Rp b24gd2l0aCB0aGUgL0FOT05ZTU9VUworICAgICAgICAgIHN3aXRjaC4KKworICAgU0VUIEZUUCBB VVRPTE9HSU4geyBPTiwgT0ZGIH0KKyAgICAgICAgICBJZiB5b3UgZ2l2ZSB0aGlzIGNvbW1hbmQg cHJpb3IgdG8gb3BlbmluZyBhbiBGVFAgY29ubmVjdGlvbiwgaXQKKyAgICAgICAgICBjb250cm9s cyB3aGV0aGVyIEtlcm1pdCB0cmllcyB0byBsb2cgeW91IGluIGF1dG9tYXRpY2FsbHkgYXMKKyAg ICAgICAgICBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MuIE5vcm1hbGx5IE9OLCB3aGlj aCBtZWFucyB0aGUKKyAgICAgICAgICB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIHNlbnQgYXV0 b21hdGljYWxseSAoYW5kIHByb21wdGVkIGZvcgorICAgICAgICAgIGlmIHRoZXkgYXJlIG5vdCB5 ZXQga25vd24pLiBXaGVuIE9GRiwgRlRQIE9QRU4gY29ubmVjdHMgdG8gdGhlCisgICAgICAgICAg c2VydmVyIHdpdGhvdXQgbG9nZ2luZyBpbi4gT0ZGIGlzIGVxdWl2YWxlbnQgdG8gdGhlIC1uCisg ICAgICAgICAgY29tbWFuZC1saW5lIG9wdGlvbiB3aGVuIHVzaW5nIEtlcm1pdCdzIEZUUCBjb21t YW5kLWxpbmUKKyAgICAgICAgICBwZXJzb25hbGl0eS4KKworICAgRlRQIFVTRVIgbmFtZSBbIHBh c3N3b3JkIFsgYWNjb3VudCBdIF0KKyAgICAgICAgICBVc2VkIHRvIGxvZyBpbiB0byBhbiBGVFAg c2VydmVyIHRvIHdoaWNoIGEgY29ubmVjdGlvbiBoYXMgYmVlbgorICAgICAgICAgIG1hZGUgd2l0 aG91dCBhdXRvbG9naW4sIG9yIHdoZW4gYXV0b2xvZ2luIGZhaWxlZC4gSWYgdGhlCisgICAgICAg ICAgcGFzc3dvcmQgaXMgZnVybmlzaGVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0IGlzIHVzZWQ7 IG90aGVyd2lzZQorICAgICAgICAgIHlvdSBhcmUgcHJvbXB0ZWQgZm9yIGEgcGFzc3dvcmQuIEFu IGFjY291bnQgbWF5IGFsc28gYmUKKyAgICAgICAgICBmdXJuaXNoZWQgaWYgcmVxdWlyZWQgYnkg dGhlIHNlcnZlcjsgaXQgaXMgbm90IHJlcXVpcmVkIGJ5CisgICAgICAgICAgS2VybWl0IGFuZCBp cyBub3QgcHJvbXB0ZWQgZm9yIGlmIG9taXR0ZWQuIFN5bm9ueW1zOiBVU0VSLCBGVFAKKyAgICAg ICAgICBMT0dJTi4KKworICAgRlRQIEFDQ09VTlQgdGV4dAorICAgICAgICAgIFNlbmRzIGFuIGFj Y291bnQgbmFtZSB0byBhIHNlcnZlciB0aGF0IHN1cHBvcnRzIGFjY291bnRzLiBJZiB0aGUKKyAg ICAgICAgICBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhY2NvdW50cywgYW4gZXJyb3IgcmVzcG9u c2Ugb2NjdXJzLiBJZgorICAgICAgICAgIHRoZSBzZXJ2ZXIgZG9lcyBzdXBwb3J0IGFjY291bnRz LCB0aGUgYWNjb3VudCBpcyBhY2NlcHRlZCBpZiBpdAorICAgICAgICAgIGlzIHZhbGlkIGFuZCBy ZWplY3RlZCBpZiBpdCBpcyBub3QuIFRoZSBhY2NvdW50IG1pZ2h0IGJlIHVzZWQKKyAgICAgICAg ICBmb3IgY2hhcmdpbmcgcHVycG9zZXMgb3IgaXQgbWlnaHQgYmUgYSBzZWNvbmRhcnkgcGFzc3dv cmQsIG9yIGl0CisgICAgICAgICAgbWlnaHQgYmUgdXNlZCBmb3IgYW55IG90aGVyIHB1cnBvc2Us IHN1Y2ggYXMgYW4gYWNjZXNzIHBhc3N3b3JkCisgICAgICAgICAgZm9yIGEgcGFydGljdWxhciBk aXNrLiBTZXJ2ZXJzIHRoYXQgc3VwcG9ydCBhY2NvdW50cyBtaWdodCBvcgorICAgICAgICAgIG1p Z2h0IG5vdCBhbGxvdyBvciByZXF1aXJlIHRoZSBhY2NvdW50IHRvIGJlIHNlbnQgcHJpb3IgdG8K KyAgICAgICAgICBsb2dpbjsgdXN1YWxseSBpdCBpcyBzZW50IGFmdGVyIGxvZ2luLCBpZiBhdCBh bGwuIFN5bm9ueW06CisgICAgICAgICAgQUNDT1VOVC4KKworICAgRXhhbXBsZToKKworc2V0IGZ0 cCBhdXRvbG9naW4gb2ZmICAgICAgICAgICAgICAgICAgOyBPbmUgdGhpbmcgYXQgYSB0aW1lIHBs ZWFzZQorZnRwIHh5emNvcnAuY29tICAgICAgICAgICAgICAgICAgICAgICAgOyBUcnkgdG8gbWFr ZSB0aGUgY29ubmVjdGlvbgoraWYgZmFpbCBleGl0IDEgRlRQIGNvbm5lY3Rpb24gZmFpbGVkICAg OyBDaGVjayB0aGF0IGl0IHdhcyBtYWRlCitmdHAgdXNlciBvbGdhIHNlY3JldCAgICAgICAgICAg ICAgICAgICA7IE5vdyBsb2cgaW4gdG8gdGhlIHNlcnZlcgoraWYgZmFpbCBleGl0IDEgRlRQIGxv Z2luIGZhaWxlZCAgICAgICAgOyBDaGVjayB0aGF0IGl0IHdvcmtlZAorZnRwIGFjY291bnQgMTAz ODk2ODU0ICAgICAgICAgICAgICAgICAgOyBMb2dpbiBPSyAtIHNlbmQgYWNjb3VudAoraWYgZmFp bCBlY2hvIFdBUk5JTkcgLSBGVFAgQUNDVCBmYWlsZWQgOyBXYXJuIGlmIHByb2JsZW0KKy4uLiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgKGhhdmUgc2Vzc2lvbiBoZXJlKQor YnllICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBMb2cgb3V0IGFuZCBkaXNj b25uZWN0CisKKyAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIHVzZWQgdG8gY29udHJvbCBv ciBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICBGVFAgY29ubmVjdGlvbi4gQW55IHBhcnRp Y3VsYXIgRlRQIHNlcnZlciBkb2VzIG5vdCBuZWNlc3NhcmlseSBzdXBwb3J0CisgICBhbGwgb2Yg dGhlbS4KKworICAgRlRQIFJFU0VUCisgICAgICAgICAgVGVybWluYXRlcyBhIHVzZXIgc2Vzc2lv biBidXQgbGVhdmVzIHRoZSBjb25uZWN0aW9uIG9wZW4sCisgICAgICAgICAgYWxsb3dpbmcgYSBu ZXcgbG9naW4gdmlhIEZUUCBVU0VSLgorCisgICBGVFAgSURMRSBbIG51bWJlciBdCisgICAgICAg ICAgTW9zdCBGVFAgc2VydmVycyBhdXRvbWF0aWNhbGx5IGxvZyB5b3Ugb3V0IGFuZCBhbmQgZGlz Y29ubmVjdAorICAgICAgICAgIHlvdXIgc2Vzc2lvbiBpZiB0aGVyZSBoYXMgYmVlbiBubyBhY3Rp dml0eSBmb3IgYSBjZXJ0YWluIGFtb3VudAorICAgICAgICAgIG9mIHRpbWUuIFVzZSB0aGlzIGNv bW1hbmQgdG8gYXNrIHRoZSBzZXJ2ZXIgdG8gc2V0IGl0cyBpZGxlCisgICAgICAgICAgbGltaXQg dG8gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLiBPbWl0IHRoZSBudW1iZXIgdG8gYXNrIHRo ZQorICAgICAgICAgIHNlcnZlciB0byBpbmZvcm0geW91IG9mIGl0cyBjdXJyZW50IGlkbGUgbGlt aXQuCisKKyAgIEZUUCBTVEFUVVMgWyBmaWxlbmFtZSBdCisgICAgICAgICAgQXNrcyB0aGUgRlRQ IHNlcnZlciB0byBzZW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50CisgICAgICAgICAg c2Vzc2lvbi4gVGhlIHJlc3VsdCBpcyBhIGZyZWUtZm9ybWF0IHJlcG9ydCB0aGF0IG1pZ2h0IGlu Y2x1ZGUKKyAgICAgICAgICBzZXJ2ZXIgaWRlbnRpZmljYXRpb24sIHVzZXJuYW1lIGFuZCBsb2dp biB0aW1lLCBGVFAgcHJvdG9jb2wKKyAgICAgICAgICBzZXR0aW5ncywgYW5kIGZpbGUtdHJhbnNm ZXIgc3RhdGlzdGljcy4gSWYgYSBmaWxlbmFtZSBpcyBnaXZlbiwKKyAgICAgICAgICB0aGUgc2Vy dmVyIGlzIHN1cHBvc2VkIHRvIHNlbmQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisg ICAgICAgICAgZmlsZS4KKworICAgRlRQIFNZU1RFTQorICAgICAgICAgIEFza3MgdGhlIEZUUCBz ZXJ2ZXIgdG8gaWRlbnRpZnkgaXRzIG9wZXJhdGluZyBzeXN0ZW0gKExpc3RlZCBpbgorICAgICAg ICAgIEludGVybmV0IEFzc2lnbmVkIE51bWJlcnMsIE9wZXJhdGluZyBTeXN0ZW0gTmFtZXMpLiBF eGFtcGxlczoKKyAgICAgICAgICBVTklYLCBWTVMsIFZNL0NNUywgV0lORE9XUy1OVC4gVW5mb3J0 dW5hdGVseSBtYW55IHZhcmlhdGlvbnMgYXJlCisgICAgICAgICAgYWxsb3dlZCAoZS5nLiBMSU5V WC0yLjAsIExJTlVYLTIuMiwgRlJFRUJTRCwgVUxUUklYLCBldGMsCisgICAgICAgICAgaW5zdGVh ZCBvZiBVTklYOyBXSU5ET1dTLU5ULTMsIFdJTkRPV1MtTlQtMy41LCBXSU5ET1dTLU5ULTMuNTEs CisgICAgICAgICAgV0lORE9XUy1OVC00LCBldGMpLiBUaGUgcmVwb3J0IG1pZ2h0IGFsc28gaW5j bHVkZSBvdGhlcgorICAgICAgICAgIGluZm9ybWF0aW9uIGxpa2UgIlR5cGUgTDgiLCAiVHlwZSBJ Iiwgb3IgIlR5cGUgQSIsIGluZGljYXRpbmcKKyAgICAgICAgICB0aGUgZmlsZS10cmFuc2ZlciBt b2RlLgorCisgICBGVFAgSEVMUCBbIGtleXdvcmQgWyBrZXl3b3JkIFsgLi4uIF0gXQorICAgICAg ICAgIEFza3MgdGhlIHNlcnZlciB0byBsaXN0IHRoZSBjb21tYW5kcyBpdCBzdXBwb3J0cy4gVGhl IHJlc3BvbnNlCisgICAgICAgICAgaXMgdXN1YWxseSBjcnlwdGljLCBsaXN0aW5nIEZUUCBjb21t YW5kIG1uZW1vbmljcywgbm90IHRoZQorICAgICAgICAgIGNvbW1hbmRzIHVzZWQgYnkgdGhlIGNs aWVudCAoc2luY2UgdGhlIHNlcnZlciBoYXMgbm8gd2F5IG9mCisgICAgICAgICAga25vd2luZyBh bnl0aGluZyBhYm91dCB0aGUgY2xpZW50J3MgdXNlciBpbnRlcmZhY2UpLiBGb3IKKyAgICAgICAg ICBleGFtcGxlLCB0aGUgUFVUIGNvbW1hbmQgaXMgU1RPUiBpbiBGVFAgcHJvdG9jb2wuIElmIGEg a2V5d29yZAorICAgICAgICAgIGlzIGdpdmVuLCB3aGljaCBzaG91bGQgYmUgYW4gRlRQIHByb3Rv Y29sIGNvbW1hbmQsCisgICAgICAgICAgc2xpZ2h0bHktbW9yZS0gZGV0YWlsZWQgaGVscCBpcyBn aXZlbiBhYm91dCB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgIGNvbW1hbmQgKGlmIHRoZSBG VFAgc2VydmVyIHN1cHBvcnRzIHRoaXMgZmVhdHVyZSkuIEV4YW1wbGVzOgorICAgICAgICAgICJm dHAgaGVscCIsICJmdHAgaGVscCBzdG9yIi4KKworICAgRlRQIFNJVEUgdGV4dAorICAgICAgICAg IChBZHZhbmNlZCkgU2VuZHMgYW4gRlRQIFNJVEUgKHNpdGUtc3BlY2lmaWMpIGNvbW1hbmQuIFVz dWFsbHkKKyAgICAgICAgICB0aGlzIG1lYW5zIHRoYXQgdGhlIEZUUCBzZXJ2ZXIgaXMgYXNrZWQg dG8gcnVuIGFuIGV4dGVybmFsCisgICAgICAgICAgY29tbWFuZCB3aXRoIHRoZSBnaXZlbiBhcmd1 bWVudHMuIFlvdSBtaWdodCBiZSBhYmxlIHRvIGZpbmQgb3V0CisgICAgICAgICAgd2hhdCBTSVRF IGNvbW1hbmRzIGFyZSBhdmFpbGFibGUgYnkgc2VuZGluZyAiZnRwIGhlbHAgc2l0ZSIgdG8KKyAg ICAgICAgICB0aGUgc2VydmVyLCBidXQgaW4gZ2VuZXJhbCB0aGUgYXZhaWxhYmlsaXR5IG9mIGFu ZCByZXNwb25zZSB0bworICAgICAgICAgIFNJVEUgY29tbWFuZHMgaXMgKG5vdCBzdXJwcmlzaW5n bHkpIHNpdGUgc3BlY2lmaWMuCisKKyAgIEZUUCBRVU9URSB0ZXh0CisgICAgICAgICAgKEFkdmFu Y2VkKSBTZW5kcyBhbiBGVFAgY29tbWFuZCBpbiBGVFAgcHJvdG9jb2wgZm9ybWF0LiBVc2UgdGhp cworICAgICAgICAgIGNvbW1hbmQgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgc2VydmVyIHRoYXQg dGhlIEZUUCBjbGllbnQgbWlnaHQKKyAgICAgICAgICBub3Qga25vdyBhYm91dC4KKworICAgU0hP VyBGVFAKKyAgICAgICAgICBMaXN0cyBjbGllbnQgKEtlcm1pdCkgRlRQIHNldHRpbmdzIGFuZCBp bmZvcm1hdGlvbi4gQWxzbyBTSE9XCisgICAgICAgICAgQ09OTkVDVElPTiwgU0hPVyBDT01NVU5J Q0FUSU9OUy4KKworICAgSEVMUCBGVFAgWyBrZXl3b3JkIF0KKyAgICAgICAgICBBc2tzIEtlcm1p dCB0byBsaXN0IGFuZCBkZXNjcmliZSBpdHMgYnVpbHQtaW4gRlRQIGNvbW1hbmRzLgorCisgICBI RUxQIFNFVCBGVFAgWyBrZXl3b3JkIF0KKyAgICAgICAgICBBc2tzIEtlcm1pdCB0byBsaXN0IGFu ZCBkZXNjcmliZSBpdHMgYnVpbHQtaW4gU0VUIEZUUCBjb21tYW5kcy4KKworICAgWyBbMjQwXVRv cCBdIFsgWzI0MV1GVFAgVG9wIF0gWyBbMjQyXUMtS2VybWl0IEhvbWUgXSBbIFsyNDNdS2VybWl0 IEhvbWUKKyAgIF0KKworMy4xLjUuIE1ha2luZyBQcm94eSBDb25uZWN0aW9ucworCisgICBUaGUg c2ltcGxpc3QgZm9ybSBvZiBmaXJld2FsbCB0cmF2ZXJzYWwgaXMgdGhlIEhUVFAgQ09OTkVDVCBj b21tYW5kLgorICAgVGhlIENPTk5FQ1QgY29tbWFuZCB3YXMgaW1wbGVtZW50ZWQgdG8gYWxsb3cg YSBwdWJsaWMgd2ViIHNlcnZlciB3aGljaAorICAgdXN1YWxseSByZXNpZGVzIG9uIHRoZSBib3Vu ZGFyeSBiZXR3ZWVuIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUgbmV0d29ya3MKKyAgIHRvIGZvcndh cmQgSFRUUCByZXF1ZXN0cyBmcm9tIGNsaWVudHMgb24gdGhlIHByaXZhdGUgbmV0d29yayB0byBw dWJsaWMKKyAgIHdlYiBzaXRlcy4gSW4gb3JkZXIgdG8gYWxsb3cgc2VjdXJlIHdlYiBjb25uZWN0 aW9ucyB0byBiZSBlc3RhYmxpc2hlZCwKKyAgIHRoZSBDT05ORUNUIGNvbW1hbmQgd29ya3MgYnkg YXV0aGVudGljYXRpbmcgdGhlIGNsaWVudCB3aXRoIGEKKyAgIHVzZXJuYW1lL3Bhc3N3b3JkIGFu ZCB0aGVuIGVzdGFibGlzaGluZyBhIHR1bm5lbCB0byB0aGUgZGVzaXJlZCBob3N0LgorCisgICBN YW55IHdlYiBzZXJ2ZXJzIHN1cHBvcnQgdGhlIENPTk5FQ1QgY29tbWFuZCBhbmQgaXQgY2FuIGJl IGNvbmZpZ3VyZWQKKyAgIHRvIGFsbG93IG91dGdvaW5nIGNvbm5lY3Rpb25zIHRvIGF1dGhlbnRp Y2F0ZWQgdXNlciB0byBhbnkgVENQL0lQCisgICBob3N0bmFtZS9wb3J0IGNvbWJpbmF0aW9uIGFj Y2Vzc2libGUgdG8gdGhlIHdlYiBzZXJ2ZXIuIFRoZSBsaW1pdGF0aW9ucworICAgb2YgSFRUUCBD T05ORUNUIGlzIHRoYXQgaXQgY2FuIG9ubHkgYmUgdXNlZCBmb3Igb3V0Z29pbmcgY29ubmVjdGlv bnMKKyAgIGZvciBwcm90b2NvbHMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgVENQL0lQLiBQ cm90b2NvbHMgc3VjaCBhcworICAgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gdGhhdCB1c2UgVURQ L0lQIGNhbm5vdCBiZSB0dW5uZWxlZCB1c2luZyBIVFRQCisgICBDT05ORUNULgorCisgICBLZXJt aXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHVzZSBvZiBIVFRQIENPTk5FQ1QgcHJveHkgc2Vy dmljZXMgd2l0aAorICAgdGhlIGNvbW1hbmQ6CisKKyAgU0VUIFRDUCBIVFRQLVBST1hZIFsvVVNF Ujp1c2VybmFtZSAvUEFTU1dPUkQ6cGFzc3dvcmRdIGhvc3RuYW1lL2lwLWFkZHJlc3NbOnBvCity dF0KKworICAgV2hlbiBhIHBvcnQgaXMgbm90IHNwZWNpZmllZCB0aGUgZGVmYXVsdCBwb3J0IGNv bmZpZ3VyZWQgb24gdGhlIEhUVFAKKyAgIHNlcnZlciBpcyB1c2VkLiBUaGlzIGlzIGZyZXF1ZW50 bHkgcG9ydCA0NDMuIFdoZW4gYSBob3N0bmFtZSBpcworICAgc3BlY2lmaWVkLCBpdCBpcyByZXNv bHZlZCB1c2luZyB0aGUgRE5TIGF2YWlsYWJsZSB0byB0aGUgd2ViIHNlcnZlci4KKworMy4yLiBN YWtpbmcgU2VjdXJlIEZUUCBDb25uZWN0aW9ucworCisgICBBbHNvIHNlZTogWzI0NF1BY2Nlc3Np bmcgSUJNIEluZm9ybWF0aW9uIEV4Y2hhbmdlIHdpdGggS2VybWl0LgorCisgICBJbiB0aGUgcHJl dmlvdXMgc2VjdGlvbiwgeW91IGNhbiBzZWUgc2V2ZXJhbCBleGFtcGxlcyBvZiB0cmFkaXRpb25h bAorICAgaW5zZWN1cmUgYXV0aGVudGljYXRpb246IHVzZXJuYW1lIGFuZCBwYXNzd29yZCBzZW50 IGFjcm9zcyB0aGUgbmV0d29yaworICAgaW4gY2xlYXIgdGV4dC4gT2YgY291cnNlIHRoaXMgaXMg YmFkIHByYWN0aWNlIG9uIGF0IGxlYXN0IHR3byBjb3VudHM6CisgICAoMSkgc3RvcmluZyBwYXNz d29yZHMgaW4gZmlsZXMgKHN1Y2ggYXMgc2NyaXB0IGZpbGVzKSBnaXZlcyBhY2Nlc3MgdG8KKyAg IHRoZSB0YXJnZXQgc3lzdGVtcyB0byBhbnlib2R5IHdobyBjYW4gb2J0YWluIHJlYWQgYWNjZXNz IHRvIHlvdXIKKyAgIHNjcmlwdHM7IGFuZCAoMikgc2VuZGluZyB0aGlzIGluZm9ybWF0aW9uIG92 ZXIgdGhlIG5ldHdvcmsgbGVhdmVzIGl0CisgICBvcGVuIHRvIGludGVyY2VwdGlvbiBieSBuZXR3 b3JrIHNuaWZmZXJzIG9yIGNvbXByb21pc2VkIGhvc3RzLgorCisgICBCZWNhdXNlIG9mIHRoZSBp bmNyZWFzaW5nIG5lZWQgZm9yIHNlY3VyaXR5IG9uIHRoZSBJbnRlcm5ldCwgRlRQCisgICBzZXJ2 ZXJzIGFyZSBiZWdpbm5pbmcgdG8gYXBwZWFyIHRoYXQgb2ZmZXIgc2VjdXJlIGZvcm1zIG9mCisg ICBhdXRoZW50aWNhdGlvbiwgaW4gd2hpY2ggbm8gaW5mb3JtYXRpb24gaXMgc2VudCBvdmVyIHRo ZSBuZXR3b3JrIHRoYXQKKyAgIHdvdWxkIGFsbG93IGFueW9uZSB3aG8gaW50ZXJjZXB0cyBpdCB0 byB1c3VycCB5b3VyIGlkZW50aXR5IGFuZCBnYWluCisgICB5b3VyIGFjY2VzcyByaWdodHMuCisK KyAgIEtlcm1pdCBwcm92aWRlcyBhbiBlcXVpdmFsZW50IGZvcm0gb2YgRlRQIHNlY3VyaXR5IGZv ciBlYWNoIHR5cGUgb2YKKyAgIElFVEYgc3RhbmRhcmQgc2VjdXJpdHkgaW1wbGVtZW50ZWQgaW4g VGVsbmV0LiBUaGVzZSBpbmNsdWRlCisgICBHU1NBUEktS0VSQkVST1M1LCBLRVJCRVJPUzQsIFNl Y3VyZSBSZW1vdGUgUGFzc3dvcmQgKFNSUCksIGFuZAorICAgVHJhbnNwb3J0IExheWVyIFNlY3Vy aXR5IChTU0wgYW5kIFRMUykuIEl0IGRvZXMgbm90IHByZXNlbnRseSBpbmNsdWRlCisgICBTU0wg dHVubmVsaW5nIG5vciBhbnkgZm9ybSBvZiBTU0ggdjEgb3IgdjIuIFdoZW4gS2VybWl0IGlzIGJ1 aWx0IHdpdGgKKyAgIHRoZSBuZWNlc3NhcnkgbGlicmFyaWVzLCBzZWN1cmUgRlRQIGNvbm5lY3Rp b25zIGFyZSBhdHRlbXB0ZWQgYnkKKyAgIGRlZmF1bHQsIGluIHdoaWNoIGFsbCBjb25uZWN0aW9u cyBhcmUgYXV0aGVudGljYXRlZCBhbmQgdGhlIGNvbW1hbmQgYW5kCisgICBkYXRhIGNoYW5uZWxz IGFyZSBwcml2YXRlLgorCisgICBUaGUgdXNlIG9mIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0 aW9uIGZvciBGVFAgY29ubmVjdGlvbnMgY2FuIGJlCisgICBhZGp1c3RlZCB3aXRoIHRoZSBjb21t YW5kcyBsaXN0ZWQgYmVsb3csIHdoaWNoIGFyZSBhdmFpbGFibGUgb25seSBpZgorICAgeW91ciB2 ZXJzaW9uIG9mIEtlcm1pdCB3YXMgYnVpbHQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBzZWN1cml0 eQorICAgb3B0aW9ucyBhbmQgbGlicmFyaWVzOgorCisgICBTRVQgRlRQIEFVVEhUWVBFIHsgQVVU T01BVElDLCBHU1NBUEktS1JCNSwgS0VSQkVST1M0LCBTUlAsIFNTTCwgVExTIH0KKyAgICAgICAg ICBTcGVjaWZpZXMgYW4gb3JkZXJlZCBsaXN0IG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgdG8g YmUKKyAgICAgICAgICBhdHRlbXB0ZWQgd2hlbiBBVVRPQVVUSEVOVElDQVRJT04gaXMgT04uIFRo ZSBkZWZhdWx0IGxpc3QgaXM6CisgICAgICAgICAgR1NTQVBJLUtSQjUsIFNSUCwgS0VSQkVST1Nf VjQsIFRMUywgU1NMLiBJZiBub25lIG9mIHRoZSBzZWxlY3RlZAorICAgICAgICAgIG1ldGhvZHMg YXJlIHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLCBhbiBpbnNlY3VyZSBsb2dpbiBpcyB1c2VkCisg ICAgICAgICAgYXMgYSBmYWxsYmFjay4gTm90ZSwgYnkgdGhlIHdheSwgdGhhdCBTU0wgb3IgVExT IGNhbiBiZSB1c2VkIHRvCisgICAgICAgICAgc2VjdXJlIGFuIGFub255bW91cyBjb25uZWN0aW9u LgorCisgICBTRVQgRlRQIEFVVE9BVVRIRU5USUNBVElPTiB7IE9OLCBPRkYgfQorICAgICAgICAg IFRlbGxzIHdoZXRoZXIgYXV0aGVudGljYXRpb24gc2hvdWxkIGJlIG5lZ290aWF0ZWQgYnkgdGhl IEZUUAorICAgICAgICAgIE9QRU4gY29tbWFuZC4gRGVmYXVsdCBpcyBPTi4gVXNlIFNFVCBGVFAg QVVUT0FVVEhFTlRJQ0FUSU9OIE9GRgorICAgICAgICAgIHRvIGZvcmNlIGEgY2xlYXItdGV4dCwg dW5lbmNyeXB0ZWQgY29ubmVjdGlvbiB0byBGVFAgc2VydmVycworICAgICAgICAgIChzdWNoIGFz IHRoZSBvbmUgYXQgdGhlIEtlcm1pdCBGVFAgc2l0ZSkgdGhhdCBub3JtYWxseSB3b3VsZCB0cnkK KyAgICAgICAgICB0byBuZWdvdGlhdGUgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0 aW9uLgorCisgICBTRVQgRlRQIEFVVE9FTkNSWVBUSU9OIHsgT04sIE9GRiB9CisgICAgICAgICAg VGVsbHMgd2hldGhlciBlbmNyeXB0aW9uIChwcml2YWN5KSBzaG91bGQgYmUgbmVnb3RpYXRlZCBi eSB0aGUKKyAgICAgICAgICBGVFAgT1BFTiBjb21tYW5kLCB3aGljaCBjYW4gaGFwcGVuIG9ubHkg aWYgc2VjdXJlIGF1dGhlbnRpY2F0aW9uCisgICAgICAgICAgaXMgYWxzbyBuZWdvdGlhdGVkLiBE ZWZhdWx0IGlzIE9OLgorCisgICBTRVQgRlRQIEFVVE9MT0dJTiB7IE9OLCBPRkYgfQorICAgICAg ICAgIFRlbGxzIEtlcm1pdCB3aGV0aGVyIHRvIHRyeSBsb2dnaW5nIGluIGF1dG9tYXRpY2FsbHkg d2hlbiB5b3UKKyAgICAgICAgICBtYWtlIGFuIEZUUCBjb25uZWN0aW9uLCBhcyBvcHBvc2VkIHRv IGxldHRpbmcgeW91IGRvIGl0ICJieQorICAgICAgICAgIGhhbmQiIHdpdGggdGhlIEZUUCBVU0VS IGNvbW1hbmQuCisKKyAgIFNFVCBGVFAgQ09NTUFORC1QUk9URUNUSU9OLUxFVkVMIHsgQ0xFQVIs IENPTkZJREVOVElBTCwgUFJJVkFURSwgU0FGRSB9CisgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUg bGV2ZWwgb2YgcHJvdGVjdGlvbiBhcHBsaWVkIHRvIHRoZSBjb21tYW5kCisgICAgICAgICAgY2hh bm5lbDoKKworICBDTEVBUiAgICAgICAgIERhdGEgaXMgc2VudCBpbiBwbGFpbnRleHQgYW5kIG5v dCBwcm90ZWN0ZWQgYWdhaW5zdCB0YW1wZXJpbmcuCisgIENPTkZJREVOVElBTCAgRGF0YSBpcyBl bmNyeXB0ZWQgYnV0IG5vdCBwcm90ZWN0ZWQgYWdhaW5zdCB0YW1wZXJpbmcuCisgIFBSSVZBVEUg ICAgICAgRGF0YSBpcyBlbmNyeXB0ZWQgYW5kIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHRhbXBlcmlu Zy4KKyAgU0FGRSAgICAgICAgICBEYXRhIGlzIHNlbnQgaW4gcGxhaW50ZXh0IGJ1dCBwcm90ZWN0 ZWQgYWdhaW5zdCB0YW1wZXJpbmcuCisKKyAgICAgICAgICBUaGUgZGVmYXVsdCBpcyBQUklWQVRF LgorCisgICBTRVQgRlRQIENSRURFTlRJQUwtRk9SV0FSRElORyB7IE9OLCBPRkYgfQorICAgICAg ICAgIFRlbGxzIHdoZXRoZXIgZW5kLXVzZXIgY3JlZGVudGlhbHMgYXJlIHRvIGJlIGZvcndhcmRl ZCB0byB0aGUKKyAgICAgICAgICBzZXJ2ZXIgaWYgc3VwcG9ydGVkIGJ5IHRoZSBhdXRoZW50aWNh dGlvbiBtZXRob2QgKEdTU0FQSS1LUkI1CisgICAgICAgICAgb25seSkuIFRoaXMgaXMgb2Z0ZW4g cmVxdWlyZWQgdG8gYWxsb3cgYWNjZXNzIHRvIGRpc3RyaWJ1dGVkCisgICAgICAgICAgZmlsZSBz eXN0ZW1zIChlLmcuIEFGUy4pCisKKyAgIFNFVCBGVFAgREFUQS1QUk9URUNUSU9OLUxFVkVMIHsg Q0xFQVIsIENPTkZJREVOVElBTCwgUFJJVkFURSwgU0FGRSB9CisgICAgICAgICAgVGVsbHMgd2hh dCBsZXZlbCBvZiBwcm90ZWN0aW9uIGlzIGFwcGxpZWQgdG8gc3Vic2VxdWVudCBkYXRhCisgICAg ICAgICAgY2hhbm5lbHMuIFRoZSBtZWFuaW5ncyBvZiB0aGUgcHJvdGVjdGlvbi1sZXZlbCBrZXl3 b3JkcyBhcmUgdGhlCisgICAgICAgICAgc2FtZSBhcyBmb3IgU0VUIEZUUCBDT01NQU5ELVBST1RF Q1RJT04tTEVWRUwuIFRoZSBkZWZhdWx0IGlzCisgICAgICAgICAgUFJJVkFURS4KKworICAgU0VU IEZUUCBTUlAgQ0lQSEVSIG5hbWUKKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIGNpcGhlciB0byBi ZSB1c2VkIGZvciBlbmNyeXB0aW9uIHdoZW4gU1JQCisgICAgICAgICAgYXV0aGVudGljYXRpb24g aXMgaW4gdXNlLiBUaGUgbGlzdCBvZiBwb3NzaWJsZSBjaG9pY2VzIGlzCisgICAgICAgICAgY29t cHV0ZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgbG9jYWwgU1JQIGxpYnJhcnkg YW5kCisgICAgICAgICAgaW5jbHVkZXMgTk9ORSBwbHVzIHplcm8gb3IgbW9yZSBvZiB0aGUgZm9s bG93aW5nOgorCisgIEJMT1dGSVNIX0VDQiAgICAgICAgQ0FTVDVfRUNCICAgICAgICAgIERFU19F Q0IgICAgICAgICAgREVTM19FQ0IKKyAgQkxPV0ZJU0hfQ0JDICAgICAgICBDQVNUNV9DQkMgICAg ICAgICAgREVTX0NCQyAgICAgICAgICBERVMzX0NCQworICBCTE9XRklTSF9DRkI2NCAgICAgIENB U1Q1X0NGQjY0ICAgICAgICBERVNfQ0ZCNjQgICAgICAgIERFUzNfQ0ZCNjQKKyAgQkxPV0ZJU0hf T0ZCNjQgICAgICBDQVNUNV9PRkI2NCAgICAgICAgREVTX09GQjY0ICAgICAgICBERVMzX09GQjY0 CisKKyAgICAgICAgICBUaGUgZGVmYXVsdCBpcyBERVMzX0VDQi4KKworICAgU0VUIEZUUCBTUlAg SEFTSCBuYW1lCisgICAgICAgICAgU3BlY2lmaWVzIHRoZSBoYXNoIHRvIGJlIHVzZWQgZm9yIGRh dGEgcHJvdGVjdGlvbiB3aGVuIFNSUAorICAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGlzIGluIHVz ZS4gVGhlIGNob2ljZXMgYXJlIE1ENSBhbmQgU0hBLiBUaGUKKyAgICAgICAgICBkZWZhdWx0IGlz IFNIQS4KKworICAgQ29tbWFuZC1saW5lIG9wdGlvbnM6CisKKyAgIC1rIG5hbWUKKyAgICAgICAg ICBTcGVjaWZpZXMgdGhlIHJlYWxtIHRvIGJlIHVzZWQgd2l0aCBLZXJiZXJvcyA0IGF1dGhlbnRp Y2F0aW9uICg9CisgICAgICAgICAgU0VUIEFVVEggSzQgUkVBTE0gbmFtZSkuCisKKyAgIC1mCisg ICAgICAgICAgRW5hYmxlcyBmb3J3YXJkaW5nIG9mIEtlcmJlcm9zIDUgY3JlZGVudGlhbHMgdG8g dGhlIGhvc3Qgd2hlbgorICAgICAgICAgIHVzaW5nIEdTU0FQSSBhdXRoZW50aWNhdGlvbiAoPSBT RVQgQVVUSCBLNSBGT1JXQVJEQUJMRSBPTikuCisKKyAgIC14CisgICAgICAgICAgRW5hYmxlcyBh dXRvZW5jcnlwdGlvbiAoPSBTRVQgRlRQIEFVVE9FTkNSWVBUSU9OIE9OKS4KKworICAgLWMgY2lw aGVyCisgICAgICAgICAgU3BlY2lmaWVzIHRoZSBraW5kIG9mIGNpcGhlciB0byBiZSB1c2VkIGZv ciBlbmNyeXB0aW9uIHdpdGggU1JQCisgICAgICAgICAgYXV0aGVudGljYXRpb24uIEVxdWl2YWxl bnQgdG8gU0VUIEZUUCBTUlAgQ0lQSEVSLCB3aXRoIHRoZSBzYW1lCisgICAgICAgICAgY2hvaWNl cy4gSWYgdGhpcyBvcHRpb24gaXMgbm90IGdpdmVuLCBDQVNUNV9DQkMgaXMgdXNlZC4KKworICAg LUggaGFzaAorICAgICAgICAgIFNwZWNpZmllcyB0aGUgaGFzaCB0byBiZSB1c2VkIGZvciBlbmNy eXB0aW9uIHdpdGggU1JQCisgICAgICAgICAgYXV0aGVudGljYXRpb24uIEVxdWl2YWxlbnQgdG8g U0VUIEZUUCBTUlAgSEFTSCwgd2l0aCB0aGUgc2FtZQorICAgICAgICAgIGNob2ljZXMuIElmIHRo aXMgb3B0aW9uIGlzIG5vdCBnaXZlbiwgU0hBIGlzIHVzZWQuCisKKyAgIC16IGRlYnVnCisgICAg ICAgICAgVHVybnMgb24gU1NML1RMUyBkZWJ1Z2dpbmcuCisKKyAgIC16IHNlY3VyZQorICAgICAg ICAgIFJlcXVpcmVzIHNlY3VyZSBjb25uZWN0aW9uLgorCisgICAteiBjZXJ0c29rCisgICAgICAg ICAgU2F5cyB0byBhY2NlcHQgYWxsIGNlcnRpZmljYXRlcyB3aXRob3V0IGNoZWNraW5nIHZhbGlk aXR5LgorCisgICAteiB2ZXJpZnk9bgorICAgICAgICAgIFNldHMgY2VydGlmaWNhdGUgdmVyaWZp Y2F0aW9uIG1vZGUgdG8gdGhlIGdpdmVuIG51bWJlciwgbjoKKyAgICAgICAgICAgIDAgPSBubyB2 ZXJpZmljYXRpb24KKyAgICAgICAgICAgIDEgPSB2ZXJpZnkgY2VydGlmaWNhdGUgaWYgcHJlc2Vu dGVkCisgICAgICAgICAgICAyID0gcmVxdWlyZSB2ZXJpZmljYXRpb24gb2YgY2VydGlmaWNhdGUK KworICAgLXogY2VydD1maWxlbmFtZQorICAgICAgICAgIFNwZWNpZmllcyBhIGZpbGUgY29udGFp bmluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZSB0byBiZSBwcmVzZW50ZWQKKyAgICAgICAgICB0byB0 aGUgRlRQIHNlcnZlci4KKworICAgLXoga2V5PWZpbGVuYW1lCisgICAgICAgICAgU3BlY2lmaWVz IGEgZmlsZSBjb250YWluaW5nIGEgcHJpdmF0ZSBrZXkgbWF0Y2hpbmcgdGhlIGNsaWVudAorICAg ICAgICAgIGNlcnRpZmljYXRlLgorCisgICAteiAha3JiNAorICAgICAgICAgIChub2tyYjQpIERp c2FibGVzIHRoZSB1c2Ugb2YgS2VyYmVyb3MgNC4KKworICAgLXogIWdzcworICAgLXogbm9nc3MK KyAgICAgICAgICBEaXNhYmxlcyB0aGUgdXNlIG9mIEdTU0FQSSAtIEtlcmJlcm9zIDUuCisKKyAg IC16ICFzcnAKKyAgIC16IG5vc3JwCisgICAgICAgICAgRGlzYWJsZXMgdXNlIG9mIFNSUC4KKwor ICAgLXogIXNzbAorICAgLXogbm9zc2wKKyAgICAgICAgICBEaXNhYmxlcyB0aGUgdXNlIG9mIFNT TC4KKworICAgLXogIXRscworICAgLXogbm90bHMKKyAgICAgICAgICBEaXNhYmxlcyB0aGUgdXNl IG9mIFRMUy4KKworICAgQ2F1dGlvbjogSWYgeW91ciBGVFAgY29ubmVjdGlvbiBpcyBzZWN1cmVk IHZpYSBBVVRIIFRMUywgaXQgaXMgbm90CisgICBwb3NzaWJsZSB0byBpbnRlcnJ1cHQgYSBmaWxl IHRyYW5zZmVyLiBUaGlzIGlzIGEgbGltaXRhdGlvbiBvZiBhbGwKKyAgIGtub3duIEZUUCBzZXJ2 ZXJzIHRoYXQgc3VwcG9ydCBBVVRIIFRMUy4KKworICAgTm90ZSB0aGF0IHdoZW4gdXNpbmcgY2Vy dGFpbiBzZWN1cml0eSBtZXRob2RzLCBzdWNoIGFzIFNTTCBvciBUTFMsIHlvdQorICAgbWF5IGJl IHByb21wdGVkIHRvIGNvbmZpcm0gb3IgdmVyaWZ5IGNlcnRhaW4gYWN0aW9ucyBvciBjb25kaXRp b25zLCBmb3IKKyAgIGV4YW1wbGUsIHdoZXRoZXIgdG8gYWNjZXB0IHNlbGYtc2lnbmVkIGNlcnRp ZmljYXRlcy4gVGhpcyBjYW4gaW50ZXJmZXJlCisgICB3aXRoIHVuYXR0ZW5kZWQgb3BlcmF0aW9u IG9mIHNjcmlwdHM7IHNlZSBbMjQ1XVNlY3Rpb24gMy4xMC4KKworICAgWyBbMjQ2XVRvcCBdIFsg WzI0N11GVFAgVG9wIF0gWyBbMjQ4XUMtS2VybWl0IEhvbWUgXSBbIFsyNDldS2VybWl0IEhvbWUK KyAgIF0KKworMy4zLiBTZXR0aW5nIEZUUCBQcmVmZXJlbmNlcworCisgICBGVFAgcHJlZmVyZW5j ZXMgY2FuIGJlIHNldCBnbG9iYWxseSBhbmQgcGVyc2lzdGVudGx5IHdpdGggdGhlIGNvbW1hbmRz CisgICBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOyBtYW55IG9mIHRoZXNlIGNhbiBhbHNvIGJl IG92ZXJyaWRkZW4gb24gYQorICAgcGVyLWNvbW1hbmQgYmFzaXMgd2l0aCBzd2l0Y2hlcyB0aGF0 IGhhdmUgdGhlIHNhbWUgbmFtZS4KKworMy4zLjEuIExvZ3MsIE1lc3NhZ2VzLCBhbmQgT3RoZXIg RmVlZGJhY2sKKworICAgWW91IGNhbiBjb250cm9sIHRoZSBhbW91bnQgb2YgZmVlZGJhY2sgcmVj ZWl2ZWQgZnJvbSB5b3VyIEZUUCBzZXNzaW9uCisgICB3aXRoIHRoZSBjb21tYW5kcyBpbiB0aGlz IHNlY3Rpb24uIEZpcnN0LCB5b3UgY2FuIGNyZWF0ZSBhIGxvZyBvZiB5b3VyCisgICBGVFAgdHJh bnNmZXJzIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworICAgU0VUIFRSQU5TQUNUSU9O LUxPRyB7IFZFUkJPU0UsIEZUUCwgQlJJRUYgfQorICAgICAgICAgIFNlbGVjdHMgdGhlIGxvZyBm b3JtYXQuIFZFUkJPU0UgaXMgdGhlIGRlZmF1bHQsIGFuZCBpcyBkZXNjcmliZWQKKyAgICAgICAg ICBpbiBbMjUwXXRoZSBtYW51YWwuIEZUUCBjaG9vc2VzIGEgV1UtRlRQRCBmb3JtYXQsIHRoZSBz YW1lIGFzIGlzCisgICAgICAgICAgdXNlZCBieSB0aGUgcG9wdWxhciBGVFAgc2VydmVyLiBCUklF RiBjcmVhdGVzIHBlci1maWxlIHJlY29yZHMKKyAgICAgICAgICBpbiBjb21tYS1zZXBhcmF0ZWQt bGlzdCBmb3JtYXQuIEZvciBncmVhdGVyIGRldGFpbCwgc2VlCisgICAgICAgICAgWzI1MV1TZWN0 aW9uIDQuMTcgb2YgdGhlIFsyNTJdQy1LZXJtaXQgNy4wIFVwZGF0ZSBOb3Rlcy4KKworICAgTE9H IFRSQU5TQUNUSU9OUyBmaWxlbmFtZQorICAgICAgICAgIFJlY29yZHMgRlRQIChvciBLZXJtaXQs IG9yIGFueSBvdGhlciBwcm90b2NvbCkgdXBsb2FkcyBhbmQKKyAgICAgICAgICBkb3dubG9hZHMg aW4gdGhlIGdpdmVuIGZpbGUgdXNpbmcgdGhlIGZvcm1hdCBzZWxlY3RlZCBieSB0aGUKKyAgICAg ICAgICBtb3N0IHJlY2VudCBTRVQgVFJBTlNBQ1RJT04tTE9HIGNvbW1hbmQsIGlmIGFueSwgb3Ig ZWxzZSB0aGUKKyAgICAgICAgICBkZWZhdWx0IGZvcm1hdC4KKworICAgRlRQIHNjcmVlbiBtZXNz YWdlcyBhbmQgZGlzcGxheXMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZworICAgY29t bWFuZHM6CisKKyAgIFNFVCBUUkFOU0ZFUiBESVNQTEFZIHsgRlVMTFNDUkVFTiwgQ1JULCBTRVJJ QUwsIEJSSUVGLCBOT05FLCBPRkYgfQorICAgICAgICAgIEZUUCB0cmFuc2ZlcnMgdXNlIEtlcm1p dCdzIG5vcm1hbCBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgc3R5bGVzLgorICAgICAgICAgIFVzZSB0 aGlzIGNvbW1hbmQgdG8gY2hvb3NlIHRoZSBkZXNpcmVkIGZvcm1hdDsgdGhlIGRlZmF1bHQgb24K KyAgICAgICAgICBtb3N0IHBsYXRmb3JtcyBpcyBGVUxMU0NSRUVOLiBUaGUgZGlzcGxheSBpcyBh dXRvbWF0aWNhbGx5CisgICAgICAgICAgZGlzYWJsZWQgaWYgS2VybWl0IGlzIHJ1bm5pbmcgaW4g dGhlIGJhY2tncm91bmQgb3IgaW4gYmF0Y2guCisgICAgICAgICAgQlJJRUYgaXMgYWx3YXlzIHVz ZWQgZm9yIGNvbW1hbmQtbGluZSBpbml0aWF0ZWQgdHJhbnNmZXJzCisgICAgICAgICAgKHVubGVz cyBzdXBwcmVzc2VkIGJ5IC1xKS4gV2hpbGUgYSBmaWxlLXRyYW5zZmVyIGlzIGluIHByb2dyZXNz LAorICAgICAgICAgIHlvdSBjYW4gaW50ZXJydXB0IGl0IGluIHRoZSBub3JtYWwgS2VybWl0IHdh eSBieSB0eXBpbmcgb25lIG9mCisgICAgICAgICAgdGhlIGZvbGxvd2luZyBrZXlzIG9yIGtleSBj b21iaW5hdGlvbnM6CisgICAgICAgICAgICBYIC0gQ2FuY2VsIGN1cnJlbnQgZmlsZSBidXQgZ28g b24gdG8gdGhlIG5leHQgb25lIChpZiBhbnkpLgorICAgICAgICAgICAgWiAtIENhbmNlbCB0aGUg ZW50aXJlIHRyYW5zZmVyLiAgIEN0cmwtTCBvciBDdHJsLVcgLSBSZWZyZXNoCisgICAgICAgICAg dGhlIGZpbGUtdHJhbnNmZXIgZGlzcGxheSAoaWYgYW55KS4KKworICAgU0VUIEZUUCBESVNQTEFZ IHsgRlVMTFNDUkVFTiwgQ1JULCBTRVJJQUwsIEJSSUVGLCBOT05FLCBPRkYgfQorICAgICAgICAg IExpa2UgU0VUIFRSQU5TRkVSIERJU1BMQVksIGJ1dCBhcHBsaWVzIG9ubHkgdG8gRlRQIGNvbm5l Y3Rpb25zLAorICAgICAgICAgIGFuZCBkb2VzIG5vdCBhZmZlY3QgS2VybWl0LSBvciBvdGhlciBw cm90b2NvbCBmaWxlIHRyYW5zZmVycy4KKworICAgU0VUIFFVSUVUIHsgT04sIE9GRiB9CisgICAg ICAgICAgVGhpcyBjb21tYW5kIGFwcGxpZXMgdG8gS2VybWl0IGluIGdlbmVyYWwsIG5vdCBqdXN0 IEZUUC4gT0ZGIGJ5CisgICAgICAgICAgZGVmYXVsdDsgd2hlbiBPTiwgaXQgc3VwcHJlc3NlcyBt b3N0IG1lc3NhZ2VzIGZyb20gbW9zdCBjb21tYW5kcworICAgICAgICAgIGFzIHdlbGwgYXMgdGhl IGZpbGUtdHJhbnNmZXIgZGlzcGxheS4KKworICAgU0VUIEZUUCBQUk9HUkVTUy1NRVNTQUdFUyB7 IE9OLCBPRkYgfQorICAgICAgICAgIFRlbGxzIHdoZXRoZXIgS2VybWl0IHNob3VsZCBwcmludCBs b2NhbGx5LWdlbmVyYXRlZCBmZWVkYmFjaworICAgICAgICAgIG1lc3NhZ2VzIGZvciBlYWNoIG5v bi1maWxlLXRyYW5zZmVyIGNvbW1hbmQuIE9OIGJ5IGRlZmF1bHQuCisKKyAgIFNFVCBGVFAgVkVS Qk9TRS1NT0RFIHsgT04sIE9GRiB9CisgICAgICAgICAgVGVsbHMgd2hldGhlciB0byBkaXNwbGF5 IGFsbCByZXNwb25zZXMgZnJvbSB0aGUgRlRQIHNlcnZlci4gT0ZGCisgICAgICAgICAgYnkgZGVm YXVsdC4gVGhpcyBzaG93cyBhbGwgcmVzcG9uc2VzIHRvIGFsbCBjb21tYW5kcywgZXhjZXB0Cisg ICAgICAgICAgd2hlbiB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5IGlzIGFjdGl2ZSwgYW5kIHVu bGVzcyB5b3UgaGF2ZQorICAgICAgICAgIFNFVCBRVUlFVCBPTi4gV2hlbiBPRkYsIHJlc3BvbnNl cyBhcmUgc2hvd24gb25seSBmb3IgY29tbWFuZHMKKyAgICAgICAgICBzdWNoIGFzIEZUUCBQV0Qg d2hvc2UgcHVycG9zZSBpcyB0byBkaXNwbGF5IGEgcmVzcG9uc2UuCisKKyAgIFNFVCBGVFAgREVC VUcgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBUZWxscyB3aGV0aGVyIGxvY2FsIGNsaWVudCBkZWJ1 Z2dpbmcgaW5mb3JtYXRpb24gc2hvdWxkIGJlCisgICAgICAgICAgZGlzcGxheWVkLiBPRkYgYnkg ZGVmYXVsdC4gV2hlbiBPTiwgdGhlIGNvbW1hbmRzIHRoYXQgYXJlIHNlbnQKKyAgICAgICAgICB0 byB0aGUgc2VydmVyIGFyZSBzaG93biwgYXMgd2VsbCBhcyBpdHMgcmVzcG9uc2VzIChldmVuIGlm CisgICAgICAgICAgVkVSQk9TRS1NT0RFIGlzIE9GRiksIHBsdXMgYWRkaXRpb25hbCBpbmZvcm1h dGlvbmFsIG1lc3NhZ2VzIGFyZQorICAgICAgICAgIHByaW50ZWQgcmVnYXJkaW5nIHRoZSBwcm9n cmVzcyBvZiBzZWN1cmUgb3BlcmF0aW9ucy4gQWxzbywgdGhlCisgICAgICAgICAgdGVtcG9yYXJ5 IGZpbGUgY3JlYXRlZCBieSB0aGUgWzI1M11NR0VUIGNvbW1hbmQgaXMgbm90IGRlbGV0ZWQKKyAg ICAgICAgICBzbyB5b3UgY2FuIHNlZSB3aGF0J3MgaW4gaXQuCisKKyAgIFNldCBhbGwgb2YgdGhl c2UgdG8gT0ZGIHdoZW4gc2lsZW50IHJ1bm5pbmcgaXMgZGVzaXJlZC4KKworMy4zLjIuIE9wZXJh dGlvbmFsIFByZWZlcmVuY2VzCisKKyAgIEZUUCBESVNBQkxFIG5ldy1wcm90b2NvbC1mZWF0dXJl LW5hbWUKKyAgIEZUUCBFTkFCTEUgbmV3LXByb3RvY29sLWZlYXR1cmUtbmFtZQorICAgICAgICAg IEV4cGxhaW5lZCBpbiBbMjU0XVNlY3Rpb24gMy4xMS4KKworICAgU0VUIEZUUCBBVVRPTE9HSU4g eyBPTiwgT0ZGIH0KKyAgICAgICAgICBJZiB5b3UgZ2l2ZSB0aGlzIGNvbW1hbmQgcHJpb3IgdG8g b3BlbmluZyBhbiBGVFAgY29ubmVjdGlvbiwgaXQKKyAgICAgICAgICBjb250cm9scyB3aGV0aGVy IEtlcm1pdCB0cmllcyB0byBsb2cgeW91IGluIGF1dG9tYXRpY2FsbHkgYXMKKyAgICAgICAgICBw YXJ0IG9mIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MuIE5vcm1hbGx5IE9OLCB3aGljaCBtZWFucyB0 aGUKKyAgICAgICAgICB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIHNlbnQgYXV0b21hdGljYWxs eSAoYW5kIHByb21wdGVkIGZvcgorICAgICAgICAgIGlmIHRoZXkgYXJlIG5vdCB5ZXQga25vd24p LiBXaGVuIE9GRiwgRlRQIE9QRU4gY29ubmVjdHMgdG8gdGhlCisgICAgICAgICAgc2VydmVyIHdp dGhvdXQgbG9nZ2luZyBpbi4gT0ZGIGlzIGVxdWl2YWxlbnQgdG8gdGhlIC1uCisgICAgICAgICAg Y29tbWFuZC1saW5lIG9wdGlvbiB3aGVuIHVzaW5nIEtlcm1pdCdzIEZUUCBjb21tYW5kLWxpbmUK KyAgICAgICAgICBwZXJzb25hbGl0eS4gU2VlIFsyNTVdU2VjdGlvbiAzLjEuNCBmb3IgdXNhZ2Uu CisKKyAgIFNFVCBGVFAgUEFTU0lWRS1NT0RFIHsgT04sIE9GRiB9CisgICAgICAgICAgT04gYnkg ZGVmYXVsdCwgdG8gYXZvaWQgcmFuZG9tIFRDUCBwb3J0IGFzc2lnbm1lbnQgZm9yIGRhdGEKKyAg ICAgICAgICBjb25uZWN0aW9ucywgd2hpY2ggY2FuIHByZXZlbnQgRlRQIHByb3RvY29sIGZyb20g d29ya2luZyB0aHJvdWdoCisgICAgICAgICAgZmlyZXdhbGxzIGFuZCBuZXR3b3JrIGFkZHJlc3Mg dHJhbnNsYXRvcnMgKGZvciBtb3JlIG9uIHRoZXNlCisgICAgICAgICAgdG9waWNzLCBzZWUgdGhl IFsyNTZdS2VybWl0IHNlY3VyaXR5IHJlZmVyZW5jZS4gU2V0IHRvIE9GRiBpbgorICAgICAgICAg IGNhc2UgdGhlIEZUUCBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBwYXNzaXZlIG1vZGUsIG9yIGlu IGNhc2UKKyAgICAgICAgICB0aGUgY2xpZW50IGhhcyBwcm9ibGVtcyB3aXRoIGl0IChpdCBoYXMg YmVlbiBvYnNlcnZlZCwgZm9yCisgICAgICAgICAgZXhhbXBsZSwgdGhhdCB3aGVuIHVzaW5nIHBh c3NpdmUgbW9kZSwgdGhlIFNDTyBYRU5JWCAyLjMuNAorICAgICAgICAgIFRDUC9JUCBzdGFjayBo YW5ncyBpbiB0aGUgY29ubmVjdCgpIGNhbGwgZm9yZXZlcikuIFN5bm9ueW1zOgorICAgICAgICAg IFBBU1NJVkUgWyBPTiBdLCBQQVNTSVZFIE9GRiwgUEFTViBbIE9OIF0sIFBBU1YgT0ZGLgorCisg ICBTRVQgRlRQIFNFTkQtUE9SVC1DT01NQU5EUyB7IE9OLCBPRkYgfQorICAgICAgICAgIFRoaXMg Y29tbWFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIEZUUCBjbGllbnQgc2VuZHMgYSBuZXcgUE9S VAorICAgICAgICAgIGNvbW1hbmQgdG8gdGhlIHNlcnZlciB3aGVuIGFjY2VwdGluZyBpbmNvbWlu ZyBkYXRhIGNvbm5lY3Rpb25zCisgICAgICAgICAgKGFzIHdoZW4gbm90IHVzaW5nIHBhc3NpdmUg bW9kZS4pIFdoZW4gUEFTU0lWRS1NT0RFIGlzIE9GRiBhbmQKKyAgICAgICAgICBTRVQgU0VORC1Q T1JUIGlzIE9GRiwgdGhlIHBvcnQgdGhhdCB3YXMgb3JpZ2luYWxseSBzcGVjaWZpZWQgaXMKKyAg ICAgICAgICByZXVzZWQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIG5vcm1hbCBG VFAgY2xpZW50cyBidXQKKyAgICAgICAgICBpdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG1hbnkg ZmlyZXdhbGxzLgorCisgICBTRVQgRlRQIENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJT04geyBPTiwg T0ZGIH0KKyAgICAgICAgICBXaGV0aGVyIHRvIHRyYW5zbGF0ZSBjaGFyYWN0ZXIgc2V0cyB3aGVu IHRyYW5zZmVycmluZyBmaWxlcyB3aXRoCisgICAgICAgICAgRlRQIChleHBsYWluZWQgaW4gWzI1 N11TZWN0aW9uIDMuNykuIE9GRiBieSBkZWZhdWx0LgorCisgICBTRVQgRlRQIFNFUlZFUi1DSEFS QUNURVItU0VUIG5hbWUKKyAgICAgICAgICBUZWxscyBLZXJtaXQgdGhlIGNoYXJhY3RlciBzZXQg dXNlZCBieSB0aGUgRlRQIHNlcnZlciwgVVRGLTggYnkKKyAgICAgICAgICBkZWZhdWx0IChbMjU4 XVNlY3Rpb24gMy43KS4KKworICAgU0VUIEZUUCBTRVJWRVItVElNRS1PRkZTRVQgZGVsdGEtdGlt ZQorICAgICAgICAgIFRlbGxzIEtlcm1pdCB0byBhcHBseSB0aGUgZ2l2ZW4gWzI1OV1kZWx0YSB0 aW1lIHRvIGZpbGUKKyAgICAgICAgICB0aW1lc3RhbXBzIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIg Zm9yIGl0cyBmaWxlczsgZm9yIHVzZSB3aGVuCisgICAgICAgICAgKGZvciBleGFtcGxlKSB0aGUg c2VydmVyIGRvZXMgbm90IGhhdmUgaXRzIHRpbWV6b25lIHNldAorICAgICAgICAgIGNvcnJlY3Rs eS4KKworICAgU0VUIEZUUCBFUlJPUi1BQ1RJT04geyBQUk9DRUVELCBRVUlUIH0KKyAgICAgICAg ICBXaGVuIHRyYW5zZmVycmluZyBhIGdyb3VwIG9mIGZpbGVzIHdpdGggRlRQLCBhbmQgYW4gZXJy b3Igb2NjdXJzCisgICAgICAgICAgd2l0aCBvbmUgb2YgdGhlIGZpbGVzLCBLZXJtaXQgbm9ybWFs bHkgZ29lcyBvbiB0aGUgbmV4dCBmaWxlLgorICAgICAgICAgIFVzZSBTRVQgRlRQIEVSUk9SLUFD VElPTiB0byBRVUlUIHRvIG1ha2UgS2VybWl0IHN0b3AgdGhlCisgICAgICAgICAgdHJhbnNmZXIg aW1tZWRpYXRlbHkgYW5kIGZhaWwgaWYgYW4gZXJyb3Igb2NjdXJzIHdpdGggYW55IHNpbmdsZQor ICAgICAgICAgIGZpbGUgaW4gdGhlIGdyb3VwLiBFeGFtcGxlOiB5b3UgaGF2ZSBnaXZlbiBLZXJt aXQgYSBsaXN0IG9mCisgICAgICAgICAgZmlsZXMgdG8gc2VuZCwgYW5kIG9uZSBvZiB0aGUgZmls ZXMgY2FuIG5vdCBiZSBmb3VuZCwgb3IgcmVhZAorICAgICAgICAgIHBlcm1pc3Npb24gaXMgZGVu aWVkLiBOb3RlIHRoYXQgY2FuY2VsaW5nIGEgZmlsZSBieSB0eXBpbmcgJ1gnCisgICAgICAgICAg ZHVyaW5nIHRyYW5zZmVyIGlzIG5vdCBjb25zaWRlcmVkIGFuIGVycm9yIChpZiB5b3Ugd2FudCB0 bworICAgICAgICAgIGNhbmNlbCB0aGUgZW50aXJlIHRyYW5zZmVyLCB0eXBlICdaJyBvciBDdHJs LUMpLgorCisgICBTRVQgRlRQIFBFUk1JU1NJT05TIHsgQVVUTywgT04sIE9GRiB9CisgICAgICAg ICAgV2hlbiB1cGxvYWRpbmcgZmlsZXMgd2l0aCBQVVQgb3IgTVBVVCwgdGhpcyB0ZWxscyB3aGV0 aGVyIEtlcm1pdAorICAgICAgICAgIHNob3VsZCBzZW5kIGVhY2ggZmlsZSdzIHBlcm1pc3Npb25z LiBUaGUgZGVmYXVsdCBpcyBPRkYsIHdoaWNoCisgICAgICAgICAgbWVhbnMgbm90IHRvIHNlbmQg cGVybWlzc2lvbnMsIGluIHdoaWNoIGNhc2UgdGhlIHVwbG9hZGVkIGZpbGUncworICAgICAgICAg IHBlcm1pc3Npb25zIGFyZSBzZXQgYnkgdGhlIEZUUCBzZXJ2ZXIgYWNjb3JkaW5nIHRvIGl0cyBv d24KKyAgICAgICAgICBjcml0ZXJpYS4gT04gbWVhbnMgdG8gc2VuZCB0aGVtLCBBVVRPIG1lYW5z IHRvIHNlbmQgdGhlbSBvbmx5IGlmCisgICAgICAgICAgdGhlIGNsaWVudCAoS2VybWl0KSBhbmQg c2VydmVyIGFyZSBvbiBsaWtlIHBsYXRmb3JtcyAoZS5nLiBib3RoCisgICAgICAgICAgVU5JWCku IFRoaXMgY29tbWFuZCBoYXMgbm8gZWZmZWN0IHdoZW4gZG93bmxvYWRpbmcsIHNpbmNlIHRoZQor ICAgICAgICAgIEZUUCBwcm90b2NvbCBkb2VzIG5vdCBpbmNsdWRlIGEgd2F5IGZvciB0aGUgc2Vy dmVyIHRvIGluZm9ybSB0aGUKKyAgICAgICAgICBjbGllbnQgb2YgYSBmaWxlJ3MgcGVybWlzc2lv bnMuIEFsc28gc2VlIFsyNjBdRlRQIFBVVAorICAgICAgICAgIC9QRVJNSVNTSU9OUy4gTm90ZSB0 aGF0IHNldHRpbmcgcGVybWlzc2lvbnMgYWZ0ZXIgdXBsb2FkaW5nIGlzCisgICAgICAgICAgbGlr ZWx5IHRvIHdvcmsgKGNvcnJlY3RseSBvciBhdCBhbGwpIG9ubHkgd2hlbiB0aGUgY2xpZW50IGFu ZAorICAgICAgICAgIHNlcnZlciBwbGF0Zm9ybXMgYXJlIGFsaWtlIChlLmcuIGJvdGggb2YgdGhl bSBhcmUgc29tZSBmb3JtIG9mCisgICAgICAgICAgVU5JWCkuIEFsc28gbm90ZSB0aGF0IFdpbmRv d3MgZmlsZXMgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucy4gQWxzbworICAgICAgICAgIHNlZSBbMjYx XUZUUCBDSE1PRC4KKworICAgU0VUIEZUUCBEQVRFUyB7IE9OLCBPRkYgfQorICAgICAgICAgIFdo ZW4gZG93bmxvYWRpbmcgZmlsZXMgd2l0aCBHRVQgb3IgTUdFVCwgdGhpcyB0ZWxscyB3aGV0aGVy CisgICAgICAgICAgS2VybWl0IHNob3VsZCB0cnkgdG8gc2V0IHRoZSByZWNlaXZlZCBmaWxlJ3Mg ZGF0ZSBmcm9tIHRoZQorICAgICAgICAgIHNlcnZlcidzIGRhdGUuIEZUUCBEQVRFUyBpcyBPTiBi eSBkZWZhdWx0LiBOb3RlLCBob3dldmVyLCB0aGF0CisgICAgICAgICAgRlRQIHByb3RvY29sIGRv ZXMgbm90IGFsbG93IGRhdGUgcHJlc2VydmF0aW9uIHdoZW4gdXBsb2FkaW5nLiBTbworICAgICAg ICAgIGF0IGJlc3QsIFNFVCBGVFAgREFURVMgT04gY2FuIHdvcmsgb25seSB3aGVuIGRvd25sb2Fk aW5nLCBhbmQKKyAgICAgICAgICB0aGVuIG9ubHkgd2hlbiB0aGUgc2VydmVyIGFncmVlcyB0byBm dXJuaXNoIGZpbGUgZGF0ZXMuCisKKyAgIFNFVCBGVFAgRklMRU5BTUVTIHsgQVVUTywgQ09OVkVS VEVELCBMSVRFUkFMIH0KKyAgICAgICAgICBXaGVuIHVwbG9hZGluZyAoc2VuZGluZykgZmlsZXMs IHRoaXMgdGVsbHMgd2hldGhlciB0byBjb252ZXJ0CisgICAgICAgICAgb3V0Ym91bmQgZmlsZW5h bWVzIHRvICJjb21tb24gZm9ybSIuIFRoaXMgbWVhbnMgYWxsb3dpbmcgb25seQorICAgICAgICAg IG9uZSBwZXJpb2QgaW4gYSBuYW1lLCB1cHBlcmNhc2luZyBhbnkgbG93ZXJjYXNlIGxldHRlcnMs CisgICAgICAgICAgcmVwbGFjaW5nIHNwYWNlcyBieSB1bmRlcnNjb3JlcywgZXRjLiBBVVRPTUFU SUMgaXMgdGhlIGRlZmF1bHQsCisgICAgICAgICAgbWVhbmluZyBMSVRFUkFMIHdoZW4gY2xpZW50 IGFuZCBzZXJ2ZXIgYXJlIHRoZSBzYW1lIHR5cGUgb2YKKyAgICAgICAgICBzeXN0ZW0gKGUuZy4g VU5JWCkgYW5kIENPTlZFUlRFRCBvdGhlcndpc2UuIFNwZWNpYWwgY2FzZTogaWYgdGhlCisgICAg ICAgICAgc2V0dGluZyBpcyBBVVRPTUFUSUMgYW5kIHRoZSBjbGllbnQgaXMgbm90IFVOSVggYW5k IHRoZSBzZXJ2ZXIKKyAgICAgICAgICBpZGVudGlmaWVzIGl0c2VsZiBhcyBVTklYLCBLZXJtaXQg dXNlcyBhIGxlc3Mtc3RyaWN0IGZvcm0gb2YKKyAgICAgICAgICBjb252ZXJzaW9uLCBpbiB3aGlj aCBsb3dlcmNhc2UgbGV0dGVycyBhcmUgbm90IHVwcGVyY2FzZWQgYW5kCisgICAgICAgICAgdGhl IGZpbGVuYW1lIGNhbiBjb250YWluIGFueSBudW1iZXIgb2YgcGVyaW9kcywgYnV0IHNwYWNlcyBh cmUKKyAgICAgICAgICBzdGlsbCBjb252ZXJ0ZWQgdG8gdW5kZXJzY29yZS4gV2hlbiByZWNlaXZp bmcsIGNvbnZlcnNpb24KKyAgICAgICAgICBnZW5lcmFsbHkgbWVhbnMgdG8gY2hhbmdlIGFsbC11 cHBlcmNhc2UgbmFtZXMgdG8gbG93ZXJjYXNlIGFuZAorICAgICAgICAgIHNwYWNlcyB0byB1bmRl cnNjb3JlLgorCisgICBTRVQgRlRQIFVOSVFVRS1TRVJWRVItTkFNRVMgeyBPTiwgT0ZGIH0KKyAg ICAgICAgICBBcHBsaWVzIG9ubHkgdG8gdXBsb2Fkcy4gVGVsbHMgdGhlIHNlcnZlciB0byBjcmVh dGUgbmV3LCB1bmlxdWUKKyAgICAgICAgICBuYW1lcyBmb3IgaW5jb21pbmcgZmlsZXMgdGhhdCBo YXZlIHRoZSBzYW1lIG5hbWVzIGFzIGV4aXN0aW5nCisgICAgICAgICAgZmlsZXMuIE9GRiBieSBk ZWZhdWx0LCBpbiB3aGljaCBjYXNlIHRoZSBzZXJ2ZXIgb3ZlcndyaXRlcworICAgICAgICAgIGV4 aXN0aW5nIGZpbGVzIHdpdGggbmV3IGZpbGVzIG9mIHRoZSBzYW1lIG5hbWUuIFdoZW4gT04sIHRo ZQorICAgICAgICAgIHNlcnZlciB1c2VzIGl0cyBvd24gYnVpbHQtaW4gbWV0aG9kIGZvciBjcmVh dGluZyBuZXcgbmFtZXMgZm9yCisgICAgICAgICAgaW5jb21pbmcgZmlsZXM7IGZvciBleGFtcGxl LCBhcHBlbmRpbmcgYSBwZXJpb2QgKC4pIGFuZCBhIG51bWJlcgorICAgICAgICAgIHRvIHRoZSBu YW1lLiBDQVVUSU9OOiBVc2UgdGhpcyBvcHRpb24gb25seSBpZiB5b3UgZG8gbm90IG5lZWQgdG8K KyAgICAgICAgICByZWZlciB0byB0aGUgZmlsZSBhZnRlciBpdCBpcyB1cGxvYWRlZCwgc2luY2Ug RlRQIHByb3RvY29sCisgICAgICAgICAgcHJvdmlkZXMgbm8gbWVjaGFuaXNtIGZvciB0aGUgY2xp ZW50IHRvIGZpbmQgb3V0IHdoYXQgbmFtZSB3YXMKKyAgICAgICAgICBhc3NpZ25lZCBieSB0aGUg c2VydmVyLgorCisgICBTRVQgRlRQIENPTExJU0lPTiB7IC4uLiB9CisgICAgICAgICAgV2hlbiBk b3dubG9hZGluZywgd2hhdCB0byBkbyBpZiBhbiBpbmNvbWluZyBmaWxlIGhhcyB0aGUgc2FtZQor ICAgICAgICAgIG5hbWUgYXMgYW4gZXhpc3RpbmcgZmlsZS4gT3B0aW9ucyBhcmUgdGhlIHNhbWUg YXMgZm9yIFNFVCBGSUxFCisgICAgICAgICAgQ09MTElTSU9OLiBJZiB0aGlzIGNvbW1hbmQgaXMg bm90IGdpdmVuLCBLZXJtaXQncyByZWd1bGFyIEZJTEUKKyAgICAgICAgICBDT0xMSVNJT04gc2V0 dGluZyBpcyB1c2VkLiBJZiB0aGlzIGNvbW1hbmQgaXMgZ2l2ZW4sIGl0CisgICAgICAgICAgb3Zl cnJpZGVzIHRoZSBGSUxFIENPTExJU0lPTiBzZXR0aW5nIGZvciBGVFAgdHJhbnNmZXJzIG9ubHku IFNlZQorICAgICAgICAgIFsyNjJdU2VjdGlvbiAzLjYuMiBmb3IgZGV0YWlscy4KKworICAgU0VU IEZUUCBUWVBFIHsgVEVYVCwgQklOQVJZLCBURU5FWCB9CisgICAgICAgICAgQ2hhbmdlcyB0aGUg ZGVmYXVsdCB0cmFuc2ZlciBtb2RlLiBXaGVuIHNlbmRpbmcgKHVwbG9hZGluZykKKyAgICAgICAg ICBmaWxlcywgdGhpcyBjb21tYW5kIGhhcyBubyBlZmZlY3QgdW5sZXNzIHlvdSBkaXNhYmxlIGF1 dG9tYXRpYworICAgICAgICAgIHRleHQvYmluYXJ5IG1vZGUgc3dpdGNoaW5nIChbMjYzXVNlY3Rp b24gNCkgd2l0aCBTRVQgRklMRSBTQ0FOCisgICAgICAgICAgT0ZGIG9yIFNFVCBUUkFOU0ZFUiBN T0RFIE1BTlVBTC4gV2hlbiByZWNlaXZpbmcgKGRvd25sb2FkaW5nKQorICAgICAgICAgIGZpbGVz LCB0aGlzIGNvbW1hbmQgZXN0YWJsaXNoZXMgdGhlIHRyYW5zZmVyIG1vZGUgdG8gYmUgdXNlZAor ICAgICAgICAgIHdoZW4gYSBmaWxlbmFtZSBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgS2VybWl0J3Mg dGV4dCBvciBiaW5hcnkKKyAgICAgICAgICBmaWxlbmFtZSBwYXR0ZXJucywgdW5sZXNzIHlvdSB1 c2UgU0VUIEZUUCBHRVQtRklMRVRZUEUtU1dJVENISU5HCisgICAgICAgICAgb3IgU0VUIFRSQU5T RkVSIE1PREUgTUFOVUFMIHRvIGRpc2FibGUgYXV0b21hdGljIHN3aXRjaGluZywgaW4KKyAgICAg ICAgICB3aGljaCBjYXNlLCB0aGlzIGNvbW1hbmQgZXN0YWJsaXNoZXMgdGhlIHRyYW5zZmVyIG1v ZGUgZm9yIGFsbAorICAgICAgICAgIGRvd25sb2FkZWQgZmlsZXMuIEluIGFsbCBjYXNlcywgaG93 ZXZlciwgdGhlIEZUUCBUWVBFIGNhbiBiZQorICAgICAgICAgIG92ZXJyaWRkZW4gaW4gYW55IEdF VCBvciBQVVQgY29tbWFuZCBieSBpbmNsdWRpbmcgYSAvVEVYVAorICAgICAgICAgICgvQVNDSUkp LCAvQklOQVJZLCBvciAvVEVORVggc3dpdGNoLiBUaGUgRlRQIFRZUEUgaXMgaW5kZXBlbmRlbnQK KyAgICAgICAgICBvZiB0aGUgS2VybWl0IEZJTEUgVFlQRSBzZXR0aW5nLiBURU5FWCBpcyB1c2Vk IGZvciBzZW5kaW5nIDgtYml0CisgICAgICAgICAgYmluYXJ5IGZpbGVzIHRvIDM2LWJpdCBwbGF0 Zm9ybXMgc3VjaCBhcyBUT1BTLTEwLCBUT1BTLTIwLCBhbmQKKyAgICAgICAgICBURU5FWCwgYW5k IGdldHRpbmcgdGhlbSBiYWNrIGFnYWluLiBTeW5vbnltOiBBU0NJSSA9IFRFWFQuIE5vdGU6Cisg ICAgICAgICAgdGhlcmUgaXMgYWxzbyBhbiBGVFAgVFlQRSBjb21tYW5kLCB3aGljaCBkb2VzIHdo YXQgU0VUIEZUUCBUWVBFCisgICAgICAgICAgZG9lcyBidXQgYWxzbyBzZW5kcyBhIFRZUEUgY29t bWFuZCB0byB0aGUgc2VydmVyIGltbWVkaWF0ZWx5IGlmCisgICAgICAgICAgdGhlIGdpdmVuIHR5 cGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lLgorCisgICBJZiB5b3Ugd2FudCB3 YW50IHNwZWNpZmljIEZUUCBwcmVmZXJlbmNlIHNldHRpbmdzIHRvIGJlIGluIGVmZmVjdCBmb3IK KyAgIGFsbCB5b3VyIEtlcm1pdCBGVFAgc2Vzc2lvbnMsIHB1dCB0aGUgZGVzaXJlZCBTRVQgRlRQ IGNvbW1hbmRzIGluIHlvdXIKKyAgIEtlcm1pdCBjdXN0b21pemF0aW9uIGZpbGUgKH4vLm15a2Vy bXJjIGluIFVOSVgsIEs5NUNVU1RPTS5JTkkgaW4KKyAgIFdpbmRvd3MpLgorCisgICBbIFsyNjRd VG9wIF0gWyBbMjY1XUZUUCBUb3AgXSBbIFsyNjZdQy1LZXJtaXQgSG9tZSBdIFsgWzI2N11LZXJt aXQgSG9tZQorICAgXQorCiszLjQuIE1hbmFnaW5nIERpcmVjdG9yaWVzIGFuZCBGaWxlcworCisg ICBJbiBLZXJtaXQsIGNvbW1hbmRzIGZvciBkaXJlY3RvcnkgYW5kIGZpbGUgbWFuYWdlbWVudCBj YW4gcmVmZXIgdG86CisKKyAgICAgKiBUaGUgbG9jYWwgY29tcHV0ZXIKKyAgICAgKiBBIHJlbW90 ZSBjb21wdXRlciB3aGVuIHlvdSBoYXZlIGEgY29ubmVjdGlvbiB0byBhIEtlcm1pdCBzZXJ2ZXIg b3IKKyAgICAgICBJS1NELgorICAgICAqIEEgcmVtb3RlIGNvbXB1dGVyIHdoZW4geW91IGhhdmUg YSBjb25uZWN0aW9uIHRvIGFuIEZUUCBzZXJ2ZXIuCisKKyAgIChUaGVyZSBjYW4gYWxzbyBiZSBh biBIVFRQIGNvbm5lY3Rpb24sIGJ1dCB0aGUgY29tbWFuZHMgaW4gdGhpcyBzZWN0aW9uCisgICBk b24ndCBhcHBseSB0byBIVFRQIGNvbm5lY3Rpb25zLikKKworICAgVGh1cyBpbiBnZW5lcmFsLCBl YWNoIHN1Y2ggY29tbWFuZCBjb21lcyBpbiB0aHJlZSBmb3JtczoKKworICAgIDEuIFdpdGggbm8g cHJlZml4IGluIEMtS2VybWl0IDguMC4yMDAsIGl0IHJlZmVycyB0byB0aGUgbG9jYWwgY29tcHV0 ZXIKKyAgICAgICAoQ0QsIERJUiwgZXRjKS4gSW4gQy1LZXJtaXQgOC4wLjIwMSBhbmQgbGF0ZXIs IGhvd2V2ZXIsIHRoZSAibG9jdXMiCisgICAgICAgc3dpdGNoZXMgdG8gYXV0b21hdGljYWxseSB0 byB0aGUgcmVtb3RlIEZUUCBzZXJ2ZXIgd2hlbiB5b3UgbWFrZSBhbgorICAgICAgIEZUUCBjb25u ZWN0aW9uIChzZWUgdGhlIFNFVCBMT0NVUyBkZXNjcmlwdGlvbiBbMjY4XVNlY3Rpb24gNyk7IHRo dXMKKyAgICAgICBDLUtlcm1pdCA4LjAuMjAxIGFjdHMgYWxtb3N0IGV4YWN0bHkgbGlrZSBhIHJl Z3VsYXIgRlRQIGNsaWVudCB3aGVuCisgICAgICAgaXQgaGFzIGFuIEZUUCBjb25uZWN0aW9uLCB5 ZXQgc3RpbGwgYWN0cyBsaWtlIGl0c2VsZiBvbiBvdGhlciBraW5kcworICAgICAgIG9mIGNvbm5l Y3Rpb25zLgorICAgIDIuIFdpdGggdGhlIFJFTU9URSBwcmVmaXgsIGl0IGlzIGZvciBhIEtlcm1p dCBzZXJ2ZXIgKFJFTU9URSBDRCwKKyAgICAgICBSRU1PVEUgRElSKS4KKyAgICAzLiBXaXRoIHRo ZSBGVFAgcHJlZml4LCBpdCdzIGZvciBhbiBGVFAgc2VydmVyIChGVFAgQ0QsIEZUUCBESVIpLgor ICAgIDQuIEFsc28gc2VlIFsyNjldU2VjdGlvbiAzLjgsIHdoaWNoIGV4cGxhaW5zICJSLWNvbW1h bmRzIiBhbmQKKyAgICAgICAiTC1jb21tYW5kcyIuCisKKyAgIEtlcm1pdCdzIEZUUCBmaWxlIGFu ZCBkaXJlY3RvcnkgbWFuYWdlbWVudCBjb21tYW5kcyBhcmUgYXMgZm9sbG93cy4KKyAgIFdoZW4g YW4gUi1jb21tYW5kIGlzIGluY2x1ZGVkIGluIHRoZSBTeW5vbnltcyBsaXN0LCBiZSBzdXJlIHRv IHJlYWQKKyAgIFsyNzBdU2VjdGlvbiAzLjggYWJvdXQgcnVsZXMgZm9yIHVzZSBvZiBSLWNvbW1h bmRzLgorCisgICBGVFAgQ0QgWyBkaXJlY3RvcnkgXQorICAgICAgICAgIFRlbGxzIHRoZSBGVFAg c2VydmVyIHRvIGNoYW5nZSBpdHMgZGVmYXVsdCAod29ya2luZykgZGlyZWN0b3J5CisgICAgICAg ICAgdG8gdGhlIG9uZSBnaXZlbiwgd2hpY2ggdXN1YWxseSBtdXN0IGJlIGV4cHJlc3NlZCBpbiB0 aGUgc3ludGF4CisgICAgICAgICAgb2YgdGhlIHNlcnZlciBwbGF0Zm9ybSAoVU5JWCwgVk1TLCBl dGMpLiBJZiB0aGUgZGlyZWN0b3J5IGlzIG5vdAorICAgICAgICAgIHNwZWNpZmllZCwgdGhlIHJl c3VsdCBkZXBlbmRzIG9uIHRoZSBGVFAgc2VydmVyIC0tIGl0IG1pZ2h0CisgICAgICAgICAgY29t cGxhaW4gdGhhdCB0aGUgY29tbWFuZCBpcyBpbGxlZ2FsLCBvciBpdCBtaWdodCBjaGFuZ2UgdG8g eW91cgorICAgICAgICAgIG9yaWdpbmFsIGxvZ2luIGRpcmVjdG9yeS4gU3lub255bXM6IEZUUCBD V0QgKENoYW5nZSBXb3JkaW5nCisgICAgICAgICAgRGlyZWN0b3J5KTsgUkNELgorCisgICBGVFAg Q0RVUAorICAgICAgICAgIFRlbGxzIHRoZSBGVFAgc2VydmVyIHRvIGNoYW5nZSBpdHMgZGVmYXVs dCAod29ya2luZykgZGlyZWN0b3J5CisgICAgICAgICAgdG8gdGhlIHBhcmVudCBkaXJlY3Rvcnkg b2YgaXRzIGN1cnJlbnQgb25lIChlcXVpdmFsZW50IHRvCisgICAgICAgICAgImNkIC4uIiBpbiBV TklYLCBvciAiY2QgWy1dIiBpbiBWTVMpLiBTeW5vbnltczogUkNEVVAsIEZUUCBVUC4KKworICAg RlRQIFBXRAorICAgICAgICAgIEFza3MgdGhlIEZUUCBzZXJ2ZXIgdG8gcmVwb3J0ICgicHJpbnQi KSBpdHMgY3VycmVudCB3b3JraW5nCisgICAgICAgICAgZGlyZWN0b3J5LiBTeW5vbnltOiBSUFdE LgorCisgICBGVFAgTUtESVIgZGlyZWN0b3J5CisgICAgICAgICAgQXNrcyB0aGUgRlRQIHNlcnZl ciB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSB3aG9zZSBuYW1lIGlzIGdpdmVuLgorICAgICAgICAg IEluIGdlbmVyYWwsIHRoZSBuYW1lIG11c3QgYmUgaW4gdGhlIHN5bnRheCBvZiB0aGUgc2VydmVy J3MgZmlsZQorICAgICAgICAgIHN5c3RlbSwgYW5kIGl0IG11c3QgYmUgZWl0aGVyIGFic29sdXRl IChhIGZ1bGwgcGF0aG5hbWUpIG9yCisgICAgICAgICAgcmVsYXRpdmUgdG8gdGhlIHNlcnZlcidz IGN1cnJlbnQgKHdvcmtpbmcpIGRpcmVjdG9yeS4gVGhpcworICAgICAgICAgIGNvbW1hbmQgZmFp bHMgaWYgdGhlIGRpcmVjdG9yeSBjYW4ndCBiZSBjcmVhdGVkIGZvciBhbnkgcmVhc29uLAorICAg ICAgICAgIGluY2x1ZGluZyB0aGF0IGl0IGV4aXN0cyBhbHJlYWR5LiBTeW5vbnltOiBSTUtESVIu CisKKyAgIEZUUCBSTURJUiBkaXJlY3RvcnkKKyAgICAgICAgICBBc2tzIHRoZSBGVFAgc2VydmVy IHRvIHJlbW92ZSB0aGUgZGlyZWN0b3J5IHdob3NlIG5hbWUgaXMgZ2l2ZW4uCisgICAgICAgICAg VGhlIHJ1bGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgTUtESVIsIHBsdXMgaW4gbW9zdCBjYXNlcywg dGhlCisgICAgICAgICAgc2VydmVyIHdpbGwgbm90IHJlbW92ZSBhbnkgZGlyZWN0b3J5IHVubGVz cyBpdCBpcyBlbXB0eS4KKyAgICAgICAgICBTeW5vbnltOiBSUk1ESVIuCisKKyAgIEZUUCBESVJF Q1RPUlkgWyBmaWxlc3BlYyBdIFsgcmVkaXJlY3RvcnMgXQorICAgICAgICAgIFRlbGxzIHRoZSBG VFAgc2VydmVyIHRvIHNlbmQgYSBkaXJlY3RvcnkgbGlzdGluZyBvZiB0aGUKKyAgICAgICAgICBz cGVjaWZpZWQgZmlsZXMuIElmIG5vIGZpbGVzcGVjIGlzIGdpdmVuLCB0aGUgc2VydmVyIGxpc3Rz IGFsbAorICAgICAgICAgIGZpbGVzIGluIGl0cyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBU aGUgcmVzdWx0cyBhcmUgaW4KKyAgICAgICAgICB3aGF0ZXZlciBmb3JtYXQgdGhlIHNlcnZlciBj aG9vc2VzIHRvIHNlbmQgdGhlbS4gWW91IGNhbiB1c2UKKyAgICAgICAgICBVTklYLWxpa2UgcmVk aXJlY3RvcnMgdG8gc2VuZCB0aGUgbGlzdGluZyB0byBhIGZpbGUgb3IgYQorICAgICAgICAgIHBp cGVsaW5lLCBleGFjdGx5IGFzIHdpdGggdGhlIHJlZ3VsYXIgS2VybWl0IGNsaWVudC9zZXJ2ZXIK KyAgICAgICAgICBSRU1PVEUgRElSRUNUT1JZIGNvbW1hbmQgKFsyNzFdVXNpbmcgQy1LZXJtaXQs IENoYXB0ZXIgMTEpLgorICAgICAgICAgIFN5bm9ueW06IFJESVJFQ1RPUlkuIEV4YW1wbGVzOgor CisgICAgZnRwIGRpciAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgU2hvdyBsaXN0aW5nIG9m IGFsbCBmaWxlcyBvbiBzY3JlZW4KKyAgICBmdHAgZGlyICoudHh0ICAgICAgICAgICAgICAgICAg ICAgOyBMaXN0ICoudHh0IGZpbGVzIG9uIHNjcmVlbgorICAgIGZ0cCBkaXIgKi50eHQgPiBzb21l ZmlsZSAgICAgICAgICA7IFB1dCBsaXN0aW5nIGluIHNvbWVmaWxlCisgICAgZnRwIGRpciAqLnR4 dCA+PiBzb21lZmlsZSAgICAgICAgIDsgQXBwZW5kIGxpc3RpbmcgdG8gc29tZWZpbGUKKyAgICBm dHAgZGlyICoudHh0IHwgc29ydCA+IHNvbWVmaWxlICAgOyBQdXQgc29ydGVkIGxpc3RpbmcgaW4g c29tZWZpbGUKKyAgICBmdHAgZGlyIHwgbW9yZSAgICAgICAgICAgICAgICAgICAgOyBSdW5zIGxp c3QgdGhyb3VnaCAibW9yZSIKKyAgICBmdHAgZGlyIHwgc29ydCB8IG1vcmUgICAgICAgICAgICAg OyBSdW5zIGxpc3QgdGhyb3VnaCAic29ydCIgYW5kICJtb3JlIgorCisgICBGVFAgVkRJUkVDVE9S WSBbIGZpbGVzcGVjIF0gWyByZWRpcmVjdG9ycyBdCisgICAgICAgICAgIlZlcmJvc2UiIGRpcmVj dG9yeS4gVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSBGVFAgRElSRUNUT1JZCisgICAgICAgICAgY29t bWFuZCBwcmltYXJpbHkgZm9yIHVzZSB3aXRoIERFQ1NZU1RFTS0yMCAoVE9QUy0yMCkgRlRQCisg ICAgICAgICAgc2VydmVycywgd2hpY2ggc2VuZCBvbmx5IGZpbGVuYW1lcyB3aGVuIGdpdmVuIGEg RElSRUNUT1JZCisgICAgICAgICAgY29tbWFuZDsgdGhlIFZESVJFQ1RPUlkgY29tbWFuZCBtYWtl cyB0aGVtIGFsc28gc2VuZCBmaWxlIHNpemVzLAorICAgICAgICAgIGRhdGVzLCBhbmQgYXR0cmli dXRlcy4KKworICAgRlRQIENIRUNLIGZpbGVzcGVjCisgICAgICAgICAgQXNrcyB0aGUgRlRQIHNl cnZlciB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGV4aXN0cyBvciwgaWYgdGhlCisgICAgICAgICAg ZmlsZXNwZWMgY29udGFpbnMgd2lsZGNhcmRzLCBpZiBhbnkgZmlsZXMgbWF0Y2gsIGFuZCB0aGlz CisgICAgICAgICAgY29tbWFuZCBzdWNjZWVkcyBvciBmYWlscyBhY2NvcmRpbmdseS4KKworICAg RlRQIE1PRFRJTUUgZmlsZW5hbWUKKyAgICAgICAgICBBc2tzIHRoZSBGVFAgc2VydmVyLCB2aWEg dGhlIG5vdC15ZXQtc3RhbmRhcmQgRlRQIE1EVE0gY29tbWFuZCwKKyAgICAgICAgICB0byBzZW5k IHRoZSBtb2RpZmljYXRpb24gZGF0ZSBhbmQgdGltZSBvZiB0aGUgZ2l2ZW4gZmlsZS4gVGhlCisg ICAgICAgICAgcmVzcG9uc2Ugc2hvdWxkIGJlIGEgbnVtZXJpYyBzdHJpbmcgaW4gdGhlIGZvcm1h dDoKKyAgICAgICAgICB5eXl5bW1kZGhobW1zc3h4eHh4Li4uIHdoZXJlIHl5eXkgaXMgdGhlIHll YXIsIG1tIGlzIHRoZSBtb250aCwKKyAgICAgICAgICBkZCBpcyB0aGUgZGF5LCBoaCBpcyB0aGUg aG91ciAoMC0yMyksIG1tIGlzIHRoZSBtaW51dGUsIHNzIGlzCisgICAgICAgICAgdGhlIHNlY29u ZCwgYW5kIHh4eC4uLiBpcyB0aGUgb3B0aW9uYWwgZnJhY3Rpb24gb2YgdGhlIHNlY29uZCAoMAor ICAgICAgICAgIG9yIG1vcmUgZGlnaXRzKS4gVGhlIGRhdGUgYW5kIHRpbWUgaXMgZXhwcmVzc2Vk IGluIFVUQyAoR01ULAorICAgICAgICAgIFp1bHUsIFplcm8tTWVyaWRpYW4pLiBUaGUgcmVzdWx0 IGlzIGF2YWlsYWJsZSBwcm9ncmFtbWF0aWNhbGx5CisgICAgICAgICAgaW4gdGhlIFsyNzJdXHYo ZnRwX21lc3NhZ2UpIHZhcmlhYmxlLCBhbmQgaXMgdW5kZXJzdGFuZGFibGUgYnkKKyAgICAgICAg ICBLZXJtaXQncyBkYXRlLXRpbWUgc3dpdGNoZXMgYW5kIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGUs IHN1cHBvc2UKKyAgICAgICAgICB3ZSB3YW50IHRvIHVwbG9hZCBhbGwgbG9jYWwgZmlsZXMgdGhh dCBhcmUgbmV3ZXIgdGhhbiBhCisgICAgICAgICAgcGFydGljdWxhciBmaWxlIG9uIHRoZSBzZXJ2 ZXI6CisKKyAgQy1LZXJtaXQ+IGZ0cCBtb2R0aW1lIHNpZ25wb3N0CisgIEMtS2VybWl0PiBlY2hv IFx2KGZ0cF9tZXNzYWdlKQorICAyMDAxMDgwNzExMzU0Mi4wMTQKKyAgQy1LZXJtaXQ+IGZ0cCBt cHV0IC9hZnRlcjpcdihmdHBfbWVzc2FnZSlHTVQgKgorCisgICAgICAgICAgTm90ZSB0aGF0IHdl IG11c3QgYXBwZW5kICJHTVQiIHRvIHRoZSBkYXRlLXRpbWUgc3RyaW5nIHRvIGxldAorICAgICAg ICAgIHRoZSAvQUZURVIgc3dpdGNoIGtub3cgdGhlIHRpbWUgaXMgR01UIHJhdGhlciB0aGFuIGxv Y2FsLgorCisgICBGVFAgU0laRSBmaWxlbmFtZQorICAgICAgICAgIEFza3MgdGhlIEZUUCBzZXJ2 ZXIgdG8gc2VuZCB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBnaXZlbgorICAgICAgICAgIGZp bGUuIFRoZSByZXN1bHQgbWlnaHQgdmFyeSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY3VycmVu dCBGVFAKKyAgICAgICAgICBUWVBFIGlzIGJpbmFyeSBvciB0ZXh0ICgiYXNjaWkiKS4gRm9yIGEg cmVsaWFibGUgYnl0ZSBjb3VudCwgZG8KKyAgICAgICAgICBGVFAgVFlQRSBCSU5BUlkgZmlyc3Qu IFRoZSByZXN1bHQgaXMgYXZhaWxhYmxlIHByb2dyYW1tYXRpY2FsbHkKKyAgICAgICAgICBpbiB0 aGUgWzI3M11cdihmdHBfbWVzc2FnZSkgdmFyaWFibGUuCisKKyAgIEZUUCBDSE1PRCBwZXJtaXNz aW9ucyBmaWxlbmFtZQorICAgICAgICAgIFRlbGxzIHRoZSBGVFAgc2VydmVyIHRvIHNldCB0aGUg cGVybWlzc2lvbnMgKHByb3RlY3Rpb24pIG9mIHRoZQorICAgICAgICAgIGdpdmVuIGZpbGUgdG8g dGhlIG9uZXMgZ2l2ZW4uIFRoZSBwZXJtaXNzaW9ucyBhbmQgZmlsZW5hbWUgbXVzdAorICAgICAg ICAgIGJlIGdpdmVuIGluIHdoYXRldmVyIHN5bnRheCBpcyByZXF1aXJlZCBieSB0aGUgc2VydmVy LiBFeGFtcGxlCisgICAgICAgICAgKGZvciBhIFVOSVgtYmFzZWQgRlRQIHNlcnZlcik6CisKKyAg ZnRwIGNobW9kIDY2NCBvb2ZhLnR4dAorCisgICAgICAgICAgTm90IGFsbCBzZXJ2ZXJzIHN1cHBv cnQgdGhpcyBjb21tYW5kLiBGb3Igbm9uLVVOSVgtYmFzZWQKKyAgICAgICAgICBzZXJ2ZXJzLCB5 b3UgbWlnaHQgbmVlZCB0byB1c2UgRlRQIFFVT1RFIG9yIEZUUCBTSVRFIGFuZCB0aGUKKyAgICAg ICAgICBhcHByb3ByaWF0ZSBwbGF0Zm9ybS1zcGVjaWZpYyBGVFAgc2VydmVyIGNvbW1hbmQuCisK KyAgIEZUUCBVTUFTSyBbIG51bWJlciBdCisgICAgICAgICAgVGhpcyBjb21tYW5kIGlzIHByb2Jh Ymx5IHNwZWNpZmljIHRvIFVOSVgtYmFzZWQgc2VydmVyczsgaXQgc2V0cworICAgICAgICAgIHRo ZSBVTklYICJ1bWFzayIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIG1hc2sgZm9y IG5ldworICAgICAgICAgIChpbiB0aGlzIGNhc2UsIGluY29taW5nKSBmaWxlcy4gQ3J1ZGVseSBw dXQsIHRoZSBVTklYIHVtYXNrIGlzCisgICAgICAgICAgYW4gb2N0YWwgcmVwcmVzZW50YXRpb24g b2YgYSBiaW5hcnkgbnVtYmVyIGluIGluIHdoaWNoIGEgMSBiaXQKKyAgICAgICAgICBzdGFuZHMg Zm9yIGEgcGVybWlzc2lvbiBiaXQgdGhhdCBtdXN0IGJlIDAsIGFuZCBhIDAgYml0IHN0YW5kcwor ICAgICAgICAgIGZvciBhIHBlcm1pc3Npb24gYml0IHRoYXQgY2FuIGJlIDAgb3IgMSBkZXBlbmRp bmcgb24gb3RoZXIKKyAgICAgICAgICBmYWN0b3JzLCBzdWNoIGFzIHRoZSBwZXJtaXNzaW9ucyBv ZiB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICBFeGFtcGxlOiAidW1hc2sgMDA3IiBy ZXF1aXJlcyB0aGF0IG5ldyBmaWxlcyBhcmUgY3JlYXRlZCB3aXRob3V0CisgICAgICAgICAgcmVh ZC93cml0ZS9leGVjdXRlIHdvcmxkIHBlcm1pc3Npb24uIElmIHRoZSBudW1iZXIgaXMgbm90Cisg ICAgICAgICAgc3BlY2lmaWVkLCB0aGUgc2VydmVyJ3MgY3VycmVudCB1bWFzayBpcyByZXBvcnRl ZC4KKworICAgRlRQIFJFTkFNRSBmaWxlbmFtZSBuZXduYW1lCisgICAgICAgICAgQXNrcyB0aGUg RlRQIHNlcnZlciB0byByZW5hbWUgdGhlIGZpbGUgd2hvc2UgbmFtZSBpcyAiZmlsZW5hbWUiCisg ICAgICAgICAgdG8gIm5ld25hbWUiLiBXb3JrcyBvbmx5IGZvciBvbmUgZmlsZTsgY2FuIG5vdCBi ZSB1c2VkIHdpdGgKKyAgICAgICAgICB3aWxkY2FyZHMuIFRoZSBzZXJ2ZXIncyBpbnRlcnByZXRh dGlvbiBvZiAibmV3bmFtZSIgY2FuIHZhcnkgKGluCisgICAgICAgICAgc29tZSBjYXNlcyBpdCBt dXN0IGJlIGEgZmlsZW5hbWUsIGluIG90aGVycyBwZXJoYXBzIGl0IGNhbiBhbHNvCisgICAgICAg ICAgYmUgYSBkaXJlY3RvcnkgbmFtZSwgaW4gd2hpY2ggY2FzZSBpZiB0aGUgZmlsZW5hbWUgZGVu b3RlIGEKKyAgICAgICAgICByZWd1bGFyIGZpbGUsIHRoZSBmaWxlIG1pZ2h0IGJlIG1vdmVkIHRv IHRoZSBnaXZlbiBkaXJlY3RvcnkpLgorICAgICAgICAgIFNvbWUgc2VydmVycyBtaWdodCBhbGxv dyBmaWxlcyB0byBiZSByZW5hbWVkICgibW92ZWQiKSBiZXR3ZWVuCisgICAgICAgICAgcGh5c2lj YWwgZGlza3Mgb3IgcGFydGl0aW9ucywgb3RoZXJzIG1pZ2h0IG5vdC4gU3lub255bToKKyAgICAg ICAgICBSUkVOQU1FLgorCisgICBGVFAgREVMRVRFIFsgc3dpdGNoZXMgXSBmaWxlc3BlYyBbIGZp bGVzcGVjIFsgLi4uIF0gXQorICAgICAgICAgIFRlbGxzIHRoZSBGVFAgc2VydmVyIHRvIGRlbGV0 ZSB0aGUgZmlsZSBvciBmaWxlcyBsaXN0ZWQuIEVhY2gKKyAgICAgICAgICBmaWxlIHNwZWNpZmlj YXRpb24gbWF5LCBidXQgbmVlZCBub3QsIGNvbnRhaW4gd2lsZGNhcmQKKyAgICAgICAgICBjaGFy YWN0ZXJzIHRvIG1hdGNoIG11bHRpcGxlIGZpbGVzLiBGaWxlIHNwZWNpZmljYXRpb25zIGFuZAor ICAgICAgICAgIHdpbGRjYXJkIHN5bnRheCBtdXN0IGJlIHRob3NlIG9mIHRoZSBzZXJ2ZXIuIEFu eSBmaWxlCisgICAgICAgICAgc3BlY2lmaWNhdGlvbnMgdGhhdCBjb250YWluIHNwYWNlcyBtdXN0 IGJlIGVuY2xvc2VkIGluIGJyYWNlcyBvcgorICAgICAgICAgIGRvdWJsZXF1b3Rlcy4gRlRQIERF TEVURSBzd2l0Y2hlcyBhcmU6CisKKyAvRVJST1ItQUNUSU9OOiAgL0ZJTEVOQU1FUzogICAgIC9O T0JBQ0tVUEZJTEVTICAvUVVJRVQKKyAvRVhDRVBUOiAgICAgICAgL0xBUkdFUi1USEFOOiAgIC9O T0RPVEZJTEVTICAgICAvTk9QQUdFCisgL1BBR0UgICAgICAgICAgIC9SRUNVUlNJVkUgICAgICAv U01BTExFUi1USEFOOgorCisgICAgICAgICAgV2hlbiB1c2VkIHdpdGggRlRQIERFTEVURSwgdGhl IC9SRUNVUlNJVkUgc3dpdGNoIGRlbGV0ZXMgZmlsZXMKKyAgICAgICAgICBidXQgbm90IGRpcmVj dG9yaWVzLCBhbmQgZnVydGhlcm1vcmUgZGVwZW5kcyBvbiB0aGUgc2VydmVyCisgICAgICAgICAg cHJvdmlkaW5nIHJlY3Vyc2l2ZSBmaWxlIGxpc3RzLCB3aGljaCBpcyBub3QgdGhlIG5vcm1hbAor ICAgICAgICAgIGJlaGF2aW9yLiBGb3IgZnVydGhlciBkZXRhaWxzLCBzZWUgdGhlIGRlc2NyaXB0 aW9ucyBvZiB0aGVzZQorICAgICAgICAgIHN3aXRjaGVzIGluIFsyNzRdU2VjdGlvbiAzLjYuIFN5 bm9ueW1zOiBGVFAgTURFTEVURSAoS2VybWl0CisgICAgICAgICAgbWFrZXMgbm8gZGlzdGluY3Rp b24gYmV0d2VlbiBERUxFVEUgYW5kIE1ERUxFVEUpOyBSREVMRVRFLgorCisgICBGVFAgVFlQRSB7 IFRFWFQsIEJJTkFSWSwgVEVORVggfQorICAgICAgICAgIFRlbGxzIHRoZSBGVFAgc2VydmVyIHRv IGNoYW5nZSBpdHMgZmlsZS10cmFuc2ZlciB0eXBlIHRvIHRoZSBvbmUKKyAgICAgICAgICBnaXZl biwgaW1tZWRpYXRlbHkuIFNlZSBbMjc1XVNFVCBGVFAgVFlQRSBmb3IgZGV0YWlscy4KKworICAg WyBbMjc2XVRvcCBdIFsgWzI3N11GVFAgVG9wIF0gWyBbMjc4XUMtS2VybWl0IEhvbWUgXSBbIFsy NzldS2VybWl0IEhvbWUKKyAgIF0KKworMy41LiBVcGxvYWRpbmcgRmlsZXMgV2l0aCBGVFAKKwor ICAgVXBsb2FkaW5nIG1lYW5zIHNlbmRpbmcgZmlsZXMgZnJvbSB0aGUgY2xpZW50IChLZXJtaXQp IHRvIHRoZSBGVFAKKyAgIHNlcnZlci4gVGhlIGJhc2ljIGNvbW1hbmQgZm9yIHVwbG9hZGluZyBm aWxlcyB3aXRoIEZUUCBpcyBQVVQ6CisKKyAgIEZUUCBQVVQgWyBzd2l0Y2hlcyBdIFsgZmlsZXNw ZWMgWyBhcy1uYW1lIF0gXQorICAgICAgICAgIFVwbG9hZHMgKHNlbmRzKSB0aGUgZmlsZSBvciBm aWxlcyB0aGF0IG1hdGNoIHRoZSBmaWxlCisgICAgICAgICAgc3BlY2lmaWNhdGlvbiwgd2hpY2gg bWF5IGluY2x1ZGUgd2lsZGNhcmRzLCB0byB0aGUgc2VydmVyLiBJZiBubworICAgICAgICAgIGZp bGVzcGVjIGlzIGdpdmVuLCB0aGUgbmFtZXMgb2YgZmlsZXMgdG8gc2VuZCBhcmUgdGFrZW4gZnJv bSB0aGUKKyAgICAgICAgICAvTElTVEZJTEU6IGZpbGUsIGlmIGFueSwgb3RoZXJ3aXNlIGZyb20g dGhlIFNFTkQtTElTVCwgaWYgYW55LgorICAgICAgICAgIFVubGVzcyB5b3UgZ28gb3V0IG9mIHlv dXIgd2F5IHRvIHByZXZlbnQgaXQsIEtlcm1pdCBkZXRlcm1pbmVzCisgICAgICAgICAgdGhlIHRy YW5zZmVyIG1vZGUgKHRleHQgb3IgYmluYXJ5KSBmb3IgZWFjaCBmaWxlIGF1dG9tYXRpY2FsbHks CisgICAgICAgICAgYW5kIHN3aXRjaGVzIGF1dG9tYXRpY2FsbHkgb24gYSBwZXItZmlsZSBiYXNp cy4gSWYgYW4gYXMtbmFtZSBpcworICAgICAgICAgIGdpdmVuLCB0aGUgZmlsZSBpcyBzZW50IHVu ZGVyIHRoYXQgbmFtZSBpbnN0ZWFkIG9mIGl0cyBvd24gKGlmCisgICAgICAgICAgYW4gYXMtbmFt ZSBpcyBnaXZlbiB3aXRoIGEgd2lsZGNhcmQgZmlsZXNwZWMsIHRoZSByZXN1bHQgaXMgYQorICAg ICAgICAgIGJpdCBtb3JlIGNvbXBsaWNhdGVkLCBhbmQgaXMgZXhwbGFpbmVkIGxhdGVyIGluIHRo aXMgc2VjdGlvbikuCisKKyAgIFVubGlrZSBub3JtYWwgRlRQIGNsaWVudHMsIEtlcm1pdCBkb2Vz IG5vdCBwcm9tcHQgeW91IGJ5IGRlZmF1bHQgKG9yIGF0CisgICBhbGwpIGZvciBlYWNoIGZpbGU7 IGl0IGp1c3Qgc2VuZHMgdGhlbSwganVzdCBhcyBpdCBkb2VzIHdpdGggS2VybWl0CisgICBwcm90 b2NvbC4gVGhlIGZpbGVzcGVjIGNhbiBiZSBhIGxpdGVyYWwgZmlsZW5hbWUgb3IgYSBLZXJtaXQg cGF0dGVybiwKKyAgIGRlc2NyaWJlZCBpbjoKKworICBbMjgwXWh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4NC45CisKKyAgIEtlcm1pdCBwYXR0ZXJucyBhcmUg ZXF1aXZhbGVudCB0byBDLVNoZWxsIHBhdHRlcm5zIGFuZCBwcm92aWRlIGEgZmFpcgorICAgYW1v dW50IG9mIGZsZXhpYmlsaXR5IGluIHNlbGVjdGluZyB3aGljaCBmaWxlcyB0byBzZW5kLCB3aGlj aCBpcworICAgYXVnbWVudGVkIGJ5IHRoZSBmaWxlLXNlbGVjdGlvbiBzd2l0Y2hlcyBwcmVzZW50 ZWQgaW4gWzI4MV1TZWN0aW9uCisgICAzLjUuMS4KKworICAgRlRQIE1QVVQgWyBzd2l0Y2hlcyBd IGZpbGVzcGVjIFsgZmlsZXNwZWMgWyAuLi4gXSBdCisgICAgICAgICAgRlRQIE1QVVQgaXMganVz dCBsaWtlIEZUUCBQVVQgZXhjZXB0IGl0IGFsbG93cyB5b3UgdG8gZ2l2ZSBtb3JlCisgICAgICAg ICAgdGhhbiBvbmUgZmlsZSBzcGVjaWZpY2F0aW9uLCBhbmQgaXQgZG9lcyBub3QgYWxsb3cgYW4g YXMtbmFtZSBpbgorICAgICAgICAgIHRoZSBmaWxlIGxpc3QuIEhvd2V2ZXIsIGFzLW5hbWVzIGNh biBiZSBnaXZlbiB0byBlaXRoZXIgUFVUIG9yCisgICAgICAgICAgTVBVVCB3aXRoIHRoZSAvQVMt TkFNRTogc3dpdGNoLgorCisgICBJZiBhIFBVVCBvciBNUFVUIGNvbW1hbmQgcmVzdWx0cyBpbiBv bmUgZmlsZSBiZWluZyB1cGxvYWRlZCwgaXQKKyAgIHN1Y2NlZWRzIGlmIHRoZSBmaWxlIGlzIHVw bG9hZGVkIGNvbXBsZXRlbHkgYW5kIGZhaWxzIG90aGVyd2lzZS4gSWYKKyAgIG1vcmUgdGhhbiBv bmUgZmlsZSBpcyBzZWxlY3RlZCBmb3IgdXBsb2FkLCBzdWNjZXNzIG9yIGZhaWx1cmUgZGVwZW5k cworICAgb24gdGhlIFsyODJdRlRQIEVSUk9SLUFDVElPTiBzZXR0aW5nOyBpZiBpdCBpcyBQUk9D RUVEICh0aGUgZGVmYXVsdAorICAgc2V0dGluZyksIHRoZW4gdGhlIFtNXVBVVCBjb21tYW5kIHN1 Y2NlZWRzIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgZmlsZXMKKyAgIHdhcyBjb21wbGV0ZWx5IHVw bG9hZGVkLCBhbmQgZmFpbHMgb3RoZXJ3aXNlLCBJZiBGVFAgRVJST1ItQUNUSU9OIGlzCisgICBR VUlULCB0aGUgW01dUFVUIGNvbW1hbmQgc3VjY2VlZHMgaWYgYWxsIHNlbGVjdGVkIGZpbGVzIHdl cmUgdXBsb2FkZWQKKyAgIHN1Y2Nlc3NmdWxseSwgYW5kIGZhaWxzIGlmIGFueSBmaWxlIGZhaWxl ZC4KKworICAgRlRQIHVwbG9hZHMgbWF5IGJlIGludGVycnVwdGVkIGp1c3QgbGlrZSBLZXJtaXQg dXBsb2Fkcy4gV2hpbGUgdGhlCisgICB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcywgdHlwZToKKwor ICBYIHRvIGludGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBnbyBvbiB0byB0aGUgbmV4dCBm aWxlLgorICBaIHRvIGNhbmNlbCB0aGUgY3VycmVudCBmaWxlIGFuZCBhbGwgcmVtYWluaW5nIGZp bGVzLgorICBeQyAoQ29udHJvbC1DKTogTGlrZSBaLCBidXQgbWlnaHQgYWN0IG1vcmUgcXVpY2ts eS4KKworICAgTVBVVCBtYXkgYmUgdXNlZCBhcyBpbiByZWd1bGFyIEZUUCBjbGllbnRzLCBidXQg aXQgaXMgbm90IHJlcXVpcmVkIHRvCisgICBzZW5kIG11bHRpcGxlIGZpbGVzOyBpbiBLZXJtaXQg aXQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugd2FudCB0byBnaXZlCisgICBtdWx0aXBsZSBmaWxl IHNwZWNpZmljYXRpb25zLiBFeGFtcGxlczoKKworICBmdHAgcHV0IG9vZmEudHh0ICAgICAgICAg ICAgICAgOyBTZW5kIGEgc2luZ2xlIGZpbGUgb29mYS50eHQKKyAgZnRwIHB1dCBvb2ZhLnR4dCBi dWRnZXQudHh0ICAgIDsgU2VuZCBzaW5nbGUgZmlsZSBvb2ZhLnR4dCBhcyBidWRnZXQudHh0Cisg IGZ0cCBwdXQgKi50eHQgICAgICAgICAgICAgICAgICA7IFNlbmQgYWxsICoudHh0IGZpbGVzCisg IGZ0cCBtcHV0ICoudHh0ICAgICAgICAgICAgICAgICA7IFNlbmQgYWxsICoudHh0IGZpbGVzIChz YW1lIGFzICJwdXQgKi50eHQiKQorICBmdHAgbXB1dCAqLnR4dCBmb28uYmFyICAgICAgICAgOyBT ZW5kIGFsbCAqLnR4dCBmaWxlcyBwbHVzIGZvby5iYXIKKworICAgVGhlIGRpc3RpbmN0aW9uIGJl dHdlZW4gUFVUIGFuZCBNUFVUIGlzIGltcG9ydGFudCBvbmx5IHdoZW4gbW9yZSB0aGFuCisgICBv bmUgZmlsZXNwZWMgaXMgZ2l2ZW4sIGp1c3QgbGlrZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBL ZXJtaXQgU0VORAorICAgYW5kIE1TRU5EOgorCisgIGZ0cCBwdXQgb29mYS50eHQgYnVkZ2V0LnR4 dCAgICA7IFNlbmQgb29mYS50eHQgQVMgYnVkZ2V0LnR4dAorICBmdHAgbXB1dCBvb2ZhLnR4dCBi dWRnZXQudHh0ICAgOyBTZW5kIG9vZmEudHh0IEFORCBidWRnZXQudHh0CisKKyAgIElmIHRoZSBz b3VyY2UgZmlsZSBzcGVjaWZpY2F0aW9uIGluY2x1ZGVzIGFueSBwYXRoIHNlZ21lbnRzLCBmb3IK KyAgIGV4YW1wbGU6CisKKyAgcHV0IC90bXAvb29mYS50eHQKKyAgcHV0IHN1YmRpci9hbm90aGVy L2FuZGFub3RoZXIvb29mYS50eHQKKworICAgdGhlIHBhdGggcG9ydGlvbiBpcyBzdHJpcHBlZCBm cm9tIHRoZSBmaWxlbmFtZSB0aGF0IGlzIHNlbnQgdG8gdGhlCisgICBzZXJ2ZXIuIEhvd2V2ZXIs IGlmIGFuIGFzLW5hbWUgY29udGFpbnMgYSBwYXRoLCBpdCBpcyByZXRhaW5lZC4KKyAgIEV4YW1w bGVzOgorCisgIGZ0cCBwdXQgL3Vzci9kb2Mvb29mYS50eHQgICAgICA7IFNlbmQgYXMgIm9vZmEu dHh0Ii4KKyAgZnRwIHB1dCBvb2ZhLnR4dCAvdG1wL29vZmEudHh0IDsgU2VuZCBhcyAiL3RtcC9v b2ZhLnR4dCIKKworICAgVGhlIGxhdHRlciBleGFtcGxlIHNlbmRzIHRoZSBmaWxlIG9vZmEudHh0 IGZyb20geW91ciBjdXJyZW50IGxvY2FsCisgICBkaXJlY3RvcnkgdG8gdGhlIHNlcnZlcidzIC90 bXAgZGlyZWN0b3J5LiBUaGlzIHdvcmtzIG9ubHkgaWYgdGhlIHNlcnZlcgorICAgdXNlcyB0aGUg c2FtZSBkaXJlY3Rvcnkgbm90YXRpb24gdGhhdCB5b3UgdXNlZCBpbiB0aGUgYXMtbmFtZSBBTkQg dGhlCisgICBnaXZlbiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgb24gdGhlIHNlcnZlciBBTkQg aWYgeW91IGhhdmUgd3JpdGUKKyAgIGFjY2VzcyB0byBpdC4KKworICAgVXNlIGNhdXRpb24gd2hl biB1cGxvYWRpbmcgZnJvbSBhIGNhc2Utc2Vuc2l0aXZlIGZpbGUgc3lzdGVtLCBzdWNoIGFzCisg ICBVTklYLCB0byBhIGZpbGUgc3lzdGVtIHRoYXQgaXMgbm90IGNhc2Ugc2Vuc2l0aXZlLCBzdWNo IGFzIFdpbmRvd3Mgb3IKKyAgIFZNUy4gSWYgeW91IGhhdmUgdHdvIGZpbGVzIGluIFVOSVgsIEFB IGFuZCBhYSBhbmQgdXBsb2FkIGJvdGggb2YgdGhlbSwKKyAgIHRoZSBzZWNvbmQgb25lIHdpbGwg b3ZlcndyaXRlIHRoZSBmaXJzdC4gVGhlIG9ubHkgd2F5IGFyb3VuZCB0aGlzCisgICBwcm92aWRl ZCBieSBGVFAgcHJvdG9jb2wgaXMgaXRzICJ1bmlxdWUgc2VydmVyIG5hbWVzIiBmZWF0dXJlIChT RVQgRlRQCisgICBVTklRVUUtU0VSVkVSLU5BTUVTIG9yIHRoZSAvVU5JUVVFIHN3aXRjaCBkZXNj cmliZWQgYmVsb3cpLgorCiszLjUuMS4gRlRQIFBVVCBTd2l0Y2hlcworCisgICBGVFAgUFVUIGFu ZCBNUFVUIGFyZSBzaW1pbGFyIGluIGZvcm1hdCBhbmQgYmVoYXZpb3IgdG8gdGhlIHJlZ3VsYXIK KyAgIEtlcm1pdCBTRU5EIGFuZCBNU0VORCBjb21tYW5kcywgYW5kIHRoZXkgYWxsb3cgbW9zdCBv ZiB0aGUgc2FtZQorICAgb3B0aW9uYWwgc3dpdGNoZXM6CisKK0MtS2VybWl0PmZ0cCBwdXQgPyBG aWxlbmFtZSwgb3Igc3dpdGNoLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAvYWZ0ZXI6ICAgICAg ICAgICAgICAgICAvbGFyZ2VyLXRoYW46ICAgICAgICAgICAvcmVuYW1lLXRvOgorIC9hcnJheTog ICAgICAgICAgICAgICAgIC9saXN0ZmlsZTogICAgICAgICAgICAgIC9zZXJ2ZXItY2hhcmFjdGVy LXNldDoKKyAvYXMtbmFtZTogICAgICAgICAgICAgICAvbG9jYWwtY2hhcmFjdGVyLXNldDogICAv c2VydmVyLXJlbmFtZS10bzoKKyAvYmVmb3JlOiAgICAgICAgICAgICAgICAvbW92ZS10bzogICAg ICAgICAgICAgICAvc2ltdWxhdGUKKyAvYmluYXJ5ICAgICAgICAgICAgICAgICAvbm9iYWNrdXBm aWxlcyAgICAgICAgICAvc21hbGxlci10aGFuOgorIC9jb21tYW5kICAgICAgICAgICAgICAgIC9u b2RvdGZpbGVzICAgICAgICAgICAgIC90ZW5leAorIC9kZWxldGUgICAgICAgICAgICAgICAgIC9u b2ZvbGxvd2xpbmtzICAgICAgICAgIC90ZXh0CisgL2RvdGZpbGVzICAgICAgICAgICAgICAgL25v dC1hZnRlcjogICAgICAgICAgICAgL3RyYW5zcGFyZW50CisgL2Vycm9yLWFjdGlvbjogICAgICAg ICAgL25vdC1iZWZvcmU6ICAgICAgICAgICAgL3R5cGU6CisgL2V4Y2VwdDogICAgICAgICAgICAg ICAgL3Blcm1pc3Npb25zOiAgICAgICAgICAgL3VwZGF0ZQorIC9maWxlbmFtZXM6ICAgICAgICAg ICAgIC9xdWlldCAgICAgICAgICAgICAgICAgIC91bmlxdWUtc2VydmVyLW5hbWVzCisgL2ZpbHRl cjogICAgICAgICAgICAgICAgL3JlY292ZXIKKyAvZm9sbG93bGlua3MgICAgICAgICAgICAvcmVj dXJzaXZlCisKKyAgIFNpbmNlIG1vc3Qgb2YgdGhlc2Ugc3dpdGNoZXMgYXJlIGNvbW1vbiB0byBL ZXJtaXQncyBTRU5EIGFuZCBNU0VORAorICAgY29tbWFuZHMsIHRoZXkgZGVzY3JpYmVkIG9ubHkg YnJpZWZseSBoZXJlLiBGb3IgZ3JlYXRlciBkZXRhaWwgc2VlOgorCisgICAgIFsyODNdaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjUgKGV4cGxhbmF0aW9u CisgICBvZiBzd2l0Y2hlcykKKyAgICAgWzI4NF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDcwLmh0bWwjeDQuNworICAgKGZpbGUtdHJhbnNmZXIgc3dpdGNoZXMpCisKKyAg IEZpcnN0IHRoZSBmaWxlLXNlbGVjdGlvbiBzd2l0Y2hlczoKKworICAgL0FGVEVSOmRhdGUtdGlt ZQorICAgL0JFRk9SRTpkYXRlLXRpbWUKKyAgIC9OT1QtQUZURVI6ZGF0ZS10aW1lCisgICAvTk9U LUJFRk9SRTpkYXRlLXRpbWUKKyAgICAgICAgICBPbmx5IHNlbmQgdGhvc2UgZmlsZXMgbW9kaWZp ZWQgb24gb3IgYWZ0ZXIgb3IgYmVmb3JlIHRoZSBnaXZlbgorICAgICAgICAgIGRhdGUgYW5kIHRp bWUuIFRoZXNlIHN3aXRjaGVzIGNhbiBiZSBjb21iaW5lZCB0byBzZWxlY3QgZmlsZXMKKyAgICAg ICAgICBtb2RpZmllZCBiZXR3ZWVuIHR3byBkYXRlL3RpbWVzLiBWYXJpb3VzIGRhdGUtdGltZSBm b3JtYXRzIGFyZQorICAgICAgICAgIGFjY2VwdGVkOyBpZiB0aGUgZGF0ZS10aW1lIGNvbnRhaW5z IHNwYWNlcywgaXQgbXVzdCBiZSBlbmNsb3NlZAorICAgICAgICAgIGluIGJyYWNlcyBvciBkb3Vi bGVxdW90ZXMuIFNlZQorICAgICAgICAgIFsyODVdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ3MC5odG1sI3gxLjYgYW5kCisgICAgICAgICAgWzI4Nl1TZWN0aW9uIDguMTMg b2YgdGhpcyBkb2N1bWVudCBmb3IgZGV0YWlscyBhYm91dCBkYXRlLXRpbWUKKyAgICAgICAgICBm b3JtYXRzLiBFeGFtcGxlczoKKworICBmdHAgcHV0IC9hZnRlcjp7MSBqYW4gMjAwMCAwOjAwOjAw fSAqCisgIGZ0cCBwdXQgL2FmdGVyOi01ZGF5cyAqCisKKyAgIC9MQVJHRVItVEhBTjpudW1iZXIK KyAgIC9TTUFMTEVSLVRIQU46bnVtYmVyCisgICAgICAgICAgT25seSBzZW5kIGZpbGVzIGxhcmdl ciAoc21hbGxlcikgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzCisgICAgICAgICAgKG9j dGV0cykuIFRoZXNlIHN3aXRjaGVzIGNhbiBiZSBjb21iaW5lZCB0byBzZWxlY3QgZmlsZXMgaW4g YQorICAgICAgICAgIGNlcnRhaW4gc2l6ZSByYW5nZS4KKworICAgL1RZUEU6e1RFWFQsQklOQVJZ fQorICAgICAgICAgIE9ubHkgc2VuZCBmaWxlcyB0aGF0IGFyZSB0aGUgZ2l2ZW4gdHlwZSwgd2hp Y2ggaXMgZGV0ZXJtaW5lZCBmb3IKKyAgICAgICAgICBlYWNoIGZpbGUganVzdCBiZWZvcmUgc2Vu ZGluZyBpdCBieSBmaWxlIHNjYW5uaW5nLiBCSU5BUlkKKyAgICAgICAgICBpbmNsdWRlcyBURU5F WDsgaWYgeW91IGhhdmUgaW5jbHVkZWQgYSAvVEVORVggc3dpdGNoLCBvcgorICAgICAgICAgIHBy ZXZpb3VzbHkgZ2l2ZW4gYSBbU0VUXSBGVFAgVFlQRSBURU5FWCBjb21tYW5kLCBiaW5hcnkgZmls ZXMKKyAgICAgICAgICBhcmUgc2VudCBpbiBURU5FWCwgcmF0aGVyIHRoYW4gQklOQVJZIG1vZGUu CisKKyAgIC9bTk9dRE9URklMRVMKKyAgICAgICAgICBbRG9uJ3RdIGluY2x1ZGUgZmlsZXMgd2hv c2UgbmFtZXMgYmVnaW4gd2l0aCBkb3QgKC4pLiBCeQorICAgICAgICAgIGRlZmF1bHQsIHN1Y2gg ZmlsZXMgYXJlIG5vdCBpbmNsdWRlZCB1bmxlc3MgeW91ciBmaWxlc3BlYworICAgICAgICAgIGV4 cGxpY2l0bHkgbWVudGlvbnMgdGhlbS4KKworICAgL05PQkFDS1VQRklMRVMKKyAgICAgICAgICBE b24ndCBpbmNsdWRlIGZpbGVzIHdob3NlIG5hbWVzIGVuZCB3aXRoIC5+bm5ufiwgd2hlcmUgbm5u IGlzIGEKKyAgICAgICAgICBudW1iZXIsIGUuZy4gb29mYS50eHQufjI3fi4gVGhlc2UgYXJlIGJh Y2t1cCBmaWxlcyBjcmVhdGVkIGJ5CisgICAgICAgICAgS2VybWl0LCBFTUFDUywgYW5kIG90aGVy IGFwcGxpY2F0aW9ucy4gQnkgZGVmYXVsdCwgYmFja3VwIGZpbGVzCisgICAgICAgICAgYXJlIGlu Y2x1ZGVkLgorCisgICAvTk9GT0xMT1dMSU5LUworICAgICAgICAgIChVTklYIG9ubHkpIFNraXAg b3ZlciBzeW1ib2xpYyBsaW5rcyByYXRoZXIgdGhhbiBmb2xsb3dpbmcgdGhlbQorICAgICAgICAg IChkZWZhdWx0KS4gVGhpcyBhcHBsaWVzIHRvIHdpbGRjYXJkIGFuZC9vciByZWN1cnNpdmUgW01d UFVUczsgaWYKKyAgICAgICAgICBhIHNpbmdsZSBmaWxlbmFtZSBpcyBnaXZlbiwgYW5kIGl0IGhh cHBlbnMgdG8gYmUgYSBzeW1ib2xpYworICAgICAgICAgIGxpbmssIHRoZSBmaWxlIGl0IHBvaW50 cyB0byBpcyBzZW50LgorCisgICAvRk9MTE9XTElOS1MKKyAgICAgICAgICAoVU5JWCBvbmx5KSBB bHdheXMgZm9sbG93IChyZXNvbHZlKSBzeW1ib2xpYyBsaW5rcywgZXZlbiBpbgorICAgICAgICAg IHdpbGRjYXJkIG9yIHJlY3Vyc2l2ZSBbTV1QVVRzLiBVc2Ugd2l0aCBjYXV0aW9uLiBXYXRjaCBv dXQgZm9yCisgICAgICAgICAgY2lyY3VsYXIgbGlua3MsIGVuZGxlc3MgbG9vcHMsIGV0Yy4KKwor ICAgL0VYQ0VQVDpwYXR0ZXJuCisgICAgICAgICAgRXhjZXB0aW9uIGxpc3QgLS0gZG9uJ3Qgc2Vu ZCBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgICBwYXR0ZXJuLiBT ZWUgWzI4N11TZWN0aW9uIDEuNS40IG9mIHRoZSBbMjg4XUMtS2VybWl0IDcuMCBVcGRhdGUKKyAg ICAgICAgICBOb3RlcyBmb3IgZGV0YWlscy4gSWYgeW91IHdhbnQgdG8gZXhjbHVkZSBhIGRpcmVj dG9yeSBmcm9tIGEKKyAgICAgICAgICByZWN1cnNpdmUgW01dUFVULCB1c2UgL0VYQ0VQVDp7ZGly bmFtZS8qfS4KKworICAgL1JFQ1VSU0lWRQorICAgICAgICAgIFNlbmRzIHRoZSBkZXNpcmVkIGZp bGVzIGZyb20gdGhlIGN1cnJlbnQgKG9yIGdpdmVuKSBkaXJlY3RvcnksCisgICAgICAgICAgcGx1 cyBhbGwgZGlyZWN0b3JpZXMgYmVuZWF0aCBpdCwgaW5jbHVkaW5nIGVtcHR5IGRpcmVjdG9yaWVz LAorICAgICAgICAgIHJlcGxpY2F0aW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9uIHRoZSBz ZXJ2ZXIuIE5vIHNwZWNpYWwKKyAgICAgICAgICBjYXBhYmlsaXRpZXMgYXJlIHJlcXVpcmVkIGlu IHRoZSBzZXJ2ZXIsIGJ1dCBvZiBjb3Vyc2UgeW91cgorICAgICAgICAgIGxvZ2luIElEIG9uIHRo ZSBzZXJ2ZXIgbXVzdCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBhY2Nlc3MgYW5kCisgICAgICAgICAg cGVybWlzc2lvbiB0byBjcmVhdGUgZGlyZWN0b3JpZXMuIFJlY3Vyc2l2ZSBQVVRzIHdvcmsgbm90 IG9ubHkKKyAgICAgICAgICBiZXR3ZWVuIGxpa2UgcGxhdGZvcm1zIChlLmcuIFVOSVggdG8gVU5J WCkgYnV0IGFsc28gYmV0d2VlbgorICAgICAgICAgIHVubGlrZSBvbmVzIChlLmcuIFVOSVggdG8g Vk1TIG9yIFdpbmRvd3MpLCBpbiB3aGljaCBjYXNlCisgICAgICAgICAgdGV4dC1maWxlIGZvcm1h dCBkaWZmZXJlbmNlcyBhcmUgaGFuZGxlZCBieSBLZXJtaXQncyBhdXRvbWF0aWMKKyAgICAgICAg ICB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZyAoWzI4OV1TZWN0aW9uIDQpIGFuZCBjaGFyYWN0 ZXItc2V0CisgICAgICAgICAgdHJhbnNsYXRpb24gKFsyOTBdU2VjdGlvbiAzLjcpLiBTeW5vbnlt OiAvU1VCRElSRUNUT1JJRVMuCisKKyAgIC9VUERBVEUKKyAgICAgICAgICBTZW5kIG9ubHkgZmls ZXMgdGhhdCBoYXZlIGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lIChbMjkxXVNlY3Rpb24KKyAgICAg ICAgICAzLjUuMikuCisKKyAgIC9BUlJBWTphcnJheW5hbWUKKyAgICAgICAgICBUaGUgImZpbGUi IHRvIGJlIHNlbnQgaXMgYW4gYXJyYXksIG9yIGEgc2VnbWVudCBvZiBvbmUsIHJhdGhlcgorICAg ICAgICAgIHRoYW4gYSByZWFsIGZpbGUuIEluIHRoaXMgY2FzZSB0aGUgb3RoZXIgc2VsZWN0aW9u IHN3aXRjaGVzCisgICAgICAgICAgZG9uJ3QgYXBwbHkuIFRoZSBhcnJheSBjb250ZW50cyBhcmUg c2VudCBpbiB0ZXh0IG1vZGUsIGFuZCBlYWNoCisgICAgICAgICAgYXJyYXkgZWxlbWVudCBpcyB0 cmVhdGVkIGFzIGEgbGluZS4gRXhhbXBsZToKKworICBmdHAgcHV0IC9hcy1uYW1lOmFycmF5LnR4 dCAvYXJyYXk6JmEKKworICAgICAgICAgIChvciwgdG8gc2VuZCBhIHNlZ21lbnQgb2YgdGhlIGFy cmF5LCAvYXJyYXk6JmFbMTAwOjE5OV0pLiBJZiB5b3UKKyAgICAgICAgICBkb24ndCBpbmNsdWRl IGFuIC9BUy1OQU1FLCBhIG5hbWUgb2YgIl9hcnJheV94XyIgaXMgdXNlZCAod2hlcmUKKyAgICAg ICAgICB4IGlzIHRoZSBhcnJheSBsZXR0ZXIpLiBJZiB5b3UgaW5jbHVkZSB0aGlzIHN3aXRjaCwg bW9zdCBvdGhlcgorICAgICAgICAgIHN3aXRjaGVzIGFyZSBtZWFuaW5nbGVzcyBhbmQgaWdub3Jl ZC4KKworICAgL0NPTU1BTkQKKyAgICAgICAgICBUaGUgImZpbGUiIHRvIGJlIHNlbnQgaXMgdGhl IHN0YW5kYXJkIG91dHB1dCBvZiBhIGNvbW1hbmQsCisgICAgICAgICAgcmF0aGVyIHRoYW4gYSBy ZWFsIGZpbGUuIEl0IGlzIHNlbnQgaW4gdGV4dCBvciBiaW5hcnkgbW9kZQorICAgICAgICAgIGFj Y29yZGluZyB0byB0aGUgcHJldmFpbGluZyBGVFAgVFlQRSwgd2hpY2ggY2FuIGJlIG92ZXJyaWRk ZW4KKyAgICAgICAgICB3aXRoIGEgL1RFWFQgb3IgL0JJTkFSWSBzd2l0Y2guIEV4YW1wbGU6IEV4 YW1wbGU6CisKKyAgZnRwIHB1dCAvY29tbWFuZCAvYXMtbmFtZTp7dXNlcmxpc3R9IHtmaW5nZXIg fCBzb3J0IC1yfQorCisgICAvTElTVEZJTEU6ZmlsZW5hbWUKKyAgICAgICAgICBUZWxscyBLZXJt aXQgdG8gb2J0YWluIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlIHNlbnQgZnJvbSB0aGUKKyAgICAg ICAgICBmaWxlIHdob3NlIG5hbWUgaXMgZ2l2ZW4uIFRoaXMgZmlsZSBtdXN0IGNvbnRhaW4gb25l IGZpbGUKKyAgICAgICAgICBzcGVjaWZpY2F0aW9uICh3aGljaCBtYXkgYmUgd2lsZCkgcGVyIGxp bmUuIElmIHRoZSBsaXN0IGluY2x1ZGVzCisgICAgICAgICAgZmlsZXMgZnJvbSBkaWZmZXJlbnQg ZGlyZWN0b3JpZXMsIHN1Y2ggYXMgYSByZWN1cnNpdmUgbGlzdGluZyBvZgorICAgICAgICAgIGEg ZGlyZWN0b3J5IHRyZWUsIHRoZSBwYXRocyBhcmUgcmVjcmVhdGVkIG9uIHRoZSBzZXJ2ZXIgKGlm CisgICAgICAgICAgcG9zc2libGUpIGlmIHlvdSBpbmNsdWRlIHRoZSAvUkVDVVJTSVZFIHN3aXRj aDsgb3RoZXJ3aXNlIGFsbAorICAgICAgICAgIHRoZSBmaWxlcyBhcmUgc2VudCB0byB0aGUgY3Vy cmVudCBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlci4KKworICAgTm93IHRoZSBvdGhlciBzd2l0Y2hl czoKKworICAgL0FTLU5BTUU6dGV4dAorICAgICAgICAgIElmIGEgc2luZ2xlIGZpbGUgaXMgYmVp bmcgc2VudCwgc2VuZCBpdCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFzCisgICAgICAgICAgaXRzIG5h bWUuIElmIG11bHRpcGxlIGZpbGVzIGFyZSBiZWluZyBzZW50LCB0aGUgdGV4dCBtdXN0IGJlIGEK KyAgICAgICAgICB0ZW1wbGF0ZSB0aGF0IGluY2x1ZGVzIHZhcmlhYmxlcyBzdWNoIGFzIFx2KGZp bGVuYW1lKSwKKyAgICAgICAgICBcdihmaWxlbnVtYmVyKSwgXHYobnRpbWUpLCB0byBhbGxvdyBk eW5hbWljIGNyZWF0aW9uIG9mIGVhY2gKKyAgICAgICAgICBuYW1lLiBUaGUgc2FtZSBhcHBsaWVz IHRvIHRoZSBhcy1uYW1lIGZpZWxkIG9mIHRoZSBGVFAgUFVUCisgICAgICAgICAgY29tbWFuZC4g SWYgdGhpcyBzd2l0Y2ggaXMgbm90IGluY2x1ZGVkIChhbmQgYW4gYXMtbmFtZSBpcyBub3QKKyAg ICAgICAgICBpbmNsdWRlZCBhcyB0aGUgc2Vjb25kIGZpbGVuYW1lIHRvIFBVVCksIGVhY2ggZmls ZSBpcyBzZW50IHdpdGgKKyAgICAgICAgICBpdHMgb3duIG5hbWUuCisKKyAgIC9CSU5BUlkKKyAg IC9URVhUCisgICAvVEVORVgKKyAgICAgICAgICBGb3JjZXMgdGhpcyB1cGxvYWQgdG8gdGFrZSBw bGFjZSBpbiB0aGUgZ2l2ZW4gbW9kZSwgcmVnYXJkbGVzcworICAgICAgICAgIG9mIHRoZSBjdXJy ZW50IEZUUCBUWVBFIHNldHRpbmcsIGFuZCB3aXRob3V0IGF1dG9tYXRpYworICAgICAgICAgIHRl eHQvYmluYXJ5IHN3aXRjaGluZy4gL0FTQ0lJIGlzIGEgc3lub255bSBmb3IgL1RFWFQuCisKKyAg IC9GSUxURVI6Y29tbWFuZAorICAgICAgICAgIFNwZWNpZmllcyB0aGF0IHRoZSBmaWxlKHMpIGlz L2FyZSB0byBiZSBwYXNzZWQgdGhyb3VnaCB0aGUgZ2l2ZW4KKyAgICAgICAgICBjb21tYW5kIG9y IHBpcGVsaW5lIG9uIHRoZWlyIHdheSB0byB0aGUgc2VydmVyLiBFeGFtcGxlOgorCisgIGZ0cCBw dXQgL2JpbmFyeSAvZmlsdGVyOntnemlwIC1jIFx2KGZpbGVuYW1lKX0gL2FzLW5hbWU6XHYoZmls ZW5hbWUpLmd6ICoKKworICAgL1RSQU5TUEFSRU5UCisgICAvTE9DQUwtQ0hBUkFDVEVSLVNFVDpu YW1lCisgICAvU0VSVkVSLUNIQVJBQ1RFUi1TRVQ6bmFtZQorICAgICAgICAgIENoYXJhY3Rlci1z ZXQgdHJhbnNsYXRpb24gZm9yIHRleHQgZmlsZXMsIGV4cGxhaW5lZCBpbgorICAgICAgICAgIFsy OTJdU2VjdGlvbiAzLjcuCisKKyAgIC9FUlJPUi1BQ1RJT046e1BST0NFRUQsUVVJVH0KKyAgICAg ICAgICBPdmVycmlkZXMgdGhlIHByZXZhaWxpbmcgWzI5M11GVFAgRVJST1ItQUNUSU9OIGZvciB0 aGUgZHVyYXRpb24KKyAgICAgICAgICBvZiB0aGlzIFBVVCBvciBNUFVUIGNvbW1hbmQgb25seS4K KworICAgL1JFQ09WRVIKKyAgICAgICAgICBSZXN1bWUgYW4gaW50ZXJydXB0ZWQgdHJhbnNmZXIg d2hlcmUgZnJvbSB0aGUgcG9pbnQgb2YKKyAgICAgICAgICBpbnRlcnJ1cHRpb24gKGV4cGxhaW5l ZCBpbiBbMjk0XVNlY3Rpb24gMy41LjIpLiBTeW5vbnltOgorICAgICAgICAgIC9SRVNUQVJULgor CisgICAvREVMRVRFCisgICAgICAgICAgVGVsbHMgS2VybWl0IHRvIGRlbGV0ZSBlYWNoIHNvdXJj ZSBmaWxlIGltbWVkaWF0ZWx5IGFmdGVyLCBhbmQKKyAgICAgICAgICBvbmx5IGlmLCBpdCBoYXMg YmVlbiB1cGxvYWRlZCBjb21wbGV0ZWx5IGFuZCBzdWNjZXNzZnVsbHkuIFRoaXMsCisgICAgICAg ICAgaW4gZWZmZWN0LCBtb3ZlcyB0aGUgZmlsZSBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZl ci4KKworICAgL01PVkUtVE86ZGlyZWN0b3J5CisgICAgICAgICAgVGVsbHMgS2VybWl0IHRvIG1v dmUgZWFjaCBzb3VyY2UgZmlsZSB0byB0aGUgbmFtZWQgbG9jYWwKKyAgICAgICAgICBkaXJlY3Rv cnkgYWZ0ZXIsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiB1cGxvYWRlZCBjb21wbGV0ZWx5Cisg ICAgICAgICAgYW5kIHN1Y2Nlc3NmdWxseS4KKworICAgL1JFTkFNRS1UTzp0ZW1wbGF0ZQorICAg ICAgICAgIFRlbGxzIEtlcm1pdCB0byByZW5hbWUgZWFjaCAobG9jYWwpIHNvdXJjZSBmaWxlIGFj Y29yZGluZyB0byB0aGUKKyAgICAgICAgICBnaXZlbiB0ZW1wbGF0ZSBhZnRlciwgYW5kIG9ubHkg aWYsIGl0IGhhcyBiZWVuIHVwbG9hZGVkCisgICAgICAgICAgY29tcGxldGVseSBhbmQgc3VjY2Vz c2Z1bGx5LiBUaGUgdGVtcGxhdGUgd29ya3MgYXMgaW4gL0FTLU5BTUUuCisKKyAgIC9TRVJWRVIt UkVOQU1FLVRPOnRlbXBsYXRlCisgICAgICAgICAgVGVsbHMgS2VybWl0IHRvIGFzayB0aGUgc2Vy dmVyIHRvIHJlbmFtZSBlYWNoIGZpbGUgYWNjb3JkaW5nIHRvCisgICAgICAgICAgdGhlIGdpdmVu IHRlbXBsYXRlIGFzIHNvb24gYXMsIGFuZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiByZWNlaXZlZAor ICAgICAgICAgIGNvbXBsZXRlbHkgYW5kIHN1Y2Nlc3NmdWxseS4gVGhlIHRlbXBsYXRlIHdvcmtz IGFzIGluIC9BUy1OQU1FLgorICAgICAgICAgIFJlcXVpcmVzIHdyaXRlIGFuZCByZW5hbWUgYWNj ZXNzIG9uIHRoZSBzZXJ2ZXIsIHNvIGRvZXNuJ3QKKyAgICAgICAgICB1c3VhbGx5IHdvcmsgd2l0 aCAoZS5nLikgYW5vbnltb3VzIHVwbG9hZHMgdG8gcHVibGljIGluY29taW5nCisgICAgICAgICAg YXJlYXMgd2hlcmUgdGhlIHBlcm1pc3Npb25zIGRvbid0IGFsbG93IHJlbmFtaW5nLiBFeGFtcGxl czoKKworICAgICAgICBmdHAgbXB1dCAvc2VydmVyLXJlbmFtZTpcdihmaWxlbmFtZSkub2sgKgor ICAgICAgICAgICAgICAgIEFwcGVuZHMgIi5vayIgdG8gZWFjaCBmaWxlbmFtZSBvbiB0aGUgc2Vy dmVyIHdoZW4gaXQncworICAgICAgICAgICAgICAgIGZpbmlzaGVkIHVwbG9hZGluZy4KKworICAg ICAgICBmdHAgbXB1dCAvYXMtbmFtZTpcdihmaWxlbmFtZSkudG1wIC9zZXJ2ZXItcmVuYW1lOlx2 KGZpbGVuYW1lKSAqCisgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiB0aGUg cHJldmlvdXMgZXhhbXBsZTsgaXQgdXNlcyBhCisgICAgICAgICAgICAgICAgdGVtcG9yYXJ5IG5h bWUgd2hpbGUgdXBsb2FkaW5nIGlzIGluIHByb2dyZXNzIGFuZCByZXZlcnRzCisgICAgICAgICAg ICAgICAgdGhlIGZpbGUgdG8gaXRzIHJlYWwgbmFtZSB3aGVuIHVwbG9hZGluZyBpcyBjb21wbGV0 ZS4KKworICAgICAgICBmdHAgbXB1dCAvYXMtbmFtZTpcdihmaWxlbmFtZSkKKyAgICAgICAgICAg ICAgICAvc2VydmVyLXJlbmFtZTouLi9maW5hbC9cdihmaWxlbmFtZSkgKgorICAgICAgICAgICAg ICAgIE1vdmVzIHRoZSBmaWxlIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIGEgZmluYWwK KyAgICAgICAgICAgICAgICBkaXJlY3Rvcnkgd2hlbiB0aGUgdXBsb2FkIGlzIGNvbXBsZXRlLCBi dXQgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAgICAgeW91IGhhdmUgdG8ga25vdyB0aGUgcGF0 aG5hbWUgc3ludGF4IG9mIHRoZSBzZXJ2ZXIuIElmIHRoZQorICAgICAgICAgICAgICAgIHJlbmFt ZSBmYWlscywgdGhlIFtNXVBVVCBjb21tYW5kIGZhaWxzIGFjY29yZGluZyB0byB0aGUKKyAgICAg ICAgICAgICAgICBbMjk1XUZUUCBFUlJPUi1BQ1RJT04gc2VsZWN0aW9uLgorCisgICAvRklMRU5B TUVTOntBVVRPTUFUSUMsQ09OVkVSVEVELExJVEVSQUx9CisgICAgICAgICAgT3ZlcnJpZGVzIHRo ZSBbMjk2XUZUUCBGSUxFTkFNRVMgc2V0dGluZyBmb3IgdGhpcyB1cGxvYWQgb25seS4KKworICAg L1BFUk1JU1NJT05TOntPTixPRkZ9CisgICAgICAgICAgT3ZlcnJpZGVzIHRoZSBbMjk3XUZUUCBQ RVJNSVNTSU9OUyBzZXR0aW5nIGZvciB0aGlzIHVwbG9hZCBvbmx5LgorCisgICAvVU5JUVVFCisg ICAgICAgICAgVGVsbHMgS2VybWl0IHRvIHRlbGwgdGhlIHNlcnZlciB0byBnaXZlIFsyOThddW5p cXVlIG5hbWVzIHRvCisgICAgICAgICAgaW5jb21pbmcgZmlsZXMgdGhhdCB3b3VsZCBvdGhlcndp c2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzCisgICAgICAgICAgdGhhdCBoYXZlIHRoZSBzYW1l IG5hbWUuIFRoaXMgc3dpdGNoIGNvbmZsaWN0cyB3aXRoIC9VUERBVEUsCisgICAgICAgICAgL1JF Q09WRVIsIC9QRVJNSVNTSU9OUywgYW5kIC9TRVJWRVItUkVOQU1FIHNpbmNlIHRoZSBjbGllbnQg aGFzCisgICAgICAgICAgbm8gd2F5IG9mIGtub3dpbmcgdGhlIG5hbWUgYXNzaWduZWQgYnkgdGhl IHNlcnZlci4KKworICAgL1FVSUVUCisgICAgICAgICAgRG9uJ3QgZGlzcGxheSBmaWxlLXRyYW5z ZmVyIHByb2dyZXNzIG9yIHN0YXRpc3RpY3MuCisKKyAgIC9TSU1VTEFURQorICAgICAgICAgIFNo b3dzIHdoaWNoIGZpbGVzIHdvdWxkIGJlIHNlbnQgd2l0aG91dCBhY3R1YWxseSBzZW5kaW5nIHRo ZW0uCisgICAgICAgICAgVXNlZnVsIChmb3IgZXhhbXBsZSkgd2l0aCAvVVBEQVRFIChuZXh0IHNl Y3Rpb24pLiBUaGUgcmVzdWx0cworICAgICAgICAgIGFyZSBzaG93biBpbiB0aGUgZmlsZS10cmFu c2ZlciBkaXNwbGF5IChpZiBpdCBpcyBub3QgZGlzYWJsZWQpCisgICAgICAgICAgYW5kIGluIHRo ZSB0cmFuc2FjdGlvbiBsb2cgKGlmIG9uZSBpcyBhY3RpdmUpLiBIaW50OiB1c2UgU0VUCisgICAg ICAgICAgVFJBTlNGRVIgRElTUExBWSBCUklFRi4KKworMy41LjIuIFVwZGF0ZSBNb2RlCisKKyAg IFdoZW4geW91IGluY2x1ZGUgdGhlIC9VUERBVEUgc3dpdGNoLCB0aGlzIG1lYW5zIHRvIHNraXAg c2VuZGluZyBhbnkKKyAgIGZpbGUgdGhhdCBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgc2VydmVyIGlm IHRoZSBsb2NhbCBmaWxlJ3MgbW9kaWZpY2F0aW9uCisgICBkYXRlL3RpbWUgaXMgbm90IGxhdGVy IHRoYW4gdGhhdCBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9uIHRoZQorICAgc2VydmVyLiBI ZXJlIGlzIGEgdHlwaWNhbCBhcHBsaWNhdGlvbiBmb3IgdXBkYXRlIG1vZGU6IFN1cHBvc2UgdGhh dCBvbgorICAgQ29tcHV0ZXIgQSwgeW91IG1haW50YWluIGEgbGFyZ2Ugc2V0IG9mIGZpbGVzIChz YXksIGEgY29sbGVjdGlvbiBvZiBXZWIKKyAgIHBhZ2VzIGFuZCBncmFwaGljcyBpbWFnZXMsIG9y IHRoZSBzb3VyY2UgZmlsZXMgZm9yIGEgc29mdHdhcmUKKyAgIGFwcGxpY2F0aW9uKSwgYW5kIHlv dSBuZWVkIHRvIGtlZXAgYSBwYXJhbGxlbCBjb3B5IG9uIGFub3RoZXIgQ29tcHV0ZXIsCisgICBC LiBPZiBjb3Vyc2UgeW91IGNvdWxkIHVwbG9hZCB0aGUgZW50aXJlIGNvbGxlY3Rpb24gZXZlcnkg ZGF5OgorCisgIGNkIHNvdXJjZS1kaXJlY3RvcnkKKyAgZnRwIGNvbXB1dGVyYi54eXpjb3JwLmNv bQorICAoIGF1dGhlbnRpY2F0aW9uIGRldGFpbHMuLi4gKQorICBmdHAgY2QgdGFyZ2V0LWRpcmVj dG9yeQorICBmdHAgcHV0IFsgc3dpdGNoZXMgXSAqCisKKyAgIEJ1dCBpZiB0aGUgdG90YWwgc2l6 ZSBpcyBsYXJnZSBvciB0aGUgbmV0d29yayBzbG93LCB0aGlzIHdvdWxkIGJlCisgICB1bm5lY2Vz c2FyaWx5IHRpbWUtY29uc3VtaW5nLiBXb3JzZSwgaWYgb3RoZXIgdXNlcnMgb3Igc2l0ZXMgaGFk IHRvCisgICB1cGRhdGUgd2hlbmV2ZXIgbmV3IGZpbGVzIGFwcGVhcmVkIGluIEIncyBkaXJlY3Rv cnksIHRoaXMgd291bGQgY2F1c2UKKyAgIHRoZW0gdW5uZWNlc3Nhcnkgd29yay4gQnkgaW5jbHVk aW5nIHRoZSAvVVBEQVRFIHN3aXRjaDoKKworICBmdHAgcHV0IC91cGRhdGUgWyBvdGhlci1zd2l0 Y2hlcyBdICoKKworICAgb25seSB0aG9zZSBmaWxlcyB0aGF0IGNoYW5nZWQgc2luY2UgbGFzdCB0 aW1lIGFyZSB1cGxvYWRlZC4gSGVyZSdzIGhvdworICAgaXQgd29ya3MuIEZvciBlYWNoIGxvY2Fs IGZpbGUgdGhhdCBpcyBzZWxlY3RlZCBmb3IgdXBsb2FkaW5nOgorCisgICAgICogVGhlIHJlbW90 ZSBmaWxlbmFtZSBpcyBkZXRlcm1pbmVkIGluIHRoZSBub3JtYWwgd2F5LCBhY2NvcmRpbmcgdG8K KyAgICAgICB0aGUgWzI5OV1GVFAgRklMRU5BTUVTIHNldHRpbmcsIC9GSUxFTkFNRVMgc3dpdGNo LCBvciB0aGUgYXMtbmFtZSwKKyAgICAgICBpZiBhbnkuCisgICAgICogS2VybWl0IHNlbmRzIGFu IE1EVE0gKG1vZGlmaWNhdGlvbiB0aW1lKSBjb21tYW5kIGZvciB0aGUKKyAgICAgICBjb3JyZXNw b25kaW5nIHJlbW90ZSBmaWxlbmFtZSB0byB0aGUgc2VydmVyLgorICAgICAqIElmIHRoZSBzZXJ2 ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgTURUTSBjb21tYW5kLCB0aGUgZmlsZSBpcworICAg ICAgIHNlbnQuCisgICAgICogSWYgdGhlIHNlcnZlciBjYW4ndCBmaW5kIGEgZmlsZSB3aXRoIHRo ZSBnaXZlbiBuYW1lLCB0aGUgZmlsZSBpcworICAgICAgIHNlbnQuCisgICAgICogSWYgdGhlIGxv Y2FsIGZpbGUncyBtb2RpZmljYXRpb24gdGltZSBpcyBsYXRlciB0aGFuIHRoYXQgb2YgdGhlCisg ICAgICAgcmVtb3RlIGZpbGUsIHRoZSBmaWxlIGlzIHNlbnQuCisgICAgICogT3RoZXJ3aXNlIC0t IHRoZSByZW1vdGUgZmlsZSBleGlzdHMgYnV0IGl0cyBtb2RpZmljYXRpb24gdGltZSBpcworICAg ICAgIGVxdWFsIHRvIG9yIGVhcmxpZXIgdGhhbiB0aGF0IG9mIHRoZSBsb2NhbCBmaWxlIC0tIHRo ZSBmaWxlIGlzCisgICAgICAgc2tpcHBlZC4KKworICAgQWxsIHRpbWUgY29tcGFyaXNvbnMgdGFr ZSBwbGFjZSBpbiBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZQorICAgKFVUQykoWzMwMF0xKSwg YWxzbyBrbm93biBhcyBHTVQgb3IgWnVsdSB0aW1lOiBUaW1lem9uZSAwOyBzdGFuZGFyZAorICAg dGltZSwgd2l0aG91dCBkYXlsaWdodCBzYXZpbmdzLgorCisgICAgIFdBUk5JTkc6IFNvbWUgRlRQ IHNlcnZlcnMsIHN1Y2ggYXMgTm92ZWxsIE5XRlRQRC5OTE0sIGlnbm9yZSBvcgorICAgICBtaXNp bXBsZW1lbnQgdGhlIEZUUCBzcGVjaWZpY2F0aW9uIGFuZCBzZW5kIGxvY2FsIHRpbWUgcmF0aGVy IHRoYW4KKyAgICAgVVRDLgorCisgICBVcGRhdGUgbW9kZSBpcyB1c2VmdWwgb25seSB3aGVuIGFs d2F5cyB1c2VkIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4gV2hlbgorICAgeW91IHVwbG9hZCAoUFVU KSBhIGZpbGUgd2l0aCBGVFAsIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHJlY2VpdmVzIHRoZQorICAg Y3VycmVudCB0aW1lc3RhbXAgb24gdGhlIHNlcnZlcidzIGNvbXB1dGVyLCBub3QgdGhlIG9yaWdp bmFsIGZpbGUncworICAgdGltZXN0YW1wIChbMzAxXTIpLiBJZiB5b3UgdHJ5IHRvIEZUUCBQVVQg L1VQREFURSB0aGUgc2FtZSBmaWxlIGFnYWluLAorICAgaXQgd2lsbCBiZSBza2lwcGVkIChhcyBl eHBlY3RlZCkgc2luY2UgdGhlIHJlbW90ZSBjb3B5IGlzIG5ld2VyLgorICAgSG93ZXZlciwgaWYg eW91IHRyeSB0byBGVFAgR0VUIC9VUERBVEUgdGhlIHNhbWUgZmlsZSAoWzMwMl1TZWN0aW9uCisg ICAzLjYpLCBpdCB3aWxsIGJlIHRyYW5zZmVycmVkIGZvciB0aGUgc2FtZSByZWFzb24uCisKKyAg IFRvIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgUFVUIC9VUERBVEUgb24gYSBwYXJ0aWN1bGFy IGNvbm5lY3Rpb24sCisgICBpc3N1ZSBhbiBGVFAgTU9EVElNRSBjb21tYW5kIGZvciBhIGZpbGUg dGhhdCBpcyBrbm93biB0byBleGlzdCBvbiB0aGUKKyAgIHNlcnZlci4gSWYgaXQgc3VjY2VlZHMs IFBVVCAvVVBEQVRFIHNob3VsZCB3b3JrIGFuZCBpbiB0aGF0IGNhc2UsIHlvdQorICAgY2FuIHJ1 biBhIHByb2NlZHVyZSBsaWtlIHRoZSBvbmUgYWJvdmUgZXZlcnkgZGF5OiB0aGUgZmlyc3QgdGlt ZSwgaXQKKyAgIHNlbmRzIGFsbCB0aGUgZmlsZXM7IGFmdGVyIHRoYXQsIGl0IHNlbmRzIG9ubHkg dGhlIG9uZXMgdGhhdCBjaGFuZ2VkLgorICAgSWYgYSB0cmFuc2FjdGlvbiBsb2cgaXMgYWN0aXZl LCBhIG5vdGF0aW9uIGlzIGluY2x1ZGVkIGZvciBhbnkgZmlsZXMKKyAgIHRoYXQgYXJlIHNraXBw ZWQuCisKKyAgIE5vdGVzOgorICAgIDEuIFdoeSBpcyBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGlt ZSBhYmJyZXZpYXRlZCBVVEM/IEZyb20gdGhlCisgICAgICAgWzMwM11OYXRpb25hbCBJbnN0aXR1 dGUgb2YgU3RhbmRhcmRzIGFuZCBUZWNobm9sb2d5IEZBUTogIkluIDE5NzAKKyAgICAgICB0aGUg Q29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgc3lzdGVtIHdhcyBkZXZpc2VkIGJ5IGFuCisgICAg ICAgaW50ZXJuYXRpb25hbCBhZHZpc29yeSBncm91cCBvZiB0ZWNobmljYWwgZXhwZXJ0cyB3aXRo aW4gdGhlCisgICAgICAgSW50ZXJuYXRpb25hbCBUZWxlY29tbXVuaWNhdGlvbiBVbmlvbiAoSVRV KS4gVGhlIElUVSBmZWx0IGl0IHdhcworICAgICAgIGJlc3QgdG8gZGVzaWduYXRlIGEgc2luZ2xl IGFiYnJldmlhdGlvbiBmb3IgdXNlIGluIGFsbCBsYW5ndWFnZXMgaW4KKyAgICAgICBvcmRlciB0 byBtaW5pbWl6ZSBjb25mdXNpb24uIFNpbmNlIHVuYW5pbW91cyBhZ3JlZW1lbnQgY291bGQgbm90 IGJlCisgICAgICAgYWNoaWV2ZWQgb24gdXNpbmcgZWl0aGVyIHRoZSBFbmdsaXNoIHdvcmQgb3Jk ZXIsIENVVCwgb3IgdGhlIEZyZW5jaAorICAgICAgIHdvcmQgb3JkZXIsIFRVQywgdGhlIGFjcm9u eW0gVVRDIHdhcyBjaG9zZW4gYXMgYSBjb21wcm9taXNlLiIKKyAgICAyLiBUaGUgS2VybWl0IEZU UCBjbGllbnQgaXMgdW51c3VhbCBpbiB0aGF0LCB3aGVuIGRvd25sb2FkaW5nIG9ubHksIGl0Cisg ICAgICAgY2FuIHNldCB0aGUgcmVjZWl2ZWQgZmlsZSdzIGRhdGUgZnJvbSB0aGUgZmlsZSdzIGRh dGUgb24gdGhlCisgICAgICAgc2VydmVyLCBidXQgdGhpcyBzaG91bGQgbm90IGFmZmVjdCB0aGUg dXBkYXRlIGZlYXR1cmUuIFdoZW4KKyAgICAgICB1cGxvYWRpbmcgdG8gYW4gRlRQIHNlcnZlciwg aG93ZXZlciwgdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciB0aGUKKyAgICAgICBjbGllbnQgdG8g c2V0IHRoZSBkYXRlIG9mIHRoZSB1cGxvYWRlZCBmaWxlIG9uIHRoZSBzZXJ2ZXIuCisKKzMuNS4z IFJlY292ZXJ5CisKKyAgIFN1cHBvc2UgdGhhdCB3aGlsZSB5b3UgYXJlIHVwbG9hZGluZyBhIGxh cmdlIGZpbGUgb3ZlciBhIHNsb3cKKyAgIGNvbm5lY3Rpb24sIHRoZSBjb25uZWN0aW9uIGlzIGxv c3QgYmVmb3JlIHRoZSBlbnRpcmUgZmlsZSBpcworICAgdHJhbnNmZXJyZWQuIFdpdGggbW9zdCBG VFAgY2xpZW50cywgeW91IHdvdWxkIGhhdmUgdG8gc3RhcnQgb3ZlciwgdGh1cworICAgcmVzZW5k aW5nIHRoZSBwb3J0aW9uIG9mIHRoZSBmaWxlIHRoYXQgd2FzIHNlbnQgYWxyZWFkeSwgYW5kIHRo YXQgaXMKKyAgIGFscmVhZHkgb24gdGhlIHNlcnZlci4gQnV0IEtlcm1pdCdzIC9SRUNPVkVSIHN3 aXRjaCAoU3lub255bTogL1JFU1RBUlQpCisgICBsZXRzIHlvdSBjb250aW51ZSBhbiBpbnRlcnJ1 cHRlZCB0cmFuc2ZlciBmcm9tIHRoZSBwb2ludCBvZiBmYWlsdXJlLAorICAgdGh1cyB0cmFuc2Zl cnJpbmcgb25seSB0aGUgcGFydCB0aGF0IHdhc24ndCBzZW50IGFscmVhZHkuIFRoZQorICAgcHJl cmVxdWlzaXRlcyBmb3IgcmVjb3ZlcnkgYXJlOgorCisgICAgICogVGhlIHRyYW5zZmVyIG11c3Qg YmUgaW4gQklOQVJZIG1vZGUsIG9yIGVsc2UgdGhlIGNsaWVudCBhbmQgc2VydmVyCisgICAgICAg bXVzdCByZXNpZGUgb24gbGlrZSBzeXN0ZW1zIChlLmcuIGJvdGggb24gc29tZSBmb3JtIG9mIFVO SVgpLgorICAgICAqIFRoZSBGVFAgc2VydmVyIG11c3Qgc3VwcG9ydCB0aGUgU0laRSBjb21tYW5k LgorCisgICBIZXJlJ3MgaG93IGl0IHdvcmtzLiBXaGVuIHlvdSBpbmNsdWRlIHRoZSAvUkVDT1ZF UiBzd2l0Y2g6CisKKyAgICAgKiBLZXJtaXQgY2hlY2tzIGZvciBjb25mbGljdGluZyBzd2l0Y2hl cywgc3VjaCBhcyAvVVBEQVRFIGFuZAorICAgICAgIC9VTklRVUU7IGlmIC9SRUNPVkVSIGlzIGdp dmVuIHdpdGggdGhlc2Ugc3dpdGNoZXMgYW4gZXJyb3Igb2NjdXJzLgorICAgICAgIElmIC9SRUNP VkVSIGlzIGdpdmVuIGluIG90aGVyIGNpcmN1bXN0YW5jZXMgd2hlcmUgaXQgY291bGQgc2VydmUg bm8KKyAgICAgICB1c2VmdWwgcHVycG9zZSAoZS5nLiB3aXRoIGFycmF5cywgcGlwZXMsIG9yIGZp bHRlcnMpLCBpdCBpcworICAgICAgIGlnbm9yZWQuCisKKyAgIElmIHRoZSBzd2l0Y2ggaXMgYWNj ZXB0ZWQsIHRoZW4gZm9yIGVhY2ggc2VsZWN0ZWQgZmlsZToKKworICAgICAqIElmIGl0IGlzIG5v dCBiaW5hcnkgKGRldGVybWluZWQgYnkgc2Nhbm5pbmcpIGFuZCB0aGUgY2xpZW50IGFuZAorICAg ICAgIHNlcnZlciBhcmUgbm90IG9uIGxpa2UgcGxhdGZvcm1zLCByZWNvdmVyeSBpcyBjYW5jZWxl ZCAodGhlIGVudGlyZQorICAgICAgIGZpbGUgaXMgc2VudCkuIE90aGVyd2lzZToKKyAgICAgKiBB IFNJWkUgY29tbWFuZCBpcyBzZW50IGZvciB0aGUgZmlsZSAodXNpbmcgaXRzIHJlbW90ZSBuYW1l KS4gSWYgdGhlCisgICAgICAgcmVwbHkgaW5kaWNhdGVzIHRoZSBmaWxlIHdhcyBub3QgZm91bmQs IG9yIHRoZSBTSVpFIGNvbW1hbmQgd2FzIG5vdAorICAgICAgIHVuZGVyc3Rvb2QsIG9yIGFueSBv dGhlciBraW5kIG9mIGVycm9yLCByZWNvdmVyeSBpcyBjYW5jZWxlZC4KKyAgICAgICBPdGhlcndp c2U6CisgICAgICogQSBNRFRNIChtb2RpZmljYXRpb24gdGltZSkgY29tbWFuZCBpcyBzZW50IGZv ciB0aGUgZmlsZS4gSWYgYSB2YWxpZAorICAgICAgIHJlcGx5IGlzIHJlY2VpdmVkLCBhbmQgdGhl IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBsb2NhbCBmaWxlIGlzCisgICAgICAgbGF0ZXIgdGhh biB0aGF0IG9mIHRoZSByZW1vdGUgZmlsZSwgcmVjb3ZlcnkgaXMgY2FuY2VsZWQuCisgICAgICAg T3RoZXJ3aXNlOgorICAgICAqIElmIHRoZSBzaXplcyBvZiB0aGUgdHdvIGZpbGVzIGFyZSBpZGVu dGljYWwsIHRoZSBmaWxlIGlzIG5vdCBzZW50LgorICAgICAgIE90aGVyd2lzZToKKyAgICAgKiBL ZXJtaXQgc2Vla3MgdG8gdGhlIHJlY292ZXJ5IHNwb3QgaW4gdGhlIGxvY2FsIGZpbGUsIHRlbGxz IHRoZQorICAgICAgIHNlcnZlciB0byBBUFBFTkQgdGhlIGRhdGEgd2hpY2ggaXMgYWJvdXQgdG8g YXJyaXZlIHRvIHRoZSByZW1vdGUKKyAgICAgICBmaWxlLCBhbmQgdGhlbiBzZW5kcyB0aGUgZGF0 YSBzdGFydGluZyBhdCB0aGUgcmVjb3ZlcnkgcG9pbnQuCisKKyAgIFRvIHNhZmVndWFyZCBmaWxl IGludGVncml0eSwgcmVjb3ZlcnkgaXMgbm90IGF0dGVtcHRlZCB1bmxlc3MgYWxsIHRoZQorICAg cHJlY29uZGl0aW9ucyBhcmUgbWV0LiBGb3IgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2VmdWxuZXNz LCBBUFBFTkQgaXMKKyAgIHVzZWQgcmF0aGVyIHRoYW4gUkVTVEFSVC4gRm9yIHN0cmVhbSB0cmFu c2ZlcnMgKHRoZSBvbmx5IGtpbmQgdGhhdAorICAgS2VybWl0IHN1cHBvcnRzKSB0aGUgcmVzdWx0 cyBhcmUgdGhlIHNhbWUuCisKKyAgIEJ5IGRlc2lnbiwgdGhlIC9SRUNPVkVSIHN3aXRjaCBjYW4g YmUgaW5jbHVkZWQgd2l0aCBhbnkgRlRQIFBVVCBvciBNUFVUCisgICBjb21tYW5kLCBldmVuIGlm IGl0IHNwZWNpZmllcyBhIGdyb3VwIG9mIGZpbGVzLiBUaGlzIGFsbG93cyB5b3UgdG8KKyAgIHJl c3VtZSBhbiBpbnRlcnJ1cHRlZCBiYXRjaCB0cmFuc2ZlciBmcm9tIHdoZXJlIGl0IGxlZnQgb2Zm LiBUaGUgZmlsZXMKKyAgIHRoYXQgd2VyZSBhbHJlYWR5IGNvbXBsZXRlbHkgc2VudCBhcmUgc2tp cHBlZCwgdGhlIGZpbGUgdGhhdCB3YXMKKyAgIGludGVycnVwdGVkIGlzIHJlY292ZXJlZCwgYW5k IHRoZSByZW1haW5pbmcgZmlsZXMgYXJlIHVwbG9hZGVkLgorCisgICBCeSB0aGUgd2F5LCBpdCBk b2Vzbid0IG1hdHRlciBob3cgdGhlIG9yaWdpbmFsIHBhcnRpYWwgZmlsZSB3YXMKKyAgIHVwbG9h ZGVkIC0tIEZUUCwgS2VybWl0LCBabW9kZW0sIGV0YzogYXMgbG9uZyBhcyB0aGUgcHJlY29uZGl0 aW9ucyBhcmUKKyAgIG1ldCwgaXQgY2FuIGJlIHJlY292ZXJlZCB3aXRoIEZUUCBQVVQgL1JFQ09W RVIsIG9yIGZvciB0aGF0IG1hdHRlciBhbHNvCisgICB1c2luZyBLZXJtaXQgcHJvdG9jb2wgYW5k IFNFTkQgL1JFQ09WRVIuCisKKyAgIEEgd29yZCBvZiBjYXV0aW9uLCBob3dldmVyLCB3aGVuIHRo ZSBvcmlnaW5hbCB1cGxvYWQgd2FzIGluIHRleHQgbW9kZQorICAgd2l0aCBjaGFyYWN0ZXItc2V0 IHRyYW5zbGF0aW9uIChbMzA0XVNlY3Rpb24gMy43KToKKworICAgICAqIElmIHRoZSBvcmlnaW5h bCB1cGxvYWQgaW52b2x2ZWQgYSB0cmFuc2xhdGlvbiBmcm9tIG9uZSBzaW5nbGUtYnl0ZQorICAg ICAgIGNoYXJhY3RlciBzZXQgdG8gYW5vdGhlciAoZS5nLiBDb2RlIFBhZ2UgODUwIHRvIExhdGlu LTEpLCByZWNvdmVyeQorICAgICAgIGlzIHNhZmUgaWYgeW91IHNwZWNpZnkgdGhlIHNhbWUgdHJh bnNsYXRpb25zIGZvciB0aGUgcmVjb3ZlcnkuIElmCisgICAgICAgeW91IGRvbid0LCB0aGUgcmVz dWx0aW5nIGZpbGUgd2lsbCBjb250YWluIGEgbWl4dHVyZSBvZiBjaGFyYWN0ZXIKKyAgICAgICBz ZXRzLgorICAgICAqIElmIHRoZSBvcmlnaW5hbCB1cGxvYWQgaW52b2x2ZWQgYSB0cmFuc2xhdGlv biB0aGF0IGNoYW5nZWQgdGhlIHNpemUKKyAgICAgICBvZiB0aGUgZmlsZSAoZS5nLiBmcm9tIGFu IGFscGhhYmV0aWMgQ29kZSBQYWdlIG9yIExhdGluIEFscGhhYmV0IHRvCisgICAgICAgVW5pY29k ZSwgb3IgdmljZSB2ZXJzYSksIHJlY292ZXJ5IGlzIE5PVCBzYWZlLCBldmVuIGlmIHlvdSBzcGVj aWZ5CisgICAgICAgdGhlIHNhbWUgdHJhbnNsYXRpb25zLgorCisgICBLZXJtaXQgaGFzIG5vIHdh eSBvZiBrbm93aW5nIGFueXRoaW5nIGFib3V0IHRoZSBwcmV2aW91cyB1cGxvYWQuIEFzIGEKKyAg IHNhZmVndWFyZCwgYW4gZXJyb3Igb2NjdXJzIGlmIHlvdSBpbmNsdWRlIC9SRUNPVkVSIGFuZCBh bHNvIHNwZWNpZnkgYQorICAgY2hhcmFjdGVyLXNldCBvZiBVQ1MyIG9yIFVURjgsIHNpbmNlIHJl Y292ZXJ5IGNhbid0IHBvc3NpYmx5IHdvcmsgaW4KKyAgIHRoYXQgc2l0dWF0aW9uLiBPdGhlcndp c2UsIGl0J3MgdXAgdG8geW91IHRvIGF2b2lkIHVuc2FmZSByZWNvdmVyeQorICAgb3BlcmF0aW9u cy4KKworICAgWyBbMzA1XVRvcCBdIFsgWzMwNl1GVFAgVG9wIF0gWyBbMzA3XUMtS2VybWl0IEhv bWUgXSBbIFszMDhdS2VybWl0IEhvbWUKKyAgIF0KKworMy42LiBEb3dubG9hZGluZyBGaWxlcyBX aXRoIEZUUAorCisgICBBbHRob3VnaCB1cGxvYWRpbmcgZmlsZXMgd2l0aCBLZXJtaXQncyBGVFAg Y2xpZW50IGlzIGp1c3QgYXMgZWFzeSBhbmQKKyAgIGZsZXhpYmxlIGFzIHNlbmRpbmcgZmlsZXMg d2l0aCBLZXJtaXQgcHJvdG9jb2wsIHRoZSBzYW1lIGlzIG5vdCBhbHdheXMKKyAgIHRydWUgZm9y IGRvd25sb2FkaW5nIGJlY2F1c2UgRlRQIHNlcnZlcnMgbGFjayBzb21lIG9mIHRoZSBjYXBhYmls aXRpZXMKKyAgIG9mIGEgS2VybWl0IHNlcnZlcjoKKworICAgICAqIElmIHlvdSB3YW50IHRvIGdl dCBtb3JlIHRoYW4gb25lIGZpbGUsIHlvdSBoYXZlIHRvIHVzZSBNR0VULCBub3QKKyAgICAgICBH RVQsIHNpbmNlIHRoZSB1bmRlcmx5aW5nIEZUUCBwcm90b2NvbCBpcyBkaWZmZXJlbnQgaW4gdGhl IHR3bworICAgICAgIGNhc2VzLiBLZXJtaXQgY2FuJ3QgImF1dG9kZXRlY3QiIHdoaWNoIG9uZSB5 b3UgbWVhbiwgYXMgaXQgY2FuIHdpdGgKKyAgICAgICBQVVQgYW5kIE1QVVQsIHNpbmNlIGl0IGNh bid0IGJlIGV4cGVjdGVkIHRvIGtub3cgdGhlIHdpbGRjYXJkCisgICAgICAgc3ludGF4IG9mIHRo ZSByZW1vdGUgcGxhdGZvcm0gYW5kL29yIEZUUCBzZXJ2ZXIgKHRoZSBzYW1lIGlzIHRydWUKKyAg ICAgICBmb3IgYWxsIG90aGVyIEZUUCBjbGllbnRzKS4gVG8gY29tcGxpY2F0ZSBtYXR0ZXJzLCBG VFAgcHJvdG9jb2wgbm93CisgICAgICAgaW5jbHVkZXMgdHdvIHVuZGVybHlpbmcgbWVjaGFuaXNt cyAoTkxTVCBhbmQgTUxTRCkgZm9yCisgICAgICAgYWNjb21wbGlzaGluZyBNR0VUIG9wZXJhdGlv bnMgYW5kLCBhcyBleHBsYWluZWQgaW4gWzMwOV1TZWN0aW9uCisgICAgICAgMy4xMSwgdGhlIHR3 byBiZWhhdmUgZGlmZmVyZW50bHkuCisgICAgICogQXV0b21hdGljIHRleHQtYmluYXJ5IG1vZGUg c3dpdGNoaW5nIGlzIG5vdCBkb25lIGJ5IHRoZSBzZXJ2ZXIuIEl0CisgICAgICAgY2FuIGJlIGRv bmUgYnkgdGhlIGNsaWVudCAoS2VybWl0KSwgYnV0IGluIHRoaXMgY2FzZSBpdCBpcyBub3QKKyAg ICAgICBiYXNlZCBvbiBhIGZpbGUgc2NhbiAoc2luY2UgdGhlcmUgaXMgbm8gd2F5IGZvciBLZXJt aXQgcHJlc2NhbiBhCisgICAgICAgc2VydmVyIGZpbGUpLCBidXQgcmF0aGVyIG9uIHRoZSBmaWxl bmFtZSwgdXNpbmcgQy1LZXJtaXQgNy4wCisgICAgICAgWzMxMF1maWxlbmFtZSBwYXR0ZXJucy4K KyAgICAgKiBTb21lIG9wdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIHdpdGggRlRQIFBVVCBjYW4g bm90IGJlIHVzZWQgd2l0aAorICAgICAgIEZUUCBbTV1HRVQgb3IgZG9uJ3Qgd29yayB0aGUgc2Ft ZSB3YXk6CisgICAgICAgICAvUEVSTUlTU0lPTlMgKEZUUCBwcm90b2NvbCBoYXMgbm8gbWVjaGFu aXNtIGZvciB0aGlzKS4KKyAgICAgICAgIC9bTk9ULV1CRUZPUkUsIC9bTk9ULV1BRlRFUiAoYmVj YXVzZSBvZiB0aGUgdGltZXpvbmUgcHJvYmxlbSkuCisgICAgICAgICAvUkVDT1ZFUiB3b3JrcyBv bmx5IGluIGJpbmFyeSBtb2RlLiAgIC9SRUNVUlNJVkUgaGFzIGxpbWl0ZWQKKyAgICAgICB1dGls aXR5LgorCisgICBUaGUgY29tbWFuZHMgZm9yIGRvd25sb2FkaW5nIGFyZToKKworICAgU0VUIEZJ TEUgRE9XTkxPQUQtRElSRUNUT1JZIFsgZGlyZWN0b3J5IF0KKyAgICAgICAgICBBcyB3aXRoIEtl cm1pdCB0cmFuc2ZlcnMsIHRoaXMgY29tbWFuZCwgaWYgZ2l2ZW4sIHRlbGxzIEMtS2VybWl0Cisg ICAgICAgICAgd2hlcmUgdG8gc3RvcmUgaW5jb21pbmcgZmlsZXMgaW4gdGhlIGFic2VuY2Ugb2Yg YSBzcGVjaWZpYworICAgICAgICAgIGFzLW5hbWUuIElmIG5vdCBnaXZlbiwgaW5jb21pbmcgZmls ZXMgYXJlIHN0b3JlZCBhcyBpbmRpY2F0ZWQgYnkKKyAgICAgICAgICB0aGUgYXMtbmFtZSwgaWYg YW55LCBvdGhlcndpc2UgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBqdXN0IGFzCisgICAgICAg ICAgd2l0aCBLZXJtaXQgdHJhbnNmZXJzLiBUaGUgbW9yZSB2ZXJib3NlIHRyYW5zZmVyIGRpc3Bs YXkgZm9ybWF0cworICAgICAgICAgIGdpdmUgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgZWFjaCByZWNl aXZlZCBmaWxlLCBhbmQsIGluIGNhc2UgeW91CisgICAgICAgICAgaGF2ZSB0cm91YmxlIGZpbmRp bmcgYSBkb3dubG9hZGVkIGZpbGUgYWZ0ZXJ3YXJkcywgaXRzIGZ1bGwgcGF0aAorICAgICAgICAg IGlzIGFsc28gbGlzdGVkIGluIHRoZSB0cmFuc2FjdGlvbiBsb2cgKGlmIHlvdSBrZXB0IG9uZSks IGFuZCB5b3UKKyAgICAgICAgICBjYW4gYWxzbyBhc2sgS2VybWl0IHdoZXJlIGl0IHdlbnQgd2l0 aCB0aGUgWzMxMV1XSEVSRSBjb21tYW5kLgorCisgICBTRVQgRlRQIEdFVC1GSUxFVFlQRS1TV0lU Q0hJTkcgeyBPTiwgT0ZGIH0KKyAgICAgICAgICBPTiBieSBkZWZhdWx0LCBjYXVzaW5nIEtlcm1p dCB0byBzd2l0Y2ggYXV0b21hdGljYWxseSBpbnRvIHRleHQKKyAgICAgICAgICBvciBiaW5hcnkg bW9kZSBmb3IgZWFjaCBmaWxlIGJhc2VkIG9uIHdoZXRoZXIgaXRzIG5hbWUgbWF0Y2hlcyBhCisg ICAgICAgICAgdGV4dCBwYXR0ZXJuIG9yIGJpbmFyeSBwYXR0ZXJuLiBTZXQgdGhpcyBPRkYsIG9y IHVzZSBhIC9URVhULAorICAgICAgICAgIC9CSU5BUlksIG9yIC9URU5FWCBzd2l0Y2ggdG8gZGVm ZWF0IHRoaXMgZmVhdHVyZS4gVXNlIFNIT1cKKyAgICAgICAgICBQQVRURVJOUyB0byBzZWUgdGhl IGN1cnJlbnQgcGF0dGVybiBsaXN0LgorCisgICBbIEZUUCBdIEdFVCBbIHN3aXRjaGVzIF0gZmls ZW5hbWUgWyBhcy1uYW1lIF0KKyAgICAgICAgICBBc2tzIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUg Z2l2ZW4gZmlsZSwgYW5kIGlmIGl0IGNvbWVzLCBzdG9yZXMKKyAgICAgICAgICBpdCBsb2NhbGx5 IHVuZGVyIHRoZSBnaXZlbiBhcy1uYW1lLCBpZiBhbnksIG90aGVyd2lzZSB1bmRlciBpdHMKKyAg ICAgICAgICBvcmlnaW5hbCBuYW1lIChtb2RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIHNlbGVjdGVk IGZpbGVuYW1lCisgICAgICAgICAgY29udmVyc2lvbiBvcHRpb24pLCBpbiB5b3VyIGRvd25sb2Fk IGRpcmVjdG9yeSwgaWYgeW91IGhhdmUKKyAgICAgICAgICBzcGVjaWZpZWQgb25lLCBvdGhlcndp c2UgaW4gdGhlIGRpcmVjdG9yeSBpbmRpY2F0ZWQgaW4gdGhlCisgICAgICAgICAgYXMtbmFtZSwg aWYgYW55LCBvdGhlcndpc2UgaW4geW91ciBjdXJyZW50IGRpcmVjdG9yeS4gSWYgeW91CisgICAg ICAgICAgYWNjaWRlbnRhbGx5IHVzZSBhIHdpbGRjYXJkIGluIHRoZSBmaWxlbmFtZSAoImdldCAq LnR4dCIpIHRoZQorICAgICAgICAgIHNlcnZlciB3aWxsIHJlcGx5IHdpdGggYSBtZXNzYWdlIGxp a2UgIkZpbGUgbm90IGZvdW5kIiAodW5sZXNzCisgICAgICAgICAgdGhlcmUgaXMgYSBmaWxlIHdo b3NlIG5hbWUgYWN0dWFsbHkgaXMgIioudHh0IikuIElmIEZUUAorICAgICAgICAgIEdFVC1GSUxF VFlQRS1TV0lUQ0hJTkcgaXMgT04sIGFuZCBpbiB0aGUgYWJzZW5jZSBvZiBhbnkgR0VUCisgICAg ICAgICAgc3dpdGNoZXMgdG8gb3ZlcnJpZGUgaXQsIHRoZSBmaWxlIGlzIHRyYW5zZmVycmVkIGlu IGJpbmFyeSBtb2RlCisgICAgICAgICAgaWYgaXQgbWF0Y2hlcyBhbnkgb2YgS2VybWl0J3MgYmlu YXJ5IG5hbWUgcGF0dGVybnMsIGFuZCBpbiB0ZXh0CisgICAgICAgICAgbW9kZSBpZiBpdCBtYXRj aGVzIGFueSBvZiBLZXJtaXQncyB0ZXh0IG5hbWUgcGF0dGVybnMsIGFuZCBpbgorICAgICAgICAg IHRoZSBwcmV2YWlsaW5nIEZUUCBUWVBFIGlmIGl0IG1hdGNoZXMgbm9uZSBvZiB0aGVzZSBwYXR0 ZXJucy4KKworICAgWyBGVFAgXSBNR0VUIFsgc3dpdGNoZXMgXSBmaWxlc3BlYyBbIGZpbGVzcGVj IFsgZmlsZXNwZWMgWyAuLi4gXSBdIF0KKyAgICAgICAgICBMaWtlIEdFVCwgYnV0IGZvciBtdWx0 aXBsZSBmaWxlcy4gT25lIG9yIG1vcmUgZmlsZQorICAgICAgICAgIHNwZWNpZmljYXRpb25zIGNh biBiZSBnaXZlbiwgYW5kIGFueSBvciBhbGwgKG9yIG5vbmUpIG9mIHRoZW0KKyAgICAgICAgICBj YW4gY29udGFpbiB3aWxkY2FyZHMgb3IgY2FuIGJlIGRpcmVjdG9yeSBuYW1lcy4gVGhlIGZpbGUg bGlzdAorICAgICAgICAgIG1heSBub3QgaW5jbHVkZSBhbiBhcy1uYW1lLCBidXQgeW91IGNhbiBz dGlsbCBnaXZlIG9uZSB3aXRoIHRoZQorICAgICAgICAgIC9BUy1OQU1FOiBzd2l0Y2guCisKKyAg IEluIGJvdGggdGhlIEZUUCBHRVQgYW5kIE1HRVQgY29tbWFuZHMsIGFueSBmaWxlbmFtZXMgdGhh dCBjb250YWluCisgICBzcGFjZXMgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMgb3IgZG91Ymxl cXVvdGVzIChzZWUgWzMxMl1TZWN0aW9uIDUKKyAgIGZvciBkZXRhaWxzKS4KKworICAgRlRQIGRv d25sb2FkcyBtYXkgYmUgaW50ZXJydXB0ZWQganVzdCBsaWtlIEtlcm1pdCB0cmFuc2ZlcnMuIFdo aWxlIHRoZQorICAgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MsIHR5cGU6CisKKyAgICAgKiBYIHRv IGludGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBnbyBvbiB0byB0aGUgbmV4dCBmaWxlLgor ICAgICAqIFogKG9yIENvbnRyb2wtQykgdG8gY2FuY2VsIHRoZSBjdXJyZW50IGZpbGUgYW5kIGFs bCByZW1haW5pbmcKKyAgICAgICBmaWxlcy4KKworICAgQmVmb3JlIHByb2NlZWRpbmcsIGEgYnJp ZWYgd29yZCBhYm91dCB0ZW1wb3JhcnkgZmlsZXMuIEluIEZUUCBwcm90b2NvbCwKKyAgIHRoZSBN R0VUIGNvbW1hbmQgd29ya3MgYnkgcmVxdWVzdGluZyBhIGZpbGUgbGlzdCBmcm9tIHRoZSBzZXJ2 ZXIsIGFuZAorICAgdGhlbiAoaW50ZXJuYWxseSkgaXNzdWluZyBhIEdFVCBjb21tYW5kIChGVFAg UkVUUiBwcm90b2NvbCBkaXJlY3RpdmUpCisgICBmb3IgZWFjaCBmaWxlLiBUaGUgZmlsZSBsaXN0 IHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgY2FuIGJlIGFueSBzaXplIGF0CisgICBhbGwsIHNvIGlu IGNhc2UgaXQgaXMgaHVnZSwgd2UgZG9uJ3Qgc3RvcmUgaXQgaW4gbWVtb3J5OyBpbnN0ZWFkIHdl IHB1dAorICAgaXQgaW4gYSB0ZW1wb3JhcnkgZmlsZS4gRm9yIHRyb3VibGVzaG9vdGluZyBwdXJw b3NlcywgeW91IHNob3VsZCBiZQorICAgYXdhcmUgb2YgdHdvIHBvaW50czoKKworICAgIDEuIFRo ZSBsb2NhdGlvbiBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgaXMgY2hvc2VuIGFjY29yZGluZyB0aGUg VE1QIG9yCisgICAgICAgVEVNUCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIElmIG5laXRoZXIgb2Yg dGhlc2UgdmFyaWFibGVzIGlzCisgICAgICAgZGVmaW5lZCwgeW91IG1pZ2h0IG5lZWQgdG8gZGVm aW5lIGl0LiBJbiBjYXNlIHRoZXJlIGlzIG5vdCBlbm91Z2gKKyAgICAgICBzcGFjZSBvbiB0aGUg aW5kaWNhdGVkIGRpc2sgb3IgcGFydGl0aW9uIGZvciB0aGUgc2VydmVyJ3MgZmlsZQorICAgICAg IGxpc3QsIHlvdSBtaWdodCBuZWVkIHRvIGVpdGhlciBjbGVhbiB1cCB0aGUgdGVtcG9yYXJ5IGFy ZWEsIG9yCisgICAgICAgcmVkZWZpbmUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGluZGlj YXRlIGEgZGlmZmVyZW50IGFyZWEgdGhhdAorICAgICAgIGhhcyBzdWZmaWNpZW50IHNwYWNlLgor ICAgIDIuIElmIHlvdSB3YW50IHRvIGxvb2sgYXQgdGhlIGxpc3QgeW91cnNlbGYsIHVzZSBTRVQg RlRQIERFQlVHIE9OLgorICAgICAgIFRoaXMgdGVsbHMgS2VybWl0IHRvIChhKSBnaXZlIHlvdSB0 aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUKKyAgICAgICB0ZW1wb3JhcnkgZmlsZSBhdCB0aGUgZW5k IG9mIGVhY2ggTUdFVCBjb21tYW5kLCBhbmQgKGIpIG5vdCB0bworICAgICAgIGRlbGV0ZSBpdCwg YXMgaXQgbm9ybWFsbHkgZG9lcy4KKworMy42LjEuIEZUUCBHRVQgU3dpdGNoZXMKKworICAgVGhl IGZvbGxvd2luZyBzd2l0Y2hlcyBhcmUgYXZhaWxhYmxlIHdpdGggRlRQIEdFVCBhbmQgTUdFVDoK KworICAgL1RFWFQKKyAgICAgICAgICBTcGVjaWZpZXMgYSB0ZXh0LW1vZGUgdHJhbnNmZXIuIE92 ZXJyaWRlcyB0aGUgZ2xvYmFsIEZUUCBUWVBFCisgICAgICAgICAgc2V0dGluZyBhbmQgZmlsZW5h bWUgcGF0dGVybi1tYXRjaGluZyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZQorICAgICAgICAgIGN1 cnJlbnQgY29tbWFuZCBvbmx5LCBBbGwgZmlsZXMgYXJlIGRvd25sb2FkZWQgaW4gdGV4dCBtb2Rl LgorICAgICAgICAgIFN5bm9ueW06IC9BU0NJSS4KKworICAgL0JJTkFSWQorICAgICAgICAgIFNw ZWNpZmllcyBhIGJpbmFyeS1tb2RlIHRyYW5zZmVyLiBPdmVycmlkZXMgdGhlIGdsb2JhbCBGVFAg VFlQRQorICAgICAgICAgIHNldHRpbmcgYW5kIGZpbGVuYW1lIHBhdHRlcm4tbWF0Y2hpbmcgZm9y IHRoZSBkdXJhdGlvbiBvZiB0aGUKKyAgICAgICAgICBjdXJyZW50IGNvbW1hbmQgb25seS4gQWxs IGZpbGVzIGFyZSBkb3dubG9hZGVkIGluIGJpbmFyeSBtb2RlLgorCisgICAvVEVORVgKKyAgICAg ICAgICBMaWtlIC9CSU5BUlkgYnV0IHNwZWNpZmllcyBhIHNwZWNpYWwgYmluYXJ5IHRyYW5zZmVy IG1vZGUgdG8gYmUKKyAgICAgICAgICB1c2VkIHdoZW4gZ2V0dGluZyA4LWJpdCBiaW5hcnkgZmls ZXMgZnJvbSBhIDM2LWJpdCBwbGF0Zm9ybSBzdWNoCisgICAgICAgICAgYXMgVE9QUy0xMCwgVE9Q Uy0yMCwgb3IgVEVORVguIEFsbCBmaWxlcyBhcmUgZG93bmxvYWRlZCBpbiB0aGUKKyAgICAgICAg ICBzcGVjaWFsIGJpbmFyeSBtb2RlLgorCisgICAvUkVDT1ZFUgorICAgICAgICAgIFRoaXMgaW5z dHJ1Y3RzIEtlcm1pdCB0byB0cnkgdG8gcmVjb3ZlciBhbiBpbmNvbXBsZXRlIGRvd25sb2FkCisg ICAgICAgICAgZnJvbSB0aGUgcG9pbnQgb2YgZmFpbHVyZS4gV29ya3Mgb25seSBpbiBiaW5hcnkg bW9kZSwgYW5kIG9ubHkKKyAgICAgICAgICBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHRoZSAobm90 LXlldC1zdGFuZGFyZCkgRlRQICJSRVNUIgorICAgICAgICAgIGRpcmVjdGl2ZS4gU2VlIFszMTNd U2VjdGlvbiAzLjYuMyBmb3IgZGV0YWlscy4gU3lub255bToKKyAgICAgICAgICAvUkVTVEFSVC4K KworICAgL0ZJTEVOQU1FUzp7Q09OVkVSVEVELExJVEVSQUx9CisgICAgICAgICAgT3ZlcnJpZGVz IHRoZSBbMzE0XUZUUCBGSUxFTkFNRVMgKGZpbGVuYW1lIGNvbnZlcnNpb24pIHNldHRpbmcKKyAg ICAgICAgICBmb3IgdGhpcyBkb3dubG9hZCBvbmx5LCBmb3JjaW5nIGluY29taW5nIGZpbGVuYW1l cyB0byBiZSBlaXRoZXIKKyAgICAgICAgICBjb252ZXJ0ZWQgb3IgdGFrZW4gbGl0ZXJhbGx5Lgor CisgICAvQVMtTkFNRTp0ZXh0CisgICAgICAgICAgRm9yIEdFVCwgdGhpcyBpcyBlcXVpdmFsZW50 IHRvIGdpdmluZyBhbiBhcy1uYW1lIGFmdGVyIHRoZQorICAgICAgICAgIGZpbGVuYW1lLiBGb3Ig TUdFVCwgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gc3BlY2lmeSBhbHRlcm5hdGl2ZQorICAgICAg ICAgIG5hbWVzIGZvciB0aGUgaW5jb21pbmcgZmlsZXMuIFdpdGggTUdFVCwgdGhlIC9BUy1OQU1F IHRleHQKKyAgICAgICAgICBzaG91bGQgKG11c3QpIGNvbnRhaW4gYSBLZXJtaXQgdmFyaWFibGUs IHVzdWFsbHkgXHYoZmlsZW5hbWUpIG9yCisgICAgICAgICAgXHYoZmlsZW51bWJlcikuIEV4YW1w bGU6CisKKyAgbWdldCAvdGV4dCAvYXMtbmFtZTpcdihmaWxlbmFtZSkubmV3ICouYworCisgICAg ICAgICAgVGhpcyBnZXRzIGFsbCAiLmMiIGZpbGVzIGFuZCBzdG9yZXMgdGhlbSB3aXRoICIKKwor ICAgICAgICAgIC5uZXciIGFwcGVuZGVkIHRvIHRoZWlyIG5hbWVzLiBTZWUgdGhlIFszMTVdQy1L ZXJtaXQgNy4wIFVwZGF0ZQorICAgICAgICAgIE5vdGVzIGZvciBkZXRhaWxzLgorCisgICAvQ09N TUFORAorICAgICAgICAgIFRoaXMgc3BlY2lmaWVzIHRoYXQgdGhlIGluY29taW5nIGZpbGUgaXMg dG8gYmUgd3JpdHRlbiB0byB0aGUKKyAgICAgICAgICBzdGFuZGFyZCBpbnB1dCBvZiBhIGNvbW1h bmQsIHJhdGhlciB0aGFuIHRvIGEgZmlsZS4gVGhlIGNvbW1hbmQKKyAgICAgICAgICBuYW1lIGlz IHRoZSBhcy1uYW1lIGZyb20gdGhlIEdFVCBjb21tYW5kIG9yIHRoZSAvQVMtTkFNRQorICAgICAg ICAgIGFyZ3VtZW50LiBJZiB5b3UgbmVlZCB0byByZWZlciB0byB0aGUgaW5jb21pbmcgZmlsZSdz IG5hbWUgaW4KKyAgICAgICAgICB0aGUgY29tbWFuZCwgdXNlIFx2KGZpbGVuYW1lKS4gU2VlIHRo ZSBkZXNjcmlwdGlvbiBvZiB0aGUKKyAgICAgICAgICByZWd1bGFyIEtlcm1pdCBbMzE2XUdFVCAv Q09NTUFORCBjb21tYW5kIGZvciBkZXRhaWxzIGFuZAorICAgICAgICAgIGV4YW1wbGVzLgorCisg ICAvUVVJRVQKKyAgICAgICAgICBUcmFuc2ZlcnMgdGhlIGZpbGVzIHF1aWV0bHk7IGRvbid0IHB1 dCB1cCBhIGZpbGUtdHJhbnNmZXIKKyAgICAgICAgICBkaXNwbGF5LgorCisgICAvRVJST1ItQUNU SU9OOntRVUlULFBST0NFRUR9CisgICAgICAgICAgVGhpcyBzd2l0Y2ggYWZmZWN0cyBvbmx5IE1H RVQuIElmIGFuIGVycm9yIG9jY3VycyB3aXRoIGEKKyAgICAgICAgICBwYXJ0aWN1bGFyIGZpbGUs IHRoaXMgdGVsbHMgd2hldGhlciB0byBnbyBvbiB0byB0aGUgbmV4dCBmaWxlCisgICAgICAgICAg KFBST0NFRUQpIG9yIHRvIHN0b3AgcmlnaHQgYXdheSBhbmQgZmFpbCAoUVVJVCkuIFRoZSBkZWZh dWx0IGlzCisgICAgICAgICAgUFJPQ0VFRC4KKworICAgVGhlIGZpbGUgc2VsZWN0aW9uIHN3aXRj aGVzIGFyZToKKworICAgL0VYQ0VQVDp7cGF0dGVybn0gb3IgL0VYQ0VQVDp7e3BhdHRlcm59e3Bh dHRlcm59ey4uLn19CisgICAgICAgICAgRXhjZXB0aW9uIGxpc3QgZm9yIE1HRVQ7IHNraXAgZG93 bmxvYWRpbmcgYW55IGZpbGUgd2hvc2UgbmFtZQorICAgICAgICAgIG1hdGNoZXMgYW55IG9mIHRo ZSBnaXZlbiBwYXR0ZXJucyAod2hlbiB1c2luZyB0aGUgc2Vjb25kIGZvcm1hdCwKKyAgICAgICAg ICB1cCB0byA2NCBwYXR0ZXJucyBtYXkgYmUgc3BlY2lmaWVkKS4gWzMxN11DTElDSyBIRVJFIGZv ciBzeW50YXgKKyAgICAgICAgICBkZXRhaWxzLgorCisgICAvU01BTExFUi1USEFOOm51bWJlcgor ICAgICAgICAgIERvd25sb2FkIG9ubHkgZmlsZXMgd2hvc2Ugc2l6ZSBpcyBzbWFsbGVyIHRoYW4g dGhlIGdpdmVuIG51bWJlcgorICAgICAgICAgIG9mIGJ5dGVzIChvY3RldHMpLiBSZXF1aXJlcyB0 aGF0IHRoZSBGVFAgc2VydmVyIHN1cHBvcnQgdGhlIFNJWkUKKyAgICAgICAgICBvciBNTFNEIGRp cmVjdGl2ZS4KKworICAgL0xBUkdFUi1USEFOOm51bWJlcgorICAgICAgICAgIERvd25sb2FkIG9u bHkgZmlsZXMgd2hvc2Ugc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlcgorICAg ICAgICAgIG9mIGJ5dGVzLiBSZXF1aXJlcyB0aGF0IHRoZSBGVFAgc2VydmVyIHN1cHBvcnQgdGhl IFNJWkUgb3IgTUxTRAorICAgICAgICAgIGRpcmVjdGl2ZS4KKworICAgL05PQkFDS1VQRklMRVMK KyAgICAgICAgICBEdXJpbmcgTUdFVCwgZG9uJ3QgZG93bmxvYWQgYW55IGZpbGVzIHdob3NlIG5h bWVzIGVuZCB3aXRoCisgICAgICAgICAgYmFja3VwIHN1ZmZpeGVzICgufm5+IHdoZXJlIG4gaXMg YSBudW1iZXIpLgorCisgICAvTk9ET1RGSUxFUworICAgICAgICAgIER1cmluZyBNR0VULCBkb24n dCBkb3dubG9hZCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aAorICAgICAgICAgIHBl cmlvZCAoLikuIEVxdWl2YWxlbnQgdG8gL0VYQ0VQVDp7Lip9LgorCisgICAvTElTVEZJTEU6bG9j YWwtZmlsZW5hbWUKKyAgICAgICAgICBUaGUgZ2l2ZW4gZmlsZSBjb250YWlucyBhIGxpc3Qgb2Yg ZmlsZXMgdG8gR0VULCBvbmUgcGVyIGxpbmUuCisgICAgICAgICAgRmlsZW5hbWVzIGluIHRoZSBs aXN0ZmlsZSBjYW4gY29udGFpbiB3aWxkY2FyZCBjaGFyYWN0ZXJzIGluIHRoZQorICAgICAgICAg IHN5bnRheCBvZiB0aGUgc2VydmVyLiBUaGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9m IGxpbmVzCisgICAgICAgICAgaW4gdGhlIGxpc3RmaWxlLgorCisgICAvTkFNRUxJU1Q6bG9jYWwt ZmlsZW5hbWUKKyAgICAgICAgICBJZiB0aGlzIHN3aXRjaCBpcyBnaXZlbiwgdGhlbiBpbnN0ZWFk IG9mIGFjdHVhbGx5IHJldHJpZXZpbmcgdGhlCisgICAgICAgICAgc2VsZWN0ZWQgZmlsZXMsIHRo ZSBHRVQgY29tbWFuZCByZXRyaWV2ZXMgYSBsaXN0IG9mIHRoZSBuYW1lcyBvZgorICAgICAgICAg IHRoZSBmaWxlcyB0aGF0IHdvdWxkIGJlIHJldHJpZXZlZCwgYW5kIHBsYWNlcyBpdCBpbiB0aGUK KyAgICAgICAgICBzcGVjaWZpZWQgZmlsZS4gVGhlIHJlc3VsdGluZyBmaWxlIGlzIGFuIG9yZGlu YXJ5IHRleHQgZmlsZSwKKyAgICAgICAgICB3aXRoIG9uZSBmaWxlbmFtZSBwZXIgbGluZSwgc3Vp dGFibGUgZm9yIHJlYWRpbmcgYnkgYSBwZXJzb24sIG9yCisgICAgICAgICAgcHJvY2Vzc2luZyBi eSBhIGNvbXB1dGVyIHByb2dyYW0sIGluY2x1ZGluZyBLZXJtaXQgaXRzZWxmIChGT1BFTgorICAg ICAgICAgIC8gRlJFQUQgLyBGV1JJVEUgLyBGQ0xPU0UpLCBhbmQgYXMgL0ZJTEVMSVNUOiBmaWxl LiBJZiB0aGUKKyAgICAgICAgICBmaWxlbmFtZSBpcyBvbWl0dGVkIG9yIGdpdmVuIGFzICItIiAo ZGFzaCwgaHlwaGVuKSwgdGhlIGxpc3QKKyAgICAgICAgICBnb2VzIHRvIHRoZSBzY3JlZW4uIE5P VEU6IGlmIHlvdSB3YW50IGEgY29weSBvZiB0aGUgY29tcGxldGUKKyAgICAgICAgICBsaXN0IHNl bnQgYnkgdGhlIHNlcnZlciwgdXNlIFNFVCBGVFAgREVCVUcgT04sIHBlcmZvcm0gYW4gTUdFVCwK KyAgICAgICAgICBhbmQgdGhlIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgd2ls bCBiZSBrZXB0IHJhdGhlcgorICAgICAgICAgIHRoYW4gZGVsZXRlZCAoYW5kIEtlcm1pdCB0ZWxs cyB5b3UgaXRzIG5hbWUpLgorCisgICAvVVBEQVRFLCAvQ09MTElTSU9OOmtleXdvcmQKKyAgICAg ICAgICBFeHBsYWluZWQgaW4gWzMxOF1TZWN0aW9uIDMuNi4yLgorCisgICAvUkVDVVJTSVZFCisg ICAgICAgICAgVGhpcyBtZWFucyB0byB0cnkgdG8gZG93bmxvYWQgYW4gZW50aXJlIGRpcmVjdG9y eSB0cmVlLCByYXRoZXIKKyAgICAgICAgICB0aGFuIGp1c3QgZmlsZXMgZnJvbSBhIHBhcnRpY3Vs YXIgZGlyZWN0b3J5LiBJbiBmYWN0LCBGVFAKKyAgICAgICAgICBwcm90b2NvbCBkb2VzIG5vdCBw cm92aWRlIGEgbWV0aG9kIHRvIHJlcXVlc3QgYSByZWN1cnNpdmUKKyAgICAgICAgICBkb3dubG9h ZCAodW5sZXNzIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgTUxTRDsgc2VlIFszMTldU2VjdGlvbgorICAg ICAgICAgIDMuMTEpLCBzbyB0aGlzIHdvcmtzIG9ubHkgaWYgdGhlIEZUUCBzZXJ2ZXIgZG9lcyBp dCBhbnl3YXksCisgICAgICAgICAgd2l0aG91dCBiZWluZyBhc2tlZCwgYXMgc29tZSBkby4gSW4g dGhpcyBjYXNlLCBLZXJtaXQgZGV0ZWN0cworICAgICAgICAgIHRoYXQgbmFtZXMgaW4gdGhlIHJl dHVybmVkIGZpbGUgbGlzdCBjb250YWluIGRpcmVjdG9yeQorICAgICAgICAgIHNlcGFyYXRvcnMs IGFuZCB0aGVyZWZvcmUgYXR0ZW1wdHMgdG8gY3JlYXRlIHRoZSBuZWVkZWQKKyAgICAgICAgICBk aXJlY3RvcmllcyBhcyB0aGUgZmlsZXMgYXJyaXZlLiBCdXQgdGhpcyBjYW4gd29yayBvbmx5IGlm IHRoZQorICAgICAgICAgIHNlcnZlciBpcyBvbiB0aGUgc2FtZSBraW5kIG9mIHBsYXRmb3JtIGFz IHRoZSBjbGllbnQsIHNvIHRoZQorICAgICAgICAgIHBhdGhuYW1lIHN5bnRheCBjYW4gYmUgcmVj b2duaXplZCwgYW5kIGFsc28gYmVjYXVzZSB0aGUgc2VydmVyCisgICAgICAgICAgZG9lcyBub3Qg c3dpdGNoIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IG1vZGUsIHdoaWNoIHdvdWxkIGJlCisgICAg ICAgICAgdml0YWwgZm9yIGNyb3NzLXBsYXRmb3JtIHRyYW5zZmVycy4gVXNlIHdpdGggY2F1dGlv bi4gU3lub255bToKKyAgICAgICAgICAvU1VCRElSRUNUT1JJRVMuCisKKyAgICAgICAgICBFdmVu IHdoZW4gdGhlIHNlcnZlciBkb2VzIG5vdCBwcm92aWRlIHJlY3Vyc2l2ZSBmaWxlIGxpc3RzLAor ICAgICAgICAgIFtNXUdFVCAvUkVDVVJTSVZFIGZvcmNlcyBLZXJtaXQgdG8gcmVwbGljYXRlIGFu eSBkaXJlY3RvcnkKKyAgICAgICAgICBzdHJ1Y3R1cmUgaW1wbGllZCBvciBleHByZXNzZWQgYnkg dGhlIHNlcnZlcidzIGZpbGUgbGlzdC4gRm9yCisgICAgICAgICAgZXhhbXBsZToKKworICBnZXQg c29tZXBhdGgvc29tZWZpbGUKKworICAgICAgICAgIEdldHMgdGhlIGZpbGUgbmFtZWQgc29tZWZp bGUgZnJvbSB0aGUgc2VydmVyJ3Mgc29tZXBhdGgKKyAgICAgICAgICBkaXJlY3RvcnkgYW5kIHB1 dHMgaXQgS2VybWl0J3MgY3VycmVudCAob3IgZG93bmxvYWQpIGRpcmVjdG9yeSwKKyAgICAgICAg ICB3aGVyZWFzOgorCisgIGdldCAvcmVjdXJzaXZlIHNvbWVwYXRoL3NvbWVmaWxlCisKKyAgICAg ICAgICBjcmVhdGVzIHRoZSBwYXRoIGxvY2FsbHkgYW5kIHRoZW4gcHV0cyB0aGUgZmlsZSBpbiBp dC4gU2ltaWxhcmx5CisgICAgICAgICAgZm9yIE1HRVQ6CisKKyAgbWdldCAqL2RhdGEvKgorCisg ICAgICAgICAgZG93bmxvYWRzIGFsbCB0aGUgZmlsZXMgaW4gYWxsIHRoZSBkYXRhIHN1YmRpcmVj dG9yaWVzIG9mIGFsbAorICAgICAgICAgIHRoZSBzdWJkaXJlY3RvcmllcyBvZiB0aGUgc2VydmVy J3MgY3VycmVudCBkaXJlY3RvcnkgYW5kIHN0b3JlcworICAgICAgICAgIHRoZW0gbG9jYWxseSBp biBLZXJtaXQncyBjdXJyZW50IChvciBkb3dubG9hZCkgZGlyZWN0b3J5LAorICAgICAgICAgIHdo ZXJlYXM6CisKKyAgbWdldCAvcmVjdXJzaXZlICovZGF0YS8qCisKKyAgICAgICAgICByZS1jcmVh dGVzIHRoZSBzZXJ2ZXIncyBkaXJlY3Rvcnkgc3RydWN0dXJlIGxvY2FsbHkuCisKKyAgIFRoZSBG VFAgcHJvdG9jb2wgZG9lcyBub3QgaW5jbHVkZSBleHBsaWNpdCBtZWNoYW5pc21zIGZvciByZWN1 cnNpb24sIHNvCisgICBLZXJtaXQgYnVpbGRzIHVwb24gd2hhdCBpcyBhdmFpbGFibGUuIEFsdGhv dWdoIGFuIEludGVybmV0IGRyYWZ0CisgICBkZXNjcmliZXMgYSBtZWNoYW5pc20gKCJNTFNEIikg dGhhdCB3b3VsZCBhbGxvdyBwcm90b2NvbC1kcml2ZW4KKyAgIHJlY3Vyc2lvbiwgc2ltaWxhciB0 byBLZXJtaXQncyBGaWxlIEF0dHJpYnV0ZSBwYWNrZXRzIChjaXJjYSAxOTg0KSwgaXQKKyAgIGhh cyBub3QgeWV0IGF0dGFpbmVkIFJGQyBvciBzdGFuZGFyZCBzdGF0dXMsIGFuZCBzZXJ2ZXJzIGFy ZSBub3QgeWV0CisgICB3aWRlbHkgYXZhaWxhYmxlIHRoYXQgb2ZmZXIgdGhpcyBmZWF0dXJlLiBJ biB0aGUgbWVhbnRpbWUsIHRoZQorICAgZWZmZWN0aXZlbmVzcyBvZiBNR0VUIC9SRUNVUlNJVkUg ZGVwZW5kcyBvbiB0aGUgRlRQIHNlcnZlcgorICAgaW1wbGVtZW50YXRpb24uIElmIHRoZSBzZXJ2 ZXIgcmV0dXJucyBhIHJlY3Vyc2l2ZSBsaXN0IGluIHJlc3BvbnNlIHRvCisgICB0aGUgc3RhbmRh cmQgTkxTVCBjb21tYW5kICh3aG9zZSBiZWhhdmlvciBpcyBpbGwtZGVmaW5lZCksIEtlcm1pdCdz IEZUUAorICAgTUdFVCAvUkVDVVJTSVZFIGNvbW1hbmQgdXNlcyBpdCB0byByZS1jcmVhdGUgdGhl IHJlbW90ZSBkaXJlY3RvcnkgdHJlZQorICAgbG9jYWxseS4gSWYgdGhlIHNlcnZlciBzdXBwb3J0 cyBNTFNELCBDLUtlcm1pdCA4LjAuMjA2IGFuZCBLZXJtaXQgOTUKKyAgIDIuMSBhbmQgbGF0ZXIg YXJlIGFibGUgdG8gc2Vuc2UgaXQgYXV0b21hdGljYWxseSBhbmQgdXNlIGl0LCBhcworICAgZGVz Y3JpYmVkIGJlbG93IGluIFszMjBdU2VjdGlvbiAzLjExLgorCisgICBUaGUgL0JFRk9SRTosIC9B RlRFUjosIC9OT1QtQkVGT1JFOiwgYW5kIC9OT1QtQUZURVI6IHN3aXRjaGVzIGFyZSBub3QKKyAg IGF2YWlsYWJsZSBmb3IgZG93bmxvYWRpbmcgYmVjYXVzZSBvZiB0aGUgY29uZnVzaW9uIHdpdGgg dGltZXpvbmVzLgorICAgV291bGQgdGhlIGdpdmVuIHRpbWVzIGJlIGluIHRoZSBsb2NhbCB0aW1l em9uZSwgdGhlIHNlcnZlcidzIHRpbWV6b25lLAorICAgb3IgR01UPyBUaGUgRlRQIHNlcnZlcidz IGRpcmVjdG9yeSBsaXN0aW5ncyBzaG93IGl0cyBvd24gbG9jYWwgdGltZXMKKyAgIGJ1dCBzaW5j ZSB3ZSBkb24ndCBrbm93IHdoYXQgdGltZXpvbmUgdGhlIHNlcnZlciBpcyBpbiwgdGhlcmUncyBu byB3YXkKKyAgIHRvIHJlY29uY2lsZSBvdXIgbG9jYWwgdGltZXMgd2l0aCB0aGUgc2VydmVyJ3Mu IFNpbWlsYXJseSwgL1BFUk1JU1NJT05TCisgICBjYW4ndCBiZSBwcmVzZXJ2ZWQgaW4gZG93bmxv YWRzIGJlY2F1c2UgRlRQIHByb3RvY29sIHByb3ZpZGVzIG5vIG1lYW5zCisgICBvZiBxdWVyeWlu ZyB0aGUgc2VydmVyIGZvciBhIGZpbGUncyBwZXJtaXNzaW9uLgorCisgICBTb3VyY2UtZmlsZSBk aXNwb3NpdGlvbiBzd2l0Y2hlczoKKworICAgL0RFTEVURQorICAgICAgICAgIEVhY2ggZmlsZSB0 aGF0IGlzIGRvd25sb2FkZWQgc3VjY2Vzc2Z1bGx5IGlzIHRvIGJlIGRlbGV0ZWQgZnJvbQorICAg ICAgICAgIHRoZSBzZXJ2ZXIuIFJlcXVpcmVzIHRoZSBhcHByb3ByaWF0ZSBmaWxlIGFjY2VzcyBy aWdodHMgb24gdGhlCisgICAgICAgICAgc2VydmVyLgorCisgICAvU0VSVkVSLVJFTkFNRS1UTzp0 ZW1wbGF0ZQorICAgICAgICAgIEFza3MgdGhlIHNlcnZlciB0byByZW5hbWUgZWFjaCAocmVtb3Rl KSBzb3VyY2UgZmlsZSBpbW1lZGlhdGVseQorICAgICAgICAgIGFmdGVyLCBhbmQgb25seSBpZiwg aXQgaXMgc2VudCBjb3JyZWN0bHkuIFNlZSBbMzIxXVBVVAorICAgICAgICAgIC9TRVJWRVItUkVO QU1FLVRPOiBmb3IgZGV0YWlscy4KKworICAgRGVzdGluYXRpb24tZmlsZSBkaXNwb3NpdGlvbiBz d2l0Y2hlczoKKworICAgL1RPLVNDUkVFTgorICAgICAgICAgIERpc3BsYXlzIHRoZSBpbmNvbWlu ZyBmaWxlIG9uIHRoZSBzY3JlZW4gcmF0aGVyIHRoYW4gc3RvcmluZyBpdAorICAgICAgICAgIG9u IGRpc2suIElmIHRoaXMgc3dpdGNoIGlzIGdpdmVuLCB0aGUgL1JFTkFNRS1UTyBhbmQgL01PVkUt VE8KKyAgICAgICAgICBzd2l0Y2hlcyBhcmUgaWdub3JlZCwgdGhlIGZpbGUtdHJhbnNmZXIgZGlz cGxheSBpcyBzdXBwcmVzc2VkLAorICAgICAgICAgIGFuZCB0aGUgZ2l2ZW4gZmlsZShzKSBpcy9h cmUgc2hvd24gb24gdGhlIHNjcmVlbi4gQ2FuIGJlIHVzZWQKKyAgICAgICAgICB3aXRoIC9GSUxU RVIsIGUuZy4KKworICBnZXQgL3RleHQgL3RvLXNjcmVlbiAvZmlsdGVyOm1vcmUgb29mYS50eHQK KworICAgICAgICAgIEluIGZhY3QsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSAvVE8tU0NSRUVOIHdp dGggL0ZJTFRFUiBvcgorICAgICAgICAgIC9DT01NQU5EIHdoZW4gdGhlIGNvbW1hbmQgd291bGQg cmVzdWx0IGluIGRpc3BsYXlpbmcgdGhlCisgICAgICAgICAgaW5jb21pbmcgZmlsZSBvbiB0aGUg c2NyZWVuOyBvdGhlcndpc2UgQy1LZXJtaXQgd291bGQgaGF2ZSBubworICAgICAgICAgIHdheSBv ZiBrbm93aW5nIHRvIHN1cHByZXNzIGl0cyBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgKHNpbmNlIGl0 CisgICAgICAgICAgY2FuJ3QgYmUgZXhwZWN0ZWQgdG8ga25vdyB3aGF0IHRoZSBjb21tYW5kIG9y IGZpbHRlciBkb2VzKS4KKworICAgL1JFTkFNRS1UTzp0ZW1wbGF0ZQorICAgICAgICAgIEVhY2gg ZmlsZSB0aGF0IGlzIGRvd25sb2FkZWQgaXMgdG8gYmUgcmVuYW1lZCBhcyBpbmRpY2F0ZWQgaWYK KyAgICAgICAgICBhbmQgb25seSBpZiBpdCB3YXMgcmVjZWl2ZWQgY29tcGxldGVseSBhbmQgd2l0 aG91dCBlcnJvci4gVGhlCisgICAgICAgICAgdGVtcGxhdGUgY2FuIGJlIGxpdGVyYWwgdGV4dCBv ciBjYW4gY29udGFpbiB2YXJpYWJsZXMgdGhhdCBhcmUKKyAgICAgICAgICBldmFsdWF0ZWQgZm9y IGVhY2ggZmlsZS4gRm9yIE1HRVQsIHRoZSB0ZXh0IG11c3QgY29udGFpbgorICAgICAgICAgIHZh cmlhYmxlczsgZm9yIEdFVCBpdCBjYW4gYmUgYSBsaXRlcmFsIHN0cmluZy4gVGhlIFx2KGZpbGVu YW1lKQorICAgICAgICAgIHZhcmlhYmxlIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50 IGZpbGUsIHNvOgorCisgIGZ0cCBtZ2V0IC9yZW5hbWUtdG86XHYoZmlsZW5hbWUpLm9rICoKKwor ICAgICAgICAgIGNhdXNlcyBlYWNoIGZpbGUgdGhhdCBpcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRl ZCB0byBoYXZlICIub2siCisgICAgICAgICAgYXBwZW5kZWQgdG8gaXRzIG5hbWUuIEZvciBkZXRh aWxzIHNlZSBbMzIyXVNlY3Rpb24gNC4xIG9mIHRoZQorICAgICAgICAgIFszMjNdQy1LZXJtaXQg Ny4wIFVwZGF0ZSBOb3Rlcy4KKworICAgL01PVkUtVE86dGV4dAorICAgICAgICAgIEp1c3QgbGlr ZSAvUkVOQU1FLVRPOiwgZXhjZXB0IHRoZSB0ZXh0IGRlbm90ZXMgdGhlIG5hbWUgb2YgYQorICAg ICAgICAgIGRpcmVjdG9yeSB0byB3aGljaCBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZCBmaWxlcyBh cmUgdG8gYmUKKyAgICAgICAgICBtb3ZlZC4gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlz dCwgaXQgaXMgY3JlYXRlZC4KKworICAgVGhlIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBkb2VzIG5v dCBzaG93IHRoZSAvTU9WRS1UTyBvciAvUkVOQU1FLVRPCisgICB2YWx1ZSwgc2luY2UgdGhlIGlu Y29taW5nIGZpbGUgaGFzIG5vdCB5ZXQgYmVlbiBtb3ZlZCBvciByZW5hbWVkLgorCiszLjYuMi4g RmlsZW5hbWUgQ29sbGlzaW9ucworCisgICBXaGF0IHNob3VsZCBoYXBwZW4gaWYgYW4gaW5jb21p bmcgZmlsZSBoYXMgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZworICAgZmlsZSBpbiB0aGUg c2FtZSBkaXJlY3Rvcnk/IEJ5IGRlZmF1bHQsIEtlcm1pdCdzIEZJTEUgQ09MTElTSU9OIHNldHRp bmcKKyAgIGFwcGxpZXM6IEJBQ0tVUCwgUkVOQU1FLCBVUERBVEUsIERJU0NBUkQsIGV0YywgYXMg ZGVzY3JpYmVkIGluCisgICBbMzI0XVVzaW5nIEMtS2VybWl0LiBLZXJtaXQncyBkZWZhdWx0IEZJ TEUgQ09MTElTSU9OIHNldHRpbmcgaXMgQkFDS1VQCisgICAocmVuYW1lIHRoZSBleGlzdGluZyBm aWxlIGFuZCBzdG9yZSB0aGUgaW5jb21pbmcgZmlsZSB1bmRlciBpdHMgb3duCisgICBuYW1lKSBh bmQgdGhlcmVmb3JlIHRoaXMgaXMgYWxzbyB0aGUgZGVmYXVsdCBGVFAgY29sbGlzaW9uIGFjdGlv bi4KKworICAgVGhlIG5hbWUgdW5kZXIgd2hpY2ggYW4gaW5jb21pbmcgZmlsZSBpcyB0byBiZSBz dG9yZWQgaXMgZGV0ZXJtaW5lZCBhcworICAgZm9sbG93czoKKworICAgICAqIElmIGFuIGFzLW5h bWUgd2FzIGdpdmVuLCB0aGUgYXMtbmFtZSBpcyB1c2VkLiBPdGhlcndpc2U6CisgICAgICogSWYg dGhlIGNsaWVudCBhbmQgc2VydmVyIHBsYXRmb3JtcyBhcmUgYWxpa2Ugb3IgWzMyNV1GVFAgRklM RU5BTUVTCisgICAgICAgaXMgc2V0IHRvIExJVEVSQUwgKG9yIHRoZSAvRklMRU5BTUVTOkxJVEVS QUwgc3dpdGNoIHdhcyBnaXZlbiBmb3IKKyAgICAgICB0aGlzIGRvd25sb2FkKSwgdGhlIGluY29t aW5nIGZpbGVuYW1lIGlzIHVzZWQgbGl0ZXJhbGx5LiBPdGhlcndpc2U6CisgICAgICogVGhlIGlu Y29taW5nIGZpbGVuYW1lIGlzIGNvbnZlcnRlZCB0byBhIGZvcm0gdGhhdCBpcyBmcmllbmRseSB0 bworICAgICAgIHRoZSBsb2NhbCBwbGF0Zm9ybS4gRm9yIFVOSVgsIGZvciBleGFtcGxlLCBpbmNv bWluZyBmaWxlbmFtZXMgdGhhdAorICAgICAgIGFyZSBhbGwgdXBwZXJjYXNlIChhcyB0aGV5IG1p Z2h0IGJlIGZyb20sIHNheSwgVk1TIG9yIGFuIElCTQorICAgICAgIG1haW5mcmFtZSkgYXJlIGNv bnZlcnRlZCB0byBsb3dlcmNhc2UuCisKKyAgIElmIHRoZSByZXN1bHRpbmcgbmFtZSBjb2luY2lk ZXMgd2l0aCB0aGUgbmFtZSBvZiBhIGxvY2FsIGZpbGUgdGhhdAorICAgYWxyZWFkeSBleGlzdHMs IHdlIGhhdmUgYSBmaWxlbmFtZSBjb2xsaXNpb24uIENvbGxpc2lvbnMgYXJlIGhhbmRsZWQKKyAg IGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbGxpc2lvbiBhY3Rpb246CisK KyAgIFNFVCBGVFAgQ09MTElTSU9OIHsgQkFDS1VQLCBSRU5BTUUsIFVQREFURSwgRElTQ0FSRCwg QVBQRU5ELCBPVkVSV1JJVEUKKyAgICAgICAgICB9CisgICAgICAgICAgVGhpcyBlc3RhYmxpc2hl cyBhIGZpbGVuYW1lIGNvbGxpc2lvbiBmb3IgRlRQLCBzZXBhcmF0ZSBmcm9tIHRoZQorICAgICAg ICAgIEtlcm1pdCBvbmUuIFRoZSBpbml0aWFsIEZUUCBjb2xsaXNpb24gc2V0dGluZyBpcyBpbmhl cml0ZWQgZnJvbQorICAgICAgICAgIEtlcm1pdCdzIEZJTEUgQ09MTElTSU9OIHNldHRpbmcgd2hl biB0aGUgZmlyc3QgRlRQIGNvbW1hbmQgaXMKKyAgICAgICAgICBnaXZlbiwgYnV0IHN1YnNlcXVl bnQgY2hhbmdlcyB0byBLZXJtaXQncyBGSUxFIENPTExJU0lPTiBzZXR0aW5nCisgICAgICAgICAg ZG8gbm90IGFmZmVjdCB0aGUgRlRQIENPTExJU0lPTiBzZXR0aW5nLiBTSE9XIEZUUCB0ZWxscyB0 aGUKKyAgICAgICAgICBjdXJyZW50IEZUUCBDT0xMSVNJT04gc2V0dGluZy4KKworICAgRlRQIEdF VCAvQ09MTElTSU9OOntCQUNLVVAsUkVOQU1FLFVQREFURSxESVNDQVJELEFQUEVORCxPVkVSV1JJ VEV9CisgICAgICAgICAgT3ZlcnJpZGVzIHRoZSBjdXJyZW50IEZUUCBDT0xMSVNJT04gYWN0aW9u IGZvciB0aGlzIGRvd25sb2FkCisgICAgICAgICAgb25seS4KKworICAgRlRQIEdFVCAvVVBEQVRF CisgICAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIEdFVCAvQ09MTElTSU9OOlVQREFURSwg YW5kIGlzIGluY2x1ZGVkIGZvcgorICAgICAgICAgIHN5bW1ldHJ5IHdpdGggUFVUIC9VUERBVEUK KworICAgRlRQIEdFVCAvVVBEQVRFIGFuZCAvQ09MTElTSU9OOlVQREFURSBtZWFuIHRvIGRvd25s b2FkIG9ubHkgdGhvc2UgZmlsZXMKKyAgIHdob3NlIG1vZGlmaWNhdGlvbiBkYXRlcyBvbiB0aGUg c2VydmVyIGFyZSBsYXRlciB0aGFuIHRob3NlIG9uIHRoZQorICAgY2xpZW50LiBEYXRlLXRpbWUg Y29tcGFyaXNvbnMgYXJlIGRvbmUgaW4gQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUKKyAgIChV VEMsIEdNVCwgWlVMVSkuIFRoZSBjb21tYW5kOgorCisgICAgIEZUUCBNR0VUIC9DT0xMSVNJT046 QVBQRU5EIC9BUy1OQU1FOm5ld2ZpbGVuYW1lICouKgorCisgICBEb3dubG9hZHMgYWxsIG1hdGNo aW5nIHJlbW90ZSBmaWxlcyBpbnRvIGEgc2luZ2xlIGxvY2FsIGZpbGUgKGluCisgICB3aGF0ZXZl ciBvcmRlciB0aGUgc2VydmVyIHNlbmRzIHRoZW0pLgorCiszLjYuMy4gUmVjb3ZlcnkKKworICAg UmVjb3ZlcnkgaXMgYXZhaWxhYmxlIGZvciBkb3dubG9hZHMgdG9vLCBidXQgdGhlcmUgYXJlIHNv bWUgZGlmZmVyZW5jZXMKKyAgIGZyb20gdGhlIHVwbG9hZGluZyBjYXNlIGRlc2NyaWJlZCBpbiBb MzI2XVNlY3Rpb24gMy41LjM6CisKKyAgICAgKiBUaGUgdHJhbnNmZXIgbXVzdCBiZSBpbiBCSU5B UlkgbW9kZS4gSXQgY2FuIG5vdCBiZSBpbiB0ZXh0IG1vZGUsCisgICAgICAgZXZlbiBpZiB0aGUg RlRQIHNlcnZlciBpcyBvbiB0aGUgc2FtZSBraW5kIG9mIHBsYXRmb3JtIGFzIEtlcm1pdCwKKyAg ICAgICBhbmQgZXZlbiBpZiB0aGVyZSBpcyBubyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLiBU aGUgb3JpZ2luYWwKKyAgICAgICBkb3dubG9hZCBtdXN0IGFsc28gaGF2ZSBiZWVuIGluIGJpbmFy eSBtb2RlLgorICAgICAqIFRoZSBGVFAgc2VydmVyIG11c3Qgc3VwcG9ydCB0aGUgUkVTVCAoInJl c3RhcnQiKSBkaXJlY3RpdmUuCisgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBub3QgYSBz dGFuZGFyZCBjb21tYW5kOyBhdCB0aGlzIHdyaXRpbmcsIGl0CisgICAgICAgaXMgZGVzY3JpYmVk IG9ubHkgaW4gYW4gSW50ZXJuZXQgRHJhZnQsIG5vdCBhbiBSRkMgb3IgSW50ZXJuZXQKKyAgICAg ICBTdGFuZGFyZCwgYnV0IG5ldmVydGhlbGVzcyBpdCBpcyBmb3VuZCBpbiBzZXZlcmFsIHBvcHVs YXIgRlRQCisgICAgICAgc2VydmVycywgc3VjaCBhcyBbMzI3XVByb0ZUUEQuCisKKyAgIEhlcmUn cyBob3cgZG93bmxvYWQgcmVjb3Zlcnkgd29ya3M6CisKKyAgICAgKiBLZXJtaXQgY2hlY2tzIGZv ciBjb25mbGljdGluZyBzd2l0Y2hlcywgc3VjaCBhcyAvVVBEQVRFLCAvQ09NTUFORCwKKyAgICAg ICBvciAvRklMVEVSLiBJZiAvUkVDT1ZFUiBpcyBnaXZlbiB3aXRoIHRoZXNlIHN3aXRjaGVzIGFu IGVycm9yCisgICAgICAgb2NjdXJzLgorICAgICAqIFRoZSBwcmV2YWlsaW5nIHRyYW5zZmVyIG1v ZGUgKFNFVCBGVFAgVFlQRSkgbXVzdCBiZSBCSU5BUlkuIElmIGl0CisgICAgICAgaXMgbm90LCB0 aGUgL0JJTkFSWSBzd2l0Y2ggbXVzdCBoYXZlIGJlZW4gaW5jbHVkZWQgd2l0aCB0aGUgRlRQCisg ICAgICAgW01dR0VUIGNvbW1hbmQuCisKKyAgIElmIHRoZSAvUkVDT1ZFUiBzd2l0Y2ggaXMgYWNj ZXB0ZWQsIHRoZW4gZm9yIGVhY2ggc2VsZWN0ZWQgZmlsZToKKworICAgICAqIEEgU0laRSBjb21t YW5kIGlzIHNlbnQgZm9yIHRoZSBmaWxlICh1c2luZyBpdHMgcmVtb3RlIG5hbWUpLiBJZiB0aGUK KyAgICAgICByZXBseSBpbmRpY2F0ZXMgdGhlIGZpbGUgd2FzIG5vdCBmb3VuZCwgb3IgdGhlIFNJ WkUgY29tbWFuZCB3YXMgbm90CisgICAgICAgdW5kZXJzdG9vZCwgb3IgYW55IG90aGVyIGtpbmQg b2YgZXJyb3IsIHJlY292ZXJ5IGlzIGNhbmNlbGVkIChpLmUuCisgICAgICAgdGhlIGVudGlyZSBm aWxlIGlzIGRvd25sb2FkZWQpLgorICAgICAqIElmIHRoZSBzaXplcyBvZiB0aGUgdHdvIGZpbGVz IGFyZSBpZGVudGljYWwsIHRoZSBmaWxlIGlzIG5vdCBzZW50LgorICAgICAgIE90aGVyd2lzZToK KyAgICAgKiBLZXJtaXQgc2VuZHMgdGhlIFJFU1QgZGlyZWN0aXZlIHRvIHRoZSBzZXJ2ZXIsIGlu ZGljYXRpbmcgdGhlIHNpemUKKyAgICAgICBvZiB0aGUgbG9jYWwgZmlsZS4gSWYgdGhlIHNlcnZl ciByZXNwb25kcyBhZmZpcm1hdGl2ZWx5LCBLZXJtaXQKKyAgICAgICBvcGVucyB0aGUgbG9jYWwg ZmlsZSBpbiBhcHBlbmQgbW9kZSBhbmQgYXBwZW5kcyB0aGUgaW5jb21pbmcgZGF0YQorICAgICAg IHRvIGl0LiBPdGhlcndpc2UsIHJlY292ZXJ5IGlzIGNhbmNlbGVkIGFuZCB0aGUgZW50aXJlIGZp bGUgaXMKKyAgICAgICBkb3dubG9hZGVkLgorCisgICBUaGUgL1JFQ09WRVIgc3dpdGNoIGNhbiBi ZSBpbmNsdWRlZCB3aXRoIGFueSBGVFAgR0VUIG9yIE1HRVQgY29tbWFuZCwKKyAgIGV2ZW4gaWYg aXQgc3BlY2lmaWVzIGEgZ3JvdXAgb2YgZmlsZXMuIFRoaXMgbGV0cyB5b3UgcmVzdW1lIGFuCisg ICBpbnRlcnJ1cHRlZCBiYXRjaCB0cmFuc2ZlciBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLiBUaGUg ZmlsZXMgdGhhdCB3ZXJlCisgICBhbHJlYWR5IGNvbXBsZXRlbHkgc2VudCBhcmUgc2tpcHBlZCwg dGhlIGZpbGUgdGhhdCB3YXMgaW50ZXJydXB0ZWQgaXMKKyAgIHJlY292ZXJlZCwgYW5kIHRoZSBy ZW1haW5pbmcgZmlsZXMgYXJlIHVwbG9hZGVkLiBCVVQuLi4gdW5saWtlIHdpdGgKKyAgIHVwbG9h ZGluZywgd2hlcmUgdGhpcyBjYW4gYmUgZG9uZSB3aXRoIGFueSBtaXh0dXJlIG9mIHRleHQgYW5k IGJpbmFyeQorICAgZmlsZXMsIHdoZW4gZG93bmxvYWRpbmcsIGl0IGNhbiBvbmx5IGJlIGRvbmUg aWYgYWxsIHRoZSBmaWxlcyBhcmUKKyAgIGJpbmFyeS4KKworICAgSXQgZG9lc24ndCBtYXR0ZXIg aG93IHRoZSBvcmlnaW5hbCBwYXJ0aWFsIGZpbGUgd2FzIGRvd25sb2FkZWQgLS0gRlRQLAorICAg S2VybWl0LCBIVFRQLCBabW9kZW0sIGV0YzogYXMgbG9uZyBhcyB0aGUgcHJlY29uZGl0aW9ucyBh cmUgbWV0LCBpdCBjYW4KKyAgIGJlIHJlY292ZXJlZCB3aXRoIEZUUCBbTV1HRVQgL1JFQ09WRVIs IG9yIGZvciB0aGF0IG1hdHRlciBhbHNvIHdpdGggR0VUCisgICAvUkVDT1ZFUiAodXNpbmcgS2Vy bWl0IHByb3RvY29sKS4KKworICAgWyBbMzI4XVRvcCBdIFsgWzMyOV1GVFAgVG9wIF0gWyBbMzMw XUMtS2VybWl0IEhvbWUgXSBbIFszMzFdS2VybWl0IEhvbWUKKyAgIF0KKworMy43LiBUcmFuc2xh dGluZyBDaGFyYWN0ZXIgU2V0cworCisgICBBIHBvc3NpYmx5IHVuaXF1ZSBmZWF0dXJlIG9mIEtl cm1pdCdzIEZUUCBjbGllbnQgaXMgaXRzIGFiaWxpdHkgdG8KKyAgIGNvbnZlcnQgY2hhcmFjdGVy IHNldHMgd2hlbiB0cmFuc2ZlcnJpbmcgZmlsZXMgaW4gdGV4dCBtb2RlLAorICAgaW5kZXBlbmRl bnQgb2YgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgRlRQIHNlcnZlciwgYXMgd2VsbCBhcyB0bwor ICAgdHJhbnNsYXRlIHRoZSBjaGFyYWN0ZXIgc2V0cyBvZiBmaWxlbmFtZXMgcmVnYXJkbGVzcyBv ZiB0cmFuc2ZlciBtb2RlLgorICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBGVFAg Y2xpZW50cywgYW5kIGJlY2F1c2UgdGhlcmUgaXMgYQorICAgY2VydGFpbiBwZXJmb3JtYW5jZSBw ZW5hbHR5LCBLZXJtaXQgd29uJ3QgZG8gdGhpcyB1bmxlc3MgeW91IGFzayBmb3IKKyAgIGl0LiBJ ZiB5b3UgZW5hYmxlIHRoaXMgZmVhdHVyZSwgeW91IG5lZWQgdG8gaW5mb3JtIEtlcm1pdCBvZiB0 aGUKKyAgIGNoYXJhY3RlciBzZXQgKHRvIGJlKSB1c2VkIG9uIHRoZSBzZXJ2ZXIgYW5kIGluIHNv bWUgY2FzZXMgKGV4cGxhaW5lZAorICAgYmVsb3cpIGFsc28gdGhlIGxvY2FsIGZpbGUgY2hhcmFj dGVyIHNldC4gVGhpcyBkaXNjdXNzaW9uIGFzc3VtZXMgeW91CisgICBrbm93IGEgYml0IGFib3V0 IGNoYXJhY3RlciBzZXRzIChhcyB5b3UgbXVzdCBpZiB5b3UgaGF2ZSB0byB1c2UgdGhlbSk7Cisg ICBzZWUgQ2hhcHRlciAxNiBvZiBbMzMyXVVzaW5nIEMtS2VybWl0IGZvciBhIGRldGFpbGVkIHRy ZWF0bWVudC4gVGhlCisgICBLZXJtaXQgY29tbWFuZHMgZm9yIEZUUCBjaGFyYWN0ZXItc2V0IGNv bnZlcnNpb24gYXJlOgorCisgICBTRVQgRlRQIENIQVJBQ1RFUi1TRVQtVFJBTlNMQVRJT04geyBP TiwgT0ZGIH0KKyAgICAgICAgICBXaGV0aGVyIHRvIHRyYW5zbGF0ZSBjaGFyYWN0ZXIgc2V0cyB3 aGVuIHRyYW5zZmVycmluZyB0ZXh0IGZpbGVzCisgICAgICAgICAgd2l0aCBGVFAuIE9GRiBieSBk ZWZhdWx0LiBTZXQgdGhpcyB0byBPTiB0byBlbmFibGUgY2hhcmFjdGVyLXNldAorICAgICAgICAg IHRyYW5zbGF0aW9uIGZvciBzdWJzZXF1ZW50IEZUUCB1cGxvYWRzIGFuZCBkb3dubG9hZHMuCisK KyAgIFNFVCBGVFAgU0VSVkVSLUNIQVJBQ1RFUi1TRVQgWzMzM11uYW1lCisgICAgICAgICAgVGV4 dCBjaGFyYWN0ZXIgc2V0ICh0byBiZSkgdXNlZCBieSB0aGUgc2VydmVyLiBNb3N0IEZUUCBzZXJ2 ZXJzCisgICAgICAgICAgYXJlIGlnbm9yYW50IG9mIGNoYXJhY3RlciBzZXRzLCBzbyBhbGwgdHJh bnNsYXRpb25zIGFyZSBkb25lCisgICAgICAgICAgdW5pbGF0ZXJhbGx5IGJ5IEtlcm1pdCdzIEZU UCBjbGllbnQuIFRoaXMgbWVhbnMgdGhhdCB3aGVuCisgICAgICAgICAgZG93bmxvYWRpbmcgZmls ZXMsIHlvdSBtdXN0IGtub3cgaW4gYWR2YW5jZSB0aGUgY2hhcmFjdGVyLXNldAorICAgICAgICAg IHVzZWQgaW4gdGhlIGZpbGVzIHlvdSBhcmUgZG93bmxvYWRpbmcgKGFuZCBpbiB0aGVpciBuYW1l cykuIFdoZW4KKyAgICAgICAgICB1cGxvYWRpbmcsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGNoYXJh Y3Rlci1zZXQgdG8gd2hpY2ggbG9jYWwKKyAgICAgICAgICBmaWxlbmFtZXMgYW5kIHRleHQtZmls ZSBjb250ZW50cyBhcmUgdG8gYmUgdHJhbnNsYXRlZCBmb3IKKyAgICAgICAgICB0cmFuc21pc3Np b24gdG8gdGhlIHNlcnZlci4gSWYgeW91IFNFVCBGVFAKKyAgICAgICAgICBDSEFSQUNURVItU0VU LVRSQU5TTEFUSU9OIE9OIGJ1dCBkbyBub3Qgc3BlY2lmeSBhbiBGVFAKKyAgICAgICAgICBTRVJW RVItQ0hBUkFDVEVSLVNFVCwgWzMzNF1VVEY4IGlzIHVzZWQsIHNpbmNlIHRoaXMgaXMgdGhlIG5l dworICAgICAgICAgIEludGVybmV0IHN0YW5kYXJkIGludGVybmF0aW9uYWwgY2hhcmFjdGVyIHNl dDsgaXQgaXMgdXB3YXJkcworICAgICAgICAgIGNvbXBhdGlibGUgd2l0aCBBU0NJSSBhbmQgaXQg ZW5jb21wYXNzZXMgbW9zdCB3cml0dGVuIGxhbmd1YWdlcworICAgICAgICAgIGFuZCB0aGVyZWZv cmUgZG9lcyBub3QgZmF2b3IgYW55IHBhcnRpY3VsYXIgZ3JvdXAgb2YgcGVvcGxlLCBhcworICAg ICAgICAgIGFueSBvdGhlciBkZWZhdWx0IHdvdWxkIGRvLiBJZiB5b3UgU0VUIEZUUCBTRVJWRVIt Q0hBUkFDVEVSLVNFVAorICAgICAgICAgIHRvIHNvbWV0aGluZyAoYW55dGhpbmcpIHdoZW4gRlRQ IENIQVJBQ1RFUi1TRVQgVFJBTlNMQVRJT04gaXMKKyAgICAgICAgICBPRkYsIHRoaXMgYWxzbyBz ZXRzIHRoZSBsYXR0ZXIgT04uCisKKyAgIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgWzMzNV1uYW1l CisgICAgICAgICAgVGhpcyBpcyB0aGUgcmVndWxhciBLZXJtaXQgKG5vbi1GVFAtc3BlY2lmaWMp IGNvbW1hbmQgZm9yCisgICAgICAgICAgaWRlbnRpZnlpbmcgdGhlIGNoYXJhY3RlciBzZXQgKHRv IGJlKSB1c2VkIGluIGxvY2FsIHRleHQgZmlsZXMKKyAgICAgICAgICBhbmQgZmlsZW5hbWVzLgor CisgICBUTyBSRUlURVJBVEU6IElmIHlvdSBTRVQgRlRQIENIQVJBQ1RFUi1TRVQgVFJBTlNMQVRJ T04gT04gYnV0IGRvIG5vdAorICAgc3BlY2lmeSBhbiBGVFAgU0VSVkVSLUNIQVJBQ1RFUi1TRVQs IG91dGJvdW5kIHRleHQgZmlsZXMgYXJlIGNvbnZlcnRlZAorICAgdG8gVVRGLTggYW5kIGluYm91 bmQgdGV4dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBiZSBVVEYtOC4gSWYgdGhpcyBpcyBub3QKKyAg IGFwcHJvcHJpYXRlLCBiZSBzdXJlIHRvIGFsc28gc3BlY2lmeSB0aGUgZGVzaXJlZCBGVFAKKyAg IFNFUlZFUi1DSEFSQUNURVItU0VULgorCisgICBZb3UgY2FuIHVzZSAic3BlY2lhbCIgKG5vbi1B U0NJSSkgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgaW4gYWxsIHRoZQorICAgY2xpZW50IC8gc2Vy dmVyIGZpbGUgbWFuYWdlbWVudCBjb21tYW5kcyAoRlRQIE1LRElSLCBSTURJUiwgRElSRUNUT1JZ LAorICAgVkRJUkVDVE9SWSwgREVMRVRFLCBldGMpLCBhbmQgYWxzbyBpbiBmaWxlLXRyYW5zZmVy IGNvbW1hbmRzLiBXaGVuCisgICBnaXZpbmcgY29tbWFuZHMgc3VjaCBhcyBGVFAgRElSIChSRElS KSBhbmQgRlRQIFBXRCAoUlBXRCksIHRoZSByZXBseSBpcworICAgdHJhbnNsYXRlZCB0b28sIHNv IHlvdSBjYW4gcmVhZCBpdC4gSW4gdGhpcyBleGFtcGxlLCB0aGUgY2xpZW50IGFuZAorICAgc2Vy dmVyIHVzZSBlbnRpcmVseSBkaWZmZXJlbnQgY29kZXMgdG8gcmVwcmVzZW50IHRoZSBzcGVjaWFs IGNoYXJhY3RlcnMKKyAgIG9mIEdlcm1hbjoKKworICBDLUtlcm1pdD4gZnRwIHh5emNvcnAuZGUg L2Fub255bW91cworICBDLUtlcm1pdD4gc2V0IGZ0cCBzZXJ2ZXItY2hhcmFjdGVyLXNldCBsYXRp bjEKKyAgQy1LZXJtaXQ+IHNldCBmaWxlIGNoYXJhY3Rlci1zZXQgZ2VybWFuCisgIEMtS2VybWl0 PiByY2QgU3Tvv71kdGUKKyAgQy1LZXJtaXQ+IHJwd2QKKyAgIi9wdWIvZnRwL1N077+9ZHRlIGlz IGN1cnJlbnQgZGlyZWN0b3J5IgorICBDLUtlcm1pdD4gcmRpcgorICAtcnctcnctLS0tICAxIG9s YWYgICAgIDU0MDE4IEphbiAgNiAxNzo1OCBBZGVuYu+/vXR0ZWwudHh0CisgIC1ydy1ydy0tLS0g IDEgdXJzdWxhICAgICAzNzMgSmFuICA1IDE1OjE5IEHvv71sYXIudHh0CisgIC1ydy1ydy0tLS0g IDEgZ2lzYmVydCAgICA0ODIgSmFuICA1IDE1OjIwIEJsb3dhdHoudHh0CisgIC1ydy1ydy0tLS0g IDEgZ3VkcnVuICAgICAxMjQgSmFuICA1IDE1OjE5IELvv71ibGluZ2VuLnR4dAorICAtcnctcnct LS0tICAxIG9sZ2EgICAgIDE0MzQ4IEphbiAgNyAxNDoyMyBL77+9bG4udHh0CisKKyAgIFdoZW4g dGhlIGNsaWVudCBhbmQgc2VydmVyIGZpbGUgc3lzdGVtcyB1c2UgZGlmZmVyZW50IGNoYXJhY3Rl ciBzZXRzLAorICAgeW91IHNob3VsZCB0YWtlIGNhcmUgdG8gdXNlIG9ubHkgdGhvc2UgY2hhcmFj dGVycyB0aGF0IHRoZSB0d28gc2V0cworICAgc2hhcmUgaW4gY29tbW9uIHdoZW4gY3JlYXRpbmcg ZmlsZW5hbWVzIG9yIHRleHQtZmlsZSBjb250ZW50cy4gRm9yCisgICBleGFtcGxlLCBQQyBjb2Rl IHBhZ2VzIGNvbnRhaW4gYSBsb3QgbGluZS0gYW5kIGJveC1kcmF3aW5nIGNoYXJhY3RlcnMsCisg ICBhbmQgc29tZXRpbWVzICJzbWFydCBxdW90ZXMiLCBldGMsIHRoYXQgYXJlIG5vdCBmb3VuZCBp biBJU08gc3RhbmRhcmQKKyAgIDgtYml0IGNoYXJhY3RlciBzZXRzLiBZb3Ugc2hvdWxkIGJlIGVz cGVjaWFsbHkgY2FyZWZ1bCB0byBhdm9pZCB1c2luZworICAgc3VjaCBjaGFyYWN0ZXJzIGluIGZp bGVuYW1lcy4KKworICAgWyBbMzM2XUMtS2VybWl0IENoYXJhY3RlciBTZXRzIF0KKworMy43LjEu IENoYXJhY3RlciBTZXRzIGFuZCBVcGxvYWRpbmcKKworICAgS2VybWl0J3MgUFVUIGFuZCBNUFVU IGNvbW1hbmRzIGluY2x1ZGUgZnVsbCBmaWxlLXNjYW5uaW5nIGNhcGFiaWxpdGllcywKKyAgIGFz IGRlc2NyaWJlZCBpbiBbMzM3XVNlY3Rpb24gNC4gVGh1cyBpZiBGVFAgQ0hBUkFDVEVSLVNFVC1U UkFOU0xBVElPTgorICAgaXMgT04gYW5kIHlvdXIgY2hhcmFjdGVyLXNldCBhc3NvY2lhdGlvbnMg YXJlIHNldCB1cCBhcHByb3ByaWF0ZWx5LAorICAgS2VybWl0IGF1dG9tYXRpY2FsbHkgc3dpdGNo ZXMgb24gYSBwZXItZmlsZSBiYXNpcyBiZXR3ZWVuIHRleHQgYW5kCisgICBiaW5hcnkgbW9kZSwg YW5kIGZvciBlYWNoIHRleHQgZmlsZSBiZXR3ZWVuIHlvdXIgY2hvc2VuIDctYml0IHRleHQKKyAg IGNoYXJhY3RlciBzZXQgKGUuZy4gQVNDSUkgb3IgSVNPIDY0NiBHZXJtYW4pLCA4LWJpdCB0ZXh0 IChlLmcuIExhdGluLTEKKyAgIG9yIEphcGFuZXNlIEVVQyksIFVDUy0yLCBhbmQgVVRGLTgsIGFu ZCBjb252ZXJ0cyBlYWNoIG9mIHRoZXNlCisgICBhdXRvbWF0aWNhbGx5IHRvIHRoZSBzZXJ2ZXIg Y2hhcmFjdGVyLXNldCwgYW5kIGZ1cnRoZXJtb3JlCisgICBhdXRvbWF0aWNhbGx5IGRpZmZlcmVu dGlhdGVzIGJldHdlZW4gdGhlIExpdHRsZSBhbmQgQmlnIEVuZGlhbiBmb3JtcyBvZgorICAgVUNT LTIsIGFsd2F5cyBzZW5kaW5nIGluIEJpZyBFbmRpYW4gZm9ybS4KKworICAgICBXQVJOSU5HOiBJ dCBpcyBub3QgYWR2aXNhYmxlIHRvIHVzZSBVQ1MtMiAob3IgYW55IFVuaWNvZGUKKyAgICAgdHJh bnNmb3JtYXRpb24gb3RoZXIgdGhhbiBVVEYtOCkgIm9uIHRoZSB3aXJlIiwgaS5lLiBhcyBhIHNl cnZlcgorICAgICBjaGFyYWN0ZXIgc2V0LiBNb3N0IEZUUCBzZXJ2ZXJzIGFyZSBub3QgYWJsZSB0 byBjb3BlIHdpdGggaXQsIHNpbmNlCisgICAgIGl0IGNvbnRhaW5zIGxvdHMgb2YgMCAoTlVMKSBj aGFyYWN0ZXJzLiBJZiB5b3UgZG8gdXNlIGl0LCBLZXJtaXQKKyAgICAgZG9lcyBub3QgdHJhbnNs YXRlIGZpbGVuYW1lcyB0byBvciBmcm9tIFVDUy0yLCBmb3IgcmVhc29ucyB3ZWxsCisgICAgIGtu b3duIHRvIEMgcHJvZ3JhbW1lcnMgKGZvciBleGFtcGxlLCBVTklYIEFQSXMgYXNzdW1lIGZpbGVu YW1lCisgICAgIHN0cmluZ3MgYXJlIE5VTC10ZXJtaW5hdGVkKS4gWzMzOF1VVEYtOCBpcyB0aGUg cHJlZmVycmVkIChhbmQKKyAgICAgc3RhbmRhcmQpIFVuaWNvZGUgZm9ybWF0IGZvciB0aGUgSW50 ZXJuZXQuCisKKyAgIEZUUCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9ucyBkaWZmZXIgZnJvbSB0 aGUgcmVndWxhciBLZXJtaXQgb25lcyBieQorICAgbm90IHJlc3RyaWN0aW5nIHRyYW5zbGF0aW9u cyB0byBhIGZpbGUtY2hhcmFjdGVyLXNldCAvCisgICB0cmFuc2Zlci1jaGFyYWN0ZXItc2V0IHBh aXIuIFlvdSBjYW4gaGF2ZSBLZXJtaXQncyBGVFAgY2xpZW50IHRyYW5zbGF0ZQorICAgYmV0d2Vl biBhbnkgcGFpciBvZiBjaGFyYWN0ZXIgc2V0cyBpdCBrbm93cyBhYm91dC4gWW91IGNhbiBzZWUg dGhlIGxpc3QKKyAgIG9mIHN1cHBvcnRlZCBjaGFyYWN0ZXIgc2V0cyBieSB0eXBpbmcgZWl0aGVy IG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgc2V0IGZ0cCBzZXJ2ZXItY2hhcmFjdGVyLXNldCA/Cisg IHNldCBmaWxlIGNoYXJhY3Rlci1zZXQgPworCisgICBBIHR5cGljYWwgbGlzdCBsb29rcyBsaWtl IHRoaXMgKFszMzldQ0xJQ0sgSEVSRSBmb3IgYW4gZXhwbGFuYXRpb24gb2YKKyAgIHRoZSBuYW1l cyk6CisKKyAgQy1LZXJtaXQ+c2V0IGZpbGUgY2hhciA/IE9uZSBvZiB0aGUgZm9sbG93aW5nOgor ICAgYXNjaWkgICAgICAgICAgICBjcDg2OS1ncmVlayAgICAgICBoZWJyZXctNyAgICAgICAgIG1h em92aWEtcGMKKyAgIGJyaXRpc2ggICAgICAgICAgY3lyaWxsaWMtaXNvICAgICAgaGVicmV3LWlz byAgICAgICBuZXh0LW11bHRpbmF0aW9uYWwKKyAgIGJ1bGdhcmlhLXBjICAgICAgZGFuaXNoICAg ICAgICAgICAgaHAtcm9tYW44ICAgICAgICBub3J3ZWdpYW4KKyAgIGNhbmFkaWFuLWZyZW5jaCAg ZGVjLWthbmppICAgICAgICAgaHVuZ2FyaWFuICAgICAgICBwb3J0dWd1ZXNlCisgICBjcDEyNTAg ICAgICAgICAgIGRlYy1tdWx0aW5hdGlvbmFsIGlzbzIwMjJqcC1rYW5qaSAgc2hpZnQtamlzLWth bmppCisgICBjcDEyNTEtY3lyaWxsaWMgIGRnLWludGVybmF0aW9uYWwgIGl0YWxpYW4gICAgICAg ICAgc2hvcnQta29pCisgICBjcDEyNTIgICAgICAgICAgIGR1dGNoICAgICAgICAgICAgIGppczct a2FuamkgICAgICAgc3BhbmlzaAorICAgY3A0MzcgICAgICAgICAgICBlbG90OTI3LWdyZWVrICAg ICBrb2k4ICAgICAgICAgICAgIHN3ZWRpc2gKKyAgIGNwODUwICAgICAgICAgICAgZWxvdDkyOC1n cmVlayAgICAga29pOHIgICAgICAgICAgICBzd2lzcworICAgY3A4NTIgICAgICAgICAgICBldWMt anAgICAgICAgICAgICBrb2k4dSAgICAgICAgICAgIHVjczIKKyAgIGNwODU1LWN5cmlsbGljICAg ZmlubmlzaCAgICAgICAgICAgbGF0aW4xLWlzbyAgICAgICB1dGY4CisgICBjcDg1OCAgICAgICAg ICAgIGZyZW5jaCAgICAgICAgICAgIGxhdGluMi1pc28KKyAgIGNwODYyLWhlYnJldyAgICAgZ2Vy bWFuICAgICAgICAgICAgbGF0aW45LWlzbworICAgY3A4NjYtY3lyaWxsaWMgICBncmVlay1pc28g ICAgICAgICBtYWNpbnRvc2gtbGF0aW4KKyAgQy1LZXJtaXQ+CisKKyAgIFRodXMgeW91IGNhbiB0 cmFuc2xhdGUgbm90IG9ubHkgYmV0d2VlbiBwcml2YXRlIHNldHMgKGxpa2UgUEMgY29kZQorICAg cGFnZXMpIGFuZCBzdGFuZGFyZCBvbmVzIChsaWtlIExhdGluLTEpIGFzIGluIEtlcm1pdCBwcm90 b2NvbCwgYnV0IGFsc28KKyAgIGJldHdlZW4gYW55IGdpdmVuIHBhaXIgb2YgcHJpdmF0ZSBzZXRz IChlLmcuIENQODUyIGFuZCBNYXpvdmlhKS4gQWxsCisgICBjb252ZXJzaW9ucyBnbyB0aHJvdWdo IFVuaWNvZGUgYXMgdGhlIGludGVybWVkaWF0ZSBjaGFyYWN0ZXIgc2V0LAorICAgcmVzdWx0aW5n IGluIGEgbWluaW11bSBvZiBjaGFyYWN0ZXIgbG9zcywgc2luY2UgVW5pY29kZSBpcyBhIHN1cGVy c2V0CisgICBvZiBhbGwgb3RoZXIgY2hhcmFjdGVyIHNldHMga25vd24gdG8gS2VybWl0LgorCisg ICBJbiBhZGRpdGlvbiB0byB0aGUgU0VUIGNvbW1hbmRzIGxpc3RlZCBhYm92ZSwgdGhlIEZUUCBQ VVQgYW5kIE1QVVQKKyAgIGNvbW1hbmRzIGluY2x1ZGUgc3dpdGNoZXMgdGhhdCBhcHBseSBvbmx5 IHRvIHRoZSBjdXJyZW50IGNvbW1hbmQ6CisKKyAgIC9MT0NBTC1DSEFSQUNURVItU0VUOm5hbWUK KyAgIC9TRVJWRVItQ0hBUkFDVEVSLVNFVDpuYW1lCisgICAgICAgICAgVXNlIHRoZXNlIHN3aXRj aGVzIHRvIGZvcmNlIGEgcGFydGljdWxhciB0cmFuc2xhdGlvbi4gVGhlc2UKKyAgICAgICAgICBz d2l0Y2hlcyBvdmVycmlkZSB0aGUgZ2xvYmFsIEZUUCBDSEFSQUNURVItU0VULVRSQU5TTEFUSU9O IGFuZAorICAgICAgICAgIFNFUlZFUi1DSEFSQUNURVItU0VUIHNldHRpbmdzIGFuZCBhbHNvIGNo YXJhY3Rlci1zZXQKKyAgICAgICAgICBkaWZmZXJlbnRpYXRpb24gYnkgZmlsZSBzY2FubmluZyBm b3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBQVVQgb3IKKyAgICAgICAgICBNUFVUIGNvbW1hbmQuIFRo ZSBmaWxlIHNjYW4gaXMgc3RpbGwgcGVyZm9ybWVkLCBob3dldmVyLCB0bworICAgICAgICAgIGRl dGVybWluZSB3aGV0aGVyIHRoZSBmaWxlIGlzIHRleHQgb3IgYmluYXJ5OyB0aHVzIHRoZXNlCisg ICAgICAgICAgc3dpdGNoZXMgZG8gbm90IGFmZmVjdCBiaW5hcnkgZmlsZXMgdW5sZXNzIHlvdSBh bHNvIGluY2x1ZGUgdGhlCisgICAgICAgICAgL1RFWFQgc3dpdGNoIHRvIGZvcmNlIGFsbCBmaWxl cyB0byBiZSB0cmVhdGVkIGFzIHRleHQuCisKKyAgIEluIG90aGVyIHdvcmRzLCBpZiB5b3UgaW5j bHVkZSBvbmUgb3IgYm90aCBvZiB0aGVzZSBzd2l0Y2hlcyB3aXRoIGEgUFVUCisgICBvciBNUFVU IGNvbW1hbmQsIHRoZXkgYXJlIHVzZWQuIFNpbWlsYXJseSwgdGhlIC9UUkFOU1BBUkVOVCBzd2l0 Y2gKKyAgIGRpc2FibGVzIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gZm9yIHRoZSBQVVQgb3Ig TVBVVCBjb21tYW5kIGRlc3BpdGUKKyAgIHRoZSBwcmV2YWlsaW5nIEZUUCBDSEFSQUNURVItU0VU LVRSQU5TTEFUSU9OIGFuZCBTRVJWRVItQ0hBUkFDVEVSLVNFVAorICAgc2V0dGluZ3MuCisKKyAg IFdoZW4gdXBsb2FkaW5nLCB0aGUgRklMRSBDSEFSQUNURVItU0VUIHNldHRpbmcgaXMgaWdub3Jl ZCB1bmxlc3MgeW91CisgICBoYXZlIGZvcmNlZCBLZXJtaXQgbm90IHRvIFszNDBdc2NhbiBsb2Nh bCBmaWxlcyBieSBpbmNsdWRpbmcgYSAvVEVYVCBvcgorICAgL0JJTkFSWSBzd2l0Y2ggd2l0aCB5 b3VyIFtNXVBVVCBjb21tYW5kLCBvciBieSBkaXNhYmxpbmcgYXV0b21hdGljCisgICB0ZXh0L2Jp bmFyeSBzd2l0Y2hpbmcgaW4gc29tZSBvdGhlciB3YXkuCisKKyAgIEV4YW1wbGVzOgorCisgICAg MS4gU3VwcG9zZSB5b3UgaGF2ZSBhIENQODUyIChFYXN0IEV1cm9wZWFuKSB0ZXh0IGZpbGUgdGhh dCB5b3Ugd2FudCB0bworICAgICAgIHVwbG9hZCBhbmQgc3RvcmUgaW4gSVNPIExhdGluIEFscGhh YmV0IDIgZW5jb2Rpbmc6CisgIGZ0cCBwdXQgL2xvY2FsLWNoYXI6Y3A4NTIgL3NlcnZlci1jaGFy OmxhdGluMiBtYWd5YXIudHh0CisKKyAgICAyLiBTdXBwb3NlIHlvdSBhbHdheXMgd2FudCB5b3Vy IHRleHQgZmlsZXMgY29udmVydGVkIHRvIExhdGluLTIgd2hlbgorICAgICAgIHVwbG9hZGluZyB3 aXRoIEZUUC4gVGhlbiBwdXQ6CisgIHNldCBmdHAgc2VydmVyLWNoYXJhY3Rlci1zZXQgbGF0aW4y CisKKyAgICAgICBpbiB5b3VyIEtlcm1pdCBjdXN0b21pemF0aW9uIGZpbGUsIGFuZCB0aGVuIHlv dSBjYW4gb21pdCB0aGUKKyAgICAgICAvU0VSVkVSLUNIQVJBQ1RFUi1TRVQ6IHN3aXRjaCBmcm9t IHlvdXIgRlRQIFBVVCBjb21tYW5kczoKKyAgZnRwIHB1dCAvbG9jYWwtY2hhcjpjcDg1MiBtYWd5 YXIudHh0CisKKyAgICAzLiBOb3cgc3VwcG9zZSB0aGF0IGFsbCB0aGUgdGV4dCBmaWxlcyBvbiB5 b3VyIFBDIGFyZSB3cml0dGVuIGluCisgICAgICAgSHVuZ2FyaWFuLCBidXQgdGhleSBoYXZlIGEg dmFyaWV0eSBvZiBlbmNvZGluZ3MsIGFuZCB5b3UgZG9uJ3Qgd2FudAorICAgICAgIHRvIGhhdmUg dG8gaW5jbHVkZSB0aGUgL0xPQ0FMLUNIQVJBQ1RFUi1TRVQ6IHN3aXRjaCBvbiBldmVyeSBGVFAK KyAgICAgICBQVVQgY29tbWFuZCwgb3IgKG1vcmUgdG8gdGhlIHBvaW50KSB5b3Ugd2FudCB0byBi ZSBhYmxlIHRvIHNlbmQgYQorICAgICAgIG1peHR1cmUgb2YgdGhlc2UgZmlsZXMgYWxsIGF0IG9u Y2UuIFB1dCB0aGVzZSBjb21tYW5kcyBpbiB5b3VyCisgICAgICAgS2VybWl0IGN1c3RvbWl6YXRp b24gZmlsZToKKyAgc2V0IGZ0cCBzZXJ2ZXItY2hhcmFjdGVyLXNldCBsYXRpbjIgICAgICAgICAg ICA7IElTTyA4ODU5LTIKKyAgc2V0IGZpbGUgZGVmYXVsdCA3LWJpdC1jaGFyYWN0ZXItc2V0IGh1 bmdhcmlhbiA7IElTTyA2NDYgSHVuZ2FyaWFuCisgIHNldCBmaWxlIGRlZmF1bHQgOC1iaXQtY2hh cmFjdGVyLXNldCBjcDg1MiAgICAgOyBQQyBFYXN0IEV1cm9wZWFuIENvZGUgUGFnZQorCisgICAg ICAgYW5kIG5vdyBQVVQgYW5kIE1QVVQgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCBhbmQgc3dp dGNoIGFtb25nIElTTworICAgICAgIDY0NiBIdW5nYXJpYW4sIENvZGUgUGFnZSA4NTIsIFVURi04 LCBhbmQgVUNTLTIgZW5jb2RpbmdzLAorICAgICAgIHRyYW5zbGF0aW5nIGVhY2ggb25lIHRvIExh dGluLTIgZm9yIHVwbG9hZGluZzoKKyAgZnRwIHB1dCAqLnR4dAorCisgICBBbmQgc2luY2UgYmlu YXJ5IGZpbGVzIGFyZSBhbHNvIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHRoZSBsYXR0ZXIgY2Fu CisgICBiZSBzaW1wbGlmaWVkIHRvOgorCisgIGZ0cCBwdXQgKgorCisgICBldmVuIHdoZW4gIioi IG1hdGNoZXMgYSBkaXZlcnNlIGNvbGxlY3Rpb24gb2YgYmluYXJ5IGFuZCB0ZXh0IGZpbGVzLAor ICAgYmVjYXVzZSB0cmFuc2xhdGlvbnMgYXJlIHNraXBwZWQgYXV0b21hdGljYWxseSBmb3IgYmlu YXJ5IGZpbGVzLgorCiszLjcuMi4gQ2hhcmFjdGVyIFNldHMgYW5kIERvd25sb2FkaW5nCisKKyAg IFRoZSBjb21tYW5kcyBhbmQgc3dpdGNoZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB1cGxvYWRpbmcs IGJ1dCBhdXRvbWF0aWMKKyAgIGNoYXJhY3Rlci1zZXQgc3dpdGNoaW5nIHdvcmtzIGRpZmZlcmVu dGx5LCBzaW5jZSBLZXJtaXQgY2FuJ3Qgc2NhbiB0aGUKKyAgIHNlcnZlciBmaWxlcyBpbiBhZHZh bmNlLiBJbnN0ZWFkLCB0aGUgdHJhbnNmZXIgbW9kZSAodGV4dCBvciBiaW5hcnkpIGlzCisgICBi YXNlZCBvbiB0aGUgZmlsZW5hbWVzOyBlYWNoIG5hbWUgaXMgY29tcGFyZWQgd2l0aCBLZXJtaXQn cyBsaXN0IG9mCisgICB0ZXh0IG5hbWUgcGF0dGVybnMgYW5kIGJpbmFyeSBuYW1lIHBhdHRlcm5z LiBJZiB0aGUgbmFtZSBtYXRjaGVzIGEKKyAgIGJpbmFyeSBwYXR0ZXJuIChmb3IgZXhhbXBsZSwg aWYgdGhlIGZpbGVuYW1lIGlzIG9vZmEudGFyLmd6IGFuZCBvbmUgb2YKKyAgIHRoZSBmaWxlbmFt ZSBwYXR0ZXJucyBpcyAiKi5neiIpLCB0aGUgZmlsZSBpcyBkb3dubG9hZGVkIGluIGJpbmFyeQor ICAgbW9kZTsgb3RoZXJ3aXNlIGlmIGl0IG1hdGNoZXMgYSB0ZXh0IHBhdHRlcm4gKGUuZy4gb29m YS50eHQgbWF0Y2hlcworICAgIioudHh0IiksIGl0IGlzIHRyYW5zZmVycmVkIGluIHRleHQgKCJh c2NpaSIpIG1vZGUuIE90aGVyd2lzZSwgaXQgaXMKKyAgIHRyYW5zZmVycmVkIGluIHRoZSBwcmV2 YWlsaW5nIEZUUCBUWVBFLgorCisgICBJbiBDLUtlcm1pdCA4LjAsIHRoZSBwYXR0ZXJuIGxpc3Rz IHVzZWQgd2l0aCBGVFAgR0VUIGFyZSBub3QgdGhlIHNhbWUKKyAgIGxpc3RzIHVzZWQgd2l0aCBL ZXJtaXQgdHJhbnNmZXJzLCBhbmQgY2FuIG5vdCBiZSB2aWV3ZWQgd2l0aCBTSE9XCisgICBQQVRU RVJOUywgbm9yIGFkanVzdGVkIHdpdGggQUREIGFuZCBSRU1PVkUgVEVYVC1QQVRURVJOUyBhbmQK KyAgIEJJTkFSWS1QQVRURVJOUywgb3IgU0VUIEZJTEUgVEVYVC1QQVRURVJOUyBhbmQgQklOQVJZ LVBBVFRFUk5TLgorICAgQ29uZmlndXJhdGlvbiBvZiB0aGUgRlRQIHBhdHRlcm5zIGxpc3Qgd2ls bCBiZSBhZGRlZCBpbiBhIGZ1dHVyZQorICAgcmVsZWFzZS4KKworICAgRXhhbXBsZXM6CisKKyAg IGdldCAvc2VydmVyLWNoYXI6bGF0aW4xIC9sb2NhbC1jaGFyOmNwODUwIEdy77+977+9ZS50eHQK KyAgICAgICAgICBJbiB0aGlzIGNvbW1hbmQsIHRoZSBmaWxlbmFtZSBjb250YWlucyBzcGVjaWFs IGNoYXJhY3RlcnMsIHdoaWNoCisgICAgICAgICAgeW91IGVudGVyIHVzaW5nIHdoYXRldmVyIGNo YXJhY3RlciBzZXQgeW91ciBsb2NhbCBjb21wdXRlciB1c2VzLAorICAgICAgICAgIGluIHRoaXMg Y2FzZSBQQyBDb2RlIFBhZ2UgODUwIChjcDg1MCkuIFRoZSBjb21tYW5kIHRlbGxzIEtlcm1pdAor ICAgICAgICAgIChpbiBjYXNlIGl0IGRpZG4ndCBrbm93IGFscmVhZHkgZnJvbSBpdHMgRklMRSBD SEFSQUNURVItU0VUCisgICAgICAgICAgc2V0dGluZykgdGhhdCB0aGUgbG9jYWwgY2hhcmFjdGVy IHNldCBpcyBjcDg1MCBhbmQgdGhlIHNlcnZlcidzCisgICAgICAgICAgY2hhcmFjdGVyLXNldCBp cyBJU08gODg1OS0xIExhdGluIEFscGhhYmV0IDEgKGxhdGluMSkuIEtlcm1pdAorICAgICAgICAg IHRyYW5zbGF0ZXMgdGhlIGZpbGVuYW1lIGZyb20gY3A4NTAgdG8gbGF0aW4xIGFuZCBzZW5kcyB0 aGUKKyAgICAgICAgICBsYXRpbjEgbmFtZSB0byB0aGUgc2VydmVyLiBTaW5jZSBpdCdzIGEgdGV4 dCBmaWxlIChtYXRjaGVzCisgICAgICAgICAgIioudHh0IiksIGl0cyBjb250ZW50cyBhcmUgdHJh bnNsYXRlZCB0byBjcDg1MCBvbiBhcnJpdmFsLCBhbmQKKyAgICAgICAgICBpdCBpcyBzYXZlZCB3 aXRoIGEgY3A4NTAgbmFtZS4KKworICAgbWdldCAvdGV4dCAvc2VydmVyOmxhdGluMSAvbG9jYWw6 dXRmOCAqLnR4dAorICAgICAgICAgIFRoaXMgY29tbWFuZDoKKworICAgICAgICAgICsgVGVsbHMg Qy1LZXJtaXQgdGhhdCB0aGUgc2VydmVyJ3MgZmlsZXMgYXJlIGVuY29kZWQgaW4gSVNPCisgICAg ICAgICAgICA4ODU5LTEgTGF0aW4gQWxwaGFiZXQgMS4KKyAgICAgICAgICArIFRlbGxzIEMtS2Vy bWl0IHRvIHRyYW5zbGF0ZSB0aGUgaW5jb21pbmcgZmlsZXMgaW50byBVbmljb2RlCisgICAgICAg ICAgICBVVEYtOCBmb3Igc3RvcmFnZS4KKyAgICAgICAgICArIEFza3MgdGhlIHNlcnZlciB0byBz ZW5kIGFsbCAiLnR4dCIgZmlsZXMgaW4gdGV4dCBtb2RlLgorCisgICBtZ2V0IC9zZXJ2ZXI6bGF0 aW4xIC9sb2NhbDp1dGY4ICoKKyAgICAgICAgICBUZWxscyBLZXJtaXQgdG8gZ2V0IGFsbCBmaWxl cyBmcm9tIHRoZSBzZXJ2ZXIncyBkaXJlY3RvcnksCisgICAgICAgICAgc3dpdGNoaW5nIGJldHdl ZW4gdGV4dCBhbmQgYmluYXJ5IG1vZGUgYmFzZWQgb24gdGhlIGZpbGVuYW1lLgorICAgICAgICAg IFRoZSBuYW1lcyBvZiBhbGwgdGhlIGZpbGVzIGFyZSB0cmFuc2xhdGVkICh0byBVVEYtOCBpbiB0 aGlzCisgICAgICAgICAgY2FzZSksIGJ1dCBjb250ZW50cyBhcmUgdHJhbnNsYXRlZCAoYWxzbyB0 byBVVEYtOCkgb25seSBmb3IgdGV4dAorICAgICAgICAgIGZpbGVzLgorCisgICBOb3RlIHRoYXQg YW55IHBhaXIgb2YgOC1iaXQgY2hhcmFjdGVyIHNldHMgaXMgbGlrZWx5IHRvIGhhdmUgc29tZQor ICAgaW5jb21wYXRpYmlsaXRpZXMuIEFueSBjaGFyYWN0ZXJzIGluIHRoZSBzb3VyY2UgZmlsZSB0 aGF0IGRvIG5vdCBoYXZlCisgICBlcXVpdmFsZW50cyBpbiB0aGUgZGVzdGluYXRpb24gZmlsZSdz IGNoYXJhY3RlciBzZXQgYXJlIGNvbnZlcnRlZCB0bworICAgcXVlc3Rpb24gbWFya3MuIFRoaXMg YXBwbGllcyB0byBib3RoIGZpbGVuYW1lcyBhbmQgdG8gdGV4dCBmaWxlCisgICBjb250ZW50cy4K KworICAgQWxzbyBub3RlIHRoYXQgdGhlIHNlcnZlcidzIGFiaWxpdHkgdG8gYWNjZXB0IHNwZWNp YWwgY2hhcmFjdGVycyBpbgorICAgZmlsZW5hbWVzIGRlcGVuZHMgb24gdGhlIHBhcnRpY3VsYXIg c2VydmVyLiBGb3IgZXhhbXBsZToKKworICBnZXQgR3Lvv73vv71lLnR4dAorCisgICB3b3JrcyB3 aXRoIFdVLUZUUEQsIGJ1dDoKKworICBtZ2V0IEdy77+977+9Ki50eHQKKworICAgZG9lcyBub3Qu CisKKzMuNy4zLiBSRkMyNjQwCisKKyAgIFszNDFdUkZDMjY0MCwgSnVseSAxOTk5LCBzcGVjaWZp ZXMgYSBtZXRob2QgYnkgd2hpY2ggdGhlIEZUUCBjbGllbnQgYW5kCisgICBzZXJ2ZXIgY2FuIG5l Z290aWF0ZSB0aGUgdXNlIG9mIFVURjguIEhvd2V2ZXIsIFJGQzI2NDAtY2FwYWJsZSBzZXJ2ZXJz CisgICBhcmUgcmFyZSB0byBub25leGlzdGVudCBhdCB0aGlzIHdyaXRpbmcsIGFuZCBpbiBhbnkg Y2FzZSB5b3UgZG9uJ3QgbmVlZAorICAgdGhlbSB0byBiZSBhYmxlIHRvIHRyYW5zZmVyIHRleHQg aW4gVVRGOC4gQy1LZXJtaXQgbGV0cyB5b3UgdXBsb2FkIGFuZAorICAgZG93bmxvYWQgdGV4dCBm aWxlcyBpbiBhbnkgY2hhcmFjdGVyIHNldCBpdCBrbm93cyBhYm91dCwgY29udmVydGluZyB0bwor ICAgb3IgZnJvbSBhbnkgb3RoZXIgY2hhcmFjdGVyIHNldCBpdCBrbm93cyBhYm91dCwgd2l0aG91 dCB0aGUga25vd2xlZGdlLAorICAgcGVybWlzc2lvbiwgb3IgY29vcGVyYXRpb24gb2YgdGhlIHNl cnZlciwgYW5kIHJlZ2FyZGxlc3Mgb2YgaXRzCisgICBjYXBhYmlsaXRpZXMuCisKKyAgIFsgWzM0 Ml1Ub3AgXSBbIFszNDNdRlRQIFRvcCBdIFsgWzM0NF1DLUtlcm1pdCBIb21lIF0gWyBbMzQ1XUtl cm1pdCBIb21lCisgICBdCisKKzMuOC4gRlRQIENvbW1hbmQgU2hvcnRjdXRzCisKKyAgIEMtS2Vy bWl0J3MgRlRQIGNsaWVudCBjb2V4aXN0cyB3aXRoIG90aGVyIEMtS2VybWl0IGZ1bmN0aW9ucyBi eQorICAgcmVxdWlyaW5nIHRoZSAiZnRwIiBwcmVmaXggZm9yIGVhY2ggRlRQLXJlbGF0ZWQgY29t bWFuZDogRlRQIE9QRU4sIEZUUAorICAgR0VULCBGVFAgQllFLCBhbmQgc28gb24uIEZvciBpbnRl cmFjdGl2ZSB1c2UsIGhvd2V2ZXIsIHRoaXMgY2FuIGJlCisgICByYXRoZXIgYXdrd2FyZCBhbmQg c29tZXRpbWVzIHN1cnByaXNpbmcsIGZvciBleGFtcGxlIHdoZW4gYSBHRVQgY29tbWFuZAorICAg c3RhcnRzIGEgS2VybWl0IEdFVCByYXRoZXIgdGhhbiBhbiBGVFAgR0VULiBJbiBmYWN0LCBtYW55 IEtlcm1pdAorICAgY29tbWFuZHMgbWlnaHQganVzdCBhcyBlYXNpbHkgYXBwbHkgdG8gYW4gRlRQ IGNvbm5lY3Rpb246IEdFVCwgUFVUCisgICAoU0VORCksIEJZRSwgYW5kIENMT1NFLiBUaGUgZm9s bG93aW5nIGNvbW1hbmQgbGV0cyB5b3UgY2hvb3NlIGhvdyB0aGVzZQorICAgY29tbWFuZHMgYXJl IGludGVycHJldGVkOgorCisgICBTRVQgR0VULVBVVC1SRU1PVEUgeyBBVVRPLCBLRVJNSVQsIEZU UCB9CisgICAgICAgICAgQ29udHJvbHMgdGhlIG9yaWVudGF0aW9uIG9mIEdFVCwgUFVULCBSRU1P VEUgYW5kIG90aGVyCisgICAgICAgICAgZmlsZS10cmFuc2ZlciBhbmQgY2xpZW50L3NlcnZlciBj b21tYW5kcyB0aGF0IG1pZ2h0IGFwcGx5IHRvCisgICAgICAgICAgZWl0aGVyIEtlcm1pdCBvciBG VFAuIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgQVVUTywgbWVhbmluZyB0aGF0CisgICAgICAgICAg dGhlc2UgY29tbWFuZHMgYXBwbHkgdG8gRlRQIGlmIGFuIEZUUCBjb25uZWN0aW9uIGlzIG9wZW4s IGFuZCB0bworICAgICAgICAgIEtlcm1pdCBvdGhlcndpc2UuIEtFUk1JVCBtZWFucyB0aGV5IGFs d2F5cyBhcHBseSB0byBLZXJtaXQsIEZUUAorICAgICAgICAgIG1lYW5zIHRoZXkgYWx3YXlzIGFw cGx5IHRvIEZUUC4KKworICAgSGVyZSBpcyBhIGNvbXBsZXRlIGxpc3Qgb2YgYWZmZWN0ZWQgY29t bWFuZHM6CisKKyBLZXJtaXQgQ29tbWFuZCAgICAgICAgICAgICAgIEZUUCBFcXVpdmFsZW50Cisg IChub25lKSAgICAgICAgICAgICAgICAgICAgICAgRlRQIFsgT1BFTiBdCisgIExPR0lOICAgICAg ICAgICAgICAgICAgICAgICAgRlRQIFVTRVIKKyAgTE9HT1VUICAgICAgICAgICAgICAgICAgICAg ICBGVFAgUkVTRVQKKyAgQllFICAgICAgICAgICAgICAgICAgICAgICAgICBGVFAgQllFCisgIEZJ TklTSCAgICAgICAgICAgICAgICAgICAgICAgRlRQIEJZRQorICBDTE9TRSAgICAgICAgICAgICAg ICAgICAgICAgIEZUUCBCWUUKKyAgSEFOR1VQICAgICAgICAgICAgICAgICAgICAgICBGVFAgQllF CisgIEJJTkFSWSAgICAgICAgICAgICAgICAgICAgICAgRlRQIFRZUEUgQklOQVJZCisgIFRFWFQg KG9yIEFTQ0lJKSAgICAgICAgICAgICAgRlRQIFRZUEUgQVNDSUkKKyAgU0VORCAob3IgUFVUKSAg ICAgICAgICAgICAgICBGVFAgUFVUCisgIE1TRU5EIChvciBNUFVUKSAgICAgICAgICAgICAgRlRQ IE1QVVQKKyAgUkVTRU5EICAgICAgICAgICAgICAgICAgICAgICBGVFAgUFVUIC9SRUNPVkVSCisg IENTRU5EICAgICAgICAgICAgICAgICAgICAgICAgRlRQIFBVVCAvQ09NTUFORAorICBHRVQgICAg ICAgICAgICAgICAgICAgICAgICAgIEZUUCBHRVQKKyAgTUdFVCAgICAgICAgICAgICAgICAgICAg ICAgICBGVFAgTUdFVAorICBSRUdFVCAgICAgICAgICAgICAgICAgICAgICAgIEZUUCBHRVQgL1JF Q09WRVIKKyAgUkVNT1RFIEhFTFAgICAgICAoUkhFTFApICAgICBGVFAgSEVMUAorICBSRU1PVEUg Q0QgICAgICAgIChSQ0QpICAgICAgIEZUUCBDRCAoQ1dEKQorICBSRU1PVEUgUFdEICAgICAgIChS UFdEKSAgICAgIEZUUCBQV0QKKyAgUkVNT1RFIERJUkVDVE9SWSAoUkRJUikgICAgICBGVFAgRElS RUNUT1JZCisgIFJFTU9URSBERUxFVEUgICAgKFJERUwpICAgICAgRlRQIERFTEVURQorICBSRU1P VEUgTUtESVIgICAgIChSTUtESVIpICAgIEZUUCBNS0RJUgorICBSRU1PVEUgUk1ESVIgICAgIChS Uk1ESVIpICAgIEZUUCBSTURJUgorICBSRU1PVEUgUkVOQU1FICAgIChSUkVOQU1FKSAgIEZUUCBS RU5BTUUKKyAgUkVNT1RFIFRZUEUgICAgICAoUlRZUEUpICAgICBGVFAgVFlQRQorICBSRU1PVEUg RVhJVCAgICAgIChSRVhJVCkgICAgIEZUUCBCWUUKKworICAgVGhlIGNvbW1hbmRzIGluIHRoZSBy aWdodC1oYW5kIGNvbHVtbiBhbHdheXMgYWNjZXNzIEZUUC4gVGhlIGNvbW1hbmRzCisgICBpbiB0 aGUgbGVmdCBjb2x1bW4gY2FuIGFjY2VzcyBlaXRoZXIgS2VybWl0IHByb3RvY29sIG9yIEZUUDoK KworICAgICAqIFdoZW4gR0VULVBVVC1SRU1PVEUgaXMgc2V0IHRvIEtFUk1JVCwgb3IgdG8gQVVU TyB3aGVuIHRoZXJlIGlzIG5vCisgICAgICAgRlRQIGNvbm5lY3Rpb24sIHRoZSBjb21tYW5kcyBp biB0aGUgbGVmdC1oYW5kIGNvbHVtbiBhY2Nlc3MgS2VybWl0CisgICAgICAgcHJvdG9jb2wsIGFu ZCB0aG9zZSByaWdodC1oYW5kIGNvbHVtbiBhcmUgcmVxdWlyZWQgZm9yIEZUUC4KKyAgICAgKiBX aGVuIEdFVC1QVVQtUkVNT1RFIGlzIHNldCB0byBGVFAsIG9yIHRvIEFVVE8gd2hlbiB0aGVyZSBp cyBhbgorICAgICAgIGFjdGl2ZSBGVFAgY29ubmVjdGlvbiwgdGhlIGNvbW1hbmRzIGluIHRoZSBs ZWZ0LWhhbmQgY29sdW1uIGFjY2VzcworICAgICAgIHRoZSBGVFAgY29ubmVjdGlvbiBhbmQgY2Fu IG5vdCBiZSB1c2VkIHRvIGFjY2VzcyBLZXJtaXQgcHJvdG9jb2wuCisgICAgICAgSW4gdGhpcyBj YXNlLCBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBib3RoIEtlcm1pdCBwcm90b2NvbAor ICAgICAgIGFuZCB0aGUgRlRQIGNvbm5lY3Rpb24sIHlvdSBtdXN0IFNFVCBHRVQtUFVULVJFTU9U RSBLRVJNSVQsIGFuZAorICAgICAgIHRoZW4gdXNlIHRoZSBGVFAgY29tbWFuZHMgaW4gdGhlIHJp Z2h0LWhhbmQgY29sdW1uIHRvIGFjY2VzcyB0aGUKKyAgICAgICBGVFAgY29ubmVjdGlvbi4KKwor ICAgTm90ZSB0aGF0IGZpbGUtbWFuYWdlbWVudCBjb21tYW5kcyBzdWNoIGFzIERJUkVDVE9SWSwg REVMRVRFLCBDRCwgUFdELAorICAgTUtESVIsIFJNRElSLCBIRUxQLCBSRU5BTUUsIENPUFksIFRZ UEUsIGFuZCBzbyBvbiwgYWx3YXlzIGFwcGx5CisgICBsb2NhbGx5LCBubyBtYXR0ZXIgd2hhdCBr aW5kIG9mIGNvbm5lY3Rpb24geW91IGhhdmUuIFRoaXMgaXMgdGhlCisgICBvcHBvc2l0ZSBvZiBt b3N0IEZUUCBjbGllbnRzLCB3aGVyZSB0aGVzZSBjb21tYW5kcyBhcmUgaW50ZW5kZWQgZm9yIHRo ZQorICAgc2VydmVyLCBhbmQgcmVxdWlyZSBhbiAiTCIgcHJlZml4IGZvciBsb2NhbCBleGVjdXRp b24gKGUuZy4gImRpciIgZ2V0cworICAgYSBkaXJlY3RvcnkgbGlzdGluZyBmcm9tIHRoZSBzZXJ2 ZXIsICJsZGlyIiBnZXRzIGEgbG9jYWwgZGlyZWN0b3J5CisgICBsaXN0aW5nKS4gVG8gaWxsdXN0 cmF0ZSB3aXRoIHRoZSBDRCBjb21tYW5kIGFuZCBhIHR5cGljYWwgVU5JWCBGVFAKKyAgIGNsaWVu dDoKKworIENsaWVudCAgIFNlcnZlciAgICAgIENoYW5nZSBMb2NhbCBEaXJlY3RvcnkgICAgIENo YW5nZSBSZW1vdGUgRGlyZWN0b3J5CisgIEZUUCAgICAgIEZUUCAgICAgICAgIGxjZCAgICAgICAg ICAgICAgICAgICAgICAgIGNkIChjd2QpCisgIEtlcm1pdCAgIEtlcm1pdCAgICAgIGNkICAgICAg ICAgICAgICAgICAgICAgICAgIHJjZCwgcmVtb3RlIGNkCisgIEtlcm1pdCAgIEZUUCAgICAgICAg IGNkICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cCBjZCwgcmNkLCByZW1vdGUgY2QKKworICAg QWxzbyBub3RlIHRoYXQgbm90IGFsbCBSRU1PVEUgY29tbWFuZHMgYXJlIHVzZWZ1bCB3aXRoIEZU UCwgc2luY2UgRlRQCisgICBzZXJ2ZXJzIGRvIG5vdCBvZmZlciB0aGUgY29ycmVzcG9uZGluZyBm dW5jdGlvbnMuIFRoZXNlIGluY2x1ZGU6CisKKyAgICAgKiBSRU1PVEUgQVNTSUdOICAtIEZUUCBz ZXJ2ZXJzIGRvbid0IGhhdmUgdmFyaWFibGVzCisgICAgICogUkVNT1RFIENPUFkgICAgLSBGVFAg c2VydmVycyBkb24ndCBjb3B5IGZpbGVzCisgICAgICogUkVNT1RFIEhPU1QgICAgLSBGVFAgc2Vy dmVycyBkb24ndCBleGVjdXRlIGhvc3QgKHNoZWxsKSBjb21tYW5kcworICAgICAqIFJFTU9URSBL RVJNSVQgIC0gRlRQIHNlcnZlcnMgZG9uJ3QgZXhlY3V0ZSBLZXJtaXQgY29tbWFuZHMKKyAgICAg KiBSRU1PVEUgUFJJTlQgICAtIEZUUCBzZXJ2ZXJzIGRvbid0IHByaW50IGZpbGVzCisgICAgICog UkVNT1RFIFFVRVJZICAgLSBGVFAgc2VydmVycyBkb24ndCBoYXZlIHZhcmlhYmxlcworICAgICAq IFJFTU9URSBTRVQgICAgIC0gRlRQIHNlcnZlcnMgZG9uJ3QgaGF2ZSBLZXJtaXQgc2V0dGluZ3MK KyAgICAgKiBSRU1PVEUgV0hPICAgICAtIEZUUCBzZXJ2ZXJzIGRvbid0IHNlbmQgdXNlciBsaXN0 cworCisgICBGaW5hbGx5IG5vdGUgdGhhdCBjb21tYW5kIHNob3J0Y3V0cyBkbyBub3QgYXBwbHkg dG8gdGhlIEhFTFAgY29tbWFuZC4KKyAgIEZvciBoZWxwIGFib3V0IGFuIEZUUCBjb21tYW5kLCB1 c2UgKGZvciBleGFtcGxlKSAiaGVscCBmdHAgZGVsZXRlIiwgbm90CisgICAiaGVscCBkZWxldGUi IG9yICJoZWxwIHJkZWxldGUiLgorCisgICBbIFszNDZdVG9wIF0gWyBbMzQ3XUZUUCBUb3AgXSBb IFszNDhdQy1LZXJtaXQgSG9tZSBdIFsgWzM0OV1LZXJtaXQgSG9tZQorICAgXQorCiszLjkuIER1 YWwgU2Vzc2lvbnMKKworICAgWW91IGNhbiBoYXZlIGFuIEZUUCBzZXNzaW9uIG9wZW4gYXQgdGhl IHNhbWUgdGltZSBhcyBhIHJlZ3VsYXIgS2VybWl0CisgICBTRVQgTElORSBvciBTRVQgSE9TVCAo dGVybWluYWwpIHNlc3Npb24uIEluIHRoaXMgY2FzZSwgdGhlIGRlZmF1bHQgU0VUCisgICBHRVQt UFVULVJFTU9URSBBVVRPIHNldHRpbmcgc2hvdWxkIGVuc3VyZSB0aGF0IGFsbCAidHdvLWZhY2Vk IiBjb21tYW5kcworICAgbGlrZSBHRVQsIFBVVCwgUkVNT1RFLCBIQU5HVVAsIEJZRSwgZXRjLCBh cHBseSB0byB0aGUgS2VybWl0IHNlc3Npb24sCisgICBhbmQgYWxsIGNvbW1hbmRzIGZvciB0aGUg RlRQIHNlc3Npb24gbXVzdCBpbmNsdWRlIHRoZSBGVFAgcHJlZml4LiBUbyBiZQorICAgYWJzb2x1 dGVseSBjZXJ0YWluLCB5b3UgY2FuIHVzZSBTRVQgR0VULVBVVC1SRU1PVEUgS0VSTUlULgorCisg IGZ0cCBmb28uYmFyLmJhei5jb20KKyAgaWYgZmFpbCAuLi4KKyAgKGxvZyBpbikKKyAgc2V0IGhv c3QgZm9vLmJhci5iYXouY29tCisgIGlmIGZhaWwgLi4uCisgIChsb2cgaW4pCisKKyAgIE5vdyB5 b3UgaGF2ZSBib3RoIGFuIEZUUCBhbmQgVGVsbmV0IGNvbm5lY3Rpb24gdG8gdGhlIHNhbWUgaG9z dCAob2YKKyAgIGNvdXJzZSB0aGV5IGNvdWxkIGFsc28gYmUgdG8gZGlmZmVyZW50IGhvc3RzLCBh bmQgeW91IGNvdWxkIGFsc28gaGF2ZSBhCisgICBkaXJlY3Qgb3IgZGlhbGVkIHNlcmlhbCBjb25u ZWN0aW9uIGluc3RlYWQgb2YgYSBUZWxuZXQgY29ubmVjdGlvbikuIE5vdworICAgYXNzdW1pbmcg eW91IGhhdmUgYSBLZXJtaXQgc2VydmVyIG9uIHRoZSBmYXIgZW5kIG9mIHRoZSBLZXJtaXQKKyAg IGNvbm5lY3Rpb246CisKKyAgcmNkIGluY29taW5nICAgICAgOyBDaGFuZ2VzIEtlcm1pdCBzZXJ2 ZXIncyBkaXJlY3RvcnkgKD0gUkVNT1RFIENEKQorICBmdHAgY2QgaW5jb21pbmcgICA7IENoYW5n ZXMgRlRQIHNlcnZlcidzIGRpcmVjdG9yeQorICBwdXQgb29mYS50eHQgICAgICA7IFNlbmRzIGEg ZmlsZSBvbiB0aGUgS2VybWl0IGNvbm5lY3Rpb24KKyAgZnRwIHB1dCBvb2ZhLnR4dCAgOyBTZW5k cyBhIGZpbGUgb24gdGhlIEZUUCBjb25uZWN0aW9uCisgIGJ5ZSAgICAgICAgICAgICAgIDsgU2h1 dHMgZG93biB0aGUgS2VybWl0IGNvbm5lY3Rpb24KKyAgZnRwIGJ5ZSAgICAgICAgICAgOyBTaHV0 cyBkb3duIHRoZSBGVFAgY29ubmVjdGlvbgorCisgICBOb3RlIHRoYXQgUFVUIGFuZCBTRU5EIGFy ZSBzeW5vbnltcyBmb3IgYm90aCBGVFAgYW5kIEtlcm1pdAorICAgY29ubmVjdGlvbnMuCisKKyAg IFlvdSBjYW4gYWxzbyBlc3RhYmxpc2ggZHVhbCBzZXNzaW9ucyBvbiB0aGUgS2VybWl0IGNvbW1h bmQgbGluZToKKworICBrZXJtaXQgLWogaG9zdDEgLTkgaG9zdDIKKworICAgVGhpcyBtYWtlcyBh IFRlbG5ldCBjb25uZWN0aW9uIHRvIGhvc3QxIGFuZCBhbiBGVFAgY29ubmVjdGlvbiB0byBob3N0 Mi4KKworICAgWyBbMzUwXVRvcCBdIFsgWzM1MV1GVFAgVG9wIF0gWyBbMzUyXUMtS2VybWl0IEhv bWUgXSBbIFszNTNdS2VybWl0IEhvbWUKKyAgIF0KKworMy4xMC4gQXV0b21hdGluZyBGVFAgU2Vz c2lvbnMKKworICAgTW9zdCBvZiBLZXJtaXQncyBzY3JpcHRpbmcgZmVhdHVyZXMgY2FuIGJlIHVz ZWQgdG8gbWFrZSBhbmQgY29udHJvbCBGVFAKKyAgIHNlc3Npb25zOiBGT1IgYW5kIFdISUxFIGxv b3BzLCBJRi1FTFNFIGFuZCBTV0lUQ0ggY29uc3RydWN0aW9ucywKKyAgIHZhcmlhYmxlcywgYXJy YXlzLCBidWlsdC1pbiBmdW5jdGlvbnMsIGFuZCBhbGwgdGhlIHJlc3QuIFlvdSBjYW4ndCB1c2UK KyAgIElOUFVULCBNSU5QVVQsIE9VVFBVVCwgQ0xFQVIsIG9yIFNDUklQVCBvbiBhbiBGVFAgc2Vz c2lvbiwgYnV0IHRoZXNlCisgICBhcmUgbm90IG5lZWRlZCBzaW5jZSB0aGUgRlRQIHByb3RvY29s IGlzIHdlbGwgZGVmaW5lZC4KKworICAgWzM1NF1DTElDSyBIRVJFIGZvciBhbiBGVFAgc2NyaXB0 aW5nIHR1dG9yaWFsLgorCiszLjEwLjEuIEZUUC1TcGVjaWZpYyBWYXJpYWJsZXMgYW5kIEZ1bmN0 aW9ucworCisgICBUaGUgZm9sbG93aW5nIHZhcmlhYmxlIHRlbGxzIHdoZXRoZXIgYW4gRlRQIGNv bm5lY3Rpb24gaXMgb3BlbjoKKworICAgXHYoZnRwX2Nvbm5lY3RlZCkKKyAgICAgICAgICAxIGlm IHRoZXJlIGlzIGFuIGFjdGl2ZSBGVFAgY29ubmVjdGlvbiwgMCBpZiB0aGVyZSBpc24ndC4KKwor ICAgVGhlIEZUUCBPUEVOIGNvbW1hbmQgc2V0czoKKworICAgXHYoZnRwX2hvc3QpCisgICAgICAg ICAgVGhlIGhvc3QgdG8gd2hpY2ggdGhlIG1vc3QgcmVjZW50IEZUUCBjb25uZWN0aW9uIHdhcyBt YWRlLgorCisgICBcdihmdHBfc2VjdXJpdHkpCisgICAgICAgICAgVGhlIHNlY3VyaXR5IG1ldGhv ZCBuZWdvdGlhdGVkIGZvciB0aGUgY3VycmVudCBGVFAgc2Vzc2lvbi4gVGhlCisgICAgICAgICAg dmFsdWUgaXMgIk5VTEwiIHdoZW4gbm8gc2VjdXJpdHkgaXMgdXNlZC4gT3RoZXIgcG9zc2liaWxp dGllcworICAgICAgICAgIGFyZSBHU1NBUEksIEtFUkJFUk9TX1Y0LCBTU0wsIFRMUywgYW5kIFNS UC4gQWxzbyBzZWUKKyAgICAgICAgICBcdihhdXRobmFtZSksIFx2KGF1dGhzdGF0ZSksIGFuZCBc dihhdXRodHlwZSkuIFNlZSBbMzU1XTMuMi4KKyAgICAgICAgICBNYWtpbmcgU2VjdXJlIEZUUCBD b25uZWN0aW9ucy4KKworICAgXHYoZnRwX3NlcnZlcikKKyAgICAgICAgICBUaGUgT1MgdHlwZSAo VU5JWCwgVk1TLCBldGMpIG9mIHRoZSBGVFAgc2VydmVyIGhvc3QuCisKKyAgIFRoZSBGVFAgVVNF UiBjb21tYW5kIChvciBGVFAgT1BFTiAvVVNFUjosIG9yIEZUUCB3aXRoIGF1dG9tYXRpYyBsb2dp bikKKyAgIHNldHM6CisKKyAgIFx2KGZ0cF9sb2dnZWRpbikKKyAgICAgICAgICAxIGlmIHlvdSBh cmUgbG9nZ2VkIGluIHRvIGFuIEZUUCBzZXJ2ZXIsIDAgaWYgeW91IGFyZSBub3QuCisKKyAgIFRo ZSBjdXJyZW50IENPTU1BTkQtUFJPVEVDVElPTi1MRVZFTCBhbmQgREFUQS1QUk9URUNUSU9OLUxF VkVMIHZhbHVlcworICAgYXJlIHJlZmxlY3RlZCBpbjoKKworICAgXHYoZnRwX2NwbCkKKyAgIFx2 KGZ0cF9kcGwpCisgICAgICAgICAgVGhlIHZhbHVlcyBhcmUgImNsZWFyIiwgImNvbmZpZGVudGlh bCIsICJzYWZlIiBvciAicHJpdmF0ZSIuIFNlZQorICAgICAgICAgIFszNTZdMy4yLiBNYWtpbmcg U2VjdXJlIEZUUCBDb25uZWN0aW9ucy4KKworICAgVGhlIEZUUCBHRVQtUFVULVJFTU9URSBzZXR0 aW5nIGlzIHJlZmxlY3RlZCBpbjoKKworICAgXHYoZnRwX2dldHB1dHJlbW90ZSkKKyAgICAgICAg ICBUaGUgdmFsdWVzIGFyZSAiYXV0byIsICJmdHAiLCBvciAia2VybWl0Ii4KKworICAgRXZlcnkg RlRQIGNvbW1hbmQgc2V0cyB0aGUgXHYoc3VjY2VzcykgdmFyaWFibGUsIGFzIHdlbGwgYXMgdGhl CisgICBmb2xsb3dpbmcgdHdvIEZUUC1zcGVjaWZpYyB2YXJpYWJsZXM6CisKKyAgIFx2KGZ0cF9j b2RlKQorICAgICAgICAgIFRoZSBzdGFuZGFyZGl6ZWQgbnVtZXJpYyBGVFAgcHJvdG9jb2wgY29k ZSBmcm9tIHRoZSBzZXJ2ZXIncworICAgICAgICAgIHJlc3BvbnNlIHRvIHRoZSBsYXN0IGNsaWVu dCBjb21tYW5kLCBhIDMtZGlnaXQgZGVjaW1hbCBudW1iZXIKKyAgICAgICAgICBkZWZpbmVkIGlu IFszNTddUkZDOTU5LiBCcmllZmx5OgorCisgICAgICAgICAgMXh4ID0gUG9zaXRpdmUgUHJlbGlt aW5hcnkgUmVwbHkKKyAgICAgICAgICAyeHggPSBQb3NpdGl2ZSBDb21wbGV0aW9uIFJlcGx5Cisg ICAgICAgICAgM3h4ID0gUG9zaXRpdmUgSW50ZXJtZWRpYXRlIFJlcGx5CisgICAgICAgICAgNHh4 ID0gVHJhbnNpZW50IE5lZ2F0aXZlIENvbXBsZXRpb24gUmVwbHkKKyAgICAgICAgICA1eHggPSBQ ZXJtYW5lbnQgTmVnYXRpdmUgQ29tcGxldGlvbiBSZXBseQorCisgICBcdihmdHBfbWVzc2FnZSkK KyAgICAgICAgICBUaGUgdGV4dCBtZXNzYWdlLCBpZiBhbnksIGZyb20gdGhlIHNlcnZlcidzIHJl c3BvbnNlIHRvIHRoZSBsYXN0CisgICAgICAgICAgY2xpZW50IGNvbW1hbmQuIElmIHRoZSBtb3N0 IHJlY2VudCByZXNwb25zZSBoYWQgbXVsdGlwbGUgbGluZXMsCisgICAgICAgICAgdGhpcyB2YXJp YWJsZSBoYXMgb25seSB0aGUgZmluYWwgbGluZS4gVGhlc2UgbWVzc2FnZXMgYXJlIG5vdAorICAg ICAgICAgIHN0YW5kYXJkaXplZCBhbmQgdmFyeSBpbiBmb3JtYXQgYW5kIGNvbnRlbnQgZnJvbSBz ZXJ2ZXIgdG8KKyAgICAgICAgICBzZXJ2ZXIuIFN5bm9ueW06IFx2KGZ0cF9tc2cpLgorCisgICBG VFAgZmlsZSB0cmFuc2ZlcnMgc2V0IHRoZSByZWd1bGFyIEtlcm1pdCB0cmFuc2ZlciBzdGF0dXMg dmFyaWFibGVzOgorCisgIFx2KGNwcykgICAgICAgICBDaGFyYWN0ZXJzIHBlciBzZWNvbmQgb2Yg bW9zdCByZWNlbnQgdHJhbnNmZXIuCisgIFx2KGZpbGVzcGVjKSAgICBGaWxlIHNwZWNpZmljYXRp b24gdXNlZCBpbiBtb3N0IHJlY2VudCB0cmFuc2Zlci4KKyAgXHYoZnNpemUpICAgICAgIFNpemUg b2YgZmlsZSBtb3N0IHJlY2VudGx5IHRyYW5zZmVycmVkLgorICBcdih0ZnNpemUpICAgICAgVG90 YWwgc2l6ZSBvZiBmaWxlIGdyb3VwIG1vc3QgcmVjZW50bHkgdHJhbnNmZXJyZWQuCisgIFx2KHhm ZXJzdGF0dXMpICBTdGF0dXMgb2YgbW9zdCByZWNlbnQgdHJhbnNmZXIgKDAgPSBzdWNjZXNzLCAx ID0gZmFpbHVyZSkuCisgIFx2KHRmdGltZSkgICAgICBFbGFwc2VkIHRpbWUgb2YgbW9zdCByZWNl bnQgdHJhbnNmZXIsIGluIHNlY29uZHMuCisKKyAgIER1cmluZyBhbiBGVFAgdHJhbnNmZXIsIHRo ZSBwZXItZmlsZSB2YXJpYWJsZXMgYXJlOgorCisgIFx2KGZpbGVuYW1lKSAgICBOYW1lIG9mIGN1 cnJlbnQgZmlsZS4KKyAgXHYoZmlsZW51bWJlcikgIE9yZGluYWwgZmlsZSBudW1iZXIgaW4gZ3Jv dXAgKDEsIDIsIDMsIC4uLikKKworMy4xMC4yLiBFeGFtcGxlcworCisgICBMZXQncyBiZWdpbiB3 aXRoIGEgc2ltcGxlIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gbG9nIGluLCBzZW5kIHNvbWUKKyAg IGZpbGVzLCBhbmQgbG9nIG91dDoKKworICBkZWZpbmUgZXJyb3IgaWYgZmFpbCB7IGZ0cCBieWUs IHN0b3AgMSBFcnJvcjogXCUxIH0KKyAgc2V0IHRyYW5zYWN0IGJyaWVmCisgIGxvZyB0CisgIGZ0 cCBmdHAueHl6Y29ycC5jb20gL2Fub255bW91cworICBpZiBmYWlsIHN0b3AgMSBDb25uZWN0aW9u IGZhaWxlZAorICBpZiBub3QgXHYoZnRwX2xvZ2dlZGluKSBzdG9wIDEgTG9naW4gZmFpbGVkCisg IGZ0cCBjZCBpbmNvbWluZworICBlcnJvciB7ZnRwIGNkfQorICBjZCB1cGxvYWQKKyAgZXJyb3Ig e2xvY2FsIGNkfQorICBmdHAgcHV0IC9kZWxldGUgKgorICBlcnJvciB7cHV0fQorICBmdHAgYnll CisKKyAgIEZpcnN0IHdlIGRlZmluZSBhbiBlcnJvciBoYW5kbGluZyBtYWNybyB0byBiZSB1c2Vk IGFmdGVyIHRoZSBjb25uZWN0aW9uCisgICBpcyBtYWRlLiBUaGVuIHdlIHNldCB1cCBhIGJyaWVm LWZvcm1hdCB0cmFuc2FjdGlvbiBsb2cgdG8ga2VlcCBhIHJlY29yZAorICAgb2Ygb3VyIGZpbGUg dHJhbnNmZXJzLiBUaGVuIHdlIG1ha2UgYSBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZCBsb2cg aW4KKyAgIGFub255bW91c2x5LiBUaGUgImlmIGZhaWwiIGNvbW1hbmQgY2hlY2tzIHdoZXRoZXIg dGhlIGNvbm5lY3Rpb24gd2FzCisgICBtYWRlLiBUaGUgImlmIG5vdCIgY29tbWFuZCBjaGVja3Mg d2hldGhlciBsb2dpbiB3YXMgc3VjY2Vzc2Z1bC4KKyAgIE9idmlvdXNseSB0aGUgc2NyaXB0IHNo b3VsZCBub3QgY29udGludWUgdW5sZXNzIGJvdGggdGVzdHMgc3VjY2VlZC4KKworICAgTmV4dCB3 ZSBjaGFuZ2UgdG8gdGhlIHNlcnZlcidzICdpbmNvbWluZycgZGlyZWN0b3J5IGFuZCB0byBvdXIg b3duCisgICAndXBsb2FkJyBkaXJlY3RvcnksIGFuZCBzZW5kIGFsbCB0aGUgZmlsZXMgdGhhdCBh cmUgaW4gaXQgKHRoZXkgY2FuIGJlCisgICBhbnkgbWl4dHVyZSBvZiB0ZXh0IGFuZCBiaW5hcnkg ZmlsZXMpLCBkZWxldGluZyBlYWNoIHNvdXJjZSBmaWxlCisgICBhdXRvbWF0aWNhbGx5IGFmdGVy IGl0IGlzIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZC4gRWFjaCBvZiB0aGVzZQorICAgb3BlcmF0aW9u cyBpcyBjaGVja2VkIHdpdGggdGhlIEVSUk9SIG1hY3JvLCB3aGljaCBwcmV2ZW50cyB0aGUgc2Ny aXB0CisgICBmcm9tIGNvbnRpbnVpbmcgcGFzdCBhIGZhaWx1cmUuCisKKyAgIEZpbmFsbHkgd2Ug Y2xvc2UgdGhlIEZUUCBzZXNzaW9uIHdpdGggdGhlICJieWUiIGNvbW1hbmQuCisKKyAgIEp1c3Qg bGlrZSBhbnkgb3RoZXIgS2VybWl0IHNjcmlwdCwgdGhpcyBvbmUgY2FuIGJlIHVzZWQgaW4gbWFu eSB3YXlzOgorCisgICAgICogSXQgY2FuIGJlIHN0b3JlZCBpbiBhIGZpbGUsIGFuZCBLZXJtaXQg Y2FuIGJlIHRvbGQgdG8gVEFLRSB0aGUKKyAgICAgICBmaWxlLgorICAgICAqIEluIFVOSVgsIGl0 IGNhbiBiZSBhICJbMzU4XWtlcmJhbmciIHNjcmlwdCBhbmQgdGhlcmVmb3JlIHJ1bgorICAgICAg IGRpcmVjdGx5IGZyb20gdGhlIHNoZWxsIHByb21wdCBvciBhcyBhIGNyb24gam9iLgorCisgICBX ZSBjb3VsZCBoYXZlIHVzZWQgY29tbWFuZCBzaG9ydGN1dHMgbGlrZSAicmNkIiwgInB1dCIsIGFu ZCAiYnllIiwgYnV0CisgICBzaW5jZSB0aGV5IGNhbiBiZSBhbWJpZ3VvdXMgdW5kZXIgY2VydGFp biBjaXJjdW1zdGFuY2VzLCBpdCBpcyBiZXR0ZXIKKyAgIHRvIGF2b2lkIHRoZW0gaW4gc2NyaXB0 czsgdGhleSBhcmUgaW50ZW5kZWQgbWFpbmx5IGZvciBjb252ZW5pZW5jZQorICAgZHVyaW5nIGlu dGVyYWN0aXZlIHVzZS4gSG93ZXZlciwgaWYgeW91IHdpc2ggdG8gdXNlIHRoZSBzaG9ydGN1dHMg aW4gYQorICAgc2NyaXB0LCB5b3UgY2FuIGRvIGl0IHRoaXMgd2F5IChlcnJvciBoYW5kbGluZyBv bWl0dGVkIGZvciBicmV2aXR5KToKKworICBsb2NhbCBcJXQgICAgICAgICAgICAgICAgICAgICAg IDsgRGVjbGFyZSBhIGxvY2FsIHRlbXBvcmFyeSB2YXJpYWJsZQorICBhc3NpZ24gXCV0IFx2KGZ0 cF9nZXRwdXRyZW1vdGUpIDsgU2F2ZSBjdXJyZW50IEZUUCBHRVQtUFVULVJFTU9URSBzZXR0aW5n CisgIHNldCBmdHAgZ2V0LXB1dC1yZW1vdGUgZnRwICAgICAgOyBDaG9vc2UgRlRQIG9yaWVudGF0 aW9uCisgIGZ0cCB4eXpjb3JwLmNvbSAvYW5vbnltb3VzICAgICAgOyBPcGVuIGFuIEZUUCBjb25u ZWN0aW9uCisgIGdldCBvb2ZhLnR4dCAgICAgICAgICAgICAgICAgICAgOyBHRVQgYSBmaWxlCisg IHB1dCBmb28uYmFyICAgICAgICAgICAgICAgICAgICAgOyBQVVQgYSBmaWxlCisgIHJkZWwgeWVz dGVyZGF5LmxvZyAgICAgICAgICAgICAgOyBEZWxldGUgYSBmaWxlIG9uIHRoZSBzZXJ2ZXIKKyAg YnllICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvZyBvdXQgYW5kIGRpc2Nvbm5lY3Qg ZnJvbSBzZXJ2ZXIuCisgIHNldCBmdHAgZ2V0LXB1dC1yZW1vdGUgXCV0ICAgICAgOyBSZXN0b3Jl IHByZXZpb3VzIEdFVC1QVVQtUkVNT1RFIHNldHRpbmcKKworICAgT2YgY291cnNlLCBGVFAgc2Ny aXB0cyBjYW4gYWxzbyBiZSB3cml0dGVuIGFzIG1hY3Jvcy4gVGhpcyBsZXRzIHlvdQorICAgcGFz cyBwYXJhbWV0ZXJzIHN1Y2ggYXMgaG9zdG5hbWVzLCB1c2VybmFtZXMsIGFuZCBmaWxlbmFtZXMg dG8gdGhlbToKKworICBkZWZpbmUgZG9mdHBnZXQgeworICAgICAgaWYgPCBcdihhcmdjKSA0IGVu ZCAxIFVzYWdlOiBcJTAgaG9zdCB1c2VyIHJlbW90ZWZpbGUgWyBsb2NhbGZpbGUgXQorICAgICAg ZnRwIFwlMSAvdXNlcjpcJTIKKyAgICAgIGlmIGZhaWwgZW5kIDEgRlRQIE9QRU4gXCUxIGZhaWxl ZAorICAgICAgaWYgbm90IFx2KGZ0cF9sb2dnZWRpbikgZW5kIDEgRlRQIExPR0lOIGZhaWxlZAor ICAgICAgZnRwIGdldCB7XCUzfSB7XCU0fQorICAgICAgaWYgZmFpbCBlbmQgMSBGVFAgR0VUIFwl MyBmYWlsZWQKKyAgICAgIGZ0cCBieWUKKyAgfQorCisgICBBZGQgdGhpcyBkZWZpbml0aW9uIHRv IHlvdXIgS2VybWl0IGN1c3RvbWl6YXRpb24gZmlsZSwgYW5kIGl0IHdpbGwKKyAgIGFsd2F5cyBi ZSBhdmFpbGFibGUgd2hlbiB5b3Ugc3RhcnQgS2VybWl0LiBUaGlzIG1hY3JvIGxldHMgeW91IGRv d25sb2FkCisgICBhIGZpbGUgd2l0aCBGVFAgYnkgZ2l2aW5nIGEgc2luZ2xlIGNvbW1hbmQsIGUu Zy46CisKKyAgZG9mdHBnZXQgeHl6Y29ycC5jb20gYW5vbnltb3VzIG9vZmEudHh0CisKKzMuMTAu My4gQXV0b21hdGluZyBTZWN1cmUgRlRQIFNlc3Npb25zCisKKyAgIE9mdGVuIHdoZW4gbWFraW5n IHNlY3VyZSBjb25uZWN0aW9ucywgeW91IGFyZSBwcm9tcHRlZCBpbnRlcmFjdGl2ZWx5CisgICBm b3IgY2VydGFpbiBpbmZvcm1hdGlvbiBvciBwZXJtaXNzaW9uIHRvIHByb2NlZWQuIFRoZXNlIHBy b21wdHMgY2FuCisgICBzdG9wIGFuIGF1dG9tYXRlZCBwcm9jZWR1cmUuIFRvIGF2b2lkIHRoZW0s IHlvdSBtdXN0IGdpdmUgdGhlCisgICBhcHByb3ByaWF0ZSBjb21tYW5kcyB0byBkaXNhYmxlIHRo ZW0sIGFuZC9vciBzdXBwbHkgdGhlIHByb21wdGVkLWZvcgorICAgaW5mb3JtYXRpb24gYmVmb3Jl aGFuZC4gSGVyZSBhcmUgYSBmZXcgaGludHM6CisKKyAgICAgKiBNYWtlIHN1cmUgdGhhdCBTRVQg VEFLRSBFUlJPUiBhbmQgU0VUIE1BQ1JPIEVSUk9SIGFyZSBib3RoIE9GRi4KKyAgICAgICBUaGlz IGlzIHRoZSBkZWZhdWx0LCBidXQgaW4gY2FzZSB5b3UgaGF2ZSBzZXQgZWl0aGVyIG9uZSBvZiB0 aGVzZQorICAgICAgIE9OIGluIHlvdXIgc2NyaXB0IG9yIGluaXRpYWxpemF0aW9uIGZpbGUsIHRo aXMgbWFrZXMgdGhlIHNjcmlwdAorICAgICAgIGhhbHQgb24gYW55IGtpbmQgb2YgZXJyb3IuIE5v cm1hbGx5IHlvdSB3b3VsZCB3YW50IHRvIGNoZWNrIGVhY2gKKyAgICAgICBvcGVyYXRpb24gZm9y IHN1Y2Nlc3Mgb3IgZmFpbHVyZSBhbmQgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24uCisgICAgICog T24gU1NMIGFuZCBUTFMgY29ubmVjdGlvbnMsIHlvdSBtYXkgYmUgYXNrZWQgd2hldGhlciBpdCBp cyBPSyB0bworICAgICAgIHByb2NlZWQgd2l0aCBhIGNvbm5lY3Rpb24gdG8gc2VydmVyIHRoYXQg cHJlc2VudHMgYSBzZWxmLXNpZ25lZAorICAgICAgIGNlcnRpZmljYXRlLiBZb3UgY2FuIHVzZSB0 aGUgU0VUIEFVVEhFTlRJQ0FUSU9OIFNTTCAob3IgVExTKSBWRVJJRlkKKyAgICAgICBvciBTRVQg QVVUSCBTU0wgKG9yIFRMUykgQ0VSVFMtT0sgY29tbWFuZHMgdG8gYXZvaWQgdGhpcyBwcm9tcHQg YnkKKyAgICAgICBub3QgcmVxdWVzdGluZyBhIGNlcnRpZmljYXRlIGZyb20gdGhlIHBlZXIuCisg ICAgICogKE1vcmUgdG8gYmUgYWRkZWQuLi4pCisKKyAgIFsgWzM1OV1Ub3AgXSBbIFszNjBdRlRQ IFRvcCBdIFsgWzM2MV1GVFAgU2NyaXB0IFR1dG9yaWFsIF0gWworICAgWzM2Ml1DLUtlcm1pdCBI b21lIF0gWyBbMzYzXUtlcm1pdCBIb21lIF0KKworMy4xMS4gQWR2YW5jZWQgRlRQIFByb3RvY29s IEZlYXR1cmVzCisKKyAgIFRoZSByZW1haW5kZXIgb2YgdGhlIEZUUCBkb2N1bWVudGF0aW9uICh0 aHJvdWdoIHRoZSBlbmQgb2YgU2VjdGlvbiAzKQorICAgaXMgbmV3IHRvIEMtS2VybWl0IDguMC4y MDYsIGJ1dCB3ZSBsZWF2ZSBpdCBpbiBibGFjayB0byBwcmV2ZW50CisgICBoZWFkYWNoZXMuIEV4 Y2VwdCBmb3IgdGl0bGVzLgorICAgICAqIFszNjRdVEVSTUlOT0xPR1kKKyAgICAgKiBbMzY1XUZF QVRVUkUgTkVHT1RJQVRJT04KKyAgICAgKiBbMzY2XVVTSU5HIE1HRVQ6IE5MU1QgVkVSU1VTIE1M U0QKKyAgICAgKiBbMzY3XUVYQU1QTEVTCisgICAgICogWzM2OF1SRUZFUkVOQ0VTCisKKyAgIFRo ZSBuZXcgcmVsZWFzZXMgb2YgWzM2OV1DLUtlcm1pdCAoOC4wLjIwNikgYW5kIFszNzBdS2VybWl0 IDk1ICgyLjEpCisgICBzdXBwb3J0IG5ldyBGVFAgcHJvdG9jb2wgZmVhdHVyZXMgZnJvbSBSRkMg MjM4OSBhcyB3ZWxsIGFzIG1vc3Qgb2YKKyAgIHdoYXQncyBpbiB0aGUgRWx6IGFuZCBIZXRobW9u IEV4dGVuc2lvbnMgdG8gRlRQIEludGVybmV0IERyYWZ0IChzZWUKKyAgIFszNzFdUmVmZXJlbmNl cykuIFNvbWUgb2YgdGhlc2UgZmVhdHVyZXMsIHN1Y2ggYXMgU0laRSAocmVxdWVzdCBhCisgICBm aWxlJ3Mgc2l6ZSksIE1EVE0gKHJlcXVlc3QgZmlsZSdzIG1vZGlmaWNhdGlvbiB0aW1lKSwgYW5k IFJFU1QKKyAgIChyZXN0YXJ0IGludGVycnVwdGVkIHRyYW5zZmVyKSBoYXZlIGJlZW4gd2lkZWx5 IGltcGxlbWVudGVkIGluIEZUUAorICAgY2xpZW50cyBhbmQgc2VydmVycyBmb3IgeWVhcnMgKGFz IHdlbGwgYXMgaW4gdGhlIGluaXRpYWwgcmVsZWFzZSBvZiB0aGUKKyAgIEtlcm1pdCBGVFAgY2xp ZW50cykuIE90aGVycyBzdWNoIGFzIEZFQVQgYW5kIE1MU0QgYXJlIHJhcmVseSBzZWVuIGFuZAor ICAgYXJlIG5ldyB0byB0aGUgdXBjb21pbmcgS2VybWl0IHJlbGVhc2VzLiBUVkZTIChUcml2aWFs IFZpcnR1YWwgRmlsZQorICAgU3RvcmUpIGlzIHN1cHBvcnRlZCBpbXBsaWNpdGx5LCBhbmQgdGhl IFVURi04IGNoYXJhY3Rlci1zZXQgaXMgYWxyZWFkeQorICAgZnVsbHkgc3VwcG9ydGVkIGF0IHRo ZSBwcm90b2NvbCBhbmQgZGF0YS1pbnRlcmNoYW5nZSBsZXZlbC4KKworICAgRm9yIEtlcm1pdCB1 c2VycywgdGhlIG1haW4gYmVuZWZpdCBvZiB0aGUgbmV3IEZUUCBwcm90b2NvbCBleHRlbnNpb25z CisgICBpcyB0aGUgYWJpbGl0eSB0byBkbyByZWN1cnNpdmUgZG93bmxvYWRzLiBCdXQgdGhlIGV4 dGVuc2lvbnMgYWxzbworICAgaW50cm9kdWNlIGNvbXBsaWNhdGlvbnMgYW5kIHRyYWRlb2ZmcyB0 aGF0IHlvdSBzaG91bGQgYmUgYXdhcmUgb2YuIE9mCisgICBjb3Vyc2UgS2VybWl0IHRyaWVzIHRv ICJkbyB0aGUgcmlnaHQgdGhpbmciIGF1dG9tYXRpY2FsbHkgaW4gZXZlcnkgY2FzZQorICAgZm9y IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBCdXQgKGFzIG5vdGVkIGxhdGVyKSBzb21lIGNhc2Vz IGFyZQorICAgaW5oZXJlbnRseSBhbWJpZ3VvdXMgYW5kL29yIGNhbiByZXN1bHQgaW4gbmFzdHkg c3VycHJpc2VzLCBhbmQgZm9yCisgICB0aG9zZSBzaXR1YXRpb25zIG5ldyBjb21tYW5kcyBhbmQg c3dpdGNoZXMgYXJlIGF2YWlsYWJsZSB0byBnaXZlIHlvdQorICAgcHJlY2lzZSBjb250cm9sIG92 ZXIgS2VybWl0J3MgYmVoYXZpb3IsIGluIGNhc2UgdGhlIGRlZmF1bHRzIGRvbid0CisgICBwcm9k dWNlIHRoZSBkZXNpcmVkIHJlc3VsdHMuCisKKzMuMTEuMS4gVGVybWlub2xvZ3kKKworICAgQ29t bWFuZC1saW5lIEZUUCBjbGllbnRzIHN1Y2ggYXMgS2VybWl0IChhcyB3ZWxsIGFzIHRoZSB0cmFk aXRpb25hbCBGVFAKKyAgIHByb2dyYW1zIGZvdW5kIG9uIFVuaXgsIFZNUywgLi4uLCBldmVuIFdp bmRvd3MpIGhhdmUgY29tbWFuZHMgbGlrZSBQVVQsCisgICBNUFVULCBHRVQsIE1HRVQsIGFuZCBC WUUsIHdoaWNoIHRoZXkgY29udmVydCBpbnRvIHplcm8gb3IgbW9yZSBGVFAKKyAgIHByb3RvY29s IGNvbW1hbmRzLCBzdWNoIGFzIE5MU1QsIFJFVFIsIFFVSVQuIEZvciBjbGFyaXR5LCB3ZSdsbCB1 c2UKKyAgICJjb21tYW5kIiB0byByZWZlciB0byBjb21tYW5kcyBnaXZlbiBieSB0aGUgdXNlciB0 byB0aGUgRlRQIGNsaWVudCwgYW5kCisgICAiZGlyZWN0aXZlIiBmb3IgRlRQIHByb3RvY29sIGNv bW1hbmRzIHNlbnQgYnkgdGhlIEZUUCBjbGllbnQgdG8gdGhlIEZUUAorICAgc2VydmVyLgorCisz LjExLjIuIEZlYXR1cmUgTmVnb3RpYXRpb24KKworICAgTmV3IEZUUCBwcm90b2NvbCBmZWF0dXJl cyBhcmUgbmVnb3RpYXRlZCBieSB0aGUgY2xpZW50IHNlbmRpbmcgYSBGRUFUCisgICBkaXJlY3Rp dmUgYW5kIHRoZSBzZXJ2ZXIgcmVzcG9uZGluZyB3aXRoIGEgbGlzdCBvZiAobmV3KSBmZWF0dXJl cyBpdAorICAgc3VwcG9ydHMsIG9yIGVsc2Ugd2l0aCBhbiBlcnJvciBpbmRpY2F0aW9uIGlmIGl0 IGRvZXMgbm90IHN1cHBvcnQgdGhlCisgICBGRUFUIGRpcmVjdGl2ZSBhdCBhbGwsIGluIHdoaWNo IGNhc2UgdGhlIGNsaWVudCBoYXMgdG8gZ3Vlc3Mgd2hpY2ggbmV3CisgICBmZWF0dXJlcyBpdCBz dXBwb3J0cyAoS2VybWl0IGd1ZXNzZXMgdGhhdCBpdCBzdXBwb3J0cyBTSVpFIGFuZCBNRFRNIGJ1 dAorICAgbm90IE1MU1QpLiBOb3RlIHRoYXQgdGhlIE1MU1QgZmVhdHVyZSBpbmNsdWRlcyBNTFNE LCB3aGljaCBpcyBub3QKKyAgIGxpc3RlZCBzZXBhcmF0ZWx5IGFzIGEgZmVhdHVyZS4KKworICAg R3Vlc3NpbmcgaXMgbmljZSB3aGVuIGl0IHdvcmtzLCBidXQgc29tZXRpbWVzIGl0IGRvZXNuJ3Qs IGFuZCBzb21lIEZUUAorICAgc2VydmVycyBiZWNvbWUgY29uZnVzZWQgd2hlbiB5b3Ugc2VuZCB0 aGVtIGEgZGlyZWN0aXZlIHRoZXkgZG9uJ3QKKyAgIHVuZGVyc3RhbmQsIG9yIHRoZXkgZG8gc29t ZXRoaW5nIHlvdSBkaWRuJ3Qgd2FudCwgc29tZXRpbWVzIHRvIHRoZQorICAgcG9pbnQgb2YgY2xv c2luZyB0aGUgY29ubmVjdGlvbi4gRm9yIHRoaXMgcmVhc29uLCBLZXJtaXQgbGV0cyB5b3UKKyAg IG92ZXJyaWRlIGRlZmF1bHQgb3IgbmVnb3RpYXRlZCBmZWF0dXJlcyB3aXRoIHRoZSBmb2xsb3dp bmcgbmV3CisgICBjb21tYW5kczoKKworICAgRlRQIHsgRU5BQkxFLCBESVNBQkxFIH0gRkVBVAor ICAgICAgICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGF1dG9tYXRpYyBzZW5kaW5nIG9mIGEg RkVBVCBkaXJlY3RpdmUKKyAgICAgICAgICB1cG9uIGNvbm5lY3Rpb24gdG8gYW4gRlRQIHNlcnZl ci4gTm90ZSB0aGF0IEZUUCBbIE9QRU4gXSAvTk9JTklUCisgICAgICAgICAgICBhbHNvIGluaGli aXRzIHNlbmRpbmcgdGhlIEZFQVQgZGlyZWN0aXZlIChhbmQgc2V2ZXJhbCBvdGhlcnMpCisgICAg ICAgICAgZm9yIHRoZSBjb25uZWN0aW9uIGJlaW5nIE9QRU4nZCwgYnV0IHdpdGhvdXQgbmVjZXNz YXJpbHkKKyAgICAgICAgICBkaXNhYmxpbmcgRkVBVCBmb3Igc3Vic2VxdWVudCBjb25uZWN0aW9u cyBpbiB0aGUgc2FtZSBLZXJtaXQKKyAgICAgICAgICBpbnN0YW5jZS4gRkVBVCBpcyBFTkFCTEVE IGJ5IGRlZmF1bHQsIGluIHdoaWNoIGNhc2UgbWFueSBGVFAKKyAgICAgICAgICBzZXJ2ZXJzIGFy ZSBsaWtlbHkgdG8gcmVwbHk6CisKKzUwMCAnRkVBVCc6IGNvbW1hbmQgbm90IHVuZGVyc3Rvb2QK KworICAgICAgICAgIHdoaWNoIGlzIG5vcm1hbGx5IGhhcm1sZXNzIChidXQgeW91IG5ldmVyIGtu b3cpLiAoSW4gQy1LZXJtaXQKKyAgICAgICAgICA4LjAuMjA4LCB0aGlzIGVycm9yIG1lc3NhZ2Ug aXMgc3VwcHJlc3NlZCB1bmxlc3MgeW91IFNFVCBGVFAKKyAgICAgICAgICBERUJVRyBPTi4pCisK KyAgIEZUUCBFTkFCTEUgeyBNRFRNLCBNTFNULCBTSVpFIH0KKyAgICAgICAgICBFbmFibGVzIHRo ZSBnaXZlbiBkaXJlY3RpdmUgZm9yIGltcGxpY2l0IHVzZSBieSB0aGUgRlRQIEdFVCBhbmQKKyAg ICAgICAgICBNR0VUIGNvbW1hbmRzIGluIGNhc2UgaXQgaGFzIGJlZW4gZGlzYWJsZWQgb3IgZXJy b25lb3VzbHkKKyAgICAgICAgICBvbWl0dGVkIGJ5IHRoZSBzZXJ2ZXIgaW4gaXRzIEZFQVQgcmVz cG9uc2UuIE5vdGU6IE1MU0QgY2FuIGJlCisgICAgICAgICAgdXNlZCBpbiB0aGUgRlRQIEVOQUJM RSBhbmQgRElTQUJMRSBjb21tYW5kcyBhcyBhIHN5bm9ueW0gZm9yCisgICAgICAgICAgTUxTVC4g WU9VIE1VU1QgR0lWRSBUSElTIENPTU1BTkQgQUZURVIgTUFLSU5HIFRIRSBGVFAKKyAgICAgICAg ICBDT05ORUNUSU9OLgorCisgICBGVFAgRElTQUJMRSB7IE1EVE0sIE1MU1QsIFNJWkUgfQorICAg ICAgICAgIERpc2FibGVzIGltcGxpY2l0IHVzZSBvZiB0aGUgZ2l2ZW4gZGlyZWN0aXZlIGJ5IEdF VCBvciBNR0VUIGluCisgICAgICAgICAgY2FzZSBpdCBjYXVzZXMgcHJvYmxlbXM7IGZvciBleGFt cGxlLCBiZWNhdXNlIGl0IG1ha2VzIG11bHRpZmlsZQorICAgICAgICAgIGRvd25sb2FkcyB0YWtl IHRvbyBsb25nIG9yIHRoZSBzZXJ2ZXIgYW5ub3VuY2VzIGl0IGVycm9uZW91c2x5CisgICAgICAg ICAgb3IgbWlzaW1wbGVtZW50cyBpdC4gVXNlIERJU0FCTEUgRkVBVCBiZWZvcmUgbWFraW5nIGEg Y29ubmVjdGlvbgorICAgICAgICAgIHRvIHByZXZlbnQgS2VybWl0IGZyb20gc2VuZGluZyB0aGUg RkVBVCBkaXJlY3RpdmUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBpbml0aWFsIHNlcXVlbmNl LiBOb3RlIHRoYXQgZGlzYWJsaW5nIEZFQVQsIFNJWkUsIG9yIE1EVE0gZG9lcworICAgICAgICAg IG5vdCBwcmV2ZW50IHlvdSBmcm9tIGV4ZWN1dGluZyBleHBsaWNpdCBGVFAgRkVBVFVSRVMsIEZU UCBTSVpFLAorICAgICAgICAgIG9yIEZUUCBNT0RUSU1FIGNvbW1hbmRzLiBBbHNvIG5vdGUgdGhh dCBkaXNhYmxpbmcgU0laRSBwcmV2ZW50cworICAgICAgICAgIFBVVCAvUkVTVEFSVCAocmVjb3Zl cnkgb2YgaW50ZXJydXB0ZWQgdXBsb2FkcykgZnJvbSB3b3JraW5nLiBZT1UKKyAgICAgICAgICBN VVNUIEdJVkUgVEhJUyBDT01NQU5EIEFGVEVSIE1BS0lORyBUSEUgRlRQIENPTk5FQ1RJT04uCisK KyAgIFRvIGVuYWJsZSBvciBkaXNhYmxlIG1vcmUgdGhhbiBvbmUgZmVhdHVyZSwgdXNlIG11bHRp cGxlIEZUUCBFTkFCTEUgb3IKKyAgIEZUUCBESVNBQkxFIGNvbW1hbmRzLiBUaGUgU0hPVyBGVFAg Y29tbWFuZCBzaG93cyB3aGljaCBmZWF0dXJlcyBhcmUKKyAgIGN1cnJlbnRseSBlbmFibGVkIGFu ZCBkaXNhYmxlZC4KKworICAgRlRQIEZFQVRVUkVTCisgICAgICAgICAgVGhpcyBjb21tYW5kIHNl bmRzIGEgRkVBVCBkaXJlY3RpdmUgdG8gdGhlIHNlcnZlci4gSW4gY2FzZSB5b3UKKyAgICAgICAg ICBoYXZlIGJlZW4gZGlzYWJsaW5nIGFuZCBlbmFibGluZyBkaWZmZXJlbnQgZmVhdHVyZXMsIHRo aXMKKyAgICAgICAgICByZXN5bmNocm9uaXplcyBLZXJtaXQncyBmZWF0dXJlIGxpc3Qgd2l0aCB0 aGUgc2VydmVyJ3MuIElmIHRoZQorICAgICAgICAgIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRo ZSBGRUFUIGRpcmVjdGl2ZSwgS2VybWl0J3MgZmVhdHVyZQorICAgICAgICAgIGxpc3QgaXMgbm90 IGNoYW5nZWQuCisKKyAgIEZUUCBPUFRJT05TIGRpcmVjdGl2ZQorICAgICAgICAgIEluZm9ybWF0 aW9uYWwgb25seTogdGhlIHNlcnZlciB0ZWxscyB3aGF0IG9wdGlvbnMsIGlmIGFueSwgaXQKKyAg ICAgICAgICBzdXBwb3J0cyBmb3IgdGhlIGdpdmVuIGRpcmVjdGl2ZSwgZS5nLiBNTFNULiBGYWls cyBpZiB0aGUgc2VydmVyCisgICAgICAgICAgZG9lcyBub3Qgc3VwcG9ydCB0aGUgT1BUUyBkaXJl Y3RpdmUgb3IgaWYgdGhlIGRpcmVjdGl2ZSBmb3IKKyAgICAgICAgICB3aGljaCBvcHRpb25zIGFy ZSByZXF1ZXN0ZWQgaXMgbm90IHZhbGlkLiBUaGUgZGlyZWN0aXZlIGlzCisgICAgICAgICAgY2Fz ZS1pbnNlbnNpdGl2ZS4KKworICAgRlRQIFNJWkUgZmlsZW5hbWUKKyAgICAgICAgICBTZW5kcyBh IFNJWkUgZGlyZWN0aXZlIHRvIHRoZSBzZXJ2ZXIgZm9yIHRoZSBnaXZlbiBmaWxlLiBUaGUKKyAg ICAgICAgICBmaWxlbmFtZSBtdXN0IG5vdCBjb250YWluIHdpbGRjYXJkcy4gVGhlIHNlcnZlciBy ZXNwb25kcyB3aXRoIGFuCisgICAgICAgICAgZXJyb3IgaWYgdGhlIGZpbGUgY2FuJ3QgYmUgZm91 bmQsIGlzIG5vdCBhY2Nlc3NpYmxlLCBvciB0aGUgU0laRQorICAgICAgICAgIGRpcmVjdGl2ZSBp cyBub3Qgc3VwcG9ydGVkLCBvdGhlcndpc2Ugd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZQorICAgICAg ICAgIGZpbGUgaW4gYnl0ZXMsIHdoaWNoIEtlcm1pdCBkaXNwbGF5cyBhbmQgYWxzbyBtYWtlcyBh dmFpbGFibGUgdG8KKyAgICAgICAgICB5b3UgaW4gaXRzIFx2KGZ0cF9tZXNzYWdlKSB2YXJpYWJs ZS4gSWYgdGhlIGRpcmVjdGl2ZSBpcworICAgICAgICAgIHN1Y2Nlc3NmdWwsIEtlcm1pdCAocmUt KWVuYWJsZXMgaXQgZm9yIGludGVybmFsIHVzZSBieSB0aGUgR0VUCisgICAgICAgICAgYW5kIE1H RVQgZGlyZWN0aXZlcyBvbiB0aGlzIGNvbm5lY3Rpb24uCisKKyAgIEZUUCBNT0RUSU1FIGZpbGVu YW1lCisgICAgICAgICAgV29ya3MganVzdCBsaWtlIHRoZSBTSVpFIGRpcmVjdGl2ZSBleGNlcHQg aXQgc2VuZHMgYW4gTURUTQorICAgICAgICAgIGRpcmVjdGl2ZS4gVXBvbiBzdWNjZXNzLCB0aGUg c2VydmVyIHNlbmRzIG1vZGlmaWNhdGlvbiBkYXRlLXRpbWUKKyAgICAgICAgICBzdHJpbmcsIHdo aWNoIEtlcm1pdCBpbnRlcnByZXRzIGZvciB5b3UgYW5kIGFsc28gbWFrZXMgYXZhaWxhYmxlCisg ICAgICAgICAgaW4gaXRzIFx2KGZ0cF9tZXNzYWdlKSB2YXJpYWJsZS4KKworICAgV2hlbmV2ZXIg YSBTSVpFIG9yIE1EVE0gZGlyZWN0aXZlIGlzIHNlbnQgaW1wbGljaXRseSBhbmQgcmVqZWN0ZWQg YnkKKyAgIHRoZSBzZXJ2ZXIgYmVjYXVzZSBpdCBpcyB1bmtub3duLCBLZXJtaXQgYXV0b21hdGlj YWxseSBkaXNhYmxlcyBpdC4KKworMy4xMS4zLiBVc2luZyBNR0VUOiBOTFNUIHZlcnN1cyBNTFNE CisKKyAgIFdoZW4geW91IGdpdmUgYW4gTUdFVCBjb21tYW5kIHRvIGFuIEZUUCBjbGllbnQsIGl0 IHNlbmRzIGEgcmVxdWVzdCB0bworICAgdGhlIEZUUCBzZXJ2ZXIgZm9yIGEgbGlzdCBvZiBmaWxl cywgYW5kIHRoZW4gdXBvbiBzdWNjZXNzZnVsIHJlY2VpcHQgb2YKKyAgIHRoZSBsaXN0LCBnb2Vz IHRocm91Z2ggaXQgYW5kIGlzc3VlcyBhIFJFVFIgKHJldHJpZXZlKSBkaXJlY3RpdmUgZm9yCisg ICBlYWNoIGZpbGUgb24gdGhlIGxpc3QgKG9yIHBvc3NpYmx5IG9ubHkgZm9yIHNlbGVjdGVkIGZp bGVzKS4KKworICAgV2l0aCB0aGUgbmV3IEZUUCBwcm90b2NvbCBleHRlbnNpb25zLCBub3cgdGhl cmUgYXJlIHR3byB3YXlzIHRvIGdldCB0aGUKKyAgIGxpc3Qgb2YgZmlsZXM6IHRoZSBOTFNUIGRp cmVjdGl2ZSwgd2hpY2ggaGFzIGJlZW4gcGFydCBvZiBGVFAgcHJvdG9jb2wKKyAgIHNpbmNlIHRo ZSBiZWdpbm5pbmcsIGFuZCB0aGUgbmV3IE1MU0QgZGlyZWN0aXZlLCB3aGljaCBpcyBuZXcgYW5k IG5vdAorICAgeWV0IHdpZGVseSBpbXBsZW1lbnRlZC4gV2hlbiBOTFNUIGlzIHVzZWQgYW5kIHlv dSBnaXZlIGEgY29tbWFuZCBsaWtlCisgICAibWdldCAqLnR4dCIsIHRoZSBGVFAgY2xpZW50IHNl bmRzOgorCitOTFNUICoudHh0CisKKyAgIGFuZCB0aGUgc2VydmVyIHNlbmRzIGJhY2sgYSBsaXN0 IG9mIHRoZSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCwgZS5nLgorCitmb28udHh0CitiYXIudHh0 CitiYXoudHh0CisKKyAgIFRoZW4gd2hlbiBkb3dubG9hZGluZyBlYWNoIGZpbGUsIHRoZSBjbGll bnQgc2VuZHMgU0laRSAoaWYgaXQgd2FudHMKKyAgIGhhdmUgYSBwZXJjZW50LWRvbmUgZGlzcGxh eSkgYW5kIE1EVE0gKGlmIGl0IHdhbnRzIHRvIHNldCB0aGUKKyAgIGRvd25sb2FkZWQgZmlsZSdz IHRpbWVzdGFtcCB0byBtYXRjaCB0aGF0IG9mIHRoZSBvcmlnaW5hbCksIGFzIHdlbGwgYXMKKyAg IFJFVFIgKHRvIHJldHJpZXZlIHRoZSBmaWxlKS4KKworICAgQnV0IHdoZW4gTUxTRCBpcyB1c2Vk LCB0aGUgY2xpZW50IGlzIG5vdCBzdXBwb3NlZCB0byBzZW5kIHRoZSBmaWxlbmFtZQorICAgb3Ig d2lsZGNhcmQgdG8gdGhlIHNlcnZlcjsgaW5zdGVhZCBpdCBzZW5kcyBhbiBNTFNEIGRpcmVjdGl2 ZSB3aXRoIG5vCisgICBhcmd1bWVudCAob3IgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkpLCBhbmQg dGhlIHNlcnZlciBzZW5kcyBiYWNrIGEgbGlzdAorICAgb2YgYWxsIHRoZSBmaWxlcyBpbiB0aGUg Y3VycmVudCBvciBnaXZlbiBkaXJlY3Rvcnk7IHRoZW4gdGhlIGNsaWVudAorICAgZ29lcyB0aHJv dWdoIHRoZSBsaXN0IGFuZCBjaGVja3MgZWFjaCBmaWxlIHRvIHNlZSBpZiBpdCBtYXRjaGVzIHRo ZQorICAgZ2l2ZW4gcGF0dGVybiwgdGhlIHJhdGlvbmFsZSBiZWluZyB0aGF0IHRoZSB1c2VyIGtu b3dzIG9ubHkgdGhlIGxvY2FsCisgICBjb252ZW50aW9ucyBmb3Igd2lsZGNhcmRzIGFuZCBub3Qg bmVjZXNzYXJpbHkgdGhlIHNlcnZlcidzIGNvbnZlbnRpb25zLgorICAgU28gd2l0aCBOTFNUIHRo ZSBzZXJ2ZXIgaW50ZXJwcmV0cyB3aWxkY2FyZHM7IHdpdGggTUxTRCB0aGUgY2xpZW50CisgICBk b2VzLgorCisgICAgIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBOTFNUIHdpbGRjYXJkcyBieSB0aGUg c2VydmVyIGlzIG5vdAorICAgICBuZWNlc3NhcmlseSByZXF1aXJlZCBvciBldmVuIGVudmlzaW9u ZWQgYnkgdGhlIEZUUCBwcm90b2NvbAorICAgICBkZWZpbml0aW9uIChSRkMgOTU5KSwgYnV0IGlu IHByYWN0aWNlIG1vc3QgY2xpZW50cyBhbmQgc2VydmVycyB3b3JrCisgICAgIHRoaXMgd2F5Lgor CisgICBUaGUgcHJpbmNpcGFsIGFkdmFudGFnZSBvZiBNTFNEIGlzIHRoYXQgaW5zdGVhZCBvZiBz ZW5kaW5nIGJhY2sgYQorICAgc2ltcGxlIGxpc3Qgb2YgZmlsZW5hbWVzLCBpdCBzZW5kcyBiYWNr IGEga2luZCBvZiBkYXRhYmFzZSBpbiB3aGljaAorICAgZWFjaCBlbnRyeSBjb250YWlucyBhIGZp bGVuYW1lIHRvZ2V0aGVyIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICBmaWxlOiB0eXBl LCBzaXplLCB0aW1lc3RhbXAsIGFuZCBzbyBvbjsgZm9yIGV4YW1wbGU6CisKK3NpemU9MDt0eXBl PWRpcjtwZXJtPWVsO21vZGlmeT0yMDAyMDQwOTE5MTUzMDsgYmluCitzaXplPTM5MTkzMTI7dHlw ZT1maWxlO3Blcm09cjttb2RpZnk9MjAwMDAzMTAxNDA0MDA7IGJhci50eHQKK3NpemU9NjY4NjE3 Njt0eXBlPWZpbGU7cGVybT1yO21vZGlmeT0yMDAwMTIxNTE4MTAwMDsgYmF6LnR4dAorc2l6ZT0z ODIwMDkyO3R5cGU9ZmlsZTtwZXJtPXI7bW9kaWZ5PTIwMDAwMzEwMTQwMzAwOyBmb28udHh0Citz aXplPTI3NDM5O3R5cGU9ZmlsZTtwZXJtPXI7bW9kaWZ5PTIwMDIwOTIzMTUxMzEyOyBmb28uemlw CisoZXRjIGV0Yy4uLikKKworICAgKElmIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGUgbGlzdCB3ZXJl IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBOTFNUCisgICBhbmQgTUxTRCwgdGhlIGRpc2N1 c3Npb24gd291bGQgYmUgZmluaXNoZWQ6IGl0IHdvdWxkIGFsd2F5cyBiZSBiZXR0ZXIKKyAgIHRv IHVzZSBNTFNEIHdoZW4gYXZhaWxhYmxlLCBhbmQgdGhlIE1HRVQgdXNlciBpbnRlcmZhY2Ugd291 bGQgbmVlZCBubworICAgY2hhbmdlcy4gQnV0IHRoZXJlJ3MgYSBsb3QgbW9yZSB0byBNTFNEIHRo YW4gdGhlIGZpbGUtbGlzdCBmb3JtYXQ7IHJlYWQKKyAgIG9uLi4uKQorCisgICBUaGUgY2xpZW50 IGxlYXJucyB3aGV0aGVyIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgTUxTRCBpbiBGRUFUIGV4Y2hhbmdl LgorICAgQnV0IHRoZSBmYWN0IHRoYXQgdGhlIHNlcnZlciBzdXBwb3J0cyBNTFNEIGRvZXNuJ3Qg bWVhbiB0aGUgY2xpZW50CisgICBzaG91bGQgYWx3YXlzIHVzZSBpdC4gSXQgaXMgYmV0dGVyIHRv IHVzZSBNTFNEOgorCisgICAgICogT24gY29ubmVjdGlvbnMgd2hlcmUgdGhlIHNlcnZlciBpbXBv c2VzIGEgdGltZSBwZW5hbHR5IGZvciBldmVyeQorICAgICAgIGNvbW1hbmQsIGUuZy4gdGhlIFJl ZCBIYXQgUmF3aGlkZSBzZXJ2ZXIuIFdpdGggTUxTRCwgdGhlIGNsaWVudAorICAgICAgIG5lZWRz IHRvIHNlbmQgb25seSBvbmUgY29tbWFuZCAoUkVUUikgcGVyIGZpbGUsIHdoZXJlYXMgTkxTVAor ICAgICAgIHJlcXVpcmVzIHRocmVlIChTSVpFLCBSRVRSLCBhbmQgTURUTSkuIFN1cHBvc2UgdGhl cmUgaXMgYSAzMC1zZWNvbmQKKyAgICAgICBkZWxheSBmb3IgZWFjaCBjb21tYW5kIGFuZCAxMDAw IGZpbGVzIGFyZSB0byBiZSBmZXRjaGVkOyBpbiB0aGF0CisgICAgICAgY2FzZSwgTUxTRCBzYXZl cyA2MCwwMDAgc2Vjb25kcyA9IDEwMDAgbWludXRlcyA9IDE2IGhvdXJzIGFuZCA0MAorICAgICAg IG1pbnV0ZXMuCisgICAgICogRm9yIHJlY3Vyc2l2ZSBkb3dubG9hZHMgc2luY2UgdGhlcmUgaXMg bm8gZGVwZW5kYWJsZSB3YXkgdG8KKyAgICAgICBkb3dubG9hZCBkaXJlY3RvcnkgdHJlZXMgd2l0 aCBOTFNULgorCisgICBCdXQgaXQgaXMgYmV0dGVyIHRvIHVzZSBOTFNUOgorCisgICAgICogSWYg eW91IHdhbnQgb25seSBhIGNvdXBsZSBzaG9ydCBmaWxlcyBvdXQgb2YgYSBsYXJnZSBkaXJlY3Rv cnkuIEluCisgICAgICAgdGhpcyBjYXNlLCBOTFNUIGlzIHRoZSBiZXR0ZXIgY2hvaWNlIHNpbmNl IHRoZSBzZXJ2ZXIgc2VuZHMgYSBsaXN0CisgICAgICAgb2Ygb25seSB0aGUgZmlsZXMgeW91IHdh bnQsIG5vdCBhIGxpc3Qgb2YgKHNheSkgYSBtaWxsaW9uIGZpbGVzLAorICAgICAgIHdoaWNoIGNh biBtYWtlIGEgYmlnIGRpZmZlcmVuY2Ugb24gc2xvdyBjb25uZWN0aW9ucy4gRm9yIGV4YW1wbGUs CisgICAgICAgc3VwcG9zZSB5b3VyIHdpbGRjYXJkIG1hdGNoZXMgdGhyZWUgZmlsZXMgb2YgMUsg ZWFjaCwgYnV0IHRoZQorICAgICAgIG1pbGxpb24tZmlsZSBsaXN0aW5nIGlzIDgwTUIgbG9uZywg YW5kIHlvdXIgY29ubmVjdGlvbiBpcyB0aHJvdWdoIGEKKyAgICAgICBtb2RlbS4gVGhlIG92ZXJo ZWFkIG9mIHVzaW5nIE1MU0QgaXMgcHJhY3RpY2FsbHkgaW5maW5pdGUuCisgICAgICogSWYgdGhl IHNlcnZlciBzdXBwb3J0cyB3aWxkY2FyZGluZyBmZWF0dXJlcyBub3Qga25vd24gdG8gdGhlCisg ICAgICAgY2xpZW50LCBidXQgdGhhdCBjYW4gYmUgdXNlZCB0byBhY2hpZXZlIGRlc2lyYWJsZSBl ZmZlY3RzIG90aGVyd2lzZQorICAgICAgIHVub2J0YWluYWJsZSwgc3VjaCBhcyAiW2Rpci4uLl0q LnR4dCIgaW4gVk1TIG9yIEFPUy9WUyAiZXhjZXB0IgorICAgICAgIGNsYXVzZXMuCisgICAgICog SWYgeW91IGhhdmUgYmVlbiBnaXZlbiBhIHdpbGRjYXJkIHN0cmluZyBieSBhbiBGVFAgc2l0ZQor ICAgICAgIGFkbWluaXN0cmF0b3IgZm9yIGZldGNoaW5nIGEgc3BlY2lmaWMgZ3JvdXAgb2YgZmls ZXMgb3V0IG9mIGEKKyAgICAgICBsYXJnZXIgZGlyZWN0b3J5LCBlLmcuICJtZ2V0IGNrW2N1d10q Lltjd2hdIG1ha2VmaWxlIiwgdGhhdCBpcworICAgICAgIGV4cGVjdGVkIHRvIHdvcmsgd2l0aCBh bnkgY2xpZW50IChhbiBGVFAgc2l0ZSBhZG1pbmlzdHJhdG9yIGNhbid0CisgICAgICAgYmUgZXhw ZWN0ZWQgdG8ga25vdyB0aGUgd2lsZGNhcmQgc3ludGF4IG9mIGV2ZXJ5IEZUUCBjbGllbnQpLgor CisgICBCdXQgd2hlbiB1c2luZyBNTFNEIHRoZXJlIGFyZSBjb21wbGljYXRpb25zOgorCisgICAg ICogTUxTRCB3YW50cyBlaXRoZXIgYSBibGFuayBhcmd1bWVudCAobWVhbmluZyB0aGUgY3VycmVu dCBkaXJlY3RvcnkpCisgICAgICAgb3IgZWxzZSB0aGUgbmFtZSBvZiBhIHNwZWNpZmljIGRpcmVj dG9yeS4gVGhlIGNsaWVudCBtdXN0IG5vdCBzZW5kCisgICAgICAgaXQgYSB3aWxkY2FyZCBvciBh IGZpbGVuYW1lLgorICAgICAqIEJ1dCBpZiB0aGUgdXNlcidzIGNvbW1hbmQgaXMgIm1nZXQgeHh4 IiwgaG93IGRvZXMgdGhlIGNsaWVudCBrbm93CisgICAgICAgd2hldGhlciB0byBzZW5kICJ4eHgi IGluIHRoZSBNTFNEIGRpcmVjdGl2ZT8gSXQgbWlnaHQgYmUgdGhlIG5hbWUKKyAgICAgICBvZiBh IGRpcmVjdG9yeSBvbiBvbiB0aGUgc2VydmVyLCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZSBz ZW50LAorICAgICAgIG9yIGl0IG1pZ2h0IGJlIHRoZSBuYW1lIG9mIGEgZmlsZSBvbiB0aGUgc2Vy dmVyIChvciBhIHdpbGRjYXJkKSwgaW4KKyAgICAgICB3aGljaCBjYXNlIGl0IG11c3Qgbm90IGJl IHNlbnQuIFNpbmNlIHRoZSBjbGllbnQga25vd3MgaXRzIG93bgorICAgICAgIHdpbGRjYXJkIHN5 bnRheCwgdGhlbiBpbiBtb3N0IGNhc2VzIGl0IHdvdWxkIGJlIHJpZ2h0IHRvIHNlbmQKKyAgICAg ICAiTUxTRCIgd2l0aCBubyBhcmd1bWVudCBpZiB4eHggaXMgd2lsZCwgYW5kIHRvIHNlbmQgIk1M U0QgeHh4IiBpZgorICAgICAgIGl0IGlzIG5vdC4KKyAgICAgKiBCdXQgc3VwcG9zZSB0aGUgc2Vy dmVyJ3MgZmlsZSBzeXN0ZW0gYWxsb3dzIGZpbGVuYW1lIGNoYXJhY3RlcnMKKyAgICAgICB0aGF0 IGNvcnJlc3BvbmQgd2l0aCB0aGUgY2xpZW50J3Mgd2lsZGNhcmQgc3ludGF4PyBGb3IgZXhhbXBs ZToKKyAgICAgICAiW2FiY10iIGNvdWxkIGJlIGVpdGhlciBhIHZhbGlkIFZNUyBkaXJlY3Rvcnkg bmFtZSBvciBhIHdpbGRjYXJkCisgICAgICAgcGF0dGVybiB1c2VkIGJ5IHRoZSBGVFAgY2xpZW50 LiBXaGF0IHNob3VsZCB0aGUgY2xpZW50IGRvIHdpdGgKKyAgICAgICAibWdldCBbYWJjXSI/IElu IHRoaXMgY2FzZSB0aGVyZSBtdXN0IGJlIGEgd2F5IGZvciB0aGUgdXNlciB0bworICAgICAgIGZv cmNlIHNlbmRpbmcgdGhlIE1HRVQgYXJndW1lbnQgYXMgdGhlIE1MU0QgYXJndW1lbnQuCisgICAg ICogSWYgInh4eCIgaXMgYSByZWd1bGFyIGZpbGUgaW4gdGhlIHNlcnZlcidzIGN1cnJlbnQgZGly ZWN0b3J5LCAibWdldAorICAgICAgIHh4eCIgd29ya3Mgd2l0aCBOTFNUIGJ1dCBub3Qgd2l0aCBN TFNELgorCisgICBUbyBmdXJ0aGVyIGNvbXBsaWNhdGUgbWF0dGVycywgTkxTVCBjYW4gKGluIHRo ZW9yeSkgd29yayBqdXN0IGxpa2UKKyAgIE1MU0Q6IGlmIHNlbnQgd2l0aCBhIGJsYW5rIGFyZ3Vt ZW50IG9yIGEgZGlyZWN0b3J5IG5hbWUsIGl0IGlzIHN1cHBvc2VkCisgICB0byByZXR1cm4gYSBj b21wbGV0ZSBsaXN0IG9mIGZpbGVzIGluIHRoZSBjdXJyZW50IG9yIGdpdmVuIGRpcmVjdG9yeSwK KyAgIHdoaWNoIHRoZSBjbGllbnQgY2FuIG1hdGNoIGxvY2FsbHkgYWdhaW5zdCBzb21lIHBhdHRl cm4uIEl0IGlzIG5vdAorICAga25vd24gaWYgYW55IEZUUCBzZXJ2ZXIgb3IgY2xpZW50IGRvZXMg dGhpcyBidXQgbmV2ZXJ0aGVsZXNzLCBpdCBzaG91bGQKKyAgIGJlIHBvc3NpYmxlIHNpbmNlIHRo aXMgYmVoYXZpb3IgY2FuIGJlIGluZmVycmVkIGZyb20gUkZDIDk1OS4KKworICAgSW4gdmlldyBv ZiB0aGVzZSBjb25zaWRlcmF0aW9ucywgYW5kIGdpdmVuIHRoZSBuZWVkIHRvIHByZXNlcnZlIHRo ZQorICAgdHJhZGl0aW9uYWwgRlRQIGNsaWVudCBjb21tYW5kIHN0cnVjdHVyZSBhbmQgYmVoYXZp b3Igc28gdGhlIHNvZnR3YXJlCisgICB3aWxsIGJlIHVzYWJsZSBieSBtb3N0IHBlb3BsZToKKwor ICAgIDEuIFRoZSBNR0VUIGNvbW1hbmQgc2hvdWxkIHByb2R1Y2UgdGhlIGV4cGVjdGVkIHJlc3Vs dCBpbiB0aGUgY29tbW9uCisgICAgICAgY2FzZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBOTFNU IG9yIE1MU0QgaXMgdXNlZCB1bmRlcm5lYXRoLgorICAgIDIuIEZvciBhbm9tYWxvdXMgY2FzZXMs IHRoZSB1c2VyIG5lZWRzIGEgd2F5IHRvIGNvbnRyb2wgd2hldGhlciB0aGUKKyAgICAgICBNR0VU IGFyZ3VtZW50IGlzIHNlbnQgdG8gdGhlIHNlcnZlciBvciBrZXB0IGZvciBsb2NhbCB1c2UuCisg ICAgMy4gQXQgdGhlIHNhbWUgdGltZSwgdGhlIHVzZXIgbWlnaHQgbmVlZCBhIHdheSB0byBzZW5k IGEgZGlyZWN0b3J5CisgICAgICAgbmFtZSB0byB0aGUgc2VydmVyLCBpbmRlcGVuZGVudCBvZiBh bnkgd2lsZGNhcmQgcGF0dGVybi4KKyAgICA0LiBUaGUgdXNlciBuZWVkcyBhIHdheSB0byBmb3Jj ZSBOTFNUIG9yIE1MU0QgZm9yIGEgZ2l2ZW4gTUdFVAorICAgICAgIGNvbW1hbmQuCisKKyAgIEJ5 IGRlZmF1bHQsIEtlcm1pdCdzIE1HRVQgY29tbWFuZCB1c2VzIE1MU0QgaWYgTUxTVCBpcyByZXBv cnRlZCBieSB0aGUKKyAgIHNlcnZlciBpbiBpdHMgRkVBVCBsaXN0LiBXaGVuIE1MU0QgaXMgdXNl ZCwgdGhlIGZpbGVzcGVjIGlzIHNlbnQgdG8gdGhlCisgICBzZXJ2ZXIgaWYgaXQgaXMgbm90IHdp bGQgKGFjY29yZGluZyB0byBLZXJtaXQncyBvd24gZGVmaW5pdGlvbiBvZgorICAgIndpbGQiIHNp bmNlIGl0IGNhbid0IHBvc3NpYmx5IGtub3cgdGhlIHNlcnZlcidzIGRlZmluaXRpb24pLiBJZiB0 aGUKKyAgIGZpbGVzcGVjIGlzIHdpbGQgaXQgaXMgaGVsZCBmb3IgbG9jYWwgdXNlIHRvIHNlbGVj dCBmaWxlcyBmcm9tIHRoZSBsaXN0CisgICByZXR1cm5lZCBieSB0aGUgc2VydmVyLiBJZiBNTFNU IGlzIG5vdCByZXBvcnRlZCBieSB0aGUgc2VydmVyIG9yIGlzCisgICBkaXNhYmxlZCwgS2VybWl0 IHNlbmRzIHRoZSBNR0VUIGZpbGVzcGVjIHdpdGggdGhlIE5MU1QgZGlyZWN0aXZlLgorCisgICBU aGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gYmUgb3ZlcnJpZGRlbiBnbG9iYWxseSB3aXRoIEZUUCBE SVNBQkxFIE1MU1QsCisgICB3aGljaCBmb3JjZXMgS2VybWl0IHRvIHVzZSBOTFNUIHRvIGdldCBm aWxlIGxpc3RzLiBBbmQgdGhlbiBmb3IKKyAgIHNpdHVhdGlvbnMgaW4gd2hpY2ggTUxTRCBpcyBl bmFibGVkLCB0aGUgZm9sbG93aW5nIE1HRVQgc3dpdGNoZXMgY2FuIGJlCisgICB1c2VkIHRvIG92 ZXJyaWRlIHRoZSBkZWZhdWx0cyBmb3IgYSBzcGVjaWZpYyBNR0VUIG9wZXJhdGlvbjoKKworICAg L05MU1QKKyAgICAgICAgICBGb3JjZXMgdGhlIGNsaWVudCB0byBzZW5kIE5MU1QuIEV4YW1wbGU6 CisKK21nZXQgL25sc3QgZm9vLioKKworICAgL01MU0QKKyAgICAgICAgICBGb3JjZXMgdGhlIGNs aWVudCB0byBzZW5kIE1MU0QgKGV2ZW4gaWYgTUxTVCBpcyBkaXNhYmxlZCkuCisgICAgICAgICAg RXhhbXBsZToKKworbWdldCAvbWxzZCBmb28uKgorCisgICAvTUFUQ0g6cGF0dGVybgorICAgICAg ICAgIFdoZW4gdGhpcyBzd2l0Y2ggaXMgZ2l2ZW4sIGl0IGZvcmNlcyB0aGUgY2xpZW50IHRvIGhv bGQgdGhlCisgICAgICAgICAgcGF0dGVybiBmb3IgbG9jYWwgdXNlIGFnYWluc3QgdGhlIHJldHVy bmVkIGZpbGUgbGlzdC4gSWYgYQorICAgICAgICAgIHJlbW90ZSBmaWxlc3BlYyBpcyBhbHNvIGdp dmVuIChlLmcuIHRoZSAiYmxhaCIgaW4gIm1nZXQKKyAgICAgICAgICAvbWF0Y2g6Ki50eHQgYmxh aCIpLCB0aGVuIGl0IGlzIHNlbnQgYXMgdGhlIE5MU1Qgb3IgTUxTRAorICAgICAgICAgIGFyZ3Vt ZW50LCBwcmVzdW1hYmx5IHRvIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aG9zZSBmaWxlcyBhcmUg dG8KKyAgICAgICAgICBiZSBsaXN0ZWQuIFdoZW4gdGhlIC9NQVRDSCBzd2l0Y2ggaXMgbm90IGdp dmVuLCB0aGUgTUdFVAorICAgICAgICAgIGZpbGVzcGVjIGlzIHNlbnQgdG8gdGhlIHNlcnZlciBp ZiB0aGUgZGlyZWN0aXZlIGlzIE5MU1Qgb3IgaWYKKyAgICAgICAgICB0aGUgZmlsZXNwZWMgaXMg bm90IHdpbGQuIEV4YW1wbGVzOgorCisgIENvbW1hbmQ6ICAgICAgICAgICAgICAgICAgIFdpdGgg TkxTVDogICAgIFdpdGggTUxTRDoKKyAgICBtZ2V0ICAgICAgICAgICAgICAgICAgICAgIE5MU1Qg ICAgICAgICAgIE1MU0QKKyAgICBtZ2V0ICoudHh0ICAgICAgICAgICAgICAgIE5MU1QgKi50eHQg ICAgIE1MU0QKKyAgICBtZ2V0IGZvbyAgICAgICAgICAgICAgICAgIE5MU1QgZm9vICAgICAgIE1M U0QgZm9vCisgICAgbWdldCAvbWF0Y2g6Ki50eHQgICAgICAgICBOTFNUICAgICAgICAgICBNTFNE CisgICAgbWdldCAvbWF0Y2g6Ki50eHQgZm9vICAgICBOTFNUIGZvbyAgICAgICBNTFNEIGZvbwor CisgICBJbiBvdGhlciB3b3JkcywgdGhlIHBhdHRlcm4gaXMgYWx3YXlzIGludGVycHJldGVkIGxv Y2FsbHkgdW5sZXNzIE1HRVQKKyAgIHVzZXMgTkxTVCBhbmQgbm8gL01BVENIIHN3aXRjaCB3YXMg Z2l2ZW4uCisKKzMuMTEuNC4gRXhhbXBsZXMKKworMy4xMS40LjEuIERvd25sb2FkaW5nIGEgU2lu Z2xlIEZpbGUKKworICAgVGhlcmUgYXJlIG5vIGNob2ljZXMgaGVyZSwganVzdCB1c2UgdGhlIEZU UCBHRVQgY29tbWFuZC4gS2VybWl0IGFsd2F5cworICAgc2VuZHMgdGhlIFJFVFIgZGlyZWN0aXZl LCBhbmQgcG9zc2libHkgU0laRSBhbmQvb3IgTURUTS4gVGhlIHNtYWxsCisgICBhZHZhbnRhZ2Ug b2YgdXNpbmcgTUxTVCBpbiB0aGlzIGNhc2UgaXMgb3V0d2VpZ2hlZCBieSB0aGUgcmlzayBhbmQK KyAgIGVmZm9ydCBvZiBjb2RpbmcgYSBzcGVjaWFsIGNhc2UuCisKKzMuMTEuNC4yLiBEb3dubG9h ZGluZyBhIEdyb3VwIG9mIEZpbGVzIGZyb20gYSBTaW5nbGUgRGlyZWN0b3J5CisKKyAgIFRoaXMg Y2FzZSBwcmVzZW50cyB0cmFkZW9mZnMsIGVzcGVjaWFsbHkgb24gc2xvdyBjb25uZWN0aW9uczoK KworICAgICAqIEZvciBkb3dubG9hZGluZyBhbGwgb3IgbW9zdCBvZiB0aGUgZmlsZXMgaW4gYSBk aXJlY3RvcnksIE1MU0QgaXMKKyAgICAgICBiZXR0ZXIgYmVjYXVzZSBpdCBlbGltaW5hdGVzIHRo ZSBuZWVkIHRvIHNlbmQgU0laRSBhbmQgTURUTSBmb3IKKyAgICAgICBlYWNoIGZpbGUuIE5vIHNw ZWNpYWwgYWN0aW9ucyBhcmUgcmVxdWlyZWQgaW4gdGhpcyBjYXNlOyBLZXJtaXQKKyAgICAgICB1 c2VzIE1MU0QgYXV0b21hdGljYWxseSBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIGl0ICh1bmxlc3Mg eW91IGhhdmUKKyAgICAgICBkaXNhYmxlZCBpdCkuCisgICAgICogRm9yIGEgc21hbGwgbnVtYmVy IG9mIGZpbGVzIGZyb20gYSBsYXJnZSBkaXJlY3RvcnksIE5MU1QgaXMgYmV0dGVyCisgICAgICAg YmVjYXVzZSBpdCBieXBhc3NlcyBkb3dubG9hZGluZyBvZiBhIHBvdGVudGlhbGx5IGh1Z2UgZmls ZSBsaXN0CisgICAgICAgcHJpb3IgdG8gdGhlIGZpbGVzIHRoZW1zZWx2ZXMuIElmIHlvdSBoYXZl IGEgY29ubmVjdGlvbiB0byBhIHNlcnZlcgorICAgICAgIHRoYXQgc3VwcG9ydHMgTUxTRCwgdXNl IHRoZSAvTkxTVCBzd2l0Y2ggdG8gZm9yY2UgTkxTVDoKKworbWdldCAvbmxzdCB0WzEyMzRdLmgK KworICAgICAqIElmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgTUxTRCBidXQgZG9lcyBub3Qgc3VwcG9y dCBzZXBhcmF0ZSBTSVpFIG9yCisgICAgICAgTURUTSBkaXJlY3RpdmVzLCBhbmQgeW91IG5lZWQg dGhlIHNpemUgYW5kL29yIHRpbWVzdGFtcAorICAgICAgIGluZm9ybWF0aW9uLCBNTFNEIGlzIGJl dHRlcjsgbm8gc3BlY2lhbCBhY3Rpb25zIHJlcXVpcmVkLgorICAgICAqIElmIHRoZSBzZXJ2ZXIg c3VwcG9ydHMgTUxTRCBidXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgInNpemUiIGFuZAorICAgICAg ICJtb2RpZnkiIGZhY3RzLCBidXQgaXQgZG9lcyBzdXBwb3J0IHRoZSBTSVpFIG9yIE1EVE0gZGly ZWN0aXZlcywKKyAgICAgICBhbmQgeW91IG5lZWQgdGhlIHNpemUgYW5kL29yIHRpbWVzdGFtcCBp bmZvcm1hdGlvbiwgTkxTVCBpcyBiZXR0ZXIuCisKKzMuMTEuNC4zLiBEb3dubG9hZGluZyBhIERp cmVjdG9yeSBUcmVlCisKKyAgIE1MU0QgaXMgdGhlIG9ubHkgY2hvaWNlIGZvciByZWN1cnNpdmUg ZG93bmxvYWRzOyB0aGV5IHJhcmVseSwgaWYgZXZlciwKKyAgIHdvcmsgd2l0aCBOTFNUICh0aGUg ZmV3IGNhc2VzIHdoZXJlIHRoZXkgZG8gd29yayByZWx5IG9uIGV4dHJhLXByb3RvY29sCisgICAi c2VjcmV0IiBub3RhdGlvbnMgZm9yIHRoZSBOTFNUIGFyZ3VtZW50KS4gTm8gc3BlY2lhbCBhY3Rp b25zIGFyZQorICAgcmVxdWlyZWQgdG8gZm9yY2UgTUxTRCB3aGVuIHRoZSBzZXJ2ZXIgc3VwcG9y dHMgaXQsIHVubGVzcyB5b3UgaGF2ZQorICAgZGlzYWJsZWQgaXQuIEV4YW1wbGVzOgorCisgICBN R0VUIC9SRUNVUlNJVkUKKyAgICAgICAgICBUaGlzIHRlbGxzIHRoZSBzZXJ2ZXIgdG8gc2VuZCBh bGwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIHRoZQorICAgICAgICAgIHRyZWUgcm9vdGVkIGF0 IGl0cyBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgTUdFVCAvUkVDVVJTSVZFICoudHh0CisgICAg ICAgICAgVGhpcyB0ZWxscyB0aGUgc2VydmVyIHRvIHNlbmQgYWxsICoudHh0IGZpbGVzIGluIHRo ZSB0cmVlIHJvb3RlZAorICAgICAgICAgIGF0IGl0cyBjdXJyZW50IGRpcmVjdG9yeS4KKworICAg TUdFVCAvTUxTRCAvUkVDVVJTSVZFICoudHh0CisgICAgICAgICAgU2FtZSBhcyB0aGUgcHJldmlv dXMgZXhhbXBsZSBidXQgZm9yY2VzIEtlcm1pdCB0byBzZW5kIE1MU0QgaW4KKyAgICAgICAgICBj YXNlIGl0IHdhcyBkaXNhYmxlZCwgb3IgaW4gY2FzZSB0aGUgc2VydmVyIGlzIGtub3duIHRvIHN1 cHBvcnQKKyAgICAgICAgICBpdCBldmVuIHRob3VnaCBpdCBkaWQgbm90IGFubm91bmNlIGl0IGlu IGl0cyBGRUFUIGxpc3RpbmcuCisKKyAgIE1HRVQgL1JFQ1VSU0lWRSAvTUFUQ0g6Ki56aXAgYXJj aGl2ZXMKKyAgICAgICAgICBUZWxscyB0aGUgc2VydmVyIHRvIHNlbmQgYWxsIFpJUCBmaWxlcyBp biB0aGUgdHJlZSByb290ZWQgYXQgaXRzCisgICAgICAgICAgImFyY2hpdmVzIiBkaXJlY3Rvcnku CisKKyAgIE1HRVQgL1JFQ1VSU0lWRSAvTUFUQ0g6KiBbYWJjXQorICAgICAgICAgIFRoZSBzZXJ2 ZXIgaXMgcnVubmluZyBvbiBWTVMgYW5kIHlvdSB3YW50IGl0IHRvIHNlbmQgYWxsIHRoZQorICAg ICAgICAgIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgdHJlZSByb290ZWQgYXQgW0FCQ10uIEJ1dCBz aW5jZSAiW2FiY10iCisgICAgICAgICAgbG9va3MganVzdCBsaWtlIGEgd2lsZGNhcmQsIHlvdSBo YXZlIHRvIGluY2x1ZGUgYSAvTUFUQ0g6IHN3aXRjaAorICAgICAgICAgIHRvIGZvcmNlIEtlcm1p dCB0byBzZW5kICJbYWJjXSIgYXMgdGhlIE1MU0QgYXJndW1lbnQuCisKKyAgIEluIGFsbCBjYXNl cyBpbiB3aGljaCB0aGUgL1JFQ1VSU0lWRSBzd2l0Y2ggaXMgaW5jbHVkZWQsIHRoZSBzZXJ2ZXIn cworICAgdHJlZSBpcyBkdXBsaWNhdGVkIGxvY2FsbHkuCisKKyAgICAgQWx0aG91Z2ggTUxTRCBh bGxvd3MgcmVjdXJzaW9uIGFuZCBOTFNUIGRvZXMgbm90LCB0aGUgTUxTRAorICAgICBzcGVjaWZp Y2F0aW9uIHBsYWNlcyBhIGhlYXZ5IGJ1cmRlbiBvbiB0aGUgY2xpZW50OyB0aGUgb2J2aW91cywK KyAgICAgc3RyYWlnaHRmb3J3YXJkLCBhbmQgZWxlZ2FudCBpbXBsZW1lbnRhdGlvbiAoZGVwdGgt Zmlyc3QsIHRoZSBvbmUKKyAgICAgdGhhdCBLZXJtaXQgY3VycmVudGx5IHVzZXMpIHJlcXVpcmVz IGFzIG1hbnkgb3BlbiB0ZW1wb3JhcnkgZmlsZXMgYXMKKyAgICAgdGhlIHNlcnZlcidzIGRpcmVj dG9yeSB0cmVlIGlzIGRlZXAsIGFuZCB0aGVyZWZvcmUgY2xpZW50IHJlc291cmNlCisgICAgIGV4 aGF1c3Rpb24gLS0gZS5nLiBleGNlZWRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gZmls ZXMgLS0gaXMKKyAgICAgYSBkYW5nZXIuIFVuZm9ydHVuYXRlbHkgTUxTRCB3YXMgbm90IGRlc2ln bmVkIHdpdGggcmVjdXJzaW9uIGluCisgICAgIG1pbmQuIChCcmVhZHRoLWZpcnN0IHRyYXZlcnNh bCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBkdWUgdG8gbGFjayBvZgorICAgICBzdWZmaWNpZW50IG5h dmlnYXRpb24gaW5mb3JtYXRpb24uKQorCisgICBPZiBjb3Vyc2UgYWxsIG9mIEtlcm1pdCdzIG90 aGVyIE1HRVQgc3dpdGNoZXMgY2FuIGJlIHVzZWQgdG9vLCBlLmcuIGZvcgorICAgZmluZXItZ3Jh aW5lZCBmaWxlIHNlbGVjdGlvbiAoYnkgZGF0ZSwgc2l6ZSwgZXRjKSwgZm9yIG1vdmluZyBvcgor ICAgcmVuYW1pbmcgZmlsZXMgYXMgdGhleSBhcnJpdmUsIHRvIG92ZXJyaWRlIEtlcm1pdCdzIGF1 dG9tYXRpYyBwZXItZmlsZQorICAgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmcsIHRvIHBhc3Mg dGhlIGluY29taW5nIGZpbGVzIHRocm91Z2ggYQorICAgZmlsdGVyLCB0byBjb252ZXJ0IHRleHQt ZmlsZSBjaGFyYWN0ZXIgc2V0cywgYW5kIHNvIG9uLgorCiszLjExLjQuNC4gTkxTVC9NTFNEIFN1 bW1hcnkgVGFibGUKKworICAgSGVyZSdzIGEgdGFibGUgc3VtbWFyaXppbmcgTUdFVCBiZWhhdmlv ciB3aGVuIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgYm90aAorICAgTkxTVCBhbmQgTUxTRC4gL05MU1Qg YW5kIC9NTFNEIHN3aXRjaGVzIGFyZSBpbmNsdWRlZCBmb3IgY2xhcml0eSB0bworICAgaW5kaWNh dGUgd2hpY2ggcHJvdG9jb2wgaXMgYmVpbmcgdXNlZCwgYW5kIHRoZSBleHBlY3RlZCBlZmZlY3Rz LiBJbgorICAgcHJhY3RpY2UgeW91IGNhbiBvbWl0IHRoZSAvTkxTVCBhbmQgL01MU0Qgc3dpdGNo ZXMgYW5kIHRoZSBLZXJtaXQKKyAgIGNsaWVudCBjaG9vc2VzIHRoZSBhcHByb3ByaWF0ZSBvciBk ZXNpcmVkIHByb3RvY29sIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAgIFNhbXBsZSBjb21tYW5kcyBw cmVzdW1lIGEgVW5peCBmaWxlIHN5c3RlbSBvbiB0aGUgc2VydmVyLCBidXQgb2YgY291cnNlCisg ICB0aGUgc2VydmVyIGNhbiBoYXZlIGFueSBmaWxlIHN5c3RlbSBvciBzeW50YXggYXQgYWxsLgor CisgICBVc2VyJ3MgQ29tbWFuZCBGVFAgU2VuZHMgUmVtYXJrcworICAgbWdldCAvbmxzdCBOTFNU IEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXMgaW4gdGhlIHNlcnZlcidzIGN1cnJlbnQKKyAg IGFuZCBkb3dubG9hZHMgZWFjaCBmaWxlLiBUaGUgbGlzdCBpbmNsdWRlcyBuYW1lcyBvbmx5LCBz byBLZXJtaXQgYWxzbworICAgbXVzdCBzZW5kIFNJWkUgYW5kIE1EVE0gZGlyZWN0aXZlcyBpZiBz aXplIGFuZCB0aW1lc3RhbXAgaW5mb3JtYXRpb24gaXMKKyAgIHJlcXVpcmVkICh0aGlzIGlzIGFs d2F5cyB0cnVlIG9mIE5MU1QpLiBTZW5kaW5nIE5MU1Qgd2l0aG91dCBhbgorICAgYXJndW1lbnQg aXMgYWxsb3dlZCBieSB0aGUgUkZDOTU5IE5MU1QgZGVmaW5pdGlvbiBhbmQgYnkgdGhlIEtlcm1p dCBGVFAKKyAgIGNsaWVudCwgYnV0IG1pZ2h0IG5vdCB3b3JrIHdpdGggb3RoZXIgY2xpZW50cywg YW5kIGFsc28gbWlnaHQgbm90IHdvcmsKKyAgIHdpdGggZXZlcnkgc2VydmVyLgorICAgbWdldCAv bmxzdCBmb28gTkxTVCBmb28gSWYgImZvbyIgaXMgYSBkaXJlY3RvcnksIHRoaXMgZ2V0cyBhIGxp c3Qgb2YKKyAgIGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgc2VydmVyJ3MgImZvbyIgZGlyZWN0b3J5 IGFuZCBkb3dubG9hZHMgZWFjaAorICAgZmlsZTsgb3RoZXJ3aXNlIHRoaXMgZG93bmxvYWRzIHRo ZSBmaWxlIG5hbWVkICJmb28iIChpZiBhbnkpIGZyb20gdGhlCisgICBzZXJ2ZXIncyBjdXJyZW50 IGRpcmVjdG9yeS4KKyAgIG1nZXQgL25sc3QgKi50eHQgTkxTVCAqLnR4dCBHZXRzIGEgbGlzdCBv ZiB0aGUgZmlsZXMgaW4gdGhlIHNlcnZlcidzCisgICBjdXJyZW50IGRpcmVjdG9yeSB3aG9zZSBu YW1lcyBtYXRjaCB0aGUgcGF0dGVybiAqLnR4dCwgYW5kIHRoZW4KKyAgIGRvd25sb2FkcyBlYWNo IGZpbGUgZnJvbSB0aGUgbGlzdC4gQmVjYXVzZSB3ZSBhcmUgdXNpbmcgTkxTVCwgd2Ugc2VuZAor ICAgdGhlIGZpbGVzcGVjICgqLnR4dCkgdG8gdGhlIHNlcnZlciBhbmQgdGhlIHNlcnZlciBpbnRl cnByZXRzIGFueQorICAgd2lsZGNhcmRzLgorICAgbWdldCAvbmxzdCBmb28vKi50eHQgTkxTVCBm b28vKi50eHQgIEdldHMgYSBsaXN0IG9mIHRoZSBmaWxlcyBpbiB0aGUKKyAgIHNlcnZlcidzICJm b28iIGRpcmVjdG9yeSB3aG9zZSBuYW1lcyBtYXRjaCB0aGUgcGF0dGVybiAqLnR4dCwgYW5kIHRo ZW4KKyAgIGRvd25sb2FkcyBlYWNoIGZpbGUgZnJvbSB0aGUgbGlzdCAoc2VydmVyIGludGVycHJl dHMgd2lsZGNhcmRzKS4KKyAgIG1nZXQgL25sc3QgL21hdGNoOioudHh0IE5MU1QgR2V0cyBhIGxp c3Qgb2YgYWxsIHRoZSBmaWxlcyBpbiB0aGUKKyAgIHNlcnZlcidzIGN1cnJlbnQgZGlyZWN0b3J5 IGFuZCB0aGVuIGRvd25sb2FkcyBlYWNoIG9uZSB3aG9zZSBuYW1lCisgICBtYXRjaGVzIHRoZSBw YXR0ZXJuICoudHh0IChjbGllbnQgaW50ZXJwcmV0cyB3aWxkY2FyZHMpLgorICAgbWdldCAvbmxz dCAvbWF0Y2g6Ki50eHQgZm9vICBOTFNUIGZvbyBHZXRzIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVz IGluCisgICB0aGUgc2VydmVyJ3MgImZvbyIgZGlyZWN0b3J5IGFuZCB0aGVuIGRvd25sb2FkcyBl YWNoIG9uZSB3aG9zZSBuYW1lCisgICBtYXRjaGVzIHRoZSBwYXR0ZXJuICoudHh0IChjbGllbnQg aW50ZXJwcmV0cyB3aWxkY2FyZHMpLgorICAgbWdldCAvbWxzZCBNTFNEIEdldHMgYSBsaXN0IG9m IGFsbCB0aGUgZmlsZXMgZnJvbSB0aGUgc2VydmVyJ3MgY3VycmVudAorICAgZGlyZWN0b3J5IGFu ZCB0aGVuIGRvd25sb2FkcyBlYWNoIG9uZS4gVGhlIGxpc3QgbWlnaHQgaW5jbHVkZSBzaXplIGFu ZAorICAgdGltZXN0YW1wIGluZm9ybWF0aW9uLCBpbiB3aGljaCBjYXNlIEtlcm1pdCBkb2VzIG5v dCBuZWVkIHRvIHNlbmQgU0laRQorICAgYW5kIE1EVE0gZGlyZWN0aXZlcyBmb3IgZWFjaCBmaWxl ICh0aGlzIGlzIGFsd2F5cyB0cnVlIG9mIE1MU0QpLgorICAgbWdldCAvbWxzZCBmb28gTUxTRCBm b28gR2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBmaWxlcyBmcm9tIHRoZSBzZXJ2ZXIncworICAgImZv byIgZGlyZWN0b3J5ICh3aGVyZSB0aGUgc3RyaW5nICJmb28iIGRvZXMgbm90IGNvbnRhaW4gd2ls ZGNhcmRzKSBhbmQKKyAgIHRoZW4gZG93bmxvYWRzIGVhY2ggb25lLiBJZiAiZm9vIiBpcyBhIHJl Z3VsYXIgZmlsZSBhbmQgbm90IGEKKyAgIGRpcmVjdG9yeSwgdGhpcyBjb21tYW5kIGlzIHN1cHBv c2VkIHRvIGZhaWwsIGJ1dCBzb21lIHNlcnZlcnMgaGF2ZSBiZWVuCisgICBvYnNlcnZlZCB0aGF0 IHNlbmQgdGhlIGZpbGUuCisgICBtZ2V0IC9tbHNkICoudHh0IE1MU0QgR2V0cyBhIGxpc3Qgb2Yg YWxsIHRoZSBmaWxlcyBmcm9tIHRoZSBzZXJ2ZXIncworICAgY3VycmVudCBkaXJlY3RvcnkgYW5k IHRoZW4gZG93bmxvYWRzIG9ubHkgdGhlIG9uZXMgd2hvc2UgbmFtZXMgbWF0Y2gKKyAgIHRoZSBw YXR0ZXJuICIqLnR4dCIuIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIE1MU0QgYW5kIHRoZSBNR0VUIGZp bGVzcGVjIGlzCisgICB3aWxkLCB3ZSBkbyBub3Qgc2VuZCB0aGUgZmlsZXNwZWMgdG8gdGhlIHNl cnZlciwgYnV0IHRyZWF0IGl0IGFzIHRob3VnaAorICAgaXQgaGFkIGJlZW4gZ2l2ZW4gaW4gYSAv TUFUQ0g6IHN3aXRjaCBhbmQgdXNlIGl0IGxvY2FsbHkgdG8gbWF0Y2ggdGhlCisgICBuYW1lcyBp biB0aGUgbGlzdC4KKyAgIG1nZXQgL21sc2QgZm9vLyoudHh0IE1MU0QgVGhpcyBvbmUgd29uJ3Qg d29yayBiZWNhdXNlIE1MU0QgcmVxdWlyZXMKKyAgIHRoYXQgdGhlIG5vdGlvbnMgb2Ygc2VydmVy IGRpcmVjdG9yeSBhbmQgZmlsZW5hbWUtbWF0Y2hpbmcgcGF0dGVybiBiZQorICAgc2VwYXJhdGVk LiBIb3dldmVyLCB0aGUgY2xpZW50LCB3aGljaCBjYW4ndCBiZSBleHBlY3RlZCB0byBrbm93IHRo ZQorICAgc2VydmVyJ3MgZmlsZS1zeXN0ZW0gc3ludGF4LCB3aW5kcyB1cCBzZW5kaW5nIGEgcmVx dWVzdCB0aGF0IHRoZSBzZXJ2ZXIKKyAgIHdpbGwgKG9yIHNob3VsZCkgcmVqZWN0LgorICAgbWdl dCAvbWxzZCAvbWF0Y2g6Ki50eHQgTUxTRCBHZXRzIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzIGZy b20gdGhlCisgICBzZXJ2ZXIncyBjdXJyZW50IGRpcmVjdG9yeSBhbmQgdGhlbiBkb3dubG9hZHMg b25seSB0aGUgb25lcyB3aG9zZSBuYW1lcworICAgbWF0Y2ggdGhlIHBhdHRlcm4gIioudHh0IiAo Y2xpZW50IGludGVycHJldHMgd2lsZGNhcmRzKS4KKyAgIG1nZXQgL21sc2QgL21hdGNoOioudHh0 IGZvbyBNTFNEIGZvbyBJZiAiZm9vIiBpcyBhIGRpcmVjdG9yeSBvbiB0aGUKKyAgIHNlcnZlciwg dGhpcyBnZXRzIGEgbGlzdCBvZiBhbGwgdGhlIGZpbGVzIGZyb20gdGhlIHNlcnZlcidzICJmb28i CisgICBkaXJlY3RvcnkgYW5kIHRoZW4gZG93bmxvYWRzIG9ubHkgdGhlIG9uZXMgd2hvc2UgbmFt ZXMgbWF0Y2ggdGhlCisgICBwYXR0ZXJuICIqLnR4dCIgKGNsaWVudCBpbnRlcnByZXRzIHdpbGRj YXJkcykuIFRoaXMgbGVhdmVzIHRoZSBzZXJ2ZXIKKyAgIENEJ2QgdG8gdGhlICJmb28iIGRpcmVj dG9yeTsgdGhlcmUncyBubyB3YXkgdGhlIGNsaWVudCBjYW4gcmVzdG9yZSB0aGUKKyAgIHNlcnZl cidzIG9yaWdpbmFsIGRpcmVjdG9yeSBiZWNhdXNlIE1MU0QgZG9lc24ndCBnaXZlIHRoYXQgaW5m b3JtYXRpb24sCisgICBhbmQgc2luY2UgdGhlIGNsaWVudCBjYW4gbm90IGJlIGV4cGVjdGVkIHRv IGtub3cgdGhlIHNlcnZlcidzCisgICBmaWxlLXN5c3RlbSBzeW50YXgsIGl0IHdvdWxkIG5vdCBi ZSBzYWZlIHRvIGd1ZXNzLiBJZiAiZm9vIiBpcyBhCisgICByZWd1bGFyIGZpbGUsIE1MU0QgZmFp bHMuCisgICBtZ2V0IC9tbHNkIGZvbyBiYXIgTUxTRCBUaGlzIG9uZSBpcyBwcm9ibGVtYXRpYy4g WW91J3JlIHN1cHBvc2VkIHRvIGJlCisgICBhYmxlIHRvIGdpdmUgTUdFVCBhIGxpc3QgYSBmaWxl c3BlY3M7IGluIHRoaXMgY2FzZSB3ZSBuYW1lIHR3bworICAgZGlyZWN0b3JpZXMuIFRoZSBjbGll bnQgbXVzdCBjaGFuZ2UgdGhlIHNlcnZlcidzIGRpcmVjdG9yeSB0byAiZm9vIiB0bworICAgZ2V0 IHRoZSBsaXN0IG9mIGZpbGVzLCBhbmQgdGhlbiB0aGUgZmlsZXMgdGhlbXNlbHZlcy4gQnV0IHRo ZW4gaXQgaGFzCisgICBubyB3YXkgdG8gcmV0dXJuIHRvIHRoZSBzZXJ2ZXIncyBwcmV2aW91cyBk aXJlY3RvcnkgaW4gb3JkZXIgdG8gZG8gdGhlCisgICBzYW1lIGZvciAiYmFyIiwgYXMgZXhwbGFp bmVkIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLgorICAgbWdldCAvbWxzZCAvbWF0Y2g6KiBbYWJj XSBNTFNEIFthYmNdIEluY2x1ZGluZyBhIC9NQVRDSDogc3dpdGNoIGZvcmNlcworICAgW2FiY10g dG8gYmUgc2VudCB0byB0aGUgc2VydmVyIGV2ZW4gdGhvdWdoIHRoZSBjbGllbnQgd291bGQgbm9y bWFsbHkKKyAgIHRoaW5rIGl0IHdhcyBhIHdpbGRjYXJkIGFuZCBob2xkIGl0IGZvciBsb2NhbCBp bnRlcnByZXRhdGlvbi4gSW4gdGhpcworICAgZXhhbXBsZSwgW2FiY10gbWlnaHQgYmUgYSBWTVMg ZGlyZWN0b3J5IG5hbWUuCisgICBtZ2V0IC9tbHNkIC9tYXRjaDoqIHQqLmggTUxTRCB0Ki5oIENv bnRyYXJ5IHRvIHRoZSBNTFNEIHNwZWNpZmljYXRpb24sCisgICBzb21lIE1MU0QtY2FwYWJsZSBG VFAgc2VydmVycyBkbyBpbnRlcnByZXQgd2lsZGNhcmRzLiBUaGlzIGZvcm0gb2YgdGhlCisgICBN R0VUIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgYSB3aWxkY2FyZCB0byBiZSBzZW50IHRv IHRoZSBzZXJ2ZXIKKyAgIGZvciBpbnRlcnByZXRhdGlvbi4KKworICAgV2hlbiBNTFNEIGlzIHVz ZWQgaW1wbGljaXRseSAodGhhdCBpcywgd2l0aG91dCBhbiAvTUxTRCBzd2l0Y2ggZ2l2ZW4gdG8K KyAgIGZvcmNlIHRoZSB1c2Ugb2YgTUxTRCkgYW5kIGFuIE1HRVQgY29tbWFuZCBzdWNoIGFzICJt Z2V0IGZvby8qLnR4dCIKKyAgIGZhaWxzLCBLZXJtaXQgYXV0b21hdGljYWxseSBmYWxscyBiYWNr IHRvIE5MU1QgYW5kIHRyaWVzIGFnYWluLgorCiszLjExLjUuIFJlZmVyZW5jZXMKKworICAgIDEu IFBvc3RlbCwgSi4sIGFuZCBKLiBSZXlub2xkcywgRmlsZSBUcmFuc2ZlciBQcm90b2NvbCAoRlRQ KSwgUkZDIDk1OSwKKyAgICAgICBPY3RvYmVyIDE5ODU6IFszNzJdZnRwOi8vZnRwLmlzaS5lZHUv aW4tbm90ZXMvcmZjOTU5LnR4dC4KKyAgICAyLiBIZXRobW9uLCBQLCBhbmQgUi4gRWx6LCBGZWF0 dXJlIG5lZ290aWF0aW9uIG1lY2hhbmlzbSBmb3IgdGhlIEZpbGUKKyAgICAgICBUcmFuc2ZlciBQ cm90b2NvbCwgUkZDIDIzODksIEF1Z3VzdCAxOTk4OgorICAgICAgIFszNzNdZnRwOi8vZnRwLmlz aS5lZHUvaW4tbm90ZXMvcmZjMjM4OS50eHQuCisgICAgMy4gRWx6LCBSLCBhbmQgUC4gSGV0aG1v biwgRXh0ZW5zaW9ucyB0byBGVFAsIEludGVybmV0IERyYWZ0CisgICAgICAgZHJhZnQtaWV0Zi1m dHBleHQtbWxzdC0xNi50eHQsIFNlcHRlbWJlciAyMDAyOgorICAgICAgIFszNzRdaHR0cDovL3d3 dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1mdHBleHQtbWxzdC0xNi4KKyAg ICAgICB0eHQuCisgICAgNC4gWzM3NV1UaGUgS2VybWl0IEZUUCBDbGllbnQgKG92ZXJ2aWV3KS4K KworICAgWyBbMzc2XVRvcCBdIFsgWzM3N11GVFAgVG9wIF0gWyBbMzc4XUMtS2VybWl0IEhvbWUg XSBbIFszNzldS2VybWl0IEhvbWUKKyAgIF0KKworNC4gRklMRSBTQ0FOTklORworCisgICBBIG5l dyBmZWF0dXJlIGNhbGxlZCBmaWxlIHNjYW5uaW5nIGlzIHVzZWQgaW4gdmFyaW91cyBjb250ZXh0 cyB0bworICAgZGV0ZXJtaW5lIGlmIGEgZmlsZSBpcyB0ZXh0IG9yIGJpbmFyeSwgYW5kIGlmIGl0 IGlzIHRleHQsIHdoYXQga2luZCBvZgorICAgdGV4dC4gVGhlIG92ZXJoZWFkIG9mIGZpbGUgc2Nh bm5pbmcgaXMgc3VycHJpc2luZ2x5IHRvbGVyYWJsZSwgdXN1YWxseQorICAgYWJvdXQgYSBxdWFy dGVyIHNlY29uZCBwZXIgZmlsZS4gRmlsZSBzY2FubmluZyBpcyBub3cgdXNlZCBpbnN0ZWFkIG9m CisgICBmaWxlbmFtZSBwYXR0ZXJucyB1bmxlc3MgeW91IFNFVCBGSUxFIFNDQU4gT0ZGLCB3aGlj aCByZXN0b3JlcyB0aGUKKyAgIHByZXZpb3VzIGJlaGF2aW9yLgorCisgICBUaGUgcHJpbWFyeSBi ZW5lZml0IG9mIGZpbGUgc2Nhbm5pbmcgaXMgaW4gZmlsZSB0cmFuc2Zlci4gRm9yIGFsbAorICAg cHJhY3RpY2FsIHB1cnBvc2VzLCBub3cgeW91IGNhbiBzdG9wIHdvcnJ5aW5nIGFib3V0IHdoZXRo ZXIgYSBmaWxlCisgICBzaG91bGQgYmUgc2VudCBpbiBiaW5hcnkgb3IgdGV4dCBtb2RlLCBvciBh Ym91dCBzZW5kaW5nIG1peHR1cmVzIG9mCisgICB0ZXh0IGFuZCBiaW5hcnkgZmlsZXMgaW4gYSBz aW5nbGUgb3BlcmF0aW9uLCBvciBjb25maWd1cmluZyBhbmQKKyAgIGZpbmUtdHVuaW5nIHlvdXIg bGlzdHMgb2YgYmluYXJ5LWZpbGUgYW5kIHRleHQtZmlsZSBuYW1lIHBhdHRlcm5zOiBub3cKKyAg IGl0IGFsbCBqdXN0IHdvcmtzLgorCisgICBGaWxlIHNjYW5uaW5nIGlzIGRvbmUgYnkgdGhlIGZp bGUgc2VuZGVyLCB3aGljaCBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mCisgICBlYWNoIGZpbGUgYmVm b3JlIGl0IHNlbmRzIGl0IGFuZCBpbmZvcm1zIHRoZSByZWNlaXZlciAoS2VybWl0IG9yIEZUUAor ICAgc2VydmVyKSBvZiB0aGUgdHlwZS4gRmlsZSBzY2FubmluZyBpcyBOT1QgZG9uZSBieSB0aGUg cmVjZWl2ZXIsIGJlY2F1c2UKKyAgIGl0IGlzIHRoZSBzZW5kZXIncyByZXNwb25zaWJpbGl0eSB0 byBkZXRlcm1pbmUgZWFjaCBmaWxlJ3MgdHlwZSwgc2VuZAorICAgdGhlIGZpbGUgaW4gdGhlIHJp Z2h0IG1vZGUsIGFuZCBpbmZvcm0gdGhlIHJlY2VpdmVyIG9mIHRoZSBtb2RlLiBJZgorICAgYm90 aCB0cmFuc2ZlciBwYXJ0bmVycyBhcmUgY2FwYWJsZSBvZiB0aGlzIChvciBhbnkgb3RoZXIpIGZv cm0gb2YKKyAgIGF1dG9tYXRpYyB0ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZywgdGhlbiBmaWxl cyBjYW4gYmUgc2VudCBpbiBib3RoCisgICBkaXJlY3Rpb25zIHdpdGggbm8gd29ycmllcyBhYm91 dCBjb3JydXB0aW9uIGR1ZSB0byBpbmFwcHJvcHJpYXRlCisgICB0cmFuc2ZlciBtb2RlLiAoQXMg bm90ZWQgaW4gWzM4MF1TZWN0aW9uIDMsIEZUUCBzZXJ2ZXJzIGRvbid0IGRvIHRoaXMsCisgICBz byB0aGlzIGRpc2N1c3Npb24gZG9lcyBub3QgYXBwbHkgd2hlbiB1c2luZyBLZXJtaXQgdG8gZG93 bmxvYWQgZnJvbSBhbgorICAgRlRQIHNlcnZlci4pCisKKyAgIFRoZSByZXN0IG9mIHRoaXMgc2Vj dGlvbiBpcyBtYWlubHkgZm9yIHRoZSBjdXJpb3VzLiBJZiB5b3UgZG9uJ3QgcmVhZAorICAgaXQg YW5kIHNpbXBseSBhY2NlcHQgYWxsIGRlZmF1bHRzLCBldmVyeSBmaWxlIHlvdSBzZW5kIHNob3Vs ZCBnbyBpbiB0aGUKKyAgIGFwcHJvcHJpYXRlIG1vZGUgYXV0b21hdGljYWxseS4gQXMgYWx3YXlz LCBob3dldmVyLCBmb3IgY2hhcmFjdGVyLXNldAorICAgdHJhbnNsYXRpb24gdG8gd29yayBmb3Ig Ny0gYW5kIDgtYml0IGNoYXJhY3Rlci1zZXQgZmlsZXMsIHRoZQorICAgYXBwcm9wcmlhdGUgU0VU IEZJTEUgQ0hBUkFDVEVSLVNFVCBjb21tYW5kKHMpIG11c3QgaGF2ZSBiZWVuIGV4ZWN1dGVkCisg ICB0byBpZGVudGlmeSB0aGVpciBlbmNvZGluZyAoS2VybWl0J3MgZGVmYXVsdCBmaWxlIGNoYXJh Y3Rlci1zZXQgaXMKKyAgIG5ldXRyYWwgQVNDSUkgZXhjZXB0IG9uIHBsYXRmb3JtcyBsaWtlIEhQ LVVYIG9yIERHL1VYLCB3aGVyZSB0aGUKKyAgIGRlZmF1bHQgZmlsZSBjaGFyYWN0ZXItc2V0IGlz IGtub3duKS4gQW5kIG9mIGNvdXJzZSwgcmVjZWl2aW5nIGlzCisgICBhbm90aGVyIG1hdHRlciAt LSBvYnZpb3VzbHkgdGhlIG90aGVyIEtlcm1pdCBtdXN0IGFsc28gc2VuZCBlYWNoIGZpbGUKKyAg IGluIHRoZSBhcHByb3ByaWF0ZSBtb2RlLgorCisgICBTY2FubmluZyBpcyBtb3JlIHJlbGlhYmxl IHRoYW4gZmlsZW5hbWUgcGF0dGVybnMgc2ltcGx5IGJlY2F1c2UKKyAgIGZpbGVuYW1lcyBhcmUg bm90IHJlbGlhYmxlIGluZGljYXRvcnMgb2YgdGhlIGZpbGUncyBjb250ZW50cy4gQ2xhc3NpYwor ICAgZXhhbXBsZXMgaW5jbHVkZSAiLmRvYyIgZmlsZXMsIHdoaWNoIGFyZSBiaW5hcnkgaWYgTWlj cm9zb2Z0IFdvcmQKKyAgIGRvY3VtZW50cyBidXQgdGV4dCBvbiBtb3N0IG90aGVyIHBsYXRmb3Jt cywgYW5kICIuY29tIiBmaWxlcywgd2hpY2ggYXJlCisgICBiaW5hcnkgb24gRE9TIGFuZCBXaW5k b3dzIGJ1dCB0ZXh0IG9uIFZNUy4gQW55d2F5LCBub2JvZHkga25vd3MgdGhlCisgICBuYW1pbmcg Y29udmVudGlvbnMgKGlmIGFueSkgb2YgYWxsIHRoZSBhcHBsaWNhdGlvbnMgKGFuZCBwZXJzb25z ISkgb24KKyAgIHlvdXIgY29tcHV0ZXIuIFNjYW5uaW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGV0 ZXJtaW5lcyBlYWNoIGZpbGUncyB0eXBlCisgICBieSBpbnNwZWN0aW5nIGl0cyBjb250ZW50cyBy YXRoZXIgdGhhbiBqdXN0IGxvb2tpbmcgYXQgaXRzIG5hbWUuCisKKyAgIEFsc28sIGZpbGUgcGF0 dGVybnMgLS0gZXZlbiB3aGVuIHRoZXkgd29yayBhcyBpbnRlbmRlZCAtLSBjYXRlZ29yaXplCisg ICBlYWNoIGZpbGUgb25seSBhcyB0ZXh0IG9yIGJpbmFyeSwgd2hlcmVhcyBmaWxlIHNjYW5uaW5n IGNhbiBtYWtlIGZpbmVyCisgICBkaXN0aW5jdGlvbnM6CisKKyAgIEJJTkFSWQorICAgICAgICAg IEJpbmFyeSBkYXRhLCBub3QgdG8gYmUgY29udmVydGVkIGluIGFueSB3YXkuIEV4YW1wbGVzIGlu Y2x1ZGUKKyAgICAgICAgICBiaW5hcnkgbWFjaGluZSBjb2RlIChleGVjdXRhYmxlIHByb2dyYW1z KSwgZ3JhcGhpY3MgaW1hZ2VzIChHSUYsCisgICAgICAgICAgSlBHLCBldGMpLCBjb21wcmVzc2Vk IGZpbGVzIChaLCBHWiwgZXRjKSwgYXJjaGl2ZXMgYW5kIHBhY2thZ2VzCisgICAgICAgICAgKFpJ UCwgVEFSLCBSUE0sIGV0YyksIG9iamVjdCBmaWxlcyBhbmQgbGlicmFyaWVzIChPQkosIERMTCwK KyAgICAgICAgICBldGMpLgorCisgICA3LUJJVCBURVhUCisgICAgICAgICAgVGV4dCBlbmNvZGVk IGluIGEgNy1iaXQgY2hhcmFjdGVyIHNldCBzdWNoIGFzIEFTQ0lJIG9yIG9uZSBvZgorICAgICAg ICAgIHRoZSBJU08gNjQ2IG5hdGlvbmFsIHZlcnNpb25zLiBLZXJtaXQgaGFzIG5vIHdheSB0byB0 ZWxsIHdoaWNoCisgICAgICAgICAgY2hhcmFjdGVyIGlzIHVzZWQsIG9ubHkgdGhhdCBpdCdzIDct Yml0IHRleHQuIFR5cGljYWwgZXhhbXBsZXMKKyAgICAgICAgICBpbmNsdWRlIHByb2dyYW0gc291 cmNlIGNvZGUsIFJFQURNRSBmaWxlcywgUGVybCBvciBLZXJtaXQKKyAgICAgICAgICBzY3JpcHRz LCBwbGFpbi10ZXh0IGVtYWlsLCBIVE1MLCBUZVgsIGFuZCB2YXJpb3VzIHRleHR1YWwKKyAgICAg ICAgICBlbmNvZGluZ3Mgb2YgYmluYXJ5IGZpbGVzOiBIZXgsIEJhc2U2NCwgZXRjLiBXaGVuIHNl bmRpbmcgc3VjaAorICAgICAgICAgIGZpbGVzLCB0aGUgRklMRSBERUZBVUxUIDdCSVQtQ0hBUkFD VEVSLVNFVCBpcyB1c2VkIGFzIHRoZSBmaWxlCisgICAgICAgICAgY2hhcmFjdGVyLXNldCwgYW5k IHRoZW4gdGhlIGFwcHJvcHJpYXRlIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQKKyAgICAgICAgICBp cyBjaG9zZW4gZnJvbSB0aGUgYXNzb2NpYXRpb25zIGxpc3QgKEFTU09DSUFURSwgU0hPVworICAg ICAgICAgIEFTU09DSUFUSU9OUykuCisKKyAgIDgtQklUIFRFWFQKKyAgICAgICAgICBUZXh0IGVu Y29kZWQgaW4gYW4gOC1iaXQgY2hhcmFjdGVyIHNldCBzdWNoIGFzIExhdGluLTEsIExhdGluLTIs CisgICAgICAgICAgTGF0aW4vSGVicmV3LCBMYXRpbi9DeXJpbGxpYywgS09JOCwgSFAtUm9tYW44 LCBKSVMgWCAwMjA4LCBDb2RlCisgICAgICAgICAgUGFnZSA0MzcsIG9yIENvZGUgUGFnZSAxMjUy LiBBZ2FpbiwgS2VybWl0IGhhcyBubyB3YXkgb2Yga25vd2luZworICAgICAgICAgIHdoaWNoIHBh cnRpY3VsYXIgc2V0IGlzIGluIHVzZSwgb25seSB0aGF0IGl0J3MgOC1iaXQgdGV4dC4gV2hlbgor ICAgICAgICAgIHNlbmRpbmcgc3VjaCBmaWxlcywgdGhlIEZJTEUgREVGQVVMVCA4QklULUNIQVJB Q1RFUi1TRVQgaXMgdXNlZAorICAgICAgICAgIGFzIHRoZSBmaWxlIGNoYXJhY3Rlci1zZXQsIGFu ZCB0aGVuIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2ZlcgorICAgICAgICAgIGNoYXJhY3RlciBzZXQg aXMgY2hvc2VuIGZyb20gdGhlIGFzc29jaWF0aW9ucyBsaXN0LgorCisgICBVQ1MyIFRFWFQKKyAg ICAgICAgICBVbmljb2RlIGluIGl0cyBiYXNpYyBmb3JtLCAxNiBiaXRzICgyIG9jdGV0cykgcGVy IGNoYXJhY3Rlci4KKyAgICAgICAgICBXaGVuIHNlbmRpbmcgc3VjaCBmaWxlcywgVUNTMiBpcyB0 aGUgZmlsZSBjaGFyYWN0ZXItc2V0IGFuZCB0aGUKKyAgICAgICAgICBieXRlIG9yZGVyIGlzIGlk ZW50aWZpZWQgYXV0b21hdGljYWxseTsgdGhlIGFwcHJvcHJpYXRlIHRyYW5zZmVyCisgICAgICAg ICAgY2hhcmFjdGVyIHNldCBpcyBjaG9zZW4gZnJvbSB0aGUgYXNzb2NpYXRpb25zIGxpc3QuIE5v cm1hbGx5CisgICAgICAgICAgdGhpcyB3b3VsZCBiZSBVVEY4LiBVVEYtMTYgaXMgbm90IHN1cHBv cnRlZCB5ZXQ7IEtlcm1pdCdzCisgICAgICAgICAgVW5pY29kZSB0cmFuc2xhdGlvbnMgYXJlIHJl c3RyaWN0ZWQgdG8gUGxhbmUgMCwgdGhlIEJhc2UKKyAgICAgICAgICBNdWx0aWxpbmd1YWwgUGxh bmUgKEJNUCkuCisKKyAgIFVURjggVEVYVAorICAgICAgICAgIFVuaWNvZGUgaW4gaXRzIDgtYml0 IHRyYW5zZm9ybWF0aW9uIGZvcm1hdC4gV2hlbiBzZW5kaW5nIHN1Y2gKKyAgICAgICAgICBmaWxl cywgVVRGOCBpcyB0aGUgZmlsZSBjaGFyYWN0ZXItc2V0OyB0aGUgYXBwcm9wcmlhdGUgdHJhbnNm ZXIKKyAgICAgICAgICBjaGFyYWN0ZXIgc2V0IGlzIGNob3NlbiBmcm9tIHRoZSBhc3NvY2lhdGlv bnMgbGlzdCwgbm9ybWFsbHkKKyAgICAgICAgICBVQ1MyIG9yIFVURjguCisKKyAgIEZpbGUgc2Nh bm5pbmcgaXMgYXZhaWxhYmxlIGluIFVOSVggQy1LZXJtaXQsIGluIEstOTUsIGFuZCB0byBhIGxp bWl0ZWQKKyAgIGV4dGVudCwgaW4gVk1TIEMtS2VybWl0IChmdWxsIHNjYW5uaW5nIGlzIHByb2Js ZW1hdGljIGluIFZNUyBiZWNhdXNlCisgICBldmVuIHBsYWluLXRleHQgZmlsZXMgbWlnaHQgY29u dGFpbiBiaW5hcnkgcmVjb3JkLWZvcm1hdCBpbmZvcm1hdGlvbikuCisgICBUaGUgcmVsZXZhbnQg Y29tbWFuZHMgYXJlOgorCisgICBTRVQgVFJBTlNGRVIgTU9ERSB7IEFVVE9NQVRJQywgTUFOVUFM IH0KKyAgICAgICAgICBUZWxscyB3aGV0aGVyIHRoZSBmaWxlLXRyYW5zZmVyIG1vZGUgKHRleHQg b3IgYmluYXJ5KSBzaG91bGQgYmUKKyAgICAgICAgICBzZXQgYnkgYXV0b21hdGljIG9yICJtYW51 YWwiIG1lYW5zLiBBVVRPTUFUSUMgaXMgdGhlIGRlZmF1bHQsCisgICAgICAgICAgd2hpY2ggYWxs b3dzIGFueSBvZiB0aGUgYXV0b21hdGljIG1ldGhvZHMgdGhhdCBhcmUgZW5hYmxlZCB0byBkbwor ICAgICAgICAgIHRoZWlyIGpvYnM6IEZJTEUgU0NBTiwgRklMRSBQQVRURVJOUywgcGVlciByZWNv Z25pdGlvbiwgZXRjLgorICAgICAgICAgIE1BTlVBTCBsZXRzIHlvdSBjb250cm9sIHRoZSB0cmFu c2ZlciBtb2RlIHdpdGggdGhlIFNFVCBGSUxFIFRZUEUKKyAgICAgICAgICBjb21tYW5kcy4gQXMg YWx3YXlzLCAvVEVYVCBhbmQgL0JJTkFSWSBzd2l0Y2hlcyBvbiB5b3VyCisgICAgICAgICAgZmls ZS10cmFuc2ZlciBjb21tYW5kcyBvdmVycmlkZSBhbGwgb3RoZXIgbWV0aG9kczsgaWYgeW91IGdp dmUKKyAgICAgICAgICBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMsIHNjYW5uaW5nIGlzIG5vdCBkb25l LiBTSE9XIFRSQU5TRkVSCisgICAgICAgICAgZGlzcGxheXMgdGhlIGN1cnJlbnQgVFJBTlNGRVIg TU9ERSBzZXR0aW5nLgorCisgICBTRVQgRklMRSBTQ0FOIHsgT04gWyBudW1iZXIgXSwgT0ZGIH0K KyAgICAgICAgICBUdXJucyB0aGlzIGZlYXR1cmUgb24gYW5kIG9mZi4gSXQncyBPTiBieSBkZWZh dWx0LiBXaGVuIE9GRiwgdGhlCisgICAgICAgICAgcHJldmlvdXMgcnVsZXMgYXBwbHkgKFNFVCBG SUxFIFBBVFRFUk5TLCBldGMpLiBXaGVuIE9OIGlzIGdpdmVuLAorICAgICAgICAgIHlvdSBjYW4g YWxzbyBzcGVjaWZ5IGEgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHNjYW5uZWQuIFRoZQorICAgICAg ICAgIGRlZmF1bHQgaXMgNDkxNTIgKD0gNDhLKS4gSWYgYSBuZWdhdGl2ZSBudW1iZXIgaXMgZ2l2 ZW4sIHRoZQorICAgICAgICAgIGVudGlyZSBmaWxlIGlzIHNjYW5uZWQsIG5vIG1hdHRlciBob3cg YmlnLCBmb3IgbWF4aW11bSBjZXJ0YWludHkKKyAgICAgICAgICAoZm9yIGV4YW1wbGUsIGEgUG9z dFNjcmlwdCBmaWxlIHRoYXQgYXBwZWFycyB0byBiZSBwbGFpbiB0ZXh0CisgICAgICAgICAgbWln aHQgaW5jbHVkZSBhbiBlbWJlZGRlZCBncmFwaGljIHBhc3QgdGhlIG5vcm1hbCBzY2FubmluZwor ICAgICAgICAgIGxpbWl0KS4gU0hPVyBGSUxFIGRpc3BsYXlzIHRoZSBjdXJyZW50IEZJTEUgU0NB TiBzZXR0aW5nLgorCisgICBTRVQgRklMRSBERUZBVUxUIDdCSVQtQ0hBUkFDVEVSLVNFVCBuYW1l CisgICAgICAgICAgVGVsbHMgdGhlIDctYml0IGNoYXJhY3Rlci1zZXQgdG8gdXNlIGlmIHNjYW5u aW5nIGlkZW50aWZpZXMgYQorICAgICAgICAgIDctYml0IHRleHQgZmlsZSwgZS5nLiBHRVJNQU4u IFNIT1cgRklMRSBkaXNwbGF5cyB0aGUgY3VycmVudCBTRVQKKyAgICAgICAgICBGSUxFIERFRkFV TFQgc2V0dGluZ3MuIFNvIGRvZXMgU0hPVyBDSEFSQUNURVItU0VUUy4KKworICAgU0VUIEZJTEUg REVGQVVMVCA4QklULUNIQVJBQ1RFUi1TRVQgbmFtZQorICAgICAgICAgIFRlbGxzIHRoZSA4LWJp dCBjaGFyYWN0ZXItc2V0IHRvIHVzZSBpZiBzY2FubmluZyBpZGVudGlmaWVzIGFuCisgICAgICAg ICAgOC1iaXQgdGV4dCBmaWxlLCBlLmcuIExBVElOMS4gU0hPVyBGSUxFIGFuZCBTSE9XIENIQVJB Q1RFUi1TRVQKKyAgICAgICAgICBkaXNwbGF5IHRoaXMuCisKKyAgIEFTU09DSUFURSBGSUxFLUNI QVJBQ1RFUi1TRVQgZmNzIHRjcworICAgICAgICAgIFdoZW4gc2VuZGluZyBmaWxlcyBhbmQgYSBm aWxlIGNoYXJhY3Rlci1zZXQgKGZjcykgaXMgaWRlbnRpZmllZAorICAgICAgICAgIGJ5IHNjYW5u aW5nLCB0aGlzIHRlbGxzIEMtS2VybWl0IHdoaWNoIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQKKyAg ICAgICAgICAodGNzKSB0byB0cmFuc2xhdGUgaXQgdG8uIEl0IGFsc28gYWxsb3dzIEMtS2VybWl0 IHRvIHNldCB0aGUKKyAgICAgICAgICBhcHByb3ByaWF0ZSB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0 IGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgeW91CisgICAgICAgICAgZ2l2ZSBhIFNFVCBGSUxFIENI QVJBQ1RFUi1TRVQgY29tbWFuZC4KKworICAgQVNTT0NJQVRFIFRSQU5TRkVSLUNIQVJBQ1RFUi1T RVQgdGNzIGZjcworICAgICAgICAgIFdoZW4gcmVjZWl2aW5nIGZpbGVzIGFuZCBhIGZpbGUgYXJy aXZlcyB3aG9zZSB0cmFuc2ZlcgorICAgICAgICAgIGNoYXJhY3Rlci1zZXQgKHRjcykgaXMgYW5u b3VuY2VkIGJ5IHRoZSBzZW5kZXIsIHRoaXMgY29tbWFuZAorICAgICAgICAgIHRlbGxzIEMtS2Vy bWl0IHdoaWNoIGZpbGUgY2hhcmFjdGVyLXNldCAoZmNzKSB0byB0cmFuc2xhdGUgaXQKKyAgICAg ICAgICB0by4gSXQgYWxzbyBhbGxvd3MgQy1LZXJtaXQgdG8gc2V0IHRoZSBhcHByb3ByaWF0ZSBm aWxlCisgICAgICAgICAgY2hhcmFjdGVyLXNldCB3aGVuZXZlciB5b3UgZ2l2ZSBhIFNFVCBUUkFO U0ZFUiBDSEFSQUNURVItU0VUCisgICAgICAgICAgY29tbWFuZC4KKworICAgU0VUIEZJTEUgQ0hB UkFDVEVSLVNFVCBuYW1lCisgICAgICAgICAgV2hlbiBnaXZlbiBmb3IgYSA3LWJpdCBzZXQsIGFs c28gc2V0cyBGSUxFIERFRkFVTFQKKyAgICAgICAgICA3QklULUNIQVJBQ1RFUi1TRVQgdG8gdGhl IHNhbWUgc2V0LiBXaGVuIGdpdmVuIGZvciBhbiA4LWJpdCBzZXQsCisgICAgICAgICAgYWxzbyBz ZXRzIEZJTEUgREVGQVVMVCA4QklULUNIQVJBQ1RFUi1TRVQgdG8gdGhlIHNhbWUgc2V0LiBJZiBh bgorICAgICAgICAgIEFTU09DSUFURSBGSUxFLUNIQVJBQ1RFUi1TRVQgY29tbWFuZCBoYXMgYmVl biBnaXZlbiBmb3IgdGhpcworICAgICAgICAgIHNldCwgYWxzbyBzZXRzIHRoZSBjb3JyZXNwb25k aW5nIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQuCisKKyAgIERJUkVDVE9SWSAvWEZFUk1PREUgWyBm aWxlc3BlYyBdCisgICAgICAgICAgUGVyZm9ybXMgYSBmaWxlIHNjYW4gb2YgdGhlIGdpdmVuIGZp bGVzLCBsaXN0aW5nIHRoZSByZXN1bHQgZm9yCisgICAgICAgICAgZWFjaCBmaWxlLiBJZiBGSUxF IFNDQU4gaXMgT0ZGIGJ1dCBQQVRURVJOUyBhcmUgT04sIHRoZSByZXN1bHQKKyAgICAgICAgICBz aG93biBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgRklMRSBURVhULVBBVFRFUk5TIGFuZAorICAg ICAgICAgIEJJTkFSWS1QQVRURVJOUywgYW5kIGFyZSByZXN0cmljdGVkIHRvIChCKSBhbmQgKFQp LiBXaGVuIEZJTEUKKyAgICAgICAgICBTQ0FOIGlzIE9OLCB0aGUgcmVzdWx0cyBhcmU6CisKKyAg KEIpICAgICAgICAgIEJpbmFyeQorICAoVCkoN0JJVCkgICAgVGV4dDogNy1iaXQKKyAgKFQpKDhC SVQpICAgIFRleHQ6IDgtYml0CisgIChUKShVVEY4KSAgICBUZXh0OiBVbmljb2RlIFVURjgKKyAg KFQpKFVDUzJCRSkgIFRleHQ6IFVuaWNvZGUgVUNTMiBCaWcgRW5kaWFuCisgIChUKShVQ1MyTEUp ICBUZXh0OiBVbmljb2RlIFVDUzIgTGl0dGxlIEVuZGlhbgorCisgICAgICAgICAgU28geW91IGNh biB1c2UgRElSIC9YRkVSIHRvIGdldCBhIHByZXZpZXcgb2YgaG93IGVhY2ggZmlsZSBpbiBhCisg ICAgICAgICAgc2VsZWN0ZWQgZ3JvdXAgd2lsbCBiZSB0cmFuc2ZlcnJlZC4gRXZlcnl0aGluZyB0 byB0aGUgcmlnaHQgb2YKKyAgICAgICAgICB0aGUgKEIpIG9yIChUKSBpcyBuZXcuIElmIEZJTEUg U0NBTiBpcyBPRkYsIHlvdSBvbmx5IGdldCB0aGUgKEIpCisgICAgICAgICAgb3IgKFQpIGFzIGJl Zm9yZS4KKworICAgICAgICAgIE5vdGU6IEJpZyBhbmQgTGl0dGxlIEVuZGlhbiByZWZlciB0byB0 aGUgb3JkZXJpbmcgb2YgYnl0ZXMKKyAgICAgICAgICB3aXRoaW4gYSBjb21wdXRlciB3b3JkLiBC aWcgRW5kaWFuIGFyY2hpdGVjdHVyZSBpcyBzdGFuZGFyZCBhbmQKKyAgICAgICAgICBpcyB1c2Vk IG9uIG1vc3Qgbm9uLVBDIGNvbXB1dGVycy4gTGl0dGxlIEVuZGlhbiBhcmNoaXRlY3R1cmUgaXMK KyAgICAgICAgICB1c2VkIG9uIFBDcy4KKworICAgVG8gaWxsdXN0cmF0ZSBmaWxlLXRyYW5zZmVy IHdpdGggc2Nhbm5pbmcsIHN1cHBvc2UgeW91IGhhdmUgYSBkaXJlY3RvcnkKKyAgIGNvbnRhaW5p bmcgYSBtaXh0dXJlIG9mIHRleHQgYW5kIGJpbmFyeSBmaWxlcywgYW5kIGVhY2ggdGV4dCBmaWxl IGNhbgorICAgYmUgNy1iaXQgR2VybWFuIElTTyA2NDYsIDgtYml0IExhdGluLTEsIG9yIFVuaWNv ZGUgaW4gYW55IG9mIHRoZQorICAgZm9sbG93aW5nIGZvcm1zOiBVQ1MyIExpdHRsZSBFbmRpYW4s IFVDUzIgQmlnIEVuZGlhbiwgb3IgVVRGOAorICAgKFszODFdVVRGLTE2IGlzIG5vdCBzdXBwb3J0 ZWQgeWV0KS4gQXNzdW1pbmcgYWxsIHRoZSBidWlsdC1pbiBkZWZhdWx0cworICAgYXJlIGluIGVm ZmVjdCwgdGhlIGZvbGxvd2luZyB0aHJlZSBjb21tYW5kcyBkbyB0aGUgam9iOgorCisgIHNldCBm aWxlIGNoYXIgZ2VybWFuICAgOyBUaGlzIHNldHMgdGhlIGRlZmF1bHQgZm9yIDctYml0IHRleHQg ZmlsZXMKKyAgc2V0IGZpbGUgY2hhciBsYXRpbjEgICA7IFRoaXMgc2V0cyB0aGUgZGVmYXVsdCBm b3IgOC1iaXQgdGV4dCBmaWxlcworICBzZW5kICoKKworICAgRWFjaCBmaWxlIGlzIHNlbnQgaW4g dGhlIGFwcHJvcHJpYXRlIG1vZGUgKHRleHQgb3IgYmluYXJ5KSwgd2l0aCB0ZXh0CisgICBmaWxl cyBjb252ZXJ0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgYW5k IGxhYmVsZWQKKyAgIHNvIHRoZSByZWNlaXZlciBjYW4gY29udmVydCB0aGVtIGFjY29yZGluZyB0 byBpdHMgb3duIGxvY2FsCisgICBjb252ZW50aW9ucy4KKworICAgQnkgdGhlIHdheSwgd2hhdCBp ZiB5b3Ugd2FudCB0byBpbmhpYml0IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gYnV0CisgICBz dGlsbCBhbGxvdyBhdXRvbWF0aWMgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmc/IFByZXZpb3Vz bHksIHlvdSBjb3VsZAorICAgc2ltcGx5IFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIFRSQU5T UEFSRU5ULiBCdXQgbm93IHdpdGggZmlsZQorICAgc2Nhbm5pbmcsIHRoZSBmaWxlIGFuZCB0cmFu c2ZlciBjaGFyYWN0ZXItc2V0cyBhcmUgc2V0IGF1dG9tYXRpY2FsbHkKKyAgIHBlciBmaWxlLiBB IG5ldyBjb21tYW5kIHdhcyBhZGRlZCBmb3IgdGhpcyBwdXJwb3NlOgorCisgICBTRVQgVFJBTlNG RVIgVFJBTlNMQVRJT04geyBPTiwgT0ZGIH0KKyAgICAgICAgICBFbmFibGVzIGFuZCBkaXNhYmxl cyBmaWxlLXRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24uIEl0CisgICAgICAgICAg aXMgZW5hYmxlZCBieSBkZWZhdWx0LgorCisgICBXaGVuIFRSQU5TRkVSIFRSQU5TTEFUSU9OIGlz IE9GRiBidXQgRklMRSBTQ0FOIGlzIE9OLCBmaWxlcyBhcmUgc3RpbGwKKyAgIHNjYW5uZWQgdG8g c2VlIGlmIHRoZXkgYXJlIHRleHQgb3IgYmluYXJ5LCBidXQgbm8gY2hhcmFjdGVyLXNldAorICAg dHJhbnNsYXRpb24gaXMgZG9uZSB3aGVuIHRoZXkgdGV4dDogb25seSB0aGUgbm9ybWFsIHJlY29y ZC1mb3JtYXQKKyAgIGNvbnZlcnNpb24uCisKKyAgIExpa2UgYWxsIFNFVCBjb21tYW5kcywgU0VU IFRSQU5TRkVSIFRSQU5TTEFUSU9OIGlzIGdsb2JhbCBhbmQKKyAgIHBlcnNpc3RlbnQuIFlvdSBj YW4gYWxzbyBmb3JjZSBhIHBhcnRpY3VsYXIgZmlsZS10cmFuc2ZlciBjb21tYW5kCisgICAoU0VO RCwgTVNFTkQsIEdFVCwgUkVDRUlWRSwgVFJBTlNNSVQsIGV0YykgdG8gbm90IHRyYW5zbGF0ZSB3 aXRob3V0CisgICBhZmZlY3RpbmcgdGhlIGdsb2JhbCB0cmFuc2xhdGlvbiBzZXR0aW5ncyBieSBp bmNsdWRpbmcgdGhlIG5ldworICAgL1RSQU5TUEFSRU5UIHN3aXRjaCwgZS5nLgorCisgIHNlbmQg L3RyYW5zcGFyZW50IG9vZmEudHh0CisKKyAgIEFzIG9mIEMtS2VybWl0IDguMC4yMDYsIFNFVCBU UkFOU0ZFUiBDSEFSQUNURVItU0VUIFRSQU5TUEFSRU5UIGltcGxpZXMKKyAgIFNFVCBUUkFOU0ZF UiBUUkFOU0xBVElPTiBPRkYuCisKKyAgIEZpbGUgc2Nhbm5pbmcgaXMgYWxzbyB1c2VkIGluIHRo ZSBUWVBFIGNvbW1hbmQuIFRoZSBzb3VyY2UgZmlsZSB0eXBlCisgICBhbmQgY2hhcmFjdGVyIHNl dCBhcmUgZGV0ZXJtaW5lZCBhcyBhYm92ZSwgYW5kIHRoZW4gdGhlIGZpbGUgaXMKKyAgIGF1dG9t YXRpY2FsbHkgY29udmVydGVkIHRvIHlvdXIgZGlzcGxheSBjaGFyYWN0ZXItc2V0LCBsaW5lIGJ5 IGxpbmUuIEluCisgICBLZXJtaXQgOTUsIHRoZSBkaXNwbGF5IGNoYXJhY3Rlci1zZXQgaXMgVW5p Y29kZSwgcGVyaGFwcyBjb252ZXJ0ZWQgdG8KKyAgIHlvdXIgY3VycmVudCBjb25zb2xlIGNvZGUg cGFnZTsgaW4gb3RoZXIgdmVyc2lvbnMgb2YgQy1LZXJtaXQsIGl0IGlzCisgICB5b3VyIGN1cnJl bnQgZmlsZSBjaGFyYWN0ZXItc2V0LiBUaHVzIGlmIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgc2V0 CisgICBhcHByb3ByaWF0ZWx5OgorCisgIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgKG5lY2Vzc2Fy eSBpbiBVbml4IGJ1dCBub3QgSzk1KQorICBTRVQgRklMRSBERUZBVUxUIDdCSVQgQ0hBUkFDVEVS LVNFVAorICBTRVQgRklMRSBERUZBVUxUIDhCSVQgQ0hBUkFDVEVSLVNFVAorCisgICB0aGVuIHlv dSBzaG91bGQgYmUgYWJsZSB0byBUWVBFIGFueSB0ZXh0IGZpbGUgYW5kIHNlZSBzb21ldGhpbmcK KyAgIHJlYXNvbmFibGUuIEZvciBleGFtcGxlLCBpbiBVbml4LCBpZiB5b3VyIERFRkFVTFQgN0JJ VC1DSEFSQUNURVItU0VUIGlzCisgICBJVEFMSUFOIGFuZCB5b3VyIERFRkFVTFQgOEJJVC1DSEFS QUNURVItU0VUIGlzIExBVElOMSwgYW5kIHlvdXIgRklMRQorICAgQ0hBUkFDVEVSLVNFVCBpcyBM QVRJTjEsIHlvdSBjYW4gVFlQRSBhbiBJdGFsaWFuIElTTyA2NDYgZmlsZSwgYQorICAgTGF0aW4t MSBmaWxlLCBvciBhbnkga2luZCBvZiBVbmljb2RlIGZpbGUsIGFuZCBoYXZlIGl0IHRyYW5zbGF0 ZWQKKyAgIGF1dG9tYXRpY2FsbHkgdG8gTGF0aW4tMSBmb3IgeW91ciBkaXNwbGF5LgorCisgICBJ biB0aGUgR1VJIHZlcnNpb24gb2YgS2VybWl0IDk1LCB5b3UgY2FuIHNlZSBtaXh0dXJlcyBvZiBt YW55IGRpZmZlcmVudAorICAgc2NyaXB0cyBpZiB0aGUgZmlsZSBpcyBVVEY4IG9yIFVDUzI6IFJv bWFuLCBDeXJpbGxpYywgSGVicmV3LCBHcmVlaywKKyAgIEFybWVuaWFuLCBHZW9yZ2lhbiwgZXRj LCBhbGwgb24gdGhlIHNhbWUgc2NyZWVuIGF0IG9uY2UuCisKKyAgIEZpbGUgc2Nhbm5pbmcgYWxz byBhZGRzIGEgbmV3IGNyaXRlcmlvbiBmb3IgZmlsZSBzZWxlY3Rpb24sIGkuZS4gdG8KKyAgIHNl bGVjdCBvbmx5IHRleHQgKG9yIGJpbmFyeSkgZmlsZXMuIFNldmVyYWwgY29tbWFuZHMgbm93IGlu Y2x1ZGUgYSBuZXcKKyAgIHN3aXRjaCwgL1RZUEU6e0JJTkFSWSxURVhULEFMTH0uIEJJTkFSWSBt ZWFucyBzZWxlY3Qgb25seSBiaW5hcnkKKyAgIHJlZ3VsYXIgZmlsZXMgKG5vdCBkaXJlY3Rvcmll cykuIFRFWFQgbWVhbnMgc2VsZWN0IG9ubHkgdGV4dCBmaWxlcy4gQUxMCisgICBtZWFucyBkb24n dCBzY2FuOyBzZWxlY3QgYWxsIGZpbGVzLiBFeGFtcGxlczoKKworICAgU0VORCAvVFlQRTpCSU5B UlkgKi4qCisgICAgICAgICAgU2VuZHMgb25seSBiaW5hcnkgZmlsZXMsIHNraXBwaW5nIG92ZXIg dGV4dCBmaWxlcy4KKworICAgTk9URTogRmlsZSBzY2FubmluZyBpcyBOT1QgZG9uZSB3aGVuIHVz aW5nIGV4dGVybmFsIHByb3RvY29scyAoYmVjYXVzZQorICAgdGhlIGV4dGVybmFsIHByb3RvY29s IHByb2dyYW1zLCBzdWNoIGFzIHN6LCBhcmUgcHJvY2Vzc2luZyBlYWNoIGZpbGUsCisgICBub3Qg S2VybWl0KS4KKworICAgRElSRUNUT1JZIC9UWVBFOlRFWFQKKyAgICAgICAgICBMaXN0cyBvbmx5 IHRleHQgZmlsZXMgYnV0IG5vdCBiaW5hcnkgZmlsZXMuCisKKyAgIERFTEVURSAvVFlQRTpCSU5B UlkgZm9vLioKKyAgICAgICAgICBEZWxldGVzIGFsbCBmb28uKiBmaWxlcyB0aGF0IGFyZSByZWd1 bGFyIGJpbmFyeSBmaWxlcyBidXQgZG9lcworICAgICAgICAgIG5vdCBkZWxldGUgYW55IHRleHQg ZmlsZXMuCisKKyAgIENITU9EIC9UWVBFOkJJTkFSWSA3NzUgKgorICAgICAgICAgIChVTklYKSBD aGFuZ2VzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbGwgYmluYXJ5IGZpbGVzIHRvIDc3NS4KKworICAg V2hlbiBGSUxFIFNDQU4gaXMgT0ZGIGFuZCBGSUxFIFBBVFRFUk5TIGFyZSBPTiwgYmVoYXZpb3Ig aXMgYXMgYmVmb3JlCisgICB3aXRoIFBBVFRFUk5TIE9OLCBidXQgd2l0aCBzb21lIGltcHJvdmVt ZW50czoKKworICAgICAqIFBhdGhuYW1lcyBhcmUgbm93IHN0cmlwcGVkIHByaW9yIHRvIHBhdHRl cm4gbWF0Y2hpbmcuCisgICAgICogQmFja3VwIHN1ZmZpeGVzIChsaWtlIC5+M34pIGFyZSBzdHJp cHBlZCBwcmlvciB0byBwYXR0ZXJuIG1hdGNoaW5nLgorCisgICBbIFszODJdVG9wIF0gWyBbMzgz XUNvbnRlbnRzIF0gWyBbMzg0XUMtS2VybWl0IEhvbWUgXSBbIFszODVdS2VybWl0CisgICBIb21l IF0KKworNS4gRklMRSBBTkQgRElSRUNUT1JZIE5BTUVTIENPTlRBSU5JTkcgU1BBQ0VTCisKKyAg IFByaW9yIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGdyYXBoaWNhbCB1c2VyIGludGVyZmFj ZSAoR1VJKSwgaXQgd2FzCisgICBpbmNvbmNlaXZhYmxlIHRoYXQgZmlsZSBvciBkaXJlY3Rvcnkg bmFtZXMgY291bGQgY29udGFpbiBzcGFjZXMsCisgICBiZWNhdXNlIHNwYWNlIGlzIGEgZmllbGQg ZGVsaW1pdGVyIGluIGFsbCBjb21tYW5kIGxhbmd1YWdlcy4gR1VJcywKKyAgIGhvd2V2ZXIsIHVz ZSBkaWFsb2cgYm94ZXMgZm9yIGZpbGVuYW1lcywgc28gdGhlcmUgaXMgbmV2ZXIgYW55IHF1ZXN0 aW9uCisgICBvZiBkaXN0aW5ndWlzaGluZyBhIGZpbGVuYW1lIGZyb20gYWRqYWNlbnQgZmllbGRz IC0tIGJlY2F1c2UgdGhlcmUgYXJlCisgICBubyBhZGphY2VudCBmaWVsZHMgLS0gYW5kIHRoZXJl Zm9yZSBpdCBoYXMgYmVjb21lIHF1aXRlIGNvbW1vbiBvbgorICAgY29tcHV0ZXJzIHRoYXQgaGF2 ZSBHVUlzIHRvIGhhdmUgZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWVzIGNvbXBvc2VkIG9mCisgICBt dWx0aXBsZSB3b3Jkcy4gT2YgY291cnNlIHRoaXMgcG9zZXMgcHJvYmxlbXMgZm9yIGNvbW1hbmQg c2hlbGxzIGFuZAorICAgb3RoZXIgdGV4dC1vcmllbnRlZCBwcm9ncmFtcy4KKworICAgTW9zdCBj b21tYW5kIHNoZWxscyBhZGRyZXNzIHRoZXNlIHByb2JsZW1zIGJ5IGFsbG93aW5nIHN1Y2ggbmFt ZXMgdG8gYmUKKyAgIGVuY2xvc2VkIGluIGRvdWJsZXF1b3RlcywgZS5nLjoKKworICBjZCAiYzpc UHJvZ3JhbSBGaWxlcyIKKworICAgQy1LZXJtaXQgcHJldmlvdXNseSB1c2VkIGJyYWNlcyBmb3Ig dGhpczoKKworICBjZCB7YzpcUHJvZ3JhbSBGaWxlc30KKworICAgd2hpY2ggd2FzIG5vdCB3aGF0 IG1vc3QgcGVvcGxlIGV4cGVjdGVkLiBBbmQgZXZlbiB3aGVuIGJyYWNlcyB3ZXJlCisgICB1c2Vk LCBLZXJtaXQgaGFkIGRpZmZpY3VsdGllcyB3aXRoIGNvbXBsZXRpb24sIGZpbGUgbWVudXMsIGFu ZCBzbworICAgZm9ydGgsIHdpdGhpbiBicmFjZWQgZmllbGRzLgorCisgICBDLUtlcm1pdCA4LjAg YWxsb3dzIGVpdGhlciBkb3VibGVxdW90ZXMgb3IgYnJhY2VzIHRvIGJlIHVzZWQgZm9yCisgICBn cm91cGluZzoKKworICBzZW5kICJ0aGlzIGZpbGUiCisgIHNlbmQge3RoaXMgZmlsZX0KKyAgcmVu YW1lICJ0aGlzIGZpbGUiICJ0aGF0IGZpbGUiCisgIHJlbmFtZSB7dGhpcyBmaWxlfSAidGhhdCBm aWxlIgorICByZW5hbWUgInRoaXMgZmlsZSIge3RoYXQgZmlsZX0KKyAgY2Qge1Byb2dyYW0gRmls ZXN9CisgIGNkICJQcm9ncmFtIEZpbGVzIgorCisgICBOb3RlIHRoYXQgdGhlIGRvdWJsZXF1b3Rl cyBvciBicmFja2V0cyBtdXN0IGVuY2xvc2UgdGhlIHdob2xlIGZpbGUgb3IKKyAgIGRpcmVjdG9y eSBzcGVjaWZpY2F0aW9uOgorCisgICJjOlxNeSBEaXJlY3RvcnkiCisKKyAgIG5vdDoKKworICBj OlwiTXkgRGlyZWN0b3J5IgorCisgICBJbiBDLUtlcm1pdCA4LjAsIHlvdSBjYW4gYWxzbyB1c2Ug Y29tcGxldGlvbiBvbiB0aGVzZSBmaWxlbmFtZXMsIGluCisgICB3aGljaCBjYXNlIEtlcm1pdCBz dXBwbGllcyB0aGUgcXVvdGVzIChvciBicmFjZXMpIGF1dG9tYXRpY2FsbHkuCisgICBFeGFtcGxl IChpbiB3aGljaCB0aGUgY3VycmVudCBkaXJlY3RvcnkgY29udGFpbnMgb25seSBvbmUgZmlsZSB3 aG9zZQorICAgbmFtZSBzdGFydHMgd2l0aCAidGgiIGFuZCBpdHMgZnVsbCBuYW1lIGlzICJ0aGlz IGZpbGUiICh3aXRob3V0IHRoZQorICAgcXVvdGVzLCBidXQgd2l0aCB0aGUgc3BhY2UpKToKKwor ICBjYXQgdGg8VGFiPgorCisgICBLZXJtaXQgcmVwYWludHMgdGhlIGZpbGVuYW1lIGZpZWxkIGxp a2UgdGhpczoKKworICBjYXQgInRoaXMgZmlsZSIKKworICAgVGhhdCBpcywgaXQgYmFja3NwYWNl cyBvdmVyIHRoZSBvcmlnaW5hbCAidGgiIGFuZCB0aGVuIHdyaXRlcyB0aGUKKyAgIGZpbGVuYW1l IGluIGRvdWJsZXF1b3Rlcy4KKworICAgSWYgY29tcGxldGlvbiBpcyBvbmx5IHBhcnRpYWwsIEtl cm1pdCBzdGlsbCBzdXBwbGllcyB0aGUgcXVvdGVzLCBidXQgaW4KKyAgIHRoaXMgY2FzZSBhbHNv IGJlZXBzLiBUbyBjb250aW51ZSB0aGUgZmlsZW5hbWUsIHlvdSBtdXN0IGZpcnN0CisgICBiYWNr c3BhY2Ugb3ZlciB0aGUgY2xvc2luZyBxdW90ZS4gVGhlIGNsb3NpbmcgcXVvdGUgaXMgc3VwcGxp ZWQgaW4gdGhpcworICAgY2FzZSB0byBtYWtlIHN1cmUgdGhhdCB5b3UgY2FuIHNlZSB0aGUgc3Bh Y2VzLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlCisgICB0cmFpbGluZy4gRm9yIGV4YW1wbGUsIGlm IHRoZSBjdXJyZW50IGRpcmVjdG9yeSBjb250YWlucyB0d28gZmlsZXMKKyAgIHdob3NlIG5hbWVz IHN0YXJ0IHdpdGggInRoIiwgYW5kIHRoZWlyIGZpbGwgbmFtZXMgYXJlICJ0aGlzIGZpbGUiIGFu ZAorICAgInRoaXMgb3RoZXIgZmlsZSI6CisKKyAgY2F0IHRoPFRhYj4KKworICAgS2VybWl0IHBy aW50czoKKworICBjYXQgInRoaXMgIjxCZWVwPgorCisgICBJZiBpdCBkaWRuJ3QgcHJpbnQgdGhl IGNsb3NpbmcgcXVvdGUsIHlvdSB3b3VsZCBwcm9iYWJseSB3b25kZXIgd2h5IGl0CisgICB3YXMg YmVlcGluZy4KKworICAgQWxzbywgaWYgeW91IGJlZ2luIGEgZmlsZW5hbWUgZmllbGQgd2l0aCBh IGRvdWJsZXF1b3RlIG9yIG9wZW5pbmcKKyAgIGJyYWNlLCBub3cgeW91IGNhbiB1c2UgY29tcGxl dGlvbiBvciBnZXQgPy1oZWxwOyB0aGlzIHdhcyBuZXZlcgorICAgcG9zc2libGUgYmVmb3JlLgor CisgQy1LZXJtaXQ+dHlwZSAidGhpPyBJbnB1dCBmaWxlIHNwZWNpZmljYXRpb24sIG9uZSBvZiB0 aGUgZm9sbG93aW5nOgorICAgdGhpcyBmaWxlICAgICAgICB0aGlzIG90aGVyIGZpbGUKKyBDLUtl cm1pdD50eXBlICJ0aGlfCisKKyAgIFsgWzM4Nl1Ub3AgXSBbIFszODddQ29udGVudHMgXSBbIFsz ODhdQy1LZXJtaXQgSG9tZSBdIFsgWzM4OV1LZXJtaXQKKyAgIEhvbWUgXQorCis2LiBPVEhFUiBD T01NQU5EIFBBUlNJTkcgSU1QUk9WRU1FTlRTCisKKzYuMS4gR3JvdXBpbmcgTWFjcm8gQXJndW1l bnRzCisKKyAgIERvdWJsZXF1b3RlcyBub3cgY2FuIGJlIHVzZWQgaW4gbWFjcm8gaW52b2NhdGlv bnMgdG8gZ3JvdXAgYXJndW1lbnRzCisgICBjb250YWluaW5nIHNwYWNlcywgd2hlcmUgcHJldmlv dXNseSBvbmx5IGJyYWNlcyBjb3VsZCBiZSB1c2VkOgorCisgIGRlZmluZSB4eCBzaG93IGFyZ3MK KyAgeHggb25lICJ0aGlzIGlzIHR3byIgdGhyZWUKKworICAgUmVzdWx0OgorCisgIE1hY3JvIGFy Z3VtZW50cyBhdCBsZXZlbCAwIChcdihhcmdjKSA9IDQpOgorICAgXCUwID0geHgKKyAgIFwlMSA9 IG9uZQorICAgXCUyID0gdGhpcyBpcyB0d28KKyAgIFwlMyA9IHRocmVlCisKKyAgIEFsc28sIHlv dSBjYW4gbm93IHF1b3RlIGJyYWNlcyBhbmQgcXVvdGVzIGluIG1hY3JvIGFyZ3MgKHRoaXMgZGlk bid0CisgICB3b3JrIGJlZm9yZSkuIEV4YW1wbGVzOgorCisgIHh4ICJ7IiAgOyBUaGUgYXJndW1l bnQgaXMgYSBzaW5nbGUgbGVmdCBicmFjZQorICB4eCB7In0gIDsgVGhlIGFyZ3VtZW50IGlzIGEg ZG91YmxlcXVvdGUgY2hhcmFjdGVyCisKKyAgIEluIGNhc2UgdGhpcyBuZXcgYmVoYXZpb3IgaW50 ZXJmZXJlcyB3aXRoIHlvdXIgc2NyaXB0cywgeW91IGNhbiByZXN0b3JlCisgICB0aGUgcHJldmlv dXMgYmVoYXZpb3Igd2l0aDoKKworICBTRVQgQ09NTUFORCBET1VCTEVRVU9USU5HIE9GRgorCis2 LjIuIERpcmVjdG9yeSBhbmQgRmlsZSBOYW1lIENvbXBsZXRpb24KKworICAgQy1LZXJtaXQgOC4w IGFsc28gaW5jbHVkZXMgYmV0dGVyIGNvbXBsZXRpb24gZm9yIGRpcmVjdG9yeSBuYW1lcywgZS5n LgorICAgaW4gdGhlIENEIGNvbW1hbmQuIElmIHRoZSBuYW1lIHR5cGVkIHNvIGZhciB1bmlxdWVs eSBtYXRjaGVzIGEKKyAgIGRpcmVjdG9yeSBuYW1lLCBpdCBpcyBjb21wbGV0ZWQgKGFzIGJlZm9y ZSksIGJ1dCBub3cgaWYgdGhlIGRpcmVjdG9yeQorICAgY29udGFpbnMgYW55IHN1YmRpcmVjdG9y aWVzLCBjb21wbGV0aW9uIGlzIHBhcnRpYWwgKGFsbG93aW5nIHlvdSB0bworICAgc3VwcGx5IGFk ZGl0aW9uYWwgcGF0aCBzZWdtZW50cyB3aXRob3V0IGJhY2tzcGFjaW5nKTsgb3RoZXJ3aXNlIGl0 IGlzCisgICBjb21wbGV0ZS4KKworICAgQ29tcGxldGlvbiBoYXMgYWxzbyBiZWVuIGltcHJvdmVk IGZvciBmaWxlIGFuZCBkaXJlY3RvcnkgbmFtZXMgdGhhdAorICAgY29udGFpbiBub3Qgb25seSBz cGFjZXMgKGFzIGRlc2NyaWJlZCBhYm92ZSkgYnV0IGFsc28gIm1ldGFjaGFyYWN0ZXJzIgorICAg c3VjaCBhcyBhc3RlcmlzayAoKikgYW5kIHRpbGRlICh+KTogbm93IHRoZSBmaWVsZCBpcyByZXBh aW50ZWQgaWYKKyAgIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50IGRpcmVj dG9yeSBjb250YWlucyBvbmx5IG9uZSBmaWxlCisgICB3aG9zZSBuYW1lIGNvbnRhaW5zICJibGFo IiwgdGhlbiBpbjoKKworICB0eXBlICpibGFoPFRhYj4KKworICAgIipibGFoIiBpcyByZXBsYWNl ZCBieSB0aGUgZmlsZW5hbWUuIEluIGVhcmxpZXIgcmVsZWFzZXMsIHRoZSBwYXJ0CisgICB0eXBl ZCBzbyBmYXIgd2FzIGxlZnQgb24gdGhlIGNvbW1hbmQgbGluZSAoYW5kIGluIHRoZSBoaXN0b3J5 IGJ1ZmZlciksCisgICBzbyBldmVuIHdoZW4gdGhlIG9yaWdpbmFsIGNvbW1hbmQgd29ya2VkLCB0 aGUgcmVjYWxsZWQgdmVyc2lvbiB3b3VsZAorICAgbm90LiBTaW1pbGFybHkgZm9yIH4gKHRoZSBu ZWFybHktdW5pdmVyc2FsIFVuaXggbm90YXRpb24gZm9yIHVzZXJuYW1lKToKKworICB0eXBlIH5v bGdhL3g8VGFiPgorCisgICBpcyByZXBhaW50ZWQgYXMgKGUuZy4pOgorCisgIHR5cGUgL3VzZXJz L2hvbWUvb2xnYS94KEJlZXApCisKKyAgIFNwZWFraW5nIG9mIGNvbW1hbmQgaGlzdG9yeSwgdGhl IG5ldyBTSE9XIEhJU1RPUlkgY29tbWFuZCBzaG93cyB5b3VyCisgICBjb21tYW5kIGhpc3Rvcnkg YW5kIHJlY2FsbCBidWZmZXIuIFNBVkUgQ09NTUFORCBISVNUT1JZIHNhdmVzIGl0IGludG8gYQor ICAgZmlsZSBvZiB5b3VyIGNob2ljZS4KKworNi4zLiBQYXNzaW5nIEFyZ3VtZW50cyB0byBDb21t YW5kIEZpbGVzCisKKyAgIFRoZSBtZXRob2QgZm9yIHBhc3NpbmcgYXJndW1lbnRzIHRvIGNvbW1h bmQgZmlsZXMgaGFzIGJlZW4gaW1wcm92ZWQuCisgICBQcmlvciB0byBDLUtlcm1pdCA3LjAgdGhl cmUgd2FzIG5vIHByb3Zpc2lvbiBmb3IgZG9pbmcgdGhpcy4gSW4KKyAgIEMtS2VybWl0IDcuMCwg dGhlIFRBS0UgY29tbWFuZCB3YXMgY2hhbmdlZCB0byBhbGxvdyBhcmd1bWVudHMgdG8gYmUKKyAg IGdpdmVuIGFmdGVyIHRoZSBmaWxlbmFtZToKKworICB0YWtlIGNvbW1hbmRmaWxlIGFyZzEgYXJn MiAuLi4KKworICAgVGhpcyB3YXMgYWNjb21wbGlzaGVkIGJ5IHJlcGxhY2luZyB0aGUgY3VycmVu dCBcJTEsIFwlMiwgZXRjLCB3aXRoIHRoZQorICAgZ2l2ZW4gYXJndW1lbnRzLCBzaW5jZSBhIG5l dyBzZXQgb2YgbWFjcm8gYXJndW1lbnQgdmFyaWFibGVzIGlzIGNyZWF0ZWQKKyAgIG9ubHkgd2hl biBhIG1hY3JvIGlzIGV4ZWN1dGVkLCBub3QgYSBjb21tYW5kIGZpbGUuIEl0IGlzIG11Y2ggbW9y ZQorICAgaW50dWl0aXZlLCBob3dldmVyLCBpZiBhcmd1bWVudHMgdG8gY29tbWFuZCBmaWxlcyB3 b3JrZWQgbGlrZSB0aG9zZSB0bworICAgbWFjcm9zOiB0aGUgY29tbWFuZCBmaWxlIHNlZXMgdGhl IGFyZ3VtZW50cyBhcyBpdHMgb3duIFwlMSwgXCUyLCBldGMsCisgICBidXQgdGhlIGNhbGxlcidz IHZhcmlhYmxlcyBhcmUgbm90IGRpc3R1cmJlZC4gQy1LZXJtaXQgOC4wIGFjY29tcGxpc2hlcwor ICAgdGhpcyBieSBhdXRvbWF0aWNhbGx5IGNyZWF0aW5nIGFuIGludGVybWVkaWF0ZSB0ZW1wb3Jh cnkgbWFjcm8gdG8gc3RhcnQKKyAgIHRoZSBjb21tYW5kIGZpbGUgKGlmIGFueSBhcmd1bWVudHMg d2VyZSBnaXZlbiksIHRodXMgY3JlYXRpbmcgYSBuZXcKKyAgIGxldmVsIG9mIGFyZ3VtZW50cyBh cyBleHBlY3RlZC4KKworNi40LiBNb3JlLVByb21wdGluZworCisgICBUaGUgZmFtaWxpYXIgLS1t b3JlPy0tIHByb21wdCB0aGF0IGFwcGVhcnMgYXQgdGhlIGVuZCBvZiBlYWNoIHNjcmVlbmZ1bAor ICAgb2YgY29tbWFuZC1yZXNwb25zZSBvdXRwdXQgbm93IGFjY2VwdHMgYSBuZXcgYW5zd2VyOiBH IChHbykgbWVhbmluZworICAgInNob3cgYWxsIHRoZSByZXN0IHdpdGhvdXQgcGF1c2luZyBhbmQg YXNraW5nIG1lIGFueSBtb3JlIHF1ZXN0aW9ucyIuIFAKKyAgIChQcm9jZWVkKSBpcyBhIHN5bm9u eW0gZm9yIEcuCisKKzYuNS4gQ29tbWFzIGluIE1hY3JvIERlZmluaXRpb25zCisKKyAgIEFzIG5v dGVkIGluIHRoZSBbMzkwXUMtS2VybWl0IG1hbnVhbCwgY29tbWEgaXMgdXNlZCB0byBzZXBhcmF0 ZQorICAgY29tbWFuZHMgaW4gYSBtYWNybyBkZWZpbml0aW9uLiBFdmVuIHdoZW4gdGhlIG1hY3Jv IGlzIGRlZmluZWQgb24KKyAgIG11bHRpcGxlIGxpbmVzIHVzaW5nIGN1cmx5LWJyYWNlIGJsb2Nr LXN0cnVjdHVyZSBub3RhdGlvbiB3aXRob3V0CisgICBjb21tYXMsIHRoZSBkZWZpbml0aW9uIGlz IHN0aWxsIHN0b3JlZCBpbnRlcm5hbGx5IGFzIGEgY29tbWEtc2VwYXJhdGVkCisgICBsaXN0IG9m IGNvbW1hbmRzLiBUaGVyZWZvcmUgc3BlY2lhbCB0cmlja3MgYXJlIG5lZWRlZCB0byBpbmNsdWRl IGEKKyAgIGNvbW1hIGluIGEgY29tbWFuZC4gVGhlIGNsYXNzaWMgZXhhbXBsZSBpczoKKworICBk ZWZpbmUgZm9vIHsKKyAgICAgIChzb21lIGNvbW1hbmQpCisgICAgICBpZiBmYWlsIGVjaG8gU29y cnksIGJsYWggZmFpbGVkLi4uCisgIH0KKworICAgVGhpcyB3b3VsZCByZXN1bHQgaW4gS2VybWl0 IHRyeWluZyB0byBleGVjdXRlIGEgImJsYWgiIGNvbW1hbmQuIFRoaXMKKyAgIGNvdWxkIGFsd2F5 cyBiZSBoYW5kbGVkIGJ5IGVuY2xvc2luZyB0aGUgdGV4dCBpbiBicmFjZXM6CisKKyAgZGVmaW5l IGZvbyB7CisgICAgICAoc29tZSBjb21tYW5kKQorICAgICAgaWYgZmFpbCBlY2hvIHtTb3JyeSwg YmxhaCBmYWlsZWQuLi59CisgIH0KKworICAgYnV0IGRvdWJsZXF1b3RlcyAobW9yZSBpbnR1aXRp dmUpIHNob3VsZCBoYXZlIHdvcmtlZCB0b28uIE5vdyB0aGV5IGRvOgorCisgIGRlZmluZSBmb28g eworICAgICAgKHNvbWUgY29tbWFuZCkKKyAgICAgIGlmIGZhaWwgZWNobyAiU29ycnksIGJsYWgg ZmFpbGVkLi4uIgorICB9CisKKzYuNi4gQXJyb3cgS2V5cworCisgICBBcyBvZiB2ZXJzaW9uIDgu MC4yMDEsIEMtS2VybWl0IG9uIG1vc3QgcGxhdGZvcm1zIGxldHMgeW91IGFjY2VzcyB0aGUKKyAg IGNvbW1hbmQgaGlzdG9yeSBidWZmZXIgd2l0aCBhcnJvdyBrZXlzLCBqdXN0IGFzIHlvdSBhbHdh eXMgY291bGQgd2l0aAorICAgY29udHJvbCBjaGFyYWN0ZXJzLiBUaGUgcmVzdHJpY3Rpb25zIGFy ZToKKworICAgIDEuIE9ubHkgVXAgYW5kIERvd24gYXJyb3cga2V5cyBhcmUgYWNjZXB0ZWQuCisg ICAgMi4gT25seSA3LWJpdCBBTlNJIGFycm93LWtleSBzZXF1ZW5jZXMgYXJlIHVuZGVyc3Rvb2Qg KEVTQyBmb2xsb3dlZCBieQorICAgICAgIFsgb3IgdXBwZXJjYXNlIGxldHRlciBPLCBmb2xsb3dl ZCBieSB1cHBlcmNhc2UgbGV0dGVyIEEgb3IgKHVwKSBCCisgICAgICAgKGRvd24pLgorCisgICBU aGlzIGNoYW5nZSB3YXMgbWFkZSB0byBmYWNpbGl0YXRlIGNvbW1hbmQgcmVjYWxsIGluIExpbnV4 LWJhc2VkIFBEQXMKKyAgIHRoYXQgZG9uJ3QgaGF2ZSBhIENvbnRyb2wga2V5LCBvciBhdCBsZWFz dCBub3Qgb25lIHRoYXQncyBlYXNpbHkgKG9yCisgICBhbHdheXMpIGFjY2Vzc2libGUsIHN1Y2gg YXMgdGhlIFNoYXJwIFphdXJ1cyBTTDU1MDAuCisKKyAgIFsgWzM5MV1Ub3AgXSBbIFszOTJdQ29u dGVudHMgXSBbIFszOTNdQy1LZXJtaXQgSG9tZSBdIFsgWzM5NF1LZXJtaXQKKyAgIEhvbWUgXQor Cis3LiBORVcgQ09NTUFORFMgQU5EIFNXSVRDSEVTCisKKyAgIFNlZSBbMzk1XVNlY3Rpb24gNCBm b3IgbW9yZSBhYm91dCBmaWxlIHNjYW5uaW5nIGFuZCB0aGUgL1RZUEU6IHN3aXRjaC4KKworICAg QVNLW1FdIFsgL1RJTUVPVVQ6bnVtYmVyIC9RVUlFVCAvREVGQVVMVDp0ZXh0IF0gdmFyaWFibGUg WyBwcm9tcHQgXQorICAgICAgICAgIFRoZSBuZXcgb3B0aW9uYWwgL1RJTUVPVVQ6IHN3aXRjaCBm b3IgQVNLIGFuZCBBU0tRIGNhdXNlcyB0aGUKKyAgICAgICAgICBjb21tYW5kIHRvIHRpbWUgb3V0 IGFuZCBhbmQgZmFpbCBpZiBubyByZXNwb25zZSBpcyBnaXZlbiB3aXRoaW4KKyAgICAgICAgICB0 aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzZWNvbmRzLCAxIG9yIGdyZWF0ZXIgKDAgb3IgbGVzcyBt ZWFucworICAgICAgICAgIG5vIHRpbWVvdXQsIHdhaXQgZm9yZXZlcikuIFRoaXMgd29ya3MganVz dCBsaWtlIFNFVCBBU0stVElNRVIsCisgICAgICAgICAgZXhjZXB0IGl0cyBlZmZlY3QgaXMgbG9j YWwgdG8gdGhlIEFTSyBjb21tYW5kIHdpdGggd2hpY2ggaXQgaXMKKyAgICAgICAgICBnaXZlbiBh bmQgaXQgZG9lcyBub3QgZGlzdHVyYiB0aGUgZ2xvYmFsIGFzayB0aW1lciBzZXR0aW5nLiBUaGUK KyAgICAgICAgICBuZXcgL1FVSUVUIHN3aXRjaCB0ZWxscyBLZXJtaXQgbm90IHRvIHByaW50IGFu IGVycm9yIG1lc3NhZ2UgaWYKKyAgICAgICAgICB0aGUgQVNLIG9yIEFTS1EgY29tbWFuZCB0aW1l cyBvdXQgd2FpdGluZyBmb3IgYSByZXNwb25zZS4KKworICAgICAgICAgIFZlcnNpb24gOC4wLjIx MSBhZGRzIHRoZSAvREVGQVVMVDp0ZXh0IHN3aXRjaCBmb3IgQVNLLUNsYXNzCisgICAgICAgICAg Y29tbWFuZHMgKEFTSywgQVNLUSwgYW5kIEdFVE9LKS4gVGhpcyBsZXRzIHlvdSBzdXBwbHkgYSBk ZWZhdWx0CisgICAgICAgICAgYW5zd2VyIGluIGNhc2UgdGhlIHVzZXIgc3VwcGxpZXMgYW4gZW1w dHkgYW5zd2VyIG9yIHRoZQorICAgICAgICAgIC9USU1FT1VUOiBzd2l0Y2ggd2FzIGluY2x1ZGVk IGFuZCB0aGUgdGltZSBsaW1pdCBleHBpcmVkIHdpdGhvdXQKKyAgICAgICAgICBhbiBhbnN3ZXIu IEluIGJvdGggdGhlc2UgY2FzZXMsIHRoZSBjb21tYW5kIHN1Y2NlZWRzLgorCisgICBDQVQgZmls ZW5hbWUKKyAgICAgICAgICBFcXVpdmFsZW50IHRvIFRZUEUgL05PUEFHRS4KKworICAgQ0RVUAor ICAgICAgICAgIENoYW5nZXMgS2VybWl0J3MgbG9jYWwgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhl IHBhcmVudCBvZiB0aGUKKyAgICAgICAgICBjdXJyZW50IG9uZS4gRXF1aXZhbGVudCB0byAiY2Qg Li4iIGluIFVOSVggb3IgV2luZG93cywgImNkIFstXSIKKyAgICAgICAgICBpbiBWTVMsICJjZCBe IiBpbiBBT1MvVlMsIGV0YzsgaW4gb3RoZXIgd29yZHMsIGl0J3MgYQorICAgICAgICAgIHBsYXRm b3JtLWluZGVwZW5kZW50IHdheSBvZiBtb3Zpbmcgb25lIGxldmVsIHVwIGluIGEgZGlyZWN0b3J5 CisgICAgICAgICAgdHJlZS4KKworICAgQ0hNT0QgWyBzd2l0Y2hlcyBdIHBlcm1pc3Npb24gZmls ZXMKKyAgICAgICAgICBVTklYIG9ubHkuIFNldHMgZmlsZSBwZXJtaXNzaW9ucyBmb3Igb25lIG9y IG1vcmUgZmlsZXMgb3IKKyAgICAgICAgICBkaXJlY3Rvcmllcy4gVGhlIHBlcm1pc3Npb24gbXVz dCBiZSBnaXZlbiBhcyBhbiBvY3RhbCBudW1iZXIsCisgICAgICAgICAgZS5nLiA2NjQsIDc1NS4g U3dpdGNoZXM6IC9ESVJFQ1RPUklFUywgL0ZJTEVTLCAvTk9MSVNULCAvUEFHRSwKKyAgICAgICAg ICAvRE9URklMRVMsIC9MSVNULCAvTk9QQUdFLCAvUkVDVVJTSVZFLCAvVFlQRTp7VEVYVCxCSU5B UlksQUxMfSwKKyAgICAgICAgICAvU0lNVUxBVEUuIFRoZSAvVFlQRTogc3dpdGNoIGFsbG93cyBz ZWxlY3Rpb24gb2Ygb25seSB0ZXh0IG9yCisgICAgICAgICAgYmluYXJ5IGZpbGVzLiBGb3IgZXhh bXBsZSwgaWYgeW91IGhhdmUgYSBtaXh0dXJlIG9mIHNvdXJjZSBmaWxlcworICAgICAgICAgIGFu ZCBleGVjdXRhYmxlcywgeW91IGNhbiB1c2UgImNobW9kIC9maWxlcyAvdHlwZTp0ZXh0IDY2NCIg dG8KKyAgICAgICAgICBnaXZlIG93bmVyL2dyb3VwIHJlYWQvd3JpdGUgYW5kIHdvcmxkIHJlYWQg cGVybWlzc2lvbiB0byB0aGUKKyAgICAgICAgICB0ZXh0IGZpbGVzLCBhbmQgImNobW9kIC9maWxl cyAvdHlwZTpiaW5hcnkgNzc1IiB0byBnaXZlIHRoZSBzYW1lCisgICAgICAgICAgcGx1cyBleGVj dXRlIHBlcm1pc3Npb24gdG8gdGhlIGV4ZWN1dGFibGVzLiBVc2UgL1NJTVVMQVRFIHRvIHNlZQor ICAgICAgICAgIHdoaWNoIGZpbGVzIHdvdWxkIGJlIGFmZmVjdGVkLCB3aXRob3V0IGFjdHVhbGx5 IGNoYW5naW5nIHRoZWlyCisgICAgICAgICAgcGVybWlzc2lvbnMuCisKKyAgIENMRUFSIEtFWUJP QVJELUJVRkZFUgorICAgICAgICAgIEZsdXNoZXMgYW55IGFzLXlldCB1bnJlYWQgY2hhcmFjdGVy cyBmcm9tIHRoZSBrZXlib2FyZCBpbnB1dAorICAgICAgICAgIGJ1ZmZlci4gVXNlZnVsIGZvciBm bHVzaGluZyB0eXBlYWhlYWQgaW4gc2NyaXB0cy4KKworICAgQ09OVElOVUUKKyAgICAgICAgICBX aGVuIGdpdmVuIGF0IGFuIGludGVyYWN0aXZlIGNvbW1hbmQgcHJvbXB0IHRoYXQgd2FzIHJlYWNo ZWQgYnkKKyAgICAgICAgICBpc3N1aW5nIGEgUFJPTVBUIGNvbW1hbmQgKGRlc2NyaWJlZCBpbiB0 aGlzIHNlY3Rpb24pIGZyb20gYQorICAgICAgICAgIHNjcmlwdCwgdGhpcyBjb21tYW5kIHJldHVy bnMgdG8gdGhlIHNjcmlwdCwgY29udGludWluZyBpdHMKKyAgICAgICAgICBleGVjdXRpb24gYXQg dGhlIGNvbW1hbmQgYWZ0ZXIgdGhlIFBST01QVCBjb21tYW5kLiBJbiB0aGlzCisgICAgICAgICAg Y29udGV4dCwgQ09OVElOVUUgaXMgc2ltcGx5IGEgbW9yZS1pbnR1aXRpdmUgc3lub255bSBmb3Ig RU5ELgorCisgICBDT1BZLCBSRU5BTUUsIGFuZCBUUkFOU0xBVEUKKyAgICAgICAgICBUaGVzZSBj b21tYW5kcyBub3cgd29yayBvbiBmaWxlIGdyb3VwcyBpZiB0aGUgdGFyZ2V0IGZpbGVuYW1lIGlz CisgICAgICAgICAgYSBkaXJlY3RvcnksIGUuZy4gImNvcHkgb29mYS4qIC4uIiwgInJlbmFtZSAq IH5vbGdhL3RtcC8iCisKKyAgIENPUFkgL0FQUEVORCBzb3VyY2UgZGVzdGluYXRpb24KKyAgICAg ICAgICBUaGUgc291cmNlIGZpbGUgc3BlY2lmaWNhdGlvbiBjYW4gbm93IGluY2x1ZGUgd2lsZGNh cmRzLCBpbgorICAgICAgICAgIHdoaWNoIGNhc2UgYWxsIG9mIHRoZSBzb3VyY2UgZmlsZXMgdGhh dCBtYXRjaCB3aWxsIGdvIGludG8gdGhlCisgICAgICAgICAgZGVzdGluYXRpb24gZmlsZSBpbiBh bHBoYWJldGljYWwgb3JkZXIgYnkgbmFtZS4KKworICAgREVMRVRFIC9BU0sKKyAgICAgICAgICBB c2tzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGVhY2ggZmlsZSBiZWZvcmUgZGVsZXRpbmcgaXQuIElu CisgICAgICAgICAgQy1LZXJtaXQgNy4wLCB0aGUgYW5zd2VycyB3ZXJlICJ5ZXMiIChvciAib2si KSBhbmQgIm5vIi4KKyAgICAgICAgICBDLUtlcm1pdCA4LjAgYWRkcyAiZ28iIChtZWFuaW5nLCBk ZWxldGUgYWxsIHRoZSByZXN0IHdpdGhvdXQKKyAgICAgICAgICBhc2tpbmcpIGFuZCAicXVpdCIg KGNhbmNlbCB0aGUgREVMRVRFIGNvbW1hbmQgYW5kIHJldHVybiB0byB0aGUKKyAgICAgICAgICBw cm9tcHQpLgorCisgICBERUxFVEUgL0RJUkVDVE9SSUVTCisgICAgICAgICAgRGVsZXRlcyBub3Qg b25seSBmaWxlcyBidXQgYWxzbyBkaXJlY3Rvcmllcy4KKworICAgREVMRVRFIC9SRUNVUlNJVkUK KyAgICAgICAgICBEZWxldGVzIGFsbCBmaWxlcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmaWxlIHNw ZWNpZmljYXRpb24gaW4gdGhlCisgICAgICAgICAgY3VycmVudCAob3IgZ2l2ZW4pIGRpcmVjdG9y eSBhbmQgYWxsIGRpcmVjdG9yaWVzIGJlbmVhdGggaXQuCisKKyAgIERFTEVURSAvU1VNTUFSWQor ICAgICAgICAgIFByaW50cyBvbmx5IHRoZSBudW1iZXIgb2YgZmlsZXMgZGVsZXRlZCBhbmQgdG90 YWwgc2l6ZSBmcmVlZCwKKyAgICAgICAgICB3aXRob3V0IGxpc3RpbmcgZWFjaCBmaWxlLgorCisg ICBERUxFVEUgL1RSRUUKKyAgICAgICAgICBTaG9ydGhhbmQgZm9yIERFTEVURSAvUkVDVVJTSVZF IC9ESVJFQ1RPUklFUyAvRE9URklMRVMvLgorICAgICAgICAgIEVxdWl2YWxlbnQgdG8gV2luZG93 cyBERUxUUkVFIG9yIFVuaXggInJtIC1SZiIuIElmIG5vIGZpbGUKKyAgICAgICAgICBzcGVjaWZp Y2F0aW9uIGlzIGdpdmVuLCB0aGUgY29udGVudHMgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LAor ICAgICAgICAgIHBsdXMgYWxsIG9mIGl0cyBzdWJkaXJlY3RvcmllcyBhbmQgdGhlaXIgY29udGVu dHMsIGFyZSBkZWxldGVkLgorCisgICBERUxFVEUgL1RZUEU6QklOQVJZCisgICAgICAgICAgRGVs ZXRlIG9ubHkgcmVndWxhciBiaW5hcnkgZmlsZXMgKHJlcXVpcmVzIEZJTEUgU0NBTiBPTikuCisK KyAgIERFTEVURSAvVFlQRTpURVhUCisgICAgICAgICAgRGVsZXRlIG9ubHkgcmVndWxhciB0ZXh0 IGZpbGVzIChyZXF1aXJlcyBGSUxFIFNDQU4gT04pLgorCisgICBESVJFQ1RPUlkgWyBzd2l0Y2hl cyBdIFsgZmlsZXNwZWMgWyBmaWxlc3BlYyBbIGZpbGVzcGVjIC4uLiBdIF0gXQorICAgICAgICAg IFRoZSBESVJFQ1RPUlkgY29tbWFuZCBub3cgYWNjZXB0cyBtb3JlIHRoYW4gb25lIGZpbGUKKyAg ICAgICAgICBzcGVjaWZpY2F0aW9uOyBlLmcuICJkaXJlY3RvcnkgbW9vbi50eHQgc3VuLmRvYyBz dGFycy4qIi4KKworICAgRElSRUNUT1JZIC9OT1JFQ1VSU0lWRSB4eHgKKyAgICAgICAgICBJZiB4 eHggaXMgYSBkaXJlY3RvcnkgbmFtZSwgZm9yY2VzIGxpc3Rpbmcgb2YgdGhlIGRpcmVjdG9yeQor ICAgICAgICAgIGl0c2VsZiByYXRoZXIgdGhhbiBpdHMgY29udGVudHMuCisKKyAgIERJUkVDVE9S WSAvRk9MTE9XTElOS1MgeHh4CisgICAgICAgICAgKFVOSVggb25seSkgVGVsbHMgdGhlIERJUkVD VE9SWSBjb21tYW5kIHRvIGZvbGxvdyBzeW1ib2xpYworICAgICAgICAgIGxpbmtzLiBUaGlzIG5v dCB0aGUgZGVmYXVsdCBiZWNhdXNlIGl0IGNhbiBjYXVzZSBlbmRsZXNzIGxvb3BzLgorCisgICBE SVJFQ1RPUlkgL05PRk9MTE9XTElOS1MgeHh4CisgICAgICAgICAgKFVOSVggb25seSkgVGVsbHMg dGhlIERJUkVDVE9SWSBjb21tYW5kIG5vdCB0byBmb2xsb3cgc3ltYm9saWMKKyAgICAgICAgICBs aW5rcywgYnV0IHJhdGhlciwgbWVyZWx5IHRvIGxpc3QgdGhlbS4gVGhpcyBpcyB0aGUgZGVmYXVs dC4KKworICAgRElSRUNUT1JZIC9PVVRQVVQ6ZmlsZW5hbWUKKyAgICAgICAgICBTZW5kcyB0aGUg cmVzdWx0cyBvZiB0aGUgRElSRUNUT1JZIGNvbW1hbmQgdG8gdGhlIGdpdmVuIGZpbGUuCisKKyAg IERJUkVDVE9SWSAvU1VNTUFSWQorICAgICAgICAgIFByaW50cyBvbmx5IHRoZSBudW1iZXIgb2Yg ZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGFuZCB0aGUgdG90YWwKKyAgICAgICAgICBzaXplLCB3aXRo b3V0IGxpc3RpbmcgZWFjaCBmaWxlLgorCisgICBESVJFQ1RPUlkgL1RZUEU6e1RFWFQsQklOQVJZ fQorICAgICAgICAgIFNob3dzIG9ubHkgZmlsZXMgb2YgdGhlIHNlbGVjdGVkIHR5cGUsIGJhc2Vk IG9uIGZpbGUgc2Nhbi4KKworICAgRElSRUNUT1JZIC9YRkVSTU9ERQorICAgICAgICAgIE5vdyBz aG93cyByZXN1bHRzIG9mIGZpbGUgc2NhbiAoc2VlIFszOTZdU2VjdGlvbiA0KS4KKworICAgRk9Q RU4gWyBzd2l0Y2hlcyBdIGNoYW5uZWwgZmlsZW5hbWUKKworICAgICAgICAgIEFzIG9mIHZlcnNp b24gOC4wLjIxMSwgRk9QRU4gYWxsb3dzIC9kZXYvdHR5IGFzIGEgZmlsZW5hbWUgaW4KKyAgICAg ICAgICBVbml4LWJhc2VkIG9wZXJhdGluZyBzeXN0ZW1zLgorCisgICBGUkVBRCAvVFJJTQorICAg ICAgICAgICg4LjAuMjExKSBUcmltcyBhbnkgdHJhaWxpbmcgYmxhbmtzIG9yIHRhYnMgZnJvbSB0 aGUgaXRlbSAoc3VjaAorICAgICAgICAgIGFzIGEgbGluZSBvZiB0ZXh0KSB0aGF0IGl0IGhhcyBy ZWFkLgorCisgICBGUkVBRCAvVU5UQUJJRlkKKyAgICAgICAgICAoOC4wLjIxMSkgQ29udmVydHMg SG9yaXpvbnRhbCBUYWIgY2hhcmFjdGVycyB0byB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICBu dW1iZXIgb2Ygc3BhY2VzLCBiYXNlZCBvbiBWVDEwMC1saWtlIHRhYiBzdG9wcyAoMSw5LDE3LDI1 LC4uLikuCisKKyAgIEdSRVAgWyBzd2l0Y2hlcyBdIHBhdHRlcm4gZmlsZXMKKyAgICAgICAgICBT aW1pbGFyIHRvIFVuaXggZ3JlcCBjb21tYW5kOiBkaXNwbGF5cyBmaWxlIGxpbmVzIHRoYXQgbWF0 Y2ggdGhlCisgICAgICAgICAgZ2l2ZW4gWzM5N11wYXR0ZXJuLiBTd2l0Y2hlczoKKworICAgICAg ICAvQ09VTlRbOnZhcmlhYmxlXQorICAgICAgICAgICAgICAgIERvbid0IHNob3cgdGhlIG1hdGNo aW5nIGxpbmVzLCBqdXN0IHRlbGwgaG93IG1hbnkgbGluZXMKKyAgICAgICAgICAgICAgICBtYXRj aC4gSWYgYSB2YXJpYWJsZSBuYW1lIGlzIHNwZWNpZmllZCwgdGhlIGNvdW50IGlzCisgICAgICAg ICAgICAgICAgc3RvcmVkIGluIHRoZSBnaXZlbiB2YXJpYWJsZS4KKworICAgICAgICAvRE9URklM RVMKKyAgICAgICAgICAgICAgICBJbmNsdWRlIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGgg ZG90LgorCisgICAgICAgIC9MSU5FTlVNQkVSUworICAgICAgICAgICAgICAgIFNob3cgbGluZSBu dW1iZXJzIG9mIG1hdGNoaW5nIGxpbmVzLgorCisgICAgICAgIC9OQU1FT05MWQorICAgICAgICAg ICAgICAgIG9ubHkgbGlzdCB0aGUgbmFtZXMgb2YgZmlsZXMgdGhhdCBjb250YWluIG1hdGNoaW5n IGxpbmVzLAorICAgICAgICAgICAgICAgIGJ1dCBub3QgdGhlIGxpbmVzIHRoZW1zZWx2ZXMuCisK KyAgICAgICAgL05PQkFDS1VQCisgICAgICAgICAgICAgICAgU2tpcCBiYWNrdXAgZmlsZXMuCisK KyAgICAgICAgL05PQ0FTRQorICAgICAgICAgICAgICAgIElnbm9yZSBhbHBoYWJldGljIGNhc2Ug d2hpbGUgcGF0dGVybiBtYXRjaGluZy4KKworICAgICAgICAvTk9ET1RGSUxFUworICAgICAgICAg ICAgICAgIHNraXAgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBkb3QgKHBlcmlvZCkuCisK KyAgICAgICAgL05PTElTVAorICAgICAgICAgICAgICAgIFN1cHByZXNzIG91dHB1dCBidXQgc2V0 IFNVQ0NFU1Mgb3IgRkFJTFVSRSBhY2NvcmRpbmcgdG8KKyAgICAgICAgICAgICAgICBzZWFyY2gg cmVzdWx0LgorCisgICAgICAgIC9OT01BVENICisgICAgICAgICAgICAgICAgTG9vayBmb3IgbGlu ZXMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIHBhdHRlcm4uCisKKyAgICAgICAgL05PUEFHRQorICAg ICAgICAgICAgICAgIERvbid0IHBhdXNlIGJldHdlZW4gc2NyZWVucyBvZiBvdXRwdXQuCisKKyAg ICAgICAgL09VVFBVVDpmaWxlbmFtZQorICAgICAgICAgICAgICAgIFdyaXRlIHJlc3VsdHMgaW50 byB0aGUgZ2l2ZW4gZmlsZS4KKworICAgICAgICAvUEFHRQorICAgICAgICAgICAgICAgIFBhdXNl IGJldHdlZW4gc2NyZWVucyBvZiBvdXRwdXQuCisKKyAgICAgICAgL1JFQ1VSU0lWRQorICAgICAg ICAgICAgICAgIFNlYXJjaCBmaWxlcyBpbiBzdWJkaXJlY3RvcmllcyB0b28uCisKKyAgICAgICAg L1RZUEU6e1RFWFQsQklOQVJZfQorICAgICAgICAgICAgICAgIFNlYXJjaCBvbmx5IGZpbGVzIG9m IHRoZSBzcGVjaWZpZWQgdHlwZS4KKworICAgICAgICAgIFN5bm9ueW1zOiBGSU5ELCBTRUFSQ0gu CisKKyAgIEdFVE9LIC9USU1FT1VUOm4gL1FVSUVUIC9ERUZBVUxUOnRleHQKKyAgICAgICAgICBU aGUgbmV3IC9RVUlFVCBzd2l0Y2ggaW5zdHJ1Y3RzIEdFVE9LLCB3aGVuIGdpdmVuIGEgdGltZW91 dCwgbm90CisgICAgICAgICAgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpZiBpdCB0aW1lcyBv dXQuIEFzIG9mIDguMC4yMTEsIGEKKyAgICAgICAgICBkZWZhdWx0IGFuc3dlciBjYW4gYmUgc3Vw cGxpZWQgKHNlZSBBU0spLgorCisgICBIRUFEIFsgc3dpdGNoZXMgXSBmaWxlbmFtZQorICAgICAg ICAgIEVxdWl2YWxlbnQgdG8gVFlQRSAvSEVBRCBbIG90aGVyLXN3aXRjaGVzIF0gZmlsZW5hbWUu CisKKyAgIEhFTFAgREFURQorICAgICAgICAgIEV4cGxhaW5zIGRhdGUtdGltZSBmb3JtYXRzLCBp bmNsdWRpbmcgdGltZXpvbmUgbm90YXRpb24gYW5kCisgICAgICAgICAgZGVsdGEgdGltZXMuCisK KyAgIEhFTFAgRklSRVdBTExTCisgICAgICAgICAgRXhwbGFpbnMgdGhlIGZpcmV3YWxsIG5lZ290 aWF0aW9uIGNhcGFiaWxpdGllcyBvZiB5b3VyIHZlcnNpb24KKyAgICAgICAgICBvZiBLZXJtaXQu CisKKyAgIEtDRCBbIHN5bWJvbGljLWRpcmVjdG9yeS1uYW1lIF0KKyAgICAgICAgICBDaGFuZ2Vz IEtlcm1pdCdzIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBuYW1lZCBzeW1ib2xpYworICAgICAg ICAgIGRpcmVjdG9yeSwgc3VjaCBhcyBzdWNoIGFzIGV4ZWRpciwgaW5pZGlyLCBzdGFydHVwLCBk b3dubG9hZCwgb3IKKyAgICAgICAgICBhbmQgaG9tZS4gVHlwZSAia2NkID8iIGZvciBhIGxpc3Qg b2Ygc3ltYm9saWMgZGlyZWN0b3J5IG5hbWVzCisgICAgICAgICAga25vd24gdG8geW91ciBjb3B5 IG9mIEtlcm1pdCwgb3IgZ2l2ZSB0aGUgbmV3IE9SSUVOVEFUSU9OCisgICAgICAgICAgY29tbWFu ZCBmb3IgYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uLiBJZiB5b3UgZ2l2ZSBhIEtDRAorICAg ICAgICAgIGNvbW1hbmQgd2l0aG91dCBhIGRpcmVjdG9yeSBuYW1lLCBLZXJtaXQgcmV0dXJucyB0 byBpdHMgImhvbWUiCisgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCBpcyBkZXRlcm1pbmVkIGlu IHNvbWUgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgICB1bmRlcmx5aW5nIG9wZXJh dGluZyBzeXN0ZW0sIGJ1dCB3aGljaCB5b3UgY2FuIHJlZGVmaW5lIHdpdGggdGhlCisgICAgICAg ICAgKG5ldykgU0VUIENEIEhPTUUgY29tbWFuZC4gWW91ciBob21lIGRpcmVjdG9yeSBpcyBzaG93 biBieSBTSE9XCisgICAgICAgICAgQ0QgYW5kIGl0J3MgYWxzbyB0aGUgdmFsdWUgb2YgdGhlIFx2 KGhvbWUpIHZhcmlhYmxlLgorCisgICBMSUNFTlNFCisgICAgICAgICAgRGlzcGxheXMgdGhlIEMt S2VybWl0IGxpY2Vuc2UuCisKKyAgIEwtY29tbWFuZHMKKyAgICAgICAgICBXaGVuIEtlcm1pdCBo YXMgYSBjb25uZWN0aW9uIHRvIGEgS2VybWl0IG9yIEZUUCBzZXJ2ZXIsIGZpbGUKKyAgICAgICAg ICBtYW5hZ2VtZW50IGNvbW1hbmRzIHN1Y2ggYXMgQ0QsIERJUkVDVE9SWSwgYW5kIERFTEVURSBt aWdodCBiZQorICAgICAgICAgIGludGVuZGVkIGZvciB0aGUgbG9jYWwgY29tcHV0ZXIgb3IgdGhl IHJlbW90ZSBzZXJ2ZXIuIEMtS2VybWl0CisgICAgICAgICAgOC4wLjIwMCBhbmQgZWFybGllciBh bHdheXMgZXhlY3V0ZXMgdGhlc2UgY29tbWFuZHMgb24gdGhlIGxvY2FsCisgICAgICAgICAgY29t cHV0ZXIuIElmIHlvdSB3YW50IHRoZW0gZXhlY3V0ZWQgYnkgdGhlIHJlbW90ZSBzZXJ2ZXIsIHlv dQorICAgICAgICAgIGhhdmUgdG8gcHJlZml4IHRoZW0gd2l0aCBSRU1PVEUgKGUuZy4gUkVNT1RF IENEKSBvciB1c2Ugc3BlY2lhbAorICAgICAgICAgIFItY29tbWFuZCBhbGlhc2VzIChlLmcuIFJD RCA9IFJFTU9URSBDRCwgUkRJUiA9IFJFTU9URSBESVIsCisgICAgICAgICAgZXRjKS4gQnV0IHRo aXMgZmVlbHMgdW5uYXR1cmFsIHRvIEZUUCB1c2Vycywgd2hvIGV4cGVjdAorICAgICAgICAgIHVu cHJlZml4ZWQgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBy ZW1vdGUKKyAgICAgICAgICBzZXJ2ZXIsIHJhdGhlciB0aGFuIGxvY2FsbHkuIEMtS2VybWl0IDgu MC4yMDEgYWRkcyBhdXRvbWF0aWMKKyAgICAgICAgICBsb2N1cyBzd2l0Y2hpbmcgdG8gcHJlc2Vu dCBhbiBGVFAtbGlrZSBpbnRlcmZhY2UgZm9yIEZUUAorICAgICAgICAgIGNvbm5lY3Rpb25zIGFu ZCB0aGUgbm9ybWFsIEtlcm1pdCBpbnRlcmZhY2UgZm9yIEtlcm1pdAorICAgICAgICAgIGNvbm5l Y3Rpb25zLCBhbmQgYSBTRVQgTE9DVVMgY29tbWFuZCAoZGVzY3JpYmVkIGJlbG93KSB0bworICAg ICAgICAgIGNvbnRyb2wgd2hldGhlciBvciBob3cgdGhpcyBpcyBkb25lLiBGb3Igd2hlbiBMT0NV UyBpcyBSRU1PVEUsIGEKKyAgICAgICAgICBuZXcgc2V0IG9mIGNvbW1hbmRzIHdhcyBhZGRlZCBm b3IgbG9jYWwgbWFuYWdlbWVudDogTENEIChMb2NhbAorICAgICAgICAgIENEKSwgTERJUiAoTG9j YWwgRElSKSwgZXRjLiBUaGVzZSBhcmUgZGVzY3JpYmVkIGJlbG93IHVuZGVyIFNFVAorICAgICAg ICAgIExPQ1VTLgorCisgICBNT1JFIGZpbGVuYW1lCisgICAgICAgICAgRXF1aXZhbGVudCB0byBU WVBFIC9QQUdFLgorCisgICBPUklFTlRBVElPTgorICAgICAgICAgIERpc3BsYXlzIHN5bWJvbGlj IGRpcmVjdG9yeSBuYW1lcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUKKyAgICAgICAg ICBuYW1lcyBhbmQgdmFsdWVzLiBUaGUgc3ltYm9saWMgbmFtZXMsIHN1Y2ggYXMgZXhlZGlyLCBp bmlkaXIsCisgICAgICAgICAgc3RhcnR1cCwgZG93bmxvYWQsIGFuZCBob21lLCBjYW4gYmUgdXNl ZCBhcyBhcmd1bWVudHMgdG8gdGhlIG5ldworICAgICAgICAgIEtDRCBjb21tYW5kLgorCisgICBQ Uk9NUFQgWyB0ZXh0IF0KKyAgICAgICAgICBGb3IgdXNlIGluIGEgbWFjcm8gb3IgY29tbWFuZCBm aWxlOiBlbnRlcnMgaW50ZXJhY3RpdmUgY29tbWFuZAorICAgICAgICAgIG1vZGUgd2l0aGluIHRo ZSBjdXJyZW50IGNvbnRleHQgKFszOThdU2VjdGlvbiA4LjEpLiBJZiB0aGUKKyAgICAgICAgICBv cHRpb25hbCB0ZXh0IGlzIGluY2x1ZGVkLCB0aGUgcHJvbXB0IGlzIHNldCB0byBpdC4gVGhlIHRl eHQgY2FuCisgICAgICAgICAgaW5jbHVkZSB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgZXRjLCBhcyBp biB0aGUgU0VUIFBST01QVCBjb21tYW5kLgorICAgICAgICAgIFRoZXkgYXJlIGV2YWx1YXRlZCBl YWNoIHRpbWUgdGhlIHByb21wdCBpcyBwcmludGVkLiBVbmxpa2UgdGhlCisgICAgICAgICAgU0VU IFBST01QVCBjb21tYW5kLCB0aGUgdGV4dCBhcmd1bWVudCBhcHBsaWVzIG9ubHkgdG8gdGhlCisg ICAgICAgICAgY3VycmVudCBjb21tYW5kIGxldmVsLiBUaHVzIHlvdSBjYW4gaGF2ZSBkaWZmZXJl bnQgcHJvbXB0cyBhdAorICAgICAgICAgIGRpZmZlcmVudCBsZXZlbHMuCisKKyAgIFJFTU9URSBT RVQgTUFUQ0ggeyBET1RGSUxFLCBGSUZPIH0geyBPTiwgT0ZGIH0KKyAgICAgICAgICBBbGxvd3Mg dGhlIGNsaWVudCB0byB0ZWxsIHRoZSBzZXJ2ZXIgd2hldGhlciB3aWxkY2FyZHMgc2VudCB0bwor ICAgICAgICAgIHRoZSBzZXJ2ZXIgc2hvdWxkIG1hdGNoIGRvdCBmaWxlcyAoZmlsZXMgd2hvc2Ug bmFtZXMgYmVnaW4gd2l0aAorICAgICAgICAgIHBlcmlvZCkgb3IgRklGT3MgKG5hbWVkIHBpcGVz KS4gU2VlIFNFVCBNQVRDSC4KKworICAgU0VUIEFUVFJJQlVURSBSRUNPUkQtRk9STUFUIHsgT04s IE9GRiB9CisgICAgICAgICAgQWxsb3dzIGNvbnRyb2wgb2YgdGhlIEtlcm1pdCdzIFJlY29yZC1G b3JtYXQgYXR0cmlidXRlLiBTZXQgdGhpcworICAgICAgICAgIHRvIE9GRiBpbiBjYXNlIGluY29t aW5nIGZpbGUgYXJlIHJlZnVzZWQgZHVlIHRvIHVua25vd24gb3IKKyAgICAgICAgICBpbnZhbGlk IHJlY29yZCBmb3JtYXRzIGlmIHlvdSB3YW50IHRvIGFjY2VwdCB0aGUgZmlsZSBhbnl3YXkKKyAg ICAgICAgICAoYW5kLCBwZXJoYXBzLCBwb3N0cHJvY2VzcyBpdCB0byBmaXggaXRzIHJlY29yZCBm b3JtYXQpLgorCisgICBTRVQgQ0QgSE9NRSBbIGRpcmVjdG9yeSBdCisgICAgICAgICAgU3BlY2lm aWVzIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGZvciB0aGUgQ0QgYW5kIEtDRCBjb21tYW5kcywgd2hl bgorICAgICAgICAgIHRoZXkgYXJlIGdpdmVuIHdpdGhvdXQgYW4gYXJndW1lbnQsIGFuZCBhbHNv IHNldHMgdGhlIHZhbHVlIG9mCisgICAgICAgICAgdGhlIFx2KGhvbWUpIHZhcmlhYmxlLgorCisg ICBTRVQgRVhJVCBIQU5HVVAgeyBPRkYsIE9OIH0KKyAgICAgICAgICBOb3JtYWxseSBPTiwgbWVh bmluZyB0aGF0IHdoZW4gS2VybWl0IGV4aXRzLCBpdCBhbHNvIGV4cGxpY2l0bHkKKyAgICAgICAg ICBoYW5ncyB1cCB0aGUgY3VycmVudCBTRVQgTElORSAvIFNFVCBQT1JUIHNlcmlhbCBwb3J0IGFj Y29yZGluZworICAgICAgICAgIHRvIHRoZSBjdXJyZW50IFNFVCBNT0RFTSBUWVBFIGFuZCBTRVQg TU9ERU0gSEFOR1VQIE1FVEhPRCwgYW5kCisgICAgICAgICAgY2xvc2VzIHRoZSBwb3J0IGRldmlj ZSBpZiBpdCB3YXMgb3BlbmVkIGJ5IEtlcm1pdCBpbiB0aGUgZmlyc3QKKyAgICAgICAgICBwbGFj ZSAoYXMgb3Bwb3NlZCB0byBpbmhlcml0ZWQpLiBTRVQgRVhJVCBIQU5HVVAgT0ZGIHRlbGxzCisg ICAgICAgICAgS2VybWl0IG5vdCB0byBkbyB0aGlzLiBUaGlzIGNhbid0IHByZXZlbnQgdGhlIG9w ZXJhdGluZyBzeXN0ZW0KKyAgICAgICAgICBmcm9tIGNsb3NpbmcgdGhlIGRldmljZSB3aGVuIEtl cm1pdCBleGl0cyAoYW5kIGl0J3MgYSAibGFzdAorICAgICAgICAgIGNsb3NlIikgYnV0IGlmIHRo ZSBwb3J0IG9yIG1vZGVtIGhhdmUgYmVlbiBjb25kaXRpb25lZCB0bworICAgICAgICAgIHNvbWVo b3cgaWdub3JlIHRoZSBjbG9zZSBhbmQga2VlcCB0aGUgY29ubmVjdGlvbiBvcGVuLCBhdCBsZWFz dAorICAgICAgICAgIEtlcm1pdCBpdHNlbGYgd29uJ3QgZG8gYW55dGhpbmcgZXhwbGljaXQgdG8g aGFuZyBpdCB1cCBvciBjbG9zZQorICAgICAgICAgIGl0LgorCisgICBTRVQgRklMRSBFT0YgeyBD VFJMLVosIExFTkdUSCB9CisgICAgICAgICAgU3BlY2lmaWVzIHRoZSBlbmQtb2YtZmlsZSBkZXRl Y3Rpb24gbWV0aG9kIHRvIGJlIHVzZWQgYnkKKyAgICAgICAgICBDLUtlcm1pdCB3aGVuIHNlbmRp bmcgYW5kIHJlY2VpdmluZyB0ZXh0IGZpbGVzLCBhbmQgaW4gdGhlIFRZUEUKKyAgICAgICAgICBh bmQgc2ltaWxhciB0ZXh0LWZpbGUgb3JpZW50ZWQgY29tbWFuZHMuIFRoZSBub3JtYWwgYW5kIGRl ZmF1bHQKKyAgICAgICAgICBtZXRob2QgaXMgTEVOR1RILiBZb3UgY2FuIHNwZWNpZnkgQ1RSTC1a IHdoZW4gaGFuZGxpbmcgQ1AvTSBvcgorICAgICAgICAgIE1TLURPUyBmb3JtYXQgdGV4dCBmaWxl cywgaW4gd2hpY2ggYSBDdHJsLVogKEFTQ0lJIDI2KSBjaGFyYWN0ZXIKKyAgICAgICAgICB3aXRo aW4gdGhlIGZpbGUgbWFya3MgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKworICAgU0VUIEZJTEUgTElT VFNJWkUgbnVtYmVyCisgICAgICAgICAgQWxsb2NhdGVzIHNwYWNlIGZvciB0aGUgZ2l2ZW4gbnVt YmVyIG9mIGZpbGVuYW1lcyB0byBiZSBmaWxsZWQKKyAgICAgICAgICBpbiBieSB0aGUgd2lsZGNh cmQgZXhwYW5kZXIuIFRoZSBjdXJyZW50IG51bWJlciBpcyBzaG93biBieSBTSE9XCisgICAgICAg ICAgRklMRS4gSWYgeW91IGdpdmUgYSBjb21tYW5kIHRoYXQgaW5jbHVkZXMgYSBmaWxlbmFtZSBj b250YWluaW5nCisgICAgICAgICAgYSB3aWxkY2FyZCAoc3VjaCBhcyAiKiIpIHRoYXQgbWF0Y2hl cyBtb3JlIGZpbGVzIHRoYXQgS2VybWl0J3MKKyAgICAgICAgICBsaXN0IGhhcyByb29tIGZvciwg eW91IGNhbiBhZGp1c3QgdGhlIGxpc3Qgc2l6ZSB3aXRoIHRoaXMKKyAgICAgICAgICBjb21tYW5k LgorCisgICBTRVQgRklMRSBTVFJJTkdTUEFDRSBudW1iZXIKKyAgICAgICAgICBBbGxvY2F0ZXMg c3BhY2UgZm9yIHRoZSBnaXZlbiBhbW91bnQgb2YgZmlsZW5hbWUgc3RyaW5ncyBmb3IgdXNlCisg ICAgICAgICAgYnkgdGhlIHdpbGRjYXJkIGV4cGFuZGVyLiBUaGUgY3VycmVudCBudW1iZXIgaXMg c2hvd24gYnkgU0hPVworICAgICAgICAgIEZJTEUuIFRoZSBudW1iZXIgaXMgdGhlIHRvdGFsIG51 bWJlciBvZiBieXRlcyBvZiBhbGwgdGhlIGZpbGUKKyAgICAgICAgICBzcGVjaWZpY2F0aW9ucyB0 aGF0IG1hdGNoIHRoZSBnaXZlbiB3aWxkY2FyZC4KKworICAgICBJZiB5b3UgbmVlZCB0byBwcm9j ZXNzIGEgYmlnZ2VyIGxpc3Qgb2YgZmlsZXMgdGhhbiB5b3VyIGNvbXB1dGVyIGhhcworICAgICBt ZW1vcnkgZm9yLCB5b3UgbWlnaHQgYmUgYWJsZSB1c2UgYW4gZXh0ZXJuYWwgZmlsZSBsaXN0LiBU aGUgS2VybWl0CisgICAgIFNFTkQgYW5kIHRoZSBGVFAgUFVUIGFuZCBHRVQgY29tbWFuZHMgYWNj ZXB0IGEgL0xJU1RGSUxFOiBzd2l0Y2gsCisgICAgIHdoaWNoIGdpdmVzIHRoZSBuYW1lIG9mIGEg ZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGJlCisgICAgIHRyYW5zZmVy cmVkLiBFeGFtcGxlIGZvciBVTklYOgorCisgICFmaW5kIC4gLXByaW50IHwgZ3JlcCAvID4gL3Rt cC9uYW1lcworICBmdHAgcHV0IC91cGRhdGUgL3JlY3Vyc2l2ZSAvbGlzdGZpbGU6L3RtcC9uYW1l cworCisgICBTRVQgTE9DVVMgeyBBVVRPLCBMT0NBTCwgUkVNT1RFIH0KKyAgICAgICAgICBBZGRl ZCBpbiBDLUtlcm1pdCA4LjAuMjAxLiAgIFNldHMgdGhlIGxvY3VzIGZvciB1bnByZWZpeGVkIGZp bGUKKyAgICAgICAgICBtYW5hZ2VtZW50IGNvbW1hbmRzIHN1Y2ggYXMgQ0QsIERJUkVDVE9SWSwg TUtESVIsIGV0Yy4gV2hlbgorICAgICAgICAgIExPQ1VTIGlzIExPQ0FMIHRoZXNlIGNvbW1hbmRz IGFjdCBsb2NhbGx5IGFuZCBhIFJFTU9URSAob3IgUikKKyAgICAgICAgICBwcmVmaXggKGUuZy4g UkVNT1RFIENELCBSQ0QsIFJESVIpIGlzIHJlcXVpcmVkIHRvIHNlbmQgZmlsZQorICAgICAgICAg IG1hbmFnZW1lbnQgY29tbWFuZHMgdG8gYSByZW1vdGUgc2VydmVyLiBXaGVuIExPQ1VTIGlzIFJF TU9URSwgYW4KKyAgICAgICAgICBMIHByZWZpeCBpcyByZXF1aXJlZCB0byBpc3N1ZSBsb2NhbCBm aWxlIG1hbmFnZW1lbnQgY29tbWFuZHMKKyAgICAgICAgICAoZS5nLiBMQ0QsIExESVIpLiBUaGUg d29yZCBMT0NBTCBjYW4ndCBiZSB1c2VkIGFzIGEgcHJlZml4IHNpbmNlCisgICAgICAgICAgaXQg aXMgYWxyZWFkeSB1c2VkIGZvciBkZWNsYXJpbmcgbG9jYWwgdmFyaWFibGVzLiBMT0NVUyBhcHBs aWVzCisgICAgICAgICAgdG8gYWxsIHR5cGVzIG9mIGNvbm5lY3Rpb25zLCBhbmQgdGh1cyBpcyBv cnRob2dvbmFsIHRvIFNFVAorICAgICAgICAgIEdFVC1QVVQtUkVNT1RFLCB3aGljaCBzZWxlY3Rz IGJldHdlZW4gS2VybWl0IGFuZCBGVFAgZm9yIHJlbW90ZQorICAgICAgICAgIGZpbGUtdHJhbnNm ZXIgYW5kIG1hbmFnZW1lbnQgY29tbWFuZHMuIFRoZSBkZWZhdWx0IExPQ1VTIGlzCisgICAgICAg ICAgQVVUTywgd2hpY2ggbWVhbnMgd2Ugc3dpdGNoIHRvIFJFTU9URSB3aGVuZXZlciBhbiBGVFAg Y29ubmVjdGlvbgorICAgICAgICAgIGlzIG1hZGUsIGFuZCB0byBMT0NBTCB3aGVuZXZlciBhIG5v bi1GVFAgY29ubmVjdGlvbiBpcyBtYWRlLCBhbmQKKyAgICAgICAgICBzd2l0Y2ggYmFjayBhY2Nv cmRpbmdseSB3aGVuZXZlciBhIGNvbm5lY3Rpb24gaXMgY2xvc2VkLiBTbyBieQorICAgICAgICAg IGRlZmF1bHQsIEtlcm1pdCBiZWhhdmVzIGluIGl0cyB0cmFkaXRpb25hbCBtYW5uZXIgdW5sZXNz IHlvdQorICAgICAgICAgIG1ha2UgYW4gRlRQIGNvbm5lY3Rpb24sIGluIHdoaWNoIGNhc2UgaXQg YWN0cyBsaWtlIGEgcmVndWxhciBGVFAKKyAgICAgICAgICBjbGllbnQgKGJ1dCBiZXR0ZXIgOi0p ICAgTE9DVVMgYXBwbGllcyB0byB0aGUgZm9sbG93aW5nCisgICAgICAgICAgY29tbWFuZHM6CisK KyAgVW5wcmVmaXhlZCAgICBSZW1vdGUgICAgICAgTG9jYWwgICAgICAgIERlc2NyaXB0aW9uCisg ICBDRCAoQ1dEKSAgICAgIFJDRCAgICAgICAgICBMQ0QgICAgICAgICAgQ2hhbmdlIChXb3JraW5n KSBEaXJlY3RvcnkKKyAgIENEVVAgICAgICAgICAgUkNEVVAgICAgICAgIExDRFVQICAgICAgICBD RCBVcAorICAgUFdEICAgICAgICAgICBSUFdEICAgICAgICAgTFBXRCAgICAgICAgIFByaW50IFdv cmtpbmcgRGlyZWN0b3J5CisgICBESVJFQ1RPUlkgICAgIFJESVIgICAgICAgICBMRElSICAgICAg ICAgUmVxdWVzdCBhIGRpcmVjdG9yeSBsaXN0aW5nCisgICBERUxFVEUgICAgICAgIFJERUwgICAg ICAgICBMREVMICAgICAgICAgRGVsZXRlIChhKSBmaWxlKHMpCisgICBSRU5BTUUgICAgICAgIFJS RU4gICAgICAgICBMUkVOICAgICAgICAgUmVuYW1lIGEgZmlsZQorICAgTUtESVIgICAgICAgICBS TUtESVIgICAgICAgTE1LRElSICAgICAgIENyZWF0ZSBhIGRpcmVjdG9yeQorICAgUk1ESVIgICAg ICAgICBSUk1ESVIgICAgICAgTFJNRElSICAgICAgIFJlbW92ZSBhIGRpcmVjdG9yeQorCisgICBT RVQgTUFUQ0ggeyBET1RGSUxFLCBGSUZPIH0geyBPTiwgT0ZGIH0KKyAgICAgICAgICBXaGV0aGVy IEMtS2VybWl0IGZpbGVuYW1lIHBhdHRlcm5zICh3aWxkY2FyZHMpIHNob3VsZCBtYXRjaAorICAg ICAgICAgIGZpbGVuYW1lcyB0aGF0IHN0YXJ0IHdpdGggZG90IChwZXJpb2QpLCBvciAoVW5peCBv bmx5KSBGSUZPcworICAgICAgICAgIChuYW1lZCBwaXBlcykuIFRoZSBkZWZhdWx0cyBhcmUgdG8g c2tpcCBkb3RmaWxlcyBpbiBVbml4IGJ1dAorICAgICAgICAgIG1hdGNoIHRoZW0gZWxzZXdoZXJl LCBhbmQgdG8gc2tpcCBGSUZPcy4gQXBwbGllcyB0byBib3RoCisgICAgICAgICAgaW50ZXJhY3Rp dmUgdXNlIGFuZCB0byBzZXJ2ZXIgbW9kZSwgd2hlbiB0aGUgc2VydmVyIHJlY2VpdmVzCisgICAg ICAgICAgd2lsZGNhcmRzLCBlLmcuIGluIGEgR0VUIGNvbW1hbmQuIEFsc28gc2VlIFJFTU9URSBT RVQgTUFUQ0guCisKKyAgIFNFVCBPUFRJT05TIERJUkVDVE9SWSAvRE9URklMRVMKKyAgICAgICAg ICBOb3cgd29ya3MgZm9yIHNlcnZlciBsaXN0aW5ncyB0b28gKFVOSVggb25seSkuIEdpdmUgdGhp cyBjb21tYW5kCisgICAgICAgICAgcHJpb3IgdG8gaGF2aW5nIEtlcm1pdCBlbnRlciBzZXJ2ZXIg bW9kZSwgYW5kIHRoZW4gaXQgd2lsbCBzaG93CisgICAgICAgICAgZmlsZXMgd2hvc2UgbmFtZXMg YmVnaW4gd2l0aCBkb3QgKHBlcmlvZCkgd2hlbiBzZW50IGEgUkVNT1RFCisgICAgICAgICAgRElS RUNUT1JZIGNvbW1hbmQuCisKKyAgIFNFVCBRVUlFVCBPTgorICAgICAgICAgIChhcyB3ZWxsIGFz IHRoZSAtcSBjb21tYW5kLWxpbmUgb3B0aW9uKSBOb3cgYXBwbGllcyBhbHNvIHRvOgorCisgICAg ICAgICAgKyBTRVQgSE9TVCBjb25uZWN0aW9uIHByb2dyZXNzIG1lc3NhZ2VzLgorICAgICAgICAg ICsgIlByZXNzIHRoZSBYIG9yIEUga2V5IHRvIGNhbmNlbCIgZmlsZS10cmFuc2ZlciBtZXNzYWdl LgorICAgICAgICAgICsgUkVNT1RFIENEIHJlc3BvbnNlLgorICAgICAgICAgICsgUkVNT1RFIExP R0lOIHJlc3BvbnNlLgorCisgICBTRVQgUkVDRUlWRSBQRVJNSVNTSU9OUyB7IE9OLCBPRkYgfQor ICAgICAgICAgIFRlbGxzIEMtS2VybWl0IHdoZXRoZXIgdG8gc2V0IHRoZSBwZXJtaXNzaW9ucyBv ZiBpbmNvbWluZyBmaWxlcworICAgICAgICAgIChyZWNlaXZlZCB3aXRoIEtlcm1pdCBwcm90b2Nv bCkgZnJvbSB0aGUgcGVybWlzc2lvbnMgc3VwcGxpZWQgaW4KKyAgICAgICAgICB0aGUgZmlsZSdz IEF0dHJpYnV0ZSBwYWNrZXQgKGlmIGFueSkuIE5vcm1hbGx5IE9OLiBBbHNvIHNlZSBTRVQKKyAg ICAgICAgICBTRU5EIFBFUk1JU1NJT05TLgorCisgICBTRVQgUk9PVCBkaXJlY3RvcnkKKyAgICAg ICAgICBMaWtlIFVOSVggY2hyb290LCB3aXRob3V0IHJlcXVpcmluZyBwcml2aWxlZ2UuIFNldHMg dGhlIHJvb3QgZm9yCisgICAgICAgICAgZmlsZSBhY2Nlc3MsIGRvZXMgbm90IGFsbG93IHJlZmVy ZW5jZSB0byBvciBjcmVhdGlvbiBvZiBmaWxlcworICAgICAgICAgIG91dHNpZGUgdGhlIHJvb3Qs IGFuZCBjYW4ndCBiZSB1bmRvbmUuCisKKyAgIFNFVCBTRU5EIFBFUk1JU1NJT05TIHsgT04sIE9G RiB9CisgICAgICAgICAgVGVsbHMgQy1LZXJtaXQgd2hldGhlciB0byBpbmNsdWRlIGZpbGUgcGVy bWlzc2lvbnMgaW4gdGhlCisgICAgICAgICAgYXR0cmlidXRlcyBpdCBpbmNsdWRlcyB3aXRoIGVh Y2ggZmlsZSB3aGVuIHNlbmRpbmcgd2l0aCBLZXJtaXQKKyAgICAgICAgICBwcm90b2NvbC4gQWxz byBzZWUgU0VUIFJFQ0VJVkUgUEVSTUlTU0lPTlMuCisKKyAgIFNFVCBUQ1AgeyBIVFRQLVBST1hZ LCBTT0NLUy1TRVJWRVIgfSAvVVNFUjpuYW1lIC9QQVNTV09SRDp0ZXh0CisgICAgICAgICAgVGhl c2UgY29tbWFuZHMgbm93IGFsbG93IHNwZWNpZmljYXRpb24gb2YgdXNlcm5hbWUgYW5kIHBhc3N3 b3JkLgorCisgICBTRVQgVEVSTUlOQUwgLiAuIC4KKyAgICAgICAgICAoU2VlIFszOTldU2VjdGlv biAxMi4pCisKKyAgIFNFVCBUUkFOU0ZFUiBNRVNTQUdFIFsgdGV4dCBdCisgICAgICAgICAgU2V0 cyBhbiBpbml0aWFsIHRleHQgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlCisgICAgICAg ICAgZmlsZS10cmFuc2ZlciBkaXNwbGF5LiBUaGUgdHJhbnNmZXIgbWVzc2FnZSBpcyBhdXRvbWF0 aWNhbGx5CisgICAgICAgICAgZGVsZXRlZCBvbmNlIHVzZWQsIHNvIG11c3QgYmUgc2V0IGVhY2gg dGltZSBhIG1lc3NhZ2UgYSBkZXNpcmVkLgorICAgICAgICAgIEFueSB2YXJpYWJsZXMgaW4gdGhl IG1lc3NhZ2UgYXJlIGV2YWx1YXRlZCBhdCB0aGUgdGltZSB0aGUgU0VUCisgICAgICAgICAgY29t bWFuZCBpcyBnaXZlbi4gSWYgdGhlIG9wdGlvbmFsIHRleHQgaXMgb21pdHRlZCwgYW55IHRyYW5z ZmVyCisgICAgICAgICAgbWVzc2FnZSB0aGF0IGlzIGN1cnJlbnRseSBzZXQgaXMgcmVtb3ZlZC4g U3lub255bTogU0VUIFhGRVIgTVNHLgorICAgICAgICAgIFNIT1cgVFJBTlNGRVIgZGlzcGxheXMg aXQgaWYgaXQgaGFzIGJlZW4gc2V0IGJ1dCBub3QgeWV0IHVzZWQuCisKKyAgIFNIT1cgQ09NTVVO SUNBVElPTlMKKyAgICAgICAgICBJbiBDLUtlcm1pdCA4LjAsIFNIT1cgQ09NTVVOSUNBVElPTlMs IHdoZW4gZ2l2ZW4gaW4gcmVtb3RlIG1vZGUKKyAgICAgICAgICAoaS5lLiBiZWZvcmUgYW55IGNv bm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQpLCB0ZWxscyB0aGUKKyAgICAgICAgICB0eXBp Y2FsIGRpYWxvdXQgZGV2aWNlIG5hbWUgZm9yIHRoZSBwYXJ0aWN1bGFyIHBsYXRmb3JtIG9uIHdo aWNoCisgICAgICAgICAgaXQncyBydW5uaW5nIChlLmcuIFRYQTA6IGZvciBWTVMsIG9yIC9kZXYv Y3VhMHAwIGZvciBIUC1VWCkuIE9uCisgICAgICAgICAgVW5peCBwbGF0Zm9ybXMsIGl0IGFsc28g dGVsbHMgdGhlIG5hbWUgb2YgdGhlIGxvY2tmaWxlCisgICAgICAgICAgZGlyZWN0b3J5LiBUaGlz IHdheSwgeW91IGhhdmUgYW4gaWRlYSBvZiB3aGF0IHRoZSBTRVQgTElORQorICAgICAgICAgIGRl dmljZSBuYW1lIHNob3VsZCBsb29rIGxpa2UsIGFuZCBpZiB0aGUgU0VUIExJTkUgY29tbWFuZCBm YWlscywKKyAgICAgICAgICB5b3Uga25vdyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IG9yIGRl dmljZSB0aGF0IGlzIHByb3RlY3RlZAorICAgICAgICAgIGFnYWluc3QgeW91LgorCisgICBTSE9X IFZBUklBQkxFUyBbIG5hbWUgWyBuYW1lIFsgLi4uIF0gXSBdCisgICAgICAgICAgSW4gQy1LZXJt aXQgOC4wLjIwMSB5b3UgY2FuIHJlcXVlc3QgdmFsdWVzIG9mIGEgbGlzdCBvZiBidWlsdC1pbgor ICAgICAgICAgIChcdih4eHgpKSB2YXJpYWJsZXMuIEVhY2ggbmFtZSBpcyBhIHBhdHRlcm4sIGFz IGJlZm9yZSwgYnV0IG5vdworICAgICAgICAgIGl0IGEgZnJlZSBwYXR0ZXJuIHJhdGhlciB0aGFu IGFuIGFuY2hvcmVkIG9uZSAoZXhwbGFpbmVkIGluCisgICAgICAgICAgWzQwMF1TZWN0aW9uIDgu MTIpIHNvIG5vdyAic2hvdyB2YXIgZGF0ZSB0aW1lIiBzaG93cyB0aGUgdmFsdWVzCisgICAgICAg ICAgb2YgYWxsIHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBpbmNsdWRlIHRoZSBzdHJpbmdzICJkYXRl IiBvcgorICAgICAgICAgICJ0aW1lIi4KKworICAgVEFJTCBbIHN3aXRjaGVzIF0gZmlsZW5hbWUK KyAgICAgICAgICBFcXVpdmFsZW50IHRvIFRZUEUgL1RBSUwgWyBvdGhlci1zd2l0Y2hlcyBdIGZp bGVuYW1lLgorCisgICBUUkFOU01JVCAvTk9FQ0hPIFsgb3RoZXIgc3dpdGNoZXMgXSBmaWxlbmFt ZQorICAgICAgICAgIFRoZSAvTk9FQ0hPIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIGdpdmluZyB0 aGUgY29tbWFuZCBTRVQKKyAgICAgICAgICBUUkFOU01JVCBFQ0hPIE9GRiBwcmlvciB0byB0aGUg VFJBTlNNSVQgY29tbWFuZCwgZXhjZXB0IHRoZQorICAgICAgICAgIHN3aXRjaCBhZmZlY3RzIG9u bHkgdGhlIGNvbW1hbmQgd2l0aCB3aGljaCBpdCB3YXMgZ2l2ZW4gYW5kIGRvZXMKKyAgICAgICAg ICBub3QgYWZmZWN0IHRoZSBwcmV2YWlsaW5nIGdsb2JhbCBzZXR0aW5nLgorCisgICBUUkFOU01J VCAvTk9XQUlUIFsgb3RoZXIgc3dpdGNoZXMgXSBmaWxlbmFtZQorICAgICAgICAgIFRoZSAvTk9X QUlUIHN3aXRjaCBpcyBlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUgY29tbWFuZCBTRVQKKyAgICAg ICAgICBUUkFOU01JVCBQUk9NUFQgMCBwcmlvciB0byB0aGUgVFJBTlNNSVQgY29tbWFuZCwgZXhj ZXB0IHRoZQorICAgICAgICAgIHN3aXRjaCBhZmZlY3RzIG9ubHkgdGhlIGNvbW1hbmQgd2l0aCB3 aGljaCBpdCB3YXMgZ2l2ZW4gYW5kIGRvZXMKKyAgICAgICAgICBub3QgYWZmZWN0IHRoZSBwcmV2 YWlsaW5nIGdsb2JhbCBzZXR0aW5nLgorCisgICBUUkFOU01JVCAvTk9XQUlUIC9OT0VDSE8gL0JJ TkFSWSBbIG90aGVyIHN3aXRjaGVzIF0gZmlsZW5hbWUKKyAgICAgICAgICBXaGVuIHRoZSBUUkFO U01JVCBjb21tYW5kIGlzIGdpdmVuIHdpdGggdGhlIC9OT1dBSVQsIC9OT0VDSE8sCisgICAgICAg ICAgYW5kIC9CSU5BUlkgc3dpdGNoZXMsIHRoaXMgYWN0aXZhdGVzIGEgc3BlY2lhbCAiYmxhc3Qg dGhlIHdob2xlCisgICAgICAgICAgZmlsZSBvdXQgdGhlIGNvbW11bmljYXRpb25zIGNvbm5lY3Rp b24gYWxsIGF0IG9uY2UiIG1vZGUgdGhhdAorICAgICAgICAgIEtlcm1pdCBkaWRuJ3QgaGF2ZSBw cmlvciB0byB2ZXJzaW9uIDguMC4gVGhlcmUgaGFzIGJlZW4KKyAgICAgICAgICBpbmNyZWFzaW5n IGRlbWFuZCBmb3IgdGhpcyB0eXBlIG9mIHRyYW5zbWlzc2lvbiB3aXRoIHRoZSBhZHZlbnQKKyAg ICAgICAgICBvZiBkZXZpY2VzIHRoYXQgZXhwZWN0IGltYWdlIChlLmcuIC5KUEcpIG9yIHNvdW5k IChlLmcuIC5NUDMpCisgICAgICAgICAgZmlsZXMgYXMgcmF3IGlucHV0LiBUaGUgb2J2aW91cyBx dWVzdGlvbiBpczogaG93IGRvZXMgdGhlCisgICAgICAgICAgcmVjZWl2aW5nIGRldmljZSBrbm93 IHdoZW4gaXQgaGFzIHRoZSB3aG9sZSBmaWxlPyBUaGlzIGRlcGVuZHMKKyAgICAgICAgICBvbiB0 aGUgZGV2aWNlLCBvZiBjb3Vyc2U7IHVzdWFsbHkgYWZ0ZXIgYSBjZXJ0YWluIGFtb3VudCBvZiB0 aW1lCisgICAgICAgICAgZWxhcHNlcyB3aXRoIG5vdGhpbmcgYXJyaXZpbmcsIG9yIGVsc2Ugd2hl biBLZXJtaXQgaGFuZ3MgdXAgb3IKKyAgICAgICAgICBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCisK KyAgIFRZUEUgL0NIQVJBQ1RFUi1TRVQ6bmFtZQorICAgICAgICAgIEFsbG93cyB5b3UgdG8gc3Bl Y2lmeSB0aGUgY2hhcmFjdGVyIHNldCBpbiB3aGljaCB0aGUgZmlsZSB0byBiZQorICAgICAgICAg IHR5cGVkIGlzIGVuY29kZWQuCisKKyAgIFRZUEUgL05VTUJFUgorICAgICAgICAgIEFkZHMgbGlu ZSBudW1iZXJzLgorCisgICBUWVBFIC9PVVRQVVQ6ZmlsZW5hbWUKKyAgICAgICAgICBTZW5kcyB0 aGUgcmVzdWx0cyBvZiB0aGUgVFlQRSBjb21tYW5kIHRvIHRoZSBnaXZlbiBmaWxlLgorCisgICBU WVBFIC9UUkFOU0xBVEUtVE86bmFtZQorICAgICAgICAgIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0 aCBUWVBFIC9DSEFSQUNURVItU0VUOnh4eDsgYWxsb3dzIHlvdSB0bworICAgICAgICAgIHNwZWNp ZnkgdGhlIGNoYXJhY3RlciBzZXQgaW4gd2hpY2ggdGhlIGZpbGUgaXMgdG8gYmUgZGlzcGxheWVk LgorCisgICBUWVBFIC9UUkFOU1BBUkVOVAorICAgICAgICAgIFVzZWQgdG8gZGlzYWJsZSBjaGFy YWN0ZXItc2V0IHRyYW5zbGF0aW9uIGluIHRoZSBUWVBFIGNvbW1hbmQsCisgICAgICAgICAgd2hp Y2ggb3RoZXJ3aXNlIGNhbiB0YWtlIHBsYWNlIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gZmlsZQor ICAgICAgICAgIHNjYW5uaW5nLCBldmVuIHdoZW4gL0NIQVJBQ1RFUi1TRVQgYW5kIC9UUkFOU0xB VEUtVE8gc3dpdGNoZXMKKyAgICAgICAgICBhcmUgbm90IGdpdmVuLgorCisgICBWT0lEIHRleHQK KyAgICAgICAgICBQYXJzZXMgdGhlIHRleHQsIGV2YWx1YXRpbmcgYW55IGJhY2tzbGFzaCBpdGVt cyBpbiBpdCAoc3VjaCBhcworICAgICAgICAgIGZ1bmN0aW9uIGNhbGxzKSBidXQgZG9lc24ndCBk byBhbnl0aGluZyBmdXJ0aGVyLCBleGNlcHQgcG9zc2libHkKKyAgICAgICAgICBwcmludGluZyBl cnJvciBtZXNzYWdlcy4gVXNlZnVsIGZvciBpbnZva2luZyBmdW5jdGlvbnMgdGhhdCBoYXZlCisg ICAgICAgICAgc2lkZSBlZmZlY3RzIHdpdGhvdXQgdXNpbmcgb3IgcHJpbnRpbmcgdGhlaXIgZGly ZWN0IHJlc3VsdHMsCisgICAgICAgICAgZS5nLiAidm9pZCBcZnNwbGl0KFwlYSwmYSkiLgorCitT eW1ib2xpYyBMaW5rcyBpbiBVTklYCisKKyAgIFRoZSBVTklYIHZlcnNpb25zIG9mIEMtS2VybWl0 IGhhdmUgaGFkIC9GT0xMT1dMSU5LUyBhbmQgL05PRk9MTE9XTElOS1MKKyAgIHN3aXRjaGVzIGFk ZGVkIHRvIHNldmVyYWwgY29tbWFuZHMgdG8gY29udHJvbCB0aGUgdHJlYXRtZW50IG9mIHN5bWJv bGljCisgICBsaW5rcy4gRGlmZmVyZW50IGNvbW1hbmRzIGRlYWwgZGlmZmVyZW50bHkgd2l0aCBz eW1ib2xpYyBsaW5rczoKKworICAgS2VybWl0IFNFTkQsIEZUUCBNUFVUCisgICAgICAgICAgL05P Rk9MTE9XTElOS1MgaXMgdGhlIGRlZmF1bHQsIHdoaWNoIG1lYW5zIHN5bWJvbGljIGxpbmtzIGFy ZQorICAgICAgICAgIHNraXBwZWQgZW50aXJlbHkuIFRoZSBhbHRlcm5hdGl2ZSwgL0ZPTExPV0xJ TktTLCBzaG91bGQgYmUgdXNlZAorICAgICAgICAgIHdpdGggY2F1dGlvbiwgc2luY2UgYW4gaW5u b2NlbnQgbGluayBtaWdodCBwb2ludCB0byBhIHdob2xlIGZpbGUKKyAgICAgICAgICBzeXN0ZW0s IG9yIGl0IG1pZ2h0IGNhdXNlIGEgbG9vcC4gVGhlcmUgaXMgbm8gd2F5IGluIEtlcm1pdCBvcgor ICAgICAgICAgIEZUUCBwcm90b2NvbCB0byBzZW5kIHRoZSBsaW5rIGl0c2VsZi4gV2UgZWl0aGVy IHNraXAgdGhlbSBvcgorICAgICAgICAgIGZvbGxvdyB0aGVtOyB3ZSBjYW4ndCBkdXBsaWNhdGUg dGhlbS4KKworICAgRElSRUNUT1JZCisgICAgICAgICAgL05PRk9MTE9XTElOS1MgaXMgdGhlIGRl ZmF1bHQsIHdoaWNoIG1lYW5zIHRoZSBESVJFQ1RPUlkgY29tbWFuZAorICAgICAgICAgIGxpc3Rz IHN5bWJvbGljIGxpbmtzIGluIGEgd2F5IHRoYXQgc2hvd3MgdGhleSBhcmUgbGlua3MsIGJ1dCBp dAorICAgICAgICAgIGRvZXMgbm90IGZvbGxvdyB0aGVtLiBUaGUgYWx0ZXJuYXRpdmUsIC9GT0xM T1dMSU5LUywgZm9sbG93cworICAgICAgICAgIGxpbmtzIGFuZCBnaXZlcyBpbmZvcm1hdGlvbiBh Ym91dCB0aGUgbGlua2VkLXRvIGRpcmVjdG9yaWVzIGFuZAorICAgICAgICAgIGZpbGVzLgorCisg ICBERUxFVEUsIFJNRElSCisgICAgICAgICAgVGhlIERFTEVURSBjb21tYW5kIGRvZXMgbm90IGhh dmUgbGluay1zcGVjaWZpYyBzd2l0Y2hlcy4gREVMRVRFCisgICAgICAgICAgbmV2ZXIgZm9sbG93 cyBsaW5rcy4gSWYgeW91IHRlbGwgS2VybWl0IHRvIGRlbGV0ZSBhIHN5bWJvbGljCisgICAgICAg ICAgbGluaywgaXQgZGVsZXRlcyB0aGUgbGluayBpdHNlbGYsIG5vdCB0aGUgbGlua2VkLXRvIGZp bGUuIERpdHRvCisgICAgICAgICAgZm9yIFJNRElSLgorCisgICBDT1BZCisgICAgICAgICAgVGhl IENPUFkgY29tbWFuZCBiZWhhdmVzIGp1c3QgbGlrZSB0aGUgVU5JWCBjcCBjb21tYW5kOyBpdAor ICAgICAgICAgIGFsd2F5cyBmb2xsb3dzIGxpbmtzLgorCisgICBSRU5BTUUKKyAgICAgICAgICBU aGUgUkVOQU1FIGNvbW1hbmQgYmVoYXZlcyBqdXN0IGxpa2UgdGhlIFVOSVggbXYgY29tbWFuZDsg aXQKKyAgICAgICAgICBvcGVyYXRlcyBvbiBsaW5rcyBkaXJlY3RseSByYXRoZXIgdGhhbiBmb2xs b3dpbmcuCisKKyAgIFsgWzQwMV1Ub3AgXSBbIFs0MDJdQ29udGVudHMgXSBbIFs0MDNdQy1LZXJt aXQgSG9tZSBdIFsgWzQwNF1LZXJtaXQKKyAgIEhvbWUgXQorCis4LiBPVEhFUiBTQ1JJUFRJTkcg SU1QUk9WRU1FTlRTCisKKzguMS4gUGVyZm9ybWFuY2UgYW5kIERlYnVnZ2luZworCisgICBBIGNv bW1hbmQgY2FjaGUgZm9yIGZyZXF1ZW50bHkgdXNlZCBjb21tYW5kcyBwbHVzIHNvbWUgcmVsYXRl ZAorICAgb3B0aW1pemF0aW9ucyBpbmNyZWFzZXMgdGhlIHNwZWVkIG9mIGNvbXB1dGUtYm91bmQg c2NyaXB0cyBieSBhbnl3aGVyZQorICAgZnJvbSA1MCUgdG8gMTAwMCUuCisKKyAgIFRoZSBuZXcg UFJPTVBUIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gc2V0IGJyZWFrcG9pbnRzIGZvciBkZWJ1Z2dp bmcKKyAgIHNjcmlwdHMuIElmIGV4ZWN1dGVkIGluIGEgY29tbWFuZCBmaWxlIG9yIG1hY3JvLCBp dCBnaXZlcyB5b3UgYW4KKyAgIGludGVyYWN0aXZlIGNvbW1hbmQgcHJvbXB0IGluIHRoZSBjdXJy ZW50IGNvbnRleHQgb2YgdGhlIHNjcmlwdCwgd2l0aAorICAgYWxsIGl0cyB2YXJpYWJsZXMsIGFy Z3VtZW50cywgY29tbWFuZCBzdGFjaywgZXRjLCBhdmFpbGFibGUgZm9yCisgICBleGFtaW5hdGlv biBvciBjaGFuZ2UsIGFuZCB0aGUgYWJpbGl0eSB0byByZXN1bWUgdGhlIHNjcmlwdCBhdCBhbnkK KyAgIHBvaW50IChFTkQgcmVzdW1lcyBpdCwgQ3RybC1DIG9yIFNUT1AgY2FuY2VscyBpdCBhbmQg cmV0dXJucyB0byB0b3AKKyAgIGxldmVsKS4KKworICAgVGhlIG5ldyBDdHJsLUMgdHJhcHBpbmcg ZmVhdHVyZSAoWzQwNV1TZWN0aW9uIDguMTQpIGxldHMgeW91IGludGVyY2VwdAorICAgaW50ZXJy dXB0aW9uIG9mIHNjcmlwdHMuIFRoaXMgY2FuIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0 aGUKKyAgIFBST01QVCBjb21tYW5kIHRvIGRlYnVnIHNjcmlwdHMuIEV4YW1wbGU6CisKK2RlZmlu ZSBPTl9DVFJMQyB7CisgICAgZWNobyBJTlRFUlJVUFRFRCBCWSBDVFJMLUMuLi4KKyAgICBlY2hv IFRoZSBjb21tYW5kIHN0YWNrIGhhcyBub3QgeWV0IGJlZW4gcm9sbGVkIGJhY2s6CisgICAgc2hv dyBzdGFjaworICAgIGVjaG8gVHlwZSBDdHJsLUMgYWdhaW4gb3IgdXNlIHRoZSBFTkQgY29tbWFu ZCB0byByZXR1cm4gdG8gdG9wIGxldmVsLgorICAgIHByb21wdCBEZWJ1Zz4KK30KKworICAgQWRk aW5nIHRoaXMgT05fQ1RSTCBkZWZpbml0aW9uIHRvIHlvdXIgc2NyaXB0IGxldHMgeW91IGludGVy cnVwdCBpdCBhdAorICAgYW55IHBvaW50IGFuZCBnZXQgcHJvbXB0IHRoYXQgaXMgaXNzdWVkIGF0 IHRoZSBjdXJyZW50IGNvbW1hbmQgbGV2ZWwsCisgICBzbyB5b3UgY2FuIHF1ZXJ5IGxvY2FsIHZh cmlhYmxlcywgZXRjLgorCisgICBbIFs0MDZdVG9wIF0gWyBbNDA3XUNvbnRlbnRzIF0gWyBbNDA4 XUMtS2VybWl0IEhvbWUgXSBbIFs0MDldS2VybWl0CisgICBIb21lIF0KKworOC4yLiBVc2luZyBN YWNyb3MgYXMgTnVtZXJpYyBWYXJpYWJsZXMKKworICAgQSBtYWNybyBpcyBhIHdheSB0byBhc3Np Z24gYSB2YWx1ZSB0byBhIG5hbWUsIGFuZCB0aGVuIHVzZSB0aGUgbmFtZSB0bworICAgcmVmZXIg dG8gdGhlIHZhbHVlLiBNYWNyb3MgYXJlIHVzZWQgaW4gdHdvIHdheXMgaW4gS2VybWl0OiBhcwor ICAgInN1YnJvdXRpbmVzIiBvciBmdW5jdGlvbnMgY29tcG9zZWQgb2YgS2VybWl0IGNvbW1hbmRz LCB3aGljaCBhcmUKKyAgIGV4ZWN1dGVkLCBvciBhcyB2YXJpYWJsZXMgdG8gaG9sZCBhcmJpdHJh cnkgdmFsdWVzIC0tIHRleHQsIG51bWJlcnMsCisgICBmaWxlbmFtZXMsIGV0Yy4KKworICAgV2hl biBhIG1hY3JvIGlzIHRvIGJlIGV4ZWN1dGVkLCBpdHMgbmFtZSBpcyBnaXZlbiBhcyBpZiBpdCB3 ZXJlIGEKKyAgIEMtS2VybWl0IGNvbW1hbmQsIG9wdGlvbmFsbHkgcHJlY2VkZWQgYnkgdGhlIHdv cmQgImRvIi4gV2hlbiBhIG1hY3JvIGlzCisgICB1c2VkIGFzIGEgdmFyaWFibGUsIGl0IG11c3Qg YmUgImVzY2FwZWQiIHdpdGggXG0oeHh4KSAob3IgZXF1aXZhbGVudAorICAgZnVuY3Rpb24sIGUu Zy4gXHMoeHh4KSwgXDooeHh4KSwgXGZkZWZpbml0aW9uKHh4eCkpLCB3aGVyZSB4eHggaXMgdGhl CisgICBtYWNybyBuYW1lLCBmb3IgZXhhbXBsZToKKworICBkZWZpbmUgZmlsZW5hbWUgL3Vzci9v bGdhL29vZmEudHh0CisgIHNlbmQgXG0oZmlsZW5hbWUpCisKKyAgIE9mIGNvdXJzZSB2YXJpYWJs ZXMgY2FuIGFsc28gaG9sZCBudW1iZXJzOgorCisgIGRlZmluZSBzaXplIDE3CisgIGRlY2xhcmUg XCZhW1xtKHNpemUpXQorICAuLi4KKyAgZGVmaW5lIGluZGV4IDMKKyAgaWYgKCA9PSBcbShpbmRl eCkgMyApIGVjaG8gVGhlIHRoaXJkIHZhbHVlIGlzOiBcJmFbXG0oaW5kZXgpXQorICBldmFsdWF0 ZSBpbmRleCAoXG0oaW5kZXgpICogNCkKKyAgaWYgKCA+IFxtKGluZGV4KSBcbShzaXplKSApIGVj aG8gT3V0IG9mIHJhbmdlIQorCisgICBCdXQgdGhlc2UgYXJlIGNvbnRleHRzIGluIHdoaWNoIG9u bHkgbnVtYmVycyBhcmUgdmFsaWQuIEMtS2VybWl0IDguMAorICAgaGFzIGJlZW4gY2hhbmdlZCB0 byB0cmVhdCBub24tZXNjYXBlZCBub24tbnVtZXJpYyBpdGVtcyBpbiBzdHJpY3RseQorICAgbnVt ZXJpYyBjb250ZXh0cyBhcyBtYWNybyBuYW1lcy4gU28gaXQgaXMgbm93IHBvc3NpYmxlIChidXQg bm90CisgICByZXF1aXJlZCkgdG8gb21pdCB0aGUgXG0oLi4uKSBub3RhdGlvbiBhbmQganVzdCB1 c2UgdGhlIG1hY3JvIG5hbWUgaW4KKyAgIHRoZXNlIGNvbnRleHRzOgorCisgIGRlZmluZSBzaXpl IDE3CisgIGRlY2xhcmUgXCZhW3NpemVdCisgIC4uLgorICBkZWZpbmUgaW5kZXggMworICBpZiAo ID09IGluZGV4IDMgKSBlY2hvIFRoZSB0aGlyZCB2YWx1ZSBpczogXCZhW2luZGV4XQorICBldmFs dWF0ZSBpbmRleCAoaW5kZXggKiA0KQorICBpZiAoID4gaW5kZXggc2l6ZSApIGVjaG8gT3V0IG9m IHJhbmdlIQorCisgICBUaGlzIGlzIGVzcGVjaWFsbHkgbmljZSBmb3IgbG9vcHMgdGhhdCBkZWFs IHdpdGggYXJyYXlzLiBIZXJlLCBmb3IKKyAgIGV4YW1wbGUsIGlzIGEgbG9vcCB0aGF0IHJldmVy c2VzIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMgaW4gYW4gYXJyYXkuCisgICBXaGVyZWFzIGZv cm1lcmx5IGl0IHdhcyBuZWNlc3NhcnkgdG8gd3JpdGU6CisKKyAgLlwlbiA6Oj0gXGZkaW0oJmEp CisgIGZvciBcJWkgMSBcJW4vMiAxIHsKKyAgICAgIC50bXAgOj0gXCZhW1wlbi1cJWkrMV0KKyAg ICAgIC5cJmFbXCVuLVwlaSsxXSA6PSBcJmFbXCVpXQorICAgICAgLlwmYVtcJWldIDo9IFxtKHRt cCkKKyAgfQorCisgICBSZWNvZGluZyB0aGlzIHRvIHVzZSBtYWNybyBuYW1lcyAiaSIgYW5kICJu IiBpbnN0ZWFkIG9mIHRoZSBiYWNrc2xhc2gKKyAgIHZhcmlhYmxlcyBcJWkgYW5kIFwlbiwgd2Ug aGF2ZToKKworICAubiA6Oj0gXGZkaW0oJmEpCisgIGZvciBpIDEgbi8yIDEgeworICAgICAgLnRt cCA6PSBcJmFbbi1pKzFdCisgICAgICAuXCZhW24taSsxXSA6PSBcJmFbaV0KKyAgICAgIC5cJmFb aV0gOj0gXG0odG1wKQorICB9CisKKyAgIHdoaWNoIHJlZHVjZXMgdGhlIGJhY2tzbGFzaCBjb3Vu dCB0byBsZXNzIHRoYW4gaGFsZi4gVGhlIGZpbmFsCisgICBzdGF0ZW1lbnQgaW4gdGhlIGxvb3Ag Y291bGQgYmUgd3JpdHRlbiAiLlwmYVtpXSA6Oj0gdG1wIiBpZiB0aGUgYXJyYXkKKyAgIGNvbnRh aW5lZCBvbmx5IG51bWJlcnMgKHNpbmNlIDo6PSBpbmRpY2F0ZXMgYXJpdGhtZXRpYyBleHByZXNz aW9uCisgICBldmFsdWF0aW9uKS4KKworICAgQWxzbywgbm93IHlvdSBjYW4gdXNlIGZsb2F0aW5n LXBvaW50IG51bWJlcnMgaW4gaW50ZWdlciBjb250ZXh0cyAoc3VjaAorICAgYXMgYXJyYXkgc3Vi c2NyaXB0cyksIGluIHdoaWNoIGNhc2UgdGhleSBhcmUgdHJ1bmNhdGVkIHRvIGFuIGludGVnZXIK KyAgIHZhbHVlIChpLmUuIHRoZSBmcmFjdGlvbmFsIHBhcnQgaXMgZGlzY2FyZGVkKS4KKworICAg RXhhbXBsZXMgb2YgbnVtZXJpYyBjb250ZXh0cyBpbmNsdWRlOgorCisgICAgICogQXJyYXkgc3Vi c2NyaXB0cy4KKyAgICAgKiBBbnkgbnVtZXJpYyBmdW5jdGlvbiBhcmd1bWVudC4KKyAgICAgKiBS aWdodC1oYW5kIHNpZGUgb2YgOjo9IGFzc2lnbm1lbnRzLgorICAgICAqIEVWQUxVQVRFIGNvbW1h bmQgb3IgXGZldmFsdWF0ZSgpIGZ1bmN0aW9uIGV4cHJlc3Npb24uCisgICAgICogVGhlIElOQ1JF TUVOVCBvciBERUNSRU1FTlQgYnktdmFsdWUuCisgICAgICogSUYgPSwgPiwgPCwgIT0sID49LCBh bmQgPD0gY29tcGFyYW5kcy4KKyAgICAgKiBUaGUgSUYgbnVtYmVyIGNvbnN0cnVjdC4KKyAgICAg KiBGT1ItbG9vcCB2YXJpYWJsZXMuCisgICAgICogU1RPUCwgRU5ELCBhbmQgRVhJVCBzdGF0dXMg Y29kZXMuCisgICAgICogVGhlIElOUFVUIHRpbWVvdXQgdmFsdWUuCisgICAgICogUEFVU0UsIFdB SVQsIFNMRUVQLCBNU0xFRVAgaW50ZXJ2YWxzLgorICAgICAqIFRoZSBTSElGVCBhcmd1bWVudC4K KyAgICAgKiBOdW1lcmljIHN3aXRjaCBhcmd1bWVudHMsIGUuZy4gVFlQRSAvV0lEVEg6bnVtYmVy LCBTRU5ECisgICAgICAgL0xBUkdFUjpudW1iZXIuCisgICAgICogU0NSRUVOIE1PVkUtVE8gcm93 IGFuZCBjb2x1bW4gbnVtYmVyLgorICAgICAqIFZhcmlvdXMgU0VUIERJQUwgcGFyYW1ldGVycyAo dGltZW91dCwgcmV0cnkgbGltaXQsIGV0YykuCisgICAgICogVmFyaW91cyBTRVQgU0VORCBvciBS RUNFSVZFIHBhcmFtZXRlcnMgKHBhY2tldCBsZW5ndGgsIHdpbmRvdyBzaXplLAorICAgICAgIGV0 YykuCisgICAgICogVmFyaW91cyBvdGhlciBTRVQgcGFyYW1ldGVycy4KKworICAgYW5kOgorCisg ICAgICogUy1FeHByZXNzaW9ucyAoZXhwbGFpbmVkIGluIFs0MTBdU2VjdGlvbiA5KS4KKworICAg TWFjcm8gbmFtZXMgdXNlZCBpbiBudW1lcmljIGNvbnRleHRzIG11c3Qgbm90IGluY2x1ZGUgbWF0 aGVtYXRpY2FsCisgICBvcGVyYXRvcnMuIEFsdGhvdWdoIGl0IGlzIGxlZ2FsIHRvIGNyZWF0ZSBh IG1hY3JvIGNhbGxlZCAiZm9vK2JhciIsIGluCisgICBhIG51bWVyaWMgY29udGV4dCB0aGlzIHdv dWxkIGJlIHRha2VuIGFzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiAiZm9vIgorICAgYW5kICJi YXIiLiBBbnkgc3VjaCBjb25mbGljdCBjYW4gYmUgYXZvaWRlZCwgb2YgY291cnNlLCBieSBlbmNs b3NpbmcKKyAgIHRoZSBtYWNybyBuYW1lIGluIFxtKC4uLikuCisKKyAgIFsgWzQxMV1Ub3AgXSBb IFs0MTJdQ29udGVudHMgXSBbIFs0MTNdQy1LZXJtaXQgSG9tZSBdIFsgWzQxNF1LZXJtaXQKKyAg IEhvbWUgXQorCis4LjMuIE5ldyBJRiBDb25kaXRpb25zCisKKyAgIFNldmVyYWwgbmV3IElGIGNv bmRpdGlvbnMgYXJlIGF2YWlsYWJsZToKKworICAgSUYgREVDTEFSRUQgYXJyYXluYW1lCisgICAg ICAgICAgRXhwbGFpbmVkIGluIFs0MTVdU2VjdGlvbiA4LjYuCisKKyAgIElGIEtCSElUCisgICAg ICAgICAgQWxsb3dzIGEgc2NyaXB0IHRvIHRlc3Qgd2hldGhlciBhIGtleSB3YXMgcHJlc3NlZCB3 aXRob3V0CisgICAgICAgICAgYWN0dWFsbHkgdHJ5aW5nIHRvIHJlYWQgaXQuCisKKyAgIElGIEtF UkJBTkcgKFVuaXggb25seSkKKyAgICAgICAgICBUcnVlIGlmIEtlcm1pdCB3YXMgc3RhcnRlZCBm cm9tIGEgS2VyYmFuZyBzY3JpcHQuIFRoaXMgaXMgdXNlZnVsCisgICAgICAgICAgZm9yIGtub3dp bmcgaG93IHRvIGludGVycHJldCB0aGUgXCZAW10gYW5kIFwmX1tdIGFyZ3VtZW50IHZlY3Rvcgor ICAgICAgICAgIGFycmF5cywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyB0byBleGl0LgorCisg ICBJRiBJTlRFR0VSIG4KKyAgICAgICAgICBUaGlzIGlzIGp1c3QgYSBzeW5vbnltIGZvciBJRiBO VU1FUklDLCB3aGljaCBpcyB0cnVlIGlmIG4KKyAgICAgICAgICBjb250YWlucyBvbmx5IGRpZ2l0 cyAob3IsIGlmIG4gaXMgYSB2YXJpYWJsZSwgaXRzIHZhbHVlIGNvbnRhaW5zCisgICAgICAgICAg b25seSBkaWdpdHMpLgorCisgICBCeSBjb250cmFzdCwgSUYgRkxPQVQgbiBzdWNjZWVkcyBpZiBu IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIE9SIGFuCisgICBpbnRlZ2VyIChvciBhIHZhcmlh YmxlIHdpdGggZmxvYXRpbmctcG9pbnQgb3IgaW50ZWdlciB2YWx1ZSkuCisgICBUaGVyZWZvcmUs IElGIEZMT0FUIHNob3VsZCBiZSB1c2VkIHdoZW5ldmVyIGFueSBraW5kIG9mIG51bWJlciBpcwor ICAgYWNjZXB0YWJsZSwgd2hlcmVhcyBJRiBJTlRFR0VSIChvciBJRiBOVU1FUklDKSB3aGVuIG9u bHkgYW4gaW50ZWdlciBjYW4KKyAgIGJlIHVzZWQuCisKKyAgIFsgWzQxNl1Ub3AgXSBbIFs0MTdd Q29udGVudHMgXSBbIFs0MThdQy1LZXJtaXQgSG9tZSBdIFsgWzQxOV1LZXJtaXQKKyAgIEhvbWUg XQorCis4LjQuIFRoZSBPTl9VTktOT1dOX0NPTU1BTkQgTWFjcm8KKworICAgVGhlIG5ldyBPTl9V TktOT1dOX0NPTU1BTkQgbWFjcm8sIGlmIGRlZmluZWQsIGlzIGV4ZWN1dGVkIHdoZW5ldmVyIHlv dQorICAgZ2l2ZSBhIGNvbW1hbmQgdGhhdCBpcyBub3Qga25vd24gdG8gQy1LZXJtaXQ7IGFueSBv cGVyYW5kcyBhcmUgcGFzc2VkCisgICBhcyBhcmd1bWVudHMuIEhlcmUgYXJlIHNvbWUgc2FtcGxl IGRlZmluaXRpb25zOgorCisgIERFRiBPTl9VTktOT1dOX0NPTU1BTkQgdGVsbmV0IFwlMSA7IFRy ZWF0IHVua25vd24gY29tbWFuZHMgYXMgaG9zdG5hbWVzCisgIERFRiBPTl9VTktOT1dOX0NPTU1B TkQgZGlhbCBcJTEgICA7IFRyZWF0IHVua25vd24gY29tbWFuZHMgcGhvbmUgbnVtYmVycworICBE RUYgT05fVU5LTk9XTl9DT01NQU5EIHRha2UgXCUxICAgOyBUcmVhdCB1bmtub3duIGNvbW1hbmRz IGFzIGZpbGVuYW1lcworICBERUYgT05fVU5LTk9XTl9DT01NQU5EICFcJSogICAgICAgOyBUcmVh dCB1bmtub3duIGNvbW1hbmRzIGFzIHNoZWxsIGNvbW1hbmRzCisKKyAgIFRoZSBPTl9DRCBtYWNy bywgaWYgZGVmaW5lZCwgaXMgZXhlY3V0ZWQgd2hlbmV2ZXIgS2VybWl0IGlzIGdpdmVuIGEgQ0QK KyAgIChjaGFuZ2UgZGlyZWN0b3J5KSBjb21tYW5kICg4LjAuMjExKS4gVXBvbiBlbnRyeSB0byB0 aGlzIG1hY3JvLCB0aGUKKyAgIGRpcmVjdG9yeSBoYXMgYWxyZWFkeSBjaGFuZ2VkIGFuZCB0aGUg bmV3IGRpcmVjdG9yeSBzdHJpbmcgaXMgYXZhaWxhYmxlCisgICBpbiB0aGUgXHYoZGlyZWN0b3J5 KSB2YXJpYWJsZSwgYW5kIGFsc28gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IChcJTEpLgorCisgICBb IFs0MjBdVG9wIF0gWyBbNDIxXUNvbnRlbnRzIF0gWyBbNDIyXUMtS2VybWl0IEhvbWUgXSBbIFs0 MjNdS2VybWl0CisgICBIb21lIF0KKworOC41LiBUaGUgU0hPVyBNQUNSTyBDb21tYW5kCisKKyAg IFRoZSBTSE9XIE1BQ1JPIGNvbW1hbmQgaGFzIGJlZW4gY2hhbmdlZCB0byBhY2NlcHQgbW9yZSB0 aGFuIG9uZSBtYWNybworICAgbmFtZToKKworICAoc2V0cSBhIDEgYiAyIGMgMykKKyAgc2hvdyBt YWMgYSBiIGMKKyAgYSA9IDEKKyAgYiA9IDIKKyAgYyA9IDMKKworICAgQW4gZXhhY3QgbWF0Y2gg aXMgcmVxdWlyZWQgZm9yIGVhY2ggbmFtZSAoZXhjZXB0IHRoYXQgY2FzZSBkb2Vzbid0CisgICBt YXR0ZXIpLiBJZiB5b3UgaW5jbHVkZSB3aWxkY2FyZCBjaGFyYWN0ZXJzLCBob3dldmVyLCBhIHBh dHRlcm4gbWF0Y2gKKyAgIGlzIHBlcmZvcm1lZDoKKworICBzaG93IG1hYyBbYS1jXSp4CisKKyAg IHNob3dzIGFsbCBtYWNyb3Mgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCBhLCBiLCBvciBjLCBhbmQg ZW5kIHdpdGggeC4KKworICAgWyBbNDI0XVRvcCBdIFsgWzQyNV1Db250ZW50cyBdIFsgWzQyNl1D LUtlcm1pdCBIb21lIF0gWyBbNDI3XUtlcm1pdAorICAgSG9tZSBdCisKKzguNi4gQXJyYXlzCisK KyAgIEEgY2xhcmlmaWNhdGlvbiByZWdhcmRpbmcgcmVmZXJlbmNlcyB0byBhcnJheSBuYW1lcyAo YXMgb3Bwb3NlZCB0bworICAgYXJyYXkgZWxlbWVudHMpOiBZb3UgY2FuIHVzZSBhcnJheS1uYW1l ICJhYmJyZXZpYXRpb25zIiBsaWtlICZhIG9ubHkgaW4KKyAgIGNvbnRleHRzIHRoYXQgZXhwZWN0 IGFycmF5IG5hbWVzLCBsaWtlIEFSUkFZIGNvbW1hbmRzIG9yIGFycmF5LW5hbWUKKyAgIGZ1bmN0 aW9uIGFyZ3VtZW50cyBzdWNoIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgXGZzcGxpdCgpLiBJ biBhIExPQ0FMCisgICBzdGF0ZW1lbnQsIGhvd2V2ZXIsIHlvdSBoYXZlIHRvIHdyaXRlIFwmYVtd LCBzaW5jZSAibG9jYWwgJmEiIG1pZ2h0CisgICByZWZlciB0byBhIG1hY3JvIG5hbWVkICImYSIu CisKKyAgIEluIGZ1bmN0aW9uIGFyZ3VtZW50cywgaG93ZXZlciwgeW91IE1VU1QgdXNlIHRoZSBh YmJyZXZpYXRlZCBmb3JtOgorICAgXGZzcGxpdChcJWEsJmEpIG9yIFxmc3BsaXQoXCVhLCZhW10p LiBJZiB5b3UgaW5jbHVkZSB0aGUgYmFja3NsYXNoIChhcworICAgaW4gIlxmc3BsaXQoXCVhLFwm YVtdKSIpIGEgcGFyc2UgZXJyb3Igb2NjdXJzLgorCisgICBIZXJlIGFyZSB0aGUgbmV3IGFycmF5 LXJlbGF0ZWQgY29tbWFuZHM6CisKKyAgIElGIERFQ0xBUkVEIGFycmF5bmFtZQorICAgICAgICAg IEFsbG93cyBhIHNjcmlwdCB0byB0ZXN0IHdoZXRoZXIgYW4gYXJyYXkgaGFzIGJlZW4gZGVjbGFy ZWQuIFRoZQorICAgICAgICAgIGFycmF5bmFtZSBjYW4gYmUgYSBub24tYXJyYXkgYmFja3NsYXNo IHZhcmlhYmxlIHN1Y2ggYXMgXCUxIG9yCisgICAgICAgICAgXG0obmFtZSksIGluIHdoaWNoIGNh c2UgaXQgaXMgZXZhbHVhdGVkIGZpcnN0LCBhbmQgdGhlIHJlc3VsdCBpcworICAgICAgICAgIHRy ZWF0ZWQgYXMgdGhlIGFycmF5IG5hbWUuIE90aGVyd2lzZSwgYXJyYXluYW1lIGlzIHRyZWF0ZWQg YXMgaW4KKyAgICAgICAgICB0aGUgQVJSQVkgY29tbWFuZHM6IGl0IGNhbiBiZSBhLCAmYSwgJmFb XSwgXCZhLCBcJmFbXSwgXCZhWzNdLAorICAgICAgICAgIFwmYVszOjldLCBldGMsIHdpdGggdGhl IGFwcHJvcHJpYXRlIHJlc3VsdHMgaW4gZWFjaCBjYXNlLgorICAgICAgICAgIFN5bm9ueW06IElG IERDTC4KKworICAgVU5ERUNMQVJFIGFycmF5bmFtZQorICAgICAgICAgIFVOREVDTEFSRSBpcyBh IG5ldyB0b3AtbGV2ZWwgY29tbWFuZCB0byB1bmRlY2xhcmUgYW4gYXJyYXkuCisgICAgICAgICAg UHJldmlvdXNseSB0aGlzIGNvdWxkIG9ubHkgYmUgZG9uZSB3aXRoICJkZWNsYXJlIFwmYVswXSIg KGkuZS4KKyAgICAgICAgICByZS1kZWNsYXJlIHRoZSBhcnJheSB3aXRoIGEgZGltZW5zaW9uIG9m IDApLgorCisgICBBUlJBWSBMSU5LIGxpbmtuYW1lIGFycmF5bmFtZQorICAgICAgICAgIENyZWF0 ZXMgYSBzeW1ib2xpYyBsaW5rIGZyb20gdGhlIGFycmF5IG5hbWVkIGJ5IGxpbmtuYW1lICh3aGlj aAorICAgICAgICAgIG11c3QgYmUgdGhlIG5hbWUgb2YgYW4gYXJyYXkgdGhhdCBpcyBub3QgeWV0 IGRlY2xhcmVkIGluIHRoZQorICAgICAgICAgIGN1cnJlbnQgY29udGV4dCkgdG8gdGhlIGFycmF5 IG5hbWVkIGJ5IGFycmF5bmFtZSAod2hpY2ggbXVzdCB0aGUKKyAgICAgICAgICBuYW1lIG9mIGEg Y3VycmVudGx5IGRlY2xhcmVkIGFycmF5IHRoYXQgaXMgbm90IGl0c2VsZiBhIGxpbmssIG9yCisg ICAgICAgICAgYSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHN1Y2ggYW4gYXJyYXkp LiBUaGUgdHdvIG5hbWVzCisgICAgICAgICAgaW5kaWNhdGUgdGhlIHNhbWUgYXJyYXk6IGlmIHlv dSBjaGFuZ2UgYW4gYXJyYXkgZWxlbWVudCwgdGhlCisgICAgICAgICAgY2hhbmdlIGlzIHJlZmxl Y3RlZCBpbiB0aGUgbGluayB0b28sIGFuZCB2aWNlIHZlcnNhLiBJZiB5b3UKKyAgICAgICAgICB1 bmRlY2xhcmUgdGhlIGxpbmssIHRoZSByZWFsIGFycmF5IGlzIHVuYWZmZWN0ZWQuIElmIHlvdQor ICAgICAgICAgIHVuZGVjbGFyZSB0aGUgcmVhbCBhcnJheSwgYWxsIGxpbmtzIHRvIGl0IGRpc2Fw cGVhci4gSWYgeW91CisgICAgICAgICAgcmVzaXplIGFuIGFycmF5IChkaXJlY3RseSBvciB0aHJv dWdoIGEgbGluayksIGFsbCBsaW5rcyB0byBpdAorICAgICAgICAgIGFyZSB1cGRhdGVkIGF1dG9t YXRpY2FsbHkuCisKKyAgIEFycmF5IGxpbmtzIGxldCB5b3UgcGFzcyBhcnJheSBuYW1lcyBhcyBh cmd1bWVudHMgdG8gbWFjcm9zLiBGb3IKKyAgIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhZCBhIHBy b2dyYW0gdGhhdCBuZWVkZWQgdG8gdXBwZXJjYXNlIGFsbCB0aGUKKyAgIGVsZW1lbnRzIG9mIGRp ZmZlcmVudCBhcnJheXMgYXQgZGlmZmVyZW50IHRpbWVzLiBZb3UgY291bGQgd3JpdGUgYQorICAg bWFjcm8gdG8gZG8gdGhpcywgd2l0aCB0aGUgYXJyYXkgbmFtZSBhcyBhbiBhcmd1bWVudC4gQnV0 IHdpdGhvdXQgYXJyYXkKKyAgIGxpbmtzLCB0aGVyZSB3b3VsZCBiZSBubyB3YXkgdG8gcmVmZXIg dG8gdGhlIGFyZ3VtZW50IGFycmF5IHdpdGhpbiB0aGUKKyAgIG1hY3JvLiBBcnJheSBsaW5rcyBt YWtlIGl0IGVhc3k6CisKKyAgZGVmaW5lIGFycmF5dXBwZXIgeworICAgICAgbG9jYWwgXCZlW10g XCVpCisgICAgICBhcnJheSBsaW5rIFwmZVtdIFwlMQorICAgICAgZm9yIGkgMSBcZmRpbSgmZSkg MSB7IC5cJmVbaV0gOj0gXGZ1cHBlcihcJmVbaV0pIH0KKyAgfQorICBkZWNsYXJlIFwmYVtdID0g dGhlc2UgYXJlIHNvbWUgd29yZHMKKyAgYXJyYXl1cHBlciAmYQorICBzaG93IGFycmF5ICZhCisK KyAgIFRoZSBtYWNybyBkZWNsYXJlcyB0aGUgYXJyYXkgbGluayBMT0NBTCwgd2hpY2ggbWVhbnMg aXQgZG9lc24ndAorICAgY29uZmxpY3Qgd2l0aCBhbnkgYXJyYXkgb2YgdGhlIHNhbWUgbmFtZSB0 aGF0IG1pZ2h0IGV4aXN0IG91dHNpZGUgdGhlCisgICBtYWNybywgYW5kIHRoYXQgdGhlIGxpbmsg aXMgZGVzdHJveWVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbWFjcm8KKyAgIGV4aXRzLiBUaGlz IHdvcmtzLCBieSB0aGUgd2F5LCBldmVuIGlmIHRoZSBsaW5rIG5hbWUgYW5kIHRoZSBtYWNybwor ICAgYXJndW1lbnQgbmFtZSBhcmUgdGhlIHNhbWUsIGFzIGxvbmcgYXMgdGhlIGxpbmsgaXMgZGVj bGFyZWQgTE9DQUwuCisKKyAgIEFzIG5vdGVkLCB5b3UgY2FuJ3QgbWFrZSBhIGxpbmsgdG8gYSBu b25leGlzdGVudCBhcnJheS4gU28gd2hlbiB3cml0aW5nCisgICBhIG1hY3JvIHdob3NlIGpvYiBp cyB0byBjcmVhdGUgYW4gYXJyYXkgd2hvc2UgbmFtZSBpcyBwYXNzZWQgYXMgYW4KKyAgIGFyZ3Vt ZW50LCB5b3UgbXVzdCBkZWNsYXJlIHRoZSBhcnJheSBmaXJzdCAodGhlIHNpemUgZG9lc24ndCBt YXR0ZXIgYXMKKyAgIGxvbmcgYXMgaXQncyBncmVhdGVyIHRoYW4gMCkuIEV4YW1wbGU6CisKKyAg ZGVmaW5lIHRyeW1lIHsgICAgICAgICAgICAgICAgOyBEZW1vbnN0cmF0aW9uIG1hY3JvCisgICAg ICBsb2NhbCBcJmVbXSAgICAgICAgICAgICAgIDsgV2Ugb25seSBuZWVkIHRoaXMgaW5zaWRlIHRo ZSBtYWNybworICAgICAgYXJyYXkgbGluayBcJmVbXSBcJTEgICAgICA7IE1ha2UgbG9jYWwgbGlu aworICAgICAgc2hpZnQgICAgICAgICAgICAgICAgICAgICA7IFNoaWZ0IGFyZ3VtZW50IGxpc3QK KyAgICAgIHZvaWQgXGZzcGxpdChcJSosJmUpICAgICAgOyBTcGxpdCByZW1haW5kZXIgb2YgYXJn IGxpc3QgaW50byBhcnJheQorICB9CisgIGRlY2xhcmUgXCZhWzFdICAgICAgICAgICAgICAgIDsg RGVjbGFyZSB0YXJnZXQgYXJyYXkgaW4gYWR2YW5jZQorICB0cnltZSAmYSBoZXJlIGFyZSBzb21l IHdvcmRzICA7IEludm9rZSB0aGUgbWFjcm8gd2l0aCBhcnJheSBuYW1lIGFuZCB3b3JkcworICBz aG93IGFycmF5IGEgICAgICAgICAgICAgICAgICA7IFNlZSB0aGUgcmVzdWx0cworCisgICBPbmUg ZmluYWwgaW1wcm92ZW1lbnQgYWxsb3dzIHRoZSBtYWNybyBpdHNlbGYgdG8gZGVjbGFyZSB0aGUg YXJyYXkKKyAgICh0aGlzIHdhcyBub3QgcG9zc2libGUgaW4gZWFybGllciBLZXJtaXQgcmVsZWFz ZXMpOiBpZiB0aGUgYXJyYXkgbmFtZQorICAgaW4gdGhlIERFQ0xBUkUgY29tbWFuZCBpcyBhIHZh cmlhYmxlIChhbmQgbm90IGFuIGFycmF5IG5hbWUpLCBvcgorICAgaW5jbHVkZXMgdmFyaWFibGVz LCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGFycmF5IG5hbWUuIFNvOgorCisg IGRlZmluZSB0cnltZSB7ICAgICAgICAgICAgICAgIDsgRGVtb25zdHJhdGlvbiBtYWNybworICAg ICAgZGVjbGFyZSBcJTFbMV0gICAgICAgICAgICA7IFByZWxpbWluYXJ5IGRlY2xhcmF0aW9uIGZv ciB0YXJnZXQgYXJyYXkKKyAgICAgIGxvY2FsIFwmZVtdICAgICAgICAgICAgICAgOyBXZSBvbmx5 IG5lZWQgdGhpcyBpbnNpZGUgdGhlIG1hY3JvCisgICAgICBhcnJheSBsaW5rIFwmZVtdIFwlMSAg ICAgIDsgTWFrZSBsb2NhbCBsaW5rCisgICAgICBzaGlmdCAgICAgICAgICAgICAgICAgICAgIDsg U2hpZnQgYXJndW1lbnQgbGlzdAorICAgICAgdm9pZCBcZnNwbGl0KFwlKiwmZSkgICAgICA7IFNw bGl0IHJlbWFpbmRlciBvZiBhcmcgbGlzdCBpbnRvIGFycmF5CisgIH0KKyAgdHJ5bWUgJmEgaGVy ZSBhcmUgc29tZSB3b3JkcyAgOyBJbnZva2UgdGhlIG1hY3JvIHdpdGggYXJyYXkgbmFtZSBhbmQg d29yZHMKKyAgc2hvdyBhcnJheSBhICAgICAgICAgICAgICAgICAgOyBTZWUgdGhlIHJlc3VsdHMK KworICAgVGhlIFNIT1cgQVJSQVkgY29tbWFuZCBub3cgaW5kaWNhdGVzIHdoZXRoZXIgYW4gYXJy YXkgbmFtZSBpcyBhIGxpbmsuCisKKyAgIEFsc28gc2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YgWzQy OF1cZmpvaW4oKSBhbmQgWzQyOV1cZnNwbGl0KCksIHBsdXMKKyAgIFs0MzBdU2VjdGlvbiA4LjEw IG9uIHRoZSBNSU5QVVQgY29tbWFuZCwgd2hpY2ggc2hvd3MgaG93IGFuIGVudGlyZQorICAgYXJy YXkgKG9yIHNlZ21lbnQgb2YgaXQpIGNhbiBiZSB1c2VkIGFzIHRoZSBNSU5QVVQgdGFyZ2V0IGxp c3QuCisKKyAgIFsgWzQzMV1Ub3AgXSBbIFs0MzJdQ29udGVudHMgXSBbIFs0MzNdQy1LZXJtaXQg SG9tZSBdIFsgWzQzNF1LZXJtaXQKKyAgIEhvbWUgXQorCis4LjcuIE5ldyBvciBJbXByb3ZlZCBC dWlsdC1pbiBWYXJpYWJsZXMgYW5kIEZ1bmN0aW9ucworCisgICBUaGUgZm9sbG93aW5nIG5ldyBi dWlsdC1pbiB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZToKKworICBcdihidWlsZGlkKSAgICAgICBB IGRhdGUgc3RyaW5nIGxpa2UgIjIwMDAwODA4IiBpbmRpY2F0aW5nIHdoZW4gQy1LZXJtaXQgd2Fz IGIKK3VpbHQuCisgIFx2KGZ0aW1lKSAgICAgICAgIEN1cnJlbnQgdGltZSwgc2VjcyBzaW5jZSBt aWRuaWdodCwgaW5jbHVkaW5nIGZyYWN0aW9uIG9mIHNlYworb25kLgorICBcdihpcHJvbXB0KSAg ICAgICBUaGUgY3VycmVudCBTRVQgUFJPTVBUIHZhbHVlCisgIFx2KHNleHApICAgICAgICAgIFRo ZSBtb3N0IHJlY2VudCBTLUV4cHJlc3Npb24gKHNlZSBbNDM1XVNlY3Rpb24gOSkKKyAgXHYoc2Rl cHRoKSAgICAgICAgVGhlIGN1cnJlbnQgUy1FeHByZXNzaW9uIGludm9jYXRpb24gZGVwdGggKFs0 MzZdU2VjdGlvbiA5KQorICBcdihzdmFsdWUpICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIG1vc3Qg cmVjZW50IFMtRXhwcmVzc2lvbiAoWzQzN11TZWN0aW9uIDkpCisKKyAgXHYoZnRwX2NvZGUpICAg ICAgTW9zdCByZWNlbnQgRlRQIHJlc3BvbnNlIGNvZGUgKFs0MzhdU2VjdGlvbiAzKQorICBcdihm dHBfY29ubmVjdGVkKSBGVFAgY29ubmVjdGlvbiBzdGF0dXMgKFs0MzldU2VjdGlvbiAzKQorICBc dihmdHBfY3BsKSAgICAgICBGVFAgQ29tbWFuZCBQcm90ZWN0aW9uIExldmVsIChbNDQwXVNlY3Rp b24gMy4yKQorICBcdihmdHBfZHBsKSAgICAgICBGVFAgRGF0YSBQcm90ZWN0aW9uIExldmVsIChb NDQxXVNlY3Rpb24gMy4yKQorICBcdihmdHBfZ2V0cHV0cmVtb3RlKSBUaGUgY3VycmVudCBTRVQg R0VULVBVVC1SRU1PVEUgc2V0dGluZyAoWzQ0Ml1TZWN0aW9uIDMuOCkKKworICBcdihmdHBfaG9z dCkgICAgICBOYW1lIG9yIElQIGFkZHJlc3Mgb2YgRlRQIHNlcnZlciAoWzQ0M11TZWN0aW9uIDMp CisgIFx2KGZ0cF9sb2dnZWRpbikgIEZUUCBsb2dpbiBzdGF0dXMgKFs0NDRdU2VjdGlvbiAzKQor ICBcdihmdHBfbWVzc2FnZSkgICBNb3N0IHJlY2VudCBGVFAgcmVzcG9uc2UgbWVzc2FnZSAoWzQ0 NV1TZWN0aW9uIDMpCisgIFx2KGZ0cF9zZWN1cml0eSkgIEZUUCBTZWN1cml0eSBtZXRob2QgKFs0 NDZdU2VjdGlvbiAzLjIpCisgIFx2KGZ0cF9zZXJ2ZXIpICAgIE9TIHR5cGUgb2YgRlRQIHNlcnZl ciAoWzQ0N11TZWN0aW9uIDMpCisKKyAgXHYoaHR0cF9jb2RlKSAgICAgICBNb3N0IHJlY2VudCBI VFRQIHJlc3BvbnNlIGNvZGUKKyAgXHYoaHR0cF9jb25uZWN0ZWQpICBIVFRQIGNvbm5lY3Rpb24g c3RhdHVzCisgIFx2KGh0dHBfaG9zdCkgICAgICAgTmFtZSBvciBJUCBhZGRyZXNzIG9mIEhUVFAg c2VydmVyCisgIFx2KGh0dHBfbWVzc2FnZSkgICAgTW9zdCByZWNlbnQgSFRUUCByZXNwb25zZSBt ZXNzYWdlCisgIFx2KGh0dHBfc2VjdXJpdHkpICAgVExTIGNpcGhlciB1c2VkIHRvIHNlY3VyZSB0 aGUgSFRUUCBzZXNzaW9uCisKKyAgXHYoaG91cikgICAgICAgICAgICBIb3VyIG9mIHRoZSBkYXks IDAgdG8gMjMuCisgIFx2KHRpbWVzdGFtcCkgICAgICAgRXF1aXZhbGVudCB0byAiXHYobmRhdGUp IFx2KHRpbWUpIi4KKworICBcdihsb2dfZGVidWcpICAgICAgIEN1cnJlbnQgZGVidWcgbG9nIGZp bGUsIGlmIGFueS4KKyAgXHYobG9nX3BhY2tldCkgICAgICBDdXJyZW50IHBhY2tldCBsb2cgZmls ZSwgaWYgYW55LgorICBcdihsb2dfc2Vzc2lvbikgICAgIEN1cnJlbnQgc2Vzc2lvbiBsb2cgZmls ZSwgaWYgYW55LgorICBcdihsb2dfdHJhbnNhY3Rpb24pIEN1cnJlbnQgdHJhbnNhY3Rpb24gbG9n IGZpbGUsIGlmIGFueS4KKyAgXHYobG9nX2Nvbm5lY3Rpb24pICBDdXJyZW50IGNvbm5lY3Rpb24g bG9nIGZpbGUsIGlmIGFueS4KKworICAgVGhlIGZvbGxvd2luZyBuZXcgb3IgaW1wcm92ZWQgYnVp bHQtaW4gZnVuY3Rpb25zIGFyZSBhdmFpbGFibGU6CisKKyAgXGZjbWRzdGFjaygpICAgICAgICAg ICAgQWxsb3dzIHByb2dyYW1tYXRpYyBhY2Nlc3MgdG8gdGhlIGNvbW1hbmQgc3RhY2suCisgIFxm Y3Z0ZGF0ZSgpICAgICAgICAgICAgIFs0NDhdU2VjdGlvbiA4LjEzLCBmb3JtYXQgb3B0aW9ucyBh ZGRlZAorICBcZmRlbHRhMnNlY3MoKSAgICAgICAgICBbNDQ5XVNlY3Rpb24gOC4xMworICBcZmRv c3RvdW5peHBhdGgoczEpICAgICBDb252ZXJ0cyBhIERPUyBmaWxlbmFtZSB0byBVbml4IGZvcm1h dC4KKyAgXGZzcGxpdCgpICAgICAgICAgICAgICAgTm93IGFsbG93cyBncm91cGluZy9uZXN0aW5n IGluIHNvdXJjZSBzdHJpbmcuCisgIFxmd29yZCgpICAgICAgICAgICAgICAgIEFsbG93cyB0aGUg c2FtZSBncm91cGluZyBhbmQgbmVzdGluZy4KKyAgXGZqb2luKCZhLHMxLG4xLG4yKSAgICAgQ29w aWVzIGFuIGFycmF5IGludG8gYSBzaW5nbGUgc3RyaW5nLgorICBcZnN1YnN0aXR1dGUoczEsczIs czMpICBTdWJzdGl0dXRlcyBjaGFyYWN0ZXJzIHdpdGhpbiBhIHN0cmluZy4KKyAgXGZyZXBsYWNl KCkgICAgICAgICAgICAgSGFzIG5ldyA0dGggIm9jY3VycmVuY2UiIGFyZ3VtZW50LgorICBcZnNl eHByZXNzaW9uKCkgICAgICAgICBFdmFsdWF0ZXMgYW4gUy1FeHByZXNzaW9uIChleHBsYWluZWQg aW4gWzQ1MF1TZWN0aW9uIDkKKykuCisgIFxmdHJpbSgpLCBcZmx0cmltKCkgICAgIE5vdyB0cmlt IENSIGFuZCBMRiBieSBkZWZhdWx0LCBhcyB3ZWxsIGFzIFNQIGFuZCBUYWIuCisgIFxmdW5peHRv ZG9zcGF0aChzMSkgICAgIENvbnZlcnRzIGEgVW5peCBmaWxlbmFtZSB0byBET1MgZm9ybWF0Lgor ICBcZmtleXdvcmR2YWwoczEsYzEpICAgICBBc3NpZ25zIHZhbHVlcyB0byBrZXl3b3JkcyAobWFj cm9zKSAoZXhwbGFpbmVkIGJlbG93KS4KKworICAgTW9zdCBmdW5jdGlvbnMgdGhhdCBoYXZlICIy IiBpbiB0aGVpciBuYW1lcyB0byBzdGFuZCBmb3IgdGhlIHdvcmQgInRvIgorICAgY2FuIG5vdyBh bHNvIGJlIHdyaXR0ZW4gd2l0aCAidG8iLCBlLmcuICJcZmRlbHRhMnNlY3MoKSwiCisgICBcZmRl bHRhdG9zZWNzKCkuIgorCisgICBcZnVudGFiaWZ5KHN0cmluZykKKyAgICAgICAgICAoTmV3IHRv IDguMC4yMTEpIFJlcGxhY2VzIEhvcml6b250YWwgVGFiIGNoYXJhY3RlcnMgaW4gdGhlIGdpdmVu CisgICAgICAgICAgc3RyaW5nIHdpdGggc3BhY2VzIGJhc2VkIG9uIFZUMTAwLWxpa2UgdGFiIHN0 b3BzLgorCisgICBcZnZlcmlmeShzMSxzMixuKQorICAgICAgICAgIEFzIG9mIHZlcnNpb24gOC4w LjIxMSwgcmV0dXJucyAtMSBpZiBzMiBpcyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgICAgUHJl dmlvdXNseSBpdCByZXR1cm5lZCAwLCBtYWtpbmcgXGZ2ZXJpZnkoYWJjLFwlYSkgbG9vayBhcyBp ZgorICAgICAgICAgIFwlYSB3YXMgYSBzdHJpbmcgY29tcG9zZWQgb2YgYSdzLCBiJ3MsIGFuZC9v ciBjJ3Mgd2hlbiBpbiBmYWN0CisgICAgICAgICAgaXQgY29udGFpbmVkIG5vdGhpbmcuCisKKyAg IFxmY29kZShzdHJpbmcpCisgICAgICAgICAgQXMgb2YgdmVyc2lvbiA4LjAuMjExLCByZXR1cm5z IDAgaWYgc3RyaW5nIGlzIGVtcHR5IG9yIG1pc3NpbmcuCisgICAgICAgICAgUHJldmlvdXNseSBp dCByZXR1cm5lZCB0aGUgZW1wdHkgc3RyaW5nLCB3aGljaCBtYWRlIGl0IHVuc2FmZSB0bworICAg ICAgICAgIHVzZSBpbiBhcml0aG1ldGljIG9yIGJvb2xlYW4gZXhwcmVzc2lvbnMuCisKKyAgIFx2 KGluc2NhbGUpCisgICAgICAgICAgTmV3IHRvIHZlcnNpb24gOC4wLjIxMSwgaXRzIHZhbHVlIGlz IHRoZSBJTlBVVCBTQ0FMRS1GQUNUT1IKKyAgICAgICAgICAoWzQ1MV1TZWN0aW9uIDguMTApLCBk ZWZhdWx0IDEuMC4KKworOC43LjEuIFRoZSBcZmtleXdvcmR2YWwoKSBGdW5jdGlvbgorCisgICBc ZmtleXdvcmR2YWwoczEsYzEpIGlzIG5ldyB0byBDLUtlcm1pdCA4LjAuIEdpdmVuIGEgc3RyaW5n IHMxIG9mIHRoZQorICAgZm9ybSAibmFtZT12YWx1ZSIsIGl0IGNyZWF0ZXMgYSBtYWNybyB3aXRo IHRoZSBnaXZlbiBuYW1lIGFuZCBhc3NpZ25zCisgICBpdCB0aGUgZ2l2ZW4gdmFsdWUuIElmIG5v IHZhbHVlIGFwcGVhcnMgYWZ0ZXIgdGhlIGVxdWFsIHNpZ24sIGFueQorICAgZXhpc3RpbmcgbWFj cm8gb2YgdGhlIGdpdmVuIG5hbWUgaXMgdW5kZWZpbmVkLiBCbGFua3MgYXJlIGF1dG9tYXRpY2Fs bHkKKyAgIHRyaW1tZWQgZnJvbSBhcm91bmQgdGhlIG5hbWUgYW5kIHZhbHVlLiBUaGUgb3B0aW9u YWwgYzEgcGFyYW1ldGVyIGlzCisgICB0aGUgYXNzaWdubWVudCBvcGVyYXRvciBjaGFyYWN0ZXIs IGVxdWFsIHNpZ24gKD0pIGJ5IGRlZmF1bHQuIFRoaXMKKyAgIGZ1bmN0aW9uIGlzIGhhbmR5IGZv ciBwcm9jZXNzaW5nIGtleXdvcmQgcGFyYW1ldGVycyBvciBhbnkgb3RoZXIgZm9ybQorICAgb2Yg cGFyYW1ldGVyLXZhbHVlIHBhaXIuIFN1cHBvc2UsIGZvciBleGFtcGxlLCB5b3Ugd2FudCB0byB3 cml0ZSBhCisgICBtYWNybyB0aGF0IGFjY2VwdHMga2V5d29yZCBwYXJhbWV0ZXJzIHJhdGhlciB0 aGFuIHBvc2l0aW9uYWwgb25lczoKKworICBkZWZpbmUgTVlESUFMIHsKKyAgICAgIGxvY2FsIFwl aSBtb2RlbSBoYW5ndXAgbWV0aG9kIGRldmljZSBzcGVlZCBudW1iZXIKKyAgICAgIGRlZiBudW1i ZXIgNTU1MTIzNCAgICAgICAgICA7IEFzc2lnbiBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMKKyAg ICAgIGRlZiBzcGVlZCA1NzYwMAorICAgICAgZGVmIG1vZGVtIHVzcm9ib3RpY3MKKyAgICAgIGRl ZiBoYW5ndXAgcnMyMzIKKyAgICAgIGRlZiBtZXRob2QgdG9uZQorICAgICAgZGVmIGNvdW50cnkg MQorICAgICAgZm9yIFwlaSAxIFx2KGFyZ2MpLTEgMSB7ICAgIDsgUGFyc2UgYW55IGtleXdvcmQg cGFyYW1ldGVycy4uLgorICAgICAgICAgIGlmIG5vdCBcZmtleXdvcmR2YWwoXCZfW1wlaV0pIGVu ZCAxIEJhZCBwYXJhbWV0ZXI6ICJcJl9bXCVpXSIKKyAgICAgIH0KKyAgICAgIHNldCBkaWFsIGNv dW50cnkgXG0oY291bnRyeSkKKyAgICAgIHNldCBtb2RlbSB0eXBlIFxtKG1vZGVtKQorICAgICAg c2V0IG1vZGVtIGhhbmcgXG0oaGFuZ3VwKQorICAgICAgc2V0IGRpYWwgbWV0aG9kIFxtKHRvbmUp CisgICAgICBzZXQgbGluZSBcbShkZXZpY2UpCisgICAgICBpZiBmYWlsIHN0b3AgMQorICAgICAg c2V0IHNwZWVkIFxtKHNwZWVkKQorICAgICAgaWYgZmFpbCBzdG9wIDEKKyAgICAgIHNob3cgY29t bQorICAgICAgc2V0IGRpYWwgZGlzcGxheSBvbgorICAgICAgZGlhbCBcbShudW1iZXIpCisgICAg ICBpZiBzdWNjZXNzIGNvbm5lY3QKKyAgfQorCisgICBJbiB0aGlzIGV4YW1wbGUsIGFsbCB0aGUg ZGVmYXVsdHMgYXJlIHNldCB1cCBpbnNpZGUgdGhlIG1hY3JvLCBhbmQKKyAgIHRoZXJlZm9yZSBp dCBjYW4gYmUgaW52b2tlZCB3aXRoIG5vIHBhcmFtZXRlcnMgYXQgYWxsLiBCdXQgaWYgeW91IHdh bnQKKyAgIHRvIGhhdmUgdGhlIG1hY3JvIGRpYWwgYSBkaWZmZXJlbnQgbnVtYmVyLCB5b3UgY2Fu IHN1cHBseSBpdCBhcworICAgZm9sbG93czoKKworICBteWRpYWwgbnVtYmVyPTc2NTQzMjEKKwor ICAgWW91IGNhbiBzdXBwbHkgYW55IG51bWJlciBvZiBrZXl3b3JkIHBhcmFtZXRlcnMsIGFuZCB5 b3UgY2FuIGdpdmUgdGhlbQorICAgaW4gYW55IG9yZGVyOgorCisgIG15ZGlhbCBudW1iZXI9NzY1 NDMyMSBoYW5ndXA9bW9kZW0gc3BlZWQ9MTE1MjAwCisKKzguNy4yLiBUaGUgXGZzcGxpdCgpLCBc ZmpvaW4oKSwgYW5kIFxmd29yZCgpIEZ1bmN0aW9ucworCisgICBcZmpvaW4oJmEsczEsbjEsbjIp IGlzIGFsc28gbmV3OyBpdCBjcmVhdGVzIGEgc3RyaW5nIGZyb20gYW4gYXJyYXkgKG9yCisgICBh IHBpZWNlIG9mIG9uZSkuICZhIGlzIHRoZSBuYW1lIG9mIHRoZSBhcnJheSAoYSByYW5nZSBzcGVj aWZpZXIgY2FuIGJlCisgICBpbmNsdWRlZCk7IHMxIGlzIGEgY2hhcmFjdGVyIG9yIHN0cmluZyB0 byBzZXBhcmF0ZSBlYWNoIGVsZW1lbnQgaW4gdGhlCisgICByZXN1bHQgc3RyaW5nIChjYW4gYmUg b21pdHRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgZWxlbWVudHMgYXJlIG5vdAorICAgc2VwYXJhdGVk IGF0IGFsbCksIGFuZCBuMSBpcyBhIGdyb3VwaW5nIG1hc2ssIGV4cGxhaW5lZCBiZWxvdy4gSWYg czEgaXMKKyAgIGVtcHR5IG9yIG5vdCBzcGVjaWZpZWQsIHRoZSBhcnJheSBlbGVtZW50cyBhcmUg c2VwYXJhdGVkIHdpdGggc3BhY2VzLgorICAgSWYgeW91IHdhbnQgdGhlIGVsZW1lbnRzIGNvbmNh dGVuYXRlZCB3aXRoIG5vIHNlcGFyYXRvciwgaW5jbHVkZSBhCisgICBub256ZXJvIG4yIGFyZ3Vt ZW50LiBHaXZlbiB0aGUgYXJyYXk6CisKKyAgZGVjbGFyZSBcJmFbXSA9IDAgMSAyIDMgNCA1IDYg NyA4IDkKKworICAgeW91IGNhbiBnZXQgZWZmZWN0cyBsaWtlIHRoaXM6CisKKyAgXGZqb2luKCZh KSAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkKKyAgXGZqb2luKCZhLDopICAgIDA6MToyOjM6NDo1 OjY6Nzo4OjkKKyAgXGZqb2luKCZhLHssfSkgIDAsMSwyLDMsNCw1LDYsNyw4LDkKKyAgXGZqb2lu KCZhLC4uLikgIDAuLi4xLi4uMi4uLjMuLi40Li4uNS4uLjYuLi43Li4uOC4uLjkKKyAgXGZqb2lu KCZhLCwsMSkgIDAxMjM0NTY3ODkKKworICAgXGZzcGxpdCgpLCBcZndvcmQoKSwgXGZzdHJpcGIo KSwgYW5kIFxmam9pbigpIGFjY2VwdCBhICJncm91cGluZyBtYXNrIgorICAgYXJndW1lbnQsIG4x LCB3aGljaCBpcyBhIG51bWJlciBmcm9tIDAgdG8gNjMsIGluIHdoaWNoOgorCisgICAxID0gIiIg ZG91YmxlcXVvdGVzCisgICAyID0ge30gYnJhY2VzCisgICA0ID0gJycgc2luZ2xlcXVvdGVzCisg ICA4ID0gKCkgcGFyZW50aGVzZXMKKyAgMTYgPSBbXSBzcXVhcmUgYnJhY2tldHMKKyAgMzIgPSA8 PiBhbmdsZSBicmFja2V0cworCisgICBUaGVzZSBjYW4gYmUgT1InZCAoYWRkZWQpIHRvZ2V0aGVy IHRvIG1ha2UgYW55IG51bWJlciAwLTYzICgtMSBpcworICAgdHJlYXRlZCB0aGUgc2FtZSBhcyA2 MywgMCBtZWFucyBubyBncm91cGluZykuIElmIGEgYml0IGlzIG9uLCB0aGUKKyAgIGNvcnJlc3Bv bmRpbmcga2luZCBvZiBncm91cGluZyBpcyBzZWxlY3RlZC4gKElmIG1vcmUgdGhhbiAxIGJpdCBp cyBzZXQKKyAgIGZvciBcZmpvaW4oKSwgb25seSB0aGUgbG93ZXN0LW9yZGVyIG9uZSBpcyB1c2Vk LikKKworICAgSWYgeW91IGluY2x1ZGUgdGhlIHNhbWUgY2hhcmFjdGVyIGluIHRoZSBncm91cGlu ZyBtYXNrIGFuZCB0aGUgaW5jbHVkZQorICAgbGlzdCwgdGhlIGdyb3VwaW5nIG1hc2sgdGFrZXMg cHJlY2VkZW5jZS4gRXhhbXBsZToKKworICBkZWYgXCVhICBhICJiIGMgZCIgZQorICBcZnNwbGl0 KFwlYSwmYVtdLCwsLTEpICA9IDMgIDwtLSBkb3VibGVxdW90ZSB1c2VkIGZvciBncm91cGluZwor ICBcZnNwbGl0KFwlYSwmYVtdLCwiLC0xKSA9IDMgIDwtLSBkb3VibGVxdW90ZSBzdGlsbCB1c2Vk IGZvciBncm91cGluZworCisgICBOZXN0aW5nIG9mIG1hdGNoZWQgbGVmdCBhbmQgcmlnaHQgZ3Jv dXBpbmcgY2hhcmFjdGVycyAocGFyZW50aGVzZXMsCisgICBicmFjZXMsIGFuZCBicmFja2V0cywg YnV0IG5vdCBxdW90ZXMpIGlzIHJlY29nbml6ZWQuIEV4YW1wbGU6CisKKyAgZGVmIFwlYSBhIChi IGMgPGQgZSBbZiBnIHtoIGl9IGoga10gbCBtPiBuIG8pIHAKKyAgXGZzcGxpdChcJWEsJmEsLCww KSAgPSAxNiAobm8gZ3JvdXBpbmcpCisgIFxmc3BsaXQoXCVhLCZhLCwsMikgID0gMTUgKGJyYWNl cyBvbmx5KQorICBcZnNwbGl0KFwlYSwmYSwsLDE2KSA9IDExIChzcXVhcmUgYnJhY2tldHMgb25s eSkKKyAgXGZzcGxpdChcJWEsJmEsLCwzMikgPSAgNyAoYW5nbGUgYnJhY2tldHMgb25seSkKKyAg XGZzcGxpdChcJWEsJmEsLCw2MykgPSAgMyAoYWxsKQorICBcZnNwbGl0KFwlYSwmYSwsLC0xKSA9 ICAzIChhbGwpCisKKyAgIFxmc3BsaXQoKSBhbmQgXGZqb2luKCkgYXJlICJyZWNpcHJvY2FsIiBm dW5jdGlvbnMuIFlvdSBjYW4gc3BsaXQgYQorICAgc3RyaW5nIHVwIGludG8gYW4gYXJyYXkgYW5k IGpvaW4gaXQgYmFjayBpbnRvIGEgbmV3IHN0cmluZyB0aGF0IGlzCisgICBlcXVpdmFsZW50LCBh cyBsb25nIGFzIFxmc3BsaXQoKSBhbmQgXGZqb2luKCkgYXJlIGdpdmVuIGVxdWl2YWxlbnQKKyAg IGdyb3VwaW5nIG1hc2tzLCBleGNlcHQgdGhhdCB0aGUgdHlwZSBvZiBicmFjZXMgbWlnaHQgY2hh bmdlLiBFeGFtcGxlOgorCisgIGRlZiBcJWEgYSB7YiBjIFtkIGVdIGYgZ30gImggaSIgaiA8ayBs PiBtCisgIGVjaG8gU1RSSU5HPVtcJWFdCisgIGVjaG8gV09SRFM9XGZzcGxpdChcJWEsJmEsLCwt MSkKKyAgc2hvdyBhcnJheSBhCisgIGFzZyBcJWIgXGZqb2luKCZhLHsgfSwyKQorICBlY2hvIEpP SU4gID1bXCViXQorICBlY2hvIFdPUkRTPVxmc3BsaXQoXCViLCZiLCwsLTEpCisgIHNob3cgYXJy YXkgYgorCisgICBUaGUgYXJyYXlzIGEgYW5kIGIgYXJlIGlkZW50aWNhbC4gVGhlIHN0cmluZ3Mg YSBhbmQgYiBhcmUgYXMgZm9sbG93czoKKworICBcJWE6IGEge2IgYyBbZCBlXSBmIGd9ICJoIGki IGogPGsgbD4gbQorICBcJWI6IGEge2IgYyBbZCBlXSBmIGd9IHtoIGl9IGoge2sgbH0gbQorCisg ICBJdCBpcyBwb3NzaWJsZSB0byBxdW90ZSBzZXBhcmF0b3IgZ3JvdXBpbmcgY2hhcmFjdGVycyB3 aXRoIGJhY2tzbGFzaCB0bworICAgb3ZlcnJpZGUgdGhlaXIgZ3JvdXBpbmcgZnVuY3Rpb24uIEFu ZCBvZiBjb3Vyc2UgdG8gaW5jbHVkZSBiYWNrc2xhc2gKKyAgIGl0c2VsZiBpbiB0aGUgc3RyaW5n LCBpdCBtdXN0IGJlIHF1b3RlZCB0b28uIEZ1cnRoZXJtb3JlLCBlYWNoCisgICBiYWNrc2xhc2gg bXVzdCBiZSBkb3VibGVkLCBzbyB0aGUgY29tbWFuZCBwYXJzZXIgd2lsbCBzdGlsbCBwYXNzIG9u ZQorICAgYmFja3NsYXNoIHRvIFxmc3BsaXQoKSBmb3IgZWFjaCB0d28gdGhhdCBpdCBzZWVzLiBI ZXJlIGFyZSBzb21lCisgICBleGFtcGxlcyB1c2luZyBcZnNwbGl0KCkgd2l0aCBhIGdyb3VwaW5n IG1hc2sgb2YgOCAodHJlYXQgcGFyZW50aGVzZXMKKyAgIGFzIGdyb3VwaW5nIGNoYXJhY3RlcnMp LgorCisgIFN0cmluZyAgICAgICAgICAgICAgICAgIFJlc3VsdAorICAgIGEgYiBjIGQgZSBmICAg ICAgICAgICAgIDYKKyAgICBhIGJcXCBjIGQgZSBmICAgICAgICAgICA1CisgICAgYSBiIChjIGQg ZSkgZiAgICAgICAgICAgNAorICAgIGEgYiBcXChjIGQgZVxcKSBmICAgICAgIDYKKyAgICBhIGIg XFxcXChjIGQgZVxcXFwpIGYgICA3CisKKyAgIFxmc3BsaXQoKSBoYXMgYWxzbyBiZWVuIGNoYW5n ZWQgdG8gY3JlYXRlIGl0cyBhcnJheSAoaWYgb25lIGlzIGdpdmVuKQorICAgZWFjaCB0aW1lIGl0 IGlzIGNhbGxlZCwgc28gbm93IGl0IGNhbiBiZSBjb252ZW5pZW50bHkgY2FsbGVkIGluIGEgbG9v cAorICAgd2l0aG91dCBoYXZpbmcgdG8gcmVkZWNsYXJlIHRoZSBhcnJheSBlYWNoIHRpbWUuCisK KyAgIEluY2lkZW50YWxseS4uLiBTb21ldGltZXMgeW91IG1pZ2h0IHdhbnQgdG8gaW52b2tlIFxm c3BsaXQoKSBpbiBhCisgICBzaXR1YXRpb24gd2hlcmUgeW91IGRvbid0IGNhcmUgYWJvdXQgaXRz IHJldHVybiB2YWx1ZSwgZS5nLiB3aGVuIHlvdQorICAganVzdCB3YW50IHRvIGZpbGwgdGhlIGFy cmF5LiBOb3cgeW91IGNhbiAiY2FsbCIgXGZzcGxpdCgpIG9yIGFueSBvdGhlcgorICAgZnVuY3Rp b24gd2l0aCB0aGUgbmV3IFs0NTJdVk9JRCBjb21tYW5kOgorCisgIHZvaWQgXGZzcGxpdChcJWEs JmEpCisKKyAgIFxmc3BsaXQoKSBhbmQgXGZqb2luKCkgYWxzbyBhY2NlcHQgYSBuZXcsIG9wdGlv bmFsIDZ0aCBhcmd1bWVudCwgYW4KKyAgIG9wdGlvbnMgZmxhZywgYSBudW1iZXIgdGhhdCBjYW4g c3BlY2lmeSBhIG51bWJlciBvZiBvcHRpb25zLiBTbyBmYXIKKyAgIHRoZXJlIGlzIGp1c3Qgb25l IG9wdGlvbiwgd2hvc2UgdmFsdWUgaXMgMToKKworICAgc2VwYXJhdG9yLWZsYWcKKyAgICAgICAg ICBOb3JtYWxseSBzZXBhcmF0b3JzIGFyZSBjb2xsYXBzZWQuIFNvLCBmb3IgZXhhbXBsZSwKKwor ICBcZndvcmQoVGhyZWUgICAgICAgIGxpdHRsZSAgICAgICAgICB3b3JkcywyKQorCisgICAgICAg ICAgcmV0dXJucyAibGl0dGxlIiAodGhlIHNlY29uZCB3b3JkKS4gU3BhY2UgaXMgYSBzZXBhcmF0 b3IsIGJ1dAorICAgICAgICAgIHRoZXJlIGFyZSBtdWx0aXBsZSBzcGFjZXMgYmV0d2VlbiBlYWNo IHdvcmQuIElmIHRoZSB2YWx1ZSAxIGlzCisgICAgICAgICAgaW5jbHVkZWQgaW4gdGhlIG9wdGlv biBmbGFnLCBob3dldmVyLCBlYWNoIHNlcGFyYXRvciBjb3VudHMuIElmCisgICAgICAgICAgdHdv IHNlcGFyYXRvcnMgYXJlIGFkamFjZW50LCBhbiBlbXB0eSB3b3JkIGlzIHByb2R1Y2VkIGJldHdl ZW4KKyAgICAgICAgICB0aGVtLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcGFyc2luZyAoZS5nLikgY29t bWEtc2VwYXJhdGVkIGxpc3RzCisgICAgICAgICAgZXhwb3J0ZWQgZnJvbSBkYXRhYmFzZXMgb3Ig c3ByZWFkc2hlZXRzLgorCis4LjcuMy4gVGhlIFxmY21kc3RhY2soKSBGdW5jdGlvbgorCisgICBU aGUgbmV3IFxmY21kc3RhY2soKSBmdW5jdGlvbiBnaXZlcyBhY2Nlc3MgdG8gdGhlIGNvbW1hbmQg c3RhY2s6CisKKyAgIFxmY21kc3RhY2sobjEsbjIpCisgICAgICAgICAgQXJndW1lbnRzOiBuMSBp cyB0aGUgY29tbWFuZCBzdGFjayBsZXZlbC4gSWYgb21pdHRlZCwgdGhlCisgICAgICAgICAgY3Vy cmVudCBsZXZlbCwgXHYoY21kbGV2ZWwpLCBpcyB1c2VkLiBuMiBpcyBhIGZ1bmN0aW9uIGNvZGUK KyAgICAgICAgICBzcGVjaWZ5aW5nIHRoZSBkZXNpcmVkIHR5cGUgb2YgaW5mb3JtYXRpb246CisK KyAgMCAoZGVmYXVsdCkgPSBuYW1lIG9mIG9iamVjdCBhdCBsZXZlbCBuMS4KKyAgMSAobm9uemVy bykgPSBvYmplY3QgdHlwZSAoMCA9IHByb21wdDsgMSA9IGNvbW1hbmQgZmlsZTsgMiA9IG1hY3Jv KS4KKworICAgICAgICAgIFRoZSBkZWZhdWx0IGZvciBuMiBpcyAwLgorCisgICBUaGUgbmFtZSBh c3NvY2lhdGVkIHdpdGggcHJvbXB0IGlzICIocHJvbXB0KSIuIEhlcmUncyBhIGxvb3AgdGhhdCBj YW4KKyAgIGJlIGluY2x1ZGVkIGluIGEgbWFjcm8gb3IgY29tbWFuZCBmaWxlIHRvIHNob3cgdGhl IHN0YWNrIChzaW1pbGFyIHRvCisgICB3aGF0IHRoZSBTSE9XIFNUQUNLIGNvbW1hbmQgZG9lcyk6 CisKKyAgZm9yIFwlaSBcdihjbWRsZXZlbCkgMCAtMSB7CisgICAgICBlY2hvIFwlaS4gW1xmY21k c3RhY2soXCVpLDEpXSBcZmNtZHN0YWNrKFwlaSwwKQorICB9CisKKyAgIEluIHRoaXMgY29ubmVj dGlvbiwgbm90ZSB0aGF0IFx2KGNtZGZpbGUpIGFsd2F5cyBpbmRpY2F0ZXMgdGhlIG1vc3QKKyAg IHJlY2VudGx5IGludm9rZWQgYWN0aXZlIGNvbW1hbmQgZmlsZSAoaWYgYW55KSwgZXZlbiBpZiB0 aGF0IGZpbGUgaXMKKyAgIGV4ZWN1dGluZyBhIG1hY3JvLiBTaW1pbGFybHksIFx2KG1hY3JvKSBp bmRpY2F0ZXMgdGhlIG1vc3QgcmVjZW50bHkKKyAgIGludm9rZWQgbWFjcm8gKGlmIGFueSksIGV2 ZW4gaWYgdGhlIGN1cnJlbnQgY29tbWFuZCBzb3VyY2UgaXMgbm90IGEKKyAgIG1hY3JvLiBUaGUg bmFtZSBvZiB0aGUgImNhbGxlciIgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgb2JqZWN0Cisg ICAoY29tbWFuZCBmaWxlIG9yIG1hY3JvKSBpczoKKworICBcZmNtZHN0YWNrKFx2KGNtZGxldmVs KS0xKQorCisgICBhbmQgaXRzIHR5cGUgaXM6CisKKyAgXGZjbWRzdGFjayhcdihjbWRsZXZlbCkt MSwxKQorCisgICBUbyBmaW5kIHRoZSBuYW1lIG9mIHRoZSBtYWNybyB0aGF0IGludm9rZWQgdGhl IGN1cnJlbnRseSBleGVjdXRpbmcKKyAgIG9iamVjdCwgZXZlbiBpZiBvbmUgb3IgbW9yZSBpbnRl cm1lZGlhdGUgY29tbWFuZCBmaWxlcyAob3IgcHJvbXB0aW5nCisgICBsZXZlbHMpIGFyZSBpbnZv bHZlZCwgdXNlIGEgbG9vcCBsaWtlIHRoaXM6CisKKyAgZm9yIFwlaSBcdihjbWRsZXZlbCktMSAw IC0xIHsKKyAgICAgIGlmID0gXGZjbWRzdGFjayhcJWksMSkgMiBlY2hvIENBTExFUiA9IFxmY21k c3RhY2soXCVpLDApCisgIH0KKworICAgT2YgY291cnNlIGlmIHlvdSBtYWtlIGEgbWFjcm8gdG8g ZG8gdGhpcywgdGhlIG1hY3JvIG11c3QgYWNjb3VudCBmb3IKKyAgIGl0cyBvd24gYWRkaXRpb25h bCBsZXZlbDoKKworICBkZWZpbmUgQ0FMTEVSIHsKKyAgICAgIGZvciBcJWkgXHYoY21kbGV2ZWwp LTIgMCAtMSB7CisgICAgICAgICAgaWYgPSBcZmNtZHN0YWNrKFwlaSwxKSAyIHJldHVybiBcZmNt ZHN0YWNrKFwlaSwwKQorICAgICAgfQorICAgICAgcmV0dXJuICIobm9uZSkiCisgIH0KKworICAg VGhlIGJ1aWx0LWluIHZhcmlhYmxlIFx2KGNtZHNvdXJjZSkgZ2l2ZXMgdGhlIGN1cnJlbnQgY29t bWFuZCBzb3VyY2UgYXMKKyAgIGEgd29yZCAoInByb21wdCIsICJmaWxlIiwgb3IgIm1hY3JvIiku CisKKzguNy40LiBUaGUgVk9JRCBDb21tYW5kCisKKyAgIFZPSUQgaXMgbGlrZSBFQ0hPIGluIHRo YXQgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIGl0cyBhcmd1bWVudAorICAgdGV4dCBh cmUgZXZhbHVhdGVkLiBidXQgaXQgZG9lc24ndCBwcmludCBhbnl0aGluZyAoZXhjZXB0IHBvc3Np Ymx5IGFuCisgICBlcnJvciBtZXNzYWdlIGlmIGEgZnVuY3Rpb24gd2FzIGludm9jYXRpb24gY29u dGFpbmVkIG9yIHJlc3VsdGVkIGluIGFueQorICAgZXJyb3JzKS4gVk9JRCBzZXRzIEZBSUxVUkUg aWYgaXQgZW5jb3VudGVycyBhbnkgZXJyb3JzLCBTVUNDRVNTCisgICBvdGhlcndpc2UuCisKKyAg IFsgWzQ1M11Ub3AgXSBbIFs0NTRdQ29udGVudHMgXSBbIFs0NTVdQy1LZXJtaXQgSG9tZSBdIFsg WzQ1Nl1LZXJtaXQKKyAgIEhvbWUgXQorCis4LjguIFRoZSBSRVRVUk4gYW5kIEVORCBDb21tYW5k cworCisgICBUaGUgZXhlY3V0aW9uIG9mIGEgbWFjcm8gaXMgdGVybWluYXRlZCBpbiBhbnkgb2Yg dGhlIGZvbGxvd2luZyB3YXlzOgorCisgICAgICogV2l0aCBhbiBFTkQgWyBudW1iZXIgWyBtZXNz YWdlIF0gXSBjb21tYW5kLiBJZiBhIG51bWJlciBpcyBnaXZlbiwKKyAgICAgICB0aGUgbWFjcm8g c3VjY2VlZHMgaWYgdGhlIG51bWJlciBpcyAwLCBhbmQgZmFpbHMgaWYgaXQgaXMgbm90IHplcm87 CisgICAgICAgaWYgYSBudW1iZXIgaXMgbm90IGdpdmVuLCB0aGUgbWFjcm8gc3VjY2VlZHMuCisg ICAgICogV2l0aCBhIFNUT1AgY29tbWFuZCwgd2hpY2ggd29ya3MganVzdCBsaWtlIEVORCBleGNl cHQgaXQgcGVlbHMgYmFjaworICAgICAgIHRoZSBjb21tYW5kIHN0YWNrIGFsbCB0aGUgd2F5IHRv IHRvcCBsZXZlbC4KKyAgICAgKiBXaXRoIGEgUkVUVVJOIFsgdGV4dCBdIGNvbW1hbmQsIGluIHdo aWNoIGNhc2UgdGhlIG1hY3JvIGFsd2F5cworICAgICAgIHN1Y2NlZWRzLgorICAgICAqIEJ5IHJ1 bm5pbmcgb3V0IG9mIGNvbW1hbmRzIHRvIGV4ZWN1dGUsIGluIHdoaWNoIGNhc2UgdGhlIG1hY3Jv CisgICAgICAgc3VjY2VlZHMgb3IgZmFpbHMgYWNjb3JkaW5nIHRoZSBtb3N0IHJlY2VudGx5IGV4 ZWN1dGVkIGNvbW1hbmQgdGhhdAorICAgICAgIHNldHMgc3VjY2VzcyBvciBmYWlsdXJlLgorCisg ICBUaGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSB0byBjb21tYW5kIGZpbGVzIGludm9rZWQg YnkgdGhlIFRBS0UKKyAgIGNvbW1hbmQuCisKKyAgIElmIGEgbWFjcm8gZG9lcyBub3QgZXhlY3V0 ZSBhbnkgY29tbWFuZHMgdGhhdCBzZXQgc3VjY2VzcyBvciBmYWlsdXJlLAorICAgdGhlbiBpbnZv a2luZyB0aGUgbWFjcm8gZG9lcyBub3QgY2hhbmdlIHRoZSBjdXJyZW50IFNVQ0NFU1MvRkFJTFVS RQorICAgc3RhdHVzLiBJdCBmb2xsb3dzLCB0aGVuLCB0aGF0IHRoZSBtZXJlIGludm9jYXRpb24g b2YgYSBtYWNybyBkb2VzIG5vdAorICAgY2hhbmdlIHRoZSBTVUNDRVNTL0ZBSUxVUkUgc3RhdHVz IGVpdGhlci4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0bworICAgd3JpdGUgbWFjcm9zIHRvIHJl YWN0IHRvIHRoZSBzdGF0dXMgb2Ygb3RoZXIgY29tbWFuZHMgKG9yIG1hY3JvcyksIGZvcgorICAg ZXhhbXBsZToKKworICBkZWZpbmUgQ0hLTElORSB7CisgICAgICBpZiBzdWNjZXNzIGVuZCAwCisg ICAgICBzdG9wIDEgU0VUIExJTkUgZmFpbGVkIC0gcGxlYXNlIHRyeSBhbm90aGVyIGRldmljZS4K KyAgfQorICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzCisgIHNldCBsaW5lIC9kZXYvY3VhMAor ICBjaGtsaW5lCisgIHNldCBzcGVlZCA1NzYwMAorICBkaWFsIDc2NTQzMjEKKworICAgQnkgdGhl IHdheSwgbm9uZSBvZiB0aGlzIGlzIG5ld3MuIEJ1dCBpdCB3YXMgbm90IGV4cGxpY2l0bHkgZG9j dW1lbnRlZAorICAgYmVmb3JlLCBhbmQgQy1LZXJtaXQgNy4wIGFuZCBlYXJsaWVyIGRpZCBub3Qg YWx3YXlzIGhhbmRsZSB0aGUgUkVUVVJOCisgICBzdGF0ZW1lbnQgYXMgaXQgc2hvdWxkIGhhdmUu CisKKyAgIFsgWzQ1N11Ub3AgXSBbIFs0NThdQ29udGVudHMgXSBbIFs0NTldQy1LZXJtaXQgSG9t ZSBdIFsgWzQ2MF1LZXJtaXQKKyAgIEhvbWUgXQorCis4LjkuIFVOREVGSU5pbmcgR3JvdXBzIG9m IFZhcmlhYmxlcworCisgICBUaGUgVU5ERUZJTkUgY29tbWFuZCwgd2hpY2ggcHJldmlvdXNseSBh Y2NlcHRlZCBvbmUgdmFyaWFibGUgbmFtZSwgbm93CisgICBhY2NlcHRzIGEgbGlzdCBvZiB0aGVt LCBhbmQgYWxzbyBhY2NlcHRzIHdpbGRjYXJkIG5vdGF0aW9uIHRvIGFsbG93CisgICBkZWxldGlv biBvZiB2YXJpYWJsZXMgdGhhdCBtYXRjaCBhIGdpdmVuIHBhdHRlcm4uCisKKyAgIFVOREVGSU5F IFsgc3dpdGNoZXMgXSBuYW1lIFsgbmFtZSBbIG5hbWUgWyAuLi4gXSBdIF0KKyAgICAgICAgICBV bmRlZmluZXMgdGhlIHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBhcmUgZ2l2ZW4uIFVwIHRvIDY0IG5h bWVzCisgICAgICAgICAgbWF5IGJlIGdpdmVuIGluIG9uZSBVTkRFRklORSBjb21tYW5kLgorCisg ICBJZiB5b3Ugb21pdCB0aGUgc3dpdGNoZXMgYW5kIGluY2x1ZGUgb25seSBvbmUgbmFtZSwgdGhl IFVOREVGSU5FCisgICBjb21tYW5kIHdvcmtzIGFzIGJlZm9yZS4KKworICAgU3dpdGNoZXMgaW5j bHVkZToKKworICAgL01BVENISU5HCisgICAgICAgICAgU3BlY2lmaWVzIHRoYXQgdGhlIG5hbWVz IGdpdmVuIGFyZSB0byB0cmVhdGVkIGFzIHBhdHRlcm5zIHJhdGhlcgorICAgICAgICAgIHRoYW4g bGl0ZXJhbCB2YXJpYWJsZSBuYW1lcy4gTm90ZTogcGF0dGVybiBtYXRjaGluZyBjYW4ndCBiZQor ICAgICAgICAgIHVzZWQgd2l0aCBhcnJheSByZWZlcmVuY2VzOyB1c2UgdGhlIEFSUkFZIGNvbW1h bmQgdG8gbWFuaXB1bGF0ZQorICAgICAgICAgIGFycmF5cyBhbmQgc3ViYXJyYXlzLgorCisgICAv TElTVAorICAgICAgICAgIExpc3QgdGhlIG5hbWUgb2YgZWFjaCB2YXJpYWJsZSB0byBiZSB1bmRl ZmluZWQsIGFuZCB3aGV0aGVyIGl0CisgICAgICAgICAgd2FzIHVuZGVmaW5lZCBzdWNjZXNzZnVs bHkgKCJvayIgb3IgImVycm9yIiksIHBsdXMgYSBzdW1tYXJ5CisgICAgICAgICAgY291bnQgYXQg dGhlIGVuZC4KKworICAgL1NJTVVMQVRFCisgICAgICAgICAgTGlzdCB0aGUgbmFtZXMgb2YgdGhl IHZhcmlhYmxlcyB0aGF0IHdvdWxkIGJlIGRlbGV0ZWQgd2l0aG91dAorICAgICAgICAgIGFjdHVh bGx5IGRlbGV0aW5nIHRoZW0uIEltcGxpZXMgL0xJU1QuCisKKyAgIFRoZSBVTkRFRklORSBjb21t YW5kIGZhaWxzIGlmIHRoZXJlIHdlcmUgYW55IGVycm9ycyBhbmQgc3VjY2VlZHMKKyAgIG90aGVy d2lzZS4KKworICAgVGhlIG5ldyBfVU5ERUZJTkUgY29tbWFuZCBpcyBsaWtlIFVOREVGSU5FLCBl eGNlcHQgdGhlIG5hbWVzIGFyZQorICAgYXNzdW1lZCB0byBiZSB2YXJpYWJsZSBuYW1lcyB0aGVt c2VsdmVzLCB3aGljaCBjb250YWluIHRoZSBuYW1lcyAob3IKKyAgIHBhcnRzIG9mIHRoZW0pIG9m IHRoZSB2YXJpYWJsZXMgdG8gYmUgdW5kZWZpbmVkLiBGb3IgZXhhbXBsZSwgaWYgeW91CisgICBo YXZlIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnM6CisKKyAgZGVmaW5lIFwlYSBmb28KKyAgZGVm aW5lIGZvbyBUaGlzIGlzIHNvbWUgdGV4dAorCisgICB0aGVuOgorCisgIHVuZGVmIFwlYQorCisg ICB1bmRlZmluZXMgdGhlIHZhcmlhYmxlIFwlYSwgYnV0OgorCisgIF91bmRlZiBcJWEKKworICAg dW5kZWZpbmVzIHRoZSBtYWNybyBmb28uCisKKyAgIE5vcm1hbCBLZXJtaXQgcGF0dGVybnMgYXJl IHVzZWQgZm9yIG1hdGNoaW5nOyBtZXRhY2hhcmFjdGVycyBpbmNsdWRlCisgICBhc3Rlcmlzaywg cXVlc3Rpb24gbWFyaywgYnJhY2VzLCBhbmQgc3F1YXJlIGJyYWNrZXRzLiBUaHVzLCB3aGVuIHVz aW5nCisgICB0aGUgL01BVENISU5HIHN3aXRjaCwgaWYgdGhlIG5hbWVzIG9mIHRoZSBtYWNyb3Mg eW91IHdhbnQgdG8gdW5kZWZpbmUKKyAgIGNvbnRhaW4gYW55IG9mIHRoZXNlIGNoYXJhY3RlcnMs IHlvdSBtdXN0IHF1b3RlIHRoZW0gd2l0aCBiYWNrc2xhc2ggdG8KKyAgIGZvcmNlIHRoZW0gdG8g YmUgdGFrZW4gbGl0ZXJhbGx5LiBBbHNvIG5vdGUgdGhhdCBcJSogaXMgbm90IHRoZSBuYW1lIG9m CisgICBhIHZhcmlhYmxlOyBpdCBpcyBhIHNwZWNpYWwgbm90YXRpb24gdXNlZCB3aXRoaW4gYSBt YWNybyBmb3IgImFsbCBteQorICAgYXJndW1lbnRzIi4gVGhlIGNvbW1hbmQgInVuZGVmIC9tYXRj aCBcJSoiIGRlbGV0ZXMgYWxsIFwleCB2YXJpYWJsZXMsCisgICB3aGVyZSB4IGlzIDAuLjkgYW5k IGEuLnouIFVzZSAidW5kZWYgL21hdGNoIFwlWzAtOV0iIHRvIGRlbGV0ZSBtYWNybworICAgYXJn dW1lbnQgdmFyaWFibGVzIG9yICJ1bmRlZiAvbWF0Y2ggXCVbaS1uXSIgdG8gZGVsZXRlIGEgcmFu Z2Ugb2YgXCV4CisgICB2YXJpYWJsZXMuCisKKyAgIFsgWzQ2MV1Ub3AgXSBbIFs0NjJdQ29udGVu dHMgXSBbIFs0NjNdQy1LZXJtaXQgSG9tZSBdIFsgWzQ2NF1LZXJtaXQKKyAgIEhvbWUgXQorCis4 LjEwLiBUaGUgSU5QVVQgYW5kIE1JTlBVVCBDb21tYW5kcworCisgICBBcyBvZiBDLUtlcm1pdCA4 LjAuMjExLCB0aGUgSU5QVVQgYW5kIE1JTlBVVCBjb21tYW5kcyBhY2NlcHQgYSBzd2l0Y2g6CisK KyAgIFtNXUlOUFVUIC9OT01BVENIIHRpbWVvdXQKKyAgICAgICAgICBUaGUgL05PTUFUQ0ggc3dp dGNoIGFsbG93cyBJTlBVVCBvciBNSU5QVVQgdG8gcmVhZCBpbmNvbWluZworICAgICAgICAgIG1h dGVyaWFsIGZvciB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lLCB3aXRob3V0IGF0dGVtcHRp bmcgdG8KKyAgICAgICAgICBtYXRjaCBpdCB3aXRoIGFueSB0ZXh0IG9yIHBhdHRlcm5zLiBXaGVu IHRoaXMgc3dpdGNoIGlzCisgICAgICAgICAgaW5jbHVkZWQsIHRoZSBbTV1JTlBVVCBjb21tYW5k IHN1Y2NlZWRzIHdoZW4gdGhlIHRpbWVvdXQKKyAgICAgICAgICBpbnRlcnZhbCBleHBpcmVzLCB3 aXRoIFx2KGluc3RhdHVzKSBzZXQgdG8gMSwgbWVhbmluZyAidGltZWQKKyAgICAgICAgICBvdXQi LCBvciBmYWlscyB1cG9uIGludGVycnVwdGlvbiBvciBpL28gZXJyb3IuCisKKyAgIEFsc28gaW4g dmVyc2lvbiA4LjAuMjExLCB0aGVyZSBpcyBhIG5ldyB3YXkgdG8gYXBwbHkgYSBzY2FsZSBmYWN0 b3IgdG8KKyAgIFtNXUlOUFVUIHRpbWVvdXRzOgorCisgICBTRVQgSU5QVVQgU0NBTEUtRkFDVE9S IGZsb2F0aW5nLXBvaW50LW51bWJlcgorICAgICAgICAgIFRoaXMgc2NhbGVzIGFsbCBbTV1JTlBV VCB0aW1lb3V0cyBieSB0aGUgZ2l2ZW4gZmFjdG9yLCBhbGxvd2luZworICAgICAgICAgIHRpbWUt c2Vuc2l0aXZlIHNjcmlwdHMgdG8gYmUgYWRqdXN0ZWQgdG8gY2hhbmdpbmcgY29uZGl0aW9ucwor ICAgICAgICAgIHN1Y2ggYXMgY29uZ2VzdGVkIG5ldHdvcmtzIG9yIGRpZmZlcmVudC1zcGVlZCBt b2RlbXMgd2l0aG91dAorICAgICAgICAgIGhhdmluZyB0byBjaGFuZ2UgZWFjaCBJTlBVVC1jbGFz cyBjb21tYW5kLiBUaGlzIGFmZmVjdHMgb25seQorICAgICAgICAgIHRob3NlIHRpbWVvdXRzIHRo YXQgYXJlIGdpdmVuIGluIHNlY29uZHMsIG5vdCBhcyB3YWxsLWNsb2NrCisgICAgICAgICAgdGlt ZXMuIEFsdGhvdWdoIHRoZSBzY2FsZSBmYWN0b3IgY2FuIGhhdmUgYSBmcmFjdGlvbmFsIHBhcnQs IHRoZQorICAgICAgICAgIElOUFVUIHRpbWVvdXQgaXMgc3RpbGwgYW4gaW50ZWdlci4gVGhlIG5l dyBidWlsdC1pbiB2YXJpYWJsZQorICAgICAgICAgIFx2KGluc2NhbGUpIHRlbGxzIHRoZSBjdXJy ZW50IElOUFVUIFNDQUxFLUZBQ1RPUi4KKworICAgVGhlIE1JTlBVVCBjb21tYW5kIGNhbiBiZSB1 c2VkIHRvIHNlYXJjaCB0aGUgaW5jb21pbmcgZGF0YSBzdHJlYW0gZm9yCisgICBzZXZlcmFsIHRh cmdldHMgc2ltdWx0YW5lb3VzbHkuIEZvciBleGFtcGxlOgorCisgIE1JTlBVVCA4IG9uZSB0d28g dGhyZWUKKworICAgd2FpdHMgdXAgdG8gOCBzZWNvbmRzIGZvciBvbmUgb2YgdGhlIHdvcmRzICJv bmUiLCAidHdvIiwgb3IgInRocmVlIiB0bworICAgYXJyaXZlLiBXb3JkcyBjYW4gYmUgZ3JvdXBl ZCB0byBpbmRpY2F0ZSB0YXJnZXRzIHRoYXQgY29udGFpbiBzcGFjZXM6CisKKyAgTUlOUFVUIDgg bmluZXRlZW4gdHdlbnR5ICJ0d2VudHkgb25lIgorCisgICBBbmQgb2YgY291cnNlIHlvdSBjYW4g YWxzbyB1c2UgdmFyaWFibGVzIGluIHBsYWNlIG9mIChvciBhcyBwYXJ0IG9mKQorICAgdGhlIHRh cmdldCBuYW1lczoKKworICBNSU5QVVQgOCBcJWEgXCZ4WzNdIFxtKGZvbykKKworICAgVW50aWwg bm93IHlvdSBoYWQgdG8ga25vdyB0aGUgbnVtYmVyIG9mIHRhcmdldHMgaW4gYWR2YW5jZSB3aGVu IHdyaXRpbmcKKyAgIHRoZSBNSU5QVVQgc3RhdGVtZW50LiBFYWNoIG9mIHRoZSBleGFtcGxlcyBh Ym92ZSBoYXMgZXhhY3RseSB0aHJlZQorICAgdGFyZ2V0cy4KKworICAgQnV0IHN1cHBvc2UgeW91 ciBzY3JpcHQgbmVlZHMgdG8gbG9vayBmb3IgYSB2YXJpYWJsZSBudW1iZXIgb2YgdGFyZ2V0cy4K KyAgIEZvciB0aGlzIHlvdSBjYW4gdXNlIGFycmF5cyBhbmQgXGZqb2luKCksIGRlc2NyaWJlZCBp biBbNDY1XVNlY3Rpb24KKyAgIDguNy4gQW55IG51bWJlciBvZiBcZmpvaW4oKSBpbnZvY2F0aW9u cyBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIE1JTlBVVAorICAgdGFyZ2V0IGxpc3QsIGFuZCBlYWNo IG9uZSBpcyBleHBhbmRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YKKyAgIHNlcGFy YXRlIHRhcmdldHMgZWFjaCB0aW1lIHRoZSBNSU5QVVQgY29tbWFuZCBpcyBleGVjdXRlZC4gRXhh bXBsZToKKworICBkZWNsYXJlIFwmYVsxMF0gPSBvbmUgdHdvIHRocmVlCisgIG1pbnB1dCAxMCBm b28gXGZqb2luKCZhKSBiYXIKKworICAgVGhpcyBkZWNsYXJlcyBhbiBhcnJheSBvZiB0ZW4gZWxl bWVudHMsIGFuZCBhc3NpZ25zIHZhbHVlcyB0byB0aGUgZmlyc3QKKyAgIHRocmVlIG9mIHRoZW0u IFRoZSBNSU5QVVQgY29tbWFuZCBsb29rcyBmb3IgdGhlc2UgdGhyZWUgKGFzIHdlbGwgYXMgdGhl CisgICB3b3JkcyAiZm9vIiBhbmQgImJhciIpLiBMYXRlciwgaWYgeW91IGFzc2lnbiBhZGRpdGlv bmFsIGVsZW1lbnRzIHRvIHRoZQorICAgYXJyYXksIHRoZSBzYW1lIE1JTlBVVCBjb21tYW5kIGFs c28gbG9va3MgZm9yIHRoZSBuZXcgZWxlbWVudHMuCisKKyAgIElmIGFuIGFycmF5IGVsZW1lbnQg Y29udGFpbnMgc3BhY2VzLCBlYWNoIHdvcmQgYmVjb21lcyBhIHNlcGFyYXRlCisgICB0YXJnZXQu IFRvIGNyZWF0ZSBvbmUgdGFyZ2V0IHBlciBhcnJheSBlbGVtZW50LCB1c2UgXGZqb2luKCkncyBn cm91cGluZworICAgZmVhdHVyZToKKworICBkY2wgXCZhW10gPSB7YWFhIGJiYn0ge2NjYyBkZGR9 IHt4eHggeXl5IHp6en0KKworICBtaW5wdXQgMTAgXGZqb2luKCZhKSAgICAgPC0tIDcgdGFyZ2V0 cworICBtaW5wdXQgMTAgXGZqb2luKCZhLCwyKSAgPC0tIDMgdGFyZ2V0cworCisgICBbIFs0NjZd VG9wIF0gWyBbNDY3XUNvbnRlbnRzIF0gWyBbNDY4XUMtS2VybWl0IEhvbWUgXSBbIFs0NjldS2Vy bWl0CisgICBIb21lIF0KKworOC4xMS4gTGVhcm5lZCBTY3JpcHRzCisKKyAgIEMtS2VybWl0IG5v dyBpbmNsdWRlcyBhIHNpbXBsZSBzY3JpcHQgcmVjb3JkZXIgdGhhdCBtb25pdG9ycyB5b3VyCisg ICBjb21tYW5kcywgcGx1cyB5b3VyIGFjdGlvbnMgZHVyaW5nIENPTk5FQ1QgbW9kZSwgYW5kIGF1 dG9tYXRpY2FsbHkKKyAgIGdlbmVyYXRlcyBhIHNjcmlwdCBwcm9ncmFtIHRoYXQgbWltaWNzIHdo YXQgaXQgb2JzZXJ2ZWQuIFlvdSBzaG91bGQKKyAgIHRoaW5rIG9mIHRoaXMgZmVhdHVyZSBhcyBh IHNjcmlwdC13cml0aW5nIEFTU0lTVEFOVCBzaW5jZSwgYXMgeW91IHdpbGwKKyAgIHNlZSBbNDcw XWxhdGVyIGluIHRoaXMgc2VjdGlvbiwgdGhlIHJlc3VsdCBnZW5lcmFsbHkgbmVlZHMgc29tZSBl ZGl0aW5nCisgICB0byBtYWtlIGl0IGJvdGggc2VjdXJlIGFuZCBmbGV4aWJsZS4gVGhlIHNjcmlw dCByZWNvcmRlciBpcyBjb250cm9sbGVkCisgICBieSB0aGUgbmV3IExFQVJOIGNvbW1hbmQ6CisK KyAgIExFQVJOIFsgL09OIC9PRkYgL0NMT1NFIF0gWyBmaWxlbmFtZSBdCisgICAgICAgICAgSWYg eW91IGdpdmUgYSBmaWxlbmFtZSwgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciBzdWJzZXF1ZW50Cisg ICAgICAgICAgcmVjb3JkaW5nLiBUaGUgL09OIHN3aXRjaCBlbmFibGVzIHJlY29yZGluZyB0byB0 aGUgY3VycmVudCBmaWxlCisgICAgICAgICAgKGlmIGFueSk7IC9PRkYgZGlzYWJsZXMgcmVjb3Jk aW5nLiAvQ0xPU0UgY2xvc2VzIHRoZSBjdXJyZW50CisgICAgICAgICAgc2NyaXB0IHJlY29yZGlu ZyBmaWxlIChpZiBhbnkpLiBJZiB5b3UgZ2l2ZSBhIGZpbGVuYW1lIHdpdGhvdXQKKyAgICAgICAg ICBhbnkgc3dpdGNoZXMsIC9PTiBpcyBhc3N1bWVkLgorCisgICBUaGUgL09GRiBhbmQgL09OIHN3 aXRjaGVzIGxldCB5b3UgdHVybiByZWNvcmRpbmcgb2ZmIGFuZCBvbiBkdXJpbmcgYQorICAgc2Vz c2lvbiB3aXRob3V0IGNsb3NpbmcgdGhlIGZpbGUuCisKKyAgIFdoZW4gcmVjb3JkaW5nOgorCisg ICAgICogQWxsIGNvbW1hbmRzIHRoYXQgeW91IHR5cGUgKG9yIHJlY2FsbCkgYXQgdGhlIHByb21w dCBhcmUgcmVjb3JkZWQKKyAgICAgICBpbiB0aGUgZmlsZSBleGNlcHQ6CisgICAgICAgICAgKyBM RUFSTiBjb21tYW5kcyBhcmUgbm90IHJlY29yZGVkLgorICAgICAgICAgICsgVGhlIENPTk5FQ1Qg Y29tbWFuZCBpcyBub3QgcmVjb3JkZWQuCisgICAgICAgICAgKyBUaGUgVEVMTkVUIGNvbW1hbmQg aXMgY29udmVydGVkIHRvIFNFVCBIT1NUIC9ORVRXT1JLOlRDUC4KKyAgICAgKiBDb21tYW5kcyBv YnRhaW5lZCBmcm9tIG1hY3JvcyBvciBjb21tYW5kIGZpbGVzIGFyZSBub3QgcmVjb3JkZWQuCisg ICAgICogRHVyaW5nIENPTk5FQ1Q6CisgICAgICAgICAgKyBFdmVyeSBsaW5lIHlvdSB0eXBlIGlz IGNvbnZlcnRlZCB0byBhbiBPVVRQVVQgY29tbWFuZC4KKyAgICAgICAgICArIFRoZSBsYXN0IHBy b21wdCBiZWZvcmUgYW55IGxpbmUgeW91IHR5cGUgYmVjb21lcyBhbiBJTlBVVAorICAgICAgICAg ICAgY29tbWFuZC4KKyAgICAgICAgICArIFRpbWVvdXRzIGFyZSBjYWxjdWxhdGVkIGF1dG9tYXRp Y2FsbHkgZm9yIGVhY2ggSU5QVVQgY29tbWFuZC4KKyAgICAgICAgICArIEEgUEFVU0UgY29tbWFu ZCBpcyBpbnNlcnRlZCBiZWZvcmUgZWFjaCBPVVRQVVQgY29tbWFuZCBqdXN0IHRvCisgICAgICAg ICAgICBiZSBzYWZlLgorCisgICBUaHVzIHRoZSBzY3JpcHQgcmVjb3JkZXIgaXMgaW5oZXJlbnRs eSBsaW5lLW9yaWVudGVkLiBJdCBjYW4ndCBiZSB1c2VkCisgICB0byBzY3JpcHQgY2hhcmFjdGVy LW9yaWVudGVkIGludGVyYWN0aW9ucyBsaWtlIHR5cGluZyBTcGFjZSB0byBhCisgICAiTW9yZT8i IHByb21wdCBvciBlZGl0aW5nIGEgdGV4dCBmaWxlIHdpdGggVkkgb3IgRU1BQ1MuCisKKyAgIEJ1 dCBpdCBoYXMgYWR2YW50YWdlcyB0b287IGZvciBleGFtcGxlIGl0IHRha2VzIGNvbnRyb2wgY2hh cmFjdGVycyBpbnRvCisgICBhY2NvdW50IHRoYXQgbWlnaHQgbm90IGJlIHZpc2libGUgdG8geW91 IG90aGVyd2lzZSwgYW5kIGl0CisgICBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGNvbnRyb2wgY2hh cmFjdGVycyBpbiBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0CisgICBzdHJlYW1zIHRvIHRoZSBh cHByb3ByaWF0ZSBub3RhdGlvbi4gSXQgY2FuIHRlbGwsIGZvciBleGFtcGxlIHRoYXQgdGhlCisg ICAiJCAiIHByb21wdCBvbiB0aGUgbGVmdCBtYXJnaW4gaW4gVU5JWCBpcyByZWFsbHkge1x7MTN9 XHsxMH0kIH0sCisgICB3aGVyZWFzIGluIFZNUyBpdCBtaWdodCBiZSB7XHsxM31cezEwfVx7MTN9 JCB9LiBUaGVzZSBzZXF1ZW5jZXMgYXJlCisgICBkZXRlY3RlZCBhbmQgcmVjb3JkZWQgYXV0b21h dGljYWxseS4KKworICAgQSBsZWFybmVkIHNjcmlwdCBzaG91bGQgZXhlY3V0ZSBjb3JyZWN0bHkg d2hlbiB5b3UgZ2l2ZSBhIFRBS0UgY29tbWFuZAorICAgZm9yIGl0LiBIb3dldmVyLCBpdCBpcyB1 c3VhbGx5IGFwcHJvcHJpYXRlIHRvIGVkaXQgdGhlIHNjcmlwdCBhIGJpdC4KKyAgIFRoZSBtb3N0 IGltcG9ydGFudCBjaGFuZ2Ugd291bGQgYmUgdG8gcmVtb3ZlIGFueSBwYXNzd29yZHMgZnJvbSBp dC4gRm9yCisgICBleGFtcGxlLCBpZiB0aGUgc2NyaXB0IGNvbnRhaW5zOgorCisgIElOUFVUIDkg e1x7MTN9XHsxMH1QYXNzd29yZDogfQorICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1lb3V0Cisg IFBBVVNFIDEKKyAgT1VUUFVUIGJpZ3NlY3JldFx7MTN9CisKKyAgIHlvdSBzaG91bGQgcmVwbGFj ZSB0aGlzIGJ5IHNvbWV0aGluZyBsaWtlOgorCisgIElOUFVUIDkge1x7MTN9XHsxMH1QYXNzd29y ZDogfQorICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1lb3V0CisgIEFTS1EgcHN3ZCBQbGVhc2Ug dHlwZSB5b3VyIHBhc3N3b3JkOgorICBQQVVTRSAxCisgIE9VVFBVVCBcbShwc3dkKVx7MTN9CisK KyAgIFRoZSBMRUFSTiBjb21tYW5kIGNhbid0IGRvIHRoaXMgZm9yIHlvdSBzaW5jZSBpdCBrbm93 cyBub3RoaW5nIGFib3V0CisgICAiY29udGVudCI7IGl0IG9ubHkga25vd3MgYWJvdXQgbGluZXMg YW5kIGNhbid0IGJlIGV4cGVjdGVkIHRvIHBhcnNlIG9yCisgICB1bmRlcnN0YW5kIHRoZW0gLS0g YWZ0ZXIgYWxsLCB0aGUgUGFzc3dvcmQgcHJvbXB0IG1pZ2h0IGJlIGluIHNvbWUKKyAgIG90aGVy IGxhbmd1YWdlLiBTbyByZW1lbWJlcjogaWYgeW91IHVzZSB0aGUgTEVBUk4gY29tbWFuZCB0byBy ZWNvcmQgYQorICAgbG9naW4gc2NyaXB0LCBiZSBzdXJlIGVkaXQgdGhlIHJlc3VsdGluZyBmaWxl IHRvIHJlbW92ZSBhbnkgcGFzc3dvcmRzLgorICAgQWxzbyBiZSBzdXJlIHRvIGRlbGV0ZSBhbnkg YmFja3VwIGNvcGllcyB5b3VyIGVkaXRvciBvciBPUyBtaWdodCBoYXZlCisgICBtYWRlIG9mIHRo ZSBmaWxlLgorCisgICBPdGhlciBtYW51YWwgYWRqdXN0bWVudHMgbWlnaHQgYWxzbyBiZSBhcHBy b3ByaWF0ZToKKworICAgICAqIElmIHRoZSB0YXJnZXQgb2YgYW4gSU5QVVQgY29tbWFuZCBjYW4g dmFyeSwgeW91IGNhbiByZXBsYWNlIHRoZQorICAgICAgIElOUFVUIGNvbW1hbmQgd2l0aCBNSU5Q VVQgYW5kIHRoZSBhcHByb3ByaWF0ZSB0YXJnZXQgbGlzdCwgYW5kL29yCisgICAgICAgdGhlIHRh cmdldCB3aXRoIGEgXGZwYXR0ZXJuKCkuIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBhcmUgZGlh bGluZworICAgICAgIGEgbnVtYmVyIHRoYXQgY2FuIGJlIGFuc3dlcmVkIGJ5IGFueSBvbmUgb2Yg MTAwIHRlcm1pbmFsIHNlcnZlcnMsCisgICAgICAgd2hvc2UgcHJvbXB0cyBhcmUgdHMtMDA+LCB0 cy0wMT4sIHRzLTAyPiwgLi4uIHRzLTk5Pi4gVGhlIHNjcmlwdAorICAgICAgIHJlY29yZHMgYSBw YXJ0aWN1bGFyIG9uZSBvZiB0aGVzZSwgYnV0IHlvdSB3YW50IGl0IHRvIHdvcmsgZm9yIGFsbAor ICAgICAgIG9mIHRoZW0sIHNvIGNoYW5nZSAoZS5nLik6CisgIElOUFVUIDEwIHRzLTIzPiAgOyBv ciB3aGF0ZXZlcgorCisgICAgICAgdG86CisgIElOUFVUIDEwIFxmcGF0dGVybih0cy1bMC05XVsw LTldPikKKworICAgICAqIFRoZSBJTlBVVCB0aW1lb3V0IHZhbHVlcyBhcmUgY29uc2VydmF0aXZl LCBidXQgdGhleSBhcmUgYmFzZWQgb25seQorICAgICAgIG9uIGEgc2luZ2xlIG9ic2VydmF0aW9u OyB5b3UgbWlnaHQgbmVlZCB0byB0dW5lIHRoZW0uCisgICAgICogVGhlIFBBVVNFIGNvbW1hbmRz IG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnksIG9yIHRoZSBQQVVTRSBpbnRlcnZhbAorICAgICAgIG1p Z2h0IG5lZWQgYWRqdXN0bWVudC4KKyAgICAgKiBJbiBjYXNlIHlvdSBtYWRlIHR5cG9ncmFwaGlj YWwgZXJyb3JzIGR1cmluZyByZWNvcmRpbmcsIHRoZXkgYXJlCisgICAgICAgaW5jb3Jwb3JhdGVk IGluIHlvdXIgc2NyaXB0OyB5b3UgY2FuIGVkaXQgdGhlbSBvdXQgaWYgeW91IHdhbnQgdG8uCisK KyAgIEhlcmUgaXMgYSBzYW1wbGUgc2NyaXB0IGdlbmVyYXRlZCBieSBLZXJtaXQgKCJsZWFybiB2 bXMua3NjIikgaW4gd2hpY2gKKyAgIGEgVGVsbmV0IGNvbm5lY3Rpb24gaXMgbWFkZSB0byBhIFZN UyBjb21wdXRlciwgdGhlIHVzZXIgbG9ncyBpbiwgc3RhcnRzCisgICBLZXJtaXQgb24gVk1TLCBz ZW5kcyBpdCBhIGZpbGUsIGFuZCB0aGVuIGxvZ3Mgb3V0OgorCisgIDsgU2NyaXB0ZmlsZTogdm1z LmtzYworICA7IERpcmVjdG9yeTogIC91c3Ivb2xnYQorICA7IFJlY29yZGVkOiAgIDIwMDAxMTI0 IDE1OjIxOjIzCisKKyAgU0VUIEhPU1QgL05FVFdPUks6VENQIHZtcy54eXpjb3JwLmNvbQorICBJ RiBGQUlMIFNUT1AgMSBDb25uZWN0aW9uIGZhaWxlZAorCisgIElOUFVUIDcge1x7MTN9XHsxMH1c ezEzfVVzZXJuYW1lOiB9CisgIElGIEZBSUwgU1RPUCAxIElOUFVUIHRpbWVvdXQKKyAgUEFVU0Ug MQorICBPVVRQVVQgb2xnYVx7MTN9CisgIElOUFVUIDMge1x7MTN9XHsxMH1cezEzfVBhc3N3b3Jk OiB9CisgIElGIEZBSUwgU1RPUCAxIElOUFVUIHRpbWVvdXQKKyAgUEFVU0UgMQorICBPVVRQVVQg c2VjcmV0XHsxM30KKyAgSU5QVVQgMTgge1x7MTN9XHsxMH1cezEzfSQgfQorICBJRiBGQUlMIFNU T1AgMSBJTlBVVCB0aW1lb3V0CisgIFBBVVNFIDEKKyAgT1VUUFVUIHNldCBkZWZhdWx0IFsuaW5j b21pbmddXHsxM30KKyAgSU5QVVQgMTIge1x7MTN9XHsxMH1cezEzfSQgfQorICBJRiBGQUlMIFNU T1AgMSBJTlBVVCB0aW1lb3V0CisgIFBBVVNFIDEKKyAgT1VUUFVUIGtlcm1pdFx7MTN9CisgIElO UFVUIDE1IHtcezEzfVx7MTB9XHsxM31BTFRPOltPTEdBLklOQ09NSU5HXSBDLUtlcm1pdD59Cisg IElGIEZBSUwgU1RPUCAxIElOUFVUIHRpbWVvdXQKKyAgUEFVU0UgMQorICBPVVRQVVQgcmVjZWl2 ZVx7MTN9CisgIHNlbmQgbXlmaWxlLnR4dAorCisgIElOUFVUIDE4IHtcezEzfVx7MTB9XHsxM31B TFRPOltPTEdBLklOQ09NSU5HXSBDLUtlcm1pdD59CisgIElGIEZBSUwgU1RPUCAxIElOUFVUIHRp bWVvdXQKKyAgUEFVU0UgMQorICBPVVRQVVQgZXhpdFx7MTN9CisgIElOUFVUIDYge1x7MTN9XHsx MH1cezEzfSQgfQorICBJRiBGQUlMIFNUT1AgMSBJTlBVVCB0aW1lb3V0CisgIFBBVVNFIDEKKyAg T1VUUFVUIGxvZ291dFx7MTN9CisgIGNsb3NlCisgIGV4aXQKKworICAgVGhlIGNvbW1hbmRzIGdl bmVyYXRlZCBieSBLZXJtaXQgZHVyaW5nIENPTk5FQ1QgKElOUFVULCBJRiBGQUlMLCBQQVVTRSwK KyAgIGFuZCBPVVRQVVQpIGhhdmUgdXBwZXJjYXNlIGtleXdvcmRzOyB0aGUgY29tbWFuZHMgdHlw ZWQgYnkgdGhlIHVzZXIgYXJlCisgICBpbiB3aGF0ZXZlciBmb3JtIHRoZSB1c2VyIHR5cGVkIHRo ZW0gKGluIHRoaXMgY2FzZSwgbG93ZXJjYXNlKS4KKworICAgWyBbNDcxXVRvcCBdIFsgWzQ3Ml1D b250ZW50cyBdIFsgWzQ3M11DLUtlcm1pdCBIb21lIF0gWyBbNDc0XUtlcm1pdAorICAgSG9tZSBd CisKKzguMTIuIFBhdHRlcm4gTWF0Y2hpbmcKKworICAgQSBwYXR0ZXJuIGlzIGEgY2hhcmFjdGVy IHN0cmluZyB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggb3RoZXIgc3RyaW5ncy4KKyAgIFBhdHRlcm5z IGNhbiBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHRoYXQgcmVwcmVzZW50IHNwZWNpYWwgYWN0aW9u cyBsaWtlCisgICAibWF0Y2ggYW55IHNpbmdsZSBjaGFyYWN0ZXIiLCAibWF0Y2ggemVybyBvciBt b3JlIGNoYXJhY3RlcnMiLCAibWF0Y2gKKyAgIGFueSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gYSBs aXN0IiwgYW5kIHNvIG9uLiBUaGUgYmVzdCBrbm93bgorICAgYXBwbGljYXRpb24gb2YgcGF0dGVy bnMgaXMgaW4gZmlsZSBzcGVjaWZpY2F0aW9ucyB0aGF0IGNvbnRhaW4KKyAgIHdpbGRjYXJkcywg YXMgaW4gInNlbmQgKi50eHQiLCBtZWFuaW5nICJzZW5kIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBl bmQKKyAgIHdpdGggLnR4dCIuCisKKyAgIFBhdHRlcm5zIGFyZSBhbHNvIHVzZWQgaW4gaW5jcmVh c2luZ2x5IG1hbnkgb3RoZXIgd2F5cywgdG8gdGhlIGV4dGVudAorICAgaXQgaXMgdXNlZnVsIHRv IHBvaW50IG91dCBjZXJ0YWluIGltcG9ydGFudCBkaXN0aW5jdGlvbnMgaW4gdGhlIHdheXMgaW4K KyAgIHdoaWNoIHRoZXkgYXJlIHVzZWQ6CisKKyAgIEFuY2hvcmVkIFBhdHRlcm5zCisgICAgICAg ICAgSWYgYW4gYW5jaG9yZWQgcGF0dGVybiBkb2VzIG5vdCBiZWdpbiB3aXRoICIqIiwgaXQgbXVz dCBtYXRjaAorICAgICAgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZywgYW5kIGlmIGl0 IGRvZXMgbm90IGVuZCB3aXRoICIqIiwgaXQKKyAgICAgICAgICBtdXN0IG1hdGNoIHRoZSBlbmQg b2YgdGhlIHN0cmluZy4gRm9yIGV4YW1wbGUsIHRoZSBhbmNob3JlZAorICAgICAgICAgIHBhdHRl cm4gImFiYyIgbWF0Y2hlcyBvbmx5IHRoZSBzdHJpbmcgImFiYyIsIG5vdCAiYWJjZGUiIG9yCisg ICAgICAgICAgInh5emFiYyIgb3IgImFiY2FiYyIuIFRoZSBhbmNob3JlZCBwYXR0ZXJuICJhYmMq IiBtYXRjaGVzIGFueQorICAgICAgICAgIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICJhYmMiOyB0 aGUgYW5jaG9yZWQgcGF0dGVybiAiKmFiYyIKKyAgICAgICAgICBtYXRjaGVzIGFueSBzdHJpbmcg dGhhdCBlbmRzIHdpdGggImFiYyI7IHRoZSBhbmNob3JlZCBwYXR0ZXJuCisgICAgICAgICAgIiph YmMqIiBtYXRjaGVzIGFueSBzdHJpbmcgdGhhdCBjb250YWlucyAiYWJjIiAoaW5jbHVkaW5nIGFu eQorICAgICAgICAgIHRoYXQgc3RhcnQgYW5kL29yIGVuZCB3aXRoIGl0KS4KKworICAgRmxvYXRp bmcgUGF0dGVybnMKKyAgICAgICAgICBBIGZsb2F0aW5nIHBhdHRlcm4gbWF0Y2hlcyBhbnkgc3Ry aW5nIHRoYXQgY29udGFpbnMgYSBzdWJzdHJpbmcKKyAgICAgICAgICB0aGF0IG1hdGNoZXMgdGhl IHBhdHRlcm4uIEluIG90aGVyIHdvcmRzLCBhIGZsb2F0aW5nIHBhdHRlcm4gaGFzCisgICAgICAg ICAgYW4gaW1wbGllZCAiKiIgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kLiBZb3UgY2FuIGFuY2hv ciBhCisgICAgICAgICAgZmxvYXRpbmcgcGF0dGVybiB0byB0aGUgYmVnaW5uaW5nIGJ5IHN0YXJ0 aW5nIGl0IHdpdGggIl4iLCBhbmQKKyAgICAgICAgICB5b3UgY2FuIGFuY2hvciBpdCB0byB0aGUg ZW5kIGJ5IGVuZGluZyBpdCB3aXRoICIkIiAoc2VlIGV4YW1wbGVzCisgICAgICAgICAgYmVsb3cp LgorCisgICBXaWxkY2FyZHMKKyAgICAgICAgICBBIHdpbGRjYXJkIGlzIGFuIGFuY2hvcmVkIHBh dHRlcm4gdGhhdCBoYXMgdGhlIGFkZGl0aW9uYWwKKyAgICAgICAgICBwcm9wZXJ0eSB0aGF0ICIq IiBkb2VzIG5vdCBtYXRjaCBkaXJlY3Rvcnkgc2VwYXJhdG9ycy4KKworICAgVGhpcyB0ZXJtaW5v bG9neSBsZXRzIHVzIGRlc2NyaWJlIEtlcm1pdCdzIGNvbW1hbmRzIHdpdGggYSBiaXQgbW9yZQor ICAgcHJlY2lzaW9uLiBXaGVuIGEgcGF0dGVybiBpcyB1c2VkIGZvciBtYXRjaGluZyBmaWxlbmFt ZXMsIGl0IGlzIGEKKyAgIHdpbGRjYXJkLCBleGNlcHQgaW4gdGhlIFRFWFQtUEFUVEVSTlMgYW5k IEJJTkFSWS1QQVRURVJOUyBsaXN0cyBhbmQKKyAgIC9FWENFUFQ6IGNsYXVzZXMsIGluIHdoaWNo IGNhc2UgZGlyZWN0b3J5IHNlcGFyYXRvcnMgYXJlIG5vdAorICAgc2lnbmlmaWNhbnQgKGZvciBl eGFtcGxlLCBhIEJJTkFSWS1QQVRURVJOIG9mICIqLmV4ZSIgbWF0Y2hlcyBhbnkgZmlsZQorICAg d2hvc2UgbmFtZSBlbmRzIGluIC5leGUsIG5vIG1hdHRlciBob3cgZGVlcGx5IGl0IG1pZ2h0IGJl IGJ1cmllZCBpbgorICAgc3ViZGlyZWN0b3JpZXMpLiBXaGVuIEtlcm1pdCBwYXJzZXMgYSBmaWxl IHNwZWNpZmljYXRpb24gZGlyZWN0bHksCisgICBob3dldmVyLCBpdCB1c2VzIHRoZSBzdHJpY3Qg d2lsZGNhcmQgZGVmaW5pdGlvbi4gRm9yIGV4YW1wbGUsICJzZW5kCisgICBhKmIiIHNlbmRzIGFs bCBmaWxlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJhIiBhbmQgZW5kIHdpdGggImIiIGluIHRo ZQorICAgY3VycmVudCBkaXJlY3RvcnksIGFuZCBub3QgYW55IGZpbGVzIHdob3NlIG5hbWVzIGVu ZCB3aXRoICJiIiB0aGF0CisgICBoYXBwZW4gdG8gYmUgaW4gc3ViZGlyZWN0b3JpZXMgd2hvc2Ug bmFtZXMgc3RhcnQgd2l0aCAiYSIuIEFuZCBhcworICAgbm90ZWQsIHdpbGRjYXJkcyBhcmUgYW5j aG9yZWQsIHNvICJkZWxldGUgZm9vIiBkZWxldGVzIHRoZSBmaWxlIG5hbWVkCisgICAiZm9vIiwg YW5kIG5vdCBhbGwgZmlsZXMgd2hvc2UgbmFtZXMgaGFwcGVuIHRvIGNvbnRhaW4gImZvbyIuCisK KyAgIE1vc3Qgb3RoZXIgcGF0dGVybnMgYXJlIGFuY2hvcmVkLiBGb3IgZXhhbXBsZToKKworICBp ZiBtYXRjaCBhYmMgYmMgLi4uCisKKyAgIGRvZXMgbm90IHN1Y2NlZWQgKGFuZCB5b3Ugd291bGQg YmUgc3VycHJpc2VkIGlmIGl0IGRpZCEpLiBJbiBmYWN0LCB0aGUKKyAgIG9ubHkgZmxvYXRpbmcg cGF0dGVybnMgYXJlIHRoZSBvbmVzIHVzZWQgYnkgY29tbWFuZHMgb3IgZnVuY3Rpb25zIHRoYXQK KyAgIHNlYXJjaCBmb3IgcGF0dGVybnMgaW4gZmlsZXMsIGFycmF5cywgb3Igc3RyaW5ncy4gVGhl c2UgaW5jbHVkZToKKworICAgICAqIFRoZSBHUkVQIGFuZCBUWVBFIC9NQVRDSCBjb21tYW5kcy4K KyAgICAgKiBUaGUgXGZzZWFyY2goKSwgXGZyc2VhcmNoKCksIGFuZCBcZmFycmF5bG9vaygpIGZ1 bmN0aW9ucy4KKworICAgVGh1cyB0aGVzZSBhcmUgdGhlIG9ubHkgY29udGV4dHMgaW4gd2hpY2gg ZXhwbGljaXQgYW5jaG9ycyAoIl4iIGFuZAorICAgIiQiKSBtYXkgYmUgdXNlZDoKKworICAgZ3Jl cCBhYmMgKi50eHQKKyAgICAgICAgICBQcmludHMgYWxsIGxpbmVzIGNvbnRhaW5pbmcgImFiYyIg aW4gYWxsIGZpbGVzIHdob3NlIG5hbWVzIGVuZAorICAgICAgICAgIHdpdGggIi50eHQiLgorCisg ICBncmVwIF5hYmMgKi50eHQKKyAgICAgICAgICBQcmludHMgYWxsIGxpbmVzIHRoYXQgc3RhcnQg d2l0aCAiYWJjIiBpbiBhbGwgIi50eHQiIGZpbGVzLgorCisgICBncmVwIGFiYyQgKi50eHQKKyAg ICAgICAgICBQcmludHMgYWxsIGxpbmVzIHRoYXQgZW5kIHdpdGggImFiYyIgaW4gYWxsICIudHh0 IiBmaWxlcy4KKworICAgZ3JlcCBeYSp6JCAqLnR4dAorICAgICAgICAgIFByaW50cyBhbGwgbGlu ZXMgdGhhdCBzdGFydCB3aXRoICJhIiBhbmQgZW5kIHdpdGggInoiIGluIGFsbAorICAgICAgICAg ICIudHh0IiBmaWxlcy4KKworICAgU2ltaWxhcmx5IGZvciBUWVBFIC9QQUdFLCAvZnNlYXJjaCgp LCAvZnJzZWFyY2goKSwgYW5kIFxmYXJyYXlsb29rKCkuCisKKyAgIEhlcmUgaXMgYSBicmllZiBz dW1tYXJ5IG9mIGFuY2hvcmVkIGFuZCBmbG9hdGluZyBwYXR0ZXJuIGVxdWl2YWxlbmNlczoKKwor ICBBbmNob3JlZCAgIEZsb2F0aW5nCisgICAgYWJjICAgICAgIF5hYmMkCisgICAgKmFiYyAgICAg IGFiYyQKKyAgICBhYmMqICAgICAgXmFiYworICAgICphYmMqICAgICBhYmMKKworICAgWyBbNDc1 XVRvcCBdIFsgWzQ3Nl1Db250ZW50cyBdIFsgWzQ3N11DLUtlcm1pdCBIb21lIF0gWyBbNDc4XUtl cm1pdAorICAgSG9tZSBdCisKKzguMTMuIERhdGVzIGFuZCBUaW1lcworCisgICBDLUtlcm1pdCdz IGNvbXByZWhlbnNpb24gb2YgZGF0ZS10aW1lIGZvcm1hdHMgaXMgY29uc2lkZXJhYmx5IGV4cGFu ZGVkCisgICBpbiB2ZXJzaW9uIDguMC4gQW55IGNvbW1hbmQgdGhhdCByZWFkcyBkYXRlcywgaW5j bHVkaW5nIHRoZSBEQVRFCisgICBjb21tYW5kIGl0c2VsZiwgb3IgYW55IHN3aXRjaCwgc3VjaCBh cyB0aGUgL0JFRk9SRTogYW5kIC9BRlRFUjoKKyAgIHN3aXRjaGVzLCBvciBhbnkgZnVuY3Rpb24g c3VjaCBhcyBcZmN2dGRhdGUoKSwgbm93IGNhbiB1bmRlcnN0YW5kIGRhdGVzCisgICBhbmQgdGlt ZXMgZXhwcmVzc2VkIGluIGFueSBJU08gODYwMSBmb3JtYXQsIGluIFVuaXggImFzY3RpbWUiIGZv cm1hdCwKKyAgIGluIEZUUCBNRFRNIGZvcm1hdCwgYW5kIGluIHByYWN0aWNhbGx5IGFueSBmb3Jt YXQgdXNlZCBpbiBSRkMgODIyIG9yCisgICBSRkMgMjgyMiBlbGVjdHJvbmljIG1haWwsIHdpdGgg b3Igd2l0aG91dCB0aW1lem9uZXMsIGFuZCBpbiBhIGdyZWF0CisgICBtYW55IG90aGVyIGZvcm1h dHMgYXMgd2VsbC4gSEVMUCBEQVRFIGJyaWVmbHkgc3VtbWFyaXplcyB0aGUgYWNjZXB0YWJsZQor ICAgZGF0ZS10aW1lIGZvcm1hdHMuCisKKyAgIEZ1cnRoZXJtb3JlLCBDLUtlcm1pdCA4LjAgaW5j bHVkZXMgYSBuZXcgYW5kIGVhc3ktdG8tdXNlIGZvcm0gb2YKKyAgIGRhdGUtdGltZSBhcml0aG1l dGljLCBpbiB3aGljaCBhbnkgZGF0ZSBvciB0aW1lIGNhbiBiZSBjb21iaW5lZCB3aXRoIGEKKyAg ICJkZWx0YSB0aW1lIiwgdG8gYWRkIG9yIHN1YnRyYWN0IHRoZSBkZXNpcmVkIHRpbWUgaW50ZXJ2 YWwgKHllYXJzLAorICAgbW9udGhzLCB3ZWVrcywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29u ZHMpIHRvL2Zyb20gdGhlIGdpdmVuIGRhdGUuCisgICBBbmQgbmV3IGZ1bmN0aW9ucyBhcmUgYXZh aWxhYmxlIHRvIGNvbXBhcmUgZGF0ZXMgYW5kIHRvIGNvbXB1dGUgdGhlaXIKKyAgIGRpZmZlcmVu Y2VzLgorCisgICBBcyB5b3UgY2FuIGltYWdpbmUsIGFsbCB0aGlzIHJlcXVpcmVzIHF1aXRlIGEg Yml0IG9mICJzeW50YXgiLiBUaGUKKyAgIGJhc2ljIGZvcm1hdCBpczoKKworICBbIGRhdGUgXSBb IHRpbWUgXSBbIGRlbHRhIF0KKworICAgRWFjaCBmaWVsZCBpcyBvcHRpb25hbCwgYnV0IGluIG1v c3QgY2FzZXMgKGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkKKyAgIHRoZXJlIG11c3QgYmUgYXQg bGVhc3Qgb25lIGZpZWxkLiBJZiBhIGRhdGUgaXMgZ2l2ZW4sIGl0IG11c3QgY29tZQorICAgZmly c3QuIElmIG5vIGRhdGUgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGRhdGUgaXMgYXNzdW1lZC4gSWYg bm8gdGltZSBpcworICAgZ2l2ZW4sIGFuIGFwcHJvcHJpYXRlIHRpbWUgaXMgc3VwcGxpZWQgZGVw ZW5kaW5nIG9uIHdoZXRoZXIgYSBkYXRlIHdhcworICAgc3VwcGxpZWQuIElmIG5vIGRlbHRhIGlz IGdpdmVuLCBubyBhcml0aG1ldGljIGlzIGRvbmUuIElmIGEgZGVsdGEgaXMKKyAgIGdpdmVuIHdp dGhvdXQgYSBkYXRlIG9yIHRpbWUsIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgYXJlIHVzZWQg YXMgdGhlCisgICBiYXNlLgorCisgICBEYXRlLXRpbWUtZGVsdGEgZmllbGRzIGFyZSBsaWtlbHkg dG8gY29udGFpbiBzcGFjZXMgKGFsdGhvdWdoIHRoZXkgbmVlZAorICAgbm90OyBzcGFjZS1mcmVl IGZvcm1zIGFyZSBhbHdheXMgYXZhaWxhYmxlKS4gVGhlcmVmb3JlLCBpbiBtb3N0CisgICBjb250 ZXh0cyAtLSBhbmQgbm90YWJseSBhcyBzd2l0Y2ggYXJndW1lbnRzIC0tIGRhdGUtdGltZSBpbmZv cm1hdGlvbgorICAgbXVzdCBiZSBlbmNsb3NlZCBpbiBicmFjZXMgb3IgZG91YmxlcXVvdGVzLCBm b3IgZXhhbXBsZToKKworICBzZW5kIC9hZnRlcjoiOC1BdWctMjAwMSAxMjowMCBVVEMiICoudHh0 CisKKyAgIEtlcm1pdCdzIHN0YW5kYXJkIGludGVybmFsIGZvcm1hdCBmb3IgZGF0ZXMgYW5kIHRp bWVzIGlzOgorCisgIHl5eXltbWRkIGhoOm1tOnNzCisKKyAgIGZvciBleGFtcGxlOgorCisgIDIw MDEwMjA4IDEwOjI4OjAxCisKKyAgIERhdGUtdGltZXMgY2FuIGFsd2F5cyBiZSBnaXZlbiBpbiB0 aGlzIGZvcm1hdC4geXl5eSBpcyB0aGUgNC1kaWdpdAorICAgeWVhciwgbW0gaXMgdGhlIHR3by1k aWdpdCBtb250aCAoMS0xMjsgc3VwcGx5IGxlYWRpbmcgemVybyBmb3IKKyAgIEphbi1TZXApLCBk ZCBpcyB0aGUgMi1kaWdpdCBkYXkgKGxlYWRpbmcgemVybyBmb3IgMS05KSwgaGggaXMgdGhlIGhv dXIKKyAgICgwLTIzKSwgbW0gdGhlIG1pbnV0ZSAoMC01OSksIHNzIHRoZSBzZWNvbmQgKDAtNTkp LCBlYWNoIHdpdGggbGVhZGluZworICAgemVybyBpZiBsZXNzIHRoYW4gdGhlIGZpZWxkIHdpZHRo LiBUaGUgZGF0ZSBhbmQgdGltZSBjYW4gYmUgc2VwYXJhdGVkCisgICBieSBhIHNwYWNlLCBhbiB1 bmRlcnNjb3JlLCBhIGNvbG9uLCBvciB0aGUgbGV0dGVyIFQuIFRoZSB0aW1lIGlzIGluCisgICAy NC1ob3VyIGZvcm1hdC4gVGh1cyB0aGUgdmFyaW91cyBxdWFudGl0aWVzIGFyZSBhdCB0aGUgZm9s bG93aW5nIGZpeGVkCisgICBwb3NpdGlvbnM6CisKK1Bvc2l0aW9uICBDb250ZW50cworICAgMS00 ICAgIFllYXIgICAoNCBkaWdpdHMsIDAwMDAtOTk5OSkKKyAgIDUtNiAgICBNb250aCAgKDIgZGln aXRzLCAxLTEyKQorICAgNy04ICAgIERheSAgICAoMiBkaWdpdHMsIDEtMzEpCisgICA5ICAgICAg RGF0ZS1UaW1lIFNlcGFyYXRvciAoc3BhY2UsIDosIF8sIG9yIHRoZSBsZXR0ZXIgVCkKKyAgMTAt MTEgICBIb3VyICAgKDIgZGlnaXRzLCAwLTIzKQorICAxMiAgICAgIEhvdXItTWludXRlIFNlcGFy YXRvciAoY29sb24pCisgIDEzLTE0ICAgTWludXRlICgyIGRpZ2l0cywgMC01OSkKKyAgMTUgICAg ICBNaW51dGUtU2Vjb25kIFNlcGFyYXRvciAoY29sb24pCisgIDE2LTE3ICAgU2Vjb25kICgyIGRp Z2l0cywgMC01OSkKKworICAgRXhhbXBsZToKKworICAxOTgwMDUyNiAxMzowNzoxMiAgMjYgTWF5 IDE5ODAsIDEzOjA3OjEyICgxOjA3OjEyUE0pCisKKyAgIFRoaXMgaXMgdGhlIGZvcm1hdCBwcm9k dWNlZCBieSB0aGUgREFURSBjb21tYW5kIGFuZCBieSBhbnkgZnVuY3Rpb24KKyAgIHRoYXQgcmV0 dXJucyBhIGRhdGUtdGltZS4gSXQgaXMgc3VpdGFibGUgZm9yIGxleGljYWwgY29tcGFyaXNvbiBh bmQKKyAgIHNvcnRpbmcsIGFuZCBmb3IgdXNlIGFzIGEgZGF0ZS10aW1lIGluIGFueSBLZXJtaXQg Y29tbWFuZC4gV2hlbiB0aGlzCisgICBmb3JtYXQgaXMgZ2l2ZW4gYXMgaW5wdXQgdG8gYSBjb21t YW5kIG9yIGZ1bmN0aW9uLCB2YXJpb3VzIGRhdGUtdGltZQorICAgc2VwYXJhdG9ycyAoYXMgbm90 ZWQpIGFyZSBhY2NlcHRlZDoKKworICAxOTgwMDUyNiAxMzowNzoxMiAgMjYgTWF5IDE5ODAsIDEz OjA3OjEyICgxOjA3OjEyUE0pCisgIDIwMDEwMjA4XzEwOjI4OjM1ICAyIEZlYnJ1YXJ5IDIwMDEs IDEwOjI4OjM1IEFNCisgIDE4NTgwMTAxOjEyOjAwOjAwICAxIEphbnVhcnkgMTg1OCwgbm9vbgor ICAyMDExMDIwOFQwMDowMDowMCAgMiBGZWJydWFyeSAyMDExLCBtaWRuaWdodAorCisgICBDZXJ0 YWluIG90aGVyIHNwZWNpYWwgZGF0ZS10aW1lIGZvcm1hdHMgdGhhdCBhcmUgZW5jb3VudGVyZWQg b24KKyAgIGNvbXB1dGVyIG5ldHdvcmtzIGFyZSByZWNvZ25pemVkOgorCisgICBBc2N0aW1lIEZv cm1hdAorICAgICAgICAgIFRoaXMgaXMgYSBmaXhlZCBmb3JtYXQgdXNlZCBieSBVbml4LCBuYW1l ZCBhZnRlciBVbml4J3MKKyAgICAgICAgICBhc2N0aW1lKCkgKCJBU0NJSSB0aW1lIikgZnVuY3Rp b24uIEl0IGlzIGFsd2F5cyBleGFjdGx5IDI0CisgICAgICAgICAgY2hhcmFjdGVycyBsb25nLiBF eGFtcGxlOiBGcmkgQXVnIDEwIDE2OjM4OjAxIDIwMDEKKworICAgQXNjdGltZSB3aXRoIFRpbWV6 b25lCisgICAgICAgICAgVGhpcyBpcyBsaWtlIEFzY3RpbWUgZm9ybWF0LCBidXQgaW5jbHVkZXMg YSAzLWNoYXJhY3RlciB0aW1lem9uZQorICAgICAgICAgIGJldHdlZW4gdGhlIHRpbWUgYW5kIHll YXIuIEl0IGlzIGV4YWN0bHkgMjggY2hhcmFjdGVycyBsb25nLgorICAgICAgICAgIEV4YW1wbGU6 IEZyaSBBdWcgMTAgMTY6Mzg6MDEgR01UIDIwMDEKKworICAgRS1NYWlsIEZvcm1hdAorICAgICAg ICAgIEUtbWFpbCBkYXRlLXRpbWUgZm9ybWF0cyBhcmUgZGVmaW5lZCBpbiBbNDc5XVJGQyAyODIy IHdpdGggYQorICAgICAgICAgIGZhaXIgYW1vdW50IG9mIGZsZXhpYmlsaXR5IGFuZCBvcHRpb25z LiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzCisgICAgICAgICAgYXJlIHR5cGljYWwgb2YgZS1tYWls cyBhbmQgSFRUUCAod2ViLXBhZ2UpIGhlYWRlcnM6CisKKyAgU2F0LCAxNCBKdWwgMjAwMSAxMTo0 OToyOSAgICAgICAgICAgICAgICAoTm8gdGltZXpvbmUpCisgIEZyaSwgMjQgTWFyIDIwMDAgMTQ6 MTk6NTkgRVNUICAgICAgICAgICAgKFN5bWJvbGljIHRpbWV6b25lKQorICBUdWUsIDI2IEp1biAy MDAxIDEwOjE5OjQ1IC0wNDAwIChFRFQpICAgIChHTVQgT2Zmc2V0ICsgY29tbWVudCkKKworICAg RlRQIE1EVE0gRm9ybWF0CisgICAgICAgICAgVGhpcyBpcyB0aGUgZGF0ZS10aW1lIGZvcm1hdCBz dXBwbGllZCBieSBGVFAgc2VydmVycyB0aGF0CisgICAgICAgICAgc3VwcG9ydCB0aGUgKG5vdCB5 ZXQgc3RhbmRhcmQgYnV0IHdpZGVseSB1c2VkIG5ldmVydGhlbGVzcykgTURUTQorICAgICAgICAg IGNvbW1hbmQsIGJ5IHdoaWNoIHRoZSBGVFAgY2xpZW50IGFza3MgZm9yIGEgZmlsZSdzIG1vZGlm aWNhdGlvbgorICAgICAgICAgIHRpbWU6CisKKyAgeXl5eW1tZGRoaG1tc3NbLmZmZmZdCisKKyAg ICAgICAgICB3aGVyZSB5eXl5IGlzIHRoZSA0LWRpZ2l0IHllYXIsIG1tIGlzIHRoZSAyLWRpZ2l0 IG1vbnRoLCBhbmQgc28KKyAgICAgICAgICBvbiwgZXhhY3RseSAxNCBkaWdpdHMgbG9uZy4gQW4g b3B0aW9uYWwgZnJhY3Rpb25hbCBwYXJ0CisgICAgICAgICAgKGZyYWN0aW9uIG9mIHNlY29uZCkg bWF5IGFsc28gYmUgaW5jbHVkZWQsIHNlcGFyYXRlZCBieSBhCisgICAgICAgICAgZGVjaW1hbCBw b2ludCAocGVyaW9kKS4gS2VybWl0IHJvdW5kcyB0byB0aGUgbmVhcmVzdCBzZWNvbmQuCisgICAg ICAgICAgRXhhbXBsZToKKworICAyMDAyMDIwODEwMjgzNS41MTUgICAgICAgICAgICAgICAgICAg ICAgICg4IEZlYnJ1YXJ5IDIwMDIgMTA6Mjg6MzYgQU0pCisKKzguMTMuMS4gVGhlIERhdGUKKwor ICAgVGhlIGRhdGUsIGlmIGdpdmVuLCBtdXN0IHByZWNlZGUgdGhlIHRpbWUgYW5kL29yIGRlbHRh LCBhbmQgY2FuIGJlIGluCisgICBtYW55LCBtYW55IGZvcm1hdHMuIEZvciBzdGFydGVycywgeW91 IGNhbiB1c2Ugc2V2ZXJhbCBzeW1ib2xpYyBkYXRlCisgICBuYW1lcyBpbiBwbGFjZSBvZiBhY3R1 YWwgZGF0ZXM6CisKKyAgIE5PVworICAgICAgICAgIFRoaXMgaXMgcmVwbGFjZWQgYnkgdGhlIGN1 cnJlbnQgZGF0ZSBhbmQgdGltZS4gVGhlIHRpbWUgY2FuIG5vdAorICAgICAgICAgIGJlIG92ZXJy aWRlbiAoaWYgeW91IHdhbnQgdG8gc3VwcGx5IGEgc3BlY2lmaWMgdGltZSwgdXNlIFRPREFZCisg ICAgICAgICAgcmF0aGVyIHRoYW4gTk9XKS4KKworICAgVE9EQVkKKyAgICAgICAgICBUaGlzIGlz IHJlcGxhY2VkIGJ5IHRoZSBjdXJyZW50IGRhdGUgYW5kIGEgZGVmYXVsdCB0aW1lIG9mCisgICAg ICAgICAgMDA6MDA6MDAgaXMgc3VwcGxpZWQsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHNw ZWNpZmljIHRpbWU7CisgICAgICAgICAgZm9yIGV4YW1wbGUsIGlmIHRvZGF5IGlzIDggRmVicnVh cnkgMjAwMiwgdGhlbiAiVE9EQVkiIGlzCisgICAgICAgICAgIjIwMDIwODAyIDAwOjAwOjAwIiBi dXQgIlRPREFZIDEwOjI4IiBpcyAiMjAwMjA4MDIgMTA6Mjg6MDAiLgorCisgICBUT01PUlJPVwor ICAgICAgICAgIExpa2UgVE9EQVksIGJ1dCBvbmUgZGF5IGxhdGVyIChpZiB0b2RheSBpcyA4IEZl YnJ1YXJ5IDIwMDIsIHRoZW4KKyAgICAgICAgICAiVE9NT1JST1ciIGlzICIyMDAyMDgwMyAwMDow MDowMCIgYnV0ICJUT01PUlJPVyAxNjozMCIgaXMKKyAgICAgICAgICAiMjAwMjA4MDMgMTY6MzA6 MDAiKS4KKworICAgWUVTVEVSREFZCisgICAgICAgICAgTGlrZSBUT0RBWSwgYnV0IG9uZSBkYXkg ZWFybGllci4KKworICAgTU9OREFZLCBUVUVTREFZLCBXRURORVNEQVksIC4uLiwgU1VOREFZCisg ICAgICAgICAgVGhlIGRhdGUgb24gdGhlIGdpdmVuIGRheSBvZiB0aGUgd2VlaywgdG9kYXkgb3Ig bGF0ZXIuIEEgZGVmYXVsdAorICAgICAgICAgIHRpbWUgb2YgMDA6MDA6MDAgaXMgc3VwcGxpZWQg YnV0IGNhbiBiZSBvdmVycmlkZGVuLiBFeGFtcGxlOgorICAgICAgICAgICJTQVRVUkRBWSAxMjow MCIgbWVhbnMgbmV4dCBTYXR1cmRheSAob3IgdG9kYXksIGlmIHRvZGF5IGlzCisgICAgICAgICAg U2F0dXJkYXkpIGF0IG5vb24uCisKKyAgIFlvdSBjYW4gZ2l2ZSBhbiBleHBsaWNpdCBkYXRlIGlu IGFsbW9zdCBhbnkgY29uY2VpdmFibGUgZm9ybWF0LCBidXQKKyAgIHRoZXJlIGFyZSBzb21lIHJ1 bGVzOgorCisgICAgICogSWYgYSBkYXRlIGlzIGdpdmVuLCBpdCBtdXN0IGhhdmUgdGhyZWUgZmll bGRzOiBkYXksIG1vbnRoLCBhbmQKKyAgICAgICB5ZWFyOyB0aGUgb3JkZXIgY2FuIHZhcnkgKGV4 Y2VwdCB0aGF0IHRoZSBtb250aCBjYW4gbm90IGJlIGxhc3QpLgorICAgICAqIElmIG5hbWVzIGFy ZSB1c2VkIGZvciBkYXlzLCBtb250aHMsIGV0YywgdGhleSBtdXN0IGJlIEVuZ2xpc2guCisgICAg ICogVGhlIHllYXIgbXVzdCBsaWUgYmV0d2VlbiAwMDAwIGFuZCA5OTk5LCBpbmNsdXNpdmUuCisg ICAgICogQWxsIGNhbGVuZGFyIGNhbGN1bGF0aW9ucyB1c2UgR3JlZ29yaWFuIGRhdGluZywgc28g Y2FsY3VsYXRlZCBkYXRlcworICAgICAgIGZvciB5ZWFycyBwcmlvciB0byAxNTgyIChvciBsYXRl ciwgZGVwZW5kaW5nIG9uIHRoZSBjb3VudHJ5KSB3aWxsCisgICAgICAgbm90IGFncmVlIHdpdGgg aGlzdG9yaWNhbCBkYXRlcy4gT3RoZXIgZm9ybXMgb2YgZGF0aW5nIChlLmcuCisgICAgICAgSGVi cmV3LCBDaGluZXNlKSBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgVmFyaW91cyBkYXRlLWZpZWxk IHNlcGFyYXRvcnMgYXJlIGFjY2VwdGVkOiBoeXBoZW4sIHNsYXNoLCBzcGFjZSwKKyAgIHVuZGVy c2NvcmUsIHBlcmlvZC4gVGhlIHNhbWUgZmllbGQgc2VwYXJhdG9yIChpZiBhbnkpIG11c3QgYmUg dXNlZCBpbgorICAgYm90aCBwbGFjZXM7IGZvciBleGFtcGxlIDE4LVNlcC0yMDAxIGJ1dCBub3Qg MTgtU2VwLzIwMDEuIE1vbnRocyBjYW4gYmUKKyAgIG51bWVyaWMgKDEtMTIpIG9yIEVuZ2xpc2gg bmFtZXMgb3IgYWJicmV2aWF0aW9ucy4gTW9udGggbmFtZQorICAgYWJicmV2aWF0aW9ucyBhcmUg bm9ybWFsbHkgdGhyZWUgbGV0dGVycywgZS5nLiBBcHIsIE1heSwgSnVuLCBKdWwuCisgICBDYXBp dGFsaXphdGlvbiBkb2Vzbid0IG1hdHRlci4KKworICAgSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXM6 CisKKyAgMTggU2VwIDIwMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRW5nbGlzaCBt b250aCwgYWJicmV2aWF0ZWQpCisgIDE4IFNlcHRlbWJlciAyMDAxICAgICAgICAgICAgICAgICAg ICAgICAgKEVuZ2xpc2ggbW9udGgsIHNwZWxsZWQgb3V0KQorICAyMDAxIFNlcHQgMTggICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChZZWFyLCBtb250aCwgZGF5KQorICAxOC1TZXAtMjAwMSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXaXRoIGh5cGhlbnMpCisgIDE4LzA5LzIwMDEg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFsbCBudW1lcmljIHdpdGggc2xhc2hlcykK KyAgMTguMDkuMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGl0dG8sIHdpdGgg cGVyaW9kcykKKyAgMThfMDlfMjAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGl0 dG8sIHdpdGggdW5kZXJzY29yZXMpCisgIDA5LzE4LzIwMDEgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKFNlZSBiZWxvdykKKyAgMjAwMS8wOS8xOCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoU2VlIGJlbG93KQorICBTZXB0ZW1iZXIgMTgsIDIwMDEgICAgICAgICAgICAgICAg ICAgICAgIChDb3JyZXNwb25kZW5jZSBzdHlsZSkKKyAgU2VwLTE4LTIwMDEgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoTW9udGgtZGF5LXllYXIpCisgIDIwMDEwOTE4ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKE51bWVyaWMsIG5vIHNlcGFyYXRvcnMpCisKKyAgIFlvdSBj YW4gYWxzbyBpbmNsdWRlIHRoZSBkYXkgb2YgdGhlIHdlZWsgd2l0aCBhIHNwZWNpZmljIGRhdGUs IGluIHdoaWNoCisgICBjYXNlIGl0IGlzIGFjY2VwdGVkIChpZiBpdCBpcyBhIHZhbGlkIGRheSBu YW1lKSwgYnV0IG5vdCB2ZXJpZmllZCB0bworICAgYWdyZWUgd2l0aCB0aGUgZ2l2ZW4gZGF0ZToK KworICBUdWUsIDE4IFNlcCAyMDAxICAgICAgICAgICAgICAgICAgICAgICAgIChBYmJyZXZpYXRl ZCwgd2l0aCBjb21tYSkKKyAgVHVlLDE4IFNlcCAyMDAxICAgICAgICAgICAgICAgICAgICAgICAg ICAoQ29tbWEgYnV0IG5vIHNwYWNlKQorICBUdWUgMTggU2VwIDIwMDEgICAgICAgICAgICAgICAg ICAgICAgICAgIChBYmJyZXZpYXRlZCwgbm8gY29tbWEpCisgIFR1ZXNkYXkgMTggU2VwIDIwMDEg ICAgICAgICAgICAgICAgICAgICAgKFNwZWxsZWQgb3V0KQorICBUdWVzZGF5LCAxOCBTZXAgMjAw MSAgICAgICAgICAgICAgICAgICAgIChldGMpCisgIEZyaWRheSwgMTggU2VwIDIwMDEgICAgICAg ICAgICAgICAgICAgICAgKEFjY2VwdGVkIGV2ZW4gaWYgbm90IEZyaWRheSkKKworICAgSW4gYWxs LW51bWVyaWMgZGF0ZXMgd2l0aCB0aGUgeWVhciBsYXN0LCBzdWNoIGFzIDE4LzA5LzIwMDEsIEtl cm1pdAorICAgaWRlbnRpZmllcyB0aGUgeWVhciBiZWNhdXNlIGl0J3MgNCBkaWdpdHMsIHRoZW4g ZGVjaWRlcyB3aGljaCBvZiB0aGUKKyAgIG90aGVyIHR3byBudW1iZXJzIGlzIHRoZSBtb250aCBv ciBkYXkgYmFzZWQgb24gaXRzIHZhbHVlLiBJZiBib3RoIGFyZQorICAgMTIgb3IgbGVzcyBhbmQg YXJlIHVuZXF1YWwsIHRoZSBkYXRlIGlzIGFtYmlndW91cyBhbmQgaXMgcmVqZWN0ZWQuIEluCisg ICBhbGwtbnVtZXJpYyBkYXRlcyB3aXRoIHRoZSB5ZWFyIGZpcnN0LCB0aGUgc2Vjb25kIGZpZWxk IGlzIGFsd2F5cyB0aGUKKyAgIG1vbnRoIGFuZCB0aGUgdGhpcmQgaXMgdGhlIGRheS4gVGhlIG1v bnRoIG5ldmVyIGNvbWVzIGxhc3QuIEEgZGF0ZSB3aXRoCisgICBubyBzZXBhcmF0b3JzIGlzIGFj Y2VwdGVkIG9ubHkgaWYgaXQgaXMgYWxsIG51bWVyaWMgYW5kIGhhcyBleGFjdGx5CisgICBlaWdo dCBkaWdpdHMsIGFuZCBpcyBhc3N1bWVkIHRvIGJlIGluIHl5eXltbWRkIGZvcm1hdC4KKworICAy MDAxMDkxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOC1TZXAtMjAwMSAwMDow MDowMCkKKworICAgb3IgMTQgZGlnaXRzIChhcyBpbiBGVFAgTURUTSBmb3JtYXQpOgorCisgIDIw MDEwOTE4MTIzNDU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE4LVNlcC0yMDAxIDEyOjM0 OjU2KQorCisgICBZb3UgY2FuIGFsd2F5cyBhdm9pZCBhbWJpZ3VpdHkgYnkgcHV0dGluZyB0aGUg eWVhciBmaXJzdCwgb3IgYnkgdXNpbmcKKyAgIGFuIEVuZ2xpc2gsIHJhdGhlciB0aGFuIG51bWVy aWMsIG1vbnRoLiBBIGRhdGUgc3VjaCBhcyAwOS8wOC8yMDAxIHdvdWxkCisgICBiZSBhbWJpZ3Vv dXMgYnV0IDIwMDEvMDkvMDggaXMgbm90LCBub3IgaXMgMDktQXVnLTIwMDEuCisKKyAgIFVudGls IHRoZSBsYXRlIDE5OTBzLCBpdCB3YXMgY29tbW9uIHRvIGVuY291bnRlciAyLWRpZ2l0IHllYXJz LCBhbmQKKyAgIHRoZXNlIGFyZSBmb3VuZCB0byB0aGlzIGRheSBpbiBvbGQgZS1tYWlscyBhbmQg b3RoZXIgZG9jdW1lbnRzLiBLZXJtaXQKKyAgIGFjY2VwdHMgdGhlc2UgZGF0ZXMgaWYgdGhleSBo YXZlIEVuZ2xpc2ggbW9udGhzLCBhbmQgaW50ZXJwcmV0cyB0aGVtCisgICBhY2NvcmRpbmcgdG8g dGhlIHdpbmRvd2luZyBydWxlcyBvZiBbNDgwXVJGQyAyODIyOiAiSWYgYSB0d28gZGlnaXQgeWVh cgorICAgaXMgZW5jb3VudGVyZWQgd2hvc2UgdmFsdWUgaXMgYmV0d2VlbiAwMCBhbmQgNDksIHRo ZSB5ZWFyIGlzCisgICBpbnRlcnByZXRlZCBieSBhZGRpbmcgMjAwMCwgZW5kaW5nIHVwIHdpdGgg YSB2YWx1ZSBiZXR3ZWVuIDIwMDAgYW5kCisgICAyMDQ5LiBJZiBhIHR3byBkaWdpdCB5ZWFyIGlz IGVuY291bnRlcmVkIHdpdGggYSB2YWx1ZSBiZXR3ZWVuIDUwIGFuZAorICAgOTksIG9yIGFueSB0 aHJlZSBkaWdpdCB5ZWFyIGlzIGVuY291bnRlcmVkLCB0aGUgeWVhciBpcyBpbnRlcnByZXRlZCBi eQorICAgYWRkaW5nIDE5MDAuIgorCisgICBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgeWVhciBw cmlvciB0byAxMDAwLCB1c2UgbGVhZGluZyB6ZXJvcyB0bworICAgZW5zdXJlIGl0IGlzIG5vdCBt aXNpbnRlcnByZXRlZCBhcyBhICJub24tWTJLLWNvbXBsaWFudCIgbW9kZXJuIHllYXI6CisKKyAg Ny1PY3QtNzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTk3NzEwMDcgMDA6MDA6 MDApCisgIDctT2N0LTAwNzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwNzcxMDA3 IDAwOjAwOjAwKQorCis4LjEzLjIuIFRoZSBUaW1lCisKKyAgIFRoZSBiYXNpYyB0aW1lIGZvcm1h dCBpcyBoaDptbTpkZDsgdGhhdCBpcyBob3VycywgbWludXRlcywgc2Vjb25kcywKKyAgIHNlcGFy YXRlZCBieSBjb2xvbnMsIHBlcmhhcHMgd2l0aCBhbiBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29u ZAorICAgc2VwYXJhdGVkIGJ5IGEgZGVjaW1hbCBwb2ludCAocGVyaW9kKS4gVGhlIGhvdXJzIGFy ZSBpbiAyNC1ob3VyIGZvcm1hdDsKKyAgIDEyIGlzIG5vb24sIDEzIGlzIDFwbSwgYW5kIHNvIG9u LiBGaWVsZHMgb21pdHRlZCBmcm9tIHRoZSByaWdodCBkZWZhdWx0CisgICB0byB6ZXJvLiBGaWVs ZHMgY2FuIGJlIG9taXR0ZWQgZnJvbSB0aGUgbGVmdCBvciBtaWRkbGUgYnkgaW5jbHVkaW5nIHRo ZQorICAgZmllbGQncyB0ZXJtaW5hdGluZyBjb2xvbi4gRXhhbXBsZXM6CisKKyAgMTE6NTk6NTkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6NTk6NTkgQU0pCisgIDExOjU5ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5OjAwIEFNKQorICAxMSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTowMDowMCBBTSkKKyAgMTE6NTk6 NTkuMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6NTk6NTkgQU0pCisgIDExOjU5 OjU5LjY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vb24pCisgIDAzOjIxOjAwICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM6MjE6MDAgQU0pCisgIDM6MjE6MDAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM6MjE6MDAgQU0pCisgIDE1OjIxOjAwICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM6MjE6MDAgUE0pCisgIDoyMTowMCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwOjIxOjAwIEFNKQorICA6OjAxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMDowMDowMSBBTSkKKyAgMTE6OjU5ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6MDA6NTkgQU0pCisKKyAgIExlYWRp bmcgemVyb3MgY2FuIGJlIG9taXR0ZWQsIGJ1dCBpdCBpcyBjdXN0b21hcnkgYW5kIG1vcmUgcmVh ZGFibGUgdG8KKyAgIGtlZXAgdGhlbSBpbiB0aGUgbWludXRlIGFuZCBzZWNvbmQgZmllbGRzOgor CisgIDAzOjAyOjAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAzOjAyOjAxIEFN KQorICAzOjAyOjAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMzowMjowMSBB TSkKKyAgMzoyOjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDM6MDI6MDEg QU0pCisKKyAgIEFNL1BNIG5vdGF0aW9uIGlzIGFjY2VwdGVkIGlmIHlvdSB3aXNoIHRvIHVzZSBp dDoKKworICAxMTo1OTo1OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1OTo1 OSBBTSkKKyAgMTE6NTk6NTlBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6NTk6 NTkgQU0pCisgIDExOjU5OjU5QS5NLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5 OjU5IEFNKQorICAxMTo1OTo1OWFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMTo1 OTo1OSBBTSkKKyAgMTE6NTk6NTlhLm0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6 NTk6NTkgQU0pCisgIDExOjU5OjU5UE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEx OjU5OjU5IFBNID0gMjM6NTk6NTkpCisgIDExOjU5OjU5UC5NLiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKDExOjU5OjU5IFBNID0gMjM6NTk6NTkpCisgIDExOjU5OjU5cG0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKDExOjU5OjU5IFBNID0gMjM6NTk6NTkpCisgIDExOjU5OjU5 cC5tLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjU5OjU5IFBNID0gMjM6NTk6NTkp CisKKyAgIFlvdSBjYW4gb21pdCB0aGUgY29sb25zIGlmIHlvdSB3aXNoLCBpbiB3aGljaCBjYXNl IEtlcm1pdCB1c2VzIHRoZQorICAgZm9sbG93aW5nIHJ1bGVzIHRvIGludGVycHJldCB0aGUgdGlt ZToKKworICAgIDEuIDYgZGlnaXRzIGlzIGhoOm1tOnNzLCBlLmcuIDEyMzQ1NiBpcyAxMjozNDo1 Ni4KKyAgICAyLiA1IGRpZ2l0cyBpcyBoOm1tOnNzLCBlLmcuIDEyMzQ1IGlzIDE6MjM6NDUuCisg ICAgMy4gNCBkaWdpdHMgaXMgaGg6bW0sIGUuZy4gMTIzNCBpcyAxMjozNC4KKyAgICA0LiAzIGRp Z2l0cyBpcyBoOm1tLCBlLmcuIDEyMyBpcyAxOjIzLgorICAgIDUuIDIgZGlnaXRzIGlzIGhoLCBl LmcuIDEyIGlzIDEyOjAwLgorICAgIDYuIDEgZGlnaXQgaXMgaCAodGhlIGhvdXIpLCBlLmcuIDEg aXMgMTowMC4KKworICAgRXhhbXBsZXM6CisKKyAgMSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMDE6MDA6MDAgQU0pCisgIDEwICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKDEwOjAwOjAwIEFNKQorICAyMzAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgwMjozMDowMCBBTSkKKyAgMjMwcG0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoMDI6MzA6MDAgUE0gPSAxNDozMDowMCkKKyAgMTExNSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTE6MTU6MDAgQU0pCisgIDIzMTUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDExOjE1OjAwIFBNID0gMjM6MTU6MDAgUE0p CisgIDIzMTUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAyOjMxOjUwIEFN KQorICAyMzE1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyMzoxNTowMCBQ TSkKKworOC4xMy4zLiBUaW1lIFpvbmVzCisKKyAgIElmIGEgdGltZSBpcyBnaXZlbiwgaXQgY2Fu IChidXQgbmVlZCBub3QpIGJlIGZvbGxvd2VkIGJ5IGEgdGltZSB6b25lCisgICBkZXNpZ25hdG9y LiBJZiBubyB0aW1lIHpvbmUgaXMgaW5jbHVkZWQsIHRoZSB0aW1lIGlzIHRyZWF0ZWQgYXMgbG9j YWwKKyAgIHRpbWUgYW5kIG5vIHRpbWV6b25lIGNvbnZlcnNpb25zIGFyZSBwZXJmb3JtZWQuCisK KyAgIFRoZSBwcmVmZXJyZWQgdGltZSB6b25lIGRlc2lnbmF0b3IgaXMgdGhlIFVUQyBPZmZzZXQs IGFzIHNwZWNpZmllZCBpbgorICAgWzQ4MV1SRkMgMjgyMjogYSBwbHVzIHNpZ24gb3IgbWludXMg c2lnbiBpbW1lZGlhdGVseSBmb2xsb3dlZCBieQorICAgZXhhY3RseSBmb3VyIGRlY2ltYWwgZGln aXRzLCBzaWduaWZ5aW5nIHRoZSBkaWZmZXJlbmNlIGluIGhoIChob3VycykKKyAgIGFuZCBtbSAo bWludXRlcykgZnJvbSBVbml2ZXJzYWwgQ29vcmRpbmF0ZWQgVGltZSAoVVRDLCBhbHNvIGtub3du IGFzCisgICBHcmVlbndpY2ggTWVhbiBUaW1lLCBvciBHTVQpLCB3aXRoIG5lZ2F0aXZlIG51bWJl cnMgdG8gdGhlIFdlc3QgYW5kCisgICBwb3NpdGl2ZSBudW1iZXJzIHRvIHRoZSBFYXN0LiBGb3Ig ZXhhbXBsZToKKworICBGcmksIDEzIEp1bCAyMDAxIDEyOjU0OjI5IC0wNzAwCisKKyAgIGluZGlj YXRlcyBhIGxvY2FsIHRpbWUgb2YgMTI6NTQ6MjkgdGhhdCBpcyAwNyBob3VycyBhbmQgMDAgbWlu dXRlcworICAgYmVoaW5kIChsZXNzIHRoYW4sIEVhc3Qgb2YpIFVuaXZlcnNhbCBUaW1lLiBUaGUg c3BhY2UgaXMgb3B0aW9uYWwsIHNvCisgICB0aGUgZXhhbXBsZSBjb3VsZCBhbHNvIGJlIHdyaXR0 ZW4gYXM6CisKKyAgRnJpLCAxMyBKdWwgMjAwMSAxMjo1NDoyOS0wNzAwCisKKyAgIFRoZSBmb2xs b3dpbmcgc3ltYm9saWMgdGltZSB6b25lcyBhcmUgYWxzbyBhY2NlcHRlZCwgYXMgc3BlY2lmaWVk IGJ5CisgICBbNDgyXVJGQyAyODIyIGFuZC9vciBpbiBJU08gODYwMToKKworICBHTVQgID0gICsw MDAwICAgICAgIEdyZWVud2ljaCBNZWFuIFRpbWUKKyAgWiAgICA9ICArMDAwMCAgICAgICBadWx1 IChaZXJvIE1lcmlkaWFuKSBUaW1lCisgIFVUQyAgPSAgKzAwMDAgICAgICAgVW5pdmVyc2FsIENv b3JkaW5hdGVkIFRpbWUKKyAgVVQgICA9ICArMDAwMCAgICAgICBVbml2ZXJzYWwgVGltZQorICBF RFQgID0gIC0wNDAwICAgICAgIEVhc3Rlcm4gKFVTQSkgRGF5bGlnaHQgVGltZQorICBFU1QgID0g IC0wNTAwICAgICAgIEVhc3Rlcm4gKFVTQSkgU3RhbmRhcmQgVGltZQorICBDRFQgID0gIC0wNTAw ICAgICAgIENlbnRyYWwgKFVTQSkgRGF5bGlnaHQgVGltZQorICBDU1QgID0gIC0wNjAwICAgICAg IENlbnRyYWwgKFVTQSkgU3RhbmRhcmQgVGltZQorICBNRFQgID0gIC0wNjAwICAgICAgIE1vdW50 YWluIChVU0EpIERheWxpZ2h0IFRpbWUKKyAgTVNUICA9ICAtMDcwMCAgICAgICBNb3VudGFpbiAo VVNBKSBTdGFuZGFyZCBUaW1lCisgIFBEVCAgPSAgLTA3MDAgICAgICAgUGFjaWZpYyAoVVNBKSBE YXlsaWdodCBUaW1lCisgIFBTVCAgPSAgLTA4MDAgICAgICAgUGFjaWZpYyAoVVNBKSBTdGFuZGFy ZCBUaW1lCisKKyAgIE5vdGUgdGhhdCBHTVQsIFosIFVUQywgYW5kIFVUIGFsbCBleHByZXNzIHRo ZSBzYW1lIGNvbmNlcHQ6IHN0YW5kYXJkCisgICAobm90IGRheWxpZ2h0KSB0aW1lIGF0IHRoZSBa ZXJvIE1lcmlkaWFuLiBVVEMsIGJ5IHRoZSB3YXksIGlzIGFuCisgICBpbnRlcm5hdGlvbmFsIHN0 YW5kYXJkIHN5bWJvbCBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byB0aGUgb3JkZXIgb2YKKyAg IHRoZSBFbmdsaXNoIHdvcmRzLCBVbml2ZXJzYWwgQ29vcmRpbmF0ZWQgVGltZSwgYnV0IGl0IGhh cHBlbnMgdG8gaGF2ZQorICAgdGhlIHNhbWUgaW5pdGlhbCBsZXR0ZXJzIGFzIHRoZXNlIHdvcmRz LiBPZiBjb3Vyc2UgaHVuZHJlZHMgb2Ygb3RoZXIKKyAgIHN5bWJvbGljIHRpbWV6b25lcyBhbmQg dmFyaWF0aW9ucyBleGlzdCwgYnV0IHRoZXkgYXJlIG5vdCBzdGFuZGFyZGl6ZWQsCisgICBhbmQg YXJlIHRoZXJlZm9yZSBub3Qgc3VwcG9ydGVkIGJ5IEtlcm1pdC4KKworICAgV2hlbiBhIHRpbWUg em9uZSBpcyBpbmNsdWRlZCB3aXRoIGEgdGltZSwgdGhlIHRpbWUgaXMgY29udmVydGVkIHRvCisg ICBsb2NhbCB0aW1lLiBJbiBjYXNlIHRoZSBjb252ZXJzaW9uIGNyb3NzZXMgYSBtaWRuaWdodCBi b3VuZGFyeSwgdGhlCisgICBkYXRlIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LiBFeGFtcGxlcyBj b252ZXJ0aW5nIHRvIEVTVCAoRWFzdGVybiBVU0EKKyAgIFN0YW5kYXJkIFRpbWUgPSAtMDUwMCk6 CisKKyAxMTozMDowMCAgICAgID0gIDExOjMwOjAwCisgMTE6MzA6MDAgRVNUICA9ICAxMTozMDow MAorIDExOjMwOjAwIEdNVCAgPSAgMDY6MzA6MDAKKyAxMTozMDowMCBQU1QgID0gIDE0OjMwOjAw CisgMTE6MzA6MDBaICAgICA9ICAwNjozMDowMAorIDExOjMwUE0gR01UICAgPSAgMTg6MzA6MDAK KyAxMTozMCAtMDUwMCAgID0gIDExOjMwOjAwCisgMTE6MzAgLTA4MDAgICA9ICAwODozMDowMAor IDExOjMwICswMjAwICAgPSAgMDQ6MzA6MDAKKworICAgVW5saWtlIG1vc3Qgb2YgS2VybWl0J3Mg b3RoZXIgZGF0ZS10aW1lIGNvbnZlcnNpb25zLCB0aW1lem9uZSBrbm93bGVkZ2UKKyAgIChzcGVj aWZpY2FsbHksIHRoZSBvZmZzZXQgb2YgbG9jYWwgdGltZSBmcm9tIFVUQykgaXMgZW1ib2RpZWQg aW4gdGhlCisgICB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0sIG5vdCBpbiBLZXJtaXQgaXRz ZWxmLCBhbmQgYW55IGNvbnZlcnNpb24KKyAgIGVycm9ycyBpbiB0aGlzIGRlcGFydG1lbnQgYXJl IHRoZSBmYXVsdCBvZiB0aGUgT1MuIEZvciBleGFtcGxlLCBtb3N0CisgICBVTklYIHBsYXRmb3Jt cyBkbyBub3QgcGVyZm9ybSBjb252ZXJzaW9ucyBmb3IgeWVhcnMgcHJpb3IgdG8gMTk3MC4KKwor OC4xMy40LiBEZWx0YSBUaW1lCisKKyAgIERhdGUvdGltZSBleHByZXNzaW9ucyBjYW4gYmUgY29t cG9zZWQgb2YgYSBkYXRlIGFuZC9vciB0aW1lIGFuZCBhIGRlbHRhCisgICB0aW1lLCBvciBhIGRl bHRhIHRpbWUgYnkgaXRzZWxmLiBXaGVuIGEgZGVsdGEgdGltZSBpcyBnaXZlbiBieSBpdHNlbGYs CisgICBpdCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBsb2NhbCBkYXRlIGFuZCB0aW1lLiBE ZWx0YSB0aW1lcyBoYXZlIHRoZQorICAgZm9sbG93aW5nIGdlbmVyYWwgZm9ybWF0OgorCisgIHsr LC19W251bWJlciB1bml0c11baGhbOm1tWzpzc11dXQorCisgICBJbiBvdGhlciB3b3JkcywgYSBk ZWx0YSB0aW1lIGFsd2F5cyBzdGFydHMgd2l0aCBhIHBsdXMgb3IgbWludXMgc2lnbiwKKyAgIHdo aWNoIGlzIGZvbGxvd2VkIGJ5IGEgInBhcnQxIiwgYSAicGFydDIiLCBvciBib3RoLiBUaGUgInBh cnQxIiwgaWYKKyAgIGdpdmVuLCBzcGVjaWZpZXMgYSBudW1iZXIgb2YgZGF5cywgd2Vla3MsIG1v bnRocywgb3IgeWVhcnM7ICJwYXJ0MiIKKyAgIHNwZWNpZmllcyBhIHRpbWUgaW4gaGg6bW06c3Mg bm90YXRpb24uIEluIGFyaXRobWV0aWMgdGVybXMsIHRoZXNlCisgICByZXByZXNlbnRzIHNvbWUg bnVtYmVyIG9mIGRheXMgb3Igb3RoZXIgYmlnIHRpbWUgdW5pdHMsIGFuZCB0aGVuIGEKKyAgIGZy YWN0aW9uIG9mIGEgZGF5IGV4cHJlc3NlZCBhcyBob3VycywgbWludXRlcywgYW5kIHNlY29uZHM7 IHRoZXNlIGFyZQorICAgdG8gYmUgYWRkZWQgdG8gb3Igc3VidHJhY3RlZCBmcm9tIHRoZSBnaXZl biAob3IgaW1wbGllZCkgZGF0ZSBhbmQgdGltZS4KKyAgIFRoZSBzeW50YXggaXMgc29tZXdoYXQg ZmxleGlibGUsIGFzIHNob3duIGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZXM6CisKKyAgKzEgZGF5 ICAgICAgICAgICAgICAgIChQbHVzIG9uZSBkYXkpCisgICsxZGF5ICAgICAgICAgICAgICAgICAo RGl0dG8pCisgICsxZCAgICAgICAgICAgICAgICAgICAoRGl0dG8pCisgICsgMSBkYXkgICAgICAg ICAgICAgICAoRGl0dG8pCisgICsgMSBkYXkgMzowMCAgICAgICAgICAoUGx1cyBvbmUgZGF5IGFu ZCAzIGhvdXJzKQorICArMWQzOjAwICAgICAgICAgICAgICAgKERpdHRvKQorICArMWQzICAgICAg ICAgICAgICAgICAgKERpdHRvKQorICArMzowMDowMCAgICAgICAgICAgICAgKFBsdXMgMyBob3Vy cykKKyAgKzM6MDAgICAgICAgICAgICAgICAgIChEaXR0bykKKyAgKzMgICAgICAgICAgICAgICAg ICAgIChEaXR0bykKKyAgKzIgZGF5cyAgICAgICAgICAgICAgIChQbHVzIDIgZGF5cykKKyAgLTEy IGRheXMgNzoxNDoyMiAgICAgIChNaW51cyAxMiBkYXlzLCA3IGhvdXJzLCAxNCBtaW51dGVzLCBh bmQgMjIgc2Vjb25kcykKKworICAgVGhlIHdvcmRzICJ3ZWVrIiwgIm1vbnRoIiwgYW5kICJ5ZWFy IiBjYW4gYmUgdXNlZCBsaWtlICJkYXkiIGluIHRoZQorICAgZXhhbXBsZXMgYWJvdmUuIEEgd2Vl ayBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gNyBkYXlzLiBXaGVuIG1vbnRocyBhcmUKKyAgIHNw ZWNpZmllZCwgdGhlIG51bWVyaWMgbW9udGggbnVtYmVyIG9mIHRoZSBkYXRlIGlzIGluY3JlbWVu dGVkIG9yCisgICBkZWNyZW1lbnRlZCBieSB0aGUgZ2l2ZW4gbnVtYmVyLCBhbmQgdGhlIHllYXIg YW5kIGRheSBhZGp1c3RlZAorICAgYWNjb3JkaW5nbHkgaWYgbmVjZXNzYXJ5IChmb3IgZXhhbXBs ZSwgMzEtSmFuLTIwMDEgKzFtb250aCA9CisgICAwMy1NYXItMjAwMSBiZWNhdXNlIEZlYnJ1YXJ5 IGRvZXMgbm90IGhhdmUgMzEgZGF5cykuIFdoZW4geWVhcnMgYXJlCisgICBzcGVjaWZpZWQsIHRo ZXkgYXJlIGFkZGVkIG9yIHN1YnRyYWN0ZWQgdG8gdGhlIGJhc2UgeWVhci4gRXhhbXBsZXMKKyAg IChhc3N1bWluZyB0aGUgY3VycmVudCBkYXRlIGlzIDEwLUF1Zy0yMDAxIGFuZCB0aGUgY3VycmVu dCB0aW1lIGlzCisgICAxOToyMToxMSk6CisKKyAgMTgtU2VwLTIwMDEgKzFkYXkgICAgICAgICAg ICAgICgyMDAxMDkxOCAwMDowMDowMCkKKyAgdG9kYXkgKzFkYXkgICAgICAgICAgICAgICAgICAg ICgyMDAxMDgxMSAwMDowMDowMCkKKyAgbm93KzFkICAgICAgICAgICAgICAgICAgICAgICAgICgy MDAxMDgxMSAxOToyMToxMSkKKyAgKyAxIGRheSAgICAgICAgICAgICAgICAgICAgICAgICgyMDAx MDgxMSAxOToyMToxMSkKKyAgKyAxIGRheSAzOjE0OjQyICAgICAgICAgICAgICAgICgyMDAxMDgx MSAyMjozNTo1NCkKKyAgKyA3IHdlZWtzICAgICAgICAgICAgICAgICAgICAgICgyMDAxMDkyOCAx OToyMToxMSkKKyAgKzFkMzoxNDo0MiAgICAgICAgICAgICAgICAgICAgICgyMDAxMDgxMSAyMjoz NTo1NCkKKyAgKzF3MzoxNDo0MiAgICAgICAgICAgICAgICAgICAgICgyMDAxMDgxNyAyMjozNTo1 NCkKKyAgKzFtMzoxNDo0MiAgICAgICAgICAgICAgICAgICAgICgyMDAxMDkxMCAyMjozNTo1NCkK KyAgKzF5MzoxNDo0MiAgICAgICAgICAgICAgICAgICAgICgyMDAyMDgxMCAyMjozNTo1NCkKKyAg MiBmZWIgMjAwMSArIDEwIHllYXJzICAgICAgICAgICgyMDExMDIwOCAwMDowMDowMCkKKyAgMjAw MS0wMi0wOCArMTB5MTIgICAgICAgICAgICAgICgyMDExMDIwOCAxMjowMDowMCkKKyAgMzEtZGVj LTE5OTkgMjM6NTk6NTkrMDA6MDA6MDEgICgyMDAwMDEwMSAwMDowMDowMCkKKyAgMjgtZmViLTE5 OTYgKzFkYXkgICAgICAgICAgICAgICgxOTk2MDIyOSAwMDowMDowMCkgKGxlYXAgeWVhcikKKyAg MjgtZmViLTE5OTcgKzFkYXkgICAgICAgICAgICAgICgxOTk3MDMwMSAwMDowMDowMCkgKG5vbmxl YXAgeWVhcikKKyAgMjgtZmViLTE5OTcgKzFtb250aCAgICAgICAgICAgICgxOTk3MDMyOCAwMDow MDowMCkKKyAgMjgtZmViLTE5OTcgKzFtb250aCAxMTo1OTo1OSAgICgxOTk3MDMyOCAxMTo1OTo1 OSkKKyAgMjgtZmViLTE5OTcgKzIweWVhcnMgICAgICAgICAgICgyMDE3MDIyOCAwMDowMDowMCkK KyAgMjgtZmViLTE5OTcgKzgwMDB5ZWFycyAgICAgICAgICg5OTk3MDIyOCAwMDowMDowMCkKKwor ICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBWTVMsIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBkZWx0 YS10aW1lIGZvcm1hdCBpcworICAgYWxzbyBhY2NlcHRlZDoKKworICArbnVtYmVyLWhoOm1tOnNz CisgIC1udW1iZXItaGg6bW06c3MKKworICAgKG5vIHNwYWNlcykuIFRoZSBoeXBoZW4gYWZ0ZXIg dGhlIG51bWJlciBpbmRpY2F0ZXMgZGF5cy4gSXQgY29ycmVzcG9uZHMKKyAgIGV4YWN0bHkgdG8g dGhlIEtlcm1pdCBub3RhdGlvbjoKKworICArbnVtYmVyZGhoOm1tOnNzCisgIC1udW1iZXJkaGg6 bW06c3MKKworICAgVGhlIGZvbGxvd2luZyBmb3JtcyBhbGwgaW5kaWNhdGUgZXhhY3RseSB0aGUg c2FtZSBkYXRlIGFuZCB0aW1lOgorCisgIDE4LVNlcC0yMDAxIDEyOjM0OjU2ICsxLTM6MjM6MDEK KyAgMTgtU2VwLTIwMDEgMTI6MzQ6NTYgKzFkMzoyMzowMQorICAxOC1TZXAtMjAwMSAxMjozNDo1 NiArMSBkYXkgMzoyMzowMQorCisgICBhbmQgbWVhbiAiYWRkIGEgZGF5IHBsdXMgMyBob3Vycywg MjMgbWludXRlcywgYW5kIDEgc2Vjb25kIiB0byB0aGUKKyAgIGdpdmVuIGRhdGUuCisKKyAgIE5v dGUgdGhhdCBkZWx0YSB0aW1lcyBhcmUgbm90IGF0IGFsbCB0aGUgc2FtZSBhcyBVVEMgb2Zmc2V0 czsgdGhlCisgICBmb3JtZXIgc3BlY2lmaWVzIGFuIGFkanVzdG1lbnQgdG8gdGhlIGdpdmVuIGRh dGUvdGltZSBhbmQgdGhlIGxhdHRlcgorICAgc3BlY2lmaWVzIHRoYXQgdGhlIGxvY2FsIHRpbWUg aXMgYSBwYXJ0aWN1bGFyIGRpc3RhbmNlIGZyb20gVW5pdmVyc2FsCisgICBUaW1lLCBmb3IgZXhh bXBsZToKKworICAxMS1BdWctMjAwMSAxMjozNDo1NiAtMDgwMCAgICAgICAgICAoMjAwMTA4MTEg MTY6MzQ6NTYgLS0gVVRDIE9mZnNldCkKKyAgMTEtQXVnLTIwMDEgMTI6MzQ6NTYgLTA4OjAwICAg ICAgICAgKDIwMDEwODExIDA0OjM0OjU2IC0tIERlbHRhIHRpbWUpCisKKyAgIElmIHlvdSBnaXZl IGEgdGltZSBmb2xsb3dlZCBieSBhIG1vZGlmaWVyIHRoYXQgc3RhcnRzIHdpdGggYSArIG9yIC0K KyAgIHNpZ24sIGhvdyBkb2VzIEtlcm1pdCBrbm93IHdoZXRoZXIgaXQncyBhIFVUQyBvZmZzZXQg b3IgYSBkZWx0YSB0aW1lPworICAgSXQgaXMgdHJlYXRlZCBhcyBhIFVUQyBvZmZzZXQgaWYgdGhl IHNpZ24gaXMgZm9sbG93ZWQgYnkgZXhhY3RseSBmb3VyCisgICBkZWNpbWFsIGRpZ2l0czsgb3Ro ZXJ3aXNlIGl0IGlzIGEgZGVsdGEgdGltZS4gRXhhbXBsZXMgKGZvciBVU0EgRWFzdGVybgorICAg RGF5bGlnaHQgVGltZSk6CisKKyAgMTEtQXVnLTIwMDEgMTI6MzQ6NTYgLTA4MDAgICAgICAgICAg KDIwMDEwODExIDE2OjM0OjU2IC0tIFVUQyBPZmZzZXQpCisgIDExLUF1Zy0yMDAxIDEyOjM0OjU2 IC0wODowMCAgICAgICAgICgyMDAxMDgxMSAwNDozNDo1NiAtLSBEZWx0YSB0aW1lKQorICAxMS1B dWctMjAwMSAxMjozNDo1NiAtODAwICAgICAgICAgICAoMjAwMTA4MTEgMDQ6MzQ6NTYgLS0gRGVs dGEgdGltZSkKKyAgMTEtQXVnLTIwMDEgMTI6MzQ6NTYgLTggICAgICAgICAgICAgKDIwMDEwODEx IDA0OjM0OjU2IC0tIERlbHRhIHRpbWUpCisKKyAgIFRoZSBmaXJzdCBleGFtcGxlIHNheXMgdGhh dCBhdCBzb21lIHVua25vd24gcGxhY2Ugd2hpY2ggaXMgOCBob3VycworICAgYWhlYWQgb2YgVW5p dmVyc2FsIFRpbWUsIHRoZSB0aW1lIGlzIDEyOjM0OjU2LCBhbmQgdGhpcyBjb3JyZXNwb25kcyB0 bworICAgMTY6MzQ6NTYgaW4gRWFzdGVybiBEYXlsaWdodCB0aW1lLiBUaGUgc2Vjb25kIGV4YW1w bGUgc2F5cyB0byBzdWJ0cmFjdAorICAgOCBob3VycyBmcm9tIHRoZSBsb2NhbCB0aW1lLiBUaGUg dGhpcmQgYW5kIGZvdXJ0aCBhcmUgZGVsdGEgdGltZXMKKyAgIGJlY2F1c2UsIGV2ZW4gdGhvdWdo IGEgY29sb24gaXMgbm90IGluY2x1ZGVkLCB0aGUgdGltZSBkb2VzIG5vdCBjb25zaXN0CisgICBv ZiBleGFjdGx5IDQgZGlnaXRzLgorCisgICBXaGVuIGEgZGVsdGEgdGltZSBpcyB3cml0dGVuIGFm dGVyIGEgdGltZXpvbmUsIGhvd2V2ZXIsIHRoZXJlIGlzIG5vCisgICBhbWJpZ3VpdHkgYW5kIG5v IHN5bnRheCBkaXN0aW5jdGlvbiBpcyByZXF1aXJlZDoKKworICAxMS1BdWctMjAwMSAxMjozNDo1 NiAtMDgwMCAtMDgwMCAgICAoMjAwMTA4MTEgMDg6MzQ6NTYpCisgIDExLUF1Zy0yMDAxIDEyOjM0 OjU2IC0wODAwIC0wODowMCAgIChEaXR0bykKKyAgMTEtQXVnLTIwMDEgMTI6MzQ6NTYgLTA4OjAw IC0wODowMCAgKElsbGVnYWwpCisKKzguMTMuNS4gVGhlIERBVEUgQ29tbWFuZAorCisgICBPYnZp b3VzbHkgYSBncmVhdCBtYW55IGNvbWJpbmF0aW9ucyBvZiBkYXRlLCB0aW1lLCB0aW1lIHpvbmUs IGFuZCBkZWx0YQorICAgdGltZSBhcmUgcG9zc2libGUsIGFzIHdlbGwgYXMgbWFueSBmb3JtYXR0 aW5nIG9wdGlvbnMuIFRoZSBwdXJwb3NlIG9mCisgICBhbGwgdGhpcyBmbGV4aWJpbGl0eSBpcyB0 byBjb21wbHkgd2l0aCBhcyBtYW55IHN0YW5kYXJkcyBhcyBwb3NzaWJsZSAtLQorICAgSW50ZXJu ZXQgUkZDcywgSVNPIHN0YW5kYXJkcywgYW5kIHByb3ZlbiBjb3Jwb3JhdGUgc3RhbmRhcmRzIC0t IGFzIHdlbGwKKyAgIGFzIHdpdGggbm90YXRpb25zIGNvbW1vbmx5IHVzZWQgYnkgcmVhbCBwZW9w bGUsIGluIG9yZGVyIHRoYXQgZGF0ZXMgYW5kCisgICB0aW1lcyBmcm9tIHRoZSB3aWRlc3QgdmFy aWV0eSBvZiBzb3VyY2VzIGNhbiBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlCisgICBhbmQgdXNl ZCBpbiBhbnkgZGF0ZS10aW1lIGZpZWxkIGluIGFueSBLZXJtaXQgY29tbWFuZC4KKworICAgWW91 IGNhbiB0ZXN0IGFueSBkYXRlLWFuZC9vci10aW1lIGZvcm1hdCB3aXRoIHRoZSBEQVRFIGNvbW1h bmQsIHdoaWNoCisgICBjb252ZXJ0cyBpdCB0byBzdGFuZGFyZCB5eXl5bW1kZCBoaDptbTpzcyBm b3JtYXQgaWYgaXQgaXMgdW5kZXJzdG9vZCwKKyAgIG9yIGVsc2UgZ2l2ZXMgYW4gZXhwbGljaXQg ZXJyb3IgbWVzc2FnZSAocmF0aGVyIHRoYW4ganVzdCAiQkFEIERBVEUiIGFzCisgICBpbiBwcmV2 aW91cyBDLUtlcm1pdCByZWxlYXNlcykgdG8gaW5kaWNhdGUgd2hhdCBpcyB3cm9uZyB3aXRoIGl0 LgorICAgRXhhbXBsZXMgKG9uIFR1ZXNkYXksIDMxIEp1bHkgMjAwMSBpbiBOZXcgWW9yayBDaXR5 LCBFYXN0ZXJuIERheWxpZ2h0CisgICBUaW1lLCBVVEMgLTA0MDApOgorCisgIERBVEUgY29tbWFu ZCBhcmd1bWVudCAgICAgICAgICAgICAgICAgICBSZXN1bHQKKyAgMTI6MzAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDEyOjMwOjAwCisgIDEyOjMwOjAxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAxMjozMDowMQorICAxMjozMDowMS41 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzEgMTI6MzA6MDIKKyAgMTIzMCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMxIDEyOjMwOjAwCisgIDIz MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAwMjozMDowMAor ICAyMzArMWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDEgMDI6MzA6 MDAKKyAgMjMwKzFkMzowMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAxIDA1 OjMwOjAwCisgIDIwMDEwNzE4IDE5OjIxOjE1ICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDcx OCAxOToyMToxNQorICAyMDAxMDcxOF8xOTIxMTUgICAgICAgICAgICAgICAgICAgICAgICAgMjAw MTA3MTggMTk6MjE6MTUKKyAgMjAwMTA3MThUMTkyMTE1ICAgICAgICAgICAgICAgICAgICAgICAg IDIwMDEwNzE4IDE5OjIxOjE1CisgIDE4IEp1bCAyMDAxICswNDAwICAgICAgICAgICAgICAgICAg ICAgICAyMDAxMDcxNyAyMzo1OTo1OQorICAxOCBKdWwgMjAwMSAxOTIxMTUgICAgICAgICAgICAg ICAgICAgICAgMjAwMTA3MTggMTk6MjE6MTUKKyAgMTggSnVsIDIwMDEgMTkyMTE1LjggICAgICAg ICAgICAgICAgICAgIDIwMDEwNzE4IDE5OjIxOjE2CisgIDE4LUp1bC0yMDAxVDE5MjEgICAgICAg ICAgICAgICAgICAgICAgICAyMDAxMDcxOCAxOToyMTowMAorICAxOC1KdWwtMjAwMSAxOTIxWiAg ICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTggMTU6MjE6MDAKKyAgMTgtSnVsLTIwMDEgMTky MSBHTVQgICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE1OjIxOjAwCisgIDE4LUp1bC0yMDAx IDE5MjEgVVRDICAgICAgICAgICAgICAgICAgICAyMDAxMDcxOCAxNToyMTowMAorICAxOC1KdWwt MjAwMSAxOTIxIFogICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MTggMTU6MjE6MDAKKyAgMTgt SnVsLTIwMDEgMTkyMVogICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzE4IDE1OjIxOjAwCisg IDE4LUp1bC0yMDAxIDE5MjEgLTA0OjAwOjAwICAgICAgICAgICAgICAyMDAxMDcxOCAxOToyMTow MAorICAyMS1KdWwtMjAwMV8wODoyMDowMGFtICAgICAgICAgICAgICAgICAgMjAwMTA3MjEgMDg6 MjA6MDAKKyAgMjEtSnVsLTIwMDFfODoyMDowMFAuTS4gICAgICAgICAgICAgICAgIDIwMDEwNzIx IDIwOjIwOjAwCisgIEZyaSBKdWwgMjAgMTE6MjY6MjUgMjAwMSAgICAgICAgICAgICAgICAyMDAx MDcyMCAxMToyNjoyNQorICBGcmkgSnVsIDIwIDExOjI2OjI1IEdNVCAyMDAxICAgICAgICAgICAg MjAwMTA3MjAgMDc6MjY6MjUKKyAgU3VuLCA5IEFwciAyMDAwIDA2OjQ2OjQ2ICswMTAwICAgICAg ICAgIDIwMDAwNDA5IDAxOjQ2OjQ2CisgIFN1bmRheSwgOSBBcHIgMjAwMCAwNjo0Njo0NiArMDEw MCAgICAgICAyMDAwMDQwOSAwMTo0Njo0NgorICBub3cgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMjAwMTA3MzEgMTk6NDE6MTIKKyAgdG9kYXkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDIwMDEwNzMxIDAwOjAwOjAwCisgIHRvZGF5IDA5OjAwICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAyMDAxMDczMSAwOTowMDowMAorICB0b21vcnJvdyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDEgMDA6MDA6MDAKKyAgdG9tb3Jyb3cgMDk6 MDAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAxIDA5OjAwOjAwCisgIHRvbW9ycm93 IDA5OjAwIEdNVCAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMSAwNTowMDowMAorICB5ZXN0 ZXJkYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzAgMDA6MDA6MDAKKyAg eWVzdGVyZGF5IDA5OjAwICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzMwIDA5OjAwOjAw CisgICsgMyBkYXlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMyAwMDow MDowMAorICArMyBkYXlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDMg MDA6MDA6MDAKKyAgKzNkYXlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEw ODAzIDAwOjAwOjAwCisgICsgM2RheXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy MDAxMDgwMyAwMDowMDowMAorICArIDMgZGF5cyAwOTowMCAgICAgICAgICAgICAgICAgICAgICAg ICAgMjAwMTA4MDMgMDk6MDA6MDAKKyAgKyAyIHdlZWtzICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDIwMDEwODE0IDAwOjAwOjAwCisgICsgMSBtb250aCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAyMDAxMDgzMSAwMDowMDowMAorICAtIDcgbW9udGhzICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMjAwMDEyMzEgMDA6MDA6MDAKKyAgKyAxMCB5ZWFycyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDIwMTEwNzMxIDAwOjAwOjAwCisgIGZyaWRheSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMyAwMDowMDowMAorICBzYXR1cmRheSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4MDQgMDA6MDA6MDAKKyAgc3VuZGF5ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODA1IDAwOjAwOjAwCisgIG1vbmRh eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwNiAwMDowMDowMAorICB0 dWVzZGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA3MzEgMDA6MDA6MDAK KyAgd2VkbmVzZGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDEwODAxIDAwOjAw OjAwCisgIHRodXJzZGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDgwMiAw MDowMDowMAorICBmcmlkYXkgMDc6MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA4 MDMgMDc6MDA6MDAKKyAgdGh1cnNkYXkgMTowMHBtICAgICAgICAgICAgICAgICAgICAgICAgIDIw MDEwODAyIDEzOjAwOjAwCisgIHRodXJzZGF5IDE6MDBwbSBHTVQgICAgICAgICAgICAgICAgICAg ICAyMDAxMDgwMiAwOTowMDowMAorICBUaHUsIDEwIE5vdiA5NCAxMDo1MDo0NyBFU1QgICAgICAg ICAgICAgMTk5NDExMTAgMTA6NTA6NDcKKyAgRnJpLCAyMCBPY3QgMTk5NSAxODozNToxNSAtMDQw MCAoRURUKSAgIDE5OTUxMDIwIDE4OjM1OjE1CisgIDMxLzEyLzIwMDEgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAyMDAxMTIzMSAwMDowMDowMAorICAxMi8zMS8yMDAxICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMjAwMTEyMzEgMDA6MDA6MDAKKyAgMjAwMS1KdWx5LTIwICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDIwMDEwNzIwIDAwOjAwOjAwCisgIDIwMDEtU2VwdGVtYmVy LTMwICAgICAgICAgICAgICAgICAgICAgICAyMDAxMDkzMCAwMDowMDowMAorICAzMC1TZXB0ZW1i ZXItMjAwMSAgICAgICAgICAgICAgICAgICAgICAgMjAwMTA5MzAgMDA6MDA6MDAKKyAgU2VwIDMw LCAyMDAxIDEyOjM0OjU2ICAgICAgICAgICAgICAgICAgIDIwMDEwOTMwIDEyOjM0OjU2CisgIFNl cHRlbWJlciAzMCwgMjAwMSAgICAgICAgICAgICAgICAgICAgICAyMDAxMDkzMCAwMDowMDowMAor ICBTZXB0ZW1iZXIgMzAsIDIwMDEgNjMwICAgICAgICAgICAgICAgICAgMjAwMTA5MzAgMDY6MzA6 MDAKKyAgU2VwdGVtYmVyIDMwIDIwMDEgNjMwICAgICAgICAgICAgICAgICAgIDIwMDEwOTMwIDA2 OjMwOjAwCisgIFNlcC0zMC0yMDAxIDEyOjM0OjU5ICAgICAgICAgICAgICAgICAgICAyMDAxMDkz MCAxMjozNDo1OQorICAyMDAxMDgwNzExMzU0Mi4wMTQgICAgICAgICAgICAgICAgICAgICAgMjAw MTA4MDcgMTE6MzUuNDIKKyAgMjAwMTA4MDcxMTM1NDIuMDE0WiAgICAgICAgICAgICAgICAgICAg IDIwMDEwODA3IDA3OjM1OjQyCisKKzguMTMuNi4gTmV3IERhdGUtVGltZSBGdW5jdGlvbnMKKwor ICAgSW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbnMsIGRhdGUtdGltZSBmdW5jdGlvbiBhcmd1 bWVudHMgYXJlIHRoZQorICAgc2FtZSBmcmVlLWZvcm1hdCBkYXRlLXRpbWUgc3RyaW5ncyBkaXNj dXNzZWQgYWJvdmUsIHdpdGggdGhlIHNhbWUKKyAgIGRlZmF1bHRzIGZvciBtaXNzaW5nIGZpZWxk cy4gVGhleSBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8KKyAgIHN0YW5kYXJkIGZvcm1h dCBpbnRlcm5hbGx5IHByaW9yIHRvIHByb2Nlc3NpbmcuCisKKyAgIFxmY3Z0ZGF0ZShkMSkKKyAg ICAgICAgICBDb252ZXJ0cyB0aGUgZGF0ZS10aW1lIGQxIHRvIHN0YW5kYXJkIGZvcm1hdCBhbmQg bG9jYWwgdGltZS4KKyAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBuZXcsIGJ1dCBub3cg aXQgYWNjZXB0cyBhIHdpZGVyIHJhbmdlIG9mCisgICAgICAgICAgYXJndW1lbnQgZm9ybWF0cyB0 aGF0IGNhbiBpbmNsdWRlIHRpbWV6b25lcyBhbmQvb3IgZGVsdGEgdGltZXMuCisgICAgICAgICAg SWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG9taXR0ZWQsIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRp bWUgYXJlCisgICAgICAgICAgYXNzdW1lZC4gVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBp cyBhIGZvcm1hdCBjb2RlIGZvciB0aGUKKyAgICAgICAgICByZXN1bHQ6CisKKyAgICAgbjEgPSAx OiB5eXl5LW1tbS1kZCBoaDptbTpzcyAobW1tID0gRW5nbGlzaCAzLWxldHRlciBtb250aAorICAg ICBhYmJyZXZpYXRpb24pCisgICAgIG4xID0gMjogZGQtbW1tLXl5eXkgaGg6bW06c3MgKGRpdHRv KQorICAgICBuMSA9IDM6IHl5eXltbWRkaGhtbXNzIChhbGwgbnVtZXJpYykKKworICAgXGZ1dGNk YXRlKGQxKQorICAgICAgICAgIENvbnZlcnRzIHRoZSBkYXRlLXRpbWUgZDEgdG8gVW5pdmVyc2Fs IENvb3JkaW5hdGVkIFRpbWUgKFVUQyksCisgICAgICAgICAgYWxzbyBrbm93biBhcyBHTVQgb3Ig WnVsdSBvciBaZXJvLU1lcmlkaWFuIHRpbWUuIFRoZSBkZWZhdWx0IGQxCisgICAgICAgICAgaXMg Tk9XLiBJZiBkMSBpcyBhIHZhbGlkIGRhdGUtdGltZSwgdGhlIFVUQyByZXN1bHQgaXMgcmV0dXJu ZWQKKyAgICAgICAgICBpbiBzdGFuZGFyZCBmb3JtYXQsIHl5eXltbWRkIGhoOnNzOm1tLgorCisg ICBcZmNtcGRhdGVzKGQxLGQyKQorICAgICAgICAgIENvbXBhcmVzIHR3byBmcmVlLWZvcm1hdCBk YXRlLXRpbWVzLCBkMSBhbmQgZDIsIGFuZCwgaWYgYm90aAorICAgICAgICAgIGFyZ3VtZW50cyBh cmUgdmFsaWQsIHJldHVybnMgYSBudW1iZXI6IC0xIGlmIGQxIGlzIGVhcmxpZXIgdGhhbgorICAg ICAgICAgIChiZWZvcmUpIGQyOyAwIGlmIGQxIGlzIHRoZSBzYW1lIGFzIGQyOyAxIGlmIGQxIGlz IGxhdGVyIHRoYW4KKyAgICAgICAgICAoYWZ0ZXIpIGQyLgorCisgICBcZmRpZmZkYXRlcyhkMSxk MikKKyAgICAgICAgICBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBmcmVlLWZv cm1hdCBkYXRlLXRpbWVzLCBkMQorICAgICAgICAgIGFuZCBkMi4gSWYgYm90aCBhcmd1bWVudHMg YXJlIHZhbGlkLCByZXR1cm5zIGEgZGVsdGEgdGltZSB3aGljaAorICAgICAgICAgIGlzIG5lZ2F0 aXZlIGlmIGQxIGlzIGVhcmxpZXIgdGhhbiAoYmVmb3JlKSBkMiBhbmQgcG9zaXRpdmUKKyAgICAg ICAgICBvdGhlcndpc2UuIElmIGQxIGFuZCBkMiBhcmUgZXF1YWwsIHRoZSByZXN1bHQgaXMgIisw OjAwIi4KKyAgICAgICAgICBPdGhlcndpc2UsIHRoZSByZXN1bHQgY29uc2lzdHMgb2YgdGhlIG51 bWJlciBvZiBkYXlzLCBob3VycywKKyAgICAgICAgICBtaW51dGVzLCBhbmQgc2Vjb25kcyB0aGF0 IHNlcGFyYXRlIHRoZSB0d28gZGF0ZS10aW1lcy4gSWYgdGhlCisgICAgICAgICAgbnVtYmVyIG9m IGRheXMgaXMgemVybywgaXQgaXMgb21pdHRlZC4gSWYgdGhlIG51bWJlciBvZiBkYXlzIGlzCisg ICAgICAgICAgbm9uemVybyBidXQgdGhlIGhvdXJzLCBtaW51dGVzLCBhbmQgc2Vjb25kcyBhcmUg YWxsIHplcm8sIHRoZQorICAgICAgICAgIHRpbWUgaXMgb21pdHRlZC4gaWYgdGhlIHNlY29uZHMg YXJlIHplcm8sIHRoZXkgYXJlIG9taXR0ZWQuCisKKyAgIFxmZGVsdGEyc2VjcyhkdCkKKyAgICAg ICAgICBDb252ZXJ0cyBhIGRlbHRhIHRpbWUgdG8gc2Vjb25kcy4gRm9yIGV4YW1wbGUsICIrMWQw MDowMDowMSIgdG8KKyAgICAgICAgICA4NjQwMS4gVmFsaWQgZGVsdGEgdGltZXMgbXVzdCBzdGFy dCB3aXRoIGEgKyBvciAtIHNpZ24uIERheXMgYXJlCisgICAgICAgICAgYWNjZXB0ZWQgYXMgdGlt ZSB1bml0cywgYnV0IG5vdCB5ZWFycywgbW9udGhzLCBvciB3ZWVrcy4gSWYgdGhlCisgICAgICAg ICAgcmVzdWx0IHdvdWxkIG92ZXJmbG93IGEgY29tcHV0ZXIgbG9uZyB3b3JkIChhcyB3b3VsZCBo YXBwZW4gd2l0aAorICAgICAgICAgIDMyLWJpdCBsb25nIHdvcmRzIHdoZW4gdGhlIG51bWJlciBv ZiBkYXlzIGlzIGdyZWF0ZXIgdGhhbgorICAgICAgICAgIDI0ODU0KSwgdGhlIGZ1bmN0aW9uIGZh aWxzLgorCisgICBISU5UOiBBbHRob3VnaCBLZXJtaXQgaGFzIGEgbnVtYmVyIG9mIGJ1aWx0LWlu IGRhdGUgYW5kIHRpbWUgdmFyaWFibGVzLAorICAgaXQgZG9lc24ndCBoYXZlIGEgc2luZ2xlIG9u ZSBzdWl0YWJsZSBmb3Igd3JpdGluZyBhIHRpbWVzdGFtcC4gRm9yIHRoaXMKKyAgIHlvdSB3b3Vs ZCBub3JtYWxseSB1c2Ugc29tZXRoaW5nIGxpa2UgIlx2KG5kYXRlKSBcdih0aW1lKSIuIEJ1dAor ICAgXGZjdnRkYXRlKCkgKHdpdGggbm8gYXJndW1lbnRzKSBpcyBlcXVpdmFsZW50OiBpdCByZXR1 cm5zIHRoZSBjdXJyZW50CisgICBkYXRlIGFuZCB0aW1lIGluIHl5eXltbWRkIGhoOm1tOnNzIGZv cm1hdCwgc3VpdGFibGUgZm9yIHRpbWUgc3RhbXBpbmcuCisKKzguMTMuNy4gRGF0ZS1UaW1lIFBy b2dyYW1taW5nIEV4YW1wbGVzCisKKyAgIEhlcmUncyBhIG1hY3JvIHRoYXQgY29udmVydHMgYW55 IGRhdGUtdGltZSB0byBVVEMsIHdoaWNoIHlvdSBtaWdodCB1c2UKKyAgIGlmIEMtS2VybWl0IGRp ZG4ndCBhbHJlYWR5IGhhdmUgYSBcZnV0Y2RhdGUoKSBmdW5jdGlvbjoKKworICBkZWZpbmUgdXRj ZGF0ZSB7CisgICAgICAubG9jYWwgOj0gXGZjdnRkYXRlKFwlKikgICAgICAgICAgICAgICAgIDsg MS4KKyAgICAgIC50bXAgOj0gXGZjdnRkYXRlKFxtKGxvY2FsKVVUQykgICAgICAgICAgOyAyLgor ICAgICAgLm9mZnNldCA6PSBcZmRpZmZkYXRlKFxtKGxvY2FsKSxcbSh0bXApKSA7IDMuCisgICAg ICAudXRjIDo9IFxmY3Z0ZGF0ZShcbShsb2NhbClcbShvZmZzZXQpKSAgIDsgNC4KKyAgICAgIHNo byBtYWMgdXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyA1LgorICB9CisKKyAgIEJy aWVmIGV4cGxhbmF0aW9uOiBMaW5lIDEgY29udmVydHMgdGhlIG1hY3JvIGFyZ3VtZW50LCBhIGZy ZWUtZm9ybWF0CisgICBkYXRlLXRpbWUsIHRvIHN0YW5kYXJkLWZvcm1hdCBsb2NhbCB0aW1lLiBM aW5lIDIgYXBwZW5kcyB0aGUgIlVUQyIKKyAgIHRpbWV6b25lIHRvIHRoZSBsb2NhbCB0aW1lIGFu ZCBjb252ZXJ0cyB0aGUgcmVzdWx0IHRvIGxvY2FsIHRpbWUuIEluCisgICBvdGhlciB3b3Jkcywg d2UgdGFrZSB0aGUgc2FtZSB0aW1lIGFzIHRoZSBsb2NhbCB0aW1lLCBidXQgcHJldGVuZCBpdCdz CisgICBVVEMgdGltZSwgYW5kIGNvbnZlcnQgaXQgdG8gbG9jYWwgdGltZS4gRm9yIGV4YW1wbGUs IGlmIE5ldyBZb3JrIHRpbWUKKyAgIGlzIDQgaG91cnMgYWhlYWQgb2YgVVRDLCB0aGVuIDY6MDBw bSBOZXcgWW9yayB0aW1lIGlzIDI6MDBwbSBVVEMuIExpbmUKKyAgIDMgZ2V0cyB0aGUgZGlmZmVy ZW5jZSBvZiB0aGUgdHdvIHJlc3VsdHMgKGUuZy4gIiswNDowMCIpLiBMaW5lIDQKKyAgIGFwcGVu ZHMgdGhlIGRpZmZlcmVuY2UgKGRlbHRhIHRpbWUpIHRvIHRoZSBsb2NhbCB0aW1lLCBhbmQgY29u dmVydHMgaXQKKyAgIGFnYWluLCB3aGljaCBhZGRzIChvciBzdWJ0cmFjdHMpIHRoZSBVVEMgb2Zm c2V0IHRvIHRoZSBnaXZlbiB0aW1lLiBMaW5lCisgICA1IGRpc3BsYXlzIHRoZSByZXN1bHQuCisK KyAgIEhlcmUncyBhIHNjcmlwdCB0aGF0IG9wZW5zIGEgd2ViIHBhZ2UsIGdldHMgaXRzIGhlYWRl cnMgaW50byBhbiBhcnJheSwKKyAgIHNjYW5zIHRoZSBhcnJheSBmb3IgdGhlICJMYXN0LU1vZGlm aWVkOiIgaGVhZGVyLCBhbmQgaW50ZXJwcmV0cyBpdDoKKyAgaHR0cCBvcGVuIHd3dy5jb2x1bWJp YS5lZHUKKyAgaWYgZmFpbCBzdG9wIDEgSFRUUCBPUEVOIGZhaWxlZAorICBodHRwIC9hcnJheTph IGhlYWQgaW5kZXguaHRtbCAvZGV2L251bGwKKyAgaWYgZmFpbCBzdG9wIDEgSFRUUCBHRVQgZmFp bGVkCisgIHNob3cgYXJyYXkgYQorICBmb3IgXCVpIDEgXGZkaW0oJmEpIDEgeworICAgICAgLlwl eCA6PSBcZmluZGV4KDosXCZhW1wlaV0pCisgICAgICBpZiBub3QgXCV4IGNvbnRpbnVlCisgICAg ICAudGFnIDo9IFxmbGVmdChcJmFbXCVpXSxcJXgtMSkKKyAgICAgIC52YWwgOj0gXGZsdHJpbShc ZnN1YnN0cihcJmFbXCVpXSxcJXgrMSkpCisgICAgICBpZiAoIGVxICJcbSh0YWcpIiAiTGFzdC1N b2RpZmllZCIgKSB7CisgICAgICAgICAgZWNobyBIVFRQIERhdGU6IFxtKHZhbCkKKyAgICAgICAg ICAucmRhdGUgOj0gXGZjdnRkYXRlKFxtKHZhbCkpCisgICAgICAgICAgZWNobyB7U3RhbmRhcmQg RGF0ZSAobG9jYWwpOiBcbShyZGF0ZSl9CisgICAgICAgICAgZWNobyB7U3RhbmRhcmQgRGF0ZSAo VVRDKTogICBcZnV0Y2RhdGUoXG0ocmRhdGUpKX0KKyAgICAgICAgICBicmVhaworICAgICAgfQor ICB9CisgIGh0dHAgY2xvc2UKKworICAgVGhlIHJlc3VsdDoKKworICBIVFRQIERhdGU6IE1vbiwg MTMgQXVnIDIwMDEgMjA6MDU6NDIgR01UCisgIFN0YW5kYXJkIERhdGUgKGxvY2FsKTogMjAwMTA4 MTMgMTY6MDU6NDIKKyAgU3RhbmRhcmQgRGF0ZSAoVVRDKTogICAyMDAxMDgxMyAyMDowNTo0Mgor CisgICBBcyB5b3UgY2FuIHNlZSwgS2VybWl0IGhhZCBubyB0cm91YmxlIGRlY29kaW5nIHRoZSBk YXRlLXRpbWUtc3RyaW5nCisgICBmcm9tIHRoZSB3ZWJzaXRlLCBjb252ZXJ0aW5nIHRvIGxvY2Fs IHRpbWUsIGFuZCBjb252ZXJ0aW5nIGJhY2sgdG8gVVRDCisgICB3aXRoIG5vIGNvbmZsaWN0cyBv ciBsb3NzIG9mIGluZm9ybWF0aW9uLiBJZiBpdCBoYWQgYmVlbiBpbiBhbnkgb3RoZXIKKyAgIGtu b3duIGZvcm1hdCwgdGhlIHJlc3VsdCB3b3VsZCBoYXZlIGJlZW4gdGhlIHNhbWUuCisKKyAgIE5v dyBzdXBwb3NlIHdlIHdhbnQgdG8gZG93bmxvYWQgdGhlIHdlYiBwYWdlIG9ubHkgaWYgaXQgaXMg bmV3ZXIgdGhhbgorICAgb3VyIGxvY2FsIGNvcHkuIFRoZSBcZmRhdGUoZmlsZW5hbWUpIGZ1bmN0 aW9uICh3aGljaCByZXR1cm5zIHRoZQorICAgbW9kaWZpY2F0aW9uIGRhdGUtdGltZSBvZiB0aGUg Z2l2ZW4gZmlsZSkgYW5kIHRoZSBuZXcgXGZjbXBkYXRlcygpCisgICBmdW5jdGlvbiBtYWtlIGl0 IGVhc3kuIEluc2VydCB0aGUgZm9sbG93aW5nIGp1c3QgYmVmb3JlIHRoZSBCUkVBSworICAgc3Rh dGVtZW50OgorCisgIGlmICggPCAwIFxmY21wZGF0ZXMoXG0ocmRhdGUpLFxmZGF0ZShpbmRleC5o dG1sKSkgKSB7CisgICAgIGVjaG8gR0VUVElORyBpbmRleC5odG1sLi4uCisgICAgIGh0dHAgZ2V0 IGluZGV4Lmh0bWwgaW5kZXguaHRtbAorICAgICBpZiBzdWNjZXNzIGVjaG8gSFRUUCBHRVQgT0sK KyAgfSBlbHNlIHsKKyAgICAgZWNobyBpbmRleC5odG1sOiBubyB1cGRhdGUgbmVlZGVkCisgIH0K KyAgaHR0cCBjbG9zZQorICBleGl0CisKKyAgIFRoaXMgc2F5cywgImlmIDAgaXMgbGVzcyB0aGFu IHRoZSBjb21wYXJpc29uIG9mIHRoZSByZW1vdGUgZmlsZSBkYXRlCisgICBhbmQgdGhlIGxvY2Fs IGZpbGUgZGF0ZSwgZ2V0IHRoZSByZW1vdGUgZmlsZSwgb3RoZXJ3aXNlIHNraXAgaXQuIiBBbmQK KyAgIGl0IGF1dG9tYXRpY2FsbHkgcmVjb25jaWxlcyB0aGUgdGltZS16b25lIGRpZmZlcmVuY2Ug KGlmIGFueSkuCisKKyAgIEl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBleHRlbmQgdGhp cyBzY3JpcHQgaW50byBhCisgICBnZW5lcmFsLXB1cnBvc2Ugd2Vic2l0ZSB1cGRhdGVyLCBidXQg dW5mb3J0dW5hdGVseSBIVFRQIHByb3RvY29sCisgICBkb2Vzbid0IHByb3ZpZGUgYW55IG1lY2hh bmlzbSBmb3IgdGhlIGNsaWVudCB0byBhc2sgdGhlIHNlcnZlciBmb3IgYQorICAgbGlzdCBvZiBm aWxlcywgcmVjdXJzaXZlIG9yIG90aGVyd2lzZS4KKworICAgWyBbNDgzXVRvcCBdIFsgWzQ4NF1D b250ZW50cyBdIFsgWzQ4NV1DLUtlcm1pdCBIb21lIF0gWyBbNDg2XUtlcm1pdAorICAgSG9tZSBd CisKKzguMTQuIFRyYXBwaW5nIEtleWJvYXJkIEludGVycnVwdGlvbgorCisgICBOb3JtYWxseSB3 aGVuIHlvdSB0eXBlIEN0cmwtQyBhbmQgS2VybWl0IGlzIGluIGNvbW1hbmQgbW9kZSAoYXMgb3Bw b3NlZAorICAgdG8gQ09OTkVDVCBtb2RlKSB3aXRoIENPTU1BTkQgSU5URVJSVVBUSU9OIE9OIChh cyBpdCBpcyB1bmxlc3MgeW91IGhhdmUKKyAgIHNldCBpdCBPRkYpLCBLZXJtaXQgaW50ZXJydXB0 cyBhbnkgY29tbWFuZCB0aGF0IGlzIGN1cnJlbnRseSBpbgorICAgcHJvZ3Jlc3MsIGFuZCBpZiBh IGNvbW1hbmQgZmlsZSBvciBtYWNybyBpcyBleGVjdXRpbmcsIHJvbGxzIHRoZQorICAgY29tbWFu ZCBzdGFjayBiYWNrIHRvIHRvcCBsZXZlbCwgY2xvc2luZyBhbGwgb3BlbiBjb21tYW5kIGZpbGVz LAorICAgZGVhY3RpdmF0aW5nIGFsbCBtYWNyb3MsIGRlYWxsb2NhdGluZyBhbGwgbG9jYWwgdmFy aWFibGVzIGFuZCBhcnJheXMsCisgICBhbmQgbGVhdmluZyB5b3UgYXQgdGhlIGNvbW1hbmQgcHJv bXB0LgorCisgICBTdXBwb3NlLCBob3dldmVyLCB5b3Ugd2FudCBjZXJ0YWluIGFjdGlvbnMgdG8g b2NjdXIgd2hlbiBhIHNjcmlwdCBpcworICAgaW50ZXJydXB0ZWQ7IGZvciBleGFtcGxlLCBjbG9z aW5nIG9wZW4gZmlsZXMsIHdyaXRpbmcgbG9nIGVudHJpZXMsIG9yCisgICBkaXNwbGF5aW5nIHN1 bW1hcnkgcmVzdWx0cy4gWW91IGNhbiBkbyB0aGlzIGJ5IGRlZmluaW5nIGEgbWFjcm8gbmFtZWQK KyAgIE9OX0NUUkxDLiBXaGVuIEN0cmwtQyBpcyBkZXRlY3RlZCwgYW5kIGEgbWFjcm8gd2l0aCB0 aGlzIG5hbWUgaXMKKyAgIGRlZmluZWQsIEtlcm1pdCBleGVjdXRlcyBpdCBmcm9tIHRoZSBjdXJy ZW50IGNvbW1hbmQgbGV2ZWwsIHRodXMgZ2l2aW5nCisgICBpdCBmdWxsIGFjY2VzcyB0byB0aGUg ZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGludGVycnVwdGlvbiBvY2N1cnJlZCwKKyAgIGluY2x1 ZGluZyBsb2NhbCB2YXJpYWJsZXMgYW5kIG9wZW4gZmlsZXMuIE9ubHkgd2hlbiB0aGUgT05fQ1RS TEMgbWFjcm8KKyAgIGNvbXBsZXRlcyBleGVjdXRpb24gaXMgdGhlIGNvbW1hbmQgc3RhY2sgcm9s bGVkIGJhY2sgdG8gdG9wIGxldmVsLgorCisgICBPbmNlIHRoZSBPTl9DVFJMQyBtYWNybyBpcyBk ZWZpbmVkLCBpdCBjYW4gYmUgZXhlY3V0ZWQgb25seSBvbmNlLiBUaGlzCisgICBpcyB0byBwcmV2 ZW50IHJlY3Vyc2lvbiBpZiB0aGUgdXNlciB0eXBlcyBDdHJsLUMgd2hpbGUgdGhlIE9OX0NUUkxD CisgICBtYWNybyBpcyBleGVjdXRpbmcuIElmIHlvdSB0eXBlIEN0cmwtQyB3aGlsZSB0aGUgQ3Ry bC1DIG1hY3JvIGlzCisgICBhY3RpdmUsIHRoaXMgZG9lcyBub3Qgc3RhcnQgYSBuZXcgY29weSBv ZiBPTl9DVFJMQzsgcmF0aGVyLCBpdCByZXR1cm5zCisgICB0byB0aGUgdG9wLWxldmVsIGNvbW1h bmQgcHJvbXB0LiBBZnRlciB0aGUgT05fQ1RSTEMgbWFjcm8gcmV0dXJucywgaXQKKyAgIGhhcyBi ZWVuIHJlbW92ZWQgZnJvbSB0aGUgbWFjcm8gdGFibGUgc28gaWYgeW91IHdhbnQgdG8gdXNlIGl0 IGFnYWluIG9yCisgICBpbnN0YWxsIGEgZGlmZmVyZW50IEN0cmwtQyB0cmFwLCB5b3UgbXVzdCBl eGVjdXRlIGEgbmV3IERFRklORSBPTl9DVFJMQworICAgY29tbWFuZC4gSW4gYW55IGNhc2UsIGFz IGFsd2F5cyB3aGVuIHlvdSBpbnRlcnJ1cHQgYSBzY3JpcHQgd2l0aAorICAgQ3RybC1DLCBpdHMg Y29tcGxldGlvbiBzdGF0dXMgaXMgRkFJTFVSRS4KKworICAgTm9ybWFsbHkgdGhlIE9OX0NUUkxD IG1hY3JvIHdvdWxkIGJlIGRlZmluZWQgaW4gdGhlIGNvbW1hbmQgZmlsZSBvcgorICAgbWFjcm8g dG8gd2hpY2ggaXQgYXBwbGllcywgYW5kIHNob3VsZCBiZSBkZWNsYXJlZCBMT0NBTC4gVGhpcyB3 YXksIGlmCisgICB0aGUgY29tbWFuZCBmaWxlIG9yIG1hY3JvIGNvbXBsZXRlcyBzdWNjZXNzZnVs bHkgd2l0aG91dCBiZWluZworICAgaW50ZXJydXB0ZWQsIHRoZSBPTl9DVFJMQyBkZWZpbml0aW9u IGRpc2FwcGVhcnMgYXV0b21hdGljYWxseS4KKyAgIE90aGVyd2lzZSB0aGUgZGVmaW5pdGlvbiB3 b3VsZCBzdGlsbCBiZSB2YWxpZCBhbmQgdGhlIG1hY3JvIHdvdWxkIGJlCisgICBleGVjdXRlZCwg cHJvYmFibHkgb3V0IG9mIGNvbnRleHQsIHRoZSBuZXh0IHRpbWUgeW91IHR5cGVkIEN0cmwtQy4K KworICAgSGVyZSdzIGEgc2ltcGxlIGV4YW1wbGUgb2YgYSBjb21tYW5kIGZpbGUgdGhhdCBzZXRz IGEgQ3RybC1DIHRyYXAgZm9yCisgICBpdHNlbGY6CisKKyAgbG9jYWwgb25fY3RybGMgICAgICAg ICAgICAgIDsgTWFrZSBDdHJsLUMgdHJhcCBsb2NhbCB0byB0aGlzIGNvbW1hbmQgZmlsZS4KKyAg ZGVmaW5lIG9uX2N0cmxjIHsgICAgICAgICAgIDsgRGVmaW5lIHRoZSBPTl9DVFJMQyBtYWNyby4K KyAgICAgIGVjaG8gSW50ZXJydXB0ZWQgYXQgXHYodGltZSkuCisgICAgICBlY2hvIEl0ZXJhdGlv bnM6IFwlbgorICB9CisgIHhlY2hvIFR5cGUgQ3RybC1DIHRvIHF1aXQKKyAgZm9yIFwlbiAxIDk5 OSAxIHsgICAgICAgICAgIDsgUHJpbnRzIGEgZG90IGV2ZXJ5IHNlY29uZCB1bnRpbCBpbnRlcnJ1 cHRlZC4KKyAgICAgIHNsZWVwIDEKKyAgICAgIHhlY2hvIC4KKyAgfQorICBlY2hvIEZpbmlzaGVk IG5vcm1hbGx5IGF0IFx2KHRpbWUpIDsgR2V0IGhlcmUgb25seSBpZiBub3QgaW50ZXJydXB0ZWQu CisgIGRlY3JlbWVudCBcJW4KKyAgZWNobyBJdGVyYXRpb25zOiBcJW4KKworICAgVGhpcyBwcmlu dHMgYSBzdW1tYXJ5IG5vIG1hdHRlciB3aGV0aGVyIGl0IGNvbXBsZXRlcyBub3JtYWxseSBvciBp cworICAgaW50ZXJydXB0ZWQgZnJvbSB0aGUga2V5Ym9hcmQuIEluIGJvdGggY2FzZXMgdGhlIHRy YXAgaXMgYXV0b21hdGljYWxseQorICAgcmVtb3ZlZCBhZnRlcndhcmRzLgorCisgICBGb3IgYW4g ZXhhbXBsZSBvZiBob3cgdG8gdXNlIE9OX0NUUkxDIHRvIGRlYnVnIHNjcmlwdHMsIHNlZQorICAg WzQ4N11TZWN0aW9uIDguMS4KKworICAgWyBbNDg4XVRvcCBdIFsgWzQ4OV1Db250ZW50cyBdIFsg WzQ5MF1DLUtlcm1pdCBIb21lIF0gWyBbNDkxXUtlcm1pdAorICAgSG9tZSBdCisKKzkuIFMtRVhQ UkVTU0lPTlMKKworICAgVGhpcyBzZWN0aW9uIGlzIHByaW1hcmlseSBmb3IgdGhvc2Ugd2hvIHdh bnQgdG8gd3JpdGUKKyAgIGNhbGN1bGF0aW9uLWludGVuc2l2ZSBzY3JpcHRzLCBlc3BlY2lhbGx5 IGlmIHRoZXkgcmVxdWlyZQorICAgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYywgYW5kL29yIGZv ciB0aG9zZSB3aG8gYXJlIGZhbWlsaWFyIHdpdGggdGhlCisgICBMSVNQIHByb2dyYW1taW5nIGxh bmd1YWdlLgorCisgICBFdmVyIHNpbmNlIEMtS2VybWl0IHZlcnNpb24gNSB3YXMgcmVsZWFzZWQg aW4gMTk4OCwgc2NyaXB0aW5nIGhhcyBiZWVuCisgICBvbmUgb2YgaXRzIG1ham9yIGF0dHJhY3Rp b25zLCBhbmQgYXJpdGhtZXRpYyBpcyBhIGtleSBwYXJ0IG9mIGl0LgorICAgVmVyc2lvbnMgNSBh bmQgNiBpbmNsdWRlZCBpbnRlZ2VyIGFyaXRobWV0aWMgb25seSwgdXNpbmcgdHJhZGl0aW9uYWwK KyAgIGFsZ2VicmFpYyBub3RhdGlvbiwgZS5nLjoKKworICBlY2hvIFxmZXZhbHVhdGUoMyooMis3 KS8yKQorICAxMworCisgICBDLUtlcm1pdCA3LjAgYWRkZWQgc3VwcG9ydCBmb3IgZmxvYXRpbmct cG9pbnQgYXJpdGhtZXRpYywgYnV0IG9ubHkKKyAgIHRocm91Z2ggZnVuY3Rpb24gY2FsbHM6CisK KyAgZWNobyBcZmZwZGl2aWRlKFxmZnBtdWx0aXBseSgzLjAsXGZmcGFkZCgyLjAsNy4wKSksMi4w KQorICAxMy41CisKKyAgIEMtS2VybWl0IDguMCBpbnRyb2R1Y2VzIGEgdGhpcmQgZm9ybSBvZiBh cml0aG1ldGljIHRoYXQgdHJlYXRzIGludGVnZXJzCisgICBhbmQgZmxvYXRpbmctcG9pbnQgbnVt YmVycyB1bmlmb3JtbHksIGlzIGVhc2llciB0byByZWFkIGFuZCB3cml0ZSwgYW5kCisgICBleGVj dXRlcyB2ZXJ5IHF1aWNrbHk6CisKKyAgKC8gKCogMyAoKyAyIDcpKSAyKQorICAxMy41CisKKyAg IEJ1dCBmaXJzdCBzb21lIGJhY2tncm91bmQuCisKKyAgIFRoZSBLZXJtaXQgY29tbWFuZCBhbmQg c2NyaXB0aW5nIGxhbmd1YWdlIGRpZmZlcnMgZnJvbSB0cnVlIHByb2dyYW1taW5nCisgICBsYW5n dWFnZXMgKHN1Y2ggYXMgQyBvciBGb3J0cmFuKSBpbiBtYW55IHdheXM7IG9uZSBvZiB0aGUgbW9z dAorICAgcHJvbWluZW50IGRpZmZlcmVuY2VzIGlzIHRoZSB3YXkgaW4gd2hpY2ggdmFyaWFibGVz IGFyZSBkaXN0aW5ndWlzaGVkCisgICBmcm9tIGNvbnN0YW50cy4gSW4gYSBjb21tYW5kIGxhbmd1 YWdlLCB3b3JkcyBhcmUgdGFrZW4gbGl0ZXJhbGx5OyBmb3IKKyAgIGV4YW1wbGUsIHRoZSBVbml4 IHNoZWxsOgorCisgIGNhdCBmb28uYmFyCisKKyAgIGRpc3BsYXlzIHRoZSBmaWxlIG5hbWVkIGZv by5iYXIuIFdoZXJlYXMgaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZSBsaWtlCisgICBDLCB3b3Jk cyBhcmUgYXNzdW1lZCB0byBiZSB2YXJpYWJsZXM6CisKKyAgcyA9IGZvby5iYXI7ICAgIC8qIEFz c2lnbnMgdGhlIHZhbHVlIG9mIGZvby5iYXIgdG8gdGhlIHZhcmlhYmxlIHMgKi8KKworICAgVG8g bWFrZSBhIHByb2dyYW1taW5nIGxhbmd1YWdlIHRha2Ugd29yZHMgbGl0ZXJhbGx5LCB5b3UgaGF2 ZSB0byBxdW90ZQorICAgb3IgImVzY2FwZSIgdGhlbToKKworICBzID0gImZvby5iYXIiOyAgLyog QXNzaWducyBhIHBvaW50ZXIgdG8gdGhlIHN0cmluZyAiZm9vLmJhciIgdG8gdGhlIHZhcmlhYmxl IHMKKyAqLworCisgICBUaGUgb3Bwb3NpdGUgaG9sZHMgZm9yIGNvbW1hbmQgbGFuZ3VhZ2VzOiB0 byBnZXQgdGhlbSB0byB0cmVhdCBhIHdvcmQKKyAgIGFzIGEgdmFyaWFibGUgcmF0aGVyIHRoYW4g YSBjb25zdGFudCwgeW91IGhhdmUgdG8gZXNjYXBlIHRoZW0uIEZvcgorICAgZXhhbXBsZSwgaW4g dGhlIFVuaXggc2hlbGw6CisKKyAgZm9vPTEyMyAgICAgICAgIDsgQXNzaWduIHZhbHVlIDEyMyB0 byB2YXJpYWJsZSBmb28uCisgIGVjaG8gZm9vICAgICAgICA7IFByaW50cyAiZm9vIgorICBlY2hv ICRmb28gICAgICAgOyBQcmludHMgIjEyMyIKKworICAgQW5kIGluIEtlcm1pdDoKKworICBkZWZp bmUgZm9vIDEyMyAgOyBBc3NpZ24gdmFsdWUgMTIzIHRvIHZhcmlhYmxlIGZvby4KKyAgZWNobyAx MjMgICAgICAgIDsgVGhpcyBwcmludHMgIjEyMyIuCisgIGVjaG8gZm9vICAgICAgICA7IFRoaXMg cHJpbnRzICJmb28iLgorICBlY2hvIFxtKGZvbykgICAgOyBUaGlzIHByaW50cyAiMTIzIi4KKwor ICAgSW4gb3RoZXIgd29yZHMsIGNoYXJhY3RlciBzdHJpbmdzIChzdWNoIGFzICJmb28iIGFib3Zl KSBhcmUgaW50ZXJwcmV0ZWQKKyAgIGFzIGxpdGVyYWwgc3RyaW5ncywgcmF0aGVyIHRoYW4gdmFy aWFibGUgbmFtZXMsIGV4Y2VwdCBpbiBzcGVjaWFsCisgICBjb21tYW5kcyBsaWtlIERFRklORSB0 aGF0IGRlYWwgc3BlY2lmaWNhbGx5IHdpdGggdmFyaWFibGUgbmFtZXMgKG9yIGluCisgICBudW1l cmljIGNvbnRleHRzIGFzIGV4cGxhaW5lZCBpbiBbNDkyXVNlY3Rpb24gOC4yKS4gVGhlIHNwZWNp YWwKKyAgICJlc2NhcGUiIGNoYXJhY3RlciAoZG9sbGFyIHNpZ24gKCQpIGZvciB0aGUgc2hlbGws IGJhY2tzbGFzaCAoXCkgZm9yCisgICBLZXJtaXQpIGluZGljYXRlcyB0aGF0IGEgdmFyaWFibGUg aXMgdG8gYmUgcmVwbGFjZWQgYnkgaXRzIHZhbHVlLgorCisgICBUaGUgcmVxdWlyZW1lbnQgdG8g ZXNjYXBlIHZhcmlhYmxlIG5hbWVzIGluIGNvbW1hbmQgbGFuZ3VhZ2VzIG5vcm1hbGx5CisgICBk b2VzIG5vdCBpbXBvc2UgYW55IHNwZWNpYWwgaGFyZHNoaXAsIGJ1dCBjYW4gYWRkIGEgY29uc2lk ZXJhYmxlCisgICBub3RhdGlvbmFsIGJ1cmRlbiB0byBhcml0aG1ldGljIGV4cHJlc3Npb25zLCB3 aGljaCBhcmUgdHlwaWNhbGx5IGZ1bGwKKyAgIG9mIHZhcmlhYmxlcy4gRXNwZWNpYWxseSBpbiBL ZXJtaXQgd2hlbiBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZQorICAgaW52b2x2ZWQsIHdoZXJl IHlvdSBtdXN0IHVzZSBzcGVjaWFsIFxmZnB4eHgoKSBmdW5jdGlvbnMsIGUuZy4KKyAgICJcZmZw YWRkKFxtKGEpLFxtKGIpKSIgcmF0aGVyIHRoYW4gdGhlIHNpbXBsZSAiKyIgb3BlcmF0b3IgdG8g YWRkIHR3bworICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycyB0b2dldGhlciwgYmVjYXVzZSB0aGUg b3JpZ2luYWwgYXJpdGhtZXRpYworICAgaGFuZGxlciBkb2Vzbid0IHN1cHBvcnQgZmxvYXRpbmcg cG9pbnQgKHRoaXMgbWlnaHQgY2hhbmdlIGluIHRoZQorICAgZnV0dXJlKS4gVG8gaWxsdXN0cmF0 ZSwgdGhlIGdlbmVyYWwgZm9ybXVsYSBmb3IgdGhlIGFyZWEgb2YgYSB0cmlhbmdsZQorICAgaXM6 CisKKyAgc3FydChzICogKHMgLSBhKSAqIChzIC0gYikgKiAocyAtIGMpKQorCisgICB3aGVyZSBh LCBiLCBhbmQgYyBhcmUgdGhlIGxlbmd0aHMgb2YgdGhlIHRyaWFuZ2xlJ3MgdGhyZWUgc2lkZXMg YW5kOgorCisgIHMgPSAoYSArIGIgKyBjKSAvIDIKKworICAgRXhjZXB0IGluIHNwZWNpYWwgY2Fz ZXMgKGUuZy4gYSA9IDMsIGIgPSA0LCBjID0gNSksIHRoZSByZXN1bHQgaGFzIGEKKyAgIGZyYWN0 aW9uYWwgcGFydCBzbyB0aGUgY29tcHV0YXRpb24gbXVzdCBiZSBkb25lIHVzaW5nIGZsb2F0aW5n LXBvaW50CisgICBhcml0aG1ldGljLiBXZSBjYW4gY3JlYXRlIGEgS2VybWl0IDcuMCBmdW5jdGlv biBmb3IgdGhpcyBhcyBmb2xsb3dzOgorCisgIGRlZiBhcmVhIHsKKyAgICAgIGxvY2FsIHMgdDEg dDIgdDMKKyAgICAgIGFzc2lnbiBzIFxmZnBkaXYoXGZmcGFkZChcZmZwYWRkKFwlMSxcJTIpLFwl MyksMi4wKQorICAgICAgYXNzaWduIHQxIFxmZnBzdWIoXG0ocyksXCUxKQorICAgICAgYXNzaWdu IHQyIFxmZnBzdWIoXG0ocyksXCUyKQorICAgICAgYXNzaWduIHQzIFxmZnBzdWIoXG0ocyksXCUz KQorICAgICAgcmV0dXJuIFxmZnBzcXJ0KFxmZnBtdWwoXG0ocyksXGZmcG11bChcbSh0MSksXGZm cG11bChcbSh0MiksXG0odDMpKSkpKQorICB9CisKKyAgIEJ1dCBhcyB5b3UgY2FuIHNlZSwgdGhp cyBpcyByYXRoZXIgY3VtYmVyc29tZS4gTm90ZSwgaW4gcGFydGljdWxhciwKKyAgIHRoYXQgYXJp dGhtZXRpYyBmdW5jdGlvbnMgbGlrZSBcZmZwYWRkKCksIFxmZnBtdWwoKSwgZXRjLCB0YWtlIGV4 YWN0bHkKKyAgIHR3byBvcGVyYW5kcyAobGlrZSB0aGVpciBzeW1ib2xpYyBjb3VudGVycGFydHMg KyBhbmQgKiksIHNvIG9idGFpbmluZworICAgdGhlIHByb2R1Y3Qgb2YgdGhyZWUgb3IgbW9yZSBu dW1iZXJzIChhcyB3ZSBkbyBpbiB0aGlzIGNhc2UpIGlzCisgICBhd2t3YXJkLgorCisgICBVc2lu ZyB0aGUgYWx0ZXJuYXRpdmUgUy1FeHByZXNzaW9uIG5vdGF0aW9uLCB3ZSBjYW4gcmVkdWNlIHRo aXMgdG8gYQorICAgZm9ybSB0aGF0IGlzIGJvdGggZWFzaWVyIHRvIHJlYWQgYW5kIGV4ZWN1dGVz IGZhc3RlciAodGhlIGRldGFpbHMgYXJlCisgICBleHBsYWluZWQgbGF0ZXIpOgorCisgIGRlZiBu ZXdhcmVhIHsKKyAgICAgIChsZXQgcyAoLyAoKyBcJTEgXCUyIFwlMykgMi4wKSkKKyAgICAgIChz cXJ0ICgqIHMgKC0gcyBcJTEpICgtIHMgXCUyKSAoLSBzIFwlMykpKQorICB9CisKKyAgIEluIGJv dGggZXhhbXBsZXMsIHRoZSBcJTEuLjMgdmFyaWFibGVzIGFyZSB0aGUgbm9ybWFsIEtlcm1pdCBt YWNybworICAgYXJndW1lbnRzLCByZWZlcmVuY2VkIGJ5IHRoZSBub3JtYWwgZXNjYXBpbmcgbWVj aGFuaXNtLiBGb3IgaW5jcmVhc2VkCisgICByZWFkYWJpbGl0eSwgd2UgY2FuIGFsc28gYXNzaWdu IHRoZSBtYWNybyBhcmd1bWVudHMgXCUxLCBcJTIsIGFuZCBcJTMKKyAgIHRvIHRoZSBsZXR0ZXJz IGEsIGIsIGFuZCBjIGNvcnJlc3BvbmRpbmcgdG8gb3VyIGZvcm11bGE6CisKK2RlZiBuZXdhcmVh IHsKKyAgICAobGV0IGEgXCUxIGIgXCUyIGMgXCUzKQorICAgIChsZXQgcyAoLyAoKyBhIGIgYykg Mi4wKSkKKyAgICAoc3FydCAoKiBzICgtIHMgYSkgKC0gcyBiKSAoLSBzIGMpKSkKK30KKworICAg QW5kIG5vdyB0aGUgS2VybWl0IGZ1bmN0aW9uIHJlYWRzIGFsbW9zdCBsaWtlIHRoZSBvcmlnaW5h bCBmb3JtdWxhLgorICAgSGVyZSBLZXJtaXQgYmVoYXZlcyBtb3JlIGxpa2UgYSByZWd1bGFyIHBy b2dyYW1taW5nIGxhbmd1YWdlLiBJbiBhbgorICAgUy1FeHByZXNzaW9uLCBtYWNybyBuYW1lcyBu ZWVkIG5vdCBiZSBlc2NhcGVkIHdoZW4gdGhleSBhcmUgdXNlZCBhcyB0aGUKKyAgIG5hbWVzIG9m IG51bWVyaWMgdmFyaWFibGVzLgorCisgICBbIFs0OTNdVG9wIF0gWyBbNDk0XUNvbnRlbnRzIF0g WyBbNDk1XUMtS2VybWl0IEhvbWUgXSBbIFs0OTZdS2VybWl0CisgICBIb21lIF0KKworOS4xLiBX aGF0IGlzIGFuIFMtRXhwcmVzc2lvbj8KKworICAgVGhlIFMtRXhwcmVzc2lvbiBjb25jZXB0IGlz IGJvcnJvd2VkIGZyb20gdGhlIExpc3AgcHJvZ3JhbW1pbmcKKyAgIGxhbmd1YWdlLiAiUy1FeHBy ZXNzaW9uIiBpcyBzaG9ydCBmb3IgU3ltYm9saWMgRXhwcmVzc2lvbiAoaXRzZWxmCisgICBzb21l dGltZXMgc2hvcnRlbmVkIHRvIFNFWFApLiBTLUV4cHJlc3Npb25zIHByb3ZpZGUgYSBraW5kIG9m CisgICBBbHRlcm5hdGl2ZSBNaW5pLVVuaXZlcnNlIHdpdGhpbiB0aGUgS2VybWl0IGNvbW1hbmQg bGFuZ3VhZ2Ugd2hlbiB0aGUKKyAgIHJlZ3VsYXIgcnVsZXMgZG9uJ3QgYXBwbHksIGEgdW5pdmVy c2UgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMuCisKKyAgIEMtS2VybWl0IGRvZXMgbm90IHByZXRl bmQgdG8gYmUgYSBmdWxsIExpc3AgaW50ZXJwcmV0ZXI7IG9ubHkgdGhlCisgICBhcml0aG1ldGlj IHBhcnRzIG9mIExpc3AgaGF2ZSBiZWVuIGluY29ycG9yYXRlZDogUy1FeHByZXNzaW9ucyB0aGF0 CisgICBvcGVyYXRlIG9uIG51bWJlcnMgYW5kIHJldHVybiBudW1lcmljIHZhbHVlcyAocGx1cyBl eHRlbnNpYmlsaXR5CisgICBmZWF0dXJlcyBkZXNjcmliZWQgaW4gWzQ5N11TZWN0aW9uIDkuOCwg d2hpY2ggYWxsb3cgc29tZSBkZWdyZWUgb2YKKyAgIHN0cmluZyBwcm9jZXNzaW5nKS4KKworICAg QW4gUy1FeHByZXNzaW9uIGlzIGEgbGlzdCBvZiB6ZXJvIG9yIG1vcmUgaXRlbXMsIHNlcGFyYXRl ZCBieSBzcGFjZXMsCisgICB3aXRoaW4gcGFyZW50aGVzZXMuIEV4YW1wbGVzOgorCisgICgpCisg ICgxKQorICAoYSkKKyAgKCsgYSAxKQorICAoKiAyIGEgYikKKworICAgSWYgdGhlIFMtRXhwcmVz c2lvbiBpcyBlbXB0eSwgaXQgaGFzIHRoZSBOSUwgKGVtcHR5KSB2YWx1ZS4gSWYgaXQgaXMKKyAg IG5vdCBlbXB0eSBhbmQgdGhlIGZpcnN0IGl0ZW0gaXMgYW4gb3BlcmF0b3IgKHN1Y2ggYXMgKyBv ciAqKSwgdGhlcmUgY2FuCisgICBiZSB6ZXJvIG9yIG1vcmUgc3Vic2VxdWVudCBpdGVtcywgY2Fs bGVkIHRoZSBvcGVyYW5kczoKKworICAoKyAxIDIpCisKKyAgIEhlcmUgdGhlIG9wZXJhdG9yIGlz ICIrIiBhbmQgdGhlIG9wZXJhbmRzIGFyZSAiMSIgYW5kICIyIiwgYW5kIHRoZQorICAgdmFsdWUg b2YgdGhlIFMtRXhwcmVzc2lvbiBpcyB0aGUgdmFsdWUgb2YgdGhlIG9wZXJhdGlvbiAoaW4gdGhp cyBjYXNlCisgICAzKS4gVGhlIG9wZXJhdG9yIGFsd2F5cyBjb21lcyBmaXJzdCwgd2hpY2ggaXMg ZGlmZmVyZW50IGZyb20gdGhlCisgICBmYW1pbGlhciBhbGdlYnJhaWMgbm90YXRpb247IHRoaXMg YmVjYXVzZSBTLUV4cHJlc3Npb24gb3BlcmF0b3JzIGNhbgorICAgaGF2ZSBkaWZmZXJlbnQgbnVt YmVycyBvZiBvcGVyYW5kczoKKworICAoKyAxKQorICAoKyAxIDIpCisgICgrIDEgMiAzIDQgNSA2 IDcgOCA5KQorCisgICBJZiB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgUy1FeHByZXNzaW9uIGlzIG5v dCBhbiBvcGVyYXRvciwgdGhlbiBpdCBtdXN0CisgICBiZSBhIHZhcmlhYmxlIG9yIGEgbnVtYmVy IChvciBhIG1hY3JvOyBzZWUgWzQ5OF1TZWN0aW9uIDkuOCksIGFuZCB0aGUKKyAgIFMtRXhwcmVz c2lvbiBjYW4gb25seSBjb250YWluIG9uZSBpdGVtOyBpbiB0aGlzIGNhc2UsIHRoZQorICAgUy1F eHByZXNzaW9uJ3MgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBvciBudW1iZXI6 CisKKyAgKGEpCisgICgzKQorCisgICBPcGVyYW5kcyBjYW4gYmUgbnVtYmVycywgdmFyaWFibGVz IHRoYXQgaGF2ZSBudW1lcmljIHZhbHVlcywgZnVuY3Rpb25zCisgICB0aGF0IHJldHVybiBudW1i ZXJzLCBvciBvdGhlciBTLUV4cHJlc3Npb25zLiBUbyBpbGx1c3RyYXRlIGFuCisgICBTLUV4cHJl c3Npb24gd2l0aGluIGFuIFMtRXhwcmVzc2lvbiwgb2JzZXJ2ZSB0aGF0OgorCisgICgrIDEgMikK KworICAgaXMgZXF1aXZhbGVudCB0byBhbnkgb2YgdGhlIGZvbGxvd2luZyAocGx1cyBhbiBpbmZp bml0ZSBudW1iZXIgb2YKKyAgIG90aGVycyk6CisKKyAgKCsgMSAoKyAxIDEpKQorICAoKyAoLSAz IDIpICgvIDE0ICgrIDMgNCkpKQorCisgICBTLUV4cHJlc3Npb25zIGNhbiBiZSBuZXN0ZWQgdG8g YW55IHJlYXNvbmFibGUgbGV2ZWw7IGZvciBleGFtcGxlLCB0aGUKKyAgIHZhbHVlIG9mIHRoZSBm b2xsb3dpbmcgUy1FeHByZXNzaW9uIGlzIDY0OgorCisgICgtICgqICgrIDIgKCogMyA0KSkgKC0g OSAoKiAyIDIpKSkgNikKKworICAgT3BlcmF0b3JzIGhhdmUgbm8gcHJlY2VkZW5jZSwgaW1wbGll ZCBvciBvdGhlcndpc2UsIHNpbmNlIHRoZXkgY2FuJ3QgYmUKKyAgIG1peGVkLiBUaGUgb25seSBl eGNlcHRpb25zIGFyZSB1bmFyeSArIGFuZCAtLCB3aGljaCBzaW1wbHkgaW5kaWNhdGUgdGhlCisg ICBzaWduIG9mIGEgbnVtYmVyOgorCisgICgqIDMgLTEpCisKKyAgIE9yZGVyIG9mIGV2YWx1YXRp b24gaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHBhcmVudGhlc2VzLCB3aGljaCBhcmUKKyAgIHJl cXVpcmVkIGFyb3VuZCBlYWNoIG9wZXJhdG9yIGFuZCBpdHMgb3BlcmFuZHM6ICgrIGEgKCogYiBj KSkgaW5zdGVhZAorICAgb2YgKGEgKyBiICogYykuCisKKyAgIFMtRXhwcmVzc2lvbnMgcHJvdmlk ZSBhIHNpbXBsZSBhbmQgaXNvbGF0ZWQgZW52aXJvbm1lbnQgaW4gd2hpY2gKKyAgIEtlcm1pdCdz IG1hY3JvIG5hbWVzIGNhbiBiZSB1c2VkIHdpdGhvdXQgdGhlIFxtKC4uLikgZXNjYXBpbmcgdGhh dCBpcworICAgbm9ybWFsbHkgcmVxdWlyZWQuIEdpdmVuOgorCisgIGRlZmluZSBhIDEKKyAgZGVm aW5lIGIgMgorICBkZWZpbmUgYyAzCisKKyAgIFRoZW46CisKKyAgKCsgXG0oYSkgXG0oYikgXG0o YykpCisKKyAgIGlzIGVxdWl2YWxlbnQgdG86CisKKyAgKCsgYSBiIGMpCisKKyAgIFdpdGhpbiBh biBTLUV4cHJlc3Npb24sIGFzIGluIG90aGVyIHN0cmljdGx5IG51bWVyaWMgY29udGV4dHMKKyAg IChbNDk5XVNlY3Rpb24gOC4yKSwgYW55IG9wZXJhbmQgdGhhdCBzdGFydHMgd2l0aCBhIGxldHRl ciBpcyB0cmVhdGVkIGFzCisgICBhIEtlcm1pdCBtYWNybyBuYW1lLiBJbiB0aGlzIGNvbnRleHQs IGFiYnJldmlhdGlvbnMgYXJlIG5vdCBhY2NlcHRlZDsKKyAgIHZhcmlhYmxlIG5hbWVzIG11c3Qg YmUgc3BlbGxlZCBvdXQgaW4gZnVsbC4gQWxwaGFiZXRpYyBjYXNlIGlzIG5vdAorICAgc2lnbmlm aWNhbnQ7ICJhIiBhbmQgIkEiIGFyZSB0aGUgc2FtZSB2YXJpYWJsZSwgYnV0IGJvdGggYXJlIGRp ZmZlcmVudAorICAgZnJvbSAiYXJlYSIuCisKKyAgIE9mIGNvdXJzZSwgcmVndWxhciBLZXJtaXQg dmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgaW4KKyAgIFMtRXhwcmVzc2lvbnMg aW4gdGhlIG5vcm1hbCB3YXlzOgorCisgICgqIFx2KG1hdGhfcGkpICheIFwlciAyKSkgICAgICAg ICAgICAgOyBBcmVhIG9mIGEgY2lyY2xlIHdpdGggcmFkaXVzIFwlcgorICAoKyBcZmpvaW4oJmEp KSAgICAgICAgICAgICAgICAgICAgICAgIDsgU3VtIG9mIGFsbCBlbGVtZW50cyBvZiBhcnJheSBc JmFbXQorCisgICBbIFs1MDBdVG9wIF0gWyBbNTAxXUNvbnRlbnRzIF0gWyBbNTAyXUMtS2VybWl0 IEhvbWUgXSBbIFs1MDNdS2VybWl0CisgICBIb21lIF0KKworOS4yLiBJbnRlZ2VyIGFuZCBGbG9h dGluZy1Qb2ludC1Bcml0aG1ldGljCisKKyAgIE5vcm1hbGx5LCBpZiBhbGwgbnVtYmVycyBpbiBh biBTLUV4cHJlc3Npb24gYXJlIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzCisgICBhbiBpbnRlZ2Vy OgorCisgICgrIDEgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXN1bHQgaXMg MgorICAoLyA5IDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzdWx0IGlzIDMK KworICAgSWYgYW55IG9mIHRoZSBvcGVyYW5kcyBpcyBmbG9hdGluZyBwb2ludCwgaG93ZXZlciwg dGhlIHJlc3VsdCBpcyBhbHNvCisgICBmbG9hdGluZyBwb2ludDoKKworICAoKyAxIDEuMCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzdWx0IGlzIDIuMAorICAoLyA5LjAgMykgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsgUmVzdWx0IGlzIDMuMAorCisgICBJZiBhbGwgdGhl IG9wZXJhbmRzIGFyZSBpbnRlZ2VycyBidXQgdGhlIHJlc3VsdCBoYXMgYSBmcmFjdGlvbmFsIHBh cnQsCisgICB0aGUgcmVzdWx0IGlzIGZsb2F0aW5nIHBvaW50OgorCisgICgvIDEwIDMpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXN1bHQgaXMgMy4zMzMzMzMzMzMzMzMzMzMKKwor ICAgVG8gZm9yY2UgYW4gaW50ZWdlciByZXN1bHQgaW4gc3VjaCBjYXNlcywgdXNlIHRoZSBUUlVO Q0FURSBvcGVyYXRvcjoKKworICAodHJ1bmNhdGUgKC8gMTAgMykpICAgICAgICAgICAgICAgICAg IDsgUmVzdWx0IGlzIDMKKworICAgU2ltaWxhcmx5LCB0byBmb3JjZSBhIGNvbXB1dGF0aW9uIHRv IG9jY3VyIGluIGZsb2F0aW5nIHBvaW50LCB5b3UgY2FuCisgICBjb2VyY2Ugb25lIG9mIGl0cyBv cGVyYW5kcyB0byBGTE9BVDoKKworICAoKyAxIChmbG9hdCAxKSkgICAgICAgICAgICAgICAgICAg ICAgIDsgUmVzdWx0IGlzIDIuMAorCisgICBUaGUgcmVzdWx0IGlzIGFsc28gZmxvYXRpbmcgcG9p bnQgaWYgdGhlIG1hZ25pdHVkZSBvZiBhbnkgaW50ZWdlcgorICAgb3BlcmFuZCwgaW50ZXJtZWRp YXRlIHJlc3VsdCwgb3IgdGhlIHJlc3VsdCBpdHNlbGYsIGlzIGxhcmdlciB0aGFuIHRoZQorICAg bWF4aW11bSBmb3IgdGhlIHVuZGVybHlpbmcgbWFjaGluZSBhcmNoaXRlY3R1cmU6CisKKyAgKF4g MTAwIDEwMCkKKworICAgSWYgdGhlIHJlc3VsdCBpcyB0b28gbGFyZ2UgZXZlbiBmb3IgZmxvYXRp bmctcG9pbnQgcmVwcmVzZW50YXRpb24sCisgICAiSW5maW5pdHkiIGlzIHByaW50ZWQ7IGlmIGl0 IGlzIHRvbyBzbWFsbCB0byBiZSBkaXN0aW5ndWlzaGVkIGZyb20gMCwKKyAgIDAuMCBpcyByZXR1 cm5lZC4KKworICAgTGFyZ2UgbnVtYmVycyBjYW4gYmUgdXNlZCBhbmQgbGFyZ2UgcmVzdWx0cyBn ZW5lcmF0ZWQsIGJ1dCB0aGV5IGFyZQorICAgYWNjdXJhdGUgb25seSB0byB0aGUgcHJlY2lzaW9u IG9mIHRoZSB1bmRlcmx5aW5nIG1hY2hpbmUuIEZvciBleGFtcGxlLAorICAgdGhlIHJlc3VsdCBv ZjoKKworICgrIDExMTExMTExMTExMTExMTExMTExMSAyMjIyMjIyMjIyMjIyMjIyMjIyMjIpCisK KyAgIHNob3VsZCBiZSAzMzMzMzMzMzMzMzMzMzMzMzMzMzMsIGJ1dCAzMzMzMzMzMzMzMzMzMzMz MDAwMDAuMCBpcworICAgcHJvZHVjZWQgaW5zdGVhZCBpZiB0aGUgbWFjaGluZSBpcyBhY2N1cmF0 ZSB0byBvbmx5IGFib3V0IDE2IGRlY2ltYWwKKyAgIGRpZ2l0cywgZXZlbiB3aXRoIGNvZXJjaW9u IHRvIGZsb2F0aW5nLXBvaW50LiBUaGUgb3JkZXIgb2YgbWFnbml0dWRlIGlzCisgICBjb3JyZWN0 IGJ1dCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgZGlnaXRzIGFyZSB3cm9uZy4gVGhlIGltcHJlY2lz ZQorICAgbmF0dXJlIG9mIHRoZSByZXN1bHQgaXMgaW5kaWNhdGVkIGJ5IHRoZSAiLjAiIGF0IHRo ZSBlbmQuIENvbnRyYXN0CisgICB3aXRoOgorCisgKCsgMTExMTExMTExIDIyMjIyMjIyMikKKwor ICAgd2hpY2ggcHJvZHVjZXMgYW4gZXhhY3QgaW50ZWdlciByZXN1bHQuCisKKyAgIFsgWzUwNF1U b3AgXSBbIFs1MDVdQ29udGVudHMgXSBbIFs1MDZdQy1LZXJtaXQgSG9tZSBdIFsgWzUwN11LZXJt aXQKKyAgIEhvbWUgXQorCis5LjMuIEhvdyB0byBVc2UgUy1FeHByZXNzaW9ucworCisgICBTLUV4 cHJlc3Npb25zIG1heSBiZSBnaXZlbiBhcyBjb21tYW5kcyB0byBDLUtlcm1pdC4gQW55IGNvbW1h bmQgd2hvc2UKKyAgIGZpcnN0IGNoYXJhY3RlciBpcyAiKCIgKGxlZnQgcGFyZW50aGVzaXMpIGlz IGludGVycHJldGVkIGFzIGFuCisgICBTLUV4cHJlc3Npb24uCisKKyAgIElmIHlvdSBlbnRlciBh biBTLUV4cHJlc3Npb24gYXQgdGhlIEMtS2VybWl0PiBwcm9tcHQsIGl0cyByZXN1bHQgaXMKKyAg IHByaW50ZWQ6CisKKyAgQy1LZXJtaXQ+KC8gMTAuMCAzKQorICAgMy4zMzMzMzMzMzMzMzMzMzMK KyAgQy1LZXJtaXQ+CisKKyAgIElmIGFuIFMtRXhwcmVzc2lvbiBpcyBleGVjdXRlZCB3aXRoaW4g YSBtYWNybyBvciBjb21tYW5kIGZpbGUsIGl0cworICAgdmFsdWUgaXMgbm90IHByaW50ZWQuIEhv d2V2ZXIsIHlvdSBjYW4gY29udHJvbCB0aGUgcHJpbnRpbmcgYWN0aW9uCisgICB3aXRoOgorCisg ICBTRVQgU0VYUFJFU1NJT04gRUNITyB7IEFVVE8sIE9OLCBPRkYgfQorICAgICAgICAgIEFVVE8g aXMgdGhlIGRlZmF1bHQsIG1lYW5pbmcgcHJpbnQgdGhlIHZhbHVlIGF0IHRvcCBsZXZlbCBvbmx5 OworICAgICAgICAgIE9OIG1lYW5zIGFsd2F5cyBwcmludCB0aGUgdmFsdWU7IE9GRiBtZWFucyBu ZXZlciBwcmludCBpdC4KKworICAgSW4gYW55IGNhc2UsIHRoZSB2YWx1ZSBvZiB0aGUgbW9zdCBy ZWNlbnQgUy1FeHByZXNzaW9uIChhbmQgdGhlCisgICBTLUV4cHJlc3Npb24gaXRzZWxmKSBtYXkg YmUgYWNjZXNzZWQgcHJvZ3JhbW1hdGljYWxseSB0aHJvdWdoIHRoZQorICAgZm9sbG93aW5nIHZh cmlhYmxlczoKKworICAgXHYoc2V4cHJlc3Npb24pCisgICAgICAgICAgVGhlIFMtRXhwcmVzc2lv biBtb3N0IHJlY2VudGx5IGV4ZWN1dGVkLgorCisgICBcdihzdmFsdWUpCisgICAgICAgICAgVGhl IHZhbHVlIG9mIHRoZSBTLUV4cHJlc3Npb24gbW9zdCByZWNlbnRseSBleGVjdXRlZC4KKworICAg QmVzaWRlcyBpc3N1aW5nIFMtRXhwcmVzc2lvbnMgYXMgY29tbWFuZHMgaW4gdGhlbXNlbHZlcywg eW91IGNhbiBhbHNvCisgICBleGVjdXRlIHRoZW0gYW55d2hlcmUgd2l0aGluIGEgS2VybWl0IGNv bW1hbmQsIGJ1dCBpbiB0aGlzIGNhc2UgdGhleQorICAgbXVzdCBiZSBlbmNsb3NlZCBpbiBhIGZ1 bmN0aW9uIGNhbGwgKG90aGVyd2lzZSB0aGV5IGFyZSB0YWtlbgorICAgbGl0ZXJhbGx5KToKKwor ICAgXGZzZXhwcmVzc2lvbihzKQorICAgICAgICAgIFRoZSBhcmd1bWVudCAicyIgaXMgYW4gUy1F eHByZXNzaW9uOyB0aGUgb3V0ZXIgcGFyZW50aGVzZXMgbWF5CisgICAgICAgICAgYmUgb21pdHRl ZC4gVGhlIHZhbHVlIG9mIHRoZSBTLUV4cHJlc3Npb24gaXMgcmV0dXJuZWQuIE5vdGUgdGhhdAor ICAgICAgICAgIHNpbmNlIFMtRXhwcmVzc2lvbnMgdXN1YWxseSBjb250YWluIHNwYWNlcywgc29t ZSBmb3JtIG9mCisgICAgICAgICAgZ3JvdXBpbmcgb3IgcXVvdGluZyBtaWdodCBiZSBuZWVkZWQg aW4gc29tZSBjb250ZXh0czoKKworICBlY2hvIFxmc2V4cHJlc3Npb24oKCsgMSAxKSkgICAgICAg ICAgICA7IE91dGVyIHBhcmVudGhlc2VzIG1heSBiZSBpbmNsdWRlZAorICBlY2hvIFxmc2V4cHIo KyAxIDEpICAgICAgICAgICAgICAgICAgICA7IE91dGVyIHBhcmVudGhlc2VzIG1heSBiZSBvbWl0 dGVkCisgIGVjaG8gVmFsdWUgPSAiXGZzZXhwKCsgMSBhKSIgICAgICAgICAgIDsgQ2FuIGJlIGVt YmVkZGVkIGluIHN0cmluZ3MKKyAgZWNobyBWYWx1ZSA9IFwmYVtcZnNleHAoLyBiIDIpXSAgICAg ICAgOyBDYW4gYmUgdXNlZCBpbiBhcnJheSBzdWJzY3JpcHRzCisgIGlmID0ge1xmc2V4cCgrIDEg MSl9IDIgeyAgICAgICAgICAgICAgIDsgQnJhY2VzIG5lZWRlZCBoZXJlIGZvciBncm91cGluZwor ICAgICAgZWNobyBPbmUgcGx1cyBvbmUgc3RpbGwgZXF1YWxzIHR3bworICB9CisKKyAgIFRoZSBJ RiBzdGF0ZW1lbnQgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSBTLUV4cHJlc3Npb25zIGFzIChvciBp bikgSUYgb3IKKyAgIFdISUxFIGNvbmRpdGlvbnM6CisKKyAgICAgKiBBbHRob3VnaCBTLUV4cHJl c3Npb25zIGFuZCBJRiBjb25kaXRpb25zIGFyZSBzaW1pbGFyIGluIGFwcGVhcmFuY2UsCisgICAg ICAgdGhleSBhcmUgbm90IGludGVyY2hhbmdlYWJsZS4gVGhlcmVmb3JlIHlvdSBtdXN0IHVzZSBc ZnNleHByKCkgdG8KKyAgICAgICBsZXQgS2VybWl0IGtub3cgaXQncyBhbiBTLUV4cHJlc3Npb24g cmF0aGVyIHRoYW4gYSByZWd1bGFyIElGCisgICAgICAgY29uZGl0aW9uLCBvciBhIGJvb2xlYW4g b3IgYWxnZWJyYWljIGV4cHJlc3Npb24gd2l0aGluIGFuIElGCisgICAgICAgY29uZGl0aW9uLgor ICAgICAqIEluIGNvbnRleHRzIHdoZXJlIGEgc2luZ2xlICJ3b3JkIiBpcyBleHBlY3RlZCwgeW91 IG11c3QgZW5jbG9zZSB0aGUKKyAgICAgICBcZnNleHAoKSBpbnZvY2F0aW9uIGluIGJyYWNlcyBp ZiB0aGUgUy1FeHByZXNzaW9uIGNvbnRhaW5zIHNwYWNlcworICAgICAgIChhbmQgbW9zdCBvZiB0 aGVtIGRvKS4KKworICAgSWYgYW4gUy1FeHByZXNzaW9uIGlzIHRoZSBsYXN0IGNvbW1hbmQgZXhl Y3V0ZWQgaW4gYSBtYWNybywgaXRzIHZhbHVlCisgICBiZWNvbWVzIHRoZSByZXR1cm4gdmFsdWUg b2YgdGhlIG1hY3JvOyBubyBSRVRVUk4gY29tbWFuZCBpcyBuZWVkZWQuCisgICBFeGFtcGxlOgor CisgIGRlZiBuZXdhcmVhIHsKKyAgICAgIChsZXQgcyAoLyAoKyBcJTEgXCUyIFwlMykgMi4wKSkK KyAgICAgIChzcXJ0ICgqIHMgKC0gcyBcJTEpICgtIHMgXCUyKSAoLSBzIFwlMykpKQorICB9CisK KyAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG1vcmUgZWZmaWNpZW50IHRoYW4pOgorCisg IGRlZiBuZXdhcmVhIHsKKyAgICAgIChsZXQgcyAoLyAoKyBcJTEgXCUyIFwlMykgMi4wKSkKKyAg ICAgIHJldHVybiBcZnNleHAoc3FydCAoKiBzICgtIHMgXCUxKSAoLSBzIFwlMikgKC0gcyBcJTMp KSkKKyAgfQorCisgICBXaGVuIGFuIFMtRXhwcmVzc2lvbiBpcyBlbnRlcmVkIGFzIGEgY29tbWFu ZCAtLSB0aGF0IGlzLCB0aGUgZmlyc3QKKyAgIG5vbmJsYW5rIGNoYXJhY3RlciBvZiB0aGUgY29t bWFuZCBpcyBhIGxlZnQgcGFyZW50aGVzaXMgLS0gdGhlbiBpdCBpcworICAgYWxsb3dlZCB0byBz cGFuIG11bHRpcGxlIGxpbmVzLCBhcyBtYW55IGFzIHlvdSBsaWtlLCB1bnRpbCB0aGUgZmlyc3QK KyAgIGxlZnQgcGFyZW50aGVzaXMgaXMgbWF0Y2hlZDoKKworICAobGV0IHMgKC8KKyAgICAgICAg ICAoKworICAgICAgICAgICBcJTEKKyAgICAgICAgICAgXCUyCisgICAgICAgICAgIFwlMworICAg ICAgICAgICApCisgICAgICAgICAgMi4wCisgICAgICAgICAgKQorICAgICAgICkKKyAgKHNxcnQg KCoKKyAgICAgICAgIHMKKyAgICAgICAgICgtIHMgXCUxKQorICAgICAgICAgKC0gcyBcJTIpCisg ICAgICAgICAoLSBzIFwlMykKKyAgICAgICAgICkKKyAgICAgICAgKQorCisgICBUaGUgUy1FeHBy ZXNzaW9uIGNvbmNlcHQgbGVuZHMgaXRzZWxmIGVhc2lseSB0byBlbWJlZGRpbmcgYW5kCisgICBy ZWN1cnNpb24sIGJ1dCB0aGUgZGVwdGggdG8gd2hpY2ggcmVjdXJzaW9uIGNhbiBvY2N1ciBpcyBs aW1pdGVkIGJ5IHRoZQorICAgcmVzb3VyY2VzIG9mIHRoZSBjb21wdXRlciAobWVtb3J5IHNpemUs IGFkZHJlc3Mgc3BhY2UsIHN3YXAgc3BhY2Ugb24KKyAgIGRpc2spIGFuZCBvdGhlciBmYWN0b3Jz LiBUaGVyZSBpcyBubyB3YXkgdGhhdCBDLUtlcm1pdCBjYW4ga25vdyB3aGF0CisgICB0aGlzIGxp bWl0IGlzLCBzaW5jZSBpdCB2YXJpZXMgbm90IG9ubHkgZnJvbSBjb21wdXRlciB0byBjb21wdXRl ciwgYnV0CisgICBhbHNvIGZyb20gbW9tZW50IHRvIG1vbWVudC4gSWYgcmVzb3VyY2VzIGFyZSBl eGhhdXN0ZWQgYnkgcmVjdXJzaW9uLAorICAgQy1LZXJtaXQgc2ltcGx5IGNyYXNoZXM7IHRoZXJl J3Mgbm8gd2F5IHRvIHRyYXAgdGhpcyBlcnJvci4gSG93ZXZlciwKKyAgIHlvdSBjYW4gc2V0IGEg ZGVwdGggbGltaXQgb24gUy1FeHByZXNzaW9uczoKKworICAgU0VUIFNFWFBSRVNTSU9OIERFUFRI LUxJTUlUIG51bWJlcgorICAgICAgICAgIExpbWl0cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBT LUV4cHJlc3Npb24gcmVhZGVyIGNhbiBpbnZva2UKKyAgICAgICAgICBpdHNlbGYgd2l0aG91dCBy ZXR1cm5pbmcgdG8gdGhlIGdpdmVuIG51bWJlci4gVGhlIGRlZmF1bHQgbGltaXQKKyAgICAgICAg ICBpcyAxMDAwLiBUaGlzIGxpbWl0IGFwcGxpZXMgdG8gUy1FeHByZXNzaW9ucyBlbWJlZGRlZCB3 aXRoaW4KKyAgICAgICAgICBvdGhlciBTLUV4cHJlc3Npb25zIGFzIHdlbGwgYXMgdG8gUy1FeHBy ZXNzaW9ucyB0aGF0IGludm9rZQorICAgICAgICAgIHJlY3Vyc2l2ZSBtYWNyb3MuIElmIHRoZSBs aW1pdCBpcyBleGNlZWRlZCwgS2VybWl0IHByaW50cworICAgICAgICAgICI/Uy1FeHByZXNzaW9u IGRlcHRoIGxpbWl0IGV4Y2VlZGVkIiBhbmQgcmV0dXJucyB0byBpdHMgcHJvbXB0LgorICAgICAg ICAgIE1vcmUgYWJvdXQgcmVjdXJzaW9uIGluIFs1MDhdU2VjdGlvbiA5LjguCisKKyAgIFlvdSBj YW4gYWxzbyB0ZXN0IHRoZSBkZXB0aCBwcm9ncmFtbWF0aWNhbGx5OgorCisgICBcdihzZGVwdGgp CisgICAgICAgICAgVGhlIGN1cnJlbnQgUy1FeHByZXNzaW9uIGludm9jYXRpb24gZGVwdGguIFRo ZSBkZXB0aCBpbmNsdWRlcworICAgICAgICAgIGJvdGggbmVzdGluZyBsZXZlbCBhbmQgcmVjdXJz aW9uLiBGb3IgZXhhbXBsZSwgaW46CisgICAgICAgICAgKGZvbyAoZm9vIChmb28gKGZvbyAoZm9v KSkpKSksIHRoZSBpbm5lcm1vc3QgKGZvbykgaXMgYXQgZGVwdGgKKyAgICAgICAgICA1LgorCisg ICBIZWxwLCBjb21wbGV0aW9uLCBhbmQgc3ludGF4IGNoZWNraW5nIGFyZSBub3QgYXZhaWxhYmxl IHdpdGhpbiBhbgorICAgUy1FeHByZXNzaW9uLiBJZiB5b3UgdHlwZSA/IHdpdGhpbiBhbiBTLUV4 cHJlc3Npb24sIGl0IHNheXM6CisKKyAgQy1LZXJtaXQ+KD8gUy1FeHByZXNzaW9uICgiaGVscCBz ZXhwIiBmb3IgZGV0YWlscykKKworICAgQXMgaXQgc2F5cywgdHlwaW5nICJoZWxwIHNleHAiIHdp bGwgZGlzcGxheSBhIGJyaWVmIGhlbHAgdGV4dC4KKworICAgVGhlIFNIT1cgU0VYUFJFU1NJT04g Y29tbWFuZCBkaXNwbGF5cyBjdXJyZW50IFNFVCBTRVhQUkVTU0lPTiBzZXR0aW5ncworICAgYW5k IHJlbGF0ZWQgaW5mb3JtYXRpb24uCisKKyAgIFsgWzUwOV1Ub3AgXSBbIFs1MTBdQ29udGVudHMg XSBbIFs1MTFdQy1LZXJtaXQgSG9tZSBdIFsgWzUxMl1LZXJtaXQKKyAgIEhvbWUgXQorCis5LjQu IFN1bW1hcnkgb2YgQnVpbHQtaW4gQ29uc3RhbnRzIGFuZCBPcGVyYXRvcnMKKworICAgVGhyZWUg Y29uc3RhbnRzIGFyZSBidWlsdCBpbjoKKworICAgICAqIFBJLCB3aG9zZSB2YWx1ZSBpcyB0aGUg dmFsdWUgb2YgcGkgKHRoZSBxdW90aWVudCBvZiBjaXJjdW1mZXJlbmNlCisgICAgICAgb2YgYW55 IGNpcmNsZSBhbmQgaXRzIGRpYW1ldGVyLCAzLjE0MTU5MjY1My4uLikgdG8gdGhlIHVuZGVybHlp bmcKKyAgICAgICBtYWNoaW5lJ3MgcHJlY2lzaW9uOworICAgICAqIFQsIHdoaWNoIGFsd2F5cyBo YXMgdGhlIHZhbHVlIDEsIHdoaWNoIHNpZ25pZmllcyB0cnV0aCBpbiBLZXJtaXQKKyAgICAgICBs b2dpY2FsIGV4cHJlc3Npb25zIG9yIFMtRXhwcmVzc2lvbnM7CisgICAgICogTklMLCB3aGljaCBh bHdheXMgaGFzIHRoZSBlbXB0eSB2YWx1ZSwgYW5kIGNhbiBzZXJ2ZSBhcyBhIEZhbHNlCisgICAg ICAgdHJ1dGggdmFsdWUuCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgc3BlY2lmaWMgdG8gUy1F eHByZXNzaW9ucyBhbmQgYXJlIG5vdCB2aXNpYmxlCisgICBvdXRzaWRlIHRoZW0uIFRoZXkgbWF5 IG5vdCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2YgYW4gYXNzaWdubWVudC4gU28sCisgICBmb3Ig ZXhhbXBsZToKKworICAoc2V0cSB0IDApICAgRmFpbHMKKyAgYXNzaWduIHQgMCAgIFN1Y2NlZWRz IGJ1dCB0aGlzIGlzIG5vdCB0aGUgc2FtZSBUIQorCisgICBFICh0aGUgYmFzZSBvZiBuYXR1cmFs IGxvZ2FyaXRobXMsIDIuNzE4MjgxODE4NC4uLikgaXMgbm90IGJ1aWx0IGluCisgICBzaW5jZSBp dCBpcyBub3QgaW50cmluc2ljIGluIG1vc3QgTGlzcCBkaWFsZWN0cy4gSWYgeW91IHdhbnQgRSB0 byBiZQorICAgdGhlIGJhc2Ugb2YgbmF0dXJhbCBsb2dhcml0aG1zIHlvdSBjYW46CisKKyAgKHNl dHEgZSAoZXhwIDEpKQorCisgICBPcGVyYXRvcnMgYXJlIGVpdGhlciBzeW1ib2xzIChzdWNoIGFz ICIrIikgb3Igd29yZHMuIFdvcmRzIG11c3QgYmUKKyAgIHNwZWxsZWQgb3V0IGluIGZ1bGwsIG5v dCBhYmJyZXZpYXRlZC4gRGlmZmVyZW5jZXMgb2YgYWxwaGFiZXRpYyBjYXNlCisgICBhcmUgaWdu b3JlZC4KKworICAgVGhlIG1vc3QgYmFzaWMgb3BlcmF0aW9uIGluIFMtRXhwcmVzc2lvbnMgaXMg ZXZhbHVhdGlvbjoKKworICAgRVZBTCBbIHMtZXhwcmVzc2lvbiBvciB2YXJpYWJsZSBvciBudW1i ZXIgWyBhbm90aGVyIFsgYW5vdGhlciAuLi4gXSBdIF0KKyAgICAgICAgICBFdmFsdWF0ZXMgaXRz IG9wZXJhbmRzIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBvbmUKKyAgICAgICAg ICBldmFsdWF0ZWQuIEV4YW1wbGVzOgorCisgIChldmFsKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMAorICAoZXZhbCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyAg KGV2YWwgYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBhCisgIChldmFs ICgrIDEgYSkpICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgYSsxCisgIChldmFsIChz ZXRxIGEgMSkgKHNldHEgYiAoKyBhIDAuNSkpKSAgdmFsdWUgb2YgYiAoPSBhKzAuNSkKKworICAg ICAgICAgIFlvdSBjYW4gdXNlICIuIiBhcyBhIHNob3J0aGFuZCBmb3IgRVZBTDoKKworICAoLikK KyAgKC4gMSkKKyAgKC4gYSkKKyAgKC4gKCsgMSBhKSkKKyAgKC4gKHNldHEgYSAxKSAoc2V0cSBi ICgrIGEgMC41KSkpCisKKyAgIE9wcG9zaXRlIG9mIEVWQUwgaXMgdGhlIG9wZXJhdG9yIHRoYXQg c3VwcHJlc3NlcyBldmFsdWF0aW9uIG9mIGl0cworICAgb3BlcmFuZDoKKworICAgUVVPVEUgaXRl bQorICAgICAgICAgIFRoZSB2YWx1ZSAocXVvdGUgaXRlbSkgaXMgIml0ZW0iLiBJZiB0aGUgaXRl bSBpcyBpdHNlbGYgYW4KKyAgICAgICAgICBTLUV4cHJlc3Npb24sIHRoZSByZXN1bHQgaXMgdGhl IFMtRXhwcmVzc2lvbiB3aXRoIHRoZSBvdXRlcgorICAgICAgICAgIHBhcmVudGhlc2VzIHN0cmlw cGVkLiBFeGFtcGxlczoKKworICAocXVvdGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpbGxlZ2FsKQorICAocXVvdGUgYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEKKyAg KHF1b3RlIGhlbGxvKSAgICAgICAgICAgICAgICAgICAgICAgICBoZWxsbworICAocXVvdGUgKHRo aXMgaXMgYSBzdHJpbmcpKSAgICAgICAgICAgIHRoaXMgaXMgYSBzdHJpbmcKKyAgKHF1b3RlIHRo aXMgaXMgYSBzdHJpbmcpICAgICAgICAgICAgICAoaWxsZWdhbCkKKworICAgICAgICAgIEEgc2hv cnRoYW5kIG5vdGF0aW9uIGlzIGFsc28gYWNjZXB0ZWQgZm9yIHF1b3Rpbmc6CisgICAgICAgICAg J2EgaXMgZXF1aXZhbGVudCB0byAocXVvdGUgYSkuIEFuZCB0aGVyZWZvcmU6CisgICAgICAgICAg JyhhIGIgYykgaXMgZXF1aXZhbGVudCB0byAocXVvdGUgKGEgYiBjKSkuCisgICAgICAgICAgTW9y ZSBhYm91dCBxdW90aW5nIGluIFs1MTNdU2VjdGlvbiA5LjguCisKKyAgIFNUUklORyBpdGVtCisg ICAgICAgICAgSXMgYSBjb21iaW5hdGlvbiBvZiBFVkFMIGFuZCBRVU9URS4gSXQgZXZhbHVhdGVz IHRoZSBpdGVtIGFzIGFuCisgICAgICAgICAgUy1FeHByZXNzaW9uLCBhbmQgdGhlbiBwdXRzIHF1 b3RlcyBhcm91bmQgdGhlIHJlc3VsdCAobW9yZSBhYm91dAorICAgICAgICAgIHRoaXMgaW4gWzUx NF1TZWN0aW9uIDkuOCkuCisKKyAgIFRoZSBmb2xsb3dpbmcgb3BlcmF0b3JzIGFzc2lnbiB2YWx1 ZXMgdG8gdmFyaWFibGVzOgorCisgICBTRVRRIFsgdmFyaWFibGUgWyB2YWx1ZSBbIHZhcmlhYmxl IFsgdmFsdWUgWyAuLi4gXSBdIF0gXSBdCisgICAgICAgICAgQXBwbGllcyB0byBnbG9iYWwgdmFy aWFibGVzLiBGb3IgZWFjaCB2YXJpYWJsZSBnaXZlbjogaWYgYSB2YWx1ZQorICAgICAgICAgIGlz IG5vdCBnaXZlbiwgdGhlIHZhcmlhYmxlIGlzIHVuZGVmaW5lZC4gSWYgYSB2YWx1ZSBpcyBnaXZl biwKKyAgICAgICAgICBhc3NpZ25zIHRoZSB2YWx1ZSB0byB0aGUgdmFyaWFibGUuIFRoZSB2YWx1 ZSBtYXkgYmUgYSBudW1iZXIsIGEKKyAgICAgICAgICB2YXJpYWJsZSwgb3IgYW55dGhpbmcgdGhh dCByZXNvbHZlcyB0byBhIG51bWJlciBpbmNsdWRpbmcgYW4KKyAgICAgICAgICBTLUV4cHJlc3Np b24uIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGFzc2lnbm1lbnQuCisgICAgICAgICAg RXhhbXBsZXM6CisKKyAgKHNldHEpICAgICAgICAgICAgIERvZXMgbm90aGluZywgcmV0dXJucyBO SUwuCisgIChzZXRxIGEpICAgICAgICAgICBVbmRlZmluZXMgYSwgcmV0dXJucyBOSUwuCisgIChz ZXRxIGEgMSkgICAgICAgICBBc3NpZ25zIDEgdG8gYSwgcmV0dXJucyAxLgorICAoc2V0cSBhIDEg YiAyKSAgICAgQXNzaWducyAxIHRvIGEsIDIgdG8gYiwgcmV0dXJucyAyLgorICAoc2V0cSBhIDEg YiAyIGMpICAgQXNzaWducyAxIHRvIGEsIDIgdG8gYiwgdW5kZWZpbmVzIGMsIHJldHVybnMgTklM LgorCisgICBUbyB1bmRlZmluZSBhIHZhcmlhYmxlIHRoYXQgaXMgbm90IHRoZSBmaW5hbCBvbmUg aW4gdGhlIGxpc3QsIGdpdmUgaXQgYQorICAgdmFsdWUgb2YgIigpIiBvciBOSUw6CisKKyAgKHNl dHEgYSAoKSBiIDIpICAgIFVuZGVmaW5lcyBhLCBhc3NpZ25zIDIgdG8gYiwgcmV0dXJucyAyLgor ICAoc2V0cSBhIG5pbCBiIDIpICAgRGl0dG8uCisKKyAgIE5vdGUgdGhhdCBhIHZhcmlhYmxlIGNh biBiZSB1c2VkIHJpZ2h0IGF3YXkgb25jZSBpdCBoYXMgYSB2YWx1ZToKKworICAoc2V0cSBhIDEg YiBhKSAgICAgQXNzaWducyAxIHRvIGEsIHRoZSB2YWx1ZSBvZiBhICgxKSB0byBiLCByZXR1cm5z IDEuCisKKyAgIFRoZSByZXN1bHRzIG9mIFNFVFEgKHdoZW4gdXNlZCB3aXRoIG1hY3JvIG5hbWVz KSBjYW4gYmUgY2hlY2tlZAorICAgY29udmVuaWVudGx5IHdpdGggU0hPVyBNQUNSTywgZS5nOgor CisgIHNob3cgbWFjIGEgYiBjCisKKyAgIExFVCBbIHZhcmlhYmxlIFsgdmFsdWUgWyB2YXJpYWJs ZSBbIHZhbHVlIFsgLi4uIF0gXSBdIF0gXQorICAgICAgICAgIExpa2UgU0VUUSwgYnV0IGFwcGxp ZXMgdG8gbG9jYWwgdmFyaWFibGVzLiBOb3RlIHRoYXQgImxvY2FsIiBpcworICAgICAgICAgIHVz ZWQgaW4gdGhlIEtlcm1pdCBzZW5zZSwgbm90IHRoZSBMaXNwIHNlbnNlOyBpdCBhcHBsaWVzIHRv IHRoZQorICAgICAgICAgIGN1cnJlbnQgS2VybWl0IGNvbW1hbmQgbGV2ZWwsIG5vdCB0byB0aGUg Y3VycmVudCBTLUV4cHJlc3Npb24uCisKKyAgIElmIHlvdSB3YW50IHRvIHVzZSBTRVRRIG9yIExF VCB0byBhc3NpZ24gYSB2YWx1ZSB0byBhIGJhY2tzbGFzaAorICAgdmFyaWFibGUgc3VjaCBhcyBc JWEgb3IgXCZhWzJdLCB5b3UgbXVzdCBkb3VibGUgdGhlIGJhY2tzbGFzaDoKKworICAoc2V0cSBc XCVhIDMpCisgIChzZXRxIFxcJWIgKCsgXCVhIDEpKQorICAoc2V0cSBcXCZhWzJdIChzZXRxIChc XCVjICgrIFwlYSBcJWIpKSkpCisKKyAgIEluIG90aGVyIHdvcmRzOgorCisgICAgICogRG91Ymxl IHRoZSBiYWNrc2xhc2ggd2hlbiB5b3Ugd2FudCB0byBpbmRpY2F0ZSB0aGUgdmFyaWFibGUncyBO QU1FOworICAgICAqIERvbid0IGRvdWJsZSB0aGUgYmFja3NsYXNoIHdoZW4geW91IHdhbnQgaXRz IFZBTFVFLgorCisgICBTZWUgWzUxNV1TZWN0aW9uIDkuNiBmb3IgYSBmdWxsZXIgZXhwbGFuYXRp b24gb2YgdmFyaWFibGUgc3ludGF4IGFuZAorICAgc2NvcGUuCisKKyAgIEhlcmUncyBhIHN1bW1h cnkgdGFibGUgb2YgYXJpdGhtZXRpYyBvcGVyYXRvcnM7IGluIHRoZSBleGFtcGxlcywgYSBpcyAy CisgICBhbmQgYiBpcyAtMS4zOgorCisgIE9wZXJhdG9yICBEZXNjcmlwdGlvbiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFeGFtcGxlICAgICAgICAgICBSZXN1bHQKKyAgKyAgICAgICAgIEFk ZHMgYWxsIG9wZXJhbmRzICgwIG9yIG1vcmUpICAgICAgICAgICgrIGEgYikgICAgICAgICAgIDAu NworICAtICAgICAgICAgU3VidHJhY3RzIGFsbCBvcGVyYW5kcyAoMCBvciBtb3JlKSAgICAgKC0g OSA1IDIgMSkgICAgICAgMQorICAqICAgICAgICAgTXVsdGlwbGllcyBhbGwgb3BlcmFuZHMgKDAg b3IgbW9yZSkgICAgKCogYSAoKyBiIDEpIDMpICAtMS44MAorICAvICAgICAgICAgRGl2aWRlcyBh bGwgb3BlcmFuZHMgKDIgb3IgbW9yZSkgICAgICAgKC8gYiBhIDIpICAgICAgICAtMC4zMjUKKyAg XiAgICAgICAgIFJhaXNlIGdpdmVuIG51bWJlciB0byBnaXZlbiBwb3dlciAgICAgICheIDMgMikg ICAgICAgICAgIDkKKyAgKysgICAgICAgIEluY3JlbWVudHMgdmFyaWFibGVzICAgICAgICAgICAg ICAgICAgICgrKyBhIDEuMikgICAgICAgIDMuMgorICAtLSAgICAgICAgRGVjcmVtZW50cyB2YXJp YWJsZXMgICAgICAgICAgICAgICAgICAgKC0tIGEpICAgICAgICAgICAgMQorICBBQlMgICAgICAg QWJzb2x1dGUgdmFsdWUgb2YgMSBvcGVyYW5kICAgICAgICAgICAgKGFicyAoKiBhIGIgMykpICAg Ny44CisgIE1BWCAgICAgICBNYXhpbXVtIG9mIGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAo bWF4IDEgMiAzIDQpICAgICA0CisgIE1JTiAgICAgICBNaW5pbXVtIG9mIGFsbCBvcGVyYW5kcyAo MSBvciBtb3JlKSAgICAobWluIDEgMiAzIDQpICAgICAxCisgIE1PRCAoJSkgICBNb2R1bHVzIG9m IGFsbCBvcGVyYW5kcyAoMSBvciBtb3JlKSAgICAobW9kIDcgNCAyKSAgICAgICAxCisgIEZMT0FU ICAgICBDb252ZXJ0IGFuIGludGVnZXIgdG8gZmxvYXRpbmctcG9pbnQgICAoZmxvYXQgMSkgICAg ICAgICAxLjAKKyAgVFJVTkNBVEUgIEludGVnZXIgcGFydCBvZiBmbG9hdGluZy1wb2ludCBvcGVy YW5kICh0cnVuY2F0ZSAzLjMzMykgIDMKKyAgQ0VJTElORyAgIENlaWxpbmcgb2YgZmxvYXRpbmct cG9pbnQgb3BlcmFuZCAgICAgIChjZWlsaW5nIDEuMjUpICAgIDIKKyAgRkxPT1IgICAgIEZsb29y IG9mIGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgICAgICAgIChmbG9vciAxLjI1KSAgICAgIDEKKyAg Uk9VTkQgICAgIE9wZXJhbmQgcm91bmRlZCB0byBuZWFyZXN0IGludGVnZXIgICAgIChyb3VuZCAx Ljc1KSAgICAgIDIKKyAgU1FSVCAgICAgIFNxdWFyZSByb290IG9mIDEgb3BlcmFuZCAgICAgICAg ICAgICAgIChzcXJ0IDIpICAgICAgICAgIDEuNDE0Li4KKyAgRVhQICAgICAgIGUgKDIuNzE4Mjgu LikgdG8gdGhlIGdpdmVuIHBvd2VyICAgICAgIChleHAgLTEpICAgICAgICAgIDAuMzY3Li4KKyAg U0lOICAgICAgIFNpbmUgb2YgYW5nbGUtaW4tcmFkaWFucyAgICAgICAgICAgICAgIChzaW4gKC8g cGkgMikpICAgIDEuMAorICBDT1MgICAgICAgQ29zaW5lIG9mIGFuZ2xlLWluLXJhZGlhbnMgICAg ICAgICAgICAgKGNvcyBwaSkgICAgICAgICAtMS4wCisgIFRBTiAgICAgICBUYW5nZW50IG9mIGFu Z2xlLWluLXJhZGlhbnMgICAgICAgICAgICAodGFuIHBpKSAgICAgICAgICAwLjAKKyAgTE9HICAg ICAgIE5hdHVyYWwgbG9nIChiYXNlIGUpIG9mIGdpdmVuIG51bWJlciAgIChsb2cgMi43MTgzKSAg ICAgIDEuMDAwLi4KKyAgTE9HMTAgICAgIExvZyBiYXNlIDEwIG9mIGdpdmVuIG51bWJlciAgICAg ICAgICAgIChsb2cxMCAxMDAwKSAgICAgIDMuMAorCisgICBUaGUgKysgYW5kIC0tIG9wZXJhdG9y cyBhcmUgYWxzbyBhc3NpZ25tZW50IG9wZXJhdG9ycyBhbmQgd29yayBqdXN0CisgICBsaWtlIFNF VFEgYW5kIExFVCBpbiB0aGVpciBpbnRlcnByZXRhdGlvbnMgb2Ygb3BlcmF0b3JzIGFuZCBvcGVy YW5kcywKKyAgIGJ1dDoKKworICAgICAqIEVhY2ggdGFyZ2V0IHZhcmlhYmxlIG11c3QgYWxyZWFk eSBiZSBkZWZpbmVkIGFuZCBoYXZlIGEgbnVtZXJpYworICAgICAgIHZhbHVlOworICAgICAqIFRo ZSBhc3NpZ25tZW50IHZhbHVlIGlzIHRoZSBhbW91bnQgYnkgd2hpY2ggdG8gaW5jcmVtZW50IG9y CisgICAgICAgZGVjcmVtZW50IHRoZSB2YXJpYWJsZS4KKyAgICAgKiBJZiBhbiBhc3NpZ25tZW50 IHZhbHVlIGlzIG5vdCBnaXZlbiwgMSBpcyB1c2VkLgorCisgICBJZiB5b3UgaW5jbHVkZSBtb3Jl IHRoYW4gb25lIHZhcmlhYmxlLXZhbHVlIHBhaXIgaW4gYSArKyBvciAtLQorICAgZXhwcmVzc2lv biwgZXZlcnkgdmFyaWFibGUgKGV4Y2VwdCwgb3B0aW9uYWxseSwgdGhlIGxhc3QpIG11c3QgYmUK KyAgIGZvbGxvd2VkIGJ5IGEgdmFsdWUuIEV4YW1wbGVzOgorCisgICgrKyBhKSAgICAgICAgICAg ICAgICBFcXVpdmFsZW50IHRvIChzZXRxIGEgKCsgYSAxKSkgYW5kIHRvICgrKyBhIDEpCisgICgr KyBhIDIpICAgICAgICAgICAgICBFcXVpdmFsZW50IHRvIChzZXRxIGEgKCsgYSAyKSkKKyAgKC0t IGEgKCogMiBwaSkpICAgICAgIEVxdWl2YWxlbnQgdG8gKHNldHEgYSAoLSBhICgqIDIgcGkpKSkK KyAgKCsrIGEgMSBiIDEgYyAxIGQpICAgIEVxdWl2YWxlbnQgdG8gZm91ciBTRVRRcyBpbmNyZW1l bnRpbmcgYSxiLGMsZCBieSAxLgorCisgICBBbm90aGVyIGdyb3VwIG9mIG9wZXJhdG9ycyBmb3Jt cyB0aGUgcHJlZGljYXRlcy4gVGhlc2UgcmV0dXJuIGEgInRydXRoCisgICB2YWx1ZSIsIGluIHdo aWNoIDAgKG9yIE5JTCkgaXMgZmFsc2UsIGFuZCAxIG9yIGFueSBvdGhlciBub256ZXJvIG51bWJl cgorICAgaXMgdHJ1ZS4KKworICBPcGVyYXRvciAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAg ICAgICAgICAgICAgRXhhbXBsZSAgICAgICAgICAgUmVzdWx0CisgID0gKG9yID09KSBPcGVyYW5k cyBhcmUgZXF1YWwgICAgICAgICAgICAgICAgICAgICAoPSAxIDEuMCkgICAgICAgICAxCisgICE9 ICAgICAgICBPcGVyYW5kcyBhcmUgbm90IGVxdWFsICAgICAgICAgICAgICAgICAoIT0gMSAxLjAp ICAgICAgICAwCisgIDwgICAgICAgICBPcGVyYW5kcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3Jk ZXIgICAoPCAxIDIgMykgICAgICAgICAxCisgIDw9ICAgICAgICBPcGVyYW5kcyBpbiBhc2NlbmRp bmcgb3JkZXIgICAgICAgICAgICAoPD0gMSAxIDIgMykgICAgICAxCisgID4gICAgICAgICBPcGVy YW5kcyBpbiBzdHJpY3RseSBkZXNjZW5kaW5nIG9yZGVyICAoPiAzIDIgMSkgICAgICAgICAxCisg ID49ICAgICAgICBPcGVyYW5kcyBpbiBkZXNjZW5kaW5nIG9yZGVyICAgICAgICAgICAoPD0gMyAz IDIgMSkgICAgICAxCisgIEFORCAoJiYpICBPcGVyYW5kcyBhcmUgYWxsIHRydWUgICAgICAgICAg ICAgICAgICAoYW5kIDEgMSAxIDEgMCkgICAwCisgIE9SICAofHwpICBBdCBsZWFzdCBvbmUgb3Bl cmFuZCBpcyB0cnVlICAgICAgICAgICAob3IgMSAxIDEgMSAwKSAgICAxCisgIFhPUiAgICAgICBM b2dpY2FsIEV4Y2x1c2l2ZSBPUiAgICAgICAgICAgICAgICAgICAoeG9yIDMgMSkgICAgICAgICAw CisgIE5PVCAoISkgICBSZXZlcnNlcyB0cnV0aCB2YWx1ZSBvZiBvcGVyYW5kICAgICAgICAobm90 IDMpICAgICAgICAgICAwCisKKyAgIFRoZSBFeGNsdXNpdmUgT1Igb2YgdHdvIHZhbHVlcyBpcyB0 cnVlIGlmIG9uZSB2YWx1ZSBpcyB0cnVlIGFuZCB0aGUKKyAgIG90aGVyIHZhbHVlIGlzIGZhbHNl LgorCisgICBBbmQgYW5vdGhlciBncm91cCBvcGVyYXRlcyBvbiBiaXRzIHdpdGhpbiBhbiBpbnRl Z2VyIHdvcmQ6CisKKyAgT3BlcmF0b3IgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEV4YW1wbGUgICAgICAgICAgIFJlc3VsdAorICAmICAgICAgICAgQml0d2lzZSBBTkQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCYgNyAyKSAgICAgICAgICAgMgorICB8ICAgICAg ICAgQml0d2lzZSBPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHwgMSAyIDMgNCkgICAg ICAgNworICAjICAgICAgICAgQml0d2lzZSBFeGNsdXNpdmUgT1IgICAgICAgICAgICAgICAgICAg KCMgMyAxKSAgICAgICAgICAgMgorICB+ICAgICAgICAgUmV2ZXJzZXMgYWxsIGJpdHMgICAgICAg ICAgICAgICAgICAgICAgKH4gMykgICAgICAgICAgICAtNAorCisgICBUaGVzZSBvcGVyYXRvcnMg Y29lcmNlIHRoZWlyIG9wZXJhbmRzIHRvIGludGVnZXIgYnkgdHJ1bmNhdGlvbiBpZgorICAgbmVj ZXNzYXJ5LiBUaGUgcmVzdWx0IG9mIGJpdCByZXZlcnNhbCBpcyBoYXJkd2FyZSBkZXBlbmRlbnQu CisKKyAgIFRoZSBmaW5hbCBjYXRlZ29yeSBvZiBvcGVyYXRvciB3b3JrcyBvbiB0cnV0aCB2YWx1 ZXM6CisKKyAgT3BlcmF0b3IgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAg IEV4YW1wbGUgICAgICAgICAgIFJlc3VsdAorICBJRiAgICAgICAgQ29uZGl0aW9uYWwgZXZhbHVh dGlvbiAgICAgICAgICAgICAgICAgKGlmICgxKSAyIDMpICAgICAgMgorCisgICBJRiAocHJlZGlj YXRlKSAoczEpIFsgKHMyKSBdCisgICAgICAgICAgVGhlIElGIG9wZXJhdG9yIGlzIHNpbWlsYXIg dG8gS2VybWl0J3MgSUYgY29tbWFuZC4gSWYgdGhlCisgICAgICAgICAgcHJlZGljYXRlIGlzIHRy dWUgKGkuZS4gZXZhbHVhdGVzIHRvIGEgbm9uemVybyBudW1iZXIpLCB0aGUKKyAgICAgICAgICBm aXJzdCBTLUV4cHJlc3Npb24gKHMxKSBpcyBldmFsdWF0ZWQgYW5kIGl0cyB2YWx1ZSBpcyByZXR1 cm5lZC4KKyAgICAgICAgICBPdGhlcndpc2UsIGlmIChzMikgaXMgZ2l2ZW4sIGl0IGlzIGV2YWx1 YXRlZCBhbmQgaXRzIHZhbHVlCisgICAgICAgICAgcmV0dXJuZWQ7IGlmIChzMikgaXMgbm90IGdp dmVuLCBub3RoaW5nIGhhcHBlbnMgYW5kIHRoZSBOSUwKKyAgICAgICAgICAoZW1wdHkpIHZhbHVl IGlzIHJldHVybmVkLgorCisgICBZb3UgY2FuIGdyb3VwIG11bHRpcGxlIGV4cHJlc3Npb25zIGlu IHRoZSBzMSBhbmQgczIgZXhwcmVzc2lvbnMgdXNpbmcKKyAgIEVWQUwgKG9yICIuIik6CisKKyAg KGlmICg8IGEgMCkgKGV2YWwgKHNldHEgeCAwKSAoc2V0cSB5IDApKSAoZXZhbCAoc2V0cSB4IGEp IChzZXRxIHkgYikpKQorCisgICBvciBlcXVpdmFsZW50bHk6CisKKyAgKGlmICg8IGEgMCkgKC4g KHNldHEgeCAwKSAoc2V0cSB5IDApKSAoLiAoc2V0cSB4IGEpIChzZXRxIHkgYikpKQorCisgICBF YWNoIG9wZXJhdG9yIGhhcyBpdHMgb3duIHJlcXVpcmVtZW50IGFzIHRvIG51bWJlciBhbmQgdHlw ZSBvZgorICAgb3BlcmFuZHMuIEluIHRoZSBmb2xsb3dpbmcgdGFibGUsICJudW1iZXIiIG1lYW5z IGFueSBraW5kIG9mIG51bWJlciAtLQorICAgaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCAtLSBv ciBhIHZhcmlhYmxlLCBmdW5jdGlvbiwgbWFjcm8sIG9yCisgICBTLUV4cHJlc3Npb24gdGhhdCBy ZXR1cm5zIGEgbnVtYmVyOyAidm5hbWUiIG1lYW5zIHZhcmlhYmxlIG5hbWUsCisgICAiZnBudW1i ZXIiIG1lYW5zIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChvciBhbnl0aGluZyB0aGF0IHJlc29s dmVzIHRvCisgICBvbmUpLCBhbmQgImludGVnZXIiIG1lYW5zIGludGVnZXIgKG9yIGFueXRoaW5n IHRoYXQgcmVzb2x2ZXMgdG8gb25lKS4KKyAgICJ0cnV0aHZhbHVlIiBtZWFucyBhbnl0aGluZyB0 aGF0IHJlc29sdmVzIHRvIGEgdmFsdWUgb2YgemVybyBvciBhbgorICAgZW1wdHkgdmFsdWUgKHdo aWNoIGluZGljYXRlcyBmYWxzZSkgb3IgYSBub256ZXJvIHZhbHVlICh3aGljaCBpbmRpY2F0ZXMK KyAgIHRydWUpLiAiYW55IiBtZWFucyBhbnkga2luZCBvZiB2YWx1ZSwgaW5jbHVkaW5nIG5vbmUg YXQgYWxsLgorCisgIE9wZXJhdG9yICBOdW1iZXIgb2Ygb3BlcmFuZHMgICBUeXBlIG9mIG9wZXJh bmRzICAgIFJldHVybnMKKyAgRVZBTCAgKC4pIDAgb3IgbW9yZSAgICAgICAgICAgIFMtRXhwcmVz c2lvbiAgICAgICAgTGFzdCB2YWx1ZSAoZGVmYXVsdCBOSUwpCisgIFNUUklORyAgICAxICAgICAg ICAgICAgICAgICAgICBTLUV4cHJlc3Npb24gICAgICAgIHN0cmluZworICBRVU9URSAoJykgMSAg ICAgICAgICAgICAgICAgICAgd29yZCAgICAgICAgICAgICAgICBzdHJpbmcKKyAgU0VUUSAgICAg IDAgb3IgbW9yZSAgICAgICAgICAgIHZuYW1lIHZhbHVlIHBhaXJzICAgTGFzdCB2YWx1ZSAoZGVm YXVsdCBOSUwpCisgIExFVCAgICAgICAwIG9yIG1vcmUgICAgICAgICAgICB2bmFtZSB2YWx1ZSBw YWlycyAgIExhc3QgdmFsdWUgKGRlZmF1bHQgTklMKQorICArICAgICAgICAgMCBvciBtb3JlICAg ICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1iZXIgICAgIChkZWZhdWx0IDApCisgIC0g ICAgICAgICAwIG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51bWJlciAg ICAgKGRlZmF1bHQgMCkKKyAgKiAgICAgICAgIDAgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAg ICAgICAgICAgICAgbnVtYmVyICAgICAoc2VlIG5vdGUgKDEpKQorICAvICAgICAgICAgMiBvciBt b3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1iZXIKKyAgXiAgICAgICAgIDIg b3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVyCisgICsrICAgICAg ICAxIG9yIG1vcmUgICAgICAgICAgICB2bmFtZSB2YWx1ZSBwYWlycyAgIFJlc3VsdCBvZiBsYXN0 IGluY3JlbWVudAorICAtLSAgICAgICAgMSBvciBtb3JlICAgICAgICAgICAgdm5hbWUgdmFsdWUg cGFpcnMgICBSZXN1bHQgb2YgbGFzdCBkZWNyZW1lbnQKKyAgQUJTICAgICAgIDEgICAgICAgICAg ICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVyCisgIE1BWCAgICAgICAxIG9yIG1v cmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIG51bWJlcgorICBNSU4gICAgICAgMSBv ciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICBudW1iZXIKKyAgTU9EICglKSAg IDIgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgbnVtYmVyCisgIEZMT0FU ICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIGZwbnVtYmVyCisg IFRSVU5DQVRFICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIGludGVn ZXIKKyAgQ0VJTElORyAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAg aW50ZWdlcgorICBGTE9PUiAgICAgMSAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgICAgICAg ICAgICBpbnRlZ2VyCisgIFJPVU5EICAgICAxICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAg ICAgICAgICAgIGludGVnZXIKKyAgU1FSVCAgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJl ciAgICAgICAgICAgICAgZnBudW1iZXIKKyAgRVhQICAgICAgIDEgICAgICAgICAgICAgICAgICAg IG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIKKyAgU0lOICAgICAgIDEgICAgICAgICAgICAg ICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIKKyAgQ09TICAgICAgIDEgICAgICAg ICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIKKyAgVEFOICAgICAgIDEg ICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIKKyAgTE9HICAg ICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1iZXIKKyAg TE9HMTAgICAgIDEgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAgZnBudW1i ZXIKKyAgPSAoPT0pICAgIDEgb3IgbW9yZSAgICAgICAgICAgIG51bWJlciAgICAgICAgICAgICAg dHJ1dGh2YWx1ZQorICAhPSAgICAgICAgMSBvciBtb3JlICAgICAgICAgICAgbnVtYmVyICAgICAg ICAgICAgICB0cnV0aHZhbHVlCisgIDwgICAgICAgICAxIG9yIG1vcmUgICAgICAgICAgICBudW1i ZXIgICAgICAgICAgICAgIHRydXRodmFsdWUKKyAgPD0gICAgICAgIDEgb3IgbW9yZSAgICAgICAg ICAgIG51bWJlciAgICAgICAgICAgICAgdHJ1dGh2YWx1ZQorICA+ICAgICAgICAgMSBvciBtb3Jl ICAgICAgICAgICAgbnVtYmVyICAgICAgICAgICAgICB0cnV0aHZhbHVlCisgID49ICAgICAgICAx IG9yIG1vcmUgICAgICAgICAgICBudW1iZXIgICAgICAgICAgICAgIHRydXRodmFsdWUKKyAgQU5E ICgmJikgIDEgb3IgbW9yZSAgICAgICAgICAgIHRydXRodmFsdWUgICAgICAgICAgdHJ1dGh2YWx1 ZQorICBPUiAgKHx8KSAgMSBvciBtb3JlICAgICAgICAgICAgdHJ1dGh2YWx1ZSAgICAgICAgICB0 cnV0aHZhbHVlCisgIFhPUiAgICAgICAyICAgICAgICAgICAgICAgICAgICB0cnV0aHZhbHVlICAg ICAgICAgIHRydXRodmFsdWUKKyAgTk9UICghKSAgIDEgICAgICAgICAgICAgICAgICAgIHRydXRo dmFsdWUgICAgICAgICAgdHJ1dGh2YWx1ZQorICAmICAgICAgICAgMSBvciBtb3JlICAgICAgICAg ICAgbnVtYmVyIChzZWUgbm90ZSAyKSBpbnRlZ2VyCisgIHwgICAgICAgICAxIG9yIG1vcmUgICAg ICAgICAgICBudW1iZXIgKHNlZSBub3RlIDIpIGludGVnZXIKKyAgIyAgICAgICAgIDIgICAgICAg ICAgICAgICAgICAgIG51bWJlciAoc2VlIG5vdGUgMikgaW50ZWdlcgorICB+ICAgICAgICAgMSAg ICAgICAgICAgICAgICAgICAgbnVtYmVyIChzZWUgbm90ZSAyKSBpbnRlZ2VyCisgIElGICAgICAg ICAyIG9yIDMgICAgICAgICAgICAgICB0cnV0aHZhbHVlLGFueSxhbnkgIGFueQorCisgICBPcGVy YXRvcnMgdGhhdCBkb24ndCByZXF1aXJlIGFueSBhcmd1bWVudHMgcmV0dXJuIHRoZSBkZWZhdWx0 IHZhbHVlcworICAgc2hvd24uCisKKyAgICAxLiBUaGUgdmFsdWUgb2YgIioiLCB3aGVuIHVzZWQg YXMgYW4gb3BlcmFuZCwgaXMgaW5pdGlhbGx5ICIxIiBhbmQgdGhlCisgICAgICAgdmFsdWUgb2Yg dGhlIG1vc3QgcmVjZW50IFMtRXhwcmVzc2lvbiB0aGVyZWFmdGVyLCBhcyBpbiBGcmFueiBMaXNw LgorICAgICAgIFRoaXMgaXMgaGFuZHkgd2hlbiBkb2luZyBhIHNlcmllcyBvZiBjYWxjdWxhdGlv bnMgYnkgaGFuZDoKKyAgQy1LZXJtaXQ+KCogMTMyNzIuNDIgMC40MCkKKyAgIDUzMDguOTY4Cisg IEMtS2VybWl0PigvICogMikKKyAgIDI2NTQuNDg0MAorICBDLUtlcm1pdD4KKworICAgIDIuIFRo ZSBiaXR3aXNlIG9wZXJhdG9ycyBjb2VyY2UgdGhlaXIgb3BlcmFuZHMgdG8gaW50ZWdlciBieQor ICAgICAgIHRydW5jYXRpb24uCisKKyAgIFsgWzUxNl1Ub3AgXSBbIFs1MTddQ29udGVudHMgXSBb IFs1MThdQy1LZXJtaXQgSG9tZSBdIFsgWzUxOV1LZXJtaXQKKyAgIEhvbWUgXQorCis5LjUuIFZh cmlhYmxlcworCisgICBBcyBub3RlZCBlbHNld2hlcmUgaW4gdGhpcyBkaXNjdXNzaW9uLCBhbGwg YmFja3NsYXNoIGl0ZW1zICh2YXJpYWJsZXMKKyAgIHN1Y2ggYXMgXCVhLCBtYWNybyBwYXJhbWV0 ZXJzIHN1Y2ggYXMgXCUxLCBhcnJheSBlbGVtZW50cyBzdWNoIGFzCisgICBcJmFbXCVpXSwgYnVp bHQtaW4gdmFyaWFibGVzIHN1Y2ggYXMgXHYobmRhdGUpLCBidWlsdC1pbiBmdW5jdGlvbnMgc3Vj aAorICAgYXMgXGZqb2luKCksIG1hY3JvIG5hbWVzIGVuY2xvc2VkIGluIFxtKCksIFxzKCksIG9y IFw6KCksIGV0YykgYXJlCisgICBldmFsdWF0ZWQgYXQgInRvcCBsZXZlbCIgYmVmb3JlIHRoZSBT LUV4cHJlc3Npb24gaXMgc2VudCB0byB0aGUKKyAgIFMtRXhwcmVzc2lvbiByZWFkZXIuIFRvIHVz ZSBhIGJhY2tzbGFzaCB2YXJpYWJsZSBhcyB0aGUgdGFyZ2V0IG9mIGFuCisgICBhc3NpZ25tZW50 IChlLmcuIGJ5IFNFVFEsIExFVCwgKyssIG9yIC0tKSwgeW91IG11c3QgZG91YmxlIHRoZQorICAg YmFja3NsYXNoLCBlLmcuIChzZXRxIFxcJXIgMTIzNCkuIFRoaXMgaXMgZGlzY3Vzc2VkIGF0IGdy ZWF0ZXIgbGVuZ3RoCisgICBpbiB0aGUgbmV4dCBzZWN0aW9uLgorCisgICBUaHVzIFMtRXhwcmVz c2lvbiByZWFkZXIgZ2VuZXJhbGx5IGRlYWxzIG9ubHkgd2l0aCBtYWNybyBuYW1lcyAobm90Cisg ICBiYWNrc2xhc2ggaXRlbXMpIGFzIHZhcmlhYmxlcy4gSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVy c3RhbmQgaG93IHRoZQorICAgcmVhZGVyIGhhbmRsZXMgbWFjcm8gbmFtZXMuIFRoZXJlIGFyZSBm dW5kYW1lbnRhbGx5IHR3byBraW5kcyBvZgorICAgUy1FeHByZXNzaW9uczogdGhvc2UgdGhhdCBj b250YWluIGEgc2luZ2xlIGVsZW1lbnQsIHN1Y2ggYXM6CisKKyAgKGZvbykKKworICAgYW5kIHRo b3NlIHRoYXQgY29udGFpbiBtb3JlIHRoYW4gb25lIGVsZW1lbnQ6CisKKyAgKGZvbyBhIGIgYykK KworICAgSWYgYW4gUy1FeHByZXNzaW9uIGNvbnRhaW5zIG9ubHkgb25lIGVsZW1lbnQsIGFuZCBp dCBpcyB0aGUgbmFtZSBvZiBhCisgICBtYWNybywgdGhlIG1hY3JvJ3MgZGVmaW5pdGlvbiBpcyBl eGFtaW5lZC4gSWYgdGhlIGRlZmluaXRpb24gaXMgYQorICAgbnVtYmVyIChpbnRlZ2VyIG9yIGZs b2F0aW5nLXBvaW50LCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSksIHRoZW4gdGhpcworICAgYmVjb21l cyB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uIElmIHRoZSBkZWZpbml0aW9uIHN0YXJ0cyB3 aXRoICcKKyAgIChhcG9zdHJvcGhlKSwgdGhlbiB0aGUgcXVvdGVkIHdvcmQgb3Igc3RyaW5nIGlz IHRoZSB2YWx1ZSBvZiB0aGUKKyAgIGV4cHJlc3Npb24gKGV4cGxhaW5lZCBpbiBbNTIwXVNlY3Rp b24gOS44KS4gT3RoZXJ3aXNlLCB0aGUgbWFjcm8gaXMKKyAgIGFzc3VtZWQgdG8gYmUgY29tcG9z ZWQgb2YgS2VybWl0IGNvbW1hbmRzIChwb3NzaWJseSBpbmNsdWRpbmcKKyAgIFMtRXhwcmVzc2lv bnMpLCB3aGljaCBhcmUgZXhlY3V0ZWQuIElmIHRoZSBtYWNybyBoYXMgYSBSRVRVUk4gdmFsdWUs IG9yCisgICBpdCBleGVjdXRlcyBhbiBTLUV4cHJlc3Npb24gYXMgaXRzIGxhc3QgY29tbWFuZCwg dGhlIHJlc3VsdCBiZWNvbWVzIHRoZQorICAgdmFsdWUgb2YgdGhlIFMtRXhwcmVzc2lvbjsgb3Ro ZXJ3aXNlIHRoZSByZXN1bHQgaXMgZW1wdHkuCisKKyAgIEZvciBTLUV4cHJlc3Npb25zIHRoYXQg Y29udGFpbiBtb3JlIHRoYW4gb25lIGVsZW1lbnQsIGFuZCB0aGUgZmlyc3QKKyAgIGVsZW1lbnQg aXMgdGhlIG5hbWUgb2YgYSBtYWNybywgdGhlbiB0aGlzIG1hY3JvIGlzIGV4ZWN1dGVkIHdpdGgg dGhlCisgICBhcmd1bWVudHMgdGhhdCBhcmUgZ2l2ZW4sIGFmdGVyIHRoZSBhcmd1bWVudHMgYXJl IGV2YWx1YXRlZCBieSB0aGUKKyAgIFMtRXhwcmVzc2lvbiByZWFkZXIuIExpa2V3aXNlLCBJZiB0 aGUgZmlyc3QgZWxlbWVudCBpcyBhIGJ1aWx0LWluCisgICBvcGVyYXRvciwgdGhlbiBpdCBpcyBh cHBsaWVkIHRvIHRoZSBvcGVyYW5kcyBhZnRlciB0aGV5IGFyZSBldmFsdWF0ZWQuCisgICBJbiBi b3RoIGNhc2VzLCBlYWNoIG9wZXJhbmQgaXMgZmVkIHRvIHRoZSBTLUV4cHJlc3Npb24gcmVhZGVy CisgICByZWN1cnNpdmVseSBmb3IgZXZhbHVhdGlvbi4gSWYgYW4gb3BlcmFuZCBpcyBhIG51bWJl ciBvciBhIHF1b3RlZAorICAgc3RyaW5nLCBpdCBpcyB1c2VkIGFzLWlzLiBCdXQgaWYgaXQncyBh IG1hY3JvIG5hbWUsIHRoaXMgZGVnZW5lcmF0ZXMKKyAgIGludG8gdGhlIGZpcnN0IGNhc2UsIGFu ZCB0aGUgcHJldmlvdXMgcGFyYWdyYXBoIGFwcGxpZXMuCisKKyAgIEV4YW1wbGVzOgorCisgIGRl ZmluZSBmb28gMTIzCisgIChmb28pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1 bHQ6IDEyMworICBkZWZpbmUgZm9vICdhYmMKKyAgKGZvbykgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlc3VsdDogYWJjCisgIGRlZmluZSBmb28gJyhvbmUgdHdvIHRocmVlKQorICAo Zm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0OiBvbmUgdHdvIHRocmVl CisgIGRlZmluZSBmb28gcmV0dXJuIFxmcmFuZG9tKDEwMDApCisgIChmb28pICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6IDcxMyAob3Igb3RoZXIgbnVtYmVyKQorICBkZWZp bmUgZm9vICgrIGEgYikKKyAgKGZvbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl c3VsdDogVGhlIHN1bSBvZiBhIGFuZCBiCisKKyAgIEEgbW9yZSBkaWZmaWN1bHQgZXhhbXBsZToK KworICBkZWZpbmUgZm9vIGFiYworICAoZm9vKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVzdWx0OiA/Pz8KKworICAgVGhlIHJlc3VsdCBpbiB0aGUgbGFzdCBleGFtcGxlIGRlcGVu ZHMgb24gdGhlIGRlZmluaXRpb24gb2YgYWJjOgorCisgICAgICogSWYgaXQgaGFzIG5vIGRlZmlu aXRpb24sIGFuIGVycm9yIG9jY3Vyczsgb3RoZXJ3aXNlOgorICAgICAqIElmIHRoZSBkZWZpbml0 aW9uIGlzIGFuIFMtRXhwcmVzc2lvbiwgdGhlIHJlc3VsdCBpcyB0aGUKKyAgICAgICBTLUV4cHJl c3Npb24ncyB2YWx1ZTsgb3RoZXJ3aXNlOgorICAgICAqIElmIHRoZSBkZWZpbml0aW9uIGNvbnNp c3RzIG9mIEtlcm1pdCBjb21tYW5kcywgdGhleSBhcmUgZXhlY3V0ZWQuCisgICAgICAgQnV0IGlu IHRoaXMgY2FzZSAiKGZvbykiIHByb2R1Y2VzIHRoZSBlbXB0eSByZXN1bHQsIGJlY2F1c2UgaXQK KyAgICAgICBkb2Vzbid0IFJFVFVSTiBhbnl0aGluZy4KKworICAgVGhlIHVzZSBvZiBtYWNyb3Mg YXMgUy1FeHByZXNzaW9uIG9wZXJhdG9ycyBpcyBkZXNjcmliZWQgaW4KKyAgIFs1MjFdU2VjdGlv biA5LjguCisKKyAgIFsgWzUyMl1Ub3AgXSBbIFs1MjNdQ29udGVudHMgXSBbIFs1MjRdQy1LZXJt aXQgSG9tZSBdIFsgWzUyNV1LZXJtaXQKKyAgIEhvbWUgXQorCis5LjYuIEFzc2lnbm1lbnRzIGFu ZCBTY29wZQorCisgICBUaGUgYXNzaWdubWVudCBvcGVyYXRvcnMgU0VUUSBhbmQgTEVUIGFwcGx5 IHRvIGdsb2JhbCBhbmQgbG9jYWwKKyAgIHZhcmlhYmxlcywgcmVzcGVjdGl2ZWx5LiBTRVRRIGFu ZCBMRVQgYXJlIHN0YW5kYXJkIExpc3Agb3BlcmF0b3JzCisgICBhZGFwdGVkIHRvIEtlcm1pdCBz Y29waW5nIHJ1bGVzLiBXaGVuIHRoZSBvcGVyYW5kcyBhcmUgbnVtZXJpYyBvcgorICAgYXJpdGht ZXRpYywgU0VUUSBpcyBlcXVpdmFsZW50IHRvIEtlcm1pdCdzIEVWQUxVQVRFIGNvbW1hbmQ6CisK KyAgKHNldHEgYSAoKyAxIDIpKQorICBldmFsdWF0ZSBhIDEgKyAyCisKKyAgIFdoZW4gdGhlIG9w ZXJhbmQgaXMgYSBzdHJpbmcsIFNFVFEgaXMgZXF1aXZhbGVudCB0byBERUZJTkU6CisKKyAgKHNl dHEgYSAnKHRoaXMgaXMgYSBzdHJpbmcpKQorICBkZWZpbmUgYSB0aGlzIGlzIGEgc3RyaW5nCisK KyAgIEluIHRoZSBmaXJzdCBjYXNlLCBib3RoIHN0YXRlbWVudHMgY3JlYXRlIGEgbWFjcm8gbmFt ZWQgImEiIHdpdGggYQorICAgdmFsdWUgb2YgMy4gQnV0IGluIG5laXRoZXIgY2FzZSBpcyB0aGUg bWFjcm8gImEiIG5lY2Vzc2FyaWx5IGdsb2JhbC4gSWYKKyAgIGVpdGhlciBvZiB0aGVzZSBjb21t YW5kcyBleGVjdXRlcyBpbiBhbiBlbnZpcm9ubWVudCAoaS5lLiBtYWNybworICAgaW52b2NhdGlv biBsZXZlbCkgd2hlcmUgYSAibG9jYWwgYSIgY29tbWFuZCBoYXMgYmVlbiBnaXZlbiwgdGhlICJh IgorICAgbWFjcm8gaXMgZ2xvYmFsIHRvIHRoYXQgZW52aXJvbm1lbnQsIGJ1dCBpcyBub3Qgdmlz aWJsZSBvdXRzaWRlIGl0LgorCisgICBMRVQgaXMgZXF1aXZhbGVudCB0byB0aGUgS2VybWl0IExP Q0FMIGNvbW1hbmQsIGZvbGxvd2VkIGJ5IHRoZQorICAgY29ycmVzcG9uZGluZyBFVkFMVUFURToK KworICAobGV0IGEgKCsgMSAyKSkKKworICAgaXMgZXF1aXZhbGVudCB0bzoKKworICBsb2NhbCBh CisgIGV2YWx1YXRlIGEgMSArIDIKKworICAgQWdhaW4sICJsb2NhbCIgaW4gdGhpcyBjb250ZXh0 IGFwcGxpZXMgdG8gdGhlIEtlcm1pdCBtYWNybyBpbnZvY2F0aW9uCisgICBzdGFjaywgbm90IHRv IHRoZSBTLUV4cHJlc3Npb24gbmVzdGluZyBsZXZlbC4gVG8gaWxsdXN0cmF0ZSwgcmVjYWxsIG91 cgorICAgIm5ld2FyZWEiIG1hY3JvOgorCitkZWYgbmV3YXJlYSB7CisgICAgKGxldCBhIFwlMSBi IFwlMiBjIFwlMykKKyAgICAobGV0IHMgKC8gKCsgYSBiIGMpIDIuMCkpCisgICAgKHNxcnQgKCog cyAoLSBzIGEpICgtIHMgYikgKC0gcyBjKSkpCit9CisKKyAgIEJlY2F1c2UgU0VUUSBhbmQgTEVU IGV4cHJlc3Npb25zIHJldHVybiBhIHZhbHVlLCB0aGV5IGNhbiBiZSBwbGFjZWQKKyAgIHdpdGhp biBhIGxhcmdlciBTLUV4cHJlc3Npb24uIEluIHRoaXMgY2FzZSB3ZSBjYW4gcmVwbGFjZSB0aGUg Zmlyc3QKKyAgIHJlZmVyZW5jZSB0byB0aGUgInMiIHZhcmlhYmxlIGJ5IGl0cyBkZWZpbmluZyBl eHByZXNzaW9uOgorCitkZWYgbmV3YXJlYSB7CisgICAgKGxldCBhIFwlMSBiIFwlMiBjIFwlMykK KyAgICAoc3FydCAoKiAobGV0IHMgKC8gKCsgYSBiIGMpIDIuMCkpICgtIHMgYSkgKC0gcyBiKSAo LSBzIGMpKSkKK30KKworICAgVGhpcyB3b3VsZCBub3Qgd29yayBpZiBMRVQgd2VyZSBsb2NhbCB0 byB0aGUgUy1FeHByZXNzaW9uLCBidXQgaXQgd29ya3MKKyAgIG5pY2VseSBpbiB0aGUgY29udGV4 dCBvZiBLZXJtaXQgbWFjcm9zLiBUaGUgcHJldmlvdXMgZGVmaW5pdGlvbiBpcworICAgZXF1aXZh bGVudCB0bzoKKworZGVmIG5ld2FyZWEgeworICAgIGxvY2FsIGEgYiBjIHMKKyAgICAoc2V0cSBh IFwlMSBiIFwlMiBjIFwlMykKKyAgICAoc3FydCAoKiAoc2V0cSBzICgvICgrIGEgYiBjKSAyLjAp KSAoLSBzIGEpICgtIHMgYikgKC0gcyBjKSkpCit9CisKKyAgIEluIGJvdGggY2FzZXMsIHRoZSB2 YXJpYWJsZXMgYSwgYiwgYywgYW5kIHMgYXJlIGxvY2FsIHRvIHRoZSAibmV3YXJlYSIKKyAgIG1h Y3JvLCBhbmQgZ2xvYmFsIHdpdGhpbiBpdC4KKworICAgTXVsdGlwbGUgYXNzaWdubWVudHMgY2Fu IGJlIGhhbmRsZWQgaW4gc2V2ZXJhbCB3YXlzLiBIZXJlIGlzIHRoZQorICAgb2J2aW91cyB3YXkg dG8gaW5pdGlhbGl6ZSBhIHNlcmllcyBvZiB2YXJpYWJsZXMgdG8gdGhlIHNhbWUgdmFsdWU6CisK KyAgKHNldHEgYSAwKQorICAoc2V0cSBiIDApCisgIChzZXRxIGMgMCkKKyAgKHNldHEgcyAwKQor CisgICBIZXJlIGlzIGEgbW9yZSBjb21wYWN0IGFuZCBlZmZpY2llbnQgd2F5IG9mIGRvaW5nIHRo ZSBzYW1lIHRoaW5nOgorCisgIChzZXRxIGEgMCBiIDAgYyAwIHMgMCkKKworICAgSG93ZXZlciwg aW4gY2FzZSB0aGUgdmFsdWUgd2FzIG1vcmUgY29tcGxleCwgaXQncyBiZXR0ZXIgdG8gcHV0IG9u bHkKKyAgIG9uZSBjb3B5IG9mIGl0IGluIHRoZSBTLUV4cHJlc3Npb247IGluIHRoaXMgY2FzZSB3 ZSByZWx5IG9uIHRoZSBmYWN0CisgICB0aGF0IFNFVFEgcmV0dXJucyB0aGUgdmFsdWUgb2YgaXRz IGxhc3QgYXNzaWdubWVudDoKKworICAoc2V0cSBhIChzZXRxIGIgKHNldHEgYyAoc2V0cSBzICgq IHggKF4geSAyKSkpKSkpCisKKyAgIFNpbWlsYXJseSwgdG8gc2V0IGEgc2VyaWVzIG9mIHZhcmlh YmxlcyB0byB4LCB4KzEsIHgrMiwgLi4uCisKKyAgKHNldHEgYyAoKyAoc2V0cSBiICgrIChzZXRx IGEgKCsgKHNldHEgcyB4KSAxKSkgMSkpIDEpKQorCisgICBJbiB0aGUgbGFzdCBleGFtcGxlLCB5 b3UgY2FuIHNlZSB3aHkgImxhc3QiIGRvZXMgbm90IGFsd2F5cyBjb3JyZXNwb25kCisgICB0byAi cmlnaHRtb3N0IiAodGhlIGxlZnRtb3N0IHZhcmlhYmxlICJjIiBpcyBhc3NpZ25lZCBsYXN0KS4K KworICAgSWYgeW91IGFyZSB3b3JraW5nIHdpdGggYmFja3NsYXNoIHZhcmlhYmxlcyBsaWtlIFwl YSBvciBhcnJheSBlbGVtZW50cworICAgbGlrZSBcJmFbMV0sIHJlbWVtYmVyIHR3byBydWxlczoK KyAgICAxLiBEb24ndCBwdXQgc3BhY2VzIGluc2lkZSBhcnJheSBicmFja2V0cy4KKyAgICAyLiBZ b3UgbXVzdCBkb3VibGUgdGhlIGJhY2tzbGFzaCB3aGVuIHVzaW5nIFNFVFEsIExFVCwgKyssIG9y IC0tIHRvCisgICAgICAgYXNzaWduIGEgdmFsdWUgdG8gYSBiYWNrc2xhc2ggdmFyaWFibGUuCisK KyAgIEV4YW1wbGVzIG9mIGFzc2lnbmluZyB0byBhIGJhY2tzbGFzaCB2YXJpYWJsZToKKworICAo c2V0cSB4IDEpCisgIChzZXRxIFxcJWEgMCkKKyAgKHNldHEgXFwmYVt4KzFdIDEpCisgICgrKyBc XCV4KQorICAoLS0gXFwmYVt4KzJdKQorCisgICBFeGFtcGxlcyBvZiByZWZlcnJpbmcgdG8gYSBi YWNrc2xhc2ggdmFyaWFibGUncyB2YWx1ZToKKworICAoc2V0cSBhICgrIFwlYSAxKSkKKyAgKHNl dHEgYiAoKyBcJWEgXCZhWzFdKSkKKyAgKCsrIGEgXCV4KQorICAoLS0gYiBcJmFbMV0pCisKKyAg IFRoZSBzcGVjaWFsIG5vdGF0aW9uIGlzIHJlcXVpcmVkIGJlY2F1c2UgYWxsIGJhY2tzbGFzaGVk IGl0ZW1zIChcJXgKKyAgIHZhcmlhYmxlcywgYXJyYXkgZWxlbWVudHMsIGJ1aWx0LWluIFx2KHh4 eCkgdmFyaWFibGVzLCBhbmQgXGZ4eHgoKQorICAgZnVuY3Rpb24gaW52b2NhdGlvbnMpIGFyZSBl dmFsdWF0ZWQgaW4gYSBzaW5nbGUgcGFzcyBCRUZPUkUgdGhlCisgICBTLUV4cHJlc3Npb24gaXMg ZXhlY3V0ZWQ7IGFueSBvdGhlciBhcHByb2FjaCB3b3VsZCByZXN1bHQgaW4KKyAgIHVuYWNjZXB0 YWJsZSBwZXJmb3JtYW5jZS4gU28sIGZvciBleGFtcGxlLCBpbjoKKworICBkZWNsYXJlIFwmYVtd ID0gMSAyIDMKKyAgZGVmaW5lIFwleCA0CisgIGRlZmluZSBcJXkgMAorICAoc2V0cSBcXCV5ICgr IFwleCBcJmFbMV0pKQorCisgICB0aGUgUy1FeHByZXNzaW9uIGJlY29tZXM6CisKKyAgKHNldHEg XCV5ICgrIDQgMSkpCisKKyAgIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBTLUV4cHJlc3Npb24g ZXZhbHVhdG9yLiBJZiB0aGUgYmFja3NsYXNoIGhhZAorICAgbm90IGJlZW4gZG91YmxlZCBvbiB0 aGUgYXNzaWdubWVudCB0YXJnZXQsIHRoZSByZXN1bHQgd291bGQgaGF2ZSBiZWVuOgorCisgIChz ZXRxIDAgKCsgNCAxKSkKKworICAgd2hpY2ggaXMgaWxsZWdhbCBiZWNhdXNlIHlvdSBjYW4ndCBh c3NpZ24gYSB2YWx1ZSB0byBhIG51bWJlci4KKyAgIENvbnZlcnNlbHksIGlmIGJhY2tzbGFzaGVz IHdlcmUgZG91YmxlZCBvbiByaWdodC1oYW5kLXNpZGUgdmFsdWVzOgorCisgIChzZXRxIFxcJXkg KCsgXFwleCBcXCZhWzFdKQorCisgICB0aGlzIHRvbywgd291bGQgZ2l2ZSBhbiBlcnJvciAobm90 IG51bWVyaWMgLSAiXCV4IikuCisKKyAgIElmIHlvdSBvbWl0IHRoZSBkb3VibGUgYmFja3NsYXNo IGluIHRoZSBhc3NpZ25tZW50IHRhcmdldCwgdGhlIHJlc3VsdAorICAgZGVwZW5kcyBvbiB3aGV0 aGVyIHRoZSB2YXJpYWJsZSBhbHJlYWR5IGhhcyBhIHZhbHVlOgorCisgIChzZXRxIFwlYSAoKiAz IDMpKQorCisgICBJZiBcJWEgaGFzIGEgbm9uLW51bWVyaWMgc2luZ2xlLXdvcmQgdmFsdWUsIHRo ZW4gdGhpcyBiZWNvbWVzIHRoZSBuYW1lCisgICBvZiB0aGUgdmFyaWFibGUgdGhhdCBpcyBhc3Np Z25lZCBieSBTRVRRLiBUbyBpbGx1c3RyYXRlOgorCisgIGRlZmluZSBcJWEgZm9vCisgIGVjaG8g XCVhCisgIGZvbworICAoc2V0cSBcJWEgKCogMyAzKSkKKyAgZWNobyBcJWEKKyAgZm9vCisgIHNo b3cgbWFjcm8gZm9vCisgIGZvbyA9IDkKKworICAgSWYgXCVhIGhhcyBubyB2YWx1ZSwgYSBudW1l cmljIHZhbHVlLCBvciBhIG11bHRpd29yZCB2YWx1ZSwgYW4gImludmFsaWQKKyAgIGFzc2lnbm1l bnQiIGVycm9yIG9jY3Vycy4KKworICAgWyBbNTI2XVRvcCBdIFsgWzUyN11Db250ZW50cyBdIFsg WzUyOF1DLUtlcm1pdCBIb21lIF0gWyBbNTI5XUtlcm1pdAorICAgSG9tZSBdCisKKzkuNy4gQ29u ZGl0aW9uYWwgRXhwcmVzc2lvbnMKKworICAgVGhlIElGIG9wZXJhdG9yIHByb3ZpZGVzIGEgY29t cGFjdCBmb3JtIG9mIGRlY2lzaW9uLW1ha2luZyB3aXRoaW4KKyAgIFMtRXhwcmVzc2lvbnMuIEFu IElGIGV4cHJlc3Npb24gY2FuIHN0YW5kIHdoZXJldmVyIGEgbnVtYmVyIG1pZ2h0CisgICBzdGFu ZCwgYXMgbG9uZyBpcyBpdCByZXR1cm5zIGEgbnVtYmVyLiBIZXJlJ3MgYSBxdWljayB3YXkgdG8g b2J0YWluIHRoZQorICAgYXZlcmFnZSB2YWx1ZSBvZiBhbGwgdGhlIGVsZW1lbnRzIGluIGFuIGFy cmF5IHRoYXQgY29udGFpbnMgb25seQorICAgbnVtYmVyczoKKworICAoLyAoKyBcZmpvaW4oJmEp KSAoZmxvYXQgXGZkaW0oJmEpKSkKKworICAgVGhpcyByZXN1bHRzIGluIGEgIkRpdmlkZSBieSB6 ZXJvIiBlcnJvciBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuIElmIHlvdQorICAgd2FudCB0byBkZWZp bmUgdGhlIGF2ZXJhZ2UgdmFsdWUgb2YgYW4gZW1wdHkgYXJyYXkgdG8gYmUgMCBpbnN0ZWFkIG9m CisgICBnZXR0aW5nIGFuIGVycm9yLCB5b3UgY2FuIHVzZSBJRiB0byBjaGVjayB0aGUgYXJyYXkg c2l6ZToKKworICAoaWYgXGZkaW0oJmEpICgvICgrIFxmam9pbigmYSkpIChmbG9hdCBcZmRpbSgm YSkpKSAwKQorCisgICBvciBlcXVpdmFsZW50bHk6CisKKyAgKGlmIChub3QgXGZkaW0oJmEpKSAw ICgvICgrIFxmam9pbigmYSkpIChmbG9hdCBcZmRpbSgmYSkpKSkKKworICAgT2YgY291cnNlLCBJ RiBjYW4gZml0IGFueXdoZXJlIGVsc2UgaW50byBhbiBTLUV4cHJlc3Npb246CisKKyAgKHNldHEg YSAoKyBiIChpZiAoPCBjIDApIDAgYykpKQorCisgICBhbmQgdGhlIElGIGV4cHJlc3Npb24gY2Fu IGJlIGFzIGNvbXBsZXggYXMgeW91IGxpa2U6CisKKyAgKHNldHEgYSAoKyBiIChpZiAoYW5kIChv ciAoPiB4IDApICg+IHkgMCkpICg8IGMgMCkgKD4gZCAxKSAoIT0gZSAwKSkgMSAwKSkpCisKKyAg IGFuZCB0aGUgInRoZW4iIGFuZCAiZWxzZSIgcGFydHMgY2FuIGNvbnRhaW4gbXVsdGlwbGUgUy1F eHByZXNzaW9ucworICAgZW5jbG9zZWQgd2l0aGluIChFVkFMIC4uLik6CisKKyAgKGlmIHggKGV2 YWwgKC4uLikgKC4uLikgKC4uLikpIChldmFsICguLi4pICguLi4pICguLi4pKSkKKworICAgQU5E IGFuZCBPUiBvcGVyYXRvcnMgYXJlIGd1YXJhbnRlZWQgdG8gInNob3J0IGNpcmN1aXQiLiBJZiBh bnkgb3BlcmFuZAorICAgb2YgQU5EIGlzIGZhbHNlLCBub25lIG9mIHRoZSBzdWJzZXF1ZW50IG9w ZXJhbmRzIGlzIGV2YWx1YXRlZDsKKyAgIGxpa2V3aXNlLCBpZiBhbiBPUiBvcGVyYW5kIGlzIHRy dWUsIG5vIGZ1cnRoZXIgb3BlcmFuZHMgYXJlIGV2YWx1YXRlZC4KKworICAgQmVhciBpbiBtaW5k IHRoYXQgdGhlIFMtRXhwcmVzc2lvbiBJRiBpcyBub3QgdGhlIHNhbWUgYXMgS2VybWl0IElGOyB0 aGUKKyAgIGNvbmRpdGlvbiBpcyBvbmx5IGFsbG93ZWQgdG8gYmUgYW4gUy1FeHByZXNzaW9uIG9y IGEgdmFyaWFibGUgb3IKKyAgIG51bWJlciwgbm90IHRoZSB3aG9sZSBsaXN0IG9mIHBvc3NpYmls aXRpZXMgeW91IHNlZSB3aGVuIHlvdSB0eXBlICJpZgorICAgPyIgYXQgdGhlIEMtS2VybWl0PiBw cm9tcHQuIEJ1dCBrZWVwIHJlYWRpbmcuLi4KKworICAgWyBbNTMwXVRvcCBdIFsgWzUzMV1Db250 ZW50cyBdIFsgWzUzMl1DLUtlcm1pdCBIb21lIF0gWyBbNTMzXUtlcm1pdAorICAgSG9tZSBdCisK KzkuOC4gRXh0ZW5zaWJpbGl0eQorCisgICBUbyBleHRlbmQgdGhlIGNhcGFiaWxpdGllcyBvZiBT LUV4cHJlc3Npb25zLCB5b3UgY2FuIHVzZSBLZXJtaXQgbWFjcm8KKyAgIG5hbWVzIGFzIG9wZXJh dG9ycywgd2l0aCB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOgorCisgICAgICogVGhlIG1hY3Jv IG11c3Qgbm90IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhIGJ1aWx0LWluIG9wZXJhdG9yLgorICAg ICAqIFlvdSBtdXN0IHVzZSB0aGUgZnVsbCBtYWNybyBuYW1lLCBub3QgYW4gYWJicmV2aWF0aW9u LgorCisgICBBbmQgd2l0aCB0aGUgZm9sbG93aW5nIGVuaGFuY2VtZW50OgorCisgICAgICogSWYg dGhlIGxhc3Qgc3RhdGVtZW50IGV4ZWN1dGVkIGJ5IHRoZSBtYWNybyBpcyBhbiBTLUV4cHJlc3Np b24sIGl0cworICAgICAgIHZhbHVlIGlzIHJldHVybmVkIGF1dG9tYXRpY2FsbHkuIEluIG90aGVy IHdvcmRzOgorCisgIGRlZmluZSBidW1wICgrKyBcJTEpCisKKyAgIGlzIGVxdWl2YWxlbnQgdG86 CisKKyAgZGVmaW5lIGJ1bXAgcmV0dXJuIFxmc2V4cHJlc3Npb24oKysgXCUxKQorCisgICBIZXJl J3MgYW4gZXhhbXBsZSBpbiB3aGljaCB3ZSBkZWZpbmUgYSBGSUJPTkFDQ0kgb3BlcmF0b3IgdGhh dCByZXR1cm5zCisgICB0aGUgbnRoIGVsZW1lbnQsIG4gPj0gMCwgb2YgdGhlIEZpYm9uYWNjaSBz ZXJpZXMsIDAgMSAxIDIgMyA1IDggMTMgMjEKKyAgIDM0IDU1LCAuIC4gLiwgaW4gd2hpY2ggdGhl IGZpcnN0IGVsZW1lbnQgaXMgMCwgdGhlIHNlY29uZCBpcyAxLCBhbmQKKyAgIGVhY2ggc3Vic2Vx dWVudCBlbGVtZW50IGlzIHRoZSBzdW0gb2YgdGhlIHR3byBiZWZvcmUgaXQuIFRoaXMgc2VyaWVz CisgICB3YXMgZGV2aXNlZCBieSBMZW9uYXJkbyBQaXNhbm8sIEZpbGl1cyBCb25hY2NpIChGaWJv bmFjY2kgZm9yIHNob3J0KSBpbgorICAgMTIwMiB0byBkZXNjcmliZSBob3cgZmFzdCByYWJiaXRz IGNhbiBicmVlZCwgYW5kIGFsc28gZm9ybXMgdGhlIGJhc2lzCisgICBmb3IgdGhlIEdvbGRlbiBN ZWFuLCB0aGUgYnJhbmNoaW5nIGJlaGF2aW9yIG9mIHBsYW50cywgdGhlIHNwaXJhbCBvZiBhCisg ICBuYXV0aWx1cyBzaGVsbCwgZXRjLiAoVGhhbmtzIHRvIFs1MzRdRGF0IFRodWMgTmd1eWVuIGZv ciBEZWNlbWJlciAyMDAzCisgICBjb3JyZWN0aW9ucyB0byB0aGlzIHNlY3Rpb24hKQorCisgICBX ZSBjYW4gd3JpdGUgYSBGSUJPTkFDQ0kgZnVuY3Rpb24gYXMgYSBtYWNybyBlYXNpbHkgd2l0aCBT LUV4cHJlc3Npb25zOgorCisgIGRlZmluZSBGSUJPTkFDQ0kgeworICAgIChpZiAoPT0gXCUxIDAp IDAKKyAgICAgICAgKGlmICg9PSBcJTEgMSkgMSAoKyAoZmlib25hY2NpICgtIFwlMSAyKSkgKGZp Ym9uYWNjaSAoLSBcJTEgMSkpKSkpCisgIH0KKworICAgWW91IGNhbiByZWFkIHRoaXMgYXM6CisK KyAgICAgSWYgdGhlIGFyZ3VtZW50IChcJTEpIGlzIDAsIHJldHVybiBhIHJlc3VsdCBvZiAwOyBp ZiBpdCBpcyAxLAorICAgICByZXR1cm4gMTsgb3RoZXJ3aXNlOgorICAgICByZXR1cm4gdGhlIHN1 bSBvZiBmaWJvbmFjY2koYXJndW1lbnQgLSAyKSBhbmQgZmlib25hY2NpKGFyZ3VtZW50IC0KKyAg ICAgMSkKKworICAgTm90ZSB0aGF0IGEgUkVUVVJOIHN0YXRlbWVudCBpcyBub3QgbmVlZGVkLCBz aW5jZSBTLUV4cHJlc3Npb25zCisgICBhdXRvbWF0aWNhbGx5IHNldCB0aGUgcmV0dXJuIHZhbHVl IG9mIHRoZWlyIGNvbnRhaW5pbmcgbWFjcm9zLgorCisgICBGb3IgY29tcGFyaXNvbiwgaGVyZSdz IGhvdyBpdCB3b3VsZCBiZSBjb2RlZCB3aXRob3V0IFMtRXhwcmVzc2lvbnM6CisKKyAgZGVmaW5l IEZJQk9OQUNDSSB7CisgICAgICBpZiA9PSBcJTEgMCB7CisgICAgICAgICAgcmV0dXJuIDAKKyAg ICAgIH0gZWxzZSBpZiA9PSBcJTEgMSB7CisgICAgICAgICAgcmV0dXJuIDEKKyAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgcmV0dXJuIFxmZXZhbChcZmV4ZWMoZmlib25hY2NpIFxmZXZhbChcJTEt MikpIC0KKyAgICAgICAgICAgICAgICsgXGZleGVjKGZpYm9uYWNjaSBcZmV2YWwoXCUxLTEpKSkK KyAgICAgIH0KKyAgfQorCisgICBOb3cgd2UgY2FuIHVzZSB0aGUgRklCT05BQ0NJIGZ1bmN0aW9u ICh3aGljaGV2ZXIgd2F5IHlvdSB3cml0ZSBpdCkganVzdAorICAgYXMgaWYgaXQgd2VyZSBhIGJ1 aWx0LWluIG9wZXJhdG9yOgorCisgIChmaWJvbmFjY2kgNikKKworICAgT3I6CisKKyAgKHNldHEg YSAxMCkKKyAgKGZpYm9uYWNjaSBhKQorCisgICBXaXRoaW4gUy1FeHByZXNzaW9ucyBvbmx5IChu b3Qgb3V0c2lkZSB0aGVtKSwgUy1FeHByZXNzaW9ucyB0aGVtc2VsdmVzCisgICBjYW4gYmUgdXNl ZCBhcyBtYWNybyBhcmd1bWVudHM6CisKKyAgKHNldHEgYSAyIGIgNCkKKyAgKHNldHEgeCAoZmli b25hY2NpICgqIGEgYiApKSkKKworICAgVGhlIHZhbHVlIG9mIHRoZSBTLUV4cHJlc3Npb24gKGlu IHRoaXMgY2FzZSAiOCIpLCBhbmQgbm90IHRoZQorICAgUy1FeHByZXNzaW9uIGl0c2VsZiwgaXMg c2VudCB0byB0aGUgbWFjcm8uCisKKyAgIFlvdXIgbWFjcm8gaXMgcmVzcG9uc2libGUgZm9yIGFy Z3VtZW50IHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiBBCisgICByb2J1c3QgRmlib25h Y2NpIG1hY3JvIHdvdWxkIGJlIG1vcmUgbGlrZSB0aGlzOgorCisgIGRlZmluZSBGSUJPTkFDQ0kg eworICAgICAgaWYgPCBcdihhcmdjKSAyIGVuZCAxID9cJTA6IE1pc3NpbmcgYXJndW1lbnQKKyAg ICAgIGlmID4gXHYoYXJnYykgMiBlbmQgMSA/XCUwOiBUb28gbWFueSBhcmd1bWVudHMKKyAgICAg IGlmIG5vdCBpbnRlZ2VyIFwlMSBlbmQgMSA/XCUwOiBJbnRlZ2VycyBvbmx5CisgICAgICBpZiA8 IFwlMSAxIGVuZCAxID9cJTA6IEFyZ3VtZW50IG91dCBvZiByYW5nZQorICAgICAgKGlmICg9PSBc JTEgMCkgMAorICAgICAgICAgKGlmICg9PSBcJTEgMSkgMSAoKyAoZmlib25hY2NpICgtIFwlMSAy KSkgKGZpYm9uYWNjaSAoLSBcJTEgMSkpKSkpCisgIH0KKworICAgUmVjYWxsIHRoYXQgIkVORCBu b256ZXJvLW51bWJlciBbIG1lc3NhZ2UgXSIgY2F1c2VzIGEgbWFjcm8gaW52b2NhdGlvbgorICAg dG8gZmFpbC4gV2hlbiB0aGUgbWFjcm8gaXMgdGhlIG9wZXJhdG9yIGluIGFuIFMtRXhwcmVzc2lv biwgdGhpcyBtYWtlcworICAgdGhlIFMtRXhwcmVzc2lvbiBmYWlsIHRvby4gQWxzbyBub3RlIHRo YXQgb3VyIEZpYm9uYWNjaSBtYWNybyBpcyBqdXN0CisgICBhbiBpbGx1c3RyYXRpb24sIG5vdCBh IHByYWN0aWNhbCBleGFtcGxlLiBTaW5jZSBpdCBpcyByZWN1cnNpdmUgKGNhbGxzCisgICBpdHNl bGYpLCBpdCB3b24ndCB3b3JrIGZvciBsYXJnZSBhcmd1bWVudHMgYmVjYXVzZSB0aGUgY2FsbCBz dGFjayBjYW4KKyAgIGV4Y2VlZCBhdmFpbGFibGUgbWVtb3J5LiBTZWUgWzUzNV1TZWN0aW9uIDku OS4yIGZvciBhIHByYWN0aWNhbAorICAgYWx0ZXJuYXRpdmUuCisKKyAgIEtlcm1pdCBtYWNyb3Ms IHdoZW4gdXNlZCBhcyBTLUV4cHJlc3Npb24gb3BlcmF0b3JzLCBjYW4gZG8gYW55dGhpbmcgYXQK KyAgIGFsbCBleGNlcHQgaW5pdGlhdGUgZmlsZSB0cmFuc2ZlcnM6IHRoZXkgY2FuIHByaW50IG1l c3NhZ2VzIG9uIHRoZQorICAgc2NyZWVuLCByZWFkIGFuZCB3cml0ZSBmaWxlcywgaW50ZXJhY3Qg d2l0aCB0aGUgdXNlciwgYW5kIHNvIG9uLiBGb3IKKyAgIGV4YW1wbGUsIGhlcmUncyBhIG1hY3Jv IEFTS01FIHRoYXQgYXNrcyB5b3UgdG8gZW50ZXIgYSBudW1iZXIsIG1ha2VzCisgICBzdXJlIHRo YXQgeW91IGRpZCwgYW5kIHRoZW4gcmV0dXJucyBpdHMgdmFsdWUgZm9yIHVzZSBpbiB0aGUKKyAg IFMtRXhwcmVzc2lvbjoKKworICBkZWZpbmUgQVNLTUUgeworICAgICAgbG9jYWwgXCVuCisgICAg ICB3aGlsZSB0cnVlIHsKKyAgICAgICAgICBhc2sgXCVuIHsgTnVtYmVyOiB9CisgICAgICAgICAg aWYgbm90IGRlZiBcJW4gY29udGludWUKKyAgICAgICAgICBpZiBub3QgbnVtZXJpYyBcJW4gewor ICAgICAgICAgICAgICBlY2hvIE5vdCBudW1lcmljIC0gIlwlbiIKKyAgICAgICAgICAgICAgY29u dGludWUKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWsKKyAgICAgIH0KKyAgICAgIHJldHVy biBcJW4KKyAgfQorICAoc2V0cSBhICgqIDIgKGFza21lKSkpIDsgR2V0IG51bWJlciBmcm9tIHVz ZXIsIGRvdWJsZSBpdCwgYXNzaWduIHJlc3VsdCB0byBhLgorCisgICBIZXJlJ3MgYSBtYWNybyB5 b3UgY2FuIHVzZSB0byB2YWxpZGF0ZSB0aGF0IGEgbnVtYmVyIGlzIGluIGEgZ2l2ZW4KKyAgIHJh bmdlOgorCisgIGRlZmluZSBpbnJhbmdlIHsKKyAgICAgIGlmICE9IFx2KGFyZ2MpIDQgZW5kIDEg P1wlMDogV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cworICAgICAgaWYgKCA8IFwlMSBcJTIgfHwg PiBcJTEgXCUzICkgcmV0dXJuIDAKKyAgICAgIHJldHVybiAxCisgIH0KKworICAgVGhlIGZpcnN0 IGFyZ3VtZW50IGlzIHRoZSBudW1iZXIgdG8gYmUgY2hlY2tlZCwgdGhlIHNlY29uZCBpcyB0aGUK KyAgIG1pbmltdW0gYWNjZXB0YWJsZSB2YWx1ZSwgdGhlIHRoaXJkIGlzIHRoZSBtYXhpbXVtLiBZ b3UgY2FuIHVzZSB0aGlzCisgICAoZm9yIGV4YW1wbGUpIGluIElGIGNvbmRpdGlvbnM6CisKKyAg ZGVmaW5lIHllcyBlY2hvIFwlMSBJUyBPSworICBkZWZpbmUgbm8gZWNobyBcJTEgSVMgTk9UIE9L CisKKyAgKHNldHEgYSAtMSBiIDk5OSkKKyAgKGlmIChpbnJhbmdlIGEgMCAxMDApICh5ZXMgYSkg KG5vIGEpKQorICAoaWYgKGlucmFuZ2UgYiAtMTAwMCArMTAwMCkgKHllcyBiKSAobm8gYikpCisK KyAgIFRoaXMgaXMganVzdCBhbiBpbGx1c3RyYXRpb24sIG9mIGNvdXJzZTsgdGhlcmUncyBhbHJl YWR5IGEgYnVpbHQtaW4KKyAgIG9wZXJhdG9yIHRvIGxldCB5b3UgZG8gcmFuZ2UgY2hlY2tpbmcg d2l0aG91dCBoZWxwIGZyb20gbWFjcm9zOgorCisgIChpZiAoPD0gMCBhIDEwMCkgKHllcyBhKSAo bm8gYSkpCisgIChpZiAoPD0gLTEwMDAgYiArMTAwMCkgKHllcyBiKSAobm8gYikpCisKKyAgIFRv IHNlbmQgc3RyaW5nIHBhcmFtZXRlcnMgdG8gYSBtYWNybywgc29tZSBraW5kIG9mIHF1b3Rpbmcg aXMgcmVxdWlyZWQKKyAgIHRvIHRlbGwgdGhlIFMtRXhwcmVzc2lvbiBwYXJzZXIgdG8gdGFrZSBh IGdpdmVuICJ3b3JkIiBsaXRlcmFsbHkgcmF0aGVyCisgICB0aGFuIHJlcGxhY2luZyBpdCBieSBp dHMgdmFsdWUuIEZvciB0aGlzIHdlIHVzZSB0aGUgTGlzcCBRVU9URQorICAgb3BlcmF0b3I6CisK KyAgZGVmaW5lIGxlbmd0aCByZXR1cm4gXGZsZW5ndGgoXCUxKQorICAobGVuZ3RoIChxdW90ZSBh YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eikpCisgIDI2CisKKyAgIFRoaXMgY2F1c2VzIHRoZSBz dHJpbmcgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiB0byBiZSBzZW50CisgICBsaXRlcmFs bHkgdG8gdGhlIExFTkdUSCBtYWNyby4gS2VybWl0LCBsaWtlIExpc3AsIGFsc28gb2ZmZXJzIGEK KyAgIHNob3J0Y3V0IGZvciBRVU9URSwgdGhhdCBsZXRzIHVzIHF1b3RlIGEgd29yZCBieSBwcmVm aXhpbmcgaXQgd2l0aCBhCisgICBzaW5nbGUgcXVvdGUgKCcpIGNoYXJhY3RlciwgYWxzbyBjYWxs ZWQgYXBvc3Ryb3BoZSAoQVNDSUkgMzkpOgorCisgIChsZW5ndGggJ2FiY2RlZmdoaWprbG1ub3Bx cnN0dXZ3eHl6KQorICAyNgorCisgICBUaGUgdHdvIGZvcm1zIGFyZSBlcXVpdmFsZW50LgorCisg ICBIb3cgdGhlIG1hY3JvIHRyZWF0cyBpdHMgYXJndW1lbnRzIGlzIHVwIHRvIHRoZSBtYWNyby4g SW4gdGhlIGV4YW1wbGUKKyAgIGFib3ZlLCB0aGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGxp dGVyYWwgc3RyaW5nLiBIb3dldmVyLCBpdCBjYW4KKyAgIGFsc28gYmUgdHJlYXRlZCBhcyBhIHZh cmlhYmxlIG5hbWU6CisKKyAgZGVmaW5lIHN0cmluZyBUaGlzIGlzIGEgc3RyaW5nCisgIGRlZmlu ZSBsZW5ndGggcmV0dXJuIFxmbGVuZ3RoKFxtKFwlMSkpCisgIChsZW5ndGggJ3N0cmluZykKKyAg MTYKKworICAgTm90ZSB0aGUgY29uc3RydWN0IFxtKFwlMSkuIFRoaXMgbWVhbnMgInRoZSB2YWx1 ZSBvZiB0aGUgbWFjcm8gd2hvc2UKKyAgIG5hbWUgaXMgdGhlIHZhbHVlIG9mCisgICBcJTEiLiBU aGUgdmFsdWUgb2YgXCUxIGluIHRoaXMgY2FzZSBpcyB0aGUgd29yZCAic3RyaW5nIiwgYW5kIHRo ZSB2YWx1ZQorICAgb2YgdGhlIG1hY3JvIHdob3NlIG5hbWUgaXMgInN0cmluZyIgaXMgIlRoaXMg aXMgYSBzdHJpbmciLgorCisgICBXaGF0IGlmIHRoZSBtYWNybyB0YWtlcyBtdWx0aXBsZSBhcmd1 bWVudHMsIG9yIGEgdmFyaWFibGUgbnVtYmVyIG9mCisgICB0aGVtPyBIZXJlJ3MgYSBzaW1wbGUg bWFjcm8gdGhhdCBwcmludHMgYSBwaHJhc2UgdGhhdCBpbmNsdWRlcyBpdHMKKyAgIGFyZ3VtZW50 czoKKworICBkZWZpbmUgY29tcGxhaW4gZWNobyBJdCdzIHRvbyBcJSohCisKKyAgIChSZWNhbGwg dGhhdCBcJSogbWVhbnMgImFsbCBhcmd1bWVudHMiLikKKworICAgSXQgY2FuIGJlIGNhbGxlZCBp biB0aGUgdHJhZGl0aW9uYWwgd2F5OgorCisgIGNvbXBsYWluIGhvdCAgICAgICAgICAgICAgICAg ICAgICAgUmVzdWx0OiAiSXQncyB0b28gaG90ISIKKyAgY29tcGxhaW4gY29sZCBhbmQgd2V0ICAg ICAgICAgICAgICBSZXN1bHQ6ICJJdCdzIHRvbyBjb2xkIGFuZCB3ZXQhIgorCisgICBPciBmcm9t IGFuIFMtRXhwcmVzc2lvbiBpZiB5b3UgcXVvdGUgdGhlIGFyZ3VtZW50czoKKworICAoY29tcGxh aW4gJ2hvdCkgICAgICAgICAgICAgICAgICAgIFJlc3VsdDogIkl0J3MgdG9vIGhvdCEiCisgIChj b21wbGFpbiAnY29sZCAnYW5kICd3ZXQpICAgICAgICAgUmVzdWx0OiAiSXQncyB0b28gY29sZCBh bmQgd2V0ISIKKworICAgVG8gZ3JvdXAgbXVsdGlwbGUgd29yZHMgaW50byBhIHNpbmdsZSBhcmd1 bWVudCwgdXNlIHBhcmVudGhlc2VzOgorCisgIChjb21wbGFpbiAocXVvdGUgKGNvbGQgYW5kIHdl dCkpKSAgUmVzdWx0OiAiSXQncyB0b28gY29sZCBhbmQgd2V0ISIKKyAgKGNvbXBsYWluICcoY29s ZCBhbmQgd2V0KSkgICAgICAgICBSZXN1bHQ6ICJJdCdzIHRvbyBjb2xkIGFuZCB3ZXQhIgorCisg ICBOb3RlIHRoZSBkaWZmZXJlbmNlOgorCisgIChjb21wbGFpbiAnY29sZCAnYW5kICd3ZXQpICAg ICAgICAgVGhyZWUgYXJndW1lbnRzCisgIChjb21wbGFpbiAnKGNvbGQgYW5kIHdldCkpICAgICAg ICAgT25lIGFyZ3VtZW50CisKKyAgIFNpbmNlIHRoZSBDT01QTEFJTiBtYWNybyB1c2VzIFwlKiB0 byByZWZlciB0byBhbGwgaXRzIGFyZ3VtZW50cywgbm8KKyAgIG1hdHRlciBob3cgbWFueSwgaXQg ZG9lc24ndCBjYXJlIHdoaWNoIGZvcm0geW91IHVzZS4gQnV0IGl0IG1ha2VzIGEKKyAgIGRpZmZl cmVuY2UgaW4gY2FzZXMgd2hlcmUgdGhlIG1hY3JvIHJlZmVycyB0byBpdHMgYXJndW1lbnRzCisg ICBpbmRpdmlkdWFsbHkuCisKKyAgIFRvIGlsbHVzdHJhdGUsIGxldCdzIGNvbnNpZGVyIGEgbWFj cm8gdGhhdCByZWNlaXZlcyB0aGUgbmFtZSBvZiBhIG1hY3JvCisgICBhbmQgaXRzIGFyZ3VtZW50 IGxpc3QgYW5kIGV4ZWN1dGVzIGl0IHdpdGggaXRzIGFyZ3VtZW50cywgd2l0aG91dAorICAga25v d2luZyBob3cgbWFueSBhcmd1bWVudHMgdGhlcmUgYXJlLiBUaGUgZm9sbG93aW5nIExPT1AgbWFj cm8gaXMgdXNlZAorICAgdG8gZXhlY3V0ZSB0aGUgZ2l2ZW4gbWFjcm8gd2l0aCB0aGUgZ2l2ZW4g YXJndW1lbnQgbGlzdCB0aGUgcmVxdWVzdGVkCisgICBudW1iZXIgb2YgdGltZXM6CisKKyAgZGVm IGxvb3AgeyBsb2NhbCBpLCBmb3IgaSAxIFwlMSAxIGRvIFwlMiBcJTMgfQorCisgICBXaXRoaW4g dGhlIExPT1AgbWFjcm8sIHRoZSBmaXJzdCBhcmd1bWVudCAoXCUxKSBpcyB0aGUgbG9vcCBjb3Vu dCwgXCUyCisgICBpcyB0aGUgbWFjcm8gbmFtZSwgYW5kIFwlMyBpcyB0aGUgYXJndW1lbnQgbGlz dC4gV2hlbiB0aGUgTE9PUCBtYWNybyBpcworICAgaW52b2tlZCB0cmFkaXRpb25hbGx5IGxpa2Ug dGhpczoKKworICBsb29wIDMgY29tcGxhaW4gaG90CisKKyAgIGl0IHByaW50cyAiSXQncyB0b28g aG90ISIgdGhyZWUgdGltZXMuIFRvIGludm9rZSBpdCBmcm9tIGFuCisgICBTLUV4cHJlc3Npb24s IHlvdSBtdXN0IHF1b3RlIGJvdGggdGhlIG1hY3JvIG5hbWUgYXMgd2VsbCBhcyB0aGUKKyAgIGFy Z3VtZW50LCBzaW5jZSBpbiB0aGlzIGNhc2UgdGhlIG1hY3JvIG5hbWUgaXRzZWxmIGlzIGFuIGFy Z3VtZW50OgorCisgIChsb29wIDMgJ2NvbXBsYWluICdob3QpCisKKyAgIE5vdyB3aGF0IGlmIHlv dSBuZWVkIHRvIHNlbmQgZGlmZmVyZW50IG9yIHZhcmlhYmxlIG51bWJlcnMgb2YgYXJndW1lbnRz CisgICB0byB0aGUgTE9PUCBtYWNybz8gVGhlIExPT1AgbWFjcm8gY2FuIGhhbmRsZSBpdCBhbHJl YWR5LCBwcm92aWRlZCB5b3UKKyAgIGdyb3VwIHRoZSBhcmd1bWVudHMgaW50byBMT09QJ3MgdGhp cmQgYXJndW1lbnQgKFwlMykuIEluIEtlcm1pdCBzeW50YXgsCisgICB3aXRob3V0IGdyb3VwaW5n OgorCisgIGxvb3AgMyBjb21wbGFpbiBjb2xkIGFuZCB3ZXQKKworICAgcHJpbnRzICJJdCdzIHRv byBjb2xkISIgdGhyZWUgdGltZXMgKCJhbmQgd2V0IiBpcyBsb3N0KTsgYnV0IHdpdGgKKyAgIGdy b3VwaW5nIChlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyB0d28gZm9ybXMpOgorCisgIGxvb3AgMyBj b21wbGFpbiB7Y29sZCBhbmQgd2V0fQorICBsb29wIDMgY29tcGxhaW4gImNvbGQgYW5kIHdldCIK KworICAgdGhlIExPT1AgbWFjcm8gcHJpbnRzICJJdCdzIHRvbyBjb2xkIGFuZCB3ZXQhIiB0aHJl ZSB0aW1lcyBhcyBkZXNpcmVkLgorCisgICBUbyBkbyB0aGUgc2FtZSB0aGluZyBpbiBhbiBTLUV4 cHJlc3Npb24sIGp1c3QgdXNlIHRoZSBMaXNwIGZvcm1zIG9mCisgICBxdW90aW5nIGluc3RlYWQg b2YgdGhlIEtlcm1pdCBmb3JtczsgdGhlIGZvbGxvd2luZyB0d28gYXJlIGVxdWl2YWxlbnQ6CisK KyAgKGxvb3AgMyAnY29tcGxhaW4gKHF1b3RlIChjb2xkIGFuZCB3ZXQpKSkKKyAgKGxvb3AgMyAn Y29tcGxhaW4gJyhjb2xkIGFuZCB3ZXQpKQorCisgICBIZXJlJ3MgYSBzaW1pbGFyIGV4YW1wbGUg aW4gd2hpY2ggd2Ugd3JpdGUgYSBtYWNybyB0aGF0IHNob3dzIGJvdGggdGhlCisgICBuYW1lIGFu ZCB0aGUgdmFsdWUgb2Ygb25lIG9yIG1vcmUgb3RoZXIgbWFjcm9zLCB3aG9zZSBuYW1lcyBhcmUg Z2l2ZW4KKyAgIGFzIGFyZ3VtZW50cyAoc2ltaWxhciB0byAic2hvdyBtYWNybyIpOgorCisgIGRl ZmluZSBkaXNwbGF5IHsKKyAgICAgIGxvY2FsIFwlaQorICAgICAgZm9yIFwlaSAxIFx2KGFyZ2Mp LTEgMSB7CisgICAgICAgICAgZWNobyBcJl9bXCVpXSA9IFxtKFwmX1tcJWldKQorICAgICAgfQor ICB9CisKKyAgIChSZWNhbGwgdGhhdCBcJl9bXSBpcyB0aGUgbWFjcm8ncyBhcmd1bWVudCB2ZWN0 b3IgYXJyYXksIGVxdWl2YWxlbnQgdG8KKyAgIFwlMSwgXCUyLCAuLi4pIFRoZSBESVNQTEFZIG1h Y3JvIGNhbiBiZSB1c2VkIGluIFMtRXhwcmVzc2lvbnMgbGlrZQorICAgdGhpczoKKworICAoc2V0 cSBhIDEgYiAyIGMgMykKKyAgKGRpc3BsYXkgJ2EgJ2IgJ2MgJ2QpCisKKyAgIHdoaWNoIHByaW50 czoKKworICBhID0gMQorICBiID0gMgorICBjID0gMworICBkID0KKworICAgVGhlIG5hbWVzIG11 c3QgYmUgcXVvdGVkIHRvIHByZXZlbnQgdGhlaXIgZXZhbHVhdGlvbiBiZWZvcmUgdGhleSBhcmUK KyAgIHNlbnQgdG8gdGhlIG1hY3JvLiBUaGlzIGFiaWxpdHkgdG8gcGFzcyB2YXJpYWJsZXMgImJ5 IG5hbWUiIHRvIG1hY3JvcywKKyAgIHJhdGhlciB0aGFuIGJ5IHZhbHVlLCBsZXRzIHlvdSB3cml0 ZSBtYWNyb3MgdGhhdCBjaGFuZ2UgdGhlIHZhbHVlcyBvZgorICAgYXJndW1lbnQgdmFyaWFibGVz LiBGb3IgZXhhbXBsZSwgaGVyZSdzIGEgbWFjcm8gdGhhdCBkb3VibGVzIHRoZSB2YWx1ZQorICAg b2YgaXRzIGFyZ3VtZW50IHZhcmlhYmxlOgorCisgIGRlZmluZSBkb3VibGUgKCsrIFwlMSBcJTEp CisKKyAgIHdoaWNoIHlvdSBjYW4gY2FsbCBsaWtlIHRoaXM6CisKKyAgKHNldHEgYSAxMikKKyAg KGRvdWJsZSAnYSkKKworICAgSW4gdGhlIG1hY3JvLCBcJTEgaXMgcmVwbGFjZSBieSB0aGUgdmFy aWFibGUgbmFtZSAiYSI7ICIoKysgYSBhKSIgYWRkcworICAgImEiIHRvIGl0c2VsZiwgYW5kIHNl dHMgdGhlIHZhbHVlIG9mICJhIiB0byB0aGUgcmVzdWx0LgorCisgICBUaGVyZSBhcmUgbm8gYnVp bHQtaW4gb3BlcmF0b3JzIG90aGVyIHRoYW4gUVVPVEUsICcsIGFuZCBTVFJJTkcgZm9yCisgICBo YW5kbGluZyBzdHJpbmdzIGluIFMtRXhwcmVzc2lvbnMsIGJ1dCB1c2luZyBqdXN0IHRoZXNlLCBw bHVzIG1hY3JvcworICAgdGhhdCB1c2UgS2VybWl0J3MgcmVndWxhciBzdHJpbmctaGFuZGxpbmcg ZmVhdHVyZXMsIHlvdSBjYW4gZWFzaWx5CisgICBleHRlbmQgUy1FeHByZXNzaW9ucyB0byBkbyBz dHJpbmcgbWFuaXB1bGF0aW9uOgorCisgIGRlZmluZSBsZW4gcmV0dXJuIFxmbGVuKFwlMSkgICAg ICAgICAgICAgICBSZXR1cm5zIGxlbmd0aCBvZiBhcmd1bWVudCBzdHJpbmcKKyAgZGVmaW5lIGNh cCByZXR1cm4gXGZ1cHBlcihcJTEpICAgICAgICAgICAgIFVwcGVyY2FzZSBhcmd1bWVudCBzdHJp bmcKKyAgZGVmaW5lIHJldiByZXR1cm4gXGZyZXZlcnNlKFwlMSkgICAgICAgICAgIFJldmVyc2Vz IGFyZ3VtZW50IHN0cmluZworICBkZWZpbmUgc3ViIHJldHVybiBcZnN1YnN0cihcJTEsXCUyLFwl MykgICAgUmV0dXJucyBzdWJzdHJpbmcgb2YgYXJnIHN0cmluZworCisgIChsZW4gJyh0aGlzIGlz IGEgc3RyaW5nKSkgICAgICAgICAgICAgICAgICBSZXN1bHQ6IDE2CisgIChyZXYgJyh0aGlzIGlz IGEgc3RyaW5nKSkgICAgICAgICAgICAgICAgICBSZXN1bHQ6IGduaXJ0cyBhIHNpIHNpaHQKKyAg KHJldiAoY2FwICcodGhpcyBpcyBhIHN0cmluZykpKSAgICAgICAgICAgIFJlc3VsdDogR05JUlRT IEEgU0kgU0lIVAorICAoc3ViIChyZXYgKGNhcCAnKHRoaXMgaXMgYSBzdHJpbmcpKSkgNSA5KSAg UmVzdWx0OiBUUyBBIFNJIFMKKworICAgWW91IGNhbiBhc3NpZ24gYSBzdHJpbmcgdG8gYSBtYWNy byBuYW1lIGFzIGZvbGxvd3M6CisKKyAgKHNldHEgZm9vICcodGhpcyBpcyBhIHN0cmluZykpCisg IChzZXRxIGZvbyAocXVvdGUgKHRoaXMgaXMgYSBzdHJpbmcpKSkKKworICAgVGhlIHR3byBhcmUg ZXhhY3RseSBlcXVpdmFsZW50LiBJbiBib3RoIGNhc2VzLCB0aGUgbWFjcm8gImZvbyIgaGFzIHRo ZQorICAgdmFsdWU6CisKKyAgJyh0aGlzIGlzIGEgc3RyaW5nKQorCisgICBzbyB3aGVuIGl0IGlz IHJldHJpZXZlZCBpdCBjYW4gYmUgaWRlbnRpZmllZCBhcyBhIHN0cmluZyByYXRoZXIgdGhhbiBh CisgICBudW1iZXIgb3IgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQuIFRodXM6CisKKyAgKHNldHEg Zm9vIChxdW90ZSAodGhpcyBpcyBhIHN0cmluZykpKQorICBzaG93IG1hY3JvIGZvbworICBmb28g PSAnKHRoaXMgaXMgYSBzdHJpbmcpCisgIChmb28pCisgIHRoaXMgaXMgYSBzdHJpbmcKKworICAg Tm90ZSB0aGUgZGlmZmVyZW50IHJlc3VsdHMgZm9yICJzaG93IG1hY3JvIGZvbyIgYW5kICIoZm9v KSIuIFRoZSBmb3JtZXIKKyAgIHNob3dzIHRoZSBpbnRlcm5hbCBkZWZpbml0aW9uOyB0aGUgbGF0 dGVyIGV2YWx1YXRlcyB0aGUgdmFyaWFibGUsIHdoaWNoCisgICByZW1vdmVzIHRoZSBxdW90aW5n LiBBbmQgcGVyaGFwcyBtb3JlIGltcG9ydGFudCwgbm90ZSB0aGF0IGlmIHRoZQorICAgYXBvc3Ry b3BoZSBhbmQgc3Vycm91bmRpbmcgcGFyZW50aGVzZXMgd2VyZSBub3Qgc3RvcmVkIGFzIHBhcnQg b2YgdGhlCisgICBkZWZpbml0aW9uLCAoZm9vKSB3b3VsZCB0cnkgdG8gZXhlY3V0ZSAidGhpcyBp cyBhIHN0cmluZyIgYXMgYSBjb21tYW5kLgorCisgICBHaXZlbiB0aGUgYXNzaWdubWVudCBhYm92 ZSwgdGhlIGZvbGxvd2luZyB3b3JrIGFzIGV4cGVjdGVkOgorCisgIChsZW4gZm9vKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6IDE2CisgIChyZXYgZm9vKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ6IGduaXJ0cyBhIHNpIHNpaHQKKyAgKHJl diAoY2FwIGZvbykpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdDogR05JUlRTIEEg U0kgU0lIVAorICAoc3ViIChyZXYgKGNhcCBmb28pKSA1IDgpICAgICAgICAgICAgICAgICAgUmVz dWx0OiBUUyBBIFNJIFMKKworICAgTm90ZSB0aGF0LCB1bmxpa2UgYnVpbHQtaW4gUy1FeHByZXNz aW9uIG9wZXJhdG9ycyB0aGF0IHJldHVybiBudW1iZXJzCisgICBvciB0cnV0aCB2YWx1ZXMsIHRo ZXNlIG9wZXJhdG9ycyByZXR1cm4gc3RyaW5ncy4gSWYgeW91IHdhbnQgdG8gYXNzaWduCisgICB0 aGVpciByZXR1cm4gdmFsdWVzIHRvIG90aGVyIHZhcmlhYmxlcywgeW91IGNhbiBkbyBzbzoKKwor ICAoc2V0cSBiYXIgKHJldiAoY2FwIGZvbykpKSAgICAgICAgICAgICAgICAgUmVzdWx0OiBHTklS VFMgQSBTSSBTSUhUCisKKyAgIEJ1dCBub3cgdGhlIFMtRXhwcmVzc2lvbiBwcm9jZXNzb3IgZG9l c24ndCBrbm93IHRoZSB2YWx1ZSBvZiAiYmFyIiBpcworICAgc3VwcG9zZWQgdG8gYmUgYSBzdHJp bmcsIHJhdGhlciB0aGFuIGEgbWFjcm8gdG8gZXhlY3V0ZS4gRm9yIHRoaXMgeW91CisgICBuZWVk IG9uZSBmaW5hbCBzcGVjaWFsIG9wZXJhdG9yLCBTVFJJTkcuIFRoZSBTVFJJTkcgb3BlcmF0b3Ig dGFrZXMgYW4KKyAgIFMtRXhwcmVzc2lvbiBhcyBhbiBvcGVyYW5kLCBldmFsdWF0ZXMgaXQsIGFu ZCB0aGVuIHJldHVybnMgaXRzIHZhbHVlCisgICBlbmNsb3NlZCBpbiAnKCksIHNvIHlvdSBjYW4g dXNlIHRoZSB2YWx1ZSBhcyBhIHN0cmluZyBpcyBzdWJzZXF1ZW50CisgICBTLUV4cHJlc3Npb25z LiBVc2UgU1RSSU5HIGZvciByZWZlcmVuY2luZyBtYWNyb3MgdGhhdCByZXR1cm4gc3RyaW5nczoK KworICAoc2V0cSBiYXIgKHN0cmluZyAocmV2IChjYXAgZm9vKSkpKSAgICAgICAgUmVzdWx0OiAn KEdOSVJUUyBBIFNJIFNJSFQpCisKKyAgIFNUUklORyBpcyBsaWtlIFFVT1RFLCBleGNlcHQgdGhh dCBpdCBldmFsdWF0ZXMgaXRzIG9wZXJhbmQgYmVmb3JlCisgICBhcHBseWluZyB0aGUgcXVvdGlu ZywgcmF0aGVyIHRoYW4gdGFraW5nIHRoZSBvcGVyYW5kIGxpdGVyYWxseS4KKworICAgVG8gcmVm ZXJlbmNlIGJhY2tzbGFzaCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHN0cmlu ZworICAgdmFsdWVzLCB5b3UgbXVzdCB1c2UgdGhlIHJlZ3VsYXIgcXVvdGluZyBtZWNoYW5pc21z OgorCisgIChzZXRxIHRpbWUgJyhcdih0aW1lKSkpCisgIChzZXRxIGRhdGUgJyhcdihkYXRlKSkp CisgIGFzc2lnbiBcJXIgdGhpcyBpcyBhIHN0cmluZworICAoc2V0cSBzMSAnKFwlcikpCisKKyAg IFRoYXQncyBiZWNhdXNlIGJhY2tzbGFzaCBpdGVtcyBhcmUgZXZhbHVhdGVkIEJFRk9SRSB0aGUg Uy1FeHByZXNzaW9uCisgICBwYXJzZXIgZXZlciBzZWVzIHRoZW0sIGFuZCB0aGUgdmFsdWVzIG9m IFx2KHRpbWUpIGFuZCBzbyBvbiBhcmUgbm90CisgICB2YWxpZCBTLUV4cHJlc3Npb25zLCBzbyBT VFJJTkcgd29uJ3QgbGlrZSB0aGVtLgorCisgICBGaW5hbGx5IGEgYnJpZWYgd29yZCBvbiB0aGUg dG91Y2h5IHRvcGljIG9mIHF1b3RpbmcuIFN1cHBvc2UgeW91IHdhbnQKKyAgIHRvIGluY2x1ZGUg KHNheSkgbGl0ZXJhbCBwYXJlbnRoZXNlcyBpbiBhIHN0cmluZyB0aGF0IHdpbGwgbGF0ZXIgYmUK KyAgIHByb2Nlc3NlZCBieSB0aGUgUy1FeHByZXNzaW9uIHJlYWRlciAob3IgXGZzcGxpdCgpIG9y IFxmd29yZCgpKS4KKyAgIE5vcm1hbGx5LCB5b3UgY2FuJ3QgZG8gdGhpcyBiZWNhdXNlIHBhcmVu dGhlc2VzIGFyZSBtZWFuaW5nZnVsIGluIHRoZXNlCisgICBjb250ZXh0cy4gVG8gZGVmZWF0IHRo ZSBub3JtYWwgcGFyc2luZyBydWxlcywgeW91IGNhbiBxdW90ZSB0aGUKKyAgIHBhcmVudGhlc2Vz IHdpdGggYmFja3NsYXNoLiBIb3dldmVyLCBkdWUgdG8gdGhlIG1hbnkgbGV2ZWxzIG9mIHN0cmlu ZworICAgcHJvY2Vzc2luZyBpbnZvbHZlZCwgYSBzdXJwcmlzaW5nbHkgbGFyZ2UgYW1vdW50IG9m IGJhY2tzbGFzaGVzIG1pZ2h0CisgICBiZSByZXF1aXJlZCwgZm9yIGV4YW1wbGU6CisKKyAgKHNl dHEgcyAnKGEgYiAoYyBkKSBcXFxcXFxcXFxcXFxcXFxcKGUgZiAoZyBoKSB4XFxcXFxcXFxcXFxc XFxcXCkgaiBrKSkKKworICAgVGhpcyBpcyBuZWFybHkgaW1wb3NzaWJsZSB0byBleHBsYWluKCop LiBJbnN0ZWFkLCBqdXN0IHJlbWVtYmVyIHR3bworICAgcG9pbnRzOgorCisgICAgICogSW4gc2l0 dWF0aW9ucyBsaWtlIHRoaXMsIGl0J3MgYmV0dGVyIHRvIHVzZSBERUZJTkUgdG8gY3JlYXRlIHRo ZQorICAgICAgIHN0cmluZywgcmF0aGVyIHRoYW4gU0VUUS4gVGhlIGV4YW1wbGUgYWJvdmUgcmVx dWlyZXMgb25seSBkb3VibGUKKyAgICAgICBiYWNrc2xhc2hlcyB3aGVuIERFRklORSBpcyB1c2Vk OgorICBkZWZpbmUgcyAnKGEgYiAoYyBkKSBcXChlIGYgKGcgaCkgeFxcKSBqIGspCisKKyAgICAg KiBUaGUgbGV2ZWwgb2YgcXVvdGluZyBkZXBlbmRzIG9uIGhvdyBtYW55IGxldmVscyBvZiBldmFs dWF0aW9uIHRoZQorICAgICAgIHN0cmluZyBtdXN0IHBhc3MgdGhyb3VnaCwgd2hpY2ggaXMgbm90 IGFsd2F5cyBvYnZpb3VzLiBIb3dldmVyLCB0aGUKKyAgICAgICBudW1iZXIgb2YgYmFja3NsYXNo ZXMgcmVxdWlyZWQgaW4gYW55IGdpdmVuIHNpdHVhdGlvbiBpcyBhbHdheXMgYQorICAgICAgIHBv d2VyIG9mIDIuIFNvIGlmIDEgZG9lc24ndCB3b3JrLCB0cnkgMjsgaWYgMiBkb2Vzbid0IHdvcmss IHRyeSA0OworICAgICAgIGlmIDQgZG9lc24ndCB3b3JrLCB0cnkgOCwgMTYsIDMyLCBhbmQgc28g b24uCisKKyAgIENvbnNpZGVyYXRpb25zIGxpa2UgdGhpcyBhcHBseSBpbiBhbnkgc2NyaXB0aW5n IGxhbmd1YWdlIChzaGVsbCwgVGNsLAorICAgUGVybCwgUHl0aG9uLCBldGMpLiBUaGUgc2l0dWF0 aW9uIGlzIGtub3duIGFzICJRdW90aW5nIEhlbGwiLgorCisgICAoKikgSWYgeW91IHJlYWxseSB3 YW50IGFuIGV4cGxhbmF0aW9uLCBoZXJlIGl0IGlzOgorCisgICAgICogRXZlcnkgU0VYUCBoYXMg aXRzIGJhY2tzbGFzaCBpdGVtcyBldmFsdWF0ZWQgaW4gYSBzaW5nbGUgcGFzcyBhdAorICAgICAg IHRvcCBsZXZlbCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBTRVhQIHJlYWRlciwgc28gXCUx LAorICAgICAgIFx2KGZ0aW1lKSwgZXRjLCBjYW4gYmUgZXZhbHVhdGVkIHVwIGZyb250LCBmcmVl aW5nIHRoZSBTRVhQIHJlYWRlcgorICAgICAgIG9mIGhhdmluZyB0byBrbm93IGFib3V0IHN1Y2gg dGhpbmdzLCB3aGljaCBpbiB0dXJuIG1ha2VzIGl0IG11Y2gKKyAgICAgICBtb3JlIGVmZmljaWVu dC4gVGhlcmVmb3JlIG9uZSBsZXZlbCBvZiBxdW90aW5nIGlzIGxvc3QgcmlnaHQgYXdheSwKKyAg ICAgICBhbmQgdGhlcmVmb3JlIHlvdSBtdXN0IGRvdWJsZSBlYWNoIGJhY2tzbGFzaCB0aGF0IGlz IHRvIGJlIHVzZWQgYXMKKyAgICAgICBhIHF1b3RlLgorICAgICAqIFdoZW4gdGhlIFNFWFAgcmVh ZGVyIHNlZXMgJ1wnLCBpdCB0cmVhdHMgaXQgYXMgYSBxdW90ZTsgZGlzY2FyZHMgaXQKKyAgICAg ICBhbmQga2VlcHMgdGhlIG5leHQgY2hhcmFjdGVyLiBUaHVzICdcXCcgYmVjb21lcyAnXCcuIFRo aXMgd291bGQgYmUKKyAgICAgICB0aGUgZW5kIG9mIGl0LCBleGNlcHQgdGhhdDoKKyAgICAgKiBU aGUgU0VYUCByZWFkZXIgbXVzdCBjYWxsIGl0c2VsZiByZWN1cnNpdmVseSBvbiBpdHMgb3BlcmFu ZHMsIHNvIHdlCisgICAgICAgbXVzdCBkb3VibGUgYW55IHF1b3RlcyBpbiB0aGUgb3BlcmFuZHM6 IDJeMiA9IDQuCisgICAgICogSWYgdGhlIHJlc3VsdCBpcyB0byBiZSBwYXNzZWQgYXMgYW4gYXJn dW1lbnQgdG8gYSBtYWNybywgdGhlCisgICAgICAgYmFja3NsYXNoZXMgbXVzdCBhZ2FpbiBiZSBk b3VibGVkLCBiZWNhdXNlIHRoZSBtYWNybyBwcm9jZXNzb3IKKyAgICAgICBldmFsdWF0ZXMgdGhl IGFyZ3VtZW50cyBiZWZvcmUgc2VuZGluZyB0aGVtIHRvIHRoZSBtYWNybzogMl4zID0gOC4KKyAg ICAgKiBJZiB0aGUgbWFjcm8gaXRzZWxmIGlzIHRvIHNlZSB0aGUgcXVvdGVzLCByYXRoZXIgdGhh biBqdXN0IHRoZQorICAgICAgIHJlc3VsdCBvZiB0aGUgcXVvdGluZywgdGhlIHF1b3RlcyBtdXN0 IGJlIGRvdWJsZWQgYWdhaW46IDJeNCA9IDE2LgorCisgICBNb3JhbDogVG8gY3JlYXRlIHN0cmlu ZyBjb25zdGFudHMgaW4gd2hpY2ggZ3JvdXBpbmcgY2hhcmFjdGVycyBtdXN0IGJlCisgICBxdW90 ZWQsIHVzZSBERUZJTkUgcmF0aGVyIHRoYW4gU0VUUS4KKworICAgWyBbNTM2XVRvcCBdIFsgWzUz N11Db250ZW50cyBdIFsgWzUzOF1DLUtlcm1pdCBIb21lIF0gWyBbNTM5XUtlcm1pdAorICAgSG9t ZSBdCisKKzkuOS4gRXhhbXBsZXMKKworOS45LjEuIFN0YXRpc3RpY3MKKworICAgVGhlIGZvbGxv d2luZyBwcm9ncmFtIGNvbXB1dGVzIHN0YXRpc3RpY3MgLS0gbWVhbnMsIG1heGltYSwgbWluaW1h LAorICAgdmFyaWFuY2UsIHN0YW5kYXJkIGRldmlhdGlvbiwgYW5kIGNvcnJlbGF0aW9uIC0tIGZy b20gZGF0YSBzdG9yZWQgaW4KKyAgIHBhcmFsbGVsIGFycmF5cywgXCZ4W10gYW5kIFwmeVtdLCB3 aGljaCBjYW4gY29udGFpbiBhbnkgbWl4dHVyZSBvZgorICAgaW50ZWdlciBhbmQgZmxvYXRpbmct cG9pbnQgbnVtYmVyczogcG9zaXRpdmUsIG5lZ2F0aXZlLCBvciB6ZXJvLiBBcnJheQorICAgc2V0 dXAgYW5kIHZhbGlkYXRpb24gYXJlIG5vdCBzaG93bi4gRXhjZXB0IGZvciB0aGUgdHJhZGl0aW9u YWwgRk9SIGxvb3AKKyAgIGFuZCBwcmludGluZyB0aGUgcmVzdWx0cyBhdCB0aGUgZW5kLCB0aGUg ZW50aXJlIGNvbXB1dGF0aW9uIGlzIGRvbmUKKyAgIHdpdGggUy1FeHByZXNzaW9uczoKKworOyBJ bml0aWFsaXplIHN1bXMsIG1heGltYSwgbWluaW1hLCBhbmQgbnVtYmVyIG9mIGVsZW1lbnRzCisK KyAgKHNldHEgeHN1bSAwIHlzdW0gMCB4c3VtMiAwIHlzdW0yIDAgeHlzdW0gMCkKKyAgKHNldHEg eG1pbiAoc2V0cSB4bWF4IFwmeFsxXSkgeW1pbiAoc2V0cSB5bWF4IFwmeVsxXSkpCisgIChzZXRx IG4gXGZkaW0oJngpKQorCis7IExvb3AgdGhyb3VnaCBlbGVtZW50cyBhbmQgYWNjdW11bGF0ZSBz dW1zLCBtYXhpbWEsIGFuZCBtaW5pbWEKKworICBmb3IgaSAxIG4gMSB7CisgICAgICAoc2V0cSB4 IFwmeFtpXSB5IFwmeVtpXSkgICAgICAgICAgICAgICAgICAgIDsgTm90YXRpb25hbCBjb252ZW5p ZW5jZQorICAgICAgKHNldHEgeG1heCAobWF4IHhtYXggeCkgeW1heCAobWF4IHltYXggeSkpICA7 IFggYW5kIFkgbWF4aW1hCisgICAgICAoc2V0cSB4bWluIChtaW4geG1pbiB4KSB5bWluIChtaW4g eW1pbiB5KSkgIDsgWCBhbmQgWSBtaW5pbWEKKyAgICAgICgrKyB4c3VtIHggeXN1bSB5KSAgICAg ICAgICAgICAgICAgICAgICAgICAgOyBYIGFuZCBZIHN1bXMKKyAgICAgICgrKyB4c3VtMiAoXiB4 IDIpIHlzdW0yICheIHkgMikpICAgICAgICAgICAgOyBTdW0gb2YgWCBhbmQgWSBzcXVhcmVzCisg ICAgICAoKysgeHlzdW0gKCogeCB5KSkgICAgICAgICAgICAgICAgICAgICAgICAgIDsgU3VtIG9m IFhZIHByb2R1Y3RzCisgIH0KKworOyBDYWxjdWxhdGUgcmVzdWx0cworCisgIChzZXRxIHhtZWFu ICgvIHhzdW0gbikgeW1lYW4gKC8geXN1bSBuKSkgICAgICAgIDsgTWVhbiBYIGFuZCBZCisgIChz ZXRxIHhzcyAoLSB4c3VtMiAoLyAoXiB4c3VtIDIpIG4pKSkgICAgICAgICAgIDsgSW50ZXJtZWRp YXRlIHZhbHVlcworICAoc2V0cSB5c3MgKC0geXN1bTIgKC8gKF4geXN1bSAyKSBuKSkpCisgIChz ZXRxIHh5c3MgKC0geHlzdW0gKC8gKCogeHN1bSB5c3VtKSBuKSkpCisgIChzZXRxIHh2YXIgKC8g eHNzIG4pIHl2YXIgKC8geXNzIG4pKSAgICAgICAgICAgIDsgWCBhbmQgWSB2YXJpYW5jZQorICAo c2V0cSBzZHggKHNxcnQgeHZhcikgc2R5IChzcXJ0IHl2YXIpKSAgICAgICAgICA7IFN0ZCBkZXZp YXRpb24gaW4gWCBhbmQgWQorICAoc2V0cSB0bXAgKCogeHNzIHlzcykpCisgIChzZXRxIGNjIChp ZiB0bXAgKC8geHlzcyAoc3FydCB0bXApKSAxLjApKSAgICAgIDsgQ29ycmVsYXRpb24gY29lZmZp Y2llbnQKKyAgc2hvdyBtYWNybyB4bWVhbiB5bWVhbiB4dmFyIHl2YXIgc2R4IHNkeSBjYyAgICAg OyBQcmludCB0aGUgcmVzdWx0cworCisgICBUaGUgZmluYWwgImlmIHRtcCIgY2hlY2sgYWNjb3Vu dHMgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGJvdGggYXJyYXlzCisgICBjb250YWluIGFsbCAw J3MuIFJlc3VsdHMgY2FuIGFsc28gYmUgcHJpbnRlZCB3aXRoICJlY2hvIENDID0gXG0oY2MpIiwK KyAgIG9yIGFueSBvdGhlciBkZXNpcmVkIHdheS4gSW50ZXJlc3RpbmdseSwgaWYgd2UgaGFkIG5v dCBuZWVkZWQgdGhlIHN1bQorICAgb2YgdGhlIHNxdWFyZXMgYW5kIHByb2R1Y3RzLCB3ZSBjb3Vs ZCBoYXZlIG9idGFpbmVkIHRoZSBzdW1zLCBtYXhpbWEsCisgICBhbmQgbWluaW1hIG9mIHRoZSBY J3MgYW5kIFkncyB3aXRob3V0IGEgbG9vcCBsaWtlIHRoaXM6CisKKyAgKHNldHEgeHN1bSAoKyBc ZmpvaW4oJngpKSB5c3VtICgrIFxmam9pbigmeSkpKQorICAoc2V0cSB4bWF4IChtYXggXGZqb2lu KCZ4KSkgeW1heCAobWF4IFxmam9pbigmeSkpKQorICAoc2V0cSB4bWluIChtaW4gXGZqb2luKCZ4 KSkgeW1pbiAobWluIFxmam9pbigmeSkpKQorCisgICBBbnkgS2VybWl0IGZ1bmN0aW9uIHRoYXQg cmV0dXJucyBudW1iZXJzIG9yIGxpc3RzIG9mIG51bWJlcnMgY2FuIGJlCisgICBpbmNsdWRlZCBp biBhbiBTLUV4cHJlc3Npb24gYXMgYW4gb3BlcmFuZC4KKworOS45LjIuIFByYWN0aWNhbCBGaWJv bmFjY2kgU2VyaWVzCisKKyAgIFRoZSByZWN1cnNpdmUgRmlib25hY2NpIGV4YW1wbGUgZ2l2ZW4g cHJldmlvdXNseSBpcyBzaW1wbGUgYW5kIGVsZWdhbnQsCisgICBidXQgbm90IHZlcnkgdXNlZnVs IHNpbmNlIGl0IGNhdXNlcyBtZW1vcnkgb2NjdXBhdGlvbiB0byBncm93IGVhY2ggdGltZQorICAg aXQgY2FsbHMgaXRzZWxmLCB1bnRpbCBldmVudHVhbGx5IGJvdGggcGh5c2ljYWwgbWVtb3J5IGFu ZCBkaXNrIHN3YXAKKyAgIHNwYWNlIGFyZSBmaWxsZWQgYW5kIHRoZSBwcm9ncmFtIGNyYXNoZXMu IEV2ZW4gZm9yIHNtYWxsIGFyZ3VtZW50cywKKyAgIGxpa2UgMTcsIGV4ZWN1dGlvbiB0aW1lIGNh biBiZSBwcm9oaWJpdGl2ZToKKworICAoc2V0cSB0MSBcdihmdGltZSkpCisgIChzZXRxIHJlc3Vs dCAoZmlib25hY2NpIDE3KSkKKyAgKHNldHEgdDIgKC0gXHYoZnRpbWUpIHQxKSkKKyAgZWNobyBG SUJPTkFDQ0koMTcpID0gXG0ocmVzdWx0KTogVElNRSA9IFxmZnByb3VuZCh0MiwzKQorCisgICBw cmludHMgKG9uIGEgY2VydGFpbiByYXRoZXIgc2xvdyBjb21wdXRlcik6CisKKyAgRklCT05BQ0NJ KDE3KSA9IDE1OTc6IFRJTUUgPSA1Ljg2MQorCisgICBBbnkgcmVjdXJzaXZlIGZ1bmN0aW9uIGNh biBiZSByZWNvZGVkIGl0ZXJhdGl2ZWx5LiBUaGUgcmVzdWx0IGlzIG5vdCBhcworICAgcHJldHR5 LCBidXQgZXhlY3V0aW9uIGlzIGZhciBsZXNzIGV4cGVuc2l2ZToKKworICAgIGRlZmluZSBGSUJJ VEVSIHsKKyAgICAgICAgKGlmICg9PSBcJTMgMCkgKFwlMikgKGZpYml0ZXIgKCsgXCUxIFwlMikg XCUxICgtIFwlMyAxKSkpCisgICAgfQorICAgIGRlZmluZSBGSUJPTkFDQ0kgeworICAgICAgICAo ZmliaXRlciAxIDAgXCUxKQorICAgIH0KKworICAgSGVyZSdzIHRoZSByZXN1bHQgb24gdGhlIHNh bWUgY29tcHV0ZXIgZm9yIHRoZSBzYW1lIGFyZ3VtZW50IG9mIDE3OgorCisgIEZJQk9OQUNDSSgx NykgPSAxNTk3OiBUSU1FID0gMC4wMTUKKworICAgKDQ3IHRpbWVzIGZhc3Rlci4pIEV4ZWN1dGlv biB0aW1lIGluY3JlYXNlcyBwcm9wb3J0aW9uYWxseSB0byB0aGUgc2l6ZQorICAgb2YgdGhlIGFy Z3VtZW50IGluIHRoZSBpdGVyYXRpdmUgY2FzZSwgd2hlcmVhcyBpbiB0aGUgcmVjdXJzaXZlIGNh c2UgaXQKKyAgIGdvZXMgdXAgZ2VvbWV0cmljYWxseSwgcXVpY2tseSByZWFjaGluZyBpbmZpbml0 eS4KKworICAgWyBbNTQwXVRvcCBdIFsgWzU0MV1Db250ZW50cyBdIFsgWzU0Ml1DLUtlcm1pdCBI b21lIF0gWyBbNTQzXUtlcm1pdAorICAgSG9tZSBdCisKKzkuMTAuIERpZmZlcmVuY2VzIGZyb20g QWxnZWJyYWljIE5vdGF0aW9uCisKKyAgIEluIEMtS2VybWl0OgorCisgICAgICogQWxnZWJyYWlj IG5vdGF0aW9uIHVzZXMgaW5maXggb3BlcmF0b3JzIGFuZCBub3JtYWwgcnVsZXMgb2YKKyAgICAg ICBvcGVyYXRvciBwcmVjZWRlbmNlLCB3aXRoIHBhcmVudGhlc2VzIHVzZWQgdG8gZm9yY2UgZXhj ZXB0aW9ucyB0bworICAgICAgIHRoZSBydWxlczsgbWFueSBvcGVyYXRpb25zIGNhbiBiZSBpbmNs dWRlZCBpbiBhbiBleHByZXNzaW9uLgorICAgICAgIFMtRXhwcmVzc2lvbnMgdXNlIHByZWZpeCBv cGVyYXRvcnMgd2l0aCBubyBpbnRyaW5zaWMgcHJlY2VkZW5jZTsKKyAgICAgICBlYWNoIG9wZXJh dGlvbiBpcyBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcywgYW5kIHRoZSBhcnJhbmdlbWVudCBvZgor ICAgICAgIHBhcmVudGhlc2VzIGRldGVybWluZXMgcHJlY2VkZW5jZS4KKyAgICAgKiBBbGdlYnJh aWMgaW5maXggb3BlcmF0b3JzIHJlcXVpcmUgdHdvIG9wZXJhbmRzOyBTLUV4cHJlc3Npb24gcHJl Zml4CisgICAgICAgb3BlcmF0b3JzIGNhbiBhY2NlcHQgYSB2YXJpYWJsZSBudW1iZXIgb2Ygb3Bl cmFuZHMuCisgICAgICogWW91IGNhbiB1c2UgYWxnZWJyYWljIG5vdGF0aW9uIGFueXdoZXJlIHRo YXQgQy1LZXJtaXQgYWNjZXB0cyBhCisgICAgICAgbnVtYmVyLCBlLmcuICJlY2hvIFwmYVsoKDEr MSkqMi0xXSIsIGJ1dCB5b3UgY2FuIHVzZSBTLUV4cHJlc3Npb25zCisgICAgICAgb25seSBhcyB0 b3AtbGV2ZWwgY29tbWFuZHMuIFlvdSBjYW4sIGhvd2V2ZXIsIHVzZSBlaXRoZXIgYWxnZWJyYWlj CisgICAgICAgb3IgUy1FeHByZXNzaW9ucyBhbnl3aGVyZSBhdCBhbGwgYnkgZW5jbG9zaW5nIHRo ZW0gaW4gXGZldmFsdWF0ZSgpCisgICAgICAgb3IgXGZzZXhwcmVzc2lvbigpLCByZXNwZWN0aXZl bHkuCisgICAgICogWW91IGNhbiB1c2UgYW55IG1peHR1cmUgb2YgaW50ZWdlciBhbmQgZmxvYXRp bmctcG9pbnQgbnVtYmVycyBpbgorICAgICAgIFMtRXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGludGVn ZXJzIGFyZSBwZXJtaXR0ZWQgaW4gYWxnZWJyYWljCisgICAgICAgZXhwcmVzc2lvbnMuIE91dHNp ZGUgb2YgUy1FeHByZXNzaW9ucywgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBpcworICAgICAg IHN1cHBvcnRlZCBvbmx5IGJ5IFxmZnAuLi4oKSBmdW5jdGlvbiBjYWxscy4KKyAgICAgKiBPcGVy YXRvcnMgYW5kIG9wZXJhbmRzIGluIFMtRXhwcmVzc2lvbnMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkK KyAgICAgICBzcGFjZXMsIGUuZy4gIigrIGEgYikiLiBTcGFjZXMgYXJlIG5vdCByZXF1aXJlZCBp biBhbGdlYnJhaWMKKyAgICAgICBleHByZXNzaW9uczogIigoYStiKSpjKSIuCisgICAgICogV2hl biBhc3NpZ25pbmcgdmFsdWVzIHRvIGJhY2tzbGFzaCB2YXJpYWJsZXMgKHN1Y2ggYXMgXCV4IG9y CisgICAgICAgXCZhWzJdKSB1c2luZyBTRVRRIG9yIExFVCwgeW91IG11c3QgZG91YmxlIHRoZSBi YWNrc2xhc2guCisKKyAgIFsgWzU0NF1Ub3AgXSBbIFs1NDVdQ29udGVudHMgXSBbIFs1NDZdQy1L ZXJtaXQgSG9tZSBdIFsgWzU0N11LZXJtaXQKKyAgIEhvbWUgXQorCis5LjExLiBEaWZmZXJlbmNl cyBmcm9tIExpc3AKKworICAgICAqIEtlcm1pdCBoYXMgYSBsb3Qgb2YgYnVpbHQtaW4gb3BlcmF0 b3JzIG5vdCBmb3VuZCBpbiBMaXNwOiArKywgXiwKKyAgICAgICBldGMuCisgICAgICogTW9zdCBk aWFsZWN0cyBvZiByZWFsIExpc3AgZG8gbm90IGFsbG93IFMtRXhwcmVzc2lvbnMgdGhhdCBkb24n dAorICAgICAgIHN0YXJ0IHdpdGggYW4gb3BlcmF0b3IsIGZvciBleGFtcGxlOgorICAoYSkKKwor ICAgICAgIFRoaXMgZXhwcmVzc2lvbiBjYW4gY2F1c2UgYW4gZXJyb3IgaW4gTGlzcCAoZXZlbiBp ZiAiYSIgaGFzIGEKKyAgICAgICB2YWx1ZSksIGJ1dCBpcyBhY2NlcHRhYmxlIGluIEtlcm1pdCwg d2hlcmUgaXQgcmV0dXJucyB0aGUgdmFsdWUgb2YKKyAgICAgICB0aGUgdmFyaWFibGUgImEiLiBT aW1pbGFybHksICgxKSByZXR1cm5zIHRoZSB2YWx1ZSAiMSIuCisgICAgICogSW4gcmVhbCBMaXNw LCBFVkFMIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9wZXJhbmQuIEluIEtlcm1pdCwgaXQgY2FuCisg ICAgICAgaGF2ZSAwLCAxLCAyLCBvciBtb3JlIG9wZXJhbmRzLiBJdCByZXR1cm5zIHRoZSB2YWx1 ZSBvZiB0aGUgbGFzdAorICAgICAgIG9wZXJhbmQgZXZhbHVhdGVkLgorICAgICAqIFJlYWwgTGlz cCBTRVRRIGFuZCBMRVQgdXN1YWxseSByZXF1aXJlIGFuIGV2ZW4gbnVtYmVyIG9mIG9wZXJhbmRz LgorICAgICAgIEtlcm1pdCBhbGxvd3MgYW4gb2RkIG51bWJlciwgaW4gd2hpY2ggY2FzZSB0aGUg bGFzdCAob3Igb25seSkKKyAgICAgICB2YXJpYWJsZSBpcyB1bmRlZmluZWQgKGkuZS4gZGVsZXRl ZCwgZGVzdHJveWVkKS4KKyAgICAgKiBLZXJtaXQgZG9lcyBub3Qgc3VwcG9ydCByYXRpb3Mgc3Vj aCBhcyAiNy84Ii4gU29tZSBMaXNwIGRpYWxlY3RzCisgICAgICAgYWNjZXB0IHJhdGlvcyBhcyBu dW1iZXJzLCBhbmQgZ2VuZXJhdGUgcmF0aW9zIHdoZW4gdG9sZCB0byBkaXZpZGUKKyAgICAgICB0 d28gaW50ZWdlcnMgd2hvc2UgcXVvdGllbnQgaXMgbm90IGEgd2hvbGUgbnVtYmVyOyBlLmcuIGlu IENvbW1vbgorICAgICAgIExpc3A6CisgIFsxM10gVVNFUigzNyk6ICgvICgrIDEgMiAzIDQpIDMp CisgIDEwLzMKKyAgWzEzXSBVU0VSKDM4KToKKworICAgICAqIFRoZSByZXN1bHQgb2YgKC8gMTAg MykgaXMgMy4zMzMuLi4uIFNvbWUgTGlzcCBkaWFsZWN0cyB0cnVuY2F0ZSB0aGUKKyAgICAgICBy ZXN1bHQgdG8gMyBzaW5jZSBib3RoIG9wZXJhbmRzIGFyZSBpbnRlZ2Vycywgc29tZSBkb24ndDsg c29tZSBnaXZlCisgICAgICAgdGhlIHJlc3VsdCBhcyBhIHJhdGlvLiBDLUtlcm1pdCBhbHdheXMg Z2l2ZXMgYSBmbG9hdGluZyBwb2ludAorICAgICAgIHJlc3VsdCB3aGVuIHRoZXJlIGlzIGEgZnJh Y3Rpb25hbCBwYXJ0LiBJZiB5b3Ugd2FudCBhbiBpbnRlZ2VyCisgICAgICAgcmVzdWx0LCB5b3Ug Y2FuIHVzZSBUUlVOQ0FURSwgRkxPT1IsIG9yIENFSUxJTkcsIGUuZy4gKHRydW5jYXRlICgvCisg ICAgICAgMTAgMykpLgorICAgICAqIFRoZXJlIGlzIGN1cnJlbnRseSBubyAiYmlnbnVtIiBzdXBw b3J0LiBMYXJnZSBudW1iZXJzIGNhbiBiZSB1c2VkCisgICAgICAgYW5kIGxhcmdlIHJlc3VsdHMg Z2VuZXJhdGVkLCBidXQgKGFzIG5vdGVkIGluIFs1NDhdU2VjdGlvbiA5LjIpCisgICAgICAgdGhl eSBhcmUgYWNjdXJhdGUgb25seSB0byB0aGUgcHJlY2lzaW9uIG9mIHRoZSB1bmRlcmx5aW5nIG1h Y2hpbmUuCisgICAgICAgXHYobWF0aF9wcmVjaXNpb24pIGdpdmVzIHRoZSBtYWNoaW5lIHByZWNp c2lvbiBhcyBhIG51bWJlciBvZgorICAgICAgIGRlY2ltYWwgZGlnaXRzLCBlLmcuIDE2LgorICAg ICAqIFNjaWVudGlmaWMgbm90YXRpb24gZm9yIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgaXMgbm90 IHN1cHBvcnRlZC4gSWYKKyAgICAgICB0aGUgbWFnbml0dWRlIG9mIGEgbnVtYmVyIGlzIGdyZWF0 ZXIgdGhhbiB0aGUgcHJlY2lzaW9uIG9mIHRoZQorICAgICAgIHVuZGVybHlpbmcgaGFyZHdhcmUs IHRoZSBsZXNzLXNpZ25pZmljYW50IGRpZ2l0cyBhcmUgc2hvd24gYnV0CisgICAgICAgdGhlaXIg dmFsdWVzIGFyZSBtZWFuaW5nbGVzcy4gSWYgaXQgdGhlIG51bWJlciBpcyB0b28gc21hbGwgdG8g YmUKKyAgICAgICByZXByZXNlbnRlZCBpbnRlcm5hbGx5LCBpdCBpcyBzaG93biBhcyAiMC4wIi4K KyAgICAgKiBNYW55IExpc3AgZmVhdHVyZXMgYXJlIG9taXR0ZWQ6IExpc3QgcHJvY2Vzc2luZyAo Q0FSLCBDRFIsIGV0YyksCisgICAgICAgREVGVU4sIExpc3Atc3BlY2lmaWMgY29udHJvbCBzdHJ1 Y3R1cmVzLCBhbmQgc28gb24uCisKKyAgIFsgWzU0OV1Ub3AgXSBbIFs1NTBdQ29udGVudHMgXSBb IFs1NTFdQy1LZXJtaXQgSG9tZSBdIFsgWzU1Ml1LZXJtaXQKKyAgIEhvbWUgXQorCisxMC4gRklM RSBUUkFOU0ZFUgorCisgICBOZXcgY29tbWFuZHMgYW5kIHN3aXRjaGVzOgorCisgICBTRVQgVFJB TlNGRVIgUkVQT1JUIHsgT0ZGLCBPTiB9CisgICAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0 aGUgKG5ldykgb25lLWxpbmUgbWVzc2FnZSBwcmludGVkIGJ5IEtlcm1pdAorICAgICAgICAgIGFm dGVyIGEgcmVtb3RlLW1vZGUgZmlsZSB0cmFuc2ZlciB0byBpbmRpY2F0ZSB0aGUgc291cmNlIGFu ZAorICAgICAgICAgIGRlc3RpbmF0aW9uIGZpbGUsIGNvbXBsZXRlIHdpdGggcGF0aCwgdG8gbGV0 IHlvdSBrbm93IHdoZXJlIHRoZQorICAgICAgICAgIGZpbGUgd2VudC4KKworICAgU0VORCAvVFlQ RTp7VEVYVCxCSU5BUll9CisgICAgICAgICAgU2VuZHMgb25seSBmaWxlcyBvZiB0aGUgZ2l2ZW4g dHlwZSAoc2VlIFs1NTNdU2VjdGlvbiA0KS4KKworICAgU0VORCAvTk9GT0xMT1dMSU5LUzoKKyAg ICAgICAgICAoVU5JWCBvbmx5KSBTa2lwIG92ZXIgc3ltYm9saWMgbGlua3MgcmF0aGVyIHRoYW4g Zm9sbG93aW5nIHRoZW0KKyAgICAgICAgICAoZGVmYXVsdCkuIFRoaXMgYXBwbGllcyB0byB3aWxk Y2FyZCBhbmQvb3IgcmVjdXJzaXZlIFNFTkRzOyBpZiBhCisgICAgICAgICAgc2luZ2xlIGZpbGVu YW1lIGlzIGdpdmVuLCBhbmQgaXQgaGFwcGVucyB0byBiZSBhIHN5bWJvbGljIGxpbmssCisgICAg ICAgICAgdGhlIGZpbGUgaXQgcG9pbnRzIHRvIGlzIHNlbnQuCisKKyAgIFNFTkQgL0ZPTExPV0xJ TktTOgorICAgICAgICAgIChVTklYIG9ubHkpIEZvbGxvdyAocmVzb2x2ZSkgc3ltYm9saWMgbGlu a3MuIFdhdGNoIG91dCBmb3IKKyAgICAgICAgICBjaXJjdWxhciBsaW5rcywgZW5kbGVzcyBsb29w cywgZXRjLgorCisgICBTRVQgU0VORCBJLVBBQ0tFVFMgeyBPRkYsIE9OIH0KKyAgICAgICAgICBX aGVuIHNlbmRpbmcgY29tbWFuZHMgdG8gYSBLZXJtaXQgc2VydmVyLCB0aGlzIHRlbGxzIHdoZXRo ZXIKKyAgICAgICAgICBjb21tYW5kIHBhY2tldHMgc2hvdWxkIGJlIHByZWNlZGVkIGJ5IGFuIEkg KGluZm9ybWF0aW9uKSBwYWNrZXQsCisgICAgICAgICAgd2hpY2ggaXMgdXNlZCB0byBzeW5jaHJv bml6ZSBwYXJhbWV0ZXJzIHByaW9yIHRvIGV4ZWN1dGluZyB0aGUKKyAgICAgICAgICBjb21tYW5k LiBOb3JtYWxseSBPTi4gVGhlIG9ubHkgcmVhc29uIHRvIHNldCB0aGlzIE9GRiBpcyBmb3IKKyAg ICAgICAgICBjb21tdW5pY2F0aW5nIHdpdGggYnVnZ3kgS2VybWl0IHNlcnZlcnMgdGhhdCBtaXNi ZWhhdmUgd2hlbiBhbiBJCisgICAgICAgICAgcGFja2V0IGlzIHNlbnQgdG8gdGhlbS4gVGhlcmUg aXMgYWxzbyBhIFNFVCBSRUNFSVZFIEktUEFDS0VUUworICAgICAgICAgIGNvbW1hbmQsIGJ1dCBw cmVzZW50bHkgaXQgaGFzIG5vIGVmZmVjdC4KKworICAgU0VUIFRSQU5TRkVSIE1FU1NBR0UgWyB0 ZXh0IF0KKyAgICAgICAgICBTZXRzIGFuIGluaXRpYWwgbWVzc2FnZSB0byBiZSBzaG93biBpbiB0 aGUgTGFzdCBNZXNzYWdlIGZpZWxkIG9mCisgICAgICAgICAgdGhlIGZ1bGxzY3JlZW4gZmlsZS10 cmFuc2ZlciBkaXNwbGF5LgorCisgICBTRVQgVFJBTlNGRVIgVFJBTlNMQVRJT04geyBPTiwgT0ZG IH0KKyAgICAgICAgICBJbmhpYml0cyBvciByZS1lbmFibGVzIHRleHQtZmlsZSB0cmFuc2ZlciBj aGFyYWN0ZXItc2V0CisgICAgICAgICAgdHJhbnNsYXRpb24gZ2xvYmFsbHkuCisKKyAgIHsgU0VO RCwgTVNFTkQsIEdFVCwgUkVDRUlWRSB9IC9UUkFOU1BBUkVOVAorICAgICAgICAgIEluaGliaXRz IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gZm9yIHRoaXMgdHJhbnNmZXIgb25seS4KKworICAg eyBHRVQsIFJFQ0VJVkUgfSAvUElQRVM6e09OLE9GRn0KKyAgICAgICAgICBPdmVycmlkZXMgZ2xv YmFsIFRSQU5TRkVSIFBJUEVTIHNldHRpbmcgZm9yIHRoaXMgdHJhbnNmZXIgb25seTsKKyAgICAg ICAgICBPTiBhbGxvd3MgaW5jb21pbmcgZmlsZXMgd2l0aCBuYW1lcyBsaWtlICIhdGFyIHhmIC0i IHRvIGJlCisgICAgICAgICAgb3BlbmVkIGFzIHBpcGVsaW5lcyByYXRoZXIgdGhhbiByZWd1bGFy IGZpbGVzLgorCisgICBUaGUgZm9sbG93aW5nIG5ldyAiaG90IGtleXMiIGFyZSBhdmFpbGFibGUg d2hlbiBLZXJtaXQncyBmaWxlLXRyYW5zZmVyCisgICBkaXNwbGF5IGlzIHZpc2libGU6CisKKyAg ICAgRDogVHVybiBvbiBkZWJ1Z2dpbmcsIG9wZW4gImRlYnVnLmxvZyIgaWYgbm90IGFscmVhZHkg b3Blbi4KKyAgICAgZDogVHVybiBvZmYgZGVidWdnaW5nIGJ1dCBsZWF2ZSBsb2cgb3BlbiAoaWYg aXQgd2FzIG9wZW4pLgorICAgICBUOiBUdXJuIG9uIGRlYnVnLWxvZyB0aW1lc3RhbXBzLgorICAg ICB0OiBUdXJuIG9mZiBkZWJ1Zy1sb2cgdGltZXN0YW1wcy4KKworICAgT3RoZXIgaW1wcm92ZW1l bnRzOgorICAgICAqIFNFVCBGSUxFIERPV05MT0FELURJUkVDVE9SWSBub3cgd29ya3MgZm9yIGV4 dGVybmFsIHByb3RvY29scyAoZS5nLgorICAgICAgIHN6L3J6KSB0b28uCisgICAgICogSW1wcm92 ZWQgYXV0b21hdGljIHBlci1maWxlIHRleHQvYmluYXJ5IHN3aXRjaGluZywgZGVzY3JpYmVkIGlu CisgICAgICAgWzU1NF1TZWN0aW9uIDQuCisgICAgICogV2hlbiBzZW5kaW5nIGEgZmlsZSBncm91 cCAoZS5nLiAic2VuZCAqLioiKSwgZmFpbHVyZSB0byBvcGVuIGEgZmlsZQorICAgICAgIGlzIG5v IGxvbmdlciBmYXRhbDsgbm93IEMtS2VybWl0IHNpbXBseSBnb2VzIGFoZWFkIHRvIHRoZSBuZXh0 CisgICAgICAgZmlsZS4KKyAgICAgKiBUcmFuc2FjdGlvbiBsb2cgZW50cmllcyBhcmUgbm93IG1h ZGUgZm9yIGV4dGVybmFsIHByb3RvY29scyB0b28uCisKKyAgIFsgWzU1NV1Ub3AgXSBbIFs1NTZd Q29udGVudHMgXSBbIFs1NTddQy1LZXJtaXQgSG9tZSBdIFsgWzU1OF1LZXJtaXQKKyAgIEhvbWUg XQorCisxMS4gTU9ERU1TIEFORCBESUFMSU5HCisKKyAgIEluIEMtS2VybWl0IDguMCwgdGhlIGRl ZmF1bHQgbW9kZW0gdHlwZSBmb3IgZGlhbGluZyBoYXMgY2hhbmdlZCBmcm9tCisgICBOT05FICg9 IERJUkVDVCwgbWVhbmluZyBubyBtb2RlbSkgdG8gR0VORVJJQy4gVGhpcyBjaGFuZ2Ugc2hvdWxk IGhhdmUKKyAgIG5vIGltcGFjdCBvbiBkaXJlY3QgY29ubmVjdGlvbnMuIEZvciBkaWFsaW5nLCBp dCBtZWFucyB0aGF0LCB1bmxlc3MgeW91CisgICBTRVQgTU9ERU0gVFlQRSB0byBhIHNwZWNpZmlj IHR5cGUsIHN1Y2ggYXMgVVNST0JPVElDUyBvciBDT05FWEFOVCwKKyAgIEtlcm1pdCBhc3N1bWVz OgorCisgICAgMS4gVGhlIG1vZGVtIHVzZXMgdGhlIEhheWVzIEFUIGNvbW1hbmQgc2V0LgorICAg IDIuIFRoZSBtb2RlbSBzdXBwb3J0cyBlcnJvciBjb3JyZWN0aW9uLCBkYXRhIGNvbXByZXNzaW9u LCBhbmQgaGFyZHdhcmUKKyAgICAgICBmbG93IGNvbnRyb2wgYW5kIGlzIGFscmVhZHkgY29uZmln dXJlZCB0byB1c2UgdGhlbS4KKworICAgSW4gZmFjdCwgS2VybWl0IGFzc3VtZXMgdGhlIG1vZGVt IGlzIGNvbXBsZXRlbHkgY29uZmlndXJlZCwgYW5kCisgICB0aGVyZWZvcmUgZG9lcyBub3Qgc2Vu ZCBpdCBhbiBpbml0aWFsaXphdGlvbiBzdHJpbmcgb3IgYW55CisgICBjb25maWd1cmF0aW9uIGNv bW1hbmRzLiBJbnN0ZWFkLCBpdCBzZW5kcyBvbmx5IHRoZSBzaW1wbGVzdCBhbmQgbW9zdAorICAg cG9ydGFibGUgY29tbWFuZHM6CisKKyAgICAgQVRRMFYxICAgICAgICAgIEdpdmUgZGlhbCByZXN1 bHQgY29kZXMuCisgICAgIEFURFRudW1iZXIgICAgICBEaWFsIHRoZSBudW1iZXIuCisKKyAgIChv ciBBVEQgb3IgQVREUCwgYXMgYXBwcm9wcmlhdGUpLgorCisgICBUaGUgbmV3IGRlZmF1bHRzIHdv cmsgZm9yIGRpcmVjdCBjb25uZWN0aW9ucyBhbmQgZm9yIG1vc3QgbW9kZXJuIG1vZGVtcworICAg b24gbW9zdCBwbGF0Zm9ybXMsIGFuZCB0aGV5IHdvcmsgbXVjaCBmYXN0ZXIgdGhhbiAiZnVsbC10 cmVhdG1lbnQiCisgICBkaWFsaW5nLiBJZiB0aGUgbmV3IGRlZmF1bHRzIGRvbid0IHdvcmsgZm9y IHlvdSwgb3IgaWYgeW91IG5lZWQgdG8KKyAgIHBlcmZvcm0gZXhwbGljaXQgbW9kZW0gY29uZmln dXJhdGlvbnMgb3IgaW50ZXJhY3Rpb25zLCB0aGVuIHNldCBhCisgICBzcGVjaWZpYyBtb2RlbSB0 eXBlIGFuZCB1c2UgdGhlIFNFVCBNT0RFTSBhbmQgU0VUIERJQUwgY29tbWFuZHMgYXMKKyAgIGRv Y3VtZW50ZWQgaW4gVXNpbmcgQy1LZXJtaXQuCisKKyAgICAgV0FSTklORzogRG9uJ3QgdXNlIHRo ZSBnZW5lcmljIG1vZGVtIG9uIGhvc3RzIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAgICAgUlRTL0NU UyBmbG93IGNvbnRyb2wuIElmIFhvbi9Yb2ZmIGlzIGluIHVzZSBvbiB0aGUgc2VyaWFsIHBvcnQs CisgICAgIHlvdSdsbCBuZWVkIHRvIHNlbGVjdCBhIHBhcnRpY3VsYXIgbW9kZW0gdHlwZSBzbyBL ZXJtaXQga25vd3Mgd2hhdAorICAgICBjb21tYW5kIHRvIGdpdmUgaXQgdG8gZW5hYmxlIFhvbi9Y b2ZmIGZsb3cgY29udHJvbCBiZXR3ZWVuIGl0c2VsZgorICAgICBhbmQgeW91ciBzZXJpYWwgcG9y dC4KKworICAgVGhlIGZvbGxvd2luZyBuZXcgbW9kZW0gdHlwZXMgd2VyZSBhZGRlZCBpbiBDLUtl cm1pdCA4LjA6CisKKyAgICAgbHVjZW50OiAgICAgICAgICBMdWNlbnQgVmVudXMgY2hpcHNldAor ICAgICBwY3RlbDogICAgICAgICAgIFBDVGVsIFYuOTAgY2hpcHNldAorICAgICBjb25leGFudDog ICAgICAgIENvbmV4YW50IChleC1Sb2Nrd2VsbCkgbW9kZW0gZmFtaWx5CisgICAgIHpvb20tdjMy YmlzOiAgICAgTmV3IG5hbWUgZm9yICJab29tIgorICAgICB6b29tLXYzNCAgICAgICAgIFpvb20g Vi4zNAorICAgICB6b29tLXY5MCAgICAgICAgIFpvb20gVi45MCA1NksKKyAgICAgem9vbS12OTI6 ICAgICAgICBab29tIFYuOTIgd2l0aCBWLjQ0IGRhdGEgY29tcHJlc3Npb24KKyAgICAgem9sdHJp eC12MzQ6ICAgICBOZXcgbmFtZSBmb3IgInpvbHRyaXgiCisgICAgIHpvbHRyaXgtaHNwLXY5MDog U3lub255bSBmb3IgUENUZWwKKyAgICAgem9sdHJpeC1oY2YtdjkwOiBTeW5vbnltIGZvciBJVFUt VC1WMjUwCisgICAgIHNtYXJ0bGluay12OTA6ICAgU3lub255bSBmb3IgdXNyb2JvdGljcyAoc2Ft ZSBjaGlwc2V0KQorICAgICBhY2VyLXY5MDogICAgICAgIFN5bm9ueW0gZm9yIFJvY2t3ZWxsLXY5 MAorCisgICBOZXcgRElBTC1yZWxhdGVkIHZhcmlhYmxlczoKKworICAgICBcdihkbV9oZik6ICBE aWFsIG1vZGlmaWVyOiBXYWl0IGZvciBIb29rLUZsYXNoLgorICAgICBcdihkbV93Yik6ICBEaWFs IG1vZGlmaWVyOiBXYWl0IGZvciBCb25nLgorCisgICBGaW5hbGx5LCBpZiBkaWFsaW5nIGZhaWxz LCBLZXJtaXQgbm93IHByaW50cyBhIGNvbnRleHQtc2Vuc2l0aXZlIGhpbnQKKyAgIHN1Z2dlc3Rp bmcgcG9zc2libGUgcmVhc29ucyBhbmQgcmVtZWRpZXMuCisKKyAgIEFkZGVkIGluIEMtS2VybWl0 IDguMC4yMDE6ICAgUnVkaW1lbnRhcnkgc3VwcG9ydCBmb3IgQ2FsbGVyIElELCBmb3IgdXNlCisg ICB3aXRoIHRoZSBBTlNXRVIgY29tbWFuZC4gSWYgdGhlIG1vZGVtIHJlcG9ydHMgQ2FsbGVyIElE IGluZm9ybWF0aW9uLAorICAgS2VybWl0IHN0b3JlcyBpdCBpbiB2YXJpYWJsZXMgdGhhdCB5b3Ug Y2FuIGFjY2VzcyBhZnRlciB0aGUgY2FsbCBpcworICAgYW5zd2VyZWQ6CisKKyAgXHYoY2FsbGlk X2RhdGUpICAgVGhlIGRhdGUgb2YgdGhlIGNhbGwKKyAgXHYoY2FsbGlkX3RpbWUpICAgVGhlIHRp bWUgb2YgdGhlIGNhbGwKKyAgXHYoY2FsbGlkX25hbWUpICAgVGhlIG5hbWUgb2YgdGhlIGNhbGxl cgorICBcdihjYWxsaWRfbm1icikgICBUaGUgdGVsZXBob25lIG51bWJlciBvZiB0aGUgY2FsbGVy CisgIFx2KGNhbGxpZF9tZXNnKSAgIEEgbWVzc2FnZQorCisgICBUaGUgZm9ybWF0IG9mIHRoZXNl IGl0ZW1zIGRlcGVuZHMgb24gdGhlIG9yaWdpbmF0aW5nIGFuZCBhbnN3ZXJpbmcKKyAgIHBob25l IGNvbXBhbmllcyBhbmQgdGhlIG1vZGVtcyBhbmQgdGhlaXIgY29uZmlndXJhdGlvbi4KKworICAg Tm90IHZlcnkgbWFueSBtb2RlbXMgc3VwcG9ydCBDYWxsZXIgSUQsIGFuZCB0aG9zZSB0aGF0IGRv IChhKSB0ZW5kIHRvCisgICBoYXZlIGl0IGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFuZCAoYikgdXNl IGRpZmZlcmVudCBjb21tYW5kcyB0byBlbmFibGUKKyAgIGl0LiBBIHF1aWNrIHN1cnZleSBzaG93 cyBvZiBzb21lIGN1cnJlbnQgbW9kZWxzIHNob3dzOgorCisgICAtIFVTUiBWLjkwOiAgICAgIE5v CisgICAtIElUVS1UIFYuMjUwOiAgIE5vCisgICAtIEx1Y2VudCBWZW51czogIE5vCisgICAtIERp YW1vbmQgU3VwcmE6ICNDSUQ9MQorICAgLSBSb2Nrd2VsbCA1Nks6ICAjQ0lEPTEKKyAgIC0gUENU RUw6ICAgICAgICAgI0NJRD0xCisgICAtIFpvbHRyaXg6ICAgICAgICtWQ0lEPTEKKyAgIC0gQ29u ZXhhbnQ6ICAgICAgK1ZDSUQ9MQorCisgICBUbyB1c2UgS2VybWl0J3MgQ2FsbGVyIElEIGZlYXR1 cmUsIHlvdSBoYXZlIHRvIHNldCB0aGUgbW9kZW0gdG8gd2FpdAorICAgZm9yIGF0IGxlYXN0IHR3 byByaW5ncyBiZWZvcmUgYW5zd2VyaW5nLCBhbmQgeW91IGhhdmUgdG8gZ2l2ZSB0aGUKKyAgIGNv bW1hbmQgdG8gZW5hYmxlIENhbGxlciBJRDsgZm9yIGV4YW1wbGUgKGFmdGVyIGNob29zaW5nIGEg bW9kZW0gd2l0aAorICAgU0VUIE1PREVNIFRZUEUpOgorCisgIHNldCBtb2RlbSBjb21tYW5kIGF1 dG9hbnN3ZXIgb24gQVRTMD0yI0NJRD0xXHsxM30KKyAgc2V0IG1vZGVtIGNvbW1hbmQgYXV0b2Fu c3dlciBvbiBBVFMwPTIrVkNJRD0xXHsxM30KKworICAgVGhlc2UgY29tbWFuZHMgY2FuIGJlIHVu ZG9uZSB3aXRoOgorCisgIHNldCBtb2RlbSBjb21tYW5kIGF1dG9hbnN3ZXIgb24gQVRTMD0xI0NJ RD0wXHsxM30KKyAgc2V0IG1vZGVtIGNvbW1hbmQgYXV0b2Fuc3dlciBvbiBBVFMwPTErVkNJRD0w XHsxM30KKworICAgS2VybWl0IHByZXNlbnRseSBoYXMgbm8gYnVpbHQtaW4ga25vd2xlZGdlIG9m IHRoZSBDYWxsZXIgSUQKKyAgIGNhcGFiaWxpdGllcyBvciBjb21tYW5kcyBvZiB0aGUgbW9kZW1z IGluIGl0cyBkYXRhYmFzZS4KKworICAgU2luY2UgdGhlIHZhcmlhYmxlcyBjYW4gYmUgYWNjZXNz ZWQgb25seSBhZnRlciB0aGUgY2FsbCBpcyBhbnN3ZXJlZCwKKyAgIHRoZSBvbmx5IHdheSB0byBy ZWZ1c2UgYSBjYWxsIGlzIHRvIGFuc3dlciBpdCwgaW5zcGVjdCB0aGUgdmFyaWFibGVzLAorICAg YW5kIHRoZW4gaGFuZyBpdCB1cCBpZiBkZXNpcmVkLgorCisgICBbIFs1NTldVG9wIF0gWyBbNTYw XUNvbnRlbnRzIF0gWyBbNTYxXUMtS2VybWl0IEhvbWUgXSBbIFs1NjJdS2VybWl0CisgICBIb21l IF0KKworMTIuIFRFUk1JTkFMIENPTk5FQ1RJT04KKworICAgTm93IHRoYXQgNy1iaXQgY29ubmVj dGlvbnMgYXJlIG5vIGxvbmdlciB0aGUgbm9ybSwgdGhlIGRlZmF1bHQgdGVybWluYWwKKyAgIGJ5 dGVzaXplIChhbHNvIGNhbGxlZCAiZGF0YSBzaXplIiBvciAid29yZCBzaXplIikgaW4gQy1LZXJt aXQgOC4wIGlzIDgKKyAgIGJpdHMsIHJhdGhlciB0aGFuIDcgYml0cyBhcyBpdCB3YXMgaW4gQy1L ZXJtaXQgNy4wIGFuZCBlYXJsaWVyOgorCisgICBTRVQgRVNDQVBFIGNoYXJhY3RlcgorICAgICAg ICAgIFRoaXMgY29tbWFuZCwgd2hpY2ggc3BlY2lmaWVzIHlvdXIgQ09OTkVDVC1tb2RlIGVzY2Fw ZQorICAgICAgICAgIGNoYXJhY3RlciwgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGFueSBBU0NJSSBj b250cm9sIGNoYXJhY3RlciBpbgorICAgICAgICAgIGEgdmFyaWV0eSBvZiBmb3JtYXRzLiBDLUtl cm1pdCA4LjAuMjAxIG5vdyBhbHNvIGxldHMgeW91IHNwZWNpZnkKKyAgICAgICAgICBhbnkgOC1i aXQgdmFsdWUsIDEyOC0yNTUsIGFzIHRoZSBlc2NhcGUgY2hhcmFjdGVyLiBJbiB0aGUgU0VUCisg ICAgICAgICAgRVNDQVBFIGNvbW1hbmQsIHlvdSBjYW4gdHlwZSB0aGUgOC1iaXQgY2hhcmFjdGVy IGxpdGVyYWxseSBvcgorICAgICAgICAgIHlvdSBjYW4gZW50ZXIgaXRzIG51bWVyaWMgY29kZS4g SGVyZSBhcmUgZXhhbXBsZXMgdGhhdCB5b3UgY2FuCisgICAgICAgICAgZW50ZXIgZnJvbSBhIHRl cm1pbmFsIG9yIGNvbnNvbGUgdGhhdCB1c2VzIHRoZSBJU08gTGF0aW4tMQorICAgICAgICAgIGNo YXJhY3RlciBzZXQ6CisKKyAgQy1LZXJtaXQ+IHNldCBlc2NhcGUg77+9CisgIEMtS2VybWl0PiBz ZXQgZXNjYXBlIDE5NQorICBDLUtlcm1pdD4gc2hvdyBlc2NhcGUKKyAgIEVzY2FwZSBjaGFyYWN0 ZXI6IENvZGUgMTk1ICjvv70pOiBlbmFibGVkCisgIEMtS2VybWl0PgorCisgICAgICAgICAgQm90 aCBvZiB0aGVzZSBjb21tYW5kcyBzZXQgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgdmFsdWUgdG8gMTk1 CisgICAgICAgICAgKGRlY2ltYWwpLCB3aGljaCBoYXBwZW5zIHRvIGJlIHVwcGVyY2FzZSBsZXR0 ZXIgQSB3aXRoIFRpbGRlIGluCisgICAgICAgICAgTGF0aW4tMS4gU0hPVyBFU0NBUEUgYW5kIFNI T1cgVEVSTUlOQUwgc2hvdyB0aGUgdmFsdWUsIGFzIGRvZXMKKyAgICAgICAgICB0aGUgQ09OTkVD VCBtZXNzYWdlLgorCisgICBTRVQgVEVSTUlOQUwgQVVUT0RPV05MT0FEIEVSUk9SIHsgU1RPUCwg Q09OVElOVUUgfQorICAgICAgICAgIFdoZW4gS2VybWl0IGhhcyBhIHRlcm1pbmFsIGNvbm5lY3Rp b24gdG8gYW5vdGhlciBjb21wdXRlciwgYW5kIGEKKyAgICAgICAgICBmaWxlIHRyYW5zZmVyIGlz IGluaXRpYXRlZCBhdXRvbWF0aWNhbGx5IGJlY2F1c2UgYSBLZXJtaXQgcGFja2V0CisgICAgICAg ICAgd2FzIHJlY2VpdmVkIGluIENPTk5FQ1QgbW9kZSAoaS5lLiBpbiB0aGUgdGVybWluYWwgc2Ny ZWVuKSwgdGhpcworICAgICAgICAgIGNvbW1hbmQgdGVsbHMgd2hhdCBLZXJtaXQgc2hvdWxkIGRv IGlmIHRoZSB0cmFuc2ZlciBmYWlscy4gVGhlCisgICAgICAgICAgZGVmYXVsdCBpcyB0byBTVE9Q LCB3aGljaCBsZWF2ZXMgS2VybWl0IGluIGNvbW1hbmQgbW9kZSB3aXRoIGl0cworICAgICAgICAg IGZpbGUtdHJhbnNmZXIgZGlzcGxheSBzaG93aW5nLCBzbyB5b3UgY2FuIHNlZSB0aGF0IHRoZSB0 cmFuc2ZlcgorICAgICAgICAgIGZhaWxlZCBhbmQgd2h5LiBJZiB5b3UgU0VUIFRFUk1JTkFMIEFV VE9ET1dOTE9BRCBFUlJPUiBDT05USU5VRSwKKyAgICAgICAgICB0aGlzIGNhdXNlcyBLZXJtaXQg dG8gcmV0dXJuIGF1dG9tYXRpY2FsbHkgdG8gaXRzIHRlcm1pbmFsCisgICAgICAgICAgc2NyZWVu IChpLmUuIHJlc3VtZSBpdHMgQ09OTkVDVCBzZXNzaW9uKSBhcyBpZiB0aGUgdHJhbnNmZXIgaGFk CisgICAgICAgICAgc3VjY2VlZGVkOyB0aGlzIGNhbiBiZSBkZXNpcmFibGUgaWYgdGhlIGVudGly ZSBzZXNzaW9uIGlzIHVuZGVyCisgICAgICAgICAgY29udHJvbCBvZiBhIGhvc3QtYmFzZWQgc2Ny aXB0LgorCisgICBTRVQgVEVSTUlOQUwgQllURVNJWkUgeyA3LCA4IH0KKyAgICAgICAgICBUaGUg Ynl0ZSBzaXplIHRvIHVzZSBkdXJpbmcgQ09OTkVDVCBhbmQgSU5QVVQgY29tbWFuZCBleGVjdXRp b24sCisgICAgICAgICAgd2hpY2ggY2FuIGJlIG1vcmUgcmVzdHJpY3RpdmUgdGhhbiB0aGUgYnl0 ZXNpemUgaW1wbGllZCBieSB0aGUKKyAgICAgICAgICBjdXJyZW50IFBBUklUWSBzZXR0aW5nLCBi dXQgbm90IGxlc3MgcmVzdHJpY3RpdmUuIEluIEMtS2VybWl0CisgICAgICAgICAgNy4wIGFuZCBl YXJsaWVyLCB0aGUgdGVybWluYWwgYnl0ZXNpemUgd2FzIDcgYnkgZGVmYXVsdCB0bworICAgICAg ICAgIHByb3RlY3QgYWdhaW5zdCB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhcml0eSB3YXMgaW4gdXNl IG9uIHRoZQorICAgICAgICAgIGNvbm5lY3Rpb24gd2l0aG91dCB0aGUgdXNlcidzIGtub3dsZWRn ZS4gV2hlbiB0aGUgdGVybWluYWwKKyAgICAgICAgICBieXRlc2l6ZSBpcyA4IChhcyBpdCBpcyBp biBDLUtlcm1pdCA4LjAgYW5kIGxhdGVyKSwgdGhlIHVzZXIKKyAgICAgICAgICB3aWxsIHNlZSBn YXJiYWdlIGluIHRoaXMgKGluY3JlYXNpbmdseSB1bmxpa2VseSkgc2l0dWF0aW9uLiBOb3RlCisg ICAgICAgICAgdGhhdCA4IGRhdGEgYml0cyBhcmUgcmVxdWlyZWQgZm9yIG1vc3QgY2hhcmFjdGVy IHNldHMgb3RoZXIgdGhhbgorICAgICAgICAgIEFTQ0lJOiBMYXRpbi0xLCBVVEYtOCwgYW5kIHNv IG9uLgorCisgICBBIG5ldyBjb21tYW5kIGhhcyBiZWVuIGFkZGVkIHRvIHByb2R1Y2UgdGltZXN0 YW1wZWQgc2Vzc2lvbiBsb2dzOgorCisgICBTRVQgVEVSTUlOQUwgU0VTU0lPTi1MT0cgVElNRVNU QU1QRUQtVEVYVAorICAgICAgICAgIFJlY29yZHMgdGhlIHRlcm1pbmFsIHNlc3Npb24gaW4gdGV4 dCBtb2RlIChsaWtlIFNFVCBURVJNSU5BTAorICAgICAgICAgIFNFU1NJT04tTE9HIFRFWFQpIGJ1 dCBhZGRzIGEgdGltZXN0YW1wIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaAorICAgICAgICAgIGxp bmUuIFRoZSB0aW1lc3RhbXAgZm9ybWF0IGlzIGhoOm1tOnNzLm5ubiwgYW5kIGluZGljYXRlcyB0 aGUKKyAgICAgICAgICB0aW1lIGF0IHdoaWNoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGxp bmUgYXBwZWFyZWQuCisKKyAgIEluIG1vc3QgVU5JWCB2ZXJzaW9ucyAodGhvc2UgYnVpbHQgd2l0 aCB0aGUgc2VsZWN0KCktY2FwYWJsZSBDT05ORUNUCisgICBtb2R1bGUgLS0gcHJldHR5IG11Y2gg YWxsIHRoZSBvbmVzIHRoYXQgaGF2ZSBvciBjb3VsZCBoYXZlIFRFTE5FVAorICAgaW5jbHVkZWQp LCBhbiBpZGxlIHRpbWVvdXQgZmVhdHVyZSBoYXMgYmVlbiBhZGRlZDoKKworICAgU0VUIFRFUk1J TkFMIElETEUtVElNRU9VVCBudW1iZXIKKyAgICAgICAgICBJZiB0aGUgbnVtYmVyIGlzIG5vdCAw LCB0aGVuIEtlcm1pdCBpcyB0byB0YWtlIGFuIGFjdGlvbiB3aGVuCisgICAgICAgICAgdGhlIGdp dmVuIGFtb3VudCBvZiB0aW1lIHBhc3NlcyB3aXRoIG5vIGFjdGl2aXR5IGR1cmluZyBDT05ORUNU CisgICAgICAgICAgbW9kZS4gSWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSBpdCBpcyB0aGUgbWF4 aW11bSBudW1iZXIgb2YgaWRsZQorICAgICAgICAgIHNlY29uZHM7IGlmIG51bWJlciBpcyBuZWdh dGl2ZSBpdCByZXByZXNlbnRzIG1pbGxpc2Vjb25kcworICAgICAgICAgICh0aG91c2FuZHRocyBv ZiBzZWNvbmRzKS4gSWYgMCBpcyBnaXZlbiBhcyB0aGUgbnVtYmVyLCB0aGVyZSBhcmUKKyAgICAg ICAgICBubyBpZGxlIHRpbWVvdXRzLiBTeW5vbnltOiBTRVQgVEVSTUlOQUwgSURMRS1MSU1JVC4K KworICAgU0VUIFRFUk1JTkFMIElETEUtQUNUSU9OIHsgUkVUVVJOLCBIQU5HVVAsIEVYSVQsIE9V VFBVVCBbIHN0cmluZyBdIH0KKyAgICAgICAgICBUaGUgYWN0aW9uIHRvIGJlIHRha2VuIHVwb24g YW4gaWRsZSB0aW1lb3V0IGluIENPTk5FQ1QgbW9kZS4KKyAgICAgICAgICBSRVRVUk4gdG8gdGhl IHByb21wdCwgSEFOR1VQIHRoZSBjb25uZWN0aW9uLCBFWElUIGZyb20gS2VybWl0LAorICAgICAg ICAgIG9yIE9VVFBVVCB0aGUgZ2l2ZW4gc3RyaW5nIChpZiBubyBzdHJpbmcgaXMgZ2l2ZW4sIGEg TlVMIChBU0NJSQorICAgICAgICAgIDApIGNoYXJhY3RlciBpcyBzZW50KS4KKworICAgU0VUIFRF Uk1JTkFMIElETEUtQUNUSU9OIHsgVEVMTkVULU5PUCwgVEVMTkVULUFZVCB9CisgICAgICAgICAg QWN0aW9ucyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBvbiBUZWxuZXQgY29ubmVjdGlvbnMgb25seSwg dGhhdAorICAgICAgICAgIG1pZ2h0IGJlIHVzZWZ1bCBpZiBpZGxlIGxpbWl0cyBhcmUgZW5mb3Jj ZWQgYnkgdGhlIFRlbG5ldCBzZXJ2ZXIKKyAgICAgICAgICBvciBpbiB0aGUgVENQL0lQIHByb3Rv Y29sOiBURUxORVQtTk9QIHNlbmRzIGEgIk5PIE9wZXJhdGlvbiIKKyAgICAgICAgICAoZG8tbm90 aGluZykgY29tbWFuZCwgd2hpY2ggY2F1c2VzIG5vIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlcjsK KyAgICAgICAgICBURUxORVQtQVlUIHNlbmRzIGFuICJBcmUgWW91IFRoZXJlIiBtZXNzYWdlIHRv IHRoZSBzZXJ2ZXIsIHdoaWNoCisgICAgICAgICAgc2hvdWxkIG1ha2UgdGhlIHNlcnZlciBzZW5k IGJhY2sgYSBtZXNzYWdlLiBOZWl0aGVyIG9mIHRoZXNlCisgICAgICAgICAgYWN0aW9ucyBpbnRl cmZlcmVzIHdpdGggeW91ciByZW1vdGUgc2Vzc2lvbi4KKworICAgU0VUIFRFUk1JTkFMIElETEUt QUNUSU9OIGlzIHVzZWZ1bCBmb3IgY29ubmVjdGlvbnMgdG8gaG9zdHMgb3Igc2VydmljZXMKKyAg IHRoYXQgYXV0b21hdGljYWxseSBsb2cgeW91IG91dCBhZnRlciBhIGNlcnRhaW4gYW1vdW50IG9m IGlkbGUgdGltZSwKKyAgIGUuZy46CisKKyAgc2V0IHRlcm0gaWRsZS10aW1lb3V0IDMwMAorICBz ZXQgdGVybSBpZGxlLWFjdGlvbiBvdXRwdXQgXDMyCisKKyAgIHNlbmRzIGEgc3BhY2UgKGFzIGlm IHlvdSBoYWQgcHJlc3NlZCB0aGUgc3BhY2UgYmFyKSBldmVyeSAzMDAgc2Vjb25kcworICAgKGZp dmUgbWludXRlcykgd2hpbGUgdGhlcmUgaXMgbm8gYWN0aXZpdHkgKDMyIGlzIHRoZSBBU0NJSSBj b2RlIGZvcgorICAgc3BhY2UpLgorCisgICBXaGVuIEMtS2VybWl0IHJldHVybnMgZnJvbSBDT05O RUNUIHRvIGNvbW1hbmQgbW9kZSwgdGhlIHJlYXNvbiBmb3IgdGhlCisgICB0cmFuc2l0aW9uIGlz IGdpdmVuIGluIGEgbmV3IHZhcmlhYmxlLCBcdihjeF9zdGF0dXMpOgorCisgICAgICAwICBObyBD T05ORUNUIGNvbW1hbmQgZ2l2ZW4geWV0LgorICAgICAgMSAgVXNlciBlc2NhcGVkIGJhY2sgbWFu dWFsbHkuCisgICAgICAyICBBIHRyaWdnZXIgc3RyaW5nIHdhcyBlbmNvdW50ZXJlZC4KKyAgICAg IDMgIElLU0QgZW50ZXJlZCBzZXJ2ZXIgbW9kZS4KKyAgICAgIDQgIEFwcGxpY2F0aW9uIFByb2dy YW0gQ29tbWFuZCByZWNlaXZlZCBmcm9tIGhvc3QuCisgICAgICA1ICBJZGxlIHRpbWVvdXQuCisg ICAgICA2ICBUZWxuZXQgcHJvdG9jb2wgZXJyb3IuCisgICAgICA3ICBLZXlzdHJva2UgbWFjcm8u CisgICAgICA4ICBUaW1lIGxpbWl0IGV4Y2VlZGVkLgorICAgIDEwMCAgSW50ZXJuYWwgZXJyb3Iu CisgICAgMTAxICBDYXJyaWVyIHJlcXVpcmVkIGJ5IG5vdCBkZXRlY3RlZC4KKyAgICAxMDIgIEkv TyBlcnJvciBvbiBjb25uZWN0aW9uLgorICAgIDEwMyAgRGlzY29ubmVjdGVkIGJ5IGhvc3QuCisg ICAgMTA0ICBEaXNjb25uZWN0ZWQgYnkgdXNlci4KKyAgICAxMDUgIFNlc3Npb24gbGltaXQgZXhj ZWVkZWQuCisgICAgMTA2ICBSZWplY3RlZCBkdWUgdG8gVGVsbmV0IHBvbGljeS4KKyAgICAxMDcg IFJlY2VpdmVkIGtpbGwgc2lnbmFsLgorCisgICBWYWx1ZXMgMTAwIGFuZCBhYm92ZSBpbmRpY2F0 ZSB0aGVyZSBpcyBubyBjb25uZWN0aW9uLgorCisgICBbIFs1NjNdVG9wIF0gWyBbNTY0XUNvbnRl bnRzIF0gWyBbNTY1XUMtS2VybWl0IEhvbWUgXSBbIFs1NjZdS2VybWl0CisgICBIb21lIF0KKwor MTMuIENIQVJBQ1RFUiBTRVRTCisKKyAgIFNlZSB0aGUgc2VjdGlvbiBvbiBbNTY3XWZpbGUgc2Nh bm5pbmcgYWJvdmUsIGFuZCB0aGUgc2VjdGlvbiBvbgorICAgY2hhcmFjdGVyLXNldCBjb252ZXJz aW9uIGluIFs1NjhdRlRQLiBBbHNvOgorCisgICAgICogVHJ1ZSBzdXBwb3J0IGZvciBDUDEyNTIg KHJhdGhlciB0aGFuIHRyZWF0aW5nIGl0IGFzIExhdGluLTEpLgorICAgICAqIFByb3BlciBoYW5k bGluZyBvZiBDMSB2YWx1ZXMgd2hlbiBjb252ZXJ0aW5nIElTTyA4LWJpdCB0ZXh0IHRvCisgICAg ICAgVVRGLTguCisgICAgICogVFlQRSAvQ0hBUkFDVEVSLVNFVDogL1RSQU5TTEFURS1UTzogYWxs b3dzIHNwZWNpZmljIHRyYW5zbGF0aW9ucy4KKyAgICAgKiBUaGUgVFJBTlNMQVRFIGNvbW1hbmQg bm93IHdvcmtzIG9uIG11bHRpcGxlIGZpbGVzLgorICAgICAqIEtfQ0hBUlNFVCBlbnZpcm9ubWVu dCB2YXJpYWJsZSB0byBzZXQgdGhlIGZpbGUgY2hhcmFjdGVyLXNldC4KKyAgICAgKiBTRVQgVFJB TlNGRVIgVFJBTlNMQVRJT04gT0ZGLgorICAgICAqIEZUUCBjbGllbnQgY2hhcmFjdGVyLXNldCB0 cmFuc2xhdGlvbiAoWzU2OV1TZWN0aW9uIDMuNykuCisKKyAgIFsgWzU3MF1Ub3AgXSBbIFs1NzFd Q29udGVudHMgXSBbIFs1NzJdQy1LZXJtaXQgSG9tZSBdIFsgWzU3M11LZXJtaXQKKyAgIEhvbWUg XQorCisxNC4gRElBTE9VVCBGUk9NIFRFTE5FVCBURVJNSU5BTCBTRVJWRVJTCisKKyAgIEZvciB5 ZWFycywgQy1LZXJtaXQgaGFzIHN1cHBvcnRlZCBkaWFsaW5nIG91dCBmcm9tIFRlbG5ldCBtb2Rl bSBzZXJ2ZXJzCisgICAoYWxzbyBjYWxsZWQgcmV2ZXJzZSB0ZXJtaW5hbCBzZXJ2ZXJzIG9yIGFj Y2VzcyBzZXJ2ZXJzKSwgYnV0IHVudGlsIG5vdworICAgdGhlcmUgd2FzIG5vIHdheSBmb3IgS2Vy bWl0IHRvIGNvbnRyb2wgdGhlIGNvbW11bmljYXRpb24gcGFyYW1ldGVycworICAgKHNwZWVkLCBw YXJpdHksIGV0Yykgb24gdGhlIHNlcmlhbCBwb3J0IG9mIHRoZSB0ZXJtaW5hbCBzZXJ2ZXI7IGl0 IGhhZAorICAgdG8gdXNlIHdoYXRldmVyIHdhcyB0aGVyZS4KKworICAgQnV0IG5vdywgaWYgeW91 IG1ha2UgYSBjb25uZWN0aW9uIHRvIGEgc2VydmVyIHRoYXQgc3VwcG9ydHMgdGhlIFRlbG5ldAor ICAgQ29tIFBvcnQgQ29udHJvbCBPcHRpb24sIFs1NzRdUkZDIDIyMTcsIHlvdSBoYXZlIHRoZSBz YW1lIGRlZ3JlZSBvZgorICAgY29udHJvbCBhcyB5b3Ugd291bGQgaGF2ZSBvdmVyIGEgc2VyaWFs IHBvcnQgb24gdGhlIGNvbXB1dGVyIHdoZXJlCisgICBLZXJtaXQgaXMgcnVubmluZzogU0VUIFNQ RUVELCBTRVQgRkxPVywgU0VUIFBBUklUWSwgU0VUIFNUT1AtQklUUywgU0hPVworICAgQ09NTSwg V0FJVCwgU0VUIENBUlJJRVItV0FUQ0gsIHRoZSBtb2RlbS1zaWduYWwgdmFyaWFibGVzLCBzZW5k aW5nCisgICBCcmVhaywgYW5kIHNvIG9uLCBhcHBseSB0byB0aGUgY29ubmVjdGlvbiBiZXR3ZWVu IHRoZSB0ZXJtaW5hbCBzZXJ2ZXIKKyAgIGFuZCB0aGUgbW9kZW0uCisKKyAgIEZvciBleGFtcGxl LCB1c2luZyBhIENpc2NvIEFjY2VzcyBTZXJ2ZXIgMjUwOSwgd2hlcmUgc3BlY2lmeWluZyBhIFRD UAorICAgcG9ydCBpbiB0aGUgNjAwMCdzIHNlbGVjdHMgYSBzZXJpYWwgcG9ydCB0aGF0IGNhbiBi ZSB1c2VkIGZvciBkaWFsaW5nCisgICBvdXQ6CisKKyAgc2V0IGhvc3QgeHh4IDYwMDEgICAgICA7 IHh4eCBpcyB0aGUgSVAgaG9zdG5hbWUgb3IgYWRkcmVzcyBvZiB0aGUgc2VydmVyCisgIChsb2cg aW4gaWYgbmVjZXNzYXJ5KSAgOyBXaXRoIGEgc2NyaXB0IG9yIGJ5IGhhbmQKKyAgc2V0IG1vZGVt IHR5cGUgdXNyICAgICA7IFRlbGwgS2VybWl0IHdoYXQga2luZCBvZiBtb2RlbSBpdCBoYXMKKyAg c2V0IHNwZWVkIDU3NjAwICAgICAgICA7IFRoaXMgYWZmZWN0cyB0aGUgc2VydmVyJ3MgcG9ydAor ICBzZXQgZmxvdyBydHMvY3RzICAgICAgIDsgRGl0dG8KKyAgZGlhbCA3NjU0MzIxCisKKyAgIFRo ZSBtb2RlbSBzZXJ2ZXIgbWlnaHQgb3IgbWlnaHQgbm90IHJlcXVpcmUgYSBsb2dpbiBzZXF1ZW5j ZS4gSXQgbWlnaHQKKyAgIGFsc28gYWxsb3cgZm9yIGF1dG9tYXRpYyBhdXRoZW50aWNhdGlvbiwg ZS5nLiB2aWEgS2VyYmVyb3MgdGlja2V0cy4KKyAgIE5PVEU6IElmIHRoZSBtb2RlbSBzZXJ2ZXIg cmVxdWlyZXMgYSBsb2dpbiBzZXF1ZW5jZSwgdGhlbiBSRURJQUwgbWlnaHQKKyAgIG5vdCB3b3Jr IGFzIGV4cGVjdGVkLgorCisgICBXaGVuIHlvdSBoYXZlIGEgVGVsbmV0IENvbSBQb3J0IGNvbm5l Y3Rpb24sIHlvdXIgU0VUIFNQRUVEIGFuZCBTRVQgRkxPVworICAgb3B0aW9ucyBjaGFuZ2UgYXV0 b21hdGljYWxseSB0byByZWZsZWN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHNlcnZlciwKKyAg IHJhdGhlciB0aGFuIHRob3NlIG9mIHlvdXIgbG9jYWwgY29tcHV0ZXIuCisKKyAgIFNlZSB0aGUg Y29uZmlndXJhdGlvbiBtYW51YWwgZm9yIHlvdXIgc2VydmVyIGZvciBhZGRpdGlvbmFsCisgICBp bmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGhvdyB0byBzZXQgdXAgdGhlIHNlcnZlciB0byBkcm9w IHRoZSBUZWxuZXQKKyAgIGNvbm5lY3Rpb24gYXV0b21hdGljYWxseSB3aGVuIHRoZSB0ZWxlcGhv bmUgY2FsbCBpcyBodW5nIHVwIChlLmcuCisgICAiYXV0b2hhbmd1cCIgb24gQ2lzY28gbW9kZWxz KS4KKworICAgRm9yIGEgTGludXgtYmFzZWQgVGVsbmV0IENvbS1Qb3J0IHNlcnZlciwgY2xpY2sg dGhlIFNyZWRpcmQgbGluazoKKworICAgWyBbNTc1XVRvcCBdIFsgWzU3Nl1Db250ZW50cyBdIFsg WzU3N11TcmVkaXJkIF0gWyBbNTc4XUMtS2VybWl0IEhvbWUgXQorICAgWyBbNTc5XUtlcm1pdCBI b21lIF0KKworMTUuIENPUElORyBXSVRIIEJST0tFTiBLRVJNSVQgUEFSVE5FUlMKKworICAgVGhl cmUgYXJlIGxvdHMgb2YgZmF1bHR5IEtlcm1pdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMgb3V0 IHRoZXJlLAorICAgZm91bmQgbWFpbmx5IGluIDNyZC1wYXJ0eSBwcm9kdWN0cyByYW5naW5nIGZy b20gY29tbXVuaWNhdGlvbnMgc29mdHdhcmUKKyAgIHBhY2thZ2VzIHRvIGZpbGUtdHJhbnNmZXIg ZnVuY3Rpb25zIGVtYmVkZGVkIHdpdGhpbiBkZXZpY2VzLiBUaGlzIHRvcGljCisgICBpcyBjb3Zl cmVkIFs1ODBdSEVSRSBmb3IgQy1LZXJtaXQgNy4wLCBidXQgQy1LZXJtaXQgOC4wIGFkZHMgc29t ZQorICAgYWRkaXRpb25hbCB0cmlja3MuCisKKyAgIFNFVCBBVFRSSUJVVEUgUkVDT1JELUZPUk1B VCB7IE9OLCBPRkYgfQorICAgICAgICAgIEFsbG93cyBjb250cm9sIG9mIHRoZSBLZXJtaXQncyBS ZWNvcmQtRm9ybWF0IGF0dHJpYnV0ZS4gU2V0IHRoaXMKKyAgICAgICAgICB0byBPRkYgaW4gY2Fz ZSBpbmNvbWluZyBmaWxlIGFyZSByZWZ1c2VkIGR1ZSB0byB1bmtub3duIG9yCisgICAgICAgICAg aW52YWxpZCByZWNvcmQgZm9ybWF0cyBpZiB5b3Ugd2FudCB0byBhY2NlcHQgdGhlIGZpbGUgYW55 d2F5LgorCisgICBTRVQgQVRUUklCVVRFUyBPRkYKKyAgICAgICAgICBUaGlzIGlzIG5vdCBhIG5l dyB0cmljaywgYnV0IGl0IHdhcyByZWNlbnRseSBkaXNjb3ZlcmVkIHRoYXQgdGhlCisgICAgICAg ICAgS2VybWl0IGltcGxlbWVudGF0aW9uIGVtYmVkZGVkIHdpdGhpbiBhIGNlcnRhaW4ga2luZCBv ZgorICAgICAgICAgIHB1bmNoaW5nL2JlbmRpbmcgbWFjaGluZSAoU2FsdmFnbmluaSBpZiB5b3Ug bXVzdCBrbm93KSBoYW5ncworICAgICAgICAgIHVwb24gcmVjZXB0aW9uIG9mIHN0YW5kYXJkIGZv cm1hdCBLZXJtaXQgYXR0cmlidXRlcyB3aGVuCisgICAgICAgICAgcmVjZWl2aW5nIGZpbGVzLiBX aGVuIHNlbmRpbmcgZmlsZXMsIGl0IHNlbmRzIGF0dHJpYnV0ZXMgb2YgaXRzCisgICAgICAgICAg b3duLCBvbmUgcGVyIEEtcGFja2V0LCB3aGljaCBpcyBzbGlnaHRseSB1bnVzdWFsIGJ1dCBsZWdh bC4gV2hlbgorICAgICAgICAgIHJlY2VpdmluZyBmaWxlcyBmcm9tIEMtS2VybWl0LCBLOTUsIE1T LURPUyBLZXJtaXQsIEtlcm1pdC0zNzAsCisgICAgICAgICAgZXRjLCBpdCBzaW1wbHkgZXhpdHMg dXBvbiByZWNlcHRpb24gb2YgdGhlIGZpcnN0IEEtcGFja2V0OworICAgICAgICAgIGFwcGFyZW50 bHkgaXQgd2FzIG5vdCBjb2RlZCBhY2NvcmRpbmcgdG8gdGhlIHByb3RvY29sCisgICAgICAgICAg c3BlY2lmaWNhdGlvbiwgd2hpY2ggYWxsb3dzIG11bHRpcGxlIGF0dHJpYnV0ZXMgcGVyIEEtcGFj a2V0LgorICAgICAgICAgIFNvbHV0aW9uOiB0ZWxsIHRoZSBmaWxlIHNlbmRlciB0byBTRVQgQVRU UklCVVRFUyBPRkYuCisKKyAgIFNFVCBTRU5EIEktUEFDS0VUUyB7IE9OLCBPRkYgfQorICAgICAg ICAgIEEgS2VybWl0IHNlcnZlciBpcyBzdXBwb3NlZCB0byBhY2NlcHQgSS1wYWNrZXRzOyB0aGlz IGlzIGhvdyB0aGUKKyAgICAgICAgICBjbGllbnQgbGV0cyB0aGUgc2VydmVyIGtub3cgaXRzIGNh cGFiaWxpdGllcyBhbmQgcHJlZmVyZW5jZXMKKyAgICAgICAgICBiZWZvcmUgc2VuZGluZyBhIGNv bW1hbmQuIEFwcGFyZW50bHkgdGhlcmUgaXMgYXQgbGVhc3Qgb25lCisgICAgICAgICAgS2VybWl0 IHNlcnZlciBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IGFjY2VwdCBJLXBhY2tldHMsIGFu ZAorICAgICAgICAgIGRvZXMgbm90IHByb3Blcmx5IHJlc3BvbmQgd2l0aCBhbiBFcnJvciBwYWNr ZXQgaWYgaXQgZ2V0cyBvbmUuCisgICAgICAgICAgVG8gZ2V0IGFyb3VuZCBzdWNoIHNpdHVhdGlv bnMgaW4gQy1LZXJtaXQgOC4wLCB5b3UgY2FuIHVzZSBTRVQKKyAgICAgICAgICBTRU5EIEktUEFD S0VUUyBPRkYgdG8gaW5oaWJpdCB0aGUgc2VuZGluZyBvZiBJIHBhY2tldHMuIEluIHRoaXMKKyAg ICAgICAgICBjYXNlLCB0aGUgY2xpZW50IG11c3QgYmUgYWJsZSB0byBhZGp1c3QgdG8gdGhlIHNl cnZlcidzCisgICAgICAgICAgY29uZmlndXJhdGlvbiwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdh eSBhcm91bmQgYXMgd2UgYXJlIHVzZWQKKyAgICAgICAgICB0by4KKworICAgU0VUIFBST1RPQ09M IEtFUk1JVCB7fSB7fSB7fQorICAgICAgICAgIEMtS2VybWl0IDYuMCBhbmQgbGF0ZXIgYXV0b21h dGljYWxseSBzZW5kICJhdXRvdXBsb2FkIiBhbmQKKyAgICAgICAgICAiYXV0b2Rvd25sb2FkIiBj b21tYW5kcyB3aGVuIGluIGxvY2FsIG1vZGUgYW5kIHlvdSBnaXZlIGEgZmlsZQorICAgICAgICAg IHRyYW5zZmVyIGNvbW1hbmQuIEZvciBleGFtcGxlLCBpZiB5b3UgdGVsbCBrZXJtaXQgdG8gInNl bmQKKyAgICAgICAgICBvb2ZhLnR4dCIsIEtlcm1pdCBzZW5kcyAia2VybWl0IC1yIiBhbmQgYSBj YXJyaWFnZSByZXR1cm4sIGluCisgICAgICAgICAgY2FzZSB5b3UgaGFkIGZvcmdvdHRlbiB0byBz dGFydCBLZXJtaXQgb24gdGhlIGZhciBlbmQgYW5kIHRvbGQKKyAgICAgICAgICBpdCB0byByZWNl aXZlIGEgZmlsZS4gSWYgYSBLZXJtaXQgcHJvZ3JhbSBoYWQgYWxyZWFkeSBiZWVuCisgICAgICAg ICAgc3RhcnRlZCBvbiB0aGUgZmFyIGVuZCwgaXQgc2hvdWxkIGhhcm1sZXNzbHkgYWJzb3JiIHRo aXMgc3RyaW5nLgorICAgICAgICAgIEhvd2V2ZXIsIHNvbWUgS2VybWl0IHByb2dyYW1zIHZpb2xh dGUgdGhlIEtlcm1pdCBwcm90b2NvbAorICAgICAgICAgIGRlZmluaXRpb24gYW5kIHRyZWF0IHN1 Y2ggc3RyaW5ncyBhcyBLZXJtaXQgcGFja2V0cyBldmVuIHRob3VnaAorICAgICAgICAgIHRoZXkg YXJlIG5vdC4gSW4gc3VjaCBjYXNlcywgZ2l2ZSB0aGlzIGNvbW1hbmQgdG8gc2V0IHRoZSBLZXJt aXQKKyAgICAgICAgICBwcm90b2NvbCBhdXRvdXBsb2FkIGFuZCBkb3dubG9hZCBzdHJpbmdzIHRv IG5vdGhpbmcsIHdoaWNoIHRlbGxzCisgICAgICAgICAgS2VybWl0IG5vdCB0byBzZW5kIHRoZW0u IChUaGlzIGlzIG5vdCBhIG5ldyBmZWF0dXJlLCBidXQgaXQgd2FzCisgICAgICAgICAgbm90IHBy ZXZpb3VzbHkgaW5jbHVkZWQgaW4gdGhlICJDb3BpbmciIHNlY3Rpb24gb2YgdGhlCisgICAgICAg ICAgZG9jdW1lbnRhdGlvbi4pCisKKyAgIFsgWzU4MV1Ub3AgXSBbIFs1ODJdQ29udGVudHMgXSBb IFs1ODNdQy1LZXJtaXQgSG9tZSBdIFsgWzU4NF1LZXJtaXQKKyAgIEhvbWUgXQorCisxNi4gTkVX IENPTU1BTkQtTElORSBPUFRJT05TCisKKyAgIGtlcm1pdCAtaCBOb3cgcHJpbnRzIGEgY29tcGxl dGUgbGlzdGluZyBvZiBpdHMgY29tbWFuZC1saW5lIG9wdGlvbnMsCisgICByYXRoZXIgdGhhbiBh biBhYmJyZXZpYXRlZCBsaXN0IHNxdWVlemVkIGludG8gYSAyNHg4MCBzcGFjZS4KKworICAgLWRk ICAgICAgICAgICAgICBEZWJ1ZywgbGlrZSAtZCBidXQgYWRkcyB0aW1lc3RhbXBzCisgICAtLXZl cnNpb24gIFNob3dzIEMtS2VybWl0IHZlcnNpb24gbnVtYmVyLgorICAgLS1ub3Blcm1zICBFcXVp dmFsZW50IHRvIFNFVCBBVFRSSUJVVEUgUFJPVEVDVElPTiBPRkYuCisKKyAgIEtlcm1pdCBub3cg YWNjZXB0cyBhIHNlbGVjdGlvbiBvZiBVUkxzIChVbml2ZXJzYWwgUmVzb3VyY2UgTG9jYXRvcnMp IGFzCisgICBpdHMgZmlyc3QgY29tbWFuZC1saW5lIGFyZ3VtZW50LiBUaGVzZSBhcmU6CisKKyAg IHRlbG5ldDpob3N0bmFtZQorICAgICAgICAgIE1ha2VzIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8g dGhlIGdpdmVuIGhvc3QgKElQIGhvc3RuYW1lIG9yCisgICAgICAgICAgYWRkcmVzcykuCisKKyAg IGZ0cDovL1t1c2VyWzpwYXNzd29yZF1AXWhvc3RuYW1lWy9wYXRoLi4uXQorICAgICAgICAgIE1h a2VzIGFuIEZUUCBjb25uZWN0aW9uIHRvIHRoZSBnaXZlbiBob3N0IChJUCBob3N0bmFtZSBvcgor ICAgICAgICAgIGFkZHJlc3MpLiBJZiBhIHVzZXJuYW1lIGlzIGdpdmVuLCBLZXJtaXQgdHJpZXMg dG8gbG9nIHlvdSBpbjsgaWYKKyAgICAgICAgICBhIHBhc3N3b3JkIGlzIGdpdmVuLCBpdCBpcyB1 c2VkOyBpZiBub3QsIHlvdSBhcmUgcHJvbXB0ZWQgZm9yCisgICAgICAgICAgb25lLiBJZiBubyB1 c2VybmFtZSBpcyBnaXZlbiwgYW4gYW5vbnltb3VzIGxvZ2luIGlzIHBlcmZvcm1lZC4KKyAgICAg ICAgICBJZiBhIHBhdGhuYW1lIGlzIGluY2x1ZGVkLCBLZXJtaXQgdHJpZXMgdG8gR0VUIHRoZSBn aXZlbiBmaWxlLgorICAgICAgICAgIFNlZSBbNTg1XVNlY3Rpb24gMy4xLjMgZm9yIGRldGFpbHMu CisKKyAgIGZ0cHM6Ly9bdXNlcls6cGFzc3dvcmRdQF1ob3N0bmFtZVsvcGF0aC4uLl0KKyAgICAg ICAgICBNYWtlcyBhIHNlY3VyZSBGVFAgY29ubmVjdGlvbiBvdmVyIFNTTC4KKworICAgdGVsbmV0 czovL1t1c2VyWzpwYXNzd29yZF1AXWhvc3RuYW1lCisgICAgICAgICAgTWFrZXMgYSBzZWN1cmUg VGVsbmV0IGNvbm5lY3Rpb24gb3ZlciBTU0wuCisKKyAgIGtlcm1pdDovL1t1c2VyWzpwYXNzd29y ZF1AXWhvc3RuYW1lWy9wYXRoLi4uXQorICAgICAgICAgIE1ha2VzIGEgY29ubmVjdGlvbiB0byBh biBbNTg2XUludGVybmV0IEtlcm1pdCBTZXJ2ZXIuCisKKyAgIGh0dHA6Ly9bdXNlcls6cGFzc3dv cmRdQF1ob3N0bmFtZVsvcGF0aC4uLl0KKyAgICAgICAgICBNYWtlcyBhIGNvbm5lY3Rpb24gdG8g V2ViIHNlcnZlci4KKworICAgaHR0cHM6Ly9bdXNlcls6cGFzc3dvcmRdQF1ob3N0bmFtZVsvcGF0 aC4uLl0KKyAgICAgICAgICBNYWtlcyBhIGNvbm5lY3Rpb24gdG8gc2VjdXJlIFdlYiBzZXJ2ZXIu CisKKyAgIFsgWzU4N11Ub3AgXSBbIFs1ODhdQ29udGVudHMgXSBbIFs1ODldQy1LZXJtaXQgSG9t ZSBdIFsgWzU5MF1LZXJtaXQKKyAgIEhvbWUgXQorCisxNy4gTE9HUworCisgICBJbiBDLUtlcm1p dCA4LjAsIHdlIG1ha2UgYW4gZWZmb3J0IHRvIGtlZXAgcGFzc3dvcmRzIG91dCBvZiB0aGUgZGVi dWcKKyAgIGxvZy4gVGhpcyBjYW4gbmV2ZXIgYmUgMTAwJSBlZmZlY3RpdmUsIGJ1dCBpdCdzIGJl dHRlciB0aGFuIGJlZm9yZSwKKyAgIHdoZW4gdGhlcmUgd2VyZSBubyBwcmVjYXV0aW9ucyBhdCBh bGwuIFdoZW5ldmVyIEtlcm1pdCBrbm93cyBpdCdzCisgICBwcm9tcHRpbmcgZm9yLCBwYXJzaW5n LCBvciB0cmFuc21pdHRpbmcgYSBwYXNzd29yZCwgaXQgdGVtcG9yYXJpbHkKKyAgIHR1cm5zIG9m ZiBsb2dnaW5nIGFuZCB0aGVuIHR1cm5zIGl0IGJhY2sgb24gYWZ0ZXJ3YXJkcy4gVGhpcyBrZWVw cyB0aGUKKyAgIGRlYnVnIGxvZyBwYXNzd29yZC1mcmVlIGluIG1vc3QgY29tbW9uIGNhc2VzLCBi dXQgdGhlcmUgY2FuIGJlIG5vCisgICBndWFyYW50ZWVzLgorCisgICBBcyBub3RlZCBlbHNld2hl cmUsIHRoZSBuZXcgIi1kZCIgY29tbWFuZC1saW5lIG9wdGlvbiBzZWxlY3RzIGEKKyAgIHRpbWVz dGFtcGVkIGRlYnVnIGxvZyAoZXF1aXZhbGVudCB0byAic2V0IGRlYnVnIHRpbWVzdGFtcHMgb24i LCAibG9nCisgICBkZWJ1ZyBkZWJ1Zy5sb2ciKS4KKworICAgQy1LZXJtaXQgOC4wIGFsc28gc3Vw cG9ydHMgYSBuZXcgdGltZXN0YW1wZWQgc2Vzc2lvbiBsb2cgdmlhICJzZXQKKyAgIHNlc3Npb24t bG9nIHRpbWVzdGFtcGVkLXRleHQiLCAibG9nIHNlc3Npb24iLgorCisgICBUaGVyZSBoYXZlIGJl ZW4gcmVxdWVzdHMgZm9yIG90aGVyIGtpbmRzIG9mIGxvZ3MsIGZvciBleGFtcGxlIGEgY29tbWFu ZAorICAgbG9nLiBUaGVzZSBtaWdodCBiZSBhZGRlZCBhdCBzb21lIHBvaW50LiBPbmUgcGVyc29u IHdhbnRlZCB0byBiZSBhYmxlCisgICB0byBsb2cgY29tbWFuZHMgd2l0aCB0aW1lc3RhbXBzLCBi dXQgb25seSBjb21tYW5kcyBpc3N1ZWQgYXQgdGhlCisgICBwcm9tcHQsIG5vdCBjb21tYW5kcyBm cm9tIGZpbGVzIG9yIG1hY3JvcywgYW5kIGFsc28gd2FudGVkIGEgaGVhZGVyCisgICBsaW5lIGF0 IHRoZSBiZWdpbm5pbmcgc2hvd2luZyB0aGUgZGF0ZSwgdXNlciwgYW5kIGhvc3QuIFRoaXMgY2Fu IGJlCisgICBkb25lIGFzIGZvbGxvd3M6CisKKyAgLmZpbGVuYW1lIDo9IFx2KGhvbWUpY29tbWFu ZHMubG9nICA7IChmb3IgZXhhbXBsZSkKKyAgZm9wZW4gL3dyaXRlIFwlYyBcbShmaWxlbmFtZSkK KyAgaWYgc3VjY2VzcyB7CisgICAgICBmd3JpdGUgL2xpbmUgXCVjIFx2KGRhdGUpOiBVc2VyPVx2 KHVzZXIpIEhvc3Q9XHYoaG9zdCkKKyAgICAgIGZjbG9zZSBcJWMKKyAgICAgIHNldCBkZWJ1ZyB0 aW1lc3RhbXBzIG9uCisgICAgICBsb2cgZGVidWcge3wgZ3JlcCAiQ01EKFApIiA+PiBcbShmaWxl bmFtZSl9IGFwcGVuZAorICB9CisKKyAgIFsgWzU5MV1Ub3AgXSBbIFs1OTJdQ29udGVudHMgXSBb IFs1OTNdQy1LZXJtaXQgSG9tZSBdIFsgWzU5NF1LZXJtaXQKKyAgIEhvbWUgXQorICAgICBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KKworCisgICAgQy1LZXJtaXQgOC4wIFVwZGF0ZSBOb3RlcyAvIFs1OTVdVGhlIEtlcm1p dCBQcm9qZWN0IC8gQ29sdW1iaWEKKyAgICBVbml2ZXJzaXR5IC8gMTUgRGVjIDIwMDMgLSAxMyBT ZXAgMjAxMAorCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1Lwor ICAgMi4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIDMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgICA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvazk1Lmh0bWwKKyAgIDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKKyAgIDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMu aHRtbAorICAgNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1cnJlbnQuaHRtbAor ICAgOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3Lmh0bWwKKyAgIDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAorICAxMC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAorICAxMS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgIDEyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDEzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorICAxNC4gaHR0cDovL3d3dy5hbWF6b24uY29tL2dw L3Byb2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxpbmtDb2Rl PWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFTSU49MTU1NTU4MTY0MQorICAx NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisgIDE2LiBt YWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1CisgIDE3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvCisgIDE4LiBodHRwOi8vd3d3Lmtlcm1pdC1wcm9qZWN0Lm9yZy8KKyAg MTkuIGh0dHA6Ly93d3cuY29sdW1iaWEubnljLm55LnVzL2tlcm1pdC8KKyAgMjAuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvQ09QWUlORy5UWFQKKyAgMjEuIGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjbWFpLmMKKyAgMjIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4dgorICAyMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAorICAyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaTcwLmh0bWwKKyAgMjUuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2YvY2tlcm1pdDcwLnR4dAorICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwKKyAgMjcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2YvY2t1a2VyLm5yCisgIDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJp dHkuaHRtCisgIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVsbmV0Lmh0bQor ICAzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cHNjcmlwdHMuaHRtbAorICAz MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCisgIDMyLiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY2J3ci50eHQKKyAgMzMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAorICAzNC4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvZi9ja3Vid3IudHh0CisgIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t2YndyLmh0bWwKKyAgMzYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2YvY2t2YndyLnR4dAorICAzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sCisgIDM4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL2Nr dWlucy50eHQKKyAgMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3ZpbnMuaHRt bAorICA0MC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9ja3ZpbnMudHh0Cisg IDQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKKyAgNDIuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2tjY2ZnLnR4dAorICA0My4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3BsbS5odG1sCisgIDQ0LiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9mL2NrY3BsbS50eHQKKyAgNDUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9pa3NkLmh0bWwKKyAgNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9za2VybWl0Lmh0bWwKKyAgNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN0b3AKKyAgNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyAgNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgIDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDAKKyAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 MQorICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gy CisgIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDIu MQorICA1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gy LjIKKyAgNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 Mi4yLjEKKyAgNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4Mi4yLjIKKyAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4Mi4yLjMKKyAgNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4Mi4yLjQKKyAgNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4Mi4yLjUKKyAgNjAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4Mi4yLjYKKyAgNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4MworICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gzLjEKKyAgNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4My4xLjEKKyAgNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjIKKyAgNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjMKKyAgNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjQKKyAgNjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4yCisgIDY4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMworICA2OS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjQKKyAgNzAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41CisgIDcxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNS4xCisgIDcyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNS4yCisgIDczLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNS4zCisgIDc0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNgorICA3NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYuMQorICA3Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYuMgorICA3 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYuMwor ICA3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjcK KyAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My43 LjEKKyAgODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 My43LjIKKyAgODEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCN4My44CisgIDgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDMuOQorICA4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjEwCisgIDg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDMuMTAuMQorICA4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjEwLjIKKyAgODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4My4xMC4zCisgIDg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEKKyAgODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4NAorICA4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g1CisgIDkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDYKKyAgOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4Ni4xCisgIDkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjeDYuMgorICA5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g2LjMKKyAgOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4Ni40CisgIDk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuNQorICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3g2LjYKKyAgOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4NworICA5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4CisgIDk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMQorIDEwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjIKKyAxMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4zCisgMTAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNAorIDEwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjUKKyAxMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC42CisgMTA1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNworIDEwNi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjgKKyAxMDcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC45CisgMTA4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTAKKyAxMDkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMQorIDExMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEyCisgMTExLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguMTMKKyAxMTIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xNAorIDExMy4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5CisgMTE0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuMQorIDExNS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjIKKyAxMTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS4zCisgMTE3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuNAorIDExOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjUKKyAxMTkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS42CisgMTIwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuNworIDEyMS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjgKKyAxMjIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS45CisgMTIz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuMTAKKyAx MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS4xMQor IDEyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxMAor IDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxMQor IDEyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxMgor IDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxMwor IDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxNAor IDEzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxNQor IDEzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxNgor IDEzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gxNwor IDEzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAor IDEzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDEzNS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxMzYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQorIDEzNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCisgMTM4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDUKKyAxMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yCisgMTQwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyAxNDEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MTUKKyAxNDIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My43CisgMTQzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwZGF0ZXMKKyAxNDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHBjaGVjaworIDE0NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cG5hbWVsaXN0Cisg MTQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjc3J2cmVu YW1lCisgMTQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj ZnRwdmRpcgorIDE0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3NldGZ0cHR5cGUKKyAxNDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4My42CisgMTUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDE1CisgMTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDguNworIDE1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gyLjEKKyAxNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCN4Mi4yCisgMTU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDguMTQKKyAxNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4OC4xMworIDE1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEzCisgMTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbAorIDE1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sCisgMTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2tlcm1p dC5odG1sCisgMTYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjc2V0bG9jdXMKKyAxNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCNsY29tbWFuZHMKKyAxNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0ODAuaHRtbCNmdHB1c2VyCisgMTYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjc2hvd3ZhcgorIDE2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI2NhbGxlcmlkCisgMTY1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDYuNgorIDE2Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gwCisgMTY3LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEKKyAxNjguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyAxNjkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDE3MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDE3MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4MAorIDE3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDE3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgMTc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaW5kZXguaHRtbAorIDE3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NS5o dG1sCisgMTc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3NoY2xpZW50Lmh0bWwK KyAxNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9za2VybWl0Lmh0bWwKKyAxODAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9za2VybWl0Lmh0bWwKKyAxODEuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zc2hjbGllbi5odG0KKyAxODIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MworIDE4My4gZnRwOi8vZnRwLmlz aS5lZHUvaW4tbm90ZXMvcmZjMTczOC50eHQKKyAxODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjIKKyAxODUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4Mi4yLjEKKyAxODYuIGZ0cDovL2Z0cC5pc2kuZWR1 L2luLW5vdGVzL3JmYzIzOTYudHh0CisgMTg3LiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9y ZmMyNjE2LnR4dAorIDE4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gyLjIuMworIDE4OS4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjYxNi50 eHQKKyAxOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4 OC4xMy43CisgMTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRt I3g1LjQKKyAxOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG0j eDE1CisgMTkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtI3g2 LjIKKyAxOTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCisg MTk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDE2Cisg MTk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisg MTk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVu dHMKKyAxOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAx OTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMjAwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMQorIDIwMS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjIKKyAyMDIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4zCisgMjAzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNAorIDIwNC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjUKKyAyMDUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My42CisgMjA2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNworIDIw Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjgKKyAy MDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My45Cisg MjA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTAK KyAyMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4x MQorIDIxMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bQorIDIx Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bSNzZXJ2ZXJzCisg MjEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjc2V0cy5odG1sCisgMjE0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdW5pY29kZS5odG1sCisgMjE1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRtI3gxLjUuNAorIDIxNi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nhc2UxMC5odG1sCisgMjE3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKKyAyMTguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMQorIDIxOS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2Z0cHNjcmlwdHMuaHRtbAorIDIyMC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDIyMS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAorIDIyMi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2Z0cGNsaWVudC5odG1sCisgMjIzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvZnRwc2NyaXB0cy5odG1sCisgMjI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMjI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaW5kZXguaHRtbAorIDIyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjEuMQorIDIyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3gzLjEuMworIDIyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gzLjEuNAorIDIyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMworIDIzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEuMworIDIzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjIKKyAyMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41CisgMjMzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNgorIDIzNC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2Z0cHNjcmlwdHMuaHRtbAorIDIzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrYjIuaHRtCisgMjM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjZnRwYXV0b2xvZworIDIzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cHVzZXIKKyAyMzguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My44CisgMjM5LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuOAorIDI0MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDI0MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAorIDI0Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDI0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2luZGV4Lmh0bWwKKyAyNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9p Ym1faWUuaHRtbAorIDI0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjEwCisgMjQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjdG9wCisgMjQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjZnRwCisgMjQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dC5odG1sCisgMjQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAor IDI1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAorIDI1 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjE3Cisg MjUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwKKyAyNTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My42CisgMjU0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTEKKyAy NTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xLjQK KyAyNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sCisgMjU3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNworIDI1 OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjcKKyAy NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMy40 CisgMjYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjcGVy bXN3aXRjaAorIDI2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI2Z0cGNobW9kCisgMjYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuNi4yCisgMjYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDQKKyAyNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN0b3AKKyAyNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNmdHAKKyAyNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKKyAyNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1s CisgMjY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDcK KyAyNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My44 CisgMjcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMu OAorIDI3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIuaHRtCisgMjcyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMTAKKyAyNzMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMAorIDI3 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjYKKyAy NzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNzZXRmdHB0 eXBlCisgMjc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj dG9wCisgMjc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj ZnRwCisgMjc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisg Mjc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDI4MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3g0LjkKKyAyODEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My41LjEKKyAyODIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNlcnJvcmFjdGlv bgorIDI4My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gx LjUKKyAyODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbCN4 NC43CisgMjg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwj eDEuNgorIDI4Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3g4LjEzCisgMjg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRt I3gxLjUuNAorIDI4OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaTcwLmh0 bQorIDI4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0 CisgMjkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMu NworIDI5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gz LjUuMgorIDI5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3gzLjcKKyAyOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRt bCNlcnJvcmFjdGlvbgorIDI5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjUuMgorIDI5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI2Vycm9yYWN0aW9uCisgMjk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwZmlsZW5hbWVzCisgMjk3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwcGVybXMKKyAyOTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHB1bmlxdWUKKyAyOTkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHBmaWxlbmFtZXMKKyAz MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNub3RlX3V0 YworIDMwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI25v dGVfZGF0ZQorIDMwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjYKKyAzMDMuIGh0dHA6Ly93d3cuYm91bGRlci5uaXN0Lmdvdi90aW1lZnJlcS9mYXEv ZmFxLmh0bSMxMDoKKyAzMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My43CisgMzA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjdG9wCisgMzA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjZnRwCisgMzA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dC5odG1sCisgMzA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAor IDMwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjEx CisgMzEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRtI3g0LjMK KyAzMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAorIDMx Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g1CisgMzEz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNi4zCisg MzE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwZmls ZW5hbWVzCisgMzE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRt I3g0LjEKKyAzMTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWk3MC5odG0j eDQuMi4yCisgMzE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pNzAuaHRt I3gxLjUuNAorIDMxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjYuMgorIDMxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3gzLjExCisgMzIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuMTEKKyAzMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCNzcnZyZW5hbWUKKyAzMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWk3MC5odG0jeDQuMQorIDMyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaTcwLmh0bQorIDMyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrYjIu aHRtCisgMzI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj ZnRwZmlsZW5hbWVzCisgMzI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuNS4zCisgMzI3LiBodHRwOi8vd3d3LnByb2Z0cGQubmV0LworIDMyOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDMyOS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAorIDMzMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDMzMS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAzMzIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2IyLmh0bQorIDMzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrY3NldHMuaHRtbAorIDMzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3Vu aWNvZGUuaHRtbAorIDMzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3NldHMu aHRtbAorIDMzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY3NldHMuaHRtbAor IDMzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g0Cisg MzM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdXRmOC5odG1sCisgMzM5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjc2V0cy5odG1sCisgMzQwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKKyAzNDEuIGZ0cDovL2Z0cC5p c2kuZWR1L2luLW5vdGVzL3JmYzI2NDAudHh0CisgMzQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgMzQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjZnRwCisgMzQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMzQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvaW5kZXguaHRtbAorIDM0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3RvcAorIDM0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI2Z0cAorIDM0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQuaHRtbAorIDM0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK KyAzNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AK KyAzNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNmdHAK KyAzNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAzNTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMzU0LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwc2NyaXB0cy5odG1sCisgMzU1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuMgorIDM1Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3gzLjIKKyAzNTcuIGZ0cDovL2Z0 cC5pc2kuZWR1L2luLW5vdGVzL3JmYzk1OS50eHQKKyAzNTguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAorIDM1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDM2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI2Z0cAorIDM2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2Z0cHNjcmlwdC5odG1sCisgMzYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCisgMzYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5k ZXguaHRtbAorIDM2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5o dG1sI3gzLjExLjEKKyAzNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My4xMS4yCisgMzY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDMuMTEuMworIDM2Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3gzLjExLjQKKyAzNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4My4xMS41CisgMzY5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMzcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvazk1Lmh0bWwKKyAzNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My4xMS41CisgMzcyLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmM5NTku dHh0CisgMzczLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyMzg5LnR4dAorIDM3NC4g aHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1mdHBleHQtbWxz dC0xNi50eHQKKyAzNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBjbGllbnQu aHRtbAorIDM3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3RvcAorIDM3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I2Z0cAorIDM3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAor IDM3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAzODAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4MworIDM4MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3VjczIKKyAzODIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyAzODMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDM4 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDM4NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAzODYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyAzODcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDM4OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDM4OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAzOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2IyLmh0bQorIDM5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3RvcAorIDM5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgMzkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCisgMzk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAorIDM5NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3g0CisgMzk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDQKKyAzOTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAu aHRtbCN4OC4xMgorIDM5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3g4LjEKKyAzOTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4MTIKKyA0MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4OC4xMgorIDQwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3RvcAorIDQwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI2NvbnRlbnRzCisgNDAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCisgNDA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXgu aHRtbAorIDQwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3g4LjE0CisgNDA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjdG9wCisgNDA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjY29udGVudHMKKyA0MDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKKyA0MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisg NDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKKyA0 MTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0 MTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50 cworIDQxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQx NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0MTUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC42CisgNDE2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDE3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0MTgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0MTkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNDIwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDIxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0MjIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0MjMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNDI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0MjYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0MjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9pbmRleC5odG1sCisgNDI4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjZmpvaW4KKyA0MjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCNmc3BsaXQKKyA0MzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4OC4xMAorIDQzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDQzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgNDMzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNDM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvaW5kZXguaHRtbAorIDQzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3g5CisgNDM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDkKKyA0MzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4OQorIDQzOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzCisgNDM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMKKyA0NDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My4yCisgNDQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMuMgorIDQ0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzLjgKKyA0NDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4MworIDQ0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3gzCisgNDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMKKyA0NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4My4yCisgNDQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjeDMKKyA0NDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 ODAuaHRtbCN4OC4xMworIDQ0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ4MC5odG1sI3g4LjEzCisgNDUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjeDkKKyA0NTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0ODAuaHRtbCN4OC4xMAorIDQ1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ4MC5odG1sI3g4LjcuNAorIDQ1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3RvcAorIDQ1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgNDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdC5odG1sCisgNDU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv aW5kZXguaHRtbAorIDQ1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI3RvcAorIDQ1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4 MC5odG1sI2NvbnRlbnRzCisgNDU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdC5odG1sCisgNDYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRt bAorIDQ2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3Rv cAorIDQ2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Nv bnRlbnRzCisgNDYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1s CisgNDY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDQ2NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjcKKyA0NjYu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0Njcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwor IDQ2OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQ2OS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0NzAuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNzY3JpcHRlZGl0CisgNDcxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDcyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0 NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0NzQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNDc1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDc2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0NzcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0NzguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNDc5LiBmdHA6Ly9mdHAuaXNpLmVkdS9p bi1ub3Rlcy9yZmMyODIyLnR4dAorIDQ4MC4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZj MjgyMi50eHQKKyA0ODEuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzI4MjIudHh0Cisg NDgyLiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyODIyLnR4dAorIDQ4My4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDQ4NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgNDg1LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNDg2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDQ4Ny4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g4LjEKKyA0ODguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA0ODkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDQ5MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDQ5MS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA0OTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OC4yCisgNDkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNDk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA0OTUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA0OTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9pbmRleC5odG1sCisgNDk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDgwLmh0bWwjeDkuOAorIDQ5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ4MC5odG1sI3g5LjgKKyA0OTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0ODAuaHRtbCN4OC4yCisgNTAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA1MDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1MDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCisgNTA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjdG9wCisgNTA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjY29udGVudHMKKyA1MDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyA1MDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgNTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj eDkuOAorIDUwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I3RvcAorIDUxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1s I2NvbnRlbnRzCisgNTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5o dG1sCisgNTEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDUx My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjgKKyA1 MTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS44Cisg NTE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkuNgor IDUxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAor IDUxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRl bnRzCisgNTE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisg NTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDUyMC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjgKKyA1MjEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OS44CisgNTIyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNTIzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA1 MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1MjUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTI2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNTI3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA1MjguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1MjkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTMwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNTMxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA1MzIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1MzMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTM0LiBtYWlsdG86dGh1Y2RhdEBob3RtYWlsLmNvbQor IDUzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5Ljku MgorIDUzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3Rv cAorIDUzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2Nv bnRlbnRzCisgNTM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1s CisgNTM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDU0MC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDU0MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisg NTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNTQzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDU0NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDU0NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRzCisgNTQ2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNTQ3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDU0OC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5LjIKKyA1NDkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA1NTAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDU1MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDU1Mi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA1NTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0ODAuaHRtbCN4NAorIDU1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ4MC5odG1sI3g0CisgNTU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjdG9wCisgNTU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjY29udGVudHMKKyA1NTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1NTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sCisgNTU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjdG9wCisgNTYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1p dDgwLmh0bWwjY29udGVudHMKKyA1NjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0Lmh0bWwKKyA1NjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5o dG1sCisgNTYzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj dG9wCisgNTY0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwj Y29udGVudHMKKyA1NjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0 bWwKKyA1NjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgNTY3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDQKKyA1Njgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4My43CisgNTY5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDMuNworIDU3 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3RvcAorIDU3 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI2NvbnRlbnRz CisgNTcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgNTcz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaW5kZXguaHRtbAorIDU3NC4gZnRwOi8v ZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjIxNy50eHQKKyA1NzUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA1NzYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cworIDU3Ny4gZnRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3JlZGlyZC8KKyA1NzguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyA1NzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9pbmRleC5odG1sCisgNTgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pNzAuaHRtI3g0LjIyCisgNTgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjdG9wCisgNTgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDgwLmh0bWwjY29udGVudHMKKyA1ODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKKyA1ODQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRl eC5odG1sCisgNTg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0 bWwjeDMuMS4zCisgNTg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Vpa3NkLmh0 bWwKKyA1ODcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0 b3AKKyA1ODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNj b250ZW50cworIDU4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRt bAorIDU5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA1OTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN0b3AKKyA1OTIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCNjb250ZW50cwor IDU5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDU5NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyA1OTUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0OTAudHh0IGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybWl0OTAudHh0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmFkZjZlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrZXJtaXQ5MC50eHQKQEAgLTAsMCArMSwyMTUy IEBACisKKyAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1 bWJpYSBVbml2ZXJzaXR5CisgICA2MTIgV2VzdCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEw MDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIC4uLnNpbmNlIDE5ODEKKyAgIFsz XUhvbWUgWzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1O ZXcgWzldRkFRCisgICBbMTBdU3VwcG9ydAorCisKKyAgICAgIFsxMV1DTElDSyBIRVJFIHRvIHJl YWQgYWJvdXQgc29tZSBvZiB0aGVzZSBpdGVtcy4KKworICAgICAgICAgIFsxMl1UYWJsZSBvZiBw bGF0Zm9ybXMgICBbMTNdQm9vazogVXNpbmcgQy1LZXJtaXQgICBbMTRdRG93bmxvYWQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Qy1LZXJtaXQgOS4wCisKK0MtS2VybWl0IDkuMCBVcGRhdGUgTm90ZXMKKworICAgTm90ZTogICBD LUtlcm1pdCA5LjAuMzAxIGNvbnRhaW5zIGEgY29ycmVjdGlvbiB0aGF0IGFwcGxpZXMgb25seSB0 bworICAgU29sYXJpcyAxMCBhbmQgMTEuCisgICAgIEMtS2VybWl0IDkuMC4zMDIgY29udGFpbnMg Y29ycmVjdGlvbnMgdGhhdCBhcHBseSBvbmx5IHRvIEZyZWVCU0QgOAorICAgYW5kIDkuCisgICAg ICogWzE1XUxhcmdlIEZpbGVzCisgICAgICogWzE2XUhvdyB0byBUZXN0IExhcmdlLUZpbGUgVHJh bnNmZXIKKyAgICAgKiBbMTddQXJpdGhtZXRpYyB3aXRoIExhcmdlIEludGVnZXJzCisgICAgICog WzE4XUZPUkNFLTMgUGFja2V0IFByb3RvY29sCisgICAgICogWzE5XVZhcmlhYmxlIEV2YWx1YXRp b24KKworICAgICAqIFsyMF1UaGUgUkVOQU1FIENvbW1hbmQgWW91IEFsd2F5cyBXYW50ZWQKKyAg ICAgKiBbMjFdT3RoZXIgTmV3IEZlYXR1cmVzCisgICAgICogWzIyXUluY29tcGF0aWJpbGl0aWVz CisgICAgICogWzIzXVdoYXQncyBOb3QgSW4gQy1LZXJtaXQgOS4wCisgICAgICogWzI0XUFuZCBh IExvb3NlIEVuZAorCisgICAgICogWzI1XURlbW9uc3RyYXRpb246IFNlY3VyZSBQT1AgbWFpbCBm ZXRjaGVyCisgICAgICogWzI2XURlbW9uc3RyYXRpb246IEhQIFN3aXRjaCBDb25maWd1cmF0aW9u IEJhY2t1cAorICAgICAqIFsyN11EZW1vbnN0cmF0aW9uOiBIUCBpTE8gQmxhZGUgQ29uZmlndXJh dGlvbgorICAgICAqIFsyOF1EZW1vbnN0cmF0aW9uOiBJQk0vUm9sbS9TaWVtZW5zIENCWCBNYW5h Z2VtZW50CisgICAgICogWzI5XURlbW9uc3RyYXRpb246IENTViBhbmQgVFNWIEZpbGVzCisgICAg ICogWzMwXURlbW9uc3RyYXRpb24gU2NyaXB0cyBmb3IgV2VibWFzdGVycworCisgICBUaGlzIGlz IHRoZSB0aGlyZCBzdXBwbGVtZW50IHRvIFszMV1Vc2luZyBDLUtlcm1pdCwgU2Vjb25kIEVkaXRp b24uIEkKKyAgIGFwb2xvZ2l6ZSBmb3IgdGhlIHNjYXR0ZXJlZCBuYXR1cmUgb2YgdGhlIGluZm9y bWF0aW9uIGFuZCBJIGhvcGUgSSBjYW4KKyAgIG9yZ2FuaXplIGl0IGFuZCBnYXRoZXIgaXQgYWxs IGludG8gb25lIHBsYWNlIGZvciBlYXN5IGFuZCBkZWZpbml0aXZlCisgICByZWZlcmVuY2Ugc29t ZSBkYXkuIEl0J3MgYSBiaWcgam9iIHNvIGl0IGRlcGVuZHMgb24gdGhlIGRlbWFuZC4gRm9yIHRo ZQorICAgdGltZSBiZWluZyB0aGUgZGVmaW5pdGl2ZSByZWZlcmVuY2UgYW5kIGludHJvZHVjdGlv biBpcyB0aGUgYm9vayAod2hpY2gKKyAgIGlzIG5vdyBhdmFpbGFibGUgYWxzbyBpbiBhIFszMl1L aW5kbGUgRWRpdGlvbiksIHBsdXMgdGhlIFszM11DLUtlcm1pdAorICAgNy4wIHVwZGF0ZSwgWzM0 XUMtS2VybWl0IDguMCB1cGRhdGUsIGFuZCBub3cgdGhpcyBvbmUuIFBsdXMgdG9ucyBvZgorICAg b3RoZXIgd2ViIHBhZ2VzIG9uIHRoaXMgc2l0ZSwgc2FtcGxlIHNjcmlwdCBwcm9ncmFtcywgYW5k IHNvIG9uLgorCisgICBJbiB2ZXJzaW9uIDYuMCwgQy1LZXJtaXQgd2FzIGEgcHJldHR5IHBvd2Vy ZnVsIGFuZCBmbGV4aWJsZQorICAgY29tbXVuaWNhdGlvbiBwcm9ncmFtIHdpdGggc2NyaXB0aW5n IGNhcGFiaWxpdGllcy4gQnkgdmVyc2lvbiA5LjAsIEknZAorICAgbGlrZSB0byB0aGluayBvZiBp dCBtb3JlIGFzIGEgc2NyaXB0aW5nIGxhbmd1YWdlIHdpdGggYnVpbHQtaW4KKyAgIGNvbW11bmlj YXRpb25zLiBZb3UgY2FuIGdldCBhbiBpZGVhIG9mIHRoZSBraW5kcyBvZiBwcm9ncmFtcyB5b3Ug Y2FuCisgICB3cml0ZSBpbiBLZXJtaXQgbGFuZ3VhZ2UgWzM1XWhlcmUuIFlvdSBjYW4gZGV2ZWxv cCBwcm9ncmFtcyBxdWlja2x5CisgICBiZWNhdXNlIGl0J3MgYW4gaW50ZXJhY3RpdmUgcHJvZ3Jh bSwgbm90IGEgY29tcGlsZXIuIFRoZSBzY3JpcHRpbmcKKyAgIGxhbmd1YWdlIGlzIHRoZSBjb21t YW5kIGxhbmd1YWdlLiBLaW5kIG9mIGxpa2UgdGhlIFVuaXggc2hlbGwgYnV0CisgICAic29tZXdo YXQiIGxlc3MgY3J5cHRpYywgaW5jbHVkaW5nIGNvbmNlcHRzIG5vdCBvbmx5IGZyb20gQyBidXQg ZnJvbQorICAgUEwvSSwgU25vYm9sLCBMSVNQLCBCbGlzcywgYW5kIFNtYWxsdGFsay4gVGhlIGxh bmd1YWdlIGl0c2VsZiBpcyBidWlsdAorICAgdXBvbiB0aGUgY29tbWFuZCBsYW5ndWFnZSBvZiB0 aGUgbXVjaC1sb3ZlZCBbMzZdREVDU1lTVEVNLTIwIGZyb20gdGhlCisgICAxOTcwcyBhbmQgODBz LCB0aGUgQ2xpcHBlciBTaGlwIG9mIHRoZSBUZXh0IEVyYS4gKFRleHQgaXMgbm90IGEgYmFkCisg ICB3b3JkLiBUaG9zZSBvZiB1cyB3aG8gY2FuIHRvdWNoLXR5cGUgYW5kIHdobyBhcmUgcHJvZmlj aWVudCBpbgorICAgdGV4dC1iYXNlZCBjb21wdXRpbmcgZW52aXJvbm1lbnRzIGxpa2UgVW5peCBz aGVsbCBvciBWTVMgRENMIGFyZSBsaWtlbHkKKyAgIHRvIGJlIG9yZGVycyBvZiBtYWduaXR1ZGUg bW9yZSBwcm9kdWN0aXZlIHRoYW4gdXNlcnMgb2YgR1VJcy4pCisKKyAgIFRoYW5rcyB0byAoYXQg bGVhc3QpIEplZmYgQWx0bWFuLCBXaWxsaWFtIEJhZGVyLCBJYW4gQmVja3dpdGgsIE5lbHNvbgor ICAgQmVlYmUsIEdlcnJ5IEJlbGFuZ2VyLCBKb29wIEJvb25lbiwgUm9iIEJyb3duLCBDaHJpc3Rp YW4gQ29ydGksIEFsZXhleQorICAgRG9rdWNoYWV2LCBKb2huIER1bmxhcCwgUGV0ZXIgRWljaGhv cm4sIENhcmwgRnJpZWRiZXJnLCBUZXJyeSBLZW5uZWR5LAorICAgR++/vW50ZXIgS25hdWYsIEph c29uIExlaHIsIEFydGh1ciBNYXJzaCwgTGV3aXMgTWNDYXJ0aHksIEdhcnkgTWlsbHMsIEVkCisg ICBSYXZpbiwgSm9uYXRoYW4gUmVhbXMsIE1pa2UgUmVjaHRtYW4sIE1hcmsgU2FwaXJvLCBTdGV2 ZW4gU2Nod2VkYQorICAgKFNNUyksIEtpbmphbCBTaGFoLCBNaWNoYWVsIFNva29sb3YsIEFuZHkg VGFuZW5iYXVtLCBTZXRoIFRoZXJpYXVsdCwKKyAgIFphY2ggQS4gVGhvbWFzLCBNYXJ0aW4gVm9y bO+/vW5kZXIsIGFuZCBFcmljIFdlYXZlciBmb3IgYXNzaXN0YW5jZSwgYW5kCisgICB0byBIZXds ZXR0LVBhY2thcmQgQ29tcGFueSBmb3Igc3VwcG9ydC4KKworICAgICAtIEZyYW5rIGRhIENydXog ICBbMzddZmRjQGNvbHVtYmlhLmVkdSwgMzAgSnVuZSAyMDExCisKKyAgIFAuUy4gSXQgb2NjdXJy ZWQgdG8gbWUganVzdCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgZGF5IHRoYXQgbWF5YmUgSQorICAg c2hvdWxkIGJhY2sgdXAgdGhlIEtlcm1pdCB3ZWJzaXRlIG9uIERWRCwganVzdCBpbiBjYXNlLiBV c2luZworICAgWzM4XUtlcm1pdCA5NSBvbiB0aGUgZGVza3RvcCBvdmVyIGFuIFNTSCBjb25uZWN0 aW9uIHRvIHRoZSBVbml4IGZpbGUKKyAgIHN5c3RlbSB3aGVyZSB0aGUgd2Vic2l0ZSByZXNpZGVz LCBJIG1hZGUgYSBmcmVzaCBkaXJlY3Rvcnkgb24gdGhlIFBDLAorICAgQ0QnZCB0byBpdCwgYW5k IG9uIFVuaXggY2QnZCB0byB0aGUgV2Vic2l0ZSBkaXJlY3RvcnksIGFuZCB0b2xkCisgICBDLUtl cm1pdCA5LjAgdG86CisKK0MtS2VybWl0PiBzZW5kIC9yZWN1cnNpdmUgL2RvdGZpbGVzIC9ub2Jh Y2t1cCAqCisKKyAgIGFuZCBpdCByZS1jcmVhdGVkIHRoZSB3ZWJzaXRlIGRpcmVjdG9yeSB0cmVl IGluIHRoZSBQQyBkaXJlY3RvcnksIHRleHQKKyAgIGZpbGVzIGNvcnJlY3RseSBjb252ZXJ0ZWQg dG8gV2luZG93cyBmb3JtYXQgYW5kIGJpbmFyeSBmaWxlcyBjb3JyZWN0bHkKKyAgIGxlZnQgYXMt aXMuIFRoZSAvZG90ZmlsZXMgc3dpdGNoIG1lYW5zIHRvIGluY2x1ZGUgZmlsZXMgc3VjaCBhcwor ICAgLmh0YWNjZXNzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggYSBkb3QgKHBlcmlvZCksIGFuZCB0 aGUgL25vYmFja3VwCisgICBzd2l0Y2ggbWVhbnMgdG8gc2tpcCBiYWNrdXAgZmlsZXMgY3JlYXRl ZCBieSBFTUFDcyAoc3VjaCBhcworICAgaW5kZXguaHRtbC5+MjQzfikuIEFuZCB0aGVuIEkgZGlk IHRoZSBzYW1lIHdpdGggdGhlIEZUUCBzaXRlcywgYWJvdXQKKyAgIDhHQiBpbiBhbGwuIFdhdGNo aW5nIHRoZSBmaWxlLXRyYW5zZmVyIGRpc3BsYXkgd2FzIGtpbmQgb2YgbGlrZSBoYXZpbmcKKyAg IDMwIHllYXJzIG9mIG15IGxpZmUgZmxhc2ggYmVmb3JlIG15IGV5ZXMgaW4gYSBmZXcgbWludXRl cy4gVGhlbiBJCisgICBjb3BpZWQgdGhlIHR3byBkaXJlY3RvcmllcyB0byBEVkQgKHRoZSBGVFAg c2l0ZSBoYWQgdG8gYmUgc3BsaXQgb3ZlciAyCisgICBEVkRzKS4gVGhlIHdob2xlIG9wZXJhdGlv biB0b29rIHVuZGVyIGhhbGYgYW4gaG91ci4gVGhlIGRpcmVjdG9yeSB0cmVlCisgICBvbiB0aGUg Q0QgaXMgZGlyZWN0bHkgdXNhYmxlIGluIFdpbmRvd3MsIFVuaXgsIG9yIGFueSBvdGhlciBvcGVy YXRpbmcKKyAgIHN5c3RlbSAodW5saWtlIGlmIEkgaGFkIHRyYW5zZmVycmVkIHRoZSBmaWxlcyBh bGwgaW4gYmluYXJ5IG1vZGUgb3IgYWxsCisgICBpbiB0ZXh0IG1vZGUsIG9yIGlmIEkgaGFkIG1h ZGUsIHNheSwgYSBnemlwcGVkIHRhciBhcmNoaXZlIG9yIGEgemlwCisgICBhcmNoaXZlKS4gSSBi ZWxpZXZlIHRoYXQsIHRvIHRoaXMgZGF5LCBLZXJtaXQgaXMgdGhlIG9ubHkgc29mdHdhcmUgdGhh dAorICAgY2FuIGRvIHRoaXMuIElmIHNvbWVkYXkgSSBoYXZlIHRvIHVwbG9hZCBmcm9tIHRoZXNl IERWRHMgdG8gVW5peCwgVk1TLAorICAgb3IgYW55IG90aGVyIG9wZXJhdGluZyBzeXN0ZW0sIGl0 IGNhbiBiZSBkb25lIGV4YWN0bHkgdGhlIHNhbWUgd2F5LAorICAgd2l0aCBhbnkgbmVjZXNzYXJ5 IGNvbnZlcnNpb25zIG9uIHRleHQgZmlsZXMgZG9uZSBhdXRvbWF0aWNhbGx5LCBhbmQKKyAgIGJp bmFyeSBmaWxlcyBsZWZ0IGludGFjdCwgcmVjdXJzaXZlbHkgdGhyb3VnaCBhIHdob2xlIHZlcnkg bGFyZ2UKKyAgIGRpcmVjdG9yeSB0cmVlLgorCitXaGF0J3MgTmV3IGluIEdlbmVyYWwKKworICAg VmVyeSBicmllZmx5LCB0aGUgbWFqb3IgaXRlbXM6CisgICAgICogWzM5XU9wZW4gU291cmNlIGxp Y2Vuc2UuCisgICAgICogWzQwXTY0LWJpdCBmaWxlIGFjY2VzcyBhbmQgdHJhbnNmZXIgYW5kIDY0 LWJpdCBpbnRlZ2VyIGFyaXRobWV0aWMKKyAgICAgICBvbiBtb3N0IGNvbW1vbiBwbGF0Zm9ybXMu CisgICAgICogU3VwcG9ydCBmb3IgcmVjZW50IHJlbGVhc2VzIG9mIExpbnV4LCBNYWMgT1MgWCwg KkJTRCwgZXRjIChbNDFdc2VlCisgICAgICAgdGFibGUpLgorICAgICAqIFN1cHBvcnQgZm9yIG5l d2VyIE9wZW5TU0wgcmVsZWFzZXMgdXAgdG8gYW5kIGluY2x1ZGluZyAxLjAuMGQKKyAgICAgICAo WzQyXXNlZSB0YWJsZSkuCisgICAgICogWzQzXVN0cmVuZ3RoZW5lZCBlcnJvciBjaGVja2luZyBm b3IgZmlsZSB0cmFuc2ZlciB1bmRlciBleHRyZW1lbHkKKyAgICAgICBoYXJzaCBjb25kaXRpb25z LgorICAgICAqIFs0NF1TaW1wbGlmaWVkIHNlbWFudGljcyBmb3IgdmFyaWFibGVzIHVzZWQgaW4g c2NyaXB0cy4KKyAgICAgKiBTdXBlci1oYW5keSBbNDVdZXh0ZW5zaW9ucyB0byB0aGUgUkVOQU1F IGNvbW1hbmQuCisgICAgICogT3RoZXIgc2NyaXB0aW5nIGltcHJvdmVtZW50cyBpbmNsdWRpbmcg c3VwcG9ydCBmb3IgcmVhZGluZyBhbmQKKyAgICAgICB3cml0aW5nIFs0Nl1DU1YgYW5kIFRTViBm aWxlcy4KKyAgICAgKiBbNDddTUlNRSBjaGFyYWN0ZXItc2V0IG5hbWVzIGFyZSBub3cgcmVjb2du aXplZC4KKyAgICAgKiBJbXByb3ZlZCBsb2dnaW5nIGFuZCBkZWJ1Z2dpbmcgKHNlZSBkZW1vIFs0 OF1oZXJlKS4KKyAgICAgKiBMb3RzIG1vcmUgZGVzY3JpYmVkIG9yIGxpc3RlZCBiZWxvdywgYW5k IFs0OV1oZXJlLgorCitPcGVuIFNvdXJjZSBMaWNlbnNlCisKKyAgIEMtS2VybWl0IDkuMCBoYXMg dGhlIFs1MF1SZXZpc2VkIDMtQ2xhdXNlIEJTRCBMaWNlbnNlLCBhbiBvcGVuIHNvdXJjZQorICAg bGljZW5zZSBhcHByb3ZlZCBieSBPU0ksIHRoZSBbNTFdT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4K KworTGFyZ2UgRmlsZXMKKworICAgS2VybWl0IGlzLCBmaXJzdCBhbmQgZm9yZW1vc3QsIGEgZmls ZS10cmFuc2ZlciBwcm9ncmFtLiBPbmUgbWlnaHQKKyAgIGV4cGVjdCBpdCB0byBiZSBhYmxlIHRv IHRyYW5zZmVyIGFueSBraW5kIG9mIGZpbGUsIGJ1dCB0aGF0IGhhcyBiZWVuCisgICBkZWNyZWFz aW5nbHkgdGhlIGNhc2UgYXMgZmlsZSBzaXplcyBiZWdhbiB0byBjcm9zcyB0aGUgMiBnaWdhYnl0 ZQorICAgdGhyZXNob2xkLgorCisgICBUaGUgYmlnZ2VzdCBjaGFuZ2Ugc2luY2UgQy1LZXJtaXQg OC4wLjIxMSBpcyBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcyBvbgorICAgcGxhdGZvcm1zIHRoYXQg c3VwcG9ydCB0aGVtLiBBICJsYXJnZSBmaWxlIiBpcyBvbmUgd2hvc2Ugc2l6ZSBpcworICAgZ3Jl YXRlciB0aGFuIDJeMzEtMSAoMiwxNDcsNDgzLDY0NykgYnl0ZXMgKDJHQi0xKTsgdGhhdCBpcywg b25lIHdob3NlCisgICBzaXplIHJlcXVpcmVzIG1vcmUgdGhhbiAzMSBiaXRzIHRvIHJlcHJlc2Vu dC4gQmVmb3JlIG5vdywgS2VybWl0IHdhcworICAgYWJsZSB0byBhY2Nlc3Mgc3VjaCBmaWxlcyBv bmx5IG9uIDEwMCUgNjQtYml0IHBsYXRmb3JtcyBzdWNoIGFzIERpZ2l0YWwKKyAgIFVuaXgsIGxh dGVyIGtub3duIGFzIFRydTY0IFVuaXguIEluIHRoZSBuZXcgcmVsZWFzZSwgS2VybWl0IHRha2Vz CisgICBhZHZhbnRhZ2Ugb2YgdGhlIFgvT3BlbiBTaW5nbGUgVU5JWCBTcGVjaWZpY2F0aW9uIFZl cnNpb24gMiAoVU5JWCA5OCkKKyAgIExhcmdlIEZpbGUgU3VwcG9ydCAoTEZTKSBzcGVjaWZpY2F0 aW9uLCB3aGljaCBhbGxvd3MgMzItYml0IHBsYXRmb3JtcworICAgdG8gY3JlYXRlLCBhY2Nlc3Ms IGFuZCBtYW5hZ2UgZmlsZXMgbGFyZ2VyIHRoYW4gMkdCLgorCisgICBBY2NvbW1vZGF0aW5nIGxh cmdlIGZpbGVzIHJlcXVpcmVkIGNvZGUgY2hhbmdlcyBpbiBtYW55IG1vZHVsZXMsCisgICBhZmZl Y3Rpbmcgbm90IG9ubHkgZmlsZSB0cmFuc2ZlciwgYnV0IGFsc28gZmlsZSBtYW5hZ2VtZW50IGZ1 bmN0aW9ucworICAgZnJvbSBkaXJlY3RvcnkgbGlzdGluZ3MgdG8gbG9jYWwgZmlsZSBtYW5pcHVs YXRpb24sIHBsdXMgdGhlIHVzZXIKKyAgIGludGVyZmFjZSBpdHNlbGYgdG8gYWxsb3cgZW50cnkg YW5kIGRpc3BsYXkgb2YgbGFyZ2UgbnVtYmVycy4gQWxsIHRoaXMKKyAgIGhhZCB0byBiZSBkb25l IGluIGEgd2F5IHRoYXQgd291bGQgbm90IGFmZmVjdCBwdXJlIDMyLWJpdCBidWlsZHMgb24KKyAg IHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzLiBMYXJnZSBmaWxlIHN1 cHBvcnQgaXMKKyAgIHN1bW1hcml6ZWQgaW4gdGhlIFs1Ml1UYWJsZSBvZiBQbGF0Zm9ybXM7IGVu dHJpZXMgaW4gWWVsbG93ICgzMi1iaXQKKyAgIGJ1aWxkcyB0aGF0IHN1cHBvcnQgNjQtYml0IGlu dGVnZXJzKSBhbmQgR3JlZW4gKDY0LWJpdCBidWlsZHMpIHN1cHBvcnQKKyAgIGxhcmdlIGZpbGVz LgorCisgICBOb3RlIHRoYXQgVk1TIEMtS2VybWl0IGFuZCBLZXJtaXQgOTUgZm9yIFdpbmRvd3Mg aGF2ZSBhbHdheXMgYmVlbiBhYmxlCisgICB0byB0cmFuc2ZlciBsYXJnZSBmaWxlcy4gSG93ZXZl ciB0aGVpciB1c2VyIGludGVyZmFjZSB1c2VkIDMyLWJpdAorICAgaW50ZWdlcnMgZm9yIHN0YXRp c3RpY3MgYW5kIHRoZSBmaWxlIHRyYW5zZmVyIGRpc3BsYXkuIEluIEMtS2VybWl0IDkuMAorICAg QWxwaGEuMDMsIFZNUyBDLUtlcm1pdCBvbiA2NC1iaXQgcGxhdGZvcm1zIChBbHBoYSBhbmQgSXRh bml1bSkgc2hvdWxkCisgICBub3cgZ2l2ZSBjb3JyZWN0IHN0YXRpc3RpY3MgYW5kIHByb2dyZXNz IGRpc3BsYXlzLiAoV2UnbGwgc2VlIGFib3V0CisgICBLZXJtaXQgOTUgbGF0ZXIuKQorCitIb3cg dG8gVGVzdCBMYXJnZS1GaWxlIFRyYW5zZmVyCisKKyAgIFNldmVyYWwgbWV0aG9kcyBhcmUgYXZh aWxhYmxlIGZvciB0ZXN0aW5nIGxhcmdlLWZpbGUgdHJhbnNmZXJzOgorICAgICAqIEJ5IHRyYW5z ZmVycmluZyBhIHJlYWwgZmlsZSB0aGF0IGlzIG1vcmUgdGhhbiAyMTQ3NDgzNjQ4IGJ5dGVzIGxv bmcKKyAgICAgICAoYSBmaWxlIHdob3NlIGxlbmd0aCByZXF1aXJlcyBtb3JlIHRoYW4gMzEgYml0 cyB0byBleHByZXNzKTsgb3IgdG8KKyAgICAgICBiZSB0b3RhbGx5IHN1cmUsIHRoYXQgaXMgbG9u Z2VyIHRoYW4gNDI5NDk2NzI5NiBieXRlcyAoMzIgYml0cyBvcgorICAgICAgIG1vcmUpLiBPciB0 byBiZSBkb3VibGUgc3VwZXIgc3VyZSwgbG9uZ2VyIHRoYW4gODU4OTkzNDU5MiAoMzMKKyAgICAg ICBiaXRzKS4KKyAgICAgKiBJZiB5b3UgZG9uJ3QgaGF2ZSBzdWNoIGEgZmlsZSBvciB0aGVyZSBp cyBub3Qgc3VmZmljaWVudCBkaXNrIHNwYWNlCisgICAgICAgZm9yIHN1Y2ggYSBmaWxlLCB5b3Ug Y2FuIGNyZWF0ZSBhIHNwZWNpYWwga2luZCBvZiBmaWxlIHRoYXQgdGFrZXMKKyAgICAgICB1cCBv bmUgYmxvY2sgb24gdGhlIGRpc2sgYnV0IGFwcGVhcnMgdG8gYmUgNC4zR0IgbG9uZyBieSBjb21w aWxpbmcKKyAgICAgICBhbmQgcnVubmluZyBbNTNdVEhJUyBDIFBST0dSQU0gb24gTGludXgsIFNv bGFyaXMsIEhQLVVYLCBvciBvdGhlcgorICAgICAgIFVuaXggcGxhdGZvcm0gdGhhdCBzdXBwb3J0 cyBsYXJnZSBmaWxlcy4gS2VybWl0IG9yIEZUUCBvciBhbnkgb3RoZXIKKyAgICAgICBmaWxlIHRy YW5zZmVyIHByb2dyYW0gd2lsbCB0cmFuc2ZlciB0aGUgcmVzdWx0IChCSUdGSUxFKSBpbiBzdWNo IGEKKyAgICAgICB3YXkgYXMgdG8gYWN0dWFsbHkgcHV0IDQuM0dCIChvciBvdGhlciBkZXNpcmVk IHNpemU7IHNlZSBzb3VyY2UpIG9uCisgICAgICAgdGhlIHdpcmUuCisgICAgICogWW91IGNhbiB1 c2UgS2VybWl0J3MgQ0FMSUJSQVRFIGZlYXR1cmUgdG8gdHJhbnNmZXIgYSBsYXJnZSBmaWxlCisg ICAgICAgdGhhdCBkb2Vzbid0IGV4aXN0LiBBdCB0aGUgcmVjZWl2ZXIsIHVzZSBSRUNFSVZFIC9D QUxJQlJBVEUuIEF0IHRoZQorICAgICAgIHNlbmRlciwgdXNlIFNFTkQgL0NBTElCUkFURTpsZW5n dGgsIGUuZy46CisKKyAgICAgKEF0IHJlbW90ZSBrZXJtaXQuLi4pCisgICAgICQga2VybWl0IC1Z CisgICAgIEMtS2VybWl0PiByZWNlaXZlIC9jYWxpYnJhdGUKKyAgICAgKFJldHVybiB0byBsb2Nh bCBrZXJtaXQuLi4pCisgICAgIEN0cmwtXGMKKyAgICAgQy1LZXJtaXQ+IHNlbmQgL2NhbGlicmF0 ZTo0MzAwMDAwMDAwCisgICAgICAgVGhpcyBzZW5kcyBhIHNpbXVsYXRlZCBmaWxlIDQuM0dCIGlu IGxlbmd0aCwgdGhhdCBkb2VzIG5vdCBleGlzdCBvbgorICAgICAgIHRoZSBzZW5kZXIgYW5kIHdp bGwgbm90IHRha2UgdXAgYW55IGRpc2sgc3BhY2Ugb24gdGhlIHJlY2VpdmVyLgorICAgICAgIFNF TkQgL0NBTElCUkFURTogYWNjZXB0cyBiaWcgbnVtYmVycyBvbmx5IGluIEtlcm1pdCB2ZXJzaW9u cyB0aGF0CisgICAgICAgc3VwcG9ydCB0aGVtICh0aGlzIGRvZXMgbm90IGluY2x1ZGUgS2VybWl0 IDk1IG9uIFdpbmRvd3MpLiBUaGlzCisgICAgICAgbWV0aG9kIHRlc3RzIG9ubHkgS2VybWl0J3Mg YWJpbGl0eSB0byBleHByZXNzIGFuZCB1bmRlcnN0YW5kIGxhcmdlCisgICAgICAgZmlsZSBzaXpl cywgYnV0IGRvZXMgbm90IHRlc3QgS2VybWl0J3MgZmlsZS1zeXN0ZW0gaW50ZXJmYWNlLCBzaW5j ZQorICAgICAgIG5vIGZpbGVzIGFyZSBpbnZvbHZlZC4KKworQXJpdGhtZXRpYyB3aXRoIExhcmdl IEludGVnZXJzCisKKyAgIEJlY2F1c2UgbGFyZ2UgZmlsZSBzdXBwb3J0IHJlcXVpcmVzIHRoZSBh dmFpbGFiaWxpdHkgb2YgYSA2NC1iaXQgc2lnbmVkCisgICBpbnRlZ2VyIGRhdGEgdHlwZSwgb3Ro ZXIgYXNwZWN0cyBvZiBDLUtlcm1pdCB3ZXJlIGFkYXB0ZWQgdG8gdXNlIGl0CisgICB0b28sIG1v c3Qgbm90YWJseSBLZXJtaXQncyBhbGdlYnJhaWMgZXhwcmVzc2lvbiBldmFsdWF0b3IgYW5kIGl0 cworICAgWzU0XVMtRXhwcmVzc2lvbiBpbnRlcnByZXRlciwgb24gYWxsIHBsYXRmb3JtcyB0aGF0 IHN1cHBvcnQgbGFyZ2UgZmlsZXMKKyAgICh0aG9zZSBsaXN0ZWQgYXMgNjQgb3IgMzIvNjQgaW4g dGhlIFdvcmQgY29sdW1uIG9mIHRoZSBbNTVddGFibGUpLiBJbgorICAgZmFjdCwgZXZlcnkgS2Vy bWl0IGNvbW1hbmQgdGhhdCBwYXJzZXMgYSBudW1iZXIgaW4gYW55IGZpZWxkIGNhbiBub3cKKyAg IHBhcnNlIGEgbGFyZ2UgbnVtYmVyIG9uIHRob3NlIHBsYXRmb3Jtcy4KKworICAgUy1FeHByZXNz aW9ucyBjYW4gbm93IGJlIGZvcmNlZCB0byBvcGVyYXRlIHdpdGggaW50ZWdlcnMgb25seSwgd2l0 aG91dAorICAgZmxvYXRpbmctcG9pbnQgY29udmVyc2lvbiBvciBoYXZpbmcgdG8gZXhwbGljaXRs eSB0cnVuY2F0ZSBlYWNoIHJlc3VsdDsKKyAgIGFzIGFuIGV4YW1wbGUuIHNlZSB0aGUgcmV2aXNl ZCBbNTZdRWFzdGVyIGRhdGUgY2FsY3VsYXRpb24gc2NyaXB0LgorCitGT1JDRS0zIFBhY2tldCBQ cm90b2NvbAorCisgICBUaGUgS2VybWl0IHByb3RvY29sIGhhcyBwcm92ZW4gaXRzZWxmIG92ZXIg dGhlIHBhc3QgMzAgeWVhcnMgdG8gYmUKKyAgIHJvYnVzdCBpbiB0ZXJtcyBvZiBzdXJ2aXZpbmcg aGFyc2ggdHJhbnNtaXNzaW9uIGVudmlyb25tZW50cyBhbmQKKyAgIGRlbGl2ZXJpbmcgdGhlIGRh dGEgY29ycmVjdGx5IGFuZCBjb21wbGV0ZWx5LiBJbiB0aGVzZSB0aW1lcyBvZgorICAgSW50ZXJu ZXQgZXZlcnl3aGVyZSBhbmQgZXJyb3ItY29ycmVjdGluZyBtb2RlbXMgaW4gdGhlIGZldyBwbGFj ZXMgd2hlcmUKKyAgIHRoZSBJbnRlcm5ldCBpc24ndCwgZmV3IHBlb3BsZSBldmVuIHJlY2FsbCB0 aGUga2luZHMgb2YgZGlmZmljdWx0CisgICBjb25kaXRpb25zIHRoYXQgd2VyZSBjb21tb24gd2hl biB0aGUgS2VybWl0IHByb3RvY29sIHdhcyBmaXJzdAorICAgZGV2ZWxvcGVkOiBub2lzeSB0ZWxl cGhvbmUgbGluZXMsIHNlcmlhbCBpbnRlcmZhY2VzIHRoYXQgZHJvcAorICAgY2hhcmFjdGVycywg bGFjayBvZiB0cmFuc3BhcmVuY3kgdG8gY29udHJvbCBvciA4LWJpdCBjaGFyYWN0ZXJzLAorICAg YWJzZW5jZSBvZiBmbG93IGNvbnRyb2wsICJiYXJlIiBtb2RlbXMgd2l0aG91dCBlcnJvciBjb3Jy ZWN0aW9uLgorCisgICBCdXQgdGhlIEludGVybmV0IGlzIG5vdCBldmVyeXdoZXJlLCBhbmQgbm90 IGFsbCBtb2RlbXMgYXJlCisgICBlcnJvci1jb3JyZWN0aW5nLiBQZXJoYXBzIHRoZSBtb3N0IGRp ZmZpY3VsdCB0cmlhbCBzbyBmYXIgZm9yIEtlcm1pdCBvcgorICAgYW55IG90aGVyIHByb3RvY29s IGlzIHRoZSBbNTddRU0tQVBFWCBwcm9qZWN0LCBpbiB3aGljaCBmbG9hdHMgYXJlCisgICBkcm9w cGVkIGludG8gdGhlIG9jZWFuIGZyb20gYW4gYWlyY3JhZnQgaW50byB0aGUgcGF0aCBvZiBhIGh1 cnJpY2FuZTsKKyAgIHRoZXNlIGZsb2F0cyBkaXZlIGludG8gdGhlIHdhdGVyIG1lYXN1cmluZyBj dXJyZW50LCB0ZW1wZXJhdHVyZSwgYW5kCisgICBzYWxpbml0eSBhdCBkaWZmZXJlbnQgZGVwdGhz IGFuZCB0aGVuIHN1cmZhY2UgdG8gcGhvbmUgaG9tZSwgc2VuZGluZworICAgdGhlIGRhdGEgdG8g bGFuZCBzdGF0aW9ucyB1c2luZyBLZXJtaXQgcHJvdG9jb2wgb3ZlcgorICAgbm9uLWVycm9yLWNv cnJlY3RpbmcgMzAwYnBzIFs1OF1JcmlkaXVtIHNhdGVsbGl0ZSBtb2RlbXMsIHdpdGggaGlnaAor ICAgc2VhcyBhbmQgd2luZHMgYmF0dGVyaW5nIHRoZSBmbG9hdHMgYW5kIGhlYXZ5IChbNTldc29t ZXRpbWVzCisgICBlbGVjdHJpY2FsKSBzdG9ybXMgYmV0d2VlbiB0aGUgbW9kZW0gYW5kIHRoZSBz YXRlbGxpdGUuCisKKyAgIEJlY2F1c2Ugb2YgdGhlIHRyYW5zbWlzc2lvbiBzcGVlZCBhbmQgbG9u ZyBkaXN0YW5jZXMgaW52b2x2ZWQsIHRoZQorICAgdHJhbnNmZXJzIHdlcmUgdmVyeSBzbG93LiBU aGUgS2VybWl0IHNvZnR3YXJlIGluIHRoZSBmbG9hdHMgaXMKKyAgIFs2MF1FbWJlZGRlZCBLZXJt aXQsIHdoaWNoIGRpZCBub3QgaW1wbGVtZW50IHNsaWRpbmcgd2luZG93cywgd2hpY2gKKyAgIHdv dWxkIGhhdmUgc3BlZCB1cCB0aGUgZmxvdyBjb25zaWRlcmFibHkuIEpvaG4gRHVubGFwLCBlbmdp bmVlciBhdCB0aGUKKyAgIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3RvbidzIEFwcGxpZWQgUGh5c2lj cyBMYWJvcmF0b3J5LCB1bmRlcnRvb2sgdGhlCisgICB0YXNrIG9mIGFkZGluZyBzbGlkaW5nIHdp bmRvd3MgdG8gRS1LZXJtaXQuIEZvciB0ZXN0aW5nLCBoZSByaWdnZWQgdXAgYQorICAgWzYxXXNp bXVsYXRvciBpbiB3aGljaCBLZXJtaXQgdHJhbnNmZXJzIHRha2UgcGxhY2Ugb3ZlciBhIGNvbm5l Y3Rpb24KKyAgIHdpdGggZGlmZmVyZW50IGFtb3VudHMgb2Ygbm9pc2UgYW5kIGRlbGF5LiBIZSBm b3VuZCB0aGF0IG9jY2FzaW9uYWxseSwKKyAgIGEgdHJhbnNmZXIgd291bGQgYXBwZWFyIHRvIHN1 Y2NlZWQsIGJ1dCB0aGUgcmVjZWl2ZWQgZmlsZSB3b3VsZCBiZQorICAgY29ycnVwdC4KKworICAg QWNjb3JkaW5nIHRvIHRoZSBLZXJtaXQgcHJvdG9jb2wgZGVmaW5pdGlvbiwgdGhlIGZpcnN0IHBh Y2tldCBhbHdheXMKKyAgIGhhcyBibG9jay1jaGVjayB0eXBlIDEsIGEgNi1iaXQgY2hlY2tzdW0s IHdoaWNoIGlzIHRoZSBvbmx5IGJsb2NrIGNoZWNrCisgICB0eXBlIHRoYXQgYWxsIEtlcm1pdCBp bXBsZW1lbnRhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIHN1cHBvcnQ7IHRodXMgYW55CisgICBLZXJt aXQgcGFydG5lciBjYW4gcHJvY2VzcyB0aGlzIHBhY2tldC4gVGhpcyBwYWNrZXQgaXRzZWxmIGNh bgorICAgbmVnb3RpYXRlIGEgaGlnaGVyIGxldmVsIG9mIGNoZWNraW5nLCBzdWNoIHRoYXQgc3Vi c2VxdWVudCBwYWNrZXRzIGhhdmUKKyAgIChzYXkpIGJsb2NrLWNoZWNrIHR5cGUgMywgYSAxNi1i aXQgY3ljbGljIHJlZHVuZGFuY3kgY2hlY2sgKENSQykKKyAgIGVuY29kZWQgYXMgdGhyZWUgcHJp bnRhYmxlIDctYml0IEFTQ0lJIGNoYXJhY3RlcnMuIFRoZSAxNi1iaXQgQ1JDIGNhbgorICAgY2F0 Y2ggYWxsIGVycm9ycyBvZiBjZXJ0YWluIGtpbmRzIChzaW5nbGUtYml0LCBkb3VibGUtYml0LCBi dXJzdHMgb2YgMTYKKyAgIGJpdHMgb3IgbGVzcyksIGFuZCBtb3JlIHRoYW4gOTkuOTk4NDc0MTIx MDkzNyUgb2YgYWxsIG90aGVyIHBvc3NpYmxlCisgICBlcnJvcnMuCisKKyAgIEpvaG4ncyBzaW11 bGF0aW9ucyByZXZlYWxlZCB0aGF0IGZpbGUgY29ycnVwdGlvbiBjb3VsZCBvY2N1ciB1bmRldGVj dGVkCisgICB3aGVuIHRoZSBpbml0aWFsIHBhY2tldCB3YXMgY29ycnVwdGVkIGluIHN1Y2ggYSB3 YXkgdGhhdCBhIHBhcmFtZXRlciBvcgorICAgY2FwYWJpbGl0eSBieXRlIHdhcyBjaGFuZ2VkIGFu ZCB0aGUgY2hlY2tzdW0gYWxzbyBjaGFuZ2VkIHRvIG1ha2UgdGhlCisgICBwYWNrZXQgYXBwZWFy IHRvIGJlIGNvcnJlY3QsIHRodXMgYWxsb3dpbmcgdGhlIHRyYW5zZmVyIHRvIHByb2NlZWQgd2l0 aAorICAgdGhlIHR3byBLZXJtaXQgcGFydG5lcnMgb3V0IG9mIHN5bmMgYXMgdG8gcGFja2V0IGVu Y29kaW5nIGFuZAorICAgaW50ZXJwcmV0YXRpb24gKHRoZSBjaGFuY2VzIG9mIHR3byBzdWNoIGVy cm9ycyBwcm9kdWNpbmcgYSBzZWVtaW5nbHkKKyAgIHZhbGlkIHBhY2tldCBhcmUgYWJvdXQgMSBp biA2MDAwIHdoZW4gdXNpbmcgdGhlIDYtYml0IGNoZWNrc3VtKS4gRm9yCisgICBleGFtcGxlLCB0 aGUgY29tcHJlc3Npb24gdGVjaG5pcXVlIG1pZ2h0IGJlIG1pc25lZ290aWF0ZWQgYW5kIHRoZW4g dGhlCisgICByZWNlaXZlciBtaWdodCBzdG9yZSBpbmNvbWluZyBkYXRhIHdpdGhvdXQgZGVjb21w cmVzc2luZyBpdC4KKworICAgVGhlIHNvbHV0aW9uIGlzIGEgbmV3IG9wdGlvbiwgc2VsZWN0ZWQg Ynk6CisKKyAgICAgQkxPQ0stQ0hFQ0sgVFlQRSA1CisKKyAgIHRvIHJlcXVpcmUgYSB0eXBlIDMg YmxvY2sgY2hlY2sgKDE2LWJpdCBDUkMpIG9uIGV2ZXJ5IHBhY2tldCwgaW5jbHVkaW5nCisgICB0 aGUgaW5pdGlhbCBvbmVzLCB0aHVzIHJlZHVjaW5nIHRoZSBwcm9iYWJpbGl0eSBvZiBhIG1pc25l Z290aWF0aW9uIGJ5CisgICBtYW55IG9yZGVycyBvZiBtYWduaXR1ZGUuIFRISVMgUEFSQU1FVEVS IENBTiBOT1QgQkUgTkVHT1RJQVRFRC4gRWFjaAorICAgS2VybWl0IHByb2dyYW0gbXVzdCBiZSBn aXZlbiB0aGUgInNldCBibG9jayA1IiBjb21tYW5kIHByaW9yIHRvCisgICB0cmFuc2Zlci4gVGhh dCdzIGJlY2F1c2Ugbm9ybWFsbHkgZXZlcnkgS2VybWl0IHByb2dyYW0gZXhwZWN0cyB0aGUKKyAg IGZpcnN0IHBhY2tldCB0byBoYXZlIGEgNi1iaXQgY2hlY2tzdW0sIGFuZCBpZiB0aGUgZmlyc3Qg cGFja2V0IGhhcyBhCisgICAzLWJ5dGUsIDE2LWJpdCBDUkMsIHRoZSBwYWNrZXQgcmVjZWl2ZXIg d2lsbCB0aGluayBpdCBpcyBjb3JydXB0ZWQuCisKKyAgIEluIHByYWN0aWNlLCBob3dldmVyLCBp dCBpcyBwb3NzaWJsZSB0byBjb2RlIHRoZSBwYWNrZXQgcmVjZWl2ZXIKKyAgICJjaGVhdCIgYnkg cmVhZGluZyB0aGUgcGFja2V0IGRhdGEgYmVmb3JlIHZlcmlmeWluZyB0aGUgYmxvY2sgY2hlY2su CisgICBUaHVzIHdoZW4gdGhlIHJlY2VpdmVyIGlzIEMtS2VybWl0IDkuMCBvciBsYXRlciBvciBF LUtlcm1pdCAxLjcgb3IKKyAgIGxhdGVyLCBpdCBpcyBvbmx5IG5lY2Vzc2FyeSB0byBnaXZlIHRo ZSAic2V0IGJsb2NrIDUiIGNvbW1hbmQgdG8gdGhlCisgICBmaWxlIHNlbmRlciwgYW5kIHRoZSBy ZWNlaXZlciB3aWxsIGNoZWNrIGZvciBhIEZPUkNFLTMgZmlyc3QgcGFja2V0LiBJZgorICAgdGhl IHJlY2VpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLCBob3dldmVyLCB0aGUgaW5p dGlhbCBwYWNrZXQKKyAgIHdpbGwgYmUgYmUgcmVqZWN0ZWQgKGFmdGVyIHNldmVyYWwgcmV0cmll cykgYW5kIHRoZSBmaWxlIHRyYW5zZmVyIHdpbGwKKyAgIG5vdCB0YWtlIHBsYWNlLiBUaGVyZSBp cyBubyBhdHRlbXB0IHRvICJiYWNrIG9mZiIgdG8gbm9ybWFsIGJlaGF2aW9yLgorCisgICBDQVBU SU9OOiBUYWJsZSA0LiBLZXJtaXQgUHJvdG9jb2wgUGFja2V0IEJsb2NrIENoZWNrIFR5cGVzCisK KyAgIFR5cGUgQ29tbWFuZCBCeXRlcyBTdGF0dXMgRXhwbGFuYXRpb24KKyAgIDEgU0VUIEJMT0NL IDEgMSBSZXF1aXJlZCBpbiBhbGwgS2VybWl0IGltcGxlbWVudGF0aW9ucy4gTmVnb3RpYXRlZC4K KyAgIDYtYml0IGNoZWNrc3VtLCBzdWl0YWJsZSBmb3IgZ29vZCBjb25uZWN0aW9ucy4KKyAgIDIg U0VUIEJMT0NLIDIgMiBPcHRpb25hbCwgbmVnb3RpYXRlZC4gMTItYml0IGNoZWNrc3VtLiA2NCB0 aW1lcworICAgc3Ryb25nZXIgdGhhbiB0eXBlIDEuCisgICAzIFNFVCBCTE9DSyAzIDMgT3B0aW9u YWwsIG5lZ290aWF0ZWQuIDE2LWJpdCBDUkMuCisgICBCTEFOSy1GUkVFLTIgU0VUIEJMT0NLIDQg MiBPcHRpb25hbCwgbmVnb3RpYXRlZC4gMTItYml0IGNoZWNrc3VtLCB0d28KKyAgIG5vbmJsYW5r IGJ5dGVzLgorICAgRk9SQ0UtMyBTRVQgQkxPQ0sgNSAzIE9wdGlvbmFsLCBub3QgbmVnb3RpYXRl ZC4gMTYtYml0IENSQyBmb3JjZWQgYWxsCisgICBwYWNrZXRzLgorCisgICBCTEFOSy1GUkVFLTIg aXMgZm9yIGVudmlyb25tZW50cyB3aGVyZSBLZXJtaXQgcGFja2V0cyBhcmUgdHJlYXRlZCBhcwor ICAgbGluZXMgb2YgdGV4dCwgYW5kIGluIHdoaWNoIHRyYWlsaW5nIGJsYW5rcyBjYW4gYmUgc3Ry aXBwZWQ7IGZvcgorICAgZXhhbXBsZSwgd2hlbiB0cmFuc2ZlcnJpbmcgZmlsZXMgd2l0aCBhbiBJ Qk0gbWFpbmZyYW1lIHRocm91Z2ggYSAzMjcwCisgICBwcm90b2NvbCBjb252ZXJ0ZXIuCisgICBb NjJdRS1LZXJtaXQgMS43CisKK1ZhcmlhYmxlIEV2YWx1YXRpb24KKworICAgICBEb2VzIHRoZSBz dHJhbmdlIGJlaGF2aW9yIG9mIEtlcm1pdCdzIFwleCB2YXJpYWJsZXMgcHV6emxlIG9yIGFubm95 CisgICAgIHlvdT8KKworICAgS2VybWl0IHNvZnR3YXJlIGRldmVsb3BtZW50IGhhcyBiZWVuIGEg Y29sbGFib3JhdGl2ZSBwcm9qZWN0IG92ZXIgdGhlCisgICB5ZWFycywgd2l0aCBjb250cmlidXRp b25zIGNvbWluZyBpbiBmcm9tIGFsbW9zdCBldmVyeSBjb3VudHJ5IGFuZCBldmVyeQorICAgc2Vj dG9yIG9mIHRoZSBlY29ub215IC0gYWNhZGVtaWMsIGNvcnBvcmF0ZSwgZ292ZXJubWVudC4gVGh1 cyBub3QgYWxsCisgICB2ZXJzaW9ucywgYW5kIG5vdCBhbGwgZmVhdHVyZXMgb2YgYSBnaXZlbiB2 ZXJzaW9uLCBhcmUgYSBwcm9kdWN0IG9mCisgICBzeXN0ZW1hdGljIGRlc2lnbi4KKworICAgT25l IGV4YW1wbGUgd2FzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdmFyaWFibGVzIGZvciB0ZXh0IHN1YnN0 aXR1dGlvbiwKKyAgIGZpcnN0IGluIGEgdmVyc2lvbiBvZiBNUy1ET1MgS2VybWl0IHRoYXQgd2Fz IHNlbnQgaW4gYnkgc29tZW9uZQorICAgc29tZXdoZXJlIChJIGNvdWxkIGxvb2sgaXQgdXAsIGJ1 dCBubyB0aW1lLi4uKSBBbHRob3VnaCB0aGUgZGVzaWduIG9mCisgICB0aGUgbm90YXRpb24gZm9y IHZhcmlhYmxlIG5hbWVzICh0YWJsZSBiZWxvdykgaXMgbWluZSwgdGhlIHVuZGVybHlpbmcKKyAg IGNvZGUgd2FzIGNvbnRyaWJ1dGVkLiBJbiB0aGF0IGNvZGUgdGhlcmUgd2FzIG9ubHkgb25lIGtp bmQgb2YgdmFyaWFibGUsCisgICBhbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5IHRoZSB2YXJpYWJs ZSBuYW1lIHdhcyBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieQorICAgYSBzaW5nbGUgbGV0dGVyLCBm b3IgZXhhbXBsZSBcYSwgXGIsIGV0Yy4gVGhlIGNvbnRyaWJ1dGVkIGNvZGUKKyAgIGV2YWx1YXRl ZCB0aGVzZSB2YXJpYWJsZXMgcmVjdXJzaXZlbHksIG1lYW5pbmcgaWYgdGhlIGRlZmluaXRpb24g b2YgYQorICAgdmFyaWFibGUgY29udGFpbmVkIHZhcmlhYmxlIHJlZmVyZW5jZXMsIHRoZW4gdGhl c2Ugd2VyZSByZXNvbHZlZCB3aGVuCisgICBkZXJlZmVyZW5jaW5nIHRoZSB2YXJpYWJsZSwgYW5k IHRoZSBwcm9jZXNzIHdvdWxkIGNvbnRpbnVlIGFzIGRlZXAgZG93bgorICAgYXMgbmVjZXNzYXJ5 IHRvIHJlc29sdmUgdGhlIHRoaW5nIGZ1bGx5LgorCisgICBUaGlzIHdhcyBzb21ldGltZXMgaGFu ZHksIGJ1dCBpdCBoYWQgb25lIHNldmVyZSBkcmF3YmFjazogVGhlcmUgd2FzIG5vCisgICB3YXkg dG8gdXNlIHZhcmlhYmxlcyBpbiBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gcmVwcmVzZW50IHN0 cmluZ3MgdGhhdAorICAgY29udGFpbmVkIGxpdGVyYWwgYmFja3NsYXNoZXM7IGZvciBleGFtcGxl LCBET1Mgb3IgV2luZG93cyBwYXRobmFtZXMuCisgICBUaGlzIGdhdmUgcmlzZSB0byBhbGwga2lu ZHMgb2YgcXVvdGluZyBydWxlcyBhbmQgY29udmVudGlvbnMgKGUuZy4KKyAgIGRvdWJsaW5nIGJh Y2tzbGFzaGVzIG9yIGZvcmNpbmcgc2luZ2xlLWxldmVsIGV2YWx1YXRpb24gd2l0aAorICAgXFxm Y29udGVudHMoKSksIGFuZCBhbHNvIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygb3RoZXIga2luZHMg b2YKKyAgIHZhcmlhYmxlcyB0aGF0IHdlcmUgZXZhbHVhdGVkIG9uZSBsZXZlbCBkZWVwLCByYXRo ZXIgdGhhbiByZWN1cnNpdmVseS4KKworICAgVG8gYWNjb21tb2RhdGUgY29leGlzdGVuY2Ugb2Yg ZGlmZmVyZW50IGtpbmRzIG9mIHZhcmlhYmxlcyBhcyB3ZWxsIGFzCisgICAiZXNjYXBlIHNlcXVl bmNlcyIgZm9yIHJlcHJlc2VudGluZyBjb250cm9sIGFuZCA4LWJpdCBjaGFyYWN0ZXJzLCB0aGUK KyAgIHN5bnRheCBmb3IgdmFyaWFibGUgbmFtZXMgd2FzIGV4dGVuZGVkIHRvIGluY2x1ZGUgdGhy ZWUgZWxlbWVudHM6IHRoZQorICAgbGVhZGluZyBiYWNrc2xhc2gsIHRoZW4gYSBzaW5nbGUgY2hh cmFjdGVyIGluZGljYXRpbmcgdGhlIHR5cGUgb2YKKyAgIHZhcmlhYmxlLCBhbmQgdGhlbiB0aGUg bmFtZSBvZiB0aGUgdmFyaWFibGUgaW4gYSBmb3JtYXQgY29ycmVzcG9uZGluZworICAgdG8gdGhl IHR5cGUgZGVzaWduYXRvciwgYXMgc2hvd24gaW4gdGhpcyBzb21ld2hhdCBzaW1wbGlmaWVkIHRh YmxlOgorCisgICBDQVBUSU9OOiBUYWJsZSAxLiBWYXJpYWJsZS1uYW1lIFN5bnRheCBpbiBLZXJt aXQKKworICAgTm90YXRpb24gTWVhbmluZworICAgXDAwMCAtIFwyNTUgOC1iaXQgY2hhcmFjdGVy IGNvbnN0YW50IChkZWNpbWFsKQorICAgXGQwMDAgLSBcZDI1NSBBbHRlcm5hdGl2ZSBub3RhdGlv biBmb3IgOC1iaXQgY2hhcmFjdGVyIChieXRlKSBjb25zdGFudAorICAgKGRlY2ltYWwpCisgICBc bzAwMCAtIFxvMzc3IDgtYml0IGNoYXJhY3RlciBjb25zdGFudCAob2N0YWwpCisgICBceDAwIC0g XHhmZiA4LWJpdCBjaGFyYWN0ZXIgY29uc3RhbnQgKGhleGFkZWNpbWFsKQorICAgXCVhIC0gXCV6 IFNjYWxhciB2YXJpYWJsZSwgZXZhbHVhdGVkIHJlY3Vyc2l2ZWx5LgorICAgXCUwIC0gXCU5IE1h Y3JvIGFyZ3VtZW50LCBzY2FsYXIsIGV2YWx1YXRlZCByZWN1cnNpdmVseS4KKyAgIFwmYSAtIFwl JiBBcnJheSBuYW1lCisgICBcJmFbeF0gQXJyYXkgcmVmZXJlbmNlLCBldmFsdWF0ZWQgcmVjdXJz aXZlbHkgKHggaXMgYW55IGNvbnN0YW50IG9yCisgICB2YXJpYWJsZSkKKyAgIFx2KG5hbWUpIEJ1 aWx0LWluIHNjYWxhciB2YXJpYWJsZSwgZXZhbHVhdGVkIG9uZSBsZXZlbCBkZWVwLgorICAgXG0o bmFtZSkgVXNlci1kZWZpbmVkIHNjYWxhciB2YXJpYWJsZSwgZXZhbHVhdGVkIG9uZSBsZXZlbCBk ZWVwLgorICAgXCQobmFtZSkgQW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIGV2YWx1YXRlZCBvbmUg bGV2ZWwgZGVlcC4KKyAgIFxzKG5hbWVbbjptXSkgQ29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24s IGV2YWx1YXRlZCBvbmUgbGV2ZWwgZGVlcC4KKyAgIFxmbmFtZShhcmdzLi4uKSBCdWlsdC1pbiBm dW5jdGlvbiB3aXRoIHplcm8gb3IgbW9yZSBhcmd1bWVudHMuCisgICBcXCBMaXRlcmFsIGJhY2tz bGFzaAorICAgXE4gT1VUUFVUIGNvbW1hbmQgb25seTogTlVMLCBBU0NJSSAwCisgICBcQiBPVVRQ VVQgY29tbWFuZCBvbmx5OiBCUkVBSyAoMjUwbXMsIGZvciBzZXJpYWwgY29ubmVjdGlvbnMpCisg ICBcTCBPVVRQVVQgY29tbWFuZCBvbmx5OiBMb25nIEJSRUFLICgxLjVzZWMsIGRpdHRvKQorCisg ICBWYXJpYWJsZSBuYW1lcyBpbiBLZXJtaXQgYXJlIGNhc2UtaW5kZXBlbmRlbnQuIFRoZSBzaW1w bGlmaWNhdGlvbnMgaW4KKyAgIHRoZSB0YWJsZSBhcmUgdGhhdCB0aGUgbm90YXRpb24gZm9yIGRl Y2ltYWwgYW5kIG9jdGFsIGJ5dGVzIGNhbiBoYXZlCisgICBmcm9tIG9uZSB0byB0aHJlZSBkaWdp dHMsIGFuZCBjYW4gaW5jbHVkZSBicmFjZXMgdG8gc2VwYXJhdGUgdGhlbSBmcm9tCisgICB0ZXh0 IGRpZ2l0cywgZS5nLiBcNywgXHsxMjN9LCBcb3s1MH0uIEhleCBieXRlcyB0b28sIGV4Y2VwdCB0 aGV5IG11c3QKKyAgIGFsd2F5cyBoYXZlIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMsIDAtOWEtZi4g QXJyYXkgaW5kaWNlcyBtdXN0IGJlLCBvcgorICAgbXVzdCBldmFsdWF0ZSB0bywgbnVtYmVycyAo ZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUgdHJ1bmNhdGVkKS4KKyAgIEFzc29jaWF0aXZlIGFy cmF5cyBhcmUgYWxzbyBhdmFpbGFibGUgKGR5bmFtaWMgYXJyYXlzIHdpdGggYXJiaXRyYXJ5Cisg ICB0ZXh0IGFzIHN1YnNjcmlwdCksIGJ1dCB0aGV5IGFyZSByZWFsbHkganVzdCBhIHZhcmlhdGlv biBvbiBcbSgpCisgICB2YXJpYWJsZXMgKHJlYWQgYWJvdXQgYXNzb2NpYXRpdmUgYXJyYXlzIFs2 M11oZXJlKS4gQWxzbywgdGhlcmUgYXJlCisgICBzb21lIGFsdGVybmF0aXZlIG5vdGF0aW9ucyBm b3IgY29tcGFjdCBzdWJzdHJpbmcgbm90YXRpb24uCisKKyAgIFdlIGRpZG4ndCB3YW50IHRvIGhh dmUgbG90cyBvZiAiZGlzdGluZ3Vpc2hlZCIgY2hhcmFjdGVycywgYXMgdGhlIFVOSVgKKyAgIHNo ZWxsIGRvZXM7IG9uZSBpcyBlbm91Z2gsIGNsYXJpdHkgb3ZlciBicmV2aXR5LiBBbHRob3VnaCB0 aGUgbm90YXRpb24KKyAgIGNhbiBiZSBhIGJpdCBjdW1iZXJzb21lLCB3ZSBjYW4gdXNlIHRoZSBc bShuYW1lKSBmb3JtIHRvIGNpcmN1bXZlbnQgdGhlCisgICBvdmVyZXZhbHVhdGlvbiBpbiBtb3N0 IGNvbnRleHRzLiBCdXQgbWFjcm8gYXJndW1lbnRzIGFyZSBhbHdheXMKKyAgIGFzc2lnbmVkIHRv IHRoZSBcJTAtOSB2YXJpYWJsZXMsIGFuZCB0aHVzIGFsd2F5cyBldmFsdWF0ZWQgcmVjdXJzaXZl bHksCisgICBtYWtpbmcgaXQgZGlmZmljdWx0IGFuZCBjb25mdXNpbmcgdG8gcGFzcyAoZS5nLikg V2luZG93cyBwYXRobmFtZXMgYXMKKyAgIGFyZ3VtZW50cyB0byBtYWNyb3MuIFRoZSBzYW1lIGlz IHRydWUgZm9yIGFycmF5IGVsZW1lbnRzLCBlc3BlY2lhbGx5IGluCisgICBjb250ZXh0cyB3aGVy ZSB0aGV5IGFyZSB1c2VkIHRvIHJldHVybiByZXN1bHRzIGZyb20gYnVpbHQtaW4gZnVuY3Rpb25z CisgICAoZm9yIGV4YW1wbGUsIFxmc3BsaXQoKSB1c2VkIHRvIHJldHVybiB0aGUgZWxlbWVudHMg b2YgYQorICAgWzY0XWNvbW1hLXNlcGFyYXRlZCB2YWx1ZSBsaXN0IGlmIGFueSBvZiB0aGUgdmFs dWVzIGNvbnRhaW5lZAorICAgYmFja3NsYXNoZXMpLiBBbiBldmVuIHdvcnNlIHNjZW5hcmlvIGlz IHdoZW4gbWFjcm8gYXJndW1lbnRzIGFyZSBwYXNzZWQKKyAgIGZyb20gb25lIG1hY3JvIHRvIGFu b3RoZXI7IGZvciBzb21lIGdyYXBoaWMgaWxsdXN0cmF0aW9ucyBzZWUKKyAgIFs2NV1UYW1pbmcg dGhlIFdpbGQgQmFja3NsYXNoIC0gUGFydCBEZXV4IGZyb20gdGhlIFs2Nl1DLUtlcm1pdCA3LjAK KyAgIFVwZGF0ZSBOb3Rlcy4KKworICAgV2UgY2FuJ3QganVzdCBjaGFuZ2UgaG93IHZhcmlhYmxl cyBhcmUgZXZhbHVhdGVkIGJlY2F1c2UgdGhhdCB3b3VsZAorICAgYnJlYWsgZXhpc3Rpbmcgc2Ny aXB0cy4gQnV0IHdlIGNhbiBhbHdheXMgYWRkIFlldCBBbm90aGVyIFNFVCBDb21tYW5kOgorCisg ICAgIFNFVCBDT01NQU5EIFZBUklBQkxFLUVWQUxVQVRJT04geyBSRUNVUlNJVkUsIFNJTVBMRSB9 CisKKyAgIFRoaXMgYXBwbGllcyBvbmx5IHRvIFwlYS16IGFuZCBcJTAtOSB2YXJpYWJsZXMgYW5k IHRvIFwmYS16W10gYXJyYXlzCisgICAoc2luY2UgYWxsIG90aGVyIGtpbmRzIG9mIHZhcmlhYmxl cyBhcmUgZXZhbHVhdGVkIG9ubHkgb25lIGxldmVsIGRlZXApLgorICAgVGhlIGRlZmF1bHQsIG9m IGNvdXJzZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpcyBSRUNVUlNJVkUuCisgICBT SU1QTEUgZm9yY2VzIHRoZSBldmFsdWF0aW9uIG9mIHRoZXNlIHZhcmlhYmxlcyB0byByZXR1cm4g dGhlaXIgbGl0ZXJhbAorICAgY29udGVudHMsIHdpdGhvdXQgZnVydGhlciBldmFsdWF0aW9uOgor CisgICAgICogQW4gZXhjZXB0aW9uIGlzIG1hZGUgaW4gdGhlIGNhc2Ugb2YgYXJyYXkgc3Vic2Ny aXB0cywgYmVjYXVzZQorICAgICAgIGNoYW5naW5nIGhvdyB0aGV5IGFyZSBldmFsdWF0ZWQgY291 bGQgYnJlYWsgYSBsb3Qgb2Ygc2NyaXB0cywgYW5kCisgICAgICAgYW55d2F5IHRoZXJlIHNob3Vs ZCBuZXZlciBiZSBhbnkgaGFybSBpbiBldmFsdWF0aW5nIHRoZW0KKyAgICAgICByZWN1cnNpdmVs eSBiZWNhdXNlIHRoZWlyIGZpbmFsIHZhbHVlIGlzIGFsd2F5cyAob3Igc2hvdWxkIGJlKQorICAg ICAgIG51bWVyaWMsIG5vdCBzb21lIHN0cmluZyB0aGF0IG1pZ2h0IGNvbnRhaW4gYmFja3NsYXNo ZXMuCisgICAgICogVGhlIFZBUklBQkxFLUVWQUxVQVRJT04gc2V0dGluZyBpcyBvbiB0aGUgY29t bWFuZCBzdGFjay4gVGh1cyB5b3UKKyAgICAgICBjYW4gZ2l2ZSB0aGlzIGNvbW1hbmQgaW4gYSBt YWNybywgY29tbWFuZCBmaWxlLCBvciB1c2VyLWRlZmluZWQKKyAgICAgICBmdW5jdGlvbiB3aXRo b3V0IGFmZmVjdGluZyB0aGUgY2FsbGluZyBlbnZpcm9ubWVudC4KKyAgICAgKiBUaGUgbmV3IFxm cmVjdXJzZSgpIGZ1bmN0aW9uIGZvcmNlcyByZWN1cnNpdmUgZXZhbHVhdGlvbiBvZiBpdHMKKyAg ICAgICBhcmd1bWVudCByZWdhcmRsZXNzIG9mIHRoZSBWQVJJQUJMRS1FVkFMVUFUSU9OIHNldHRp bmcuIFRoZQorICAgICAgIGFyZ3VtZW50IGNhbiBiZSBhbnkgc3RyaW5nIChvciBub3RoaW5nIGF0 IGFsbCk7IGFsbCB0aGUgdmFyaWFibGVzCisgICAgICAgaW4gdGhlIHN0cmluZywgZXZlbiBcbSgp IG9uZXMsIGFyZSBldmFsdWF0ZWQgcmVjdXJzaXZlbHk6CisKK2RlZiBcJWEgMSBcJWIgMworZGVm IFwlYiAyCitkZWYgeHggZWFzeSBhcyBcJWEKK3Nob3cgbWFjIHh4CitlY2hvIFxmcmVjdXJzZShc bSh4eCkpCitlYXN5IGFzIDEgMiAzCitlY2hvIFxmcmVjdXJzZShpdCdzIGFzIGVhc3kgYXMgXG0o eHgpKQoraXQncyBhcyBlYXN5IGFzIGVhc3kgYXMgMSAyIDMKKworICAgICAqIFRoZSBuZXcgXHYo dmFyZXZhbCkgYnVpbHQtaW4gdmFyaWFibGUgY29udGFpbnMgdGhlIGN1cnJlbnQgc2V0dGluZwor ICAgICAgIChyZWN1cnNpdmUgb3Igc2ltcGxlKSBhdCB0aGUgY3VycmVudCBjb21tYW5kLXN0YWNr IGxldmVsLgorCisgICBIZXJlJ3MgYSBzaG9ydCBzY3JpcHQgZm9yIGlsbHVzdHJhdGlvbjoKKwor ZGVmaW5lIHBhdGggYzpcdXNlcnNcZmRjXHNvbWVmaWxlLnR4dAorZGVmaW5lIHRlc3QxIHsgICAg ICAgICMgTm9ybWFsIHJlY3Vyc2l2ZSBhcmd1bWVudCBldmFsdWF0aW9uCisgIGVjaG8gXCUwOiBh cmc9XCUxCit9CitkZWZpbmUgdGVzdDIgeyAgICAgICAgIyBTaW1wbGUgYXJndW1lbnQgZXZhbHVh dGlvbgorICBzZXQgdmFyIHNpbXBsZQorICBlY2hvIFwlMDogYXJnPVwlMQorfQordGVzdDEgXG0o cGF0aCkKK3Rlc3QyIFxtKHBhdGgpCitleGl0CisKKyAgIEFuZCBoZXJlJ3MgdGhlIHJlc3VsdDoK KworPzxFUlJPUjpOT19TVUNIX0ZVTkNUSU9OOlxmZGNcc29tZWZpbGUudHh0KCk+Cit0ZXN0Mjog YXJnPWM6XHVzZXJzXGZkY1xzb21lZmlsZS50eHQKKworICAgVGhlIGZpcnN0IGxpbmUgbWlnaHQg c2VlbSBzdXJwcmlzaW5nLCBidXQgdW5kZXIgdGhlIG5vcm1hbCBydWxlcyAoc2VlCisgICB0YWJs ZSBhYm92ZSkgXGYgaW5kaWNhdGVzIGEgZnVuY3Rpb24gY2FsbCwgd2l0aCB0aGUgbGV0dGVycyBm b2xsb3dpbmcKKyAgIHRoZSAnZicgYmVpbmcgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLiBCdXQg dGhlcmUgaXMgbm8gZnVuY3Rpb24gYnkKKyAgIHRoYXQgbmFtZS4uLiBhbmQgaWYgdGhlcmUgd2Vy ZSwgeW91IHByb2JhYmx5IGRpZG4ndCBpbnRlbmQgdG8gY2FsbCBpdCEKKworICAgU0VUIENPTU1B TkQgVkFSSUFCTEUtRVZBTFVBVElPTiBTSU1QTEUgaGFzIG5vIGVmZmVjdCBvbiBjb25zdGFudHMs IG9ubHkKKyAgIG9uIHZhcmlhYmxlcy4gTm90ZSBob3cgXG0ocGF0aCkgaXMgZGVmaW5lZC4gVGhl IERFRklORSBjb21tYW5kIGFzc2lnbnMKKyAgIHRoZSBsaXRlcmFsIHZhbHVlIG9mIGl0cyBhcmd1 bWVudCB0byB0aGUgbmFtZWQgdmFyaWFibGUgKHNlZSBUYWJsZSAzCisgICBiZWxvdyksIHRodXMg aW4gdGhpcyBjYXNlIG5vIHNwZWNpYWwgc3ludGF4IGlzIG5lZWRlZC4gQnV0IGluIG90aGVyCisg ICBjb250ZXh0cywgeW91IG11c3QgZG91YmxlIHRoZSBiYWNrc2xhc2hlcyBvciB1c2UgdGhlIFxm bGl0ZXJhbCgpCisgICBmdW5jdGlvbiB0byB1c2UgbGl0ZXJhbCBiYWNrc2xhc2hlcyBpbiBkYXRh OgorCit0ZXN0MiBjOlxcdXNlcnNcXGZkY1xcc29tZWZpbGUudHh0Cit0ZXN0MiBcZmxpdGVyYWwo YzpcdXNlcnNcZmRjXHNvbWVmaWxlLnR4dCkKKworICAgQy1LZXJtaXQgOS4wIGFkZHMgYSBuZXcg bm90YXRpb24gZm9yIFxmbGl0ZXJhbCgpIHdoaWNoIGFsc28gaGFzIGNlcnRhaW4KKyAgIGFkdmFu dGFnZXMgb3ZlciBpdDogXHEoc3RyaW5nKToKKwordGVzdDIgXHEoYzpcdXNlcnNcZmRjXHNvbWVm aWxlLnR4dCkKKworICAgU2luY2UgXGZsaXRlcmFsKCkgaXMgYSBmdW5jdGlvbiwgaXRzIGFyZ3Vt ZW50IGxpc3QgKHRoZSB0ZXh0IHdpdGhpbgorICAgcGFyZW50aGVzZXMpIGhhcyBzcGVjaWFsIHN5 bnRheCBvZiBpdHMgb3duLCBpbiB3aGljaCBjb21tYXMgYW5kIGJyYWNlcworICAgYXJlIHRyZWF0 ZWQgc3BlY2lhbGx5IGFuZCBpbnRyb2R1Y2UgYW5vdGhlciBzZXQgb2YgcXVvdGluZyBwcm9ibGVt cy4KKyAgIFxxKHN0cmluZykgZG9lc24ndCBoYXZlIHRoZXNlIHByb2JsZW1zLiBUaGUgb25seSBj b25zaWRlcmF0aW9uIGlzIHRoYXQKKyAgIHBhcmVudGhlc2VzIG11c3QgYmUgYmFsYW5jZWQgb3Ig ZWxzZSBxdW90ZWQgKHByZWNlZGVkIGJ5IGJhY2tzbGFzaCksIG9yCisgICByZXByZXNlbnRlZCBh cyBudW1lcmljIGNoYXJhY3RlciBlbnRpdGllcyAobGVmdCBwYXJlbiA9IFw0MCwgKHJpZ2h0Cisg ICBwYXJlbiA9IFw0MSkuCisKKyAgIE9yIGVsc2UgaG9sZCB0aGUgdmFsdWUgaW4gYSBzaW1wbGUg dmFyaWFibGUgYXMgd2UgZGlkIHdpdGggXFxtKHBhdGgpCisgICBhYm92ZS4KKworICAgU0VUIENP TU1BTkQgVkFSSUFCTEUtRVZBTFVBVElPTiBTSU1QTEUgaXMgYSBiaWcgY2hhbmdlIGFuZCBtaWdo dCBoYXZlCisgICByZXBlcmN1c3Npb25zIHRoYXQgZGlkbid0IHNob3cgdXAgaW4gdGhlIGluaXRp YWwgdGVzdHM7IGEgbG90IG1vcmUKKyAgIHRlc3RpbmcgaXMgbmVlZGVkLgorCisgICBPbiB0aGUg dG9waWMgb2YgdmFyaWFibGVzLCBsZXQncyBzdW1tYXJpemUgaW4gb25lIHBsYWNlIHRoZSB3YXlz IGluCisgICB3aGljaCB2YWx1ZXMgY2FuIGJlIGV4cGxpY2l0bHkgYXNzaWduZWQgdG8gdmFyaWFi bGVzLiBUaGVyZSBpcyBub3RoaW5nCisgICBuZXcgaGVyZSBleGNlcHQgdGhlIHRhYmxlIGl0c2Vs ZjoKKworICAgQ0FQVElPTjogVGFibGUgMi4gVmFyaWFibGUgQXNzaWdubWVudCBpbiBLZXJtaXQK KworICAgQ29tbWFuZCBTaG9ydGhhbmQgRXhwbGFuYXRpb24KKyAgIERFRklORSBuYW1lIHZhbHVl IC5uYW1lID0gdmFsdWUgVGhlIGxpdGVyYWwgdmFsdWUgYmVjb21lcyB0aGUgY29udGVudHMKKyAg IG9mIHRoZSBuYW1lZCB2YXJpYWJsZTsgdmFyaWFibGVzIG5hbWVzIGluIHRoZSB2YWx1ZSBhcmUg Y29waWVkIHdpdGhvdXQKKyAgIGV2YWx1YXRpb24uIFRoaXMgY29tbWFuZCBpcyBmb3IgZGVmaW5p bmcgbWFjcm9zIHRoYXQgdGFrZSBwYXJhbWV0ZXJzLAorICAgYXMgd2VsbCBhcyBmb3IgZGVmaW5p bmcgc2ltcGxlIHZhcmlhYmxlcywgZXNwZWNpYWxseSBpZiB0aGUgdmFsdWVzCisgICBjb250YWlu IGJhY2tzbGFzaGVzLgorICAgX0RFRklORSBuYW1lIHZhbHVlICAgTGlrZSBERUZJTkUgYnV0IHRo ZSBuYW1lIGlzIGV2YWx1YXRlZCBiZWZvcmUgdXNlLgorICAgQVNTSUdOIG5hbWUgdmFsdWUgLm5h bWUgOj0gdmFsdWUgVGhlIHZhbHVlIGlzIGV2YWx1YXRlZCBhbmQgdGhlIHJlc3VsdAorICAgYmVj b21lcyB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIHZhcmlhYmxlLgorICAgX0FTU0lHTiBuYW1l IHZhbHVlICAgTGlrZSBBU1NJR04gYnV0IHRoZSBuYW1lIGlzIGV2YWx1YXRlZCBiZWZvcmUgdXNl LgorICAgRVZBTFVBVEUgbmFtZSBleHByZXNzaW9uIC5uYW1lIDo6PSB2YWx1ZSBUaGUgZXhwcmVz c2lvbiAoaW4gcmVndWxhcgorICAgYWxnZWJyYWljIG5vdGF0aW9uKSBpcyBldmFsdWF0ZWQgYXJp dGhtZXRpY2FsbHkgYW5kIHRoZSByZXN1bHQgYmVjb21lcworICAgdGhlIGNvbnRlbnRzIG9mIHRo ZSBuYW1lZCB2YXJpYWJsZS4gSWYgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgYW55CisgICB2YXJp YWJsZXMgdGhleSBhcmUgZXZhbHVhdGVkIGZpcnN0LgorICAgX0VWQUxVQVRFIG5hbWUgZXhwcmVz c2lvbiAgIExpa2UgRVZBTFVBVEUgYnV0IHRoZSBuYW1lIGlzIGV2YWx1YXRlZAorICAgYmVmb3Jl IHVzZS4KKyAgIElOQ1JFTUVOVCBuYW1lIGV4cHJlc3Npb24gICBFdmFsdWF0ZXMgdGhlIHZhcmlh YmxlcyBpbiB0aGUgZXhwcmVzc2lvbiwKKyAgIHRoZW4gZXZhbHVhdGVzIHRoZSBleHByZXNzaW9u IGFyaXRobWV0aWNhbGx5LCBhbmQgdGhlbiBhZGRzIHRoZSB2YWx1ZQorICAgdG8gdGhlIGNvbnRl bnRzIG9mIHRoZSBuYW1lZCB2YXJpYWJsZSwgd2hpY2ggbXVzdCBiZSBhIG51bWJlciBvciBhbgor ICAgYWxnZWJyYWljIGV4cHJlc3Npb24uIElmIHRoZSBleHByZXNzaW9uIGlzIGVtcHR5LCBhIHZh bHVlIG9mIDEgaXMgdXNlZC4KKyAgIF9JTkNSRU1FTlQgbmFtZSBleHByZXNzaW9uICAgTGlrZSBJ TkNSRU1FTlQgYnV0IHRoZSBuYW1lIGlzIGV2YWx1YXRlZAorICAgYmVmb3JlIHVzZS4KKyAgIERF Q1JFTUVOVCBuYW1lIGV4cHJlc3Npb24gICBFdmFsdWF0ZXMgdGhlIHZhcmlhYmxlcyBpbiB0aGUg ZXhwcmVzc2lvbiwKKyAgIHRoZW4gZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGFyaXRobWV0aWNh bGx5LCBhbmQgdGhlbiBzdWJ0cmFjdHMgdGhlCisgICB2YWx1ZSBmcm9tIHRoZSBjb250ZW50cyBv ZiB0aGUgbmFtZWQgdmFyaWFibGUsIHdoaWNoIG11c3QgYmUgYSBudW1iZXIKKyAgIG9yIGFuIGFs Z2VicmFpYyBleHByZXNzaW9uLiBJZiB0aGUgZXhwcmVzc2lvbiBpcyBlbXB0eSwgYSB2YWx1ZSBv ZiAxIGlzCisgICB1c2VkLgorICAgX0RFQ1JFTUVOVCBuYW1lIGV4cHJlc3Npb24gICBMaWtlIERF Q1JFTUVOVCBidXQgdGhlIG5hbWUgaXMgZXZhbHVhdGVkCisgICBiZWZvcmUgdXNlLgorICAgREVD TEFSRSBuYW1lID0gbGlzdCAgIEFuIGFycmF5IGRlY2xhcmF0aW9uIGNhbiBpbmNsdWRlIGFuIGlu aXRpYWxpemVyCisgICBsaXN0OyBpdGVtcyBpbiB0aGUgbGlzdCBhcmUgZXZhbHVhdGVkIGJlZm9y ZSBhc3NpZ25tZW50LiBUaGlzIGNhbiBiZQorICAgZGVmZWF0ZWQgYnkgZG91YmxpbmcgYW55IGJh Y2tzbGFzaGVzIG9yIGVuY2xvc2luZyBpbmRpdmlkdWFsIGFyZ3VtZW50cworICAgaW4gXGZsaXRl cmFsKCkuCisgICBETyBuYW1lIGFyZ3VtZW50cyBuYW1lIGFyZ3VtZW50cyBXaGVuIGludm9raW5n IGEgbWFjcm8gd2l0aCBhIERPCisgICBjb21tYW5kIChvciBhbiBpbXBsaWVkIG9uZSksIHRoZSBh cmd1bWVudHMgYXJlIGV2YWx1YXRlZCwgdGhlbiBhc3NpZ25lZAorICAgdG8gXCUxLCBcJTIsIGV0 YywgYW5kIHRoZSBtYWNybydzIG5hbWUgdG8gXCUwLgorICAgKFNFVFEgbmFtZSB2YWx1ZSkgICBL ZXJtaXQgYWxzbyBpbmNsdWRlcyBhIG1pbmktWzY3XUxJU1AgaW50ZXJwcmV0ZXIKKworICAgVmFy aWFibGVzIGFyZSBldmFsdWF0ZWQgYXV0b21hdGljYWxseSBpbiBLZXJtaXQgY29tbWFuZHMgc2lt cGx5IGJ5CisgICByZWZlcmVuY2luZyB0aGVtLCBhY2NvcmRpbmcgdG8gcnVsZXMgZ2l2ZW4gaW4g VGFibGUgMS4gVGhlIGZvbGxvd2luZworICAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvIGNoYW5n ZSBob3cgYSBhIHBhcnRpY3VsYXIgdmFyaWFibGUgaXMKKyAgIGV2YWx1YXRlZDoKKworICAgQ0FQ VElPTjogVGFibGUgMy4gS2VybWl0IEZ1bmN0aW9ucyBmb3IgRXZhbHVhdGluZyBWYXJpYWJsZXMK KworICAgRnVuY3Rpb24gQXJndW1lbnQgRGVzY3JpcHRpb24KKyAgIFxmY29udGVudHMoKSBcJXgg b3IgXCZ4W3ldIEV2YWx1YXRlcyB0aGUgdmFyaWFibGUgb3IgYXJyYXkgZWxlbWVudAorICAgKHdo aWNoIG5vcm1hbGx5IHdvdWxkIGJlIGV2YWx1YXRlZCByZWN1cnNpdmVseSkgb25lIGxldmVsIGRl ZXAuCisgICBcZmRlZmluaXRpb24oKSBuYW1lIElmIHRoZSBhcmd1bWVudCBpcyBhIFwleCB2YXJp YWJsZSBvciBhbiBhcnJheQorICAgZWxlbWVudCwgaXQgaXMgZXZhbHVhdGVkIHRvIGdldCB0aGUg bmFtZTsgb3RoZXJ3aXNlIHRoZSBhcmd1bWVudCBpcyB0aGUKKyAgIG5hbWUuIEl0cyBkZWZpbml0 aW9uIGlzIHJldHVybmVkIHdpdGggbm8gcmVjdXJzaW9uLgorICAgXG0oKSBuYW1lIEVxdWl2YWxl bnQgdG8gXGZkZWZpbml0aW9uKCkuCisgICBcZnJlY3Vyc2UoKSBcbShuYW1lKSBGb3JjZXMgcmVj dXJzaXZlIGV2YWx1YXRpb24gb2YgYSBtYWNybyBkZWZpbml0aW9uCisgICAoYS5rLmEuIGxvbmcg dmFyaWFibGUgbmFtZSkuIE5PVEU6IFxmcmVjdXJzZSgpIGNhbiBvcGVyYXRlIG9uIGFueSBraW5k CisgICBvZiB2YXJpYWJsZSBhcyB3ZWxsIGFzIG9uIGFueSBzdHJpbmcgY29udGFpbmluZyBhbnkg bWl4dHVyZSBvZgorICAgdmFyaWFibGVzLgorCitDLUtlcm1pdCdzIFJFTkFNRSBDb21tYW5kCisK KyAgIEMtS2VybWl0J3MgUkVOQU1FIGNvbW1hbmQsIHdoaWNoIGlzIHVzZWQgZm9yIGNoYW5naW5n IHRoZSBuYW1lcyBvZgorICAgbG9jYWwgZmlsZXMgb3IgZm9yIG1vdmluZyBmaWxlcyBsb2NhbGx5 LCBoYXMgdHdvIGJhc2ljIGZvcm1zOgorCisgICBSRU5BTUUgWyBvcHRpb25hbC1zd2l0Y2hlcyBd IG9sZGZpbGVuYW1lIG5ld2ZpbGVuYW1lCisgICAgICAgICAgVGhpcyBmb3JtIGxldHMgeW91IGNo YW5nZSB0aGUgbmFtZSBvZiBhIHNpbmdsZSBmaWxlIGZyb20KKyAgICAgICAgICBvbGRmaWxlbmFt ZSB0byBuZXdmaWxlbmFtZS4gRXhhbXBsZToKKyAgICAgICAgICByZW5hbWUgdGhpc21vbnRoLmxv ZyBsYXN0bW9udGgubG9nCisKKyAgIFJFTkFNRSBbIG9wdGlvbmFsLXN3aXRjaGVzIF0gZmlsZXNw ZWMgZGlyZWN0b3J5bmFtZQorICAgICAgICAgIFRoaXMgZm9ybSBsZXRzIHlvdSBtb3ZlICh3aXRo b3V0IHJlbmFtaW5nKSBvbmUgb3IgbW9yZSBmaWxlcworICAgICAgICAgIChhbGwgdGhlIGZpbGVz IHRoYXQgbWF0Y2ggdGhlIGZpbGVzcGVjLCB3aGljaCBtYXkgY29udGFpbgorICAgICAgICAgIHdp bGRjYXJkIGNoYXJhY3RlcnMgc3VjaCBhcyAiKiIpIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisg ICAgICAgICAgRXhhbXBsZToKKyAgICAgICAgICByZW5hbWUgKi50eHQgfi90ZXh0ZmlsZXMvCisK KyAgIFRyYWRpdGlvbmFsbHksIHRoZSBvcHRpb25hbCBzd2l0Y2hlcyBoYXZlIGJlZW46CisKKyAg IFJFTkFNRSAvTElTVCBvbGRuYW1lIG5ld25hbWUKKyAgICAgICAgICBEaXNwbGF5IHRoZSBvbGQg YW5kIG5ldyBuYW1lIGZvciBlYWNoIGZpbGUgd2hpbGUgcmVuYW1pbmcuCisgICAgICAgICAgU3lu b255bXM6IC9MT0csIC9WRVJCT1NFLiBFeGFtcGxlOgorICAgICAgICAgIHJlbmFtZSAvbGlzdCAq LnR4dCB+L3RleHRmaWxlcy8KKworICAgUkVOQU1FIC9OT0xJU1Qgb2xkbmFtZSBuZXduYW1lCisg ICAgICAgICAgRG9uJ3QgZGlzcGxheSB0aGUgb2xkIGFuZCBuZXcgbmFtZSBmb3IgZWFjaCBmaWxl IHdoaWxlIHJlbmFtaW5nLgorICAgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3Iu IFN5bm9ueW1zOiAvTk9MT0csIC9RVUlFVC4gRXhhbXBsZToKKyAgICAgICAgICByZW5hbWUgL25v bGlzdCAqLnR4dCB+L3RleHRmaWxlcy8KKworICAgUmVtaW5kZXI6IEV2ZXJ5IHN3aXRjaCBzdGFy dHMgd2l0aCBhIHNsYXNoICgvKSBhbmQgbXVzdCBiZSBwcmVjZWRlZCBieQorICAgYSBzcGFjZS4K KworTmV3IFJFTkFNRSBGZWF0dXJlcyBmb3IgQy1LZXJtaXQgOS4wCisKKyAgIEEgc2VyaWVzIG9m IG5ldyBvcHRpb25zIChzd2l0Y2hlcykgaGF2ZSBiZWVuIGFkZGVkIHRvIGxldCB5b3UgY2hhbmdl CisgICB0aGUgbmFtZXMgb2YgbXVsdGlwbGUgZmlsZXMgYXQgb25jZSBieSBjYXNlIGNvbnZlcnNp b24sIHN0cmluZworICAgc3Vic3RpdHV0aW9uLCBvciBjaGFyYWN0ZXItc2V0IGNvbnZlcnNpb24s IGFuZCBvcHRpb25hbGx5IGFsc28gbW92ZQorICAgdGhlbSB0byBhIGRpZmZlcmVudCBkaXJlY3Rv cnk6CisKKyAgICAgL0xPV0VSOiAgICAgIENvbnZlcnQgdGhlIGZpbGVuYW1lIHRvIGxvd2VyY2Fz ZQorICAgICAvVVBQRVI6ICAgICAgQ29udmVydCB0aGUgZmlsZW5hbWUgdG8gdXBwZXJjYXNlCisg ICAgIC9DT05WRVJUOiAgICBDaGFuZ2UgdGhlIGZpbGVuYW1lJ3MgY2hhcmFjdGVyIGVuY29kaW5n CisgICAgIC9SRVBMQUNFOiAgICBEbyBzdHJpbmcgc3Vic3RpdHV0aW9ucyBvbiB0aGUgZmlsZW5h bWUKKworICAgSWYgdGhlIHNvdXJjZS1maWxlIHNwZWNpZmljYXRpb24gaW5jbHVkZXMgYSBwYXRo IG9yIGRpcmVjdG9yeSwgYW55CisgICBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRvIHRoZSBmaWxlbmFt ZXMgb25seSwgbm90IHRvIHRoZSBkaXJlY3Rvcnkgb3IgcGF0aAorICAgc3BlY2lmaWNhdGlvbi4K KworICAgU2luY2UgbmFtZSBjaGFuZ2VzLCB3aGVuIGFwcGxpZWQgdG8gbWFueSBmaWxlcyBhdCBv bmNlLCBjYW4gaGF2ZQorICAgY29uc2VxdWVuY2VzIHRoYXQgYXJlIG5vdCBlYXNpbHkgdW5kb25l LCB0aGVyZSBhcmUgYWxzbyBzb21lIG5ldworICAgY29udHJvbHMsIHNhZmVndWFyZHMsIGFuZCBj b252ZW5pZW5jZXM6CisKKyAgIFJFTkFNRSAvU0lNVUxBVEUKKyAgICAgICAgICBUaGlzIHN3aXRj aCB0ZWxscyBLZXJtaXQgdG8gc2hvdyB5b3Ugd2hhdCB0aGUgUkVOQU1FIGNvbW1hbmQKKyAgICAg ICAgICB3b3VsZCBkbyB3aXRob3V0IGFjdHVhbGx5IGRvaW5nIGl0LiAvU0lNVUxBVEUgaW1wbGll cyAvTElTVC4KKworICAgUkVOQU1FIC9DT0xMSVNJT046e0ZBSUwsU0tJUCxPVkVSV1JJVEV9Cisg ICAgICAgICAgVGhpcyBzd2l0Y2ggZ292ZXJucyBLZXJtaXQncyBiZWhhdmlvciB3aGVuIHJlbmFt aW5nIG11bHRpcGxlCisgICAgICAgICAgZmlsZXMsIGFuZCBhbnkgb2YgdGhlIG5hbWVzIHdvdWxk IGNvbGxpZGUgd2l0aCB0aGUgbmFtZSBvZiBhCisgICAgICAgICAgZmlsZSB0aGF0IGFscmVhZHkg ZXhpc3RzLiBUaGUgZGVmYXVsdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAorICAgICAgICAgIGVh cmxpZXIgcmVsZWFzZXMgb2YgQy1LZXJtaXQsIGlzIE9WRVJXUklURSwgaS5lLiB3cml0ZSBvdmVy IHRoZQorICAgICAgICAgIGV4aXN0aW5nIGZpbGUuIFRoZSBvdGhlciB0d28gcHJvdGVjdCBleGlz dGluZyBmaWxlcy4gU0tJUCBtZWFucworICAgICAgICAgIHRvIHNraXAgKG5vdCByZW5hbWUpIHRo ZSBmaWxlIHRoYXQgd291bGQgY2F1c2UgdGhlIGNvbGxpc2lvbiwKKyAgICAgICAgICBhbmQgcHJv Y2VlZCB0byB0aGUgbmV4dCBmaWxlLCBpZiBhbnkuIEZBSUwgbWVhbnMgdGhhdCBubyBmaWxlcwor ICAgICAgICAgIHdpbGwgYmUgcmVuYW1lZCBpZiB0aGVyZSB3b3VsZCBiZSBhbnkgY29sbGlzaW9u czsgZm9yIHRoaXMKKyAgICAgICAgICBLZXJtaXQgbWFrZXMgdHdvIHBhc3NlcywgY2hlY2tpbmcg ZWFjaCBuZXcgbmFtZSBpdCBjb25zdHJ1Y3RzCisgICAgICAgICAgZm9yIGV4aXN0ZW5jZSBiZWZv cmUgc3RhcnRpbmcgdGhlIHNlY29uZCBwYXNzIChob3dldmVyLCB0aGVyZSBpcworICAgICAgICAg IG5vIGd1YXJhbnRlZSB0aGF0IGluIHRoZSBzZWNvbmQgcGFzcywgaXQgd29uJ3QgY3JlYXRlIHRo ZSBzYW1lCisgICAgICAgICAgbmV3IG5hbWUgZm9yIG1vcmUgdGhhbiBvbmUgZmlsZTsgaW4gdGhh dCBjYXNlLCBpdCB3aWxsIHN0b3AKKyAgICAgICAgICBiZWZvcmUgZXhlY3V0aW5nIHRoZSBzZWNv bmQgcmVuYW1lKS4gRXhhbXBsZToKKyAgICAgICAgICByZW5hbWUgL3NpbXVsYXRlIC9jb2xsaXNp b246cHJvY2VlZCAqIH4vdG1wLworCisgICBSZW1pbmRlcjogSW4gc3dpdGNoZXMgc3VjaCBhcyAv Q09MTElTSU9OIHRoYXQgdGFrZSBhcmd1bWVudHMKKyAgIChvcGVyYW5kcyksIHRoZSBzd2l0Y2gg bmFtZSBhbmQgaXRzIGFyZ3VtZW50KHMpIGFyZSBzZXBhcmF0ZWQgYnkgYQorICAgY29sb24gKDop IHdpdGggbm8gaW50ZXJ2ZW5pbmcgc3BhY2VzLiBBbHNvIHJlbWVtYmVyIHRoYXQgS2VybWl0Cisg ICBrZXl3b3JkcyBjYW4gYWx3YXlzIGJlIGFiYnJldmlhdGVkIGJ5IGxlYXZpbmcgb2ZmIGNoYXJh Y3RlcnMgZnJvbSB0aGUKKyAgIHJpZ2h0LCBhcyBsb25nIGFzIHRoZSByZXN1bHQgaXMgc3RpbGwg dW5pcXVlIGluIGl0cyBjb250ZXh0LiBUaHVzICJyZW4KKyAgIC9jb2w6ZiIgd291bGQgYmUgZXF1 aXZhbGVudCB0byAicmVuYW1lIC9jb2xsaXNpb246ZmFpbCIuCisKKyAgIFlvdSBjYW4gY2hhbmdl IHRoZSBmb2xsb3dpbmcgcHJlZmVyZW5jZXMgZm9yIHRoZSBSRU5BTUUgY29tbWFuZCB3aXRoCisg ICB0aGUgbmV3IFNFVCBSRU5BTUUgY29tbWFuZDoKKworICAgU0VUIFJFTkFNRSBMSVNUIHsgT04s IE9GRiB9CisgICAgICAgICAgVGVsbHMgdGhlIFJFTkFNRSBjb21tYW5kIHdoZXRoZXIgdG8gbGlz dCBpdHMgYWN0aW9ucyBpZiB5b3UKKyAgICAgICAgICBkb24ndCBpbmNsdWRlIGEgL0xJU1Qgb3Ig L05PTElTVCBvciBlcXVpdmFsZW50IHN3aXRjaC4KKworICAgU0VUIFJFTkFNRSBDT0xMSVNJT04g eyBGQUlMLCBPVkVSV1JJVEUsIFNLSVAgfQorICAgICAgICAgIFRlbGxzIHRoZSBSRU5BTUUgY29t bWFuZCBob3cgdG8gaGFuZGxlIGZpbGVuYW1lIGNvbGxpc2lvbnMgaW4KKyAgICAgICAgICB0aGUg YWJzZW5jZSBvZiBhIC9DT0xMSVNJT04gc3dpdGNoLiBUaGF0IGlzLCBpdCByZXBsYWNlcyB0aGUK KyAgICAgICAgICBkZWZhdWx0IGFjdGlvbiBvZiBPVkVSV1JJVEUgd2l0aCBhY3Rpb24gb2YgeW91 ciBjaG9vc2luZywgd2hpY2gKKyAgICAgICAgICBpcyB0aGVuIHVzZWQgaW4gYW55IFJFTkFNRSBj b21tYW5kIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhbgorICAgICAgICAgIGV4cGxpY2l0IC9DT0xM SVNJT04gc3dpdGNoLgorCisgICBTSE9XIFJFTkFNRQorICAgICAgICAgIERpc3BsYXlzIHRoZSBj dXJyZW50IFNFVCBSRU5BTUUgc2V0dGluZ3MuCisKK0NoYW5naW5nIHRoZSBDYXNlIG9mIEZpbGVu YW1lcworCisgICBSRU5BTUUgL1VQUEVSOntBTEwsTE9XRVJ9IGZpbGVzcGVjIFsgZGlyZWN0b3J5 IF0KKyAgICAgICAgICBSRU5BTUUgL0xPV0VSOntBTEwsVVBQRVJ9IGZpbGVzcGVjIFsgZGlyZWN0 b3J5IF0KKyAgICAgICAgICBUaGVzZSBzd2l0Y2hlcyBsZXQgeW91IGNoYW5nZSB0aGUgYWxwaGFi ZXRpYyBjYXNlIG9mIGxldHRlcnMgaW4KKyAgICAgICAgICBhbGwgdGhlIGZpbGVzIHdob3NlIG5h bWVzIG1hdGNoIHRoZSBmaWxlc3BlYy4gSWYgYSBkaXJlY3RvcnkKKyAgICAgICAgICBuYW1lIGlz IGdpdmVuIGFmdGVyIHRoZSBmaWxlc3BlYywgdGhlbiB0aGUgZmlsZXMgYXJlIGFsc28gbW92ZWQK KyAgICAgICAgICB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorCisgICBCeSBkZWZhdWx0LCBhbGwg ZmlsZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmlsZXNwZWMgaGF2ZSB0aGVpciBuYW1lcworICAg Y2hhbmdlZCAoaWYgbmVjZXNzYXJ5KS4gVGhpcyBpcyB3aGF0IHRoZSBBTEwgYXJndW1lbnQgbWVh bnMsIGUuZy46CisKKyAgICAgUkVOQU1FIC9MT1dFUjpBTEwgKgorICAgICBSRU5BTUUgL0xPV0VS ICoKKworICAgWW91IGNhbiB1c2UgZWl0aGVyIGZvcm06IFJFTkFNRSAvTE9XRVIgaXMgZXF1aXZh bGVudCB0byBSRU5BTUUKKyAgIC9MT1dFUjpBTEwuIFRoZSBvdGhlciBhcmd1bWVudCAoL0xPV0VS OlVQUEVSIG9yIC9VUFBFUjpMT1dFUikgbWVhbnMgdG8KKyAgIGxlYXZlIG1peGVkLWNhc2UgZmls ZW5hbWVzIGFsb25lLCBhbmQgcmVuYW1lIG9ubHkgdGhvc2UgZmlsZXMgd2hvc2UKKyAgIG5hbWVz IGNvbnRhaW4gbGV0dGVycyBvZiBvbmx5IHRoZSBnaXZlbiBjYXNlLiBFeGFtcGxlczoKKworICAg UkVOQU1FIC9VUFBFUjpBTEwgZm9vLmJhcgorICAgICAgICAgIENoYW5nZXMgdGhlIGZpbGVuYW1l IHRvIEZPTy5CQVIuCisKKyAgIFJFTkFNRSAvVVBQRVIgZm9vLmJhcgorICAgICAgICAgIFNhbWUg YXMgInJlbmFtZSAvdXBwZXI6YWxsIGZvby5iYXIiLgorCisgICBSRU5BTUUgL1VQUEVSIGZvby5i YXIgfi9vbGQvCisgICAgICAgICAgUmVuYW1lcyBmb28uYmFyIHRvIEZPTy5CQVIgYW5kIG1vdmVz IGl0IHRvIHRoZSB1c2VyJ3Mgb2xkCisgICAgICAgICAgZGlyZWN0b3J5IChVbml4KS4KKworICAg UkVOQU1FIC9MT1dFUiAqCisgICAgICAgICAgQ2hhbmdlcyB0aGUgbmFtZXMgb2YgYWxsIGZpbGVz IHRvIGhhdmUgb25seSBsb3dlcmNhc2UgbGV0dGVycy4KKworICAgUkVOQU1FIC9MT1dFUjpVUFBF UiAqCisgICAgICAgICAgQ2hhbmdlcyB0aGUgbmFtZXMgb2Ygb25seSB0aG9zZSBmaWxlcyB3aG9z ZSBuYW1lcyBjb250YWluIG5vCisgICAgICAgICAgbG93ZXJjYXNlIGxldHRlcnMgdG8gaGF2ZSBv bmx5IGxvd2VyY2FzZSBsZXR0ZXJzLiBGb3IgZXhhbXBsZSwKKyAgICAgICAgICBGT08uQkFSIHdv dWxkIGJlIGNoYW5nZWQsIEZvby5CYXIgd291bGQgbm90IGJlIGNoYW5nZWQuIGZvby5iYXIKKyAg ICAgICAgICB3b3VsZCBub3QgYmUgY2hhbmdlZCBlaXRoZXIgYmVjYXVzZSBpdCdzIGFscmVhZHkg YWxsIGxvd2VyY2FzZS4KKworICAgUkVOQU1FIC9MT1dFUjpVUFBFUiAqIH4vbmV3LworICAgICAg ICAgIFNhbWUgYXMgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCBhbHNvIG1vdmVzIGVhY2ggZmls ZSB0byB0aGUKKyAgICAgICAgICB1c2VyJ3MgbmV3IGRpcmVjdG9yeSAod2hldGhlciBpdCB3YXMg cmVuYW1lZCBvciBub3QpLgorCisgICBDYXNlIGNvbnZlcnNpb24gd29ya3MgcmVsaWFibHkgZm9y IEFTQ0lJIGNoYXJhY3RlcnMgb25seS4gS2VybWl0IHVzZXMKKyAgIHRoZSBDIGxpYnJhcnkgZm9y IHRoaXMsIHdoaWNoIG9uIGFueSBnaXZlbiBwbGF0Zm9ybSBtaWdodCBvciBtaWdodCBub3QKKyAg IGhhbmRsZSBub24tQVNDSUkgbGV0dGVycywgYW5kIGlmIGl0IGRvZXMsIHRoZW4gaG93IGl0IHdv cmtzIHdvdWxkCisgICBub3JtYWxseSBkZXBlbmQgb24geW91ciBsb2NhbGUgZGVmaW5pdGlvbnMg KHRoZSBMQ19DVFlQRSBhbmQvb3IgTEFORworICAgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gVW5p eCkuIFdoZW4gbm9uLUFTQ0lJIGxldHRlcnMgYXJlIG5vdCBoYW5kbGVkCisgICBieSB0aGUgQyBs aWJyYXJ5LCB0aGUgUkVOQU1FIGNvbW1hbmQgZG9lcyBjaGFuZ2UgdGhlaXIgY2FzZS4gRm9yCisg ICBleGFtcGxlLCBPbGdhX1Rh77+977+9bi50eHQgbWlnaHQgYmVjb21lIE9MR0FfVEHvv73vv71O LlRYVC4KKworU3RyaW5nIFJlcGxhY2VtZW50IGluIEZpbGVuYW1lcworCisgICBUaGUgUkVOQU1F IGNvbW1hbmQgYWxzbyBsZXRzIHlvdSBjaGFuZ2UgZmlsZW5hbWVzIGJ5IHN0cmluZworICAgc3Vi c3RpdHV0aW9uLgorCisgICBSRU5BTUUgL0ZJWFNQQUNFU1s6U3RyaW5nXSBmaWxlc3BlYyBbIGRp cmVjdG9yeSBdCisgICAgICAgICAgUmVwbGFjZXMgYWxsIHNwYWNlcyBpbiBlYWNoIG1hdGNoaW5n IGZpbGVuYW1lIGJ5IHRoZSBnaXZlbgorICAgICAgICAgIHN0cmluZywgaWYgYW55LCBvciBpZiBu b25lIGlzIGdpdmVuLCBieSB1bmRlcnNjb3JlLiBFeGFtcGxlczoKKworICAgICBSRU5BTUUgL0ZJ WCAqCisgICAgIFJFTkFNRSAvRklYU1BBQ0VTOl8gKgorICAgICBSRU5BTUUgL0ZJWFNQQUNFUzoi IiAqCisgICAgIFJFTkFNRSAvRklYU1BBQ0VTOjwwNDA+ICoKKworICAgICAgICAgIFRoZSBmaXJz dCB0d28gYXJlIGVxdWl2YWxlbnQsIHJlcGxhY2luZyBlYWNoIHNwYWNlIHdpdGgKKyAgICAgICAg ICB1bmRlcnNjb3JlOyBhIGZpbGUgY2FsbGVkICJNeSBGYXZvcml0ZSBQaG90by5qcGciIGJlY29t ZXMKKyAgICAgICAgICAiTXlfRmF2b3JpdGVfUGhvdG8uanBnIi4gVGhlIHRoaXJkIGV4YW1wbGUg cmVtb3ZlcyBhbGwgc3BhY2VzCisgICAgICAgICAgKCJNeUZhdm9yaXRlUGhvdG8uanBnIikuIFRo ZSBmb3VydGggcmVwbGFjZXMgZWFjaCBzcGFjZSB3aXRoIHRoZQorICAgICAgICAgIHN0cmluZyAi PDA0MD4iICgiTXk8MDQwPkZhdm9yaXRlPDA0MD5QaG90by5qcGciKS4KKworICAgUkVOQU1FIC9S RVBMQUNFOnt7U3RyaW5nMX17U3RyaW5nMn19IGZpbGVzcGVjIFsgZGlyZWN0b3J5IF0KKyAgICAg ICAgICBSZW5hbWVzIGVhY2ggbWF0Y2hpbmcgZmlsZSBieSBjaGFuZ2luZyBvY2N1cnJlbmNlcyBv ZiBTdHJpbmcxIGluCisgICAgICAgICAgaXRzIG5hbWUgdG8gU3RyaW5nMi4gSWYgYSBkaXJlY3Rv cnkgc3BlY2lmaWNhdGlvbiBpcyBpbmNsdWRlZCwKKyAgICAgICAgICB0aGUgZmlsZSBpcyBhbHNv IG1vdmVkIHRvIHRoZSBnaXZlbiBkaXJlY3RvcnkgKGV2ZW4gaWYgdGhlIG5hbWUKKyAgICAgICAg ICB3YXMgbm90IGNoYW5nZWQpLiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCB0aGUgY3VybHkgYnJh Y2VzIGFyZQorICAgICAgICAgIHBhcnQgb2YgdGhlIGNvbW1hbmQuIEV4YW1wbGU6CisKKyAgICAg UkVOQU1FIC9SRVBMQUNFOnt7LmpwZWd9ey5qcGd9fSAqCisKKyAgICAgICAgICBjaGFuZ2VzIGFs bCAqLmpwZWcgZmlsZXMgdG8gKi5qcGcuCisKKyAgIEJ5IGRlZmF1bHQsIFJFTkFNRSAvUkVQTEFD RSBjaGFuZ2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBTdHJpbmcxIGluIGVhY2gKKyAgIGZpbGVuYW1l IHRvIFN0cmluZzIgc28sIGZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGEgZmlsZSBjYWxsZWQKKyAg IGFiY2pwZWd4eXouanBlZywgdGhlIGNvbW1hbmQganVzdCBzaG93biB3b3VsZCBjaGFuZ2UgaXRz IG5hbWUgdG8KKyAgIGFiY2pwZ3h5ei5qcGcuCisKKyAgIEZvciBncmVhdGVyIGNvbnRyb2wgYW5k IGZsZXhpYmlsaXR5LCB0aGUgL1JFUExBQ0U6IHN3aXRjaCBhcmd1bWVudCBjYW4KKyAgIHRha2Ug c2V2ZXJhbCBkaXN0aW5jdCBmb3JtczoKKworICAgUkVOQU1FIC9SRVBMQUNFOlN0cmluZzEgZmls ZXNwZWMgWyBkaXJlY3RvcnkgXQorICAgICAgICAgIFRoaXMgbWVhbnMgdG8gcmVtb3ZlIGFsbCBv Y2N1cnJlbmNlcyBvZiBTdHJpbmcxIGZyb20gdGhlIGdpdmVuCisgICAgICAgICAgZmlsZW5hbWVz IG5hbWUuIEl0IGlzIGVxdWl2YWxlbnQgdG8gL1JFUExBQ0U6e3tTdHJpbmcxfXt9fS4gQQorICAg ICAgICAgIGhhbmR5IHVzZSBmb3IgdGhpcyBvcHRpb24gaXMgdG8gcmVtb3ZlIHNwYWNlcyBmcm9t IGZpbGVuYW1lcy4KKworICAgUkVOQU1FIC9SRVBMQUNFOnt7U3RyaW5nMX17U3RyaW5nMn19IGZp bGVzcGVjIFsgZGlyZWN0b3J5IF0KKyAgICAgICAgICBBcyBhbHJlYWR5IG5vdGVkLCB0aGlzIHJl cGxhY2VzIGV2ZXJ5IG9jY3VycmVuY2Ugb2YgU3RyaW5nMSB3aXRoCisgICAgICAgICAgU3RyaW5n MiBpbiBlYWNoIGZpbGVuYW1lLiBBbHBoYWJldGljIGNhc2UgaW4gc3RyaW5nIG1hdGNoaW5nIGlz CisgICAgICAgICAgZG9uZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgU0VUIENBU0Ugc2V0dGlu Zy4KKworICAgUkVOQU1FIC9SRVBMQUNFOnt7IH17X319IGZpbGVzcGVjIFsgZGlyZWN0b3J5IF0K KyAgICAgICAgICBUaGlzIHJlcGxhY2VzIGFsbCBzcGFjZXMgaW4gdGhlIGdpdmVuIGZpbGVuYW1l cyB3aXRoIHVuZGVyc2NvcmUsCisgICAgICAgICAgZXF1aXZhbGVudCB0byBSRU5BTUUgL0ZJWFNQ QUNFUy4KKworICAgUkVOQU1FIC9SRVBMQUNFOnt7U3RyaW5nMX17U3RyaW5nMn17T3B0aW9uc319 IGZpbGVzcGVjIFsgZGlyZWN0b3J5IF0KKyAgICAgICAgICBPcHRpb25zIGNhbiBiZSBpbmNsdWRl ZCB0aGF0IGFkZCBtb3JlIGNvbnRyb2wgdG8gdGhlIHByb2Nlc3MuCisgICAgICAgICAgVGhlIG9w dGlvbiBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzOyBlYWNoIGNoYXJhY3RlciBp bgorICAgICAgICAgIHRoZSBzdHJpbmcgaXMgYW4gb3B0aW9uLiBUaGUgY2hvaWNlcyBhcmU6CisK KyAgIEEgU3RyaW5nIG1hdGNoaW5nIGlzIHRvIGJlIGNhc2Utc2Vuc2l0aXZlLCByZWdhcmRsZXNz IG9mIFNFVCBDQVNFLgorICAgYSBTdHJpbmcgbWF0Y2hpbmcgaXMgdG8gYmUgY2FzZS1pbmRlcGVu ZGVudCwgcmVnYXJkbGVzcyBvZiBTRVQgQ0FTRS4KKyAgIF4gU3RyaW5nIHJlcGxhY2VtZW50IHdp bGwgb2NjdXIgb25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlbmFtZS4KKyAgICQgU3Ry aW5nIHJlcGxhY2VtZW50IHdpbGwgb2NjdXIgb25seSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlbmFt ZS4KKyAgIDEgT25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIHdpbGwgYmUg cmVwbGFjZWQuCisgICAyIE9ubHkgdGhlIHNlY29uZCBvY2N1cnJlbmNlIG9mIHRoZSBzdHJpbmcg d2lsbCBiZSByZXBsYWNlZC4KKyAgIDMgNCA1IDYgNyA4IC4uLgorICAgOSBPbmx5IHRoZSBuaW50 aCBvY2N1cnJlbmNlIG9mIHRoZSBzdHJpbmcgd2lsbCBiZSByZXBsYWNlZC4KKyAgIC0gKGh5cGhl biwgbWludXMgc2lnbikgQmVmb3JlIGEgZGlnaXQ6IG9jY3VycmVuY2VzIHdpbGwgYmUgY291bnRl ZCBmcm9tCisgICB0aGUgcmlnaHQuCisgICB+ICh0aWxkZSkgQmVmb3JlIGRpZ2l0IG9yIG1pbnVz IHNpZ246IGFsbCBvY2N1cnJlbmNlcyBidXQgdGhlIGdpdmVuIG9uZQorICAgd2lsbCBiZSByZXBs YWNlZC4KKworICAgVGhlIHRpbGRlIG1vZGlmaWVyIHdvcmtzIG9ubHkgd2l0aCBzaW5nbGUtYnl0 ZSBjaGFyYWN0ZXIgc2V0cyBzdWNoIGFzCisgICBBU0NJSSwgQ1A0MzcsIElTTyA4ODU5LTEsIGV0 YywgYnV0IG5vdCB3aXRoIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0cworICAgc3VjaCBhcyBVQ1My LCBVVEY4LCBvciBhbnkgb2YgdGhlIEphcGFuZXNlIEthbmppIHNldHMuCisKKyAgIEhlcmUgYXJl IHNvbWUgZXhhbXBsZXMgc2hvd2luZyBob3cgdG8gdXNlIHRoZSAvUkVQTEFDRSBvcHRpb25zOgor CisgICBSRU5BTUUgL1JFUExBQ0U6e3tmb299e2Jhcn17Xn19ICoKKyAgICAgICAgICBGb3IgYWxs IGZpbGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggImZvbyIsIHJlcGxhY2VzIHRoZSAiZm9vIgor ICAgICAgICAgIGF0IHRoZSBiZWdpbm5pbmcgd2l0aCAiYmFyIi4KKworICAgUkVOQU1FIC9SRVBM QUNFOnt7fXtOZXctfXtefX0gKgorICAgICAgICAgIFByZXBlbmRzICJOZXctIiB0byB0aGUgbmFt ZSBvZiBlYWNoIGZpbGUuCisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7ey5qcGVnfXsuanBnfXskfX0g KgorICAgICAgICAgIFJlcGxhY2VzICIuanBlZyIgYXQgdGhlIGVuZCBvZiBlYWNoIGZpbGVuYW1l IHdpdGggIi5qcGciLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3t9ey1PbGR9eyR9fSAqCisgICAg ICAgICAgQXBwZW5kcyAiLU9sZCIgdG8gdGhlIG5hbWUgb2YgZWFjaCBmaWxlLgorCisgICBSRU5B TUUgL1JFUExBQ0U6e3tmb299e2Jhcn17YX19ICoKKyAgICAgICAgICBSZXBsYWNlcyAiZm9vIiwg IkZPTyIsICJGb28iLCAiZk9PIiwgZXRjLCB3aXRoICJiYXIiIGluIGVhY2gKKyAgICAgICAgICBm aWxlbmFtZS4KKworICAgUkVOQU1FIC9SRVBMQUNFOnt7Zm9vfXtiYXJ9e0F9fSAqCisgICAgICAg ICAgUmVwbGFjZXMgb25seSAobG93ZXJjYXNlKSAiZm9vIiBpbiBmaWxlbmFtZXMgd2l0aCAiYmFy Ii4KKworICAgUkVOQU1FIC9SRVBMQUNFOnt7YX17WFh9fSAqCisgICAgICAgICAgQ2hhbmdlcyBl dmVyeSAiYSIgdG8gIlhYIi4gRm9yIGV4YW1wbGUgYSBmaWxlIGNhbGxlZCAiYS5hLmEuYSIKKyAg ICAgICAgICB3b3VsZCBiZWNvbWUgIlhYLlhYLlhYLlhYIi4KKworICAgUkVOQU1FIC9SRVBMQUNF Ont7YX17WH17Mn19CisgICAgICAgICAgQ2hhbmdlcyBvbmx5IHRoZSBzZWNvbmQgImEiIHRvICJY Ii4gRm9yIGV4YW1wbGUgYSBmaWxlIGNhbGxlZAorICAgICAgICAgICJhLmEuYS5hIiB3b3VsZCBi ZWNvbWUgImEuWC5hLmEiLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3thfXtYfXstMX19CisgICAg ICAgICAgQ2hhbmdlcyBvbmx5IHRoZSBmaW5hbCAiYSIgaW4gdGhlIGZpbGVuYW1lIChpdCBkb2Vz bid0IGhhdmUgdG8KKyAgICAgICAgICBiZSBhdCB0aGUgZW5kKSB0byAiWCIuIEZvciBleGFtcGxl IGEgZmlsZSBjYWxsZWQgImEuYi5hLmMuYS5kIgorICAgICAgICAgIHdvdWxkIGJlY29tZSAiYS5i LmEuYy5YLmQiLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3tmb299e05PVEZPT317LTJ9fQorICAg ICAgICAgIENoYW5nZXMgdGhlIHNlY29uZC10by1sYXN0ICJmb28iIChpZiBhbnkpIGluIHRoZSBm aWxlbmFtZSB0bworICAgICAgICAgICJOT1RGT08iLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3tm b299e317LTJ9fQorICAgICAgICAgIERlbGV0ZXMgdGhlIHNlY29uZC10by1sYXN0ICJmb28iIChp ZiBhbnkpIGZyb20gdGhlIGZpbGVuYW1lLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3sufXtffXt+ MX19CisgICAgICAgICAgQ2hhbmdlcyBhbGwgYnV0IHRoZSBmaXJzdCBwZXJpb2QgdG8gYW4gdW5k ZXJzY29yZTsgZm9yIGV4YW1wbGUsCisgICAgICAgICAgImEuYi5jLmQuZSIgd291bGQgYmVjb21l ICJhLmJfY19kX2UiLgorCisgICBSRU5BTUUgL1JFUExBQ0U6e3sufXtffXt+LTF9fQorICAgICAg ICAgIENoYW5nZXMgYWxsIGJ1dCB0aGUgZmluYWwgcGVyaW9kIHRvIGFuIHVuZGVyc2NvcmU7IGZv ciBleGFtcGxlLAorICAgICAgICAgICJhLmIuYy5kLmUiIHdvdWxkIGJlY29tZSAiYV9iX2NfZC5l Ii4KKworICAgSW4gdGhlIE9wdGlvbnMgZmllbGQsIGRpZ2l0cyAoYW5kIHRoZWlyIG1vZGlmaWVy cyksIF4sIGFuZCAkIGFyZQorICAgbXV0dWFsbHkgZXhjbHVzaXZlLiBJZiB5b3UgaW5jbHVkZSBt b3JlIHRoYW4gb25lIG9mIHRoZXNlIGluIHRoZSBvcHRpb24KKyAgIHN0cmluZywgb25seSB0aGUg bGFzdCBvbmUgaXMgdXNlZC4gU2ltaWxhcmx5IGZvciAnYScgYW5kICdBJzoKKworICAgUkVOQU1F IC9SRVBMQUNFOnt7Zm9vfXtiYXJ9e0FhMiRefX0gKgorICAgICAgICAgIFRoaXMgcmVwbGFjZXMg ImZvbyIgd2l0aCAiYmFyIiBubyBtYXR0ZXIgd2hhdCBjb21iaW5hdGlvbiBvZgorICAgICAgICAg IHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMgYXJlIHVzZWQgaW4gImZvbyIgKCdhJyBvdmVy cmlkZXMKKyAgICAgICAgICAnQScgaW4gdGhlIG9wdGlvbiBzdHJpbmcpLCBidXQgb25seSBpZiAi Zm9vIiBpcyBhdCB0aGUgYmVnaW5uaW5nCisgICAgICAgICAgb2YgdGhlIGZpbGVuYW1lICgnXicg b3ZlcnJpZGVzICckJyBhbmQgJzInKS4KKworICAgSWYgeW91IGdpdmUgYW4gL1VQUEVSIG9yIC9M T1dFUiBzd2l0Y2ggYW5kIGEgL1JFUExBQ0Ugc3dpdGNoIGluIHRoZQorICAgc2FtZSBSRU5BTUUg Y29tbWFuZCwgdGhlIC9SRVBMQUNFIGFjdGlvbiBvY2N1cnMgZmlyc3QsIHRoZW4gdGhlIGNhc2UK KyAgIGNvbnZlcnNpb246CisKKyAgIFJFTkFNRSAvUkVQTEFDRTp7e2Zvb317YmFyfX0gL1VQUEVS ICogL3RtcAorICAgICAgICAgIEZvciBlYWNoIGZpbGU6IGNoYW5nZXMgYWxsIG9jY3VycmVuY2Vz IG9mICJmb28iIGluIHRoZSBuYW1lIHRvCisgICAgICAgICAgImJhciIsIHRoZW4gY29udmVydHMg dGhlIHJlc3VsdCB0byB1cHBlcmNhc2UsIGFuZCB0aGVuIG1vdmVzIHRoZQorICAgICAgICAgIGZp bGUgdG8gdGhlIC90bXAgZGlyZWN0b3J5LiBTbyAoZm9yIGV4YW1wbGUpICJmb290LnR4dCIgd291 bGQKKyAgICAgICAgICBiZWNvbWUgIi90bXAvQkFSVC5UWFQiLgorCitDaGFuZ2luZyB0aGUgQ2hh cmFjdGVyIEVuY29kaW5nIG9mIEZpbGVuYW1lcworCisgICBBcyB5b3Uga25vdywgdGV4dCBpcyBy ZXByZXNlbnRlZCBvbiB0aGUgY29tcHV0ZXIgYXMgYSBzZXJpZXMgb2YKKyAgIG51bWJlcnMsIHdp dGggYSBnaXZlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIGNoYXJhY3RlcgorICAg YWNjb3JkaW5nIHRvIHNvbWUgY29udmVudGlvbiBvciBzdGFuZGFyZC4gRmlsZW5hbWVzIGFyZSBy ZXByZXNlbnRlZCB0aGUKKyAgIHNhbWUgd2F5LiBUaGUgdHJvdWJsZSBpcywgZGlmZmVyZW50IGNv bXB1dGVycywgb3IgZXZlbiBkaWZmZXJlbnQKKyAgIGFwcGxpY2F0aW9ucyBvbiB0aGUgc2FtZSBj b21wdXRlciwgbWlnaHQgdXNlIGRpZmZlcmVudCBzdGFuZGFyZHMgb3IKKyAgIGNvbnZlbnRpb25z ICgiY2hhcmFjdGVyIHNldHMiKSBmb3IgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGNoYXJhY3RlcnMu CisgICBVc3VhbGx5IEFTQ0lJIGlzIHNhZmUsIGJ1dCBhbnl0aGluZyBiZXlvbmQgdGhhdCAtLSBu b24tQVNDSUkgY2hhcmFjdGVycworICAgc3VjaCBhcyBhY2NlbnRlZCBvciBub24tUm9tYW4gbGV0 dGVycyAtLSBpcyBsaWtlbHkgdG8gdmFyeS4gU29tZXRpbWVzCisgICB5b3UgaGF2ZSB0ZXh0IHRo YXQncyBpbiB0aGUgIndyb25nIiBjaGFyYWN0ZXIgc2V0IGFuZCB5b3UgbmVlZCB0bworICAgY29u dmVydCBpdCB0byBzb21ldGhpbmcgeW91IGNhbiBjYW4gdXNlLiBLZXJtaXQgaGFzIGFsd2F5cyBi ZWVuIGFibGUgdG8KKyAgIGhhbmRsZSB0aGlzIGFzIHBhcnQgb2YgZmlsZSB0cmFuc2ZlciBhbmQg dGVybWluYWwgZW11bGF0aW9uLCBhcyB3ZWxsIGFzCisgICBiZWluZyBhYmxlIHRvIGNvbnZlcnQg dGV4dCBmaWxlcyBsb2NhbGx5IHdpdGggaXRzIFRSQU5TTEFURSBjb21tYW5kLgorICAgTm93IHRo ZXJlJ3MgYSB3YXkgdG8gY29udmVydCBmaWxlbmFtZXMgdG9vLCBmb3IgZXhhbXBsZSBhZnRlciBj b3B5aW5nCisgICBmaWxlcyBmcm9tIGEgQ0QgdGhhdCB1c2VzIGEgZGlmZmVyZW50IGVuY29kaW5n OgorCisgICBSRU5BTUUgL0NPTlZFUlQ6Y2hhcnNldDE6Y2hhcnNldDIgZmlsZXNwZWMgWyBkaXJl Y3RvcnkgXQorICAgICAgICAgIENvbnZlcnRzIGZpbGVuYW1lcyBmcm9tIHRoZSBmaXJzdCBjaGFy YWN0ZXIgc2V0IHRvIHRoZSBzZWNvbmQKKyAgICAgICAgICBvbmUuIFRoZSB0d28gY2hhcmFjdGVy IHNldHMgY2FuIGJlIGNob3NlbiBmcm9tIHRoZSBTRVQgRklMRQorICAgICAgICAgIENIQVJBQ1RF Ui1TRVQgbGlzdDsgZm9yIGNvbXBsZXRlIGRldGFpbHMgc2VlIFs2OF10aGlzIHBhZ2UuIEZvcgor ICAgICAgICAgIGV4YW1wbGUgc3VwcG9zZSB5b3UgaGF2ZSBhIGZpbGUgY2FsbGVkICJPbGdhX1Rh 77+977+9bi50eHQiIG9uIGEKKyAgICAgICAgICBjb21wdXRlciB3aGVyZSBJU08gODg1OS0xIExh dGluIEFscGhhYmV0IDEgaXMgdXNlZCwgYW5kIHlvdSBoYXZlCisgICAgICAgICAgdHJhbnNwb3J0 ZWQgaXQgKGUuZy4gb24gQ0RST00pIHRvIGFub3RoZXIgY29tcHV0ZXIgd2hlcmUgdGhlCisgICAg ICAgICAgdGV4dCBlbmNvZGluZyBpcyBVVEY4LiBNYXliZSB5b3UgYWxzbyBoYXZlIGEgbG90IG9m IG90aGVyIGZpbGVzCisgICAgICAgICAgd2l0aCBzaW1pbGFyIG5hbWVzIGluIHRoZSBzYW1lIGRp cmVjdG9yeS4gWW91IGNhbiBjb252ZXJ0IHRoZQorICAgICAgICAgIGZpbGVuYW1lcyB0byBVVEY4 IGxpa2UgdGhpczoKKworICAgICBSRU5BTUUgL0NPTlZFUlQ6bGF0aW4xOnV0ZjggKgorCisgICAv Q09OVkVSVCBjYW4gbm90IGJlIGNvbWJpbmVkIHdpdGggL1VQUEVSLCAvTE9XRVIsIG9yIC9SRVBM QUNFLgorCisgICBZb3Ugc2hvdWxkIE5PVCB1c2UgVUNTMiBmb3IgZmlsZW5hbWVzIHNpbmNlIHRo aXMgZW5jb2RpbmcgaXMgbm90CisgICBjb21wYXRpYmxlIHdpdGggQyBzdHJpbmdzIHVzZWQgaW4g VW5peCBhbmQgZWxzZXdoZXJlLgorCisgICBSRU5BTUUgL0NPTlZFUlQgYWZmZWN0cyBvbmx5IHRo ZSBmaWxlbmFtZSwgbm90IHRoZSBmaWxlJ3MgY29udGVudHMuIFlvdQorICAgY2FuIHVzZSB0aGUg VFJBTlNMQVRFIGNvbW1hbmQgdG8gY29udmVydCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGNvbnRlbnRz CisgICBvZiBhIHRleHQgZmlsZS4KKworT3RoZXIgTmV3IEZlYXR1cmVzCisKKyAgIFNlZSB0aGUg WzY5XUMtS2VybWl0IERhaWx5IEJ1aWxkcyBwYWdlIGZvciBkZXRhaWxzLiBWZXJ5IGJyaWVmbHk6 CisKKyAgICAgKiBQZXJoYXBzIG1vc3QgaW1wb3J0YW50LCBtb2Rlcm5pemVkIG1ha2VmaWxlIHRh cmdldHMgZm9yIHRoZSBtYWpvcgorICAgICAgIFVuaXggcGxhdGZvcm1zOiBMaW51eCwgTWFjIE9T IFgsIEFJWCwgU29sYXJpcywgZXRjLiBUaGVzZSBhcmUKKyAgICAgICBzb21ld2hhdCBhdXRvbWF0 ZWQ7IG5vdCBhdXRvY29uZiBleGFjdGx5LCBidXQgdGhleSBjdXQgZG93bgorICAgICAgIHNpZ25p ZmljYW50bHkgb24gcmVkdW5kYW50IHRhcmdldHMuIEZvciBleGFtcGxlLCBvbmUgc2luZ2xlICJs aW51eCIKKyAgICAgICB0YXJnZXQgd29ya3Mgb24gbWFueSAoaG9wZWZ1bGx5IGFsbCkgZGlmZmVy ZW50IExpbnV4CisgICAgICAgY29uZmlndXJhdGlvbnMsIHdoZXJlIGJlZm9yZSBkaWZmZXJlbnQg dGFyZ2V0cyB3ZXJlIHJlcXVpcmVkIGZvcgorICAgICAgIGRpZmZlcmVudCBjb21iaW5hdGlvbnMg b2YgKGUuZy4pIGN1cnNlcyAvIG5jdXJzZXMgLyBubyBjdXJzZXM7CisgICAgICAgMzItYml0IC8g NjQtYml0OyBkaWZmZXJlbnQgZmVhdHVyZSBzZXRzIGFuZCBsaWJyYXJ5IGxvY2F0aW9ucy4KKyAg ICAgICAoU2VwYXJhdGUgdGFyZ2V0cyBhcmUgc3RpbGwgcmVxdWlyZWQgZm9yIEtlcmJlcm9zIGFu ZC9vciBTU0wKKyAgICAgICBidWlsZHMsIGJ1dCB0aGV5IGFyZSAic3Vicm91dGluaXplZCIuKQor ICAgICAqIEJpZ2dlciBidWZmZXJzLCBtb3JlIHN0b3JhZ2UgZm9yIGNvbW1hbmRzLCBtYWNyb3Ms IHNjcmlwdHMsCisgICAgICAgc3RyaW5ncywgYW5kIGZpbGVuYW1lIGV4cGFuc2lvbiBpbiA2NC1i aXQgdmVyc2lvbnMgYW5kIGluIDMyLWJpdAorICAgICAgIHZlcnNpb25zIHRoYXQgc3VwcG9ydCBs YXJnZSBmaWxlcy4KKyAgICAgKiBVc2VyLXNldHRhYmxlIEZUUCB0aW1lb3V0LCB3b3JrcyBvbiBi b3RoIHRoZSBkYXRhIGFuZCBjb250cm9sCisgICAgICAgY29ubmVjdGlvbi4KKyAgICAgKiBGVFAg YWNjZXNzIHRvIHBvcnRzIGhpZ2hlciB0aGFuIDE2MzgzLgorICAgICAqIEJ1aWx0LWluIEZUUCBj bGllbnQgZm9yIFZNUy4gVGhpcyBpcyB0aGUgWzcwXXNhbWUgRlRQIGNsaWVudCBVbml4CisgICAg ICAgQy1LZXJtaXQgaGFzIGhhZCBzaW5jZSB2ZXJzaW9uIDguMCwgbWluaW1hbGx5IGFkYXB0ZWQg dG8gVk1TIGJ5CisgICAgICAgU01TLCBzdXBwb3J0aW5nIGJpbmFyeSBhbmQgU3RyZWFtX0xGIGZp bGUgdHJhbnNmZXIgb25seSAoaW4gb3RoZXIKKyAgICAgICB3b3Jkcywgbm90aGluZyB0byBoYW5k bGUgUk1TIGZpbGVzKSwgYnV0IG90aGVyd2lzZSBmdWxseSBmdW5jdGlvbmFsCisgICAgICAgKGFu ZCBzY3JpcHRhYmxlKSBhbmQgdGhlb3JldGljYWxseSBjYXBhYmxlIG9mIG1ha2luZyBjb25uZWN0 aW9ucworICAgICAgIHNlY3VyZWQgYnkgU1NMIChhdCBsZWFzdCBpdCBjb21waWxlcyBhbmQgbGlu a3MgT0sgd2l0aCBTU0wgLSBIUCBTU0wKKyAgICAgICAxLjMgaW4gdGhpcyBjYXNlKS4KKyAgICAg KiBMYXJnZSBmaWxlIHN1cHBvcnQgaW4gVk1TLCBhbHNvIGJ5IFNNUy4gQWxwaGEgYW5kIEl0YW5p dW0gb25seSAobm90CisgICAgICAgVkFYKS4gVk1TIEMtS2VybWl0IHdhcyBhbHJlYWR5IGFibGUg dG8gdHJhbnNmZXIgbGFyZ2UgZmlsZXMsIGJ1dAorICAgICAgIHRoZSBmaWxlLXRyYW5zZmVyIGRp c3BsYXkgKG51bWJlcnMgYW5kIHByb2dyZXNzIGJhcikgYW5kIHN0YXRpc3RpY3MKKyAgICAgICB3 ZXJlIHdyb25nIGJlY2F1c2UgdGhleSB1c2VkIGludHMuIEluIHRoZSBwcmVzZW50IEFscGhhIHRl c3QKKyAgICAgICByZWxlYXNlLCB0aGlzIGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUgcmVxdWVzdGVk IGJ5IGluY2x1ZGluZyB0aGUgImYiCisgICAgICAgb3B0aW9uIGluIFAxLgorICAgICAqIE5ldyBQ VVRFTlYgY29tbWFuZCB0aGF0IGFsbG93cyBLZXJtaXQgdG8gcGFzcyBlbnZpcm9ubWVudCB2YXJp YWJsZXMKKyAgICAgICB0byBzdWJwcm9jZXNzZXMgKFVuaXggb25seSwgImhlbHAgcHV0ZW52Iiku CisgICAgICogTmV3IFRPVUNIIGNvbW1hbmQsIG1hbnkgZmlsZSBzZWxlY3Rpb24gb3B0aW9ucyAo ImhlbHAgdG91Y2giKS4KKyAgICAgKiBOZXcgRElSRUNUT1JZIGNvbW1hbmQgb3B0aW9ucyBhbmQg c3dpdGNoZXMgKC9UT1AsIC9DT1VOVDsKKyAgICAgICBIRElSRUNUT1JZLCBXRElSRUNUT1JZLi4u KS4gVG8gc2VlIHRoZSB0ZW4gYmlnZ2VzdCBmaWxlcyBpbiB0aGUKKyAgICAgICBjdXJyZW50IGRp cmVjdG9yeTogImRpciAvdG9wOjEwIC9zb3J0OnNpemUgL3JldmVyc2UgKiIgb3IKKyAgICAgICBl cXVpdmFsZW50bHksICJoZGlyIC90b3A6MTAgKiIuIFdESVIgbGlzdHMgZmlsZXMgaW4gcmV2ZXJz ZQorICAgICAgIGNocm9ub2xvZ2ljYWwgb3JkZXIsIHNob3J0aGFuZCBmb3IgImRpciAvc29ydDpk YXRlIC9yZXZlcnNlIi4KKyAgICAgKiBOZXcgY29tbWFuZCBGU0VFSyAvRklORDpzdHJpbmctb3It cGF0dGVybiwgc2Vla3MgdG8gdGhlIGZpcnN0IGxpbmUKKyAgICAgICBpbiBhbiBGT1BFTidkIGZp bGUgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nIG9yIG1hdGNoZXMgdGhlCisgICAgICAg Z2l2ZW4gcGF0dGVybi4gRXhhbXBsZTogU3VwcG9zZSB5b3UgaGF2ZSBhIGZpbGUgb2YgbGluZXMg bGlrZSB0aGlzOgorCisgICAgIHF1YW50aXR5ICAgZGVzY3JpcHRpb24uLi4KKyAgICAgICBpbiB3 aGljaCB0aGUgZmlyc3QgIndvcmQiIGlzIGEgbnVtYmVyLCBmb2xsb3dlZCBieSBhIGRlc2NyaXB0 aW9uCisgICAgICAgKGZvciBleGFtcGxlLCB0aGUgbmFtZSBvZiBhbiBpdGVtKS4gSGVyZSBpcyBo b3cgdG8gdXNlIEZTRUVLIHRvCisgICAgICAgcXVpY2tseSBnZXQgdGhlIHRvdGFsIHF1YW50aXR5 IG9mIGFueSBnaXZlbiBpdGVtLCB3aGljaCBpcyBwYXNzZWQKKyAgICAgICBhcyBhIHBhcmFtZXRl ciAoZWl0aGVyIGEgbGl0ZXJhbCBzdHJpbmcgb3IgYSBwYXR0ZXJuKSBvbiB0aGUKKyAgICAgICBj b21tYW5kIGxpbmU6CisKKyMhL3Vzci9sb2NhbC9iaW4va2VybWl0ICsKK2lmIG5vdCBkZWYgXCUx IGV4aXQgMSBVc2FnZTogXGZiYXNlbmFtZShcJTApIHN0cmluZy1vci1wYXR0ZXJuCisKKy5maWxl bmFtZSA9IC91c3IvbG9jYWwvZGF0YS9pdGVtcy5sb2cgICAgICAgICMgU3Vic3RpdHV0ZSB0aGUg YWN0dWFsIGZpbGVuYW1lCitzZXQgY2FzZSBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIFNlYXJjaGVzIGFyZSBjYXNlLWluZGVwZW5kZW50Citmb3BlbiAvcmVhZCBcJWMgXG0o ZmlsZW5hbWUpICAgICAgICAgICAgICAgICAjIE9wZW4gdGhlIGZpbGUKK2lmIGZhaWwgZXhpdCAx ICJcbShmaWxlbmFtZSk6IFx2KGVycnN0cmluZykiICMgRmFpbDogZXhpdCB3aXRoIGVycm9yIG1l c3NhZ2UKKy50b3RhbCA9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT0s6 IEluaXRpYWxpemUgdGhlIHRvdGFsCitlY2hvIFNlYXJjaGluZyAiXCUxIi4uLgorCit3aGlsZSB0 cnVlIHsKKyAgICBmc2VlayAvbGluZSAvcmVsYXRpdmUgL2ZpbmQ6XCUxIFwlYyAwICAgICMgR2V0 IG5leHQgbGluZSB0aGF0IGhhcyB0YXJnZXQKKyAgICBpZiBmYWlsIGJyZWFrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgRmFpbHVyZSBpbmRpY2F0ZXMgRU9GCisgICAgZnJlYWQgL2xpbmUg XCVjIGxpbmUgICAgICAgICAgICAgICAgICAgICAjIFJlYWQgaXQKKyAgICBpZiBmYWlsIGJyZWFr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKHNob3VsZG4ndCBoYXBwZW4pCisgICAgaW5j cmVtZW50IHRvdGFsIFxmd29yZChcbShsaW5lKSwxKSAgICAgICAjIEluY3JlbWVudCB0aGUgdG90 YWwKK30KK2ZjbG9zZSBcJWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2xv c2UgdGhlIGZpbGUKK2VjaG8gVG90YWwgZm9yICJcJTEiIDogXG0odG90YWwpICAgICAgICAgICAg ICMgUHJpbnQgdGhlIHJlc3VsdAorZXhpdCAwCisKKyAgICAgICBUaGUgc3ludGF4IG9mIHRoZSBG U0VFSyBjb21tYW5kIGluIHRoaXMgZXhhbXBsZSBpbmRpY2F0ZXMgdGhhdCBlYWNoCisgICAgICAg c2VhcmNoIHNob3VsZCBzdGFydCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBmaWxlIGxpbmUuIFNp bmNlIEtlcm1pdAorICAgICAgIGlzIGFuIGludGVycHJldGl2ZSBsYW5ndWFnZSwgRlNFRUsgaXMg YSBsb3QgZmFzdGVyIHRoYW4gRlJFQUQnaW5nCisgICAgICAgZWFjaCBsaW5lIGFuZCBjaGVja2lu ZyBpdCBmb3IgdGhlIHRhcmdldCwgZXNwZWNpYWxseSBmb3IgYmlnIGZpbGVzLgorICAgICAgIEFu IGVzcGVjaWFsbHkgaGFuZHkgdXNlIGZvciBGU0VFSyBpcyBmb3IgdXNlIHdpdGggcG90ZW50aWFs bHkgaHVnZQorICAgICAgIHNlcXVlbnRpYWxseSB0aW1lc3RhbXBlZCBsb2dzLCB0byBzZWVrIGRp cmVjdGx5IHRvIHRoZSBkYXRlLXRpbWUKKyAgICAgICB3aGVyZSB5b3Ugd2FudCB0byBzdGFydCBw cm9jZXNzaW5nLiBTb21lIG90aGVyIGltcHJvdmVtZW50cyBmb3IgdGhlCisgICAgICAgRk9QRU4v RlJFQUQvRldSSVRFL0ZDTE9TRSBmYW1pbHkgb2YgY29tbWFuZHMgYXJlIGluY2x1ZGVkIGFsc28K KyAgICAgICAocGVyZm9ybWFuY2UsIGJ1ZyBmaXhlcywgY29udmVuaWVuY2UgZmVhdHVyZXMpLCBs aXN0ZWQgaW4gdGhlCisgICAgICAgWzcxXWNoYW5nZSBsb2cuIChQcmlvciB0byA5LjAuMjk5IEFs cGhhLjAyLCB0aGUgRlNFRUsgL0ZJTkQ6CisgICAgICAgY29tbWFuZCBhbHdheXMgc3RhcnRlZCBm cm9tIHRoZSB0b3AuKQorICAgICAqIE1JTUUgc3lub255bXMgZm9yIGNoYXJhY3Rlci1zZXQgbmFt ZXM6IEEgbmV3IGVxdWl2YWxlbmNlIGJldHdlZW4KKyAgICAgICBNSU1FIG5hbWVzIGFuZCBLZXJt aXQgbmFtZXMgZm9yIGNoYXJhY3RlciBzZXRzLCB3aXRoIGEgbmV3IHRhYmxlCisgICAgICAgc2hv d2luZyB0aGUgc3VwcG9ydGVkIHNldHMgWzcyXUhFUkUgKHRoaXMgZmVhdHVyZSBpcyBhbHNvCisg ICAgICAgaWxsdXN0cmF0ZWQgaW4gdGhlIFs3M11XZWJsb2cgc2NyaXB0KS4KKyAgICAgKiBVbml4 IEMtS2VybWl0IFNFVCBURVJNSU5BTCBUWVBFIG5vdyBwYXNzZXMgaXRzIGFyZ3VtZW50cyB0bwor ICAgICAgIHN1YnByb2Nlc3NlcyBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgKiBT RVQgU0VTU0lPTi1MT0cgVEVYVCBub3cgc3RyaXBzIG91dCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMg ZnJvbSB0aGUKKyAgICAgICBzZXNzaW9uIGxvZy4KKyAgICAgKiBGb3IgaW50ZXJhY3Rpbmcgd2l0 aCBQT1Agc2VydmVycyBvdmVyIGNsZWFyLXRleHQgb3IgU1NMLXNlY3VyZWQKKyAgICAgICBjb25u ZWN0aW9uczoKKyAgICAgICAgICArIE5ldyBTU0wgYW5kIFRMUyAicmF3IiBjb25uZWN0aW9ucyAo bm8gVGVsbmV0IHByb3RvY29sKS4KKyAgICAgICAgICArIE5ldyBJTlBVVCBjb21tYW5kIG9wdGlv bnMgZm9yIHJlYWRpbmcgYW5kIGNhcHR1cmluZyAocGVyaGFwcworICAgICAgICAgICAgd2hpbGUg c2Nhbm5pbmcpIGNvbnRpbnVvdXMgaW5jb21pbmcgdGV4dCwgc3VjaCBhcyBJTlBVVAorICAgICAg ICAgICAgL05PV1JBUCAoZXhwbGFpbmVkIFs3NF1IRVJFKS4KKyAgICAgICAgICArIE5ldyBcZmVt YWlsYWRkcmVzcygpIGNvbW1hbmQgdG8gZXh0cmFjdCB0aGUgZS1tYWlsIGFkZHJlc3MKKyAgICAg ICAgICAgIGZyb20gYW4gSW50ZXJuZXQgbWFpbCBtZXNzYWdlIFRvOiBvciBGcm9tOiBsaW5lLCB1 c2VkIGluCisgICAgICAgICAgICBmZXRjaGluZyBtYWlsIGZyb20gUE9QIHNlcnZlcnMuCisgICAg ICAgICAgKyBJbXByb3ZlZCBkYXRlIHBhcnNpbmcgY29tbWFuZHMgYW5kIGZ1bmN0aW9ucyBmb3Ig cGFyc2luZyB0aGUKKyAgICAgICAgICAgIGRpZmZlcmVudCBkYXRlIGZvcm1hdHMgdGhhdCBjYW4g YXBwZWFyIGluIGUtbWFpbC4KKyAgICAgICAgICArIFByb2R1Y3Rpb24gc2NyaXB0cyBmb3IgZmV0 Y2hpbmcgbWFpbCBmcm9tIGEgc2VjdXJlIFBPUCBzZXJ2ZXIsCisgICAgICAgICAgICBhdmFpbGFi bGUgWzc1XUhFUkUuCisgICAgICogVmFyaW91cyBmZWF0dXJlcyBhZGRlZCB0byBtYWtlIEtlcm1p dCBtb3JlIHVzZWZ1bCBmb3Igd3JpdGluZyBDR0kKKyAgICAgICBzY3JpcHRzIHN1Y2ggYXMgSU5Q VVQgL0NPVU5UOm4gdG8gSU5QVVQgZXhhY3RseSBuIGNoYXJhY3RlcnMKKyAgICAgICAodXNlZnVs IGZvciByZWFkaW5nIGZvcm0gZGF0YSkuCisgICAgICogTmV3IFxmcGljdHVyZWluZm8oKSBmdW5j dGlvbiBmb3IgZ2V0dGluZyBvcmllbnRhdGlvbiBhbmQgZGltZW5zaW9ucworICAgICAgIG9mIEpQ RyBhbmQgR0lGIGltYWdlcywgZGVzY3JpYmVkIFs3Nl1IRVJFLgorICAgICAqIE5ldyBcZmdldHBp ZGluZm8oKSBmdW5jdGlvbiBmb3IgdGVzdGluZyB3aGV0aGVyIGEgZ2l2ZW4gcHJvY2VzcworICAg ICAgIGV4aXN0cy4KKyAgICAgKiBcZmt3ZHZhbHVlKCkgZnVuY3Rpb24gZml4ZWQgdG8gYWxsb3cg bXVsdGl3b3JkIHZhbHVlcy4KKyAgICAgKiBOZXcgZnVuY3Rpb24gXGZjb3VudChzMSxzMikgdG8g dGVsbCB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHMxCisgICAgICAgaW4gczIuCisgICAg ICogTmV3IFxmbG9weCgpIGZ1bmN0aW9uIHJldHVybnMgcmlnaHRtb3N0IGZpZWxkIGZyb20gc3Ry aW5nIChzdWNoIGFzCisgICAgICAgYSBmaWxlJ3MgZXh0ZW5zaW9uKS4KKyAgICAgKiBOZXcgZnVu Y3Rpb24gXGZmdW5jdGlvbihzMSkgdG8gdGVsbCB3aGV0aGVyIGEgYnVpbHQtaW4gczEgZnVuY3Rp b24KKyAgICAgICBleGlzdHMuCisgICAgICogTmV3IFxmc3F1ZWV6ZShzMSkgZnVuY3Rpb24gcmVt b3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgICAgZnJvbSBzdHJpbmcg czEsIGNoYW5nZXMgdGFicyB0byBzcGFjZXMsIHNxdWVlemluZyBlYWNoIHJ1biBvZgorICAgICAg IHJlcGVhdGVkIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBhIHNpbmdsZSBzcGFjZS4KKyAgICAg KiBDb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbjogXHMoc29tZXN0cmluZ1sxMjoxOF0pIGlzIHRo ZSBzYW1lIGFzCisgICAgICAgXGZzdWJzdHJpbmcoXG0oc29tZXN0cmluZyksMTIsMTgpLCBpLmUu IHRoZSBzdWJzdHJpbmcgc3RhcnRpbmcgYXQKKyAgICAgICBwb3NpdGlvbiAxMiwgMTggY2hhcmFj dGVycyBsb25nLiBccyhzb21lc3RyaW5nWzEyXzE4XSkgbWVhbnMKKyAgICAgICBjaGFyYWN0ZXJz IDEyIHRocm91Z2ggMTggb2YgdGhlIHN0cmluZyAoNyBjaGFyYWN0ZXJzKS4gQWxzbywKKyAgICAg ICBccyhzb21lc3RyaW5nWzE3Ll0pIHJldHVybnMgY2hhcmFjdGVyIG51bWJlciAxNyBvZiBzb21l c3RyaW5nLgorICAgICAqIFRoZSBzdHJpbmcgaW5kZXhpbmcgZnVuY3Rpb25zIG5vdyBhY2NlcHQg YW4gb3B0aW9uYWwgdHJhaWxpbmcKKyAgICAgICBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSBvY2N1 cnJlbmNlIG51bWJlciBvZiB0aGUgdGFyZ2V0IHN0cmluZy4KKyAgICAgICBMaWtld2lzZSwgXGZ3 b3JkKCkgY2FuIGZldGNoIHdvcmRzIGZyb20gdGhlIHJpZ2h0IGFzIHdlbGwgYXMgdGhlCisgICAg ICAgbGVmdC4KKyAgICAgKiBUaGUgQ09QWSBjb21tYW5kIGluIFVuaXggQy1LZXJtaXQgaGFzIGEg bmV3IC9QUkVTRVJWRSBzd2l0Y2gsCisgICAgICAgZXF1aXZhbGVudCB0byBVbml4ICJjcCAtcCIu CisgICAgICogQVNLUSAvRUNITzpjIGNhbiBiZSB1c2VkIHRvIG1ha2UgdGhlIGNoYXJhY3RlcnMg dGhlIHVzZXIgdHlwZXMgZWNobworICAgICAgIGFzIHRoZSBjaGFyYWN0ZXIgYywgZS5nLiBhc3Rl cmlzayB3aGVuIHR5cGluZyBhIHBhc3N3b3JkLgorICAgICAqIElGIExJTksgZmlsZW5hbWUgdG8g dGVzdCBpZiB0aGUgZmlsZW5hbWUgaXMgYSBzeW1saW5rLgorICAgICAqIEN0cmwtSywgd2hlbiB0 eXBlZCBhdCB0aGUgY29tbWFuZCBwYXJzZXIsIHJlcGxhY2VzIGl0c2VsZiB3aXRoIG1vc3QKKyAg ICAgICByZWNlbnRseSBlbnRlcmVkIGZpbGUgc3BlY2lmaWNhdGlvbi4KKyAgICAgKiBJbiBVbml4 LCB0aGUgYWJpbGl0eSB0byBsb2cgYSB0ZXJtaW5hbCBzZXNzaW9uIHRvIGEgc2VyaWFsIHBvcnQs CisgICAgICAgZm9yIHVzZSB3aXRoIHNwZWFraW5nIGRldmljZXMgb3Igc2VyaWFsIHByaW50ZXJz OyBkZXNjcmliZWQKKyAgICAgICBbNzddSEVSRS4gQWxzbyBmb3IgdGhlIHNhbWUgcHVycG9zZSwg U0VUIFNFU1NJT04tTE9HCisgICAgICAgTlVMTC1QQURERUQtTElORVMgZm9yIGEgc3BlZWNoIHN5 bnRoZXNpemVyIHRoYW4gbmVlZGVkIHRoaXMuCisgICAgICogQWRhcHRhdGlvbiB0byBPcGVuU1NM IDAuOS44IGFuZCAxLjAuMC4KKyAgICAgKiBMaWZ0ZWQgdGhlIHJlc3RyaWN0aW9uIG9uIGhhdmlu ZyBhIHJlbW90ZSBLZXJtaXQgcHJvZ3JhbSBzZW5kCisgICAgICAgUkVNT1RFIGNvbW1hbmRzIHRv IHRoZSBsb2NhbC4gQSB2ZXJ5IGJpZyBleC1jbGllbnQgbmVlZGVkIHRvIGJlCisgICAgICAgYWJs ZSB0byBkbyB0aGlzIChicmFuY2hlcyB3b3VsZCBjb25uZWN0IHRvIGhlYWRxdWFydGVycyBhbmQg dXBsb2FkCisgICAgICAgZmlsZXM7IEhRIHdvdWxkIHRoZW4gZG93bmxvYWQgcGF0Y2hlcywgYSBS RU1PVEUgSE9TVCBjb21tYW5kIHdhcworICAgICAgIG5lY2Vzc2FyeSB0byBhbGxvdyB0aGUgcmVt b3RlIGhlYWRxdWFydGVycyBtYWNoaW5lcyB0byBpbnN0YWxsIHRoZQorICAgICAgIHBhdGNoZXMg b24gdGhlIGxvY2FsIGNsaWVudDsgb2YgY291cnNlIHRoZSBjbGllbnQgZmlyc3QgaGFzIHRvCisg ICAgICAgRU5BQkxFIEhPU1QgYmVjYXVzZSB0aGlzIGlzIGEgcmlza3kgc2NlbmFyaW8pLiBUaGUg cmVhc29uIGZvciB0aGUKKyAgICAgICByZXN0cmljdGlvbiB3YXMgdGhhdCB0aGUgc2VydmVyLCB1 cG9uIHJlY2VpdmluZyBhbnkgUkVNT1RFIGNvbW1hbmQKKyAgICAgICB3b3VsZCBzZW5kIHRoZSBy ZXN1bHRzIChvdXRwdXQpIGJhY2sgdG8gdGhlIGNsaWVudCBhcyBhIGZpbGUKKyAgICAgICB0cmFu c2ZlciB3aXRoICJkZXN0aW5hdGlvbiBzY3JlZW4iLCBidXQgb2YgY291cnNlIHRoZSByZW1vdGUg aGFzIG5vCisgICAgICAgc2NyZWVuLgorICAgICAqIEFkZGVkIFhNRVNTQUdFLCB3aGljaCBpcyB0 byBbNzhdTUVTU0FHRSBhcyBYRUNITyBpcyBFQ0hPOiBpdAorICAgICAgIG91dHB1dHMgYSBzdHJp bmcgd2l0aCBubyBsaW5lIHRlcm1pbmF0b3IgREVCVUcgTUVTU0FHRSBpcyBPTi4KKyAgICAgKiBG aXhlZCBcZnJlY3Vyc2UoKSB0byBub3QgZHVtcCBjb3JlIHdoZW4gaW52b2tlZCB3aXRoIG5vIGFy Z3VtZW50cy4KKyAgICAgKiBJbXByb3ZlZCB0ZXh0IGZvciBIRUxQIEZVTkNUSU9OIFNQTElUIGFu ZCBIRUxQIEZVTkNUSU9OIFdPUkQuCisgICAgICogUGF0Y2hlcyBmb3IgRGViaWFuIDYuMCAiU3F1 ZWV6ZSIgZnJvbSBJYW4gQmVja3dpdGguCisgICAgICogXGZjb250ZW50cyhcJmFbM10pIGdvdCBh biBlcnJvciBpZiB0aGUgYXJyYXkgd2FzIGRlY2xhcmVkIGJ1dCBpdHMKKyAgICAgICBkaW1lbnNp b24gd2FzIGxlc3MgdGhhbiAzLiBOb3cgaXQgc2ltcGx5IHJldHVybnMgYW5kIGVtcHR5IHN0cmlu Zy4KKyAgICAgKiBcZnNwbGl0KCksIHdoZW4gcGFyc2luZyBsaW5lcyBmcm9tIENTViBhbmQgVFNW IGZpbGVzLCB3YXMgdHJlYXRpbmcKKyAgICAgICBiYWNrc2xhc2ggaW4gdGhlIGRhdGEgdGhlIHNh bWUgd2F5IGl0IHRyZWF0cyBiYWNrc2xhc2ggaW4gS2VybWl0CisgICAgICAgY29tbWFuZHMuIFRo aXMgd2FzIGZpeGVkIHRvIHRyZWF0IGJhY2tzbGFzaCBsaWtlIGFueSBvdGhlcgorICAgICAgIGNo YXJhY3Rlci4KKyAgICAgKiBCdWlsZHMgZm9yIFNvbGFyaXMgOSBhbmQgbGF0ZXIgbm93IHVzZSBz dHJlYW1zIHB0eXMgcmF0aGVyIHRoZW4gdGhlCisgICAgICAgb2xkIEJTRC1zdHlsZSBwdHlzLiBU aGFua3MgdG8gR2FyeSBNaWxscyBmb3IgdGhpcyBvbmUsIHdobyBub3RpY2VkCisgICAgICAgdGhh dCBoZSBjb3VsZG4ndCBoYXZlIG1vcmUgdGhhbiA0OCBDLUtlcm1pdCBTU0ggc2Vzc2lvbnMgZ29p bmcgYXQKKyAgICAgICBvbmNlIGFuZCBmaWd1cmVkIG91dCB3aHkuCisgICAgICogQXMgbm90ZWQg Wzc5XWJlbG93IERFUyBlbmNyeXB0aW9uIGlzIGJlaW5nIHJldGlyZWQgZnJvbSBtYW55CisgICAg ICAgcGxhdGZvcm1zIGFuZCBsaWJyYXJpZXMgdGhhdCBvbmNlIHVzZWQgaXQuIEkgY2hhbmdlZCB0 aGUgU29sYXJpcworICAgICAgIGFuZCBMaW51eCBPcGVuU1NMIGJ1aWxkcyB0byBhY2NvdW50IGZv ciB0aGlzIGJ5IHRlc3RpbmcgZm9yIGl0LiBJCisgICAgICAgcHJvYmFibHkgc2hvdWxkIGFsc28g YWRkIGEgT01JVERFUyBvcHRpb24gdG8gb21pdCBERVMgZXZlbiBpZiBpdCBpcworICAgICAgIGlu c3RhbGxlZCwgYnV0ICJLRkxBR1M9LVVDS19ERVMiIHNlZW1zIHRvIGRvIHRoZSBqb2IgZm9yIG5v dy4KKyAgICAgKiBJIGNoYW5nZWQgdGhlIExpbnV4IGJ1aWxkIHRvIHRlc3QgZm9yIHRoZSBPcGVu U1NMIHZlcnNpb24gKGxpa2UgdGhlCisgICAgICAgU29sYXJpcyB2ZXJzaW9uIGFscmVhZHkgZGlk KSwgcmF0aGVyIHRoYW4gYXNzdW1pbmcgT3BlblNTTCAwLjkuNy4KKyAgICAgKiBBIGNvdXBsZSBt aW5vciBjaGFuZ2VzIGZvciBUcnU2NCBVbml4IDUuMUIgZnJvbSBTdGV2ZW4gU2Nod2VkYSBidXQK KyAgICAgICB3ZSBzdGlsbCBoYXZlIHNvbWUgdHJvdWJsZSBvbiB0aGF0IHBsYXRmb3JtLiBBcyBh IHdvcmthcm91bmQgIm1ha2UKKyAgICAgICBvc2YxIiBjYW4gYmUgdXNlZCB0aGVyZS4KKyAgICAg KiBVbml4IG1ha2VmaWxlIGFuZCBtYW4gcGFnZSBhcmUgbm93IGluY2x1ZGVkIGluIHRoZSBaaXAK KyAgICAgICBkaXN0cmlidXRpb24uCisgICAgICogXGZqb2luKCksIHdoaWNoIGlzIHRoZSBpbnZl cnNlIGZ1bmN0aW9uIG9mIGZzcGxpdCgpIG5vdyBhY2NlcHRzIENTVgorICAgICAgIGFuZCBUU1Yg YXMgYSBzZWNvbmQgYXJndW1lbnQsIHRvIHRyYW5zZm9ybSBhbiBhcnJheSBpbnRvIGEKKyAgICAg ICBjb21tYS1zZXBhcmF0ZWQgb3IgdGFiLXNlcGFyYXRlZCB2YWx1ZSBsaXN0LCBhcyBkZXNjcmli ZWQgWzgwXUhFUkUuCisgICAgICogRXZlbiBpbiAyMDEwLCBVbml4IGRpc3RyaWJ1dGlvbnMgY29u dGludWUgdG8gY2hhbmdlIHRoZWlyIFVVQ1AKKyAgICAgICBsb2NrZmlsZSBjb252ZW50aW9ucy4g Qy1LZXJtaXQgOS4wIGNvbnRhaW5zIHN1cHBvcnQgZnJvbSBKb29wCisgICAgICAgQm9vbmVuIGZv ciBPcGVuU3VTRSA+PSAxMS4zIGFuZCByZWNlbnQgRGViaWFuLCB3aGljaCBubyBsb25nZXIgaGF2 ZQorICAgICAgIGJhdWRib3kuaCwgd2hpY2ggZmlyc3QgYXBwZWFyZWQgaW4gUmVkIEhhdCA3LjIg aW4gMjAwMy4KKyAgICAgKiBGcm9tIExld2lzIE1jQ2FydGh5OgorCisgICAgIEJhc2VkIG9uIGNv ZGUgaW5zcGVjdGlvbiwgQy1LZXJtaXQgYXBwZWFycyB0byBoYXZlIGFuIFNTTC1yZWxhdGVkCisg ICAgIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgYW5hbG9nb3VzIHRvIHRoYXQgaWRlbnRpZmllZCBh cyBDVkUtMjAwOS0zNzY3CisgICAgIChzZWUgZS5nLgorICAgICBbODFdaHR0cDovL2N2ZS5taXRy ZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA5LTM3NjcpLgorCisgICAgIEkn bSBhdHRhY2hpbmcgYSBwYXRjaCBmb3IgdGhpcyBpc3N1ZSByZWxhdGl2ZSB0byB0aGUgcmV2aXNp b24gb2YKKyAgICAgY2tfc3NsLmMgb2J0YWluZWQgZnJvbSBhIGNvcHkgb2YKKyAgICAgWzgyXWh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHAvdGVzdC90YXIveC56aXAgZG93bmxvYWRl ZCBvbgorICAgICAyMDEwLzA3LzMwLCB3aGljaCBJIGJlbGlldmUgaXMgdGhlIGxhdGVzdC4KKyAg ICAgV2hlbiB0aGlzIGZsYXcgd2FzIGZpcnN0IHdpZGVseSBwdWJsaWNpemVkIGF0IGxhc3QgeWVh cidzIEJsYWNrIEhhdAorICAgICBjb25mZXJlbmNlLCBpdCB3YXMgY2xhaW1lZCB0aGF0IHNvbWUg cHVibGljIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzCisgICAgIGhhZCBpbmRlZWQgaXNzdWVkIGNl cnRpZmljYXRlcyB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCB0aGlzCisgICAgIGNsYXNz IG9mIHZ1bG5lcmFiaWxpdHkuIEFzIGZhciBhcyBJIGtub3cgdGhleSBoYXZlIG5vdCByZXZlYWxl ZAorICAgICBzcGVjaWZpY2FsbHkgd2hpY2ggcHVibGljIENBKHMpIGhhZCBiZWVuIGZvdW5kIGlz c3Vpbmcgc3VjaAorICAgICBjZXJ0aWZpY2F0ZXMuIFNvbWUgcmVmZXJlbmNlczoKKyAgICAgICAg ICArIFs4M11odHRwOi8vd3d3Lm1zZWNsYWIuY29tLz9wPTE4MAorICAgICAgICAgICsgWzg0XWh0 dHA6Ly93d3cudGhlcmVnaXN0ZXIuY28udWsvMjAwOS8wNy8zMC91bml2ZXJzYWxfc3NsX2NlcnQK KyAgICAgICAgICAgIGlmaWNhdGUvCisKKyAgICAgKiBQZXRlciBFaWNoaG9ybiByZXBvcnRlZCB0 aGF0ICJSRU5BTUUgLi4veCAuIiBkaWRuJ3Qgd29yazsgZml4ZWQKKyAgICAgICBub3cuCisgICAg ICogSWYgb25seSBvbmUgZmlsZSBpcyBGT1BFTidkLCBGQ0xPU0UgZ2l2ZW4gd2l0aCBubyBhcmd1 bWVudHMgd291bGQKKyAgICAgICBjbG9zZSBpdDsgdGhpcyB3YXMgYSAiY29udmVuaWVuY2UgZmVh dHVyZSIgdGhhdCB0dXJuZWQgb3V0IHRvIGJlCisgICAgICAgZGFuZ2Vyb3VzLiBGb3Igc2FmZXR5 IEZDTE9TRSBoYXMgdG8gcmVxdWlyZSBhIHNwZWNpZmljIGNoYW5uZWwKKyAgICAgICBudW1iZXIg b3IgdGhlIHdvcmQgQUxMLgorICAgICAqIEFkZGVkIFxmc3RyY21wKHMxLHMyLGNhc2Usc3RhcnQs bGVuZ3RoKSwgd2hpY2ggaGFzIHRoZSBhZHZhbnRhZ2UKKyAgICAgICBvdmVyIElGIEVRVSxMR1Qs TExUIHRoYXQgY2FzZSBzZW5zaXRpdml0eSBjYW4gYmUgc3BlY2lmaWVkIGFzIGEKKyAgICAgICBm dW5jdGlvbiBhcmcsIGFuZCBhbHNvIHN1YnN0cmluZ3MgY2FuIGJlIHNwZWNpZmllZC4KKyAgICAg KiBOZXcgYnVpbHQtaW4gZnVuY3Rpb25zOgorCisgICAgICAgIFxmY3Z0Y3NldHMoc3RyaW5nLGNz MSxjczIpCisgICAgICAgICAgICAgICAgRnVuY3Rpb24gdG8gY29udmVydCBhIHN0cmluZyBmcm9t IG9uZSBjaGFyYWN0ZXIgc2V0IHRvCisgICAgICAgICAgICAgICAgYW5vdGhlci4KKworICAgICAg ICBcZmRlY29kZWhleChzdHJpbmdbLHByZWZpeF0pCisgICAgICAgICAgICAgICAgRnVuY3Rpb24g dG8gZGVjb2RlIGEgc3RyaW5nIGNvbnRhaW5pbmcgaGV4IGVzY2FwZXMuCisKKyAgICAgICAgXGZz dHJpbmd0eXBlKHN0cmluZykKKyAgICAgICAgICAgICAgICBGdW5jdGlvbiB0byB0ZWxsIHdoZXRo ZXIgYSBzdHJpbmcgaXMgNy1iaXQsIDgtYml0LCBvcgorICAgICAgICAgICAgICAgIFVURi04Lgor CisgICAgICAgRm9yIHRoZSBtb3RpdmF0aW9uIGZvciB0aGVzZSBmZWF0dXJlcyBhbmQgYW4gYXBw bGljYXRpb24gdGhhdCB1c2VzCisgICAgICAgdGhlbSB0byBhbmFseXplIHdlYiBsb2dzLCBzZWUg dGhlIFdlYmxvZyBzY3JpcHQgYmVsb3cuCisgICAgICoKKworICAgICAgICBMYXp5IElGIENvbmRp dGlvbnM6IE5vdyB5b3UgY2FuIGRvIHRoaXM6CisgICAgICAgICAgICAgICAgZGVmaW5lIGZvbyBz b21lIG51bWJlcgorICAgICAgICAgICAgICAgIGlmIGZvbyBjb21tYW5kCisKKyAgICAgICAgaW5z dGVhZCBvZiB0aGlzOgorICAgICAgICAgICAgICAgIGRlZmluZSBmb28gc29tZSBudW1iZXIKKyAg ICAgICAgICAgICAgICBpZiBcbShmb28pIGNvbW1hbmQKKworICAgICAgIE9mIGNvdXJzZSB0aGUg b2xkIHdheSBzdGlsbCB3b3JrcyB0b28uIEJ1dCB3YXRjaCBvdXQgYmVjYXVzZSBpZiB0aGUKKyAg ICAgICB2YXJpYWJsZSBuYW1lIGlzIHRoZSBzYW1lIGFzIGEgc3ltYm9saWMgSUYgY29uZGl0aW9u IChmb3IgZXhhbXBsZQorICAgICAgIENPVU5UKSwgaXQgd29uJ3QgZG8gd2hhdCB5b3UgZXhwZWN0 ZWQuIChJRiBDT1VOVCB3YXMgdXNlZCBmb3IgbG9vcAorICAgICAgIGNvbnRyb2wgaW4gZWFybHkg dmVyc2lvbnMgb2YgTVMtRE9TIEtlcm1pdCwgYmVmb3JlIGl0IGdvdCByZWFsIEZPUgorICAgICAg IGFuZCBXSElMRSBsb29wczsgaXQgd2FzIGFkZGVkIHRvIEMtS2VybWl0IGZvciBjb21wYXRpYmls aXR5LCBhbmQgaXQKKyAgICAgICBjYW4ndCBiZSByZW1vdmVkIGJlY2F1c2UgdGhhdCBjb3VsZCBi cmVhayBleGlzdGluZyBzY3JpcHRzKS4KKyAgICAgKiBFc2NhcGUgc2VxdWVuY2VzIGFyZSBub3cg c3RyaXBwZWQgZnJvbSB0ZXh0LW1vZGUgc2Vzc2lvbiBsb2dzIG5vdAorICAgICAgIG9ubHkgaW4g Q09OTkVDVCBzZXNzaW9ucyBidXQgYWxzbyBpbiB3aGF0ZXZlciBpcyBsb2dnZWQgYnkgdGhlCisg ICAgICAgSU5QVVQgY29tbWFuZDsgZGVzY3JpYmVkIGluIHRoZSBbODVdbmV4dCBzZWN0aW9uLgor ICAgICAqIE5ldyBjb21tYW5kcyBmb3Igc2VsZWN0aXZlbHkgaXNzdWluZyBwcm9ncmVzcyBvciBk ZWJ1Z2dpbmcgbWVzc2FnZXMKKyAgICAgICBmcm9tIHNjcmlwdHMsIGFsc28gZGVzY3JpYmVkIGlu IHRoZSBuZXh0IHNlY3Rpb24uCisgICAgICogRml4IGZyb20gWzg2XUpvaG4gRHVubGFwIHRvIHBy ZXZlbnQgdGhlIGZpeGVkIHBhY2tldC10aW1lb3V0CisgICAgICAgaW50ZXJ2YWwgZnJvbSBnb2lu ZyB0byBhbiB1bmV4cGVjdGVkIHZhbHVlLgorICAgICAqIEFscGhhLjA0IGZpeGVzIGEgcHJvYmxl bSB3aXRoIEZUUCBjb25uZWN0aW9ucyBtYWRlIGZyb20gNjQtYml0IFVuaXgKKyAgICAgICBwbGF0 Zm9ybXMuIEFsbCB0aGUgb3RoZXIgY2hhbmdlcyBpbiB0aGlzIHNlY3Rpb24gd2VyZSB0byBBbHBo YS4wMy4KKyAgICAgKiBSZWxhdW5jaGluZyBhIGNsb3NlZCBTU0ggY29ubmVjdGlvbiB3aXRoIHRo ZSBDT05ORUNUIGNvbW1hbmQgaXMgbm93CisgICAgICAgcG9zc2libGUsIGFzIGl0IGFsd2F5cyBo YXMgYmVlbiB3aXRoIFRlbG5ldCBhbmQgb3RoZXIgY29ubmVjdGlvbgorICAgICAgIHR5cGVzOyBz dWdnZXN0ZWQgYnkgUGV0ZXIgRWljaGhvcm4gKG5lZWRzIHRlc3RpbmcpLgorICAgICAqIEEgc3lt Ym9sIGNvbmZsaWN0IGZpeGVkIHRoYXQgcHJldmVudGVkIHN1Y2Nlc3NmdWwgYnVpbGQgb24KKyAg ICAgICBbODddRnJlZUJTRCA4LjAuCisgICAgICogRml4ZXMgZnJvbSBDaHJpc3RpYW4gQ29ydGkg Zm9yIGJ1aWxkaW5nIG9uIFN1bk9TIDQuMS4KKyAgICAgKiBOZXcgYWl4ZyB0YXJnZXQgZm9yIGJ1 aWxkaW5nIG9uIEFJWCB3aXRoIGdjYy4KKyAgICAgKiBOZXcgYWl4K2libXNzbCB0YXJnZXQuIFRo aXMgaXMgbmljZSBiZWNhdXNlIHRoZSBJQk0tc3VwcGxpZWQgU1NMCisgICAgICAgbGlicmFyaWVz IGFuZCBoZWFkZXIgZmlsZXMgYXJlIGluIGEga25vd24gbG9jYXRpb247IG5vIG5lZWQgdG8KKyAg ICAgICBbODhdc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBnaXZpbmcgdGhlaXIgbG9jYXRpb25z LgorICAgICAqICJMYXJnZSBGaWxlIFN1cHBvcnQiIGlzIG5vdyBpbmNsdWRlZCBieSBkZWZhdWx0 IG9uIEFscGhhIGFuZCBJQTY0CisgICAgICAgaGFyZHdhcmUgb24gVk1TIDcuMyBhbmQgbGF0ZXIs IGFuZCBpdCBzaG91bGQgd29yayBtdWNoIGJldHRlciB0aGFuCisgICAgICAgYmVmb3JlLgorICAg ICAqIEtlcm1pdCdzIGludGVybmFsIEZUUCBjbGllbnQgaXMgbm93IGluY2x1ZGVkIGJ5IGRlZmF1 bHQgaW4gYW55CisgICAgICAgYnVpbGQgdGhhdCBhbHNvIGluY2x1ZGVzIFRDUC9JUCBuZXR3b3Jr aW5nLiBBdCBwcmVzZW50LCB0aGUgRlRQCisgICAgICAgY2xpZW50IHNlZW1zIHRvIHdvcmsgd2Vs bCBmb3IgYmluYXJ5LW1vZGUgdHJhbnNmZXJzOyB0ZXh0IChBU0NJSSkKKyAgICAgICBtb2RlIHRy YW5zZmVycyBzdGlsbCBuZWVkIHNvbWUgd29yay4gSW4gYnVpbGRzIHRoYXQgYWxzbyBpbmNsdWRl CisgICAgICAgU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTCkgc2VjdXJpdHkgKG5leHQgaXRlbSkg dGhlIEZUUCBjbGllbnQKKyAgICAgICBzaG91bGQgYmUgYWJsZSB0byBtYWtlIHNlY3VyZWx5IGF1 dGhlbnRpY2F0ZWQgYW5kIGVuY3J5cHRlZAorICAgICAgIGNvbm5lY3Rpb25zLgorICAgICAqIElu IG5ldHdvcmsgYnVpbGRzIHRoYXQgcmVxdWVzdCBPcGVuU1NMIHN1cHBvcnQsIGUuZy46CisKKyAg ICAgJCBAY2t2a2VyICAiIiAgIiIgICJDS19TU0wiCisgICAgICAgdGhlIE9wZW5TU0wgdmVyc2lv biBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5IGFuZCB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICBj b21waWxlLXRpbWUgb3B0aW9ucyBhcmUgZW1pdHRlZCAoc3VjaCBhcworICAgICAgIE9QRU5TU0xf RElTQUJMRV9PTERfREVTX1NVUFBPUlQpLgorICAgICAqIFByZWxpbWluYXJ5IC8gbGltaXRlZCBz dXBwb3J0IGZvciB0aGUgT0RTLTUgZmlsZSBzeXN0ZW0gb24gVk1TIDcuMgorICAgICAgIGFuZCBs YXRlciwgQWxwaGEgYW5kIEl0YW5pdW0gb25seSAobmVlZHMgdGVzdGluZyk6IEZpbGVuYW1lcyBj YW4gYmUKKyAgICAgICBtaXhlZCBjYXNlIGFuZCBjYW4gYmUgbG9uZ2VyLgorICAgICAqIFN1cHBv cnQgZm9yIG9sZGVyIGFuZCBvbGRlciBWTVMgdmVyc2lvbnMuCisgICAgICogSW4gdGhlIFZNUyBi dWlsZCBwcm9jZWR1cmUsIENLVktFUi5DT00sIHRoZSAiaSIgb3B0aW9uIGluIFAxIG5vdworICAg ICAgIG1lYW5zIGRvbid0IGluY2x1ZGUgdGhlIGludGVybmFsIEZUUCBjbGllbnQsIGFuZCB0aGUg ImYiIG9wdGlvbgorICAgICAgIG1lYW5zIGRvIG5vdCBpbmNsdWRlICJMYXJnZSBGaWxlIiBzdXBw b3J0LiBMYXJnZSBGaWxlIHN1cHBvcnQgaW4KKyAgICAgICBWTVMgcmVhbGx5IG9ubHkgYXBwbGll cyB0byB0aGUgZmlsZS10cmFuc2ZlciBkaXNwbGF5IGFuZAorICAgICAgIHN0YXRpc3RpY3MsIHdo aWNoIHdvdWxkIGdvIG91dCBvZiB3aGFjayBhcyBzb29uIGFzIHRoZSBieXRlIGNvdW50CisgICAg ICAgb3ZlcmZsb3dlZCAzMSBiaXRzIGJlY2F1c2UgdGhpcyBpcyBDLUtlcm1pdCwgYnVpbHQgd2l0 aCB0aGUgQworICAgICAgIGNvbXBpbGVyIGFuZCB0aGUgQyBsaWJyYXJ5IChydW50aW1lIHN5c3Rl bSksIHdoaWNoIGRpZCBub3Qgc3VwcG9ydAorICAgICAgIGxvbmcgaW50ZWdlcnMgdW50aWwgVk1T IDcuMy4KKyAgICAgKiBUaGUgWzg5XUxJU1AgT3BlcmF0b3IgUk9VTkQgbm93IHRha2VzIGFuIG9w dGlvbmFsIHNlY29uZCBhcmd1bWVudAorICAgICAgIHRoYXQgc3BlY2lmaWVzIHRoZSBudW1iZXIg b2YgcGxhY2VzIHRvIHJvdW5kIHRvLCBlLmcuCisgICAgICAgKFJPVU5EIGRvbGxhcnMgMikgcm91 bmRzIGRvbGxhcnMgdG8gMiBkZWNpbWFsIHBsYWNlcy4KKyAgICAgKiBJbXByb3ZlZCBwYXR0ZXJu IG1hdGNoaW5nIGluIG1hbnkgY29tbWFuZHMgZm9yIGJvdGggc3RyaW5ncyBhbmQKKyAgICAgICBm aWxlbmFtZXMuCisgICAgICogVmFyaW91cyBtaW5vciBuZXcgZmVhdHVyZXMsIHBsdXMgbnVtZXJv dXMgYnVnIGZpeGVzIGFuZCBzcGVlZHVwcy4KKworSW5jb21wYXRpYmlsaXRpZXMKKworICAgQSB0 b3AgcHJpb3JpdHkgZm9yIG5ldyBLZXJtaXQgc29mdHdhcmUgcmVsZWFzZXMgaGFzIGFsd2F5cyBi ZWVuCisgICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gQSBzY3JpcHQgd3JpdHRlbiBmb3IgYSBw cmV2aW91cyBLZXJtaXQgcmVsZWFzZQorICAgc2hvdWxkIHJ1biB0aGUgc2FtZSB3YXkgaW4gdGhl IG5ldyByZWxlYXNlLgorCisgICBUaGVyZSdzIG9uZSBleGNlcHRpb24gdGhpcyB0aW1lLiBUaGUg WzkwXVxmc3BsaXQoKSBmdW5jdGlvbiBpcworICAgaW5jcmVkaWJseSBoYW5keSwgaXQgY2FuIGRv IGFsbW9zdCBhbnl0aGluZywgdXAgdG8gYW5kIGluY2x1ZGluZworICAgcGFyc2luZyBhIExJU1Ag cHJvZ3JhbSAodGhlIHVuZGVybHlpbmcgY29kZSBpcyB0aGUgYmFzaXMgb2YgdGhlCisgICBbOTFd Uy1FeHByZXNzaW9uIGludGVycHJldGVyKS4gQnV0IGRpZCB5b3UgZXZlciB0cnkgdG8gdXNlIGl0 IHRvIHBhcnNlCisgICAoc2F5KSBhIFRhYi1TZXBhcmF0ZWQtTGlzdCAoVFNWIGZpbGUpIG9yIENv bW1hLVNlcGFyYXRlZC1MaXN0IChDU1YpPyBJdAorICAgd29ya3MgYXMgZXhwZWN0ZWQgYXMgbG9u ZyBhcyB0aGUgZGF0YSBjb250YWlucyBvbmx5IDctYml0IGNoYXJhY3RlcnMuCisgICBCdXQgaWYg eW91ciBkYXRhIGNvbnRhaW5zIChzYXkpIFNwYW5pc2ggb3IgR2VybWFuIG9yIFJ1c3NpYW4gdGV4 dAorICAgd3JpdHRlbiBpbiBhbiA4LWJpdCBjaGFyYWN0ZXIgc2V0IHN1Y2ggYXMgSVNPIDg4NTkt MSwgZXZlcnkgOC1iaXQKKyAgIGNoYXJhY3RlciAoYW55IHZhbHVlIDEyOC0yNTUpIGlzIHRyZWF0 ZWQgYXMgYSBicmVhayBjaGFyYWN0ZXIuIFRoaXMgaXMKKyAgIGZpeGVkIGluIEMtS2VybWl0IDku MCBieSB0cmVhdGluZyBhbGwgOC1iaXQgYnl0ZXMgYXMgImluY2x1ZGUiCisgICBjaGFyYWN0ZXJz IHJhdGhlciB0aGFuIGJyZWFrIGNoYXJhY3RlcnMsIGEgdG90YWwgcmV2ZXJzYWwgb2YgcGFzdAor ICAgYmVoYXZpb3IuIEkgZG9uJ3QgdGhpbmsgaXQgd2lsbCBhZmZlY3QgYW55b25lIHRob3VnaCwg YmVjYXVzZSBpZiB0aGlzCisgICBoYWQgaGFwcGVuZWQgdG8gYW55b25lLCBJIHdvdWxkIGhhdmUg aGVhcmQgYWJvdXQgaXQhCisKKyAgIFNpbmNlIG1vc3Qgc3RhbmRhcmQgOC1iaXQgY2hhcmFjdGVy IHNldHMgaGF2ZSBjb250cm9sIGNoYXJhY3RlcnMgaW4KKyAgIHBvc2l0aW9ucyAxMjgtMTYwLCBp dCBtaWdodCBoYXZlIG1hZGUgc2Vuc2UgdG8ga2VlcCAxMjgtMTYwIGluIHRoZQorICAgYnJlYWsg c2V0LCBidXQgd2l0aCB0aGUgcHJvbGlmZXJhdGlvbiBvZiBNaWNyb3NvZnQgV2luZG93cyBjb2Rl IHBhZ2VzLAorICAgdGhlcmUgaXMgbm8gdGVsbGluZyB3aGljaCA4LWJpdCBjaGFyYWN0ZXIgaXMg bGlrZWx5IHRvIGJlIHNvbWUga2luZCBvZgorICAgdGV4dCwgZS5nLiAic21hcnQgcXVvdGVzIiBv ciBFYXN0IEV1cm9wZWFuIG9yIFR1cmtpc2ggYWNjZW50ZWQgbGV0dGVycy4KKworV2hhdCdzIE5v dCBJbiBDLUtlcm1pdCA5LjAKKworICAgU29tZSBsYXJnZSBwcm9qZWN0cyB0aGF0IHdlcmUgY29u dGVtcGxhdGVkIGhhdmUgbm90IGJlZW4gZG9uZSwKKyAgIGluY2x1ZGluZzoKKyAgICAgKiBJUHY2 LiBIb25lc3RseSwgdGhlcmUgaGFzIGJlZW4gemVybyBkZW1hbmQgZm9yIHRoaXMsIGFuZCBpdCB3 b3VsZAorICAgICAgIGJlIGEgbG90IG9mIHdvcmsgYW5kIGRpc3J1cHRpb24gdG8gdGhlIGNvZGUg YmFzZS4gVm9sdW50ZWVycworICAgICAgIHdlbGNvbWUsIEkgZ3Vlc3MuIEl0IGNvdWxkIGJlIGEg Q1MgcHJvamVjdC4KKyAgICAgKiBBIGRhdGFiYXNlIGludGVyZmFjZSAtIE15U1FMIG9yIE9EQkMu IEZvciB0aGlzIG9uZSwgdGhlcmUgaXMgc29tZQorICAgICAgIGRlbWFuZCBidXQgSSBoYXZlbid0 IGhhZCBhIGNoYW5jZSB0byBldmVuIGxvb2sgaW50byBpdC4KKyAgICAgKiBUaGVyZSdzIGEgbG9v bWluZyBpc3N1ZSB3aXRoIERFUyBlbmNyeXB0aW9uOyBtYWpvciB2ZW5kb3JzIGFyZQorICAgICAg IHJlbW92aW5nIGl0IGZyb20gdGhlaXIgcGxhdGZvcm1zLCBzdGFydGluZyB3aXRoIEFwcGxlIGlu IE1hYyBPUyBYCisgICAgICAgMTAuNiwgd2l0aCBNaWNyb3NvZnQgdG8gZm9sbG93IHN1aXQuIEEg c2VjdXJlIHZlcnNpb24gb2YgS2VybWl0IGNhbgorICAgICAgIGJlIGJ1aWx0IHdpdGhvdXQgREVT LCBidXQgaW4gbGltaXRlZCB0ZXN0aW5nIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbnMKKyAgICAgICB3 ZXJlIHNwb3R0eSAoZS5nLiB3aXRoIEtlcmJlcm9zIDUpLgorICAgICAqIENsZWFuaW5nIHVwIHRo ZSBVbml4IG1ha2VmaWxlLiBJdCBoYXMgMjUgeWVhcnMnIHdvcnRoIG9mIHRhcmdldHMgaW4KKyAg ICAgICBpdC4gSXQgaXMgdmVyeSBsaWtlbHkgc2FmZSB0byByZW1vdmUgbW9zdCBvZiB0aGVtLCBz aW5jZSAoYSkgbW9zdAorICAgICAgIG9sZCBwbGF0Zm9ybXMgaGF2ZSBnb25lIGF3YXkgYnkgbm93 LCBvciBoYXZlIGJlZW4gdXBncmFkZWQsIGR1ZSB0bworICAgICAgIGhhY2tpbmcgdnVsbmVyYWJp bGl0aWVzOyAoYikgdGhlIG1hcmtldCBoYXMgY29uc29saWRhdGVkCisgICAgICAgY29uc2lkZXJh Ymx5OyBhbmQgKGMpIG1vc3Qgb2YgdGhlIG5ldyBmZWF0dXJlcyBvZiBDLUtlcm1pdCA5LjAsCisg ICAgICAgc3VjaCBhcyBsYXJnZSBmaWxlcywgd29uJ3QgYmUgb2YgYW55IHVzZSBvbiBvbGRlciBw bGF0Zm9ybXMgYW5kCisgICAgICAgcHJldmlvdXMgQy1LZXJtaXQgdmVyc2lvbnMgd2lsbCByZW1h aW4gYXZhaWxhYmxlLgorICAgICAqIFBhY2thZ2VzLiBFdmVyeWJvZHkgd2FudHMgYW4gaW5zdGFs bCBwYWNrYWdlIGN1c3RvbSBtYWRlIGZvciB0aGVpcgorICAgICAgIG93biBjb21wdXRlciwgTGlu dXggUlBNcyBiZWluZyB0aGUgcHJpbWUgZXhhbXBsZSBidXQgZmFyIGZyb20gdGhlCisgICAgICAg b25seSBvbmUuIFRoZXNlIHdpbGwgY29tZSwgSSBzdXBwb3NlIChlc3BlY2lhbGx5IHdpdGggc29t ZSBMaW51eAorICAgICAgIHNpdGVzIGhhdmluZyBhIHBvbGljeSBhZ2FpbnN0IGluc3RhbGxpbmcg YW55IGFwcGxpY2F0aW9uIHRoYXQgZG9lcworICAgICAgIG5vdCBjb21lIGFzIGFuIFJQTSkuIElu IHRoZSBtZWFudGltZSwgaGVyZSdzIGEgcGFnZSB0aGF0IGRlc2NyaWJlcworICAgICAgIHNvbWUg S2VybWl0LXNwZWNpZmljIGlzc3VlcyBpbiBwYWNrYWdlIGNvbnN0cnVjdGlvbjoKKyAgICAgICBb OTJdY2twYWNrYWdlcy5odG1sLgorCitBbmQgYSBMb29zZSBFbmQuLi4KK1VzaW5nIEV4dGVybmFs IEZpbGUtVHJhbnNmZXIgUHJvdG9jb2xzIG9uIFNlY3VyZSBDb25uZWN0aW9ucworCisgICBBZnRl ciBDLUtlcm1pdCA4LjAuMjEyIERldi4yNyAoMjAwNi8xMi8yMiksIEkgc3BlbnQgYSBiaWcgY2h1 bmsgb2YgdGltZQorICAgdHJ5aW5nIHRvIHNvbHZlIGEgcGFydGljdWxhciBwcm9ibGVtIHRoYXQg c29tZSBvZiB5b3UgaGF2ZSBjb21wbGFpbmVkCisgICBhYm91dCBhbmQgb3RoZXJzIG1pZ2h0IGJl IGZhbWlsaWFyIHdpdGg6IElmIHlvdSB1c2UgQy1LZXJtaXQgdG8gbWFrZSBhCisgICBzZWN1cmUg VGVsbmV0IGNvbm5lY3Rpb24gdG8gYW5vdGhlciBob3N0IChlLmcuIHdpdGggVGVsbmV0IFNTTC9U TFMsCisgICBLZXJiZXJvcywgb3IgU1JQKSBhbmQgdGhlbiBhdHRlbXB0IHRvIHRyYW5zZmVyIGEg ZmlsZSB1c2luZyBhbiBleHRlcm5hbAorICAgcHJvdG9jb2wgc3VjaCBhcyBabW9kZW0sIGl0IGRv ZXNuJ3Qgd29yay4KKworICAgVGhhdCdzIGJlY2F1c2UgYXMgY29kZWQgKHRocm91Z2ggOC4wLjIx MSksIEMtS2VybWl0IHNpbXBseSBzdGFydHMgdGhlCisgICBleHRlcm5hbCBwcm90b2NvbCBpbiBh IGZvcmsgd2l0aCBpdHMgc3RhbmRhcmQgaS9vIHJlZGlyZWN0ZWQgdG8gdGhlCisgICBjb25uZWN0 aW9uLiBUaGlzIGNvbXBsZXRlbHkgYnlwYXNzZXMgdGhlIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRp b24gdGhhdAorICAgaXMgZG9uZSBieSBDLUtlcm1pdCBpdHNlbGYsIGFuZCBvZiBjb3Vyc2UgaXQg ZG9lc24ndCB3b3JrLiBUaGUgc2FtZQorICAgdGhpbmcgb2NjdXJzIGlmIHlvdSB1c2UgdGhlIFJF RElSRUNUIGNvbW1hbmQuIFRoZSByb3V0aW5lIHRoYXQgaGFuZGxlcworICAgdGhpcyBpcyB0dHJ1 bmNtZCgpIGluIGNrdXRpby5jLgorCisgICBJbiBvcmRlciB0byBhbGxvdyAoc2F5KSBabW9kZW0g dHJhbnNmZXJzIG9uIHNlY3VyZSBjb25uZWN0aW9ucywgaXQgaXMKKyAgIG5lY2Vzc2FyeSBmb3Ig Qy1LZXJtaXQgdG8gaW50ZXJwb3NlIGl0c2VsZiBiZXR3ZWVuIHRoZSBleHRlcm5hbCBabW9kZW0K KyAgIHByb2dyYW0gYW5kIHRoZSBjb25uZWN0aW9uLCBkZWNyeXB0aW5nIHRoZSBpbmNvbWluZyBz dHJlYW0gYmVmb3JlCisgICBmZWVkaW5nIGl0IHRvIFptb2RlbSBhbmQgZW5jcnlwdGluZyBabW9k ZW0ncyBvdXRwdXQgYmVmb3JlIHNlbmRpbmcgb3V0CisgICB0aGUgY29ubmVjdGlvbi4KKworICAg SW4gcHJpbmNpcGFsLCB0aGlzIGlzIHNpbXBsZSBlbm91Z2guIFdlIG9wZW4gYSBwc2V1ZG90ZXJt aW5hbCBwYWlyCisgICAoIm1hc3RlciIgYW5kICJzbGF2ZSIpIGZvciBabW9kZW0ncyBpL28gYW5k IHdlIGNyZWF0ZSBhIGZvcmsgYW5kIHN0YXJ0CisgICBabW9kZW0gaW4gaXQ7IHdlIHJlYWQgZnJv bSB0aGUgZm9yayBwdHkncyBzdGFuZGFyZCBvdXRwdXQsIGVuY3J5cHQsIGFuZAorICAgc2VuZCB0 byB0aGUgbmV0OyB3ZSByZWFkIGZyb20gdGhlIG5ldCwgZGVjcnlwdCwgYW5kIHdyaXRlIHRvIHRo ZSBmb3JrCisgICBwdHkncyBzdGFuZGFyZCBpbnB1dC4KKworICAgSW4gcHJhY3RpY2UsIGl0J3Mg bm90IHNvIHNpbXBsZS4gRmlyc3Qgb2YgYWxsLCBwc2V1ZG90ZXJtaW5hbHMgKHB0eXMpCisgICBk b24ndCBzZWVtIHRvIGludGVyZmFjZSBjb3JyZWN0bHkgd2l0aCBjZXJ0YWluIGNydWNpYWwgQVBJ cywgYXQgbGVhc3QKKyAgIG5vdCBpbiB0aGUgT1MncyBJIGhhdmUgdHJpZWQgKE1hYyBPUyBYLCBM aW51eCwgTmV0QlNELCBldGMpLCBzdWNoIGFzCisgICBzZWxlY3QoKS4gQW5kIGkvbyB3aXRoIHRo ZSBwdHkgb2Z0ZW4gLSBwZXJoYXBzIGFsd2F5cyAtIGZhaWxzIHRvCisgICBpbmRpY2F0ZSBlcnJv cnMgd2hlbiB0aGV5IG9jY3VyOyBmb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9yayBoYXMgZXhpdGVk LgorCisgICBCdXQsIGV2ZW4gYWZ0ZXIgY29kaW5nIGFyb3VuZCB0aGUgYXBwYXJlbnQgdXNlbGVz c25lc3Mgb2Ygc2VsZWN0KCkgZm9yCisgICBtdWx0aXBsZXhpbmcgcHR5IGFuZCBuZXQsIGFuZCB1 c2luZyB2YXJpb3VzIHRyaWNrcyB0byBkZXRlY3Qgd2hlbiB0aGUKKyAgIGV4dGVybmFsIHByb3Rv Y29sIGV4aXRzIGFuZCB3aGF0IGl0cyBleGl0IHN0YXR1cyBpcywgSSdtIHN0aWxsIGxlZnQKKyAg IHdpdGggYSBzaG93LXN0b3BwaW5nIHByb2JsZW06IEkganVzdCBzaW1wbHkgY2FuIG5vdCBkb3du bG9hZCAocmVjZWl2ZSkKKyAgIGEgZmlsZSB3aXRoIFptb2RlbSwgd2hpY2ggaXMgdGhlIG1haW4g dGhpbmcgdGhhdCBwZW9wbGUgd291bGQgcHJvYmFibHkKKyAgIHdhbnQgdG8gZG8uIEkgY2FuIHNl bmQgZmlsZXMganVzdCBmaW5lLCBidXQgbm90IHJlY2VpdmUuIFRoZSBpbmNvbWluZworICAgc3Ry ZWFtIGlzIGRlbGl2ZXJlZCB0byBabW9kZW0gKHRvIHRoZSBwdHkgc2xhdmUpIGJ1dCB1cG9uIGFy cml2YWwgYXQKKyAgIHRoZSBabW9kZW0gcHJvY2VzcyBpdHNlbGYsIHBpZWNlcyBhcmUgYWx3YXlz IG1pc3NpbmcgYW5kL29yIGNvcnJ1cHQuCisgICBZZXQgSSBjYW4gcmVjZWl2ZSBmaWxlcyBqdXN0 IGZpbmUgaWYgSSB1c2UgS2VybWl0IGl0c2VsZiAoQy1LZXJtaXQgb3IKKyAgIEctS2VybWl0KSBh cyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wsIHJhdGhlciB0aGFuIFptb2RlbS4KKworICAgSSBjYW4g dGhpbmsgb2YgdHdvIHJlYXNvbnMgd2h5IHRoaXMgbWlnaHQgYmUgdGhlIGNhc2U6CisKKyAgICAx LiBabW9kZW0gc2VuZHMgYWxsIDgtYml0IGJ5dGVzIGFuZCBjb250cm9sIGNvZGVzIGluIHRoZSBj bGVhciwgYW5kCisgICAgICAgbWF5YmUgdGhlIHB0eSBpcyBjaG9raW5nIG9uIHRoZW0gYmVjYXVz ZSBpdCB0aGlua3MgaXQgaXMgYSByZWFsCisgICAgICAgdGVybWluYWwuCisKKyAgIEJ1dCBabW9k ZW0gcHV0cyBpdHMgY29udHJvbGxpbmcgdGVybWluYWwgaW50byByYXcgbW9kZS4gQW5kIEMtS2Vy bWl0CisgICBwdXRzIHRoZSBwdHkgaW50byByYXcgbW9kZSB0b28sIGp1c3QgZm9yIGdvb2QgbWVh c3VyZS4gSWYgYW55IDB4RkYKKyAgIGNvZGVzIGFyZSBpbiB0aGUgWm1vZGVtIGRhdGEgc3RyZWFt LCBhbmQgaXQncyBhIFRlbG5ldCBzZXNzaW9uLCBLZXJtaXQKKyAgIGRvZXMgYW55IG5lZWRlZCBi eXRlIHN0dWZmaW5nL3Vuc3R1ZmZpbmcgYXV0b21hdGljYWxseS4gQW55d2F5LCBpZiBJCisgICB0 ZWxsIFptb2RlbSB0byBwcmVmaXggZXZlcnl0aGluZywgaXQgbWFrZXMgbm8gZGlmZmVyZW5jZS4K KworICAgIDIuIFptb2RlbSBpcyBhIHN0cmVhbWluZyBwcm90b2NvbCBhbmQgcGVyaGFwcyB0aGUg cHR5IGRyaXZlciBjYW4ndAorICAgICAgIGtlZXAgdXAgd2l0aCBhIHN1c3RhaW5lZCBzdHJlYW0g b2YgaW5wdXQgYXQgbmV0d29yayBzcGVlZHMuIFdoYXQKKyAgICAgICB3b3VsZCBiZSB0aGUgbWV0 aG9kIG9mIGZsb3cgY29udHJvbD8KKworICAgSSBjYW4gdmFyeSB0aGUgc2l6ZSBvZiB0aGUgaS9v IGJ1ZmZlcnMgdXNlZCBmb3Igd3JpdGluZyB0byB0aGUgcHR5LCBhbmQKKyAgIGdldCBkaWZmZXJl bnQgZWZmZWN0cywgYnV0IEkgYW0gbm90IGFibGUgdG8gZ2V0IGEgY2xlYW4gZG93bmxvYWQsIG5v CisgICBtYXR0ZXIgd2hhdCBidWZmZXIgc2l6ZSBJIHVzZS4gd3JpdGUoKSdpbmcgdG8gdGhlIHB0 eSBkb2VzIG5vdCByZXR1cm4KKyAgIGFuIGVycm9yLCBhbmQgSSBjYW4ndCBzZWUgdGhlIGVycm9y cyBiZWNhdXNlIHRoZXkgaGFwcGVuIG9uIHRoZSBtYXN0ZXIKKyAgIHNpZGUuIEl0J3MgYXMgaWYg dGhlIHBhdGggYmV0d2VlbiB0aGUgcHR5IHNsYXZlIGFuZCBtYXN0ZXIgbGFja3MgZmxvdworICAg Y29udHJvbDsgSSBkZWxpdmVyIGEgdmFsaWQgZGF0YSBzdHJlYW0gdG8gdGhlIHB0eSBzbGF2ZSBh bmQgdGhlIG1hc3RlcgorICAgZ2V0cyBiaXRzIGFuZCBwaWVjZXMuIFRoaXMgaW1wcmVzc2lvbiBp cyBib2xzdGVyZWQgc29tZXdoYXQgYnkgdGhlCisgICAiWzkzXW1hbiA3IHB0eSIgcGFnZSBpbiBI UC1VWCwgd2hpY2ggdGFsa3MgYWJvdXQgc29tZSBzcGVjaWFsIG1vZGVzIGZvcgorICAgcHR5cyB0 aGF0IHR1cm4gb2ZmIGFsbCB0ZXJtaW8gcHJvY2Vzc2luZyBhbmQgZ3VhcmFudGVlIGEKKyAgIGZs b3ctY29udHJvbGxlZCByZWxpYWJsZSBzdHJlYW0gb2YgYnl0ZXMgaW4gYm90aCBkaXJlY3Rpb25z IC0gYSBmZWF0dXJlCisgICB0aGF0IHNlZW1zIHRvIGJlIHNwZWNpZmljIHRvIEhQLVVYLCBhbmQg ZXhhY3RseSB0aGUgb25lIHdlIG5lZWQKKyAgIGV2ZXJ5d2hlcmUuCisKKyAgIFdlbGwsIGluIFBh c3MgT25lIEkgdXNlZCBDLUtlcm1pdCdzIGV4aXN0aW5nIHB0eSByb3V0aW5lcyBmcm9tCisgICBj a3VwdHkuW2NoXSwgd2hpY2ggYXJlIHdlbGwtcHJvdmVuIGluIHRlcm1zIG9mIHBvcnRhYmlsaXR5 IGFuZCBvZgorICAgYWN0dWFsbHkgd29ya2luZy4gVGhleSBhcmUgY3VycmVudGx5IHVzZWQgYnkg U0VUIEhPU1QgL1BUWSBmb3IgbWFraW5nCisgICB0ZXJtaW5hbCBjb25uZWN0aW9ucyB0byBleHRl cm5hbCBwcm9jZXNzZXMuIEJ1dCB0aGVzZSByb3V0aW5lcyBhcmUKKyAgIHdyaXR0ZW4gb24gdGhl IGFzc3VtcHRpb24gdGhhdCB0aGUgcHR5IGlzIHRvIGJlIGFjY2Vzc2VkIGludGVyYWN0aXZlbHks CisgICBhbmQgbWF5YmUgdGhleSBhcmUgc2V0dGluZyB0aGUgZm9yay9wdHkgYXJyYW5nZW1lbnQg dXAgaW4gc3VjaCBhIHdheQorICAgdGhhdCB0aGF0J3Mgbm90IHN1aXRhYmxlIGZvciBmaWxlIHRy YW5zZmVyLiBUaGUgUGFzcyBPbmUgcm91dGluZSBpcworICAgY2FsbGVkIHh0dHB0eWNtZCgpIGlu IGNrdXRpby5jLgorCisgICBTbyBpbiBQYXNzIFR3byBJIG1hZGUgYSBzZWNvbmQgY29weSBvZiB0 aGUgcm91dGluZSwgeXR0cHR5Y21kKCksIHRoYXQKKyAgIG1hbmFnZXMgdGhlIHB0eSBhbmQgZm9y ayBpdHNlbGYsIHNvIGFsbCB0aGUgY29kZSBpcyBpbiBvbmUgcGxhY2UgYW5kCisgICBpdCdzIHNp bXBsZSBhbmQgdW5kZXJzdGFuZGFibGUuIEJ1dCBpdCBzdGlsbCBkb2Vzbid0IHdvcmsgZm9yIFpt b2RlbQorICAgZG93bmxvYWRzLiBJbiB0aGlzIHJvdXRpbmUsIEkgdXNlIG9wZW5wdHkoKSB0byBn ZXQgdGhlIHB0eSBwYWlyLCB3aGljaAorICAgaXMgbm90IHBvcnRhYmxlLCBzbyBJIGNhbiBoYXZl IGFjY2VzcyB0byBib3RoIHRoZSBtYXN0ZXIgYW5kIHNsYXZlIHB0eQorICAgZmlsZSBkZXNjcmlw dG9ycy4gVGhpcyB2ZXJzaW9uIGNhbiBiZSB1c2VkIG9ubHkgYSBwbGF0Zm9ybXMgdGhhdCBoYXZl CisgICBvcGVucHR5KCk6IExpbnV4LCBNYWMgT1MgWCwgTmV0QlNELCBldGMuCisKKyAgIEluIFBh c3MgVGhyZWUsIHp0dHB0eWNtZCgpLCBJIHRyaWVkIHVzaW5nIHBpcGVzIGluc3RlYWQgb2YgcHR5 cywgaW4KKyAgIGNhc2UgcHR5cyBhcmUgc2ltcGx5IG5vdCB1cCB0byB0aGlzIHRhc2sgKGJ1dCB0 aGF0IGNhbid0IGJlIHRydWUKKyAgIGJlY2F1c2UgaWYgSSBtYWtlIGEgVGVsbmV0IG9yIFNTSCBj b25uZWN0aW9uIGludG8gYSBob3N0LCBJIGNhbiBzZW5kCisgICBmaWxlcyB0byBpdCB3aXRoIFpt b2RlbSwgYW5kIHRoZSByZW1vdGUgWm1vZGVtIHJlY2VpdmVyIGlzLCBpbmRlZWQsCisgICBydW5u aW5nIG9uIGEgcHR5KS4gQnV0IHBpcGVzIGRpZG4ndCB3b3JrIGVpdGhlci4KKworICAgSW4gUGFz cyBGb3VyLCBJIGV4dHJhY3RlZCB0aGUgcmVsZXZhbnQgcm91dGluZXMgaW50byBhIHN0YW5kYWxv bmUKKyAgIHByb2dyYW0gYmFzZWQgb24geXR0cHR5Y21kKCkgKHRoZSBvcGVucHR5KCkgdmVyc2lv biwgZm9yIHNpbXBsaWNpdHkpLAorICAgd2hpY2ggSSB0ZXN0ZWQgb24gTWFjIE9TIFgsIHRoZSBp ZGVhIGJlaW5nIHRvIHJ1bGUgb3V0IGFueQorICAgImVudmlyb25tZW50YWwiIGVmZmVjdHMgb2Yg cnVubmluZyBpbnNpZGUgdGhlIEMtS2VybWl0IHByb2Nlc3MuIFRoZXJlCisgICB3YXMgbm8gZGlm ZmVyZW5jZSAtLSBLZXJtaXQgdHJhbnNmZXJzICh3aXRoIEMtS2VybWl0IGl0c2VsZiBhcyB0aGUK KyAgIGV4dGVybmFsIHByb3RvY29sKSB3b3JrZWQ7IFptb2RlbSB0cmFuc2ZlcnMgKG5laXRoZXIg c3ogb3IgbHN6KSBkaWQKKyAgIG5vdC4KKworICAgV2VsbCwgaXQncyBhIG11Y2ggbG9uZ2VyIHN0 b3J5LiBBcyB0aGUgZXh0ZXJuYWwgcHJvdG9jb2wsIEkndmUgdHJpZWQKKyAgIHJ6c3osIGNyenN6 LCBhbmQgbHJ6c3ouIFdlIGtub3cgdGhhdCBzb21lIG9mIHRoZXNlIGhhdmUgcXVpcmtzCisgICBy ZWdhcmRpbmcgc3RhbmRhcmQgaS9vLCBldGMsIHdoaWNoIGlzIG9uZSBvZiB0aGUgcmVhc29ucyBm b3IgdXNpbmcgcHR5cworICAgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgaS9vIGRvZXMgd29yayAt IGp1c3Qgbm90IHJlbGlhYmx5LiBBbnl3YXksIHRoZQorICAgMTEwMCBsaW5lcyBvciBzbyBvZiBb OTRdY2tjMjk5LnR4dCwgc3RhcnRpbmcganVzdCBiZWxvdyB3aGVyZSBpdCBzYXlzCisgICAiLS0t IERldi4yNyAtLS0iIHRlbGwgdGhlIGZ1bGwgc3RvcnkuIEF0IHRoaXMgcG9pbnQgSSBoYXZlIHRv IGdpdmUgdXAKKyAgIGFuZCBtb3ZlIG9uOyBpdCBtaWdodCBiZSBtb3JlIHByb2R1Y3RpdmUgdG8g bGV0IHNvbWVib2R5IGVsc2Ugd2hvIGhhcworICAgbW9yZSBleHBlcmllbmNlIHdpdGggcHR5cyB0 YWtlIGEgbG9vayBhdCBpdCAtIGlmIGluZGVlZCBhbnlvbmUgc3RpbGwKKyAgIGNhcmVzIGFib3V0 IGJlaW5nIGFibGUgdG8gZG8gWm1vZGVtIHRyYW5zZmVycyBvdmVyIHNlY3VyZSBUZWxuZXQKKyAg IGNvbm5lY3Rpb25zLgorCisgICBDLUtlcm1pdCA5LjAgY29udGFpbnMgdGhlIHRocmVlIG5ldyBy b3V0aW5lcyAoYW5kIHNvbWUgYXV4aWxpYXJ5IG9uZXMpLAorICAgYnV0IHRoZXkgYXJlIG5vdCBj b21waWxlZCBvciBjYWxsZWQgdW5sZXNzIHlvdSBidWlsZCBpdCBzcGVjaWFsbHk6CisKKyAgICAg bWFrZSB0YXJnZXRuYW1lIEtGTEFHUz0tRFhUVFBUWUNNRCAoYnVpbGRzIHdpdGggeHR0cHR5Y21k KCkpCisgICAgIG1ha2UgdGFyZ2V0bmFtZSBLRkxBR1M9LURZVFRQVFlDTUQgKGJ1aWxkcyB3aXRo IHl0dHB0eWNtZCgpKQorICAgICBtYWtlIHRhcmdldG5hbWUgS0ZMQUdTPS1EWlRUUFRZQ01EIChi dWlsZHMgd2l0aCB6dHRwdHljbWQoKSkKKworICAgVGhlc2UgYXJlIGFsbCBpbiBbOTVdY2t1dGlv LmMuIEFzIG5vdGVkLCB0aGUgc2Vjb25kIG9uZSB3b3JrcyBvbmx5IGZvcgorICAgTGludXgsIEZy ZWVCU0QsIE5ldEJTRCwgYW5kIE1hYyBPUyBYLCBiZWNhdXNlIGl0IHVzZXMgbm9uLVBPU0lYLAor ICAgbm9uLXBvcnRhYmxlIG9wZW5wdHkoKS4gSWYgeW91IHdhbnQgdG8gdHJ5IGl0IG9uIHNvbWUg b3RoZXIgcGxhdGZvcm0KKyAgIHRoYXQgaGFzIG9wZW5wdHkoKSwgeW91IGNhbiBidWlsZCBpdCBs aWtlIHRoaXM6CisKKyAgICAgbWFrZSB0YXJnZXRuYW1lICJLRkxBR1M9LURZVFRQVFlDTUQgLURI QVZFX09QRU5QVFkiCisKKyAgIChhbmQgbGV0IG1lIGtub3csIHNvIEkgY2FuIGhhdmUgSEFWRV9P UEVOUFRZIHByZWRlZmluZWQgZm9yIHRoYXQKKyAgIHBsYXRmb3JtIHRvbykuIFRoZSBiZXN0IHN0 cmF0ZWd5IHRvIGdldCB0aGlzIHdvcmtpbmcsIEkgdGhpbmssIHdvdWxkIGJlCisgICB0byBjb25j ZW50cmF0ZSBvbiB5dHRwdHljbWQoKSwgd2hpY2ggaXMgdGhlIHNpbXBsZXIgb2YgdGhlIHR3bwor ICAgcHR5LWJhc2VkIHJvdXRpbmVzLiBJZiBpdCBjYW4gYmUgbWFkZSB0byB3b3JrLCB0aGVuIHdl J2xsIHNlZSBpZiB3ZSBjYW4KKyAgIHJldHJvZml0IGl0IHRvIHVzZSB0aGUgY2t1cHR5LmMgcm91 dGluZXMgc28gaXQgd2lsbCBiZSBwb3J0YWJsZSB0bworICAgbm9uLUJTRCBwbGF0Zm9ybXMuCisK KyAgIEJ5IHRoZSB3YXksIGlmIHlvdSBidWlsZCB3aXRoIGFueSBvZiBbWFlaXVRUUFRZQ01EIGRl ZmluZWQsIHRoZW4gdGhlCisgICBzZWxlY3RlZCByb3V0aW5lIHdpbGwgYWx3YXlzIGJlIHVzZWQg aW4gcGxhY2Ugb2YgdHRydW5jbWQoKS4gVGhpcyBpcyB0bworICAgYWxsb3cgdGVzdGluZyBvbiBh bGwga2luZHMgb2YgY29ubmVjdGlvbnMsIG5vdCBqdXN0IHNlY3VyZSBvbmVzLCBpbgorICAgYm90 aCBsb2NhbCBhbmQgcmVtb3RlIG1vZGUuIE9uY2UgdGhlIHRoaW5nIHdvcmtzLCBpZiBpdCBldmVy IGRvZXMsIEknbGwKKyAgIGFkZCB0aGUgYXBwcm9wcmlhdGUgdGVzdHMgYW5kL29yIGNvbW1hbmRz LgorCisgICBCeSBkZWZhdWx0LCBpbiB0aGUgaW5pdGlhbCB0ZXN0IHJlbGVhc2UsIEMtS2VybWl0 IDkuMCB1c2VzIHR0cnVuY21kKCkKKyAgIG9uIHNlcmlhbCBjb25uZWN0aW9ucyBhbmQgdHR5cHR5 Y21kKCkgb24gbmV0d29yayBjb25uZWN0aW9ucy4gRXZlbiB3aGVuCisgICBhIG5ldHdvcmsgY29u bmVjdGlvbiBpcyBub3QgZW5jcnlwdGVkLCBLZXJtaXQgc3RpbGwgbmVlZHMgdG8gaGFuZGxlIHRo ZQorICAgbmV0d29yayBwcm90b2NvbCwgZS5nLiB0aGUgcXVvdGluZyBvZiAweGZmIGJ5dGVzIG9u IFRlbG5ldCBjb25uZWN0aW9ucy4KKworRGVtb25zdHJhdGlvbjogRmV0Y2ggTWFpbCBmcm9tIFBP UCBTZXJ2ZXIgU2VjdXJlZCBieSBTU0wKKworICAgWzk2XXBvcC5rc2MgaXMgYSBmdWxseSBlbGFi b3JhdGVkIHByb2R1Y3Rpb24gc2NyaXB0IGZvciBmZXRjaGluZyBvbmUncworICAgbWFpbCBmcm9t IGEgUE9QMyBzZXJ2ZXIgb3ZlciBhIGNvbm5lY3Rpb24gc2VjdXJlZCBieSBTU0wuIEZvcgorICAg ZXhwbGFuYXRpb24gYW5kIGRvY3VtZW50YXRpb24sIFs5N11DTElDSyBIRVJFLiBbOThdbWFpbGNo ZWNrIGlzIGEKKyAgIHdyYXBwZXIgZm9yIHRoZSBwb3Aua3NjIHNjcmlwdCwgd2hpY2ggY29sbGVj dHMgeW91ciBwYXNzd29yZCBvbmUgdGltZSwKKyAgIGFuZCB0aGVuIGNoZWNrcyBmb3IgbmV3IG1h aWwgZXZlcnkgNSBtaW51dGVzIChvciBvdGhlciBzZWxlY3RlZAorICAgaW50ZXJ2YWwpIGFuZCBj YWxscyBwb3Aua3NjIHRvIGZldGNoIGl0IGlmIHRoZXJlIGlzIGFueS4KKworRGVtb25zdHJhdGlv bjogSFAgU3dpdGNoIENvbmZpZ3VyYXRpb24gQmFja3VwCisKKyAgIEEgY29tbW9uIHVzZSBmb3Ig S2VybWl0IHNvZnR3YXJlIGlzIHRvIG1ha2UgYXV0b21hdGVkIGJhY2t1cHMgb2YgdGhlCisgICBj b25maWd1cmF0aW9uIG9mIG5ldHdvcmsgc3dpdGNoZXMgYW5kIHJvdXRlcnMsIHN1Y2ggYXMgdGhv c2UgbWFkZSBieQorICAgQ2lzY28gb3IgSGV3bGV0dC1QYWNrYXJkIChhbHRob3VnaCBbOTlddGZ0 cCBjYW4gYmUgdXNlZCBmb3IgdGhpcywgaXQgaXMKKyAgIG5vdCBhdmFpbGFibGUgaW4gYWxsIHN1 Y2ggZGV2aWNlczsgS2VybWl0LCBob3dldmVyLCB3b3JrcyB3aXRoIHRob3NlCisgICB0aGF0IGhh dmUgdGZ0cCBhcyB3ZWxsIGFzIHRob3NlIHRoYXQgZG9uJ3QpLgorCisgICBUeXBpY2FsbHkgYSBi YWNrdXAgY2FuIGJlIGRvbmUgYnkgbWFraW5nIGEgVGVsbmV0LCBTU0gsIG9yIHNlcmlhbAorICAg Y29ubmVjdGlvbiB0byB0aGUgZGV2aWNlIHdpdGggS2VybWl0IGFuZCBnaXZpbmcgYSBjb21tYW5k IHN1Y2ggYXMgInNob3cKKyAgIGNvbmZpZyIgYXQgdGhlIGNvbW1hbmQtbGluZSBwcm9tcHQgb2Yg dGhlIGRldmljZSB3aXRoIEtlcm1pdCdzIHNlc3Npb24KKyAgIGxvZyBhY3RpdmF0ZWQuIFRoZSBy ZXN1bHQgaXMgYSBsaXN0IG9mIHRoZSBjb21tYW5kcyB0aGF0IHdlcmUgdXNlZCB0bworICAgZXN0 YWJsaXNoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHN1aXRhYmxlIGZvciBmZWVkaW5nIGJh Y2sgdG8gdGhlCisgICBkZXZpY2UncyBjb25zb2xlIChlLmcuIHdpdGggQy1LZXJtaXQncyBUUkFO U01JVCBjb21tYW5kKSB0byByZWVzdGFibGlzaAorICAgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBv ciB0byBkdXBsaWNhdGUgaXQgb24gYW5vdGhlciBkZXZpY2UuCisKKyAgIEF0IGFuIEhQIGluc3Rh bGxhdGlvbiBpdCB3YXMgbm90ZWQsIGhvd2V2ZXIsIHRoYXQgd2hpbGUgdGhlIEhQIHN3aXRjaGVz CisgICAodmFyaW91cyBQcm9DdXJ2ZSBtb2RlbHMpIHByb2R1Y2VkIHRoZSBkZXNpcmVkIGxpc3Qg b2YgY29tbWFuZHMsIHRoZXkKKyAgIHdlcmUgaW50ZXJzcGVyc2VkIHdpdGggZXNjYXBlIHNlcXVl bmNlcyBmb3Igc3BlY2lhbCBlZmZlY3RzLCB0aHVzCisgICByZW5kZXJpbmcgdGhlIHJlY29yZGVk IHNlc3Npb25zIHVuc3VpdGFibGUgZm9yIGZlZWRpbmcgYmFjayBpbnRvIHRoZQorICAgc3dpdGNo ZXMuCisKKyAgIEMtS2VybWl0IDkuMCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgdG8gc3RyaXAg dGhlIG9mZmVuZGluZyBzZXF1ZW5jZXMKKyAgIG91dCBvZiBhIHNlc3Npb24gbG9nLCBsZWF2aW5n IGp1c3QgdGhlIHRleHQuIFRoZSBjb21tYW5kIFNFVAorICAgU0VTU0lPTi1MT0cgVEVYVCBhY3Rp dmF0ZXMgdGhpcyBmZWF0dXJlLiBJbiBDLUtlcm1pdCA5LjAgQWxwaGEuMDIgYW5kCisgICBlYXJs aWVyLCBlc2NhcGUgc2VxdWVuY2Ugc3RyaXBwaW5nIG9jY3VycmVkIG9ubHkgd2hpbGUgbG9nZ2lu ZworICAgaW50ZXJhY3RpdmUgKENPTk5FQ1QpIHNlc3Npb25zOyBiZWdpbm5pbmcgd2l0aCBBbHBo YS4wMyBpdCBpcyBkb25lIGFsc28KKyAgIGZvciBkYXRhIHRoYXQgaXMgcmVhZCBieSBJTlBVVCBj b21tYW5kcyBhbmQgdGhlcmVmb3JlIHdvcmtzIGZvciBzY3JpcHRzCisgICB0b28uCisKKyAgIEEg c2FtcGxlIEhQIFN3aXRjaCBDb25maWd1cmF0aW9uIEJhY2t1cCBzY3JpcHQgaXMgWzEwMF1IRVJF LCBhbmQgaXRzCisgICBkYXRhIGZpbGUgaXMgWzEwMV1IRVJFLiBUaGlzIHNjcmlwdCBhbHNvIGls bHVzdHJhdGVzIHNvbWUgb3RoZXIgbmV3CisgICBmZWF0dXJlcyBvZiBBbHBoYS4wMzoKKworICAg TUVTU0FHRSB0ZXh0CisgICAgICAgICAgVGhpcyBsZXRzIHlvdSBwdXQgZGVidWdnaW5nIG1lc3Nh Z2VzIGluIHlvdXIgc2NyaXB0IHRoYXQgY2FuIGJlCisgICAgICAgICAgZGlzcGxheWVkIG9yIG5v dCwgYWNjb3JkaW5nIHRvIFNFVCBERUJVRyBNRVNTQUdFIChiZWxvdykuIFRoaXMKKyAgICAgICAg ICB3YXkgeW91IGRvbid0IGhhdmUgdG8gY2hhbmdlIHlvdXIgc2NyaXB0IGZvciBkZWJ1Z2dpbmcu ICBIaW50OgorICAgICAgICAgIEluIFVuaXgsIGludm9rZSB0aGUgc2NyaXB0IGxpa2UgdGhpczoK KworICAgICAkIERFQlVHPTEgc2NyaXB0bmFtZSBhcmcxIGFyZzIuLi4KKworICAgICAgICAgIGFu ZCB0aGVuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHlvdXIgc2NyaXB0OgorCisg ICAgIGlmIGRlZmluZWQgXCQoREVCVUcpIHNldCBkZWJ1ZyBtZXNzYWdlIG9uCisKKyAgIFhNRVNT QUdFIHRleHQKKyAgICAgICAgICBMaWtlIE1FU1NBR0UgYnV0IHByaW50cyB0aGUgdGV4dCB3aXRo IG5vIGxpbmUgdGVybWluYXRvciwgc28gaXQKKyAgICAgICAgICBjYW4gYmUgY29udGludWVkIGJ5 IHN1YnNlcXVlbnQgbWVzc2FnZXMuCisKKyAgIFNFVCBERUJVRyBNRVNTQUdFIHsgT04sIE9GRiwg U1RERVJSIH0KKyAgICAgICAgICBPTiBtZWFucyBNRVNTQUdFIGNvbW1hbmRzIHNob3VsZCBwcmlu dCB0byBzdGFuZGFyZCBvdXRwdXQ7IE9GRgorICAgICAgICAgIG1lYW5zIHRoZXkgc2hvdWxkbid0 IHByaW50IGFueXRoaW5nOyBTVERFUlIgbWVhbnMgdGhlIG1lc3NhZ2VzCisgICAgICAgICAgc2hv dWxkIGJlIHByaW50ZWQgdG8gWzEwMl1zdGRlcnIuIERFQlVHIE1FU1NBR0UgaXMgT0ZGIGJ5Cisg ICAgICAgICAgZGVmYXVsdCwgaS5lLiB1bmxlc3MgeW91IFNFVCBpdCB0byBPTiBvciBTVERFUlIu CisKKyAgIElGIERFQlVHIGNvbW1hbmQKKyAgICAgICAgICBFeGVjdXRlcyB0aGUgY29tbWFuZCBp ZiBTRVQgREVCVUcgTUVTU0FHRSBpcyBub3QgT0ZGLgorCisgICBUaGUgXHYobGFzdGNvbW1hbmQp IHZhcmlhYmxlCisgICAgICAgICAgVGhpcyB2YXJpYWJsZSBjb250YWlucyB0aGUgcHJldmlvdXMg Y29tbWFuZC4gWW91IGNhbiB1c2UgaXQgaW4KKyAgICAgICAgICBkZWJ1Z2dpbmcgYW5kIGVycm9y IG1lc3NhZ2UgdG8gc2hvdyAoZm9yIGV4YW1wbGUpIGV4YWN0bHkgd2hhdAorICAgICAgICAgIHRo ZSBjb21tYW5kIHdhcyB0aGF0IGp1c3QgZmFpbGVkLCB3aXRob3V0IGhhdmluZyB0byBtYWtlIGEg Y29weQorICAgICAgICAgIG9mIHRoZSBjb21tYW5kOgorCitzZXQgaG9zdCBzb21laG9zdC5zb21l Y29tcGFueS5jb20KK2lmIGZhaWwgZXhpdCAxICJGQVRBTCAtIFx2KGxhc3Rjb21tYW5kKSIKKwor ICAgICAgICAgIHdoaWNoLCBpZiB0aGUgU0VUIEhPU1QgY29tbWFuZCBmYWlscywgcHJpbnRzICJG QVRBTCAtIHNldCBob3N0CisgICAgICAgICAgc29tZWhvc3Quc29tZWNvbXBhbnkuY29tIiBhbmQg dGhlbiBleGl0cyB3aXRoIHN0YXR1cyAxICh3aGljaAorICAgICAgICAgIG5vcm1hbGx5IGluZGlj YXRlcyBmYWlsdXJlKS4KKworRGVtb25zdHJhdGlvbjogSFAgaUxPIEJsYWRlIENvbmZpZ3VyYXRp b24KKworICAgWzEwM11USElTIERPQ1VNRU5UIGRlc2NyaWJlcyBhIHNjcmlwdCBpbiBwcm9kdWN0 aW9uIHVzZSBhdCBDb2x1bWJpYQorICAgVW5pdmVyc2l0eSBmb3IgY29uZmlndXJpbmcgYW5kIGRl cGxveWluZyByYWNrcyBmdWxsIG9mIEhQIGJsYWRlIHNlcnZlcnMKKyAgIHRocm91Z2ggdGhlaXIg ImludGVncmF0ZWQgTGlnaHRzIE91dCIgKGlMTykgbWFuYWdlbWVudCBpbnRlcmZhY2UsCisgICBi eXBhc3NpbmcgdGhlIHRlZGlvdXMgYW5kIGVycm9yLXByb25lIHByb2Nlc3Mgb2YgY29uZmlndXJp bmcgdGhlCisgICBzZXJ2ZXJzIG9uZSBieSBvbmUgdGhyb3VnaCB0aGUgdmVuZG9yLXByb3ZpZGVk IHBvaW50LWFuZC1jbGljayBXZWIKKyAgIGludGVyZmFjZSwgd2hpY2ggaXMgaWxsLXN1aXRlZCB0 byBjb25maWd1cmluZyBsYXJnZSBudW1iZXJzIG9mIGJsYWRlcy4KKyAgIFRoZSBzY3JpcHQgaWxs dXN0cmF0ZXMgc29tZSBvZiBDLUtlcm1pdCA5LjAncyBuZXcgZmVhdHVyZXM7IHNvdXJjZSBjb2Rl CisgICBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgbGluay4gVGhlIGNvZGUgaXMgYXB0IHRvIGNo YW5nZSBmcm9tIHRpbWUgdG8KKyAgIHRpbWUgYXMgbmV3IHJlcXVpcmVtZW50cyBzdXJmYWNlLgor CitEZW1vbnN0cmF0aW9uOiBJQk0vUm9sbS9TaWVtZW5zIENCWCBNYW5hZ2VtZW50CisKKyAgIFsx MDRdVEhJUyBET0NVTUVOVCBkZXNjcmliZXMgYSBzdWl0ZSBvZiBzY3JpcHRzIChzb21lIGluIHBy b2R1Y3Rpb24sCisgICBzb21lIGluIGRldmVsb3BtZW50KSB1c2VkIHRvIG1hbmFnZSB0aGUgQ29s dW1iaWEgY2FtcHVzIDIwLDAwMC1saW5lCisgICBtYWluIHRlbGVwaG9uZSBzd2l0Y2gsIGFsb25n IHdpdGggYWJvdXQgMTAgc2F0ZWxsaXRlIHN3aXRjaGVzIGF0CisgICBvZmYtY2FtcHVzIGxvY2F0 aW9ucy4gVGhlc2Ugc3dpdGNoZXMgYXJlIDE5ODBzIHRlY2hub2xvZ3kqLCB0aGVpcgorICAgbWFu YWdlbWVudCBjb25zb2xlcyBhcmUgc2VyaWFsIHBvcnRzLiBBY2Nlc3MgaXMgdmlhIFRlbG5ldCB0 byByZXZlcnNlCisgICB0ZXJtaW5hbCBzZXJ2ZXJzLiBUaGUgc2NyaXB0cyBhbGxvdyBmb3IgaW50 ZXJhY3RpdmUgc2Vzc2lvbnMgYXMgd2VsbCBhcworICAgYXV0b21hdGljIHByb2R1Y3Rpb24gKGFu ZCBpbiBzb21lIGNhc2VzIGZvcm1hdHRpbmcpIG9mIGRpZmZlcmVudAorICAgcmVwb3J0cyByZXF1 aXJlZCBieSBkaWZmZXJlbnQgZ3JvdXBzIGF0IGRpZmZlcmVudCBpbnRlcnZhbHMuIFRoZXNlCisg ICBzY3JpcHRzIHJlcGxhY2UgYSB3aG9sZSBhc3NvcnRtZW50IG9mIGFkLWhvYyBQcm9Db21tIEFT UEVDVCBzY3JpcHRzCisgICB0aGF0IHdlcmUgc2NhdHRlcmVkIGFsbCBvdmVyIHRoZSBwbGFjZSwg d2l0aCBwYXNzd29yZHMgZW1iZWRkZWQuIFRoZQorICAgbmV3IHNjcmlwdHMgYXJlIGludGVuZGVk IHRvIGJlIHJ1biBmcm9tIGEgY2VudHJhbGl6ZWQgc2VydmVyIHdoZXJlCisgICB0aGVyZSBpcyBh IHNpbmdsZSB3ZWxsLXNlY3VyZWQgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgd2hlcmUgdGhleSBj YW4KKyAgIGJlIHVzZWQgb24gZGVtYW5kLCBvciBpbiBjcm9uIGpvYnMuIFRoZXkgYXJlIG1vZHVs YXIgc28gY29kZQorICAgZHVwbGljYXRpb24gaXMgbWluaW1hbC4KKyAgIF9fX19fX19fX19fX19f X19fX19fX19fX19fCisgICAqICBPZiBjb3Vyc2UgdGhlIFVuaXZlcnNpdHkgaXMgZGVwbG95aW5n IG5ldyB0ZWNobm9sb2d5IGJ1dCB0aGUgYnV0IHRoZQorICAgb2xkIHN5c3RlbSB3aWxsIGJlIHVz ZWQgaW4gcGFyYWxsZWwgZm9yIHNvbWUgdGltZSB0byBjb21lLgorCitEZW1vbnN0cmF0aW9uOiBD U1YgYW5kIFRTViBGaWxlcworCisgICBDb250ZW50cworCisgICAgICogWzEwNV1SZWFkaW5nIGEg Q1NWIG9yIFRTViBSZWNvcmQgYW5kIENvbnZlcnRpbmcgaXQgdG8gYW4gQXJyYXkKKyAgICAgKiBb MTA2XVVzaW5nIFxmam9pbigpIHRvIGNyZWF0ZSBhIENvbW1hLSBvciBUYWItU2VwYXJhdGVkIFZh bHVlIExpc3QKKyAgICAgICBmcm9tIGFuIEFycmF5CisgICAgICogWzEwN11Vc2luZyBDU1Ygb3Ig VFNWIEZpbGVzCisKKyAgIENvbW1hLVNlcGFyYXRlZCBWYWx1ZSAoQ1NWKSBmb3JtYXQgaXMgY29t bW9ubHkgb3V0cHV0IGJ5IHNwcmVhZHNoZWV0cworICAgYW5kIGRhdGFiYXNlcyB3aGVuIGV4cG9y dGluZyBkYXRhIGludG8gcGxhaW4tdGV4dCBmaWxlcyBmb3IgaW1wb3J0IGludG8KKyAgIG90aGVy IGFwcGxpY2F0aW9ucy4gSGVyZSBhcmUgdGhlIGRldGFpbHM6CisKKyAgIENvbW1hLVNlcGFyYXRl ZCBMaXN0IFN5bnRheAorCisgICAgMS4gRWFjaCByZWNvcmQgaXMgYSBzZXJpZXMgb2YgZmllbGRz LgorICAgIDIuIFJlY29yZHMgYXJlIGluIHdoYXRldmVyIGZvcm1hdCBpcyB1c2VkIGJ5IHRoZSB1 bmRlcmx5aW5nIGZpbGUKKyAgICAgICBzeXN0ZW0gZm9yIGxpbmVzIG9mIHRleHQuCisgICAgMy4g RmllbGRzIHdpdGhpbiByZWNvcmRzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzLCB3aXRoIHplcm8g b3IgbW9yZQorICAgICAgIHdoaXRlc3BhY2UgY2hhcmFjdGVycyAoc3BhY2Ugb3IgdGFiKSBiZWZv cmUgYW5kL29yIGFmdGVyIHRoZSBjb21tYTsKKyAgICAgICBzdWNoIHdoaXRlc3BhY2UgaXMgY29u c2lkZXJlZCBwYXJ0IG9mIHRoZSBzZXBhcmF0b3IuCisgICAgNC4gRmllbGRzIHdpdGggZW1iZWRk ZWQgY29tbWFzIG11c3QgYmUgZW5jbG9zZWQgaW4gQVNDSUkgZG91YmxlcXVvdGUKKyAgICAgICBj aGFyYWN0ZXJzLgorICAgIDUuIEZpZWxkcyB3aXRoIGxlYWRpbmcgb3IgdHJhaWxpbmcgc3BhY2Vz IG11c3QgYmUgZW5jbG9zZWQgaW4gQVNDSUkKKyAgICAgICBkb3VibGVxdW90ZXMuCisgICAgNi4g QW55IGZpZWxkIG1heSBiZSBlbmNsb3NlZCBpbiBBU0NJSSBkb3VibGVxdW90ZXMuCisgICAgNy4g RmllbGRzIHdpdGggZW1iZWRkZWQgZG91YmxlcXVvdGVzIG11c3QgYmUgZW5jbG9zZWQgaW4gZG91 YmxlcXVvdGVzCisgICAgICAgYW5kIGVhY2ggaW50ZXJpb3IgZG91YmxlcXVvdGUgaXMgZG91Ymxl ZC4KKworICAgSGVyZSBpcyBhbiBleGFtcGxlOgorCithYWEsIGJiYiwgaGFzIHNwYWNlcywsImRk ZCxlZWUsZmZmIiwgIiBoYXMgc3BhY2VzICIsIk11aGFtbWFkICIiVGhlIEdyZWF0ZXN0IiIgQQor bGkiCisKKyAgIFRoZSBmaXJzdCB0d28gYXJlIHJlZ3VsYXIgZmllbGRzLiBUaGUgc2Vjb25kIGlz IGEgZmllbGQgdGhhdCBoYXMgYW4KKyAgIGVtYmVkZGVkIHNwYWNlIGJ1dCBpbiB3aGljaCBhbnkg bGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXMgYXJlIHRvIGJlCisgICBpZ25vcmVkLiBUaGUgZm91 cnRoIGlzIGFuIGVtcHR5IGZpZWxkLCBidXQgc3RpbGwgYSBmaWVsZC4gVGhlIGZpZnRoIGlzCisg ICBhIGZpZWxkIHRoYXQgY29udGFpbnMgZW1iZWRkZWQgY29tbWFzLiBUaGUgc2l4dGggaGFzIGxl YWRpbmcgYW5kCisgICB0cmFpbGluZyBzcGFjZXMuIFRoZSBsYXN0IGZpZWxkIGhhcyBlbWJlZGRl ZCBxdW90YXRpb24gbWFya3MuCisKKyAgIFByaW9yIHRvIEMtS2VybWl0IDkuMCBBbHBoYS4wNiwg Qy1LZXJtaXQgZGlkIG5vdCBoYW5kbGUgQ1NWIGZpbGVzCisgICBhY2NvcmRpbmcgdG8gdGhlIHNw ZWNpZmljYXRpb24gYWJvdmUuIE1vc3Qgc2VyaW91c2x5LCB0aGVyZSB3YXMgbm8KKyAgIHByb3Zp c2lvbiBmb3IgYSBzZXBhcmF0b3IgdG8gYmUgc3Vycm91bmRlZCBieSB3aGl0ZXNwYWNlIHRoYXQg d2FzIHRvIGJlCisgICBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlcGFyYXRvci4gQWxzbyB0aGVy ZSB3YXMgbm8gcHJvdmlzaW9uIGZvcgorICAgcXVvdGluZyBkb3VibGVxdW90ZXMgaW5zaWRlIG9m IGEgcXVvdGVkIHN0cmluZy4KKworUmVhZGluZyBhIENTViByZWNvcmQKKworICAgTm93IHRoZSBc ZnNwbGl0KCkgZnVuY3Rpb24gY2FuIGhhbmRsZSBhbnkgQ1NWLWZvcm1hdCBzdHJpbmcgaWYgeW91 CisgICBpbmNsdWRlIHRoZSBzeW1ib2xpYyBpbmNsdWRlIHNldCAiQ1NWIiBhcyB0aGUgNHRoIHBh cmFtZXRlci4gVG8KKyAgIGlsbHVzdHJhdGUsIHRoaXMgcHJvZ3JhbToKKworZGVmIHh4IHsKKyAg IGVjaG8gW1xmY29udGVudHMoXCUxKV0KKyAgIC5cJTkgOj0gXGZzcGxpdChcZmNvbnRlbnRzKFwl MSksICZhLCBcNDQsIENTVikKKyAgIGZvciBcJWkgMSBcJTkgMSB7IGVjaG8gIlxmbHBhZChcJWks MykuIFtcJmFbXCVpXV0iIH0KKyAgIGVjaG8gIi0tLS0tLS0tLS0tIgorfQoreHgge2EsYixjfQor eHggeyBhICwgYiAsIGMgfQoreHggeyBhYWEsLGNjYywiIHdpdGggc3BhY2VzICIsenp6IH0KK3h4 IHsgIjEiLCIyIiwiMyIsIiIsIjUiIH0KK3h4IHsgdGhpcyBpcyBhIHNpbmdsZSBmaWVsZCB9Cit4 eCB7IHRoaXMgaXMgb25lIGZpZWxkLCAiIGFuZCB0aGlzIGlzIGFub3RoZXIgICIgfQoreHggeyBu YW1lLCJNb2hhbW1hZCAiIlRoZSBHcmVhdGVzdCIiIEFsaSIsIGFnZSwgNjcgfQoreHggeyAiIiJm aWVsZCBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXMiIiIgfQorZXhpdAorCisgICBnaXZlcyB0aGUg Zm9sbG93aW5nIHJlc3VsdHM6CisKK1thLGIsY10KKyAgMS4gW2FdCisgIDIuIFtiXQorICAzLiBb Y10KKy0tLS0tLS0tLS0tCitbIGEgLCBiICwgYyBdCisgIDEuIFthXQorICAyLiBbYl0KKyAgMy4g W2NdCistLS0tLS0tLS0tLQorWyBhYWEsLGNjYywiIHdpdGggc3BhY2VzICIsenp6IF0KKyAgMS4g W2FhYV0KKyAgMi4gW10KKyAgMy4gW2NjY10KKyAgNC4gWyB3aXRoIHNwYWNlcyBdCisgIDUuIFt6 enpdCistLS0tLS0tLS0tLQorWyAiMSIsIjIiLCIzIiwiIiwiNSIgXQorICAxLiBbMV0KKyAgMi4g WzJdCisgIDMuIFszXQorICA0LiBbXQorICA1LiBbNV0KKy0tLS0tLS0tLS0tCitbIHRoaXMgaXMg YSBzaW5nbGUgZmllbGQgXQorICAxLiBbdGhpcyBpcyBhIHNpbmdsZSBmaWVsZF0KKy0tLS0tLS0t LS0tCitbIHRoaXMgaXMgb25lIGZpZWxkLCAiIGFuZCB0aGlzIGlzIGFub3RoZXIgICIgXQorICAx LiBbdGhpcyBpcyBvbmUgZmllbGRdCisgIDIuIFsgYW5kIHRoaXMgaXMgYW5vdGhlciAgXQorLS0t LS0tLS0tLS0KK1sgbmFtZSwiTW9oYW1tYWQgIiJUaGUgR3JlYXRlc3QiIiBBbGkiLCBhZ2UsIDY3 IF0KKyAgMS4gW25hbWVdCisgIDIuIFtNb2hhbW1hZCAiVGhlIEdyZWF0ZXN0IiBBbGldCisgIDMu IFthZ2VdCisgIDQuIFs2N10KKy0tLS0tLS0tLS0tCitbICIiImZpZWxkIGVuY2xvc2VkIGluIGRv dWJsZXF1b3RlcyIiIiBdCisgIDEuIFsiZmllbGQgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzIl0K Ky0tLS0tLS0tLS0tCisKKyAgIFRoZSBzZXBhcmF0b3IgXDQ0IChjb21tYSkgbXVzdCBzdGlsbCBi ZSBzcGVjaWZpZWQgYXMgdGhlIGJyZWFrIHNldCAoM3JkCisgICBcZnNwbGl0KCkgcGFyYW1ldGVy KS4gV2hlbiAiQ1NWIiBpcyBzcGVjaWZpZWQgYXMgdGhlIGluY2x1ZGUgc2V0OgorICAgICAqIFRo ZSBHcm91cGluZyBNYXNrIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIDEgKHdoaWNoIHNwZWNpZmll cyB0aGF0CisgICAgICAgdGhlIEFTQ0lJIGRvdWJsZXF1b3RlIGNoYXJhY3RlciAoIikgaXMgdXNl ZCBmb3IgZ3JvdXBpbmc7CisgICAgICogVGhlIFNlcGFyYXRvciBGbGFnIGlzIGF1dG9tYXRpY2Fs bHkgc2V0IHRvIDEgc28gdGhhdCBhZGphY2VudCBmaWVsZAorICAgICAgIHNlcGFyYXRvcnMgd2ls bCBub3QgYmUgY29sbGFwc2VkOworICAgICAqIEFsbCBieXRlcyAodmFsdWVzIDAgdGhyb3VnaCAy NTUpIG90aGVyIHRoYW4gdGhlIGJyZWFrIGNoYXJhY3RlciBhcmUKKyAgICAgICBhZGRlZCB0byB0 aGUgaW5jbHVkZSBzZXQ7CisgICAgICogQW55IGxlYWRpbmcgd2hpdGVzcGFjZSBpcyBzdHJpcHBl ZCBmcm9tIHRoZSBmaXJzdCBlbGVtZW50IHVubGVzcyBpdAorICAgICAgIGlzIGVuY2xvc2VkIGlu IGRvdWJsZXF1b3RlczsKKyAgICAgKiBBbnkgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyB0cmltbWVk IGZyb20gdGhlIGVuZCBvZiB0aGUgbGFzdCBlbGVtZW50CisgICAgICAgdW5sZXNzIGl0IGlzIGVu Y2xvc2VkIGluIGRvdWJsZXF1b3RlczsKKyAgICAgKiBJZiB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rl ciBoYXMgYW55IHNwYWNlcyBvciB0YWJzIHByZWNlZGluZyBpdCBvcgorICAgICAgIGZvbGxvd2lu ZyBpdCwgdGhleSBhcmUgaWdub3JlZCBhbmQgZGlzY2FyZGVkOworICAgICAqIFRoZSBzZXBhcmF0 b3IgY2hhcmFjdGVyIGlzIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgZGF0YSBjaGFyYWN0ZXIgaWYK KyAgICAgICBpdCBhcHBlYXJzIGluIGEgcXVvdGVkIGZpZWxkOworICAgICAqIEEgc2VxdWVuY2Ug b2YgdHdvIGRvdWJsZXF1b3RlIGNoYXJhY3RlcnMgKCIiKSB3aXRoaW4gYSBxdW90ZWQgZmllbGQK KyAgICAgICBpcyBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUgZG91YmxlcXVvdGUuCisKKyAgIFRoZXJl IGlzIGFsc28gYSBuZXcgVFNWIHN5bWJvbGljIGluY2x1ZGUgc2V0LCB3aGljaCBpcyBsaWtlIENT ViBleGNlcHQKKyAgIHdpdGhvdXQgdGhlIHF1b3RpbmcgcnVsZXMgb3IgdGhlIHN0cmlwcGluZyBv ZiB3aGl0ZXNwYWNlIGFyb3VuZCB0aGUKKyAgIHNlcGFyYXRvciBiZWNhdXNlLCBieSBkZWZpbml0 aW9uLCBUU1YgZmllbGRzIGRvIG5vdCBjb250YWluIHRhYnMuCisKKyAgIE9mIGNvdXJzZSB5b3Ug Y2FuIHNwZWNpZnkgYW55IHNlcGFyYXRvcihzKSB5b3Ugd2FudCB3aXRoIGVpdGhlciB0aGUKKyAg IENTViwgVFNWLCBvciBBTEwgc3ltYm9saWMgaW5jbHVkZSBzZXRzLiBGb3IgZXhhbXBsZSwgaWYg eW91IGhhdmUgYSBUU1YKKyAgIGZpbGUgaW4gd2hpY2ggeW91IHdhbnQgdGhlIHNwYWNlcyBhcm91 bmQgZWFjaCBUYWIgdG8gYmUgZGlzY2FyZGVkLCB5b3UKKyAgIGNhbiB1c2U6CisKK1xmc3BsaXQo dmFyaWFibGUsICZhLCBcOSwgQ1NWKQorCisgICBcOSBpcyBUYWIuCisKKyAgIFRoZSBuZXcgc3lt Ym9saWMgaW5jbHVkZSBzZXRzIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBcZndvcmQoKSwgd2hpY2gg aXMKKyAgIGp1c3QgbGlrZSBcZnNwbGl0KCkgZXhjZXB0IHRoYXQgaXQgcmV0cmlldmVzIHRoZSBu dGggd29yZCBmcm9tIHRoZQorICAgYXJndW1lbnQgc3RyaW5nLCByYXRoZXIgdGhhbiBhbiBhcnJh eSBvZiBhbGwgdGhlIHdvcmRzLiBJbiBDLUtlcm1pdCB5b3UKKyAgIGNhbiBnZXQgaW5mb3JtYXRp b24gYWJvdXQgdGhlc2Ugb3IgYW55IG90aGVyIGZ1bmN0aW9ucyB3aXRoIHRoZSBIRUxQCisgICBG VU5DVElPTiBjb21tYW5kLCBlLmcuOgorCitDLUtlcm1pdD4gaGVscCBmdW5jIHdvcmQKKworRnVu Y3Rpb24gXGZ3b3JkKHMxLG4xLHMyLHMzLG4yLG4zKSAtIEV4dHJhY3RzIGEgd29yZCBmcm9tIGEg c3RyaW5nLgorICAgIHMxID0gc291cmNlIHN0cmluZy4KKyAgICBuMSA9IHdvcmQgbnVtYmVyICgx LWJhc2VkKSBjb3VudGluZyBmcm9tIGxlZnQ7IGlmIG5lZ2F0aXZlLCBmcm9tIHJpZ2h0LgorICAg IHMyID0gb3B0aW9uYWwgYnJlYWsgc2V0LgorICAgIHMzID0gb3B0aW9uYWwgaW5jbHVkZSBzZXQg KG9yIEFMTCwgQ1NWLCBvciBUU1YpLgorICAgIG4yID0gb3B0aW9uYWwgZ3JvdXBpbmcgbWFzay4K KyAgICBuMyA9IG9wdGlvbmFsIHNlcGFyYXRvciBmbGFnOgorICAgICAgIDAgPSBjb2xsYXBzZSBh ZGphY2VudCBzZXBhcmF0b3JzOworICAgICAgIDEgPSBkb24ndCBjb2xsYXBzZSBhZGphY2VudCBz ZXBhcmF0b3JzLgorCisgIFxmd29yZCgpIHJldHVybnMgdGhlIG4xdGggIndvcmQiIG9mIHRoZSBz dHJpbmcgczEsIGFjY29yZGluZyB0byB0aGUKKyAgY3JpdGVyaWEgc3BlY2lmaWVkIGJ5IHRoZSBv dGhlciBwYXJhbWV0ZXJzLgorCisgIFRoZSBCUkVBSyBTRVQgaXMgdGhlIHNldCBvZiBhbGwgY2hh cmFjdGVycyB0aGF0IHNlcGFyYXRlIHdvcmRzLiBUaGUKKyAgZGVmYXVsdCBicmVhayBzZXQgaXMg YWxsIGNoYXJhY3RlcnMgZXhjZXB0IEFTQ0lJIGxldHRlcnMgYW5kIGRpZ2l0cy4KKyAgQVNDSUkg KEMwKSBjb250cm9sIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWQgYXMgYnJlYWsgY2hhcmFjdGVycyBi eSBkZWZhdWx0LAorICBhcyBhcmUgc3BhY2luZyBhbmQgcHVuY3R1YXRpb24gY2hhcmFjdGVycywg YnJhY2tldHMsIGFuZCBzbyBvbiwgYW5kCisgIGFsbCA4LWJpdCBjaGFyYWN0ZXJzLgorCisgIFRo ZSBJTkNMVURFIFNFVCBpcyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgdG8gYmUgdHJl YXRlZCBhcworICBwYXJ0cyBvZiB3b3JkcyBldmVuIHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxk IGJlIHNlcGFyYXRvcnMuICBUaGUKKyAgZGVmYXVsdCBpbmNsdWRlIHNldCBpcyBlbXB0eS4gIFRo cmVlIHNwZWNpYWwgc3ltYm9saWMgaW5jbHVkZSBzZXRzIGFyZQorICBhbHNvIGFsbG93ZWQ6CisK KyAgICBBTEwgKG1lYW5pbmcgaW5jbHVkZSBhbGwgYnl0ZXMgdGhhdCBhcmUgbm90IGluIHRoZSBi cmVhayBzZXQpCisgICAgQ1NWIChzcGVjaWFsIHRyZWF0bWVudCBmb3IgQ29tbWEtU2VwYXJhdGVk LVZhbHVlIHJlY29yZHMpCisgICAgVFNWIChzcGVjaWFsIHRyZWF0bWVudCBmb3IgVGFiLVNlcGFy YXRlZC1WYWx1ZSByZWNvcmRzKQorCisgIEZvciBvcGVyYXRpbmcgb24gOC1iaXQgY2hhcmFjdGVy IHNldHMsIHRoZSBpbmNsdWRlIHNldCBzaG91bGQgYmUgQUxMLgorCisgIElmIHRoZSBHUk9VUElO RyBNQVNLIGlzIGdpdmVuIGFuZCBpcyBub256ZXJvLCB3b3JkcyBjYW4gYmUgZ3JvdXBlZCBieQor ICBxdW90ZXMgb3IgYnJhY2tldHMgc2VsZWN0ZWQgYnkgdGhlIHN1bSBvZiB0aGUgZm9sbG93aW5n OgorCisgICAgIDEgPSBkb3VibGVxdW90ZXM6ICAgICJhIGIgYyIKKyAgICAgMiA9IGJyYWNlczog ICAgICAgICAge2EgYiBjfQorICAgICA0ID0gYXBvc3Ryb3BoZXM6ICAgICAnYSBiIGMnCisgICAg IDggPSBwYXJlbnRoZXNlczogICAgIChhIGIgYykKKyAgICAxNiA9IHNxdWFyZSBicmFja2V0czog W2EgYiBjXQorICAgIDMyID0gYW5nbGUgYnJhY2tldHM6ICA8YSBiIGM+CisKKyAgTmVzdGluZyBp cyBwb3NzaWJsZSB3aXRoIHt9KClbXTw+IGJ1dCBub3Qgd2l0aCBxdW90ZXMgb3IgYXBvc3Ryb3Bo ZXMuCisKK1JldHVybnMgc3RyaW5nOgorICBXb3JkIG51bWJlciBuMSwgaWYgdGhlcmUgaXMgb25l LCBvdGhlcndpc2UgYW4gZW1wdHkgc3RyaW5nLgorCitBbHNvIHNlZToKKyAgSEVMUCBGVU5DVElP TiBTUExJVAorCitDLUtlcm1pdD4KKworVXNpbmcgXGZqb2luKCkgdG8gY3JlYXRlIENvbW1hLSBv ciBUYWItU2VwYXJhdGVkIFZhbHVlIExpc3RzIGZyb20gQXJyYXlzCisKKyAgIEluIEMtS2VybWl0 IDkuMCwgXGZzcGxpdCgpJ3MgaW52ZXJzZSBmdW5jdGlvbiwgWzEwOF1cZmpvaW4oKSByZWNlaXZl ZAorICAgdGhlIGNhcGFiaWxpdHkgb2YgY29udmVydGluZyBhbiBhcnJheSBpbnRvIGEgY29tbWEt c2VwYXJhdGVkIG9yIGEKKyAgIHRhYi1zZXBhcmF0ZWQgdmFsdWUgbGlzdC4gVGh1cywgZ2l2ZW4g YSBDU1YsIGlmIHlvdSBzcGxpdCBpdCBpbnRvIGFuCisgICBhcnJheSB3aXRoIFxmc3BsaXQoKSBh bmQgdGhlbiBqb2luIHRoZSBhcnJheSB3aXRoIFxmam9pbigpLCBnaXZpbmcgZWFjaAorICAgZnVu Y3Rpb24gdGhlIG5ldyBDU1YgcGFyYW1ldGVyIGluIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudCBw b3NpdGlvbiwKKyAgIHRoZSByZXN1bHQgd2lsbCBiZSB3aWxsIGJlIGVxdWl2YWxlbnQgdG8gdGhl IG9yaWdpbmFsLCBhY2NvcmRpbmcgdG8gdGhlCisgICBDU1YgZGVmaW5pdGlvbi4gSXQgbWlnaHQg bm90IGJlIGlkZW50aWNhbCwgYmVjYXVzZSBpZiB0aGUgcmVzdWx0IGhhZAorICAgZXh0cmFuZW91 cyBzcGFjZXMgYmVmb3JlIG9yIGFmdGVyIHRoZSBzZXBhcmF0aW5nIGNvbW1hcywgdGhlc2UgYXJl CisgICBkaXNjYXJkZWQsIGJ1dCB0aGF0IGRvZXMgbm90IGFmZmVjdCB0aGUgZWxlbWVudHMgdGhl bXNlbHZlcy4gVGhlIG5ldworICAgc3ludGF4IGZvciBcZmpvaW4oKSBpczoKKworICAgXGZqb2lu KCZhLENTVikKKyAgICAgICAgICBHaXZlbiB0aGUgYXJyYXkgXCZhW10gb3IgYW55IG90aGVyIHZh bGlkIGFycmF5IGRlc2lnbmF0b3IsIGpvaW5zCisgICAgICAgICAgaXRzIGVsZW1lbnRzIGludG8g YSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgICAgWzEwOV1y dWxlcyBsaXN0ZWQgYWJvdmUuCisKKyAgIFxmam9pbigmYSxUU1YpCisgICAgICAgICAgSm9pbnMg dGhlIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBhcnJheSBpbnRvIGEgdGFiLXNlcGFyYXRlZCBsaXN0 LAorICAgICAgICAgIGFsc28gZGVzY3JpYmVkIGFib3ZlLgorCisgICBbMTEwXVByZXZpb3VzIGNh bGxpbmcgY29udmVudGlvbnMgZm9yIFxmam9pbigpIGFyZSB1bmRpc3R1cmJlZCwKKyAgIGluY2x1 ZGluZyB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgcG9ydGlvbiBvZiBhbiBhcnJheSwgcmF0aGVy IHRoYW4gdGhlCisgICB3aG9sZSBhcnJheToKKworZGVjbGFyZSBcJmFbXSA9IDEgMiAzIDQgNSA2 IDcgOCA5CitlY2hvIFxmam9pbigmYVszOjddLENTVikKKzMsNCw1LDYsNworCisgICBVc2luZyBc ZnNwbGl0KCkgYW5kIFxmam9pbigpIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBjb252ZXJ0IGEKKyAg IGNvbW1hLXNlcGFyYXRlZCB2YWx1ZSBsaXN0IGludG8gYSB0YWItc2VwYXJhdGVkIHZhbHVlIGxp c3QsIGFuZCB2aWNlCisgICB2ZXJzYSAod2hpY2ggaXMgbm90IGEgc2ltcGxlIG1hdHRlciBvZiBj aGFuZ2luZyBjb21tYXMgdG8gdGFicyBvciB2aWNlCisgICB2ZXJzYSkuCisKK0FwcGxpY2F0aW9u cyBmb3IgQ1NWIEZpbGVzCisKKyAgIERhdGFiYXNlcyBzdWNoIGFzIE1TIEFjY2VzcyBvciBNeVNR TCBjYW4gZXhwb3J0IHRhYmxlcyBvciByZXBvcnRzIGluCisgICBDU1YgZm9ybWF0LCBhbmQgdGhl biBLZXJtaXQgY2FuIHJlYWQgdGhlIHJlc3VsdGluZyBDU1YgZmlsZSBhbmQgZG8KKyAgIHdoYXRl dmVyIHlvdSBsaWtlIHdpdGggaXQ7IHR5cGljYWxseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBub3Qg YmUgZG9uZQorICAgd2l0aCB0aGUgZGF0YWJhc2UgcXVlcnkgbGFuZ3VhZ2UgaXRzZWxmIChvciB0 aGF0IHlvdSBkaWRuJ3Qga25vdyBob3cgdG8KKyAgIGRvIHRoYXQgd2F5KTogY3JlYXRlIHJlcG9y dHMgb3IgZGF0YXNldHMgYmFzZWQgb24gY29tcGxleCBjcml0ZXJpYSBvcgorICAgcHJvY2VkdXJl cywgZWRpdCBvciBtb2RpZnkgc29tZSBmaWVsZHMsIGV0YywgYW5kIHRoZW4gdXNlIFxmam9pbigp IHRvCisgICBwdXQgZWFjaCByZWNvcmQgYmFjayBpbiBDU1YgZm9ybSBzbyBpdCBjYW4gYmUgcmVp bXBvcnRlZCBpbnRvIGEKKyAgIHNwcmVhZHNoZWV0IG9yIGRhdGFiYXNlLgorCisgICBIZXJlIGlz IGEgc2ltcGxlIGV4YW1wbGUgaW4gd2hpY2ggd2UgcHVyZ2UgYWxsIHJlY29yZHMgb2YgY3VzdG9t ZXJzIHdobworICAgaGF2ZSB0d28gb3IgbW9yZSB1bnBhaWQgYmlsbHMuIFRoZSBmaWxlIGlzIHNv cnRlZCBzbyB0aGF0IGVhY2ggbGljZW5zZQorICAgcHVyY2hhc2UgcmVjb3JkIGlzIGZvbGxvd2Vk IGJ5IGl0cyBhbm51YWwgbWFpbnRlbmFuY2UgcGF5bWVudCByZWNvcmRzCisgICBpbiBjaHJvbm9s b2dpY2FsIG9yZGVyLgorCisjIS91c3IvbG9jYWwvYmluL2tlcm1pdAorLmZpbGVuYW1lID0gc29t ZWZpbGUuY3N2ICAgICAgICAjIElucHV0IGZpbGUgaW4gQ1NWIGZvcm1hdAorZm9wZW4gL3JlYWQg XCVjIFxtKGZpbGVuYW1lKSAgICAjIE9wZW4gaXQKK2lmIGZhaWwgZXhpdCAgICAgICAgICAgICAg ICAgICAgIyBEb24ndCBnbyBvbiBpZiBvcGVuIGZhaWxlZAorY29weSBcbShmaWxlbmFtZSkgLi9u ZXcgICAgICAgICAjIE1ha2UgYSBjb3B5IG9mIHRoZSBmaWxlCisKKy5vbGRzZXJpYWwgPSAwMDAw MDAwMDAwMCAgICAgICAgIyBNdWx0aXBsZSByZWNvcmRzIGZvciBlYWNoIHNlcmlhbCBudW1iZXIK Ky56ZXJvcyA9IDAgICAgICAgICAgICAgICAgICAgICAgIyBVbnBhaWQgYmlsbCBjb3VudGVyCisK K3doaWxlIHRydWUgeyAgICAgICAgICAgICAgICAgICAgIyBMb29wCisgICAgZnJlYWQgL2xpbmUg XCVjIGxpbmUgICAgICAgICMgR2V0IGEgcmVjb3JkCisgICAgaWYgZmFpbCBleGl0ICAgICAgICAg ICAgICAgICMgRW5kIG9mIGZpbGUKKyAgICAubiA6PSBcZnNwbGl0KFxtKGxpbmUpLCZhLFw0NCxD U1YpICAgICMgU3BsaXQgdGhlIGZpZWxkcyBpbnRvIGFuIGFycmF5CisgICAgaWYgbm90IGVxdSAi XG0ob2xkc2VyaWFsKSIgIlwmYVs2XSIgeyAjIEhhdmUgbmV3IHNlcmlhbCBudW1iZXI/CisgICAg ICAgICMgUmVtb3ZlIGFsbCByZWNvcmRzIGZvciBwcmV2aW91cyBzZXJpYWwgbnVtYmVyCisgICAg ICAgICMgaWYgdHdvIG9yIG1vcmUgYmlsbHMgd2VyZSBub3QgcGFpZC4uLgorICAgICAgICBpZiA+ IFxtKHplcm9zKSAxIHsKKyAgICAgICAgICAgIGdyZXAgL25vbWF0Y2ggXG0ob2xkc2VyaWFsKSAv b3V0cHV0Oi4vbmV3MiAuL25ldworICAgICAgICAgICAgcmVuYW1lIC4vbmV3MiAuL25ldworICAg ICAgICB9CisgICAgICAgIC5vbGRzZXJpYWwgOj0gXCZhWzZdICAgICMgVG8gZGV0ZWN0IG5leHQg dGltZSBzZXJpYWwgbnVtYmVyIGNoYW5nZXMKKyAgICAgICAgLnplcm9zID0gMCAgICAgICAgICAg ICAgIyBSZXNldCB1bnBhaWQgYmlsbCBjb3VudGVyCisgICAgfQorICAgIGlmIGVxdSAiXCZhWzVd IiAiJDAuMDAiIHsgICAjIEVsZW1lbnQgNSBpcyBhbW91bnQgcGFpZAorICAgICAgICBpbmNyZW1l bnQgemVyb3MgICAgICAgICAjIElmIGl0J3MgemVybywgY291bnQgaXQuCisgICAgfQorfQorZmNs b3NlIFwlYworCisgICBSZXdyaXRpbmcgdGhlIGZpbGUgbXVsdGlwbGUgdGltZXMgaXMgaW5lbGVn YW50LCBidXQgdGhpcyBpcyBhIHF1aWNrIGFuZAorICAgZGlydHkgdXNlLW9uY2UtYW5kLWRpc2Nh cmQgc2NyaXB0LCBzbyBlbGVnYW5jZSBkb2Vzbid0IGNvdW50LiBUaGUKKyAgIGV4YW1wbGUgaXMg aW50ZXJlc3RpbmcgaW4gdGhhdCBpdCBwdXJnZXMgY2VydGFpbiByZWNvcmRzIGJhc2VkIG9uIHRo ZQorICAgY29udGVudHMgb2Ygb3RoZXIgcmVjb3Jkcy4gTWF5YmUgdGhlcmUgaXMgYSB3YXkgdG8g ZG8gdGhpcyBkaXJlY3RseQorICAgd2l0aCBTUUwsIGJ1dCB3aHkgdXNlIFNRTCB3aGVuIHlvdSBj YW4gdXNlIEtlcm1pdD8KKworICAgSGVyZSBpcyB0aGUgc2FtZSB0YXNrIGJ1dCB0aGlzIHRpbWUg bm8gc2hlbGxpbmcgb3V0LCBhbmQgdGhpcyB0aW1lIHdlCisgICBkbyBjaGFuZ2UgYW5kIGFkZCBz b21lIGZpZWxkcyBhbmQgdGhlbiBqb2luIHRoZSByZXN1bHQgYmFjayBpbnRvIGEgQ1NWCisgICBy ZWNvcmQgYW5kIHdyaXRlIGl0IG91dCB0byBhIG5ldyBmaWxlLiBUaGUgb2JqZWN0IGlzIHRvIGNy ZWF0ZSBhIHJlY29yZAorICAgZm9yIGVhY2ggbGljZW5zZSB0aGF0IHNob3dzIG5vdCBvbmx5IHRo ZSBkYXRlIGFuZCBwdXJjaGFzZSBwcmljZSBvZiB0aGUKKyAgIGxpY2Vuc2UgYnV0IGFsc28gdGhl IGRhdGUgYW5kIGFtb3VudCBvZiB0aGUgbGFzdCBtYWludGVuYW5jZSBwYXltZW50LAorICAgYW5k IHRvIGFkZCBuZXcgZmllbGRzIGZvciBzb3J0aW5nIGJ5IGFubml2ZXJzYXJ5IChtb250aCBhbmQg ZGF5KToKKworIyF1c3IvbG9jYWwvYmluL2tlcm1pdCArCitjZCB+L3NvbWVkaXJlY3RvcnkgICAg ICAgICAgICAgICAgICAgICAgIyBDRCB0byBhcHByb3ByaWF0ZSBkaXJlY3RvcnkKK2lmIGZhaWwg ZXhpdCAxICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBkaWQKKy5maWxl bmFtZSA6PSBcJTEgICAgICAgICAgICAgICAgICAgICAgICAjIEZpbGVuYW1lIGZyb20gY29tbWFu ZCBsaW5lCitpZiBub3QgZGVmIGZpbGVuYW1lIHsgICAgICAgICAgICAgICAgICAgIyBJZiBub25l IGdpdmUgdXNhZ2UgbWVzc2FnZQorICAgIGV4aXQgMSAiVXNhZ2U6IFwlMDogaW5maWxlIFsgb3V0 ZmlsZSBdIgorfQorZm9wZW4gL3JlYWQgXCVjIFxtKGZpbGVuYW1lKSAgICAgICAgICAgICMgT3Bl biB0aGUgaW5wdXQgQ1NWIGZpbGUKK2lmIGZhaWwgZXhpdCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIE1ha2Ugc3VyZSB3ZSBkaWQKKworLm91dHB1dCA6PSBcJTIgICAgICAgICAgICAgICAg ICAgICAgICAgICMgT3V0cHV0IGZpbGVuYW1lIGZyb20gY29tbWFuZCBsaW5lCitpZiBub3QgZGVm IG91dHB1dCB7ICAgICAgICAgICAgICAgICAgICAgIyBTdXBwbHkgb25lIGlmIG5vdCBnaXZlbgor ICAgIC5vdXRwdXQgOj0gTmV3X1xtKGZpbGVuYW1lKQorfQorZm9wZW4gL3dyaXRlIFwlbyBcbShv dXRwdXQpICAgICAgICAgICAgICMgT3BlbiBvdXRwdXQgZmlsZQoraWYgZmFpbCBleGl0ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBkaWQKKworLnNlcmlhbCA9IDAw MDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICMgSW5pdGlhbGl6ZSBzZXJpYWwgbnVtYmVyCisu bGljZW5zZXMgPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgbGljZW5zZSBjb3Vu dGVyCisKK2ZyZWFkIC9saW5lIFwlYyBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgIyBGaXJz dCBsaW5lIGlzIGNvbHVtbiBsYWJlbHMKK2lmIGZhaWwgZXhpdCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBDaGVjaworZndyaXRlIC9saW5lIFwlbyAiXG0obGluZSksQU1NX0RELEFZ WVlZIiAgICAjIFdyaXRlIG5ldyBsYWJlbHMgbGluZQorCisjIFJlbWFpbmluZyBsaW5lcyBhcmUg bGljZW5zZSBwdXJjaGFzZXMgKEs5NUIpIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZQorIyBtYWlu dGVuYW5jZSBpbnZvaWNlcyAoSzk1Qk0pIGZvciBlYWNoIGxpY2Vuc2UuCisKKy5kYXRlcGFpZCA9 IDAwLzAwLzAwMDAgICAgICAgICAgICAgICAgICAjIEluaXRpYWxpemUgbGFzdCBtYWludCBwYXlt ZW50IGRhdGUKKy5hbXRwYWlkID0gJDAuMDAgICAgICAgICAgICAgICAgICAgICAgICAjIEluaXRp YWxpemUgbGFzdCBtYWludCBwYXltZW50IGFtb3VudAorc2V0IGZsYWcgb2ZmICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgRm9yIHJlbWVtYmVyaW5nIHdlJ3JlIGF0IGVuZCBvZiBmaWxlCit3 aGlsZSBub3QgZmxhZyB7ICAgICAgICAgICAgICAgICAgICAgICAgIyBMb29wIHRvIHJlYWQgYWxs IHJlY29yZHMKKyAgICBmcmVhZCAvbGluZSBcJWMgbGluZSAgICAgICAgICAgICAgICAjIFJlYWQg YSByZWNvcmQKKyAgICBpZiBmYWlsIHNldCBmbGFnIG9uICAgICAgICAgICAgICAgICAjIElmIEVP RiBzZXQgZmxhZyBmb3IgbGF0ZXIKKyAgICAubiA6PSBcZnNwbGl0KFxtKGxpbmUpLCZhLFw0NCxD U1YpICAjIEJyZWFrIHJlY29yZCBpbnRvIGFycmF5CisgICAgaWYgKCBmbGFnIHx8IGVxdSAiXCZh WzNdIiAiSzk1QiIgKSB7ICMgTGljZW5zZSBvciBFT0YKKyAgICAgICAgaWYgZmFpbCBleGl0IDEg IkZBSUxFRDogXHYobGFzdGNvbW1hbmQpIgorICAgICAgICBpZiBsaWNlbnNlcyB7ICAgICAgICAg ICAgICAgICAgICMgSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGxpY2Vuc2UKKyAgICAgICAgICAg IC5cJnhbNV0gOj0gXG0oYW10cGFpZCkgICAgICAjIFN1YnN0aXR1dGUgbW9zdCByZWNlbnQgYW1v dW50IHBhaWQKKyAgICAgICAgICAgIC5cJnhbMjFdIDo9IFxtKGRhdGVwYWlkKSAgICAjIFN1YnN0 aXR1dGUgbW9zdCByZWNlbnQgZGF0ZSBwYWlkCisgICAgICAgICAgICB2b2lkIFxmc3BsaXQoXCZ4 WzE4XSwmZCwvKSAgIyBCcmVhayB1cCBvcmlnaW5hbCAoYW5uaXZlcnNhcnkpIGRhdGUKKyAgICAg ICAgICAgICMgYW5kIHB1dCBtbV9kZCBhbmQgeXl5eSBpbiBzZXBhcmF0ZSBmaWVsZHMgZm9yIHNv cnRpbmcuLi4KKyAgICAgICAgICAgIGZ3cml0ZSAvbGluZSBcJW8gIlxmam9pbigmeCxDU1YpLFxm bHBhZChcJmRbMV0sMiwwKV9cZmxwYWQoXCZkWzJdLDIsCiswKSxcJmRbM10iCisgICAgICAgICAg ICBpZiBmYWlsIGV4aXQgMSBXUklURSAgICAgICAgIyBDaGVjayBmb3IgZXJyb3IKKyAgICAgICAg ICAgIHhlY2hvIC4gICAgICAgICAgICAgICAgICAgICAjIFNob3cgcHJvZ3Jlc3MgYXMgb25lIGRv dCBwZXIgcmVjb3JkCisgICAgICAgIH0KKyAgICAgICAgaWYgZmxhZyBicmVhayAgICAgICAgICAg ICAgICAgICAjIFdlJ3JlIGF0IEVPRiBzbyB3ZSdyZSBmaW5pc2hlZAorICAgICAgICBpbmNyZW1l bnQgbGljZW5zZXMgICAgICAgICAgICAgICMgTmV3IGxpY2Vuc2UgLSBjb3VudCBpdAorICAgICAg ICBhcnJheSBjb3B5ICZhICZ4ICAgICAgICAgICAgICAgICMgS2VlcCB0aGlzIHJlY29yZCB3aGls ZSByZWFkaW5nIG5leHQKKyAgICAgICAgLnNlcmlhbCA6PSBcJmFbNl0gICAgICAgICAgICAgICAj IFJlbWVtYmVyIHNlcmlhbCBudW1iZXIKKyAgICAgICAgLmRhdGVwYWlkID0gMDAvMDAvMDAwMCAg ICAgICAgICAjIEluaXRpYWwgbWFpbnRlbmFuY2UgcGF5bWVudCBkYXRlCisgICAgICAgIC5hbXRw YWlkID0gJDAuMDAgICAgICAgICAgICAgICAgIyBhbmQgYW1vdW50CisgICAgICAgIGNvbnRpbnVl ICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgZ28gYmFjayB0byByZWFkIG5leHQgcmVjb3Jk CisgICAgfQorICAgIGlmIG5vdCBlcSAiXG0oc2VyaWFsKSIgIlwmYVs2XSIgeyAgICMgQ2F0Y2gg b3V0LW9mLXNlcXVlbmNlIHJlY29yZAorICAgICAgICBlY2hvCisgICAgICAgIGVjaG8gIlNFUVVF TkNFOiBcbShzZXJpYWwpLi5cJmFbNl06IFwmYVs3XSBbXCZhWzFdXSIKKyAgICAgICAgY29udGlu dWUKKyAgICB9CisgICAgaWYgZXF1ICJcJmFbNV0iICIiIC5cJmFbNV0gPSAkMC4wMCAgIyBJZiBh bW91bnQgaXMgZW1wdHkgbWFrZSBpdCAkMC4wMAorICAgIGlmIG5vdCBlcXUgIlwmYVs1XSIgIiQw LjAwIiB7ICAgICAgICMgSWYgYW1vdW50IGlzIG5vdCAkMC4wMAorICAgICAgICAuZGF0ZXBhaWQg Oj0gXCZhWzIxXSAgICAgICAgICAgICMgcmVtZW1iZXIgZGF0ZSBwYWlkCisgICAgICAgIC5hbXRw YWlkIDo9IFwmYVs1XSAgICAgICAgICAgICAgIyBhbmQgYW1vdW50IHBhaWQKKyAgICB9Cit9Citm Y2xvc2UgQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEb25lIC0gY2xvc2UgYWxs IGZpbGVzIGFuZCBleGl0CitleGl0IDAgRG9uZS4KKworCisgICBUaGUgcmVzdWx0IGltcG9ydHMg YmFjayBpbnRvIEV4Y2VsLCB3aGVyZSBpdCBjYW4gYmUgc29ydGVkLCBmb3JtYXR0ZWQsCisgICBv ciBvdGhlcndpc2UgbWFuaXB1bGF0ZWQgYXMgZGVzaXJlZC4KKworVXNpbmcgQ1NWIEZpbGVzOiBF eHRlbmRpbmcgS2VybWl0J3MgRGF0YSBTdHJ1Y3R1cmVzCisKKyAgIE5vdyB0aGF0IHdlIGNhbiBw YXJzZSBhIENTViByZWNvcmQsIHdoYXQgd291bGQgd2UgZG8gd2l0aCBhIENTViBmaWxlIC0KKyAg IHRoYXQgaXMsIGEgc2VxdWVuY2Ugb2YgcmVjb3Jkcz8gSWYgd2UgbmVlZGVkIGFsbCB0aGUgZGF0 YSBhdmFpbGFibGUgYXQKKyAgIG9uY2UsIHdlIHdvdWxkIHdhbnQgdG8gbG9hZCBpdCBpbnRvIGEg bWF0cml4IG9mIChyb3csY29sdW1uKSB2YWx1ZXMuCisgICBCdXQgS2VybWl0IGRvZXNuJ3QgaGF2 ZSBtYXRyaWNlcy4gT3IgZG9lcyBpdD8KKworICAgS2VybWl0IGhhcyBzZXZlcmFsIGJ1aWx0LWlu IGRhdGEgdHlwZXMsIGJ1dCB5b3UgY2FuIGludmVudCB5b3VyIG93bgorICAgZGF0YSB0eXBlcyBh cyBuZWVkZWQgdXNpbmcgS2VybWl0J3MgbWFjcm8gZmVhdHVyZToKKworZGVmaW5lIHZhcmlhYmxl bmFtZSB2YWx1ZQorCisgICBGb3IgZXhhbXBsZToKKworZGVmaW5lIGFscGhhYmV0IGFiY2RlZmdo aWprbG1ub3BxcnN0dXZ3eHl6CisKKyAgIFRoaXMgZGVmaW5lcyBhIG1hY3JvIG5hbWVkIGFscGhh YmV0IGFuZCBnaXZlcyBpdCB0aGUgdmFsdWUKKyAgIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6 LiBBIG1vcmUgY29udmVuaWVudCBub3RhdGlvbiAoYWRkZWQgaW4KKyAgIEMtS2VybWl0IDcuMCwg c2VlIFsxMTFdVGFibGUgMikgZm9yIHRoaXMgaXM6CisKKy5hbHBoYWJldCA9IGFiY2RlZmdoaWpr bG1ub3BxcnN0dXZ3eHl6CisKKyAgIFRoZSB0d28gYXJlIGV4YWN0bHkgZXF1aXZhbGVudDogdGhl eSBtYWtlIGEgbGl0ZXJhbCBjb3B5IHRoZSAicmlnaHQKKyAgIGhhbmQgc2lkZSIgYXMgdGhlIHZh bHVlIG9mIHRoZSBtYWNyby4gVGhlbiB5b3UgY2FuIHJlZmVyIHRvIHRoZSBtYWNybworICAgYW55 d2hlcmUgaW4gYSBLZXJtaXQgY29tbWFuZCBhcyAiXG0obWFjcm9uYW1lKSI6CisKK2VjaG8gIkFs cGhhYmV0ID0gXG0oYWxwaGFiZXQpIgorCisgICBUaGVyZSBpcyBhIHNlY29uZCB3YXkgdG8gZGVm aW5lIGEgbWFjcm8sIHdoaWNoIGlzIGxpa2UgdGhlIGZpcnN0IGV4Y2VwdAorICAgdGhhdCB0aGUg cmlnaHQtaGFuZCBzaWRlIGlzIGV2YWx1YXRlZCBmaXJzdDsgdGhhdCBpcywgYW55IHZhcmlhYmxl CisgICByZWZlcmVuY2VzIG9yIGZ1bmN0aW9uIGNhbGxzIGluIHRoZSByaWdodC1oYW5kIHNpZGUg YXJlIHJlcGxhY2VkIGJ5CisgICB0aGVpciB2YWx1ZXMgYmVmb3JlIHRoZSByZXN1bHQgaXMgYXNz aWduZWQgdG8gdGhlIG1hY3JvLiBUaGUgY29tbWFuZAorICAgZm9yIHRoaXMgaXMgQVNTSUdOIHJh dGhlciB0aGFuIERFRklORToKKworZGVmaW5lIGFscGhhYmV0IGFiY2RlZmdoaWprbG1ub3BxcnN0 dXZ3eHl6Cithc3NpZ24gYmFja3dhcmRzIFxmcmV2ZXJzZShcbShhbHBoYWJldCkpCitlY2hvICJB bHBoYWJldCBiYWNrd2FyZHMgPSBcbShiYWNrd2FyZHMpIgorCisgICB3aGljaCBwcmludHM6CisK K0FscGhhYmV0IGJhY2t3YXJkcyA9IHp5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhCisKKyAgIFRo aXMga2luZCBvZiBhc3NpZ25tZW50IGNhbiBhbHNvIGJlIGRvbmUgbGlrZSB0aGlzOgorCisuYWxw aGFiZXQgPSBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorLmJhY2t3YXJkcyA6PSBcZnJldmVy c2UoXG0oYWxwaGFiZXQpKQorCisgICBbMTEyXUFueSBjb21tYW5kIHN0YXJ0aW5nIHdpdGggYSBw ZXJpb2QgaXMgYW4gYXNzaWdubWVudCwgYW5kIHRoZQorICAgb3BlcmF0b3IgKD0gb3IgOj0pIHRl bGxzIHdoYXQgdG8gZG8gd2l0aCB0aGUgcmlnaHQtaGFuZCBzaWRlIGJlZm9yZQorICAgbWFraW5n IHRoZSBhc3NpZ25tZW50LgorCisgICBJbiBib3RoIHRoZSBERUZJTkUgYW5kIEFTU0lHTiBjb21t YW5kcywgdGhlIHZhcmlhYmxlIG5hbWUgaXRzZWxmIGlzCisgICB0YWtlbiBsaXRlcmFsbHkuIEl0 IGlzIGFsc28gcG9zc2libGUsIGhvd2V2ZXIsIHRvIGhhdmUgS2VybWl0IGNvbXB1dGUKKyAgIHRo ZSB2YXJpYWJsZSBuYW1lLiBUaGlzIGlzIGRvbmUgKGFzIGRlc2NyaWJlZCBpbiBbMTEzXVVzaW5n IEMtS2VybWl0LAorICAgMm5kIEVkLiwgcC40NTcpLCB1c2luZyBwYXJhbGxlbCBjb21tYW5kcyB0 aGF0IHN0YXJ0IHdpdGggdW5kZXJzY29yZToKKyAgIF9ERUZJTkUgYW5kIF9BU1NJR04gKGFsaWFz IF9ERUYgYW5kIF9BU0cpLiBUaGVzZSBhcmUganVzdCBsaWtlIERFRklORQorICAgYW5kIEFTU0lH TiBleGNlcHQgdGhleSBldmFsdWF0ZSB0aGUgdmFyaWFibGUgbmFtZSBiZWZvcmUgbWFraW5nIHRo ZQorICAgYXNzaWdubWVudC4gRm9yIGV4YW1wbGU6CisKK2RlZmluZSBcJWEgb25lCitfZGVmaW5l IFwlYVwlYVwlYSAxMTEKKworICAgd291bGQgY3JlYXRlIGEgbWFjcm8gbmFtZWQgT05FT05FT05F IHdpdGggYSB2YWx1ZSBvZiAxMTEsIGFuZDoKKworZGVmaW5lIFwlYSBvbmUKK2RlZmluZSBudW1i ZXIgMTExCitfYXNzaWduIFwlYVwlYVwlYSBcbShudW1iZXIpCisKKyAgIHdvdWxkIGNyZWF0ZSB0 aGUgc2FtZSBtYWNybyB3aXRoIHRoZSBzYW1lIHZhbHVlLCBidXQ6CisKK2RlZmluZSBcJWEgb25l CitkZWZpbmUgbnVtYmVyIDExMQorX2RlZmluZSBcJWFcJWFcJWEgXG0obnVtYmVyKQorCisgICB3 b3VsZCBnaXZlIHRoZSBtYWNybyBhIHZhbHVlIG9mICJcbShudW1iZXIpIi4KKworICAgWW91IGNh biB1c2UgdGhlIF9BU1NJR04gY29tbWFuZCB0byBjcmVhdGUgYW55IGtpbmQgb2YgZGF0YSBzdHJ1 Y3R1cmUKKyAgIHlvdSB3YW50OyB5b3UgY2FuIGZpbmQgc29tZSBleGFtcGxlcyBpbiB0aGUgWzEx NF1PYmplY3QtT3JpZW50ZWQKKyAgIFByb2dyYW1taW5nIHNlY3Rpb24gb2YgdGhlIFsxMTVdS2Vy bWl0IFNjcmlwdCBMaWJyYXJ5LiBJbiB0aGUgZm9sbG93aW5nCisgICBwcm9ncmFtIHdlIHVzZSB0 aGlzIGNhcGFiaWxpdHkgdG8gY3JlYXRlIGEgdHdvLWRpbWVuc2lvbmFsIGFycmF5LCBvcgorICAg bWF0cml4LCB0byBob2xkIHRoZSBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBDU1YgZmlsZSwgYW5k IHRoZW4gdG8KKyAgIGRpc3BsYXkgdGhlIG1hdHJpeDoKKworZm9wZW4gL3JlYWQgXCVjIGRhdGEu Y3N2ICAgICAgICAgICAgICAgICMgT3BlbiBDU1YgZmlsZQoraWYgZmFpbCBleGl0IDEKKworLlwl ciA9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUm93CisuXCVtID0gMCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYXhpbXVtIGNvbHVtbnMKK3doaWxlIHRydWUg eworICAgIGZyZWFkIC9saW5lIFwlYyBsaW5lICAgICAgICAgICAgICAgICMgUmVhZCBhIHJlY29y ZAorICAgIGlmIGZhaWwgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgICMgRW5kIG9mIGZpbGUK KyAgICAuXCVuIDo9IFxmc3BsaXQoXG0obGluZSksJmEsXDQ0LENTVikgIyBTcGxpdCByZWNvcmQg aW50byBpdGVtcworICAgIGluY3IgXCVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ291 bnQgdGhpcyByb3cKKyAgICBmb3IgXCVpIDEgXCVuIDEgeyAgICAgICAgICAgICAgICAgICAjIEFz c2lnbiBpdGVtcyB0byB0aGlzIHJvdyBvZiBtYXRyaXgKKyAgICAgICAgX2FzZyBhW1wlcl1bXCVp XSBcJmFbXCVpXQorICAgIH0KKyAgICBpZiA+IFwlaSBcJW0geyAuXCVtIDo9IFwlaSB9ICAgICAg ICAjIFJlbWVtYmVyIHdpZHRoIG9mIHdpZGVzdCByb3cKK30KK2ZjbG9zZSBcJWMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIENsb3NlIENTViBmaWxlCitkZWNyZW1lbnQgXCVtICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyAoYmVjYXVzZSBvZiBob3cgRk9SIGxvb3Agd29ya3MpCitl Y2hvIE1BVFJJWCBBIFJPV1M6IFwlciBDT0xVTU5TOiBcJW0gICAgIyBTaG93IHRoZSBtYXRyaXgK KworZm9yIFwlaSAxIFwlciAxIHsgICAgICAgICAgICAgICAgICAgICAgICMgTG9vcCB0aHJvdWdo IHJvd3MKKyAgICBmb3IgXCVqIDEgXCVtIDEgeyAgICAgICAgICAgICAgICAgICAjIExvb3AgdGhy b3VnaCBjb2x1bW5zIG9mIGVhY2ggcm93CisgICAgICAgIHhlY2hvICJcZmxwYWQoXG0oYVtcJWld W1wlal0pLDYpIgorICAgIH0KKyAgICBlY2hvCit9CitleGl0IDAKKworICAgVGhlIG1hdHJpeCBp cyBjYWxsZWQgYSBhbmQgaXRzIGVsZW1lbnRzIGFyZSBhWzFdWzFdLCBhWzFdWzJdLCBhWzFdWzNd LAorICAgLi4uIGFbMl1bMV0sIGV0YywgYW5kIHlvdSBjYW4gdHJlYXQgdGhpcyBkYXRhIHN0cnVj dHVyZSBleGFjdGx5IGxpa2UgYQorICAgdHdvLWRpbWVuc2lvbmFsIGFycmF5LCBpbiB3aGljaCB5 b3UgY2FuIHJlZmVyIHRvIGFueSBlbGVtZW50IGJ5IGl0cyAiWAorICAgYW5kIFkgY29vcmRpbmF0 ZXMiLiBGb3IgZXhhbXBsZSwgaWYgdGhlIENTViBmaWxlIGNvbnRhaW5lZCBudW1lcmljIGRhdGEK KyAgIHlvdSBjb3VsZCBjb21wdXRlIHJvdyBhbmQgY29sdW1uIHN1bXMgdXNpbmcgc2ltcGxlIEZP UiBsb29wcyBhbmQKKyAgIEtlcm1pdCdzIGJ1aWx0LWluIG9uZS1kaW1lbnNpb25hbCBhcnJheSBk YXRhIHR5cGU6CisKK2RlY2xhcmUgXCZyW1wlcl0gICAgICAgICAgICAgICAgICAgICAgICAjIE1h a2UgYW4gYXJyYXkgZm9yIHRoZSByb3cgc3VtcworZGVjbGFyZSBcJmNbXCVtXSAgICAgICAgICAg ICAgICAgICAgICAgICMgTWFrZSBhbiBhcnJheSBmb3IgdGhlIGNvbHVtbiBzdW1zCitmb3IgXCVp IDEgXCVyIDEgeyAgICAgICAgICAgICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggcm93cworICAg IGZvciBcJWogMSBcJW0gMSB7ICAgICAgICAgICAgICAgICAgICMgTG9vcCB0aHJvdWdoIGNvbHVt bnMgb2YgZWFjaCByb3cKKyAgICAgICAgaW5jcmVtZW50IFwmcltcJWldIFxtKGFbXCVpXVtcJWpd KSAjIEFjY3VtdWxhdGUgcm93IHN1bQorICAgICAgICBpbmNyZW1lbnQgXCZjW1wlal0gXG0oYVtc JWldW1wlal0pICMgQWNjdW11bGF0ZSBjb2x1bW4gc3VtCisgICAgfQorfQorCisgICBOb3RlIHRo YXQgdGhlIHN1bSBhcnJheXMgZG9uJ3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvIGJl Y2F1c2UKKyAgIEtlcm1pdCdzIElOQ1JFTUVOVCBjb21tYW5kIHRyZWF0cyBlbXB0eSBkZWZpbml0 aW9ucyBhcyB6ZXJvLgorCitEZW1vbnN0cmF0aW9uIFNjcmlwdHMgZm9yIFdlYm1hc3RlcnMKKwor ICAgVGhlc2Ugc2NyaXB0cyBhbGwgdXNlIG5ldyBmZWF0dXJlcyBvZiBDLUtlcm1pdCA5LjAuCisK KyAgIFsxMTZda3NpdGVtYXAKKyAgICAgICAgICBBIEMtS2VybWl0IDkuMCBzY3JpcHQgdG8gYnVp bGQgc2l0ZW1hcC54bWwgZm9yIGEgd2Vic2l0ZSwKKyAgICAgICAgICBjb21wbGV0ZSB3aXRoIEdv b2dsZSBpbWFnZSBleHRlbnNpb25zICh0aGlzIGlzIHRoZSBmaWxlIHVzZWQgYnkKKyAgICAgICAg ICB3ZWJtYXN0ZXJzIHRvIGdldCB0aGVpciBzaXRlcyBjcmF3bGVkIGFuZCBpbmRleGVkIG9wdGlt YWxseSkuCisKKyAgIFsxMTddVGhlIFdlYmxvZyBTY3JpcHQKKyAgICAgICAgICBSZWFkcyBhIHdl YiBsb2csIGV4dHJhY3RzIHRoZSBHb29nbGUgc2VhcmNoZXMsIG5vcm1hbGl6ZXMgdGhlCisgICAg ICAgICAgc2VhcmNoIHN0cmluZ3MsIGFuZCBwcmludHMgdGhlIHRvcCAyMCBzZWFyY2hlcywgYWxv bmcgd2l0aCB0aGVpcgorICAgICAgICAgIGNvdW50cy4KKworICAgWzExOF1UaGUgQW1hem9uIFNj cmlwdAorICAgICAgICAgIFJlYWRzIGFuIEFtYXpvbiBBc3NvY2lhdGUgb3JkZXJzIHJlcG9ydCBh bmQgbGlzdHMgdGhlIHByb2R1Y3RzCisgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIg b2Ygb3JkZXJzIGZvciBlYWNoLCBvciB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgY2xpY2tzIG9u IGVhY2guCisKKyAgIFsxMTldUGhvdG9hbGJ1bQorICAgICAgICAgIE1ha2VzIGEgd2Vic2l0ZSBm cm9tIGEgY29sbGVjdGlvbiBvZiBKUEcgaW1hZ2VzLgorCisgICAgICAgICAgICBbMTIwXUhvbWUg WzEyMV1LZXJtaXQgOTUgWzEyMl1DLUtlcm1pdCBbMTIzXVNjcmlwdHMgWzEyNF1DdXJyZW50Cisg ICBbMTI1XU5ldyBbMTI2XUZBUSAgWzEyN11TdXBwb3J0CisKKworICAgIEMtS2VybWl0IDkuMCAv IFsxMjhdVGhlIEtlcm1pdCBQcm9qZWN0IC8gWzEyOV1Db2x1bWJpYSBVbml2ZXJzaXR5IC8KKyAg ICBbMTMwXWtlcm1pdEBjb2x1bWJpYS5lZHUgLyBbMTMxXXZhbGlkYXRlCisKK1JlZmVyZW5jZXMK KworICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCisgICAyLiBtYWlsdG86a2VybWl0QGNv bHVtYmlhLmVkdQorICAgMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0 bWwKKyAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAorICAgNS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICAgNi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCisgICA3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1sCisgICA4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAorICAgOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2ZhcS5odG1sCisgIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv c3VwcG9ydC5odG1sCisgIDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9jdS9jb21wdXRpbmdo aXN0b3J5L2Jvb2tzLyNtZW5hZ2VyaWUKKyAgMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9jazkwdGFibGVzLmh0bWwKKyAgMTMuIGh0dHA6Ly93d3cuYW1hem9uLmNvbS9ncC9wcm9k dWN0LzE1NTU1ODE2NDE/aWU9VVRGOCZ0YWc9YWxlaWRtb3JlbGRvbS0yMCZsaW5rQ29kZT1hczIm Y2FtcD0xNzg5JmNyZWF0aXZlPTkzMjUmY3JlYXRpdmVBU0lOPTE1NTU1ODE2NDEKKyAgMTQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwjZG93bmxvYWQKKyAgMTUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNMYXJnZUZpbGVz CisgIDE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjVGVz dExhcmdlRmlsZXMKKyAgMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 OTAuaHRtbCNCaWdudW1zCisgIDE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tl cm1pdDkwLmh0bWwjZm9yY2UzCisgIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDkwLmh0bWwjVmFyZXZhbAorICAyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQ5MC5odG1sI3JlbmFtZQorICAyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ5MC5odG1sI090aGVyCisgIDIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjSW5jb21wYXRpYmlsaXRpZXMKKyAgMjMuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNOb3RJbjkuMAorICAyNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI0xvb3NlRW5kCisgIDI1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjcG9wCisgIDI2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjSFBzd2l0Y2gK KyAgMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNpTE8K KyAgMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0OTAuaHRtbCNSb2xt CisgIDI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjQ1NW CisgIDMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjT3Ro ZXJkZW1vcworICAzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwu aHRtbAorICAzMi4gaHR0cDovL3d3dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvQjAwMkFDUEY5TT9p ZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRp dmU9MzkwOTU3JmNyZWF0aXZlQVNJTj1CMDAyQUNQRjlNCisgIDMzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwKKyAgMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbAorICAzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2Nrc2NyaXB0cy5odG1sCisgIDM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9jdS9j b21wdXRpbmdoaXN0b3J5L2RlYzIwLmh0bWwKKyAgMzcuIG1haWx0bzpmZGNAY29sdW1iaWEuZWR1 CisgIDM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKKyAgMzkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdS1ic2QtbGljZW5zZS5odG1sCisgIDQwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjTGFyZ2VGaWxlcwor ICA0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrOTB0YWJsZXMuaHRtbAorICA0 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrOTB0YWJsZXMuaHRtbAorICA0My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI2ZvcmNlMworICA0 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI1ZhcmV2YWwK KyAgNDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3JlbmFtZS5odG1sCisgIDQ2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3N2Lmh0bWwKKyAgNDcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jc2V0bmFtZXMuaHRtbAorICA0OC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sI0hQc3dpdGNoCisgIDQ5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tkYWlseS5odG1sCisgIDUwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY3UtYnNkLWxpY2Vuc2UuaHRtbAorICA1MS4gaHR0cDovL3d3dy5v cGVuc291cmNlLm9yZy8KKyAgNTIuIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2NrOTB0YWJs ZXMuaHRtbCNMRgorICA1My4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvdXRpbHMv YmlnZmlsZS5jCisgIDU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDgw Lmh0bWwjeDkKKyAgNTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazkwdGFibGVz Lmh0bWwjTEYKKyAgNTYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L3NjcmlwdHMv Y2tlcm1pdC9lYXN0ZXIyCisgIDU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZW0t YXBleC5odG1sCisgIDU4LiBodHRwOi8vd3d3LmlyaWRpdW0uY29tLworICA1OS4gaHR0cDovL3Nj aWVuY2UxLm5hc2EuZ292L3NjaWVuY2UtbmV3cy9zY2llbmNlLWF0LW5hc2EvMjAwNi8wOWphbl9l bGVjdHJpY2h1cnJpY2FuZXMvCisgIDYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv ZWsuaHRtbAorICA2MS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZWsvc2ltaXJp ZC8KKyAgNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9lay5odG1sCisgIDYzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuMTAuMTAKKyAg NjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jc3YuaHRtbAorICA2NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ3MC5odG1sI3gxLjExCisgIDY2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwKKyAgNjcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbCN4OQorICA2OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NzZXRuYW1lcy5odG1sCisgIDY5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tkYWlseS5odG1sCisgIDcwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvZnRwY2xpZW50Lmh0bWwKKyAgNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2RhaWx5Lmh0bWwKKyAgNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9jc2V0bmFtZXMuaHRtbAorICA3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ5MC5odG1sI090aGVyZGVtb3MKKyAgNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9pbnB1dF9ub3dyYXAuaHRtbAorICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvfmZk Yy9tbS9pbmRleC5odG1sCisgIDc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvcGhv dG9hbGJ1bS5odG1sCisgIDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9+ZmRjL2tlcm1pdC9s b2dzZXJpYWwuaHRtbAorICA3OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJt aXQ5MC5odG1sI21lc3NhZ2UKKyAgNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0OTAuaHRtbCNOb3RJbjkuMAorICA4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2Nzdi5odG1sI2pvaW4KKyAgODEuIGh0dHA6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3Zl bmFtZS5jZ2k/bmFtZT1DVkUtMjAwOS0zNzY3CisgIDgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvZnRwL3Rlc3QvdGFyL3guemlwCisgIDgzLiBodHRwOi8vd3d3Lm1zZWNsYWIuY29t Lz9wPTE4MAorICA4NC4gaHR0cDovL3d3dy50aGVyZWdpc3Rlci5jby51ay8yMDA5LzA3LzMwL3Vu aXZlcnNhbF9zc2xfY2VydGlmaWNhdGUvCisgIDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDkwLmh0bWwjSFBzd2l0Y2gKKyAgODYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9lbS1hcGV4Lmh0bWwKKyAgODcuIGh0dHA6Ly93d3cuZnJlZWJzZC5vcmcvcmVs ZWFzZXMvOC4wUi9hbm5vdW5jZS5odG1sCisgIDg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvc2VjdXJpdHk4MS5odG1sI3g0LjIuMworICA4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sI3g5CisgIDkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDguNy4yCisgIDkxLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDgwLmh0bWwjeDkKKyAgOTIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3BhY2thZ2VzLmh0bWwKKyAgOTMuIGh0dHA6Ly9kb2NzLmhwLmNvbS9lbi9C OTEwNi05MDAxMy9wdHkuNy5odG1sCisgIDk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvdGVzdC90ZXh0L2NrYzI5OS50eHQKKyAgOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC90ZXN0L3RleHQvY2t1dGlvLmMKKyAgOTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L35m ZGMvbW0vcG9wCisgIDk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9+ZmRjL21tLworICA5OC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvfmZkYy9tbS9tYWlsY2hlY2sKKyAgOTkuIGh0dHA6Ly9l bi53aWtpcGVkaWEub3JnL3dpa2kvVHJpdmlhbF9GaWxlX1RyYW5zZmVyX1Byb3RvY29sCisgMTAw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZnRwL3NjcmlwdHMvY2tlcm1pdC9nZXRo cGNvbmZpZworIDEwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cC9zY3JpcHRz L2NrZXJtaXQvVGVzdFN3aXRjaGVzLnR4dAorIDEwMi4gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcv d2lraS9TdGFuZGFyZF9zdHJlYW1zCisgMTAzLiBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9j dWRvY3MvaWxvc2V0dXAuaHRtbAorIDEwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2N1ZG9jcy9jYnguaHRtbAorIDEwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZXJtaXQ5MC5odG1sI3JlY29yZAorIDEwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ5MC5odG1sI2pvaW4KKyAxMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0OTAuaHRtbCNmaWxlCisgMTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdDgwLmh0bWwjZmpvaW4KKyAxMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0OTAuaHRtbCNydWxlcworIDExMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQ4MC5odG1sI2Zqb2luCisgMTExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwjdmFyYXNnCisgMTEyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwjeDcuOQorIDExMy4gaHR0cDovL3d3dy5hbWF6b24u Y29tL2dwL3Byb2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxp bmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFTSU49MTU1NTU4MTY0 MQorIDExNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sI29v cHMKKyAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3NjcmlwdHMuaHRtbAor IDExNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2tzaXRlbWFwLmh0bWwKKyAxMTcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC93ZWJsb2cuaHRtbAorIDExOC4gaHR0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUvZnRwL3NjcmlwdHMvY2tlcm1pdC9hbWF6b24KKyAxMTkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9waG90b2FsYnVtLmh0bWwKKyAxMjAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgMTIxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKKyAxMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3NjcmlwdHMuaHRtbAorIDEyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1 cnJlbnQuaHRtbAorIDEyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3doYXRzbmV3 Lmh0bWwKKyAxMjYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mYXEuaHRtbAorIDEy Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAorIDEyOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAxMjkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1LworIDEzMC4gbWFpbHRvOmtlcm1pdEBjb2x1bWJpYS5lZHUKKyAxMzEuIGh0 dHA6Ly92YWxpZGF0b3IudzMub3JnL2NoZWNrP3VyaT1odHRwJTNBJTJGJTJGa2VybWl0LmNvbHVt YmlhLmVkdSUyRmNrZXJtaXQ5MC5odG1sCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja2VybW9kLmluaSBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2tlcm1vZC5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNmIxM2M4NQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2tlcm1vZC5pbmkKQEAgLTAsMCArMSw4IEBACis7IEZpbGUgQ0tFUk1P RC5JTkksIFNhbXBsZSBDLUtlcm1pdCA3LjAgY3VzdG9taXphdGlvbiBmaWxlLgorOworZWNobwor ZWNobyBUaGUgdmVyeSBsb25nIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZpbGUgdGhhdCB3YXMg ZGlzdHJpYnV0ZWQKK2VjaG8gd2l0aCBDLUtlcm1pdCA2LCA3LCBhbmQgOCBpcyBubyBsb25nZXIg cmVjb21tZW5kZWQgYXMgInN0YW5kYXJkIiwKK2VjaG8gc2luY2UgaXRzIGZlYXR1cmVzIHdlcmUg bGl0dGxlIHVzZWQuICBJdCBpcyBzdGlsbCBhdmFpbGFibGUgaW4KK2VjaG8gdGhlIEMtS2VybWl0 IGRpc3RyaWJ1dGlvbiBhcyBvY2tlcm1vZC5pbmkuCitlY2hvCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VhdDIuaCBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uODY3OWE5OQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXQyLmgKQEAgLTAsMCArMSwzNTggQEAKKy8qCisgIEMg SyBVIEEgVCAyIC4gSCAgLS0gIEtlcmJlcm9zIGhlYWRlcnMgZm9yIEMtS2VybWl0CisKKyAgQ29w eXJpZ2h0IChDKSAxOTg1LCAyMDA5LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNp dHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNl ZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4 dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4K KworICBBdXRob3I6CisgICAgS2VyYmVyb3MgSVYgYW5kIFYgaW50ZXJncmF0aW9uLgorICAgIEpl ZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pCisgICAgU2VjdXJl IEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5CisqLworLyoKKyAqIEJhc2VkIG9uIGEgY29u Y2F0ZW5hdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IGluY2x1ZGUgZmlsZXMgZGlzdHJpYnV0ZWQgd2l0 aAorICogdGhlIEtlcmJlcm9zIDUgTlQgQWxwaGEgMiBUZWxuZXQgcGFja2FnZSBmcm9tIE1JVC4K KyAqLworCisjaWZuZGVmIEtSQjVfVEVMTkVUX0gKKyNkZWZpbmUgS1JCNV9URUxORVRfSAorLyot CisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhl IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u CisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdlbWVudDoKKyAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogICAgICBDYWxpZm9ybmlhLCBCZXJrZWxl eSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVu aXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRS SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogICAg ICBAKCMpZW5jcnlwdC5oICAgOC4xIChCZXJrZWxleSkgNi80LzkzCisgKi8KKworLyoKKyAqIENv cHlyaWdodCAoQykgMTk5MCBieSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5v bG9neQorICoKKyAqIEV4cG9ydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20gdGhlIFVuaXRlZCBTdGF0 ZXMgb2YgQW1lcmljYSBtYXkKKyAqIHJlcXVpcmUgYSBzcGVjaWZpYyBsaWNlbnNlIGZyb20gdGhl IFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4KKyAqIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBv ZiBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiBjb250ZW1wbGF0aW5nCisgKiBleHBvcnQgdG8g b2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9yZSBleHBvcnRpbmcuCisgKgorICogV0lUSElOIFRI QVQgQ09OU1RSQUlOVCwgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kCisgKiBk aXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVy cG9zZSBhbmQKKyAqIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0 IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQg dGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAqIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKKyAqIHRo ZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkg cGVydGFpbmluZworICogdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNw ZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiAgTS5JLlQuIG1ha2VzIG5vIHJl cHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUg Zm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3MK KyAqIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKworI2lmZGVmICBDS19FTkNSWVBUSU9OCisK KyNpZm5kZWYgX19FTkNSWVBUSU9OX18KKyNkZWZpbmUgX19FTkNSWVBUSU9OX18KKworI2RlZmlu ZSBESVJfREVDUllQVCAgICAgICAgICAgICAxCisjZGVmaW5lIERJUl9FTkNSWVBUICAgICAgICAg ICAgIDIKKworI2lmbmRlZiBDS19ERVNfQworI2lmbmRlZiBOT0JMT0NLREVGCit0eXBlZGVmIHVu c2lnbmVkIGNoYXIgQmxvY2tbOF07CisjZW5kaWYgLyogTk9CTE9DS0RFRiAqLwordHlwZWRlZiB1 bnNpZ25lZCBjaGFyICpCbG9ja1Q7CisjaWZuZGVmIEtSQjQgICAgLyogYWxyZWFkeSBkZWZpbmVk IGluIGtlcmJlcm9zaXYvZGVzLmggKi8KK3R5cGVkZWYgc3RydWN0IGRlc19rc19zdHJ1Y3QgeyBC bG9jayBfOyB9IFNjaGVkdWxlWzE2XTsKKyNlbHNlIC8qIEtSQjQgKi8KKyNpZm5kZWYgT1MyCisj aWZuZGVmIE5PQkxPQ0tERUYgICAgLyogYWxyZWFkeSBkZWZpbmVkIGluIGtlcmJlcm9zaXYvZGVz LmggKi8KK3R5cGVkZWYgc3RydWN0IGRlc19rc19zdHJ1Y3QgeyBCbG9jayBfOyB9IFNjaGVkdWxl WzE2XTsKKyNlbmRpZiAvKiBOT0JMT0NLREVGICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogS1JCNCAqLworCisjZGVmaW5lIFZBTElES0VZKGtleSkgKGtleVswXXxrZXlbMV18a2V5WzJd fGtleVszXXxrZXlbNF18a2V5WzVdfGtleVs2XXxrZXlbN10pCisKKyNkZWZpbmUgU0FNRUtFWShr MSwgazIpICghbWVtY21wKCh2b2lkICopazEsICh2b2lkICopazIsIHNpemVvZihCbG9jaykpKQor I2VuZGlmIC8qIENLX0RFU19DICovCisKK3R5cGVkZWYgc3RydWN0IF9zZXNzaW9uX2tleSB7Cisg IHNob3J0ICAgICAgICAgdHlwZTsKKyAgaW50ICAgICAgICAgICBsZW5ndGg7CisgIHVuc2lnbmVk IGNoYXIgKmRhdGE7Cit9IFNlc3Npb25fS2V5OworCisjaWZkZWYgX19TVERDX18KK3R5cGVkZWYg c3RydWN0IHsKKyAgY2hhciAgKm5hbWU7CisgIGludCAgIHR5cGU7CisgIHZvaWQgICgqb3V0cHV0 KSh1bnNpZ25lZCBjaGFyICosIGludCk7CisgIGludCAgICgqaW5wdXQpKGludCk7CisgIHZvaWQg ICgqaW5pdCkoaW50KTsKKyAgaW50ICAgKCpzdGFydCkoaW50LCBpbnQpOworICBpbnQgICAoKmlz KSh1bnNpZ25lZCBjaGFyICosIGludCk7CisgIGludCAgICgqcmVwbHkpKHVuc2lnbmVkIGNoYXIg KiwgaW50KTsKKyAgaW50ICAgKCpzZXNzaW9uKShTZXNzaW9uX0tleSAqLCBpbnQpOworICBpbnQg ICAoKmtleWlkKShpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopOworICB2b2lkICAoKnByaW50 c3ViKSh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpOworfSBFbmNy eXB0aW9uczsKKyNpZiAhZGVmaW5lZChQKQorI2RlZmluZSBQKHgpIHgKKyNlbmRpZgorI2Vsc2UK K3R5cGVkZWYgc3RydWN0IHsKKyAgY2hhciAgKm5hbWU7CisgIGludCAgIHR5cGU7CisgIHZvaWQg ICgqb3V0cHV0KSgpOworICBpbnQgICAoKmlucHV0KSgpOworICB2b2lkICAoKmluaXQpKCk7Cisg IGludCAgICgqc3RhcnQpKCk7CisgIGludCAgICgqaXMpKCk7CisgIGludCAgICgqcmVwbHkpKCk7 CisgIGludCAgICgqc2Vzc2lvbikoKTsKKyAgaW50ICAgKCprZXlpZCkoKTsKKyAgdm9pZCAgKCpw cmludHN1YikoKTsKK30gRW5jcnlwdGlvbnM7CisjaWYgIWRlZmluZWQoUCkKKyNkZWZpbmUgUCh4 KSAoKQorI2VuZGlmCisjZW5kaWYKKworaW50IGVuY3J5cHRfcGFyc2UodW5zaWduZWQgY2hhciAq LCBpbnQpOworCisjaWZkZWYgREVCVUcKK2ludCBwcmludHN1YihjaGFyLCB1bnNpZ25lZCBjaGFy ICosIHNpemVfdCk7CisjZW5kaWYKKworI2RlZmluZSBTS19HRU5FUklDICAgICAgMCAgICAgICAv KiBKdXN0IGEgc3RyaW5nIG9mIGJpdHMgKi8KKyNkZWZpbmUgU0tfREVTICAgICAgICAgIDEgICAg ICAgLyogTWF0Y2hlZCBLZXJiZXJvcyB2NSBFTkNUWVBFX0RFUyAqLworCit2b2lkIGVuY3J5cHRf aW5pdCBQKChrc3RyZWFtLGludCkpOworRW5jcnlwdGlvbnMgKmZpbmRlbmNyeXB0aW9uIFAoKGlu dCkpOwordm9pZCBlbmNyeXB0X3NlbmRfc3VwcG9ydCBQKCh2b2lkKSk7Cit2b2lkIGVuY3J5cHRf YXV0byBQKChpbnQpKTsKK3ZvaWQgZGVjcnlwdF9hdXRvIFAoKGludCkpOworaW50ICBlbmNyeXB0 X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGVuY3J5cHRfcmVwbHkgUCgodW5z aWduZWQgY2hhciAqLCBpbnQpKTsKK3ZvaWQgZW5jcnlwdF9zdGFydF9pbnB1dCBQKChpbnQpKTsK K2ludCAgZW5jcnlwdF9zZXNzaW9uX2tleSBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKK2ludCAg ZW5jcnlwdF9kb250X3N1cHBvcnQgUCgoaW50KSk7Cit2b2lkIGVuY3J5cHRfZW5kX2lucHV0IFAo KHZvaWQpKTsKK3ZvaWQgZW5jcnlwdF9zdGFydF9vdXRwdXQgUCgoaW50KSk7Cit2b2lkIGVuY3J5 cHRfZW5kX291dHB1dCBQKCh2b2lkKSk7Cit2b2lkIGVuY3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0 IFAoKHZvaWQpKTsKK3ZvaWQgZW5jcnlwdF9zZW5kX3JlcXVlc3RfZW5kIFAoKHZvaWQpKTsKK3Zv aWQgZW5jcnlwdF9zZW5kX2VuZCBQKCh2b2lkKSk7Cit2b2lkIGVuY3J5cHRfd2FpdCBQKCh2b2lk KSk7CitpbnQgIGVuY3J5cHRfaXNfZW5jcnlwdGluZyBQKCh2b2lkKSk7Cit2b2lkIGVuY3J5cHRf c2VuZF9zdXBwb3J0IFAoKHZvaWQpKTsKK2ludCAgZW5jcnlwdF9zZW5kX2tleWlkIFAoKGludCwg dW5zaWduZWQgY2hhciAqLCBpbnQsIGludCkpOworCitpbnQgZW5jcnlwdF9jbWQgUCgoaW50LCBj aGFyICoqKSk7Cit2b2lkIGVuY3J5cHRfZGlzcGxheSBQKCh2b2lkKSk7CisKKyNpZmRlZiBDS19L RVJCRVJPUwordm9pZCBrcmJkZXNfZW5jcnlwdCBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOwor aW50ICBrcmJkZXNfZGVjcnlwdCBQKChpbnQpKTsKK2ludCAga3JiZGVzX2lzIFAoKHVuc2lnbmVk IGNoYXIgKiwgaW50KSk7CitpbnQgIGtyYmRlc19yZXBseSBQKCh1bnNpZ25lZCBjaGFyICosIGlu dCkpOwordm9pZCBrcmJkZXNfaW5pdCBQKChpbnQpKTsKK2ludCAga3JiZGVzX3N0YXJ0IFAoKGlu dCwgaW50KSk7Cit2b2lkIGtyYmRlc19zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICosIGludCkpOwor dm9pZCBrcmJkZXNfcHJpbnRzdWIgUCgodW5zaWduZWQgY2hhciAqLCBpbnQsIHVuc2lnbmVkIGNo YXIgKiwgaW50KSk7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKwordm9pZCBjZmI2NF9lbmNy eXB0IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgY2ZiNjRfZGVjcnlwdCBQKChpbnQp KTsKK3ZvaWQgY2ZiNjRfaW5pdCBQKChpbnQpKTsKK2ludCBjZmI2NF9zdGFydCBQKChpbnQsIGlu dCkpOworaW50IGNmYjY0X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgY2ZiNjRf cmVwbHkgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCBjZmI2NF9zZXNzaW9uIFAoKFNl c3Npb25fS2V5ICosIGludCkpOworaW50IGNmYjY0X2tleWlkIFAoKGludCwgdW5zaWduZWQgY2hh ciAqLCBpbnQgKikpOwordm9pZCBjZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGlu dCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKwordm9pZCBvZmI2NF9lbmNyeXB0IFAoKHVuc2ln bmVkIGNoYXIgKiwgaW50KSk7CitpbnQgb2ZiNjRfZGVjcnlwdCBQKChpbnQpKTsKK3ZvaWQgb2Zi NjRfaW5pdCBQKChpbnQpKTsKK2ludCBvZmI2NF9zdGFydCBQKChpbnQsIGludCkpOworaW50IG9m YjY0X2lzIFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgb2ZiNjRfcmVwbHkgUCgodW5z aWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCBvZmI2NF9zZXNzaW9uIFAoKFNlc3Npb25fS2V5ICos IGludCkpOworaW50IG9mYjY0X2tleWlkIFAoKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQgKikp Owordm9pZCBvZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQg Y2hhciAqLCBpbnQpKTsKKwordm9pZCBkZXMzX2NmYjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hh ciAqLCBpbnQpKTsKK2ludCAgZGVzM19jZmI2NF9kZWNyeXB0IFAoKGludCkpOwordm9pZCBkZXMz X2NmYjY0X2luaXQgUCgoaW50KSk7CitpbnQgIGRlczNfY2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQp KTsKK2ludCAgZGVzM19jZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50ICBk ZXMzX2NmYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGRlczNfY2Zi NjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBpbnQpKTsKK2ludCAgZGVzM19jZmI2NF9rZXlp ZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50ICopKTsKK3ZvaWQgZGVzM19jZmI2NF9wcmlu dHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKwor dm9pZCBkZXMzX29mYjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAg ZGVzM19vZmI2NF9kZWNyeXB0IFAoKGludCkpOwordm9pZCBkZXMzX29mYjY0X2luaXQgUCgoaW50 KSk7CitpbnQgIGRlczNfb2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQpKTsKK2ludCAgZGVzM19vZmI2 NF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50ICBkZXMzX29mYjY0X3JlcGx5IFAo KHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGRlczNfb2ZiNjRfc2Vzc2lvbiBQKChTZXNz aW9uX0tleSAqLCBpbnQpKTsKK2ludCAgZGVzM19vZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVk IGNoYXIgKiwgaW50ICopKTsKK3ZvaWQgZGVzM19vZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBj aGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKworI2lmZGVmIENBU1RfRU5DUllQ VElPTgordm9pZCBjYXN0X2NmYjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsK K2ludCAgY2FzdF9jZmI2NF9kZWNyeXB0IFAoKGludCkpOwordm9pZCBjYXN0X2NmYjY0X2luaXQg UCgoaW50KSk7CitpbnQgIGNhc3RfY2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQpKTsKK2ludCAgY2Fz dF9jZmI2NF9pcyBQKCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50ICBjYXN0X2NmYjY0X3Jl cGx5IFAoKHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGNhc3RfY2ZiNjRfc2Vzc2lvbiBQ KChTZXNzaW9uX0tleSAqLCBpbnQpKTsKK2ludCAgY2FzdF9jZmI2NF9rZXlpZCBQKChpbnQsIHVu c2lnbmVkIGNoYXIgKiwgaW50ICopKTsKK3ZvaWQgY2FzdF9jZmI2NF9wcmludHN1YiBQKCh1bnNp Z25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKwordm9pZCBjYXN0X29m YjY0X2VuY3J5cHQgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAgY2FzdF9vZmI2NF9k ZWNyeXB0IFAoKGludCkpOwordm9pZCBjYXN0X29mYjY0X2luaXQgUCgoaW50KSk7CitpbnQgIGNh c3Rfb2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQpKTsKK2ludCAgY2FzdF9vZmI2NF9pcyBQKCh1bnNp Z25lZCBjaGFyICosIGludCkpOworaW50ICBjYXN0X29mYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNo YXIgKiwgaW50KSk7CitpbnQgIGNhc3Rfb2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAqLCBp bnQpKTsKK2ludCAgY2FzdF9vZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50 ICopKTsKK3ZvaWQgY2FzdF9vZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFyICosIGludCwg dW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKwordm9pZCBjYXN0ZXhwX2NmYjY0X2VuY3J5cHQgUCgo dW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAgY2FzdGV4cF9jZmI2NF9kZWNyeXB0IFAoKGlu dCkpOwordm9pZCBjYXN0ZXhwX2NmYjY0X2luaXQgUCgoaW50KSk7CitpbnQgIGNhc3RleHBfY2Zi NjRfc3RhcnQgUCgoaW50LCBpbnQpKTsKK2ludCAgY2FzdGV4cF9jZmI2NF9pcyBQKCh1bnNpZ25l ZCBjaGFyICosIGludCkpOworaW50ICBjYXN0ZXhwX2NmYjY0X3JlcGx5IFAoKHVuc2lnbmVkIGNo YXIgKiwgaW50KSk7CitpbnQgIGNhc3RleHBfY2ZiNjRfc2Vzc2lvbiBQKChTZXNzaW9uX0tleSAq LCBpbnQpKTsKK2ludCAgY2FzdGV4cF9jZmI2NF9rZXlpZCBQKChpbnQsIHVuc2lnbmVkIGNoYXIg KiwgaW50ICopKTsKK3ZvaWQgY2FzdGV4cF9jZmI2NF9wcmludHN1YiBQKCh1bnNpZ25lZCBjaGFy ICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKwordm9pZCBjYXN0ZXhwX29mYjY0X2Vu Y3J5cHQgUCgodW5zaWduZWQgY2hhciAqLCBpbnQpKTsKK2ludCAgY2FzdGV4cF9vZmI2NF9kZWNy eXB0IFAoKGludCkpOwordm9pZCBjYXN0ZXhwX29mYjY0X2luaXQgUCgoaW50KSk7CitpbnQgIGNh c3RleHBfb2ZiNjRfc3RhcnQgUCgoaW50LCBpbnQpKTsKK2ludCAgY2FzdGV4cF9vZmI2NF9pcyBQ KCh1bnNpZ25lZCBjaGFyICosIGludCkpOworaW50ICBjYXN0ZXhwX29mYjY0X3JlcGx5IFAoKHVu c2lnbmVkIGNoYXIgKiwgaW50KSk7CitpbnQgIGNhc3RleHBfb2ZiNjRfc2Vzc2lvbiBQKChTZXNz aW9uX0tleSAqLCBpbnQpKTsKK2ludCAgY2FzdGV4cF9vZmI2NF9rZXlpZCBQKChpbnQsIHVuc2ln bmVkIGNoYXIgKiwgaW50ICopKTsKK3ZvaWQgY2FzdGV4cF9vZmI2NF9wcmludHN1YiBQKCh1bnNp Z25lZCBjaGFyICosIGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKyNlbmRpZiAvKiBDQVNU X0VOQ1JZUFRJT04gKi8KKworLyogaW50ICBkZXNfc3RyaW5nX3RvX2tleSBQKChjaGFyICosIEJs b2NrKSk7ICovCisKKyNpZmRlZiBERUJVRworZXh0ZXJuIGludCBlbmNyeXB0X2RlYnVnX21vZGU7 CisjZW5kaWYKKworaW50IGRlY3J5cHRfa3NfaGFjayh1bnNpZ25lZCBjaGFyICosIGludCk7CisK KyNlbmRpZiAvKiBfX0VOQ1JZUFRJT05fXyAqLworI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KKwor I2lmZGVmIENSWVBUX0RMTAorc3RydWN0IF9jcnlwdF9kbGxfaW5pdCB7CisgICAgaW50IHZlcnNp b247CisKKyAgICAvKiBWZXJzaW9uIDEgdmFyaWFibGVzICovCisgICAgaW50ICgqcF90dG9sKShj aGFyICosaW50KTsKKyAgICBpbnQgKCpwX2RvZGVidWcpKGludCxjaGFyICosY2hhciAqLENLX09G Rl9UKTsKKyAgICBpbnQgKCpwX2RvaGV4ZHVtcCkoY2hhciAqLGNoYXIgKixpbnQpOworICAgIHZv aWQgKCpwX3RuX2RlYnVnKShjaGFyICopOworICAgIGludCAoKnBfdnNjcm5wcmludGYpKGNoYXIg KiwgLi4uKTsKKworICAgIC8qIFZlcnNpb24gMiB2YXJpYWJsZXMgKi8KKyAgICB2b2lkICogcF9r NV9jb250ZXh0OworCisgICAgLyogVmVyc2lvbiAzIHZhcmlhYmxlcyAqLworICAgIHZvaWQgKCpw X2luc3RhbGxfZnVuY3MpKGNoYXIgKix2b2lkICopOworCisgICAgLyogVmVyc2lvbiA1IHZhcmlh YmxlcyAqLworICAgIHVuc2lnbmVkIGxvbmcgKCpwX3JlcXRlbG11dGV4KSh1bnNpZ25lZCBsb25n KTsKKyAgICB1bnNpZ25lZCBsb25nICgqcF9yZWx0ZWxtdXRleCkodm9pZCk7Cit9OworI2VuZGlm IC8qIENSWVBUX0RMTCAqLworCisvKiBwZXIgS2VyYmVyb3MgdjUgcHJvdG9jb2wgc3BlYyAqLwor I2lmbmRlZiBFTkNUWVBFX05VTEwKKyNkZWZpbmUgRU5DVFlQRV9OVUxMICAgICAgICAgICAgMHgw MDAwCisjZW5kaWYKKyNpZm5kZWYgIEVOQ1RZUEVfREVTX0NCQ19DUkMKKyNkZWZpbmUgRU5DVFlQ RV9ERVNfQ0JDX0NSQyAgICAgMHgwMDAxICAvKiBERVMgY2JjIG1vZGUgd2l0aCBDUkMtMzIgKi8K KyNlbmRpZgorI2lmbmRlZiAgRU5DVFlQRV9ERVNfQ0JDX01ENAorI2RlZmluZSBFTkNUWVBFX0RF U19DQkNfTUQ0ICAgICAweDAwMDIgIC8qIERFUyBjYmMgbW9kZSB3aXRoIFJTQS1NRDQgKi8KKyNl bmRpZgorI2lmbmRlZiAgRU5DVFlQRV9ERVNfQ0JDX01ENQorI2RlZmluZSBFTkNUWVBFX0RFU19D QkNfTUQ1ICAgICAweDAwMDMgIC8qIERFUyBjYmMgbW9kZSB3aXRoIFJTQS1NRDUgKi8KKyNlbmRp ZgorI2lmbmRlZiAgRU5DVFlQRV9ERVNfQ0JDX1JBVworI2RlZmluZSBFTkNUWVBFX0RFU19DQkNf UkFXICAgICAweDAwMDQgIC8qIERFUyBjYmMgbW9kZSByYXcgKi8KKyNlbmRpZgorLyogWFhYIGRl cHJlY2F0ZWQ/ICovCisjaWZuZGVmICBFTkNUWVBFX0RFUzNfQ0JDX1NIQQorI2RlZmluZSBFTkNU WVBFX0RFUzNfQ0JDX1NIQSAgICAweDAwMDUgIC8qIERFUy0zIGNiYyBtb2RlIHdpdGggTklTVC1T SEEgKi8KKyNlbmRpZgorI2lmbmRlZiAgRU5DVFlQRV9ERVMzX0NCQ19SQVcKKyNkZWZpbmUgRU5D VFlQRV9ERVMzX0NCQ19SQVcgICAgMHgwMDA2ICAvKiBERVMtMyBjYmMgbW9kZSByYXcgKi8KKyNl bmRpZgorI2lmbmRlZiAgRU5DVFlQRV9ERVNfSE1BQ19TSEExCisjZGVmaW5lIEVOQ1RZUEVfREVT X0hNQUNfU0hBMSAgIDB4MDAwOAorI2VuZGlmCisjaWZuZGVmICBFTkNUWVBFX0RFUzNfQ0JDX1NI QTEKKyNkZWZpbmUgRU5DVFlQRV9ERVMzX0NCQ19TSEExICAweDAwMTAKKyNlbmRpZgorI2lmbmRl ZiBFTkNUWVBFX0FFUzEyOF9DVFNfSE1BQ19TSEExXzk2CisjZGVmaW5lIEVOQ1RZUEVfQUVTMTI4 X0NUU19ITUFDX1NIQTFfOTYgIDB4MDAxMQorI2VuZGlmCisjaWZuZGVmIEVOQ1RZUEVfQUVTMjU2 X0NUU19ITUFDX1NIQTFfOTYKKyNkZWZpbmUgRU5DVFlQRV9BRVMyNTZfQ1RTX0hNQUNfU0hBMV85 NiAgMHgwMDEyCisjZW5kaWYKKyNpZm5kZWYgRU5DVFlQRV9BUkNGT1VSX0hNQUMKKyNkZWZpbmUg RU5DVFlQRV9BUkNGT1VSX0hNQUMgICAgIDB4MDAxNworI2VuZGlmCisjaWZuZGVmIEVOQ1RZUEVf QVJDRk9VUl9ITUFDX0VYUAorI2RlZmluZSBFTkNUWVBFX0FSQ0ZPVVJfSE1BQ19FWFAgMHgwMDE4 CisjZW5kaWYKKyNpZm5kZWYgRU5DVFlQRV9MT0NBTF9SQzRfTUQ0CisjZGVmaW5lIEVOQ1RZUEVf TE9DQUxfUkM0X01ENCAgICAweEZGRkZGRjgwCisjZW5kaWYKKyNpZm5kZWYgIEVOQ1RZUEVfVU5L Tk9XTgorI2RlZmluZSBFTkNUWVBFX1VOS05PV04gICAgICAgICAweDAxZmYKKyNlbmRpZgorLyog bG9jYWwgY3J1ZCAqLworLyogbWFyYydzIERFUy0zIHdpdGggMzItYml0IGxlbmd0aCAqLworI2lm bmRlZiAgRU5DVFlQRV9MT0NBTF9ERVMzX0hNQUNfU0hBMQorI2RlZmluZSBFTkNUWVBFX0xPQ0FM X0RFUzNfSE1BQ19TSEExIDB4NzAwNworI2VuZGlmCisjZW5kaWYgLyogS1JCNV9URUxORVRfSCAq LwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1 YXRoLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0aC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOWJjN2QKLS0tIC9kZXYvbnVsbAor KysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0aC5jCkBAIC0w LDAgKzEsMTMzNjIgQEAKK2NoYXIgKmNrYXRodiA9ICJBdXRoZW50aWNhdGlvbiwgOS4wLjIzNSwg MTYgTWFyIDIwMTAiOworLyoKKyAgQyBLIFUgQSBUIEggLiBDICAtLSAgQXV0aGVudGljYXRpb24g Zm9yIEMtS2VybWl0CisKKyAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDEwLAorICAgIFRydXN0ZWVz IG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxs IHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0 aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFp bWVyIGFuZCBwZXJtaXNzaW9ucy4KKworICAgIEF1dGhvcjogIEplZmZyZXkgRSBBbHRtYW4gKGph bHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pCisgICAgICAgICAgICAgICBTZWN1cmUgRW5kcG9p bnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKyovCisvKgorICogQWRkaXRpb25hbCBjb3B5cmlnaHRz IGluY2x1ZGVkIHdpdGggYWZmZWN0ZWQgY29kZS4KKyAqLworCisjaWZkZWYgSEVJTURBTAorLyoK KyAgVHVybmVkIG9mZiBVc2VyIHRvIFVzZXIgc3VwcG9ydAorICBUdXJuZWQgb2ZmIEtERVNUUk9Z IHN1cHBvcnQKKyAgVHVybmVkIG9mZiBLTElTVCBzdXBwb3J0CisgIFR1cm5lZCBvZmYga3JiNV9w cm9tcHRlcigpIHN1cHBvcnQKKyAgVHVybmVkIG9mZiB0aWNrZXQgdmFsaWRhdGlvbgorICBUdXJu ZWQgb2ZmIHRpY2tldCByZW5ld2FsCisgIFR1cm5lZCBvZmYgYWx0ZXJuYXRpdmUgY2FjaGUgc3Vw cG9ydCBpbiBrNV9nZXRfY2NhY2hlKCkKKworICBSZW1haW5pbmcgbGluayBwcm9ibGVtczoKKwor ICBja3VhdGgubzogSW4gZnVuY3Rpb24gYGNrX2tyYjVfaW5pdFRHVCc6CisgIGNrdWF0aC5vKC50 ZXh0KzB4NTBjMik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGtyYjVfc3RyaW5nX3RvX2RlbHRh dCcKKyAgY2t1YXRoLm8oLnRleHQrMHg1MTZkKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBga3Ji NV9zdHJpbmdfdG9fZGVsdGF0JworICBja3VhdGgubygudGV4dCsweDUxZWYpOiB1bmRlZmluZWQg cmVmZXJlbmNlIHRvIGBrcmI1X3N0cmluZ190b19kZWx0YXQnCisqLworI2VuZGlmIC8qIEhFSU1E QUwgKi8KKworLyoKKyAqIEltcGxlbWVudHMgS2VyYmVyb3MgNC81LCBTUlAsIFNTTCwgTlRMTSBh dXRoZW50aWNhdGlvbiBhbmQgU1RBUlRfVExTCisgKi8KKworI2luY2x1ZGUgImNrY3N5bS5oIgor I2luY2x1ZGUgImNrY2RlYi5oIgorCisjaWZkZWYgQ0tfU0VDVVJJVFkKKworI2RlZmluZSBDS1VB VEhfQworI2luY2x1ZGUgImNrY2tlci5oIgorI2luY2x1ZGUgImNrdXVzci5oIgorI2luY2x1ZGUg ImNrdWNtZC5oIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHN0cnVjdCBrZXl0 YWIgKi8KKyNpbmNsdWRlICJja2NuZXQuaCIKKyNpbmNsdWRlICJja2N0ZWwuaCIKKworY2hhciBz elVzZXJOYW1lUmVxdWVzdGVkW1VJREJVRkxFTisxXTsgICAgLyogZm9yIGluY29taW5nIGNvbm5l Y3Rpb25zICovCitjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW1VJREJVRkxFTisxXTsvKiBm b3IgaW5jb21pbmcgY29ubmVjdGlvbnMgKi8KK2NoYXIgc3pIb3N0TmFtZVtVSURCVUZMRU4rMV07 CitjaGFyIHN6VXNlck5hbWVbVUlEQlVGTEVOKzFdOworc3RhdGljIGNoYXIgc3pJUFsxNl07Citz dGF0aWMgaW50ICB2YWxpZFVzZXIgPSBBVVRIX1JFSkVDVDsgICAgLyogVXNlciBzdGFydHMgb3V0 IGludmFsaWQgKi8KK2ludCBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfTlVMTDsK K2ludCBhY2NlcHRfY29tcGxldGUgPSAwOworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyNp ZmRlZiBDS19TU0wKKyNpZmRlZiBLUkI1CisjZGVmaW5lIFRMU19WRVJJRlkKKyNlbmRpZiAvKiBL UkI1ICovCisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBDS19ERVMKKyNpZmRlZiBDS19T U0wKKyNpZm5kZWYgTElCREVTCisjZGVmaW5lIExJQkRFUworI2VuZGlmIC8qIExJQkRFUyAqLwor I2VuZGlmIC8qIENLX1NTTCAqLworI2VuZGlmIC8qIENLX0RFUyAqLworCisjaWZkZWYgQ1JZUFRf RExMCisjaWZuZGVmIExJQkRFUworI2RlZmluZSBMSUJERVMKKyNlbmRpZiAvKiBMSUJERVMgKi8K KyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlIC8qIE5U ICovCisjZGVmaW5lIElOQ0xfRE9TTU9EVUxFTUdSCisjaW5jbHVkZSA8b3MyLmg+CisjZW5kaWYg LyogTlQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDUllQVF9ETEwgKi8KKworI2lm ZGVmIE5UCisjZGVmaW5lIEtSQjVfQVVUT0NPTkZfXworI2RlZmluZSBOVExNCisjZW5kaWYgLyog TlQgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisjZGVmaW5lIEtJTklUCisjaWZuZGVmIEhFSU1E QUwKKyNkZWZpbmUgS0xJU1QKKyNkZWZpbmUgS0RFU1RST1kKKyNlbmRpZiAvKiBIRUlNREFMICov CisjZGVmaW5lIENIRUNLQUREUlMKKyNlbHNlIC8qIENLX0tFUkJFUk9TICovCisjaWZkZWYgS1JC NAorI3VuZGVmIEtSQjQKKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorI3VuZGVmIEtS QjUKKyNlbmRpZiAvKiBLUkI1ICovCisjaWZkZWYgS1JCNTI0CisjdW5kZWYgS1JCNTI0CisjZW5k aWYgLyogS1JCNTI0ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk ZSA8dGltZS5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZm5k ZWYgbWFsbG9jCisjaWZuZGVmIFZNUworI2lmbmRlZiBGUkVFQlNENAorI2lmbmRlZiBPcGVuQlNE CisjaWZkZWYgTUFDT1NYCisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2Vsc2UgLyogTUFDT1NY ICovCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYgLyogTUFDT1NYICovCisjZW5kaWYgLyog T3BlbkJTRCAqLworI2VuZGlmIC8qIEZSRUVCU0Q0ICovCisjZW5kaWYgLyogVk1TICovCisjZW5k aWYgLyogbWFsbG9jICovCisjaWZkZWYgT1MyCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZiAvKiBP UzIgKi8KKworI2lmZGVmIEtSQjUKKyNpZmRlZiBIRUlNREFMCisjaWZkZWYgcHJpbnRmCisjZGVm aW5lIHNhdmVwcmludGYgcHJpbnRmCisjdW5kZWYgcHJpbnRmCisjZW5kaWYgLyogcHJpbnRmICov CisjaW5jbHVkZSAia3JiNS5oIgorCisjaW5jbHVkZSAiY29tX2Vyci5oIgorCisjaWZkZWYgc2F2 ZXByaW50ZgorI2RlZmluZSBwcmludGYgc2F2ZXByaW50ZgorI2VuZGlmIC8qIHNhdmVwcmludGYg Ki8KKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyNpbmNsdWRlICJrcmI1LmgiCisjaW5jbHVkZSAicHJv ZmlsZS5oIgorI2luY2x1ZGUgImNvbV9lcnIuaCIKKyNpZmRlZiBLUkI1X0dFVF9JTklUX0NSRURT X09QVF9US1RfTElGRQorI2RlZmluZSBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKKyNlbHNlCisj ZGVmaW5lIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGNvbix2YWwpIGtyYjVfeGZyZWUoKGNoYXIg KikodmFsKSkKKyNlbmRpZgorI2lmbmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKKyNkZWZp bmUga3JiNV9mcmVlX2RhdGFfY29udGVudHMoYyx2KSBrcmI1X3hmcmVlKChjaGFyICopKHYpLT5k YXRhKQorI2VuZGlmCisjZW5kaWYgLyogSEVJTURBTCAqLworI2lmZGVmIEhBVkVfUFdEX0gKKyNp bmNsdWRlIDxwd2QuaD4KKyNlbmRpZgorI2VuZGlmIC8qIEtSQjUgKi8KKworI2lmZGVmIEtSQjQK KyNkZWZpbmUgIGRlc19jYmxvY2sgQmxvY2sKKyNkZWZpbmUgIGNvbnN0X2Rlc19jYmxvY2sgY29u c3QgQmxvY2sKKyNkZWZpbmUgIGRlc19rZXlfc2NoZWR1bGUgU2NoZWR1bGUKKyNpZmRlZiBLUkI1 MjQKKyNpZmRlZiBOVAorI2RlZmluZSBfV0lORE9XUworI2VuZGlmIC8qIE5UICovCisjaW5jbHVk ZSAia2VyYmVyb3NJVi9rcmIuaCIKKyNpZm5kZWYgT1MyCisjaWZkZWYgS1JCNTI0X0NPTlYKKyNp bmNsdWRlICJrcmI1MjQuaCIKKyNlbmRpZiAvKiBLUkI1MjRfQ09OViAqLworX1BST1RPVFlQKGNv bnN0IGNoYXIgKiBrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5LCAoaW50KSk7CisjZW5kaWYgLyogT1My ICovCisjZWxzZSAvKiBLUkI1MjQgKi8KKyNpZmRlZiBTT0xBUklTCisjaWZuZGVmIHN1bgorLyog Zm9yIHNvbWUgcmVhc29uIHRoZSBNYWtlZmlsZSBlbnRyaWVzIGZvciB0aGUgU29sYXJpcyBzeXN0 ZW1zIGhhdmUgLVVzdW4gKi8KKyNkZWZpbmUgc3VuCisjZW5kaWYgLyogc3VuICovCisjZW5kaWYg LyogU09MQVJJUyAqLworI2luY2x1ZGUgImtyYi5oIgorI2RlZmluZSBrcmJfZ2V0X2Vycl90ZXh0 X2VudHJ5IGtyYl9nZXRfZXJyX3RleHQKKyNlbmRpZiAvKiBLUkI1MjQgKi8KKyNlbHNlIC8qIEtS QjQgKi8KKyNpZmRlZiBDS19TU0wKKyNkZWZpbmUgIGRlc19jYmxvY2sgQmxvY2sKKyNpZmRlZiBD T01NRU5UCisjZGVmaW5lICBjb25zdF9kZXNfY2Jsb2NrIGNvbnN0IEJsb2NrCisjZW5kaWYgLyog Q09NTUVOVCAqLworI2RlZmluZSAgZGVzX2tleV9zY2hlZHVsZSBTY2hlZHVsZQorI2VuZGlmIC8q IENLX1NTTCAqLworI2VuZGlmIC8qIEtSQjQgKi8KKworI2luY2x1ZGUgImNrdWF0aC5oIgorI2lm ZGVmIENLX0tFUkJFUk9TCisjaWZuZGVmIEtSQjUKKyNkZWZpbmUgTk9CTE9DS0RFRgorI2Vsc2Ug LyogS1JCNSAqLworI2lmZGVmIEtSQjUyNAorI2RlZmluZSBOT0JMT0NLREVGCisjZW5kaWYgLyog S1JCNTI0ICovCisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisj aW5jbHVkZSAiY2t1YXQyLmgiCisKKyNpZmRlZiBDS19TU0wKKyNpZmRlZiBMSUJERVMKKyNpZmRl ZiBPUEVOU1NMXzA5NworI2lmZGVmIENLX0RFUworI2RlZmluZSBPUEVOU1NMX0VOQUJMRV9PTERf REVTX1NVUFBPUlQKKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorI2VuZGlmCS8qIENLX0RFUyAq LworI2VuZGlmIC8qIE9QRU5TU0xfMDk3ICovCisjaWZuZGVmIEhFQURFUl9ERVNfSAorI2RlZmlu ZSBIRUFERVJfREVTX0gKKyNlbmRpZiAvKiBIRUFERVJfREVTX0ggKi8KKyNlbmRpZiAvKiBMSUJE RVMgKi8KKyNpbmNsdWRlICJja19zc2wuaCIKK2V4dGVybiBpbnQgc3NsX2ZpbmlzaGVkX21lc3Nh Z2VzOworI2VuZGlmIC8qIFNTTCAqLworCisjZGVmaW5lIFBXRF9TWiAxMjgKKworI2lmbmRlZiBM SUJERVMKKyNpZmRlZiBVTklYCisjZGVmaW5lIGRlc19zZXRfcmFuZG9tX2dlbmVyYXRvcl9zZWVk KHgpIGRlc19pbml0X3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yKHgpCisjZW5kaWYgLyogVU5JWCAq LworI2Vsc2UgLyogTElCREVTICovCisjZGVmaW5lIGRlc19maXh1cF9rZXlfcGFyaXR5IGRlc19z ZXRfb2RkX3Bhcml0eQorI2VuZGlmIC8qIExJQkRFUyAqLworCisjaWZkZWYgT1MyCisjaWZkZWYg Q0tfRU5DUllQVElPTgorI2RlZmluZSBNQVBfREVTCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LworI2lmZGVmIEtSQjQKKyNkZWZpbmUgTUFQX0tSQjQKKyNlbmRpZiAvKiBLUkI0ICovCisjaWZk ZWYgU1JQRExMCisjZGVmaW5lIE1BUF9TUlAKKyNlbmRpZiAvKiBTUlBETEwgKi8KKyNpZmRlZiBL UkI1CisjZGVmaW5lIE1BUF9LUkI1CisjZW5kaWYgLyogS1JCNSAqLworI2lmZGVmIENSWVBUX0RM TAorI2RlZmluZSBNQVBfQ1JZUFQKKyNlbmRpZiAvKiBDUllQVF9ETEwgKi8KKyNkZWZpbmUgTUFQ X05UTE0KKyNpbmNsdWRlICJja29hdGguaCIKKyNpbmNsdWRlICJja29zeW4uaCIKKyNlbmRpZiAv KiBPUzIgKi8KKworLyoKKyAqIEdsb2JhbHMKKyAqLworaW50IGF1dGhfdHlwZV91c2VyW0FVVEhU WVBMU1RTWl0gPSB7QVVUSFRZUEVfQVVUTywgQVVUSFRZUEVfTlVMTH07CitpbnQgYXV0aF9ob3c9 MDsKK2ludCBhdXRoX2NyeXB0PTA7CitpbnQgYXV0aF9md2Q9MDsKKworLyogVGhlc2UgYXJlIHN0 YXRlIGNvbXBsZXRpb24gdmFyaWFibGVzICovCitzdGF0aWMgaW50IG11dHVhbF9jb21wbGV0ZSA9 IDA7CisKKyNpZmRlZiBLUkI0CisjaWZkZWYgT1MyCitzdGF0aWMgTEVBU0hfQ1JFREVOVElBTFMg Y3JlZDsKKyNlbHNlIC8qIE9TMiAqLworc3RhdGljIENSRURFTlRJQUxTIGNyZWQ7CisjZW5kaWYg LyogT1MyICovCitzdGF0aWMgS1RFWFRfU1QgazRfYXV0aDsKK3N0YXRpYyBjaGFyICAgICBrNF9u YW1lW0FOQU1FX1NaXTsKK3N0YXRpYyBBVVRIX0RBVCBrNF9hZGF0ICA9IHsgMCB9Oworc3RhdGlj IE1TR19EQVQgIGs0X21zZ19kYXRhOworI2lmZGVmIENLX0VOQ1JZUFRJT04KK3N0YXRpYyBCbG9j ayAgICBrNF9zZXNzaW9uX2tleSAgICAgPSB7IDAgfTsKK3N0YXRpYyBTY2hlZHVsZSBrNF9zY2hl ZDsKK3N0YXRpYyBCbG9jayAgICBrNF9jaGFsbGVuZ2UgICAgICAgPSB7IDAgfTsKKyNpZmRlZiBN SVRfQ1VSUkVOVAorc3RhdGljIGtyYjVfa2V5YmxvY2sgazRfa3Jia2V5OworI2VuZGlmIC8qIE1J VF9DVVJSRU5UICovCisjZW5kaWYgLyogRU5DUllQVElPTiAqLworI2RlZmluZSBLUkI0X1NFUlZJ Q0VfTkFNRSAgICAicmNtZCIKKworX1BST1RPVFlQKHN0YXRpYyBpbnQgazRfYXV0aF9zZW5kLChW T0lEKSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBrNF9hdXRoX3JlcGx5LCh1bnNpZ25lZCBjaGFy ICosIGludCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgazRfYXV0aF9pcywodW5zaWduZWQgY2hh ciAqLCBpbnQpKTsKKyNlbmRpZiAvKiBLUkI0ICovCisKKyNpZmRlZiBLUkI1CitzdGF0aWMga3Ji NV9kYXRhICAgICAgICAgIGs1X2F1dGg7CitzdGF0aWMga3JiNV9hdXRoX2NvbnRleHQgIGF1dGhf Y29udGV4dDsKK3N0YXRpYyBrcmI1X2tleWJsb2NrICAgICAqazVfc2Vzc2lvbl9rZXkgPSBOVUxM Oworc3RhdGljIGtyYjVfdGlja2V0ICAgICAgICprNV90aWNrZXQgPSBOVUxMOworI2lmbmRlZiBL UkI1X1NFUlZJQ0VfTkFNRQorI2RlZmluZSBLUkI1X1NFUlZJQ0VfTkFNRSAgICAiaG9zdCIKKyNp ZmRlZiBNQUNPU1gKKyNkZWZpbmUgTUlUX0NVUlJFTlQgMQorI2RlZmluZSBkZWNvZGVfa3JiNV90 aWNrZXQgIGtyYjVfZGVjb2RlX3RpY2tldAorI2RlZmluZSBrcmI1X3JlYWRfbWVzc2FnZSAgIGNr X2tyYjVfcmVhZF9tZXNzYWdlCisjZGVmaW5lIGtyYjVfd3JpdGVfbWVzc2FnZSAgY2tfa3JiNV93 cml0ZV9tZXNzYWdlCisjZW5kaWYgLyogTUFDT1NYICovCisjZW5kaWYKKworX1BST1RPVFlQKHN0 YXRpYyBpbnQgazVfYXV0aF9zZW5kLChpbnQsaW50LGludCkpOworX1BST1RPVFlQKHN0YXRpYyBp bnQgazVfYXV0aF9yZXBseSwoaW50LCB1bnNpZ25lZCBjaGFyICosIGludCkpOworX1BST1RPVFlQ KHN0YXRpYyBpbnQgazVfYXV0aF9pcywoaW50LHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitfUFJP VE9UWVAoc3RhdGljIGludCBTZW5kSzVBdXRoU0IsKGludCwgdm9pZCAqLCBpbnQpKTsKKyNpZmRl ZiBUTFNfVkVSSUZZCitzdGF0aWMgaW50IGtyYjVfdGxzX3ZlcmlmaWVkID0gMDsKKyNlbmRpZiAv KiBUTFNfVkVSSUZZICovCisjZW5kaWYgLyogS1JCNSAqLworCisjaWZkZWYgR1NTQVBJX0tSQjUK KyNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpLmg+CisjaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9nZW5l cmljLmg+CisjaW5jbHVkZSA8Z3NzYXBpL2dzc2FwaV9rcmI1Lmg+CisKK3N0YXRpYyBnc3NfY3R4 X2lkX3QgZ2NvbnRleHQ7CisjZGVmaW5lIEdTU19CVUZTSVogNDA5Ngorc3RhdGljIGdzc19idWZm ZXJfZGVzYyBnc3Nfc2VuZF90b2ssIGdzc19yZWN2X3RvaywgKmdzc190b2tlbl9wdHI7CitzdGF0 aWMgY2hhciBnc3Nfc3RidWZbR1NTX0JVRlNJWl07CitzdGF0aWMgZ3NzX25hbWVfdCBnc3NfdGFy Z2V0X25hbWU7CitzdGF0aWMgc3RydWN0IGdzc19jaGFubmVsX2JpbmRpbmdzX3N0cnVjdCBnc3Nf Y2hhbjsKKworX1BST1RPVFlQKHN0YXRpYyBpbnQgZ3NzazVfYXV0aF9zZW5kLChpbnQsaW50LGlu dCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgZ3NzazVfYXV0aF9yZXBseSwoaW50LCB1bnNpZ25l ZCBjaGFyICosIGludCkpOworX1BST1RPVFlQKHN0YXRpYyBpbnQgZ3NzazVfYXV0aF9pcywoaW50 LHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoc3RhdGljIGludCBTZW5kR1NTSzVB dXRoU0IsKGludCwgdm9pZCAqLCBpbnQpKTsKKyNlbmRpZiAvKiBHU1NBUElfS1JCNSAqLworCisj aWZkZWYgQ0tfU1JQCisjaWZkZWYgUFJFX1NSUF8xXzdfMworX1BST1RPVFlQKHN0YXRpYyBpbnQg c3JwX3JlcGx5LChpbnQsIHVuc2lnbmVkIGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAoc3RhdGlj IGludCBzcnBfaXMsKGludCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKyNlbHNlIC8qIFBSRV9T UlBfMV83XzMgKi8KK19QUk9UT1RZUChzdGF0aWMgaW50IG5ld19zcnBfcmVwbHksKGludCwgdW5z aWduZWQgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IG5ld19zcnBfaXMsKGlu dCwgdW5zaWduZWQgY2hhciAqLCBpbnQpKTsKKyNlbmRpZiAvKiBQUkVfU1JQXzFfN18zICovCisj ZW5kaWYgLyogU1JQICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCitpbnQgZW5jcnlwdF9mbGFn ID0gMTsKKyNlbmRpZgorI2lmZGVmIEZPUldBUkQKK2ludCBmb3J3YXJkX2ZsYWcgPSAwOyAgICAg ICAgICAgICAgLyogZm9yd2FyZCB0aWNrZXRzPyAqLworaW50IGZvcndhcmRhYmxlX2ZsYWcgPSAx OyAgICAgICAgICAvKiBnZXQgZm9yd2FyZGFibGUgdGlja2V0cyB0byBmb3J3YXJkPyAqLworaW50 IGZvcndhcmRlZF90aWNrZXRzID0gMDsgICAgICAgICAvKiB3ZXJlIHRpY2tldHMgZm9yd2FyZGVk PyAqLworI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHN0cl9kYXRhWzQwOTZdID0geyBJ QUMsIFNCLCBURUxPUFRfQVVUSEVOVElDQVRJT04sIDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfS0VSQkVST1NfVjUsIH07CisjZGVmaW5lIEFVVEhU TVBCTCAyMDQ4CitzdGF0aWMgY2hhciBzdHJUbXBbQVVUSFRNUEJMKzFdOworc3RhdGljIGNoYXIg c3pMb2NhbEhvc3ROYW1lW1VJREJVRkxFTisxXTsKK3N0YXRpYyBrc3RyZWFtIGdfa3N0cmVhbT1O VUxMOworCisjaWZkZWYgS1JCNQora3JiNV9jb250ZXh0IGs1X2NvbnRleHQ9TlVMTDsKK3N0YXRp YyBrcmI1X2NyZWRzICogcmV0X2NyZWQ9TlVMTDsKK3N0YXRpYyBrcmI1X2NvbnRleHQgdGVsbmV0 X2NvbnRleHQ9TlVMTDsKK3N0YXRpYyBjaGFyICogdGVsbmV0X2tyYjVfcmVhbG0gPSBOVUxMOwor c3RhdGljIGtyYjVfcHJpbmNpcGFsIGZ3ZF9zZXJ2ZXIgPSBOVUxMOworI2VuZGlmIC8qIEtSQjUg Ki8KKworI2lmZGVmIENLX1NSUAorI2lmZGVmIFBSRV9TUlBfMV80XzQKKyNpZm5kZWYgUFJFX1NS UF8xXzRfNQorI2RlZmluZSBQUkVfU1JQXzFfNF81CisjZW5kaWYgLyogUFJFX1NSUF8xXzRfNSAq LworI2VuZGlmIC8qIFBSRV9TUlBfMV80XzUgKi8KKyNpZmRlZiBQUkVfU1JQXzFfNF81CisjaWZu ZGVmIFBSRV9TUlBfMV83XzMKKyNkZWZpbmUgUFJFX1NSUF8xXzdfMworI2VuZGlmIC8qIFBSRV9T UlBfMV83XzMgKi8KKyNlbmRpZiAvKiBQUkVfU1JQXzFfNF81ICovCisjaW5jbHVkZSA8dF9wd2Qu aD4KKyNpbmNsdWRlIDx0X2NsaWVudC5oPgorI2luY2x1ZGUgPHRfc2VydmVyLmg+CitzdGF0aWMg c3RydWN0IHRfc2VydmVyICogdHMgPSBOVUxMOworc3RhdGljIHN0cnVjdCB0X2NsaWVudCAqIHRj ID0gTlVMTDsKKyNpZmRlZiBQUkVfU1JQXzFfNF80CitzdGF0aWMgc3RydWN0IHRfcHcgKiB0cHcg PSBOVUxMOworc3RhdGljIHN0cnVjdCB0X2NvbmYgKiB0Y29uZiA9IE5VTEw7CisjZW5kaWYgLyog UFJFX1NSUF8xXzRfNCAqLworI2lmbmRlZiBQUkVfU1JQXzFfN18zCisjaWZuZGVmIFNURENfSEVB REVSUworI2RlZmluZSBTVERDX0hFQURFUlMgMQorI2VuZGlmIC8qIFNURENfSEVBREVSUyAqLwor I2luY2x1ZGUgPHNycC5oPgorc3RhdGljIFNSUCAqIHNfc3JwID0gTlVMTDsKK3N0YXRpYyBjc3Ry ICogc19rZXkgPSBOVUxMOworc3RhdGljIFNSUCAqIGNfc3JwID0gTlVMTDsKK3N0YXRpYyBjc3Ry ICogY19rZXkgPSBOVUxMOworI2VuZGlmIC8qIFBSRV9TUlBfMV83XzMgKi8KK3N0YXRpYyBpbnQg c3JwX3dhaXRyZXNwID0gMDsgICAgLyogRmxhZyB0byBpbmRpY2F0ZSByZWFkaW5lc3MgZm9yIHJl c3BvbnNlICovCitzdGF0aWMgY2hhciBzcnBfcGFzc3dkW1BXRF9TWl07CisjZW5kaWYgLyogQ0tf U1JQICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIFJMT0dDT0RFCisjZGVmaW5lIE9Q VFNfRk9SV0FSRF9DUkVEUyAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBPUFRTX0ZPUldB UkRBQkxFX0NSRURTICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgS0NNRF9LRVlVU0FHRSAgICAg ICAgICAgICAgICAxMDI2CisKKyNkZWZpbmUgUkxPR19CVUZTSVogNTEyMAorc3RhdGljIGludCBy bG9nX2VuY3J5cHQgPSAwOworY2hhciBkZXNfaW5idWZbMipSTE9HX0JVRlNJWl07ICAgICAgIC8q IG5lZWRzIHRvIGJlID4gbGFyZ2VzdCByZWFkIHNpemUgKi8KK2NoYXIgZGVzX291dHBrdFsyKlJM T0dfQlVGU0laKzRdOyAgICAvKiBuZWVkcyB0byBiZSA+IGxhcmdlc3Qgd3JpdGUgc2l6ZSAqLwor I2lmZGVmIEtSQjUKK2tyYjVfZGF0YSBkZXNpbmJ1ZixkZXNvdXRidWY7CitrcmI1X2VuY3J5cHRf YmxvY2sgZWJsb2NrOyAgICAgICAgICAgICAvKiBlYmxvY2sgZm9yIGVuY3J5cHQvZGVjcnlwdCAq Lworc3RhdGljIGtyYjVfZGF0YSBlbmNpdmVjX2lbMl0sIGVuY2l2ZWNfb1syXTsKKworZW51bSBr cmI1X2tjbWRfcHJvdG8geworICAvKiBPbGQgcHJvdG9jb2w6IERFUyBlbmNyeXB0aW9uIG9ubHku ICBObyBzdWJrZXlzLiAgTm8gcHJvdGVjdGlvbgorICAgICBmb3IgY2xlYXJ0ZXh0IGxlbmd0aC4g IE5vIGl2ZWMgc3VwcGxpZWQuICBPT0IgaGFja3MgdXNlZCBmb3IKKyAgICAgcmxvZ2luLiAgQ2hl Y2tzdW0gbWF5IGJlIG9taXR0ZWQgYXQgY29ubmVjdGlvbiBzdGFydHVwLiAgKi8KKyAgS0NNRF9P TERfUFJPVE9DT0wgPSAxLAorICAvKiBOZXcgcHJvdG9jb2w6IEFueSBlbmNyeXB0aW9uIHNjaGVt ZS4gIENsaWVudC1nZW5lcmF0ZWQgc3Via2V5CisgICAgIHJlcXVpcmVkLiAgUHJlcGVuZCBjbGVh cnRleHQtbGVuZ3RoIHRvIGNsZWFydGV4dCBkYXRhIChidXQgZG9uJ3QKKyAgICAgaW5jbHVkZSBp dCBpbiBjb3VudCkuICBTdGFydGluZyBpdmVjIGRlZmluZWQsIGNoYWluZWQuICBJbi1iYW5kCisg ICAgIHNpZ25hbGxpbmcuICBDaGVja3N1bSByZXF1aXJlZC4gICovCisgIEtDTURfTkVXX1BST1RP Q09MLAorICAvKiBIYWNrOiBHZXQgY3JlZGVudGlhbHMsIGFuZCB1c2UgdGhlIG9sZCBwcm90b2Nv bCBpZmYgdGhlIHNlc3Npb24KKyAgICAga2V5IHR5cGUgaXMgc2luZ2xlLURFUy4gICovCisgIEtD TURfUFJPVE9DT0xfQ09NUEFUX0hBQ0ssCisgIEtDTURfVU5LTk9XTl9QUk9UT0NPTAorfTsKK2Vu dW0ga3JiNV9rY21kX3Byb3RvIGtyYjVfcmxvZ192ZXIgPSBLQ01EX1BST1RPQ09MX0NPTVBBVF9I QUNLOworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworc3RhdGljIGNo YXIgc3RvcmFnZVs2NTUzNl07ICAgICAgICAgICAgLyogc3RvcmFnZSBmb3IgdGhlIGRlY3J5cHRp b24gKi8KK3N0YXRpYyBpbnQgbnN0b3JlZCA9IDA7CitzdGF0aWMgY2hhciAqc3RvcmVfcHRyID0g c3RvcmFnZTsKKworZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcHJpbmNpcGFsOyAgICAgICAgIC8qIERl ZmF1bHQgcHJpbmNpcGFsICovCitleHRlcm4gY2hhciAqIGtyYjVfZF9pbnN0YW5jZTsgICAgICAg ICAgLyogRGVmYXVsdCBpbnN0YW5jZSAqLworZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcmVhbG07ICAg ICAgICAgICAgIC8qIERlZmF1bHQgcmVhbG0gKi8KK2V4dGVybiBjaGFyICoga3JiNV9kX2NjOyAg ICAgICAgICAgICAgICAvKiBEZWZhdWx0IGNyZWRlbnRpYWxzIGNhY2hlICovCitleHRlcm4gY2hh ciAqIGtyYjVfZF9zcnY7ICAgICAgICAgICAgICAgLyogRGVmYXVsdCBzZXJ2aWNlIG5hbWUgKi8K K2V4dGVybiBpbnQgICAga3JiNV9kX2xpZmV0aW1lOyAgICAgICAgICAvKiBEZWZhdWx0IGxpZmV0 aW1lICovCitleHRlcm4gaW50ICAgIGtyYjVfZF9mb3J3YXJkYWJsZTsKK2V4dGVybiBpbnQgICAg a3JiNV9kX3Byb3hpYWJsZTsKK2V4dGVybiBpbnQgICAga3JiNV9kX3JlbmV3YWJsZTsKK2V4dGVy biBpbnQgICAga3JiNV9hdXRvZ2V0OworZXh0ZXJuIGludCAgICBrcmI1X2NoZWNrYWRkcnM7Citl eHRlcm4gaW50ICAgIGtyYjVfZF9nZXRrNDsKK2V4dGVybiBpbnQgICAga3JiNV9kX25vX2FkZHJl c3NlczsKK2V4dGVybiBjaGFyICogazVfa2V5dGFiOworCitleHRlcm4gaW50ICAgIGtyYjVfZXJy bm87CitleHRlcm4gY2hhciAqIGtyYjVfZXJybXNnOworCitleHRlcm4gY2hhciAqIGtyYjRfZF9w cmluY2lwYWw7ICAgICAgICAgLyogRGVmYXVsdCBwcmluY2lwYWwgKi8KK2V4dGVybiBjaGFyICog a3JiNF9kX3JlYWxtOyAgICAgICAgICAgICAvKiBEZWZhdWx0IHJlYWxtICovCitleHRlcm4gY2hh ciAqIGtyYjRfZF9zcnY7ICAgICAgICAgICAgICAgLyogRGVmYXVsdCBzZXJ2aWNlIG5hbWUgKi8K K2V4dGVybiBpbnQgICAga3JiNF9kX2xpZmV0aW1lOyAgICAgICAgICAvKiBEZWZhdWx0IGxpZmV0 aW1lICovCitleHRlcm4gaW50ICAgIGtyYjRfZF9wcmVhdXRoOworZXh0ZXJuIGNoYXIgKiBrcmI0 X2RfaW5zdGFuY2U7CitleHRlcm4gaW50ICAgIGtyYjRfYXV0b2dldDsKK2V4dGVybiBpbnQgICAg a3JiNF9jaGVja2FkZHJzOworZXh0ZXJuIGNoYXIgKiBrNF9rZXl0YWI7CisKK2V4dGVybiBpbnQg ICAga3JiNF9lcnJubzsKK2V4dGVybiBjaGFyICoga3JiNF9lcnJtc2c7CisjZW5kaWYgLyogQ0tf S0VSQkVST1MgKi8KKworZXh0ZXJuIGNoYXIgdG5fbXNnW10sIGhleGJ1ZltdOyAgICAgICAgIC8q IGZyb20gY2tjbmV0LmMgKi8KK2V4dGVybiBDSEFSIHB3YnVmW107CitleHRlcm4gaW50ICBwd2Zs ZywgcHdjcnlwdDsKK2V4dGVybiBpbnQgZGVibG9nLCBkZWJzZXMsIHRuX2RlYjsKK2V4dGVybiBp bnQgc3N0ZWxuZXQsIGluc2VydmVyOworI2lmZGVmIENLX0xPR0lOCitleHRlcm4gaW50IGNreGFu b247CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KK2V4dGVybiBpbnQgdG5fYXV0aF9ob3c7CitleHRl cm4gaW50IHRuX2F1dGhfZW5jOworI2lmZGVmIENLX0VOQ1JZUFRJT04KK2V4dGVybiBpbnQgY3hf dHlwZTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCitleHRlcm4gaW50IHF1aWV0LCB0dHlm ZCwgdHRucHJvdG87CisKK2ludAorY2tfZ3NzYXBpX2lzX2luc3RhbGxlZCgpCit7CisjaWZkZWYg S1JCNQorI2lmZGVmIE9TMgorICAgIHJldHVybihoR1NTQVBJICE9IE5VTEwpOworI2Vsc2UgLyog T1MyICovCisgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIE9TMiAqLworI2Vsc2UgLyogS1JCNSAq LworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBLUkI1ICovCit9CisKK2ludAorY2tfa3JiNV9p c19pbnN0YWxsZWQoKQoreworI2lmZGVmIEtSQjUKKyNpZmRlZiBPUzIKKyAgICByZXR1cm4oaEtS QjVfMzIgIT0gTlVMTCk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICByZXR1cm4oMSk7CisjZW5kaWYg LyogT1MyICovCisjZWxzZSAvKiBLUkI1ICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIEtS QjUgKi8KK30KKworCitpbnQKK2NrX2tyYjVfaXNfaW5zdGFsbGVkX2FzX3NlcnZlcigpCit7Cisj aWZkZWYgS1JCNQorI2lmZGVmIEhFSU1EQUwKKyAgICBrcmI1X2Vycm9yX2NvZGUgcmV0OworICAg IGtyYjVfa2V5dGFiIGt0OworICAgIGtyYjVfa3RfY3Vyc29yIGN1cnNvcjsKKworICAgIHJldCA9 IGtyYjVfa3RfZGVmYXVsdChrNV9jb250ZXh0LCAma3QpOworICAgIGlmICggcmV0ICkgeworICAg ICAgICBrcmI1X2t0X2Nsb3NlKGs1X2NvbnRleHQsIGt0KTsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0gZWxzZSB7CisgICAgICAgIGtyYjVfa3RfZW5kX3NlcV9nZXQoazVfY29udGV4dCwga3Qs ICZjdXJzb3IpOworICAgICAgICBrcmI1X2t0X2Nsb3NlKGs1X2NvbnRleHQsIGt0KTsKKyAgICAg ICAgcmV0dXJuKDEpOworICAgIH0KKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyNpZm5kZWYgQ09NTUVO VAorICAgIGNoYXIga3RuYW1lW0NLTUFYUEFUSF09IiI7CisKKyAgICBpZiAoIGs1X2tleXRhYiAp IHsKKyAgICAgICAgY2tzdHJuY3B5KGt0bmFtZSxrNV9rZXl0YWIsQ0tNQVhQQVRIKTsKKyAgICB9 IGVsc2UgeworICAgICAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKKworICAgICAgICBpZiAoIGs1 X2NvbnRleHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmIChrcmI1X2luaXRfY29udGV4dCgmazVf Y29udGV4dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworCisgICAgICAgIGNvZGUgPSBr cmI1X2t0X2RlZmF1bHRfbmFtZShrNV9jb250ZXh0LGt0bmFtZSxDS01BWFBBVEgpOworICAgICAg ICBkZWJ1ZyhGMTAxLCJrcmI1X2t0X2RlZmF1bHRfbmFtZSIsIiIsY29kZSk7CisgICAgICAgIGlm ICggY29kZSApIHsKKyAgICAgICAgICAgIC8qIFdlIGNhbid0IGNoZWNrIHRoZSBleGlzdGVuY2Ug b2YgdGhlIGZpbGUgc2luY2Ugd2UgY2FuJ3QgICAqLworICAgICAgICAgICAgLyogZGV0ZXJtaW5l IHRoZSBmaWxlIG5hbWUuICBTbyB3ZSByZXR1cm4gVFJVRSBhbmQgbGV0ICAgICAgICovCisgICAg ICAgICAgICAvKiBLcmI1IGJlIG9mZmVyZWQgdG8gdGhlIHVzZXIgZXZlbiB0aG91Z2ggaXQgbWF5 IGZhaWwgbGF0ZXIgKi8KKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGlmICggIXN0cm5jbXAoIkZJTEU6IixrdG5hbWUsNSkgKSB7CisgICAgICAgIGlmICgg emNoa2koJmt0bmFtZVs1XSkgPiAwICkKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChr dG5hbWVbMF0pCisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHJldHVybigwKTsKKyAgICB9CisjZWxzZSAvKiBDT01NRU5UICovCisgICAga3JiNV9lcnJv cl9jb2RlICAgICAgICAgICAgIGtyYjVyYyA9IEtSQjVLUkJfRVJSX0dFTkVSSUM7CisgICAga3Ji NV9jb250ZXh0ICAgICAgICAgICAgICAgIGtyYjVjb250ZXh0ID0gTlVMTDsKKyAgICBrcmI1X2Nj YWNoZSAgICAgICAgICAgICAgICAga3JiNWNjZGVmID0gTlVMTDsKKyAgICBrcmI1X2NyZWRzICAg ICAgICAgICAgICAgICAga3JiNWNyZWRzLCAqa3JiNWNyZWRzcCA9IE5VTEw7CisgICAgaW50ICAg ICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKworICAgIGlmICggIWNrX2tyYjVfaXNfaW5z dGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBtZW1zZXQoKGNoYXIgKikma3Ji NWNyZWRzLCAwLCBzaXplb2Yoa3JiNWNyZWRzKSk7CisKKyAgICBpZiAoKGtyYjVyYyA9IGtyYjVf aW5pdF9jb250ZXh0KCZrcmI1Y29udGV4dCkpICE9IDApCisgICAgICAgIGdvdG8gZXJyOworCisg ICAgaWYgKChrcmI1cmMgPSBrcmI1X3NuYW1lX3RvX3ByaW5jaXBhbChrcmI1Y29udGV4dCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6SG9zdE5hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X2Rfc3J2ID8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9zcnYgOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9TRVJWSUNFX05BTUUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X05UX1NSVl9IU1Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma3JiNWNyZWRzLnNl cnZlcikpICE9IDApCisgICAgICBnb3RvIGVycjsKKworICAgIGlmICgoa3JiNXJjID0ga3JiNV9j Y19kZWZhdWx0KGtyYjVjb250ZXh0LCAma3JiNWNjZGVmKSkgIT0gMCkKKyAgICAgICAgZ290byBl cnI7CisKKyAgICBpZiAoKGtyYjVyYyA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrcmI1Y29udGV4 dCwga3JiNWNjZGVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm a3JiNWNyZWRzLmNsaWVudCkpICE9IDApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgaWYgKChr cmI1cmMgPSBrcmI1X2dldF9jcmVkZW50aWFscyhrcmI1Y29udGV4dCwgMCwga3JiNWNjZGVmLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrcmI1Y3JlZHMsICZrcmI1 Y3JlZHNwKSkgIT0gMCkKKyAgICAgICAgZ290byBlcnI7CisgICAgcmMgPSAxOworCisgIGVycjoK KworICAgIGlmIChrcmI1Y3JlZHMuY2xpZW50KQorICAgICAga3JiNV9mcmVlX3ByaW5jaXBhbChr cmI1Y29udGV4dCwga3JiNWNyZWRzLmNsaWVudCk7CisgICAgaWYgKGtyYjVjcmVkcy5zZXJ2ZXIp CisgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtyYjVjb250ZXh0LCBrcmI1Y3JlZHMuc2VydmVy KTsKKyAgICBpZiAoa3JiNWNvbnRleHQpCisgICAgICBrcmI1X2ZyZWVfY29udGV4dChrcmI1Y29u dGV4dCk7CisgICAgcmV0dXJuKHJjKTsKKworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAv KiBIRUlNREFMICovCisjZWxzZSAvKiBLUkI1ICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8q IEtSQjUgKi8KK30KKworaW50Citja19rcmI0X2lzX2luc3RhbGxlZCgpCit7CisjaWZkZWYgS1JC NAorI2lmZGVmIE9TMgorICAgIHJldHVybihoS1JCNF8zMiAhPSBOVUxMKTsKKyNlbHNlIC8qIE9T MiAqLworICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNlIC8qIEtSQjQgKi8K KyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogS1JCNCAqLworfQorCitpbnQKK2NrX2tyYjRfaXNf aW5zdGFsbGVkX2FzX3NlcnZlcigpCit7CisgICAgaWYgKCAhY2tfa3JiNF9pc19pbnN0YWxsZWQo KSApCisgICAgICAgIHJldHVybigwKTsKKworI2lmZGVmIEtSQjQKKyAgICBpZiAoICFrNF9rZXl0 YWIgKSB7CisjaWZkZWYgTlQKKyAgICAgICAgY2hhciBuYW1lW0NLTUFYUEFUSF09IiI7CisgICAg ICAgIERXT1JEIGxlbiA9IENLTUFYUEFUSDsKKworICAgICAgICBsZW4gPSBHZXRXaW5kb3dzRGly ZWN0b3J5KG5hbWUsbGVuKTsKKyAgICAgICAgaWYgKCBsZW4gPiAwICkKKyAgICAgICAgICAgIGNr c3RybmNhdChuYW1lLCIvc3J2dGFiIixDS01BWFBBVEgpOworICAgICAgICBpZiAoIG5hbWVbMF0g KQorICAgICAgICAgICAgbWFrZXN0cigmazRfa2V5dGFiLG5hbWUpOworI2Vsc2UgLyogTlQgKi8K KyAgICAgICAgbWFrZXN0cigmazRfa2V5dGFiLCIvZXRjL3NydnRhYiIpOworI2VuZGlmIC8qIE5U ICovCisgICAgfQorCisgICAgaWYgKCAhazRfa2V5dGFiICkKKyAgICAgICAgcmV0dXJuKDApOwor CisgICAgaWYgKCB6Y2hraShrNF9rZXl0YWIpID4gMCApCisgICAgICAgIHJldHVybigxKTsKKyNp ZmRlZiBLUkI1MjQKKyAgICBlbHNlIGlmIChja19rcmI1X2lzX2luc3RhbGxlZF9hc19zZXJ2ZXIo KSkKKyAgICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIEtSQjUyNCAqLworICAgIGVsc2UKKyAg ICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIEtSQjQgKi8KK30KKworaW50Citja19zcnBfaXNf aW5zdGFsbGVkX2FzX3NlcnZlcigpCit7CisjaWZkZWYgQ0tfU1JQCisjaWZkZWYgU1JQRExMCisg ICAgaWYgKCBoU1JQID09IE5VTEwgKQorICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogU1JQ RExMICovCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFRoaXMgaXMgdGhlIG5ldyBBUEkgYXMgb2Yg MS43LjQuICBIb3dldmVyLCBhbGwgaXQgZG9lcworICAgICAgIGlzIGFsbG9jYXRlIGEgZGF0YSBz dHJ1Y3R1cmUuICBJdCBjYW4gbmV2ZXIgZmFpbC4KKyAgICAgKi8KKyAgICB7CisgICAgICAgIFNS UCAqIHNfc3JwID0gU1JQX25ldyhTUlBfUkZDMjk0NV9zZXJ2ZXJfbWV0aG9kKCkpOworICAgICAg ICBpZiAoIHNfc3JwICkgeworICAgICAgICAgICAgU1JQX2ZyZWUoc19zcnApOworICAgICAgICAg ICAgc19zcnAgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICB9CisgICAg ICAgIHJldHVybigwKTsKKyAgICB9CisjZWxzZSAvKiBDT01NRU5UICovCisgICAgeworICAgICAg ICBzdHJ1Y3QgdF9wdyAqIHRwdyA9IE5VTEw7CisgICAgICAgIHN0cnVjdCB0X2NvbmYgKiB0Y29u ZiA9IE5VTEw7CisgICAgICAgIGlmKCh0Y29uZiA9IHRfb3BlbmNvbmYoTlVMTCkpID09IE5VTEwp CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIGlmKCh0cHcgPSB0X29wZW5wdyhOVUxM KSkgPT0gTlVMTCkgeworICAgICAgICAgICAgdF9jbG9zZWNvbmYodGNvbmYpOworICAgICAgICAg ICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAgIHRfY2xvc2Vjb25mKHRjb25mKTsKKyAg ICAgICAgdF9jbG9zZXB3KHRwdyk7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisjZW5kaWYg LyogQ09NTUVOVCAqLworI2Vsc2UgLyogU1JQICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8q IFNSUCAqLworfQorCitpbnQKK2NrX3NycF9pc19pbnN0YWxsZWQoKQoreworI2lmZGVmIENLX1NS UAorI2lmZGVmIFNSUERMTAorICAgIGlmICggaFNSUCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJu KDApOworI2VuZGlmIC8qIFNSUERMTCAqLworICAgIHJldHVybigxKTsKKyNlbHNlIC8qIENLX1NS UCAqLworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDS19TUlAgKi8KK30KKworaW50Citja19r cnlwdG9faXNfaW5zdGFsbGVkKCkKK3sKKyNpZmRlZiBDS19TUlAKKyNpZmRlZiBPUzIKKyAgICBp ZiAoIGhMSUJLUllQVE8gPT0gTlVMTCApCisgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICByZXR1cm4oMSk7CisjZWxzZSAvKiBDS19TUlAgKi8KKyAgICByZXR1cm4oMCk7 CisjZW5kaWYgLyogQ0tfU1JQICovCit9CisKK2ludAorY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkK K3sKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZkZWYgQ1JZUFRfRExMCisgICAgcmV0dXJuKGhD UllQVCAhPSBOVUxMKTsKKyNlbHNlIC8qIENSWVBUX0RMTCAqLworICAgIHJldHVybigxKTsKKyNl bmRpZiAvKiBDUllQVF9ETEwgKi8KKyNlbHNlIC8qIEVOQ1JZUFRJT04gKi8KKyAgICByZXR1cm4o MCk7CisjZW5kaWYgLyogRU5DUllQVElPTiAqLworfQorCitpbnQKK2NrX250bG1faXNfaW5zdGFs bGVkKCkKK3sKKyNpZmRlZiBOVAorICAgIHJldHVybihoU1NQSSAhPSBOVUxMKTsKKyNlbHNlIC8q IE5UICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE5UICovCit9CisKK2ludAorY2tfdG5f YXV0aF92YWxpZCgpCit7CisgICAgcmV0dXJuKHZhbGlkVXNlcik7Cit9CisKKy8qIEMgSyBfIEsg UiBCIF8gQSBVIFQgSCBfIEkgTiBfIFAgUiBPIEcgUiBFIFMgUworICoKKyAqIElzIGFuIGF1dGhl bnRpY2F0aW9uIG5lZ290aWF0aW9uIHN0aWxsIGluIHByb2dyZXNzPworICoKKyAqLworCitpbnQK KyNpZmRlZiBDS19BTlNJQworY2tfdG5fYXV0aF9pbl9wcm9ncmVzcyh2b2lkKQorI2Vsc2UKK2Nr X3RuX2F1dGhfaW5fcHJvZ3Jlc3MoKQorI2VuZGlmCit7CisgICAgc3dpdGNoIChhdXRoZW50aWNh dGlvbl92ZXJzaW9uKSB7CisgICAgY2FzZSBBVVRIVFlQRV9BVVRPOgorICAgICAgICByZXR1cm4o MSk7CisgICAgY2FzZSBBVVRIVFlQRV9OVUxMOgorICAgICAgICByZXR1cm4oMCk7CisjaWZkZWYg S1JCNAorICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6CisgICAgICAgIGlmICghYWNjZXB0 X2NvbXBsZXRlKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJja19hdXRoX2luX3Byb2dyZXNz KCkgS2VyYmVyb3MgNCAhYWNjZXB0X2NvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAiIiww KTsKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgo YXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSAmJiAhbXV0dWFsX2NvbXBsZXRlKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJja19hdXRoX2luX3Byb2dyZXNzKCkgS2VyYmVyb3MgNCAhbXV0dWFs X2NvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAiIiwwKTsKKyAgICAgICAgICAgIHJldHVy bigxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4oMCk7Cisj ZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyAgICBjYXNlIEFVVEhUWVBFX0tFUkJFUk9T X1Y1OgorICAgICAgICBpZiAoIWFjY2VwdF9jb21wbGV0ZSkgeworICAgICAgICAgICAgZGVidWco RjEwMCwiY2tfYXV0aF9pbl9wcm9ncmVzcygpIEtlcmJlcm9zIDUgIWFjY2VwdF9jb21wbGV0ZSIs CisgICAgICAgICAgICAgICAgICAgIiIsMCk7CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAg ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgJiYgIW11 dHVhbF9jb21wbGV0ZSkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwiY2tfYXV0aF9pbl9wcm9n cmVzcygpIEtlcmJlcm9zIDUgIW11dHVhbF9jb21wbGV0ZSIsCisgICAgICAgICAgICAgICAgICAg IiIsMCk7CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor ICAgICAgICAgICAgcmV0dXJuKDApOworI2lmZGVmIEdTU0FQSV9LNQorICAgIGNhc2UgQVVUSFRZ UEVfR1NTQVBJX0tSQjU6CisgICAgICAgIGlmICghYWNjZXB0X2NvbXBsZXRlKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAwLAorCQkgICJja19hdXRoX2luX3Byb2dyZXNzKCkgR1NTQVBJIEtlcmJl cm9zIDUgIWFjY2VwdF9jb21wbGV0ZSIsCisJCSAgIiIsCisJCSAgMAorCQkgICk7CisgICAgICAg ICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGF1dGhfaG93ICYg QVVUSF9IT1dfTUFTSykgJiYgIW11dHVhbF9jb21wbGV0ZSkgeworICAgICAgICAgICAgZGVidWco RjEwMCwKKwkJICAiY2tfYXV0aF9pbl9wcm9ncmVzcygpIEdTU0FQSSBLZXJiZXJvcyA1ICFtdXR1 YWxfY29tcGxldGUiLAorCQkgICIiLAorCQkgIDAKKwkJICApOworICAgICAgICAgICAgcmV0dXJu KDEpOworICAgICAgICB9IGVsc2UKKwkgIHJldHVybigwKTsKKyAgICAgICAgYnJlYWs7CisjZW5k aWYgLyogR1NTQVBJX0s1ICovCisjZW5kaWYgLyogS1JCNSAqLworI2lmZGVmIENLX1NSUAorICAg IGNhc2UgQVVUSFRZUEVfU1JQOgorICAgICAgICBpZiAoIWFjY2VwdF9jb21wbGV0ZSB8fCBzcnBf d2FpdHJlc3ApCisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDS19TUlAgKi8KKyNpZmRlZiBOVExNCisgICAgY2Fz ZSBBVVRIVFlQRV9OVExNOgorICAgICAgICBpZiAoIWFjY2VwdF9jb21wbGV0ZSkgeworICAgICAg ICAgICAgZGVidWcoRjEwMCwiY2tfYXV0aF9pbl9wcm9ncmVzcygpIE5UTE0gIWFjY2VwdF9jb21w bGV0ZSIsCisgICAgICAgICAgICAgICAgICAgIiIsMCk7CisgICAgICAgICAgICByZXR1cm4oMSk7 CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKDApOworI2VuZGlm IC8qIE5UTE0gKi8KKyAgICBjYXNlIEFVVEhUWVBFX1NTTDoKKyAgICAgICAgaWYgKCFhY2NlcHRf Y29tcGxldGUpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImNrX2F1dGhfaW5fcHJvZ3Jlc3Mo KSBTU0wgIWFjY2VwdF9jb21wbGV0ZSIsCisgICAgICAgICAgICAgICAgICAgIiIsMCk7CisgICAg ICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAg cmV0dXJuKDApOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAg cmV0dXJuKDApOworfQorCisKKy8qICBDIEsgXyBLIFIgQiBfIFQgTiBfIEEgVSBUIEggXyBSIEUg USBVIEUgUyBUCisgKgorICogIEJ1aWxkcyBhIFRlbG5ldCBBdXRoZW50aWNhdGlvbiBTZW5kIE5l Z290aWF0aW9uIHByb3ZpZGluZyB0aGUKKyAqICBsaXN0IG9mIHN1cHBvcnRlZCBhdXRoZW50aWNh dGlvbiBtZXRob2RzLiAgVG8gYmUgdXNlZCBvbmx5CisgKiAgd2hlbiBhY2NlcHRpbmcgaW5jb21p bmcgY29ubmVjdGlvbnMgYXMgb25seSB0aGUgc2VydmVyIChETykgc2lkZSBvZiB0aGUKKyAqICBU ZWxuZXQgbmVnb3RpYXRpb24gaXMgYWxsb3dlZCB0byBzZW5kIGFuIEFVVEggU0VORC4KKyAqCisg KiAgUmV0dXJuczogMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlCisgKi8KKworc3RhdGlj IHVuc2lnbmVkIGNoYXIgc3RyX3JlcXVlc3RbNjRdID0geyBJQUMsIFNCLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMUVVBTF9TRU5E IH07CisjaWZkZWYgR1NTQVBJX0s1CitzdGF0aWMgaW50Citja190bl9hdXRoX3JlcXVlc3RfZ3Nz a3JiNShpbnQgaSkKK3sKKyAgICBpZiAoY2tfZ3NzYXBpX2lzX2luc3RhbGxlZCgpICYmIGNrX2ty YjVfaXNfaW5zdGFsbGVkX2FzX3NlcnZlcigpKSB7CisgICAgICAgIGlmICggKHRuX2F1dGhfaG93 ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5f QVVUSF9IT1dfTVVUVUFMKSAgJiYKKyAgICAgICAgICAgICAodG5fYXV0aF9lbmMgPT0gVE5fQVVU SF9FTkNfQU5ZIHx8CisgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19F WENIKSApIHsKKyAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJP U19WNTsKKyAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVS IHwgQVVUSF9IT1dfTVVUVUFMOworICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9F TkNSWVBUX0FGVEVSX0VYQ0hBTkdFOworCisgICAgICAgICAgICBpZiAoIGRlYmxvZyB8fCB0bl9k ZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLAorICAgICAg ICAgICAgICAgICJLRVJCRVJPU19WNSBDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX0FG VEVSX0VYQ0hBTkdFICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFROX01TR19MRU4pOwor ICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8qIEdTU0FQSV9L NSAqLworCisjaWZkZWYgS1JCNQorc3RhdGljIGludAorY2tfdG5fYXV0aF9yZXF1ZXN0X2tyYjUo aW50IGkpCit7CisgICAgaWYgKGNrX2tyYjVfaXNfaW5zdGFsbGVkX2FzX3NlcnZlcigpKSB7Cisj aWZkZWYgQ0tfU1NMCisgICAgICAgIGlmICggY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYmCisg ICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpICYmCisgICAg ICAgICAgICAgc3NsX2ZpbmlzaGVkX21lc3NhZ2VzICkKKyAgICAgICAgeworI2lmZGVmIFVTRV9J TklfQ1JFRF9GV0QKKyAgICAgICAgICAgIGlmICggZm9yd2FyZF9mbGFnICYmCisgICAgICAgICAg ICAgICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKKyAgICAgICAgICAgICAg ICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19NVVRVQUwpICAmJgorICAgICAgICAgICAg ICAgICAodG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfQU5ZIHx8CisgICAgICAgICAgICAgICAg ICAgdG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfVEVMT1BUKQorICAgICAgICAgICAgICAgICAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhU WVBFX0tFUkJFUk9TX1Y1OworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9D TElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfTVVUVUFMOworICAgICAgICAgICAgICAgIHN0cl9y ZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9TVEFSVF9UTFM7CisgICAgICAgICAgICAgICAgc3Ry X3JlcXVlc3RbaV0gfD0gSU5JX0NSRURfRldEX09OOworCisgICAgICAgICAgICAgICAgaWYgKCBk ZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNh dCh0bl9tc2csCisgIktFUkJFUk9TX1Y1IENMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRf U1RBUlRfVExTfElOSV9DUkVEX0ZXRF9PTiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBVU0VfSU5JX0NSRURfRldEICovCisgICAgICAgICAgICBpZiAoICh0bl9hdXRoX2hv dyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKKyAgICAgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9 PSBUTl9BVVRIX0hPV19NVVRVQUwpICAmJgorICAgICAgICAgICAgICAgICAodG5fYXV0aF9lbmMg PT0gVE5fQVVUSF9FTkNfQU5ZIHx8CisgICAgICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPT0g VE5fQVVUSF9FTkNfVEVMT1BUKSApIHsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytd ID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0g PSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19NVVRVQUw7CisgICAgICAgICAgICAg ICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUzsKKworICAgICAgICAg ICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQorICAgICAgICAgICAgICAg ICAgICBja3N0cm5jYXQodG5fbXNnLAorICAgICAgICAgICAgICAgICAgICAgICJLRVJCRVJPU19W NSBDTElFTlRfVE9fU0VSVkVSfE1VVFVBTHxFTkNSWVBUX1NUQVJUX1RMUyAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7CisgICAgICAgICAgICAgICAgaSsrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hP V19BTlkgfHwKKyAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfT05F X1dBWSApIHsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VS QkVST1NfVjU7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9U T19TRVJWRVIgfCBBVVRIX0hPV19PTkVfV0FZOworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0 W2ldIHw9IEFVVEhfRU5DUllQVF9TVEFSVF9UTFM7CisKKyAgICAgICAgICAgICAgICBpZiAoIGRl YmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0 KHRuX21zZywKKyAgICAgICAgICAgICAgICAgICAgIktFUkJFUk9TX1Y1IENMSUVOVF9UT19TRVJW RVJ8T05FX1dBWXxFTkNSWVBUX1NUQVJUX1RMUyAiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgZWxzZQorICAgICAgICB7 CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVm IENLX0VOQ1JZUFRJT04KKyNpZmRlZiBVU0VfSU5JX0NSRURfRldECisgICAgICAgICAgICBpZiAo IGZvcndhcmRfZmxhZyAmJgorICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRf RU5DUllQVElPTikgIT0gVE5fTkdfUkYgJiYKKyAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9E RShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfUkYgJiYKKyAgICAgICAgICAgICAgICAgKHRu X2F1dGhfaG93ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAgICAgICAgIHRuX2F1 dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVBTCkgICYmCisgICAgICAgICAgICAgICAgICh0bl9h dXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAgICAgICAgICAgICAgICAgICB0bl9hdXRo X2VuYyA9PSBUTl9BVVRIX0VOQ19URUxPUFQpCisgICAgICAgICAgICAgICAgICkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VSQkVS T1NfVjU7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19T RVJWRVIgfCBBVVRIX0hPV19NVVRVQUw7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0g fD0gQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVDsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVz dFtpXSB8PSBJTklfQ1JFRF9GV0RfT047CisKKyAgICAgICAgICAgICAgICBpZiAoIGRlYmxvZyB8 fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21z ZywKKyAgIktFUkJFUk9TX1Y1IENMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZUFRfVVNJTkdf VEVMT1BUfElOSV9DUkVEX0ZXRF9PTiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyNlbmRp ZiAvKiBVU0VfSU5JX0NSRURfRldEICovCisKKyAgICAgICAgICAgIGlmICggVEVMT1BUX01FX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX1JGICYmCisgICAgICAgICAgICAgICAgIFRF TE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pICE9IFROX05HX1JGICYmCisgICAgICAgICAg ICAgICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKKyAgICAgICAgICAgICAg ICAgICB0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19NVVRVQUwpICAmJgorICAgICAgICAgICAg ICAgICAodG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfQU5ZIHx8CisgICAgICAgICAgICAgICAg ICAgdG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfVEVMT1BUKSApIHsKKyAgICAgICAgICAgICAg ICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7CisgICAgICAgICAgICAg ICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19NVVRV QUw7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX1VTSU5H X1RFTE9QVDsKKworICAgICAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJz ZXMgKQorICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLAorICAgICAgICAgICAg ICAiS0VSQkVST1NfVjUgQ0xJRU5UX1RPX1NFUlZFUnxNVVRVQUx8RU5DUllQVF9VU0lOR19URUxP UFQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKKyAgICAg ICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisjaWZkZWYgQ0tfU1NMCisgICAgICAgIH0K KyNlbmRpZiAvKiBDS19TU0wgKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisKKyAgICAg ICAgaWYgKCBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYK KyAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19N VSAmJgorICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAg ICAgICAgICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX05PTkUpCisjaWZkZWYgQ0tf U1NMCisgICAgICAgICAgICAgJiYgIShja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYKKyAgICAg ICAgICAgICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykgJiYKKyAg ICAgICAgICAgICAgICAgICB0bHNfaXNfYW5vbigwKSkKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAg ICAgICAgICAgICApCisgICAgICAgIHsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAg ICAvKiBDYW4ndCBwZXJmb3JtIG11dHVhbCBhdXRoZW50aWNhdGlvbiB3aXRob3V0IGVuY3J5cHRp b24gKi8KKyAgICAgICAgICAgIGlmICggdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8 CisgICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVBTCApIHsK KyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7 CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIg fCBBVVRIX0hPV19NVVRVQUw7CisgICAgICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVU SF9FTkNSWVBUX09GRjsKKworICAgICAgICAgICAgICAgIGlmICggZGVibG9nIHx8IHRuX2RlYiB8 fCBkZWJzZXMgKQorICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5fbXNnLCJLRVJCRVJP U19WNSBDTElFTlRfVE9fU0VSVkVSfE1VVFVBTCAiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgICAgICBpZiAoIHRuX2F1dGhfaG93 ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAgICAgICB0bl9hdXRoX2hvdyA9PSBU Tl9BVVRIX0hPV19PTkVfV0FZICkgeworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krK10g PSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSA9 IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX09ORV9XQVk7CisgICAgICAgICAgICAg ICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX09GRjsKKworICAgICAgICAgICAgICAg IGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKQorICAgICAgICAgICAgICAgICAgICBj a3N0cm5jYXQodG5fbXNnLCJLRVJCRVJPU19WNSBDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVkgIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKKyAgICAgICAgICAg ICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKGkp OworfQorI2VuZGlmIC8qIEtSQjUgKi8KKyNpZmRlZiBLUkI0CitzdGF0aWMgaW50Citja190bl9h dXRoX3JlcXVlc3Rfa3JiNChpbnQgaSkKK3sKKyAgICBpZiAoY2tfa3JiNF9pc19pbnN0YWxsZWRf YXNfc2VydmVyKCkpIHsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgIGlmIChURUxPUFRf TUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfUkYgJiYKKyAgICAgICAgICAgICBU RUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19SRiAmJgorICAgICAgICAg ICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKKyAgICAgICAgICAgICAgIHRu X2F1dGhfaG93ID09IFROX0FVVEhfSE9XX01VVFVBTCkgICYmCisgICAgICAgICAgICAgKHRuX2F1 dGhfZW5jID09IFROX0FVVEhfRU5DX0FOWSB8fAorICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMg PT0gVE5fQVVUSF9FTkNfVEVMT1BUKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cl9yZXF1 ZXN0W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKKyAgICAgICAgICAgIHN0cl9yZXF1ZXN0 W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfTVVUVUFMOworICAgICAgICAg ICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVDsKKworICAgICAg ICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCisgICAgICAgICAgICAgIGNr c3RybmNhdCh0bl9tc2csIktFUkJFUk9TX1Y0IENMSUVOVF9UT19TRVJWRVJ8TVVUVUFMfEVOQ1JZ UFQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFROX01TR19MRU4pOworICAgICAgICAgICAg aSsrOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisgICAgICAgIGlm IChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKKyAgICAg ICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgor ICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAgICAgICAg ICAgICAgIHRuX2F1dGhfZW5jID09IFROX0FVVEhfRU5DX05PTkUpICkKKyAgICAgICAgeworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgIC8qIENhbid0IHBlcmZvcm0gbXV0dWFsIGF1 dGhlbnRpY2F0aW9uIHdpdGhvdXQgZW5jcnlwdGlvbiAqLworICAgICAgICAgICAgaWYgKCB0bl9h dXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKKyAgICAgICAgICAgICAgICAgdG5fYXV0aF9o b3cgPT0gVE5fQVVUSF9IT1dfTVVUVUFMICkgeworICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0 W2krK10gPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVz dFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX01VVFVBTDsKKyAgICAgICAg ICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfT0ZGOworCisgICAgICAgICAg ICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCisgICAgICAgICAgICAgICAg ICAgIGNrc3RybmNhdCh0bl9tc2csIktFUkJFUk9TX1Y0IENMSUVOVF9UT19TRVJWRVJ8TVVUVUFM ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7CisgICAgICAg ICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8K KyAgICAgICAgICAgIGlmICggdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8CisgICAg ICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX09ORV9XQVkgKSB7CisgICAg ICAgICAgICAgICAgc3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0OworICAg ICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVU SF9IT1dfT05FX1dBWTsKKyAgICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VO Q1JZUFRfT0ZGOworCisgICAgICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRl YnNlcyApCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIktFUkJFUk9TX1Y0 IENMSUVOVF9UT19TRVJWRVJ8T05FX1dBWSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFROX01TR19MRU4pOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKworICAgIHJldHVybihpKTsKK30KKyNlbmRpZiAvKiBLUkI0ICovCisK KyNpZmRlZiBDS19TUlAKK3N0YXRpYyBpbnQKK2NrX3RuX2F1dGhfcmVxdWVzdF9zcnAoaW50IGkp Cit7CisgICAgaWYgKGNrX3NycF9pc19pbnN0YWxsZWRfYXNfc2VydmVyKCkpIHsKKyNpZm5kZWYg UFJFX1NSUF8xXzRfNQorICAgICAgICAvKiBEb250JyBkbyB0aGlzIHlldC4gIFNSUCB3aGVuIGl0 IHVzZXMgdGhlIEVOQ1JZUFRfVVNJTkdfVEVMT1BUICAgKi8KKyAgICAgICAgLyogZmxhZyBpdCBt dXN0IHBlcmZvcm0gYSBjaGVja3N1bSBvZiB0aGUgYXV0aC10eXBlLXBhaXIgYnV0IHRoZXJlICov CisgICAgICAgIC8qIGlzIG5vIG1lY2hhbnNpbSB0byBkbyB0aGF0IHlldC4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLworI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoIGNrX3Nz bGVheV9pc19pbnN0YWxsZWQoKSAmJgorICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwg c3NsX2FjdGl2ZV9mbGFnKSAmJgorICAgICAgICAgICAgIHNzbF9maW5pc2hlZF9tZXNzYWdlcyAm JgorICAgICAgICAgICAgICAgICAodG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfQU5ZIHx8Cisg ICAgICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1dfT05FX1dBWSkgICYm CisgICAgICAgICAgICAgICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAg ICAgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19URUxPUFQpKQorICAg ICAgICB7CisgICAgICAgICAgICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfU1JQOworICAg ICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgfCBBVVRIX0hP V19PTkVfV0FZOworICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gfD0gQVVUSF9FTkNSWVBUX1NU QVJUX1RMUzsKKworICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyAp CisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJTUlAgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfU1RBUlRfVExTICIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgIGkr KzsKKyAgICAgICAgfQorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgZWxzZSB7CisjZW5k aWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIENLX0VO Q1JZUFRJT04KKyAgICAgICAgICAgIGlmIChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgIT0gVE5fTkdfUkYgJiYKKyAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRf RU5DUllQVElPTikgIT0gVE5fTkdfUkYgJiYKKyAgICAgICAgICAgICAgICAgKHRuX2F1dGhfaG93 ID09IFROX0FVVEhfSE9XX0FOWSB8fAorICAgICAgICAgICAgICAgICAgIHRuX2F1dGhfaG93ID09 IFROX0FVVEhfSE9XX09ORV9XQVkpICAmJgorICAgICAgICAgICAgICAgICAodG5fYXV0aF9lbmMg PT0gVE5fQVVUSF9FTkNfQU5ZIHx8CisgICAgICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPT0g VE5fQVVUSF9FTkNfVEVMT1BUKQorICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAg ICBzdHJfcmVxdWVzdFtpKytdID0gQVVUSFRZUEVfU1JQOworICAgICAgICAgICAgICAgIHN0cl9y ZXF1ZXN0W2ldID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfT05FX1dBWTsKKyAg ICAgICAgICAgICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BU OworCisgICAgICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCisg ICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csCisgICAgICAgICAgICAgICAgICAg ICJTUlAgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZfEVOQ1JZUFRfVVNJTkdfVEVMT1BUICIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5fTVNHX0xFTik7CisgICAgICAgICAgICAg ICAgaSsrOworICAgICAgICAgICAgfQorI2lmZGVmIENLX1NTTAorICAgICAgICB9CisjZW5kaWYg LyogQ0tfU1NMICovCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIFBSRV9T UlBfMV80XzUgKi8KKyAgICAgICAgaWYgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSAhPSBUTl9OR19NVSAmJgorICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZ UFRJT04pICE9IFROX05HX01VICYmCisgICAgICAgICAgICAgKHRuX2F1dGhfaG93ID09IFROX0FV VEhfSE9XX0FOWSB8fAorICAgICAgICAgICAgICAgdG5fYXV0aF9ob3cgPT0gVE5fQVVUSF9IT1df TVVUVUFMKSAgJiYKKyAgICAgICAgICAgICAodG5fYXV0aF9lbmMgPT0gVE5fQVVUSF9FTkNfQU5Z IHx8CisgICAgICAgICAgICAgICB0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19OT05FKQorI2lm ZGVmIENLX1NTTAorICAgICAgICAgICAgICYmICEoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICYm CisgICAgICAgICAgICAgICAgICAgKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcp ICYmCisgICAgICAgICAgICAgICAgICAgdGxzX2lzX2Fub24oMCkpCisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJfcmVxdWVzdFtp KytdID0gQVVUSFRZUEVfU1JQOworICAgICAgICAgICAgc3RyX3JlcXVlc3RbaV0gPSBBVVRIX0NM SUVOVF9UT19TRVJWRVIgfCBBVVRIX0hPV19PTkVfV0FZOworICAgICAgICAgICAgc3RyX3JlcXVl c3RbaV0gfD0gQVVUSF9FTkNSWVBUX09GRjsKKworICAgICAgICAgICAgaWYgKCBkZWJsb2cgfHwg dG5fZGViIHx8IGRlYnNlcyApCisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiU1JQ IENMSUVOVF9UT19TRVJWRVJ8T05FX1dBWSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg VE5fTVNHX0xFTik7CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy ZXR1cm4oaSk7Cit9CisjZW5kaWYgLyogQ0tfU1JQICovCisKKyNpZmRlZiBDS19TU0wKK3N0YXRp YyBpbnQKK2NrX3RuX2F1dGhfcmVxdWVzdF9zc2woaW50IGkpCit7CisgICAgaWYgKGNrX3NzbGVh eV9pc19pbnN0YWxsZWQoKQorICAgICAgICAgJiYgIXRsc19hY3RpdmVfZmxhZyAmJiAhc3NsX2Fj dGl2ZV9mbGFnICYmIHNzbF9pbml0aWFsaXplZAorICAgICAgICAgKSB7CisgICAgICAgIGlmIChU RUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKKyAgICAgICAg ICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgorICAg ICAgICAgICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKKyAgICAgICAgICAg ICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX09ORV9XQVkpICAmJgorICAgICAgICAgICAg ICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAgICAgICAgICAgICAgIHRuX2F1 dGhfZW5jID09IFROX0FVVEhfRU5DX05PTkUpICkKKyAgICAgICAgeworICAgICAgICAgICAgc3Ry X3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX1NTTDsKKyAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2ld ID0gQVVUSF9DTElFTlRfVE9fU0VSVkVSIHwgQVVUSF9IT1dfT05FX1dBWTsKKyAgICAgICAgICAg IHN0cl9yZXF1ZXN0W2ldIHw9IEFVVEhfRU5DUllQVF9PRkY7CisgICAgICAgICAgICBpZiAoIGRl YmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzICkKKyAgICAgICAgICAgICAgICBja3N0cm5jYXQodG5f bXNnLCJTU0wgQ0xJRU5UX1RPX1NFUlZFUnxPTkVfV0FZICIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgIH0K KworICAgIHJldHVybihpKTsKK30KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBOVExNCitz dGF0aWMgaW50Citja190bl9hdXRoX3JlcXVlc3RfbnRsbShpbnQgaSkKK3sKKyAgICAvKiBNaWNy b3NvZnQncyBUZWxuZXQgY2xpZW50IHdvbid0IHBlcmZvcm0gYXV0aGVudGljYXRpb24gaWYgKi8K KyAgICAvKiBOVExNIGlzIG5vdCBmaXJzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KKyAgICBpZiAoIGNrX250bG1faXNfdmFsaWQoMSkgKSB7CisgICAgICAgIGlm IChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgIT0gVE5fTkdfTVUgJiYKKyAgICAg ICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSAhPSBUTl9OR19NVSAmJgor ICAgICAgICAgICAgICh0bl9hdXRoX2hvdyA9PSBUTl9BVVRIX0hPV19BTlkgfHwKKyAgICAgICAg ICAgICAgIHRuX2F1dGhfaG93ID09IFROX0FVVEhfSE9XX09ORV9XQVkpICAmJgorICAgICAgICAg ICAgICh0bl9hdXRoX2VuYyA9PSBUTl9BVVRIX0VOQ19BTlkgfHwKKyAgICAgICAgICAgICAgIHRu X2F1dGhfZW5jID09IFROX0FVVEhfRU5DX05PTkUpICkKKyAgICAgICAgeworICAgICAgICAgICAg c3RyX3JlcXVlc3RbaSsrXSA9IEFVVEhUWVBFX05UTE07CisgICAgICAgICAgICBzdHJfcmVxdWVz dFtpXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IEFVVEhfSE9XX09ORV9XQVk7CisgICAgICAg ICAgICBzdHJfcmVxdWVzdFtpXSB8PSBBVVRIX0VOQ1JZUFRfT0ZGOworICAgICAgICAgICAgaWYg KCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCisgICAgICAgICAgICAgICAgY2tzdHJuY2F0 KHRuX21zZywiTlRMTSBDTElFTlRfVE9fU0VSVkVSfE9ORV9XQVkgIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFROX01TR19MRU4pOworICAgICAgICAgICAgaSsrOworICAgICAgICB9Cisg ICAgfQorCisgICAgcmV0dXJuKGkpOworfQorI2VuZGlmIC8qIE5UTE0gKi8KK2ludAorI2lmZGVm IENLX0FOU0lDCitja190bl9hdXRoX3JlcXVlc3Qodm9pZCkKKyNlbHNlCitja190bl9hdXRoX3Jl cXVlc3QoKQorI2VuZGlmCit7CisgICAgaW50IGkgPSA0LCByYyA9IC0xOworCisjaWZkZWYgQ0tf U1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9s bG93cykgeworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor CisgICAgaWYgKCBkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcyApCisgICAgICAgIHN0cmNweSh0 bl9tc2csIlRFTE5FVCBTRU5UIFNCIEFVVEhFTlRJQ0FUSU9OIFNFTkQgIik7CisKKyAgICAvKiBD cmVhdGUgYSBsaXN0IG9mIGFjY2VwdGFibGUgQXV0aGVudGljYXRpb24gdHlwZXMgdG8gc2VuZCB0 byAqLworICAgIC8qIHRoZSBjbGllbnQgYW5kIGxldCBpdCBjaG9vc2UgZmluZCBvbmUgdGhhdCB3 ZSBzdXBwb3J0ICAgICAgICovCisKKyAgICAvKiBGb3IgdGhvc2UgYXV0aGVudGljYXRpb24gbWV0 aG9kcyB0aGF0IHN1cHBvcnQgRW5jcnlwdGlvbiBvciAqLworICAgIC8qIENyZWRlbnRpYWxzIEZv cndhcmRpbmcgd2UgbXVzdCBzZW5kIGFsbCBvZiB0aGUgYXBwcm9wcmlhdGUgICovCisgICAgLyog Y29tYmluYXRpb25zIGJhc2VkIHVwb24gdGhlIHN0YXRlIG9mICAgICAgICAgICAgICAgICAgICAg ICAgKi8KKyAgICAvKiBURUxPUFRfeF9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSBhbmQgZm9yd2Fy ZF9mbGFnLiAgICAgICAgICAqLworCisgICAgaWYgKCBhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRI VFlQRV9BVVRPICkgeworI2lmZGVmIEdTU0FQSV9LNQorICAgICAgICBpID0gY2tfdG5fYXV0aF9y ZXF1ZXN0X2dzc2tyYjUoaSk7CisjZW5kaWYgLyogR1NTQVBJX0s1ICovCisjaWZkZWYgS1JCNQor ICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X2tyYjUoaSk7CisjZW5kaWYgLyogS1JCNSAq LworI2lmZGVmIEtSQjQKKyAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9rcmI0KGkpOwor I2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBDS19TUlAKKyAgICAgICAgaSA9IGNrX3RuX2F1dGhf cmVxdWVzdF9zcnAoaSk7CisjZW5kaWYgLyogU1JQICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAg IGkgPSBja190bl9hdXRoX3JlcXVlc3Rfc3NsKGkpOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lm ZGVmIE5UTE0KKyAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9udGxtKGkpOworI2VuZGlm IC8qIE5UTE0gKi8KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgajsKKyAgICAgICAgZm9yICgg aj0wOworICAgICAgICAgICAgICBqPEFVVEhUWVBMU1RTWiAmJiBhdXRoX3R5cGVfdXNlcltqXSAh PSBBVVRIVFlQRV9OVUxMOworICAgICAgICAgICAgICBqKyspIHsKKyNpZmRlZiBOVExNCisgICAg ICAgICAgICBpZiAoYXV0aF90eXBlX3VzZXJbal0gPT0gQVVUSFRZUEVfTlRMTSkKKyAgICAgICAg ICAgICAgICBpID0gY2tfdG5fYXV0aF9yZXF1ZXN0X250bG0oaSk7CisjZW5kaWYgLyogTlRMTSAq LworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgaWYgKCBhdXRoX3R5cGVfdXNlcltqXSA9PSBB VVRIVFlQRV9TU0wgKQorICAgICAgICAgICAgICAgIGkgPSBja190bl9hdXRoX3JlcXVlc3Rfc3Ns KGkpOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIENLX1NSUAorICAgICAgICAgICAgaWYg KCBhdXRoX3R5cGVfdXNlcltqXSA9PSBBVVRIVFlQRV9TUlAgKQorICAgICAgICAgICAgICAgIGkg PSBja190bl9hdXRoX3JlcXVlc3Rfc3JwKGkpOworI2VuZGlmIC8qIFNSUCAqLworI2lmZGVmIEdT U0FQSV9LNQorICAgICAgICAgICAgaWYgKCBhdXRoX3R5cGVfdXNlcltqXSA9PSBBVVRIVFlQRV9H U1NBUElfS1JCNSApCisgICAgICAgICAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVxdWVzdF9nc3Nr cmI1KGkpOworI2VuZGlmIC8qIEdTU0FQSV9LNSAqLworI2lmZGVmIEtSQjUKKyAgICAgICAgICAg IGlmICggYXV0aF90eXBlX3VzZXJbal0gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjUgKQorICAgICAg ICAgICAgICAgIGkgPSBja190bl9hdXRoX3JlcXVlc3Rfa3JiNShpKTsKKyNlbmRpZiAvKiBLUkI1 ICovCisjaWZkZWYgS1JCNAorICAgICAgICAgICAgaWYgKCBhdXRoX3R5cGVfdXNlcltqXSA9PSBB VVRIVFlQRV9LRVJCRVJPU19WNCApCisgICAgICAgICAgICAgICAgaSA9IGNrX3RuX2F1dGhfcmVx dWVzdF9rcmI0KGkpOworI2VuZGlmIC8qIEtSQjQgKi8KKyAgICAgICAgfQorICAgIH0KKworICAg IHN0cl9yZXF1ZXN0W2krK10gPSBJQUM7CisgICAgc3RyX3JlcXVlc3RbaSsrXSA9IFNFOworICAg IGlmICggZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMgKSB7CisgICAgICAgIGNrc3RybmNhdCh0 bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7CisgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIi LDApOworICAgICAgICBpZiAodG5fZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAg ICB9CisKKyAgICAvKiBTZW5kIGRhdGEgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0 TXV0ZXgoIFNFTV9JTkRFRklOSVRFX1dBSVQgKTsKKyNlbmRpZgorICAgIHJjID0gdHRvbCgoQ0hB UiAqKXN0cl9yZXF1ZXN0LCBpKTsKKyNpZmRlZiBPUzIKKyAgICBSZWxlYXNlVGVsbmV0TXV0ZXgo KTsKKyNlbmRpZgorICAgIGlmICggcmMgPT0gaSApCisgICAgICAgIHJldHVybigwKTsKKyAgICBl bHNlCisgICAgICAgIHJldHVybigtMSk7Cit9CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCitWT0lE Citja190bl9lbmNfc3RhcnQoKQoreworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBU SU9OKSAmJiAhVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKQorICAgICAgICByZXR1cm47Cisg ICAgaWYgKCFURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQuc3RvcCAmJgorICAg ICAgICAgKCFlbmNyeXB0X2lzX2RlY3J5cHRpbmcoKSB8fCAhZW5jcnlwdF9pc19lbmNyeXB0aW5n KCkpKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImNrX3RuX2VuY19zdGFydCIsIm5vdGhpbmcgdG8g ZG8iLDApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFRFTE9QVF9TQihURUxPUFRfRU5D UllQVElPTikuZW5jcnlwdC5zdG9wID0gMDsKKyAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNS WVBUSU9OKSAmJiAhZW5jcnlwdF9pc19lbmNyeXB0aW5nKCkpIHsKKyAgICAgICAgZGVidWcoRjEx MCwiY2tfdG5fZW5jX3N0YXJ0IiwiZW5jcnlwdF9yZXF1ZXN0X3N0YXJ0IiwwKTsKKyAgICAgICAg ZW5jcnlwdF9yZXF1ZXN0X3N0YXJ0KCk7CisgICAgfQorICAgIGlmIChURUxPUFRfVShURUxPUFRf RU5DUllQVElPTikgJiYgIWVuY3J5cHRfaXNfZGVjcnlwdGluZygpKSB7CisgICAgICAgIGRlYnVn KEYxMTAsImNrX3RuX2VuY19zdGFydCIsImVuY3J5cHRfc2VuZF9yZXF1ZXN0X3N0YXJ0IiwwKTsK KyAgICAgICAgZW5jcnlwdF9zZW5kX3JlcXVlc3Rfc3RhcnQoKTsKKyAgICB9CisgICAgdG5fd2Fp dCgiZW5jcnlwdCBzdGFydCIpOworICAgIHRuX3B1c2goKTsKK30KKworVk9JRAorY2tfdG5fZW5j X3N0b3AoKQoreworICAgIGlmICghVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiAhVEVM T1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFRFTE9Q VF9TQihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5zdG9wIHx8CisgICAgICAgICAhKGVuY3J5 cHRfaXNfZGVjcnlwdGluZygpIHx8IGVuY3J5cHRfaXNfZW5jcnlwdGluZygpKSkgeworICAgICAg ICBkZWJ1ZyhGMTEwLCJja190bl9lbmNfc3RvcCIsIm5vdGhpbmcgdG8gZG8iLDApOworICAgICAg cmV0dXJuOworICAgIH0KKyAgICBURUxPUFRfU0IoVEVMT1BUX0VOQ1JZUFRJT04pLmVuY3J5cHQu c3RvcCA9IDE7CisgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiBlbmNyeXB0 X2lzX2RlY3J5cHRpbmcoKSkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl9lbmNfc3RvcCIs ImVuY3J5cHRfc2VuZF9yZXF1ZXN0X2VuZCIsMCk7CisgICAgICAgIGVuY3J5cHRfc2VuZF9yZXF1 ZXN0X2VuZCgpOworICAgIH0KKyAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSAm JiBlbmNyeXB0X2lzX2VuY3J5cHRpbmcoKSkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJja190bl9l bmNfc3RvcCIsImVuY3J5cHRfc2VuZF9lbmQiLDApOworICAgICAgICBlbmNyeXB0X3NlbmRfZW5k KCk7CisgICAgfQorICAgIHRuX3dhaXQoImVuY3J5cHQgc3RvcCIpOworICAgIHRuX3B1c2goKTsK K30KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisKKy8qICBDIEsgXyBLIFIgQiBfIFQgTiBf IFMgQiBfIEEgVSBUIEgKKyAqICBBbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgQy1LZXJtaXQgVGVs bmV0IENvbW1hbmQgUGFyc2VyIGFuZCB0aGUgQXV0aGVudC0KKyAqICBpY2F0aW9uIG9wdGlvbiBw YXJzZXIgaW1wbGVtZW50ZWQgaW4gdGhlIEtlcmJlcm9zIFRlbG5ldCBjbGllbnQuCisgKgorICog IHNiICAgLSB0aGUgc3VibmVnb3RpYXRpb24gYXMgY2FsY3VsYXRlZCBpbiBja2NuZXQuYworICog IGxlbiAgLSB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqCisgKiAgUmV0dXJuczogMCBvbiBz dWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlCisgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Nr X3RuX3NiX2F1dGgoY2hhciAqIHNiLCBpbnQgbGVuKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2Nr X3RuX3NiX2F1dGgoc2IsbGVuKSBjaGFyICogc2I7IGludCBsZW47CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sKKyAgICAvKiBhdXRoX3BhcnNlKCkgYXNzdW1lcyB0aGF0IHNiIHN0YXJ0cyBhdCBw b3MgMSBub3QgMCBhcyBpbiBja2NuZXQuYyAqLworICAgIC8qIGFuZCBpdCB3YW50cyB0aGUgbGVu Z3RoIHRvIGV4Y2x1ZGUgdGhlIElBQyBTRSBieXRlcyAgICAgICAgICAgICAgICovCisgICAgQ0hB UiAqIGJ1ZjsKKyAgICBpbnQgcmMgPSAtMTsKKworICAgIGJ1ZiA9IG1hbGxvYyhsZW4tMSk7Cisg ICAgaWYgKCAhYnVmICkgcmV0dXJuKC0xKTsKKworICAgIGJ1ZlswXSA9IFNCOworICAgIG1lbWNw eSggJmJ1ZlsxXSwgc2IsIGxlbi0yICk7CisgICAgcmMgPSBhdXRoX3BhcnNlKGJ1ZixsZW4tMSk7 CisgICAgZnJlZShidWYpOworICAgIGRlYnVnKEYxMTEsImNrX3RuX3NiX2F1dGgiLCJyYyIscmMp OworICAgIGlmIChyYyA9PSBBVVRIX0ZBSUxVUkUpIHsKKyAgICAgICAgYXV0aGVudGljYXRpb25f dmVyc2lvbiA9IEFVVEhUWVBFX05VTEw7CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAg ICAgICAgaXBhZGwyNSgpOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8K KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIK KyAgICBpcGFkbDI1KCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLwor ICAgIHJldHVybigwKTsKK30KKworLyogIEMgSyBfIEsgUiBCIF8gVCBOIF8gUyBCIF8gRSBOIEMg UiBZIFAgVAorICogIEFuIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBDLUtlcm1pdCBUZWxuZXQgQ29t bWFuZCBQYXJzZXIgYW5kIHRoZSBFbmNyeXB0aW9uCisgKiAgb3B0aW9uIHBhcnNlciBpbXBsZW1l bnRlZCBpbiB0aGUgS2VyYmVyb3MgVGVsbmV0IGNsaWVudC4KKyAqCisgKiAgc2IgICAtIHRoZSBz dWJuZWdvdGlhdGlvbiBhcyBjYWxjdWxhdGVkIGluIGNrY25ldC5jCisgKiAgbGVuICAtIHRoZSBs ZW5ndGggb2YgdGhlIGJ1ZmZlcgorICoKKyAqICBSZXR1cm5zOiBBbHdheXMgcmV0dXJucyAwIGZv ciBzdWNjZXNzIHNpbmNlIGVuY3J5cHRfcGFyc2UgaXMgdm9pZAorICovCisKKworaW50CisjaWZk ZWYgQ0tfQU5TSUMKK2NrX3RuX3NiX2VuY3J5cHQoY2hhciAqIHNiLCBpbnQgbGVuKQorI2Vsc2UK K2NrX3RuX3NiX2VuY3J5cHQoc2IsbGVuKSBjaGFyICogc2I7IGludCBsZW47CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sKKyAgICAvKiBlbmNyeXB0X3BhcnNlKCkgYXNzdW1lcyB0aGF0IHNiIHN0 YXJ0cyBhdCBwb3MgMSBub3QgMCBhcyBpbiBja2NuZXQuYyAqLworICAgIC8qIGFuZCBpdCB3YW50 cyB0aGUgbGVuZ3RoIHRvIGV4Y2x1ZGUgdGhlIElBQyBTRSBieXRlcyAgICAgICAgICAgICAgICAg ICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGNoYXIgKiBidWY7CisgICAgaW50IHJjID0g LTE7CisKKyAgICBidWYgPSBtYWxsb2MobGVuLTEpOworICAgIGlmICggIWJ1ZiApIHJldHVybigt MSk7CisKKyAgICBidWZbMF0gPSBTQjsKKyAgICBtZW1jcHkoICZidWZbMV0sIHNiLCBsZW4tMiAp OworICAgIHJjID0gZW5jcnlwdF9wYXJzZSgoQ0hBUiAqKWJ1ZixsZW4tMSk7CisKKyAgICBpZiAo cmMgPCAwKSB7CisgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9 CisKKyAgICAvKiBUaGlzIGlzIGEgaGFjay4gIEl0IGRvZXMgbm90IGJlbG9uZyBoZXJlIGJ1dCBz aG91bGQgcmVhbGx5IGJlIGluICovCisgICAgLyogZW5jcnlwdF9wYXJzZSgpIGJ1dCBpbiBLOTUg dGhlIGVuY3J5cHRfcGFyc2UoKSByb3V0aW5lIGRvZXMgbm90ICAqLworICAgIC8qIGhhdmUgYWNj ZXNzIHRvIHRoZSB0ZWxvcHRfc3RhdGVzIGFycmF5LiAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKyAgICBpZiAoIGJ1ZlsxXSA9PSBFTkNSWVBUX1JFUUVORCApCisgICAgICAgIFRFTE9QVF9T QihURUxPUFRfRU5DUllQVElPTikuZW5jcnlwdC5zdG9wID0gMTsKKyAgICBlbHNlIGlmICggYnVm WzFdID09IEVOQ1JZUFRfUkVRU1RBUlQgKQorICAgICAgICBURUxPUFRfU0IoVEVMT1BUX0VOQ1JZ UFRJT04pLmVuY3J5cHQuc3RvcCA9IDA7CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAg ICBpcGFkbDI1KCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAg IGZyZWUoYnVmKTsKKyNlbmRpZiAvKiBFTkNSWVBUSU9OICovCisgICAgcmV0dXJuKDApOworfQor CisKKy8qICBDIEsgXyBLIFIgQiBfIEUgTiBDIFIgWSBQIFQgSSBOIEcKKyAqICBSZXR1cm5zIDEg aWYgd2UgYXJlIGVuY3J5cHRpbmcgYW5kIDAgaWYgd2UgYXJlIG5vdAorICovCisKK2ludAorI2lm ZGVmIENLX0FOU0lDCitja190bl9lbmNyeXB0aW5nKFZPSUQpCisjZWxzZSAvKiBDS19BTlNJQyAq LworY2tfdG5fZW5jcnlwdGluZygpCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyNpZmRlZiBD S19FTkNSWVBUSU9OCisgICAgaWYgKCBnX2tzdHJlYW0gPT0gTlVMTCApCisgICAgICAgIHJldHVy bigwKTsKKyAgICBpZiAoIGdfa3N0cmVhbS0+ZW5jcnlwdCAmJiBlbmNyeXB0X2lzX2VuY3J5cHRp bmcoKSkgeworICAgICAgICBkZWJ1ZyhGMTExLCJja190bl9lbmNyeXB0aW5nIiwiZW5jcnlwdGlu ZyIsCisgICAgICAgICAgICAgICBnX2tzdHJlYW0tPmVuY3J5cHRfdHlwZSk7CisgICAgICAgIHJl dHVybihnX2tzdHJlYW0tPmVuY3J5cHRfdHlwZSk7CisgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KKyAgICBkZWJ1ZyhGMTEwLCJja190bl9lbmNyeXB0aW5nIiwibm90IGVuY3J5cHRp bmciLDApOworICAgIHJldHVybigwKTsKK30KKworLyogIEMgSyBfIEsgUiBCIF8gRCBFIEMgUiBZ IFAgVCBJIE4gRworICogIFJldHVybnMgMSBpZiB3ZSBhcmUgZGVjcnlwdGluZyBhbmQgMCBpZiB3 ZSBhcmUgbm90CisgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX3RuX2RlY3J5cHRpbmco Vk9JRCkKKyNlbHNlCitja190bl9kZWNyeXB0aW5nKCkKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoIGdfa3N0cmVhbSA9PSBOVUxMICkKKyAg ICAgICAgcmV0dXJuKDApOworICAgIGlmICggZ19rc3RyZWFtLT5kZWNyeXB0ICYmIGVuY3J5cHRf aXNfZGVjcnlwdGluZygpKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImNrX3RuX2RlY3J5cHRpbmci LCJkZWNyeXB0aW5nIiwKKyAgICAgICAgICAgICAgIGdfa3N0cmVhbS0+ZGVjcnlwdF90eXBlKTsK KyAgICAgICAgcmV0dXJuKGdfa3N0cmVhbS0+ZGVjcnlwdF90eXBlKTsKKyAgICB9CisjZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLworICAgIGRlYnVnKEYxMTAsImNrX3RuX2RlY3J5cHRpbmciLCJu b3QgZGVjcnlwdGluZyIsMCk7CisgICAgcmV0dXJuKDApOworfQorCisvKiAgQyBLIF8gSyBSIEIg XyBBIFUgVCBIIEUgTiBUIEkgQyBBIFQgRSBECisgKiAgUmV0dXJucyB0aGUgYXV0aGVudGljYXRp b24gdHlwZTogQVVUSFRZUEVfTlVMTCwgQVVUSFRZUEVfS0VSQkVST1M0LAorICogIG9yIEFVVEhU WVBFX0tFUkJFUk9TNSwgQVVUSFRZUEVfU1JQLCAuLi4gKHNlZSBja2N0ZWwuaCkKKyAqLworCitp bnQKKyNpZmRlZiBDS19BTlNJQworY2tfdG5fYXV0aGVudGljYXRlZChWT0lEKQorI2Vsc2UKK2Nr X3RuX2F1dGhlbnRpY2F0ZWQoKQorI2VuZGlmCit7CisgICAgcmV0dXJuKGF1dGhlbnRpY2F0aW9u X3ZlcnNpb24pOworfQorCisvKiAgQyBLIF8gSyBSIEIgXyBFIE4gQyBSIFkgUCBUCisgKiAgZW5j cnlwdHMgbiBjaGFyYWN0ZXJzIGluIHMgaWYgd2UgYXJlIGVuY3J5cHRpbmcKKyAqLworCitWT0lE CisjaWZkZWYgQ0tfQU5TSUMKK2NrX3RuX2VuY3J5cHQoIGNoYXIgKiBzLCBpbnQgbiApCisjZWxz ZQorY2tfdG5fZW5jcnlwdCggcyxuICkgY2hhciAqIHM7IGludCBuOworI2VuZGlmCit7CisjaWZk ZWYgQ0tfRU5DUllQVElPTgorICAgIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgaTsKKworICAg IGlmIChnX2tzdHJlYW0tPmVuY3J5cHQgJiYgZW5jcnlwdF9pc19lbmNyeXB0aW5nKCkpIHsKKyNp ZmRlZiBERUJVRworICAgICAgY2toZXhkdW1wKCJmcm9tIHBsYWludGV4dCIsIHMsIG4pOworI2Vu ZGlmCisgICAgICAgIGkucHRyID0gczsKKyAgICAgICAgaS5sZW5ndGggPSBuOworICAgICAgICBn X2tzdHJlYW0tPmVuY3J5cHQoJmksIE5VTEwpOworI2lmZGVmIERFQlVHCisgICAgICAgIGNraGV4 ZHVtcCgidG8gY3lwaGVydGV4dCIsIHMsIG4pOworI2VuZGlmCisgICAgfQorICAgIGVsc2UgZGVi dWcoRjEwMSwiY2tfdG5fZW5jcnlwdCBub3QgZW5jcnlwdGluZyIsIiIsbik7CisjZW5kaWYgLyog RU5DUllQVElPTiAqLworfQorCisvKiAgQyBLIF8gSyBSIEIgXyBEIEUgQyBSIFkgUCBUCisgKiAg ZGVjcnlwdHMgbiBjaGFyYWN0ZXJzIGluIHMgaWYgd2UgYXJlIGRlY3J5cHRpbmcKKyAqLworCitW T0lECisjaWZkZWYgQ0tfQU5TSUMKK2NrX3RuX2RlY3J5cHQoIGNoYXIgKiBzLCBpbnQgbiApCisj ZWxzZQorY2tfdG5fZGVjcnlwdCggcyxuICkgY2hhciAqIHM7IGludCBuOworI2VuZGlmCit7Cisj aWZkZWYgQ0tfRU5DUllQVElPTgorICAgIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgaTsKKwor ICAgIGlmIChnX2tzdHJlYW0tPmRlY3J5cHQgJiYgZW5jcnlwdF9pc19kZWNyeXB0aW5nKCkpIHsK KworI2lmZGVmIERFQlVHCisgICAgICAgIGNraGV4ZHVtcCgiZnJvbSBjeXBoZXJ0ZXh0Iiwgcywg bik7CisjZW5kaWYKKworICAgICAgICBpLnB0ciA9IHM7CisgICAgICAgIGkubGVuZ3RoID0gbjsK KyAgICAgICAgZ19rc3RyZWFtLT5kZWNyeXB0KCZpLCBOVUxMKTsKKyNpZmRlZiBERUJVRworICAg ICAgICBja2hleGR1bXAoInRvIHBsYWludGV4dCIsIHMsIG4pOworI2VuZGlmCisgICAgfQorICAg IGVsc2UgZGVidWcoRjEwMSwiY2tfdG5fZGVjcnlwdCBub3QgZGVjcnlwdGluZyIsIiIsbik7Cisj ZW5kaWYgLyogRU5DUllQVElPTiAqLworfQorCisvKiAgUyBFIE4gRCBLIDUgQSBVIFQgSCBTIEIK KyAqICBTZW5kIGEgS2VyYmVyb3MgNSBBdXRoZW50aWNhdGlvbiBTdWJuZWdvdGlhdGlvbiB0byBo b3N0IGFuZAorICogIG91dHB1dCBhcHByb3ByaWF0ZSBUZWxuZXQgRGVidWcgbWVzc2FnZXMKKyAq CisgKiAgdHlwZSAtIFN1YiBOZWdvdGlhdGlvbiB0eXBlCisgKiAgZGF0YSAtIHB0ciB0byBidWZm ZXIgY29udGFpbmluZyBkYXRhCisgKiAgbGVuICAtIGxlbiBvZiBidWZmZXIgaWYgbm90IE5VTCB0 ZXJtaW5hdGVkCisgKgorICogIHJldHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc2VudCBvciBl cnJvciB2YWx1ZQorICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworU2VuZEs1QXV0 aFNCKGludCB0eXBlLCB2b2lkICpkYXRhLCBpbnQgbGVuKQorI2Vsc2UKK1NlbmRLNUF1dGhTQih0 eXBlLGRhdGEsbGVuKSBpbnQgdHlwZTsgdm9pZCAqZGF0YTsgaW50IGxlbjsKKyNlbmRpZgorewor ICAgIGludCByYzsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc3RyX2RhdGEgKyAzOworICAgIHVu c2lnbmVkIGNoYXIgKmNkID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOworICAgIGV4dGVybiBpbnQg c3N0ZWxuZXQ7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoVEVMT1BUX1NCKFRFTE9QVF9TVEFS VF9UTFMpLnN0YXJ0X3Rscy5tZV9mb2xsb3dzKSB7CisgICAgICAgIGlmICh0dGNoaygpIDwgMCkK KyAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4oMSk7 CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisgICAgaWYgKCB0eXBlIDwgMCB8fCB0eXBl ID4gNyApICAgICAgICAgLyogQ2hlY2sgZm9yIGludmFsaWQgdmFsdWVzICovCisgICAgICAgIHJl dHVybigwKTsKKworICAgIGlmICghY2QpIHsKKyAgICAgICAgY2QgPSAodW5zaWduZWQgY2hhciAq KSIiOworICAgICAgICBsZW4gPSAwOworICAgIH0KKworICAgIGlmIChsZW4gPT0gLTEpICAgICAg ICAgICAgICAgICAgICAgICAgLyogVXNlIHN0cmxlbigpIGZvciBsZW4gKi8KKyAgICAgICAgbGVu ID0gc3RybGVuKChjaGFyICopY2QpOworCisgICAgLyogQ29uc3RydWN0IE1lc3NhZ2UgKi8KKyAg ICAqcCsrID0gc3N0ZWxuZXQgPyBURUxRVUFMX1JFUExZIDogVEVMUVVBTF9JUzsKKyAgICAqcCsr ID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7CisgICAgKnAgPSBBVVRIX0NMSUVOVF9UT19TRVJWRVI7 CisgICAgKnAgfD0gYXV0aF9ob3c7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICpwIHw9IGF1 dGhfY3J5cHQ7CisjZW5kaWYKKyNpZmRlZiBVU0VfSU5JX0NSRURfRldECisgICAgaWYgKGF1dGhf ZndkKQorICAgICAgICAqcCB8PSBJTklfQ1JFRF9GV0RfT047CisjZW5kaWYgLyogVVNFX0lOSV9D UkVEX0ZXRCAqLworICAgIHArKzsKKyAgICAqcCsrID0gdHlwZTsKKyAgICB3aGlsZSAobGVuLS0g PiAwKSB7CisgICAgICAgIGlmICgoKnArKyA9ICpjZCsrKSA9PSBJQUMpCisgICAgICAgICAgICAq cCsrID0gSUFDOworICAgIH0KKyAgICAqcCsrID0gSUFDOworICAgICpwKysgPSBTRTsKKworICAg IC8qIEhhbmRsZSBUZWxuZXQgRGVidWdnaW5nIE1lc3NhZ2VzICovCisgICAgaWYgKGRlYmxvZyB8 fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGludCBpOworICAgICAgICBpbnQgZGVibGVu PXAtc3RyX2RhdGEtMjsKKyAgICAgICAgY2hhciAqcz1OVUxMOworICAgICAgICBpbnQgbW9kZSA9 IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IChhdXRoX2hvdyAmIEFVVEhfSE9XX01BU0spIHwKKyAg ICAgICAgICAgIGF1dGhfY3J5cHQKKyNpZmRlZiBVU0VfSU5JX0NSRURfRldECisgICAgICAgICAg ICAgIHwgKGF1dGhfZndkP0lOSV9DUkVEX0ZXRF9PTjpJTklfQ1JFRF9GV0RfT0ZGKQorI2VuZGlm IC8qIFVTRV9JTklfQ1JFRF9GV0QgKi8KKyAgICAgICAgICAgICAgICAgICAgOworCisgICAgICAg IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBzID0gIkFVVEgi OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHMgPSAi UkVKRUNUIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAg ICBzID0gIkFDQ0VQVCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAg ICAgICAgICAgcyA9ICJSRVNQT05TRSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSA0OgorICAgICAgICAgICAgcyA9ICJGT1JXQVJEIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIDU6CisgICAgICAgICAgICBzID0gIkZPUldBUkRfQUNDRVBUIjsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICBzID0gIkZPUldBUkRfUkVK RUNUIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICBz ID0gIlRMU19WRVJJRlkiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg ICAgICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgIlRF TE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRfQVVUSEVOVElD QVRJT04pLCIgIiwKKyAgICAgICAgICAgICAgICAgc3RyX2RhdGFbM10gPT0gVEVMUVVBTF9JUyA/ ICJJUyIgOgorICAgICAgICAgICAgICAgICBzdHJfZGF0YVszXSA9PSBURUxRVUFMX1JFUExZID8g IlJFUExZIiA6ICI/Pz8iLCIgIiwKKyAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShhdXRo ZW50aWNhdGlvbl92ZXJzaW9uKSwiICIsCisgICAgICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUo bW9kZSksIiAiLAorICAgICAgICAgICAgICAgICBzLCIgIixOVUxMKTsKKyAgICAgICAgdG5faGV4 KChDSEFSICopdG5fbXNnLFROX01TR19MRU4sJnN0cl9kYXRhWzddLGRlYmxlbi03KTsKKyAgICAg ICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAgICAgZGVidWco RjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 Zyh0bl9tc2cpOworICAgIH0KKworICAgIC8qIFNlbmQgZGF0YSAqLworI2lmZGVmIE9TMgorICAg IFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisgICAg cmMgPSB0dG9sKChDSEFSICopc3RyX2RhdGEsIHAgLSBzdHJfZGF0YSk7CisjaWZkZWYgT1MyCisg ICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICBkZWJ1ZyhGMTExLCJTZW5kSzVB dXRoU0IiLCJ0dG9sKCkiLHJjKTsKKyAgICByZXR1cm4ocmMpOworfQorCisvKiAgUyBFIE4gRCBL IDQgQSBVIFQgSCBTIEIKKyAqICBTZW5kIGEgS2VyYmVyb3MgNCBBdXRoZW50aWNhdGlvbiBTdWJu ZWdvdGlhdGlvbiB0byBob3N0IGFuZAorICogIG91dHB1dCBhcHByb3ByaWF0ZSBUZWxuZXQgRGVi dWcgbWVzc2FnZXMKKyAqCisgKiAgdHlwZSAtIFN1YiBOZWdvdGlhdGlvbiB0eXBlCisgKiAgZGF0 YSAtIHB0ciB0byBidWZmZXIgY29udGFpbmluZyBkYXRhCisgKiAgbGVuICAtIGxlbiBvZiBidWZm ZXIgaWYgbm90IE5VTCB0ZXJtaW5hdGVkCisgKgorICogIHJldHVybnMgbnVtYmVyIG9mIGNoYXJh Y3RlcnMgc2VudCBvciBlcnJvciB2YWx1ZQorICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19B TlNJQworU2VuZEs0QXV0aFNCKGludCB0eXBlLCB2b2lkICpkYXRhLCBpbnQgbGVuKQorI2Vsc2UK K1NlbmRLNEF1dGhTQih0eXBlLGRhdGEsbGVuKSBpbnQgdHlwZTsgdm9pZCAqZGF0YTsgaW50IGxl bjsKKyNlbmRpZgoreworICAgIGludCByYzsKKyAgICB1bnNpZ25lZCBjaGFyICpwID0gc3RyX2Rh dGEgKyAzOworICAgIHVuc2lnbmVkIGNoYXIgKmNkID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOwor ICAgIGV4dGVybiBpbnQgc3N0ZWxuZXQ7CisgICAgaW50IG1vZGUgPSAoYXV0aF9ob3cgJiBBVVRI X0hPV19NQVNLKSB8CisgICAgICAgIGF1dGhfY3J5cHQ7CisKKyAgICBpZiAoIHR5cGUgPCAwIHx8 IHR5cGUgPiA0ICkgICAgICAgICAvKiBDaGVjayBmb3IgaW52YWxpZCB2YWx1ZXMgKi8KKyAgICAg ICAgcmV0dXJuKDApOworCisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRf U1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93cykgeworICAgICAgICBpZiAodHRjaGsoKSA8 IDApCisgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJu KDEpOworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgIGlmICghY2QpIHsKKyAgICAg ICAgY2QgPSAodW5zaWduZWQgY2hhciAqKSIiOworICAgICAgICBsZW4gPSAwOworICAgIH0KKwor ICAgIGlmIChsZW4gPT0gLTEpICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHN0cmxlbigp IGZvciBsZW4gKi8KKyAgICAgICAgbGVuID0gc3RybGVuKChjaGFyICopY2QpOworCisKKyAgICAv KiBDb25zdHJ1Y3QgTWVzc2FnZSAqLworICAgICpwKysgPSBzc3RlbG5ldCA/IFRFTFFVQUxfUkVQ TFkgOiBURUxRVUFMX0lTOworICAgICpwKysgPSBBVVRIVFlQRV9LRVJCRVJPU19WNDsKKyAgICAq cCA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUjsKKyAgICAqcCB8PSBtb2RlOworICAgIHArKzsKKyAg ICAqcCsrID0gdHlwZTsKKyAgICB3aGlsZSAobGVuLS0gPiAwKSB7CisgICAgICAgIGlmICgoKnAr KyA9ICpjZCsrKSA9PSBJQUMpCisgICAgICAgICAgICAqcCsrID0gSUFDOworICAgICAgICB9Cisg ICAgKnArKyA9IElBQzsKKyAgICAqcCsrID0gU0U7CisKKyAgICAvKiBIYW5kbGUgVGVsbmV0IERl YnVnZ2luZyBNZXNzYWdlcyAqLworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykg eworICAgICAgICBpbnQgaTsKKyAgICAgICAgaW50IGRlYmxlbj1wLXN0cl9kYXRhLTI7CisgICAg ICAgIGNoYXIgKnM9TlVMTDsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz ZSAwOgorICAgICAgICAgICAgcyA9ICJBVVRIIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIDE6CisgICAgICAgICAgICBzID0gIlJFSkVDVCI7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcyA9ICJBQ0NFUFQiOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHMgPSAiQ0hBTExFTkdFIjsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBzID0gIlJFU1BP TlNFIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2ttYWt4bXNn KHRuX21zZyxUTl9NU0dfTEVOLCJURUxORVQgU0VOVCBTQiAiLAorICAgICAgICAgICAgICAgICBU RUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwiICIsCisgICAgICAgICAgICAgICAgIHN0cl9k YXRhWzNdID09IFRFTFFVQUxfSVMgPyAiSVMiIDoKKyAgICAgICAgICAgICAgICAgKHN0cl9kYXRh WzNdID09IFRFTFFVQUxfUkVQTFkgPyAiUkVQTFkiIDogIj8/PyIpLCIgIiwKKyAgICAgICAgICAg ICAgICAgQVVUSFRZUEVfTkFNRShhdXRoZW50aWNhdGlvbl92ZXJzaW9uKSwiICIsCisgICAgICAg ICAgICAgICAgIEFVVEhNT0RFX05BTUUobW9kZSksIiAiLAorICAgICAgICAgICAgICAgICBzLCIg IixOVUxMKTsKKyAgICAgICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01TR19MRU4sJnN0cl9k YXRhWzddLGRlYmxlbi03KTsKKyAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9N U0dfTEVOKTsKKyAgICAgICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgIGlmICh0 bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgIH0KKworICAgIC8qIFNlbmQg ZGF0YSAqLworI2lmZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5J VEVfV0FJVCApOworI2VuZGlmCisgICAgcmMgPSB0dG9sKChDSEFSICopc3RyX2RhdGEsIHAgLSBz dHJfZGF0YSk7CisjaWZkZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYK KyAgICBkZWJ1ZyhGMTExLCJTZW5kSzRBdXRoU0IiLCJ0dG9sKCkiLHJjKTsKKyAgICByZXR1cm4o cmMpOworfQorCisvKiAgUyBFIE4gRCBTIFIgUCBBIFUgVCBIIFMgQgorICogIFNlbmQgYSBTUlAg QXV0aGVudGljYXRpb24gU3VibmVnb3RpYXRpb24gdG8gaG9zdCBhbmQKKyAqICBvdXRwdXQgYXBw cm9wcmlhdGUgVGVsbmV0IERlYnVnIG1lc3NhZ2VzCisgKgorICogIHR5cGUgLSBTdWIgTmVnb3Rp YXRpb24gdHlwZQorICogIGRhdGEgLSBwdHIgdG8gYnVmZmVyIGNvbnRhaW5pbmcgZGF0YQorICog IGxlbiAgLSBsZW4gb2YgYnVmZmVyIGlmIG5vdCBOVUwgdGVybWluYXRlZAorICoKKyAqICByZXR1 cm5zIG51bWJlciBvZiBjaGFyYWN0ZXJzIHNlbnQgb3IgZXJyb3IgdmFsdWUKKyAqLworCitzdGF0 aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK1NlbmRTUlBBdXRoU0IoaW50IHR5cGUsIHZvaWQgKmRh dGEsIGludCBsZW4pCisjZWxzZQorU2VuZFNSUEF1dGhTQih0eXBlLGRhdGEsbGVuKSBpbnQgdHlw ZTsgdm9pZCAqZGF0YTsgaW50IGxlbjsKKyNlbmRpZgoreworICAgIGludCByYzsKKyAgICB1bnNp Z25lZCBjaGFyICpwID0gc3RyX2RhdGEgKyAzOworICAgIHVuc2lnbmVkIGNoYXIgKmNkID0gKHVu c2lnbmVkIGNoYXIgKilkYXRhOworICAgIGV4dGVybiBpbnQgc3N0ZWxuZXQ7CisKKyAgICAvKiBD aGVjayBmb3IgaW52YWxpZCB2YWx1ZXMgKi8KKyAgICBpZiAoIHR5cGUgIT0gU1JQX0VYUCAmJiB0 eXBlICE9IFNSUF9SRVNQT05TRSAmJgorICAgICAgICAgdHlwZSAhPSBTUlBfUkVKRUNUICYmIHR5 cGUgIT0gU1JQX0FDQ0VQVCAmJgorICAgICAgICAgdHlwZSAhPSBTUlBfQ0hBTExFTkdFICYmIHR5 cGUgIT0gU1JQX1BBUkFNUyAmJgorICAgICAgICAgdHlwZSAhPSBTUlBfQVVUSCkKKyAgICAgICAg cmV0dXJuKDApOworCisgICAgaWYgKGxlbiA9PSAtMSkgICAgICAgICAgICAgICAgICAgICAgICAv KiBVc2Ugc3RybGVuKCkgZm9yIGxlbiAqLworICAgICAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKilj ZCk7CisKKyAgICAvKiBDb25zdHJ1Y3QgTWVzc2FnZSAqLworICAgICpwKysgPSBzc3RlbG5ldCA/ IFRFTFFVQUxfUkVQTFkgOiBURUxRVUFMX0lTOworICAgICpwKysgPSBBVVRIVFlQRV9TUlA7Cisg ICAgKnAgPSBBVVRIX0NMSUVOVF9UT19TRVJWRVI7CisgICAgKnAgfD0gYXV0aF9ob3c7CisjaWZk ZWYgQ0tfRU5DUllQVElPTgorICAgICpwIHw9IGF1dGhfY3J5cHQ7CisjZW5kaWYKKyAgICBwKys7 CisgICAgKnArKyA9IHR5cGU7CisgICAgd2hpbGUgKGxlbi0tID4gMCkgeworICAgICAgICBpZiAo KCpwKysgPSAqY2QrKykgPT0gSUFDKQorICAgICAgICAgICAgKnArKyA9IElBQzsKKyAgICAgICAg fQorICAgICpwKysgPSBJQUM7CisgICAgKnArKyA9IFNFOworCisgICAgLyogSGFuZGxlIFRlbG5l dCBEZWJ1Z2dpbmcgTWVzc2FnZXMgKi8KKyAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJz ZXMpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGludCBkZWJsZW49cC1zdHJfZGF0YS0yOwor ICAgICAgICBjaGFyICpzPU5VTEw7CisgICAgICAgIGludCBtb2RlID0gQVVUSF9DTElFTlRfVE9f U0VSVkVSIHwgKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgfAorICAgICAgICAgICAgYXV0aF9j cnlwdDsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAg ICAgICAgcyA9ICJBVVRIIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6Cisg ICAgICAgICAgICBzID0gIlJFSkVDVCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSAyOgorICAgICAgICAgICAgcyA9ICJBQ0NFUFQiOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHMgPSAiQ0hBTExFTkdFIjsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBzID0gIlJFU1BPTlNFIjsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICBzID0gIkZPUldBUkQi OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIHMgPSAi Rk9SV0FSRF9BQ0NFUFQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzoKKyAg ICAgICAgICAgIHMgPSAiRk9SV0FSRF9SRUpFQ1QiOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgODoKKyAgICAgICAgICAgIHMgPSAiRVhQIjsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICBzID0gIlBBUkFNUyI7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwK KyAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLAorICAgICAgICAgICAgICAgICBU RUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwiICIsCisgICAgICAgICAgICAgICAgIHN0cl9k YXRhWzNdID09IFRFTFFVQUxfUkVQTFkgPyAiUkVQTFkiIDoKKyAgICAgICAgICAgICAgICAgc3Ry X2RhdGFbM10gPT0gVEVMUVVBTF9JUyA/ICJJUyIgOiAiPz8/IiwiICIsCisgICAgICAgICAgICAg ICAgIEFVVEhUWVBFX05BTUUoYXV0aGVudGljYXRpb25fdmVyc2lvbiksIiAiLAorICAgICAgICAg ICAgICAgICBBVVRITU9ERV9OQU1FKG1vZGUpLCIgIiwKKyAgICAgICAgICAgICAgICAgcywiICIs TlVMTCk7CisgICAgICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZzdHJfZGF0 YVs3XSxkZWJsZW4tNyk7CisgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNH X0xFTik7CisgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICBpZiAodG5f ZGViIHx8IGRlYnNlcykgdG5fZGVidWcodG5fbXNnKTsKKyAgICB9CisKKyAgICAvKiBTZW5kIGRh dGEgKi8KKyNpZmRlZiBPUzIKKyAgICBSZXF1ZXN0VGVsbmV0TXV0ZXgoIFNFTV9JTkRFRklOSVRF X1dBSVQgKTsKKyNlbmRpZgorICAgIHJjID0gdHRvbCgoQ0hBUiAqKXN0cl9kYXRhLCBwIC0gc3Ry X2RhdGEpOworI2lmZGVmIE9TMgorICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisg ICAgcmV0dXJuKHJjKTsKK30KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKy8qCisgKiBGdW5jdGlv bjogRW5hYmxlIG9yIGRpc2FibGUgdGhlIGVuY3J5cHRpb24gcHJvY2Vzcy4KKyAqCisgKiBQYXJh bWV0ZXJzOgorICogICAgICBlbmFibGUgLSBUUlVFIHRvIGVuYWJsZSwgRkFMU0UgdG8gZGlzYWJs ZS4KKyAqLworc3RhdGljIFZPSUQKKyNpZmRlZiBDS19BTlNJQworYXV0aF9lbmNyeXB0X2VuYWJs ZShCT09MIGVuYWJsZSkKKyNlbHNlCithdXRoX2VuY3J5cHRfZW5hYmxlKGVuYWJsZSkgQk9PTCBl bmFibGU7CisjZW5kaWYKK3sKKyAgZW5jcnlwdF9mbGFnID0gZW5hYmxlOworfQorI2VuZGlmCisK Ky8qCisgKiBGdW5jdGlvbjogQWJvcnQgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MKKyAqCisg KiBQYXJhbWV0ZXJzOgorICovCitzdGF0aWMgVk9JRAorI2lmZGVmIENLX0FOU0lDCithdXRoX2Fi b3J0KGNoYXIgKmVycm1zZywgbG9uZyByKQorI2Vsc2UKK2F1dGhfYWJvcnQoZXJybXNnLHIpIGNo YXIgKmVycm1zZzsgbG9uZyByOworI2VuZGlmCit7CisgICAgY2hhciBidWZbOV07CisgICAgZXh0 ZXJuIGludCBzc3RlbG5ldDsKKworI2lmZGVmIENLX1NTTAorICAgIGlmIChURUxPUFRfU0IoVEVM T1BUX1NUQVJUX1RMUykuc3RhcnRfdGxzLm1lX2ZvbGxvd3MpIHsKKyAgICAgICAgcmV0dXJuOwor ICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICBkZWJ1ZyhGMTExLCJhdXRoX2Fib3J0Iixl cnJtc2cscik7CisKKyAgICAvKiBDb25zdHJ1Y3QgVGVsbmV0IERlYnVnZ2luZyBtZXNzYWdlcyAq LworICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAgICBja21ha3ht c2codG5fbXNnLFROX01TR19MRU4sCisgICAgICAgICAgICAgICAgICAiVEVMTkVUIFNFTlQgU0Ig IixURUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwKKyAgICAgICAgICAgICAgICAgICIgSVMg IixBVVRIVFlQRV9OQU1FKEFVVEhUWVBFX05VTEwpLCIgIiwKKyAgICAgICAgICAgICAgICAgICBB VVRIVFlQRV9OQU1FKEFVVEhUWVBFX05VTEwpLCIgSUFDIFNFIiwKKyAgICAgICAgICAgICAgICAg ICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0 bl9kZWJ1Zyh0bl9tc2cpOworICAgIH0KKworICAgIC8qIENvbnN0cnVjdCB0aGUgQWJvcnQgbWVz c2FnZSB0byBzZW5kIHRvIHRoZSBob3N0ICAgKi8KKyAgICAvKiBCYXNpY2x5IHdlIGNoYW5nZSB0 aGUgYXV0aGVudGljYXRpb24gdHlwZSB0byBOVUxMICovCisgICAgc3ByaW50ZihidWYsICIlYyVj JWMlYyVjJWMlYyVjIiwgSUFDLCBTQiwgVEVMT1BUX0FVVEhFTlRJQ0FUSU9OLAorICAgICAgICAg ICAgIHNzdGVsbmV0ID8gVEVMUVVBTF9SRVBMWSA6IFRFTFFVQUxfSVMsIEFVVEhUWVBFX05VTEws CisgICAgICAgICAgICAgQVVUSFRZUEVfTlVMTCwgSUFDLCBTRSk7ICAgLyogc2FmZSAqLworI2lm ZGVmIE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOwor I2VuZGlmCisgICAgdHRvbCgoQ0hBUiAqKWJ1ZiwgOCk7CisjaWZkZWYgT1MyCisgICAgUmVsZWFz ZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKworICAgIC8qIElmIHRoZXJlIGlzIGFuIGVycm9yIG1l c3NhZ2UsIGFuZCBlcnJvciBudW1iZXIgY29uc3RydWN0ICovCisgICAgLyogYW4gZXhwbGFuYXRp b24gdG8gZGlzcGxheSB0byB0aGUgdXNlciAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAo ZXJybXNnICE9IE5VTEwpIHsKKyAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwgZXJybXNnLCBBVVRI VE1QQkwpOworICAgIH0gZWxzZQorICAgICAgICBzdHJUbXBbMF0gPSAnXDAnOworCisKKyAgICBp ZiAociAhPSBBVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgIlxyXG4i LEFVVEhUTVBCTCk7CisjaWZkZWYgS1JCNAorICAgICAgICBpZiAoIGF1dGhlbnRpY2F0aW9uX3Zl cnNpb24gPT0gQVVUSFRZUEVfS0VSQkVST1NfVjQgKSB7CisgICAgICAgICAgICBja3N0cm5jYXQo c3RyVG1wLCAoY2hhciAqKWtyYl9nZXRfZXJyX3RleHRfZW50cnkociksCisgICAgICAgICAgICAg ICAgICAgICAgIEFVVEhUTVBCTCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJhdXRoX2Fib3J0 IiwoY2hhciAqKWtyYl9nZXRfZXJyX3RleHRfZW50cnkocikscik7CisgICAgICAgIH0KKyNlbmRp ZgorI2lmZGVmIEtSQjUKKyAgICAgICAgaWYgKCBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID09IEFV VEhUWVBFX0tFUkJFUk9TX1Y1ICkgeworICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgZXJy b3JfbWVzc2FnZShyKSxBVVRIVE1QQkwpOworICAgICAgICAgICAgZGVidWcoRjExMSwiYXV0aF9h Ym9ydCIsZXJyb3JfbWVzc2FnZShyKSxyKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAg IHByaW50ZigiQXV0aGVudGljYXRpb24gZmFpbGVkOiAlc1xyXG4iLHN0clRtcCk7CisjaWZkZWYg Q0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0xJICYmIGNreGxvZ2dpbmcpIHsK KyAgICAgICAgY2tzeXNsb2coU1lTTEdfTEksIDAsICJUZWxuZXQgYXV0aGVudGljYXRpb24gZmFp bHVyZSIsCisgICAgICAgICAgICAgICAgICAoY2hhciAqKSBzelVzZXJOYW1lUmVxdWVzdGVkLAor ICAgICAgICAgICAgICAgICAgc3RyVG1wKTsKKyAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KyAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfTlVMTDsKK30KKworCisvKgor ICogRnVuY3Rpb246IENvcHkgZGF0YSB0byBidWZmZXIsIGRvdWJsaW5nIElBQyBjaGFyYWN0ZXIg aWYgcHJlc2VudC4KKyAqCisgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitjb3B5X2Zvcl9uZXQo dW5zaWduZWQgY2hhciAqdG8sIHVuc2lnbmVkIGNoYXIgKmZyb20sIGludCBjKQorI2Vsc2UKK2Nv cHlfZm9yX25ldCh0byxmcm9tLGMpIHVuc2lnbmVkIGNoYXIgKnRvOyB1bnNpZ25lZCBjaGFyICpm cm9tOyBpbnQgYzsKKyNlbmRpZgoreworICAgIGludCBuOworCisgICAgbiA9IGM7CisgICAgZGVi dWcoRjExMSwiY29weV9mb3JfbmV0IiwiYmVmb3JlIixuKTsKKyAgICB3aGlsZSAoYy0tID4gMCkg eworICAgICAgICBpZiAoKCp0bysrID0gKmZyb20rKykgPT0gSUFDKSB7CisgICAgICAgICAgICBu Kys7CisgICAgICAgICAgICAqdG8rKyA9IElBQzsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1 ZyhGMTExLCJjb3B5X2Zvcl9uZXQiLCJhZnRlciIsbik7CisgICAgcmV0dXJuIG47Cit9CisKKyNp ZmRlZiBDS19TU0wKKy8qICBTIEUgTiBEIFMgUyBMIEEgVSBUIEggUyBCCisgKiAgU2VuZCBhIFNT TCBBdXRoZW50aWNhdGlvbiBTdWJuZWdvdGlhdGlvbiB0byBob3N0IGFuZAorICogIG91dHB1dCBh cHByb3ByaWF0ZSBUZWxuZXQgRGVidWcgbWVzc2FnZXMKKyAqCisgKiAgdHlwZSAtIFN1YiBOZWdv dGlhdGlvbiB0eXBlCisgKiAgZGF0YSAtIHB0ciB0byBidWZmZXIgY29udGFpbmluZyBkYXRhCisg KiAgbGVuICAtIGxlbiBvZiBidWZmZXIgaWYgbm90IE5VTCB0ZXJtaW5hdGVkCisgKgorICogIHJl dHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc2VudCBvciBlcnJvciB2YWx1ZQorICovCisKK2lu dAorI2lmZGVmIENLX0FOU0lDCitTZW5kU1NMQXV0aFNCKGludCB0eXBlLCB2b2lkICpkYXRhLCBp bnQgbGVuKQorI2Vsc2UKK1NlbmRTU0xBdXRoU0IodHlwZSxkYXRhLGxlbikgaW50IHR5cGU7IHZv aWQgKmRhdGE7IGludCBsZW47CisjZW5kaWYKK3sKKyAgICBpbnQgcmM7CisgICAgdW5zaWduZWQg Y2hhciAqcCA9IHN0cl9kYXRhICsgMzsKKyAgICB1bnNpZ25lZCBjaGFyICpjZCA9ICh1bnNpZ25l ZCBjaGFyICopZGF0YTsKKyAgICBleHRlcm4gaW50IHNzdGVsbmV0OworCisgICAgLyogQ2hlY2sg Zm9yIGludmFsaWQgdmFsdWVzICovCisgICAgaWYgKCB0eXBlICE9IFNTTF9TVEFSVCAmJiB0eXBl ICE9IFNTTF9BQ0NFUFQgJiYKKyAgICAgICAgIHR5cGUgIT0gU1NMX1JFSkVDVCkKKyAgICAgICAg cmV0dXJuKDApOworCisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90 bHMubWVfZm9sbG93cykgeworICAgICAgICBpZiAodHRjaGsoKSA8IDApCisgICAgICAgICAgcmV0 dXJuKDApOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKworICAg IGlmIChsZW4gPT0gLTEpICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHN0cmxlbigpIGZv ciBsZW4gKi8KKyAgICAgICAgbGVuID0gc3RybGVuKChjaGFyICopY2QpOworCisgICAgLyogQ29u c3RydWN0IE1lc3NhZ2UgKi8KKyAgICAqcCsrID0gc3N0ZWxuZXQgPyBURUxRVUFMX1JFUExZIDog VEVMUVVBTF9JUzsKKyAgICAqcCsrID0gQVVUSFRZUEVfU1NMOworICAgICpwID0gQVVUSF9DTElF TlRfVE9fU0VSVkVSOworICAgICpwIHw9IGF1dGhfaG93OworI2lmZGVmIENLX0VOQ1JZUFRJT04K KyAgICAqcCB8PSBhdXRoX2NyeXB0OworI2VuZGlmCisgICAgcCsrOworICAgICpwKysgPSB0eXBl OworICAgIHdoaWxlIChsZW4tLSA+IDApIHsKKyAgICAgICAgaWYgKCgqcCsrID0gKmNkKyspID09 IElBQykKKyAgICAgICAgICAgICpwKysgPSBJQUM7CisgICAgICAgIH0KKyAgICAqcCsrID0gSUFD OworICAgICpwKysgPSBTRTsKKworICAgIC8qIEhhbmRsZSBUZWxuZXQgRGVidWdnaW5nIE1lc3Nh Z2VzICovCisgICAgaWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgIGlu dCBpOworICAgICAgICBpbnQgZGVibGVuPXAtc3RyX2RhdGEtMjsKKyAgICAgICAgY2hhciAqcz1O VUxMOworICAgICAgICBpbnQgbW9kZSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8IChhdXRoX2hv dyAmIEFVVEhfSE9XX01BU0spIHwKKyAgICAgICAgICAgIChhdXRoX2NyeXB0P0FVVEhfRU5DUllQ VF9VU0lOR19URUxPUFQ6QVVUSF9FTkNSWVBUX09GRik7CisKKyAgICAgICAgc3dpdGNoICh0eXBl KSB7CisgICAgICAgIGNhc2UgU1NMX1NUQVJUOgorICAgICAgICAgICAgcyA9ICJTVEFSVCI7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0xfQUNDRVBUOgorICAgICAgICAgICAg cyA9ICJBQ0NFUFQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NMX1JFSkVD VDoKKyAgICAgICAgICAgIHMgPSAiUkVKRUNUIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisKKyAgICAgICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAorICAgICAgICAgICAg ICAgICAgIlRFTE5FVCBTRU5UIFNCICIsCisgICAgICAgICAgICAgICAgIFRFTE9QVChURUxPUFRf QVVUSEVOVElDQVRJT04pLCIgIiwKKyAgICAgICAgICAgICAgICAgc3RyX2RhdGFbM10gPT0gVEVM UVVBTF9SRVBMWSA/ICJSRVBMWSIgOgorICAgICAgICAgICAgICAgICBzdHJfZGF0YVszXSA9PSBU RUxRVUFMX0lTID8gIklTIiA6ICI/Pz8iLCIgIiwKKyAgICAgICAgICAgICAgICAgQVVUSFRZUEVf TkFNRShhdXRoZW50aWNhdGlvbl92ZXJzaW9uKSwiICIsCisgICAgICAgICAgICAgICAgIEFVVEhN T0RFX05BTUUobW9kZSksIiAiLAorICAgICAgICAgICAgICAgICBzLCIgIixOVUxMKTsKKyAgICAg ICAgdG5faGV4KChDSEFSICopdG5fbXNnLFROX01TR19MRU4sJnN0cl9kYXRhWzddLGRlYmxlbi03 KTsKKyAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAg ICAgZGVidWcoRjEwMCx0bl9tc2csIiIsMCk7CisgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2Vz KSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgIH0KKworICAgIC8qIFNlbmQgZGF0YSAqLworI2lmZGVm IE9TMgorICAgIFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2Vu ZGlmCisgICAgcmMgPSB0dG9sKChDSEFSICopc3RyX2RhdGEsIHAgLSBzdHJfZGF0YSk7CisjaWZk ZWYgT1MyCisgICAgUmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICByZXR1cm4ocmMp OworfQorI2VuZGlmICAvKiBDS19TU0wgKi8KKworaW50Cit0bl9ob3dfb2soaW50IGhvdykKK3sK KyAgICBzd2l0Y2ggKCB0bl9hdXRoX2hvdyApIHsKKyAgICBjYXNlIFROX0FVVEhfSE9XX0FOWToK KyAgICAgICAgcmV0dXJuKDEpOworICAgIGNhc2UgVE5fQVVUSF9IT1dfT05FX1dBWToKKyAgICAg ICAgcmV0dXJuKChob3cgJiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19PTkVfV0FZKTsKKyAg ICBjYXNlIFROX0FVVEhfSE9XX01VVFVBTDoKKyAgICAgICAgcmV0dXJuKChob3cgJiBBVVRIX0hP V19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy bigwKTsKKyAgICB9Cit9CisKK2ludAordG5fZW5jX29rKGludCBlbmMpCit7CisgICAgc3dpdGNo ICggdG5fYXV0aF9lbmMgKSB7CisgICAgY2FzZSBUTl9BVVRIX0VOQ19BTlk6CisgICAgICAgIGlm ICgoZW5jICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgJiYK KyAgICAgICAgICAgICghY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpCisjaWZkZWYgQ0tfU1NMCisg ICAgICAgICAgICAgfHwgIXNzbF9maW5pc2hlZF9tZXNzYWdlcyB8fAorICAgICAgICAgICAgICEo dGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9hY3RpdmVfZmxhZykKKyNlbmRpZiAvKiBDS19TU0wgKi8K KyAgICAgICAgICAgICApKSB7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICBpZiAoIXNzbF9m aW5pc2hlZF9tZXNzYWdlcykKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0bl9lbmNfb2sg IXNzbF9maW5pc2hlZF9tZXNzYWdlcyIsIiIsMCk7CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAg ICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKDEpOworICAgIGNh c2UgVE5fQVVUSF9FTkNfTk9ORToKKyAgICAgICAgcmV0dXJuKChlbmMgJiBBVVRIX0VOQ1JZUFRf TUFTSykgPT0gQVVUSF9FTkNSWVBUX09GRik7CisgICAgY2FzZSBUTl9BVVRIX0VOQ19URUxPUFQ6 CisgICAgICAgIHJldHVybigoZW5jICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQ VF9VU0lOR19URUxPUFQpOworICAgIGNhc2UgVE5fQVVUSF9FTkNfRVhDSDoKKyAgICAgICAgcmV0 dXJuKChlbmMgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX0FGVEVSX0VYQ0hB TkdFKTsKKyAgICBjYXNlIFROX0FVVEhfRU5DX1RMUzoKKyAgICAgICAgcmV0dXJuKCgoZW5jICYg QVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpICYmCisgICAgICAg ICAgICAgICBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkKKyNpZmRlZiBDS19TU0wKKyAgICAgICAg ICAgICAgICYmIHNzbF9maW5pc2hlZF9tZXNzYWdlcyAmJgorICAgICAgICAgICAgICAgKHRsc19h Y3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAg ICAgICAgICk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KK30KKwor c3RhdGljIGludAorYXRvayhpbnQgYXQpIHsKKyAgICBpbnQgaTsKKyAgICBpZiAoIGF1dGhfdHlw ZV91c2VyWzBdID09IEFVVEhUWVBFX0FVVE8gKQorICAgICAgICByZXR1cm4oMSk7CisgICAgaWYg KCBhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRIVFlQRV9OVUxMICkKKyAgICAgICAgcmV0dXJuKDAp OworCisgICAgZm9yICggaT0wOworICAgICAgICAgIGk8QVVUSFRZUExTVFNaICYmIGF1dGhfdHlw ZV91c2VyW2ldICE9IEFVVEhUWVBFX05VTEw7CisgICAgICAgICAgaSsrICkgeworICAgICAgICBp ZiAoIGF1dGhfdHlwZV91c2VyW2ldID09IGF0ICkKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAg ICB9CisKKyAgICByZXR1cm4oMCk7Cit9CisKKworLyoKKyAqIEZ1bmN0aW9uOiBQYXJzZSBhdXRo ZW50aWNhdGlvbiBzZW5kIGNvbW1hbmQKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIHBhcnNlZGF0 IC0gdGhlIHN1Yi1jb21tYW5kIGRhdGEuCisgKgorICogICAgICBlbmRfc3ViIC0gaW5kZXggb2Yg dGhlIGNoYXJhY3RlciBpbiB0aGUgJ3BhcnNlZGF0JyBhcnJheSB3aGljaAorICogICAgICAgICAg ICAgIGlzIHRoZSBsYXN0IGJ5dGUgaW4gYSBzdWItbmVnb3RpYXRpb24KKyAqCisgKiBSZXR1cm5z OiBLZXJiZXJvcyBlcnJvciBjb2RlLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNlbmRf bGlzdFs1MTJdOworc3RhdGljIGludCAgc2VuZF9sZW4gPSAwOworCitfUFJPVE9UWVAoc3RhdGlj IGludCBhdXRoX3NlbmQsICh1bnNpZ25lZCBjaGFyICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpKTsK Kworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCithdXRoX3Jlc2VuZChpbnQgdHlwZSkKKyNl bHNlCithdXRoX3Jlc2VuZCh0eXBlKSBpbnQgdHlwZTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eworICAgIGludCBpPTI7CisgICAgd2hpbGUgKGkrMSA8PSBzZW5kX2xlbikgeworICAgICAgICBp ZiAoc2VuZF9saXN0W2ldID09IHR5cGUpIHsKKyAgICAgICAgICAgIGludCBqOworICAgICAgICAg ICAgc2VuZF9sZW4gLT0gMjsKKyAgICAgICAgICAgIGZvciAoaiA9IGk7IGogPCBzZW5kX2xlbjsg aisrKQorICAgICAgICAgICAgICAgIHNlbmRfbGlzdFtqXSA9IHNlbmRfbGlzdFtqKzJdOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaSArPSAyOworICAgICAgICB9CisgICAgfQorICAg IHJldHVybihhdXRoX3NlbmQoc2VuZF9saXN0LHNlbmRfbGVuKSk7Cit9CisKK3N0YXRpYyBpbnQK KyNpZmRlZiBDS19BTlNJQworYXV0aF9zZW5kKHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0LCBpbnQg ZW5kX3N1YikKKyNlbHNlCithdXRoX3NlbmQocGFyc2VkYXQsZW5kX3N1YikgdW5zaWduZWQgY2hh ciAqcGFyc2VkYXQ7IGludCBlbmRfc3ViOworI2VuZGlmCit7CisgICAgc3RhdGljIHVuc2lnbmVk IGNoYXIgYnVmWzQwOTZdOworICAgIHVuc2lnbmVkIGNoYXIgKnBuYW1lOworICAgIGludCBwbGVu OworICAgIGludCByOworICAgIGludCBpOworICAgIGludCBtb2RlOworI2lmZGVmIE1JVF9DVVJS RU5UCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGtyYjVfZGF0YSBkYXRhOworICAgIGtyYjVf ZW5jX2RhdGEgZW5jZGF0YTsKKyAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKKyAgICBrcmI1X2tl eWJsb2NrIHJhbmRvbV9rZXk7CisjZW5kaWYgLyogRU5DUllQVElPTiAqLworI2VuZGlmIC8qIE1J VF9DVVJSRU5UICovCisjaWZkZWYgS1JCNQorICAgIGludCBrcmI1X21zZyA9IDA7CisjZW5kaWYg LyogS1JCNSAqLworI2lmZGVmIEtSQjQKKyAgICBpbnQga3JiNF9tc2cgPSAwOworI2VuZGlmIC8q IEtSQjQgKi8KKyNpZmRlZiBHU1NBUElfS1JCNQorICAgIGludCBnc3NrNV9tc2cgPSAwOworI2Vu ZGlmIC8qIEdTU0FQSV9LUkI1ICovCisgICAgaW50IGlhY2NudD0wOworCisjaWZkZWYgQ0tfU1NM CisgICAgaWYgKFRFTE9QVF9TQihURUxPUFRfU1RBUlRfVExTKS5zdGFydF90bHMubWVfZm9sbG93 cykKKyAgICAgICAgcmV0dXJuKEFVVEhfU1VDQ0VTUyk7CisjZW5kaWYgLyogQ0tfU1NMICovCisK KyAgICBhdXRoX2hvdyA9IC0xOyAgICAgICAgICAgICAgLyogV2UgaGF2ZSBub3QgZm91bmQgYW4g YXV0aCBtZXRob2QgICovCisgICAgYXV0aF9jcnlwdCA9IDA7ICAgICAgICAgICAgIC8qIFdlIGFy ZSBub3QgdXNpbmcgZW5jcnlwdGlvbiAoeWV0KSAqLworICAgIHNlbmRfbGVuID0gZW5kX3N1YiA+ IDUxMiA/IDUxMiA6IGVuZF9zdWI7CisgICAgbWVtY3B5KHNlbmRfbGlzdCxwYXJzZWRhdCxzZW5k X2xlbik7CisKKyAgICAvKiBTZWFyY2ggdGhlIGxpc3Qgb2YgYWNjZXB0YWJsZSBBdXRoZW50aWNh dGlvbiB0eXBlcyBzZW50IGZyb20gKi8KKyAgICAvKiB0aGUgaG9zdCBhbmQgZmluZCBvbmUgdGhh dCB3ZSBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIEZvciBLZXJi ZXJvcyBhdXRoZW50aWNhdGlvbnMsIHRyeSB0byBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhICAqLwor ICAgIC8qIHZhbGlkIFRHVCwgaWYgbm90IHNraXAgb3ZlciB0aGUgYXV0aGVudGljYXRpb24gdHlw ZSBiZWNhdXNlICAqLworICAgIC8qIHdlIHdvdWxkbid0IGJlIGFibGUgdG8gc3VjY2Vzc2Z1bGx5 IGxvZ2luIGFueXdheS4gIFBlcmhhcHMgICAqLworICAgIC8qIHRoZXJlIGlzIGFub3RoZXIgc3Vw cG9ydGVkIGF1dGhlbnRpY2F0aW9uIHdoaWNoIHdlIGNvdWxkIHVzZSAqLworCisjaWZkZWYgTk9f RlRQX0FVVEgKKyAgICAvKiBJZiB0aGUgdXNlcmlkIGlzICJmdHAiIG9yICJhbm9ueW1vdXMiIHJl ZnVzZSB0byBwZXJmb3JtIEFVVEggKi8KKyAgICAvKiBmb3IgS2VyYmVyb3Mgb3IgU1JQLiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZiAvKiBOT19GVFBf QVVUSCAqLworCisgICAgaWYgKCBhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRIVFlQRV9BVVRPICkg eworICAgIGZvciAoaSA9IDI7IGkrMSA8PSBlbmRfc3ViOyBpICs9IDIpIHsKKyNpZmRlZiBOVExN CisgICAgICAgIGlmIChwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9OVExNICYmCisgICAgICAgICAg ICAgY2tfbnRsbV9pc192YWxpZCgxKSAmJgorICAgICAgICAgICAgIG50bG1fYXV0aF9zZW5kKCkg PT0gMCkgeworICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykg PT0gQVVUSF9DTElFTlRfVE9fU0VSVkVSICYmCisgICAgICAgICAgICAgICAgIHRuX2hvd19vayhw YXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsKKyNpZmRlZiBDS19F TkNSWVBUSU9OCisgICAgICAgICAgICAgICAgLyogTlRMTSBkb2VzIG5vdCBzdXBwb3J0IFRlbG5l dCBFbmNyeXB0aW9uICovCisgICAgICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVU SF9FTkNSWVBUX01BU0spKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLOwor I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9E RShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICBURUxPUFRf VV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgIGF1 dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9OVExNOworICAgICAgICAgICAgICAgIGF1 dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBOVExNICovCisjaWZk ZWYgQ0tfU1NMCisgICAgICAgIGlmICggcGFyc2VkYXRbaV0gPT0gQVVUSFRZUEVfU1NMICYmIHNz bF9pbml0aWFsaXplZCAmJgorI2lmZGVmIFNTTERMTAorICAgICAgICAgICAgIGNrX3NzbGVheV9p c19pbnN0YWxsZWQoKSAmJgorI2VuZGlmIC8qIFNTTERMTCAqLworICAgICAgICAgICAgICF0bHNf YWN0aXZlX2ZsYWcgJiYgIXNzbF9hY3RpdmVfZmxhZworI2lmbmRlZiBVU0VfQ0VSVF9DQgorICAg ICAgICAgICAgICYmIHRsc19sb2FkX2NlcnRzKHNzbF9jdHgsc3NsX2NvbiwwKQorI2VuZGlmIC8q IFVTRV9DRVJUX0NCICovCisgICAgICAgICAgICAgKSB7CisKKyAgICAgICAgICAgIGlmICgocGFy c2VkYXRbaSsxXSAmIEFVVEhfV0hPX01BU0spID09IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgor ICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkgJiYgdG5fZW5jX29rKHBh cnNlZGF0W2krMV0pKSB7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIC8q IFNTTCBkb2VzIG5vdCBzdXBwb3J0IFRlbG5ldCBFbmNyeXB0aW9uICovCisgICAgICAgICAgICAg ICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spKQorICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRb aSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAg ICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19S RjsKKyAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFRO X05HX1JGOworICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQ RV9TU0w7CisgICAgICAgICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9I T1dfTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorI2VuZGlmIC8qIFNTTCAqLworI2lmZGVmIENLX1NSUAorICAgICAgICBpZiAoIHBhcnNlZGF0 W2ldID09IEFVVEhUWVBFX1NSUAorI2lmZGVmIFNSUERMTAorICAgICAgICAgICAgICYmIGhTUlAK KyNlbmRpZiAvKiBTUlBETEwgKi8KKyNpZmRlZiBOT19GVFBfQVVUSAorICAgICAgICAgICAgICYm IHN0cmNtcCgiZnRwIixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pVc2VyTmFt ZSkKKyNlbmRpZiAvKiBOT19GVFBfQVVUSCAqLworICAgICAgICAgICAgICkgeworICAgICAgICAg ICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9XSE9fTUFTSykgPT0gQVVUSF9DTElFTlRfVE9f U0VSVkVSICYmCisgICAgICAgICAgICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0 bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsKKyNpZmRlZiBQUkVfU1JQXzFfNF81CisgICAgICAg ICAgICAgICAgaWYgKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykKKyAgICAgICAg ICAgICAgICAgICAgIC8qIERvIG5vdCBzdXBwb3J0IEVOQ1JZUFRfVVNJTkdfVEVMT1BUIHlldC4g Ki8KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYgLyogUFJFX1NSUF8xXzRf NSAqLworICAgICAgICAgICAgICAgIGlmICgoKHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRf TUFTSykgPT0KKyAgICAgICAgICAgICAgICAgICAgIEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQp ICYmCisgICAgICAgICAgICAgICAgICAgIChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElP TikgPT0gVE5fTkdfUkYgfHwKKyAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID09IFROX05HX1JGKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhf RU5DUllQVF9NQVNLOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICBpZiAo IGF1dGhfY3J5cHQgPT0gQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCApIHsKKyAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7Cisg ICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5f TkdfTVU7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNp ZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICBpZiAoIGF1dGhfY3J5cHQgPT0gQVVUSF9FTkNS WVBUX1NUQVJUX1RMUyAmJgorICAgICAgICAgICAgICAgICAgICAgY2tfc3NsZWF5X2lzX2luc3Rh bGxlZCgpICYmCisgICAgICAgICAgICAgICAgICAgICAodGxzX2FjdGl2ZV9mbGFnIHx8IHNzbF9h Y3RpdmVfZmxhZykgKSB7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9Q VF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgICAgICBURUxPUFRfVV9N T0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9u ID0gQVVUSFRZUEVfU1JQOworICAgICAgICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRbaSsx XSAmIEFVVEhfSE9XX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyNlbmRpZiAvKiBTUlAgKi8KKyNpZmRlZiBHU1NBUElfS1JCNQorICAgICAg ICBpZiAocGFyc2VkYXRbaV0gPT0gQVVUSFRZUEVfR1NTQVBJX0tSQjUgJiYKKyAgICAgICAgICAg IChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09CisgICAgICAgICAgICBBVVRI X0VOQ1JZUFRfQUZURVJfRVhDSEFOR0UgJiYKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIGhHU1NB UEkgJiYKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBOT19GVFBfQVVUSAorICAgICAgICAgICAg IHN0cmNtcCgiZnRwIixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pVc2VyTmFt ZSkgJiYKKyNlbmRpZiAvKiBOT19GVFBfQVVUSCAqLworICAgICAgICAgICAgIGNrX2dzc2FwaV9p c19pbnN0YWxsZWQoKSAmJiAhZ3NzazVfbXNnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo ICFnc3NrNV9hdXRoX3NlbmQocGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0ssCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9N QVNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2krMV0gJiBJ TklfQ1JFRF9GV0RfTUFTSykgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIElm IHdlIGFyZSBhdXRvLWdldHRpbmcgVEdUcywgdHJ5ICovCisgICAgICAgICAgICAgICAgaWYgKCAh Y2tfa3JiNV9pc190Z3RfdmFsaWQoKSApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIktlcmJl cm9zIDU6IFRpY2tldCBHZXR0aW5nIFRpY2tldCBub3QgdmFsaWQuXHJcbiIpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBnc3NrNV9tc2cgPSAxOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgZWxzZSBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNLKSA9PQor ICAgICAgICAgICAgICAgICAgICAgIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgorICAgICAgICAg ICAgICAgICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2Vk YXRbaSsxXSkpIHsKKyAgICAgICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAm IEFVVEhfRU5DUllQVF9NQVNLOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAg ICBpZiAoIGF1dGhfY3J5cHQgPT0gQVVUSF9FTkNSWVBUX0FGVEVSX0VYQ0hBTkdFICkgeworICAg ICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9O R19SRjsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElP TikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElP TiAqLworICAgICAgICAgICAgICAgIGF1dGhfZndkID0gcGFyc2VkYXRbaSsxXSAmIElOSV9DUkVE X0ZXRF9NQVNLOworICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRI VFlQRV9HU1NBUElfS1JCNTsKKyAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2kr MV0gJiBBVVRIX0hPV19NQVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg fQorICAgICAgICB9CisjZW5kaWYgLyogR1NTQVBJX0tSQjUgKi8KKyNpZmRlZiBLUkI1CisgICAg ICAgIGlmIChwYXJzZWRhdFtpXSA9PSBBVVRIVFlQRV9LRVJCRVJPU19WNSAmJgorI2lmZGVmIE9T MgorICAgICAgICAgICAgIGhLUkI1XzMyICYmCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgTk9f RlRQX0FVVEgKKyAgICAgICAgICAgICBzdHJjbXAoImZ0cCIsc3pVc2VyTmFtZSkgJiYgc3RyY21w KCJhbm9ueW1vdXMiLHN6VXNlck5hbWUpICYmCisjZW5kaWYgLyogTk9fRlRQX0FVVEggKi8KKyAg ICAgICAgICAgICBja19rcmI1X2lzX2luc3RhbGxlZCgpICYmICFrcmI1X21zZykgeworCisgICAg ICAgICAgICAvKiBXaXRob3V0IGVuY3J5cHRpb24gd2UgY2FuJ3QgcGVyZm9ybSBtdXR1YWwgYXV0 aGVudGljYXRpb24gKi8KKyAgICAgICAgICAgIGlmICggKHBhcnNlZGF0W2krMV0gJiBBVVRIX0hP V19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwgJiYKKyAgICAgICAgICAgICAgICAgIWNrX2NyeXB0 X2lzX2luc3RhbGxlZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg ICAvKiBTa2lwIG92ZXIgZW50cmllcyB0aGF0IHJlcXVlc3QgY3JlZGVudGlhbCBmb3J3YXJkaW5n ICovCisgICAgICAgICAgICAvKiBpZiB3ZSBhcmUgbm90IGZvcndhcmRpbmcuICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKCFmb3J3YXJkX2ZsYWcgJiYgKHBh cnNlZGF0W2krMV0gJiBJTklfQ1JFRF9GV0RfTUFTSykpIHx8CisgICAgICAgICAgICAgICAgKGZv cndhcmRfZmxhZyAmJgorICAgICAgICAgICAgICAgICAgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9I T1dfTUFTSykgPT0gQVVUSF9IT1dfT05FX1dBWSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgICAgICBpZiAoICFrNV9hdXRoX3NlbmQocGFyc2VkYXRbaSsxXSAmIEFVVEhf SE9XX01BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2krMV0g JiBBVVRIX0VOQ1JZUFRfTUFTSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy c2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9NQVNLKSApCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgLyogSWYgd2UgYXJlIGF1dG8tZ2V0dGluZyBUR1RzLCB0cnkgKi8KKyAgICAgICAg ICAgICAgICBpZiAoICFja19rcmI1X2lzX3RndF92YWxpZCgpICkgeworICAgICAgICAgICAgICAg IHByaW50ZigiS2VyYmVyb3MgNTogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC5cclxu Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGtyYjVfbXNnID0gMTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9X SE9fTUFTSykgPT0KKyAgICAgICAgICAgICAgICAgICAgICBBVVRIX0NMSUVOVF9UT19TRVJWRVIg JiYKKyAgICAgICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkgJiYgdG5f ZW5jX29rKHBhcnNlZGF0W2krMV0pKSB7CisgICAgICAgICAgICAgICAgaWYgKCgocGFyc2VkYXRb aSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PQorICAgICAgICAgICAgICAgICAgICAgQVVUSF9F TkNSWVBUX1VTSU5HX1RFTE9QVCkgJiYKKyAgICAgICAgICAgICAgICAgICAgIChURUxPUFRfTUVf TU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYgfHwKKyAgICAgICAgICAgICAgICAg ICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYpKQorICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoKChwYXJzZWRh dFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09CisgICAgICAgICAgICAgICAgICAgICBBVVRI X0VOQ1JZUFRfU1RBUlRfVExTKSAmJgorICAgICAgICAgICAgICAgICAgICAgKCFja19zc2xlYXlf aXNfaW5zdGFsbGVkKCkKKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgICAgfHwg ISh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKQorI2VuZGlmIC8qIENLX1NTTCAq LworICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKKworICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9F TkNSWVBUX01BU0s7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIGlmICgg YXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfVVNJTkdfVEVMT1BUICkgeworICAgICAgICAgICAg ICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKKyAg ICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9O R19NVTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lm ZGVmIENLX1NTTAorICAgICAgICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZ UFRfU1RBUlRfVExTICYmCisgICAgICAgICAgICAgICAgICAgICBja19zc2xlYXlfaXNfaW5zdGFs bGVkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2Fj dGl2ZV9mbGFnKSApIHsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01P REUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgIGF1dGhfZndkID0gcGFyc2VkYXRbaSsx XSAmIElOSV9DUkVEX0ZXRF9NQVNLOworICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3Zl cnNpb24gPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKKyAgICAgICAgICAgICAgICBhdXRoX2hvdyA9 IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19NQVNLOworICAgICAgICAgICAgICAgIGlmICggYXV0 aF9ob3cgPT0gQVVUSF9IT1dfT05FX1dBWSApIHsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BU X01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAg ICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICB9CisjZW5kaWYgLyogS1JCNSAqLworI2lmZGVmIEtSQjQKKyAgICAgICAgaWYgKHBhcnNlZGF0 W2ldID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y0ICYmCisjaWZkZWYgT1MyCisgICAgICAgICAgICAg aEtSQjRfMzIgJiYKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBOT19GVFBfQVVUSAorICAgICAg ICAgICAgIHN0cmNtcCgiZnRwIixzelVzZXJOYW1lKSAmJiBzdHJjbXAoImFub255bW91cyIsc3pV c2VyTmFtZSkgJiYKKyNlbmRpZiAvKiBOT19GVFBfQVVUSCAqLworICAgICAgICAgICAgIGNrX2ty YjRfaXNfaW5zdGFsbGVkKCkgJiYgIWtyYjRfbXNnKSB7CisgICAgICAgICAgICBpbnQgcmMgPSAw OworCisgICAgICAgICAgICAvKiBXaXRob3V0IGVuY3J5cHRpb24gd2UgY2FuJ3QgcGVyZm9ybSBt dXR1YWwgYXV0aGVudGljYXRpb24gKi8KKyAgICAgICAgICAgIGlmICggKHBhcnNlZGF0W2krMV0g JiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwgJiYKKyAgICAgICAgICAgICAgICAg IWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor ICAgICAgICAgICAgaWYgKCAhazRfYXV0aF9zZW5kKCkgKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIC8qIElmIHdlIGFyZSBhdXRvLWdldHRpbmcgVEdUcywgdHJ5ICovCisgICAgICAg ICAgICAgICAgaWYgKCAhY2tfa3JiNF9pc190Z3RfdmFsaWQoKSApIHsKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJLZXJiZXJvcyA0OiBUaWNrZXQgR2V0dGluZyBUaWNrZXQgbm90IHZhbGlk LlxyXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAga3JiNF9tc2cgPSAx OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKHBhcnNlZGF0W2krMV0gJiBB VVRIX1dIT19NQVNLKSA9PQorICAgICAgICAgICAgICAgICAgICAgIEFVVEhfQ0xJRU5UX1RPX1NF UlZFUiAmJgorICAgICAgICAgICAgICAgICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAm JiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAg ICAgICAgICAgICAgaWYgKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spICYmCisg ICAgICAgICAgICAgICAgICAgICAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09 IFROX05HX1JGIHx8CisgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BU X0VOQ1JZUFRJT04pID09IFROX05HX1JGKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgICAgICAgICAgYXV0aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZ UFRfTUFTSzsKKyAgICAgICAgICAgICAgICBpZiAoIGF1dGhfY3J5cHQgPT0gQVVUSF9FTkNSWVBU X1VTSU5HX1RFTE9QVCApIHsKKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9V X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlv bl92ZXJzaW9uID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7CisgICAgICAgICAgICAgICAgYXV0aF9o b3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFTSzsKKyAgICAgICAgICAgICAgICBpZiAo IGF1dGhfaG93ID09IEFVVEhfSE9XX09ORV9XQVkgKSB7CisgICAgICAgICAgICAgICAgICAgIFRF TE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAg ICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorI2VuZGlmIC8qIEtSQjQgKi8KKyAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg Zm9yIChpID0gMjsgaSsxIDw9IGVuZF9zdWI7IGkgKz0gMikgeworI2lmZGVmIENLX1NTTAorICAg ICAgICAgICAgaWYgKCBhdG9rKEFVVEhUWVBFX1NTTCkgJiYgcGFyc2VkYXRbaV0gPT0gQVVUSFRZ UEVfU1NMICYmCisjaWZkZWYgU1NMRExMCisgICAgICAgICAgICAgICAgIGNrX3NzbGVheV9pc19p bnN0YWxsZWQoKSAmJgorI2VuZGlmIC8qIFNTTERMTCAqLworICAgICAgICAgICAgICAgICAhdGxz X2FjdGl2ZV9mbGFnICYmICFzc2xfYWN0aXZlX2ZsYWcgJiYgc3NsX2luaXRpYWxpemVkCisjaWZu ZGVmIFVTRV9DRVJUX0NCCisgICAgICAgICAgICAgICAgICYmIHRsc19sb2FkX2NlcnRzKHNzbF9j dHgsc3NsX2NvbiwwKQorI2VuZGlmIC8qIFVTRV9DRVJUX0NCICovCisgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2krMV0gJiBB VVRIX1dIT19NQVNLKSA9PSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKKyAgICAgICAgICAgICAg ICAgICAgIHRuX2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsx XSkpIHsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgICAgIC8qIFNTTCBk b2VzIG5vdCBzdXBwb3J0IFRlbG5ldCBFbmNyeXB0aW9uICovCisgICAgICAgICAgICAgICAgICAg IGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFy c2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KKyAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VO Q1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9u X3ZlcnNpb24gPSBBVVRIVFlQRV9TU0w7CisgICAgICAgICAgICAgICAgICAgIGF1dGhfaG93ID0g cGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBTU0wgKi8KKyNp ZmRlZiBDS19TUlAKKyAgICAgICAgICAgIGlmICggYXRvayhBVVRIVFlQRV9TUlApICYmCisgICAg ICAgICAgICAgICAgIHBhcnNlZGF0W2ldID09IEFVVEhUWVBFX1NSUAorI2lmZGVmIFNSUERMTAor ICAgICAgICAgICAgICAgICAmJiBoU1JQCisjZW5kaWYgLyogU1JQRExMICovCisjaWZkZWYgTk9f RlRQX0FVVEgKKyAgICAgICAgICAgICAgICAgJiYgc3RyY21wKCJmdHAiLHN6VXNlck5hbWUpICYm IHN0cmNtcCgiYW5vbnltb3VzIixzelVzZXJOYW1lKQorI2VuZGlmIC8qIE5PX0ZUUF9BVVRIICov CisgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsx XSAmIEFVVEhfV0hPX01BU0spID09IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgorICAgICAgICAg ICAgICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRh dFtpKzFdKSkgeworI2lmZGVmIFBSRV9TUlBfMV80XzUKKyAgICAgICAgICAgICAgICBpZiAocGFy c2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKQorICAgICAgICAgICAgICAgICAgICAgLyog RG8gbm90IHN1cHBvcnQgRU5DUllQVF9VU0lOR19URUxPUFQgeWV0LiAqLworICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBQUkVfU1JQXzFfNF81ICovCisgICAgICAgICAg ICAgICAgaWYgKCgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PQorICAgICAg ICAgICAgICAgICAgICAgQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9QVCkgJiYKKyAgICAgICAgICAg ICAgICAgICAgIChURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYg fHwKKyAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElP TikgPT0gVE5fTkdfUkYpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICBpZiAoKChwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBUX01BU0spID09CisgICAg ICAgICAgICAgICAgICAgICBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSAmJgorICAgICAgICAgICAg ICAgICAgICAgKCFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkKKyNpZmRlZiBDS19TU0wKKyAgICAg ICAgICAgICAgICAgICAgICAgfHwgISh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFn KQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgYXV0aF9jcnlwdCA9 IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKKyNpZmRlZiBDS19FTkNSWVBUSU9O CisgICAgICAgICAgICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfVVNJ TkdfVEVMT1BUICkgeworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVM T1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisgICAgICAgICAgICAgICAgICAgICAgICBURUxP UFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOworICAgICAgICAgICAgICAg ICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX1NTTAorICAgICAg ICAgICAgICAgIGlmICggYXV0aF9jcnlwdCA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTICYmCisg ICAgICAgICAgICAgICAgICAgICBja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkgJiYKKyAgICAgICAg ICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKSApIHsKKyAg ICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5f TkdfUkY7CisgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfU1JQ OworICAgICAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hP V19NQVNLOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisjZW5kaWYgLyogU1JQICovCisjaWZkZWYgR1NTQVBJX0tSQjUKKyAgICAg ICAgaWYgKGF0b2soQVVUSFRZUEVfR1NTQVBJX0tSQjUpICYmCisgICAgICAgICAgICBwYXJzZWRh dFtpXSA9PSBBVVRIVFlQRV9HU1NBUElfS1JCNSAmJgorICAgICAgICAgICAgKHBhcnNlZGF0W2kr MV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0KKyAgICAgICAgICAgIEFVVEhfRU5DUllQVF9BRlRF Ul9FWENIQU5HRSAmJgorI2lmZGVmIE9TMgorICAgICAgICAgICAgaEdTU0FQSSAmJgorI2VuZGlm IC8qIE9TMiAqLworI2lmZGVmIE5PX0ZUUF9BVVRICisgICAgICAgICAgICBzdHJjbXAoImZ0cCIs c3pVc2VyTmFtZSkgJiYgc3RyY21wKCJhbm9ueW1vdXMiLHN6VXNlck5hbWUpICYmCisjZW5kaWYg LyogTk9fRlRQX0FVVEggKi8KKyAgICAgICAgICAgIGNrX2dzc2FwaV9pc19pbnN0YWxsZWQoKSAm JiAhZ3NzazVfbXNnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICFnc3NrNV9hdXRoX3Nl bmQocGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0ssCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2krMV0gJiBJTklfQ1JFRF9GV0RfTUFT SykgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIElmIHdlIGFyZSBhdXRvLWdl dHRpbmcgVEdUcywgdHJ5ICovCisgICAgICAgICAgICAgICAgaWYgKCAhY2tfa3JiNV9pc190Z3Rf dmFsaWQoKSApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIktlcmJlcm9zIDU6IFRpY2tldCBH ZXR0aW5nIFRpY2tldCBub3QgdmFsaWQuXHJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBnc3NrNV9tc2cgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz ZSBpZiAoKHBhcnNlZGF0W2krMV0gJiBBVVRIX1dIT19NQVNLKSA9PQorICAgICAgICAgICAgICAg ICAgICAgIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiAmJgorICAgICAgICAgICAgICAgICAgICAgIHRu X2hvd19vayhwYXJzZWRhdFtpKzFdKSAmJiB0bl9lbmNfb2socGFyc2VkYXRbaSsxXSkpIHsKKyAg ICAgICAgICAgICAgICBhdXRoX2NyeXB0ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9N QVNLOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICBpZiAoIGF1dGhfY3J5 cHQgPT0gQVVUSF9FTkNSWVBUX0FGVEVSX0VYQ0hBTkdFICkgeworICAgICAgICAgICAgICAgICAg ICBURUxPUFRfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAg ICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsK KyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAg ICAgICAgIGF1dGhfZndkID0gcGFyc2VkYXRbaSsxXSAmIElOSV9DUkVEX0ZXRF9NQVNLOworICAg ICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9HU1NBUElfS1JC NTsKKyAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hPV19N QVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisj ZW5kaWYgLyogR1NTQVBJX0tSQjUgKi8KKyNpZmRlZiBLUkI1CisgICAgICAgICAgICBpZiAoIGF0 b2soQVVUSFRZUEVfS0VSQkVST1NfVjUpICYmCisgICAgICAgICAgICAgICAgIHBhcnNlZGF0W2ld ID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y1ICYmCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAg IGhLUkI1XzMyICYmCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgTk9fRlRQX0FVVEgKKyAgICAg ICAgICAgICAgICAgc3RyY21wKCJmdHAiLHN6VXNlck5hbWUpICYmIHN0cmNtcCgiYW5vbnltb3Vz IixzelVzZXJOYW1lKSAmJgorI2VuZGlmIC8qIE5PX0ZUUF9BVVRIICovCisgICAgICAgICAgICAg ICAgIGNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgJiYgIWtyYjVfbXNnKSB7CisKKyAgICAgICAgICAg ICAgICAvKiBXaXRob3V0IGVuY3J5cHRpb24gd2UgY2FuJ3QgcGVyZm9ybSBtdXR1YWwgYXV0aGVu dGljYXRpb24gKi8KKyAgICAgICAgICAgICAgICBpZiAoIChwYXJzZWRhdFtpKzFdICYgQVVUSF9I T1dfTUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMICYmCisgICAgICAgICAgICAgICAgICAgICAhY2tf Y3J5cHRfaXNfaW5zdGFsbGVkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg ICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIGVudHJpZXMgdGhhdCByZXF1ZXN0IGNyZWRlbnRp YWwgZm9yd2FyZGluZyAqLworICAgICAgICAgICAgICAgIC8qIGlmIHdlIGFyZSBub3QgZm9yd2Fy ZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAo KCFmb3J3YXJkX2ZsYWcgJiYgKHBhcnNlZGF0W2krMV0gJiBJTklfQ1JFRF9GV0RfTUFTSykpIHx8 CisgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZF9mbGFnICYmCisgICAgICAgICAgICAgICAg ICAgICAgICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX09ORV9X QVkpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBp ZiAoICFrNV9hdXRoX3NlbmQocGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0ssCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpKzFdICYgQVVUSF9FTkNSWVBU X01BU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRhdFtpKzFd ICYgSU5JX0NSRURfRldEX01BU0spICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgIC8qIElmIHdlIGFyZSBhdXRvLWdldHRpbmcgVEdUcywgdHJ5ICovCisgICAgICAgICAg ICAgICAgICAgIGlmICggIWNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkgKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2VyYmVyb3Mg NTogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC5cclxuIik7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAga3JiNV9tc2cgPSAxOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhfV0hP X01BU0spID09CisgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhfQ0xJRU5UX1RPX1NFUlZF UiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsxXSkg JiYgdG5fZW5jX29rKHBhcnNlZGF0W2krMV0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKCgocGFyc2VkYXRbaSsxXSAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PQor ICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhfRU5DUllQVF9VU0lOR19URUxPUFQpICYmCisg ICAgICAgICAgICAgICAgICAgICAgICAgKFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSA9PSBUTl9OR19SRiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9E RShURUxPUFRfRU5DUllQVElPTikgPT0gVE5fTkdfUkYpKQorICAgICAgICAgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKHBhcnNlZGF0W2krMV0gJiBB VVRIX0VOQ1JZUFRfTUFTSykgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICBBVVRIX0VOQ1JZ UFRfU1RBUlRfVExTKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICghY2tfc3NsZWF5X2lz X2luc3RhbGxlZCgpCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8 fCAhKHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcpCisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtp KzFdICYgQVVUSF9FTkNSWVBUX01BU0s7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAg ICAgICAgICAgICBpZiAoYXV0aF9jcnlwdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVEVM T1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisgICAgICAgICAgICAg ICAgICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOwor ICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVm IENLX1NTTAorICAgICAgICAgICAgICAgICAgICBpZiAoIGF1dGhfY3J5cHQgPT0gQVVUSF9FTkNS WVBUX1NUQVJUX1RMUyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIGNrX3NzbGVheV9pc19p bnN0YWxsZWQoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICh0bHNfYWN0aXZlX2ZsYWcg fHwgc3NsX2FjdGl2ZV9mbGFnKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9N RV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgICAg ICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAg ICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgICAg ICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7CisgICAgICAg ICAgICAgICAgICAgIGF1dGhfaG93ID0gcGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0s7Cisg ICAgICAgICAgICAgICAgICAgIGlmICggYXV0aF9ob3cgPT0gQVVUSF9IT1dfT05FX1dBWSApIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9O KSA9IFROX05HX1JGOworICAgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxP UFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisj ZW5kaWYgLyogS1JCNSAqLworI2lmZGVmIEtSQjQKKyAgICAgICAgICAgIGlmICggYXRvayhBVVRI VFlQRV9LRVJCRVJPU19WNCkgJiYKKyAgICAgICAgICAgICAgICAgcGFyc2VkYXRbaV0gPT0gQVVU SFRZUEVfS0VSQkVST1NfVjQgJiYKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgaEtSQjRf MzIgJiYKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBOT19GVFBfQVVUSAorICAgICAgICAgICAg ICAgICBzdHJjbXAoImZ0cCIsc3pVc2VyTmFtZSkgJiYgc3RyY21wKCJhbm9ueW1vdXMiLHN6VXNl ck5hbWUpICYmCisjZW5kaWYgLyogTk9fRlRQX0FVVEggKi8KKyAgICAgICAgICAgICAgICAgY2tf a3JiNF9pc19pbnN0YWxsZWQoKSAmJiAha3JiNF9tc2cpIHsKKyAgICAgICAgICAgICAgICBpbnQg cmMgPSAwOworCisgICAgICAgICAgICAgICAgLyogV2l0aG91dCBlbmNyeXB0aW9uIHdlIGNhbid0 IHBlcmZvcm0gbXV0dWFsIGF1dGhlbnRpY2F0aW9uICovCisgICAgICAgICAgICAgICAgaWYgKCAo cGFyc2VkYXRbaSsxXSAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTCAmJgorICAg ICAgICAgICAgICAgICAgICAgIWNrX2NyeXB0X2lzX2luc3RhbGxlZCgpKQorICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGlmICggIWs0X2F1dGhfc2VuZCgp ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGFyZSBh dXRvLWdldHRpbmcgVEdUcywgdHJ5ICovCisgICAgICAgICAgICAgICAgICAgIGlmICggIWNrX2ty YjRfaXNfdGd0X3ZhbGlkKCkgKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiS2VyYmVy b3MgNDogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZC5cclxuIik7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAga3JiNF9tc2cgPSAxOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgocGFyc2VkYXRbaSsxXSAmIEFVVEhf V0hPX01BU0spID09CisgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVEhfQ0xJRU5UX1RPX1NF UlZFUiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9ob3dfb2socGFyc2VkYXRbaSsx XSkgJiYgdG5fZW5jX29rKHBhcnNlZGF0W2krMV0pKQorICAgICAgICAgICAgICAgIHsKKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgICAgIGlmICgocGFyc2VkYXRbaSsxXSAm IEFVVEhfRU5DUllQVF9NQVNLKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKFRFTE9QVF9N RV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19SRiB8fAorICAgICAgICAgICAgICAg ICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID09IFROX05HX1JGKSkK KyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgYXV0 aF9jcnlwdCA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSzsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGF1dGhfY3J5cHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9Q VF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOworICAgICAgICAgICAgICAg ICAgICAgICAgVEVMT1BUX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKKyAg ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAg ICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y0 OworICAgICAgICAgICAgICAgICAgICBhdXRoX2hvdyA9IHBhcnNlZGF0W2krMV0gJiBBVVRIX0hP V19NQVNLOworICAgICAgICAgICAgICAgICAgICBpZiAoIGF1dGhfaG93ID09IEFVVEhfSE9XX09O RV9XQVkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShURUxPUFRf RU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9V X01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBOVExNCisgICAgICAgIGlmICggYXRv ayhBVVRIVFlQRV9OVExNKSAmJgorICAgICAgICAgICAgIHBhcnNlZGF0W2ldID09IEFVVEhUWVBF X05UTE0gJiYKKyAgICAgICAgICAgICBja19udGxtX2lzX3ZhbGlkKDEpICYmCisgICAgICAgICAg ICAgbnRsbV9hdXRoX3NlbmQoKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKHBhcnNlZGF0W2kr MV0gJiBBVVRIX1dIT19NQVNLKSA9PSBBVVRIX0NMSUVOVF9UT19TRVJWRVIgJiYKKyAgICAgICAg ICAgICAgICAgdG5faG93X29rKHBhcnNlZGF0W2krMV0pICYmIHRuX2VuY19vayhwYXJzZWRhdFtp KzFdKSkgeworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAvKiBOVExNIGRv ZXMgbm90IHN1cHBvcnQgVGVsbmV0IEVuY3J5cHRpb24gKi8KKyAgICAgICAgICAgICAgICBpZiAo KHBhcnNlZGF0W2krMV0gJiBBVVRIX0VOQ1JZUFRfTUFTSykpCisgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGF1dGhfY3J5cHQgPSBwYXJzZWRhdFtpKzFdICYg QVVUSF9FTkNSWVBUX01BU0s7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAg ICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAg ICAgICAgICAgICAgIFRFTE9QVF9VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7 CisgICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbiA9IEFVVEhUWVBFX05UTE07 CisgICAgICAgICAgICAgICAgYXV0aF9ob3cgPSBwYXJzZWRhdFtpKzFdICYgQVVUSF9IT1dfTUFT SzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vu ZGlmIC8qIE5UTE0gKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhdXRoX2hvdyA9PSAt MSkgeyAgICAgICAgICAgICAgIC8qIERpZCB3ZSBmaW5kIG9uZT8gKi8KKyAgICAgICAgc3dpdGNo ICggYXV0aF90eXBlX3VzZXJbMF0gKSB7ICAvKiBJZiBub3QsIGFib3J0IHRoZSBuZWdvdGlhdGlv biAqLworICAgICAgICBjYXNlIEFVVEhUWVBFX05VTEw6CisgICAgICAgICAgICBhdXRoX2Fib3J0 KCJVc2VyIHJlZnVzZWQgdG8gYWNjZXB0IGFueSBhdXRoZW50aWNhdGlvbiBtZXRob2QiLDApOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVVUSFRZUEVfQVVUTzoKKyAgICAgICAg ICAgIGF1dGhfYWJvcnQoIk5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhdmFpbGFibGUiLCAwKTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBjaGFy IG1zZ1s4MF07CisgICAgICAgICAgICBja21ha21zZyhtc2csODAsQVVUSFRZUEVfTkFNRShhdXRo X3R5cGVfdXNlclswXSksCisgICAgICAgICAgICAgICAgICAgICAgIiBjb3VsZCBub3QgYmUgbmVn b3RpYXRlZCIsTlVMTCxOVUxMCisgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg YXV0aF9hYm9ydChtc2csIDApOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXV0aF9m aW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAg fQorCisgICAgcHJpbnRmKCJBdXRoZW50aWNhdGluZyB3aXRoICVzXHJcbiIsCisgICAgICAgICAg ICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pKTsKKworICAgIC8qIFNlbmQg VGVsbmV0IEF1dGggTmFtZSBtZXNzYWdlIChpZiBuZWNlc3NhcnkpICovCisgICAgc3dpdGNoICgg YXV0aGVudGljYXRpb25fdmVyc2lvbiApIHsKKyAgICBjYXNlIEFVVEhUWVBFX1NSUDoKKyAgICBj YXNlIEFVVEhUWVBFX0tFUkJFUk9TX1Y0OgorICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjU6 CisgICAgY2FzZSBBVVRIVFlQRV9HU1NBUElfS1JCNToKKyAgICAgICAgLyogaWYgd2UgZG8gbm90 IGhhdmUgYSBuYW1lIHRvIGxvZ2luIHdpdGggZ2V0IG9uZSBub3cuICovCisgICAgICAgIHdoaWxl ICggc3pVc2VyTmFtZVswXSA9PSAnXDAnICkgeworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiB0 bl9wcl91aWQ7CisgICAgICAgICAgICBpbnQgb2sgPSB1cV90eHQoTlVMTCwKKyAgICAgICAgICAg ICAgICAgICAgIHRuX3ByX3VpZCAmJiB0bl9wcl91aWRbMF0gPyB0bl9wcl91aWQgOiAiSG9zdCBV c2VyaWQ6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgTlVMTCwgc3pVc2VyTmFt ZSwgNjMsIE5VTEwsREVGQVVMVF9VUV9USU1FT1VUKTsKKyAgICAgICAgICAgIGlmICggIW9rICkK KyAgICAgICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICB9CisgICAgICAg IHBsZW4gPSBzdHJsZW4oc3pVc2VyTmFtZSk7CisgICAgICAgIHBuYW1lID0gKHVuc2lnbmVkIGNo YXIgKikgc3pVc2VyTmFtZTsKKworICAgICAgICAvKiBDb25zdHJ1Y3QgVGVsbmV0IERlYnVnZ2lu ZyBNZXNzYWdlICovCisgICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgewor ICAgICAgICAgICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAg ICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwK KyAgICAgICAgICAgICAgICAgICAgICAgIiBOQU1FICIsKGNoYXIgKilwbmFtZSwiIElBQyBTRSIs TlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwKKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLHRuX21z ZywiIiwwKTsKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1Zyh0bl9t c2cpOworICAgICAgICB9CisKKyAgICAgICAgLyogQ29uc3RydWN0IGFuZCBzZW5kIEF1dGhlbnRp Y2F0aW9uIE5hbWUgc3VibmVnb3RpYXRpb24gKi8KKyAgICAgICAgaWYgKCBwbGVuIDwgc2l6ZW9m KGJ1ZikgLSA2ICkgeworICAgICAgICAgICAgc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVjJWMlYyVj IiwgSUFDLCBTQiwgCisgICAgICAgICAgICAgICAgICAgICBURUxPUFRfQVVUSEVOVElDQVRJT04s CisgICAgICAgICAgICAgICAgICAgICBURUxRVUFMX05BTUUpOworICAgICAgICAgICAgbWVtY3B5 KCZidWZbNF0sIHBuYW1lLCBwbGVuKTsgICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAg ICAgICBzcHJpbnRmKChjaGFyICopJmJ1ZltwbGVuICsgNF0sICIlYyVjIiwgSUFDLCBTRSk7ICAg Lyogc2FmZSAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBT RU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICAgICAgICAgIHR0b2woKENIQVIgKili dWYsIHBsZW4rNik7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgo KTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ByaW50ZigoY2hhciAq KWJ1ZiwgIiVjJWMlYyVjJWMlYyIsIElBQywgU0IsIAorICAgICAgICAgICAgICAgICAgICAgVEVM T1BUX0FVVEhFTlRJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgVEVMUVVBTF9OQU1FLCBJ QUMsIFNFKTsgICAgLyogc2FmZSAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgUmVxdWVzdFRl bG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICAgICAgICAgIHR0 b2woKENIQVIgKilidWYsIDYpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgUmVsZWFzZVRlbG5l dE11dGV4KCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENvbnN0cnVjdCBB dXRoZW50aWNhdGlvbiBNb2RlIHN1Ym5lZ290aWF0aW9uIG1lc3NhZ2UgKGlmIG5lY2Vzc2FyeSkg Ki8KKyAgICBzd2l0Y2ggKCBhdXRoZW50aWNhdGlvbl92ZXJzaW9uICkgeworICAgIGNhc2UgQVVU SFRZUEVfU1JQOgorICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6CisgICAgY2FzZSBBVVRI VFlQRV9LRVJCRVJPU19WNToKKyAgICBjYXNlIEFVVEhUWVBFX0dTU0FQSV9LUkI1OgorICAgIGNh c2UgQVVUSFRZUEVfTlRMTToKKyAgICAgICAgbW9kZSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZFUiB8 IChhdXRoX2hvdyAmIEFVVEhfSE9XX01BU0spIHwgYXV0aF9jcnlwdAorI2lmZGVmIFVTRV9JTklf Q1JFRF9GV0QKKyAgICAgICAgICAgICAgIHwgKCgoYXV0aGVudGljYXRpb25fdmVyc2lvbiA9PSBB VVRIVFlQRV9LRVJCRVJPU19WNSkgJiYKKyAgICAgICAgICAgICAgICAgIGF1dGhfZndkKT9JTklf Q1JFRF9GV0RfT046SU5JX0NSRURfRldEX09GRikKKyNlbmRpZiAvKiBVU0VfSU5JX0NSRURfRldE ICovCisgICAgICAgICAgICAgICA7CisgICAgICAgIHNwcmludGYoKGNoYXIgKilidWYsICIlYyVj JWMlYyVjJWMlYyIsCisgICAgICAgICAgICAgICAgIElBQywgU0IsIFRFTE9QVF9BVVRIRU5USUNB VElPTiwKKyAgICAgICAgICAgICAgICAgVEVMUVVBTF9JUywKKyAgICAgICAgICAgICAgICAgYXV0 aGVudGljYXRpb25fdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgbW9kZSwKKyAgICAgICAgICAg ICAgICAgS1JCX0FVVEgpOyAgICAgLyogc2FmZSAqLworICAgICAgICBicmVhazsKKyAgICB9CisK KyAgICAvKiBTZW5kIGluaXRpYWwgYXV0aGVudGljYXRpb24gZGF0YSAqLworICAgIHN3aXRjaCAo IGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gKSB7CisjaWZkZWYgQ0tfU1NMCisgICAgY2FzZSBBVVRI VFlQRV9TU0w6CisgICAgICAgIFNlbmRTU0xBdXRoU0IoU1NMX1NUQVJULE5VTEwsMCk7CisgICAg ICAgIGJyZWFrOworI2VuZGlmIC8qIFNTTCAqLworI2lmZGVmIENLX1NSUAorICAgIGNhc2UgQVVU SFRZUEVfU1JQOgorICAgICAgICBzcHJpbnRmKCZidWZbN10sICIlYyVjIiwgSUFDLCBTRSk7ICAg ICAgLyogc2FmZSAqLworICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsK KyAgICAgICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAg ICAgICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwK KyAgICAgICAgICAgICAgICAgICAgICAiIElTICIsQVVUSFRZUEVfTkFNRShhdXRoZW50aWNhdGlv bl92ZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAiIEFVVEggIixBVVRITU9ERV9OQU1F KG1vZGUpLCIgSUFDIFNFIiwKKyAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAw LHRuX21zZywiIiwwKTsKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwgZGVic2VzKSB0bl9kZWJ1 Zyh0bl9tc2cpOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAgIFJlcXVlc3RUZWxuZXRN dXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisgICAgICAgIHR0b2woKENIQVIg KilidWYsIDkpOworI2lmZGVmIE9TMgorICAgICAgICBSZWxlYXNlVGVsbmV0TXV0ZXgoKTsKKyNl bmRpZgorICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBTUlAgKi8KKyNpZmRlZiBOVExNCisgICAg Y2FzZSBBVVRIVFlQRV9OVExNOiB7CisgICAgICAgIGludCBsZW5ndGggPSAwOworCisgICAgICAg IGZvciAoIGk9MCA7IGk8TlRMTVNlY0J1ZlswXS5jYkJ1ZmZlciA7IGkrKyApIHsKKyAgICAgICAg ICAgIGlmICggKChjaGFyICopTlRMTVNlY0J1ZlswXS5wdkJ1ZmZlcilbaV0gPT0gSUFDICkKKyAg ICAgICAgICAgICAgICBpYWNjbnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggKCAyKnNp emVvZihVTE9ORykgKyBOVExNU2VjQnVmWzBdLmNiQnVmZmVyICsgaWFjY250ICsgMTApICA8Cisg ICAgICAgICAgICAgc2l6ZW9mKGJ1ZikgKSB7CisgICAgICAgICAgICBsZW5ndGggPSBjb3B5X2Zv cl9uZXQoJmJ1Zls3XSwoY2hhciAqKSZOVExNU2VjQnVmWzBdLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAyKnNpemVvZihVTE9ORykpOworICAgICAgICAgICAgbGVuZ3RoICs9 IGNvcHlfZm9yX25ldCgmYnVmWzcrbGVuZ3RoXSwgTlRMTVNlY0J1ZlswXS5wdkJ1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVExNU2VjQnVmWzBdLmNiQnVmZmVyKTsK KyAgICAgICAgfQorICAgICAgICBzcHJpbnRmKCZidWZbNytsZW5ndGhdLCAiJWMlYyIsIElBQywg U0UpOworCisgICAgICAgIGlmIChkZWJsb2cgfHwgdG5fZGViIHx8IGRlYnNlcykgeworICAgICAg ICAgICAgaW50IGk7CisgICAgICAgICAgICBja21ha3htc2codG5fbXNnLFROX01TR19MRU4sCisg ICAgICAgICAgICAgICAgICAgICAgIlRFTE5FVCBTRU5UIFNCICIsVEVMT1BUKFRFTE9QVF9BVVRI RU5USUNBVElPTiksCisgICAgICAgICAgICAgICAgICAgICAgIiBJUyAiLEFVVEhUWVBFX05BTUUo YXV0aGVudGljYXRpb25fdmVyc2lvbiksIiAiLAorICAgICAgICAgICAgICAgICAgICAgIEFVVEhN T0RFX05BTUUobW9kZSksIiBOVExNX0FVVEggIiwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMCisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIHRuX2hleCgoY2hhciAqKXRuX21zZyxUTl9NU0dfTEVOLCZidWZbN10sbGVuZ3RoKTsKKyAg ICAgICAgICAgIGNrc3RybmNhdCh0bl9tc2csIklBQyBTRSIsVE5fTVNHX0xFTik7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAwLHRuX21zZywiIiwwKTsKKyAgICAgICAgICAgIGlmICh0bl9kZWIgfHwg ZGVic2VzKSB0bl9kZWJ1Zyh0bl9tc2cpOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAg IFJlcXVlc3RUZWxuZXRNdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApOworI2VuZGlmCisgICAg ICAgIHR0b2woKENIQVIgKilidWYsIGxlbmd0aCs5KTsKKyNpZmRlZiBPUzIKKyAgICAgICAgUmVs ZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlm IC8qIE5UTE0gKi8KKyNpZmRlZiBLUkI0CisgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNDoK KyAgICAgICAgZm9yICggaT0wIDsgaTxrNF9hdXRoLmxlbmd0aCA7IGkrKyApIHsKKyAgICAgICAg ICAgIGlmICggazRfYXV0aC5kYXRbaV0gPT0gSUFDICkKKyAgICAgICAgICAgICAgICBpYWNjbnQr KzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggazRfYXV0aC5sZW5ndGggKyBpYWNjbnQgKyAx MCA8IHNpemVvZihidWYpICkKKyAgICAgICAgICBrNF9hdXRoLmxlbmd0aCA9IGNvcHlfZm9yX25l dCgmYnVmWzddLCBrNF9hdXRoLmRhdCwgazRfYXV0aC5sZW5ndGgpOworICAgICAgICBlbHNlCisg ICAgICAgICAgICBrNF9hdXRoLmxlbmd0aCA9IDA7CisgICAgICAgIHNwcmludGYoJmJ1ZltrNF9h dXRoLmxlbmd0aCs3XSwgIiVjJWMiLCBJQUMsIFNFKTsKKworICAgICAgICBpZiAoZGVibG9nIHx8 IHRuX2RlYiB8fCBkZWJzZXMpIHsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgY2tt YWt4bXNnKHRuX21zZyxUTl9NU0dfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICJURUxORVQg U0VOVCBTQiAiLFRFTE9QVChURUxPUFRfQVVUSEVOVElDQVRJT04pLCIgSVMgIiwKKyAgICAgICAg ICAgICAgICAgICAgICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwK KyAgICAgICAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKG1vZGUpLCIgQVVUSCAiLAorICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIHRuX2hleCgoY2hhciAqKXRuX21zZyxUTl9NU0dfTEVO LCZidWZbN10sazRfYXV0aC5sZW5ndGgpOworICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywi SUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDAp OworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7Cisg ICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5E RUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICAgICAgdHRvbCgoQ0hBUiAqKWJ1ZiwgazRfYXV0 aC5sZW5ndGgrOSk7CisjaWZkZWYgT1MyCisgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOwor I2VuZGlmCisKKyNpZm5kZWYgUkVNT1ZFX0ZPUl9FWFBPUlQKKyNpZmRlZiBDS19FTkNSWVBUSU9O CisgICAgICAgIC8qCisgICAgICAgICAqIElmIHdlIGFyZSBkb2luZyBtdXR1YWwgYXV0aGVudGlj YXRpb24sIGdldCBzZXQgdXAgdG8gc2VuZAorICAgICAgICAgKiB0aGUgY2hhbGxlbmdlLCBhbmQg dmVyaWZ5IGl0IHdoZW4gdGhlIHJlc3BvbnNlIGNvbWVzIGJhY2suCisgICAgICAgICAqLworICAg ICAgICBpZiAoKGF1dGhfaG93ICYgQVVUSF9IT1dfTUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMKSB7 CisgICAgICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgICAgIGludCByYyA9IDA7CisK KyNpZmRlZiBNSVRfQ1VSUkVOVAorICAgICAgICAgICAgZGF0YS5kYXRhID0gY3JlZC5zZXNzaW9u OworICAgICAgICAgICAgZGF0YS5sZW5ndGggPSA4OyAvKiBzaXplb2YoY3JlZC5zZXNzaW9uKSAq LzsKKworICAgICAgICAgICAgaWYgKGNvZGUgPSBrcmI1X2NfcmFuZG9tX3NlZWQoazVfY29udGV4 dCwgJmRhdGEpKSB7CisgICAgICAgICAgICAgICAgY29tX2VycigibGlidGVsbmV0IiwgY29kZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUgc2VlZGluZyByYW5kb20gbnVtYmVyIGdl bmVyYXRvciIpOworICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgaWYgKGNvZGUgPSBrcmI1X2NfbWFrZV9yYW5kb21fa2V5KGs1X2NvbnRleHQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOQ1RZUEVf REVTX0NCQ19SQVcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZyYW5kb21fa2V5KSkgeworICAgICAgICAgICAgICAgIGNvbV9lcnIoImxpYnRlbG5ldCIs IGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIndoaWxlIGNyZWF0aW5nIHJhbmRvbSBz ZXNzaW9uIGtleSIpOworICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgLyogdGhlIGtyYjQgY29kZSB1c2VzIGVjYiBtb2RlLCBidXQgb24gYSBz aW5nbGUgYmxvY2sKKyAgICAgICAgICAgIHdpdGggYSB6ZXJvIGl2ZWMsIGVjYiBhbmQgY2JjIGFy ZSB0aGUgc2FtZSAqLworICAgICAgICAgICAgazRfa3Jia2V5LmVuY3R5cGUgPSBFTkNUWVBFX0RF U19DQkNfUkFXOworICAgICAgICAgICAgazRfa3Jia2V5Lmxlbmd0aCA9IDg7CisgICAgICAgICAg ICBrNF9rcmJrZXkuY29udGVudHMgPSBjcmVkLnNlc3Npb247CisKKyAgICAgICAgICAgIGVuY2Rh dGEuY2lwaGVydGV4dC5kYXRhID0gcmFuZG9tX2tleS5jb250ZW50czsKKyAgICAgICAgICAgIGVu Y2RhdGEuY2lwaGVydGV4dC5sZW5ndGggPSByYW5kb21fa2V5Lmxlbmd0aDsKKyAgICAgICAgICAg IGVuY2RhdGEuZW5jdHlwZSA9IEVOQ1RZUEVfVU5LTk9XTjsKKworICAgICAgICAgICAgZGF0YS5k YXRhID0gazRfc2Vzc2lvbl9rZXk7CisgICAgICAgICAgICBkYXRhLmxlbmd0aCA9IDg7CisKKyAg ICAgICAgICAgIGNvZGUgPSBrcmI1X2NfZGVjcnlwdChrNV9jb250ZXh0LCAmazRfa3Jia2V5LCAw LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jZGF0YSwgJmRhdGEp OworCisgICAgICAgICAgICBrcmI1X2ZyZWVfa2V5YmxvY2tfY29udGVudHMoazVfY29udGV4dCwg JnJhbmRvbV9rZXkpOworCisgICAgICAgICAgICBpZiAoY29kZSkgeworICAgICAgICAgICAgICAg IGNvbV9lcnIoImxpYnRlbG5ldCIsIGNvZGUsICJ3aGlsZSBlbmNyeXB0aW5nIHJhbmRvbSBrZXki KTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIGVuY2RhdGEuY2lwaGVydGV4dC5kYXRhID0gazRfc2Vzc2lvbl9rZXk7CisgICAgICAgICAg ICBlbmNkYXRhLmNpcGhlcnRleHQubGVuZ3RoID0gODsKKyAgICAgICAgICAgIGVuY2RhdGEuZW5j dHlwZSA9IEVOQ1RZUEVfVU5LTk9XTjsKKworICAgICAgICAgICAgZGF0YS5kYXRhID0gazRfY2hh bGxlbmdlOworICAgICAgICAgICAgZGF0YS5sZW5ndGggPSA4OworCisgICAgICAgICAgICBjb2Rl ID0ga3JiNV9jX2RlY3J5cHQoazVfY29udGV4dCwgJms0X2tyYmtleSwgMCwgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuY2RhdGEsICZkYXRhKTsKKyNlbHNlIC8qIE1J VF9DVVJSRU5UICovCisgICAgICAgICAgICBtZW1zZXQoazRfc2NoZWQsMCxzaXplb2YoU2NoZWR1 bGUpKTsKKyAgICAgICAgICAgIGNraGV4ZHVtcCgiYXV0aF9zZW5kIixjcmVkLnNlc3Npb24sOCk7 CisgICAgICAgICAgICByYyA9IGRlc19rZXlfc2NoZWQoY3JlZC5zZXNzaW9uLCBrNF9zY2hlZCk7 CisgICAgICAgICAgICBpZiAoIHJjID09IC0xICkgeworICAgICAgICAgICAgICAgIHByaW50Zigi P0ludmFsaWQgREVTIGtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHNcclxuIik7CisgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiYXV0aF9zZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAi aW52YWxpZCBERVMgS2V5IHNwZWNpZmllZCBpbiBjcmVkZW50aWFscyIsMCk7CisgICAgICAgICAg ICB9IGVsc2UgaWYgKCByYyA9PSAtMiApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9XZWFr IERFUyBrZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzXHJcbiIpOworICAgICAgICAgICAgICAg IGRlYnVnKEYxMTAsImF1dGhfc2VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgIndlYWsgREVT IEtleSBzcGVjaWZpZWQgaW4gY3JlZGVudGlhbHMiLDApOworICAgICAgICAgICAgfSBlbHNlIGlm ICggcmMgIT0gMCApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9ERVMgS2V5IFNjaGVkdWxl IG5vdCBzZXQgYnkgY3JlZGVudGlhbHNcclxuIik7CisgICAgICAgICAgICAgICAgZGVidWcoRjEx MCwiYXV0aF9zZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAiREVTIEtleSBTY2hlZHVsZSBu b3Qgc2V0IGJ5IGNyZWRlbnRpYWxzIiwwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNr aGV4ZHVtcCgiYXV0aF9zZW5kIHNjaGVkdWxlIixrNF9zY2hlZCw4KjE2KTsKKworICAgICAgICAg ICAgZGVzX3NldF9yYW5kb21fZ2VuZXJhdG9yX3NlZWQoY3JlZC5zZXNzaW9uKTsKKworICAgICAg ICAgICAgZG8geworICAgICAgICAgICAgICAgIGRlc19uZXdfcmFuZG9tX2tleShrNF9zZXNzaW9u X2tleSk7CisgICAgICAgICAgICAgICAgZGVzX2ZpeHVwX2tleV9wYXJpdHkoazRfc2Vzc2lvbl9r ZXkpOworICAgICAgICAgICAgfSB3aGlsZSAoIGNrX2Rlc19pc193ZWFrX2tleShrNF9zZXNzaW9u X2tleSkgKTsKKworICAgICAgICAgICAgY2toZXhkdW1wKCJhdXRoX3NlbmQgZGVzX25ld19yYW5k b21fa2V5KGs0X3Nlc3Npb25fa2V5KSIsCisgICAgICAgICAgICAgICAgICAgICBrNF9zZXNzaW9u X2tleSw4KTsKKworICAgICAgICAgICAgLyogRGVjcnlwdCB0aGUgc2Vzc2lvbiBrZXkgc28gdGhh dCB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgKi8KKyAgICAgICAgICAgIC8qIGhvc3QgYXMgYSBjaGFs bGVuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgTlQKKyAg ICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChrNF9zZXNzaW9uX2tleSwgazRfc2Vzc2lvbl9rZXks IGs0X3NjaGVkLCAwKTsKKyNlbHNlIC8qIE5UICovCisgICAgICAgICAgICBkZXNfZWNiX2VuY3J5 cHQoJms0X3Nlc3Npb25fa2V5LCAmazRfc2Vzc2lvbl9rZXksIGs0X3NjaGVkLCAwKTsKKyNlbmRp ZiAvKiBOVCAqLworICAgICAgICAgICAgY2toZXhkdW1wKAorICAgICAgICAgICAgICAgICJhdXRo X3NlbmQgZGVzX2VjYl9lbmNyeXB0KGs0X3Nlc3Npb25fa2V5LGs0X3Nlc3Npb25fa2V5LDApIiwK KyAgICAgICAgICAgICAgICBrNF9zZXNzaW9uX2tleSw4CisgICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICAvKiBQcmVwYXJlIHRoZSByZXN1bHQgb2YgdGhlIGNoYWxsZW5nZSAqLwor ICAgICAgICAgICAgLyogRGVjcnlwdCB0aGUgc2Vzc2lvbl9rZXksIGFkZCAxLCBhbmQgdGhlbiBl bmNyeXB0IGl0ICovCisgICAgICAgICAgICAvKiBUaGUgcmVzdWx0IHN0b3JlZCBpbiBrNF9jaGFs bGVuZ2Ugc2hvdWxkIG1hdGNoIHRoZSAgKi8KKyAgICAgICAgICAgIC8qIEtSQjRfUkVTUE9OU0Ug dmFsdWUgZnJvbSB0aGUgaG9zdC4gICAgICAgICAgICAgICAgICAqLworI2lmZGVmIE5UCisgICAg ICAgICAgICBkZXNfZWNiX2VuY3J5cHQoazRfc2Vzc2lvbl9rZXksIGs0X2NoYWxsZW5nZSwgazRf c2NoZWQsIDApOworI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdCgm azRfc2Vzc2lvbl9rZXksICZrNF9jaGFsbGVuZ2UsIGs0X3NjaGVkLCAwKTsKKyNlbmRpZiAvKiBO VCAqLworCisgICAgICAgICAgICBja2hleGR1bXAoImF1dGhfc2VuZCBkZXNfZWNiX2VuY3J5cHQo azRfc2Vzc2lvbl9rZXksazRfY2hhbGxlbmdlLDApIiwKKyAgICAgICAgICAgICAgICAgICAgIGs0 X2NoYWxsZW5nZSw4KTsKKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLworICAgICAgICAgICAgLyoK KyAgICAgICAgICAgICogSW5jcmVtZW50IHRoZSBjaGFsbGVuZ2UgYnkgMSwgYW5kIGVuY3J5cHQg aXQgZm9yCisgICAgICAgICAgICAqIGxhdGVyIGNvbXBhcmlzb24uCisgICAgICAgICAgICAqLwor ICAgICAgICAgICAgZm9yIChpID0gNzsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBy ZWdpc3RlciBpbnQgeDsKKyAgICAgICAgICAgICAgICB4ID0gKHVuc2lnbmVkIGludClrNF9jaGFs bGVuZ2VbaV0gKyAxOworICAgICAgICAgICAgICAgIGs0X2NoYWxsZW5nZVtpXSA9IHg7ICAgIC8q IGlnbm9yZSBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgIGlmICh4IDwgMjU2KSAgICAgICAg ICAgIC8qIGlmIG5vIG92ZXJmbG93LCBhbGwgZG9uZSAqLworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNraGV4ZHVtcCgiYXV0aF9zZW5kIGs0 X2NoYWxsZW5nZSsxIixrNF9jaGFsbGVuZ2UsOCk7CisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICAg ICAgICAgIGRhdGEuZGF0YSA9IGs0X2NoYWxsZW5nZTsKKyAgICAgICAgICAgIGRhdGEubGVuZ3Ro ID0gODsKKworICAgICAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0LmRhdGEgPSBrNF9jaGFsbGVu Z2U7CisgICAgICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQubGVuZ3RoID0gODsKKyAgICAgICAg ICAgIGVuY2RhdGEuZW5jdHlwZSA9IEVOQ1RZUEVfVU5LTk9XTjsKKworICAgICAgICAgICAgaWYg KGNvZGUgPSBrcmI1X2NfZW5jcnlwdChrNV9jb250ZXh0LCAmazRfa3Jia2V5LCAwLCAwLCAmZGF0 YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmNkYXRhKSkgewor ICAgICAgICAgICAgICAgIGNvbV9lcnIoImxpYnRlbG5ldCIsIGNvZGUsICJ3aGlsZSBlbmNyeXB0 aW5nIHJhbmRvbSBrZXkiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAg ICB9CisjZWxzZSAvKiBNSVRfQ1VSUkVOVCAqLworI2lmZGVmIE5UCisgICAgICAgICAgICBkZXNf ZWNiX2VuY3J5cHQoazRfY2hhbGxlbmdlLCBrNF9jaGFsbGVuZ2UsIGs0X3NjaGVkLCAxKTsKKyNl bHNlIC8qIE5UICovCisgICAgICAgICAgICBkZXNfZWNiX2VuY3J5cHQoJms0X2NoYWxsZW5nZSwg Jms0X2NoYWxsZW5nZSwgazRfc2NoZWQsIDEpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAg ICBja2hleGR1bXAoImF1dGhfc2VuZCBkZXNfZWNiX2VuY3J5cHQoazRfc2Vzc2lvbl9rZXksazRf Y2hhbGxlbmdlLDEpIiwKKyAgICAgICAgICAgICAgICAgICAgIGs0X2NoYWxsZW5nZSw4KTsKKyNl bmRpZiAvKiBNSVRfQ1VSUkVOVCAqLworICAgICAgICB9CisjZW5kaWYgIC8qIEVOQ1JZUFRJT04g Ki8KKyNlbmRpZiAvKiBSRU1PVkVfRk9SX0VYUE9SVCAqLworICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBLUkI0ICovCisjaWZkZWYgR1NTQVBJX0tSQjUKKyAgICBjYXNlIEFVVEhUWVBFX0dTU0FQ SV9LUkI1OgorICAgICAgICBmb3IgKCBpPTAgOyBpPGdzc19zZW5kX3Rvay5sZW5ndGggOyBpKysg KSB7CisgICAgICAgICAgICBpZiAoICgoY2hhciAqKWdzc19zZW5kX3Rvay52YWx1ZSlbaV0gPT0g SUFDICkKKyAgICAgICAgICAgICAgICBpYWNjbnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGlm ICggZ3NzX3NlbmRfdG9rLmxlbmd0aCArIGlhY2NudCArIDEwIDwgc2l6ZW9mKGJ1ZikgKQorICAg ICAgICAgICAgZ3NzX3NlbmRfdG9rLmxlbmd0aCA9IGNvcHlfZm9yX25ldCgmYnVmWzddLCBnc3Nf c2VuZF90b2sudmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdzc19zZW5kX3Rvay5sZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBn c3Nfc2VuZF90b2subGVuZ3RoID0gMDsKKyAgICAgICAgc3ByaW50ZigmYnVmW2dzc19zZW5kX3Rv ay5sZW5ndGgrN10sICIlYyVjIiwgSUFDLCBTRSk7ICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAg aWYgKGRlYmxvZyB8fCB0bl9kZWIgfHwgZGVic2VzKSB7CisgICAgICAgICAgICBpbnQgaTsKKyAg ICAgICAgICAgIGNrbWFreG1zZyh0bl9tc2csVE5fTVNHX0xFTiwKKyAgICAgICAgICAgICAgICAg ICAgICAiVEVMTkVUIFNFTlQgU0IgIixURUxPUFQoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSwiIElT ICIsCisgICAgICAgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShhdXRoZW50aWNhdGlvbl92 ZXJzaW9uKSwiICIsCisgICAgICAgICAgICAgICAgICAgICAgQVVUSE1PREVfTkFNRShtb2RlKSwi IEFVVEggIiwKKyAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwK KyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB0bl9oZXgoKGNoYXIgKil0bl9t c2csVE5fTVNHX0xFTiwmYnVmWzddLGdzc19zZW5kX3Rvay5sZW5ndGgpOworICAgICAgICAgICAg Y2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsKKyAgICAgICAgICAgIGRlYnVn KEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgaWYgKHRuX2RlYiB8fCBkZWJzZXMpIHRu X2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgUmVxdWVzdFRl bG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5kaWYKKyAgICAgICAgdHRvbCgo Q0hBUiAqKWJ1ZiwgZ3NzX3NlbmRfdG9rLmxlbmd0aCs5KTsKKyNpZmRlZiBPUzIKKyAgICAgICAg UmVsZWFzZVRlbG5ldE11dGV4KCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyog R1NTQVBJX0tSQjUgKi8KKyNpZmRlZiBLUkI1CisgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19W NToKKyAgICAgICAgZGVidWcoRjExMSwiYXV0aF9zZW5kIEtSQjUiLCJrNV9hdXRoLmxlbmd0aCIs azVfYXV0aC5sZW5ndGgpOworICAgICAgICBmb3IgKCBpPTAgOyBpPGs1X2F1dGgubGVuZ3RoIDsg aSsrICkgeworICAgICAgICAgICAgaWYgKCAoY2hhciAqKWs1X2F1dGguZGF0YVtpXSA9PSBJQUMg KQorICAgICAgICAgICAgICAgIGlhY2NudCsrOworICAgICAgICB9CisgICAgICAgIGlmICggazVf YXV0aC5sZW5ndGggKyBpYWNjbnQgKyAxMCA8IHNpemVvZihidWYpICkgeworCSAgICBrNV9hdXRo Lmxlbmd0aCA9IGNvcHlfZm9yX25ldCgmYnVmWzddLAorCQkJCQkgIChDSEFSICopazVfYXV0aC5k YXRhLAorCQkJCQkgIGs1X2F1dGgubGVuZ3RoKTsKKwl9IGVsc2UgeworICAgICAgICAgIGRlYnVn KEYxMDAsImF1dGhfc2VuZCgpIEtSQjUgYXV0aCBkYXRhIHRvbyBsYXJnZSBmb3IgYnVmZmVyIiwi IiwwKTsKKyAgICAgICAgICBrNV9hdXRoLmxlbmd0aCA9IDA7CisgICAgICAgIH0KKworICAgICAg ICBzcHJpbnRmKChjaGFyICopJmJ1ZltrNV9hdXRoLmxlbmd0aCs3XSwgIiVjJWMiLCBJQUMsIFNF KTsgLyogc2FmZSAqLworICAgICAgICBpZiAoZGVibG9nIHx8IHRuX2RlYiB8fCBkZWJzZXMpIHsK KyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgY2ttYWt4bXNnKHRuX21zZyxUTl9NU0df TEVOLAorICAgICAgICAgICAgICAgICAgICAgICJURUxORVQgU0VOVCBTQiAiLFRFTE9QVChURUxP UFRfQVVUSEVOVElDQVRJT04pLCIgSVMgIiwKKyAgICAgICAgICAgICAgICAgICAgICBBVVRIVFlQ RV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLCIgIiwKKyAgICAgICAgICAgICAgICAgICAg ICBBVVRITU9ERV9OQU1FKG1vZGUpLCIgQVVUSCAiLAorICAgICAgICAgICAgICAgICAgICAgIE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIHRuX2hleCgoQ0hBUiAqKXRuX21zZyxUTl9NU0dfTEVOLCZidWZbN10sazVfYXV0aC5sZW5n dGgpOworICAgICAgICAgICAgY2tzdHJuY2F0KHRuX21zZywiSUFDIFNFIixUTl9NU0dfTEVOKTsK KyAgICAgICAgICAgIGRlYnVnKEYxMDAsdG5fbXNnLCIiLDApOworICAgICAgICAgICAgaWYgKHRu X2RlYiB8fCBkZWJzZXMpIHRuX2RlYnVnKHRuX21zZyk7CisgICAgICAgIH0KKyNpZmRlZiBPUzIK KyAgICAgICAgUmVxdWVzdFRlbG5ldE11dGV4KCBTRU1fSU5ERUZJTklURV9XQUlUICk7CisjZW5k aWYKKyAgICAgICAgdHRvbCgoQ0hBUiAqKWJ1ZiwgazVfYXV0aC5sZW5ndGgrOSk7CisjaWZkZWYg T1MyCisgICAgICAgIFJlbGVhc2VUZWxuZXRNdXRleCgpOworI2VuZGlmCisjaWZkZWYgSEVJTURB TAorICAgICAgICBrcmI1X2RhdGFfZnJlZSgmazVfYXV0aCk7CisjZWxzZSAvKiBIRUlNREFMICov CisgICAgICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQsJms1X2F1dGgpOwor ICAgICAgICBtZW1zZXQoJms1X2F1dGgsMCxzaXplb2Yoa3JiNV9kYXRhKSk7CisjZW5kaWYgLyog SEVJTURBTCAqLworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBLUkI1ICovCisgICAgfQorICAg IHJldHVybiBBVVRIX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogUGFyc2UgYXV0aGVu dGljYXRpb24gUkVQTFkgY29tbWFuZAorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgcGFyc2VkYXQg LSB0aGUgc3ViLWNvbW1hbmQgZGF0YS4KKyAqCisgKiAgICAgIGVuZF9zdWIgLSBpbmRleCBvZiB0 aGUgY2hhcmFjdGVyIGluIHRoZSAncGFyc2VkYXQnIGFycmF5IHdoaWNoCisgKiAgICAgICAgICAg ICAgaXMgdGhlIGxhc3QgYnl0ZSBpbiBhIHN1Yi1uZWdvdGlhdGlvbgorICoKKyAqIFJldHVybnM6 IEtlcmJlcm9zIGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQwor YXV0aF9yZXBseSh1bnNpZ25lZCBjaGFyICpwYXJzZWRhdCwgaW50IGVuZF9zdWIpCisjZWxzZQor YXV0aF9yZXBseShwYXJzZWRhdCxlbmRfc3ViKSB1bnNpZ25lZCBjaGFyICpwYXJzZWRhdDsgaW50 IGVuZF9zdWI7CisjZW5kaWYKK3sKKyAgICBpbnQgbiA9IEFVVEhfRkFJTFVSRTsKKworICAgIGlm ICggcGFyc2VkYXRbMl0gIT0gYXV0aGVudGljYXRpb25fdmVyc2lvbiApIHsKKyAgICAgICAgcHJp bnRmKCJBdXRoZW50aWNhdGlvbiB2ZXJzaW9uIG1pc21hdGNoICglcyBbJWRdICE9ICVzIFslZF0p XHJcbiIsCisgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShwYXJzZWRhdFsyXSkscGFyc2Vk YXRbMl0sCisgICAgICAgICAgICAgICAgQVVUSFRZUEVfTkFNRShhdXRoZW50aWNhdGlvbl92ZXJz aW9uKSxhdXRoZW50aWNhdGlvbl92ZXJzaW9uKTsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRI X1JFSkVDVCk7CisgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgIH0KKyAgICBpZiAo IHBhcnNlZGF0WzNdICE9IChhdXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndkKSApIHsKKyAgICAg ICAgcHJpbnRmKCJBdXRoZW50aWNhdGlvbiBtb2RlIG1pc21hdGNoICglcyAhPSAlcylcclxuIiwK KyAgICAgICAgICAgICAgICBBVVRITU9ERV9OQU1FKHBhcnNlZGF0WzNdKSwKKyAgICAgICAgICAg ICAgICBBVVRITU9ERV9OQU1FKGF1dGhfaG93fGF1dGhfY3J5cHR8YXV0aF9md2QpKTsKKyAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybihBVVRIX0ZBSUxV UkUpOworICAgIH0KKworI2lmZGVmIEtSQjQKKyAgICBpZiAoYXV0aGVudGljYXRpb25fdmVyc2lv biA9PSBBVVRIVFlQRV9LRVJCRVJPU19WNCkKKyAgICAgICAgbiA9IGs0X2F1dGhfcmVwbHkocGFy c2VkYXQsIGVuZF9zdWIpOworI2VuZGlmCisjaWZkZWYgS1JCNQorICAgIGlmIChhdXRoZW50aWNh dGlvbl92ZXJzaW9uID09IEFVVEhUWVBFX0tFUkJFUk9TX1Y1KQorICAgICAgICBuID0gazVfYXV0 aF9yZXBseShhdXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndkLCBwYXJzZWRhdCwgZW5kX3N1Yik7 CisjZW5kaWYKKyNpZmRlZiBDS19TUlAKKyAgICBpZiAoYXV0aGVudGljYXRpb25fdmVyc2lvbiA9 PSBBVVRIVFlQRV9TUlApIHsKKyNpZm5kZWYgUFJFX1NSUF8xXzdfMworICAgICAgICBuID0gbmV3 X3NycF9yZXBseShhdXRoX2hvd3xhdXRoX2NyeXB0fGF1dGhfZndkLCBwYXJzZWRhdCwgZW5kX3N1 Yik7CisjZWxzZSAvKiBQUkVfU1JQXzFfN18zICovCisgICAgICAgIG4gPSBzcnBfcmVwbHkoYXV0 aF9ob3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCwgcGFyc2VkYXQsIGVuZF9zdWIpOworI2VuZGlmIC8q IFBSRV9TUlBfMV83XzMgKi8KKyAgICB9CisjZW5kaWYgLyogU1JQICovCisjaWZkZWYgQ0tfU1NM CisgICAgaWYgKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVfU1NMKQorICAgICAg ICBuID0gc3NsX3JlcGx5KGF1dGhfaG93fGF1dGhfY3J5cHR8YXV0aF9md2QsIHBhcnNlZGF0LCBl bmRfc3ViKTsKKyNlbmRpZiAvKiBTU0wgKi8KKyNpZmRlZiBOVExNCisgICAgaWYgKGF1dGhlbnRp Y2F0aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVfTlRMTSkKKyAgICAgICAgbiA9IG50bG1fcmVwbHko YXV0aF9ob3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCwgcGFyc2VkYXQsIGVuZF9zdWIpOworI2VuZGlm IC8qIE5UTE0gKi8KKyAgICByZXR1cm4gbjsKK30KKworCisvKgorICogRnVuY3Rpb246IFBhcnNl IGF1dGhlbnRpY2F0aW9uIElTIGNvbW1hbmQKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIHBhcnNl ZGF0IC0gdGhlIHN1Yi1jb21tYW5kIGRhdGEuCisgKgorICogICAgICBlbmRfc3ViIC0gaW5kZXgg b2YgdGhlIGNoYXJhY3RlciBpbiB0aGUgJ3BhcnNlZGF0JyBhcnJheSB3aGljaAorICogICAgICAg ICAgICAgIGlzIHRoZSBsYXN0IGJ5dGUgaW4gYSBzdWItbmVnb3RpYXRpb24KKyAqCisgKiBSZXR1 cm5zOiBLZXJiZXJvcyBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5T SUMKK2F1dGhfaXModW5zaWduZWQgY2hhciAqcGFyc2VkYXQsIGludCBlbmRfc3ViKQorI2Vsc2UK K2F1dGhfaXMocGFyc2VkYXQsZW5kX3N1YikgdW5zaWduZWQgY2hhciAqcGFyc2VkYXQ7IGludCBl bmRfc3ViOworI2VuZGlmCit7CisgICAgaW50IG4gPSBBVVRIX0ZBSUxVUkU7CisKKyAgICBpZiAo IHBhcnNlZGF0WzJdID09IEFVVEhUWVBFX05VTEwgKSB7CisgICAgICAgIGF1dGhfZmluaXNoZWQo QVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICB9CisKKyAg ICAvKgorICAgICAqICBJZiBDTElFTlRfQ0hPT1NFX09OQ0UgaXMgc2VsZWN0ZWQgdGhlIHNlcnZl ciB3aWxsIG5vdCBhbGxvdyB0aGUKKyAgICAgKiAgY2xpZW50IHRvIHN3aXRjaCB0byBhbiBhbHRl cm5hdGUgYXV0aGVudGljYXRpb24gbWV0aG9kIGlmIHRoZSBvbmUKKyAgICAgKiAgaXQgb3JpZ2lu YWxseSBzZWxlY3RlZCBmYWlscy4gIChpZSwgaWYgdGhlIGhvc3QncyBTUlAgcGFyYW1ldGVycwor ICAgICAqICBhcmUgaW52YWxpZC4pICBIb3dldmVyLCBJIHRoaW5rIHRoaXMgaXMgYSBiaXQgb2Yg YSBzZWN1cml0eSByaXNrCisgICAgICogIHNpbmNlIGFsbG93aW5nIHRoYXQgZnVuY3Rpb25hbGl0 eSBtZWFucyB0aGF0IGl0IGlzIGltcG9zc2libGUgdG8KKyAgICAgKiAgZGV0ZWN0IGlmIGFuIGF0 dGFjayBpcyBiZWluZyBjYXJyaWVkIG91dCBvbgorICAgICAqLworI2RlZmluZSBDTElFTlRfQ0hP T1NFX09OQ0UKKyNpZmRlZiBDTElFTlRfQ0hPT1NFX09OQ0UKKyAgICBpZiAoIGF1dGhlbnRpY2F0 aW9uX3ZlcnNpb24gPT0gQVVUSFRZUEVfQVVUTyApCisjZW5kaWYgLyogQ0xJRU5UX0NIT09TRV9P TkNFICovCisgICAgeworICAgICAgICAvKiB0aGlzIGJsb2NrIG9mIGNvZGUgbmVlZHMgdG8gY2hl Y2sgdGhlIGluaXRpYWwgcGFyYW1ldGVycyAqLworICAgICAgICAvKiB0byBlbnN1cmUgdGhhdCB0 aG9zZSByZXR1cm5lZCBtYXRjaCBvbmUgb2YgdGhlIHNldHMgdGhhdCAqLworICAgICAgICAvKiB3 ZXJlIHNlbnQgdG8gdGhlIGNsaWVudCBpbiB0aGUgZmlyc3QgcGxhY2UuICAgICAgICAgICAgICAq LworCisgICAgICAgIGludCBpPTA7CisgICAgICAgIGZvciAoIGk9NDsgc3RyX3JlcXVlc3RbaV0g IT0gSUFDIDsgaSs9MikgeworICAgICAgICAgICAgaWYgKHN0cl9yZXF1ZXN0W2ldID09IHBhcnNl ZGF0WzJdICYmCisgICAgICAgICAgICAgICAgIHN0cl9yZXF1ZXN0W2krMV0gPT0gcGFyc2VkYXRb M10pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHN0 cl9yZXF1ZXN0W2ldID09IElBQyApIHsKKyAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBhdXRo ZW50aWNhdGlvbiB0eXBlIHBhaXIgKCVzLCVzKVxyXG4iLAorICAgICAgICAgICAgICAgICAgICBB VVRIVFlQRV9OQU1FKHBhcnNlZGF0WzJdKSwKKyAgICAgICAgICAgICAgICAgICAgQVVUSE1PREVf TkFNRShwYXJzZWRhdFszXSkpOworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAg ICAgIGlmIChhdXRoZW50aWNhdGlvbl92ZXJzaW9uICE9IHBhcnNlZGF0WzJdKSB7CisgICAgICAg ICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gcGFyc2VkYXRbMl07CisgICAgICAgICAgICBh dXRoX2hvdyA9IChwYXJzZWRhdFszXSAmIEFVVEhfSE9XX01BU0spOworICAgICAgICAgICAgYXV0 aF9jcnlwdCA9IChwYXJzZWRhdFszXSAmIEFVVEhfRU5DUllQVF9NQVNLKTsKKyAgICAgICAgICAg IGF1dGhfZndkID0gKHBhcnNlZGF0WzNdICYgSU5JX0NSRURfRldEX01BU0spOworICAgICAgICAg ICAgZGVidWcoRjExMSwiYXV0aF9pcyIsImF1dGhlbnRpY2F0aW9uX3ZlcnNpb24iLAorICAgICAg ICAgICAgICAgICAgYXV0aGVudGljYXRpb25fdmVyc2lvbik7CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJhdXRoX2lzIiwiYXV0aF9ob3ciLGF1dGhfaG93KTsKKyAgICAgICAgICAgIGRlYnVnKEYx MTEsImF1dGhfaXMiLCJhdXRoX2NyeXB0IixhdXRoX2NyeXB0KTsKKyAgICAgICAgICAgIGRlYnVn KEYxMTEsImF1dGhfaXMiLCJhdXRoX2Z3ZCIsYXV0aF9md2QpOworICAgICAgICB9CisgICAgfQor CisjaWZkZWYgQ0xJRU5UX0NIT09TRV9PTkNFCisgICAgaWYgKCBwYXJzZWRhdFsyXSAhPSBhdXRo ZW50aWNhdGlvbl92ZXJzaW9uICkgeworICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0aW9uIHZl cnNpb24gbWlzbWF0Y2ggKCVzIFslZF0gIT0gJXMgWyVkXSlcclxuIiwKKyAgICAgICAgICAgICAg ICBBVVRIVFlQRV9OQU1FKHBhcnNlZGF0WzJdKSxwYXJzZWRhdFsyXSwKKyAgICAgICAgICAgICAg ICBBVVRIVFlQRV9OQU1FKGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24pLGF1dGhlbnRpY2F0aW9uX3Zl cnNpb24pOworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgcmV0 dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgfQorICAgIGlmICggcGFyc2VkYXRbM10gIT0gKGF1dGhf aG93fGF1dGhfY3J5cHR8YXV0aF9md2QpICkgeworICAgICAgICBwcmludGYoIkF1dGhlbnRpY2F0 aW9uIG1vZGUgbWlzbWF0Y2ggKCVzICE9ICVzKVxyXG4iLAorICAgICAgICAgICAgICAgIEFVVEhN T0RFX05BTUUocGFyc2VkYXRbM10pLAorICAgICAgICAgICAgICAgIEFVVEhNT0RFX05BTUUoYXV0 aF9ob3d8YXV0aF9jcnlwdHxhdXRoX2Z3ZCkpOworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhf UkVKRUNUKTsKKyAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgfQorI2VuZGlmIC8q IENMSUVOVF9DSE9PU0VfT05DRSAqLworCisgICAgc3dpdGNoIChhdXRoZW50aWNhdGlvbl92ZXJz aW9uKSB7CisjaWZkZWYgS1JCNAorICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6CisgICAg ICAgIG4gPSBrNF9hdXRoX2lzKHBhcnNlZGF0LCBlbmRfc3ViKTsKKyAgICAgICAgYnJlYWs7Cisj ZW5kaWYKKyNpZmRlZiBLUkI1CisgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNToKKyAgICAg ICAgbiA9IGs1X2F1dGhfaXMocGFyc2VkYXRbM10scGFyc2VkYXQsIGVuZF9zdWIpOworICAgICAg ICBicmVhazsKKyNlbmRpZgorI2lmZGVmIENLX1NSUAorICAgIGNhc2UgQVVUSFRZUEVfU1JQOgor I2lmbmRlZiBQUkVfU1JQXzFfN18zCisgICAgICAgIG4gPSBuZXdfc3JwX2lzKHBhcnNlZGF0WzNd LCBwYXJzZWRhdCwgZW5kX3N1Yik7CisjZWxzZSAvKiBQUkVfU1JQXzFfN18zICovCisgICAgICAg IG4gPSBzcnBfaXMocGFyc2VkYXRbM10sIHBhcnNlZGF0LCBlbmRfc3ViKTsKKyNlbmRpZiAvKiBQ UkVfU1JQXzFfN18zICovCisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFNSUCAqLworI2lmZGVm IENLX1NTTAorICAgIGNhc2UgQVVUSFRZUEVfU1NMOgorICAgICAgICBURUxPUFRfTUVfTU9ERShU RUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgVEVMT1BUX1VfTU9ERShURUxP UFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgbiA9IHNzbF9pcyhwYXJzZWRhdCwg ZW5kX3N1Yik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFNTTCAqLworI2lmZGVmIE5UTE0K KyAgICBjYXNlIEFVVEhUWVBFX05UTE06CisgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNS WVBUSU9OKSA9IFROX05HX1JGOworICAgICAgICBuID0gbnRsbV9pcyhwYXJzZWRhdCwgZW5kX3N1 Yik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5UTE0gKi8KKyAgICBjYXNlIEFVVEhUWVBF X05VTEw6CisgICAgZGVmYXVsdDoKKyAgICAgICAgbiA9IEFVVEhfRkFJTFVSRTsKKyAgICB9Cisg ICAgZGVidWcoRjExMSwiYXV0aF9pcyIsIm4iLG4pOworICAgIHJldHVybiBuOworfQorCisvKgor ICogRnVuY3Rpb246IFBhcnNlIGF1dGhlbnRpY2F0aW9uIE5BTUUgY29tbWFuZAorICoKKyAqIFBh cmFtZXRlcnM6CisgKiAgcGFyc2VkYXQgLSB0aGUgc3ViLWNvbW1hbmQgZGF0YS4KKyAqCisgKiAg ICAgIGVuZF9zdWIgLSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSAncGFyc2VkYXQnIGFy cmF5IHdoaWNoCisgKiAgICAgICAgICAgICAgaXMgdGhlIGxhc3QgYnl0ZSBpbiBhIHN1Yi1uZWdv dGlhdGlvbgorICoKKyAqIFJldHVybnM6IEtlcmJlcm9zIGVycm9yIGNvZGUuCisgKi8KK3N0YXRp YyBpbnQKKyNpZmRlZiBDS19BTlNJQworYXV0aF9uYW1lKHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0 LCBpbnQgZW5kX3N1YikKKyNlbHNlCithdXRoX25hbWUocGFyc2VkYXQsZW5kX3N1YikgdW5zaWdu ZWQgY2hhciAqcGFyc2VkYXQ7IGludCBlbmRfc3ViOworI2VuZGlmCit7CisgICAgaW50IGxlbiA9 IChlbmRfc3ViLTIpID4gNjMgPyA2MyA6IChlbmRfc3ViLTIpOworICAgIGlmICggbGVuID4gMCAm JiAobGVuICsgMSkgPCBzaXplb2Yoc3pVc2VyTmFtZVJlcXVlc3RlZCkpIHsKKyAgICAgICAgbWVt Y3B5KHN6VXNlck5hbWVSZXF1ZXN0ZWQsJnBhcnNlZGF0WzJdLGxlbik7ICAgICAgICAgICAvKiBz YWZlICovCisgICAgICAgIHN6VXNlck5hbWVSZXF1ZXN0ZWRbbGVuXSA9ICdcMCc7CisgICAgfSBl bHNlCisgICAgICBzelVzZXJOYW1lUmVxdWVzdGVkWzBdID0gJ1wwJzsKKyAgICBkZWJ1ZyhGMTEx LCJhdXRoX25hbWUgc3pVc2VyTmFtZVJlcXVlc3RlZCIsc3pVc2VyTmFtZVJlcXVlc3RlZCxsZW4p OworICAgIHJldHVybihBVVRIX1NVQ0NFU1MpOworfQorCisvKgorICogRnVuY3Rpb246IFBhcnNl IHRoZSBhdGhvcml6YXRpb24gc3ViLW9wdGlvbnMgYW5kIHJlcGx5LgorICoKKyAqIFBhcmFtZXRl cnM6CisgKiAgICAgIHBhcnNlZGF0IC0gc3ViLW9wdGlvbiBzdHJpbmcgdG8gcGFyc2UuCisgKgor ICogICAgICBlbmRfc3ViIC0gbGFzdCBjaGFyY3RlciBwb3NpdGlvbiBpbiBwYXJzZWRhdC4KKyAq LworaW50CithdXRoX3BhcnNlKHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0LCBpbnQgZW5kX3N1YikK K3sKKyAgICBpbnQgcmMgPSBBVVRIX0ZBSUxVUkU7CisgICAgc3dpdGNoIChwYXJzZWRhdFsxXSkg eworICAgIGNhc2UgVEVMUVVBTF9TRU5EOgorICAgICAgICByYyA9IGF1dGhfc2VuZChwYXJzZWRh dCwgZW5kX3N1Yik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVEVMUVVBTF9SRVBMWToKKyAg ICAgICAgcmM9IGF1dGhfcmVwbHkocGFyc2VkYXQsIGVuZF9zdWIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIFRFTFFVQUxfSVM6CisgICAgICAgIHJjID0gYXV0aF9pcyhwYXJzZWRhdCwgZW5k X3N1Yik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVEVMUVVBTF9OQU1FOgorICAgICAgICBy YyA9IGF1dGhfbmFtZShwYXJzZWRhdCwgZW5kX3N1Yik7CisgICAgICAgIGJyZWFrOworICAgIH0K KyAgICBkZWJ1ZyhGMTExLCJhdXRoX3BhcnNlIiwicmMiLHJjKTsKKyAgICByZXR1cm4ocmMpOwor fQorCisKKy8qCisgKiBGdW5jdGlvbjogSW5pdGlhbGl6YXRpb24gcm91dGluZSBjYWxsZWQga3N0 cmVhbSBlbmNyeXB0aW9uIHN5c3RlbS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIGRhdGEgLSB1 c2VyIGRhdGEuCisgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCithdXRoX2luaXQoa3N0cmVhbSBr cykKKyNlbHNlCithdXRoX2luaXQoa3MpIGtzdHJlYW1fcHRyIGtzOworI2VuZGlmCit7CisjaWZk ZWYgRk9SV0FSRAorICAgIGZvcndhcmRlZF90aWNrZXRzID0gMDsgIC8qIHdlcmUgdGlja2V0cyBm b3J3YXJkZWQ/ICovCisjZW5kaWYgLyogRk9SV0FSRCAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04K KyAgICBlbmNyeXB0X2luaXQoa3MsY3hfdHlwZSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30K KworCisvKgorICogRnVuY3Rpb246IERlc3Ryb3kgcm91dGluZSBjYWxsZWQga3N0cmVhbSBlbmNy eXB0aW9uIHN5c3RlbS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIGRhdGEgLSB1c2VyIGRhdGEu CisgKi8KK1ZPSUQKKyNpZmRlZiBDS19BTlNJQworYXV0aF9kZXN0cm95KHZvaWQpCisjZWxzZQor YXV0aF9kZXN0cm95KCkKKyNlbmRpZgoreworfQorCisKKy8qCisgKiBGdW5jdGlvbjogQ2FsbGJh Y2sgdG8gZW5jcnlwdCBhIGJsb2NrIG9mIGNoYXJhY3RlcnMKKyAqCisgKiBQYXJhbWV0ZXJzOgor ICogIG91dCAtIHJldHVybiBhcyBwb2ludGVyIHRvIGNvbnZlcnRlZCBidWZmZXIuCisgKgorICog IGluIC0gdGhlIGJ1ZmZlciB0byBjb252ZXJ0CisgKgorICogUmV0dXJuczogbnVtYmVyIG9mIGNo YXJhY3RlcnMgY29udmVydGVkLgorICovCitpbnQKKyNpZmRlZiBDS19BTlNJQworYXV0aF9lbmNy eXB0KHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKm91dCwKKyAgICAgICAgICAgICBzdHJ1Y3Qg a3N0cmVhbV9kYXRhX2Jsb2NrICppbikKKyNlbHNlCithdXRoX2VuY3J5cHQob3V0LGluKQorICAg IHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKm91dDsgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9j ayAqaW47CisjZW5kaWYKK3sKKyAgICBvdXQtPnB0ciA9IGluLT5wdHI7CisKKyAgICBvdXQtPmxl bmd0aCA9IGluLT5sZW5ndGg7CisKKyAgICByZXR1cm4ob3V0LT5sZW5ndGgpOworfQorCisKKy8q CisgKiBGdW5jdGlvbjogQ2FsbGJhY2sgdG8gZGVjcnlwdCBhIGJsb2NrIG9mIGNoYXJhY3RlcnMK KyAqCisgKiBQYXJhbWV0ZXJzOgorICogIG91dCAtIHJldHVybiBhcyBwb2ludGVyIHRvIGNvbnZl cnRlZCBidWZmZXIuCisgKgorICogIGluIC0gdGhlIGJ1ZmZlciB0byBjb252ZXJ0CisgKgorICog UmV0dXJuczogbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29udmVydGVkLgorICovCitpbnQKKyNpZmRl ZiBDS19BTlNJQworYXV0aF9kZWNyeXB0KHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKm91dCwK KyAgICAgICAgICAgICBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICppbikKKyNlbHNlCithdXRo X2RlY3J5cHQob3V0LGluKQorICAgIHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKm91dDsgc3Ry dWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqaW47CisjZW5kaWYKK3sKKyAgICBvdXQtPnB0ciA9IGlu LT5wdHI7CisKKyAgICBvdXQtPmxlbmd0aCA9IGluLT5sZW5ndGg7CisKKyAgICByZXR1cm4ob3V0 LT5sZW5ndGgpOworfQorCisjaWZkZWYgS1JCNAorI2lmZGVmIE5UCit2b2lkCitja19rcmI0X2Rl YnVnKGludCB4KQoreworICAgIHNldF9rcmJfZGVidWcoeCk7CisgICAgc2V0X2tyYl9hcF9yZXFf ZGVidWcoeCk7Cit9CisjZW5kaWYgLyogTlQgKi8KK2ludAorY2tfa3JiNF9hdXRvZ2V0X1RHVChj aGFyICogcmVhbG0pCit7CisgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7Cisg ICAgZXh0ZXJuIHN0cnVjdCBrcmI0X2luaXRfZGF0YSBrcmI0X2luaXQ7CisgICAgY2hhciBwYXNz d2RbUFdEX1NaXTsKKyAgICBjaGFyIHByb21wdFsyNTZdOworICAgIGNoYXIgKiBzYXZlcmVhbG09 TlVMTDsKKyAgICBpbnQgIHJjID0gLTE7CisgICAgZXh0ZXJuIGNoYXIgKiBrNHBycHJvbXB0Owor ICAgIGV4dGVybiBjaGFyICogazRwd3Byb21wdDsKKworICAgIGluaV9rZXJiKCk7ICAgICAgICAg LyogUGxhY2UgZGVmYXVsdHMgaW4gYWJvdmUgc3RydWN0cyAqLworICAgIHBhc3N3ZFswXSA9ICdc MCc7CisKKyAgICBpZiAoIGtyYjRfaW5pdC5wcmluY2lwYWwgPT0gTlVMTCB8fAorICAgICAgICAg a3JiNF9pbml0LnByaW5jaXBhbFswXSA9PSAnXDAnKSB7CisgICAgICAgIGludCBvayA9IHVxX3R4 dChOVUxMLCAKKyAgICAgICAgICAgICAgICAgazRwcnByb21wdCAmJiBrNHBycHJvbXB0WzBdID8K KyAgICAgICAgICAgICAgICAgazRwcnByb21wdCA6CisgICAgICAgICAgICAgICAgICJLZXJiZXJv cyA0IFByaW5jaXBhbDogIiwKKyAgICAgICAgICAgICAgICAgMiwgTlVMTCwgcGFzc3dkLFBXRF9T Wi0xLCBOVUxMLCBERUZBVUxUX1VRX1RJTUVPVVQpOworICAgICAgICBpZiAoIG9rICYmIHBhc3N3 ZFswXSApCisgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2luaXQucHJpbmNpcGFsLHBhc3N3ZCk7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICAvKiBT YXZlIHJlYWxtIGluIGluaXQgc3RydWN0dXJlIHNvIGl0IGNhbiBiZSByZXN0b3JlZCAqLworICAg IGlmICggcmVhbG0gKSB7CisgICAgICAgIHNhdmVyZWFsbSA9IGtyYjRfaW5pdC5yZWFsbTsKKyAg ICAgICAga3JiNF9pbml0LnJlYWxtID0gcmVhbG07CisgICAgfQorCisgICAgaWYgKCBwYXNzd2Rb MF0gfHwgIShwd2J1ZlswXSAmJiBwd2ZsZykgKSB7CisgICAgICAgIGludCBvazsKKyAgICAgICAg aWYgKCBrNHB3cHJvbXB0ICYmIGs0cHdwcm9tcHRbMF0gJiYKKyAgICAgICAgICAgICAoc3RybGVu KGs0cHdwcm9tcHQpICsgc3RybGVuKGtyYjRfaW5pdC5wcmluY2lwYWwpICsKKyAgICAgICAgICAg ICAgIHN0cmxlbihrcmI0X2luaXQucmVhbG0pIC0gNCkgPCBzaXplb2YocHJvbXB0KSkgeworICAg ICAgICAgICAgc3ByaW50Zihwcm9tcHQsazRwd3Byb21wdCxrcmI0X2luaXQucHJpbmNpcGFsLGty YjRfaW5pdC5yZWFsbSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2ttYWt4bXNnKHBy b21wdCxzaXplb2YocHJvbXB0KSwKKyAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyA0IFBhc3N3 b3JkIGZvciAiLGtyYjRfaW5pdC5wcmluY2lwYWwsIkAiLAorICAgICAgICAgICAgICAgICAga3Ji NF9pbml0LnJlYWxtLCI6ICIsCisgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgb2sgPSB1cV90eHQoTlVMTCxwcm9tcHQsMixOVUxM LHBhc3N3ZCxQV0RfU1otMSxOVUxMLAorCQkgICAgREVGQVVMVF9VUV9USU1FT1VUKTsKKyAgICAg ICAgaWYgKCAhb2sgKQorICAgICAgICAgICAgcGFzc3dkWzBdID0gJ1wwJzsKKyAgICB9IGVsc2Ug eworICAgICAgICBja3N0cm5jcHkocGFzc3dkLHB3YnVmLHNpemVvZihwYXNzd2QpKTsKKyNpZmRl ZiBPUzIKKyAgICAgICAgaWYgKCBwd2NyeXB0ICkKKyAgICAgICAgICAgIGNrX2VuY3J5cHQoKGNo YXIgKilwYXNzd2QpOworI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKworICAgIGlmICggcGFzc3dk WzBdICkgeworICAgICAgICBtYWtlc3RyKCZrcmI0X2luaXQucGFzc3dvcmQscGFzc3dkKTsKKyAg ICAgICAgcmMgPSBja19rcmI0X2luaXRUR1QoJmtyYl9vcCwgJmtyYjRfaW5pdCk7CisgICAgICAg IGZyZWUoa3JiNF9pbml0LnBhc3N3b3JkKTsKKyAgICAgICAga3JiNF9pbml0LnBhc3N3b3JkID0g TlVMTDsKKyAgICB9CisKKyAgICBrcmI0X2luaXQucGFzc3dvcmQgPSBOVUxMOworICAgIG1lbXNl dChwYXNzd2QsMCxQV0RfU1opOworCisgICAgLyogcmVzdG9yZSByZWFsbSB0byBpbml0IHN0cnVj dHVyZSBpZiBuZWVkZWQgKi8KKyAgICBpZiAoIHNhdmVyZWFsbSApCisgICAgICAgIGtyYjRfaW5p dC5yZWFsbSA9IHNhdmVyZWFsbTsKKyAgICByZXR1cm4ocmMgPT0gMCk7Cit9CisKK2NoYXIgKgor Y2tfa3JiNF9yZWFsbW9maG9zdChjaGFyICpob3N0KQoreworICAgIHJldHVybiAoY2hhciAqKWty Yl9yZWFsbW9maG9zdChob3N0KTsKK30KKworLyoKKyAqCisgKiBLNF9hdXRoX3NlbmQgLSBnZXRz IGF1dGhlbnRpY2F0aW9uIGJpdHMgd2UgbmVlZCB0byBzZW5kIHRvIEtEQy4KKyAqCisgKiBSZXN1 bHQgaXMgbGVmdCBpbiBhdXRoCisgKgorICogUmV0dXJuczogMCBvbiBmYWlsdXJlLCAxIG9uIHN1 Y2Nlc3MKKyAqLworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitrNF9hdXRoX3NlbmQodm9p ZCkKKyNlbHNlCitrNF9hdXRoX3NlbmQoKQorI2VuZGlmCit7CisgICAgaW50IHI9MDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gdmFsdWUgKi8KKyAgICBjaGFy IGluc3RhbmNlW0lOU1RfU1orMV09IiI7CisgICAgY2hhciAqcmVhbG09TlVMTDsKKyAgICBjaGFy IHRndFs0KlJFQUxNX1NaKzFdOworCisgICAgbWVtc2V0KGluc3RhbmNlLCAwLCBzaXplb2YoaW5z dGFuY2UpKTsKKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiB3ZSBvbmx5IG5lZWQgdG8gY2FsbCBr cmJfZ2V0X3Bob3N0IGlmIHRoZSBob3N0bmFtZSAqLworICAgIC8qIGlzIG5vdCBmdWxseSBxdWFs aWZpZWQuICBCdXQgd2UgaGF2ZSBhbHJlYWR5IGRvbmUgICovCisgICAgLyogdGhpcyBpbiBuZXRv cGVuKCkgY2FsbC4gIFRoaXMgd2lsbCBzYXZlIGEgcm91bmQgb2YgKi8KKyAgICAvKiBETlMgcXVl cmllcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGRlYnVn KEYxMTAsIms0X2F1dGhfc2VuZCIsImtyYl9nZXRfcGhvc3QiLDApOworICAgIGlmIChyZWFsbSA9 IChjaGFyICopa3JiX2dldF9waG9zdChzekhvc3ROYW1lKSkgeworICAgICAgICBja3N0cm5jcHko aW5zdGFuY2UsIHJlYWxtLCBJTlNUX1NaKTsKKyAgICB9CisjZWxzZSAvKiBDT01NRU5UICovCisg ICAgeworICAgICAgICBjaGFyICpwOworICAgICAgICBja3N0cm5jcHkoaW5zdGFuY2UsIHN6SG9z dE5hbWUsIElOU1RfU1opOworICAgICAgICBmb3IgKCBwPWluc3RhbmNlOyAqcCAmJiAqcCAhPSAn LicgOyBwKysgKTsKKyAgICAgICAgKnAgPSAnXDAnOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKyAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX3NlbmQiLCJrcmJfZ2V0X3JlYWxtb2Zob3N0 IiwwKTsKKyAgICByZWFsbSA9IChjaGFyICopa3JiX3JlYWxtb2Zob3N0KHN6SG9zdE5hbWUpOwor CisgICAgaWYgKCFyZWFsbSkgeworICAgICAgICBzdHJjcHkoc3RyVG1wLCAiQ2FuJ3QgZmluZCBy ZWFsbSBmb3IgaG9zdCBcIiIpOworICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCBzekhvc3ROYW1l LEFVVEhUTVBCTCk7CisgICAgICAgIGNrc3RybmNhdChzdHJUbXAsICJcIiIsQVVUSFRNUEJMKTsK KyAgICAgICAgcHJpbnRmKCI/S2VyYmVyb3MgNCBlcnJvcjogJXNcclxuIixzdHJUbXApOworICAg ICAgICBrcmI0X2Vycm5vID0gcjsKKyAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csc3RyVG1w KTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIGNrbWFrbXNnKHRndCxzaXplb2Yo dGd0KSwia3JidGd0LiIscmVhbG0sIkAiLHJlYWxtKTsKKyAgICByID0gY2tfa3JiNF90a3RfaXN2 YWxpZCh0Z3QpOworCisgICAgaWYgKCByIDw9IDAgJiYga3JiNF9hdXRvZ2V0ICkKKyAgICAgICAg Y2tfa3JiNF9hdXRvZ2V0X1RHVChyZWFsbSk7CisKKyAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX3Nl bmQiLCJrcmJfbWtfcmVxIiwwKTsKKyAgICByID0ga3JiX21rX3JlcSgmazRfYXV0aCwga3JiNF9k X3NydiA/IGtyYjRfZF9zcnYgOiBLUkI0X1NFUlZJQ0VfTkFNRSwKKyAgICAgICAgICAgICAgICAg ICAgaW5zdGFuY2UsIHJlYWxtLCAwKTsKKworICAgIGlmIChyID09IDApIHsKKyAgICAgICAgZGVi dWcoRjExMCwiazRfYXV0aF9zZW5kIiwia3JiX2dldF9jcmVkIiwwKTsKKyAgICAgICAgciA9IGty Yl9nZXRfY3JlZChrcmI0X2Rfc3J2ID8ga3JiNF9kX3NydiA6IEtSQjRfU0VSVklDRV9OQU1FLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgcmVhbG0sICZjcmVkKTsKKyAgICAg ICAgaWYgKHIpCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNF9hdXRoX3NlbmQiLCJrcmJfZ2V0 X2NyZWQoKSBmYWlsZWQiLHIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGRlYnVnKEYxMTEs Ims0X2F1dGhfc2VuZCIsImtyYl9ta19yZXEoKSBmYWlsZWQiLHIpOworCisgICAgaWYgKHIpIHsK KyAgICAgICAgc3RyY3B5KHN0clRtcCwgIkNhbid0IGdldCBcIiIpOworICAgICAgICBja3N0cm5j YXQoc3RyVG1wLAorICAgICAgICAgICAgICAgICAga3JiNF9kX3NydiA/IGtyYjRfZF9zcnYgOiBL UkI0X1NFUlZJQ0VfTkFNRSxBVVRIVE1QQkwpOworICAgICAgICBpZiAoaW5zdGFuY2VbMF0gIT0g MCkgeworICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgIi4iLEFVVEhUTVBCTCk7CisgICAg ICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCBpbnN0YW5jZSxBVVRIVE1QQkwpOworICAgICAgICB9 CisgICAgICAgIGNrc3RybmNhdChzdHJUbXAsICJAIixBVVRIVE1QQkwpOworICAgICAgICBja3N0 cm5jYXQoc3RyVG1wLCByZWFsbSxBVVRIVE1QQkwpOworICAgICAgICBja3N0cm5jYXQoc3RyVG1w LCAiXCIgdGlja2V0XHJcbiAgIixBVVRIVE1QQkwpOworICAgICAgICBja3N0cm5jYXQoc3RyVG1w LCAoY2hhciAqKWtyYl9nZXRfZXJyX3RleHRfZW50cnkociksQVVUSFRNUEJMKTsKKyAgICAgICAg ZGVidWcoRjExMSwiazRfYXV0aF9zZW5kIiwoY2hhciAqKWtyYl9nZXRfZXJyX3RleHRfZW50cnko cikscik7CisgICAgICAgIHByaW50ZigiP0tlcmJlcm9zIDQgZXJyb3I6ICVzXHJcbiIsc3RyVG1w KTsKKyAgICAgICAga3JiNF9lcnJubyA9IHI7CisgICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNn LGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa3JiNF9lcnJubykpOworICAgICAgICByZXR1cm4oMCk7 CisgICAgfQorCisjaWZkZWYgT1MyCisgICAgaWYgKCAhc3pVc2VyTmFtZVswXSB8fCAhc3RyaWNt cChzelVzZXJOYW1lLGNyZWQucG5hbWUpICkgeworICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFt ZSwgY3JlZC5wbmFtZSwgVUlEQlVGTEVOKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAg a3JiNF9lcnJubyA9IHI7CisgICAgbWFrZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4 dF9lbnRyeShrcmI0X2Vycm5vKSk7CisgICAgZGVidWcoRjExMCwiazRfYXV0aF9zZW5kIixrcmI0 X2Vycm1zZywwKTsKKyAgICByZXR1cm4oMSk7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogSzQgcGFy c2UgYXV0aGVudGljYXRpb24gcmVwbHkgY29tbWFuZAorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAg cGFyc2VkYXQgLSB0aGUgc3ViLWNvbW1hbmQgZGF0YS4KKyAqCisgKiAgZW5kX3N1YiAtIGluZGV4 IG9mIHRoZSBjaGFyYWN0ZXIgaW4gdGhlICdwYXJzZWRhdCcgYXJyYXkgd2hpY2gKKyAqICAgICAg ICAgICAgICBpcyB0aGUgbGFzdCBieXRlIGluIGEgc3ViLW5lZ290aWF0aW9uCisgKgorICogUmV0 dXJuczogS2VyYmVyb3MgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludAorI2lmZGVmIENLX0FO U0lDCitrNF9hdXRoX3JlcGx5KHVuc2lnbmVkIGNoYXIgKnBhcnNlZGF0LCBpbnQgZW5kX3N1YikK KyNlbHNlCitrNF9hdXRoX3JlcGx5KHBhcnNlZGF0LGVuZF9zdWIpIHVuc2lnbmVkIGNoYXIgKnBh cnNlZGF0OyBpbnQgZW5kX3N1YjsKKyNlbmRpZgoreworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAg ICBTZXNzaW9uX0tleSBza2V5OworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAga3JiNV9kYXRhIGtk YXRhOworICAgIGtyYjVfZW5jX2RhdGEgZW5jZGF0YTsKKyAgICBrcmI1X2Vycm9yX2NvZGUgY29k ZTsKKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLworI2VuZGlmCisgICAgdGltZV90IHQ7CisgICAg aW50IHg7CisgICAgaW50IGk7CisKKyAgICBpZiAoZW5kX3N1YiA8IDQgfHwgcGFyc2VkYXRbMl0g IT0gQVVUSFRZUEVfS0VSQkVST1NfVjQpIHsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JF SkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgfQorCisgICAgaWYgKHBh cnNlZGF0WzRdID09IEtSQl9SRUpFQ1QpIHsKKyAgICAgICAgc3RyVG1wWzBdID0gMDsKKworICAg ICAgICBmb3IgKGkgPSA1OyBpIDw9IGVuZF9zdWI7IGkrKykgeworICAgICAgICAgICAgaWYgKHBh cnNlZGF0W2ldID09IElBQykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHN0 clRtcFtpLTVdID0gcGFyc2VkYXRbaV07CisgICAgICAgICAgICBzdHJUbXBbaS00XSA9IDA7Cisg ICAgICAgIH0KKworICAgICAgICBpZiAoIXN0clRtcFswXSkKKyAgICAgICAgICAgIHN0cmNweShz dHJUbXAsICJBdXRoZW50aWNhdGlvbiByZWplY3RlZCBieSByZW1vdGUgbWFjaGluZSEiKTsKKyAg ICAgICAgcHJpbnRmKCJLZXJiZXJvcyBWNCBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJcbiVzXHJc biIsc3RyVG1wKTsKKyAgICAgICAga3JiNF9lcnJubyA9IC0xOworICAgICAgICBtYWtlc3RyKCZr cmI0X2Vycm1zZyxzdHJUbXApOworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK KyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICB9CisKKyAgICBpZiAocGFyc2VkYXRb NF0gPT0gS1JCX0FDQ0VQVCkgeworICAgICAgICBpbnQgbmV0X2xlbjsKKyAgICAgICAgaWYgKChw YXJzZWRhdFszXSAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX09ORV9XQVkpIHsKKyAgICAg ICAgICAgIGNrbWFrbXNnKHN0clRtcCxzaXplb2Yoc3RyVG1wKSwiS2VyYmVyb3MgVjQgYWNjZXB0 cyB5b3UgYXMgIiwKKyAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lLE5VTEwsTlVMTCk7 CisgICAgICAgICAgICBwcmludGYoIiVzXHJcbiIsc3RyVG1wKTsKKyAgICAgICAgICAgIGFjY2Vw dF9jb21wbGV0ZSA9IDE7CisgICAgICAgICAgICBrcmI0X2Vycm5vID0gMDsKKyAgICAgICAgICAg IG1ha2VzdHIoJmtyYjRfZXJybXNnLHN0clRtcCk7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVk KEFVVEhfVVNFUik7CisgICAgICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKChwYXJzZWRhdFszXSAmIEFVVEhfSE9XX01BU0spICE9IEFVVEhfSE9X X01VVFVBTCkgeworICAgICAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBWNCBhdXRoZW50aWNhdGlv biBmYWlsZWQhXHJcbiIpOworICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwKKyAgICAgICAg IktlcmJlcm9zIFY0IGFjY2VwdGVkIHlvdSwgYnV0IGRpZG4ndCBwcm92aWRlIG11dHVhbCBhdXRo ZW50aWNhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsKKyAg ICAgICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOworICAgICAgICAgICAga3JiNF9lcnJu byA9IC0xOworICAgICAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csc3RyVG1wKTsKKyAgICAg ICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0dXJuIEFV VEhfRkFJTFVSRTsKKyAgICAgICAgfQorCisjaWZuZGVmIFJFTU9WRV9GT1JfRVhQT1JUCisjaWZk ZWYgQ0tfRU5DUllQVElPTgorICAgICAgICBTZW5kSzRBdXRoU0IoS1JCNF9DSEFMTEVOR0UsazRf c2Vzc2lvbl9rZXksc2l6ZW9mKGs0X3Nlc3Npb25fa2V5KSk7CisKKyAgICAgICAgLyogV2UgaGF2 ZSBzZW50IHRoZSBkZWNyeXB0ZWQgc2Vzc2lvbiBrZXkgdG8gdGhlIGhvc3QgYXMgYSBjaGFsbGVu Z2UgKi8KKyAgICAgICAgLyogbm93IGVuY3J5cHQgaXQgdG8gcmVzdG9yZSBpdCB0byBpdHMgb3Jp Z2luYWwgdmFsaWQgREVTIGtleSB2YWx1ZSAqLworI2lmZGVmIE1JVF9DVVJSRU5UCisgICAgICAg IGtkYXRhLmRhdGEgPSBrNF9zZXNzaW9uX2tleTsKKyAgICAgICAga2RhdGEubGVuZ3RoID0gODsK KworICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQuZGF0YSA9IGs0X3Nlc3Npb25fa2V5OworICAg ICAgICBlbmNkYXRhLmNpcGhlcnRleHQubGVuZ3RoID0gODsKKyAgICAgICAgZW5jZGF0YS5lbmN0 eXBlID0gRU5DVFlQRV9VTktOT1dOOworCisgICAgICAgIGlmIChjb2RlID0ga3JiNV9jX2VuY3J5 cHQoazVfY29udGV4dCwgJms0X2tyYmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgMCwgJmtkYXRhLCAmZW5jZGF0YSkpIHsKKyAgICAgICAgICAgIGNvbV9lcnIoIms0 X2F1dGhfcmVwbHkiLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgIndoaWxlIGVuY3J5cHRp bmcgc2Vzc2lvbl9rZXkiKTsKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OworICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgfQorI2Vsc2UgLyog TUlUX0NVUlJFTlQgKi8KKyNpZmRlZiBOVAorICAgICAgICBkZXNfZWNiX2VuY3J5cHQoazRfc2Vz c2lvbl9rZXksIGs0X3Nlc3Npb25fa2V5LCBrNF9zY2hlZCwgMSk7CisjZWxzZSAvKiBOVCAqLwor ICAgICAgICBkZXNfZWNiX2VuY3J5cHQoJms0X3Nlc3Npb25fa2V5LCAmazRfc2Vzc2lvbl9rZXks IGs0X3NjaGVkLCAxKTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBja2hleGR1bXAoCisgICAg ICAgICAgICAiazRfYXV0aF9yZXBseSBkZXNfZWNiX2VuY3J5cHQoazRfc2Vzc2lvbl9rZXksazRf c2Vzc2lvbl9rZXksMSkiLAorICAgICAgICAgICAgIGs0X3Nlc3Npb25fa2V5LAorICAgICAgICAg ICAgIDgKKyAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIE1JVF9DVVJSRU5UICovCisKKyNp ZmRlZiBDS19TU0wKKyAgICAgICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVf ZmxhZykpCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgIHsKKyAgICAgICAgLyogQW5kIHRo ZW4gdXNlIGl0IHRvIGNvbmZpZ3VyZSB0aGUgZW5jcnlwdGlvbiBzdGF0ZSBtYWNoaW5lLiAqLwor ICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVTOworICAgICAgICAgICAgc2tleS5sZW5ndGgg PSA4OworICAgICAgICAgICAgc2tleS5kYXRhID0gazRfc2Vzc2lvbl9rZXk7CisgICAgICAgICAg ICBlbmNyeXB0X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX0NMSUVOVF9UT19TRVJWRVIpOworICAg ICAgICB9CisjZW5kaWYgLyogRU5DUllQVElPTiAqLworI2VuZGlmIC8qIFJFTU9WRV9GT1JfRVhQ T1JUICovCisgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7CisgICAgICAgIGNrbWFrbXNnKHN0 clRtcCxzaXplb2Yoc3RyVG1wKSwKKyAgICAgICAgICAgICAgICAgIktlcmJlcm9zIFY0IGFjY2Vw dHMgeW91IGFzICIsc3pVc2VyTmFtZSxOVUxMLE5VTEwpOworICAgICAgICBwcmludGYoIiVzXHJc biIsc3RyVG1wKTsKKyAgICAgICAga3JiNF9lcnJubyA9IDA7CisgICAgICAgIG1ha2VzdHIoJmty YjRfZXJybXNnLHN0clRtcCk7CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKKyAg ICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBpZiAocGFyc2VkYXRbNF0g PT0gS1JCNF9SRVNQT05TRSkgeworICAgICAgICBpZiAoZW5kX3N1YiA8IDEyKSB7CisgICAgICAg ICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgIHJldHVybiBBVVRI X0ZBSUxVUkU7CisgICAgICAgIH0KKworICAgICAgICBja2hleGR1bXAoIktSQjRfUkVTUE9OU0Ug JnBhcnNlZGF0WzVdIiwmcGFyc2VkYXRbNV0sOCk7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAg ICAgICBja2hleGR1bXAoIktSQjRfUkVTUE9OU0UgazRfY2hhbGxlbmdlIixrNF9jaGFsbGVuZ2Us OCk7CisKKyAgICAgICAgLyogVGhlIGRhdGFibG9jayByZXR1cm5lZCBmcm9tIHRoZSBob3N0IHNo b3VsZCBtYXRjaCB0aGUgdmFsdWUgKi8KKyAgICAgICAgLyogd2Ugc3RvcmVkIGluIGs0X2NoYWxs ZW5nZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKG1l bWNtcCgmcGFyc2VkYXRbNV0sIGs0X2NoYWxsZW5nZSwgc2l6ZW9mKGs0X2NoYWxsZW5nZSkpICE9 IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiS2VyYmVyb3MgVjQgYXV0aGVudGljYXRpb24gZmFp bGVkIVxyXG4lc1xyXG4iLAorICAgICAgICAgICAgIlJlbW90ZSBtYWNoaW5lIGlzIGJlaW5nIGlt cGVyc29uYXRlZCEiKTsKKyAgICAgICAgICAgIGtyYjRfZXJybm8gPSAtMTsKKyAgICAgICAgICAg IG1ha2VzdHIoJmtyYjRfZXJybXNnLCJSZW1vdGUgbWFjaGluZSBpcyBiZWluZyBpbXBlcnNvbmF0 ZWQhIik7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAg ICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAgIH0KKyNlbHNlIC8qIEVOQ1JZUFRJT04g Ki8KKyAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csIktlcm1pdCBidWlsdCB3aXRob3V0IHN1 cHBvcnQgZm9yIGVuY3J5cHRpb24uIik7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Cisj ZW5kaWYgLyogRU5DUllQVElPTiAqLworICAgICAgICBtdXR1YWxfY29tcGxldGUgPSAxOworICAg ICAgICBja3N0cm5jcHkoc3RyVG1wLCJSZW1vdGUgbWFjaGluZSBoYXMgYmVlbiBtdXR1YWxseSBh dXRoZW50aWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7CisgICAg ICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOworICAgICAgICBrcmI0X2Vycm5vID0gMDsKKyAg ICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAgYXV0aF9maW5pc2hl ZChBVVRIX1VTRVIpOworICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOworICAgIH0KKyAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworfQor CisvKgorICogRnVuY3Rpb246IEs0IHBhcnNlIGF1dGhlbnRpY2F0aW9uIElTIGNvbW1hbmQKKyAq CisgKiBQYXJhbWV0ZXJzOgorICogIHBhcnNlZGF0IC0gdGhlIHN1Yi1jb21tYW5kIGRhdGEuCisg KgorICogIGVuZF9zdWIgLSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIGluIHRoZSAncGFyc2VkYXQn IGFycmF5IHdoaWNoCisgKiAgICAgICAgICAgIGlzIHRoZSBsYXN0IGJ5dGUgaW4gYSBzdWItbmVn b3RpYXRpb24KKyAqCisgKiBSZXR1cm5zOiBLZXJiZXJvcyBlcnJvciBjb2RlLgorICovCisKK3N0 YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworazRfYXV0aF9pcyh1bnNpZ25lZCBjaGFyICpwYXJz ZWRhdCwgaW50IGVuZF9zdWIpCisjZWxzZQorazRfYXV0aF9pcyhwYXJzZWRhdCxlbmRfc3ViKSB1 bnNpZ25lZCBjaGFyICpwYXJzZWRhdDsgaW50IGVuZF9zdWI7CisjZW5kaWYKK3sKKyNpZmRlZiBD S19FTkNSWVBUSU9OCisgICAgU2Vzc2lvbl9LZXkgc2tleTsKKyNpZmRlZiBNSVRfQ1VSUkVOVAor ICAgIEJsb2NrIGRhdGFibG9jaywgdG1wa2V5OworICAgIGtyYjVfZGF0YSBrZGF0YTsKKyAgICBr cmI1X2VuY19kYXRhIGVuY2RhdGE7CisgICAga3JiNV9lcnJvcl9jb2RlIGNvZGU7CisjZWxzZSAv KiBNSVRfQ1VSUkVOVCAqLworICAgIEJsb2NrIGRhdGFibG9jazsKKyNlbmRpZiAvKiBNSVRfQ1VS UkVOVCAqLworI2VuZGlmICAvKiBFTkNSWVBUSU9OICovCisgICAgY2hhciByZWFsbVtSRUFMTV9T WisxXTsKKyAgICBjaGFyIGluc3RhbmNlW0lOU1RfU1pdOworICAgIGludCByID0gMDsKKyAgICBj aGFyICogZGF0YSA9ICZwYXJzZWRhdFs1XTsKKyAgICBpbnQgICAgY250ID0gZW5kX3N1YiAtIDU7 CisgICAgZXh0ZXJuIGNoYXIgbXlpcGFkZHJbXTsKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaG9zdDsK KyAgICBzdHJ1Y3QgaW5fYWRkciBpbmFkZHI7CisgICAgaW50IGk7CisKKyAgICBpZiAoZW5kX3N1 YiA8IDQgfHwgcGFyc2VkYXRbMl0gIT0gQVVUSFRZUEVfS0VSQkVST1NfVjQpIHsKKyAgICAgICAg ZGVidWcoRjExMCwiazRfYXV0aF9pcyIsIk5vdCBrZXJiZXJvcyB2NCIsMCk7CisgICAgICAgIGF1 dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOwor ICAgIH0KKworICAgIHN3aXRjaCAocGFyc2VkYXRbNF0pIHsKKyAgICBjYXNlIEtSQl9BVVRIOgor ICAgICAgICBkZWJ1ZyhGMTEwLCJrNF9hdXRoX2lzIiwiS1JCX0FVVEgiLDApOworICAgICAgICBj a3N0cm5jcHkocmVhbG0sY2tfa3JiNF9nZXRyZWFsbSgpLFJFQUxNX1NaKzEpOworICAgICAgICBp ZiAocmVhbG1bMF0gPT0gJ1wwJykgeworICAgICAgICAgICAgU2VuZEs0QXV0aFNCKEtSQl9SRUpF Q1QsICh2b2lkICopIk5vIGxvY2FsIFY0IFJlYWxtLiIsIC0xKTsKKyAgICAgICAgICAgIHByaW50 ZigiXHJcbj8gS2VyYmVyb3MgNCAtIE5vIExvY2FsIFJlYWxtXHJcbiIpOworICAgICAgICAgICAg ZGVidWcoRjExMCwiazRfYXV0aF9pcyIsIk5vIGxvY2FsIHJlYWxtIiwwKTsKKyAgICAgICAgICAg IGtyYjRfZXJybm8gPSAtMTsKKyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLCJObyBs b2NhbCByZWFsbSIpOworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Cisg ICAgICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGRlYnVn KEYxMTAsIms0X2F1dGhfaXMiLHJlYWxtLDApOworICAgICAgICBpZiAoIGNudCA8IHNpemVvZihr NF9hdXRoLmRhdCkgKSB7CisgICAgICAgICAgICBrNF9hdXRoLmxlbmd0aCA9IGNudDsKKyAgICAg ICAgICAgIG1lbWNweSgodm9pZCAqKWs0X2F1dGguZGF0LCAodm9pZCAqKWRhdGEsIGs0X2F1dGgu bGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBrNF9hdXRoLmxlbmd0aCA9IDA7 CisgICAgICAgIGNraGV4ZHVtcCgiazRfYXV0aC5kYXQiLGs0X2F1dGguZGF0LCBrNF9hdXRoLmxl bmd0aCk7CisKKyAgICAgICAgLyogR2V0IEluc3RhbmNlICovCisgICAgICAgIGluYWRkci5zX2Fk ZHIgPSBpbmV0X2FkZHIobXlpcGFkZHIpOworICAgICAgICBob3N0ID0gZ2V0aG9zdGJ5YWRkcigo dW5zaWduZWQgY2hhciAqKSZpbmFkZHIsNCxQRl9JTkVUKTsKKyAgICAgICAgaWYgKCBob3N0ICkg eworI2lmZGVmIEhBRERSTElTVAorICAgICAgICAgICAgaG9zdCA9IGNrX2NvcHlob3N0ZW50KGhv c3QpOworI2VuZGlmIC8qIEhBRERSTElTVCAqLworICAgICAgICAgICAgY2tzdHJuY3B5KGluc3Rh bmNlLGhvc3QtPmhfbmFtZSxJTlNUX1NaKTsKKyAgICAgICAgICAgIGZvciAoIGk9MDtpPElOU1Rf U1o7aSsrICkgeworICAgICAgICAgICAgICAgIGlmICggaW5zdGFuY2VbaV0gPT0gJy4nICkKKyAg ICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbaV0gPSAnXDAnOworICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbaV0gPSB0b2xvd2VyKGluc3RhbmNlW2ld KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluc3RhbmNl WzBdID0gJyonOworICAgICAgICAgICAgaW5zdGFuY2VbMV0gPSAwOworICAgICAgICB9CisKKyAg ICAgICAgaWYgKHIgPSBrcmJfcmRfcmVxKCZrNF9hdXRoLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGtyYjRfZF9zcnYgPyBrcmI0X2Rfc3J2IDogS1JCNF9TRVJWSUNFX05BTUUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsIDAsICZrNF9hZGF0LCBrNF9rZXl0YWIp KSB7CisKKyAgICAgICAgICAgIGNraGV4ZHVtcCgiazRfYWRhdCIsICZrNF9hZGF0LCBzaXplb2Yo QVVUSF9EQVQpKTsKKyAgICAgICAgICAgIGtyYl9rbnRvbG4oJms0X2FkYXQsIGs0X25hbWUpOwor ICAgICAgICAgICAgY2ttYWttc2coc3RyVG1wLHNpemVvZihzdHJUbXApLAorICAgICAgICAgICAg ICAgICAgICAgIktlcmJlcm9zIGZhaWxlZCBoaW0gYXMgIiwgazRfbmFtZSxOVUxMLE5VTEwpOwor ICAgICAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7CisgICAgICAgICAgICBrcmI0X2Vy cm5vID0gcjsKKyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLHN0clRtcCk7CisgICAg ICAgICAgICBTZW5kSzRBdXRoU0IoS1JCX1JFSkVDVCwgKHZvaWQgKilrcmJfZ2V0X2Vycl90ZXh0 X2VudHJ5KHIpLCAtMSk7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsK KyAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAgIH0KKworI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICAgICAgbWVtY3B5KCh2b2lkICopazRfc2Vzc2lvbl9rZXksICh2b2lk ICopazRfYWRhdC5zZXNzaW9uLAorICAgICAgICAgICAgICAgIHNpemVvZihCbG9jaykpOyAgICAg ICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICBja2hleGR1bXAoIms0X2F1dGhfaXMgazRf c2Vzc2lvbl9rZXkiLGs0X3Nlc3Npb25fa2V5LHNpemVvZihCbG9jaykpOworI2VuZGlmIC8qIEVO Q1JZUFRJT04gKi8KKyAgICAgICAga3JiX2tudG9sbigmazRfYWRhdCwgazRfbmFtZSk7CisKKyAg ICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVBdXRoZW50aWNhdGVkLGs0X25hbWUsVUlEQlVGTEVO KTsKKyAgICAgICAgaWYgKHN6VXNlck5hbWVSZXF1ZXN0ZWQgJiYgIWt1c2Vyb2soJms0X2FkYXQs IGs0X25hbWUpKSB7CisgICAgICAgICAgICBTZW5kSzRBdXRoU0IoS1JCX0FDQ0VQVCwgKHZvaWQg KikwLCAwKTsKKyAgICAgICAgICAgIGlmICggIXN0cmNtcChrNF9uYW1lLHN6VXNlck5hbWVSZXF1 ZXN0ZWQpICkKKyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQpOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsK KyAgICAgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxz ZSB7CisgICAgICAgICAgICBTZW5kSzRBdXRoU0IoS1JCX1JFSkVDVCwKKyAgICAgICAgICAgICAg ICAgICh2b2lkICopInVzZXIgaXMgbm90IGF1dGhvcml6ZWQiLCAtMSk7CisgICAgICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgIGtyYjRfZXJybm8gPSByOwor ICAgICAgICAgICAgbWFrZXN0cigma3JiNF9lcnJtc2csInVzZXIgaXMgbm90IGF1dGhvcml6ZWQi KTsKKyAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAg IGJyZWFrOworCisgICAgY2FzZSBLUkI0X0NIQUxMRU5HRToKKyAgICAgICAgZGVidWcoRjExMCwi azRfYXV0aF9pcyIsIktSQl9DSEFMTEVOR0UiLDApOworI2lmbmRlZiBDS19FTkNSWVBUSU9OCisg ICAgICAgIFNlbmRLNEF1dGhTQihLUkI0X1JFU1BPTlNFLCAodm9pZCAqKTAsIDApOworI2Vsc2Ug ICAvKiBFTkNSWVBUSU9OICovCisgICAgICAgIGlmICghVkFMSURLRVkoazRfc2Vzc2lvbl9rZXkp KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgKiBXZSBkb24ndCBoYXZlIGEgdmFsaWQg c2Vzc2lvbiBrZXksIHNvIGp1c3QKKyAgICAgICAgICAgICogc2VuZCBiYWNrIGEgcmVzcG9uc2Ug d2l0aCBhbiBlbXB0eSBzZXNzaW9uCisgICAgICAgICAgICAqIGtleS4KKyAgICAgICAgICAgICov CisgICAgICAgICAgICBTZW5kSzRBdXRoU0IoS1JCNF9SRVNQT05TRSwgKHZvaWQgKikwLCAwKTsK KyAgICAgICAgICAgIG11dHVhbF9jb21wbGV0ZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICogSW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51 bWJlciBnZW5lcmF0b3Igc2luY2UgaXQncworICAgICAgICAqIHVzZWQgbGF0ZXIgb24gYnkgdGhl IGVuY3J5cHRpb24gcm91dGluZS4KKyAgICAgICAgKi8KKyNpZmRlZiBNSVRfQ1VSUkVOVAorICAg ICAgICBrZGF0YS5kYXRhID0gazRfc2Vzc2lvbl9rZXk7CisgICAgICAgIGtkYXRhLmxlbmd0aCA9 IDg7CisKKyAgICAgICAgaWYgKGNvZGUgPSBrcmI1X2NfcmFuZG9tX3NlZWQoazVfY29udGV4dCwg JmtkYXRhKSkgeworICAgICAgICAgICAgY29tX2VycigiazRfYXV0aF9pcyIsIGNvZGUsCisgICAg ICAgICAgICAgICAgICAgICAid2hpbGUgc2VlZGluZyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciIp OworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICBy ZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICB9CisKKyAgICAgICAgbWVtY3B5KCh2b2lkICop ZGF0YWJsb2NrLCAodm9pZCAqKWRhdGEsIHNpemVvZihCbG9jaykpOyAvKiBzYWZlICovCisgICAg ICAgIC8qCisgICAgICAgICogVGFrZSB0aGUgcmVjZWl2ZWQgZW5jcnlwdGVkIGNoYWxsZW5nZSwg YW5kIGVuY3J5cHQKKyAgICAgICAgKiBpdCBhZ2FpbiB0byBnZXQgYSB1bmlxdWUgc2Vzc2lvbl9r ZXkgZm9yIHRoZQorICAgICAgICAqIEVOQ1JZUFQgb3B0aW9uLgorICAgICAgICAqLworICAgICAg ICBrNF9rcmJrZXkuZW5jdHlwZSA9IEVOQ1RZUEVfREVTX0NCQ19SQVc7CisgICAgICAgIGs0X2ty YmtleS5sZW5ndGggPSA4OworICAgICAgICBrNF9rcmJrZXkuY29udGVudHMgPSBrNF9zZXNzaW9u X2tleTsKKworICAgICAgICBrZGF0YS5kYXRhID0gZGF0YWJsb2NrOworICAgICAgICBrZGF0YS5s ZW5ndGggPSA4OworCisgICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5kYXRhID0gdG1wa2V5Owor ICAgICAgICBlbmNkYXRhLmNpcGhlcnRleHQubGVuZ3RoID0gODsKKyAgICAgICAgZW5jZGF0YS5l bmN0eXBlID0gRU5DVFlQRV9VTktOT1dOOworCisgICAgICAgIGlmIChjb2RlID0ga3JiNV9jX2Vu Y3J5cHQoazVfY29udGV4dCwgJms0X2tyYmtleSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmtkYXRhLCAmZW5jZGF0YSkpIHsKKyAgICAgICAgICAgIGNvbV9lcnIo Ims0X2F1dGhfaXMiLCBjb2RlLCAid2hpbGUgZW5jcnlwdGluZyByYW5kb20ga2V5Iik7CisgICAg ICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgIHJldHVybiBB VVRIX0ZBSUxVUkU7CisgICAgICAgIH0KKworI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoIShz c2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkKKyNlbmRpZiAvKiBDS19TU0wgKi8K KyAgICAgICAgeworICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVTOworICAgICAgICAgICAg c2tleS5sZW5ndGggPSA4OworICAgICAgICAgICAgc2tleS5kYXRhID0gdG1wa2V5OworICAgICAg ICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgmc2tleSwgQVVUSF9TRVJWRVJfVE9fQ0xJRU5UKTsK KyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAqIE5vdyBkZWNyeXB0IHRoZSByZWNlaXZl ZCBlbmNyeXB0ZWQgY2hhbGxlbmdlLAorICAgICAgICAqIGluY3JlbWVudCBieSBvbmUsIHJlLWVu Y3J5cHQgaXQgYW5kIHNlbmQgaXQgYmFjay4KKyAgICAgICAgKi8KKyAgICAgICAgZW5jZGF0YS5j aXBoZXJ0ZXh0LmRhdGEgPSBkYXRhYmxvY2s7CisgICAgICAgIGVuY2RhdGEuY2lwaGVydGV4dC5s ZW5ndGggPSA4OworICAgICAgICBlbmNkYXRhLmVuY3R5cGUgPSBFTkNUWVBFX1VOS05PV047CisK KyAgICAgICAga2RhdGEuZGF0YSA9IGs0X2NoYWxsZW5nZTsKKyAgICAgICAga2RhdGEubGVuZ3Ro ID0gODsKKworICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19kZWNyeXB0KGs1X2NvbnRleHQsICZr NF9rcmJrZXksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmNk YXRhLCAma2RhdGEpKSB7CisgICAgICAgICAgICBjb21fZXJyKCJrNF9hdXRoX2lzIiwgY29kZSwg IndoaWxlIGRlY3J5cHRpbmcgY2hhbGxlbmdlIik7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVk KEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAg IH0KKyNlbHNlIC8qIE1JVF9DVVJSRU5UICovCisgICAgICAgIGRlc19zZXRfcmFuZG9tX2dlbmVy YXRvcl9zZWVkKGs0X3Nlc3Npb25fa2V5KTsKKyAgICAgICAgciA9IGRlc19rZXlfc2NoZWQoazRf c2Vzc2lvbl9rZXksIGs0X3NjaGVkKTsKKyAgICAgICAgaWYgKCByID09IC0xICkgeworICAgICAg ICAgICAgcHJpbnRmKCI/SW52YWxpZCBERVMga2V5IHNwZWNpZmllZCBpbiBjcmVkZW50aWFsc1xy XG4iKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImF1dGhfaXMgQ0hBTExFTkdFIiwKKyAgICAg ICAgICAgICAgICAgICAiaW52YWxpZCBERVMgS2V5IHNwZWNpZmllZCBpbiBjcmVkZW50aWFscyIs MCk7CisgICAgICAgIH0gZWxzZSBpZiAoIHIgPT0gLTIgKSB7CisgICAgICAgICAgICBwcmludGYo Ij9XZWFrIERFUyBrZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzXHJcbiIpOworICAgICAgICAg ICAgZGVidWcoRjExMCwiYXV0aF9pcyBDSEFMTEVOR0UiLAorICAgICAgICAgICAgICAgICAgICJ3 ZWFrIERFUyBLZXkgc3BlY2lmaWVkIGluIGNyZWRlbnRpYWxzIiwwKTsKKyAgICAgICAgfSBlbHNl IGlmICggciAhPSAwICkgeworICAgICAgICAgICAgcHJpbnRmKCI/REVTIEtleSBTY2hlZHVsZSBu b3Qgc2V0IGJ5IGNyZWRlbnRpYWxzXHJcbiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwiYXV0 aF9pcyBDSEFMTEVOR0UiLAorICAgICAgICAgICAgICAgICAgICJERVMgS2V5IFNjaGVkdWxlIG5v dCBzZXQgYnkgY3JlZGVudGlhbHMiLDApOworICAgICAgICB9CisgICAgICAgIGNraGV4ZHVtcCgi YXV0aF9pcyBzY2hlZHVsZSIsazRfc2NoZWQsOCoxNik7CisKKyAgICAgICAgbWVtY3B5KCh2b2lk ICopZGF0YWJsb2NrLCAodm9pZCAqKWRhdGEsIHNpemVvZihCbG9jaykpOyAvKiBzYWZlICovCisg ICAgICAgIGNraGV4ZHVtcCgiYXV0aF9pcyBjaGFsbGVnZSIsZGF0YWJsb2NrLHNpemVvZihCbG9j aykpOworCisgICAgICAgIC8qCisgICAgICAgICogVGFrZSB0aGUgcmVjZWl2ZWQgZW5jcnlwdGVk IGNoYWxsZW5nZSwgYW5kIGVuY3J5cHQKKyAgICAgICAgKiBpdCBhZ2FpbiB0byBnZXQgYSB1bmlx dWUgazRfc2Vzc2lvbl9rZXkgZm9yIHRoZQorICAgICAgICAqIEVOQ1JZUFQgb3B0aW9uLgorICAg ICAgICAqLworI2lmZGVmIE5UCisgICAgICAgIGRlc19lY2JfZW5jcnlwdChkYXRhYmxvY2ssIGs0 X3Nlc3Npb25fa2V5LCBrNF9zY2hlZCwgMSk7CisjZWxzZSAvKiBOVCAqLworICAgICAgICBkZXNf ZWNiX2VuY3J5cHQoJmRhdGFibG9jaywgJms0X3Nlc3Npb25fa2V5LCBrNF9zY2hlZCwgMSk7Cisj ZW5kaWYgLyogTlQgKi8KKyAgICAgICAgY2toZXhkdW1wKCJhdXRoX2lzIGRlc19lY2JfZW5jcnlw dChkYXRhYmxvY2ssazRfc2Vzc2lvbl9rZXksMSkiLAorICAgICAgICAgICAgICAgICBrNF9zZXNz aW9uX2tleSw4KTsKKworI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoIShzc2xfYWN0aXZlX2Zs YWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgewor ICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVTOworICAgICAgICAgICAgc2tleS5sZW5ndGgg PSA4OworICAgICAgICAgICAgc2tleS5kYXRhID0gazRfc2Vzc2lvbl9rZXk7CisgICAgICAgICAg ICBlbmNyeXB0X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX1NFUlZFUl9UT19DTElFTlQpOworICAg ICAgICB9CisgICAgICAgIC8qCisgICAgICAgICogTm93IGRlY3J5cHQgdGhlIHJlY2VpdmVkIGVu Y3J5cHRlZCBjaGFsbGVuZ2UsCisgICAgICAgICogaW5jcmVtZW50IGJ5IG9uZSwgcmUtZW5jcnlw dCBpdCBhbmQgc2VuZCBpdCBiYWNrLgorICAgICAgICAqLworI2lmZGVmIE5UCisgICAgICAgIGRl c19lY2JfZW5jcnlwdChkYXRhYmxvY2ssIGs0X2NoYWxsZW5nZSwgazRfc2NoZWQsIDApOworI2Vs c2UgLyogTlQgKi8KKyAgICAgICAgZGVzX2VjYl9lbmNyeXB0KCZkYXRhYmxvY2ssICZrNF9jaGFs bGVuZ2UsIGs0X3NjaGVkLCAwKTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBja2hleGR1bXAo ImF1dGhfaXMgZGVzX2VjYl9lbmNyeXB0KGRhdGFibG9jayxrNF9jaGFsbGVuZ2UsMCkiLAorICAg ICAgICAgICAgICAgICBrNF9zZXNzaW9uX2tleSw4KTsKKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAq LworICAgICAgICBmb3IgKHIgPSA3OyByID49IDA7IHItLSkgeworICAgICAgICAgICAgcmVnaXN0 ZXIgaW50IHQ7CisgICAgICAgICAgICB0ID0gKHVuc2lnbmVkIGludClrNF9jaGFsbGVuZ2Vbcl0g KyAxOworICAgICAgICAgICAgazRfY2hhbGxlbmdlW3JdID0gdDsgICAgICAgIC8qIGlnbm9yZSBv dmVyZmxvdyAqLworICAgICAgICAgICAgaWYgKHQgPCAyNTYpICAgICAgICAgICAgICAgIC8qIGlm IG5vIG92ZXJmbG93LCBhbGwgZG9uZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgICAgIGNraGV4ZHVtcCgiYXV0aF9pcyBrNF9jaGFsbGVuZ2UrMSIsazRfY2hhbGxl bmdlLDgpOworCisjaWZkZWYgTUlUX0NVUlJFTlQKKyAgICAgICAga2RhdGEuZGF0YSA9IGs0X2No YWxsZW5nZTsKKyAgICAgICAga2RhdGEubGVuZ3RoID0gODsKKworICAgICAgICBlbmNkYXRhLmNp cGhlcnRleHQuZGF0YSA9IGs0X2NoYWxsZW5nZTsKKyAgICAgICAgZW5jZGF0YS5jaXBoZXJ0ZXh0 Lmxlbmd0aCA9IDg7CisgICAgICAgIGVuY2RhdGEuZW5jdHlwZSA9IEVOQ1RZUEVfVU5LTk9XTjsK KworICAgICAgICBpZiAoY29kZSA9IGtyYjVfY19lbmNyeXB0KGs1X2NvbnRleHQsICZrNF9rcmJr ZXksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZGF0YSwgJmVu Y2RhdGEpKSB7CisgICAgICAgICAgICBjb21fZXJyKCJrNF9hdXRoX2lzIiwgY29kZSwgIndoaWxl IGRlY3J5cHRpbmcgY2hhbGxlbmdlIik7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhf UkVKRUNUKTsKKyAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAgIH0KKyNl bHNlIC8qIE1JVF9DVVJSRU5UICovCisjaWZkZWYgTlQKKyAgICAgICAgZGVzX2VjYl9lbmNyeXB0 KGs0X2NoYWxsZW5nZSwgazRfY2hhbGxlbmdlLCBrNF9zY2hlZCwgMSk7CisjZWxzZSAvKiBOVCAq LworICAgICAgICBkZXNfZWNiX2VuY3J5cHQoJms0X2NoYWxsZW5nZSwgJms0X2NoYWxsZW5nZSwg azRfc2NoZWQsIDEpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgIGNraGV4ZHVtcCgiYXV0aF9p cyBkZXNfZWNiX2VuY3J5cHQoazRfY2hhbGxlbmdlX2tleSxrNF9jaGFsbGVuZ2UsMSkiLAorICAg ICAgICAgICAgICAgICBrNF9jaGFsbGVuZ2UsOCk7CisKKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAq LworICAgICAgICBTZW5kSzRBdXRoU0IoS1JCNF9SRVNQT05TRSwodm9pZCAqKWs0X2NoYWxsZW5n ZSxzaXplb2YoazRfY2hhbGxlbmdlKSk7CisjZW5kaWYgIC8qIEVOQ1JZUFRJT04gKi8KKyAgICAg ICAgbXV0dWFsX2NvbXBsZXRlID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0Ogor ICAgICAgICBpZiAoMSkKKyAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBLZXJiZXJvcyBvcHRp b24gJWRcclxuIiwgZGF0YVstMV0pOworICAgICAgICBTZW5kSzRBdXRoU0IoS1JCX1JFSkVDVCwg MCwgMCk7CisgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgIH0KKyAgICBrcmI0X2Vy cm5vID0gcjsKKyAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5 KGtyYjRfZXJybm8pKTsKKyAgICByZXR1cm4oQVVUSF9TVUNDRVNTKTsKK30KKyNlbmRpZiAvKiBL UkI0ICovCisKKyNpZmRlZiBLUkI1CitpbnQKK2NrX2tyYjVfYXV0b2dldF9UR1QoY2hhciAqIHJl YWxtKQoreworICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wOworICAgIGV4dGVy biBzdHJ1Y3Qga3JiNV9pbml0X2RhdGEga3JiNV9pbml0OworICAgIGNoYXIgcGFzc3dkW1BXRF9T Wl07CisgICAgY2hhciBwcm9tcHRbNjRdOworICAgIGNoYXIgKiBzYXZlcmVhbG09TlVMTDsKKyAg ICBpbnQgIHJjID0gLTE7CisgICAgZXh0ZXJuIGNoYXIgKiBrNXBycHJvbXB0OworICAgIGV4dGVy biBjaGFyICogazVwd3Byb21wdDsKKworICAgIGluaV9rZXJiKCk7ICAgICAgICAgLyogUGxhY2Ug ZGVmYXVsdHMgaW4gYWJvdmUgc3RydWN0cyAqLworICAgIHBhc3N3ZFswXSA9ICdcMCc7CisKKyAg ICBpZiAoIGtyYjVfaW5pdC5wcmluY2lwYWwgPT0gTlVMTCB8fAorICAgICAgICAga3JiNV9pbml0 LnByaW5jaXBhbFswXSA9PSAnXDAnKSB7CisgICAgICAgIGludCBvayA9IHVxX3R4dChOVUxMLGs1 cHJwcm9tcHQgJiYgazVwcnByb21wdFswXSA/IGs1cHJwcm9tcHQgOgorICAgICAgICAgICAgICAg ICAgIktlcmJlcm9zIDUgUHJpbmNpcGFsOiAiLDIsTlVMTCxwYXNzd2QsUFdEX1NaLTEsTlVMTCwK KwkJCURFRkFVTFRfVVFfVElNRU9VVCk7CisgICAgICAgIGlmICggb2sgJiYgcGFzc3dkWzBdICkK KyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfaW5pdC5wcmluY2lwYWwscGFzc3dkKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworICAgIC8qIFNhdmUgcmVh bG0gaW4gaW5pdCBzdHJ1Y3R1cmUgc28gaXQgY2FuIGJlIHJlc3RvcmVkICovCisgICAgaWYgKCBy ZWFsbSApIHsKKyAgICAgICAgc2F2ZXJlYWxtID0ga3JiNV9pbml0LnJlYWxtOworICAgICAgICBr cmI1X2luaXQucmVhbG0gPSByZWFsbTsKKyAgICB9CisKKyAgICBpZiAoIHBhc3N3ZFswXSB8fCAh KHB3YnVmWzBdICYmIHB3ZmxnKSApIHsKKyAgICAgICAgaW50IG9rOworICAgICAgICBpZiAoIGs1 cHdwcm9tcHQgJiYgazVwd3Byb21wdFswXSAmJgorICAgICAgICAgICAgIChzdHJsZW4oazVwd3By b21wdCkgKyBzdHJsZW4oa3JiNV9pbml0LnByaW5jaXBhbCkgKworICAgICAgICAgICAgICBzdHJs ZW4oa3JiNV9pbml0LnJlYWxtKSAtIDQpIDwgc2l6ZW9mKHByb21wdCkpIHsKKyAgICAgICAgICAg IHNwcmludGYocHJvbXB0LGs1cHdwcm9tcHQsa3JiNV9pbml0LnByaW5jaXBhbCxrcmI1X2luaXQu cmVhbG0pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgY2ttYWt4bXNnKHByb21wdCxzaXplb2Yo cHJvbXB0KSwKKyAgICAgICAgICAgICAgICAgIGs1cHdwcm9tcHQgJiYgazVwd3Byb21wdFswXSA/ IGs1cHdwcm9tcHQgOgorICAgICAgICAgICAgICAgICAgIktlcmJlcm9zIDUgUGFzc3dvcmQgZm9y ICIsCisgICAgICAgICAgICAgICAgICBrcmI1X2luaXQucHJpbmNpcGFsLCJAIixrcmI1X2luaXQu cmVhbG0sIjogIiwKKyAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwKKyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgb2sgPSB1cV90eHQoTlVMTCxw cm9tcHQsMixOVUxMLHBhc3N3ZCxQV0RfU1otMSxOVUxMLAorCQkgICAgREVGQVVMVF9VUV9USU1F T1VUKTsKKyAgICAgICAgaWYgKCAhb2sgKQorICAgICAgICAgICAgcGFzc3dkWzBdID0gJ1wwJzsK KyAgICB9IGVsc2UgeworICAgICAgICBja3N0cm5jcHkocGFzc3dkLChjaGFyICopcHdidWYsc2l6 ZW9mKHBhc3N3ZCkpOworI2lmZGVmIE9TMgorICAgICAgICBpZiAoIHB3Y3J5cHQgKQorICAgICAg ICAgICAgY2tfZW5jcnlwdCgoY2hhciAqKXBhc3N3ZCk7CisjZW5kaWYgLyogT1MyICovCisgICAg fQorCisgICAgaWYgKCBwYXNzd2RbMF0gKSB7CisgICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiNF9p bml0X2RhdGEga3JiNF9pbml0OworICAgICAgICBjaGFyICogc2F2ZWs0cmVhbG09TlVMTDsKKwor ICAgICAgICBtYWtlc3RyKCZrcmI1X2luaXQucGFzc3dvcmQscGFzc3dkKTsKKworICAgICAgICBp ZiAoIGtyYjVfZF9nZXRrNCApIHsKKyAgICAgICAgICAgIGtyYjVfaW5pdC5nZXRrNCA9IDE7Cisg ICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2luaXQucHJpbmNpcGFsLGtyYjVfaW5pdC5wcmluY2lw YWwpOworICAgICAgICAgICAgbWFrZXN0cigma3JiNF9pbml0LnBhc3N3b3JkLHBhc3N3ZCk7Cisg ICAgICAgICAgICBpZiAoIHJlYWxtICkgeworICAgICAgICAgICAgICAgIHNhdmVrNHJlYWxtID0g a3JiNF9pbml0LnJlYWxtOworICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5yZWFsbSA9IHJlYWxt OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSBja19rcmI1X2luaXRUR1QoJmtyYl9v cCwgJmtyYjVfaW5pdCwma3JiNF9pbml0KTsKKworICAgICAgICAgICAgaWYgKCBzYXZlazRyZWFs bSApCisgICAgICAgICAgICAgICAga3JiNF9pbml0LnJlYWxtID0gc2F2ZWs0cmVhbG07CisgICAg ICAgICAgICBmcmVlKGtyYjRfaW5pdC5wYXNzd29yZCk7CisgICAgICAgICAgICBrcmI0X2luaXQu cGFzc3dvcmQgPSBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmMgPSBja19r cmI1X2luaXRUR1QoJmtyYl9vcCwgJmtyYjVfaW5pdCxOVUxMKTsKKyAgICAgICAgfQorCisgICAg ICAgIGZyZWUoa3JiNV9pbml0LnBhc3N3b3JkKTsKKyAgICAgICAga3JiNV9pbml0LnBhc3N3b3Jk ID0gTlVMTDsKKworICAgICAgICBtZW1zZXQocGFzc3dkLDAsUFdEX1NaKTsKKyAgICB9CisKKyAg ICAvKiByZXN0b3JlIHJlYWxtIHRvIGluaXQgc3RydWN0dXJlIGlmIG5lZWRlZCAqLworICAgIGlm ICggc2F2ZXJlYWxtICkKKyAgICAgICAga3JiNV9pbml0LnJlYWxtID0gc2F2ZXJlYWxtOworICAg IHJldHVybihyYyA9PSAwKTsKK30KKworc3RhdGljIGtyYjVfZXJyb3JfY29kZQorI2lmZGVmIENL X0FOU0lDCitrNV9nZXRfY2NhY2hlKCBrcmI1X2NvbnRleHQgazVfY29udGV4dCwga3JiNV9jY2Fj aGUgKiBwX2NjYWNoZSwKKyAgICAgICAgICAgICAgIGNoYXIgKiBjY19uYW1lICkKKyNlbHNlICAv KiBDS19BTlNJQyAqLworazVfZ2V0X2NjYWNoZShrNV9jb250ZXh0LCBwX2NjYWNoZSwgY2NfbmFt ZSkKKyAgICBrcmI1X2NvbnRleHQgazVfY29udGV4dDsKKyAgICBrcmI1X2NjYWNoZSAqIHBfY2Nh Y2hlOworICAgIGNoYXIgKiBjY19uYW1lOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAg a3JiNV9lcnJvcl9jb2RlIHI9MDsKKyAgICBjaGFyIGNjX3RtcFtDS01BWFBBVEgrMV07CisgICAg Y29uc3QgY2hhciAqIGRlZl9uYW1lID0gTlVMTDsKKworI2lmbmRlZiBIRUlNREFMCisgICAgaWYg KCBjY19uYW1lICkgeworICAgICAgICBpZiAoIHN0cm5jbXAoIkZJTEU6IixjY19uYW1lLDUpICYm CisgICAgICAgICAgICAgc3RybmNtcCgiTUVNT1JZOiIsY2NfbmFtZSw3KSAmJgorICAgICAgICAg ICAgIHN0cm5jbXAoIkFQSToiLGNjX25hbWUsNCkgJiYKKyAgICAgICAgICAgICBzdHJuY21wKCJT VERJTzoiLGNjX25hbWUsNikgJiYKKwkgICAgIHN0cm5jbXAoIk1TTFNBOiIsY2NfbmFtZSw2KSkK KyNpZmRlZiBOVAorICAgICAgICAgICAgY2ttYWttc2coY2NfdG1wLENLTUFYUEFUSCwiQVBJOiIs Y2NfbmFtZSxOVUxMLE5VTEwpOworI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAgIGNrbWFrbXNn KGNjX3RtcCxDS01BWFBBVEgsIkZJTEU6IixjY19uYW1lLE5VTEwsTlVMTCk7CisjZW5kaWYgLyog TlQgKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBja3N0cm5jcHkoY2NfdG1wLGNjX25h bWUsQ0tNQVhQQVRIKTsKKyAgICAgICAgfQorICAgICAgICByID0ga3JiNV9jY19yZXNvbHZlIChr NV9jb250ZXh0LCBjY190bXAsIHBfY2NhY2hlKTsKKyAgICAgICAgaWYgKHIgIT0gMCkgeworICAg ICAgICAgICAgY29tX2VycigiazVfZ2V0X2NjYWNoZSByZXNvbHZpbmcgY2NhY2hlIixyLAorICAg ICAgICAgICAgICAgICAgICAgY2NfdG1wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IC8qIE1ha2Ugc3VyZSBHU1NBUEkgc2VlcyB0aGUgc2FtZSBjYWNoZSB3ZSBhcmUgdXNpbmcgKi8K KyAgICAgICAgICAgIGNoYXIgYnVmWzEyOF07CisgICAgICAgICAgICBja21ha21zZygoY2hhciAq KWJ1ZiwxMjgsIktSQjVDQ05BTUU9IixjY190bXAsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgIHB1 dGVudihidWYpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICgga3JiNV9kX2NjICkgeworICAg ICAgICBpZiAoIHN0cm5jbXAoIkZJTEU6IixrcmI1X2RfY2MsNSkgJiYKKyAgICAgICAgICAgICBz dHJuY21wKCJNRU1PUlk6IixrcmI1X2RfY2MsNykgJiYKKyAgICAgICAgICAgICBzdHJuY21wKCJB UEk6IixrcmI1X2RfY2MsNCkgJiYKKyAgICAgICAgICAgICBzdHJuY21wKCJTVERJTzoiLGtyYjVf ZF9jYyw2KSAmJgorCSAgICAgc3RybmNtcCgiTVNMU0E6Iiwga3JiNV9kX2NjLDYpKQorI2lmZGVm IE5UCisgICAgICAgICAgICBja21ha21zZyhjY190bXAsQ0tNQVhQQVRILCJBUEk6IixrcmI1X2Rf Y2MsTlVMTCxOVUxMKTsKKyNlbHNlIC8qIE5UICovCisgICAgICAgICAgICBja21ha21zZyhjY190 bXAsQ0tNQVhQQVRILCJGSUxFOiIsa3JiNV9kX2NjLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogTlQg Ki8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBja3N0cm5jcHkoY2NfdG1wLGtyYjVfZF9j YyxDS01BWFBBVEgpOworICAgICAgICB9CisgICAgICAgIHIgPSBrcmI1X2NjX3Jlc29sdmUgKGs1 X2NvbnRleHQsIGNjX3RtcCwgcF9jY2FjaGUpOworICAgICAgICBpZiAociAhPSAwKSB7CisgICAg ICAgICAgICBjb21fZXJyKCJrNV9nZXRfY2NhY2hlIHJlc29sdmluZyBjY2FjaGUiLHIsCisgICAg ICAgICAgICAgICAgICAgICBrcmI1X2RfY2MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgLyogTWFrZSBzdXJlIEdTU0FQSSBzZWVzIHRoZSBzYW1lIGNhY2hlIHdlIGFyZSB1c2luZyAq LworICAgICAgICAgICAgY2hhciBidWZbMTI4XTsKKyAgICAgICAgICAgIGNrbWFrbXNnKChjaGFy ICopYnVmLDEyOCwiS1JCNUNDTkFNRT0iLGNjX3RtcCxOVUxMLE5VTEwpOworICAgICAgICAgICAg cHV0ZW52KGJ1Zik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBIRUlNREFMICov CisgICAgeworICAgICAgICBpZiAoKHIgPSBrcmI1X2NjX2RlZmF1bHQoazVfY29udGV4dCwgcF9j Y2FjaGUpKSkgeworICAgICAgICAgICAgY29tX2VycigiazVfZ2V0X2NjYWNoZSIsciwid2hpbGUg Z2V0dGluZyBkZWZhdWx0IGNjYWNoZSIpOworICAgICAgICB9CisgICAgfQorICAgIC8qIGRvIG5v dCBzZXQga3JiNV9lcnJuby9rcmI1X2Vycm1zZyBoZXJlIHNpbmNlIHRoZSB2YWx1ZSByZXR1cm5l ZCAqLworICAgIC8qIGlzIGJlaW5nIHBhc3NlZCBpbnRlcm5hbGx5IHdpdGhpbiB0aGUga3JiNSBm dW5jdGlvbnMuICAgICAgICAgICAqLworICAgIHJldHVybihyKTsKK30KKworCitjaGFyICoKK2Nr X2tyYjVfcmVhbG1vZmhvc3QoY2hhciAqaG9zdCkKK3sKKyAgICBjaGFyICoqIHJlYWxtbGlzdD1O VUxMOworICAgIGtyYjVfY29udGV4dCBwcml2YXRlX2NvbnRleHQ9TlVMTDsKKyAgICBzdGF0aWMg Y2hhciAqIHJlYWxtID0gTlVMTDsKKworICAgIGlmICggIWhvc3QgKQorICAgICAgICByZXR1cm4g TlVMTDsKKworICAgIGlmICggcmVhbG0gKSB7CisgICAgICAgIGZyZWUocmVhbG0pOworICAgICAg ICByZWFsbSA9IE5VTEw7CisgICAgfQorCisgICAgLyogY3JlYXRlIHByaXZhdGVfY29udGV4dCAq LworICAgIGlmIChrcmI1X2luaXRfY29udGV4dCgmcHJpdmF0ZV9jb250ZXh0KSkgeworICAgICAg ICBkZWJ1ZyhGMTEwLCJja19rcmI1X3JlYWxtb2Zob3N0KCkiLCJ1bmFibGUgdG8gaW5pdF9jb250 ZXh0IiwwKTsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKworICAgIGtyYjVfZ2V0X2hv c3RfcmVhbG0ocHJpdmF0ZV9jb250ZXh0LGhvc3QsJnJlYWxtbGlzdCk7CisgICAgaWYgKHJlYWxt bGlzdCAmJiByZWFsbWxpc3RbMF0pIHsKKyAgICAgICAgbWFrZXN0cigmcmVhbG0scmVhbG1saXN0 WzBdKTsKKyAgICAgICAga3JiNV9mcmVlX2hvc3RfcmVhbG0ocHJpdmF0ZV9jb250ZXh0LHJlYWxt bGlzdCk7CisgICAgICAgIHJlYWxtbGlzdCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKCBwcml2 YXRlX2NvbnRleHQgKSB7CisgICAgICAgIGtyYjVfZnJlZV9jb250ZXh0KHByaXZhdGVfY29udGV4 dCk7CisgICAgICAgIHByaXZhdGVfY29udGV4dCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKGNr c3RyY2hyKHJlYWxtLCcuJykgPT0gTlVMTCkgeworICAgICAgICBpbnQgbiA9IDA7CisgICAgICAg IGNoYXIgKiBwID0gaG9zdDsKKyAgICAgICAgd2hpbGUgKCAocCA9IGNrc3RyY2hyKHAsJy4nKSkg IT0gTlVMTCApIHsKKyAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAg fQorICAgICAgICBpZiAobiA9PSAxKSB7CisgICAgICAgICAgICBtYWtlc3RyKCZyZWFsbSxob3N0 KTsKKyAgICAgICAgICAgIGNrdXBwZXIocmVhbG0pOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgZnJlZShyZWFsbSk7CisgICAgICAgICAgICByZWFsbSA9IE5VTEw7CisgICAgICAgIH0K KyAgICB9CisgICAgcmV0dXJuKHJlYWxtKTsKK30KKworLyoKKyAqCisgKiBLNV9hdXRoX3NlbmQg LSBnZXRzIGF1dGhlbnRpY2F0aW9uIGJpdHMgd2UgbmVlZCB0byBzZW5kIHRvIEtEQy4KKyAqCisg KiBDb2RlIGxpZnRlZCBmcm9tIHRlbG5ldCBzYW1wbGUgY29kZSBpbiB0aGUgYXBwbCBkaXJlY3Rv cnkuCisgKgorICogUmVzdWx0IGlzIGxlZnQgaW4gazVfYXV0aAorICoKKyAqIFJldHVybnM6IDAg b24gZmFpbHVyZSwgMSBvbiBzdWNjZXNzCisgKgorICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBD S19BTlNJQworazVfYXV0aF9zZW5kKGludCBob3csIGludCBlbmNyeXB0LCBpbnQgZm9yd2FyZCkK KyNlbHNlCitrNV9hdXRoX3NlbmQoaG93LGVuY3J5cHQsZm9yd2FyZCkgaW50IGhvdzsgaW50IGVu Y3J5cHQ7IGludCBmb3J3YXJkOworI2VuZGlmCit7CisgICAga3JiNV9lcnJvcl9jb2RlIHI9MDsK KyAgICBrcmI1X2NjYWNoZSBjY2FjaGU9TlVMTDsKKyNpZm5kZWYgSEVJTURBTAorICAgIGtyYjVf Y3JlZHMgY3JlZHM7CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgIGtyYjVfY3JlZHMgKiBuZXdf Y3JlZHM9TlVMTDsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAga3JiNV9rZXlibG9jayAqbmV3 a2V5ID0gMDsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAga3JiNV9mbGFncyBhcF9v cHRzLCBhdXRoX2ZsYWdzOworICAgIGNoYXIgdHlwZV9jaGVja1szMl07CisgICAga3JiNV9kYXRh IGNoZWNrc3VtOworICAgIGludCBsZW49MDsKKyAgICBjaGFyICogcmVhbG0gPSBOVUxMOworICAg IGNoYXIgdGd0WzI1Nl07CisKKyAgICByZWFsbSA9IGNrX2tyYjVfcmVhbG1vZmhvc3Qoc3pIb3N0 TmFtZSk7CisgICAgaWYgKCFyZWFsbSkgeworICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCAiQ2Fu J3QgZmluZCByZWFsbSBmb3IgaG9zdCBcIiIsQVVUSFRNUEJMKTsKKyAgICAgICAgY2tzdHJuY2F0 KHN0clRtcCwgc3pIb3N0TmFtZSxBVVRIVE1QQkwpOworICAgICAgICBja3N0cm5jYXQoc3RyVG1w LCAiXCIiLEFVVEhUTVBCTCk7CisgICAgICAgIHByaW50ZigiP0tlcmJlcm9zIDUgZXJyb3I6ICVz XHJcbiIsc3RyVG1wKTsKKyAgICAgICAga3JiNV9lcnJubyA9IEtSQjVfRVJSX0hPU1RfUkVBTE1f VU5LTk9XTjsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAg cmV0dXJuKDApOworICAgIH0KKworICAgIGNrbWFrbXNnKHRndCxzaXplb2YodGd0KSwia3JidGd0 LyIscmVhbG0sIkAiLHJlYWxtKTsKKyAgICBkZWJ1ZyhGMTEwLCJrNV9hdXRoX3NlbmQgVEdUIix0 Z3QsMCk7CisgICAgaWYgKCBrcmI1X2F1dG9nZXQgJiYKKyAgICAgICAgICEoKGNrX2tyYjVfdGt0 X2lzdmFsaWQoTlVMTCx0Z3QpID4gMCkgfHwKKyAgICAgICAgICAoY2tfa3JiNV9pc190Z3RfdmFs aWQoKSA+IDApKSApCisgICAgICAgIGNrX2tyYjVfYXV0b2dldF9UR1QocmVhbG0pOworCisgICAg ciA9IGs1X2dldF9jY2FjaGUoazVfY29udGV4dCwmY2NhY2hlLE5VTEwpOworICAgIGlmICggciAp IHsKKyAgICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUgYXV0aG9yaXppbmcgKDApLiIpOwor ICAgICAgICBrcmI1X2Vycm5vID0gcjsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJy b3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyNp Zm5kZWYgSEVJTURBTAorICAgIG1lbXNldCgoY2hhciAqKSZjcmVkcywgMCwgc2l6ZW9mKGNyZWRz KSk7CisgICAgaWYgKHIgPSBrcmI1X3NuYW1lX3RvX3ByaW5jaXBhbChrNV9jb250ZXh0LCBzekhv c3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X2Rfc3J2ID8ga3Ji NV9kX3NydiA6IEtSQjVfU0VSVklDRV9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBLUkI1X05UX1NSVl9IU1QsICZjcmVkcy5zZXJ2ZXIpKSB7CisgICAgICAgIGNvbV9lcnIo TlVMTCwgciwgIndoaWxlIGF1dGhvcml6aW5nICgxKS4iKTsKKyAgICAgICAga3JiNV9lcnJubyA9 IHI7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJu bykpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgaWYgKGZvcndhcmRfZmxhZykg eworICAgICAgICBpZiAoZndkX3NlcnZlcikgeworICAgICAgICAgICAga3JiNV9mcmVlX3ByaW5j aXBhbChrNV9jb250ZXh0LGZ3ZF9zZXJ2ZXIpOworICAgICAgICAgICAgZndkX3NlcnZlciA9IE5V TEw7CisgICAgICAgIH0KKyAgICAgICAga3JiNV9jb3B5X3ByaW5jaXBhbChrNV9jb250ZXh0LGNy ZWRzLnNlcnZlciwmZndkX3NlcnZlcik7CisgICAgfQorCisgICAgciA9IGtyYjVfY2NfZ2V0X3By aW5jaXBhbChrNV9jb250ZXh0LCBjY2FjaGUsICZjcmVkcy5jbGllbnQpOworICAgIGlmIChyKSB7 CisgICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIndoaWxlIGF1dGhvcml6aW5nICgyKS4iKTsKKyAg ICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoazVfY29udGV4dCwgJmNyZWRzKTsKKyAgICAg ICAga3JiNV9lcnJubyA9IHI7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21l c3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorCisgICAgaWYg KHN6VXNlck5hbWVbMF0gPT0gJ1wwJykgeyAgICAgICAgICAgICAgICAvKiBHZXQgdXNlciBuYW1l IG5vdyAqLworICAgICAgICBsZW4gID0ga3JiNV9wcmluY19jb21wb25lbnQoazVfY29udGV4dCwg Y3JlZHMuY2xpZW50LCAwKS0+bGVuZ3RoOworICAgICAgICBpZiAoIGxlbiA8IHNpemVvZihzelVz ZXJOYW1lKSApIHsKKyAgICAgICAgICAgIG1lbWNweShzelVzZXJOYW1lLAorICAgICAgICAgICAg ICAgICAgICBrcmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250ZXh0LCBjcmVkcy5jbGllbnQsIDAp LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICBsZW4pOyAgICAgICAgICAgICAgICAgICAgICAg Lyogc2FmZSAqLworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAg IHN6VXNlck5hbWVbbGVuXSA9ICdcMCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciAqIG5h bWUgPSBOVUxMOworICAgICAgICBsZW4gID0ga3JiNV9wcmluY19jb21wb25lbnQoazVfY29udGV4 dCwgY3JlZHMuY2xpZW50LCAwKS0+bGVuZ3RoOworICAgICAgICBpZiAoIGxlbiA9PSBzdHJsZW4o c3pVc2VyTmFtZSkgKSB7CisgICAgICAgICAgICBuYW1lID0ga3JiNV9wcmluY19jb21wb25lbnQo azVfY29udGV4dCwgY3JlZHMuY2xpZW50LCAwKS0+ZGF0YTsKKyNpZmRlZiBPUzIKKyAgICAgICAg ICAgIGlmICggIXN0cm5pY21wKHN6VXNlck5hbWUsbmFtZSxsZW4pICkKKyAgICAgICAgICAgICAg ICBtZW1jcHkoc3pVc2VyTmFtZSxuYW1lLGxlbik7ICAgIC8qIHNhZmUgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIHRuX2F1dGhfa3JiNV9kZXNfYnVnICkg eyAgIC8qICFBTExPV19LUkJfM0RFU19FTkNSWVBUICovCisgICAgICAgIC8qIE5vdCBzdXJlIGlm IHRoaXMgaXMgbmVjZXNzYXJ5IGFueW1vcmUuICBXaGF0IGltcGFjdCBkb2VzIGl0IGhhdmUKKyAg ICAgICAgICogb24gV2luMjAwMCBUR1RzIHRoYXQgdXNlIERFU19DQkNfTUQ1IG9yIFJDNF9ITUFD PworICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIHByZXZlbnRzIHVzaW5nIDNERVMgU2Vydmlj ZSBUaWNrZXRzLgorICAgICAgICAgKi8KKyAgICAgICAgY3JlZHMua2V5YmxvY2suZW5jdHlwZT1F TkNUWVBFX0RFU19DQkNfQ1JDOworICAgIH0KKworICAgIGlmIChyID0ga3JiNV9nZXRfY3JlZGVu dGlhbHMoazVfY29udGV4dCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj Y2FjaGUsICZjcmVkcywgJm5ld19jcmVkcykpIHsKKyAgICAgICAgY29tX2VycihOVUxMLCByLCAi d2hpbGUgYXV0aG9yaXppbmcgKDMpLiIpOworICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50 cyhrNV9jb250ZXh0LCAmY3JlZHMpOworICAgICAgICBrcmI1X2Vycm5vID0gcjsKKyAgICAgICAg bWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAg IHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogSEVJTURBTCAqLworCisgICAgaWYgKGF1dGhf Y29udGV4dCkgeworICAgICAgICBrcmI1X2F1dGhfY29uX2ZyZWUoazVfY29udGV4dCwgYXV0aF9j b250ZXh0KTsKKyAgICAgICAgYXV0aF9jb250ZXh0ID0gMDsKKyAgICB9CisgICAgaWYgKHIgPSBr cmI1X2F1dGhfY29uX2luaXQoazVfY29udGV4dCwgJmF1dGhfY29udGV4dCkpIHsKKyAgICAgICAg Y29tX2VycihOVUxMLCByLCAid2hpbGUgaW5pdGlhbGl6aW5nIGF1dGggY29udGV4dCIpOworICAg ICAgICBrcmI1X2Vycm5vID0gcjsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3Jf bWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisKKyAgICAv KiBVUERBVEUgZm9yIFNUQVJUX1RMUy4gIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgYW5kIGluY2x1 c2lvbiBvZiAqLworICAgIC8qIGNsaWVudCBhbmQgdGhlbiBzZXJ2ZXIgZmluaXNoZWQgbWVzc2Fn ZXMuICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICB0eXBlX2NoZWNrWzBdID0gQVVUSFRZ UEVfS0VSQkVST1NfVjU7CisgICAgdHlwZV9jaGVja1sxXSA9IEFVVEhfQ0xJRU5UX1RPX1NFUlZF UiB8CisgICAgICAgIChob3cgPyBBVVRIX0hPV19NVVRVQUwgOiBBVVRIX0hPV19PTkVfV0FZKSB8 CisgICAgICAgIChlbmNyeXB0KSB8CisgICAgICAgIChmb3J3YXJkID8gSU5JX0NSRURfRldEX09O IDogSU5JX0NSRURfRldEX09GRik7CisjaWZkZWYgQ0tfU1NMCisgICAgaWYgKGVuY3J5cHQgPT0g QVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgeworICAgICAgICBzc2xfZ2V0X2NsaWVudF9maW5pc2hl ZCgmdHlwZV9jaGVja1syXSwxMik7CisgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0 eXBlX2NoZWNrWzE0XSwxMik7CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZuZGVm IEhFSU1EQUwKKyAgICBjaGVja3N1bS5tYWdpYyA9IEtWNU1fREFUQTsKKyNlbmRpZiAvKiBIRUlN REFMICovCisgICAgY2hlY2tzdW0ubGVuZ3RoID0KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgKGVu Y3J5cHQgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgPyAyNiA6CisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgICAgIDI7CisgICAgY2hlY2tzdW0uZGF0YSA9IChjaGFyICopJnR5cGVfY2hlY2s7 CisKKyAgICBhcF9vcHRzID0gMDsKKyAgICBpZiAoKGhvdyAmIEFVVEhfSE9XX01BU0spID09IEFV VEhfSE9XX01VVFVBTCkKKyAgICAgICAgYXBfb3B0cyB8PSBBUF9PUFRTX01VVFVBTF9SRVFVSVJF RDsKKworI2lmZGVmIEhFSU1EQUwKKyAgICByID0ga3JiNV9hdXRoX3NldGtleXR5cGUoazVfY29u dGV4dCwgYXV0aF9jb250ZXh0LCBLRVlUWVBFX0RFUyk7CisgICAgaWYgKHIpCisgICAgICAgIGNv bV9lcnIoTlVMTCwgciwgIndoaWxlIHNldHRpbmcgYXV0aCBrZXl0eXBlIik7CisgICAgciA9IGty YjVfYXV0aF9jb25fc2V0YWRkcnNfZnJvbV9mZChrNV9jb250ZXh0LGF1dGhfY29udGV4dCwgJnR0 eWZkKTsKKyAgICBpZiAocikKKyAgICAgICAgY29tX2VycihOVUxMLCByLCAid2hpbGUgc2V0dGlu ZyBhdXRoIGFkZHJzIik7CisgICAgciA9IGtyYjVfbWtfcmVxKGs1X2NvbnRleHQsICZhdXRoX2Nv bnRleHQsIGFwX29wdHMsCisgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9zcnYgPyBrcmI1X2Rf c3J2IDogS1JCNV9TRVJWSUNFX05BTUUsCisgICAgICAgICAgICAgICAgICAgIHN6SG9zdE5hbWUs ICZjaGVja3N1bSwgY2NhY2hlLCAmazVfYXV0aCk7CisgICAgaWYgKHIpCisgICAgICAgIGNvbV9l cnIoTlVMTCwgciwgIndoaWxlIG1ha2luZyByZXF1ZXN0Iik7CisjZWxzZSAvKiBIRUlNREFMICov CisgICAgYXV0aF9mbGFncyA9IEtSQjVfQVVUSF9DT05URVhUX1JFVF9USU1FOworI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICBhcF9vcHRzIHw9IEFQX09QVFNfVVNFX1NVQktFWTsKKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgVExTX1ZFUklGWQorICAgIGlmICgoaG93ICYgQVVU SF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKKyAgICAgICAgYXV0 aF9mbGFncyB8PSBLUkI1X0FVVEhfQ09OVEVYVF9ET19TRVFVRU5DRTsKKyAgICAgICAgaWYgKCFr cmI1X2Rfbm9fYWRkcmVzc2VzKQorICAgICAgICAgICAgciA9IGtyYjVfYXV0aF9jb25fZ2VuYWRk cnMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCB0dHlmZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEtSQjVfQVVUSF9DT05URVhUX0dFTkVSQVRFX1JFTU9URV9GVUxMX0FERFIp OworICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICBrcmI1X2F1dGhfY29uX3NldGZsYWdz KGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwgYXV0aF9mbGFncyk7CisgICAgciA9IGtyYjVfbWtf cmVxX2V4dGVuZGVkKGs1X2NvbnRleHQsICZhdXRoX2NvbnRleHQsIGFwX29wdHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmY2hlY2tzdW0sIG5ld19jcmVkcywgJms1X2F1dGgpOwor I2VuZGlmIC8qIEhFSU1EQUwgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoIXIp IHsKKyAgICAgICAgciA9IGtyYjVfYXV0aF9jb25fZ2V0bG9jYWxzdWJrZXkoazVfY29udGV4dCwg YXV0aF9jb250ZXh0LCAmbmV3a2V5KTsKKyAgICAgICAgaWYgKHIpCisgICAgICAgICAgICByID0g a3JiNV9hdXRoX2Nvbl9nZXRrZXkoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCAmbmV3a2V5KTsK KworICAgICAgICBpZiAoazVfc2Vzc2lvbl9rZXkpIHsKKyAgICAgICAgICAgIGtyYjVfZnJlZV9r ZXlibG9jayhrNV9jb250ZXh0LCBrNV9zZXNzaW9uX2tleSk7CisgICAgICAgICAgICBrNV9zZXNz aW9uX2tleSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5ld2tleSkgeworICAgICAg ICAvKgorICAgICAgICAqIGtlZXAgdGhlIGtleSBpbiBvdXIgcHJpdmF0ZSBzdG9yYWdlLCBidXQg ZG9uJ3QgdXNlIGl0CisgICAgICAgICogeWV0LS0tc2VlIGtlcmJlcm9zNV9yZXBseSgpIGJlbG93 CisgICAgICAgICovCisjaWZkZWYgSEVJTURBTAorICAgICAgICBpZiAoKG5ld2tleS0+a2V5dHlw ZSA9PSBFVFlQRV9ERVNfQ0JDX0NSQykgfHwKKyAgICAgICAgICAgICAobmV3a2V5LT5rZXl0eXBl ID09IEVUWVBFX0RFU19DQkNfTUQ1KSB8fAorICAgICAgICAgICAgIChuZXdrZXktPmtleXR5cGUg PT0gRVRZUEVfREVTX0NCQ19NRDQpKQorICAgICAgICB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJrNV9hdXRoX3NlbmQoKSIsIm5ld2tleS0+a2V5dHlwZSIsbmV3a2V5LT5rZXl0eXBlKTsKKyAg ICAgICAgICAgIGtyYjVfY29weV9rZXlibG9jayhrNV9jb250ZXh0LCBuZXdrZXksICZrNV9zZXNz aW9uX2tleSk7CisgICAgICAgIH0KKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgLyogbG9v ayBmb3IgYWxsIHBvc3NpYmxlIERFUyBrZXlzIGZpcnN0IC0ganVzdCBmb3IgY29tcGF0aWJpbGl0 eSAqLworICAgICAgICAvKiBvdGhlciBrZXkgdHlwZXMgYXJlIG11Y2ggbGVzcyBsaWtlbHkgdG8g YmUgYXZhaWxhYmxlICAgICAgICAgICovCisgICAgICAgIGlmICgobmV3a2V5LT5lbmN0eXBlID09 IEVOQ1RZUEVfREVTX0NCQ19DUkMpIHx8CisgICAgICAgICAgICAgKG5ld2tleS0+ZW5jdHlwZSA9 PSBFTkNUWVBFX0RFU19DQkNfTUQ1KSB8fAorICAgICAgICAgICAgIChuZXdrZXktPmVuY3R5cGUg PT0gRU5DVFlQRV9ERVNfQ0JDX01ENCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlYnVnKEYx MTEsIms1X2F1dGhfc2VuZCgpIiwibmV3a2V5LT5lbmN0eXBlIixuZXdrZXktPmVuY3R5cGUpOwor ICAgICAgICAgICAga3JiNV9jb3B5X2tleWJsb2NrKGs1X2NvbnRleHQsIG5ld2tleSwgJms1X3Nl c3Npb25fa2V5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgobmV3X2NyZWRzLT5rZXli bG9jay5lbmN0eXBlID09IEVOQ1RZUEVfREVTX0NCQ19DUkMpIHx8CisgICAgICAgICAgICAgICAg IChuZXdfY3JlZHMtPmtleWJsb2NrLmVuY3R5cGUgPT0gRU5DVFlQRV9ERVNfQ0JDX01ENSkpCisg ICAgICAgIHsKKyAgICAgICAgICAgIC8qIHVzZSB0aGUgc2Vzc2lvbiBrZXkgaW4gY3JlZGVudGlh bHMgaW5zdGVhZCAqLworICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9zZW5kKCkiLCJu ZXdfY3JlZHMtPmtleWJsb2NrLmVuY3R5cGUiLAorICAgICAgICAgICAgICAgICAgIG5ld19jcmVk cy0+a2V5YmxvY2suZW5jdHlwZSk7CisgICAgICAgICAgICBrcmI1X2NvcHlfa2V5YmxvY2soazVf Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19jcmVkcy0+a2V5 YmxvY2ssICZrNV9zZXNzaW9uX2tleSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobmV3 a2V5LT5lbmN0eXBlICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1 X2F1dGhfc2VuZCgpIiwibmV3a2V5LT5lbmN0eXBlIixuZXdrZXktPmVuY3R5cGUpOworICAgICAg ICAgICAga3JiNV9jb3B5X2tleWJsb2NrKGs1X2NvbnRleHQsIG5ld2tleSwgJms1X3Nlc3Npb25f a2V5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuZXdfY3JlZHMtPmtleWJsb2NrLmVu Y3R5cGUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogdXNlIHRoZSBzZXNzaW9uIGtl eSBpbiBjcmVkZW50aWFscyBpbnN0ZWFkICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9h dXRoX3NlbmQoKSIsIm5ld19jcmVkcy0+a2V5YmxvY2suZW5jdHlwZSIsCisgICAgICAgICAgICAg ICAgICAgbmV3X2NyZWRzLT5rZXlibG9jay5lbmN0eXBlKTsKKyAgICAgICAgICAgIGtyYjVfY29w eV9rZXlibG9jayhrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm bmV3X2NyZWRzLT5rZXlibG9jaywgJms1X3Nlc3Npb25fa2V5KTsKKyAgICAgICAgfQorICAgICAg ICBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIms1X2F1dGhfc2VuZCgpIiwiTk8gS0VZ IGluIG5ld2tleSIsMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgICAg IGtyYjVfZnJlZV9rZXlibG9jayhrNV9jb250ZXh0LCBuZXdrZXkpOworICAgIH0KKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisjaWZuZGVmIEhFSU1EQUwKKyAgICBrcmI1X2ZyZWVfY3JlZF9j b250ZW50cyhrNV9jb250ZXh0LCAmY3JlZHMpOworICAgIGtyYjVfZnJlZV9jcmVkcyhrNV9jb250 ZXh0LCBuZXdfY3JlZHMpOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICBrcmI1X2NjX2Nsb3Nl KGs1X2NvbnRleHQsY2NhY2hlKTsKKworICAgIGlmIChyKSB7CisgICAgICAgIGNvbV9lcnIoTlVM TCwgciwgIndoaWxlIGF1dGhvcml6aW5nICg0KS4iKTsKKyAgICAgICAga3JiNV9lcnJubyA9IHI7 CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykp OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorICAgIGtyYjVfZXJybm8gPSAwOworICAgIG1h a2VzdHIoJmtyYjVfZXJybXNnLCJPSyIpOworICAgIHJldHVybigxKTsKK30KKworLyoKKyAqIEs1 X2F1dGhfcmVwbHkgLS0gY2hlY2tzIHRoZSByZXBseSBmb3IgbXV0dWFsIGF1dGhlbnRpY2F0aW9u LgorICovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK2s1X2F1dGhfcmVwbHkoaW50IGhv dywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNudCkKKyNlbHNlCitrNV9hdXRoX3JlcGx5KGhv dyxkYXRhLGNudCkgaW50IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNlbmRp ZgoreworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBTZXNzaW9uX0tleSBza2V5OworI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKworICAgIGRhdGEgKz0gNDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc3RhdHVzIGJ5dGUgKi8KKyAgICBjbnQgLT01Owor CisgICAgc3dpdGNoICgqZGF0YSsrKSB7CisgICAgY2FzZSBLUkJfUkVKRUNUOgorICAgICAgICBp ZiAoY250ID4gMCkgeworICAgICAgICAgICAgY2hhciAqczsKKyAgICAgICAgICAgIGludCBsZW47 CisgICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCJLZXJiZXJvcyBWNSByZWZ1c2VzIGF1dGhl bnRpY2F0aW9uIGJlY2F1c2VcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3Ry VG1wKSk7CisgICAgICAgICAgICBsZW4gPSBzdHJsZW4oc3RyVG1wKTsKKyAgICAgICAgICAgIGlm ICggbGVuICsgY250IDwgc2l6ZW9mKHN0clRtcCkgKSB7CisgICAgICAgICAgICAgICAgcyA9IHN0 clRtcCArIHN0cmxlbihzdHJUbXApOworICAgICAgICAgICAgICAgIG1lbWNweShzLCBkYXRhLCBj bnQpOyAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICAgICAgICAgIHNbY250XSA9IDA7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRt cCwiS2VyYmVyb3MgVjUgcmVmdXNlcyBhdXRoZW50aWNhdGlvbiIsCisgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKHN0clRtcCkpOworICAgICAgICBrcmI1X2Vycm5vID0gLTE7CisgICAgICAg IG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7CisgICAgICAgIHByaW50ZigiS2VyYmVyb3Mg YXV0aGVudGljYXRpb24gZmFpbGVkIVxyXG4lc1xyXG4iLHN0clRtcCk7CisgICAgICAgIGF1dGhf ZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworCisg ICAgY2FzZSBLUkJfQUNDRVBUOgorICAgICAgICBpZiAoIW11dHVhbF9jb21wbGV0ZSkgeworICAg ICAgICAgICAgaWYgKChob3cgJiBBVVRIX0hPV19NQVNLKSA9PSBBVVRIX0hPV19NVVRVQUwgJiYg IW11dHVhbF9jb21wbGV0ZSkgeworICAgICAgICAgICAgICAgIGNrc3RybmNweShzdHJUbXAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyBWNSBhY2NlcHRlZCB5b3UsIGJ1dCBk aWRuJ3QgcHJvdmlkZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtdXR1YWwgYXV0aGVu dGljYXRpb24iLHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIktlcmJl cm9zIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCFcclxuJXNcclxuIixzdHJUbXApOworICAgICAgICAg ICAgICAgIGtyYjVfZXJybm8gPSAtMTsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vy cm1zZyxzdHJUbXApOworICAgICAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1Qp OworICAgICAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisK KyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICBpZiAoazVfc2Vzc2lvbl9rZXkpIHsK KyAgICAgICAgICAgICAgICBpZiAoIHRuX2F1dGhfa3JiNV9kZXNfYnVnICkgeyAgIC8qICFBTExP V19LUkJfM0RFU19FTkNSWVBUICovCisgICAgICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNL X0RFUzsKKyAgICAgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSA4OworI2lmZGVmIEhFSU1E QUwKKyAgICAgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmtleXZh bHVlLmRhdGE7CisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICAgICAgICAgIHNrZXku ZGF0YSA9IGs1X3Nlc3Npb25fa2V5LT5jb250ZW50czsKKyNlbmRpZiAvKiBIRUlNREFMICovCisg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBIRUlNREFMCisgICAgICAgICAgICAgICAg ICAgIHN3aXRjaCAoIGs1X3Nlc3Npb25fa2V5LT5rZXl0eXBlICkgeworICAgICAgICAgICAgICAg ICAgICBjYXNlIEVUWVBFX0RFU19DQkNfQ1JDOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEVU WVBFX0RFU19DQkNfTUQ1OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEVUWVBFX0RFU19DQkNf TUQ0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2tleS50eXBlID0gU0tfREVTOworICAgICAg ICAgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSA4OworICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg ICAgICAgICBza2V5LnR5cGUgPSBTS19HRU5FUklDOworICAgICAgICAgICAgICAgICAgICAgICAg c2tleS5sZW5ndGggPSBrNV9zZXNzaW9uX2tleS0+bGVuZ3RoOworICAgICAgICAgICAgICAgICAg ICAgICAgZW5jcnlwdF9kb250X3N1cHBvcnQoRU5DVFlQRV9ERVNfQ0ZCNjQpOworICAgICAgICAg ICAgICAgICAgICAgICAgZW5jcnlwdF9kb250X3N1cHBvcnQoRU5DVFlQRV9ERVNfT0ZCNjQpOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNrZXkuZGF0YSA9IGs1 X3Nlc3Npb25fa2V5LT5rZXl2YWx1ZS5kYXRhOworI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKCBrNV9zZXNzaW9uX2tleS0+ZW5jdHlwZSApIHsKKyAgICAg ICAgICAgICAgICAgICAgY2FzZSBFTkNUWVBFX0RFU19DQkNfQ1JDOgorICAgICAgICAgICAgICAg ICAgICBjYXNlIEVOQ1RZUEVfREVTX0NCQ19NRDU6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug RU5DVFlQRV9ERVNfQ0JDX01ENDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9 IFNLX0RFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gODsKKyAgICAg ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkudHlw ZSA9IFNLX0dFTkVSSUM7CisgICAgICAgICAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IGs1 X3Nlc3Npb25fa2V5LT5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0X2Rv bnRfc3VwcG9ydChFTkNUWVBFX0RFU19DRkI2NCk7CisgICAgICAgICAgICAgICAgICAgICAgICBl bmNyeXB0X2RvbnRfc3VwcG9ydChFTkNUWVBFX0RFU19PRkI2NCk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmNv bnRlbnRzOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgmc2tleSwgQVVUSF9DTElFTlRfVE9fU0VSVkVS KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgIH0K KyAgICAgICAgaWYgKCBjbnQgPiAwICkgeworICAgICAgICAgICAgY2hhciAqczsKKyAgICAgICAg ICAgIGludCBsZW47CisgICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCJLZXJiZXJvcyBWNSBh Y2NlcHRzIHlvdSBhcyAiLHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgICAgIGxlbiA9IHN0cmxl bihzdHJUbXApOworICAgICAgICAgICAgaWYgKCBsZW4gKyBjbnQgPCBzaXplb2Yoc3RyVG1wKSAp IHsKKyAgICAgICAgICAgICAgICBzID0gc3RyVG1wICsgc3RybGVuKHN0clRtcCk7CisgICAgICAg ICAgICAgICAgbWVtY3B5KHMsZGF0YSxjbnQpOworICAgICAgICAgICAgICAgIHNbY250XSA9IDA7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsK KyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7CisKKyNpZmRlZiBGT1JXQVJECisgICAg ICAgIGlmIChmb3J3YXJkX2ZsYWcKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgLyogTWFy YyBIb3Jvd2l0eiA8bWFyY0BtaXQuZWR1PiBoYXMgc3VjY2Vzc2Z1bGx5IGFyZ3VlZAorICAgICAg ICAgICAgICAgIHRoYXQgaXQgaXMgaW5kZWVkIHNhZmUgdG8gc2VuZCBGb3J3YXJkZWQgY3JlZGVu dGlhbHMKKyAgICAgICAgICAgICAgICB0byBhbiB1bnRydXN0ZWQgaG9zdC4KKyAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAmJiAoYXV0aF9ob3cgJiBBVVRIX0hPV19NQVNLKSA9PSBBVVRI X0hPV19NVVRVQUwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgKQorICAgICAg ICAgICAga2VyYmVyb3M1X2ZvcndhcmQoKTsKKyNlbmRpZiAvKiBGT1JXQVJEICovCisgICAgICAg IGtyYjVfZXJybm8gPSAwOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxzdHJUbXApOwor ICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7CisgICAgICAgIHJldHVybiBBVVRIX1NV Q0NFU1M7CisKKyAgICBjYXNlIEtSQjVfUkVTUE9OU0U6CisjaWZkZWYgVExTX1ZFUklGWQorICAg ICAgICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRf VExTICYmCisgICAgICAgICAgICAha3JiNV90bHNfdmVyaWZpZWQpIHsKKyAgICAgICAgICAgIHBy aW50ZigKKyAgICAiTWFuIGluIHRoZSBtaWRkbGUgYXR0YWNrIGRldGVjdGVkLiAgU2Vzc2lvbiB0 ZXJtaW5hdGVkLlxyXG4iKTsKKyNpZm5kZWYgQkVUQVRFU1QKKyAgICAgICAgICAgIG5ldGNsb3Mo KTsKKyNlbmRpZiAvKiBCRVRBVEVTVCAqLworICAgICAgICAgICAga3JiNV9lcnJubyA9IC0xOwor ICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csIlRMUyBub3QgdmVyaWZpZWQiKTsKKyAg ICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0dXJu IEFVVEhfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgICBpZigoc3NsX2FjdGl2ZV9mbGFnIHx8 IHRsc19hY3RpdmVfZmxhZykgJiYKKyAgICAgICAgICAgIChob3cgJiBBVVRIX0VOQ1JZUFRfTUFT SykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgeworICAgICAgICAgICAgcHJpbnRmKCJUTFMg c2Vzc2lvbiBwYXJhbWV0ZXJzIHZlcmlmaWVkIGJ5IEtlcmJlcm9zIDVcclxuIik7CisgICAgICAg IH0KKyNlbmRpZiAvKiBUTFNfVkVSSUZZICovCisgICAgICAgIGlmICgoaG93ICYgQVVUSF9IT1df TUFTSykgPT0gQVVUSF9IT1dfTVVUVUFMKSB7CisgICAgICAgICAgICAvKiB0aGUgcmVzdCBvZiB0 aGUgcmVwbHkgc2hvdWxkIGNvbnRhaW4gYSBrcmJfYXBfcmVwICovCisgICAgICAgICAgICBrcmI1 X2FwX3JlcF9lbmNfcGFydCAqcmVwbHk7CisgICAgICAgICAgICBrcmI1X2RhdGEgaW5idWY7Cisg ICAgICAgICAgICBrcmI1X2Vycm9yX2NvZGUgcjsKKworICAgICAgICAgICAgaW5idWYubGVuZ3Ro ID0gY250OworICAgICAgICAgICAgaW5idWYuZGF0YSA9IChjaGFyICopZGF0YTsKKworICAgICAg ICAgICAgaWYgKHIgPSBrcmI1X3JkX3JlcChrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsICZpbmJ1 ZiwgJnJlcGx5KSkgeworICAgICAgICAgICAgICAgIGNvbV9lcnIoTlVMTCwgciwgIndoaWxlIGF1 dGhvcml6aW5nLiAoNSkiKTsKKyAgICAgICAgICAgICAgICBrcmI1X2Vycm5vID0gcjsKKyAgICAg ICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8p KTsKKyAgICAgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgICAgICAgICAgfQorICAgICAgICAgICAg a3JiNV9mcmVlX2FwX3JlcF9lbmNfcGFydChrNV9jb250ZXh0LCByZXBseSk7CisKKyNpZmRlZiBD S19FTkNSWVBUSU9OCisgICAgICAgICAgICBpZiAoZW5jcnlwdF9mbGFnICYmIGs1X3Nlc3Npb25f a2V5KSB7CisgICAgICAgICAgICAgICAgaWYgKCB0bl9hdXRoX2tyYjVfZGVzX2J1ZyApIHsgICAv KiAhQUxMT1dfS1JCXzNERVNfRU5DUllQVCAqLworICAgICAgICAgICAgICAgICAgICBza2V5LnR5 cGUgPSBTS19ERVM7CisgICAgICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gODsKKyNpZmRl ZiBIRUlNREFMCisgICAgICAgICAgICAgICAgICAgIHNrZXkuZGF0YSA9IGs1X3Nlc3Npb25fa2V5 LT5rZXl2YWx1ZS5kYXRhOworI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgICAg ICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+Y29udGVudHM7CisjZW5kaWYgLyogSEVJTURB TCAqLworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgSEVJTURBTAorICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKCBrNV9zZXNzaW9uX2tleS0+a2V5dHlwZSApIHsKKyAgICAgICAg ICAgICAgICAgICAgY2FzZSBFVFlQRV9ERVNfQ0JDX0NSQzoKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSBFVFlQRV9ERVNfQ0JDX01ENToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFVFlQRV9E RVNfQ0JDX01ENDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0RFUzsK KyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gODsKKyAgICAgICAgICAgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNLX0dF TkVSSUM7CisgICAgICAgICAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9IGs1X3Nlc3Npb25f a2V5LT5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg c2tleS5kYXRhID0gazVfc2Vzc2lvbl9rZXktPmtleXZhbHVlLmRhdGE7CisjZWxzZSAvKiBIRUlN REFMICovCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoIGs1X3Nlc3Npb25fa2V5LT5lbmN0 eXBlICkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVOQ1RZUEVfREVTX0NCQ19DUkM6Cisg ICAgICAgICAgICAgICAgICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JDX01ENToKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSBFTkNUWVBFX0RFU19DQkNfTUQ0OgorICAgICAgICAgICAgICAgICAgICAg ICAgc2tleS50eXBlID0gU0tfREVTOworICAgICAgICAgICAgICAgICAgICAgICAgc2tleS5sZW5n dGggPSA4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBza2V5LnR5cGUgPSBTS19HRU5F UklDOworICAgICAgICAgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSBrNV9zZXNzaW9uX2tl eS0+bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNr ZXkuZGF0YSA9IGs1X3Nlc3Npb25fa2V5LT5jb250ZW50czsKKyNlbmRpZiAvKiBIRUlNREFMICov CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuY3J5cHRfc2Vzc2lvbl9rZXko JnNrZXksIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUik7CisgICAgICAgICAgICB9CisjZW5kaWYgLyog RU5DUllQVElPTiAqLworICAgICAgICAgICAgbXV0dWFsX2NvbXBsZXRlID0gMTsKKyAgICAgICAg fQorICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCJSZW1vdGUgbWFjaGluZSBoYXMgYmVlbiBtdXR1 YWxseSBhdXRoZW50aWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJUbXApKTsK KyAgICAgICAga3JiNV9lcnJubyA9IDA7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0 clRtcCk7CisgICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOworICAgICAgICBhdXRoX2Zp bmlzaGVkKEFVVEhfVVNFUik7CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisKKyNpZmRl ZiBGT1JXQVJECisgICAgY2FzZSBLUkI1X0ZPUldBUkRfQUNDRVBUOgorICAgICAgICBmb3J3YXJk ZWRfdGlja2V0cyA9IDE7CisgICAgICAgIGNrc3RybmNweShzdHJUbXAsIlJlbW90ZSBtYWNoaW5l IGhhcyBhY2NlcHRlZCBmb3J3YXJkZWQgY3JlZGVudGlhbHMiLAorICAgICAgICAgICAgICAgICAg c2l6ZW9mKHN0clRtcCkpOworICAgICAgICBrcmI1X2Vycm5vID0gMDsKKyAgICAgICAgbWFrZXN0 cigma3JiNV9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7 CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisKKyAgICBjYXNlIEtSQjVfRk9SV0FSRF9S RUpFQ1Q6CisgICAgICAgIGZvcndhcmRlZF90aWNrZXRzID0gMDsKKyAgICAgICAgaWYgKGNudCA+ IDApIHsKKyAgICAgICAgICAgIGNoYXIgKnM7CisgICAgICAgICAgICBpbnQgbGVuOworICAgICAg ICAgICAgbGVuID0gY2tzdHJuY3B5KHN0clRtcCwKKyAgICAgICAgICAgICAgICAgICAgICAiS2Vy YmVyb3MgVjUgcmVmdXNlcyBmb3J3YXJkZWQgY3JlZGVudGlhbHMgYmVjYXVzZSAiLAorICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgICAgICBpZiAoIGxlbiAr IGNudCA8IHNpemVvZihzdHJUbXApICkgeworICAgICAgICAgICAgICAgIHMgPSBzdHJUbXAgKyBz dHJsZW4oc3RyVG1wKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkocywgZGF0YSwgY250KTsKKyAg ICAgICAgICAgICAgICBzW2NudF0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UK KyAgICAgICAgICAgIGNrc3RybmNweShzdHJUbXAsICJLZXJiZXJvcyBWNSByZWZ1c2VzIGZvcndh cmRlZCBjcmVkZW50aWFscyIsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0clRtcCkp OworCisgICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOworICAgICAgICBrcmI1X2Vycm5v ID0gLTE7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7CisgICAgICAgIHJl dHVybiBBVVRIX1NVQ0NFU1M7CisjZW5kaWYgIC8qIEZPUldBUkQgKi8KKworI2lmZGVmIFRMU19W RVJJRlkKKyAgICBjYXNlIEtSQjVfVExTX1ZFUklGWToKKyAgICAgICAgaWYgKChob3cgJiBBVVRI X0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgeworICAgICAgICAgICAg a3JiNV9kYXRhIHJlcGx5LCBtc2c7CisgICAgICAgICAgICBjaGFyIHRsc192ZXJpZnlbMjRdOwor ICAgICAgICAgICAga3JiNV9yZXBsYXlfZGF0YSByZXBkYXRhOworICAgICAgICAgICAga3JiNV9l cnJvcl9jb2RlIHI7CisKKyAgICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0bHNf dmVyaWZ5WzBdLDEyKTsKKyAgICAgICAgICAgIHNzbF9nZXRfY2xpZW50X2ZpbmlzaGVkKCZ0bHNf dmVyaWZ5WzEyXSwxMik7CisKKyAgICAgICAgICAgIHJlcGx5LmRhdGEgPSAoY2hhciAqKWRhdGE7 CisgICAgICAgICAgICByZXBseS5sZW5ndGggPSBjbnQ7CisKKwkJCWtyYjVfYXV0aF9jb25fZ2Vu YWRkcnMoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LCB0dHlmZCwKKwkJCQkJCQkJICAgS1JCNV9B VVRIX0NPTlRFWFRfR0VORVJBVEVfUkVNT1RFX0ZVTExfQUREUik7CisKKyAgICAgICAgICAgIGlm IChyID0ga3JiNV9yZF9zYWZlKGs1X2NvbnRleHQsYXV0aF9jb250ZXh0LCZyZXBseSwmbXNnLCZy ZXBkYXRhKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbV9lcnIoIiIsIHIs ICJkZWNvZGluZyB0bHMgdmVyaWZpZXIiKTsKKyAgICAgICAgICAgICAgICBrcmI1X2Vycm5vID0g cjsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZywiVExTIHZlcmlmeSBmYWls dXJlIik7CisgICAgICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAg ICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoIG1zZy5sZW5ndGggPT0gMjQgJiYgIW1lbWNtcChtc2cuZGF0YSx0bHNfdmVyaWZ5 LDI0KSApCisgICAgICAgICAgICAgICAgIGtyYjVfdGxzX3ZlcmlmaWVkID0gMTsKKyAgICAgICAg ICAgIGtyYjVfZnJlZV9kYXRhX2NvbnRlbnRzKGs1X2NvbnRleHQsJm1zZyk7CisgICAgICAgICAg ICBpZiAoa3JiNV90bHNfdmVyaWZpZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuKEFVVEhfU1VD Q0VTUyk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJNYW4gaW4gdGhlIG1pZGRsZSBhdHRh Y2sgZGV0ZWN0ZWQuICBTZXNzaW9uIHRlcm1pbmF0ZWQuXHJcbiIpOworICAgICAgICBuZXRjbG9z KCk7CisgICAgICAgIGtyYjVfZXJybm8gPSAtMTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJt c2csIlRMUyB2ZXJpZnkgZmFpbHVyZSIpOworICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVK RUNUKTsKKyAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisjZW5kaWYgLyogQ0tfU1NMICov CisKKyAgICBkZWZhdWx0OgorICAgICAgICBrcmI1X2Vycm5vID0gLTE7CisgICAgICAgIG1ha2Vz dHIoJmtyYjVfZXJybXNnLCJVbmtub3duIHJlcGx5IHR5cGUiKTsKKyAgICAgICAgYXV0aF9maW5p c2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogVW5rbm93biByZXBseSB0eXBlICovCisgICAgfQorfQorCisjaWZk ZWYgRk9SV0FSRAorLyogRGVjb2RlLCBkZWNyeXB0IGFuZCBzdG9yZSB0aGUgZm9yd2FyZGVkIGNy ZWRzIGluIHRoZSBsb2NhbCBjY2FjaGUuICovCisvKiBOZWVkZWQgZm9yIEtSQjVfRk9SV0FSRCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3N0YXRpYyBrcmI1 X2Vycm9yX2NvZGUKK3JkX2FuZF9zdG9yZV9mb3JfY3JlZHMoY29udGV4dCwgYXV0aF9jb250ZXh0 LCBpbmJ1ZiwgY2xpZW50KQorICAgIGtyYjVfY29udGV4dCBjb250ZXh0OworICAgIGtyYjVfYXV0 aF9jb250ZXh0IGF1dGhfY29udGV4dDsKKyAgICBrcmI1X2RhdGEgKmluYnVmOworICAgIGtyYjVf Y29uc3RfcHJpbmNpcGFsIGNsaWVudDsKK3sKKyAgICBrcmI1X2NyZWRzICoqIGNyZWRzPU5VTEw7 CisgICAga3JiNV9lcnJvcl9jb2RlIHJldHZhbDsKKyAgICBrcmI1X2NjYWNoZSBjY2FjaGU9TlVM TDsKKworI2lmZGVmIEhFSU1EQUwKKyAgICAvKgorICAgIEhlaW1kYWwgVGVsbmV0ZCBjcmVhdGVz IHRoZSBjYWNoZSBmaWxlIGF0IHRoaXMgcG9pbnQgYW5kIHNldHMKKyAgICB0aGUgS1JCNUNDTkFN RSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgIHN0cnVjdCBwYXNzd2QgKnB3ZDsKKyAgICBj aGFyIGNjbmFtZVsxMDI0XTsKKworICAgIHB3ZCA9IGdldHB3bmFtKHN6VXNlck5hbWVSZXF1ZXN0 ZWQpOworICAgIGlmIChwd2QgPT0gTlVMTCkKKyAgICAgICAgYnJlYWs7CisgICAgc25wcmludGYo Y2NuYW1lLCBzaXplb2YoY2NuYW1lKS0xLCAiRklMRTovdG1wL2tyYjVjY18ldSIscHdkLT5wd191 aWQpOworICAgIHJldHZhbCA9IGtyYjVfY2NfcmVzb2x2ZShjb250ZXh0LGNjbmFtZSwmY2NhY2hl KTsKKworICAgIGNob3duKGNjbmFtZSArIDUsIHB3ZC0+cHdfdWlkLCAtMSk7CisgICAgKi8KKyNl bmRpZiAvKiBIRUlNREFMICovCisKKyAgICBpZiAocmV0dmFsID0gazVfZ2V0X2NjYWNoZShjb250 ZXh0LCZjY2FjaGUsTlVMTCkpCisgICAgICAgIHJldHVybihyZXR2YWwpOworCisjaWZkZWYgSEVJ TURBTAorICAgIGlmICgocmV0dmFsID0ga3JiNV9jY19pbml0aWFsaXplKGNvbnRleHQsIGNjYWNo ZSwgY2xpZW50KSkpCisgICAgICAgIHJldHVybihyZXR2YWwpOworCisgICAgaWYgKChyZXR2YWwg PSBrcmI1X3JkX2NyZWQoY29udGV4dCwgYXV0aF9jb250ZXh0LCBjY2FjaGUsIGluYnVmKSkpCisg ICAgICAgIHJldHVybihyZXR2YWwpOworI2Vsc2UgLyogSEVJTURBTCAqLworICAgIGlmICgocmV0 dmFsID0ga3JiNV9yZF9jcmVkKGNvbnRleHQsIGF1dGhfY29udGV4dCwgaW5idWYsICZjcmVkcywg TlVMTCkpKQorICAgICAgICByZXR1cm4ocmV0dmFsKTsKKworICAgIGlmICgocmV0dmFsID0ga3Ji NV9jY19pbml0aWFsaXplKGNvbnRleHQsIGNjYWNoZSwgY3JlZHNbMF0tPmNsaWVudCkpKQorICAg ICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBpZiAoKHJldHZhbCA9IGtyYjVfY2Nfc3RvcmVfY3Jl ZChjb250ZXh0LCBjY2FjaGUsIGNyZWRzWzBdKSkpCisgICAgICAgIGdvdG8gY2xlYW51cDsKKwor ICAgIGlmICgocmV0dmFsID0ga3JiNV9jY19jbG9zZShjb250ZXh0LCBjY2FjaGUpKSkKKyAgICAg ICAgZ290byBjbGVhbnVwOworCisgIGNsZWFudXA6CisgICAga3JiNV9mcmVlX3RndF9jcmVkcyhj b250ZXh0LCBjcmVkcyk7CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgIHJldHVybiByZXR2YWw7 Cit9CisjZW5kaWYgLyogRk9SV0FSRCAqLworCisvKgorICoKKyAqIEs1X2F1dGhfaXMuCisgKgor ICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworazVfYXV0aF9pcyhpbnQgaG93LCB1 bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK2s1X2F1dGhfaXMoaG93LGRhdGEs Y250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpkYXRhOyBpbnQgY250OworI2VuZGlmCit7Cisg ICAgaW50IHIgPSAwOworICAgIGtyYjVfcHJpbmNpcGFsIHNlcnZlcjsKKyAgICBrcmI1X2tleWJs b2NrICpuZXdrZXkgPSBOVUxMOworICAgIGtyYjVfZGF0YSBvdXRidWY7CisgICAgY2hhciBlcnJi dWZbMTI4XT0iIjsKKyAgICBjaGFyICpnZXRlbnYoKTsKKyNpZm5kZWYgSEVJTURBTAorICAgIGty YjVfYXV0aGVudGljYXRvciAqYXV0aGVudGljYXRvcjsKKyAgICBrcmI1X2tleXRhYiBrZXl0YWJp ZCA9IDA7CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgIGtyYjVfZGF0YSBpbmJ1ZjsKKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgU2Vzc2lvbl9LZXkgc2tleTsKKyNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCisgICAgY2hhciBwcmluY1syNTZdPSIiOworICAgIGludCBsZW47CisKKyAgICBk YXRhICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHN0 YXR1cyBieXRlICovCisgICAgY250IC09IDQ7CisKKyAgICBja2hleGR1bXAoIms1X2F1dGhfaXMg ZGF0YSIsZGF0YSxjbnQpOworICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJob3ciLGhvdyk7 CisKKyAgICBpZiAoY250LS0gPCAxKSB7CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpF Q1QpOworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgIH0KKyAgICBzd2l0Y2ggKCpk YXRhKyspIHsKKyAgICBjYXNlIEtSQl9BVVRIOgorICAgICAgICBrNV9hdXRoLmRhdGEgPSAoY2hh ciAqKWRhdGE7CisgICAgICAgIGs1X2F1dGgubGVuZ3RoID0gY250OworCisgICAgICAgIGRlYnVn KEYxMTAsIms1X2F1dGhfaXMiLCJLUkJfQVVUSCIsMCk7CisgICAgICAgIGRlYnVnKEYxMTEsIms1 X2F1dGhfaXMiLCJhdXRoX2NvbnRleHQiLGF1dGhfY29udGV4dCk7CisKKyAgICAgICAgaWYgKCFy ICYmICFhdXRoX2NvbnRleHQpIHsKKyAgICAgICAgICAgIHIgPSBrcmI1X2F1dGhfY29uX2luaXQo azVfY29udGV4dCwgJmF1dGhfY29udGV4dCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9h dXRoX2lzIiwia3JiNV9hdXRoX2Nvbl9pbml0IixyKTsKKyAgICAgICAgfQorCisjaWZkZWYgSEVJ TURBTAorICAgICAgICBpZiAoIXIpCisgICAgICAgICAgICByID0ga3JiNV9hdXRoX2Nvbl9zZXRh ZGRyc19mcm9tX2ZkKGs1X2NvbnRleHQsCisJCQkJCSAgICAgICBhdXRoX2NvbnRleHQsCisJCQkJ CSAgICAgICAmdHR5ZmQpOworICAgICAgICBpZiAoIXIpCisgICAgICAgICAgICByID0ga3JiNV9z b2NrX3RvX3ByaW5jaXBhbChrNV9jb250ZXh0LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICAi aG9zdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X05UX1NS Vl9IU1QsCisJCQkJICAgICAgICZzZXJ2ZXIpOworICAgICAgICBpZiAoIXIpCisjZWxzZSAvKiBI RUlNREFMICovCisgICAgICAgIGlmICghcikgeworICAgICAgICAgICAga3JiNV9yY2FjaGUgcmNh Y2hlID0gTlVMTDsKKworICAgICAgICAgICAgciA9IGtyYjVfYXV0aF9jb25fZ2V0cmNhY2hlKGs1 X2NvbnRleHQsIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnJjYWNoZSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwi a3JiNV9hdXRoX2Nvbl9nZXRyY2FjaGUiLHIpOworCisgICAgICAgICAgICBpZiAoIXIgJiYgIXJj YWNoZSkgeworICAgICAgICAgICAgICAgIC8qIERvIG5vdCByZXNvbHZlIHNlcnZlcidzIHByaW5j aXBhbCBuYW1lLCB3ZSB3aWxsIGNoZWNrICovCisgICAgICAgICAgICAgICAgLyogZm9yIHZhbGlk aXR5IGFmdGVyIHRoZSBrcmI1X3JkX3JlcSgpIGNhbGwuICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgICAgICByID0ga3JiNV9zbmFtZV90b19wcmluY2lwYWwoazVfY29udGV4dCwgMCwgMCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfTlRfU1JWX0hT VCwgJnNlcnZlcik7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiazVfYXV0aF9pcyIsImty YjVfc25hbWVfdG9fcHJpbmNpcGFsIixyKTsKKworICAgICAgICAgICAgICAgIGlmICghcikgewor ICAgICAgICAgICAgICAgICAgICByID0ga3JiNV9nZXRfc2VydmVyX3JjYWNoZShrNV9jb250ZXh0 LAorICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19jb21wb25lbnQoazVfY29udGV4 dCwgc2VydmVyLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZyY2FjaGUpOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRo X2lzIiwia3JiNV9nZXRfc2VydmVyX3JjYWNoZSIscik7CisgICAgICAgICAgICAgICAgICAgIGty YjVfZnJlZV9wcmluY2lwYWwoazVfY29udGV4dCwgc2VydmVyKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXIpIHsKKyAgICAgICAgICAgICAgICBy ID0ga3JiNV9hdXRoX2Nvbl9zZXRyY2FjaGUoazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfY29udGV4dCwgcmNhY2hlKTsKKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwia3JiNV9hdXRoX2Nvbl9zZXRyY2Fj aGUiLHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghciAmJiBrNV9r ZXl0YWIpIHsKKyAgICAgICAgICAgIHIgPSBrcmI1X2t0X3Jlc29sdmUoazVfY29udGV4dCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs1X2tleXRhYiwgJmtleXRhYmlkKTsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhfaXMiLCJrcmI1X2t0X3Jlc29sdmUiLHIpOwor ICAgICAgICB9CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICBpZiAoIXIpIHsKKyAgICAg ICAgICAgIHIgPSBrcmI1X3JkX3JlcShrNV9jb250ZXh0LCAmYXV0aF9jb250ZXh0LCAmazVfYXV0 aCwKKyNpZmRlZiBIRUlNREFMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlciwg TlVMTCwgTlVMTCwKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwga2V5dGFiaWQsIE5VTEwsCisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmazVfdGlja2V0KTsKKyAgICAgICAgICAgIGRlYnVnKEYx MTEsIms1X2F1dGhfaXMiLCJrcmI1X3JkX3JlcSIscik7CisgICAgICAgIH0KKyAgICAgICAgaWYg KHIpIHsKKyAgICAgICAgICAgICh2b2lkKSBja3N0cm5jcHkoZXJyYnVmLCAia3JiNV9yZF9yZXEg ZmFpbGVkOiAiLHNpemVvZihlcnJidWYpKTsKKyAgICAgICAgICAgICh2b2lkKSBja3N0cm5jYXQo ZXJyYnVmLCBlcnJvcl9tZXNzYWdlKHIpLHNpemVvZihlcnJidWYpKTsKKyAgICAgICAgICAgIGdv dG8gZXJyb3V0OworICAgICAgICB9CisjaWZkZWYgSEVJTURBTAorICAgICAgICBrcmI1X2ZyZWVf cHJpbmNpcGFsKGs1X2NvbnRleHQsIHNlcnZlcik7CisKKyAgICAgICAgeworICAgICAgICAgICAg Y2hhciB0eXBlX2NoZWNrWzI2XTsKKworICAgICAgICAgICAgLyogVVBEQVRFIGZvciBTVEFSVF9U TFMuIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMgYW5kIGluY2x1c2lvbiBvZiAqLworICAgICAgICAg ICAgLyogY2xpZW50IGFuZCB0aGVuIHNlcnZlciBmaW5pc2hlZCBtZXNzYWdlcy4gKi8KKworICAg ICAgICAgICAgdHlwZV9jaGVja1swXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OworICAgICAgICAg ICAgdHlwZV9jaGVja1sxXSA9IGhvdzsgICAgICAgIC8qIG5vdCBicm9rZW4gaW50byBwYXJ0cyAq LworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFT SykgPT0gQVVUSF9FTkNSWVBUX1NUQVJUX1RMUykgeworICAgICAgICAgICAgICAgIHNzbF9nZXRf Y2xpZW50X2ZpbmlzaGVkKCZ0eXBlX2NoZWNrWzJdLDEyKTsKKyAgICAgICAgICAgICAgICBzc2xf Z2V0X3NlcnZlcl9maW5pc2hlZCgmdHlwZV9jaGVja1sxNF0sMTIpOworICAgICAgICAgICAgICAg IGNraGV4ZHVtcCgiazVfYXV0aF9pcyB0eXBlX2NoZWNrIix0eXBlX2NoZWNrLDI2KTsKKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKworICAgICAgICAgICAgciA9IGtyYjVfdmVy aWZ5X2F1dGhlbnRpY2F0b3JfY2hlY2tzdW0oazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2NvbnRleHQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9jaGVjaywK KyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNL KSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSA/IDI2IDoKKyNlbmRpZiAvKiBDS19TU0wgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKTsK KyAgICAgICAgfQorI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICBsZW4gPSBrcmI1X3ByaW5j X2NvbXBvbmVudChrNV9jb250ZXh0LGs1X3RpY2tldC0+c2VydmVyLDApLT5sZW5ndGg7CisgICAg ICAgIGlmIChsZW4gPCAyNTYpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShwcmluYywK KyAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5jX2NvbXBvbmVudChrNV9jb250ZXh0LGs1X3Rp Y2tldC0+c2VydmVyLDApLT5kYXRhLAorICAgICAgICAgICAgICAgICAgIGxlbik7CisgICAgICAg ICAgICBwcmluY1tsZW5dID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHN0cmNtcCgo a3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0VfTkFNRSksIHByaW5jKSApCisg ICAgICAgIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIms1X2F1dGhfaXMgaW5jb3JyZWN0IHNl cnZpY2UgbmFtZSIscHJpbmMsMCk7CisgICAgICAgICAgICBja3N0cm5jcHkoZXJyYnVmLCJpbmNv cnJlY3Qgc2VydmljZSBuYW1lOiAiLHNpemVvZihlcnJidWYpKTsKKyAgICAgICAgICAgIGNrc3Ry bmNhdChlcnJidWYsa3JiNV9kX3NydiA/IGtyYjVfZF9zcnYgOiBLUkI1X1NFUlZJQ0VfTkFNRSwK KyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlcnJidWYpKTsKKyAgICAgICAgICAgIGNrc3Ry bmNhdChlcnJidWYsIiAhPSAiLHNpemVvZihlcnJidWYpKTsKKyAgICAgICAgICAgIGNrc3RybmNh dChlcnJidWYscHJpbmMsc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgZ290byBlcnJvdXQ7 CisgICAgICAgIH0KKworICAgICAgICByID0ga3JiNV9hdXRoX2Nvbl9nZXRhdXRoZW50aWNhdG9y KGs1X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmF1dGhlbnRpY2F0b3IpOworICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwia3Ji NV9hdXRoX2Nvbl9nZXRhdXRoZW50aWNhdG9yIixyKTsKKyAgICAgICAgaWYgKHIpIHsKKyAgICAg ICAgICAgICh2b2lkKSBja3N0cm5jcHkoZXJyYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAia3JiNV9hdXRoX2Nvbl9nZXRhdXRoZW50aWNhdG9yIGZhaWxlZDogIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVycmJ1ZikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICh2b2lkKSBja3N0cm5jYXQoZXJyYnVmLCBlcnJvcl9t ZXNzYWdlKHIpLHNpemVvZihlcnJidWYpKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3V0OworICAg ICAgICB9CisKKyAgICAgICAgaWYgKGF1dGhlbnRpY2F0b3ItPmNoZWNrc3VtKSB7CisgICAgICAg ICAgICBjaGFyIHR5cGVfY2hlY2tbMjZdOworICAgICAgICAgICAga3JiNV9jaGVja3N1bSAqY2tz dW0gPSBhdXRoZW50aWNhdG9yLT5jaGVja3N1bTsKKyAgICAgICAgICAgIGtyYjVfa2V5YmxvY2sg KmtleTsKKworICAgICAgICAgICAgLyogVVBEQVRFIGZvciBTVEFSVF9UTFMuIEFVVEhfRU5DUllQ VF9TVEFSVF9UTFMgYW5kIGluY2x1c2lvbiBvZiAqLworICAgICAgICAgICAgLyogY2xpZW50IGFu ZCB0aGVuIHNlcnZlciBmaW5pc2hlZCBtZXNzYWdlcy4gKi8KKworICAgICAgICAgICAgdHlwZV9j aGVja1swXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OworICAgICAgICAgICAgdHlwZV9jaGVja1sx XSA9IGhvdzsgICAgICAgIC8qIG5vdCBicm9rZW4gaW50byBwYXJ0cyAqLworI2lmZGVmIENLX1NT TAorICAgICAgICAgICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNS WVBUX1NUQVJUX1RMUykgeworICAgICAgICAgICAgICAgIHNzbF9nZXRfY2xpZW50X2ZpbmlzaGVk KCZ0eXBlX2NoZWNrWzJdLDEyKTsKKyAgICAgICAgICAgICAgICBzc2xfZ2V0X3NlcnZlcl9maW5p c2hlZCgmdHlwZV9jaGVja1sxNF0sMTIpOworICAgICAgICAgICAgICAgIGNraGV4ZHVtcCgiazVf YXV0aF9pcyB0eXBlX2NoZWNrIix0eXBlX2NoZWNrLDI2KTsKKyAgICAgICAgICAgIH0KKyNlbmRp ZiAvKiBDS19TU0wgKi8KKworICAgICAgICAgICAgciA9IGtyYjVfYXV0aF9jb25fZ2V0a2V5KGs1 X2NvbnRleHQsIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmtleSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwia3JiNV9h dXRoX2Nvbl9nZXRrZXkiLHIpOworICAgICAgICAgICAgaWYgKHIpIHsKKyAgICAgICAgICAgICAg ICAodm9pZCkgY2tzdHJuY3B5KGVycmJ1ZiwgImtyYjVfYXV0aF9jb25fZ2V0a2V5IGZhaWxlZDog IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXJyYnVmKSk7Cisg ICAgICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNhdChlcnJidWYsIGVycm9yX21lc3NhZ2Uociks c2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3V0OworICAgICAgICAg ICAgfQorCisgICAgICAgICAgICByID0ga3JiNV92ZXJpZnlfY2hlY2tzdW0oazVfY29udGV4dCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdW0tPmNoZWNrc3VtX3R5 cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3VtLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHlwZV9jaGVjaywKKyAgICAgICAgICAg ICAgICAgICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0spID09IEFVVEhfRU5DUllQVF9TVEFSVF9U TFMpID8gMjYgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktPmNvbnRlbnRzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktPmxlbmd0aAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgZGVidWcoRjExMSwiazVf YXV0aF9pcyIsImtyYjVfdmVyaWZ5X2NoZWNrc3VtIixyKTsKKyAgICAgICAgICAgIGlmIChyKSB7 CisgICAgICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNweShlcnJidWYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGZhaWxlZDogIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlcnJidWYpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICh2b2lkKSBja3N0cm5j YXQoZXJyYnVmLCBlcnJvcl9tZXNzYWdlKHIpLHNpemVvZihlcnJidWYpKTsKKyAgICAgICAgICAg ICAgICBnb3RvIGVycm91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtyYjVfZnJlZV9r ZXlibG9jayhrNV9jb250ZXh0LCBrZXkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1VTSU5HX1RFTE9Q VCkgeworICAgICAgICAgICAgICAgICh2b2lkKSBzdHJjcHkoZXJyYnVmLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJhdXRoZW50aWNhdG9yIGlzIG1pc3NpbmcgcmVxdWlyZWQgY2hl Y2tzdW0iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm91dDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIGtyYjVfZnJlZV9hdXRoZW50aWNhdG9yKGs1X2NvbnRleHQsIGF1 dGhlbnRpY2F0b3IpOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKworI2lmZGVmIFRMU19WRVJJRlkK KyAgICAgICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NU QVJUX1RMUykgeworICAgICAgICAgICAga3JiNV9kYXRhIGluLCBtc2c7CisgICAgICAgICAgICBj aGFyIHRsc192ZXJpZnlbMjRdOworICAgICAgICAgICAga3JiNV9yZXBsYXlfZGF0YSByZXBkYXRh OworCisgICAgICAgICAgICBzc2xfZ2V0X3NlcnZlcl9maW5pc2hlZCgmdGxzX3ZlcmlmeVswXSwx Mik7CisgICAgICAgICAgICBzc2xfZ2V0X2NsaWVudF9maW5pc2hlZCgmdGxzX3ZlcmlmeVsxMl0s MTIpOworCisgICAgICAgICAgICBpbi5kYXRhID0gdGxzX3ZlcmlmeTsKKyAgICAgICAgICAgIGlu Lmxlbmd0aCA9IDI0OworCisgICAgICAgICAgICBrcmI1X2F1dGhfY29uX2dlbmFkZHJzKGs1X2Nv bnRleHQsIGF1dGhfY29udGV4dCwgdHR5ZmQsCisJCQkJCQkJCSAgIEtSQjVfQVVUSF9DT05URVhU X0dFTkVSQVRFX0xPQ0FMX0ZVTExfQUREUik7CisgICAgICAgICAgICBpZiAociA9IGtyYjVfbWtf c2FmZShrNV9jb250ZXh0LGF1dGhfY29udGV4dCwmaW4sJm1zZywmcmVwZGF0YSkpIHsKKyAgICAg ICAgICAgICAgICBjb21fZXJyKCIiLCByLCAiZW5jb2RpbmcgdGxzIHZlcmlmaWVyIik7CisgICAg ICAgICAgICAgICAgKHZvaWQpIGNrc3RybmNhdChlcnJidWYsIGVycm9yX21lc3NhZ2Uociksc2l6 ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3V0OworICAgICAgICAgICAg fQorICAgICAgICAgICAgU2VuZEs1QXV0aFNCKEtSQjVfVExTX1ZFUklGWSwgbXNnLmRhdGEsIG1z Zy5sZW5ndGgpOworICAgICAgICAgICAga3JiNV9mcmVlX2RhdGFfY29udGVudHMoazVfY29udGV4 dCwmbXNnKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICBpZiAoKGhv dyAmIEFVVEhfSE9XX01BU0spID09IEFVVEhfSE9XX01VVFVBTCkgeworICAgICAgICAgICAgLyog ZG8gYXBfcmVwIHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgIGlmICgociA9IGtyYjVfbWtfcmVw KGs1X2NvbnRleHQsCisjaWZkZWYgSEVJTURBTAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZhdXRoX2NvbnRleHQsCisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXV0aF9jb250ZXh0LAorI2VuZGlmIC8qIEhFSU1EQUwgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0YnVmKSkpIHsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJrNV9hdXRoX2lzIiwia3JiNV9ta19yZXAiLHIpOworICAgICAg ICAgICAgICAgICh2b2lkKSBja3N0cm5jcHkoZXJyYnVmLCAiTWFrZSByZXBseSBmYWlsZWQ6ICIs c2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgICAgICh2b2lkKSBja3N0cm5jYXQoZXJyYnVm LCBlcnJvcl9tZXNzYWdlKHIpLHNpemVvZihlcnJidWYpKTsKKyAgICAgICAgICAgICAgICBnb3Rv IGVycm91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIms1X2F1dGhf aXMiLCJrcmI1X21rX3JlcCIscik7CisKKyAgICAgICAgICAgIFNlbmRLNUF1dGhTQihLUkI1X1JF U1BPTlNFLCBvdXRidWYuZGF0YSwgb3V0YnVmLmxlbmd0aCk7CisgICAgICAgICAgICBtdXR1YWxf Y29tcGxldGUgPSAxOworICAgICAgICB9CisKKyNpZmRlZiBIRUlNREFMCisgICAgICAgIHsKKyAg ICAgICAgICAgIGNoYXIgKiBuYW1lID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChrcmI1X3VucGFy c2VfbmFtZShrNV9jb250ZXh0LCBrNV90aWNrZXQtPmNsaWVudCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IHN6VXNlck5hbWVBdXRoZW50aWNhdGVkWzBdID0gJ1wwJzsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVBdXRoZW50aWNhdGVkLFVJREJV RkxFTixuYW1lKTsKKyAgICAgICAgICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgIGlmICgga3JiNV9hbmFtZV90 b19sb2NhbG5hbWUoazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgazVfdGlja2V0LT5lbmNfcGFydDItPmNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVUlEQlVGTEVOLHN6VXNlck5hbWVBdXRoZW50aWNhdGVkKSApCisg ICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGljYXRlZFswXSA9ICdcMCc7CisjZW5kaWYgLyog SEVJTURBTCAqLworCisgICAgICAgIFNlbmRLNUF1dGhTQihLUkJfQUNDRVBULCBzelVzZXJOYW1l QXV0aGVudGljYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1lQXV0aGVudGlj YXRlZFswXSA/IC0xIDogMCk7CisgICAgICAgIGFjY2VwdF9jb21wbGV0ZSA9IDE7CisgICAgICAg IGNrbWFrbXNnKHN0clRtcCxzaXplb2Yoc3RyVG1wKSwKKyAgICAgICAgICAgICAgICAgIktlcmJl cm9zNSBpZGVudGlmaWVzIGhpbSBhcyBgYCIsCisgICAgICAgICAgICAgICAgIHN6VXNlck5hbWVB dXRoZW50aWNhdGVkLCInJyIsTlVMTCk7CisgICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXAp OworCisgICAgICAgIGlmIChzelVzZXJOYW1lUmVxdWVzdGVkWzBdICYmCisgICAgICAgICAgICBr cmI1X2t1c2Vyb2soazVfY29udGV4dCwKKyNpZmRlZiBIRUlNREFMCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGs1X3RpY2tldC0+Y2xpZW50LAorI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICBrNV90aWNrZXQtPmVuY19wYXJ0Mi0+Y2xpZW50LAorI2VuZGlm IC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3pVc2VyTmFtZVJlcXVl c3RlZCkpCisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVkFMSUQpOworICAgICAgICBl bHNlCisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfVVNFUik7CisKKyAgICAgICAga3Ji NV9hdXRoX2Nvbl9nZXRyZW1vdGVzdWJrZXkoazVfY29udGV4dCwgYXV0aF9jb250ZXh0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld2tleSk7CisgICAgICAgIGlm IChrNV9zZXNzaW9uX2tleSkgeworICAgICAgICAgICAga3JiNV9mcmVlX2tleWJsb2NrKGs1X2Nv bnRleHQsIGs1X3Nlc3Npb25fa2V5KTsKKyAgICAgICAgICAgIGs1X3Nlc3Npb25fa2V5ID0gMDsK KyAgICAgICAgfQorICAgICAgICBpZiAobmV3a2V5KSB7CisgICAgICAgICAgICBrcmI1X2NvcHlf a2V5YmxvY2soazVfY29udGV4dCwgbmV3a2V5LCAmazVfc2Vzc2lvbl9rZXkpOworICAgICAgICAg ICAga3JiNV9mcmVlX2tleWJsb2NrKGs1X2NvbnRleHQsIG5ld2tleSk7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBrcmI1X2NvcHlfa2V5YmxvY2soazVfY29udGV4dCwKKyNpZmRlZiBI RUlNREFMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrNV90aWNrZXQtPnRpY2tl dC5rZXksCisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGs1X3RpY2tldC0+ZW5jX3BhcnQyLT5zZXNzaW9uLAorI2VuZGlmIC8qIEhFSU1EQUwgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJms1X3Nlc3Npb25fa2V5KTsKKyAgICAg ICAgfQorCisjaWZkZWYgQ0tfRU5DUllQVElPTgorI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgc2tl eS50eXBlID0gazVfc2Vzc2lvbl9rZXktPmtleXZhbHVlLmxlbmd0aCA9PSA4ID8gU0tfREVTIDog U0tfR0VORVJJQzsKKyAgICAgICAgc2tleS5sZW5ndGggPSBrNV9zZXNzaW9uX2tleS0+a2V5dmFs dWUubGVuZ3RoOworICAgICAgICBza2V5LmRhdGEgPSBrNV9zZXNzaW9uX2tleS0+a2V5dmFsdWUu ZGF0YTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgc2tleS50eXBlID0gazVfc2Vzc2lv bl9rZXktPmxlbmd0aCA9PSA4ID8gU0tfREVTIDogU0tfR0VORVJJQzsKKyAgICAgICAgc2tleS5s ZW5ndGggPSBrNV9zZXNzaW9uX2tleS0+bGVuZ3RoOworICAgICAgICBza2V5LmRhdGEgPSBrNV9z ZXNzaW9uX2tleS0+Y29udGVudHM7CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICBlbmNy eXB0X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX1NFUlZFUl9UT19DTElFTlQpOworI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgZGVidWcoRjEwMCwiazVfYXV0aF9pcyBBVVRIX1NV Q0NFU1MiLCIiLDApOworICAgICAgICBrcmI1X2Vycm5vID0gcjsKKyAgICAgICAgaWYgKCBrcmI1 X2Vycm5vICkKKyAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uo a3JiNV9lcnJubykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vy cm1zZyxzdHJUbXApOworICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNTOworCisjaWZkZWYgRk9S V0FSRAorICAgIGNhc2UgS1JCNV9GT1JXQVJEOgorICAgICAgICBpZiAoICFmb3J3YXJkX2ZsYWcg KSB7CisgICAgICAgICAgICBTZW5kSzVBdXRoU0IoS1JCNV9GT1JXQVJEX1JFSkVDVCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgImZvcndhcmRlZCBjcmVkZW50aWFscyBhcmUgYmVpbmcgcmVm dXNlZC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CisgICAgICAgICAgICByZXR1 cm4oQVVUSF9TVUNDRVNTKTsKKyAgICAgICAgfQorCisgICAgICAgIGluYnVmLmxlbmd0aCA9IGNu dDsKKyAgICAgICAgaW5idWYuZGF0YSA9IChjaGFyICopZGF0YTsKKyAgICAgICAgaWYgKAorI2lm bmRlZiBIRUlNREFMCisgICAgICAgICAgICAoIWtyYjVfZF9ub19hZGRyZXNzZXMgJiYKKyAgICAg ICAgICAgIChyID0ga3JiNV9hdXRoX2Nvbl9nZW5hZGRycyhrNV9jb250ZXh0LGF1dGhfY29udGV4 dCxnX2tzdHJlYW0tPmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS1JCNV9BVVRI X0NPTlRFWFRfR0VORVJBVEVfUkVNT1RFX0ZVTExfQUREUikpKSB8fAorI2VuZGlmIC8qIEhFSU1E QUwgKi8KKyAgICAgICAgICAgIChyID0gcmRfYW5kX3N0b3JlX2Zvcl9jcmVkcyhrNV9jb250ZXh0 LCBhdXRoX2NvbnRleHQsJmluYnVmLAorI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgazVfdGlja2V0LT5jbGllbnQKKyNlbHNlIC8qIEhFSU1E QUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazVfdGlja2V0 LT5lbmNfcGFydDItPmNsaWVudAorI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpIHsKKyAgICAgICAgICAgICh2b2lkKSBja3N0 cm5jcHkoZXJyYnVmLCAiUmVhZCBmb3J3YXJkZWQgY3JlZHMgZmFpbGVkOiAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVycmJ1ZikpOworICAgICAgICAgICAgKHZvaWQp IGNrc3RybmNhdChlcnJidWYsIGVycm9yX21lc3NhZ2Uociksc2l6ZW9mKGVycmJ1ZikpOworICAg ICAgICAgICAgU2VuZEs1QXV0aFNCKEtSQjVfRk9SV0FSRF9SRUpFQ1QsIGVycmJ1ZiwgLTEpOwor ICAgICAgICAgICAgcHJpbnRmKCJDb3VsZCBub3QgcmVhZCBmb3J3YXJkZWQgY3JlZGVudGlhbHNc clxuIik7CisgICAgICAgICAgICBrcmI1X2Vycm5vID0gcjsKKyAgICAgICAgICAgIG1ha2VzdHIo JmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICB9CisgICAg ICAgIGVsc2UgeworICAgICAgICAgICAgU2VuZEs1QXV0aFNCKEtSQjVfRk9SV0FSRF9BQ0NFUFQs IDAsIDApOworICAgICAgICAgICAgY2tzdHJuY3B5KHN0clRtcCwiRm9yd2FyZGVkIGNyZWRlbnRp YWxzIG9idGFpbmVkIixzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgICAgICBwcmludGYoIiVzXHJc biIsc3RyVG1wKTsKKyAgICAgICAgICAgIGtyYjVfZXJybm8gPSAwOworICAgICAgICAgICAgbWFr ZXN0cigma3JiNV9lcnJtc2csc3RyVG1wKTsKKyAgICAgICAgfQorICAgICAgICAvKiBBIGZhaWx1 cmUgdG8gYWNjZXB0IGZvcndhcmRlZCBjcmVkZW50aWFscyBpcyBub3QgYW4gKi8KKyAgICAgICAg LyogYXV0aGVudGljYXRpb24gZmFpbHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICov CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisjZW5kaWYgIC8qIEZPUldBUkQgKi8KKyAg ICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIlVua25vd24gS2VyYmVyb3Mgb3B0aW9uICVkXHJc biIsIGRhdGFbLTFdKTsKKyAgICAgICAgU2VuZEs1QXV0aFNCKEtSQl9SRUpFQ1QsIDAsIDApOwor ICAgICAgICBicmVhazsKKyAgICB9CisgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Cisg ICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKworICBlcnJvdXQ6CisgICAgU2VuZEs1QXV0aFNCKEtS Ql9SRUpFQ1QsIGVycmJ1ZiwgLTEpOworICAgIGtyYjVfZXJybm8gPSByOworICAgIG1ha2VzdHIo JmtyYjVfZXJybXNnLGVycmJ1Zik7CisgICAgcHJpbnRmKCIlc1xyXG4iLCBlcnJidWYpOworICAg IGlmIChhdXRoX2NvbnRleHQpIHsKKyAgICAgICAga3JiNV9hdXRoX2Nvbl9mcmVlKGs1X2NvbnRl eHQsIGF1dGhfY29udGV4dCk7CisgICAgICAgIGF1dGhfY29udGV4dCA9IDA7CisgICAgfQorICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7Cit9 CisKKyNpZmRlZiBGT1JXQVJECitpbnQKKyNpZmRlZiBDS19BTlNJQwora2VyYmVyb3M1X2Zvcndh cmQodm9pZCkKKyNlbHNlCitrZXJiZXJvczVfZm9yd2FyZCgpCisjZW5kaWYKK3sKKyAgICBrcmI1 X2Vycm9yX2NvZGUgcjsKKyAgICBrcmI1X2NjYWNoZSBjY2FjaGU9TlVMTDsKKyAgICBrcmI1X3By aW5jaXBhbCBjbGllbnQgPSAwOworICAgIGtyYjVfcHJpbmNpcGFsIHNlcnZlciA9IDA7CisgICAg a3JiNV9kYXRhIGZvcndfY3JlZHM7CisjaWZkZWYgSEVJTURBTAorICAgIGtyYjVfY3JlZHMgICAg ICBjcmVkczsKKyNlbmRpZiAvKiBIRUlNREFMICovCisKKyAgICBmb3J3X2NyZWRzLmRhdGEgPSAw OworCisgICAgciA9IGs1X2dldF9jY2FjaGUoazVfY29udGV4dCwmY2NhY2hlLE5VTEwpOworICAg IGlmICggciApIHsKKyAgICAgICAgY29tX2VycihOVUxMLCByLCAiS2VyYmVyb3MgVjU6IGNvdWxk IG5vdCBnZXQgZGVmYXVsdCBjY2FjaGUiKTsKKyAgICAgICAga3JiNV9lcnJubyA9IHI7CisgICAg ICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAg ICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBpZiAoKHIgPSBrcmI1X2Nj X2dldF9wcmluY2lwYWwoazVfY29udGV4dCwgY2NhY2hlLCAmY2xpZW50KSkpIHsKKyAgICAgICAg Y29tX2VycihOVUxMLCByLCAiS2VyYmVyb3MgVjU6IGNvdWxkIG5vdCBnZXQgZGVmYXVsdCBwcmlu Y2lwYWwiKTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworI2lmZGVmIEhFSU1EQUwK KyAgICBtZW1zZXQoJmNyZWRzLCAwLCBzaXplb2YoY3JlZHMpKTsKKyAgICBjcmVkcy5jbGllbnQg PSBjbGllbnQ7CisKKyAgICBpZiAociA9IGtyYjVfYnVpbGRfcHJpbmNpcGFsKGs1X2NvbnRleHQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcmVkcy5zZXJ2ZXIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmxlbihjbGllbnQtPnJlYWxtKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNsaWVudC0+cmVhbG0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAia3JidGd0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC0+cmVh bG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpIHsKKyAgICAgICAg Y29tX2VycihOVUxMLCByLCAiS2VyYmVyb3MgVjU6IGNvdWxkIG5vdCBnZXQgcHJpbmNpcGFsIik7 CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBjcmVkcy50aW1lcy5lbmR0aW1l ID0gMDsKKworICAgIGlmIChyID0ga3JiNV9nZXRfZm9yd2FyZGVkX2NyZWRzKGs1X2NvbnRleHQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfY29udGV4dCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NhY2hlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzekhvc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmY3JlZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3J3 X2NyZWRzKSkgeworICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBWNTogZXJyb3Ig Z2V0dGluZyBmb3J3YXJkZWQgY3JlZHMiKTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0K KyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAvKiB3ZSBzaG91bGQgbm90IG5lZWQgdG8gbWFrZSB0 aGlzIGNhbGwgc2luY2Ugd2UgYXJlIHN0b3JpbmcgdGhlICovCisgICAgLyogc2VydmVyJ3MgcHJp bmNpcGFsIGluIGZ3ZF9zZXJ2ZXIgZnJvbSBvdXIgY2FsbCB0byAgICAgICAgICAgICAqLworICAg IC8qIGtyYjVfc25hbWVfdG9fcHJpbmNpcGFsKCkgaW4gazVfYXV0aF9zZW5kKCkgICAgICAgICAg ICAgICAgICAgKi8KKyAgICBpZiAoZndkX3NlcnZlciA9PSBOVUxMKSB7CisgICAgICAgIGlmICgo ciA9IGtyYjVfc25hbWVfdG9fcHJpbmNpcGFsKGs1X2NvbnRleHQsIHN6SG9zdE5hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6IEtS QjVfU0VSVklDRV9OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgS1JCNV9OVF9TUlZfSFNULCAmc2VydmVyKSkpIHsKKyAgICAgICAgICAgIGNvbV9lcnIoTlVM TCwgciwgIktlcmJlcm9zIFY1OiBjb3VsZCBub3QgbWFrZSBzZXJ2ZXIgcHJpbmNpcGFsIik7Cisg ICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWty YjVfZF9ub19hZGRyZXNzZXMgJiYKKyAgICAgICAgKHIgPSBrcmI1X2F1dGhfY29uX2dlbmFkZHJz KGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwgZ19rc3RyZWFtLT5mZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVfTE9DQUxfRlVMTF9BRERS KSkpCisgICAgeworICAgICAgICBjb21fZXJyKE5VTEwsIHIsICJLZXJiZXJvcyBWNTogY291bGQg bm90IGdlbiBsb2NhbCBmdWxsIGFkZHJlc3MiKTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAg IH0KKworICAgIGlmIChyID0ga3JiNV9md2RfdGd0X2NyZWRzKGs1X2NvbnRleHQsIGF1dGhfY29u dGV4dCwgMCwgY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd2Rfc2Vy dmVyID8gZndkX3NlcnZlciA6IHNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2NhY2hlLCBmb3J3YXJkYWJsZV9mbGFnLCAmZm9yd19jcmVkcykpIHsKKyAgICAgICAgY29t X2VycihOVUxMLCByLCAiS2VyYmVyb3MgVjU6IGVycm9yIGdldHRpbmcgZm9yd2FyZGFibGUgY3Jl ZGVudGlhbHMiKTsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKyNlbmRpZiAvKiBIRUlN REFMICovCisKKyAgICAvKiBTZW5kIGZvcndhcmRlZCBjcmVkZW50aWFscyAqLworICAgIGlmICgh U2VuZEs1QXV0aFNCKEtSQjVfRk9SV0FSRCwgZm9yd19jcmVkcy5kYXRhLCBmb3J3X2NyZWRzLmxl bmd0aCkpIHsKKyAgICAgICAgcHJpbnRmKCJLZXJiZXJvcyBWNSBmb3J3YXJkaW5nIGVycm9yIVxy XG4lc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICAiTm90IGVub3VnaCByb29tIGZvciBhdXRo ZW50aWNhdGlvbiBkYXRhIik7CisgICAgfQorCitjbGVhbnVwOgorICAgIGlmIChjbGllbnQpCisg ICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoazVfY29udGV4dCwgY2xpZW50KTsKKyAgICBpZiAo c2VydmVyKQorICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGs1X2NvbnRleHQsIHNlcnZlcik7 CisjaWZkZWYgSEVJTURBTAorICAgIGtyYjVfZGF0YV9mcmVlKCZmb3J3X2NyZWRzKTsKKyNlbHNl IC8qIEhFSU1EQUwgKi8KKyAgICBrcmI1X2ZyZWVfZGF0YV9jb250ZW50cyhrNV9jb250ZXh0LCZm b3J3X2NyZWRzKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAga3JiNV9jY19jbG9zZShrNV9j b250ZXh0LCBjY2FjaGUpOworCisgICAga3JiNV9lcnJubyA9IHI7CisgICAgbWFrZXN0cigma3Ji NV9lcnJtc2csa3JiNV9lcnJubz9lcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pOiJPSyIpOworICAg IHJldHVybihyP0FVVEhfRkFJTFVSRTpBVVRIX1NVQ0NFU1MpOworfQorI2VuZGlmIC8qIEZPUldB UkQgKi8KKyNlbHNlIC8qIEtSQjUgKi8KK2ludAorY2tfa3JiNV9hdXRvZ2V0X1RHVChjaGFyICog ZHVtbXkpCit7CisgICAgcmV0dXJuKDApOworfQorI2lmZGVmIENLX0tFUkJFUk9TCitpbnQKKyNp ZmRlZiBDS19BTlNJQworY2tfa3JiNV9pbml0VEdUKCBzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCwg c3RydWN0IGtyYjVfaW5pdF9kYXRhICogaW5pdCwKKyAgICAgICAgICAgICAgICAgc3RydWN0IGty YjRfaW5pdF9kYXRhICogazRfaW5pdCkKKyNlbHNlCitja19rcmI1X2luaXRUR1Qob3AsaW5pdCxr NF9pbml0KQorICAgIGtyYl9vcF9kYXRhICogb3A7IHN0cnVjdCBrcmI1X2luaXRfZGF0YSAqIGlu aXQ7CisgICAgc3RydWN0IGtyYjRfaW5pdF9kYXRhICogazRfaW5pdDsKKyNlbmRpZiAvKiBDS19B TlNJQyovCit7CisgICAgcmV0dXJuKC0xKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Nr X2tyYjVfZGVzdHJveShzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkKKyNlbHNlCitja19rcmI1X2Rl c3Ryb3kob3ApIHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9wOworI2VuZGlmCit7CisgICAgcmV0dXJu KC0xKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfbGlzdF9jcmVkcyhzdHJ1 Y3Qga3JiX29wX2RhdGEgKiBvcCwgc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEgKiBsYykKKyNl bHNlCitja19rcmI1X2xpc3RfY3JlZHMob3AsbGMpCisgICAgc3RydWN0IGtyYl9vcF9kYXRhICog b3A7IHN0cnVjdCBrcmI1X2xpc3RfY3JlZF9kYXRhICogbGM7CisjZW5kaWYKK3sKKyAgICByZXR1 cm4oLTEpOworfQorI2Vsc2UgLyogQ0tfS0VSQkVST1MgKi8KK2ludAorI2lmZGVmIENLX0FOU0lD Citja19rcmI1X2luaXRUR1Qodm9pZCAqIG9wLCB2b2lkICogaW5pdCwgdm9pZCAqIGs0X2luaXQg KQorI2Vsc2UKK2NrX2tyYjVfaW5pdFRHVChvcCxpbml0LGs0X2luaXQpCisgICAgdm9pZCAqIG9w OyB2b2lkICogaW5pdDsgdm9pZCAqIGs0X2luaXQ7CisjZW5kaWYgLyogQ0tfQU5TSUMqLworewor ICAgIHJldHVybigtMSk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI1X2Rlc3Ry b3kodm9pZCAqIG9wKQorI2Vsc2UKK2NrX2tyYjVfZGVzdHJveShvcCkgdm9pZCAqIG9wOworI2Vu ZGlmCit7CisgICAgcmV0dXJuKC0xKTsKK30KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2ty YjVfbGlzdF9jcmVkcyh2b2lkICogb3AsIHZvaWQgKiBsYykKKyNlbHNlCitja19rcmI1X2xpc3Rf Y3JlZHMob3AsbGMpCisgICAgdm9pZCAqIG9wOyB2b2lkICogbGM7CisjZW5kaWYKK3sKKyAgICBy ZXR1cm4oLTEpOworfQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogS1JCNSAq LworCisjaWZkZWYgR1NTQVBJX0tSQjUKKy8qCisgKgorICogZ3NzazVfYXV0aF9zZW5kIC0gZ2V0 cyBhdXRoZW50aWNhdGlvbiBiaXRzIHdlIG5lZWQgdG8gc2VuZCB0byBLREMuCisgKgorICogUmVz dWx0IGlzIGxlZnQgaW4gazVfYXV0aAorICoKKyAqIFJldHVybnM6IDAgb24gZmFpbHVyZSwgMSBv biBzdWNjZXNzCisgKgorICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworZ3NzazVf YXV0aF9zZW5kKGludCBob3csIGludCBlbmNyeXB0LCBpbnQgZm9yd2FyZCkKKyNlbHNlCitnc3Nr NV9hdXRoX3NlbmQoaG93LGVuY3J5cHQsZm9yd2FyZCkgaW50IGhvdzsgaW50IGVuY3J5cHQ7IGlu dCBmb3J3YXJkOworI2VuZGlmCit7CisgICAgT01fdWludDMyIG1hal9zdGF0LCBtaW5fc3RhdDsK KyNpZmRlZiBLUkI1CisgICAgY2hhciAqIHJlYWxtID0gTlVMTDsKKyAgICBjaGFyIHRndFsyNTZd OworI2VuZGlmIC8qIEtSQjUgKi8KKworICAgIGdzc19jaGFuLmluaXRpYXRvcl9hZGRydHlwZSA9 IEdTU19DX0FGX0lORVQ7IC8qIE9NX3VpbnQzMiAgKi8KKyAgICBnc3NfY2hhbi5pbml0aWF0b3Jf YWRkcmVzcy5sZW5ndGggPSA0OworICAgIGdzc19jaGFuLmluaXRpYXRvcl9hZGRyZXNzLnZhbHVl ID0gJm15Y3RsYWRkci5zaW5fYWRkci5zX2FkZHI7CisgICAgZ3NzX2NoYW4uYWNjZXB0b3JfYWRk cnR5cGUgPSBHU1NfQ19BRl9JTkVUOyAvKiBPTV91aW50MzIgKi8KKyAgICBnc3NfY2hhbi5hY2Nl cHRvcl9hZGRyZXNzLmxlbmd0aCA9IDQ7CisgICAgZ3NzX2NoYW4uYWNjZXB0b3JfYWRkcmVzcy52 YWx1ZSA9ICZoaXNjdGxhZGRyLnNpbl9hZGRyLnNfYWRkcjsKKyAgICBnc3NfY2hhbi5hcHBsaWNh dGlvbl9kYXRhLmxlbmd0aCA9IDA7CisgICAgZ3NzX2NoYW4uYXBwbGljYXRpb25fZGF0YS52YWx1 ZSA9IDA7CisKKyNpZmRlZiBLUkI1CisgICAgcmVhbG0gPSBja19rcmI1X3JlYWxtb2Zob3N0KGZ0 cF9ob3N0KTsKKyAgICBpZiAocmVhbG0pIHsKKyAgICAgICAgY2ttYWttc2codGd0LHNpemVvZih0 Z3QpLCJrcmJ0Z3QvIixyZWFsbSwiQCIscmVhbG0pOworICAgICAgICBkZWJ1ZyhGMTEwLCJmdHBf YXV0aChHU1NBUEkpIFRHVCIsdGd0LDApOworICAgICAgICBpZiAoIGtyYjVfYXV0b2dldCAmJgor ICAgICAgICAgICAgICEoKGNrX2tyYjVfdGt0X2lzdmFsaWQoTlVMTCx0Z3QpID4gMCkgfHwKKyAg ICAgICAgICAgICAgICAoY2tfa3JiNV9pc190Z3RfdmFsaWQoKSA+IDApKSApCisgICAgICAgICAg ICBja19rcmI1X2F1dG9nZXRfVEdUKHJlYWxtKTsKKyAgICB9CisjZW5kaWYgLyogS1JCNSAqLwor CisgICAgLyogQmxvYiBmcm9tIGdzcy1jbGllbnQgKi8KKyAgICAvKiBob3N0QGhvc3RuYW1lICov CisgICAgLyogdGhlIFY1IEdTU0FQSSBiaW5kaW5nIGNhbm9uaWNhbGl6ZXMgdGhpcyBmb3IgdXMu Li4gKi8KKyAgICBja21ha21zZyhnc3Nfc3RidWYsR1NTX0JVRlNJWiwKKyAgICAgICAgICAgICBr cmI1X2Rfc3J2ID8ga3JiNV9kX3NydiA6IEtSQjVfU0VSVklDRV9OQU1FLAorICAgICAgICAgICAg ICJAIiwKKyAgICAgICAgICAgICBzekhvc3ROYW1lLAorICAgICAgICAgICAgICBOVUxMCisgICAg ICAgICAgICAgICk7CisgICAgZnByaW50ZihzdGRlcnIsICJBdXRoZW50aWNhdGluZyB0byA8JXM+ Li4uXG4iLCBnc3Nfc3RidWYpOworICAgIGdzc19zZW5kX3Rvay52YWx1ZSA9IGdzc19zdGJ1ZjsK KyAgICBnc3Nfc2VuZF90b2subGVuZ3RoID0gc3RybGVuKGdzc19zdGJ1Zik7CisgICAgbWFqX3N0 YXQgPSBnc3NfaW1wb3J0X25hbWUoJm1pbl9zdGF0LCAmZ3NzX3NlbmRfdG9rLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnc3NfbnRfc2VydmljZV9uYW1lLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmZ3NzX3RhcmdldF9uYW1lCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgaWYgKG1hal9zdGF0ICE9IEdTU19TX0NPTVBMRVRFKSB7Cisg ICAgICAgIHVzZXJfZ3NzX2Vycm9yKG1hal9zdGF0LCBtaW5fc3RhdCwgInBhcnNpbmcgbmFtZSIp OworICAgICAgICBzZWN1cmVfZXJyb3IoIm5hbWUgcGFyc2VkIDwlcz5cbiIsIGdzc19zdGJ1Zik7 CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgdG9rZW5fcHRyID0gR1NTX0NfTk9fQlVG RkVSOworICAgIGdjb250ZXh0ID0gR1NTX0NfTk9fQ09OVEVYVDsgLyogc3RydWN0dXJlIGNvcHkg Ki8KKworICAgIGZwcmludGYoc3RkZXJyLCAiY2FsbGluZyBnc3NfaW5pdF9zZWNfY29udGV4dFxu Iik7CisgICAgbWFqX3N0YXQgPQorICAgICAgICBnc3NfaW5pdF9zZWNfY29udGV4dCgmbWluX3N0 YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19OT19DUkVERU5USUFMLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdjb250ZXh0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3NzX3RhcmdldF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3NzX21lY2hfa3JiNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19D X01VVFVBTF9GTEFHIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX1JFUExB WV9GTEFHIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZm9yd2FyZCAmJiBmb3J3 YXJkX2ZsYWcpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NTX0NfREVMRUdf RkxBRyA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChrcmI1X2Rfbm9fYWRkcmVzc2VzID8gLyogY2hhbm5lbCBiaW5k aW5ncyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19OT19DSEFOTkVM X0JJTkRJTkdTIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdzc19jaGFuKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc190b2tlbl9wdHIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgLyogaWdub3JlIG1lY2ggdHlwZSAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdzc19zZW5kX3RvaywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsICAgICAvKiBpZ25vcmUgcmV0X2ZsYWdzICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOyAgICAgICAgLyogaWdub3JlIHRpbWVfcmVjICovCisKKworICAgICAgICBpZiAobWFqX3N0 YXQgIT0gR1NTX1NfQ09NUExFVEUgJiYKKyAgICAgICAgICAgICBtYWpfc3RhdCAhPSBHU1NfU19D T05USU5VRV9ORUVERUQpIHsKKyAgICAgICAgICAgIHVzZXJfZ3NzX2Vycm9yKG1hal9zdGF0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9zdGF0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJpbml0aWFsaXppbmcgY29udGV4dCIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgZ3NzX3JlbGVhc2VfbmFtZSgmbWluX3N0YXQsICZnc3NfdGFy Z2V0X25hbWUpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAgIHJl dHVybigxKTsKK30KKworLyoKKyAqIGdzc2s1X2F1dGhfcmVwbHkgLS0gY2hlY2tzIHRoZSByZXBs eSBmb3IgbXV0dWFsIGF1dGhlbnRpY2F0aW9uLgorICovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tf QU5TSUMKK2dzc2s1X2F1dGhfcmVwbHkoaW50IGhvdywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50 IGNudCkKKyNlbHNlCitnc3NrNV9hdXRoX3JlcGx5KGhvdyxkYXRhLGNudCkgaW50IGhvdzsgdW5z aWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNlbmRpZgoreworICAgIGRhdGEgKz0gNDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc3RhdHVzIGJ5dGUgKi8K KyAgICBjbnQgLT01OworCisgICAgc3dpdGNoICgqZGF0YSsrKSB7CisgICAgY2FzZSBHU1NfUkVK RUNUOgorICAgICAgICBpZiAoY250ID4gMCkgeworICAgICAgICAgICAgY2hhciAqczsKKyAgICAg ICAgICAgIGludCBsZW47CisgICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCJHU1NBUEkgcmVm dXNlcyBhdXRoZW50aWNhdGlvbiBiZWNhdXNlXHJcbiIsCisgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKHN0clRtcCkpOworICAgICAgICAgICAgbGVuID0gc3RybGVuKHN0clRtcCk7CisgICAg ICAgICAgICBpZiAoIGxlbiArIGNudCA8IHNpemVvZihzdHJUbXApICkgeworICAgICAgICAgICAg ICAgIHMgPSBzdHJUbXAgKyBzdHJsZW4oc3RyVG1wKTsKKyAgICAgICAgICAgICAgICBtZW1jcHko cywgZGF0YSwgY250KTsgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICBzW2Nu dF0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNrc3Ry bmNweShzdHJUbXAsIkdTU0FQSSByZWZ1c2VzIGF1dGhlbnRpY2F0aW9uIiwKKyAgICAgICAgICAg ICAgICAgICAgICBzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgIHByaW50ZigiR1NTQVBJIGF1dGhl bnRpY2F0aW9uIGZhaWxlZCFcclxuJXNcclxuIixzdHJUbXApOworICAgICAgICBhdXRoX2Zpbmlz aGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKworICAgIGNh c2UgR1NTX0FDQ0VQVDoKKyAgICAgICAgaWYgKCBjbnQgPiAwICkgeworICAgICAgICAgICAgY2hh ciAqczsKKyAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICBja3N0cm5jcHkoc3RyVG1w LCJHU1NBUEkgYWNjZXB0cyB5b3UgYXMgIixzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgICAgICBs ZW4gPSBzdHJsZW4oc3RyVG1wKTsKKyAgICAgICAgICAgIGlmICggbGVuICsgY250IDwgc2l6ZW9m KHN0clRtcCkgKSB7CisgICAgICAgICAgICAgICAgcyA9IHN0clRtcCArIHN0cmxlbihzdHJUbXAp OworICAgICAgICAgICAgICAgIG1lbWNweShzLGRhdGEsY250KTsKKyAgICAgICAgICAgICAgICBz W2NudF0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFjY2VwdF9jb21w bGV0ZSA9IDE7CisgICAgICAgIHByaW50ZigiJXNcclxuIixzdHJUbXApOworICAgICAgICBhdXRo X2ZpbmlzaGVkKEFVVEhfVVNFUik7CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisKKyAg ICBjYXNlIEdTU19SRVNQT05TRToKKyAgICAgICAgZ3NzX3Rva2VuX3B0ciA9ICZnc3NfcmVjdl90 b2s7CisgICAgICAgIGdzc19yZWN2X3Rvay52YWx1ZSA9IGRhdGE7CisgICAgICAgIGdzc19yZWN2 X3Rvay5sZW5ndGggPSBjbnQ7CisKKyAgICAgICAgbWFqX3N0YXQgPQorICAgICAgICAgICAgZ3Nz X2luaXRfc2VjX2NvbnRleHQoJm1pbl9zdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdTU19DX05PX0NSRURFTlRJQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmdjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc190 YXJnZXRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Nfa3JiNV9t ZWNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX01VVFVBTF9GTEFH IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19SRVBMQVlfRkxBRyB8 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmRfZmxhZyA/CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1NfQ19ERUxFR19GTEFHIDogMCksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoa3JiNV9kX25vX2FkZHJlc3NlcyA/IC8qIGNoYW5uZWwgYmluZGluZ3Mg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTU19DX05PX0NIQU5ORUxf QklORElOR1MgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdzc19jaGFu KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfdG9rZW5fcHRyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIGlnbm9yZSBtZWNoIHR5cGUg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3NzX3NlbmRfdG9rLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIGlnbm9yZSByZXRfZmxhZ3Mg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsgICAgLyogaWdub3JlIHRpbWVfcmVjICovCisKKyAgICAg ICAgaWYgKCBtYWpfc3RhdCA9PSBHU1NfU19DT01QTEVURSApCisgICAgICAgIHsKKworICAgICAg ICB9IGVsc2UgaWYgKCBtYWpfc3RhdCA9PSBDU1NfU19DT05USU5VRV9ORUVERUQgKSB7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgIH0KKworICAgICAgICBja3N0cm5jcHkoc3RyVG1wLCJSZW1v dGUgbWFjaGluZSBoYXMgYmVlbiBtdXR1YWxseSBhdXRoZW50aWNhdGVkIiwKKyAgICAgICAgICAg ICAgICAgIHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLHN0clRtcCk7 CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9VU0VSKTsKKyAgICAgICAgcmV0dXJuIEFVVEhf U1VDQ0VTUzsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpF Q1QpOworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFVua25vd24gcmVwbHkgdHlwZSAqLworICAgIH0KK30KKworLyoKKyAqCisgKiBnc3NrNV9h dXRoX2lzLgorICoKKyAqLworCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK2s1X2F1dGhf aXMoaW50IGhvdywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNudCkKKyNlbHNlCitrNV9hdXRo X2lzKGhvdyxkYXRhLGNudCkgaW50IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsK KyNlbmRpZgoreworICAgIGludCByZXBsaWVkID0gMDsKKyAgICBnc3NfY3JlZF9pZF90IHNlcnZl cl9jcmVkcywgZGVsZWdfY3JlZHM7CisgICAgZ3NzX25hbWVfdCBjbGllbnQ7CisgICAgaW50IHJl dF9mbGFnczsKKyAgICBnc3NfYnVmZmVyX2Rlc2MgbmFtZV9idWY7CisgICAgZ3NzX25hbWVfdCBz ZXJ2ZXJfbmFtZTsKKyAgICBPTV91aW50MzIgYWNxdWlyZV9tYWosCisgICAgICBhY3F1aXJlX21p biwKKyAgICAgIGFjY2VwdF9tYWosCisgICAgICBhY2NlcHRfbWluLAorICAgICAgc3RhdF9tYWos CisgICAgICBzdGF0X21pbjsKKyAgICBnc3NfT0lEIG1lY2hpZDsKKyAgICBnc3NfYnVmZmVyX2Rl c2MgdG9rLCBvdXRfdG9rOworICAgIGNoYXIgZ2J1ZltHU1NfQlVGU0laXTsKKyAgICB1X2NoYXIg Z291dF9idWZbR1NTX0JVRlNJWl07CisgICAgY2hhciBsb2NhbG5hbWVbTUFYSE9TVE5BTUVMRU5d OworICAgIGNoYXIgc2VydmljZV9uYW1lW01BWEhPU1ROQU1FTEVOKzEwXTsKKyAgICBjaGFyICoq c2VydmljZTsKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisKKyAgICBkYXRhICs9IDQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHN0YXR1cyBieXRlICovCisg ICAgY250IC09IDQ7CisKKyAgICBja2hleGR1bXAoImdzc2s1X2F1dGhfaXMgZGF0YSIsZGF0YSxj bnQpOworICAgIGRlYnVnKEYxMTEsImdzc2s1X2F1dGhfaXMiLCJob3ciLGhvdyk7CisKKyAgICBp ZiAoY250LS0gPCAxKSB7CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAg ICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgIH0KKyAgICBzd2l0Y2ggKCpkYXRhKyspIHsK KyAgICBjYXNlIEdTU19BVVRIOgorICAgICAgICBnc3NfY2hhbi5pbml0aWF0b3JfYWRkcnR5cGUg PSBHU1NfQ19BRl9JTkVUOworICAgICAgICBnc3NfY2hhbi5pbml0aWF0b3JfYWRkcmVzcy5sZW5n dGggPSA0OworICAgICAgICBnc3NfY2hhbi5pbml0aWF0b3JfYWRkcmVzcy52YWx1ZSA9ICZoaXNf YWRkci5zaW5fYWRkci5zX2FkZHI7CisgICAgICAgIGdzc19jaGFuLmFjY2VwdG9yX2FkZHJ0eXBl ID0gR1NTX0NfQUZfSU5FVDsKKyAgICAgICAgZ3NzX2NoYW4uYWNjZXB0b3JfYWRkcmVzcy5sZW5n dGggPSA0OworICAgICAgICBnc3NfY2hhbi5hY2NlcHRvcl9hZGRyZXNzLnZhbHVlID0gJmN0cmxf YWRkci5zaW5fYWRkci5zX2FkZHI7CisgICAgICAgIGdzc19jaGFuLmFwcGxpY2F0aW9uX2RhdGEu bGVuZ3RoID0gMDsKKyAgICAgICAgZ3NzX2NoYW4uYXBwbGljYXRpb25fZGF0YS52YWx1ZSA9IDA7 CisKKyAgICAgICAgdG9rLnZhbHVlID0gZGF0YTsKKyAgICAgICAgdG9rLmxlbmd0aCA9IGNudDsK KworICAgICAgICBpZiAoZ2V0aG9zdG5hbWUobG9jYWxuYW1lLCBNQVhIT1NUTkFNRUxFTikpIHsK KyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0 dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShocCA9IGdldGhvc3Ri eW5hbWUobG9jYWxuYW1lKSkpIHsKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpF Q1QpOworICAgICAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKKyAgICAgICAgfQorI2lmZGVm IEhBRERSTElTVAorICAgICAgICBocCA9IGNrX2NvcHlob3N0ZW50KGhwKTsKKyNlbmRpZiAvKiBI QUREUkxJU1QgKi8KKyAgICAgICAgc3RybmNweShsb2NhbG5hbWUsIGhwLT5oX25hbWUsIHNpemVv Zihsb2NhbG5hbWUpIC0gMSk7CisgICAgICAgIGxvY2FsbmFtZVtzaXplb2YobG9jYWxuYW1lKSAt IDFdID0gJ1wwJzsKKworICAgICAgICBzcHJpbnRmKHNlcnZpY2VfbmFtZSwgIiVzQCVzIiwgKnNl cnZpY2UsIGxvY2FsbmFtZSk7CisgICAgICAgIG5hbWVfYnVmLnZhbHVlID0gc2VydmljZV9uYW1l OworICAgICAgICBuYW1lX2J1Zi5sZW5ndGggPSBzdHJsZW4obmFtZV9idWYudmFsdWUpICsgMTsK KyAgICAgICAgc3RhdF9tYWogPSBnc3NfaW1wb3J0X25hbWUoJnN0YXRfbWluLCAmbmFtZV9idWYs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NfbnRfc2VydmljZV9uYW1l LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlcnZlcl9uYW1lKTsKKyAg ICAgICAgaWYgKHN0YXRfbWFqICE9IEdTU19TX0NPTVBMRVRFKSB7CisgICAgICAgICAgICBhdXRo X2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7 CisgICAgICAgIH0KKworICAgICAgICBhY3F1aXJlX21haiA9IGdzc19hY3F1aXJlX2NyZWQoJmFj cXVpcmVfbWluLCBzZXJ2ZXJfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHU1NfQ19OVUxMX09JRF9TRVQsIEdTU19DX0FDQ0VQVCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VydmVyX2NyZWRzLCBOVUxMLCBOVUxMKTsK KyAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX25hbWUoJnN0YXRfbWluLCAmc2VydmVyX25hbWUp OworCisgICAgICAgIGlmIChhY3F1aXJlX21haiAhPSBHU1NfU19DT01QTEVURSkgeworICAgICAg ICAgICAgcmVwbHlfZ3NzX2Vycm9yKDUzNSwgYWNjZXB0X21haiwgYWNjZXB0X21pbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHRpbmcgY29udGV4dCIpOworICAgICAg ICAgICAgc3lzbG9nKExPR19FUlIsICJmYWlsZWQgYWNjZXB0aW5nIGNvbnRleHQiKTsKKyAgICAg ICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJnNlcnZlcl9jcmVkcyk7 CisgICAgICAgICAgICBpZiAocmV0X2ZsYWdzICYgR1NTX0NfREVMRUdfRkxBRykKKyAgICAgICAg ICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWxlZ19jcmVkcyk7CisgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGdjb250ZXh0ID0gR1NTX0NfTk9fQ09OVEVY VDsKKyAgICAgICAgYWNjZXB0X21haiA9IGdzc19hY2NlcHRfc2VjX2NvbnRleHQoJmFjY2VwdF9t aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnY29udGV4 dCwgLyogY29udGV4dF9oYW5kbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdmVyaWZpZXJfY3JlZF9oYW5kbGUgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2NyZWRzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9rLCAvKiBpbnB1dF90b2tlbiAqLworCQkJ CQkgICAgKGtyYjVfZF9ub19hZGRyZXNzZXMgPworCQkJCQkgICAgIC8qIGNoYW5uZWwgYmluZGlu Z3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NT X0NfTk9fQ0hBTk5FTF9CSU5ESU5HUyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZnc3NfY2hhbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmY2xpZW50LCAvKiBzcmNfbmFtZSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWVjaGlkLCAvKiBtZWNoX3R5cGUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dF90b2ssIC8qIG91 dHB1dF90b2tlbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcmV0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCAgICAgICAvKiBpZ25vcmUgdGltZV9yZWMgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yd2FyZGVkIGNyZWRlbnRpYWxzICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWxlZ19jcmVkcworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgIGlm IChhY2NlcHRfbWFqIT1HU1NfU19DT01QTEVURSAmJiBhY2NlcHRfbWFqIT1HU1NfU19DT05USU5V RV9ORUVERUQpIHsKKyAgICAgICAgICAgIHJlcGx5X2dzc19lcnJvcig1MzUsIGFjY2VwdF9tYWos IGFjY2VwdF9taW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHRpbmcgY29u dGV4dCIpOworICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJmYWlsZWQgYWNjZXB0aW5nIGNv bnRleHQiKTsKKyAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwg JnNlcnZlcl9jcmVkcyk7CisgICAgICAgICAgICBpZiAocmV0X2ZsYWdzICYgR1NTX0NfREVMRUdf RkxBRykKKyAgICAgICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWxlZ19jcmVkcyk7 CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvdXRfdG9r Lmxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGtlcnJvciA9IHJhZGl4X2VuY29kZShvdXRfdG9r LnZhbHVlLGdidWYsJm91dF90b2subGVuZ3RoLCAwKSkgeworICAgICAgICAgICAgICAgIHNlY3Vy ZV9lcnJvcigiQ291bGRuJ3QgZW5jb2RlIEFEQVQgcmVwbHkgKCVzKSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJhZGl4X2Vycm9yKGtlcnJvcikpOworICAgICAgICAgICAgICAgIHN5 c2xvZyhMT0dfRVJSLCAiY291bGRuJ3QgZW5jb2RlIEFEQVQgcmVwbHkiKTsKKyAgICAgICAgICAg ICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sICZzZXJ2ZXJfY3JlZHMpOwor ICAgICAgICAgICAgICAgIGlmIChyZXRfZmxhZ3MgJiBHU1NfQ19ERUxFR19GTEFHKQorICAgICAg ICAgICAgICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbGVnX2NyZWRz KTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoc3RhdF9tYWogPT0gR1NTX1NfQ09NUExFVEUpIHsKKyAgICAgICAgICAgICAgICByZXBs eSgyMzUsICJBREFUPSVzIiwgZ2J1Zik7CisgICAgICAgICAgICAgICAgcmVwbGllZCA9IDE7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIElmIHRoZSBzZXJ2ZXIgYWNj ZXB0cyB0aGUgc2VjdXJpdHkgZGF0YSwgYW5kCisgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMg YWRkaXRpb25hbCBkYXRhLCBpdCBzaG91bGQgcmVzcG9uZAorICAgICAgICAgICAgICAgICAgIHdp dGggcmVwbHkgY29kZSAzMzUuICovCisgICAgICAgICAgICAgICAgcmVwbHkoMzM1LCAiQURBVD0l cyIsIGdidWYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNl X2J1ZmZlcigmc3RhdF9taW4sICZvdXRfdG9rKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz dGF0X21haiA9PSBHU1NfU19DT01QTEVURSkgeworICAgICAgICAgICAgLyogR1NTQVBJIGF1dGhl bnRpY2F0aW9uIHN1Y2NlZWRlZCAqLworICAgICAgICAgICAgc3RhdF9tYWogPSBnc3NfZGlzcGxh eV9uYW1lKCZzdGF0X21pbiwgY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmY2xpZW50X25hbWUsICZtZWNoaWQpOworICAgICAgICAgICAgaWYgKHN0YXRf bWFqICE9IEdTU19TX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAgICAgLyogIklmIHRoZSBzZXJ2 ZXIgcmVqZWN0cyB0aGUgc2VjdXJpdHkgZGF0YSAoaWYKKyAgICAgICAgICAgICAgICAgICBhIGNo ZWNrc3VtIGZhaWxzLCBmb3IgaW5zdGFuY2UpLCBpdCBzaG91bGQKKyAgICAgICAgICAgICAgICAg ICByZXNwb25kIHdpdGggcmVwbHkgY29kZSA1MzUuIiAqLworICAgICAgICAgICAgICAgIHJlcGx5 X2dzc19lcnJvcig1MzUsIHN0YXRfbWFqLCBzdGF0X21pbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImV4dHJhY3RpbmcgR1NTQVBJIGlkZW50aXR5IG5hbWUiKTsKKyAgICAgICAg ICAgICAgICBzeXNsb2coTE9HX0VSUiwgImdzc2FwaSBlcnJvciBleHRyYWN0aW5nIGlkZW50aXR5 Iik7CisgICAgICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNlX2NyZWQoJnN0YXRfbWluLCAm c2VydmVyX2NyZWRzKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0X2ZsYWdzICYgR1NTX0NfREVM RUdfRkxBRykKKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVk KCZzdGF0X21pbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZkZWxlZ19jcmVkcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBhdXRoX3R5cGUgPSB0ZW1wX2F1dGhfdHlwZTsKKyAgICAgICAgICAg IHRlbXBfYXV0aF90eXBlID0gTlVMTDsKKworICAgICAgICAgICAgKHZvaWQpIGdzc19yZWxlYXNl X2NyZWQoJnN0YXRfbWluLCAmc2VydmVyX2NyZWRzKTsKKyAgICAgICAgICAgIGlmIChyZXRfZmxh Z3MgJiBHU1NfQ19ERUxFR19GTEFHKSB7CisgICAgICAgICAgICAgICAgaWYgKHdhbnRfY3JlZHMp CisgICAgICAgICAgICAgICAgICAgIGZ0cGRfZ3NzX2NvbnZlcnRfY3JlZHMoY2xpZW50X25hbWUu dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVn X2NyZWRzKTsKKyAgICAgICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9t aW4sICZkZWxlZ19jcmVkcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElmIHRo ZSBzZXJ2ZXIgYWNjZXB0cyB0aGUgc2VjdXJpdHkgZGF0YSwgYnV0IGRvZXMKKyAgICAgICAgICAg ICAgIG5vdCByZXF1aXJlIGFueSBhZGRpdGlvbmFsIGRhdGEgKGkuZS4sIHRoZSBzZWN1cml0eQor ICAgICAgICAgICAgICAgZGF0YSBleGNoYW5nZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSks IGl0IG11c3QKKyAgICAgICAgICAgICAgIHJlc3BvbmQgd2l0aCByZXBseSBjb2RlIDIzNS4gKi8K KyAgICAgICAgICAgIGlmICghcmVwbGllZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBpZiAocmV0X2ZsYWdzICYgR1NTX0NfREVMRUdfRkxBRyAmJiAhaGF2ZV9jcmVkcykKKyAgICAg ICAgICAgICAgICAgIHJlcGx5KDIzNSwKKyAiR1NTQVBJIEF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRl ZCwgYnV0IGNvdWxkIG5vdCBhY2NlcHQgZm9yd2FyZGVkIGNyZWRlbnRpYWxzIgorICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg ICByZXBseSgyMzUsICJHU1NBUEkgQXV0aGVudGljYXRpb24gc3VjY2VlZGVkIik7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdF9t YWogPT0gR1NTX1NfQ09OVElOVUVfTkVFREVEKSB7CisgICAgICAgICAgICAvKiBJZiB0aGUgc2Vy dmVyIGFjY2VwdHMgdGhlIHNlY3VyaXR5IGRhdGEsIGFuZAorICAgICAgICAgICAgcmVxdWlyZXMg YWRkaXRpb25hbCBkYXRhLCBpdCBzaG91bGQgcmVzcG9uZCB3aXRoCisgICAgICAgICAgICByZXBs eSBjb2RlIDMzNS4gKi8KKyAgICAgICAgICAgIHJlcGx5KDMzNSwgIm1vcmUgZGF0YSBuZWVkZWQi KTsKKyAgICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJnNlcnZl cl9jcmVkcyk7CisgICAgICAgICAgICBpZiAocmV0X2ZsYWdzICYgR1NTX0NfREVMRUdfRkxBRykK KyAgICAgICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sICZkZWxl Z19jcmVkcyk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAvKiAiSWYgdGhlIHNlcnZlciByZWplY3RzIHRoZSBzZWN1cml0eSBkYXRhIChpZgor ICAgICAgICAgICAgYSBjaGVja3N1bSBmYWlscywgZm9yIGluc3RhbmNlKSwgaXQgc2hvdWxkCisg ICAgICAgICAgICByZXNwb25kIHdpdGggcmVwbHkgY29kZSA1MzUuIiAqLworICAgICAgICAgICAg cmVwbHlfZ3NzX2Vycm9yKDUzNSwgc3RhdF9tYWosIHN0YXRfbWluLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiR1NTQVBJIGZhaWxlZCBwcm9jZXNzaW5nIEFEQVQiKTsKKyAgICAgICAg ICAgIHN5c2xvZyhMT0dfRVJSLCAiR1NTQVBJIGZhaWxlZCBwcm9jZXNzaW5nIEFEQVQiKTsKKyAg ICAgICAgICAgICh2b2lkKSBnc3NfcmVsZWFzZV9jcmVkKCZzdGF0X21pbiwgJnNlcnZlcl9jcmVk cyk7CisgICAgICAgICAgICBpZiAocmV0X2ZsYWdzICYgR1NTX0NfREVMRUdfRkxBRykKKyAgICAg ICAgICAgICAgICAodm9pZCkgZ3NzX3JlbGVhc2VfY3JlZCgmc3RhdF9taW4sICZkZWxlZ19jcmVk cyk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKworICAgICAgICBkZWJ1ZyhG MTAwLCJnc3NrNV9hdXRoX2lzIEFVVEhfU1VDQ0VTUyIsIiIsMCk7CisgICAgICAgIGtyYjVfZXJy bm8gPSByOworICAgICAgICBpZiAoIGtyYjVfZXJybm8gKQorICAgICAgICAgICAgbWFrZXN0cigm a3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7CisgICAgICAgIHJldHVybiBB VVRIX1NVQ0NFU1M7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIlVua25vd24gS2Vy YmVyb3Mgb3B0aW9uICVkXHJcbiIsIGRhdGFbLTFdKTsKKyAgICAgICAgU2VuZEdTU0s1QXV0aFNC KEdTU19SRUpFQ1QsIDAsIDApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgYXV0aF9maW5p c2hlZChBVVRIX1JFSkVDVCk7CisgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKK30KKyNlbmRpZiAv KiBHU1NBUElfS1JCNSAqLworCisjaWZkZWYgQ0tfU1JQCisvKgorICogQ29weXJpZ2h0IChjKSAx OTk3IFN0YW5mb3JkIFVuaXZlcnNpdHkKKyAqCisgKiBUaGUgdXNlIG9mIHRoaXMgc29mdHdhcmUg Zm9yIHJldmVudWUtZ2VuZXJhdGluZyBwdXJwb3NlcyBtYXkgcmVxdWlyZSBhCisgKiBsaWNlbnNl IGZyb20gdGhlIG93bmVycyBvZiB0aGUgdW5kZXJseWluZyBpbnRlbGxlY3R1YWwgcHJvcGVydHku CisgKiBTcGVjaWZpY2FsbHksIHRoZSBTUlAtMyBwcm90b2NvbCBtYXkgbm90IGJlIHVzZWQgZm9y IHJldmVudWUtZ2VuZXJhdGluZworICogcHVycG9zZXMgd2l0aG91dCBhIGxpY2Vuc2UuCisgKgor ICogTk9URTogQ29sdW1iaWEgVW5pdmVyc2l0eSBoYXMgYSBsaWNlbnNlLgorICoKKyAqIFdpdGhp biB0aGF0IGNvbnN0cmFpbnQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBk aXN0cmlidXRlCisgKiB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55 IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQKKyAqIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0 IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uCisgKiBub3Rp Y2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3Vt ZW50YXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUy1JUyIgQU5EIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTLCBJTVBMSUVEIE9SIE9USEVS V0lTRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCisgKiBXQVJSQU5UWSBPRiBN RVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgor ICogSU4gTk8gRVZFTlQgU0hBTEwgU1RBTkZPUkQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwg SU5DSURFTlRBTCwKKyAqIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkg S0lORCwgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorICogUkVTVUxUSU5HIEZST00gTE9TUyBP RiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QgQURWSVNFRCBPRgorICogVEhF IFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBB UklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9S TUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCitzdGF0aWMgdm9pZAorc3JwX2VuY29kZV9s ZW5ndGgoZGF0YSwgbnVtKQorICAgIHVuc2lnbmVkIGNoYXIgKiBkYXRhOworICAgIGludCBudW07 Cit7CisgICAgKmRhdGEgPSAobnVtID4+IDgpICYgMHhmZjsKKyAgICAqKytkYXRhID0gbnVtICYg MHhmZjsKK30KKworc3RhdGljIGludAorc3JwX2RlY29kZV9sZW5ndGgoZGF0YSkKKyAgICB1bnNp Z25lZCBjaGFyICogZGF0YTsKK3sKKyAgICByZXR1cm4gKCgoaW50KSAqZGF0YSAmIDB4ZmYpIDw8 IDgpIHwgKCooZGF0YSArIDEpICYgMHhmZik7Cit9CisKKyNpZmRlZiBQUkVfU1JQXzFfN18zCitz dGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK3NycF9yZXBseShpbnQgaG93LCB1bnNpZ25lZCBj aGFyICpkYXRhLCBpbnQgY250KQorI2Vsc2UKK3NycF9yZXBseShob3csZGF0YSxjbnQpIGludCBo b3c7IHVuc2lnbmVkIGNoYXIgKmRhdGE7IGludCBjbnQ7CisjZW5kaWYKK3sKKyAgICBzdHJ1Y3Qg dF9udW0gbjsKKyAgICBzdHJ1Y3QgdF9udW0gZzsKKyAgICBzdHJ1Y3QgdF9udW0gczsKKyAgICBz dHJ1Y3QgdF9udW0gQjsKKyAgICBzdHJ1Y3QgdF9udW0gKiBBOworICAgIGNoYXIgdHlwZV9jaGVj a1syNl07CisgICAgaW50IHBmbGFnOworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIFNlc3Np b25fS2V5IHNrZXk7CisjZW5kaWYgLyogRU5DUllQVElPTiAqLworCisgICAgY2hhciAqIHN0cj1O VUxMOworCisgICAgZGF0YSArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQg dG8gc3RhdHVzIGJ5dGUgKi8KKyAgICBjbnQgIC09IDQ7CisKKyAgICBpZihjbnQtLSA8IDEpIHsK KyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgIHJldHVybiBBVVRI X0ZBSUxVUkU7CisgICAgfQorCisgICAgc3dpdGNoKCpkYXRhKyspIHsKKyAgICBjYXNlIFNSUF9S RUpFQ1Q6CisgICAgICAgIGNrbWFrbXNnKHN0clRtcCxzaXplb2Yoc3RyVG1wKSwKKyAgICAgICAg ICAgICAgICAgICJTUlAgcmVmdXNlcyBhdXRoZW50aWNhdGlvbiBmb3IgJyIsc3pVc2VyTmFtZSwK KyAgICAgICAgICAgICAgICAgICInXHJcbiIsTlVMTCk7CisgICAgICAgIGlmIChjbnQgPiAwKSB7 CisgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKHN0clRtcCk7CisgICAgICAgICAgICBpZiAo IGxlbiArIGNudCA8IHNpemVvZihzdHJUbXApICkgeworICAgICAgICAgICAgICAgIHN0ciA9IHN0 clRtcCArIHN0cmxlbihzdHJUbXApOworICAgICAgICAgICAgICAgIG1lbWNweShzdHIsZGF0YSxj bnQpOworICAgICAgICAgICAgICAgIHN0cltjbnRdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBwcmludGYoIlNSUCBhdXRoZW50aWNhdGlvbiBmYWlsZWQhXHJcbiVzXHJc biIsc3RyVG1wKTsKKyAgICAgICAgaWYgKHRjICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHRfY2xp ZW50Y2xvc2UodGMpOworICAgICAgICAgICAgdGMgPSBOVUxMOworICAgICAgICB9CisgICAgICAg IGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJF OworCisgICAgY2FzZSBTUlBfQUNDRVBUOgorICAgICAgICBpZihjbnQgPCBSRVNQT05TRV9MRU4g fHwgIXNycF93YWl0cmVzcCB8fAorICAgICAgICAgICAgdGMgPT0gTlVMTAorICAgICAgICAgICAg KSB7CisgICAgICAgICAgICBwcmludGYoIlNSUCBQcm90b2NvbCBlcnJvclxyXG4iKTsKKyAgICAg ICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKKyAgICAgICAgfQorICAg ICAgICBzcnBfd2FpdHJlc3AgPSAwOworCisgICAgICAgIGlmKHRfY2xpZW50dmVyaWZ5KHRjLCBk YXRhKSA9PSAwKSB7CisgICAgICAgICAgICBwcmludGYoIlNSUCBhY2NlcHRzIHlvdSBhcyAlc1xy XG4iLHN6VXNlck5hbWUpOworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgaWYoKHNzbF9hY3Rp dmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCisgICAgICAgICAgICAgICAgKGhvdyAmIEFV VEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCJUTFMgc2Vzc2lvbiBwYXJhbWV0ZXJzIHZlcmlmaWVkIGJ5IFNSUFxyXG4i KTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZkZWYgQ0tf RU5DUllQVElPTgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNL X0dFTkVSSUM7CisgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSBTRVNTSU9OX0tFWV9MRU47 CisgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gdGMtPnNlc3Npb25fa2V5OworICAgICAgICAg ICAgICAgIGVuY3J5cHRfc2Vzc2lvbl9rZXkoJnNrZXksIEFVVEhfQ0xJRU5UX1RPX1NFUlZFUik7 CisgICAgICAgICAgICB9CisjZW5kaWYgLyogRU5DUllQVElPTiAqLworICAgICAgICAgICAgdF9j bGllbnRjbG9zZSh0Yyk7CisgICAgICAgICAgICB0YyA9IE5VTEw7CisgICAgICAgICAgICBhY2Nl cHRfY29tcGxldGUgPSAxOworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElEKTsK KyAgICAgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBwcmludGYoIlNSUCBzZXJ2ZXIgYXV0aGVudGljYXRpb24gZmFpbGVkIVxyXG4iKTsK KyAgICAgICAgICAgIHRfY2xpZW50Y2xvc2UodGMpOworICAgICAgICAgICAgdGMgPSBOVUxMOwor ICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9 CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUlBfUEFSQU1TOgorICAgICAgICBpZighc3pV c2VyTmFtZSkgeworICAgICAgICAgICAgcHJpbnRmKCJObyB1c2VybmFtZSBhdmFpbGFibGVcclxu Iik7CisgICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAg ICAgIH0KKworICAgICAgICBuLmxlbiA9IHNycF9kZWNvZGVfbGVuZ3RoKGRhdGEpOworICAgICAg ICBkYXRhICs9IDI7CisgICAgICAgIGNudCAtPSAyOworICAgICAgICBpZihuLmxlbiA+IGNudCkg eworICAgICAgICAgICAgcHJpbnRmKCJuIHRvbyBsb25nXHJcbiIpOworICAgICAgICAgICAgcmV0 dXJuKGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisgICAgICAgIG4uZGF0 YSA9IGRhdGE7CisgICAgICAgIGRhdGEgKz0gbi5sZW47CisgICAgICAgIGNudCAtPSBuLmxlbjsK KworICAgICAgICBnLmxlbiA9IHNycF9kZWNvZGVfbGVuZ3RoKGRhdGEpOworICAgICAgICBkYXRh ICs9IDI7CisgICAgICAgIGNudCAtPSAyOworICAgICAgICBpZihnLmxlbiA+IGNudCkgeworICAg ICAgICAgICAgcHJpbnRmKCJnIHRvbyBsb25nXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKGF1 dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisgICAgICAgIGcuZGF0YSA9IGRh dGE7CisgICAgICAgIGRhdGEgKz0gZy5sZW47CisgICAgICAgIGNudCAtPSBnLmxlbjsKKworICAg ICAgICBzLmxlbiA9IHNycF9kZWNvZGVfbGVuZ3RoKGRhdGEpOworICAgICAgICBkYXRhICs9IDI7 CisgICAgICAgIGNudCAtPSAyOworICAgICAgICBpZihzLmxlbiA+IGNudCkgeworICAgICAgICAg ICAgcHJpbnRmKCJzYWx0IHRvbyBsb25nXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKGF1dGhf cmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisgICAgICAgIHMuZGF0YSA9IGRhdGE7 CisgICAgICAgIGRhdGEgKz0gcy5sZW47CisgICAgICAgIGNudCAtPSBzLmxlbjsKKworICAgICAg ICAvKiBJZiB0aGUgcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgc2VydmVyIGNhbm5vdCBiZQor ICAgICAgICAgKiB2YWxpZGF0ZWQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB3aWxsIGZhaWwuCisg ICAgICAgICAqLworICAgICAgICB0YyA9IHRfY2xpZW50b3BlbihzelVzZXJOYW1lLCAmbiwgJmcs ICZzKTsKKyAgICAgICAgaWYgKHRjID09IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiU1JQ IHBhcmFtZXRlciBpbml0aWFsaXphdGlvbiBlcnJvclxyXG4iKTsKKyAgICAgICAgICAgIHJldHVy bihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKKyAgICAgICAgfQorICAgICAgICBBID0gdF9j bGllbnRnZW5leHAodGMpOworICAgICAgICBpZihBID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBy aW50ZigiU1JQIHByb3RvY29sIGVycm9yXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKGF1dGhf cmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisgICAgICAgIFNlbmRTUlBBdXRoU0Io U1JQX0VYUCwgQS0+ZGF0YSwgQS0+bGVuKTsKKworICAgICAgICBpZiAoIHB3YnVmWzBdICYmIHB3 ZmxnICkgeworICAgICAgICAgICAgcHJpbnRmKCJTUlAgdXNpbmcgJWQtYml0IG1vZHVsdXMgZm9y ICclcydcclxuIiwKKyAgICAgICAgICAgICAgICAgICA4ICogbi5sZW4sCisgICAgICAgICAgICAg ICAgICAgc3pVc2VyTmFtZQorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBja3N0 cm5jcHkoc3JwX3Bhc3N3ZCxwd2J1ZixzaXplb2Yoc3JwX3Bhc3N3ZCkpOworI2lmZGVmIE9TMgor ICAgICAgICAgICAgaWYgKCBwd2NyeXB0ICkKKyAgICAgICAgICAgICAgICBja19lbmNyeXB0KChj aGFyICopc3JwX3Bhc3N3ZCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBleHRlcm4gY2hhciAqIHNycHB3cHJvbXB0OworICAgICAgICAgICAgY2hhciBw cmVmYWNlWzEyOF07CisgICAgICAgICAgICBpbnQgb2s7CisKKyAgICAgICAgICAgIGlmIChzcnBw d3Byb21wdCAmJiBzcnBwd3Byb21wdFswXSAmJgorCQkoc3RybGVuKHNycHB3cHJvbXB0KSArIHN0 cmxlbihzelVzZXJOYW1lKSAtIDIpIDwKKwkJc2l6ZW9mKHByZWZhY2UpKSB7CisgICAgICAgICAg ICAgICAgc3ByaW50ZihwcmVmYWNlLHNycHB3cHJvbXB0LHN6VXNlck5hbWUpOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBja21ha3htc2coIHByZWZhY2Usc2l6ZW9mKHBy ZWZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiU1JQIHVzaW5nICIsY2tpdG9hKDgq bi5sZW4pLCItYml0IG1vZHVsdXMgZm9yICciLAorICAgICAgICAgICAgICAgICAgICAgICAgICBz elVzZXJOYW1lLCAiJyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg b2sgPSB1cV90eHQoIHByZWZhY2UsIlBhc3N3b3JkOiAiLDIsTlVMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBzcnBfcGFzc3dkLHNpemVvZihzcnBfcGFzc3dkKS0xLE5VTEwsCisJCQkgREVG QVVMVF9VUV9USU1FT1VUKTsKKyAgICAgICAgICAgIGlmICggIW9rICkKKyAgICAgICAgICAgICAg ICBzcnBfcGFzc3dkWzBdID0gJ1wwJzsKKyAgICAgICAgfQorCisgICAgICAgIHRfY2xpZW50cGFz c3dkKHRjLCBzcnBfcGFzc3dkKTsKKyAgICAgICAgbWVtc2V0KHNycF9wYXNzd2QsIDAsIHNpemVv ZihzcnBfcGFzc3dkKSk7CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisKKyAgICBjYXNl IFNSUF9DSEFMTEVOR0U6CisgICAgICAgIGlmKHRjID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBy aW50ZigiU1JQIHByb3RvY29sIGVycm9yXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKGF1dGhf cmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisKKyNpZm5kZWYgUFJFX1NSUF8xXzRf NQorICAgICAgICAvKgorICAgICAgICAgKiBUaGUgb3JpZ2luYWwgU1JQIEFVVEggaW1wbGVtZW50 YXRpb24gZGlkIG5vdCBwcm90ZWN0IGFnYWluc3QKKyAgICAgICAgICogdGFtcGVyaW5nIG9mIHRo ZSBhdXRoLXR5cGUtcGFpcnMuICBUaGVyZWZvcmUsIHdoZW4gdGhlCisgICAgICAgICAqIEFVVEhf RU5DUllQVF9NQVNLIGJpdHMgYXJlIHplcm8sIG5vIGV4dHJhIGRhdGEgaXMgaW5zZXJ0ZWQKKyAg ICAgICAgICogaW50byB0aGUgU1JQIGhhc2ggY29tcHV0YXRpb24uICBXaGVuIEFVVEhfRU5DUllQ VF9TVEFSVF9UTFMKKyAgICAgICAgICogaXMgc2V0IHdlIGFsc28gaW5zZXJ0IHRoZSBTU0wvVExT IGNsaWVudCBhbmQgc2VydmVyIGZpbmlzaGVkCisgICAgICAgICAqIG1lc3NhZ2VzIHRvIGVuc3Vy ZSB0aGF0IHRoZXJlIGlzIG5vIG1hbiBpbiB0aGUgbWlkZGxlIGF0dGFjaworICAgICAgICAgKiB1 bmRlcndheSBvbiB0aGUgU1NML1RMUyBjb25uZWN0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAg aWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgIT0gQVVUSF9FTkNSWVBUX09GRikgeworICAg ICAgICAgICAgdHlwZV9jaGVja1swXSA9IEFVVEhUWVBFX1NSUDsKKyAgICAgICAgICAgIHR5cGVf Y2hlY2tbMV0gPSBob3c7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICBpZiAoKGhvdyAmIEFV VEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7CisgICAgICAgICAg ICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnR5cGVfY2hlY2tbMl0sMTIpOworICAgICAg ICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0eXBlX2NoZWNrWzE0XSwxMik7Cisg ICAgICAgICAgICAgICAgdF9jbGllbnRhZGRleGRhdGEodGMsdHlwZV9jaGVjaywyNik7CisgICAg ICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICB0X2Ns aWVudGFkZGV4ZGF0YSh0Yyx0eXBlX2NoZWNrLDIpOworICAgICAgICB9CisjZW5kaWYgLyogUFJF X1NSUF8xXzRfNSAqLworCisgICAgICAgIEIuZGF0YSA9IGRhdGE7CisgICAgICAgIEIubGVuID0g Y250OworICAgICAgICB0X2NsaWVudGdldGtleSh0YywgJkIpOworCisgICAgICAgIFNlbmRTUlBB dXRoU0IoU1JQX1JFU1BPTlNFLCB0X2NsaWVudHJlc3BvbnNlKHRjKSwgUkVTUE9OU0VfTEVOKTsK KyAgICAgICAgc3JwX3dhaXRyZXNwID0gMTsKKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsK KworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlAp KTsKKyAgICB9CisgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsKK30KKworc3RhdGljIGludAorI2lm ZGVmIENLX0FOU0lDCitzcnBfaXMoaW50IGhvdywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNu dCkKKyNlbHNlCitzcnBfaXMoaG93LGRhdGEsY250KSBpbnQgaG93OyB1bnNpZ25lZCBjaGFyICpk YXRhOyBpbnQgY250OworI2VuZGlmCit7CisgICAgY2hhciAqIHBidWYgPSBOVUxMOworICAgIGNo YXIgKiBwdHI7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIFNlc3Npb25fS2V5IHNrZXk7Cisj ZW5kaWYKKyAgICBzdHJ1Y3QgdF9udW0gQTsKKyAgICBzdHJ1Y3QgdF9wdyAqIHRwdyA9IE5VTEw7 CisgICAgc3RydWN0IHRfY29uZiAqIHRjb25mID0gTlVMTDsKKyAgICBzdHJ1Y3QgcGFzc3dkICog cGFzczsKKyAgICBzdGF0aWMgc3RydWN0IHRfbnVtICogQiA9IE5VTEw7ICAgICAvKiBIb2xkZXIg Zm9yIEIgKi8KKyNpZmRlZiBDS19TU0wKKyAgICBjaGFyIHR5cGVfY2hlY2tbMjZdOworI2Vsc2UK KyAgICBjaGFyIHR5cGVfY2hlY2tbMl07CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAo KGNudCAtPSA0KSA8IDEpIHsKKyAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVDVCk7Cisg ICAgICAgIHJldHVybiBBVVRIX0ZBSUxVUkU7CisgICAgfQorCisgICAgZGF0YSArPSA0OworICAg IGNudCAgLT0gMTsKKyAgICBzd2l0Y2goKmRhdGErKykgeworICAgIGNhc2UgU1JQX0FVVEg6Cisg ICAgICAgIC8qIFNlbmQgcGFyYW1ldGVycyBiYWNrIHRvIGNsaWVudCAqLworICAgICAgICBpZih0 cyAhPSBOVUxMKSB7CisgICAgICAgICAgICB0X3NlcnZlcmNsb3NlKHRzKTsKKyAgICAgICAgICAg IHRzID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZighc3pVc2VyTmFtZVJlcXVlc3RlZFsw XSkgeworICAgICAgICAgICAgaWYgKDEpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJObyB1c2Vy bmFtZSBhdmFpbGFibGVcclxuIik7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpF Q1QsICh2b2lkICopICJObyB1c2VybmFtZSBzdXBwbGllZCIsIC0xKTsKKyAgICAgICAgICAgIGF1 dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVS RSk7CisgICAgICAgIH0KKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgaWYg KGluc2VydmVyICYmIGNreGFub24gJiYKKyAgICAgICAgICAgICAhc3RyY21wKHN6VXNlck5hbWVS ZXF1ZXN0ZWQsImFub255bW91cyIpKSB7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9S RUpFQ1QsICh2b2lkICopCisgICAgICAgICAgICAiYW5vbnltb3VzIGxvZ2luIGNhbm5vdCBiZSBw ZXJmb3JtZWQgd2l0aCBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkIiwKKyAgICAgICAgICAgIC0xKTsK KyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICAgICAgcmV0 dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2Vu ZGlmIC8qIElLU0QgKi8KKyNpZm5kZWYgUFJFX1NSUF8xXzRfNAorICAgICAgICBpZih0cHcgPT0g TlVMTCkgeworICAgICAgICAgICAgaWYoKHRwdyA9IHRfb3BlbnB3KE5VTEwpKSA9PSBOVUxMKSB7 CisgICAgICAgICAgICAgICAgaWYgKDEpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiVW5h YmxlIHRvIG9wZW4gcGFzc3dvcmQgZmlsZVxyXG4iKTsKKyAgICAgICAgICAgICAgICBTZW5kU1JQ QXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopICJObyBwYXNzd29yZCBmaWxlIiwgLTEpOworICAg ICAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGlmKHRjb25mID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmKCh0Y29uZiA9 IHRfb3BlbmNvbmYoTlVMTCkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoMSkKKyAg ICAgICAgICAgICAgICAgIHByaW50ZigiVW5hYmxlIHRvIG9wZW4gY29uZmlndXJhdGlvbiBmaWxl XHJcbiIpOworICAgICAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQg KikiTm8gY29uZmlndXJhdGlvbiBmaWxlIiwgLTEpOworICAgICAgICAgICAgICAgIHJldHVybihB VVRIX0ZBSUxVUkUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRzID0gdF9z ZXJ2ZXJvcGVuZnJvbWZpbGVzKHN6VXNlck5hbWVSZXF1ZXN0ZWQsIHRwdywgdGNvbmYpOworICAg ICAgICB0X2Nsb3NlcHcodHB3KTsKKyAgICAgICAgdHB3ID0gTlVMTDsKKyAgICAgICAgdF9jbG9z ZWNvbmYodGNvbmYpOworICAgICAgICB0Y29uZiA9IE5VTEw7CisjZWxzZSAvKiBQUkVfU1JQXzFf NF80ICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAvKiB0aGUgY29kZSBpbiB0aGlzIGJsb2Nr IHNob3VsZCBubyBsb25nZXIgYmUgbmVjZXNzYXJ5IG9uIE9TLzIKKyAgICAgICAgICAgb3IgV2lu ZG93cyBiZWNhdXNlIEkgaGF2ZSBhZGRlZCBmdW5jdGlvbmFsaXR5IHRvIGxpYnNycC5saWIKKyAg ICAgICAgICAgdG8gZmluZCB0aGUgc3JwIGZpbGVzLiAgIDQvMjIvMjAwMAorICAgICAgICAqLwor CisgICAgICAgIC8qIE9uIFdpbmRvd3MgYW5kIE9TLzIgdGhlcmUgaXMgbm8gd2VsbCBkZWZpbmVk IHBsYWNlIGZvciB0aGUgKi8KKyAgICAgICAgLyogRVRDIGRpcmVjdG9yeS4gIFNvIHdlIGxvb2sg Zm9yIGVpdGhlciBhbiBTUlBfRVRDIG9yIEVUQyAgICAqLworICAgICAgICAvKiBlbnZpcm9ubWVu dCB2YXJpYWJsZSBpbiB0aGF0IG9yZGVyLiAgSWYgd2UgZmluZCBvbmUgd2UgICAgICovCisgICAg ICAgIC8qIGF0dGVtcHQgdG8gb3BlbiB0aGUgZmlsZXMgbWFudWFsbHkuICAgICAgICAgICAgICAg ICAgICAgICAgKi8KKyAgICAgICAgLyogV2Ugd2lsbCByZXVzZSB0aGUgc3RyVG1wW10gZm9yIHRo ZSBmaWxlIG5hbWVzLiAqLworICAgICAgICBwdHIgPSBnZXRlbnYoIlNSUF9FVEMiKTsKKyAgICAg ICAgaWYgKCAhcHRyICkKKyAgICAgICAgICAgIHB0ciA9IGdldGVudigiRVRDIik7CisjaWZkZWYg TlQKKyAgICAgICAgaWYgKCAhcHRyICkgeworICAgICAgICAgICAgRFdPUkQgbGVuOworICAgICAg ICAgICAgbGVuID0gQVVUSFRNUEJMOworCisgICAgICAgICAgICBsZW4gPSBHZXRXaW5kb3dzRGly ZWN0b3J5KHN0clRtcCxsZW4pOworICAgICAgICAgICAgaWYgKCBsZW4gPiAwICYmIGxlbiA8IEFV VEhUTVBCTCkgeworICAgICAgICAgICAgICAgIGlmICggIWlzV2luOTUoKSApIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKCBsZW4gPT0gMSApCisJCSAgICAgIGNrc3RybmNhdChzdHJUbXAsIlNZ U1RFTTMyL0RSSVZFUlMvRVRDIixzaXplb2Yoc3RyVG1wKSk7CisgICAgICAgICAgICAgICAgICAg IGVsc2UKKwkJICAgICAgY2tzdHJuY2F0KHN0clRtcCwiL1NZU1RFTTMyL0RSSVZFUlMvRVRDIixz aXplb2Yoc3RyVG1wKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgcHRyID0gc3RyVG1wOworICAgICAgICB9CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAg aWYgKCBwdHIgKSB7CisgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKHB0cik7CisgICAgICAg ICAgICBpbnQgaTsKKwkgICAgaWYgKHB0ciAhPSBzdHJUbXApCisJCXN0cmNweShzdHJUbXAscHRy KTsKKyAgICAgICAgICAgIGZvciAoIGk9MDtpPGxlbjtpKysgKSB7CisgICAgICAgICAgICAgICAg aWYgKCBzdHJUbXBbaV0gPT0gJ1xcJyApCisgICAgICAgICAgICAgICAgICAgIHN0clRtcFtpXSA9 ICcvJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggc3RyVG1wW2xlbi0xXSAhPSAn LycgKQorICAgICAgICAgICAgICAgIGNrc3RybmNhdChzdHJUbXAsIi90cGFzc3dkIixzaXplb2Yo c3RyVG1wKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHN0 clRtcCwidHBhc3N3ZCIsc2l6ZW9mKHN0clRtcCkpOworICAgICAgICAgICAgdHB3ID0gdF9vcGVu cHdieW5hbWUoc3RyVG1wKTsKKworICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwiLmNvbmYi LHNpemVvZihzdHJUbXApKTsKKyAgICAgICAgICAgIHRjb25mID0gdF9vcGVuY29uZmJ5bmFtZShz dHJUbXApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB0cHcgJiYgdGNvbmYgKQorICAgICAg ICAgICAgdHMgPSB0X3NlcnZlcm9wZW5mcm9tZmlsZXMoc3pVc2VyTmFtZVJlcXVlc3RlZCwgdHB3 LCB0Y29uZik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRzID0gdF9zZXJ2ZXJvcGVuKHN6 VXNlck5hbWVSZXF1ZXN0ZWQpOworICAgICAgICBpZiAoIHRwdyApIHsKKyAgICAgICAgICAgIHRf Y2xvc2Vwdyh0cHcpOworICAgICAgICAgICAgdHB3ID0gTlVMTDsKKyAgICAgICAgfQorICAgICAg ICBpZiAoIHRjb25mICkgeworICAgICAgICAgICAgdF9jbG9zZWNvbmYodGNvbmYpOworICAgICAg ICAgICAgdGNvbmYgPSBOVUxMOworICAgICAgICB9CisjZWxzZSAvKiBDT01NRU5UICovCisgICAg ICAgIHRzID0gdF9zZXJ2ZXJvcGVuKHN6VXNlck5hbWVSZXF1ZXN0ZWQpOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyNlbmRpZiAvKiBQUkVfU1JQXzFfNF80ICovCisKKyAgICAgICAgaWYoIHRzID09 IE5VTEwgKSB7CisgICAgICAgICAgICBwcmludGYoIlVzZXIgJXMgbm90IGZvdW5kXHJcbiIsIHN6 VXNlck5hbWVSZXF1ZXN0ZWQpOworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNU LCAodm9pZCAqKSAiUGFzc3dvcmQgbm90IHNldCIsIC0xKTsKKyAgICAgICAgICAgIHJldHVybihB VVRIX0ZBSUxVUkUpOworICAgICAgICB9CisKKwlwYnVmID0gKGNoYXIgKiltYWxsb2ModHMtPm4u bGVuICsgdHMtPmcubGVuICsgdHMtPnMubGVuICsgNyk7CisJcHRyID0gcGJ1ZjsKKworICAgICAg ICBzcnBfZW5jb2RlX2xlbmd0aChwdHIsIHRzLT5uLmxlbik7CisgICAgICAgIHB0ciArPSAyOwor ICAgICAgICBtZW1jcHkocHRyLCB0cy0+bi5kYXRhLCB0cy0+bi5sZW4pOyAgICAgLyogc2FmZSAq LworICAgICAgICBwdHIgKz0gdHMtPm4ubGVuOworCisgICAgICAgIHNycF9lbmNvZGVfbGVuZ3Ro KHB0ciwgdHMtPmcubGVuKTsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICAgIG1lbWNweShwdHIs IHRzLT5nLmRhdGEsIHRzLT5nLmxlbik7ICAgICAvKiBzYWZlICovCisgICAgICAgIHB0ciArPSB0 cy0+Zy5sZW47CisKKyAgICAgICAgc3JwX2VuY29kZV9sZW5ndGgocHRyLCB0cy0+cy5sZW4pOwor ICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgbWVtY3B5KHB0ciwgdHMtPnMuZGF0YSwgdHMtPnMu bGVuKTsgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgcHRyICs9IHRzLT5zLmxlbjsKKworICAgICAg ICBTZW5kU1JQQXV0aFNCKFNSUF9QQVJBTVMsIHBidWYsIHB0ciAtIHBidWYpOworCWZyZWUocGJ1 Zik7IHBidWYgPSBOVUxMOworCisgICAgICAgIEIgPSB0X3NlcnZlcmdlbmV4cCh0cyk7CisgICAg ICAgIGNrc3RybmNweShzelVzZXJOYW1lQXV0aGVudGljYXRlZCxzelVzZXJOYW1lUmVxdWVzdGVk LFVJREJVRkxFTik7CisgICAgICAgIHJldHVybiBBVVRIX1NVQ0NFU1M7CisKKyAgICBjYXNlIFNS UF9FWFA6CisgICAgICAgIC8qIENsaWVudCBpcyBzZW5kaW5nIEEgdG8gdXMsIGNvbXB1dGUgY2hh bGxlbmdlICYgZXhwZWN0ZWQgcmVzcG9uc2UuICovCisgICAgICAgIGlmICh0cyA9PSBOVUxMIHx8 IEIgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCJQcm90b2NvbCBlcnJvcjogU1JQX0VY UCB1bmV4cGVjdGVkXHJcbiIpOworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVKRUNU LAorICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAiUHJvdG9jb2wgZXJyb3I6IHVu ZXhwZWN0ZWQgRVhQIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAg ICAgICB9CisKKyAgICAgICAgLyogV2FpdCB1bnRpbCBub3cgdG8gc2VuZCBCLCBzaW5jZSBpdCBj b250YWlucyB0aGUga2V5IHRvICJ1IiAqLworICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9DSEFM TEVOR0UsIEItPmRhdGEsIEItPmxlbik7CisgICAgICAgIEIgPSBOVUxMOworCisjaWZuZGVmIFBS RV9TUlBfMV80XzUKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIG9yaWdpbmFsIFNSUCBBVVRI IGltcGxlbWVudGF0aW9uIGRpZCBub3QgcHJvdGVjdCBhZ2FpbnN0CisgICAgICAgICAqIHRhbXBl cmluZyBvZiB0aGUgYXV0aC10eXBlLXBhaXJzLiAgVGhlcmVmb3JlLCB3aGVuIHRoZQorICAgICAg ICAgKiBBVVRIX0VOQ1JZUFRfTUFTSyBiaXRzIGFyZSB6ZXJvLCBubyBleHRyYSBkYXRhIGlzIGlu c2VydGVkCisgICAgICAgICAqIGludG8gdGhlIFNSUCBoYXNoIGNvbXB1dGF0aW9uLiAgV2hlbiBB VVRIX0VOQ1JZUFRfU1RBUlRfVExTCisgICAgICAgICAqIGlzIHNldCB3ZSBhbHNvIGluc2VydCB0 aGUgU1NML1RMUyBjbGllbnQgYW5kIHNlcnZlciBmaW5pc2hlZAorICAgICAgICAgKiBtZXNzYWdl cyB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBtYW4gaW4gdGhlIG1pZGRsZSBhdHRhY2sKKyAg ICAgICAgICogdW5kZXJ3YXkgb24gdGhlIFNTTC9UTFMgY29ubmVjdGlvbi4KKyAgICAgICAgICov CisgICAgICAgIGlmICggKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSAhPSBBVVRIX0VOQ1JZUFRf T0ZGICkgeworICAgICAgICAgICAgdHlwZV9jaGVja1swXSA9IEFVVEhUWVBFX1NSUDsKKyAgICAg ICAgICAgIHR5cGVfY2hlY2tbMV0gPSBob3c7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICBp ZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExTKSB7 CisgICAgICAgICAgICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnR5cGVfY2hlY2tbMl0s MTIpOworICAgICAgICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0eXBlX2NoZWNr WzE0XSwxMik7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAg ICB0X3NlcnZlcmFkZGV4ZGF0YSh0cyx0eXBlX2NoZWNrLAorI2lmZGVmIENLX1NTTAorICAgICAg ICAgICAgICAgICAgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NU QVJUX1RMUykgPyAyNiA6CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBQUkVfU1JQXzFfNF81ICovCisK KyAgICAgICAgQS5kYXRhID0gZGF0YTsKKyAgICAgICAgQS5sZW4gPSBjbnQ7CisgICAgICAgIHB0 ciA9IHRfc2VydmVyZ2V0a2V5KHRzLCAmQSk7CisKKyAgICAgICAgaWYocHRyID09IE5VTEwpIHsK KyAgICAgICAgICAgIGlmICgxKQorICAgICAgICAgICAgICBwcmludGYoIlNlY3VyaXR5IGFsZXJ0 OiBUcml2aWFsIHNlc3Npb24ga2V5IGF0dGVtcHRlZFxyXG4iKTsKKyAgICAgICAgICAgIFNlbmRT UlBBdXRoU0IoU1JQX1JFSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikg IlRyaXZpYWwgc2Vzc2lvbiBrZXkgZGV0ZWN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAtMQorICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKEFV VEhfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgc3JwX3dhaXRyZXNwID0gMTsKKyAgICAg ICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKworICAgIGNhc2UgU1JQX1JFU1BPTlNFOgorICAgICAg ICAvKiBHb3QgdGhlIHJlc3BvbnNlOyBzZWUgaWYgaXQncyBjb3JyZWN0ICovCisgICAgICAgIGlm ICghc3JwX3dhaXRyZXNwIHx8CisgICAgICAgICAgICAgdHMgPT0gTlVMTAorICAgICAgICAgICAg ICkgeworICAgICAgICAgICAgaWYgKDEpCisgICAgICAgICAgICAgIHByaW50ZigiUHJvdG9jb2wg ZXJyb3I6IFNSUF9SRVNQT05TRSB1bmV4cGVjdGVkXHJcbiIpOworICAgICAgICAgICAgU2VuZFNS UEF1dGhTQihTUlBfUkVKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAi UHJvdG9jb2wgZXJyb3I6IHVuZXhwZWN0ZWQgUkVTUE9OU0UiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAtMQorICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0 dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgc3JwX3dhaXRyZXNwID0gMDsg ICAgICAgLyogd2UgZ290IGEgcmVzcG9uc2UgKi8KKworICAgICAgICBpZiAoY250IDwgUkVTUE9O U0VfTEVOKSB7CisgICAgICAgICAgICBpZiAoMSkKKyAgICAgICAgICAgICAgcHJpbnRmKCJQcm90 b2NvbCBlcnJvcjogbWFsZm9ybWVkIHJlc3BvbnNlXHJcbiIpOworICAgICAgICAgICAgU2VuZFNS UEF1dGhTQihTUlBfUkVKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAi UHJvdG9jb2wgZXJyb3I6IG1hbGZvcm1lZCByZXNwb25zZSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIC0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1 cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0X3NlcnZlcnZlcmlm eSh0cywgZGF0YSkgPT0gMCkgeworICAgICAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfQUNDRVBU LCB0X3NlcnZlcnJlc3BvbnNlKHRzKSwgUkVTUE9OU0VfTEVOKTsKKyAgICAgICAgICAgIGFjY2Vw dF9jb21wbGV0ZSA9IDE7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorI2lmZGVmIENLX1NTTAorICAg ICAgICAgICAgaWYgKCEoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykpCisjZW5k aWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2toZXhkdW1w KCJTUlBfUkVTUE9OU0UgdHMiLHRzLHNpemVvZih0cykpOworICAgICAgICAgICAgICAgIGNraGV4 ZHVtcCgiU1JQX1JFU1BPTlNFIHNlc3Npb25fa2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICB0cy0+c2Vzc2lvbl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgU0VTU0lPTl9LRVlf TEVOCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBza2V5LnR5 cGUgPSBTS19HRU5FUklDOworICAgICAgICAgICAgICAgIHNrZXkubGVuZ3RoID0gU0VTU0lPTl9L RVlfTEVOOworICAgICAgICAgICAgICAgIHNrZXkuZGF0YSA9IHRzLT5zZXNzaW9uX2tleTsKKyAg ICAgICAgICAgICAgICBlbmNyeXB0X3Nlc3Npb25fa2V5KCZza2V5LCBBVVRIX1NFUlZFUl9UT19D TElFTlQpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAg ICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9WQUxJRCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz ZSB7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopICJMb2dp biBpbmNvcnJlY3QiLCAtMSk7CisgICAgICAgICAgICBhdXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNU KTsKKyAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAg IHJldHVybiBBVVRIX1NVQ0NFU1M7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIlVu a25vd24gU1JQIG9wdGlvbiAlZFxyXG4iLCBkYXRhWy0xXSk7CisgICAgICAgIFNlbmRTUlBBdXRo U0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIlVua25vd24gb3B0aW9uIHJlY2VpdmVkIiwgLTEpOwor ICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICB9Cit9CisjZWxzZSAvKiBQUkVfU1JQ XzFfN18zICovCitzdGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK25ld19zcnBfcmVwbHkoaW50 IGhvdywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNudCkKKyNlbHNlCituZXdfc3JwX3JlcGx5 KGhvdyxkYXRhLGNudCkgaW50IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNl bmRpZgoreworICAgIGRhdGEgKz0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50 IHRvIHN0YXR1cyBieXRlICovCisgICAgY250ICAtPSA0OworCisgICAgaWYoY250LS0gPCAxKSB7 ICAgICAgICAgICAgICAgICAgICAgLyogTWF0Y2hlcyB3aXRoIGRhdGErKyAqLworICAgICAgICBh dXRoX2ZpbmlzaGVkKEFVVEhfUkVKRUNUKTsKKyAgICAgICAgcmV0dXJuIEFVVEhfRkFJTFVSRTsK KyAgICB9CisKKyAgICBzd2l0Y2goKmRhdGErKykgeworICAgIGNhc2UgU1JQX1BBUkFNUzogewor ICAgICAgICBzdHJ1Y3QgdF9udW0gbjsKKyAgICAgICAgc3RydWN0IHRfbnVtIGc7CisgICAgICAg IHN0cnVjdCB0X251bSBzOworICAgICAgICBjc3RyICogQTsKKworICAgICAgICBpZighc3pVc2Vy TmFtZSkgeworICAgICAgICAgICAgcHJpbnRmKCJObyB1c2VybmFtZSBhdmFpbGFibGVcclxuIik7 CisgICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAg IH0KKworICAgICAgICBuLmxlbiA9IHNycF9kZWNvZGVfbGVuZ3RoKGRhdGEpOworICAgICAgICBk YXRhICs9IDI7CisgICAgICAgIGNudCAtPSAyOworICAgICAgICBpZihuLmxlbiA+IGNudCkgewor ICAgICAgICAgICAgcHJpbnRmKCJuIHRvbyBsb25nXHJcbiIpOworICAgICAgICAgICAgcmV0dXJu KGF1dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisgICAgICAgIG4uZGF0YSA9 IGRhdGE7CisgICAgICAgIGRhdGEgKz0gbi5sZW47CisgICAgICAgIGNudCAtPSBuLmxlbjsKKwor ICAgICAgICBnLmxlbiA9IHNycF9kZWNvZGVfbGVuZ3RoKGRhdGEpOworICAgICAgICBkYXRhICs9 IDI7CisgICAgICAgIGNudCAtPSAyOworICAgICAgICBpZihnLmxlbiA+IGNudCkgeworICAgICAg ICAgICAgcHJpbnRmKCJnIHRvbyBsb25nXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKGF1dGhf cmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisgICAgICAgIGcuZGF0YSA9IGRhdGE7 CisgICAgICAgIGRhdGEgKz0gZy5sZW47CisgICAgICAgIGNudCAtPSBnLmxlbjsKKworICAgICAg ICBzLmxlbiA9IHNycF9kZWNvZGVfbGVuZ3RoKGRhdGEpOworICAgICAgICBkYXRhICs9IDI7Cisg ICAgICAgIGNudCAtPSAyOworICAgICAgICBpZihzLmxlbiAhPSBjbnQpIHsKKyAgICAgICAgICAg IHByaW50ZigiaW52YWxpZCBzYWx0XHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKGF1dGhfcmVz ZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisgICAgICAgIHMuZGF0YSA9IGRhdGE7Cisg ICAgICAgIGRhdGEgKz0gcy5sZW47CisgICAgICAgIGNudCAtPSBzLmxlbjsKKworICAgICAgICAv KiBJZiB0aGUgcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgc2VydmVyIGNhbm5vdCBiZQorICAg ICAgICAgKiB2YWxpZGF0ZWQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB3aWxsIGZhaWwuCisgICAg ICAgICAqLworICAgICAgICBjX3NycCA9IFNSUF9uZXcoU1JQX1JGQzI5NDVfY2xpZW50X21ldGhv ZCgpKTsKKyAgICAgICAgaWYgKGNfc3JwID09IE5VTEwgfHwKKwkgICAgU1JQX3NldF91c2VybmFt ZShjX3NycCwgc3pVc2VyTmFtZSkgIT0gU1JQX1NVQ0NFU1MgfHwKKwkgICAgU1JQX3NldF9wYXJh bXMoY19zcnAsbi5kYXRhLG4ubGVuLGcuZGF0YSxnLmxlbixzLmRhdGEscy5sZW4pICE9CisJICAg IFNSUF9TVUNDRVNTKSB7CisgICAgICAgICAgICBwcmludGYoIlNSUCBQYXJhbWV0ZXIgaW5pdGlh bGl6YXRpb24gZXJyb3JcclxuIik7CisgICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVU SFRZUEVfU1JQKSk7CisgICAgICAgIH0KKworICAgICAgICBBID0gY3N0cl9uZXcoKTsKKyAgICAg ICAgaWYoU1JQX2dlbl9wdWIoY19zcnAsICZBKSAhPSBTUlBfU1VDQ0VTUykgeworICAgICAgICAg ICAgcHJpbnRmKCJTUlAgRXJyb3IgZ2VuZXJhdGluZyBrZXkgZXhjaGFuZ2VcclxuIik7CisgICAg ICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKwor ICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9FWFAsIEEtPmRhdGEsIEEtPmxlbmd0aCk7CisgICAg ICAgIGNzdHJfZnJlZShBKTsKKworICAgICAgICBpZiAoIHB3YnVmWzBdICYmIHB3ZmxnICkgewor ICAgICAgICAgICAgcHJpbnRmKCJTUlAgdXNpbmcgJWQtYml0IG1vZHVsdXMgZm9yICclcydcclxu IiwKKyAgICAgICAgICAgICAgICAgICA4ICogbi5sZW4sCisgICAgICAgICAgICAgICAgICAgc3pV c2VyTmFtZQorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBja3N0cm5jcHkoc3Jw X3Bhc3N3ZCxwd2J1ZixzaXplb2Yoc3JwX3Bhc3N3ZCkpOworI2lmZGVmIE9TMgorICAgICAgICAg ICAgaWYgKCBwd2NyeXB0ICkKKyAgICAgICAgICAgICAgICBja19lbmNyeXB0KChjaGFyICopc3Jw X3Bhc3N3ZCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBleHRlcm4gY2hhciAqIHNycHB3cHJvbXB0OworICAgICAgICAgICAgY2hhciBwcmVmYWNlWzEy OF07CisgICAgICAgICAgICBpbnQgb2s7CisKKyAgICAgICAgICAgIGlmIChzcnBwd3Byb21wdCAm JiBzcnBwd3Byb21wdFswXSAmJgorCQkoc3RybGVuKHNycHB3cHJvbXB0KSArIHN0cmxlbihzelVz ZXJOYW1lKSAtIDIpIDwKKwkJc2l6ZW9mKHByZWZhY2UpKSB7CisgICAgICAgICAgICAgICAgc3By aW50ZihwcmVmYWNlLHNycHB3cHJvbXB0LHN6VXNlck5hbWUpOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBja21ha3htc2coIHByZWZhY2Usc2l6ZW9mKHByZWZhY2UpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiU1JQIHVzaW5nICIsY2tpdG9hKDgqbi5sZW4pLCIt Yml0IG1vZHVsdXMgZm9yICciLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzelVzZXJOYW1l LCAiJyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2sgPSB1cV90 eHQocHJlZmFjZSwiUGFzc3dvcmQ6ICIsMixOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAg c3JwX3Bhc3N3ZCxzaXplb2Yoc3JwX3Bhc3N3ZCktMSxOVUxMLAorCQkJREVGQVVMVF9VUV9USU1F T1VUKTsKKyAgICAgICAgICAgIGlmICggIW9rICkKKyAgICAgICAgICAgICAgICBzcnBfcGFzc3dk WzBdID0gJ1wwJzsKKyAgICAgICAgfQorCisgICAgICAgIGlmKFNSUF9zZXRfYXV0aF9wYXNzd29y ZChjX3NycCwgc3JwX3Bhc3N3ZCkgIT0gU1JQX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIG1lbXNl dChzcnBfcGFzc3dkLCAwLCBzaXplb2Yoc3JwX3Bhc3N3ZCkpOworICAgICAgICAgICAgcHJpbnRm KCJTUlAgRXJyb3Igc2V0dGluZyBjbGllbnQgcGFzc3dvcmRcclxuIik7CisgICAgICAgICAgICBy ZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgbWVt c2V0KHNycF9wYXNzd2QsIDAsIHNpemVvZihzcnBfcGFzc3dkKSk7CisgICAgICAgIHJldHVybiBB VVRIX1NVQ0NFU1M7CisgICAgfQorICAgIGNhc2UgU1JQX0NIQUxMRU5HRTogeworICAgICAgICBj aGFyIHR5cGVfY2hlY2tbMjZdOworICAgICAgICBjc3RyICogcmVzcCA9IE5VTEw7CisKKyAgICAg ICAgaWYoY19zcnAgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCJTUlAgcHJvdG9jb2wg ZXJyb3JcclxuIik7CisgICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQ KSk7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgb3JpZ2luYWwgU1JQ IEFVVEggaW1wbGVtZW50YXRpb24gZGlkIG5vdCBwcm90ZWN0IGFnYWluc3QKKyAgICAgICAgICog dGFtcGVyaW5nIG9mIHRoZSBhdXRoLXR5cGUtcGFpcnMuICBUaGVyZWZvcmUsIHdoZW4gdGhlCisg ICAgICAgICAqIEFVVEhfRU5DUllQVF9NQVNLIGJpdHMgYXJlIHplcm8sIG5vIGV4dHJhIGRhdGEg aXMgaW5zZXJ0ZWQKKyAgICAgICAgICogaW50byB0aGUgU1JQIGhhc2ggY29tcHV0YXRpb24uICBX aGVuIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMKKyAgICAgICAgICogaXMgc2V0IHdlIGFsc28gaW5z ZXJ0IHRoZSBTU0wvVExTIGNsaWVudCBhbmQgc2VydmVyIGZpbmlzaGVkCisgICAgICAgICAqIG1l c3NhZ2VzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIG1hbiBpbiB0aGUgbWlkZGxlIGF0dGFj aworICAgICAgICAgKiB1bmRlcndheSBvbiB0aGUgU1NML1RMUyBjb25uZWN0aW9uLgorICAgICAg ICAgKi8KKyAgICAgICAgaWYgKChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgIT0gQVVUSF9FTkNS WVBUX09GRikgeworICAgICAgICAgICAgdHlwZV9jaGVja1swXSA9IEFVVEhUWVBFX1NSUDsKKyAg ICAgICAgICAgIHR5cGVfY2hlY2tbMV0gPSBob3c7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAg ICBpZiAoKGhvdyAmIEFVVEhfRU5DUllQVF9NQVNLKSA9PSBBVVRIX0VOQ1JZUFRfU1RBUlRfVExT KSB7CisgICAgICAgICAgICAgICAgc3NsX2dldF9jbGllbnRfZmluaXNoZWQoJnR5cGVfY2hlY2tb Ml0sMTIpOworICAgICAgICAgICAgICAgIHNzbF9nZXRfc2VydmVyX2ZpbmlzaGVkKCZ0eXBlX2No ZWNrWzE0XSwxMik7CisgICAgICAgICAgICAgICAgU1JQX2FkZF9leF9kYXRhKGNfc3JwLCB0eXBl X2NoZWNrLCAyNik7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAg ICAgICAgICAgICAgICBTUlBfYWRkX2V4X2RhdGEoY19zcnAsIHR5cGVfY2hlY2ssIDIpOworICAg ICAgICB9CisKKyAgICAgICAgaWYoU1JQX2NvbXB1dGVfa2V5KGNfc3JwLCAmY19rZXksIGRhdGEs IGNudCkgIT0gU1JQX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHByaW50ZigiU1JQIEVSUk9SOiB1 bmFibGUgdG8gY29tcHV0ZSBjbGllbnQga2V5XHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKGF1 dGhfcmVzZW5kKEFVVEhUWVBFX1NSUCkpOworICAgICAgICB9CisKKyAgICAgICAgcmVzcCA9IGNz dHJfbmV3KCk7CisgICAgICAgIGlmKFNSUF9yZXNwb25kKGNfc3JwLCAmcmVzcCkgIT0gU1JQX1NV Q0NFU1MpIHsKKyAgICAgICAgICAgIHByaW50ZigiU1JQIEVSUk9SOiB1bmFibGUgdG8gY29tcHV0 ZSBjbGllbnQgcmVzcG9uc2VcclxuIik7CisgICAgICAgICAgICByZXR1cm4oYXV0aF9yZXNlbmQo QVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICAgICAgU2VuZFNSUEF1dGhTQihTUlBfUkVT UE9OU0UsIHJlc3AtPmRhdGEsIHJlc3AtPmxlbmd0aCk7CisgICAgICAgIGNzdHJfZnJlZShyZXNw KTsKKyAgICAgICAgc3JwX3dhaXRyZXNwID0gMTsKKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VT UzsKKyAgICB9CisgICAgY2FzZSBTUlBfQUNDRVBUOiB7CisjaWZkZWYgQ0tfRU5DUllQVElPTgor ICAgICAgICBTZXNzaW9uX0tleSBza2V5OworI2VuZGlmIC8qIEVOQ1JZUFRJT04gKi8KKworICAg ICAgICBpZihjbnQgPCBSRVNQT05TRV9MRU4gfHwgIXNycF93YWl0cmVzcCB8fCBjX3NycCA9PSBO VUxMKSB7CisgICAgICAgICAgICBwcmludGYoIlNSUCBQcm90b2NvbCBlcnJvclxyXG4iKTsKKyAg ICAgICAgICAgIHJldHVybihhdXRoX3Jlc2VuZChBVVRIVFlQRV9TUlApKTsKKyAgICAgICAgfQor ICAgICAgICBzcnBfd2FpdHJlc3AgPSAwOworCisgICAgICAgIGlmKFNSUF92ZXJpZnkoY19zcnAs IGRhdGEsIGNudCkgPT0gU1JQX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHByaW50ZigiU1JQIGFj Y2VwdHMgeW91IGFzICVzXHJcbiIsc3pVc2VyTmFtZSk7CisKKyNpZmRlZiBDS19TU0wKKyAgICAg ICAgICAgIGlmKChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSAmJgorICAgICAg ICAgICAgICAgIChob3cgJiBBVVRIX0VOQ1JZUFRfTUFTSykgPT0gQVVUSF9FTkNSWVBUX1NUQVJU X1RMUykgeworICAgICAgICAgICAgICAgIHByaW50ZigiVExTIHNlc3Npb24gcGFyYW1ldGVycyB2 ZXJpZmllZCBieSBTUlBcclxuIik7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19T U0wgKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgc2tleS50eXBlID0gU0tfR0VORVJJQzsKKyAgICAgICAgICAgICAgICBza2V5Lmxlbmd0aCA9 IGNfa2V5LT5sZW5ndGg7CisgICAgICAgICAgICAgICAgc2tleS5kYXRhID0gY19rZXktPmRhdGE7 CisgICAgICAgICAgICAgICAgZW5jcnlwdF9zZXNzaW9uX2tleSgmc2tleSwgQVVUSF9DTElFTlRf VE9fU0VSVkVSKTsKKyAgICAgICAgICAgICAgICBjc3RyX2NsZWFyX2ZyZWUoY19rZXkpOworICAg ICAgICAgICAgICAgIGNfa2V5ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCisgICAgICAgICAgICBhY2NlcHRfY29tcGxldGUgPSAxOworICAgICAgICAg ICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKKyAgICAgICAgICAgIFNSUF9mcmVlKGNfc3Jw KTsKKyAgICAgICAgICAgIGNfc3JwID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBBVVRIX1NV Q0NFU1M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwcmludGYoIlsg RXJyb3I6IFNSUCBzZXJ2ZXIgYXV0aGVudGljYXRpb24gZmFpbGVkIF1cclxuIik7CisgICAgICAg ICAgICByZXR1cm4oYXV0aF9yZXNlbmQoQVVUSFRZUEVfU1JQKSk7CisgICAgICAgIH0KKyAgICB9 CisgICAgY2FzZSBTUlBfUkVKRUNUOiB7CisgICAgICAgIGNoYXIgKiBzdHI9TlVMTDsKKworICAg ICAgICBja21ha21zZyhzdHJUbXAsc2l6ZW9mKHN0clRtcCksCisgICAgICAgICAgICAgICAgICAi U1JQIHJlZnVzZXMgYXV0aGVudGljYXRpb24gZm9yICciLHN6VXNlck5hbWUsCisgICAgICAgICAg ICAgICAgICAiJ1xyXG4iLE5VTEwpOworICAgICAgICBpZiAoY250ID4gMCkgeworICAgICAgICAg ICAgaW50IGxlbiA9IHN0cmxlbihzdHJUbXApOworICAgICAgICAgICAgaWYgKCBsZW4gKyBjbnQg PCBzaXplb2Yoc3RyVG1wKSApIHsKKyAgICAgICAgICAgICAgICBzdHIgPSBzdHJUbXAgKyBzdHJs ZW4oc3RyVG1wKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoc3RyLGRhdGEsY250KTsKKyAgICAg ICAgICAgICAgICBzdHJbY250XSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgcHJpbnRmKCJTUlAgYXV0aGVudGljYXRpb24gZmFpbGVkIVxyXG4lc1xyXG4iLHN0clRtcCk7 CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOworICAgICAgICByZXR1cm4gQVVU SF9GQUlMVVJFOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIlVua25vd24g U1JQIG9wdGlvbiAlZFxyXG4iLCBkYXRhWy0xXSk7CisgICAgICAgIHJldHVybihhdXRoX3Jlc2Vu ZChBVVRIVFlQRV9TUlApKTsKKyAgICB9CisgICAgLyogTkVWRVIgUkVBQ0hFRCAqLworfQorCitz dGF0aWMgaW50CisjaWZkZWYgQ0tfQU5TSUMKK25ld19zcnBfaXMoaW50IGhvdywgdW5zaWduZWQg Y2hhciAqZGF0YSwgaW50IGNudCkKKyNlbHNlCituZXdfc3JwX2lzKGhvdyxkYXRhLGNudCkgaW50 IGhvdzsgdW5zaWduZWQgY2hhciAqZGF0YTsgaW50IGNudDsKKyNlbmRpZgoreworICAgIGNoYXIg KiBwYnVmID0gTlVMTDsKKyAgICBjaGFyICogcHRyOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAg ICBTZXNzaW9uX0tleSBza2V5OworI2VuZGlmCisgICAgc3RhdGljIGNzdHIgKiBCID0gTlVMTDsg ICAgICAgICAgICAgLyogSG9sZGVyIGZvciBCICovCisgICAgc3RydWN0IHRfcGFzc3dkICogcGFz czsKKyAgICBjc3RyICogcmVzcDsKKyAgICBjaGFyIHR5cGVfY2hlY2tbMjZdOworCisgICAgaWYg KChjbnQgLT0gNCkgPCAxKSB7CisgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpFQ1QpOwor ICAgICAgICByZXR1cm4gQVVUSF9GQUlMVVJFOworICAgIH0KKworICAgIGRhdGEgKz0gNDsKKyAg ICBjbnQgIC09IDE7CisgICAgc3dpdGNoKCpkYXRhKyspIHsKKyAgICBjYXNlIFNSUF9BVVRIOgor ICAgICAgICAvKiBTZW5kIHBhcmFtZXRlcnMgYmFjayB0byBjbGllbnQgKi8KKyAgICAgICAgaWYo c19zcnAgIT0gTlVMTCkgeworICAgICAgICAgICAgU1JQX2ZyZWUoc19zcnApOworICAgICAgICAg ICAgc19zcnAgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChCICE9IE5VTEwpIHsKKyAg ICAgICAgICAgIGNzdHJfZnJlZShCKTsKKyAgICAgICAgICAgIEIgPSBOVUxMOworICAgICAgICB9 CisgICAgICAgIGlmKCFzelVzZXJOYW1lUmVxdWVzdGVkWzBdKSB7CisgICAgICAgICAgICBpZiAo MSkKKyAgICAgICAgICAgICAgICBwcmludGYoIk5vIHVzZXJuYW1lIGF2YWlsYWJsZVxyXG4iKTsK KyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIk5vIHVzZXJu YW1lIHN1cHBsaWVkIiwgLTEpOworICAgICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1JFSkVD VCk7CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAgICAgICAgfQorI2lmZGVm IElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgY2t4YW5vbiAm JgorICAgICAgICAgICAgICFzdHJjbXAoc3pVc2VyTmFtZVJlcXVlc3RlZCwiYW5vbnltb3VzIikp IHsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikKKyAgICAg ICAgICAgICJhbm9ueW1vdXMgbG9naW4gY2Fubm90IGJlIHBlcmZvcm1lZCB3aXRoIFNlY3VyZSBS ZW1vdGUgUGFzc3dvcmQiLAorICAgICAgICAgICAgLTEpOworICAgICAgICAgICAgYXV0aF9maW5p c2hlZChBVVRIX1JFSkVDVCk7CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworICAgICAg ICBzX3NycCA9IFNSUF9uZXcoU1JQX1JGQzI5NDVfc2VydmVyX21ldGhvZCgpKTsKKyAgICAgICAg aWYoc19zcnAgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBpbml0aWFsaXpp bmcgU1JQIHNlcnZlclxyXG4iKTsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVD VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgIlNSUCBzZXJ2ZXIgaW5pdCBm YWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAtMQorICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0K KyAgICAgICAgcGFzcyA9IGdldHRwbmFtKHN6VXNlck5hbWVSZXF1ZXN0ZWQpOworICAgICAgICBp ZihwYXNzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiVXNlciAlcyBub3QgZm91bmRc clxuIiwgc3pVc2VyTmFtZVJlcXVlc3RlZCk7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNS UF9SRUpFQ1QsICh2b2lkICopICJQYXNzd29yZCBub3Qgc2V0IiwgLTEpOworICAgICAgICAgICAg cmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgaWYoU1JQX3NldF91c2Vy bmFtZShzX3NycCwgc3pVc2VyTmFtZVJlcXVlc3RlZCkgIT0gU1JQX1NVQ0NFU1MgfHwKKwkgICBT UlBfc2V0X3BhcmFtcyhzX3NycCwgcGFzcy0+dGMubW9kdWx1cy5kYXRhLAorCQkJICBwYXNzLT50 Yy5tb2R1bHVzLmxlbiwKKwkJCSAgcGFzcy0+dGMuZ2VuZXJhdG9yLmRhdGEsCisJCQkgIHBhc3Mt PnRjLmdlbmVyYXRvci5sZW4sCisJCQkgIHBhc3MtPnRwLnNhbHQuZGF0YSwKKwkJCSAgcGFzcy0+ dHAuc2FsdC5sZW4pICE9IFNSUF9TVUNDRVNTIHx8CisJICAgU1JQX3NldF9hdXRoZW50aWNhdG9y KHNfc3JwLAorCQkJCSBwYXNzLT50cC5wYXNzd29yZC5kYXRhLAorCQkJCSBwYXNzLT50cC5wYXNz d29yZC5sZW4pICE9IFNSUF9TVUNDRVNTKSB7CisgICAgICAgICAgICBwcmludGYoIkVycm9yIGlu aXRpYWxpemluZyBTUlAgcGFyYW1ldGVyc1xyXG4iKTsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRo U0IoU1JQX1JFSkVDVCwodm9pZCAqKSJTUlAgcGFyYW1ldGVyIGluaXQgZmFpbGVkIiwgLTEpOwor ICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKworCXBidWYgPSAo Y2hhciAqKW1hbGxvYyhwYXNzLT50Yy5tb2R1bHVzLmxlbiArIHBhc3MtPnRjLmdlbmVyYXRvci5s ZW4gKworCQkJICAgICAgIHBhc3MtPnRwLnNhbHQubGVuICsgNyk7CisgICAgICAgIHB0ciA9IHBi dWY7CisKKyAgICAgICAgc3JwX2VuY29kZV9sZW5ndGgocHRyLCBwYXNzLT50Yy5tb2R1bHVzLmxl bik7CisgICAgICAgIHB0ciArPSAyOworICAgICAgICBtZW1jcHkocHRyLCBwYXNzLT50Yy5tb2R1 bHVzLmRhdGEsIHBhc3MtPnRjLm1vZHVsdXMubGVuKTsKKyAgICAgICAgcHRyICs9IHBhc3MtPnRj Lm1vZHVsdXMubGVuOworCisgICAgICAgIHNycF9lbmNvZGVfbGVuZ3RoKHB0ciwgcGFzcy0+dGMu Z2VuZXJhdG9yLmxlbik7CisgICAgICAgIHB0ciArPSAyOworICAgICAgICBtZW1jcHkocHRyLCBw YXNzLT50Yy5nZW5lcmF0b3IuZGF0YSwgcGFzcy0+dGMuZ2VuZXJhdG9yLmxlbik7CisgICAgICAg IHB0ciArPSBwYXNzLT50Yy5nZW5lcmF0b3IubGVuOworCisgICAgICAgIHNycF9lbmNvZGVfbGVu Z3RoKHB0ciwgcGFzcy0+dHAuc2FsdC5sZW4pOworICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAg bWVtY3B5KHB0ciwgcGFzcy0+dHAuc2FsdC5kYXRhLCBwYXNzLT50cC5zYWx0Lmxlbik7CisgICAg ICAgIHB0ciArPSBwYXNzLT50cC5zYWx0LmxlbjsKKworICAgICAgICBTZW5kU1JQQXV0aFNCKFNS UF9QQVJBTVMsIHBidWYsIHB0ciAtIHBidWYpOworCWZyZWUocGJ1Zik7CisJcGJ1ZiA9IE5VTEw7 CisKKyAgICAgICAgaWYoU1JQX2dlbl9wdWIoc19zcnAsICZCKSAhPSBTUlBfU1VDQ0VTUykgewor ICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBnZW5lcmF0aW5nIFNSUCBwdWJsaWMgdmFsdWVcclxu Iik7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsICh2b2lkICopICJTUlBf Z2VuX3B1YiBmYWlsZWQiLCAtMSk7CisgICAgICAgICAgICByZXR1cm4oQVVUSF9GQUlMVVJFKTsK KyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQsc3pV c2VyTmFtZVJlcXVlc3RlZCxVSURCVUZMRU4pOworICAgICAgICByZXR1cm4gQVVUSF9TVUNDRVNT OworCisgICAgY2FzZSBTUlBfRVhQOgorICAgICAgLyogQ2xpZW50IGlzIHNlbmRpbmcgQSB0byB1 cywgY29tcHV0ZSBjaGFsbGVuZ2UgYW5kIGV4cGVjdGVkIHJlc3BvbnNlLiAqLworICAgICAgICBp ZiAoc19zcnAgPT0gTlVMTCB8fCBCID09IE5VTEwpIHsKKwkgICAgcHJpbnRmKCJQcm90b2NvbCBl cnJvcjogU1JQX0VYUCB1bmV4cGVjdGVkXHJcbiIpOworCSAgICBTZW5kU1JQQXV0aFNCKFNSUF9S RUpFQ1QsCisJCSAgCSh2b2lkICopIlByb3RvY29sIGVycm9yOiB1bmV4cGVjdGVkIEVYUCIsIC0x KTsKKwkgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisJfQorICAgICAgICAvKiBXYWl0IHVudGls IG5vdyB0byBzZW5kIEIsIHNpbmNlIGl0IGNvbnRhaW5zIHRoZSBrZXkgdG8gInUiICovCisgICAg ICAgIFNlbmRTUlBBdXRoU0IoU1JQX0NIQUxMRU5HRSwgQi0+ZGF0YSwgQi0+bGVuZ3RoKTsKKyAg ICAgICAgY3N0cl9mcmVlKEIpOworICAgICAgICBCID0gTlVMTDsKKworICAgICAgICAvKgorICAg ICAgICAgKiBUaGUgb3JpZ2luYWwgU1JQIEFVVEggaW1wbGVtZW50YXRpb24gZGlkIG5vdCBwcm90 ZWN0IGFnYWluc3QKKyAgICAgICAgICogdGFtcGVyaW5nIG9mIHRoZSBhdXRoLXR5cGUtcGFpcnMu ICBUaGVyZWZvcmUsIHdoZW4gdGhlCisgICAgICAgICAqIEFVVEhfRU5DUllQVF9NQVNLIGJpdHMg YXJlIHplcm8sIG5vIGV4dHJhIGRhdGEgaXMgaW5zZXJ0ZWQKKyAgICAgICAgICogaW50byB0aGUg U1JQIGhhc2ggY29tcHV0YXRpb24uICBXaGVuIEFVVEhfRU5DUllQVF9TVEFSVF9UTFMKKyAgICAg ICAgICogaXMgc2V0IHdlIGFsc28gaW5zZXJ0IHRoZSBTU0wvVExTIGNsaWVudCBhbmQgc2VydmVy IGZpbmlzaGVkCisgICAgICAgICAqIG1lc3NhZ2VzIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5v IG1hbiBpbiB0aGUgbWlkZGxlIGF0dGFjaworICAgICAgICAgKiB1bmRlcndheSBvbiB0aGUgU1NM L1RMUyBjb25uZWN0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAoaG93ICYgQVVUSF9F TkNSWVBUX01BU0spICE9IEFVVEhfRU5DUllQVF9PRkYgKSB7CisgICAgICAgICAgICB0eXBlX2No ZWNrWzBdID0gQVVUSFRZUEVfU1JQOworICAgICAgICAgICAgdHlwZV9jaGVja1sxXSA9IGhvdzsK KyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIGlmICgoaG93ICYgQVVUSF9FTkNSWVBUX01BU0sp ID09IEFVVEhfRU5DUllQVF9TVEFSVF9UTFMpIHsKKyAgICAgICAgICAgICAgICBzc2xfZ2V0X2Ns aWVudF9maW5pc2hlZCgmdHlwZV9jaGVja1syXSwxMik7CisgICAgICAgICAgICAgICAgc3NsX2dl dF9zZXJ2ZXJfZmluaXNoZWQoJnR5cGVfY2hlY2tbMTRdLDEyKTsKKyAgICAgICAgICAgICAgICBT UlBfYWRkX2V4X2RhdGEoc19zcnAsIHR5cGVfY2hlY2ssIDI2KTsKKyAgICAgICAgICAgIH0gZWxz ZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgICAgIFNSUF9hZGRfZXhfZGF0YShz X3NycCwgdHlwZV9jaGVjaywgMik7CisgICAgICAgIH0KKworICAgICAgICBpZihTUlBfY29tcHV0 ZV9rZXkoc19zcnAsICZzX2tleSwgZGF0YSwgY250KSAhPSBTUlBfU1VDQ0VTUykgeworICAgICAg ICAgICAgcHJpbnRmKCJTZWN1cml0eSBhbGVydDogVHJpdmlhbCBzZXNzaW9uIGtleSBhdHRlbXB0 ZWRcclxuIik7CisgICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCisJCQkgICh2 b2lkICopICJUcml2aWFsIHNlc3Npb24ga2V5IGRldGVjdGVkIiwgLTEpOworICAgICAgICAgICAg cmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgc3JwX3dhaXRyZXNwID0g MTsKKyAgICAgICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKworICAgIGNhc2UgU1JQX1JFU1BPTlNF OgorICAgICAgICAvKiBHb3QgdGhlIHJlc3BvbnNlOyBzZWUgaWYgaXQncyBjb3JyZWN0ICovCisg ICAgICAgIGlmICghc3JwX3dhaXRyZXNwIHx8IHNfc3JwID09IE5VTEwpIHsKKyAgICAgICAgICAg IGlmICgxKQorICAgICAgICAgICAgICBwcmludGYoIlByb3RvY29sIGVycm9yOiBTUlBfUkVTUE9O U0UgdW5leHBlY3RlZFxyXG4iKTsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVD VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgIlByb3RvY29sIGVycm9yOiB1 bmV4cGVjdGVkIFJFU1BPTlNFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUp OworICAgICAgICB9CisgICAgICAgIHNycF93YWl0cmVzcCA9IDA7ICAgICAgIC8qIHdlIGdvdCBh IHJlc3BvbnNlICovCisKKyAgICAgICAgaWYgKGNudCA8IFJFU1BPTlNFX0xFTikgeworICAgICAg ICAgICAgaWYgKDEpCisgICAgICAgICAgICAgIHByaW50ZigiUHJvdG9jb2wgZXJyb3I6IG1hbGZv cm1lZCByZXNwb25zZVxyXG4iKTsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVD VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgIlByb3RvY29sIGVycm9yOiBt YWxmb3JtZWQgcmVzcG9uc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAtMQorICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7 CisgICAgICAgIH0KKworICAgICAgICBpZihTUlBfdmVyaWZ5KHNfc3JwLCBkYXRhLCBjbnQpID09 IFNSUF9TVUNDRVNTKSB7CisgICAgICAgICAgICByZXNwID0gY3N0cl9uZXcoKTsKKyAgICAgICAg ICAgIGlmKFNSUF9yZXNwb25kKHNfc3JwLCAmcmVzcCkgIT0gU1JQX1NVQ0NFU1MpIHsKKyAgICAg ICAgICAgICAgICBwcmludGYoIkVycm9yIGNvbXB1dGluZyByZXNwb25zZVxyXG4iKTsKKyAgICAg ICAgICAgICAgICBTZW5kU1JQQXV0aFNCKFNSUF9SRUpFQ1QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAodm9pZCAqKSAiRXJyb3IgY29tcHV0aW5nIHJlc3BvbnNlIiwgLTEpOworICAg ICAgICAgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgU2VuZFNSUEF1dGhTQihTUlBfQUNDRVBULCByZXNwLT5kYXRhLCByZXNwLT5sZW5ndGgp OworICAgICAgICAgICAgYWNjZXB0X2NvbXBsZXRlID0gMTsKKyAgICAgICAgICAgIGNzdHJfZnJl ZShyZXNwKTsKKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyNpZmRlZiBDS19TU0wKKyAgICAgICAg ICAgIGlmICghKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpKQorI2VuZGlmIC8q IENLX1NTTCAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNrZXkudHlwZSA9IFNL X0dFTkVSSUM7CisgICAgICAgICAgICAgICAgc2tleS5sZW5ndGggPSBzX2tleS0+bGVuZ3RoOwor ICAgICAgICAgICAgICAgIHNrZXkuZGF0YSA9IHNfa2V5LT5kYXRhOworICAgICAgICAgICAgICAg IGVuY3J5cHRfc2Vzc2lvbl9rZXkoJnNrZXksIEFVVEhfU0VSVkVSX1RPX0NMSUVOVCk7CisgICAg ICAgICAgICAgICAgY3N0cl9jbGVhcl9mcmVlKHNfa2V5KTsKKyAgICAgICAgICAgICAgICBzX2tl eSA9IE5VTEw7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAg ICAgICAgICAgYXV0aF9maW5pc2hlZChBVVRIX1ZBTElEKTsKKyAgICAgICAgfQorICAgICAgICBl bHNlIHsKKyAgICAgICAgICAgIFNlbmRTUlBBdXRoU0IoU1JQX1JFSkVDVCwgKHZvaWQgKikgIkxv Z2luIGluY29ycmVjdCIsIC0xKTsKKyAgICAgICAgICAgIGF1dGhfZmluaXNoZWQoQVVUSF9SRUpF Q1QpOworICAgICAgICAgICAgcmV0dXJuKEFVVEhfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIEFVVEhfU1VDQ0VTUzsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50Zigi VW5rbm93biBTUlAgb3B0aW9uICVkXHJcbiIsIGRhdGFbLTFdKTsKKyAgICAgICAgU2VuZFNSUEF1 dGhTQihTUlBfUkVKRUNULCAodm9pZCAqKSAiVW5rbm93biBvcHRpb24gcmVjZWl2ZWQiLCAtMSk7 CisgICAgICAgIHJldHVybihBVVRIX0ZBSUxVUkUpOworICAgIH0KK30KKyNlbmRpZiAvKiBQUkVf U1JQXzFfN18zICovCisjZW5kaWYgLyogU1JQICovCisKKyNpZmRlZiBLUkI1CisjaWZkZWYgS0lO SVQKKy8qCisgKiBjbGllbnRzL2tpbml0L2tpbml0LmMKKyAqCisgKiBDb3B5cmlnaHQgMTk5MCBi eSB0aGUgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKyAqIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisgKgorICogRXhwb3J0IG9mIHRoaXMgc29mdHdhcmUgZnJvbSB0aGUgVW5p dGVkIFN0YXRlcyBvZiBBbWVyaWNhIG1heQorICogICByZXF1aXJlIGEgc3BlY2lmaWMgbGljZW5z ZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuCisgKiAgIEl0IGlzIHRoZSByZXNw b25zaWJpbGl0eSBvZiBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbiBjb250ZW1wbGF0aW5nCisg KiAgIGV4cG9ydCB0byBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVmb3JlIGV4cG9ydGluZy4KKyAq CisgKiBXSVRISU4gVEhBVCBDT05TVFJBSU5ULCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQKKyAqIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRp b24gZm9yIGFueSBwdXJwb3NlIGFuZAorICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQs IHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBh bGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBh bmQgdGhhdAorICogdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5n IG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nCisgKiB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3 YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uICBNLkku VC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgorICog dGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdp dGhvdXQgZXhwcmVzcworICogb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogSW5pdGlh bGl6ZSBhIGNyZWRlbnRpYWxzIGNhY2hlLgorICovCisKKyNkZWZpbmUgS1JCNV9ERUZBVUxUX09Q VElPTlMgMAorI2RlZmluZSBLUkI1X0RFRkFVTFRfTElGRSA2MCo2MCoxMCAvKiAxMCBob3VycyAq LworCitzdGF0aWMga3JiNV9kYXRhIHRndG5hbWUgPSB7CisjaWZuZGVmIEhFSU1EQUwKKyAgICAw LAorI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICBLUkI1X1RHU19OQU1FX1NJWkUsCisgICAgS1JC NV9UR1NfTkFNRQorfTsKKworLyogSW50ZXJuYWwgcHJvdG90eXBlcyAqLworX1BST1RPVFlQKHN0 YXRpYyBrcmI1X2Vycm9yX2NvZGUga3JiNV92YWxpZGF0ZV90Z3QsCisgICAgICAgIChrcmI1X2Nv bnRleHQsIGtyYjVfY2NhY2hlLGtyYjVfcHJpbmNpcGFsLCBrcmI1X2RhdGEgKikpOworX1BST1RP VFlQKHN0YXRpYyBrcmI1X2Vycm9yX2NvZGUga3JiNV9yZW5ld190Z3QsCisgICAgICAgIChrcmI1 X2NvbnRleHQsIGtyYjVfY2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmlu Y2lwYWwsIGtyYjVfZGF0YSAqKSk7CitfUFJPVE9UWVAoc3RhdGljIGtyYjVfZXJyb3JfY29kZSBr cmI1X3RndF9nZW4sCisgICAgICAgIChrcmI1X2NvbnRleHQsIGtyYjVfY2NhY2hlLAorICAgICAg ICAgICAgICAgICAgICAgICAga3JiNV9wcmluY2lwYWwsIGtyYjVfZGF0YSAqLCBpbnQgb3B0KSk7 CisKKyNpZmRlZiBLUkI1X0hBVkVfR0VUX0lOSVRfQ1JFRFMKK3N0YXRpYyBrcmI1X2Vycm9yX2Nv ZGUgS1JCNV9DQUxMQ09OVgorY2tfa3JiNV9wcm9tcHRlcigga3JiNV9jb250ZXh0IGNvbnRleHQs CisgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhbm5lciwKKyAgICAg ICAgICAgICAgICAgIGludCBudW1fcHJvbXB0cywKKyAgICAgICAgICAgICAgICAgIGtyYjVfcHJv bXB0IHByb21wdHNbXSkKK3sKKyAgICBrcmI1X2Vycm9yX2NvZGUgICAgIGVycmNvZGUgPSAwOwor ICAgIGludCAgICAgICAgICAgICAgICAgaTsKKyNpZmRlZiBLVUkKKyAgICBzdHJ1Y3QgdHh0Ym94 ICogdGIgPSBOVUxMOworI2Vsc2UgLyogS1VJICovCisgICAgY2hhciAqIHByb21wdCA9IE5VTEw7 CisjZW5kaWYgLyogS1VJICovCisgICAgaW50ICAgIGxlbiA9IDAsIGJsZW49MCwgbmxlbj0wOwor CisgICAgZGVidWcoRjExMCwiY2tfa3JiNV9wcm9tcHRlciBuYW1lIixuYW1lLDApOworICAgIGRl YnVnKEYxMTAsImNrX2tyYjVfcHJvbXB0ZXIgYmFubmVyIixiYW5uZXIsMCk7CisgICAgZGVidWco RjEwMSwiY2tfa3JiNV9wcm9tcHRlciBudW1fcHJvbXB0cyIsIiIsbnVtX3Byb21wdHMpOworCisg ICAgaWYgKG5hbWUpCisgICAgICAgIG5sZW4gPSBzdHJsZW4obmFtZSkrMjsKKworICAgIGlmIChi YW5uZXIpCisgICAgICAgIGJsZW4gPSBzdHJsZW4oYmFubmVyKSsyOworCisjaWZkZWYgS1VJCisg ICAgdGIgPSAoc3RydWN0IHR4dGJveCAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0eHRib3gpICog bnVtX3Byb21wdHMpOworICAgIGlmICggdGIgIT0gTlVMTCApIHsKKyAgICAgICAgaW50IG9rOwor ICAgICAgICBtZW1zZXQodGIsMCxzaXplb2Yoc3RydWN0IHR4dGJveCkgKiBudW1fcHJvbXB0cyk7 CisgICAgICAgIGZvciAoIGk9MDsgaSA8IG51bV9wcm9tcHRzOyBpKysgKSB7CisgICAgICAgICAg ICB0YltpXS50X2J1ZiA9IHByb21wdHNbaV0ucmVwbHktPmRhdGE7CisgICAgICAgICAgICB0Yltp XS50X2xlbiA9IHByb21wdHNbaV0ucmVwbHktPmxlbmd0aDsKKyAgICAgICAgICAgIHRiW2ldLnRf bGJsID0gcHJvbXB0c1tpXS5wcm9tcHQ7CisgICAgICAgICAgICB0YltpXS50X2RmbHQgPSBOVUxM OworICAgICAgICAgICAgdGJbaV0udF9lY2hvID0gKHByb21wdHNbaV0uaGlkZGVuID8gMiA6IDEp OworICAgICAgICB9ICAgCisKKyAgICAgICAgb2sgPSB1cV9tdHh0KChjaGFyICopYmFubmVyLE5V TEwsbnVtX3Byb21wdHMsdGIpOworICAgICAgICBpZiAoIG9rICkgeworICAgICAgICAgICAgZm9y ICggaT0wOyBpIDwgbnVtX3Byb21wdHM7IGkrKyApCisgICAgICAgICAgICAgICAgcHJvbXB0c1tp XS5yZXBseS0+bGVuZ3RoID0gc3RybGVuKHByb21wdHNbaV0ucmVwbHktPmRhdGEpOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICAgIGVycmNvZGUgPSAtMjsKKyAgICB9CisjZWxzZSAvKiBLVUkg Ki8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3Byb21wdHM7IGkrKykgeworICAgICAgICBkZWJ1 ZyhGMTExLCJja19rcmI1X3Byb21wdGVyIHByb21wdCIscHJvbXB0c1tpXS5wcm9tcHQsaSk7CisK KyAgICAgICAgaWYgKCBwcm9tcHQgJiYgbGVuIDwgKG5sZW4gKyBibGVuICsgc3RybGVuKHByb21w dHNbaV0ucHJvbXB0KSsyKSApIHsKKyAgICAgICAgICAgIGZyZWUocHJvbXB0KTsKKyAgICAgICAg ICAgIHByb21wdCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhcHJvbXB0ICkKKyAg ICAgICAgICAgIHByb21wdCA9IChjaGFyICopbWFsbG9jKG5sZW4gKyBibGVuICsgc3RybGVuKHBy b21wdHNbaV0ucHJvbXB0KSsyKTsKKyAgICAgICAgaWYgKCAhcHJvbXB0ICkgeworICAgICAgICAg ICAgZXJyY29kZSA9IEtSQjVfUkNfTUFMTE9DOworICAgICAgICAgICAgZ290byBjbGVhbnVwOwor ICAgICAgICB9CisgICAgICAgIGxlbiA9IG5sZW4gKyBibGVuICsgc3RybGVuKHByb21wdHNbaV0u cHJvbXB0KSsyOworICAgICAgICBja21ha3htc2cocHJvbXB0LGxlbiwKKyAgICAgICAgICAgICAg ICAgKGNoYXIgKikgKG5hbWU/bmFtZToiIiksCisgICAgICAgICAgICAgICAgIG5hbWU/IlxyXG4i OiIiLAorICAgICAgICAgICAgICAgICAoY2hhciAqKSAoYmFubmVyP2Jhbm5lcjoiIiksCisgICAg ICAgICAgICAgICAgIGJhbm5lcj8iXHJcbiI6IiIsCisgICAgICAgICAgICAgICAgIChjaGFyICop cHJvbXB0c1tpXS5wcm9tcHQsCisgICAgICAgICAgICAgICAgICI6ICIsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwpOworCisgICAgICAgIG1lbXNldChwcm9tcHRzW2ldLnJlcGx5LT5kYXRh LCAwLCBwcm9tcHRzW2ldLnJlcGx5LT5sZW5ndGgpOworICAgICAgICBpZiAocHJvbXB0c1tpXS5o aWRkZW4pIHsKKyAgICAgICAgICAgIHJlYWRwYXNzKHByb21wdCwgcHJvbXB0c1tpXS5yZXBseS0+ ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICBwcm9tcHRzW2ldLnJlcGx5LT5sZW5ndGgpOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVhZHRleHQocHJvbXB0LCBwcm9tcHRzW2ld LnJlcGx5LT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHByb21wdHNbaV0ucmVwbHktPmxl bmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvbXB0c1tpXS5yZXBseS0+bGVuZ3RoID0gc3Ry bGVuKHByb21wdHNbaV0ucmVwbHktPmRhdGEpOworICAgIH0KKyNlbmRpZiAvKiBLVUkgKi8KKwor ICBjbGVhbnVwOgorI2lmZGVmIEtVSQorICAgIGlmICggdGIgKQorICAgICAgICBmcmVlKHRiKTsK KyNlbHNlIC8qIEtVSSAqLworICAgIGlmICggcHJvbXB0ICkKKyAgICAgICAgZnJlZShwcm9tcHQp OworI2VuZGlmIC8qIEtVSSAqLworICAgIGlmIChlcnJjb2RlKSB7CisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBudW1fcHJvbXB0czsgaSsrKSB7CisgICAgICAgICAgICBtZW1zZXQocHJvbXB0c1tp XS5yZXBseS0+ZGF0YSwgMCwgcHJvbXB0c1tpXS5yZXBseS0+bGVuZ3RoKTsKKyAgICAgICAgfQor ICAgIH0KKyAgICByZXR1cm4gZXJyY29kZTsKK30KKworLyoKKyAqICAgICAgSSdtIG5vdCByZWFs bHkgc3VyZSB3aGF0IHRvIGRvIHdpdGggdGhpcy4gIFRoZSBOUkwgRExMcyB1c2UgYQorICogICAg ICBkaWZmZXJlbnQgaW50ZXJmYWNlIGZvciB0aGUga3JiNV9wcm9tcHRlciBjYWxsYmFjay4gIEl0 IGhhcworICogICAgICBvbmUgbGVzcyBwYXJhbWV0ZXIuICAgVGhpcyBpcyBnb2luZyB0byBiZSB1 Z2x5LgorICovCitzdGF0aWMga3JiNV9lcnJvcl9jb2RlIEtSQjVfQ0FMTENPTlYKK2NrX05STF9r cmI1X3Byb21wdGVyKCBrcmI1X2NvbnRleHQgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJh bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3Byb21wdHMsCisgICAgICAgICAg ICAgICAgICAgICAga3JiNV9wcm9tcHQgcHJvbXB0c1tdKQoreworICAgIHJldHVybihja19rcmI1 X3Byb21wdGVyKGNvbnRleHQsTlVMTCxuYW1lLGJhbm5lcixudW1fcHJvbXB0cyxwcm9tcHRzKSk7 Cit9CisjZW5kaWYgLyogS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTICovCisKKyNpZmRlZiBLUkI1 MjRfQ09OVgorbG9uZwordHJ5X2NvbnZlcnQ1MjQoa3JiNV9jb250ZXh0IGN0eCwga3JiNV9wcmlu Y2lwYWwgbWUsIGtyYjVfY2NhY2hlIGNjKQoreworICAgIGNoYXIgKiBwcm9nbmFtZSA9ICJjb252 ZXJ0NTI0IjsKKyAgICBrcmI1X2Vycm9yX2NvZGUgY29kZSA9IDA7CisgICAgaW50IGljb2RlID0g MDsKKyAgICBrcmI1X3ByaW5jaXBhbCBrcGNzZXJ2ZXIgPSAwOworICAgIGtyYjVfY3JlZHMgKnY1 Y3JlZHMgPSAwOworICAgIGtyYjVfY3JlZHMgaW5jcmVkczsKKyNpZmRlZiBPUzIKKyAgICBMRUFT SF9DUkVERU5USUFMUyB2NGNyZWRzOworI2Vsc2UgLyogT1MyICovCisgICAgQ1JFREVOVElBTFMg djRjcmVkczsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIG1lbXNldCgoY2hhciAqKSAmaW5jcmVk cywgMCwgc2l6ZW9mKGluY3JlZHMpKTsKKyAgICAvKgorICAgICAgRnJvbSB0aGlzIHBvaW50IG9u LCB3ZSBjYW4gZ290byBjbGVhbnVwIGJlY2F1c2UgaW5jcmVkcyBpcworICAgICAgaW5pdGlhbGl6 ZWQuCisgICAgKi8KKworICAgIGlmICgoY29kZSA9IGtyYjVfYnVpbGRfcHJpbmNpcGFsKGN0eCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma3Bjc2VydmVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNfcmVhbG0oY3R4LCBtZSkt Pmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrcmI1X3ByaW5j X3JlYWxtKGN0eCwgbWUpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJrcmJ0Z3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVf cHJpbmNfcmVhbG0oY3R4LCBtZSktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCkpKSB7CisgICAgICAgIGNvbV9lcnIocHJvZ25hbWUsIGNvZGUsCisgICAg ICAgICAgICAgICAgIndoaWxlIGNyZWF0aW5nIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWUiKTsKKyAg ICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIG1lbXNldCgoY2hhciopICZpbmNyZWRz LCAwLCBzaXplb2YoaW5jcmVkcykpOworICAgIGluY3JlZHMuY2xpZW50ID0gbWU7CisgICAgaW5j cmVkcy5zZXJ2ZXIgPSBrcGNzZXJ2ZXI7CisgICAgLyogUHJldmVudCBkdXBsaWNhdGUgZnJlZSBj YWxscy4gICovCisgICAga3Bjc2VydmVyID0gMDsKKworICAgIGluY3JlZHMudGltZXMuZW5kdGlt ZSA9IDA7CisgICAgaW5jcmVkcy5rZXlibG9jay5lbmN0eXBlID0gRU5DVFlQRV9ERVNfQ0JDX0NS QzsKKyAgICBpZiAoKGNvZGUgPSBrcmI1X2dldF9jcmVkZW50aWFscyhjdHgsIDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmluY3JlZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnY1Y3JlZHMpKSkgeworICAgICAgICBjb21fZXJyKHByb2duYW1lLCBjb2RlLAorICAg ICAgICAgICAgICAgICJnZXR0aW5nIFY1IGNyZWRlbnRpYWxzIik7CisgICAgICAgIGdvdG8gY2xl YW51cDsKKyAgICB9CisgICAgaWYgKChpY29kZSA9IGtyYjUyNF9jb252ZXJ0X2NyZWRzX2tkYyhj dHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NWNyZWRzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnY0Y3JlZHMpKSkgewor ICAgICAgICBjb21fZXJyKHByb2duYW1lLCBpY29kZSwKKyAgICAgICAgICAgICAgICAiY29udmVy dGluZyB0byBWNCBjcmVkZW50aWFscyIpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQor ICAgIC8qIHRoaXMgaXMgc3RvbGVuIGZyb20gdGhlIHY0IGtpbml0ICovCisgICAgLyogaW5pdGlh bGl6ZSB0aWNrZXQgY2FjaGUgKi8KKyAgICBpZiAoKGljb2RlID0ga3JiX2luX3RrdCh2NGNyZWRz LnBuYW1lLCB2NGNyZWRzLnBpbnN0LCB2NGNyZWRzLnJlYWxtKQorICAgICAgICAgIT0gS1NVQ0NF U1MpKSB7CisgICAgICAgIGNvbV9lcnIocHJvZ25hbWUsIGljb2RlLAorICAgICAgICAgICAgICAg ICJ0cnlpbmcgdG8gY3JlYXRlIHRoZSBWNCB0aWNrZXQgZmlsZSIpOworICAgICAgICBnb3RvIGNs ZWFudXA7CisgICAgfQorICAgIC8qIHN0YXNoIHRpY2tldCwgc2Vzc2lvbiBrZXksIGV0Yy4gZm9y IGZ1dHVyZSB1c2UgKi8KKyAgICBpZiAoKGljb2RlID0ga3JiX3NhdmVfY3JlZGVudGlhbHModjRj cmVkcy5zZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NGNy ZWRzLmluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NGNy ZWRzLnJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NGNyZWRz LnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0Y3JlZHMu bGlmZXRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0Y3JlZHMu a3ZubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJih2NGNyZWRzLnRp Y2tldF9zdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0Y3JlZHMu aXNzdWVfZGF0ZSkpKSB7CisgICAgICAgIGNvbV9lcnIocHJvZ25hbWUsIGljb2RlLAorICAgICAg ICAgICAgICAgICJ0cnlpbmcgdG8gc2F2ZSB0aGUgVjQgdGlja2V0Iik7CisgICAgICAgIGdvdG8g Y2xlYW51cDsKKyAgICB9CisKKyBjbGVhbnVwOgorICAgIG1lbXNldCgmdjRjcmVkcywgMCwgc2l6 ZW9mKHY0Y3JlZHMpKTsKKyAgICBpZiAodjVjcmVkcykKKyAgICAgICAga3JiNV9mcmVlX2NyZWRz KGN0eCwgdjVjcmVkcyk7CisgICAgaW5jcmVkcy5jbGllbnQgPSAwOworICAgIGtyYjVfZnJlZV9j cmVkX2NvbnRlbnRzKGN0eCwgJmluY3JlZHMpOworICAgIGlmIChrcGNzZXJ2ZXIpCisgICAgICAg IGtyYjVfZnJlZV9wcmluY2lwYWwoY3R4LCBrcGNzZXJ2ZXIpOworICAgIHJldHVybiAhKGNvZGUg fHwgaWNvZGUpOworfQorI2VuZGlmIC8qIEtSQjUyNF9DT05WICovCisKKyNkZWZpbmUgTk9fS0VZ VEFCCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI1X2luaXRUR1QoIHN0cnVjdCBrcmJf b3BfZGF0YSAqIG9wLCBzdHJ1Y3Qga3JiNV9pbml0X2RhdGEgKiBpbml0LAorICAgICAgICAgICAg ICAgICBzdHJ1Y3Qga3JiNF9pbml0X2RhdGEgKiBrNF9pbml0KQorI2Vsc2UKK2NrX2tyYjVfaW5p dFRHVChvcCxpbml0LGs0X2luaXQpCisgICAga3JiX29wX2RhdGEgKiBvcDsgc3RydWN0IGtyYjVf aW5pdF9kYXRhICogaW5pdDsKKyAgICBzdHJ1Y3Qga3JiNF9pbml0X2RhdGEgKiBrNF9pbml0Owor I2VuZGlmIC8qIENLX0FOU0lDKi8KK3sKKyAgICBrcmI1X2NvbnRleHQga2NvbnRleHQ7CisgICAg a3JiNV9jY2FjaGUgY2NhY2hlID0gTlVMTDsKKyAgICBrcmI1X2RlbHRhdCBsaWZldGltZSA9IEtS QjVfREVGQVVMVF9MSUZFOyAgIC8qIC1sIG9wdGlvbiAqLworICAgIGtyYjVfdGltZXN0YW1wIHN0 YXJ0dGltZSA9IDA7CisgICAga3JiNV9kZWx0YXQgcmxpZmUgPSAwOworICAgIGludCBvcHRpb25z ID0gS1JCNV9ERUZBVUxUX09QVElPTlM7CisgICAgaW50IG9wdGlvbjsKKyAgICBpbnQgZXJyZmxn ID0gMDsKKyAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKKyAgICBrcmI1X3ByaW5jaXBhbCBtZT1O VUxMOworICAgIGtyYjVfcHJpbmNpcGFsIHNlcnZlcj1OVUxMOworICAgIGtyYjVfY3JlZHMgbXlf Y3JlZHM7CisgICAga3JiNV90aW1lc3RhbXAgbm93OworI2lmbmRlZiBIRUlNREFMCisgICAga3Ji NV9hZGRyZXNzICoqYWRkcnMgPSAoa3JiNV9hZGRyZXNzICoqKTA7CisjZW5kaWYgLyogSEVJTURB TCAqLworICAgIGludCBhZGRyX2NvdW50PTA7CisgICAgaW50IGksajsKKyNpZm5kZWYgTk9fS0VZ VEFCCisgICAgaW50IHVzZV9rZXl0YWIgPSAwOyAgICAgICAgICAgICAgICAgLyogLWsgb3B0aW9u ICovCisgICAga3JiNV9rZXl0YWIga2V5dGFiID0gTlVMTDsKKyNlbmRpZiAvKiBOT19LRVlUQUIg Ki8KKyAgICBzdHJ1Y3QgcGFzc3dkICpwdyA9IDA7CisgICAgaW50IHB3c2l6ZTsKKyAgICBjaGFy ICpjbGllbnRfbmFtZT1OVUxMLCBwcmluY2lwYWxbMjU2XT0iIiwgcmVhbG1bMjU2XT0iIiwgbnVt c3RyWzQwXT0iIjsKKyAgICBjaGFyICpwYXNzd29yZD1OVUxMLCBwYXNzd2RbODBdPSIiOworI2lm ZGVmIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUworICAgIGtyYjVfZ2V0X2luaXRfY3JlZHNfb3B0 IG9wdHM7CisjZW5kaWYKKyAgICBjaGFyICogbmFtZTsKKyAgICBpbnQgbGVuOworCisgICAgaWYg KCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigtMSk7CisKKyNpZmRl ZiBDT01NRU5UCisgICAgcHJpbnRmKCJLZXJiZXJvcyBWIGluaXRpYWxpemF0aW9uXHJcbiIpOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGNvZGUgPSBrcmI1X2luaXRfY29udGV4dCgma2Nv bnRleHQpOworICAgIGlmIChjb2RlKSB7CisgICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNv ZGUsIndoaWxlIGluaXRfY29udGV4dCIpOworICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKKyAg ICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Cisg ICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgZGVidWcoRjExMCwia3JiNV9pbml0Iiwi a3JiNV9pbml0X2NvbnRleHQiLDApOworCisgICAgaWYgKChjb2RlID0ga3JiNV90aW1lb2ZkYXko a2NvbnRleHQsICZub3cpKSkgeworICAgICAgICBjb21fZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3 aGlsZSBnZXR0aW5nIHRpbWUgb2YgZGF5Iik7CisgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0Owor ICAgIH0KKworI2lmZGVmIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUworICAgIG1lbXNldCgmb3B0 cywgMCwgc2l6ZW9mKG9wdHMpKTsKKyAgICBrcmI1X2dldF9pbml0X2NyZWRzX29wdF9pbml0KCZv cHRzKTsKKyAgICBkZWJ1ZyhGMTEwLCJrcmI1X2luaXQiLCJrcmI1X2dldF9pbml0X2NyZWRzX29w dF9pbml0IiwwKTsKKyNlbmRpZgorCisgICAgaWYgKCBpbml0LT5yZW5ld2FibGUgKSB7CisgICAg ICAgIG9wdGlvbnMgfD0gS0RDX09QVF9SRU5FV0FCTEU7CisgICAgICAgIGNrbWFrbXNnKG51bXN0 cixzaXplb2YobnVtc3RyKSxja2l0b2EoaW5pdC0+cmVuZXdhYmxlKSwibSIsTlVMTCxOVUxMKTsK KyNpZmRlZiBIRUlNREFMCisgICAgICAgIGNvZGUgPSAtMTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8K KyAgICAgICAgY29kZSA9IGtyYjVfc3RyaW5nX3RvX2RlbHRhdChudW1zdHIsICZybGlmZSk7Cisj ZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICBpZiAoY29kZSAhPSAwIHx8IHJsaWZlID09IDAp IHsKKyAgICAgICAgICAgIHByaW50ZigiQmFkIHJlbmV3YWJsZSB0aW1lIHZhbHVlICVzXHJcbiIs IG51bXN0cik7CisgICAgICAgICAgICBlcnJmbGcrKzsKKyAgICAgICAgfQorI2lmZGVmIEtSQjVf SEFWRV9HRVRfSU5JVF9DUkVEUworICAgICAgICBrcmI1X2dldF9pbml0X2NyZWRzX29wdF9zZXRf cmVuZXdfbGlmZSgmb3B0cywgcmxpZmUpOworI2VuZGlmCisgICAgfQorICAgIGlmICggaW5pdC0+ cmVuZXcgKSB7CisgICAgICAgIC8qIHJlbmV3IHRoZSB0aWNrZXQgKi8KKyAgICAgICAgb3B0aW9u cyB8PSBLRENfT1BUX1JFTkVXOworICAgIH0KKworICAgIGlmICggaW5pdC0+dmFsaWRhdGUgKSB7 CisgICAgICAgIC8qIHZhbGlkYXRlIHRoZSB0aWNrZXQgKi8KKyAgICAgICAgb3B0aW9ucyB8PSBL RENfT1BUX1ZBTElEQVRFOworICAgIH0KKyAgICBpZiAoIGluaXQtPnByb3hpYWJsZSApIHsKKyAg ICAgICAgb3B0aW9ucyB8PSBLRENfT1BUX1BST1hJQUJMRTsKKyNpZmRlZiBLUkI1X0hBVkVfR0VU X0lOSVRfQ1JFRFMKKyAgICAgICAga3JiNV9nZXRfaW5pdF9jcmVkc19vcHRfc2V0X3Byb3hpYWJs ZSgmb3B0cywgMSk7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKCBpbml0LT5mb3J3YXJkYWJsZSAp IHsKKyAgICAgICAgb3B0aW9ucyB8PSBLRENfT1BUX0ZPUldBUkRBQkxFOworI2lmZGVmIEtSQjVf SEFWRV9HRVRfSU5JVF9DUkVEUworICAgICAgICBrcmI1X2dldF9pbml0X2NyZWRzX29wdF9zZXRf Zm9yd2FyZGFibGUoJm9wdHMsIDEpOworI2VuZGlmCisgICAgfQorI2lmbmRlZiBOT19LRVlUQUIK KyAgICBpZiAoICApIHsKKyAgICAgICAgdXNlX2tleXRhYiA9IDE7CisgICAgfQorICAgIGlmICgg ICkgeworICAgICAgICBpZiAoa2V5dGFiID09IE5VTEwgJiYga2V5dGFiX25hbWUgIT0gTlVMTCkg eworICAgICAgICAgICAgY29kZSA9IGtyYjVfa3RfcmVzb2x2ZShrY29udGV4dCwga2V5dGFiX25h bWUsICZrZXl0YWIpOworICAgICAgICAgICAgaWYgKGNvZGUgIT0gMCkgeworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImtyYjVfaW5pdCByZXNvbHZpbmcga2V5dGFiIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBrZXl0YWJfbmFtZSxjb2RlKTsKKyAgICAgICAgICAgICAgICBlcnJmbGcr KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT19LRVlUQUIg Ki8KKyAgICBpZiAoIGluaXQtPmxpZmV0aW1lICkgeworICAgICAgICBja21ha21zZyhudW1zdHIs c2l6ZW9mKG51bXN0ciksY2tpdG9hKGluaXQtPmxpZmV0aW1lKSwibSIsTlVMTCxOVUxMKTsKKyNp ZmRlZiBIRUlNREFMCisgICAgICAgIGNvZGUgPSAtMTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAg ICAgICAgY29kZSA9IGtyYjVfc3RyaW5nX3RvX2RlbHRhdChudW1zdHIsICZsaWZldGltZSk7Cisj ZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICBpZiAoY29kZSAhPSAwIHx8IGxpZmV0aW1lID09 IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiQmFkIGxpZmV0aW1lIHZhbHVlICVzXHJcbiIsIG51 bXN0cik7CisgICAgICAgICAgICBlcnJmbGcrKzsKKyAgICAgICAgfQorI2lmZGVmIEtSQjVfSEFW RV9HRVRfSU5JVF9DUkVEUworICAgICAgICBrcmI1X2dldF9pbml0X2NyZWRzX29wdF9zZXRfdGt0 X2xpZmUoJm9wdHMsIGxpZmV0aW1lKTsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAoIGluaXQtPnBv c3RkYXRlICkgeworICAgICAgICAvKiBDb252ZXJ0IGNtZGF0ZSgpIHRvIGEgdGltZV90IHZhbHVl ICovCisgICAgICAgIHN0cnVjdCB0bSAqIHRpbWVfdG07CisgICAgICAgIHN0cnVjdCB0bSAqIGNt ZGF0ZTJ0bShjaGFyICosaW50KTsKKyAgICAgICAgdGltZV90bSA9IGNtZGF0ZTJ0bShpbml0LT5w b3N0ZGF0ZSwwKTsKKyAgICAgICAgaWYgKCB0aW1lX3RtICkKKyAgICAgICAgICAgIHN0YXJ0dGlt ZSA9IChrcmI1X3RpbWVzdGFtcCkgbWt0aW1lKHRpbWVfdG0pOworCisgICAgICAgIGlmIChjb2Rl ICE9IDAgfHwgc3RhcnR0aW1lID09IDAgfHwgc3RhcnR0aW1lID09IC0xKSB7CisgICAgICAgICAg ICBrcmI1X2RlbHRhdCBrdG1wOworI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgICAgIGNvZGUgPSAt MTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgIGNvZGUgPSBrcmI1X3N0cmluZ190 b19kZWx0YXQoaW5pdC0+cG9zdGRhdGUsICZrdG1wKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisg ICAgICAgICAgICBpZiAoY29kZSA9PSAwICYmIGt0bXAgIT0gMCkgeworICAgICAgICAgICAgICAg IHN0YXJ0dGltZSA9IG5vdyArIGt0bXA7CisgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBLRENf T1BUX1BPU1REQVRFRDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJp bnRmKCJCYWQgcG9zdGRhdGUgc3RhcnQgdGltZSB2YWx1ZSAlc1xyXG4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgaW5pdC0+cG9zdGRhdGUpOworICAgICAgICAgICAgICAgIGVycmZsZysrOwor ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3B0aW9ucyB8PSBL RENfT1BUX1BPU1REQVRFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRlYnVnKEYxMTAsImty YjVfaW5pdCBzZWFyY2hpbmcgZm9yIGNjYWNoZSIsb3AtPmNhY2hlLDApOworCisgICAgY29kZSA9 IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNjYWNoZSxvcC0+Y2FjaGUpOworICAgIGlmIChjb2Rl ICE9IDApIHsKKyAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIsY29kZSwid2hpbGUgZ2V0dGlu ZyBkZWZhdWx0IGNjYWNoZSIpOworICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyAgICB9CisK KyAgICAvKiBUaGlzIGlzIG91ciByZWFsbSB1bmxlc3MgaXQgaXMgY2hhbmdlZCAqLworICAgIGNr c3RybmNweShyZWFsbSxpbml0LT5yZWFsbSA/IGluaXQtPnJlYWxtIDoga3JiNV9kX3JlYWxtLCAy NTYpOworCisjaWZkZWYgQkVUQVRFU1QKKyAgICAvKiBUaGlzIGNvZGUgaXMgZ29pbmcgdG8gdGFr ZSB0aGUgcmVhbG0gYW5kIGF0dGVtcHQgdG8gY29ycmVjdCAqLworICAgIC8qIHRoZSBjYXNlLiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAg eworICAgICAgICBwcm9maWxlX3QgcHJvZmlsZTsKKworICAgICAgICBjb2RlID0ga3JiNV9nZXRf cHJvZmlsZShrY29udGV4dCwgJnByb2ZpbGUpOworICAgICAgICBpZiAoICFjb2RlICkgeworICAg ICAgICAgICAgY29uc3QgY2hhciAgKm5hbWVzWzRdOworICAgICAgICAgICAgY2hhciAqKiByZWFs bXM7CisgICAgICAgICAgICBpbnQgZm91bmQgPSAwOworCisgICAgICAgICAgICBuYW1lc1swXSA9 ICJyZWFsbXMiOworICAgICAgICAgICAgbmFtZXNbMV0gPSBOVUxMOworCisgICAgICAgICAgICBj b2RlID0gcHJvZmlsZV9nZXRfc3Vic2VjdGlvbl9uYW1lcyhwcm9maWxlLG5hbWVzLCZyZWFsbXMp OworICAgICAgICAgICAgaWYgKCBjb2RlID09IDAgKSB7CisgICAgICAgICAgICAgICAgaW50IGk9 MDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIHJlYWxtc1tpXSApIHsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKGNrc3RyY21wKHJlYWxtLHJlYWxtc1tpXSwtMSwwKSA9PSAwKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBzdHJjcHkocmVhbG0scmVhbG1zW2ldKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisKKyNpZmRlZiBDS19ETlNfU1JWCisgICAgICAgICAgICBp ZiAoICFmb3VuZCApIHsKKyAgICAgICAgICAgICAgICBjaGFyICogZG5zX3JlYWxtID0gTlVMTDsK KworICAgICAgICAgICAgICAgIC8qIFdlIGRpZCBub3QgZmluZCB0aGUgcmVhbG0gaW4gdGhlIHBy b2ZpbGUgc28gbGV0J3MgdHJ5IEROUyAqLworICAgICAgICAgICAgICAgIGxvY2F0ZV90eHRfcnIo Il9rZXJiZXJvcyIscmVhbG0sJmRuc19yZWFsbSk7CisgICAgICAgICAgICAgICAgaWYgKCBkbnNf cmVhbG0gJiYKKyAgICAgICAgICAgICAgICAgICAgIGNrc3RyY21wKHJlYWxtLGRuc19yZWFsbSwt MSwwKSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICBja3N0cmNtcChyZWFsbSxkbnNfcmVh bG0sLTEsMSkgIT0gMAorICAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAg ICAgIGNrc3RybmNweShyZWFsbSxkbnNfcmVhbG0sMjU2KTsKKyAgICAgICAgICAgICAgICAgICAg ZnJlZShkbnNfcmVhbG0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRp ZiAvKiBDS19ETlNfU1JWICovCisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5pdC0+cmVhbG0g JiYKKyAgICAgICAgICAgICBja3N0cmNtcChyZWFsbSxpbml0LT5yZWFsbSwtMSwwKSA9PSAwICYm CisgICAgICAgICAgICAgY2tzdHJjbXAocmVhbG0saW5pdC0+cmVhbG0sLTEsMSkgIT0gMCkKKyAg ICAgICAgICAgIHN0cmNweShpbml0LT5yZWFsbSxyZWFsbSk7CisgICAgICAgIGlmIChja3N0cmNt cChyZWFsbSxrcmI1X2RfcmVhbG0sLTEsMCkgPT0gMCAmJgorICAgICAgICAgICAgIGNrc3RyY21w KHJlYWxtLGtyYjVfZF9yZWFsbSwtMSwxKSAhPSAwKQorICAgICAgICAgICAgc3RyY3B5KGtyYjVf ZF9yZWFsbSxyZWFsbSk7CisgICAgfQorI2VuZGlmIC8qIEJFVEFURVNUICovCisKKyAgICBpZiAo aW5pdC0+cHJpbmNpcGFsID09IE5VTEwpIHsgICAgICAgLyogTm8gcHJpbmNpcGFsIG5hbWUgc3Bl Y2lmaWVkICovCisjaWZuZGVmIE5PX0tFWVRBQgorICAgICAgICBpZiAodXNlX2tleXRhYikgewor ICAgICAgICAgICAgLyogVXNlIHRoZSBkZWZhdWx0IGhvc3Qvc2VydmljZSBuYW1lICovCisgICAg ICAgICAgICBjb2RlID0ga3JiNV9zbmFtZV90b19wcmluY2lwYWwoa2NvbnRleHQsIE5VTEwsIE5V TEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfTlRf U1JWX0hTVCwgJm1lKTsKKyAgICAgICAgICAgIGlmIChjb2RlID09IDAgJiYKKyAgICAgICAgICAg ICAgICBrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmxlbmd0aCA8IHNpemVvZihyZWFs bSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2F2ZSB0aGUgcmVhbG0gKi8K KyAgICAgICAgICAgICAgICBtZW1jcHkocmVhbG0sa3JiNV9wcmluY19yZWFsbShrY29udGV4dCwg bWUpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9wcmluY19yZWFsbShrY29u dGV4dCwgbWUpLT5sZW5ndGgpOyAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgcmVhbG1ba3Ji NV9wcmluY19yZWFsbShrY29udGV4dCwgbWUpLT5sZW5ndGhdPSdcMCc7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLAorICAgICAgICAg ICAgICAgICAgICAgICAgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIGNyZWF0 aW5nIGRlZmF1bHQgc2VydmVyIHByaW5jaXBhbCBuYW1lIik7CisgICAgICAgICAgICAgICAgZ290 byBleGl0X2s1X2luaXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8q IE5PX0tFWVRBQiAqLworICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuOworICAgICAgICAg ICAgY2hhciAqIG5hbWU7CisKKyAgICAgICAgICAgIC8qIEdldCBkZWZhdWx0IHByaW5jaXBhbCBm cm9tIGNhY2hlIGlmIG9uZSBleGlzdHMgKi8KKyAgICAgICAgICAgIGNvZGUgPSBrcmI1X2NjX2dl dF9wcmluY2lwYWwoa2NvbnRleHQsIGNjYWNoZSwgJm1lKTsKKyNpZmRlZiBIRUlNREFMCisgICAg ICAgICAgICBuYW1lID0gbWUtPnJlYWxtOworICAgICAgICAgICAgbGVuID0gc3RybGVuKG5hbWUp OworI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAgICAgbGVuID0ga3JiNV9wcmluY19yZWFs bShrY29udGV4dCwgbWUpLT5sZW5ndGg7CisgICAgICAgICAgICBuYW1lID0ga3JiNV9wcmluY19y ZWFsbShrY29udGV4dCwgbWUpLT5kYXRhOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICAgICAg ICAgIGlmIChjb2RlID09IDAgJiYgbGVuIDwgc2l6ZW9mKHJlYWxtKSkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAvKiBTYXZlIHRoZSByZWFsbSAqLworICAgICAgICAgICAgICAgIG1l bWNweShyZWFsbSxuYW1lLGxlbik7IC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICByZWFsbVts ZW5dPSdcMCc7CisgICAgICAgICAgICB9IGVsc2UgeworI2lmZGVmIEhBVkVfUFdEX0gKKyAgICAg ICAgICAgICAgICAvKiBFbHNlIHNlYXJjaCBwYXNzd2QgZmlsZSBmb3IgY2xpZW50ICovCisKKyAg ICAgICAgICAgICAgICBwdyA9IGdldHB3dWlkKChpbnQpIGdldHVpZCgpKTsKKyAgICAgICAgICAg ICAgICBpZiAocHcpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBwcmluY19yZWFsbVsyNTZd OworICAgICAgICAgICAgICAgICAgICBpZiAoIChzdHJsZW4ocHctPnB3X25hbWUpICsgc3RybGVu KHJlYWxtKSArIDEpID4gMjU1ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9r NV9pbml0OworCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShwcmluY2lwYWwscHctPnB3 X25hbWUsMjU2KTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHByaW5jX3JlYWxtLHB3 LT5wd19uYW1lLDI1Nik7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChwcmluY19yZWFs bSwiQCIsMjU2KTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHByaW5jX3JlYWxtLHJl YWxtLDI1Nik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChjb2RlID0ga3JiNV9wYXJzZV9u YW1lKGtjb250ZXh0LHByaW5jX3JlYWxtLCZtZSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBrcmI1X2Vycm5vID0gY29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbV9lcnIoImty YjVfa2luaXQiLGNvZGUsIndoZW4gcGFyc2luZyBuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcmluY19yZWFsbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGV4aXRfazVfaW5pdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAgICAg ICAgICJVbmFibGUgdG8gaWRlbnRpZnkgdXNlciBmcm9tIHBhc3N3b3JkIGZpbGVcclxuIik7Cisg ICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OworICAgICAgICAgICAgICAgIH0K KyNlbHNlIC8qIEhBVkVfUFdEX0ggKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIlVuYWJsZSB0 byBpZGVudGlmeSB1c2VyXHJcbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0 OworI2VuZGlmIC8qIEhBVkVfUFdEX0ggKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisj aWZkZWYgSEVJTURBTAorICAgICAgICBsZW4gPSBtZS0+bmFtZS5uYW1lX3N0cmluZy5sZW47Cisg ICAgICAgIG5hbWUgPSAqbWUtPm5hbWUubmFtZV9zdHJpbmcudmFsOworI2Vsc2UgLyogSEVJTURB TCAqLworICAgICAgICBsZW4gPSBrcmI1X3ByaW5jX25hbWUoa2NvbnRleHQsIG1lKS0+bGVuZ3Ro OworICAgICAgICBuYW1lID0ga3JiNV9wcmluY19uYW1lKGtjb250ZXh0LCBtZSktPmRhdGE7Cisj ZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICBpZiAoIGxlbiA8IHNpemVvZihwcmluY2lwYWwp ICkgeworICAgICAgICAgICAgbWVtY3B5KHByaW5jaXBhbCxuYW1lLGxlbik7ICAgICAvKiBzYWZl ICovCisgICAgICAgICAgICBwcmluY2lwYWxbbGVuXT0nXDAnOworICAgICAgICB9CisgICAgfSAv KiBVc2Ugc3BlY2lmaWVkIG5hbWUgKi8KKyAgICBlbHNlIHsKKyAgICAgICAgY2hhciBwcmluY19y ZWFsbVsyNTZdOworICAgICAgICBpZiAoIChzdHJsZW4oaW5pdC0+cHJpbmNpcGFsKSArCisgICAg ICAgICAgICAgIChpbml0LT5pbnN0YW5jZSA/IHN0cmxlbihpbml0LT5pbnN0YW5jZSkrMSA6IDAp ICsKKyAgICAgICAgICAgICAgc3RybGVuKHJlYWxtKQorICAgICAgICAgICAgICArIDIpID4gMjU1 ICkKKyAgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKworICAgICAgICBja3N0cm5jcHko cHJpbmNpcGFsLGluaXQtPnByaW5jaXBhbCwyNTYpOworICAgICAgICBja3N0cm5jcHkocHJpbmNf cmVhbG0saW5pdC0+cHJpbmNpcGFsLDI1Nik7CisgICAgICAgIGlmIChpbml0LT5pbnN0YW5jZSkg eworICAgICAgICAgICAgY2tzdHJuY2F0KHByaW5jX3JlYWxtLCIvIiwyNTYpOworICAgICAgICAg ICAgY2tzdHJuY2F0KHByaW5jX3JlYWxtLGluaXQtPmluc3RhbmNlLDI1Nik7CisgICAgICAgIH0K KyAgICAgICAgaWYgKHJlYWxtWzBdKSB7CisgICAgICAgICAgY2tzdHJuY2F0KHByaW5jX3JlYWxt LCJAIiwyNTYpOworICAgICAgICAgIGNrc3RybmNhdChwcmluY19yZWFsbSxyZWFsbSwyNTYpOwor ICAgICAgICB9CisgICAgICAgIGlmICgoY29kZSA9IGtyYjVfcGFyc2VfbmFtZSAoa2NvbnRleHQs IHByaW5jX3JlYWxtLCAmbWUpKSkgeworICAgICAgICAgICAgY29tX2Vycigia3JiNV9raW5pdCIs Y29kZSwid2hlbiBwYXJzaW5nIG5hbWUiLHByaW5jX3JlYWxtKTsKKyAgICAgICAgICAgIGdvdG8g ZXhpdF9rNV9pbml0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChjb2RlID0ga3JiNV91 bnBhcnNlX25hbWUoa2NvbnRleHQsIG1lLCAmY2xpZW50X25hbWUpKSkgeworICAgICAgICBjb21f ZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGVuIHVucGFyc2luZyBuYW1lIik7CisgICAgICAgIGdv dG8gZXhpdF9rNV9pbml0OworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJrcmI1X2luaXQgY2xpZW50 X25hbWUiLGNsaWVudF9uYW1lLDApOworCisKKyAgICBtZW1zZXQoKGNoYXIgKikmbXlfY3JlZHMs IDAsIHNpemVvZihteV9jcmVkcykpOworICAgIG15X2NyZWRzLmNsaWVudCA9IG1lOworCisgICAg aWYgKGluaXQtPnNlcnZpY2UgPT0gTlVMTCkgeworICAgICAgICBpZiAoKGNvZGUgPQorICAgICAg ICAgICAgIGtyYjVfYnVpbGRfcHJpbmNpcGFsX2V4dChrY29udGV4dCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RybGVuKHJlYWxtKSxyZWFsbSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGd0bmFtZS5sZW5ndGgsIHRndG5hbWUuZGF0YSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHJlYWxtKSxyZWFsbSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpKSB7CisgICAgICAgICAgICBjb21f ZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGlsZSBidWlsZGluZyBzZXJ2ZXIgbmFtZSIpOworICAg ICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg ICAgICBpZiAoY29kZSA9IGtyYjVfcGFyc2VfbmFtZShrY29udGV4dCwgaW5pdC0+c2VydmljZSwg JnNlcnZlcikpIHsKKyAgICAgICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndoaWxl IHBhcnNpbmcgc2VydmljZSBuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgaW5pdC0+c2Vydmlj ZSk7CisgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIG15X2NyZWRzLnNlcnZlciA9IHNlcnZlcjsKKworICAgIGlmIChvcHRpb25zICYgS0RDX09Q VF9QT1NUREFURUQpIHsKKyAgICAgICAgbXlfY3JlZHMudGltZXMuc3RhcnR0aW1lID0gc3RhcnR0 aW1lOworICAgICAgICBteV9jcmVkcy50aW1lcy5lbmR0aW1lID0gc3RhcnR0aW1lICsgbGlmZXRp bWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbXlfY3JlZHMudGltZXMuc3RhcnR0aW1lID0gMDsg ICAvKiBzdGFydCB0aW1lciB3aGVuIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnZXRzIHRvIEtEQyAqLworICAgICAgICBteV9jcmVkcy50aW1lcy5l bmR0aW1lID0gbm93ICsgbGlmZXRpbWU7CisgICAgfQorICAgIGlmIChvcHRpb25zICYgS0RDX09Q VF9SRU5FV0FCTEUpIHsKKyAgICAgICAgbXlfY3JlZHMudGltZXMucmVuZXdfdGlsbCA9IG5vdyAr IHJsaWZlOworICAgIH0gZWxzZQorICAgICAgICBteV9jcmVkcy50aW1lcy5yZW5ld190aWxsID0g MDsKKworICAgIGlmIChvcHRpb25zICYgS0RDX09QVF9WQUxJREFURSkgeworICAgICAgICBrcmI1 X2RhdGEgb3V0YnVmOworCisjaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAgICAg IGNvZGUgPSBrcmI1X2dldF92YWxpZGF0ZWRfY3JlZHMoa2NvbnRleHQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm15X2NyZWRzLCBtZSwgY2NhY2hlLCBpbml0LT5z ZXJ2aWNlKTsKKyAgICAgICAgaWYgKCBjb2RlID09IC0xICkKKyNlbmRpZgorICAgICAgICB7Cisj aWZkZWYgSEVJTURBTAorICAgICAgICAgICAgcHJpbnRmKCI/dmFsaWRhdGUgbm90IGltcGxlbWVu dGVkXHJcbiIpOworICAgICAgICAgICAgY29kZSA9IC0xOworICAgICAgICAgICAgZ290byBleGl0 X2s1X2luaXQ7CisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICBjb2RlID0ga3JiNV92 YWxpZGF0ZV90Z3Qoa2NvbnRleHQsIGNjYWNoZSwgc2VydmVyLCAmb3V0YnVmKTsKKyNlbmRpZiAv KiBIRUlNREFMICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvZGUpIHsKKyAgICAgICAgICAg IGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsInZhbGlkYXRpbmcgdGd0Iik7CisgICAgICAgICAg ICBnb3RvIGV4aXRfazVfaW5pdDsKKyAgICAgICAgfQorICAgICAgICAvKiBzaG91bGQgYmUgZG9u ZS4uLiAqLworICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyAgICB9CisKKyAgICBpZiAob3B0 aW9ucyAmIEtEQ19PUFRfUkVORVcpIHsKKyAgICAgICAga3JiNV9kYXRhIG91dGJ1ZjsKKworI2lm ZGVmIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUworICAgICAgICBjb2RlID0ga3JiNV9nZXRfcmVu ZXdlZF9jcmVkcyhrY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm15X2NyZWRzLCBtZSwgY2NhY2hlLCBpbml0LT5zZXJ2aWNlKTsKKyAgICAgICAgaWYgKCBj b2RlID09IC0xICkKKyNlbmRpZgorICAgICAgICB7CisjaWZkZWYgSEVJTURBTAorICAgICAgICAg ICAgcHJpbnRmKCI/cmVuZXcgbm90IGltcGxlbWVudGVkXHJcbiIpOworICAgICAgICAgICAgY29k ZSA9IC0xOworICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7CisjZWxzZSAvKiBIRUlNREFM ICovCisgICAgICAgICAgICBjb2RlID0ga3JiNV9yZW5ld190Z3Qoa2NvbnRleHQsIGNjYWNoZSwg c2VydmVyLCAmb3V0YnVmKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisgICAgICAgIH0KKyAgICAg ICAgaWYgKGNvZGUpIHsKKyAgICAgICAgICAgIGNvbV9lcnIoImtyYjVfa2luaXQiLGNvZGUsIndo aWxlIHJlbmV3aW5nIHRndCIpOworICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7CisgICAg ICAgIH0KKyAgICAgICAgLyogc2hvdWxkIGJlIGRvbmUuLi4gKi8KKyAgICAgICAgZ290byBzdG9y ZV9jcmVkOworICAgIH0KKworI2lmbmRlZiBIRUlNREFMCisgICAgaWYgKCBpbml0LT5hZGRycyAm JiAhaW5pdC0+bm9fYWRkcmVzc2VzICkgeworICAgICAgICAvKiBjb25zdHJ1Y3QgYW4gYXJyYXkg b2Yga3JiNV9hZGRyZXNzIHN0cnVjdHMgdG8gcGFzcyB0byBnZXRfaW5fdGt0ICovCisgICAgICAg IC8qIGluY2x1ZGUgYm90aCB0aGUgbG9jYWwgaXAgYWRkcmVzc2VzIGFzIHdlbGwgYXMgYW55IG90 aGVyIHRoYXQgICAgKi8KKyAgICAgICAgLyogYXJlIHNwZWNpZmllZC4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICB1bnNpZ25lZCBs b25nIGlwYWRkcjsKKworICAgICAgICBmb3IgKCBhZGRyX2NvdW50PTA7YWRkcl9jb3VudDxLUkI1 X05VTV9PRl9BRERSUzthZGRyX2NvdW50KysgKQorICAgICAgICAgICAgaWYgKCBpbml0LT5hZGRy c1thZGRyX2NvdW50XSA9PSBOVUxMICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg ICBpZiAoYWRkcl9jb3VudCA+IDApIHsKKyAgICAgICAgICAgIGtyYjVfYWRkcmVzcyAqKiBsb2Nh bF9hZGRycz1OVUxMOworICAgICAgICAgICAga3JiNV9vc19sb2NhbGFkZHIoa2NvbnRleHQsICZs b2NhbF9hZGRycyk7CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIHdoaWxlICggbG9j YWxfYWRkcnNbaV0gKQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIGFkZHJfY291 bnQgKz0gaTsKKworICAgICAgICAgICAgYWRkcnMgPSAoa3JiNV9hZGRyZXNzICoqKQorICAgICAg ICAgICAgICBtYWxsb2MoKGFkZHJfY291bnQrMSkgKiBzaXplb2Yoa3JiNV9hZGRyZXNzICopKTsK KyAgICAgICAgICAgIGlmICggIWFkZHJzICkgeworICAgICAgICAgICAgICAgIGtyYjVfZnJlZV9h ZGRyZXNzZXMoa2NvbnRleHQsIGxvY2FsX2FkZHJzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4 aXRfazVfaW5pdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbXNldChhZGRycywgMCwg c2l6ZW9mKGtyYjVfYWRkcmVzcyAqKSAqIChhZGRyX2NvdW50KzEpKTsKKyAgICAgICAgICAgIGkg PSAwOworICAgICAgICAgICAgd2hpbGUgKCBsb2NhbF9hZGRyc1tpXSApIHsKKyAgICAgICAgICAg ICAgICBhZGRyc1tpXSA9IChrcmI1X2FkZHJlc3MgKiltYWxsb2Moc2l6ZW9mKGtyYjVfYWRkcmVz cykpOworICAgICAgICAgICAgICAgIGlmIChhZGRyc1tpXSA9PSBOVUxMKSB7CisgICAgICAgICAg ICAgICAgICAgIGtyYjVfZnJlZV9hZGRyZXNzZXMoa2NvbnRleHQsIGxvY2FsX2FkZHJzKTsKKyAg ICAgICAgICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7CisgICAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgICAgYWRkcnNbaV0tPm1hZ2ljID0gbG9jYWxfYWRkcnNbaV0tPm1hZ2lj OworICAgICAgICAgICAgICAgIGFkZHJzW2ldLT5hZGRydHlwZSA9IGxvY2FsX2FkZHJzW2ldLT5h ZGRydHlwZTsKKyAgICAgICAgICAgICAgICBhZGRyc1tpXS0+bGVuZ3RoID0gbG9jYWxfYWRkcnNb aV0tPmxlbmd0aDsKKyAgICAgICAgICAgICAgICBhZGRyc1tpXS0+Y29udGVudHMgPSAodW5zaWdu ZWQgY2hhciAqKW1hbGxvYyhhZGRyc1tpXS0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBpZiAo IWFkZHJzW2ldLT5jb250ZW50cykgeworICAgICAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfYWRk cmVzc2VzKGtjb250ZXh0LCBsb2NhbF9hZGRycyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8g ZXhpdF9rNV9pbml0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1lbWNw eShhZGRyc1tpXS0+Y29udGVudHMsbG9jYWxfYWRkcnNbaV0tPmNvbnRlbnRzLAorICAgICAgICAg ICAgICAgICAgICAgICAgbG9jYWxfYWRkcnNbaV0tPmxlbmd0aCk7ICAgICAgICAvKiBzYWZlICov CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAga3JiNV9m cmVlX2FkZHJlc3NlcyhrY29udGV4dCwgbG9jYWxfYWRkcnMpOworCisgICAgICAgICAgICBmb3Ig KCBqPTA7aTxhZGRyX2NvdW50O2krKyxqKysgKSB7CisgICAgICAgICAgICAgICAgYWRkcnNbaV0g PSAoa3JiNV9hZGRyZXNzICopbWFsbG9jKHNpemVvZihrcmI1X2FkZHJlc3MpKTsKKyAgICAgICAg ICAgICAgICBpZiAoYWRkcnNbaV0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBl eGl0X2s1X2luaXQ7CisKKyAgICAgICAgICAgICAgICBhZGRyc1tpXS0+bWFnaWMgPSBLVjVNX0FE RFJFU1M7CisgICAgICAgICAgICAgICAgYWRkcnNbaV0tPmFkZHJ0eXBlID0gQUZfSU5FVDsKKyAg ICAgICAgICAgICAgICBhZGRyc1tpXS0+bGVuZ3RoID0gNDsKKyAgICAgICAgICAgICAgICBhZGRy c1tpXS0+Y29udGVudHMgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhhZGRyc1tpXS0+bGVuZ3Ro KTsKKyAgICAgICAgICAgICAgICBpZiAoIWFkZHJzW2ldLT5jb250ZW50cykKKyAgICAgICAgICAg ICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7CisKKyAgICAgICAgICAgICAgICBpcGFkZHIgPSBp bmV0X2FkZHIoaW5pdC0+YWRkcnNbal0pOworICAgICAgICAgICAgICAgIG1lbWNweShhZGRyc1tp XS0+Y29udGVudHMsJmlwYWRkciw0KTsgICAvKiBzYWZlICovCisgICAgICAgICAgICB9CisjaWZk ZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAgICAgICAgICBrcmI1X2dldF9pbml0X2Ny ZWRzX29wdF9zZXRfYWRkcmVzc19saXN0KCZvcHRzLGFkZHJzKTsKKyNlbmRpZgorICAgICAgICB9 CisgICAgIH0KKyNlbmRpZiAvKiAhSEVJTURBTCAqLworI2lmZGVmIEtSQjVfSEFWRV9HRVRfSU5J VF9DUkVEUworICAgIGlmICggaW5pdC0+bm9fYWRkcmVzc2VzICkKKyAgICAgICAga3JiNV9nZXRf aW5pdF9jcmVkc19vcHRfc2V0X2FkZHJlc3NfbGlzdCgmb3B0cyxOVUxMKTsKKyNlbmRpZgorCisj aWZuZGVmIE5PX0tFWVRBQgorICAgIGlmICghdXNlX2tleXRhYikKKyNlbmRpZgorICAgIHsKKyAg ICAgICAgaWYgKCBpbml0LT5wYXNzd29yZCApIHsKKyAgICAgICAgICAgIHB3c2l6ZSA9IHN0cmxl bihpbml0LT5wYXNzd29yZCk7CisgICAgICAgICAgICBpZiAoIHB3c2l6ZSApCisgICAgICAgICAg ICAgICAgcGFzc3dvcmQgPSBpbml0LT5wYXNzd29yZDsKKyAgICAgICAgfSBlbHNlIGlmIChpbml0 LT5nZXRrNCAmJiBrNF9pbml0KSB7CisgICAgICAgICAgICAvKiBXaGVuIHdlIGFyZSByZXF1ZXN0 aW5nIHRoYXQgSzQgdGlja2V0cyBiZSBhdXRvbWF0aWNhbGx5ICovCisgICAgICAgICAgICAvKiBh Y3F1aXJlZCB3aGVuIEs1IHRpY2tldHMgYXJlIGFjcXVpcmVkLCB3ZSBtdXN0IGdldCB0aGUgICov CisgICAgICAgICAgICAvKiBwYXNzd29yZCB1cCBmcm9udC4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBjaGFyIHBybXB0WzI1Nl07CisgICAgICAg ICAgICBleHRlcm4gY2hhciAqIGs1cHJwcm9tcHQ7CisgICAgICAgICAgICBleHRlcm4gY2hhciAq IGs1cHdwcm9tcHQ7CisgICAgICAgICAgICBpbnQgb2sgPSAwOworCisgICAgICAgICAgICBpZiAo IGs1cHdwcm9tcHQgJiYgazVwd3Byb21wdFswXSAmJgorICAgICAgICAgICAgICAgICAoc3RybGVu KGs1cHdwcm9tcHQpICsgc3RybGVuKHByaW5jaXBhbCkgKworICAgICAgICAgICAgICAgICAgc3Ry bGVuKHJlYWxtKSAtIDQpIDwgc2l6ZW9mKHBybXB0KSkgeworICAgICAgICAgICAgICAgIHNwcmlu dGYocHJtcHQsazVwd3Byb21wdCxwcmluY2lwYWwscmVhbG0pOworICAgICAgICAgICAgfSBlbHNl CisgICAgICAgICAgICAgICAgY2ttYWt4bXNnKHBybXB0LHNpemVvZihwcm1wdCksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBrNXB3cHJvbXB0ICYmIGs1cHdwcm9tcHRbMF0gPyBrNXB3cHJv bXB0IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyA1IFBhc3N3b3JkIGZv ciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbmNpcGFsLCJAIixyZWFsbSwiOiAi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIG9rID0g dXFfdHh0KE5VTEwscHJtcHQsMixOVUxMLHBhc3N3ZCw4MCxOVUxMLERFRkFVTFRfVVFfVElNRU9V VCk7CisgICAgICAgICAgICBpZiAoIG9rICkKKyAgICAgICAgICAgICAgICBwYXNzd29yZCA9IHBh c3N3ZDsKKworICAgICAgICAgICAgaWYgKCBrNF9pbml0LT5wYXNzd29yZCA9PSBOVUxMICkKKyAg ICAgICAgICAgICAgICBtYWtlc3RyKCZrNF9pbml0LT5wYXNzd29yZCxwYXNzd2QpOworICAgICAg ICB9CisjaWZkZWYgS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTCisgICAgICAgIGRlYnVnKEYxMDAs ImtyYjVfaW5pdCBjYWxsaW5nIGtyYjVfZ2V0X2luaXRfY3JlZHNfcGFzc3dvcmQoKSIsIiIsMCk7 CisjaWZkZWYgT1MyCisgICAgICAgIGlmICggaXNfTlJMX0tSQjUoKSApCisgICAgICAgICAgICBj b2RlID0ga3JiNV9nZXRfaW5pdF9jcmVkc19wYXNzd29yZChrY29udGV4dCwgJm15X2NyZWRzLCBt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNz d29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dm9pZCAqKWNrX05STF9rcmI1X3Byb21wdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RhcnR0aW1lLCBpbml0LT5zZXJ2aWNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRzKTsKKyAgICAgICAg ZWxzZQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgY29kZSA9IGtyYjVfZ2V0X2luaXRf Y3JlZHNfcGFzc3dvcmQoa2NvbnRleHQsICZteV9jcmVkcywgbWUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfa3JiNV9wcm9tcHRlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dGltZSwg aW5pdC0+c2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmb3B0cyk7CisgICAgICAgIGRlYnVnKEYxMTEsImtyYjVfaW5pdCIsImtyYjVfZ2V0 X2luaXRfY3JlZHNfcGFzc3dvcmQoKSIsY29kZSk7CisKKyAgICAgICAgaWYgKCBjb2RlID09IC0x ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFwYXNzd29yZCkgeworICAgICAgICAgICAg ICAgIGNoYXIgcHJtcHRbMjU2XTsKKyAgICAgICAgICAgICAgICBpbnQgb2s7CisKKyAgICAgICAg ICAgICAgICBja21ha21zZyhwcm1wdCxzaXplb2YocHJtcHQpLCJLZXJiZXJvcyA1IFBhc3N3b3Jk IGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfbmFtZSwiOiAiLE5VTEwp OworICAgICAgICAgICAgICAgIG9rID0gdXFfdHh0KE5VTEwscHJtcHQsMixOVUxMLHBhc3N3ZCw4 MCxOVUxMLAorCQkJICAgIERFRkFVTFRfVVFfVElNRU9VVCk7CisgICAgICAgICAgICAgICAgaWYg KCBvayApCisgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dkOworICAgICAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb2RlID0gLTI7CisgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXhpdF9rNV9pbml0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgaWYgKCAhcGFzc3dvcmQgKSAKKyAgICAgICAgICAgICAgICBw YXNzd29yZCA9ICIiOworICAgICAgICAgICAgY29kZSA9IGtyYjVfZ2V0X2luX3RrdF93aXRoX3Bh c3N3b3JkKGtjb250ZXh0LCBvcHRpb25zLAorI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyNlbHNlIC8qIEhFSU1E QUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdC0+ bm9fYWRkcmVzc2VzID8gTlVMTCA6YWRkcnMsCisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29y ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgJm15X2NyZWRzLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICggY29kZSApCisgICAgICAgICAg ICAgICAgZGVidWcoRjExMSwia3JiNV9pbml0Iiwia3JiNV9nZXRfaW5fdGt0X3dpdGhfcGFzc3dv cmQoKSIsY29kZSk7CisgICAgICAgIH0KKyNlbHNlIC8qIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVE UyAqLworICAgICAgICBpZiAoIXBhc3N3b3JkKSB7CisgICAgICAgICAgICBjaGFyIHBybXB0WzI1 Nl07CisgICAgICAgICAgICBpbnQgb2s7CisKKyAgICAgICAgICAgIGNrbWFrbXNnKHBybXB0LHNp emVvZihwcm1wdCksIktlcmJlcm9zIDUgUGFzc3dvcmQgZm9yICIsCisgICAgICAgICAgICAgICAg ICAgICAgY2xpZW50X25hbWUsIjogIixOVUxMKTsKKyAgICAgICAgICAgIG9rID0gdXFfdHh0KE5V TEwscHJtcHQsMixOVUxMLHBhc3N3ZCw4MCxOVUxMLERFRkFVTFRfVVFfVElNRU9VVCk7CisgICAg ICAgICAgICBpZiAoIG9rICkKKyAgICAgICAgICAgICAgICBwYXNzd29yZCA9IHBhc3N3ZDsKKyAg ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvZGUgPSAtMjsKKyAgICAgICAgICAg ICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBpZiAoICFwYXNzd29yZCApIAorICAgICAgICAgICAgcGFzc3dvcmQgPSAiIjsKKyAgICAgICAg Y29kZSA9IGtyYjVfZ2V0X2luX3RrdF93aXRoX3Bhc3N3b3JkKGtjb250ZXh0LCBvcHRpb25zLAor I2lmZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBOVUxMLAorI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbml0LT5ub19hZGRyZXNzZXMgPyBOVUxMIDphZGRycywKKyNl bmRpZiAvKiBIRUlNREFMICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMLCAmbXlfY3JlZHMsIE5VTEwpOworICAgICAgICBpZiAoIGNvZGUgKQor ICAgICAgICAgICAgZGVidWcoRjExMSwia3JiNV9pbml0Iiwia3JiNV9nZXRfaW5fdGt0X3dpdGhf cGFzc3dvcmQoKSIsY29kZSk7CisjZW5kaWYgLyogS1JCNV9IQVZFX0dFVF9JTklUX0NSRURTICov CisKKyAgICAgICAgaWYgKCBpbml0LT5wYXNzd29yZCAmJiBwd3NpemUgPiAwICkKKyAgICAgICAg ICAgIG1lbXNldChpbml0LT5wYXNzd29yZCwgMCwgcHdzaXplKTsKKyAgICAgICAgbWVtc2V0KHBh c3N3ZCwwLDgwKTsKKyAgICB9CisjaWZuZGVmIE5PX0tFWVRBQgorICAgIGVsc2UgeworI2lmZGVm IEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUworICAgICAgICBjb2RlID0ga3JiNV9nZXRfaW5pdF9j cmVkc19rZXl0YWIoa2NvbnRleHQsICZteV9jcmVkcywgbWUsIGtleXRhYiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHRpbWUsIGluaXQtPnNlcnZpY2Us CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wdHMpOworI2lm ZGVmIE9TMgorICAgICAgICBpZiAoIGNvZGUgPT0gLTEpCisgICAgICAgICAgICBjb2RlID0ga3Ji NV9nZXRfaW5fdGt0X3dpdGhfa2V5dGFiKGtjb250ZXh0LCBvcHRpb25zLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQtPm5vX2FkZHJlc3NlcyA/IE5VTEwg OmFkZHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgTlVMTCwga2V5dGFiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm15X2NyZWRzLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNl IC8qIEtSQjVfSEFWRV9HRVRfSU5JVF9DUkVEUyAqLworICAgICAgICBjb2RlID0ga3JiNV9nZXRf aW5fdGt0X3dpdGhfa2V5dGFiKGtjb250ZXh0LCBvcHRpb25zLAorI2lmZGVmIEhFSU1EQUwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyNl bHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5pdC0+bm9fYWRkcmVzc2VzID8gTlVMTCA6YWRkcnMsCisjZW5kaWYgLyogSEVJTURB TCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBO VUxMLCBrZXl0YWIsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZteV9jcmVkcywgMCk7CisjZW5kaWYgLyogS1JCNV9IQVZFX0dFVF9JTklUX0NSRURT ICovCisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoY29kZSkgeworICAgICAgICBzd2l0Y2ggKGNv ZGUpIHsKKyAgICAgICAgY2FzZSBLUkI1S1JCX0FQX0VSUl9CQURfSU5URUdSSVRZOgorICAgICAg ICAgICAgcHJpbnRmKCJQYXNzd29yZCBpbmNvcnJlY3RcclxuIik7CisgICAgICAgICAgICBnb3Rv IGV4aXRfazVfaW5pdDsKKyAgICAgICAgY2FzZSBLUkI1S1JCX0FQX0VSUl9WNF9SRVBMWToKKyAg ICAgICAgICAgIGlmIChpbml0LT5nZXRrNCAmJiBrNF9pbml0KSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCJLZXJiZXJvcyA1IFRpY2tldHMgbm90IHN1cHBvcnQgYnkgc2VydmVyLiAgIik7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCJBIHZlcnNpb24gNCBUaWNrZXQgd2lsbCBiZSByZXF1ZXN0 ZWQuXHJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBleGl0X2s1X2luaXQ7 CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnb3RvIGV4aXRfazVfaW5pdDsKKyAgICAg ICAgfQorICAgIH0KKworICBzdG9yZV9jcmVkOgorICAgIGRlYnVnKEYxMDAsImtyYjVfaW5pdCBj YWxsaW5nIGtyYjVfY2NfaW5pdGlhbGl6ZSgpIiwiIiwwKTsKKworICAgIGNvZGUgPSBrcmI1X2Nj X2luaXRpYWxpemUgKGtjb250ZXh0LCBjY2FjaGUsIG1lKTsKKyAgICBpZiAoIGNvZGUgPT0gS1JC NV9DQ19CQUROQU1FICkgeworICAgICAgICAvKiBUaGlzIGlzIGEgcmVhbGx5IHVnbHkgaGFjayB0 aGF0IHNob3VsZCBub3QgaGF2ZSB0byBiZSBoZXJlLgorICAgICAgICAgKiBrcmI1X2NjX2luaXRp YWxpemUgc2hvdWxkIG5vdCBmYWlsIHdpdGggYW4gZXJyb3IgaWYgdGhlCisgICAgICAgICAqIGNh Y2hlIGFscmVhZHkgZXhpc3RzLiAgVGhlIHJlYXNvbiB0aGUgcHJvYmxlbSBpcyBvY2N1cmluZwor ICAgICAgICAgKiBpcyB0aGF0IHRoZSBrcmI1IGxpYnJhcnkgaXMgbm8gbG9uZ2VyIGNhbGxpbmcg Y2NfZGVzdHJveSgpCisgICAgICAgICAqIHdoZW4gY2NfaW5pdGlhbGl6ZSgpIGlzIGNhbGxlZCBh bmQgdGhlIENDQVBJIGltcGxlbWVudGF0aW9uCisgICAgICAgICAqIG9uIFdpbmRvd3MgaGFzIG5v dCB5ZXQgYmVlbiBjb3JyZWN0ZWQgdG8gaGFuZGxlIGl0LiAgVG8KKyAgICAgICAgICogZW5zdXJl IHRoYXQgSzk1IHdpbGwgY29udGludWUgdG8gd29yayB3aXRoIGJvdGggd2Ugd2lsbCBjYWxsCisg ICAgICAgICAqIGNjX2Rlc3Ryb3koKSBpZiB0aGUgY2NfaW5pdGlhbGl6ZSgpIGNhbGwgZmFpbHMg d2l0aCBhIEJBRE5BTUUKKyAgICAgICAgICogZXJyb3IuICBJZiB0aGUgY2NfZGVzdHJveSgpIGlz IHN1Y2Nlc3NmdWwsIHdlIHdpbGwgdHJ5IGFnYWluLgorICAgICAgICAgKi8KKworICAgICAgICBk ZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1X2NjX2Rlc3Ryb3koKSIsIiIsMCk7Cisg ICAgICAgIGNvZGUgPSBrcmI1X2NjX2Rlc3Ryb3kgKGtjb250ZXh0LCBjY2FjaGUpOworICAgICAg ICBpZiAoICFjb2RlICkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwia3JiNV9pbml0IGNhbGxp bmcgazVfZ2V0X2NjYWNoZSgpIiwiIiwwKTsKKyAgICAgICAgICAgIGNvZGUgPSBrNV9nZXRfY2Nh Y2hlKGtjb250ZXh0LCZjY2FjaGUsb3AtPmNhY2hlKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAs ImtyYjVfaW5pdCBjYWxsaW5nIGtyYjVfY2NfaW5pdGlhbGl6ZSgpIiwiIiwwKTsKKyAgICAgICAg ICAgIGNvZGUgPSBrcmI1X2NjX2luaXRpYWxpemUgKGtjb250ZXh0LCBjY2FjaGUsIG1lKTsKKyAg ICAgICAgfSBlbHNlCisgICAgICAgICAgICBjb2RlID0gS1JCNV9DQ19CQUROQU1FOworICAgIH0K KyAgICBpZiAoY29kZSkgeworICAgICAgICBjb21fZXJyKCJrcmI1X2tpbml0Iixjb2RlLCJ3aGVu IGluaXRpYWxpemluZyBjYWNoZSIsb3AtPmNhY2hlKTsKKyAgICAgICAgZ290byBleGl0X2s1X2lu aXQ7CisgICAgfQorCisgICAgZGVidWcoRjEwMCwia3JiNV9pbml0IGNhbGxpbmcga3JiNV9jY19z dG9yZV9jcmVkKCkiLCIiLDApOworICAgIGNvZGUgPSBrcmI1X2NjX3N0b3JlX2NyZWQoa2NvbnRl eHQsIGNjYWNoZSwgJm15X2NyZWRzKTsKKyAgICBpZiAoY29kZSkgeworICAgICAgICBjb21fZXJy KCJrcmI1X2tpbml0Iixjb2RlLCJ3aGlsZSBzdG9yaW5nIGNyZWRlbnRpYWxzIik7CisgICAgICAg IGdvdG8gZXhpdF9rNV9pbml0OworICAgIH0KKworICAgIGlmICggaW5pdC0+Z2V0azQgJiYgCisj aWZkZWYgS1JCNTI0X0NPTlYKKyAgICAgICAgICF0cnlfY29udmVydDUyNChrY29udGV4dCxtZSxj Y2FjaGUpICYmIAorI2VuZGlmIC8qIEtSQjUyNF9DT05WICovCisgICAgICAgICBrNF9pbml0ICkg eworICAgICAgICBpbnQgazRyYyA9IGNrX2tyYjRfaW5pdFRHVChvcCxrNF9pbml0KTsKKyAgICAg ICAgaWYgKGs0cmMgPCAwKQorICAgICAgICAgICAgY29kZSA9IC0zOworICAgIH0KKworZXhpdF9r NV9pbml0OgorICAgIGRlYnVnKEYxMDAsImtyYjVfaW5pdCBleGl0X2s1X2luaXQiLCIiLDApOwor CisjaWZuZGVmIEhFSU1EQUwKKyAgICAvKiBGcmVlIGtyYjVfYWRkcmVzcyBzdHJ1Y3R1cmVzIGlm IHdlIGNyZWF0ZWQgdGhlbSAqLworICAgIGlmICggYWRkcnMgKSB7CisgICAgICAgIGZvciAoIGk9 MDtpPGFkZHJfY291bnQ7aSsrICkgeworICAgICAgICAgICAgaWYgKCBhZGRyc1tpXSApIHsKKyAg ICAgICAgICAgICAgICBpZiAoIGFkZHJzW2ldLT5jb250ZW50cyApCisgICAgICAgICAgICAgICAg ICAgIGZyZWUoYWRkcnNbaV0tPmNvbnRlbnRzKTsKKyAgICAgICAgICAgICAgICBmcmVlKGFkZHJz W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBIRUlNREFM ICovCisKKworICAgIGtyYjVfZXJybm8gPSBjb2RlOworICAgIG1ha2VzdHIoJmtyYjVfZXJybXNn LGtyYjVfZXJybm8gPyBlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pIDogIk9LIik7CisKKyAgICBp ZiAoY2xpZW50X25hbWUpCisgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0 LCBjbGllbnRfbmFtZSk7CisKKyAgICAvKiBteV9jcmVkcyBpcyBwb2ludGluZyBhdCBzZXJ2ZXIg Ki8KKyAgICBkZWJ1ZyhGMTAwLCJrcmI1X2luaXQgY2FsbGluZyBrcmI1X2ZyZWVfcHJpbmNpcGFs KCkiLCIiLDApOworICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoa2NvbnRleHQsIHNlcnZlcik7Cisg ICAgZGVidWcoRjEwMCwia3JiNV9pbml0IGNhbGxpbmcga3JiNV9jY19jbG9zZSgpIiwiIiwwKTsK KyAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNjYWNoZSk7CisgICAgZGVidWcoRjEwMCwia3Ji NV9pbml0IGNhbGxpbmcga3JiNV9mcmVlX2NvbnRleHQoKSIsIiIsMCk7CisgICAga3JiNV9mcmVl X2NvbnRleHQoa2NvbnRleHQpOworCisgICAgaWYgKGNvZGUgIT0gLTIpCisgICAgICAgIHByaW50 ZigiUmVzdWx0IGZyb20gcmVhbG0gJXM6ICVzXHJcbiIscmVhbG0sCisgICAgICAgICAgICAgICAg Y29kZT09LTM/IlVuYWJsZSB0byByZXRyaWV2ZSBLZXJiZXJvcyBJViBjcmVkZW50aWFscyI6Cisg ICAgICAgICAgICAgICAgY29kZT9lcnJvcl9tZXNzYWdlKGNvZGUpOiJPSyIpOworICAgIHJldHVy bihjb2RlPy0xOjApOworfQorCisjaWZuZGVmIEhFSU1EQUwKKyNkZWZpbmUgVkFMSURBVEUgMAor I2RlZmluZSBSRU5FVyAxCisKKy8qIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiBrcmI1X21rX3Jl cSAqLworc3RhdGljIGtyYjVfZXJyb3JfY29kZQorI2lmZGVmIENLX0FOU0lDCitrcmI1X3ZhbGlk YXRlX3RndCgga3JiNV9jb250ZXh0IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAga3JiNV9j Y2FjaGUgY2NhY2hlLAorICAgICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNpcGFsICAgICBzZXJ2 ZXIsIC8qIHRndG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICBrcmI1X2RhdGEgKm91dGJ1ZiAp CisjZWxzZQora3JiNV92YWxpZGF0ZV90Z3QoY29udGV4dCwgY2NhY2hlLCBzZXJ2ZXIsIG91dGJ1 ZikKKyAgICAga3JiNV9jb250ZXh0IGNvbnRleHQ7CisgICAgIGtyYjVfY2NhY2hlIGNjYWNoZTsK KyAgICAga3JiNV9wcmluY2lwYWwgICAgIHNlcnZlcjsgLyogdGd0bmFtZSAqLworICAgICBrcmI1 X2RhdGEgKm91dGJ1ZjsKKyNlbmRpZgoreworICAgIHJldHVybiBrcmI1X3RndF9nZW4oY29udGV4 dCwgY2NhY2hlLCBzZXJ2ZXIsIG91dGJ1ZiwgVkFMSURBVEUpOworfQorCisvKiBzdHJpcHBlZCBk b3duIHZlcnNpb24gb2Yga3JiNV9ta19yZXEgKi8KK3N0YXRpYyBrcmI1X2Vycm9yX2NvZGUKKyNp ZmRlZiBDS19BTlNJQwora3JiNV9yZW5ld190Z3Qoa3JiNV9jb250ZXh0IGNvbnRleHQsCisgICAg ICAgICAgICAgICAga3JiNV9jY2FjaGUgY2NhY2hlLAorICAgICAgICAgICAgICAgIGtyYjVfcHJp bmNpcGFsICAgIHNlcnZlciwgLyogdGd0bmFtZSAqLworICAgICAgICAgICAgICAgIGtyYjVfZGF0 YSAqb3V0YnVmKQorI2Vsc2UKK2tyYjVfcmVuZXdfdGd0KGNvbnRleHQsIGNjYWNoZSwgc2VydmVy LCBvdXRidWYpCisgICAgIGtyYjVfY29udGV4dCBjb250ZXh0OworICAgICBrcmI1X2NjYWNoZSBj Y2FjaGU7CisgICAgIGtyYjVfcHJpbmNpcGFsICAgICAgIHNlcnZlcjsgLyogdGd0bmFtZSAqLwor ICAgICBrcmI1X2RhdGEgKm91dGJ1ZjsKKyNlbmRpZgoreworICAgIHJldHVybiBrcmI1X3RndF9n ZW4oY29udGV4dCwgY2NhY2hlLCBzZXJ2ZXIsIG91dGJ1ZiwgUkVORVcpOworfQorCisKKy8qIHN0 cmlwcGVkIGRvd24gdmVyc2lvbiBvZiBrcmI1X21rX3JlcSAqLworc3RhdGljIGtyYjVfZXJyb3Jf Y29kZQorI2lmZGVmIENLX0FOU0lDCitrcmI1X3RndF9nZW4oa3JiNV9jb250ZXh0IGNvbnRleHQs CisgICAgICAgICAgICAgIGtyYjVfY2NhY2hlIGNjYWNoZSwKKyAgICAgICAgICAgICAga3JiNV9w cmluY2lwYWwgICAgICBzZXJ2ZXIsIC8qIHRndG5hbWUgKi8KKyAgICAgICAgICAgICAga3JiNV9k YXRhICpvdXRidWYsCisgICAgICAgICAgICAgIGludCBvcHQpCisjZWxzZQora3JiNV90Z3RfZ2Vu KGNvbnRleHQsIGNjYWNoZSwgc2VydmVyLCBvdXRidWYsIG9wdCkKKyAgICAga3JiNV9jb250ZXh0 IGNvbnRleHQ7CisgICAgIGtyYjVfY2NhY2hlIGNjYWNoZTsKKyAgICAga3JiNV9wcmluY2lwYWwg ICAgICAgc2VydmVyOyAvKiB0Z3RuYW1lICovCisgICAgIGtyYjVfZGF0YSAqb3V0YnVmOworICAg ICBpbnQgb3B0OworI2VuZGlmCit7CisgICAga3JiNV9lcnJvcl9jb2RlICAgICAgIHJldHZhbDsK KyAgICBrcmI1X2NyZWRzICAgICAgICAgICogY3JlZHNwOworICAgIGtyYjVfY3JlZHMgICAgICAg ICAgICBjcmVkczsKKworICAgIC8qIG9idGFpbiB0aWNrZXQgJiBzZXNzaW9uIGtleSAqLworICAg IG1lbXNldCgoY2hhciAqKSZjcmVkcywgMCwgc2l6ZW9mKGNyZWRzKSk7CisgICAgaWYgKChyZXR2 YWwgPSBrcmI1X2NvcHlfcHJpbmNpcGFsKGNvbnRleHQsIHNlcnZlciwgJmNyZWRzLnNlcnZlcikp KQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBpZiAoKHJldHZhbCA9IGtyYjVfY2NfZ2V0 X3ByaW5jaXBhbChjb250ZXh0LCBjY2FjaGUsICZjcmVkcy5jbGllbnQpKSkKKyAgICAgICAgZ290 byBjbGVhbnVwX2NyZWRzOworCisgICAgaWYgKG9wdCA9PSBWQUxJREFURSkgeworICAgICAgICBp ZiAoKHJldHZhbCA9IGtyYjVfZ2V0X2NyZWRlbnRpYWxzX3ZhbGlkYXRlKGNvbnRleHQsIDAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NhY2hl LCAmY3JlZHMsICZjcmVkc3ApKSkKKyAgICAgICAgICBnb3RvIGNsZWFudXBfY3JlZHM7CisgICAg fSBlbHNlIHsKKyAgICAgICAgaWYgKChyZXR2YWwgPSBrcmI1X2dldF9jcmVkZW50aWFsc19yZW5l dyhjb250ZXh0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNjYWNoZSwgJmNyZWRzLCAmY3JlZHNwKSkpCisgICAgICAgICAgZ290byBjbGVhbnVw X2NyZWRzOworICAgIH0KKworICAgIC8qIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gZG8gdGhl IG1rX3JlcSwganVzdCBnZXQgdGhlIGNyZWRzLiAqLworY2xlYW51cF9jcmVkczoKKyAgICBrcmI1 X2ZyZWVfY3JlZF9jb250ZW50cyhjb250ZXh0LCAmY3JlZHMpOworCitjbGVhbnVwOgorCisgICAg cmV0dXJuIHJldHZhbDsKK30KKyNlbmRpZiAvKiBIRUlNREFMICovCisjZW5kaWYgLyogS0lOSVQg Ki8KKyNpZmRlZiBLREVTVFJPWQoraW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfZGVzdHJv eShzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCkKKyNlbHNlCitja19rcmI1X2Rlc3Ryb3kob3ApIHN0 cnVjdCBrcmJfb3BfZGF0YSAqIG9wOworI2VuZGlmCit7CisgICAga3JiNV9jb250ZXh0IGtjb250 ZXh0OworICAgIGtyYjVfZXJyb3JfY29kZSByZXR2YWw7CisgICAgaW50IGM7CisgICAga3JiNV9j Y2FjaGUgY2NhY2hlID0gTlVMTDsKKyAgICBjaGFyICpjYWNoZV9uYW1lID0gTlVMTDsKKyAgICBp bnQgY29kZTsKKyAgICBpbnQgZXJyZmxnPTA7CisgICAgaW50IHF1aWV0ID0gMDsKKworICAgIGlm ICggIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oLTEpOworCisgICAg Y29kZSA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7CisgICAgaWYgKGNvZGUpIHsKKyAg ICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9kZXN0cm95IHdoaWxlIGluaXRpYWxpemluZyBrcmI1 IiwiIixjb2RlKTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAgIG1ha2VzdHIo JmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICByZXR1cm4o LTEpOworICAgIH0KKworICAgIGNvZGUgPSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0LCZjY2FjaGUs b3AtPmNhY2hlKTsKKyAgICBpZiAoY29kZSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNr X2tyYjVfZGVzdHJveSB3aGlsZSBnZXR0aW5nIGNjYWNoZSIsCisgICAgICAgICAgICAgICAiIixj b2RlKTsKKyAgICAgICAga3JiNV9mcmVlX2NvbnRleHQoa2NvbnRleHQpOworICAgICAgICBrcmI1 X2Vycm5vID0gY29kZTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2Fn ZShrcmI1X2Vycm5vKSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgY29kZSA9 IGtyYjVfY2NfZGVzdHJveSAoa2NvbnRleHQsIGNjYWNoZSk7CisgICAgaWYgKGNvZGUgIT0gMCkg eworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2Rlc3Ryb3kgd2hpbGUgZGVzdHJveWluZyBj YWNoZSIsIiIsY29kZSk7CisgICAgICAgIGlmICggY29kZSA9PSBLUkI1X0ZDQ19OT0ZJTEUgKQor ICAgICAgICAgICAgcHJpbnRmKCJObyB0aWNrZXQgY2FjaGUgdG8gZGVzdHJveS5cclxuIik7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiVGlja2V0IGNhY2hlIE5PVCBkZXN0cm95 ZWQhXHJcbiIpOworICAgICAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNjYWNoZSk7CisgICAg ICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNv ZGU7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJu bykpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIHByaW50ZigiVGlja2V0cyBk ZXN0cm95ZWQuXHJcbiIpOworICAgIC8qIERvIG5vdCBjYWxsIGtyYjVfY2NfY2xvc2UoKSBiZWNh dXNlIGNhY2hlIGhhcyBiZWVuIGRlc3Ryb3llZCAqLworICAgIGtyYjVfZnJlZV9jb250ZXh0KGtj b250ZXh0KTsKKyAgICBrcmI1X2Vycm5vID0gMDsKKyAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZywi T0siKTsKKyAgICByZXR1cm4gKDApOworfQorI2Vsc2UgLyogS0RFU1RST1kgKi8KKyNpZmRlZiBL UkI1CitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNV9kZXN0cm95KHN0cnVjdCBrcmJfb3Bf ZGF0YSAqIG9wKQorI2Vsc2UKK2NrX2tyYjVfZGVzdHJveShvcCkgc3RydWN0IGtyYl9vcF9kYXRh ICogb3A7CisjZW5kaWYKK3sKKyAgICBwcmludGYoIj9Ob3QgaW1wbGVtZW50ZWQuXHJcbiIpOwor ICAgIHJldHVybigtMSk7Cit9CisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIEtERVNUUk9Z ICovCisjaWZuZGVmIEtMSVNUCisjaWZkZWYgS1JCNQoraW50CisjaWZkZWYgQ0tfQU5TSUMKK2Nr X2tyYjVfbGlzdF9jcmVkcyhzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCwgc3RydWN0IGtyYjVfbGlz dF9jcmVkX2RhdGEgKiBsYykKKyNlbHNlCitja19rcmI1X2xpc3RfY3JlZHMob3AsbGMpCisgICAg c3RydWN0IGtyYl9vcF9kYXRhICogb3A7IHN0cnVjdCBrcmI1X2xpc3RfY3JlZF9kYXRhICogbGM7 CisjZW5kaWYKK3sKKyAgICBwcmludGYoIj9Ob3QgaW1wbGVtZW50ZWQuXHJcbiIpOworICAgIHJl dHVybigtMSk7Cit9CisjZW5kaWYgLyogS1JCNSAqLworI2Vsc2UgLyogS0xJU1QgKi8KK3N0YXRp YyBpbnQgc2hvd19mbGFncyA9IDAsIHNob3dfdGltZSA9IDAsIHN0YXR1c19vbmx5ID0gMCwgc2hv d19rZXlzID0gMDsKK3N0YXRpYyBpbnQgc2hvd19ldHlwZSA9IDAsIHNob3dfYWRkciA9IDA7Citz dGF0aWMgY2hhciAqZGVmbmFtZTsKK3N0YXRpYyBjaGFyICpwcm9nbmFtZTsKK3N0YXRpYyBrcmI1 X2ludDMyIG5vdzsKK3N0YXRpYyBpbnQgdGltZXN0YW1wX3dpZHRoOworCitfUFJPVE9UWVAoc3Rh dGljIGNoYXIgKiBldHlwZV9zdHJpbmcsIChrcmI1X2VuY3R5cGUgKSk7CitfUFJPVE9UWVAoc3Rh dGljIHZvaWQgc2hvd19jcmVkZW50aWFsLChrcmI1X2NvbnRleHQsa3JiNV9jcmVkcyAqKSk7Citf UFJPVE9UWVAoc3RhdGljIGludCBkb19jY2FjaGUsIChrcmI1X2NvbnRleHQsY2hhciAqKSk7Citf UFJPVE9UWVAoc3RhdGljIGludCBkb19rZXl0YWIsIChrcmI1X2NvbnRleHQsY2hhciAqKSk7Citf UFJPVE9UWVAoc3RhdGljIHZvaWQgcHJpbnR0aW1lLCAodGltZV90KSk7CitfUFJPVE9UWVAoc3Rh dGljIHZvaWQgZmlsbGl0LCAoaW50LCBpbnQpKTsKKworI2RlZmluZSBERUZBVUxUIDAKKyNkZWZp bmUgQ0NBQ0hFIDEKKyNkZWZpbmUgS0VZVEFCIDIKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Nr X2tyYjVfbGlzdF9jcmVkcyhzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCwgc3RydWN0IGtyYjVfbGlz dF9jcmVkX2RhdGEgKiBsYykKKyNlbHNlCitja19rcmI1X2xpc3RfY3JlZHMob3AsbGMpCisgICAg c3RydWN0IGtyYl9vcF9kYXRhICogb3A7IHN0cnVjdCBrcmI1X2xpc3RfY3JlZF9kYXRhICogbGM7 CisjZW5kaWYKK3sKKyAgICBrcmI1X2NvbnRleHQga2NvbnRleHQ7CisgICAga3JiNV9lcnJvcl9j b2RlIHJldHZhbDsKKyAgICBpbnQgY29kZTsKKyAgICBjaGFyICpuYW1lID0gb3AtPmNhY2hlOwor ICAgIGludCBtb2RlOworCisgICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCisgICAg ICAgIHJldHVybigtMSk7CisKKyAgICBjb2RlID0ga3JiNV9pbml0X2NvbnRleHQoJmtjb250ZXh0 KTsKKyAgICBpZiAoY29kZSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3Jl ZHMgd2hpbGUgaW5pdGlhbGl6aW5nIGtyYjUiLCIiLGNvZGUpOworICAgICAgICBrcmI1X2Vycm5v ID0gY29kZTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1 X2Vycm5vKSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgbmFtZSA9IG9wLT5j YWNoZTsKKyAgICBtb2RlID0gREVGQVVMVDsKKyAgICBzaG93X2ZsYWdzID0gMDsKKyAgICBzaG93 X3RpbWUgPSAwOworICAgIHN0YXR1c19vbmx5ID0gMDsKKyAgICBzaG93X2tleXMgPSAwOworICAg IHNob3dfZXR5cGUgPSAwOworICAgIHNob3dfYWRkciA9IDA7CisKKyAgICBzaG93X2ZsYWdzID0g bGMtPmZsYWdzOworICAgIHNob3dfZXR5cGUgPSBsYy0+ZW5jcnlwdGlvbjsKKyAgICBzaG93X2Fk ZHIgID0gbGMtPmFkZHI7CisgICAgc2hvd190aW1lID0gMTsKKyAgICBzaG93X2tleXMgPSAxOwor ICAgIG1vZGUgPSBDQ0FDSEU7CisKKyAgICBpZiAoKGNvZGUgPSBrcmI1X3RpbWVvZmRheShrY29u dGV4dCwgJm5vdykpKSB7CisgICAgICAgIGlmICghc3RhdHVzX29ubHkpCisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgZ2V0dGluZyB0aW1lIG9mIGRheS4i LAorICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICBrcmI1X2ZyZWVfY29udGV4 dChrY29udGV4dCk7CisgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOworICAgICAgICBtYWtlc3Ry KCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGNoYXIgdG1wW0JVRlNJWl07CisKKyAg ICAgICAgaWYgKCFrcmI1X3RpbWVzdGFtcF90b19zZnN0cmluZyhub3csIHRtcCwgMjAsIChjaGFy ICopIE5VTEwpIHx8CisgICAgICAgICAgICAha3JiNV90aW1lc3RhbXBfdG9fc2ZzdHJpbmcobm93 LCB0bXAsIHNpemVvZih0bXApLCAoY2hhciAqKSBOVUxMKSkKKyAgICAgICAgICAgIHRpbWVzdGFt cF93aWR0aCA9IChpbnQpIHN0cmxlbih0bXApOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0 aW1lc3RhbXBfd2lkdGggPSAxNTsKKyAgICB9CisKKyAgICBpZiAobW9kZSA9PSBERUZBVUxUIHx8 IG1vZGUgPT0gQ0NBQ0hFKQorICAgICAgICAgcmV0dmFsID0gZG9fY2NhY2hlKGtjb250ZXh0LG5h bWUpOworICAgIGVsc2UKKyAgICAgICAgIHJldHZhbCA9IGRvX2tleXRhYihrY29udGV4dCxuYW1l KTsKKyAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7CisgICAgcmV0dXJuKHJldHZhbCk7 Cit9CisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworZG9fa2V5dGFiKGtyYjVfY29udGV4 dCBrY29udGV4dCwgY2hhciAqIG5hbWUpCisjZWxzZQorZG9fa2V5dGFiKGtjb250ZXh0LG5hbWUp IGtyYjVfY29udGV4dCBrY29udGV4dDsgY2hhciAqIG5hbWU7CisjZW5kaWYKK3sKKyAgICBrcmI1 X2tleXRhYiBrdDsKKyAgICBrcmI1X2tleXRhYl9lbnRyeSBlbnRyeTsKKyAgICBrcmI1X2t0X2N1 cnNvciBjdXJzb3I7CisgICAgY2hhciBidWZbQlVGU0laXTsgLyogaG9wZWZ1bGx5IGxhcmdlIGVu b3VnaCBmb3IgYW55IHR5cGUgKi8KKyAgICBjaGFyICpwbmFtZTsKKyAgICBpbnQgY29kZSA9IDA7 CisKKyAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICgoY29kZSA9IGtyYjVfa3Rf ZGVmYXVsdChrY29udGV4dCwgJmt0KSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2ty YjVfbGlzdF9jcmVkcyB3aGlsZSBnZXR0aW5nIGRlZmF1bHQga2V5dGFiIiwKKyAgICAgICAgICAg ICAgICAgICAiIixjb2RlKTsKKyAgICAgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOworICAgICAg ICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7Cisg ICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg aWYgKChjb2RlID0ga3JiNV9rdF9yZXNvbHZlKGtjb250ZXh0LCBuYW1lLCAma3QpKSkgeworICAg ICAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHJlc29sdmluZyBr ZXl0YWIiLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSxjb2RlKTsKKyAgICAgICAgICAgIGty YjVfZXJybm8gPSBjb2RlOworICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3Jf bWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 CisgICAgfQorCisgICAgaWYgKChjb2RlID0ga3JiNV9rdF9nZXRfbmFtZShrY29udGV4dCwga3Qs IGJ1ZiwgQlVGU0laKSkpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRz IHdoaWxlIGdldHRpbmcga2V5dGFiIG5hbWUiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7Cisg ICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxl cnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisK KyAgICAgcHJpbnRmKCJLZXl0YWIgbmFtZTogJXNcclxuIiwgYnVmKTsKKworICAgICBpZiAoKGNv ZGUgPSBrcmI1X2t0X3N0YXJ0X3NlcV9nZXQoa2NvbnRleHQsIGt0LCAmY3Vyc29yKSkpIHsKKyAg ICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBzdGFydGluZyBrZXl0 YWIgc2NhbiIsCisgICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAgICBrcmI1X2Vycm5v ID0gY29kZTsKKyAgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3Ji NV9lcnJubykpOworICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgfQorCisgICAgIGlmIChzaG93 X3RpbWUpIHsKKyAgICAgICAgICBwcmludGYoIktWTk8gVGltZXN0YW1wIik7CisgICAgICAgICAg ZmlsbGl0KHRpbWVzdGFtcF93aWR0aCAtIHNpemVvZigiVGltZXN0YW1wIikgKyAyLCAoaW50KSAn ICcpOworICAgICAgICAgIHByaW50ZigiUHJpbmNpcGFsXHJcbiIpOworICAgICAgICAgIHByaW50 ZigiLS0tLSAiKTsKKyAgICAgICAgICBmaWxsaXQodGltZXN0YW1wX3dpZHRoLCAoaW50KSAnLScp OworICAgICAgICAgIHByaW50ZigiICIpOworICAgICAgICAgIGZpbGxpdCg3OCAtIHRpbWVzdGFt cF93aWR0aCAtIHNpemVvZigiS1ZOTyIpLCAoaW50KSAnLScpOworICAgICAgICAgIHByaW50Zigi XHJcbiIpOworICAgICB9IGVsc2UgeworICAgICAgICAgIHByaW50ZigiS1ZOTyBQcmluY2lwYWxc clxuIik7CisgICAgICAgICAgcHJpbnRmKAorIi0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cCistLS0tLS1cclxu Iik7CisgICAgIH0KKworICAgIHdoaWxlICgoY29kZSA9IGtyYjVfa3RfbmV4dF9lbnRyeShrY29u dGV4dCwga3QsICZlbnRyeSwgJmN1cnNvcikpID09IDApIHsKKyAgICAgICAgaWYgKChjb2RlID0g a3JiNV91bnBhcnNlX25hbWUoa2NvbnRleHQsIGVudHJ5LnByaW5jaXBhbCwgJnBuYW1lKSkpIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSB1bnBhcnNp bmcgcHJpbmNpcGFsIG5hbWUiLAorICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAg ICAgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1z ZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7Cisg ICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCIlNGQgIiwgZW50cnkudm5vKTsKKyAgICAgICAgaWYg KHNob3dfdGltZSkgeworICAgICAgICAgICAgcHJpbnR0aW1lKGVudHJ5LnRpbWVzdGFtcCk7Cisg ICAgICAgICAgICBwcmludGYoIiAiKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIiVzIiwg cG5hbWUpOworICAgICAgICBpZiAoc2hvd19ldHlwZSkKKyAgICAgICAgICAgIHByaW50ZigiICgl cykgIiAsCisjaWZkZWYgSEVJTURBTAorICAgICAgICAgICAgICAgICAgICBldHlwZV9zdHJpbmco ZW50cnkua2V5LmtleXR5cGUpCisjZWxzZSAvKiBIRUlNREFMICovCisgICAgICAgICAgICAgICAg ICAgIGV0eXBlX3N0cmluZyhlbnRyeS5rZXkuZW5jdHlwZSkKKyNlbmRpZiAvKiBIRUlNREFMICov CisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGlmIChzaG93X2tleXMpIHsKKyAgICAg ICAgICAgIHByaW50ZigiICgweCIpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlu dCBpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyeS5rZXkubGVuZ3RoOyBp KyspCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTAyeCIsCisjaWZkZWYgSEVJTURBTAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmtleS5rZXl2YWx1ZVtpXQorI2Vsc2Ug LyogSEVJTURBTCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmtleS5jb250 ZW50c1tpXQorI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCIpIik7CisgICAgICAgIH0K KyAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1l KGtjb250ZXh0LHBuYW1lKTsKKyAgICB9CisgICAgaWYgKGNvZGUgJiYgY29kZSAhPSBLUkI1X0tU X0VORCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgc2Nh bm5pbmcga2V5dGFiIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICBrcmI1X2Vy cm5vID0gY29kZTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShr cmI1X2Vycm5vKSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGlmICgoY29kZSA9 IGtyYjVfa3RfZW5kX3NlcV9nZXQoa2NvbnRleHQsIGt0LCAmY3Vyc29yKSkpIHsKKyAgICAgICAg ZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIGVuZGluZyBrZXl0YWIgc2NhbiIs CisgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7Cisg ICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBrcmI1X2Vycm5vID0gMDsKKyAgICBtYWtl c3RyKCZrcmI1X2Vycm1zZywiT0siKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbnQK KyNpZmRlZiBDS19BTlNJQworZG9fY2NhY2hlKGtyYjVfY29udGV4dCBrY29udGV4dCwgY2hhciAq IGNjX25hbWUpCisjZWxzZQorZG9fY2NhY2hlKGtjb250ZXh0LG5hbWUpIGtyYjVfY29udGV4dCBr Y29udGV4dDsgY2hhciAqIGNjX25hbWU7CisjZW5kaWYKK3sKKyAgICBrcmI1X2NjYWNoZSBjYWNo ZSA9IE5VTEw7CisgICAga3JiNV9jY19jdXJzb3IgY3VyOworICAgIGtyYjVfY3JlZHMgY3JlZHM7 CisgICAga3JiNV9wcmluY2lwYWwgcHJpbmM9TlVMTDsKKyAgICBrcmI1X2ZsYWdzIGZsYWdzPTA7 CisgICAga3JiNV9lcnJvcl9jb2RlIGNvZGUgPSAwOworICAgIGludCBleGl0X3N0YXR1cyA9IDA7 CisKKyAgICBpZiAoc3RhdHVzX29ubHkpCisgICAgICAgIC8qIGV4aXRfc3RhdHVzIGlzIHNldCBi YWNrIHRvIDAgaWYgYSB2YWxpZCB0Z3QgaXMgZm91bmQgKi8KKyAgICAgICAgZXhpdF9zdGF0dXMg PSAxOworCisgICAgY29kZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRleHQsJmNhY2hlLGNjX25hbWUp OworICAgIGlmIChjb2RlICE9IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwiZG9fY2NhY2hlIHdo aWxlIGdldHRpbmcgY2NhY2hlIiwKKyAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UoY29kZSks Y29kZSk7CisgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOworICAgICAgICBtYWtlc3RyKCZrcmI1 X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisKKyAgICBmbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0dXJu cyBvZmYgT1BFTkNMT1NFIG1vZGUgKi8KKyAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFn cyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKKyAgICAgICAgaWYgKGNvZGUgPT0gRU5PRU5U KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1X2xpc3RfY3JlZHMgKHRpY2tldCBj YWNoZSkiLAorICAgICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNh Y2hlKSxjb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsCisg ICAgICAgICAgICAgICAgICJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgc2V0dGluZyBjYWNoZSBm bGFncyAodGlja2V0IGNhY2hlKSIsCisgICAgICAgICAgICAgICAgICBrcmI1X2NjX2dldF9uYW1l KGtjb250ZXh0LCBjYWNoZSksY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJObyB0 aWNrZXQgRmlsZS5cclxuIik7CisgICAgICAgIGtyYjVfZXJybm8gPSBjb2RlOworICAgICAgICBt YWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAg a3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAg fQorICAgIGlmICgoY29kZSA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2FjaGUs ICZwcmluYykpKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGls ZSByZXRyaWV2aW5nIHByaW5jaXBhbCBuYW1lIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOwor ICAgICAgICBrcmI1X2Vycm5vID0gY29kZTsKKyAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2cs ZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRl eHQsY2FjaGUpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAoKGNvZGUgPSBr cmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgcHJpbmMsICZkZWZuYW1lKSkpIHsKKyAgICAgICAg ZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIHVucGFyc2luZyBwcmluY2lwYWwg bmFtZSIsCisgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNv ZGU7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJu bykpOworICAgICAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKCFzdGF0dXNfb25seSkgeworICAgICAgICBwcmludGYo IlRpY2tldCBjYWNoZTogICAgICAlczolc1xyXG5EZWZhdWx0IHByaW5jaXBhbDogJXNcclxuXHJc biIsCisgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfdHlwZShrY29udGV4dCwgY2FjaGUpLAor ICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSwgZGVmbmFt ZSk7CisgICAgICAgIHByaW50ZigiVmFsaWQgc3RhcnRpbmciKTsKKyAgICAgICAgZmlsbGl0KHRp bWVzdGFtcF93aWR0aCAtIHNpemVvZigiVmFsaWQgc3RhcnRpbmciKSArIDMsCisgICAgICAgICAg ICAgICAoaW50KSAnICcpOworICAgICAgICBwcmludGYoIkV4cGlyZXMiKTsKKyAgICAgICAgZmls bGl0KHRpbWVzdGFtcF93aWR0aCAtIHNpemVvZigiRXhwaXJlcyIpICsgMywKKyAgICAgICAgICAg ICAgIChpbnQpICcgJyk7CisgICAgICAgIHByaW50ZigiU2VydmljZSBwcmluY2lwYWxcclxuIik7 CisgICAgfQorICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc3RhcnRfc2VxX2dldChrY29udGV4dCwg Y2FjaGUsICZjdXIpKSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMg d2hpbGUgc3RhcnRpbmcgdG8gcmV0cmlldmUgdGlja2V0cyIsCisgICAgICAgICAgICAgICAiIixj b2RlKTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNvZGU7CisgICAgICAgIG1ha2VzdHIoJmtyYjVf ZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJubykpOworICAgICAgICBrcmI1X2NjX2Nsb3Nl KGtjb250ZXh0LGNhY2hlKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgd2hpbGUg KCEoY29kZSA9IGtyYjVfY2NfbmV4dF9jcmVkKGtjb250ZXh0LCBjYWNoZSwgJmN1ciwgJmNyZWRz KSkpIHsKKyAgICAgICAgaWYgKHN0YXR1c19vbmx5KSB7CisgICAgICAgICAgICBpZiAoZXhpdF9z dGF0dXMgJiYgY3JlZHMuc2VydmVyLT5sZW5ndGggPT0gMiAmJgorICAgICAgICAgICAgICAgIHN0 cmNtcChjcmVkcy5zZXJ2ZXItPnJlYWxtLmRhdGEsIHByaW5jLT5yZWFsbS5kYXRhKSA9PSAwICYm CisgICAgICAgICAgICAgICAgc3RyY21wKChjaGFyICopY3JlZHMuc2VydmVyLT5kYXRhWzBdLmRh dGEsICJrcmJ0Z3QiKSA9PSAwICYmCisgICAgICAgICAgICAgICAgc3RyY21wKChjaGFyICopY3Jl ZHMuc2VydmVyLT5kYXRhWzFdLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIHByaW5jLT5y ZWFsbS5kYXRhKSA9PSAwICYmCisgICAgICAgICAgICAgICAgY3JlZHMudGltZXMuZW5kdGltZSA+ IG5vdykKKyAgICAgICAgICAgICAgICBleGl0X3N0YXR1cyA9IDA7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBzaG93X2NyZWRlbnRpYWwoa2NvbnRleHQsICZjcmVkcyk7CisgICAgICAg IH0KKyAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7Cisg ICAgfQorICAgIHByaW50ZigiXHJcbiIpOworICAgIGlmIChjb2RlID09IEtSQjVfQ0NfRU5EIHx8 IGNvZGUgPT0gS1JCNV9DQ19OT1RGT1VORCkgeworICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2Nj X2VuZF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNoZSwgJmN1cikpKSB7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgZmluaXNoaW5nIHRpY2tldCByZXRyaWV2 YWwiLAorICAgICAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICAgICAga3JiNV9lcnJu byA9IGNvZGU7CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxlcnJvcl9tZXNzYWdl KGtyYjVfZXJybm8pKTsKKyAgICAgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2FjaGUp OworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBmbGFncyA9IEtS QjVfVENfT1BFTkNMT1NFOyAgICAgIC8qIHR1cm5zIG9uIE9QRU5DTE9TRSBtb2RlICovCisgICAg ICAgIGlmICgoY29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3Mp KSkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRzIHdoaWxlIGNs b3NpbmcgY2NhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAgICAg IGtyYjVfZXJybm8gPSBjb2RlOworICAgICAgICAgICAgbWFrZXN0cigma3JiNV9lcnJtc2csZXJy b3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgICAgICBrcmI1X2NjX2Nsb3NlKGtjb250 ZXh0LGNhY2hlKTsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAg a3JiNV9lcnJubyA9IDA7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLCJPSyIpOworICAg ICAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGls ZSByZXRyaWV2aW5nIGEgdGlja2V0IiwiIixjb2RlKTsKKyAgICAgICAga3JiNV9lcnJubyA9IGNv ZGU7CisgICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLGVycm9yX21lc3NhZ2Uoa3JiNV9lcnJu bykpOworICAgICAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9CisgICAga3JiNV9lcnJubyA9IDA7CisgICAgbWFrZXN0cigma3JiNV9l cnJtc2csIk9LIik7CisgICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7CisgICAgcmV0 dXJuKDApOworfQorCitzdGF0aWMgY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKKyNpZmRlZiBIRUlN REFMCitldHlwZV9zdHJpbmcoa3JiNV9rZXl0eXBlIGVuY3R5cGUpCisjZWxzZSAvKiBIRUlNREFM ICovCitldHlwZV9zdHJpbmcoa3JiNV9lbmN0eXBlIGVuY3R5cGUpCisjZW5kaWYgLyogSEVJTURB TCAqLworI2Vsc2UKKyNpZmRlZiBIRUlNREFMCitldHlwZV9zdHJpbmcoZW5jdHlwZSkga3JiNV9r ZXl0eXBlIGVuY3R5cGU7CisjZWxzZSAvKiBIRUlNREFMICovCitldHlwZV9zdHJpbmcoZW5jdHlw ZSkga3JiNV9lbmN0eXBlIGVuY3R5cGU7CisjZW5kaWYgLyogSEVJTURBTCAqLworI2VuZGlmCit7 CisgICAgc3RhdGljIGNoYXIgYnVmWzEyXTsKKworICAgIHN3aXRjaCAoZW5jdHlwZSkgeworICAg IGNhc2UgRU5DVFlQRV9OVUxMOgorICAgICAgICByZXR1cm4gIk5VTEwiOworICAgIGNhc2UgRU5D VFlQRV9ERVNfQ0JDX0NSQzoKKyAgICAgICAgcmV0dXJuICJERVMtQ0JDLUNSQyI7CisgICAgY2Fz ZSBFTkNUWVBFX0RFU19DQkNfTUQ0OgorICAgICAgICByZXR1cm4gIkRFUy1DQkMtTUQ0IjsKKyAg ICBjYXNlIEVOQ1RZUEVfREVTX0NCQ19NRDU6CisgICAgICAgIHJldHVybiAiREVTLUNCQy1NRDUi OworICAgIGNhc2UgRU5DVFlQRV9ERVNfQ0JDX1JBVzoKKyAgICAgICAgcmV0dXJuICJERVMtQ0JD LVJBVyI7CisgICAgY2FzZSBFTkNUWVBFX0RFUzNfQ0JDX1NIQToKKyAgICAgICAgcmV0dXJuICJE RVMzLUNCQy1TSEEiOworICAgIGNhc2UgRU5DVFlQRV9ERVMzX0NCQ19SQVc6CisgICAgICAgIHJl dHVybiAiREVTMy1DQkMtUkFXIjsKKyAgICBjYXNlIEVOQ1RZUEVfREVTX0hNQUNfU0hBMToKKyAg ICAgICAgcmV0dXJuICJERVMtSE1BQy1TSEExIjsKKyAgICBjYXNlIEVOQ1RZUEVfREVTM19DQkNf U0hBMToKKyAgICAgICAgcmV0dXJuICJERVMzLUNCQy1TSEExIjsKKyAgICBjYXNlIEVOQ1RZUEVf QUVTMTI4X0NUU19ITUFDX1NIQTFfOTY6CisgICAgICAgIHJldHVybiAiQUVTMTI4X0NUUy1ITUFD LVNIQTFfOTYiOworICAgIGNhc2UgRU5DVFlQRV9BRVMyNTZfQ1RTX0hNQUNfU0hBMV85NjoKKyAg ICAgICAgcmV0dXJuICJBRVMyNTZfQ1RTLUhNQUMtU0hBMV85NiI7CisgICAgY2FzZSBFTkNUWVBF X0FSQ0ZPVVJfSE1BQzoKKyAgICAgICAgcmV0dXJuICJSQzQtSE1BQy1OVCI7CisgICAgY2FzZSBF TkNUWVBFX0FSQ0ZPVVJfSE1BQ19FWFA6CisgICAgICAgIHJldHVybiAiUkM0LUhNQUMtTlQtRVhQ IjsKKyAgICBjYXNlIEVOQ1RZUEVfVU5LTk9XTjoKKyAgICAgICAgcmV0dXJuICJVTktOT1dOIjsK KyAgICBjYXNlIEVOQ1RZUEVfTE9DQUxfREVTM19ITUFDX1NIQTE6CisgICAgICAgIHJldHVybiAi TE9DQUwtREVTMy1ITUFDLVNIQTEiOworICAgIGNhc2UgRU5DVFlQRV9MT0NBTF9SQzRfTUQ0Ogor ICAgICAgICByZXR1cm4gIkxPQ0FMLVJDNC1NRDQiOworICAgIGRlZmF1bHQ6CisgICAgICAgIGNr bWFrbXNnKGJ1Ziwgc2l6ZW9mKGJ1ZiksImV0eXBlICIsIGNraXRvYShlbmN0eXBlKSxOVUxMLE5V TEwpOworICAgICAgICByZXR1cm4gYnVmOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0 YXRpYyBjaGFyICoKKyNpZmRlZiBDS19BTlNJQworZmxhZ3Nfc3RyaW5nKHJlZ2lzdGVyIGtyYjVf Y3JlZHMgKmNyZWQpCisjZWxzZQorZmxhZ3Nfc3RyaW5nKGNyZWQpIHJlZ2lzdGVyIGtyYjVfY3Jl ZHMgKmNyZWQ7CisjZW5kaWYKK3sKKyAgICBzdGF0aWMgY2hhciBidWZbMzJdOworICAgIGludCBp ID0gMDsKKworICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX0ZPUldBUkRBQkxF KQorICAgICAgICBidWZbaSsrXSA9ICdGJzsKKyAgICBpZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYg VEtUX0ZMR19GT1JXQVJERUQpCisgICAgICAgIGJ1ZltpKytdID0gJ2YnOworICAgIGlmIChjcmVk LT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX1BST1hJQUJMRSkKKyAgICAgICAgYnVmW2krK10gPSAn UCc7CisgICAgaWYgKGNyZWQtPnRpY2tldF9mbGFncyAmIFRLVF9GTEdfUFJPWFkpCisgICAgICAg IGJ1ZltpKytdID0gJ3AnOworICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX01B WV9QT1NUREFURSkKKyAgICAgICAgYnVmW2krK10gPSAnRCc7CisgICAgaWYgKGNyZWQtPnRpY2tl dF9mbGFncyAmIFRLVF9GTEdfUE9TVERBVEVEKQorICAgICAgICBidWZbaSsrXSA9ICdkJzsKKyAg ICBpZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYgVEtUX0ZMR19JTlZBTElEKQorICAgICAgICBidWZb aSsrXSA9ICdpJzsKKyAgICBpZiAoY3JlZC0+dGlja2V0X2ZsYWdzICYgVEtUX0ZMR19SRU5FV0FC TEUpCisgICAgICAgIGJ1ZltpKytdID0gJ1InOworICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3Mg JiBUS1RfRkxHX0lOSVRJQUwpCisgICAgICAgIGJ1ZltpKytdID0gJ0knOworICAgIGlmIChjcmVk LT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX0hXX0FVVEgpCisgICAgICAgIGJ1ZltpKytdID0gJ0gn OworICAgIGlmIChjcmVkLT50aWNrZXRfZmxhZ3MgJiBUS1RfRkxHX1BSRV9BVVRIKQorICAgICAg ICBidWZbaSsrXSA9ICdBJzsKKyAgICBidWZbaV0gPSAnXDAnOworICAgIHJldHVybihidWYpOwor fQorCitzdGF0aWMgY2hhciAgICoKKyNpZmRlZiBDS19BTlNJQworc2hvcnRfZGF0ZShsb25nICAg KmRwKQorI2Vsc2UKK3Nob3J0X2RhdGUoZHApIGxvbmcgICAqZHA7CisjZW5kaWYKK3sKKyAgICBy ZWdpc3RlciBjaGFyICpjcDsKKyNpZm5kZWYgY3RpbWUKKyAgICBleHRlcm4gY2hhciAqY3RpbWUo KTsKKyNlbmRpZiAvKiBjdGltZSAqLworICAgIGNwID0gY3RpbWUoZHApICsgNDsKKyAgICBjcFsx NV0gPSAnXDAnOworICAgIHJldHVybiAoY3ApOworfQorCisKK3N0YXRpYyBWT0lECisjaWZkZWYg Q0tfQU5TSUMKK3ByaW50dGltZSh0aW1lX3QgdHYpCisjZWxzZQorcHJpbnR0aW1lKHR2KSB0aW1l X3QgdHY7CisjZW5kaWYKK3sKKyAgICBjaGFyIHRpbWVzdHJpbmdbQlVGU0laXTsKKyAgICBjaGFy IGZvcm1hdFsxMl07CisgICAgY2hhciBmaWxsOworCisgICAgZmlsbCA9ICcgJzsKKyAgICBzcHJp bnRmKGZvcm1hdCwiJSUtJWRzIix0aW1lc3RhbXBfd2lkdGgpOyAgIC8qIHNhZmUgKi8KKyAgICBp ZiAoIWtyYjVfdGltZXN0YW1wX3RvX3Nmc3RyaW5nKChrcmI1X3RpbWVzdGFtcCkgdHYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0cmluZywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfd2lkdGgrMSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsbCkpIHsKKyAgICAgICAgcHJpbnRmKGZvcm1h dCx0aW1lc3RyaW5nKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHByaW50Zihmb3JtYXQs c2hvcnRfZGF0ZSgmdHYpKTsKKyAgICB9CisKK30KKworc3RhdGljIHZvaWQKKyNpZmRlZiBDS19B TlNJQworb25lX2FkZHIoa3JiNV9hZGRyZXNzICphKQorI2Vsc2UKK29uZV9hZGRyKGEpIGtyYjVf YWRkcmVzcyAqYTsKKyNlbmRpZgoreworICAgIHN0cnVjdCBob3N0ZW50ICpoOworICAgIGV4dGVy biB0Y3BfcmRuczsKKworICAgIGlmICgoYS0+YWRkcnR5cGUgPT0gQUREUlRZUEVfSU5FVCkgJiYK KyAgICAgICAgKGEtPmxlbmd0aCA9PSA0KSkgeworICAgICAgICBpZiAodGNwX3JkbnMgIT0gU0VU X09GRikgeworICAgICAgICAgICAgaCA9IGdldGhvc3RieWFkZHIoYS0+Y29udGVudHMsIDQsIEFG X0lORVQpOworICAgICAgICAgICAgaWYgKGgpIHsKKyNpZmRlZiBIQUREUkxJU1QKKyAgICAgICAg ICAgICAgICBoID0gY2tfY29weWhvc3RlbnQoaCk7CisjZW5kaWYgLyogSEFERFJMSVNUICovCisg ICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAoJWQuJWQuJWQuJWQpIiwgaC0+aF9uYW1lLAorICAg ICAgICAgICAgICAgICAgICAgICAgYS0+Y29udGVudHNbMF0sIGEtPmNvbnRlbnRzWzFdLAorICAg ICAgICAgICAgICAgICAgICAgICAgYS0+Y29udGVudHNbMl0sIGEtPmNvbnRlbnRzWzNdKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGNwX3JkbnMgPT0gU0VUX09GRiB8 fCAhaCkgeworICAgICAgICAgICAgcHJpbnRmKCIlZC4lZC4lZC4lZCIsIGEtPmNvbnRlbnRzWzBd LCBhLT5jb250ZW50c1sxXSwKKyAgICAgICAgICAgICAgICAgICBhLT5jb250ZW50c1syXSwgYS0+ Y29udGVudHNbM10pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJ1 bmtub3duIGFkZHIgdHlwZSAlZCIsIGEtPmFkZHJ0eXBlKTsKKyAgICB9Cit9CisKK3N0YXRpYyBW T0lECisjaWZkZWYgQ0tfQU5TSUMKK3Nob3dfY3JlZGVudGlhbChrcmI1X2NvbnRleHQga2NvbnRl eHQsIHJlZ2lzdGVyIGtyYjVfY3JlZHMgKiBjcmVkKQorI2Vsc2UKK3Nob3dfY3JlZGVudGlhbChr Y29udGV4dCwgY3JlZCkKKyAgICBrcmI1X2NvbnRleHQgICAgICAgICAga2NvbnRleHQ7CisgICAg cmVnaXN0ZXIga3JiNV9jcmVkcyAqIGNyZWQ7CisjZW5kaWYKK3sKKyAgICBrcmI1X2Vycm9yX2Nv ZGUgcmV0dmFsPTA7CisgICAga3JiNV90aWNrZXQgKnRrdD1OVUxMOworICAgIGNoYXIgKm5hbWU9 TlVMTCwgKnNuYW1lPU5VTEwsICpmbGFncz1OVUxMOworICAgIGludCBleHRyYV9maWVsZCA9IDA7 CisKKyAgICByZXR2YWwgPSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgY3JlZC0+Y2xpZW50 LCAmbmFtZSk7CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1 X2xpc3RfY3JlZHMgd2hpbGUgdW5wYXJzaW5nIGNsaWVudCBuYW1lIiwiIixyZXR2YWwpOworICAg ICAgICBrcmI1X2Vycm5vID0gcmV0dmFsOworICAgICAgICBtYWtlc3RyKCZrcmI1X2Vycm1zZyxl cnJvcl9tZXNzYWdlKGtyYjVfZXJybm8pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBy ZXR2YWwgPSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgY3JlZC0+c2VydmVyLCAmc25hbWUp OworICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2Ny ZWRzIHdoaWxlIHVucGFyc2luZyBzZXJ2ZXIgbmFtZSIsIiIscmV0dmFsKTsKKyAgICAgICAgZnJl ZShuYW1lKTsKKyAgICAgICAga3JiNV9lcnJubyA9IHJldHZhbDsKKyAgICAgICAgbWFrZXN0cigm a3JiNV9lcnJtc2csZXJyb3JfbWVzc2FnZShrcmI1X2Vycm5vKSk7CisgICAgICAgIHJldHVybjsK KyAgICB9CisgICAgaWYgKCFjcmVkLT50aW1lcy5zdGFydHRpbWUpCisgICAgICAgIGNyZWQtPnRp bWVzLnN0YXJ0dGltZSA9IGNyZWQtPnRpbWVzLmF1dGh0aW1lOworCisgICAgcHJpbnR0aW1lKGNy ZWQtPnRpbWVzLnN0YXJ0dGltZSk7CisgICAgcHJpbnRmKCIgICIpOworCisgICAgaWYgKCB0aW1l KDApIDwgY3JlZC0+dGltZXMuZW5kdGltZSApCisgICAgICAgIHByaW50dGltZShjcmVkLT50aW1l cy5lbmR0aW1lKTsKKyAgICBlbHNlCisgICAgICAgIHByaW50ZigiKiogZXhwaXJlZCAqKiAiKTsK KworICAgIHByaW50ZigiICAlc1xyXG4iLCBzbmFtZSk7CisKKyAgICBpZiAoc3RyY21wKG5hbWUs IGRlZm5hbWUpKSB7CisgICAgICAgIHByaW50ZigiICAgZm9yIGNsaWVudCAlcyIsIG5hbWUpOwor ICAgICAgICBleHRyYV9maWVsZCsrOworICAgIH0KKworICAgIGlmIChjcmVkLT50aW1lcy5yZW5l d190aWxsKSB7CisgICAgICAgIGlmICghZXh0cmFfZmllbGQpCisgICAgICAgICAgICBwcmludGYo IiAgICIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoIiwgIik7CisgICAgICAg IHByaW50ZigicmVuZXcgdW50aWwgIik7CisgICAgICAgIHByaW50dGltZShjcmVkLT50aW1lcy5y ZW5ld190aWxsKTsKKyAgICAgICAgZXh0cmFfZmllbGQgKz0gMjsKKyAgICB9CisKKyAgICBpZiAo ZXh0cmFfZmllbGQgPiAzKSB7CisgICAgICAgIHByaW50ZigiXHJcbiIpOworICAgICAgICBleHRy YV9maWVsZCA9IDA7CisgICAgfQorCisgICAgaWYgKHNob3dfZmxhZ3MpIHsKKyAgICAgICAgZmxh Z3MgPSBmbGFnc19zdHJpbmcoY3JlZCk7CisgICAgICAgIGlmIChmbGFncyAmJiAqZmxhZ3MpIHsK KyAgICAgICAgICAgIGlmICghZXh0cmFfZmllbGQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIg ICAiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIiwgIik7Cisg ICAgICAgICAgICBwcmludGYoIkZsYWdzOiAlcyIsIGZsYWdzKTsKKyAgICAgICAgICAgIGV4dHJh X2ZpZWxkKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZXh0cmFfZmllbGQgPiAyKSB7 CisgICAgICAgIHByaW50ZigiXHJcbiIpOworICAgICAgICBleHRyYV9maWVsZCA9IDA7CisgICAg fQorCisgICAgaWYgKHNob3dfZXR5cGUpIHsKKyAgICAgICAgcmV0dmFsID0gZGVjb2RlX2tyYjVf dGlja2V0KCZjcmVkLT50aWNrZXQsICZ0a3QpOworICAgICAgICBpZiAoIWV4dHJhX2ZpZWxkKQor ICAgICAgICAgICAgcHJpbnRmKCIgICAiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJp bnRmKCIsICIpOworI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgcHJpbnRmKCJFdHlwZSAoc2tleSwg dGt0KTogJXMsICVzICIsCisgICAgICAgICAgICAgICBldHlwZV9zdHJpbmcoY3JlZC0+c2Vzc2lv bi5rZXl0eXBlKSwKKyAgICAgICAgICAgICAgIGV0eXBlX3N0cmluZyh0a3QtPmVuY19wYXJ0Lmtl eXR5cGUpKTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgcHJpbnRmKCJFdHlwZSAoc2tl eSwgdGt0KTogJXMsICVzICIsCisgICAgICAgICAgICAgICBldHlwZV9zdHJpbmcoY3JlZC0+a2V5 YmxvY2suZW5jdHlwZSksCisgICAgICAgICAgICAgICBldHlwZV9zdHJpbmcodGt0LT5lbmNfcGFy dC5lbmN0eXBlKSk7CisjZW5kaWYgLyogSEVJTURBTCAqLworICAgICAgICBrcmI1X2ZyZWVfdGlj a2V0KGtjb250ZXh0LCB0a3QpOworICAgICAgICBleHRyYV9maWVsZCsrOworICAgIH0KKworICAg IC8qIGlmIGFueSBhZGRpdGlvbmFsIGluZm8gd2FzIHByaW50ZWQsIGV4dHJhX2ZpZWxkIGlzIG5v bi16ZXJvICovCisgICAgaWYgKGV4dHJhX2ZpZWxkKQorICAgICAgICBwcmludGYoIlxyXG4iKTsK KworICAgIGlmICggc2hvd19hZGRyICkgeworICAgICAgICBpZiAoIWNyZWQtPmFkZHJlc3NlcyB8 fCAhY3JlZC0+YWRkcmVzc2VzWzBdKSB7CisgICAgICAgICAgICBwcmludGYoIlx0QWRkcmVzc2Vz OiAobm9uZSlcclxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgaTsKKyAg ICAgICAgICAgIGZvciAoaT0wOyBjcmVkLT5hZGRyZXNzZXNbaV07IGkrKykgeworICAgICAgICAg ICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgICAgICAg Iik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAg IEFkZHJlc3NlczogIik7CisgICAgICAgICAgICAgICAgb25lX2FkZHIoY3JlZC0+YWRkcmVzc2Vz W2ldKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxyXG4iKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKworICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LG5h bWUpOworICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKKworICAg IGtyYjVfZXJybm8gPSAwOworICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLCJPSyIpOworfQorCitz dGF0aWMgVk9JRAorI2lmZGVmIENLX0FOU0lDCitmaWxsaXQoaW50IG51bSwgaW50IGMpCisjZWxz ZQorZmlsbGl0KG51bSwgYykgaW50IG51bTsgaW50IGM7CisjZW5kaWYKK3sKKyAgICBpbnQgaTsK KworICAgIGZvciAoaT0wOyBpPG51bTsgaSsrKQorICAgICAgICBwcmludGYoIiVjIixjKTsKK30K KyNlbmRpZiAvKiBLTElTVCAqLworI2VuZGlmIC8qIEtSQjUgKi8KKworI2lmZGVmIEtSQjQKKyNk ZWZpbmUgS0RFQlVHIDEKK2ludCBrNGRlYnVnID0gMDsgICAgICAgICAgICAgICAgLyogS2VyYmVy b3MgNCBydW50aW1lIGRlYnVnZ2luZyAqLworCisjaWZkZWYgS0lOSVQKKyNkZWZpbmUgS1JCX0RF RkFVTFRfTElGRSAxMjAgLyogMTAgaG91cnMgaW4gNSBtaW51dGUgaW50ZXJ2YWxzICovCisKKyNp ZmRlZiBTTks0CisvKiBTTks0IGlzIGEgaGFyZHdhcmUgYXV0aGVudGljYXRpb24gc3lzdGVtIHVz ZWQgdG8gcHJlLWF1dGhlbnRpY2F0ZSAgICAqLworLyogYSB0aWNrZXQgZ2V0dGluZyB0aWNrZXQu ICBXZSBkbyBub3Qgc3VwcG9ydCB0aGlzIGNvZGUgYXQgdGhlIHByZXNlbnQgKi8KKy8qIHRpbWUg aW4gS2VybWl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCit2b2lkCitnZXRfaW5wdXQocywgc2l6ZSwgc3RyZWFtKQorY2hhciAqczsKK2lu dCBzaXplOworRklMRSAqc3RyZWFtOworeworICAgIGNoYXIgKnA7CisKKyAgICBpZiAoZmdldHMo cywgc2l6ZSwgc3RyZWFtKSA9PSBOVUxMKQorICAgICAgICBleGl0KDEpOworICAgIGlmICggKHAg PSBzdHJjaHIocywgJ1xuJykpICE9IE5VTEwpCisgICAgICAgICpwID0gJ1wwJzsKK30KKyNlbmRp ZiAvKiBTTks0ICovCisKKyNpZmRlZiBDT01NRU5UCitzdGF0aWMgY2hhcgorI2lmZGVmIENLX0FO U0lDCitoZXhfc2Nhbl9ueWJibGUoY2hhciBjKQorI2Vsc2UKK2hleF9zY2FuX255YmJsZShjKSBj aGFyIGM7CisjZW5kaWYKK3sKKyAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisgICAgICAg IHJldHVybiBjIC0gJzAnOworICAgIGlmIChjID49ICdBJyAmJiBjIDw9ICdGJykKKyAgICAgICAg cmV0dXJuIGMgLSAnQScgKyAxMDsKKyAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCisgICAg ICAgIHJldHVybiBjIC0gJ2EnICsgMTA7CisgICAgcmV0dXJuIC0xOworfQorCisvKiByZXR1cm5z OiBOVUxMIGZvciBvaywgcG9pbnRlciB0byBlcnJvciBzdHJpbmcgZm9yIGJhZCBpbnB1dCAqLwor c3RhdGljIGNoYXIqCisjaWZkZWYgQ0tfQU5TSUMKK2hleF9zY2FuX2ZvdXJfYnl0ZXMoY2hhciAq b3V0LCBjaGFyICppbikKKyNlbHNlCitoZXhfc2Nhbl9mb3VyX2J5dGVzKG91dCwgaW4pIGNoYXIg Km91dDsgY2hhciAqaW47CisjZW5kaWYKK3sKKyAgICBpbnQgaTsKKyAgICBpbnQgYzsKKyAgICBj aGFyIGMxOworICAgIGZvciAoaT0wOyBpPDg7IGkrKykgeworICAgICAgICBpZighaW5baV0pCisg ICAgICAgICAgICByZXR1cm4gIm5vdCBlbm91Z2ggaW5wdXQiOworICAgICAgICBjID0gaGV4X3Nj YW5fbnliYmxlKGluW2ldKTsKKyAgICAgICAgaWYoYzwwKQorICAgICAgICAgICAgcmV0dXJuICJp bnZhbGlkIGRpZ2l0IjsKKyAgICAgICAgYzEgPSBjOworICAgICAgICBpKys7CisgICAgICAgIGlm KCFpbltpXSkKKyAgICAgICAgICAgIHJldHVybiAibm90IGVub3VnaCBpbnB1dCI7CisgICAgICAg IGMgPSBoZXhfc2Nhbl9ueWJibGUoaW5baV0pOworICAgICAgICBpZihjPDApCisgICAgICAgICAg ICByZXR1cm4gImludmFsaWQgZGlnaXQiOworICAgICAgICAqb3V0KysgPSAoYzEgPDwgNCkgKyBj OworICAgIH0KKyAgICBzd2l0Y2goaW5baV0pIHsKKyAgICBjYXNlIDA6CisgICAgY2FzZSAnXHIn OgorICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVmYXVsdDoKKyAg ICAgICAgcmV0dXJuICJleHRyYSBjaGFyYWN0ZXJzIGF0IGVuZCBvZiBpbnB1dCI7CisgICAgfQor fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworLyogY2tfa3JiNF9pbml0VEdUKCkgcmV0dXJucyAw IG9uIHN1Y2Nlc3MgKi8KK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI0X2luaXRUR1Qoc3Ry dWN0IGtyYl9vcF9kYXRhICogb3AsIHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqIGluaXQpCisjZWxz ZQorY2tfa3JiNF9pbml0VEdUKG9wLGluaXQpCisgICAgc3RydWN0IGtyYl9vcF9kYXRhICogb3As IHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqIGluaXQKKyNlbmRpZgoreworICAgIGNoYXIgICAgYW5h bWVbQU5BTUVfU1orMV07CisgICAgY2hhciAgICBpbnN0W0lOU1RfU1orMV07CisgICAgY2hhciAg ICByZWFsbVtSRUFMTV9TWisxXTsKKyAgICBjaGFyICAgICpwYXNzd29yZD1OVUxMOworICAgIGNo YXIgICAgcGFzc3dkWzgwXT0iIjsKKyAgICBjaGFyICAgICp1c2VybmFtZSA9IE5VTEw7CisgICAg Y2hhciAgICAqdXNlcm5hbWVwdHI9TlVMTDsKKyAgICBpbnQgICAgIGlmbGFnLCAgICAgIC8qIElu c3RhbmNlICovCisgICAgICAgICAgICByZmxhZywgICAgICAvKiBSZWFsbSAqLworICAgICAgICAg ICAgdmZsYWcsICAgICAgLyogVmVyYm9zZSAqLworICAgICAgICAgICAgbGZsYWcsICAgICAgLyog TGlmZXRpbWUgKi8KKyAgICAgICAgICAgIHBmbGFnLCAgICAgIC8qIFByZWF1dGggKi8KKyAgICAg ICAgICAgIGxpZmV0aW1lPUtSQl9ERUZBVUxUX0xJRkUsICAgLyogTGlmZSBUaW1lICovCisgICAg ICAgICAgICBrX2Vycm5vOworICAgIHJlZ2lzdGVyIGNoYXIgKmNwOworICAgIHJlZ2lzdGVyIGk7 CisKKyAgICBpZiAoICFja19rcmI0X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKC0x KTsKKworICAgICppbnN0ID0gKnJlYWxtID0gJ1wwJzsKKyAgICBpZmxhZyA9IHJmbGFnID0gdmZs YWcgPSBsZmxhZyA9IHBmbGFnID0gMDsKKworICAgIHZmbGFnID0gaW5pdC0+dmVyYm9zZTsKKyAg ICBwZmxhZyA9IGluaXQtPnByZWF1dGg7CisKKyAgICBpZiAoIGluaXQtPmxpZmV0aW1lICkgewor ICAgICAgICBsaWZldGltZSA9IGluaXQtPmxpZmV0aW1lPDU/MTppbml0LT5saWZldGltZS81Owor ICAgICAgICBpZiAoIGxpZmV0aW1lID4gMjU1ICkgbGlmZXRpbWUgPSAyNTU7CisgICAgfQorICAg IGVsc2UKKyAgICAgICAgbGlmZXRpbWUgPSBLUkJfREVGQVVMVF9MSUZFOworCisgICAgdXNlcm5h bWUgPSBpbml0LT5wcmluY2lwYWw7CisKKyAgICBpZiAodXNlcm5hbWUgJiYgdXNlcm5hbWVbMF0g JiYKKyAgICAgICAgKGtfZXJybm8gPSBrbmFtZV9wYXJzZShhbmFtZSwgaW5zdCwgcmVhbG0sIHVz ZXJuYW1lKSkKKyAgICAgICAgIT0gQVVUSF9TVUNDRVNTKSB7CisgICAgICAgIGtyYjRfZXJybm8g PSBrX2Vycm5vOworICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0 X2VudHJ5KGtfZXJybm8pKTsKKyAgICAgICAgcHJpbnRmKCIlc1xyXG4iLCBrcmJfZ2V0X2Vycl90 ZXh0X2VudHJ5KGtfZXJybm8pKTsKKyAgICAgICAgaWZsYWcgPSByZmxhZyA9IDE7CisgICAgICAg IHVzZXJuYW1lID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIGluaXQtPnJlYWxtICkgeworICAg ICAgICBja3N0cm5jcHkocmVhbG0saW5pdC0+cmVhbG0sUkVBTE1fU1opOworICAgIH0KKworICAg IGlmICggaW5pdC0+aW5zdGFuY2UgKSB7CisgICAgICAgIGNrc3RybmNweShpbnN0LGluaXQtPmlu c3RhbmNlLCBJTlNUX1NaKTsKKyAgICB9CisKKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKCB2Zmxh ZyApCisgICAgICAgIHByaW50ZigiS2VyYmVyb3MgSVYgaW5pdGlhbGl6YXRpb25cclxuIik7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYgKCF1c2VybmFtZSB8fCAhdXNlcm5hbWVbMF0p IHsKKyAgICAgICAgZGVidWcoRjEwMCwiY2tfa3JiNF9pbml0VEdUIG5vIHVzZXJuYW1lIHNwZWNp ZmllZCIsIiIsMCk7CisgICAgICAgIHByaW50ZigiP0ludmFsaWQgcHJpbmNpcGFsIHNwZWNpZmll ZC5cclxuIik7CisgICAgICAgIGtyYjRfZXJybm8gPSAtMTsKKyAgICAgICAgbWFrZXN0cigma3Ji NF9lcnJtc2csIk5vIHByaW5jaXBhbCBzcGVjaWZpZWQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgaWYgKCEqcmVhbG0pIHsKKyAgICAgICAgY2tzdHJuY3B5KHJlYWxtLGNrX2ty YjRfZ2V0cmVhbG0oKSxSRUFMTV9TWik7CisgICAgfQorCisgICAgaWYgKCBpbml0LT5wYXNzd29y ZCApCisgICAgICAgIHBhc3N3b3JkID0gaW5pdC0+cGFzc3dvcmQ7CisgICAgZWxzZSB7CisgICAg ICAgIGNoYXIgcHJtcHRbODBdOworICAgICAgICBpbnQgb2s7CisKKyAgICAgICAgY2ttYWt4bXNn KHBybXB0LHNpemVvZihwcm1wdCksCisgICAgICAgICAgICAgICAgICAiS2VyYmVyb3MgNCBQYXNz d29yZCBmb3IgIix1c2VybmFtZSwiQCIscmVhbG0sIjogIiwKKyAgICAgICAgICAgICAgICAgICBO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgb2sgPSB1cV90eHQo TlVMTCxwcm1wdCwyLE5VTEwscGFzc3dkLDgwLE5VTEwsREVGQVVMVF9VUV9USU1FT1VUKTsKKyAg ICAgICAgaWYgKCBvayApCisgICAgICAgICAgICBwYXNzd29yZCA9IHBhc3N3ZDsKKyAgICB9CisK KyAgICBpZiAocGZsYWcpIHsKKyAgICAgICAga19lcnJubyA9IGtyYl9nZXRfcHdfaW5fdGt0X3By ZWF1dGgoIGFuYW1lLCBpbnN0LCByZWFsbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJrcmJ0Z3QiLCByZWFsbSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQpOworICAgICAgICBpZiAoa19lcnJubyA9PSAt MSkgeyAgICAvKiBwcmVhdXRoIG1ldGhvZCBub3QgYXZhaWxhYmxlICovCisgICAgICAgICAgICBr X2Vycm5vID0ga3JiX2dldF9wd19pbl90a3QoYW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluc3QsIHJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAia3JidGd0IiwgcmVhbG0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXNzd29yZCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg ICBrX2Vycm5vID0ga3JiX2dldF9wd19pbl90a3QoYW5hbWUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5zdCwgcmVhbG0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImtyYnRndCIsIHJlYWxtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhc3N3b3JkKTsKKyAgICB9CisKKyAgICBtZW1zZXQocGFzc3dkLDAsc2l6ZW9mKHBhc3N3ZCkp OworICAgIGlmIChrX2Vycm5vKSB7CisgICAgICAgIHByaW50ZigiJXMgZm9yIHByaW5jaXBhbCAl cyVzJXNAJXNcclxuIiwKKyAgICAgICAgICAgICAgICBrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtf ZXJybm8pLCBhbmFtZSwKKyAgICAgICAgICAgICAgICBpbnN0WzBdPyIuIjoiIiwgaW5zdCwgcmVh bG0pOworICAgICAgICBrcmI0X2Vycm5vID0ga19lcnJubzsKKyAgICAgICAgbWFrZXN0cigma3Ji NF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfSBlbHNlIGlmICh2ZmxhZykgeworICAgICAgICBwcmludGYoIlJlc3VsdCBm cm9tIHJlYWxtICVzOiAiLCByZWFsbSk7CisgICAgICAgIHByaW50ZigiJXNcclxuIiwga3JiX2dl dF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7CisgICAgfQorICAgIGtyYjRfZXJybm8gPSBrX2Vy cm5vOworICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19l cnJubykpOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBLSU5JVCAqLworI2lmZGVmIEtE RVNUUk9ZCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNF9kZXN0cm95KHN0cnVjdCBrcmJf b3BfZGF0YSAqIG9wKQorI2Vsc2UKK2NrX2tyYjRfZGVzdHJveShvcCkgc3RydWN0IGtyYl9vcF9k YXRhICogb3A7CisjZW5kaWYKK3sKKyAgICBpbnQga19lcnJubz0wOworCisgICAgaWYgKCAhY2tf a3JiNF9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJldHVybigtMSk7CisKKyAgICBrX2Vycm5v ID0gZGVzdF90a3QoKTsKKworICAgIGtyYjRfZXJybm8gPSBrX2Vycm5vOworICAgIG1ha2VzdHIo JmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJubykpOworCisgICAgaWYg KGtfZXJybm8gPT0gMCkKKyAgICAgICAgcHJpbnRmKCJUaWNrZXRzIGRlc3Ryb3llZC5cclxuIik7 CisgICAgZWxzZSBpZiAoa19lcnJubyA9PSBSRVRfVEtGSUwpCisgICAgICAgIHByaW50ZigiTm8g dGlja2V0cyB0byBkZXN0cm95LlxyXG4iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJU aWNrZXRzIE1BWSBOT1QgYmUgZGVzdHJveWVkLlxyXG4iKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIEtERVNUUk9ZICovCisjaWZkZWYg S0xJU1QKK19QUk9UT1RZUChzdGF0aWMgaW50IGRpc3BsYXlfdGt0ZmlsZSwoY2hhciAqLCBpbnQs IGludCwgaW50KSk7CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI0X2xpc3RfY3JlZHMo c3RydWN0IGtyYl9vcF9kYXRhICogb3ApCisjZWxzZQorY2tfa3JiNF9saXN0X2NyZWRzKG9wKSBz dHJ1Y3Qga3JiX29wX2RhdGEgKiBvcDsKKyNlbmRpZgoreworICAgIGludCAgICAgbG9uZ19mb3Jt ID0gMTsKKyAgICBpbnQgICAgIHRndF90ZXN0ID0gMDsKKyAgICBpbnQgICAgIGRvX3NydnRhYiA9 IDA7CisgICAgaW50ICAgICBzaG93X2t2bm9zID0gMDsKKyAgICBjaGFyICAgKnRrdF9maWxlID0g TlVMTDsKKworICAgIGlmICggIWNrX2tyYjRfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1 cm4oLTEpOworCisgICAgaWYgKCBvcC0+Y2FjaGUgKQorICAgICAgICB0a3RfZmlsZSA9IG9wLT5j YWNoZTsKKworICAgIGlmICggazRkZWJ1ZyApIHsKKyAgICAgICAgc2hvd19rdm5vcyA9IDE7Cisg ICAgfQorCisgICAgaWYgKGRvX3NydnRhYikKKyAgICAgICAgcmV0dXJuKGRpc3BsYXlfc3J2dGFi KHRrdF9maWxlKSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4oZGlzcGxheV90a3RmaWxlKHRr dF9maWxlLCB0Z3RfdGVzdCwgbG9uZ19mb3JtLCBzaG93X2t2bm9zKSk7Cit9CisKKyNpZm5kZWYg S1JCNQorc3RhdGljIGludCB0aW1lc3RhbXBfd2lkdGg9MDsKKworc3RhdGljIGNoYXIgICAqCisj aWZkZWYgQ0tfQU5TSUMKK3Nob3J0X2RhdGUobG9uZyAgICpkcCkKKyNlbHNlCitzaG9ydF9kYXRl KGRwKSBsb25nICAgKmRwOworI2VuZGlmCit7CisgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisgICAg ZXh0ZXJuIGNoYXIgKmN0aW1lKCk7CisgICAgY3AgPSBjdGltZShkcCkgKyA0OworICAgIGNwWzE1 XSA9ICdcMCc7CisgICAgcmV0dXJuIChjcCk7Cit9CisKKworc3RhdGljIFZPSUQKKyNpZmRlZiBD S19BTlNJQworcHJpbnR0aW1lKHRpbWVfdCB0dikKKyNlbHNlCitwcmludHRpbWUodHYpIHRpbWVf dCB0djsKKyNlbmRpZgoreworICAgIGNoYXIgdGltZXN0cmluZ1tCVUZTSVpdOworICAgIGNoYXIg Zm9ybWF0WzEyXTsKKyAgICBjaGFyIGZpbGw7CisKKyAgICBmaWxsID0gJyAnOworICAgIHNwcmlu dGYoZm9ybWF0LCIlJS0lZHMiLHRpbWVzdGFtcF93aWR0aCk7ICAgLyogc2FmZSAqLworICAgIHBy aW50Zihmb3JtYXQsc2hvcnRfZGF0ZSgmdHYpKTsKK30KKyNlbmRpZiAvKiBLUkI1ICovCisKK3N0 YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworZGlzcGxheV90a3RmaWxlKGNoYXIgKmZpbGUsIGlu dCB0Z3RfdGVzdCwgaW50IGxvbmdfZm9ybSwgaW50IHNob3dfa3Zub3MpCisjZWxzZQorZGlzcGxh eV90a3RmaWxlKGZpbGUsdGd0X3Rlc3QsbG9uZ19mb3JtLHNob3dfa3Zub3MpCisgICAgY2hhciAq ZmlsZTsgaW50IHRndF90ZXN0OyBpbnQgbG9uZ19mb3JtOyBpbnQgc2hvd19rdm5vczsKKyNlbmRp ZgoreworICAgIGNoYXIgICAgcG5hbWVbQU5BTUVfU1pdOworICAgIGNoYXIgICAgcGluc3RbSU5T VF9TWl07CisgICAgY2hhciAgICBwcmVhbG1bUkVBTE1fU1pdOworICAgIGNoYXIgICAgYnVmMVsy MF0sIGJ1ZjJbMjBdOworICAgIGludCAgICAga19lcnJubzsKKyNpZmRlZiBPUzIKKyAgICBMRUFT SF9DUkVERU5USUFMUyBjcmVkczsKKyNlbHNlIC8qIE9TMiAqLworICAgIENSRURFTlRJQUxTIGNy ZWRzOworI2VuZGlmIC8qIE9TMiAqLworICAgIGludCAgICAgaGVhZGVyID0gMTsKKworICAgIGZp bGUgPSB0a3Rfc3RyaW5nKCk7CisKKyAgICBpZiAobG9uZ19mb3JtKSB7CisgICAgICAgIHByaW50 ZigiVGlja2V0IGNhY2hlOiAgICAgICVzXHJcbiIsIGZpbGUpOworICAgIH0KKworICAgIC8qCisg ICAgICogU2luY2Uga3JiX2dldF90Zl9yZWFsbSB3aWxsIHJldHVybiBhIHRpY2tldF9maWxlIGVy cm9yLAorICAgICAqIHdlIHdpbGwgY2FsbCB0Zl9pbml0IGFuZCB0Zl9jbG9zZSBmaXJzdCB0byBm aWx0ZXIgb3V0CisgICAgICogdGhpbmdzIGxpa2Ugbm8gdGlja2V0IGZpbGUuICBPdGhlcndpc2Us IHRoZSBlcnJvciB0aGF0CisgICAgICogdGhlIHVzZXIgd291bGQgc2VlIHdvdWxkIGJlCisgICAg ICoga2xpc3Q6IGNhbid0IGZpbmQgcmVhbG0gb2YgdGlja2V0IGZpbGU6IE5vIHRpY2tldCBmaWxl ICh0Zl91dGlsKQorICAgICAqIGluc3RlYWQgb2YKKyAgICAgKiBrbGlzdDogTm8gdGlja2V0IGZp bGUgKHRmX3V0aWwpCisgICAgICovCisKKyAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCisgICAg aWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkpIHsKKyAgICAgICAgaWYgKCF0 Z3RfdGVzdCkKKyAgICAgICAgICAgIHByaW50ZigiJXNcclxuIiwga3JiX2dldF9lcnJfdGV4dF9l bnRyeSAoa19lcnJubykpOworICAgICAgICBrcmI0X2Vycm5vID0ga19lcnJubzsKKyAgICAgICAg bWFrZXN0cigma3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7Cisg ICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisKKyAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAq LworICAgICh2b2lkKSB0Zl9jbG9zZSgpOworCisgICAgLyoKKyAgICAgKiBXZSBtdXN0IGZpbmQg dGhlIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSBoZXJlIGJlZm9yZSBjYWxsaW5nCisgICAgICog dGZfaW5pdCBiZWNhdXNlIHNpbmNlIHRoZSByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUgaXMgbm90 CisgICAgICogcmVhbGx5IHN0b3JlZCBpbiB0aGUgcHJpbmNpcGFsIHNlY3Rpb24gb2YgdGhlIGZp bGUsIHRoZQorICAgICAqIHJvdXRpbmUgd2UgdXNlIG11c3QgaXRzZWxmIGNhbGwgdGZfaW5pdCBh bmQgdGZfY2xvc2UuCisgICAgICovCisgICAgaWYgKChrX2Vycm5vID0ga3JiX2dldF90Zl9yZWFs bShmaWxlLCBwcmVhbG0pKSAhPSBBVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgaWYgKCF0Z3RfdGVz dCkKKyAgICAgICAgICAgIHByaW50ZigiY2FuJ3QgZmluZCByZWFsbSBvZiB0aWNrZXQgZmlsZTog JXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAga3JiX2dldF9lcnJfdGV4dF9lbnRyeSAoa19l cnJubykpOworICAgICAgICBrcmI0X2Vycm5vID0ga19lcnJubzsKKyAgICAgICAgbWFrZXN0cigm a3JiNF9lcnJtc2csa3JiX2dldF9lcnJfdGV4dF9lbnRyeShrX2Vycm5vKSk7CisgICAgICAgIHJl dHVybigtMSk7CisgICAgfQorCisgICAgLyogT3BlbiB0aWNrZXQgZmlsZSAqLworICAgIGlmIChr X2Vycm5vID0gdGZfaW5pdChmaWxlLCBSX1RLVF9GSUwpKSB7CisgICAgICAgIGlmICghdGd0X3Rl c3QpCisgICAgICAgICAgICBwcmludGYoIiVzXHJcbiIsIGtyYl9nZXRfZXJyX3RleHRfZW50cnkg KGtfZXJybm8pKTsKKyAgICAgICAga3JiNF9lcnJubyA9IGtfZXJybm87CisgICAgICAgIG1ha2Vz dHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJyX3RleHRfZW50cnkoa19lcnJubykpOworICAgICAg ICByZXR1cm4oLTEpOworICAgIH0KKyAgICAvKiBHZXQgcHJpbmNpcGFsIG5hbWUgYW5kIGluc3Rh bmNlICovCisgICAgaWYgKChrX2Vycm5vID0gdGZfZ2V0X3BuYW1lKHBuYW1lKSkgfHwKKyAgICAg ICAgIChrX2Vycm5vID0gdGZfZ2V0X3BpbnN0KHBpbnN0KSkpIHsKKyAgICAgICAgKHZvaWQpIHRm X2Nsb3NlKCk7CisgICAgICAgIGlmICghdGd0X3Rlc3QpCisgICAgICAgICAgICBwcmludGYoIiVz XHJcbiIsIGtyYl9nZXRfZXJyX3RleHRfZW50cnkgKGtfZXJybm8pKTsKKyAgICAgICAga3JiNF9l cnJubyA9IGtfZXJybm87CisgICAgICAgIG1ha2VzdHIoJmtyYjRfZXJybXNnLGtyYl9nZXRfZXJy X3RleHRfZW50cnkoa19lcnJubykpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAg IC8qCisgICAgICogWW91IG1heSB0aGluayB0aGF0IHRoaXMgaXMgdGhlIG9idmlvdXMgcGxhY2Ug dG8gZ2V0IHRoZQorICAgICAqIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSwgYnV0IGl0IGNhbid0 IGJlIGRvbmUgaGVyZSBhcyB0aGUKKyAgICAgKiByb3V0aW5lIHRvIGRvIHRoaXMgbXVzdCBvcGVu IHRoZSB0aWNrZXQgZmlsZS4gIFRoaXMgaXMgd2h5CisgICAgICogaXQgd2FzIGRvbmUgYmVmb3Jl IHRmX2luaXQuCisgICAgICovCisKKyAgICBpZiAoIXRndF90ZXN0ICYmIGxvbmdfZm9ybSkKKyAg ICAgICAgcHJpbnRmKCJEZWZhdWx0IHByaW5jaXBhbDogJXMlcyVzJXMlc1xyXG5cclxuIiwgcG5h bWUsCisgICAgICAgICAgICAgICAocGluc3RbMF0gPyAiLiIgOiAiIiksIHBpbnN0LAorICAgICAg ICAgICAgICAgKHByZWFsbVswXSA/ICJAIiA6ICIiKSwgcHJlYWxtKTsKKworICAgIHdoaWxlICgo a19lcnJubyA9IHRmX2dldF9jcmVkKCZjcmVkcykpID09IEFVVEhfU1VDQ0VTUykgeworICAgICAg ICBpZiAoIXRndF90ZXN0ICYmIGxvbmdfZm9ybSAmJiBoZWFkZXIpIHsKKyAgICAgICAgICAgIHBy aW50ZigiJS0xN3MgICUtMTdzICAlc1xyXG4iLAorICAgICAgICAgICAgICAgICAgICJWYWxpZCBz dGFydGluZyIsICJFeHBpcmVzIiwgIlNlcnZpY2UgcHJpbmNpcGFsIik7CisgICAgICAgICAgICBo ZWFkZXIgPSAwOworICAgICAgICB9CisgICAgICAgIGlmICh0Z3RfdGVzdCkgeworICAgICAgICAg ICAgY3JlZHMuaXNzdWVfZGF0ZSArPSAoKHVuc2lnbmVkIGNoYXIpIGNyZWRzLmxpZmV0aW1lKSAq IDUgKiA2MDsKKyAgICAgICAgICAgIGlmICghc3RyY21wKGNyZWRzLnNlcnZpY2UsICJrcmJ0Z3Qi KSAmJgorICAgICAgICAgICAgICAgICFzdHJjbXAoY3JlZHMuaW5zdGFuY2UsIHByZWFsbSkpIHsK KyAgICAgICAgICAgICAgICBrcmI0X2Vycm5vID0ga19lcnJubzsKKyAgICAgICAgICAgICAgICBt YWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0X2VudHJ5KGtfZXJybm8pKTsKKwor ICAgICAgICAgICAgICAgICh2b2lkKSB0Zl9jbG9zZSgpOworICAgICAgICAgICAgICAgIGlmICh0 aW1lKDApIDwgY3JlZHMuaXNzdWVfZGF0ZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4o MCk7ICAgICAgICAgIC8qIHRndCBoYXNuJ3QgZXhwaXJlZCAqLworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgLyogaGFzIGV4 cGlyZWQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj b250aW51ZTsgICAgICAgICAgICAgICAgICAgLyogbm90IGEgdGd0ICovCisgICAgICAgIH0KKyAg ICAgICAgaWYgKGxvbmdfZm9ybSkgeworICAgICAgICAgICAgdGltZXN0YW1wX3dpZHRoID0gMTc7 ICAgICAgIC8qIGZvciBrNSBkaXNwbGF5IGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogaWYgYXZhaWxhYmxlICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIHByaW50dGltZShjcmVkcy5pc3N1ZV9kYXRlKTsKKyAgICAgICAgICAgIHByaW50Zigi ICAiKTsKKyAgICAgICAgICAgIGNyZWRzLmlzc3VlX2RhdGUgKz0gKCh1bnNpZ25lZCBjaGFyKSBj cmVkcy5saWZldGltZSkgKiA1ICogNjA7CisgICAgICAgICAgICBpZiAoIHRpbWUoMCkgPCBjcmVk cy5pc3N1ZV9kYXRlICkKKyAgICAgICAgICAgICAgICBwcmludHRpbWUoY3JlZHMuaXNzdWVfZGF0 ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCIqKiogZXhwaXJl ZCAqKiogICIpOworICAgICAgICAgICAgcHJpbnRmKCIgICIpOworICAgICAgICB9CisgICAgICAg IGlmIChzaG93X2t2bm9zKQorICAgICAgICAgIHByaW50ZigiJXMlcyVzJXMlcyAoJWQpXHJcbiIs CisgICAgICAgICAgICAgICAgIGNyZWRzLnNlcnZpY2UsIChjcmVkcy5pbnN0YW5jZVswXSA/ICIu IiA6ICIiKSwgY3JlZHMuaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgIChjcmVkcy5yZWFsbVsw XSA/ICJAIiA6ICIiKSwgY3JlZHMucmVhbG0sIGNyZWRzLmt2bm8pOworICAgICAgICBlbHNlCisg ICAgICAgICAgcHJpbnRmKCIlcyVzJXMlcyVzXHJcbiIsCisgICAgICAgICAgICAgICAgIGNyZWRz LnNlcnZpY2UsIChjcmVkcy5pbnN0YW5jZVswXSA/ICIuIiA6ICIiKSwgY3JlZHMuaW5zdGFuY2Us CisgICAgICAgICAgICAgICAgIChjcmVkcy5yZWFsbVswXSA/ICJAIiA6ICIiKSwgY3JlZHMucmVh bG0pOworCisjaWZkZWYgT1MyCisgICAgICAgIGlmICggY3JlZHMuYWRkcmVzc1swXSApCisgICAg ICAgICAgICBwcmludGYoIiAgIEFkZHJlc3M6ICVzXHJcbiIsY3JlZHMuYWRkcmVzcyk7CisjZW5k aWYgLyogT1MyICovCisgICAgfQorCisgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisKKyAgICBpZiAo dGd0X3Rlc3QpIHsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9Lyogbm8gdGd0IGZvdW5kICov CisgICAgaWYgKGhlYWRlciAmJiBsb25nX2Zvcm0gJiYga19lcnJubyA9PSBFT0YpIHsKKyAgICAg ICAgcHJpbnRmKCJObyB0aWNrZXRzIGluIGZpbGUuXHJcbiIpOworICAgIH0KKyAgICBrcmI0X2Vy cm5vID0ga19lcnJubzsKKyAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxrcmJfZ2V0X2Vycl90ZXh0 X2VudHJ5KGtfZXJybm8pKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBDT01NRU5UCisv KiBKdXN0IHNvIHdlIHJlbWVtYmVyIHdoYXQgdGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgbG9v a2VkIGxpa2UgKi8KK3VzYWdlKCkKK3sKKyAgICBwcmludGYoCisgICAgICAgICJVc2FnZTogWyAt cyB8IC10IF0gWyAtZmlsZSBmaWxlbmFtZSBdIFsgLXNydnRhYiBdIFsgLXZlcnNpb24gXVxyXG4i KTsKKyAgICByZXR1cm4oLTEpOworfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworLyogYWRhcHRl ZCBmcm9tIGdldHN0KCkgaW4gbGlicmtiICovCisvKgorICogb2tfZ2V0c3QoKSB0YWtlcyBhIGZp bGUgZGVzY3JpcHRvciwgYSBzdHJpbmcgYW5kIGEgY291bnQuICBJdCByZWFkcworICogZnJvbSB0 aGUgZmlsZSB1bnRpbCBlaXRoZXIgaXQgaGFzIHJlYWQgImNvdW50IiBjaGFyYWN0ZXJzLCBvciB1 bnRpbAorICogaXQgcmVhZHMgYSBudWxsIGJ5dGUuICBXaGVuIGZpbmlzaGVkLCB3aGF0IGhhcyBi ZWVuIHJlYWQgZXhpc3RzIGluCisgKiB0aGUgZ2l2ZW4gc3RyaW5nICJzIi4gIElmICJjb3VudCIg Y2hhcmFjdGVycyB3ZXJlIGFjdHVhbGx5IHJlYWQsIHRoZQorICogbGFzdCBpcyBjaGFuZ2VkIHRv IGEgbnVsbCwgc28gdGhlIHJldHVybmVkIHN0cmluZyBpcyBhbHdheXMgbnVsbC0KKyAqIHRlcm1p bmF0ZWQuICBva19nZXRzdCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQs IGluY2x1ZGluZworICogdGhlIG51bGwgdGVybWluYXRvci4KKyAqCisgKiBJZiB0aGVyZSBpcyBh IHJlYWQgZXJyb3IsIGl0IHJldHVybnMgLTEgKGxpa2UgdGhlIHJlYWQoMikgc3lzdGVtIGNhbGwp CisgKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitva19nZXRzdChpbnQgZmQsIHJl Z2lzdGVyIGNoYXIgKnMsIGludCBuKQorI2Vsc2UKK29rX2dldHN0KGZkLCBzLCBuKSBpbnQgZmQ7 IHJlZ2lzdGVyIGNoYXIgKnM7IGludCBuOworI2VuZGlmCit7CisgICAgcmVnaXN0ZXIgaW50IGNv dW50ID0gbjsKKyAgICBpbnQgZXJyOworICAgIHdoaWxlICgoZXJyID0gcmVhZChmZCwgcywgMSkp ID4gMCAmJiAtLWNvdW50KQorICAgICAgICBpZiAoKnMrKyA9PSAnXDAnKQorICAgICAgICAgICAg cmV0dXJuIChuIC0gY291bnQpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4oLTEp OworICAgICpzID0gJ1wwJzsKKyAgICByZXR1cm4gKG4gLSBjb3VudCk7Cit9CisKK2ludAorI2lm ZGVmIENLX0FOU0lDCitkaXNwbGF5X3NydnRhYihjaGFyICpmaWxlKQorI2Vsc2UKK2Rpc3BsYXlf c3J2dGFiKGZpbGUpIGNoYXIgKmZpbGU7CisjZW5kaWYKK3sKKyAgICBpbnQgc3RhYjsKKyAgICBj aGFyIHNlcnZbU05BTUVfU1pdOworICAgIGNoYXIgaW5zdFtJTlNUX1NaXTsKKyAgICBjaGFyIHJs bVtSRUFMTV9TWl07CisgICAgdW5zaWduZWQgY2hhciBrZXlbOF07CisgICAgdW5zaWduZWQgY2hh ciB2bm87CisgICAgaW50IGNvdW50OworCisgICAgcHJpbnRmKCJTZXJ2ZXIga2V5IGZpbGU6ICAg JXNcclxuIiwgZmlsZSk7CisjaWZkZWYgTlQKKyNpZm5kZWYgT19SRE9OTFkKKyNkZWZpbmUgT19S RE9OTFkgX09fUkRPTkxZCisjZW5kaWYgLyogT19SRE9OTFkgKi8KKyNlbmRpZiAvKiBOVCAqLwor CisgICAgaWYgKChzdGFiID0gb3BlbihmaWxlLCBPX1JET05MWSwgMDQwMCkpIDwgMCkgeworICAg ICAgICBwZXJyb3IoZmlsZSk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIHByaW50 ZigiJS0xNXMgJS0xNXMgJS0xMHMgJXNcclxuIiwiU2VydmljZSIsIkluc3RhbmNlIiwiUmVhbG0i LAorICAgICAgICAgICAiS2V5IFZlcnNpb24iKTsKKyAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iKTsKKworICAgIC8q IGFyZ2guIGdldHN0IGRvZXNuJ3QgcmV0dXJuIGVycm9yIGNvZGVzLCBpdCBzaWxlbnRseSBmYWls cyAqLworICAgIHdoaWxlICgoKGNvdW50ID0gb2tfZ2V0c3Qoc3RhYiwgc2VydiwgU05BTUVfU1op KSA+IDApCisgICAgICAgICAgICYmICgoY291bnQgPSBva19nZXRzdChzdGFiLCBpbnN0LCBJTlNU X1NaKSkgPiAwKQorICAgICAgICAgICAmJiAoKGNvdW50ID0gb2tfZ2V0c3Qoc3RhYiwgcmxtLCBS RUFMTV9TWikpID4gMCkpIHsKKyAgICAgICAgaWYgKCgoY291bnQgPSByZWFkKHN0YWIsKGNoYXIg KikgJnZubywxKSkgIT0gMSkgfHwKKyAgICAgICAgICAgICAoKGNvdW50ID0gcmVhZChzdGFiLChj aGFyICopIGtleSw4KSkgIT0gOCkpIHsKKyAgICAgICAgICAgIGlmIChjb3VudCA8IDApCisgICAg ICAgICAgICAgICAgcGVycm9yKCJyZWFkaW5nIGZyb20ga2V5IGZpbGUiKTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoImtleSBmaWxlIHRydW5jYXRlZFxyXG4iKTsK KyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCIlLTE1 cyAlLTE1cyAlLTE1cyAlZFxyXG4iLHNlcnYsaW5zdCxybG0sdm5vKTsKKyAgICB9CisgICAgaWYg KGNvdW50IDwgMCkKKyAgICAgICAgcGVycm9yKGZpbGUpOworICAgICh2b2lkKSBjbG9zZShzdGFi KTsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogS0xJU1QgKi8KKyNlbHNlIC8qIEtSQjQg Ki8KK2ludAorY2tfa3JiNF9hdXRvZ2V0X1RHVChjaGFyICogZHVtbXkpCit7CisgICAgcmV0dXJu KC0xKTsKK30KKyNpZmRlZiBDS19LRVJCRVJPUworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2ty YjRfaW5pdFRHVChzdHJ1Y3Qga3JiX29wX2RhdGEgKiBvcCwgc3RydWN0IGtyYjRfaW5pdF9kYXRh ICogaW5pdCkKKyNlbHNlCitja19rcmI0X2luaXRUR1Qob3AsaW5pdCkKKyAgICBzdHJ1Y3Qga3Ji X29wX2RhdGEgKiBvcCwgc3RydWN0IGtyYjRfaW5pdF9kYXRhICogaW5pdAorI2VuZGlmCit7Cisg ICAgcmV0dXJuKC0xKTsKK30KKworI2lmZGVmIENLX0FOU0lDCitja19rcmI0X2Rlc3Ryb3koc3Ry dWN0IGtyYl9vcF9kYXRhICogb3ApCisjZWxzZQorY2tfa3JiNF9kZXN0cm95KG9wKSBzdHJ1Y3Qg a3JiX29wX2RhdGEgKiBvcDsKKyNlbmRpZgoreworICAgIHJldHVybigtMSk7Cit9CitpbnQKKyNp ZmRlZiBDS19BTlNJQworY2tfa3JiNF9saXN0X2NyZWRzKHN0cnVjdCBrcmJfb3BfZGF0YSAqIG9w KQorI2Vsc2UKK2NrX2tyYjRfbGlzdF9jcmVkcyhvcCkgc3RydWN0IGtyYl9vcF9kYXRhICogb3A7 CisjZW5kaWYKK3sKKyAgICByZXR1cm4oLTEpOworfQorI2Vsc2UgLyogQ0tfS0VSQkVST1MgKi8K K2ludCBja19rcmI0X2luaXRUR1Qodm9pZCAqIGEsIHZvaWQgKmIpCit7CisgICAgcmV0dXJuKC0x KTsKK30KK2ludCBja19rcmI0X2Rlc3Ryb3kodm9pZCAqYSkKK3sKKyAgICByZXR1cm4oLTEpOwor fQoraW50IGNrX2tyYjRfbGlzdF9jcmVkcyh2b2lkICphKQoreworICAgIHJldHVybigtMSk7Cit9 CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBLUkI0ICovCisKKy8qIFRoZSBm b2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGltcGxlbWVudCB0aGUgS2VybWl0IFNjcmlw dCBMYW5ndWFnZSAqLworLyogZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK3N0cnVjdCB0a3RfbGlzdF9p dGVtIHsKKyAgICBjaGFyICogbmFtZTsKKyAgICBzdHJ1Y3QgdGt0X2xpc3RfaXRlbSAqIG5leHQ7 Cit9OworCitzdGF0aWMgc3RydWN0IHRrdF9saXN0X2l0ZW0gKiBrNF90a3RfbGlzdCA9IE5VTEw7 CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI0X2dldF90a3RzKFZPSUQpCisjZWxzZQor Y2tfa3JiNF9nZXRfdGt0cygpCisjZW5kaWYKK3sKKyNpZmRlZiBLUkI0CisgICAgY2hhciAgICpm aWxlPU5VTEw7CisgICAgY2hhciAgICBwbmFtZVtBTkFNRV9TWl07CisgICAgY2hhciAgICBwaW5z dFtJTlNUX1NaXTsKKyAgICBjaGFyICAgIHByZWFsbVtSRUFMTV9TWl07CisgICAgY2hhciAgICBi dWYxWzIwXSwgYnVmMlsyMF07CisgICAgaW50ICAgICBrX2Vycm5vOworI2lmZGVmIE9TMgorICAg IExFQVNIX0NSRURFTlRJQUxTIGNyZWRzOworI2Vsc2UgLyogT1MyICovCisgICAgQ1JFREVOVElB TFMgY3JlZHM7CisjZW5kaWYgLyogT1MyICovCisgICAgaW50ICAgICB0a3RfY291bnQ9MDsKKyAg ICBzdHJ1Y3QgIHRrdF9saXN0X2l0ZW0gKiogbGlzdCA9ICZrNF90a3RfbGlzdDsKKworICAgIHdo aWxlICggazRfdGt0X2xpc3QgKSB7CisgICAgICAgIHN0cnVjdCB0a3RfbGlzdF9pdGVtICogbmV4 dDsKKyAgICAgICAgbmV4dCA9IGs0X3RrdF9saXN0LT5uZXh0OworICAgICAgICBmcmVlKGs0X3Rr dF9saXN0LT5uYW1lKTsKKyAgICAgICAgZnJlZShrNF90a3RfbGlzdCk7CisgICAgICAgIGs0X3Rr dF9saXN0ID0gbmV4dDsKKyAgICB9CisKKyAgICBpZiAoICFja19rcmI0X2lzX2luc3RhbGxlZCgp ICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGZpbGUgPSB0a3Rfc3RyaW5nKCk7CisKKyAg ICAvKgorICAgICAqIFNpbmNlIGtyYl9nZXRfdGZfcmVhbG0gd2lsbCByZXR1cm4gYSB0aWNrZXRf ZmlsZSBlcnJvciwKKyAgICAgKiB3ZSB3aWxsIGNhbGwgdGZfaW5pdCBhbmQgdGZfY2xvc2UgZmly c3QgdG8gZmlsdGVyIG91dAorICAgICAqIHRoaW5ncyBsaWtlIG5vIHRpY2tldCBmaWxlLiAgT3Ro ZXJ3aXNlLCB0aGUgZXJyb3IgdGhhdAorICAgICAqIHRoZSB1c2VyIHdvdWxkIHNlZSB3b3VsZCBi ZQorICAgICAqIGtsaXN0OiBjYW4ndCBmaW5kIHJlYWxtIG9mIHRpY2tldCBmaWxlOiBObyB0aWNr ZXQgZmlsZSAodGZfdXRpbCkKKyAgICAgKiBpbnN0ZWFkIG9mCisgICAgICoga2xpc3Q6IE5vIHRp Y2tldCBmaWxlICh0Zl91dGlsKQorICAgICAqLworCisgICAgLyogT3BlbiB0aWNrZXQgZmlsZSAq LworICAgIGlmIChrX2Vycm5vID0gdGZfaW5pdChmaWxlLCBSX1RLVF9GSUwpKSB7CisgICAgICAg IHJldHVybigtMSk7CisgICAgfQorCisgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KKyAgICAo dm9pZCkgdGZfY2xvc2UoKTsKKworICAgIC8qCisgICAgICogV2UgbXVzdCBmaW5kIHRoZSByZWFs bSBvZiB0aGUgdGlja2V0IGZpbGUgaGVyZSBiZWZvcmUgY2FsbGluZworICAgICAqIHRmX2luaXQg YmVjYXVzZSBzaW5jZSB0aGUgcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlIGlzIG5vdAorICAgICAq IHJlYWxseSBzdG9yZWQgaW4gdGhlIHByaW5jaXBhbCBzZWN0aW9uIG9mIHRoZSBmaWxlLCB0aGUK KyAgICAgKiByb3V0aW5lIHdlIHVzZSBtdXN0IGl0c2VsZiBjYWxsIHRmX2luaXQgYW5kIHRmX2Ns b3NlLgorICAgICAqLworICAgIGlmICgoa19lcnJubyA9IGtyYl9nZXRfdGZfcmVhbG0oZmlsZSwg cHJlYWxtKSkgIT0gQVVUSF9TVUNDRVNTKSB7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQor CisgICAgLyogT3BlbiB0aWNrZXQgZmlsZSAqLworICAgIGlmIChrX2Vycm5vID0gdGZfaW5pdChm aWxlLCBSX1RLVF9GSUwpKSB7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIC8qIEdl dCBwcmluY2lwYWwgbmFtZSBhbmQgaW5zdGFuY2UgKi8KKyAgICBpZiAoKGtfZXJybm8gPSB0Zl9n ZXRfcG5hbWUocG5hbWUpKSB8fAorICAgICAgICAgKGtfZXJybm8gPSB0Zl9nZXRfcGluc3QocGlu c3QpKSkgeworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qCisgICAgICogWW91 IG1heSB0aGluayB0aGF0IHRoaXMgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gZ2V0IHRoZQorICAg ICAqIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSwgYnV0IGl0IGNhbid0IGJlIGRvbmUgaGVyZSBh cyB0aGUKKyAgICAgKiByb3V0aW5lIHRvIGRvIHRoaXMgbXVzdCBvcGVuIHRoZSB0aWNrZXQgZmls ZS4gIFRoaXMgaXMgd2h5CisgICAgICogaXQgd2FzIGRvbmUgYmVmb3JlIHRmX2luaXQuCisgICAg ICovCisKKyAgICB3aGlsZSAoKGtfZXJybm8gPSB0Zl9nZXRfY3JlZCgmY3JlZHMpKSA9PSBBVVRI X1NVQ0NFU1MpIHsKKyAgICAgICAgY2hhciB0a3RfYnVmWzI1Nl07CisgICAgICAgIGNrbWFreG1z Zyh0a3RfYnVmLHNpemVvZih0a3RfYnVmKSwKKyAgICAgICAgICAgICAgICAgY3JlZHMuc2Vydmlj ZSwgKGNyZWRzLmluc3RhbmNlWzBdID8gIi4iIDogIiIpLCBjcmVkcy5pbnN0YW5jZSwKKyAgICAg ICAgICAgICAgICAgKGNyZWRzLnJlYWxtWzBdID8gIkAiIDogIiIpLCBjcmVkcy5yZWFsbSwKKyAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAg ICAgICpsaXN0ID0gKHN0cnVjdCB0a3RfbGlzdF9pdGVtICopIG1hbGxvYyhzaXplb2Yoc3RydWN0 IHRrdF9saXN0X2l0ZW0pKTsKKyAgICAgICAgKCpsaXN0KS0+bmFtZSA9IHN0cmR1cCh0a3RfYnVm KTsKKyAgICAgICAgKCpsaXN0KS0+bmV4dCA9IE5VTEw7CisgICAgICAgIGxpc3QgPSAmKCgqbGlz dCktPm5leHQpOworICAgICAgICB0a3RfY291bnQrKzsKKyAgICB9CisKKyAgICB0Zl9jbG9zZSgp OworICAgIHJldHVybih0a3RfY291bnQpOworI2Vsc2UgLyogS1JCNCAqLworICAgIHJldHVybigw KTsKKyNlbmRpZiAvKiBLUkI0ICovCit9CisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCitja19r cmI0X2dldF9uZXh0X3RrdChWT0lEKQorI2Vsc2UKK2NrX2tyYjRfZ2V0X25leHRfdGt0KCkKKyNl bmRpZgoreworI2lmZGVmIEtSQjQKKyAgICBzdGF0aWMgY2hhciAqIHM9TlVMTDsKKyAgICBzdHJ1 Y3QgdGt0X2xpc3RfaXRlbSAqIG5leHQ9TlVMTDsKKworICAgIGlmICggcyApIHsKKyAgICAgICAg ZnJlZShzKTsKKyAgICAgICAgcyA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKCBrNF90a3RfbGlz dCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgbmV4dCA9IGs0X3RrdF9s aXN0LT5uZXh0OworICAgIHMgPSBrNF90a3RfbGlzdC0+bmFtZTsKKyAgICBmcmVlKGs0X3RrdF9s aXN0KTsKKyAgICBrNF90a3RfbGlzdCA9IG5leHQ7CisgICAgcmV0dXJuKHMpOworI2Vsc2UgLyog S1JCNCAqLworICAgIHJldHVybihOVUxMKTsKKyNlbmRpZiAvKiBLUkI0ICovCit9CisKK2ludAor I2lmZGVmIENLX0FOU0lDCitja19rcmI0X3RrdF9pc3ZhbGlkKGNoYXIgKiB0a3RuYW1lKQorI2Vs c2UKK2NrX2tyYjRfdGt0X2lzdmFsaWQodGt0bmFtZSkgY2hhciAqIHRrdG5hbWU7CisjZW5kaWYK K3sKKyNpZmRlZiBLUkI0CisgICAgY2hhciAgICpmaWxlPU5VTEw7CisgICAgY2hhciAgICBwbmFt ZVtBTkFNRV9TWl07CisgICAgY2hhciAgICBwaW5zdFtJTlNUX1NaXTsKKyAgICBjaGFyICAgIHBy ZWFsbVtSRUFMTV9TWl07CisgICAgY2hhciAgICBidWYxWzIwXSwgYnVmMlsyMF07CisgICAgaW50 ICAgICBrX2Vycm5vOworICAgIHRpbWVfdCAgaXNzdWVfdCwgZXhwaXJlX3QsIG5vd190OworI2lm ZGVmIE9TMgorICAgIExFQVNIX0NSRURFTlRJQUxTIGNyZWRzOworI2Vsc2UgLyogT1MyICovCisg ICAgQ1JFREVOVElBTFMgY3JlZHM7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoICFja19r cmI0X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGRlYnVnKEYx MTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0a3Rfc3RyaW5nIiwwKTsKKyAgICBmaWxlID0gdGt0 X3N0cmluZygpOworCisgICAgLyoKKyAgICAgKiBTaW5jZSBrcmJfZ2V0X3RmX3JlYWxtIHdpbGwg cmV0dXJuIGEgdGlja2V0X2ZpbGUgZXJyb3IsCisgICAgICogd2Ugd2lsbCBjYWxsIHRmX2luaXQg YW5kIHRmX2Nsb3NlIGZpcnN0IHRvIGZpbHRlciBvdXQKKyAgICAgKiB0aGluZ3MgbGlrZSBubyB0 aWNrZXQgZmlsZS4gIE90aGVyd2lzZSwgdGhlIGVycm9yIHRoYXQKKyAgICAgKiB0aGUgdXNlciB3 b3VsZCBzZWUgd291bGQgYmUKKyAgICAgKiBrbGlzdDogY2FuJ3QgZmluZCByZWFsbSBvZiB0aWNr ZXQgZmlsZTogTm8gdGlja2V0IGZpbGUgKHRmX3V0aWwpCisgICAgICogaW5zdGVhZCBvZgorICAg ICAqIGtsaXN0OiBObyB0aWNrZXQgZmlsZSAodGZfdXRpbCkKKyAgICAgKi8KKworICAgIC8qIE9w ZW4gdGlja2V0IGZpbGUgKi8KKyAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwi dGZfaW5pdCIsMCk7CisgICAgaWYgKGtfZXJybm8gPSB0Zl9pbml0KGZpbGUsIFJfVEtUX0ZJTCkp IHsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiBDbG9zZSB0aWNrZXQgZmls ZSAqLworICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7 CisgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisKKyAgICAvKgorICAgICAqIFdlIG11c3QgZmluZCB0 aGUgcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlIGhlcmUgYmVmb3JlIGNhbGxpbmcKKyAgICAgKiB0 Zl9pbml0IGJlY2F1c2Ugc2luY2UgdGhlIHJlYWxtIG9mIHRoZSB0aWNrZXQgZmlsZSBpcyBub3QK KyAgICAgKiByZWFsbHkgc3RvcmVkIGluIHRoZSBwcmluY2lwYWwgc2VjdGlvbiBvZiB0aGUgZmls ZSwgdGhlCisgICAgICogcm91dGluZSB3ZSB1c2UgbXVzdCBpdHNlbGYgY2FsbCB0Zl9pbml0IGFu ZCB0Zl9jbG9zZS4KKyAgICAgKi8KKyAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlk Iiwia3JiX2dldF90Zl9yZWFsbSIsMCk7CisgICAgaWYgKChrX2Vycm5vID0ga3JiX2dldF90Zl9y ZWFsbShmaWxlLCBwcmVhbG0pKSAhPSBBVVRIX1NVQ0NFU1MpIHsKKyAgICAgICAgcmV0dXJuKC0x KTsKKyAgICB9CisKKyAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCisgICAgZGVidWcoRjExMCwi Y2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2luaXQiLDApOworICAgIGlmIChrX2Vycm5vID0gdGZf aW5pdChmaWxlLCBSX1RLVF9GSUwpKSB7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAg IC8qIEdldCBwcmluY2lwYWwgbmFtZSBhbmQgaW5zdGFuY2UgKi8KKyAgICBkZWJ1ZyhGMTEwLCJj a19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfZ2V0X25hbWUvdGZfZ2V0X3BpbnN0IiwwKTsKKyAgICBp ZiAoKGtfZXJybm8gPSB0Zl9nZXRfcG5hbWUocG5hbWUpKSB8fAorICAgICAgICAgKGtfZXJybm8g PSB0Zl9nZXRfcGluc3QocGluc3QpKSkgeworCisgICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxl ICovCisgICAgICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIs MCk7CisgICAgICAgICh2b2lkKSB0Zl9jbG9zZSgpOworCisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorCisgICAgLyoKKyAgICAgKiBZb3UgbWF5IHRoaW5rIHRoYXQgdGhpcyBpcyB0aGUgb2J2 aW91cyBwbGFjZSB0byBnZXQgdGhlCisgICAgICogcmVhbG0gb2YgdGhlIHRpY2tldCBmaWxlLCBi dXQgaXQgY2FuJ3QgYmUgZG9uZSBoZXJlIGFzIHRoZQorICAgICAqIHJvdXRpbmUgdG8gZG8gdGhp cyBtdXN0IG9wZW4gdGhlIHRpY2tldCBmaWxlLiAgVGhpcyBpcyB3aHkKKyAgICAgKiBpdCB3YXMg ZG9uZSBiZWZvcmUgdGZfaW5pdC4KKyAgICAgKi8KKworICAgIGRlYnVnKEYxMTAsImNrX2tyYjRf dGt0X2lzdmFsaWQiLCJ0Zl9nZXRfY3JlZCIsMCk7CisgICAgd2hpbGUgKChrX2Vycm5vID0gdGZf Z2V0X2NyZWQoJmNyZWRzKSkgPT0gQVVUSF9TVUNDRVNTKSB7CisgICAgICAgIGNoYXIgdGt0X2J1 ZlsyNTZdOworICAgICAgICBja21ha3htc2codGt0X2J1ZixzaXplb2YodGt0X2J1ZiksCisgICAg ICAgICAgICAgICAgIGNyZWRzLnNlcnZpY2UsIChjcmVkcy5pbnN0YW5jZVswXSA/ICIuIiA6ICIi KSwgY3JlZHMuaW5zdGFuY2UsCisgICAgICAgICAgICAgICAgIChjcmVkcy5yZWFsbVswXSA/ICJA IiA6ICIiKSwgY3JlZHMucmVhbG0sCisgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICBpZiAoICFzdHJjbXAodGt0bmFtZSx0a3RfYnVm KSApIHsKKworICAgICAgICAgICAgLyogd2UgZm91bmQgdGhlIHRpY2tldCB3ZSBhcmUgbG9va2lu ZyBmb3IgKi8KKyAgICAgICAgICAgIGlzc3VlX3QgPSBjcmVkcy5pc3N1ZV9kYXRlOworICAgICAg ICAgICAgZXhwaXJlX3QgPSBjcmVkcy5pc3N1ZV9kYXRlCisgICAgICAgICAgICAgICAgKyAoKHVu c2lnbmVkIGNoYXIpIGNyZWRzLmxpZmV0aW1lKSAqIDUgKiA2MDsKKyAgICAgICAgICAgIG5vd190 ID0gdGltZSgwKTsKKworICAgICAgICAgICAgLyogV2UgYWRkIGEgNSBtaW51dGVzIGZ1ZGdlIGZh Y3RvciB0byBjb21wZW5zYXRlIGZvciBwb3RlbnRpYWwgKi8KKyAgICAgICAgICAgIC8qIGNsb2Nr IHNrZXcgZXJyb3JzIGJldHdlZW4gdGhlIEtEQyBhbmQgSzk1J3MgaG9zdCBPUyAgICAgICAgICov CisKKyAgICAgICAgICAgIGlmICggbm93X3QgPj0gKGlzc3VlX3QtMzAwKSAmJiBub3dfdCA8IGV4 cGlyZV90KSB7CisjaWZkZWYgT1MyCisjaWZkZWYgQ0hFQ0tBRERSUworICAgICAgICAgICAgICAg IGlmICgga3JiNF9jaGVja2FkZHJzICkgeworICAgICAgICAgICAgICAgICAgICBleHRlcm4gY2hh ciBteWlwYWRkclsyMF07ICAgICAgIC8qIEZyb20gY2tjbmV0LmMgKi8KKyAgICAgICAgICAgICAg ICAgICAgaWYgKCAhbXlpcGFkZHJbMF0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQg aTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYnVmWzYwXTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGZvciAoIGk9MDtpPDY0O2krKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIGdldGxvY2FsaXBhZGRycyhidWYsNjAsaSkgPCAwICkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoICFzdHJjbXAoYnVmLGNyZWRzLmFkZHJlc3MpICkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDAp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDEpOyAvKiBUaGV5J3JlIHRoZSBz YW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAq LworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxp ZCIsInRmX2Nsb3NlIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSB0Zl9jbG9z ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAg IC8qIFRoZXkncmUgZGlmZmVyZW50ICovCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo IHN0cmNtcChteWlwYWRkcixjcmVkcy5hZGRyZXNzKSApIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOworICAgICAgICAgICAg ICAgICAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgLyogVGhleSdyZSBkaWZmZXJlbnQgKi8KKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENsb3NlIHRpY2tldCBmaWxlICovCisgICAgICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJja19rcmI0X3RrdF9pc3ZhbGlkIiwidGZfY2xvc2UiLDApOworICAg ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgLyogVGhleSdyZSB0aGUgc2FtZSAq LworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUgKi8KKyAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiY2tfa3JiNF90a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKKyAgICAg ICAgICAgICAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIHJl dHVybigxKTsgICAgICAgICAgICAgICAgICAvKiBUaGV5J3JlIHRoZSBzYW1lICovCisgICAgICAg ICAgICAgICAgfQorI2Vsc2UgLyogQ0hFQ0tBRERSUyAqLworICAgICAgICAgICAgICAgIC8qIENs b3NlIHRpY2tldCBmaWxlICovCisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiNF90 a3RfaXN2YWxpZCIsInRmX2Nsb3NlIiwwKTsKKyAgICAgICAgICAgICAgICAodm9pZCkgdGZfY2xv c2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oMSk7ICAgICAgLyogdmFsaWQgYnV0IG5vIGlw IGFkZHJlc3MgY2hlY2sgKi8KKyNlbmRpZiAvKiBDSEVDS0FERFJTICovCisjZWxzZSAvKiBPUzIg Ki8KKyAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7CisgICAg ICAgICAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKDEp OyAgICAgIC8qIFZhbGlkIGJ1dCBubyBpcCBhZGRyZXNzIGNoZWNrICovCisjZW5kaWYgLyogT1My ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAv KiBDbG9zZSB0aWNrZXQgZmlsZSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX2ty YjRfdGt0X2lzdmFsaWQiLCJ0Zl9jbG9zZSIsMCk7CisgICAgICAgICAgICAgICAgKHZvaWQpIHRm X2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgIC8qIGV4cGlyZWQgb3Ig b3RoZXJ3aXNlIGludmFsaWQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg ICAvKiBDbG9zZSB0aWNrZXQgZmlsZSAqLworICAgIGRlYnVnKEYxMTAsImNrX2tyYjRfdGt0X2lz dmFsaWQiLCJ0Zl9jbG9zZSIsMCk7CisgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisgICAgcmV0dXJu KDApOyAgICAgICAgICAgICAgICAgIC8qIGNvdWxkIG5vdCBmaW5kIHRoZSBkZXNpcmVkIHRpY2tl dCAqLworI2Vsc2UgLyogS1JCNCAqLworICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogS1JCNCAq LworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNF9pc190Z3RfdmFsaWQoVk9JRCkK KyNlbHNlCitja19rcmI0X2lzX3RndF92YWxpZCgpCisjZW5kaWYKK3sKKyNpZmRlZiBLUkI0Cisg ICAgY2hhciB0Z3RbMjU2XTsKKyAgICBjaGFyICogczsKKyAgICBpbnQgcmMgPSAwOworCisgICAg cyA9IGtyYjRfZF9yZWFsbSA/IGtyYjRfZF9yZWFsbSA6IGNrX2tyYjRfZ2V0cmVhbG0oKTsKKyAg ICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRndC4iLHMsIkAiLHMpOworICAgIHJjID0g Y2tfa3JiNF90a3RfaXN2YWxpZCh0Z3QpOworICAgIGRlYnVnKEYxMTEsImNrX2tyYjRfaXNfdGd0 X3ZhbGlkIix0Z3QscmMpOworICAgIHJldHVybihyYyA+IDApOworI2Vsc2UgLyogS1JCNCAqLwor ICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBLUkI0ICovCit9CisKK2ludAorI2lmZGVmIENLX0FO U0lDCitja19rcmI0X3RrdF90aW1lKGNoYXIgKiB0a3RuYW1lKQorI2Vsc2UKK2NrX2tyYjRfdGt0 X3RpbWUodGt0bmFtZSkgY2hhciAqIHRrdG5hbWU7CisjZW5kaWYKK3sKKyNpZmRlZiBLUkI0Cisg ICAgY2hhciAgICpmaWxlPU5VTEw7CisgICAgY2hhciAgICBwbmFtZVtBTkFNRV9TWl07CisgICAg Y2hhciAgICBwaW5zdFtJTlNUX1NaXTsKKyAgICBjaGFyICAgIHByZWFsbVtSRUFMTV9TWl07Cisg ICAgY2hhciAgICBidWYxWzIwXSwgYnVmMlsyMF07CisgICAgaW50ICAgICBrX2Vycm5vOworI2lm ZGVmIE9TMgorICAgIExFQVNIX0NSRURFTlRJQUxTIGNyZWRzOworI2Vsc2UgLyogT1MyICovCisg ICAgQ1JFREVOVElBTFMgY3JlZHM7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoICFja19r cmI0X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKworICAgIGZpbGUgPSB0 a3Rfc3RyaW5nKCk7CisKKyAgICAvKgorICAgICAqIFNpbmNlIGtyYl9nZXRfdGZfcmVhbG0gd2ls bCByZXR1cm4gYSB0aWNrZXRfZmlsZSBlcnJvciwKKyAgICAgKiB3ZSB3aWxsIGNhbGwgdGZfaW5p dCBhbmQgdGZfY2xvc2UgZmlyc3QgdG8gZmlsdGVyIG91dAorICAgICAqIHRoaW5ncyBsaWtlIG5v IHRpY2tldCBmaWxlLiAgT3RoZXJ3aXNlLCB0aGUgZXJyb3IgdGhhdAorICAgICAqIHRoZSB1c2Vy IHdvdWxkIHNlZSB3b3VsZCBiZQorICAgICAqIGtsaXN0OiBjYW4ndCBmaW5kIHJlYWxtIG9mIHRp Y2tldCBmaWxlOiBObyB0aWNrZXQgZmlsZSAodGZfdXRpbCkKKyAgICAgKiBpbnN0ZWFkIG9mCisg ICAgICoga2xpc3Q6IE5vIHRpY2tldCBmaWxlICh0Zl91dGlsKQorICAgICAqLworCisgICAgLyog T3BlbiB0aWNrZXQgZmlsZSAqLworICAgIGlmIChrX2Vycm5vID0gdGZfaW5pdChmaWxlLCBSX1RL VF9GSUwpKSB7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgLyogQ2xvc2UgdGlj a2V0IGZpbGUgKi8KKyAgICAodm9pZCkgdGZfY2xvc2UoKTsKKworICAgIC8qCisgICAgICogV2Ug bXVzdCBmaW5kIHRoZSByZWFsbSBvZiB0aGUgdGlja2V0IGZpbGUgaGVyZSBiZWZvcmUgY2FsbGlu ZworICAgICAqIHRmX2luaXQgYmVjYXVzZSBzaW5jZSB0aGUgcmVhbG0gb2YgdGhlIHRpY2tldCBm aWxlIGlzIG5vdAorICAgICAqIHJlYWxseSBzdG9yZWQgaW4gdGhlIHByaW5jaXBhbCBzZWN0aW9u IG9mIHRoZSBmaWxlLCB0aGUKKyAgICAgKiByb3V0aW5lIHdlIHVzZSBtdXN0IGl0c2VsZiBjYWxs IHRmX2luaXQgYW5kIHRmX2Nsb3NlLgorICAgICAqLworICAgIGlmICgoa19lcnJubyA9IGtyYl9n ZXRfdGZfcmVhbG0oZmlsZSwgcHJlYWxtKSkgIT0gQVVUSF9TVUNDRVNTKSB7CisgICAgICAgIHJl dHVybigtMSk7CisgICAgfQorCisgICAgLyogT3BlbiB0aWNrZXQgZmlsZSAqLworICAgIGlmIChr X2Vycm5vID0gdGZfaW5pdChmaWxlLCBSX1RLVF9GSUwpKSB7CisgICAgICAgIHJldHVybigtMSk7 CisgICAgfQorICAgIC8qIEdldCBwcmluY2lwYWwgbmFtZSBhbmQgaW5zdGFuY2UgKi8KKyAgICBp ZiAoKGtfZXJybm8gPSB0Zl9nZXRfcG5hbWUocG5hbWUpKSB8fAorICAgICAgICAgKGtfZXJybm8g PSB0Zl9nZXRfcGluc3QocGluc3QpKSkgeworICAgICAgICB0Zl9jbG9zZSgpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKworICAgIC8qCisgICAgICogWW91IG1heSB0aGluayB0aGF0IHRo aXMgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gZ2V0IHRoZQorICAgICAqIHJlYWxtIG9mIHRoZSB0 aWNrZXQgZmlsZSwgYnV0IGl0IGNhbid0IGJlIGRvbmUgaGVyZSBhcyB0aGUKKyAgICAgKiByb3V0 aW5lIHRvIGRvIHRoaXMgbXVzdCBvcGVuIHRoZSB0aWNrZXQgZmlsZS4gIFRoaXMgaXMgd2h5Cisg ICAgICogaXQgd2FzIGRvbmUgYmVmb3JlIHRmX2luaXQuCisgICAgICovCisKKyAgICB3aGlsZSAo KGtfZXJybm8gPSB0Zl9nZXRfY3JlZCgmY3JlZHMpKSA9PSBBVVRIX1NVQ0NFU1MpIHsKKyAgICAg ICAgY2hhciB0a3RfYnVmWzI1Nl07CisgICAgICAgIGNrbWFreG1zZyh0a3RfYnVmLHNpemVvZih0 a3RfYnVmKSwKKyAgICAgICAgICAgICAgICAgY3JlZHMuc2VydmljZSwgKGNyZWRzLmluc3RhbmNl WzBdID8gIi4iIDogIiIpLAorICAgICAgICAgICAgICAgICBjcmVkcy5pbnN0YW5jZSwKKyAgICAg ICAgICAgICAgICAgKGNyZWRzLnJlYWxtWzBdID8gIkAiIDogIiIpLCBjcmVkcy5yZWFsbSwKKyAg ICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAg ICAgIGlmICggIXN0cmNtcCh0a3RuYW1lLHRrdF9idWYpICkgeworICAgICAgICAgICAgLyogd2Ug Zm91bmQgdGhlIHRpY2tldCB3ZSBhcmUgbG9va2luZyBmb3IgKi8KKyAgICAgICAgICAgIGludCBu ID0gKGNyZWRzLmlzc3VlX2RhdGUKKyAgICAgICAgICAgICAgICAgICAgICArICgoKHVuc2lnbmVk IGNoYXIpIGNyZWRzLmxpZmV0aW1lKSAqIDUgKiA2MCkpCisgICAgICAgICAgICAgICAgLSB0aW1l KDApOworICAgICAgICAgICAgdGZfY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybihuIDw9IDAg PyAwIDogbik7CisgICAgICAgIH0KKyAgICB9CisgICAgdGZfY2xvc2UoKTsKKyAgICByZXR1cm4o MCk7ICAgICAgICAgICAgICAgICAgLyogY291bGQgbm90IGZpbmQgdGhlIGRlc2lyZWQgdGlja2V0 ICovCisjZWxzZSAvKiBLUkI0ICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBLUkI0ICov Cit9CisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCitja19rcmI0X2dldHJlYWxtKHZvaWQpCisj ZWxzZQorY2tfa3JiNF9nZXRyZWFsbSgpCisjZW5kaWYKK3sKKyNpZmRlZiBLUkI0CisgICAgY2hh ciAgICpmaWxlPU5VTEw7CisgICAgaW50ICAgICBrX2Vycm5vOworICAgIHN0YXRpYyBjaGFyIHJl YWxtWzI1Nl09IiI7CisgICAgcmVhbG1bMF09J1wwJzsKKworICAgIGlmICggIWNrX2tyYjRfaXNf aW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4ocmVhbG0pOworCisgICAgLyogVHJ5IHRvIGdl dCByZWFsbSBmcm9tIHRpY2tldCBmaWxlICovCisgICAgLyogSWYgZmFpbHVyZSBnZXQgdGhlIGxv Y2FsIHJlYWxtICAgICovCisKKyAgICAvKgorICAgICogU2luY2Uga3JiX2dldF90Zl9yZWFsbSB3 aWxsIHJldHVybiBhIHRpY2tldF9maWxlIGVycm9yLAorICAgICogd2Ugd2lsbCBjYWxsIHRmX2lu aXQgYW5kIHRmX2Nsb3NlIGZpcnN0IHRvIGZpbHRlciBvdXQKKyAgICAqIHRoaW5ncyBsaWtlIG5v IHRpY2tldCBmaWxlLgorICAgICovCisKKyAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCisgICAg ZmlsZSA9IHRrdF9zdHJpbmcoKTsKKyAgICBpZiAoZmlsZSA9PSBOVUxMIHx8ICFmaWxlWzBdKQor ICAgICAgICByZXR1cm4ocmVhbG0pOworCisgICAgaWYgKChrX2Vycm5vID0gdGZfaW5pdChmaWxl LCBSX1RLVF9GSUwpKSA9PSBLU1VDQ0VTUykgeworICAgICAgICAvKiBDbG9zZSB0aWNrZXQgZmls ZSAqLworICAgICAgICAodm9pZCkgdGZfY2xvc2UoKTsKKworICAgICAgICBrX2Vycm5vID0ga3Ji X2dldF90Zl9yZWFsbShmaWxlLCByZWFsbSk7CisgICAgfQorICAgIGlmIChrX2Vycm5vICE9IEtT VUNDRVNTKSB7CisgICAgICAgIGtfZXJybm8gPSBrcmJfZ2V0X2xyZWFsbShyZWFsbSwgMSk7Cisg ICAgfQorICAgIHJldHVybihyZWFsbSk7CisjZWxzZSAvKiBLUkI0ICovCisgICAgcmV0dXJuKCIi KTsKKyNlbmRpZiAvKiBLUkI0ICovCit9CisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCitja19r cmI0X2dldHByaW5jaXBhbCh2b2lkKQorI2Vsc2UKK2NrX2tyYjRfZ2V0cHJpbmNpcGFsKCkKKyNl bmRpZgoreworI2lmZGVmIEtSQjQKKyAgICBjaGFyICAgKmZpbGU9TlVMTDsKKyAgICBpbnQgICAg IGtfZXJybm87CisgICAgc3RhdGljIGNoYXIgcHJpbmNpcGFsWzI1Nl09IiI7CisgICAgY2hhciAg ICAgICAgaW5zdGFuY2VbMjU2XT0iIjsKKyAgICBjaGFyICAgICAgICByZWFsbVsyNTZdPSIiOwor ICAgIHByaW5jaXBhbFswXT0nXDAnOworCisgICAgaWYgKCAhY2tfa3JiNF9pc19pbnN0YWxsZWQo KSApCisgICAgICAgIHJldHVybihwcmluY2lwYWwpOworCisgICAgLyogVHJ5IHRvIGdldCByZWFs bSBmcm9tIHRpY2tldCBmaWxlICovCisgICAgLyogSWYgZmFpbHVyZSBnZXQgdGhlIGxvY2FsIHJl YWxtICAgICovCisKKyAgICAvKgorICAgICogU2luY2Uga3JiX2dldF90Zl9yZWFsbSB3aWxsIHJl dHVybiBhIHRpY2tldF9maWxlIGVycm9yLAorICAgICogd2Ugd2lsbCBjYWxsIHRmX2luaXQgYW5k IHRmX2Nsb3NlIGZpcnN0IHRvIGZpbHRlciBvdXQKKyAgICAqIHRoaW5ncyBsaWtlIG5vIHRpY2tl dCBmaWxlLgorICAgICovCisKKyAgICAvKiBPcGVuIHRpY2tldCBmaWxlICovCisgICAgZmlsZSA9 IHRrdF9zdHJpbmcoKTsKKyAgICBpZiAoZmlsZSA9PSBOVUxMIHx8ICFmaWxlWzBdKQorICAgICAg ICByZXR1cm4ocHJpbmNpcGFsKTsKKworICAgIGlmICgoa19lcnJubyA9IHRmX2luaXQoZmlsZSwg Ul9US1RfRklMKSkgPT0gS1NVQ0NFU1MpIHsKKyAgICAgICAgLyogQ2xvc2UgdGlja2V0IGZpbGUg Ki8KKyAgICAgICAgKHZvaWQpIHRmX2Nsb3NlKCk7CisKKyAgICAgICAga19lcnJubyA9IGtyYl9n ZXRfdGZfZnVsbG5hbWUoZmlsZSwgcHJpbmNpcGFsLCBpbnN0YW5jZSwgcmVhbG0pOworICAgIH0K KyAgICByZXR1cm4ocHJpbmNpcGFsKTsKKyNlbHNlIC8qIEtSQjQgKi8KKyAgICByZXR1cm4oIiIp OworI2VuZGlmIC8qIEtSQjQgKi8KK30KKworc3RhdGljIHN0cnVjdCB0a3RfbGlzdF9pdGVtICog azVfdGt0X2xpc3QgPSBOVUxMOworCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNV9nZXRf dGt0cyhjaGFyICogY2NfbmFtZSkKKyNlbHNlCitja19rcmI1X2dldF90a3RzKGNjX25hbWUpIGNo YXIgKiBjY19uYW1lOworI2VuZGlmCit7CisjaWZkZWYgS1JCNQorI2lmbmRlZiBIRUlNREFMCisg ICAga3JiNV9jb250ZXh0IGtjb250ZXh0OworICAgIGtyYjVfZXJyb3JfY29kZSByZXR2YWw7Cisg ICAga3JiNV9jY2FjaGUgY2FjaGUgPSBOVUxMOworICAgIGtyYjVfY2NfY3Vyc29yIGN1cjsKKyAg ICBrcmI1X2NyZWRzIGNyZWRzOworICAgIGtyYjVfcHJpbmNpcGFsIHByaW5jPU5VTEw7CisgICAg a3JiNV9mbGFncyBmbGFncz0wOworICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlPTA7CisgICAgaW50 IGV4aXRfc3RhdHVzID0gMDsKKworICAgIGludCAgICAgdGt0X2NvdW50PTA7CisgICAgc3RydWN0 ICB0a3RfbGlzdF9pdGVtICoqIGxpc3QgPSAmazVfdGt0X2xpc3Q7CisKKyAgICB3aGlsZSAoIGs1 X3RrdF9saXN0ICkgeworICAgICAgICBzdHJ1Y3QgdGt0X2xpc3RfaXRlbSAqIG5leHQ7CisgICAg ICAgIG5leHQgPSBrNV90a3RfbGlzdC0+bmV4dDsKKyAgICAgICAgZnJlZShrNV90a3RfbGlzdC0+ bmFtZSk7CisgICAgICAgIGZyZWUoazVfdGt0X2xpc3QpOworICAgICAgICBrNV90a3RfbGlzdCA9 IG5leHQ7CisgICAgfQorCisgICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCisgICAg ICAgIHJldHVybigtMSk7CisKKyAgICByZXR2YWwgPSBrcmI1X2luaXRfY29udGV4dCgma2NvbnRl eHQpOworICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9nZXRf dGt0cyB3aGlsZSBpbml0aWFsaXppbmcga3JiNSIsIiIscmV0dmFsKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisKKyAgICBjb2RlID0gazVfZ2V0X2NjYWNoZShrY29udGV4dCwmY2FjaGUs Y2NfbmFtZSk7CisgICAgaWYgKGNvZGUgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJja19r cmI1X2dldF90a3RzIHdoaWxlIGdldHRpbmcgY2NhY2hlIiwKKyAgICAgICAgICAgICAgIGVycm9y X21lc3NhZ2UoY29kZSksY29kZSk7CisgICAgICAgIHRrdF9jb3VudCA9IC0xOworICAgICAgICBn b3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9CisKKyAgICBmbGFncyA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB0dXJucyBvZmYgT1BFTkNMT1NFIG1vZGUgKi8KKyAgICBpZiAoKGNv ZGUgPSBrcmI1X2NjX3NldF9mbGFncyhrY29udGV4dCwgY2FjaGUsIGZsYWdzKSkpIHsKKyAgICAg ICAgaWYgKGNvZGUgPT0gRU5PRU5UKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1 X2dldF90a3RzICh0aWNrZXQgY2FjaGUpIiwKKyAgICAgICAgICAgICAgICAgICBrcmI1X2NjX2dl dF9uYW1lKGtjb250ZXh0LCBjYWNoZSksY29kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAgICAiY2tfa3JiNV9nZXRfdGt0cyB3aGls ZSBzZXR0aW5nIGNhY2hlIGZsYWdzICh0aWNrZXQgY2FjaGUpIiwKKyAgICAgICAgICAgICAgICAg IGtyYjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxjb2RlKTsKKyAgICAgICAgfQorICAg ICAgICB0a3RfY291bnQgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAg fQorICAgIGlmICgoY29kZSA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2FjaGUs ICZwcmluYykpKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUg cmV0cmlldmluZyBwcmluY2lwYWwgbmFtZSIsCisgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAg ICAgICAgdGt0X2NvdW50ID0gLTE7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAg IH0KKyAgICBpZiAoKGNvZGUgPSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgcHJpbmMsICZk ZWZuYW1lKSkpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9nZXRfdGt0cyB3aGlsZSB1 bnBhcnNpbmcgcHJpbmNpcGFsIG5hbWUiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAg ICAgIHRrdF9jb3VudCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9 CisKKyAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3N0YXJ0X3NlcV9nZXQoa2NvbnRleHQsIGNhY2hl LCAmY3VyKSkpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9nZXRfdGt0cyB3aGlsZSBz dGFydGluZyB0byByZXRyaWV2ZSB0aWNrZXRzIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOwor ICAgICAgICB0a3RfY291bnQgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Cisg ICAgfQorCisgICAgd2hpbGUgKCEoY29kZSA9IGtyYjVfY2NfbmV4dF9jcmVkKGtjb250ZXh0LCBj YWNoZSwgJmN1ciwgJmNyZWRzKSkpIHsKKyAgICAgICAgY2hhciAqc25hbWU9TlVMTDsKKworICAg ICAgICByZXR2YWwgPSBrcmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgY3JlZHMuc2VydmVyLCAm c25hbWUpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLAor ICAgICAgICAgICAgICAgICAgImNrX2tyYjVfZ2V0X3RrdHMgd2hpbGUgdW5wYXJzaW5nIHNlcnZl ciBuYW1lIiwiIixyZXR2YWwpOworICAgICAgICAgICAgdGt0X2NvdW50ID0gLTE7CisgICAgICAg ICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICAgICAgfQorCisgICAgICAgICpsaXN0ID0g KHN0cnVjdCB0a3RfbGlzdF9pdGVtICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHRrdF9saXN0X2l0 ZW0pKTsKKyAgICAgICAgKCpsaXN0KS0+bmFtZSA9IHNuYW1lOworICAgICAgICAoKmxpc3QpLT5u ZXh0ID0gTlVMTDsKKyAgICAgICAgbGlzdCA9ICYoKCpsaXN0KS0+bmV4dCk7CisKKyAgICAgICAg a3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOworICAgICAgICBrcmI1X2Zy ZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKKyAgICAgICAgdGt0X2NvdW50Kys7 CisgICAgfQorCisgICAgaWYgKGNvZGUgPT0gS1JCNV9DQ19FTkQpIHsKKyAgICAgICAgaWYgKChj b2RlID0ga3JiNV9jY19lbmRfc2VxX2dldChrY29udGV4dCwgY2FjaGUsICZjdXIpKSkgeworICAg ICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9nZXRfdGt0cyB3aGlsZSBmaW5pc2hpbmcgdGlj a2V0IHJldHJpZXZhbCIsCisgICAgICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAgICAg ICB0a3RfY291bnQgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAg ICAgICB9CisgICAgICAgIGZsYWdzID0gS1JCNV9UQ19PUEVOQ0xPU0U7ICAgICAgLyogdHVybnMg b24gT1BFTkNMT1NFIG1vZGUgKi8KKyAgICAgICAgaWYgKChjb2RlID0ga3JiNV9jY19zZXRfZmxh Z3Moa2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJj a19rcmI1X2dldF90a3RzIHdoaWxlIGNsb3NpbmcgY2NhY2hlIiwKKyAgICAgICAgICAgICAgICAg ICAiIixjb2RlKTsKKyAgICAgICAgICAgIHRrdF9jb3VudCA9IC0xOworICAgICAgICAgICAgZ290 byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1 ZyhGMTAxLCJja19rcmI1X2dldF90a3RzIHdoaWxlIHJldHJpZXZpbmcgYSB0aWNrZXQiLCIiLGNv ZGUpOworICAgICAgICB0a3RfY291bnQgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90 a3Q7CisgICAgfQorCisgIGV4aXRfazVfZ2V0X3RrdDoKKyAgICBrcmI1X2ZyZWVfcHJpbmNpcGFs KGtjb250ZXh0LHByaW5jKTsKKyAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxk ZWZuYW1lKTsKKyAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNhY2hlKTsKKyAgICBrcmI1X2Zy ZWVfY29udGV4dChrY29udGV4dCk7CisgICAgcmV0dXJuKHRrdF9jb3VudCk7CisjZWxzZSAvKiBI RUlNREFMICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisjZWxzZSAv KiBLUkI1ICovCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIEtSQjUgKi8KK30KKworY2hhciAq CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfZ2V0X25leHRfdGt0KFZPSUQpCisjZWxzZQorY2tf a3JiNV9nZXRfbmV4dF90a3QoKQorI2VuZGlmCit7CisjaWZkZWYgS1JCNQorI2lmbmRlZiBIRUlN REFMCisgICAgc3RhdGljIGNoYXIgKiBzPU5VTEw7CisgICAgc3RydWN0IHRrdF9saXN0X2l0ZW0g KiBuZXh0PU5VTEw7CisKKyAgICBpZiAoIHMgKSB7CisgICAgICAgIGZyZWUocyk7CisgICAgICAg IHMgPSBOVUxMOworICAgIH0KKworICAgIGlmICggazVfdGt0X2xpc3QgPT0gTlVMTCApCisgICAg ICAgIHJldHVybihOVUxMKTsKKworICAgIG5leHQgPSBrNV90a3RfbGlzdC0+bmV4dDsKKyAgICBz ID0gazVfdGt0X2xpc3QtPm5hbWU7CisgICAgZnJlZShrNV90a3RfbGlzdCk7CisgICAgazVfdGt0 X2xpc3QgPSBuZXh0OworICAgIHJldHVybihzKTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICBy ZXR1cm4oIk5vdCBpbXBsZW1lbnRlZCIpOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyNlbHNlIC8q IEtSQjUgKi8KKyAgICByZXR1cm4oTlVMTCk7CisjZW5kaWYgLyogS1JCNSAqLworfQorCitjaGFy ICoKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiNV90a3RfZmxhZ3MoY2hhciAqIGNjX25hbWUsIGNo YXIgKiB0a3RuYW1lKQorI2Vsc2UKK2NrX2tyYjVfdGt0X2ZsYWdzKGNjX25hbWUsdGt0bmFtZSkg Y2hhciAqIGNjX25hbWU7IGNoYXIgKiB0a3RuYW1lOworI2VuZGlmCit7CisjaWZkZWYgS1JCNQor I2lmbmRlZiBIRUlNREFMCisgICAga3JiNV9jb250ZXh0IGtjb250ZXh0OworICAgIGtyYjVfZXJy b3JfY29kZSByZXR2YWw7CisgICAga3JiNV9jY2FjaGUgY2FjaGUgPSBOVUxMOworICAgIGtyYjVf Y2NfY3Vyc29yIGN1cjsKKyAgICBrcmI1X2NyZWRzIGNyZWRzOworICAgIGtyYjVfcHJpbmNpcGFs IHByaW5jPU5VTEw7CisgICAga3JiNV9mbGFncyBmbGFncz0wOworICAgIGtyYjVfZXJyb3JfY29k ZSBjb2RlPTA7CisgICAgY2hhciAqIGZsYWdfc3RyID0gIiI7CisKKyAgICBpZiAoICFja19rcmI1 X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKCIiKTsKKworICAgIHJldHZhbCA9IGty YjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBk ZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGlsZSBpbml0aWFsaXppbmcga3JiNSIsIiIs cmV0dmFsKTsKKyAgICAgICAgcmV0dXJuKCIiKTsKKyAgICB9CisKKyAgICBjb2RlID0gazVfZ2V0 X2NjYWNoZShrY29udGV4dCwmY2FjaGUsY2NfbmFtZSk7CisgICAgaWYgKGNvZGUgIT0gMCkgewor ICAgICAgICBkZWJ1ZyhGMTExLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIGdldHRpbmcgY2Nh Y2hlIiwKKyAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UoY29kZSksY29kZSk7CisgICAgICAg IGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgIH0KKworICAgIGZsYWdzID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHR1cm5zIG9mZiBPUEVOQ0xPU0UgbW9kZSAqLworICAgIGlmICgo Y29kZSA9IGtyYjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3MpKSkgeworICAg ICAgICBpZiAoY29kZSA9PSBFTk9FTlQpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImNrX2ty YjVfdGt0X2ZsYWdzICh0aWNrZXQgY2FjaGUpIiwKKyAgICAgICAgICAgICAgICAgICBrcmI1X2Nj X2dldF9uYW1lKGtjb250ZXh0LCBjYWNoZSksY29kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTExLAorICAgICAgICAgICAgICAgICAiY2tfa3JiNV90a3RfZmxhZ3Mg d2hpbGUgc2V0dGluZyBjYWNoZSBmbGFncyAodGlja2V0IGNhY2hlKSIsCisgICAgICAgICAgICAg ICAgICBrcmI1X2NjX2dldF9uYW1lKGtjb250ZXh0LCBjYWNoZSksY29kZSk7CisgICAgICAgIH0K KyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAg IH0KKyAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2dldF9wcmluY2lwYWwoa2NvbnRleHQsIGNhY2hl LCAmcHJpbmMpKSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGls ZSByZXRyaWV2aW5nIHByaW5jaXBhbCBuYW1lIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOwor ICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAg fQorICAgIGlmICgoY29kZSA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBwcmluYywgJmRl Zm5hbWUpKSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9mbGFncyB3aGlsZSB1 bnBhcnNpbmcgcHJpbmNpcGFsIG5hbWUiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAg ICAgIHJldHZhbCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9CisK KyAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3N0YXJ0X3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAm Y3VyKSkpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfZmxhZ3Mgd2hpbGUgc3Rh cnRpbmcgdG8gcmV0cmlldmUgdGlja2V0cyIsCisgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAg ICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgIH0K KworICAgIGlmICgoY29kZSA9IGtyYjVfdGltZW9mZGF5KGtjb250ZXh0LCAmbm93KSkpIHsKKyAg ICAgICAgaWYgKCFzdGF0dXNfb25seSkKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVf dGt0X2ZsYWdzIHdoaWxlIGdldHRpbmcgdGltZSBvZiBkYXkuIiwKKyAgICAgICAgICAgICAgICAg ICAiIixjb2RlKTsKKyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgIGdvdG8gZXhpdF9rNV9n ZXRfdGt0OworICAgIH0KKworICAgIHdoaWxlICghKGNvZGUgPSBrcmI1X2NjX25leHRfY3JlZChr Y29udGV4dCwgY2FjaGUsICZjdXIsICZjcmVkcykpKSB7CisgICAgICAgIGNoYXIgKnNuYW1lPU5V TEw7CisKKyAgICAgICAgcmV0dmFsID0ga3JiNV91bnBhcnNlX25hbWUoa2NvbnRleHQsIGNyZWRz LnNlcnZlciwgJnNuYW1lKTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgZGVi dWcoRjEwMSwKKyAgICAgICAgICAgICAgICAgICJja19rcmI1X3RrdF9mbGFncyB3aGlsZSB1bnBh cnNpbmcgc2VydmVyIG5hbWUiLCIiLHJldHZhbCk7CisgICAgICAgICAgICByZXR2YWwgPSAtMTsK KyAgICAgICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOwor ICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0KKworICAgICAgICBp ZiAoICFzdHJjbXAoc25hbWUsdGt0bmFtZSkgKSB7CisgICAgICAgICAgICAvKiB3ZSBmb3VuZCB0 aGUgdGlja2V0IHdlIGFyZSBsb29raW5nIGZvciAqLworCisgICAgICAgICAgICBmbGFnX3N0ciA9 IGZsYWdzX3N0cmluZygmY3JlZHMpOworCisgICAgICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRf bmFtZShrY29udGV4dCxzbmFtZSk7CisgICAgICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50 cyhrY29udGV4dCwgJmNyZWRzKTsKKyAgICAgICAgICAgIGNvZGUgPSBLUkI1X0NDX0VORDsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9u YW1lKGtjb250ZXh0LHNuYW1lKTsKKyAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2Nv bnRleHQsICZjcmVkcyk7CisgICAgfQorCisgICAgaWYgKGNvZGUgPT0gS1JCNV9DQ19FTkQpIHsK KyAgICAgICAgaWYgKChjb2RlID0ga3JiNV9jY19lbmRfc2VxX2dldChrY29udGV4dCwgY2FjaGUs ICZjdXIpKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfZmxhZ3Mgd2hp bGUgZmluaXNoaW5nIHRpY2tldCByZXRyaWV2YWwiLAorICAgICAgICAgICAgICAgICAgICIiLGNv ZGUpOworICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0KKyAgICAg ICAgZmxhZ3MgPSBLUkI1X1RDX09QRU5DTE9TRTsgICAgICAvKiB0dXJucyBvbiBPUEVOQ0xPU0Ug bW9kZSAqLworICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX3NldF9mbGFncyhrY29udGV4dCwg Y2FjaGUsIGZsYWdzKSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2Zs YWdzIHdoaWxlIGNsb3NpbmcgY2NhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsK KyAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgICAgICB9CisgICAgfSBlbHNl IHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfZmxhZ3Mgd2hpbGUgcmV0cmlldmlu ZyBhIHRpY2tldCIsIiIsY29kZSk7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAg IH0KKworICBleGl0X2s1X2dldF90a3Q6CisgICAga3JiNV9mcmVlX3ByaW5jaXBhbChrY29udGV4 dCxwcmluYyk7CisgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsZGVmbmFtZSk7 CisgICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7CisgICAga3JiNV9mcmVlX2NvbnRl eHQoa2NvbnRleHQpOworICAgIHJldHVybihmbGFnX3N0cik7CisjZWxzZSAvKiBIRUlNREFMICov CisgICAgcmV0dXJuKCJOb3QgaW1wbGVtZW50ZWQiKTsKKyNlbmRpZiAvKiBIRUlNREFMICovCisj ZWxzZSAvKiBLUkI1ICovCisgICAgcmV0dXJuKCIiKTsKKyNlbmRpZiAvKiBLUkI1ICovCit9CisK KworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVfdGt0X2lzdmFsaWQoY2hhciAqIGNjX25h bWUsIGNoYXIgKiB0a3RuYW1lKQorI2Vsc2UKK2NrX2tyYjVfdGt0X2lzdmFsaWQoY2NfbmFtZSx0 a3RuYW1lKSBjaGFyICogY2NfbmFtZTsgY2hhciAqIHRrdG5hbWU7CisjZW5kaWYKK3sKKyNpZmRl ZiBLUkI1CisjaWZuZGVmIEhFSU1EQUwKKyAgICBrcmI1X2NvbnRleHQga2NvbnRleHQ9TlVMTDsK KyAgICBrcmI1X2Vycm9yX2NvZGUgcmV0dmFsOworICAgIGtyYjVfY2NhY2hlIGNhY2hlID0gTlVM TDsKKyAgICBrcmI1X2NjX2N1cnNvciBjdXI7CisgICAga3JiNV9jcmVkcyBjcmVkczsKKyAgICBr cmI1X3ByaW5jaXBhbCBwcmluYz1OVUxMOworICAgIGtyYjVfZmxhZ3MgZmxhZ3M9MDsKKyAgICBr cmI1X2Vycm9yX2NvZGUgY29kZT0wOworI2lmZGVmIENIRUNLQUREUlMKKyAgICBrcmI1X2FkZHJl c3MgKiogICAgIG15QWRkcnM9TlVMTDsKKyAgICBrcmI1X2FkZHJlc3MgKiogICAgIHA9TlVMTDsK KyAgICBCT09MICAgICAgICAgICAgICAgIEFkZHJmb3VuZCA9IEZBTFNFOworI2VuZGlmIC8qQ0hF Q0tBRERSUyovCisKKyAgICBpZiAoICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAg cmV0dXJuKC0xKTsKKworICAgIHJldHZhbCA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7 CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9pc3Zh bGlkIHdoaWxlIGluaXRpYWxpemluZyBrcmI1IiwiIixyZXR2YWwpOworICAgICAgICByZXR1cm4o LTEpOworICAgIH0KKworICAgIGNvZGUgPSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0LCZjYWNoZSxj Y19uYW1lKTsKKyAgICBpZiAoY29kZSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImNrX2ty YjVfdGt0X2lzdmFsaWQgd2hpbGUgZ2V0dGluZyBjY2FjaGUiLAorICAgICAgICAgICAgICAgZXJy b3JfbWVzc2FnZShjb2RlKSxjb2RlKTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7Cisg ICAgfQorCisgICAgZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHVybnMg b2ZmIE9QRU5DTE9TRSBtb2RlICovCisgICAgaWYgKChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Mo a2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7CisgICAgICAgIGlmIChjb2RlID09IEVOT0VOVCkg eworICAgICAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiNV90a3RfaXN2YWxpZCAodGlja2V0IGNh Y2hlKSIsCisgICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFtZShrY29udGV4dCwgY2Fj aGUpLGNvZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMSwKKyAg ICAgICAgICAgICAgICAiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSBzZXR0aW5nIGNhY2hlIGZs YWdzICh0aWNrZXQgY2FjaGUpIiwKKyAgICAgICAgICAgICAgICAgIGtyYjVfY2NfZ2V0X25hbWUo a2NvbnRleHQsIGNhY2hlKSxjb2RlKTsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSAtMTsK KyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorICAgIGlmICgoY29kZSA9IGty YjVfY2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2FjaGUsICZwcmluYykpKSB7CisgICAgICAg IGRlYnVnKEYxMDEsImNrX2tyYjVfdGt0X2lzdmFsaWQgd2hpbGUgcmV0cmlldmluZyBwcmluY2lw YWwgbmFtZSIsCisgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAgcmV0dmFsID0gLTE7 CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgIH0KKyAgICBpZiAoKGNvZGUgPSBr cmI1X3VucGFyc2VfbmFtZShrY29udGV4dCwgcHJpbmMsICZkZWZuYW1lKSkpIHsKKyAgICAgICAg ZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSB1bnBhcnNpbmcgcHJpbmNpcGFs IG5hbWUiLAorICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAgIHJldHZhbCA9IC0xOwor ICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9CisKKyAgICBpZiAoKGNvZGUgPSBr cmI1X2NjX3N0YXJ0X3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAmY3VyKSkpIHsKKyAgICAgICAg ZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSBzdGFydGluZyB0byByZXRyaWV2 ZSB0aWNrZXRzIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICByZXR2YWwgPSAt MTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorCisgICAgaWYgKChjb2Rl ID0ga3JiNV90aW1lb2ZkYXkoa2NvbnRleHQsICZub3cpKSkgeworICAgICAgICBpZiAoIXN0YXR1 c19vbmx5KQorICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGls ZSBnZXR0aW5nIHRpbWUgb2YgZGF5LiIsCisgICAgICAgICAgICAgICAgICAgIiIsY29kZSk7Cisg ICAgICAgIHJldHZhbCA9IC0xOworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0X3RrdDsKKyAgICB9 CisKKyAgICB3aGlsZSAoIShjb2RlID0ga3JiNV9jY19uZXh0X2NyZWQoa2NvbnRleHQsIGNhY2hl LCAmY3VyLCAmY3JlZHMpKSkgeworICAgICAgICBjaGFyICpzbmFtZT1OVUxMOworCisgICAgICAg IHJldHZhbCA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBjcmVkcy5zZXJ2ZXIsICZzbmFt ZSk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsCisgICAg ICAgICAgICAgICAgICAiY2tfa3JiNV90a3RfaXN2YWxpZCB3aGlsZSB1bnBhcnNpbmcgc2VydmVy IG5hbWUiLCIiLHJldHZhbCk7CisgICAgICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgICAg IGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOworICAgICAgICAgICAg Z290byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFzdHJjbXAo c25hbWUsdGt0bmFtZSkgKSB7CisgICAgICAgICAgICAvKiB3ZSBmb3VuZCB0aGUgdGlja2V0IHdl IGFyZSBsb29raW5nIGZvciAqLworCisgICAgICAgICAgICAvKiBXZSBhZGQgYSA1IG1pbnV0ZXMg ZnVkZ2UgZmFjdG9yIHRvIGNvbXBlbnNhdGUgZm9yIHBvdGVudGlhbCAqLworICAgICAgICAgICAg LyogY2xvY2sgc2tldyBlcnJvcnMgYmV0d2VlbiB0aGUgS0RDIGFuZCBLOTUncyBob3N0IE9TICAg ICAgICAgKi8KKworICAgICAgICAgICAgcmV0dmFsID0gKChjcmVkcy50aW1lcy5zdGFydHRpbWUg PiAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICBub3cgPj0gKGNyZWRzLnRpbWVzLnN0YXJ0 dGltZSAtIDMwMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgbm93IDwgKGNyZWRzLnRpbWVz LmVuZHRpbWUgKyAzMDApICYmCisgICAgICAgICAgICAgICAgICAgICAgICEoY3JlZHMudGlja2V0 X2ZsYWdzICYgVEtUX0ZMR19JTlZBTElEKSk7CisKKyNpZmRlZiBDSEVDS0FERFJTCisgICAgICAg ICAgICBpZiAoIHJldHZhbCAmJiBrcmI1X2NoZWNrYWRkcnMgJiYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNyZWRzLmFkZHJlc3NlcyAmJiBjcmVkcy5hZGRyZXNzZXNbMF0gKSB7 CisgICAgICAgICAgICAgICAgLyogaWYgd2UgdGhpbmsgaXQgaXMgdmFsaWQsIHRoZW4gbGV0cyBj aGVjayB0aGUgSVAgQWRkcmVzc2VzICovCisgICAgICAgICAgICAgICAgLyogdG8gbWFrZSBzdXJl IGl0IGlzIHZhbGlkIGZvciBvdXIgY3VycmVudCBjb25uZWN0aW9uLiAgICAgICovCisgICAgICAg ICAgICAgICAgLyogQWxzbyBtYWtlIHN1cmUgaXQncyBmb3IgdGhlIGNvcnJlY3QgSVAgYWRkcmVz cyAqLworICAgICAgICAgICAgICAgIHJldHZhbCA9IGtyYjVfb3NfbG9jYWxhZGRyKGtjb250ZXh0 LCAmbXlBZGRycyk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAg ICAgICAgICBjb21fZXJyKE5VTEwsIHJldHZhbCwgInJldHJpZXZpbmcgbXkgSVAgYWRkcmVzcyIp OworICAgICAgICAgICAgICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxz bmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250 ZXh0LCAmY3JlZHMpOworICAgICAgICAgICAgICAgICAgICBjb2RlID0gS1JCNV9DQ19FTkQ7Cisg ICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IC0xOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAvKiBTZWUgaWYgYW55IG9mIG91 ciBhZGRyZXNzZXMgbWF0Y2ggYW55IGluIGNhY2hlZCBjcmVkZW50aWFscyAqLworCisgICAgICAg ICAgICAgICAgZm9yIChBZGRyZm91bmQ9RkFMU0UsIHA9bXlBZGRyczsKKyAgICAgICAgICAgICAg ICAgICAgIChBZGRyZm91bmQ9PUZBTFNFKSAmJiAoKnApOworICAgICAgICAgICAgICAgICAgICAg cCsrCisgICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGty YjVfYWRkcmVzc19zZWFyY2goa2NvbnRleHQsICpwLCBjcmVkcy5hZGRyZXNzZXMpKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBBZGRyZm91bmQgPSBUUlVFOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGtyYjVfZnJlZV9hZGRyZXNz ZXMoazVfY29udGV4dCwgbXlBZGRycyk7CisKKyAgICAgICAgICAgICAgICBpZiAoQWRkcmZvdW5k KSB7CisgICAgICAgICAgICAgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1lKGtjb250ZXh0 LHNuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2Nv bnRleHQsICZjcmVkcyk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBLUkI1X0NDX0VORDsK KyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAga3JiNV9m cmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOworICAgICAgICAgICAgICAgICAgICBr cmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKKyAgICAgICAgICAgICAg ICAgICAgY29kZSA9IEtSQjVfQ0NfRU5EOworICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSAw OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisjZW5kaWYgLyogQ0hFQ0tBRERSUyAqLworCisgICAgICAgICAgICBrcmI1X2ZyZWVf dW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7CisgICAgICAgICAgICBrcmI1X2ZyZWVfY3Jl ZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsKKyAgICAgICAgICAgIGNvZGUgPSBLUkI1X0ND X0VORDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGtyYjVfZnJlZV91 bnBhcnNlZF9uYW1lKGtjb250ZXh0LHNuYW1lKTsKKyAgICAgICAga3JiNV9mcmVlX2NyZWRfY29u dGVudHMoa2NvbnRleHQsICZjcmVkcyk7CisgICAgfQorCisgICAgaWYgKGNvZGUgPT0gS1JCNV9D Q19FTkQpIHsKKyAgICAgICAgaWYgKChjb2RlID0ga3JiNV9jY19lbmRfc2VxX2dldChrY29udGV4 dCwgY2FjaGUsICZjdXIpKSkgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV90a3Rf aXN2YWxpZCB3aGlsZSBmaW5pc2hpbmcgdGlja2V0IHJldHJpZXZhbCIsCisgICAgICAgICAgICAg ICAgICAgIiIsY29kZSk7CisgICAgICAgICAgICByZXR2YWwgPSAtMTsKKyAgICAgICAgICAgIGdv dG8gZXhpdF9rNV9nZXRfdGt0OworICAgICAgICB9CisgICAgICAgIGZsYWdzID0gS1JCNV9UQ19P UEVOQ0xPU0U7ICAgICAgLyogdHVybnMgb24gT1BFTkNMT1NFIG1vZGUgKi8KKyAgICAgICAgaWYg KChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Moa2NvbnRleHQsIGNhY2hlLCBmbGFncykpKSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxlIGNsb3Npbmcg Y2NhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAiIixjb2RlKTsKKyAgICAgICAgICAgIHJldHZh bCA9IC0xOworICAgICAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgICAgIH0KKyAg ICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X3RrdF9pc3ZhbGlkIHdoaWxl IHJldHJpZXZpbmcgYSB0aWNrZXQiLCIiLGNvZGUpOworICAgICAgICByZXR2YWwgPSAtMTsKKyAg ICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorCisgIGV4aXRfazVfZ2V0X3RrdDoK KyAgICBrcmI1X2ZyZWVfcHJpbmNpcGFsKGtjb250ZXh0LHByaW5jKTsKKyAgICBrcmI1X2ZyZWVf dW5wYXJzZWRfbmFtZShrY29udGV4dCxkZWZuYW1lKTsKKyAgICBrcmI1X2NjX2Nsb3NlKGtjb250 ZXh0LGNhY2hlKTsKKyAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7CisgICAgcmV0dXJu KHJldHZhbCk7CisjZWxzZSAvKiBIRUlNREFMICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAv KiBIRUlNREFMICovCisjZWxzZSAvKiBLUkI1ICovCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAv KiBLUkI1ICovCit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitja19rcmI1X2lzX3RndF92YWxp ZChWT0lEKQorI2Vsc2UKK2NrX2tyYjVfaXNfdGd0X3ZhbGlkKCkKKyNlbmRpZgoreworI2lmZGVm IEtSQjUKKyNpZm5kZWYgSEVJTURBTAorICAgIGNoYXIgdGd0WzI1Nl07CisgICAgY2hhciAqIHM7 CisgICAgaW50IHJjID0gMDsKKworICAgIHMgPSBja19rcmI1X2dldHJlYWxtKGtyYjVfZF9jYyk7 CisgICAgY2ttYWttc2codGd0LHNpemVvZih0Z3QpLCJrcmJ0Z3QvIixzLCJAIixzKTsKKyAgICBy YyA9IGNrX2tyYjVfdGt0X2lzdmFsaWQoa3JiNV9kX2NjLHRndCk7CisgICAgZGVidWcoRjExMSwi Y2tfa3JiNV9pc190Z3RfdmFsaWQiLHRndCxyYyk7CisgICAgcmV0dXJuKHJjPjApOworI2Vsc2Ug LyogSEVJTURBTCAqLworICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogSEVJTURBTCAqLworI2Vs c2UgLyogS1JCNSAqLworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBLUkI1ICovCit9CisKK2lu dAorI2lmZGVmIENLX0FOU0lDCitja19rcmI1X3RrdF90aW1lKGNoYXIgKiBjY19uYW1lLCBjaGFy ICogdGt0bmFtZSkKKyNlbHNlCitja19rcmI1X3RrdF90aW1lKGNjX25hbWUsIHRrdG5hbWUpIGNo YXIgKiBjY19uYW1lOyBjaGFyICogdGt0bmFtZTsKKyNlbmRpZgoreworI2lmZGVmIEtSQjUKKyNp Zm5kZWYgSEVJTURBTAorICAgIGtyYjVfY29udGV4dCBrY29udGV4dDsKKyAgICBrcmI1X2Vycm9y X2NvZGUgcmV0dmFsOworICAgIGtyYjVfY2NhY2hlIGNhY2hlID0gTlVMTDsKKyAgICBrcmI1X2Nj X2N1cnNvciBjdXI7CisgICAga3JiNV9jcmVkcyBjcmVkczsKKyAgICBrcmI1X3ByaW5jaXBhbCBw cmluYz1OVUxMOworICAgIGtyYjVfZmxhZ3MgZmxhZ3M9MDsKKyAgICBrcmI1X2Vycm9yX2NvZGUg Y29kZT0wOworCisgICAgaWYgKCAhY2tfa3JiNV9pc19pbnN0YWxsZWQoKSApCisgICAgICAgIHJl dHVybigtMSk7CisKKyAgICByZXR2YWwgPSBrcmI1X2luaXRfY29udGV4dCgma2NvbnRleHQpOwor ICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0X2NyZWRz IHdoaWxlIGluaXRpYWxpemluZyBrcmI1IiwiIixyZXR2YWwpOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKworICAgIGNvZGUgPSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0LCZjYWNoZSxjY19u YW1lKTsKKyAgICBpZiAoY29kZSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYjVf dGt0X3RpbWUgd2hpbGUgZ2V0dGluZyBjY2FjaGUiLAorICAgICAgICAgICAgICAgZXJyb3JfbWVz c2FnZShjb2RlKSxjb2RlKTsKKyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgIGdvdG8gZXhp dF9rNV9nZXRfdGt0OworICAgIH0KKworICAgIGZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHR1cm5zIG9mZiBPUEVOQ0xPU0UgbW9kZSAqLworICAgIGlmICgoY29kZSA9IGty YjVfY2Nfc2V0X2ZsYWdzKGtjb250ZXh0LCBjYWNoZSwgZmxhZ3MpKSkgeworICAgICAgICBpZiAo Y29kZSA9PSBFTk9FTlQpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYjVfbGlzdF9j cmVkcyAodGlja2V0IGNhY2hlKSIsCisgICAgICAgICAgICAgICAgICAga3JiNV9jY19nZXRfbmFt ZShrY29udGV4dCwgY2FjaGUpLGNvZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ZGVidWcoRjExMSwKKyAgICAgICAgICAgICAgICAgImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBz ZXR0aW5nIGNhY2hlIGZsYWdzICh0aWNrZXQgY2FjaGUpIiwKKyAgICAgICAgICAgICAgICAgIGty YjVfY2NfZ2V0X25hbWUoa2NvbnRleHQsIGNhY2hlKSxjb2RlKTsKKyAgICAgICAgfQorICAgICAg ICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorICAg IGlmICgoY29kZSA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2FjaGUsICZwcmlu YykpKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSByZXRy aWV2aW5nIHByaW5jaXBhbCBuYW1lIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAg ICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorICAg IGlmICgoY29kZSA9IGtyYjVfdW5wYXJzZV9uYW1lKGtjb250ZXh0LCBwcmluYywgJmRlZm5hbWUp KSkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUgdW5wYXJz aW5nIHByaW5jaXBhbCBuYW1lIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAgICBy ZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorCisgICAg aWYgKChjb2RlID0ga3JiNV9jY19zdGFydF9zZXFfZ2V0KGtjb250ZXh0LCBjYWNoZSwgJmN1cikp KSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBzdGFydGlu ZyB0byByZXRyaWV2ZSB0aWNrZXRzIiwKKyAgICAgICAgICAgICAgICIiLGNvZGUpOworICAgICAg ICByZXR2YWwgPSAtMTsKKyAgICAgICAgZ290byBleGl0X2s1X2dldF90a3Q7CisgICAgfQorCisg ICAgaWYgKChjb2RlID0ga3JiNV90aW1lb2ZkYXkoa2NvbnRleHQsICZub3cpKSkgeworICAgICAg ICBpZiAoIXN0YXR1c19vbmx5KQorICAgICAgICAgICAgZGVidWcoRjEwMSwiY2tfa3JiNV9saXN0 X2NyZWRzIHdoaWxlIGdldHRpbmcgdGltZSBvZiBkYXkuIiwKKyAgICAgICAgICAgICAgICAgICAi Iixjb2RlKTsKKyAgICAgICAga3JiNV9mcmVlX2NvbnRleHQoa2NvbnRleHQpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKworICAgIHdoaWxlICghKGNvZGUgPSBrcmI1X2NjX25leHRfY3Jl ZChrY29udGV4dCwgY2FjaGUsICZjdXIsICZjcmVkcykpKSB7CisgICAgICAgIGNoYXIgKnNuYW1l PU5VTEw7CisKKyAgICAgICAgcmV0dmFsID0ga3JiNV91bnBhcnNlX25hbWUoa2NvbnRleHQsIGNy ZWRzLnNlcnZlciwgJnNuYW1lKTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAg ZGVidWcoRjEwMSwKKyAgICAgICAgICAgICAgICAgICJja19rcmI1X2xpc3RfY3JlZHMgd2hpbGUg dW5wYXJzaW5nIHNlcnZlciBuYW1lIiwiIixyZXR2YWwpOworICAgICAgICAgICAgcmV0dmFsID0g LTE7CisgICAgICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7 CisgICAgICAgICAgICBrcmI1X2ZyZWVfY3JlZF9jb250ZW50cyhrY29udGV4dCwgJmNyZWRzKTsK KyAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgICAgICB9CisKKyAgICAgICAg aWYgKCAhc3RyY21wKHNuYW1lLHRrdG5hbWUpICkgeworICAgICAgICAgICAgLyogd2UgZm91bmQg dGhlIHRpY2tldCB3ZSBhcmUgbG9va2luZyBmb3IgKi8KKyAgICAgICAgICAgIGludCB2YWxpZCA9 IChjcmVkcy50aW1lcy5zdGFydHRpbWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgbm93ID4g Y3JlZHMudGltZXMuc3RhcnR0aW1lICYmCisgICAgICAgICAgICAgICAgICAgICAgIG5vdyA8IGNy ZWRzLnRpbWVzLmVuZHRpbWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIShjcmVkcy50aWNr ZXRfZmxhZ3MgJiBUS1RfRkxHX0lOVkFMSUQpKTsKKyAgICAgICAgICAgIGlmICggdmFsaWQgKSB7 CisgICAgICAgICAgICAgICAgcmV0dmFsID0gY3JlZHMudGltZXMuZW5kdGltZSAtIG5vdzsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR2YWwgPSAw OworICAgICAgICAgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsc25hbWUpOwor ICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRfY29udGVudHMoa2NvbnRleHQsICZjcmVkcyk7Cisg ICAgICAgICAgICBjb2RlID0gS1JCNV9DQ19FTkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgICAgICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrY29udGV4dCxzbmFtZSk7Cisg ICAgICAgIGtyYjVfZnJlZV9jcmVkX2NvbnRlbnRzKGtjb250ZXh0LCAmY3JlZHMpOworICAgIH0K KworICAgIGlmIChjb2RlID09IEtSQjVfQ0NfRU5EKSB7CisgICAgICAgIGlmICgoY29kZSA9IGty YjVfY2NfZW5kX3NlcV9nZXQoa2NvbnRleHQsIGNhY2hlLCAmY3VyKSkpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsImNrX2tyYjVfbGlzdF9jcmVkcyB3aGlsZSBmaW5pc2hpbmcgdGlja2V0IHJl dHJpZXZhbCIsCisgICAgICAgICAgICAgICAgICAgIiIsY29kZSk7CisgICAgICAgICAgICByZXR2 YWwgPSAtMTsKKyAgICAgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgICAgICB9Cisg ICAgICAgIGZsYWdzID0gS1JCNV9UQ19PUEVOQ0xPU0U7ICAgICAgLyogdHVybnMgb24gT1BFTkNM T1NFIG1vZGUgKi8KKyAgICAgICAgaWYgKChjb2RlID0ga3JiNV9jY19zZXRfZmxhZ3Moa2NvbnRl eHQsIGNhY2hlLCBmbGFncykpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19rcmI1X2xp c3RfY3JlZHMgd2hpbGUgY2xvc2luZyBjY2FjaGUiLAorICAgICAgICAgICAgICAgICAgICIiLGNv ZGUpOworICAgICAgICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgICAgICBnb3RvIGV4aXRfazVf Z2V0X3RrdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMDEsImNr X2tyYjVfbGlzdF9jcmVkcyB3aGlsZSByZXRyaWV2aW5nIGEgdGlja2V0IiwiIixjb2RlKTsKKyAg ICAgICAgcmV0dmFsID0gLTE7CisgICAgICAgIGdvdG8gZXhpdF9rNV9nZXRfdGt0OworICAgIH0K KworICBleGl0X2s1X2dldF90a3Q6CisgICAga3JiNV9mcmVlX3ByaW5jaXBhbChrY29udGV4dCxw cmluYyk7CisgICAga3JiNV9mcmVlX3VucGFyc2VkX25hbWUoa2NvbnRleHQsZGVmbmFtZSk7Cisg ICAga3JiNV9jY19jbG9zZShrY29udGV4dCxjYWNoZSk7CisgICAga3JiNV9mcmVlX2NvbnRleHQo a2NvbnRleHQpOworICAgIHJldHVybihyZXR2YWwpOworI2Vsc2UgLyogSEVJTURBTCAqLworICAg IHJldHVybigtMSk7CisjZW5kaWYgLyogSEVJTURBTCAqLworI2Vsc2UgLyogS1JCNSAqLworICAg IHJldHVybigtMSk7CisjZW5kaWYgLyogS1JCNSAqLworfQorCitjaGFyICoKKyNpZmRlZiBDS19B TlNJQworY2tfa3JiNV9nZXRfY2NfbmFtZSh2b2lkKQorI2Vsc2UKK2NrX2tyYjVfZ2V0X2NjX25h bWUoKQorI2VuZGlmCit7CisjaWZkZWYgS1JCNQorI2lmbmRlZiBIRUlNREFMCisgICAgc3RhdGlj IGNoYXIgY2NfbmFtZVtDS01BWFBBVEgrMV09IiI7CisgICAga3JiNV9jb250ZXh0IGtjb250ZXh0 ID0gTlVMTDsKKyAgICBrcmI1X2NjYWNoZSBjY2FjaGUgPSBOVUxMOworICAgIGtyYjVfZXJyb3Jf Y29kZSBjb2RlOworICAgIGNoYXIgKiBwPU5VTEw7CisKKyAgICBjY19uYW1lWzBdID0gJ1wwJzsK KworICAgIGlmICggIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4oY2Nf bmFtZSk7CisKKyAgICBwID0gZ2V0ZW52KCJLUkI1Q0NOQU1FIik7CisgICAgaWYgKCAhcCApIHsK KyAgICAgICAgY29kZSA9IGtyYjVfaW5pdF9jb250ZXh0KCZrY29udGV4dCk7CisgICAgICAgIGlm IChjb2RlKSB7CisgICAgICAgICAgICBjb21fZXJyKCJja19rcmI1X2dldF9jY19uYW1lIixjb2Rl LCJ3aGlsZSBpbml0X2NvbnRleHQiKTsKKyAgICAgICAgICAgIHJldHVybihjY19uYW1lKTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoKGNvZGUgPSBrcmI1X2NjX2RlZmF1bHQoa2NvbnRleHQsICZj Y2FjaGUpKSkgeworICAgICAgICAgICAgY29tX2VycigiY2tfa3JiNV9nZXRfY2NfbmFtZSIsY29k ZSwid2hpbGUgZ2V0dGluZyBkZWZhdWx0IGNjYWNoZSIpOworICAgICAgICAgICAgZ290byBleGl0 X2s1X2dldF9jYzsKKyAgICAgICAgfQorCisgICAgICAgIGNrbWFrbXNnKGNjX25hbWUsc2l6ZW9m KGNjX25hbWUpLAorICAgICAgICAgICAgICAgICAoY2hhciAqKWtyYjVfY2NfZ2V0X3R5cGUoa2Nv bnRleHQsY2NhY2hlKSwiOiIsCisgICAgICAgICAgICAgICAgIChjaGFyICopa3JiNV9jY19nZXRf bmFtZShrY29udGV4dCxjY2FjaGUpLE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNrc3Ry bmNweShjY19uYW1lLHAsQ0tNQVhQQVRIKTsKKyAgICB9CisKKyAgICBpZiAoICFzdHJuY21wKCJG SUxFOiIsY2NfbmFtZSw1KSApIHsKKyAgICAgICAgZm9yICggcD1jY19uYW1lOyAqcCA7IHArKyAp CisgICAgICAgICAgICBpZiAoICpwID09ICdcXCcgKSAqcCA9ICcvJzsKKyAgICB9CisKKyAgZXhp dF9rNV9nZXRfY2M6CisgICAgaWYgKCBjY2FjaGUgKQorICAgICAgICBrcmI1X2NjX2Nsb3NlKGtj b250ZXh0LGNjYWNoZSk7CisgICAgaWYgKCBrY29udGV4dCApCisgICAgICAgIGtyYjVfZnJlZV9j b250ZXh0KGtjb250ZXh0KTsKKyAgICByZXR1cm4oY2NfbmFtZSk7CisjZWxzZSAvKiBIRUlNREFM ICovCisgICAgcmV0dXJuKCJOb3QgaW1wbGVtZW50ZWQiKTsKKyNlbmRpZiAvKiBIRUlNREFMICov CisjZWxzZSAvKiBLUkI1ICovCisgICAgcmV0dXJuKCIiKTsKKyNlbmRpZiAvKiBLUkI1ICovCit9 CisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lDCitja19rcmI1X2dldHJlYWxtKGNoYXIgKiBjY19u YW1lKQorI2Vsc2UKK2NrX2tyYjVfZ2V0cmVhbG0oY2NfbmFtZSkgY2hhciAqIGNjX25hbWU7Cisj ZW5kaWYKK3sKKyNpZmRlZiBLUkI1CisjaWZuZGVmIEhFSU1EQUwKKyAgICBzdGF0aWMgY2hhciBy ZWFsbVsyNTZdPSIiOworICAgIGtyYjVfY29udGV4dCBrY29udGV4dDsKKyAgICBrcmI1X2NjYWNo ZSBjY2FjaGUgPSBOVUxMOworICAgIGtyYjVfZXJyb3JfY29kZSBjb2RlOworICAgIGtyYjVfcHJp bmNpcGFsIG1lPU5VTEw7CisKKyAgICByZWFsbVswXSA9ICdcMCc7CisKKyAgICBpZiAoICFja19r cmI1X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgcmV0dXJuKHJlYWxtKTsKKworICAgIGNvZGUg PSBrcmI1X2luaXRfY29udGV4dCgma2NvbnRleHQpOworICAgIGlmIChjb2RlKSB7CisgICAgICAg IHJldHVybihyZWFsbSk7CisgICAgfQorCisgICAgY29kZSA9IGs1X2dldF9jY2FjaGUoa2NvbnRl eHQsJmNjYWNoZSxjY19uYW1lKTsKKyAgICBpZiAoY29kZSAhPSAwKSB7CisgICAgICAgIGdvdG8g ZXhpdF9rNV9nZXRyZWFsbTsKKyAgICB9CisKKwljb2RlID0ga3JiNV9jY19nZXRfcHJpbmNpcGFs KGtjb250ZXh0LCBjY2FjaGUsICZtZSk7CisJaWYgKGNvZGUpCisJCWNvZGUgPSBrcmI1X3BhcnNl X25hbWUoa2NvbnRleHQsICJmb28iLCAmbWUpOworICAgIGlmIChjb2RlKSB7CisgICAgICAgIGdv dG8gZXhpdF9rNV9nZXRyZWFsbTsKKyAgICB9CisgICAgaWYgKCBrcmI1X3ByaW5jX3JlYWxtKGtj b250ZXh0LCBtZSktPmxlbmd0aCA8IHNpemVvZihyZWFsbSkgKSB7CisgICAgICAgIG1lbWNweShy ZWFsbSxrcmI1X3ByaW5jX3JlYWxtKGtjb250ZXh0LCBtZSktPmRhdGEsCisgICAgICAgICAgICAg ICAga3JiNV9wcmluY19yZWFsbShrY29udGV4dCwgbWUpLT5sZW5ndGgpOyAgICAgICAgLyogc2Fm ZSAqLworICAgICAgIHJlYWxtW2tyYjVfcHJpbmNfcmVhbG0oa2NvbnRleHQsIG1lKS0+bGVuZ3Ro XT0nXDAnOworICAgIH0KKyAgZXhpdF9rNV9nZXRyZWFsbToKKyAgICBpZiAoIG1lICkKKyAgICAg ICAga3JiNV9mcmVlX3ByaW5jaXBhbChrY29udGV4dCxtZSk7CisgICAgaWYgKCBjY2FjaGUgKQor ICAgICAgICBrcmI1X2NjX2Nsb3NlKGtjb250ZXh0LGNjYWNoZSk7CisgICAgaWYgKGtjb250ZXh0 KQorICAgICAgICBrcmI1X2ZyZWVfY29udGV4dChrY29udGV4dCk7CisgICAgcmV0dXJuKHJlYWxt KTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICByZXR1cm4oIk5vdCBpbXBsZW1lbnRlZCIpOwor I2VuZGlmIC8qIEhFSU1EQUwgKi8KKyNlbHNlIC8qIEtSQjUgKi8KKyAgICByZXR1cm4oIiIpOwor I2VuZGlmIC8qIEtSQjUgKi8KK30KKworY2hhciAqCisjaWZkZWYgQ0tfQU5TSUMKK2NrX2tyYjVf Z2V0cHJpbmNpcGFsKGNoYXIgKiBjY19uYW1lKQorI2Vsc2UKK2NrX2tyYjVfZ2V0cHJpbmNpcGFs KGNjX25hbWUpIGNoYXIgKiBjY19uYW1lOworI2VuZGlmCit7CisjaWZkZWYgS1JCNQorI2lmbmRl ZiBIRUlNREFMCisgICAgc3RhdGljIGNoYXIgcHJpbmNpcGFsW1VJREJVRkxFTisxXT0iIjsKKyAg ICBrcmI1X2NvbnRleHQga2NvbnRleHQ7CisgICAga3JiNV9jY2FjaGUgY2NhY2hlID0gTlVMTDsK KyAgICBrcmI1X2Vycm9yX2NvZGUgY29kZTsKKyAgICBrcmI1X3ByaW5jaXBhbCBtZTsKKyAgICBj aGFyICogcD1OVUxMOworICAgIGludCBpOworCisgICAgcHJpbmNpcGFsWzBdID0gJ1wwJzsKKwor ICAgIGlmICggIWNrX2tyYjVfaXNfaW5zdGFsbGVkKCkgKQorICAgICAgICByZXR1cm4ocHJpbmNp cGFsKTsKKworICAgIGNvZGUgPSBrcmI1X2luaXRfY29udGV4dCgma2NvbnRleHQpOworICAgIGlm IChjb2RlKSB7CisgICAgICAgIHJldHVybihwcmluY2lwYWwpOworICAgIH0KKworICAgIGNvZGUg PSBrNV9nZXRfY2NhY2hlKGtjb250ZXh0LCZjY2FjaGUsY2NfbmFtZSk7CisgICAgaWYgKGNvZGUg IT0gMCkgeworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0cHJpbmNpcGFsOworICAgIH0KKworICAg IGlmICgoY29kZSA9IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrY29udGV4dCwgY2NhY2hlLCAmbWUp KSkgeworICAgICAgICBnb3RvIGV4aXRfazVfZ2V0cHJpbmNpcGFsOworICAgIH0KKworICAgIGlm ICgoY29kZSA9IGtyYjVfdW5wYXJzZV9uYW1lIChrY29udGV4dCwgbWUsICZwKSkpIHsKKyAgICAg ICAga3JiNV9mcmVlX3ByaW5jaXBhbChrY29udGV4dCxtZSk7CisgICAgICAgIGdvdG8gZXhpdF9r NV9nZXRwcmluY2lwYWw7CisgICAgfQorCisgICAgY2tzdHJuY3B5KHByaW5jaXBhbCxwLFVJREJV RkxFTik7CisgICAgaSA9IGNraW5kZXgoIkAiLHByaW5jaXBhbCwwLDAsMCk7CisgICAgaWYgKGkp CisgICAgICBwcmluY2lwYWxbaS0xXSA9ICdcMCc7CisKKyAgICBrcmI1X2ZyZWVfdW5wYXJzZWRf bmFtZShrY29udGV4dCxwKTsKKworICBleGl0X2s1X2dldHByaW5jaXBhbDoKKyAgICBpZiAoIGNj YWNoZSApCisgICAgICAgIGtyYjVfY2NfY2xvc2Uoa2NvbnRleHQsY2NhY2hlKTsKKyAgICBpZiAo a2NvbnRleHQpCisgICAgICAgIGtyYjVfZnJlZV9jb250ZXh0KGtjb250ZXh0KTsKKyAgICByZXR1 cm4ocHJpbmNpcGFsKTsKKyNlbHNlIC8qIEhFSU1EQUwgKi8KKyAgICByZXR1cm4oIk5vdCBpbXBs ZW1lbnRlZCIpOworI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyNlbHNlIC8qIEtSQjUgKi8KKyAgICBy ZXR1cm4oIiIpOworI2VuZGlmIC8qIEtSQjUgKi8KK30KKworI2lmbmRlZiBDUllQVF9ETEwKK2lu dAorY2tfZ2V0X2NyeXB0X3RhYmxlKHN0cnVjdCBrZXl0YWIgKiogcFRhYmxlLCBpbnQgKiBwTikK K3sKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgcmV0dXJuKGdldF9jcnlwdF90YWJsZShwVGFi bGUsIHBOKSk7CisjZWxzZSAvKiBFTkNSWVBUSU9OICovCisgICAgaW50IGk9MDsKKyNpZm5kZWYg T1MyCisgICAgY2hhciAqIHRtcHN0cmluZyA9IE5VTEw7CisjZW5kaWYgLyogT1MyICovCisKKyAg ICBpZiAoICpwVGFibGUgKQorICAgIHsKKyAgICAgICAgZm9yICggaT0wIDsgaSA8ICpwTiA7IGkr KyApCisgICAgICAgICAgICBmcmVlKCAoKnBUYWJsZSlbaV0ua3dkICkgOworICAgICAgICBmcmVl ICggKnBUYWJsZSApICA7CisgICAgfQorICAgICpwVGFibGUgPSBOVUxMOworICAgICpwTiA9IDA7 CisKKyAgICAqcFRhYmxlID0gbWFsbG9jKCBzaXplb2Yoc3RydWN0IGtleXRhYikgKiAyICkgOwor ICAgIGlmICggISgqcFRhYmxlKSApCisgICAgICAgIHJldHVybigwKTsKKworI2lmZGVmIE9TMgor ICAgICgqcFRhYmxlKVswXS5rd2QgPXN0cmR1cCgiYXV0b21hdGljIik7CisjZWxzZSAvKiBPUzIg Ki8KKyAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsImF1dG9tYXRpYyIpOworICAgICgqcFRhYmxlKVsw XS5rd2QgPSB0bXBzdHJpbmc7CisgICAgdG1wc3RyaW5nID0gTlVMTDsKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAoKnBUYWJsZSlbMF0ua3d2YWwgPSBFTkNUWVBFX0FOWTsKKyAgICAoKnBUYWJsZSlb MF0uZmxncyA9IDA7CisjaWZkZWYgT1MyCisgICAgKCpwVGFibGUpWzFdLmt3ZCA9c3RyZHVwKCJu b25lIik7CisjZWxzZSAvKiBPUzIgKi8KKyAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsIm5vbmUiKTsK KyAgICAoKnBUYWJsZSlbMV0ua3dkID0gdG1wc3RyaW5nOworICAgIHRtcHN0cmluZyA9IE5VTEw7 CisjZW5kaWYgLyogT1MyICovCisgICAgKCpwVGFibGUpWzFdLmt3dmFsID0gOTk5OworICAgICgq cFRhYmxlKVsxXS5mbGdzID0gMDsKKyAgICAoKnBOKSA9IDI7CisKKyAgICByZXR1cm4oMik7Cisj ZW5kaWYgLyogRU5DUllQVElPTiAqLworfQorCitWT0lECitja19lbmNyeXB0X3NlbmRfc3VwcG9y dCgpCit7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGVuY3J5cHRfc2VuZF9zdXBwb3J0KCk7 CisjZW5kaWYgLyogRU5DUllQVElPTiAqLworfQorI2VuZGlmIC8qIENSWVBUX0RMTCAqLworCisv KgorICoKKyAqIEtzdHJlYW0KKyAqCisgKiBFbXVsYXRlcyB0aGUga3N0cmVhbSBwYWNrYWdlIGlu IEtlcmJlcm9zIDQKKyAqCisgKi8KKworaW50Citrc3RyZWFtX2Rlc3Ryb3koKQoreworICAgIGlm IChnX2tzdHJlYW0gIT0gTlVMTCkgeworICAgICAgICBhdXRoX2Rlc3Ryb3koKTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIERlc3Ryb3kgYXV0aG9yaXppbmcgKi8KKyAgICAgICAgZnJlZShnX2tz dHJlYW0pOworICAgICAgICBnX2tzdHJlYW09TlVMTDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9 CisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQwora3N0cmVhbV9zZXRfYnVmZmVyX21vZGUoaW50IG1v ZGUpCisjZWxzZQora3N0cmVhbV9zZXRfYnVmZmVyX21vZGUobW9kZSkgaW50IG1vZGU7CisjZW5k aWYKK3sKK30KKworCitpbnQKKyNpZmRlZiBDS19BTlNJQwora3N0cmVhbV9jcmVhdGVfZnJvbV9m ZChpbnQgZmQsCisgICAgICAgICAgICAgICAgICAgICAgIGtzdHJlYW1fcHRyIGRhdGEpCisjZWxz ZQora3N0cmVhbV9jcmVhdGVfZnJvbV9mZChmZCxkYXRhKQorICAgIGludCBmZDsga3N0cmVhbV9w dHIgZGF0YTsKKyNlbmRpZgoreworICAgIGludCBuOworCisgICAgZ19rc3RyZWFtID0gbWFsbG9j KHNpemVvZihzdHJ1Y3Qga3N0cmVhbV9pbnQpKTsKKyAgICBpZiAoZ19rc3RyZWFtID09IE5VTEwp CisgICAgICAgIHJldHVybiAwOworCisgICAgZ19rc3RyZWFtLT5mZCA9IGZkOworCisgICAgbiA9 IGF1dGhfaW5pdChnX2tzdHJlYW0pOyAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGF1 dGhvcml6aW5nICovCisgICAgaWYgKG4pIHsKKyAgICAgICAgZnJlZShnX2tzdHJlYW0pOworICAg ICAgICBnX2tzdHJlYW0gPSBOVUxMOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBn X2tzdHJlYW0tPmVuY3J5cHQgPSBOVUxMOworICAgIGdfa3N0cmVhbS0+ZGVjcnlwdCA9IE5VTEw7 CisgICAgZ19rc3RyZWFtLT5lbmNyeXB0X3R5cGUgPSBFTkNUWVBFX0FOWTsKKyAgICBnX2tzdHJl YW0tPmRlY3J5cHRfdHlwZSA9IEVOQ1RZUEVfQU5ZOworICAgIHJldHVybiAxOworfQorCisjaWZk ZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBSTE9HQ09ERQorc3RhdGljIGludCBkb19sZW5jaGVjaywg dXNlX2l2ZWNzOworZXh0ZXJuIGludCBybG9nX2luYmFuZDsKKworI2lmZGVmIEtSQjUKK3ZvaWQK K3JjbWRfc3RyZWFtX2luaXRfa3JiNShpbl9rZXlibG9jaywgZW5jcnlwdF9mbGFnLCBsZW5jaGVj aywgYW1fY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9udW0pCisgICAg IGtyYjVfa2V5YmxvY2sgKmluX2tleWJsb2NrOworICAgICBpbnQgZW5jcnlwdF9mbGFnOworICAg ICBpbnQgbGVuY2hlY2s7CisgICAgIGludCBhbV9jbGllbnQ7CisgICAgIGVudW0ga3JiNV9rY21k X3Byb3RvIHByb3RvbnVtOworeworICAgIGtyYjVfZXJyb3JfY29kZSBzdGF0dXM7CisgICAgc2l6 ZV90IGJsb2Nrc2l6ZTsKKworICAgIGlmICghZW5jcnlwdF9mbGFnKQorICAgICAgICByZXR1cm47 CisKKyAgICBkZXNpbmJ1Zi5kYXRhID0gZGVzX2luYnVmOworICAgIGRlc291dGJ1Zi5kYXRhID0g ZGVzX291dHBrdCs0OyAgICAgIC8qIFNldCB1cCBkZXMgYnVmZmVycyAqLworICAgIGs1X3Nlc3Np b25fa2V5ID0gaW5fa2V5YmxvY2s7CisKKyAgICBkb19sZW5jaGVjayA9IGxlbmNoZWNrOworCisg ICAgaWYgKCBwcm90b251bSA9PSBLQ01EX09MRF9QUk9UT0NPTCApIHsKKyAgICAgICAgdXNlX2l2 ZWNzID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVzZV9pdmVjcyA9IDE7CisK KyAgICBpZiAoc3RhdHVzID0ga3JiNV9jX2Jsb2NrX3NpemUoazVfY29udGV4dCwgazVfc2Vzc2lv bl9rZXktPmVuY3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZibG9j a3NpemUpKSB7CisgICAgICAgIC8qIFhYWCB3aGF0IGRvIEkgZG8/ICovCisgICAgICAgIHByaW50 ZigiZmF0YWwga2VyYmVyb3MgNSBjcnlwdG8gbGlicmFyeSBlcnJvclxuIik7CisgICAgICAgIHR0 Y2xvcygwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVuY2l2ZWNfaVswXS5sZW5n dGggPSBlbmNpdmVjX2lbMV0ubGVuZ3RoID0gCisgICAgZW5jaXZlY19vWzBdLmxlbmd0aCA9IGVu Y2l2ZWNfb1sxXS5sZW5ndGggPSBibG9ja3NpemU7CisKKyAgICBpZiAoKGVuY2l2ZWNfaVswXS5k YXRhID0gbWFsbG9jKGVuY2l2ZWNfaVswXS5sZW5ndGggKiA0KSkgPT0gTlVMTCkgeworICAgICAg ICAvKiBYWFggd2hhdCBkbyBJIGRvPyAqLworICAgICAgICBwcmludGYoImZhdGFsIG1hbGxvYyBm YWlsZWRcbiIpOworICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK KyAgICBlbmNpdmVjX2lbMV0uZGF0YSA9IGVuY2l2ZWNfaVswXS5kYXRhICsgZW5jaXZlY19pWzBd Lmxlbmd0aDsKKyAgICBlbmNpdmVjX29bMF0uZGF0YSA9IGVuY2l2ZWNfaVsxXS5kYXRhICsgZW5j aXZlY19pWzFdLmxlbmd0aDsKKyAgICBlbmNpdmVjX29bMV0uZGF0YSA9IGVuY2l2ZWNfb1swXS5k YXRhICsgZW5jaXZlY19vWzBdLmxlbmd0aDsKKworICAgIC8qIGlzIHRoZXJlIGEgYmV0dGVyIHdh eSB0byBpbml0aWFsaXplIHRoaXM/ICovCisgICAgbWVtc2V0KGVuY2l2ZWNfaVswXS5kYXRhLCBh bV9jbGllbnQsIGJsb2Nrc2l6ZSk7CisgICAgbWVtc2V0KGVuY2l2ZWNfb1swXS5kYXRhLCAxIC0g YW1fY2xpZW50LCBibG9ja3NpemUpOworICAgIG1lbXNldChlbmNpdmVjX2lbMV0uZGF0YSwgMiB8 IGFtX2NsaWVudCwgYmxvY2tzaXplKTsKKyAgICBtZW1zZXQoZW5jaXZlY19vWzFdLmRhdGEsIDIg fCAoMSAtIGFtX2NsaWVudCksIGJsb2Nrc2l6ZSk7Cit9CisjZW5kaWYgLyogS1JCNSAqLworCitp bnQKKyNpZmRlZiBDS19BTlNJQworY2tfa3JiX3Jsb2dpbihDSEFSICogaG9zdG5hbWUsIGludCBw b3J0LAorICAgICAgICAgICAgICAgQ0hBUiAqIGxvY2FsdXNlciwgQ0hBUiAqIHJlbW90ZXVzZXIs IENIQVIgKiB0ZXJtX3NwZWVkLAorICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICog bF9hZGRyLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiByX2FkZHIsCisgICAgICAgICAgICAgICBpbnQg a3ZlcnNpb24sIGludCBlbmNyeXB0X2ZsYWcpCisjZWxzZSAvKiBDS19BTlNJQyAqLworY2tfa3Ji X3Jsb2dpbihob3N0bmFtZSwgcG9ydCwKKyAgICAgICAgICAgICAgIGxvY2FsdXNlciwgcmVtb3Rl dXNlciwgdGVybV9zcGVlZCwgbF9hZGRyLCByX2FkZHIsIGVuY3J5cHRfZmxhZykKKyAgICBDSEFS ICogaG9zdG5hbWU7IGludCBwb3J0OworICAgIENIQVIgKiBsb2NhbHVzZXI7IENIQVIgKiByZW1v dGV1c2VyOyBDSEFSICogdGVybV9zcGVlZDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBsX2Fk ZHI7IHN0cnVjdCBzb2NrYWRkcl9pbiAqIHJfYWRkcjsKKyAgICBpbnQga3ZlcnNpb247IGludCBl bmNyeXB0X2ZsYWc7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICB1bnNpZ25lZCBsb25n IHN0YXR1czsKKyAgICBjaGFyICogcmVhbG09TlVMTDsKKyAgICBleHRlcm4gaW50IHR0eWZkOwor ICAgIGludCBjOworICAgIGxvbmcgbXNnbGVuOworCisgICAgZGVidWcoRjExMSwiY2tfa3JiX3Js b2dpbiIsaG9zdG5hbWUscG9ydCk7CisKKyAgICBpZiAoIGt2ZXJzaW9uID09IDQgJiYgIWNrX2ty YjRfaXNfaW5zdGFsbGVkKCkgKSB7CisgICAgICAgIHByaW50ZigiP0tlcmJlcm9zIDQgaXMgbm90 IGluc3RhbGxlZFxyXG4iKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgaWYgKCBr dmVyc2lvbiA9PSA1ICYmICFja19rcmI1X2lzX2luc3RhbGxlZCgpICkgeworICAgICAgICBwcmlu dGYoIj9LZXJiZXJvcyA1IGlzIG5vdCBpbnN0YWxsZWRcclxuIik7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorCisgICAgaWYgKCBlbmNyeXB0X2ZsYWcgJiYgIWNrX2NyeXB0X2lzX2luc3Rh bGxlZCgpICkgeworICAgICAgICBwcmludGYoIj9FbmNyeXB0aW9uIGlzIG5vdCBpbnN0YWxsZWRc clxuIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKCBrdmVyc2lvbiA9 PSA1ICkgeworI2lmZGVmIEtSQjUKKyAgICAgICAga3JiNV9mbGFncyBhdXRob3B0cz0wOworICAg ICAgICBrcmI1X2NjYWNoZSBjY2FjaGU9TlVMTDsKKyAgICAgICAgY2hhciAqY2tzdW1idWY9TlVM TDsKKyAgICAgICAgY2hhciAqc2VydmljZT1OVUxMOworICAgICAgICBjaGFyICoga2NtZF92ZXJz aW9uPU5VTEw7CisgICAgICAgIGVudW0ga3JiNV9rY21kX3Byb3RvIHVzZV9wcm90bzsKKyAgICAg ICAga3JiNV9kYXRhIGNrc3VtZGF0OworICAgICAgICBrcmI1X2NyZWRzICpnZXRfY3JlZCA9IDA7 CisgICAgICAgIGtyYjVfZXJyb3JfY29kZSBzdGF0dXM7CisgICAgICAgIGtyYjVfZXJyb3IgICAg ICAqZXJyb3IgPSAwOworICAgICAgICBrcmI1X2FwX3JlcF9lbmNfcGFydCAqcmVwX3JldCA9IE5V TEw7CisgICAgICAgIGtyYjVfZGF0YSBvdXRidWY7CisgICAgICAgIGludCByYzsKKyAgICAgICAg a3JiNV9pbnQzMiBzZXFubz0wOworICAgICAgICBrcmI1X2ludDMyIHNlcnZlcl9zZXFubz0wOwor ICAgICAgICBjaGFyICoqIHJlYWxtbGlzdD1OVUxMOworICAgICAgICBpbnQgYnVmbGVuOworICAg ICAgICBjaGFyIHRndFsyNTZdOworCisgICAgICAgIGRlYnVnKEYxMDAsImNrX2tyYl9ybG9naW4g dmVyc2lvbiA1IiwiIiwwKTsKKworICAgICAgICByZWFsbSA9IGNrX2tyYjVfcmVhbG1vZmhvc3Qo KGNoYXIgKilob3N0bmFtZSk7CisgICAgICAgIGlmICghcmVhbG0pIHsKKyAgICAgICAgICAgIGNr c3RybmNweShzdHJUbXAsICJDYW4ndCBmaW5kIHJlYWxtIGZvciBob3N0IFwiIixBVVRIVE1QQkwp OworICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgKGNoYXIgKilob3N0bmFtZSxBVVRIVE1Q QkwpOworICAgICAgICAgICAgY2tzdHJuY2F0KHN0clRtcCwgIlwiIixBVVRIVE1QQkwpOworICAg ICAgICAgICAgcHJpbnRmKCI/S2VyYmVyb3MgNSBlcnJvcjogJXNcclxuIixzdHJUbXApOworICAg ICAgICAgICAga3JiNV9lcnJubyA9IEtSQjVfRVJSX0hPU1RfUkVBTE1fVU5LTk9XTjsKKyAgICAg ICAgICAgIG1ha2VzdHIoJmtyYjVfZXJybXNnLHN0clRtcCk7CisgICAgICAgICAgICByZXR1cm4o MCk7CisgICAgICAgIH0KKworICAgICAgICBja21ha21zZyh0Z3Qsc2l6ZW9mKHRndCksImtyYnRn dC8iLHJlYWxtLCJAIixyZWFsbSk7CisgICAgICAgIGRlYnVnKEYxMTAsImNrX3Jsb2dfcmxvZ2lu IFRHVCIsdGd0LDApOworICAgICAgICBpZiAoIGtyYjVfYXV0b2dldCAmJgorICAgICAgICAgICAg ICEoKGNrX2tyYjVfdGt0X2lzdmFsaWQoTlVMTCx0Z3QpID4gMCkgfHwKKyAgICAgICAgICAgICAg ICAoY2tfa3JiNV9pc190Z3RfdmFsaWQoKSA+IDApKSApCisgICAgICAgICAgICBja19rcmI1X2F1 dG9nZXRfVEdUKHJlYWxtKTsKKworICAgICAgICBidWZsZW4gPSBzdHJsZW4oKGNoYXIgKil0ZXJt X3NwZWVkKSArIHN0cmxlbigoY2hhciAqKXJlbW90ZXVzZXIpICsgNjQ7CisgICAgICAgIGlmICgo Y2tzdW1idWYgPSBtYWxsb2MoYnVmbGVuKSkgPT0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCJV bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjaGVja3N1bSBidWZmZXIuXHJcbiIpOworICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBja21ha21zZyhja3N1bWJ1 ZixidWZsZW4sY2t1aXRvYSgodW5zaWduZWQgc2hvcnQpIG50b2hzKHBvcnQpKSwiOiIsCisJCSAo Y2hhciAqKXRlcm1fc3BlZWQsKGNoYXIgKilyZW1vdGV1c2VyKTsKKyAgICAgICAgY2tzdW1kYXQu ZGF0YSA9IGNrc3VtYnVmOworICAgICAgICBja3N1bWRhdC5sZW5ndGggPSBzdHJsZW4oY2tzdW1i dWYpOworCisgICAgICAgIHN0YXR1cyA9IGtyYjVfaW5pdF9jb250ZXh0KCZrNV9jb250ZXh0KTsK KyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiX3Js b2dpbigpIiwidW5hYmxlIHRvIGluaXRfY29udGV4dCIsMCk7CisgICAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICB9CisKKyAgICAgICAgZGVzaW5idWYuZGF0YSA9IGRlc19pbmJ1ZjsKKyAg ICAgICAgZGVzb3V0YnVmLmRhdGEgPSBkZXNfb3V0cGt0KzQ7ICAvKiBTZXQgdXAgZGVzIGJ1ZmZl cnMgKi8KKworICAgICAgICByYyA9IGs1X2dldF9jY2FjaGUoazVfY29udGV4dCwmY2NhY2hlLE5V TEwpOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgY29tX2VycihOVUxMLCBy YywgIndoaWxlIGdldHRpbmcgY2NhY2hlLiIpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAg ICAgICB9CisKKyAgICAgICAgc2VydmljZSA9IGtyYjVfZF9zcnYgPyBrcmI1X2Rfc3J2IDogS1JC NV9TRVJWSUNFX05BTUU7CisKKyAgICAgICAgaWYgKCEoZ2V0X2NyZWQgPSAoa3JiNV9jcmVkcyAq KWNhbGxvYygxLCBzaXplb2Yoa3JiNV9jcmVkcykpKSkgeworICAgICAgICAgICAgcHJpbnRmKCJj a19rcmJfcmxvZ2luOiBubyBtZW1vcnlcclxuIik7CisgICAgICAgICAgICByZXR1cm4oLTEpOwor ICAgICAgICB9CisgICAgICAgIG1lbXNldChnZXRfY3JlZCwwLHNpemVvZihrcmI1X2NyZWRzKSk7 CisgICAgICAgIHN0YXR1cyA9IGtyYjVfc25hbWVfdG9fcHJpbmNpcGFsKGs1X2NvbnRleHQsIChj aGFyICopIGhvc3RuYW1lLAorCQkJCQkgc2VydmljZSwgS1JCNV9OVF9TUlZfSFNULAorCQkJCQkg JmdldF9jcmVkLT5zZXJ2ZXIpOworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBw cmludGYoImNrX2tyYl9ybG9naW46IGtyYjVfc25hbWVfdG9fcHJpbmNpcGFsIGZhaWxlZDogJXNc clxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2Uoc3RhdHVzKSk7CisgICAg ICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9CisKKyAgICAgICAgdHRvYygwKTsKKworICAg ICAgICBpZiAoc3RhdHVzID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGs1X2NvbnRleHQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NhY2hlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZXRfY3JlZC0+Y2xpZW50KQorICAg ICAgICAgICAgKSB7CisgICAgICAgICAgICAodm9pZCkga3JiNV9jY19jbG9zZShrNV9jb250ZXh0 LCBjY2FjaGUpOworICAgICAgICAgICAga3JiNV9mcmVlX2NyZWRzKGs1X2NvbnRleHQsIGdldF9j cmVkKTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGty YjVfcmxvZ192ZXIgPT0gS0NNRF9PTERfUFJPVE9DT0wpCisgICAgICAgICAgICBnZXRfY3JlZC0+ a2V5YmxvY2suZW5jdHlwZT1FTkNUWVBFX0RFU19DQkNfQ1JDOworCisgICAgICAgIC8qIEdldCB0 aWNrZXQgZnJvbSBjcmVkZW50aWFscyBjYWNoZSBvciBrZGMgKi8KKyAgICAgICAgc3RhdHVzID0g a3JiNV9nZXRfY3JlZGVudGlhbHMoazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfY3JlZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldF9jcmVkCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGtyYjVfZnJlZV9jcmVk cyhrNV9jb250ZXh0LCBnZXRfY3JlZCk7CisgICAgICAgIGdldF9jcmVkID0gTlVMTDsKKyAgICAg ICAgKHZvaWQpIGtyYjVfY2NfY2xvc2UoazVfY29udGV4dCwgY2NhY2hlKTsKKworICAgICAgICBp ZiAoc3RhdHVzKSAKKyAgICAgICAgICAgIGdvdG8gYmFkOworCisgICAgICAgIC8qIFJlc2V0IGlu dGVybmFsIGZsYWdzOyB0aGVzZSBzaG91bGQgbm90IGJlIHNldC4gKi8KKyAgICAgICAgYXV0aG9w dHMgJj0gKH5PUFRTX0ZPUldBUkRfQ1JFRFMpOworICAgICAgICBhdXRob3B0cyAmPSAofk9QVFNf Rk9SV0FSREFCTEVfQ1JFRFMpOworCisgICAgICAgIGlmIChrcmI1X2F1dGhfY29uX2luaXQoazVf Y29udGV4dCwgJmF1dGhfY29udGV4dCkpCisgICAgICAgICAgICBnb3RvIGJhZDsKKworICAgICAg ICBpZiAoa3JiNV9hdXRoX2Nvbl9zZXRmbGFncyhrNV9jb250ZXh0LCBhdXRoX2NvbnRleHQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FVVEhfQ09OVEVYVF9SRVRf VElNRSkpCisgICAgICAgICAgICBnb3RvIGJhZDsKKworICAgICAgICAvKiBPbmx5IG5lZWQgbG9j YWwgYWRkcmVzcyBmb3IgbWtfY3JlZCgpIHRvIHNlbmQgdG8ga3Jsb2dpbmQgKi8KKyAgICAgICAg aWYgKCFrcmI1X2Rfbm9fYWRkcmVzc2VzKQorICAgICAgICAgICAgaWYgKHN0YXR1cyA9IGtyYjVf YXV0aF9jb25fZ2VuYWRkcnMoazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dHlmZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVfTE9DQUxfRlVMTF9BRERSCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAg ICAgICAgICAgICBnb3RvIGJhZDsKKworICAgICAgICAvKiBIZXJlIGlzIHdoZXJlIHdlIHN0YXJ0 IHRvIGhhbmRsZSB0aGUgbmV3IHByb3RvY29sIGluIGVhcm5lc3QgKi8KKyAgICAgICAgaWYgKCBr cmI1X3Jsb2dfdmVyID09IEtDTURfUFJPVE9DT0xfQ09NUEFUX0hBQ0sgKSB7CisgICAgICAgICAg ICBrcmI1X2Jvb2xlYW4gaXNfZGVzOworCisgICAgICAgICAgICBpZiAoc3RhdHVzID0ga3JiNV9j X2VuY3R5cGVfY29tcGFyZSggazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFTkNUWVBFX0RFU19DQkNfQ1JDLAorI2lmZGVmIEhFSU1E QUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRf Y3JlZC0+c2Vzc2lvbi5rZXl0eXBlLAorI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9jcmVkLT5rZXlibG9jay5l bmN0eXBlLAorI2VuZGlmIC8qIEhFSU1EQUwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmaXNfZGVzKSkgeworICAgICAgICAgICAgICAgIGtyYjVf ZnJlZV9jcmVkcyhrNV9jb250ZXh0LCByZXRfY3JlZCk7CisgICAgICAgICAgICAgICAgcmV0X2Ny ZWQgPSBOVUxMOworICAgICAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgICBpZiAoIGlzX2RlcyApIHsKKyAgICAgICAgICAgICAgICBrY21kX3ZlcnNpb24g PSAiS0NNRFYwLjEiOworICAgICAgICAgICAgICAgIHVzZV9wcm90byA9IEtDTURfT0xEX1BST1RP Q09MOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRob3B0cyA9IEFQ X09QVFNfVVNFX1NVQktFWTsKKyAgICAgICAgICAgICAgICBrY21kX3ZlcnNpb24gPSAiS0NNRFYw LjIiOworICAgICAgICAgICAgICAgIHVzZV9wcm90byA9IEtDTURfTkVXX1BST1RPQ09MOworICAg ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdXNlX3Byb3RvID0ga3Ji NV9ybG9nX3ZlcjsKKyAgICAgICAgICAgIHN3aXRjaCAoIGtyYjVfcmxvZ192ZXIgKSB7CisgICAg ICAgICAgICBjYXNlIEtDTURfTkVXX1BST1RPQ09MOgorICAgICAgICAgICAgICAgIGF1dGhvcHRz ID0gQVBfT1BUU19VU0VfU1VCS0VZOworICAgICAgICAgICAgICAgIGtjbWRfdmVyc2lvbiA9ICJL Q01EVjAuMiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEtDTURf T0xEX1BST1RPQ09MOgorICAgICAgICAgICAgICAgIGtjbWRfdmVyc2lvbiA9ICJLQ01EVjAuMSI7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgIGdvdG8gYmFkOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyog Y2FsbCBLZXJiZXJvcyBsaWJyYXJ5IHJvdXRpbmUgdG8gb2J0YWluIGFuIGF1dGhlbnRpY2F0b3Is CisgICAgICAgICAgIHBhc3MgaXQgb3ZlciB0aGUgc29ja2V0IHRvIHRoZSBzZXJ2ZXIsIGFuZCBv YnRhaW4gbXV0dWFsCisgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAgKi8KKyAg ICAgICAgc3RhdHVzID0ga3JiNV9zZW5kYXV0aChrNV9jb250ZXh0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZhdXRoX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGtyYjVfcG9pbnRlcikgJnR0eWZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtjbWRfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRfY3Jl ZC0+Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldF9jcmVkLT5zZXJ2 ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcHRzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZja3N1bWRhdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXRfY3JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmcmVwX3JldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAga3JiNV9mcmVlX2Rh dGFfY29udGVudHMoazVfY29udGV4dCwmY2tzdW1kYXQpOworCisgICAgICAgIGlmIChzdGF0dXMp IHsKKyAgICAgICAgICAgIGlmICggIXF1aWV0ICkKKyAgICAgICAgICAgICAgICBwcmludGYoIkNv dWxkbid0IGF1dGhlbnRpY2F0ZSB0byBzZXJ2ZXI6ICVzXHJcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICBlcnJvcl9tZXNzYWdlKHN0YXR1cykpOworICAgICAgICAgICAgaWYgKGVycm9yKSB7 CisgICAgICAgICAgICAgICAgaWYgKCAhcXVpZXQgKSB7CisgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiU2VydmVyIHJldHVybmVkIGVycm9yIGNvZGUgJWQgKCVzKVxyXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgZXJyb3ItPmVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJy b3JfbWVzc2FnZShFUlJPUl9UQUJMRV9CQVNFX2tyYjUgKyBlcnJvci0+ZXJyb3IpKTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKGVycm9yLT50ZXh0Lmxlbmd0aCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJFcnJvciB0ZXh0IHNlbnQgZnJvbSBzZXJ2ZXI6ICVzXHJcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT50ZXh0LmRhdGEpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGtyYjVf ZnJlZV9lcnJvcihrNV9jb250ZXh0LCBlcnJvcik7CisgICAgICAgICAgICAgICAgZXJyb3IgPSAw OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKworICAg ICAgICBpZiAocmVwX3JldCkgeworICAgICAgICAgICAgc2VydmVyX3NlcW5vID0gcmVwX3JldC0+ c2VxX251bWJlcjsKKyAgICAgICAgICAgIGtyYjVfZnJlZV9hcF9yZXBfZW5jX3BhcnQoazVfY29u dGV4dCwgcmVwX3JldCk7CisgICAgICAgIH0KKworICAgICAgICAodm9pZCkgdHRvbChyZW1vdGV1 c2VyLCBzdHJsZW4oKGNoYXIgKilyZW1vdGV1c2VyKSsxKTsKKyAgICAgICAgKHZvaWQpIHR0b2wo dGVybV9zcGVlZCwgc3RybGVuKChjaGFyICopdGVybV9zcGVlZCkrMSk7CisgICAgICAgICh2b2lk KSB0dG9sKGxvY2FsdXNlciwgc3RybGVuKChjaGFyICopbG9jYWx1c2VyKSsxKTsKKworICAgICAg ICBpZiAoZm9yd2FyZF9mbGFnKSB7ICAgLyogRm9yd2FyZCBjcmVkZW50aWFscyAoZ2xvYmFsKSAq LworICAgICAgICAgICAgaWYgKHN0YXR1cyA9IGtyYjVfZndkX3RndF9jcmVkcyggazVfY29udGV4 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfY29u dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFy ICopaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXRfY3JlZC0+Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0X2NyZWQtPnNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZm9yd2FyZGFibGVfZmxhZyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9QVFNfRk9SV0FSREFCTEVfQ1JFRFMgOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRidWYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgZm9yd2FyZGluZyBjcmVkZW50aWFs czogJXNcclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlKHN0YXR1 cykpOworICAgICAgICAgICAgICAgIGdvdG8gYmFkMjsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgLyogU2VuZCBmb3J3YXJkZWQgY3JlZGVudGlhbHMgKi8KKyAgICAgICAgICAgIHN0YXR1 cyA9IGtyYjVfd3JpdGVfbWVzc2FnZShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoa3JiNV9wb2ludGVyKSZ0dHlmZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dGJ1ZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvKiBEdW1t eSB3cml0ZSB0byBzaWduYWwgbm8gZm9yd2FyZGluZyAqLworICAgICAgICAgIGJhZDI6CisgICAg ICAgICAgICBvdXRidWYubGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHN0YXR1cyA9IGtyYjVfd3Jp dGVfbWVzc2FnZShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoa3JiNV9wb2ludGVyKSZ0dHlmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJm91dGJ1Zik7CisgICAgICAgIH0gICAgICAgCisKKyAgICAgICAgaWYg KChjID0gdHRpbmMoMCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKGM9PS0xKSB7CisgICAgICAg ICAgICAgICAgcGVycm9yKChjaGFyICopaG9zdG5hbWUpOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBwcmludGYoImNrX2tyYl9ybG9naW46IGJhZCBjb25uZWN0aW9uIHdp dGggcmVtb3RlIGhvc3RcclxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0dXMg PSAtMTsKKyAgICAgICAgICAgIGdvdG8gYmFkOworICAgICAgICB9CisgICAgICAgIGlmIChjICE9 IDApIHsKKyAgICAgICAgICAgIHdoaWxlICgoYyA9IHR0aW5jKDEpKSA+PSAwKSB7CisgICAgICAg ICAgICAgICAgKHZvaWQpIHByaW50ZigiJWMiLGMpOworICAgICAgICAgICAgICAgIGlmIChjID09 ICdcbicpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgc3RhdHVzID0gLTE7CisgICAgICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgfQorCisg ICAgICAgIGlmICggc3RhdHVzID09IDAgKSB7ICAgICAgICAvKiBzdWNjZXNzICovCisgICAgICAg ICAgICBrcmI1X2tleWJsb2NrICoga2V5ID0gMDsKKworICAgICAgICAgICAgaWYgKCB1c2VfcHJv dG8gPT0gS0NNRF9ORVdfUFJPVE9DT0wgKSB7CisgICAgICAgICAgICAgICAgaW50IG9uID0gMTsK KyAgICAgICAgICAgICAgICBybG9nX2luYmFuZCA9IDE7CisgICAgICAgICAgICAgICAgc2V0c29j a29wdCh0dHlmZCwgU09MX1NPQ0tFVCwgU09fT09CSU5MSU5FLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNoYXIgKikgJm9uLCBzaXplb2Ygb24pOworCisgICAgICAgICAgICAgICAgc3Rh dHVzID0ga3JiNV9hdXRoX2Nvbl9nZXRsb2NhbHN1YmtleSggazVfY29udGV4dCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2NvbnRl eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmtleSk7CisgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgfHwgIWtleSkgJiYgZW5jcnlw dF9mbGFnICkKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWQyOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKCBrZXkgPT0gMCApIHsKKyNpZmRlZiBIRUlNREFMCisgICAgICAgICAg ICAgICAga2V5ID0gJnJldF9jcmVkLT5zZXNzaW9uOworI2Vsc2UgLyogSEVJTURBTCAqLworICAg ICAgICAgICAgICAgIGtleSA9ICZyZXRfY3JlZC0+a2V5YmxvY2s7CisjZW5kaWYgLyogSEVJTURB TCAqLworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByY21kX3N0cmVhbV9pbml0X2tyYjUo a2V5LCBlbmNyeXB0X2ZsYWcsIDEsIDEsIHVzZV9wcm90byk7CisgICAgICAgICAgICBpZiAoIGVu Y3J5cHRfZmxhZyApCisgICAgICAgICAgICAgICAgcmxvZ19lbmNyeXB0ID0gMTsKKyAgICAgICAg fQorICAgICAgICByZXR1cm4gKDApOyAgICAgLyogc3VjY2VzcyAqLworCisgICAgICBiYWQ6Cisg ICAgICAgIGlmICggc3RhdHVzICYmICFxdWlldCApIHsKKyAgICAgICAgICAgIHByaW50ZigiS2Vy YmVyb3MgYXV0aGVudGljYXRpb24gZXJyb3I6ICVzXHJcbiIsCisgICAgICAgICAgICAgICAgICAg IGVycm9yX21lc3NhZ2Uoc3RhdHVzKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldF9jcmVk KSB7CisgICAgICAgICAgICBrcmI1X2ZyZWVfY3JlZHMoazVfY29udGV4dCwgcmV0X2NyZWQpOwor ICAgICAgICAgICAgcmV0X2NyZWQgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVybiAo c3RhdHVzKTsKKyNlbHNlIC8qIEtSQjUgKi8KKyAgICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAv KiBLUkI1ICovCisgICAgfSBlbHNlIGlmIChrdmVyc2lvbiA9PSA0KSB7CisjaWZkZWYgS1JCNAor ICAgICAgICBjaGFyIHRndFs0KlJFQUxNX1NaKzFdOworICAgICAgICBkZWJ1ZyhGMTAwLCJja19r cmJfcmxvZ2luIHZlcnNpb24gNCIsIiIsMCk7CisKKyAgICAgICAgcmVhbG0gPSAoY2hhciAqKWty Yl9yZWFsbW9maG9zdChob3N0bmFtZSk7CisgICAgICAgIGlmICghcmVhbG0pIHsKKyAgICAgICAg ICAgIHN0cmNweShzdHJUbXAsICJDYW4ndCBmaW5kIHJlYWxtIGZvciBob3N0IFwiIik7CisgICAg ICAgICAgICBja3N0cm5jYXQoc3RyVG1wLCBob3N0bmFtZSxBVVRIVE1QQkwpOworICAgICAgICAg ICAgY2tzdHJuY2F0KHN0clRtcCwgIlwiIixBVVRIVE1QQkwpOworICAgICAgICAgICAgcHJpbnRm KCI/S2VyYmVyb3MgNCBlcnJvcjogJXNcclxuIixzdHJUbXApOworICAgICAgICAgICAga3JiNF9l cnJubyA9IDA7CisgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2Vycm1zZyxzdHJUbXApOworICAg ICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisKKyAgICAgICAgY2ttYWttc2codGd0LHNp emVvZih0Z3QpLCJrcmJ0Z3QuIixyZWFsbSwiQCIscmVhbG0pOworICAgICAgICBzdGF0dXMgPSBj a19rcmI0X3RrdF9pc3ZhbGlkKHRndCk7CisKKyAgICAgICAgaWYgKCBzdGF0dXMgPD0gMCAmJiBr cmI0X2F1dG9nZXQgKQorICAgICAgICAgICAgY2tfa3JiNF9hdXRvZ2V0X1RHVChyZWFsbSk7CisK KyAgICAgICAgdHRvYygwKTsgICAgICAgIC8qIHdyaXRlIGEgTlVMICovCisKKyAgICAgICAgc3Rh dHVzID0ga3JiX3NlbmRhdXRoKGVuY3J5cHRfZmxhZz9LT1BUX0RPX01VVFVBTDowLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0eWZkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZrNF9hdXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjRfZF9z cnYgPyBrcmI0X2Rfc3J2IDogS1JCNF9TRVJWSUNFX05BTUUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVh bG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGdldHBp ZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrNF9tc2dfZGF0YSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmY3JlZCwKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJms0X3NjaGVkLAorI2Vsc2UgLyogRU5DUllQ VElPTiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisjZW5kaWYgLyog RU5DUllQVElPTiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxfYWRkciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX2FkZHIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIktDTURWMC4xIik7CisgICAgICAgIGRlYnVnKEYxMTEsImNrX2tyYl9ybG9n aW4iLCJrcmJfc2VuZGF1dGgiLHN0YXR1cyk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gS1NVQ0NF U1MpIHsKKyAgICAgICAgICAgIHByaW50ZiggImtyYl9zZW5kYXV0aCBmYWlsZWQ6ICVzXHJcbiIs CisgICAgICAgICAgICAgICAgICAgIGtyYl9nZXRfZXJyX3RleHRfZW50cnkoc3RhdHVzKQorICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQor ICAgICAgICB0dG9sKHJlbW90ZXVzZXIsc3RybGVuKHJlbW90ZXVzZXIpKzEpOworICAgICAgICB0 dG9sKHRlcm1fc3BlZWQsc3RybGVuKHRlcm1fc3BlZWQpKzEpOworCisgICAgICByZXJlYWQ6Cisg ICAgICAgIGlmICgoYyA9IHR0aW5jKDApKSA8IDApIHsKKyAgICAgICAgICAgIHByaW50ZigicmNt ZDogYmFkIGNvbm5lY3Rpb24gd2l0aCByZW1vdGUgaG9zdFxyXG4iKTsKKyAgICAgICAgICAgIHJl dHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMSwiY2tfa3JiX3Jsb2dpbiIs ImZpcnN0IGJ5dGUiLGMpOworCisgICAgICAgIGlmIChjICE9IDApIHsKKyAgICAgICAgICAgIGNo YXIgKmNoZWNrID0gImxkLnNvOiB3YXJuaW5nOiI7CisgICAgICAgICAgICAvKiBJZiBybG9naW5k IHdhcyBjb21waWxlZCBvbiBTdW5PUzQsIGFuZCBpdCBzb21laG93CisgICAgICAgICAgICBnb3Qg dGhlIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24gbnVtYmVycyB3cm9uZywgaXQKKyAgICAgICAgICAg IG1heSBnaXZlIGFuIGxkLnNvIHdhcm5pbmcgYWJvdXQgYW4gb2xkIHZlcnNpb24gb2YgYQorICAg ICAgICAgICAgc2hhcmVkIGxpYnJhcnkuICBKdXN0IGlnbm9yZSBhbnkgc3VjaCB3YXJuaW5nLgor ICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSB3YXJuaW5nIGlzIGEgY2hhcmFjdGVyaXN0aWMgb2Yg dGhlCisgICAgICAgICAgICBzZXJ2ZXI7IHdlIG1heSBub3Qgb3Vyc2VsdmVzIGJlIHJ1bm5pbmcg dW5kZXIKKyAgICAgICAgICAgIFN1bk9TNC4gICovCisgICAgICAgICAgICBpZiAoYyA9PSAnbCcp IHsKKyAgICAgICAgICAgICAgICBjaGFyICpwOworICAgICAgICAgICAgICAgIGNoYXIgY2M7CisK KyAgICAgICAgICAgICAgICBwID0gJmNoZWNrWzFdOworICAgICAgICAgICAgICAgIHdoaWxlICgo YyA9IHR0aW5jKDApKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnXDAn KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gKnApCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICArK3A7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKnAgPT0g J1wwJykKKyAgICAgICAgICAgICAgICAgICAgZ290byByZXJlYWQ7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIHByaW50ZihjaGVjayk7CisgICAgICAgICAgICB3aGlsZSAoKGMgPSB0dGlu YygxKSkgPj0gMCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiJWMiLGMpOworICAgICAgICAg ICAgICAgIGlmIChjID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfa3JiX3Jsb2dpbiIsImZhdGFsIGVy cm9yIDEiLDApOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorCisjaWZkZWYg Q0tfRU5DUllQVElPTgorICAgICAgICBpZiAoIGVuY3J5cHRfZmxhZyApIHsKKyAgICAgICAgICAg IC8qIGlmIHdlIGFyZSBlbmNyeXB0aW5nIHdlIG5lZWQgdG8gc2V0dXAgdGhlIGVuY3J5cHRpb24g Ki8KKyAgICAgICAgICAgIC8qIHJvdXRpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGRlc19rZXlfc2NoZWQoY3JlZC5zZXNzaW9u LCBrNF9zY2hlZCk7CisgICAgICAgICAgICBybG9nX2VuY3J5cHQgPSAxOworICAgICAgICB9Cisj ZW5kaWYgLyogRU5DUllQVElPTiAqLworI2Vsc2UgLyogS1JCNCAqLworICAgICAgICByZXR1cm4o LTEpOworI2VuZGlmIC8qIEtSQjQgKi8KKyAgICB9CisgICAgcmV0dXJuKDApOyAvKiBzdWNjZXNz ICovCit9CisKKyNkZWZpbmUgU1JBTkQgICBzcmFuZAorI2RlZmluZSBSQU5EICAgIHJhbmQKKyNk ZWZpbmUgUkFORF9UWVBFICAgICAgIGludAorCitzdGF0aWMgbG9uZworcmFuZG9tX2NvbmZvdW5k ZXIoc2l6ZSwgZmlsbGluKQorc2l6ZV90IHNpemU7CitjaGFyICogZmlsbGluOworeworICAgIHN0 YXRpYyBpbnQgc2VlZGVkID0gMDsKKyAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpyZWFsX2Zp bGw7CisgICAgUkFORF9UWVBFICAgcnZhbDsKKworICAgIGlmICghc2VlZGVkKSB7CisgICAgICAg IC8qIHRpbWUoKSBkZWZpbmVkIGluIDQuMTIuMi40LCBidXQgcmV0dXJucyBhIHRpbWVfdCwgd2hp Y2ggaXMgYW4KKyAgICAgICAgICAgImFyaXRobWV0aWMgdHlwZSIgKDQuMTIuMSkgKi8KKyAgICAg ICAgcnZhbCA9IChSQU5EX1RZUEUpIHRpbWUoMCk7CisgICAgICAgIFNSQU5EKHJ2YWwpOworICAg ICAgICBydmFsID0gUkFORCgpOworICAgICAgICBydmFsIF49IGdldHBpZCgpOworICAgICAgICBT UkFORChydmFsKTsKKyAgICAgICAgc2VlZGVkID0gMTsKKyAgICB9CisKKyAgICByZWFsX2ZpbGwg PSAodW5zaWduZWQgY2hhciAqKWZpbGxpbjsKKyAgICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICAg ICAgcnZhbCA9IFJBTkQoKTsKKyAgICAgICAgKnJlYWxfZmlsbCA9IHJ2YWwgJiAweGZmOworICAg ICAgICByZWFsX2ZpbGwrKzsKKyAgICAgICAgc2l6ZS0tOworICAgICAgICBpZiAoc2l6ZSkgewor ICAgICAgICAgICAgKnJlYWxfZmlsbCA9IChydmFsID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAg IHJlYWxfZmlsbCsrOworICAgICAgICAgICAgc2l6ZS0tOworICAgICAgICB9CisgICAgfQorICAg IHJldHVybiAwOworfQorCisjaWZkZWYgS1JCNQoraW50CitrcmI1X2Rlc19hdmFpbChmZCkKKyAg ICBpbnQgZmQ7Cit7CisgICAgcmV0dXJuKG5zdG9yZWQpOworfQorCitpbnQKK2tyYjVfZGVzX3Jl YWQoZmQsIGJ1ZiwgbGVuLCBzZWNvbmRhcnkpCisgICAgaW50IGZkOworICAgIHJlZ2lzdGVyIGNo YXIgKmJ1ZjsKKyAgICBpbnQgbGVuOworICAgIGludCBzZWNvbmRhcnk7Cit7CisgICAgaW50IG5y ZXR1cm5lZCA9IDA7CisgICAgbG9uZyBuZXRfbGVuLHJkX2xlbjsKKyAgICBpbnQgY2M7CisgICAg a3JiNV9lcnJvcl9jb2RlIHN0YXR1czsKKyAgICB1bnNpZ25lZCBjaGFyIGM7CisgICAga3JiNV9k YXRhIHBsYWluOworICAgIGtyYjVfZW5jX2RhdGEgY2lwaGVyOworCisgICAgZGVidWcoRjExMSwi a3JiNV9kZXNfcmVhZCIsImxlbiIsbGVuKTsKKyAgICBkZWJ1ZyhGMTExLCJrcmI1X2Rlc19yZWFk IiwicmxvZ19lbmNyeXB0IixybG9nX2VuY3J5cHQpOworICAgIGlmICggIXJsb2dfZW5jcnlwdCAp IHsKKyAgICAgICAgY2MgPSBuZXRfcmVhZChmZCwgYnVmLCBsZW4pOworICAgICAgICBkZWJ1ZyhG MTExLCJrcmI1X2Rlc19yZWFkIiwiY2hhcnMgcmVhZCIsY2MpOworICAgICAgICBpZiAoIGNjIDwg MCApCisgICAgICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgIHJldHVybihjYyk7CisgICAgfQor CisgICAgaWYgKG5zdG9yZWQgPj0gbGVuKSB7CisgICAgICAgIGlmICggYnVmICkgeworICAgICAg ICAgICAgbWVtY3B5KGJ1Ziwgc3RvcmVfcHRyLCBsZW4pOyAgICAgICAgLyogc2FmZSAqLworICAg ICAgICAgICAgc3RvcmVfcHRyICs9IGxlbjsKKyAgICAgICAgICAgIG5zdG9yZWQgLT0gbGVuOwor ICAgICAgICAgICAgcmV0dXJuKGxlbik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0 dXJuKDApOworICAgIH0gZWxzZSBpZiAobnN0b3JlZCkgeworICAgICAgICBpZiAoIGJ1ZiApIHsK KyAgICAgICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbnN0b3JlZCk7ICAgIC8qIHNhZmUg Ki8KKyAgICAgICAgICAgIG5yZXR1cm5lZCArPSBuc3RvcmVkOworICAgICAgICAgICAgYnVmICs9 IG5zdG9yZWQ7CisgICAgICAgICAgICBsZW4gLT0gbnN0b3JlZDsKKyAgICAgICAgICAgIG5zdG9y ZWQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybigwKTsK KyAgICB9CisKKyAgICAvKiBTZWUgdGhlIGNvbW1lbnQgaW4gdjRfZGVzX3JlYWQuICovCisgICAg d2hpbGUgKDEpIHsKKyAgICAgICAgY2MgPSBuZXRfcmVhZChmZCwgJmMsIDEpOworICAgICAgICAv KiB3ZSBzaG91bGQgY2hlY2sgZm9yIG5vbi1ibG9ja2luZyBoZXJlLCBidXQgd2UnZCBoYXZlCisg ICAgICAgIHRvIG1ha2UgaXQgc2F2ZSBwYXJ0aWFsIHJlYWRzIGFzIHdlbGwuICovCisgICAgICAg IGlmIChjYyA8PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gY2M7IC8qIHJlYWQgZXJyb3IgKi8K KyAgICAgICAgfQorICAgICAgICBpZiAoY2MgPT0gMSkgeworICAgICAgICAgICAgaWYgKGMgPT0g MCB8fCAhZG9fbGVuY2hlY2spIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgfQorCisgICAgcmRfbGVuID0gYzsKKyAgICBpZiAoKGNjID0gbmV0X3JlYWQoZmQsICZjLCAx KSkgIT0gMSkgcmV0dXJuIDA7CisgICAgcmRfbGVuID0gKHJkX2xlbiA8PCA4KSB8IGM7CisgICAg aWYgKChjYyA9IG5ldF9yZWFkKGZkLCAmYywgMSkpICE9IDEpIHJldHVybiAwOworICAgIHJkX2xl biA9IChyZF9sZW4gPDwgOCkgfCBjOworICAgIGlmICgoY2MgPSBuZXRfcmVhZChmZCwgJmMsIDEp KSAhPSAxKSByZXR1cm4gMDsKKyAgICByZF9sZW4gPSAocmRfbGVuIDw8IDgpIHwgYzsKKworICAg IGlmIChzdGF0dXMgPSBrcmI1X2NfZW5jcnlwdF9sZW5ndGgoazVfY29udGV4dCwgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNV9zZXNzaW9uX2tleS0+ZW5jdHlwZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9pdmVjcyA/IHJkX2xlbiArIDQg OiByZF9sZW4sCisJCQkJICAgIChzaXplX3QgKikmbmV0X2xlbikpIHsKKyAgICAgICAgZXJybm8g PSBzdGF0dXM7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKChuZXRfbGVu IDw9IDApIHx8IChuZXRfbGVuID4gc2l6ZW9mKGRlc19pbmJ1ZikpKSB7CisgICAgICAgIC8qIHBy ZXBvc3Rlcm91cyBsZW5ndGg7IGFzc3VtZSBvdXQtb2Ytc3luYzsgb25seQorICAgICAgICAgICBy ZWNvdXJzZSBpcyB0byBjbG9zZSBjb25uZWN0aW9uLCBzbyByZXR1cm4gMCAqLworICAgICAgICBw cmludGYoIlJlYWQgc2l6ZSBwcm9ibGVtLlxyXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworICAg IH0KKyAgICBpZiAoKGNjID0gbmV0X3JlYWQoZmQsIGRlc2luYnVmLmRhdGEsIG5ldF9sZW4pKSAh PSBuZXRfbGVuICkKKyAgICB7CisgICAgICAgIC8qIHBpcGUgbXVzdCBoYXZlIGNsb3NlZCwgcmV0 dXJuIDAgKi8KKyAgICAgICAgcHJpbnRmKCAiUmVhZCBlcnJvcjogbGVuZ3RoIHJlY2VpdmVkICVk ICE9IGV4cGVjdGVkICVkLlxyXG4iLAorICAgICAgICAgICAgICAgIGNjLAorICAgICAgICAgICAg ICAgIG5ldF9sZW4KKyAgICAgICAgICAgICAgICApOworICAgICAgICByZXR1cm4oY2MpOworICAg IH0KKworCisgICAgLyogZGVjcnlwdCBpbmZvICovCisgICAgY2lwaGVyLmVuY3R5cGUgPSBFTkNU WVBFX1VOS05PV047CisgICAgY2lwaGVyLmNpcGhlcnRleHQubGVuZ3RoID0gbmV0X2xlbjsKKyAg ICBjaXBoZXIuY2lwaGVydGV4dC5kYXRhID0gZGVzaW5idWYuZGF0YTsKKyAgICBwbGFpbi5sZW5n dGggPSBzaXplb2Yoc3RvcmFnZSk7CisgICAgcGxhaW4uZGF0YSA9IHN0b3JhZ2U7CisKKyAgICBp ZiAoIHN0YXR1cyA9IGtyYjVfY19kZWNyeXB0KGs1X2NvbnRleHQsIGs1X3Nlc3Npb25fa2V5LCBL Q01EX0tFWVVTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2l2ZWNz ID8gZW5jaXZlY19pICsgc2Vjb25kYXJ5IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmY2lwaGVyLCZwbGFpbikgKSB7CisgICAgICAgIC8qIHByb2JhYmx5IG91dCBvZiBz eW5jICovCisgICAgICAgIHByaW50ZigiQ2Fubm90IGRlY3J5cHQgZGF0YSBmcm9tIG5ldHdvcms6 ICVzXHJcbiIsCisgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2Uoc3RhdHVzKSk7CisgICAg ICAgIGVycm5vID0gRUlPOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAKKyAgICBz dG9yZV9wdHIgPSBzdG9yYWdlOworICAgIG5zdG9yZWQgPSByZF9sZW47CisKKyAgICBpZiAoIHVz ZV9pdmVjcyApIHsKKyAgICAgICAgaW50IHJkX2xlbjI7CisgICAgICAgIHJkX2xlbjIgPSBzdG9y YWdlWzBdICYgMHhmZjsKKyAgICAgICAgcmRfbGVuMiA8PD0gODsgcmRfbGVuMiB8PSBzdG9yYWdl WzFdICYgMHhmZjsKKyAgICAgICAgcmRfbGVuMiA8PD0gODsgcmRfbGVuMiB8PSBzdG9yYWdlWzJd ICYgMHhmZjsKKyAgICAgICAgcmRfbGVuMiA8PD0gODsgcmRfbGVuMiB8PSBzdG9yYWdlWzNdICYg MHhmZjsKKyAgICAgICAgaWYgKHJkX2xlbjIgIT0gcmRfbGVuKSB7CisgICAgICAgICAgICAvKiBj bGVhcnRleHQgbGVuZ3RoIHRyYXNoZWQ/ICovCisgICAgICAgICAgICBlcnJubyA9IEVJTzsKKyAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZV9wdHIgKz0gNDsK KyAgICB9CisKKyAgICBpZiAoICFidWYgKQorICAgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBS TE9HQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibGFoICovCisgICAgaWYgKHJsb2df aW5iYW5kICYmICh0dG5wcm90byA9PSBOUF9LNUxPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxP R0lOKSkKKyAgICB7CisgICAgICAgIGludCBpLCBsZWZ0LCBuOworCisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBuc3RvcmVkOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChzdG9yZV9wdHJbaV0gPT0g J1wzNzcnICYmCisgICAgICAgICAgICAgICAgc3RvcmVfcHRyW2krMV0gPT0gJ1wzNzcnKSB7Cisg ICAgICAgICAgICAgICAgbGVmdCA9IG5zdG9yZWQgLSBpOworICAgICAgICAgICAgICAgIG4gPSBy bG9nX2N0cmwoJnN0b3JlX3B0cltpXSwgbGVmdCk7CisgICAgICAgICAgICAgICAgaWYgKG4gPCAw KSB7CisgICAgICAgICAgICAgICAgICAgIGxlZnQgLT0gKC1uKTsKKyAgICAgICAgICAgICAgICAg ICAgbnN0b3JlZCA9IGxlZnQ7CisgICAgICAgICAgICAgICAgICAgIC8qIGZsdXNoIGJlZm9yZSwg YW5kICgtbikgYnl0ZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQgPiAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgbWVtbW92ZShzdG9yZV9wdHIsICZzdG9yZV9wdHJbaS1uXSwg bGVmdCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuKSB7CisgICAgICAgICAgICAgICAg ICAgIGxlZnQgLT0gbjsKKyAgICAgICAgICAgICAgICAgICAgbnN0b3JlZCAtPSBuOworICAgICAg ICAgICAgICAgICAgICBpZiAobGVmdCA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1t b3ZlKHN0b3JlX3B0ciwgJnN0b3JlX3B0cltuXSwgbGVmdCk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisK KyAgICBpZiAobnN0b3JlZCA+IGxlbikgeworICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9wdHIs IGxlbik7ICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICBucmV0dXJuZWQgKz0gbGVuOwor ICAgICAgICBzdG9yZV9wdHIgKz0gbGVuOworICAgICAgICBuc3RvcmVkIC09IGxlbjsKKyAgICB9 IGVsc2UgeworICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9wdHIsIG5zdG9yZWQpOyAgICAgICAg Lyogc2FmZSAqLworICAgICAgICBucmV0dXJuZWQgKz0gbnN0b3JlZDsKKyAgICAgICAgbnN0b3Jl ZCA9IDA7CisgICAgfQorICAgIHJldHVybihucmV0dXJuZWQpOworfQorCitpbnQKK2tyYjVfZGVz X3dyaXRlKGZkLCBidWYsIGxlbiwgc2Vjb25kYXJ5KQorICAgIGludCBmZDsKKyAgICBjaGFyICpi dWY7CisgICAgaW50IGxlbjsKKyAgICBpbnQgc2Vjb25kYXJ5OworeworICAgIGNoYXIgdG1wYnVm WzIqUkxPR19CVUZTSVorOF07CisgICAgdW5zaWduZWQgY2hhciAqbGVuX2J1ZiA9ICh1bnNpZ25l ZCBjaGFyICopIHRtcGJ1ZjsKKyAgICBrcmI1X2Vycm9yX2NvZGUgc3RhdHVzOworICAgIGtyYjVf ZGF0YSBwbGFpbjsKKyAgICBrcmI1X2VuY19kYXRhIGNpcGhlcjsKKworICAgIGRlYnVnKEYxMTEs ImtyYjVfZGVzX3dyaXRlIiwicmxvZ19lbmNyeXB0IixybG9nX2VuY3J5cHQpOworICAgIGlmICgg IXJsb2dfZW5jcnlwdCApIHsKKyAgICAgICAgaW50IGNjID0gbmV0X3dyaXRlKGZkLCBidWYsIGxl bik7CisgICAgICAgIGRlYnVnKEYxMTEsIm5ldF93cml0ZSIsImNoYXJzIHdyaXR0ZW4iLGNjKTsK KyAgICAgICAgcmV0dXJuKGNjICE9IGxlbiA/IC0xIDogbGVuKTsKKyAgICB9CisKKyAgICBpZiAo dXNlX2l2ZWNzKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmxlbmJ1ZjIgPSAodW5zaWduZWQg Y2hhciAqKSB0bXBidWY7CisgICAgICAgIGlmIChsZW4gKyA0ID4gc2l6ZW9mKHRtcGJ1ZikpCisg ICAgICAgICAgICBhYm9ydCAoKTsKKyAgICAgICAgbGVuYnVmMlswXSA9IChsZW4gJiAweGZmMDAw MDAwKSA+PiAyNDsKKyAgICAgICAgbGVuYnVmMlsxXSA9IChsZW4gJiAweGZmMDAwMCkgPj4gMTY7 CisgICAgICAgIGxlbmJ1ZjJbMl0gPSAobGVuICYgMHhmZjAwKSA+PiA4OworICAgICAgICBsZW5i dWYyWzNdID0gKGxlbiAmIDB4ZmYpOworICAgICAgICBtZW1jcHkgKHRtcGJ1ZiArIDQsIGJ1Ziwg bGVuKTsKKworICAgICAgICBwbGFpbi5kYXRhID0gdG1wYnVmOworICAgICAgICBwbGFpbi5sZW5n dGggPSBsZW4gKyA0OworICAgIH0gZWxzZSB7CisgICAgICAgIHBsYWluLmRhdGEgPSBidWY7Cisg ICAgICAgIHBsYWluLmxlbmd0aCA9IGxlbjsKKyAgICB9CisKKyAgICBjaXBoZXIuY2lwaGVydGV4 dC5sZW5ndGggPSBzaXplb2YoZGVzX291dHBrdCktNDsKKyAgICBjaXBoZXIuY2lwaGVydGV4dC5k YXRhID0gZGVzb3V0YnVmLmRhdGE7CisKKyAgICBpZiAoIHN0YXR1cyA9IGtyYjVfY19lbmNyeXB0 KGs1X2NvbnRleHQsIGs1X3Nlc3Npb25fa2V5LCBLQ01EX0tFWVVTQUdFLAorICAgICAgICAgICAg ICAgICAgICAgICAgIHVzZV9pdmVjcyA/IGVuY2l2ZWNfbyArIHNlY29uZGFyeSA6IDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgJnBsYWluLCAmY2lwaGVyKSkgeworICAgICAgICBwcmludGYo IldyaXRlIGVuY3J5cHQgcHJvYmxlbTogJXMuXHJcbiIsCisgICAgICAgICAgICAgICAgIGVycm9y X21lc3NhZ2Uoc3RhdHVzKSk7CisgICAgICAgIGVycm5vID0gRUlPOworICAgICAgICByZXR1cm4o LTEpOworICAgIH0KKyAgICBkZXNvdXRidWYubGVuZ3RoID0gY2lwaGVyLmNpcGhlcnRleHQubGVu Z3RoOworCisgICAgbGVuX2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopIGRlc19vdXRwa3Q7CisgICAg bGVuX2J1ZlswXSA9IChsZW4gJiAweGZmMDAwMDAwKSA+PiAyNDsKKyAgICBsZW5fYnVmWzFdID0g KGxlbiAmIDB4ZmYwMDAwKSA+PiAxNjsKKyAgICBsZW5fYnVmWzJdID0gKGxlbiAmIDB4ZmYwMCkg Pj4gODsKKyAgICBsZW5fYnVmWzNdID0gKGxlbiAmIDB4ZmYpOworCisgICAgaWYgKG5ldF93cml0 ZShmZCwgZGVzX291dHBrdCxkZXNvdXRidWYubGVuZ3RoKzQpCisgICAgICAgICAhPSBkZXNvdXRi dWYubGVuZ3RoKzQpeworICAgICAgICBwcmludGYoIkNvdWxkIG5vdCB3cml0ZSBvdXQgYWxsIGRh dGFcclxuIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGVsc2UgcmV0dXJuKGxl bik7Cit9CisjZW5kaWYgLyogS1JCNSAqLworCisjaWZkZWYgS1JCNAorLyoKKyAqIE5vdGUgdGhh dCB0aGUgZW5jcnlwdGVkIHJsb2dpbiBwYWNrZXRzIHRha2UgdGhlIGZvcm0gb2YgYSBmb3VyLWJ5 dGUKKyAqIGxlbmd0aCBmb2xsb3dlZCBieSBlbmNyeXB0ZWQgZGF0YS4gIE9uIHdyaXRpbmcgdGhl IGRhdGEgb3V0LCBhIHNpZ25pZmljYW50CisgKiBwZXJmb3JtYW5jZSBwZW5hbHR5IGlzIHN1ZmZl cmVkIChhdCBsZWFzdCBvbmUgUlRUIHBlciBjaGFyYWN0ZXIsIHR3byBpZiB3ZQorICogYXJlIHdh aXRpbmcgZm9yIGEgc2hlbGwgdG8gZWNobykgYnkgd3JpdGluZyB0aGUgZGF0YSBzZXBhcmF0ZWx5 IGZyb20gdGhlCisgKiBsZW5ndGguICBTbywgdW5saWtlIHRoZSBpbnB1dCBidWZmZXIsIHdoaWNo IGp1c3QgY29udGFpbnMgdGhlIG91dHB1dAorICogZGF0YSwgdGhlIG91dHB1dCBidWZmZXIgcmVw cmVzZW50cyB0aGUgZW50aXJlIHBhY2tldC4KKyAqLworCitpbnQKK2tyYjRfZGVzX2F2YWlsKGZk KQorICAgIGludCBmZDsKK3sKKyAgICByZXR1cm4obnN0b3JlZCk7Cit9CisKK2ludAora3JiNF9k ZXNfcmVhZChmZCwgYnVmLCBsZW4pCitpbnQgZmQ7CityZWdpc3RlciBjaGFyICpidWY7CitpbnQg bGVuOworeworICAgIGludCBucmV0dXJuZWQgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgbmV0X2xl biwgcmRfbGVuOworICAgIGludCBjYzsKKyAgICB1bnNpZ25lZCBjaGFyIGM7CisgICAgaW50IGdv dHplcm8gPSAwOworCisgICAgZGVidWcoRjExMSwia3JiNF9kZXNfcmVhZCIsInJsb2dfZW5jcnlw dCIscmxvZ19lbmNyeXB0KTsKKyAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rlc19yZWFkIiwibGVuIixs ZW4pOworICAgIGlmICggIXJsb2dfZW5jcnlwdCApIHsKKyAgICAgICAgY2MgPSBuZXRfcmVhZChm ZCwgYnVmLCBsZW4pOworICAgICAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rlc19yZWFkIiwiY2hhcnMg cmVhZCIsY2MpOworICAgICAgICBpZiAoIGNjIDwgMCApCisgICAgICAgICAgICBuZXRjbG9zKCk7 CisgICAgICAgIHJldHVybihjYyk7CisgICAgfQorCisgICAgaWYgKG5zdG9yZWQgPj0gbGVuKSB7 CisgICAgICAgIGlmICggYnVmICkgeworICAgICAgICAgICAgZGVidWcoRjExMSwia3JiNF9kZXNf cmVhZCAobnN0b3JlZCA+PSBsZW4pIiwibnN0b3JlZCIsbnN0b3JlZCk7CisgICAgICAgICAgICBt ZW1jcHkoYnVmLCBzdG9yZV9wdHIsIGxlbik7ICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAg ICBzdG9yZV9wdHIgKz0gbGVuOworICAgICAgICAgICAgbnN0b3JlZCAtPSBsZW47CisgICAgICAg ICAgICByZXR1cm4obGVuKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4oMCk7 CisgICAgfSBlbHNlIGlmIChuc3RvcmVkKSB7CisgICAgICAgIGlmICggYnVmICkgeworICAgICAg ICAgICAgZGVidWcoRjExMSwia3JiNF9kZXNfcmVhZCAobnN0b3JlZCkiLCJuc3RvcmVkIixuc3Rv cmVkKTsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHN0b3JlX3B0ciwgbnN0b3JlZCk7ICAgIC8q IHNhZmUgKi8KKyAgICAgICAgICAgIG5yZXR1cm5lZCArPSBuc3RvcmVkOworICAgICAgICAgICAg YnVmICs9IG5zdG9yZWQ7CisgICAgICAgICAgICBsZW4gLT0gbnN0b3JlZDsKKyAgICAgICAgICAg IG5zdG9yZWQgPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICB9CisKKyAgICAvKiBXZSdyZSBmZXRjaGluZyB0aGUgbGVuZ3RoIHdoaWNoIGlzIE1TQiBmaXJz dCwgYW5kIHRoZSBNU0IKKyAgICBoYXMgdG8gYmUgemVybyB1bmxlc3MgdGhlIGNsaWVudCBpcyBz ZW5kaW5nIG1vcmUgdGhhbiAyXjI0CisgICAgKDE2TSkgYnl0ZXMgaW4gYSBzaW5nbGUgd3JpdGUg KHdoaWNoIGlzIHdoeSB0aGlzIGNvZGUgaXMgaW4KKyAgICBybG9naW4gYnV0IG5vdCByY3Agb3Ig cnNoLikgVGhlIG9ubHkgcmVhc29ucyB3ZSdkIGdldCBzb21ldGhpbmcKKyAgICBvdGhlciB0aGFu IHplcm8gYXJlOgorICAgIC0tIGNvcnJ1cHRpb24gb2YgdGhlIHRjcCBzdHJlYW0gKHdoaWNoIHdp bGwgc2hvdyB1cCB3aGVuCisgICAgZXZlcnl0aGluZyBlbHNlIGlzIG91dCBvZiBzeW5jIHRvbykK KyAgICAtLSB1bi1jYXVnaHQgQmVya2VsZXktc3R5bGUgInBzZXVkbyBvdXQtb2YtYmFuZCBkYXRh IiB3aGljaAorICAgIGhhcHBlbnMgYW55IHRpbWUgdGhlIHVzZXIgaGl0cyBeQyB0d2ljZS4KKyAg ICBUaGUgbGF0dGVyIGlzICp2ZXJ5KiBjb21tb24sIGFzIHNob3duIGJ5IGFuICdybG9naW4gLXgg LWQnCisgICAgdXNpbmcgdGhlIENOUyBWNCBybG9naW4uICAgICAgICAgTWFyayBFSWNoaW4gMS85 NQorICAgICovCisgICAgZGVidWcoRjExMCwia3JiNF9kZXNfcmVhZCIsCisgICAgICAgICAgImFi b3V0IHRvIGNhbGwgbmV0X3JlYWQoKSB0aGlzIHdpbGwgYmxvY2siLAorICAgICAgICAgIDAKKyAg ICAgICAgICApOworICAgIGRvIHsKKyAgICAgICAgY2MgPSBuZXRfcmVhZChmZCwgJmMsIDEpOwor ICAgICAgICBkZWJ1ZyhGMTExLCJuZXRfcmVhZCIsImNoYXJzIHJlYWQiLGNjKTsKKyAgICAgICAg aWYgKGNjIDw9IDApIHsKKyAgICAgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgICAgIHJldHVy bigtMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNjICE9IDEpIHJldHVybiAwOyAvKiByZWFk IGVycm9yICovCisgICAgICAgIGlmIChjYyA9PSAxKSB7CisgICAgICAgICAgICBpZiAoYyA9PSAw KSBnb3R6ZXJvID0gMTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKCFnb3R6ZXJvKTsKKworICAg IGRlYnVnKEYxMTAsImtyYjRfZGVzX3JlYWQiLCJnb3R6ZXJvIiwwKTsKKyAgICBjYyA9IG5ldF9y ZWFkKGZkLCAmYywgMSk7CisgICAgZGVidWcoRjExMSwibmV0X3JlYWQiLCJjaGFycyByZWFkIixj Yyk7CisgICAgaWYgKGNjIDwgMCkgeworICAgICAgICBuZXRjbG9zKCk7CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfSBlbHNlIGlmICggY2MgIT0gMSApCisgICAgICAgIHJldHVybigwKTsKKyAg ICBuZXRfbGVuID0gYzsKKyAgICBjYyA9IG5ldF9yZWFkKGZkLCAmYywgMSk7CisgICAgZGVidWco RjExMSwibmV0X3JlYWQiLCJjaGFycyByZWFkIixjYyk7CisgICAgaWYgKGNjIDwgMCkgeworICAg ICAgICBuZXRjbG9zKCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIGlmICggY2Mg IT0gMSApCisgICAgICAgIHJldHVybigwKTsKKyAgICBuZXRfbGVuID0gKG5ldF9sZW4gPDwgOCkg fCBjOworICAgIGRlYnVnKEYxMTEsIm5ldF9yZWFkIiwiY2hhcnMgcmVhZCIsY2MpOworICAgIGNj ID0gbmV0X3JlYWQoZmQsICZjLCAxKTsKKyAgICBpZiAoY2MgPCAwKSB7CisgICAgICAgIG5ldGNs b3MoKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UgaWYgKCBjYyAhPSAxICkKKyAg ICAgICAgcmV0dXJuKDApOworICAgIG5ldF9sZW4gPSAobmV0X2xlbiA8PCA4KSB8IGM7CisgICAg ZGVidWcoRjExMSwia3JiNF9kZXNfcmVhZCIsIm5ldF9sZW4iLG5ldF9sZW4pOworCisgICAgLyog Tm90ZTogbmV0X2xlbiBpcyB1bnNpZ25lZCAqLworICAgIGlmIChuZXRfbGVuID4gc2l6ZW9mKGRl c19pbmJ1ZikpIHsKKyAgICAgICAgLyogWFhYIHByZXBvc3Rlcm91cyBsZW5ndGgsIHByb2JhYmx5 IG91dCBvZiBzeW5jLgorICAgICAgICBhY3QgYXMgaWYgcGlwZSBjbG9zZWQgKi8KKyAgICAgICAg cmV0dXJuKDApOworICAgIH0KKyAgICAvKiB0aGUgd3JpdGVyIHRlbGxzIHVzIGhvdyBtdWNoIHJl YWwgZGF0YSB3ZSBhcmUgZ2V0dGluZywgYnV0CisgICAgd2UgbmVlZCB0byByZWFkIHRoZSBwYWQg Ynl0ZXMgKDgtYnl0ZSBib3VuZGFyeSkgKi8KKyNpZm5kZWYgcm91bmR1cAorI2RlZmluZSByb3Vu ZHVwKHgseSkgKCgoKHgpKyh5KS0xKS8oeSkpKih5KSkKKyNlbmRpZiAvKiByb3VuZHVwICovCisg ICAgcmRfbGVuID0gcm91bmR1cChuZXRfbGVuLCA4KTsKKyAgICBkZWJ1ZyhGMTExLCJrcmI0X2Rl c19yZWFkIiwicmRfbGVuIixyZF9sZW4pOworICAgIGNjID0gbmV0X3JlYWQoZmQsIGRlc19pbmJ1 ZiwgcmRfbGVuKTsKKyAgICBkZWJ1ZyhGMTExLCJuZXRfcmVhZCIsImNoYXJzIHJlYWQiLGNjKTsK KyAgICBpZiAoY2MgPCAwKSB7CisgICAgICAgIG5ldGNsb3MoKTsKKyAgICAgICAgcmV0dXJuKC0x KTsKKyAgICB9IGVsc2UgaWYgKCBjYyAhPSByZF9sZW4gKQorICAgICAgICByZXR1cm4oMCk7CisK KyAgICBja2hleGR1bXAoImtyYjRfZGVzX3JlYWQgZGVzX2luYnVmIixkZXNfaW5idWYsOCk7Cisj aWZkZWYgQ0tfRU5DUllQVElPTgorI2lmZGVmIEtSQjUyNAorICAgICh2b2lkKSBkZXNfcGNiY19l bmNyeXB0KGRlc19pbmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldF9sZW4gPCA4KSA/IDggOiBuZXRfbGVu LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNF9zY2hlZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3JlZC5zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBERUNSWVBUKTsKKyNlbHNlIC8qIEtSQjUyNCAqLworICAgICh2b2lkKSBkZXNfcGNiY19lbmNy eXB0KChCbG9jayAqKWRlc19pbmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJs b2NrICopc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldF9sZW4gPCA4 KSA/IDggOiBuZXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNF9zY2hlZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWQuc2Vzc2lvbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgREVDUllQVCk7CisjZW5kaWYgLyogS1JCNTI0ICovCisjZW5kaWYg LyogRU5DUllQVElPTiAqLworICAgIGNraGV4ZHVtcCgia3JiNF9kZXNfcmVhZCBzdG9yYWdlIixz dG9yYWdlLDgpOworCisgICAgLyoKKyAgICAqIHdoZW4gdGhlIGNsZWFydGV4dCBibG9jayBpcyA8 IDggYnl0ZXMsIGl0IGlzICJyaWdodC1qdXN0aWZpZWQiCisgICAgKiBpbiB0aGUgYmxvY2ssIHNv IHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhCisgICAgKi8KKyAgICBp ZiAobmV0X2xlbiA8IDgpCisgICAgICAgIHN0b3JlX3B0ciA9IHN0b3JhZ2UgKyA4IC0gbmV0X2xl bjsKKyAgICBlbHNlCisgICAgICAgIHN0b3JlX3B0ciA9IHN0b3JhZ2U7CisgICAgbnN0b3JlZCA9 IG5ldF9sZW47CisKKyAgICBpZiAoICFidWYgKQorICAgICAgICByZXR1cm4oMCk7CisKKyAgICBp ZiAobnN0b3JlZCA+IGxlbikgeworICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9wdHIsIGxlbik7 ICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICBucmV0dXJuZWQgKz0gbGVuOworICAgICAg ICBzdG9yZV9wdHIgKz0gbGVuOworICAgICAgICBuc3RvcmVkIC09IGxlbjsKKyAgICB9IGVsc2Ug eworICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9wdHIsIG5zdG9yZWQpOyAgICAgICAgLyogc2Fm ZSAqLworICAgICAgICBucmV0dXJuZWQgKz0gbnN0b3JlZDsKKyAgICAgICAgbnN0b3JlZCA9IDA7 CisgICAgfQorCisgICAgZGVidWcoRjExMSwibmV0X3JlYWQiLCJucmV0dXJuZWQiLG5yZXR1cm5l ZCk7CisgICAgcmV0dXJuKG5yZXR1cm5lZCk7Cit9CisKK2ludAora3JiNF9kZXNfd3JpdGUoZmQs IGJ1ZiwgbGVuKQoraW50IGZkOworY2hhciAqYnVmOworaW50IGxlbjsKK3sKKyAgICBzdGF0aWMg Y2hhciBnYXJiYWdlX2J1Zls4XTsKKyAgICB1bnNpZ25lZCBjaGFyICpsZW5fYnVmID0gKHVuc2ln bmVkIGNoYXIgKikgZGVzX291dHBrdDsKKyAgICBpbnQgY2M7CisKKyAgICBkZWJ1ZyhGMTExLCJr cmI0X2Rlc193cml0ZSIsInJsb2dfZW5jcnlwdCIscmxvZ19lbmNyeXB0KTsKKyAgICBpZiAoICFy bG9nX2VuY3J5cHQgKSB7CisgICAgICAgIGNjID0gbmV0X3dyaXRlKGZkLCBidWYsIGxlbik7Cisg ICAgICAgIGRlYnVnKEYxMTEsIm5ldF93cml0ZSIsImNoYXJzIHdyaXR0ZW4iLGNjKTsKKyAgICAg ICAgcmV0dXJuKGNjKTsKKyAgICB9CisKKyAgICAvKgorICAgICogcGNiY19lbmNyeXB0IG91dHB1 dHMgaW4gOC1ieXRlICg2NCBiaXQpIGluY3JlbWVudHMKKyAgICAqCisgICAgKiBpdCB6ZXJvLWZp bGxzIHRoZSBjbGVhcnRleHQgdG8gOC1ieXRlIHBhZGRpbmcsCisgICAgKiBzbyBpZiB3ZSBoYXZl IGNsZWFydGV4dCBvZiA8IDggYnl0ZXMsIHdlIHdhbnQKKyAgICAqIHRvIGluc2VydCByYW5kb20g Z2FyYmFnZSBiZWZvcmUgaXQgc28gdGhhdCB0aGUgY2lwaGVydGV4dAorICAgICogZGlmZmVycyBm b3IgZWFjaCB0cmFuc21pc3Npb24gb2YgdGhlIHNhbWUgY2xlYXJ0ZXh0LgorICAgICogaWYgbGVu IDwgOCAtIHNpemVvZihsb25nKSwgc2l6ZW9mKGxvbmcpIGJ5dGVzIG9mIHJhbmRvbQorICAgICog Z2FyYmFnZSBzaG91bGQgYmUgc3VmZmljaWVudDsgbGVhdmUgdGhlIHJlc3QgYXMtaXMgaW4gdGhl IGJ1ZmZlci4KKyAgICAqIGlmIGxlbiA+IDggLSBzaXplb2YobG9uZyksIGp1c3QgZ2FyYmFnZSBm aWxsIHRoZSByZXN0LgorICAgICovCisgICAgaWYgKGxlbiA8IDgpIHsKKyAgICAgICAgcmFuZG9t X2NvbmZvdW5kZXIoOCAtIGxlbiwgZ2FyYmFnZV9idWYpOworICAgICAgICAvKiB0aGlzICJyaWdo dC1qdXN0aWZpZXMiIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgKi8KKyAgICAgICAgKHZvaWQpIG1l bWNweShnYXJiYWdlX2J1ZiArIDggLSBsZW4sIGJ1ZiwgbGVuKTsgLyogc2FmZSAqLworICAgICAg ICBja2hleGR1bXAoImtyYjRfZGVzX3dyaXRlIGdhcmJhZ2VfYnVmIixnYXJiYWdlX2J1Ziw4KTsK KyAgICB9IGVsc2UKKyAgICAgICAgY2toZXhkdW1wKCJrcmI0X2Rlc193cml0ZSBidWYiLGJ1Ziw4 KTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZkZWYgS1JCNTI0CisgICAgKHZvaWQpIGRlc19w Y2JjX2VuY3J5cHQoKGxlbiA8IDgpID8gZ2FyYmFnZV9idWYgOiBidWYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlc19vdXRwa3QrNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxlbiA8IDgpID8gOCA6IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazRf c2NoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWQuc2Vzc2lvbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRU5DUllQVCk7CisjZWxzZSAvKiBLUkI1MjQgKi8KKyAg ICAodm9pZCkgZGVzX3BjYmNfZW5jcnlwdCgoQmxvY2sgKikoKGxlbiA8IDgpID8gZ2FyYmFnZV9i dWYgOiBidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmxvY2sgKikoZGVzX291 dHBrdCs0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbiA8IDgpID8gOCA6IGxl biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazRfc2NoZWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZjcmVkLnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVOQ1JZUFQpOworI2VuZGlmIC8qIEtSQjUyNCAqLworI2VuZGlmIC8qIEVOQ1JZUFRJT04g Ki8KKyAgICBpZiAoIGxlbiA8IDggKQorICAgICAgICBja2hleGR1bXAoImtyYjRfZGVzX3dyaXRl IChwb3N0IHBjYmMpIGdhcmJhZ2VfYnVmIixnYXJiYWdlX2J1Ziw4KTsKKyAgICBlbHNlCisgICAg ICAgIGNraGV4ZHVtcCgia3JiNF9kZXNfd3JpdGUgKHBvc3QgcGNiYykgYnVmIixidWYsOCk7Cisg ICAgY2toZXhkdW1wKCJrcmI0X2Rlc193cml0ZSAoZGVzX291dHBrdCs0KSIsKGRlc19vdXRwa3Qr NCksOCk7CisKKyAgICAvKiB0ZWxsIHRoZSBvdGhlciBlbmQgdGhlIHJlYWwgYW1vdW50LCBidXQg c2VuZCBhbiA4LWJ5dGUgcGFkZGVkCisgICAgcGFja2V0ICovCisgICAgbGVuX2J1ZlswXSA9IChs ZW4gJiAweGZmMDAwMDAwKSA+PiAyNDsKKyAgICBsZW5fYnVmWzFdID0gKGxlbiAmIDB4ZmYwMDAw KSA+PiAxNjsKKyAgICBsZW5fYnVmWzJdID0gKGxlbiAmIDB4ZmYwMCkgPj4gODsKKyAgICBsZW5f YnVmWzNdID0gKGxlbiAmIDB4ZmYpOworICAgIGNraGV4ZHVtcCgia3JiNF9kZXNfd3JpdGUgZGVz X291dHBrdCBsZW4iLGRlc19vdXRwa3QsMTIpOworICAgIGNjID0gbmV0X3dyaXRlKGZkLCBkZXNf b3V0cGt0LCByb3VuZHVwKGxlbiw4KSs0KTsKKyAgICBkZWJ1ZyhGMTExLCJuZXRfd3JpdGUiLCJj aGFycyB3cml0dGVuIixjYyk7CisgICAgcmV0dXJuKGxlbik7Cit9CisjZW5kaWYgLyogS1JCNCAq LworI2VuZGlmIC8qIFJMT0dDT0RFICovCisKKyNpZmRlZiBLUkI1MjQKKyNpZm5kZWYgT1MyCisv KiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgbWlzc2luZyBmcm9tIHRoZSBjb21wYXRpYmls aXR5IGxpYnJhcnkgKi8KK2NvbnN0IGNoYXIgKgora3JiX2dldF9lcnJfdGV4dF9lbnRyeShyKSBp bnQgcjsKK3sKKyAgICBleHRlcm4gY2hhciBrcmJfZXJyX3RleHRbXTsKKyAgICByZXR1cm4oa3Ji X2Vycl90eHRbcl0pOworfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEtSQjUyNCAqLwor I2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtS QjVfVTJVCisvKiBLZXJiZXJvcyA1IFVzZXIgdG8gVXNlciBDbGllbnQgKi8KK2ludAorazVfdXNl cl90b191c2VyX2NsaWVudF9hdXRoKCkKK3sKKyAgICBleHRlcm4gaW50IHR0eWZkOworICAgIHJl Z2lzdGVyIGludCByZXR2YWwsIGk7CisgICAgY2hhciAqKnNyZWFsbXM7ICAgICAgICAgICAgIC8q IHJlYWxtKHMpIG9mIHNlcnZlciAqLworICAgIGNoYXIgKnByaW5jOyAgICAgICAgICAgICAgICAv KiBwcmluY2lwYWwgaW4gY3JlZGVudGlhbHMgY2FjaGUgKi8KKyAgICBrcmI1X2NjYWNoZSBjYzsK KyAgICBrcmI1X2NyZWRzIGNyZWRzLCAqbmV3X2NyZWRzOworICAgIGtyYjVfZGF0YSByZXBseSwg bXNnLCBtc2d0ZXh0LCBwcmluY19kYXRhOworICAgIGtyYjVfdGlja2V0ICogdGlja2V0ID0gTlVM TDsKKworICAgIGlmIChyZXR2YWwgPSBrNV9nZXRfY2NhY2hlKGs1X2NvbnRleHQsJmNjLE5VTEwp KQorICAgIHsKKyAgICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAiZ2V0dGluZyBj cmVkZW50aWFscyBjYWNoZSIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIG1l bXNldCAoKGNoYXIqKSZjcmVkcywgMCwgc2l6ZW9mKGNyZWRzKSk7CisgICAgaWYgKHJldHZhbCA9 IGtyYjVfY2NfZ2V0X3ByaW5jaXBhbChrNV9jb250ZXh0LCBjYywgJmNyZWRzLmNsaWVudCkpCisg ICAgeworICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJnZXR0aW5nIHByaW5j aXBhbCBuYW1lIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKHJldHZh bCA9IGtyYjVfZ2V0X2hvc3RfcmVhbG0oazVfY29udGV4dCwgc3pIb3N0TmFtZSwgJnNyZWFsbXMp KQorICAgIHsKKyAgICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAiZ2V0dGluZyBy ZWFsbXMgZm9yIFwiJXNcIiIsIHN6SG9zdE5hbWUpOworICAgICAgICByZXR1cm4oLTEpOworICAg IH0KKworICAgIGlmIChyZXR2YWwgPSBrcmI1X2J1aWxkX3ByaW5jaXBhbF9leHQoazVfY29udGV4 dCwgJmNyZWRzLnNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtyYjVfcHJpbmNfcmVhbG0oazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRzLmNsaWVudCktPmxlbmd0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNfcmVh bG0oazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNyZWRzLmNsaWVudCktPmRhdGEsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA2LCAia3JidGd0IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGtyYjVfcHJpbmNfcmVhbG0oazVfY29udGV4dCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRz LmNsaWVudCktPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtyYjVfcHJpbmNfcmVhbG0oazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRzLmNsaWVudCktPmRhdGEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSkKKyAgICB7CisgICAg ICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZhbCwgInNldHRpbmcgdXAgdGd0IHNlcnZlciBu YW1lIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgLyogR2V0IFRHVCBmcm9t IGNyZWRlbnRpYWxzIGNhY2hlICovCisgICAgaWYgKHJldHZhbCA9IGtyYjVfZ2V0X2NyZWRlbnRp YWxzKGs1X2NvbnRleHQsIEtSQjVfR0NfQ0FDSEVELCBjYywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZjcmVkcywgJm5ld19jcmVkcykpCisgICAgeworICAgICAgICBj b21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJnZXR0aW5nIFRHVCIpOworICAgICAgICByZXR1 cm4oLTEpOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPSBrcmI1X3VucGFyc2VfbmFtZShrNV9j b250ZXh0LCBjcmVkcy5jbGllbnQsICZwcmluYykpIHsKKyAgICAgICAgY29tX2VycigidXUtY2xp ZW50IiwgcmV0dmFsLCAicHJpbnRpbmcgcHJpbmNpcGFsIG5hbWUiKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgaSA9IHN0cmxlbihwcmluYykgKyAxOworICAgIHByaW5jX2RhdGEu ZGF0YSA9IHByaW5jOworICAgIHByaW5jX2RhdGEubGVuZ3RoID0gaTsgICAgICAgICAgICAgIC8q IGluY2x1ZGUgbnVsbCB0ZXJtaW5hdG9yIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlcnZlcidzIGNvbnZlbmllbmNlICovCisgICAgcmV0dmFsID0ga3Ji NV93cml0ZV9tZXNzYWdlKGs1X2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChrcmI1X3BvaW50ZXIpICZ0dHlmZCwgJnByaW5jX2RhdGEpOworICAgIGlmIChyZXR2YWwp CisgICAgeworICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJzZW5kaW5nIHBy aW5jaXBhbCBuYW1lIHRvIHNlcnZlciIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAg ICBrcmI1X2ZyZWVfdW5wYXJzZWRfbmFtZShrNV9jb250ZXh0LHByaW5jKTsKKworICAgIHJldHZh bCA9IGtyYjVfd3JpdGVfbWVzc2FnZShrNV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoa3JiNV9wb2ludGVyKSAmdHR5ZmQsICZuZXdfY3JlZHMtPnRpY2tldCk7Cisg ICAgaWYgKHJldHZhbCkKKyAgICB7CisgICAgICAgIGNvbV9lcnIoInV1LWNsaWVudCIsIHJldHZh bCwgInNlbmRpbmcgdGlja2V0IHRvIHNlcnZlciIpOworICAgICAgICByZXR1cm4oLTEpOworICAg IH0KKworICAgIHJldHZhbCA9IGtyYjVfcmVhZF9tZXNzYWdlKGs1X2NvbnRleHQsIChrcmI1X3Bv aW50ZXIpICZ0dHlmZCwgJnJlcGx5KTsKKyAgICBpZiAocmV0dmFsKQorICAgIHsKKyAgICAgICAg Y29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAicmVhZGluZyByZXBseSBmcm9tIHNlcnZlciIp OworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPSBrcmI1X2F1 dGhfY29uX2luaXQoazVfY29udGV4dCwgJmF1dGhfY29udGV4dCkpIHsKKyAgICAgICAgY29tX2Vy cigidXUtY2xpZW50IiwgcmV0dmFsLCAiaW5pdGlhbGl6aW5nIHRoZSBhdXRoX2NvbnRleHQiKTsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBpZiAoIWtyYjVfZF9ub19hZGRyZXNz ZXMpIHsKKyAgICAgIGlmIChyZXR2YWwgPSBrcmI1X2F1dGhfY29uX2dlbmFkZHJzKGs1X2NvbnRl eHQsIGF1dGhfY29udGV4dCwgdHR5ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICBLUkI1X0FV VEhfQ09OVEVYVF9HRU5FUkFURV9MT0NBTF9GVUxMX0FERFIgfAorICAgICAgICAgICAgICAgICAg ICAgICAgS1JCNV9BVVRIX0NPTlRFWFRfR0VORVJBVEVfUkVNT1RFX0ZVTExfQUREUikpIHsKKyAg ICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAiZ2VuZXJhdGluZyBhZGRycyBmb3Ig YXV0aF9jb250ZXh0Iik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgICB9CisgICAgfQorCisg ICAgaWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25fc2V0ZmxhZ3MoazVfY29udGV4dCwgYXV0aF9j b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtSQjVfQVVU SF9DT05URVhUX0RPX1NFUVVFTkNFKSkgeworICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCBy ZXR2YWwsICJpbml0aWFsaXppbmcgdGhlIGF1dGhfY29udGV4dCBmbGFncyIpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPSBrcmI1X2F1dGhfY29uX3NldHVz ZXJ1c2Vya2V5KGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X2NyZWRzLT5rZXlibG9jaykpIHsKKyAgICAg ICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAic2V0dGluZyB1c2VydXNlcmtleSBmb3Ig YXV0aGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICAvKiByZWFk IHRoZSBhcF9yZXEgdG8gZ2V0IHRoZSBzZXNzaW9uIGtleSAqLworICAgIHJldHZhbCA9IGtyYjVf cmRfcmVxKGs1X2NvbnRleHQsICZhdXRoX2NvbnRleHQsICZyZXBseSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgJnRpY2tldCk7CisgICAgaWYgKHJldHZhbCkg eworICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJyZWFkaW5nIEFQX1JFUSBm cm9tIHNlcnZlciIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAgIGlmIChrNV91 MnVfcmVhZF9tc2coazVfY29udGV4dCwmbXNnKSA8IDApCisgICAgICAgIHJldHVybigtMSk7CisK KyAgICBpZiAoIHN0cmNtcCgiS2VybWl0IGltcGxlbWVudHMgS2VyYmVyb3MgNSBVc2VyIHRvIFVz ZXIiLG1zZy5kYXRhKSApCisgICAgICAgIHJldHVybigtMSk7CisgICAga3JiNV9mcmVlX2RhdGFf Y29udGVudHMoazVfY29udGV4dCwmbXNnKTsKKworICAgIG1zZ3RleHQuZGF0YSA9ICJBcyBkbyBJ ISA6LSkiOworICAgIG1zZ3RleHQubGVuZ3RoID0gc3RybGVuKG1zZ3RleHQuZGF0YSkrMTsKKwor ICAgIGlmIChrNV91MnVfd3JpdGVfbXNnKGs1X2NvbnRleHQsJm1zZ3RleHQpIDwgMCkKKyAgICAg ICAgcmV0dXJuKC0xKTsKKworICAgIGlmIChyZXR2YWwgPSBrcmI1X3VucGFyc2VfbmFtZShrNV9j b250ZXh0LAorI2lmZGVmIEhFSU1EQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRpY2tldC0+Y2xpZW50LAorI2Vsc2UgLyogSEVJTURBTCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGlja2V0LT5lbmNfcGFydDItPmNsaWVudCwKKyNlbmRpZiAv KiBIRUlNREFMICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJpbmMp KQorICAgICAgICBjb21fZXJyKCJ1dS1jbGllbnQiLCByZXR2YWwsICJ3aGlsZSB1bnBhcnNpbmcg Y2xpZW50IG5hbWUiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgY2tzdHJuY3B5KHN6VXNlck5hbWVB dXRoZW50aWNhdGVkLHByaW5jLFVJREJVRkxFTik7CisgICAgICAgIHZhbGlkVXNlciA9IEFVVEhf VkFMSUQ7CisgICAgICAgIGF1dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9LRVJCRVJP U19WNTsKKyAgICAgICAgaWYgKCAhcXVpZXQgKQorICAgICAgICAgICAgcHJpbnRmKCJQZWVyIG5h bWUgaXMgXCIlc1wiXG4iLCBwcmluYyk7CisgICAgICAgIGtyYjVfZnJlZV91bnBhcnNlZF9uYW1l KGs1X2NvbnRleHQscHJpbmMpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogS2VyYmVy b3MgNSBVc2VyIHRvIFVzZXIgU2VydmVyICovCisKK2ludAorazVfdXNlcl90b191c2VyX3NlcnZl cl9hdXRoKCkKK3sKKyAgICBrcmI1X2RhdGEgcG5hbWVfZGF0YSwgdGt0X2RhdGE7CisgICAgaW50 IHJldHZhbDsKKyAgICBrcmI1X2NyZWRzIGNyZWRzLCAqbmV3X2NyZWRzOworICAgIGtyYjVfY2Nh Y2hlIGNjOworICAgIGtyYjVfZGF0YSBtc2csIG1zZ3RleHQ7CisgICAgZXh0ZXJuIGludCB0dHlm ZDsKKworICAgIGlmIChyZXR2YWwgPSBrcmI1X3JlYWRfbWVzc2FnZShrNV9jb250ZXh0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa3JiNV9wb2ludGVyKSAmdHR5ZmQsICZw bmFtZV9kYXRhKSkgeworICAgICAgICBjb21fZXJyICgidXUtc2VydmVyIiwgcmV0dmFsLCAicmVh ZGluZyBwbmFtZSIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAvKiBjbGllbnQg c2VuZHMgaXQgYWxyZWFkeSBudWxsLXRlcm1pbmF0ZWQuICovCisgICAgaWYgKCAhcXVpZXQgKQor ICAgICAgICBwcmludGYgKCJQZWVyIG5hbWUgaXMgXCIlc1wiLlxuIiwgcG5hbWVfZGF0YS5kYXRh KTsKKyAgICBja3N0cm5jcHkoc3pVc2VyTmFtZUF1dGhlbnRpY2F0ZWQscG5hbWVfZGF0YS5kYXRh LFVJREJVRkxFTik7CisgICAgdmFsaWRVc2VyID0gQVVUSF9WQUxJRDsKKyAgICBhdXRoZW50aWNh dGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfS0VSQkVST1NfVjU7CisKKyAgICBpZiAocmV0dmFsID0g a3JiNV9yZWFkX21lc3NhZ2UoazVfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGtyYjVfcG9pbnRlcikgJnR0eWZkLCAmdGt0X2RhdGEpKSB7CisgICAgICAgIGNv bV9lcnIgKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJyZWFkaW5nIHRpY2tldCBkYXRhIik7CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAgaWYgKHJldHZhbCA9IGs1X2dldF9jY2FjaGUo azVfY29udGV4dCwmY2MsTlVMTCkpCisgICAgeworICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIi LCByZXR2YWwsICJnZXR0aW5nIGNyZWRlbnRpYWxzIGNhY2hlIik7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorCisgICAgbWVtc2V0ICgoY2hhciopJmNyZWRzLCAwLCBzaXplb2YoY3JlZHMp KTsKKyAgICBpZiAocmV0dmFsID0ga3JiNV9jY19nZXRfcHJpbmNpcGFsKGs1X2NvbnRleHQsIGNj LCAmY3JlZHMuY2xpZW50KSkKKyAgICB7CisgICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJl dHZhbCwgImdldHRpbmcgcHJpbmNpcGFsIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICB9CisKKyAgICBpZiAocmV0dmFsID0ga3JiNV9wYXJzZV9uYW1lKGs1X2NvbnRleHQsIHBuYW1l X2RhdGEuZGF0YSwgJmNyZWRzLnNlcnZlcikpCisgICAgeworICAgICAgICBjb21fZXJyKCJ1dS1z ZXJ2ZXIiLCByZXR2YWwsICJwYXJzaW5nIGNsaWVudCBuYW1lIik7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorICAgIGNyZWRzLnNlY29uZF90aWNrZXQgPSB0a3RfZGF0YTsKKworICAgIGlm IChyZXR2YWwgPSBrcmI1X2dldF9jcmVkZW50aWFscyhrNV9jb250ZXh0LCBLUkI1X0dDX1VTRVJf VVNFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjLCAmY3JlZHMs ICZuZXdfY3JlZHMpKQorICAgIHsKKyAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwgcmV0dmFs LCAiZ2V0dGluZyB1c2VyLXVzZXIgdGlja2V0Iik7CisgICAgICAgIHJldHVybigtMSk7CisgICAg fQorCisgICAgLyogc2VuZCBhIHRpY2tldC9hdXRoZW50aWNhdG9yIHRvIHRoZSBvdGhlciBzaWRl LCBzbyBpdCBjYW4gZ2V0IHRoZSBrZXkKKyAgICAgICB3ZSdyZSB1c2luZyBmb3IgdGhlIGtyYl9z YWZlIGJlbG93LiAqLworCisgICAgaWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25faW5pdChrNV9j b250ZXh0LCAmYXV0aF9jb250ZXh0KSkgeworICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCBy ZXR2YWwsICJtYWtpbmcgYXV0aF9jb250ZXh0Iik7CisgICAgICAgIHJldHVybigtMSk7CisgICAg fQorCisgICAgaWYgKHJldHZhbCA9IGtyYjVfYXV0aF9jb25fc2V0ZmxhZ3MoazVfY29udGV4dCwg YXV0aF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBL UkI1X0FVVEhfQ09OVEVYVF9ET19TRVFVRU5DRSkpIHsKKyAgICAgICAgY29tX2VycigidXUtc2Vy dmVyIiwgcmV0dmFsLCAiaW5pdGlhbGl6aW5nIHRoZSBhdXRoX2NvbnRleHQgZmxhZ3MiKTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBpZiAoIWtyYjVfZF9ub19hZGRyZXNzZXMp IHsKKyAgICAgIGlmIChyZXR2YWwgPSBrcmI1X2F1dGhfY29uX2dlbmFkZHJzKGs1X2NvbnRleHQs IGF1dGhfY29udGV4dCwgdHR5ZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtS QjVfQVVUSF9DT05URVhUX0dFTkVSQVRFX0xPQ0FMX0ZVTExfQUREUiB8CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEtSQjVfQVVUSF9DT05URVhUX0dFTkVSQVRFX1JFTU9URV9GVUxM X0FERFIpKSB7CisgICAgICAgIGNvbV9lcnIoInV1LXNlcnZlciIsIHJldHZhbCwgImdlbmVyYXRp bmcgYWRkcnMgZm9yIGF1dGhfY29udGV4dCIpOworICAgICAgICByZXR1cm4oLTEpOworICAgICAg fQorICAgIH0KKworICAgIGlmIChyZXR2YWwgPSBrcmI1X2F1dGhfY29uX3NldHVzZXJ1c2Vya2V5 KGs1X2NvbnRleHQsIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmbmV3X2NyZWRzLT5rZXlibG9jaykpIHsKKyAgICAgICAgY29tX2Vy cigidXUtc2VydmVyIiwgcmV0dmFsLCAic2V0dGluZyB1c2VydXNlcmtleSBmb3IgYXV0aGNvbnRl eHQiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKyAgICBpZiAocmV0dmFsID0ga3Ji NV9ta19yZXFfZXh0ZW5kZWQoazVfY29udGV4dCwgJmF1dGhfY29udGV4dCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBfT1BUU19VU0VfU0VTU0lPTl9LRVkgfAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUF9PUFRTX01VVFVBTF9SRVFVSVJF RCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgbmV3X2NyZWRz LCAmbXNnKSkgeworICAgICAgICBjb21fZXJyKCJ1dS1zZXJ2ZXIiLCByZXR2YWwsICJtYWtpbmcg QVBfUkVRIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIHJldHZhbCA9IGtyYjVf d3JpdGVfbWVzc2FnZShrNV9jb250ZXh0LCAoa3JiNV9wb2ludGVyKSAmdHR5ZmQsICZtc2cpOwor ICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgY29tX2VycigidXUtc2VydmVyIiwgcmV0dmFsLCAi d3JpdGluZyBtZXNzYWdlIHRvIGNsaWVudCIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0K KyAgICBrcmI1X2ZyZWVfZGF0YV9jb250ZW50cyhrNV9jb250ZXh0LCZtc2cpOworCisgICAgbXNn dGV4dC5kYXRhID0gIktlcm1pdCBpbXBsZW1lbnRzIEtlcmJlcm9zIDUgVXNlciB0byBVc2VyIjsK KyAgICBtc2d0ZXh0Lmxlbmd0aCA9IHN0cmxlbihtc2d0ZXh0LmRhdGEpKzE7CisKKyAgICBpZiAo azVfdTJ1X3dyaXRlX21zZyhrNV9jb250ZXh0LCZtc2d0ZXh0KSA8IDApCisgICAgICAgIHJldHVy bigtMSk7CisKKyAgICBpZiAoazVfdTJ1X3JlYWRfbXNnKGs1X2NvbnRleHQsJm1zZykgPCAwKQor ICAgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKCBzdHJjbXAoIkFzIGRvIEkhIDotKSIsbXNn LmRhdGEpICkKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICBrcmI1X2ZyZWVfZGF0YV9jb250ZW50 cyhrNV9jb250ZXh0LCZtc2cpOworCisKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorazVfdTJ1 X3JlYWRfbXNnKGtyYjVfY29udGV4dCBjb250ZXh0LCBpbnQgZmQsIGtyYjVfZGF0YSAqIG1zZykK K3sKKyAgICBpbnQgcmV0dmFsOworICAgIGtyYjVfZGF0YSByZXBseTsKKworICAgIHJldHZhbCA9 IGtyYjVfcmVhZF9tZXNzYWdlKGNvbnRleHQsIChrcmI1X3BvaW50ZXIpICZmZCwgJnJlcGx5KTsK KyAgICBpZiAocmV0dmFsKQorICAgIHsKKyAgICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0 dmFsLCAicmVhZGluZyByZXBseSIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKworICAg IGlmIChyZXR2YWwgPSBrcmI1X3JkX3ByaXYoY29udGV4dCwgYXV0aF9jb250ZXh0LCAmcmVwbHks IG1zZywgTlVMTCkpIHsKKyAgICAgICAgY29tX2VycigidXUtY2xpZW50IiwgcmV0dmFsLCAiZGVj b2RpbmcgcmVwbHkiKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcmV0dXJuKDAp OworfQorCitpbnQKK2s1X3UydV93cml0ZV9tc2coa3JiNV9jb250ZXh0IGNvbnRleHQsIGludCBm ZCwga3JiNV9kYXRhICogbXNndGV4dCkKK3sKKyAgICBpbnQgcmV0dmFsOworICAgIGtyYjVfZGF0 YSBtc2c7CisKKyAgICBpZiAocmV0dmFsID0ga3JiNV9ta19wcml2KGs1X2NvbnRleHQsIGF1dGhf Y29udGV4dCwgbXNndGV4dCwgJm1zZywgTlVMTCkpCisgICAgeworICAgICAgICBjb21fZXJyKCJ1 dS1zZXJ2ZXIiLCByZXR2YWwsICJlbmNvZGluZyBtZXNzYWdlIik7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorCisgICAgcmV0dmFsID0ga3JiNV93cml0ZV9tZXNzYWdlKGs1X2NvbnRleHQs IChrcmI1X3BvaW50ZXIpICZmZCwgJm1zZyk7CisgICAga3JiNV9mcmVlX2RhdGFfY29udGVudHMo azVfY29udGV4dCwmbXNnKTsKKyAgICBpZiAocmV0dmFsKQorICAgIHsKKyAgICAgICAgY29tX2Vy cigidXUtc2VydmVyIiwgcmV0dmFsLCAid3JpdGluZyBtZXNzYWdlIik7CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworaW50CitrcmI1X3UydV9hdmFpbChm ZCkKKyAgICBpbnQgZmQ7Cit7CisgICAgcmV0dXJuKG5zdG9yZWQpOworfQorCitpbnQKK2tyYjVf dTJ1X3JlYWQoZmQsIGJ1ZiwgbGVuKQorICAgICBpbnQgZmQ7CisgICAgIHJlZ2lzdGVyIGNoYXIg KmJ1ZjsKKyAgICAgaW50IGxlbjsKK3sKKyAgICBpbnQgbnJldHVybmVkID0gMDsKKyAgICBrcmI1 X2RhdGEgbXNnOworCisgICAgZGVidWcoRjExMSwia3JiNV91MnVfcmVhZCIsImxlbiIsbGVuKTsK KworICAgIGlmICggIWJ1ZiApCisgICAgICAgIHJldHVybigwKTsKKworICAgIGlmIChuc3RvcmVk ID49IGxlbikgeworICAgICAgICBtZW1jcHkoYnVmLCBzdG9yZV9wdHIsIGxlbik7ICAgICAgICAv KiBzYWZlICovCisgICAgICAgIHN0b3JlX3B0ciArPSBsZW47CisgICAgICAgIG5zdG9yZWQgLT0g bGVuOworICAgICAgICByZXR1cm4obGVuKTsKKyAgICB9IGVsc2UgaWYgKG5zdG9yZWQpIHsKKyAg ICAgICAgbWVtY3B5KGJ1Ziwgc3RvcmVfcHRyLCBuc3RvcmVkKTsgICAgLyogc2FmZSAqLworICAg ICAgICBucmV0dXJuZWQgKz0gbnN0b3JlZDsKKyAgICAgICAgYnVmICs9IG5zdG9yZWQ7CisgICAg ICAgIGxlbiAtPSBuc3RvcmVkOworICAgICAgICBuc3RvcmVkID0gMDsKKyAgICB9CisKKyAgICBp ZiAoazVfdTJ1X3JlYWRfbXNnKGs1X2NvbnRleHQsIGZkLCAmbXNnKSA8IDApCisgICAgICAgIHJl dHVybigtMSk7CisKKyAgICBpZiAoIG1zZy5sZW5ndGggPD0gbGVuICkgeworICAgICAgICBtZW1j cHkoYnVmLCBtc2cuZGF0YSwgbXNnLmxlbmd0aCk7CisgICAgICAgIG5yZXR1cm5lZCArPSBtc2cu bGVuZ3RoOworICAgICAgICBuc3RvcmVkID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBtZW1j cHkoYnVmLCBtc2cuZGF0YSwgbGVuKTsKKyAgICAgICAgbnJldHVybmVkICs9IGxlbjsKKworICAg ICAgICBpZiAoIG1zZy5sZW5ndGggLSBsZW4gPCBzaXplb2Yoc3RvcmFnZSkgKSB7CisgICAgICAg ICAgICBzdG9yZV9wdHIgPSBzdG9yYWdlOworICAgICAgICAgICAgbnN0b3JlZCA9IG1zZy5sZW5n dGggLSBsZW47CisgICAgICAgICAgICBtZW1jcHkoc3RvcmFnZSxtc2cuZGF0YStsZW4sbnN0b3Jl ZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuc3RvcmVkID0gMDsKKyAgICAgICAg ICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKG5yZXR1cm5lZCk7 Cit9CisKK2ludAora3JiNV91MnVfd3JpdGUoZmQsIGJ1ZiwgbGVuKQorICAgICBpbnQgZmQ7Cisg ICAgIGNoYXIgKmJ1ZjsKKyAgICAgaW50IGxlbjsKK3sKKyAgICBrcmI1X2RhdGEgbXNnOworCisg ICAgbXNnLmxlbmd0aCA9IGxlbjsKKyAgICBtc2cuZGF0YSA9IGJ1ZjsKKworICAgIGlmICggazVf dTJ1X3dyaXRlX21zZyhrNV9jb250ZXh0LCBmZCwgJm1zZykgPCAwICkKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybihsZW4pOworfQorCisjZW5kaWYgLyogS1JC NV9VMlUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZkZWYgQ0tfRk9SV0FSRF9Y CisvKgorCitDb3B5cmlnaHQgKGMpIDE5ODggIFggQ29uc29ydGl1bQorCitQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBh bmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK1ggQ09OU09SVElV TSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdI RVRIRVIgSU4KK0FOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcgRlJPTSwgT1VUIE9GIE9SIElOCitDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29u dGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxs IG5vdCBiZQordXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUg c2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzCitpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJp b3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29ydGl1bS4KKworKi8KKy8q ICBNb2RpZmllZCBmb3Igc3RhbmQtYWxvbmUgY29tcGlsaW5nIGJ5CisgKiAgUGV0ZXIgJ0x1bmEn IFJ1bmVzdGlnIDxwZXRlckBydW5lc3RpZy5jb20+CisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5o PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lz L3N0YXQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjZGVmaW5lIFRpbWVfdCB0aW1lX3QKKwordm9p ZAorWGF1RGlzcG9zZUF1dGggKGF1dGgpCitYYXV0aCAgICphdXRoOworeworICAgIGlmIChhdXRo KSB7CisgICAgICAgIGlmIChhdXRoLT5hZGRyZXNzKSAodm9pZCkgZnJlZSAoYXV0aC0+YWRkcmVz cyk7CisgICAgICAgIGlmIChhdXRoLT5udW1iZXIpICh2b2lkKSBmcmVlIChhdXRoLT5udW1iZXIp OworICAgICAgICBpZiAoYXV0aC0+bmFtZSkgKHZvaWQpIGZyZWUgKGF1dGgtPm5hbWUpOworICAg ICAgICBpZiAoYXV0aC0+ZGF0YSkgeworICAgICAgICAgICAgKHZvaWQpIGJ6ZXJvIChhdXRoLT5k YXRhLCBhdXRoLT5kYXRhX2xlbmd0aCk7CisgICAgICAgICAgICAodm9pZCkgZnJlZSAoYXV0aC0+ ZGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZSAoKGNoYXIgKikgYXV0aCk7CisgICAgfQor ICAgIHJldHVybjsKK30KKworY2hhciAqCitYYXVGaWxlTmFtZSAoKQoreworICAgIGNoYXIgKnNs YXNoRG90WGF1dGhvcml0eSA9ICIvLlhhdXRob3JpdHkiOworICAgIGNoYXIgICAgKm5hbWU7Cisg ICAgc3RhdGljIGNoYXIgKmJ1Zj1OVUxMOworICAgIHN0YXRpYyBpbnQgIGJzaXplPTA7CisgICAg aW50ICAgICBzaXplLCBuYW1lbGVuOworICAgIGV4dGVybiBjaGFyICogdG5fZndkeF94YXV0aG9y aXR5OworCisgICAgaWYgKCB0bl9md2R4X3hhdXRob3JpdHkgKQorICAgICAgICByZXR1cm4odG5f ZndkeF94YXV0aG9yaXR5KTsKKworICAgIGlmIChuYW1lID0gZ2V0ZW52ICgiWEFVVEhPUklUWSIp KQorICAgICAgICByZXR1cm4obmFtZSk7CisgICAgbmFtZSA9IHpob21lKCk7CisgICAgaWYgKCAh bmFtZSApCisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICBuYW1lbGVuID0gc3RybGVuIChuYW1l KTsKKyAgICBzaXplID0gbmFtZWxlbiArIHN0cmxlbihzbGFzaERvdFhhdXRob3JpdHkpICsgMTsK KyAgICBpZiAoc2l6ZSA+IGJzaXplKSB7CisgICAgICAgIGlmIChidWYpCisgICAgICAgICAgICBm cmVlIChidWYpOworICAgICAgICBidWYgPSBtYWxsb2MgKCh1bnNpZ25lZCkgc2l6ZSk7CisgICAg ICAgIGlmICghYnVmKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGJzaXplID0gc2l6 ZTsKKyAgICB9CisgICAgY2tzdHJuY3B5IChidWYsIG5hbWUsIGJzaXplKTsKKyAgICBpZiAoIG5h bWVbbmFtZWxlbi0xXSAhPSAnLycKKyNpZmRlZiBPUzIKKyAgICAgICAgICYmIG5hbWVbbmFtZWxl bi0xXSAhPSAnXFwnCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICApCisgICAgICAgIGNrc3Ry bmNhdCAoYnVmLCBzbGFzaERvdFhhdXRob3JpdHksIGJzaXplKTsKKyAgICBlbHNlCisgICAgICAg IGNrc3RybmNhdCAoYnVmLCAmc2xhc2hEb3RYYXV0aG9yaXR5WzFdLCBic2l6ZSk7CisgICAgcmV0 dXJuKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQKK2JpbmFyeUVxdWFsIChhLCBiLCBsZW4pCityZWdp c3RlciBjaGFyICAgKmEsICpiOworcmVnaXN0ZXIgaW50ICAgIGxlbjsKK3sKKyAgICB3aGlsZSAo bGVuLS0pCisgICAgICAgIGlmICgqYSsrICE9ICpiKyspCisgICAgICAgICAgICByZXR1cm4gMDsK KyAgICByZXR1cm4gMTsKK30KKworI2lmbmRlZiBSX09LCisjZGVmaW5lIFJfT0sgMDQKKyNlbmRp ZiAvKiBSX09LICovCisKK1hhdXRoICoKK1hhdUdldEF1dGhCeUFkZHIgKGZhbWlseSwgYWRkcmVz c19sZW5ndGgsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcl9sZW5n dGgsIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW5ndGgsIG5hbWUp Cit1bnNpZ25lZCBpbnQgICAgZmFtaWx5OwordW5zaWduZWQgaW50ICAgIGFkZHJlc3NfbGVuZ3Ro OworY29uc3QgY2hhciAgICAgICphZGRyZXNzOwordW5zaWduZWQgaW50ICAgIG51bWJlcl9sZW5n dGg7Citjb25zdCBjaGFyICAgICAgKm51bWJlcjsKK3Vuc2lnbmVkIGludCAgICBuYW1lX2xlbmd0 aDsKK2NvbnN0IGNoYXIgICAgICAqbmFtZTsKK3sKKyAgICBGSUxFICAgICphdXRoX2ZpbGU7Cisg ICAgY2hhciAgICAqYXV0aF9uYW1lOworICAgIFhhdXRoICAgKmVudHJ5OworCisgICAgYXV0aF9u YW1lID0gWGF1RmlsZU5hbWUoKTsKKyAgICBpZiAoIWF1dGhfbmFtZSkKKyAgICAgICAgcmV0dXJu IDA7CisgICAgaWYgKGFjY2VzcyAoYXV0aF9uYW1lLCBSX09LKSAhPSAwKSAgICAgICAgICAvKiBj aGVja3MgUkVBTCBpZCAqLworICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRoX2ZpbGUgPSBmb3Bl biAoYXV0aF9uYW1lLCAicmIiKTsKKyAgICBpZiAoIWF1dGhfZmlsZSkKKyAgICAgICAgcmV0dXJu IDA7CisgICAgZm9yICg7OykgeworICAgICAgICBlbnRyeSA9IFhhdVJlYWRBdXRoIChhdXRoX2Zp bGUpOworICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8q CisgICAgICAgICAqIE1hdGNoIHdoZW46CisgICAgICAgICAqICAgZWl0aGVyIGZhbWlseSBvciBl bnRyeS0+ZmFtaWx5IGFyZSBGYW1pbHlXaWxkIG9yCisgICAgICAgICAqICAgIGZhbWlseSBhbmQg ZW50cnktPmZhbWlseSBhcmUgdGhlIHNhbWUKKyAgICAgICAgICogIGFuZAorICAgICAgICAgKiAg IGVpdGhlciBhZGRyZXNzIG9yIGVudHJ5LT5hZGRyZXNzIGFyZSBlbXB0eSBvcgorICAgICAgICAg KiAgICBhZGRyZXNzIGFuZCBlbnRyeS0+YWRkcmVzcyBhcmUgdGhlIHNhbWUKKyAgICAgICAgICog IGFuZAorICAgICAgICAgKiAgIGVpdGhlciBudW1iZXIgb3IgZW50cnktPm51bWJlciBhcmUgZW1w dHkgb3IKKyAgICAgICAgICogICAgbnVtYmVyIGFuZCBlbnRyeS0+bnVtYmVyIGFyZSB0aGUgc2Ft ZQorICAgICAgICAgKiAgYW5kCisgICAgICAgICAqICAgZWl0aGVyIG5hbWUgb3IgZW50cnktPm5h bWUgYXJlIGVtcHR5IG9yCisgICAgICAgICAqICAgIG5hbWUgYW5kIGVudHJ5LT5uYW1lIGFyZSB0 aGUgc2FtZQorICAgICAgICAgKi8KKworLyogICAgICBpZiAoKGZhbWlseSA9PSBGYW1pbHlXaWxk IHx8IGVudHJ5LT5mYW1pbHkgPT0gRmFtaWx5V2lsZCB8fAorICAgICAgICAgICAgIChlbnRyeS0+ ZmFtaWx5ID09IGZhbWlseSAmJgorICAgICAgICAgICAgICBhZGRyZXNzX2xlbmd0aCA9PSBlbnRy eS0+YWRkcmVzc19sZW5ndGggJiYKKyAgICAgICAgICAgICAgYmluYXJ5RXF1YWwgKGVudHJ5LT5h ZGRyZXNzLCBhZGRyZXNzLCAoaW50KWFkZHJlc3NfbGVuZ3RoKSkpICYmCisgICAgICAgICAgICAo bnVtYmVyX2xlbmd0aCA9PSAwIHx8IGVudHJ5LT5udW1iZXJfbGVuZ3RoID09IDAgfHwKKyAgICAg ICAgICAgICAobnVtYmVyX2xlbmd0aCA9PSBlbnRyeS0+bnVtYmVyX2xlbmd0aCAmJgorICAgICAg ICAgICAgICBiaW5hcnlFcXVhbCAoZW50cnktPm51bWJlciwgbnVtYmVyLCAoaW50KW51bWJlcl9s ZW5ndGgpKSkgJiYKKyAgICAgICAgICAgIChuYW1lX2xlbmd0aCA9PSAwIHx8IGVudHJ5LT5uYW1l X2xlbmd0aCA9PSAwIHx8CisgICAgICAgICAgICAgKGVudHJ5LT5uYW1lX2xlbmd0aCA9PSBuYW1l X2xlbmd0aCAmJgorICAgICAgICAgICAgICBiaW5hcnlFcXVhbCAoZW50cnktPm5hbWUsIG5hbWUs IChpbnQpbmFtZV9sZW5ndGgpKSkpICovCisgICAgICAgIC8qIHRoZSBvcmlnaW5hbCBtYXRjaGlu ZyBjb2RlIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byBtZWV0IHRoZSBtYXRjaGluZworICAgICAgICAg KiBhbGdvcml0aG0sIGl0IGRvZXNuJ3QgY2hlY2sgaWYgImFkZHJlc3NfbGVuZ3RoID09IDAgfHwK KyAgICAgICAgICogZW50cnktPmFkZHJlc3NfbGVuZ3RoID09IDAiLiAvIEx1bmEgMjAwMC0wMi0w OQorICAgICAgICAgKi8KKyAgICAgICAgaWYgKChmYW1pbHkgPT0gRmFtaWx5V2lsZCB8fCBlbnRy eS0+ZmFtaWx5ID09IEZhbWlseVdpbGQgfHwKKyAgICAgICAgICAgICAgZW50cnktPmZhbWlseSA9 PSBmYW1pbHkpICYmCisgICAgICAgICAgICAoYWRkcmVzc19sZW5ndGggPT0gMCB8fCBlbnRyeS0+ YWRkcmVzc19sZW5ndGggPT0gMCB8fAorICAgICAgICAgICAgICAoYWRkcmVzc19sZW5ndGggPT0g ZW50cnktPmFkZHJlc3NfbGVuZ3RoICYmCisgICAgICAgICAgICAgIGJpbmFyeUVxdWFsIChlbnRy eS0+YWRkcmVzcywgYWRkcmVzcywgKGludClhZGRyZXNzX2xlbmd0aCkpKSAmJgorICAgICAgICAg ICAgKG51bWJlcl9sZW5ndGggPT0gMCB8fCBlbnRyeS0+bnVtYmVyX2xlbmd0aCA9PSAwIHx8Cisg ICAgICAgICAgICAgKG51bWJlcl9sZW5ndGggPT0gZW50cnktPm51bWJlcl9sZW5ndGggJiYKKyAg ICAgICAgICAgICAgYmluYXJ5RXF1YWwgKGVudHJ5LT5udW1iZXIsIG51bWJlciwgKGludCludW1i ZXJfbGVuZ3RoKSkpICYmCisgICAgICAgICAgICAobmFtZV9sZW5ndGggPT0gMCB8fCBlbnRyeS0+ bmFtZV9sZW5ndGggPT0gMCB8fAorICAgICAgICAgICAgIChlbnRyeS0+bmFtZV9sZW5ndGggPT0g bmFtZV9sZW5ndGggJiYKKyAgICAgICAgICAgICAgYmluYXJ5RXF1YWwgKGVudHJ5LT5uYW1lLCBu YW1lLCAoaW50KW5hbWVfbGVuZ3RoKSkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFhh dURpc3Bvc2VBdXRoIChlbnRyeSk7CisgICAgfQorICAgICh2b2lkKSBmY2xvc2UgKGF1dGhfZmls ZSk7CisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50CityZWFkX3Nob3J0IChzaG9y dHAsIGZpbGUpCit1bnNpZ25lZCBzaG9ydCAgKnNob3J0cDsKK0ZJTEUgICAgICAgICAgICAqZmls ZTsKK3sKKyAgICB1bnNpZ25lZCBjaGFyICAgZmlsZV9zaG9ydFsyXTsKKworICAgIGlmIChmcmVh ZCAoKGNoYXIgKikgZmlsZV9zaG9ydCwgKGludCkgc2l6ZW9mIChmaWxlX3Nob3J0KSwgMSwgZmls ZSkgIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgKnNob3J0cCA9IGZpbGVfc2hvcnRbMF0g KiAyNTYgKyBmaWxlX3Nob3J0WzFdOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50City ZWFkX2NvdW50ZWRfc3RyaW5nIChjb3VudHAsIHN0cmluZ3AsIGZpbGUpCit1bnNpZ25lZCBzaG9y dCAgKmNvdW50cDsKK2NoYXIgICAgKipzdHJpbmdwOworRklMRSAgICAqZmlsZTsKK3sKKyAgICB1 bnNpZ25lZCBzaG9ydCAgbGVuOworICAgIGNoYXIgICAgICAgICAgICAqZGF0YTsKKworICAgIGlm IChyZWFkX3Nob3J0ICgmbGVuLCBmaWxlKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp ZiAobGVuID09IDApIHsKKyAgICAgICAgZGF0YSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg ZGF0YSA9IG1hbGxvYyAoKHVuc2lnbmVkKSBsZW4pOworICAgICAgICBpZiAoIWRhdGEpCisgICAg ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGZyZWFkIChkYXRhLCAoaW50KSBzaXplb2Yg KGNoYXIpLCAoaW50KSBsZW4sIGZpbGUpICE9IGxlbikgeworICAgICAgICAgICAgYnplcm8gKGRh dGEsIGxlbik7CisgICAgICAgICAgICBmcmVlIChkYXRhKTsKKyAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICB9CisgICAgfQorICAgICpzdHJpbmdwID0gZGF0YTsKKyAgICAqY291bnRwID0g bGVuOworICAgIHJldHVybiAxOworfQorCitYYXV0aCAqCitYYXVSZWFkQXV0aCAoYXV0aF9maWxl KQorRklMRSAgICAqYXV0aF9maWxlOworeworICAgIFhhdXRoICAgbG9jYWw7CisgICAgWGF1dGgg ICAqcmV0OworCisgICAgaWYgKHJlYWRfc2hvcnQgKCZsb2NhbC5mYW1pbHksIGF1dGhfZmlsZSkg PT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHJlYWRfY291bnRlZF9zdHJpbmcgKCZs b2NhbC5hZGRyZXNzX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2Fs LmFkZHJlc3MsIGF1dGhfZmlsZSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHJl YWRfY291bnRlZF9zdHJpbmcgKCZsb2NhbC5udW1iZXJfbGVuZ3RoLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmbG9jYWwubnVtYmVyLCBhdXRoX2ZpbGUpID09IDApIHsKKyAgICAgICAg aWYgKGxvY2FsLmFkZHJlc3MpIGZyZWUgKGxvY2FsLmFkZHJlc3MpOworICAgICAgICByZXR1cm4g MDsKKyAgICB9CisgICAgaWYgKHJlYWRfY291bnRlZF9zdHJpbmcgKCZsb2NhbC5uYW1lX2xlbmd0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsLm5hbWUsIGF1dGhfZmlsZSkg PT0gMCkgeworICAgICAgICBpZiAobG9jYWwuYWRkcmVzcykgZnJlZSAobG9jYWwuYWRkcmVzcyk7 CisgICAgICAgIGlmIChsb2NhbC5udW1iZXIpIGZyZWUgKGxvY2FsLm51bWJlcik7CisgICAgICAg IHJldHVybiAwOworICAgIH0KKyAgICBpZiAocmVhZF9jb3VudGVkX3N0cmluZyAoJmxvY2FsLmRh dGFfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWwuZGF0YSwgYXV0 aF9maWxlKSA9PSAwKSB7CisgICAgICAgIGlmIChsb2NhbC5hZGRyZXNzKSBmcmVlIChsb2NhbC5h ZGRyZXNzKTsKKyAgICAgICAgaWYgKGxvY2FsLm51bWJlcikgZnJlZSAobG9jYWwubnVtYmVyKTsK KyAgICAgICAgaWYgKGxvY2FsLm5hbWUpIGZyZWUgKGxvY2FsLm5hbWUpOworICAgICAgICByZXR1 cm4gMDsKKyAgICB9CisgICAgcmV0ID0gKFhhdXRoICopIG1hbGxvYyAoc2l6ZW9mIChYYXV0aCkp OworICAgIGlmICghcmV0KSB7CisgICAgICAgIGlmIChsb2NhbC5hZGRyZXNzKSBmcmVlIChsb2Nh bC5hZGRyZXNzKTsKKyAgICAgICAgaWYgKGxvY2FsLm51bWJlcikgZnJlZSAobG9jYWwubnVtYmVy KTsKKyAgICAgICAgaWYgKGxvY2FsLm5hbWUpIGZyZWUgKGxvY2FsLm5hbWUpOworICAgICAgICBp ZiAobG9jYWwuZGF0YSkgeworICAgICAgICAgICAgYnplcm8gKGxvY2FsLmRhdGEsIGxvY2FsLmRh dGFfbGVuZ3RoKTsKKyAgICAgICAgICAgIGZyZWUgKGxvY2FsLmRhdGEpOworICAgICAgICB9Cisg ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAqcmV0ID0gbG9jYWw7CisgICAgcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludAord3JpdGVfc2hvcnQgKHMsIGZpbGUpCit1bnNpZ25lZCBzaG9y dCAgczsKK0ZJTEUgICAgICAgICAgICAqZmlsZTsKK3sKKyAgICB1bnNpZ25lZCBjaGFyICAgZmls ZV9zaG9ydFsyXTsKKworICAgIGZpbGVfc2hvcnRbMF0gPSAocyAmICh1bnNpZ25lZCkweGZmMDAp ID4+IDg7CisgICAgZmlsZV9zaG9ydFsxXSA9IHMgJiAweGZmOworICAgIGlmIChmd3JpdGUgKChj aGFyICopIGZpbGVfc2hvcnQsIChpbnQpIHNpemVvZiAoZmlsZV9zaG9ydCksIDEsIGZpbGUpICE9 IDEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3 cml0ZV9jb3VudGVkX3N0cmluZyAoY291bnQsIHN0cmluZywgZmlsZSkKK3Vuc2lnbmVkIHNob3J0 ICBjb3VudDsKK2NoYXIgICAgKnN0cmluZzsKK0ZJTEUgICAgKmZpbGU7Cit7CisgICAgaWYgKHdy aXRlX3Nob3J0IChjb3VudCwgZmlsZSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg KGZ3cml0ZSAoc3RyaW5nLCAoaW50KSBzaXplb2YgKGNoYXIpLCAoaW50KSBjb3VudCwgZmlsZSkg IT0gY291bnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAxOworfQorCitpbnQKK1hh dVdyaXRlQXV0aCAoYXV0aF9maWxlLCBhdXRoKQorRklMRSAgICAqYXV0aF9maWxlOworWGF1dGgg ICAqYXV0aDsKK3sKKyAgICBpZiAod3JpdGVfc2hvcnQgKGF1dGgtPmZhbWlseSwgYXV0aF9maWxl KSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAod3JpdGVfY291bnRlZF9zdHJpbmcg KGF1dGgtPmFkZHJlc3NfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0 aC0+YWRkcmVzcywgYXV0aF9maWxlKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAo d3JpdGVfY291bnRlZF9zdHJpbmcgKGF1dGgtPm51bWJlcl9sZW5ndGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhdXRoLT5udW1iZXIsIGF1dGhfZmlsZSkgPT0gMCkKKyAgICAgICAg cmV0dXJuIDA7CisgICAgaWYgKHdyaXRlX2NvdW50ZWRfc3RyaW5nIChhdXRoLT5uYW1lX2xlbmd0 aCwgYXV0aC0+bmFtZSwgYXV0aF9maWxlKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBp ZiAod3JpdGVfY291bnRlZF9zdHJpbmcgKGF1dGgtPmRhdGFfbGVuZ3RoLCBhdXRoLT5kYXRhLCBh dXRoX2ZpbGUpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAxOworfQorCisj aWZkZWYgS1JCNQorI2lmZGVmIEs1X1hBVVRICisvKgorICogZnVuY3Rpb25zIHRvIGVuY29kZS9k ZWNvZGUgS2VyYmVyb3MgVjUgcHJpbmNpcGFscworICogaW50byBzb21ldGhpbmcgdGhhdCBjYW4g YmUgcmVhc29uYWJsZSBzcGV3ZWQgb3ZlcgorICogdGhlIHdpcmUKKyAqCisgKiBBdXRob3I6IFRv bSBZdSA8dGx5dUBNSVQuRURVPgorICoKKyAqIFN0aWxsIG5lZWRzIHRvIGJlIGZpeGVkIHVwIHdy dCBzaWduZWQvdW5zaWduZWQgbGVuZ3RocywgYnV0IHdlJ2xsIHdvcnJ5CisgKiBhYm91dCB0aGF0 IGxhdGVyLgorICovCisKKy8qCisgKiBYYXVLcmI1RW5jb2RlCisgKgorICogdGhpcyBmdW5jdGlv biBlbmNvZGVzIHRoZSBwcmluY2lwYWwgcGFzc2VkIHRvIGl0IGluIGEgZm9ybWF0IHRoYXQgY2Fu CisgKiBlYXNpbHkgYmUgZGVhbHQgd2l0aCBieSBzdHVmZmluZyBpdCBpbnRvIGFuIFggcGFja2V0 LiAgRW5jb2RpbmcgaXMgYXMKKyAqIGZvbGxvd3M6CisgKiAgIGxlbmd0aCBjb3VudCBvZiB0aGUg cmVhbG0gbmFtZQorICogICByZWFsbQorICogICBjb21wb25lbnQgY291bnQKKyAqICAgbGVuZ3Ro IG9mIGNvbXBvbmVudAorICogICBhY3R1YWwgcHJpbmNpcGFsIGNvbXBvbmVudAorICogICBldGMu Li4uCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGEgaHVuayBvZiBt ZW1vcnksIHdoaWNoIG11c3QgYmUKKyAqIGZyZWVkIHRvIGF2b2lkIG5hc3R5IG1lbW9yeSBsZWFr IHR5cGUgdGhpbmdzLiAgQWxsIGNvdW50cyBhcmUKKyAqIGJ5dGUtc3dhcHBlZCBpZiBuZWVkZWQu IChleGNlcHQgZm9yIHRoZSB0b3RhbCBsZW5ndGggcmV0dXJuZWQpCisgKgorICogbmV2ZXJtaW5k Li4uLiBzdHVmZmluZyB0aGUgZW5jb2RlZCBwYWNrZXQgaW4gbmV0IGJ5dGUgb3JkZXIganVzdCB0 bworICogYWx3YXlzIGRvIHRoZSByaWdodCB0aGluZy4gIERvbid0IGhhdmUgdG8gZnJvYiB3aXRo IGFsaWdubWVudCB0aGF0IHdheS4KKyAqLworaW50CitYYXVLcmI1RW5jb2RlKHByaW5jLCBvdXRi dWYpCisgICAga3JiNV9wcmluY2lwYWwgcHJpbmM7ICAgICAgIC8qIHByaW5jaXBhbCB0byBlbmNv ZGUgKi8KKyAgICBrcmI1X2RhdGEgKm91dGJ1ZjsgICAgICAgICAgLyogb3V0cHV0IGJ1ZmZlciAq LworeworICAgIENBUkQxNiBpLCBudW1wYXJ0cywgdG90bGVuID0gMCwgcGxlbiwgcmxlbjsKKyAg ICBjaGFyICpjcCwgKnBkYXRhOworCisgICAgcmxlbiA9IGtyYjVfcHJpbmNfcmVhbG0ocHJpbmMp LT5sZW5ndGg7CisgICAgbnVtcGFydHMgPSBrcmI1X3ByaW5jX3NpemUocHJpbmMpOworICAgIHRv dGxlbiA9IDIgKyBybGVuICsgMjsgICAgICAvKiBpbmNsdWRlIHJvb20gZm9yIHJlYWxtIGxlbmd0 aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgY29tcG9uZW50IGNvdW50 ICovCisgICAgZm9yIChpID0gMDsgaSA8IG51bXBhcnRzOyBpKyspCisgICAgICAgIHRvdGxlbiAr PSBrcmI1X3ByaW5jX2NvbXBvbmVudChwcmluYywgaSktPmxlbmd0aCArIDI7CisgICAgLyogYWRk IDIgYnl0ZXMgZWFjaCB0aW1lIGZvciBsZW5ndGggKi8KKyAgICBpZiAoKG91dGJ1Zi0+ZGF0YSA9 IChjaGFyICopbWFsbG9jKHRvdGxlbikpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAg ICBjcCA9IG91dGJ1Zi0+ZGF0YTsKKyAgICAqY3ArKyA9IChjaGFyKSgoaW50KSgweGZmMDAgJiBy bGVuKSA+PiA4KTsKKyAgICAqY3ArKyA9IChjaGFyKSgweDAwZmYgJiBybGVuKTsKKyAgICBtZW1j cHkoY3AsIGtyYjVfcHJpbmNfcmVhbG0ocHJpbmMpLT5kYXRhLCBybGVuKTsgICAgLyogc2FmZSAq LworICAgIGNwICs9IHJsZW47CisgICAgKmNwKysgPSAoY2hhcikoKGludCkoMHhmZjAwICYgbnVt cGFydHMpID4+IDgpOworICAgICpjcCsrID0gKGNoYXIpKDB4MDBmZiAmIG51bXBhcnRzKTsKKyAg ICBmb3IgKGkgPSAwOyBpIDwgbnVtcGFydHM7IGkrKykKKyAgICB7CisgICAgICAgIHBsZW4gPSBr cmI1X3ByaW5jX2NvbXBvbmVudChwcmluYywgaSktPmxlbmd0aDsKKyAgICAgICAgcGRhdGEgPSBr cmI1X3ByaW5jX2NvbXBvbmVudChwcmluYywgaSktPmRhdGE7CisgICAgICAgICpjcCsrID0gKGNo YXIpKChpbnQpKDB4ZmYwMCAmIHBsZW4pID4+IDgpOworICAgICAgICAqY3ArKyA9IChjaGFyKSgw eDAwZmYgJiBwbGVuKTsKKyAgICAgICAgbWVtY3B5KGNwLCBwZGF0YSwgcGxlbik7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogc2FmZSAqLworICAgICAgICBjcCArPSBwbGVuOworICAgIH0KKyAg ICBvdXRidWYtPmxlbmd0aCA9IHRvdGxlbjsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFhh dUtyYjVEZWNvZGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVzc2VudGlhbGx5IHJldmVyc2VzIHdo YXQgWGF1S3JiNUVuY29kZSBkb2VzLgorICogcmV0dXJuIHZhbHVlOiAwIGlmIG9rYXksIC0xIGlm IG1hbGxvYyBmYWlscywgLTIgaWYgaW5idWYgZm9ybWF0IGJhZAorICovCitpbnQKK1hhdUtyYjVE ZWNvZGUoaW5idWYsIHByaW5jKQorICAgIGtyYjVfZGF0YSBpbmJ1ZjsKKyAgICBrcmI1X3ByaW5j aXBhbCAqcHJpbmM7Cit7CisgICAgQ0FSRDE2IGksIG51bXBhcnRzLCBwbGVuLCBybGVuOworICAg IENBUkQ4ICpjcCwgKnBkYXRhOworCisgICAgaWYgKGluYnVmLmxlbmd0aCA8IDQpCisgICAgewor ICAgICAgICByZXR1cm4gLTI7CisgICAgfQorICAgICpwcmluYyA9IChrcmI1X3ByaW5jaXBhbClt YWxsb2Moc2l6ZW9mIChrcmI1X3ByaW5jaXBhbF9kYXRhKSk7CisgICAgaWYgKCpwcmluYyA9PSBO VUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgYnplcm8oKnByaW5jLCBzaXplb2YgKGtyYjVf cHJpbmNpcGFsX2RhdGEpKTsKKyAgICBjcCA9IChDQVJEOCAqKWluYnVmLmRhdGE7CisgICAgcmxl biA9ICpjcCsrIDw8IDg7CisgICAgcmxlbiB8PSAqY3ArKzsKKyAgICBpZiAoaW5idWYubGVuZ3Ro IDwgNCArIChpbnQpcmxlbiArIDIpCisgICAgeworICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFs KCpwcmluYyk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgICAga3JiNV9wcmluY19yZWFs bSgqcHJpbmMpLT5kYXRhID0gKGNoYXIgKiltYWxsb2Mocmxlbik7CisgICAgaWYgKGtyYjVfcHJp bmNfcmVhbG0oKnByaW5jKS0+ZGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAga3JiNV9mcmVl X3ByaW5jaXBhbCgqcHJpbmMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGtyYjVf cHJpbmNfcmVhbG0oKnByaW5jKS0+bGVuZ3RoID0gcmxlbjsKKyAgICBtZW1jcHkoa3JiNV9wcmlu Y19yZWFsbSgqcHJpbmMpLT5kYXRhLCBjcCwgcmxlbik7ICAgLyogc2FmZSAqLworICAgIGNwICs9 IHJsZW47CisgICAgbnVtcGFydHMgPSAqY3ArKyA8PCA4OworICAgIG51bXBhcnRzIHw9ICpjcCsr OworICAgIGtyYjVfcHJpbmNfbmFtZSgqcHJpbmMpID0KKyAgICAgICAgKGtyYjVfZGF0YSAqKW1h bGxvYyhudW1wYXJ0cyAqIHNpemVvZiAoa3JiNV9kYXRhKSk7CisgICAgaWYgKGtyYjVfcHJpbmNf bmFtZSgqcHJpbmMpID09IE5VTEwpCisgICAgeworICAgICAgICBrcmI1X2ZyZWVfcHJpbmNpcGFs KCpwcmluYyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAga3JiNV9wcmluY19zaXpl KCpwcmluYykgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1wYXJ0czsgaSsrKQorICAgIHsK KyAgICAgICAgaWYgKGNwICsgMiA+IChDQVJEOCAqKWluYnVmLmRhdGEgKyBpbmJ1Zi5sZW5ndGgp CisgICAgICAgIHsKKyAgICAgICAgICAgIGtyYjVfZnJlZV9wcmluY2lwYWwoKnByaW5jKTsKKyAg ICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgICAgICBwbGVuID0gKmNwKysgPDwg ODsKKyAgICAgICAgcGxlbiB8PSAqY3ArKzsKKyAgICAgICAgaWYgKGNwICsgcGxlbiA+IChDQVJE OCAqKWluYnVmLmRhdGEgKyBpbmJ1Zi5sZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGty YjVfZnJlZV9wcmluY2lwYWwoKnByaW5jKTsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAg ICAgfQorICAgICAgICBwZGF0YSA9IChDQVJEOCAqKW1hbGxvYyhwbGVuKTsKKyAgICAgICAgaWYg KHBkYXRhID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGtyYjVfZnJlZV9wcmluY2lw YWwoKnByaW5jKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBr cmI1X3ByaW5jX2NvbXBvbmVudCgqcHJpbmMsIGkpLT5kYXRhID0gKGNoYXIgKilwZGF0YTsKKyAg ICAgICAga3JiNV9wcmluY19jb21wb25lbnQoKnByaW5jLCBpKS0+bGVuZ3RoID0gcGxlbjsKKyAg ICAgICAgbWVtY3B5KHBkYXRhLCBjcCwgcGxlbik7ICAgICAgICAvKiBzYWZlICovCisgICAgICAg IGNwICs9IHBsZW47CisgICAgICAgIGtyYjVfcHJpbmNfc2l6ZSgqcHJpbmMpKys7CisgICAgfQor ICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIEs1X1hBVVRIICovCisjZW5kaWYgLyogS1JCNSAq LworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9O ICovCisKKy8qIEMgSyBfIEEgVSBUIEggXyBJIE4gSSBUCisgKiBJbml0aWFsaXplIHRoZSBLZXJi ZXJvcyBzeXN0ZW0gZm9yIGEgcGVuZGluZyBjb25uZWN0aW9uCisgKiAgIGhvc3RuYW1lIC0gYSBy ZXZlcnNlIEROUyBsb29rdXAgb2YgdGhlIGhvc3RuYW1lIHdoZW4gcG9zc2libGUKKyAqICAgaXBh ZGRyICAgLSB0aGUgaXAgYWRkcmVzcyBvZiB0aGUgaG9zdAorICogICB1c2VybmFtZSAtIHRoZSBu YW1lIHRoZSB1c2VyIHdhbnRzIHRvIGNvbm5lY3QgdW5kZXIgbm90IG5lY2Vzc2FyaWx5CisgKiAg ICAgICAgICAgICAgdGhlIHNhbWUgYXMgcHJpbmNpcGFsCisgKiAgIHNvY2tldCAgIC0gdGhlIHNv Y2tldCBoYW5kbGUgKHR0eWZkIGluIEtlcm1pdCBzcGVhaykKKyAqCisgKiBSZXR1cm5zOiAxIG9u IHN1Y2Nlc3MgYW5kIDAgb24gZmFpbHVyZQorICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitj a19hdXRoX2luaXQoIGNoYXIgKiBob3N0bmFtZSwgY2hhciAqIGlwYWRkciwgY2hhciAqIHVzZXJu YW1lLCBpbnQgc29ja2V0ICkKKyNlbHNlIC8qIENLX0FOU0lDICovCitja19hdXRoX2luaXQoIGhv c3RuYW1lLCBpcGFkZHIsIHVzZXJuYW1lLCBzb2NrZXQgKQorICAgIGNoYXIgKiBob3N0bmFtZTsg Y2hhciAqIGlwYWRkcjsgY2hhciAqdXNlcm5hbWU7IGludCBzb2NrZXQ7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorI2lmZGVmIE9TMgorICAgIGlm ICggIWNrX3NlY3VyaXR5X2xvYWRkbGwoKSApIHsKKyAgICAgICAgVEVMT1BUX01FX01PREUoVEVM T1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JGOworICAgICAgICBURUxPUFRfVV9NT0RFKFRF TE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19SRjsKKyAgICAgICAgcmV0dXJuKDApOworICAg IH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBSVRPTiAqLworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoICEhY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCkgKSB7 CisgICAgICAgIFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOwor ICAgICAgICBURUxPUFRfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworICAg IH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisKKyAgICBpZiAoIWhvc3RuYW1lKSBob3N0 bmFtZSA9ICIiOworICAgIGlmICghaXBhZGRyKSBpcGFkZHIgPSAiIjsKKyAgICBpZiAoIXVzZXJu YW1lKSB1c2VybmFtZSA9ICIiOworCisgICAgZGVidWcoRjExMCwiY2tfYXV0aF9pbml0IFVzZXJu YW1lIix1c2VybmFtZSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJja19hdXRoX2luaXQgSG9zdG5hbWUi LGhvc3RuYW1lLDApOworICAgIGRlYnVnKEYxMTAsImNrX2F1dGhfaW5pdCBJcGFkZHIiLGlwYWRk ciwwKTsKKworICAgIGNrc3RybmNweSggc3pVc2VyTmFtZSwgdXNlcm5hbWUsIFVJREJVRkxFTiAp OworICAgIGNrc3RybmNweSggc3pIb3N0TmFtZSwgaG9zdG5hbWUsIFVJREJVRkxFTiApOworICAg IGNrc3RybmNweSggc3pJUCwgaXBhZGRyLCAxNiApOworICAgIHN6VXNlck5hbWVSZXF1ZXN0ZWRb MF0gPSAnXDAnOworICAgIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkWzBdID0gJ1wwJzsKKyAgICB2 YWxpZFVzZXIgPSBBVVRIX1JFSkVDVDsKKyAgICBhY2NlcHRfY29tcGxldGUgPSAwOworICAgIGF1 dGhlbnRpY2F0aW9uX3ZlcnNpb24gPSBBVVRIVFlQRV9OVUxMOworCisjaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KKyAgICBhdXRoX2hvdyA9IDA7CisgICAgYXV0aF9jcnlwdCA9IDA7CisgICAgYXV0 aF9md2QgPSAwOworICAgIG11dHVhbF9jb21wbGV0ZSA9IDA7CisgICAgaWYgKCBzc3RlbG5ldCAp CisgICAgICAgIHN0cl9kYXRhWzNdID0gVEVMUVVBTF9SRVBMWTsKKyAgICBlbHNlCisgICAgICAg IHN0cl9kYXRhWzNdID0gVEVMUVVBTF9JUzsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAq LworCisjaWZkZWYgQ0tfU1JQCisgICAgc3JwX3dhaXRyZXNwID0gMDsKKyNlbmRpZiAvKiBTUlAg Ki8KKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNQorICAgIC8qIGZyZWUgcHJldmlv dXMgcmV0X2NyZWQgICovCisgICAgaWYgKCByZXRfY3JlZCApIHsKKyNpZmRlZiBDS19FTkNSWVBU SU9OCisjaWZkZWYgSEVJTURBTAorICAgICAgICBpZiAoIGs1X3Nlc3Npb25fa2V5ID09ICZyZXRf Y3JlZC0+c2Vzc2lvbikKKyAgICAgICAgICAgIGs1X3Nlc3Npb25fa2V5ID0gTlVMTDsKKyNlbHNl IC8qIEhFSU1EQUwgKi8KKyAgICAgICAgaWYgKCBrNV9zZXNzaW9uX2tleSA9PSAmcmV0X2NyZWQt PmtleWJsb2NrKQorICAgICAgICAgICAgazVfc2Vzc2lvbl9rZXkgPSBOVUxMOworI2VuZGlmIC8q IEhFSU1EQUwgKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgIGtyYjVfZnJl ZV9jcmVkcyhrNV9jb250ZXh0LCByZXRfY3JlZCk7CisgICAgICAgIHJldF9jcmVkID0gTlVMTDsK KyAgICB9CisgICAgaWYgKGs1X3RpY2tldCkgeworICAgICAgICBrcmI1X2ZyZWVfdGlja2V0KGs1 X2NvbnRleHQsIGs1X3RpY2tldCk7CisgICAgICAgIGs1X3RpY2tldCA9IE5VTEw7CisgICAgfQor ICAgIC8qIGFuZCBjb250ZXh0ICovCisgICAgaWYgKCBrNV9jb250ZXh0ICkgeworICAgICAgICBr cmI1X2ZyZWVfY29udGV4dChrNV9jb250ZXh0KTsKKyAgICAgICAgazVfY29udGV4dCA9IE5VTEw7 CisgICAgfQorCisgICAgLyogY3JlYXRlIGs1X2NvbnRleHQgKi8KKyAgICBrcmI1X2luaXRfY29u dGV4dCgmazVfY29udGV4dCk7CisjaWZuZGVmIE1JVF9DVVJSRU5UCisjaWZuZGVmIE5PX0tSQjVf SU5JVF9FVFMKKy8qIFRoaXMgcm91dGluZSBpcyBhIG5vLW9wIGluIEtlcmJlcm9zIDEuNC54IGFu ZCBsYXRlciAqLworLyogYW5kIGluIHNvbWUgaW5zdGFsbGF0aW9ucyBpdCBjYW4ndCBiZSBmb3Vu ZCBpbiB3aGljaCBjYXNlICovCisvKiBkZWZpbmUgTk9fS1JCNV9JTklUX0VUUyAqLworICAgIGlm IChrNV9jb250ZXh0KQorICAgICAgICBrcmI1X2luaXRfZXRzKGs1X2NvbnRleHQpOworI2VuZGlm CS8qIE5PX0tSQjVfSU5JVF9FVFMgKi8KKyNlbmRpZiAvKiBNSVRfQ1VSUkVOVCAqLworI2lmZGVm IEtSQjUyNF9DT05WCisgICAga3JiNTI0X2luaXRfZXRzKGs1X2NvbnRleHQpOworI2VuZGlmIC8q IEtSQjUyNF9DT05WICovCisgICAgbWVtc2V0KCZrNV9hdXRoLDAsc2l6ZW9mKGs1X2F1dGgpKTsK KyAgICBpZiAoYXV0aF9jb250ZXh0KSB7CisgICAgICAgIGtyYjVfYXV0aF9jb25fZnJlZShrNV9j b250ZXh0LCBhdXRoX2NvbnRleHQpOworICAgICAgICBhdXRoX2NvbnRleHQgPSAwOworICAgIH0K KyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKGs1X3Nlc3Npb25fa2V5KSB7CisgICAgICAg IGtyYjVfZnJlZV9rZXlibG9jayhrNV9jb250ZXh0LCBrNV9zZXNzaW9uX2tleSk7CisgICAgICAg IGs1X3Nlc3Npb25fa2V5ID0gMDsKKyAgICB9CisjZW5kaWYgLyogRU5DUllQVElPTiAqLworI2lm ZGVmIFRMU19WRVJJRlkKKyAgICBrcmI1X3Rsc192ZXJpZmllZCA9IDA7CisjZW5kaWYgLyogVExT X1ZFUklGWSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKworI2lmZGVmIEtSQjQKKyNpZmRlZiBDS19F TkNSWVBUSU9OCisgICAgLyogSW5pdGlhbGl6ZSBidWZmZXJzIHVzZWQgZm9yIGF1dGhlbnRpY2F0 aW9uICovCisgICAgbWVtc2V0KCZrNF9zZXNzaW9uX2tleSwgMCwgc2l6ZW9mKGs0X3Nlc3Npb25f a2V5KSk7CisgICAgbWVtc2V0KCZrNF9jaGFsbGVuZ2UsIDAsIHNpemVvZihrNF9jaGFsbGVuZ2Up KTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogS1JCNCAqLworCisjaWZk ZWYgUkxPR0NPREUKKyAgICBybG9nX2VuY3J5cHQgPSAwOworI2VuZGlmIC8qIFJMT0dDT0RFICov CisgICAgbnN0b3JlZCA9IDA7CisgICAgc3RvcmVfcHRyID0gc3RvcmFnZTsKKyAgICBtZW1zZXQo c3RvcmFnZSwwLHNpemVvZihzdG9yYWdlKSk7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKwor I2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBrc3RyZWFtX2Rlc3Ryb3koKTsKKyAgICBpZiAoIWtz dHJlYW1fY3JlYXRlX2Zyb21fZmQoc29ja2V0LCBOVUxMKSkKKyAgICAgICAgcmV0dXJuKDApOwor I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICByZXR1cm4oMSk7Cit9CisKK3ZvaWQKK2F1 dGhfZmluaXNoZWQocmVzdWx0KSBpbnQgcmVzdWx0OyB7CisgICAgZXh0ZXJuIGNoYXIgdWlkYnVm W107CisgICAgZXh0ZXJuIGludCBzc3RlbG5ldDsKKworICAgIHZhbGlkVXNlciA9IHJlc3VsdDsK KyAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgQVVUSF9SRUpFQ1Q6ICAgICAgICAgICAv KiBSZWplY3RlZCAqLworICAgICAgICBpZiAoc3N0ZWxuZXQpCisgICAgICAgICAgICB1aWRidWZb MF0gPSAnXDAnOworICAgICAgICBhdXRoZW50aWNhdGlvbl92ZXJzaW9uID0gQVVUSFRZUEVfTlVM TDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBVVRIX1VOS05PV046ICAgICAgICAgIC8qIFdl IGRvbid0IGtub3cgd2hvIGhlIGlzLCBidXQgaGUncyBva2F5ICovCisgICAgICAgIGlmIChzc3Rl bG5ldCkKKyAgICAgICAgICAgIHN0cmNweSh1aWRidWYsIih1bmtub3duKSIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEFVVEhfT1RIRVI6ICAgICAgICAgICAgLyogV2Uga25vdyBoaW0sIGJ1 dCBub3QgaGlzIG5hbWUgKi8KKyAgICAgICAgaWYgKHNzdGVsbmV0KQorICAgICAgICAgICAgc3Ry Y3B5KHVpZGJ1ZiwiKG90aGVyKSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFVVEhfVVNF UjogICAgICAgICAgICAgLyogV2Uga25vdyBoZSBuYW1lICovCisgICAgY2FzZSBBVVRIX1ZBTElE OiAgICAgICAgICAgIC8qIFdlIGtub3cgaGltLCBhbmQgaGUgbmVlZHMgbm8gcGFzc3dvcmQgKi8K KyAgICAgICAgaWYgKHNzdGVsbmV0KQorICAgICAgICAgICAgc3RyY3B5KHVpZGJ1ZixzelVzZXJO YW1lUmVxdWVzdGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisjaWZkZWYgTUFDT1NY CisjaWZkZWYgS1JCNQorCitrcmI1X2Vycm9yX2NvZGUKK2NrX2tyYjVfd3JpdGVfbWVzc2FnZShr cmI1X2NvbnRleHQgY29uLCBrcmI1X3BvaW50ZXIgcHRyLCBrcmI1X2RhdGEgKmRhdGEpCit7Cisg ICAgaW50IGZkID0gKigoaW50ICopcHRyKTsKKyAgICBsb25nIG1zZ2xlbjsKKworICAgIG1zZ2xl biA9IGh0b25sKGRhdGEtPmxlbmd0aCk7CisgICAgaWYgKG5ldF93cml0ZShmZCwoQ0hBUiAqKSZt c2dsZW4sNCkgIT0gNCkgeworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAoIGRh dGEtPmxlbmd0aCApIHsKKyAgICAgICAgaWYgKG5ldF93cml0ZShmZCxkYXRhLT5kYXRhLGRhdGEt Pmxlbmd0aCkgIT0gZGF0YS0+bGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAg ICAgICB9CisgICAgfQorICAgIHJldHVybigwKTsKK30KKwora3JiNV9lcnJvcl9jb2RlCitja19r cmI1X3JlYWRfbWVzc2FnZSgga3JiNV9jb250ZXh0IGNvbnRleHQsCisgICAgICAgICAgICAgICAg ICAgICAga3JiNV9wb2ludGVyIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBrcmI1X2RhdGEg KiBkYXRhKQoreworICAgIGV4dGVybiBpbnQgdHR5ZmQ7CisgICAgaW50IGZkID0gKigoaW50ICop cHRyKTsKKyAgICBsb25nIG1zZ2xlbjsKKyAgICBjaGFyICpwOworICAgIGludCBpLCByYzsKKwor ICAgIGlmIChuZXRfcmVhZChmZCwmbXNnbGVuLDQpIDwgMCkKKyAgICAgICAgcmV0dXJuKC0xKTsK KworICAgIGRhdGEtPmxlbmd0aCA9IG50b2hsKG1zZ2xlbik7CisgICAgaWYgKCBkYXRhLT5sZW5n dGggKSB7CisgICAgICAgIGRhdGEtPmRhdGEgPSBtYWxsb2MoZGF0YS0+bGVuZ3RoKTsKKworICAg ICAgICBpID0gMDsKKyAgICAgICAgd2hpbGUgKCBpIDwgZGF0YS0+bGVuZ3RoICkgeworICAgICAg ICAgICAgaWYgKChyYyA9IG5ldF9yZWFkKGZkLCZkYXRhLT5kYXRhW2ldLChkYXRhLT5sZW5ndGgg LSBpKSkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgaSAr PSByYzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogS1JC NSAqLworI2VuZGlmIC8qIE1BQ09TWCAqLworI2VuZGlmIC8qIENLX1NFQ1VSSVRZICovCisKKwoK ZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1YXRo LmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0aC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNGEwNmYKLS0tIC9kZXYvbnVsbAorKysg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWF0aC5oCkBAIC0wLDAg KzEsMjM1IEBACisvKiAgQyBLIFUgQSBUIEggLiBIIC0tICAiQy1LZXJtaXQgdG8gQXV0aGVudGlj YXRpb24iIGludGVyZmFjZSAgKi8KKworLyoKKyAgQXV0aG9yOiBKZWZmcmV5IEUgQWx0bWFuIDxq YWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPiwKKyAgICAgICAgICAgIFNlY3VyZSBFbmRwb2lu dHMgSW5jLiwgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDksCisg ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAqIEJhc2VkIG9uIGEg Y29uY2F0ZW5hdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IGluY2x1ZGUgZmlsZXMgZGlzdHJpYnV0ZWQg d2l0aAorICogdGhlIEtlcmJlcm9zIDUgTlQgQWxwaGEgMiBUZWxuZXQgcGFja2FnZSBmcm9tIE1J VC4KKyAqLworCisjaWZuZGVmIEtSQjVfS0VSTUlUX0gKKyNkZWZpbmUgS1JCNV9LRVJNSVRfSAor CisjaWZuZGVmIEJPT0wKKyNkZWZpbmUgQk9PTCBpbnQKKyNlbmRpZgorCisvKiBIZWFkZXIgZmls ZSBmb3IgZW5jcnlwdGVkLXN0cmVhbSBsaWJyYXJ5LgorICogV3JpdHRlbiBieSBLZW4gUmFlYnVy biAoUmFlYnVybkBDeWdudXMuQ09NKS4KKyAqIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5 NCBieSBDeWdudXMgU3VwcG9ydC4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQKKyAqIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRp b24gZm9yIGFueSBwdXJwb3NlIGFuZAorICogd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQs IHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlIGFwcGVhciBpbiBh bGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgor ICogQ3lnbnVzIFN1cHBvcnQgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0 YWJpbGl0eSBvZgorICogdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92 aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcworICogb3IgaW1wbGllZCB3YXJyYW50eS4KKyAq LworCisjaWZuZGVmIEs1U1RSRUFNX0gKKyNkZWZpbmUgSzVTVFJFQU1fSAorCit0eXBlZGVmIHZv aWQgKmtzdHJlYW1fcHRyOyAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRhIHNlbmQgb24gdGhl IGtzdHJlYW0gKi8KK3N0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgeworICBrc3RyZWFtX3B0ciBw dHI7CisgIHNpemVfdCBsZW5ndGg7Cit9OworCit0eXBlZGVmIHN0cnVjdCBrc3RyZWFtX2ludCB7 ICAgICAgICAgICAgICAgICAgICAvKiBPYmplY3Qgd2UgcGFzcyBhcm91bmQgKi8KKyAgICBpbnQg ZmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3BlbiBzb2NrZXQg ZGVzY3JpcHRvciAqLworICAgIGludCAoKmVuY3J5cHQpKHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxv Y2sgKiwgLyogb3V0cHV0ICovCisgICAgICAgICAgICAgICAgICAgc3RydWN0IGtzdHJlYW1fZGF0 YV9ibG9jayAqKTsgLyogaW5wdXQgKi8KKyAgICBpbnQgZW5jcnlwdF90eXBlOworICAgIGludCAo KmRlY3J5cHQpKHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKiwgLyogb3V0cHV0ICovCisgICAg ICAgICAgICAgICAgICAgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9jayAqKTsgLyogaW5wdXQgKi8K KyAgICBpbnQgZGVjcnlwdF90eXBlOworfSAqa3N0cmVhbTsKKworLyogUHJvdG90eXBlcyAqLwor CitpbnQgIGtzdHJlYW1fZGVzdHJveSgpOwordm9pZCBrc3RyZWFtX3NldF9idWZmZXJfbW9kZShp bnQpOworaW50ICBrc3RyZWFtX2NyZWF0ZV9mcm9tX2ZkKGludCBmZCwga3N0cmVhbV9wdHIpOwor aW50IGtzdHJlYW1fd3JpdGUodm9pZCAqLCBzaXplX3QpOworaW50IGtzdHJlYW1fcmVhZCh2b2lk ICosIHNpemVfdCk7CisKKyNlbmRpZiAvKiBLNVNUUkVBTV9IICovCisKKy8qCisgKiBJbXBsZW1l bnRzIFRlbG5ldCBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbgorICovCisKKyNpZm5kZWYg VEVMTkVUX0FVVEhfSAorI2RlZmluZSBURUxORVRfQVVUSF9ICisKK2ludCBhdXRoX3BhcnNlKHVu c2lnbmVkIGNoYXIgKiwgaW50KTsKKworaW50IGF1dGhfaW5pdChrc3RyZWFtKTsKKwordm9pZCBh dXRoX2Rlc3Ryb3kodm9pZCk7CisKK2ludCBhdXRoX2VuY3J5cHQoc3RydWN0IGtzdHJlYW1fZGF0 YV9ibG9jayAqLCBzdHJ1Y3Qga3N0cmVhbV9kYXRhX2Jsb2NrICopOworCitpbnQgYXV0aF9kZWNy eXB0KHN0cnVjdCBrc3RyZWFtX2RhdGFfYmxvY2sgKiwgc3RydWN0IGtzdHJlYW1fZGF0YV9ibG9j ayAqKTsKKworZXh0ZXJuIEJPT0wgZm9yd2FyZF9mbGFnOworZXh0ZXJuIEJPT0wgZm9yd2FyZGFi bGVfZmxhZzsKK2V4dGVybiBCT09MIGZvcndhcmRlZF90aWNrZXRzOworI2VuZGlmIC8qIFRFTF9B VVRIX0ggKi8KKworCisvKiBDLUtlcm1pdCBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KK19QUk9UT1RZ UCh2b2lkIGF1dGhfZmluaXNoZWQsKGludCkpOworX1BST1RPVFlQKGludCBja19hdXRoX2luaXQs IChjaGFyICosIGNoYXIgKiwgY2hhciAqLCBpbnQpKTsKK19QUk9UT1RZUChpbnQgY2tfdG5fYXV0 aF92YWxpZCwgKFZPSUQpKTsKK19QUk9UT1RZUChpbnQgY2tfdG5fYXV0aF9pbl9wcm9ncmVzcywo Vk9JRCkpOworX1BST1RPVFlQKGludCBja190bl9zYl9hdXRoLCAoY2hhciAqLCBpbnQpKTsKK19Q Uk9UT1RZUChpbnQgY2tfdG5fc2JfZW5jcnlwdCwgKGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAo aW50IGNrX3RuX2F1dGhfcmVxdWVzdCwgKFZPSUQpKTsKK19QUk9UT1RZUCh2b2lkIGNrX3RuX2Vu Y3J5cHQsIChjaGFyICosIGludCkpOworX1BST1RPVFlQKHZvaWQgY2tfdG5fZGVjcnlwdCwgKGNo YXIgKiwgaW50KSk7CitfUFJPVE9UWVAodm9pZCBja190bl9lbmNyeXB0X3N0YXJ0LCAoVk9JRCkp OworX1BST1RPVFlQKHZvaWQgY2tfdG5fZW5jcnlwdF9zdG9wLCAoVk9JRCkpOworX1BST1RPVFlQ KGludCBja190bl9hdXRoZW50aWNhdGVkLCAoVk9JRCkpOworI2lmZGVmIENLX0VOQ1JZUFRJT04K K19QUk9UT1RZUChpbnQgY2tfdG5fZW5jcnlwdGluZywgKFZPSUQpKTsKK19QUk9UT1RZUChpbnQg Y2tfdG5fZGVjcnlwdGluZywgKFZPSUQpKTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisj aWZkZWYgQ0tfU1NMCitfUFJPVE9UWVAoaW50IGNrX3RuX3Rsc19uZWdvdGlhdGUsIChWT0lEKSk7 CitfUFJPVE9UWVAoaW50IFNlbmRTU0xBdXRoU0IsIChpbnQsIHZvaWQgKiwgaW50KSk7CisjZW5k aWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworICAgIC8qIERlZmluZSBNSVRf Q1VSUkVOVCB0byBjb21waWxlIHRoZSBjb2RlIGZvciB1c2Ugd2l0aCB2ZXJzaW9ucyBvZiAqLwor ICAgIC8qIEtlcmJlcm9zIGxhdGVyIHRoYW4gS1JCNSAxLjAuNS4gIE5vdGUuICBUaGlzIHdpbGwg bm90IGNvbXBpbGUgICAqLworICAgIC8qIHN1Y2Nlc3NmdWxseSBpbiBLZXJtaXQgOTUgZHVlIHRv IHRoZSBzZWdtZW50YXRpb24gb2YgY3J5cHRvICAgICAqLworICAgIC8qIGludG8gYSBzZXBhcmF0 ZSBETEwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisj aWZuZGVmIEtSQjVfSU5JVF9FVFMKKy8qIGtyYjVfaW5pdF9ldHMoKSBpcyBhIG5vLW9wIGluIEtl cmJlcm9zIDEuNC54IGFuZCBsYXRlciAqLworLyogYW5kIGluIHNvbWUgaW5zdGFsbGF0aW9ucyBp dCBjYW4ndCBiZSBmb3VuZCBzbyBub3cgYnkgZGVmYXVsdCAqLworLyogd2UgZG9uJ3QgdXNlIGl0 LiAqLworI2RlZmluZSBOT19LUkI1X0lOSVRfRVRTCisjZW5kaWYJLyogS1JCNV9JTklUX0VUUyAq LworCisjZGVmaW5lIEtSQl9ERUZUSU0gNjAwICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBs aWZldGltZSAobWludXRlcykgKi8KKworLyogS2VyYmVyb3Mgc3RydWN0dXJlIGRlZmluaXRpb25z ICovCisKK3N0cnVjdCBrcmJfb3BfZGF0YSB7ICAgICAgICAgICAgICAgICAgICAvKiBPcGVyYXRp b25hbCBkYXRhIGZvciBhbGwgYWN0aW9ucyAqLworICAgIGludCB2ZXJzaW9uOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHZlcnNpb24gICAgKi8KKyAgICBjaGFyICogY2FjaGU7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyBjYWNoZSBmaWxlICovCit9OworCitz dHJ1Y3Qga3JiNF9pbml0X2RhdGEgeyAgICAgICAgICAgICAgICAgLyogSU5JVElBTElaRSBkYXRh IHN0cnVjdHVyZSAqLworICAgIGludCBsaWZldGltZTsKKyAgICBjaGFyICogcHJpbmNpcGFsOyAg ICAgICAgICAgICAgICAgICAvKiBQcmluY2lwYWwgc3RyaW5nICovCisgICAgY2hhciAqIGluc3Rh bmNlOworICAgIGNoYXIgKiByZWFsbTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWxtIHN0 cmluZyAqLworICAgIGNoYXIgKiBwYXNzd29yZDsgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJl cm9zIHBhc3N3b3JkICovCisgICAgaW50ICAgIHByZWF1dGg7ICAgICAgICAgICAgICAgICAgICAg LyogVXNlIHByZWF1dGggbW9kZT8gKi8KKyAgICBpbnQgICAgdmVyYm9zZTsgICAgICAgICAgICAg ICAgICAgICAvKiBWZXJib3NlIG91dHB1dD8gKi8KK307CisKKyNkZWZpbmUgS1JCNV9OVU1fT0Zf QUREUlMgMTYKK3N0cnVjdCBrcmI1X2luaXRfZGF0YSB7ICAgICAgICAgICAgICAgICAvKiBJTklU SUFMSVpFIGRhdGEgc3RydWN0dXJlICovCisgICAgaW50IGZvcndhcmRhYmxlOyAgICAgICAgICAg ICAgICAgICAgLyogU3dpdGNoIHZhbHVlcyAqLworICAgIGludCBwcm94aWFibGU7ICAgICAgICAg ICAgICAgICAgICAgIC8qIENvcnJlc3BvbmQgdG8gc3dpdGNoIG5hbWVzLi4uICovCisgICAgaW50 IGxpZmV0aW1lOworICAgIGludCByZW5ldzsKKyAgICBpbnQgcmVuZXdhYmxlOworICAgIGludCB2 YWxpZGF0ZTsKKyAgICBjaGFyICogcG9zdGRhdGU7CisgICAgY2hhciAqIHNlcnZpY2U7CisgICAg Y2hhciAqIHByaW5jaXBhbDsgICAgICAgICAgICAgICAgICAgLyogUHJpbmNpcGFsIHN0cmluZyAq LworICAgIGNoYXIgKiBpbnN0YW5jZTsKKyAgICBjaGFyICogcmVhbG07ICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZWFsbSBzdHJpbmcgKi8KKyAgICBjaGFyICogcGFzc3dvcmQ7ICAgICAgICAg ICAgICAgICAgICAvKiBLZXJiZXJvcyBwYXNzd29yZCAqLworICAgIGludCAgICBwcmVhdXRoOyAg ICAgICAgICAgICAgICAgICAgIC8qIFVzZSBwcmVhdXRoIG1vZGU/ICovCisgICAgaW50ICAgIHZl cmJvc2U7ICAgICAgICAgICAgICAgICAgICAgLyogVmVyYm9zZSBvdXRwdXQ/ICovCisgICAgaW50 ICAgIGdldGs0OyAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IEs0IFRHVD8gKi8KKyAgICBj aGFyICogYWRkcnNbS1JCNV9OVU1fT0ZfQUREUlMrMV07ICAvKiBMaXN0IG9mIElQIEFkZHJlc3Nl cyAqLworICAgIGludCAgbm9fYWRkcmVzc2VzOyAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBp bmNsdWRlIElQIEFkZHJlc3NlcyAqLworfTsKKworc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEg eyAgICAgICAgICAgIC8qIExpc3QgQ3JlZGVudGlhbHMgZGF0YSAqLworICAgIGludCBlbmNyeXB0 aW9uOworICAgIGludCBmbGFnczsKKyAgICBpbnQgYWRkcjsKK307CisKK19QUk9UT1RZUChpbnQg Y2tfa3JiNV9hdXRvZ2V0X1RHVCwgKGNoYXIgKikpOworX1BST1RPVFlQKGludCBja19rcmI1X2lu aXRUR1QsIChzdHJ1Y3Qga3JiX29wX2RhdGEgKixzdHJ1Y3Qga3JiNV9pbml0X2RhdGEgKiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrcmI0X2luaXRfZGF0YSAqKSk7 CitfUFJPVE9UWVAoaW50IGNrX2tyYjVfZGVzdHJveSwgKHN0cnVjdCBrcmJfb3BfZGF0YSAqKSk7 CitfUFJPVE9UWVAoaW50IGNrX2tyYjVfbGlzdF9jcmVkcywgKHN0cnVjdCBrcmJfb3BfZGF0YSAq LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtyYjVfbGlzdF9j cmVkX2RhdGEgKikpOworX1BST1RPVFlQKGNoYXIgKiBja19rcmI1X2dldHJlYWxtLCAoY2hhciAq KSk7CitfUFJPVE9UWVAoY2hhciAqIGNrX2tyYjVfZ2V0cHJpbmNpcGFsLCAoY2hhciAqKSk7Citf UFJPVE9UWVAoY2hhciAqIGNrX2tyYjVfZ2V0X2NjX25hbWUsIChWT0lEKSk7CisKK19QUk9UT1RZ UChpbnQgY2tfa3JiNF9hdXRvZ2V0X1RHVCwgKGNoYXIgKikpOworX1BST1RPVFlQKGludCBja19r cmI0X2luaXRUR1QsIChzdHJ1Y3Qga3JiX29wX2RhdGEgKixzdHJ1Y3Qga3JiNF9pbml0X2RhdGEg KikpOworX1BST1RPVFlQKGludCBja19rcmI0X2Rlc3Ryb3ksIChzdHJ1Y3Qga3JiX29wX2RhdGEg KikpOworX1BST1RPVFlQKGludCBja19rcmI0X2xpc3RfY3JlZHMsIChzdHJ1Y3Qga3JiX29wX2Rh dGEgKikpOworX1BST1RPVFlQKGNoYXIgKiBja19rcmI0X2dldHJlYWxtLCAoVk9JRCkpOworX1BS T1RPVFlQKGNoYXIgKiBja19rcmI0X2dldHByaW5jaXBhbCwgKFZPSUQpKTsKKworX1BST1RPVFlQ KGludCBja19rcmI0X2dldF90a3RzLCAoVk9JRCkpOworX1BST1RPVFlQKGNoYXIgKiBja19rcmI0 X2dldF9uZXh0X3RrdCwgKFZPSUQpKTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNF90a3RfaXN2YWxp ZCwoY2hhciAqKSk7CitfUFJPVE9UWVAoaW50IGNrX2tyYjRfaXNfdGd0X3ZhbGlkLChWT0lEKSk7 CitfUFJPVE9UWVAoaW50IGNrX2tyYjRfdGt0X3RpbWUsKGNoYXIgKikpOworCitfUFJPVE9UWVAo aW50IGNrX2tyYjVfZ2V0X3RrdHMsIChjaGFyICopKTsKK19QUk9UT1RZUChjaGFyICogY2tfa3Ji NV9nZXRfbmV4dF90a3QsIChWT0lEKSk7CitfUFJPVE9UWVAoaW50IGNrX2tyYjVfdGt0X2lzdmFs aWQsKGNoYXIgKixjaGFyICopKTsKK19QUk9UT1RZUChjaGFyICogY2tfa3JiNV90a3RfZmxhZ3Ms KGNoYXIgKixjaGFyICopKTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNV9pc190Z3RfdmFsaWQsKFZP SUQpKTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNV90a3RfdGltZSwoY2hhciAqLGNoYXIgKikpOwor CitfUFJPVE9UWVAoaW50IGtyYjRfZGVzX2F2YWlsLChpbnQpKTsKK19QUk9UT1RZUChpbnQga3Ji NF9kZXNfd3JpdGUsKGludCxjaGFyICosaW50KSk7CitfUFJPVE9UWVAoaW50IGtyYjRfZGVzX3Jl YWQsIChpbnQsY2hhciAqLGludCkpOworX1BST1RPVFlQKGludCBrcmI1X2Rlc19hdmFpbCwoaW50 KSk7CitfUFJPVE9UWVAoaW50IGtyYjVfZGVzX3dyaXRlLChpbnQsY2hhciAqLGludCxpbnQpKTsK K19QUk9UT1RZUChpbnQga3JiNV9kZXNfcmVhZCwgKGludCxjaGFyICosaW50LGludCkpOworX1BS T1RPVFlQKGludCBrcmI1X3UydV9hdmFpbCwoaW50KSk7CitfUFJPVE9UWVAoaW50IGtyYjVfdTJ1 X3dyaXRlLChpbnQsY2hhciAqLGludCkpOworX1BST1RPVFlQKGludCBrcmI1X3UydV9yZWFkLCAo aW50LGNoYXIgKixpbnQpKTsKK19QUk9UT1RZUChpbnQgazVfdXNlcl90b191c2VyX3NlcnZlcl9h dXRoLChWT0lEKSk7CitfUFJPVE9UWVAoaW50IGs1X3VzZXJfdG9fdXNlcl9jbGllbnRfYXV0aCwo Vk9JRCkpOworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKK19QUk9UT1RZUChpbnQgY2tfa3Ji NV9pc19pbnN0YWxsZWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgY2tfa3JiNF9pc19pbnN0YWxs ZWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgY2tfc3JwX2lzX2luc3RhbGxlZCwodm9pZCkpOwor X1BST1RPVFlQKGludCBja19udGxtX2lzX2luc3RhbGxlZCwodm9pZCkpOworX1BST1RPVFlQKGlu dCBja19jcnlwdF9pc19pbnN0YWxsZWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgY2tfc3NsZWF5 X2lzX2luc3RhbGxlZCwodm9pZCkpOworX1BST1RPVFlQKGludCBja19nc3NhcGlfaXNfaW5zdGFs bGVkLCh2b2lkKSk7CitfUFJPVE9UWVAoaW50IGNrX2tyeXB0b19pc19pbnN0YWxsZWQsKHZvaWQp KTsKKworX1BST1RPVFlQKFZPSUQgY2tfZW5jcnlwdF9zZW5kX3N1cHBvcnQsKFZPSUQpKTsKK19Q Uk9UT1RZUChpbnQgY2tfZ2V0X2NyeXB0X3RhYmxlLChzdHJ1Y3Qga2V5dGFiICoqLCBpbnQgKikp OworX1BST1RPVFlQKGNoYXIgKiBja19rcmI0X3JlYWxtb2Zob3N0LChjaGFyICopKTsKK19QUk9U T1RZUChjaGFyICogY2tfa3JiNV9yZWFsbW9maG9zdCwoY2hhciAqKSk7CisKKyNkZWZpbmUgRk9S V0FSRCAgLyogYWxsb3cgZm9yd2FyZGluZyBvZiBjcmVkZW50aWFsICovCisjaWZkZWYgRk9SV0FS RAorX1BST1RPVFlQKGludCBrZXJiZXJvczVfZm9yd2FyZCwoVk9JRCkpOworI2VuZGlmIC8qIEZP UldBUkQgKi8KKworI2RlZmluZSBBVVRIVFlQTFNUU1ogOAorI2VuZGlmIC8qS1JCNV9LRVJNSVRf SCovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9j a3Vid3IudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vid3Iu dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YjA2NGEKLS0tIC9kZXYv bnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWJ3ci50 eHQKQEAgLTAsMCArMSw1MzYzIEBACisKKyAgIFsxXVRoZSBDb2x1bWJpYSBDcm93biBUaGUgS2Vy bWl0IFByb2plY3QgfCBDb2x1bWJpYSBVbml2ZXJzaXR5CisgICA2MTIgV2VzdCAxMTV0aCBTdHJl ZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgIC4u LnNpbmNlIDE5ODEKKyAgIFszXUhvbWUgWzRdS2VybWl0IDk1IFs1XUMtS2VybWl0IFs2XVNjcmlw dHMgWzddQ3VycmVudCBbOF1OZXcgWzldRkFRCisgICBbMTBdU3VwcG9ydAorCitDLUtlcm1pdCBV bml4IEhpbnRzIGFuZCBUaXBzCisKKyAgICAgRnJhbmsgZGEgQ3J1egorICAgICBbMTFdVGhlIEtl cm1pdCBQcm9qZWN0LCBbMTJdQ29sdW1iaWEgVW5pdmVyc2l0eQorCisgICBBcyBvZjogQy1LZXJt aXQgOS4wLjMwMiwgMjAgQXVndXN0IDIwMTEKKyAgIFRoaXMgcGFnZSBsYXN0IHVwZGF0ZWQ6IFN1 biBBdWcgMjEgMTI6MDg6NTIgMjAxMSAoTmV3IFlvcmsgVVNBIFRpbWUpCisKKyAgICAgSUYgWU9V IEFSRSBSRUFESU5HIEEgUExBSU4tVEVYVCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIG5vdGUg aXQgaXMKKyAgICAgYSBwbGFpbi10ZXh0IGR1bXAgb2YgYSBXZWIgcGFnZS4gWW91IGNhbiB2aXNp dCB0aGUgb3JpZ2luYWwgKGFuZAorICAgICBwb3NzaWJseSBtb3JlIHVwLXRvLWRhdGUpIFdlYiBw YWdlIGhlcmU6CisKKyAgWzEzXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbAorCisgICAgIFNpbmNlIHRoZSBtYXRlcmlhbCBpbiB0aGlzIGZpbGUgaGFzIGJlZW4gYWNj dW11bGF0aW5nIHNpbmNlIDE5ODUsCisgICAgIHNvbWUgKG11Y2gpIG9mIGl0IG1pZ2h0IGJlIGRh dGVkLgorCitLbm93biBwcm9ibGVtcyB3aXRoIEMtS2VybWl0IDkuMAorCisgICAgICogRG9tYWlu IG5hbWUgcmVzb2x1dGlvbiBkb2VzIG5vdCB3b3JrIGluIFNvbGFyaXMgMTAgb3IgMTEgKGZpeGVk IGluCisgICAgICAgWzE0XTkuMC4zMDEpLgorICAgICAqIFVVQ1AgbG9ja2ZpbGUgZmFpbHVyZSBp biBGcmVlQlNEIDggKGZpeGVkIGluIFsxNV05LjAuMzAyKS4KKyAgICAgKiBCdWlsZCBmYWlsdXJl IEZyZWVCU0QgOSAoZml4ZWQgaW4gWzE2XTkuMC4zMDIpLgorICAgICAqIE9wZW5pbmcgbmV3IFNT SCBzZXNzaW9ucyBhZnRlciBjbG9zaW5nIHByZXZpb3VzIG9uZXMgc29tZXRpbWVzCisgICAgICAg ZmFpbHMuCisgICAgICogSGVpbWRhbCBLZXJiZXJvcyBub3Qgc3VwcG9ydGVkLgorCisgICBbIFsx N11DLUtlcm1pdCBdIFsgWzE4XUluc3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMgXSBbIFsxOV1UVVRP UklBTCBdCisKK0NPTlRFTlRTCisKKyAgICAxLiBbMjBdSU5UUk9EVUNUSU9OCisgICAgMi4gWzIx XVBSRUJVSUxUIEMtS0VSTUlUIEJJTkFSSUVTCisgICAgMy4gWzIyXVBMQVRGT1JNLVNQRUNJRklD IE5PVEVTCisgICAgNC4gWzIzXUdFTkVSQUwgVU5JWC1TUEVDSUZJQyBMSU1JVEFUSU9OUyBBTkQg QlVHUworICAgIDUuIFsyNF1JTklUSUFMSVpBVElPTiBBTkQgQ09NTUFORCBGSUxFUworICAgIDYu IFsyNV1DT01NVU5JQ0FUSU9OIFNQRUVEIFNFTEVDVElPTgorICAgIDcuIFsyNl1DT01NVU5JQ0FU SU9OUyBBTkQgRElBTElORworICAgIDguIFsyN11IQVJEV0FSRSBGTE9XIENPTlRST0wKKyAgICA5 LiBbMjhdVEVSTUlOQUwgQ09OTkVDVElPTiBBTkQgS0VZIE1BUFBJTkcKKyAgIDEwLiBbMjldRklM RSBUUkFOU0ZFUgorICAgMTEuIFszMF1FWFRFUk5BTCBGSUxFIFRSQU5TRkVSIFBST1RPQ09MUwor ICAgMTIuIFszMV1TRUNVUklUWQorICAgMTMuIFszMl1NSVNDRUxMQU5FT1VTIFVTRVIgUkVQT1JU UworICAgMTQuIFszM11USElSRC1QQVJUWSBEUklWRVJTCisKKyAgIFF1aWNrIExpbmtzOiAgIFsg WzM0XUxpbnV4IF0gWyBbMzVdKkJTRCBdIFtbMzZdTWFjIE9TIFhdIFsgWzM3XUFJWCBdIFsKKyAg IFszOF1IUC1VWCBdIFsgWzM5XVNvbGFyaXMgXSBbIFs0MF1TQ08gXQorCisxLiBJTlRST0RVQ1RJ T04KKworICAgWyBbNDFdVG9wIF0gWyBbNDJdQ29udGVudHMgXSBbIFs0M11OZXh0IF0KKworICAg U0VDVElPTiBDT05URU5UUworCisgIDEuMS4gWzQ0XURvY3VtZW50YXRpb24KKyAgMS4yLiBbNDVd VGVjaG5pY2FsIFN1cHBvcnQKKyAgMS4zLiBbNDZdVGhlIFllYXIgMjAwMAorICAxLjQuIFs0N11U aGUgRXVybworCisgICBUSElTIElTIFdIQVQgVVNFRCBUTyBCRSBDQUxMRUQgdGhlICJiZXdhcmUg ZmlsZSIgZm9yIHRoZSBVbml4IHZlcnNpb24KKyAgIG9mIEMtS2VybWl0LCBwcmV2aW91c2x5IGRp c3RyaWJ1dGVkIGFzIGNrdWJ3ci50eHQgYW5kLCBiZWZvcmUgdGhhdCwgYXMKKyAgIGNrdWtlci5i d3IsIGFmdGVyIHRoZSBmYXNoaW9uIG9mIG9sZCBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlv bgorICAgKERFQykgc29mdHdhcmUgcmVsZWFzZXMgdGhhdCBjYW1lIHdpdGggcmVsZWFzZSBub3Rl cyAoZGVzY3JpYmluZyB3aGF0CisgICBoYWQgY2hhbmdlZCkgYW5kIGEgImJld2FyZSBmaWxlIiBs aXN0aW5nIGtub3duIGJ1Z3MsIGxpbWl0YXRpb25zLAorICAgIm5vbi1nb2FscyIsIGFuZCB0aGlu Z3MgdG8gd2F0Y2ggb3V0IGZvci4gVGhlIEMtS2VybWl0IGJld2FyZSBmaWxlIGhhcworICAgYmVl biBhY2N1bXVsYXRpbmcgc2luY2UgMTk4NSwgYW5kIGl0IGFwcGxpZXMgdG8gbWFueSBkaWZmZXJl bnQgaGFyZHdhcmUKKyAgIHBsYXRmb3JtcyBhbmQgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBtYW55 IHZlcnNpb25zIG9mIHRoZW0sIHNvIGl0IGlzCisgICBxdWl0ZSBsYXJnZS4gUHJpb3IgdG8gQy1L ZXJtaXQgOC4wLCBpdCB3YXMgZGlzdHJpYnV0ZWQgb25seSBpbgorICAgcGxhaW4tdGV4dCBmb3Jt YXQuIE5vdyBpdCBpcyBhdmFpbGFibGUgYXMgYSBXZWIgZG9jdW1lbnQgd2l0aCBsaW5rcywKKyAg IGludGVybmFsIGNyb3NzIHJlZmVyZW5jZXMsIGFuZCBzbyBvbiwgdG8gbWFrZSBpdCBlYXNpZXIg dG8gdXNlLgorCisgICBUaGlzIGRvY3VtZW50IGFwcGxpZXMgdG8gVW5peCBDLUtlcm1pdCBpbiBn ZW5lcmFsLCBhcyB3ZWxsIGFzIHRvCisgICBzcGVjaWZpYyBVbml4IHZhcmlhdGlvbnMgbGlrZSBb NDhdTGludXgsIFs0OV1BSVgsIFs1MF1IUC1VWCwKKyAgIFs1MV1Tb2xhcmlzLCBhbmQgc28gb24s IGFuZCBzaG91bGQgYmUgcmVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICAgWzUyXXBsYXRm b3JtLWluZGVwZW5kZW50IEMtS2VybWl0IGJld2FyZSBmaWxlLCB3aGljaCBjb250YWlucyBzaW1p bGFyCisgICBpbmZvcm1hdGlvbiwgYnV0IGFwcGx5aW5nIHRvIGFsbCB2ZXJzaW9ucyBvZiBDLUtl cm1pdCAoVk1TLCBXaW5kb3dzLAorICAgT1MvMiwgQU9TL1ZTLCBWT1MsIGV0YywgYXMgd2VsbCBh cyB0byBVbml4KS4KKworICAgVGhlcmUgaXMgbXVjaCBpbiB0aGlzIGRvY3VtZW50IHRoYXQgaXMg KG9ubHkpIG9mIGhpc3RvcmljYWwgaW50ZXJlc3QuCisgICBUaGUgbmF2aWdhdGlvbiBsaW5rcyBz aG91bGQgaGVscCB5b3Ugc2tpcCBkaXJlY3RseSB0byB0aGUgc2VjdGlvbnMgdGhhdAorICAgYXJl IHJlbGV2YW50IHRvIHlvdS4gTnVtZXJvdXMgb2Zmc2l0ZSBXZWIgbGlua3MgYXJlIHN1cHBvc2Vk IHRvIGxlYWQgdG8KKyAgIGZ1cnRoZXIgaW5mb3JtYXRpb24gYnV0LCBhcyB5b3Uga25vdywgV2Vi IGxpbmtzIGdvIHN0YWxlIGZyZXF1ZW50bHkgYW5kCisgICB3aXRob3V0IHdhcm5pbmcuIElmIHlv dSBjYW4gc3VwcGx5IGFkZGl0aW9uYWwsIGNvcnJlY3RlZCwgdXBkYXRlZCwgb3IKKyAgIGJldHRl ciBXZWIgbGlua3MsIHBsZWFzZSBmZWVsIGZyZWUgdG8gWzUzXWxldCBtZSBrbm93LgorCisxLjEu IERvY3VtZW50YXRpb24KKworICAgWyBbNTRdVG9wIF0gWyBbNTVdQ29udGVudHMgXSBbIFs1Nl1O ZXh0IF0KKworICAgQy1LZXJtaXQgNi4wIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgWzU3XVVz aW5nIEMtS2VybWl0LCBTZWNvbmQKKyAgIEVkaXRpb24sIGJ5IEZyYW5rIGRhIENydXogYW5kIENo cmlzdGluZSBNLiBHaWFub25lLCBEaWdpdGFsIFByZXNzLAorICAgQnVybGluZ3RvbiwgTUEsIFVT QSwgSVNCTiAxLTU1NTU4LTE2NC0xICgxOTk3KSwgNjIyIHBhZ2VzLiBUaGlzIHJlbWFpbnMKKyAg IHRoZSBkZWZpbml0aXZlIEMtS2VybWl0IGRvY3VtZW50YXRpb24uIFVudGlsIHRoZSB0aGlyZCBl ZGl0aW9uIGlzCisgICBwdWJsaXNoZWQgKHNvcnJ5LCB0aGVyZSBpcyBubyBmaXJtIHRpbWVmcmFt ZSBmb3IgdGhpcyksIHBsZWFzZSBhbHNvCisgICByZWZlciB0bzoKKworICAgWzU4XVN1cHBsZW1l bnQgdG8gVXNpbmcgQy1LZXJtaXQsIFNlY29uZCBFZGl0aW9uLCBGb3IgQy1LZXJtaXQgNy4wCisg ICAgICAgICAgVGhvcm91Z2ggZG9jdW1lbnRhdGlvbiBvZiBmZWF0dXJlcyBuZXcgdG8gdmVyc2lv biA3LjAuCisKKyAgIFs1OV1TdXBwbGVtZW50IHRvIFVzaW5nIEMtS2VybWl0LCBTZWNvbmQgRWRp dGlvbiwgRm9yIEMtS2VybWl0IDguMAorICAgICAgICAgIFRob3JvdWdoIGRvY3VtZW50YXRpb24g b2YgZmVhdHVyZXMgbmV3IHRvIHZlcnNpb24gOC4wLgorCisgICBbNjBdU3VwcGxlbWVudCB0byBV c2luZyBDLUtlcm1pdCwgU2Vjb25kIEVkaXRpb24sIEZvciBDLUtlcm1pdCA5LjAKKyAgICAgICAg ICBUaG9yb3VnaCBkb2N1bWVudGF0aW9uIG9mIGZlYXR1cmVzIG5ldyB0byB2ZXJzaW9uIDkuMC4K KworMS4yLiBUZWNobmljYWwgU3VwcG9ydAorCisgICBbIFs2MV1Ub3AgXSBbIFs2Ml1Db250ZW50 cyBdIFsgWzYzXVNlY3Rpb24gQ29udGVudHMgXSBbIFs2NF1OZXh0IF0gWworICAgWzY1XVByZXZp b3VzIF0KKworICAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBnZXQgdGVjaG5pY2FsIHN1cHBv cnQsIHBsZWFzZSB2aXNpdDoKKworICAgIFs2Nl1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvc3VwcG9ydC5odG1sCisKKzEuMy4gVGhlIFllYXIgMjAwMAorCisgICBbIFs2N11Ub3AgXSBb IFs2OF1Db250ZW50cyBdIFsgWzY5XVNlY3Rpb24gQ29udGVudHMgXSBbIFs3MF1OZXh0IF0gWwor ICAgWzcxXVByZXZpb3VzIF0KKworICAgVGhlIFVuaXggdmVyc2lvbiBvZiBDLUtlcm1pdCwgcmVs ZWFzZSA2LjAgYW5kIGxhdGVyLCBpcyAiWWVhciAyMDAwCisgICBjb21wbGlhbnQiLCBidXQgb25s eSBpZiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGlzIHRvby4gQ29udGFjdAorICAg eW91ciBVbml4IG9wZXJhdGluZyBzeXN0ZW0gdmVuZG9yIHRvIGZpbmQgb3V0IHdoaWNoIG9wZXJh dGluZyBzeXN0ZW0KKyAgIHZlcnNpb25zLCBwYXRjaGVzLCBoYXJkd2FyZSwgYW5kL29yIHVwZGF0 ZXMgYXJlIHJlcXVpcmVkLiAoUXVpdGUgYSBmZXcKKyAgIG9sZCBVbml4ZXMgYXJlIHN0aWxsIGlu IG9wZXJhdGlvbiBpbiB0aGUgbmV3IG1pbGxlbml1bSwgYnV0IHdpdGggdGhlaXIKKyAgIGRhdGUg c2V0IDI4IHllYXJzIGluIHRoZSBwYXN0IHNvIGF0IGxlYXN0IHRoZSBub24teWVhciBwYXJ0cyBv ZiB0aGUKKyAgIGNhbGVuZGFyIGFyZSBjb3JyZWN0LikKKworICAgQXMgb2YgQy1LZXJtaXQgNi4w ICg2IFNlcHRlbWJlciAxOTk2KSwgcG9zdC1taWxsZW5pdW0gZmlsZSBkYXRlcyBhcmUKKyAgIHJl Y29nbml6ZWQsIHRyYW5zbWl0dGVkLCByZWNlaXZlZCwgYW5kIHJlcHJvZHVjZWQgY29ycmVjdGx5 IGR1cmluZyB0aGUKKyAgIGZpbGUgdHJhbnNmZXIgcHJvY2VzcyBpbiBDLUtlcm1pdCdzIEZpbGUg QXR0cmlidXRlIHBhY2tldHMuIElmCisgICBwb3N0LW1pbGxlbml1bSBkYXRlcyBhcmUgbm90IHBy b2Nlc3NlZCBjb3JyZWN0bHkgb24gdGhlIG90aGVyIGVuZCwgZmlsZQorICAgdHJhbnNmZXIgc3Rp bGwgdGFrZXMgcGxhY2UsIGJ1dCB0aGUgbW9kaWZpY2F0aW9uIG9yIGNyZWF0aW9uIGRhdGUgb2YK KyAgIHRoZSByZWNlaXZlZCBmaWxlIG1pZ2h0IGJlIGluY29ycmVjdC4gVGhlIG9ubHkgZXhjZXB0 aW9uIHdvdWxkIGJlIGlmCisgICB0aGUgImZpbGUgY29sbGlzaW9uIHVwZGF0ZSIgZmVhdHVyZSBp cyBiZWluZyB1c2VkIHRvIHByZXZlbnQKKyAgIHVubmVjZXNzYXJ5IHRyYW5zZmVyIG9mIGZpbGVz IHRoYXQgaGF2ZSBub3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lCisgICBhIHRyYW5zZmVy IHRvb2sgcGxhY2U7IGluIHRoaXMgY2FzZSwgYSBmaWxlIG1pZ2h0IGJlIHRyYW5zZmVycmVkCisg ICB1bm5lY2Vzc2FyaWx5LCBvciBpdCBtaWdodCBub3QgYmUgdHJhbnNmZXJyZWQgd2hlbiBpdCBz aG91bGQgaGF2ZSBiZWVuLgorICAgQ29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHVwZGF0ZSBmZWF0 dXJlIGRlcGVuZHMgb24gYm90aCBLZXJtaXQgcHJvZ3JhbXMKKyAgIGhhdmluZyB0aGUgY29ycmVj dCBkYXRlIGFuZCB0aW1lLgorCisgICBPZiBzZWNvbmRhcnkgaW1wb3J0YW5jZSBhcmUgdGhlIHRp bWUgc3RhbXBzIGluIHRoZSB0cmFuc2FjdGlvbiBhbmQvb3IKKyAgIGRlYnVnIGxvZ3MsIGFuZCB0 aGUgZGF0ZS1yZWxhdGVkIHNjcmlwdCBwcm9ncmFtbWluZyBjb25zdHJ1Y3RzLCBzdWNoIGFzCisg ICBcdihkYXRlKSwgXHYobmRhdGUpLCBcdihkYXkpLCBcdihuZGF5KSwgYW5kIHBlcmhhcHMgYWxz byB0aGUKKyAgIHRpbWUtcmVsYXRlZCBvbmVzLCBcdih0aW1lKSBhbmQgXHYobnRpbWUpLCBpbnNv ZmFyIGFzIHRoZXkgbWlnaHQgYmUKKyAgIGFmZmVjdGVkIGJ5IHRoZSBkYXRlLiBUaGUgXHYobmRh dGUpIGlzIGEgbnVtZXJpYy1mb3JtYXQgZGF0ZSBvZiB0aGUKKyAgIGZvcm0geXl5eW1tZGQsIHN1 aXRhYmxlIGZvciBib3RoIGxleGljYWwgYW5kIG51bWVyaWMgY29tcGFyaXNvbiBhbmQKKyAgIHNv cnRpbmc6IGUuZy4gMTk5NzAyMDggb3IgMjAwMTEyMzEuIElmIHRoZSB1bmRlcmx5aW5nIG9wZXJh dGluZyBzeXN0ZW0KKyAgIHJldHVybnMgdGhlIGNvcnJlY3QgZGF0ZSBpbmZvcm1hdGlvbiwgdGhl c2UgdmFyaWFibGVzIHdpbGwgaGF2ZSB0aGUKKyAgIHByb3BlciB2YWx1ZXMuIElmIG5vdCwgdGhl biBzY3JpcHRzIHRoYXQgbWFrZSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlc2UKKyAgIHZhcmlhYmxl cyBtaWdodCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyAgIE1vc3QgZGF0ZS1yZWxhdGVkIGNv ZGUgaXMgYmFzZWQgdXBvbiB0aGUgQyBMaWJyYXJ5IGFzY3RpbWUoKSBzdHJpbmcsCisgICB3aGlj aCBhbHdheXMgaGFzIGEgZm91ci1kaWdpdCB5ZWFyLiBJbiBVbml4LCB0aGUgb25lIGJpdCBvZiBj b2RlIGluCisgICBDLUtlcm1pdCB0aGF0IGlzIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgaXMg c2V2ZXJhbCBjYWxscyB0bworICAgbG9jYWx0aW1lKCksIHdoaWNoIHJldHVybnMgYSBwb2ludGVy IHRvIGEgdG0gc3RydWN0LCBpbiB3aGljaCB0aGUgeWVhcgorICAgaXMgcHJlc3VtZWQgdG8gYmUg ZXhwcmVzc2VkIGFzICJ5ZWFycyBzaW5jZSAxOTAwIi4gVGhlIGNvZGUgZGVwZW5kcyBvbgorICAg dGhpcyBhc3N1bXB0aW9uLiBBbnkgcGxhdGZvcm1zIHRoYXQgdmlvbGF0ZSBpdCB3aWxsIG5lZWQg c3BlY2lhbAorICAgY29kaW5nLiBBcyBvZiB0aGlzIHdyaXRpbmcsIG5vIHN1Y2ggcGxhdGZvcm1z IGFyZSBrbm93bi4KKworICAgQ29tbWFuZCBhbmQgc2NyaXB0IHByb2dyYW1taW5nIGZ1bmN0aW9u cyB0aGF0IGRlYWwgd2l0aCBkYXRlcyB1c2UKKyAgIEMtS2VybWl0IHNwZWNpZmljIGNvZGUgdGhh dCBhbHdheXMgdXNlcyBmdWxsIHllYXJzLgorCisxLjQuIFRoZSBFdXJvCisKKyAgIFsgWzcyXVRv cCBdIFsgWzczXUNvbnRlbnRzIF0gWyBbNzRdU2VjdGlvbiBDb250ZW50cyBdIFsgWzc1XVByZXZp b3VzIF0KKworICAgQy1LZXJtaXQgNy4wIGFuZCBsYXRlciBzdXBwb3J0IFVuaWNvZGUgKElTTyAx MDY0NiksIElTTyA4ODU5LTE1IExhdGluCisgICBBbHBoYWJldCA5LCBQQyBDb2RlIFBhZ2UgODU4 LCBXaW5kb3dzIENvZGUgUGFnZXMgMTI1MCBhbmQgMTI1MSwgYW5kCisgICBwZXJoYXBzIG90aGVy IGNoYXJhY3RlciBzZXRzLCB0aGF0IGVuY29kZSB0aGUgRXVybyBzeW1ib2wsIGFuZCBjYW4KKyAg IHRyYW5zbGF0ZSBhbW9uZyB0aGVtIGFzIGxvbmcgYXMgbm8gaW50ZXJtZWRpYXRlIGNoYXJhY3Rl ci1zZXQgaXMKKyAgIGludm9sdmVkIHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgRXVyby4KKwor Mi4gUFJFQlVJTFQgQy1LRVJNSVQgQklOQVJJRVMKKworICAgWyBbNzZdVG9wIF0gWyBbNzddQ29u dGVudHMgXSBbIFs3OF1OZXh0IF0gWyBbNzldUHJldmlvdXMgXQorCisgICBJdCBpcyBvZnRlbiBk YW5nZXJvdXMgdG8gcnVuIGEgYmluYXJ5IEMtS2VybWl0IChvciBhbnkgb3RoZXIpIHByb2dyYW0K KyAgIGJ1aWx0IG9uIGEgZGlmZmVyZW50IGNvbXB1dGVyLiBQYXJ0aWN1bGFybHkgaWYgdGhhdCBj b21wdXRlciBoYWQgYQorICAgZGlmZmVyZW50IEMgY29tcGlsZXIsIGxpYnJhcmllcywgb3BlcmF0 aW5nIHN5c3RlbSB2ZXJzaW9uLCBwcm9jZXNzb3IKKyAgIGZlYXR1cmVzLCBldGMsIGFuZCBlc3Bl Y2lhbGx5IGlmIHRoZSBwcm9ncmFtIHdhcyBidWlsdCB3aXRoIHNoYXJlZAorICAgbGlicmFyaWVz LCBiZWNhdXNlIGFzIHNvb24gYXMgeW91IHVwZGF0ZSB0aGUgbGlicmFyaWVzIG9uIHlvdXIgc3lz dGVtLAorICAgdGhleSBubyBsb25nZXIgbWF0Y2ggdGhlIG9uZXMgcmVmZXJlbmNlZCBpbiB0aGUg YmluYXJ5LCBhbmQgdGhlIGJpbmFyeQorICAgbWlnaHQgcmVmdXNlIHRvIGxvYWQgd2hlbiB5b3Ug cnVuIGl0LCBpbiB3aGljaCBjYXNlIHlvdSdsbCBzZWUgZXJyb3IKKyAgIG1lc3NhZ2VzIHNpbWls YXIgdG86CisKKyAgQ291bGQgbm90IGxvYWQgcHJvZ3JhbSBrZXJtaXQKKyAgTWVtYmVyIHNocjQu byBub3QgZm91bmQgb3IgZmlsZSBub3QgYW4gYXJjaGl2ZQorICBDb3VsZCBub3QgbG9hZCBsaWJy YXJ5IGxpYmN1cnNlcy5hW3NocjQub10KKyAgRXJyb3Igd2FzOiBObyBzdWNoIGZpbGUgb3IgZGly ZWN0b3J5CisKKyAgIChUaGVzZSBzYW1wbGVzIGFyZSBmcm9tIEFJWC4pIFRvIGF2b2lkIHRoaXMg cHJvYmxlbSwgd2UgdHJ5IHRvIGJ1aWxkCisgICBDLUtlcm1pdCB3aXRoIHN0YXRpY2FsbHkgbGlu a2VkIGxpYnJhcmllcyB3aGVuZXZlciB3ZSBjYW4sIGJ1dCB0aGlzIGlzCisgICBpbmNyZWFzaW5n bHkgaW1wb3NzaWJsZSBhcyBzaGFyZWQgbGlicmFyaWVzIGJlY29tZSB0aGUgbm9ybS4KKworICAg SXQgaXMgb2Z0ZW4gT0sgdG8gcnVuIGEgYmluYXJ5IGJ1aWx0IG9uIGFuIGVhcmxpZXIgT1MgdmVy c2lvbiwgYnV0IGl0CisgICBpcyByYXJlbHkgcG9zc2libGUgKG9yIHNhZmUpIHRvIHJ1biBhIGJp bmFyeSBidWlsdCBvbiBhIGxhdGVyIG9uZSwgZm9yCisgICBleGFtcGxlIHRvIHJ1biBhIGJpbmFy eSBidWlsdCB1bmRlciBTb2xhcmlzIDggb24gU29sYXJpcyAyLjYuIFNvbWV0aW1lcworICAgZXZl biB0aGUgT1Mtb3ItbGlicmFyeSBwYXRjaC9FQ08gbGV2ZWwgbWFrZXMgYSBkaWZmZXJlbmNlLgor CisgICBBIHBhcnRpY3VsYXJseSBpbnNpZGlvdXMgcHJvYmxlbSBvY2N1cnMgd2hlbiBhIGJpbmFy eSB3YXMgYnVpbHQgb24gYQorICAgdmVyc2lvbiBvZiB0aGUgT1MgdGhhdCBoYXMgcGF0Y2hlcyBm cm9tIHRoZSB2ZW5kb3IgKGUuZy4gdG8gbGlicmFyaWVzKTsKKyAgIGluIG1hbnkgY2FzZXMgeW91 IHdvbid0IGJlIGFibGUgdG8gcnVuIHN1Y2ggYSBiaW5hcnkgb24gYW4gdW5wYXRjaGVkCisgICB2 ZXJzaW9uIG9mIHRoZSBzYW1lIHBsYXRmb3JtLgorCisgICBXaGVuIGluIGRvdWJ0LCBidWlsZCBD LUtlcm1pdCBmcm9tIHRoZSBzb3VyY2UgY29kZSBvbiB0aGUgY29tcHV0ZXIKKyAgIHdoZXJlIGl0 IGlzIHRvIGJlIHJ1biAoaWYgcG9zc2libGUhKS4gSWYgbm90LCBhc2sgdXMgZm9yIGEgYmluYXJ5 CisgICBzcGVjaWZpYyB0byB5b3VyIGNvbmZpZ3VyYXRpb24uIFdlIG1pZ2h0IGhhdmUgb25lLCBh bmQgaWYgd2UgZG9uJ3QsIHdlCisgICBtaWdodCBiZSBhYmxlIHRvIGZpbmQgc29tZWJvZHkgd2hv IHdpbGwgYnVpbGQgb25lIGZvciB5b3UuCisKKzMuIE5PVEVTIE9OIFNQRUNJRklDIFVOSVggVkVS U0lPTlMKKworICAgWyBbODBdVG9wIF0gWyBbODFdQ29udGVudHMgXSBbIFs4Ml1OZXh0IF0gWyBb ODNdUHJldmlvdXMgXQorCisgICBTRUNUSU9OIENPTlRFTlRTCisKKyAgMy4wLiAgWzg0XUMtS0VS TUlUIE9OIFBDLUJBU0VEIFVOSVhFUworICAzLjEuICBbODVdQy1LRVJNSVQgQU5EIEFJWAorICAz LjIuICBbODZdQy1LRVJNSVQgQU5EIEhQLVVYCisgIDMuMy4gIFs4N11DLUtFUk1JVCBBTkQgTElO VVgKKyAgMy40LiAgWzg4XUMtS0VSTUlUIEFORCBORVhUU1RFUAorICAzLjUuICBbODldQy1LRVJN SVQgQU5EIFFOWAorICAzLjYuICBbOTBdQy1LRVJNSVQgQU5EIFNDTworICAzLjcuICBbOTFdQy1L RVJNSVQgQU5EIFNPTEFSSVMKKyAgMy44LiAgWzkyXUMtS0VSTUlUIEFORCBTVU5PUworICAzLjku ICBbOTNdQy1LRVJNSVQgQU5EIFVMVFJJWAorICAzLjEwLiBbOTRdQy1LRVJNSVQgQU5EIFVOSVhX QVJFCisgIDMuMTEuIFs5NV1DLUtFUk1JVCBBTkQgQVBPTExPIFNSMTAKKyAgMy4xMi4gWzk2XUMt S0VSTUlUIEFORCBUQU5EWSBYRU5JWCAzLjAKKyAgMy4xMy4gWzk3XUMtS0VSTUlUIEFORCBPU0Yv MSAoRElHSVRBTCBVTklYKSAoVFJVNjQgVU5JWCkKKyAgMy4xNC4gWzk4XUMtS0VSTUlUIEFORCBT R0kgSVJJWAorICAzLjE1LiBbOTldQy1LRVJNSVQgQU5EIFRIRSBCRUJPWAorICAzLjE2LiBbMTAw XUMtS0VSTUlUIEFORCBERy9VWAorICAzLjE3LiBbMTAxXUMtS0VSTUlUIEFORCBTRVFVRU5UIERZ TklYCisgIDMuMTguIFsxMDJdQy1LRVJNSVQgQU5EIHtGUkVFLE9QRU4sTkVUfUJTRAorICAzLjE5 LiBbMTAzXUMtS0VSTUlUIEFORCBNQUMgT1MgWAorICAzLjIwLiBbMTA0XUMtS0VSTUlUIEFORCBD T0hFUkVOVAorCisgICBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGFwcGx5IHRvIHNwZWNpZmljIFVu aXggdmVyc2lvbnMuIE1vc3Qgb2YgdGhlbQorICAgY29udGFpbiByZWZlcmVuY2VzIHRvIEZBUXMg KEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zKSwgYnV0IHRoZXNlIHRlbmQKKyAgIHRvIGJlIGVw aGVtZXJhbC4gRm9yIHBvc3NpYmx5IG1vcmUgY3VycmVudCBpbmZvcm1hdGlvbiBzZWU6CisKKyAg WzEwNV1odHRwOi8vd3d3LmZhcXMub3JnCisgIFsxMDZdaHR0cDovL2FwbGF3cmVuY2UuY29tL1Vu aXhhcnQvbmV3dG91bml4Lmh0bWwKKworICAgT25lIHRocmVhZCB0aGF0IHJ1bnMgdGhyb3VnaCBt YW55IG9mIHRoZW0sIGFuZCBpbXBsaWNpdGx5IHBlcmhhcHMKKyAgIHRocm91Z2ggYWxsLCBjb25j ZXJucyB0aGUgcHJvYmxlbXMgdGhhdCBvY2N1ciB3aGVuIHRyeWluZyB0byBkaWFsIG91dAorICAg b24gYSBzZXJpYWwgZGV2aWNlIHRoYXQgaXMgKGFsc28pIGVuYWJsZWQgZm9yIGRpYWxpbmcgaW4u IFRoZQorICAgInNvbHV0aW9ucyIgdG8gdGhpcyBwcm9ibGVtIGFyZSBtYW55LCB2YXJpZWQsIGRp dmVyc2UsIGFuZCB1c3VhbGx5CisgICBncm9zcywgaW52b2x2aW5nIGNvbmZpZ3VyaW5nIHRoZSBk ZXZpY2UgZm9yIGJpZGlyZWN0aW9uYWwgdXNlLiBUaGlzIGlzCisgICBkb25lIGluIGEgaGlnaGx5 IE9TLWRlcGVuZGVudCBhbmQgb2Z0ZW4gb2JzY3VyZSBtYW5uZXIsIGFuZCB0aGUgZWZmZWN0cwor ICAgKGdvb2Qgb3IgZXZpbCkgYXJlIGFsc28gaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgcGFydGlj dWxhciBPUyAoYW5kCisgICBnZXR0eSB2YXJpZXR5LCBldGMpLiBNYW55IGV4YW1wbGVzIGFyZSBn aXZlbiBpbiB0aGUgWzEwN11PUy1zcGVjaWZpYworICAgc2VjdGlvbnMgYmVsb3cuCisKKyAgIEFu IGltcG9ydGFudCBwb2ludCB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCBDLUtlcm1pdCBpcyBhCisg ICBjcm9zcy1wbGF0Zm9ybSwgcG9ydGFibGUgc29mdHdhcmUgcHJvZ3JhbS4gSXQgd2FzIG5vdCBk ZXNpZ25lZAorICAgc3BlY2lmaWNhbGx5IGFuZCBvbmx5IGZvciB5b3VyIHBhcnRpY3VsYXIgVW5p eCB2ZXJzaW9uLCBvciBmb3IgdGhhdAorICAgbWF0dGVyLCBmb3IgVW5peCBpbiBwYXJ0aWN1bGFy IGF0IGFsbC4gSXQgYWxzbyBydW5zIG9uIFZNUywgQU9TL1ZTLAorICAgVk9TLCBhbmQgb3RoZXIg bm9uLVVuaXggcGxhdGZvcm1zLiBBbGwgdGhlIFVuaXggdmVyc2lvbnMgb2YgQy1LZXJtaXQKKyAg IHNoYXJlIGNvbW1vbiBpL28gbW9kdWxlcywgd2l0aCBjb21waWxlLXRpbWUgI2lmZGVmIGNvbnN0 cnVjdGlvbnMgdXNlZAorICAgdG8gYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2VzIGFtb25nIHRo ZSBtYW55IFVuaXggcHJvZHVjdHMgYW5kCisgICByZWxlYXNlcy4gSWYgeW91IHRoaW5rIHRoYXQg Qy1LZXJtaXQgaXMgYmVoYXZpbmcgYmFkbHkgb3IgbWlzc2luZworICAgc29tZXRoaW5nIG9uIHlv dXIgcGFydGljdWxhciBVbml4IHZlcnNpb24sIHlvdSBtaWdodCBiZSByaWdodCAtLSB3ZQorICAg Y2FuJ3QgY2xhaW0gdG8gYmUgZXhwZXJ0IGluIGh1bmRyZWRzIG9mIGRpZmZlcmVudCBPUyAvIHZl cnNpb24gLworICAgaGFyZHdhcmUgLyBsaWJyYXJ5IGNvbWJpbmF0aW9ucy4gSWYgeW91J3JlIGEg cHJvZ3JhbW1lciwgdGFrZSBhIGxvb2sgYXQKKyAgIHRoZSBzb3VyY2UgY29kZSBhbmQgWzEwOF1z ZW5kIHVzIHlvdXIgc3VnZ2VzdGVkIGZpeGVzIG9yIGNoYW5nZXMuIE9yCisgICBlbHNlIGp1c3Qg WzEwOV1zZW5kIHVzIGEgcmVwb3J0IGFib3V0IHdoYXQgc2VlbXMgdG8gYmUgd3JvbmcgYW5kIHdl J2xsCisgICBzZWUgd2hhdCB3ZSBjYW4gZG8uCisKKzMuMC4gQy1LRVJNSVQgT04gUEMtQkFTRUQg VU5JWEVTCisKKyAgIFsgWzExMF1Ub3AgXSBbIFsxMTFdQ29udGVudHMgXSBbIFsxMTJdU2VjdGlv biBDb250ZW50cyBdIFsgWzExM11OZXh0IF0KKworICAgQWxzbyBzZWU6IFsxMTRdaHR0cDovL3d3 dy5wY3VuaXguY29tLy4KKworICAgU0VDVElPTiBDT05URU5UUworCisgIDMuMC4xLiBbMTE1XUlu dGVycnVwdCBDb25mbGljdHMKKyAgMy4wLjIuIFsxMTZdV2luZG93cy1TcGVjaWZpYyBIYXJkd2Fy ZQorICAzLjAuMy4gWzExN11Nb2RlbXMKKyAgMy4wLjQuIFsxMThdQ2hhcmFjdGVyIFNldHMKKyAg My4wLjUuIFsxMTldS2V5Ym9hcmQsIFNjcmVlbiwgYW5kIE1vdXNlIEFjY2VzcworICAzLjAuNi4g WzEyMF1MYXB0b3BzCisKKzMuMC4xLiBJbnRlcnJ1cHQgQ29uZmxpY3RzCisKKyAgIFsgWzEyMV1U b3AgXSBbIFsxMjJdQ29udGVudHMgXSBbIFsxMjNdU2VjdGlvbiBDb250ZW50cyBdIFsgWzEyNF1O ZXh0IF0KKworICAgUENzIGFyZSBub3QgdGhlIGJlc3QgcGxhdGZvcm0gZm9yIHJlYWwgb3BlcmF0 aW5nIHN5c3RlbXMgbGlrZSBVbml4LiBUaGUKKyAgIGFyY2hpdGVjdHVyZSBzdWZmZXJzIGZyb20g bnVtZXJvdXMgZGVmaWNpZW5jaWVzLCBub3QgdGhlIGxlYXN0IG9mIHdoaWNoCisgICBpcyB0aGUg c3RpZmxpbmdseSBzbWFsbCBudW1iZXIgb2YgaGFyZHdhcmUgaW50ZXJydXB0cyAoZWl0aGVyIDcg b3IgMTUsCisgICBtYW55IG9mIHdoaWNoIGFyZSBwcmVhbGxvY2F0ZWQpLiBUaHVzIGFkZGluZyBk ZXZpY2VzLCB1c2luZyBtdWx0aXBsZQorICAgc2VyaWFsIHBvcnRzLCBldGMsIGlzIGFsd2F5cyBh IGNoYWxsZW5nZSBhbmQgb2Z0ZW4gYSBuaWdodG1hcmUuIFRoZQorICAgZnJlZS1mb3ItYWxsIG5h dHVyZSBvZiB0aGUgUEMgbWFya2V0IGFuZCB0aGUgbGFjayBvZiBzdGFuZGFyZHMgY29tYmluZWQK KyAgIHdpdGggdGhlIGRpdmVyc2l0eSBvZiBVbml4IE9TIHZlcnNpb25zIG1ha2UgaXQgZGlmZmlj dWx0IHRvIGZpbmQKKyAgIGRyaXZlcnMgZm9yIGFueSBwYXJ0aWN1bGFyIGRldmljZSBvbiBhbnkg cGFydGljdWxhciB2ZXJzaW9uIG9mIFVuaXguCisKKyAgIE9mIHNwZWNpYWwgaW50ZXJlc3QgdG8g S2VybWl0IHVzZXJzIGlzIHRoZSBmYWN0IHRoYXQgdGhlcmUgaXMgbm8KKyAgIHN0YW5kYXJkIHBy b3Zpc2lvbiBpbiB0aGUgUEMgYXJjaGl0ZWN0dXJlIGZvciBtb3JlIHRoYW4gMiBjb21tdW5pY2F0 aW9uCisgICAoc2VyaWFsKSBwb3J0cy4gQ09NMyBhbmQgQ09NNCAob3IgaGlnaGVyKSB3aWxsIG5v dCB3b3JrIHVubGVzcyB5b3UgKGEpCisgICBmaW5kIG91dCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBh bmQgaW50ZXJydXB0IGZvciBlYWNoLCAoYikgZmluZCBvdXQgaG93CisgICB0byBwcm92aWRlIHlv dXIgVW5peCB2ZXJzaW9uIHdpdGggdGhpcyBpbmZvcm1hdGlvbiwgYW5kIChjKSBhY3R1YWxseQor ICAgc2V0IHVwIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBVbml4IHN0YXJ0dXAgZmlsZXMgKG9y IHdoYXRldmVyIG90aGVyCisgICBtZXRob2QgaXMgdXNlZCkuIFdhdGNoIG91dCBmb3IgaW50ZXJy dXB0IGNvbmZsaWN0cywgZXNwZWNpYWxseSB3aGVuCisgICB1c2luZyBhIHNlcmlhbCBtb3VzZSwg YW5kIGRvbid0IGV4cGVjdCB0byBiZSBhYmxlIHRvIHVzZSBtb3JlIHRoYW4gdHdvCisgICBzZXJp YWwgcG9ydHMuCisKKyAgIFRoZSB0ZWNobmlxdWVzIGZvciByZXNvbHZpbmcgaW50ZXJydXB0IGNv bmZsaWN0cyBhcmUgZGlmZmVyZW50IGZvciBlYWNoCisgICBvcGVyYXRpbmcgc3lzdGVtIChMaW51 eCwgTmV0QlNELCBldGMpLiBJbiBnZW5lcmFsLCB0aGVyZSBpcyBhCisgICBjb25maWd1cmF0aW9u IGZpbGUgc29tZXdoZXJlIHRoYXQgbGlzdHMgQ09NIHBvcnRzLCBzb21ldGhpbmcgbGlrZSB0aGlz OgorCisgIGNvbTAgICAgYXQgaXNhPyBwb3J0IDB4M2Y4IGlycSA0ICAgICAgIyBET1MgQ09NMQor ICBjb20xICAgIGF0IGlzYT8gcG9ydCAweDJmOCBpcnEgMyAgICAgICMgRE9TIENPTTIKKworICAg VGhlIGFkZHJlc3MgYW5kIElSUSB2YWx1ZXMgaW4gdGhpcyBmaWxlIG11c3QgYWdyZWUgd2l0aCB0 aGUgdmFsdWVzIGluCisgICB0aGUgUEMgQklPUyBhbmQgd2l0aCB0aGUgcG9ydHMgdGhlbXNlbHZl cywgYW5kIHRoZXJlIG11c3Qgbm90IGJlIG1vcmUKKyAgIHRoYW4gb25lIGRldmljZSB3aXRoIHRo ZSBzYW1lIGludGVycnVwdC4gVW5mb3J0dW5hdGVseSwgZHVlIHRvIHRoZQorICAgc21hbGwgbnVt YmVyIG9mIGF2YWlsYWJsZSBpbnRlcnJ1cHRzLCBpbnN0YWxsaW5nIG5ldyBkZXZpY2VzIG9uIGEg UEMKKyAgIGFsbW9zdCBhbHdheXMgY3JlYXRlcyBhIGNvbmZsaWN0LiBIZXJlIGlzIGEgdHlwaWNh bCB0YWxlIGZyb20gYSBMaW51eAorICAgdXNlciAoRnJlZCBTbWl0aCkgYWJvdXQgaW5zdGFsbGlu ZyBhIHRoaXJkIHNlcmlhbCBwb3J0OgorCisgICAgIC4uLnByb2JsZW1zIGNhbiBjb21lIGZyb20g YSBudW1iZXIgb2YgY2F1c2VzLiBUaGUgb25lIEkgZm91Z2h0IHdpdGgKKyAgICAgZm9yIHNvbWUg dGltZSwgYW5kIGZpbmFsbHkgY29ucXVlcmVkLCB3YXMgdGhhdCBteSBtb2RlbSBpcyBvbiBhbgor ICAgICBhZGQtaW4gc2VyaWFsIHBvcnQsIGN1YTMvSVJRNS4gQnkgZGVmYXVsdCBJUlE1IGhhcyBh IHZlcnkgbG93CisgICAgIHByaW9yaXR5LCBhbmQgZG9lcyBub3QgZ2V0IGVub3VnaCBzZXJ2aWNl IGluIHRpbWVzIHdoZW4gdGhlIHN5c3RlbQorICAgICBpcyBidXN5IHRvIHByZXZlbnQgbG9zaW5n IGRhdGEuIFRoaXMgaW4gdHVybiBjYXVzZXMgbWFueSByZXNlbmRzLgorICAgICBUaGVyZSBhcmUg dHdvICdmaXhlcycgdGhhdCBJIGtub3cgb2YsIG9uZSBpcyB0byByZWxheCBoYXJkIGRpc2sKKyAg ICAgaW50ZXJydXB0IGhvZ2dpbmcgYnkgdXNpbmcgdGhlIGNvcnJlY3QgcGFyYW1ldGVyIHRvIGhk cGFybSwgYnV0IEkKKyAgICAgZG9uJ3QgbGlrZSB0aGF0IG9uZSBiZWNhdXNlIHRoZSBoZHBhcm0g bWFuIHBhZ2UgaW5kaWNhdGVzIGl0IGlzCisgICAgIHJpc2t5IHRvIHVzZS4gVGhlIG90aGVyIG9u ZSwgdGhlIG9uZSBJIHVzZWQsIHdhcyB0byBnZXQgJ2lycXR1bmUnCisgICAgIGFuZCB1c2UgaXQg dG8gZ2l2ZSBJUlE1IHRoZSBoaWdoZXN0IHByaW9yaXR5IGluc3RlYWQgb2YgbmVhcmx5IHRoZQor ICAgICBsb3dlc3QuIENvbXBsZXRlbHkgY3VyZWQgdGhlIHByb2JsZW0uCisKKyAgIEhlcmUncyBh bm90aGVyIG9uZSBmcm9tIGEgbmV3c2dyb3VwIHBvc3Rpbmc6CisKKyAgICAgQWZ0ZXIgbXVjaCBo YWlyIHB1bGxpbmcsIEkndmUgZGlzY292ZXJlZCB3aHkgbXkgc2VyaWFsIHBvcnQgd29uJ3QKKyAg ICAgd29yay4gQXBwYXJlbnRseSBteSBbUENdIGhhcyB0aHJlZSBzZXJpYWwgZGV2aWNlcyAodHdv IGNvbW0gcG9ydHMKKyAgICAgYW5kIGFuIElSIHBvcnQpLCBvZiB3aGljaCBvbmx5IHR3byBhdCBh IHRpbWUgY2FuIGJlIGFjdGl2ZS4gSSBsb29rZWQKKyAgICAgaW4gdGhlIEJJT1Mgc2V0dXAgYW5k IG5vdGljZWQgdGhhdCB0aGUgSVIgcG9ydCB3YXMgYWN0aXZhdGVkLCBidXQKKyAgICAgZGlkbid0 IHJlYWxpemUgYXQgdGhlIHRpbWUgdGhhdCB0aGlzIG1lYW50IHRoYXQgQ09NMiB3YXMgdGhlcmVi eQorICAgICBkZS1hY3RpdmF0ZWQuIEkgdHVybmVkIG9mZiB0aGUgSVIgcG9ydCBhbmQgbm93IHRo ZSBzZXJpYWwgcG9ydCB3b3JrcworICAgICBhcyBhZHZlcnRpc2VkLgorCiszLjAuMi4gV2luZG93 cy1TcGVjaWZpYyBIYXJkd2FyZQorCisgICBbIFsxMjVdVG9wIF0gWyBbMTI2XUNvbnRlbnRzIF0g WyBbMTI3XVNlY3Rpb24gQ29udGVudHMgXSBbIFsxMjhdTmV4dCBdCisgICBbIFsxMjldUHJldmlv dXMgXQorCisgICBUbyBjb21wbGljYXRlIG1hdHRlcnMsIHRoZSBQQyBwbGF0Zm9ybSBpcyBiZWNv bWluZyBpbmNyZWFzaW5nbHkgYW5kCisgICBpbmV4b3JhYmx5IFdpbmRvd3Mtb3JpZW50ZWQuIE1v cmUgYW5kIG1vcmUgYWRkLW9uIGRldmljZXMgYXJlICJXaW5kb3dzCisgICBvbmx5IiAtLSBtZWFu aW5nIHRoZXkgYXJlIGluY29tcGxldGUgYW5kIHJlbHkgb24gcHJvcHJpZXRhcnkKKyAgIFdpbmRv d3MtYmFzZWQgc29mdHdhcmUgZHJpdmVycyB0byBkbyB0aGUgam9icyB0aGF0IHlvdSB3b3VsZCBl eHBlY3QgdGhlCisgICBkZXZpY2UgaXRzZWxmIHRvIGRvLiBQQ01DSUEsIFBDSSwgb3IgIlBsdWct bi1QbGF5IiBkZXZpY2VzIGFyZSByYXJlbHkKKyAgIHN1cHBvcnRlZCBvbiBQQy1iYXNlZCBVbml4 IHZlcnNpb25zIHN1Y2ggYXMgU0NPOyBXaW5tb2RlbXMsCisgICBXaW5wcmludGVycywgYW5kIHRo ZSBsaWtlIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGFueSBVbml4IHZhcmlldHkgKHdpdGgKKyAgIFsx MzBdYSBmZXcgZXhjZXB0aW9ucykuIFRoZSBzZWxmLXByb2NsYWltZWQgTWljcm9zb2Z0IFBDIDk3 IChvciBsYXRlcikKKyAgIHN0YW5kYXJkIG9ubHkgbWFrZXMgbWF0dGVycyB3b3JzZSBzaW5jZSBp dHMgb25seSBwdXJwb3NlIHRvIGVuc3VyZSB0aGF0CisgICBQQ3MgYXJlICJvcHRpbWl6ZWQgdG8g cnVuIFdpbmRvd3MgOTUgYW5kIFdpbmRvd3MgTlQgNC4wIGFuZCBmdXR1cmUKKyAgIHZlcnNpb25z IG9mIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zIi4KKworICAgV2l0aCB0aGUgZXhjZXB0aW9uIG5v dGVkICh0aGUgTHVjZW50IG1vZGVtLCBwZXJoYXBzIGEgaGFuZGZ1bCBvZiBvdGhlcnMKKyAgIGJ5 IHRoZSB0aW1lIHlvdSByZWFkIHRoaXMpLCBkcml2ZXJzIGZvciAiV2luIiBkZXZpY2VzIGFyZSBh dmFpbGFibGUKKyAgIG9ubHkgZm9yIFdpbmRvd3MsIHNpbmNlIHRoZSBXaW5kb3dzIG1hcmtldCBk d2FyZnMgdGhhdCBvZiBhbnkKKyAgIHBhcnRpY3VsYXIgVW5peCBicmFuZCwgYW5kIGZvciB0aGF0 IG1hdHRlciBhbGwgVW5peGVzIChvciBmb3IgdGhhdAorICAgbWF0dGVyLCBhbGwgbm9uLVdpbmRv d3Mgb3BlcmF0aW5nIHN5c3RlbXMpIGNvbWJpbmVkLiBJZiB5b3VyIHZlcnNpb24gb2YKKyAgIFVu aXggKFNDTywgTGludXgsIEJTREksIEZyZWVCU0QsIGV0YykgZG9lcyBub3Qgc3VwcG9ydCBhIHBh cnRpY3VsYXIKKyAgIGRldmljZSwgdGhlbiBDLUtlcm1pdCBjYW4ndCB1c2UgaXQgZWl0aGVyLiBD LUtlcm1pdCwgbGlrZSBhbnkgVW5peAorICAgYXBwbGljYXRpb24sIG11c3QgYWNjZXNzIGFsbCBk ZXZpY2VzIHRocm91Z2ggZHJpdmVycyBhbmQgbm90IGRpcmVjdGx5CisgICBiZWNhdXNlIFVuaXgg aXMgYSByZWFsIG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgIERvbid0IHdhc3RlIHRpbWUgdGhpbmtp bmcgdGhhdCB5b3UsIG9yIGFueWJvZHkgZWxzZSwgY291bGQgd3JpdGUgYQorICAgTGludXggKG9y IG90aGVyIFVuaXgpIGRyaXZlciBmb3IgYSBXaW5tb2RlbSBvciBvdGhlciAiV2luIiBkZXZpY2Uu CisgICBGaXJzdCBvZiBhbGwsIHRoZXNlIGRldmljZXMgZ2VuZXJhbGx5IHJlcXVpcmUgcmVhbHRp bWUgY29udHJvbCwgYnV0CisgICBzaW5jZSBVbml4IGlzIGEgdHJ1ZSBtdWx0aXRhc2tpbmcgb3Bl cmF0aW5nIHN5c3RlbSwgcmVhbHRpbWUgZGV2aWNlCisgICBjb250cm9sIGlzIG5vdCBwb3NzaWJs ZSBvdXRzaWRlIHRoZSBrZXJuZWwuIFNlY29uZCwgdGhlIHNwZWNpZmljYXRpb25zCisgICBmb3Ig dGhlc2UgZGV2aWNlcyBhcmUgc2VjcmV0IGFuZCBwcm9wcmlldGFyeSwgYW5kIGVhY2ggb25lIChh bmQgZWFjaAorICAgdmVyc2lvbiBvZiBlYWNoIG9uZSkgaXMgcG90ZW50aWFsbHkgZGlmZmVyZW50 LiBUaGlyZCwgYSBXaW5tb2RlbSBkcml2ZXIKKyAgIHdvdWxkIGJlIGVub3Jtb3VzbHkgY29tcGxl eDsgaXQgd291bGQgdGFrZSB5ZWFycyB0byB3cml0ZSBhbmQgZGVidWcsIGJ5CisgICB3aGljaCB0 aW1lIGl0IHdvdWxkIGJlIG9ic29sZXRlLgorCisgICBBIG1vcmUgcmVjZW50IGdlbmVyYXRpb24g b2YgUENzIChjaXJjYSAxOTk5LTIwMDApIGlzIG1hcmtldGVkIGFzCisgICAiTGVnYWN5IEZyZWUi LiBPbmUgY2FuIG9ubHkgc3BlY3VsYXRlIHdoYXQgdGhhdCBjb3VsZCBtZWFuLiBNb3N0IGxpa2Vs eQorICAgaXQgbWVhbnMgaXQgd2lsbCBPTkxZIHJ1biB0aGUgdmVyeSBsYXRlc3QgdmVyc2lvbnMg b2YgV2luZG93cywgYW5kIGlzCisgICBtYWRlIGV4Y2x1c2l2ZWx5IG9mIFdpbm1vZGVtcywgV2lu cHJpbnRlcnMsIFdpbm1lbW9yeSwgYW5kIFdpbi1DUFUtZmFucworICAgKExlZ2FjeSBGcmVlIGlz IGEgY29uY2VwdCBbMTMxXXBpb25lZXJlZCBieSBNaWNyb3NvZnQpLgorCisgICBCZWZvcmUgeW91 IGJ1eSBhIG5ldyBQQyBvciBhZGQtb24gZXF1aXBtZW50LCBlc3BlY2lhbGx5IHNlcmlhbCBwb3J0 cywKKyAgIGludGVybmFsIG1vZGVtcywgb3IgcHJpbnRlcnMsIG1ha2Ugc3VyZSB0aGV5IGFyZSBj b21wYXRpYmxlIHdpdGggeW91cgorICAgdmVyc2lvbiBvZiBVbml4LiBUaGlzIGlzIGJlY29taW5n IGFuIGV2ZXItZ3JlYXRlciBjaGFsbGVuZ2U7IG9ubHkgYQorICAgaHVnZSBjb21wYW55IGxpa2Ug TWljcm9zb2Z0IGNhbiBhZmZvcmQgdG8gYmUgY29uc3RhbnRseSBjcmFua2luZyBvdXQKKyAgIGFu ZC9vciB2ZXJpZnlpbmcgZHJpdmVycyBmb3IgdGhlIHRob3VzYW5kcyBvZiB2aWRlbyBib2FyZHMs IHNvdW5kCisgICBjYXJkcywgbmV0d29yayBhZGFwdGVycywgU0NTSSBhZGFwdGVycywgYnVzZXMs IGV0YywgdGhhdCBzcGV3IGZvcnRoIGluCisgICBhbiB1bmNvbnRyb2xsZWQgbWFubmVyIGZyb20g YWxsIGNvcm5lcnMgb2YgdGhlIHdvcmxkIG9uIGEgZGFpbHkgYmFzaXMuCisgICBXaXRoIHZlcnkg ZmV3IGV4Y2VwdGlvbnMsIG1ha2VycyBvZiBQQ3MgYXNzZW1ibGUgdGhlIHZhcmlvdXMgY29tcG9u ZW50cworICAgYW5kIHRoZW4gdmVyaWZ5IHRoZW0gb25seSB3aXRoIFdpbmRvd3MsIHdoaWNoIHRo ZXkgbXVzdCBkbyBzaW5jZSB0aGV5CisgICBhcmUsIG5vIGRvdWJ0LCBwcmVsb2FkaW5nIHRoZSBQ QyB3aXRoIFdpbmRvd3MuIFRvIGZpbmQgYSBtb2Rlcm4gUEMgdGhhdAorICAgaXMgY2FwYWJsZSBv ZiBydW5uaW5nIGEgdmFyaWV0eSBvZiBub24tV2luZG93cyBvcGVyYXRpbmcgc3lzdGVtcyAoZS5n LgorICAgTGludXgsIFNDTyBPcGVuU2VydmVyLCBVbml4d2FyZSwgYW5kIFNvbGFyaXMpIGlzIGEg Zm9ybWlkYWJsZSBjaGFsbGVuZ2UKKyAgIHJlcXVpcmluZyBjYXJlZnVsIHN0dWR5IG9mIGVhY2gg dmVuZG9yJ3MgImNvbXBhdGliaWxpdHkgbGlzdHMiIGFuZAorICAgcHJlY2lzZSBhdHRlbnRpb24g dG8gZXhhY3QgY29tcG9uZW50IG1vZGVsIG51bWJlcnMgYW5kIHJldmlzaW9uIGxldmVscy4KKwor My4wLjMuIE1vZGVtcworCisgICBbIFsxMzJdVG9wIF0gWyBbMTMzXUNvbnRlbnRzIF0gWyBbMTM0 XVNlY3Rpb24gQ29udGVudHMgXSBbIFsxMzVdTmV4dCBdCisgICBbIFsxMzZdUHJldmlvdXMgXQor CisgICBFeHRlcm5hbCBtb2RlbXMgYXJlIHJlY29tbWVuZGVkOgorCisgICAgICogVGhleSBkb24n dCBuZWVkIGFueSBzcGVjaWFsIGRyaXZlcnMuCisgICAgICogWW91IGNhbiB1c2UgdGhlIGxpZ2h0 cyBhbmQgc3BlYWtlciB0byB0cm91Ymxlc2hvb3QgZGlhbGluZy4KKyAgICAgKiBZb3UgY2FuIHNo YXJlIHRoZW0gYW1vbmcgYWxsIHR5cGVzIG9mIGNvbXB1dGVycy4KKyAgICAgKiBZb3UgY2FuIGVh c2lseSB0dXJuIHRoZW0gb2ZmIGFuZCBvbiB3aGVuIHBvd2VyLWN5Y2xpbmcgc2VlbXMKKyAgICAg ICB3YXJyYW50ZWQuCisgICAgICogVGhleSBhcmUgbW9yZSBsaWtlbHkgdG8gaGF2ZSBtYW51YWxz LgorCisgICBJbnRlcm5hbCBQQyBtb2RlbXMgKGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgV2lubW9k ZW1zLCB3aGljaCBpcworICAgaW5jcmVhc2luZ2x5IHVubGlrZWx5IGluIG5ldyBQQ3MpIGFyZSBh bHdheXMgdHJvdWJsZSwgZXNwZWNpYWxseSBpbgorICAgVW5peC4gRXZlbiB3aGVuIHRoZXkgd29y ayBmb3IgZGlhbGluZyBvdXQsIHRoZXkgbWlnaHQgbm90IHdvcmsgZm9yCisgICBkaWFsaW5nIGlu LCBldGMuIFByb2JsZW1zIHRoYXQgb2NjdXIgd2hlbiB1c2luZyBhbiBpbnRlcm5hbCBtb2RlbSBj YW4KKyAgIGFsbW9zdCBhbHdheXMgYmUgZWxpbWluYXRlZCBieSBzd2l0Y2hpbmcgdG8gYW4gZXh0 ZXJuYWwgb25lLiBFdmVuIHdoZW4KKyAgIGFuIGludGVybmFsIG1vZGVtIGlzIG5vdCBhIFdpbm1v ZGVtIG9yIFBsdWctbi1QbGF5LCBpdCBpcyBvZnRlbiBhCisgICBuby1uYW1lIG1vZGVsIG9mIHVu a25vd24gcXVhbGl0eSAtLSBub3QgdGhlIHNvcnQgb2YgdGhpbmcgeW91IHdhbnQKKyAgIHNpdHRp bmcgZGlyZWN0bHkgb24geW91ciBjb21wdXRlcidzIGJ1cy4gKEV2ZW4gaWYgaXQgZG9lcyBub3Qg Y2F1c2UKKyAgIGhhcmR3YXJlIHByb2JsZW1zLCBpdCBwcm9iYWJseSBjYW1lIHdpdGhvdXQgYSBj b21tYW5kIGxpc3QsIHNvIG5vIFVuaXgKKyAgIHNvZnR3YXJlIHdpbGwga25vdyBob3cgdG8gY29u dHJvbCBpdC4pIEZvciBtb3JlIGFib3V0IFVuaXggY29tcGF0aWJsZQorICAgbW9kZW1zLCBzZWU6 CisKKyAgWzEzN11odHRwOi8vd3d3LmlkaXIubmV0L35ncm9taXRrYy93aW5tb2RlbS5odG1sCisK KyAgIFJlbWVtYmVyIHRoYXQgUENzLCBldmVuIG5vdyAtLSBtb3JlIHRoYW4gdHdvIGRlY2FkZXMg YWZ0ZXIgdGhleSB3ZXJlCisgICBmaXJzdCBpbnRyb2R1Y2VkIC0tIGFyZSBub3QgKGluIGdlbmVy YWwpIGNhcGFibGUgb2Ygc3VwcG9ydGluZyBtb3JlCisgICB0aGFuIDIgc2VyaWFsIGRldmljZXMu IEhlcmUncyBhIHNob3J0IHN1Y2Nlc3Mgc3RvcnkgZnJvbSBhIHJlY2VudAorICAgbmV3c2dyb3Vw IHBvc3Rpbmc6ICJJIGhhdmUgYSBEaWFtb25kIFN1cHJhU29uaWMgSUkgZHVhbCBtb2RlbSBpbiBt eQorICAgbWFjaGluZS4gV2hhdCBJIGhhZCB0byBlbmQgdXAgZG9pbmcgaXMgYnV5aW5nIGEgUFMv MiBtb3VzZSBhbmQgcG9ydCBhbmQKKyAgIGluc3RhbGwgaXQuIEhhZCB0byBnZXQgcmlkIG9mIG15 IHNlcmlhbCBtb3VzZS4gSSBhbHNvIGhhZCB0byBkaXNhYmxlCisgICBQblAgaW4gbXkgY29tcHV0 ZXIgYmlvcy4gSSB3YXMgaGF2aW5nIElSUSBjb25mbGljdHMgYmV0d2VlbiBteSBzZXJpYWwKKyAg IG1vdXNlIGFuZCAnY29tIDMnLiBCb3RoIG1vZGVtcyB3b3JrIGZpbmUgZm9yIG1lLiBNeSBmaXJz dCBtb2RlbSBpcworICAgdHR5UzAgYW5kIG15IHNlY29uZCBpcyB0dHlTMS4iIFNwZWNpYWwgdGhp cmQtcGFydHkgbXVsdGlwb3J0IGJvYXJkcworICAgc3VjaCBhcyBbMTM4XURpZ2lCb2FyZCBhcmUg YXZhaWxhYmxlIGZvciBjZXJ0YWluIFVuaXggcGxhdGZvcm1zCisgICAodHlwaWNhbGx5IFNDTywg bWF5YmUgTGludXgpIHRoYXQgY29tZSB3aXRoIHNwZWNpYWwgcGxhdGZvcm0tc3BlY2lmaWMKKyAg IGRyaXZlcnMuCisKKzMuMC40LiBDaGFyYWN0ZXIgU2V0cworCisgICBbIFsxMzldVG9wIF0gWyBb MTQwXUNvbnRlbnRzIF0gWyBbMTQxXVNlY3Rpb24gQ29udGVudHMgXSBbIFsxNDJdTmV4dCBdCisg ICBbIFsxNDNdUHJldmlvdXMgXQorCisgICBQQ3MgZ2VuZXJhbGx5IGhhdmUgUEMgY29kZSBwYWdl cyBzdWNoIGFzIENQNDM3IG9yIENQODUwLCBhbmQgdGhlc2UgYXJlCisgICBvZnRlbiB1c2VkIGJ5 IFBDLWJhc2VkIFVuaXggb3BlcmF0aW5nIHN5c3RlbXMsIHBhcnRpY3VsYXJseSBvbiB0aGUKKyAg IGNvbnNvbGUuIFRoZXNlIGFyZSBzdXBwb3J0ZWQgZGlyZWN0bHkgYnkgQy1LZXJtaXQncyBTRVQg RklMRQorICAgQ0hBUkFDVEVSLVNFVCBhbmQgU0VUIFRFUk1JTkFMIENIQVJBQ1RFUi1TRVQgY29t bWFuZHMuIFNvbWUgUEMtYmFzZWQKKyAgIFVuaXggdmVyc2lvbnMsIHN1Y2ggYXMgcmVjZW50IFJl ZCBIYXQgTGludXggcmVsZWFzZXMsIG1pZ2h0IGFsc28KKyAgIHN1cHBvcnQgTWljcm9zb2Z0IFdp bmRvd3MgY29kZSBwYWdlcyBzdWNoIGFzIENQMTI1Miwgb3IgZXZlbiBMYXRpbgorICAgQWxwaGFi ZXQgMSBpdHNlbGYgKHBlcmhhcHMgZGlzcGxheWVkIHdpdGggQ1A0MzcgZ2x5cGhzKS4gKEFuZCB3 b3JrIGlzCisgICBpbiBwcm9ncmVzcyB0byBzdXBwb3J0IFVuaWNvZGUgVVRGOCBpbiBMaW51eC4p CisKKyAgIENlcnRhaW4gV2luZG93cyBjb2RlIHBhZ2VzIGFyZSBub3Qgc3VwcG9ydGVkIGRpcmVj dGx5IGJ5IEMtS2VybWl0LCBidXQKKyAgIHNpbmNlIHRoZXkgYXJlIElTTyBMYXRpbiBBbHBoYWJl dHMgd2l0aCBub25zdGFuZGFyZCAiZXh0ZW5zaW9ucyIgaW4gdGhlCisgICBDMSBjb250cm9sIHJh bmdlLCB5b3UgY2FuIHN1YnN0aXR1dGUgdGhlIGNvcnJlc3BvbmRpbmcgTGF0aW4gYWxwaGFiZXQK KyAgIChvciBvdGhlciBjaGFyYWN0ZXIgc2V0KSBpbiBhbnkgQy1LZXJtaXQgY2hhcmFjdGVyLXNl dCByZWxhdGVkCisgICBjb21tYW5kczoKKworICBXaW5kb3dzIENvZGUgUGFnZSAgICBTdWJzdGl0 dXRpb24KKyAgIENQIDEwMDQgICAgICAgICAgICAgIExhdGluLTEKKyAgIENQIDEwNTEgICAgICAg ICAgICAgIEhQIFJvbWFuLTgKKworICAgT3RoZXIgV2luZG93cyBjb2RlIHBhZ2VzIGFyZSBtb3N0 bHkgKG9yIHRvdGFsbHkpIGluY29tcGF0aWJsZSB3aXRoCisgICB0aGVpciBMYXRpbiBBbHBoYWJl dCBjb3VudGVycGFydHMgKGUuZy4gQ1AxMjUwIGFuZCBMYXRpbi0yKSwgYW5kCisgICBzZXZlcmFs IG9mIHRoZXNlIGFyZSBhbHJlYWR5IHN1cHBvcnRlZCBieSBDLUtlcm1pdCA3LjAgYW5kIGxhdGVy ICgxMjUwLAorICAgMTI1MSwgYW5kIDEyNTIpLgorCiszLjAuNS4gS2V5Ym9hcmQsIFNjcmVlbiwg YW5kIE1vdXNlIEFjY2VzcworCisgICBbIFsxNDRdVG9wIF0gWyBbMTQ1XUNvbnRlbnRzIF0gWyBb MTQ2XVNlY3Rpb24gQ29udGVudHMgXSBbIFsxNDddTmV4dCBdCisgICBbIFsxNDhdUHJldmlvdXMg XQorCisgICBGaW5hbGx5LCBub3RlIHRoYXQgYXMgYSByZWFsIG9wZXJhdGluZyBzeXN0ZW0sIFVu aXggKHVubGlrZSBXaW5kb3dzKQorICAgZG9lcyBub3QgcHJvdmlkZSB0aGUgaW50aW1hdGUgY29u bmVjdGlvbiB0byB0aGUgUEMga2V5Ym9hcmQsIHNjcmVlbiwKKyAgIGFuZCBtb3VzZSB0aGF0IHlv dSBtaWdodCBleHBlY3QuIFVuaXggYXBwbGljYXRpb25zIGNhbiBub3QgInNlZSIgdGhlCisgICBr ZXlib2FyZCwgYW5kIHRoZXJlZm9yZSBjYW4gbm90IGJlIHByb2dyYW1tZWQgdG8gdW5kZXJzdGFu ZCBGLWtleXMsCisgICBFZGl0aW5nIGtleXMsIEFycm93IGtleXMsIEFsdC1rZXkgY29tYmluYXRp b25zLCBhbmQgdGhlIGxpa2UuIFRoaXMgaXMKKyAgIGJlY2F1c2U6CisKKyAgICBhLiBVbml4IGlz IGEgcG9ydGFibGUgb3BlcmF0aW5nIHN5c3RlbSwgbm90IG9ubHkgZm9yIFBDczsKKyAgICBiLiBV bml4IHNlc3Npb25zIGNhbiBjb21lIGZyb20gYW55d2hlcmUsIG5vdCBqdXN0IHRoZSBQQydzIG93 bgorICAgICAgIGtleWJvYXJkIGFuZCBzY3JlZW47IGFuZDoKKyAgICBjLiBldmVuIHRob3VnaCBp dCBtaWdodCBiZSBwb3NzaWJsZSBmb3IgYW4gYXBwbGljYXRpb24gdGhhdCBhY3R1YWxseQorICAg ICAgIGlzIHJ1bm5pbmcgb24gdGhlIFBDJ3Mga2V5Ym9hcmQgYW5kIHNjcmVlbiB0byBhY2Nlc3Mg dGhlc2UgZGV2aWNlcworICAgICAgIGRpcmVjdGx5LCB0aGVyZSBhcmUgbm8gQVBJcyAob3V0c2lk ZSBvZiBYKSBmb3IgdGhpcy4KKworMy4wLjYuIExhcHRvcHMKKworICAgWyBbMTQ5XVRvcCBdIFsg WzE1MF1Db250ZW50cyBdIFsgWzE1MV1TZWN0aW9uIENvbnRlbnRzIF0gWworICAgWzE1Ml1QcmV2 aW91cyBdCisKKyAgIChUbyBiZSBmaWxsZWQgaW4gLiAuIC4pCisKKzMuMS4gQy1LRVJNSVQgQU5E IEFJWAorCisgICBbIFsxNTNdVG9wIF0gWyBbMTU0XUNvbnRlbnRzIF0gWyBbMTU1XVNlY3Rpb24g Q29udGVudHMgXSBbIFsxNTZdTmV4dCBdCisgICBbIFsxNTddUHJldmlvdXMgXQorCisgICBTRUNU SU9OIENPTlRFTlRTCisKKyAgMy4xLjEuIFsxNThdQUlYOiBHZW5lcmFsCisgIDMuMS4yLiBbMTU5 XUFJWDogTmV0d29yayBDb25uZWN0aW9ucworICAzLjEuMy4gWzE2MF1BSVg6IFNlcmlhbCBDb25u ZWN0aW9ucworICAzLjEuNC4gWzE2MV1BSVg6IEZpbGUgVHJhbnNmZXIKKyAgMy4xLjUuIFsxNjJd QUlYOiBYdGVybSBLZXkgTWFwCisKKyAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHNlZToK KyAgICAgKiBbMTYzXWh0dHA6Ly93d3cuZW1lcnNvbi5lbW9yeS5lZHUvc2VydmljZXMvYWl4LWZh cS8KKyAgICAgKiBbMTY0XWh0dHA6Ly93d3cuZmFxcy5vcmcvZmFxcy9ieS1uZXdzZ3JvdXAvY29t cC9jb21wLnVuaXguYWl4Lmh0bWwKKyAgICAgKiBbMTY1XWh0dHA6Ly93d3cuY2lzLm9oaW8tc3Rh dGUuZWR1L2h5cGVydGV4dC9mYXEvdXNlbmV0L2FpeC1mYXEvdG9wCisgICAgICAgLmh0bWwKKyAg ICAgKiBbMTY2XWh0dHA6Ly9haXhwZHNsaWIuc2Vhcy51Y2xhLmVkdS8KKyAgICAgKiBbMTY3XWh0 dHA6Ly93d3cucm9vdHZnLm5ldCAoQUlYIGhpc3RvcnkpCisgICAgICogWzE2OF1mdHA6Ly9ydGZt Lm1pdC5lZHUvcHViL3VzZW5ldC9uZXdzLmFuc3dlcnMvYWl4LWZhcS9wYXJ0MQorICAgICAqIFsx NjldZnRwOi8vbWlycm9ycy5hb2wuY29tL3B1Yi9ydGZtL3VzZW5ldC1ieS1oaWVyYXJjaHkvY29t cC91bml4L2EKKyAgICAgICBpeAorCisgICBhbmQvb3IgcmVhZCB0aGUgWzE3MF1jb21wLnVuaXgu YWl4IG5ld3Nncm91cC4KKyAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKzMuMS4xLiBBSVg6IEdlbmVyYWwK KworICAgWyBbMTcxXVRvcCBdIFsgWzE3Ml1Db250ZW50cyBdIFsgWzE3M11TZWN0aW9uIENvbnRl bnRzIF0gWyBbMTc0XU5leHQgXQorCisgICBBYm91dCBBSVggdmVyc2lvbiBudW1iZXJzOiAidW5h bWUgLWEiIHRlbGxzIHRoZSB0d28tZGlnaXQgdmVyc2lvbgorICAgbnVtYmVyLCBzdWNoIGFzIDMu MiBvciA0LjEuIFRoZSB0aHJlZS1kaWdpdCBmb3JtIGNhbiBiZSBzZWVuIHdpdGggdGhlCisgICAi b3NsZXZlbCIgY29tbWFuZCAodGhpcyBpbmZvcm1hdGlvbiBpcyB1bmF2YWlsYWJsZSBhdCB0aGUg QVBJIGxldmVsIGFuZAorICAgaXMgcmVwb3J0ZWRseSBvYnRhaW5lZCBieSBzY2FubmluZyB0aGUg aW5zdGFsbGVkIHBhdGNoIGxpc3QpLgorICAgU3VwcG9zZWRseSBhbGwgdGhyZWUtZGlnaXQgdmVy c2lvbnMgd2l0aGluIHRoZSBzYW1lIHR3by1kaWdpdCB2ZXJzaW9uCisgICAoZS5nLiA0LjMuMSwg NC4zLjIpIGFyZSBiaW5hcnkgY29tcGF0aWJsZTsgaS5lLiBhIGJpbmFyeSBidWlsdCBvbiBhbnkK KyAgIG9uZSBvZiB0aGVtIHNob3VsZCBydW4gb24gYWxsIG90aGVycywgYnV0IHdobyBrbm93cy4g TW9zdCBBSVggYWR2b2NhdGVzCisgICB0ZWxsIHlvdSB0aGF0IGFueSBBSVggYmluYXJ5IHdpbGwg cnVuIG9uIGFueSBBSVggdmVyc2lvbiBncmVhdGVyIHRoYW4KKyAgIG9yIGVxdWFsIHRvIHRoZSBv bmUgdW5kZXIgd2hpY2ggaXQgd2FzIGJ1aWx0LCBidXQgZXhwZXJpZW5jZSB3aXRoCisgICBDLUtl cm1pdCBzdWdnZXN0cyBvdGhlcndpc2UuIEl0IGlzIGFsd2F5cyBiZXN0IHRvIHJ1biBhIGJpbmFy eSBidWlsdAorICAgdW5kZXIgeW91ciBleGFjdCBzYW1lIEFJWCB2ZXJzaW9uLCBkb3duIHRvIHRo ZSB0aGlyZCBkZWNpbWFsIHBsYWNlLCBpZgorICAgcG9zc2libGUuIElkZWFsbHksIGJ1aWxkIGl0 IGZyb20gc291cmNlIGNvZGUgeW91cnNlbGYuIFllcywgdGhpcyBhZHZpY2UKKyAgIHdvdWxkIGJl IGVhc2llciB0byBmb2xsb3cgaWYgQUlYIGNhbWUgd2l0aCBhIEMgY29tcGlsZXIuCisgIF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXworCiszLjEuMi4gQUlYOiBOZXR3b3JrIENvbm5lY3Rpb25zCisKKyAgIFsgWzE3 NV1Ub3AgXSBbIFsxNzZdQ29udGVudHMgXSBbIFsxNzddU2VjdGlvbiBDb250ZW50cyBdIFsgWzE3 OF1OZXh0IF0KKyAgIFsgWzE3OV1QcmV2aW91cyBdCisKKyAgIEZpbGUgdHJhbnNmZXJzIGludG8g QUlYIDQuMiBvciA0LjMgdGhyb3VnaCB0aGUgQUlYIFRlbG5ldCBvciBSbG9naW4KKyAgIHNlcnZl ciBoYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gZmFpbCAob3IgYWNjdW11bGF0ZSBodWdlIG51bWJlcnMg b2YKKyAgIGNvcnJlY3RhYmxlIGVycm9ycywgb3IgZXZlbiBkaXNjb25uZWN0IHRoZSBzZXNzaW9u KSwgd2hlbiBleGFjdGx5IHRoZQorICAgc2FtZSBraW5kIG9mIHRyYW5zZmVycyBpbnRvIEFJWCA0 LjEgd29yayB3aXRob3V0IGluY2lkZW50LCBhcyBkbyBzdWNoCisgICB0cmFuc2ZlcnMgaW50byBh bGwgbm9uLUFJWCBwbGF0Zm9ybXMgb24gdGhlIHNhbWUga2luZCBvZiBjb25uZWN0aW9ucworICAg KHdpdGggYSBmZXcgZXhjZXB0aW9ucyBub3RlZCBlbHNld2hlcmUgaW4gdGhpcyBkb2N1bWVudCku IEFJWCA0LjMuMworICAgc2VlbXMgdG8gYmUgcGFydGljdWxhcmx5IGZyYWdpbGUgaW4gdGhpcyBy ZWdhcmQ7IHRoZSB3ZWFrbmVzcyBzZWVtcyB0bworICAgYmUgaW4gaXRzIHBzZXVkb3Rlcm1pbmFs IChwdHkpIGRyaXZlci4gSGlnaC1zcGVlZCBzdHJlYW1pbmcgdHJhbnNmZXJzCisgICB3b3JrIHBl cmZlY3RseSwgaG93ZXZlciwgaWYgdGhlIEFJWCBUZWxuZXQgc2VydmVyIGFuZCBwdHkgZHJpdmVy IGFyZQorICAgcmVtb3ZlZCBmcm9tIHRoZSBwaWN0dXJlOyBlLmcsIGJ5IHVzaW5nICJzZXQgaG9z dCAqIDMwMDAiIG9uIEFJWC4KKworICAgVGhlIHByb2JsZW0gY2FuIGJlIGNvbXBsZXRlbHkgY3Vy ZWQgYnkgcmVwbGFjaW5nIHRoZSBJQk0gVGVsbmV0IHNlcnZlcgorICAgd2l0aCBbMTgwXU1JVCdz IEtlcmJlcm9zIFRlbG5ldCBzZXJ2ZXIgLS0gZXZlbiBpZiB5b3UgZG9uJ3QgYWN0dWFsbHkKKyAg IHVzZSB0aGUgS2VyYmVyb3MgcGFydC4gRGlhZ25vc2lzOiBBSVggcHNldWRvdGVybWluYWxzICh3 aGljaCBhcmUKKyAgIGNvbnRyb2xsZWQgYnkgdGhlIFRlbG5ldCBzZXJ2ZXIgdG8gZ2l2ZSB5b3Ug YSBsb2dpbiB0ZXJtaW5hbCBmb3IgeW91cgorICAgc2Vzc2lvbikgaGF2ZSBxdWlya3MgdGhhdCBu b3QgZXZlbiBJQk0ga25vd3MgYWJvdXQuIFRoZSBzaXR1YXRpb24gd2l0aAorICAgQUlYIDUueCBp cyBub3Qga25vd24sIGJ1dCBpZiBpdCBoYXMgdGhlIHNhbWUgcHJvYmxlbSwgdGhlIHNhbWUgY3Vy ZSBpcworICAgYXZhaWxhYmxlLgorCisgICBNZWFud2hpbGUsIHRoZSBvbmx5IHJlbWVkeSB3aGVu IGdvaW5nIHRocm91Z2ggdGhlIElCTSBUZWxuZXQgc2VydmVyIGlzCisgICB0byBjdXQgYmFjayBv biBLZXJtaXQncyBwZXJmb3JtYW5jZSBzZXR0aW5ncyB1bnRpbCB5b3UgZmluZCBhCisgICBjb21i aW5hdGlvbiB0aGF0IHdvcmtzOgorCisgICAgICogU0VUIFNUUkVBTUlORyBPRkYKKyAgICAgKiBT RVQgV0lORE9XLVNJWkUgc21hbGwtbnVtYmVyCisgICAgICogU0VUIHsgU0VORCwgUkVDRUlWRSB9 IFBBQ0tFVC1MRU5HVEggc21hbGwtbnVtYmVyCisgICAgICogU0VUIFBSRUZJWElORyB7IENBVVRJ T1VTLCBBTEwgfQorCisgICBJbiBzb21lIGNhc2VzLCBzZXZlcmUgY3V0YmFja3MgYXJlIHJlcXVp cmVkLCBlLmcuIHRob3NlIGltcGxpZWQgYnkgdGhlCisgICBST0JVU1QgY29tbWFuZC4gQWxzbyBi ZSBzdXJlIHRoYXQgdGhlIEFJWCBDLUtlcm1pdCBvbiB0aGUgcmVtb3RlIGVuZAorICAgaGFzICJz ZXQgZmxvdyBub25lIiAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLiBOT1RFOiBNYXliZSB0aGlzIG9u ZSBjYW4KKyAgIGFsc28gYmUgYWRkcmVzc2VkIGJ5IHN0YXJ0aW5nIEFJWCB0ZWxuZXRkIHdpdGgg dGhlICItYSIgb3B0aW9uLiBUaGUKKyAgIHNpdHVhdGlvbiB3aXRoIFNTSCBjb25uZWN0aW9ucyBp cyBub3Qga25vd24sIGJ1dCBhbG1vc3QgY2VydGFpbmx5IHRoZQorICAgc2FtZS4KKworICAgV2hl biB0aGVzZSBwcm9ibGVtcyBvY2N1ciwgdGhlIHN5c3RlbSBlcnJvciBsb2cgY29udGFpbnM6CisK KyAgTEFCRUw6ICAgICAgICAgIFRUWV9UVFlIT0cKKyAgSURFTlRJRklFUjogICAgIDA4NzNDRjlG CisgIFR5cGU6ICAgICAgICAgICBURU1QCisgIFJlc291cmNlIE5hbWU6ICBwdHMvMQorCisgIERl c2NyaXB0aW9uCisgIFRUWUhPRyBPVkVSLVJVTgorCisgIEZhaWx1cmUgQ2F1c2VzCisgIEVYQ0VT U0lWRSBMT0FEIE9OIFBST0NFU1NPUgorCisgIFJlY29tbWVuZGVkIEFjdGlvbnMKKyAgUkVEVUNF IFNZU1RFTSBMT0FELgorICBSRURVQ0UgU0VSSUFMIFBPUlQgQkFVRCBSQVRFCisKKyAgIEJlZm9y ZSBsZWF2aW5nIHRoZSB0b3BpYyBvZiBBSVggcHNldWRvdGVybWluYWxzLCBpdCBpcyB2ZXJ5IGxp a2VseSB0aGF0CisgICBLZXJtaXQncyBQVFkgYW5kIFNTSCBjb21tYW5kcyBkbyBub3Qgd29yayB3 ZWxsIGVpdGhlciwgZm9yIHRoZSBzYW1lCisgICByZWFzb24gdGhhdCBUZWxuZXQgY29ubmVjdGlv bnMgaW50byBBSVggZG9uJ3Qgd29yayB3ZWxsLiBBIGJyaWVmIHRlc3QKKyAgIHdpdGggInB0eSBy bG9naW4gc29tZWhvc3QiIGdvdCBhIHBlcmZlY3RseSB1c2FibGUgdGVybWluYWwgKENPTk5FQ1Qp CisgICBzZXNzaW9uLCBidXQgZmlsZS10cmFuc2ZlciBwcm9ibGVtcyBsaWtlIHRob3NlIGp1c3Qg ZGVzY3JpYmVkLgorCisgICBSZXBvcnRlZGx5LCB0ZWxuZXQgZnJvbSBBSVggNC4xLXBvaW50LXNv bWV0aGluZyB0byBub24tVGVsbmV0IHBvcnRzCisgICBkb2VzIG5vdCB3b3JrIHVubGVzcyB0aGUg cG9ydCBudW1iZXIgaXMgaW4gdGhlIC9ldGMvc2VydmljZXMgZmlsZTsgaXQncworICAgbm90IGNs ZWFyIGZyb20gdGhlIHJlcG9ydCB3aGV0aGVyIHRoaXMgaXMgYSBwcm9ibGVtIHdpdGggQUlYIFRl bG5ldCAoaW4KKyAgIHdoaWNoIGNhc2UgaXQgd291bGQgbm90IGFmZmVjdCBLZXJtaXQpLCBvciB3 aXRoIHRoZSBzb2NrZXRzIGxpYnJhcnkgKGluCisgICB3aGljaCBjYXNlIGl0IHdvdWxkKS4gVGhl IHB1cnBvcnRlZCBmaXggaXMgSUJNIEFQQVIgSVg2MTUyMy4KKworICAgQy1LZXJtaXQgU0VUIEhP U1Qgb3IgVEVMTkVUIGZyb20gb25lIEFJWCAzLjEgKG9yIGVhcmxpZXIpIHN5c3RlbSB0bworICAg YW5vdGhlciB3b24ndCB3b3JrIHJpZ2h0IHVubGVzcyB5b3Ugc2V0IHlvdXIgbG9jYWwgdGVybWlu YWwgdHlwZSB0bworICAgc29tZXRoaW5nIG90aGVyIHRoYW4gQUlYVEVSTS4gV2hlbiB5b3VyIHRl cm1pbmFsIHR5cGUgaXMgQUlYVEVSTSwgQUlYCisgICBURUxORVQgc2VuZHMgdHdvIGVzY2FwZXMg d2hlbmV2ZXIgeW91IHR5cGUgb25lLCBhbmQgdGhlIEFJWCB0ZWxuZXQKKyAgIHNlcnZlciBzd2Fs bG93cyBvbmUgb2YgdGhlbS4gVGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlICJoZnQi CisgICBkZXZpY2UuIFRoaXMgYmVoYXZpb3Igc2VlbXMgdG8gYmUgcmVtb3ZlZCBpbiBBSVggMy4y IGFuZCBsYXRlci4KKyAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKzMuMS4zLiBBSVg6IFNlcmlhbCBDb25u ZWN0aW9ucworCisgICBbIFsxODFdVG9wIF0gWyBbMTgyXUNvbnRlbnRzIF0gWyBbMTgzXVNlY3Rp b24gQ29udGVudHMgXSBbIFsxODRdTmV4dCBdCisgICBbIFsxODVdUHJldmlvdXMgXQorCisgICBJ biBBSVggMywgNCwgb3IgNSwgQy1LZXJtaXQgd29uJ3QgYmUgYWJsZSB0byAic2V0IGxpbmUgL2Rl di90dHkwIiAob3IKKyAgIGFueSBvdGhlciBkaWFsb3V0IGRldmljZSkgaWYgeW91IGhhdmVuJ3Qg aW5zdGFsbGVkICJjdSIgb3IgInV1Y3AiIG9uCisgICB5b3VyIHN5c3RlbSwgYmVjYXVzZSBpbnN0 YWxsaW5nIHRoZXNlIGlzIHdoYXQgY3JlYXRlcyB0aGUgVVVDUCBsb2NrZmlsZQorICAgZGlyZWN0 b3J5LiBJZiBTRVQgTElORSBjb21tYW5kcyBhbHdheXMgcmVzdWx0IGluICJTb3JyeSwgYWNjZXNz IHRvIGxvY2sKKyAgIGRlbmllZCIsIGV2ZW4gd2hlbiBDLUtlcm1pdCBoYXMgYmVlbiBnaXZlbiB0 aGUgc2FtZSBvd25lciwgZ3JvdXAsIGFuZAorICAgcGVybWlzc2lvbnMgYXMgY3U6CisKKyAgLXIt c3IteHIteCAgIDEgdXVjcCAgICAgdXVjcCAgICAgICA2NzIxNiBKdWwgMjcgMTk5OSAgY3UKKwor ICAgYW5kIGV2ZW4gd2hlbiB5b3UgcnVuIGl0IGFzIHJvb3QsIHRoZW4geW91IG11c3QgZ28gYmFj ayBhbmQgaW5zdGFsbAorICAgImN1IiBmcm9tIHlvdXIgQUlYIGluc3RhbGxhdGlvbiBtZWRpYS4K KworICAgQWNjb3JkaW5nIHRvIElCTSdzICJGcm9tIFN0cmVuZ3RoIHRvIFN0cmVuZ3RoIiBkb2N1 bWVudCAoMjEgQXByaWwKKyAgIDE5OTgpLCBpbiBBSVggNC4yIGFuZCBsYXRlciAiQXN5bmMgc3Vw cG9ydHMgc3BlZWRzIG9uIG5hdGl2ZSBzZXJpYWwKKyAgIHBvcnRzIHVwIHRvIDExNS4ya2JwcyIu IEhvd2V2ZXIsIG5vIEFQSSBpcyBkb2N1bWVudGVkIHRvIGFjaGlldmUgc2VyaWFsCisgICBzcGVl ZHMgaGlnaGVyIHRoYW4gMzg0MDAgYnBzLiBBcHBhcmVudGx5IHRoZSB3YXkgdG8gZG8gdGhpcyAt LSB3aGljaAorICAgbWlnaHQgb3IgbWlnaHQgbm90IHdvcmsgb25seSBvbiB0aGUgSUJNIDEyOC1w b3J0IG11bHRpcGxleGVyIC0tIGlzOgorCisgIGN4bWEtc3R0eSBmYXN0YmF1ZCAvZGV2L3R0eTAK KworICAgd2hpY2gsIGFjY29yZGluZyB0byAibWFuIGN4bWEtc3R0eSI6CisKKyAgICAgZmFzdGJh dWQgQWx0ZXJzIHRoZSBiYXVkIHJhdGUgdGFibGUsIHNvIDUwIGJhdWQgYmVjb21lcyA1NzYwMCBi YXVkLgorICAgICAtZmFzdGJhdWQgUmVzdG9yZXMgdGhlIGJhdWQgcmF0ZSB0YWJsZSwgc28gNTc2 MDAgYmF1ZCBiZWNvbWVzIDUwCisgICAgIGJhdWQuCisKKyAgIFByZXN1bWFibHkgKGJ1dCBub3Qg Y2VydGFpbmx5KSB0aGlzIGV4dHJhcG9sYXRlcyB0byAxMTAgImJhdWQiIGJlY29tZXMKKyAgIDc2 ODAwIGJwcywgYW5kIDE1MCBiZWNvbWVzIDExNTIwMCBicHMuIFNvIHRvIHVzZSBoaWdoIHNlcmlh bCBzcGVlZHMgaW4KKyAgIEFJWCA0LjIgb3IgNC4zLCB0aGUgdHJpY2sgd291bGQgYmUgdG8gZ2l2 ZSB0aGUgImN4bWEtc3R0eSBmYXN0YmF1ZCIKKyAgIGNvbW1hbmQgZm9yIHRoZSBkZXNpcmVkIHR0 eSBkZXZpY2UgYmVmb3JlIHN0YXJ0aW5nIEtlcm1pdCwgYW5kIHRoZW4gdXNlCisgICAic2V0IHNw ZWVkIDUwIiwgInNldCBzcGVlZCAxMTAiLCBvciAic2V0IHNwZWVkIDE1MCIgdG8gc2VsZWN0IDU2 NzAwLAorICAgNzY4MDAsIG9yIDExNTIwMCBicHMuIEl0IGlzIG5vdCBrbm93biB3aGV0aGVyIGN4 bWEtc3R0eSByZXF1aXJlcworICAgcHJpdmlsZWdlLgorCisgICBBY2NvcmRpbmcgdG8gb25lIHJl cG9ydCwgIkZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB3aXRoIElCTSBzZWVtcyB0bworICAgaW5kaWNh dGUgdGhhdCB0aGUgb25seSBoYXJkd2FyZSBjYXBhYmxlIG9mIGRvaW5nIHRoaXMgaXMgdGhlIDEy OC1wb3J0CisgICBtdWx0aXBsZXhvciB3aXRoIG9uZSAob3IgbW9yZSkgb2YgdGhlIDE2IHBvcnQg YnJlYWtvdXQgY2FibGVzIChFbmhhbmNlZAorICAgUmVtb3RlIEFzeW5jIE5vZGUgMTYtUG9ydCBF SUEtMjMyKS4gV2UgYXJlIGxvb2tpbmcgYXQgYWJvdXQgQ0ROJDQsMDAwCisgICBpbiBoYXJkd2Fy ZSBqdXN0IHRvIGhhbmcgYSA1NmtiIG1vZGVtIG9uIHRoZXJlLiBPZiBjb3Vyc2UsIHdlIGNhbiB0 aGVuCisgICBoYW5nIDE1IG1vcmUsIGlmIHdlIHdhbnQuIFRoaXMgaGFyZHdhcmUgY29tYm8gaXMg ZGVzY3JpYmVkIHRvIGJlIGdvb2QKKyAgIHRvIDIzMC40a2Jwcy4iCisKKyAgIEFub3RoZXIgcmVw b3J0IHNheXMgKHF1b3RlIGZyb20gQUlYIG5ld3Nncm91cCwgTWFyY2ggMTk5OSk6CisKKyAgICAg VGhlIG1hY2hpbmUgdHlwZSBhbmQgdGhlIGFkYXB0ZXIgZGV0ZXJtaW5lIHRoZSBzcGVlZCB0aGF0 IG9uZSBjYW4KKyAgICAgYWN0dWFsbHkgcnVuIGF0LiBUaGUgb2xkZXIgbWljcm9jaGFubmVsIG1h Y2hpbmVzIGhhdmUgbXVjaCBzbG93ZXIKKyAgICAgY3J5c3RhbCBmcmVxdWVuY2llcyBhbmQgbWF5 IG5vdCBnbyBiZXlvbmQgNzYsODAwLiBBIGZlYXR1cmUgcHV0IGludG8KKyAgICAgQUlYIDQyMSBh bGxvd3Mgb25lIHRvIGtleSBpbiBub24tUE9TSVggYmF1ZCByYXRlcyBhbmQgaWYgdGhlIHVhcnQK KyAgICAgY2FuIHN1cHBvcnQgdGhhdCBzcGVlZCwgaXQgd2lsbCBnZXQgc2V0LiB0aGlzIGFwcGxp ZXMgYWxzbyB0byA0M3AncworICAgICBhbmQgYmV5b25kLiAxMTUyMDAgaXMgdGhlIG1heCBmb3Ig dGhlIDQzUCdzIG5hdGl2ZSBzZXJpYWwgcG9ydC4gQXMKKyAgICAgY3J5dGFsIGZyZXF1ZW5jaWVz IGNvbnRpbnVlIHRvIGluY3JlYXNlLCB0aGUgYnVpbHQtaW4gc2VyaWFsIHBvcnRzCisgICAgIHNw ZWVkcyB3aWxsIGltcHJvdmUuIFRvIHVzZSAndXVjcCcgb3IgJ2F0ZScgYXQgdGhlIGhpZ2hlciBi YXVkCisgICAgIHJhdGVzLCBjb25maWd1cmUgdGhlIHBvcnQgZm9yIHRoZSBkZXNpcmVkIHNwZWVk LCBidXQgc2V0IHRoZSBzcGVlZAorICAgICBvZiB1dWNwIG9yIGF0ZSB0byA1MC4gQW55IG5vbi1Q T1NJWCBzcGVlZHMgc2V0IGluIHRoZSB0dHlzCisgICAgIGNvbmZpZ3VyYXRpb24gd2lsbCB0aGUg YmUgdXNlZC4gSW4gdGhlIGNhc2Ugb2YgdGhlIDEyOC1wb3J0IGFkYXB0ZXJzCisgICAgIG9yIHRo ZSBJU0EgOC1wb3J0IG9yIFBDSSA4LXBvcnQgYWRhcHRlciwgdGhlcmUgYXJlIG9ubHkgYSBmZXcg aGlnaGVyCisgICAgIGJhdWQgcmF0ZXMuCisKKyAgICBhLiBDaGFuZ2UgdGhlIHBvcnQgdG8gZW5h YmxlIGhpZ2ggYmF1ZCByYXRlczoKKyAgICAgICAgICArIEI1MCBmb3IgNTc2MDAKKyAgICAgICAg ICArIEI3NSBmb3IgNzY4MDAKKyAgICAgICAgICArIEIxMTAgZm9yIDExNTIwMAorICAgICAgICAg ICsgQjIwMCBmb3IgMjMwMDAwCisgICAgYi4gY2hkZXYgLWwgdHR5WCAtYSBmYXN0YmF1ZD1lbmFi bGUKKyAgICAgICAgICArIEZvciB0aGUgMTI4IHBvcnRzIG9yaWdpbmFsIHN0eWxlIHJhbnMsIG9u bHkgNTc2MDAgYnBzIGlzCisgICAgICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICAgKyBGb3Ig dGhlIG5ldyBlbmhhbmNlZCBSQU5zLCB1cCB0byAyMzBLYnBzIGlzIHN1cHBvcnRlZC4KKworICAg SW4gQUlYIDIuMi4xIG9uIHRoZSBSVCBQQyB3aXRoIHRoZSA4LXBvcnQgbXVsdGlwbGV4ZXIsIFNF VCBTUEVFRCAzODQwMAorICAgZ2l2ZXMgOTYwMCBicHMsIGJ1dCBTRVQgU1BFRUQgMTkyMDAgZ2l2 ZXMgMTkyMDAgKG9uIHRoZSBidWlsdC1pbiBTMQorICAgcG9ydCkuCisKKyAgIE5vdGUgdGhhdCBz b21lIFJTLzYwMDBzIChlLmcuIHRoZSBJQk0gUG93ZXJTZXJ2ZXIgMzIwKSBoYXZlIG5vbnN0YW5k YXJkCisgICByZWN0YW5ndWxhciAxMC1waW4gc2VyaWFsIHBvcnRzOyB0aGUgREItMjUgY29ubmVj dG9yIGlzIE5PVCBhIHNlcmlhbAorICAgcG9ydDsgaXQgaXMgYSBwYXJhbGxlbCBwcmludGVyIHBv cnQuIElCTSBjYWJsZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUKKyAgIHNlcmlhbCBwb3J0cywgKFRo ZSBJQk0gUlQgUEMgYWxzbyBoYWQgcmVjdGFuZ3VsYXIgc2VyaWFsIHBvcnRzIC0tCisgICBwZXJo YXBzIHRoZSBzYW1lIGFzIHRoZXNlLCBwZXJoYXBzIGRpZmZlcmVudC4pCisKKyAgIElmIHlvdSBk aWFsIGluIHRvIEFJWCB0aHJvdWdoIGEgbW9kZW0gdGhhdCBpcyBjb25uZWN0ZWQgZGlyZWN0bHkg dG8gYW4KKyAgIEFJWCBwb3J0IChlLmcuIG9uIHRoZSAxMjgtcG9ydCBtdWx0aXBsZXhlcikgYW5k IGZpbmQgdGhhdCBkYXRhIGlzIGxvc3QsCisgICBlc3BlY2lhbGx5IHdoZW4gdXBsb2FkaW5nIGZp bGVzIHRvIHRoZSBBSVggc3lzdGVtIChhbmQgc3lzdGVtIGVycm9yCisgICBsb2dzIHJlcG9ydCBi dWZmZXIgb3ZlcnJ1bnMgb24gdGhlIHBvcnQpOgorCisgICAgMS4gTWFrZSBzdXJlIHRoZSBwb3J0 IGFuZCBtb2RlbSBhcmUgQk9USCBjb25maWd1cmVkIGZvciBoYXJkd2FyZQorICAgICAgIChSVFMv Q1RTKSBmbG93IGNvbnRyb2wuIFRoZSBwb3J0IGlzIGNvbmZpZ3VyZWQgc29tZXdoZXJlIGluIHRo ZQorICAgICAgIHN5c3RlbSBjb25maWd1cmF0aW9uLCBvdXRzaWRlIG9mIEtlcm1pdC4KKyAgICAy LiBUZWxsIEMtS2VybWl0IHRvICJzZXQgZmxvdyBrZWVwIjsgZXhwZXJpbWVudGF0aW9uIHNob3dz IHRoYXQgU0VUCisgICAgICAgRkxPVyBSVFMvQ1RTIGhhcyBubyBlZmZlY3Qgd2hlbiB1c2VkIGlu IHJlbW90ZSBtb2RlIChpLmUuIG9uCisgICAgICAgL2Rldi90dHksIGFzIG9wcG9zZWQgdG8gYSBz cGVjaWZ5IHBvcnQgZGV2aWNlKS4KKyAgICAzLiBGaXhlcyBmb3IgYnVncyBpbiB0aGUgb3JpZ2lu YWwgQUlYIDQuMiB0dHkgKHNlcmlhbCBpL28pIHN1cHBvcnQgYW5kCisgICAgICAgb3RoZXIgQUlY IGJ1Z3MgYXJlIGF2YWlsYWJsZSBmcm9tIElCTSBhdDoKKyAgWzE4Nl1odHRwOi8vc2VydmljZS5z b2Z0d2FyZS5pYm0uY29tL3JzNjAwMC8KKworICAgICAgIERvd25sb2FkcyAtPiBTb2Z0d2FyZSBG aXhlcyAtPiBEb3dubG9hZCBGaXhEaXN0IGdldHMgYW4gYXBwbGljYXRpb24KKyAgICAgICBmb3Ig bG9va2luZyB1cCBrbm93biBwcm9ibGVtcy4KKworICAgTWFueSBwcm9ibGVtcyByZXBvcnRlZCB3 aXRoIGJpZGlyZWN0aW9uYWwgdGVybWluYWwgbGluZXMgb24gQUlYIDMuMi54CisgICBvbiB0aGUg UlMvNjAwMC4gV29ya2Fyb3VuZDogZG9uJ3QgdXNlIGJpZGlyZWN0aW9uYWwgdGVybWluYWwgbGlu ZXMsIG9yCisgICB3cml0ZSBhIHNoZWxsLXNjcmlwdCB3cmFwcGVyIGZvciBLZXJtaXQgdGhhdCB0 dXJucyBnZXR0eSBvZmYgb24gdGhlCisgICBsaW5lIGJlZm9yZSBzdGFydGluZyBLZXJtaXQsIG9y IGJlZm9yZSBLZXJtaXQgYXR0ZW1wdHMgdG8gZG8gdGhlIFNFVAorICAgTElORS4gKEJ1dCBub3Rl OiBUaGVzZSBwcm9ibGVtcyBNSUdIVCBiZSBmaXhlZCBpbiBDLUtlcm1pdCA2LjAgYW5kCisgICBs YXRlci4pIFRoZSBjb21tYW5kcyBmb3IgdHVybmluZyBnZXR0eSBvZmYgYW5kIG9uIChyZXNwZWN0 aXZlbHkpIGFyZQorICAgL3Vzci9zYmluL3BkaXNhYmxlIGFuZCAvdXNyL3NiaW4vcGVuYWJsZS4K KyAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCisKKzMuMS40LiBBSVg6IEZpbGUgVHJhbnNmZXIKKworICAgWyBb MTg3XVRvcCBdIFsgWzE4OF1Db250ZW50cyBdIFsgWzE4OV1TZWN0aW9uIENvbnRlbnRzIF0gWyBb MTkwXU5leHQgXQorICAgWyBbMTkxXVByZXZpb3VzIF0KKworICAgRXZpZGVudGx5IEFJWCA0LjMg KEkgZG9uJ3Qga25vdyBhYm91dCBlYXJsaWVyIHZlcnNpb25zKSBkb2VzIG5vdCBhbGxvdworICAg b3BlbiBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbi4gVGhpcyBjYW4gY2F1c2UgS2VybWl0IHRyYW5z ZmVycyB0byBmYWlsCisgICB3aGVuIEZJTEUgQ09MTElTSU9OIGlzIE9WRVJXUklURSwgd2hlcmUg dGhleSBtaWdodCB3b3JrIG9uIG90aGVyIFVuaXgKKyAgIHZhcmlldGllcyBvciBlYXJsaWVyIEFJ WCB2ZXJzaW9ucy4KKworICAgVHJhbnNmZXIgb2YgYmluYXJ5IC0tIGFuZCBtYXliZSBldmVuIHRl eHQgLS0gZmlsZXMgY2FuIGZhaWwgaW4gQUlYIGlmCisgICB0aGUgQUlYIHRlcm1pbmFsIGhhcyBw YXJ0aWN1bGFyIHBvcnQgY2FuIGhhdmUgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbgorICAgZG9u ZSBmb3IgaXQgYnkgdGhlIHR0eSBkcml2ZXIuIFRoZSBmb2xsb3dpbmcgYWR2aWNlIGZyb20gYQor ICAga25vd2xlZGdlYWJsZSBBSVggdXNlcjoKKworICAgICBbVGhpcyBmZWF0dXJlXSBoYXMgdG8g YmUgY2hlY2tlZCAoYW5kIHNldC9jbGVhcmVkKSB3aXRoIGEgc2VwYXJhdGUKKyAgICAgY29tbWFu ZCwgdW5mb3J0dW5hdGVseSBzdHR5IGRvZXNuJ3QgaGFuZGxlIHRoaXMuIFRvIGNoZWNrOgorCisg ICQgc2V0bWFwcworICBpbnB1dCBtYXA6IG5vbmUgaW5zdGFsbGVkCisgIG91dHB1dCBtYXA6IG5v bmUgaW5zdGFsbGVkCisKKyAgICAgSWYgaXQgc2F5cyBhbnl0aGluZyBvdGhlciB0aGFuICJub25l IGluc3RhbGxlZCIgZm9yIGVpdGhlciBvbmUsIGl0CisgICAgIGlzIGxpa2VseSB0byBjYXVzZSBh IHByb2JsZW0gd2l0aCBrZXJtaXQuIFRvIGdldCByaWQgb2YgaW5zdGFsbGVkCisgICAgIG1hcHM6 CisKKyAgJCBzZXRtYXBzIC10IE5PTUFQCisKKyAgICAgSG93ZXZlciwgSSBzZWVtIHRvIHJlY2Fs bCB0aGF0IHdpdGggc29tZSB2ZXJzaW9ucyBvZiBBSVggYmVmb3JlCisgICAgIDMuMi41LCBvbmx5 IHJvb3QgY291bGQgY2hhbmdlIHRoZSBzZXR0aW5nLiBJJ20gbm90IHN1cmUgd2hhdAorICAgICB2 ZXJzaW9ucyAtIGl0IG1pZ2h0IGhhdmUgb25seSBiZWVuIHVuZGVyIEFJWCAzLjEgdGhhdCB0aGlz IHdhcyB0cnVlLgorICAgICBBdCBsZWFzdCB3aXRoIEFJWCAzLjIuNSBhbiBvcmRpbmFyeSB1c2Vy IGNhbiBzZXQgb3IgY2xlYXIgdGhlIG1hcHMuCisKKyAgIE9uIHRoZSBzYW1lIHByb2JsZW0sIGFu b3RoZXIga25vd2xlZGdlYWJsZSBBSVggdXNlciBzYXlzOgorCisgICAgIFRoZSB3YXkgdG8gZ2V0 IGluZm9ybWF0aW9uIG9uIHRoZSBOTFMgbWFwcGluZyB1bmRlciBBSVggKDMuMi41CisgICAgIGFu eXdheSkgaXMgYXMgZm9sbG93cy4gRnJvbSB0aGUgY29tbWFuZCBsaW5lIHR5cGU6CisKKyAgbHNh dHRyIC1sIHR0eSMgLWEgaW1hcCAtYSBvbWFwIC1FIC1ICisKKyAgICAgUmVwbGFjZSB0aGUgdHR5 IG51bWJlciBmb3IgdGhlIG51bWJlciBzaWduIGFib3ZlLiBUaGlzIHdpbGwgZ2l2ZSBhCisgICAg IGh1bWFuIHJlYWRhYmxlIG91dHB1dCBvZiB0aGUgc2V0dGluZ3MgdGhhdCBsb29rcyBsaWtlIHRo aXM7CisKKyAgIyBsc2F0dHIgLWwgdHR5MiAtYSBpbWFwIC1hIG9tYXAgLUUgLUgKKyAgYXR0cmli dXRlIHZhbHVlIGRlc2NyaXB0aW9uICAgICB1c2VyX3NldHRhYmxlCisKKyAgaW1hcCAgICAgIG5v bmUgIElOUFVUIG1hcCBmaWxlICBUcnVlCisgIG9tYXAgICAgICBub25lICBPVVRQVVQgbWFwIGZp bGUgVHJ1ZQorCisgICAgIElmIHlvdSBjaGFuZ2UgdGhlIC1IIHRvIGEgLU8sIHlvdSBnZXQgb3V0 cHV0IHRoYXQgY2FuIGVhc2lseSBiZQorICAgICBwcm9jZXNzZWQgYnkgYW5vdGhlciBwcm9ncmFt IG9yIGEgc2hlbGwgc2NyaXB0LCBmb3IgZXhhbXBsZToKKworICAjIGxzYXR0ciAtbCB0dHkyIC1h IGltYXAgLWEgb21hcCAtRSAtTworICAjaW1hcDpvbWFwCisgIG5vbmU6bm9uZQorCisgICAgIFRv IGNoYW5nZSB0aGUgc2V0dGluZ3MgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGUgY2hkZXYgY29t bWFuZCBpcworICAgICB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBzeW50YXguCisKKyAgY2hkZXYg LWwgdHR5IyAtYSBpbWFwPSdub25lJyAtYSBvbWFwPSdub25lJworCisgICAgIEFnYWluIHN1YnN0 aXR1dGluZyB0aGUgYXBwcm9wcmlhdGUgdHR5IHBvcnQgbnVtYmVyIGZvciB0aGUgbnVtYmVyCisg ICAgIHNpZ24sICJub25lIiBiZWluZyB0aGUgdmFsdWUgd2Ugd2FudCBmb3IgQy1LZXJtaXQuIE9m IGNvdXJzZSwgdGhlCisgICAgIGFib3ZlIGNhbiBhbHNvIGJlIGNoYW5nZWQgYnkgdXNpbmcgdGhl IFNNSVQgdXRpbGl0eSBhbmQgc2VsZWN0aW5nCisgICAgIGRldmljZXMgLSB0dHkuICguLi5lbmQg cXVvdGUpCisKKyAgIEluIDIwMDcgSSBub3RpY2VkIHRoZSBmb2xsb3dpbmcgb24gaGlnaC1zcGVl ZCBTU0ggY29ubmVjdGlvbnMgKGxvY2FsCisgICBuZXR3b3JrKSBpbnRvIEFJWCA1LjM6IHN0cmVh bWluZyB0cmFuc2ZlcnMgaW50byBBSVgganVzdCBkb24ndCB3b3JrLgorICAgVGhlIHNhbWUgbWln aHQgYmUgdHJ1ZSBmb3IgVGVsbmV0IGNvbm5lY3Rpb25zOyBJIGhhdmUgbm8gd2F5IHRvIGNoZWNr LgorICAgSXQgYXBwZWFycyB0aGF0IHRoZSBBSVggcHR5IGRyaXZlciBhbmQvb3IgdGhlIFNTSCAo YW5kIHBvc3NpYmx5IFRlbG5ldCkKKyAgIHNlcnZlciBhcmUgbm90IGNhcGFibGUgb2YgcmVjZWl2 aW5nIGEgc3RlYWR5IHN0cmVhbSBvZiBpbmNvbWluZyBkYXRhIGF0CisgICBoaWdoIHNwZWVkLiBT b2x1dGlvbjogdW5rbm93bi4gV29ya2Fyb3VuZDogcHV0ICJzZXQgc3RyZWFtaW5nIG9mZiIgaW4K KyAgIHlvdXIgLmtlcm1yYyBvciAubXlrZXJtcmMgZmlsZSwgc2luY2Ugc3RyZWFtaW5nIGlzIHRo ZSBkZWZhdWx0IGZvcgorICAgbmV0d29yayBjb25uZWN0aW9ucy4KKyAgX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CisKKzMuMS41LiBBSVg6IFh0ZXJtIEtleSBNYXAKKworICAgWyBbMTkyXVRvcCBdIFsgWzE5M11D b250ZW50cyBdIFsgWzE5NF1TZWN0aW9uIENvbnRlbnRzIF0gWworICAgWzE5NV1QcmV2aW91cyBd CisKKyAgIEhlcmUgaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiBmb3Igc2V0dGluZyB1cCBhbiB4 dGVybSBrZXlib2FyZCBmb3IKKyAgIFZUMjIwIG9yIGhpZ2hlciB0ZXJtaW5hbCBlbXVsYXRpb24g b24gQUlYLCBjb3VydGVzeSBvZiBCcnVjZSBNb21qaWFuLAorICAgRHJleGVsIEhpbGwsIFBBLiBY dGVybSBjYW4gYmUgc3RhcnRlZCBsaWtlIHRoaXM6CisKKyAgeHRlcm0gJFhURVJNRkxBR1MgK3J3 ICtzYiArbHMgJEAgLXRtICdlcmFzZSBePyBpbnRyIF5jJyAtbmFtZSB2dDIyMCBcCisgICAgICAg ICAgLXRpdGxlIHZ0MjIwIC10biB4dGVybS0yMjAgIiRAIiAmCisKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICBYVGVybSpWVDEwMC5UcmFuc2xhdGlvbnM6ICNvdmVycmlkZSBcblwKKyAgICAgICAgICA8 S2V5PkhvbWU6IHN0cmluZygweDFiKSBzdHJpbmcoIlszfiIpIFxuIFwKKyAgICAgICAgICA8S2V5 PkVuZDogc3RyaW5nKDB4MWIpIHN0cmluZygiWzR+IikgXG4KKyAgdnQyMjAqVlQxMDAuVHJhbnNs YXRpb25zOiAjb3ZlcnJpZGUgXG5cCisgIFNoaWZ0ICAgPEtleT5GMTogc3RyaW5nKCJbMjN+Iikg XG4gXAorICBTaGlmdCAgIDxLZXk+RjI6IHN0cmluZygiWzI0fiIpIFxuIFwKKyAgU2hpZnQgICA8 S2V5PkYzOiBzdHJpbmcoIlsyNX4iKSBcbiBcCisgIFNoaWZ0ICAgPEtleT5GNDogc3RyaW5nKCJb MjZ+IikgXG4gXAorICBTaGlmdCAgIDxLZXk+RjU6IHN0cmluZygiW0t+IikgXG4gXAorICBTaGlm dCAgIDxLZXk+RjY6IHN0cmluZygiWzMxfiIpIFxuIFwKKyAgU2hpZnQgICA8S2V5PkY3OiBzdHJp bmcoIlszMX4iKSBcbiBcCisgIFNoaWZ0ICAgPEtleT5GODogc3RyaW5nKCJbMzJ+IikgXG4gXAor ICBTaGlmdCAgIDxLZXk+Rjk6IHN0cmluZygiWzMzfiIpIFxuIFwKKyAgU2hpZnQgICA8S2V5PkYx MDogc3RyaW5nKCJbMzR+IikgXG4gXAorICBTaGlmdCAgIDxLZXk+RjExOiBzdHJpbmcoIlsyOH4i KSBcbiBcCisgIFNoaWZ0ICAgPEtleT5GMTI6IHN0cmluZygiWzI5fiIpIFxuIFwKKyAgICAgICAg ICA8S2V5PlByaW50OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbMzJ+IikgXG5cCisgICAgICAgICAg PEtleT5DYW5jZWw6IHN0cmluZygweDFiKSBzdHJpbmcoIlszM34iKSBcblwKKyAgICAgICAgICA8 S2V5PlBhdXNlOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbMzR+IikgXG5cCisgICAgICAgICAgPEtl eT5JbnNlcnQ6IHN0cmluZygweDFiKSBzdHJpbmcoIlsyfiIpIFxuXAorICAgICAgICAgIDxLZXk+ RGVsZXRlOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbM34iKSBcblwKKyAgICAgICAgICA8S2V5Pkhv bWU6IHN0cmluZygweDFiKSBzdHJpbmcoIlsxfiIpIFxuXAorICAgICAgICAgIDxLZXk+RW5kOiBz dHJpbmcoMHgxYikgc3RyaW5nKCJbNH4iKSBcblwKKyAgICAgICAgICA8S2V5PlByaW9yOiBzdHJp bmcoMHgxYikgc3RyaW5nKCJbNX4iKSBcblwKKyAgICAgICAgICA8S2V5Pk5leHQ6IHN0cmluZygw eDFiKSBzdHJpbmcoIls2fiIpIFxuXAorICAgICAgICAgIDxLZXk+QmFja1NwYWNlOiBzdHJpbmco MHg3ZikgXG5cCisgICAgICAgICAgPEtleT5OdW1fTG9jazogc3RyaW5nKDB4MWIpIHN0cmluZygi T1AiKSBcblwKKyAgICAgICAgICA8S2V5PktQX0RpdmlkZTogc3RyaW5nKDB4MWIpIHN0cmluZygi T2wiKSBcblwKKyAgICAgICAgICA8S2V5PktQX011bHRpcGx5OiBzdHJpbmcoMHgxYikgc3RyaW5n KCJPbSIpIFxuXAorICAgICAgICAgIDxLZXk+S1BfU3VidHJhY3Q6IHN0cmluZygweDFiKSBzdHJp bmcoIk9TIikgXG5cCisgICAgICAgICAgPEtleT5LUF9BZGQ6IHN0cmluZygweDFiKSBzdHJpbmco Ik9NIikgXG5cCisgICAgICAgICAgPEtleT5LUF9FbnRlcjogc3RyaW5nKDB4MWIpIHN0cmluZygi T00iKSBcblwKKyAgICAgICAgICA8S2V5PktQX0RlY2ltYWw6IHN0cmluZygweDFiKSBzdHJpbmco Ik9uIikgXG5cCisgICAgICAgICAgPEtleT5LUF8wOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPcCIp IFxuXAorICAgICAgICAgIDxLZXk+S1BfMTogc3RyaW5nKDB4MWIpIHN0cmluZygiT3EiKSBcblwK KyAgICAgICAgICA8S2V5PktQXzI6IHN0cmluZygweDFiKSBzdHJpbmcoIk9yIikgXG5cCisgICAg ICAgICAgPEtleT5LUF8zOiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPcyIpIFxuXAorICAgICAgICAg IDxLZXk+S1BfNDogc3RyaW5nKDB4MWIpIHN0cmluZygiT3QiKSBcblwKKyAgICAgICAgICA8S2V5 PktQXzU6IHN0cmluZygweDFiKSBzdHJpbmcoIk91IikgXG5cCisgICAgICAgICAgPEtleT5LUF82 OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJPdiIpIFxuXAorICAgICAgICAgIDxLZXk+S1BfNzogc3Ry aW5nKDB4MWIpIHN0cmluZygiT3ciKSBcblwKKyAgICAgICAgICA8S2V5PktQXzg6IHN0cmluZygw eDFiKSBzdHJpbmcoIk94IikgXG5cCisgICAgICAgICAgPEtleT5LUF85OiBzdHJpbmcoMHgxYikg c3RyaW5nKCJPeSIpIFxuCisKKyAgISAgICAgICA8S2V5PlVwOiBzdHJpbmcoMHgxYikgc3RyaW5n KCJbQSIpIFxuXAorICAhICAgICAgIDxLZXk+RG93bjogc3RyaW5nKDB4MWIpIHN0cmluZygiW0Ii KSBcblwKKyAgISAgICAgICA8S2V5PlJpZ2h0OiBzdHJpbmcoMHgxYikgc3RyaW5nKCJbQyIpIFxu XAorICAhICAgICAgIDxLZXk+TGVmdDogc3RyaW5nKDB4MWIpIHN0cmluZygiW0QiKSBcblwKKwor ICAqdmlzdWFsQmVsbDogICAgdHJ1ZQorICAqc2F2ZUxpbmVzOiAgICAgMTAwMAorICAqY3Vyc2Vz ZW11bDogICAgdHJ1ZQorICAqc2Nyb2xsS2V5OiAgICAgdHJ1ZQorICAqc2Nyb2xsQmFyOiAgICAg dHJ1ZQorCiszLjIuIEMtS0VSTUlUIEFORCBIUC1VWAorCisgICBbIFsxOTZdVG9wIF0gWyBbMTk3 XUNvbnRlbnRzIF0gWyBbMTk4XVNlY3Rpb24gQ29udGVudHMgXSBbIFsxOTldTmV4dCBdCisgICBb IFsyMDBdUHJldmlvdXMgXQorCisgICBTRUNUSU9OIENPTlRFTlRTCisKKyAgMy4yLjAuIFsyMDFd Q29tbW9uIFByb2JsZW1zCisgIDMuMi4xLiBbMjAyXUJ1aWxkaW5nIEMtS2VybWl0IG9uIEhQLVVY CisgIDMuMi4yLiBbMjAzXUZpbGUgVHJhbnNmZXIKKyAgMy4yLjMuIFsyMDRdRGlhbGluZyBPdXQg YW5kIFVVQ1AgTG9ja2ZpbGVzIGluIEhQLVVYCisgIDMuMi40LiBbMjA1XU5vdGVzIG9uIFNwZWNp ZmljIEhQLVVYIFJlbGVhc2VzCisgIDMuMi41LiBbMjA2XUhQLVVYIGFuZCBYLjI1CisKKyAgIFJF RkVSRU5DRVMKKworICAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFsyMDddY29t cC5zeXMuaHAuaHB1eCBuZXdzZ3JvdXAuCisKKyAgIEMtS2VybWl0IGlzIGluY2x1ZGVkIGFzIHBh cnQgb2YgdGhlIEhQLVVYIG9wZXJhdGluZyBzeXN0ZW0gYnkgY29udHJhY3QKKyAgIGJldHdlZW4g SGV3bGV0dCBQYWNrYXJkIGFuZCBDb2x1bWJpYSBVbml2ZXJzaXR5IGZvciBIUC1VWCAxMC4wMCBh bmQKKyAgIGxhdGVyLiBFYWNoIGxldmVsIG9mIEhQLVVYIGluY2x1ZGVzIGEgZnJlc2hseSBidWls dCBDLUtlcm1pdCBiaW5hcnkgaW4KKyAgIC9iaW4va2VybWl0LCB3aGljaCBzaG91bGQgd29yayBj b3JyZWN0bHkuIEJpbmFyaWVzIGJ1aWx0IGZvciByZWd1bGFyCisgICBIUC1VWCBtYXkgYmUgdXNl ZCBvbiBUcnVzdGVkIEhQLVVYIGFuZCB2aWNlLXZlcnNhLCBleGNlcHQgZm9yIHVzZSBhcworICAg SUtTRCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgYXV0aGVudGljYXRpb24gbWV0aG9kcy4KKwor ICAgTm90ZSB0aGF0IEhQIGRvZXMgbm90IHVwZGF0ZSBDLUtlcm1pdCB2ZXJzaW9ucyBmb3IgYW55 IGJ1dCBpdHMgbW9zdAorICAgY3VycmVudCBIUC1VWCByZWxlYXNlLiBTbywgZm9yIGV4YW1wbGUs IEhQLVVYIDEwLjIwIGhhcyBDLUtlcm1pdCA2LjA7CisgICAxMS4wMCBoYXMgQy1LZXJtaXQgNy4w LCBhbmQgMTEuMjIgaGFzIDguMC4gT2YgY291cnNlLCBhcyB3aXRoIGFsbAorICAgc29mdHdhcmUs IG9sZGVyIEtlcm1pdCB2ZXJzaW9ucyBoYXZlIGJ1Z3MgKHN1Y2ggYXMgYnVmZmVyIG92ZXJmbG93 CisgICB2dWxuZXJhYmlsaXRpZXMpIHRoYXQgYXJlIGZpeGVkIGluIGxhdGVyIHZlcnNpb25zLiBG cm9tIHRpbWUgdG8gdGltZSwKKyAgIEhQIGRpc2NvdmVycyBvbmUgb2YgdGhlc2UgKGxvbmctYWdv IGZpeGVkKSBidWdzIGFuZCBpc3N1ZXMgYSBzZWN1cml0eQorICAgYWxlcnQgZm9yIHRoZSBvbGRl ciBPUydzLCByZWNvbW1lbmRpbmcgc29tZSBkcmFjb25pYW4gbWVhc3VyZSB0byBhdm9pZAorICAg dGhlIHByb2JsZW0uIFRoZSB0cnVlIGZpeCBpbiBlYWNoIHNpdHVhdGlvbiBpcyB0byBpbnN0YWxs IHRoZSBjdXJyZW50CisgICByZWxlYXNlIG9mIEMtS2VybWl0LgorCiszLjIuMC4gQ29tbW9uIFBy b2JsZW1zCisKKyAgIFsgWzIwOF1Ub3AgXSBbIFsyMDldQ29udGVudHMgXSBbIFsyMTBdU2VjdGlv biBDb250ZW50cyBdIFsgWzIxMV1OZXh0IF0KKworICAgU29tZSBIUCB3b3Jrc3RhdGlvbnMgaGF2 ZSBhIEJSRUFLL1JFU0VUIGtleS4gSWYgeW91IGhpdCB0aGlzIGtleSB3aGlsZQorICAgQy1LZXJt aXQgaXMgcnVubmluZywgaXQgbWlnaHQga2lsbCBvciBzdXNwZW5kIHRoZSBDLUtlcm1pdCBwcm9j ZXNzLgorICAgQy1LZXJtaXQgYXJtcyBpdHNlbGYgYWdhaW5zdCB0aGVzZSBzaWduYWxzLCBidXQg ZXZpZGVudGx5IHRoZQorICAgQlJFQUsvUkVTRVQga2V5IGlzIC0tIGF0IGxlYXN0IGluIHNvbWUg Y2lyY3Vtc3RhbmNlcywgb24gY2VydGFpbiBIUC1VWAorICAgdmVyc2lvbnMgLS0gdG9vIHBvd2Vy ZnVsIHRvIGJlIGNhdWdodC4gKFNvbWUgcmVwb3J0IHRoYXQgdGhlIGZpcnN0CisgICBCUkVBSy9S RVNFVCBzaG93cyB1cCBhcyBTSUdJTlQgYW5kIGlzIGNhdWdodCBieSBDLUtlcm1pdCdzIGZvcm1l cgorICAgU0lHSU5UIGhhbmRsZXIgZXZlbiB3aGVuIFNJR0lOVCBpcyBjdXJyZW50bHkgc2V0IHRv IFNJR19JR047IHRoZSBzZWNvbmQKKyAgIGtpbGxzIEtlcm1pdDsgb3RoZXIgcmVwb3J0cyBzdWdn ZXN0IHRoZSBmaXJzdCBCUkVBSy9SRVNFVCBzZW5kcyBhCisgICBTSUdUU1RQIChzdXNwZW5kIHNp Z25hbCkgdG8gS2VybWl0LCB3aGljaCBpdCBjYXRjaGVzIGFuZCBzdXNwZW5kcworICAgaXRzZWxm LiBZb3UgY2FuIHRlbGwgQy1LZXJtaXQgdG8gaWdub3JlIHN1c3BlbmQgc2lnbmFscyB3aXRoIFNF VAorICAgU1VTUEVORCBPRkYuIFlvdSBjYW4gdGVsbCBDLUtlcm1pdCB0byBpZ25vcmUgU0lHSU5U IHdpdGggU0VUIENPTU1BTkQKKyAgIElOVEVSUlVQVElPTiBPRkYuIEl0IGlzIG5vdCBrbm93biB3 aGV0aGVyIHRoZXNlIGNvbW1hbmRzIGFsc28gZ3JhbnQKKyAgIGltbXVuaXR5IHRvIHRoZSBCUkVB Sy9SRVNFVCBrZXkgKG9uZSByZXBvcnQgc3RhdGVzIHRoYXQgd2l0aCBTRVQKKyAgIFNVU1BFTkQg T0ZGLCB0aGUgQlJFQUsvUkVTRVQga2V5IGlzIGlnbm9yZWQgdGhlIGZpcnN0IGZvdXIgdGltZXMs IGJ1dAorICAga2lsbHMgS2VybWl0IHRoZSA1dGggdGltZSkuIEluIGFueSBjYXNlOgorCisgICAg MS4gSWYgdGhpcyBrZXkgaXMgbWFwcGVkIHRvIFNJR0lOVCBvciBTSUdUU1RQLCBDLUtlcm1pdCBj YXRjaGVzIG9yCisgICAgICAgaWdub3JlcyBpdCwgZGVwZW5kaW5nIG9uIHdoaWNoIG1vZGUgKENP Tk5FQ1QsIGNvbW1hbmQsIGV0YykgS2VybWl0CisgICAgICAgaXMgaW4uCisgICAgMi4gSWYgaXQg Y2F1c2VzIEhQLVVYIHRvIGtpbGwgQy1LZXJtaXQsIHRoZXJlIGlzIG5vdGhpbmcgQy1LZXJtaXQg Y2FuCisgICAgICAgZG8gdG8gcHJldmVudCBpdC4KKworICAgV2hlbiBIUC1VWCBpcyBvbiB0aGUg cmVtb3RlIGVuZCBvZiB0aGUgY29ubmVjdGlvbiwgaXQgaXMgZXNzZW50aWFsIHRoYXQKKyAgIEhQ LVVYIEMtS2VybWl0IGJlIGNvbmZpZ3VyZWQgZm9yIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCAodGhp cyBpcyB0aGUKKyAgIGRlZmF1bHQsIGJ1dCBpbiBjYXNlIHlvdSBjaGFuZ2UgaXQgYW5kIHRoZW4g ZXhwZXJpZW5jZSBmaWxlLXRyYW5zZmVyCisgICBmYWlsdXJlcywgdGhpcyBpcyBhIGxpa2VseSBy ZWFzb24pLgorCiszLjIuMS4gQnVpbGRpbmcgQy1LZXJtaXQgb24gSFAtVVgKKworICAgWyBbMjEy XVRvcCBdIFsgWzIxM11Db250ZW50cyBdIFsgWzIxNF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjE1 XU5leHQgXQorICAgWyBbMjE2XVByZXZpb3VzIF0KKworICAgICBUaGlzIHNlY3Rpb24gYXBwbGll cyBtYWlubHkgdG8gb2xkIChwcmUtMTAuMjApIEhQLVVYIHZlcnNpb24gb24gb2xkLAorICAgICBz bG93LCBhbmQvb3IgbWVtb3J5LWNvbnN0cmFpbmVkIGhhcmR3YXJlLgorCisgICBEdXJpbmcgdGhl IEMtS2VybWl0IDYuMCBCZXRhIGN5Y2xlLCBzb21ldGhpbmcgaGFwcGVuZWQgdG8gY2tjcHJvLncg KG9yLAorICAgbW9yZSBwcmVjaXNlbHksIHRoZSBja2Nwcm8uYyBmaWxlIHRoYXQgaXMgZ2VuZXJh dGVkIGZyb20gaXQpIHdoaWNoCisgICBjYXVzZXMgSFAgb3B0aW1pemluZyBjb21waWxlcnMgdW5k ZXIgSFAtVVggdmVyc2lvbnMgNy4wIGFuZCA4LjAKKyAgIChhcHBhcmVudGx5IG9uIGFsbCBwbGF0 Zm9ybXMpIGFzIHdlbGwgYXMgdW5kZXIgSFAtVVggOS4wIG9uIE1vdG9yb2xhCisgICBwbGF0Zm9y bXMgb25seSwgdG8gYmxvdyB1cC4gSW4gdmVyc2lvbnMgNy4wIGFuZCA4LjAgdGhlIHByb2JsZW0g aGFzCisgICBzcHJlYWQgdG8gb3RoZXIgbW9kdWxlcy4KKworICAgVGhlIHN5bXB0b21zIHZhcnkg ZnJvbSB0aGUgc3lzdGVtIGdyaW5kaW5nIHRvIGEgaGFsdCwgdG8gdGhlIGNvbXBpbGVyCisgICBj cmFzaGluZywgdG8gdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBja2Nwcm8uYyBtb2R1bGUgdGFraW5n IHZlcnkgbG9uZworICAgcGVyaW9kcyBvZiB0aW1lLCBsaWtlIDkgaG91cnMuIFRoaXMgcHJvYmxl bSBpcyBoYW5kbGVkIGJ5IGNvbXBpbGluZyB0aGUKKyAgIG1vZHVsZXMgdGhhdCB0aWNrbGUgaXQg d2l0aG91dCBvcHRpbWl6YXRpb247IHRoZSBuZXcgQy1LZXJtaXQgbWFrZWZpbGUKKyAgIHRha2Vz IGNhcmUgb2YgdGhpcywgYW5kIHNob3dzIGhvdyB0byBkbyBpdCBpbiBjYXNlIHRoZSBzYW1lIHRo aW5nCisgICBiZWdpbnMgaGFwcGVuaW5nIHdpdGggb3RoZXIgbW9kdWxlcy4KKworICAgT24gSFAt VVggOS4wLCBhIGtlcm5lbCBwYXJhbWV0ZXIsIG1heGRzaXogKG1heGltdW0gcHJvY2VzcyBkYXRh IHNlZ21lbnQKKyAgIHNpemUpLCBzZWVtcyB0byBiZSBpbXBvcnRhbnQuIE9uIE1vdG9yb2xhIHN5 c3RlbXMsIGl0IGlzIDE2TUIgYnkKKyAgIGRlZmF1bHQsIHdoZXJlYXMgb24gUklTQyBzeXN0ZW1z IHRoZSBkZWZhdWx0IGlzIG11Y2ggYmlnZ2VyLiBJbmNyZWFzaW5nCisgICBtYXhkc2l6IHRvIGFi b3V0IDgwTUIgc2VlbXMgdG8gbWFrZSB0aGUgcHJvYmxlbSBnbyBhd2F5LCBidXQgb25seSBpZgor ICAgdGhlIHN5c3RlbSBhbHNvIGhhcyBhIGxvdCBvZiBwaHlzaWNhbCBtZW1vcnkgLS0gb3RoZXJ3 aXNlIGl0IHN3YXBzCisgICBpdHNlbGYgdG8gZGVhdGguCisKKyAgIFRoZSBvcHRpbWl6aW5nIGNv bXBpbGVyIG1pZ2h0IGNvbXBsYWluIGFib3V0ICJzb21lIG9wdGltaXphdGlvbnMKKyAgIHNraXBw ZWQiIG9uIGNlcnRhaW4gbW9kdWxlcywgZHVlIHRvIGxhY2sgb2Ygc3BhY2UgYXZhaWxhYmxlIHRv IHRoZQorICAgb3B0aW1pemVyLiBZb3UgY2FuIGluY3JlYXNlIHRoZSBzcGFjZSAodGhlIGluY2Fu dGF0aW9uIGRlcGVuZHMgb24gdGhlCisgICBwYXJ0aWN1bGFyIGNvbXBpbGVyIHZlcnNpb24gLS0g c2VlIHRoZSBbMjE3XW1ha2VmaWxlKSwgYnV0IGRvaW5nIHNvCisgICB0ZW5kcyB0byBtYWtlIHRo ZSBjb21waWxhdGlvbnMgdGFrZSBhIG11Y2ggbG9uZ2VyIHRpbWUuIEZvciBleGFtcGxlLAorICAg dGhlICJocHV4MDEwMG8rIiBtYWtlZmlsZSB0YXJnZXQgYWRkcyB0aGUgIitPbm9saW1pdCIgY29t cGlsZXIgZmxhZywKKyAgIGFuZCBhYm91dCBhbiBob3VyIHRvIHRoZSBjb21waWxlIHRpbWUgb24g YW4gSFAtOTAwMC83MzAuIEJ1dCBpdCAqZG9lcyoKKyAgIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSB0 aGF0IGlzIGFib3V0IDEwSyBzbWFsbGVyIDotKQorCisgICBJbiB0aGUgbWFrZWZpbGUsIGFsbCBI UC1VWCBlbnRyaWVzIGF1dG9tYXRpY2FsbHkgc2tpcCBvcHRpbWl6YXRpb24gb2YKKyAgIHByb2Js ZW1hdGljIG1vZHVsZXMuCisKKzMuMi4yLiBGaWxlIFRyYW5zZmVyCisKKyAgIFsgWzIxOF1Ub3Ag XSBbIFsyMTldQ29udGVudHMgXSBbIFsyMjBdU2VjdGlvbiBDb250ZW50cyBdIFsgWzIyMV1OZXh0 IF0KKyAgIFsgWzIyMl1QcmV2aW91cyBdCisKKyAgIFRlbG5ldCBjb25uZWN0aW9ucyBpbnRvIEhQ LVVYIHZlcnNpb25zIHVwIHRvIGFuZCBpbmNsdWRpbmcgMTEuMTEgKGFuZAorICAgcG9zc2libHkg MTEuMjApIHRlbmQgbm90IHRvIGxlbmQgdGhlbXNlbHZlcyB0byBmaWxlIHRyYW5zZmVyIGR1ZSB0 bworICAgbGltaXRhdGlvbnMsIHJlc3RyaWN0aW9ucywgYW5kL29yIGJ1Z3MgaW4gdGhlIEhQLVVY IFRlbG5ldCBzZXJ2ZXIKKyAgIGFuZC9vciBwc2V1ZG90ZXJtaW5hbCAocHR5KSBkcml2ZXIuCisK KyAgIEluIEMtS2VybWl0IDYuMCAoMTk5NikgYW4gdW5leHBlY3RlZCBzbG93bmVzcyB3YXMgbm90 ZWQgd2hlbgorICAgdHJhbnNmZXJyaW5nIGZpbGVzIG92ZXIgbG9jYWwgRXRoZXJuZXQgY29ubmVj dGlvbnMgd2hlbiBhbiBIUC1VWCBzeXN0ZW0KKyAgICg5LjA1IG9yIDEwLjAwKSB3YXMgb24gdGhl IHJlbW90ZSBlbmQuIFRoZSBmb2xsb3dpbmcgZXhwZXJpbWVudCB3YXMKKyAgIGNvbmR1Y3RlZCB0 byBkZXRlcm1pbmUgdGhlIGNhdXNlLiBDLUtlcm1pdCA2LjAgd2FzIHVzZWQ7IHRoZSBzaXR1YXRp b24KKyAgIGlzIHNsaWdodGx5IGJldHRlciB1c2luZyBDLUtlcm1pdCA3LjAncyBzdHJlYW1pbmcg ZmVhdHVyZSBhbmQgSFAtVVgKKyAgIDEwLjIwIG9uIHRoZSBmYXIgZW5kLgorCisgICBUaGUgc3lz dGVtcyB3ZXJlIEhQLVVYIDEwLjAwIChvbiA3MTUvMzMpIGFuZCBTdW5PUyA0LjEuMyAob24gU3Bh cmMtMjApLAorICAgYm90aCBvbiB0aGUgc2FtZSBsb2NhbCAxME1icHMgRXRoZXJuZXQsIHBhY2tl dCBsZW5ndGggNDA5NiwgcGFyaXR5CisgICBub25lLCBjb250cm9sIHByZWZpeGluZyAiY2F1dGlv dXMiLCB1c2luZyBvbmx5IGxvY2FsIGRpc2tzIG9uIGVhY2gKKyAgIG1hY2hpbmUgLS0gbm8gTkZT LiBJbiB0aGUgQy1LZXJtaXQgNi4wIChBQ0svTkFLKSBjYXNlLCB0aGUgd2luZG93IHNpemUKKyAg IHdhcyAyMDsgaW4gdGhlIHN0cmVhbWluZyBjYXNlIHRoZXJlIGlzIG5vIHdpbmRvdyBzaXplIChp LmUuIGl0IGlzCisgICBpbmZpbml0ZSkuIFRoZSB0ZXN0IGZpbGUgd2FzIEMtS2VybWl0IGV4ZWN1 dGFibGUsIHRyYW5zZmVycmVkIGluIGJpbmFyeQorICAgbW9kZS4gQ29uZGl0aW9ucyB3ZXJlIHJl bGF0aXZlbHkgcG9vcjogdGhlIFN1biBhbmQgdGhlIGxvY2FsIG5ldAorICAgaGVhdmlseSBsb2Fk ZWQ7IHRoZSBIUCBzeXN0ZW0gaXMgb2xkLCBzbG93LCBhbmQgbWVtb3J5LWNvbnN0cmFpbmVkLgor CisgICAgICAgICAgICAgICAgICAgQy1LZXJtaXQgNi4wLi4uICAgIEMtS2VybWl0IDcuMC4uLgor IExvY2FsICAgIFJlbW90ZSAgIEFDSy9OQUsuLi4uLi4uLiAgICBTdHJlYW1pbmcuLi4uLi4KKyBD bGllbnQgICBTZXJ2ZXIgICBTZW5kICAgIFJlY2VpdmUgICAgU2VuZCAgICBSZWNlaXZlCisgIFN1 biAgICAgIEhQICAgICAgIDM2ICAgICAgIDE4ICAgICAgICA2NCAgICAgICAxOAorICBIUCAgICAg ICBIUCAgICAgICAyNSAgICAgICAxNSAgICAgICAgMzcgICAgICAgMTYKKyAgSFAgICAgICAgU3Vu ICAgICAgNzcgICAgICAgODMgICAgICAgMTE4ICAgICAgIDkyCisgIFN1biAgICAgIFN1biAgICAg IDYwICAgICAgIDYwICAgICAgIDE1MyAgICAgIDE1OAorCisgICBTbyB3aGVuZXZlciBIUCBpcyB0 aGUgcmVtb3RlIHdlIGhhdmUgcG9vciBwZXJmb3JtYW5jZS4gV2h5PworCisgICAgICogQ2hhbmdp bmcgZmlsZSBkaXNwbGF5IHRvIENSVCBoYXMgbm8gZWZmZWN0IChzbyBpdCdzIG5vdCB0aGUgY3Vy c2VzCisgICAgICAgbGlicmFyeSBvbiB0aGUgY2xpZW50IHNpZGUpLgorICAgICAqIENoYW5naW5n IFRDUCBSRUNWLUJVRkZFUiBvciBTRU5ELUJVRkZFUiBoYXMgbGl0dGxlIGVmZmVjdC4KKyAgICAg KiBUZWxsaW5nIHRoZSBjbGllbnQgdG8gbWFrZSBhIGJpbmFyeS1tb2RlIGNvbm5lY3Rpb24gKFNF VCBURUxORVQKKyAgICAgICBCSU5BUlkgUkVRVUVTVEVELCB3aGljaCBzdWNjZXNzZnVsbHkgbmVn b3RpYXRlcyBhIGJpbmFyeQorICAgICAgIGNvbm5lY3Rpb24pIGhhcyBubyBlZmZlY3Qgb24gdGhy b3VnaHB1dC4KKworICAgQlVULi4uIElmIEkgc3RhcnQgSFAtVVggQy1LZXJtaXQgYXMgYSBUQ1Ag c2VydmljZToKKworICBzZXQgaG9zdCAqIDMwMDAKKyAgc2VydmVyCisKKyAgIGFuZCB0aGVuIGZy b20gdGhlIGNsaWVudCAic2V0IGhvc3QgeHh4IDMwMDAiLCBJIGdldDoKKworICAgICAgICAgICAg ICAgICAgIEMtS2VybWl0IDYuMC4uLiAgICBDLUtlcm1pdCA3LjAuLi4KKyBMb2NhbCAgICBSZW1v dGUgICBBQ0svTkFLLi4uLi4uLi4gICAgU3RyZWFtaW5nLi4uLi4uCisgQ2xpZW50ICAgU2VydmVy ICAgU2VuZCAgICBSZWNlaXZlICAgIFNlbmQgICAgUmVjZWl2ZQorICBTdW4gICAgICBIUCAgICAg ICA3NyAgICAgICA2NyAgICAgICAxMDYgICAgICAxMzkKKyAgSFAgICAgICAgSFAgICAgICAgNTAg ICAgICAgNTAgICAgICAgIDY0ICAgICAgIDYyCisgIEhQICAgICAgIFN1biAgICAgIDU3ICAgICAg IDg1ICAgICAgIDE1NSAgICAgIDEwNQorICBTdW4gICAgICBTdW4gICAgICA1NyAgICAgICA1MCAg ICAgICAzMjEgICAgICAzMTQKKworICAgVGhlcmVmb3JlIHRoZSBIUC1VWCB0ZWxuZXQgc2VydmVy IG9yIHB0eSBkcml2ZXIgc2VlbXMgdG8gYmUgYWRkaW5nIG1vcmUKKyAgIG92ZXJoZWFkIHRoYW4g dGhlIFN1bk9TIG9uZSwgYW5kIG1vc3Qgb3RoZXJzLiBXaGVuIGdvaW5nIHRocm91Z2ggdGhpcwor ICAgdHlwZSBvZiBjb25uZWN0aW9uIChhIHJlbW90ZSB0ZWxuZXQgc2VydmVyKSB0aGVyZSBpcyBs aXR0bGUgS2VybWl0IGNhbgorICAgZG8gaW1wcm92ZSBtYXR0ZXJzLCBzaW5jZSB0aGUgdGVsbmV0 IHNlcnZlciBhbmQgcHR5IGRyaXZlciBhcmUgYmV0d2VlbgorICAgdGhlIHR3byBLZXJtaXRzLCBh bmQgbmVpdGhlciBLZXJtaXQgcHJvZ3JhbSBjYW4gaGF2ZSBhbnkgaW5mbHVlbmNlIG92ZXIKKyAg IHRoZW0gKGV4Y2VwdCBwdXR0aW5nIHRoZSBUZWxuZXQgY29ubmVjdGlvbiBpbiBiaW5hcnkgbW9k ZSwgYnV0IHRoYXQKKyAgIGRvZXNuJ3QgaGVscCkuCisKKyAgIChUaGUgbnVtYmVycyBmb3IgdGhl IEhQLUhQIHRyYW5zZmVycyBhcmUgbG93ZXIgdGhhbiB0aGUgb3RoZXJzIHNpbmNlCisgICBib3Ro IEtlcm1pdCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgb24gdGhlIHNhbWUgc2xvdyAzM01IeiBDUFUu KQorCisgICBNYXR0ZXJzIHNlZW0gdG8gaGF2ZSBkZXRlcmlvcmF0ZWQgaW4gSFAtVVggMTEuIE5v dyBmaWxlIHRyYW5zZmVycyBvdmVyCisgICBUZWxuZXQgY29ubmVjdGlvbnMgZmFpbCBjb21wbGV0 ZWx5LCByYXRoZXIgdGhhbiBqdXN0IGJlaW5nIHNsb3cuIEluIHRoZQorICAgZm9sbG93aW5nIHRy aWFsLCBhIFRlbG5ldCBjb25uZWN0aW9uIHdhcyBtYWRlIGZyb20gS2VybWl0IDk1IHRvIEhQLVVY CisgICAxMS4xMSBvbiBhbiBIUC05MDAwLzc4NS9CMjAwMCBvdmVyIGxvY2FsIDEwTWJwcyBFdGhl cm5ldCBydW5uaW5nCisgICBDLUtlcm1pdCA4LjAwIGluIHNlcnZlciBtb2RlICh1bmRlciB0aGUg SFAtVVggVGVsbmV0IHNlcnZlcik6CisKKyAgICAgICAgICAgICAgICAgICBUZXh0Li4uLi4uLi4g ICAgQmluYXJ5Li4uLi4uCisgIFN0cmVhbSAgUGt0bGVuICAgR0VUICAgICBTRU5EICAgIEdFVCAg ICAgU0VORAorICAgIE9uICAgICA0MDAwICAgIEZhaWwgICAgRmFpbCAgICBGYWlsICAgIEZhaWwK KyAgICBPZmYgICAgNDAwMCAgICBGYWlsICAgIEZhaWwgICAgRmFpbCAgICBGYWlsCisgICAgT2Zm ICAgIDIwMDAgICAgT0sgICAgICBGYWlsICAgIE9LICAgICAgRmFpbAorICAgIE9uICAgICAyMDAw ICAgIE9LICAgICAgRmFpbCAgICBPSyAgICAgIEZhaWwKKyAgICBPbiAgICAgMzAwMCAgICBGYWls ICAgIEZhaWwgICAgRmFpbCAgICBGYWlsCisgICAgT24gICAgIDI1MDAgICAgRmFpbCAgICBGYWls ICAgIEZhaWwgICAgRmFpbAorICAgIE9uICAgICAyMDQ3ICAgIE9LICAgICAgRmFpbCAgICBPSyAg ICAgIEZhaWwKKyAgICBPbiAgICAgMjA0NSAgICBPSyAgICAgIEZhaWwgICAgT0sgICAgICBGYWls CisgICAgT2ZmICAgICA1MDAgICAgT0sgICAgICBPSyAgICAgIE9LICAgICAgT0sKKyAgICBPbiAg ICAgIDUwMCAgICBPSyAgICAgIEZhaWwgICAgT0sgICAgICBGYWlsCisgICAgT24gICAgICAyNDAg ICAgT0sgICAgICBGYWlsICAgIE9LICAgICAgRmFpbAorCisgICBBcyB5b3UgY2FuIHNlZSwgZG93 bmxvYWRzIGFyZSBwcm9ibGVtYXRpYyB1bmxlc3MgdGhlIHJlY2VpdmVyJ3MgS2VybWl0CisgICBw YWNrZXQgbGVuZ3RoIGlzIDIwNDUgb3IgbGVzcywgYnV0IHVwbG9hZHMgd29yayBvbmx5IHdpdGgg c3RyZWFtaW5nCisgICBkaXNhYmxlZCBhbmQgdGhlIHBhY2tldCBsZW5ndGggcmVzdHJpY3RlZCB0 byA1MDAuIFRvIGZvcmNlIGZpbGUKKyAgIHRyYW5zZmVycyB0byB3b3JrIG9uIHRoaXMgY29ubmVj dGlvbiwgdGhlIGRlc2t0b3AgS2VybWl0IG11c3QgYmUgdG9sZAorICAgdG86CisKKyAgc2V0IHN0 cmVhbWluZyBvZmYKKyAgc2V0IHJlY2VpdmUgcGFja2V0LWxlbmd0aCAyMDAwCisgIHNldCBzZW5k IHBhY2tldC1sZW5ndGggNTAwCisKKyAgIEhvd2V2ZXIsIGlmIGEgY29ubmVjdGlvbiBpcyBtYWRl IGJldHdlZW4gdGhlIHNhbWUgdHdvIHByb2dyYW1zIG9uIHRoZQorICAgc2FtZSB0d28gY29tcHV0 ZXJzIG92ZXIgdGhlIHNhbWUgbmV0d29yaywgYnV0IHRoaXMgdGltZSBhIGRpcmVjdAorICAgc29j a2V0LXRvLXNvY2tldCBjb25uZWN0aW9uIGJ5cGFzc2luZyB0aGUgSFAtVVggVGVsbmV0IHNlcnZl ciBhbmQgcHR5CisgICBkcml2ZXIgKHRlbGwgSFAtVVggQy1LZXJtaXQgdG8gInNldCBob3N0IC9z ZXJ2ZXIgKiAzMDAwIC9yYXciOyB0ZWxsCisgICBkZXNrdG9wIGNsaWVudCBwcm9ncmFtIHRvICJz ZXQgaG9zdCBibGFoIDMwMDAgL3JhdyIpLCBldmVyeXRoaW5nIHdvcmtzCisgICBwZXJmZWN0bHkg d2l0aCB0aGUgZGVmYXVsdCBLZXJtaXQgc2V0dGluZ3MgKHN0cmVhbWluZywgNEsgcGFja2V0cywK KyAgIGxpYmVyYWwgY29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcsIDgtYml0IHRyYW5zcGFy ZW5jeSwgZXRjKToKKworICAgICAgICAgICAgICAgICAgIFRleHQuLi4uLi4uLiAgICBCaW5hcnku Li4uLi4KKyAgU3RyZWFtICBQa3RsZW4gICBHRVQgICAgIFNFTkQgICAgR0VUICAgICBTRU5ECisg ICAgT24gICAgIDQwMDAgICAgT0sgICAgICBPSyAgICAgIE9LICAgICAgT0sKKworICAgQW5kIGlu IHRoaXMgY2FzZSwgdHJhbnNmZXIgcmF0ZXMgd2VyZSBhcHByb3hpbWF0ZWx5IDkwMCwwMDAgY3Bz LiBUbworICAgdmVyaWZ5IHRoYXQgdGhlIGJlaGF2aW9yIHJlcG9ydGVkIGhlcmUgaXMgbm90IGNh dXNlZCBieSB0aGUgbmV3IEtlcm1pdAorICAgcmVsZWFzZSwgdGhlIHNhbWUgZXhwZXJpbWVudCB3 YXMgcGVyZm9ybWVkIG9uIGEgVGVsbmV0IGNvbm5lY3Rpb24gZnJvbQorICAgdGhlIHNhbWUgUEMg b3ZlciB0aGUgc2FtZSBuZXR3b3JrIHRvIHRoZSBvbGQgNzE1LzMzIHJ1bm5pbmcgSFAtVVggMTAu MjAKKyAgIGFuZCBDLUtlcm1pdCA4LjAwLiBUZXh0IGFuZCBiaW5hcnkgdXBsb2FkcyBhbmQgZG93 bmxvYWRzIHdvcmtlZAorICAgcGVyZmVjdGx5IChhbGJlaXQgc2xvd2x5KSB3aXRoIGFsbCB0aGUg ZGVmYXVsdCBzZXR0aW5ncyAtLSBzdHJlYW1pbmcsCisgICA0SyBwYWNrZXRzLCBldGMuCisKKzMu Mi4zLiBEaWFsaW5nIE91dCBhbmQgVVVDUCBMb2NrZmlsZXMgaW4gSFAtVVgKKworICAgWyBbMjIz XVRvcCBdIFsgWzIyNF1Db250ZW50cyBdIFsgWzIyNV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjI2 XU5leHQgXQorICAgWyBbMjI3XVByZXZpb3VzIF0KKworICAgSFAgd29ya3N0YXRpb25zIGRvIG5v dCBjb21lIHdpdGggZGlhbG91dCBkZXZpY2VzIGNvbmZpZ3VyZWQ7IHlvdSBoYXZlCisgICB0byBk byBpdCB5b3Vyc2VsZiAoYXMgcm9vdCkuIEZpcnN0IGxvb2sgaW4gL2RldiB0byBzZWUgd2hhdCdz IHRoZXJlOworICAgZm9yIGV4YW1wbGUgaW4gSFAtVVggMTAuMDAgb3IgbGF0ZXI6CisKKyAgbHMg LWwgL2Rldi9jdWEqCisgIGxzIC1sIC9kZXYvdHR5KgorCisgICBJZiB5b3UgZmluZCBhIHR0eTBw MCBkZXZpY2UgYnV0IG5vIGN1YTBwMCwgeW91J2xsIG5lZWQgdG8gY3JlYXQgb25lIGlmCisgICB5 b3Ugd2FudCB0byBkaWFsIG91dDsgdGhlIHR0eTBwMCBkb2VzIG5vdCB3b3JrIGZvciBkaWFsaW5n IG91dC4gSXQncworICAgZWFzeTogc3RhcnQgU0FNOyBpbiB0aGUgbWFpbiBTYW0gd2luZG93LCBk b3VibGUtY2xpY2sgb24gUGVyaXBoZXJhbAorICAgRGV2aWNlLCB0aGVuIGluIHRoZSBQZXJpcGhl cmFsIERldmljZXMgd2luZG93LCBkb3VibGUtY2xpY2sgb24KKyAgIFRlcm1pbmFscyBhbmQgTW9k ZW1zLiBJbiB0aGUgVGVybWluYWxzIGFuZCBNb2RlbXMgZGlhbG9nLCBjbGljayBvbgorICAgQWN0 aW9ucywgdGhlbiBjaG9vc2UgIkFkZCBtb2RlbSIgYW5kIGZpbGwgaW4gdGhlIGJsYW5rcy4gRm9y IGV4YW1wbGU6CisgICBQb3J0IG51bWJlciAwLCBzcGVlZCA1NzYwMCAoaGlnaGVyIHNwZWVkcyB0 ZW5kIG5vdCB0byB3b3JrIHJlbGlhYmx5KSwKKyAgICJVc2UgZGV2aWNlIGZvciBjYWxsaW5nIG91 dCIsIGRvIE5PVCAiUmVjZWl2ZSBpbmNvbWluZyBjYWxscyIgKHVubGVzcworICAgeW91IGtub3cg d2hhdCB5b3UgYXJlIGRvaW5nKSwgbGVhdmUgIkNDSVRUIG1vZGVtIiB1bmNoZWNrZWQgdW5sZXNz IHlvdQorICAgcmVhbGx5IGhhdmUgb25lLCBhbmQgZG8gc2VsZWN0ICJVc2UgaGFyZHdhcmUgZmxv dyBjb250cm9sIChSVFMvQ1RTKSIuCisgICBUaGVuIGNsaWNrIE9LLiBUaGlzIGNyZWF0ZXMgY3Vh MHAwIGFzIHdlbGwgYXMgY3VsMHAwIGFuZCB0dHlkMHAwCisKKyAgIElmIHRoZSBmb2xsb3dpbmcg c2VxdWVuY2U6CisKKyAgc2V0IGxpbmUgL2Rldi9jdWEwcDAgOyBvciBvdGhlciBkZXZpY2UKKyAg c2V0IHNwZWVkIDExNTIwMCAgICAgOyBvciBvdGhlciBub3JtYWwgc3BlZWQKKworICAgcHJvZHVj ZXMgdGhlIG1lc3NhZ2UgIj9VbnN1cHBvcnRlZCBsaW5lIHNwZWVkIi4gVGhpcyBtZWFucyBlaXRo ZXIgdGhhdAorICAgdGhlIHBvcnQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIGRpYWxvdXQgKGdvIGlu dG8gU0FNIGFzIGRlc2NyaWJlZCBhYm92ZQorICAgYW5kIG1ha2Ugc3VyZSAiVXNlIGRldmljZSBm b3IgY2FsbGluZyBvdXQiIGlzIHNlbGVjdGVkKSwgb3IgZWxzZSB0aGF0CisgICBzcGVlZCB5b3Ug aGF2ZSBnaXZlbiAoc3VjaCBhcyA0NjA4MDApIGlzIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0aW5n CisgICBzeXN0ZW0gYnV0IG5vdCBieSB0aGUgcGh5c2ljYWwgZGV2aWNlIChpbiB3aGljaCBjYXNl LCB1c2UgYSBsb3dlciBzcGVlZAorICAgbGlrZSA1NzYwMCkuCisKKyAgIEluIEhQLVVYIDkuMCwg c2VyaWFsIGRldmljZSBuYW1lcyBiZWdhbiB0byBjaGFuZ2UuIFRoZSBvbGRlciBuYW1lcworICAg bG9va2VkIGxpa2UgIi9kZXYvY3VhMDAiLCAiL2Rldi90dHkwMSIsIGV0YyAoc29tZXRpbWVzIHdp dGggb25seSBvbmUKKyAgIGRpZ2l0KS4gVGhlIG5ld2VyIG5hbWVzIGhhdmUgdHdvIGRpZ2l0cyB3 aXRoIHRoZSBsZXR0ZXIgInAiIGluIGJldHdlZW4uCisgICBIUC1VWCA4Lnh4IGFuZCBlYXJsaWVy IGhhdmUgdGhlIG9sZGVyIGZvcm0sIEhQLVVYIDEwLjAwIGFuZCBsYXRlciBoYXZlCisgICB0aGUg bmV3ZXIgZm9ybS4gSFAtVVggOS54eCBoYXMgdGhlIG5ld2VyIGZvcm0gb24gU2VyaWVzIDgwMCBt YWNoaW5lcywKKyAgIGFuZCB0aGUgb2xkZXIgZm9ybSBvbiBvdGhlciBoYXJkd2FyZSBtb2RlbHMu IFRoZSBzaXR1YXRpb24gaXMKKyAgIHN1bW1hcml6ZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSAo dGhlIENvbnZpbyAxMC4wIGNvbHVtbiBhcHBsaWVzIHRvCisgICBIUC1VWCAxMCBhbmQgMTEpLgor CisgIENvbnZlcmdlZCBIUC1VWCBTZXJpYWwgSS9PIEZpbGVuYW1lcyA6IFRUWSBNdXggTmFtaW5n CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICBHZW5lcmFsIG1lYW5pbmcgICAgICBPbGQgRm9ybSAgICAgUzgw MCA5LjAgICAgICAgICAgIENvbnZpbyAxMC4wCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB0dHkqIGhhcmR3 aXJlZCBwb3J0cyAgdHR5PFlZPiAgICAgdHR5PFg+cDxZPiAgICAgICAgIHR0eTxEPnA8cD4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWc6bXV4PFg+ICAgICAgICBkaWFn Om11eDxEPgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgdHR5ZCogZGlhbC1pbiBtb2RlbXMgIHR0eWQ8WVk+ ICAgIHR0eWQ8WD5wPFk+ICAgICAgICB0dHlkPEQ+cDxwPgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGlhZzp0dHlkPFg+cDxZPiAgIGRpYWc6dHR5ZDxEPnA8cD4KKyAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgIGN1YSogYXV0by1kaWFsIG91dCAgICBjdWE8WVk+ICAgICBjdWE8WD5wPFk+ ICAgICAgICAgY3VhPEQ+cDxwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGlhZzpjdWE8WD5wPFk+CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBjdWwqIGRpYWwtb3V0ICAgICAgICAg Y3VsPFlZPiAgICAgY3VsPFg+cDxZPiAgICAgICAgIGN1bDxEPnA8cD4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRpYWc6Y3VsPFg+cDxZPgorICAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg IDxYPj0gTFUgKExvZ2ljYWwgVW5pdCkgIDxEPj0gRGV2c3BlYyAoZGVjaW1hbCBjYXJkIGluc3Rh bmNlKQorICAgPFk+IG9yIDxZWT4gPSBQb3J0ICAgICAgPHA+PSBQb3J0CisKKyAgIEZvciBkaWFs aW5nIG91dCwgeW91IHNob3VsZCB1c2UgdGhlIGN1YSBvciBjdWwgZGV2aWNlcy4gV2hlbiBDLUtl cm1pdCdzCisgICBDQVJSSUVSIHNldHRpbmcgaXMgQVVUTyBvciBPTiwgQy1LZXJtaXQgc2hvdWxk IHBvcCBiYWNrIHRvIGl0cyBwcm9tcHQKKyAgIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGNhcnJpZXIg c2lnbmFsIGRyb3BzLCBlLmcuIHdoZW4geW91IGxvZyBvdXQgZnJvbQorICAgdGhlIHJlbW90ZSBj b21wdXRlciBvciBzZXJ2aWNlLiBJZiB5b3UgdXNlIHRoZSB0dHk8RD5wPGQ+IChlLmcuIHR0eTBw MCkKKyAgIGRldmljZSwgdGhlIGNhcnJpZXIgc2lnbmFsIHNob3VsZCBiZSBpZ25vcmVkLiBUaGUg dHR5PEQ+cDxkPiBkZXZpY2UKKyAgIHNob3VsZCBiZSB1c2VkIGZvciBkaXJlY3QgY29ubmVjdGlv bnMgd2hlcmUgdGhlIGNhcnJpZXIgc2lnbmFsIGRvZXMgbm90CisgICBmb2xsb3cgUlMtMjMyIGNv bnZlbnRpb25zICh1c2UgdGhlIGN1bCBkZXZpY2UgZm9yIGhhcmR3aXJlZCBjb25uZWN0aW9ucwor ICAgdGhyb3VnaCBhIHRydWUgbnVsbCBtb2RlbSkuIERvIG5vdCB1c2UgdGhlIHR0eWQ8RD5wPGQ+ IGRldmljZSBmb3IKKyAgIGRpYWxpbmcgb3V0LgorCisgICBLZXJtaXQncyBhY2Nlc3MgdG8gc2Vy aWFsIGRldmljZXMgaXMgY29udHJvbGxlZCBieSAiVVVDUCBsb2NrZmlsZXMiLAorICAgd2hpY2gg YXJlIGludGVuZGVkIHRvIHByZXZlbnQgZGlmZmVyZW50IHVzZXJzIHVzaW5nIGRpZmZlcmVudCBz b2Z0d2FyZQorICAgcHJvZ3JhbXMgKEtlcm1pdCwgY3UsIGV0YywgYW5kIFVVQ1AgaXRzZWxmKSBm cm9tIGFjY2Vzc2luZyB0aGUgc2FtZQorICAgc2VyaWFsIGRldmljZSBhdCB0aGUgc2FtZSB0aW1l LiBXaGVuIGEgZGV2aWNlIGlzIGluIHVzZSBieSBhIHBhcnRpY3VsYXIKKyAgIHVzZXIsIGEgZmls ZSB3aXRoIGEgc3BlY2lhbCBuYW1lIGlzIGNyZWF0ZWQgaW46CisKKyAgL3Zhci9zcG9vbC9sb2Nr cyAgKEhQLVVYIDEwLjAwIGFuZCBsYXRlcikKKyAgL3Vzci9zcG9vbC91dWNwICAgKEhQLVVYIDku eHggYW5kIGVhcmxpZXIpCisKKyAgIFRoZSBmaWxlJ3MgbmFtZSBpbmRpY2F0ZXMgdGhlIGRldmlj ZSB0aGF0IGlzIGluIHVzZSwgYW5kIGl0cyBjb250ZW50cworICAgaW5kaWNhdGVzIHRoZSBwcm9j ZXNzIElEIChwaWQpIG9mIHRoZSBwcm9jZXNzIHRoYXQgaXMgdXNpbmcgdGhlIGRldmljZS4KKyAg IFNpbmNlIHNlcmlhbCBkZXZpY2VzIGFuZCB0aGUgbG9ja3MgZGlyZWN0b3J5IGFyZSBub3QgYm90 aCBwdWJsaWNseQorICAgcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBLZXJtaXQgYW5kIG90aGVyIGNv bW11bmljYXRpb24gc29mdHdhcmUgbXVzdCBiZQorICAgaW5zdGFsbGVkIHNldHVpZCB0byB0aGUg b3duZXIgKGJpbikgb2YgdGhlIHNlcmlhbCBkZXZpY2UgYW5kIHNldGdpZCB0bworICAgdGhlIGdy b3VwIChkYWVtb24pIG9mIHRoZSAvdmFyL3Nwb29sL2xvY2tzIGRpcmVjdG9yeS4gS2VybWl0J3Mg c2V0dWlkCisgICBhbmQgc2V0Z2lkIHByaXZpbGVnZXMgYXJlIGVuYWJsZWQgb25seSB3aGVuIG9w ZW5pbmcgdGhlIGRldmljZSBhbmQKKyAgIGFjY2Vzc2luZyB0aGUgbG9ja2ZpbGVzLgorCisgICBM ZXQncyBzYXkgInVuaXQiIG1lYW5zIGEgc3RyaW5nIG9mIGRlY2ltYWwgZGlnaXRzICh0aGUgaW50 ZXJmYWNlCisgICBpbnN0YW5jZSBudW1iZXIpIGZvbGxvd2VkIChpbiBIUC1VWCAxMC4wMCBhbmQg bGF0ZXIpIGJ5IHRoZSBsZXR0ZXIgInAiCisgICAobG93ZXJjYXNlKSwgZm9sbG93ZWQgYnkgYW5v dGhlciBzdHJpbmcgb2YgZGVjaW1hbCBkaWdpdHMgKHRoZSBwb3J0CisgICBudW1iZXIgb24gdGhl IGludGVyZmFjZSksIGUuZy46CisKKyAgIjBwMCIsICIwcDEiLCAiMXAwIiwgZXRjICAgICAgIChI UC1VWCAxMC4wMCBhbmQgbGF0ZXIpCisgICIwcDAiLCAiMHAxIiwgIjFwMCIsIGV0YyAgICAgICAo SFAtVVggOS54eCBvbiBTZXJpZXMgODAwKQorICAiMDAiLCAgIjAxIiwgICIxMCIsICAiMCIsIGV0 YyAgKEhQLVVYIDkueHggbm90IG9uIFNlcmllcyA4MDApCisgICIwMCIsICAiMDEiLCAgIjEwIiwg ICIwIiwgZXRjICAoSFAtVVggOC54eCBhbmQgZWFybGllcikKKworICAgVGhlbiBhIG5vcm1hbCBz ZXJpYWwgZGV2aWNlIChkcml2ZXIpIG5hbWUgY29uc2lzdHMgb2YgYSBwcmVmaXggKCJ0dHkiLAor ICAgInR0eWQiLCAiY3VhIiwgImN1bCIsIG9yIHBvc3NpYmx5ICJjdWFkIiBvciAiY3VsZCIpIGZv bGxvd2VkIGJ5IGEgdW5pdCwKKyAgIGUuZy4gImN1YTBwMCIuIEtlcm1pdCdzIHRyZWF0bWVudCBv ZiBVVUNQIGxvY2tmaWxlcyBpcyBhcyBjbG9zZSBhcworICAgcG9zc2libGUgdG8gdGhhdCBvZiB0 aGUgSFAtVVggImN1IiBwcm9ncmFtLiBIZXJlIGlzIGEgdGFibGUgb2YgdGhlCisgICBsb2NrZmls ZXMgdGhhdCBLZXJtaXQgY3JlYXRlcyBmb3IgdW5pdCAwcDA6CisKKyAgU2VsZWN0aW9uICAgICAg TG9ja2ZpbGUgMSAgICAgTG9ja2ZpbGUgMgorICAvZGV2L3R0eTBwMCAgICBMQ0suLnR0eTBwMCAg ICAobm9uZSkKKyogL2Rldi90dHlkMHAwICAgTENLLi50dHlkMHAwICAgKG5vbmUpCisgIC9kZXYv Y3VhMHAwICAgIExDSy4uY3VhMHAwICAgIExDSy4udHR5ZDBwMAorICAvZGV2L2N1bDBwMCAgICBM Q0suLmN1bDBwMCAgICBMQ0suLnR0eWQwcDAKKyAgL2Rldi9jdWFkMHAwICAgTENLLi5jdWFkMHAw ICAgTENLLi50dHlkMHAwCisgIC9kZXYvY3VsZDBwMCAgIExDSy4uY3VsZDBwMCAgIExDSy4udHR5 ZDBwMAorICA8b3RoZXI+ICAgICAgICBMQ0suLjxvdGhlcj4gICAobm9uZSkKKworICAgKCogPSBE aWFsaW4gZGV2aWNlLCBzaG91bGQgbm90IGJlIHVzZWQuKQorCisgICBJbiBvdGhlciB3b3Jkcywg aWYgdGhlIGRldmljZSBuYW1lIGJlZ2lucyB3aXRoICJjdSIsIGEgc2Vjb25kIGxvY2tmaWxlCisg ICBmb3IgdGhlICJ0dHlkIiBkZXZpY2UsIHNhbWUgdW5pdCwgaXMgY3JlYXRlZCwgd2hpY2ggc2hv dWxkIHByZXZlbnQKKyAgIGRpYWxpbiBhY2Nlc3Mgb24gdGhhdCBkZXZpY2UuCisKKyAgIFRoZSA8 b3RoZXI+IGNhc2UgYWxsb3dzIGZvciBzeW1ib2xpYyBsaW5rcywgZXRjLCBidXQgb2YgY291cnNl IGl0IGlzCisgICBub3QgZm9vbHByb29mIHNpbmNlIHdlIGhhdmUgbm8gd2F5IG9mIHRlbGxpbmcg d2hpY2ggZGV2aWNlIGlzIHJlYWxseQorICAgYmVpbmcgdXNlZC4KKworICAgV2hlbiBDLUtlcm1p dCB0cmllcyB0byBvcGVuIGEgZGlhbG91dCBkZXZpY2Ugd2hvc2UgbmFtZSBlbmRzIHdpdGggYQor ICAgInVuaXQiLCBpdCBzZWFyY2hlcyB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGZvciBhbGwgcG9z c2libGUgbmFtZXMgZm9yCisgICB0aGUgc2FtZSB1bml0LiBGb3IgZXhhbXBsZSwgaWYgdXNlciBz ZWxlY3RzIC9kZXYvY3VsMnAzLCBLZXJtaXQgbG9va3MKKyAgIGZvciBsb2NrZmlsZXMgbmFtZWQ6 CisKKyAgTENLLi50dHkycDMKKyAgTENLLi50dHlkMnAzCisgIExDSy4uY3VhMnAzCisgIExDSy4u Y3VsMnAzCisgIExDSy4uY3VhZDJwMworICBMQ0suLmN1bGQycDMKKworICAgSWYgYW55IG9mIHRo ZXNlIGZpbGVzIGFyZSBmb3VuZCwgS2VybWl0IG9wZW5zIHRoZW0gdG8gZmluZCBvdXQgdGhlIElE CisgICAocGlkKSBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgdGhlbTsgaWYgdGhlIHBpZCBp cyBzdGlsbCB2YWxpZCwgdGhlCisgICBwcm9jZXNzIGlzIHN0aWxsIGFjdGl2ZSwgYW5kIHNvIHRo ZSBTRVQgTElORSBjb21tYW5kIGZhaWxzIGFuZCB0aGUgdXNlcgorICAgaXMgaW5mb3JtZWQgb2Yg dGhlIHBpZCBzbyBzL2hlIGNhbiB1c2UgInBzIiB0byBmaW5kIG91dCB3aG8gaXMgdXNpbmcKKyAg IHRoZSBkZXZpY2UuCisKKyAgIElmIHRoZSBwaWQgaXMgbm90IHZhbGlkLCB0aGUgZmlsZSBpcyBk ZWxldGVkLiBJZiBhbGwgc3VjaCBmaWxlcyAoaS5lLgorICAgd2l0aCBzYW1lICJ1bml0IiBkZXNp Z25hdGlvbikgYXJlIHN1Y2Nlc3NmdWxseSByZW1vdmVkLCB0aGVuIHRoZSBTRVQKKyAgIExJTkUg Y29tbWFuZCBzdWNjZWVkczsgdXAgdG8gc2l4IG1lc3NhZ2VzIGFyZSBwcmludGVkIHRlbGxpbmcg dGhlIHVzZXIKKyAgIHdoaWNoICJzdGFsZSBsb2NrZmlsZXMiIGFyZSBiZWluZyByZW1vdmVkLgor CisgICBXaGVuIHRoZSAic2V0IGxpbmUiIGNvbW1hbmQgc3VjY2VlZHMgaW4gSFAtVVggMTAuMDAg YW5kIGxhdGVyLCBDLUtlcm1pdAorICAgYWxzbyBjcmVhdGVzIGEgVW5peCBTeXN0ZW0gViBSNCAi YWR2aXNvcnkgbG9jayIgYXMgYSBmdXJ0aGVyIHByZWNhdXRpb24KKyAgIChidXQgbm90IGd1YXJh bnRlZSkgYWdhaW5zdCBhbnkgb3RoZXIgcHJvY2VzcyBvYnRhaW5pbmcgYWNjZXNzIHRvIHRoZQor ICAgZGV2aWNlIHdoaWxlIHlvdSBhcmUgdXNpbmcgaXQuCisKKyAgIElmIHRoZSBzZWxlY3RlZCBk ZXZpY2Ugd2FzIGluIHVzZSBieSAiY3UiLCBLZXJtaXQgY2FuJ3Qgb3BlbiBpdCwKKyAgIGJlY2F1 c2UgImN1IiBoYXMgY2hhbmdlZCBpdHMgb3duZXJzaGlwLCBzbyB3ZSBuZXZlciBnZXQgYXMgZmFy IGFzCisgICBsb29raW5nIGF0IHRoZSBsb2NrZmlsZXMuIEluIHRoZSBub3JtYWwgY2FzZSwgd2Ug Y2FuJ3QgZXZlbiBsb29rIGF0IHRoZQorICAgZGV2aWNlIHRvIHNlZSB3aG8gdGhlIG93bmVyIGlz IGJlY2F1c2UgaXQgaXMgdmlzaWJsZSBvbmx5IHRvIGl0cworICAgKHByZXNlbnQpIG93bmVyLiBJ biB0aGlzIGNhc2UsIEtlcm1pdCBzYXlzIChmb3IgZXhhbXBsZSk6CisKKyAgL2Rldi9jdWEwcDA6 IFBlcm1pc3Npb24gZGVuaWVkCisKKyAgIFdoZW4gS2VybWl0IHJlbGVhc2VzIGEgZGV2aWNlIGl0 IGhhcyBzdWNjZXNzZnVsbHkgb3BlbmVkLCBpdCByZW1vdmVzCisgICBhbGwgdGhlIGxvY2tmaWxl cyB0aGF0IGl0IGNyZWF0ZWQuIFRoaXMgYWxzbyBoYXBwZW5zIHdoZW5ldmVyIEtlcm1pdAorICAg ZXhpdHMgInVuZGVyIGl0cyBvd24gcG93ZXIiLgorCisgICBJZiBLZXJtaXQgaXMga2lsbGVkIHdp dGggYSBkZXZpY2Ugb3BlbiwgdGhlIGxvY2tmaWxlKHMpIGFyZSBsZWZ0CisgICBiZWhpbmQuIFRo ZSBuZXh0IEtlcm1pdCBwcm9ncmFtIHRoYXQgdHJpZXMgdG8gYXNzaWduIHRoZSBkZXZpY2UsIHVu ZGVyCisgICBhbnkgb2YgaXRzIHZhcmlvdXMgbmFtZXMsIHdpbGwgYXV0b21hdGljYWxseSBjbGVh biB1cCB0aGUgc3RhbGUKKyAgIGxvY2tmaWxlcyBiZWNhdXNlIHRoZSBwaWRzIHRoZXkgY29udGFp biBhcmUgaW52YWxpZC4gVGhlIGJlaGF2aW9yIG9mIGN1CisgICBhbmQgb3RoZXIgY29tbXVuaWNh dGlvbiBwcm9ncmFtcyB1bmRlciB0aGVzZSBjb25kaXRpb25zIHNob3VsZCBiZSB0aGUKKyAgIHNh bWUuCisKKyAgIEhlcmUsIGJ5IHRoZSB3YXksIGlzIGEgc3VtbWFyeSBvZiB0aGUgZGlmZmVyZW5j ZXMgYmV0d2VlbiB0aGUgSFAtVVgKKyAgIHBvcnQgZHJpdmVyIHR5cGVzIGZyb20gSm9obiBQZXp6 YW5vIG9mIEhQOgorCisgICAgIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBkZXZpY2UgZmlsZXMg Zm9yIGVhY2ggcG9ydC4KKworICAgICBUaGUgdHR5ZFhYWCBkZXZpY2UgZmlsZSBpcyBkZXNpZ25l ZCB0byB3b3JrIGFzIGZvbGxvd3M6CisKKyAgICAxLiBUaGUgcHJvY2VzcyB0aGF0IG9wZW5zIGl0 IGRvZXMgTk9UIGdldCBjb250cm9sIG9mIHRoZSBwb3J0IHVudGlsIENECisgICAgICAgaXMgYXNz ZXJ0ZWQuIFRoaXMgd2FzIGludGVudGlvbmFsIChvdmVyIDE1IHllYXJzIGFnbykgdG8gYWxsb3cK KyAgICAgICBnZXR0eSB0byBvcGVuIHRoZSBwb3J0IGJ1dCBub3QgY29udHJvbCBpdCB1bnRpbCBz b21lb25lIGNhbGxlZCBpbi4KKyAgICAgICBJZiBhIHByb2Nlc3Mgd2FudHMgdG8gdXNlIHRoZSBk aXJlY3Qgb3IgY2FsbG91dCBkZXZpY2UgZmlsZXMKKyAgICAgICAodHR5WFhYIGFuZCBjdWxYWFgg cmVzcGVjdGl2ZWx5KSwgdGhleSB3aWxsIHRoZW4gZ2V0IGNvbnRyb2wgYW5kCisgICAgICAgZ2V0 dHkgd291bGQgYmUgYmxvY2tlZC4gVGhpcyBlbGltaW5hdGVkIHRoZSBuZWVkIHRvIHVzZSB1dWdl dHR5CisgICAgICAgKGFuZCBpdHMgaW5oZXJlbnQgcHJvYmxlbXMgd2l0aCBsb2NrIGZpbGVzKSBm b3IgbW9kZW1zLiBZb3UgY2FuIHNlZQorICAgICAgIHRoaXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBm YWN0IHRoYXQgInBzIC1lZiIgc2hvd3MgYSA/IGluIHRoZSB0dHkKKyAgICAgICBjb2x1bW4gZm9y IHRoZSBnZXR0eSBwcm9jZXNzIGFzIGdldHR5IGRvZXMgbm90IGhhdmUgdGhlIHBvcnQgeWV0Lgor ICAgIDIuIE9uY2UgQ0QgaXMgYXNzZXJ0ZWQsIHRoZSBwb3J0IGlzIGNvbnRyb2xsZWQgYnkgZ2V0 dHkgKG9yIHRoZQorICAgICAgIHByb2Nlc3MgaGFuZGxpbmcgYW4gaW5jb21pbmcgY2FsbCkgaWYg dGhlcmUgd2FzIG5vIHByb2Nlc3MgdXNpbmcKKyAgICAgICB0aGUgcG9ydC4gVGhlID8gaW4gdGhl ICJwcyIgY29tbWFuZCBub3cgc2hvd3MgdGhlIHBvcnQuIEF0IHRoaXMKKyAgICAgICBwb2ludCwg dGhlIHBvcnQgYWNjZXB0cyBkYXRhLgorCisgICAgIFRoZXJlZm9yZSB5b3Ugc2hvdWxkIHVzZSBl aXRoZXIgdGhlIGNhbGxvdXQgY3VsWFhYIGRldmljZSBmaWxlCisgICAgIChpbW1lZGlhdGUgY29u dHJvbCBidXQgbm8gZGF0YSB1bnRpbCBDRCBpcyBhc3NlcnRlZCkgb3IgdGhlIGRpcmVjdAorICAg ICBkZXZpY2UgZmlsZSB0dHlYWFggd2hpY2ggZ2l2ZXMgaW1tZWRpYXRlIGNvbnRyb2wgYW5kIGlt bWVkaWF0ZSBkYXRhCisgICAgIGFuZCB3aGljaCBpZ25vcmVzIGJ5IGRlZmF1bHQgbW9kZW0gY29u dHJvbCBzaWduYWxzLgorCisgICAgIFRoZSB0dHlkWFhYIGRldmljZSBzaG91bGQgYmUgdXNlZCBv bmx5IGZvciBjYWxsaW4gYW5kIG15CisgICAgIHJlY29tbWVuZGF0aW9uIGlzIHRvIHVzZSBpdCBv bmx5IGZvciBnZXR0eSBhbmQgdXVnZXR0eS4KKworMy4yLjQgTm90ZXMgb24gU3BlY2lmaWMgSFAt VVggUmVsZWFzZXMKKworICAgU0VDVElPTiBDT05URU5UUworCisgIDMuMi40LjEuIFsyMjhdSFAt VVggMTEKKyAgMy4yLjQuMi4gWzIyOV1IUC1VWCAxMAorICAzLjIuNC4zLiBbMjMwXUhQLVVYIDkK KyAgMy4yLjQuNC4gWzIzMV1IUC1VWCA4CisgIDMuMi40LjUuIFsyMzJdSFAtVVggNyBhbmQgRWFy bGllcgorCiszLjIuNC4xLiBIUC1VWCAxMQorCisgICBbIFsyMzNdVG9wIF0gWyBbMjM0XUNvbnRl bnRzIF0gWyBbMjM1XVNlY3Rpb24gQ29udGVudHMgXSBbIFsyMzZdTmV4dCBdCisKKyAgIEFzIG5v dGVkIGluIFsyMzddU2VjdGlvbiAzLjIuMiwgdGhlIEhQLVVYIDExIFRlbG5ldCBzZXJ2ZXIgYW5k L29yCisgICBwc2V1ZG90ZXJtaW5hbCBkcml2ZXIgYXJlIGEgc2VyaW91cyBpbXBlZGltZW50IHRv IGZpbGUgdHJhbnNmZXIgb3ZlcgorICAgVGVsbmV0IGNvbm5lY3Rpb25zIGludG8gSFAtVVguIElm IHlvdSBoYXZlIGEgVGVsbmV0IGNvbm5lY3Rpb24gaW50bworICAgSFAtVVggMTEsIHRlbGwgeW91 ciBkZXNrdG9wIEtlcm1pdCBwcm9ncmFtIHRvOgorCisgIHNldCBzdHJlYW1pbmcgb2ZmCisgIHNl dCByZWNlaXZlIHBhY2tldC1sZW5ndGggMjAwMAorICBzZXQgc2VuZCBwYWNrZXQtbGVuZ3RoIDUw MAorCisgICBGaWxlIHRyYW5zZmVyIHNwZWVkcyBvdmVyIGNvbm5lY3Rpb25zIGZyb20gSFAtVVgg MTEgKGRpYWxlZCBvciBUZWxuZXQpCisgICBhcmUgbm90IGltcGVkZWQgd2hhdHNvZXZlciwgYW5k IGNhbiBnbyBhdCB3aGF0ZXZlciBzcGVlZCBpcyBhbGxvd2VkIGJ5CisgICB0aGUgY29ubmVjdGlv biBhbmQgdGhlIEtlcm1pdCBwYXJ0bmVyIG9uIHRoZSBmYXIgZW5kLgorCisgICBQQS1SSVNDIGJp bmFyaWVzIGZvciBIUC1VWCAxMC4yMCBvciBsYXRlciBzaG91bGQgcnVuIG9uIGFueSBQQS1SSVND CisgICBzeXN0ZW0sIFM3MDAgb3IgUzgwMCwgYXMgbG9uZyBhcyB0aGUgYmluYXJ5IHdhcyBub3Qg YnVpbHQgdW5kZXIgYSBsYXRlcgorICAgSFAtVVggdmVyc2lvbiB0aGFuIHRoZSBob3N0IG9wZXJh dGluZyBzeXN0ZW0uIEhQLVVYIDExLjAwIGFuZCAxMS4xMSBhcmUKKyAgIG9ubHkgZm9yIFBBLVJJ U0Mgc3lzdGVtcy4gSFAtVVggMTEuMjAgaXMgb25seSBmb3IgSUE2NCAoc3Vic2VxdWVudAorICAg SFAtVVggcmVsZWFzZXMgd2lsbCBiZSBmb3IgYm90aCBQQS1SSVNDIGFuZCBJQTY0KS4gVG8gY2hl Y2sgYmluYXJ5CisgICBjb21wYXRpYmlsaXR5LCB0aGUgZm9sbG93aW5nIEMtS2VybWl0IDguMCBi aW5hcmllcyB3ZXJlIHJ1bgorICAgc3VjY2Vzc2Z1bGx5IG9uIGFuIEhQLTkwMDAvNzg1IHdpdGgg SFAtVVggMTEuMTE6CisKKyAgICAgKiBNb2RlbCA3eHggSFAtVVggMTAuMjAKKyAgICAgKiBNb2Rl bCA4eHggSFAtVVggMTAuMjAKKyAgICAgKiBNb2RlbCA3eHggSFAtVVggMTEuMDAKKyAgICAgKiBN b2RlbCA4eHggSFAtVVggMTEuMDAKKyAgICAgKiBNb2RlbCA3eHggSFAtVVggMTEuMTEKKyAgICAg KiBNb2RlbCA4eHggSFAtVVggMTEuMTEKKworICAgQmluYXJpZXMgYnVpbHQgdW5kZXIgc29tZSBv ZiB0aGUgZWFybGllciBIUC1VWCByZWxlYXNlcywgc3VjaCBhcyA5LjA1LAorICAgbWlnaHQgYWxz byB3b3JrLCBidXQgb25seSBpZiBidWlsdCBmb3IgdGhlIHNhbWUgaGFyZHdhcmUgZmFtaWx5IChl LmcuCisgICBzNzAwKS4KKworMy4yLjQuMi4gSFAtVVggMTAKKworICAgWyBbMjM4XVRvcCBdIFsg WzIzOV1Db250ZW50cyBdIFsgWzI0MF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjQxXU5leHQgXQor ICAgWyBbMjQyXVByZXZpb3VzIF0KKworICAgQmVnaW5uaW5nIGluIEhQLVVYIDEwLjEwLCBsaWJj dXJzZXMgaXMgbGlua2VkIHRvIGxpYnhjdXJzZXMsIHRoZSBuZXcKKyAgIFVOSVg5NSAoWC9PcGVu KSB2ZXJzaW9uIG9mIGN1cnNlcywgd2hpY2ggaGFzIHNvbWUgc2VyaW91cyBidWdzOyBzb21lCisg ICByb3V0aW5lcywgd2hlbiBjYWxsZWQsIHdvdWxkIGhhbmcgYW5kIG5ldmVyIHJldHVybiwgc29t ZSB3b3VsZCBkdW1wCisgICBjb3JlLiBFdmlkZW50bHkgbGlieGN1cnNlcyBjb250YWlucyBhIHNl bGVjdCgpIHJvdXRpbmUsIGFuZCB3aGVuZXZlcgorICAgQy1LZXJtaXQgY2FsbHMgd2hhdCBpdCB0 aGlua3MgaXMgdGhlIHJlZ3VsYXIgKHNvY2tldHMpIHNlbGVjdCgpLCBpdAorICAgZ2V0cyB0aGUg Y3Vyc2VzIG9uZSwgY2F1c2luZyBhIHNlZ21lbnRhdGlvbiBmYXVsdC4gVGhlcmUgaXMgYSBwYXRj aCBmb3IKKyAgIHRoaXMgZnJvbSBIUCwgUEhDT184MDg2LCAiczcwMF84MDAgMTAuMTAgbGliY3Vy c2VzIHBhdGNoIiwgInNoYXJlZCBsaWIKKyAgIGN1cnNlcyBwcm9ncmFtIGhhbmdzIG9uIDEwLjEw IiwgIjEwLjEwIGVuaGFuY2VkIFgvT3BlbiBjdXJzZXMgY29yZQorICAgZHVtcHMgZHVlIHRvIHVz aW5nIHdyb25nIHNlbGVjdCBjYWxsIiwgOTYvMDgvMDIgKHlvdSBjYW4gdGVsbCBpZiB0aGUKKyAg IHBhdGNoIGlzIGluc3RhbGxlZCB3aXRoICJ3aGF0IC91c3IvbGliL2xpYnhjdXJzZXMuMSI7IHRo ZSB1bnBhdGNoZWQKKyAgIHZlcnNpb24gaXMgNzYuMjAsIHRoZSBwYXRjaGVkIG9uZSBpcyA3Ni4y MC4xLjIpLiBJdCBoYXMgYmVlbiB2ZXJpZmllZAorICAgdGhhdCBDLUtlcm1pdCB3b3JrcyBPSyB3 aXRoIHRoZSBwYXRjaGVkIGxpYnJhcnksIGJ1dCByZXN1bHRzIGFyZSBub3QKKyAgIGRlZmluaXRl IGZvciBIUC1VWCAxMC4yMCBvciBoaWdoZXIuCisKKyAgIFRvIGVuc3VyZSB0aGF0IEMtS2VybWl0 IHdvcmtzIGV2ZW4gb24gbm9uLXBhdGNoZWQgSFAtVVggMTAuMTAgc3lzdGVtcywKKyAgIHNlcGFy YXRlIG1ha2VmaWxlIGVudHJpZXMgYXJlIHByb3ZpZGVkIGZvciBIUC1VWCAxMC4wMC8xMC4wMSwg MTAuMTAsCisgICAxMC4yMCwgZXRjLCBpbiB3aGljaCB0aGUgZW50cmllcyBmb3IgMTAuMTAgYW5k IGFib3ZlIGxpbmsgd2l0aAorICAgbGliSGN1cnNlcywgd2hpY2ggaXMgIkhQIGN1cnNlcyIsIHRo ZSBvbmUgdGhhdCB3YXMgdXNlZCBpbiAxMC4wMC8xMC4wMS4KKyAgIEhQLVVYIDExLjIwIGFuZCBs YXRlciwgaG93ZXZlciwgbGluayB3aXRoIGxpYmN1cnNlcywgYXMgbGliSGN1cnNlcworICAgZGlz YXBwZWFyZWQgaW4gMTEuMjAuCisKKzMuMi40LjMuIEhQLVVYIDkKKworICAgWyBbMjQzXVRvcCBd IFsgWzI0NF1Db250ZW50cyBdIFsgWzI0NV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjQ2XU5leHQg XQorICAgWyBbMjQ3XVByZXZpb3VzIF0KKworICAgSFAtVVggOS4wMCBhbmQgOS4wMSBuZWVkIHBh dGNoIFBITkVfMTA1NzIgKG5vdGU6IHRoaXMgcmVwbGFjZXMKKyAgIFBITkVfMzY0MSkgZm9yIGhw dHQwLm8sIGFzaW8wLm8sIGFuZCB0dHljb21uLm8gaW4gbGliaHAtdXguYS4gQ29udGFjdAorICAg SGV3bGV0dCBQYWNrYXJkIGlmIHlvdSBuZWVkIHRoaXMgcGF0Y2guIFdpdGhvdXQgaXQsIHRoZSBk aWFsb3V0IGRldmljZQorICAgKHR0eSkgd2lsbCBiZSBodW5nIGFmdGVyIGZpcnN0IHVzZTsgc3Vi c2VxdWVudCBhdHRlbXB0cyB0byB1c2Ugd2lsbAorICAgcmV0dXJuIGFuIGVycm9yIGxpa2UgImRl dmljZSBidXN5Ii4gKFRoZXJlIGFyZSBhbHNvIGVxdWl2YWxlbnQgcGF0Y2hlcworICAgZm9yIHM3 MDAgOS4wMyA5LjA1IDkuMDcgKFBITkVfMTA1NzMpIGFuZCBzODAwIDkuMDAgOS4wNCAoUEhORV8x MDQxNikuCisKKyAgIFdoZW4gQy1LZXJtaXQgaXMgaW4gc2VydmVyIG1vZGUsIGl0IG1pZ2h0IGhh dmUgdHJvdWJsZSBleGVjdXRpbmcgUkVNT1RFCisgICBIT1NUIGNvbW1hbmRzLiBUaGlzIHByb2Js ZW0gaGFwcGVucyB1bmRlciBIUC1VWCA5LjAwIChNb3Rvcm9sYSkgYW5kCisgICBIUC1VWCA5LjAx IChSSVNDKSBJRiB0aGUgQy1TaGVsbCBpcyB0aGUgbG9naW4gc2hlbGwgQU5EIHdpdGggdGhlCisg ICBDLVNoZWxsIFJldmlzaW9uIDcwLjE1LiBCZXN0IHRoaW5nIGlzIHRvIGluc3RhbGwgSFAncyBQ YXRjaCBQSENPXzQ5MTkKKyAgIGZvciBTZXJpZXMgMzAwLzQwMCBhbmQgUEhDT181MDE1IGZvciB0 aGUgU2VyaWVzIDcwMC84MDAuIFBIQ09fNTAxNSBpcworICAgY2FsbGVkICJzNzAwXzgwMCA5Llgg Y3VtdWxhdGl2ZSBjc2goMSkgcGF0Y2ggd2l0aCBtZW1vcnkgbGVhayBmaXgiCisgICB3aGljaCB3 b3JrcyBmb3IgSFAtVVggOS4wMCwgOS4wMSwgOS4wMywgOS4wNCwgOS4wNSBhbmQgOS4wNy4gQXQg bGVhc3QKKyAgIHlvdSBuZWVkIEMtU2hlbGwgUmV2aXNpb24gNzIuMTIhCisKKyAgIEMtS2VybWl0 IHdvcmtzIGZpbmUgLS0gaW5jbHVkaW5nIGl0cyBjdXJzZXMtYmFzZWQgZmlsZS10cmFuc2ZlciBk aXNwbGF5CisgICAtLSBvbiB0aGUgY29uc29sZSB0ZXJtaW5hbCwgaW4gYSByZW1vdGUgc2Vzc2lv biAoZS5nLiB3aGVuIGxvZ2dlZCBpbiB0bworICAgdGhlIEhQIDkwMDAgb24gYSB0ZXJtaW5hbCBw b3J0IG9yIHdoZW4gdGVsbmV0dGVkIG9yIHJsb2dpbidkKSwgYW5kIGluCisgICBhbiBIUC1WVUUg aHB0ZXJtIHdpbmRvdyBvciBhbiB4dGVybSB3aW5kb3cuCisKKzMuMi40LjQuIEhQLVVYIDgKKwor ICAgWyBbMjQ4XVRvcCBdIFsgWzI0OV1Db250ZW50cyBdIFsgWzI1MF1TZWN0aW9uIENvbnRlbnRz IF0gWyBbMjUxXU5leHQgXQorICAgWyBbMjUyXVByZXZpb3VzIF0KKworICAgVG8gbWFrZSBDLUtl cm1pdCB3b3JrIG9uIEhQLVVYIDguMDUgb24gYSBtb2RlbCA3MjAsIG9idGFpbiBhbmQgaW5zdGFs bAorICAgSFAtVVggcGF0Y2ggUEhORV8wODk5LiBUaGlzIHBhdGNoIGRlYWxzIHdpdGggYSBsb3Qg b2YgZHJpdmVyIGlzc3VlcywKKyAgIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGNvbW11bmljYXRp b24gYXQgaGlnaGVyIHNwZWVkcy4KKworICAgT25lIHVzZXIgcmVwb3J0czoKKworICAgICBPbiBI UC1VWCA4IERPTidUIGluc3RhbGwgJ3R0eSBwYXRjaCcgUEhLTF80NjU2LCBpbnN0YWxsIFBIS0xf MzA0NworICAgICBpbnN0ZWFkISBZZXN0ZXJkYXkgSSB0cmllZCB0aGlzIGxhdGVzdCB0dHkgcGF0 Y2ggUEhLTF80NjU2IGFuZCBoYWQKKyAgICAgdGVycmlibGUgcHJvYmxlbXMuIFRoaXMgcGF0Y2gg c2hvdWxkIGZpeCBSVFMvQ1RTIHByb2JsZW1zLiBXaXRoIHRleHQKKyAgICAgdHJhbnNmZXIgYWxs IGxvb2tzIG5pY2UuIEJ1dCB3aGVuIEkgc3dpdGNoZWQgb3ZlciB0byBiaW5hcnkgZmlsZXMKKyAg ICAgdGhlIHNlcmlhbCBpbnRlcmZhY2UgcmV0dXJuZWQgb25seSBydWJpc2ggdG8gQy1LZXJtaXQu IEFsbCBzb3J0cyBvZgorICAgICBwcm90b2NvbCwgQ1JDIGFuZCBwYWNrZWQgZXJyb3JzIEkgaGFk LiBBZnRlciBzZXZlcmFsIHRlc3RzIGFuZCBhZnRlcgorICAgICB1bmluc3RhbGxpbmcgdGhhdCBw YXRjaCwgYWxsIHRyYW5zZmVycyB3b3JrZWQgZmluZS4gTUIncyBvZiBkYXRhCisgICAgIHdpdGhv dXQgYW55IGVycm9ycy4gU28ga2VlcCB5b3VyIGZpbmdlcnMgYXdheSBmcm9tIHRoYXQgcGF0Y2gu IElmCisgICAgIGFueWJvZHkgbmVlZHMgdGhlIFBIS0xfMzA0NyBwYXRjaCBJIGhhdmUgaXQgaGVy ZS4gSXQgaXMgbm8gbG9uZ2VyCisgICAgIGF2YWlsYWJsZSBmcm9tIEhQJ3MgcGF0Y2ggYmFzZS4K KworMy4yLjQuNS4gSFAtVVggNyBhbmQgRWFybGllcgorCisgICBbIFsyNTNdVG9wIF0gWyBbMjU0 XUNvbnRlbnRzIF0gWyBbMjU1XVNlY3Rpb24gQ29udGVudHMgXSBbCisgICBbMjU2XVByZXZpb3Vz IF0KKworICAgV2hlbiB0cmFuc2ZlcnJpbmcgZmlsZXMgaW50byBIUC1VWCA1IG9yIDYgb3ZlciBh IFRlbG5ldCBjb25uZWN0aW9uLCB5b3UKKyAgIG11c3Qgbm90IHVzZSBzdHJlYW1pbmcsIGFuZCB5 b3UgbXVzdCBub3QgdXNlIGEgcGFja2V0IGxlbmd0aCBncmVhdGVyCisgICB0aGFuIDUxMi4gSG93 ZXZlciwgeW91IGNhbiB1c2Ugc3RyZWFtaW5nIGFuZCBsb25nZXIgcGFja2V0cyB3aGVuCisgICBz ZW5kaW5nIGZpbGVzIGZyb20gSFAtVVggb24gYSBUZWxuZXQgY29ubmVjdGlvbi4gSW4gQy1LZXJt aXQgOC4wLCB0aGUKKyAgIGRlZmF1bHQgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoIGZvciBIUC1VWCA1 IGFuZCA2IHdhcyBjaGFuZ2VkIHRvIDUwMCAoYnV0CisgICB5b3UgY2FuIHN0aWxsIGluY3JlYXNl IGl0IHdpdGggU0VUIFJFQ0VJVkUgUEFDS0VULUxFTkdUSCBpZiB5b3Ugd2lzaCwKKyAgIGUuZy4g Zm9yIG5vbi1UZWxuZXQgY29ubmVjdGlvbnMpLiBEaXNhYmxlIHN0cmVhbWluZyB3aXRoIFNFVCBT VFJFQU1JTkcKKyAgIE9GRi4KKworICAgVGhlIEhQLVVYIDUuMDAgdmVyc2lvbiBvZiBDLUtlcm1p dCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmdWxsc2NyZWVuCisgICBmaWxlLXRyYW5zZmVyIGJlY2F1 c2Ugb2YgcHJvYmxlbXMgd2l0aCB0aGUgY3Vyc2VzIGxpYnJhcnkuCisKKyAgIElmIEhQLVVYIDUu MjEgd2l0aCBXb2xsb25nb25nIFRDUC9JUCBpcyBvbiB0aGUgcmVtb3RlIGVuZCBvZiBhIFRlbG5l dAorICAgY29ubmVjdGlvbiwgc3RyZWFtaW5nIHRyYW5zZmVycyB0byBIUC1VWCBpbnZhcmlhYmx5 IGZhaWwuIFdvcmthcm91bmQ6CisgICBTRVQgU1RSRUFNSU5HIE9GRi4gUGFja2V0cyBsb25nZXIg dGhhbiBhYm91dCAxMDAwIHNob3VsZCBub3QgYmUgdXNlZC4KKyAgIFRyYW5zZmVycyBmcm9tIHRo ZXNlIHN5c3RlbXMsIGhvd2V2ZXIsIGNhbiB1c2Ugc3RyZWFtaW5nIGFuZC9vciBsb25nZXIKKyAg IHBhY2tldHMuCisKKyAgIFJlcG9ydGVkbHksICJbdGhlcmUgaXNdIGEgYnVnIGluIEMtS2VybWl0 IHVzaW5nIEhQLVVYIHZlcnNpb24gNS4yMSBvbgorICAgdGhlIEhQLTkwMDAgc2VyaWVzIDUwMCBj b21wdXRlcnMuIEl0IG9ubHkgb2NjdXJzIHdoZW4gdGhlIGNvbnRyb2xsaW5nCisgICB0ZXJtaW5h bCBpcyB1c2luZyBhbiBIUC0yNzE0MCBzaXgtcG9ydCBtb2RlbSBtdXguIFRoZSBwcm9ibGVtIGlz IG5vdAorICAgcHJlc2VudCBpZiB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgaXMgbG9nZ2VkIGlu dG8gYW4gSFAtMjcxMzAKKyAgIGVpZ2h0LXBvcnQgbXV4LiBUaGUgc3ltcHRvbSBpcyB0aGF0IGp1 c3QgYWZ0ZXIgZGlhbGluZyBzdWNjZXNzZnVsbHkgYW5kCisgICBjb25uZWN0aW5nIEtlcm1pdCBs b2NrcyB1cCBhbmQgdGhlIHBvcnQgaXMgdW51c2FibGUgdW50aWwgYm90aCBmb3JrcyBvZgorICAg S2VybWl0IGFuZCB0aGUgbG9naW4gc2hlbGwgYXJlIGtpbGxlZC4iIChUaGlzIHJlcG9ydCBwcmVk YXRlcyBDLUtlcm1pdAorICAgNi4wIGFuZCBtaWdodCBubyBsb25nZXIgYXBwbHkuKQorCiszLjIu NS4gSFAtVVggYW5kIFguMjUKKworICAgWyBbMjU3XVRvcCBdIFsgWzI1OF1Db250ZW50cyBdIFsg WzI1OV1TZWN0aW9uIENvbnRlbnRzIF0gWworICAgWzI2MF1QcmV2aW91cyBdCisKKyAgIEFsdGhv dWdoIEMtS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBpbmNsdWRlIGJ1aWx0LWluIHN1cHBvcnQg Zm9yIEhQLVVYCisgICBYLjI1IChhcyBpdCBkb2VzIGZvciB0aGUgU3VuIGFuZCBJQk0gWC4yNSBw cm9kdWN0cyksIGl0IGNhbiBzdGlsbCBiZQorICAgdXNlZCB0byBtYWtlIFguMjUgY29ubmVjdGlv bnMgYXMgZm9sbG93czogc3RhcnQgS2VybWl0IGFuZCB0aGVuIHRlbG5ldAorICAgdG8gbG9jYWxo b3N0LiBBZnRlciBsb2dnaW5nIGJhY2sgaW4sIHN0YXJ0IHBhZGVtIGFzIHlvdSB3b3VsZCBub3Jt YWxseQorICAgZG8gdG8gY29ubmVjdCBvdmVyIFguMjUuIFBhZGVtIGFjdHMgYXMgYSBwaXBlIGJl dHdlZW4gS2VybWl0IGFuZCBYLjI1LgorICAgSW4gQy1LZXJtaXQgNy4wLCB5b3UgbWlnaHQgYWxz byBiZSBhYmxlIHRvIGF2b2lkIHRoZSAidGVsbmV0IGxvY2FsaG9zdCIKKyAgIHN0ZXAgYnkgdXNp bmc6CisKKyAgQy1LZXJtaXQ+IHB0eSBwYWRlbSBhZGRyZXNzCisKKyAgIFRoaXMgd29ya3MgaWYg cGFkZW0gdXNlcyBzdGFuZGFyZCBpL28gKHdobyBrbm93cz8pLgorCiszLjMuIEMtS0VSTUlUIEFO RCBMSU5VWAorCisgICBbIFsyNjFdVG9wIF0gWyBbMjYyXUNvbnRlbnRzIF0gWyBbMjYzXVNlY3Rp b24gQ29udGVudHMgXSBbIFsyNjRdTmV4dCBdCisgICBbIFsyNjVdUHJldmlvdXMgXQorCisgICBT RUNUSU9OIENPTlRFTlRTCisKKyAgMy4zLjEuIFsyNjZdUHJvYmxlbXMgQnVpbGRpbmcgQy1LZXJt aXQgZm9yIExpbnV4CisgIDMuMy4yLiBbMjY3XVByb2JsZW1zIHdpdGggU2VyaWFsIERldmljZXMg aW4gTGludXgKKyAgMy4zLjMuIFsyNjhdVGVybWluYWwgRW11bGF0aW9uIGluIExpbnV4CisgIDMu My40LiBbMjY5XURhdGVzIGFuZCBUaW1lcworICAzLjMuNS4gWzI3MF1TdGFydHVwIEVycm9ycwor ICAzLjMuNi4gWzI3MV1UaGUgRnVsbHNjcmVlbiBGaWxlIFRyYW5zZmVyIERpc3BsYXkKKworICAg ICAoQXVndXN0IDIwMTApIFJlcG9ydGVkbHkgQy1LZXJtaXQgcGFja2FnZXMgZm9yIGNlcnRhaW4g TGludXgKKyAgICAgZGlzdHJpYnV0aW9ucyBzdWNoIGFzIENlbnRvcyBhbmQgVWJ1bnR1IGhhdmUg Y2VydGFpbiBmZWF0dXJlcworICAgICBkaXNhYmxlZCwgZm9yIGV4YW1wbGUgdGhlIFNTSCBjb21t YW5kLCBTRVQgSE9TVCBQVFkgL1NTSCwgYW5kCisgICAgIHBlcmhhcHMgYW55dGhpbmcgZWxzZSB0 byBkbyB3aXRoIFNTSCBhbmQvb3IgcHNldWRvdGVybWluYWxzIGFuZCB3aG8KKyAgICAga25vd3Mg d2hhdCBlbHNlLiBJZiB5b3UgZG93bmxvYWQgdGhlIHJlZ3VsYXIgcGFja2FnZSAoInRhcmJhbGwi KQorICAgICBmcm9tIHRoZSBLZXJtaXQgUHJvamVjdCBhbmQgYnVpbGQgZnJvbSBpdCAoIm1ha2Ug bGludXgiKSwgZXZlcnl0aGluZworICAgICBpcyBmaW5lLgorCisgICAgIEMtS2VybWl0IGluIFVi dW50dSAxMC4wNCBhbmQgOS4xMCB3YXMgcmVwb3J0ZWQgc2xvdyB0byBzdGFydCBiZWNhdXNlCisg ICAgIGl0IHdhcyB0cnlpbmcgdG8gcmVzb2x2ZSB0aGUgSVAgYWRkcmVzcyAyNTUuMjU1LjI1NS4y NTUuIExhdGVyLCBhbHNvCisgICAgIGluIHJlY2VudCBEZWJpYW4gdmVyc2lvbnMuIFRoZSBmb2xs b3dpbmcgaXMgc2VlbiBpbiB0aGUgc3RyYWNlOgorCit3cml0ZSgzLCAiUkVTT0xWRS1BRERSRVNT IDI1NS4yNTUuMjU1LjI1NVxuIiwgMzIpCisKKyAgICAgVGhpcyBpcyBub3QgS2VybWl0IFByb2pl Y3QgY29kZS4gVHVybnMgb3V0IHRvIGJlIHNvbWV0aGluZyBpbgorICAgICBnbGliYydzIHJlc29s dmVyLCBhbmQgY2FuIGJlIGZpeGVkIGJ5IGNoYW5naW5nIC9ldGMvbnNzd2l0Y2guY29uZiwKKyAg ICAgYnV0IGl0IG1pZ2h0IGJyZWFrIG90aGVyIHNvZnR3YXJlLCBzdWNoIGFzIFsyNzJdQXZhaGkg b3IgYW55dGhpbmcKKyAgICAgKHN1Y2ggYXMgR25vbWUsIEphdmEsIG9yIEN1cHMpIHRoYXQgZGVw ZW5kcyBvbiBpdC4gSSdtIG5vdCBzdXJlCisgICAgIHdoZXJlIGl0IGhhcHBlbnM7IEkgZG9uJ3Qg dGhpbmsgS2VybWl0IHRyaWVzIHRvIGdldCBpdHMgSVAgYWRkcmVzcworICAgICBhdCBzdGFydHVw IHRpbWUsIG9ubHkgd2hlbiBpdCdzIG5lZWRlZCBvciBhc2tlZCBmb3IsIGUuZy4gd2hlbgorICAg ICBtYWtpbmcgYSBjb25uZWN0aW9uIG9yIGV2YWx1YXRpbmcgXHYoaXBhZGRyZXNzKS4KKworICAg UkVGRVJFTkNFUworCisgICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgWzI3M11j b21wLm9zLmxpbnV4Lm1pc2MsCisgICBbMjc0XWNvbXAub3MubGludXguYW5zd2VycywgYW5kIG90 aGVyIExpbnV4LW9yaWVudGVkIG5ld3Nncm91cHMsIGFuZAorICAgc2VlOgorCisgICBUaGUgTGlu dXggRG9jdW1lbnQgUHJvamVjdCAoTERQKQorICAgICAgICAgIFsyNzVdaHR0cDovL3d3dy50bGRw Lm9yZy8KKworICAgVGhlIExpbnV4IEZBUQorICAgICAgICAgIFsyNzZdaHR0cDovL3d3dy50bGRw Lm9yZy9GQVEvTGludXgtRkFRLmh0bWwKKworICAgVGhlIExpbnV4IEhPV1RPcyAoZXNwZWNpYWxs eSB0aGUgU2VyaWFsIEhPV1RPKQorCisgICAgIFsyNzddaHR0cDovL3d3dy50bGRwLm9yZy9IT1dU Ty9TZXJpYWwtSE9XVE8uaHRtbAorCisgICAgIFsyNzhdaHR0cDovL3RsZHAub3JnL0hPV1RPL01v ZGVtLUhPV1RPLmh0bWwKKworICAgICBbMjc5XWZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGlu dXgvZG9jcy9IT1dUTworCisgICAgIFsyODBdZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4 L2RvY3MvSE9XVE8KKworICAgICBbMjgxXWh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vCisKKyAg ICAgWzI4Ml1odHRwOi8vd3d3LnRsZHAub3JnL2htaXJyb3JzLmh0bWwKKworICAgTGludXggVmVu ZG9yIFRlY2ggU3VwcG9ydCBQYWdlczoKKworICAgICBbMjgzXWh0dHA6Ly93d3cucmVkaGF0LmNv bS9hcHBzL3N1cHBvcnQvCisKKyAgICAgWzI4NF1odHRwOi8vd3d3LmRlYmlhbi5vcmcvc3VwcG9y dAorCisgICAgIFsyODVdaHR0cDovL3d3dy5zbGFja3dhcmUuY29tL3N1cHBvcnQvCisKKyAgICAg WzI4Nl1odHRwOi8vd3d3LmNhbGRlcmEuY29tL3N1cHBvcnQvCisKKyAgICAgWzI4N11TVVNFIExp bnV4IFN1cHBvcnQKKworICAgICBbMjg4XWh0dHA6Ly93d3cubWFuZHJha2UuY29tL3N1cHBvcnQv CisKKyAgICAgWzI4OV1odHRwOi8vd3d3LnR1cmJvbGludXguY29tL3N1cHBvcnQvCisKKyAgIExp bnV4IFdpbm1vZGVtIFN1cHBvcnQKKyAgICAgICAgICBbMjkwXWh0dHA6Ly93d3cubGlubW9kZW1z Lm9yZy8KKworICAgQWxzbyBzZWUgZ2VuZXJhbCBjb21tZW50cyBvbiBQQy1iYXNlZCBVbml4ZXMg aW4gWzI5MV1TZWN0aW9uIDMuMC4KKworICAgV2hhdCBMaW51eCB2ZXJzaW9uIGlzIGl0PyAtLSAi dW5hbWUgLWEiIHN1cHBsaWVzIG9ubHkga2VybmVsCisgICBpbmZvcm1hdGlvbiwgYnV0IHRoZXNl IGRheXMgaXQncyB0aGUgZGlzdHJpYnV0aW9uIHRoYXQgbWF0dGVyczogUmVkIEhhdAorICAgNy4z LCBEZWJpYW4gMi4yLCBTbGFja3dhcmUgOC4wLCBldGMuIFVuZm9ydHVuYXRlbHkgdGhlcmUncyBu bworICAgY29uc2lzdGVudCB3YXkgdG8gZ2V0IHRoZSBkaXN0cmlidXRpb24gdmVyc2lvbi4gVXN1 YWxseSBpdCdzIGluIGEKKyAgIGRpc3RyaWJ1dGlvbi1zcGVjaWZpYyBmaWxlOgorCisgICAgIFJl ZCBIYXQ6ICAgL2V0Yy9pc3N1ZSBvciAvZXRjL3JlZGhhdC1yZWxlYXNlCisgICAgIERlYmlhbjog ICAgL2V0Yy9kZWJpYW5fdmVyc2lvbgorICAgICBTbGFja3dhcmU6IC9ldGMvc2xhY2t3YXJlLXZl cnNpb24gKGF0IGxlYXN0IGluIGxhdGVyIHZlcnNpb25zKQorCisgICBEaWQgeW91IGtub3c6IERF Q25ldCBpcyBhdmFpbGFibGUgZm9yIExpbnV4PyBTZWU6CisKKyAgWzI5Ml1odHRwOi8vbGludXgu ZHJlYW10aW1lLm9yZy9kZWNuZXQvCisKKyAgIChCdXQgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3Ig aXQgaW4gQy1LZXJtaXQgLS0gYW55Ym9keSBpbnRlcmVzdGVkIGluCisgICBhZGRpbmcgaXQsIHBs ZWFzZSBbMjkzXWxldCBtZSBrbm93KS4KKworICAgQmVmb3JlIHByb2NlZWRpbmcsIGxldCdzIGhh bmRsZSB0aGUgc29tZSBvZiB0aGUgbW9zdCBmcmVxdWVudGx5IGFza2VkCisgICBxdWVzdGlvbiBp biB0aGUgTGludXggbmV3c2dyb3VwczoKKworICAgIDEuIE5laXRoZXIgQy1LZXJtaXQgbm9yIGFu eSBvdGhlciBMaW51eCBhcHBsaWNhdGlvbiBjYW4gdXNlIFdpbm1vZGVtcywKKyAgICAgICBleGNl cHQgaW4gdGhlIFsyOTRdcmFyZSBjYXNlcyB3aGVyZSBMaW51eCBkcml2ZXJzIGhhdmUgYmVlbiB3 cml0dGVuCisgICAgICAgZm9yIHRoZW0uIFNlZSBbMjk1XVNlY3Rpb24gMy4wLjIgZm9yIGRldGFp bHMuCisgICAgMi4gIldoeSBkb2VzIGl0IHRha2Ugc3VjaCBhIGxvbmcgdGltZSB0byBtYWtlIGEg dGVsbmV0IGNvbm5lY3Rpb24gdG8KKyAgICAgICAob3IgZnJvbSkgbXkgTGludXggUEM/IiAodGhp cyBhcHBsaWVzIHRvIEMtS2VybWl0IGFuZCB0byByZWd1bGFyCisgICAgICAgVGVsbmV0KS4gTW9z dCB0ZWxuZXQgc2VydmVycyB0aGVzZSBkYXlzIHBlcmZvcm0gcmV2ZXJzZSBETlMgbG9va3Vwcwor ICAgICAgIG9uIHRoZSBjbGllbnQgKGZvciBzZWN1cml0eSBhbmQvb3IgbG9nZ2luZyByZWFzb25z KS4gSWYgdGhlIFRlbG5ldAorICAgICAgIGNsaWVudCdzIGFkZHJlc3MgY2Fubm90IGJlIGZvdW5k IGJ5IHRoZSBzZXJ2ZXIncyBsb2NhbCBETlMgc2VydmVyLAorICAgICAgIHRoZSBETlMgcmVxdWVz dCBnb2VzIG91dCB0byB0aGUgSW50ZXJuZXQgYXQgbGFyZ2UsIGFuZCB0aGlzIGNhbgorICAgICAg IHRha2UgcXVpdGUgc29tZSB0aW1lLiBUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRv IG1ha2Ugc3VyZQorICAgICAgIHRoYXQgYm90aCBjbGllbnQgYW5kIGhvc3QgYXJlIHJlZ2lzdGVy ZWQgaW4gRE5TLCBhbmQgdGhhdCB0aGUKKyAgICAgICByZWdpc3RyYXRpb25zIGFyZSBleHBvcnRl ZC4gQy1LZXJtaXQgaXRzZWxmIHBlcmZvcm1zIHJldmVyc2UgRE5TCisgICAgICAgbG9va3VwcyB1 bmxlc3MgeW91IHRlbGwgaXQgbm90IHRvOyB0aGlzIGlzIHRvIGFsbG93IEMtS2VybWl0IHRvIGxl dAorICAgICAgIHlvdSBrbm93IHdoaWNoIGhvc3QgaXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRv IGluIGNhc2UgeW91IGhhdmUKKyAgICAgICBtYWRlIGEgY29ubmVjdGlvbiB0byBhIGhvc3QgcG9v bCAobXVsdGlob21lZCBob3N0KS4gWW91IGNhbiBkaXNhYmxlCisgICAgICAgQy1LZXJtaXQncyBy ZXZlcnNlIEROUyBsb29rdXAgd2l0aCBTRVQgVENQIFJFVkVSU0UtRE5TLUxPT0tVUCBPRkYuCisg ICAgMy4gKEFueSBxdWVzdGlvbiB0aGF0IGhhcyB0aGUgd29yZCAiVGVsbmV0IiBpbiBpdC4uLikg VGhlIGtuZWUtamVyaworICAgICAgIHJlYWN0aW9uIGlzICJkb24ndCB1c2UgVGVsbmV0LCB1c2Ug U1NIISIgVGhlcmUncyBub3RoaW5nIHdyb25nIHdpdGgKKyAgICAgICBUZWxuZXQuIEluIGZhY3Qg aXQncyBmYXIgc3VwZXJpb3IgdG8gU1NIIGFzIGEgcHJvdG9jb2wgaW4gdGVybXMgb2YKKyAgICAg ICBmZWF0dXJlcyBhbmQgZXh0ZW5zaWJpbGl0eSwgbm90IHRvIG1lbnRpb24gcGxhdGZvcm0gbmV1 dHJhbGl0eS4gVGhlCisgICAgICAgaXNzdWUgbHVya2luZyBiZWhpbmQgdGhlIGtuZWUtamVyayBy ZWFjdGlvbiBpcyBzZWN1cml0eS4gU1NIIGlzCisgICAgICAgdGhvdWdodCB0byBiZSBzZWN1cmUs IHdoZXJlYXMgVGVsbmV0IGlzIHRob3VnaHQgdG8gYmUgaW5zZWN1cmUuCisgICAgICAgVGhpcyBp cyB0cnVlIGZvciBjbGVhci10ZXh0IFRlbG5ldCAoYmVjYXVzZSBwYXNzd29yZHMgdHJhdmVsIGlu IHRoZQorICAgICAgIGNsZWFyIGFjcm9zcyB0aGUgbmV0d29yayksIGJ1dCBhcHBhcmVudGx5IGZl dyBwZW9wbGUgcmVhbGl6ZSB0aGF0CisgICAgICAgWzI5Nl1zZWN1cmUgVGVsbmV0IGNsaWVudHMg YW5kIHNlcnZlcnMgaGF2ZSBiZWVuIGF2YWlsYWJsZSBmb3IKKyAgICAgICB5ZWFycywgYW5kIHRo ZXNlIGFyZSBtb3JlIHNlY3VyZSB0aGFuIFNTSCAoZm9yIHJlYXNvbnMgZXhwbGFpbmVkCisgICAg ICAgWzI5N11IRVJFKS4KKyAgICA0LiAoQW55IHF1ZXN0aW9uIHRoYXQgaGFzIHRoZSB3b3JkICJG VFAiIGluIGl0Li4uKSBUaGUga25lZS1qZXJrCisgICAgICAgcmVhY3Rpb24gYmVpbmcgIkRvbid0 IHVzZSBGVFAsIHVzZSBTQ1AhIiAob3IgU0ZUUCkuIFNhbWUgYW5zd2VyIGFzCisgICAgICAgYWJv dmUsIGJ1dCBtb3Jlc28uIFNDUCBhbmQgU0ZUUCBhcmUgbm90IG9ubHkgbm90IHBsYXRmb3JtIG5l dXRyYWwsCisgICAgICAgdGhleSdyZSBkaXZlcnNpdHktaG9zdGlsZS4gVGhleSB0cmFuc2ZlciBm aWxlcyBvbmx5IGluIGJpbmFyeSBtb2RlLAorICAgICAgIHdoaWNoIG1hbmdsZXMgdGV4dCBmaWxl cyBhY3Jvc3MgZGlmZmVyZW50IHBsYXRmb3JtcywgdG8gdGhlIHNhbWUKKyAgICAgICBkZWdyZWUg dGhlIHBsYXRmb3JtJ3MgdGV4dC1maWxlIHJlY29yZCBmb3JtYXQgYW5kIGNoYXJhY3RlciBzZXQK KyAgICAgICBkaWZmZXIuIEFuIGV4dHJlbWUgZXhhbXBsZSB3b3VsZCBiZSBhbiBWYXJpYWJsZS1C bG9jayBmb3JtYXQgRUJDRElDCisgICAgICAgdGV4dCBmaWxlIG9uIGFuIElCTSBtYWluZnJhbWUs IGJpbmFyeSB0cmFuc2ZlciBvZiB3aGljaCB0byBVbml4CisgICAgICAgd291bGQgZG8geW91IGxp dHRsZSBnb29kIGluZGVlZC4gRlRQIHdhcyBkZXNpZ25lZCB3aXRoIGRpdmVyc2l0eSBpbgorICAg ICAgIG1pbmQgYW5kIHNlY3VyZSB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlLgorCiszLjMuMS4gUHJv YmxlbXMgQnVpbGRpbmcgQy1LZXJtaXQgZm9yIExpbnV4CisKKyAgIFsgWzI5OF1Ub3AgXSBbIFsy OTldQ29udGVudHMgXSBbIFszMDBdU2VjdGlvbiBDb250ZW50cyBdIFsgWzMwMV1OZXh0IF0KKwor ICAgTW9kZXJuIExpbnV4IGRpc3RyaWJ1dGlvbnMgbGlrZSBSZWQgSGF0IGdpdmUgeW91IGEgY2hv aWNlIGF0CisgICBpbnN0YWxsYXRpb24gd2hldGhlciB0byBpbmNsdWRlICJkZXZlbG9wZXIgdG9v bHMiLiBPYnZpb3VzbHksIHlvdSBjYW4ndAorICAgYnVpbGQgQy1LZXJtaXQgb3IgYW55IG90aGVy IEMgcHJvZ3JhbSBmcm9tIHNvdXJjZSBjb2RlIGlmIHlvdSBoYXZlIG5vdAorICAgaW5zdGFsbGVk IHRoZSBkZXZlbG9wZXIgdG9vbHMuIEJ1dCB0byBjb25mdXNlIG1hdHRlcnMsIHlvdSBtaWdodCBh bHNvCisgICBoYXZlIHRvIGNob29zZSAoc2VwYXJhdGVseSkgdG8gaW5zdGFsbCB0aGUgImN1cnNl cyIgb3IgIm5jdXJzZXMiCisgICB0ZXJtaW5hbCBjb250cm9sIGxpYnJhcnk7IHRodXMgaXQgaXMg cG9zc2libGUgdG8gaW5zdGFsbCB0aGUgQyBjb21waWxlcgorICAgYW5kIGxpbmtlciwgYnV0IG9t aXQgdGhlIChuKWN1cnNlcyBsaWJyYXJ5IGFuZCBoZWFkZXJzLiBJZiBjdXJzZXMgaXMKKyAgIG5v dCBpbnN0YWxsZWQsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBD LUtlcm1pdCB0aGF0CisgICBzdXBwb3J0cyB0aGUgZnVsbHNjcmVlbiBmaWxlLXRyYW5zZmVyIGRp c3BsYXksIGluIHdoaWNoIGNhc2UgeW91J2xsCisgICBuZWVkIHRvIHVzZSB0aGUgImxpbnV4bmMi IG1ha2VmaWxlIHRhcmdldCAobmMgPSBObyBDdXJzZXMpIG9yIGVsc2UKKyAgIGluc3RhbGwgbmN1 cnNlcyBiZWZvcmUgYnVpbGRpbmcuCisKKyAgIFRoZXJlIGFyZSBhbGwgc29ydHMgb2YgY29uZnVz aW5nIGlzc3VlcyBjYXVzZWQgYnkgdGhlIG1hbnkgYW5kIHZhcmllZAorICAgTGludXggZGlzdHJp YnV0aW9ucy4gU29tZSBvZiB0aGUgd29yc3QgaW52b2x2ZSB0aGUgY3Vyc2VzIGxpYnJhcnkgYW5k CisgICBoZWFkZXIgZmlsZXM6IHdoZXJlIGFyZSB0aGV5LCB3aGF0IGFyZSB0aGV5IGNhbGxlZCwg d2hpY2ggb25lcyBhcmUgdGhleQorICAgcmVhbGx5PyBPdGhlciB2ZXhpbmcgcXVlc3Rpb25zIGlu dm9sdmUgbGliYzUgdnMgbGliYzYgdnMgZ2xpYmMgdnMKKyAgIGdsaWJjMiAoQyBsaWJyYXJpZXMp LCBnY2MgdnMgZWdjcyB2cyBsY2MgKGNvbXBpbGVycyksIHBsdXMgdXNpbmcgb3IKKyAgIGF2b2lk aW5nIGZlYXR1cmVzIHRoYXQgd2VyZSBhZGRlZCBpbiBhIGNlcnRhaW4gdmVyc2lvbiBvZiBMaW51 eCBvciBhCisgICBsaWJyYXJ5IG9yIGEgZGlzdHJpYnV0aW9uLCBhbmQgYXJlIG5vdCBhdmFpbGFi bGUgaW4gb3RoZXJzLiBBcyBvZgorICAgQy1LZXJtaXQgOC4wLCB0aGVzZSBxdWVzdGlvbnMgc2hv dWxkIGJlIHJlc29sdmVkIGJ5IHRoZSAibGludXgiCisgICBtYWtlZmlsZSB0YXJnZXQgaXRzZWxm LCB3aGljaCBkb2VzIGEgYml0IG9mIGxvb2tpbmcgYXJvdW5kIHRvIHNlZQorICAgd2hhdCdzIHdo YXQsIGFuZCB0aGVuIHNldHMgdGhlIGFwcHJvcHJpYXRlIENGTEFHUy4KKworMy4zLjIuIFByb2Js ZW1zIHdpdGggU2VyaWFsIERldmljZXMgaW4gTGludXgKKworICAgWyBbMzAyXVRvcCBdIFsgWzMw M11Db250ZW50cyBdIFsgWzMwNF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzA1XU5leHQgXQorICAg WyBbMzA2XVByZXZpb3VzIF0KKworICAgICBBbHNvIHNlZTogIm1hbiBzZXRzZXJpYWwiLCAibWFu IGlycXR1bmUiLgorICAgICBBbmQ6IFszMDddU2VjdGlvbnMgMy4wLCBbMzA4XTYsIFszMDldNywg YW5kIFszMTBdOCBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgIE5PVEU6IFJlZCBIYXQgTGludXgg Ny4yIGFuZCBsYXRlciBpbmNsdWRlIGEgbmV3IEFQSSB0aGF0IGFsbG93cworICAgICBzZXJpYWwt cG9ydCBhcmJpdHJhdGlvbiBieSBub24tc2V0dWlkL2dpZCBwcm9ncmFtcy4gVGhpcyBBUEkgaGFz IG5vdAorICAgICB5ZXQgYmVlbiBhZGRlZCB0byBDLUtlcm1pdC4gSWYgQy1LZXJtaXQgaXMgdG8g YmUgdXNlZCBmb3IgZGlhbGluZworICAgICBvdXQgb24gUmVkIEhhdCA3LjIgb3IgbGF0ZXIsIGl0 IG11c3Qgc3RpbGwgYmUgaW5zdGFsbGVkIGFzIGRlc2NyaWJlZAorICAgICBpbiBpbiBTZWN0aW9u cyBbMzExXTEwIGFuZCBbMzEyXTExIG9mIHRoZSBbMzEzXUluc3RhbGxhdGlvbgorICAgICBJbnN0 cnVjdGlvbnMuCisKKyAgIERvbid0IGV4cGVjdCBpdCB0byBiZSBlYXN5LiBRdWVyaWVzIGxpa2Ug dGhlIGZvbGxvd2luZyBhcmUgcG9zdGVkIHRvCisgICB0aGUgTGludXggbmV3c2dyb3VwcyBhbG1v c3QgZGFpbHk6CisKKyAgICAgUHJvYmxlbSBvZiBhIG1ham9yIGtpbmQgd2l0aCBteSBDb21wYXEg UHJlc2FyaW8gMTgwNSBpbiB0aGUgc2Vuc2UKKyAgICAgdGhhdCB0aGUgcG5wZHVtcCBkb2Vzbid0 IGZpbmQgdGhlIG1vZGVtIGFuZCB0aGUgY29uZmlndXJhdGlvbiB0ZWxscworICAgICBtZSB0aGF0 IHRoZSBtb2RlbSBpcyBidXN5IHdoZW4gSSBzZXQgZXZlcnl0aGluZyBieSBoYW5kIQorCisgICAg IEkgaGF2ZSA8c29tZSByZWNlbnQgU3VTRSBkaXN0cmlidXRpb24+LCBrZXJuZWwgMi4wLjM1LiBV c2luZyB0aGUKKyAgICAgQ29tcGFxIHRlbGxzIG1lIHRoYXQgdGhlIG1vZGVtICh3aGljaCBpcyBp bnRlcm5hbCkgaXMgb24gQ09NMiwgd2l0aAorICAgICB0aGUgdXN1YWwgSVJRIGFuZCBwb3J0IG51 bWJlcnMuIFJ1bm5pbmcgdmFyaW91cyBXaW5kb3dzIGRpYWdub3N0aWNzCisgICAgIHNob3cgbWUg QVQtc3R5bGUgY29tbWFuZHMgZXhjaGFuZ2VkIHNvIEkgaGF2ZSBubyByZWFzb24gdG8gYmVsaWV2 ZQorICAgICB0aGF0IGl0IGlzIGEgV2lubW9kZW0uIEFsc28sIHRoZSBkaWFnbm9zdGljcyB1bmRl ciBXaW45OCB0ZWxsIG1lCisgICAgIHRoYXQgSSBhbSB0YWxraW5nIHRvIGFuIE5TIDE2NTUwQU4u CisKKyAgIFtFZGl0b3IncyBub3RlOiBUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQg aXNuJ3QgYSBXaW5tb2RlbS5dCisKKyAgICAgVW5kZXIgTGludXgsIG5vIGpveSB0cnlpbmcgdG8g dGFsayB0byB0aGUgbW9kZW0gb24gL2Rldi9jdWExIHdoZXRoZXIKKyAgICAgdmlhIG1pbmljb20s IGtwcHAsIG9yIGNoYXQ7IGtwcHAgYXQgbGVhc3QgdGVsbHMgbWUgdGhhdCB0Y2dldGF0dHIoKQor ICAgICBmYWlsZWQuCisKKyAgICAgVXNhZ2Ugb2Ygc2V0c2VyaWFsOgorCisgIHNldHNlcmlhbCAv ZGV2L2N1YTEgcG9ydCAweDJGOCBpcnEgMyBhdXRvY29uZmlnCisgIHNldHNlcmlhbCAtZyAvZGV2 L2N1YTEKKworICAgICB0ZWxscyBtZSB0aGF0IHRoZSB1YXJ0IGlzICd1bmtub3duJy4gSSBoYXZl IHRyaWVkIHNldHRpbmcgdGhlIFVBUlQKKyAgICAgbWFudWFsbHkgdmlhLiBzZXRzZXJpYWwgdG8g MTY1NTBBLCAxNjU1MCwgYW5kIHRoZSBvdGhlciBvbmUgKDg1NTA/KQorICAgICAoSSBkaWRuJ3Qg dHJ5IDE2NTQwKS4gTm9uZSBvZiB0aGVzZSBtYW51YWwgc2V0dGluZ3MgcmVzdWx0ZWQgaW4gYW55 CisgICAgIHN1Y2Nlc3MuCisKKyAgICAgQSBsb29rIGF0IHBhc3QgYXJ0aWNsZXMgbGVhZHMgbWUg dG8gaW52ZXN0aWdhdGUgUE5QIGlzc3VlcyBieQorICAgICBjYWxsaW5nIHBucGR1bXAgYnV0IHBu cGR1bXAgcmV0dXJucyAibm8gYm9hcmRzIGZvdW5kIi4gSSBoYXZlIGxvb2tlZAorICAgICBhcm91 bmQgb24gbXkgQklPUyAoUGhvZW5peCkgYW5kIHRoZXJlIGlzIG5vdCBtdWNoIGV2aWRlbmNlIG9m IGl0CisgICAgIGJlaW5nIFBOUCBhd2FyZS4gSG93ZXZlciBmb3Igd2hhdCBpdCBjYWxscyAiU2Vy aWFsIHBvcnQgQSIsIGl0CisgICAgIG9mZmVycyBhIGNob2ljZSBvZiBBdXRvLCBEaXNhYmxlZCBv ciBNYW51YWwgc2V0dGluZ3MgKGN1cnJlbnRseSBzZXQKKyAgICAgdG8gQXV0byksIGJ1dCB1c2lu ZyB0aGUgQklPUyBpbnRlcmZhY2UgSSB0cmllZCB0byBjaGFuZ2UgdG8gJ21hbnVhbCcKKyAgICAg YW5kIHNhdyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZmZlcmVkIHRvIGJlIHdlcmUgMHgzRjggYW5k IElSUSA0CisgICAgIChDT00xKS4gVGhlIEJJT1MgbWVudXMgZGlkIG5vdCBnaXZlIG1lIGFueSBj aGFuY2UgdG8gY29uZmlndXJlIENPTTIKKyAgICAgb3IgYW55ICJtb2RlbSIuIEkgZW5kZWQgdXAg bm90IHNhdmluZyBhbnkgQklPUyBjaGFuZ2VzIGluIHRoZSBjb3Vyc2UKKyAgICAgb2YgbXkgaW52 ZXN0aWdhdGlvbnMuCisKKyAgIFlvdSBjYW4gYWxzbyBmaW5kIG91dCBhIGZhaXIgYW1vdW50IGFi b3V0IHlvdXIgUEMncyBoYXJkd2FyZQorICAgY29uZmlndXJhdGlvbiBpbiB0aGUgdGV4dCBmaWxl cyBpbiAvcHJvYywgZS5nLjoKKworICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgICAgICAgIDAg U2VwICA0IDE0OjAwIC9wcm9jL2RldmljZXMKKyAgLXItLXItLXItLSAgICAxIHJvb3QgICAgICAg ICAgICAwIFNlcCAgNCAxNDowMCAvcHJvYy9pbnRlcnJ1cHRzCisgIC1yLS1yLS1yLS0gICAgMSBy b290ICAgICAgICAgICAgMCBTZXAgIDQgMTQ6MDAgL3Byb2MvaW9wb3J0cworICAtci0tci0tci0t ICAgIDEgcm9vdCAgICAgICAgICAgIDAgU2VwICA0IDE0OjAwIC9wcm9jL3BjaQorCisgICBGcm9t IHRoZSBkaXJlY3RvcnkgbGlzdGluZyB0aGV5IGxvb2sgbGlrZSBlbXB0eSBmaWxlcywgYnV0IGlu IGZhY3QgdGhleQorICAgYXJlIHRleHQgZmlsZXMgdGhhdCB5b3UgImNhdCI6CisKKyQgY2F0IC9w cm9jL3BjaQorICAgQnVzICAwLCBkZXZpY2UgIDE0LCBmdW5jdGlvbiAgMDoKKyAgICAgU2VyaWFs IGNvbnRyb2xsZXI6IFVTIFJvYm90aWNzLzNDb20gNTZLIEZheE1vZGVtIE1vZGVsIDU2MTAgKHJl diAxKS4KKyAgICAgICBJUlEgMTAuCisgICAgICAgSS9PIGF0IDB4MTA1MCBbMHgxMDU3XS4KKwor JCBzZXRzZXJpYWwgLWcgL2Rldi90dHlTNAorL2Rldi90dHlTNCwgVUFSVDogMTY1NTBBLCBQb3J0 OiAweDEwNTAsIElSUTogMTAKKworJCBjYXQgL3Byb2MvaW9wb3J0cworMTA1MC0xMDU3IDogVVMg Um9ib3RpY3MvM0NvbSA1NksgRmF4TW9kZW0gTW9kZWwgNTYxMAorICAgMTA1MC0xMDU3IDogc2Vy aWFsKGF1dG8pCisKKyQgY2F0IC9wcm9jL2ludGVycnVwdHMKKyAgICAgICAgICAgIENQVTAKKyAg IDA6ICAgIDcwMzc1MTUgICAgICAgICAgWFQtUElDICB0aW1lcgorICAgMTogICAgICAgICAgMiAg ICAgICAgICBYVC1QSUMgIGtleWJvYXJkCisgICAyOiAgICAgICAgICAwICAgICAgICAgIFhULVBJ QyAgY2FzY2FkZQorICAgNDogICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIHNlcmlhbAorICAg ODogICAgICAgICAgMSAgICAgICAgICBYVC1QSUMgIHJ0YworICAgOTogICAgIDIwOTgxMSAgICAg ICAgICBYVC1QSUMgIHVzYi11aGNpLCBldGgwCisgIDE0OiAgICAgMjgyMDE1ICAgICAgICAgIFhU LVBJQyAgaWRlMAorICAxNTogICAgICAgICAgNiAgICAgICAgICBYVC1QSUMgIGlkZTEKKworICAg V2F0Y2ggb3V0IGZvciBQQ0ksIFBDTUNJQSBhbmQgUGx1Zy1uLVBsYXkgZGV2aWNlcywgV2lubW9k ZW1zLCBhbmQgdGhlCisgICBsaWtlIChzZWUgY2F1dGlvbnMgaW4gWzMxNF1TZWN0aW9uIDMuMCBM aW51eCBzdXBwb3J0cyBQbHVnLW4tUGxheQorICAgZGV2aWNlcyB0byBzb21lIGRlZ3JlZSB2aWEg dGhlIGlzYXBucCBhbmQgcG5wZHVtcCBwcm9ncmFtczsgcmVhZCB0aGUKKyAgIG1hbiBwYWdlcyBm b3IgdGhlbS4gKElmIHlvdSBkb24ndCBoYXZlIHRoZW0sIGxvb2sgb24geW91ciBpbnN0YWxsYXRp b24KKyAgIENEIGZvciBpc2FwbnB0b29sIG9yIGRvd25sb2FkIGl0IGZyb20gc3Vuc2l0ZSBvciBh IHN1bnNpdGUgbWlycm9yIG9yCisgICBvdGhlciBwb2xpdGljYWxseSBjb3JyZWN0IGxvY2F0aW9u IGR1IGpvdXIpLgorCisgICBQQ0kgbW9kZW1zIGRvIG5vdCB1c2Ugc3RhbmRhcmQgQ09NIHBvcnQg YWRkcmVzc2VzLiBUaGUgSS9PIGFkZHJlc3MgYW5kCisgICBJUlEgYXJlIGFzc2lnbmVkIGJ5IHRo ZSBCSU9TLiBBbGwgeW91IG5lZWQgdG8gZG8gdG8gZ2V0IG9uZSB3b3JraW5nLAorICAgZmluZCBv dXQgdGhlIEkvTyBhZGRyZXNzIGFuZCBpbnRlcnJ1cHQgbnVtYmVyIHdpdGggKGFzIHJvb3QpICJs c3BjaSAtdgorICAgfCBtb3JlIiBhbmQgdGhlbiBnaXZlIHRoZSByZXN1bHRpbmcgYWRkcmVzcyBh bmQgaW50ZXJydXB0IG51bWJlciB0bworICAgc2V0c2VyaWFsLgorCisgICBFdmVuIHdoZW4geW91 IGhhdmUgYSByZWFsIHNlcmlhbCBwb3J0LCBhbHdheXMgYmUgd2FyeSBvZiBpbnRlcnJ1cHQKKyAg IGNvbmZsaWN0cyBhbmQgc2ltaWxhciBQQyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGlzc3Vlczog YSBQQyBpcyBub3QgYQorICAgcmVhbCBjb21wdXRlciBsaWtlIG90aGVyIFVuaXggd29ya3N0YXRp b25zIC0tIGl0IGlzIGdlbmVyYWxseSBwaWVjZWQKKyAgIHRvZ2V0aGVyIGZyb20gd2hhdGV2ZXIg cmFuZG9tIGNvbXBvbmVudHMgd2VyZSB0aGUgYmVzdCBiYXJnYWluIG9uIHRoZQorICAgY29tbW9k aXR5IG1hcmtldCB0aGUgd2VlayBpdCB3YXMgYnVpbHQuIE9uY2UgaXQncyBhc3NlbWJsZWQgYW5k IGJveGVkLAorICAgbm90IGV2ZW4gdGhlIG1hbnVmYWN0dXJlciB3aWxsIHJlbWVtYmVyIHdoYXQg aXQncyBtYWRlIG9mIG9yIGhvdyBpdCB3YXMKKyAgIHB1dCB0b2dldGhlciBiZWNhdXNlIHRoZXkn dmUgbW92ZWQgb24gdG8gYSBuZXcgbW9kZWwuIFRoZWlyIGpvYiBpcyB0bworICAgZ2V0IGl0IChi YXJlbHkpIHdvcmtpbmcgd2l0aCBXaW5kb3dzOyBmb3IgTGludXggYW5kIG90aGVyIE9TJ3MgeW91 IGFyZQorICAgb24geW91ciBvd24uCisKKyAgICJzZXQgbGluZSAvZGV2L21vZGVtIiBvciAic2V0 IGxpbmUgL2Rldi90dHlTMiIsIGV0YywgcmVzdWx0cyBpbiBhbgorICAgZXJyb3IsICIvZGV2L21v ZGVtIGlzIG5vdCBhIHR0eSIuIENhdXNlIHVua25vd24sIGJ1dCBvYnZpb3VzbHkgYSBkcml2ZXIK KyAgIGlzc3VlLCBub3QgYSBLZXJtaXQgb25lIChLZXJtaXQgdXNlcyAiaXNhdHR5KCkiIHRvIGNo ZWNrIHRoYXQgdGhlCisgICBkZXZpY2UgaXMgYSB0dHksIHNvIGl0IGtub3dzIGl0IHdpbGwgYmUg YWJsZSB0byBpc3N1ZSBhbGwgdGhlCisgICB0dHktcmVsYXRlZCBpb2N0bCdzIG9uIGl0LCBsaWtl IHNldHRpbmcgdGhlIHNwZWVkICYgZmxvdyBjb250cm9sKS4gVHJ5CisgICBhIGRpZmZlcmVudCBu YW1lIChpLmUuIGRyaXZlcikgZm9yIHRoZSBzYW1lIHBvcnQsIGUuZy4gInNldCBsaW5lCisgICAv ZGV2L2N1YTIiIG9yIHdoYXRldmVyLgorCisgICBUbyBmaW5kIHdoYXQgc2VyaWFsIHBvcnRzIHdl cmUgcmVnaXN0ZXJlZCBhdCB0aGUgbW9zdCByZWNlbnQgc3lzdGVtCisgICBib290LCB0eXBlIChh cyByb290KTogImdyZXAgdHR5IC92YXIvbG9nL2RtZXNnIi4KKworICAgInNldCBtb2RlbSB0eXBl IHh4eCIgKHdoZXJlIHh4eCBpcyB0aGUgbmFtZSBvZiBhIG1vZGVtKSBmb2xsb3dlZCBieQorICAg InNldCBsaW5lIC9kZXYvbW9kZW0iIG9yICJzZXQKKyAgIGxpbmUgL2Rldi90dHlTMiIsIGV0Yywg aGFuZ3MgKGJ1dCBjYW4gYmUgaW50ZXJydXB0ZWQgd2l0aCBDdHJsLUMpLgorICAgRXhwZXJpbWVu dGF0aW9uIHNob3dzIHRoYXQgaWYgdGhlIG1vZGVtIGlzIGNvbmZpZ3VyZWQgdG8gYWx3YXlzIGFz c2VydAorICAgY2FycmllciAoJkMwKSB0aGUgc2FtZSBjb21tYW5kIGRvZXMgbm90IGhhbmcuIEFn YWluLCBhIGRyaXZlciBpc3N1ZS4KKyAgIFVzZSAvZGV2L2N1YTIgKG9yIHdoYXRldmVyKSBpbnN0 ZWFkLiAoT3Igbm90IC0tIGhvcGVmdWxseSBub25lIG9mIHRoZXNlCisgICBzeW1wdG9tcyBvY2N1 cnMgaW4gQy1LZXJtaXQgNy4wIG9yIGxhdGVyLikKKworICAgInNldCBsaW5lIC9kZXYvY3VhMCIg cmVwb3J0cyAiRGV2aWNlIGlzIGJ1c3kiLCBidXQgInNldCBsaW5lCisgICAvZGV2L3R0eVMwIiB3 b3JrcyBPSy4KKworICAgSW4gc2hvcnQ6IElmIHRoZSBjdWEgZGV2aWNlIGRvZXNuJ3Qgd29yaywg dHJ5IHRoZSBjb3JyZXNwb25kaW5nIHR0eVMKKyAgIGRldmljZS4gSWYgdGhlIHR0eVMgZGV2aWNl IGRvZXNuJ3Qgd29yaywgdHJ5IHRoZSBjb3JyZXNwb25kaW5nIGN1YQorICAgZGV2aWNlIC0tIGJ1 dCBub3RlIHRoYXQgTGludXggZGV2ZWxvcGVycyBkbyBub3QgcmVjb21tZW5kIHRoaXMsIGFuZCBh cmUKKyAgIHBoYXNpbmcgb3V0IHRoZSBjdWEgZGV2aWNlcy4gRnJvbSAvdXNyL2RvYy9mYXEvaG93 dG8vU2VyaWFsLUhPV1RPOgorCisgICAxMi40LiBXaGF0J3MgVGhlIFJlYWwgRGlmZmVyZW5jZSBC ZXR3ZWVuIHRoZSAvZGV2L2N1YU4gQW5kIC9kZXYvdHR5U04KKyAgICAgICAgICBEZXZpY2VzPwor ICAgICAgICAgIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlIHdheSB0aGF0IHRoZSBkZXZpY2Vz IGFyZSBvcGVuZWQuIFRoZQorICAgICAgICAgIGRpYWxpbiBkZXZpY2VzIC9kZXYvdHR5U04gYXJl IG9wZW5lZCBpbiBibG9ja2luZyBtb2RlLCB1bnRpbCBDRAorICAgICAgICAgIGlzIGFzc2VydGVk IChpZSBzb21lb25lIGNvbm5lY3RzKS4gU28sIHdoZW4gc29tZW9uZSB3YW50cyB0byB1c2UKKyAg ICAgICAgICB0aGUgL2Rldi9jdWFOIGRldmljZSwgdGhlcmUgaXMgbm8gY29uZmxpY3Qgd2l0aCBh IHByb2dyYW0KKyAgICAgICAgICB3YXRjaGluZyB0aGUgL2Rldi90dHlTTiBkZXZpY2UgKHVubGVz cyBzb21lb25lIGlzIGNvbm5lY3RlZCBvZgorICAgICAgICAgIGNvdXJzZSkuIFRoZSBtdWx0aXBs ZSAvZGV2IGVudHJpZXMsIGFsbG93IG9wZXJhdGlvbiBvZiB0aGUgc2FtZQorICAgICAgICAgIHBo eXNpY2FsIGRldmljZSB3aXRoIGRpZmZlcmVudCBvcGVyYXRpbmcgY2hhcmFjdGVyaXN0aWNzLiBJ dAorICAgICAgICAgIGFsc28gYWxsb3dzIHN0YW5kYXJkIGdldHR5IHByb2dyYW1zIHRvIGNvZXhp c3Qgd2l0aCBhbnkgb3RoZXIKKyAgICAgICAgICBzZXJpYWwgcHJvZ3JhbSwgd2l0aG91dCB0aGUg Z2V0dHkgYmVpbmcgcmV0cm9maXR0ZWQgd2l0aCBsb2NraW5nCisgICAgICAgICAgb2Ygc29tZSBz b3J0LiBJdCdzIGVzcGVjaWFsbHkgdXNlZnVsIHNpbmNlIHN0YW5kYXJkIFVuaXgga2VybmVsCisg ICAgICAgICAgZmlsZSBsb2NraW5nLCBhbmQgVVVDUCBsb2NraW5nIGFyZSBib3RoIGFkdmlzb3J5 IGFuZCBub3QKKyAgICAgICAgICBtYW5kYXRvcnkuCisKKyAgIEl0IHdhcyBkaXNjb3ZlcmVkIGR1 cmluZyBkZXZlbG9wbWVudCBvZiBDLUtlcm1pdCA3LjAgdGhhdCByZWJ1aWxkaW5nCisgICBDLUtl cm1pdCB3aXRoIC1ETk9DT1RGTUMgKE5vIENsb3NlL09wZW4gVG8gRm9yY2UgTW9kZSBDaGFuZ2Up IG1hZGUgdGhlCisgICBhZm9yZW1lbnRpb25lZCBwcm9ibGVtIHdpdGggL2Rldi90dHlTMCBnbyBh d2F5LiBJdCBpcyBub3QgeWV0IGNsZWFyLAorICAgaG93ZXZlciwgd2hhdCBpdHMgYWZmZWN0IG1p Z2h0IGJlIG9uIHRoZSAvZGV2L2N1YSogZGV2aWNlcy4gQXMgb2YgMTkKKyAgIE1hcmNoIDE5OTgs IHRoaXMgb3B0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBDRkxBR1MgaW4gdGhlIG1ha2VmaWxl CisgICBlbnRyaWVzIGZvciBMaW51eCAoIm1ha2UgbGludXgiKS4KKworICAgTm90ZSB0aGF0IHRo ZSBjdWEgZGV2aWNlIGlzIG5vdyAiZGVwcmVjYXRlZCIsIGFuZCBuZXcgZWRpdGlvbnMgb2YgTGlu dXgKKyAgIHdpbGwgcGhhc2UgKGhhdmUgcGhhc2VkKSBpdCBvdXQgaW4gZmF2b3Igb2YgdGhlIHR0 eVMgZGV2aWNlLiBTZWUgKGlmCisgICBpdCdzIHN0aWxsIHRoZXJlKToKKworICBbMzE1XWh0dHA6 Ly9saW51eHd3dy5kYi5lcmF1LmVkdS9tYWlsX2FyY2hpdmVzL2xpbnV4LWtlcm5lbC9NYXJfOTgv MTQ0MS5odG1sCisKKyAgIChubywgb2YgY291cnNlIGl0IGlzbid0OyB5b3UnbGwgaGF2ZSB0byB1 c2UgeW91ciBpbWFnaW5hdGlvbikuIE9uZSB1c2VyCisgICByZXBvcnRlZCB0aGF0IEMtS2VybWl0 IDcuMCwgd2hlbiBidWlsdCB3aXRoIGVnY3MgMS4xLjIgYW5kIHJ1biBvbiBMaW51eAorICAgMi4y LjYgd2l0aCBnbGliYyAyLjEgKGhhcmR3YXJlIHVua25vd24gYnV0IHByb2JhYmx5IGEgUEMpIGR1 bXBzIGNvcmUKKyAgIHdoZW4gZ2l2ZW4gYSAic2V0IGxpbmUgL2Rldi90dHlTMSIgY29tbWFuZC4g V2hlbiByZWJ1aWx0IHdpdGggZ2NjLCBpdAorICAgd29ya3MgZmluZS4KKworICAgQWxsIHZlcnNp b25zIG9mIExpbnV4IHNlZW0gdG8gaGF2ZSB0aGUgZm9sbG93aW5nIGRlZmljaWVuY3k6IFdoZW4g YQorICAgbW9kZW0gY2FsbCBpcyBodW5nIHVwIGFuZCBDRCBkcm9wcywgS2VybWl0IGNhbiBubyBs b25nZXIgcmVhZCB0aGUgbW9kZW0KKyAgIHNpZ25hbHM7IFNIT1cgQ09NTVVOSUNBVElPTlMgc2F5 cyAiTW9kZW0gc2lnbmFscyBub3QgYXZhaWxhYmxlIi4gVGhlCisgICBUSU9DTUdFVCBpb2N0bCgp IHJldHVybnMgLTEgd2l0aCBlcnJubyA1ICgiSS9PIEVycm9yIikuCisKKyAgIFRoZSBMaW51eCB2 ZXJzaW9uIG9mIFBPU0lYIHRjc2VuZGJyZWFrKCksIHdoaWNoIGlzIHVzZWQgYnkgQy1LZXJtaXQg dG8KKyAgIHNlbmQgcmVndWxhciAoMjc1bXNlYykgYW5kIGxvbmcgKDEuNXNlYykgQlJFQUsgc2ln bmFscywgYXBwZWFycyB0bworICAgaWdub3JlIGl0cyBhcmd1bWVudCAoZGVzcGl0ZSBpdHMgZGVz Y3JpcHRpb24gaW4gdGhlIG1hbiBwYWdlIGFuZCBpbmZvCisgICB0b3BpYyksIGFuZCBhbHdheXMg c2VuZHMgYSByZWd1bGFyIDI3NW1zZWMgQlJFQUsuIFRoaXMgaGFzIGJlZW4KKyAgIG9ic2VydmVk IGluIExpbnV4IHZlcnNpb25zIHJhbmdpbmcgZnJvbSBEZWJpYW4gMi4xIHRvIFJlZCBIYXQgNy4x LgorCiszLjMuMy4gVGVybWluYWwgRW11bGF0aW9uIGluIExpbnV4CisKKyAgIFsgWzMxNl1Ub3Ag XSBbIFszMTddQ29udGVudHMgXSBbIFszMThdU2VjdGlvbiBDb250ZW50cyBdIFsgWzMxOV1OZXh0 IF0KKyAgIFsgWzMyMF1QcmV2aW91cyBdCisKKyAgIEMtS2VybWl0IGlzIG5vdCBhIHRlcm1pbmFs IGVtdWxhdG9yLiBGb3IgYSBicmllZiBleHBsYW5hdGlvbiBvZiB3aHkKKyAgIG5vdCwgc2VlIFsz MjFdU2VjdGlvbiAzLjAuNS4gRm9yIGEgZnVsbGVyIGV4cGxhbmF0aW9uLCBbMzIyXUNsSUNLIEhF UkUuCisKKyAgIEluIFVuaXgsIHRlcm1pbmFsIGVtdWxhdGlvbiBpcyBzdXBwbGllZCBieSB0aGUg V2luZG93IGluIHdoaWNoIHlvdSBydW4KKyAgIEtlcm1pdDogdGhlIHJlZ3VsYXIgY29uc29sZSBz Y3JlZW4sIHdoaWNoIHByb3ZpZGVzIExpbnV4IENvbnNvbGUKKyAgICJlbXVsYXRpb24iIHZpYSB0 aGUgImNvbnNvbGUiIHRlcm1jYXAgZW50cnksIG9yIHVuZGVyIFgtV2luZG93cyBpbiBhbgorICAg eHRlcm0gd2luZG93LCB3aGljaCBnaXZlcyBWVHh4eCBlbXVsYXRpb24uIEFuIHh0ZXJtIHRoYXQg aW5jbHVkZXMgY29sb3IKKyAgIEFOU0kgYW5kIFZUMjIwIGVtdWxhdGlvbiBpcyBhdmFpbGFibGUg d2l0aCBYZnJlZTg2OgorCisgIFszMjNdaHR0cDovL2RpY2tleS5oaXMuY29tL3h0ZXJtL3h0ZXJt Lmh0bWwKKworICAgQmVmb3JlIHN0YXJ0aW5nIEMtS2VybWl0IGluIGFuIHh0ZXJtIHdpbmRvdywg eW91IG1pZ2h0IG5lZWQgdG8gdGVsbCB0aGUKKyAgIHh0ZXJtIHdpbmRvdydzIHNoZWxsIHRvICJz dHR5IHNhbmUiLgorCisgICBUbyBzZXQgdXAgeW91ciBQQyBjb25zb2xlIGtleWJvYXJkIHRvIHNl bmQgVlQyMjAga2V5IHNlcXVlbmNlcyB3aGVuCisgICB1c2luZyBDLUtlcm1pdCBhcyB5b3VyIGNv bW11bmljYXRpb25zIHByb2dyYW0gaW4gYW4gWCB0ZXJtaW5hbCB3aW5kb3cKKyAgIChpZiBpdCBk b2Vzbid0IGFscmVhZHkpLCBjcmVhdGUgYSBmaWxlIHNvbWV3aGVyZSAoZS5nLiBpbiAvcm9vdC8p CisgICBjYWxsZWQgLnhtb2RtYXByYywgY29udGFpbmluZyBzb21ldGhpbmcgbGlrZSB0aGUgZm9s bG93aW5nOgorCisgIGtleWNvZGUgNzcgID0gS1BfRjEgICAgICAgISBOdW0gTG9jayAgICAgPT4g REVDIEdvbGQgKFBGMSkKKyAga2V5Y29kZSAxMTIgPSBLUF9GMiAgICAgICAhIEtleXBhZCAvICAg ICA9PiBERUMgUEYxCisgIGtleWNvZGUgNjMgID0gS1BfRjMgICAgICAgISBLZXlwYWQgKiAgICAg PT4gREVDIFBGMworICBrZXljb2RlIDgyICA9IEtQX0Y0ICAgICAgICEgS2V5cGFkIC0gICAgID0+ IERFQyBQRjQKKyAga2V5Y29kZSAxMTEgPSBIZWxwICAgICAgICAhIFByaW50IFNjcmVlbiA9PiBE RUMgSGVscAorICBrZXljb2RlIDc4ICA9IEYxNiAgICAgICAgICEgU2Nyb2xsIExvY2sgID0+IERF QyBEbworICBrZXljb2RlIDExMCA9IEYxNiAgICAgICAgICEgUGF1c2UgICAgICAgID0+IERFQyBE bworICBrZXljb2RlIDEwNiA9IEZpbmQgICAgICAgICEgSW5zZXJ0ICAgICAgID0+IERFQyBGaW5k CisgIGtleWNvZGUgOTcgID0gSW5zZXJ0ICAgICAgISBIb21lICAgICAgICAgPT4gREVDIEluc2Vy dAorICBrZXljb2RlIDk5ICA9IDB4MTAwMGZmMDAgICEgUGFnZSBVcCAgICAgID0+IERFQyBSZW1v dmUKKyAga2V5Y29kZSAxMDcgPSBTZWxlY3QgICAgICAhIERlbGV0ZSAgICAgICA9PiBERUMgU2Vs ZWN0CisgIGtleWNvZGUgMTAzID0gUGFnZV9VcCAgICAgISBFbmQgICAgICAgICAgPT4gREVDIFBy ZXYgU2NyZWVuCisgIGtleWNvZGUgMjIgID0gRGVsZXRlICAgICAgISBCYWNrc3BhY2Ugc2VuZHMg RGVsZXRlICgxMjcpCisKKyAgIFRoZW4gcHV0ICJ4bW9kbWFwIGZpbGVuYW1lIiBpbiB5b3VyIC54 aW5pdHJjIGZpbGUgKGluIHlvdXIgbG9naW4KKyAgIGRpcmVjdG9yeSksIGUuZy4KKworICB4bW9k bWFwIC9yb290Ly54bW9kbWFwcmMKKworICAgT2YgY291cnNlIHlvdSBjYW4gbW92ZSB0aGluZ3Mg YXJvdW5kLiBVc2UgdGhlIHhldiBwcm9ncmFtIHRvIGZpbmQgb3V0CisgICBrZXkgY29kZXMuCisK KyAgIENvbnNvbGUtbW9kZSBrZXlzIGFyZSBtYXBwZWQgc2VwYXJhdGVseSB1c2luZyBsb2Fka2V5 cywgYW5kIGRpZmZlcmVudAorICAga2V5Y29kZXMgYXJlIHVzZWQuIEZpbmQgb3V0IHdoYXQgdGhl eSBhcmUgd2l0aCBzaG93a2V5LgorCisgICBGb3IgYSBtdWNoIG1vcmUgY29tcGxldGUgVlQyMjAv MzIwIGtleSBtYXBwaW5nIGZvciBbMzI0XVhmcmVlODYgeHRlcm0sCisgICBbMzI1XUNMSUNLIEhF UkUuCisKKzMuMy40LiBEYXRlcyBhbmQgVGltZXMKKworICAgWyBbMzI2XVRvcCBdIFsgWzMyN11D b250ZW50cyBdIFsgWzMyOF1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzI5XU5leHQgXQorICAgWyBb MzMwXVByZXZpb3VzIF0KKworICAgSWYgQy1LZXJtaXQncyBkYXRlLXRpbWUgKGUuZy4gYXMgc2hv d24gYnkgaXRzIERBVEUgY29tbWFuZCkgZGlmZmVycworICAgZnJvbSB0aGUgc3lzdGVtJ3MgZGF0 ZSBhbmQgdGltZToKKworICAgIGEuIE1ha2Ugc3VyZSB0aGUgbGliYyB0byB3aGljaCBLZXJtaXQg aXMgbGlua2VkIGlzIHNldCB0byBHTVQgb3IgaXMKKyAgICAgICBub3Qgc2V0IHRvIGFueSB0aW1l IHpvbmUuIFdhdGNoIG91dCBmb3IgbWl4ZWQgbGliYzUvbGliYzYgc3lzdGVtczsKKyAgICAgICBl YWNoIG11c3QgYmUgc2V0IGluZGVwZW5kZW50bHkuCisgICAgYi4gSWYgeW91IGhhdmUgY2hhbmdl ZCB5b3VyIFRaIGVudmlyb25tZW50IHZhcmlhYmxlLCBtYWtlIHN1cmUgaXQgaXMKKyAgICAgICBl eHBvcnRlZC4gVGhpcyBpcyBub3JtYWxseSBkb25lIGluIC9ldGMvcHJvZmlsZSBvciAvZXRjL1Ra LgorCiszLjMuNS4gU3RhcnR1cCBFcnJvcnMKKworICAgWyBbMzMxXVRvcCBdIFsgWzMzMl1Db250 ZW50cyBdIFsgWzMzM11TZWN0aW9uIENvbnRlbnRzIF0gWyBbMzM0XU5leHQgXQorICAgWyBbMzM1 XVByZXZpb3VzIF0KKworICAgQy1LZXJtaXQgc2hvdWxkIHdvcmsgb24gYWxsIHZlcnNpb25zIG9m IExpbnV4IGN1cnJlbnQgdGhyb3VnaCBNYXJjaAorICAgMjAwMywgcHJvdmlkZWQgaXQgd2FzIGJ1 aWx0IG9uIHRoZSBzYW1lIHZlcnNpb24geW91IGhhdmUsIHdpdGggdGhlIHNhbWUKKyAgIGxpYnJh cmllcyBhbmQgaGVhZGVyIGZpbGVzIChqdXN0IGdldCB0aGUgc291cmNlIGNvZGUgYW5kICJtYWtl IGxpbnV4IikuCisgICBCaW5hcmllcyB0ZW5kIG5vdCB0byB0cmF2ZWwgd2VsbCBmcm9tIG9uZSBM aW51eCBtYWNoaW5lIHRvIGFub3RoZXIsIGR1ZQorICAgdG8gdGhlaXIgbWFueSBkaWZmZXJlbmNl cy4gVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYSBwYXJ0aWN1bGFyCisgICBDLUtlcm1pdCBi aW5hcnkgd2lsbCBub3Qgc3RvcCB3b3JraW5nIGF0IGEgbGF0ZXIgZGF0ZSwgc2luY2UgTGludXgK KyAgIHRlbmRzIHRvIGNoYW5nZSBvdXQgZnJvbSB1bmRlciBpdHMgYXBwbGljYXRpb25zLiBJZiB0 aGF0IGhhcHBlbnMsCisgICByZWJ1aWxkIEMtS2VybWl0IGZyb20gc291cmNlLiBJZiBzb21ldGhp bmcgZ29lcyB3cm9uZyB3aXRoIHRoZSBidWlsZAorICAgcHJvY2VzcywgbG9vayBvbiB0aGUgWzMz Nl1DLUtlcm1pdCB3ZWJzaXRlIGZvciBhIG5ld2VyIHZlcnNpb24uIElmIHlvdQorICAgaGF2ZSB0 aGUgbGF0ZXN0IHZlcnNpb24sIHRoZW4gWzMzN11yZXBvcnQgdGhlIHByb2JsZW0gdG8gdXMuCisK KyAgIEluYWJpbGl0eSB0byB0cmFuc2ZlciBmaWxlcyBpbiBSZWQgSGF0IDcuMjogdGhlIHR5cGlj YWwgc3ltcHRvbSB3b3VsZAorICAgYmUgaWYgeW91IHN0YXJ0IEtlcm1pdCBhbmQgdGVsbCBpdCB0 byBSRUNFSVZFLCBpdCBmYWlscyByaWdodCBhd2F5IHdpdGgKKyAgICI/L2Rldi90dHk6IE5vIHN1 Y2ggZGV2aWNlIG9yIGFkZHJlc3MiIG9yICI/QmFkIGZpbGUgZGVzY3JpcHRvciIuIE9uZQorICAg cmVwb3J0IHNheXMgdGhpcyBpcyBiZWNhdXNlIG9mIGNzaCwgYW5kIGlmIHlvdSBjaGFuZ2UgeW91 ciBzaGVsbCB0bworICAgYmFzaCBvciBvdGhlciBzaGVsbCwgaXQgZG9lc24ndCBoYXBwZW4uIEFu b3RoZXIgcmVwb3J0IGNpdGUgYnVncyBpbiBSZWQKKyAgIEhhdCA3LjIgVGVsbmV0ZCAidmVyeSBz ZWxkb20gKGlmIGV2ZXIpIHByb3ZpZGluZyBhIGNvbnRyb2xsaW5nIHR0eSwgYW5kCisgICBsb3Rz IG9mIG90aGVyIHBlb3BsZSBwaWxlZCBvbiBzYXlpbmcgdGhleSBoYXZlIHRoZSBzYW1lIHByb2Js ZW0uIikgQQorICAgdGhpcmQgdGhlb3J5IGlzIHRoYXQgdGhpcyBoYXBwZW5zIG9ubHkgd2hlbiBM aW51eCBoYXMgYmVlbiBpbnN0YWxsZWQKKyAgIHdpdGhvdXQgInZpcnR1YWwgdGVybWluYWwgc3Vw cG9ydCIuCisKKyAgIEEgc2VhcmNoIG9mIFJlZEhhdCdzIGVycmF0YSBwYWdlcyBzaG93cyBhIGJ1 ZyBhZHZpc29yeSAoUkhCQS0yMDAxLTE1MykKKyAgIGlzc3VlZCAxMyBOb3ZlbWJlciAyMDAxLCBi dXQgdXBkYXRlZCA2IERlY2VtYmVyLCBhYm91dCB0aGlzIHNhbWUKKyAgIHN5bXB0b20gKGJ1dCB3 aXRoIHRjc2ggYW5kIGxvZ2luLikgU2VlbXMgdGhhdCBsb2dpbiB3YXMgbm90IGFsd2F5cworICAg YXNzaWduaW5nIGEgY29udHJvbGxpbmcgVFRZIGZvciB0aGUgc2Vzc2lvbiwgd2hpY2ggd291bGQg bWFrZSBtb3N0IHVzZQorICAgb2YgIi9kZXYvdHR5IiBzb21ld2hhdCBsZXNzIHRoYW4gdXNlZnVs LgorCisgIFszMzhdaHR0cDovL3d3dy5yZWRoYXQuY29tL3N1cHBvcnQvZXJyYXRhL1JIQkEtMjAw MS0xNTMuaHRtbAorCisgICBRdW90aW5nOiAiRHVlIHRvIHRlcm1pbmFsIGhhbmRsaW5nIHByb2Js ZW1zIGluIC9iaW4vbG9naW4sIHRjc2ggd291bGQKKyAgIG5vdCBmaW5kIHRoZSBjb250cm9sbGlu ZyB0ZXJtaW5hbCBjb3JyZWN0bHksIGFuZCBhIHNoZWxsIGluIHNpbmdsZSB1c2VyCisgICBtb2Rl IHdvdWxkIGV4aGliaXQgc3RyYW5nZSB0ZXJtaW5hbCBpbnB1dCBjaGFyYWN0ZXJpc3RpY3MuIFRo aXMgdXBkYXRlCisgICBmaXhlcyBib3RoIG9mIHRoZXNlIHByb2JsZW1zLiIKKworICAgU2luY2Ug dGhlIFJlZCBIYXQgNS4xIHJlbGVhc2UgKGNpcmNhIEF1Z3VzdCAxOTk4KSwgdGhlcmUgaGF2ZSBi ZWVuCisgICBudW1lcm91cyByZXBvcnRzIG9mIHByZWJ1aWx0IExpbnV4IGV4ZWN1dGFibGVzLCBh bmQgcGFydGljdWxhcmx5IHRoZQorICAgS2VybWl0IFJQTSBmb3IgUmVkIEhhdCBMaW51eCwgbm90 IHdvcmtpbmc7IGVpdGhlciBpdCB3b24ndCBzdGFydCBhdAorICAgYWxsLCBvciBpdCBnaXZlcyBl cnJvciBtZXNzYWdlcyBhYm91dCAidGVybWluYWwgdHlwZSB1bmtub3duIiBhbmQKKyAgIHJlZnVz ZXMgdG8gaW5pdGlhbGl6ZSBpdHMgY3Vyc2VzIHN1cHBvcnQuIFRoZSBmb2xsb3dpbmcgaXMgZnJv bSB0aGUKKyAgIFszMzldS2VybWl0IG5ld3Nncm91cDoKKworICAgICBGcm9tOiByY2hhbmRyYUBo YWw5MDAwLmJ1Zi5zZXJ2dGVjaC5jb20KKyAgICAgTmV3c2dyb3VwczogY29tcC5wcm90b2NvbHMu a2VybWl0Lm1pc2MKKyAgICAgU3ViamVjdDogUmVkIEhhdCBMaW51eC9JbnRlbCA1LjEgYW5kIG5j dXJzZXM6IHN1Z2dlc3Rpb25zCisgICAgIERhdGU6IDIyIEF1ZyAxOTk4IDE1OjU0OjQ2IEdNVAor ICAgICBPcmdhbml6YXRpb246IFZlcmlvIE5ldyBZb3JrCisgICAgIEtleXdvcmRzOiBSZWRIYXQg UlBNIDUuMQorCisgICAgIFNldmVyYWwgZmFjdG9ycyBjYW4gaW5mbHVlbmNlIHdoZXRoZXIgImxp bnV4IiBpcyByZWNvZ25pemVkIGFzIGEKKyAgICAgdGVybWluYWwgdHlwZSBvbiBtYW55IExpbnV4 IHN5c3RlbXMuCisKKyAgICAxLiBZb3VyIHByb2dyYW0sIG9yIHRoZSBsaWJyYXJpZXMgaXQgbGlu a2VkIHdpdGggKGlmIHN0YXRpY2FsbHkKKyAgICAgICBsaW5rZWQpLCBvciB0aGUgbGlicmFyaWVz IGl0IGR5bmFtaWNhbGx5IGxpbmtzIHdpdGggYXQgcnVudGltZSwgYXJlCisgICAgICAgbG9va2lu ZyBmb3IgYW4gZW50cnkgaW4gL2V0Yy90ZXJtY2FwIHRoYXQgaXNuJ3QgdGhlcmUuIChub3QgbGlr ZWx5LAorICAgICAgIGJ1dCBwb3NzaWJsZS4uLiBJIGJlbGlldmUgYnV0IGFtIG5vdCBjZXJ0YWlu IHRoYXQgdGhpcyBpcyBhIHZlcnkKKyAgICAgICBvbGQgcHJhY3RpY2UgaW4gdmVyeSBvbGQgW25d Y3Vyc2VzIGxpYnJhcnkgaW1wbGVtZW50YXRpb25zIHRvIHVzZSBhCisgICAgICAgc2luZ2xlIGZp bGUgZm9yIGFsbCB0ZXJtaW5hbCBkZXNjcmlwdGlvbnMuKQorICAgIDIuIFlvdXIgcHJvZ3JhbSwg b3IgdGhlIGxpYnJhcmllcy4uLmFyZSBsb29raW5nIGZvciBhIHRlcm1pbmZvIGZpbGUKKyAgICAg ICB0aGF0IGp1c3QgcGxhaW4gaXNuJ3QgdGhlcmUuIChhbHNvIG5vdCBzbyBsaWtlbHksIHNpbmNl IG1hbnkgcGVvcGxlCisgICAgICAgaW4gb3RoZXIgcmVjZW50IG1lc3NhZ2UgdGhyZWFkcyBzYWlk IHRoYXQgb3RoZXIgcHJvZ3JhbXMgd29yayBPSykuCisgICAgMy4gWW91ciBwcm9ncmFtLCBvciB0 aGUgbGlicmFyaWVzLi4uYXJlIGxvb2tpbmcgZm9yIGEgdGVybWluZm8gZmlsZQorICAgICAgIHRo YXQgaXMgc3RvcmVkIGF0IGEgcGF0aG5hbWUgdGhhdCBpc24ndCBleHBlY3RlZCBieSB5b3VyIHBy b2dyYW0sCisgICAgICAgdGhlIGxpYnJhcmllcy0tYW5kIHNvIG9uLiBJIGZvcmdvdCBpZiBJIHJl YWQgdGhpcyBpbiB0aGUgZXJyYXRhIFdlYgorICAgICAgIHBhZ2Ugb3Igd2hlcmUgZXhhY3RseSBJ IGRpc2NvdmVyZWQgdGhpcyAoTmV0c2NhcGUgaW5zdGFsbD8gQWNyb2JhdAorICAgICAgIGluc3Rh bGw/KSwgYnV0IGl0IG1heSBqdXN0IGJlIHRoYXQgb25lIGxpYmMgKGxldCdzIHNheSBmb3Igc2Fr ZSBvZgorICAgICAgIGFyZ3VtZW50LCBsaWJjNSwgYnV0IEkgZG9uJ3Qga25vdyB0aGlzIHRvIGJl IHRydWUpIGV4cGVjdHMgeW91cgorICAgICAgIHRlcm1pbmZvIHRvIGJlIGluIC91c3Ivc2hhcmUv dGVybWluZm8sIGFuZCB0aGUgb3RoZXIgKGxldCdzIHNheQorICAgICAgIGxpYmM2L2dsaWJjKSBl eHBlY3RzIC91c3IvbGliL3Rlcm1pbmZvLiBJIHJlbWVtYmVyIHRoYXQgdGhlCisgICAgICAgc3Bl Y2lmaWMgaW5zdHJ1Y3Rpb25zIGluIHRoaXMgYnVnZml4L3dvcmthcm91bmQgd2VyZSB0byBkbyB0 aGUKKyAgICAgICBmb2xsb3dpbmcgb3IgZXF1aXZhbGVudDoKKyAgY2QgL3Vzci9saWIKKyAgbG4g LXMgLi4vc2hhcmUvdGVybWluZm8gLi90ZXJtaW5mbworCisgICAgICAgb3I6CisgIGxuIC1zIC91 c3Ivc2hhcmUvdGVybWluZm8gL3Vzci9saWIvdGVybWluZm8KKworICAgICBTbyB3aGF0IHRoaXMg c2F5cyBpcyB0aGF0IHRoZSB0ZXJtaW5mbyBkYXRhYmFzZS9kaXJlY3Rvcnkgc3RydWN0dXJlCisg ICAgIGNhbiBiZSBhY2Nlc3NlZCBieSBlaXRoZXIgcGF0aC4gV2hlbiBzb21ldGhpbmcgZ29lcyB0 byByZWZlcmVuY2UKKyAgICAgL3Vzci9saWIvdGVybWluZm8sIHRoZSBzeW1saW5rIHJlZGlyZWN0 cyBpdCB0byBlc3NlbnRpYWxseQorICAgICAvdXNyL3NoYXJlL3Rlcm1pbmZvLCB3aGljaCBpcyB3 aGVyZSBpdCByZWFsbHkgcmVzaWRlcyBvbiB5b3VyCisgICAgIHN5c3RlbS4gSSBwZXJzb25hbGx5 IHByZWZlciB3aGVyZXZlciBwb3NzaWJsZSB0byB1c2UgcmVsYXRpdmUKKyAgICAgc3ltbGlua3Ms IGJlY2F1c2UgdGhleSBzdGlsbCBob2xkLCBtb3JlIG9mdGVuIHRoYW4gYnJlYWssIGFjcm9zcwor ICAgICBtb3VudCBwb2ludHMsIHBhcnRpY3VsYXJseSBORlMgbW91bnRzLCB3aGVyZSB0aGUgZGly ZWN0b3J5IHN0cnVjdHVyZQorICAgICBtYXkgYmUgZGlmZmVyZW50IG9uIHRoZSBkaWZmZXJlbnQg c3lzdGVtcy4KKworICAgRXZpZGVudGx5IHRoZSB0ZXJtaW5mbyBmaWxlIG1vdmVkIGJldHdlZW4g UmVkIEhhdCA1LjAgYW5kIDUuMSwgYnV0IFJlZAorICAgSGF0IGRpZCBub3QgaW5jbHVkZSBhIGxp bmsgdG8gbGV0IGFwcGxpY2F0aW9ucyBidWlsdCBwcmlvciB0byA1LjEgZmluZAorICAgaXQuIFVz ZXJzIHJlcG9ydGVkIHRoYXQgaW5zdGFsbGluZyB0aGUgbGluayBmaXhlcyB0aGUgcHJvYmxlbS4K KworMy4zLjYuIFRoZSBGdWxsc2NyZWVuIEZpbGUgVHJhbnNmZXIgRGlzcGxheQorCisgICBbIFsz NDBdVG9wIF0gWyBbMzQxXUNvbnRlbnRzIF0gWyBbMzQyXVNlY3Rpb24gQ29udGVudHMgXSBbCisg ICBbMzQzXVByZXZpb3VzIF0KKworICAgU3RhcnRpbmcgd2l0aCBuY3Vyc2VzIHZlcnNpb25zIGRh dGVkIDE5OTgtMTItMTIgKGFib3V0IGEgeWVhciBiZWZvcmUKKyAgIG5jdXJzZXMgNS4wKSwgbmN1 cnNlcyBzZXRzIHRoZSB0ZXJtaW5hbCBmb3IgYnVmZmVyZWQgaS9vLCBidXQKKyAgIHVuZm9ydHVu YXRlbHkgaXMgbm90IGFibGUgdG8gcmVzdG9yZSBpdCB1cG9uIGV4aXQgZnJvbSBjdXJzZXMgKHZp YQorICAgZW5kd2luKCkpLiBUaHVzIGFmdGVyIGEgZmlsZSB0cmFuc2ZlciB0aGF0IHVzZXMgdGhl IGZ1bGxzY3JlZW4gZmlsZQorICAgdHJhbnNmZXIgZGlzcGxheSwgdGhlIHRlcm1pbmFsIG5vIGxv bmdlciBlY2hvcyBub3IgcmVzcG9uZHMgaW1tZWRpYXRlbHkKKyAgIHRvIFRhYiwgPywgYW5kIG90 aGVyIHNwZWNpYWwgY29tbWFuZCBjaGFyYWN0ZXJzLiBUaGUgc2FtZSB0aGluZyBoYXBwZW5zCisg ICBvbiBvdGhlciBwbGF0Zm9ybXMgdGhhdCB1c2UgbmN1cnNlcywgZS5nLiBGcmVlQlNELiBXb3Jr YXJvdW5kczoKKworICAgICAqIFVzZSBTRVQgWEZFUiBESVNQTEFZIEJSSUVGLCBDUlQsIFNFUklB TCwgb3IgTk9ORSBpbnN0ZWFkIG9mCisgICAgICAgRlVMTFNDUkVFTjsgb3I6CisgICAgICogUmVi dWlsZCB3aXRoIEtGTEFHUz0tRE5PTk9TRVRCVUYgKEMtS2VybWl0IDguMCkKKworICAgSW4gUmVk IEhhdCA3LjEsIHdoZW4gdXNpbmcgQy1LZXJtaXQgaW4gYSBHbm9tZSB0ZXJtaW5hbCB3aW5kb3cs IGl0IHdhcworICAgbm90aWNlZCB0aGF0IHdoZW4gdGhlIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2Zl ciBkaXNwbGF5IGV4aXRzICh2aWEKKyAgIGVuZHdpbigpKSwgdGhlIHByZXZpb3VzIChwcmUtZmls ZS10cmFuc2Zlci1kaXNwbGF5KSBzY3JlZW4gaXMgcmVzdG9yZWQuCisgICBUaHVzIHlvdSBjYW4n dCBsb29rIGF0IHRoZSBjb21wbGV0ZWQgZGlzcGxheSB0byBzZWUgd2hhdCBoYXBwZW5lZC4gVGhp cworICAgaXMgYSBldmlkZW50bHkgYSBuZXcgZmVhdHVyZSBvZiB4dGVybS4gSSBjYW4gb25seSBz cGVjdWxhdGUgdGhhdAorICAgaW5pdHNjcmVlbigpIGFuZCBlbmR3aW4oKSBtdXN0IHNlbmQgc29t ZSBraW5kIG9mIHNwZWNpYWwgZXNjYXBlCisgICBzZXF1ZW5jZXMgdGhhdCBjb21tYW5kIHh0ZXJt IHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIHNjcmVlbi4gVG8gZGVmZWF0CisgICB0aGlzIGVmZmVj dCwgdGVsbCBMaW51eCB5b3UgaGF2ZSBhIHZ0MTAwIG9yIG90aGVyIHh0ZXJtLWNvbXBhdGlibGUK KyAgIHRlcm1pbmFsIHRoYXQgaXMgbm90IGFjdHVhbGx5IGFuIHh0ZXJtLCBvciBlbHNlIHRlbGwg S2VybWl0IHRvIFNFVAorICAgVFJBTlNGRVIgRElTUExBWSB0byBzb21ldGhpbmcgYmVzaWRlcyBG VUxMU0NSRUVOLgorCiszLjQuIEMtS0VSTUlUIEFORCBORVhUU1RFUAorCisgICBbIFszNDRdVG9w IF0gWyBbMzQ1XUNvbnRlbnRzIF0gWyBbMzQ2XVNlY3Rpb24gQ29udGVudHMgXSBbIFszNDddTmV4 dCBdCisgICBbIFszNDhdUHJldmlvdXMgXQorCisgICBSdW4gQy1LZXJtaXQgaW4gYSBUZXJtaW5h bCwgU3R1YXJ0LCBvciB4dGVybSB3aW5kb3csIG9yIHdoZW4gbG9nZ2VkIGluCisgICByZW1vdGVs eSB0aHJvdWdoIGEgc2VyaWFsIHBvcnQgb3IgVEVMTkVUIGNvbm5lY3Rpb24uIEMtS2VybWl0IGRv ZXMgbm90CisgICB3b3JrIGNvcnJlY3RseSB3aGVuIGludm9rZWQgZGlyZWN0bHkgZnJvbSB0aGUg TmVYVFNURVAgRmlsZSBWaWV3ZXIgb3IKKyAgIERvY2suIFRoaXMgaXMgYmVjYXVzZSB0aGUgdGVy bWluYWwtb3JpZW50ZWQgZ3R0eSwgc3R0eSwgJiBpb2N0bCBjYWxscworICAgZG9uJ3Qgd29yayBv biB0aGUgbGl0dGxlIHdpbmRvdyB0aGF0IE5lWFRTVEVQIHBvcHMgdXAgZm9yIG5vbi1OZVhUU1RF UAorICAgYXBwbGljYXRpb25zIGxpa2UgS2VybWl0LiBDQlJFQUsgYW5kIE5vLUVDSE8gc2V0dGlu Z3MgZG8gbm90IHRha2UKKyAgIGVmZmVjdCBpbiB0aGUgY29tbWFuZCBwYXJzZXIgLS0gY29tbWFu ZHMgYXJlIHBhcnNlZCBzdHJpY3RseSBsaW5lIGF0IGEKKyAgIHRpbWUuICJzZXQgbGluZSAvZGV2 L2N1YSIgd29ya3MuIER1cmluZyBDT05ORUNUIG1vZGUsIHRoZSBjb25zb2xlIHN0YXlzCisgICBp biBjb29rZWQgbW9kZSwgc28gY2hhcmFjdGVycyBhcmUgbm90IHRyYW5zbWl0dGVkIHVudGlsIGNh cnJpYWdlIHJldHVybgorICAgb3IgbGluZWZlZWQgaXMgdHlwZWQsIGFuZCB5b3UgY2FuJ3QgZXNj YXBlIGJhY2suIElmIHlvdSB3YW50IHRvIHJ1bgorICAgS2VybWl0IGRpcmVjdGx5IGZyb20gdGhl IEZpbGUgVmlld2VyLCB0aGVuIGxhdW5jaCBpdCBmcm9tIGEgc2hlbGwKKyAgIHNjcmlwdCB0aGF0 IHB1dHMgaXQgaW4gdGhlIGRlc2lyZWQga2luZCBvZiB3aW5kb3csIHNvbWV0aGluZyBsaWtlIHRo aXMKKyAgIChmb3IgIlRlcm1pbmFsIik6CisKKyAgVGVybWluYWwgLUxpbmVzIDI0IC1Db2x1bW5z IDgwIC1XaW5Mb2NYIDEwMCAtV2luTG9jWSAxMDAgJEZPTlQgJEZPTlRTSVpFIFwKKyAgLVNvdXJj ZURvdExvZ2luIC1TaGVsbCAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgJgorCisgICBDLUtlcm1pdCBk b2VzIG5vdCB3b3JrIGNvcnJlY3RseSBvbiBhIE5lWFQgd2l0aCBOZVhUU1RFUCAzLjAgdG8gd2hp Y2gKKyAgIHlvdSBoYXZlIGVzdGFibGlzaGVkIGFuIHJsb2dpbiBjb25uZWN0aW9uLCBkdWUgdG8g YSBidWcgaW4gTmVYVFNURVAKKyAgIDMuMCwgd2hpY2ggaGFzIGJlZW4gcmVwb3J0ZWQgdG8gTmVY VC4KKworICAgVGhlIFNFVCBDQVJSSUVSIGNvbW1hbmQgaGFzIG5vIGVmZmVjdCBvbiB0aGUgTmVY VCAtLSB0aGlzIGlzIGEKKyAgIGxpbWl0YXRpb24gb2YgdGhlIE5lWFRTVEVQIHNlcmlhbC1wb3J0 IGRldmljZSBkcml2ZXJzLgorCisgICBIYXJkd2FyZSBmbG93IGNvbnRyb2wgb24gdGhlIE5lWFQg aXMgc2VsZWN0ZWQgbm90IGJ5ICJzZXQgZmxvdyBydHMvY3RzIgorICAgaW4gS2VybWl0IChzaW5j ZSBOZVhUU1RFUCBvZmZlcnMgbm8gQVBJIGZvciB0aGlzKSwgYnV0IHJhdGhlciwgYnkgdXNpbmcK KyAgIGEgc3BlY2lhbGx5LW5hbWVkIGRyaXZlciBmb3IgdGhlIHNlcmlhbCBkZXZpY2U6IC9kZXYv Y3VmYSBpbnN0ZWFkCisgICAvZGV2L2N1YTsgL2Rldi9jdWZiIGluc3RlYWQgb2YgL2Rldi9jdWIu IFRoaXMgaXMgYXZhaWxhYmxlIG9ubHkgb24KKyAgIDY4MDQwLWJhc2VkIE5lWFQgbW9kZWxzICh0 aGUgc2l0dWF0aW9uIGZvciBJbnRlbCBOZVhUU1RFUAorICAgaW1wbGVtZW50YXRpb25zIGlzIHVu a25vd24pLgorCisgICBOZVhULWJ1aWx0IDY4MDMwIGFuZCA2ODA0MCBtb2RlbHMgaGF2ZSBkaWZm ZXJlbnQga2luZHMgb2Ygc2VyaWFsCisgICBpbnRlcmZhY2VzOyB0aGUgNjgwMzAgaGFzIGEgTWFj aW50b3NoLWxpa2UgUlMtNDIyIGludGVyZmFjZSwgd2hpY2gKKyAgIGxhY2tzIFJUUyBhbmQgQ1RT IHNpZ25hbHM7IHRoZSA2ODA0MCBoYXMgYW4gUlMtNDIzIChSUy0yMzIgY29tcGF0aWJsZSkKKyAg IGludGVyZmFjZSwgd2hpY2ggc3VwcG9ydHMgdGhlIGNvbW1vbmx5LXVzZWQgbW9kZW0gc2lnbmFs cy4gV0FSTklORzogdGhlCisgICBjb25uZWN0b3JzIGxvb2sgZXhhY3RseSB0aGUgc2FtZSwgYnV0 IHRoZSBwaW5zIGFyZSB1c2VkIGluIGNvbXBsZXRlbHkKKyAgIERJRkZFUkVOVCB3YXlzIC0tIGRp ZmZlcmVudCBjYWJsZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgdHdvIGtpbmRzIG9mCisgICBpbnRl cmZhY2VzLgorCisgICAgIElGIFlPVSBHRVQgTE9UUyBPRiBSRVRSQU5TTUlTU0lPTlMgZHVyaW5n IGZpbGUgdHJhbnNmZXIsIGV2ZW4gd2hlbgorICAgICB1c2luZyBhIC9kZXYvY3VmKiBkZXZpY2Ug YW5kIHRoZSBtb2RlbSBpcyBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IKKyAgICAgUlRTL0NUUyBm bG93IGNvbnRyb2wsIFlPVSBQUk9CQUJMWSBIQVZFIFRIRSBXUk9ORyBLSU5EIE9GIENBQkxFLgor CisgICBPbiB0aGUgTmVYVCwgS2VybWl0IHJlcG9ydGVkbHkgKGJ5IFRpbWVNb24pIGNhdXNlcyB0 aGUga2VybmVsIHRvIHVzZSBhCisgICBsb3Qgb2YgQ1BVIHRpbWUgd2hlbiB1c2luZyBhICJzZXQg bGluZSIgY29ubmVjdGlvbi4gVGhhdCdzIGJlY2F1c2UKKyAgIHRoZXJlIGlzIG5vIERNQSBjaGFu bmVsIGZvciB0aGUgTmVYVCBzZXJpYWwgcG9ydCwgc28gdGhlIHBvcnQgbXVzdAorICAgaW50ZXJy dXB0IHRoZSBrZXJuZWwgZm9yIGVhY2ggY2hhcmFjdGVyIGluIG9yIG91dC4KKworICAgT25lIHVz ZXIgcmVwb3J0ZWQgdHJvdWJsZSBydW5uaW5nIEMtS2VybWl0IG9uIGEgTmVYVCBmcm9tIHdpdGhp biBOZVhUJ3MKKyAgIFN1YnByb2Nlc3MgY2xhc3MgdW5kZXIgTmVYVHN0ZXAgMy4wLCBhbmQvb3Ig d2hlbiBybG9naW4nZCBmcm9tIG9uZSBOZVhUCisgICB0byBhbm90aGVyOiBFcnJvciBvcGVuaW5n IC9kZXYvdHR5OiwgY29uZ206IE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MuCisgICBEaWFnbm9z aXM6IEJ1ZyBpbiBOZVhUU1RFUCAzLjAsIGN1cmUgdW5rbm93bi4KKworMy41LiBDLUtFUk1JVCBB TkQgUU5YCisKKyAgIFsgWzM0OV1Ub3AgXSBbIFszNTBdQ29udGVudHMgXSBbIFszNTFdU2VjdGlv biBDb250ZW50cyBdIFsgWzM1Ml1OZXh0IF0KKyAgIFsgWzM1M11QcmV2aW91cyBdCisKKyAgIFNl ZSBhbHNvOiBUaGUgWzM1NF1jb21wLm9zLnFueCBuZXdzZ3JvdXAuCisKKyAgIFN1cHBvcnQgZm9y IFFOWCA0Lnggd2FzIGFkZGVkIGluIEMtS2VybWl0IDVBKDE5MCkuIFRoaXMgaXMgYQorICAgZnVs bC1mdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiwgdGhvcm91Z2hseSB0ZXN0ZWQgb24gUU5YIDQuMjEg YW5kIGxhdGVyLAorICAgYW5kIHZlcmlmaWVkIHRvIHdvcmsgaW4gYm90aCAxNi1iaXQgYW5kIDMy LWJpdCB2ZXJzaW9ucy4gVGhlIDE2LWJpdAorICAgdmVyc2lvbiB3YXMgZHJvcHBlZCBpbiBDLUtl cm1pdCA3LjAgc2luY2UgaXQgY2FuIG5vIGxvbmdlciBiZSBidWlsdAorICAgc3VjY2Vzc2Z1bGx5 IChhZnRlciBzdHJpcHBpbmcgbW9zdCBtb3N0IGZlYXR1cmVzLCBJIHN1Y2NlZWRlZCBpbgorICAg Z2V0dGluZyBpdCB0byBjb21waWxlIGFuZCBsaW5rIHdpdGhvdXQgY29tcGxhaW50LCBidXQgdGhl IGV4ZWN1dGFibGUKKyAgIGp1c3QgYmVlcHMgd2hlbiB5b3UgcnVuIGl0KTsgZm9yIDE2LWJpdCBR TlggNC4yeCwgdXNlIEMtS2VybWl0IDYuMCBvcgorICAgZWFybGllciwgb3IgZWxzZSBbMzU1XUct S2VybWl0LgorCisgICBUaGUgMzItYml0IHZlcnNpb24gKGFuZCB0aGUgMTYtYml0IHZlcnNpb24g cHJpb3IgdG8gQy1LZXJtaXQgNy4wKQorICAgc3VwcG9ydHMgbW9zdCBvZiBDLUtlcm1pdCdzIGFk dmFuY2VkIGZlYXR1cmVzIGluY2x1ZGluZyBUQ1AvSVAsIGhpZ2gKKyAgIHNlcmlhbCBzcGVlZHMs IGhhcmR3YXJlIGZsb3ctY29udHJvbCwgbW9kZW0tc2lnbmFsIGF3YXJlbmVzcywgY3Vyc2VzCisg ICBzdXBwb3J0LCBldGMuCisKKyAgIEJVRzogSW4gQy1LZXJtaXQgNi4wIG9uIFFOWCA0LjIyIGFu ZCBlYXJsaWVyLCB0aGUgZnVsbHNjcmVlbiBmaWxlCisgICB0cmFuc2ZlciBkaXNwbGF5IHdvcmtl ZCBmaW5lIHRoZSBmaXJzdCB0aW1lLCBidXQgd2FzIGZyYWN0dXJlZCBvbgorICAgc3Vic2VxdWVu dCBmaWxlIHRyYW5zZmVycy4gQ2F1c2UgYW5kIGN1cmUgdW5rbm93bi4gSW4gQy1LZXJtaXQgNy4w IGFuZAorICAgUU5YIDQuMjUsIHRoaXMgbm8gbG9uZ2VyIG9jY3Vycy4gSXQgaXMgbm90IGtub3du IGlmIGl0IHdvdWxkIG9jY3VyIGluCisgICBDLUtlcm1pdCA3LjAgb3IgbGF0ZXIgb24gZWFybGll ciBRTlggdmVyc2lvbnMuCisKKyAgIERpYWxvdXQgZGV2aWNlcyBhcmUgbm9ybWFsbHkgL2Rldi9z ZXIxLCAvZGV2L3NlcjIsIC4uLiwgYW5kIGNhbiBiZQorICAgb3BlbmVkIGV4cGxpY2l0bHkgd2l0 aCBTRVQgTElORS4gUmVwb3J0ZWRseSwgIi9kZXYvc2VyIiAobm8gdW5pdAorICAgbnVtYmVyKSBv cGVucyB0aGUgZmlyc3QgYXZhaWxhYmxlIC9kZXYvc2VybiBkZXZpY2UuCisKKyAgIExpa2UgYWxs IG90aGVyIFVuaXggQy1LZXJtaXQgaW1wbGVtZW50YXRpb25zLCBRTlggQy1LZXJtaXQgZG9lcyBu b3QKKyAgIHByb3ZpZGUgYW55IGtpbmQgb2YgdGVybWluYWwgZW11bGF0aW9uLiBUZXJtaW5hbCBz cGVjaWZpYyBmdW5jdGlvbnMgYXJlCisgICBwcm92aWRlZCBieSB5b3VyIHRlcm1pbmFsLCB0ZXJt aW5hbCB3aW5kb3cgKGUuZy4gUU5YIFRlcm1pbmFsIG9yCisgICB4dGVybSksIG9yIGVtdWxhdG9y LgorCisgICBRTlggQy1LZXJtaXQsIGFzIGRpc3RyaWJ1dGVkLCBkb2VzIG5vdCBpbmNsdWRlIHN1 cHBvcnQgZm9yIFVVQ1AKKyAgIGxpbmUtbG9ja2luZzsgdGhlIFFOWCBtYWtlZmlsZSBlbnRyaWVz IChxbngzMiBhbmQgcW54MTYpIGluY2x1ZGUgdGhlCisgICAtRE5PVVVDUCBzd2l0Y2guIFRoaXMg aXMgYmVjYXVzZSBRTlgsIGFzIGRpc3RyaWJ1dGVkLCBkb2VzIG5vdCBpbmNsdWRlCisgICBVVUNQ LCBhbmQgaXRzIG93biBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSAoZS5nLiBxdGVybSkgZG9lcyBu b3QgdXNlCisgICBVVUNQIGxpbmUgbG9ja2luZy4gSWYgeW91IGhhdmUgYSBVVUNQIHByb2R1Y3Qg aW5zdGFsbGVkIG9uIHlvdXIgUU5YCisgICBzeXN0ZW0sIHJlbW92ZSB0aGUgLUROT1VVQ1Agc3dp dGNoIGZyb20gdGhlIG1ha2VmaWxlIGVudHJ5IGFuZCByZWJ1aWxkLgorICAgVGhlbiBjaGVjayB0 byBzZWUgdGhhdCBLZXJtaXQncyBVVUNQIGxvY2tmaWxlIGNvbnZlbnRpb25zIGFyZSB0aGUgc2Ft ZQorICAgYXMgdGhvc2Ugb2YgeW91ciBVVUNQIHBhY2thZ2U7IGlmIG5vdCwgcmVhZCB0aGUgWzM1 Nl1VVUNQIGxvY2tmaWxlCisgICBzZWN0aW9uIG9mIHRoZSBbMzU3XUluc3RhbGxhdGlvbiBJbnN0 cnVjdGlvbnMgYW5kIG1ha2UgdGhlIG5lY2Vzc2FyeQorICAgY2hhbmdlcyB0byB0aGUgbWFrZWZp bGUgZW50cnkgKGUuZy4gYWRkIC1ESERCVVVDUCkuCisKKyAgIFFOWCBkb2VzLCBob3dldmVyLCBh bGxvdyBhIHByb2dyYW0gdG8gZ2V0IHRoZSBkZXZpY2Ugb3BlbiBjb3VudC4gVGhpcworICAgY2Fu IG5vdCBiZSBhIHJlbGlhYmxlIGZvcm0gb2YgbG9ja2luZyB1bmxlc3MgYWxsIGFwcGxpY2F0aW9u cyBkbyBpdCwgc28KKyAgIGJ5IGRlZmF1bHQsIEtlcm1pdCB1c2VzIHRoaXMgaW5mb3JtYXRpb24g b25seSBmb3IgcHJpbnRpbmcgYSB3YXJuaW5nCisgICBtZXNzYWdlIHN1Y2ggYXM6CisKKyAgQy1L ZXJtaXQ+c2V0IGxpbmUgL2Rldi9zZXIxCisgIFdBUk5JTkcgLSAiL2Rldi9zZXIxIiBsb29rcyBi dXN5Li4uCisKKyAgIEhvd2V2ZXIsIGlmIHlvdSB3YW50IHRvIHVzZSBpdCBhcyBhIGxvY2ssIHlv dSBjYW4gZG8gc28gd2l0aDoKKworICBTRVQgUU5YLVBPUlQtTE9DSyB7IE9OLCBPRkYgfQorCisg ICBUaGlzIGlzIE9GRiBieSBkZWZhdWx0OyBpZiB5b3Ugc2V0IGluIE9OLCBDLUtlcm1pdCB3aWxs IGZhaWwgdG8gb3BlbgorICAgYW55IGRpYWxvdXQgZGV2aWNlIHdoZW4gaXRzIG9wZW4gY291bnQg aW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzCisgICBoYXMgaXQgb3Blbi4gU0hPVyBDT01N IChpbiBRTlggb25seSkgZGlzcGxheXMgdGhlIHNldHRpbmcsIGFuZCBpZiB5b3UKKyAgIGhhdmUg YSBwb3J0IG9wZW4sIGl0IGFsc28gc2hvd3MgdGhlIG9wZW4gY291bnQuCisKKyAgIEFzIG9mIEMt S2VybWl0IDguMCwgQy1LZXJtaXQncyAib3Blbi1jb3VudCIgZm9ybSBvZiBsaW5lIGxvY2tpbmcg d29ya3MKKyAgIG9ubHkgaW4gUU5YNCwgbm90IGluIFFOWDYgKHRoaXMgbWlnaHQgY2hhbmdlIGlu IGEgZnV0dXJlIEMtS2VybWl0CisgICByZWxlYXNlKS4KKworMy42LiBDLUtFUk1JVCBBTkQgU0NP CisKKyAgIFsgWzM1OF1Ub3AgXSBbIFszNTldQ29udGVudHMgXSBbIFszNjBdU2VjdGlvbiBDb250 ZW50cyBdIFsgWzM2MV1OZXh0IF0KKyAgIFsgWzM2Ml1QcmV2aW91cyBdCisKKyAgIFNFQ1RJT04g Q09OVEVOVFMKKworMy42LjEuIFszNjNdU0NPIFhFTklYCiszLjYuMi4gWzM2NF1TQ08gVU5JWCBh bmQgT1NSNQorMy42LjMuIFszNjVdVW5peHdhcmUKKzMuNi40LiBbMzY2XU9wZW4gVU5JWCA4CisK KyAgIFJFRkVSRU5DRVMKKworICAgICAqIFRoZSBjb21wLnVuaXguc2NvLiogbmV3c2dyb3Vwcy4K KyAgICAgKiBbMzY3XVNlY3Rpb24gMy4xMCBiZWxvdyBmb3IgVW5peHdhcmUuCisgICAgICogVGhl IGZvbGxvd2luZyBGQVFzOgorCisgICAgICAgIFRoZSBjb21wLnNjby5taXNjIEZBUToKKyAgICAg ICAgICAgICAgICBbMzY4XWh0dHA6Ly9hcGxhd3JlbmNlLmNvbS9TQ09GQVEvCisKKyAgICAgICAg Q2FsZGVyYSAoU0NPKSBjb21wLnVuaXguc2NvLnByb2dyYW1tZXIgRkFROgorICAgICAgICAgICAg ICAgIFszNjldaHR0cDovL3d3dy56ZW5lei5jb20vY2dpLWJpbi9zY29wcm9nZmFxL2ZhcS5wbAor CisgICAgICAgIFRoZSBVbml4V2FyZSA3L09wZW5VTklYIDggRkFROgorICAgICAgICAgICAgICAg IFszNzBdaHR0cDovL3d3dy56ZW5lei5jb20vY2dpLWJpbi9zY291dzdmYXEvZmFxLnBsCisgICAg ICAgICAgICAgICAgWzM3MV1odHRwOi8vemVuZXoucGN1bml4LmNvbS9jZ2ktYmluL3Njb3V3N2Zh cS9mYXEucGwKKworICAgICAgICBIaWdoIFNwZWVkIE1vZGVtcyBmb3IgU0NPIFVuaXg6CisgICAg ICAgICAgICAgICAgWzM3Ml1odHRwOi8vcGN1bml4LmNvbS9Vbml4YXJ0L21vZGVtcy5odG1sCisK KyAgICAgICAgVGhlIFVuaXhXYXJlIEZBUQorICAgICAgICAgICAgICAgIFszNzNdaHR0cDovL3d3 dy5mcmVlYmlyZC5vcmcvZmFxLworCisgICAgICAgIFRoZSBVbml4V2FyZSAxLnggYW5kIDIuMCBQ cm9ncmFtbWVyIEZBUQorICAgICAgICAgICAgICAgIFszNzRdaHR0cDovL3d3dy5mcmVlYmlyZC5v cmcvZmFxL2RldmVsb3Blci5odG1sCisKKyAgICAgICAgQ2FsZGVyYSBTdXBwb3J0IEtub3dsZWRn ZSBCYXNlCisgICAgICAgICAgICAgICAgWzM3NV1odHRwOi8vc3VwcG9ydC5jYWxkZXJhLmNvbS9j YWxkZXJhCisKKyAgICAgICAgWzM3Nl1odHRwOi8vc3RhZ2UuY2FsZGVyYS5jb20vdGEvCisgICAg ICAgICAgICAgICAgQ2FsZGVyYSAoU0NPKSBUZWNobmljYWwgQXJ0aWNsZSBTZWFyY2ggQ2VudGVy CisKKyAgICAgICAgWzM3N11odHRwOi8vYXBsYXdyZW5jZS5jb20vbmV3dG9zY28uaHRtbAorICAg ICAgICAgICAgICAgIE5ldyB0byBTQ08gKFRvbnkgTGF3cmVuY2UpCisKKyAgIFRoZSBzYW1lIGNv bW1lbnRzIHJlZ2FyZGluZyB0ZXJtaW5hbCBlbXVsYXRpb24gYW5kIGtleSBtYXBwaW5nIGFwcGx5 IHRvCisgICBTQ08gb3BlcmF0aW5nIHN5c3RlbXMgYXMgdG8gYWxsIG90aGVyIFVuaXhlcy4gQy1L ZXJtaXQgaXMgbm90IGEKKyAgIHRlcm1pbmFsIGVtdWxhdG9yLCBhbmQgeW91IGNhbid0IHVzZSBp dCB0byBtYXAgRi1rZXlzLCBBcnJvdyBrZXlzLCBldGMuCisgICBUaGUgd2F5IHRvIGRvIHRoaXMg aXMgd2l0aCB4bW9kbWFwICh4dGVybSkgb3IgbG9hZGtleXMgKGNvbnNvbGUpLiBGb3IgYQorICAg YnJpZWYgZXhwbGFuYXRpb24sIHNlZSBbMzc4XVNlY3Rpb24gMy4wLjUuIEZvciBhIGZ1bGxlciBl eHBsYW5hdGlvbiwKKyAgIFszNzldQ2xJQ0sgSEVSRS4KKworICAgQWxzbyBzZWUgZ2VuZXJhbCBj b21tZW50cyBvbiBQQy1iYXNlZCBVbml4ZXMgaW4gWzM4MF1TZWN0aW9uIDMuMC4KKworMy42LjEu IFNDTyBYRU5JWAorCisgICBbIFszODFdVG9wIF0gWyBbMzgyXUNvbnRlbnRzIF0gWyBbMzgzXVNl Y3Rpb24gQ29udGVudHMgXSBbIFszODRdTmV4dCBdCisKKyAgIE9sZCBYZW5peCB2ZXJzaW9ucy4u LiBEaWQgeW91IGtub3c6IFhlbml4IDMuMCBpcyAqb2xkZXIqIHRoYW4gWGVuaXgKKyAgIDIuMD8K KworICAgSW4gWGVuaXggMi4zLjQgYW5kIHByb2JhYmx5IG90aGVyIFhlbml4IHZlcnNpb25zLCBt b21lbnRhcmlseSBkcm9wcGluZworICAgRFRSIHRvIGhhbmcgdXAgYSBtb2RlbSBkb2VzIG5vdCB3 b3JrLiBEVFIgZ29lcyBkb3duIGJ1dCBkb2VzIG5vdCBjb21lCisgICB1cCBhZ2Fpbi4gV29ya2Fy b3VuZDogVXNlIFNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EIE1PREVNLUNPTU1BTkQuCisgICBBbnli b2R5IHdobyB3b3VsZCBsaWtlIHRvIGZpeCB0aGlzIGlzIHdlbGNvbWUgdG8gdGFrZSBhIGxvb2sg YXQKKyAgIHR0aGFuZygpIGluIFszODVdY2t1dGlvLmMuIEFsc286IG1vZGVtIHNpZ25hbHMgY2Fu IG5vdCBiZSByZWFkIGluCisgICBYZW5peCwgYW5kIHRoZSBtYXhpbXVtIHNlcmlhbCBzcGVlZCBp cyAzODQwMC4KKworICAgVGhlcmUgaXMgYWxsIHNvcnRzIG9mIGNvbmZ1c2lvbiBhbW9uZyBTQ08g dmVyc2lvbnMsIHBhcnRpY3VsYXJseSB3aGVuCisgICB0aGlyZC0gcGFydHkgY29tbXVuaWNhdGlv bnMgYm9hcmRzIGFuZCBkcml2ZXJzIGFyZSBpbnN0YWxsZWQsIHJlZ2FyZGluZworICAgbG9ja2Zp bGUgbmFtaW5nIGNvbnZlbnRpb25zLCBhcyB3ZWxsIGFzIGJhc2ljIGZ1bmN0aW9uYWxpdHkuIEFz IGZhciBhcworICAgbG9ja2ZpbGVzIGdvLCBhbGwgYmV0cyBhcmUgb2ZmIGlmIHlvdSBhcmUgdXNp bmcgYSB0aGlyZC1wYXJ0eSBtdWx0aXBvcnQKKyAgIGJvYXJkLiBBdCBsZWFzdCB5b3UgaGF2ZSB0 aGUgc291cmNlIGNvZGUuIEhvcGVmdWxseSB5b3UgYWxzbyBoYXZlIGEgQworICAgY29tcGlsZXIg Oi0pCisKKyAgIFhlbml4IDIuMy4wIGFuZCBsYXRlciBjbGFpbSB0byBzdXBwb3J0IFJUU0ZMT1cg YW5kIENUU0ZMT1csIGJ1dCB0aGlzIGlzCisgICBub3QgbW9kZXJuIGJpZGlyZWN0aW9uYWwgaGFy ZHdhcmUgZmxvdyBjb250cm9sOyByYXRoZXIgaXQgaW1wbGVtZW50cworICAgdGhlIG9yaWdpbmFs IFJTLTIzMiBtZWFuaW5ncyBvZiB0aGVzZSBzaWduYWxzIGZvciB1bmlkaXJlY3Rpb25hbAorICAg aGFsZi1kdXBsZXggbGluZSBhY2Nlc3M6IElmIGJvdGggUlRTRkxPVyBhbmQgQ1RTRkxPVyBiaXRz IGFyZSBzZXQsCisgICBYZW5peCBhc3NlcnRzIFJUUyB3aGVuIGl0IHdhbnRzIHRvIHNlbmQgZGF0 YSBhbmQgd2FpdHMgZm9yIENUUworICAgYXNzZXJ0aW9uIGJlZm9yZSBpdCBhY3R1YWxseSBzdGFy dHMgc2VuZGluZyBkYXRhIChhbHNvLCByZXBvcnRlZGx5LAorICAgZXZlbiB0aGlzIGlzIGJyb2tl biBpbiBYZW5peCAyLjMuMCBhbmQgMi4zLjEpLgorCiszLjYuMi4gU0NPIFVOSVggQU5EIE9TUjUK KworICAgWyBbMzg2XVRvcCBdIFsgWzM4N11Db250ZW50cyBdIFsgWzM4OF1TZWN0aW9uIENvbnRl bnRzIF0gWyBbMzg5XU5leHQgXQorICAgWyBbMzkwXVByZXZpb3VzIF0KKworICAgU0NPIHN5c3Rl bXMgdGVuZCB0byB1c2UgZGlmZmVyZW50IG5hbWVzIChpLmUuIGRyaXZlcnMpIGZvciB0aGUgc2Ft ZQorICAgZGV2aWNlLiBUeXBpY2FsbHkgL2Rldi90dHkxYSByZWZlcnMgdG8gYSB0ZXJtaW5hbCBk ZXZpY2UgdGhhdCBoYXMgbm8KKyAgIG1vZGVtIGNvbnRyb2w7IG9wZW4sIHJlYWQsIHdyaXRlLCBh bmQgY2xvc2Ugb3BlcmF0aW9ucyBkbyBub3QgZGVwZW5kIG9uCisgICBjYXJyaWVyLiBPbiB0aGUg b3RoZXIgaGFuZCwgL2Rldi90dHkxQSAoc2FtZSBuYW1lLCBidXQgd2l0aCBmaW5hbAorICAgbGV0 dGVyIHVwcGVyIGNhc2UpLCBpcyB0aGUgc2FtZSBkZXZpY2Ugd2l0aCBtb2RlbSBjb250cm9sLCBp biB3aGljaAorICAgY2FycmllciBpcyByZXF1aXJlZCAodGhlIFNFVCBMSU5FIGNvbW1hbmQgZG9l cyBub3QgY29tcGxldGUgdW50aWwKKyAgIGNhcnJpZXIgYXBwZWFycywgcmVhZC93cml0ZSBvcGVy YXRpb25zIGZhaWwgaWYgdGhlcmUgaXMgbm8gY2FycmllciwKKyAgIGV0YykuCisKKyAgIFNDTyBP cGVuU2VydmVyIDUuMC41IGFuZCBlYXJsaWVyIGRvIG5vdCBzdXBwb3J0IHRoZSByZWFkaW5nIG9m IG1vZGVtCisgICBzaWduYWxzLiBUaHVzICJzaG93IGNvbW0iIGRvZXMgbm90IGxpc3QgbW9kZW0g c2lnbmFscywgYW5kIEMtS2VybWl0CisgICBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IHBvcCBiYWNr IHRvIGl0cyBwcm9tcHQgd2hlbiB0aGUgbW9kZW0gaGFuZ3MgdXAKKyAgIHRoZSBjb25uZWN0aW9u IChkcm9wcyBDRCkuIFRoZSBpb2N0bCgpIGNhbGwgZm9yIHRoaXMgaXMgc2ltcGx5IG5vdAorICAg aW1wbGVtZW50ZWQsIGF0IGxlYXN0IG5vdCBpbiB0aGUgc3RhbmRhcmQgZHJpdmVycy4gT1NSNS4w LjYgYXR0ZW1wdHMgdG8KKyAgIGRlYWwgd2l0aCBtb2RlbSBzaWduYWxzIGJ1dCBmYWlsczsgaG93 ZXZlciBPU1I1LjAuNmEgYXBwZWFycyB0bworICAgZnVuY3Rpb24gcHJvcGVybHkuCisKKyAgIERp YWxpbmcgaXMgbGlrZWx5IG5vdCB0byB3b3JrIHdlbGwgaW4gU0NPIE9wZW5TZXJ2ZXIgNS4wLngg YmVjYXVzZSBtYW55CisgICBvZiB0aGUgc2VyaWFsLXBvcnQgQVBJcyBzaW1wbHkgZG8gbm90IG9w ZXJhdGUgd2hlbiB1c2luZyB0aGUgc3RhbmRhcmQKKyAgIGRyaXZlcnMuIEZvciBleGFtcGxlLCBp ZiBEVFIgaXMgZHJvcHBlZCBieSB0aGUgcmVjb21tZW5kZWQgbWV0aG9kCisgICAoc2V0dGluZyBz cGVlZCB0byAwIGZvciBoYWxmIGEgc2Vjb25kcywgdGhlbiByZXN0b3JpbmcgdGhlIHNwZWVkKSwg RFRSCisgICBhbmQgUlRTIGdvIGRvd24gYnV0IG5ldmVyIGNvbWUgYmFjayB1cC4gV2hlbiBpbiBk b3VidCBTRVQgTU9ERU0KKyAgIEhBTkdVUC1NRVRIT0QgTU9ERU0tQ09NTUFORCBvciBTRVQgRElB TCBIQU5HVVAgT0ZGLgorCisgICBPbiB0aGUgb3RoZXIgaGFuZCwgY2VydGFpbiBmdW5jdGlvbnMg dGhhdCBtaWdodCBub3QgKGRvIG5vdCkgd29yayByaWdodAorICAgb3IgYXQgYWxsIHdoZW4gdXNp bmcgU0NPIGRyaXZlcnMgKGUuZy4gaGlnaCBzZXJpYWwgc3BlZWRzLCBoYXJkd2FyZQorICAgZmxv dyBjb250cm9sLCBhbmQvb3IgcmVhZGluZyBvZiBtb2RlbSBzaWduYWxzKSBtaWdodCB3b3JrIHJp Z2h0IHdoZW4KKyAgIHVzaW5nIHRoaXJkLXBhcnR5IGRyaXZlcnMuIChFeGFtcGxlOiBoYXJkd2Fy ZSBmbG93IGNvbnRyb2wgd29ya3MsCisgICByZXBvcnRlZGx5LCBvbmx5IG9uIHVwcGVyY2FzZSBk ZXZpY2UgbGlrZSB0dHkxQSAtLSBub3QgdHR5MWEgLS0gYW5kCisgICBvbmx5IHdoZW4gQ0xPQ0FM IGlzIGNsZWFyIHdoZW4gdXNpbmcgdGhlIFNDTyBzaW8gZHJpdmVyLCBidXQgdGhlcmUgYXJlCisg ICBubyBzdWNoIHJlc3RyaWN0aW9ucyBpbiwgZS5nLiwgWzM5MV1EaWdpYm9hcmQgZHJpdmVycyku CisKKyAgIE9uZSB1c2VyIHJlcG9ydHMgdGhhdCBoZSBjYW4ndCB0cmFuc2ZlciBsYXJnZSBmaWxl cyB3aXRoIEMtS2VybWl0IHVuZGVyCisgICBTQ08gT1NSNS4wLjAgYW5kIDUuMC40IC0tIGFmdGVy IHRoZSBmaXJzdCA1SywgZXZlcnl0aGluZyBmYWxscyBhcGFydC4KKyAgIFNhbWUgdGhpbmcgd2l0 aG91dCBLZXJtaXQgLS0gZS5nLiB3aXRoIGZ0cCBvdmVyIGEgUFBQIGNvbm5lY3Rpb24uCisgICBM YXRlciwgaGUgc2FpZCB0aGF0IHJlcGxhY2luZyBTQ08ncyBTSU8gZHJpdmVyIHdpdGggRkFTLCBh biBhbHRlcm5hdGl2ZQorICAgY29tbXVuaWNhdGlvbnMgZHJpdmVyLCBtYWRlIHRoZSBwcm9ibGVt IGdvIGF3YXk6CisKKyAgWzM5Ml1mdHA6Ly9mdHAuZnUtYmVybGluLmRlL3B1Yi91bml4L2RyaXZl ci9mYXMKKworICAgV2l0aCByZWdhcmQgdG8gYmlkaXJlY3Rpb25hbCBzZXJpYWwgcG9ydHMgb24g T3BlblNlcnZlciA1LjAuNCwgdGhlCisgICBmb2xsb3dpbmcgYWR2aWNlIGFwcGVhcmVkIG9uIGFu IFNDTy1yZWxhdGVkIG5ld3Nncm91cDoKKworICAgICBObyBhbW91bnQgb2YgY29uZmlndXJhdGlv biBpbmZvcm1hdGlvbiBpcyBnb2luZyB0byBoZWxwIHlvdSBvbiA1LjAuNAorICAgICB1bmxlc3Mg aXQgaW5jbHVkZXMgdGhlIGtsdWRnZSBmb3IgdGhlIHByaW1hcnkgcHJvYmxlbS4gV2l0aCBhbG1v c3QKKyAgICAgZXZlcnkgbW9kZW0sIHRoZSA1LjAuNCBnZXR0eSB3aWxsIGJhcmYgbWVzc2FnZXMg YW5kIG1heSBvciBtYXkgbm90CisgICAgIGNvbm5lY3QuIFRoZXJlIGFyZSAyIHNvbHV0aW9ucyBh bmQgb25seSBvbmUgd29ya3Mgb24gNS4wLjQuIEdldCB0aGUKKyAgICAgYXRkaWFsZXIgYmluYXJ5 IGZyb20gYSA1LjAuMCBzeXN0ZW0gYW5kIHN1YnN0aXR1dGUgaXQgZm9yIHRoZSBuYXRpdmUKKyAg ICAgNS4wLjQgYXRkaWFsZXIuIFRoZSBvdGhlciBzb2x1dGlvbiBpcyB0byB1cGdyYWRlIHRvIDUu MC41LiBBbmQsIG1vc3QKKyAgICAgb2YgYWxsLCBvbiBhbnkgT3BlblNlcnZlciBwcm9kdWN0cywg ZG8gTk9UIHJ1biB0aGUgYmFkbHkgYnJva2VuCisgICAgIE1vZGVtIE1hbmFnZXIuIENvbmZpZ3Vy ZSB0aGUgbW9kZW1zIGluIHRoZSB0aW1lIGhvbm9yZWQgd2F5IHRoYXQKKyAgICAgZGF0ZXMgYmFj ayB0byBYZW5peC4KKworICAgVXNlIFNDTy1wcm92aWRlZCB1dGlsaXRpZXMgZm9yIHN3aXRjaGlu ZyB0aGUgZGlyZWN0aW9uYWxpdHkgb2YgYSBtb2RlbQorICAgbGluZSwgc3VjaCBhcyAiZW5hYmxl IiBhbmQgImRpc2FibGUiIGNvbW1hbmRzLiBGb3IgZXhhbXBsZSwgdG8gZGlhbCBvdXQKKyAgIG9u IHR0eTFhLCB3aGljaCBpcyBub3JtYWxseSBzZXQgdXAgZm9yIGxvZ2luczoKKworICBkaXNhYmxl IHR0eTFhCisgIGtlcm1pdCAtbCAvZGV2L3R0eTFhCisgIGVuYWJsZSB0dHkxYQorCisgICBJZiBh IHR0eSBkZXZpY2UgaXMgbGlzdGVkIGFzIGFuIEFDVSBpbiAvdXNyL2xpYi91dWNwL0RldmljZXMg YW5kIGlzCisgICBlbmFibGVkLCBnZXR0eSByZXNldHMgdGhlIG93bmVyc2hpcCBhbmQgcGVybWlz c2lvbnMgdG8gdXVjcC51dWNwIGFuZAorICAgNjQwIGV2ZXJ5IHRpbWUgdGhlIGRldmljZSBpcyBy ZWxlYXNlZC4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBkZXZpY2UKKyAgIG9ubHkgZm9yIGRpYWxv dXQsIGFuZCB5b3Ugd2FudCB0byBzcGVjaWZ5IG90aGVyIG93bmVycyBvciBwZXJtaXNzaW9ucywK KyAgIHlvdSBzaG91bGQgZGlzYWJsZSBpdCBpbiAvdXNyL2xpYi91dWNwL0RldmljZXM7IHRoaXMg d2lsbCBwcmV2ZW50IGdldHR5CisgICBmcm9tIGRvaW5nIHRoaW5ncyB0byBpdC4gWW91IHNob3Vs ZCBhbHNvIGNoYW5nZXMgdGhlIGRldmljZSdzIGZpbGUKKyAgIG1vZGVzIGluIC9ldGMvY29uZi9u b2RlLmQvc2lvIGJ5IGNoYW5naW5nIGZpZWxkcyA1LTcgZm9yIHRoZSBkZXNpcmVkCisgICBkZXZp Y2Uocyk7IHRoaXMgZGV0ZXJtaW5lcyBob3cgdGhlIGRldmljZXMgYXJlIHNldCBpZiB5b3UgcmVs aW5rIHRoZQorICAga2VybmVsLgorCisgICBPbmUgU0NPIHVzZXIgb2YgQy1LZXJtaXQgNUEoMTkw KSByZXBvcnRlZCB0aGF0IG9ubHkgb25lIGNvcHkgb2YgS2VybWl0CisgICBjYW4gcnVuIGF0IGEg dGltZSB3aGVuIGEgU3RhbGxpb24gVGVjaG5vbG9naWVzIG11bHRpcG9ydCBib2FyZHMgYXJlCisg ICBpbnN0YWxsZWQuIENhdXNlLCBjdXJlLCBhbmQgcHJlc2VudCBzdGF0dXMgdW5rbm93biAoc2Vl IFszOTNdU2VjdGlvbiAxNAorICAgZm9yIG1vcmUgaW5mbyByZWdhcmRpbmcgU3RhbGxpb24pLgor CisgICBQcmlvciB0byBTQ08gT3BlblNlcnZlciA1LjAuNCwgdGhlIGhpZ2hlc3Qgc2VyaWFsIHBv cnQgc3BlZWQgc3VwcG9ydGVkCisgICBieSBTQ08gd2FzIDM4NDAwLiBIb3dldmVyLCBpbiBzb21l IFNDTyB2ZXJzaW9ucyAoZS5nLiBPU1I1KSBpdCBpcworICAgcG9zc2libGUgdG8gbWFwIHJhcmVs eS11c2VkIGxvd2VyIHNwZWVkcyAobGlrZSA2MDAgYW5kIDE4MDApIHRvIGhpZ2hlcgorICAgb25l cyBsaWtlIDU3NjAwIGFuZCAxMTUyMDAuIFRvIGZpbmQgb3V0IGhvdywgZ28gdG8KKyAgIFszOTRd aHR0cDovL3d3dy5zY28uY29tLyBhbmQgc2VhcmNoIGZvciAiMTE1MjAwIi4gSW4gT1NSNS4wLjQs IHNlcmlhbAorICAgc3BlZWRzIHVwIHRvIDkyMTYwMCBhcmUgc3VwcG9ydGVkIHRocm91Z2ggdGhl IFBPU0lYIGludGVyZmFjZTsgQy1LZXJtaXQKKyAgIDYuMS4xOTMgb3IgbGF0ZXIsIHdoZW4gYnVp bHQgZm9yIE9TUjUuMC40IHVzaW5nIC9iaW4vY2MgKE5PVCB0aGUgVURLLAorICAgd2hpY2ggaGlk ZXMgdGhlIGhpZ2gtc3BlZWQgZGVmaW5pdGlvbnMgZnJvbSBDUFApLCBzdXBwb3J0cyB0aGVzZQor ICAgc3BlZWRzLCBidXQgeW91IG1pZ2h0IGJlIGFibGUgdG8gcnVuIHRoaXMgYmluYXJ5IG9uIGVh cmxpZXIgcmVsZWFzZXMgdG8KKyAgIGdldCB0aGUgaGlnaCBzZXJpYWwgc3BlZWRzLCBkZXBlbmRp bmcgb24gdmFyaW91cyBmYWN0b3JzLCBkZXNjcmliZWQgYnkKKyAgIEJlbGEgTHVia2luIG9mIFND TzoKKworICBTZXJpYWwgc3BlZWRzIHVuZGVyIFNDTyBVbml4IC8gT3BlbiBEZXNrdG9wIC8gT3Bl blNlcnZlcgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorICBUaGlyZCBwYXJ0eSBkcml2ZXJzIChpbnRlbGxpZ2VudCBzZXJpYWwgYm9h cmRzKSBtYXkgcHJvdmlkZSBhbnkgc3BlZWRzCisgIHRoZXkgZGVzaXJlOyBtb3N0IHN1cHBvcnQg dXAgdG8gMTE1LjJLYnBzLgorCisgIFNDTydzICJzaW8iIGRyaXZlciwgd2hpY2ggaXMgdXNlZCB0 byBkcml2ZSBzdGFuZGFyZCBzZXJpYWwgcG9ydHMgd2l0aAorICA4MjUwLzE2NDUwLzE2NTUwIGFu ZCBzaW1pbGFyIFVBUlRzLCB3YXMgbGltaXRlZCB0byAzODQwMGJwcyBpbiBvbGRlcgorICByZWxl YXNlcy4gIFN1cHBvcnQgZm9yIHJhdGVzIHRocm91Z2ggMTE1LjJLYnBzIHdhcyBhZGRlZCBpbiB0 aGUKKyAgZm9sbG93aW5nIHJlbGVhc2VzOgorCisgICAgU0NPIE9wZW5TZXJ2ZXIgUmVsZWFzZSA1 LjAuMCAocmVxdWlyZXMgc3VwcGxlbWVudCAicnM0MGIiKQorICAgIFNDTyBPcGVuU2VydmVyIFJl bGVhc2UgNS4wLjIgKHJlcXVpcmVzIHN1cHBsZW1lbnQgInJzNDBhIiBvciAicnM0MGIiKQorICAg IFNDTyBPcGVuU2VydmVyIFJlbGVhc2UgNS4wLjQgb3IgbGF0ZXIKKyAgICBTQ08gSW50ZXJuZXQg RmFzdFN0YXJ0IFJlbGVhc2UgMS4wLjAgb3IgbGF0ZXIKKworICAgU0NPIHN1cHBsZW1lbnRzIGFy ZSBhdCBbMzk1XWZ0cDovL2Z0cC5zY28uY29tLzsgdGhlICJyczQwIiBzZXJpZXMgYXJlCisgICB1 bmRlciBkaXJlY3RvcnkgL1N1cHBsZW1lbnRzL2ludGVybmV0CisKKyAgIEtlcm1pdCBpbmNsdWRl cyB0aGUgaGlnaCBzZXJpYWwgc3BlZWRzIGluIGFsbCBPU1I1IGJ1aWxkcywgYnV0IHRoYXQKKyAg IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhleSB3b3JrLiBGb3IgZXhhbXBsZSwgb24gb3Vy IGluLWhvdXNlIDUuMC41CisgICBzeXN0ZW0sIFNFVCBTUEVFRCA1NzYwMCBvciBoaWdoZXIgc2Vl bXMgdG8gc3VjY2VlZCAobm8gZXJyb3Igb2NjdXJzKQorICAgYnV0IHdoZW4gd2UgcmVhZCB0aGUg c3BlZWQgYmFjayB0aGUgZHJpdmVyIHNheXMgaXQgaXMgNTAuIFNpbWlsYXJseSwKKyAgIDc2ODAw IGJlY29tZXMgNzUsIGFuZCAxMTUyMDAgYmVjb21lcyAxMTAuIFRlc3Rpbmcgc2hvd3MgdGhlIHJl c3VsdGluZworICAgc3BlZWQgaXMgaW5kZWVkIHRoZSBsb3cgb25lIHdlIHJlYWQgYmFjaywgbm90 IHRoZSBoaWdoIG9uZSB3ZSBhc2tlZAorICAgZm9yLiBNb3JhbDogVXNlIHNwZWVkcyBoaWdoZXIg dGhhbiAzODQwMCB3aXRoIGNhdXRpb24gb24gU0NPIE9TUjUuCisKKyAgIFJlcG9ydGVkbHksIGlm IHlvdSBoYXZlIGEgc2NyaXB0IHRoYXQgbWFrZXMgYSBUQ1AvSVAgU0VUIEhPU1QgKGUuZy4KKyAg IFRlbG5ldCkgY29ubmVjdGlvbiB0byBTQ08gMy4ydjQuMiB3aXRoIFRDUC9JUCAxLjIuMSwgYW5k IHRoZW4gZG9lcyB0aGUKKyAgIGZvbGxvd2luZzoKKworICBzY3JpcHQgJCBleGl0CisgIGhhbmd1 cAorCisgICB0aGlzIGNhdXNlcyBhIHBzZXVkb3Rlcm1pbmFsIChwdHkpIHRvIGJlIGNvbnN1bWVk IG9uIHRoZSBTQ08gc3lzdGVtOyBpZgorICAgeW91IGRvIGl0IGVub3VnaCB0aW1lcywgaXQgd2ls bCBydW4gb3V0IG9mIHB0eXMuIEFuICJleGl0IiBjb21tYW5kIGlzCisgICBiZWluZyBzZW50IHRv IHRoZSBTQ08gc2hlbGwsIGFuZCBhIEhBTkdVUCBjb21tYW5kIGlzIGV4ZWN1dGVkIGxvY2FsbHks CisgICBzbyB0aGUgY2hhbmNlcyBhcmUgZ29vZCB0aGF0IGJvdGggc2lkZXMgYXJlIHRyeWluZyB0 byBjbG9zZSB0aGUKKyAgIGNvbm5lY3Rpb24gYXQgb25jZSwgcGVyaGFwcyBpbmR1Y2luZyBhIHJh Y2UgY29uZGl0aW9uIGluIHdoaWNoIHRoZQorICAgcmVtb3RlIHB0eSBpcyBub3QgcmVsZWFzZWQu IEl0IHdhcyBzcGVjdWxhdGVkIHRoYXQgdGhpcyB3b3VsZCBiZSBmaXhlZAorICAgYnkgYXBwbHlp bmcgU0xTIG5ldDM4MmUsIGJ1dCBpdCBkaWQgbm90LiBNZWFud2hpbGUsIHRoZSB3b3JrYXJvdW5k IGlzCisgICB0byBpbnNlcnQgYSAicGF1c2UiIGJldHdlZW4gdGhlIFNDUklQVCBhbmQgSEFOR1VQ IGNvbW1hbmRzLiAoVGhlCisgICBzaXR1YXRpb24gd2l0aCBsYXRlciBTQ08gcmVsZWFzZXMgaXMg bm90IGtub3duLikKKworICAgU0NPIFVOSVggYW5kIE9wZW5TZXJ2ZXIgYWxsb3cgdGhlaXIgY29u c29sZSBhbmQvb3IgdGVybWluYWwgZHJpdmVycyB0bworICAgYmUgY29uZmlndXJlZCB0byB0cmFu c2xhdGUgY2hhcmFjdGVyIHNldHMgZm9yIHlvdS4gRE9OJ1QgRE8gVEhJUyBXSEVOCisgICBVU0lO RyBLRVJNSVQhIEZpcnN0IG9mIGFsbCwgeW91IGRvbid0IG5lZWQgaXQgLS0gS2VybWl0IGl0c2Vs ZiBhbHJlYWR5CisgICBkb2VzIHRoaXMgZm9yIHlvdS4gQW5kIHNlY29uZCwgaXQgd2lsbCAoYSkg cHJvYmFibHkgcnVpbiB0aGUgZm9ybWF0dGluZworICAgb2YgeW91ciBzY3JlZW5zIChkZXBlbmRp bmcgb24gd2hpY2ggZW11bGF0aW9uIHlvdSBhcmUgdXNpbmcpOyBhbmQgKGIpCisgICBpbnRlcmZl cmUgd2l0aCBhbGwgc29ydHMgb2Ygb3RoZXIgdGhpbmdzIC0tIGxlZ2liaWxpdHkgb2Ygbm9uLUFT Q0lJCisgICB0ZXh0IG9uIHRoZSB0ZXJtaW5hbCBzY3JlZW4sIGZpbGUgdHJhbnNmZXIsIGV0Yy4g VXNlOgorCisgIG1hcGNoYW4gLW4KKworICAgdG8gdHVybiBvZmYgdGhpcyBmZWF0dXJlLgorCisg ICBOb3RlIHRoYXQgdGhlcmUgaXMgYSBtdWx0aXR1ZGUgb2YgU0NPIGVudHJpZXMgaW4gdGhlIG1h a2VmaWxlLCBtYW55IG9mCisgICB0aGVtIGV4aGliaXRpbmcgYW4gdW51c3VhbGx5IGxhcmdlIG51 bWJlciBvZiBjb21waWxlciBvcHRpb25zLiBTb21lCisgICBwZW9wbGUgYWN0dWFsbHkgdW5kZXJz dGFuZCBhbGwgb2YgdGhpcy4gUmVwb3J0ZWRseSwgdGhpbmdzIGFyZSBzZXR0bGluZworICAgZG93 biB3aXRoIFNDTyBPcGVuU2VydmVyIDUueCBhbmQgVW5peHdhcmUgNyAoYW5kIE9wZW4gVU5JWCA4 IGFuZCB3aG8KKyAgIGtub3dzIHdoYXQgdGhlIG5leHQgb25lIHdpbGwgYmUgLS0gTGludXggcHJv YmFibHkpIC0tIHRoZSBTQ08gVURLCisgICBjb21waWxlciBpcyBzYWlkIHRvIGdlbmVyYXRlIGJp bmFyaWVzIHRoYXQgd2lsbCBydW4gb24gZWl0aGVyIHBsYXRmb3JtLAorICAgYnkgZGVmYXVsdCwg YXV0b21hdGljYWxseS4gV2hlbiB1c2luZyBnY2Mgb3IgZWdjcywgb24gdGhlIG90aGVyIGhhbmQs CisgICBkaWZmZXJlbmNlcyBwZXJzaXN0LCBwbHVzIGlzc3VlcyByZWdhcmRpbmcgdGhlIHR5cGUg b2YgYmluYXJ5IHRoYXQgaXMKKyAgIGdlbmVyYXRlZCAoQ09GRiwgRUxGLCBldGMpLCBhbmQgd2hl cmUgYW5kIGhvdyBpdCBjYW4gcnVuLiBBbGwgb2YgdGhpcworICAgY291bGQgc3RhbmQgZnVydGhl ciBjbGFyaWZpY2F0aW9uIGJ5IFNDTyBleHBlcnRzLgorCiszLjYuMy4gVW5peHdhcmUKKworICAg WyBbMzk2XVRvcCBdIFsgWzM5N11Db250ZW50cyBdIFsgWzM5OF1TZWN0aW9uIENvbnRlbnRzIF0g WyBbMzk5XU5leHQgXQorICAgWyBbNDAwXVByZXZpb3VzIF0KKworICAgVW5peHdhcmUgY2hhbmdl ZCBoYW5kcyBzZXZlcmFsIHRpbWVzIGJlZm9yZSBsYW5kaW5nIGF0IFNDTywgYW5kIHNvIGhhcwor ICAgaXRzIFs0MDFdb3duIHNlY3Rpb24gaW4gdGhpcyBkb2N1bWVudC4gKEJyaWVmbHk6IEFUJlQg VU5JWCBTeXN0ZW1zCisgICBMYWJvcmF0b3JpZXMgc29sZCB0aGUgcmlnaHRzIHRvIHRoZSBVTklY IG5hbWUgYW5kIHRvIFN5c3RlbSBWIFI0IChvcgorICAgUjU/KSB0byBOb3ZlbGw7IGxhdGVyIE5v dmVsbCBzcHVuIGl0cyBVTklYIGRpdmlzaW9uIG9mZiBpbnRvIGEgbmV3CisgICBjb21wYW55IGNh bGxlZCBVbml2ZWwsIHdoaWNoIGV2ZW50dWFsbHkgd2FzIGJvdWdodCBieSBTQ08sIHdoaWNoIGxh dGVyCisgICB3YXMgYm91Z2h0IGJ5IENhbGRlcmEsIHdoaWNoIGxhdGVyIHNvcnQgb2Ygc2VtaS1z cHVuLW9mZiBTQ08uLi4pCisKKzMuNi40LiBPcGVuIFVOSVggOAorCisgICBbIFs0MDJdVG9wIF0g WyBbNDAzXUNvbnRlbnRzIF0gWyBbNDA0XVNlY3Rpb24gQ29udGVudHMgXSBbCisgICBbNDA1XVBy ZXZpb3VzIF0KKworICAgU0NPIHdhcyBib3VnaHQgYnkgQ2FsZGVyYSBpbiAyMDAwIG9yIDIwMDEg YW5kIGV2b2x2ZWQgVW5peHdhcmUgNy4xIGludG8KKyAgIENhbGRlcmEgT3BlbiBVTklYIDguMDAu IEl0J3MganVzdCBsaWtlIFVuaXh3YXJlIDcuMSBhcyBmYXIgYXMgS2VybWl0IGlzCisgICBjb25j ZXJuZWQgKHRoZSBVbml4d2FyZSA3LjEgbWFrZWZpbGUgdGFyZ2V0IHdvcmtzIGZvciBPcGVuIFVO SVggOC4wMCwKKyAgIGFuZCBpbiBmYWN0IGEgVW5peHdhcmUgNy4xIEtlcm1pdCBiaW5hcnkgYnVp bHQgb24gVW5peHdhcmUgNy4xIHJ1bnMKKyAgIHVuZGVyIE9VODsgYSBzZXBhcmF0ZSBPVTggbWFr ZWZpbGUgdGFyZ2V0IGV4aXN0cyBzaW1wbHkgdG8gZ2VuZXJhdGUgYW4KKyAgIGFwcHJvcHJpYXRl IHByb2dyYW0gc3RhcnR1cCBoZXJhbGQpLiBPcGVuIFVuaXggaXMgbm93IGRlZnVuY3Q7CisgICBz dWJzZXF1ZW50IHJlbGVhc2VzIGFyZSBjYWxsZWQgVW5peFdhcmUgYWdhaW4gKGUuZy4gVW5peFdh cmUgNy4xLjMpLgorCiszLjcuIEMtS0VSTUlUIEFORCBTT0xBUklTCisKKyAgIFsgWzQwNl1Ub3Ag XSBbIFs0MDddQ29udGVudHMgXSBbIFs0MDhdU2VjdGlvbiBDb250ZW50cyBdIFsgWzQwOV1OZXh0 IF0KKyAgIFsgWzQxMF1QcmV2aW91cyBdCisKKyAgIFNFQ1RJT04gQ09OVEVOVFMKKworMy43LjEu IFs0MTFdU2VyaWFsIFBvcnQgQ29uZmlndXJhdGlvbgorMy43LjIuIFs0MTJdU2VyaWFsIFBvcnQg UHJvYmxlbXMKKzMuNy4zLiBbNDEzXVN1bkxpbmsgWC4yNQorMy43LjQuIFs0MTRdU3VuIFdvcmtz dGF0aW9uIEtleWJvYXJkIE1hcHBpbmcKKzMuNy41LiBbNDE1XVNvbGFyaXMgMi40IGFuZCBFYXJs aWVyCisKKyAgIFJFRkVSRU5DRVMKKworICAgICAqIFRoZSBbNDE2XWNvbXAudW5peC5zb2xhcmlz IG5ld3Nncm91cAorICAgICAqIFs0MTddaHR0cDovL2FjY2VzczEuc3VuLmNvbS8KKyAgICAgKiBb NDE4XWh0dHA6Ly9kb2NzLnN1bi5jb20vCisgICAgICogWzQxOV1odHRwOi8vd3d3LnN1bmhlbHAu Y29tLworICAgICAqIFs0MjBdaHR0cDovL3d3dy53aW5zLnV2YS5ubC9wdWIvc29sYXJpcy9zb2xh cmlzMi8KKyAgICAgKiBbNDIxXWh0dHA6Ly93d3cud2lucy51dmEubmwvY2dpLWJpbi9zZmFxLmNn aQorICAgICAqIFs0MjJdZnRwOi8vZnRwLndpbnMudXZhLm5sL3B1Yi9zb2xhcmlzCisgICAgICog WzQyM11odHRwOi8vd3d3LnNjaWVuY2UudXZhLm5sL3B1Yi9zb2xhcmlzL3NvbGFyaXMyLmh0bWwK KworICAgQW5kIGFib3V0IHNlcmlhbCBjb21tdW5pY2F0aW9ucyBpbiBwYXJ0aWN1bGFyLCBzZWUg IkNlbGVzdGUncyBUdXRvcmlhbAorICAgb24gU29sYXJpcyAyLnggTW9kZW1zIGFuZCBUZXJtaW5h bHMiOgorCisgIFs0MjRdaHR0cDovL3d3dy5zdG9rZWx5LmNvbS8KKworICAgSW4gcGFydGljdWxh cjoKKworICBbNDI1XWh0dHA6Ly93d3cuc3Rva2VseS5jb20vdW5peC5zeXNhZG0ucmVzb3VyY2Vz L2ZhcXMuc3VuLmh0bWwKKworICAgRm9yIFBDLWJhc2VkIFNvbGFyaXMsIGFsc28gc2VlIGdlbmVy YWwgY29tbWVudHMgb24gUEMtYmFzZWQgVW5peGVzIGluCisgICBbNDI2XVNlY3Rpb24gMy4wLiBE b24ndCBleHBlY3QgU29sYXJpcyBvciBhbnkgb3RoZXIga2luZCBvZiBVbml4IHRvCisgICB3b3Jr IHJpZ2h0IG9uIGEgUEMgdW50aWwgeW91IHJlc29sdmUgYWxsIGludGVycnVwdCBjb25mbGljdHMu IERvbid0CisgICBleHBlY3QgdG8gYmUgYWJsZSB0byB1c2UgQ09NMyBvciBDT000IChvciBldmVu IENPTTIpIHVudGlsIHlvdSBoYXZlCisgICBjb25maWd1cmVkIHRoZWlyIGFkZHJlc3NlcyBhbmQg aW50ZXJydXB0cy4KKworMy43LjEuIFNlcmlhbCBQb3J0IENvbmZpZ3VyYXRpb24KKworICAgWyBb NDI3XVRvcCBdIFsgWzQyOF1Db250ZW50cyBdIFsgWzQyOV1TZWN0aW9uIENvbnRlbnRzIF0gWyBb NDMwXVNlY3Rpb24KKyAgIENvbnRlbnRzIF0gWyBbNDMxXU5leHQgXQorCisgICBZb3VyIHNlcmlh bCBwb3J0IGNhbid0IGJlIHVzZWQgLS0gb3IgYXQgbGVhc3Qgd29uJ3Qgd29yayByaWdodCAtLSB1 bnRpbAorICAgaXQgaXMgZW5hYmxlZCBpbiBTb2xhcmlzLiBGb3IgZXhhbXBsZSwgeW91IGdldCBh IG1lc3NhZ2UgbGlrZSAiU0VSSUFMOgorICAgT3BlcmF0aW9uIHdvdWxkIGJsb2NrIiB3aGVuIGF0 dGVtcHRpbmcgdG8gZGlhbC4gVGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMKKyAgIHRoYXQgdGhlIHNl cmlhbCBwb3J0IGhhcyBub3QgYmVlbiBlbmFibGVkIGZvciB1c2Ugd2l0aCBtb2RlbXMuIFlvdSds bAorICAgbmVlZCB0byBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIHN5c3RlbSBzZXR1 cCBvciBtYW5hZ2VtZW50CisgICBtYW51YWwsIHN1Y2ggYXMgKGUuZy4pIHRoZSBEZXNrdG9wIFNQ QVJDIFN1biBTeXN0ZW0gJiBOZXR3b3JrIE1hbmFnZXIncworICAgR3VpZGUsIHdoaWNoIHNob3Vs ZCBjb250YWluIGEgc2VjdGlvbiAiU2V0dGluZyB1cCBNb2RlbSBTb2Z0d2FyZSI7IHJlYWQKKyAg IGl0IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucy4gVGhlc2UgbWlnaHQgKG9yIG1pZ2h0IG5v dCkgaW5jbHVkZQorICAgcnVubmluZyBhIHByb2dyYW0gY2FsbGVkICJlZXByb20iLCBlZGl0aW5n IHNvbWUgc3lzdGVtIGNvbmZpZ3VyYXRpb24KKyAgIGZpbGUgKHN1Y2ggYXMsIGZvciBleGFtcGxl OgorCisgIC9wbGF0Zm9ybS9pODZwYy9rZXJuZWwvZHJ2L2FzeS5jb25mCisKKyAgIGFuZCB0aGVu IGRvaW5nIGEgY29uZmlndXJhdGlvbiByZWJvb3QsIG9yIHJ1bm5pbmcgc29tZSBvdGhlciBwcm9n cmFtcworICAgbGlrZSBkcnZjb25maWcgYW5kIGRldmxpbmtzLiAibWFuIGVlcHJvbSIgZm9yIGRl dGFpbHMuCisKKyAgIEFsc28sIG9uIGNlcnRhaW4gU3VuIG1vZGVscyBsaWtlIElQQywgdGhlIHNl cmlhbCBwb3J0IGhhcmR3YXJlIG1pZ2h0CisgICBuZWVkIHRvIGhhdmUgYSBqdW1wZXIgY2hhbmdl ZCB0byBtYWtlIGl0IGFuIFJTLTIzMiBwb3J0IHJhdGhlciB0aGFuCisgICBSUy00MjMuCisKKyAg IGVlcHJvbSBhcHBsaWVzIG9ubHkgdG8gcmVhbCBzZXJpYWwgcG9ydHMsIG5vdCB0byAiU3BpZmYi IGRldmljZXMKKyAgIChzZXJpYWwgcG9ydCBleHBhbmRlciksIGluIHdoaWNoIGNhc2Ugc2V0dXAg d2l0aCBTb2xhcmlzJyBhZG1pbnRvb2wgaXMKKyAgIHJlcXVpcmVkLgorCisgICBBbm90aGVyIGNv bW1hbmQgeW91IG1pZ2h0IG5lZWQgdG8gdXNlIGlzIHBtYWRtLCBlLmcuOgorCisgIHBtYWRtIC1k IC1wIHpzbW9uIC1zIHR0eTMKKyAgcG1hZG0gLWUgLXAgenNtb24gLXMgdHR5MworCisgICBZb3Ug Y2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgdG8gY2hlY2sgaWYgYSBwcm9jZXNzIGhhcyB0 aGUgZGV2aWNlCisgICBvcGVuOgorCisgIGZ1c2VyIC1mIC9kZXYvdGVybS8zCisKKyAgIEluIHNv bWUgY2FzZXMsIGhvd2V2ZXIgKGFjY29yZGluZyB0byBTdW4gc3VwcG9ydCwgTWF5IDIwMDEpICJJ dCBpcworICAgc3RpbGwgcG9zc2libGUgdGhhdCBhIHpvbWJpZSBwcm9jZXNzIGhhcyBob2xkIG9m IHRoZSBwb3J0IEVWRU4gSUYgdGhlcmUKKyAgIGlzIG5vIGxvY2sgZmlsZSBhbmQgdGhlIGZ1c2Vy IGNvbW1hbmQgY29tZXMgdXAgZW1wdHkuIEluIHRoYXQgY2FzZSwgdGhlCisgICBvbmx5IHdheSB0 byByZXNvbHZlIHRoZSBwcm9ibGVtIGlzIGJ5IHJlYm9vdGluZy4iCisKKyAgIElmIHlvdSBjYW4n dCBlc3RhYmxpc2ggY29tbXVuaWNhdGlvbiB0aHJvdWdoIGEgc2VyaWFsIHBvcnQgdG8gYSBkZXZp Y2UKKyAgIHRoYXQgaXMgbm90IGFzc2VydGluZyBDRCAoQ2FycmllciBEZXRlY3QpLCB0cnkgc2V0 dGluZyB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlICJ0dHlhLWlnbm9yZS1jZCIgdG8gInRy dWUiIChyZXBsYWNlICJ0dHlhIiB3aXRoIHRoZSBwb3J0CisgICBuYW1lKS4KKworMy43LjIuIFNl cmlhbCBQb3J0IFByb2JsZW1zCisKKyAgIFsgWzQzMl1Ub3AgXSBbIFs0MzNdQ29udGVudHMgXSBb IFs0MzRdU2VjdGlvbiBDb250ZW50cyBdIFsgWzQzNV1OZXh0IF0KKyAgIFsgWzQzNl1QcmV2aW91 cyBdCisKKyAgIEN1cnJlbnQgYWR2aWNlIGZyb20gU3VuIGlzIHRvIGFsd2F5cyB0aGUgL2Rldi9j dWEveCBkZXZpY2VzIGZvciBkaWFsaW5nCisgICBvdXQsIHJhdGhlciB0aGFuIHRoZSAvZGV2L3Rl cm0veC4gTmV2ZXJ0aGVsZXNzLCBpZiB5b3UgaGF2ZSB0cm91YmxlCisgICBkaWFsaW5nIG91dCB3 aXRoIG9uZSwgdHJ5IHRoZSBvdGhlci4KKworICAgUmVwb3J0ZWRseSwgaWYgeW91IHN0YXJ0IEMt S2VybWl0IGFuZCAic2V0IGxpbmUiIHRvIGEgcG9ydCB0aGF0IGhhcyBhCisgICBtb2RlbSBjb25u ZWN0ZWQgdG8gaXQgdGhhdCBpcyBub3QgdHVybmVkIG9uLCBhbmQgdGhlbiAic2V0IGZsb3cKKyAg IHJ0cy9jdHMiLCB0aGVyZSBtaWdodCBiZSBzb21lICh1bnNwZWNpZmllZCkgZGlmZmljdWx0aWVz IGNsb3NpbmcgdGhlCisgICBkZXZpY2UgYmVjYXVzZSB0aGUgQ1RTIHNpZ25hbCBpcyBub3QgY29t aW5nIGluIGZyb20gdGhlIG1vZGVtLgorCiszLjcuMy4gU3VuTGluayBYLjI1CisKKyAgIFsgWzQz N11Ub3AgXSBbIFs0MzhdQ29udGVudHMgXSBbIFs0MzldU2VjdGlvbiBDb250ZW50cyBdIFsgWzQ0 MF1OZXh0IF0KKyAgIFsgWzQ0MV1QcmV2aW91cyBdCisKKyAgIFRoZSBidWlsdC1pbiBTdW5MaW5r IFguMjUgc3VwcG9ydCBmb3IgU29sYXJpcyAyLjMvMi40Li8yNSBhbmQgU3VuTGluaworICAgOC4w MSBvciA5LjAwIHdvcmtzIE9LIHByb3ZpZGVkIHRoZSBYLjI1IHN5c3RlbSBoYXMgYmVlbiBpbnN0 YWxsZWQgYW5kCisgICBpbml0aWFsaXplZCBwcm9wZXJseS4gUGFja2V0IHNpemVzIG1pZ2h0IG5l ZWQgdG8gYmUgcmVkdWNlZCB0byAyNTYsCisgICBtYXliZSBldmVuIGxlc3MsIGRlcGVuZGluZyBv biB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgWC4yNQorICAgaW5zdGFsbGF0aW9uLiBPbiBvbmUg Y29ubmVjdGlvbiB3aGVyZSBDLUtlcm1pdCA2LjAgd2FzIHRlc3RlZCwgdmVyeQorICAgbGFyZ2Ug cGFja2V0cyBhbmQgd2luZG93IHNpemVzIGNvdWxkIGJlIHVzZWQgaW4gb25lIGRpcmVjdGlvbiwg YnV0IG9ubHkKKyAgIHZlcnkgc21hbGwgb25lcyB3b3VsZCB3b3JrIGluIHRoZSBvdGhlci4KKwor ICAgSW4gYW55IGNhc2UsIGFjY29yZGluZyB0byBTdW4sIEMtS2VybWl0J3MgWC4yNSBzdXBwb3J0 IGlzIHN1cGVyZmx1b3VzCisgICB3aXRoIFN1bkxpbmsgOC54IC8gU29sYXJpcyAyLjMuIFF1b3Rp bmcgYW4gYW5vbnltb3VzIFN1biBlbmdpbmVlcjoKKworICAgICAuLi4gdGhlcmUgaXMgbm93IG5v IG5lZWQgdG8gaW5jbHVkZSBhbnkgWC4yNSBjb2RlIHdpdGhpbiBrZXJtaXQuIEFzCisgICAgIG9m IFguMjUgOC4wLjEgd2Ugc3VwcG9ydCB0aGUgdXNlIG9mIGtlcm1pdCwgdXVjcCBhbmQgc2ltaWxh cgorICAgICBwcm90b2NvbHMgb3ZlciBkZXZpY2VzIG9mIHR5cGUgL2Rldi94dHkuIFRoaXMgZmFj aWxpdHkgd2FzIHRoZXJlIGluCisgICAgIDguMCwgYW5kIHNob3VsZCBhbHNvIHdvcmsgb24gdGhl IDguMCByZWxlYXNlIGlmIHBhdGNoIDEwMTUyNCBpcworICAgICBhcHBsaWVkLCBidXQgSSdtIG5v dCAxMDAlIHN1cmUgaXQgd2lsbCB3b3JrIGluIGFsbCBjYXNlcywgd2hpY2ggaXMKKyAgICAgd2h5 IHdlIG9ubHkgY2xhaW0gc3VwcG9ydCBmcm9tIDguMC4xIG9ud2FyZHMuCisKKyAgICAgV2hlbiBj b25maWd1cmluZyBYLjI1LCBvbiB0aGUgIkFkdmFuY2VkIENvbmZpZ3VyYXRpb24tPlBhcmFtZXRl cnMiCisgICAgIHNjcmVlbiBvZiB0aGUgeDI1dG9vbCB5b3UgY2FuIHNlbGVjdCBhIG51bWJlciBv ZiBYVFkgZGV2aWNlcy4gSWYgeW91CisgICAgIHNldCB0aGlzIHRvIGJlID4gMSwgcHJlc3MgQXBw bHksIGFuZCByZWJvb3QsIHlvdSB3aWxsIGdldCBhIG51bWJlcgorICAgICBvZiAvZGV2L3h0eSBl bnRyaWVzIGNyZWF0ZWQuCisKKyAgICAgSWdub3JlIC9kZXYveHR5MCwgaXQgaXMgYSBzcGVjaWFs IGNhc2UuIEFsbCB0aGUgb3RoZXJzIGNhbiBiZSB1c2VkCisgICAgIGV4YWN0bHkgYXMgaWYgdGhl eSB3ZXJlIGEgc2VyaWFsIGxpbmUgKGUuZy4gL2Rldi90dHkpIGNvbm5lY3RlZCB0byBhCisgICAg IG1vZGVtLCBleGNlcHQgdGhhdCBpbnN0ZWFkIG9mIHVzaW5nIEhheWVzLXN0eWxlIGNvbW1hbmRz LCB5b3UgdXNlCisgICAgIFBBRCBjb21tYW5kcy4KKworICAgICBGcm9tIGtlcm1pdCB5b3UgY2Fu IGRvIGEgJ3NldCBsaW5lJyBjb21tYW5kIHRvLCBzYXksIC9kZXYveHR5MSwgdGhlbgorICAgICBz ZXQgeW91ciBkaWFsaW5nIGNvbW1hbmQgdG8gYmUgIkNBTEwgMTIzNDU2NzgiLCBldGMuIEFsbCB0 aGUgdXN1YWwKKyAgICAgUEFEIGNvbW1hbmRzIHdpbGwgd29yayAoU0VULCBQQVIsIGV0YykuCisK KyAgICAgSSBrbm93IG9mIG9uZSBjdXN0b21lciBpbiBBdXN0cmFsaWEgd2hvIGlzIHN1Y2Nlc3Nm dWxseSB1c2luZyB0aGlzLAorICAgICB3aXRoIGtlcm1pdCBzY3JpcHRzLCB0byBtYW5hZ2Ugc29t ZSBYLjI1LWNvbm5lY3RlZCBzd2l0Y2hlcy4gSGUgdXNlZAorICAgICBzdGFuZGFyZCBrZXJtaXQs IGNvbXBpbGVkIGZvciBTb2xhcmlzIDIsIHdpdGggWC4yNSA4LjAgeHR5IGRldmljZXMuCisKKzMu Ny40LiBTdW4gV29ya3N0YXRpb24gS2V5Ym9hcmQgTWFwcGluZworCisgICBbIFs0NDJdVG9wIF0g WyBbNDQzXUNvbnRlbnRzIF0gWyBbNDQ0XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0NDVdTmV4dCBd CisgICBbIFs0NDZdUHJldmlvdXMgXQorCisgICBIaW50cyBmb3IgdXNpbmcgYSBTdW4gd29ya3N0 YXRpb24ga2V5Ym9hcmQgZm9yIFZUIGVtdWxhdGlvbiB3aGVuCisgICBhY2Nlc3NpbmcgVk1TLCBm cm9tIHRoZSBbNDQ3XWNvbXAub3Mudm1zIG5ld3Nncm91cDoKKworICAgICBGcm9tOiBKZXJyeSBM ZWljaHRlciA8bGVpY2h0ZXJAc21hcnRzLmNvbT4KKyAgICAgTmV3c2dyb3VwczogY29tcC5vcy52 bXMKKyAgICAgU3ViamVjdDogUmU6IFZUMTAwIGtleWJvYXJkIG1hcHBpbmcgdG8gU3VuIFggc2Vy dmVyCisgICAgIERhdGU6IE1vbiwgMTkgQXVnIDE5OTYgMTI6NDQ6MjEgLTA0MDAKKworICAgICA+ IEkgYW0gc3R1Y2sgcmlnaHQgbm93IHVzaW5nIGEgU3VuIGtleWJvYXJkICh0eXBlIDUpIG9uIHN5 c3RlbXMKKyAgICAgcnVubmluZyBTdW5PUworICAgICA+IGFuZCBTb2xhcmlzLiBJIHdvdWxkIGxp a2UgdG8gdXNlIEVWRSBvbiBhbiBPcGVuVk1TIGJveCB3aXRoCisgICAgIGRpc3BsYXkgYmFjayB0 bworICAgICA+IHRoZSBTdW4uIERvZXMgYW55b25lIGtub3cgb2YgYSBrZXlib2FyZCBtYXBwaW5n IChvciBzb21lIG90aGVyCisgICAgIHByb2NlZHVyZSkKKyAgICAgPiB3aGljaCB3aWxsIGFsbG93 IHRoZSBTdW4ga2V5Ym9hcmQgdG8gYXBwcm94aW1hdGUgYSBWVDEwMC9WVDIyMD8KKworICAgICBZ b3UgY2FuJ3QgZ2V0IGl0IGV4YWN0bHkgLSBiZWNhdXNlIHRoZSBrZXlwYWQgaGFzIG9uZSBmZXdl ciBrZXkgLQorICAgICBidXQgeW91IGNhbiBjb21lIHByZXR0eSBjbG9zZS4gSGVyZSdzIGEgc2V0 IG9mIGtleWRlZnMgSSB1c2U6CisKKyAga2V5Y29kZSAxMDE9S1BfMAorICBrZXljb2RlIDExOT1L UF8xCisgIGtleWNvZGUgMTIwPUtQXzIKKyAga2V5Y29kZSAxMjE9S1BfMworICBrZXljb2RlIDk4 PUtQXzQKKyAga2V5Y29kZSA5OT1LUF81CisgIGtleWNvZGUgMTAwPUtQXzYKKyAga2V5Y29kZSA3 NT1LUF83CisgIGtleWNvZGUgNzY9S1BfOAorICBrZXljb2RlIDc3PUtQXzkKKyAga2V5Y29kZSA1 Mj1LUF9GMQorICBrZXljb2RlIDUzPUtQX0YyCisgIGtleWNvZGUgNTQ9S1BfRjMKKyAga2V5Y29k ZSA1Nz1LUF9EZWNpbWFsCisgIGtleWNvZGUgMjg9TGVmdAorICBrZXljb2RlIDI5PVJpZ2h0Cisg IGtleWNvZGUgMzA9S1BfU2VwYXJhdG9yCisgIGtleWNvZGUgMTA1PUtQX0Y0CisgIGtleWNvZGUg Nzg9S1BfU3VidHJhY3QKKyAga2V5Y29kZSA4PUxlZnQKKyAga2V5Y29kZSAxMD1SaWdodAorICBr ZXljb2RlIDMyPVVwCisgIGtleWNvZGUgMzM9RG93bgorICBrZXljb2RlIDk3PUtQX0VudGVyCisK KyAgICAgUHV0IHRoaXMgaW4gYSBmaWxlIC0gSSB1c2UgImtleWRlZnMiIGluIG15IGhvbWUgZGly ZWN0b3J5IGFuZCBmZWVkCisgICAgIGl0IGludG8geG1vZG1hcDoKKworICB4bW9kbWFwIC0gPCRI T01FL2tleWRlZnMKKworICAgICBUaGlzIHRha2VzIGNhcmUgb2YgdGhlIGFycm93IGtleXMgYW5k IHRoZSAiY2FsY3VsYXRvciIga2V5IGNsdXN0ZXIuCisgICAgIFRoZSAiKyIga2V5IHdpbGwgcGxh eSB0aGUgcm9sZSBvZiB0aGUgREVDICIsIiBrZXkuIFRoZSBTdW4gIi0iIGtleQorICAgICB3aWxs IGJlIGxpa2UgdGhlIERFQyAiLSIga2V5LCB0aG91Z2ggaXQncyBpbiBhIHBoeXNpY2FsbHkgZGlm ZmVyZW50CisgICAgIHBvc2l0aW9uIC0gd2hlcmUgdGhlIERFQyBQRjQga2V5IGlzLiBUaGUgUEY0 IGtleSBpcyAuLi4gZGFtbiwgSSdtCisgICAgIG5vdCBzdXJlIHdoZXJlICJrZXkgMTA1IiBpcy4g SSAqdGhpbmsqIGl0IG1heSBiZSBvbiB0aGUgbGVmdG1vc3Qga2V5CisgICAgIG9mIHRoZSBncm91 cCBvZiBmb3VyIGp1c3QgYWJvdmUgdGhlICJjYWxjdWxhdG9yIiBrZXkgY2x1c3Rlci4KKworICAg ICBJIGFsc28gZXhlY3V0ZSB0aGUgZm9sbG93aW5nICh0aGlzIGlzIGFsbCBpbiBteSB4aW5pdHJj IGZpbGUpOgorCisgIHhtb2RtYXAgLWUgJ2tleXN5bSBLUF9EZWNpbWFsID0gS1BfRGVjaW1hbCcK KyAgeG1vZG1hcCAtZSAna2V5c3ltIEJhY2tTcGFjZSA9IERlbGV0ZSBCYWNrU3BhY2UnIFwKKyAg ICAgICAgICAtZSAna2V5c3ltIERlbGV0ZSA9IEJhY2tTcGFjZSBEZWxldGUnCisgIHhtb2RtYXAg LWUgJ2tleXN5bSBLUF9EZWNpbWFsID0gRGVsZXRlIERlbGV0ZSBLUF9EZWNpbWFsJworICB4bW9k bWFwIC1lICdhZGQgbW9kMSA9IE1ldGFfUicKKyAgeG1vZG1hcCAtZSAnYWRkIG1vZDEgPSBNZXRh X0wnCisKKyAgICAgQmV3YXJlIG9mIG9uZSB0aGluZyBhYm91dCB4bW9kbWFwOiBLZXltYXAgY2hh bmdlcyBhcmUgYXBwbGllZCB0byB0aGUKKyAgICAgKndob2xlIHdvcmtzdGF0aW9uKiwgbm90IGp1 c3QgdG8gaW5kaXZpZHVhbCB3aW5kb3dzLiBUaGVyZSBpcywgaW4KKyAgICAgZmFjdCwgbm8gd2F5 IEkga25vdyBvZiB0byBhcHBseSB0aGVtIHRvIGluZGl2aWR1YWwgd2luZG93cy4gVGhlc2UKKyAg ICAgZGVmaW5pdGlvbnMgKm1heSogY29uZnVzZSBzb21lIFVuaXggcHJvZ3JhbXMgKGFuZC9vciBz b21lIFVuaXgKKyAgICAgdXNlcnMpLgorCisgICAgIElmIHlvdSdyZSB1c2luZyBNb3RpZiwgeW91 IG1heSBhbHNvIG5lZWQgdG8gYXBwbHkgYmluZGluZ3MgYXQgdGhlCisgICAgIE1vdGlmIGxldmVs LiBJZiBqdXN0IHVzaW5nIHhtb2RtYXAgZG9lc24ndCB3b3JrLCBJIGNhbiB0cnkgYW5kIGRpZwor ICAgICB0aGF0IHN0dWZmIHVwIGZvciB5b3UuCisKKzMuNy41LiBTb2xhcmlzIFBQUCBDb25uZWN0 aW9ucworCisgICBbIFs0NDhdVG9wIF0gWyBbNDQ5XUNvbnRlbnRzIF0gWyBbNDUwXVNlY3Rpb24g Q29udGVudHMgXSBbIFs0NTFdTmV4dCBdCisgICBbIFs0NTJdUHJldmlvdXMgXQorCisgICBUaGUg Zm9sbG93aW5nIGlzIGEgcmVwb3J0IGZyb20gYSB1c2VyIG9mIEMtS2VybWl0IDguMCBvbiBTb2xh cmlzIDggYW5kCisgICA5LCB3aG8gaGFkIGNvbXBsYWluZWQgdGhhdCB3aGlsZSBLZXJtaXQgZmls ZSB0cmFuc2ZlcnMgd29ya2VkIHBlcmZlY3RseQorICAgb24gZGlyZWN0IChub24tUFBQKSBkaWFs b3V0IGNvbm5lY3Rpb25zLCB0aGV5IGZhaWxlZCBtaXNlcmFibHkgb24gUFBQCisgICBjb25uZWN0 aW9ucy4gV2Ugc3VnZ2VzdGVkIHRoYXQgdGhlIFBQUCBkaWFsZXIgcHJvYmFibHkgd2FzIG5vdCBz ZXR0aW5nCisgICB0aGUgcG9ydCBhbmQvb3IgbW9kZW0gdXAgaW4gdGhlIHNhbWUgd2F5IHRoYXQg S2VybWl0IGRpZDoKKworICAgICBJIHdhbnQgdG8gZ2V0IGJhY2sgb24gdGhpcyBhbmQgdGVsbCB5 b3Ugd2hhdCB0aGUgcmVzb2x1dGlvbiB3YXMuIFlvdQorICAgICBwb2ludGVkIG1lIGluIHRoZSBk aXJlY3Rpb24gb2YgZmxvdyBjb250cm9sLCB3aGljaCB0dXJuZWQgb3V0IHRvIGJlCisgICAgIHRo ZSBrZXkuCisKKyAgICAgU29tZSBkaXNjdXNzaW9uIG9uIHRoZSBjb21wLnVuaXguc29sYXJpcyBu ZXdzZ3JvdXAgbGVkIHRvIHNvbWUKKyAgICAgY29tbWVudHMgZnJvbSBHcmVnIEFuZHJld3MgYWJv dXQgdGhlIG5lZWQgdG8gdXNlIHRoZSB1dWNwIGRyaXZlciB0bworICAgICB0YWxrIHRvIHRoZSBt b2RlbSAoL2Rldi9jdWEvYSkuIEkgaGFkIHRvIHJlbWluZCBHcmVnIHRoYXQgbm8gbWF0dGVyCisg ICAgIHdoYXQgdGhlIG1hbnBhZ2VzIGZvciB0aGUgenMgYW5kIHNlIGRyaXZlcnMgc2F5LCB0aGUg cHBwIHRoYXQgU3VuCisgICAgIHJlbGVhc2VkIHdpdGggU29sYXJpcyA4IDcvMDEsIGFuZCBoYXMg aW4gU29sYXJpcyA5LCBpcyBhIHNldHVpZCByb290CisgICAgIHByb2dyYW0sIGFuZCBzaW1wbHkg dHJ5aW5nIHRvIG1ha2UgYSBwcHBkIGNhbGwgZnJvbSB1c2VyIHNwYWNlCisgICAgIHNwZWNpZnlp bmcgL2Rldi9jdWEvYSB3b3VsZCBmYWlsIGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMuIEdyZWcKKyAg ICAgZmluYWxseSBwdXQgdGhlIHF1ZXN0aW9uIHRvIHRoZSBwcHAgcGVvcGxlLCB3aG8gY2FtZSBi YWNrIHdpdGgKKyAgICAgaW5mb3JtYXRpb24gdGhhdCBpcyBub3QgbGFpZCBvdXQgYW55d2hlcmUg aW4gdGhlIGRvY3MgYXZhaWxhYmxlIGZvcgorICAgICBTb2xhcmlzIHVzZXJzLiBOYW1lbHksIHB1 dCAvZGV2L2N1YS9hIGluIG9uZSBvZiB0aGUgcHJpdmlsZWdlZAorICAgICBvcHRpb25zIGZpbGVz IGluIHRoZSAvZXRjL3BwcCBkaXJlY3RvcnkuIFRoYXQsIHBsdXMgcmVzZXR0aW5nIHRoZQorICAg ICBPQlAgdHR5YS1pZ25vcmUtY2QgZmxhZyAodGhpcyBpcyBTdW4gaGFyZHdhcmUpIHRvIGZhbHNl LCBzZWVtcyB0bworICAgICBoYXZlIHNvbHZlZCB0aGUgcHJvYmxlbXMuCisKKyAgICAgV2hpbGUg SSBub3RlIHRoYXQgSSBoYWQgaW5zdGFsbGVkIEtlcm1pdCBzdWlkIHRvIHV1Y3AgdG8gdXNlCisg ICAgIC9kZXYvY3VhL2Egb24gdGhpcyBwYXJ0aWN1bGFyIGJveCwgaXQgc2VlbXMgdG8gcnVuIGZp bmUgdGhyb3VnaAorICAgICAvZGV2L3Rlcm0vYS4gTm90IHNvIHdpdGggcHBwZC4KKworICAgICBX aXRoIHRoaXMgY2hhbmdlIGluIHBsYWNlLCBJIHNlZW0gdG8gYmUgYWJsZSB0byB1cGxvYWQgYW5k IGRvd25sb2FkCisgICAgIHRocm91Z2ggdGVsbmV0IHJ1biBvbiBLZXJtaXQgd2l0aCB0aGUgbWF4 aW11bSBsZW5ndGggcGFja2V0cy4gSSBub3RlCisgICAgIHRoYXQgdGhlIHdpbmRvdyBhbGxvY2F0 aW9uIGRpc3BsYXkgZG9lcyBzaG93IFNUUkVBTUlORywgdXNpbmcKKyAgICAgdGVsbmV0LiBSdW5u aW5nIHNzaCBvbiBLZXJtaXQsIEkgc2VlIHRoZSBzdGFuZGFyZCAxIG9mIDMwIHdpbmRvd3MKKyAg ICAgZGlzcGxheSwgYW5kIG5vdGUgdGhhdCB0aGVyZSBhcHBlYXJzIHRvIGJlIGEgYnVmZmVyIGxl bmd0aCBsaW1pdAorICAgICBiZXR3ZWVuIDEwMDAgYW5kIDIwMDAgYnl0ZXMuIFJ1biB3aXRoIDEw MDAsIGFuZCBpdCdzIHRpY2stdG9jaywKKyAgICAgc29saWQgYXMgYSByb2NrLiBXaXRoIDIwMDAg SSBzZWUgdGltZW91dCBlcnJvcnMgYW5kIFJUUy9DVFMgYWN0aW9uCisgICAgIG9uIHRoZSBtb2Rl bS4KKworICAgS2VybWl0J3MgcGFja2V0LWxlbmd0aCBhbmQgb3RoZXIgY29udHJvbHMgbGV0IHlv dSBtYWtlIGFkanVzdG1lbnRzIGxpa2UKKyAgIHRoaXMgdG8gZ2V0IGFyb3VuZCB3aGF0ZXZlciBv YnN0YWNsZXMgbWlnaHQgYmUgdGhyb3duIHVwIC0tIGluIHRoaXMKKyAgIGNhc2UgKHJ1bm5pbmcg S2VybWl0IG92ZXIgc3NoKSwgdGhlIHVuZGVybGluZyBTb2xhcmlzIFBUWSBkcml2ZXIuCisKKzMu Ny42LiBTb2xhcmlzIDIuNCBhbmQgRWFybGllcgorCisgICBbIFs0NTNdVG9wIF0gWyBbNDU0XUNv bnRlbnRzIF0gWyBbNDU1XVNlY3Rpb24gQ29udGVudHMgXSBbCisgICBbNDU2XVByZXZpb3VzIF0K KworICAgQy1LZXJtaXQgY2FuJ3QgYmUgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5IHVuZGVyIFNvbGFy aXMgMi4zIHVzaW5nCisgICBTVU5Xc3BybyBjYyAyLjAuMSB1bmxlc3MgYXQgbGVhc3Qgc29tZSBv ZiB0aGUgZm9sbG93aW5nIHBhdGNoZXMgYXJlCisgICBhcHBsaWVkIHRvIGNjIChpdCBpcyBub3Qg a25vd24gd2hpY2ggb25lKHMpLCBpZiBhbnksIGZpeCB0aGUgcHJvYmxlbSk6CisKKyAgICAgKiAx MDA5MzUtMDEgU3BhcmNDb21waWxlciBDIDIuMC4xOiBiYWQgY29kZSBnZW5lcmF0ZWQgd2hlbiBh ZGRyZXNzZXMKKyAgICAgICBvZiB0d28gZG91YmxlIGFyZ3VtZW50cyBhcmUgaW52b2x2ZWQKKyAg ICAgKiAxMDA5NjEtMDUgU1BBUkNjb21waWxlcnMgQyAyLjAuMTogY29uZGl0aW9uYWwgZXhwcmVz c2lvbiB3aXRoCisgICAgICAgZnVuY3Rpb24gcmV0dXJuaW5nIHN0cnVjdHVyZSBnaXZlcyB3cm9u ZyB2YWx1ZQorICAgICAqIDEwMDk3NC0wMSBTcGFyY1dvcmtzIDIuMC4xOiBkYngganVtYm8gcGF0 Y2gKKyAgICAgKiAxMDE0MjQtMDEgU1BBUkN3b3JrcyAyLjAuMSBtYWtldG9vbCBTRUdWJ3MgaW5z dGFudGx5IG9uIFNvbGFyaXMgMi4zCisKKyAgIFdpdGggdW5wYXRjaGVkIGNjIDIuMC4xLCB0aGUg c3ltcHRvbSBpcyB0aGF0IGNlcnRhaW4gbW9kdWxlcyBnZW5lcmF0ZQorICAgdHJ1bmNhdGVkIG9i amVjdCBmaWxlcywgcmVzdWx0aW5nIGluIG1hbnkgdW5yZXNvbHZlZCByZWZlcmVuY2VzIGF0IGxp bmsKKyAgIHRpbWUuCisKKyAgICAgVGhlIHJlc3Qgb2YgdGhlIHByb2JsZW1zIGluIHRoaXMgc2Vj dGlvbiBoYXZlIHRvIGRvIHdpdGgKKyAgICAgYmlkaXJlY3Rpb25hbCB0ZXJtaW5hbCBwb3J0cyBh bmQgdGhlIFNvbGFyaXMgUG9ydCBNb25pdG9yLiBBIGJ1ZyBpbgorICAgICBDLUtlcm1pdCA1QSB0 aWNrZWQgYSBidWcgaW4gU29sYXJpcy4gVGhlIEMtS2VybWl0IGJ1ZyB3YXMgZml4ZWQgaW4KKyAg ICAgdmVyc2lvbiA2LjAsIGFuZCB0aGUgU29sYXJpcyBidWcgd2FzIGZpeGVkIGluIDIuNCAoSSB0 aGluaywgb3IgbWF5YmUKKyAgICAgMi41KS4KKworICAgUmVwb3J0ZWRseSwgIkMtS2VybWl0IC4u LiBjYXVzZXMgYSBTUEFSQ3N0YXRpb24gcnVubmluZyBTb2xhcmlzIDIuMyB0bworICAgcGFuaWMg YWZ0ZXIgdGhlIG1vZGVtIGNvbm5lY3RzLiBJIGhhdmUgdHJpZWQgY29tcGlsaW5nIEMtS2VybWl0 IHdpdGgKKyAgIFN1bidzIHVuYnVuZGxlZCBDIGNvbXBpbGVyLCB3aXRoIEdDQyBWZXJzaW9ucyAy LjQuNSBhbmQgMi41LjMsIHdpdGgKKyAgIG1ha2UgdGFyZ2V0cyAnc3Vub3M1MScsICdzdW5vczUx dGNwJywgJ3N1bm9zNTFnY2MnLCBhbmQgZXZlbiAnc3lzNXI0JywKKyAgIGFuZCBlYWNoIHRpbWUg aXQgY29tcGlsZXMgYW5kIHN0YXJ0cyB1cCBjbGVhbmx5LCBidXQgd2l0aG91dCBmYWlsLCBhcwor ICAgc29vbiBhcyBJIGRpYWwgdGhlIG51bWJlciBhbmQgZ2V0IGEgJ0NPTk5FQ1QnIG1lc3NhZ2Ug ZnJvbSB0aGUgbW9kZW0sIEkKKyAgIGdldDoKKworICBCQUQgVFJBUAorICBrZXJtaXQ6IERhdGEg ZmF1bHQKKyAga2VybmVsIHJlYWQgZmF1bHQgYXQgYWRkcj0weDQ1YywgcG1lPTB4MAorICBTeW5j IEVycm9yIFJlZyA4MCA8SU5WQUxJRD4KKyAgLi4uCisgIHBhbmljOiBEYXRhIEZhdWx0LgorICAu Li4KKyAgUmVib290aW5nLi4uCisKKyAgIFRoZSBzYW1lIG1vZGVtIHdvcmtzIGZpbmUgZm9yIFVV Q1AvdGlwIGNhbGxpbmcuIiBBbHNvIChyZXBvcnRlZGx5KSwKKyAgIHRoaXMgb25seSBoYXBwZW5z IGlmIHRoZSBkaWFsb3V0IHBvcnQgaXMgY29uZmlndXJlZCBhcyBpbi9vdXQgdmlhCisgICBhZG1p bnRvb2wuIElmIGl0IGlzIGNvbmZpZ3VyZWQgYXMgb3V0LW9ubHksIG5vIHByb2JsZW0uIFRoaXMg aXMgdGhlCisgICBzYW1lIGRpYWxpbmcgY29kZSB0aGF0IHdvcmtzIG9uIGh1bmRyZWRzIG9mIG90 aGVyIFN5c3RlbS1WIGJhc2VkIFVuaXgKKyAgIE9TJ3MuIFNpbmNlIGl0IHNob3VsZCBiZSBpbXBv c3NpYmxlIGZvciBhIHVzZXIgcHJvZ3JhbSB0byBjcmFzaCB0aGUKKyAgIG9wZXJhdGluZyBzeXN0 ZW0sIHRoaXMgcHJvYmxlbSBtdXN0IGJlIGNoYWxrZWQgdXAgdG8gYSBTb2xhcmlzIGJ1Zy4KKyAg IEV2ZW4gaWYgeW91IFNFVCBDQVJSSUVSIE9GRiwgQ09OTkVDVCwgYW5kIGRpYWwgbWFudWFsbHkg YnkgdHlwaW5nCisgICBBVERUbm5ubm5ubiwgdGhlIHN5c3RlbSBwYW5pY3MgYXMgc29vbiBhcyB0 aGUgbW9kZW0gaXNzdWVzIGl0cyBDT05ORUNUCisgICBtZXNzYWdlLiAoQ2xlYXJseSwgd2hlbiB5 b3UgYXJlIGRpYWxpbmcgbWFudWFsbHksIEMtS2VybWl0IGRvZXMgbm90CisgICBrbm93IGEgdGhp bmcgYWJvdXQgdGhlIENPTk5FQ1QgbWVzc2FnZSwgYW5kIHNvIHRoZSBwYW5pYyBpcyBhbG1vc3QK KyAgIGNlcnRhaW5seSBjYXVzZWQgYnkgdGhlIHRyYW5zaXRpb24gb2YgdGhlIENhcnJpZXIgRGV0 ZWN0IChDRCkgbGluZSBmcm9tCisgICBvZmYgdG8gb24uKSBUaGlzIHByb2JsZW0gd2FzIHJlcG9y dGVkIGJ5IG1hbnkgdXNlcnMsIGFsbCBvZiB3aG9tIHNheQorICAgdGhhdCBDLUtlcm1pdCB3b3Jr ZWQgZmluZSBvbiBTb2xhcmlzIDIuMSBhbmQgMi4yLiBJZiB0aGUgc3BlY3VsYXRpb24KKyAgIGFi b3V0IENEIGlzIHRydWUsIHRoZW4gYSBwb3NzaWJsZSB3b3JrYXJvdW5kIG1pZ2h0IGJlIHRvIGNv bmZpZ3VyZSB0aGUKKyAgIG1vZGVtIHRvIGxlYXZlIENEIG9uIChvciBvZmYpIGFsbCB0aGUgdGlt ZS4gUGVyaGFwcyBieSB0aGUgdGltZSB5b3UKKyAgIHJlYWQgdGhpcywgYSBwYXRjaCB3aWxsIGhh dmUgYmVlbiBpc3N1ZWQgZm9yIFNvbGFyaXMgMi4zLgorCisgICBUaGUgZm9sbG93aW5nIGlzIGZy b20gS2FybCBTLiBNYXJzaCwgU3lzdGVtcyAmIE5ldHdvcmtzIEFkbWluaXN0cmF0b3IsCisgICBB TUJJWCBTeXN0ZW1zIENvcnAsIFJvY2hlc3RlciwgTlk6CisKKyAgICAgRW52aXJvbm1lbnQ6IFNv bGFyaXMgMi4zIFBhdGNoIDEwMTMxOC00NSBDLUtlcm1pdCA1QSgxODkpIChhbmQKKyAgICAgcHJl c3VtYWJseSB0aGlzIGFwcGxpZXMgdG8gMTg4IGFuZCAxOTAgYWxzbykuIGVlcHJvbSBzZXR0aW5n OgorCisgIHR0eWEtcnRzLWR0ci1vZmY9ZmFsc2UKKyAgdHR5YS1pZ25vcmUtY2Q9ZmFsc2UKKyAg dHR5YS1tb2RlPTE5MjAwLDgsbiw4LC0KKworICAgICBUbyB1c2UgQy1LZXJtaXQgb24gYSBiaWRp cmVjdGlvbmFsIHBvcnQgaW4gdGhpcyBlbnZpcm9ubWVudCwgZG8gbm90CisgICAgIHVzZSBhZG1p bnRvb2wgdG8gY29uZmlndXJlIHRoZSBwb3J0LiBVc2UgYWRtaW50b29sIHRvIGRlbGV0ZSBhbnkK KyAgICAgc2VydmljZXMgcnVubmluZyBvbiB0aGUgcG9ydCBhbmQgdGhlbiBxdWl0IGFkbWludG9v bCBhbmQgaXNzdWUgdGhlCisgICAgIGZvbGxvd2luZyBjb21tYW5kOgorCisgIHBtYWRtIC1hIC1w IHpzbW9uIC1zIHR0eWIgLWkgcm9vdCAtZnUgLXYgMSAtbSAiYHR0eWFkbSAtYiAtZCAvZGV2L3Rl cm0vYiBcCisgIC1sIGNvbnR0eUggLW0gbGR0ZXJtLHR0Y29tcGF0IC1zIC91c3IvYmluL2xvZ2lu IC1TIG5gIgorCisgICAgIFtOT1RFOiBUaGlzIHdhcyBjb3BpZWQgZnJvbSBhIGJsdXJyeSBmYXgs IHNvIHBsZWFzZSBjaGVjayBpdAorICAgICBjYXJlZnVsbHldIHdoZXJlOgorCisgIC1hID0gQWRk IHNlcnZpY2UKKyAgLXAgPSBwbXRhZyAoenNtb24pCisgIC1zID0gc2VydmljZSB0YWcgKHR0eWIp CisgIC1pID0gaWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHNlcnZpY2UgdGFnIChyb290KQorICAt ZnUgPSBjcmVhdGUgdXRtcCBlbnRyeQorICAtdiA9IHZlcnNpb24gb2YgdHR5YWRtCisgIC1tID0g cG9ydCBtb25pdG9yLXNwZWNpZmljIHBvcnRpb24gb2YgdGhlIHBvcnQgbW9uaXRvciBhZG1pbmlz dHJhdGl2ZSBmaWxlCisgICAgICAgZW50cnkgZm9yIHRoZSBzZXJ2aWNlCisgIC1iID0gc2V0IHVw IHBvcnQgZm9yIGJpZGlyZWN0aW9uYWwgdXNlCisgIC1kID0gZnVsbCBwYXRoIG5hbWUgb2YgZGV2 aWNlCisgIC1sID0gd2hpY2ggdHR5bGFiZWwgaW4gdGhlIC9ldGMvdHR5ZGVmcyBmaWxlIHRvIHVz ZQorICAtbSA9IGEgbGlzdCBvZiBwdXNoYWJsZSBTVFJFQU1TIG1vZHVsZXMKKyAgLXMgPSBwYXRo bmFtZSBvZiBzZXJ2aWNlIHRvIGJlIGludm9rZWQgd2hlbiBjb25uZWN0aW9uIHJlcXVlc3QgcmVj ZWl2ZWQKKyAgLVMgPSBzb2Z0d2FyZSBjYXJyaWVyIGRldGVjdCBvbiBvciBvZmYgKG4gPSBvZmYp CisKKyAgICAgIlRoaXMgaXMgZXhhY3RseSBob3cgSSB3YXMgYWJsZSB0byBnZXQgS2VybWl0IHRv IHdvcmsgb24gYQorICAgICBiaS1kaXJlY3Rpb25hbCBwb3J0IHdpdGhvdXQgY3Jhc2hpbmcgdGhl IHN5c3RlbS4iCisKKyAgIE9uIHRoZSBTb2xhcmlzIHByb2JsZW0sIGFsc28gc2VlIFN1blNvbHZl IEJ1ZyBJRCAxMTUwNDU3ICgiVXNpbmcKKyAgIEMtS2VybWl0LCBnZXQgQmFkIFRyYXAgb24gcmVj ZWl2aW5nIHByb21wdCBmcm9tIHJlbW90ZSBzeXN0ZW0iKS4KKyAgIEFub3RoZXIgdXNlciByZXBv cnRlZCAiU28sIEkgaGF2ZSBjb21tdW5pY2F0ZWQgd2l0aCB0aGUgU3VuIHRlY2gKKyAgIHN1cHBv cnQgcGVyc29uIHRoYXQgc3VibWl0dGVkIHRoaXMgYnVnIHJlcG9ydCBbMTE1MDQ1N10uIEFwcGFy ZW50bHksCisgICB0aGlzIGJ1ZyB3YXMgZml4ZWQgdW5kZXIgb25lIG9mIHRoZSBqdW1ibyBrZXJu ZWwgcGF0Y2hlcy4gSXQgd291bGQgc2VlbQorICAgdGhhdCB0aGUgZml4IGRpZCBub3QgbGl2ZSBv biBpbnRvIDEwMTMxOC00NSwgYXMgdGhpcyBpcyBFWEFDVExZIHRoZQorICAgZXJyb3IgdGhhdCBJ IHNlZSB3aGVuIEkgYXR0ZW1wdCB0byB1c2Uga2VybWl0IG9uIG15IHN5c3RlbS4iCisKKyAgIExh dGVyIChBdWcgOTQpLi4uIEMtS2VybWl0IGRpYWxvdXQgc3VjY2Vzc2Z1bGx5IHRlc3RlZCBvbiBh IFN1bjRtIHdpdGgKKyAgIGEgaGVhdmlseSBwYXRjaGVkIFNvbGFyaXMgMi4zLiBUaGUgcGF0Y2hl cyBtb3N0IGxpa2VseSB0byBoYXZlIGJlZW4KKyAgIHJlbGV2YW50OgorCisgICAgICogMTAxMzE4 LTUwOiBTdW5PUyA1LjM6IEp1bWJvIHBhdGNoIGZvciBrZXJuZWwgKGluY2x1ZGVzIGxpYmMsIGxv Y2tkKQorICAgICAqIDEwMTcyMC0wMTogU3VuT1MgNS4zOiB0dHltb24gLSBwcm9tcHQgbm90IGFs d2F5cyB2aXNpYmxlIG9uIGEgbW9kZW0KKyAgICAgICBjb25uZWN0aW9uCisgICAgICogMTAxODE1 LTAxOiBTdW5PUyA1LjM6IERhdGEgZmF1bHQgaW4gcHV0KCkgTlVMTCBxdWV1ZSBwYXNzZWQgZnJv bQorICAgICAgIHR0eWNvbW1vbl9xZnVsbCgpCisgICAgICogMTAxMzI4LTAxOiBTdW5PUyA1LjM6 IEF1dG9tYXRpb24gc2NyaXB0IHRvIHByb3Blcmx5IHNldHVwIHR0eSBwb3J0cworICAgICAgIHBy aW9yIHRvIFBDVFMgZXhlY3V0aW9uCisKKyAgIFN0aWxsIGxhdGVyIChOb3YgOTQpOiBhbm90aGVy IHVzZXIgKEJvIEt1bGxtYXIgaW4gU3dlZGVuKSByZXBvcnRzIHRoYXQKKyAgIGFmdGVyIHVzaW5n IEMtS2VybWl0IHRvIGRpYWwgb3V0IG9uIGEgYmlkaXJlY3Rpb25hbCBwb3J0LCB0aGUgcG9ydAor ICAgbWlnaHQgbm90IGFuc3dlciBzdWJzZXF1ZW50IGluY29taW5nIGNhbGxzLCBhbmQgc2F5cyAi dGhlIHByb2JsZW0gaXMKKyAgIGVhc3kgZW5vdWdoIHRvIGZpeCB3aXRoIHRoZSBTZXJpYWwgUG9y dCBNYW5hZ2VyOyBJIGp1c3QgZGVsZXRlIHRoZQorICAgc2VydmljZSBhbmQgaW5zdGFsbCBpdCBh Z2FpbiB1c2luZyB0aGUgZ3JhcGhpY2FsIGludGVyZmFjZSwgd2hpY2gKKyAgIHVuZGVybmVhdGgg dXNlcyBjb21tYW5kcyBsaWtlIHNhY2FkbSBhbmQgcG1hZG0uIiBMYXRlciBCbyByZXBvcnRzLCAi SQorICAgaGF2ZSBmb3VuZCB0aGF0IGlmIEkgcnVuIEtlcm1pdCB3aXRoIHRoZSBmb2xsb3dpbmcg c2NyaXB0IHRoZW4gaXQKKyAgIHdvcmtzLiBUaGlzIHNjcmlwdCBpcyBmb3IgL2Rldi9jdWEvYSwg Ii1zIGEiIGlzIHRoZSBsYXN0IGEgaW4KKyAgIC9kZXYvY3VhL2E6CisKKyAgIyEgL2Jpbi9zaAor ICBrZXJtaXQKKyAgc2xlZXAgMgorICBzdXJ1biBwbWFkbSAtZSAtcCB6c21vbiAtcyBhCisKKzMu OC4gQy1LRVJNSVQgQU5EIFNVTk9TCisKKyAgIFsgWzQ1N11Ub3AgXSBbIFs0NThdQ29udGVudHMg XSBbIFs0NTldU2VjdGlvbiBDb250ZW50cyBdIFsgWzQ2MF1OZXh0IF0KKyAgIFsgWzQ2MV1QcmV2 aW91cyBdCisKKyAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzZWUgIkNlbGVzdGUncyBU dXRvcmlhbCBvbiBTdW5PUyA0LjEuMysKKyAgIE1vZGVtcyBhbmQgVGVybWluYWxzIjoKKworICBb NDYyXWh0dHA6Ly93d3cuc3Rva2VseS5jb20vCisKKyAgIEZvciBGQVFzLCBldGMsIGZyb20gU3Vu LCBzZWU6CisgICAgICogWzQ2M11odHRwOi8vYWNjZXNzMS5zdW4uY29tLworCisgICBGb3IgaGlz dG9yeSBvZiBTdW4gbW9kZWxzIGFuZCBTdW5PUyB2ZXJzaW9ucywgc2VlIChzaG91bGQgYmUgYWxs IHRoZQorICAgc2FtZSk6CisgICAgICogWzQ2NF1odHRwOi8vd3d3Lmx1ZGQubHV0aC5zZS9+YmVh ci9wcm9qZWN0L3N1bi9zdW4uaGFyZHdhcmUudHh0CisgICAgICogWzQ2NV1mdHA6Ly9mdHAubmV0 Y29tLmNvbS9wdWIvcnUvcnViaWNvbi9zdW4uaGR3ci5yZWYKKyAgICAgKiBbNDY2XWZ0cDovL2Z0 cC5pbnRuZXQubmV0L3B1Yi9TVU4vU3VuLUhhcmR3YXJlLVJlZgorCisgICBTdW4gU1BBUkNzdGF0 aW9uIHVzZXJzIHNob3VsZCByZWFkIHRoZSBzZWN0aW9uICJTZXR0aW5nIHVwIE1vZGVtCisgICBT b2Z0d2FyZSIgaW4gdGhlIERlc2t0b3AgU1BBUkMgU3VuIFN5c3RlbSAmIE5ldHdvcmsgTWFuYWdl cidzIEd1aWRlLiBJZgorICAgeW91IGRvbid0IHNldCB1cCB5b3VyIHNlcmlhbCBwb3J0cyBjb3Jy ZWN0bHksIEtlcm1pdCAoYW5kIG90aGVyCisgICBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSkgd29u J3Qgd29yayByaWdodC4KKworICAgQWxzbywgb24gY2VydGFpbiBTdW4gbW9kZWxzIGxpa2UgSVBD LCB0aGUgc2VyaWFsIHBvcnQgaGFyZHdhcmUgbWlnaHQKKyAgIG5lZWQgdG8gaGF2ZSBhIGp1bXBl ciBjaGFuZ2VkIHRvIG1ha2UgaXQgYW4gUlMtMjMyIHBvcnQgcmF0aGVyIHRoYW4KKyAgIFJTLTQy My4KKworICAgUmVwb3J0ZWRseSwgQy1LZXJtaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgb24g YSBTdW4gU1BBUkNzdGF0aW9uIGluCisgICBhbiBPcGVuIFdpbmRvd3Mgd2luZG93IHdpdGggc2Ny b2xsaW5nIGVuYWJsZWQuIERpc2FibGUgc2Nyb2xsaW5nLCBvcgorICAgZWxzZSBpbnZva2UgS2Vy bWl0IGluIGEgdGVybWluYWwgZW11bGF0aW9uIHdpbmRvdyAoeHRlcm0sIGNydHRvb2wsCisgICB2 dHRvb2wpIHVuZGVyIFN1blZpZXcgKHRoaXMgbWlnaHQgYmUgZml4ZWQgaW4gbGF0ZXIgU3VuT1Mg cmVsZWFzZXMpLgorCisgICBPbiB0aGUgU3VuIHdpdGggT3BlbiBXaW5kb3dzLCBhbiBhZGRpdGlv bmFsIHN5bXB0b20gaGFzIGJlZW4gcmVwb3J0ZWQ6CisgICBvdXRib3VuZCBTdW5MaW5rIFguMjUg Y29ubmVjdGlvbnMgIm1hZ2ljYWxseSIgdHJhbnNsYXRlIENSIHR5cGVkIGF0IHRoZQorICAga2V5 Ym9hcmQgaW50byBMRiBiZWZvcmUgdHJhbnNtaXNzaW9uIHRvIHRoZSByZW1vdGUgaG9zdC4gVGhp cyBkb2Vzbid0CisgICBoYXBwZW4gdW5kZXIgU3VuVmlldy4KKworICAgU0VUIENBUlJJRVIgT04s IHdoZW4gdXNlZCBvbiB0aGUgU3VuT1MgNC4xIHZlcnNpb24gb2YgQy1LZXJtaXQKKyAgIChjb21w aWxlZCBpbiB0aGUgQlNEIHVuaXZlcnNlKSwgY2F1c2VzIHRoZSBwcm9ncmFtIHRvIGhhbmcKKyAg IHVuaW50ZXJydXB0aWJseSB3aGVuIFNFVCBMSU5FIGlzIGlzc3VlZCBmb3IgYSBkZXZpY2UgdGhh dCBpcyBub3QKKyAgIGFzc2VydGluZyBjYXJyaWVyLiBXaGVuIEtlcm1pdCBpcyBidWlsdCBpbiB0 aGUgU3lzIFYgdW5pdmVyc2Ugb24gdGhlCisgICBzYW1lIGNvbXB1dGVyLCB0aGVyZSBpcyBubyBw cm9ibGVtIChpdCBjYW4gYmUgaW50ZXJydXB0ZWQgd2l0aCBDdHJsLUMpLgorICAgVGhpcyBpcyBh cHBhcmVudGx5IGEgbGltaXRhdGlvbiBvZiB0aGUgQlNELXN0eWxlIHR0eSBkcml2ZXIuCisKKyAg IFN1bk9TIDQuMSBDLUtlcm1pdCBoYXMgYmVlbiBvYnNlcnZlZCB0byBkdW1wIGNvcmUgd2hlbiBy dW5uaW5nIGEKKyAgIGNvbXBsaWNhdGVkIHNjcmlwdCBwcm9ncmFtIHVuZGVyIGNyb24uIFRoZSBk dW1wIGludmFyaWFibHkgb2NjdXJzIGluCisgICB0dG9jKCksIHdoaWxlIHRyeWluZyB0byBvdXRw dXQgYSBjaGFyYWN0ZXIgdG8gYSBUQ1AvSVAgVEVMTkVUCisgICBjb25uZWN0aW9uLiB0dG9jKCkg Y29udGFpbnMgYSB3cml0ZSgpIGNhbGwsIGFuZCB3aGVuIHRoZSBzeXN0ZW0gb3IgdGhlCisgICBu ZXR3b3JrIGlzIHZlcnkgYnVzeSwgdGhlIHdyaXRlKCkgY2FsbCBjYW4gZ2V0IHN0dWNrIGZvciBs b25nIHBlcmlvZHMKKyAgIG9mIHRpbWUuIFRvIGJyZWFrIG91dCBvZiBkZWFkbG9ja3MgY2F1c2Vk IGJ5IHN0dWNrIHdyaXRlKCkgY2FsbHMsIHRoZXJlCisgICBpcyBhbiBhbGFybSBhcm91bmQgdGhl IHdyaXRlKCkuIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNvcmUgZHVtcAorICAgb2NjdXJzIHdo ZW4gdGhpcyBhbGFybSBzaWduYWwgaXMgY2F1Z2h0LiAoVGhpcyBvbmUgaGFzIG5vdCBiZWVuCisg ICBvYnNlcnZlZCByZWNlbnRseSAtLSBwb3NzaWJseSBmaXhlZCBpbiBlZGl0IDE5MC4pCisKKyAg IE9uIFN1biBjb21wdXRlcnMgd2l0aCBTdW5PUyA0LjAgb3IgNC4xLCBTRVQgRkxPVyBSVFMvQ1RT IHdvcmtzIG9ubHkgaWYKKyAgIHRoZSBjYXJyaWVyIHNpZ25hbCBpcyBwcmVzZW50IGZyb20gdGhl IGNvbW11bmljYXRpb24gZGV2aWNlIGF0IHRoZSB0aW1lCisgICB3aGVuIEMtS2VybWl0IGVudGVy cyBwYWNrZXQgbW9kZSBvciBDT05ORUNUIG1vZGUuIElmIGNhcnJpZXIgaXMgbm90CisgICBzZW5z ZWQgKGUuZy4gd2hlbiBkaWFsaW5nKSwgQy1LZXJtaXQgZG9lcyBub3QgYXR0ZW1wdCB0byB0dXJu IG9uCisgICBSVFMvQ1RTIGZsb3cgY29udHJvbC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBTdW5PUyBz ZXJpYWwgZGV2aWNlIGRyaXZlcgorICAgZG9lcyBub3QgYWxsb3cgY2hhcmFjdGVycyB0byBiZSBv dXRwdXQgaWYgUlRTL0NUUyBpcyBzZXQgKENSVFNDVFMpIGJ1dAorICAgY2FycmllciAoYW5kIERT UikgYXJlIG5vdCBwcmVzZW50LiBXb3JrYXJvdW5kIChtYXliZSk6IFNFVCBDQVJSSUVSIE9GRgor ICAgYmVmb3JlIGdpdmluZyB0aGUgU0VUIExJTkUgY29tbWFuZCwgZXN0YWJsaXNoIHRoZSBjb25u ZWN0aW9uLCB0aGVuIFNFVAorICAgRkxPVyBSVFMvQ1RTCisKKyAgIEl0IGhhcyBhbHNvIGJlZW4g cmVwb3J0ZWQgdGhhdCBSVFMvQ1RTIGZsb3cgY29udHJvbCB1bmRlciBTdW5PUyA0LjEKKyAgIHRo cm91Z2ggNC4xLjMgd29ya3Mgb25seSBvbiBJTlBVVCwgbm90IG9uIG91dHB1dCwgYW5kIHRoYXQg dGhlcmUgaXMgYQorICAgcGF0Y2ggZnJvbSBTdW4gdG8gY29ycmVjdCB0aGlzIHByb2JsZW06IFBh dGNoLUlEIyBUMTAwNTEzLTA0LCAyMCBKdWx5CisgICAxOTkzICh0aGlzIHBhdGNoIG1pZ2h0IGFw cGx5IG9ubHkgdG8gU3VuT1MgNC4xLjMpLiBJdCBtaWdodCBhbHNvIGJlCisgICBuZWNlc3Nhcnkg dG8gY29uZmlndXJlIHRoZSBlZXByb20gcGFyYW1ldGVycyBvZiB0aGUgc2VyaWFsIHBvcnQ7IGUu Zy4KKyAgIGRvIHRoZSBmb2xsb3dpbmcgYXMgcm9vdCBhdCB0aGUgc2hlbGwgcHJvbXB0OgorCisg IGVlcHJvbSAgdHR5YS1pZ25vcmUtY2Q9ZmFsc2UKKyAgZWVwcm9tICB0dHlhLXJ0cy1kdHItb2Zm PXRydWUKKworICAgVGhlcmUgaGF2ZSBiZWVuIHJlcG9ydHMgb2YgZmlsZSB0cmFuc2ZlciBmYWls dXJlcyBvbiBTdW4tMyBzeXN0ZW1zIHdoZW4KKyAgIHVzaW5nIGxvbmcgcGFja2V0cyBhbmQvb3Ig bGFyZ2Ugd2luZG93IHNpemVzLiBPbmUgdXNlciBzYXlzIHRoYXQgd2hlbgorICAgdGhpcyBoYXBw ZW5zLCB0aGUgY29uc29sZSBpc3N1ZXMgbWFueSBjb3BpZXMgb2YgdGhpcyBtZXNzYWdlOgorCisg IGNoYW9zIHZtdW5peDogenMxOiByaW5nIGJ1ZmZlciBvdmVyZmxvdworCisgICBUaGlzIG1lYW5z IHRoYXQgU3VuT1MgaXMgbm90IHNjaGVkdWxpbmcgS2VybWl0IGZyZXF1ZW50bHkgZW5vdWdoIHRv CisgICBzZXJ2aWNlIGludGVycnVwdHMgZnJvbSB0aGUgenMgc2VyaWFsIGRldmljZSAoWmlsb2cg ODM1MCBTQ0Mgc2VyaWFsCisgICBjb21tdW5pY2F0aW9uIHBvcnQpIGJlZm9yZSBpdHMgaW5wdXQg c2lsbyBvdmVyZmxvd3MuIFdvcmthcm91bmQ6IHVzZQorICAgc21hbGxlciBwYWNrZXRzIGFuZC9v ciBhIHNtYWxsZXIgd2luZG93IHNpemUsIG9yIHVzZSAibmljZSIgdG8gaW5jcmVhc2UKKyAgIEtl cm1pdCdzIHByaW9yaXR5LiBVc2UgaGFyZHdhcmUgZmxvdyBjb250cm9sIGlmIGF2YWlsYWJsZSwg b3IgcmVtb3ZlCisgICBvdGhlciBhY3RpdmUgcHJvY2Vzc2VzIGJlZm9yZSBydW5uaW5nIEtlcm1p dC4KKworICAgU3VuTGluayBYLjI1IHN1cHBvcnQgaW4gQy1LZXJtaXQgNUEoMTkwKSB3YXMgYnVp bHQgYW5kIHRlc3RlZAorICAgc3VjY2Vzc2Z1bGx5IHVuZGVyIFN1bk9TIDQuMS4zYiBhbmQgU3Vu TGluayBYLjI1IDcuMDAuCisKKzMuOS4gQy1LRVJNSVQgQU5EIFVMVFJJWAorCisgICBbIFs0Njdd VG9wIF0gWyBbNDY4XUNvbnRlbnRzIF0gWyBbNDY5XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0NzBd TmV4dCBdCisgICBbIFs0NzFdUHJldmlvdXMgXQorCisgICBTZWUgYWxzbzogVGhlIFs0NzJdY29t cC51bml4LnVsdHJpeCBhbmQgWzQ3M11jb21wLnN5cy5kZWMgbmV3c2dyb3Vwcy4KKworICAgVGhl cmUgaXMgbm8gaGFyZHdhcmUgZmxvdyBjb250cm9sIGluIFVsdHJpeC4gVGhhdCdzIG5vdCBhIEtl cm1pdAorICAgZGVmaWNpZW5jeSwgYnV0IGFuIFVsdHJpeCBvbmUuCisKKyAgIFdoZW4gc2VuZGlu ZyBmaWxlcyB0byBDLUtlcm1pdCBvbiBhIFRlbG5ldCBjb25uZWN0aW9uIHRvIGEgcmVtb3RlCisg ICBVbHRyaXggc3lzdGVtLCB5b3UgbXVzdCBTRVQgUFJFRklYSU5HIEFMTCAob3IgYXQgbGVhc3Qg cHJlZml4IG1vcmUKKyAgIGNvbnRyb2wgY2hhcmFjdGVycyB0aGFuIGFyZSBzZWxlY3RlZCBieSBT RVQgUFJFRklYSU5HIENBVVRJT1VTKS4KKworICAgUmVwb3J0ZWRseSwgREVDIFVMVFJJWCA0LjMg aXMgaW1tdW5lIHRvIEMtS2VybWl0J3MgZGlzYWJsaW5nIG9mCisgICBTSUdRVUlULCB3aGljaCBp cyB0aGUgc2lnbmFsIHRoYXQgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIHVzZXIgdHlwZXMKKyAgIEN0 cmwtXCwgd2hpY2gga2lsbHMgdGhlIGN1cnJlbnQgcHJvY2VzcyAoaS5lLiBDLUtlcm1pdCkgYW5k IGR1bXBzIGNvcmUuCisgICBEaWFnbm9zaXMgYW5kIGN1cmUgdW5rbm93bi4gV29ya2Fyb3VuZDog YmVmb3JlIHN0YXJ0aW5nIEMtS2VybWl0IC0tIG9yCisgICBmb3IgdGhhdCBtYXR0ZXIsIHdoZW4g eW91IGZpcnN0IGxvZyBpbiBiZWNhdXNlIHRoaXMgYXBwbGllcyB0byBhbGwKKyAgIHByb2Nlc3Nl cywgbm90IGp1c3QgS2VybWl0IC0tIGdpdmUgdGhlIGZvbGxvd2luZyBVbml4IGNvbW1hbmQ6CisK KyAgc3R0eSBxdWl0IHVuZGVmCisKKyAgIENlcnRhaW4gb3BlcmF0aW9ucyBkcml2ZW4gYnkgUlMt MjMyIG1vZGVtIHNpZ25hbCBkbyBub3Qgd29yayBvbgorICAgREVDc3RhdGlvbnMgb3Igb3RoZXIg REVDIHBsYXRmb3JtcyB3aG9zZSBzZXJpYWwgaW50ZXJmYWNlcyB1c2UgTU1QCisgICBjb25uZWN0 b3JzIChERUMgdmVyc2lvbiBvZiBSSjQ1IHRlbGVwaG9uZSBqYWNrIHdpdGggb2Zmc2V0IHRhYiku IFRoZXNlCisgICBjb25uZWN0b3JzIGNvbnZleSBvbmx5IHRoZSBEU1IgYW5kIERUUiBtb2RlbSBz aWduYWxzLCBidXQgbm90IGNhcnJpZXIKKyAgIChDRCksIFJUUywgQ1RTLCBvciBSSS4gVXNlIFNF VCBDQVJSSUVSIE9GRiB0byBlbmFibGUgY29tbXVuaWNhdGlvbiwgb3IKKyAgICJob3R3aXJlIiBE U1IgdG8gQ0QuCisKKyAgIFRoZSBtYXhpbXVtIHNlcmlhbCBzcGVlZCBvbiB0aGUgREVDc3RhdGlv biA1MDAwIGlzIG5vcm1hbGx5IDE5MjAwLCBidXQKKyAgIHZhcmlvdXMgdHJpY2tzIGFyZSBhdmFp bGFibGUgKG91dHNpZGUgS2VybWl0KSB0byBlbmFibGUgaGlnaGVyIHJhdGVzLgorICAgRm9yIGV4 YW1wbGUsIG9uIHRoZSA1MDAwLzIwMCwgMTkyMDAgY2FuIGJlIHJlbWFwcGVkIChzb21laG93LCBz b21ldGhpbmcKKyAgIHRvIGRvIHdpdGggImEgYml0IGluIHRoZSBTSVIiLCB3aGF0ZXZlciB0aGF0 IGlzKSB0byAzODQwMCwgYnV0IGluCisgICBzb2Z0d2FyZSB5b3UgbXVzdCBzdGlsbCByZWZlciB0 byB0aGlzIHNwZWVkIGFzIDE5MjAwOyB5b3UgY2FuJ3QgaGF2ZQorICAgMTkyMDAgYW5kIDM4NDAw IGF2YWlsYWJsZSBhdCB0aGUgc2FtZSB0aW1lLgorCisgICAxOTIwMCwgcmVwb3J0ZWRseSwgaXMg YWxzbyB0aGUgaGlnaGVzdCBzcGVlZCBzdXBwb3J0ZWQgYnkgVWx0cml4LCBidXQKKyAgIE5ldEJT RCByZXBvcnRlZGx5IHN1cHBvcnRzIHNwZWVkcyB1cCB0byA1NzYwMCBvbiB0aGUgREVDc3RhdGlv biwKKyAgIGFsdGhvdWdoIHdoZXRoZXIgYW5kIGhvdyB3ZWxsIHRoaXMgd29ya3MgaXMgYW5vdGhl ciBxdWVzdGlvbi4KKworICAgSW4gYW55IGNhc2UsIGdpdmVuIHRoZSBsYWNrIG9mIGhhcmR3YXJl IGZsb3cgY29udHJvbCBpbiBVbHRyaXgsIGhpZ2gKKyAgIHNlcmlhbCBzcGVlZHMgYXJlIHByb2Js ZW1hdGljIGF0IGJlc3QuCisKKzMuMTAuIEMtS0VSTUlUIEFORCBVTklYV0FSRQorCisgICBbIFs0 NzRdVG9wIF0gWyBbNDc1XUNvbnRlbnRzIF0gWyBbNDc2XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0 NzddTmV4dCBdCisgICBbIFs0NzhdUHJldmlvdXMgXQorCisgICBTZWUgYWxzbzoKKyAgICAgKiBU aGUgRnJlZWJpcmQgUHJvamVjdCAoVW5peHdhcmUgc29mdHdhcmUgcmVwb3NpdG9yeSkKKyAgICAg ICBbNDc5XWh0dHA6Ly93d3cuZnJlZWJpcmQub3JnLworICAgICAqIFRoZSBVbml4V2FyZSBGQVE6 IFs0ODBdaHR0cDovL3d3dy5mcmVlYmlyZC5vcmcvZmFxLworICAgICAqIFRoZSBmb2xsb3dpbmcg bmV3c2dyb3VwczoKKyAgICAgICAgICArIFs0ODFdY29tcC51bml4LnVuaXh3YXJlLm1pc2MKKyAg ICAgICAgICArIFs0ODJdY29tcC51bml4LnNjby5taXNjLgorCisgICBBbHNvIHNlZSBnZW5lcmFs IGNvbW1lbnRzIG9uIFBDLWJhc2VkIFVuaXhlcyBpbiBbNDgzXVNlY3Rpb24gMy4wLiBCeQorICAg dGhlIHdheSwgdGhpcyBzZWN0aW9uIGlzIHNlcGFyYXRlIGZyb20gdGhlIFNDTyAoQ2FsZGVyYSkg c2VjdGlvbgorICAgYmVjYXVzZSBhdCB0aGUgdGltZSB0aGlzIHNlY3Rpb24gd2FzIHN0YXJ0ZWQs IFVuaXh3YXJlIHdhcyBvd25lZCBieSBhCisgICBjb21wYW55IGNhbGxlZCBVbml2ZWwuIExhdGVy IGl0IHdhcyBzb2xkIHRvIE5vdmVsbCwgYW5kIHRoZW4gdG8gU0NPLgorICAgU3RpbGwgbGF0ZXIs IFNDTyB3YXMgc29sZCB0byBDYWxkZXJhLgorCisgICBJbiBVbml4d2FyZSAyLjAgYW5kIGxhdGVy LCB0aGUgcHJlZmVycmVkIHNlcmlhbCBkZXZpY2UgbmFtZXMgKGRyaXZlcnMpCisgICBhcmUgL2Rl di90ZXJtLzAwIChldGMpLCByYXRoZXIgdGhhbiAvZGV2L3R0eTAwIChldGMpLiBOb3RlIHRoZQor ICAgZm9sbG93aW5nIGNvcnJlc3BvbmRlbmNlIG9mIGRldmljZSBuYW1lcyBhbmQgZHJpdmVyIGNo YXJhY3RlcmlzdGljczoKKworICBOZXcgbmFtZSAgICAgICBPbGQgbmFtZSAgICAgRGVzY3JpcHRp b24KKyAgL2Rldi90ZXJtLzAwICAgL2Rldi90dHkwMCAgID8/PworICAvZGV2L3Rlcm0vMDBoICAv ZGV2L3R0eTAwaCAgTW9kZW0gc2lnbmFscyBhbmQgaGFyZHdhcmUgZmxvdyBjb250cm9sCisgIC9k ZXYvdGVybS8wMG0gIC9kZXYvdHR5MDBtICBNb2RlbSBzaWduYWxzKD8pCisgIC9kZXYvdGVybS8w MHMgIC9kZXYvdHR5MDBzICBNb2RlbSBzaWduYWxzIGFuZCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wK KyAgL2Rldi90ZXJtLzAwdCAgL2Rldi90dHkwMHQgID8/PworCisgICBMb2NrZmlsZSBuYW1lcyB1 c2UgZGV2aWNlLm1ham9yLm1pbm9yIG51bWJlcnMsIGUuZy46CisKKyAgL3Zhci9zcG9vbC9sb2Nr cy9MSy43Njc5LjAwMy4wMDUKKworICAgVGhlIG1pbm9yIG51bWJlciB2YXJpZXMgYWNjb3JkaW5n IHRvIHRoZSBkZXZpY2UgbmFtZSBzdWZmaXggKG5vbmUsIGgsCisgICBtLCBzLCBvciB0KS4gT25s eSB0aGUgZGV2aWNlIGFuZCBtYWpvciBudW1iZXIgYXJlIGNvbXBhcmVkLCBhbmQgdGh1cworICAg YWxsIG9mIHRoZSBkaWZmZXJlbnQgbmFtZXMgZm9yIHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZSAo ZS5nLiBhbGwgb2YKKyAgIHRob3NlIHNob3duIGluIHRoZSB0YWJsZSBhYm92ZSkgaW50ZXJsb2Nr IGVmZmVjdGl2ZWx5LgorCisgICBQcmlvciB0byBVbml4V2FyZSA3LCBzZXJpYWwgc3BlZWRzIGhp Z2hlciB0aGFuIDM4NDAwIGFyZSBub3Qgc3VwcG9ydGVkLgorICAgSW4gVW5peFdhcmUgNywgd2Ug YWxzbyBzdXBwb3J0IDU3NjAwIGFuZCAxMTUyMDAsIHBsdXMgc29tZSB1bmV4cGVjdGVkCisgICBv bmVzIGxpa2UgMTQ0MDAsIDI4ODAwLCBhbmQgNzY4MDAsIGJ5IHZpcnR1ZSBvZiBhIHN0cmFuZ2Ug bmV3CisgICBpbnRlcmZhY2UsIGV2aWRlbnRseSBwZWN1bGlhciB0byBVbml4V2FyZSA3LCBkaXNj b3ZlcmVkIHdoaWxlIGRpZ2dpbmcKKyAgIHRocm91Z2ggdGhlIGhlYWRlciBmaWxlczogdGNzZXRz cGVlZCgpLiBBY2Nlc3MgdG8gdGhpcyBpbnRlcmZhY2UgaXMKKyAgIGFsbG93ZWQgb25seSBpbiBQ T1NJWCBidWlsZHMsIGFuZCB0aHVzIHRoZSBVbml4V2FyZSA3IHZlcnNpb24gb2YKKyAgIEMtS2Vy bWl0IGlzIFBPU0lYLWJhc2VkLCB1bmxpa2UgQy1LZXJtaXQgZm9yIFVuaXh3YXJlIDEueCBhbmQg Mi54CisgICAoc2luY2UgdGhlIGVhcmxpZXIgVW5peFdhcmUgdmVyc2lvbnMgZGlkIG5vdCBzdXBw b3J0IGhpZ2ggc2VyaWFsCisgICBzcGVlZHMsIHBlcmlvZCkuCisKKyAgIEhPV0VWRVIsIHR1cm5p bmcgb24gUE9TSVggZmVhdHVyZXMgZW5nYWdlcyBhbGwgb2YgdGhlICIjaWYKKyAgICghX1BPU0lY X1NPVVJDRSkiIGNsYXVzZXMgaW4gdGhlIFVuaXhXYXJlIGhlYWRlciBmaWxlcywgd2hpY2ggaW4g dHVybgorICAgcHJldmVudCB1cyBmcm9tIGhhdmluZyBtb2RlbSBzaWduYWxzLCBhY2Nlc3MgdG8g dGhlIGhhcmR3YXJlIGZsb3cKKyAgIGNvbnRyb2wgQVBJcywgc2VsZWN0KCksIGV0YyAtLSBpbiBz aG9ydCwgYWxsIHRoZSBvdGhlciB0aGluZ3Mgd2UgbmVlZAorICAgaW4gY29tbXVuaWNhdGlvbnMg c29mdHdhcmUsIGVzcGVjaWFsbHkgd2hlbiBoaWdoIHNwZWVkcyBhcmUgdXNlZC4gT2gKKyAgIHRo ZSBpcm9ueS4gQW5kIHNvIEMtS2VybWl0IG11c3QgYmUgc2hhbWVsZXNzbHkgYnV0Y2hlcmVkIC0t IGFzIGl0IGhhcworICAgYmVlbiBzbyBtYW55IHRpbWVzIGJlZm9yZSAtLSB0byBhbGxvdyB1cyB0 byBoYXZlIHRoZSBuZWVkZWQgZmVhdHVyZXMKKyAgIGZyb20gdGhlIFBPU0lYIGFuZCBub24tUE9T SVggd29ybGRzLiBTZWUgdGhlIFVOSVhXQVJFUE9TSVggc2VjdGlvbnMgb2YKKyAgIFs0ODRdY2t1 dGlvLmMuCisKKyAgIEFmdGVyIHRoZSBidXRjaGVyeSwgd2Ugd2luZCB1cCB3aXRoIFVuaXh3YXJl IDIueCBoYXZpbmcgZnVsbAorICAgbW9kZW0tc2lnbmFsIGNhcGFiaWxpdHksIGJ1dCBwb2xpdGlj YWxseS1jb3JyZWN0IFVuaXh3YXJlIDcueCBsYWNraW5nCisgICB0aGUgYWJpbGl0eSB0byBhdXRv bWF0aWNhbGx5IGRldGVjdCBhIGJyb2tlbiBjb25uZWN0aW9uIHdoZW4gY2FycmllcgorICAgZHJv cHMuCisKKyAgIE1lYW53aGlsZSB0aGUgVW5peHdhcmUgdGNzZXRzcGVlZCgpIGZ1bmN0aW9uIGFs bG93cyBhbnkgbnVtYmVyIGF0IGFsbAorICAgKGFueSBsb25nLCAwIG9yIHBvc2l0aXZlKSBhcyBh biBhcmd1bWVudCBhbmQgc3VjY2VlZHMgaWYgdGhlIG51bWJlciBpcworICAgYSBsZWdhbCBiaXQg cmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UsIGFuZCBmYWlscyBvdGhlcndpc2UuIFRoZXJlIGlz CisgICBubyBsaXN0IGFueXdoZXJlIG9mIGxlZ2FsIHNwZWVkcy4gVGh1cyB0aGUgU0VUIFNQRUVE IGtleXdvcmQgdGFibGUKKyAgICgic2V0IHNwZWVkID8iIHRvIHNlZSBpdCkgaXMgaGFyZHdpcmVk IGJhc2VkIG9uIHRyaWFsIGFuZCBlcnJvciB3aXRoCisgICBhbGwga25vd24gc2VyaWFsIHNwZWVk cywgdGhlIG1heGltdW0gYmVpbmcgMTE1MjAwLiBIb3dldmVyLCB0byBhbGxvdworICAgZm9yIHRo ZSBwb3NzaWJpbGl0eSB0aGF0IG90aGVyIHNwZWVkcyBtaWdodCBiZSBhbGxvd2VkIGluIHRoZSBm dXR1cmUKKyAgIChvciB3aXRoIGRpZmZlcmVudCBwb3J0IGRyaXZlcnMpLCB0aGUgU0VUIFNQRUVE IGNvbW1hbmQgZm9yIFVuaXhXYXJlIDcKKyAgIG9ubHkgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGFu eSBudW1iZXIgYXQgYWxsOyBhIHdhcm5pbmcgaXMgcHJpbnRlZCBpZgorICAgdGhlIG51bWJlciBp cyBub3QgaW4gdGhlIGxpc3QsIGJ1dCB0aGUgbnVtYmVyIGlzIGFjY2VwdGVkIGFueXdheTsgdGhl CisgICBjb21tYW5kIHN1Y2NlZWRzIGlmIHRjc2V0c3BlZWQoKSBhY2NlcHRzIHRoZSBudW1iZXIs IGFuZCBmYWlscworICAgb3RoZXJ3aXNlLgorCisgICBJbiBDLUtlcm1pdCA4LjAgdGVzdGluZywg aXQgd2FzIG5vdGljZWQgdGhhdCB0aGUgUE9TSVggbWV0aG9kIGZvcgorICAgaGFuZ2luZyB1cCB0 aGUgcGhvbmUgYnkgZHJvcHBpbmcgRFRSIChzZXQgc3BlZWQgMCwgcGF1c2UsIHJlc3RvcmUKKyAg IHNwZWVkKSBkaWQgbm90IGFjdHVhbGx5IGRyb3AgRFRSLiBUaGUgQVBJcyBkbyBub3QgcmV0dXJu IGFueSBlcnJvcgorICAgaW5kaWNhdGlvbiwgYnV0IG5vdGhpbmcgaGFwcGVucy4gSSBjaGFuZ2Vk IHR0aGFuZygpIHRvIHNraXAgdGhlIHNwZWNpYWwKKyAgIGNhc2UgSSBoYWQgbWFkZSBmb3IgVW5p eHdhcmUgYW5kIGluc3RlYWQgZm9sbG93IHRoZSBub3JtYWwgcGF0aDogaWYKKyAgIFRJT0NTRFRS IGlzIGRlZmluZWQgdXNlIHRoYXQsIG90aGVyd2lzZSBibGFoIGJsYWguLi4gSXQgdHVybnMgb3V0 CisgICBUSU9DU0RUUiAqaXMqIGRlZmluZWQsIGFuZCBpdCB3b3Jrcy4KKworICAgU28gaW4gVW5p eHdhcmUgKGF0IGxlYXN0IGluIDIuMS4zKSB3ZSBjYW4gcmVhZCBtb2RlbSBzaWduYWxzLCBoYW5n dXAgYnkKKyAgIHRvZ2dsaW5nIERUUiwgYW5kIHNvIG9uLCBCVVQuLi4gQnV0IG9uY2UgdGhlIHJl bW90ZSBoYW5ncyB1cCBhbmQKKyAgIENhcnJpZXIgZHJvcHMsIHRoZSBBUEkgZm9yIHJlYWRpbmcg bW9kZW0gc2lnbmFscyBjZWFzZXMgdG8gZnVuY3Rpb247CisgICBhbHRob3VnaCB0aGUgZGV2aWNl IGlzIHN0aWxsIG9wZW4sIHRoZSBUSU9DTUdFVCBpb2N0bCBhbHdheXMgcmFpc2VzCisgICBlcnJu byA2ID0gRU5YSU8sICJObyBzdWNoIGRldmljZSBvciBhZGRyZXNzIi4KKworICAgT2xkIGJ1c2lu ZXNzOgorCisgICBVc2luZyBDLUtlcm1pdCA2LjAgb24gdGhlIFVuaXhXYXJlIDEuMSBBcHBsaWNh dGlvbiBTZXJ2ZXIsIG9uZSB1c2VyCisgICByZXBvcnRlZCBhIHN5c3RlbSBwYW5pYyB3aGVuIHRo ZSBmb2xsb3dpbmcgc2NyaXB0IHByb2dyYW0gaXMgZXhlY3V0ZWQ6CisKKyAgc2V0IGxpbmUgL2Rl di90dHk0CisgIHNldCBzcGVlZCA5NjAwCisgIG91dHB1dCBcMTMKKyAgY29ubmVjdAorCisgICBU aGUgcGFuaWMgZG9lcyBub3QgaGFwcGVuIGlmIGEgUEFVU0UgaXMgaW5zZXJ0ZWQ6CisKKyAgc2V0 IGxpbmUgL2Rldi90dHk0CisgIHNldCBzcGVlZCA5NjAwCisgIHBhdXNlIDEKKyAgb3V0cHV0IFwx MworICBjb25uZWN0CisKKyAgIFRoaXMgaXMgdXNpbmcgYSBTdGFsbGlvbiBFYXN5SU8gY2FyZCBp bnN0YWxsZWQgYXMgYm9hcmQgMCBvbiBJUlEgMTIgb24KKyAgIGEgR2F0ZXdheSAzODYgd2l0aCB0 aGUgU3RhbGxpb24tc3VwcGxpZWQgZHJpdmVyLiBUaGUgcHJvYmxlbSB3YXMKKyAgIHJlcG9ydGVk IHRvIE5vdmVsbCBhbmQgU3RhbGxpb24gYW5kIChyZXBvcnRlZGx5KSBpcyBub3cgZml4ZWQuCisK KzMuMTEuIEMtS0VSTUlUIEFORCBBUE9MTE8gU1IxMAorCisgICBbIFs0ODVdVG9wIF0gWyBbNDg2 XUNvbnRlbnRzIF0gWyBbNDg3XVNlY3Rpb24gQ29udGVudHMgXSBbIFs0ODhdTmV4dCBdCisgICBb IFs0ODldUHJldmlvdXMgXQorCisgICBSZXBvcnRlZGx5LCB2ZXJzaW9uIDVBKDE5MCksIHdoZW4g YnVpbHQgdW5kZXIgQXBvbGxvIFNSMTAgdXNpbmcgIm1ha2UKKyAgIHNyMTAtYnNkIiwgY29tcGls ZXMsIGxpbmtzLCBhbmQgZXhlY3V0ZXMgT0ssIGJ1dCBsZWF2ZXMgdGhlIHRlcm1pbmFsCisgICB1 bnVzYWJsZSBhZnRlciBpdCBleGl0cyAtLSB0aGUgImNzNyIgb3IgImNzOCIgKGNoYXJhY3RlciBz aXplKQorICAgcGFyYW1ldGVyIGhhcyBiZWNvbWUgY3M1LiBUaGUgdGVybWluYWwgbXVzdCBiZSBy ZXNldCBmcm9tIGFub3RoZXIKKyAgIHRlcm1pbmFsLiBDYXVzZSBhbmQgY3VyZSB1bmtub3duLiBT dWdnZXN0ZWQgd29ya2Fyb3VuZDogV3JhcCBLZXJtaXQgaW4KKyAgIGEgc2hlbGwgc2NyaXB0IHNv bWV0aGluZyBsaWtlOgorCisgIGtlcm1pdCBAKgorICBzdHR5IHNhbmUKKworMy4xMi4gQy1LRVJN SVQgQU5EIFRBTkRZIFhFTklYIDMuMAorCisgICBbIFs0OTBdVG9wIF0gWyBbNDkxXUNvbnRlbnRz IF0gWyBbNDkyXVNlY3Rpb24gQ29udGVudHMgXSBbIFs0OTNdTmV4dCBdCisgICBbIFs0OTRdUHJl dmlvdXMgXQorCisgICBDLUtlcm1pdCA3LjAgd2FzIHRvbyBiaWcgdG8gYmUgYnVpbHQgb24gVGFu ZHkgWGVuaXgsIGV2ZW4gaW4gYSBtaW5pbXVtCisgICBjb25maWd1cmF0aW9uOyB2ZXJzaW9uIDYu MCBpcyB0aGUgbGFzdCBvbmUgdGhhdCBmaXRzLgorCisgICBSZXBvcnRlZGx5LCBpbiBDLUtlcm1p dCA2LjAsIGlmIHlvdSB0eXBlIGxvdHMgb2YgQ3RybC1DJ3MgZHVyaW5nCisgICBleGVjdXRpb24g b2YgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUsIGdob3N0IEtlcm1pdCBwcm9jZXNzZXMgd2lsbCBi ZQorICAgY3JlYXRlZCwgYW5kIHdpbGwgY29tcGV0ZSBmb3IgdGhlIGtleWJvYXJkLiBUaGV5IGNh biBvbmx5IGJlIHJlbW92ZWQKKyAgIHZpYSAia2lsbCAtOSIgZnJvbSBhbm90aGVyIHRlcm1pbmFs LCBvciBieSByZWJvb3RpbmcuIERpYWdub3NpcyAtLQorICAgc29tZXRoaW5nIHN0cmFuZ2UgaGFw cGVuaW5nIHdpdGggdGhlIFNJR0lOVCBoYW5kbGVyIHdoaWxlIHRoZSBwcm9jZXNzCisgICBpcyBy ZWFkaW5nIHRoZSBkaXJlY3RvcnkgKGl0IHNlZW1zIHRvIG9jY3VyIGR1cmluZyB0aGUgU0VUIFBS T01QVAorICAgW1x2KGRpcildIC4uLiBzZXF1ZW5jZSkuIEN1cmU6IHVua25vd24uIFdvcmthcm91 bmQ6IGRvbid0IGludGVycnVwdAorICAgQy1LZXJtaXQgd2hpbGUgaXQgaXMgZXhlY3V0aW5nIGl0 cyBpbml0IGZpbGUgb24gdGhlIFRhbmR5IDE2LzYwMDAuCisKKzMuMTMuIEMtS0VSTUlUIEFORCBP U0YvMSAoRElHSVRBTCBVTklYKSAoVFJVNjQgVU5JWCkKKworICAgWyBbNDk1XVRvcCBdIFsgWzQ5 Nl1Db250ZW50cyBdIFsgWzQ5N11TZWN0aW9uIENvbnRlbnRzIF0gWyBbNDk4XU5leHQgXQorICAg WyBbNDk5XVByZXZpb3VzIF0KKworICAgV2hpbGUgcHV0dGluZyB0b2dldGhlciBhbmQgdGVzdGlu ZyBDLUtlcm1pdCA4LjAsIGl0IHdhcyBkaXNjb3ZlcmVkIHRoYXQKKyAgIGJpbmFyaWVzIGJ1aWx0 IGZvciBvbmUgdmVyc2lvbiBvZiBUcnU2NCBVbml4IChlLmcuIDQuMEcpIG1pZ2h0IGV4aGliaXQK KyAgIHZlcnkgc3RyYW5nZSBiZWhhdmlvciBpZiBydW4gb24gYSBkaWZmZXJlbnQgdmVyc2lvbiBv ZiBUcnU2NCBVbml4IChlLmcuCisgICA1LjFBKS4gVGhlIHR5cGljYWwgc3ltcHRvbSB3YXMgdGhh dCBhIHNlY3Rpb24gb2YgdGhlIGluaXRpYWxpemF0aW9uCisgICBmaWxlIHdvdWxkIGJlIHNraXBw ZWQsIG5vdGFibHkgbG9jYXRpbmcgdGhlIGRpYWxpbmcgYW5kL29yIG5ldHdvcmsKKyAgIGRpcmVj dG9yeSBhcyB3ZWxsIGFzIGZpbmRpbmcgYW5kIGV4ZWN1dGluZyB0aGUgY3VzdG9taXphdGlvbiBm aWxlLAorICAgfi8ubXlrZXJtcmMuIFRoaXMgcHJvYmxlbSBhbHNvIGlzIHJlcG9ydGVkIHRvIG9j Y3VyIG9uIFRydTY0IFVuaXggNS4wCisgICAoUmV2IDczMikgZXZlbiB3aGVuIHJ1bm5pbmcgYSBD LUtlcm1pdCBiaW5hcnkgdGhhdCB3YXMgYnVpbHQgdGhlcmUuCisgICBIb3dldmVyLCB0aGUgVHJ1 NjQgNS4xQSBiaW5hcnkgd29ya3MgY29ycmVjdGx5IG9uIDUuMC4gR28gZmlndXJlLgorCisgICBX aGVuIG1ha2luZyBUZWxuZXQgY29ubmVjdGlvbnMgdG8gYSBEaWdpdGFsIFVuaXggb3IgVHJ1NjQg c3lzdGVtLCBhbmQKKyAgIHlvdXIgVGVsbmV0IGNsaWVudCBmb3J3YXJkcyB5b3VyIHVzZXIgbmFt ZSwgdGhlIFRlbG5ldCBzZXJ2ZXIgZXZpZGVudGx5CisgICBzdHVmZnMgdGhlIHVzZXJuYW1lIGlu dG8gbG9naW4ncyBzdGFuZGFyZCBpbnB1dCwgYW5kIHlvdSBzZWU6CisKKyAgbG9naW46IGl2YW4K KyAgUGFzc3dvcmQ6CisKKyAgIFRoaXMgaXMgY2xlYXJseSBnb2luZyB0byBwbGF5IGhhdm9jIHdp dGggc2NyaXB0cyB0aGF0IGxvb2sgZm9yCisgICAibG9naW46Ii4gV29ya2Fyb3VuZCAod2hlbiBL ZXJtaXQgaXMgeW91ciBUZWxuZXQgY2xpZW50KTogU0VUIExPR0lOCisgICBVU0VSIHRvIG5vdGhp bmcsIHRvIHByZXZlbnQgS2VybWl0IGZyb20gc2VuZGluZyB5b3VyIHVzZXIgSUQuCisKKyAgIEJl Zm9yZSB5b3UgY2FuIHVzZSBhIHNlcmlhbCBwb3J0IG9uIGEgbmV3IERpZ2l0YWwgVW5peCBzeXN0 ZW0sIHlvdSBtdXN0CisgICBydW4gdXVjcHNldHVwIHRvIGVuYWJsZSBvciBjb25maWd1cmUgdGhl IHBvcnQuIEV2aWRlbnRseSB0aGUgL2Rldi90dHkwMAorICAgYW5kIDAxIGRldmljZXMgdGhhdCBh cHBlYXIgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlIG5vdCB1c2FibGU7CisgICB1dWNwc2V0dXAg dHVybnMgdGhlbSBpbnRvIC9kZXYvdHR5ZDAwIGFuZCAwMSwgd2hpY2ggYXJlLiBOb3RlIHRoYXQK KyAgIHV1Y3BzZXR1cCBhbmQgb3RoZXIgdXVjcC1mYW1pbHkgcHJvZ3JhbXMgYXJlIHF1aXRlIHBy aW1pdGl2ZSAtLSB0aGV5CisgICBvbmx5IGtub3cgYWJvdXQgc3BlZWRzIHVwIHRvIDk2MDAgYnBz IGFuZCB0aGVpciBzZWxlY3Rpb24gb2YgbW9kZW1zCisgICBkYXRlcyBmcm9tIHRoZSBlYXJseSAx OTgwcy4gTm9uZSBvZiB0aGlzIGFmZmVjdHMgS2VybWl0LCB0aG91Z2ggLS0gd2l0aAorICAgQy1L ZXJtaXQsIHlvdSBjYW4gdXNlIHNwZWVkcyB1cCB0byAxMTUyMDAgYnBzIChhdCBsZWFzdCBpbiBE VTQuMCBhbmQKKyAgIGxhdGVyKSBhbmQgbW9kZXJuIG1vZGVtcyB3aXRoIGhhcmR3YXJlIGZsb3cg Y29udHJvbCBhbmQgYWxsIHRoZSByZXN0LgorCisgICBSZXBvcnRlZGx5LCBpZiBhIG1vZGVtIGlz IHNldCBmb3IgJlMwIChhc3NlcnQgRFNSIGF0IGFsbCB0aW1lcyksIHRoZQorICAgc3lzdGVtIHJl c2V0cyBvciBkcm9wcyBEVFIgZXZlcnkgMzAgc2Vjb25kczsgcmVwb3J0ZWRseSBERUMgc2F5cyB0 byBzZXQKKyAgICZTMS4KKworICAgRGlnaXRhbCBVbml4IDMuMiBldmlkZW50bHkgd2FudHMgdG8g YmVsaWV2ZSB5b3VyIHRlcm1pbmFsIGlzIG9uZSBsaW5lCisgICBsb25nZXIgdGhhbiB5b3Ugc2F5 IGl0IGlzLCBlLmcuIHdoZW4gYSAibW9yZSIgb3IgIm1hbiIgY29tbWFuZCBpcworICAgZ2l2ZW4u IFRoaXMgaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBDLUtlcm1pdCwgYnV0IHRlbmRzIHRvIGFu bm95CisgICB0aG9zZSB3aG8gdXNlIEtlcm1pdCBvciBvdGhlciB0ZXJtaW5hbCBlbXVsYXRvcnMg dG8gYWNjZXNzIERpZ2l0YWwgVW5peAorICAgc3lzdGVtcy4gV29ya2Fyb3VuZDogdGVsbCBVbml4 IHRvICJzdHR5IHJvd3MgMjMiIChvciB3aGF0ZXZlcikuCisKKyAgIFJlcG9ydGVkbHksIHRoZXJl IGlzIHNvbWUgYml6YXJyZSBiZWhhdmlvciB3aGVuIHRyeWluZyB0byB1c2UgYSB2ZXJzaW9uCisg ICBvZiBDLUtlcm1pdCBidWlsdCBvbiBvbmUgRGlnaXRhbCBVbml4IDQuMCBzeXN0ZW0gb24gYW5v dGhlciBvbmUsCisgICBwb3NzaWJseSBkdWUgdG8gZGlmZmVyaW5nIE9TIG9yIGxpYnJhcnkgcmV2 aXNpb24gbGV2ZWxzOyBmb3IgZXhhbXBsZSwKKyAgIHRoZSBpbmFiaWxpdHkgdG8gY29ubmVjdCB0 byBjZXJ0YWluIFRDUC9JUCBob3N0cy4gU29sdXRpb246IHJlYnVpbGQKKyAgIEMtS2VybWl0IGZy b20gc291cmNlIGNvZGUgb24gdGhlIHN5c3RlbSB3aGVyZSB5b3Ugd2lsbCBiZSB1c2luZyBpdC4K KworICAgRGlnaXRhbCBVbml4IHRnZXRzdHIoKSBjYXVzZXMgYSBzZWdtZW50YXRpb24gZmF1bHQu IEMtS2VybWl0IDcuMCBhZGRlZAorICAgI2lmZGVmcyB0byBhdm9pZCBjYWxsaW5nIHRoaXMgcm91 dGluZSBpbiBEaWdpdGFsIFVuaXguIEFzIGEgcmVzdWx0LCB0aGUKKyAgIFNDUkVFTiBjb21tYW5k cyBhbHdheXMgc2VuZCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgLS0gZXZlbiB0aG91Z2ggY3Vyc2Vz CisgICBrbm93cyB5b3VyIGFjdHVhbCB0ZXJtaW5hbCB0eXBlLgorCisgICBSZXBvcnRlZGx5IHRo ZSBUcnU2NCBVbml4IDQuMEUgMTA5MSBUZWxuZXQgc2VydmVyIGRvZXMgbm90IHRvbGVyYXRlCisg ICBzdHJlYW1pbmcgdHJhbnNmZXJzIGludG8gaXRzZWxmLCBhdCBsZWFzdCBub3Qgd2hlbiB0aGUg c2VuZGluZyBLZXJtaXQKKyAgIGlzIG9uIHRoZSBzYW1lIGxvY2FsIG5ldHdvcmsuIFNvbHV0aW9u OiB0ZWxsIG9uZSBLZXJtaXQgb3IgdGhlIG90aGVyCisgICAob3IgYm90aCkgdG8gInNldCBzdHJl YW1pbmcgb2ZmIi4gVGhpcyBtaWdodCBvciBtaWdodCBiZSB0aGUgY2FzZSB3aXRoCisgICBlYXJs aWVyIGFuZC9vciBsYXRlciBUcnU2NCwgRGlnaXRhbCBVbml4LCBhbmQgT1NGLzEgcmVsZWFzZXMu CisKKzMuMTQuIEMtS0VSTUlUIEFORCBTR0kgSVJJWAorCisgICBbIFs1MDBdVG9wIF0gWyBbNTAx XUNvbnRlbnRzIF0gWyBbNTAyXVNlY3Rpb24gQ29udGVudHMgXSBbIFs1MDNdTmV4dCBdCisgICBb IFs1MDRdUHJldmlvdXMgXQorCisgICBTZWUgYWxzbzoKKyAgICAgKiBUaGUgWzUwNV1jb21wLnN5 cy5zZ2kubWlzYyBhbmQgWzUwNl1jb21wLnN5cy5zZ2kuYWRtaW4gbmV3c2dyb3Vwcy4KKyAgICAg ICBbNTA3XVRoZSBTR0kgd2Vic2l0ZQorICAgICAqIFRoZSBTR0kgRkFROgorICAgICAgICAgICsg WzUwOF1odHRwOi8vd3d3LXZpei50YW11LmVkdS9+c2dpLWZhcS8KKyAgICAgICAgICArIFs1MDld ZnRwOi8vdml6LnRhbXUuZWR1L3B1Yi9zZ2kvZmFxLworCisgICBBYm91dCBJUklYIHZlcnNpb24g bnVtYmVyczogInVuYW1lIC1hIiB0ZWxscyB0aGUgInR3by1kaWdpdCIgdmVyc2lvbgorICAgbnVt YmVyLCBzdWNoIGFzICI1LjMiIG9yICI2LjUiLiBUaGUgdGhyZWUtZGlnaXQgZm9ybSBjYW4gYmUg c2VlbiB3aXRoCisgICAidW5hbWUgLVIiLiAodGhpcyBpbmZvcm1hdGlvbiBpcyB1bmF2YWlsYWJs ZSBhdCB0aGUgc2ltcGxlIEFQSSBsZXZlbCkuCisgICBTdXBwb3NlZGx5IGFsbCB0aHJlZS1kaWdp dCB2ZXJzaW9ucyB3aXRoaW4gdGhlIHNhbWUgdHdvLWRpZ2l0IHZlcnNpb24KKyAgIChlLmcuIDYu NS4yLCA2LjUuMykgYXJlIGJpbmFyeSBjb21wYXRpYmxlOyBpLmUuIGEgYmluYXJ5IGJ1aWx0IG9u IGFueQorICAgb25lIG9mIHRoZW0gc2hvdWxkIHJ1biBvbiBhbGwgb3RoZXJzLiBUaGUgIm0iIHN1 ZmZpeCBkZW5vdGVzIGp1c3QKKyAgIHBhdGNoZXM7IHRoZSAiZiIgc3VmZml4IGluZGljYXRlcyB0 aGF0IGZlYXR1cmVzIHdlcmUgYWRkZWQuCisKKyAgIEFuIElSSVggYmluYXJ5IGJ1aWx0IG9uIGxv d2VyIE1JUFMgbW9kZWwgKEluc3RydWN0aW9uIFNldCBBcmNoaXRlY3R1cmUsCisgICBJU0EpIGNh biBydW4gb24gaGlnaGVyIG1vZGVscywgYnV0IG5vdCB2aWNlIHZlcnNhOgorCisgICAgIE1JUFMx IFIzMDAwIGFuZCBiZWxvdworICAgICBNSVBTMiBSNDAwMAorICAgICBNSVBTMyBSNHgwMAorICAg ICBNSVBTNCBSNTAwMCBhbmQgYWJvdmUKKworICAgRnVydGhlcm1vcmUsIHRoZXJlIGFyZSBkaWZm ZXJlbnQgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZXMgKEFCSXMpOgorCisgICAgIENPRkYg ICAgMzIgYml0cywgSVJJWCA1LjMsIDUuMiwgNS4xLCA0LnggYW5kIGJlbG93CisgICAgIG8zMiBF TEYgMzIgYml0cywgSVJJWCA1LjMsIDYuMCAtIDYuNQorICAgICBOMzIgRUxGIDMyIGJpdHMsIElS SVggNi4yIC0gNi41CisgICAgIE42NCBFTEYgNjQgYml0cywgSVJJWCA2LjIgLSA2LjUKKworICAg VGh1cyBhIHByZWJ1aWx0IElSSVggYmluYXJ5IHdvcmtzIG9uIGEgcGFydGljdWxhciBtYWNoaW5l IG9ubHkgaWYgKGEpCisgICB0aGUgbWFjaGluZSdzIElSSVggdmVyc2lvbiAodG8gb25lIGRlY2lt YWwgcGxhY2UpIGlzIGVxdWFsIHRvIG9yCisgICBncmVhdGVyIHRoYW4gdGhlIHZlcnNpb24gdW5k ZXIgd2hpY2ggdGhlIGJpbmFyeSB3YXMgYnVpbHQ7IChiKSB0aGUKKyAgIG1hY2hpbmUncyBNSVBT IGxldmVsIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhhdCBvZiB0aGUgYmluYXJ5OyBhbmQgKGMp CisgICB0aGUgbWFjaGluZSBzdXBwb3J0cyB0aGUgQUJJIG9mIHRoZSBiaW5hcnkuIElmIGFsbCB0 aHJlZSBjb25kaXRpb25zIGFyZQorICAgbm90IHNhdGlzZmllZCwgb2YgY291cnNlLCB5b3UgY2Fu IGJ1aWxkIGEgYmluYXJ5IHlvdXJzZWxmIGZyb20gc291cmNlCisgICBjb2RlIHNpbmNlLCB1bmxp a2Ugc29tZSBvdGhlciBVbml4IHZlbmRvcnMsIFNHSSBkb2VzIHN1cHBseSBhIEMKKyAgIGNvbXBp bGVyIGFuZCBsaWJyYXJpZXMuCisKKyAgIFNHSSBkaWQgbm90IHN1cHBseSBhbiBBUEkgZm9yIGhh cmR3YXJlIGZsb3cgY29udHJvbCBwcmlvciB0byBJUklYIDUuMi4KKyAgIEMtS2VybWl0IDYuMSBh bmQgaGlnaGVyIGZvciBJUklYIDUuMiBhbmQgaGlnaGVyIHN1cHBvcnRzIGhhcmR3YXJlIGZsb3cK KyAgIGNvbnRyb2wgaW4gdGhlIG5vcm1hbCB3YXksIHZpYSAic2V0IGZsb3cgcnRzL2N0cyIuCisK KyAgIEZvciBoYXJkd2FyZSBmbG93IGNvbnRyb2wgb24gZWFybGllciBJUklYIGFuZC9vciBDLUtl cm1pdCB2ZXJzaW9ucywgdXNlCisgICB0aGUgdHR5ZiogKG1vZGVtIGNvbnRyb2wgQU5EIGhhcmR3 YXJlIGZsb3cgY29udHJvbCkgZGV2aWNlcyBhbmQgbm90IHRoZQorICAgdHR5ZCogKGRpcmVjdCkg b3IgdHR5bSogKG1vZGVtIGNvbnRyb2wgYnV0IG5vIGhhcmR3YXJlIGZsb3cgY29udHJvbCkKKyAg IG9uZXMsIGFuZCBvYnRhaW4gdGhlIHByb3BlciAiaGFyZHdhcmUgaGFuZHNoYWtpbmciIGNhYmxl IGZyb20gU0dJLAorICAgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIG9uZXMgZm9yIHRo ZSBNYWNpbnRvc2ggYW5kIE5lWFQgZXZlbgorICAgdGhvdWdoIHRoZXkgbG9vayB0aGUgc2FtZSAo Im1hbiBzZXJpYWwiIGZvciBmdXJ0aGVyIGluZm8pIGFuZCB0ZWxsCisgICBLZXJtaXQgdG8gInNl dCBmbG93IGtlZXAiIGFuZCAic2V0IG1vZGVtIGZsb3cgcnRzL2N0cyIuCisKKyAgIFNlcmlhbCBz cGVlZHMgaGlnaGVyIHRoYW4gMzg0MDAgYXJlIGF2YWlsYWJsZSBpbiBJUklYIDYuMiBhbmQgbGF0 ZXIsIG9uCisgICBPLWNsYXNzIG1hY2hpbmVzIChlLmcuIE9yaWdpbiwgT2N0YW5lKSBvbmx5LCBh bmQgYXJlIHN1cHBvcnRlZCBieQorICAgQy1LZXJtaXQgNy4wIGFuZCBsYXRlci4gQ29tbWFuZHMg c3VjaCBhcyAic2V0IHNwZWVkIDExNTIwMCIgbWF5IGJlCisgICBnaXZlbiBvbiBvdGhlciBtb2Rl bHMgKGUuZy4gSXJpcywgSW5keSwgSW5kaWdvKSBidXQgd2lsbCBmYWlsIGJlY2F1c2UKKyAgIHRo ZSBPUyByZXBvcnRzIGFuIGludmFsaWQgc3BlZWQgZm9yIHRoZSBkZXZpY2UuCisKKyAgIEV4cGVy aW1lbnRhdGlvbiB3aXRoIGJvdGggSVJJWCA1LjMgYW5kIDYuMiBzaG93cyB0aGF0IHdoZW4gbG9n Z2VkIGluIHRvCisgICBJUklYIHZpYSBUZWxuZXQsIHRoYXQgcmVtb3RlLW1vZGUgQy1LZXJtaXQg Y2FuJ3Qgc2VuZCBmaWxlcyBpZiB0aGUKKyAgIHBhY2tldCBsZW5ndGggaXMgZ3JlYXRlciB0aGFu IDQwOTY7IHRoZSBUZWxuZXQgc2VydmVyIGV2aWRlbnRseSBoYXMKKyAgIHRoaXMgcmVzdHJpY3Rp b24gKG9yIGJ1ZyksIHNpbmNlIHRoZXJlIGlzIG5vIHByb2JsZW0gc2VuZGluZyBsb25nCisgICBw YWNrZXRzIG9uIHNlcmlhbCBvciBybG9naW4gY29ubmVjdGlvbnMuIEhvd2V2ZXIsIGl0IGNhbiBy ZWNlaXZlIGZpbGVzCisgICB3aXRoIG5vIHByb2JsZW0gaWYgdGhlIHBhY2tldCBsZW5ndGggaXMg Z3JlYXRlciB0aGFuIDQwOTYuIEFzIGEKKyAgIHdvcmthcm91bmQsIHRoZSBGQVNUIG1hY3JvIGZv ciBJUklYIGluY2x1ZGVzICJzZXQgc2VuZCBwYWNrZXQtbGVuZ3RoCisgICA0MDAwIi4gSVJJWCA2 LjUuMSBkb2VzIG5vdCBoYXZlIHRoaXMgcHJvYmxlbSwgc28gZXZpZGVudGx5IGl0IHdhcyBmaXhl ZAorICAgc29tZSB0aW1lIGFmdGVyIElSSVggNi4yLiBUZXN0cyBzaG93IGZpbGUtdHJhbnNmZXIg c3BlZWRzIGFyZSBiZXR0ZXIKKyAgIChub3Qgd29yc2UpIHdpdGggOEsgcGFja2V0cyB0aGFuIHdp dGggNEsgcGFja2V0cyBmcm9tIElSSVggNi41LjEuCisKKyAgIFJlcG9ydGVkbHkgc29tZSBJbmR5 cyBoYXZlIGJhZCBzZXJpYWwgcG9ydCBoYXJkd2FyZS4gSVJJWCA1LjIsIGZvcgorICAgZXhhbXBs ZSwgbmVlZHMgcGF0Y2ggMTUxIHRvIHdvcmsgYXJvdW5kIHRoaXM7IG9yIHVwZ3JhZGUgdG8gYSBs YXRlcgorICAgcmVsZWFzZS4gU2ltaWxhcmx5LCBJUklYIDUuMiBoYXMgc2V2ZXJhbCBwcm9ibGVt cyB3aXRoIHNlcmlhbCBpL28sIGZsb3cKKyAgIGNvbnRyb2wsIGV0Yy4gQWdhaW4sIHBhdGNoIG9y IHVwZ3JhZGUuCisKKyAgIFJlcG9ydGVkbHkgb24gbWFjaGluZXMgd2l0aCBJUklYIDQuMCwgS2Vy bWl0IGNhbm5vdCBiZSBzdXNwZW5kZWQgYnkKKyAgIHR5cGluZyB0aGUgc3VzcGVuZCAoInN3dGNo IikgY2hhcmFjdGVyIGlmIGl0IHdhcyBzdGFydGVkIGZyb20gY3NoLCBldmVuCisgICB0aG91Z2gg b3RoZXIgcHJvZ3JhbXMgY2FuIGJlIHN1c3BlbmRlZCB0aGlzIHdheSwgYW5kIGV2ZW4gdGhvdWdo IHRoZSBaCisgICBhbmQgU1VTUEVORCBjb21tYW5kcyBzdGlsbCB3b3JrIGNvcnJlY3RseS4gVGhp cyBpcyBldmlkZW50bHkgYmVjYXVzZQorICAgSVJJWCdzIGNzaCBkb2VzIG5vdCBkZWxpdmVyIHRo ZSBTSUdUU1RQIHNpZ25hbCB0byBLZXJtaXQuIFRoZSByZWFzb24KKyAgIG90aGVyIHByb2dyYW1z IGNhbiBiZSBzdXNwZW5kZWQgaW4gdGhlIHNhbWUgZW52aXJvbm1lbnQgaXMgcHJvYmFibHkKKyAg IHRoYXQgdGhleSBkbyBub3QgdHJhcCBTSUdUU1RQIHRoZW1zZWx2ZXMsIHNvIHRoZSBzaGVsbCBp cyBkb2luZyB0aGUKKyAgIHN1c3BlbmRpbmcgcmF0aGVyIHRoYW4gdGhlIGFwcGxpY2F0aW9uLgor CisgICBBbHNvIHNlZSBub3RlcyBhYm91dCBJUklYIDMueCBpbiB0aGUgWzUxMF1DLUtlcm1pdCBm b3IgVW5peAorICAgSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucy4KKworICAgSWYgeW91IGhhdmUg cHJvYmxlbXMgbWFraW5nIFRDUC9JUCBjb25uZWN0aW9ucyBpbiB2ZXJzaW9ucyBvZiBJUklYCisg ICBidWlsdCB3aXRoIEdDQyAyLjk1LjIsIHNlZSB0aGUgYnVncyBzZWN0aW9uIG9mOgorCisgIFs1 MTFdaHR0cDovL2ZyZWV3YXJlLnNnaS5jb20vSW5zdGFsbGFibGUvZ2NjLTIuOTUuMi5odG1sLgor CisgICBSZXBvcnRlZGx5LCBpZiB5b3UgYWxsb3cgZ2NjIHRvIGNvbXBpbGUgQy1LZXJtaXQgb24g SXJpeCB5b3Ugc2hvdWxkIGJlCisgICBhd2FyZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIHByb2JsZW1z IHdpdGggc29tZSBvZiB0aGUgbmV0d29yayBjb2RlLiBUaGUKKyAgIHNwZWNpZmljcyBhcmUgYXQK KyAgIFs1MTJdaHR0cDovL2ZyZWV3YXJlLnNnaS5jb20vSW5zdGFsbGFibGUvZ2NjLTIuOTUuMi5o dG1sOyBzY3JvbGwgZG93bgorICAgdG8gdGhlICJrbm93biBidWdzIiBzZWN0aW9uIGF0IHRoZSBl bmQgb2YgdGhlIGRvY3VtZW50LgorCiszLjE1LiBDLUtFUk1JVCBBTkQgVEhFIEJFQk9YCisKKyAg IFsgWzUxM11Ub3AgXSBbIFs1MTRdQ29udGVudHMgXSBbIFs1MTVdU2VjdGlvbiBDb250ZW50cyBd IFsgWzUxNl1OZXh0IF0KKyAgIFsgWzUxN11QcmV2aW91cyBdCisKKyAgIFNlZSBhbHNvOiBUaGUg WzUxOF1jb21wLnN5cy5iZSBuZXdzZ3JvdXAuCisKKyAgIFRoZSBCZUJveCBoYXMgYmVlbiBkaXNj b250aW51ZWQgYW5kIEJlT1MgcmVwb3NpdGlvbmVkIGZvciBQQyBwbGF0Zm9ybXMuCisgICBUaGUg UE9TSVggcGFydHMgb2YgQmVPUyBhcmUgbm90IGZpbmlzaGVkLCBub3IgaXMgdGhlIHNvY2tldHMg bGlicmFyeSwKKyAgIHRoZXJlZm9yZSBhIGZ1bGx5IGZ1bmN0aW9uYWwgdmVyc2lvbiBvZiBDLUtl cm1pdCBpcyBub3QgcG9zc2libGUuIEluCisgICB2ZXJzaW9uIDYuMCBvZiBDLUtlcm1pdCwgd3Jp dHRlbiBmb3IgQmVPUyBEUjcsIGl0IHdhcyBwb3NzaWJsZSB0bzoKKworICAgICAqIHNldCBsaW5l IC9kZXYvc2VyaWFsMiAoYW5kIHByb2JhYmx5IHRoZSBvdGhlciBzZXJpYWwgcG9ydHMpCisgICAg ICogc2V0IHNwZWVkIDExNTIwMCAoYW5kIGF0IGxlYXN0IHNvbWUgb2YgdGhlIGxvd2VyIGJhdWQg cmF0ZXMpCisgICAgICogY29ubmVjdAorICAgICAqIHNldCBtb2RlbSB0eXBlIGhheWVzIChhbmQg bGlrZWx5IG90aGVycywgdG9vKQorICAgICAqIGRpYWwgcGhvbmUtbnVtYmVyCisgICAgICogc2V0 IHNlbmQgcGFja2V0LWxlbmd0aCAyMDQ4IChvdGhlciBsZW5ndGhzIGZvciBib3RoIHNlbmQgYW5k CisgICAgICAgcmVjZWl2ZSkKKyAgICAgKiBzZXQgcmVjZWl2ZSBwYWNrZXQgbGVuZ3RoIDIwNDgK KyAgICAgKiBzZXQgZmlsZSB0eXBlIGJpbmFyeSAodGV4dCBtb2RlIHdvcmtzLCB0b28pICh3aXRo IHJlbW90ZSBrZXJtaXQKKyAgICAgICBzZXNzaW9uIGluIHNlcnZlciBtb2RlKQorICAgICAqIHB1 dCBiZWRyb3AuanBnCisgICAgICogZ2V0IGJlZHJvcC5qcGcKKyAgICAgKiBnZXQgYmVkcm9wLmpw ZyBiZWRyb3AuanBnMgorICAgICAqIGZpbmlzaCwgYnllCisKKyAgIFRoZSBmb2xsb3dpbmcgZG8g bm90IHdvcms6CisgICAgICoga2VybWl0IGRvZXMgbm90IGRldGVjdCBtb2RlbSBoYW5ndXAKKyAg ICAgKiAhL1JVTi9QVVNIIFtjb21tYW5kbGluZSBjb21tYW5kXQorICAgICAqIFJ1bm5pbmcga2Vy bWl0IGluIHJlbW90ZSBtb2RlCisgICAgICogVXNpbmcgb3RoZXIgcHJvdG9jb2xzICh4L3kvem1v ZGVtKQorICAgICAqIFRDUCBuZXR3b3JraW5nIGludGVyZmFjZSAoQmUncyBUQ1AvSVAgQVBJIGhh cyBhIHdheXMgdG8gZ28sIHN0aWxsKQorCisgICBDLUtlcm1pdCBkb2VzIG5vdCB3b3JrIG9uIEJl T1MgRFI4IGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZworICAgQVBJcy4gVW5m b3J0dW5hdGVseSBub3QgZW5vdWdoIGNoYW5nZXMgd2VyZSBtYWRlIHRvIGFsbG93IHRoZSByZWd1 bGFyCisgICBQT1NJWC1iYXNlZCBDLUtlcm1pdCB0byB3b3JrIGVpdGhlci4gTm90ZTogdGhlIGxh Y2sgb2YgYSBmb3JrKCkgc2VydmljZQorICAgcmVxdWlyZXMgdGhlIHNlbGVjdCgpLWJhc2VkIENP Tk5FQ1QgbW9kdWxlLCBidXQgdGhlcmUgaXMgbm8gc2VsZWN0KCkuCisgICBUaGVyZSBpcyBhIHNl bGVjdCgpIGluIERSOCwgYnV0IGl0IGRvZXNuJ3Qgd29yay4KKworICAgQy1LZXJtaXQgNy4wIHdh cyBidWlsdCBmb3IgQmVPUyA0LjUgYW5kIHdvcmtzIGluIHJlbW90ZSBtb2RlLiBJdCBkb2VzCisg ICBub3QgaW5jbHVkZSBuZXR3b3JraW5nIHN1cHBvcnQgc2luY2UgdGhlIEFQSXMgYXJlIHN0aWxs IG5vdCB0aGVyZS4gSXQKKyAgIGlzIG5vdCBrbm93biBpZiBkaWFsaW5nIG91dCB3b3JrcywgYnV0 IHByb2JhYmx5IG5vdC4gQmUgZXhwZXJ0cyBhcmUKKyAgIHdlbGNvbWUgdG8gbGVuZCBhIGhhbmQu CisKKzMuMTYuIEMtS0VSTUlUIEFORCBERy9VWAorCisgICBbIFs1MTldVG9wIF0gWyBbNTIwXUNv bnRlbnRzIF0gWyBbNTIxXVNlY3Rpb24gQ29udGVudHMgXSBbIFs1MjJdTmV4dCBdCisgICBbIFs1 MjNdUHJldmlvdXMgXQorCisgICBTb21lYm9keSBkb3dubG9hZGVkIHRoZSBDLUtlcm1pdCA2LjAg YmluYXJ5IGJ1aWx0IHVuZGVyIERHL1VYIDUuNDAgYW5kCisgICByYW4gaXQgdW5kZXIgREcvVVgg NS40UjMuMTAgLS0gaXQgd29ya2VkIE9LIGV4Y2VwdCB0aGF0IGZpbGUgZGF0ZXMgZm9yCisgICBp bmNvbWluZyBmaWxlcyB3ZXJlIGFsbCB3cml0dGVuIGFzIDEgSmFuIDE5NzAuIENhdXNlIGFuZCBj dXJlIHVua25vd24uCisgICBXb3JrYXJvdW5kOiBTRVQgQVRUUklCVVRFIERBVEUgT0ZGLiBCZXR0 ZXI6IFVzZSBhIHZlcnNpb24gb2YgQy1LZXJtaXQKKyAgIGJ1aWx0IHVuZGVyIGFuZCBmb3IgREcv VVggNS40UjMuMTAuCisKKzMuMTcuIEMtS0VSTUlUIEFORCBTRVFVRU5UIERZTklYCisKKyAgIFsg WzUyNF1Ub3AgXSBbIFs1MjVdQ29udGVudHMgXSBbIFs1MjZdU2VjdGlvbiBDb250ZW50cyBdIFsg WzUyN11OZXh0IF0KKyAgIFsgWzUyOF1QcmV2aW91cyBdCisKKyAgIFJlcG9ydGVkbHksIHdoZW4g Y29taW5nIGludG8gYSBTZXF1ZW50IFVuaXggKERZTklYKSBzeXN0ZW0gdGhyb3VnaCBhbgorICAg WC4yNSBjb25uZWN0aW9uLCBLZXJtaXQgZG9lc24ndCB3b3JrIHJpZ2h0IGJlY2F1c2UgdGhlIFNl cXVlbnQncworICAgRklPTlJFQUQgaW9jdGwgcmV0dXJucyBpbmNvcnJlY3QgZGF0YS4gVG8gd29y ayBhcm91bmQsIHVzZSB0aGUKKyAgIDEtY2hhcmFjdGVyLWF0LWEtdGltZSB2ZXJzaW9uIG9mIG15 cmVhZCgpIGluIGNrdXRpby5jIChpLmUuIHVuZGVmaW5lCisgICBNWVJFQUQgaW4gY2t1dGlvLmMg YW5kIHJlYnVpbGQgdGhlIHByb2dyYW0pLiBUaGlzIGlzIHVuc2F0aXNmeWluZworICAgYmVjYXVz ZSB0d28gdmVyc2lvbnMgb2YgdGhlIHByb2dyYW0gd291bGQgYmUgbmVlZGVkIC0tIG9uZSBmb3Ig dXNlIG92ZXIKKyAgIFguMjUsIGFuZCB0aGUgb3RoZXIgZm9yIHNlcmlhbCBhbmQgVENQL0lQIGNv bm5lY3Rpb25zLgorCiszLjE4LiBDLUtFUk1JVCBBTkQgRlJFRUJTRCwgT1BFTkJTRCwgYW5kIE5F VEJTRAorCisgICBbIFs1MjldVG9wIF0gWyBbNTMwXUNvbnRlbnRzIF0gWyBbNTMxXVNlY3Rpb24g Q29udGVudHMgXSBbIFs1MzJdTmV4dCBdCisgICBbIFs1MzNdUHJldmlvdXMgXQorCisgICBTb21l IE5lYkJTRCB1c2VycyBoYXZlIHJlcG9ydGVkIGRpZmZpY3VsdHkgZXNjYXBpbmcgYmFjayBmcm9t IENPTk5FQ1QKKyAgIG1vZGUsIHVzdWFsbHkgd2hlbiBydW5uaW5nIE5ldEJTRCBvbiBub24tUEMg aGFyZHdhcmUuIFByb2JhYmx5IGEKKyAgIGtleWJvYXJkIGlzc3VlLgorCisgICBOZXRCU0QgdXNl cnMgaGF2ZSBhbHNvIHJlcG9ydGVkIHRoYXQgQy1LZXJtaXQgZG9lc24ndCBwb3AgYmFjayB0byB0 aGUKKyAgIHByb21wdCBpZiB0aGUgbW9kZW0gZHJvcHMgY2Fycmllci4gVGhpcyBuZWVkcyB0byBi ZSBjaGVja2VkIG91dCAmIGZpeGVkCisgICBpZiBwb3NzaWJsZS4KKworICAgKEFsbCB0aGUgYWJv dmUgc2VlbXMgdG8gd29yayBwcm9wZXJseSBpbiBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyLikKKwor My4xOS4gQy1LRVJNSVQgQU5EIE1BQyBPUyBYCisKKyAgIFsgWzUzNF1Ub3AgXSBbIFs1MzVdQ29u dGVudHMgXSBbIFs1MzZdU2VjdGlvbiBDb250ZW50cyBdIFsgWzUzN11OZXh0IF0KKyAgIFsgWzUz OF1QcmV2aW91cyBdCisKKyAgIE1hYyBPUyBYIGlzIEFwcGxlJ3MgNC40QlNEIFVuaXggdmFyaWV0 eSwgY2xvc2VseSByZWxhdGVkIHRvIEZyZWVCU0QsCisgICBidXQgZGlmZmVyZW50LiAidW5hbWUg LWEiIGlzIHNpbmd1bGFybHkgdW5pbmZvcm1hdGl2ZSwgYXMgaW4gTGludXgsCisgICBnaXZpbmcg b25seSB0aGUgRGFyd2luIGtlcm5lbCB2ZXJzaW9uIG51bWJlci4gVGhlIHdheSB0byBmaW5kIG91 dCB0aGUKKyAgIGFjdHVhbCBNYWMgT1MgWCB2ZXJzaW9uIGlzIHdpdGgKKworICAgICAvdXNyL2Jp bi9zd192ZXJzIC1wcm9kdWN0TmFtZQorICAgICAvdXNyL2Jpbi9zd192ZXJzIC1wcm9kdWN0VmVy c2lvbgorCisgICBvcjoKKworICAgICBmZ3JlcCAtQSAxICdQcm9kdWN0VmVyc2lvbicKKyAgICAg L1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0CisKKyAgIEhl cmUgYXJlIHNvbWUgcG9pbnRzIHRvIGJlIGF3YXJlIG9mOgorCisgICAgICogQSBiaWcgZ290Y2hh IGZvciBLZXJtaXQgdXNlcnMgaXMgdGhhdCBNYWMgT1MgWCBkb2VzIG5vdCBzdXBwb3J0CisgICAg ICAgc2VyaWFsIHBvcnRzIGFuZCwgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGRvZXNuJ3Qgc3VwcG9y dCBpdHMKKyAgICAgICBidWlsdC1pbiBtb2RlbSBlaXRoZXIsIGZvciBhbnl0aGluZyBvdGhlciB0 aGFuIG1ha2luZyBJbnRlcm5ldAorICAgICAgIGNvbm5lY3Rpb25zLiBNYWNpbnRvc2hlcyBjYXBh YmxlIG9mIHJ1bm5pbmcgTWFjIE9TIFgsIHN1Y2ggYXMgdGhlCisgICAgICAgRzUgYW5kIGxhdGVy LCBjb21lIHdpdGhvdXQgc2VyaWFsIHBvcnRzIGFuZCB3aXRob3V0IGFueSBBUElzIHRvCisgICAg ICAgc3VwcG9ydCB0aGVtLCBhbmQgYWxzbyB3aXRob3V0IHRoZSBVVUNQIGZhbWlseSBvZiBwcm9n cmFtcworICAgICAgIChpbmNsdWRpbmcgY3UpLCBub3IgYW55IHN0YW5kYXJkIGZvciBzZXJpYWwt cG9ydCBsb2NrZmlsZQorICAgICAgIGRpcmVjdG9yeS4KKyAgICAgKiBFYXJseSB2ZXJzaW9ucyBv ZiBNYWMgT1MgWCBjYW1lIHdpdGhvdXQgQ3Vyc2VzLCBUZXJtbGliLCBvcgorICAgICAgIFRlcm1p bmZvIGxpYnJhcmllcy4gTGF0ZXIgdmVyc2lvbnMgc2VlbSB0byBoYXZlIG5jdXJzZXMgKGl0IHdv dWxkCisgICAgICAgc2VlbSB0aGF0IE1hYyBPUyBYIDEwLjMuOSB3YXMgdGhlIGZpcnN0IG1hdHVy ZSBhbmQgY29tcGxldGUgdmVyc2lvbgorICAgICAgIG9mIE1hYyBPUyBYKS4gS2VybWl0IHVzZXMg Y3Vyc2VzIGZvciBpdHMgZmlsZS10cmFuc2ZlciBkaXNwbGF5LiBTZWUKKyAgICAgICBlbHNld2hl cmUgYWJvdXQgY3Vyc2VzLXZzLW5jdXJzZXMgY29uZnVzaW9uLgorICAgICAqIEluIHRoZSBIRlMr IGZpbGUgc3lzdGVtLCBmaWxlbmFtZXMgYXJlIGNhc2UtZm9sZGVkLiBUaHVzICJtYWtlZmlsZSIK KyAgICAgICBhbmQgIk1ha2VmaWxlIiBhcmUgdGhlIHNhbWUgZmlsZS4gU28sIGZvciBleGFtcGxl LCBzdXBwb3NlIHlvdSBhcmUKKyAgICAgICBzZW5kaW5nIHR3byBkaXN0aW5jdCBmaWxlcywgRm9v IGFuZCBGT08sIGZyb20gKHNheSkgTGludXggdG8gTWFjIE9TCisgICAgICAgWC4gVGhpcyB3aWxs IHByb2R1Y2UgYSBmaWxlIGNvbGxpc2lvbiB0aGF0IHdpbGwgYmUgaGFuZGxlZAorICAgICAgIGFj Y29yZGluZyB0byBNYWMgT1MgWCBDLUtlcm1pdCdzIEZJTEUgQ09MTElTSU9OIHNldHRpbmcsIHdo aWNoIGJ5CisgICAgICAgZGVmYXVsdCBpcyBCQUNLVVAsIHNvIHRoZSBNYWMgd2lsbCB3aW5kIHVw IHdpdGggZmlsZXMgY2FsbGVkIEZPTworICAgICAgIGFuZCBGb28ufjF+LgorICAgICAqIEhTRisg ZmlsZXMgdGhhdCBhcmUgY29tcG9zZWQgb2YgYSByZXNvdXJjZSBmb3JrIGFuZCBhIGRhdGEgZm9y ay4uLgorICAgICAgIEkgZG91YnQgdGhhdCBDLUtlcm1pdCBkb2VzIGFueXRoaW5nIHVzZWZ1bCB3 aXRoIHRoZW0uIFRoZXJlIGlzIG5vCisgICAgICAgY29kZSBpbiBDLUtlcm1pdCBmb3IgdHJhZGl0 aW9uYWwgdHdvLWZvcmtlZCBNYWNpbnRvc2ggZmlsZXMsIGJ1dCBpdAorICAgICAgIGNvdWxkIGJl IGFkZGVkIGlmIHRoZXJlIGlzIGFueSBkZW1hbmQgKGNvZGUgZm9yIHRoaXMgZXhpc3RlZCBpbgor ICAgICAgIFs1MzldTWFjIEtlcm1pdCwgdGhlIG9sZCBwcmUtTWFjLU9TLVggTWFjaW50b3NoIHZl cnNpb24gb2YKKyAgICAgICBDLUtlcm1pdCkuCisgICAgICogSW4gY2FzZSB5b3Ugd2FudCB0byB0 cmFuc2ZlciBhIHRyYWRpdGlvbmFsIE1hY2ludG9zaCB0ZXh0IGZpbGUgKG9yCisgICAgICAgZGF0 YSBmb3JrIG9mIGEgZmlsZSB0aGF0IGlzIHBsYWluIHRleHQpLCB5b3UgY2FuIHVzZSB0aGVzZSBD LUtlcm1pdAorICAgICAgIGNvbW1hbmRzOgorCitzZXQgZmlsZSBlb2wgY3IKK3NldCBmaWxlIGNo YXJhY3Rlci1zZXQgYXBwbGUtcXVpY2tkcmF3CitzZW5kIC90ZXh0IGZpbGVuYW1lCisKKyAgICAg KiBGaWxlIG9yIHBhdGhuYW1lcyB0aGF0IGluY2x1ZGUgc3BhY2VzIG11c3QgYmUgZW5jbG9zZWQg aW4gZWl0aGVyCisgICAgICAgZG91YmxlcXVvdGVzIG9yIGN1cmx5IGJyYWNlcyBpbiBDLUtlcm1p dCBjb21tYW5kcy4KKyAgICAgKiBNYWMgT1MgWCBjYW4gdXNlIGEgdGhpcmQtcGFydHkgcGFja2Fn ZSBtYW5hZ2VyIGNhbGxlZCAiZmluayIuCisgICAgICAgVmFyaW91cyBmaW5rIHBhY2thZ2VzIGZv ciBDLUtlcm1pdCBhcmUgZmxvYXRpbmcgYXJvdW5kIHRoYXQgYXJlIG5vdAorICAgICAgIHN0YW5k YXJkIHJlbGVhc2VzLiBGb3IgZXhhbXBsZSwgdGhlcmUncyBhIEMtS2VybWl0IDguMC4yMDEgcGFj a2FnZQorICAgICAgIGluIHdoaWNoIEMtS2VybWl0IHdhcyBtb2RpZmllZCAoYXQgbGVhc3QpIHRv IHVzZSBhIFVVQ1AgbG9ja2ZpbGUKKyAgICAgICBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBleGlz dCBvbiB2YW5pbGxhIE1hYyBPUyBYIHN5c3RlbXMuCisKK01hYyBPUyBYIGFuZCBTZXJpYWwgUG9y dHMKKworICAgQXBwbGUgaXMgaW4gdGhlIGZvcmVmcm9udCBvZiBjb21wYW5pZXMgdGhhdCBiZWxp ZXZlIHNlcmlhbCBwb3J0cyBoYXZlCisgICBubyB1c2UgaW4gdGhlIG1vZGVybiB3b3JsZCBhbmQg c28gaGFzIHNpbXBseSBlbGltaW5hdGVkIGFsbCB0cmFjZXMgb2YKKyAgIHRoZW0gZnJvbSBpdHMg bWFjaGluZXMgYW5kIE9TLiBCdXQgb2YgY291cnNlIHNlcmlhbCBwb3J0cyBhcmUgc3RpbGwKKyAg IG5lZWRlZCB0byBjb25uZWN0IG5vdCBvbmx5IHRvIGV4dGVybmFsIG1vZGVtcywgYnV0IGFsc28g dG8gdGhlIGNvbnRyb2wKKyAgIHBvcnRzIG9mIGh1YnMsIHJvdXRlcnMsIHRlcm1pbmFsIHNlcnZl cnMsIFBCWHMsIGFuZCBzaW1pbGFyIGRldmljZXMsCisgICBub3QgdG8gbWVudGlvbiBiYXJjb2Rl IHJlYWRlcnMsIFBPUyBzeXN0ZW1zIGFuZCBjb21wb25lbnRzLCBzcGVha2luZworICAgZGV2aWNl cywgaGFuZCBjYWxjdWxhdG9ycyBzdWNoIGFzIHRoZSBIUDQ4LCBhdXRvbWF0ZWQgZmFjdG9yeS1m bG9vcgorICAgZXF1aXBtZW50LCBhbmQgc2NpZW50aWZpYywgbWVkaWNhbCwgYW5kIGxhYiBlcXVp cG1lbnQgKHRvIG5hbWUgYSBmZXcpLgorICAgQW1vbmcgd29ya2VycyBpbiB0aGVzZSBhcmVhcywg dGhlcmUgaXMgYSBuZWVkIHRvIGFkZCBzZXJpYWwgcG9ydHMgYmFjaworICAgb250byB0aGlzIHBs YXRmb3JtLCB3aGljaCBpcyBiZWluZyBmaWxsZWQgYnkgdGhpcmQtcGFydHkgcHJvZHVjdHMgc3Vj aAorICAgYXMgdGhlIFs1NDBdS2V5c3BhbiBIaWdoIFNwZWVkIFVTQiBTZXJpYWwgQWRhcHRlciBV U0EtMTlIUywgd2hpY2ggaGFzIGEKKyAgIERCLTkgbWFsZSBjb25uZWN0b3IuIFRvIHVzZSB0aGUg S2V5c3BhbiBkZXZpY2UsIHlvdSBtdXN0IGluc3RhbGwgdGhlCisgICBhY2NvbXBhbnlpbmcgZGV2 aWNlIGRyaXZlcnMsIHdoaWNoIHdpbmRzIHVwIGdpdmluZyB5b3Ugc2VyaWFsIHBvcnRzCisgICB3 aXRoIG5hbWVzIGxpa2UgL2Rldi9jdS5VU0ExOUgzYjFQMS4xLCAvZGV2L2N1LktleVNlcmlhbDEs CisgICAvZGV2L3R0eS5LZXlTZXJpYWwxLgorCisgICBDLUtlcm1pdCA5LjAgd29ya3MgIm91dCBv ZiB0aGUgYm94IiB3aXRoIHRoaXJkLXBhcnR5IHNlcmlhbCBwb3J0cyBvbgorICAgTWFjIE9TIFgs IGJlY2F1c2UgaXQgaXMgYnVpbHQgYnkgZGVmYXVsdCAoIm1ha2UgbWFjb3N4Iikgd2l0aG91dCB0 aGUKKyAgICJVVUNQIGxvY2tmaWxlIiBmZWF0dXJlLiBJZiB5b3UgaGF2ZSBDLUtlcm1pdCA5LjAg b24gYSBwZXJzb25hbAorICAgTWFjaW50b3NoLCB5b3UgY2FuIHNraXAgdGhlIG5leHQgc2VjdGlv bi4KKworTWFjIE9TIFggU2VyaWFsIFBvcnRzIHdpdGggQy1LZXJtaXQgOC4wIGFuZCBlYXJsaWVy CisKKyAgIEluIGVhcmxpZXIgdmVyc2lvbnMgb2YgQy1LZXJtaXQsIHlvdSdsbCBuZWVkIHRvIGVp dGhlciBidWlsZCBhIHNwZWNpYWwKKyAgIC1ETk9VVUNQIHZlcnNpb24sIG9yIGRlYWwgd2l0aCB0 aGUgVVVDUCBwb3J0IGNvbnRlbnRpb24gc3l0ZW0gaW4KKyAgIFs1NDFdYWxsIGl0cyBnbG9yeSAo dGhpcyBpcyB1c3VhbGx5IGFuIGV4ZXJjaXNlIGluIGZ1dGlsaXR5IGJlY2F1c2UgYW55CisgICBv dGhlciBhcHBsaWNhdGlvbnMgb24geW91ciBNYWMgdGhhdCB1c2UgdGhlIHNlcmlhbCBwb3J0IHdp bGwgbm90CisgICBuZWNlc3NhcmlseSBmb2xsb3cgdGhlIHNhbWUgY29udmVudGlvbnMpOgorCisg ICAgMS4gc3UgKG9yIHN1ZG8gLXMpCisgICAgICAgY2hncnAgeHh4eCAvdmFyL3Nwb29sL2xvY2sK KyAgICAgICBjaG1vZCBnK3cgL3Zhci9zcG9vbC9sb2NrCisgICAgICAgY2hncnAgeHh4eCAvZGV2 L2N1LioKKyAgICAgICAod2hlcmUgeHh4eCBpcyB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAgZm9yIHVz ZXJzIHRvIHdob20gc2VyaWFsLXBvcnQKKyAgICAgICBhY2Nlc3MgaXMgdG8gYmUgZ3JhbnRlZCku IFVzZSAiYWRtaW4iIG9yIG90aGVyIGV4aXN0aW5nIGdyb3VwLCBvcgorICAgICAgIGNyZWF0ZSBh IG5ldyBncm91cCBpZiBkZXNpcmVkLiBOQjoKKworICAgICBJbiB0aGUgYWJzZW5jZSBvZiBvZmZp Y2lhbCBndWlkYW5jZSBmcm9tIEFwcGxlIG9yIGFueW9uZSBlbHNlLCB3ZQorICAgICBjaG9vc2Ug L3Zhci9zcG9vbC9sb2NrIGFzIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgYmVjYXVzZSB0aGlzCisg ICAgIGRpcmVjdG9yeSAoYSkgYWxyZWFkeSBleGlzdHMgb24gdmFuaWxsYSBNYWMgT1MgWCBpbnN0 YWxsYXRpb25zLCBhbmQKKyAgICAgKGIpIGl0IGlzIHRoZSBkaXJlY3RvcnkgdXNlZCBmb3Igc2Vy aWFsLXBvcnQgbG9ja2ZpbGVzIG9uIG1hbnkgb3RoZXIKKyAgICAgcGxhdGZvcm1zLgorICAgIDIu IFB1dCBhbGwgdXNlcnMgd2hvIG5lZWQgYWNjZXNzIHRvIHRoZSBzZXJpYWwgcG9ydCBpbiB0aGUg c2FtZSBncm91cC4KKyAgICAzLiBNYWtlIHN1cmUgdGhlIHNlcmlhbCBkZXZpY2UgZmlsZXMgdGhh dCBhcmUgdG8gYmUgdXNlZCBieSBDLUtlcm1pdAorICAgICAgIGhhdmUgZ3JvdXAgcmVhZC13cml0 ZSBwZXJtaXNzaW9uIGFuZCAoaWYgeW91IGNhcmUpIGxhY2sgd29ybGQKKyAgICAgICByZWFkLXdy aXRlIHBlcm1pc3Npb24sIGUuZy46CisKKyAgICAgY2htb2QgZytydyxvLXJ3IC9kZXYvY3UuKgor CisgICBJZiB5b3UgZG8gdGhlIGFib3ZlLCB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0byBiZWNvbWUg cm9vdCB0byB1c2UgS2VybWl0LAorICAgb3IgdG8gbWFrZSBLZXJtaXQgc3VpZCBvciBzZ2lkLiBK dXN0IGRvIHRoaXM6CisKK2NobW9kIDc3NSB3ZXJtaXQKK212IHdlcm1pdCAvdXNyL2xvY2FsL2tl cm1pdAorCisgICAob3Igd2hhdGV2ZXIgc3BvdCBpcyBtb3JlIGFwcHJvcHJpYXRlLCBlLmcuIC91 c3IvYmluLykuIEZvciBncmVhdGVyCisgICBkZXRhaWwgYWJvdXQgaW5zdGFsbGF0aW9uLCBbNTQy XUNMSUNLIEhFUkUuCisKKyAgIEFsdGVybmF0aXZlbHksIHRvIGJ1aWxkIGEgcHJlLTkuMCB2ZXJz aW9uIG9mIEMtS2VybWl0IHdpdGhvdXQgVVVDUAorICAgbG9ja2ZpbGUgc3VwcG9ydCwgc2V0IHRo ZSBOT1VVQ1AgZmxhZzsgZS5nLiAoZm9yIE1hYyBPUyAxMC40KToKKworICAgICBtYWtlIG1hY29z eDEwLjQgS0ZMQUdTPS1ETk9VVUNQCisKKyAgIFRoaXMgY2lyY3VtdmVudHMgdGhlIFNFVCBQT1JU IGZhaWx1cmUgIj9BY2Nlc3MgdG8gbG9ja2ZpbGUgZGlyZWN0b3J5CisgICBkZW5pZWQiLiBCdXQg aXQgYWxzbyBzYWNyaWZpY2VzIEtlcm1pdCdzIGFiaWxpdHkgdG8gZW5zdXJlIHRoYXQgb25seQor ICAgb25lIGNvcHkgb2YgS2VybWl0IGNhbiBoYXZlIHRoZSBkZXZpY2Ugb3BlbiBhdCBhIHRpbWUs IHNpbmNlIE1hYyBPUyBYCisgICBpcyB0aGUgc2FtZSBhcyBhbGwgb3RoZXIgdmFyaWV0aWVzIG9m IFVuaXggaW4gdGhhdCBleGNsdXNpdmUgYWNjZXNzIHRvCisgICBzZXJpYWwgcG9ydHMgaXMgbm90 IGVuZm9yY2VkIGluIGFueSB3YXkuIEJ1dCBpZiBpdCdzIGZvciB5b3VyIG93bgorICAgZGVza3Rv cCBtYWNoaW5lIHRoYXQgbm9ib2R5IGVsc2UgdXNlcywgYSAtRE5PVVVDUCB2ZXJzaW9uIG1pZ2h0 IGJlCisgICBhZGVxdWF0ZSBhbmQgcHJlZmVyYWJsZSB0byB0aGUgYWx0ZXJuYXRpdmVzLgorCisg ICBUbyBidWlsZCBDLUtlcm1pdCA5LjAgd2l0aCBVVUNQIHN1cHBvcnQsIGRvOgorCisgICAgIG1h a2UgbWFjb3N4IEtGTEFHUz0tVU5PVVVDUAorCisgICAobm90ZTogIi1VIiwgbm90ICItRCkuCisK K1JTLTIzMiB2ZXJzdXMgUlMtNDIyCisKKyAgIE1lYW53aGlsZSwgYmFjayB3aGVuIE1hY3MgaGFk IHNlcmlhbCBwb3J0cywgdGhleSB3ZXJlIG5vdCBSUy0yMzIgKHRoZQorICAgc3RhbmRhcmQgZm9y IGNvbm5lY3RpbmcgY29tcHV0ZXJzIHdpdGggbmVhcmJ5IG1vZGVtcykgYnV0IHJhdGhlciBSUy00 MjIKKyAgIG9yIC00MjMgKGEgc3RhbmRhcmQgZm9yIGNvbm5lY3Rpbmcgc2VyaWFsIGRldmljZXMg b3ZlciBsb25nZXIKKyAgIGRpc3RhbmNlcykuIE1hY2ludG9zaCBzZXJpYWwgcG9ydHMgZG8gbm90 IHN1cHBvcnQgbW9kZW1zIHdlbGwgYmVjYXVzZQorICAgdGhleSBkbyBub3QgaGF2ZSBlbm91Z2gg d2lyZXMgKG9yIG1vcmUgcHJvcGVybHkgaW4gdGhlIGNhc2UgUlMtNDIyLzQyMywKKyAgIHdpcmUg cGFpcnMpIHRvIGNvbnZleSBhIHVzZWZ1bCBzdWJzZXQgb2YgbW9kZW0gc2lnbmFscy4KKworICAg S2V5c3BhbiBhbHNvIHNlbGxzIGEgWzU0M11VU0IgVHdpbiBTZXJpYWwgQWRhcHRlciB0aGF0IGdp dmVzIHlvdSB0d28KKyAgIE1pbmktRGluOCBSUy00MjIgcG9ydHMsIHRoYXQgYXJlIG5vIGJldHRl ciAob3Igd29yc2UpIGZvciBjb21tdW5pY2F0aW5nCisgICB3aXRoIG1vZGVtcyBvciBzZXJpYWwg ZGV2aWNlcyB0aGFuIGEgcmVhbCBNYWMgRGluLTggcG9ydCB3YXMuIEluCisgICBlc3NlbmNlLCB5 b3UgZ2V0IERhdGEgSW4sIERhdGEgT3V0LCBhbmQgdHdvIG1vZGVtIHNpZ25hbHMuIEl0IGxvb2tz IHRvCisgICBtZSBhcyBpZiB0aGUgc2lnbmFscyBjaG9zZW4gYnkgS2V5c3BhbiBhcmUgUlRTIGFu ZCBDVFMuIFRoaXMgZ2l2ZXMgeW91CisgICBoYXJkd2FyZSBmbG93IGNvbnRyb2wsIGJ1dCBhdCB0 aGUgZXhwZW5zZSBvZiBDYXJyaWVyIERldGVjdC4gVGh1cyB0bworICAgdXNlIEMtS2VybWl0IHdp dGggYSBLZXlzcGFuIFVTQiBzZXJpYWwgcG9ydCwgeW91IG11c3QgdGVsbCBDLUtlcm1pdCB0bzoK Kworc2V0IG1vZGVtIHR5cGUgbm9uZSAgICAgICAgICAgICAgICA7IChkb24ndCBleHBlY3QgYSBt b2RlbSkKK3NldCBjYXJyaWVyLXdhdGNoIG9mZiAgICAgICAgICAgICAgOyAoaWdub3JlIGNhcnJp ZXIgc2lnbmFsKQorc2V0IHBvcnQgL2Rldi9jdS5VU0ExOUgzYjFQMS4xICAgICA7IChvcGVuIHRo ZSBwb3J0KQorc2V0IGZsb3cgcnRzL2N0cyAgICAgICAgICAgICAgICAgICA7ICh0aGlzIGlzIHRo ZSBkZWZhdWx0KQorc2V0IHNwZWVkIDU3NjAwICAgICAgICAgICAgICAgICAgICA7IChvciB3aGF0 ZXZlcikKK2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAob3IgRElBTCBvciB3 aGF0ZXZlcikKKworICAgVXNlIEN0cmwtXEMgaW4gdGhlIG5vcm1hbCBtYW5uZXIgdG8gZXNjYXBl IGJhY2sgdG8gdGhlIEMtS2VybWl0PgorICAgcHJvbXB0LiBLZXJtaXQgY2FuJ3QgcG9wIGJhY2sg dG8gaXRzIHByb21wdCBhdXRvbWF0aWNhbGx5IHdoZW4gQ2FycmllcgorICAgZHJvcHMgYmVjYXVz ZSB0aGVyZSBpcyBubyBDYXJyaWVyIHNpZ25hbCBpbiB0aGUgcGh5c2ljYWwgaW50ZXJmYWNlLgor CisgICBIZXJlJ3MgYSB0eXBpY2FsIHNlcXVlbmNlIGZvciBjb25uZWN0aW5nIHRvIENpc2NvIGRl dmljZXMgKHVzaW5nIGEKKyAgIG1peHR1cmUgb2YgY29tbWFuZC1saW5lIG9wdGlvbnMgYW5kIGlu dGVyYWN0aXZlIGNvbW1hbmRzIGF0IHRoZQorICAgcHJvbXB0KToKKworJCBja2VybWl0IC1sIC9k ZXYvY3UuVVNBMTlIM2IxUDEuMSAtYiA5NjAwCitDLUtlcm1pdD4gc2V0IGNhcnJpZXItd2F0Y2gg b2ZmCitDLUtlcm1pdD4gY29ubmVjdAorCisgICBJbnN0cnVjdGlvbnMgZm9yIHRoZSBidWlsdC1p biBtb2RlbSAoaWYgYW55KSByZW1haW4gdG8gYmUgd3JpdHRlbiBkdWUKKyAgIHRvIGxhY2sgb2Yg a25vd2xlZGdlLiBJZiB5b3UgY2FuIGNvbnRyaWJ1dGUgaW5zdHJ1Y3Rpb25zLCBoaW50cywgb3IK KyAgIHRpcHMsIHBsZWFzZSBbNTQ0XXNlbmQgdGhlbSBpbi4KKworMy4yMC4gQy1LRVJNSVQgQU5E IENPSEVSRU5UCisKKyAgIFsgWzU0NV1Ub3AgXSBbIFs1NDZdQ29udGVudHMgXSBbIFs1NDddU2Vj dGlvbiBDb250ZW50cyBdIFsKKyAgIFs1NDhdUHJldmlvdXMgXQorCisgICBBbHNvIHNlZToKKwor ICAgICBbNTQ5XWh0dHA6Ly93d3cudW5pLWdpZXNzZW4uZGUvZmFxL2FyY2hpdi9jb2hlcmVudC1m YXEuZ2VuZXJhbC9tc2cwMDAKKyAgIDAwLmh0bWwKKworICAgTWFyayBXaWxsaWFtcyBDT0hFUkVO VCB3YXMgcGVyaGFwcyB0aGUgZmlyc3QgY29tbWVyY2lhbCBVbml4LWJhc2VkCisgICBvcGVyYXRp bmcgc3lzdGVtIGZvciBQQ3MsIGZpcnN0IGFwcGVhcmluZyBhYm91dCAxOTgzIG9yIC04NCBmb3Ig dGhlCisgICBQQy9YVCAoPyksIGFuZCBwb3B1bGFyIHVudGlsIGFib3V0IDE5OTMsIHdoZW4gTGlu dXggdG9vayBvdmVyLgorICAgQy1LZXJtaXQsIGFzIG9mIHZlcnNpb24gOC4wLCBpcyBzdGlsbCBj dXJyZW50IGZvciBDT0hFUkVOVCAzODYgNC4yCisgICAoaS5lLiBvbmx5IGZvciBpMzg2IGFuZCBh Ym92ZSkuIEN1cnNlcyBpcyBpbmNsdWRlZCwgYnV0IGxvdHMgb2Ygb3RoZXIKKyAgIGZlYXR1cmVz IGFyZSBvbWl0dGVkIGR1ZSB0byBsYWNrIG9mIHRoZSBhcHByb3ByaWF0ZSBPUyBmZWF0dXJlcywg QVBJcywKKyAgIGxpYnJhcmllcywgaGFyZHdhcmUsIG9yIGp1c3Qgc3BhY2U6IGUuZy4gVENQL0lQ LCBmbG9hdGluZy1wb2ludAorICAgYXJpdGhtZXRpYywgbGVhcm5lZCBzY3JpcHRzLiBFYXJsaWVy IHZlcnNpb25zIG9mIENPSEVSRU5UIHJhbiBvbiA4MDg2CisgICBhbmQgODAyODYsIGJ1dCB0aGVz ZSBhcmUgdG8gc21hbGwgdG8gYnVpbGQgb3IgcnVuIEMtS2VybWl0LCBidXQKKyAgIEctS2VybWl0 IHNob3VsZCBiZSBPSyAoYXMgbWlnaHQgYmUgYW5jaWVudCB2ZXJzaW9ucyBvZiBDLUtlcm1pdCku CisKKyAgIFlvdSBjYW4gYWN0dWFsbHkgYnVpbGQgYSB2ZXJzaW9uIHdpdGggZmxvYXRpbmcgcG9p bnQgc3VwcG9ydCAtLSBqdXN0CisgICB0YWtlIC1ETk9GTE9BVCBvdXQgb2YgQ0ZMQUdTIGFuZCBh ZGQgLWxtIHRvIExJQlM7IE5PRkxPQVQgaXMgdGhlCisgICBkZWZhdWx0IGJlY2F1c2UgQ09IRVJF TlQgdGVuZHMgdG8gcnVuIG9uIG9sZCBQQ3MgdGhhdCBkb24ndCBoYXZlCisgICBmbG9hdGluZy1w b2ludCBoYXJkd2FyZS4gWW91IGNhbiBhbHNvIGFkZCAiLWYiIHRvIENGTEFHUyB0byBoYXZlIGl0 CisgICBsaW5rIGluIHRoZSBmbG9hdGluZy1wb2ludCBlbXVsYXRpb24gbGlicmFyeS4gQWxzbyBJ J20gbm90IHN1cmUgd2h5CisgICAtRE5PTEVBUk4gaXMgaW5jbHVkZWQsIHNpbmNlIGl0IGRlcGVu ZHMgb24gc2VsZWN0KCksIHdoaWNoIENPSEVSRU5UCisgICBoYXMuCisKKzQuIEdFTkVSQUwgVU5J WC1TUEVDSUZJQyBISU5UUywgTElNSVRBVElPTlMsIEFORCBCVUdTCisKKyAgIFsgWzU1MF1Ub3Ag XSBbIFs1NTFdQ29udGVudHMgXSBbIFs1NTJdTmV4dCBdIFsgWzU1M11QcmV2aW91cyBdCisKKzQu MS4gTW9kZW0gU2lnbmFscworCisgICBUaGVyZSBzZWVtcyB0byBiZSBhbiBlc2NhbGF0aW5nIGRl bWFuZCBmb3IgdGhlIGFiaWxpdHkgdG8gY29udHJvbCAiZHVtYgorICAgc2VyaWFsIGRldmljZXMi IChzdWNoIGFzICJzbWFydGNhcmQgcmVhZGVycyIsIGJhcmNvZGUgcmVhZGVycywgZXRjKSBieQor ICAgZXhwbGljaXRseSBtYW5pcHVsYXRpbmcgbW9kZW0gc2lnbmFscywgcGFydGljdWxhcmx5IFJU Uy4gVGhpcyBtaWdodAorICAgaGF2ZSBiZWVuIGVhc3kgdG8gZG8gaW4gRE9TLCB3aGVyZSB0aGVy ZSBpcyBubyBvcGVyYXRpbmcgc3lzdGVtCisgICBzdGFuZGluZyBiZXR3ZWVuIHRoZSBhcHBsaWNh dGlvbiBhbmQgdGhlIHNlcmlhbCBkZXZpY2UsIGJ1dCBpdCBpcworICAgcHJvYmxlbWF0aWMgaW4g VW5peCwgd2hlcmUgbW9kZW0gc2lnbmFscyBhcmUgY29udHJvbGxlZCBieSB0aGUgc2VyaWFsCisg ICBkZXZpY2UgZHJpdmVyLiBJZiB0aGUgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgYW4gQVBJIGZv ciBkb2luZyB0aGlzLAorICAgdGhlbiB0aGUgYXBwbGljYXRpb24gY2FuJ3QgZG8gaXQuIElmIGl0 IGRvZXMgcHJvdmlkZSBhbiBBUEksIGV4cGVjdCBpdAorICAgdG8gYmUgdG90YWxseSBkaWZmZXJl bnQgb24gZWFjaCBVbml4IHBsYXRmb3JtLCBzaW5jZSB0aGVyZSBpcyBubworICAgc3RhbmRhcmQg Zm9yIHRoaXMuCisKKzQuMi4gTkZTIFRyb3VibGVzCisKKyAgIEJlZ2lubmluZyB3aXRoIEMtS2Vy bWl0IDYuMCwgdGhlIGRlZmF1bHQgQy1LZXJtaXQgcHJvbXB0IGluY2x1ZGVzIHlvdXIKKyAgIGN1 cnJlbnQgKHdvcmtpbmcpIGRpcmVjdG9yeTsgZm9yIGV4YW1wbGU6CisKKyAgWy91c3Ivb2xnYV0g Qy1LZXJtaXQ+CisKKyAgIChJbiBDLUtlcm1pdCA3LjAgdGhlIHNxdWFyZSBicmFjZXMgd2VyZSBy ZXBsYWNlZCBieSByb3VuZCBwYXJlbnRoZXNlcworICAgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGgg SVNPIDY0NiBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0cy4pCisKKyAgIElmIHRoYXQgZGlyZWN0b3J5 IGlzIG9uIGFuIE5GUy1tb3VudGVkIGRpc2ssIGFuZCBORlMgc3RvcHMgd29ya2luZyBvcgorICAg dGhlIGRpc2sgYmVjb21lcyB1bmF2YWlsYWJsZSwgQy1LZXJtaXQgd2lsbCBoYW5nIHdhaXRpbmcg Zm9yIE5GUyBhbmQvb3IKKyAgIHRoZSBkaXNrIHRvIGNvbWUgYmFjay4gV2hldGhlciB5b3UgY2Fu IGludGVycnVwdCBDLUtlcm1pdCB3aGVuIGl0IGlzCisgICBodW5nIHRoaXMgd2F5IGRlcGVuZHMg b24gdGhlIHNwZWNpZmljIE9TLiBLZXJtaXQgaGFzIGNhbGxlZCB0aGUKKyAgIG9wZXJhdGluZyBz eXN0ZW1zJ3MgZ2V0Y3dkKCkgZnVuY3Rpb24sIGFuZCBpcyB3YWl0aW5nIGZvciBpdCB0byByZXR1 cm4uCisgICBTb21lIHZlcnNpb25zIG9mIFVuaXggKGUuZy4gSFAtVVggOS54KSBhbGxvdyB0aGlz IGZ1bmN0aW9uIHRvIGJlCisgICBpbnRlcnJ1cHRlZCB3aXRoIFNJR0lOVCAoQ3RybC1DKSwgb3Ro ZXJzIChzdWNoIGFzIEhQLVVYIDgueCkgZG8gbm90LiBUbworICAgYXZvaWQgdGhpcyBlZmZlY3Qs IHlvdSBjYW4gYWx3YXlzIHVzZSBTRVQgUFJPTVBUIHRvIGNoYW5nZSB5b3VyIHByb21wdAorICAg dG8gc29tZXRoaW5nIHRoYXQgZG9lcyBub3QgaW52b2x2ZSBjYWxsaW5nIGdldGN3ZCgpLCBidXQg aWYgTkZTIGlzIG5vdAorICAgcmVzcG9uZGluZywgQy1LZXJtaXQgd2lsbCBzdGlsbCBoYW5nIGFu eSB0aW1lIHlvdSBnaXZlIGEgY29tbWFuZCB0aGF0CisgICByZWZlcnMgdG8gYW4gTkZTLW1vdW50 ZWQgZGlyZWN0b3J5LiBBbHNvIG5vdGUgdGhhdCBpbiBzb21lIGNhc2VzLCB0aGUKKyAgIHVuaW50 ZXJydXB0aWJpbGl0eSBvZiBORlMtZGVwZW5kZW50IHN5c3RlbSBvciBsaWJyYXJ5IGNhbGxzIGlz CisgICBjb25zaWRlcmVkIGEgYnVnLCBhbmQgc29tZXRpbWVzIHRoZXJlIGFyZSBwYXRjaGVzLiBG b3IgSFAtVVgsIGZvcgorICAgZXhhbXBsZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlZCBieToKKyAgSFAtVVggMTAuMjAg ICAgIGxpYmMgICAgUEhDT184NzY0ICAgICAgICAgICAgICAgICAgICAgUEhDT18xNDg5MS9QSENP XzE2NzIzCisgIEhQLVVYIDEwLjEwICAgICBsaWJjICAgIFBIQ09fODc2MyAgICAgICAgICAgICAg ICAgICAgIFBIQ09fMTQyNTQvUEhDT18xNjcyMgorICBIUC1VWCA5LnggICAgICAgbGliYyAgICBQ SENPXzc3NDcgICAgICAgUzcwMCAgICAgICAgICBQSENPXzEzMDk1CisgIEhQLVVYIDkueCAgICAg ICBsaWJjICAgIFBIQ09fNjc3OSAgICAgICBTODAwICAgICAgICAgIFBIQ09fMTExNjIKKworNC4z LiBDLUtlcm1pdCBhcyBMb2dpbiBTaGVsbAorCisgICBZb3UgbWlnaHQgaGF2ZSByZWFzb24gdG8g bWFrZSBDLUtlcm1pdCB0aGUgbG9naW4gc2hlbGwgZm9yIGEgc3BlY2lmaWMKKyAgIHVzZXIsIGJ5 IGVudGVyaW5nIHRoZSBwYXRobmFtZSBvZiBLZXJtaXQgKHBvc3NpYmx5IHdpdGggY29tbWFuZC1s aW5lCisgICBzd2l0Y2hlcywgc3VjaCBhcyAteCB0byBwdXQgaXQgaW4gc2VydmVyIG1vZGUpIGlu dG8gdGhlIHNoZWxsIGZpZWxkIG9mCisgICB0aGUgL2V0Yy9wYXNzd2QgZmlsZS4gVGhpcyB3b3Jr cyBwcmV0dHkgd2VsbC4gSW4gc29tZSBjYXNlcywgZm9yCisgICAidWx0aW1hdGUgc2VjdXJpdHki LCB5b3UgbWlnaHQgd2FudCB0byB1c2UgYSB2ZXJzaW9uIGJ1aWx0IHdpdGgKKyAgIC1ETk9QVVNI IChzZWUgdGhlIFs1NTRdQ29uZmlndXJhdGlvbnMgT3B0aW9ucyBkb2N1bWVudCBmb3IgdGhpcywg YnV0CisgICBldmVuIGlmIHlvdSBkb24ndCwgdGhlbiBQVVNIaW5nIG9yIHNoZWxsaW5nIG91dCBm cm9tIEMtS2VybWl0IGp1c3QKKyAgIGJyaW5ncyB1cCBhIG5ldyBjb3B5IG9mIEMtS2VybWl0IChi dXQgd2FybmluZzogdGhpcyBkb2VzIG5vdCBwcmV2ZW50CisgICB0aGUgdXNlciBmcm9tIGV4cGxp Y2l0bHkgcnVubmluZyBhIHNoZWxsOyBlLmcuICJydW4gL2Jpbi9zaCI7IHVzZQorICAgTk9QVVNI IHRvIHByZXZlbnQgdGhpcykuCisKKzQuNC4gQy1LZXJtaXQgdmVyc3VzIHNjcmVlbiBhbmQgc3Bs aXR2dAorCisgICBDLUtlcm1pdCBmaWxlIHRyYW5zZmVycyB3aWxsIHByb2JhYmx5IG5vdCB3b3Jr IGlmIGF0dGVtcHRlZCB0aHJvdWdoIHRoZQorICAgInNwbGl0dnQiIG9yIEdOVSAic2NyZWVuIiBw cm9ncmFtcyBiZWNhdXNlIHRoZSBzY3JlZW4gb3B0aW1pemF0aW9uIChvcgorICAgYXQgbGVhc3Qs IGxpbmUgd3JhcHBpbmcsIGNvbnRyb2wtY2hhcmFjdGVyIGFic29ycHRpb24pIGRvbmUgYnkgdGhp cworICAgcGFja2FnZSBpbnRlcmZlcmVzIHdpdGggS2VybWl0J3MgcGFja2V0cy4KKworICAgVGhl IHNhbWUgY2FuIGFwcGx5IHRvIGFueSBvdGhlciBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgdXNl cidzIHNlc3Npb24KKyAgIGlzIGNhcHR1cmVkLCBtb25pdG9yZWQsIHJlY29yZGVkLCBvciBtYW5p cHVsYXRlZC4gRXhhbXBsZXMgaW5jbHVkZSB0aGUKKyAgICdzY3JpcHQnIHByb2dyYW0gKGZvciBt YWtpbmcgYSB0eXBlc2NyaXB0IG9mIGEgc2Vzc2lvbiksIHRoZQorICAgQ29tcHV0cm9uaWNzIFBF RUsgcGFja2FnZSBhbmQgcGtzaCAoYXQgbGVhc3QgdmVyc2lvbnMgb2YgaXQgcHJpb3IgdG8KKyAg IDEuOUspLCBhbmQgc28gb24uCisKKyAgIFlvdSBtaWdodCB0cnkgdGhlIGZvbGxvd2luZyAtLSB3 aGF0IHdlIGNhbGwgImRvb21zZGF5IEtlcm1pdCIgLS0KKyAgIHNldHRpbmdzIHRvIHB1c2ggcGFj a2V0cyB0aHJvdWdoIGV2ZW4gdGhlIGRlbnNlc3QgYW5kIG1vc3Qgb2JzdHJ1Y3RpdmUKKyAgIGNv bm5lY3Rpb25zLCBzdWNoIGFzICJzY3JlZW4iIGFuZCAic3BsaXR2dCIgKGFuZCBjZXJ0YWluIGtp bmRzIG9mIDMyNzAKKyAgIHByb3RvY29sIGVtdWxhdG9ycyk6IEdpdmUgdGhlc2UgY29tbWFuZHMg dG8gQk9USCBLZXJtaXQgcHJvZ3JhbXM6CisKKyAgU0VUIEZMT1cgTk9ORQorICBTRVQgQ09OVFJP TCBQUkVGSVggQUxMCisgIFNFVCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEggNzAKKyAgU0VUIFJFQ0VJ VkUgU1RBUlQgNjIKKyAgU0VUIFNFTkQgU1RBUlQgNjIKKyAgU0VUIFNFTkQgUEFVU0UgMTAwCisg IFNFVCBCTE9DSyBCCisKKyAgIElmIGl0IHdvcmtzLCBpdCB3aWxsIGJlIHNsb3cuCisKKzQuNS4g Qy1LZXJtaXQgdmVyc3VzIERPUyBFbXVsYXRvcnMKKworICAgT24gVW5peCB3b3Jrc3RhdGlvbnMg ZXF1aXBwZWQgd2l0aCBET1MgZW11bGF0b3JzIGxpa2UgU29mdFBDLCB3YXRjaCBvdXQKKyAgIGZv ciB3aGF0IHRoZXNlIGVtdWxhdG9ycyBkbyB0byB0aGUgc2VyaWFsIHBvcnQgZHJpdmVycy4gQWZ0 ZXIgdXNpbmcgYQorICAgRE9TIGVtdWxhdG9yLCBwYXJ0aWN1bGFybHkgaWYgeW91IHVzZSBpdCB0 byBydW4gRE9TIGNvbW11bmljYXRpb25zCisgICBzb2Z0d2FyZSwgeW91IG1pZ2h0IGhhdmUgdG8g cmVjb25maWd1cmUgdGhlIHNlcmlhbCBwb3J0cyBmb3IgdXNlIGJ5CisgICBVbml4LgorCis0LjYu IEMtS2VybWl0IHZlcnN1cyBKb2IgQ29udHJvbAorCisgICBJbnRlcnJ1cHRpb24gYnkgQ3RybC1a IG1ha2VzIFVuaXggQy1LZXJtaXQgdHJ5IHRvIHN1c3BlbmQgaXRzZWxmIHdpdGgKKyAgIGtpbGwo MCxTSUdUU1RQKSwgYnV0IG9ubHkgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBqb2IgY29udHJv bCwgYXMKKyAgIGRldGVybWluZWQgYnkgd2hldGhlciB0aGUgc3ltYm9sIFNJR1RTVFAgaXMgZGVm aW5lZCAob3Igb24gUE9TSVggb3IKKyAgIFNWUjQgc3lzdGVtcywgaWYgc3ljb25mKF9TQ19KT0Jf Q09OVFJPTCkgb3IgX1BPU0lYX0pPQl9DT05UUk9MIGluCisgICBhZGRpdGlvbiB0byBTSUdUU1RQ KS4gSG93ZXZlciwgaWYgS2VybWl0IGlzIHJ1bm5pbmcgdW5kZXIgYSBsb2dpbiBzaGVsbAorICAg KHN1Y2ggYXMgdGhlIG9yaWdpbmFsIEJvdXJuZSBzaGVsbCkgdGhhdCBkb2VzIG5vdCBzdXBwb3J0 IGpvYiBjb250cm9sLAorICAgdGhlIHVzZXIncyBzZXNzaW9uIGhhbmdzIGFuZCBtdXN0IGJlIGxv Z2dlZCBvdXQgZnJvbSBhbm90aGVyIHRlcm1pbmFsLAorICAgb3IgaHVuZyB1cCBvbi4gVGhlcmUg aXMgbm8gd2F5IEtlcm1pdCBjYW4gZGVmZW5kIGl0c2VsZiBhZ2FpbnN0IHRoaXMuCisgICBJZiB5 b3UgdXNlIGEgbm9uLWpvYiBjb250cm9sIHNoZWxsIG9uIGEgY29tcHV0ZXIgdGhhdCBzdXBwb3J0 cyBqb2IKKyAgIGNvbnRyb2wsIGdpdmUgYSBjb21tYW5kIGxpa2UgInN0dHkgc3VzcCB1bmRlZiIg dG8gZml4IGl0IHNvIHRoZSBzdXNwZW5kCisgICBzaWduYWwgaXMgbm90IGF0dGFjaGVkIHRvIGFu eSBwYXJ0aWN1bGFyIGtleSwgb3IgZ2l2ZSB0aGUgY29tbWFuZCBTRVQKKyAgIFNVU1BFTkQgT0ZG IHRvIEMtS2VybWl0LCBvciBidWlsZCBDLUtlcm1pdCB3aXRoIC1ETk9KQy4KKworNC43LiBEYXRl cyBhbmQgVGltZXMKKworICAgVW5peCB0aW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHR5cGljYWxs eSBhcHBseSBsb2NhbGUgcnVsZXMgdG8gcmV0dXJuCisgICBsb2NhbCB0aW1lIGluIHRlcm1zIG9m IGFueSBzZWFzb25hbCB0aW1lIHpvbmUgY2hhbmdlIGluIGVmZmVjdCBmb3IgdGhlCisgICBnaXZl biBkYXRlLiBUaGUgZGlmZmRhdGUgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBzYW1lIHRpbWV6 b25lIHJ1bGVzCisgICBhcmUgaW4gZWZmZWN0IGZvciBib3RoIGRhdGVzLCBidXQgYSBkYXRlIHdp dGggdGltZXpvbmUgaW5mb3JtYXRpb24gd2lsbAorICAgYmUgY29udmVydGVkIHRvIHRoZSBsb2Nh bCB0aW1lIHpvbmUgaW4gZWZmZWN0IGF0IHRoZSBnaXZlbiB0aW1lLCBlLmcuLAorICAgYSBHTVQg c3BlY2lmaWNhdGlvbiB3aWxsIHByb2R1Y2UgZWl0aGVyIGEgU3RhbmRhcmQgVGltZSBvciBEYXls aWdodAorICAgU2F2aW5ncyBUaW1lLCBkZXBlbmRpbmcgb24gd2hpY2ggYXBwbGllcyBhdCB0aGUg Z2l2ZW4gdGltZS4gQW4gZXhhbXBsZQorICAgdXNpbmcgdGhlIDIwMDEgc2Vhc29uYWwgY2hhbmdl IGZyb20gRURUICgtMDQwMCkgdG8gRVNUICgtMDUwMCk6CisKKyAgQy1LZXJtaXQ+IERBVEUgMjAw MTEwMjggMDU6MDE6MDIgR01UICA7IEVEVAorICAyMDAxMTAyOCAwMTowMTowMgorICBDLUtlcm1p dD4gREFURSAyMDAxMTAyOCAwNjowMTowMiBHTVQgIDsgRVNUCisgIDIwMDExMDI4IDAxOjAxOjAy CisgIEMtS2VybWl0PgorCisgICBidXQgdGhlIGltcGxpY2l0IGNoYW5nZSBpbiB0aW1lem9uZSBv ZmZzZXQgaXMgbm90IHJlY29nbml6ZWQ6CisKKyAgQy1LZXJtaXQ+IGVjaG8gXGZkaWZmZGF0ZSgy MDAxMTAyOCAwNTowMTowMiBHTVQsIDIwMDExMDI4IDA2OjAxOjAyIEdNVCkKKyAgKzA6MDAKKyAg Qy1LZXJtaXQ+CisKKyAgIERhdGUvdGltZSBhcml0aG1ldGljLCBvZmZzZXRzLCBkZWx0YSB0aW1l cywgYW5kIHRpbWV6b25lIHN1cHBvcnQgYXJlCisgICBuZXcgdG8gQy1LZXJtaXQgOC4wLCBhbmQg bWlnaHQgYmUgZXhwZWN0ZWQgdG8gZXZvbHZlIGFuZCBpbXByb3ZlIGluCisgICBzdWJzZXF1ZW50 IHJlbGVhc2VzLgorCisgICBPbiBzb21lIHBsYXRmb3JtcywgZmlsZXMgZG93bmxvYWRlZCB3aXRo IEhUVFAgcmVjZWl2ZSB0aGUgY3VycmVudAorICAgdGltZXN0YW1wLCByYXRoZXIgdGhhbiB0aGUg SFRUUCAiTGFzdCBNb2RpZmllZCIgdGltZSAodGhpcyBjYW4gYmUgZml4ZWQKKyAgIGJ5IGluY2x1 ZGluZyB1dGltZS5oLCBlLmcuIGluIFN1bk9TIGFuZCBUcnU2NC4uLikuCisKKzQuOC4gUHNldWRv dGVybWluYWxzCisKKyAgIFRoZSBTU0ggYW5kIFBUWSBjb21tYW5kcyB3b3JrIGJ5IGFzc2lnbmlu ZyBhIHBzZXVkb3Rlcm1pbmFsIGFuZCByZWFkaW5nCisgICBhbmQgd3JpdGluZyBmcm9tIGl0LiBQ ZXJmb3JtYW5jZSB2YXJpZXMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpYworICAgcGxhdGZvcm0g cmFuZ2luZyBmcm9tIHZlcnkgZmFzdCB0byB2ZXJ5IGZsb3cuCisKKyAgIFNTSCBhbmQgUFRZIGNv bW1hbmRzIGNhbiBmYWlsIGlmIChhKSBhbGwgcHNldWRvdGVybWluYWxzIGFyZSBpbiB1c2U7IG9y CisgICAoYikgeW91IGRvIG5vdCBoYXZlIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoZSBwc2V1ZG90 ZXJtaW5hbCB0aGF0IHdhcworICAgYXNzaWduZWQuIEFuIGV4YW1wbGUgb2YgKGIpIHdhcyByZXBv cnRlZCB3aXRoIHRoZSBaaXBzbGFjayBTbGFja3dhcmUKKyAgIExpbnV4IGRpc3RyaWJ1dGlvbiwg aW4gd2hpY2ggdGhlIHBzZXVkb3Rlcm1pbmFscyB3ZXJlIGNyZWF0ZWQgd2l0aAorICAgY3J3LXIt LXItLSBwZXJtaXNzaW9uLCBpbnN0ZWFkIG9mIGNydy1ydy1ydy0uCisKKzQuOS4gTWlzY2VsbGFu ZW91cworCisgICAgICogUmVwb3J0ZWRseSwgdGhlIFVuaXggQy1LZXJtaXQgc2VydmVyLCB1bmRl ciBzb21lIGNvbmRpdGlvbnMsIG9uCisgICAgICAgY2VydGFpbiBwYXJ0aWN1bGFyIHN5c3RlbXMs IGZhaWxzIHRvIGxvZyBvdXQgaXRzIGxvZ2luIHNlc3Npb24gdXBvbgorICAgICAgIHJlY2VpcHQg b2YgYSBCWUUgY29tbWFuZC4gQmVmb3JlIHJlbHlpbmcgb24gdGhlIEJZRSBjb21tYW5kCisgICAg ICAgd29ya2luZywgdGVzdCBpdCBhIGZldyB0aW1lcyB0byBtYWtlIHN1cmUgaXQgd29ya3Mgb24g eW91ciBzeXN0ZW06CisgICAgICAgdGhlcmUgbWlnaHQgYmUgc3lzdGVtIGNvbmZpZ3VyYXRpb24g b3Igc2VjdXJpdHkgbWVjaGFuaXNtcyB0bworICAgICAgIHByZXZlbnQgYW4gaW5mZXJpb3IgcHJv Y2VzcyAobGlrZSBLZXJtaXQpIGZyb20ga2lsbGluZyBhIHN1cGVyaW9yCisgICAgICAgb25lIChs aWtlIHRoZSBsb2dpbiBzaGVsbCkuCisgICAgICogT24gQVQmVCA3MzAwICgzQjEpIG1hY2hpbmVz LCB5b3UgbWlnaHQgaGF2ZSB0byAic3R0eSBubDEiIGJlZm9yZQorICAgICAgIHN0YXJ0aW5nIEMt S2VybWl0LiBEbyB0aGlzIGlmIGNoYXJhY3RlcnMgYXJlIGxvc3QgZHVyaW5nCisgICAgICAgY29t bXVuaWNhdGlvbnMgb3BlcmF0aW9ucy4KKyAgICAgKiBVbmRlciB0aGUgYmFzaCBzaGVsbCAodmVy c2lvbnMgcHJpb3IgdG8gMS4wNyBmcm9tIENXUlUpLCAicHVzaGluZyIKKyAgICAgICB0byBhbiBp bmZlcmlvciBzaGVsbCBhbmQgdGhlbiBleGl0aW5nIGJhY2sgdG8gS2VybWl0IGxlYXZlcyBLZXJt aXQKKyAgICAgICBpbiB0aGUgYmFja2dyb3VuZCBzdWNoIHRoYXQgaXQgbXVzdCBiZSBleHBsaWNp dGx5IGZnJ2QuIFRoaXMgaXMKKyAgICAgICByZXBvcnRlZGx5IGZpeGVkIGluIHZlcnNpb24gMS4w NyBvZiBiYXNoIChhbmQgZGVmaW5pdGVseSBpbiBtb2Rlcm4KKyAgICAgICBiYXNoIHZlcnNpb25z KS4KKworNS4gSU5JVElBTElaQVRJT04gQU5EIENPTU1BTkQgRklMRVMKKworICAgWyBbNTU1XVRv cCBdIFsgWzU1Nl1Db250ZW50cyBdIFsgWzU1N11OZXh0IF0gWyBbNTU4XVByZXZpb3VzIF0KKwor ICAgQy1LZXJtaXQncyBpbml0aWFsaXphdGlvbiBmaWxlIGZvciBVbml4IGlzIC5rZXJtcmMgKGxv d2VyY2FzZSwgc3RhcnRzCisgICB3aXRoIHBlcmlvZCkgaW4geW91ciBob21lIGRpcmVjdG9yeSwg dW5sZXNzIEtlcm1pdCB3YXMgYnVpbHQgd2l0aCB0aGUKKyAgIHN5c3RlbS13aWRlIGluaXRpYWxp emF0aW9uLWZpbGUgb3B0aW9uIChzZWUgdGhlIFs1NTldQy1LZXJtaXQgZm9yIFVuaXgKKyAgIElu c3RhbGxhdGlvbiBJbnN0cnVjdGlvbnMpLgorCisgICBDLUtlcm1pdCBpZGVudGlmaWVzIHlvdXIg aG9tZSBkaXJlY3RvcnkgYmFzZWQgb24gdGhlIGVudmlyb25tZW50CisgICB2YXJpYWJsZSwgSE9N RS4gTW9zdCBVbml4IHN5c3RlbXMgc2V0IHRoaXMgdmFyaWFibGUgYXV0b21hdGljYWxseSB3aGVu CisgICB5b3UgbG9nIGluLiBJZiBDLUtlcm1pdCBjYW4ndCBmaW5kIHlvdXIgaW5pdGlhbGl6YXRp b24gZmlsZSwgY2hlY2sgeW91cgorICAgSE9NRSB2YXJpYWJsZToKKworICBlY2hvICRIT01FICAg ICAgKGF0IHRoZSBVbml4IHByb21wdCkKKworICAgb3I6CisKKyAgZWNobyBcJChIT01FKSAgIChh dCB0aGUgQy1LZXJtaXQgcHJvbXB0KQorCisgICBJZiBIT01FIGlzIG5vdCBkZWZpbmVkLCBvciBp cyBkZWZpbmVkIGluY29ycmVjdGx5LCBhZGQgdGhlIGFwcHJvcHJpYXRlCisgICBkZWZpbml0aW9u IHRvIHlvdXIgVW5peCAucHJvZmlsZSBvciAubG9naW4gZmlsZSwgZGVwZW5kaW5nIG9uIHlvdXIK KyAgIHNoZWxsOgorCisgIHNldGVudiBIT01FIGZ1bGwtcGF0aG5hbWUtb2YteW91ci1ob21lLWRp cmVjdG9yeSAgKEMtU2hlbGwsIC5sb2dpbiBmaWxlKQorCisgICBvcjoKKworICBIT01FPWZ1bGwt cGF0aG5hbWUtb2YteW91ci1ob21lLWRpcmVjdG9yeSAgICAgICAgIChzaCwga3NoLCAucHJvZmls ZSBmaWxlKQorICBleHBvcnQgSE9NRQorCisgICBOT1RFOiBWYXJpb3VzIG90aGVyIG9wZXJhdGlv bnMgZGVwZW5kIG9uIHRoZSBjb3JyZWN0IGRlZmluaXRpb24gb2YKKyAgIEhPTUUuIFRoZXNlIGlu Y2x1ZGUgdGhlICJ0aWxkZS1leHBhbnNpb24iIGZlYXR1cmUsIHdoaWNoIGFsbG93cyB5b3UgdG8K KyAgIHJlZmVyIHRvIHlvdXIgaG9tZSBkaXJlY3RvcnkgYXMgIn4iIGluIGZpbGVuYW1lcyB1c2Vk IGluIEMtS2VybWl0CisgICBjb21tYW5kcywgZS5nLjoKKworICBzZW5kIH4vLmtlcm1yYworCisg ICBhcyB3ZWxsIGFzIHRoZSBcdihob21lKSB2YXJpYWJsZS4KKworICAgUHJpb3IgdG8gdmVyc2lv biA1QSgxOTApLCBDLUtlcm1pdCB3b3VsZCBsb29rIGZvciBpdHMgaW5pdGlhbGl6YXRpb24KKyAg IGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlmIGl0IHdhcyBub3QgZm91bmQgaW4gdGhl IGhvbWUKKyAgIGRpcmVjdG9yeS4gVGhpcyBmZWF0dXJlIHdhcyByZW1vdmVkIGZyb20gNUEoMTkw KSBiZWNhdXNlIGl0IHdhcyBhCisgICBzZWN1cml0eSByaXNrLiBTb21lIHBlb3BsZSwgaG93ZXZl ciwgbGlrZWQgdGhpcyBiZWhhdmlvciBhbmQgaGFkCisgICAua2VybXJjIGZpbGVzIGluIGFsbCB0 aGVpciBkaXJlY3RvcmllcyB0aGF0IHdvdWxkIHNldCB1cCB0aGluZ3MKKyAgIGFwcHJvcHJpYXRl bHkgZm9yIHRoZSBmaWxlcyB0aGVyZWluLiBJZiB5b3Ugd2FudCB0aGlzIGJlaGF2aW9yLCB5b3Ug Y2FuCisgICBhY2NvbXBsaXNoIGl0IGluIHZhcmlvdXMgd2F5cywgZm9yIGV4YW1wbGU6CisKKyAg ICAgKiBDcmVhdGUgYSBzaGVsbCBhbGlhcywgZm9yIGV4YW1wbGU6CisgIGFsaWFzIGtkPSJrZXJt aXQgLVkgLi8ua2VybXJjIgorCisgICAgICogQ3JlYXRlIGEgLmtlcm1yYyBmaWxlIGluIHlvdXIg aG9tZSBkaXJlY3RvcnksIHdob3NlIGNvbnRlbnRzIGFyZToKKyAgdGFrZSAuLy5rZXJtcmMKKwor ICAgU3VwcG9zZSB5b3UgbmVlZCB0byBwYXNzIGEgcGFzc3dvcmQgZnJvbSB0aGUgVW5peCBjb21t YW5kIGxpbmUgdG8gYQorICAgQy1LZXJtaXQgc2NyaXB0IHByb2dyYW0sIGluIHN1Y2ggYSB3YXkg dGhhdCBpdCBkb2VzIG5vdCBzaG93IHVwIGluICJwcyIKKyAgIG9yICJ3IiBsaXN0aW5ncy4gSGVy ZSBpcyBhIG1ldGhvZCAobm90IGd1YXJhbnRlZWQgdG8gYmUgMTAwJSBzZWN1cmUsCisgICBidXQg ZGVmaW5pdGVseSBtb3JlIHNlY3VyZSB0aGFuIHRoZSBtb3JlIG9idmlvdXMgbWV0aG9kcyk6CisK KyAgZWNobyBteXBhc3N3b3JkIHwga2VybWl0IG15c2NyaXB0CisKKyAgIFRoZSAibXlzY3JpcHQi IGZpbGUgY29udGFpbnMgYWxsIHRoZSBjb21tYW5kcyB0aGF0IG5lZWQgdG8gYmUgZXhlY3V0ZWQK KyAgIGR1cmluZyB0aGUgS2VybWl0IHNlc3Npb24sIHVwIHRvIGFuZCBpbmNsdWRpbmcgRVhJVCwg YW5kIGFsc28gaW5jbHVkZXMKKyAgIGFuIEFTSyBvciBBU0tRIGNvbW1hbmQgdG8gcmVhZCB0aGUg cGFzc3dvcmQgZnJvbSBzdGFuZGFyZCBpbnB1dCwgd2hpY2gKKyAgIGhhcyBiZWVuIHBpcGVkIGlu IGZyb20gdGhlIFVuaXggJ2VjaG8nIGNvbW1hbmQsIGJ1dCBpdCBtdXN0IG5vdCBpbmNsdWRlCisg ICBhIENPTk5FQ1QgY29tbWFuZC4gT25seSAia2VybWl0IG15c2NyaXB0IiBzaG93cyB1cCBpbiB0 aGUgcHMgbGlzdGluZy4KKworNi4gQ09NTVVOSUNBVElPTiBTUEVFRCBTRUxFQ1RJT04KKworICAg WyBbNTYwXVRvcCBdIFsgWzU2MV1Db250ZW50cyBdIFsgWzU2Ml1OZXh0IF0gWyBbNTYzXVByZXZp b3VzIF0KKworICAgVmVyc2lvbi03IGJhc2VkIFVuaXggaW1wbGVtZW50YXRpb25zLCBpbmNsdWRp bmcgNC4zIEJTRCBhbmQgZWFybGllciBhbmQKKyAgIFVuaXggc3lzdGVtcyBiYXNlZCB1cG9uIEJT RCwgdXNlIGEgNC1iaXQgZmllbGQgdG8gcmVjb3JkIGEgc2VyaWFsCisgICBkZXZpY2UncyB0ZXJt aW5hbCBzcGVlZC4gVGhpcyBsZWF2ZXMgcm9vbSBmb3IgMTYgc3BlZWRzLCBvZiB3aGljaCB0aGUK KyAgIGZpcnN0IDE0IGFyZSBub3JtYWxseToKKworICAgICAwLCA1MCwgNzUsIDExMCwgMTM0LjUs IDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwKKyAgICAgYW5kIDk2 MDAKKworICAgVGhlIHJlbWFpbmluZyB0d28gYXJlIHVzdWFsbHkgY2FsbGVkIEVYVEEgYW5kIEVY VEIsIGFuZCBhcmUgZGVmaW5lZCBieQorICAgdGhlIHBhcnRpY3VsYXIgVW5peCBpbXBsZW1lbnRh dGlvbi4gQy1LZXJtaXQgZGV0ZXJtaW5lcyB3aGljaCBzcGVlZHMKKyAgIGFyZSBhdmFpbGFibGUg b24geW91ciBzeXN0ZW0gYmFzZWQgb24gd2hldGhlciBzeW1ib2xzIGZvciB0aGVtIGFyZQorICAg ZGVmaW5lZCBpbiB5b3VyIHRlcm1pbmFsIGRldmljZSBoZWFkZXIgZmlsZXMuIEVYVEEgaXMgZ2Vu ZXJhbGx5IGFzc3VtZWQKKyAgIHRvIGJlIDE5MjAwIGFuZCBFWFRCIDM4NDAwLCBidXQgdGhlc2Ug YXNzdW1wdGlvbnMgbWlnaHQgYmUgd3JvbmcsIG9yCisgICB0aGV5IG1pZ2h0IG5vdCBhcHBseSB0 byBhIHBhcnRpY3VsYXIgZGV2aWNlIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZQorICAgc3Bl ZWRzLiBQcmVzdW1hYmx5LCBpZiB5b3UgdHJ5IHRvIHNldCBhIHNwZWVkIHRoYXQgaXMgbm90IGxl Z2FsIG9uIGEKKyAgIHBhcnRpY3VsYXIgZGV2aWNlLCB0aGUgZHJpdmVyIHdpbGwgcmV0dXJuIGFu IGVycm9yLCBidXQgdGhpcyBjYW4gbm90IGJlCisgICBndWFyYW50ZWVkLgorCisgICBPbiB0aGVz ZSBzeXN0ZW1zLCBpdCBpcyB1c3VhbGx5IG5vdCBwb3NzaWJsZSB0byBzZWxlY3QgYSBzcGVlZCBv ZiAxNDQwMAorICAgYnBzIGZvciB1c2Ugd2l0aCBWLjMyYmlzIG1vZGVtcy4gSW4gdGhhdCBjYXNl LCB1c2UgMTkyMDAgb3IgMzg0MDAgYnBzLAorICAgY29uZmlndXJlIHlvdXIgbW9kZW0gdG8gbG9j ayBpdHMgaW50ZXJmYWNlIHNwZWVkIGFuZCB0byB1c2UgUlRTL0NUUworICAgZmxvdyBjb250cm9s LCBhbmQgdGVsbCBDLUtlcm1pdCB0byBTRVQgRkxPVyBSVFMvQ1RTIGFuZCBTRVQgRElBTAorICAg U1BFRUQtTUFUQ0hJTkcgT0ZGLgorCisgICBUaGUgc2l0dWF0aW9uIGlzIHNpbWlsYXIsIGJ1dCBk aWZmZXJlbnQsIGluIFN5c3RlbSBWLiBTVklEIFRoaXJkCisgICBFZGl0aW9uIGxpc3RzIHRoZSBz YW1lIHNwZWVkcywgMCB0aHJvdWdoIDM4NDAwLgorCisgICBTb21lIHZlcnNpb25zIG9mIFVuaXgs IGFuZC9vciB0ZXJtaW5hbCBkZXZpY2UgZHJpdmVycyB0aGF0IGNvbWUgd2l0aAorICAgY2VydGFp biB0aGlyZC1wYXJ0eSBhZGQtaW4gaGlnaC1zcGVlZCBzZXJpYWwgY29tbXVuaWNhdGlvbiBpbnRl cmZhY2VzLAorICAgdXNlIHRoZSBsb3cgImJhdWQgcmF0ZXMiIHRvIHN0YW5kIGZvciBoaWdoZXIg b25lcy4gRm9yIGV4YW1wbGUsIFNFVAorICAgU1BFRUQgNTAgZ2V0cyB5b3UgNTc2MDAgYnBzOyBT RVQgU1BFRUQgNzUgZ2V0cyB5b3UgNzY4MDA7IFNFVCBTUEVFRCAxMTAKKyAgIGdldHMgMTE1MjAw LgorCisgICBTQ08gT0RUIDMuMCBpcyBhbiBleGFtcGxlIHdoZXJlIGEgImJhdWQtcmF0ZS10YWJs ZSBwYXRjaCIgY2FuIGJlCisgICBhcHBsaWVkIHRoYXQgY2FuIHJvdGF0ZSB0aGUgdHR5IGRyaXZl ciBiYXVkIHJhdGUgdGFibGUgc3VjaCB0aGF0CisgICA2MDA9NTc2MDAgYW5kIDE4MDA9MTE1ayBi YXVkLiBTaW1pbGFybHkgZm9yIERpZ2lib2FyZAorICAgbXVsdGlwb3J0L3BvcnRzZXJ2ZXJzLCB3 aGljaCBoYXZlIGEgImZhc3RiYXVkIiBzZXR0aW5nIHRoYXQgZG9lcyB0aGlzLgorICAgTGludXgg aGFzIGEgInNldHNlcmlhbCIgY29tbWFuZCB0aGF0IGNhbiBkbyBpdCwgZXRjLgorCisgICBNb3Jl IG1vZGVybiBVbml4ZXMgc3VwcG9ydCBQT1NJWC1iYXNlZCBzcGVlZCBzZXR0aW5nLCBpbiB3aGlj aCB0aGUKKyAgIHNlbGVjdGlvbiBvZiBzcGVlZHMgaXMgbm90IGxpbWl0ZWQgYnkgYSA0LWJpdCBm aWVsZC4gQy1LZXJtaXQgNi4xCisgICBpbmNvcnBvcmF0ZXMgYSBuZXcgbWVjaGFuaXNtIGZvciBm aW5kaW5nIG91dCAoYXQgY29tcGlsZSB0aW1lKSB3aGljaAorICAgc2VyaWFsIHNwZWVkcyBhcmUg c3VwcG9ydGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRoYXQgZG9lcyBub3QKKyAgIGludm9s dmUgZWRpdGluZyBvZiBzb3VyY2UgY29kZSBieSBoYW5kOyBvbiBzeXN0ZW1zIGxpa2UgU29sYXJp cyA1LjEsCisgICBJUklYIDYuMiwgYW5kIFNDTyBPU1I1LjAuNCwgInNldCBzcGVlZCA/IiB3aWxs IGxpc3Qgc3BlZWRzIHVwIHRvIDQ2MDgwMAorICAgb3IgOTIxNjAwLiBJbiBDLUtlcm1pdCA3LjAg YW5kIGxhdGVyOgorCisgICAgMS4gSWYgYSBzeW1ib2wgZm9yIGEgcGFydGljdWxhciBzcGVlZCAo c2F5IEIyMzA0MDAgZm9yIDIzMDQwMCBicHMpCisgICAgICAgYXBwZWFycyBpbiB3aGF0ZXZlciBo ZWFkZXIgZmlsZSBkZWZpbmVzIGFjY2VwdGFibGUgc2VyaWFsIHNwZWVkcworICAgICAgIChlLmcu IDx0ZXJtYml0cy5oPiBvciA8c3lzL3Rlcm1pb3MuaD4gb3IgPHN5cy90dHlkZXYuaD4sIGV0Yyks IHRoZQorICAgICAgIGNvcnJlc3BvbmRpbmcgc3BlZWQgd2lsbCBhcHBlYXIgaW4gQy1LZXJtaXQn cyAic2V0IHNwZWVkID8iIGxpc3QuCisgICAgMi4gVGhlIGZhY3QgdGhhdCBhIGdpdmVuIHNwZWVk IGlzIGxpc3RlZCBpbiB0aGUgaGVhZGVyIGZpbGVzIGFuZAorICAgICAgIGFwcGVhcnMgaW4gQy1L ZXJtaXQncyBsaXN0IGRvZXMgbm90IG1lYW4gdGhlIGRyaXZlciB3aWxsIGFjY2VwdCBpdC4KKyAg ICAgICBGb3IgZXhhbXBsZSwgYSBjb21wdXRlciBtaWdodCBoYXZlIHNvbWUgc3RhbmRhcmQgc2Vy aWFsIHBvcnRzIHBsdXMKKyAgICAgICBzb21lIGFkZC1vbiBvbmVzIHdpdGggZGlmZmVyZW50IGRy aXZlcnMgdGhhdCBhY2NlcHQgYSBkaWZmZXJlbnQKKyAgICAgICByZXBlcnRvaXJlIG9mIHNwZWVk cy4KKyAgICAzLiBUaGUgZmFjdCB0aGF0IGEgZ2l2ZW4gc3BlZWQgaXMgYWNjZXB0ZWQgYnkgdGhl IGRyaXZlciBkb2VzIG5vdAorICAgICAgIGd1YXJhbnRlZSB0aGUgdW5kZXJseWluZyBoYXJkd2Fy ZSBjYW4gYWNjZXB0IGl0LgorCisgICBXaGVuIEtlcm1pdCBpcyBnaXZlbiBhICJzZXQgc3BlZWQi IGNvbW1hbmQgZm9yIGEgcGFydGljdWxhciBkZXZpY2UsIHRoZQorICAgdW5kZXJseWluZyBzeXN0 ZW0gc2VydmljZSBpcyBjYWxsZWQgdG8gc2V0IHRoZSBzcGVlZDsgaXRzIHJldHVybiBjb2RlCisg ICBpcyBjaGVja2VkIGFuZCB0aGUgU0VUIFNQRUVEIGNvbW1hbmQgZmFpbHMgaWYgdGhlIHJldHVy biBjb2RlIGluZGljYXRlcworICAgZmFpbHVyZS4gUmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtIHNl cnZpY2UgcmV0dXJuIHN0YXR1cywgdGhlIGRldmljZSdzCisgICBzcGVlZCBpcyB0aGVuIHJlYWQg YmFjayBhbmQgaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIHNwZWVkIHRoYXQgd2FzCisgICByZXF1 ZXN0ZWQsIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCBhbmQgdGhlIGNvbW1hbmQgZmFpbHMu CisKKyAgIEV2ZW4gd2hlbiB0aGUgY29tbWFuZCBzdWNjZWVkcywgdGhpcyBkb2VzIG5vdCBndWFy YW50ZWUgc3VjY2Vzc2Z1bAorICAgb3BlcmF0aW9uIGF0IGEgcGFydGljdWxhciBzcGVlZCwgZXNw ZWNpYWxseSBhIGhpZ2ggb25lLiBUaGF0IGRlcGVuZHMgb24KKyAgIGVsZWN0cmljaXR5LCBpbmZv cm1hdGlvbiB0aGVvcnksIGV0Yy4gSG93IGxvbmcgaXMgdGhlIGNhYmxlLCB3aGF0IGlzCisgICBp dHMgY2FwYWNpdGFuY2UsIGhvdyB3ZWxsIGlzIGl0IHNoaWVsZGVkLCBldGMsIG5vdCB0byBtZW50 aW9uIHRoYXQKKyAgIGV2ZXJ5IGNvbm5lY3Rpb24gaGFzIHR3byBlbmRzIGFuZCBpdHMgc3VjY2Vz cyBkZXBlbmRzIG9uIGJvdGggb2YgdGhlbS4KKyAgIChXaXRoIHRoZSBvYnZpb3VzIGNhdmVhdHMg YWJvdXQgaW50ZXJuYWwgbW9kZW1zLCBpcyB0aGUgY2FibGUgcmVhbGx5CisgICBjb25uZWN0ZWQs IGludGVycnVwdCBjb25mbGljdHMsIGV0YyBldGMgZXRjKS4KKworICAgTm90ZSwgaW4gcGFydGlj dWxhciwgdGhhdCB0aGVyZSBpcyBhIGNlcnRhaW4gdGhyZXNob2xkIGFib3ZlIHdoaWNoCisgICBt b2RlbXMgY2FuIG5vdCAiYXV0b2JhdWQiIC0tIGkuZS4gZGV0ZWN0IHRoZSBzZXJpYWwgaW50ZXJm YWNlIHNwZWVkCisgICB3aGVuIHlvdSB0eXBlIEFUIChvciB3aGF0ZXZlciBlbHNlIHRoZSBtb2Rl bSdzIHJlY29nbml0aW9uIHNlcXVlbmNlCisgICBtaWdodCBiZSkuIFN1Y2ggbW9kZW1zIG5lZWQg dG8gYmUgZW5nYWdlZCBhdCBhIGxvd2VyIHNwZWVkIChzYXkgMjQwMCBvcgorICAgOTYwMCBvciBl dmVuIDExNTIwMCAtLSBhbnkgc3BlZWQgYmVsb3cgdGhlaXIgYXV0b2JhdWQgdGhyZXNob2xkKSBh bmQKKyAgIHRoZW4gbXVzdCBiZSBnaXZlbiBhIG1vZGVtLXNwZWNpZmljIGNvbW1hbmQgKHdoaWNo IGNhbiBiZSBmb3VuZCBpbiB0aGUKKyAgIG1vZGVtIG1hbnVhbCkgdG8gY2hhbmdlIHRoZWlyIGlu dGVyZmFjZSBzcGVlZCB0byB0aGUgZGVzaXJlZCBoaWdoZXIKKyAgIHNwZWVkLCBhbmQgdGhlbiB0 aGUgc29mdHdhcmUgbXVzdCBhbHNvIGJlIHRvbGQgdG8gY2hhbmdlIHRvIHRoZSBuZXcsCisgICBo aWdoZXIgc3BlZWQuCisKKyAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCByZWFkIFs1NjRd U2VjdGlvbiA5LjUgb2YgdGhlIEluc3RhbGxhdGlvbgorICAgSW5zdHJ1Y3Rpb25zLCBwbHVzIGFu eSBwbGF0Zm9ybS1zcGVjaWZpYyBub3RlcyBpbiBbNTY1XVNlY3Rpb24gMyBhYm92ZS4KKworNy4g Q09NTVVOSUNBVElPTlMgQU5EIERJQUxJTkcKKworICAgWyBbNTY2XVRvcCBdIFsgWzU2N11Db250 ZW50cyBdIFsgWzU2OF1OZXh0IF0gWyBbNTY5XVByZXZpb3VzIF0KKworNy4xLiBTZXJpYWwgUG9y dHMgYW5kIE1vZGVtcworCisgICBJZiB5b3UgU0VUIExJTkUgdG8gYSBzZXJpYWwgcG9ydCBtb2Rl bS1jb250cm9sIGRldmljZSB0aGF0IGhhcyBub3RoaW5nCisgICBwbHVnZ2VkIGluIHRvIGl0LCBv ciBoYXMgYSBtb2RlbSBjb25uZWN0ZWQgdGhhdCBpcyBwb3dlcmVkIG9mZiwgYW5kIHlvdQorICAg aGF2ZSBub3QgZ2l2ZW4gYSBwcmlvciBTRVQgTU9ERU0gVFlQRSBvciBTRVQgQ0FSUklFUi1XQVRD SCBPRkYgY29tbWFuZCwKKyAgIHRoZSBTRVQgTElORSBjb21tYW5kIGlzIGxpa2VseSB0byBoYW5n LiBJbiBtb3N0IGNhc2VzLCB5b3UgY2FuIEN0cmwtQworICAgb3V0LiBJZiBub3QsIHlvdSdsbCBo YXZlIHRvIGtpbGwgQy1LZXJtaXQgZnJvbSBhbm90aGVyIHRlcm1pbmFsLgorCisgICBTaW1pbGFy bHksIGlmIHlvdSBnaXZlIGEgU0VUIE1PREVNIFRZUEUgSEFZRVMgKG9yIFVTUiwgb3IgYW55IG90 aGVyCisgICBtb2RlbSB0eXBlIGJlc2lkZXMgRElSRUNULCBOT05FLCBvciBVTktOT1dOKSBhbmQg dGhlbiBTRVQgTElORSB0byBhbgorICAgZW1wdHkgcG9ydCwgdGhlIHN1YnNlcXVlbnQgY2xvc2Ug KGltcGxpY2l0IG9yIGV4cGxpY2l0KSBpcyBsaWFibGUgdG8KKyAgIGhhbmcgb3IgZXZlbiBjcmFz aCAodGhyb3VnaCBubyBmYXVsdCBvZiBLZXJtaXQncyAtLSB0aGUgaGFuZ2luZyBvcgorICAgY3Jh c2hpbmcgaXMgaW5zaWRlIGEgc3lzdGVtIGNhbGwgc3VjaCBhcyBjZnNldG9zcGVlZCgpIG9yIGNs b3NlKCkpLgorCisgICBUaGUgU0VUIENBUlJJRVItV0FUQ0ggY29tbWFuZCB3b3JrcyBhcyBhZHZl cnRpc2VkIG9ubHkgaWYgdGhlCisgICB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gYW5kIGRl dmljZSBkcml2ZXJzIHN1cHBvcnQgdGhpcyBmZWF0dXJlOyBpbgorICAgcGFydGljdWxhciBvbmx5 IGlmIGEgcmVhZCgpIG9wZXJhdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggYW4gZXJyb3IK KyAgIGNvZGUgaWYgdGhlIGNhcnJpZXIgc2lnbmFsIGdvZXMgYXdheSBvciwgZmFpbGluZyB0aGF0 LCBpZiBDLUtlcm1pdCBjYW4KKyAgIG9idGFpbiB0aGUgbW9kZW0gc2lnbmFscyBmcm9tIHRoZSBk ZXZpY2UgZHJpdmVyICh5b3UgY2FuIHRlbGwgYnkgZ2l2aW5nCisgICBhICJzZXQgbGluZSIgY29t bWFuZCB0byBhIHNlcmlhbCBkZXZpY2UsIGFuZCB0aGVuIGEgInNob3cKKyAgIGNvbW11bmljYXRp b25zIiBjb21tYW5kIC0tIGlmIG1vZGVtIHNpZ25hbHMgYXJlIG5vdCBsaXN0ZWQsIEMtS2VybWl0 CisgICB3b24ndCBiZSBhYmxlIHRvIGRldGVjdCBjYXJyaWVyIGxvc3MsIHRoZSBXQUlUIGNvbW1h bmQgd2lsbCBub3Qgd29yaywKKyAgIGV0YykuIE9mIGNvdXJzZSwgdGhlIGRldmljZSBpdHNlbGYg KGUuZy4gbW9kZW0pIG11c3QgYmUgY29uZmlndXJlZAorICAgYXBwcm9wcmlhdGVseSBhbmQgdGhl IGNhYmxlcyBjb252ZXkgdGhlIGNhcnJpZXIgYW5kIG90aGVyIG5lZWRlZAorICAgc2lnbmFscywg ZXRjLgorCisgICBJZiB5b3UgZGlhbCBvdXQgZnJvbSBVbml4IHN5c3RlbSwgYnV0IHRoZW4gbm90 aWNlIGEgbG90IG9mIHdlaXJkCisgICBjaGFyYWN0ZXIgc3RyaW5ncyBiZWluZyBzdHVjayBpbnRv IHlvdXIgc2Vzc2lvbiBhdCByYW5kb20gdGltZXMKKyAgIChlc3BlY2lhbGx5IGlmIHRoZXkgbG9v ayBsaWtlICsrK0FUUTBIMCBvciBsb2dpbiBiYW5uZXJzIG9yIHByb21wdHMpLAorICAgdGhhdCBt ZWFucyB0aGF0IGdldHR5IGlzIGFsc28gdHJ5aW5nIHRvIGNvbnRyb2wgdGhlIHNhbWUgZGV2aWNl LiBZb3UnbGwKKyAgIG5lZWQgdG8gZGlhbCBvdXQgb24gYSBkZXZpY2UgdGhhdCBpcyBub3Qgd2Fp dGluZyBmb3IgYSBsb2dpbiwgb3IgZWxzZQorICAgZGlzYWJsZSBnZXR0eSBvbiB0aGUgZGV2aWNl LgorCisgICBBcyBvZiB2ZXJzaW9uIDcuMCwgQy1LZXJtaXQgbWFrZXMgZXhwbGljaXQgY2hlY2tz IGZvciB0aGUgQ2FycmllcgorICAgRGV0ZWN0IHNpZ25hbCwgYW5kIHNvIGNhdGNoZXMgaHVuZy11 cCBjb25uZWN0aW9ucyBtdWNoIGJldHRlciB0aGFuIDYuMAorICAgYW5kIGVhcmxpZXIuIEhvd2V2 ZXIsIGl0IHN0aWxsIGNhbiBub3QgYmUgZ3VhcmFudGVlZCB0byBjYXRjaCBldmVyeQorICAgZXZl ciBDRCBvbi10by1vZmYgdHJhbnNpdGlvbi4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIEhQLVVYIHZl cnNpb24gb2YKKyAgIEMtS2VybWl0IGlzIGluIENPTk5FQ1QgbW9kZSBvbiBhIGRpYWxlZCBjb25u ZWN0aW9uIGFuZCBDQVJSSUVSLVdBVENIIE9OCisgICBvciBBVVRPLCBhbmQgeW91IHR1cm4gb2Zm IHRoZSBtb2RlbSwgSFAtVVggaXMgc3R1Y2sgaW4gYSByZWFkKCkgdGhhdAorICAgbmV2ZXIgcmV0 dXJucy4gKEMtS2VybWl0IGRvZXMgbm90IHBvcCBiYWNrIHRvIGl0cyBwcm9tcHQgYXV0b21hdGlj YWxseSwKKyAgIGJ1dCB5b3UgY2FuIHN0aWxsIGVzY2FwZSBiYWNrLikKKworICAgSWYsIG9uIHRo ZSBvdGhlciBoYW5kLCB5b3UgbG9nIG91dCBmcm9tIHRoZSByZW1vdGUgc3lzdGVtLCBhbmQgaXQg aGFuZ3MKKyAgIHVwLCBhbmQgQ0QgZHJvcHMgb24gdGhlIGxvY2FsIG1vZGVtLCBDLUtlcm1pdCBk ZXRlY3RzIHRoaXMgYW5kIHBvcHMKKyAgIGJhY2sgdG8gdGhlIHByb21wdCBhcyBpdCBzaG91bGQu IChFdmlkZW50bHkgdGhlcmUgY2FuIGJlIGEgZGlmZmVyZW5jZQorICAgYmV0d2VlbiBDRCBhbmQg RFNSIHR1cm5pbmcgb2ZmIGF0IHRoZSBzYW1lIHRpbWUsIHZlcnN1cyBDRCB0dXJuaW5nIG9mZgor ICAgd2hpbGUgRFNSIHN0YXlzIG9uOyBleHBlcmltZW50YXRpb24gd2l0aCAmUzAvJlMxLyZTMiBv biB5b3VyIG1vZGVtCisgICBtaWdodCBwcm9kdWNlIHRoZSBkZXNpcmVkIHJlc3VsdHMpLgorCisg ICBXaGVuIFVuaXggQy1LZXJtaXQgZXhpdHMsIGl0IGNsb3NlcyAoYW5kIG11c3QgY2xvc2UpIHRo ZSBjb21tdW5pY2F0aW9ucworICAgZGV2aWNlLiBJZiB5b3Ugd2VyZSBkaWFsZWQgb3V0LCB0aGlz IHdpbGwgbW9zdCBsaWtlbHkgaGFuZyB1cCB0aGUKKyAgIGNvbm5lY3Rpb24uIElmIHlvdSB3YW50 IHRvIGdldCBvdXQgb2YgS2VybWl0IGFuZCBzdGlsbCB1c2UgS2VybWl0J3MKKyAgIGNvbW11bmlj YXRpb24gZGV2aWNlLCB5b3UgaGF2ZSBzZXZlcmFsIGNob2ljZXM6CisKKyAgICAxLiBTaGVsbCBv dXQgZnJvbSBLZXJtaXQgb3Igc3VzcGVuZCBLZXJtaXQsIGFuZCByZWZlciB0byB0aGUgZGV2aWNl CisgICAgICAgbGl0ZXJhbGx5IChhcyBpbiAidGVybSAtYmxhaCAtYmxhaCA8IC9kZXYvY3VhID4g L2Rldi9jdWEiKS4KKyAgICAyLiBTaGVsbCBvdXQgZnJvbSBLZXJtaXQgYW5kIHVzZSB0aGUgZGV2 aWNlJ3MgZmlsZSBkZXNjcmlwdG9yIHdoaWNoCisgICAgICAgS2VybWl0IG1ha2VzIGF2YWlsYWJs ZSB0byB5b3UgaW4gdGhlIFx2KHR0eWZkKSB2YXJpYWJsZS4KKyAgICAzLiBVc2UgQy1LZXJtaXQn cyBSRURJUkVDVCBjb21tYW5kLgorICAgIDQuIFVzZSBDLUtlcm1pdCBuZXcgRVhFQyAvUkVESVJF Q1QgY29tbWFuZC4KKworICAgSWYgeW91IGFyZSBoYXZpbmcgdHJvdWJsZSBkaWFsaW5nOgorCisg ICAgMS4gTWFrZSBzdXJlIHRoZSBkaWFsb3V0IGxpbmUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHku IE1vcmUgYWJvdXQgdGhpcworICAgICAgIGJlbG93LgorICAgIDIuIE1ha2Ugc3VyZSBhbGwgbmVj ZXNzYXJ5IHBhdGNoZXMgYXJlIGluc3RhbGxlZCBmb3IgeW91ciBvcGVyYXRpbmcKKyAgICAgICBz eXN0ZW0uCisgICAgMy4gSWYgeW91IGNhbid0IGRpYWwgb24gYSAiYmlkaXJlY3Rpb25hbCIgbGlu ZSwgdGhlbiBjb25maWd1cmUgaXQgZm9yCisgICAgICAgb3V0Ym91bmQtb25seSAocmVtb3ZlIHRo ZSBnZXR0eSkgYW5kIHRyeSBhZ2Fpbi4gKFRoZSBtZWNoYW5pc21zIC0tCisgICAgICAgaWYgYW55 IC0tIGZvciBncmFiYmluZyBiaWRpcmVjdGlvbmFsIGxpbmVzIGZvciBkaWFsb3V0IHZhcnkgd2ls ZGx5CisgICAgICAgYW1vbmcgVW5peCBpbXBsZW1lbnRhdGlvbnMgYW5kIHJlbGVhc2VzLCBhbmQg Qy1LZXJtaXQgLS0gd2hpY2ggcnVucworICAgICAgIG9uIHdlbGwgb3ZlciAzMDAgZGlmZmVyZW50 IFVuaXggdmFyaWF0aW9ucyAtLSBtYWtlcyBubyBlZmZvcnQgdG8KKyAgICAgICBrZWVwIHVwIHdp dGggdGhlbTsgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBmb3IgY29waW5nIHdpdGggdGhpcworICAg ICAgIHNpdHVhdGlvbiBpcyB0byB3cmFwIEMtS2VybWl0IGluIGEgc2hlbGwgc2NyaXB0IHRoYXQg dGFrZXMgdGhlCisgICAgICAgYXBwcm9wcmlhdGUgYWN0aW9ucy4pCisgICAgNC4gTWFrZSBzdXJl IEMtS2VybWl0J3MgU0VUIERJQUwgYW5kIFNFVCBNT0RFTSBwYXJhbWV0ZXJzIGFncmVlIHdpdGgK KyAgICAgICB0aGUgbW9kZW0geW91IGFyZSBhY3R1YWxseSB1c2luZyAtLSBwYXkgcGFydGljdWxh ciBhdHRlbnRpb24gdG8gU0VUCisgICAgICAgRElBTCBTUEVFRC1NQVRDSElORy4KKyAgICA1LiBJ ZiBNT0RFTSBIQU5HVVAtTUVUSE9EIGlzIHNldCB0byBSUzIzMi1TSUdOQUwsIGNoYW5nZSBpdCB0 bworICAgICAgIE1PREVNLUNPTU1BTkQuIE9yIHZpY2UtdmVyc2EuCisgICAgNi4gVHJ5IFNFVCBE SUFMIEhBTkdVUCBPRkYgYmVmb3JlIHRoZSBESUFMIGNvbW1hbmQuIEFsc28sIFNFVCBESUFMCisg ICAgICAgRElTUExBWSBPTiB0byB3YXRjaCB3aGF0J3MgaGFwcGVuaW5nLiBTZWUgWzU3MF1TZWN0 aW9uIDggb2YgdGhlCisgICAgICAgWzU3MV1JbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zLgorICAg IDcuIFJlYWQgcGFnZXMgNTAtNjcgb2YgWzU3Ml1Vc2luZyBDLUtlcm1pdC4KKyAgICA4LiBBcyBh IGxhc3QgcmVzb3J0LCBkb24ndCB1c2UgdGhlIERJQUwgY29tbWFuZCBhdCBhbGw7IFNFVCBDQVJS SUVSCisgICAgICAgT0ZGIGFuZCBDT05ORUNUIHRvIHRoZSBtb2RlbSBhbmQgZGlhbCBpbnRlcmFj dGl2ZWx5LCBvciB3cml0ZSBhCisgICAgICAgc2NyaXB0IHByb2dyYW0gdG8gZGlhbCB0aGUgbW9k ZW0uCisKKyAgIE1ha2Ugc3VyZSB5b3VyIGRpYWxvdXQgbGluZSBpcyBjb3JyZWN0bHkgY29uZmln dXJlZCBmb3IgZGlhbGluZyBvdXQgKGFzCisgICBvcHBvc2VkIHRvIGxvZ2luKS4gVGhlIG1ldGhv ZCBmb3IgZG9pbmcgdGhpcyBpcyBkaWZmZXJlbnQgZm9yIGVhY2gga2luZAorICAgb2YgVW5peCBz eXN0ZW0uIENvbnN1bHQgeW91ciBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBmb3IgY29uZmlndXJpbmcg bGluZXMKKyAgIGZvciBkaWFsaW5nIG91dCAoZm9yIGV4YW1wbGUsIFN1biBTcGFyY1N0YXRpb24g SVBDIHVzZXJzIHNob3VsZCByZWFkCisgICB0aGUgc2VjdGlvbiAiU2V0dGluZyB1cCBNb2RlbSBT b2Z0d2FyZSIgaW4gdGhlIERlc2t0b3AgU1BBUkMgU3VuIFN5c3RlbQorICAgJiBOZXR3b3JrIE1h bmFnZXIncyBHdWlkZTsgSFAtOTAwMCB3b3Jrc3RhdGlvbiB1c2VycyBzaG91bGQgY29uc3VsdCB0 aGUKKyAgIG1hbnVhbCBDb25maWd1cmluZyBIUC1VWCBmb3IgUGVyaXBoZXJhbHMsIGV0YykuCisK KyAgIFN5bXB0b206IERJQUwgd29ya3MsIGJ1dCBhIHN1YnNlcXVlbnQgQ09OTkVDVCBjb21tYW5k IGRvZXMgbm90LgorICAgRGlhZ25vc2lzOiB0aGUgbW9kZW0gaXMgbm90IGFzc2VydGluZyBDYXJy aWVyIERldGVjdCAoQ0QpIGFmdGVyIHRoZQorICAgY29ubmVjdGlvbiBpcyBtYWRlLCBvciB0aGUg Y2FibGUgZG9lcyBub3QgY29udmV5IHRoZSBDRCBzaWduYWwuIEN1cmU6CisgICBSZWNvbmZpZ3Vy ZSB0aGUgbW9kZW0sIHJlcGxhY2UgdGhlIGNhYmxlLiBXb3JrYXJvdW5kOiBTRVQgQ0FSUklFUiBP RkYKKyAgIChhdCBsZWFzdCBpbiBTeXN0ZW0tViBiYXNlZCBVbml4IHZlcnNpb25zKS4KKworICAg Rm9yIEJlcmtlbGV5LVVuaXgtYmFzZWQgc3lzdGVtcyAoNC4zQlNEIGFuZCBlYXJsaWVyKSwgS2Vy bWl0IGluY2x1ZGVzCisgICBjb2RlIHRvIHVzZSBMUEFTUzggbW9kZSB3aGVuIHBhcml0eSBpcyBu b25lLCB3aGljaCBpcyBzdXBwb3NlZCB0byBhbGxvdworICAgOC1iaXQgZGF0YSBhbmQgWG9uL1hv ZmYgZmxvdyBjb250cm9sIGF0IHRoZSBzYW1lIHRpbWUuIEhvd2V2ZXIsIGFzIG9mCisgICBlZGl0 IDE3NCwgdGhpcyBjb2RlIGlzIGVudGlyZWx5IGRpc2FibGVkIGJlY2F1c2UgaXQgaXMgdW5yZWxp YWJsZTogZXZlbgorICAgdGhvdWdoIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0gbWlnaHQgKG9y IG1pZ2h0IG5vdCkgc3VwcG9ydCBMUEFTUzgKKyAgIG1vZGUgY29ycmVjdGx5LCB0aGUgaG9zdCBh Y2Nlc3MgcHJvdG9jb2xzICh0ZXJtaW5hbCBzZXJ2ZXJzLCB0ZWxuZXQsCisgICBybG9naW4sIGV0 YykgZ2VuZXJhbGx5IGhhdmUgbm8gd2F5IG9mIGZpbmRpbmcgb3V0IGFib3V0IGl0IGFuZAorICAg dGhlcmVmb3JlIHJlbmRlciBpdCBpbmVmZmVjdGl2ZSwgY2F1c2luZyBmaWxlIHRyYW5zZmVyIGZh aWx1cmVzLiBTbyBhcworICAgb2YgZWRpdCAxNzQsIEtlcm1pdCBvbmNlIGFnYWluIHVzZXMgcmF3 bW9kZSBmb3IgOC1iaXQgZGF0YSwgYW5kIHNvCisgICB0aGVyZSBpcyBubyBYb24vWG9mZiBmbG93 IGNvbnRyb2wgZHVyaW5nIGZpbGUgdHJhbnNmZXIgb3IgdGVybWluYWwKKyAgIGVtdWxhdGlvbiBp biB0aGUgQmVya2VsZXktYmFzZWQgdmVyc2lvbnMgKDQuMyBhbmQgZWFybGllciwgbm90IDQuNCku CisKKyAgIEFsc28gb24gQmVya2VsZXktYmFzZWQgc3lzdGVtcyAoNC4zIGFuZCBlYXJsaWVyKSwg dGhlcmUgaXMgYXBwYXJlbnRseQorICAgbm8gd2F5IHRvIGNvbmZpZ3VyZSBhIGRpYWxvdXQgbGlu ZSBmb3IgcHJvcGVyIGNhcnJpZXIgaGFuZGxpbmcsIGkuZS4KKyAgIGlnbm9yZSBjYXJyaWVyIGR1 cmluZyBkaWFsaW5nLCByZXF1aXJlIGNhcnJpZXIgdGhlcmVhZnRlciwgZ2V0IGEgZmF0YWwKKyAg IGVycm9yIG9uIGFueSBhdHRlbXB0IHRvIHJlYWQgZnJvbSB0aGUgZGV2aWNlIGFmdGVyIGNhcnJp ZXIgZHJvcHMgKHRoaXMKKyAgIGlzIGhhbmRsZWQgbmljZWx5IGluIFN5c3RlbSBWIGJ5IG1hbmlw dWxhdGlvbiBvZiB0aGUgQ0xPQ0FMIGZsYWcpLiBUaGUKKyAgIHN5bXB0b20gaXMgdGhhdCBjYXJy aWVyIGxvc3MgZG9lcyBub3QgbWFrZSBDLUtlcm1pdCBwb3AgYmFjayB0byB0aGUKKyAgIHByb21w dCBhdXRvbWF0aWNhbGx5LiBUaGlzIGlzIGV2aWRlbnQgb24gdGhlIE5lWFQsIGZvciBleGFtcGxl LCBidXQgbm90CisgICBvbiBTdW5PUywgd2hpY2ggc3VwcG9ydHMgdGhlIENMT0NBTCBmbGFnLiBU aGlzIGlzIG5vdCBhIEtlcm1pdCBwcm9ibGVtLAorICAgYnV0IGEgbGltaXRhdGlvbiBvZiB0aGUg dW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLiBGb3IgZXhhbXBsZSwgdGhlCisgICBjdSBwcm9n cmFtIG9uIHRoZSBOZVhUIGRvZXNuJ3Qgbm90aWNlIGNhcnJpZXIgbG9zcyBlaXRoZXIsIHdoZXJl YXMgY3UKKyAgIG9uIHRoZSBTdW4gZG9lcy4KKworICAgT24gY2VydGFpbiBBVCZUIFVuaXggc3lz dGVtcyBlcXVpcHBlZCB3aXRoIEFUJlQgbW9kZW1zLCBESUFMIGFuZCBIQU5HVVAKKyAgIGRvbid0 IHdvcmsgcmlnaHQuIFdvcmthcm91bmRzOiAoMSkgU0VUIERJQUwgSEFOR1VQIE9GRiBiZWZvcmUK KyAgIGF0dGVtcHRpbmcgdG8gZGlhbDsgKDIpIElmIEhBTkdVUCBkb2Vzbid0IHdvcmssIFNFVCBM SU5FLCBhbmQgdGhlbiBTRVQKKyAgIExJTkUgPGRldmljZT4gdG8gdG90YWxseSBjbG9zZSBhbmQg cmVvcGVuIHRoZSBkZXZpY2UuIElmIGFsbCBlbHNlCisgICBmYWlscywgU0VUIENBUlJJRVIgT0ZG LgorCisgICBDLUtlcm1pdCBkb2VzIG5vdCBjb250YWluIGFueSBwYXJ0aWN1bGFyIHN1cHBvcnQg Zm9yIEFUJlQgRGF0YUtpdAorICAgZGV2aWNlcy4gWW91IGNhbiB1c2UgS2VybWl0IHNvZnR3YXJl IHRvIGRpYWwgaW4gdG8gYSBEYXRhS2l0IGxpbmUsIGJ1dAorICAgQy1LZXJtaXQgZG9lcyBub3Qg Y29udGFpbiB0aGUgc3BlY2lhbGl6ZWQgY29kZSByZXF1aXJlZCB0byBkaWFsIG91dAorICAgZnJv bSBhIERhdGFLaXQgbGluZS4gSWYgdGhlIFVuaXggc3lzdGVtIGlzIGNvbm5lY3RlZCB0byBEYXRh S2l0IHZpYQorICAgc2VyaWFsIHBvcnRzLCBkaWFsb3V0IHNob3VsZCB3b3JrIG5vcm1hbGx5IChl LmcuIHNldCBsaW5lIC9kZXYvdHR5bTEsCisgICBzZXQgc3BlZWQgMTkyMDAsIGNvbm5lY3QsIGFu ZCB0aGVuIHNlZSB0aGUgREVTVElOQVRJT046IHByb21wdCwgZnJvbQorICAgd2hpY2ggeW91IGNh biBjb25uZWN0IHRvIGFub3RoZXIgY29tcHV0ZXIgb24gdGhlIERhdGFLaXQgbmV0d29yayBvciB0 bworICAgYW4gb3V0Z29pbmcgbW9kZW0gcG9vbCwgZXRjKS4gQnV0IGlmIHRoZSBVbml4IHN5c3Rl bSBpcyBjb25uZWN0ZWQgdG8KKyAgIHRoZSBEYXRhS2l0IG5ldHdvcmsgdGhyb3VnaCB0aGUgc3Bl Y2lhbCBEYXRhS2l0IGludGVyZmFjZSBib2FyZCwgdGhlbgorICAgU0VUIExJTkUgdG8gYSBEYXRh S2l0IHBzZXVkb2RldmljZSAoc3VjaCBhcyAvZGV2L2RrMDMxdCkgd2lsbCBub3Qgd29yaworICAg KHlvdSBtdXN0IHVzZSB0aGUgRGF0YUtpdCAiZGsiIG9yICJka2N1IiBwcm9ncmFtIGluc3RlYWQp LiBJbiBDLUtlcm1pdAorICAgNy4wIGFuZCBsYXRlciwgeW91IGNhbiBtYWtlIEtlcm1pdCBjb25u ZWN0aW9ucyAidGhvdWdoIiBkayBvciBka2N1CisgICB1c2luZyAic2V0IGxpbmUgL3B0eSIuCisK KyAgIEluIHNvbWUgQlNELWJhc2VkIFVuaXggQy1LZXJtaXQgdmVyc2lvbnMsIFNFVCBMSU5FIHRv IGEgcG9ydCB0aGF0IGhhcworICAgbm90aGluZyBwbHVnZ2VkIGluIHRvIGl0IHdpdGggU0VUIENB UlJJRVIgT04gd2lsbCBoYW5nIHRoZSBwcm9ncmFtIChhcworICAgaXQgc2hvdWxkKSwgYnV0IGl0 IGNhbid0IGJlIGludGVycnVwdGVkIHdpdGggQ3RybC1DLiBUaGUgaW50ZXJydXB0IHRyYXAKKyAg IGlzIGNvcnJlY3RseSBhcm1lZCwgYnV0IGFwcGFyZW50bHkgdGhlIFVuaXggb3BlbigpIGNhbGwg Y2Fubm90IGJlCisgICBpbnRlcnJ1cHRlZCBpbiB0aGlzIGNhc2UuIFdoZW4gU0VUIENBUlJJRVIg aXMgT0ZGIG9yIEFVVE8sIHRoZSBTRVQgTElORQorICAgd2lsbCBldmVudHVhbGx5IHJldHVybiwg YnV0IHRoZW4gdGhlIHByb2dyYW0gaGFuZ3MgKHVuaW50ZXJydXB0aWJseSkKKyAgIHdoZW4gdGhl IEVYSVQgb3IgUVVJVCBjb21tYW5kIChvciwgcHJlc3VtYWJseSwgYW5vdGhlciBTRVQgTElORQor ICAgY29tbWFuZCkgaXMgZ2l2ZW4uIFRoZSBsYXR0ZXIgaXMgcHJvYmFibHkgYmVjYXVzZSBvZiB0 aGUgYXR0ZW1wdCB0bworICAgaGFuZyB1cCB0aGUgbW9kZW0uIChJbiBlZGl0IDE2OSwgYSB0aW1l b3V0IGFsYXJtIHdhcyBwbGFjZWQgYXJvdW5kIHRoaXMKKyAgIG9wZXJhdGlvbi4pCisKKyAgIFdp dGggU0VUIERJQUwgSEFOR1VQIE9GRiBpbiBlZmZlY3QsIHRoZSBESUFMIGNvbW1hbmQgbWlnaHQg d29yayBvbmx5CisgICBvbmNlLCBidXQgbm90IGFnYWluIG9uIHRoZSBzYW1lIGRldmljZS4gSW4g dGhhdCBjYXNlLCBnaXZlIGEgQ0xPU0UKKyAgIGNvbW1hbmQgdG8gY2xvc2UgdGhlIGRldmljZSwg YW5kIHRoZW4gYW5vdGhlciBTRVQgTElORSBjb21tYW5kIHRvCisgICByZS1vcGVuIHRoZSBzYW1l IGRldmljZS4gT3IgcmVidWlsZCB5b3VyIHZlcnNpb24gb2YgS2VybWl0IHdpdGggdGhlCisgICAt RENMU09QTiBjb21waWxlLXRpbWUgc3dpdGNoLgorCisgICBUaGUgRElBTCBjb21tYW5kIHNheXMg IlRvIGNhbmNlbDogVHlwZSB5b3VyIGludGVycnVwdCBjaGFyYWN0ZXIKKyAgIChub3JtYWxseSBD dHJsLUMpLiIgVGhpcyBpcyBqdXN0IG9uZSBleGFtcGxlIG9mIHdoZXJlIHByb2dyYW0gbWVzc2Fn ZXMKKyAgIGFuZCBkb2N1bWVudGF0aW9uIGFzc3VtZSB5b3VyIGludGVycnVwdCBjaGFyYWN0ZXIg aXMgQ3RybC1DLiBCdXQgaXQKKyAgIG1pZ2h0IGJlIHNvbWV0aGluZyBlbHNlLiBJbiBtb3N0IChi dXQgbm90IG5lY2Vzc2FyaWx5IGFsbCkgY2FzZXMsIHRoZQorICAgY2hhcmFjdGVyIHJlZmVycmVk IHRvIGlzIHRoZSBvbmUgdGhhdCBnZW5lcmF0ZXMgdGhlIFNJR0lOVCBzaWduYWwuIElmCisgICBD dHJsLUMgZG9lc24ndCBhY3QgYXMgYW4gaW50ZXJydXB0IGNoYXJhY3RlciBmb3IgeW91LCB0eXBl IHRoZSBVbml4CisgICBjb21tYW5kICJzdHR5IC1hIiBvciAic3R0eSBhbGwiIG9yICJzdHR5IGV2 ZXJ5dGhpbmciIHRvIHNlZSB3aGF0IHlvdXIKKyAgIGludGVycnVwdCBjaGFyYWN0ZXIgaXMuIChL ZXJtaXQgY291bGQgYmUgbWFkZSB0byBmaW5kIG91dCB3aGF0IHRoZQorICAgaW50ZXJydXB0IGNo YXJhY3RlciBpcywgYnV0IHRoaXMgd291bGQgcmVxdWlyZSBhIGxvdCBvZgorICAgcGxhdGZvcm0t ZGVwZW5kZW50IGNvZGluZyBhbmQgI2lmZGVmcywgYW5kIGEgbmV3IHJvdXRpbmUgYW5kIGludGVy ZmFjZQorICAgYmV0d2VlbiB0aGUgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBwbGF0Zm9ybS1pbmRl cGVuZGVudCBwYXJ0cyBvZiB0aGUKKyAgIHByb2dyYW0uKQorCisgICBJbiBnZW5lcmFsLCB0aGUg aGFuZ3VwIG9wZXJhdGlvbiBvbiBhIHNlcmlhbCBjb21tdW5pY2F0aW9uIGRldmljZSBpcworICAg cHJvbmUgdG8gZmFpbHVyZS4gQy1LZXJtaXQgdHJpZXMgdG8gc3VwcG9ydCBtYW55LCBtYW55IGRp ZmZlcmVudCBraW5kcworICAgb2YgY29tcHV0ZXJzLCBhbmQgdGhlcmUgc2VlbXMgdG8gYmUgbm8g cG9ydGFibGUgbWV0aG9kIGZvciBoYW5naW5nIHVwIGEKKyAgIG1vZGVtIGNvbm5lY3Rpb24gKGku ZS4gdHVybmluZyBvZmYgdGhlIFJTLTIzMiBEVFIgc2lnbmFsIGFuZCB0aGVuCisgICB0dXJuaW5n IGl0IGJhY2sgb24gYWdhaW4pLiBJZiBIQU5HVVAsIERJQUwsIGFuZC9vciBDdHJsLVxIIGRvIG5v dCB3b3JrCisgICBmb3IgeW91LCBhbmQgeW91IGFyZSBhIHByb2dyYW1tZXIsIGxvb2sgYXQgdGhl IHR0aGFuZygpIGZ1bmN0aW9uIGluCisgICBja3V0aW8uYyBhbmQgc2VlIGlmIHlvdSBjYW4gYWRk IGNvZGUgdG8gbWFrZSBpdCB3b3JrIGNvcnJlY3RseSBmb3IgeW91cgorICAgc3lzdGVtLCBhbmQg c2VuZCB0aGUgY29kZSB0byB0aGUgYWRkcmVzcyBhYm92ZS4gKE5PVEU6IFRoaXMgcHJvYmxlbSBo YXMKKyAgIGJlZW4gbGFyZ2VseSBzaWRlc3RlcHBlZCBhcyBvZiBlZGl0IDE4OCwgaW4gd2hpY2gg S2VybWl0IGZpcnN0IGF0dGVtcHRzCisgICB0byBoYW5nIHVwIHRoZSBtb2RlbSBieSAiZXNjYXBp bmcgYmFjayIgdmlhICsrKyBhbmQgdGhlbiBnaXZpbmcgdGhlCisgICBtb2RlbSdzIGhhbmd1cCBj b21tYW5kLCBlLmcuIEFUSDAsIHdoZW4gRElBTCBNT0RFTS1IQU5HVVAgaXMgT04sIHdoaWNoCisg ICBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLikKKworICAgRXZlbiB3aGVuIEtlcm1pdCdzIG1vZGVt LWNvbnRyb2wgc29mdHdhcmUgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkgZm9yCisgICB5b3VyIGNv bXB1dGVyLCBpdCBjYW4gb25seSB3b3JrIHJpZ2h0IGlmIHlvdXIgbW9kZW0gaXMgYWxzbyBjb25m aWd1cmVkCisgICB0byBhc3NlcnQgdGhlIENEIHNpZ25hbCB3aGVuIGl0IGlzIGNvbm5lY3RlZCB0 byB0aGUgcmVtb3RlIG1vZGVtIGFuZCB0bworICAgaGFuZyB1cCB0aGUgY29ubmVjdGlvbiB3aGVu IHlvdXIgY29tcHV0ZXIgZHJvcHMgdGhlIERUUiBzaWduYWwuIFNvCisgICBiZWZvcmUgZGVjaWRp bmcgS2VybWl0IGRvZXNuJ3Qgd29yayB3aXRoIHlvdXIgbW9kZW0sIGNoZWNrIHlvdXIgbW9kZW0K KyAgIGNvbmZpZ3VyYXRpb24gQU5EIHRoZSBjYWJsZSAoaWYgYW55KSBjb25uZWN0aW5nIHlvdXIg bW9kZW0gdG8gdGhlCisgICBjb21wdXRlciAtLSBpdCBzaG91bGQgYmUgYSBzdHJhaWdodC10aHJv dWdoIFs1NzNdbW9kZW0gY2FibGUgY29uZHVjdGluZworICAgdGhlIHNpZ25hbHMgRkcsIFNHLCBU RCwgUkQsIFJUUywgQ1RTLCBEU1IsIERUUiwgQ0QsIGFuZCBSSS4KKworICAgTWFueSBVbml4IHN5 c3RlbXMga2VlcCBhbGlhc2VzIGZvciBkaWFsb3V0IGRldmljZXM7IGZvciBleGFtcGxlLAorICAg L2Rldi9hY3UgbWlnaHQgYmUgYW4gYWxpYXMgZm9yIC9kZXYvdHR5MDAuIEJ1dCBtb3N0IG9mIHRo ZXNlIFVuaXgKKyAgIHN5c3RlbXMgYWxzbyB1c2UgVVVDUCBsb2NrZmlsZSBjb252ZW50aW9ucyB0 aGF0IGRvIG5vdCB0YWtlIHRoaXMKKyAgIGFsaWFzaW5nIGludG8gYWNjb3VudCwgc28gaWYgb25l IHVzZXIgYXNzaWducyAoZS5nLikgL2Rldi9hY3UsIHRoZW4KKyAgIGFub3RoZXIgdXNlciBjYW4g c3RpbGwgYXNzaWduIHRoZSBzYW1lIGRldmljZSBieSByZWZlcnJpbmcgdG8gaXRzIG90aGVyCisg ICBuYW1lLiBUaGlzIGlzIG5vdCBhIEtlcm1pdCBwcm9ibGVtIC0tIEtlcm1pdCBtdXN0IGZvbGxv dyB0aGUgbG9ja2ZpbGUKKyAgIGNvbnZlbnRpb25zIHVzZWQgYnkgdGhlIHZlbmRvci1zdXBwbGll ZCBzb2Z0d2FyZSAoY3UsIHRpcCwgdXVjcCkuCisKKyAgIFRoZSBTRVQgRkxPVy1DT05UUk9MIEtF RVAgb3B0aW9uIHNob3VsZCBiZSBnaXZlbiAqYmVmb3JlKiBhbnkKKyAgIGNvbW11bmljYXRpb24g KGRpYWxpbmcsIHRlcm1pbmFsIGVtdWxhdGlvbiwgZmlsZSB0cmFuc2ZlciwKKyAgIElOUFVUL09V VFBVVC9UUkFOU01JVCwgZXRjKSBpcyBhdHRlbXB0ZWQsIGlmIHlvdSB3YW50IEMtS2VybWl0IHRv IHVzZQorICAgYWxsIG9mIHRoZSBkZXZpY2UncyBwcmVleGlzdGluZyBmbG93LWNvbnRyb2wgcmVs YXRlZCBzZXR0aW5ncy4gVGhlCisgICBkZWZhdWx0IGZsb3ctY29udHJvbCBzZXR0aW5nIGlzIFhP Ti9YT0ZGLCBhbmQgaXQgd2lsbCB0YWtlIGVmZmVjdCB3aGVuCisgICB0aGUgZmlyc3QgY29tbXVu aWNhdGlvbi1yZWxhdGVkIGNvbW1hbmQgaXMgZ2l2ZW4sIGFuZCBhIHN1YnNlcXVlbnQgU0VUCisg ICBGTE9XIEtFRVAgY29tbWFuZCB3aWxsIG5vdCBuZWNlc3NhcmlseSBrbm93IGhvdyB0byByZXN0 b3JlICphbGwqIG9mIHRoZQorICAgZGV2aWNlJ3Mgb3JpZ2luYWwgZmxvdy1jb250cm9sIHNldHRp bmdzLgorCis3LjIuIE5ldHdvcmsgQ29ubmVjdGlvbnMKKworICAgQy1LZXJtaXQgdHJpZXMgdG8g dXNlIHRoZSA4dGggYml0IGZvciBkYXRhIHdoZW4gcGFyaXR5IGlzIE5PTkUsIGFuZAorICAgdGhp cyBnZW5lcmFsbHkgd29ya3Mgb24gcmVhbCBVbml4IHRlcm1pbmFsICh0dHkpIGRldmljZXMsIGJ1 dCBpdCBvZnRlbgorICAgZG9lcyBub3Qgd29yayB3aGVuIHRoZSBVbml4IHN5c3RlbSBpcyBhY2Nl c3NlZCBvdmVyIGEgbmV0d29yayB2aWEKKyAgIHRlbG5ldCBvciBybG9naW4gcHJvdG9jb2xzLCBp bmNsdWRpbmcgKGluIG1hbnkgY2FzZXMpIHRocm91Z2ggdGVybWluYWwKKyAgIHNlcnZlcnMuIEZv ciBleGFtcGxlLCBhbiBFbmNvcmUgY29tcHV0ZXIgd2l0aCBBbm5leCB0ZXJtaW5hbCBzZXJ2ZXJz CisgICBvbmx5IGdpdmVzIGEgNy1iaXQgcGF0aCBpZiB0aGUgcmxvZ2luIHByb3RvY29sIGlzIHNl bGVjdGVkIGluIHRoZQorICAgdGVybWluYWwgc2VydmVyIGJ1dCBpdCBnaXZlcyB0aGUgZnVsbCA4 IGJpdHMgaWYgdGhlIHByb3ByaWV0YXJ5IFJEUAorICAgcHJvdG9jb2wgaXMgdXNlZC4KKworICAg SWYgZmlsZSB0cmFuc2ZlciBkb2VzIG5vdCB3b3JrIHRocm91Z2ggYSBob3N0IHRvIHdoaWNoIHlv dSBoYXZlCisgICBybG9naW4nZCwgdXNlICJybG9naW4gLTgiIHJhdGhlciB0aGFuICJybG9naW4i LiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywKKyAgIHRlbGwgYm90aCBLZXJtaXQgcHJvZ3JhbXMgdG8g InNldCBwYXJpdHkgc3BhY2UiLgorCisgICBUaGUgRW5jb3JlIFRFTE5FVCBzZXJ2ZXIgZG9lcyBu b3QgYWxsb3cgbG9uZyBidXJzdHMgb2YgaW5wdXQuIFdoZW4geW91CisgICBoYXZlIGEgVEVMTkVU IGNvbm5lY3Rpb24gdG8gYW4gRW5jb3JlLCB0ZWxsIEMtS2VybWl0IG9uIHRoZSBFbmNvcmUgdG8K KyAgIFNFVCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEggMjAwIG9yIHRoZXJlYWJvdXRzLgorCis4LiBI QVJEV0FSRSBGTE9XIENPTlRST0wKKworICAgWyBbNTc0XVRvcCBdIFsgWzU3NV1Db250ZW50cyBd IFsgWzU3Nl1OZXh0IF0gWyBbNTc3XVByZXZpb3VzIF0KKworICAgU0VUIEZMT1cgUlRTL0NUUyBp cyBhdmFpbGFibGUgaW4gVW5peCBDLUtlcm1pdCBvbmx5IHdoZW4gdGhlIHVuZGVybHlpbmcKKyAg IG9wZXJhdGluZyBzeXN0ZW0gcHJvdmlkZXMgYW4gQXBwbGljYXRpb24gUHJvZ3JhbSBJbnRlcmZh Y2UgKEFQSSkgZm9yCisgICB0dXJuaW5nIHRoaXMgZmVhdHVyZSBvbiBhbmQgb2ZmIHVuZGVyIHBy b2dyYW0gY29udHJvbCwgd2hpY2ggdHVybnMgb3V0CisgICB0byBiZSBhIHJhdGhlciByYXJlIGZl YXR1cmUgYW1vbmcgVW5peCBzeXN0ZW1zLiBUbyBzZWUgaWYgeW91ciBVbml4CisgICBDLUtlcm1p dCB2ZXJzaW9uIHN1cHBvcnRzIGhhcmR3YXJlIGZsb3cgY29udHJvbCwgdHlwZSAic2V0IGZsb3cg PyIgYXQKKyAgIHRoZSBDLUtlcm1pdCBwcm9tcHQsIGFuZCBsb29rIGZvciAicnRzL2N0cyIgYW1v bmcgdGhlIG9wdGlvbnMuIE90aGVyCisgICBjb21tb24gc2l0dWF0aW9ucyBpbmNsdWRlOgorCisg ICAgMS4gVGhlIEFQSSBpcyBhdmFpbGFibGUsIHNvICJzZXQgZmxvdyBydHMvY3RzIiBhcHBlYXJz IGFzIGEgdmFsaWQKKyAgICAgICBDLUtlcm1pdCBjb21tYW5kLCBidXQgaXQgZG9lc24ndCBkbyBh bnl0aGluZyBiZWNhdXNlIHRoZSBkZXZpY2UKKyAgICAgICBkcml2ZXIgKHBhcnQgb2YgdGhlIG9w ZXJhdGluZyBzeXN0ZW0pIHdhcyBuZXZlciBjb2RlZCB0byBkbworICAgICAgIGhhcmR3YXJlIGZs b3cgY29udHJvbC4gVGhpcyBpcyBjb21tb24gYW1vbmcgU3lzdGVtIFYgUjQKKyAgICAgICBpbXBs ZW1lbnRhdGlvbnMgKGRldGFpbHMgYmVsb3cpLgorICAgIDIuIFRoZSBBUEkgaXMgbm90IGF2YWls YWJsZSwgc28gInNldCBmbG93IHJ0cy9jdHMiIGRvZXMgTk9UIGFwcGVhciBhcworICAgICAgIGEg dmFsaWQgQy1LZXJtaXQgY29tbWFuZCwgYnV0IHlvdSBjYW4gc3RpbGwgZ2V0IFJUUy9DVFMgZmxv dworICAgICAgIGNvbnRyb2wgYnkgc2VsZWN0aW5nIGEgc3BlY2lhbGx5IG5hbWVkIGRldmljZSBp biB5b3VyIFNFVCBMSU5FCisgICAgICAgY29tbWFuZC4gRXhhbXBsZXM6CisgICAgICAgICAgKyBO ZVhUU1RFUDogL2Rldi9jdWZhIGluc3RlYWQgb2YgL2Rldi9jdWEsIC9kZXYvY3VmYiBpbnN0ZWFk IG9mCisgICAgICAgICAgICAvZGV2L2N1YiAoNjgwNDAgb25seTsgIm1hbiB6cyIgZm9yIGZ1cnRo ZXIgaW5mbykuCisgICAgICAgICAgKyBJUklYOiAvZGV2L3R0eWYyIGluc3RlYWQgb2YgL2Rldi90 dHlkMiBvciAvZGV2L3R0eW0yICgibWFuIDcKKyAgICAgICAgICAgIHNlcmlhbCIpLgorICAgIDMu IFRoZSBBUEkgaXMgYXZhaWxhYmxlLCBkb2Vzbid0IHdvcmssIGJ1dCBhIHdvcmthcm91bmQgYXMg aW4gKDIpIGNhbgorICAgICAgIGJlIHVzZWQuCisgICAgNC4gVGhlIEFQSSBpcyBhdmFpbGFibGUs IGJ1dCBLZXJtaXQgZG9lc24ndCBrbm93IGFib3V0IGl0LiBJbiB0aGVzZQorICAgICAgIGNhc2Vz LCB5b3UgY2FuIHVzdWFsbHkgdXNlIGFuIHN0dHkgY29tbWFuZCB0byBlbmFibGUgUlRTL0NUUyBv biB0aGUKKyAgICAgICBkZXZpY2UsIGUuZy4gInN0dHkgY3J0c2N0cyIgb3IgInN0dHkgY3RzZmxv dyIsICJzdHR5IHJ0c2Zsb3ciLAorICAgICAgIGJlZm9yZSBzdGFydGluZyBLZXJtaXQsIGFuZCB0 aGVuIHRlbGwgS2VybWl0IHRvIFNFVCBGTE9XIEtFRVAuCisgICAgNS4gTm8gQVBJIGFuZCBubyBz cGVjaWFsIGRldmljZSBkcml2ZXJzLiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMKKyAgICAgICBj b21wbGV0ZWx5IHVuYXZhaWxhYmxlLgorCisgICBTeXN0ZW0gViBSNCBiYXNlZCBVbml4ZXMgYXJl IHN1cHBvc2VkIHRvIHN1cHBseSBhIDx0ZXJtaW94Lmg+IGZpbGUsCisgICB3aGljaCBnaXZlcyBL ZXJtaXQgdGhlIG5lY2Vzc2FyeSBpbnRlcmZhY2UgdG8gY29tbWFuZCB0aGUgdGVybWluYWwKKyAg IGRyaXZlciB0byBlbmFibGUvZGlzYWJsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wuIFVuZm9ydHVu YXRlbHksIGJ1dAorICAgcHJlZGljdGFibHksIG1hbnkgaW1wbGVtZW50YXRpb25zIG9mIFNWUjQg d2hpbXNpY2FsbHkgcGxhY2UgdGhpcyBmaWxlCisgICBpbiAvdXNyL2luY2x1ZGUvc3lzIHJhdGhl ciB0aGFuIC91c3IvaW5jbHVkZSAod2hlcmUgU1ZJRCBjbGVhcmx5CisgICBzcGVjaWZpZXMgaXQg c2hvdWxkIGJlOyBzZWUgU1ZJRCwgVGhpcmQgRWRpdGlvbiwgVjEsIHRlcm1pb3goQkFfREVWKS4K KyAgIFRodXMgaWYgeW91IGJ1aWxkIEMtS2VybWl0IHdpdGggYW55IG9mIHRoZSBtYWtlZmlsZSBl bnRyaWVzIHRoYXQKKyAgIGNvbnRhaW4gLURURVJNSU9YIG9yIC1EU1RFUk1JT1ggKHRoZSBsYXR0 ZXIgdG8gc2VsZWN0IDxzeXMvdGVybWlveC5oPiksCisgICBDLUtlcm1pdCB3aWxsIGhhdmUgInNl dCBmbG93IHJ0cy9jdHMiIGFuZCBwb3NzaWJseSBvdGhlciBoYXJkd2FyZQorICAgZmxvdy1jb250 cm9sIHJlbGF0ZWQgY29tbWFuZHMuIEJVVC4uLiBUaGF0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1l YW4KKyAgIHRoYXQgdGhleSB3aWxsIHdvcmsuIEluIHNvbWUgY2FzZXMsIHRoZSB1bmRlcmx5aW5n IGZ1bmN0aW9ucyBhcmUgc2ltcGx5CisgICBub3QgY29kZWQgaW50byB0aGUgb3BlcmF0aW5nIHN5 c3RlbS4KKworICAgV0FSTklORzogV2hlbiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgYXZhaWxh YmxlLCBhbmQgeW91IGVuYWJsZSBpbgorICAgS2VybWl0IG9uIGEgZGV2aWNlIHRoYXQgaXMgbm90 IHJlY2VpdmluZyB0aGUgQ1RTIHNpZ25hbCwgS2VybWl0IGNhbgorICAgaGFuZyB3YWl0aW5nIGZv ciBDVFMgdG8gY29tZSB1cC4gVGhpcyBpcyBtb3N0IGVhc2lseSBzZWVuIHdoZW4gdGhlCisgICBs b2NhbCBzZXJpYWwgcG9ydCBoYXMgbm90aGluZyBwbHVnZ2VkIGluIHRvIGl0LCBvciBpcyBjb25u ZWN0ZWQgdG8gYW4KKyAgIGV4dGVybmFsIG1vZGVtIHRoYXQgaXMgcG93ZXJlZCBvZmYuCisKKzku IFRFUk1JTkFMIENPTk5FQ1RJT04gQU5EIEtFWSBNQVBQSU5HCisKKyAgIFsgWzU3OF1Ub3AgXSBb IFs1NzldQ29udGVudHMgXSBbIFs1ODBdTmV4dCBdIFsgWzU4MV1QcmV2aW91cyBdCisKKyAgIEMt S2VybWl0IGlzIG5vdCBhIHRlcm1pbmFsIGVtdWxhdG9yLiBSZWZlciB0byBwYWdlIDE0NyBvZiBb NTgyXVVzaW5nCisgICBDLUtlcm1pdCwgMm5kIEVkaXRpb246ICJNb3N0IHZlcnNpb25zIG9mIEMt S2VybWl0IC0tIFVuaXgsIFZNUywgQU9TL1ZTLAorICAgVk9TLCBldGMgLS0gcHJvdmlkZSB0ZXJt aW5hbCBjb25uZWN0aW9uIHdpdGhvdXQgZW11bGF0aW9uLiBUaGVzZQorICAgdmVyc2lvbnMgYWN0 IGFzIGEgJ3NlbWl0cmFuc3BhcmVudCBwaXBlJyBiZXR3ZWVuIHRoZSByZW1vdGUgY29tcHV0ZXIK KyAgIGFuZCB5b3VyIHRlcm1pbmFsLCB0ZXJtaW5hbCBlbXVsYXRvciwgY29uc29sZSBkcml2ZXIs IG9yIHdpbmRvdywgd2hpY2gKKyAgIGluIHR1cm4gZW11bGF0ZXMgKG9yIGlzKSBhIHNwZWNpZmlj IGtpbmQgb2YgdGVybWluYWwuIiBUaGUgZW52aXJvbm1lbnQKKyAgIGluIHdoaWNoIHlvdSBydW4g Qy1LZXJtaXQgaXMgdXAgdG8geW91LgorCisgICBJZiB5b3UgYXJlIGFuIFggV2luZG93cyB1c2Vy LCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mIGFuIGFsdGVybmF0aXZlIHRvCisgICB4dGVybSB0aGF0 IHN1cHBvcnRzIFZUMjIwIGVtdWxhdGlvbiwgZnJvbSBUaG9tYXMgRS4gRGlja2V5OgorCisgIFs1 ODNdaHR0cDovL2RpY2tleS5oaXMuY29tL3h0ZXJtL3h0ZXJtLmh0bWwKKworICAgVW5peCBDLUtl cm1pdCdzIFNFVCBLRVkgY29tbWFuZCBjdXJyZW50bHkgY2FuIG5vdCBiZSB1c2VkIHdpdGgga2V5 cworICAgdGhhdCBnZW5lcmF0ZSAid2lkZSIgc2NhbiBjb2RlcyBvciBtdWx0aWJ5dGUgc2VxdWVu Y2VzLCBzdWNoIGFzCisgICB3b3Jrc3RhdGlvbiBmdW5jdGlvbiBvciBhcnJvdyBrZXlzLCBiZWNh dXNlIFVuaXggQy1LZXJtaXQgZG9lcyBub3QgaGF2ZQorICAgZGlyZWN0IGFjY2VzcyB0byB0aGUg a2V5Ym9hcmQuCisKKyAgIEhvd2V2ZXIsIG1hbnkgVW5peCB3b3Jrc3RhdGlvbnMgYW5kL29yIGNv bnNvbGUgZHJpdmVycyBwcm92aWRlIHRoZWlyCisgICBvd24ga2V5IG1hcHBpbmcgZmVhdHVyZS4g V2l0aCB4dGVybSwgZm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlICd4bW9kbWFwJworICAgKCJtYW4g eG1vZG1hcCIgZm9yIGRldGFpbHMpOyBoZXJlIGlzIGFuIHh0ZXJtIG1hcHBpbmcgdG8gbWFwIHRo ZSBTdW4KKyAgIGtleWJvYXJkIHRvIERFQyBWVDIwMCB2YWx1ZXMgZm9yIHVzZSB3aXRoIFZULXRl cm1pbmFsIG9yaWVudGVkCisgICBhcHBsaWNhdGlvbnMgbGlrZSBWTVMgRVZFOgorCisgIGtleWNv ZGUgMTAxPUtQXzAKKyAga2V5Y29kZSAxMTk9S1BfMQorICBrZXljb2RlIDEyMD1LUF8yCisgIGtl eWNvZGUgMTIxPUtQXzMKKyAga2V5Y29kZSA5OD1LUF80CisgIGtleWNvZGUgOTk9S1BfNQorICBr ZXljb2RlIDEwMD1LUF82CisgIGtleWNvZGUgNzU9S1BfNworICBrZXljb2RlIDc2PUtQXzgKKyAg a2V5Y29kZSA3Nz1LUF85CisgIGtleWNvZGUgNTI9S1BfRjEKKyAga2V5Y29kZSA1Mz1LUF9GMgor ICBrZXljb2RlIDU0PUtQX0YzCisgIGtleWNvZGUgNTc9S1BfRGVjaW1hbAorICBrZXljb2RlIDI4 PUxlZnQKKyAga2V5Y29kZSAyOT1SaWdodAorICBrZXljb2RlIDMwPUtQX1NlcGFyYXRvcgorICBr ZXljb2RlIDEwNT1LUF9GNAorICBrZXljb2RlIDc4PUtQX1N1YnRyYWN0CisgIGtleWNvZGUgOD1M ZWZ0CisgIGtleWNvZGUgMTA9UmlnaHQKKyAga2V5Y29kZSAzMj1VcAorICBrZXljb2RlIDMzPURv d24KKyAga2V5Y29kZSA5Nz1LUF9FbnRlcgorCisgICBVc2VycyBvZiBMaW51eCBjb25zb2xlcyBj YW4gdXNlIGxvYWRrZXlzICgibWFuIGR1bXBrZXlzIGxvYWRrZXlzCisgICBrZXl0YWJsZXMiIGZv ciBkZXRhaWxzLiBUaGUgZm9ybWF0IHVzZWQgYnkgbG9hZGtleXMgaXMgY29tcGF0aWJsZSB3aXRo CisgICB0aGF0IHVzZWQgYnkgWG1vZG1hcCwgYWx0aG91Z2ggaXQgaXMgbm90IGRlZmluaXRlbHkg Y2VydGFpbiB0aGF0IHRoZQorICAga2V5Y29kZXMgYXJlIGNvbXBhdGlibGUgZm9yIGRpZmZlcmVu dCBrZXlib2FyZCB0eXBlcyAoZS5nLiBTdW4gdnMgSFAgdnMKKyAgIFBDLCBldGMpLgorCisxMC4g RklMRSBUUkFOU0ZFUgorCisgICBbIFs1ODRdVG9wIF0gWyBbNTg1XUNvbnRlbnRzIF0gWyBbNTg2 XU5leHQgXSBbIFs1ODddUHJldmlvdXMgXQorCisgICBPbiBtb3N0IHBsYXRmb3JtcywgQy1LZXJt aXQgY2FuIG5vdCBoYW5kbGUgZmlsZXMgbG9uZ2VyIHRoYW4gMl4zMSBvcgorICAgMl4zMiBieXRl cyBsb25nLCBiZWNhdXNlIGl0IHVzZXMgdGhlIHRyYWRpdGlvbmFsIGZpbGUgaS9vIEFQSXMgdGhh dCB1c2UKKyAgIDMyLWJpdCB3b3JkcyB0byByZXByZXNlbnQgdGhlIGZpbGUgc2l6ZS4gVG8gYWNj b21tb2RhdGUgbG9uZ2VyIGZpbGVzLAorICAgd2Ugd291bGQgaGF2ZSB0byBzd2l0Y2ggdG8gYSBu ZXcgYW5kIGRpZmZlcmVudCBBUEkuIFVuZm9ydHVuYXRlbHksIGVhY2gKKyAgIHBsYXRmb3JtIGhh cyBhIGRpZmZlcmVudCBvbmUsIGEgbmlnaHRtYXJlIHRvIGhhbmRsZSBpbiBwb3J0YWJsZSBjb2Rl LgorICAgVGhlIEMtS2VybWl0IGZpbGUgY29kZSB3YXMgd3JpdHRlbiBpbiB0aGUgZGF5cyBsb25n IGJlZm9yZSBmaWxlcyBsb25nZXIKKyAgIHRoYW4gMkdCIHdlcmUgc3VwcG9ydGVkIG9yIGV2ZW4g Y29udGVtcGxhdGVkIGluIHRoZSBvcGVyYXRpbmcgc3lzdGVtcworICAgd2hlcmUgQy1LZXJtaXQg cmFuLgorCisgICBJZiB1cGxvYWRzIChvciBkb3dubG9hZHMpIGZhaWwgaW1tZWRpYXRlbHksIGdp dmUgdGhlIENBVVRJT1VTIGNvbW1hbmQKKyAgIHRvIEtlcm1pdCBhbmQgdHJ5IGFnYWluLiBJZiB0 aGV5IHN0aWxsIGZhaWwsIHRoZW4gdHJ5IFNFVCBQUkVGSVhJTkcKKyAgIEFMTC4gSWYgdGhleSBz dGlsbCBmYWlsLCB0cnkgU0VUIFBBUklUWSBTUEFDRS4gSWYgdGhleSBzdGlsbCBmYWlsLCB0cnkK KyAgIFJPQlVTVC4KKworICAgSWYgcmVjZXB0aW9uIChwYXJ0aWN1bGFybHkgb2YgbGFyZ2UgZmls ZXMgYW5kL29yIGJpbmFyeSBmaWxlcykgYmVnaW5zCisgICBzdWNjZXNzZnVsbHkgYnV0IHRoZW4g ZmFpbCBjb25zaXN0ZW50bHkgYWZ0ZXIgYSBjZXJ0YWluIGFtb3VudCBvZiBieXRlcworICAgaGF2 ZSBiZWVuIHNlbnQsIGNoZWNrOgorCisgICAgICogWW91ciB1bGltaXQgKCJ1bGltaXQgLWEiKQor ICAgICAqIFRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIHNwYWNlIG9uIHRoZSB0YXJnZXQgZGlzayAo ImRmIC4iIG9yICJkZiAtaworICAgICAgIC4iKQorICAgICAqIFlvdXIgcGVyc29uYWwgZGlzayBx dW90YSAocGxhdGZvcm0tIGFuZCBzaXRlLWRlcGVuZGVudCkKKyAgICAgKiBUaGUgbWF4aW11bSBm aWxlIHNpemUgb24gdGhlIHJlY2VpdmVyJ3MgZmlsZSBzeXN0ZW0gKGUuZy4gMkdCIGluCisgICAg ICAgb2xkIHZlcnNpb25zIHRoZSBMaW51eCBWRlMgZmlsZSBzeXN0ZW0sIGFuZC9vciBpbiBhcHBs aWNhdGlvbnMgdGhhdAorICAgICAgIGhhdmUgbm90IGJlZW4gcmVjb2RlZCB0byB1c2UgbmV3ICJs YXJnZSBmaWxlIiBBUElzKS4KKyAgICAgKiBJZiBpdCdzIGFuIE5GUy1tb3VudGVkIGRpc2sgKGlm IHNvLCB0cnkgdXBsb2FkaW5nIHRvIGEgbG9jYWwgZGlzaykKKyAgICAgKiBJcyB0aGVyZSBhbiAi aWRsZSBsaW1pdCIgb24gdGhlIHJlY2VpdmluZyBlbmQ/CisKKyAgIElmIG5vbmUgb2YgdGhlc2Ug c2VlbSB0byBleHBsYWluIGl0LCB0aGVuIHRoZSBwcm9ibGVtIGlzIG5vdCBzaXplCisgICByZWxh dGVkLCBidXQgcmVmbGVjdHMgc29tZSBjbGFzaCBiZXR3ZWVuIHRoZSBmaWxlIGNvbnRlbnRzIGFu ZCB0aGUKKyAgIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgY29ubmVjdGlvbiwgaW4gd2hpY2ggY2Fz ZSBmb2xsb3cgdGhlCisgICBpbnN0cnVjdGlvbnMgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBvZiB0 aGlzIHNlY3Rpb24uCisKKyAgIFN1cHBvc2UgdHdvIGNvcGllcyBvZiBLZXJtaXQgYXJlIHJlY2Vp dmluZyBmaWxlcyBpbnRvIHRoZSBzYW1lCisgICBkaXJlY3RvcnksIGFuZCB0aGUgZmlsZXMgaGF2 ZSB0aGUgc2FtZSBuYW1lLCBlLmcuICJmb28uYmFyIi4gV2hpY2hldmVyCisgICBvbmUgc3RhcnRz IGZpcnN0IG9wZW5zIGFuIG91dHB1dCBmaWxlIGNhbGxlZCAiZm9vLmJhciIuIFRoZSBzZWNvbmQg b25lCisgICBzZWVzIHRoZXJlIGlzIGFscmVhZHkgYSBmb28uYmFyIGZpbGUsIGFuZCBzbyByZW5h bWVzIHRoZSBleGlzdGluZworICAgZm9vLmJhciB0byBmb28uYmFyLn4xfiAob3Igd2hhdGV2ZXIp LiBXaGVuIHRoZSBmaXJzdCBmaWxlIGhhcyBiZWVuCisgICByZWNlaXZlZCBjb21wbGV0ZWx5LCBL ZXJtaXQgZ29lcyB0byBjaGFuZ2UgaXRzIG1vZGlmaWNhdGlvbiB0aW1lIGFuZAorICAgcGVybWlz c2lvbnMgdG8gdGhvc2UgZ2l2ZW4gYnkgdGhlIGZpbGUgc2VuZGVyIGluIHRoZSBBdHRyaWJ1dGUg cGFja2V0LgorICAgQnV0IGluIFVuaXgsIHRoZSBBUElzIGZvciBkb2luZyB0aGlzIHRha2UgYSBm aWxlbmFtZSwgbm90IGEgZmlsZQorICAgZGVzY3JpcHRvci4gU2luY2UgdGhlIGZpcnN0IEtlcm1p dCdzIGZpbGUgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIHRoZQorICAgc2Vjb25kIEtlcm1pdCBpcyB1 c2luZyB0aGUgb3JpZ2luYWwgbmFtZSwgdGhlIGZpcnN0IEtlcm1pdCBjaGFuZ2VzIHRoZQorICAg bW9kdGltZSBhbmQgcGVybWlzc2lvbnMgb2YgdGhlIHNlY29uZCBLZXJtaXQncyBmaWxlLCBub3Qg aXRzIG93bi4KKyAgIEFsdGhvdWdoIHRoZXJlIG1pZ2h0IGJlIGEgd2F5IHRvIHdvcmsgYXJvdW5k IHRoaXMgaW4gdGhlIGNvZGUsIGUuZy4KKyAgIHVzaW5nIGlub2RlIG51bWJlcnMgdG8ga2VlcCB0 cmFjayBvZiB3aGljaCBmaWxlIGlzIHdoaWNoLCB0aGlzIHdvdWxkIGJlCisgICB0cmlja3kgYW5k IG1vc3QgbGlrZWx5IG5vdCB2ZXJ5IHBvcnRhYmxlLiBJdCdzIGJldHRlciB0byBzZXQgdXAgeW91 cgorICAgYXBwbGljYXRpb24gdG8gcHJldmVudCBzdWNoIHRoaW5ncyBmcm9tIGhhcHBlbmluZywg d2hpY2ggaXMgZWFzeSBlbm91Z2gKKyAgIHVzaW5nIHRoZSBzY3JpcHQgbGFuZ3VhZ2UsIGZpbGVu YW1lIHRlbXBsYXRlcywgZXRjLgorCisgICBTdXBwb3NlIHlvdSBzdGFydCBDLUtlcm1pdCB3aXRo IGEgY29tbWFuZC1saW5lIGFyZ3VtZW50IHRvIHNlbmQgb3IKKyAgIHJlY2VpdmUgYSBmaWxlIChl LmcuICJrZXJtaXQgLXIiKSBhbmQgdGhlbiB0eXBlIEN0cmwtXGMgaW1tZWRpYXRlbHkKKyAgIGFm dGVyd2FyZHMgdG8gZXNjYXBlIGJhY2sgYW5kIGluaXRpYXRlIHRoZSBvdGhlciBlbmQgb2YgdGhl IHRyYW5zZmVyLAorICAgQlVUIHlvdXIgbG9jYWwgS2VybWl0J3MgZXNjYXBlIGNoYXJhY3RlciBp cyBub3QgQ3RybC1cLiBJbiB0aGlzIGNhc2UsCisgICB0aGUgbG9jYWwgS2VybWl0IHBhc3NlcyB0 aGUgQ3RybC1cIHRvIHRoZSByZW1vdGUgc3lzdGVtLCBhbmQgaWYgdGhpcyBpcworICAgVW5peCwg Q3RybC1cIGlzIGxpa2VseSB0byBiZSBpdHMgU0lHUVVJVCBjaGFyYWN0ZXIsIHdoaWNoIGNhdXNl cyB0aGUKKyAgIGN1cnJlbnQgcHJvZ3JhbSB0byBoYWx0IGFuZCBkdW1wIGNvcmUuIFdlbGwsIGp1 c3QgYWJvdXQgdGhlIGZpcnN0IHRoaW5nCisgICBDLUtlcm1pdCBkb2VzIHdoZW4gaXQgc3RhcnRz IGlzIHRvIGRpc2FibGUgdGhlIFNJR1FVSVQgc2lnbmFsLiBIb3dldmVyLAorICAgaXQgaXMgc3Rp bGwgcG9zc2libGUgZm9yIFNJR1FVSVQgdG8gY2F1c2UgS2VybWl0IHRvIHF1aXQgYW5kIGR1bXAg Y29yZQorICAgaWYgaXQgaXMgZGVsaXZlcmVkIHdoaWxlIEtlcm1pdCBpcyBiZWluZyBsb2FkZWQg b3Igc3RhcnRlZCwgYmVmb3JlIHRoZQorICAgc2lnbmFsIGNhbiBiZSBkaXNhYmxlZC4gVGhlcmUn cyBub3RoaW5nIEtlcm1pdCBpdHNlbGYgY2FuIGRvIGFib3V0CisgICB0aGlzLCBidXQgeW91IGNh biBwcmV2ZW50IGl0IGZyb20gaGFwcGVuaW5nIGJ5IGRpc2FibGluZyBTSUdRVUlUIGluCisgICB5 b3VyIFVuaXggc2Vzc2lvbi4gVGhlIGNvbW1hbmQgaXMgdXN1YWxseSBzb21ldGhpbmcgbGlrZToK KworICBzdHR5IHF1aXQgdW5kZWYKKworICAgVW5peCBDLUtlcm1pdCBkb2VzIG5vdCByZWplY3Qg aW5jb21pbmcgZmlsZXMgb24gdGhlIGJhc2lzIG9mIHNpemUuCisgICBUaGVyZSBhcHBlYXJzIHRv IGJlIG5vIGdvb2QgKHJlbGlhYmxlLCBwb3J0YWJsZSkgd2F5IHRvIGRldGVybWluZSBpbgorICAg YWR2YW5jZSBob3cgbXVjaCBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSwgZWl0aGVyIG9uIHRoZSBk ZXZpY2UsIG9yCisgICAod2hlbiBxdW90YXMgb3Igb3RoZXIgbGltaXRzIGFyZSBpbnZvbHZlZCkg dG8gdGhlIHVzZXIuCisKKyAgIFVuaXggQy1LZXJtaXQgZGlzY2FyZHMgYWxsIGNhcnJpYWdlIHJl dHVybnMgZnJvbSBpbmNvbWluZyBmaWxlcyB3aGVuIGluCisgICB0ZXh0IG1vZGUuCisKKyAgIElm IEMtS2VybWl0IGhhcyBwcm9ibGVtcyBjcmVhdGluZyBmaWxlcyBpbiB3cml0YWJsZSBkaXJlY3Rv cmllcyB3aGVuIGl0CisgICBpcyBpbnN0YWxsZWQgc2V0dWlkIG9yIHNldGdpZCBvbiBCU0QtYmFz ZWQgdmVyc2lvbnMgb2YgVW5peCBzdWNoIGFzCisgICBOZVhUU1RFUCAzLjAsIGl0IHByb2JhYmx5 IG5lZWRzIHRvIGJlIHJlYnVpbHQgd2l0aCB0aGUgLURTV19BQ0NfSUQKKyAgIGNvbXBpbGF0aW9u IHN3aXRjaC4KKworICAgSWYgeW91IFNFVCBGSUxFIERJU1BMQVkgRlVMTFNDUkVFTiwgYW5kIEMt S2VybWl0IGNvbXBsYWlucyAiU29ycnksCisgICB0ZXJtaW5hbCB0eXBlIG5vdCBzdXBwb3J0ZWQi LCBpdCBtZWFucyB0aGF0IHRoZSB0ZXJtaW5hbCBsaWJyYXJ5CisgICAodGVybWNhcCBvciB0ZXJt bGliKSB0aGF0IEMtS2VybWl0IHdhcyBidWlsdCB3aXRoIGRvZXMgbm90IGtub3cgYWJvdXQgYQor ICAgdGVybWluYWwgd2hvc2UgbmFtZSBpcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB5b3VyIFRFUk0g ZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlLiBJZiB0aGlzIGhhcHBlbnMsIGJ1dCB5b3Ugd2FudCB0 byBoYXZlIHRoZSBmdWxsc2NyZWVuIGZpbGUKKyAgIHRyYW5zZmVyIGRpc3BsYXksIEVYSVQgZnJv bSBDLUtlcm1pdCBhbmQgc2V0IGEgVW5peCB0ZXJtaW5hbCB0eXBlIGZyb20KKyAgIGFtb25nIHRo ZSBzdXBwb3J0ZWQgdmFsdWVzIHRoYXQgaXMgYWxzbyBzdXBwb3J0ZWQgYnkgeW91ciB0ZXJtaW5h bAorICAgZW11bGF0b3IsIG9yIGVsc2UgaGF2ZSBhbiBlbnRyeSBmb3IgeW91ciB0ZXJtaW5hbCB0 eXBlIGFkZGVkIHRvIHRoZQorICAgc3lzdGVtIHRlcm1jYXAgYW5kL29yIHRlcm1pbmZvIGRhdGFi YXNlLgorCisgICBJZiB5b3UgYXR0ZW1wdCB0byBzdXNwZW5kIEMtS2VybWl0IGR1cmluZyBsb2Nh bC1tb2RlIGZpbGUgdHJhbnNmZXIgYW5kCisgICB0aGVuIGNvbnRpbnVlIGl0IGluIHRoZSBiYWNr Z3JvdW5kICh2aWEgYmcpLCBpdCB3aWxsIGJsb2NrIGZvciAidHR5CisgICBvdXRwdXQiIGlmIHlv dSBhcmUgdXNpbmcgdGhlIEZVTExTQ1JFRU4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5LiBUaGlzIGlz CisgICBhcHBhcmVudGx5IGEgcHJvYmxlbSB3aXRoIGN1cnNlcy4gTW92aW5nIGEgbG9jYWwtbW9k ZSBmaWxlIHRyYW5zZmVyCisgICBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIGZvcmVncm91bmQgYW5k IGJhY2tncm91bmQgd29ya3MgY29ycmVjdGx5LAorICAgaG93ZXZlciwgd2l0aCB0aGUgU0VSSUFM LCBDUlQsIEJSSUVGLCBvciBOT05FIGZpbGUgdHJhbnNmZXIgZGlzcGxheXMuCisKKyAgIElmIEMt S2VybWl0J3MgY29tbWFuZCBwYXJzZXIgbm8gbG9uZ2VyIGVjaG9lcywgb3Igb3RoZXJ3aXNlIGFj dHMKKyAgIHN0cmFuZ2VseSwgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gYSBmaWxlIHRyYW5zZmVyIHdp dGggdGhlIGZ1bGxzY3JlZW4KKyAgIChjdXJzZXMpIGRpc3BsYXksIGFuZCB0aGUgY3Vyc2VzIGxp YnJhcnkgZm9yIHlvdXIgdmVyc2lvbiBvZiBVbml4CisgICBpbmNsdWRlcyB0aGUgbmV3dGVybSgp IGZ1bmN0aW9uLCB0aGVuIHRyeSByZWJ1aWxkaW5nIHlvdXIgdmVyc2lvbiBvZgorICAgQy1LZXJt aXQgd2l0aCAtRENLX05FV1RFUk0uIFNpbWlsYXJseSBpZiBpdCBlY2hvZXMgZG91Ymx5LCB3aGlj aCBtaWdodAorICAgZXZlbiBoYXBwZW4gZHVyaW5nIGEgc3Vic2VxdWVudCBDT05ORUNUIHNlc3Np b24uIElmIHJlYnVpbGRpbmcgd2l0aAorICAgLURDS19ORVdURVJNIGRvZXNuJ3QgZml4IGl0LCB0 aGVuIHRoZXJlIGlzIHNvbWV0aGluZyB2ZXJ5IHN0cmFuZ2UgYWJvdXQKKyAgIHlvdXIgc3lzdGVt J3MgY3Vyc2VzIGxpYnJhcnksIGFuZCB5b3Ugc2hvdWxkIHByb2JhYmx5IG5vdCB1c2UgaXQuIFRl bGwKKyAgIEMtS2VybWl0IHRvIFNFVCBGSUxFIERJU1BMQVkgQ1JULCBCUklFRiwgb3IgYW55dGhp bmcgZWxzZSBvdGhlciB0aGFuCisgICBGVUxMU0NSRUVOLCBhbmQvb3IgcmVidWlsZCB3aXRob3V0 IC1EQ0tfQ1VSU0VTLCBhbmQgd2l0aG91dCBsaW5raW5nCisgICB3aXRoICh0ZXJtbGliIGFuZCkg Y3Vyc2VzLiBOb3RlOiBUaGlzIHByb2JsZW0gc2VlbWVkIHRvIGhhdmUgZXNjYWxhdGVkCisgICBp biBDLUtlcm1pdCA3LjAsIGFuZCAtRENLX05FV1RFUk0gaGFkIHRvIGJlIGFkZGVkIHRvIG1hbnkg YnVpbGRzIHRoYXQKKyAgIHByZXZpb3VzbHkgd29ya2VkIHdpdGhvdXQgaXQ6IExpbnV4LCBBSVgg NC4xLCBERy9VWCwgZXRjLiBJbiB0aGUgTGludXgKKyAgIGNhc2UsIGl0IGlzIG9idmlvdXNseSBi ZWNhdXNlIG9mIGNoYW5nZXMgaW4gdGhlIChuKWN1cnNlcyBsaWJyYXJ5OyB0aGUKKyAgIGNhdXNl IGluIHRoZSBvdGhlciBjYXNlcyBpcyBub3Qga25vd24uCisKKyAgIEMtS2VybWl0IGNyZWF0ZXMg YmFja3VwLWZpbGUgbmFtZXMgKHN1Y2ggYXMgIm9vZmEudHh0Ln4xfiIpIGJhc2VkIG9uCisgICBp dHMga25vd2xlZGdlIG9mIHRoZSBtYXhpbXVtIGZpbGVuYW1lIGxlbmd0aCBvbiB0aGUgcGxhdGZv cm0gd2hlcmUgaXQKKyAgIGlzIHJ1bm5pbmcsIHdoaWNoIGlzIGxlYXJuZWQgYXQgY29tcGlsZSB0 aW1lLCBiYXNlZCBvbiBNQVhOQU1MRU4gb3IKKyAgIGVxdWl2YWxlbnQgc3ltYm9scyBmcm9tIHRo ZSBzeXN0ZW0gaGVhZGVyIGZpbGVzLiBCdXQgc3VwcG9zZSBDLUtlcm1pdAorICAgaXMgcmVjZWl2 aW5nIGZpbGVzIG9uIGEgVW5peCBwbGF0Zm9ybSB0aGF0IHN1cHBvcnRzIGxvbmcgZmlsZW5hbWVz LCBidXQKKyAgIHRoZSBpbmNvbWluZyBmaWxlcyBhcmUgYmVpbmcgc3RvcmVkIG9uIGFuIE5GUy1t b3VudGVkIGZpbGUgc3lzdGVtIHRoYXQKKyAgIHN1cHBvcnRzIG9ubHkgc2hvcnQgbmFtZXMuIE5G UyBtYXBzIHRoZSBleHRlcm5hbCBzeXN0ZW0gdG8gdGhlIGxvY2FsCisgICBBUElzLCBzbyBDLUtl cm1pdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgdGhhdCBsb25nIG5hbWVzIHdpbGwgYmUKKyAgIHRy dW5jYXRlZC4gT3IgdGhhdCBDLUtlcm1pdCBpcyBydW5uaW5nIG9uIGEgdmVyc2lvbiBvZiBVbml4 IHRoYXQKKyAgIHN1cHBvcnRzIGJvdGggbG9uZy1uYW1lIGFuZCBzaG9ydC1uYW1lIGZpbGUgc3lz dGVtcyBzaW11bHRhbmVvdXNseQorICAgKHN1Y2ggYXMgSFAtVVggNy4wMCkuIFRoaXMgY2FuIGNh dXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBjcmVhdGluZworICAgYmFja3VwIGZpbGVzLCBv ciB3b3JzZS4gRm9yIGV4YW1wbGUsIHlvdSBhcmUgc2VuZGluZyBhIGdyb3VwIG9mIGZpbGVzCisg ICB3aG9zZSBuYW1lcyBhcmUgZGlmZmVyZW50aWF0ZWQgb25seSBieSBjaGFyYWN0ZXJzIHBhc3Qg dGhlIHBvaW50IGF0CisgICB3aGljaCB0aGV5IHdvdWxkIGJlIHRydW5jYXRlZCwgZWFjaCBmaWxl IHdpbGwgb3ZlcndyaXRlIHRoZSBwcmV2aW91cworICAgb25lIHVwb24gYXJyaXZhbC4KKworMTEu IEVYVEVSTkFMIEZJTEUgVFJBTlNGRVIgUFJPVE9DT0xTCisKKyAgIFsgWzU4OF1Ub3AgXSBbIFs1 ODldQ29udGVudHMgXSBbIFs1OTBdTmV4dCBdIFsgWzU5MV1QcmV2aW91cyBdCisKKyAgIFNFQ1RJ T04gQ09OVEVOVFMKKworICAxMS4xLiBbNTkyXUMtS2VybWl0IGFzIGFuIEV4dGVybmFsIFByb3Rv Y29sCisgIDExLjIuIFs1OTNdSW52b2tpbmcgRXh0ZXJuYWwgUHJvdG9jb2xzIGZyb20gQy1LZXJt aXQKKworICAgVW5peCBDLUtlcm1pdCBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG90 aGVyIGNvbW11bmljYXRpb25zCisgICBzb2Z0d2FyZSBpbiB2YXJpb3VzIHdheXMuIEMtS2VybWl0 IGNhbiBiZSBpbnZva2VkIGZyb20gYW5vdGhlcgorICAgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbSBh cyBhbiAiZXh0ZXJuYWwgcHJvdG9jb2wiLCBhbmQgQy1LZXJtaXQgY2FuIGFsc28KKyAgIGludm9r ZSBvdGhlciBjb21tdW5pY2F0aW9uIHNvZnR3YXJlIHRvIHBlcmZvcm0gZXh0ZXJuYWwgcHJvdG9j b2xzLgorCisgICBUaGlzIHNvcnQgb2Ygb3BlcmF0aW9uIG1ha2VzIHNlbnNlIG9ubHkgd2hlbiB5 b3UgYXJlIGRpYWxpbmcgb3V0IGZyb20KKyAgIHlvdXIgVW5peCBzeXN0ZW0gKG9yIG1ha2luZyBh IG5ldHdvcmsgY29ubmVjdGlvbiBmcm9tIGl0KS4gSWYgdGhlIFVuaXgKKyAgIHN5c3RlbSBpcyB0 aGUgb25lIHlvdSBoYXZlIGRpYWxlZCBpbiB0bywgeW91IGRvbid0IG5lZWQgYW55IG9mIHRoZXNl CisgICB0cmlja3MuIEp1c3QgcnVuIHRoZSBkZXNpcmVkIHNvZnR3YXJlIG9uIHlvdXIgVW5peCBz eXN0ZW0gaW5zdGVhZCBvZgorICAgS2VybWl0LiBXaGVuIGRpYWxpbmcgb3V0IGZyb20gYSBVbml4 IHN5c3RlbSwgdGhlIGRpZmZpY3VsdHkgaXMgZ2V0dGluZworICAgdHdvIHByb2dyYW1zIHRvIHNo YXJlIHRoZSBzYW1lIGNvbW11bmljYXRpb24gZGV2aWNlIGluIHNwaXRlIG9mIHRoZQorICAgVW5p eCBVVUNQIGxvY2tmaWxlIG1lY2hhbmlzbSwgd2hpY2ggd291bGQgbm9ybWFsbHkgcHJldmVudCBh bnkgc2hhcmluZywKKyAgIGFuZCBwcmV2ZW50aW5nIHRoZSBleHRlcm5hbCBwcm90b2NvbCBmcm9t IGNsb3NpbmcgKGFuZCB0aGVyZWZvcmUKKyAgIGhhbmdpbmcgdXApIHRoZSBkZXZpY2Ugd2hlbiBp dCBleGl0cyBiYWNrIHRvIHRoZSBwcm9ncmFtIHRoYXQgaW52b2tlZAorICAgaXQuCisKKzExLjEu IEMtS0VSTUlUIEFTIEFOIEVYVEVSTkFMIFBST1RPQ09MCisKKyAgIFsgWzU5NF1Ub3AgXSBbIFs1 OTVdQ29udGVudHMgXSBbIFs1OTZdU2VjdGlvbiBDb250ZW50cyBdIFsgWzU5N11OZXh0IF0KKwor ICAgKFRoaXMgc2VjdGlvbiBkZWxldGVkOyBzZWUgWzU5OF1Vc2luZyBDLUtlcm1pdCwgMm5kIEVk LCBDaGFwdGVyIDE0LikKKworICAgInBjb21tIiBpcyBhIGdlbmVyYWwtcHVycG9zZSB0ZXJtaW5h bCBwcm9ncmFtIHRoYXQgcHJvdmlkZXMgZmlsZQorICAgdHJhbnNmZXIgY2FwYWJpbGl0aWVzIGl0 c2VsZiAoWC0gYW5kIFlNT0RFTSB2YXJpYXRpb25zKSBhbmQgdGhlIGFiaWxpdHkKKyAgIHRvIGNh bGwgb24gZXh0ZXJuYWwgcHJvZ3JhbXMgdG8gZG8gZmlsZSB0cmFuc2ZlcnMgKFpNT0RFTSBhbmQg S2VybWl0LAorICAgZm9yIGV4YW1wbGUpLiBZb3UgY2FuIHRlbGwgcGNvbW0gdGhlIGNvbW1hbmQg dG8gc2VuZCBvciByZWNlaXZlIGEgZmlsZQorICAgd2l0aCBhbiBleHRlcm5hbCBwcm90b2NvbDoK KyAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVjZWl2ZQorICAgICAgICBaTU9ERU0gICAgICAgICAgc3ogZmlsZW5hbWUgICAgICAgICAgICAg ICAgICAgICByegorICAgICAgICBLZXJtaXQgICAgICAgICAga2VybWl0IC1zIGZpbGVuYW1lICAg ICAgICAgICAgICBrZXJtaXQgLXIKKworICAgcGNvbW0gcnVucyBleHRlcm5hbCBwcm9ncmFtcyBm b3IgZmlsZSB0cmFuc2ZlciBieSBtYWtpbmcgc3RkaW4gYW5kCisgICBzdGRvdXQgcG9pbnQgdG8g dGhlIG1vZGVtIHBvcnQsIGFuZCB0aGVuIGV4ZWMtaW5nICIvYmluL3NoIC1jIHh4eCIKKyAgICh3 aGVyZSB4eHggaXMgdGhlIGFwcHJvcHJpYXRlIGNvbW1hbmQpLiBIb3dldmVyLCBDLUtlcm1pdCBk b2VzIG5vdAorICAgdHJlYXQgc3RkaW4gYW5kIHN0ZG91dCBhcyB0aGUgY29tbXVuaWNhdGlvbiBk ZXZpY2UgdW5sZXNzIHlvdSBpbnN0cnVjdAorICAgaXQ6CisKKworICAgICAgICAgICAgICAgICAg ICAgICAgU2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNlaXZlCisgICAgICAgIEtl cm1pdCAgICAgICAgICBrZXJtaXQgLWwgMCAtcyBmaWxlbmFtZSAgICAgICAgIGtlcm1pdCAtbCAw IC1yCisKKyAgIFRoZSAiLWwgMCIgb3B0aW9uIG1lYW5zIHRvIHVzZSBmaWxlIGRlc2NyaXB0b3Ig MCBmb3IgdGhlIGNvbW11bmljYXRpb24KKyAgIGRldmljZS4KKworICAgSW4gZ2VuZXJhbCwgYW55 IHByb2dyYW0gY2FuIHBhc3MgYW55IG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIEMtS2VybWl0Cisg ICBmb3IgdGhlIGNvbW11bmljYXRpb24gZGV2aWNlIGluIHRoZSAiLWwiIGNvbW1hbmQtbGluZSBv cHRpb24uIFdoZW4KKyAgIEtlcm1pdCBpcyBnaXZlbiBhIG51bWJlciBhcyB0aGUgYXJndW1lbnQg dG8gdGhlICItbCIgb3B0aW9uLCBpdCBzaW1wbHkKKyAgIHVzZXMgaXQgYXMgYSBmaWxlIGRlc2Ny aXB0b3IsIGFuZCBpdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGNsb3NlIGl0IHVwb24KKyAgIGV4aXQu CisKKyAgIEhlcmUncyBhbm90aGVyIGV4YW1wbGUsIGZvciBTZXlvbiAoYSBMaW51eCBjb21tdW5p Y2F0aW9uIHByb2dyYW0pLgorICAgRmlyc3QgdHJ5IHRoZSB0ZWNobmlxdWUgYWJvdmUuIElmIHRo YXQgd29ya3MsIGZpbmU7IG90aGVyd2lzZS4uLiBJZgorICAgU2V5b24gZG9lcyBub3QgZ2l2ZSB5 b3UgYSB3YXkgdG8gYWNjZXNzIGFuZCBwYXNzIGFsb25nIHRoZSBmaWxlCisgICBkZXNjcmlwdG9y LCBidXQgaXQgc3RhcnRzIHVwIHRoZSBLZXJtaXQgcHJvZ3JhbSB3aXRoIGl0cyBzdGFuZGFyZCBp L28KKyAgIHJlZGlyZWN0ZWQgdG8gaXRzIChTZXlvbidzKSBjb21tdW5pY2F0aW9ucyBmaWxlIGRl c2NyaXB0b3IsIHlvdSBjYW4KKyAgIGFsc28gZXhwZXJpbWVudCB3aXRoIHRoZSBmb2xsb3dpbmcg bWV0aG9kLCB3aGljaCB3b3JrZWQgaGVyZSBpbiBicmllZgorICAgdGVzdHMgb24gU3VuT1MuIElu c3RlYWQgb2YgaGF2aW5nIFNleW9uIHVzZSAia2VybWl0IC1yIiBvciAia2VybWl0IC1zCisgICBm aWxlbmFtZSIgYXMgaXRzIEtlcm1pdCBwcm90b2NvbCBjb21tYW5kcywgdXNlIHNvbWV0aGluZyBs aWtlIHRoaXMKKyAgIChleGFtcGxlcyBhc3N1bWUgQy1LZXJtaXQgNi4wKToKKworICAgRm9yIHNl cmlhbCBjb25uZWN0aW9uczoKKworICBrZXJtaXQgLVlxUWwgMCAtciAgICAgICAgICAgICAgICAg ICAgIDwtLSB0byByZWNlaXZlCisgIGtlcm1pdCAtWXFRbCAwIC1zIGZpbGVuYW1lKHMpICAgICAg ICAgPC0tIHRvIHNlbmQgb25lIG9yIG1vcmUgZmlsZXMKKworICAgRm9yIFRlbG5ldCBjb25uZWN0 aW9uczoKKworICBrZXJtaXQgLVlxUUYgMCAtciAgICAgICAgICAgICAgICAgICAgIDwtLSB0byBy ZWNlaXZlCisgIGtlcm1pdCAtWXFRRiAwIC1zIGZpbGVuYW1lKHMpICAgICAgICAgPC0tIHRvIHNl bmQgb25lIG9yIG1vcmUgZmlsZXMKKworICAgQ29tbWFuZCBsaW5lIG9wdGlvbnM6CisKKyAgWSAg ICAtIHNraXAgZXhlY3V0aW5nIHRoZSBpbml0IGZpbGUKKyAgUSAgICAtIHVzZSBmYXN0IGZpbGUg dHJhbnNmZXIgc2V0dGluZ3MgKGRlZmF1bHQgaW4gOC4wKQorICBsIDAgIC0gdHJhbnNmZXIgZmls ZXMgdXNpbmcgZmlsZSBkZXNjcmlwdG9yIDAgZm9yIGEgc2VyaWFsIGNvbm5lY3Rpb24KKyAgRiAw ICAtIHRyYW5zZmVyIGZpbGVzIHVzaW5nIGZpbGUgZGVzY3JpcHRvciAwIGZvciBhIFRlbG5ldCBj b25uZWN0aW9uCisgIHEgICAgLSBxdWlldCAtIG5vIG1lc3NhZ2VzCisgIHIgICAgLSByZWNlaXZl CisgIHMgICAgLSBzZW5kCisKKzExLjIuIElOVk9LSU5HIEVYVEVSTkFMIFBST1RPQ09MUyBGUk9N IEMtS0VSTUlUCisKKyAgIFsgWzU5OV1Ub3AgXSBbIFs2MDBdQ29udGVudHMgXSBbIFs2MDFdU2Vj dGlvbiBDb250ZW50cyBdIFsKKyAgIFs2MDJdUHJldmlvdXMgXQorCisgICAgIChUaGlzIHNlY3Rp b24gaXMgb2Jzb2xldGUsIGJ1dCBub3QgdG90YWxseSB1c2VsZXNzLiBTZWUgQ2hhcHRlciAxNAor ICAgICBvZiBbNjAzXVVzaW5nIEMtS2VybWl0LCAybmQgRWRpdGlvbikuCisKKyAgIEFmdGVyIHlv dSBoYXZlIG9wZW5lZCBhIGNvbW11bmljYXRpb24gbGluayB3aXRoIEMtS2VybWl0J3MgU0VUIExJ TkUKKyAgIChTRVQgUE9SVCkgb3IgU0VUIEhPU1QgKFRFTE5FVCkgY29tbWFuZCwgQy1LZXJtaXQg bWFrZXMgaXRzIGZpbGUKKyAgIGRlc2NyaXB0b3IgYXZhaWxhYmxlIHRvIHlvdSBpbiB0aGUgXHYo dHR5ZmQpIHZhcmlhYmxlIHNvIHlvdSBjYW4gcGFzcworICAgaXQgYWxvbmcgdG8gb3RoZXIgcHJv Z3JhbXMgdGhhdCB5b3UgUlVOIGZyb20gQy1LZXJtaXQuIEhlcmUsIGZvcgorICAgZXhhbXBsZSwg Qy1LZXJtaXQgcnVucyBpdHNlbGYgYXMgYW4gZXh0ZXJuYWwgcHJvdG9jb2w6CisKKyAgQy1LZXJt aXQ+c2V0IG1vZGVtIHR5cGUgaGF5ZXMKKyAgQy1LZXJtaXQ+c2V0IGxpbmUgL2Rldi9hY3UKKyAg Qy1LZXJtaXQ+c2V0IHNwZWVkIDI0MDAKKyAgQy1LZXJtaXQ+ZGlhbCA3NjU0MzIxCisgICBDYWxs IGNvbXBsZXRlLgorICBDLUtlcm1pdD5lY2hvIFx2KHR0eWZkKQorICAgMworICBDLUtlcm1pdD5y dW4ga2VybWl0IC1sIFx2KHR0eWZkKQorCisgICBPdGhlciBwcm9ncmFtcyB0aGF0IGFjY2VwdCBv cGVuIGZpbGUgZGVzY3JpcHRvcnMgb24gdGhlIGNvbW1hbmQgbGluZQorICAgY2FuIGJlIHN0YXJ0 ZWQgaW4gdGhlIHNhbWUgd2F5LgorCisgICBZb3UgY2FuIGFsc28gdXNlIHlvdXIgc2hlbGwncyBp L28gcmVkaXJlY3Rpb24gZmFjaWxpdGllcyB0byBhc3NpZ24KKyAgIEMtS2VybWl0J3Mgb3BlbiBm aWxlIGRlc2NyaXB0b3IgKHR0eWZkKSB0byBzdGRpbiBvciBzdGRvdXQuIEZvcgorICAgZXhhbXBs ZSwgb2xkIHZlcnNpb25zIG9mIHRoZSBVbml4IFpNT0RFTSBwcm9ncmFtcywgc3ogYW5kIHJ6LCB3 aGVuCisgICBpbnZva2VkIGFzIGV4dGVybmFsIHByb3RvY29scywgZXhwZWN0IHRvIGZpbmQgdGhl IGNvbW11bmljYXRpb24gZGV2aWNlCisgICBhc3NpZ25lZCB0byBzdGRpbiBhbmQgc3Rkb3V0IHdp dGggbm8gb3B0aW9uIGZvciBzcGVjaWZ5aW5nIGFueSBvdGhlcgorICAgZmlsZSBkZXNjcmlwdG9y IG9uIHRoZSBzeiBvciByeiBjb21tYW5kIGxpbmUuIEhvd2V2ZXIsIHlvdSBjYW4gc3RpbGwKKyAg IGludm9rZSBzeiBhbmQgcnogYXMgZXh0ZXJpb3IgcHJvdG9jb2xzIGZyb20gQy1LZXJtaXQgaWYg eW91ciBjdXJyZW50CisgICBzaGVsbCAoJFNIRUxMIHZhcmlhYmxlKSBpcyBrc2ggKHRoZSBLb3Ju IHNoZWxsKSBvciBiYXNoICh0aGUKKyAgIEJvdXJuZS1BZ2FpbiBzaGVsbCksIHdoaWNoIGFsbG93 cyBhc3NpZ25tZW50IG9mIGFyYml0cmFyeSBmaWxlCisgICBkZXNjcmlwdG9ycyB0byBzdGRpbiBh bmQgc3Rkb3V0OgorCisgIEMtS2VybWl0PiBydW4gcnogPCZcdih0dHlmZCkgPiZcdih0dHlmZCkK KworICAgb3I6CisKKyAgQy1LZXJtaXQ+IHJ1biBzeiBvb2ZhLnppcCA8Jlx2KHR0eWZkKSA+Jlx2 KHR0eWZkKQorCisgICBJbiB2ZXJzaW9uIDVBKDE5MCkgYW5kIGxhdGVyLCB5b3UgY2FuIHVzZSBD LUtlcm1pdCdzIFJFRElSRUNUIGNvbW1hbmQsCisgICBpZiBpdCBpcyBhdmFpbGFibGUgaW4geW91 ciB2ZXJzaW9uIG9mIEMtS2VybWl0LCB0byBhY2NvbXBsaXNoIHRoZSBzYW1lCisgICB0aGluZyB3 aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIHNoZWxsOgorCisgIEMtS2VybWl0PiByZWRpcmVjdCBy egorCisgICBvcjoKKworICBDLUtlcm1pdD4gcmVkaXJlY3Qgc3ogb29mYS56aXAKKworICAgQSBj b21wbGV0ZSBzZXQgb2Ygcnosc3oscmIsc2Iscngsc3ggbWFjcm9zIGZvciBVbml4IEMtS2VybWl0 IGlzIGRlZmluZWQKKyAgIGluIHRoZSBmaWxlIGNrdXJ6c3ouaW5pLiBJdCBhdXRvbWF0aWNhbGx5 IGNob29zZXMgdGhlIGJlc3QgcmVkaXJlY3Rpb24KKyAgIG1ldGhvZCAoYnV0IGlzIHJlZHVuZGFu dCBzaW5jZSBDLUtlcm1pdCA2LjAsIHdoaWNoIG5vdyBoYXMgYnVpbHQtaW4KKyAgIHN1cHBvcnQg Zm9yIGV4dGVybmFsIHByb3RvY29scyB2aWEgaXRzIFNFVCBQUk9UT0NPTCBjb21tYW5kKS4KKwor ICAgTm90ZSB0aGF0IGV4dGVybmFsIHByb3RvY29scyBjYW4gYmUgdXNlZCBvbiBDLUtlcm1pdCBT RVQgTElORSBvciBTRVQKKyAgIEhPU1QgY29ubmVjdGlvbnMgb25seSBpZiB0aGV5IG9wZXJhdGUg dGhyb3VnaCBzdGFuZGFyZCBpbnB1dCBhbmQKKyAgIHN0YW5kYXJkIG91dHB1dC4gSWYgdGhleSBv cGVuIHRoZWlyIG93biBjb25uZWN0aW9ucywgS2VybWl0IGNhbid0CisgICByZWRpcmVjdCB0aGVt IG92ZXIgaXRzIG93biBjb25uZWN0aW9uLgorCisxMi4gU0VDVVJJVFkKKworICAgWyBbNjA0XVRv cCBdIFsgWzYwNV1Db250ZW50cyBdIFsgWzYwNl1OZXh0IF0gWyBbNjA3XVByZXZpb3VzIF0KKwor ICAgQXMgb2YgdmVyc2lvbiA3LjAsIEMtS2VybWl0IHN1cHBvcnRzIGEgd2lkZSByYW5nZSBvZiBz ZWN1cml0eSBvcHRpb25zCisgICBmb3IgYXV0aGVudGljYXRpb24gYW5kIGVuY3J5cHRpb246IEtl cmJlcm9zIDQsIEtlcmJlcm9zIDUgLyBHU1NBUEksCisgICBTU0wvVExTLCBhbmQgU1JQLiBTZWUg dGhlIHNlcGFyYXRlIFs2MDhdc2VjdXJpdHkgZG9jdW1lbnQgZm9yIGRldGFpbHMuCisKKzEzLiBN SVNDRUxMQU5FT1VTIFVTRVIgUkVQT1JUUworCisgICBbIFs2MDldVG9wIF0gWyBbNjEwXUNvbnRl bnRzIF0gWyBbNjExXU5leHQgXSBbIFs2MTJdUHJldmlvdXMgXQorCitEYXRlOiBUaHUsIDEyIE1h ciA5MiAxOjU5OjI1IE1FWgorRnJvbTogV2FsdGVyIE1lY2t5IDx3YWx0ZXJAcmVudC1hLWd1cnUu ZGU+CitTdWJqZWN0OiBIZWxwLlVuaXguc3cKK1RvOiBzdnI0QHBjc2JzdC5wY3MuY29tLCBzb3Vy Y2VAdXNsLmNvbQorCitQUk9EVUNUOiAgICAgICAgVW5peAorUkVMRUFTRTogICAgICAgIERlbGwg U1ZSNCBWMi4xIChpcyBVU0wgVjMuMCkKK01BQ0hJTkU6ICAgICAgICBBVC0zODYKK1BBVEhOQU1F OiAgICAgICAvdXNyL2xpYi9saWJjLnNvLjEKKyAgICAgICAgICAgICAgICAvdXNyL2Njcy9saWIv bGliYy5hCitBQlNUUkFDVDogICAgICAgRnVuY3Rpb24gdHR5bmFtZSgpIGRvZXMgbm90IGNsb3Nl IGl0cyBmaWxlIGRlc2NyaXB0b3IKK0RFU0NSSVBUSU9OOgorICAgICAgICB0dHluYW1lKDNDKSBv cGVucyAvZGV2IGJ1dCBuZXZlciBjbG9zZXMgaXQuIFNvIGlmIGl0IGlzIGNhbGxlZAorICAgICAg ICBvZnRlbiBlbm91Z2ggdGhlIG9wZW4oMikgaW4gdHR5bmFtZSgpIGZhaWxzLiBCZWNhdXNlIHRo ZSBicm9rZW4KKyAgICAgICAgdHR5bmFtZSgpIGlzIGluIHRoZSBzaGFyZWQgbGliIHRvbyBhbGwg cHJvZ3JhbXMgdXNpbmcgaXQgY2FuCisgICAgICAgIGZhaWwgaWYgdGhleSBjYWxsIGl0IG9mdGVu IGVub3VnaC4gT25lIGltcG9ydGFudCBwcm9ncmFtIGlzCisgICAgICAgIHV1Y2ljbyB3aGljaCBj YWxscyB0dHluYW1lIGZvciBldmVyeSBmaWxlIGl0IHRyYW5zZmVycy4KKworCisgICBIZXJlIGlz IGEgbGl0dGxlIHRlc3QgcHJvZ3JhbSBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIGJ1ZzoKKworI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CittYWluKCkgeworICAgIGludCBp ID0gMDsKKyAgICB3aGlsZSAodHR5bmFtZSgwKSAhPSBOVUxMKQorICAgICAgaSsrOworICAgIHBl cnJvcigidHR5bmFtZSIpOworICAgIHByaW50ZigiaT0lZFxuIiwgaSk7Cit9CisKKyAgIElmIHRo aXMgcHJvZ3JhbSBydW5zIGxvbmdlciB0aGFuIHNvbWUgc2Vjb25kcyB5b3UgZG9uJ3QgaGF2ZSB0 aGUgYnVnLgorCisgICBXT1JLQVJPVU5EOiBOb25lIEZJWDogVmVyeSBlYXN5IGlmIHlvdSBoYXZl IHNvdXJjZSBjb2RlLgorCisgICBBbm90aGVyIHVzZXIgcmVwb3J0cyBzb21lIG1vcmUgZXhwbGlj aXQgc3ltcHRvbXMgYW5kIHJlY292ZXJpZXM6CisKKz4gV2hhdCBoYXBwZW5zIGlzIHdoZW4gaW52 b2tpbmcgY2tlcm1pdCB3ZSBnZXQgb25lIG9mIHRoZSBmb2xsb3dpbmcKKz4gZXJyb3IgbWVzc2Fn ZXM6Cis+ICAgWW91IG11c3Qgc2V0IGxpbmUKKz4gICBOb3QgYSB0dHkKKz4gICBObyBtb3JlIHBy b2Nlc3Nlcy4KKz4gT25lIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgYWN0aW9ucyBjbGVhcnMgdGhl IHByb2JsZW06Cis+ICAgc2h1dGRvd24gLXkgLWcwIC1pNgorPiAgIGtpbGwgLTkgdGhlIHR0eW1v biB3aXRoIHRoZSBoaWdoZXN0IFBJRAorPiAgIEludm9rZSBzeXNhZG0gYW5kIGRpc2FibGUgdGhl biBlbmFibGUgdGhlIGxpbmUgeW91IHdhbnQgdG8gdXNlLgorPiBUdXJuaW5nIG9mZiByZXNwYXdu IG9mIHNhYyAtdCAzMDAgYW5kIGdvaW5nIHRvIGdldHR5J3MgYW5kIHV1Z2V0dHkncworPiBkb2Vz IG5vdCBoZWxwLgorPgorPiBBbHNvIEMtS2VybWl0IHJlcG9ydHMgIj90aW1lZCBvdXQgY2xvc2lu ZyAvZGV2L3R0eXh4Ii4KKz4gSWYgdGhpcyBoYXBwZW5zIGFsbCBpcyB3ZWxsLgorCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgKE5vdGU6IHRoZSBmb2xsb3dpbmcgcHJvYmxl bSBhbHNvIG9jY3VycyBvbiBTR0kgYW5kIHByb2JhYmx5IG1hbnkgb3RoZXIKKyAgIFVuaXggc3lz dGVtcyk6CisKKyAgIEZyb206IEphbWVzIFNwYXRoIDxzcGF0aEBqaHVuaXguaGNmLmpodS5lZHU+ CisgICBUbzogSW5mby1LZXJtaXQtUmVxdWVzdEBjdW5peGYuY2MuY29sdW1iaWEuZWR1CisgICBE YXRlOiBXZWQsIDkgU2VwIDE5OTIgMjA6MjA6MjggLTA0MDAKKyAgIFN1YmplY3Q6IEMtS2VybWl0 IHZzIHV1Z2V0dHkgKG9yIGluaXQpIG9uIFNwZXJyeSA1MDAwCisKKyAgIFdlIGhhdmUgc3VjY2Vz c2Z1bGx5IGNvbXBpbGVkIHRoZSBhYm92ZSByZWxlYXNlIG9uIGEgVW5pc3lzL1NwZXJyeQorICAg NTAwMC85NS4gV2UgdXNlZCB0aGUgc3lzNXIzIG9wdGlvbiwgcmF0aGVyIHRoYW4gc3lzNXIyIHNp bmNlIHdlIGhhdmUKKyAgIFZSMyBydW5uaW5nIG9uIG91ciBzeXN0ZW0uIEluIG9yZGVyIHRvIGFs bG93IGRpYWxvdXQgYWNjZXNzIHRvCisgICBub24tc3VwZXJ1c2Vycywgd2UgaGFkIHRvIGRvICJj aG1vZCA2NjYgL2Rldi90dHkjIyMsIHdoZXJlIGl0IGhhZCBiZWVuCisgICAtcnctLXctLXctIChv d25lZCBieSB1dWNwKSwgYW5kIHRvIGRvICJjaG1vZCArdyAvdXNyL3Nwb29sL2xvY2tzIi4gV2UK KyAgIGhhdmUgZG9uZSB0ZXh0IGFuZCBiaW5hcnkgZmlsZSB0cmFuc2ZlcnMgdGhyb3VnaCBsb2Nh bCBhbmQgcmVtb3RlCisgICBjb25uZWN0aW9ucy4KKworICAgVGhlIHByb2JsZW0gY29uY2Vybmlu ZyB1dWNwIG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMgaXMgd29yc2UgdGhhbiBJCisgICB0aG91 Z2h0IGF0IGZpcnN0LiBBcHBhcmVudGx5IGluaXQgb3IgdXVnZXR0eSBjaGFuZ2VzIHRoZSBmaWxl CisgICBwZXJtaXNzaW9ucyBhZnRlciBlYWNoIHNlc3Npb24uIFNvIEkgd3JvdGUgdGhlIGZvbGxv d2luZyBDIHByb2dyYW0gdG8KKyAgIG9wZW4gYSBzZXQgb2YgcmVxdWVzdGVkIHR0eSBsaW5lcy4g SSBydW4gdGhpcyBmb3IgYW55IHJlcXVpcmVkIG91dGdvaW5nCisgICBsaW5lIHByaW9yIHRvIGEg S2VybWl0IHNlc3Npb24uCisKKyAgIC0tLS0tLSBjdXQgaGVyZSAtLS0tLS0tCisvKiBvcGVudHR5 LmMgLS0gZm9yY2UgYWxsb3cgcmVhZCBvbiB0dHkgbGluZXMgZm9yIG1vZGVtIGkvbyAqLworLyog aWRlYSBmcm9tOiByZXN0cmljdC5jIC0tIFN5c3RlbSA1IEFkbWluIGJvb2sgVGhvbWFzL0ZhcnJv dyBwLiA2MDUgKi8KKy8qIC9qZXMgamltIHNwYXRoIHtzcGF0aEBqaHVuaXguaGNqLmpodS5lZHUg fSAqLworLyogMDgtU2VwLTkyIE5PIENPUFlSSUdIVC4gKi8KKy8qIHRoaXMgbXVzdCBiZSBzdWlk IHRvIG9wZW4gb3RoZXIgdHR5IGxpbmVzICovCisKKy8qICNkZWZpbmUgREVCVUcgKi8KKyNkZWZp bmUgVFRZICIvZGV2L3R0eSIKKyNkZWZpbmUgTE9LICIvdXNyL3Nwb29sL2xvY2tzL0xDSy4udHR5 IgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qIGFsbG93YWJsZSBsaW5lczogKi8KKyNkZWZpbmUg VE9UQUxfTElORVMgMworc3RhdGljIGNoYXIgYWxsb3dhYmxlW1RPVEFMX0xJTkVTXVs0XSA9IHsg IjIwMCIsICIyMDEiLCAiMzAwIiB9Oworc3RhdGljIGludCB0b3RhbD1UT1RBTF9MSU5FUzsKK2lu dCBhbGxvdzsKKworLyogc3RhdGVzOiAqLworI2RlZmluZSBUVFlfVU5ERUYgMAorI2RlZmluZSBU VFlfTE9DSyAgMQorI2RlZmluZSBUVFlfT0tBWSAgMgorCittYWluKGFyZ2MsIGFyZ3YpCitpbnQg YXJnYzsgY2hhciAqYXJndltdOyB7CisgICAgY2hhciBkZXZpY2VbNTEyXTsKKyAgICBjaGFyIGxv Y2tkZXZbNTEyXTsKKyAgICBpbnQgaTsKKyAgICBpZiAoYXJnYyA9PSAxKSB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCAidXNhZ2U6IG9wZW4gMjAwIFsuLi5dXG4iKTsKKyAgICB9CisgICAgd2hp bGUgKC0tYXJnYyA+IDAgJiYgKCorK2FyZ3YpICE9IE5VTEwgKSB7CisjaWZkZWYgREVCVUcKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICJUUllJTkc6ICVzJXNcbiIsIFRUWSwgKmFyZ3YpOworI2Vu ZGlmCisgICAgICAgIHNwcmludGYoZGV2aWNlLCAiJXMlcyIsIFRUWSwgKmFyZ3YpOworICAgICAg ICBzcHJpbnRmKGxvY2tkZXYsICIlcyVzIiwgTE9LLCAqYXJndik7CisgICAgICAgIGFsbG93ID0g VFRZX1VOREVGOyBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPD0gdG90YWwpIHsgLyogbG9vayBh dCBhbGwgZGVmaW5lZCBsaW5lcyAqLworI2lmZGVmIERFQlVHCisgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIkxPQ0tGSUxFPyAlcz9cbiIsIGxvY2tkZXYpOworI2VuZGlmCisgICAgICAgICAg ICBpZiAoYWNjZXNzKGxvY2tkZXYsIDAwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgYWxsb3c9 VFRZX0xPQ0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjaWZkZWYg REVCVUcKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRE9FUzolcz09JXM/XG4iLCBhbGxv d2FibGVbaV0sICphcmd2KTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKHN0cmNtcChhbGxvd2Fi bGVbaV0sICphcmd2KSA9PSAwKQorICAgICAgICAgICAgICBhbGxvdz1UVFlfT0tBWTsKKyAgICAg ICAgICAgIGkrKzsKKyAgICAgICAgfQorI2lmZGVmIERFQlVHCisgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiYWxsb3c9JWRcbiIsIGFsbG93KTsKKyNlbmRpZgorICAgICAgICBzd2l0Y2ggKGFsbG93 KSB7CisgICAgICAgICAgY2FzZSBUVFlfVU5ERUY6CisgICAgICAgICAgICBmcHJpbnRmIChzdGRl cnIsICJvcGVuOiBub3QgYWxsb3dlZCBvbiAlc1xuIiwgKmFyZ3YpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBUVFlfTE9DSzoKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVy ciwgIm9wZW46IGRldmljZSBsb2NrZWQ6ICVzXG4iLCBsb2NrZGV2KTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgVFRZX09LQVk6CisgICAgICAgICAgICAvKiBhdHRlbXB0IHRv IGNoYW5nZSBtb2RlIG9uIGRldmljZSAqLworICAgICAgICAgICAgaWYgKGNobW9kIChkZXZpY2Us IDAwNjY2KSA8IDApCisgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIm9wZW46IGNhbm5v dCBjaG1vZCBvbiAlc1xuIiwgZGV2aWNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJvcGVuOiBGQVVMVFxuIik7 CisgICAgICAgIH0KKyAgICB9CisgICAgZXhpdCAoMCk7Cit9CisKKzE0LiBUSElSRC1QQVJUWSBE UklWRVJTCisKKyAgIFsgWzYxM11Ub3AgXSBbIFs2MTRdQ29udGVudHMgXSBbIFs2MTVdTmV4dCBd IFsgWzYxNl1QcmV2aW91cyBdCisKKyAgIFVuaXggdmVyc2lvbnMsIGVzcGVjaWFsbHkgdGhvc2Ug Zm9yIFBDcyAoU0NPLCBVbml4d2FyZSwgZXRjKSBtaWdodCBiZQorICAgYXVnbWVudGVkIGJ5IHRo aXJkLXBhcnR5IGNvbW11bmljYXRpb24tYm9hcmQgZHJpdmVycyBmcm9tIERpZ2lib2FyZCwKKyAg IFN0YWxsaW9uLCBldGMuIFRoZXNlIGNhbiBzb21ldGltZXMgY29tcGxpY2F0ZSBtYXR0ZXJzIGZv ciBLZXJtaXQKKyAgIGNvbnNpZGVyYWJseSBzaW5jZSBLZXJtaXQgaGFzIG5vIHdheSBvZiBrbm93 aW5nIHRoYXQgaXQgaXMgZ29pbmcKKyAgIHRocm91Z2ggYSBwb3NzaWJseSBub25zdGFuZGFyZCBk cml2ZXIuIFZhcmlvdXMgZXhhbXBsZXMgYXJlIGxpc3RlZCBpbgorICAgdGhlIGVhcmxpZXIgc2Vj dGlvbnMgb2YgdGhpcyBkb2N1bWVudDsgc2VhcmNoIGZvciBTdGFsbGlvbiwgRGlnaWJvYXJkLAor ICAgZXRjLiBBZGRpdGlvbmFsbHk6CisKKyAgICAgKiBUaGUgU3RhbGxpb24gVGVjaG5vbG9naWVz IEVhc3lDb25uZWN0aW9uIHNlcmlhbCBib2FyZCBkcml2ZXIgZG9lcworICAgICAgIG5vdCBhbHdh eXMgcmVwb3J0IHRoZSBzdGF0ZSBvZiBEU1IgYXMgbG93LiBGcm9tIFN0YWxsaW9uIChPY3RvYmVy CisgICAgICAgMTk5Nyk6ICJVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIGEgYnVnIGluIG91ciBkcml2 ZXIuIFdlIGhhdmUKKyAgICAgICBpbXBsZW1lbnRlZCBhbGwgb2YgdGhlIG90aGVyIFRJT01DIGZ1 bmN0aW9ucywgZWcgRFRSLCBEQ0QsIFJUUyBhbmQKKyAgICAgICBDVFMsIGJ1dCBub3QgRFNSLiBP dXIgZHJpdmVyIHNob3VsZCByZXBvcnQgdGhlIGFjdHVhbCBzdGF0ZSBvZiBEU1IKKyAgICAgICBv biB0aG9zZSBvZiBvdXIgY2FyZHMgdGhhdCBoYXZlIGEgRFNSIHNpZ25hbC4gVGhhdCB0aGUgZHJp dmVyCisgICAgICAgYWx3YXlzIHJlcG9ydHMgRFNSIGFzIG5vdCBhc3NlcnRlZCAoMCksIGlzIGEg YnVnIGluIHRoZSBkcml2ZXIuIFRoZQorICAgICAgIGRyaXZlciBzaG91bGQgYmUgZWl0aGVyIHJl cG9ydGluZyB0aGUgc3RhdGUgb2YgRFNSIGNvcnJlY3RseSBvbgorICAgICAgIHRob3NlIGNhcmRz IHRoYXQgc3VwcG9ydCBEU1Igb3IgYXMgYWx3YXlzIGFzc2VydGVkICgxKSBvbiB0aG9zZQorICAg ICAgIGNhcmRzIHRoYXQgZG8gbm90IGhhdmUgYSBEU1Igc2lnbmFsLiBUaGlzIHdpbGwgYmUgZml4 ZWQgaW4gYSBmdXR1cmUKKyAgICAgICB2ZXJzaW9uIG9mIG91ciBkcml2ZXJzOyBhdCB0aGlzIHRp bWUgSSBjYW5ub3Qgc2F5IHdoZW4gdGhpcyB3aWxsCisgICAgICAgYmUuIiBBbmQgbGF0ZXIsICJB cyBmYXIgYXMgSSBjYW4gdGVsbCwgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUKKyAgICAgICB0ZXJtaW9z L3Rlcm1pb3ggaW9jdGxzIHRoYXQgcmVsYXRlIHNwZWNpZmljYWxseSB0byBEU1IgYW5kIFJJOyBh bGwKKyAgICAgICB0aGUgcmVzdCBhcmUgc3VwcG9ydGVkLiBUaGlzIHdpbGwsIGFzIEkgbWVudGlv bmVkIGVhcmxpZXIsIGJlIGZpeGVkCisgICAgICAgaW4gdGhlIG5leHQgcmVsZWFzZSBvZiBvdXIg QVRBIHNvZnR3YXJlLiIKKyAgICAgICAtIFdvcmxkIFdpZGUgRXNjYWxhdGlvbiBTdXBwb3J0LCBT dGFsbGlvbiBUZWNobm9sb2dpZXMsIFRvb3dvbmcKKyAgICAgICBRTEQsIFs2MTddc3VwcG9ydEBz dGFsbGlvbi5vei5hdS4KKworICAgTGF0ZXIgKERlY2VtYmVyIDE5OTcsIGZyb20gdGhlIHNhbWUg c291cmNlKToKKworICAgICAqIFdlIGhhdmUgbm93IHJlbGVhc2VkIGEgbmV3IHZlcnNpb24gb2Yg dGhlIEFUQSBzb2Z0d2FyZSwgdmVyc2lvbgorICAgICAgIDUuNC4wLiBUaGlzIHZlcnNpb24gZml4 ZXMgdGhlIHByb2JsZW0gd2l0aCB0aGUgc3RhdGVzIG9mIHRoZSBEU1IKKyAgICAgICBhbmQgUkkg c2lnbmFscyBhbmQgaG93IHRoZXkgd2VyZSBiZWluZyByZXBvcnRlZCBieSB0aGUgZHJpdmVyLiBU aGlzCisgICAgICAgaXMgdGhlIHByb2JsZW0gdGhhdCB5b3UgcmVwb3J0ZWQgaW4gT2N0b2Jlci4g VGhlIERTUiBzaWduYWwgaXMKKyAgICAgICByZXBvcnRlZCBjb3JyZWN0bHkgb24gdGhvc2UgY2Fy ZHMgdGhhdCBzdXBwb3J0IHRoZSBEU1Igc2lnbmFsLCBzdWNoCisgICAgICAgYXMgdGhlIGVhcmx5 IHJldmlzaW9uIG9mIHRoZSBFYXN5SU8gY2FyZCBhbmQgdGhlIEVhc3lDb25uZWN0aW9uIDhENAor ICAgICAgIHBhbmVsLCBhbmQgYXMgYWx3YXlzIGFzc2VydGVkIG9uIHRob3NlIGNhcmRzIHRoYXQg ZG8gbm90IHN1cHBvcnQKKyAgICAgICB0aGUgRFNSIHNpZ25hbCBpbiB0aGUgaGFyZHdhcmUuIFRo ZSBuZXcgZHJpdmVyIGlzIGF2YWlsYWJsZSBmcm9tCisgICAgICAgb3VyIFdlYiBzaXRlLCBbNjE4 XXd3dy5zdGFsbGlvbi5jb20sIGluIHRoZSAvZHJpdmVycy9hdGE1L1VuaXhXYXJlCisgICAgICAg ZGlyZWN0b3J5LgorCisgICBbIFs2MTldVG9wIF0gWyBbNjIwXUNvbnRlbnRzIF0gWyBbNjIxXUMt S2VybWl0IEhvbWUgXSBbIFs2MjJdQy1LZXJtaXQKKyAgIDguMCBPdmVydmlldyBdIFsgWzYyM11L ZXJtaXQgSG9tZSBdCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisgICAgIEMtS2VybWl0IDguMCBVbml4IEhp bnRzIGFuZCBUaXBzIC8gWzYyNF1UaGUgS2VybWl0IFByb2plY3QgLworICAgWzYyNV1Db2x1bWJp YSBVbml2ZXJzaXR5IC8gWzYyNl1rZXJtaXRAY29sdW1iaWEuZWR1CisKK1JlZmVyZW5jZXMKKwor ICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCisgICAyLiBtYWlsdG86a2VybWl0QGNvbHVt YmlhLmVkdQorICAgMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwK KyAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAorICAgNS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICAgNi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCisgICA3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1sCisgICA4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAorICAgOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2ZhcS5odG1sCisgIDEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3Vw cG9ydC5odG1sCisgIDExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgIDEyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KKyAgMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbAorICAxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZGFpbHkuaHRtbAorICAxNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZGFpbHku aHRtbAorICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZGFpbHkuaHRtbAor ICAxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICAxOC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCisgIDE5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbAorICAyMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxCisgIDIxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDIKKyAgMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworICAyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3g0CisgIDI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDUKKyAgMjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4NgorICAyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3g3CisgIDI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDgKKyAgMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 OQorICAyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMAor ICAzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMQorICAz MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMgorICAzMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMworICAzMy4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxNAorICAzNC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMKKyAgMzUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xOAorICAzNi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE5CisgIDM3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQorICAzOC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAgMzkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43CisgIDQwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNgorICA0MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorICA0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgIDQzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDIKKyAgNDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4MS4xCisgIDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDEuMgorICA0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gxLjMKKyAgNDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4MS40CisgIDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMworICA0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzLjEKKyAgNTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4yCisgIDUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuNworICA1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5o dG1sCisgIDUzLiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1CisgIDU0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgIDU1LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAgNTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MS4yCisgIDU3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisgIDU4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwKKyAgNTkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbAorICA2MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sCisgIDYxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgIDYyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAgNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4MQorICA2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gxLjMKKyAgNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN4MS4xCisgIDY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv c3VwcG9ydC5odG1sCisgIDY3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjdG9wCisgIDY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjY29udGVudHMKKyAgNjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4MQorICA3MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gxLjQKKyAgNzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 MS4yCisgIDcyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9w CisgIDczLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVu dHMKKyAgNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MQor ICA3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxLjMKKyAg NzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAgNzcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworICA3 OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgIDc5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEKKyAgODAuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAgODEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworICA4Mi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g0CisgIDgzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDIKKyAgODQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCisgIDg1LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQorICA4Ni4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAgODcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCisgIDg4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNAorICA4OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjUKKyAgOTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My42CisgIDkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuNworICA5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjgKKyAgOTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN4My45CisgIDk0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMTAKKyAgOTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4xMQorICA5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gzLjEyCisgIDk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMTMKKyAgOTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4My4xNAorICA5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjE1CisgMTAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDMuMTYKKyAxMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4xNworIDEwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3gzLjE4CisgMTAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMTkKKyAxMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4yMAorIDEwNS4gaHR0cDovL3d3dy5mYXFzLm9yZy8KKyAxMDYuIGh0dHA6Ly9hcGxhd3JlbmNl LmNvbS9Vbml4YXJ0L25ld3RvdW5peC5odG1sCisgMTA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyAxMDguIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1 bWJpYS5lZHUKKyAxMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0 bWwKKyAxMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AK KyAxMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50 cworIDExMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisg MTEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQorIDEx NC4gaHR0cDovL3d3dy5wY3VuaXguY29tLworIDExNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuMQorIDExNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuMgorIDExNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuMworIDExOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuNAorIDExOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuNQorIDEyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuNgorIDEyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDEyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMAorIDEyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjAuMgorIDEyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3RvcAorIDEyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMAorIDEyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjAuMworIDEyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjAuMQorIDEzMC4gaHR0cDovL3d3dy5saW5tb2RlbXMub3JnLworIDEz MS4gaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2h3ZGV2L3BsYXRmb3JtL1BDZGVzaWduL0xSL2Rl ZmF1bHQuYXNwCisgMTMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjdG9wCisgMTMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj Y29udGVudHMKKyAxMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4My4wCisgMTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMC40CisgMTM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMC4yCisgMTM3LiBodHRwOi8vd3d3LmlkaXIubmV0L35ncm9taXRrYy93aW5tb2RlbS5odG1s CisgMTM4LiBodHRwOi8vd3d3LmRpZ2kuY29tLworIDEzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDE0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMAorIDE0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuNQorIDE0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjAuMworIDE0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDE0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMTQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMAorIDE0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjAuNgorIDE0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjAuNAorIDE0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3RvcAorIDE1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMAorIDE1Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjAuNQorIDE1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3RvcAorIDE1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI2NvbnRlbnRzCisgMTU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMKKyAxNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4yCisgMTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMAorIDE1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjEuMQorIDE1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjEuMgorIDE2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjEuMworIDE2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjEuNAorIDE2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzLjEuNQorIDE2My4gaHR0cDovL3d3dy5lbWVyc29uLmVtb3J5LmVkdS9zZXJ2aWNlcy9h aXgtZmFxLworIDE2NC4gaHR0cDovL3d3dy5mYXFzLm9yZy9mYXFzL2J5LW5ld3Nncm91cC9jb21w L2NvbXAudW5peC5haXguaHRtbAorIDE2NS4gaHR0cDovL3d3dy5jaXMub2hpby1zdGF0ZS5lZHUv aHlwZXJ0ZXh0L2ZhcS91c2VuZXQvYWl4LWZhcS90b3AuaHRtbAorIDE2Ni4gaHR0cDovL2FpeHBk c2xpYi5zZWFzLnVjbGEuZWR1LworIDE2Ny4gaHR0cDovL3d3dy5yb290dmcubmV0KEFJWGhpc3Rv cnkpLworIDE2OC4gZnRwOi8vcnRmbS5taXQuZWR1L3B1Yi91c2VuZXQvbmV3cy5hbnN3ZXJzL2Fp eC1mYXEvcGFydDEKKyAxNjkuIGZ0cDovL21pcnJvcnMuYW9sLmNvbS9wdWIvcnRmbS91c2VuZXQt YnktaGllcmFyY2h5L2NvbXAvdW5peC9haXgKKyAxNzAuIG5ld3M6Y29tcC51bml4LmFpeAorIDE3 MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDE3Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMTcz LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQorIDE3NC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMgorIDE3NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDE3Ni4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMTc3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQorIDE3OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMworIDE3OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMQorIDE4MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwjc2VydmVycworIDE4MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDE4Mi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMTgzLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMQorIDE4NC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuNAorIDE4NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEuMgorIDE4Ni4gaHR0 cDovL3NlcnZpY2Uuc29mdHdhcmUuaWJtLmNvbS9yczYwMDAvCisgMTg3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTg4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxODkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCisgMTkwLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMS41CisgMTkxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMS4zCisgMTkyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTkzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxOTQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xCisgMTk1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMS40CisgMTk2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMTk3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAxOTguIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDE5OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3gzLjMKKyAyMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4My4xCisgMjAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMi4wCisgMjAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMi4xCisgMjAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMi4yCisgMjA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMi4zCisgMjA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMi40CisgMjA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMi41CisgMjA3LiBuZXdzOmNvbXAuc3lzLmhwLmhwdXgKKyAyMDgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyMDkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDIxMC4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAyMTEuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjEKKyAyMTIuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyMTMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDIxNC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAyMTUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjIKKyAyMTYuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjAKKyAyMTcuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvbWFrZWZpbGUKKyAyMTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyMTkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDIyMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAyMjEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjMKKyAyMjIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjEKKyAyMjMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyMjQuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDIyNS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIKKyAyMjYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQKKyAyMjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjIKKyAyMjguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuMQorIDIyOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC4yCisgMjMwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjMKKyAyMzEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjQuNAorIDIzMi4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC41CisgMjMzLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMjM0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAyMzUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCisgMjM2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjIKKyAyMzcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yLjIKKyAyMzguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyMzkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDI0MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAorIDI0MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC4zCisgMjQyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjEKKyAyNDMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyNDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDI0NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAorIDI0Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC40CisgMjQ3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjIKKyAyNDguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyNDkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDI1MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAorIDI1MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC41CisgMjUyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40LjMKKyAyNTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAyNTQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDI1NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNAorIDI1Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIuNC40CisgMjU3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMjU4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAyNTku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCisgMjYwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMi40CisgMjYxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMjYyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAyNjMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDI2NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjQKKyAyNjUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4yCisgMjY2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4xCisgMjY3LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4yCisgMjY4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4zCisgMjY5LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy40CisgMjcwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy41CisgMjcxLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy42CisgMjcyLiBodHRwOi8vZW4u d2lraXBlZGlhLm9yZy93aWtpL0F2YWhpXyhzb2Z0d2FyZSkKKyAyNzMuIG5ld3M6Y29tcC5vcy5s aW51eC5taXNjCisgMjc0LiBuZXdzOmNvbXAub3MubGludXguYW5zd2VycworIDI3NS4gaHR0cDov L3d3dy50bGRwLm9yZy8KKyAyNzYuIGh0dHA6Ly93d3cudGxkcC5vcmcvRkFRL0xpbnV4LUZBUS5o dG1sCisgMjc3LiBodHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPL1NlcmlhbC1IT1dUTy5odG1sCisg Mjc4LiBodHRwOi8vdGxkcC5vcmcvSE9XVE8vTW9kZW0tSE9XVE8uaHRtbAorIDI3OS4gZnRwOi8v c3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9kb2NzL0hPV1RPCisgMjgwLiBmdHA6Ly90c3gtMTEu bWl0LmVkdS9wdWIvbGludXgvZG9jcy9IT1dUTworIDI4MS4gaHR0cDovL3d3dy50bGRwLm9yZy9I T1dUTy8KKyAyODIuIGh0dHA6Ly93d3cudGxkcC5vcmcvaG1pcnJvcnMuaHRtbAorIDI4My4gaHR0 cDovL3d3dy5yZWRoYXQuY29tL2FwcHMvc3VwcG9ydC8KKyAyODQuIGh0dHA6Ly93d3cuZGViaWFu Lm9yZy9zdXBwb3J0CisgMjg1LiBodHRwOi8vd3d3LnNsYWNrd2FyZS5jb20vc3VwcG9ydC8KKyAy ODYuIGh0dHA6Ly93d3cuY2FsZGVyYS5jb20vc3VwcG9ydC8KKyAyODcuIGh0dHA6Ly93d3cubm92 ZWxsLmNvbS9zdXBwb3J0L21pY3Jvc2l0ZXMvbWljcm9zaXRlLmRvCisgMjg4LiBodHRwOi8vd3d3 Lm1hbmRyYWtlLmNvbS9zdXBwb3J0LworIDI4OS4gaHR0cDovL3d3dy50dXJib2xpbnV4LmNvbS9z dXBwb3J0LworIDI5MC4gaHR0cDovL3d3dy5saW5tb2RlbXMub3JnLworIDI5MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAKKyAyOTIuIGh0dHA6Ly9saW51 eC5kcmVhbXRpbWUub3JnL2RlY25ldC8KKyAyOTMuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1 bWJpYS5lZHUKKyAyOTQuIGh0dHA6Ly93d3cubGlubW9kZW1zLm9yZy8KKyAyOTUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wLjIKKyAyOTYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eS5odG1sI3NlcnZlcnMKKyAyOTcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zc2hjbGllbnQuaHRtbAorIDI5OC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDI5OS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMzAwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyAzMDEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjIKKyAzMDIuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAzMDMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDMwNC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjMKKyAzMDUuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjMKKyAzMDYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zLjEKKyAzMDcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCisgMzA4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDYKKyAzMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4NworIDMxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3g4CisgMzExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDEwCisgMzEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjeDExCisgMzEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwKKyAzMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4wCisgMzE1LiBodHRwOi8vbGludXh3d3cuZGIuZXJhdS5lZHUvbWFpbF9hcmNoaXZlcy9saW51 eC1rZXJuZWwvTWFyXzk4LzE0NDEuaHRtbAorIDMxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDMxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMzE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjeDMuMworIDMxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjMuNAorIDMyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjMuMgorIDMyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjAuNQorIDMyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZmFxLmh0bWwjdGVybQorIDMyMy4gaHR0cDovL2RpY2tleS5oaXMuY29tL3h0ZXJtL3h0 ZXJtLmh0bWwKKyAzMjQuIGh0dHA6Ly9kaWNrZXkuaGlzLmNvbS94dGVybS94dGVybS5odG1sCisg MzI1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL3htb2RtYXAudHh0CisgMzI2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMzI3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAzMjgu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCisgMzI5LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy41CisgMzMwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy4zCisgMzMxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgMzMyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyAzMzMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4zCisgMzM0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy42CisgMzM1LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMy40CisgMzM2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMzM3LiBtYWlsdG86a2Vy bWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1CisgMzM4LiBodHRwOi8vd3d3LnJlZGhhdC5jb20vc3Vw cG9ydC9lcnJhdGEvUkhCQS0yMDAxLTE1My5odG1sCisgMzM5LiBuZXdzOmNvbXAucHJvdG9jb2xz Lmtlcm1pdC5taXNjCisgMzQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjdG9wCisgMzQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjY29udGVudHMKKyAzNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4My4zCisgMzQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDMuMy41CisgMzQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjdG9wCisgMzQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj Y29udGVudHMKKyAzNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCN4MworIDM0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjUKKyAzNDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4z CisgMzQ5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisg MzUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMK KyAzNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDM1 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYKKyAzNTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My40CisgMzU0LiBu ZXdzOmNvbXAub3MucW54CisgMzU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvZ2tl cm1pdC5odG1sCisgMzU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDEwCisgMzU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwK KyAzNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAz NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cwor IDM2MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgMzYx LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNworIDM2Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjUKKyAzNjMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjEKKyAzNjQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjIKKyAzNjUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjMKKyAzNjYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjQKKyAzNjcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMAorIDM2OC4gaHR0 cDovL2FwbGF3cmVuY2UuY29tL1NDT0ZBUS8KKyAzNjkuIGh0dHA6Ly93d3cuemVuZXouY29tL2Nn aS1iaW4vc2NvcHJvZ2ZhcS9mYXEucGwKKyAzNzAuIGh0dHA6Ly93d3cuemVuZXouY29tL2NnaS1i aW4vc2NvdXc3ZmFxL2ZhcS5wbAorIDM3MS4gaHR0cDovL3plbmV6LnBjdW5peC5jb20vY2dpLWJp bi9zY291dzdmYXEvZmFxLnBsCisgMzcyLiBodHRwOi8vcGN1bml4LmNvbS9Vbml4YXJ0L21vZGVt cy5odG1sCisgMzczLiBodHRwOi8vd3d3LmZyZWViaXJkLm9yZy9mYXEvCisgMzc0LiBodHRwOi8v d3d3LmZyZWViaXJkLm9yZy9mYXEvZGV2ZWxvcGVyLmh0bWwKKyAzNzUuIGh0dHA6Ly9zdXBwb3J0 LmNhbGRlcmEuY29tL2NhbGRlcmEKKyAzNzYuIGh0dHA6Ly9zdGFnZS5jYWxkZXJhLmNvbS90YS8K KyAzNzcuIGh0dHA6Ly9hcGxhd3JlbmNlLmNvbS9uZXd0b3Njby5odG1sCisgMzc4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMC41CisgMzc5LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbCN0ZXJtCisgMzgwLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMAorIDM4MS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDM4Mi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMzgzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNgorIDM4NC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuMQorIDM4NS4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAzODYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyAzODcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDM4OC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYKKyAzODkuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjMKKyAzOTAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42LjEKKyAzOTEuIGh0dHA6Ly93d3cuZGlnaS5j b20vCisgMzkyLiBmdHA6Ly9mdHAuZnUtYmVybGluLmRlL3B1Yi91bml4L2RyaXZlci9mYXMKKyAz OTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTQKKyAzOTQu IGh0dHA6Ly93d3cuc2NvLmNvbS8KKyAzOTUuIGZ0cDovL2Z0cC5zY28uY29tLworIDM5Ni4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDM5Ny4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgMzk4LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNgorIDM5OS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuNAorIDQwMC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjYuMgorIDQwMS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjEwCisgNDAyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNDAzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA0MDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42CisgNDA1LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNi4zCisgNDA2LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNDA3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA0MDguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDQwOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjgKKyA0MTAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My42CisgNDExLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNy4xCisgNDEyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNy4yCisgNDEzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNy4zCisgNDE0LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNy40CisgNDE1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuNy41CisgNDE2LiBuZXdzOmNvbXAudW5peC5zb2xh cmlzCisgNDE3LiBodHRwOi8vYWNjZXNzMS5zdW4uY29tLworIDQxOC4gaHR0cDovL2RvY3Muc3Vu LmNvbS8KKyA0MTkuIGh0dHA6Ly93d3cuc3VuaGVscC5jb20vCisgNDIwLiBodHRwOi8vd3d3Lndp bnMudXZhLm5sL3B1Yi9zb2xhcmlzL3NvbGFyaXMyLworIDQyMS4gaHR0cDovL3d3dy53aW5zLnV2 YS5ubC9jZ2ktYmluL3NmYXEuY2dpCisgNDIyLiBmdHA6Ly9mdHAud2lucy51dmEubmwvcHViL3Nv bGFyaXMKKyA0MjMuIGh0dHA6Ly93d3cuc2NpZW5jZS51dmEubmwvcHViL3NvbGFyaXMvc29sYXJp czIuaHRtbAorIDQyNC4gaHR0cDovL3d3dy5zdG9rZWx5LmNvbS8KKyA0MjUuIGh0dHA6Ly93d3cu c3Rva2VseS5jb20vdW5peC5zeXNhZG0ucmVzb3VyY2VzL2ZhcXMuc3VuLmh0bWwKKyA0MjYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4wCisgNDI3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNDI4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA0MjkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDQzMC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKKyA0MzEuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjIKKyA0MzIuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0MzMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQzNC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKKyA0MzUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjMKKyA0MzYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjEKKyA0MzcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0MzguIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQzOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKKyA0NDAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjQKKyA0NDEuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjIKKyA0NDIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0NDMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQ0NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKKyA0NDUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjUKKyA0NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjMKKyA0NDcuIG5ld3M6Y29tcC5vcy52bXMKKyA0 NDguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0NDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQ1 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKKyA0NTEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjYKKyA0NTIu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjQKKyA0NTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0NTQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQ1NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKKyA0NTYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My43LjUKKyA0NTcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0NTguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQ1OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNDYwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuOQorIDQ2MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjcKKyA0NjIuIGh0dHA6Ly93d3cu c3Rva2VseS5jb20vCisgNDYzLiBodHRwOi8vYWNjZXNzMS5zdW4uY29tLworIDQ2NC4gaHR0cDov L3d3dy5sdWRkLmx1dGguc2UvfmJlYXIvcHJvamVjdC9zdW4vc3VuLmhhcmR3YXJlLnR4dAorIDQ2 NS4gZnRwOi8vZnRwLm5ldGNvbS5jb20vcHViL3J1L3J1Ymljb24vc3VuLmhkd3IucmVmCisgNDY2 LiBmdHA6Ly9mdHAuaW50bmV0Lm5ldC9wdWIvU1VOL1N1bi1IYXJkd2FyZS1SZWYKKyA0NjcuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0NjguIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQ2OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNDcwLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTAKKyA0NzEuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My44CisgNDcyLiBuZXdzOmNvbXAu dW5peC51bHRyaXgKKyA0NzMuIG5ld3M6Y29tcC5zeXMuZGVjCisgNDc0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNDc1LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA0NzYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDQ3Ny4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjExCisgNDc4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuOQorIDQ3OS4gaHR0cDovL3d3dy5mcmVlYmlyZC5v cmcvCisgNDgwLiBodHRwOi8vd3d3LmZyZWViaXJkLm9yZy9mYXEvCisgNDgxLiBuZXdzOmNvbXAu dW5peC51bml4d2FyZS5taXNjCisgNDgyLiBuZXdzOmNvbXAudW5peC5zY28ubWlzYworIDQ4My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjAKKyA0ODQuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2YvY2t1dGlvLmMKKyA0ODUuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA0ODYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDQ4Ny4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNDg4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTIKKyA0ODkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMAorIDQ5MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDQ5MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNDkyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMKKyA0OTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4xMworIDQ5NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjExCisgNDk1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNDk2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA0OTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4MworIDQ5OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzLjE0CisgNDk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjeDMuMTIKKyA1MDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCN0b3AKKyA1MDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCNjb250ZW50cworIDUwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzCisgNTAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDMuMTUKKyA1MDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN4My4xMworIDUwNS4gbmV3czpjb21wLnN5cy5zZ2kubWlzYworIDUwNi4gbmV3czpj b21wLnN5cy5zZ2kuYWRtaW4KKyA1MDcuIGh0dHA6Ly93d3cuc2dpLmNvbS8KKyA1MDguIGh0dHA6 Ly93d3ctdml6LnRhbXUuZWR1L35zZ2ktZmFxLworIDUwOS4gZnRwOi8vdml6LnRhbXUuZWR1L3B1 Yi9zZ2kvZmFxLworIDUxMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sCisgNTExLiBodHRwOi8vZnJlZXdhcmUuc2dpLmNvbS9JbnN0YWxsYWJsZS9nY2MtMi45NS4y Lmh0bWwKKyA1MTIuIGh0dHA6Ly9mcmVld2FyZS5zZ2kuY29tL0luc3RhbGxhYmxlL2djYy0yLjk1 LjIuaHRtbAorIDUxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I3RvcAorIDUxNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2Nv bnRlbnRzCisgNTE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMKKyA1MTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4My4x NgorIDUxNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjE0 CisgNTE4LiBuZXdzOmNvbXAuc3lzLmJlCisgNTE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNTIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA1MjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN4MworIDUyMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gzLjE3CisgNTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1YndyLmh0bWwjeDMuMTUKKyA1MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3Vid3IuaHRtbCN0b3AKKyA1MjUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCNjb250ZW50cworIDUyNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gzCisgNTI3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1Yndy Lmh0bWwjeDMuMTgKKyA1MjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN4My4xNgorIDUyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3RvcAorIDUzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1s I2NvbnRlbnRzCisgNTMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0 bWwjeDMKKyA1MzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 My4xOQorIDUzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gz LjE3CisgNTM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9w CisgNTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVu dHMKKyA1MzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4Mwor IDUzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzLjIwCisg NTM4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDMuMTgKKyA1 MzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9tYWMuaHRtbAorIDU0MC4gaHR0cDov L3d3dy5hbWF6b24uY29tL2dwL3Byb2R1Y3QvQjAwMDBWWUpSWT9pZT1VVEY4JnRhZz1hbGVpZG1v cmVsZG9tLTIwJmxpbmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9MzkwOTU3JmNyZWF0aXZl QVNJTj1CMDAwMFZZSlJZCisgNTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjeDEwCisgNTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwKKyA1NDMuIGh0dHA6Ly93d3cuYW1hem9uLmNvbS9ncC9wcm9kdWN0L0IwMDBGWDYxTVM/ aWU9VVRGOCZ0YWc9YWxlaWRtb3JlbGRvbS0yMCZsaW5rQ29kZT1hczImY2FtcD0xNzg5JmNyZWF0 aXZlPTM5MDk1NyZjcmVhdGl2ZUFTSU49QjAwMEZYNjFNUworIDU0NC4gbWFpbHRvOmtlcm1pdEBj b2x1bWJpYS5lZHUKKyA1NDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN0b3AKKyA1NDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCNjb250ZW50cworIDU0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gzCisgNTQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDMuMTkKKyA1NDkuIGh0dHA6Ly93d3cudW5pLWdpZXNzZW4uZGUvZmFxL2FyY2hpdi9jb2hlcmVu dC1mYXEuZ2VuZXJhbC9tc2cwMDAwMC5odG1sCisgNTUwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNTUxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA1NTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3Vid3IuaHRtbCN4NQorIDU1My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gzCisgNTU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjY2ZnLmh0bWwKKyA1NTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCN0b3AKKyA1NTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRt bCNjb250ZW50cworIDU1Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3g2CisgNTU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj eDQKKyA1NTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAorIDU2 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDU2MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNTYy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDcKKyA1NjMuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4NQorIDU2NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sIzkuNQorIDU2NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gzCisgNTY2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNTY3LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA1NjguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4OAorIDU2OS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g2CisgNTcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDgKKyA1NzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbAorIDU3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr NjBtYW51YWwuaHRtbAorIDU3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NhYmxl Lmh0bWwKKyA1NzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0 b3AKKyA1NzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250 ZW50cworIDU3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g5 CisgNTc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDcKKyA1 NzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA1Nzku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDU4 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3gxMAorIDU4MS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3g4CisgNTgyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisgNTgzLiBodHRwOi8v ZGlja2V5Lmhpcy5jb20veHRlcm0veHRlcm0uaHRtbAorIDU4NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDU4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNTg2LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDExCisgNTg3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1YndyLmh0bWwjeDkKKyA1ODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA1ODkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3Vid3IuaHRtbCNjb250ZW50cworIDU5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWJ3ci5odG1sI3gxMgorIDU5MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sI3gxMAorIDU5Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWJ3ci5odG1sI3gxMS4xCisgNTkzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 YndyLmh0bWwjeDExLjIKKyA1OTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vi d3IuaHRtbCN0b3AKKyA1OTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbCNjb250ZW50cworIDU5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3 ci5odG1sI3gxMQorIDU5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sI3gxMS4yCisgNTk4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVh bC5odG1sCisgNTk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwj dG9wCisgNjAwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29u dGVudHMKKyA2MDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4 MTEKKyA2MDIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTEu MQorIDYwMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAor IDYwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDYw NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisg NjA2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEzCisgNjA3 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDExCisgNjA4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAorIDYwOS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI3RvcAorIDYxMC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sI2NvbnRlbnRzCisgNjExLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDE0CisgNjEyLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjeDEyCisgNjEzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjdG9wCisgNjE0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwjY29udGVudHMKKyA2MTUuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTUKKyA2MTYuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN4MTQKKyA2MTcuIG1haWx0bzpzdXBwb3J0QHN0YWxs aW9uLm96LmF1CisgNjE4LiBodHRwOi8vd3d3LnN0YWxsaW9uLmNvbS8KKyA2MTkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCN0b3AKKyA2MjAuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbCNjb250ZW50cworIDYyMS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDYyMi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrODAuaHRtbAorIDYyMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2luZGV4Lmh0bWwKKyA2MjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9p bmRleC5odG1sCisgNjI1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS8KKyA2MjYuIG1haWx0bzpr ZXJtaXRAY29sdW1iaWEuZWR1CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja3VjbWQuYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1Y21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNzcw ZQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvY2t1Y21kLmMKQEAgLTAsMCArMSw3OTE5IEBACisjaW5jbHVkZSAiY2tjc3ltLmgiCisKK2No YXIgKmNtZHYgPSAiQ29tbWFuZCBwYWNrYWdlIDkuMC4xNjgsIDEyIE1hcmNoIDIwMTAiOworCisv KiAgQyBLIFUgQyBNIEQgIC0tICBJbnRlcmFjdGl2ZSBjb21tYW5kIHBhY2thZ2UgZm9yIFVuaXgg ICovCisKKy8qIChJbiByZWFsaXR5LCBpdCdzIGZvciBhbGwgcGxhdGZvcm1zLCBub3QganVzdCBV bml4KSAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogKGZkY0Bjb2x1bWJpYS5lZHUp LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3RlbXMsIE5l dyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDEwLAorICAgIFRydXN0ZWVz IG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxs IHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0 aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFp bWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKyNkZWZpbmUgVE9LUFJFQ0hFQ0sKKworI2RlZmlu ZSBET0NIS1ZBUgorCisvKiBDb21tYW5kLXRlcm1pbmFsLXRvLUMtS2VybWl0IGNoYXJhY3RlciBt YXNrICovCisKKyNpZmRlZiBPUzIJCQkJLyogSzk1ICovCitpbnQgY21kbXNrID0gMjU1OwkJCS8q IChhbHdheXMgd2FzIDI1NSkgKi8KKyNlbHNlCQkJCQkvKiBBbGwgb3RoZXJzLi4uICovCitpbnQg Y21kbXNrID0gMjU1OwkJCS8qIDMxIERlYyAyMDAwICh3YXMgMTI3KSAqLworI2VuZGlmIC8qIE9T MiAqLworCisjaWZkZWYgQlNfRElSU0VQCQkJLyogRGlyZWN0b3J5IHNlcGFyYXRvciBpcyBiYWNr c2xhc2ggKi8KKyN1bmRlZiBCU19ESVJTRVAKKyNlbmRpZiAvKiBCU19ESVJTRVAgKi8KKworI2lm ZGVmIE9TMgorI2RlZmluZSBCU19ESVJTRVAKKyNlbmRpZiAvKiBCU19ESVJTRVAgKi8KKworI2Rl ZmluZSBDS1VDTURfQworCisjaW5jbHVkZSAiY2tjZGViLmgiICAgICAgICAgICAgICAgICAgICAg LyogRm9ybWF0cyBmb3IgZGVidWcoKSwgZXRjLiAqLworI2luY2x1ZGUgImNrY2tlci5oIgkJCS8q IE5lZWRlZCBmb3IgQklHQlVGT0sgZGVmaW5pdGlvbiAqLworI2luY2x1ZGUgImNrY25ldC5oIgkJ CS8qIE5lZWRlZCBmb3Igc2VydmVyLXNpZGUgVGVsbmV0ICovCisjaW5jbHVkZSAiY2t1Y21kLmgi CQkJLyogTmVlZGVkIGZvciBldmVyeXRoaW5nICovCisjaW5jbHVkZSAiY2t1dXNyLmgiICAgICAg ICAgICAgICAgICAgICAgLyogTmVlZGVkIGZvciBwcm9tcHQgbGVuZ3RoICovCisKKyNpZm5kZWYg Tk9BUlJPV0tFWVMKKyNpZm5kZWYgTk9FU0NTRVEKKyNpZmRlZiBWTVNPUlVOSVgKKyNkZWZpbmUg VVNFX0FSUk9XS0VZUwkJCS8qIFVzZSBhcnJvdyBrZXlzIGZvciBjb21tYW5kIHJlY2FsbCAqLwor I2VuZGlmIC8qIFZNU09SVU5JWCAqLworI2VuZGlmIC8qIE5PRVNDU0VRICovCisjZW5kaWYgLyog Tk9BUlJPV0tFWVMgKi8KKworI3VuZGVmIENLVUNNRF9DCisKK19QUk9UT1RZUCggaW50IHVuaGV4 LCAoY2hhcikgKTsKK19QUk9UT1RZUCggc3RhdGljIFZPSUQgY21kY2xyc2NuLCAodm9pZCkgKTsK KworI2lmZGVmIENLTEVBUk4KK19QUk9UT1RZUCggVk9JRCBsZWFybmNtZCwgKGNoYXIgKikgKTsK KyNlbmRpZiAvKiBDS0xFQVJOICovCisKK3N0YXRpYyBjaGFyICptb25hbWVbXSA9IHsKKyAgICAi SmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAorICAgICJKdWwiLCAiQXVn IiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIKK307CisKK3N0cnVjdCBrZXl0YWIgY21vbnRo c1tdID0geworICB7ICJhcHJpbCIsICAgICA0LCAwIH0sCisgIHsgImF1Z3VzdCIsICAgIDgsIDAg fSwKKyAgeyAiZGVjZW1iZXIiLCAxMiwgMCB9LAorICB7ICJmZWJydWFyeSIsICAyLCAwIH0sCisg IHsgImphbnVhcnkiLCAgIDEsIDAgfSwKKyAgeyAianVseSIsICAgICAgNywgMCB9LAorICB7ICJq dW5lIiwgICAgICA2LCAwIH0sCisgIHsgIm1hcmNoIiwgICAgIDMsIDAgfSwKKyAgeyAibWF5Iiwg ICAgICAgNSwgMCB9LAorICB7ICJub3ZlbWJlciIsIDExLCAwIH0sCisgIHsgIm9jdG9iZXIiLCAg MTAsIDAgfSwKKyAgeyAic2VwdGVtYmVyIiwgOSwgMCB9Cit9OworCisjaWZuZGVmIE5PSUNQICAg ICAvKiBUaGUgcmVzdCBvbmx5IGlmIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2luZyBzZWxlY3Rl ZCAqLworCisjaWZuZGVmIE5PU1BMCitfUFJPVE9UWVAoIGludCBjaGt2YXIsIChjaGFyICopICk7 CitleHRlcm4gaW50IGFza2ZsYWcsIGVjaG9zdGFyczsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisj aWZkZWYgQ0tST09UCitleHRlcm4gaW50IGNrcm9vdGVycjsKKyNlbmRpZiAvKiBDS1JPT1QgKi8K KworI2lmZGVmIElLU0QKK2V4dGVybiBpbnQgaW5zZXJ2ZXI7CisjZW5kaWYgLyogSUtTRCAqLwor CitpbnQgY21mbGRmbGdzID0gMDsJCQkvKiBGbGFncyBmb3IgY21mbGQoKSAqLworaW50IGNta3dm bGdzID0gMDsJCQkvKiBGbGFncyBmcm9tIGxhc3Qga2V5d29yZCBwYXJzZSAqLworc3RhdGljIGlu dCBub21zZyA9IDA7CitzdGF0aWMgaW50IGJsb2NrbHZsID0gMDsJCS8qIEJsb2NrIG5lc3Rpbmcg bGV2ZWwgKi8KK3N0YXRpYyBpbnQgbGluZWJlZ2luID0gMDsJCS8qIEZsYWcgZm9yIGF0IHN0YXJ0 IG9mIGEgbGluZSAqLworc3RhdGljIGludCBxdW90aW5nID0gMTsJCQkvKiBRdW90aW5nIGlzIGFs bG93ZWQgKi8KK3N0YXRpYyBpbnQgc3dhcmcgPSAwOwkJCS8qIFBhcnNpbmcgYSBzd2l0Y2ggYXJn dW1lbnQgKi8KK3N0YXRpYyBpbnQgeGNtZmRiID0gMDsJCQkvKiBGbGFnIGZvciBwYXJzaW5nIGNo YWluZWQgZmRicy4uLiAqLworc3RhdGljIGludCBjaHNyYyA9IDA7CQkJLyogU291cmNlIG9mIGNo YXJhY3RlciwgMSA9IHR0eSAqLworc3RhdGljIGludCBuZXdjbWQgPSAwOwkJCS8qIFNlZSBhZGRj bWQoKSAqLworCisjaWZkZWYgQlNfRElSU0VQCitzdGF0aWMgaW50IGRpcm5hbWZsZyA9IDA7Cisj ZW5kaWYgLyogQlNfRElSU0VQICovCisKKy8qCitNb2RlbGVkIGFmdGVyIHRoZSBERUNTWVNURU0t MjAgY29tbWFuZCBwYXJzZXIgKHRoZSBDT01ORCBKU1lTKSwgUklQLiBGZWF0dXJlczoKKworIC4g cGFyc2VzIGFuZCB2ZXJpZmllcyBrZXl3b3JkcywgZmlsZW5hbWVzLCB0ZXh0IHN0cmluZ3MsIG51 bWJlcnMsIG90aGVyIGRhdGEKKyAuIGRpc3BsYXlzIGFwcHJvcHJpYXRlIG1lbnUgb3IgaGVscCBt ZXNzYWdlIHdoZW4gdXNlciB0eXBlcyAiPyIKKyAuIGRvZXMga2V5d29yZCBhbmQgZmlsZW5hbWUg Y29tcGxldGlvbiB3aGVuIHVzZXIgdHlwZXMgRVNDIG9yIFRBQgorIC4gZG9lcyBwYXJ0aWFsIGtl eXdvcmQgYW5kIGZpbGVuYW1lIGNvbXBsZXRpb24KKyAuIGFjY2VwdHMgYW55IHVuaXF1ZSBhYmJy ZXZpYXRpb24gZm9yIGEga2V5d29yZAorIC4gYWxsb3dzIGtleXdvcmRzIHRvIGhhdmUgYXR0cmli dXRlcywgbGlrZSAiaW52aXNpYmxlIiBhbmQgImFiYnJldmlhdGlvbiIKKyAuIGNhbiBzdXBwbHkg ZGVmYXVsdHMgZm9yIGZpZWxkcyBvbWl0dGVkIGJ5IHVzZXIKKyAuIHByb3ZpZGVzIGNvbW1hbmQg cmV0cnkgYW5kIHJlY2FsbAorIC4gcHJvdmlkZXMgY2hhcmFjdGVyLCB3b3JkLCBhbmQgbGluZSBk ZWxldGlvbiAoYnV0IG9ubHkgZnJvbSB0aGUgZW5kKQorIC4gYWNjZXB0cyBpbnB1dCBmcm9tIGtl eWJvYXJkLCBjb21tYW5kIGZpbGVzLCBtYWNyb3MsIG9yIHJlZGlyZWN0ZWQgc3RkaW4KKyAuIGFs bG93cyBmb3IgZnVsbCBvciBoYWxmIGR1cGxleCBvcGVyYXRpb24sIGNoYXJhY3RlciBvciBsaW5l IGlucHV0CisgLiBhbGxvd3MgXC1lc2NhcGVzIGZvciBzcGVjaWFsIGNoYXJhY3RlcnMKKyAuIGFs bG93cyBzcGVjaWZpY2F0aW9uIG9mIGEgdXNlciBleGl0IHRvIGV4cGFuZCB2YXJpYWJsZXMsIGV0 Yy4KKyAuIHNldHRhYmxlIHByb21wdCwgcHJvdGVjdGVkIGZyb20gZGVsZXRpb24sIGR5bmFtaWNh bGx5IHJlLWV2YWx1YXRlZCBlYWNoIHRpbWUKKyAuIGFsbG93cyBjaGFpbmVkIHBhcnNlIGZ1bmN0 aW9ucy4KKworRnVuY3Rpb25zOgorIGNtc2V0cCAtIFNldCBwcm9tcHQgKGNtcHJvbSBpcyBwcm9t cHQgc3RyaW5nKQorIGNtc2F2cCAtIFNhdmUgY3VycmVudCBwcm9tcHQKKyBjbWdldHAgPSBHZXQg Y3VycmVudCBwcm9tcHQKKyBwcm9tcHQgLSBJc3N1ZSBwcm9tcHQKKyBjbWluaSAgLSBDbGVhciB0 aGUgY29tbWFuZCBidWZmZXIgKGJlZm9yZSBwYXJzaW5nIGEgbmV3IGNvbW1hbmQpCisgY21yZXMg IC0gUmVzZXQgY29tbWFuZCBidWZmZXIgcG9pbnRlcnMgKGJlZm9yZSByZXBhcnNpbmcpCisgY21r ZXkgIC0gUGFyc2UgYSBrZXl3b3JkIG9yIHRva2VuIChhbHNvIGNta2V5MikKKyBjbXN3aSAgLSBQ YXJzZSBhIHN3aXRjaAorIGNtbnVtICAtIFBhcnNlIGEgbnVtYmVyCisgY21pZmkgIC0gUGFyc2Ug YW4gaW5wdXQgZmlsZSBuYW1lCisgY21vZmkgIC0gUGFyc2UgYW4gb3V0cHV0IGZpbGUgbmFtZSAo YWxzbyBjbWlmaXAsIGNtaWZpMiwgLi4uKQorIGNtZGlyICAtIFBhcnNlIGEgZGlyZWN0b3J5IG5h bWUgKGFsc28gY21kaXJwKQorIGNtZmxkICAtIFBhcnNlIGFuIGFyYml0cmFyeSBmaWVsZAorIGNt dHh0ICAtIFBhcnNlIGEgdGV4dCBzdHJpbmcKKyBjbWRhdGUgLSBQYXJzZSBhIGRhdGUtdGltZSBz dHJpbmcKKyBjbWNmbSAgLSBQYXJzZSBjb21tYW5kIGNvbmZpcm1hdGlvbiAoZW5kIG9mIGxpbmUp CisgY21mZGIgIC0gUGFyc2UgYW55IG9mIGEgbGlzdCBvZiB0aGUgZm9yZWdvaW5nIChjaGFpbmVk IHBhcnNlIGZ1bmN0aW9ucykKKworUmV0dXJuIGNvZGVzOgorIC05OiBsaWtlIC0yIGV4Y2VwdCB0 aGlzIG1vZHVsZSBhbHJlYWR5IHByaW50ZWQgdGhlIGVycm9yIG1lc3NhZ2UKKyAtMzogbm8gaW5w dXQgcHJvdmlkZWQgd2hlbiByZXF1aXJlZAorIC0yOiBpbnB1dCB3YXMgaW52YWxpZCAoZS5nLiBu b3QgYSBudW1iZXIgd2hlbiBhIG51bWJlciB3YXMgcmVxdWlyZWQpCisgLTE6IHJlcGFyc2UgcmVx dWlyZWQgKHVzZXIgZGVsZXRlZCBpbnRvIGEgcHJlY2VkaW5nIGZpZWxkKQorICAwIG9yIGdyZWF0 ZXI6IHN1Y2Nlc3MKK1NlZSBpbmRpdmlkdWFsIGZ1bmN0aW9ucyBmb3IgZ3JlYXRlciBkZXRhaWwu CisKK0JlZm9yZSB1c2luZyB0aGVzZSByb3V0aW5lcywgdGhlIGNhbGxlciBzaG91bGQgI2luY2x1 ZGUgImNrdWNtZC5oIiBhbmQgc2V0IHRoZQorcHJvZ3JhbSdzIHByb21wdCBieSBjYWxsaW5nIGNt c2V0cCgpLiAgSWYgdGhlIGZpbGUgcGFyc2luZyBmdW5jdGlvbnMgY21pZmksCitjbW9maSwgb3Ig Y21kaXIgYXJlIHRvIGJlIHVzZWQsIHRoaXMgbW9kdWxlIG11c3QgYmUgbGlua2VkIHdpdGggYSBj az9maW8gZmlsZQorc3lzdGVtIHN1cHBvcnQgbW9kdWxlIGZvciB0aGUgYXBwcm9wcmlhdGUgc3lz dGVtLCBlLmcuIGNrdWZpbyBmb3IgVW5peC4gIElmCit0aGUgY2FsbGVyIHB1dHMgdGhlIHRlcm1p bmFsIGluIGNoYXJhY3RlciB3YWtldXAgKCJjYnJlYWsiKSBtb2RlIHdpdGggbm8gZWNobywKK3Ro ZW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgcHJvdmlkZSBsaW5lIGVkaXRpbmcgLS0gY2hhcmFjdGVy LCB3b3JkLCBhbmQgbGluZQorZGVsZXRpb24sIGFzIHdlbGwgYXMga2V5d29yZCBhbmQgZmlsZW5h bWUgY29tcGxldGlvbiB1cG9uIEVTQyBhbmQgaGVscAorc3RyaW5ncywga2V5d29yZCwgb3IgZmls ZSBtZW51cyB1cG9uICc/Jy4gIElmIHRoZSBjYWxsZXIgcHV0cyB0aGUgdGVybWluYWwKK2ludG8g Y2hhcmFjdGVyIHdha2V1cC9ub2VjaG8gbW9kZSwgY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gcmVz dG9yZSBpdCBiZWZvcmUKK2V4aXQgZnJvbSBvciBpbnRlcnJ1cHRpb24gb2YgdGhlIHByb2dyYW0u ICBJZiB0aGUgY2hhcmFjdGVyIHdha2V1cCBtb2RlIGlzIG5vdAorc2V0LCB0aGUgc3lzdGVtJ3Mg b3duIGxpbmUgZWRpdG9yIG1heSBiZSB1c2VkLgorCitOT1RFOiBDb250cmFyeSB0byBleHBlY3Rh dGlvbnMsIG1hbnkgI2lmZGVmJ3MgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoaXMgbW9kdWxlLgorQW55 IG9wZXJhdGlvbiByZXF1aXJpbmcgYW4gI2lmZGVmIChsaWtlIGNsZWFyIHNjcmVlbiwgZ2V0IGNo YXJhY3RlciBmcm9tCitrZXlib2FyZCwgZXJhc2UgY2hhcmFjdGVyIGZyb20gc2NyZWVuLCBldGMp IHNob3VsZCBldmVudHVhbGx5IGJlIHR1cm5lZCBpbnRvIGEKK2NhbGwgdG8gYSBmdW5jdGlvbiB0 aGF0IGlzIGRlZmluZWQgaW4gY2s/dGlvLmMsIGJ1dCB0aGVuIGFsbCB0aGUgY2s/dGlvLmMKK21v ZHVsZXMgd291bGQgaGF2ZSB0byBiZSBjaGFuZ2VkLi4uCisqLworCisvKiBJbmNsdWRlcyAqLwor CisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCQkJLyogQVNDSUkgY2hh cmFjdGVyIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja3VjbWQuaCIgICAgICAgICAgICAgICAgICAg ICAvKiBDb21tYW5kIHBhcnNpbmcgZGVmaW5pdGlvbnMgKi8KKworI2lmZGVmIE9TRjEzCisjaWZk ZWYgQ0tfQU5TSUMKKyNpZmRlZiBfTk9fUFJPVE8KKyN1bmRlZiBfTk9fUFJPVE8KKyNlbmRpZiAv KiBfTk9fUFJPVE8gKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIE9TRjEzICov CisKKyNpZm5kZWYgSFBVWFBSRTY1CisjaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1i ZXIgc3ltYm9scyAqLworI2Vsc2UKKyNpZm5kZWYgRVJSTk9fSU5DTFVERUQKKyNpbmNsdWRlIDxl cnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBzeW1ib2xzICovCisjZW5kaWYJLyogRVJSTk9fSU5D TFVERUQgKi8KKyNlbmRpZgkvKiBIUFVYUFJFNjUgKi8KKworI2lmZGVmIE9TMgorI2lmbmRlZiBO VAorI2RlZmluZSBJTkNMX05PUE0KKyNkZWZpbmUgSU5DTF9WSU8JCQkvKiBOZWVkZWQgZm9yIGNr b2Nvbi5oICovCisjaW5jbHVkZSA8b3MyLmg+CisjdW5kZWYgQ09NTUVOVAorI2Vsc2UKKyNkZWZp bmUgQVBJUkVUIFVMT05HCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmIC8qIE5UICovCisj aW5jbHVkZSAiY2tvY29uLmgiCisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZiAvKiBPUzIgKi8KKwor I2lmZGVmIE9TSworI2RlZmluZSBjYyBjY291bnQJCQkvKiBPUy05LzY4SyBjb21waWxlciBidWcg Ki8KKyNlbmRpZiAvKiBPU0sgKi8KKworI2lmZGVmIEdFTURPUwkJCQkvKiBBdGFyaSBTVCAqLwor I2lmZGVmIHB1dGNoYXIKKyN1bmRlZiBwdXRjaGFyCisjZW5kaWYgLyogcHV0Y2hhciAqLworI2Rl ZmluZSBwdXRjaGFyKHgpIGNvbm9jKHgpCisjZW5kaWYgLyogR0VNRE9TICovCisKKyNpZmRlZiBD S19BVVRPREwKK2V4dGVybiBpbnQgY21kYWRsLCBqdXN0b25lOworI2VuZGlmIC8qIENLX0FVVE9E TCAqLworCitleHRlcm4gaW50IHRpbWVsaW1pdCwgbnp4b3B0cywgbm9wdXNoLCBub2xvY2FsLCB4 Y21kc3JjLCBrZWVwYWxsY2hhcnM7CisKKyNpZmRlZiBDS1NZU0xPRworI2lmZGVmIFVOSVgKKyNp ZmRlZiBDS1hQUklOVEYJCQkvKiBPdXIgcHJpbnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCisj dW5kZWYgcHJpbnRmCQkJCS8qIHVzZSBvZiAicHJpbnRmIiBpbiBzeXNsb2cuaCAqLworI2VuZGlm IC8qIENLWFBSSU5URiAqLworI2lmZGVmIFJUQUlYCisjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgor I2Vsc2UgIC8qIFJUQUlYICovCisjaW5jbHVkZSA8c3lzbG9nLmg+CisjZW5kaWYgLyogUlRBSVgg Ki8KKyNpZmRlZiBDS1hQUklOVEYKKyNkZWZpbmUgcHJpbnRmIGNreHByaW50ZgorI2VuZGlmIC8q IENLWFBSSU5URiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLwor CisvKiBMb2NhbCB2YXJpYWJsZXMgKi8KKworc3RhdGljCitpbnQgcHNldGYgPSAwLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRmxhZyB0aGF0IHByb21wdCBoYXMgYmVlbiBzZXQgKi8KKyAg ICBjYyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgY291bnQg Ki8KKyAgICBkcHggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEdXBsZXggKDAg PSBmdWxsKSAqLworICAgIGlud29yZCA9IDA7CQkJCS8qIEluIHRoZSBtaWRkbGUgb2YgZ2V0dGlu ZyBhIHdvcmQgKi8KKworY2hhciAqZGZwcm9tID0gIkNvbW1hbmQ/ICI7ICAgICAgICAgICAgIC8q IERlZmF1bHQgcHJvbXB0ICovCisjaWZuZGVmIE5PTEFTVEZJTEUKK2NoYXIgKmxhc3RmaWxlID0g TlVMTDsJCQkvKiBMYXN0IGZpbGVzcGVjICovCitzdGF0aWMgY2hhciAqdG1wbGFzdGZpbGUgPSBO VUxMOwkvKiBMYXN0IGZpbGVzcGVjIGNhbmRpZGF0ZSAqLworI2VuZGlmCS8qIE5PTEFTVEZJTEUg Ki8KKworaW50IGNtZmxnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQg ZmxhZ3MgKi8KK2ludCBjbWZzYXY7CQkJCS8qIEEgc2F2ZWQgdmVyc2lvbiBvZiB0aGVtICovCisK K3N0YXRpYyBjaGFyIHB1c2hjID0gTlVMOworc3RhdGljIGNoYXIgYnJrY2hhciA9IE5VTDsKKwor I2RlZmluZSBDTURFRkFVTFQgMTAyMworc3RhdGljIGNoYXIgY21kZWZhdWx0W0NNREVGQVVMVCsx XTsKKworI2lmZGVmIERDTURCVUYKK2NoYXIgKmNtZGJ1ZiA9IE5VTEw7CQkJLyogQ29tbWFuZCBi dWZmZXIgKi8KK2NoYXIgKnNhdmJ1ZiA9IE5VTEw7CQkJLyogQnVmZmVyIHRvIHNhdmUgY29weSBv ZiBjb21tYW5kICovCitjaGFyICphdG1idWYgPSBOVUxMOwkJCS8qIEF0b20gYnVmZmVyIC0gZm9y IGN1cnJlbnQgZmllbGQgKi8KK2NoYXIgKmF0eGJ1ZiA9IE5VTEw7CQkJLyogRm9yIGV4cGFuZGlu ZyB0aGUgYXRvbSBidWZmZXIgKi8KK2NoYXIgKnByZXZjbWQgPSBOVUxMOworc3RhdGljIGNoYXIg KmF0eWJ1ZiA9IE5VTEw7CQkvKiBGb3IgY29weWluZyBhdG9tIGJ1ZmZlciAqLworc3RhdGljIGNo YXIgKmZpbGJ1ZiA9IE5VTEw7CQkvKiBGaWxlIG5hbWUgYnVmZmVyICovCitzdGF0aWMgY2hhciAq Y21wcm9tID0gTlVMTDsJCS8qIFByb2dyYW0ncyBwcm9tcHQgKi8KK3N0YXRpYyBjaGFyICpjbXBy eHggPSBOVUxMOwkJLyogUHJvZ3JhbSdzIHByb21wdCwgdW5ldmFsdWF0ZWQgKi8KKworI2lmZGVm IENLX1JFQ0FMTAorLyoKKyAgQ29tbWFuZCByZWNhbGwgaXMgYXZhaWxhYmxlIG9ubHkgaWYgd2Ug Y2FuIG1ha2UgcHJvZmxpZ2F0ZSB1c2Ugb2YgbWFsbG9jKCkuCisqLworI2RlZmluZSBSX01BWCAx MAkJCS8qIEhvdyBtYW55IGNvbW1hbmRzIHRvIHNhdmUgKi8KK2ludCBjbV9yZWNhbGwgPSBSX01B WDsJCQkvKiBTaXplIG9mIGNvbW1hbmQgcmVjYWxsIGJ1ZmZlciAqLworaW50IG9uX3JlY2FsbCA9 IDE7CQkJLyogUmVjYWxsIGZlYXR1cmUgaXMgT04gKi8KK3N0YXRpYyBpbnQgbm9fcmVjYWxsID0g MDsJCS8qIFJlY2FsbCBPRkYgZm9yIHRoaXMgY21kIG9ubHkgKi8KK3N0YXRpYyBpbnQgZm9yY2Vf YWRkID0gMDsJCS8qIEZvcmNlIGNtZCBpbnRvIHJlY2FsbCBidWZmZXIgKi8KK3N0YXRpYyBpbnQg bGFzdF9yZWNhbGwgPSAtMTsJCS8qIExhc3QgcmVjYWxsLXJlbGF0ZWQgYWN0aW9uICovCisvKgor ICAtMSA9IG5vbmUKKyAgIDAgPSBDUiAoYSBjb21tYW5kIHdhcyBlbnRlcmVkKQorICAgMSA9IFVw CisgICAyID0gRG93bgorKi8KK2ludCBpbl9yZWNhbGwgPSAwOwkJCS8qIFJlY2FsbCBidWZmZXJz IGFyZSBpbml0J2QgKi8KK3N0YXRpYyBpbnQKKyAgY3VycmVudCA9IC0xLAkJCQkvKiBQb2ludGVy IHRvIGN1cnJlbnQgY29tbWFuZCAqLworICBybGFzdCA9IC0xOwkJCQkvKiBJbmRleCBvZiBsYXN0 IGNvbW1hbmQgaW4gYnVmZmVyICovCitzdGF0aWMgY2hhciAqKnJlY2FsbCA9IE5VTEw7CQkvKiBB cnJheSBvZiByZWNhbGwgYnVmZmVyIHBvaW50ZXJzICovCisjZW5kaWYgLyogQ0tfUkVDQUxMICov CisjZWxzZSAgLyogIURDTURCVUYgKi8KK2NoYXIgY21kYnVmW0NNREJMKzRdOyAgICAgICAgICAg ICAgICAgICAvKiBDb21tYW5kIGJ1ZmZlciAqLworY2hhciBzYXZidWZbQ01EQkwrNF07ICAgICAg ICAgICAgICAgICAgIC8qIEJ1ZmZlciB0byBzYXZlIGNvcHkgb2YgY29tbWFuZCAqLworY2hhciBh dG1idWZbQVRNQkwrNF07ICAgICAgICAgICAgICAgICAgIC8qIEF0b20gYnVmZmVyICovCitjaGFy IGF0eGJ1ZltDTURCTCs0XTsgICAgICAgICAgICAgICAgICAgLyogRm9yIGV4cGFuZGluZyB0aGUg YXRvbSBidWZmZXIgKi8KK2NoYXIgcHJldmNtZFtDTURCTCs0XTsJCQkvKiBGb3IgZGlzcGxheWlu ZyB0aGUgbGFzdCBjb21tYW5kICovCitzdGF0aWMgY2hhciBhdHlidWZbQVRNQkwrNF07CQkvKiBG b3IgY29weWluZyBhdG9tIGJ1ZmZlciAqLworc3RhdGljIGNoYXIgZmlsYnVmW0FUTUJMKzRdOwkJ LyogRmlsZSBuYW1lIGJ1ZmZlciAqLworc3RhdGljIGNoYXIgY21wcm9tW1BST01QVEwrMV07CQkv KiBQcm9ncmFtJ3MgcHJvbXB0ICovCitzdGF0aWMgY2hhciBjbXByeHhbUFJPTVBUTCsxXTsJCS8q IFByb2dyYW0ncyBwcm9tcHQsIHVuZXZhbHVhdGVkICovCisjZW5kaWYgLyogRENNREJVRiAqLwor CisvKiBDb21tYW5kIGJ1ZmZlciBwb2ludGVycyAqLworCisjZGVmaW5lIFBQVkxFTiBWTkFNTAkJ CS8qIDIwMDgwMzA1IFdvbGZyYW0gU2FuZyAod2FzIDI0KSAqLworY2hhciBwcHZuYW1idWZbUFBW TEVOKzFdID0geyBOVUwsIE5VTCB9OworCitjaGFyICogY21icHRyID0gTlVMTDsJCQkvKiBDdXJy ZW50IHBvc2l0aW9uIChmb3IgZXhwb3J0KSAqLworCitzdGF0aWMgY2hhciAqYnAsICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ3VycmVudCBjb21tYW5kIGJ1ZmZlciBwb3NpdGlvbiAqLworICAg ICpwcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIGN1cnJlbnQg ZmllbGQgKi8KKyAgICAqbnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFy dCBvZiBuZXh0IGZpZWxkICovCisKK3N0YXRpYyBpbnQgdW5ndywJCQkvKiBGb3IgdW5nZXR0aW5n IHdvcmRzICovCisgICAgYXR4bjsJCQkJLyogRXhwYW5zaW9uIGJ1ZmZlciAoYXR4YnVmKSBsZW5n dGggKi8KKworI2lmZGVmIE9TMgorZXh0ZXJuIGludCB3aWRlcmVzdWx0OworI2VuZGlmIC8qIE9T MiAqLworCitleHRlcm4gaW50IGNtZF9jb2xzLCBjbWRfcm93cywgbG9jYWwsIHF1aWV0OworCisj aWZkZWYgVE5DT0RFCisjaWZkZWYgSUFDCisjdW5kZWYgSUFDCisjZW5kaWYgLyogSUFDICovCisj ZGVmaW5lIElBQyAyNTUKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworX1BST1RPVFlQKCBzdGF0aWMg aW50IGd0d29yZCwgKGludCkgKTsKK19QUk9UT1RZUCggc3RhdGljIGludCBhZGRidWYsIChjaGFy ICopICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgc2V0YXRtLCAoY2hhciAqLCBpbnQpICk7Citf UFJPVE9UWVAoIHN0YXRpYyBWT0lEIGNtZG5ld2wsIChjaGFyKSApOworX1BST1RPVFlQKCBzdGF0 aWMgVk9JRCBjbWRjaGFyZGVsLCAodm9pZCkgKTsKK19QUk9UT1RZUCggc3RhdGljIFZPSUQgY21k ZWNobywgKGNoYXIsIGludCkgKTsKK19QUk9UT1RZUCggc3RhdGljIGludCB0ZXN0LCAoaW50LCBp bnQpICk7CisjaWZkZWYgR0VNRE9TCitfUFJPVE9UWVAoIGV4dGVybiBjaGFyICpzdHJjaHIsIChj aGFyICosIGludCkgKTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKworZXh0ZXJuIGNoYXIgKiBkZnR0 eTsKKworLyogVGhlIGZvbGxvd2luZyBhcmUgZm9yIHVzZSB3aXRoIGNoYWluZWQgRkRCJ3MgKi8K Kworc3RhdGljIGludCBjcmZsYWcgPSAwOwkJCS8qIENhcnJpYWdlIHJldHVybiB3YXMgdHlwZWQg Ki8KK3N0YXRpYyBpbnQgcW1mbGFnID0gMDsJCQkvKiBRdWVzdGlvbiBtYXJrIHdhcyB0eXBlZCAq Lworc3RhdGljIGludCBlc2ZsYWcgPSAwOwkJCS8qIEVzY2FwZSB3YXMgdHlwZWQgKi8KKworLyog RGlyZWN0b3J5IHNlcGFyYXRvciAqLworCisjaWZkZWYgR0VNRE9TCitzdGF0aWMgY2hhciBkaXJz ZXAgPSAnXFwnOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorc3RhdGljIGNoYXIgZGlyc2Vw ID0gJzonOworI2Vsc2UKKyNpZmRlZiBNQUMKK3N0YXRpYyBjaGFyIGRpcnNlcCA9ICc6JzsKKyNl bHNlCisjaWZkZWYgVk1TCitzdGF0aWMgY2hhciBkaXJzZXAgPSAnLic7CisjZWxzZQorI2lmZGVm IFNUUkFUVVMKK3N0YXRpYyBjaGFyIGRpcnNlcCA9ICc+JzsKKyNlbHNlCitzdGF0aWMgY2hhciBk aXJzZXAgPSAnLyc7CQkvKiBVTklYLCBPUy8yLCBPUy05LCBBbWlnYSwgZXRjLiAqLworI2VuZGlm IC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIEdFTURPUyAqLworCisvKiAgSCBBIFMgTiBP IFAgQSBUIEggICovCisKKy8qICBSZXR1cm5zIDAgaWYgZmlsZXNwZWMgcyBpbmNsdWRlcyBhbnkg cGF0aCBzZWdtZW50czsgMSBpZiBpdCBkb2Vzbid0LiAqLworCitpbnQKK2hhc25vcGF0aChzKSBj aGFyICogczsgeworICAgIGNoYXIgKiBwID0gTlVMTDsKKyAgICBpZiAoIXMpIHJldHVybigwKTsK KyAgICBpZiAoISpzKSByZXR1cm4oMCk7CisgICAgenN0cmlwKHMsJnApOworICAgIHJldHVybihj a3N0cmNtcChzLHAsQ0tNQVhQQVRILGZpbGVjYXNlKSA9PSAwID8gMSA6IDApOworfQorCisvKiAg QyBLIFMgUCBSIEUgQSBEICAtLSAgUHJpbnQgc3RyaW5nIGRvdWJsZS1zcGFjZWQgICovCisKK3N0 YXRpYyBjaGFyICogc3BycHRyID0gTlVMTDsKKworc3RhdGljIGNoYXIgKgorY2tzcHJlYWQocykg Y2hhciAqIHM7IHsKKyAgICBpbnQgbiA9IDA7CisgICAgY2hhciAqIHA7CisgICAgbiA9IHN0cmxl bihzKTsKKyAgICBpZiAoc3BycHRyKQorICAgICAgZnJlZShzcHJwdHIpOworICAgIHNwcnB0ciA9 IG1hbGxvYyhuICsgbiArIDMpOworICAgIGlmIChzcHJwdHIpIHsKKwlwID0gc3BycHRyOworCXdo aWxlICgqcykgeworCSAgICAqcCsrID0gKnMrKzsKKwkgICAgKnArKyA9IFNQOworCX0KKwkqcCA9 IE5VTDsKKyAgICB9CisgICAgcmV0dXJuKHNwcnB0ciA/IHNwcnB0ciA6ICIiKTsKK30KKworLyog IFQgRSBTIFQgIC0tICBCaXQgdGVzdCAgKi8KKworc3RhdGljIGludAordGVzdCh4LG0pIGludCB4 LCBtOyB7IC8qICBSZXR1cm5zIDEgaWYgYW55IGJpdHMgZnJvbSBtIGFyZSBvbiBpbiB4LCBlbHNl IDAgICovCisgICAgcmV0dXJuKCh4ICYgbSkgPyAxIDogMCk7Cit9CisKKy8qICBLIFcgRCBIIEUg TCBQICAtLSAgR2l2ZW4gYSBrZXl3b3JkIHRhYmxlLCBwcmludCBrZXl3b3JkcyBpbiBjb2x1bW5z LiAgKi8KKy8qCisgIENhbGwgd2l0aDoKKyAgICBzICAgICAtIGtleXdvcmQgdGFibGUKKyAgICBu ICAgICAtIG51bWJlciBvZiBlbnRyaWVzCisgICAgcGF0ICAgLSBwYXR0ZXJuIChsZWZ0IHN1YnN0 cmluZykgdGhhdCBtdXN0IG1hdGNoIGZvciBlYWNoIGtleXdvcmQKKyAgICBwcmUgICAtIHByZWZp eCB0byBhZGQgdG8gZWFjaCBrZXl3b3JkCisgICAgcG9zdCAgLSBzdWZmaXggdG8gYWRkIHRvIGVh Y2gga2V5d29yZAorICAgIG9mZiAgIC0gb2Zmc2V0IG9uIGZpcnN0IHNjcmVlbmZ1bCwgYWxsb3dp bmcgcm9vbSBmb3IgaW50cm9kdWN0b3J5IHRleHQKKyAgICB4aGxwICAtIDEgdG8gcHJpbnQgYW55 IENNX0lOViBrZXl3b3JkcyB0aGF0IGFyZSBub3QgYWxzbyBhYmJyZXZpYXRpb25zLgorICAgICAg ICAgICAgMiB0byBwcmludCBDTV9JTlYga2V5d29yZHMgaWYgQ01fSExQIGFsc28gc2V0CisgICAg ICAgICAgICA0IGlmIGl0J3MgYSBzd2l0Y2ggdGFibGUgKHRvIHNob3cgJzonIGlmIENNX0FSRykK KworICBBcnJhbmdlcyBrZXl3b3JkcyBpbiBjb2x1bW5zIHdpdGggd2lkdGggYmFzZWQgb24gbG9u Z2VzdCBrZXl3b3JkLgorICBEb2VzICJtb3JlPyIgcHJvbXB0aW5nIGF0IGVuZCBvZiBzY3JlZW4u CisgIFVzZXMgZ2xvYmFsIGNtZF9yb3dzIGFuZCBjbWRfY29scyBmb3Igc2NyZWVuIHNpemUuCisq LworVk9JRAora3dkaGVscChzLG4scGF0LHByZSxwb3N0LG9mZix4aGxwKQorICAgIHN0cnVjdCBr ZXl0YWIgc1tdOyBpbnQgbiwgb2ZmLCB4aGxwOyBjaGFyICpwYXQsICpwcmUsICpwb3N0OworLyog a3dkaGVscCAqLyB7CisKKyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBjYzsKKyAgICBpbnQg Y29scywgaGVpZ2h0LCBpLCBqLCBrLCBsYywgbjIgPSAwOworICAgIGNoYXIgKmIgPSBOVUxMLCAq cCwgKnE7CisgICAgY2hhciAqcGEsICpweDsKKyAgICBjaGFyICoqczIgPSBOVUxMOworICAgIGNo YXIgKnRtcGJ1ZiA9IE5VTEw7CisKKyAgICBjYyA9IHN0cmxlbihwYXQpOworCisgICAgaWYgKCFz KSByZXR1cm47CQkJLyogTm90aGluZyB0byBkbyAqLworICAgIGlmIChuIDwgMSkgcmV0dXJuOwkJ CS8qIERpdHRvICovCisgICAgaWYgKG9mZiA8IDApIG9mZiA9IDA7CQkvKiBPZmZzZXQgZm9yIGZp cnN0IHBhZ2UgKi8KKyAgICBpZiAoIXByZSkgcHJlID0gIiI7CQkJLyogSGFuZGxlIG51bGwgc3Ry aW5nIHBvaW50ZXJzICovCisgICAgaWYgKCFwb3N0KSBwb3N0ID0gIiI7CisgICAgbGMgPSBvZmY7 CQkJCS8qIFNjcmVlbi1saW5lIGNvdW50ZXIgKi8KKworICAgIGlmICh4aGxwICYgNCkJCQkvKiBG b3Igc3dpdGNoZXMgKi8KKyAgICAgIHRtcGJ1ZiA9IChjaGFyICopbWFsbG9jKFRNUEJVRlNJWisx KTsKKworICAgIGlmICgoczIgPSAoY2hhciAqKikgbWFsbG9jKG4gKiBzaXplb2YoY2hhciAqKSkp KSB7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewkvKiBGaW5kIGxvbmdlc3Qga2V5d29yZCAq LworCSAgICBzMltpXSA9IE5VTEw7CisJICAgIGlmIChja3N0cmNtcChzW2ldLmt3ZCxwYXQsY2Ms MCkpCisJICAgICAgY29udGludWU7CisKKwkgICAgaWYgKHNbaV0uZmxncyAmIENNX1BTSAkvKiBO T1BVU0ggb3Igbm9wdXNoIHNjcmVlbmluZyAqLworI2lmbmRlZiBOT1BVU0gKKwkJJiYgbm9wdXNo CisjZW5kaWYgLyogTk9QVVNIICovCisJCSkKKwkgICAgICBjb250aW51ZTsKKwkgICAgaWYgKHNb aV0uZmxncyAmIENNX0xPQwkvKiBOT0xPQ0FMIG9yIG5vbG9jYWwgc2NyZWVuaW5nICovCisjaWZu ZGVmIE5PTE9DQUwKKwkJJiYgbm9sb2NhbAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKwkJKQorCSAg ICAgIGNvbnRpbnVlOworCisJICAgIGlmIChzW2ldLmZsZ3MgJiBDTV9JTlYpIHsKKyNpZmRlZiBD T01NRU5UCisvKiBUaGlzIGNvZGUgZG9lcyBub3Qgc2hvdyBpbnZpc2libGUga2V5d29yZHMgYXQg YWxsIGV4Y2VwdCBmb3IgImhlbHAgPyIgKi8KKy8qIGFuZCB0aGVuIG9ubHkgaGVscCB0b3BpY3Mg KENNX0hMUCkgaW4gdGhlIHRvcC1sZXZlbCBrZXl3b3JkIGxpc3QuICovCisKKwkJaWYgKCh4aGxw ICYgMikgPT0gMCkKKwkJICBjb250aW51ZTsKKwkJZWxzZSBpZiAoKHNbaV0uZmxncyAmIENNX0hM UCkgPT0gMCkKKwkJICBjb250aW51ZTsKKyNlbHNlCisvKiBUaGlzIGNvZGUgc2hvd3MgaW52aXNp YmxlIGtleXdvcmRzIHRoYXQgYXJlIG5vdCBhbHNvIGFiYnJldmlhdGlvbnMgd2hlbiAqLworLyog PyB3YXMgdHlwZWQgQUZURVIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmllbGQgc28gdGhlIHVzZXIg Y2FuIGZpbmQgb3V0ICovCisvKiB3aGF0IHRoZXkgYXJlIGFuZCAoZm9yIGV4YW1wbGUpIHdoeSBj b21wbGV0aW9uIGRvZXNuJ3Qgd29yayBhdCB0aGlzIHBvaW50ICovCisKKwkJaWYgKHNbaV0uZmxn cyAmIENNX0FCUikKKwkJICBjb250aW51ZTsKKwkJZWxzZSBpZiAoKHhobHAgJiAzKSA9PSAwKQor CQkgIGNvbnRpbnVlOworCQllbHNlIGlmICgoeGhscCAmIDIpICYmICgoc1tpXS5mbGdzICYgQ01f SExQKSA9PSAwKSkKKwkJICBjb250aW51ZTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIH0K KwkgICAgaiA9IHN0cmxlbihzW2ldLmt3ZCk7CisJICAgIGlmICghKHhobHAgJiA0KSB8fCAhdG1w YnVmKSB7IC8qIFJlZ3VsYXIga2V5d29yZCB0YWJsZSAqLworCQlzMltuMisrXSA9IHNbaV0ua3dk OwkvKiBDb3B5IHBvaW50ZXJzIHRvIHZpc2libGUgb25lcyAqLworCSAgICB9IGVsc2UgewkJCS8q IFN3aXRjaGVzICovCisJCWNrbWFrbXNnKHRtcGJ1ZiwJLyogTWFrZSBhIGNvcHkgdGhhdCBzaG93 cyAiOiIgaWYgKi8KKwkJCSBUTVBCVUZTSVosCS8qIHRoZSBzd2l0Y2ggdGFrZXMgYW4gYXJndW1l bnQuICovCisJCQkgc1tpXS5rd2QsCisJCQkgKHNbaV0uZmxncyAmIENNX0FSRykgPyAiOiIgOiAi IiwKKwkJCSBOVUxMLAorCQkJIE5VTEwKKwkJCSApOworCQltYWtlc3RyKCYoczJbbjJdKSx0bXBi dWYpOworCQlpZiAoc1tpXS5mbGdzICYgQ01fQVJHKSBqKys7CisJCW4yKys7CisJICAgIH0KKwkg ICAgaWYgKGogPiB3aWR0aCkKKwkgICAgICB3aWR0aCA9IGo7CisJfQorCS8qIENvbHVtbiB3aWR0 aCAqLworCW4gPSBuMjsKKyAgICB9CisgICAgaWYgKHMyICYmIChiID0gKGNoYXIgKikgbWFsbG9j KGNtZF9jb2xzICsgMSkpKSB7IC8qIE1ha2UgYSBsaW5lIGJ1ZmZlciAgICovCisJY2hhciAqIGJ4 OworCWJ4ID0gYiArIGNtZF9jb2xzOworCXdpZHRoICs9IChpbnQpc3RybGVuKHByZSkgKyAoaW50 KXN0cmxlbihwb3N0KSArIDI7CisJY29scyA9IGNtZF9jb2xzIC8gd2lkdGg7CS8qIEhvdyBtYW55 IGNvbHVtbnM/ICovCisJaWYgKGNvbHMgPCAxKSBjb2xzID0gMTsKKwloZWlnaHQgPSBuIC8gY29s czsJCS8qIEhvdyBsb25nIGlzIGVhY2ggY29sdW1uPyAqLworCWlmIChuICUgY29scykgaGVpZ2h0 Kys7CQkvKiBBZGQgb25lIGZvciByZW1haW5kZXIsIGlmIGFueSAqLworCisJZm9yIChpID0gMDsg aSA8IGhlaWdodDsgaSsrKSB7CSAgICAvKiBMb29wIGZvciBlYWNoIHJvdyAqLworCSAgICBmb3Ig KGogPSAwOyBqIDwgY21kX2NvbHM7IGorKykgIC8qIEZpcnN0IGZpbGwgcm93IHdpdGggYmxhbmtz ICovCisJICAgICAgYltqXSA9IFNQOworCSAgICBmb3IgKGogPSAwOyBqIDwgY29sczsgaisrKSB7 ICAgIC8qIExvb3AgZm9yIGVhY2ggY29sdW1uIGluIHJvdyAqLworCQlrID0gaSArIChqICogaGVp Z2h0KTsgICAgICAgLyogSW5kZXggb2YgbmV4dCBrZXl3b3JkICovCisJCWlmIChrIDwgbikgewkJ ICAgIC8qIEluIHJhbmdlPyAqLworCQkgICAgcGEgPSBwcmU7CisJCSAgICBweCA9IHBvc3Q7CisJ CSAgICBwID0gczJba107CQkgICAgLyogUG9pbnQgdG8gdmVyYiBuYW1lICovCisJCSAgICBxID0g YiArIChqICogd2lkdGgpICsgMTsgLyogV2hlcmUgdG8gY29weSBpdCB0byAqLworCQkgICAgd2hp bGUgKChxIDwgYngpICYmICgqcSsrID0gKnBhKyspKSA7IC8qIENvcHkgcHJlZml4ICovCisJCSAg ICBxLS07CQkgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJICAgIHdo aWxlICgocSA8IGJ4KSAmJiAoKnErKyA9ICpwKyspKSA7CSAvKiBDb3B5IGZpbGVuYW1lICovCisJ CSAgICBxLS07CQkgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJICAg IHdoaWxlICgocSA8IGJ4KSAmJiAoKnErKyA9ICpweCsrKSkgOyAvKiBDb3B5IHN1ZmZpeCAqLwor CQkgICAgaWYgKGogPCBjb2xzIC0gMSkgeworCQkJcS0tOworCQkJKnEgPSBTUDsJLyogUmVwbGFj ZSB0aGUgc3BhY2UgKi8KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHAgPSBiICsgY21kX2Nv bHMgLSAxOwkvKiBMYXN0IGNoYXIgaW4gbGluZSAqLworCSAgICB3aGlsZSAoKnAtLSA9PSBTUCkg OwkvKiBUcmltICovCisJICAgICoocCsyKSA9IE5VTDsKKwkgICAgcHJpbnRmKCIlc1xuIixiKTsJ CS8qIFByaW50IHRoZSBsaW5lICovCisJICAgIGlmICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsg LyogU2NyZWVuIGZ1bGw/ICovCisJCWlmICghYXNrbW9yZSgpKQkJLyogRG8gbW9yZS1wcm9tcHRp bmcuLi4gKi8KKwkJICBnb3RvIHhrd2RoZWxwOworCQllbHNlCisJCSAgbGMgPSAwOworCSAgICB9 CisJfQorCS8qIHByaW50ZigiXG4iKTsgKi8JCS8qIEJsYW5rIGxpbmUgYXQgZW5kIG9mIHJlcG9y dCAqLworICAgIH0gZWxzZSB7CQkJCS8qIE1hbGxvYyBmYWlsdXJlLCBubyBjb2x1bW5zICovCisJ Zm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICBpZiAoc1tpXS5mbGdzICYgQ01fSU5WKQkv KiBVc2Ugb3JpZ2luYWwga2V5d29yZCB0YWJsZSAqLworCSAgICAgIGNvbnRpbnVlOwkJCS8qIHNr aXBwaW5nIGludmlzaWJsZSBlbnRyaWVzICovCisJICAgIHByaW50ZigiJXMlcyVzXG4iLHByZSxz W2ldLmt3ZCxwb3N0KTsKKwkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkgeyAvKiBTY3Jl ZW4gZnVsbD8gKi8KKwkJaWYgKCFhc2ttb3JlKCkpCQkvKiBEbyBtb3JlLXByb21wdGluZy4uLiAq LworCQkgIGdvdG8geGt3ZGhlbHA7CisJCWVsc2UKKwkJICBsYyA9IDA7CisJICAgIH0KKwl9Cisg ICAgfQorICB4a3dkaGVscDoKKyAgICBpZiAoeGhscCAmIDQpIHsKKwlpZiAodG1wYnVmKSBmcmVl KChjaGFyICopdG1wYnVmKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCSAgaWYgKHMyW2ld KSBmcmVlKHMyW2ldKTsKKyAgICB9CisgICAgaWYgKHMyKSBmcmVlKHMyKTsJCQkvKiBGcmVlIGFy cmF5IGNvcHkgKi8KKyAgICBpZiAoYikgZnJlZShiKTsJCQkvKiBGcmVlIGxpbmUgYnVmZmVyICov CisgICAgcmV0dXJuOworfQorCisvKiAgWCBGIEkgTCBIIEUgTCBQICAtLSAgR2l2ZW4gYSBmaWxl IGxpc3QsIHByaW50IG5hbWVzIGluIGNvbHVtbnMuICAqLworLyoKKyAgQ2FsbCB3aXRoOgorICAg IG4gICAgIC0gbnVtYmVyIG9mIGVudHJpZXMKKyAgICBwcmUgICAtIHByZWZpeCB0byBhZGQgdG8g ZWFjaCBmaWxlbmFtZQorICAgIHBvc3QgIC0gc3VmZml4IHRvIGFkZCB0byBlYWNoIGZpbGVuYW1l CisgICAgb2ZmICAgLSBvZmZzZXQgb24gZmlyc3Qgc2NyZWVuZnVsLCBhbGxvd2luZyByb29tIGZv ciBpbnRyb2R1Y3RvcnkgdGV4dAorICAgIGNtZGlyZmxnIC0gMSBpZiBvbmx5IGRpcmVjdG9yeSBu YW1lcyBzaG91bGQgYmUgbGlzdGVkLCAwIHRvIGxpc3QgYWxsIGZpbGVzCisgICAgZnMgICAgLSBj YWxsIGZpbGVzZWxlY3QoKSB0byBkZWNpZGUgd2hldGhlciB0byBpbmNsdWRlIGVhY2ggZmlsZS4K KyAgICBUaGUgcmVzdCBvZiB0aGUgYXJncyBhcmUgdGhlIHNhbWUgYXMgZm9yIGZpbGVzZWxlY3Qo KS4KKworICBBcnJhbmdlcyBmaWxlbmFtZXMgaW4gY29sdW1ucyB3aXRoIHdpZHRoIGJhc2VkIG9u IGxvbmdlc3QgZmlsZW5hbWUuCisgIERvZXMgIm1vcmU/IiBwcm9tcHRpbmcgYXQgZW5kIG9mIHNj cmVlbi4KKyAgVXNlcyBnbG9iYWwgY21kX3Jvd3MgYW5kIGNtZF9jb2xzIGZvciBzY3JlZW4gc2l6 ZS4KKyovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCit4ZmlsaGVscCgKKyAgICBpbnQgbiwgY2hh ciAqcHJlLCBjaGFyICpwb3N0LCBpbnQgb2ZmLCBpbnQgY21kaXJmbGFnLAorICAgIGludCBmcywg Y2hhciAqc2EsIGNoYXIgKnNiLCBjaGFyICpzbmEsIGNoYXIgKnNuYiwKKyAgICBDS19PRkZfVCBt aW5zaXosIENLX09GRl9UIG1heHNpeiwKKyAgICBpbnQgbmJ1LCBpbnQgbnhsaXN0LAorICAgIGNo YXIgKiogeGxpc3QKKykKKyNlbHNlCit4ZmlsaGVscChuLHByZSxwb3N0LG9mZixjbWRpcmZsZywK KwkgZnMsc2Esc2Isc25hLHNuYixtaW5zaXosbWF4c2l6LG5idSxueGxpc3QseGxpc3QpCisgICAg aW50IG4sIG9mZjsgY2hhciAqcHJlLCAqcG9zdDsgaW50IGNtZGlyZmxnOworICAgIGludCBmczsg Y2hhciAqc2EsKnNiLCpzbmEsKnNuYjsgQ0tfT0ZGX1QgbWluc2l6LG1heHNpejsKKyAgICBpbnQg bmJ1LG54bGlzdDsgY2hhciAqKiB4bGlzdDsKKyNlbmRpZgkvKiBDS19BTlNJQyAqLworIHsKKyAg ICBjaGFyIGZpbGJ1ZltDS01BWFBBVEggKyAxXTsJCS8qIFRlbXAgYnVmZmVyIGZvciBvbmUgZmls ZW5hbWUgKi8KKyAgICBpbnQgd2lkdGggPSAwOworICAgIGludCBjb2xzLCBoZWlnaHQsIGksIGos IGssIGxjLCBuMiA9IDAsIHJjID0gMCwgaXRzYWRpciA9IDA7CisgICAgY2hhciAqYiA9IE5VTEws ICpwLCAqcTsKKyAgICBjaGFyICpwYSwgKnB4OworICAgIGNoYXIgKipzMiA9IE5VTEw7CisjaWZk ZWYgVk1TCisgICAgY2hhciAqIGNkcCA9IHpndGRpcigpOworI2VuZGlmIC8qIFZNUyAqLworCisg ICAgaWYgKG4gPCAxKSByZXR1cm4oMCk7CisgICAgaWYgKG9mZiA8IDApIG9mZiA9IDA7CQkvKiBP ZmZzZXQgZm9yIGZpcnN0IHBhZ2UgKi8KKyAgICBpZiAoIXByZSkgcHJlID0gIiI7CQkJLyogSGFu ZGxlIG51bGwgc3RyaW5nIHBvaW50ZXJzICovCisgICAgaWYgKCFwb3N0KSBwb3N0ID0gIiI7CisK KyAgICBsYyA9IG9mZjsJCQkJLyogU2NyZWVuLWxpbmUgY291bnRlciAqLworCisgICAgaWYgKChz MiA9IChjaGFyICoqKSBtYWxsb2MobiAqIHNpemVvZihjaGFyICopKSkpIHsKKwlmb3IgKGkgPSAw OyBpIDwgbjsgaSsrKSB7CS8qIExvb3AgdGhyb3VnaCBmaWxlbmFtZXMgKi8KKwkgICAgaXRzYWRp ciA9IDA7CisJICAgIHMyW2ldID0gTlVMTDsJCS8qIEluaXRpYWxpemUgZWFjaCBwb2ludGVyIHRv IE5VTEwgKi8KKwkgICAgem5leHQoZmlsYnVmKTsJCS8qIEdldCBuZXh0IGZpbGVuYW1lICovCisJ ICAgIGlmICghZmlsYnVmWzBdKQkJLyogU2hvdWxkbid0IGhhcHBlbiAqLworCSAgICAgIGJyZWFr OworI2lmZGVmIENPTU1FTlQKKwkgICAgaXRzYWRpciA9IGlzZGlyKGZpbGJ1Zik7CS8qIElzIGl0 IGEgZGlyZWN0b3J5PyAqLworCSAgICBpZiAoY21kaXJmbGcgJiYgIWl0c2FkaXIpCS8qIE5vLCBs aXN0aW5nIGRpcmVjdG9yaWVzIG9ubHk/ICovCisJICAgICAgY29udGludWU7CQkJLyogU28gc2tp cCB0aGlzIG9uZS4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIGlmIChmcykgaWYgKGZp bGVzZWxlY3QoZmlsYnVmLAorCQkJICAgc2Esc2Isc25hLHNuYiwKKwkJCSAgIG1pbnNpeixtYXhz aXosbmJ1LG54bGlzdCx4bGlzdCkgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OworCSAgICB9CisjaWZkZWYgVk1TCisJICAgIGNrc3RybmNweShmaWxidWYsenJlbG5hbWUoZmls YnVmLGNkcCksQ0tNQVhQQVRIKTsKKyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgaiA9IHN0cmxlbihm aWxidWYpOworI2lmbmRlZiBWTVMKKwkgICAgaWYgKGl0c2FkaXIgJiYgaiA8IENLTUFYUEFUSCAt IDEgJiYgaiA+IDApIHsKKwkJaWYgKGZpbGJ1ZltqLTFdICE9IGRpcnNlcCkgeworCQkgICAgZmls YnVmW2orK10gPSBkaXJzZXA7CisJCSAgICBmaWxidWZbal0gPSBOVUw7CisJCX0KKwkgICAgfQor I2VuZGlmIC8qIFZNUyAqLworCSAgICBpZiAoIShzMltuMl0gPSBtYWxsb2MoaisxKSkpIHsKKwkJ cHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCXJjID0gLTk7CisJCWdv dG8geGZpbGhlbHA7CisJICAgIH0KKwkgICAgaWYgKGogPD0gQ0tNQVhQQVRIKSB7CisJCXN0cmNw eShzMltuMl0sZmlsYnVmKTsKKwkJbjIrKzsKKwkgICAgfSBlbHNlIHsKKwkJcHJpbnRmKCI/TmFt ZSB0b28gbG9uZyAtICVzXG4iLCBmaWxidWYpOworCQlyYyA9IC05OworCQlnb3RvIHhmaWxoZWxw OworCSAgICB9CisJICAgIGlmIChqID4gd2lkdGgpCQkvKiBHZXQgd2lkdGggb2Ygd2lkZXN0IG9u ZSAqLworCSAgICAgIHdpZHRoID0gajsKKwl9CisJbiA9IG4yOwkJCQkvKiBIb3cgbWFueSB3ZSBh Y3R1YWxseSBnb3QgKi8KKyAgICB9CisgICAgc2hfc29ydChzMixOVUxMLG4sMCwwLGZpbGVjYXNl KTsJLyogQWxwaGFiZXRpemUgdGhlIGxpc3QgKi8KKworICAgIHJjID0gMTsKKyAgICBpZiAoczIg JiYgKGIgPSAoY2hhciAqKSBtYWxsb2MoY21kX2NvbHMgKyAxKSkpIHsgLyogTWFrZSBhIGxpbmUg YnVmZmVyICovCisJY2hhciAqIGJ4OworCWJ4ID0gYiArIGNtZF9jb2xzOworCXdpZHRoICs9IChp bnQpc3RybGVuKHByZSkgKyAoaW50KXN0cmxlbihwb3N0KSArIDI7CisJY29scyA9IGNtZF9jb2xz IC8gd2lkdGg7CS8qIEhvdyBtYW55IGNvbHVtbnM/ICovCisJaWYgKGNvbHMgPCAxKSBjb2xzID0g MTsKKwloZWlnaHQgPSBuIC8gY29sczsJCS8qIEhvdyBsb25nIGlzIGVhY2ggY29sdW1uPyAqLwor CWlmIChuICUgY29scykgaGVpZ2h0Kys7CQkvKiBBZGQgb25lIGZvciByZW1haW5kZXIsIGlmIGFu eSAqLworCisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CSAgICAvKiBMb29wIGZvciBl YWNoIHJvdyAqLworCSAgICBmb3IgKGogPSAwOyBqIDwgY21kX2NvbHM7IGorKykgIC8qIEZpcnN0 IGZpbGwgcm93IHdpdGggYmxhbmtzICovCisJICAgICAgYltqXSA9IFNQOworCSAgICBmb3IgKGog PSAwOyBqIDwgY29sczsgaisrKSB7ICAgIC8qIExvb3AgZm9yIGVhY2ggY29sdW1uIGluIHJvdyAq LworCQlrID0gaSArIChqICogaGVpZ2h0KTsgICAgICAgLyogSW5kZXggb2YgbmV4dCBmaWxlbmFt ZSAqLworCQlpZiAoayA8IG4pIHsJCSAgICAvKiBJbiByYW5nZT8gKi8KKwkJICAgIHBhID0gcHJl OworCQkgICAgcHggPSBwb3N0OworCQkgICAgcCA9IHMyW2tdOwkJICAgICAgICAgICAgICAgLyog UG9pbnQgdG8gZmlsZW5hbWUgKi8KKwkJICAgIHEgPSBiICsgKGogKiB3aWR0aCkgKyAxOyAgICAg ICAgICAgICAvKiBhbmQgZGVzdGluYXRpb24gKi8KKwkJICAgIHdoaWxlICgocSA8IGJ4KSAmJiAo KnErKyA9ICpwYSsrKSkgOyAvKiBDb3B5IHByZWZpeCAqLworCQkgICAgcS0tOwkJICAgICAgICAg ICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCisJCSAgICB3aGlsZSAoKHEgPCBieCkgJiYg KCpxKysgPSAqcCsrKSkgOwkgLyogQ29weSBmaWxlbmFtZSAqLworCQkgICAgcS0tOwkJICAgICAg ICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCisJCSAgICB3aGlsZSAoKHEgPCBieCkg JiYgKCpxKysgPSAqcHgrKykpIDsgLyogQ29weSBzdWZmaXggKi8KKwkJICAgIGlmIChqIDwgY29s cyAtIDEpIHsKKwkJCXEtLTsKKwkJCSpxID0gU1A7CS8qIFJlcGxhY2UgdGhlIHNwYWNlICovCisJ CSAgICB9CisJCX0KKwkgICAgfQorCSAgICBwID0gYiArIGNtZF9jb2xzIC0gMTsJLyogTGFzdCBj aGFyIGluIGxpbmUgKi8KKwkgICAgd2hpbGUgKCpwLS0gPT0gU1ApIDsJLyogVHJpbSAqLworCSAg ICAqKHArMikgPSBOVUw7CisJICAgIHByaW50ZigiJXNcbiIsYik7CQkvKiBQcmludCB0aGUgbGlu ZSAqLworCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8qIFNjcmVlbiBmdWxsPyAq LworCQlpZiAoIWFza21vcmUoKSkgewkvKiBEbyBtb3JlLXByb21wdGluZy4uLiAqLworCQkgICAg cmMgPSAwOworCQkgICAgZ290byB4ZmlsaGVscDsKKwkJfSBlbHNlCisJCSAgbGMgPSAwOworCSAg ICB9CisJfQorCXByaW50ZigiXG4iKTsJCQkvKiBCbGFuayBsaW5lIGF0IGVuZCBvZiByZXBvcnQg Ki8KKwlnb3RvIHhmaWxoZWxwOworICAgIH0gZWxzZSB7CQkJCS8qIE1hbGxvYyBmYWlsdXJlLCBu byBjb2x1bW5zICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCSAgICB6bmV4dChmaWxi dWYpOworCSAgICBpZiAoIWZpbGJ1ZlswXSkgYnJlYWs7CisJICAgIHByaW50ZigiJXMlcyVzXG4i LHByZSxmaWxidWYscG9zdCk7CisJICAgIGlmICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsgLyog U2NyZWVuIGZ1bGw/ICovCisJCWlmICghYXNrbW9yZSgpKSB7CSAvKiBEbyBtb3JlLXByb21wdGlu Zy4uLiAqLworCQkgICAgcmMgPSAwOworCQkgICAgZ290byB4ZmlsaGVscDsKKwkJfSBlbHNlIGxj ID0gMDsKKwkgICAgfQorCX0KK3hmaWxoZWxwOgorCWlmIChiKSBmcmVlKGIpOworCWZvciAoaSA9 IDA7IGkgPCBuMjsgaSsrKQorCSAgaWYgKHMyW2ldKSBmcmVlKHMyW2ldKTsKKwlpZiAoczIpIGZy ZWUoKGNoYXIgKilzMik7CisJcmV0dXJuKHJjKTsKKyAgICB9Cit9CisKKy8qCisgIFNpbXBsZXIg ZnJvbnQgZW5kIGZvciB4ZmlsaGVscCgpIHdpdGggc2hvcnRlciBhcmcgbGlzdCB3aGVuIG5vCisg IGZpbGUgc2VsZWN0aW9uIGlzIG5lZWRlZC4KKyovCitpbnQKK2ZpbGhlbHAobixwcmUscG9zdCxv ZmYsY21kaXJmbGcpIGludCBuLCBvZmY7IGNoYXIgKnByZSwgKnBvc3Q7IGludCBjbWRpcmZsZzsg eworICAgIHJldHVybih4ZmlsaGVscChuLHByZSxwb3N0LG9mZixjbWRpcmZsZywKKwkJICAgIDAs TlVMTCxOVUxMLE5VTEwsTlVMTCwKKwkJICAgIChDS19PRkZfVCkwLChDS19PRkZfVCkwLDAsMCwo Y2hhciAqKilOVUxMKSk7Cit9CisKKy8qICBDIE0gUyBFIFQgVSBQICAtLSAgU2V0IHVwIGNvbW1h bmQgYnVmZmVycyAgKi8KKworI2lmZGVmIERDTURCVUYKK2ludAorY21zZXR1cCgpIHsKKyAgICBp ZiAoIShjbWRidWYgPSBtYWxsb2MoQ01EQkwgKyA0KSkpIHJldHVybigtMSk7CisgICAgaWYgKCEo c2F2YnVmID0gbWFsbG9jKENNREJMICsgNCkpKSByZXR1cm4oLTEpOworICAgIHNhdmJ1ZlswXSA9 ICdcMCc7CisgICAgaWYgKCEocHJldmNtZCA9IG1hbGxvYyhDTURCTCArIDQpKSkgcmV0dXJuKC0x KTsKKyAgICBwcmV2Y21kWzBdID0gJ1wwJzsKKyAgICBpZiAoIShhdG1idWYgPSBtYWxsb2MoQVRN QkwgKyA0KSkpIHJldHVybigtMSk7CisgICAgaWYgKCEoYXR4YnVmID0gbWFsbG9jKENNREJMICsg NCkpKSByZXR1cm4oLTEpOworICAgIGlmICghKGF0eWJ1ZiA9IG1hbGxvYyhBVE1CTCArIDQpKSkg cmV0dXJuKC0xKTsKKyAgICBpZiAoIShmaWxidWYgPSBtYWxsb2MoQVRNQkwgKyA0KSkpIHJldHVy bigtMSk7CisgICAgaWYgKCEoY21wcm9tID0gbWFsbG9jKFBST01QVEwgKyA0KSkpIHJldHVybigt MSk7CisgICAgaWYgKCEoY21wcnh4ID0gbWFsbG9jKFBST01QVEwgKyA0KSkpIHJldHVybigtMSk7 CisjaWZkZWYgQ0tfUkVDQUxMCisgICAgY21yaW5pKGNtX3JlY2FsbCk7CisjZW5kaWYgLyogQ0tf UkVDQUxMICovCisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIERDTURCVUYgKi8KKworLyog IEMgTSBTIEUgVCBQICAtLSAgU2V0IHRoZSBwcm9ncmFtIHByb21wdC4gICovCisKK1ZPSUQKK2Nt c2V0cChzKSBjaGFyICpzOyB7CisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgY2tzdHJuY3B5KGNt cHJ4eCxzLFBST01QVEwpOworICAgIHBzZXRmID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZsYWcgdGhhdCBwcm9tcHQgaGFzIGJlZW4gc2V0LiAqLworfQorCisvKiAgQyBNIFMgQSBW IFAgIC0tICBTYXZlIGEgY29weSBvZiB0aGUgY3VycmVudCBwcm9tcHQuICAqLworCitWT0lECisj aWZkZWYgQ0tfQU5TSUMKK2Ntc2F2cChjaGFyIHNbXSwgaW50IG4pCisjZWxzZQorY21zYXZwKHMs bikgY2hhciBzW107IGludCBuOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBjbXNhdnAgKi8g eworICAgIGlmIChwc2V0ZikJCQkJLyogQnV0IG5vdCBpZiBubyBwcm9tcHQgaXMgc2V0LiAqLwor ICAgICAgY2tzdHJuY3B5KHMsY21wcnh4LG4pOworfQorCitjaGFyICoKK2NtZ2V0cCgpIHsKKyAg ICByZXR1cm4oY21wcnh4KTsKK30KKworaW50CitjbWdicmsoKSB7CisgICAgcmV0dXJuKGJya2No YXIpOworfQorCitpbnQKK2NtZ2t3ZmxncygpIHsKKyAgICByZXR1cm4oY21rd2ZsZ3MpOworfQor CisvKiAgUCBSIE8gTSBQIFQgIC0tICBJc3N1ZSB0aGUgcHJvZ3JhbSBwcm9tcHQuICAqLworCitW T0lECitwcm9tcHQoZikgeHhfc3RycCBmOyB7CisgICAgY2hhciAqc3gsICpzeTsgaW50IG47Cisj aWZkZWYgQ0tfU1NMCisgICAgZXh0ZXJuIGludCBzc2xfYWN0aXZlX2ZsYWcsIHRsc19hY3RpdmVf ZmxhZzsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IGRp c3BsYXlfZGVtbzsKKworICAgIC8qIElmIHRoZXJlIGlzIGEgZGVtbyBzY3JlZW4gdG8gYmUgZGlz cGxheWVkLCBkaXNwbGF5IGl0ICovCisgICAgaWYgKGRpc3BsYXlfZGVtbyAmJiB4Y21kc3JjID09 IDApIHsKKyAgICAgICAgZGVtb3Njcm4oVkNNRCk7CisgICAgICAgIGRpc3BsYXlfZGVtbyA9IDA7 CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKHBzZXRmID09IDApCQkJLyogSWYg bm8gcHJvbXB0IHNldCwgc2V0IGRlZmF1bHQuICovCisgICAgICBjbXNldHAoZGZwcm9tKTsKKwor ICAgIHN4ID0gY21wcnh4OwkJCS8qIFVuZXZhbHVhdGVkIGNvcHkgKi8KKyAgICBpZiAoZikgewkJ CQkvKiBJZiBjb252ZXJzaW9uIGZ1bmN0aW9uIGdpdmVuICovCisJc3kgPSBjbXByb207CQkJLyog RXZhbHVhdGUgaXQgKi8KKyNpZmRlZiBDT01NRU5UCisJZGVidWcoRjEwMSwicHJvbXB0IHN4Iiwi IixzeCk7CisJZGVidWcoRjEwMSwicHJvbXB0IHN5IiwiIixzeSk7CisjZW5kaWYJLyogQ09NTUVO VCAqLworCW4gPSBQUk9NUFRMOworCWlmICgoKmYpKHN4LCZzeSwmbikgPCAwKQkvKiBJZiBldmFs dWF0aW9uIGZhaWxlZCAqLworCSAgc3ggPSBjbXByeHg7CQkJLyogcmV2ZXJ0IHRvIHVuZXZhbHVh dGVkIGNvcHkgKi8KKwllbHNlIGlmICghKmNtcHJvbSkJCS8qIGRpdHRvIGlmIGl0IGNhbWUgdXAg ZW1wdHkgKi8KKwkgIHN4ID0gY21wcnh4OworCWVsc2UKKwkgIHN4ID0gY21wcm9tOworICAgIH0g ZWxzZQorICAgICAgY2tzdHJuY3B5KGNtcHJvbSxzeCxQUk9NUFRMKTsKKyAgICBjbXByb21bUFJP TVBUTC0xXSA9IE5VTDsKKyAgICBpZiAoISpzeCkJCQkJLyogRG9uJ3QgcHJpbnQgaWYgZW1wdHkg Ki8KKyAgICAgIHJldHVybjsKKworI2lmZGVmIE9TSworICAgIGZwdXRzKHN4LCBzdGRvdXQpOwor I2Vsc2UKKyNpZmRlZiBNQUMKKyAgICBwcmludGYoIiVzIiwgc3gpOworI2Vsc2UKKyNpZmRlZiBJ S1NECisgICAgaWYgKGluc2VydmVyKSB7CQkJLyogUHJpbnQgdGhlIHByb21wdC4gKi8KKyAgICAg ICAgdHRvYyhDUik7CQkJLyogSWYgVEVMTkVUIFNlcnZlciAqLworICAgICAgICB0dG9jKE5VTCk7 CQkJLyogbXVzdCBmb2xsb1cgQ1IgYnkgTlVMICovCisgICAgICAgIHByaW50ZigiJXMiLHN4KTsK KyAgICB9IGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICBwcmludGYoIlxyJXMiLHN4KTsK KyNpZmRlZiBDS19TU0wKKyAgICBpZiAoIShzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9m bGFnKSkKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgIGZmbHVzaChzdGRvdXQpOwkJCS8qIE5v dyEgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPU0sgKi8KK30KKworI2lmbmRlZiBO T1NQTAorVk9JRAorcHVzaGNtZChzKSBjaGFyICogczsgewkJCS8qIEZvciB1c2Ugd2l0aCBJRiBj b21tYW5kLiAqLworICAgIGlmICghcykgcyA9IG5wOworICAgIGNrc3RybmNweShzYXZidWYscyxD TURCTCk7CQkvKiBTYXZlIHRoZSBkZXBlbmRlbnQgY2xhdXNlLCAgKi8KKyAgICBjbXJlcygpOwkJ CQkvKiBhbmQgY2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyLiAqLworICAgIGRlYnVnKEYxMTAsICJw dXNoY21kIHNhdmJ1ZiIsIHNhdmJ1ZiwgMCk7Cit9CisKK1ZPSUQKK3B1c2hxY21kKHMpIGNoYXIg KiBzOyB7CQkJLyogRm9yIHVzZSB3aXRoIEVMU0UgY29tbWFuZC4gKi8KKyAgICBjaGFyIGMsICog cCA9IHNhdmJ1ZjsJCS8qIERlc3QgKi8KKyAgICBpZiAoIXMpIHMgPSBucDsJCQkvKiBTb3VyY2Ug Ki8KKyAgICB3aGlsZSAoKnMpIHsJCQkvKiBHZXQgZmlyc3Qgbm9ud2hpdGVzcGFjZSBjaGFyICov CisJaWYgKCpzICE9IFNQKQorCSAgYnJlYWs7CisJZWxzZQorCSAgcysrOworICAgIH0KKyAgICBp ZiAoKnMgIT0gJ3snKSB7CQkJLyogSWYgaXQncyBub3QgInsiICovCisJcHVzaGNtZChzKTsJCQkv KiBkbyByZWd1bGFyIHB1c2hjbWQgKi8KKwlyZXR1cm47CisgICAgfQorICAgIHdoaWxlICgoYyA9 ICpzKyspKSB7CQkvKiBPdGhlcndpc2UgaW5zZXJ0IHF1b3RlcyAqLworCWlmIChjID09IENNRFEp CisJICAqcCsrID0gQ01EUTsKKwkqcCsrID0gYzsKKyAgICB9CisgICAgY21yZXMoKTsJCQkJLyog YW5kIGNsZWFyIHRoZSBjb21tYW5kIGJ1ZmZlci4gKi8KKyAgICBkZWJ1ZyhGMTEwLCAicHVzaHFj bWQgc2F2YnVmIiwgc2F2YnVmLCAwKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYg Q09NTUVOVAorLyogbm8gbG9uZ2VyIHVzZWQuLi4gKi8KK1ZPSUQKK3BvcGNtZCgpIHsKKyAgICBj a3N0cm5jcHkoY21kYnVmLHNhdmJ1ZixDTURCTCk7CS8qIFB1dCBiYWNrIHRoZSBzYXZlZCBtYXRl cmlhbCAqLworICAgICpzYXZidWYgPSAnXDAnOwkJCS8qIGFuZCBjbGVhciB0aGUgc2F2ZSBidWZm ZXIgKi8KKyAgICBjbXJlcygpOworfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworLyogIEMgTSBS IEUgUyAgLS0gIFJlc2V0IHBvaW50ZXJzIHRvIGJlZ2lubmluZyBvZiBjb21tYW5kIGJ1ZmZlci4g ICovCisKK1ZPSUQKK2NtcmVzKCkgeworICAgIGlud29yZCA9IDA7CQkJCS8qIFdlJ3JlIG5vdCBp biBhIHdvcmQgKi8KKyAgICBjYyA9IDA7CQkJCS8qIENoYXJhY3RlciBjb3VudCBpcyB6ZXJvICov CisKKy8qIEluaXRpYWxpemUgcG9pbnRlcnMgKi8KKworICAgIHBwID0gY21kYnVmOwkJCS8qIEJl Z2lubmluZyBvZiBjdXJyZW50IGZpZWxkICovCisgICAgYnAgPSBjbWRidWY7CQkJLyogQ3VycmVu dCBwb3NpdGlvbiB3aXRoaW4gYnVmZmVyICovCisgICAgbnAgPSBjbWRidWY7CQkJLyogV2hlcmUg dG8gc3RhcnQgbmV4dCBmaWVsZCAqLworCisgICAgY21mbGRmbGdzID0gMDsKKyAgICBjbWZsZ3Mg PSAtNTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBub3QgeWV0IHN0YXJ0ZWQuICov CisgICAgdW5ndyA9IDA7CQkJCS8qIERvbid0IG5lZWQgdG8gdW5nZXQgYSB3b3JkLiAqLworfQor CisvKiAgQyBNIEkgTiBJICAtLSAgQ2xlYXIgdGhlIGNvbW1hbmQgYW5kIGF0b20gYnVmZmVycywg cmVzZXQgcG9pbnRlcnMuICAqLworCisvKgorVGhlIGFyZ3VtZW50IHNwZWNpZmllcyB3aG8gaXMg dG8gZWNobyB0aGUgdXNlcidzIHR5cGVpbiAtLQorICAxIG1lYW5zIHRoZSBjbWQgcGFja2FnZSBl Y2hvZXMKKyAgMCBzb21lYm9keSBlbHNlIChzeXN0ZW0sIGZyb250IGVuZCwgdGVybWluYWwpIGVj aG9lcworKi8KK1ZPSUQKK2NtaW5pKGQpIGludCBkOyB7CisjaWZkZWYgRENNREJVRgorICAgIGlm ICghYXRtYnVmKQorICAgICAgaWYgKGNtc2V0dXAoKTwwKQorCWZhdGFsKCJmYXRhbCBlcnJvcjog dW5hYmxlIHRvIGFsbG9jYXRlIGNvbW1hbmQgYnVmZmVycyIpOworI2VuZGlmIC8qIERDTURCVUYg Ki8KKyNpZmRlZiBVU0VfTUVNQ1BZCisgICAgbWVtc2V0KGNtZGJ1ZiwwLENNREJMKTsKKyAgICBt ZW1zZXQoYXRtYnVmLDAsQVRNQkwpOworI2Vsc2UKKyAgICBmb3IgKGJwID0gY21kYnVmOyBicCA8 IGNtZGJ1ZitDTURCTDsgYnArKykgKmJwID0gTlVMOworICAgIGZvciAoYnAgPSBhdG1idWY7IGJw IDwgYXRtYnVmK0FUTUJMOyBicCsrKSAqYnAgPSBOVUw7CisjZW5kaWYgLyogVVNFX01FTUNQWSAq LworCisgICAgKmF0bWJ1ZiA9ICpzYXZidWYgPSAqYXR4YnVmID0gKmF0eWJ1ZiA9ICpmaWxidWYg PSBOVUw7CisgICAgYmxvY2tsdmwgPSAwOwkJCS8qIEJsb2NrIGxldmVsIGlzIDAgKi8KKyAgICBs aW5lYmVnaW4gPSAxOwkJCS8qIEF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lICovCisgICAgZHB4 ID0gZDsJCQkJLyogR2xvYmFsIGNvcHkgb2YgdGhlIGVjaG8gZmxhZyAqLworICAgIGRlYnVnKEYx MDEsImNtaW5pIGRweCIsIiIsZHB4KTsKKyAgICBjcmZsYWcgPSAwOwkJCQkvKiBSZXNldCBmbGFn cyAqLworICAgIHFtZmxhZyA9IDA7CisgICAgZXNmbGFnID0gMDsKKyNpZmRlZiBDS19SRUNBTEwK KyAgICBub19yZWNhbGwgPSAwOwkJCS8qIFN0YXJ0IG91dCB3aXRoIHJlY2FsbCBlbmFibGVkICov CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgY21yZXMoKTsJCQkJLyogU2V0cyBicCBldGMg Ki8KKyAgICBuZXdjbWQgPSAxOwkJCQkvKiBTZWUgYWRkY21kKCkgKi8KK30KKworI2lmbmRlZiBO T1NQTAorLyoKKyAgVGhlIGZvbGxvd2luZyBiaXRzIGFyZSB0byBhbGxvdyB0aGUgY29tbWFuZCBw YWNrYWdlIHRvIGNhbGwgaXRzZWxmCisgIGluIHRoZSBtaWRkbGUgb2YgYSBwYXJzZS4gIFRvIGRv IHRoaXMsIGJlZ2luIGJ5IGNhbGxpbmcgY21wdXNoLCBhbmQKKyAgZW5kIGJ5IGNhbGxpbmcgY21w b3AuICBBcyB5b3UgY2FuIHNlZSwgdGhpcyBpcyByYXRoZXIgZXhwZW5zaXZlLgorKi8KKyNpZmRl ZiBEQ01EQlVGCitzdHJ1Y3QgY21wIHsKKyAgICBpbnQgaVs1XTsJCQkJLyogc3RhY2sgZm9yIGlu dGVnZXJzICovCisgICAgY2hhciAqY1szXTsJCQkJLyogc3RhY2sgZm9yIHBvaW50ZXJzICovCisg ICAgY2hhciAqYls4XTsJCQkJLyogc3RhY2sgZm9yIGJ1ZmZlciBjb250ZW50cyAqLworfTsKK3N0 cnVjdCBjbXAgKmNtcCA9IDA7CisjZWxzZQoraW50IGNtcF9pW0NNRERFUCsxXVs1XTsJCQkvKiBT dGFjayBmb3IgaW50ZWdlcnMgKi8KK2NoYXIgKmNtcF9jW0NNRERFUCsxXVs1XTsJCS8qIGZvciBt aXNjIHBvaW50ZXJzICovCitjaGFyICpjbXBfYltDTURERVArMV1bN107CQkvKiBmb3IgYnVmZmVy IGNvbnRlbnRzIHBvaW50ZXJzICovCisjZW5kaWYgLyogRENNREJVRiAqLworCitpbnQgY21kZGVw ID0gLTE7CQkJLyogQ3VycmVudCBzdGFjayBkZXB0aCAqLworCitpbnQKK2NtcHVzaCgpIHsJCQkJ LyogU2F2ZSB0aGUgY29tbWFuZCBlbnZpcm9ubWVudCAqLworICAgIGNoYXIgKmNwOwkJCQkvKiBD aGFyYWN0ZXIgcG9pbnRlciAqLworCisgICAgaWYgKGNtZGRlcCA+PSBDTURERVApCQkvKiBFbnRl ciBhIG5ldyBjb21tYW5kIGRlcHRoICovCisgICAgICByZXR1cm4oLTEpOworICAgIGNtZGRlcCsr OworICAgIGRlYnVnKEYxMDEsIiZjbXB1c2ggdG8gZGVwdGgiLCIiLGNtZGRlcCk7CisKKyNpZmRl ZiBEQ01EQlVGCisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBjbXAgaWYgbm90IGFscmVhZHkg ZG9uZSAqLworICAgIGlmICghY21wICYmICEoY21wID0gKHN0cnVjdCBjbXAgKikgbWFsbG9jKHNp emVvZihzdHJ1Y3QgY21wKSooQ01EREVQKzEpKSkpCisgICAgICBmYXRhbCgiY21wdXNoOiBubyBt ZW1vcnkgZm9yIGNtcCIpOworICAgIGNtcFtjbWRkZXBdLmlbMF0gPSBjbWZsZ3M7CQkvKiBGaXJz dCBkbyB0aGUgZ2xvYmFsIGludHMgKi8KKyAgICBjbXBbY21kZGVwXS5pWzFdID0gY21mc2F2Owor ICAgIGNtcFtjbWRkZXBdLmlbMl0gPSBhdHhuOworICAgIGNtcFtjbWRkZXBdLmlbM10gPSB1bmd3 OworCisgICAgY21wW2NtZGRlcF0uY1swXSA9IGJwOwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBvaW50 ZXJzICovCisgICAgY21wW2NtZGRlcF0uY1sxXSA9IHBwOworICAgIGNtcFtjbWRkZXBdLmNbMl0g PSBucDsKKyNlbHNlCisgICAgY21wX2lbY21kZGVwXVswXSA9IGNtZmxnczsJCS8qIEZpcnN0IGRv IHRoZSBnbG9iYWwgaW50cyAqLworICAgIGNtcF9pW2NtZGRlcF1bMV0gPSBjbWZzYXY7CisgICAg Y21wX2lbY21kZGVwXVsyXSA9IGF0eG47CisgICAgY21wX2lbY21kZGVwXVszXSA9IHVuZ3c7CisK KyAgICBjbXBfY1tjbWRkZXBdWzBdID0gYnA7CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMg Ki8KKyAgICBjbXBfY1tjbWRkZXBdWzFdID0gcHA7CisgICAgY21wX2NbY21kZGVwXVsyXSA9IG5w OworI2VuZGlmIC8qIERDTURCVUYgKi8KKworICAgIC8qIE5vdyB0aGUgYnVmZmVycyB0aGVtc2Vs dmVzLiAgQSBsb3Qgb2YgcmVwaXRpdGlvdXMgY29kZS4uLiAqLworCisjaWZkZWYgRENNREJVRgor ICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGNtZGJ1ZikrMSk7CS8qIDA6IENvbW1hbmQgYnVm ZmVyICovCisgICAgaWYgKGNwKSBzdHJjcHkoY3AsY21kYnVmKTsKKyAgICBjbXBbY21kZGVwXS5i WzBdID0gY3A7CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1h bGxvYygoaW50KXN0cmxlbihzYXZidWYpKzEpOwkvKiAxOiBTYXZlIGJ1ZmZlciAqLworICAgIGlm IChjcCkgc3RyY3B5KGNwLHNhdmJ1Zik7CisgICAgY21wW2NtZGRlcF0uYlsxXSA9IGNwOworICAg IGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOworCisgICAgY21wW2NtZGRlcF0uYlsyXSA9IE5V TEw7CisKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihhdG1idWYpKzEpOwkvKiAzOiBBdG9t IGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0bWJ1Zik7CisgICAgY21wW2NtZGRl cF0uYlszXSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOworCisgICAgY3Ag PSBtYWxsb2MoKGludClzdHJsZW4oYXR4YnVmKSsxKTsJLyogNDogRXhwYW5zaW9uIGJ1ZmZlciAq LworICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0eGJ1Zik7CisgICAgY21wW2NtZGRlcF0uYls0XSA9 IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOworCisgICAgY3AgPSBtYWxsb2Mo KGludClzdHJsZW4oYXR5YnVmKSsxKTsJLyogNTogQXRvbSBidWZmZXIgY29weSAqLworICAgIGlm IChjcCkgc3RyY3B5KGNwLGF0eWJ1Zik7CisgICAgY21wW2NtZGRlcF0uYls1XSA9IGNwOworICAg IGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJs ZW4oZmlsYnVmKSsxKTsJLyogNjogRmlsZSBuYW1lIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3Ry Y3B5KGNwLGZpbGJ1Zik7CisgICAgY21wW2NtZGRlcF0uYls2XSA9IGNwOworICAgIGlmIChjcCA9 PSBOVUxMKSByZXR1cm4oLTEpOworI2Vsc2UKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihj bWRidWYpKzEpOwkvKiAwOiBDb21tYW5kIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNw LGNtZGJ1Zik7CisgICAgY21wX2JbY21kZGVwXVswXSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxM KSByZXR1cm4oLTEpOworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oc2F2YnVmKSsxKTsJ LyogMTogU2F2ZSBidWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0cmNweShjcCxzYXZidWYpOworICAg IGNtcF9iW2NtZGRlcF1bMV0gPSBjcDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsK KworICAgIGNtcF9iW2NtZGRlcF1bMl0gPSBOVUxMOworCisgICAgY3AgPSBtYWxsb2MoKGludClz dHJsZW4oYXRtYnVmKSsxKTsJLyogMzogQXRvbSBidWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0cmNw eShjcCxhdG1idWYpOworICAgIGNtcF9iW2NtZGRlcF1bM10gPSBjcDsKKyAgICBpZiAoY3AgPT0g TlVMTCkgcmV0dXJuKC0xKTsKKworICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGF0eGJ1Zikr MSk7CS8qIDQ6IEV4cGFuc2lvbiBidWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0cmNweShjcCxhdHhi dWYpOworICAgIGNtcF9iW2NtZGRlcF1bNF0gPSBjcDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0 dXJuKC0xKTsKKworICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGF0eWJ1ZikrMSk7CS8qIDU6 IEF0b20gYnVmZmVyIGNvcHkgKi8KKyAgICBpZiAoY3ApIHN0cmNweShjcCxhdHlidWYpOworICAg IGNtcF9iW2NtZGRlcF1bNV0gPSBjcDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsK KworICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGZpbGJ1ZikrMSk7CS8qIDY6IEZpbGUgbmFt ZSBidWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0cmNweShjcCxmaWxidWYpOworICAgIGNtcF9iW2Nt ZGRlcF1bNl0gPSBjcDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKKyNlbmRpZiAv KiBEQ01EQlVGICovCisKKyAgICBjbWluaShkcHgpOwkJCQkvKiBJbml0aXplIHRoZSBjb21tYW5k IHBhcnNlciAqLworICAgIHJldHVybigwKTsKK30KKworaW50CitjbXBvcCgpIHsJCQkJLyogUmVz dG9yZSB0aGUgY29tbWFuZCBlbnZpcm9ubWVudCAqLworICAgIGlmIChjbWRkZXAgPCAwKSB7CisJ ZGVidWcoRjEwMCwiJmNtcG9wIGNhbGxlZCBmcm9tIHRvcCBsZXZlbCIsIiIsMCk7CisJcmV0dXJu KC0xKTsJCQkvKiBEb24ndCBwb3AgdG9vIG11Y2ghICovCisgICAgfQorI2lmZGVmIERDTURCVUYK KyAgICBjbWZsZ3MgPSBjbXBbY21kZGVwXS5pWzBdOwkJLyogRmlyc3QgZG8gdGhlIGdsb2JhbCBp bnRzICovCisgICAgY21mc2F2ID0gY21wW2NtZGRlcF0uaVsxXTsKKyAgICBhdHhuID0gY21wW2Nt ZGRlcF0uaVsyXTsKKyAgICB1bmd3ID0gY21wW2NtZGRlcF0uaVszXTsKKworICAgIGJwID0gY21w W2NtZGRlcF0uY1swXTsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2ludGVycyAqLworICAgIHBwID0g Y21wW2NtZGRlcF0uY1sxXTsKKyAgICBucCA9IGNtcFtjbWRkZXBdLmNbMl07CisjZWxzZQorICAg IGNtZmxncyA9IGNtcF9pW2NtZGRlcF1bMF07CQkvKiBGaXJzdCBkbyB0aGUgZ2xvYmFsIGludHMg Ki8KKyAgICBjbWZzYXYgPSBjbXBfaVtjbWRkZXBdWzFdOworICAgIGF0eG4gPSBjbXBfaVtjbWRk ZXBdWzJdOworICAgIHVuZ3cgPSBjbXBfaVtjbWRkZXBdWzNdOworCisgICAgYnAgPSBjbXBfY1tj bWRkZXBdWzBdOwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBvaW50ZXJzICovCisgICAgcHAgPSBjbXBf Y1tjbWRkZXBdWzFdOworICAgIG5wID0gY21wX2NbY21kZGVwXVsyXTsKKyNlbmRpZiAvKiBEQ01E QlVGICovCisKKyAgICAvKiBOb3cgdGhlIGJ1ZmZlcnMgdGhlbXNlbHZlcy4gKi8KKyAgICAvKiBO b3RlOiBzdHJuY3B5KCksIG5vdCBja3N0cm5jcHkoKSAtLSBIZXJlIHdlIFdBTlQgdGhlIE5VTCBw YWRkaW5nLi4uICovCisKKyNpZmRlZiBEQ01EQlVGCisgICAgaWYgKGNtcFtjbWRkZXBdLmJbMF0p IHsKKworCXN0cm5jcHkoY21kYnVmLGNtcFtjbWRkZXBdLmJbMF0sQ01EQkwpOyAvKiAwOiBDb21t YW5kIGJ1ZmZlciAqLworCWZyZWUoY21wW2NtZGRlcF0uYlswXSk7CisJY21wW2NtZGRlcF0uYlsw XSA9IE5VTEw7CisgICAgfQorICAgIGlmIChjbXBbY21kZGVwXS5iWzFdKSB7CisJc3RybmNweShz YXZidWYsY21wW2NtZGRlcF0uYlsxXSxDTURCTCk7IC8qIDE6IFNhdmUgYnVmZmVyICovCisJZnJl ZShjbXBbY21kZGVwXS5iWzFdKTsKKwljbXBbY21kZGVwXS5iWzFdID0gTlVMTDsKKyAgICB9Cisg ICAgaWYgKGNtcFtjbWRkZXBdLmJbM10pIHsKKwlzdHJuY3B5KGF0bWJ1ZixjbXBbY21kZGVwXS5i WzNdLEFUTUJMKTsgLyogMzogQXRvbWljIGJ1ZmZlciEgKi8KKwlmcmVlKGNtcFtjbWRkZXBdLmJb M10pOworCWNtcFtjbWRkZXBdLmJbM10gPSBOVUxMOworICAgIH0KKyAgICBpZiAoY21wW2NtZGRl cF0uYls0XSkgeworCXN0cm5jcHkoYXR4YnVmLGNtcFtjbWRkZXBdLmJbNF0sQVRNQkwpOyAvKiA0 OiBlWHBhbnNpb24gYnVmZmVyICovCisJZnJlZShjbXBbY21kZGVwXS5iWzRdKTsKKwljbXBbY21k ZGVwXS5iWzRdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcFtjbWRkZXBdLmJbNV0pIHsKKwlz dHJuY3B5KGF0eWJ1ZixjbXBbY21kZGVwXS5iWzVdLEFUTUJMKTsgLyogNTogQXRvbSBidWZmZXIg Y29wWSAqLworCWZyZWUoY21wW2NtZGRlcF0uYls1XSk7CisJY21wW2NtZGRlcF0uYls1XSA9IE5V TEw7CisgICAgfQorICAgIGlmIChjbXBbY21kZGVwXS5iWzZdKSB7CisJc3RybmNweShmaWxidWYs Y21wW2NtZGRlcF0uYls2XSxBVE1CTCk7IC8qIDY6IEZpbGVuYW1lIGJ1ZmZlciAqLworCWZyZWUo Y21wW2NtZGRlcF0uYls2XSk7CisJY21wW2NtZGRlcF0uYls2XSA9IE5VTEw7CisgICAgfQorI2Vs c2UKKyAgICBpZiAoY21wX2JbY21kZGVwXVswXSkgeworCXN0cm5jcHkoY21kYnVmLGNtcF9iW2Nt ZGRlcF1bMF0sQ01EQkwpOyAvKiAwOiBDb21tYW5kIGJ1ZmZlciAqLworCWZyZWUoY21wX2JbY21k ZGVwXVswXSk7CisJY21wX2JbY21kZGVwXVswXSA9IE5VTEw7CisgICAgfQorICAgIGlmIChjbXBf YltjbWRkZXBdWzFdKSB7CisJc3RybmNweShzYXZidWYsY21wX2JbY21kZGVwXVsxXSxDTURCTCk7 IC8qIDE6IFNhdmUgYnVmZmVyICovCisJZnJlZShjbXBfYltjbWRkZXBdWzFdKTsKKwljbXBfYltj bWRkZXBdWzFdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcF9iW2NtZGRlcF1bM10pIHsKKwlz dHJuY3B5KGF0bWJ1ZixjbXBfYltjbWRkZXBdWzNdLEFUTUJMKTsgLyogMzogQXRvbWljIGJ1ZmZl ciEgKi8KKwlmcmVlKGNtcF9iW2NtZGRlcF1bM10pOworCWNtcF9iW2NtZGRlcF1bM10gPSBOVUxM OworICAgIH0KKyAgICBpZiAoY21wX2JbY21kZGVwXVs0XSkgeworCXN0cm5jcHkoYXR4YnVmLGNt cF9iW2NtZGRlcF1bNF0sQVRNQkwpOyAvKiA0OiBlWHBhbnNpb24gYnVmZmVyICovCisJZnJlZShj bXBfYltjbWRkZXBdWzRdKTsKKwljbXBfYltjbWRkZXBdWzRdID0gTlVMTDsKKyAgICB9CisgICAg aWYgKGNtcF9iW2NtZGRlcF1bNV0pIHsKKwlzdHJuY3B5KGF0eWJ1ZixjbXBfYltjbWRkZXBdWzVd LEFUTUJMKTsgLyogNTogQXRvbSBidWZmZXIgY29wWSAqLworCWZyZWUoY21wX2JbY21kZGVwXVs1 XSk7CisJY21wX2JbY21kZGVwXVs1XSA9IE5VTEw7CisgICAgfQorICAgIGlmIChjbXBfYltjbWRk ZXBdWzZdKSB7CisJc3RybmNweShmaWxidWYsY21wX2JbY21kZGVwXVs2XSxBVE1CTCk7IC8qIDY6 IEZpbGVuYW1lIGJ1ZmZlciAqLworCWZyZWUoY21wX2JbY21kZGVwXVs2XSk7CisJY21wX2JbY21k ZGVwXVs2XSA9IE5VTEw7CisgICAgfQorI2VuZGlmIC8qIERDTURCVUYgKi8KKworICAgIGNtZGRl cC0tOwkJCQkvKiBSaXNlLCByaXNlICovCisgICAgZGVidWcoRjEwMSwiJmNtcG9wIHRvIGRlcHRo IiwiIixjbWRkZXApOworICAgIHJldHVybihjbWRkZXApOworfQorI2VuZGlmIC8qIE5PU1BMICov CisKKyNpZmRlZiBDT01NRU5UCitWT0lECQkJCQkvKiBOb3QgdXNlZCAqLworc3RyaXBxKHMpIGNo YXIgKnM7IHsgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIHRvIHN0cmlwICdcJyBxdW90 ZXMgKi8KKyAgICBjaGFyICp0OworICAgIHdoaWxlICgqcykgeworICAgICAgICBpZiAoKnMgPT0g Q01EUSkgeworICAgICAgICAgICAgZm9yICh0ID0gczsgKnQgIT0gJ1wwJzsgdCsrKSAqdCA9ICoo dCsxKTsKKyAgICAgICAgfQorICAgICAgICBzKys7CisgICAgfQorfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKworLyogQ29udmVydCB0YWJzIHRvIHNwYWNlcywgb25lIGZvciBvbmUgKi8KK1ZPSUQK K3VudGFiKHMpIGNoYXIgKnM7IHsKKyAgICB3aGlsZSAoKnMpIHsKKwlpZiAoKnMgPT0gSFQpICpz ID0gU1A7CisJcysrOworICAgIH0KK30KKworLyogIEMgTSBOIFUgTSAgLS0gIFBhcnNlIGEgbnVt YmVyIGluIHRoZSBpbmRpY2F0ZWQgcmFkaXggICovCisKKy8qCisgVGhlIHJhZGl4IGlzIHNwZWNp ZmllZCBpbiB0aGUgYXJnIGxpc3QuCisgUGFyc2VzIHVucXVvdGVkIG51bWVyaWMgc3RyaW5ncyBp biB0aGUgZ2l2ZW4gcmFkaXguCisgUGFyc2VzIGJhY2tzbGFzaC1xdW90ZWQgbnVtYmVycyBpbiB0 aGUgcmFkaXggaW5kaWNhdGVkIGJ5IHRoZSBxdW90ZToKKyAgIFxubm4gPSBcZG5ubiA9IGRlY2lt YWwsIFxvbm5uID0gb2N0YWwsIFx4bm4gPSBIZXhhZGVjaW1hbC4KKyBJZiB0aGVzZSBmYWlsLCB0 aGVuIGlmIGEgcHJlcHJvY2Vzc2luZyBmdW5jdGlvbiBpcyBzdXBwbGllZCwgdGhhdCBpcyBhcHBs aWVkCisgYW5kIHRoZW4gYSBzZWNvbmQgYXR0ZW1wdCBpcyBtYWRlIHRvIHBhcnNlIGFuIHVucXVv dGVkIGRlY2ltYWwgc3RyaW5nLgorIEFuZCBpZiB0aGF0IGZhaWxzLCB0aGUgcHJlcHJvY2Vzc2Vk IHN0cmluZyBpcyBwYXNzZWQgdG8gYW4gYXJpdGhtZXRpYworIGV4cHJlc3Npb24gZXZhbHVhdG9y LgorCisgUmV0dXJuczoKKyAgIC0zIGlmIG5vIGlucHV0IHByZXNlbnQgd2hlbiByZXF1aXJlZCwK KyAgIC0yIGlmIHVzZXIgdHlwZWQgYW4gaWxsZWdhbCBudW1iZXIsCisgICAtMSBpZiByZXBhcnNl IG5lZWRlZCwKKyAgICAwIG90aGVyd2lzZSwgd2l0aCBhcmd1bWVudCBuIHNldCB0byB0aGUgbnVt YmVyIHRoYXQgd2FzIHBhcnNlZAorKi8KKy8qIFRoaXMgaXMgdGhlIHRyYWRpdGlvbmFsIGNtbnVt KCkgdGhhdCBnZXRzIGFuIGludCAqLworaW50CitjbW51bSh4aGxwLHhkZWYscmFkaXgsbixmKSBj aGFyICp4aGxwLCAqeGRlZjsgaW50IHJhZGl4LCAqbjsgeHhfc3RycCBmOyB7CisgICAgQ0tfT0ZG X1QgeiA9IChDS19PRkZfVCkwLCBjaGVjazsKKyAgICBpbnQgeDsKKyAgICB4ID0gY21udW13KHho bHAseGRlZixyYWRpeCwmeixmKTsKKyAgICAqbiA9IHo7CisgICAgY2hlY2sgPSAqbjsKKyAgICBp ZiAoY2hlY2sgIT0geikgeworCXByaW50ZigiP01hZ25pdHVkZSBvZiByZXN1bHQgdG9vIGxhcmdl IGZvciBpbnRlZ2VyIC0gJXNcbiIsY2tmc3RvYSh6KSk7CisJcmV0dXJuKC05KTsKKyAgICB9Cisg ICAgcmV0dXJuKHgpOworfQorCisvKgorICBUaGlzIGlzIHRoZSBuZXcgY21udW0oKSB0aGF0IGdl dHMgYSAid2lkZSIgcmVzdWx0LCB3aGF0ZXZlciBDS19PRkZfVAorICBpcyBkZWZpbmVkIHRvIGJl LCBub3JtYWxseSAzMiBvciA2NCBiaXRzLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorICBm ZGMsIDI0IERlYyAyMDA1LgorKi8KK2ludAorY21udW13KHhobHAseGRlZixyYWRpeCxuLGYpCisg ICAgY2hhciAqeGhscCwgKnhkZWY7IGludCByYWRpeDsgQ0tfT0ZGX1QgKm47IHh4X3N0cnAgZjsg eworICAgIGludCB4OyBjaGFyICpzLCAqenAsICp6cTsKKyNpZmRlZiBDT01NRU5UCisgICAgY2hh ciBsYnJhY2UsIHJicmFjZTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBpZiAoIXhobHAp IHhobHAgPSAiIjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKworI2lmZGVmIENPTU1FTlQK KyAgICBpZiAoY21mbGRmbGdzICYgMSkgeworCWxicmFjZSA9ICcoJzsKKwlyYnJhY2UgPSAnKSc7 CisgICAgfSBlbHNlIHsKKwlsYnJhY2UgPSAneyc7CisJcmJyYWNlID0gJ30nOworICAgIH0KKyNl bmRpZiAvKiBDT01NRU5UICovCisKKyAgICBpZiAocmFkaXggIT0gMTAgJiYgcmFkaXggIT0gOCkg ewkvKiBKdXN0IGRvIGJhc2VzIDggYW5kIDEwICovCisgICAgICAgIHByaW50ZigiY21udW06IGls bGVnYWwgcmFkaXggLSAlZFxuIixyYWRpeCk7CisgICAgICAgIHJldHVybigtMik7CisgICAgfSAv KiBFYXN5IHRvIGFkZCBvdGhlcnMgYnV0IHRoZXJlIGhhcyBuZXZlciBiZWVuIGEgbmVlZCBmb3Ig aXQuICovCisgICAgeCA9IGNtZmxkKHhobHAseGRlZiwmcywoeHhfc3RycCkwKTsKKyAgICBkZWJ1 ZyhGMTAxLCJjbW51bTogY21mbGQiLCIiLHgpOworICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOwkJ LyogUGFyc2UgYSBmaWVsZCAqLworICAgIHpwID0gYXRtYnVmOworLyoKKyAgRWRpdCAxOTIgLSBB bGxvdyBhbnkgbnVtYmVyIGZpZWxkIHRvIGJlIGJyYWNlZC4gIFRoaXMgbGV0cyB1cyBpbmNsdWRl CisgIHNwYWNlcyBpbiBleHByZXNzaW9ucywgYnV0IHBlcmhhcHMgbW9yZSBpbXBvcnRhbnQgbGV0 cyB1cyBoYXZlIHVzZXItZGVmaW5lZAorICBmdW5jdGlvbnMgaW4gbnVtZXJpYyBmaWVsZHMuCisq LworICAgIHpwID0gYnJzdHJpcCh6cCk7CQkJLyogU3RyaXAgYnJhY2VzICovCisgICAgaWYgKGNt ZmxkZmxncyAmIDEgJiYgKnpwID09ICcoJykgewkvKiBQYXJlbnMgdG9vLi4gKi8KKwl4ID0gKGlu dCkgc3RybGVuKGF0bWJ1Zik7CisJaWYgKHggPiAwKSB7CisJICAgIGlmICgqKGF0bWJ1Zit4LTEp ID09ICcpJykgeworCQkqKGF0bWJ1Zit4LTEpID0gTlVMOworCQl6cCsrOworCSAgICB9CisJfQor ICAgIH0KKyAgICBpZiAoY2hrbnVtKHpwKSkgewkJCS8qIENoZWNrIGZvciBudW1iZXIgKi8KKwlp ZiAocmFkaXggPT0gOCkgewkJLyogSWYgaXQncyBzdXBwb3NlZCB0byBiZSBvY3RhbCAqLworCSAg ICB6cCA9IGNrcmFkaXgoenAsOCwxMCk7CS8qIGNvbnZlcnQgdG8gZGVjaW1hbCAqLworCSAgICBp ZiAoIXpwKSByZXR1cm4oLTIpOworCSAgICBpZiAoIXN0cmNtcCh6cCwiLTEiKSkgcmV0dXJuKC0y KTsKKwl9CisJZXJybm8gPSAwOwkJCS8qIEdvdCBvbmUsIHdlJ3JlIGRvbmUuICovCisgICAgICAg ICpuID0gY2thdG9mcyh6cCk7CisJaWYgKGVycm5vKSB7CisJICAgIHBlcnJvcih6cCk7CisJICAg IHJldHVybigtOSk7CisJfQorCWRlYnVnKEYxMDEsImNtbnVtIDFzdCBjaGtudW0gb2siLCIiLCpu KTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0gZWxzZSBpZiAoKHggPSB4eGVzYygmenApKSA+ IC0xKSB7CS8qIENoZWNrIGZvciBiYWNrc2xhc2ggZXNjYXBlICovCisKKyNpZm5kZWYgT1MyCisJ Km4gPSB4OworI2Vsc2UKKwkqbiA9IHdpZGVyZXN1bHQ7CisjZW5kaWYgLyogT1MyICovCisKKwlk ZWJ1ZyhGMTAxLCJjbW51bSB4eGVzYyBvayIsIiIsKm4pOworCXJldHVybigqenAgPyAtMiA6IDAp OworICAgIH0gZWxzZSBpZiAoZikgewkJCS8qIElmIGNvbnZlcnNpb24gZnVuY3Rpb24gZ2l2ZW4g Ki8KKwl6cSA9IGF0eGJ1ZjsJCQkvKiBUcnkgdGhhdCAqLworCWF0eG4gPSBDTURCTDsKKwlpZiAo KCpmKSh6cCwmenEsJmF0eG4pIDwgMCkJLyogQ29udmVydCAqLworCSAgcmV0dXJuKC0yKTsKKwl6 cCA9IGF0eGJ1ZjsKKyAgICB9CisgICAgZGVidWcoRjExMCwiY21udW0genAgMSIsenAsMCk7Cisg ICAgaWYgKCEqenApIHpwID0geGRlZjsJCS8qIFJlc3VsdCBlbXB0eSwgc3Vic3RpdHV0ZSBkZWZh dWx0ICovCisgICAgZGVidWcoRjExMCwiY21udW0genAgMiIsenAsMCk7CisgICAgaWYgKGNoa251 bSh6cCkpIHsJCQkvKiBDaGVjayBhZ2FpbiBmb3IgZGVjaW1hbCBudW1iZXIgKi8KKwlpZiAocmFk aXggPT0gOCkgewkJLyogSWYgaXQncyBzdXBwb3NlZCB0byBiZSBvY3RhbCAqLworCSAgICB6cCA9 IGNrcmFkaXgoenAsOCwxMCk7CS8qIGNvbnZlcnQgdG8gZGVjaW1hbCAqLworCSAgICBpZiAoIXpw KSByZXR1cm4oLTIpOworCSAgICBpZiAoIXN0cmNtcCh6cCwiLTEiKSkgcmV0dXJuKC0yKTsKKwl9 CisJZXJybm8gPSAwOworICAgICAgICAqbiA9IGNrYXRvZnMoenApOworCWlmIChlcnJubykgewor CSAgICBwZXJyb3IoenApOworCSAgICByZXR1cm4oLTkpOworCX0KKwlkZWJ1ZyhGMTAxLCJjbW51 bSAybmQgY2hrbnVtIG9rIiwiIiwqbik7CisgICAgICAgIHJldHVybigwKTsKKyNpZm5kZWYgTk9T UEwKKyAgICB9ICBlbHNlIGlmICgoeCA9IHh4ZXNjKCZ6cCkpID4gLTEpIHsgLyogQ2hlY2sgZm9y IGJhY2tzbGFzaCBlc2NhcGUgKi8KKyNpZm5kZWYgT1MyCisJKm4gPSB4OworI2Vsc2UKKwkqbiA9 IHdpZGVyZXN1bHQ7CisjZW5kaWYgLyogT1MyICovCisJZGVidWcoRjEwMSwiY21udW0geHhlc2Mg MiBvayIsIiIsKm4pOworCXJldHVybigqenAgPyAtMiA6IDApOworICAgIH0gZWxzZSBpZiAoZikg ewkJCS8qIE5vdCBudW1lcmljLCBtYXliZSBhbiBleHByZXNzaW9uICovCisJY2hhciAqIHA7CisJ cCA9IGV2YWxhKHpwKTsKKwlpZiAoY2hrbnVtKHApKSB7CisJICAgIGlmIChyYWRpeCA9PSA4KSB7 CQkvKiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICovCisJCXpwID0gY2tyYWRpeCh6cCw4 LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCisJCWlmICghenApIHJldHVybigtMik7CisJ CWlmICghc3RyY21wKHpwLCItMSIpKSByZXR1cm4oLTIpOworCSAgICB9CisJICAgIGVycm5vID0g MDsKKwkgICAgKm4gPSBja2F0b2ZzKHApOworCSAgICBpZiAoZXJybm8pIHsKKwkJcGVycm9yKHAp OworCQlyZXR1cm4oLTkpOworCSAgICB9CisJICAgIGRlYnVnKEYxMDEsImNtbnVtIGV4cCBldmFs IG9rIiwiIiwqbik7CisJICAgIHJldHVybigwKTsKKwl9IGVsc2UgcmV0dXJuKC0yKTsKKyNlbmRp ZiAvKiBOT1NQTCAqLworICAgIH0gZWxzZSB7CQkJCS8qIE5vdCBudW1lcmljICovCisJcmV0dXJu KC0yKTsKKyAgICB9Cit9CisKKyNpZmRlZiBDS0NIQU5ORUxJTworZXh0ZXJuIGludCB6X2Vycm9y OworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKKy8qICBDIE0gTyBGIEkgIC0tICBQYXJzZSB0 aGUgbmFtZSBvZiBhbiBvdXRwdXQgZmlsZSAgKi8KKworLyoKKyBEZXBlbmRzIG9uIHRoZSBleHRl cm5hbCBmdW5jdGlvbiB6Y2hrbygpOyBpZiB6Y2hrbygpIG5vdCBhdmFpbGFibGUsIHVzZQorIGNt ZmxkKCkgdG8gcGFyc2Ugb3V0cHV0IGZpbGUgbmFtZXMuCisKKyBSZXR1cm5zOgorICAgLTkgbGlr ZSAtMiwgZXhjZXB0IG1lc3NhZ2UgYWxyZWFkeSBwcmludGVkLAorICAgLTMgaWYgbm8gaW5wdXQg cHJlc2VudCB3aGVuIHJlcXVpcmVkLAorICAgLTIgaWYgcGVybWlzc2lvbiB3b3VsZCBiZSBkZW5p ZWQgdG8gY3JlYXRlIHRoZSBmaWxlLAorICAgLTEgaWYgcmVwYXJzZSBuZWVkZWQsCisgICAgMCBv ciAxIGlmIGZpbGUgY2FuIGJlIGNyZWF0ZWQsIHdpdGggeHAgcG9pbnRpbmcgdG8gbmFtZS4KKyAg ICAyIGlmIGdpdmVuIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4KKyovCitpbnQK K2Ntb2ZpKHhobHAseGRlZix4cCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgeHhfc3RycCBm OyB7CisgICAgaW50IHg7IGNoYXIgKnMsICp6cTsKKyNpZmRlZiBET0NIS1ZBUgorICAgIGludCB0 cmllczsKKyNlbmRpZiAvKiBET0NIS1ZBUiAqLworI2lmZGVmIERUSUxERQorICAgIGNoYXIgKmRp cnA7CisjZW5kaWYgLyogRFRJTERFICovCisKKyAgICBjbWZsZGZsZ3MgPSAwOworCisgICAgaWYg KCF4aGxwKSB4aGxwID0gIiI7CisgICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7CisKKyAgICBpZiAo KnhobHAgPT0gTlVMKSB4aGxwID0gIk91dHB1dCBmaWxlIjsKKyAgICAqeHAgPSAiIjsKKworICAg IGRlYnVnKEYxMTAsImNtb2ZpIHhkZWYiLHhkZWYsMCk7CisgICAgeCA9IGNtZmxkKHhobHAseGRl ZiwmcywoeHhfc3RycCkwKTsKKyAgICBkZWJ1ZyhGMTExLCJjbW9maSBjbWZsZCByZXR1cm5zIixz LHgpOworICAgIGlmICh4IDwgMCkKKyAgICAgIHJldHVybih4KTsKKworICAgIHMgPSBicnN0cmlw KHMpOwkJCS8qIFN0cmlwIGVuY2xvc2luZyBicmFjZXMgKi8KKyAgICBkZWJ1ZyhGMTEwLCJjbW9m aSAxLjUiLHMsMCk7CisKKyNpZmRlZiBET0NIS1ZBUgorICAgIHRyaWVzID0gMDsKKyAgICB7CisJ Y2hhciAqcCA9IHM7CisgICAgLyoKKyAgICAgIFRoaXMgaXMgcmVhbGx5IHVnbHkuICBJZiB3ZSBz a2lwIGNvbnZlcnNpb24gdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCwKKyAgICAgIHRoZW4gdmFyaWFi bGUgbmFtZXMgbGlrZSBcJWEgd2lsbCBiZSB1c2VkIGFzIGZpbGVuYW1lcyAoZS5nLiBjcmVhdGlu ZworICAgICAgYSBmaWxlIGNhbGxlZCAlQSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkpLiAgSWYgd2Ug RE9OJ1Qgc2tpcCBjb252ZXJzaW9uCisgICAgICB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLCB0aGVu IHNpbmdsZSBiYWNrc2xhc2hlcyB1c2VkIGFzIGRpcmVjdG9yeQorICAgICAgc2VwYXJhdG9ycyBp biBmaWxlbmFtZXMgd2lsbCBiZSBtaXNpbnRlcnByZXRlZCBhcyB2YXJpYWJsZSBsZWFkLWlucy4K KyAgICAgIFNvIHdlIHByZXNjYW4gdG8gc2VlIGlmIGl0IGhhcyBhbnkgdmFyaWFibGUgcmVmZXJl bmNlcy4gIEJ1dCB0aGlzCisgICAgICBtb2R1bGUgaXMgbm90IHN1cHBvc2VkIHRvIGtub3cgYW55 dGhpbmcgYWJvdXQgdmFyaWFibGVzLCBmdW5jdGlvbnMsCisgICAgICBldGMsIHNvIHRoaXMgY29k ZSBkb2VzIG5vdCByZWFsbHkgYmVsb25nIGhlcmUsIGJ1dCByYXRoZXIgaXQgc2hvdWxkCisgICAg ICBiZSBhdCB0aGUgc2FtZSBsZXZlbCBhcyB6enN0cmluZygpLgorICAgICovCisvKgorICBIbW1t LCB0aGlzIGxvb2tzIGEgbG90IGxpa2UgY2hrdmFyKCkgZXhjZXB0IGl0IHRoYXQgaW5jbHVkZXMg XG5ubiBudW1iZXIKKyAgZXNjYXBlcy4gIEJ1dCB3aHk/ICBUaGlzIG1ha2VzIGNvbW1hbmRzIGxp a2UgIm1rZGlyIGM6XDEyMyIgaW1wb3NzaWJsZS4KKyAgQW5kIGluIGZhY3QsICJta2RpciBjOlwx MjMiIGNyZWF0ZXMgYSBkaXJlY3RvcnkgY2FsbGVkICJjOnsiLiAgV2hhdCdzIHdvcnNlLAorICBy bWRpcigpLCB3aGljaCAqZG9lcyogY2FsbCBjaGt2YXIoKSwgd29uJ3QgbGV0IHVzIHJlbW92ZSBp dC4gIFNvIGxldCdzIGF0CisgIGxlYXN0IHRyeSBtYWtpbmcgY21vZmkoKSBzeW1tZXRyaWNhbCB3 aXRoIGNtaWZpKCkuLi4KKyovCisjaWZkZWYgQ09NTUVOVAorCWNoYXIgKiBxOworCXdoaWxlICgg KHRyaWVzID09IDApICYmIChwID0gc3RyY2hyKHAsQ01EUSkpICkgeworCSAgICBxID0gKihwKzEp OwkJCS8qIENoYXIgYWZ0ZXIgYmFja3NsYXNoICovCisJICAgIGlmICghcSkJCQkvKiBOb25lLCBx dWl0ICovCisJICAgICAgYnJlYWs7CisJICAgIGlmIChpc3VwcGVyKHEpKQkJLyogSWYgbGV0dGVy LCBjb252ZXJ0IHRvIGxvd2VyY2FzZSAqLworCSAgICAgIHEgPSB0b2xvd2VyKHEpOworCSAgICBp ZiAoaXNkaWdpdChxKSkgewkJLyogSWYgaXQncyBhIGRpZ2l0LCAqLworCQl0cmllcyA9IDE7CQkv KiBhc3N1bWUgaXQncyBhIGJhY2tzbGFzaCBjb2RlICAqLworCQlicmVhazsKKwkgICAgfQorCSAg ICBzd2l0Y2ggKHEpIHsKKwkgICAgICBjYXNlIENNRFE6CQkvKiBEb3VibGUgYmFja3NsYXNoICov CisJCXRyaWVzID0gMTsJCS8qIHNvIGNhbGwgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KKwkJ YnJlYWs7CisJICAgICAgY2FzZSAnJSc6CQkJLyogVmFyaWFibGUgb3IgYXJyYXkgcmVmZXJlbmNl ICovCisJICAgICAgY2FzZSAnJic6CQkJLyogbXVzdCBiZSBmb2xsb3dlZCBieSBsZXR0ZXIgKi8K KwkJaWYgKGlzYWxwaGEoKihwKzIpKSB8fCAoKihwKzIpID49ICcwJyAmJiAqKHArMikgPD0gJzkn KSkKKwkJICB0cmllcyA9IDE7CisJCWJyZWFrOworCSAgICAgIGNhc2UgJ20nOiBjYXNlICd2Jzog Y2FzZSAnJCc6IC8qIFxtKCksIFx2KCksIFwkKCkgKi8KKwkJaWYgKCoocCsyKSA9PSAnKCcpCisJ CSAgaWYgKHN0cmNocihwKzIsJyknKSkKKwkJICAgIHRyaWVzID0gMTsKKwkJYnJlYWs7CisJICAg ICAgY2FzZSAnZic6CQkJLyogXEZuYW1lKCkgKi8KKwkJaWYgKHN0cmNocihwKzIsJygnKSkKKwkJ ICBpZiAoc3RyY2hyKHArMiwnKScpKQorCQkgICAgICB0cmllcyA9IDE7CisJCWJyZWFrOworCSAg ICAgIGNhc2UgJ3snOgkJCS8qIFx7Li4ufSAqLworCQlpZiAoc3RyY2hyKHArMiwnfScpKQorCQkg IHRyaWVzID0gMTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAnZCc6IGNhc2UgJ28nOgkvKiBEZWNp bWFsIG9yIE9jdGFsIG51bWJlciAqLworCSAgICAgICAgaWYgKGlzZGlnaXQoKihwKzIpKSkKKwkJ ICB0cmllcyA9IDE7CisJCWJyZWFrOworCSAgICAgIGNhc2UgJ3gnOgkJCS8qIEhleCBudW1iZXIg Ki8KKwkJaWYgKGlzZGlnaXQoKihwKzIpKSB8fAorCQkgICAgKCgqKHArMikgPj0gJ2EnICYmICoo cCsyKSA8PSAnZicpIHx8CisJCSAgICAgKCgqKHArMikgPj0gJ0EnICYmICoocCsyKSA8PSAnRicp KSkpCisJCSAgdHJpZXMgPSAxOworCSAgICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICB9CisJ ICAgIHArKzsKKwl9CisjZWxzZQorI2lmbmRlZiBOT1NQTAorCWlmIChmKSB7CQkJLyogSWYgYSBj b252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCisJICAgIGNoYXIgKnMgPSBwOwkJLyogU2Vl IGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICovCisJICAgIHdoaWxlICgqcykgewkJLyog dGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCB0aGVtICovCisJCWlmIChjaGt2YXIocykpIHsK KwkJICAgIHRyaWVzID0gMTsKKwkJICAgIGJyZWFrOworCQl9CisJCXMrKzsKKwkgICAgfQorCX0K KyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisjaWZkZWYg T1MyCitvX2FnYWluOgorI2VuZGlmIC8qIE9TMiAqLworICAgIGlmICh0cmllcyA9PSAxKQorI2Vu ZGlmIC8qIERPQ0hLVkFSICovCisgICAgaWYgKGYpIHsJCQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1 bmN0aW9uIGlzIGdpdmVuICovCisJenEgPSBhdHhidWY7CQkJLyogZG8gdGhlIGNvbnZlcnNpb24u ICovCisJYXR4biA9IENNREJMOworCWlmICgoeCA9ICgqZikocywmenEsJmF0eG4pKSA8IDApCisJ ICByZXR1cm4oLTIpOworCXMgPSBhdHhidWY7CisJaWYgKCEqcykJCQkvKiBSZXN1bHQgZW1wdHks IHN1YnN0aXR1dGUgZGVmYXVsdCAqLworCSAgcyA9IHhkZWY7CisgICAgfQorICAgIGRlYnVnKEYx MTEsImNtb2ZpIDIiLHMseCk7CisKKyNpZmRlZiBEVElMREUKKyAgICBkaXJwID0gdGlsZGVfZXhw YW5kKHMpOwkJLyogRXhwYW5kIHRpbGRlLCBpZiBhbnksICovCisgICAgaWYgKCpkaXJwICE9ICdc MCcpIHsJCS8qIHJpZ2h0IGluIHRoZSBhdG9tIGJ1ZmZlci4gKi8KKwlpZiAoc2V0YXRtKGRpcnAs MSkgPCAwKSB7CisJICAgIHByaW50ZigiP05hbWUgdG9vIGxvbmdcbiIpOworCSAgICByZXR1cm4o LTkpOworCX0KKyAgICB9CisgICAgcyA9IGF0bWJ1ZjsKKyAgICBkZWJ1ZyhGMTEwLCJjbW9maSAz IixzLDApOworI2VuZGlmIC8qIERUSUxERSAqLworCisgICAgaWYgKGlzd2lsZChzKSkgeworICAg ICAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWQgLSAlc1xuIixzKTsKKyAgICAgICAg cmV0dXJuKC0yKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwiY21vZmkgNCIscywwKTsKKworI2lm ZGVmIENLX1RNUERJUgorICAgIC8qIGlzZGlyKCkgZnVuY3Rpb24gcmVxdWlyZWQgZm9yIHRoaXMh ICovCisgICAgaWYgKGlzZGlyKHMpKSB7CisJZGVidWcoRjExMCwiY21vZmkgNTogaXMgZGlyZWN0 b3J5IixzLDApOworICAgICAgICAqeHAgPSBzOworCXJldHVybigyKTsKKyAgICB9CisjZW5kaWYg LyogQ0tfVE1QRElSICovCisKKyAgICBpZiAoc3RyY21wKHMsQ1RUTkFNKSAmJiAoemNoa28ocykg PCAwKSkgeyAvKiBPSyB0byB3cml0ZSB0byBjb25zb2xlICovCisjaWZkZWYgQ09NTUVOVAorI2lm ZGVmIE9TMgorLyoKKyAgV2UgZG9uJ3QgdHJ5IGFnYWluIGJlY2F1c2Ugd2UgYWxyZWFkeSBwcmVz Y2FubmVkIHRoZSBzdHJpbmcgdG8gc2VlIGlmCisgIGlmIGl0IGNvbnRhaW5lZCBhbnl0aGluZyB0 aGF0IGNvdWxkIGJlIHVzZWQgYnkgenpzdHJpbmcoKS4KKyovCisJaWYgKHRyaWVzKysgPCAxKQor CSAgZ290byBvX2FnYWluOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K Ky8qCisgIE5vdGU6IHRoZXJlIGFyZSBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgd2hlcmUgemNoa28o KSBjYW4gZ2l2ZSBhIGZhbHNlCisgIHBvc2l0aXZlLCBzbyBkb24ndCByZWx5IG9uIGl0IHRvIGNh dGNoIGV2ZXJ5IGNvbmNlaXZhYmxlIHNpdHVhdGlvbiBpbgorICB3aGljaCB0aGUgZ2l2ZW4gb3V0 cHV0IGZpbGUgY2FuJ3QgYmUgY3JlYXRlZC4gIEluIG90aGVyIHdvcmRzLCB3ZSBwcmludAorICBh IG1lc3NhZ2UgYW5kIGZhaWwgaGVyZSBpZiB3ZSBLTk9XIHRoZSBmaWxlIGNhbid0IGJlIGNyZWF0 ZWQuICBJZiB3ZQorICBzdWNjZWVkIGJ1dCB0aGUgZmlsZSBjYW4ndCBiZSBvcGVuZWQsIHRoZSBj b2RlIHRoYXQgdHJpZXMgdG8gb3BlbiB0aGUgZmlsZQorICBoYXMgdG8gcHJpbnQgYSBtZXNzYWdl LgorKi8KKwlkZWJ1ZyhGMTEwLCJjbW9maSA2OiBmYWlsdXJlIixzLDApOworI2lmZGVmIENLUk9P VAorCWlmIChja3Jvb3RlcnIpCisJICBwcmludGYoIj9PZmYgTGltaXRzOiAlc1xuIixzKTsKKwll bHNlCisjZW5kaWYgLyogQ0tST09UICovCisJICBwcmludGYoIj9Xcml0ZSBwZXJtaXNzaW9uIGRl bmllZCAtICVzXG4iLHMpOworI2lmZGVmIENLQ0hBTk5FTElPCisJel9lcnJvciA9IEZYX0FDQzsK KyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworICAgICAgICByZXR1cm4oLTkpOworICAgIH0gZWxz ZSB7CisJZGVidWcoRjExMCwiY21vZmkgNzogb2siLHMsMCk7CisgICAgICAgICp4cCA9IHM7Cisg ICAgICAgIHJldHVybih4KTsKKyAgICB9Cit9CisKKy8qICBDIE0gSSBGIEkgIC0tICBQYXJzZSB0 aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmaWxlICAqLworCisvKgorIFRoaXMgZnVuY3Rpb24gZGVw ZW5kcyBvbiB0aGUgZXh0ZXJuYWwgZnVuY3Rpb25zOgorICAgemNoa2koKSAgLSBDaGVjayBpZiBp bnB1dCBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUuCisgICB6eHBhbmQoKSAtIEV4cGFuZCBh IHdpbGQgZmlsZSBzcGVjaWZpY2F0aW9uIGludG8gYSBsaXN0LgorICAgem5leHQoKSAgLSBSZXR1 cm4gbmV4dCBmaWxlIG5hbWUgZnJvbSBsaXN0LgorIElmIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3Qg YXZhaWxhYmxlLCB0aGVuIHVzZSBjbWZsZCgpIHRvIHBhcnNlIGZpbGVuYW1lcy4KKyovCisvKgor IFJldHVybnMKKyAgIC00IEVPRgorICAgLTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3aGVuIHJlcXVp cmVkLAorICAgLTIgaWYgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhZGFibGUsCisg ICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKKyAgICAwIG9yIDEgb3RoZXJ3aXNlLCB3aXRoOgorICAg ICAgICB4cCBwb2ludGluZyB0byBuYW1lLAorICAgICAgICB3aWxkID0gMSBpZiBuYW1lIGNvbnRh aW5zICcqJyBvciAnPycsIDAgb3RoZXJ3aXNlLgorKi8KKworI2lmZGVmIENPTU1FTlQgLyogVGhp cyBob3JyaWJsZSBoYWNrIGhhcyBiZWVuIHJlcGxhY2VkIC0gc2VlIGZ1cnRoZXIgZG93biAqLwor LyoKKyAgIEMgTSBJIE8gRiBJICAtLSAgUGFyc2UgYW4gaW5wdXQgZmlsZSBPUiB0aGUgbmFtZSBv ZiBhIG5vbmV4aXN0ZW50IGZpbGUuCisKKyAgIFVzZSB0aGlzIHdoZW4gYW4gZXhpc3RpbmcgZmls ZSBpcyB3YW50ZWQgKHNvIHdlIGdldCBoZWxwLCBjb21wbGV0aW9uLCBldGMpLAorICAgYnV0IGlm IGEgZmlsZSBvZiB0aGUgZ2l2ZW4gbmFtZSBkb2VzIG5vdCBleGlzdCwgdGhlIG5hbWUgb2YgYSBu ZXcgZmlsZSBpcworICAgYWNjZXB0ZWQuICBGb3IgZXhhbXBsZSwgd2l0aCB0aGUgRURJVCBjb21t YW5kIChlZGl0IGFuIGV4aXN0aW5nIGZpbGUsIG9yCisgICBjcmVhdGUgYSBuZXcgZmlsZSkuICBS ZXR1cm5zIC05IGlmIGZpbGUgZG9lcyBub3QgZXhpc3QuICBJdCBpcyB1cCB0byB0aGUKKyAgIGNh bGxlciB0byBjaGVjayBjcmVhdGFiaWxpdHkuCisqLworc3RhdGljIGludCBub21zZyA9IDA7Citp bnQKK2NtaW9maSh4aGxwLHhkZWYseHAsd2lsZCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsg aW50ICp3aWxkOyB4eF9zdHJwIGY7IHsKKyAgICBpbnQgbXNnc2F2ZSwgeDsKKyAgICBtc2dzYXZl ID0gbm9tc2c7CisgICAgbm9tc2cgPSAxOworICAgIHggPSBjbWlmaTIoeGhscCx4ZGVmLHhwLHdp bGQsMCxOVUxMLGYsMCk7CisgICAgbm9tc2cgPSBtc2dzYXZlOworICAgIHJldHVybih4KTsKK30K KyNlbmRpZgkvKiBDT01NRU5UICovCisKK2ludAorY21pZmkoeGhscCx4ZGVmLHhwLHdpbGQsZikg Y2hhciAqeGhscCwgKnhkZWYsICoqeHA7IGludCAqd2lsZDsgeHhfc3RycCBmOyB7CisgICAgcmV0 dXJuKGNtaWZpMih4aGxwLHhkZWYseHAsd2lsZCwwLE5VTEwsZiwwKSk7Cit9CisvKgorICBjbWlm aXAoKSBpcyBjYWxsZWQgd2hlbiB3ZSB3YW50IHRvIHN1cHBseSBhIHBhdGggb3IgcGF0aCBsaXN0 IHRvIHNlYXJjaAorICBpbiBjYXNlIHRoZSBmaWxlbmFtZSB0aGF0IHRoZSB1c2VyIGdpdmVzIGlz IChhKSBub3QgYWJzb2x1dGUsIGFuZCAoYikgY2FuJ3QKKyAgYmUgZm91bmQgYXMgZ2l2ZW4uICBU aGUgcGF0aCBzdHJpbmcgY2FuIGJlIHRoZSBuYW1lIG9mIGEgc2luZ2xlIGRpcmVjdG9yeSwKKyAg b3IgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHNlcGFyYXRlZCBieSB0aGUgUEFUSFNFUCBjaGFyYWN0 ZXIsIGRlZmluZWQgaW4KKyAgY2t1Y21kLmguICBMb29rIGluIGNrdXVzci5jIGFuZCBja3V1czMu YyBmb3IgZXhhbXBsZXMgb2YgdXNhZ2UuCisqLworaW50CitjbWlmaXAoeGhscCx4ZGVmLHhwLHdp bGQsZCxwYXRoLGYpCisgICAgY2hhciAqeGhscCwqeGRlZiwqKnhwOyBpbnQgKndpbGQsIGQ7IGNo YXIgKiBwYXRoOyB4eF9zdHJwIGY7IHsKKyAgICByZXR1cm4oY21pZmkyKHhobHAseGRlZix4cCx3 aWxkLDAscGF0aCxmLDApKTsKK30KKworLyogIEMgTSBEIEkgUiAgLS0gIFBhcnNlIGEgZGlyZWN0 b3J5IG5hbWUgICovCisKKy8qCisgVGhpcyBmdW5jdGlvbiBkZXBlbmRzIG9uIHRoZSBleHRlcm5h bCBmdW5jdGlvbnM6CisgICBpc2RpcihzKSAgLSBDaGVjayBpZiBzdHJpbmcgcyBpcyB0aGUgbmFt ZSBvZiBhIGRpcmVjdG9yeQorICAgemNoa2kocykgIC0gQ2hlY2sgaWYgaW5wdXQgZmlsZSBzIGV4 aXN0cyBhbmQgd2hhdCB0eXBlIGl0IGlzLgorIElmIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3QgYXZh aWxhYmxlLCB0aGVuIHVzZSBjbWZsZCgpIHRvIHBhcnNlIGRpciBuYW1lcy4KKworIFJldHVybnMK KyAgIC05IEZvciBhbGwgc29ydHMgb2YgcmVhc29ucywgYWZ0ZXIgcHJpbnRpbmcgYXBwcm9wcmlh dGUgZXJyb3IgbWVzc2FnZS4KKyAgIC00IEVPRgorICAgLTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3 aGVuIHJlcXVpcmVkLAorICAgLTIgaWYgb3V0IG9mIHNwYWNlIG9yIG90aGVyIGludGVybmFsIGVy cm9yLAorICAgLTEgaWYgcmVwYXJzZSBuZWVkZWQsCisgICAgMCBvciAxLCB3aXRoIHhwIHBvaW50 aW5nIHRvIG5hbWUsIGlmIGRpcmVjdG9yeSBzcGVjaWZpZWQsCisqLworaW50CitjbWRpcih4aGxw LHhkZWYseHAsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IHh4X3N0cnAgZjsgeworICAgIGlu dCB3aWxkOworICAgIHJldHVybihjbWlmaTIoeGhscCx4ZGVmLHhwLCZ3aWxkLDAsTlVMTCxmLDEp KTsKK30KKworLyogTGlrZSBDTURJUiBidXQgaW5jbHVkZXMgUEFUSCBzZWFyY2ggKi8KKworaW50 CitjbWRpcnAoeGhscCx4ZGVmLHhwLHBhdGgsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IGNo YXIgKiBwYXRoOyB4eF9zdHJwIGY7IHsKKyAgICBpbnQgd2lsZDsKKyAgICByZXR1cm4oY21pZmky KHhobHAseGRlZix4cCwmd2lsZCwwLHBhdGgsZiwxKSk7Cit9CisKKy8qCisgIGNtaWZpMigpIGlz IHRoZSBiYXNlIGZpbGVuYW1lIHBhcnNlciBjYWxsZWQgYnkgY21pZmksIGNtaWZpcCwgY21kaXIs IGV0Yy4KKyAgVXNlIGl0IGRpcmVjdGx5IHdoZW4geW91IGFsc28gd2FudCB0byBwYXJzZSBhIGRp cmVjdG9yeSBvciBkZXZpY2UKKyAgbmFtZSBhcyBhbiBpbnB1dCBmaWxlLCBhcyBpbiB0aGUgRElS RUNUT1JZIGNvbW1hbmQuICBDYWxsIHdpdGg6CisgICAgeGhscCAgLS0gaGVscCBtZXNzYWdlIG9u ID8KKyAgICB4ZGVmICAtLSBkZWZhdWx0IHJlc3BvbnNlCisgICAgeHAgICAgLS0gcG9pbnRlciB0 byByZXN1bHQgKGluIG91ciBzcGFjZSwgbXVzdCBiZSBjb3BpZWQgZnJvbSBoZXJlKQorICAgIHdp bGQgIC0tIGZsYWcgc2V0IHVwb24gcmV0dXJuIHRvIGluZGljYXRlIGlmIGZpbGVzcGVjIHdhcyB3 aWxkCisgICAgZCAgICAgLS0gMCB0byBwYXJzZSBmaWxlcywgMSB0byBwYXJzZSBmaWxlcyBvciBk aXJlY3RvcmllcworICAgICAgICAgICAgIEFkZCAyIHRvIGluaGliaXQgZm9sbG93aW5nIG9mIHN5 bWxpbmtzLgorICAgIHBhdGggIC0tIHNlYXJjaCBwYXRoIGZvciBmaWxlcworICAgIGYgICAgIC0t IHBvaW50ZXIgdG8gc3RyaW5nIHByb2Nlc3NpbmcgZnVuY3Rpb24gKGUuZy4gdG8gZXZhbHVhdGUg dmFyaWFibGVzKQorICAgIGRpcmZsZyAtLSAxIHRvIHBhcnNlICpvbmx5KiBkaXJlY3Rvcmllcywg MCBvdGhlcndpc2UKKyovCitpbnQKK2NtaWZpMih4aGxwLHhkZWYseHAsd2lsZCxkLHBhdGgsZixk aXJmbGcpCisgICAgY2hhciAqeGhscCwqeGRlZiwqKnhwOyBpbnQgKndpbGQsIGQ7IGNoYXIgKiBw YXRoOyB4eF9zdHJwIGY7IGludCBkaXJmbGc7IHsKKyAgICBleHRlcm4gaW50IHJlY3Vyc2l2ZSwg ZGlyYWN0aXZlLCBjZGFjdGl2ZSwgZGJscXVvOworICAgIGludCBpLCB4LCBpdHNhZGlyLCB4Yywg ZXhwYW5kZWQgPSAwLCBuZmlsZXMgPSAwLCBjaGlsZHJlbiA9IC0xOworICAgIGludCBxZmxhZyA9 IDA7CisgICAgbG9uZyB5OworICAgIENLX09GRl9UIGZpbGVzaXplOworICAgIGNoYXIgKnNwID0g TlVMTCwgKnpxLCAqbnAgPSBOVUxMOworICAgIGNoYXIgKnN2ID0gTlVMTCwgKnAgPSBOVUxMOwor I2lmZGVmIERUSUxERQorICAgIGNoYXIgKmRpcnA7CisjZW5kaWYgLyogRFRJTERFICovCisKKyNp Zm5kZWYgTk9QQVJUSUFMCisjaWZuZGVmIE9TMgorI2lmZGVmIE9TSworICAgIC8qIFRoaXMgbGFy Z2UgYXJyYXkgaXMgZHluYW1pYyBmb3IgT1MtOSAtLSBzaG91bGQgZG8gZm9yIG90aGVycyB0b28u Li4gKi8KKyAgICBleHRlcm4gY2hhciAqKm10Y2hzOworI2Vsc2UKKyNpZmRlZiBVTklYCisgICAg LyogT0ssIGZvciBVTklYIHRvbyAqLworICAgIGV4dGVybiBjaGFyICoqbXRjaHM7CisjZWxzZQor I2lmZGVmIFZNUworICAgIGV4dGVybiBjaGFyICoqbXRjaHM7CisjZWxzZQorICAgIGV4dGVybiBj aGFyICptdGNoc1tdOworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRp ZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT1BBUlRJQUwgKi8KKwor ICAgIGlmICgheGhscCkgeGhscCA9ICIiOworICAgIGlmICgheGRlZikgeGRlZiA9ICIiOworCisj aWZuZGVmIE5PTEFTVEZJTEUKKyAgICBtYWtlc3RyKCZ0bXBsYXN0ZmlsZSxOVUxMKTsKKyNlbmRp ZgkvKiBOT0xBU1RGSUxFICovCisgICAgbnp4b3B0cyA9IDA7CQkJLyogenhwYW5kKCkgb3B0aW9u cyAqLworICAgIGRlYnVnKEYxMDEsImNtaWZpIGQiLCIiLGQpOworICAgIGlmIChkICYgMikgewkJ CS8qIGQgJiAyIG1lYW5zIGRvbid0IGZvbGxvdyBzeW1saW5rcyAqLworCWQgXj0gMjsKKwluenhv cHRzID0gWlhfTk9MSU5LUzsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiY21pZmkgbnp4b3B0cyIs IiIsbnp4b3B0cyk7CisgICAgY21mbGRmbGdzID0gMDsKKyAgICBpZiAocGF0aCkKKyAgICAgIGlm ICghKnBhdGgpCisJcGF0aCA9IE5VTEw7CisgICAgaWYgKHBhdGgpIHsJCQkJLyogTWFrZSBhIGNv cHkgd2UgY2FuIHBva2UgKi8KKwl4ID0gc3RybGVuKHBhdGgpOworCW5wID0gKGNoYXIgKikgbWFs bG9jKHggKyAxKTsKKwlpZiAobnApIHsKKwkgICAgc3RyY3B5KG5wLCBwYXRoKTsKKwkgICAgcGF0 aCA9IHNwID0gbnA7CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJjbWlmaTIgcGF0aCIscGF0 aCwwKTsKKworICAgIGNrc3RybmNweShjbWRlZmF1bHQseGRlZixDTURFRkFVTFQpOyAvKiBDb3B5 IGRlZmF1bHQgKi8KKyAgICB4ZGVmID0gY21kZWZhdWx0OworCisgICAgaW53b3JkID0gMDsJCQkJ LyogSW5pdGlhbGl6ZSBjb3VudHMgJiBwb2ludGVycyAqLworICAgIGNjID0gMDsKKyAgICB4YyA9 IDA7CisgICAgKnhwID0gIiI7CQkJCS8qIFBvaW50ZXIgdG8gcmVzdWx0IHN0cmluZyAqLworICAg IGlmICgoeCA9IGNtZmxncykgIT0gMSkgeyAgICAgICAgICAgIC8qIEFscmVhZHkgY29uZmlybWVk PyAqLworI2lmZGVmIEJTX0RJUlNFUAorCWRpcm5hbWZsZyA9IDE7CisgICAgICAgIHggPSBndHdv cmQoMCk7CQkJLyogTm8sIGdldCBhIHdvcmQgKi8KKwlkaXJuYW1mbGcgPSAwOworI2Vsc2UKKyAg ICAgICAgeCA9IGd0d29yZCgwKTsgICAgICAgICAgICAgICAgICAvKiBObywgZ2V0IGEgd29yZCAq LworI2VuZGlmIC8qIEJTX0RJUlNFUCAqLworICAgIH0gZWxzZSB7CQkJCS8qIElmIHNvLCB1c2Ug ZGVmYXVsdCwgaWYgYW55LiAqLworICAgICAgICBpZiAoc2V0YXRtKHhkZWYsMSkgPCAwKSB7CisJ ICAgIHByaW50ZigiP0RlZmF1bHQgbmFtZSB0b28gbG9uZ1xuIik7CisJICAgIGlmIChucCkgZnJl ZShucCk7CisJICAgIHJldHVybigtOSk7CisJfQorICAgIH0KKyAgaV9wYXRoOgorICAgICp4cCA9 IGF0bWJ1ZjsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdC4gKi8KKwor ICAgIHdoaWxlICgxKSB7CisgICAgICAgIHhjICs9IGNjOyAgICAgICAgICAgICAgICAgICAgICAg LyogQ291bnQgdGhpcyBjaGFyYWN0ZXIuICovCisgICAgICAgIGRlYnVnKEYxMTEsImNtaWZpIGd0 d29yZCIsYXRtYnVmLHhjKTsKKwlkZWJ1ZyhGMTAxLCJjbWlmaSBzd2l0Y2ggeCIsIiIseCk7Cisg ICAgICAgIHN3aXRjaCAoeCkgewkJCS8qIHggPSBndHdvcmQoKSByZXR1cm4gY29kZSAqLworCSAg Y2FzZSAtMTA6CisJICAgIGlmIChndGltZXIoKSA+IHRpbWVsaW1pdCkgeworI2lmZGVmIElLU0QK KyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCJcclxuSUtTRCBJRExFIFRJTUVPVVQ6ICVkIHNlY1xyXG4iLCB0aW1lbGltaXQpOworICAg ICAgICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULDApOworICAgICAgICAgICAgICAgIH0K KyNlbmRpZiAvKiBJS1NEICovCisJCS8qIGlmICghcXVpZXQpIHByaW50ZigiP1RpbWVkIG91dFxu Iik7ICovCisJCXJldHVybigtMTApOworCSAgICB9IGVsc2UgeworCQl4ID0gZ3R3b3JkKDApOwor CQljb250aW51ZTsKKwkgICAgfQorCSAgY2FzZSAtOToKKwkgICAgcHJpbnRmKCJDb21tYW5kIG9y IGZpZWxkIHRvbyBsb25nXG4iKTsKKwkgIGNhc2UgLTQ6CQkJLyogRU9GICovCisJICBjYXNlIC0y OgkJCS8qIE91dCBvZiBzcGFjZS4gKi8KKwkgIGNhc2UgLTE6CQkJLyogUmVwYXJzZSBuZWVkZWQg Ki8KKwkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkgICAgcmV0dXJuKHgpOworCSAgY2FzZSAxOgkJ CS8qIENSICovCisJICBjYXNlIDA6CQkJLyogU1AgKi8KKwkgICAgaWYgKHhjID09IDApCQkvKiBJ ZiBubyBpbnB1dC4uLiAqLworCSAgICAgICp4cCA9IHhkZWY7CQkvKiBzdWJzdGl0dXRlIHRoZSBk ZWZhdWx0ICovCisjaWZuZGVmIE5PTEFTVEZJTEUKKwkgICAgbWFrZXN0cigmdG1wbGFzdGZpbGUs KnhwKTsJLyogTWFrZSBhIGNvcHkgYmVmb3JlIGJzdHJpcHBpbmcgKi8KKyNlbmRpZgkvKiAjaWZu ZGVmIE5PTEFTVEZJTEUgKi8KKwkgICAgKnhwID0gYnJzdHJpcCgqeHApOwkJLyogU3RyaXAgYnJh Y2VzICovCisJICAgIGlmICgqKnhwID09IE5VTCkgewkJLyogMTIgbWFyIDIwMDEgKi8KKwkJaWYg KG5wKSBmcmVlKG5wKTsKKwkJcmV0dXJuKC0zKTsKKwkgICAgfQorCSAgICBkZWJ1ZyhGMTEwLCJj bWlmaSBicnN0cmlwIiwqeHAsMCk7CisjaWZuZGVmIE5PU1BMCisJICAgIGlmIChmKSB7CQkJLyog SWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCisjaWZkZWYgRE9DSEtWQVIKKwkJ Y2hhciAqcyA9ICp4cDsJCS8qIFNlZSBpZiB0aGVyZSBhcmUgYW55IHZhcmlhYmxlcyBpbiAqLwor CQlpbnQgeDsKKwkJd2hpbGUgKCpzKSB7CQkvKiB0aGUgc3RyaW5nIGFuZCBpZiBzbywgZXhwYW5k IHRoZW0gKi8KKwkJICAgIHggPSBjaGt2YXIocyk7CisJCSAgICAvKiBkZWJ1ZyhGMTExLCJjbWlm aSBjaGt2YXIiLCp4cCx4KTsgKi8KKwkJICAgIGlmICh4KSB7CisjZW5kaWYgLyogRE9DSEtWQVIg Ki8KKwkJCXpxID0gYXR4YnVmOworCQkJYXR4biA9IENNREJMOworCQkJaWYgKCgqZikoKnhwLCZ6 cSwmYXR4bikgPCAwKSB7CisJCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJCSAgICByZXR1cm4o LTIpOworCQkJfQorCQkJKnhwID0gYXR4YnVmOworCQkJaWYgKCFhdHhidWZbMF0pCisJCQkgICp4 cCA9IHhkZWY7CisjaWZkZWYgRE9DSEtWQVIKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgcysr OworCQl9CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKwkgICAgfQorI2VuZGlmIC8qIE5PU1BMICov CisJICAgIGlmICgqKnhwID09IE5VTCkgewkJLyogMTIgbWFyIDIwMDEgKi8KKwkJaWYgKG5wKSBm cmVlKG5wKTsKKwkJcmV0dXJuKC0zKTsKKwkgICAgfQorI2lmZGVmIERUSUxERQorCSAgICBpZiAo ZGlyZmxnKSB7CisJCWRpcnAgPSB0aWxkZV9leHBhbmQoKnhwKTsgLyogRXhwYW5kIHRpbGRlLCBp ZiBhbnksICovCisJCWlmICgqZGlycCAhPSAnXDAnKSB7CS8qIGluIHRoZSBhdG9tIGJ1ZmZlci4g Ki8KKwkJICAgIGlmIChzZXRhdG0oZGlycCwxKSA8IDApIHsKKwkJCXByaW50ZigiRXhwYW5kZWQg bmFtZSB0b28gbG9uZ1xuIik7CisJCQlpZiAobnApIGZyZWUobnApOworCQkJcmV0dXJuKC05KTsK KwkJICAgIH0KKwkJfQorCQkqeHAgPSBhdG1idWY7CisJCWRlYnVnKEYxMTAsImNtaWZpIHRpbGRl X2V4cGFuZCIsKnhwLDApOworCSAgICB9CisjZW5kaWYgLyogRFRJTERFICovCisJICAgIGlmICgh c3YpIHsJCQkvKiBPbmx5IGRvIHRoaXMgb25jZSAqLworCQlzdiA9IG1hbGxvYygoaW50KXN0cmxl bigqeHApKzEpOyAvKiBNYWtlIGEgc2FmZSBjb3B5ICovCisJCWlmICghc3YpIHsKKwkJICAgIHBy aW50ZigiP2NtaWZpOiBtYWxsb2MgZXJyb3JcbiIpOworCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsK KwkJICAgIHJldHVybigtOSk7CisJCX0KKwkJc3RyY3B5KHN2LCp4cCk7CisJCWRlYnVnKEYxMTAs ImNtaWZpIHN2IixzdiwwKTsKKwkgICAgfQorCisvKiBUaGlzIGlzIHRvIGdldCBhcm91bmQgImNk IC8iIGZhaWxpbmcgYmVjYXVzZSAidG9vIG1hbnkgZGlyZWN0b3JpZXMgbWF0Y2giICovCisKKwkg ICAgZXhwYW5kZWQgPSAwOwkJLyogRGlkbid0IGNhbGwgenhwYW5kICovCisjaWZkZWYgZGF0YWdl bmVyYWwKKwkgICAgZGVidWcoRjExMCwiY21pZmkgaXNkaXIgMSIsKnhwLDApOworCSAgICB7CisJ CWludCB5OyBjaGFyICpzOworCQlzID0gKnhwOworCQl5ID0gc3RybGVuKHMpOworCQlpZiAoeSA+ IDEgJiYKKwkJICAgIChzW3ktMV0gPT0gJzonIHx8CisJCSAgICAgc1t5LTFdID09ICdeJyB8fAor CQkgICAgIHNbeS0xXSA9PSAnPScpCisJCSAgICApCisJCSAgc1t5LTFdID0gTlVMOworCSAgICB9 CisJICAgIGRlYnVnKEYxMTAsImNtaWZpIGlzZGlyIDIiLCp4cCwwKTsKKyNlbmRpZiAvKiAgZGF0 YWdlbmVyYWwgKi8KKworI2lmZGVmIFZNUworCSAgICBpZiAoZGlyZmxnKSB7CisJCWlmICghc3Ry Y21wKCp4cCwiLi4iKSkgeyAvKiBGb3IgVU5JWGVycy4uLiAqLworCQkgICAgc2V0YXRtKCItIiww KTsKKwkJICAgICp4cCA9IGF0bWJ1ZjsKKwkJfSBlbHNlIGlmICghc3RyY21wKCp4cCwiLiIpKSB7 CisJCSAgICBzZXRhdG0oIltdIiwwKTsKKwkJICAgICp4cCA9IGF0bWJ1ZjsKKwkJfQorCSAgICB9 CisjZW5kaWYgLyogVk1TICovCisJICAgIGl0c2FkaXIgPSBpc2RpcigqeHApOwkvKiBJcyBpdCBh IGRpcmVjdG9yeT8gKi8KKwkgICAgZGVidWcoRjExMSwiY21pZmkgaXRzYWRpciIsKnhwLGl0c2Fk aXIpOworI2lmZGVmIFZNUworCSAgICAvKiBJZiB0aGV5IHNhaWQgImJsYWgiIHdoZXJlICJibGFo LmRpciIgaXMgYSBkaXJlY3RvcnkuLi4gKi8KKwkgICAgLyogY2hhbmdlIGl0IHRvIFsuYmxhaF0u ICovCisJICAgIGlmICghaXRzYWRpcikgeworCQljaGFyIHRtcGJ1Zls2MDBdOworCQlpbnQgZmxh ZyA9IDA7IGNoYXIgYywgKiBwOworCQlwID0gKnhwOworCQl3aGlsZSAoKGMgPSAqcCsrKSAmJiAh ZmxhZykKKwkJICBpZiAoY2tzdHJjaHIoIi5bXToqPzw+IixjKSkKKwkJICAgIGZsYWcgPSAxOwor CQlkZWJ1ZyhGMTExLCJjbWlmaSBWTVMgZGlybmFtZSBmbGFnIiwqeHAsZmxhZyk7CisJCWlmICgh ZmxhZykgeworCQkgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwiWy4iLCp4cCwiXSIsTlVM TCk7CisJCSAgICBpdHNhZGlyID0gaXNkaXIodG1wYnVmKTsKKwkJICAgIGlmIChpdHNhZGlyKSB7 CisJCQlzZXRhdG0odG1wYnVmLDApOworCQkJKnhwID0gYXRtYnVmOworCQkgICAgfQorCQkgICAg ZGVidWcoRjExMSwiY21pZmkgVk1TIGRpcm5hbWUgZmxhZyBpdHNhZGlyIiwqeHAsaXRzYWRpcik7 CisJCX0KKwkgICAgfSBlbHNlIGlmIChpdHNhZGlyID09IDEgJiYgKih4cFswXSkgPT0gJy4nICYm ICooeHBbMV0pKSB7CisJCWNoYXIgKnA7CisJCWlmIChwID0gbWFsbG9jKGNjICsgNCkpIHsKKwkJ ICAgIGNrbWFrbXNnKHAsY2MrNCwiWyIsKnhwLCJdIixOVUxMKTsKKwkJICAgIHNldGF0bShwLDAp OworCQkgICAgKnhwID0gYXRtYnVmOworCQkgICAgZGVidWcoRjExMCwiY21kaXIgLmZvbyIsKnhw LDApOworCQkgICAgZnJlZShwKTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKGl0c2FkaXIgPT0gMiAm JiAhZGlyYWN0aXZlKSB7CisJCWludCB4OwkJCS8qIFtGT09dQkFSLkRJUiBpbnN0ZWFkIG9mIFtG T08uQkFSXSAqLworCQljaGFyICpwOworCQlwID0gbWFsbG9jKGNjICsgNCk7CisJCWlmIChwKSB7 CisJCSAgICB4ID0gY3Z0ZGlyKCp4cCxwLEFUTUJMKTsgLyogQ29udmVydCB0byBbRk9PLkJBUl0g Ki8KKwkJICAgIGlmICh4ID4gMCkgeworCQkJc2V0YXRtKHAsMCk7CisJCQkqeHAgPSBhdG1idWY7 CisJCQlkZWJ1ZyhGMTEwLCJjbWRpciBjdnRkaXIiLCp4cCwwKTsKKwkJICAgIH0KKwkJICAgIGZy ZWUocCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIFZNUyAqLworCisJICAgIGRlYnVnKEYxMDEs ImNtaWZpIGRpcmZsZyIsIiIsZGlyZmxnKTsKKwkgICAgaWYgKGRpcmZsZykgewkJLyogUGFyc2lu ZyBhIGRpcmVjdG9yeSBuYW1lPyAqLworCQkvKiBZZXMsIGRvZXMgaXQgY29udGFpbiB3aWxkY2Fy ZHM/ICovCisJCWlmIChpc3dpbGQoKnhwKSB8fAorCQkgICAgKGRpcmFjdGl2ZSAmJiAoIXN0cmNt cCgqeHAsIi4iKSAgfHwgIXN0cmNtcCgqeHAsIi4uIikpKQorCQkgICAgKSB7CisJCSAgICBuenhv cHRzIHw9IFpYX0RJUk9OTFk7IC8qIE1hdGNoIG9ubHkgZGlyZWN0b3J5IG5hbWVzICovCisJCSAg ICBpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENIRE9UOworCQkgICAgaWYgKHJlY3Vy c2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOworCQkgICAgZGVidWcoRjExMSwiY21pZmkgbnp4 b3B0cyAyIiwqeHAsbnp4b3B0cyk7CisJCSAgICB5ID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7CisJ CSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBuenhwYW5kIDIiLCp4cCx5KTsKKwkJICAgIG5maWxlcyA9 IHk7CisJCSAgICBleHBhbmRlZCA9IDE7CisJCX0gZWxzZSB7CisjaWZkZWYgVk1TCisvKgorICBU aGlzIGlzIHRvIGFsbG93IChlLmcuKSAiY2QgZm9vIiwgd2hlcmUgRk9PLkRJUjsxIGlzIGluIHRo ZQorICBjdXJyZW50IGRpcmVjdG9yeS4KKyovCisJCSAgICBkZWJ1ZyhGMTExLCJjbWRpciBpdHNh ZGlyIiwqeHAsaXRzYWRpcik7CisJCSAgICBpZiAoIWl0c2FkaXIpIHsKKwkJCWNoYXIgKnM7CisJ CQlpbnQgbjsKKwkJCXMgPSAqeHA7CisJCQluID0gc3RybGVuKHMpOworCQkJaWYgKG4gPiAwICYm CisjaWZkZWYgQ09NTUVOVAorCQkJICAgICpzICE9ICdbJyAmJiBzW24tMV0gIT0gJ10nICYmCisJ CQkgICAgKnMgIT0gJzwnICYmIHNbbi0xXSAhPSAnPicgJiYKKyNlbHNlCisJCQkgICAgY2tpbmRl eCgiWyIscywwLDAsMSkgPT0gMCAmJgorCQkJICAgIGNraW5kZXgoIjwiLHMsMCwwLDEpID09IDAg JiYKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCQkgICAgc1tuLTFdICE9ICc6JykgeworCQkJICAg IGNoYXIgKiBkaXJidWYgPSBOVUxMOworCQkJICAgIGRpcmJ1ZiA9IChjaGFyICopbWFsbG9jKG4r NCk7CisJCQkgICAgaWYgKGRpcmJ1ZikgeworCQkJCWlmICgqcyA9PSAnLicpCisJCQkJICBja21h a21zZyhkaXJidWYsbis0LCJbIixzLCJdIixOVUxMKTsKKwkJCQllbHNlCisJCQkJICBja21ha21z ZyhkaXJidWYsbis0LCJbLiIscywiXSIsTlVMTCk7CisJCQkJaXRzYWRpciA9IGlzZGlyKGRpcmJ1 Zik7CisJCQkJZGVidWcoRjExMSwiY21kaXIgZGlyYnVmIixkaXJidWYsaXRzYWRpcik7CisJCQkJ aWYgKGl0c2FkaXIpIHsKKwkJCQkgICAgc2V0YXRtKGRpcmJ1ZiwwKTsKKwkJCQkgICAgKnhwID0g YXRtYnVmOworCQkJCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciBuZXcgKnhwIiwqeHAsMCk7CisJCQkJ fQorCQkJCWZyZWUoZGlyYnVmKTsKKwkJCSAgICB9CisKKy8qIFRoaXMgaXMgdG8gYWxsb3cgQ0RQ QVRIIHRvIHdvcmsgaW4gVk1TLi4uICovCisKKwkJCX0gZWxzZSBpZiAobiA+IDApIHsKKwkJCSAg ICBjaGFyICogcDsgaW50IGksIGosIGssIGQ7CisJCQkgICAgY2hhciByYlsyXSA9ICJdIjsKKwkJ CSAgICBpZiAocCA9IG1hbGxvYyh4ICsgOCkpIHsKKwkJCQlja3N0cm5jcHkocCwqeHAseCs4KTsK KwkJCQlpID0gY2tpbmRleCgiLiIscCwtMSwxLDEpOworCQkJCWQgPSBja2luZGV4KCIuZGlyIixw LDAsMCwwKTsKKwkJCQlqID0gY2tpbmRleCgiXSIscCwtMSwxLDEpOworCQkJCWlmIChqID09IDAp IHsKKwkJCQkgICAgaiA9IGNraW5kZXgoIj4iLHAsLTEsMSwxKTsKKwkJCQkgICAgcmJbMF0gPSAn Pic7CisJCQkJfQorCQkJCWsgPSBja2luZGV4KCI6IixwLC0xLDEsMSk7CisJCQkJaWYgKGkgPCBq IHx8IGkgPCBrKSBpID0gMDsKKwkJCQlpZiAoZCA8IGogfHwgZCA8IGspIGQgPSAwOworCQkJCS8q IENoYW5nZSBbRk9PXUJBUiBvciBbRk9PXUJBUi5ESVIgKi8KKwkJCQkvKiB0byBbRk9PLkJBUl0g Ki8KKwkJCQlpZiAoaiA+IDAgJiYgaiA8IG4pIHsKKwkJCQkgICAgcFtqLTFdID0gJy4nOworCQkJ CSAgICBpZiAoZCA+IDApIHBbZC0xXSA9IE5VTDsKKwkJCQkgICAgY2tzdHJuY2F0KHAscmIseCs4 KTsKKwkJCQkgICAgZGVidWcoRjExMCwiY21kaXIgeHh4IixwLDApOworCQkJCX0KKwkJCQlpdHNh ZGlyID0gaXNkaXIocCk7CisJCQkJZGVidWcoRjExMSwiY21kaXIgcCIscCxpdHNhZGlyKTsKKwkJ CQlpZiAoaXRzYWRpcikgeworCQkJCSAgICBzZXRhdG0ocCwwKTsKKwkJCQkgICAgKnhwID0gYXRt YnVmOworCQkJCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciBuZXcgKnhwIiwqeHAsMCk7CisJCQkJfQor CQkJCWZyZWUocCk7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorI2VuZGlmIC8qIFZNUyAqLwor CQkgICAgeSA9ICghaXRzYWRpcikgPyAwIDogMTsKKwkJICAgIGRlYnVnKEYxMTEsImNtaWZpIHkg aXRzYWRpciIsKnhwLHkpOworCQl9CisJICAgIH0gZWxzZSB7CQkJLyogUGFyc2luZyBhIGZpbGVu YW1lLiAqLworCQlkZWJ1ZyhGMTEwLCJjbWlmaSAqeHAgcHJlLXp4cGFuZCIsKnhwLDApOworI2lm bmRlZiBDT01NRU5UCisJCW56eG9wdHMgfD0gKGQgPT0gMCkgPyBaWF9GSUxPTkxZIDogMDsgLyog U28gYWx3YXlzIGV4cGFuZC4gKi8KKwkJaWYgKG1hdGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRD SERPVDsKKwkJaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNFOworCQl5ID0gbnp4 cGFuZCgqeHAsbnp4b3B0cyk7CisjZWxzZQorLyogSGVyZSB3ZSdyZSB0cnlpbmcgdG8gZml4IGEg cHJvYmxlbSBpbiB3aGljaCBhIGRpcmVjdG9yeSBuYW1lIGlzIGFjY2VwdGVkICovCisvKiBhcyBh IGZpbGVuYW1lLCBidXQgdGhpcyBicmVha3MgdG9vIG1hbnkgb3RoZXIgdGhpbmdzLiAqLworCQkv KiBuenhvcHRzID0gMDsgKi8KKwkJaWYgKCFkKSB7CisJCSAgICBpZiAoaXRzYWRpciAmICFpc3dp bGQoKnhwKSkgeworCQkJZGVidWcoRjEwMCwiY21pZmkgZGlyIHdoZW4gZmlsb25seSIsIiIsMCk7 CisJCQlwcmludGYoIj9Ob3QgYSByZWd1bGFyIGZpbGU6IFwiJXNcIlxuIiwqeHApOworCQkJaWYg KHN2KSBmcmVlKHN2KTsKKwkJCWlmIChucCkgZnJlZShucCk7CisJCQlyZXR1cm4oLTkpOworCQkg ICAgfSBlbHNlIHsKKwkJCW56eG9wdHMgfD0gWlhfRklMT05MWTsKKwkJCWlmIChtYXRjaGRvdCkg IG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7CisJCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpY X1JFQ1VSU0U7CisJCQl5ID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7CisJCSAgICB9CisJCX0KKyNl bmRpZiAvKiBDT01NRU5UICovCisJCW5maWxlcyA9IHk7CisJCWRlYnVnKEYxMTEsImNtaWZpIHkg bnp4cGFuZCIsKnhwLHkpOworCQlkZWJ1ZyhGMTExLCJjbWlmaSB5IGF0bWJ1ZiIsYXRtYnVmLGl0 c2FkaXIpOworCQlleHBhbmRlZCA9IDE7CisJICAgIH0KKwkgICAgLyogZG9teWRpcigpIGNhbGxz IHp4cmV3aW5kKCkgc28gd2UgTVVTVCBjYWxsIG56eHBhbmQoKSBoZXJlICovCisJICAgIGlmICgh ZXhwYW5kZWQgJiYgZGlyYWN0aXZlKSB7CisJCWRlYnVnKEYxMTAsImNtaWZpIGRpcmFjdGl2ZSBj YXRjaC1hbGwgenhwYW5kIiwqeHAsMCk7CisJCW56eG9wdHMgfD0gKGQgPT0gMCkgPyBaWF9GSUxP TkxZIDogKGRpcmZsZyA/IFpYX0RJUk9OTFkgOiAwKTsKKwkJaWYgKG1hdGNoZG90KSAgbnp4b3B0 cyB8PSBaWF9NQVRDSERPVDsKKwkJaWYgKHJlY3Vyc2l2ZSkgbnp4b3B0cyB8PSBaWF9SRUNVUlNF OworCQl5ID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7CisJCWRlYnVnKEYxMTEsImNtaWZpIGRpcmFj dGl2ZSBuenhwYW5kIiwqeHAseSk7CisJCW5maWxlcyA9IHk7CisJCWV4cGFuZGVkID0gMTsKKwkg ICAgfQorCSAgICAqd2lsZCA9IChpc3dpbGQoc3YpIHx8ICh5ID4gMSkpICYmIChpdHNhZGlyID09 IDApOworCisjaWZkZWYgUkVDVVJTSVZFCisJICAgIGlmICghKndpbGQpICp3aWxkID0gcmVjdXJz aXZlOworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworCisJICAgIGRlYnVnKEYxMTEsImNtaWZpIHN2 IHdpbGQiLHN2LCp3aWxkKTsKKwkgICAgZGVidWcoRjEwMSwiY21pZmkgeSIsIiIseSk7CisJICAg IGlmIChkaXJmbGcgJiYgKndpbGQgJiYgY2RhY3RpdmUpIHsKKwkJaWYgKHkgPiAxKSB7CisJCSAg ICBwcmludGYoIj9XaWxkY2FyZCBtYXRjaGVzIG1vcmUgdGhhbiBvbmUgZGlyZWN0b3J5XG4iKTsK KwkJICAgIGlmIChzdikgZnJlZShzdik7CisJCSAgICBpZiAobnApIGZyZWUobnApOworCQkgICAg cmV0dXJuKC05KTsKKwkJfSBlbHNlIHsKKwkJICAgIHpuZXh0KCp4cCk7CisJCX0KKwkgICAgfQor CSAgICBpZiAoaXRzYWRpciAmJiBkICYmICFkaXJmbGcpIHsgLyogSXQncyBhIGRpcmVjdG9yeSBh bmQgbm90IHdpbGQgKi8KKwkJaWYgKHN2KSBmcmVlKHN2KTsJLyogYW5kIGl0J3Mgb2sgdG8gcGFy c2UgZGlyZWN0b3JpZXMgKi8KKwkJaWYgKG5wKSBmcmVlKG5wKTsKKyNpZm5kZWYgTk9MQVNURklM RQorCQltYWtlc3RyKCZsYXN0ZmlsZSx0bXBsYXN0ZmlsZSk7CisjZW5kaWYJLyogTk9MQVNURklM RSAqLworCQlyZXR1cm4oeCk7CisJICAgIH0KKwkgICAgaWYgKHkgPT0gMCkgewkJLyogRmlsZSB3 YXMgbm90IGZvdW5kICovCisJCWludCBkb3NlYXJjaCA9IDA7CisJCWRvc2VhcmNoID0gKHBhdGgg IT0gTlVMTCk7IC8qIEEgc2VhcmNoIHBhdGggd2FzIGdpdmVuICovCisJCWlmIChkb3NlYXJjaCkg eworCQkgICAgZG9zZWFyY2ggPSBoYXNub3BhdGgoc3YpOyAvKiBGaWxlbmFtZSBpbmNsdWRlcyBu byBwYXRoICovCisJCSAgICBkZWJ1ZyhGMTExLCJjbWlmaXAgaGFzbm9wYXRoIixzdixkb3NlYXJj aCk7CisJCX0KKwkJaWYgKGRvc2VhcmNoKSB7CQkvKiBTZWFyY2ggdGhlIHBhdGguLi4gKi8KKwkJ ICAgIGNoYXIgKiBwdHIgPSBwYXRoOworCQkgICAgY2hhciBjOworCQkgICAgd2hpbGUgKDEpIHsK KwkJCWMgPSAqcHRyOworCQkJaWYgKGMgPT0gUEFUSFNFUCB8fCBjID09IE5VTCkgeworCQkJICAg IGlmICghKnBhdGgpIHsKKwkJCQlwYXRoID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJ CQkgICAgKnB0ciA9IE5VTDsKKyNpZmRlZiBVTklYCisvKiBCeSBkZWZpbml0aW9uIG9mIENEUEFU SCwgYW4gZW1wdHkgbWVtYmVyIGRlbm90ZXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCisJCQkg ICAgaWYgKCEqcGF0aCkKKwkJCSAgICAgIGNrc3RybmNweShhdG1idWYsIi4iLEFUTUJMKTsKKwkJ CSAgICBlbHNlCisjZW5kaWYgLyogVU5JWCAqLworCQkJICAgICAgY2tzdHJuY3B5KGF0bWJ1Zixw YXRoLEFUTUJMKTsKKyNpZmRlZiBWTVMKKwkJCSAgICBhdG1idWZbQVRNQkxdID0gTlVMOworLyog SWYgd2UgaGF2ZSBhIGxvZ2ljYWwgbmFtZSwgZXZhbHVhdGUgaXQgcmVjdXJzaXZlbHkgKi8KKwkJ CSAgICBpZiAoKihwdHItMSkgPT0gJzonKSB7IC8qIExvZ2ljYWwgbmFtZSBlbmRzIGluIDogKi8K KwkJCQljaGFyICpwOyBpbnQgbjsKKwkJCQl3aGlsZSAoKChuID0gc3RybGVuKGF0bWJ1ZikpICA+ IDApICYmCisJCQkJICAgICAgIGF0bWJ1ZltuLTFdID09ICc6JykgeworCQkJCSAgICBhdG1idWZb bi0xXSA9IE5VTDsKKwkJCQkgICAgZm9yIChwID0gYXRtYnVmOyAqcDsgcCsrKQorCQkJCSAgICAg IGlmIChpc2xvd2VyKCpwKSkgKnAgPSB0b3VwcGVyKCpwKTsKKwkJCQkgICAgZGVidWcoRjExMSwi Y21kaXIgQ0RQQVRIIExOIDEiLGF0bWJ1ZixuKTsKKwkJCQkgICAgcCA9IGdldGVudihhdG1idWYp OworCQkJCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciBDRFBBVEggTE4gMiIscCwwKTsKKwkJCQkgICAg aWYgKCFwKQorCQkJCSAgICAgIGJyZWFrOworCQkJCSAgICBzdHJuY3B5KGF0bWJ1ZixwLEFUTUJM KTsKKwkJCQkgICAgYXRtYnVmW0FUTUJMXSA9IE5VTDsKKwkJCQl9CisJCQkgICAgfQorI2Vsc2UK KyNpZmRlZiBPUzIKKwkJCSAgICBpZiAoKihwdHItMSkgIT0gJ1xcJyAmJiAqKHB0ci0xKSAhPSAn LycpCisJCQkgICAgICBja3N0cm5jYXQoYXRtYnVmLCJcXCIsQVRNQkwpOworI2Vsc2UKKyNpZmRl ZiBVTklYCisJCQkgICAgaWYgKCoocHRyLTEpICE9ICcvJykKKwkJCSAgICAgIGNrc3RybmNhdChh dG1idWYsIi8iLEFUTUJMKTsKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKwkJCSAgICBpZiAo KihwdHItMSkgIT0gJzonKQorCQkJICAgICAgY2tzdHJuY2F0KGF0bWJ1ZiwiOiIsQVRNQkwpOwor I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9T MiAqLworI2VuZGlmIC8qIFZNUyAqLworCQkJICAgIGNrc3RybmNhdChhdG1idWYsc3YsQVRNQkwp OworCQkJICAgIGRlYnVnKEYxMTAsImNtaWZpcCBhZGQgcGF0aCIsYXRtYnVmLDApOworCQkJICAg IGlmIChjID09IFBBVEhTRVApIHB0cisrOworCQkJICAgIHBhdGggPSBwdHI7CisJCQkgICAgYnJl YWs7CisJCQl9CisJCQlwdHIrKzsKKwkJICAgIH0KKwkJICAgIHggPSAxOworCQkgICAgaW53b3Jk ID0gMDsKKwkJICAgIGNjID0gMDsKKwkJICAgIHhjID0gKGludCkgc3RybGVuKGF0bWJ1Zik7CisJ CSAgICAqeHAgPSAiIjsKKwkJICAgIGdvdG8gaV9wYXRoOworCQl9CisJCWlmIChkKSB7CisJCSAg ICBpZiAoc3YpIGZyZWUoc3YpOworCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJICAgIHJldHVy bigtMik7CisJCX0gZWxzZSB7CisJCSAgICBpZiAoIW5vbXNnKSB7CisjaWZkZWYgQ0tST09UCisJ CQlpZiAoY2tyb290ZXJyKQorCQkJICBwcmludGYoIj9PZmYgTGltaXRzOiAlc1xuIixzdik7CisJ CQllbHNlCisjZW5kaWYgLyogQ0tST09UICovCisJCQkgIGlmICghcXVpZXQpCisJCQkgICAgcHJp bnRmKCI/Tm8gJXMgbWF0Y2ggLSAlc1xuIiwKKwkJCQkgZGlyZmxnID8gImRpcmVjdG9yaWVzIiA6 ICJmaWxlcyIsIHN2KTsKKwkJICAgIH0KKwkJICAgIGlmIChzdikgZnJlZShzdik7CisJCSAgICBp ZiAobnApIGZyZWUobnApOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCSAgICB9IGVsc2UgaWYg KHkgPCAwKSB7CisjaWZkZWYgQ0tST09UCisJCWlmIChja3Jvb3RlcnIpCisJCSAgcHJpbnRmKCI/ T2ZmIExpbWl0czogJXNcbiIsc3YpOworCQllbHNlCisjZW5kaWYgLyogQ0tST09UICovCisJCSAg cHJpbnRmKCI/VG9vIG1hbnkgJXMgbWF0Y2ggLSAlc1xuIiwKKwkJCSBkaXJmbGcgPyAiZGlyZWN0 b3JpZXMiIDogImZpbGVzIiwgc3YpOworCQlpZiAoc3YpIGZyZWUoc3YpOworCQlpZiAobnApIGZy ZWUobnApOworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgaWYgKCp3aWxkIHx8IHkgPiAxKSB7 CisJCWlmIChzdikgZnJlZShzdik7CisJCWlmIChucCkgZnJlZShucCk7CisjaWZuZGVmIE5PTEFT VEZJTEUKKwkJbWFrZXN0cigmbGFzdGZpbGUsdG1wbGFzdGZpbGUpOworI2VuZGlmCS8qIE5PTEFT VEZJTEUgKi8KKwkJcmV0dXJuKHgpOworCSAgICB9CisKKwkgICAgLyogSWYgbm90IHdpbGQsIHNl ZSBpZiBpdCBleGlzdHMgYW5kIGlzIHJlYWRhYmxlLiAqLworCisJICAgIGRlYnVnKEYxMTEsImNt aWZpIHN2IG5vdCB3aWxkIixzdiwqd2lsZCk7CisJICAgIGlmIChleHBhbmRlZCkKKwkgICAgICB6 bmV4dCgqeHApOwkJLyogR2V0IGZpcnN0IChvbmx5PykgbWF0Y2hpbmcgZmlsZSAqLworCSAgICBp ZiAoZGlyZmxnKQkJCS8qIE1heWJlIHdpbGQgYW5kIGV4cGFuZGVkICovCisJICAgICAgaXRzYWRp ciA9IGlzZGlyKCp4cCk7CS8qIHNvIGRvIHRoaXMgYWdhaW4uICovCisJICAgIGZpbGVzaXplID0g ZGlyZmxnID8gaXRzYWRpciA6IHpjaGtpKCp4cCk7IC8qIENoZWNrIGFjY2Vzc2liaWxpdHkgKi8K KwkgICAgaWYgKGV4cGFuZGVkKSB7CisjaWZkZWYgWlhSRVdJTkQKKwkJbmZpbGVzID0genhyZXdp bmQoKTsJLyogUmV3aW5kIHNvIG5leHQgem5leHQoKSBnZXRzIDFzdCAqLworI2Vsc2UKKworCQlu enhvcHRzIHw9IGRpcmZsZyA/IFpYX0RJUk9OTFkgOiAwOworCQlpZiAobWF0Y2hkb3QpICBuenhv cHRzIHw9IFpYX01BVENIRE9UOworCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VS U0U7CisJCW5maWxlcyA9IG56eHBhbmQoKnhwLG56eG9wdHMpOworI2VuZGlmIC8qIFpYUkVXSU5E ICovCisJICAgIH0KKwkgICAgZGVidWcoRjExMSwiY21pZmkgbmZpbGVzIiwqeHAsbmZpbGVzKTsK KwkgICAgZGVidWcoRjEwMSwiY21pZmkgZmlsZXNpemUiLCIiLGZpbGVzaXplKTsKKwkgICAgZnJl ZShzdik7CQkJLyogZG9uZSB3aXRoIHRoaXMgKi8KKwkgICAgc3YgPSBOVUxMOworCSAgICBpZiAo ZGlyZmxnICYmICFmaWxlc2l6ZSkgeworCQlwcmludGYoIj9Ob3QgYSBkaXJlY3RvcnkgLSAlc1xu IiwqeHApOworI2lmZGVmIENLQ0hBTk5FTElPCisJCXpfZXJyb3IgPSBGWF9BQ0M7CisjZW5kaWYg LyogQ0tDSEFOTkVMSU8gKi8KKwkJcmV0dXJuKC05KTsKKwkgICAgfSBlbHNlIGlmIChmaWxlc2l6 ZSA9PSAoQ0tfT0ZGX1QpLTMpIHsKKwkJaWYgKCF4Y21mZGIpIHsKKwkJICAgIGlmIChkaXJhY3Rp dmUpCisJCSAgICAgIC8qIERvbid0IHNob3cgZmlsZW5hbWUgaWYgd2UncmUgbm90IGFsbG93ZWQg dG8gc2VlIGl0ICovCisJCSAgICAgIHByaW50ZigiP1JlYWQgcGVybWlzc2lvbiBkZW5pZWRcbiIp OworCQkgICAgZWxzZQorCQkgICAgICBwcmludGYoIj9SZWFkIHBlcm1pc3Npb24gZGVuaWVkIC0g JXNcbiIsKnhwKTsKKwkJfQorCQlpZiAobnApIGZyZWUobnApOworI2lmZGVmIENLQ0hBTk5FTElP CisJCXpfZXJyb3IgPSBGWF9BQ0M7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKwkJcmV0dXJu KHhjbWZkYiA/IC02IDogLTkpOworCSAgICB9IGVsc2UgaWYgKGZpbGVzaXplID09IChDS19PRkZf VCktMikgeworCQlpZiAoIXJlY3Vyc2l2ZSkgeworCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJ ICAgIGlmIChkKSB7CisjaWZuZGVmIE5PTEFTVEZJTEUKKwkJCW1ha2VzdHIoJmxhc3RmaWxlLHRt cGxhc3RmaWxlKTsKKyNlbmRpZgkvKiBOT0xBU1RGSUxFICovCisJCQlyZXR1cm4oMCk7CisJCSAg ICB9CisJCSAgICBpZiAoIXhjbWZkYikKKwkJICAgICAgcHJpbnRmKCI/RmlsZSBub3QgcmVhZGFi bGUgLSAlc1xuIiwqeHApOworI2lmZGVmIENLQ0hBTk5FTElPCisJCSAgICB6X2Vycm9yID0gRlhf QUNDOworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisJCSAgICByZXR1cm4oeGNtZmRiID8gLTYg OiAtOSk7CisJCX0KKwkgICAgfSBlbHNlIGlmIChmaWxlc2l6ZSA8IChDS19PRkZfVCkwKSB7CisJ CWlmIChucCkgZnJlZShucCk7CisJCWlmICghbm9tc2cgJiYgIXhjbWZkYikKKwkJICBwcmludGYo Ij9GaWxlIG5vdCBmb3VuZCAtICVzXG4iLCp4cCk7CisjaWZkZWYgQ0tDSEFOTkVMSU8KKwkJel9l cnJvciA9IEZYX0ZORjsKKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCQlyZXR1cm4oeGNtZmRi ID8gLTYgOiAtOSk7CisJICAgIH0KKwkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKyNpZm5kZWYgTk9M QVNURklMRQorCSAgICBtYWtlc3RyKCZsYXN0ZmlsZSx0bXBsYXN0ZmlsZSk7CisjZW5kaWYJLyog Tk9MQVNURklMRSAqLworCSAgICByZXR1cm4oeCk7CisKKyNpZm5kZWYgTUFDCisJICBjYXNlIDI6 CQkJLyogRVNDICovCisJICAgIGRlYnVnKEYxMDEsImNtaWZpIGVzYywgeGMiLCIiLHhjKTsKKwkg ICAgaWYgKHhjID09IDApIHsKKwkJaWYgKCp4ZGVmKSB7CisJCSAgICBwcmludGYoIiVzICIseGRl Zik7IC8qIElmIGF0IGJlZ2lubmluZyBvZiBmaWVsZCAqLworI2lmZGVmIEdFTURPUworCQkgICAg ZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogR0VNRE9TICovCisJCSAgICBpbndvcmQgPSBjbWZs Z3MgPSAwOworCQkgICAgYWRkYnVmKHhkZWYpOwkvKiBTdXBwbHkgZGVmYXVsdC4gKi8KKwkJICAg IGlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsKKwkJCXByaW50ZigiRGVmYXVsdCBuYW1lIHRvbyBs b25nXG4iKTsKKwkJCWlmIChucCkgZnJlZShucCk7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQor CQl9IGVsc2UgewkJLyogTm8gZGVmYXVsdCAqLworCQkgICAgYmxlZXAoQlBfV0FSTik7CisJCX0K KwkJYnJlYWs7CisJICAgIH0KKwkgICAgaWYgKCoqeHAgPT0gJ3snKSB7CQkvKiBEaWQgdXNlciB0 eXBlIG9wZW5pbmcgYnJhY2UuLi4gKi8KKwkJKnhwID0gKnhwICsgMTsKKwkJeGMtLTsKKwkJY2Mt LTsKKwkJcWZsYWcgPSAnfSc7CisJICAgIH0gZWxzZSBpZiAoZGJscXVvICYmICoqeHAgPT0gJyIn KSB7CS8qIG9yIGRvdWJsZXF1b3RlPyAqLworCQkqeHAgPSAqeHAgKyAxOwkJLyogSWYgc28gaWdu b3JlIGl0IGFuZCBzcGFjZSBwYXN0IGl0ICovCisJCXhjLS07CisJCWNjLS07CisJCXFmbGFnID0g JyInOworCSAgICB9CisjaWZuZGVmIE5PU1BMCisJICAgIGlmIChmKSB7CQkJLyogSWYgYSBjb252 ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCisjaWZkZWYgRE9DSEtWQVIKKwkJY2hhciAqcyA9 ICp4cDsJCS8qIFNlZSBpZiB0aGVyZSBhcmUgYW55IHZhcmlhYmxlcyBpbiAqLworCQl3aGlsZSAo KnMpIHsJCS8qIHRoZSBzdHJpbmcgYW5kIGlmIHNvLCBleHBhbmQgaXQuICAqLworCQkgICAgaWYg KGNoa3ZhcihzKSkgeworI2VuZGlmIC8qIERPQ0hLVkFSICovCisJCQl6cSA9IGF0eGJ1ZjsKKwkJ CWF0eG4gPSBDTURCTDsKKwkJCWlmICgoeCA9ICgqZikoKnhwLCZ6cSwmYXR4bikpIDwgMCkgewor CQkJICAgIGlmIChucCkgZnJlZShucCk7CisJCQkgICAgcmV0dXJuKC0yKTsKKwkJCX0KKyNpZmRl ZiBET0NIS1ZBUgorCQkgICAgLyogcmVkdWNlIGNjIGJ5IG51bWJlciBvZiBcXCBjb25zdW1lZCBi eSBjb252ZXJzaW9uICovCisJCSAgICAvKiBmdW5jdGlvbiAobmVlZGVkIGZvciBPUy8yLCB3aGVy ZSBcIGlzIHBhdGggc2VwYXJhdG9yKSAqLworCQkJY2MgLT0gKHN0cmxlbigqeHApIC0gc3RybGVu KGF0eGJ1ZikpOworI2VuZGlmIC8qIERPQ0hLVkFSICovCisJCQkqeHAgPSBhdHhidWY7CisJCQlp ZiAoIWF0eGJ1ZlswXSkgeyAvKiBSZXN1bHQgZW1wdHksIHVzZSBkZWZhdWx0ICovCisJCQkgICAg KnhwID0geGRlZjsKKwkJCSAgICBjYyA9IHN0cmxlbih4ZGVmKTsKKwkJCX0KKyNpZmRlZiBET0NI S1ZBUgorCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICBzKys7CisJCX0KKyNlbmRpZiAvKiBET0NI S1ZBUiAqLworCSAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIERUSUxERQorCSAg ICBpZiAoZGlyZmxnICYmICooKnhwKSA9PSAnficpIHsKKwkJZGVidWcoRjExMSwiY21pZmkgdGls ZGVfZXhwYW5kIEEiLCp4cCxjYyk7CisJCWRpcnAgPSB0aWxkZV9leHBhbmQoKnhwKTsgLyogRXhw YW5kIHRpbGRlLCBpZiBhbnkuLi4gKi8KKwkJaWYgKCFkaXJwKSBkaXJwID0gIiI7CisJCWlmICgq ZGlycCkgeworCQkgICAgaW50IGksIHh4OworCQkgICAgY2hhciAqIHNwOworCQkgICAgeGMgPSBj YzsJCS8qIExlbmd0aCBvZiB+dGhpbmcgKi8KKwkJICAgIHh4ID0gc2V0YXRtKGRpcnAsMCk7IC8q IENvcHkgZXhwYW5zaW9uIHRvIGF0b20gYnVmZmVyICovCisJCSAgICBkZWJ1ZyhGMTExLCJjbWlm aSB0aWxkZV9leHBhbmQgQiIsYXRtYnVmLGNjKTsKKwkJICAgIGlmICh4eCA8IDApIHsKKwkJCXBy aW50ZigiRXhwYW5kZWQgbmFtZSB0b28gbG9uZ1xuIik7CisJCQlpZiAobnApIGZyZWUobnApOwor CQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGRlYnVnKEYxMTEsImNtaWZpIHRpbGRlX2V4 cGFuZCB4YyIsIiIseGMpOworCQkgICAgZm9yIChpID0gMDsgaSA8IHhjOyBpKyspIHsKKwkJCWNt ZGNoYXJkZWwoKTsJLyogQmFjayB1cCBvdmVyIH50aGluZyAqLworCQkJYnAtLTsKKwkJICAgIH0K KwkJICAgIHhjID0gY2M7CQkvKiBIb3cgbWFueSBuZXcgb25lcyB3ZSBqdXN0IGdvdCAqLworCQkg ICAgc3AgPSBhdG1idWY7CisJCSAgICBwcmludGYoIiVzIixzcCk7CS8qIFByaW50IHRoZW0gKi8K KwkJICAgIHdoaWxlICgoKmJwKysgPSAqc3ArKykpIDsJLyogQ29weSB0byBjb21tYW5kIGJ1ZmZl ciAqLworCQkgICAgYnAtLTsJICAgIAkgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJ fQorCQkqeHAgPSBhdG1idWY7CisJICAgIH0KKyNlbmRpZiAvKiBEVElMREUgKi8KKworCSAgICBz cCA9ICp4cCArIGNjOworCisjaWZkZWYgVU5JWE9ST1NLCisJICAgIGlmICghc3RyY21wKGF0bWJ1 ZiwiLi4iKSkgeworCQlwcmludGYoIiAiKTsKKwkJY2tzdHJuY2F0KGNtZGJ1ZiwiICIsQ01EQkwp OworCQljYysrOworCQlicCsrOworCQkqd2lsZCA9IDA7CisJCSp4cCA9IGF0bWJ1ZjsKKwkJYnJl YWs7CisJICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhdG1idWYsIi4iKSkgeworCQlibGVlcChCUF9X QVJOKTsKKwkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfSBlbHNlIHsK KwkJLyogVGhpcyBwYXRjaGVzIGEgZ2xpdGNoIHdoZW4gdXNlciB0eXBlcyAiLi9mb288RVNDPiIg Ki8KKwkJLyogaW4gd2hpY2ggdGhlIG5leHQgdHdvIGNoYXJzIGFyZSBvbWl0dGVkIGZyb20gdGhl ICovCisJCS8qIGV4cGFuc2lvbi4gIFRoZXJlIHNob3VsZCBiZSBhIGJldHRlciBmaXgsIGhvd2V2 ZXIsICovCisJCS8qIHNpbmNlIHRoZXJlIGlzIG5vIHByb2JsZW0gd2l0aCAiLi4vZm9vPEVTQz4i LiAqLworCQljaGFyICpwID0gKnhwOworCQlpZiAoKnAgPT0gJy4nICYmICoocCsxKSA9PSAnLycp CisJCSAgY2MgLT0gMjsKKwkgICAgfQorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworCisjaWZkZWYg ZGF0YWdlbmVyYWwKKwkgICAgKnNwKysgPSAnKyc7CQkvKiBEYXRhIEdlbmVyYWwgQU9TIHdpbGRj YXJkICovCisjZWxzZQorCSAgICAqc3ArKyA9ICcqJzsJCS8qIE90aGVycyAqLworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisJICAgICpzcC0tID0gJ1wwJzsKKyNpZmRlZiBHRU1ET1MKKwkgICAg aWYgKCFzdHJjaHIoKnhwLCAnLicpKQkvKiBhYmRlLmUgLT4gYWJjZGUuZSogKi8KKwkgICAgICBz dHJjYXQoKnhwLCAiLioiKTsJLyogYWJjIC0+IGFiYyouKiAqLworI2VuZGlmIC8qIEdFTURPUyAq LworCSAgICAvKiBBZGQgd2lsZGNhcmQgYW5kIGV4cGFuZCBsaXN0LiAqLworI2lmZGVmIENPTU1F TlQKKwkgICAgLyogVGhpcyBraWxscyBwYXJ0aWFsIGNvbXBsZXRpb24gd2hlbiBFU0MgZ2l2ZW4g aW4gcGF0aCBzZWdtZW50ICovCisJICAgIG56eG9wdHMgfD0gZGlyZmxnID8gWlhfRElST05MWSA6 IChkID8gMCA6IFpYX0ZJTE9OTFkpOworI2Vsc2UKKwkgICAgLyogbnp4b3B0cyA9IDA7ICovCisj ZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICBpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01B VENIRE9UOworCSAgICBpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisJICAg IHkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKKwkgICAgbmZpbGVzID0geTsKKwkgICAgZGVidWco RjExMSwiY21pZmkgbnp4cGFuZCIsKnhwLHkpOworCSAgICBpZiAoeSA+IDApIHsKKyNpZmRlZiBP UzIKKyAgICAgICAgICAgICAgICB6bmV4dChmaWxidWYpOwkJLyogR2V0IGZpcnN0ICovCisjaWZk ZWYgWlhSRVdJTkQKKwkJenhyZXdpbmQoKTsJCS8qIE11c3QgInJld2luZCIgKi8KKyNlbHNlCisJ CW56eHBhbmQoKnhwLG54em9wdHMpOworI2VuZGlmIC8qIFpYUkVXSU5EICovCisjZWxzZSAgLyog Tm90IE9TMiAqLworICAgICAgICAgICAgICAgIGNrc3RybmNweShmaWxidWYsbXRjaHNbMF0sQ0tN QVhQQVRIKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwkgICAgfSBlbHNlCisJICAgICAgKmZpbGJ1ZiA9 ICdcMCc7CisJICAgIGZpbGJ1ZltDS01BWFBBVEhdID0gTlVMOworCSAgICAqc3AgPSAnXDAnOwkJ CS8qIFJlbW92ZSB3aWxkY2FyZC4gKi8KKwkgICAgZGVidWcoRjExMSwiY21pZmkgZmlsYnVmIixm aWxidWYseSk7CisJICAgIGRlYnVnKEYxMTEsImNtaWZpICp4cCIsKnhwLGNjKTsKKworCSAgICAq d2lsZCA9ICh5ID4gMSk7CisJICAgIGlmICh5ID09IDApIHsKKwkJaWYgKCFub21zZykgeworI2lm ZGVmIENLUk9PVAorCQkgICAgaWYgKGNrcm9vdGVycikKKwkJICAgICAgcHJpbnRmKCI/T2ZmIExp bWl0czogJXNcbiIsYXRtYnVmKTsKKwkJICAgIGVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKwkJ ICAgICAgcHJpbnRmKCI/Tm8gJXMgbWF0Y2ggLSAlc1xuIiwKKwkJCSAgIGRpcmZsZyA/ICJkaXJl Y3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOworCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJ ICAgIHJldHVybigtOSk7CisJCX0gZWxzZSB7CisJCSAgICBibGVlcChCUF9XQVJOKTsKKwkJICAg IGlmIChucCkgZnJlZShucCk7CisJCSAgICByZXR1cm4oLTEpOworCQl9CisJICAgIH0gZWxzZSBp ZiAoeSA8IDApIHsKKyNpZmRlZiBDS1JPT1QKKwkJaWYgKGNrcm9vdGVycikKKwkJICBwcmludGYo Ij9PZmYgTGltaXRzOiAlc1xuIixhdG1idWYpOworCQllbHNlCisjZW5kaWYgLyogQ0tST09UICov CisJCSAgcHJpbnRmKCI/VG9vIG1hbnkgJXMgbWF0Y2ggLSAlc1xuIiwKKwkJCSBkaXJmbGcgPyAi ZGlyZWN0b3JpZXMiIDogImZpbGVzIiwgYXRtYnVmKTsKKwkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJ cmV0dXJuKC05KTsKKwkgICAgfSBlbHNlIGlmICh5ID4gMQkJLyogTm90IHVuaXF1ZSAqLworI2lm bmRlZiBWTVMKKwkJICAgICAgIHx8ICh5ID09IDEgJiYgaXNkaXIoZmlsYnVmKSkgLyogVW5pcXVl IGRpcmVjdG9yeSAqLworI2VuZGlmIC8qIFZNUyAqLworCQkgICAgICAgKSB7CisjaWZuZGVmIE5P UEFSVElBTAorLyogUGFydGlhbCBmaWxlbmFtZSBjb21wbGV0aW9uICovCisJCWludCBqLCBrOyBj aGFyIGM7CisJCWsgPSAwOworCQlkZWJ1ZyhGMTExLCJjbWlmaSBwYXJ0aWFsIixmaWxidWYsY2Mp OworI2lmZGVmIE9TMgorCQl7CisJCSAgICBpbnQgY3VyID0gMCwKKwkJICAgIGxlbiA9IDAsCisJ CSAgICBsZW4yID0gMCwKKwkJICAgIG1pbiA9IHN0cmxlbihmaWxidWYpLAorCQkgICAgZm91bmQg PSAwOworCQkgICAgY2hhciBsb2NhbGZuW0NLTUFYUEFUSCsxXTsKKworCQkgICAgbGVuID0gbWlu OworCQkgICAgZm9yIChqID0gMTsgaiA8PSB5OyBqKyspIHsKKwkJCXpuZXh0KGxvY2FsZm4pOwor CQkJaWYgKGRpcmZsZyAmJiAhaXNkaXIobG9jYWxmbikpCisJCQkgIGNvbnRpbnVlOworCQkJZm91 bmQgPSAxOworCQkJbGVuMiA9IHN0cmxlbihsb2NhbGZuKTsKKwkJCWZvciAoY3VyID0gY2M7CisJ CQkgICAgIGN1ciA8IGxlbiAmJiBjdXIgPCBsZW4yICYmIGN1ciA8PSBtaW47CisJCQkgICAgIGN1 cisrCisJCQkgICAgICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgb3Ig V2luZG93cywgY2FzZSBkb2Vzbid0IG1hdHRlciAqLworCQkJICAgIGlmICh0b2xvd2VyKGZpbGJ1 ZltjdXJdKSAhPSB0b2xvd2VyKGxvY2FsZm5bY3VyXSkpCisJCQkgICAgICBicmVhazsKKwkJCX0K KwkJCWlmIChjdXIgPCBtaW4pCisJCQkgIG1pbiA9IGN1cjsKKwkJICAgIH0KKwkJICAgIGlmICgh Zm91bmQpCisJCSAgICAgIG1pbiA9IGNjOworCQkgICAgZmlsYnVmW21pbl0gPSBOVUw7CisJCSAg ICBpZiAobWluID4gY2MpCisJCSAgICAgIGsrKzsKKwkJfQorI2Vsc2UgLyogT1MyICovCisJCWZv ciAoaSA9IGNjOyAoYyA9IGZpbGJ1ZltpXSk7IGkrKykgeworCQkgICAgZm9yIChqID0gMTsgaiA8 IHk7IGorKykKKwkJICAgICAgaWYgKG10Y2hzW2pdW2ldICE9IGMpIGJyZWFrOworCQkgICAgaWYg KGogPT0geSkgaysrOworCQkgICAgZWxzZSBmaWxidWZbaV0gPSBmaWxidWZbaSsxXSA9IE5VTDsK KwkJfQorI2VuZGlmIC8qIE9TMiAqLworCisKKyNpZm5kZWYgVk1TCisJCS8qIGlzZGlyKCkgZnVu Y3Rpb24gcmVxdWlyZWQgZm9yIHRoaXMhICovCisJCWlmICh5ID09IDEgJiYgaXNkaXIoZmlsYnVm KSkgeyAvKiBEb250IHdlIGFscmVhZHkga25vdyB0aGlzPyAqLworCQkgICAgaW50IGxlbjsKKwkJ ICAgIGxlbiA9IHN0cmxlbihmaWxidWYpOworCQkgICAgaWYgKGxlbiA+IDAgJiYgbGVuIDwgQVRN QkwgLSAxKSB7CisJCQlpZiAoZmlsYnVmW2xlbi0xXSAhPSBkaXJzZXApIHsKKwkJCSAgICBmaWxi dWZbbGVuXSA9IGRpcnNlcDsKKwkJCSAgICBmaWxidWZbbGVuKzFdID0gTlVMOworCQkJfQorCQkg ICAgfQorLyoKKyAgQXQgdGhpcyBwb2ludCwgYmVmb3JlIGp1c3QgZG9pbmcgcGFydGlhbCBjb21w bGV0aW9uLCB3ZSBzaG91bGQgbG9vayBmaXJzdCB0bworICBzZWUgaWYgdGhlIGdpdmVuIGRpcmVj dG9yeSBkb2VzIGluZGVlZCBoYXZlIGFueSBzdWJkaXJlY3RvcmllcyAoZGlyZmxnKSBvcgorICBm aWxlcyAoIWRpcmZsZyk7IGlmIGl0IGRvZXNuJ3Qgd2Ugc2hvdWxkIGRvIGZ1bGwgY29tcGxldGlv bi4gIE90aGVyd2lzZSwgdGhlCisgIHJlc3VsdCBsb29rcyBmdW5ueSB0byB0aGUgdXNlciBhbmQg Ij8iIGJsb3dzIHVwIHRoZSBjb21tYW5kIGZvciBubyBnb29kCisgIHJlYXNvbi4KKyovCisJCSAg ICB7CisJCQlpbnQgZmxhZ3MgPSAwOworCQkJZmlsYnVmW2xlbisxXSA9ICcqJzsKKwkJCWZpbGJ1 ZltsZW4rMl0gPSBOVUw7CisJCQlpZiAoZGlyZmxnKSBmbGFncyA9IFpYX0RJUk9OTFk7CisJCQlj aGlsZHJlbiA9IG56eHBhbmQoZmlsYnVmLGZsYWdzKTsKKwkJCWRlYnVnKEYxMTEsImNtaWZpIGNo aWxkcmVuIixmaWxidWYsY2hpbGRyZW4pOworCQkJZmlsYnVmW2xlbisxXSA9IE5VTDsKKwkJCW56 eHBhbmQoZmlsYnVmLGZsYWdzKTsgLyogUmVzdG9yZSBwcmV2aW91cyBsaXN0ICovCisJCQlpZiAo Y2hpbGRyZW4gPT0gMCkKKwkJCSAgZ290byBOT1NVQkRJUlM7CisJCSAgICB9CisJCSAgICBpZiAo bGVuICsgMSA+IGNjKQorCQkgICAgICBrKys7CisJCX0KKyAgICAgICAgICAgICAgICAvKiBBZGQg ZG91YmxlcXVvdGVzIGlmIHRoZXJlIGFyZSBzcGFjZXMgaW4gdGhlIG5hbWUgKi8KKwkJeworCQkg ICAgaW50IHg7CisJCSAgICBpZiAocWZsYWcpIHsKKwkJCXggPSAocWZsYWcgPT0gJ30nKTsgLyog KG9yIGJyYWNlcykgKi8KKwkJICAgIH0gZWxzZSB7CisJCQl4ID0gIWRibHF1bzsKKwkJICAgIH0K KwkJICAgIGlmIChmaWxidWZbMF0gIT0gJyInICYmIGZpbGJ1ZlswXSAhPSAneycpCisJCSAgICAg IGsgPSBkcXVvdGUoZmlsYnVmLEFUTUJMLHgpOworCQl9CisjZW5kaWYgLyogVk1TICovCisJCWRl YnVnKEYxMTEsImNtaWZpIFJFUEFJTlQgZmlsYnVmIixmaWxidWYsayk7CisJCWlmIChrID4gMCkg ewkJLyogR290IG1vcmUgY2hhcmFjdGVycyAqLworCQkgICAgZGVidWcoRjEwMSwiY21pZmkgUkVQ QUlOVCBjYyIsIiIsY2MpOworCQkgICAgZGVidWcoRjEwMSwiY21pZmkgUkVQQUlOVCB4YyIsIiIs eGMpOworCQkgICAgZGVidWcoRjExMCwiY21pZmkgUkVQQUlOVCBicC1jYyIsYnAtY2MsMCk7CisJ CSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBSRVBBSU5UIGJwLXhjIixicC14YywwKTsKKwkJICAgIHNw ID0gZmlsYnVmICsgY2M7CS8qIFBvaW50IHRvIG5ldyBvbmVzICovCisJCSAgICBpZiAocWZsYWcg fHwgc3RybmNtcChmaWxidWYsYnAtY2MsY2MpKSB7IC8qIFJlcGFpbnQ/ICovCisJCQlpbnQgeDsK KwkJCXggPSBjYzsKKwkJCWlmIChxZmxhZykgeCsrOworCQkJZm9yIChpID0gMDsgaSA8IHg7IGkr KykgeworCQkJICAgIGNtZGNoYXJkZWwoKTsgLyogQmFjayB1cCBvdmVyIG9sZCBwYXJ0aWFsIHNw ZWMgKi8KKwkJCSAgICBicC0tOworCQkJfQorCQkJc3AgPSBmaWxidWY7CS8qIFBvaW50IHRvIG5l dyB3b3JkIHN0YXJ0ICovCisJCQlkZWJ1ZyhGMTEwLCJjbWlmaSBlcmFzZSBvayIsc3AsMCk7CisJ CSAgICB9CisJCSAgICBjYyA9IGs7CQkvKiBIb3cgbWFueSBuZXcgb25lcyB3ZSBqdXN0IGdvdCAq LworCQkgICAgcHJpbnRmKCIlcyIsc3ApOwkvKiBQcmludCB0aGVtICovCisJCSAgICB3aGlsZSAo KCpicCsrID0gKnNwKyspKSA7CS8qIENvcHkgdG8gY29tbWFuZCBidWZmZXIgKi8KKwkJICAgIGJw LS07CSAgICAJICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCisJCSAgICBkZWJ1ZyhGMTEw LCJjbWlmaSBwYXJ0aWFsIGNtZGJ1ZiIsY21kYnVmLDApOworCQkgICAgaWYgKHNldGF0bShmaWxi dWYsMCkgPCAwKSB7CisJCQlwcmludGYoIj9QYXJ0aWFsIG5hbWUgdG9vIGxvbmdcbiIpOworCQkJ aWYgKG5wKSBmcmVlKG5wKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBkZWJ1ZyhG MTExLCJjbWlmaSBwYXJ0aWFsIGF0bWJ1ZiIsYXRtYnVmLGNjKTsKKwkJICAgICp4cCA9IGF0bWJ1 ZjsKKwkJfQorI2VuZGlmIC8qIE5PUEFSVElBTCAqLworCQlibGVlcChCUF9XQVJOKTsKKwkgICAg fSBlbHNlIHsJCQkvKiBVbmlxdWUsIGNvbXBsZXRlIGl0LiAgKi8KKyNpZm5kZWYgVk1TCisjaWZk ZWYgQ0tfVE1QRElSCisJCS8qIGlzZGlyKCkgZnVuY3Rpb24gcmVxdWlyZWQgZm9yIHRoaXMhICov CisJICAgICAgTk9TVUJESVJTOgorCQlkZWJ1ZyhGMTExLCJjbWlmaSB1bmlxdWUiLGZpbGJ1Zixj aGlsZHJlbik7CisJCWlmIChpc2RpcihmaWxidWYpICYmIGNoaWxkcmVuID4gMCkgeworCQkgICAg aW50IGxlbjsKKwkJICAgIGxlbiA9IHN0cmxlbihmaWxidWYpOworCQkgICAgaWYgKGxlbiA+IDAg JiYgbGVuIDwgQVRNQkwgLSAxKSB7CisJCQlpZiAoZmlsYnVmW2xlbi0xXSAhPSBkaXJzZXApIHsK KwkJCSAgICBmaWxidWZbbGVuXSA9IGRpcnNlcDsKKwkJCSAgICBmaWxidWZbbGVuKzFdID0gTlVM OworCQkJfQorCQkgICAgfQorCQkgICAgc3AgPSBmaWxidWYgKyBjYzsKKwkJICAgIGJsZWVwKEJQ X1dBUk4pOworCQkgICAgcHJpbnRmKCIlcyIsc3ApOworCQkgICAgY2MrKzsKKwkJICAgIHdoaWxl ICgoKmJwKysgPSAqc3ArKykpIDsKKwkJICAgIGJwLS07CisJCSAgICBpZiAoc2V0YXRtKGZpbGJ1 ZiwwKSA8IDApIHsKKwkJCXByaW50ZigiP0RpcmVjdG9yeSBuYW1lIHRvbyBsb25nXG4iKTsKKwkJ CWlmIChucCkgZnJlZShucCk7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgZGVidWco RjExMSwiY21pZmkgZGlyZWN0b3J5IGF0bWJ1ZiIsYXRtYnVmLGNjKTsKKwkJICAgICp4cCA9IGF0 bWJ1ZjsKKwkJfSBlbHNlIHsJCS8qIE5vdCBhIGRpcmVjdG9yeSBvciBkaXJmbGcgKi8KKyNlbmRp ZiAvKiBDS19UTVBESVIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNpZm5kZWYgVk1TCQkJCS8qIFZN UyBkaXIgbmFtZXMgYXJlIHNwZWNpYWwgKi8KKyNpZm5kZWYgZGF0YWdlbmVyYWwJCQkvKiBWUyBk aXJuYW1lcyBtdXN0IG5vdCBlbmQgaW4gIjoiICovCisJCSAgICBpZiAoZGlyZmxnKSB7CisJCQlp bnQgbGVuOworCQkJbGVuID0gc3RybGVuKGZpbGJ1Zik7CisJCQlpZiAobGVuID4gMCAmJiBsZW4g PCBBVE1CTCAtIDEpIHsKKwkJCSAgICBpZiAoZmlsYnVmW2xlbi0xXSAhPSBkaXJzZXApIHsKKwkJ CQlmaWxidWZbbGVuXSA9IGRpcnNlcDsKKwkJCQlmaWxidWZbbGVuKzFdID0gTlVMOworCQkJICAg IH0KKwkJCX0KKwkJICAgIH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFZN UyAqLworCQkgICAgc3AgPSBmaWxidWYgKyBjYzsJLyogUG9pbnQgcGFzdCB3aGF0IHVzZXIgdHlw ZWQuICovCisJCSAgICB7CisJCQlpbnQgeDsKKwkJCWlmIChxZmxhZykgeworCQkJICAgIHggPSAo cWZsYWcgPT0gJ30nKTsKKwkJCX0gZWxzZSB7CisJCQkgICAgeCA9ICFkYmxxdW87CisJCQl9CisJ CQlpZiAoZmlsYnVmWzBdICE9ICciJyAmJiBmaWxidWZbMF0gIT0gJ3snKQorCQkJICBkcXVvdGUo ZmlsYnVmLEFUTUJMLHgpOworCQkgICAgfQorCQkgICAgaWYgKHFmbGFnIHx8IHN0cm5jbXAoZmls YnVmLGJwLWNjLGNjKSkgeyAvKiBSZXBhaW50PyAqLworCQkJaW50IHg7CisJCQl4ID0gY2M7CisJ CQlpZiAocWZsYWcpIHgrKzsKKwkJCWZvciAoaSA9IDA7IGkgPCB4OyBpKyspIHsKKwkJCSAgICBj bWRjaGFyZGVsKCk7IC8qIEJhY2sgdXAgb3ZlciBvbGQgcGFydGlhbCBzcGVjICovCisJCQkgICAg YnAtLTsKKwkJCX0KKwkJCXNwID0gZmlsYnVmOwkvKiBQb2ludCB0byBuZXcgd29yZCBzdGFydCAq LworCQkJZGVidWcoRjExMSwiY21pZmkgYWZ0ZXIgZXJhc2Ugc3A9IixzcCxjYyk7CisJCSAgICB9 CisJCSAgICBwcmludGYoIiVzICIsc3ApOwkvKiBQcmludCB0aGUgY29tcGxldGVkIG5hbWUuICov CisjaWZkZWYgR0VNRE9TCisJCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBHRU1ET1Mg Ki8KKwkJICAgIGFkZGJ1ZihzcCk7CQkvKiBBZGQgdGhlIGNoYXJhY3RlcnMgdG8gY21kYnVmLiAq LworCQkgICAgaWYgKHNldGF0bShmaWxidWYsMCkgPCAwKSB7IC8qIEFuZCB0byBhdG1idWYuICov CisJCQlwcmludGYoIj9Db21wbGV0ZWQgbmFtZSB0b28gbG9uZ1xuIik7CisJCQlpZiAobnApIGZy ZWUobnApOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGlud29yZCA9IGNtZmxncyA9 IDA7CisJCSAgICAqeHAgPSBicnN0cmlwKGF0bWJ1Zik7IC8qIFJldHVybiBwb2ludGVyIHRvIGF0 bWJ1Zi4gKi8KKwkJICAgIGlmIChkaXJmbGcgJiYgIWlzZGlyKCp4cCkpIHsKKwkJCXByaW50Zigi P05vdCBhIGRpcmVjdG9yeSAtICVzXG4iLCBmaWxidWYpOworCQkJaWYgKG5wKSBmcmVlKG5wKTsK KwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBpZiAobnApIGZyZWUobnApOworI2lmbmRl ZiBOT0xBU1RGSUxFCisJCSAgICBtYWtlc3RyKCZsYXN0ZmlsZSx0bXBsYXN0ZmlsZSk7CisjZW5k aWYJLyogTk9MQVNURklMRSAqLworCQkgICAgcmV0dXJuKDApOworI2lmbmRlZiBWTVMKKyNpZmRl ZiBDS19UTVBESVIKKwkJfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworI2VuZGlmIC8qIFZNUyAq LworCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlIDM6CQkJLyogUXVlc3Rpb24gbWFyayAt IGZpbGUgbWVudSB3YW50ZWQgKi8KKwkgICAgaWYgKCp4aGxwID09IE5VTCkKKwkgICAgICBwcmlu dGYoZGlyZmxnID8gIiBEaXJlY3RvcnkgbmFtZSIgOiAiIElucHV0IGZpbGUgc3BlY2lmaWNhdGlv biIpOworCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCIgJXMiLHhobHApOworI2lmZGVmIEdFTURP UworCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKwkgICAgLyogSWYg dXNlciB0eXBlZCBhbiBvcGVuaW5nIHF1b3RlIG9yIGJyYWNlLCBqdXN0IHNraXAgcGFzdCBpdCAq LworCisJICAgIGlmICgqKnhwID09ICciJyB8fCAqKnhwID09ICd7JykgeworCQkqeHAgPSAqeHAg KyAxOworCQl4Yy0tOworCQljYy0tOworCSAgICB9CisjaWZuZGVmIE5PU1BMCisJICAgIGlmIChm KSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCisjaWZkZWYgRE9D SEtWQVIKKwkJY2hhciAqcyA9ICp4cDsJCS8qIFNlZSBpZiB0aGVyZSBhcmUgYW55IHZhcmlhYmxl cyBpbiAqLworCQl3aGlsZSAoKnMpIHsJCS8qIHRoZSBzdHJpbmcgYW5kIGlmIHNvLCBleHBhbmQg dGhlbSAqLworCQkgICAgaWYgKGNoa3ZhcihzKSkgeworI2VuZGlmIC8qIERPQ0hLVkFSICovCisJ CQl6cSA9IGF0eGJ1ZjsKKwkJCWF0eG4gPSBDTURCTDsKKwkJCWlmICgoeCA9ICgqZikoKnhwLCZ6 cSwmYXR4bikpIDwgMCkgeworCQkJICAgIGlmIChucCkgZnJlZShucCk7CisJCQkgICAgcmV0dXJu KC0yKTsKKwkJCX0KKyNpZmRlZiBET0NIS1ZBUgorCQkgICAgLyogcmVkdWNlIGNjIGJ5IG51bWJl ciBvZiBcXCBjb25zdW1lZCBieSBjb252ZXJzaW9uICovCisJCSAgICAvKiBmdW5jdGlvbiAobmVl ZGVkIGZvciBPUy8yLCB3aGVyZSBcIGlzIHBhdGggc2VwYXJhdG9yKSAqLworCQkJY2MgLT0gKHN0 cmxlbigqeHApIC0gc3RybGVuKGF0eGJ1ZikpOworI2VuZGlmIC8qIERPQ0hLVkFSICovCisJCQkq eHAgPSBhdHhidWY7CisjaWZkZWYgRE9DSEtWQVIKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAg cysrOworCQl9CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKwkgICAgfQorI2VuZGlmIC8qIE5PU1BM ICovCisJICAgIGRlYnVnKEYxMTEsImNtaWZpID8gKnhwLCBjYyIsKnhwLGNjKTsKKwkgICAgc3Ag PSAqeHAgKyBjYzsJCS8qIEluc2VydCAiKiIgYXQgZW5kICovCisjaWZkZWYgZGF0YWdlbmVyYWwK KwkgICAgKnNwKysgPSAnKyc7CQkvKiBJbnNlcnQgKywgdGhlIERHIHdpbGQgY2FyZCAqLworI2Vs c2UKKwkgICAgKnNwKysgPSAnKic7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKwkgICAgKnNw LS0gPSAnXDAnOworI2lmZGVmIEdFTURPUworCSAgICBpZiAoISBzdHJjaHIoKnhwLCAnLicpKQkv KiBhYmRlLmUgLT4gYWJjZGUuZSogKi8KKwkgICAgICBzdHJjYXQoKnhwLCAiLioiKTsJLyogYWJj IC0+IGFiYyouKiAqLworI2VuZGlmIC8qIEdFTURPUyAqLworCSAgICBkZWJ1ZyhGMTEwLCJjbWlm aSA/IHdpbGQiLCp4cCwwKTsKKworCSAgICBuenhvcHRzIHw9IGRpcmZsZyA/IFpYX0RJUk9OTFkg OiAoZCA/IDAgOiBaWF9GSUxPTkxZKTsKKworCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBtYXRjaGRv dCIsIiIsbWF0Y2hkb3QpOworCSAgICBpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpYX01BVENI RE9UOworCSAgICBpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisJICAgIHkg PSBuenhwYW5kKCp4cCxuenhvcHRzKTsKKwkgICAgbmZpbGVzID0geTsKKwkgICAgKnNwID0gJ1ww JzsKKwkgICAgaWYgKHkgPT0gMCkgeworCQlpZiAobm9tc2cpIHsKKwkJICAgIHByaW50ZigiOiAl c1xuIixhdG1idWYpOworCQkgICAgcHJpbnRmKCIlcyVzIixjbXByb20sY21kYnVmKTsKKwkJICAg IGZmbHVzaChzdGRvdXQpOworCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJICAgIHJldHVybigt MSk7CisJCX0gZWxzZSB7CisjaWZkZWYgQ0tST09UCisJCSAgICBpZiAoY2tyb290ZXJyKQorCQkg ICAgICBwcmludGYoIj9PZmYgTGltaXRzOiAlc1xuIixhdG1idWYpOworCQkgICAgZWxzZQorI2Vu ZGlmIC8qIENLUk9PVCAqLworCQkgICAgICBwcmludGYoIj9ObyAlcyBtYXRjaCAtICVzXG4iLAor CQkJICAgICBkaXJmbGcgPyAiZGlyZWN0b3JpZXMiIDogImZpbGVzIiwgYXRtYnVmKTsKKwkJICAg IGlmIChucCkgZnJlZShucCk7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAgIH0gZWxzZSBp ZiAoeSA8IDApIHsKKyNpZmRlZiBDS1JPT1QKKwkJaWYgKGNrcm9vdGVycikKKwkJICBwcmludGYo Ij9PZmYgTGltaXRzOiAlc1xuIixhdG1idWYpOworCQllbHNlCisjZW5kaWYgLyogQ0tST09UICov CisJCSAgcHJpbnRmKCI/VG9vIG1hbnkgJXMgbWF0Y2ggLSAlc1xuIiwKKwkJCSBkaXJmbGcgPyAi ZGlyZWN0b3JpZXMiIDogImZpbGVzIiwgYXRtYnVmKTsKKwkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJ cmV0dXJuKC05KTsKKwkgICAgfSBlbHNlIHsKKwkJcHJpbnRmKCIsIG9uZSBvZiB0aGUgZm9sbG93 aW5nOlxuIik7CisJCWlmIChmaWxoZWxwKChpbnQpeSwiIiwiIiwxLGRpcmZsZykgPCAwKSB7CisJ CSAgICBpZiAobnApIGZyZWUobnApOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCSAgICB9CisJ ICAgIHByaW50ZigiJXMlcyIsY21wcm9tLGNtZGJ1Zik7CisJICAgIGZmbHVzaChzdGRvdXQpOwor CSAgICBicmVhazsKKyNlbmRpZiAvKiBNQUMgKi8KKwl9CisjaWZkZWYgQlNfRElSU0VQCisgICAg ICAgIGRpcm5hbWZsZyA9IDE7CisgICAgICAgIHggPSBndHdvcmQoMCk7ICAgICAgICAgICAgICAg ICAgLyogTm8sIGdldCBhIHdvcmQgKi8KKwlkaXJuYW1mbGcgPSAwOworI2Vsc2UKKyAgICAgICAg eCA9IGd0d29yZCgwKTsgICAgICAgICAgICAgICAgICAvKiBObywgZ2V0IGEgd29yZCAqLworI2Vu ZGlmIC8qIEJTX0RJUlNFUCAqLworCSp4cCA9IGF0bWJ1ZjsKKyAgICB9Cit9CisKKy8qICBDIE0g RiBMIEQgIC0tICBQYXJzZSBhbiBhcmJpdHJhcnkgZmllbGQgICovCisvKgorICBSZXR1cm5zOgor ICAgIC0zIGlmIG5vIGlucHV0IHByZXNlbnQgd2hlbiByZXF1aXJlZCwKKyAgICAtMiBpZiBmaWVs ZCB0b28gYmlnIGZvciBidWZmZXIsCisgICAgLTEgaWYgcmVwYXJzZSBuZWVkZWQsCisgICAgIDAg b3RoZXJ3aXNlLCB4cCBwb2ludGluZyB0byBzdHJpbmcgcmVzdWx0LgorCisgIE5PVEU6IEdsb2Jh bCBmbGFnIGtlZXBhbGxjaGFycyBzYXlzIHdoZXRoZXIgdGhpcyByb3V0aW5lIHNob3VsZCBicmVh ayBvbiBDUgorICBvciBMRjogbmVlZGVkIGZvciBNSU5QVVQgdGFyZ2V0cyBhbmQgREVDTEFSRSBp bml0aWFsaXplcnMsIHdoZXJlIHdlIHdhbnQgdG8KKyAga2VlcCBjb250cm9sIGNoYXJhY3RlcnMg aWYgdGhlIHVzZXIgc3BlY2lmaWVzIHRoZW0gKE1hcmNoIDIwMDMpLiAgSXQgbWlnaHQKKyAgaGF2 ZSBiZWVuIGJldHRlciB0byBjaGFuZ2UgdGhlIGNhbGxpbmcgc2VxdWVuY2UgYnV0IHRoYXQgd2Fz IG5vdCBwcmFjdGljYWwuCisqLworaW50CitjbWZsZCh4aGxwLHhkZWYseHAsZikgY2hhciAqeGhs cCwgKnhkZWYsICoqeHA7IHh4X3N0cnAgZjsgeworICAgIGludCB4LCB4YzsKKyAgICBjaGFyICp6 cTsKKworICAgIGlud29yZCA9IDA7CQkJCS8qIEluaXRpYWxpemUgY291bnRzICYgcG9pbnRlcnMg Ki8KKyAgICBjYyA9IDA7CisgICAgeGMgPSAwOworICAgICp4cCA9ICIiOworCisgICAgZGVidWco RjExMCwiY21mbGQgeGRlZiAxIix4ZGVmLDApOworCisgICAgaWYgKCF4aGxwKSB4aGxwID0gIiI7 CisgICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7CisgICAgY2tzdHJuY3B5KGNtZGVmYXVsdCx4ZGVm LENNREVGQVVMVCk7IC8qIENvcHkgZGVmYXVsdCAqLworICAgIHhkZWYgPSBjbWRlZmF1bHQ7CisK KyAgICBkZWJ1ZyhGMTExLCJjbWZsZCB4ZGVmIDIiLHhkZWYsY21mbGdzKTsKKyAgICBkZWJ1ZyhG MTExLCJjbWZsZCBhdG1idWYgMSIsYXRtYnVmLHhjKTsKKworICAgIGlmICgoeCA9IGNtZmxncykg IT0gMSkgeyAgICAgICAgICAgIC8qIEFscmVhZHkgY29uZmlybWVkPyAqLworICAgICAgICB4ID0g Z3R3b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3JkICovCisgICAgfSBl bHNlIHsKKwlpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7CS8qIElmIHNvLCB1c2UgZGVmYXVsdCwg aWYgYW55LiAqLworCSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKKwkgICAgcmV0 dXJuKC05KTsKKwl9CisgICAgfQorICAgICp4cCA9IGF0bWJ1ZjsgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBvaW50IHRvIHJlc3VsdC4gKi8KKyAgICBkZWJ1ZyhGMTExLCJjbWZsZCBhdG1idWYg MiIsYXRtYnVmLGNtZmxncyk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICB4YyArPSBjYzsg ICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoZSBjaGFyYWN0ZXJzLiAqLworICAgICAg ICBkZWJ1ZyhGMTExLCJjbWZsZCBndHdvcmQiLGF0bWJ1Zix4Yyk7CisgICAgICAgIGRlYnVnKEYx MDEsImNtZmxkIHgiLCIiLHgpOworICAgICAgICBzd2l0Y2ggKHgpIHsKKwkgIGNhc2UgLTk6CisJ ICAgIHByaW50ZigiQ29tbWFuZCBvciBmaWVsZCB0b28gbG9uZ1xuIik7CisJICBjYXNlIC00OgkJ CS8qIEVPRiAqLworCSAgY2FzZSAtMzoJCQkvKiBFbXB0eS4gKi8KKwkgIGNhc2UgLTI6CQkJLyog T3V0IG9mIHNwYWNlLiAqLworCSAgY2FzZSAtMToJCQkvKiBSZXBhcnNlIG5lZWRlZCAqLworCSAg ICByZXR1cm4oeCk7CisJICBjYXNlIDE6CQkJLyogQ1IgKi8KKwkgIGNhc2UgMDoJCQkvKiBTUCAq LworCSAgICBkZWJ1ZyhGMTExLCJjbWZsZCAxIixhdG1idWYseGMpOworCSAgICBpZiAoeGMgPT0g MCkgewkJLyogSWYgbm8gaW5wdXQsIHJldHVybiBkZWZhdWx0LiAqLworCQlpZiAoc2V0YXRtKHhk ZWYsMCkgPCAwKSB7CisJCSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKKwkJICAg IHJldHVybigtOSk7CisJCX0KKwkgICAgfQorCSAgICAqeHAgPSBhdG1idWY7CQkvKiBQb2ludCB0 byB3aGF0IHdlIGdvdC4gKi8KKwkgICAgZGVidWcoRjExMSwiY21mbGQgMiIsYXRtYnVmLCgoZikg PyAxIDogMCkpOworCSAgICBpZiAoZikgewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBp cyBnaXZlbiAqLworCQl6cSA9IGF0eGJ1ZjsJCS8qIGVtcGxveSBpdCBub3cuICovCisJCWF0eG4g PSBDTURCTDsKKwkJaWYgKCgqZikoKnhwLCZ6cSwmYXR4bikgPCAwKQorCQkgIHJldHVybigtMik7 CisJCWRlYnVnKEYxMTEsImNtZmxkIDMiLGF0eGJ1Zix4Yyk7CisJCS8qIFJlcGxhY2UgYnkgbmV3 IHZhbHVlIC0tIGZvciBNSU5QVVQgb25seSBrZWVwIGFsbCBjaGFycyAqLworCQlpZiAoc2V0YXRt KGF0eGJ1ZixrZWVwYWxsY2hhcnMgPyAzOjEpIDwgMCkgeyAvKiAxNiBNYXIgMjAwMyAqLworCQkg ICAgcHJpbnRmKCJWYWx1ZSB0b28gbG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJ CSp4cCA9IGF0bWJ1ZjsKKwkgICAgfQorCSAgICBkZWJ1ZyhGMTExLCJjbWZsZCA0IixhdG1idWYs eGMpOworCSAgICBpZiAoKip4cCA9PSBOVUwpIHsJCS8qIElmIHZhcmlhYmxlIGV2YWx1YXRlcyB0 byBudWxsICovCisJCWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsKKwkJICAgIHByaW50ZigiP0Rl ZmF1bHQgdG9vIGxvbmdcbiIpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCQlpZiAoKip4cCA9 PSBOVUwpIHggPSAtMzsgLyogSWYgc3RpbGwgZW1wdHksIHJldHVybiAtMy4gKi8KKwkgICAgfQor CSAgICBkZWJ1ZyhGMTExLCJjbWZsZCByZXR1cm5zIiwqeHAseCk7CisJICAgIHJldHVybih4KTsK KwkgIGNhc2UgMjoJCQkvKiBFU0MgKi8KKwkgICAgaWYgKHhjID09IDAgJiYgKnhkZWYpIHsKKwkJ cHJpbnRmKCIlcyAiLHhkZWYpOyAvKiBJZiBhdCBiZWdpbm5pbmcgb2YgZmllbGQsICovCisjaWZk ZWYgR0VNRE9TCisJCWZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURPUyAqLworCQlhZGRi dWYoeGRlZik7CQkvKiBTdXBwbHkgZGVmYXVsdC4gKi8KKwkJaW53b3JkID0gY21mbGdzID0gMDsK KwkJaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgeworCQkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28g bG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9IGVsc2UJCQkvKiBSZXR1cm4gYXMgaWYg d2hvbGUgZmllbGQgKi8KKwkJICByZXR1cm4oMCk7CQkvKiB0eXBlZCwgZm9sbG93ZWQgYnkgc3Bh Y2UuICovCisJICAgIH0gZWxzZSB7CisJCWJsZWVwKEJQX1dBUk4pOworCSAgICB9CisJICAgIGJy ZWFrOworCSAgY2FzZSAzOgkJCS8qIFF1ZXN0aW9uIG1hcmsgKi8KKwkgICAgZGVidWcoRjExMCwi Y21mbGQgUVVFU1RJT05NQVJLIixjbWRidWYsMCk7CisJICAgIGlmICgqeGhscCA9PSBOVUwpCisJ ICAgICAgcHJpbnRmKCIgUGxlYXNlIGNvbXBsZXRlIHRoaXMgZmllbGQiKTsKKwkgICAgZWxzZQor CSAgICAgIHByaW50ZigiICVzIix4aGxwKTsKKwkgICAgcHJpbnRmKCJcbiVzJXMiLGNtcHJvbSxj bWRidWYpOworCSAgICBmZmx1c2goc3Rkb3V0KTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKwlk ZWJ1ZyhGMTExLCJjbWZsZCBndHdvcmQgQSB4IixjbWRidWYseCk7CisJeCA9IGd0d29yZCgwKTsK KwlkZWJ1ZyhGMTExLCJjbWZsZCBndHdvcmQgQiB4IixjbWRidWYseCk7CisgICAgfQorfQorCisK Ky8qICBDIE0gVCBYIFQgIC0tICBHZXQgYSB0ZXh0IHN0cmluZywgaW5jbHVkaW5nIGNvbmZpcm1h dGlvbiAgKi8KKworLyoKKyAgUHJpbnQgaGVscCBtZXNzYWdlICd4aGxwJyBpZiA/IHR5cGVkLCBz dXBwbHkgZGVmYXVsdCAneGRlZicgaWYgbnVsbAorICBzdHJpbmcgdHlwZWQuICBSZXR1cm5zOgor CisgICAtMSBpZiByZXBhcnNlIG5lZWRlZCBvciBidWZmZXIgb3ZlcmZsb3dzLgorICAgIDEgb3Ro ZXJ3aXNlLgorCisgIHdpdGggY21mbGdzIHNldCB0byByZXR1cm4gY29kZSwgYW5kIHhwIHBvaW50 aW5nIHRvIHJlc3VsdCBzdHJpbmcuCisqLworaW50CitjbXR4dCh4aGxwLHhkZWYseHAsZikgY2hh ciAqeGhscDsgY2hhciAqeGRlZjsgY2hhciAqKnhwOyB4eF9zdHJwIGY7IHsKKworICAgIGludCB4 LCBpOworICAgIGNoYXIgKnh4LCAqenE7CisgICAgc3RhdGljIGludCB4YzsKKworICAgIGlmICgh eGhscCkgeGhscCA9ICIiOworICAgIGlmICgheGRlZikgeGRlZiA9ICIiOworCisgICAgY21mbGRm bGdzID0gMDsKKworICAgIGNtZGVmYXVsdFswXSA9IE5VTDsKKyAgICBpZiAoKnhkZWYpCisgICAg ICBja3N0cm5jcHkoY21kZWZhdWx0LHhkZWYsQ01ERUZBVUxUKTsgLyogQ29weSBkZWZhdWx0ICov CisgICAgeGRlZiA9IGNtZGVmYXVsdDsKKworICAgIGRlYnVnKEYxMDEsImNtdHh0IGNtZmxncyIs IiIsY21mbGdzKTsKKyAgICBpbndvcmQgPSAwOwkJCQkvKiBTdGFydCBhdG1idWYgY291bnRlciBv ZmYgYXQgMCAqLworICAgIGNjID0gMDsKKyAgICBpZiAoY21mbGdzID09IC0xKSB7ICAgICAgICAg ICAgICAgICAvKiBJZiByZXBhcnNpbmcsICovCisJKnhwID0gcHA7CisgICAgICAgIHhjID0gKGlu dClzdHJsZW4oKnhwKTsJCS8qIGdldCBiYWNrIHRoZSB0b3RhbCB0ZXh0IGxlbmd0aCwgKi8KKwli cCA9ICp4cDsJCQkvKiBhbmQgYmFjayB1cCB0aGUgcG9pbnRlcnMuICovCisJbnAgPSAqeHA7CisJ cHAgPSAqeHA7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3Ro ZXJ3aXNlLCAqLworCS8qIGRlYnVnKEYxMDAsImNtdHh0OiBmcmVzaCBzdGFydCIsIiIsMCk7ICov CisgICAgICAgICp4cCA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgZnJlc2gu ICovCisgICAgICAgIHhjID0gMDsKKyAgICB9CisgICAgKmF0bWJ1ZiA9IE5VTDsgICAgICAgICAg ICAgICAgICAgICAgLyogQW5kIGVtcHR5IHRoZSBhdG9tIGJ1ZmZlci4gKi8KKyAgICBydGltZXIo KTsJCQkJLyogUmVzZXQgdGltZXIgKi8KKyAgICBpZiAoKHggPSBjbWZsZ3MpICE9IDEpIHsKKwlp bnQgZG9uZSA9IDA7CisJd2hpbGUgKCFkb25lKSB7CisJICAgIHggPSBndHdvcmQoMCk7CQkvKiBH ZXQgZmlyc3Qgd29yZC4gKi8KKwkgICAgKnhwID0gcHA7CQkJLyogU2F2ZSBwb2ludGVyIHRvIGl0 LiAqLworCSAgICAvKiBkZWJ1ZyhGMTExLCJjbXR4dDoiLCp4cCxjYyk7ICovCisJICAgIGlmICh4 ID09IC0xMCkgeworCQlpZiAoZ3RpbWVyKCkgPiB0aW1lbGltaXQpIHsKKwkJICAgIC8qIGlmICgh cXVpZXQpIHByaW50ZigiP1RpbWVkIG91dFxuIik7ICovCisJCSAgICByZXR1cm4oeCk7CisJCX0K KwkgICAgfSBlbHNlCisJICAgICAgZG9uZSA9IDE7CisJfQorICAgIH0KKyAgICB3aGlsZSAoMSkg ewkJCQkvKiBMb29wIGZvciBlYWNoIHdvcmQgaW4gdGV4dC4gKi8KKyAgICAgICAgeGMgKz0gY2M7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyIGNvdW50IGZvciBhbGwgd29yZHMuICovCisg ICAgICAgIC8qIGRlYnVnKEYxMTEsImNtdHh0IGd0d29yZCIsYXRtYnVmLHhjKTsgKi8KKyAgICAg ICAgLyogZGVidWcoRjEwMSwiY210eHQgeCIsIiIseCk7ICovCisgICAgICAgIHN3aXRjaCAoeCkg eworCSAgY2FzZSAtMTA6CisJICAgIGlmIChndGltZXIoKSA+IHRpbWVsaW1pdCkgeworI2lmZGVm IElLU0QKKyAgICAgICAgICAgICAgICBleHRlcm4gaW50IGluc2VydmVyOworICAgICAgICAgICAg ICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG5JS1NE IElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7CisgICAgICAgICAgICAgICAg ICAgIGRvZXhpdChHT09EX0VYSVQsMCk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIElL U0QgKi8KKwkJLyogaWYgKCFxdWlldCkgcHJpbnRmKCI/VGltZWQgb3V0XG4iKTsgKi8KKwkJcmV0 dXJuKC0xMCk7CisJICAgIH0gZWxzZSB7CisJCXggPSBndHdvcmQoMCk7CisJCWNvbnRpbnVlOwor CSAgICB9CisJICBjYXNlIC05OgkJCS8qIEJ1ZmZlciBvdmVyZmxvdyAqLworCSAgICBwcmludGYo IkNvbW1hbmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOworCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8K KyNpZmRlZiBNQUMKKwkgIGNhc2UgLTM6CQkJLyogUXVpdC9UaW1lb3V0ICovCisjZW5kaWYgLyog TUFDICovCisJICBjYXNlIC0yOgkJCS8qIE92ZXJmbG93ICovCisJICBjYXNlIC0xOgkJCS8qIERl bGV0aW9uICovCisJICAgIHJldHVybih4KTsKKwkgIGNhc2UgMDoJCQkvKiBTcGFjZSAqLworCSAg ICB4YysrOwkJCS8qIEp1c3QgY291bnQgaXQgKi8KKwkgICAgYnJlYWs7CisJICBjYXNlIDE6CQkJ LyogQ1Igb3IgTEYgKi8KKwkgICAgaWYgKHhjID09IDApICp4cCA9IHhkZWY7CisJICAgIGlmIChm KSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCisJCWNoYXIgKiBz eCA9IGF0eGJ1ZjsKKwkJenEgPSBhdHhidWY7CQkvKiBQb2ludCB0byB0aGUgZXhwYW5zaW9uIGJ1 ZmZlciAqLworCQlhdHhuID0gQ01EQkw7CQkvKiBzcGVjaWZ5IGl0cyBsZW5ndGggKi8KKwkJLyog ZGVidWcoRjExMSwiY210eHQgY2FsbGluZyAoKmYpIiwqeHAsYXR4YnVmKTsgKi8KKwkJaWYgKCh4 ID0gKCpmKSgqeHAsJnpxLCZhdHhuKSkgPCAwKSByZXR1cm4oLTIpOworCQlzeCA9IGF0eGJ1ZjsK KyNpZm5kZWYgQ09NTUVOVAorCQljYyA9IDA7CisJCXdoaWxlICgqc3grKykgY2MrKzsJLyogKGZh c3RlciB0aGFuIGNhbGxpbmcgc3RybGVuKSAqLworI2Vsc2UKKwkJY2MgPSAoaW50KXN0cmxlbihh dHhidWYpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJLyogU2hvdWxkIGJlIGVxdWFsIHRvIChD TURCTCAtIGF0eG4pIGJ1dCBpc24ndCBhbHdheXMuICovCisJCS8qIFdoeSBub3Q/ICovCisJCWlm IChjYyA8IDEpIHsJCS8qIE5vdGhpbmcgaW4gZXhwYW5zaW9uIGJ1ZmZlcj8gKi8KKwkJICAgICp4 cCA9IHhkZWY7CQkvKiBQb2ludCB0byBkZWZhdWx0IHN0cmluZyBpbnN0ZWFkLiAqLworI2lmbmRl ZiBDT01NRU5UCisJCSAgICBzeCA9IHhkZWY7CisJCSAgICB3aGlsZSAoKnN4KyspIGNjKys7CS8q IChmYXN0ZXIgdGhhbiBjYWxsaW5nIHN0cmxlbikgKi8KKyNlbHNlCisJCSAgICBjYyA9IHN0cmxl bih4ZGVmKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCX0gZWxzZSB7CQkvKiBFeHBhbnNpb24g ZnVuY3Rpb24gZ290IHNvbWV0aGluZyAqLworCQkgICAgKnhwID0gYXR4YnVmOwkvKiByZXR1cm4g cG9pbnRlciB0byBpdC4gKi8KKwkJfQorCQlkZWJ1ZyhGMTExLCJjbXR4dCAoKmYpIiwqeHAsY2Mp OworCSAgICB9IGVsc2UgewkJCS8qIE5vIGV4cGFuc2lvbiBmdW5jdGlvbiAqLworI2lmbmRlZiBD T01NRU5UCisJCS8qIEF2b2lkIGEgc3RybGVuKCkgY2FsbCAqLworCQl4eCA9ICp4cDsKKwkJY2Mg PSAwOworCQl3aGlsZSAoKnh4KyspIGNjKys7CisjZWxzZQorCQkvKiBOTyEgIHhjIGlzIGFwcGFy ZW50bHkgbm90IGFsd2F5cyBzZXQgYXBwcm9wcmlhdGVseSAqLworCQljYyA9IHhjOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKwkgICAgfQorCSAgICB4eCA9ICp4cDsKKyNpZmRlZiBDT01NRU5UCisJ ICAgIC8qIHN0cmxlbigpIG5vIGxvbmdlciBuZWVkZWQgKi8KKwkgICAgZm9yIChpID0gKGludClz dHJsZW4oeHgpIC0gMTsgaSA+IDA7IGktLSkKKyNlbHNlCisJICAgIGZvciAoaSA9IGNjIC0gMTsg aSA+IDA7IGktLSkKKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgICAgaWYgKHh4W2ldICE9IFNQ KQkJLyogVHJpbSB0cmFpbGluZyBibGFua3MgKi8KKwkJYnJlYWs7CisJICAgICAgZWxzZQorCQl4 eFtpXSA9IE5VTDsKKwkgICAgcmV0dXJuKHgpOworCSAgY2FzZSAyOgkJCS8qIEVTQyAqLworCSAg ICBpZiAoeGMgPT0gMCkgewkJLyogTm90aGluZyB0eXBlZCB5ZXQgKi8KKwkJaWYgKCp4ZGVmKSB7 CQkvKiBIYXZlIGEgZGVmYXVsdCBmb3IgdGhpcyBmaWVsZD8gKi8KKwkJICAgIHByaW50ZigiJXMg Iix4ZGVmKTsJLyogWWVzLCBzdXBwbHkgaXQgKi8KKwkJICAgIGlud29yZCA9IGNtZmxncyA9IDA7 CisjaWZkZWYgR0VNRE9TCisJCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBHRU1ET1Mg Ki8KKwkJICAgIGNjID0gYWRkYnVmKHhkZWYpOworCQl9IGVsc2UgYmxlZXAoQlBfV0FSTik7CS8q IE5vIGRlZmF1bHQgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBBbHJlYWR5IGluIGZpZWxkICovCisJ CWludCB4OyBjaGFyICpwOworCQl4ID0gc3RybGVuKGF0bWJ1Zik7CisJCWlmIChja3N0cmNtcChh dG1idWYseGRlZix4LDApKSB7ICAgIC8qIE1hdGNoZXMgZGVmYXVsdD8gKi8KKwkJICAgIGJsZWVw KEJQX1dBUk4pOwkgICAgICAgICAgICAvKiBObyAqLworCQl9IGVsc2UgaWYgKChpbnQpc3RybGVu KHhkZWYpID4geCkgeyAvKiBZZXMgKi8KKwkJICAgIHAgPSB4ZGVmICsgeDsKKwkJICAgIHByaW50 ZigiJXMgIiwgcCk7CisjaWZkZWYgR0VNRE9TCisJCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRp ZiAvKiBHRU1ET1MgKi8KKwkJICAgIGFkZGJ1ZihwKTsKKwkJICAgIGlud29yZCA9IGNtZmxncyA9 IDA7CisJCSAgICBkZWJ1ZyhGMTEwLCJjbXR4dDogYWRkYnVmIixjbWRidWYsMCk7CisJCX0gZWxz ZSB7CisJCSAgICBibGVlcChCUF9XQVJOKTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCSAg Y2FzZSAzOgkJCS8qIFF1ZXN0aW9uIE1hcmsgKi8KKwkgICAgaWYgKCp4aGxwID09IE5VTCkKKwkg ICAgICBwcmludGYoIiBUZXh0IHN0cmluZyIpOworCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCIg JXMiLHhobHApOworCSAgICBwcmludGYoIlxuJXMlcyIsY21wcm9tLGNtZGJ1Zik7CisJICAgIGZm bHVzaChzdGRvdXQpOworCSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisJICAgIHByaW50ZigiP1Vu ZXhwZWN0ZWQgcmV0dXJuIGNvZGUgZnJvbSBndHdvcmQoKSAtICVkXG4iLHgpOworCSAgICByZXR1 cm4oLTIpOworICAgICAgICB9CisgICAgICAgIHggPSBndHdvcmQoMCk7CisgICAgfQorfQorCisv KiAgQyBNIEsgRSBZICAtLSAgUGFyc2UgYSBrZXl3b3JkICAqLworCisvKgorIENhbGwgd2l0aDoK KyAgIHRhYmxlICAgIC0tICBrZXl3b3JkIHRhYmxlLCBpbiAnc3RydWN0IGtleXRhYicgZm9ybWF0 OworICAgbiAgICAgICAgLS0gIG51bWJlciBvZiBlbnRyaWVzIGluIHRhYmxlOworICAgeGhscCAg ICAgLS0gIHBvaW50ZXIgdG8gaGVscCBzdHJpbmc7CisgICB4ZGVmICAgICAtLSAgcG9pbnRlciB0 byBkZWZhdWx0IGtleXdvcmQ7CisgICBmICAgICAgICAtLSAgc3RyaW5nIHByZXByb2Nlc3Npbmcg ZnVuY3Rpb24gKGUuZy4gdG8gZXZhbHVhdGUgdmFyaWFibGVzKQorICAgcG1zZyAgICAgLS0gIDAg PSBkb24ndCBwcmludCBlcnJvciBtZXNzYWdlcworICAgICAgICAgICAgICAgIDEgPSBwcmludCBl cnJvciBtZXNzYWdlcworICAgICAgICAgICAgICAgIDIgPSBpbmNsdWRlIENNX0hMUCBrZXl3b3Jk cyBldmVuIGlmIGludmlzaWJsZQorICAgICAgICAgICAgICAgIDMgPSAxKzIKKyAgICAgICAgICAg ICAgICA0ID0gcGFyc2UgYSBzd2l0Y2ggKGtleXdvcmQgcG9zc2libHkgZW5kaW5nIGluIDogb3Ig PSkKKyAgICAgICAgICAgICAgICA4ID0gZG9uJ3Qgc3RyaXAgY29tbWVudHMgKHVzZWQsIGUuZy4s IGZvciAiaGVscCAjIikKKyBSZXR1cm5zOgorICAgLTMgICAgICAgLS0gIG5vIGlucHV0IHN1cHBs aWVkIGFuZCBubyBkZWZhdWx0IGF2YWlsYWJsZQorICAgLTIgICAgICAgLS0gIGlucHV0IGRvZXNu J3QgdW5pcXVlbHkgbWF0Y2ggYSBrZXl3b3JkIGluIHRoZSB0YWJsZQorICAgLTEgICAgICAgLS0g IHVzZXIgZGVsZXRlZCB0b28gbXVjaCwgY29tbWFuZCByZXBhcnNlIHJlcXVpcmVkCisgICAgbiA+ PSAwICAtLSAgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGtleXdvcmQKKyovCisKKy8qCisgIEZyb250 IGVuZHMgZm9yIGNta2V5MigpOiAKKyAgY21rZXkoKSAgLSBUaGUgbm9ybWFsIGtleXdvcmQgcGFy c2VyCisgIGNta2V5eCgpIC0gTGlrZSBjbWtleSgpIGJ1dCBzdXBwcmVzc2VzIGVycm9yIG1lc3Nh Z2VzCisgIGNtc3dpKCkgIC0gU3dpdGNoIHBhcnNlcgorKi8KK2ludAorY21rZXkodGFibGUsbix4 aGxwLHhkZWYsZikKKy8qIGNta2V5ICovICBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuOyBj aGFyICp4aGxwLCAqeGRlZjsgeHhfc3RycCBmOyB7CisgICAgcmV0dXJuKGNta2V5Mih0YWJsZSxu LHhobHAseGRlZiwiIixmLDEpKTsKK30KK2ludAorY21rZXl4KHRhYmxlLG4seGhscCx4ZGVmLGYp CisvKiBjbWtleXggKi8gIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG47IGNoYXIgKnhobHAs ICp4ZGVmOyB4eF9zdHJwIGY7IHsKKyAgICByZXR1cm4oY21rZXkyKHRhYmxlLG4seGhscCx4ZGVm LCIiLGYsMCkpOworfQoraW50CitjbXN3aSh0YWJsZSxuLHhobHAseGRlZixmKQorLyogY21zd2kg Ki8gIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG47IGNoYXIgKnhobHAsICp4ZGVmOyB4eF9z dHJwIGY7IHsKKyAgICByZXR1cm4oY21rZXkyKHRhYmxlLG4seGhscCx4ZGVmLCIiLGYsNCkpOwor fQorCitpbnQKK2Nta2V5Mih0YWJsZSxuLHhobHAseGRlZix0b2ssZixwbXNnKQorICAgIHN0cnVj dCBrZXl0YWIgdGFibGVbXTsKKyAgICBpbnQgbjsKKyAgICBjaGFyICp4aGxwLCAqeGRlZjsKKyAg ICBjaGFyICp0b2s7CisgICAgeHhfc3RycCBmOworICAgIGludCBwbXNnOworeyAvKiBjbWtleTIg Ki8KKyAgICBleHRlcm4gaW50IGhhdmV0b2tlbjsKKyAgICBpbnQgaSwgdGwsIHksIHogPSAwLCB6 eiwgeGMsIHdvcmRsZW4gPSAwLCBjbXN3aXRjaDsKKyAgICBjaGFyICp4cCwgKnpxOworCisgICAg aWYgKCF4aGxwKSB4aGxwID0gIiI7CisgICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7CisKKyAgICBj bWZsZGZsZ3MgPSAwOworICAgIGlmICghdGFibGUpIHsKKwlwcmludGYoIj9LZXl3b3JkIHRhYmxl IG1pc3NpbmdcbiIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIHRsID0gKGludClzdHJsZW4o dG9rKTsKKworICAgIGlud29yZCA9IHhjID0gY2MgPSAwOwkJLyogQ2xlYXIgY2hhcmFjdGVyIGNv dW50ZXJzLiAqLworICAgIGNtc3dpdGNoID0gcG1zZyAmIDQ7CQkvKiBGbGFnIGZvciBwYXJzaW5n IGEgc3dpdGNoICovCisKKyAgICBkZWJ1ZyhGMTAxLCJjbWtleTogcG1zZyIsIiIscG1zZyk7Cisg ICAgZGVidWcoRjEwMSwiY21rZXk6IGNtZmxncyIsIiIsY21mbGdzKTsKKyAgICBkZWJ1ZyhGMTAx LCJjbWtleTogY21zd2l0Y2giLCIiLGNtc3dpdGNoKTsKKyAgICAvKiBkZWJ1ZyhGMTAxLCJjbWtl eTogY21kYnVmIiwiIixjbWRidWYpOyovCisKKyAgICBwcHZuYW1idWZbMF0gPSBOVUw7CisKKyAg ICBpZiAoKHp6ID0gY21mbGdzKSA9PSAxKSB7CQkvKiBDb21tYW5kIGFscmVhZHkgZW50ZXJlZD8g Ki8KKwlpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7CS8qIFllcywgY29weSBkZWZhdWx0IGludG8g YXRvbSBidWYgKi8KKwkgICAgcHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7CisJICAgIHJl dHVybigtOSk7CisJfQorICAgICAgICBydGltZXIoKTsJCQkgLyogUmVzZXQgdGltZXIgKi8KKyAg ICB9IGVsc2UgewkJCQkgLyogT3RoZXJ3aXNlIGdldCBhIGNvbW1hbmQgd29yZCAqLworICAgICAg ICBydGltZXIoKTsJCQkgLyogUmVzZXQgdGltZXIgKi8KKwlpZiAocG1zZyAmIDgpCQkJIC8qIDgg aXMgZm9yIHBhcnNpbmcgSEVMUCB0b2tlbnMgKi8KKwkgIHp6ID0gZ3R3b3JkKDQpOworCWVsc2UK KwkgIHp6ID0gZ3R3b3JkKChwbXNnID09IDQpID8gMSA6IDApOworICAgIH0KKworICAgIGRlYnVn KEYxMDEsImNta2V5IHRhYmxlIGxlbmd0aCIsIiIsbik7CisgICAgZGVidWcoRjEwMSwiY21rZXkg Y21mbGdzIiwiIixjbWZsZ3MpOworICAgIGRlYnVnKEYxMDEsImNta2V5IGNjIiwiIixjYyk7CisK KyAgICB3aGlsZSAoMSkgeworCXhjICs9IGNjOworCWRlYnVnKEYxMTEsImNta2V5IGd0d29yZCB4 YyIsYXRtYnVmLHhjKTsKKwlkZWJ1ZyhGMTAxLCJjbWtleSBndHdvcmQgenoiLCIiLHp6KTsKKwor CXN3aXRjaCAoenopIHsKKwkgIGNhc2UgLTEwOgkJCS8qIFRpbWVvdXQgKi8KKwkgICAgaWYgKGd0 aW1lcigpIDwgdGltZWxpbWl0KSB7CisJCWlmIChwbXNnICYgOCkJCS8qIDggaXMgZm9yIHBhcnNp bmcgSEVMUCB0b2tlbnMgKi8KKwkJICB6eiA9IGd0d29yZCg0KTsKKwkJZWxzZQorCQkgIHp6ID0g Z3R3b3JkKChwbXNnID09IDQpID8gMSA6IDApOworCQljb250aW51ZTsKKwkgICAgfSBlbHNlIHsK KyNpZmRlZiBJS1NECisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKKyAgICAg ICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJc clxuSUtTRCBJRExFIFRJTUVPVVQ6ICVkIHNlY1xyXG4iLCB0aW1lbGltaXQpOworICAgICAgICAg ICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULDApOworICAgICAgICAgICAgICAgIH0KKyNlbmRp ZiAvKiBJS1NEICovCisJCXJldHVybigtMTApOworICAgICAgICAgICAgfQorCSAgY2FzZSAtNToK KwkgICAgcmV0dXJuKGNtZmxncyA9IDApOworCSAgY2FzZSAtOToKKwkgICAgcHJpbnRmKCJDb21t YW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKKwkgIGNhc2UgLTQ6CQkJLyogRU9GICovCisJICBj YXNlIC0zOgkJCS8qIE51bGwgQ29tbWFuZC9RdWl0L1RpbWVvdXQgKi8KKwkgIGNhc2UgLTI6CQkJ LyogQnVmZmVyIG92ZXJmbG93ICovCisJICBjYXNlIC0xOgkJCS8qIE9yIHVzZXIgZGlkIHNvbWUg ZGVsZXRpbmcuICovCisJICAgIHJldHVybihjbWZsZ3MgPSB6eik7CisKKworCSAgY2FzZSAxOgkJ CS8qIENSICovCisJICBjYXNlIDA6CQkJLyogVXNlciB0ZXJtaW5hdGVkIHdvcmQgd2l0aCBzcGFj ZSAqLworCSAgY2FzZSA0OgkJCS8qIG9yIHN3aXRjaCBlbmRpbmcgaW4gOiBvciA9ICovCisJICAg IHdvcmRsZW4gPSBjYzsJCS8qIExlbmd0aCBpZiBubyBjb252ZXJzaW9uICovCisJICAgIGlmIChj YyA9PSAwKSB7CQkvKiBTdXBwbHkgZGVmYXVsdCBpZiB3ZSBnb3Qgbm90aGluZyAqLworCQlpZiAo KHdvcmRsZW4gPSBzZXRhdG0oeGRlZiwoenogPT0gNCkgPyAyIDogMCkpIDwgMCkgeworCQkgICAg cHJpbnRmKCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJ ICAgIH0KKwkgICAgaWYgKHp6ID09IDEgJiYgY2MgPT0gMCkJLyogUmVxdWlyZWQgZmllbGQgbWlz c2luZyAqLworCSAgICAgIHJldHVybigtMyk7CisKKwkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNv bnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwkJY2hhciAqIHAyOworCQl6cSA9IGF0eGJ1 ZjsJCS8qIGFwcGx5IGl0ICovCisJCXAyID0gYXR4YnVmOworCQlhdHhuID0gQ01EQkw7CisJCWlm ICgoKmYpKGF0bWJ1ZiwmenEsJmF0eG4pIDwgMCkgcmV0dXJuKC0yKTsKKwkJZGVidWcoRjExMCwi Y21rZXkgYXR4YnVmIGFmdGVyICpmIixhdHhidWYsMCk7CisJCWlmICghKnAyKQkJLyogU3VwcGx5 IGRlZmF1bHQgaWYgd2UgZ290IG5vdGhpbmcgKi8KKwkJICBwMiA9IHhkZWY7CisJCWNrc3RybmNw eShwcHZuYW1idWYsYXRtYnVmLFBQVkxFTik7CisJCWlmICgod29yZGxlbiA9IHNldGF0bShwMiwo enogPT0gNCkgPyAyIDogMCkpIDwgMCkgeworCQkgICAgcHJpbnRmKCJFdmFsdWF0ZWQga2V5d29y ZCB0b28gbG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisjaWZkZWYgTV9VTkdXCisJ CS8qCisJCSAgVGhpcyBiaXQgbGV0cyB1cyBzYXZlIG1vcmUgdGhhbiBvbmUgIndvcmQiLgorCQkg IEZvciBleGFtcGxlLCAiZGVmaW5lIFwleCBlY2hvIG9uZSB0d28gdGhyZWUiLCAiXCV4Ii4KKwkJ ICBJdCB3b3JrcyB0b28sIGJ1dCBpdCBicmVha3MgbGFiZWxzLCBhbmQgdGhlcmVmb3JlCisJCSAg V0hJTEUgYW5kIEZPUiBsb29wcywgZXRjLgorCQkqLworCQlpZiAocDJbd29yZGxlbl0gPj0gU1Ap IHsKKwkJICAgIHAyICs9IHdvcmRsZW47CisJCSAgICB3aGlsZSAoKnAyID09IFNQKSBwMisrOwor CQkgICAgaWYgKCpwMikgeworCQkJdW5nd29yZCgpOworCQkJcHAgPSBwMjsKKwkJICAgIH0KKwkJ fQorI2VuZGlmIC8qIE1fVU5HVyAqLworCSAgICB9CisjaWZkZWYgQ09NTUVOVAkJCQkvKiBeXl4g Ki8KKwkgICAgaWYgKGNtc3dpdGNoICYmICphdG1idWYgIT0gJy8nKSB7CisJCWlmIChwbXNnICYg MSkgeworCQkgICAgYmxlZXAoQlBfRkFJTCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi P05vdCBhIHN3aXRjaCAtICVzXG4iLGF0bWJ1Zik7CisJCX0KKwkJY21mbGdzID0gLTI7CisJCXJl dHVybigtNik7CisJICAgIH0KKyNlbmRpZgkvKiBDT01NRU5UICovCisJICAgIGlmIChjbXN3aXRj aCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRsZW47IGkrKykgeworCQkgICAg aWYgKGF0bWJ1ZltpXSA9PSAnOicgfHwgYXRtYnVmW2ldID09ICc9JykgeworCQkJYnJrY2hhciA9 IGF0bWJ1ZltpXTsKKwkJCWF0bWJ1ZltpXSA9IE5VTDsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9 CisJICAgIH0KKworI2lmZGVmIFRPS1BSRUNIRUNLCisvKiBUaGlzIHdhcyBhbiBlZmZlY3RpdmUg b3B0aW1pemF0aW9uIGJ1dCBpdCBicmVha3Mgc29tZXRpbWVzIG9uIGxhYmVscy4gKi8KKwkgICAg aWYgKHRsICYmICFpc2FscGhhKGF0bWJ1ZlswXSkpIHsgLyogUHJlY2hlY2sgZm9yIHRva2VuICov CisJCWZvciAoaSA9IDA7IGkgPCB0bDsgaSsrKSB7IC8qIFNhdmUgZnVuY3Rpb24gY2FsbCB0byBj a3N0cmNociAqLworCQkgICAgaWYgKHRva1tpXSA9PSBhdG1idWZbMF0pIHsKKwkJCWRlYnVnKEYw MDAsImNta2V5IHRva2VuOiIsYXRtYnVmLCphdG1idWYpOworCQkJdW5nd29yZCgpOyAgLyogUHV0 IGJhY2sgdGhlIGZvbGxvd2luZyB3b3JkICovCisJCQlyZXR1cm4oLTUpOyAvKiBTcGVjaWFsIHJl dHVybiBjb2RlIGZvciB0b2tlbiAqLworCQkgICAgfQorCQl9CisJICAgIH0KKyNlbmRpZiAvKiBU T0tQUkVDSEVDSyAqLworCisJICAgIHkgPSBsb29rdXAodGFibGUsYXRtYnVmLG4sJnopOyAvKiBM b29rIHVwIHdvcmQgaW4gdGhlIHRhYmxlICovCisJICAgIGRlYnVnKEYxMTEsImNta2V5IGxvb2t1 cCIsYXRtYnVmLHkpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWtleSB6eiIsIiIsenopOworCSAgICBk ZWJ1ZyhGMTAxLCJjbWtleSBjbWZsZ3MiLCIiLGNtZmxncyk7CisJICAgIGRlYnVnKEYxMDEsImNt a2V5IGNyZmxhZyIsIiIsY3JmbGFnKTsKKwkgICAgc3dpdGNoICh5KSB7CisJICAgICAgY2FzZSAt MzoJCQkvKiBOb3RoaW5nIHRvIGxvb2sgdXAgKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSAtMjoJ CQkvKiBBbWJpZ3VvdXMgKi8KKwkJY21mbGdzID0gLTI7CisJCWlmIChwbXNnICYgMSkgeworCQkg ICAgYmxlZXAoQlBfRkFJTCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0FtYmlndW91 cyAtICVzXG4iLGF0bWJ1Zik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJCXJldHVybigtMik7 CisJICAgICAgY2FzZSAtMToJCQkvKiBOb3QgZm91bmQgYXQgYWxsICovCisjaWZuZGVmIFRPS1BS RUNIRUNLCisJCWlmICh0bCkgeworCQkgICAgZm9yIChpID0gMDsgaSA8IHRsOyBpKyspIC8qIENo ZWNrIGZvciB0b2tlbiAqLworCQkgICAgICBpZiAodG9rW2ldID09ICphdG1idWYpIHsgLyogR290 IG9uZSAqLworCQkJICBkZWJ1ZyhGMDAwLCJjbWtleSB0b2tlbjoiLGF0bWJ1ZiwqYXRtYnVmKTsK KwkJCSAgdW5nd29yZCgpOyAgLyogUHV0IGJhY2sgdGhlIGZvbGxvd2luZyB3b3JkICovCisJCQkg IHJldHVybigtNSk7IC8qIFNwZWNpYWwgcmV0dXJuIGNvZGUgZm9yIHRva2VuICovCisJCSAgICAg IH0KKwkJfQorI2VuZGlmIC8qIFRPS1BSRUNIRUNLICovCisKKwkJaWYgKHRsID09IDApIHsJCS8q IE5vIHRva2VucyB3ZXJlIGluY2x1ZGVkICovCisjaWZkZWYgT1MyCisJCSAgICAvKiBJbiBPUy8y IGFuZCBXaW5kb3dzLCBhbGxvdyBmb3IgYSBkaXNrIGxldHRlciBsaWtlIERPUyAqLworCQkgICAg aWYgKGlzYWxwaGEoKmF0bWJ1ZikgJiYgKihhdG1idWYrMSkgPT0gJzonKQorCQkgICAgICByZXR1 cm4oLTcpOworI2VuZGlmIC8qIE9TMiAqLworCQkgICAgaWYgKChwbXNnICYgMSkgJiYgIXF1aWV0 KSB7CisJCQlibGVlcChCUF9GQUlMKTsKKwkJCXByaW50ZigiP05vIGtleXdvcmRzIG1hdGNoIC0g JXNcbiIsYXRtYnVmKTsgLyogY21rZXkgKi8KKwkJICAgIH0KKwkJICAgIHJldHVybihjbWZsZ3Mg PSAtOSk7CisJCX0gZWxzZSB7CisJCSAgICBpZiAoY21mbGdzID09IDEgfHwgY21zd2l0Y2gpIC8q IGNta2V5MiBvciBjbXN3aSAqLworCQkgICAgICByZXR1cm4oY21mbGdzID0gLTYpOworCQkgICAg ZWxzZQorCQkgICAgICByZXR1cm4oY21mbGdzID0gLTIpOworCQkgICAgLyogVGhlIC02IGNvZGUg aXMgdG8gbGV0IGNhbGxlciB0cnkgYW5vdGhlciB0YWJsZSAqLworCQl9CisJCWJyZWFrOworCSAg ICAgIGRlZmF1bHQ6CisjaWZkZWYgQ0tfUkVDQUxMCisJCWlmICh0ZXN0KHRhYmxlW3pdLmZsZ3Ms Q01fTk9SKSkgbm9fcmVjYWxsID0gMTsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKwkJaWYgKHp6 ID09IDQpCisJCSAgc3dhcmcgPSAxOworCQljbWt3ZmxncyA9IHRhYmxlW3pdLmZsZ3M7CisJCWJy ZWFrOworCSAgICB9CisJICAgIHJldHVybih5KTsKKworCSAgY2FzZSAyOgkJCS8qIFVzZXIgdGVy bWluYXRlZCB3b3JkIHdpdGggRVNDICovCisJICAgIGRlYnVnKEYxMDEsImNta2V5IEVzYyBjYyIs IiIsY2MpOworICAgICAgICAgICAgaWYgKGNjID09IDApIHsKKwkJaWYgKCp4ZGVmICE9IE5VTCkg eyAgICAgLyogTm90aGluZyBpbiBhdG1idWYgKi8KKwkJICAgIHByaW50ZigiJXMgIix4ZGVmKTsg LyogU3VwcGx5IGRlZmF1bHQgaWYgYW55ICovCisjaWZkZWYgR0VNRE9TCisJCSAgICBmZmx1c2go c3Rkb3V0KTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKwkJICAgIGFkZGJ1Zih4ZGVmKTsKKwkJICAg IGlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsKKwkJCXByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdc biIpOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGlud29yZCA9IGNtZmxncyA9IDA7 CisJCSAgICBkZWJ1ZyhGMTExLCJjbWtleTogZGVmYXVsdCIsYXRtYnVmLGNjKTsKKwkJfSBlbHNl IHsKKwkJICAgIGRlYnVnKEYxMDEsImNta2V5IEVzYyBwbXNnIiwiIiwwKTsKKyNpZmRlZiBDT01N RU5UCisvKgorICBDaGFpbmVkIEZEQnMuLi4gIFRoZSBpZGVhIGlzIHRoYXQgdGhpcyBmdW5jdGlv biBtaWdodCBub3QgaGF2ZSBhIGRlZmF1bHQsCisgIGJ1dCB0aGUgbmV4dCBvbmUgbWlnaHQuICBC dXQgaWYgaXQgZG9lc24ndCwgdGhlcmUgaXMgbm8gd2F5IHRvIGNvbWUgYmFjayB0bworICB0aGlz IG9uZS4gIFRvIGJlIHJldmlzaXRlZCBsYXRlci4uLgorKi8KKwkJICAgIGlmICh4Y21mZGIpCQkv KiBDaGFpbmVkIGZkYiAtLSB0cnkgbmV4dCBvbmUgKi8KKwkJICAgICAgcmV0dXJuKC0zKTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisJCSAgICBpZiAocG1zZyAmICgxfDQpKSB7CS8qIFNvIGZvciBu b3cganVzdCBiZWVwICovCisJCQlibGVlcChCUF9XQVJOKTsKKwkJICAgIH0KKwkJICAgIGJyZWFr OworCQl9CisgICAgICAgICAgICB9CisJICAgIGlmIChmKSB7CQkJLyogSWYgYSBjb252ZXJzaW9u IGZ1bmN0aW9uIGlzIGdpdmVuICovCisJCWNoYXIgKiBwcDsKKwkJenEgPSBhdHhidWY7CQkvKiBh cHBseSBpdCAqLworCQlwcCA9IGF0eGJ1ZjsKKwkJYXR4biA9IENNREJMOworCQlpZiAoKCpmKShh dG1idWYsJnpxLCZhdHhuKSA8IDApCisJCSAgcmV0dXJuKC0yKTsKKwkJaWYgKCEqcHApCisJCSAg cHAgPSB4ZGVmOworCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgeworCQkgICAgcHJpbnRmKCJFdmFs dWF0ZWQga2V5d29yZCB0b28gbG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAg IH0KKwkgICAgeSA9IGxvb2t1cCh0YWJsZSxhdG1idWYsbiwmeik7IC8qIFNvbWV0aGluZyBpbiBh dG1idWYgKi8KKwkgICAgZGVidWcoRjExMSwiY21rZXkgbG9va3VwIHkiLGF0bWJ1Zix5KTsKKwkg ICAgZGVidWcoRjExMSwiY21rZXkgbG9va3VwIHoiLGF0bWJ1Zix6KTsKKwkgICAgaWYgKHkgPT0g LTIgJiYgeiA+PSAwICYmIHogPCBuKSB7IC8qIEFtYmlndW91cyAqLworI2lmbmRlZiBOT1BBUlRJ QUwKKwkJaW50IGosIGssIGxlbiA9IDk5OTk7CS8qIERvIHBhcnRpYWwgY29tcGxldGlvbiAqLwor CQkvKiBTa2lwIHBhc3QgYW55IGFiYnJldmlhdGlvbnMgaW4gdGhlIHRhYmxlICovCisJCWZvciAo IDsgeiA8IG47IHorKykgeworCQkgICAgaWYgKCh0YWJsZVt6XS5mbGdzICYgQ01fQUJSKSA9PSAw KQorCQkgICAgICBicmVhazsKKwkJICAgIGlmICghKHRhYmxlW3pdLmZsZ3MgJiBDTV9ITFApIHx8 IChwbXNnICYgMikpCisJCSAgICAgIGJyZWFrOworCQl9CisJCWRlYnVnKEYxMTEsImNta2V5IHBh cnRpYWwgeiIsYXRtYnVmLHopOworCQlkZWJ1ZyhGMTExLCJjbWtleSBwYXJ0aWFsIG4iLGF0bWJ1 ZixuKTsKKwkJZm9yIChqID0geisxOyBqIDwgbjsgaisrKSB7CisJCSAgICBkZWJ1ZyhGMTExLCJj bWtleSBwYXJ0aWFsIGoiLHRhYmxlW2pdLmt3ZCxqKTsKKwkJICAgIGlmIChja3N0cmNtcChhdG1i dWYsdGFibGVbal0ua3dkLGNjLDApKQorCQkgICAgICBicmVhazsKKwkJICAgIGlmICh0YWJsZVtq XS5mbGdzICYgQ01fQUJSKQorCQkgICAgICBjb250aW51ZTsKKwkJICAgIGlmICgodGFibGVbal0u ZmxncyAmIENNX0hMUCkgJiYgIShwbXNnICYgMikpCisJCSAgICAgIGNvbnRpbnVlOworCQkgICAg ayA9IGNrc3RycHJlKHRhYmxlW3pdLmt3ZCx0YWJsZVtqXS5rd2QpOworCQkgICAgZGVidWcoRjEx MSwiY21rZXkgcGFydGlhbCBrIix0YWJsZVt6XS5rd2Qsayk7CisJCSAgICBpZiAoayA8IGxlbikK KwkJICAgICAgbGVuID0gazsgLyogTGVuZ3RoIG9mIGxvbmdlc3QgY29tbW9uIHByZWZpeCAqLwor CQl9CisJCWRlYnVnKEYxMTEsImNta2V5IHBhcnRpYWwgbGVuIix0YWJsZVt6XS5rd2QsbGVuKTsK KwkJaWYgKGxlbiAhPSA5OTk5ICYmIGxlbiA+IGNjKSB7CisJCSAgICBja3N0cm5jYXQoYXRtYnVm LHRhYmxlW3pdLmt3ZCtjYyxBVE1CTCk7CisJCSAgICBhdG1idWZbbGVuXSA9IE5VTDsKKwkJICAg IHByaW50ZigiJXMiLGF0bWJ1ZitjYyk7CisJCSAgICBja3N0cm5jYXQoY21kYnVmLGF0bWJ1Zitj YyxDTURCTCk7CisJCSAgICB4YyArPSAobGVuIC0gY2MpOworCQkgICAgY2MgPSBsZW47CisJCX0K KyNlbmRpZiAvKiBOT1BBUlRJQUwgKi8KKwkJYmxlZXAoQlBfV0FSTik7CisJCWJyZWFrOworCSAg ICB9IGVsc2UgaWYgKHkgPT0gLTMpIHsKKwkJYmxlZXAoQlBfV0FSTik7CisJCWJyZWFrOworCSAg ICB9IGVsc2UgaWYgKHkgPT0gLTEpIHsJLyogTm90IGZvdW5kICovCisJCWlmICgocG1zZyAmIDEp ICYmICFxdWlldCkgeworCQkgICAgYmxlZXAoQlBfRkFJTCk7CisJCSAgICBwcmludGYoIj9ObyBr ZXl3b3JkcyBtYXRjaCAtIFwiJXNcIlxuIixhdG1idWYpOworCQl9CisJCWNtZmxncyA9IC0yOwor CQlyZXR1cm4oLTkpOworCSAgICB9CisvKgorICBJZiB3ZSBmb3VuZCBpdCwgYnV0IGl0J3MgYSBo ZWxwLW9ubHkga2V5d29yZCBhbmQgdGhlICJoZWxwIiBiaXQgaXMgbm90CisgIHNldCBpbiBwbXNn LCB0aGVuIG5vdCBmb3VuZC4KKyovCisJICAgIGRlYnVnKEYxMDEsImNta2V5IGZsZ3MiLCIiLHRh YmxlW3pdLmZsZ3MpOworCSAgICBpZiAodGVzdCh0YWJsZVt6XS5mbGdzLENNX0hMUCkgJiYgKChw bXNnICYgMikgPT0gMCkpIHsKKwkJaWYgKChwbXNnICYgMSkgJiYgIXF1aWV0KSB7CisJCSAgICBi bGVlcChCUF9GQUlMKTsKKwkJICAgIHByaW50ZigiP05vIGtleXdvcmRzIG1hdGNoIC0gJXNcbiIs YXRtYnVmKTsKKwkJfQorCQljbWZsZ3MgPSAtMjsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorLyoK KyAgU2VlIGlmIHRoZSBrZXl3b3JkIGp1c3QgZm91bmQgaGFzIHRoZSBDTV9BQlIgYml0IHNldCBp biBpdHMgZmxncyBmaWVsZCwgYW5kCisgIGlmIHNvLCBzZWFyY2ggZm9yd2FyZHMgaW4gdGhlIHRh YmxlIGZvciBhIGtleXdvcmQgdGhhdCBoYXMgdGhlIHNhbWUga3d2YWwKKyAgYnV0IGRvZXMgbm90 IGhhdmUgQ01fQUJSIChvciBDTV9JTlY/KSBzZXQsIGFuZCB0aGVuIGV4cGFuZCB1c2luZyB0aGUg ZnVsbAorICBrZXl3b3JkLiAgV0FSTklORzogVGhpcyBhc3N1bWVzIHRoYXQgKGEpIGtleXdvcmRz IGFyZSBpbiBhbHBoYWJldGljYWwgb3JkZXIsCisgIGFuZCAoYikgdGhlIENNX0FCUiBiaXQgaXMg c2V0IG9ubHkgaWYgdGhlIHRoZSBhYmJyZXZpYXRlZCBrZXl3b3JkIGlzIGEgdHJ1ZQorICBhYmJy ZXZpYXRpb24gKGxlZnQgc3Vic3RyaW5nKSBvZiB0aGUgZnVsbCBrZXl3b3JkLgorKi8KKwkgICAg aWYgKHRlc3QodGFibGVbel0uZmxncyxDTV9BQlIpKSB7CisJCWludCB6ejsKKwkJZm9yICh6eiA9 IHorMTsgenogPCBuOyB6eisrKQorCQkgIGlmICgodGFibGVbenpdLmt3dmFsID09IHRhYmxlW3pd Lmt3dmFsKSAmJgorCQkgICAgICAoIXRlc3QodGFibGVbenpdLmZsZ3MsQ01fQUJSKSkgJiYKKwkJ ICAgICAgKCF0ZXN0KHRhYmxlW3p6XS5mbGdzLENNX0lOVikpKSB7CisJCSAgICAgIHogPSB6ejsK KwkJICAgICAgYnJlYWs7CisJCSAgfQorCSAgICB9CisJICAgIHhwID0gdGFibGVbel0ua3dkICsg Y2M7CisJICAgIGlmIChjbXN3aXRjaCAmJiB0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fQVJHKSkgewor I2lmZGVmIFZNUworCQlwcmludGYoIiVzPSIseHApOworCQlicmtjaGFyID0gJz0nOworI2Vsc2UK KwkJcHJpbnRmKCIlczoiLHhwKTsKKwkJYnJrY2hhciA9ICc6JzsKKyNlbmRpZiAvKiBWTVMgKi8K KwkgICAgfSBlbHNlIHsKKwkJcHJpbnRmKCIlcyAiLHhwKTsKKwkJYnJrY2hhciA9IFNQOworCSAg ICB9CisjaWZkZWYgQ0tfUkVDQUxMCisJICAgIGlmICh0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fTk9S KSkgbm9fcmVjYWxsID0gMTsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKwkgICAgY21rd2ZsZ3Mg PSB0YWJsZVt6XS5mbGdzOworI2lmZGVmIEdFTURPUworCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNl bmRpZiAvKiBHRU1ET1MgKi8KKwkgICAgYWRkYnVmKHhwKTsKKwkgICAgaWYgKGNtc3dpdGNoICYm IHRlc3QodGFibGVbel0uZmxncyxDTV9BUkcpKSB7CisJCWJwLS07CQkJLyogUmVwbGFjZSB0cmFp bGluZyBzcGFjZSB3aXRoIDogKi8KKyNpZmRlZiBWTVMKKwkJKmJwKysgPSAnPSc7CisjZWxzZQor CQkqYnArKyA9ICc6JzsKKyNlbmRpZiAvKiBWTVMgKi8KKwkJKmJwID0gTlVMOworCQlucCA9IGJw OworCQlzd2FyZyA9IDE7CisJICAgIH0KKwkgICAgaW53b3JkID0gMDsKKwkgICAgY21mbGdzID0g MDsKKwkgICAgZGVidWcoRjExMCwiY21rZXk6IGFkZGJ1ZiIsY21kYnVmLDApOworCSAgICByZXR1 cm4oeSk7CisKKwkgIGNhc2UgMzoJCQkvKiBVc2VyIHR5cGVkICI/IiAqLworCSAgICBpZiAoZikg ewkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworCQljaGFyICogcHA7 CisJCXpxID0gYXR4YnVmOwkJLyogZG8gdGhlIGNvbnZlcnNpb24gbm93LiAqLworCQlwcCA9IGF0 eGJ1ZjsKKwkJYXR4biA9IENNREJMOworCQlpZiAoKCpmKShhdG1idWYsJnpxLCZhdHhuKSA8IDAp IHJldHVybigtMik7CisJCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7CisJCSAgICBwcmludGYoIj9F dmFsdWF0ZWQga2V5d29yZCB0b28gbG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJ ICAgIH0KKwkgICAgeSA9IGxvb2t1cCh0YWJsZSxhdG1idWYsbiwmeik7IC8qIExvb2sgdXAgd2hh dCB3ZSBoYXZlIHNvIGZhci4gKi8KKwkgICAgaWYgKHkgPT0gLTEpIHsKKwkJLyoKKwkJICBTdHJp Y3RseSBzcGVha2luZyBpZiB0aGUgbWFpbiBrZXl3b3JkIHRhYmxlIHNlYXJjaCBmYWlscywKKwkJ ICB0aGVuIHdlIHNob3VsZCBsb29rIGluIHRoZSB0b2tlbiB0YWJsZSBpZiBvbmUgaXMgZ2l2ZW4u CisJCSAgQnV0IGluIHByYWN0aWNlLCB0b2tlbnMgYXJlIGFsc28gaW5jbHVkZWQgaW4gdGhlIG1h aW4KKwkJICBrZXl3b3JkIHRhYmxlLgorCQkqLworCQljbWZsZ3MgPSAtMjsKKwkJaWYgKChwbXNn ICYgMSkgJiYgIXF1aWV0KSB7CisJCSAgICBibGVlcChCUF9GQUlMKTsKKwkJICAgIHByaW50Zigi IE5vIGtleXdvcmRzIG1hdGNoXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkJcmV0dXJu KC0yKTsKKwkgICAgfQorI2lmbmRlZiBDT01NRU5UCisJICAgIC8qIFRoaXMgaXMgdG8gYWxsb3cg Py1oZWxwIHRvIHdvcmsgaW1tZWRpYXRlbHkgYWZ0ZXIgYSB0b2tlbiAqLworCSAgICAvKiB3aXRo b3V0IGhhdmluZyB0byB0eXBlIGFuIGludGVybWVkaWF0ZSBzcGFjZSAqLworCSAgICBpZiAodGwp IHsKKwkJZm9yIChpID0gMDsgaSA8IHRsOyBpKyspIC8qIENoZWNrIGZvciB0b2tlbiAqLworCQkg IGlmICh0b2tbaV0gPT0gKmF0bWJ1ZikgeyAvKiBHb3Qgb25lICovCisJCSAgICAgIGRlYnVnKEYw MDAsImNta2V5IHRva2VuOiIsYXRtYnVmLCphdG1idWYpOworCQkgICAgICB1bmd3b3JkKCk7CS8q IFB1dCBiYWNrIHRoZSBmb2xsb3dpbmcgd29yZCAqLworCQkgICAgICBjbWZsZ3MgPSAzOwkvKiBG b3JjZSBoZWxwIG5leHQgdGltZSBhcm91bmQgKi8KKwkJICAgICAgcmV0dXJuKC01KTsJLyogU3Bl Y2lhbCByZXR1cm4gY29kZSBmb3IgdG9rZW4gKi8KKwkJICB9CisJICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKwkgICAgaWYgKCp4aGxwID09IE5VTCkKKwkgICAgICBwcmludGYoIiBPbmUg b2YgdGhlIGZvbGxvd2luZzpcbiIpOworCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCIgJXMsIG9u ZSBvZiB0aGUgZm9sbG93aW5nOlxuIix4aGxwKTsKKwkgICAgeworCQlpbnQgeDsKKwkJeCA9IHBt c2cgJiAoMnw0KTsJLyogU2VlIGt3ZGhlbHAoKSBjb21tZW50cyAqLworCQlpZiAoYXRtYnVmWzBd KQkJLyogSWYgbm90IGF0IGJlZ2lubmluZyBvZiBmaWVsZCAqLworCQkgIHggfD0gMTsJCS8qIGFs c28gc2hvdyBpbnZpc2libGVzICovCisJCWt3ZGhlbHAodGFibGUsbixhdG1idWYsIiIsIiIsMSx4 KTsKKwkgICAgfQorI2lmbmRlZiBOT1NQTAorCSAgICBpZiAoIWhhdmV0b2tlbikgeworCQlleHRl cm4gaW50IHRvcGNtZDsKKwkJaWYgKHRsID4gMCAmJiB0b3BjbWQgIT0gWFhITFApIC8qIFRoaXMg aXMgYmFkLi4uICovCisJCSAgcHJpbnRmKCJvciBhIG1hY3JvIG5hbWUgKFwiZG8gP1wiIGZvciBh IGxpc3QpICIpOworCSAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKwkgICAgaWYgKCphdG1idWYg PT0gTlVMICYmICFoYXZldG9rZW4pIHsKKwkJaWYgKHRsID09IDEpCisJCSAgcHJpbnRmKCJvciB0 aGUgdG9rZW4gJWNcbiIsKnRvayk7CisJCWVsc2UgaWYgKHRsID4gMSkKKwkJICBwcmludGYoIm9y IG9uZSBvZiB0aGUgdG9rZW5zOiAlc1xuIixja3NwcmVhZCh0b2spKTsKKwkgICAgfQorCSAgICBw cmludGYoIiVzJXMiLCBjbXByb20sIGNtZGJ1Zik7CisJICAgIGZmbHVzaChzdGRvdXQpOworCSAg ICBicmVhazsKKworCSAgZGVmYXVsdDoKKwkgICAgcHJpbnRmKCJcbiVkIC0gVW5leHBlY3RlZCBy ZXR1cm4gY29kZSBmcm9tIGd0d29yZFxuIix6eik7CisJICAgIHJldHVybihjbWZsZ3MgPSAtMik7 CisJfQorCXp6ID0gKHBtc2cgJiA4KSA/IGd0d29yZCg0KSA6IGd0d29yZCgocG1zZyA9PSA0KSA/ IDEgOiAwKTsKKwlkZWJ1ZyhGMTExLCJjbWtleSBndHdvcmQgenoiLGF0bWJ1Zix6eik7CisgICAg fQorfQorCitpbnQKK2Noa3Rvayh0bGlzdCkgY2hhciAqdGxpc3Q7IHsKKyAgICBjaGFyICpwOwor ICAgIHAgPSB0bGlzdDsKKyAgICB3aGlsZSAoKnAgIT0gTlVMICYmICpwICE9ICphdG1idWYpIHAr KzsKKyAgICByZXR1cm4oKCpwKSA/IChpbnQpICpwIDogMCk7Cit9CisKKy8qIFJvdXRpbmVzIGZv ciBwYXJzaW5nIGFuZCBjb252ZXJ0aW5nIGRhdGVzIGFuZCB0aW1lcyAqLworCisjZGVmaW5lIGlz ZGF0ZXNlcChjKSAoY2tzdHJjaHIoIiAtLy5fIixjKSkKKworI2RlZmluZSBDTURBVEVCVUYgMTAy NAorY2hhciBjbWRhdGVidWZbQ01EQVRFQlVGKzRdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGNo YXIgKiBjbWRhdGVicCA9IGNtZGF0ZWJ1ZjsKK2NoYXIgKiBjbWRhdGVtc2cgPSBOVUxMOworCitz dGF0aWMgc3RydWN0IGtleXRhYiB0aW1ldW5pdHNbXSA9IHsKKyAgICB7ICJkYXlzIiwgICBUVV9E QVlTLCAgIDAgfSwKKyAgICB7ICJtb250aHMiLCBUVV9NT05USFMsIDAgfSwKKyAgICB7ICJ3ZWVr cyIsICBUVV9XRUVLUywgIDAgfSwKKyAgICB7ICJ3a3MiLCAgICBUVV9XRUVLUywgIDAgfSwKKyAg ICB7ICJ5ZWFycyIsICBUVV9ZRUFSUywgIDAgfSwKKyAgICB7ICJ5cnMiLCAgICBUVV9ZRUFSUywg IDAgfQorfTsKK3N0YXRpYyBpbnQgbnVuaXRzID0gKHNpemVvZih0aW1ldW5pdHMpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKKworI2RlZmluZSBTWU1fTk9XICAwCisjZGVmaW5lIFNZTV9UT0RB IDEKKyNkZWZpbmUgU1lNX1RPTU8gMgorI2RlZmluZSBTWU1fWUVTVCAzCisKK3N0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHN5bWRheXRhYltdID0geworICAgIHsgIm5vdyIsICAgICAgIFNZTV9OT1csICAw IH0sCisgICAgeyAidG9kYXkiLCAgICAgU1lNX1RPREEsIDAgfSwKKyAgICB7ICJ0b21vcnJvdyIs ICBTWU1fVE9NTywgMCB9LAorICAgIHsgInllc3RlcmRheSIsIFNZTV9ZRVNULCAwIH0KK307Citz dGF0aWMgaW50IG5zeW1kYXlzID0gKHNpemVvZihzeW1kYXl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZGF5c29md2Vla1tdID0geworICAgIHsg IkZyaWRheSIsICAgIDUsIDAgfSwKKyAgICB7ICJNb25kYXkiLCAgICAxLCAwIH0sCisgICAgeyAi U2F0dXJkYXkiLCAgNiwgMCB9LAorICAgIHsgIlN1bmRheSIsICAgIDAsIDAgfSwKKyAgICB7ICJU aHVyc2RheSIsICA0LCAwIH0sCisgICAgeyAiVHVlc2RheSIsICAgMiwgMCB9LAorICAgIHsgIldl ZG5lc2RheSIsIDMsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgdXNhdHpbXSA9IHsJ LyogUkZDIDgyMiB0aW1lem9uZXMgICovCisgICAgeyAiY2R0IiwgIDUsIDAgfSwJCQkvKiBWYWx1 ZXMgYXJlIEdNVCBvZmZzZXRzICovCisgICAgeyAiY3N0IiwgIDYsIDAgfSwKKyAgICB7ICJlZHQi LCAgNCwgMCB9LAorICAgIHsgImVzdCIsICA1LCAwIH0sCisgICAgeyAiZ210IiwgIDAsIDAgfSwK KyAgICB7ICJtZHQiLCAgNiwgMCB9LAorICAgIHsgIm1zdCIsICA3LCAwIH0sCisgICAgeyAicGR0 IiwgIDcsIDAgfSwKKyAgICB7ICJwc3QiLCAgOCwgMCB9LAorICAgIHsgInV0YyIsICAwLCAwIH0s CisgICAgeyAienVsdSIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnVzYXR6ID0gKHNpemVvZih1 c2F0eikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisKKy8qICBDIE0gQyBWIFQgRCBBIFQg RSAgLS0gIENvbnZlcnRzIGZyZWUtZm9ybSBkYXRlIHRvIHN0YW5kYXJkIGZvcm0uICAqLworCisv KgorICAgQ2FsbCB3aXRoCisgICAgIHMgPSBwb2ludGVyIHRvIGZyZWUtZm9ybWF0IGRhdGUsIHRp bWUsIG9yIGRhdGUgYW5kIHRpbWUuCisgICAgIHQgPSAwOiByZXR1cm4gdGltZSBvbmx5IGlmIHRp bWUgd2FzIGdpdmVuIGluIHMuCisgICAgIHQgPSAxOiBhbHdheXMgcmV0dXJuIHRpbWUgKDAwOjAw OjAwIGlmIG5vIHRpbWUgZ2l2ZW4gaW4gcykuCisgICAgIHQgPSAyOiBhbGxvdyB0aW1lIHRvIGJl ID4gMjQ6MDA6MDAuCisgICBSZXR1cm5zOgorICAgICBOVUxMIG9uIGZhaWx1cmU7CisgICAgIFBv aW50ZXIgdG8gInl5eXltbWRkIGhoOm1tOnNzIiAobG9jYWwgZGF0ZS10aW1lKSBvbiBzdWNjZXNz LgorKi8KKworLyoKKyAgQmVmb3JlIGZpbmFsIHJlbGVhc2UgdGhlIGZvbGxvd2luZyBsb25nIGxp bmVzIHNob3VsZCBiZSB3cmFwcGVkLgorICBVbnRpbCB0aGVuIHdlIGxlYXZlIHRoZW0gbG9uZyBz aW5jZSB3cmFwcGluZyB0aGVtIHdyZWNrcyBFTUFDUydzCisgIEMgaW5kZW50YXRpb24uCisqLwor CisvKiBhc2N0aW1lIHBhdHRlcm4gKi8KK3N0YXRpYyBjaGFyICogYXRwMSA9ICJbQS1aXVthLXpd W2Etel0gW0EtWl1bYS16XVthLXpdIFsgMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XTpb MC05XVswLTldIFswLTldWzAtOV1bMC05XVswLTldIjsKKworLyogYXNjdGltZSBwYXR0ZXJuIHdp dGggdGltZXpvbmUgKi8KK3N0YXRpYyBjaGFyICogYXRwMiA9ICJbQS1aXVthLXpdW2Etel0gW0Et Wl1bYS16XVthLXpdIFsgMC05XVswLTldIFswLTldWzAtOV06WzAtOV1bMC05XTpbMC05XVswLTld IFtBLVpdW0EtWl1bQS1aXSBbMC05XVswLTldWzAtOV1bMC05XSI7CisKKyNkZWZpbmUgREFURUJV RkxFTiAxMjcKKyNkZWZpbmUgWVlZWU1NREQgMTIKKworI2RlZmluZSBpc2xlYXAoeSkgKCgoeSkg JSA0ID09IDAgJiYgKHkpICUgMTAwICE9IDApIHx8ICh5KSAlIDQwMCA9PSAwKQorc3RhdGljIGlu dCBtZGF5c1sxM10gPSB7IDAsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMx LCAzMCwgMzEgfTsKKworI2RlZmluZSBORUVEX0RBWVMgMQorI2RlZmluZSBORUVEX0hSUyAgMgor I2RlZmluZSBORUVEX01JTlMgMworI2RlZmluZSBORUVEX1NFQ1MgNAorI2RlZmluZSBORUVEX0ZS QUMgNQorCisjZGVmaW5lIERFTFRBQlVGIDI1Ngorc3RhdGljIGNoYXIgZGVsdGFidWZbREVMVEFC VUZdOworc3RhdGljIGNoYXIgKiBkZWx0YWJwID0gZGVsdGFidWY7CisKK2NoYXIgKgorY21kZWx0 YSh5eSwgbW8sIGRkLCBoaCwgbW0sIHNzLCBzaWduLCBkeXksIGRtbywgZGRkLCBkaGgsIGRtbSwg ZHNzKQorICAgIGludCB5eSwgbW8sIGRkLCBoaCwgbW0sIHNzLCBzaWduLCBkeXksIGRtbywgZGRk LCBkaGgsIGRtbSwgZHNzOworLyogY21kZWx0YSAqLyB7CisgICAgaW50IHp5eSwgem1vLCB6ZGQs IHpoaCwgem1tLCB6c3M7CisgICAgbG9uZyB0MSwgdDIsIHQzLCB0NDsKKyAgICBsb25nIGQxID0g MCwgZDIsIGQzOworICAgIGNoYXIgZGF0ZWJ1ZltEQVRFQlVGTEVOKzFdOworCisjaWZkZWYgREVC VUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEwMSwiY21kZWx0YSB5eSIsIiIseXkpOwor CWRlYnVnKEYxMDEsImNtZGVsdGEgbW8iLCIiLG1vKTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIGRk IiwiIixkZCk7CisJZGVidWcoRjEwMSwiY21kZWx0YSBoaCIsIiIsaGgpOworCWRlYnVnKEYxMDEs ImNtZGVsdGEgbW0iLCIiLG1tKTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIHNzIiwiIixzcyk7CisJ ZGVidWcoRjEwMSwiY21kZWx0YSBzaWduIiwiIixzaWduKTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRh IGR5eSIsIiIsZHl5KTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIGRtbyIsIiIsZG1vKTsKKwlkZWJ1 ZyhGMTAxLCJjbWRlbHRhIGRkZCIsIiIsZGRkKTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIGRoaCIs IiIsZGhoKTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIGRtbSIsIiIsZG1tKTsKKwlkZWJ1ZyhGMTAx LCJjbWRlbHRhIGRzcyIsIiIsZHNzKTsKKyAgICB9CisjZW5kaWYgLyogREVCTE9HICovCisKKyAg ICBpZiAoeXkgPCAwIHx8IHl5ID4gOTk5OSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSB5 ZWFyIG91dCBvZiByYW5nZSIpOworCWRlYnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7 CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAobW8gPCAxIHx8IG1vID4gMTIpIHsKKwlt YWtlc3RyKCZjbWRhdGVtc2csIkJhc2UgbW9udGggb3V0IG9mIHJhbmdlIik7CisJZGVidWcoRjEx MSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlm IChkZCA8IDEgfHwgZGQgPiBtZGF5c1ttb10pIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIkJhc2Ug ZGF5IG91dCBvZiByYW5nZSIpOworCWRlYnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7 CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoaGggPCAwIHx8IGhoID4gMjMpIHsKKwlt YWtlc3RyKCZjbWRhdGVtc2csIkJhc2UgaG91ciBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1ZyhGMTEx LCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYg KG1tIDwgMCB8fCBtbSA+IDU5KSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJCYXNlIG1pbnV0ZSBv dXQgb2YgcmFuZ2UiKTsKKwlkZWJ1ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOworCXJl dHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKHNzIDwgMCB8fCBzcyA+IDYwKSB7CisJbWFrZXN0 cigmY21kYXRlbXNnLCJCYXNlIHNlY29uZCBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1ZyhGMTExLCJj bWRlbHRhIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgc2lnbiA9 IChzaWduIDwgMCkgPyAtMSA6IDE7CisgICAgaWYgKGRtbyAhPSAwKSB7CisgICAgICAgIGlmIChz aWduID4gMCkgeworICAgICAgICAgICAgbW8gKz0gKHNpZ24gKiBkbW8pOworICAgICAgICAgICAg aWYgKG1vID4gMTIpIHsKKyAgICAgICAgICAgICAgICB5eSArPSBtbyAvIDEyOworICAgICAgICAg ICAgICAgIG1vID0gbW8gJSAxMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChz aWduIDwgMCkgeworICAgICAgICAgICAgd2hpbGUgKGRtbyA+IDEyKSB7CisgICAgICAgICAgICAg ICAgeXktLTsKKyAgICAgICAgICAgICAgICBkbW8gLT0gMTI7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoZG1vIDwgbW8pIHsKKyAgICAgICAgICAgICAgICBtbyAtPSBkbW87CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHl5LS07CisgICAgICAgICAgICAgICAg bW8gPSAxMiAtIChkbW8gLSBtbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg ICAgaWYgKGR5eSAhPSAwKSB7CisJeXkgKz0gKHNpZ24gKiBkeXkpOworCWlmICh5eSA+IDk5OTkg fHwgeXkgPCAwKSB7CisJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiUmVzdWx0IHllYXIgb3V0IG9m IHJhbmdlIik7CisJICAgIGRlYnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7CisJICAg IHJldHVybihOVUxMKTsKKwl9CisgICAgfQorICAgIHNwcmludGYoZGF0ZWJ1ZiwiJTA0ZCUwMmQl MDJkICUwMmQ6JTAyZDolMDJkIix5eSxtbyxkZCxoaCxtbSxzcyk7CisgICAgZDEgPSBtamQoZGF0 ZWJ1Zik7CisgICAgZGVidWcoRjExMSwiY21kZWx0YSBtamQiLGRhdGVidWYsZDEpOyAgICAKKwor ICAgIHQxID0gaGggKiAzNjAwICsgbW0gKiA2MCArIHNzOwkvKiBCYXNlIHRpbWUgdG8gc2VjcyBz aW5jZSBtaWRuaWdodCAqLworICAgIHQyID0gZGhoICogMzYwMCArIGRtbSAqIDYwICsgZHNzOwkv KiBEZWx0YSB0aW1lLCBkaXR0byAqLworICAgIHQzID0gdDEgKyAoc2lnbiAqIHQyKTsJCS8qIEdl dCBzdW0gKG9yIGRpZmZlcmVuY2UpICovCisgICAgCisgICAgZDIgPSAoc2lnbiAqIGRkZCk7CQkJ LyogRGVsdGEgZGF5cyAqLworICAgIGQyICs9IHQzIC8gODY0MDBMOworCisgICAgdDQgPSB0MyAl IDg2NDAwTDsJCQkvKiBGcmFjdGlvbmFsIHBhcnQgb2YgZGF5ICovCisgICAgaWYgKHQ0IDwgMCkg ewkJCS8qIElmIG5lZ2F0aXZlICovCisJZDItLTsJCQkJLyogb25lIGxlc3MgZGVsdGEgZGF5ICov CisJdDQgKz0gODY0MDBMOwkJCS8qIGdldCBwb3NpdGl2ZSBzZWNvbmRzICovCisgICAgfQorICAg IGhoID0gKGludCkgKHQ0IC8gMzYwMEwpOworICAgIG1tID0gKGludCkgKHQ0ICUgMzYwMEwpIC8g NjA7CisgICAgc3MgPSAoaW50KSAodDQgJSAzNjAwTCkgJSA2MDsKKworICAgIHNwcmludGYoZGF0 ZWJ1ZiwiJXMgJTAyZDolMDJkOiUwMmQiLCBtamQyZGF0ZShkMStkMiksaGgsbW0sc3MpOworICAg IHsKKwlpbnQgbGVuLCBrLCBuOworCWNoYXIgKiBwOworCWxlbiA9IHN0cmxlbihkYXRlYnVmKTsK KwlrID0gZGVsdGFicCAtIChjaGFyICopZGVsdGFidWY7CS8qIFNwYWNlIHVzZWQgKi8KKwluID0g REVMVEFCVUYgLSBrIC0gMTsJCS8qIFNwYWNlIGxlZnQgKi8KKwlpZiAobiA8IGxlbikgewkJCS8q IE5vdCBlbm91Z2g/ICovCisJICAgIGRlbHRhYnAgPSBkZWx0YWJ1ZjsJCS8qIFdyYXAgYXJvdW5k ICovCisJICAgIG4gPSBERUxUQUJVRjsKKwl9CisJY2tzdHJuY3B5KGRlbHRhYnAsZGF0ZWJ1Zixu KTsKKwlwID0gZGVsdGFicDsKKwlkZWx0YWJwICs9IGxlbiArIDE7CisJcmV0dXJuKHApOworICAg IH0KK30KKworCisvKiBDb252ZXJ0IERlbHRhIFRpbWUgdG8gU2Vjb25kcyAqLworCitpbnQKK2Rl bHRhMnNlYyhzLHJlc3VsdCkgY2hhciAqIHM7IGxvbmcgKiByZXN1bHQ7IHsKKyAgICBsb25nIGRk YXlzID0gMEwsIHp6OworICAgIGludCBkc2lnbiA9IDEsIGRob3VycyA9IDAsIGRtaW5zID0gMCwg ZHNlY3MgPSAwLCB1bml0czsKKyAgICBpbnQgc3RhdGUgPSBORUVEX0RBWVM7CisgICAgY2hhciAq cCwgKnAyLCAqcDMsIGMgPSAwOworICAgIGNoYXIgYnVmWzY0XTsKKworICAgIGlmICghcykgcyA9 ICIiOworICAgIGlmICghKnMpCisgICAgICByZXR1cm4oLTEpOworICAgIGlmICgoaW50KXN0cmxl bihzKSA+IDYzKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBja3N0cm5jcHkoYnVmLHMsNjQpOwor ICAgIHAgPSBidWY7CisKKyAgICBpZiAoKnAgIT0gJysnICYmICpwICE9ICctJykKKyAgICAgIHJl dHVybigtMSk7CisKKyAgICBpZiAoKnArKyA9PSAnLScpCisgICAgICBkc2lnbiA9IC0xOworICAg IHdoaWxlICgqcCA9PSBTUCkJCQkvKiBTa2lwIGludGVydmVuaW5nIHNwYWNlcyAqLworICAgICAg cCsrOworCisgICAgd2hpbGUgKHN0YXRlKSB7CQkJLyogRlNBIHRvIHBhcnNlIGRlbHRhIHRpbWUg Ki8KKwlpZiAoc3RhdGUgPCAwIHx8ICFpc2RpZ2l0KCpwKSkKKwkgIHJldHVybigtMSk7CisJcDIg PSBwOwkJCQkvKiBHZXQgbmV4dCBudW1lcmljIGZpZWxkICovCisJd2hpbGUgKGlzZGlnaXQoKnAy KSkKKwkgIHAyKys7CisJYyA9ICpwMjsJCQkvKiBBbmQgYnJlYWsgY2hhcmFjdGVyICovCisJKnAy ID0gTlVMOwkJCS8qIFRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCisJc3dpdGNoIChzdGF0ZSkgewkJ LyogSW50ZXJwcmV0IGFjY29yZGluZyB0byBzdGF0ZSAqLworCSAgY2FzZSBORUVEX0RBWVM6CQkv KiBJbml0aWFsICovCisJICAgIGlmICgoYyA9PSAnLScpIHx8CQkvKiBWTVMgZm9ybWF0ICovCisJ CSgoYyA9PSAnZCcgfHwgYyA9PSAnRCcpCisJCSAmJiAhaXNhbHBoYSgqKHAyKzEpKSkpIHsgLyog RGF5cyAqLworCQlkZGF5cyA9IGF0b2wocCk7CisJCWlmICghKihwMisxKSkJCQkKKwkJICBzdGF0 ZSA9IDA7CisJCWVsc2UJCQkvKiBpZiBhbnl0aGluZyBpcyBsZWZ0ICovCisJCSAgc3RhdGUgPSBO RUVEX0hSUzsJLyogbm93IHdlIHdhbnQgaG91cnMuICovCisJICAgIH0gZWxzZSBpZiAoYyA9PSAn OicpIHsJLyogZGVsaW1pdGVyIGlzIGNvbG9uICovCisJCWRob3VycyA9IGF0b2kocCk7CS8qIHNv IGl0J3MgaG91cnMgKi8KKwkJc3RhdGUgPSBORUVEX01JTlM7CS8qIG5vdyB3ZSB3YW50IG1pbnV0 ZXMgKi8KKwkgICAgfSBlbHNlIGlmICghYykgewkJLyogZW5kIG9mIHN0cmluZyAqLworCQlkaG91 cnMgPSBhdG9pKHApOwkvKiBpdCdzIHN0aWxsIGhvdXJzICovCisJCXN0YXRlID0gMDsJCS8qIGFu ZCB3ZSdyZSBkb25lICovCisJICAgIH0gZWxzZSBpZiAoaXNhbHBoYShjKSB8fCBjID09IFNQKSB7 CisJCWlmIChjID09IFNQKSB7CQkvKiBJdCdzIGEga2V5d29yZD8gKi8KKwkJICAgIHAyKys7CQkv KiBTa2lwIHNwYWNlcyAqLworCQkgICAgd2hpbGUgKCpwMiA9PSBTUCkKKwkJICAgICAgcDIrKzsK KwkJfSBlbHNlIHsJCS8qIG9yIHJlcGxhY2UgZmlyc3QgbGV0dGVyICovCisJCSAgICAqcDIgPSBj OworCQl9CisJCXAzID0gcDI7CQkvKiBwMiBwb2ludHMgdG8gYmVnaW5uaW5nIG9mIGtleXdvcmQg Ki8KKwkJd2hpbGUgKGlzYWxwaGEoKnAzKSkJLyogRmluZCBlbmQgb2Yga2V5d29yZCAqLworCQkg IHAzKys7CisJCWMgPSAqcDM7CQkvKiBOVUwgaXQgb3V0IHNvIHdlIGNhbiBsb29rIGl0IHVwICov CisJCWlmICgqcDMpCQkvKiBwMyBwb2ludHMgdG8ga2V5d29yZCB0ZXJtaW5hdG9yICovCisJCSAg KnAzID0gTlVMOworCQlpZiAoKHVuaXRzID0gbG9va3VwKHRpbWV1bml0cyxwMixudW5pdHMsTlVM TCkpIDwgMCkKKwkJICByZXR1cm4oLTEpOworCQkqcDIgPSBOVUw7CQkvKiBSZS10ZXJtaW5hdGUg dGhlIG51bWJlciAqLworCQkqcDMgPSBjOworCQl3aGlsZSAoKnAzID09IFNQKQkvKiBQb2ludCBh dCBmaWVsZCBhZnRlciB1bml0cyAqLworCQkgIHAzKys7CisJCXAyID0gcDM7CisJCXN3aXRjaCAo dW5pdHMpIHsKKwkJICBjYXNlIFRVX0RBWVM6CisJCSAgICBkZGF5cyA9IGF0b2wocCk7CisJCSAg ICBicmVhazsKKwkJICBkZWZhdWx0OgorCQkgICAgcmV0dXJuKC0xKTsKKwkJfQorCQlpZiAoKnAy KSB7CisJCSAgICBzdGF0ZSA9IE5FRURfSFJTOworCQkgICAgcDItLTsKKwkJfSBlbHNlCisJCSAg c3RhdGUgPSAwOworCSAgICB9IGVsc2UgewkJCS8qIEFueXRoaW5nIGVsc2UgKi8KKwkJc3RhdGUg PSAtMTsJCS8qIGlzIGFuIGVycm9yICovCisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIE5F RURfSFJTOgkJLyogTG9va2luZyBmb3IgaG91cnMgKi8KKwkgICAgaWYgKGMgPT0gJzonKSB7CisJ CWRob3VycyA9IGF0b2kocCk7CisJCXN0YXRlID0gTkVFRF9NSU5TOworCSAgICB9IGVsc2UgaWYg KCFjKSB7CisJCWRob3VycyA9IGF0b2kocCk7CisJCXN0YXRlID0gMDsKKwkgICAgfSBlbHNlIHsK KwkJc3RhdGUgPSAtMTsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgTkVFRF9NSU5TOgkJ LyogTG9va2luZyBmb3IgbWludXRlcyAqLworCSAgICBpZiAoYyA9PSAnOicpIHsKKwkJZG1pbnMg PSBhdG9pKHApOworCQlzdGF0ZSA9IE5FRURfU0VDUzsKKwkgICAgfSBlbHNlIGlmICghYykgewor CQlkbWlucyA9IGF0b2kocCk7CisJCXN0YXRlID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJc3RhdGUg PSAtMTsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgTkVFRF9TRUNTOgkJLyogTG9va2lu ZyBmb3Igc2Vjb25kcyAqLworCSAgICBpZiAoYyA9PSAnLicpIHsKKwkJZHNlY3MgPSBhdG9pKHAp OworCQlzdGF0ZSA9IE5FRURfRlJBQzsKKwkgICAgfSBlbHNlIGlmICghYykgeworCQlkc2VjcyA9 IGF0b2kocCk7CisJCXN0YXRlID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJc3RhdGUgPSAtMTsKKwkg ICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgTkVFRF9GUkFDOgkJLyogRnJhY3Rpb24gb2Ygc2Vj b25kICovCisJICAgIGlmICghYyAmJiByZGlnaXRzKHApKSB7CisJCWlmICgqcCA+ICc0JykKKwkJ ICBkc2VjcysrOworCQlzdGF0ZSA9IDA7CisJICAgIH0gZWxzZSB7CisJCXN0YXRlID0gLTE7CisJ ICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWlmIChjKQkJCQkvKiBuZXh0IGZpZWxkIGlmIGFueSAq LworCSAgcCA9IHAyICsgMTsKKyAgICB9CisgICAgaWYgKHN0YXRlIDwgMCkKKyAgICAgIHJldHVy bigtMSk7CisKKyAgICAvKiBpZiBkYXlzID4gMjQ4NTQgYW5kIHNpemVvZihsb25nKSA9PSAzMiB3 ZSBvdmVyZmxvdyAqLworCisgICAgenogPSBkZGF5cyAqIDg2NDAwTDsKKyAgICBpZiAoenogPCAw TCkJCQkvKiBUaGlzIGNhdGNoZXMgaXQgKi8KKyAgICAgIHJldHVybigtMik7CisgICAgenogKz0g ZGhvdXJzICogMzYwMEwgKyBkbWlucyAqIDYwTCArIGRzZWNzOworICAgIHp6ICo9IGRzaWduOwor ICAgICpyZXN1bHQgPSB6ejsKKyAgICByZXR1cm4oMCk7Cit9CisKKworY2hhciAqCitjbWN2dGRh dGUocyx0KSBjaGFyICogczsgaW50IHQ7IHsKKyAgICBpbnQgeCwgaSwgaiwgaywgaGgsIG1tLCBz cywgZmYsIHBtZmxhZyA9IDAsIG5vZGF0ZSA9IDAsIGxlbiwgZG93OworICAgIGludCB1bml0cywg aXNnbXQgPSAwLCBnbXRzaWduID0gMCwgZCA9IDAsIHN0YXRlID0gMCwgbmRheTsKKyAgICBpbnQg a24gPSAwLCBmdFs4XSwgaXNsZXR0ZXIgPSAwLCBmMmxlbiA9IDA7CisKKyAgICBpbnQgemhoID0g MDsJCQkvKiBUaW1lem9uZSBhZGp1c3RtZW50cyAqLworICAgIGludCB6bW0gPSAwOworICAgIGlu dCB6ZGQgPSAwOworCisgICAgaW50IGRzaWduID0gMTsJCQkvKiBEZWx0YS10aW1lIGFkanVzdG1l bnRzICovCisgICAgaW50IGRkYXlzID0gMDsKKyAgICBpbnQgZG1vbnRocyA9IDA7CisgICAgaW50 IGR5ZWFycyA9IDA7CisgICAgaW50IGRob3VycyA9IDA7CisgICAgaW50IGRtaW5zID0gMDsKKyAg ICBpbnQgZHNlY3MgPSAwOworICAgIGludCBoYXZlZGVsdGEgPSAwOworCisgICAgY2hhciAqIGZs ZFs4XSwgKiBwID0gIiIsICogcDIsICogcDM7IC8qIEFzc29ydGVkIGJ1ZmZlcnMgYW5kIHBvaW50 ZXJzICAqLworICAgIGNoYXIgKiBzMiwgKiBzMzsKKyAgICBjaGFyICogeWVhciA9IE5VTEwsICog bW9udGggPSBOVUxMLCAqIGRheSA9IE5VTEw7CisgICAgY2hhciAqIGhvdXIgPSAiMDAiLCAqIG1p biA9ICIwMCIsICogc2VjID0gIjAwIjsKKyAgICBjaGFyIGRhdGVzZXAgPSAwOworICAgIGNoYXIg dG1wYnVmWzhdOworICAgIGNoYXIgeGJ1ZltEQVRFQlVGTEVOKzFdOworICAgIGNoYXIgeWJ1ZltE QVRFQlVGTEVOKzFdOworICAgIGNoYXIgemJ1ZltEQVRFQlVGTEVOKzFdOworICAgIGNoYXIgeXl5 eW1tZGRbWVlZWU1NRERdOworICAgIGNoYXIgZGJ1ZlsyNl07CisgICAgY2hhciBkYXlidWZbM107 CisgICAgY2hhciBtb25idWZbM107CisgICAgY2hhciB5ZWFyYnVmWzVdOworICAgIGNoYXIgdGlt YnVmWzE2XSwgKnRiLCBjYzsKKyAgICBjaGFyICogZHAgPSBOVUxMOwkJCS8qIFJlc3VsdCBwb2lu dGVyICovCisKKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICB0bXBidWZbMF0gPSBOVUw7CisKKyAg ICB3aGlsZSAoKnMgPT0gU1ApIHMrKzsJCS8qIEdvYmJsZSBhbnkgbGVhZGluZyBibGFua3MgKi8K KyAgICBpZiAoaXNhbHBoYSgqcykpCQkJLyogUmVtZW1iZXIgaWYgMXN0IGNoYXIgaXMgYSBsZXR0 ZXIgKi8KKyAgICAgIGlzbGV0dGVyID0gMTsKKworICAgIGxlbiA9IHN0cmxlbihzKTsKKyAgICBk ZWJ1ZyhGMTEwLCJjbWN2dGRhdGUiLHMsbGVuKTsKKyAgICBpZiAobGVuID09IDApIHsJCQkvKiBO byBhcmcgLSByZXR1cm4gY3VycmVudCBkYXRlLXRpbWUgKi8KKwlkcCA9IGNrZGF0ZSgpOworCWdv dG8geGN2dGRhdGU7CisgICAgfQorICAgIGlmIChsZW4gPiBEQVRFQlVGTEVOKSB7CQkvKiBDaGVj ayBsZW5ndGggb2YgYXJnICovCisJbWFrZXN0cigmY21kYXRlbXNnLCJEYXRlLXRpbWUgc3RyaW5n IHRvbyBsb25nIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJl dHVybihOVUxMKTsKKyAgICB9CisgICAgaGggPSAwOwkJCQkvKiBJbml0IHRpbWUgdG8gMDA6MDA6 MDAuMCAqLworICAgIG1tID0gMDsKKyAgICBzcyA9IDA7CisgICAgZmYgPSAwOworICAgIHp0aW1l KCZwKTsKKyAgICBpZiAoIXApCisgICAgICBwICA9ICIiOworICAgIGlmICgqcCkgewkJCQkvKiBJ bml0IHRpbWUgdG8gY3VycmVudCB0aW1lICovCisJeCA9IGNrc3RybmNweShkYnVmLHAsMjYpOwor CWlmICh4ID4gMTcpIHsKKwkgICAgaGggPSBhdG9pKCZkYnVmWzExXSk7CisJICAgIG1tID0gYXRv aSgmZGJ1ZlsxNF0pOworCSAgICBzcyA9IGF0b2koJmRidWZbMTddKTsKKwl9CisgICAgfQorICAg IGNrc3RybmNweSh5eXl5bW1kZCx6em5kYXRlKCksWVlZWU1NREQpOyAvKiBJbml0IGRhdGUgdG8g Y3VycmVudCBkYXRlICovCisgICAgY2tzdHJuY3B5KHllYXJidWYseXl5eW1tZGQsNSk7CisgICAg Y2tzdHJuY3B5KG1vbmJ1ZiwmeXl5eW1tZGRbNF0sMyk7CisgICAgY2tzdHJuY3B5KGRheWJ1Ziwm eXl5eW1tZGRbNl0sMyk7CisgICAgeWVhciA9IHllYXJidWY7CisgICAgbW9udGggPSBtb25idWY7 CisgICAgZGF5ID0gZGF5YnVmOworICAgIG5kYXkgPSBhdG9pKGRheWJ1Zik7CisgICAgY2tzdHJu Y3B5KHhidWYscyxEQVRFQlVGTEVOKTsJLyogTWFrZSBhIGxvY2FsIGNvcHkgd2UgY2FuIHBva2Ug Ki8KKyAgICBzID0geGJ1ZjsJCQkJLyogUG9pbnQgdG8gaXQgKi8KKyAgICBzW2xlbl0gPSBOVUw7 CisgICAgaWYgKHNbMF0gPT0gJzonKSB7CisJcCA9IHM7CisJZ290byBkb3RpbWU7CisgICAgfQor ICAgIC8qIFNwZWNpYWwgcHJlc2V0IGZvcm1hdHMuLi4gKi8KKworICAgIGlmIChsZW4gPj0gMTQp IHsJCQkvKiBGVFAgTURUTSBhbGwtbnVtZXJpYyBkYXRlICovCisJY2hhciBjOworCWMgPSBzWzE0 XTsJCQkvKiBlLmcuIDE5OTgwNjE1MTAwMDQ1LjAxNCAqLworCXNbMTRdID0gTlVMOworCXggPSBy ZGlnaXRzKHMpOworCXNbMTRdID0gYzsKKwlpZiAoeCkgeworCSAgICBja3N0cm5jcHkoeXl5eW1t ZGQscyw4KzEpOworCSAgICB5ZWFyID0gTlVMTDsKKwkgICAgcCA9ICZzWzhdOworCSAgICBnb3Rv IGRvdGltZTsKKwl9CisgICAgfQorICAgIHggPSAwOwkJCQkvKiBCZWNvbWVzID4gMCBmb3IgYXNj dGltZSBmb3JtYXQgKi8KKyAgICBpZiAoaXNhbHBoYShzWzBdKSkgeworCWlmIChsZW4gPT0gMjQp IHsJCS8qIEFzY3RpbWUgZm9ybWF0PyAqLworCSAgICAvKiBTYXQgSnVsIDE0IDE1OjU3OjMyIDIw MDEgKi8KKwkgICAgeCA9IGNrbWF0Y2goYXRwMSxzLDAsMCk7CisJICAgIGRlYnVnKEYxMTEsImNt Y3Z0ZGF0ZSBhc2N0aW1lIixzLHgpOworCX0gZWxzZSBpZiAobGVuID09IDI4KSB7CQkvKiBPciBB c2N0aW1lIHBsdXMgdGltZXpvbmU/ICovCisJICAgIC8qIFNhdCBKdWwgMTQgMTU6MTU6MzkgRURU IDIwMDEgKi8KKwkgICAgeCA9IGNrbWF0Y2goYXRwMixzLDAsMCk7CisJICAgIGRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSBhc2N0aW1lK3RpbWV6b25lIixzLHgpOworCX0KKyAgICB9CisgICAgaWYgKHgg PiAwKSB7CQkJLyogQXNjdGltZSBmb3JtYXQgKi8KKyAgICAgICAgaW50IHh4OworICAgICAgICBz dHJuY3B5KHllYXJidWYscyArIGxlbiAtIDQsNCk7CisgICAgICAgIHllYXJidWZbNF0gPSBOVUw7 CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisgICAgICAgICAgdG1wYnVmW2ldID0g c1tpKzRdOworICAgICAgICB0bXBidWZbM10gPSBOVUw7CisJaWYgKCh4eCA9IGxvb2t1cChjbW9u dGhzLHRtcGJ1ZiwxMixOVUxMKSkgPCAwKSB7CisJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52 YWxpZCBtb250aCIpOworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7 CisJICAgIHJldHVybihOVUxMKTsKKwl9CisgICAgICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBh c2N0aW1lIG1vbnRoIiwiIix4eCk7CisgICAgICAgIG1vbmJ1ZlswXSA9ICh4eCAvIDEwKSArICcw JzsgCisgICAgICAgIG1vbmJ1ZlsxXSA9ICh4eCAlIDEwKSArICcwJzsgCisgICAgICAgIG1vbmJ1 ZlsyXSA9IE5VTDsKKyAgICAgICAgZGF5YnVmWzBdID0gKHNbOF0gPT0gJyAnID8gJzAnIDogc1s4 XSk7CisgICAgICAgIGRheWJ1ZlsxXSA9IHNbOV07CisgICAgICAgIGRheWJ1ZlsyXSA9IE5VTDsK Kwl4YnVmWzBdID0gU1A7CisgICAgICAgIGZvciAoaSA9IDExOyBpIDwgMTk7IGkrKykKKyAgICAg ICAgICB4YnVmW2ktMTBdID0gc1tpXTsKKyAgICAgICAgeGJ1Zls5XSA9IE5VTDsKKwlja21ha21z Zyh6YnVmLDE4LHllYXJidWYsbW9uYnVmLGRheWJ1Zix4YnVmKTsKKwlkZWJ1ZyhGMTEwLCJjbWN2 dGRhdGUgYXNjdGltZSBvayIsemJ1ZiwwKTsKKwlpZiAobGVuID09IDI0KSB7CisJICAgIGRwID0g emJ1ZjsKKwkgICAgZ290byB4Y3Z0ZGF0ZTsKKwl9IGVsc2UgeworCSAgICBpbnQgbjsKKwkgICAg biA9IGNrbWFrbXNnKHlidWYsREFURUJVRkxFTi00LHpidWYsIiAiLE5VTEwsTlVMTCk7CisJICAg IHlidWZbbisrXSA9IHNbMjBdOworCSAgICB5YnVmW24rK10gPSBzWzIxXTsKKwkgICAgeWJ1Zltu KytdID0gc1syMl07CisJICAgIHlidWZbbisrXSA9IE5VTDsKKwkgICAgY2tzdHJuY3B5KHhidWYs eWJ1ZixEQVRFQlVGTEVOKTsKKwkgICAgcyA9IHhidWY7CisJICAgIGlzbGV0dGVyID0gMDsKKwl9 CisgICAgfQorCisvKiBDaGVjayBmb3IgZGF5IG9mIHdlZWsgKi8KKworICAgIHAgPSBzOworICAg IHdoaWxlICgqcCA9PSBTUCkgcCsrOworICAgIGRvdyA9IC0xOworICAgIGlmICgqcCkgeworCXAy ID0gcDsKKwljYyA9IE5VTDsKKwl3aGlsZSAoMSkgeworCSAgICBpZiAoKnAyID09ICcsJyB8fCAq cDIgPT0gU1AgfHwgISpwMikgeworCQljYyA9ICpwMjsJCS8qIFNhdmUgYnJlYWsgY2hhciAqLwor CQkqcDIgPSBOVUw7CQkvKiBOVUwgaXQgb3V0ICovCisJCXAzID0gcDI7CQkvKiBSZW1lbWJlciB0 aGlzIHNwb3QgKi8KKwkJaWYgKChkb3cgPSBsb29rdXAoZGF5c29md2VlayxwLDcsTlVMTCkpID4g LTEpIHsKKwkJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBkb3ciLHAsZG93KTsKKwkJICAgIHMg PSBwMjsKKwkJICAgIGlmIChjYyA9PSAnLCcgfHwgY2MgPT0gU1ApIHsgLyogUG9pbnQgdG8gbmV4 dCBmaWVsZCAqLworCQkJcysrOworCQkJd2hpbGUgKCpzID09IFNQKSBzKys7CisJCSAgICB9CisJ CSAgICBwID0gczsKKwkJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBkb3cgbmV3IHAiLHAsZG93 KTsKKwkJICAgIGJyZWFrOworCQl9IGVsc2UgaWYgKGlzYWxwaGEoKnApICYmIGNjID09ICcsJykg eworCQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJVbnJlY29nbml6ZWQgZGF5IG9mIHdlZWsiKTsK KwkJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJICAgIHJldHVy bihOVUxMKTsKKwkJfSBlbHNlIHsKKwkJICAgICpwMyA9IGNjOworCQkgICAgYnJlYWs7CisJCX0K KwkgICAgfQorCSAgICBwMisrOworCX0KKyAgICB9CisgICAgbGVuID0gc3RybGVuKHMpOwkJLyog VXBkYXRlIGxlbmd0aCAqLworICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBzIixzLGxlbik7CisK KyAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgZG93IixzLGRvdyk7CisgICAgaWYgKGRvdyA+IC0x KSB7CQkJLyogSGF2ZSBhIGRheS1vZi13ZWVrIG51bWJlciAqLworCWxvbmcgeno7IGludCBuLCBq OworCXp6ID0gbWpkKHp6bmRhdGUoKSk7CQkvKiBHZXQgdG9kYXkncyBNSkQgKi8KKwlkZWJ1ZyhG MTExLCJjbWN2dGRhdGUgenoiLCIiLHp6KTsKKwlqID0gKCgoaW50KSh6eiAlIDdMKSkgKyAzKSAl IDc7IC8qIFRvZGF5J3MgZGF5LW9mLXdlZWsgbnVtYmVyICovCisJZGVidWcoRjExMSwiY21jdnRk YXRlIGoiLCIiLGopOworCWhoID0gMDsJCQkJLyogSW5pdCB0aW1lIHRvIG1pZG5pZ2h0ICovCisJ bW0gPSAwOworCXNzID0gMDsKKwlpZiAoaiA9PSBkb3cpIHsKKwkgICAgY2tzdHJuY3B5KHl5eXlt bWRkLHp6bmRhdGUoKSxZWVlZTU1ERCk7CisJICAgIHllYXIgPSBOVUxMOworCX0gZWxzZSB7CisJ ICAgIG4gPSBkb3cgLSBqOwkJLyogRGF5cyBmcm9tIG5vdyAqLworCSAgICBpZiAoZG93IDwgaikK KwkgICAgICBuICs9IDc7CisJICAgIGlmIChuIDwgMCkgbiArPSA3OwkJLyogQWRkIHRvIE1KRCAq LworCSAgICB6eiArPSBuOworCSAgICBja3N0cm5jcHkoeXl5eW1tZGQsbWpkMmRhdGUoenopLFlZ WVlNTUREKTsgLyogTmV3IGRhdGUgKi8KKwkgICAgeWVhciA9IE5VTEw7CisJfQorCWRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSBBIix5eXl5bW1kZCxsZW4pOworCWlmIChsZW4gPT0gMCkgewkJCS8qIE5v IG1vcmUgZmllbGRzIGFmdGVyIHRoaXMgKi8KKwkgICAgY2ttYWttc2coemJ1ZiwxOCx5eXl5bW1k ZCwiIDAwOjAwOjAwIixOVUxMLE5VTEwpOworCSAgICBkcCA9IHpidWY7CisJICAgIGdvdG8geGN2 dGRhdGU7CisJfQorCWlzbGV0dGVyID0gMDsKKwlpZiAocmRpZ2l0cyhwKSAmJiBsZW4gPCA4KQkv KiBOZXh0IGZpZWxkIGlzIHRpbWU/ICovCisJICBnb3RvIGRvdGltZTsJCQkvKiBJZiBzbyBnbyBz dHJhaWdodCB0byB0aW1lIHNlY3Rpb24gKi8KKwlpZiAoaXNkaWdpdCgqcCkpIHsKKwkgICAgaWYg KCoocCsxKSA9PSAnOicpCisJICAgICAgZ290byBkb3RpbWU7CisJICAgIGVsc2UgaWYgKGlzZGln aXQoKihwKzEpKSAmJiAoKihwKzIpID09ICc6JykpCisJICAgICAgZ290byBkb3RpbWU7CisJfQor ICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgQiBzIixzLGRvdyk7CisgICAgZGVidWco RjExMSwiY21jdnRkYXRlIEIgcCIscCxkb3cpOworCisgICAgaWYgKCpzID09ICcrJyB8fCAqcyA9 PSAnLScpIHsJLyogRGVsdGEgdGltZSBvbmx5IC0gc2tpcCBhaGVhZC4gKi8KKwlwID0gczsKKwln b3RvIGRlbHRhOworICAgIH0KKyNpZmRlZiBDT01NRU5UCisvKgorICBXaGF0IGlzIHRoZSBwdXJw b3NlIG9mIHRoaXM/ICBJdCBicmVha3MgcGFyc2luZyBvZiBlbWFpbCBkYXRlcyBsaWtlCisgICJX ZWQsIDEzIEZlYiAyMDAyIDE3OjQzOjAyIC0wODAwIChQU1QpIi4gIFJlbW92aW5nIHRoaXMgY29k ZSBmaXhlcyB0aGUKKyAgcHJvYmxlbSBhbmQgS2VybWl0IHN0aWxsIHBhc3NlcyB0aGUgJ2RhdGVz JyBzY3JpcHQuCisgIC0gZmRjLCBTYXQgTm92IDI2IDEwOjUyOjQ1IDIwMDUuCisqLworICAgIGlm IChkb3cgPiAtMSkgeworCS8qIERheSBvZiB3ZWVrIGdpdmVuIGZvbGxvd2VkIGJ5IHNvbWV0aGlu ZyB0aGF0IGlzIG5vdCBhIHRpbWUgKi8KKwkvKiBvciBhIGRlbHRhIHNvIGl0IGNhbid0IGJlIHZh bGlkICovCisJbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIHRva2VucyBhZnRlciBkYXkgb2Yg d2VlayIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBmYWlsIixjbWRhdGVtc2csLTEpOworCXJl dHVybihOVUxMKTsKKyAgICB9CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgLyogSGFuZGxl ICJ0b2RheSIsICJ5ZXN0ZXJkYXkiLCAidG9tb3Jyb3ciLCBhbmQgKy8tIG4gdW5pdHMgKi8KKwor ICAgIGlmIChja3N0cmNocigiVHRZeU5uIixzWzBdKSkgeworCWludCBpLCBrLCBuLCBtaW51cyA9 IDA7CisJY2hhciBjOworCWxvbmcgamQ7CisJamQgPSBtamQoY2tkYXRlKCkpOworCWRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSBtamQiLHMsamQpOworCisJLyogU3ltYm9saWMgZGF0ZTogVE9EQVksIFRP TU9SUk9XLCBldGMuLi4/ICovCisKKwlzMiA9IHM7CQkJCS8qIEZpbmQgZW5kIG9mIGtleXdvcmQg Ki8KKwlpID0gMDsKKwl3aGlsZSAoaXNhbHBoYSgqczIpKSB7CQkvKiBhbmQgZ2V0IGl0cyBsZW5n dGggKi8KKwkgICAgaSsrOworCSAgICBzMisrOworCX0KKwljID0gKnMyOwkJCS8qIFphcCBidXQg c2F2ZSBkZWxpbWl0ZXIgKi8KKwkqczIgPSBOVUw7CisJayA9IGxvb2t1cChzeW1kYXl0YWIscyxu c3ltZGF5cyxOVUxMKTsgLyogTG9vayB1cCBrZXl3b3JkICovCisJKnMyID0gYzsJCQkvKiBSZXBs YWNlIGRlbGltaXRlciAqLworCWlmIChrIDwgMCkJCQkvKiBLZXl3b3JkIG5vdCBmb3VuZCAqLwor CSAgZ290byBub3JtYWw7CisJczMgPSAmc1tpXTsKKwl3aGlsZSAoKnMzID09IFNQKQkJLyogU2tp cCB3aGl0ZXNwYWNlICovCisJICBzMysrOworCWlmICgqczMgPT0gJ18nIHx8ICpzMyA9PSAnOicp CisJICBzMysrOworCisJc3dpdGNoIChrKSB7CQkJLyogSGF2ZSBrZXl3b3JkICovCisJICBjYXNl IFNZTV9OT1c6CQkJLyogTk9XICovCisJICAgIGNrc3RybmNweSh5YnVmLGNrZGF0ZSgpLERBVEVC VUZMRU4pOworCSAgICBja3N0cm5jcHkoeXl5eW1tZGQseWJ1ZixZWVlZTU1ERCk7CisJICAgIHll YXIgPSBOVUxMOworCSAgICBpZiAoKnMzKSB7CQkJLyogTm8gb3ZlcndyaXRpbmcgY3VycmVudCB0 aW1lLiAqLworCQlja3N0cm5jYXQoeWJ1ZiwiICIsREFURUJVRkxFTik7CisJCWNrc3RybmNhdCh5 YnVmLHMzLERBVEVCVUZMRU4pOworCSAgICB9CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoJCQkv KiBZZXN0ZXJkYXksIFRvZGF5LCBhbmQgVG9tb3Jyb3cgKi8KKwkgICAgaWYgKGsgPT0gU1lNX1RP TU8pIHsJLyogVE9NT1JST1cgKi8KKwkJc3RybmNweSh5YnVmLG1qZDJkYXRlKGpkKzEpLDgpOwor CSAgICB9IGVsc2UgaWYgKGsgPT0gU1lNX1lFU1QpIHsJLyogWUVTVEVSREFZICovCisJCXN0cm5j cHkoeWJ1ZixtamQyZGF0ZShqZC0xKSw4KTsKKwkgICAgfSBlbHNlIHsJCQkvKiBUT0RBWSAqLwor CQlzdHJuY3B5KHlidWYsY2tkYXRlKCksOCk7CisJICAgIH0KKwkgICAgc3RybmNweSh5YnVmKzgs IiAwMDowMDowMCIsREFURUJVRkxFTi04KTsgLyogRGVmYXVsdCB0aW1lIGlzIDAgKi8KKwkgICAg Y2tzdHJuY3B5KHl5eXltbWRkLHlidWYsWVlZWU1NREQpOworCSAgICB5ZWFyID0gTlVMTDsKKwkg ICAgaWYgKCpzMykgewkJCS8qIElmIHNvbWV0aGluZyBmb2xsb3dzIGtleXdvcmQuLi4gKi8KKwkJ aWYgKGlzZGlnaXQoKnMzKSkgewkvKiBUaW1lIC0gb3ZlcndyaXRlIGRlZmF1bHQgdGltZSAqLwor CQkgICAgc3RybmNweSh5YnVmKzgscytpLERBVEVCVUZMRU4tOCk7CisJCX0gZWxzZSB7CQkvKiBT b21ldGhpbmcgZWxzZSwga2VlcCBkZWZhdWx0IHRpbWUgKi8KKwkJICAgIGNrc3RybmNhdCh5YnVm LCIgIixEQVRFQlVGTEVOKTsgLyogYW5kIGFwcGVuZCAqLworCQkgICAgY2tzdHJuY2F0KHlidWYs czMsREFURUJVRkxFTik7IC8qIHdoYXRldmVyIHdlIGhhdmUgKi8KKwkJfQorCSAgICB9CisJfQor CXMgPSB5YnVmOwkJCS8qIFBvaW50IHRvIHJld3JpdHRlbiBkYXRlLXRpbWUgKi8KKwlsZW4gPSBz dHJsZW4ocyk7CQkvKiBVcGRhdGUgbGVuZ3RoICovCisJaXNsZXR0ZXIgPSAwOwkJCS8qIENhbmNl bCB0aGlzICovCisgICAgfQorCisvKiBSZWd1bGFyIGZyZWUtZm9ybWF0IG5vbi1zeW1ib2xpYyBk YXRlICovCisKKyAgbm9ybWFsOgorCisgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCIs cyxsZW4pOworICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBkb3ciLHMsZG93KTsKKyAgICBpZiAo eXl5eW1tZGRbMF0gJiYgIXllYXIpIHsKKwlja3N0cm5jcHkoeWVhcmJ1Zix5eXl5bW1kZCw1KTsK Kwlja3N0cm5jcHkobW9uYnVmLCZ5eXl5bW1kZFs0XSwzKTsKKwlja3N0cm5jcHkoZGF5YnVmLCZ5 eXl5bW1kZFs2XSwzKTsKKwl5ZWFyID0geWVhcmJ1ZjsKKwltb250aCA9IG1vbmJ1ZjsKKwlkYXkg PSBkYXlidWY7CisJbmRheSA9IGF0b2koZGF5YnVmKTsKKyAgICB9CisgICAgaWYgKGlzZGlnaXQo c1swXSkpIHsJCS8qIFRpbWUgd2l0aG91dCBkYXRlPyAqLworCXAgPSBzOworCWlmIChzWzFdID09 ICc6JykgeworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIFgxIixzLGxlbik7CisJ ICAgIGdvdG8gZG90aW1lOworCX0gZWxzZSBpZiAobGVuID4gMSAmJiBpc2RpZ2l0KHNbMV0pICYm IHNbMl0gPT0gJzonKSB7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgWDIiLHMs bGVuKTsKKwkgICAgZ290byBkb3RpbWU7CisJfSBlbHNlIGlmIChyZGlnaXRzKHMpICYmIGxlbiA8 IDgpIHsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBYMyIscyxsZW4pOworCSAg ICBnb3RvIGRvdGltZTsKKwl9CisgICAgfQorICAgIGlmIChsZW4gPj0gOCAmJiBpc2RpZ2l0KCpz KSkgewkvKiBDaGVjayBmaXJzdCBmb3IgeXl5eW1tZGQqICovCisJZGVidWcoRjExMSwiY21jdnRk YXRlIE5PUk1BTCBBIixzLGxlbik7CisJY2MgPSBzWzhdOworCXNbOF0gPSBOVUw7CQkJLyogSXNv bGF0ZSBmaXJzdCA4IGNoYXJhY3RlcnMgKi8KKwlpZiAocmRpZ2l0cyhzKSkgeworCSAgICAvKiBI YXZlIHZhbGlkIHRpbWUgc2VwYXJhdG9yPyAqLworCSAgICBwMiA9IGNjID8gY2tzdHJjaHIoIiBU dF8tOiIsY2MpIDogTlVMTDsKKwkgICAgaWYgKCFjYyB8fCBwMikgeworCQlja3N0cm5jcHkoeXl5 eW1tZGQscyxZWVlZTU1ERCk7CS8qIFZhbGlkIHNlcGFyYXRvciAqLworCQl5ZWFyID0gTlVMTDsK KwkJcyArPSA4OwkJCSAgICAgICAgLyogb3IgdGltZSBub3QgZ2l2ZW4gKi8KKwkJaWYgKGNjKSBz Kys7CQkgICAgICAgIC8qIEtlZXAgZGF0ZSAqLworCQlwID0gczsJCQkgICAgICAgIC8qIGFuZCBn byBoYW5kbGUgdGltZSAqLworCQlnb3RvIGRvdGltZTsKKwkgICAgfSBlbHNlIGlmICghcDIpIHsK KwkJaWYgKGlzZGlnaXQoY2MpKQorCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiTnVtZXJpYyBkYXRl IHRvbyBsb25nIik7CisJCWVsc2UKKwkJICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgZGF0 ZS10aW1lIHNlcGFyYXRvciIpOworCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywt MSk7CisJCXJldHVybihOVUxMKTsKKwkgICAgfQorCX0KKwlzWzhdID0gY2M7CQkJLyogUHV0IHRo aXMgYmFjayEgKi8KKyAgICB9CisgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBub24t eXl5eW1tZGQiLHMsbGVuKTsKKworICAgIC8qIEZyZWUtZm9ybWF0IGRhdGUgLS0gZmlndXJlIGl0 IG91dCAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIGlmICgqcyAmJiAhaXNkaWdpdCgqcykpIHsK KwltYWtlc3RyKCZjbWRhdGVtc2csIlVucmVjb2duaXplZCB3b3JkIGluIGRhdGUiKTsKKwlkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0K KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykJCS8qIEZp ZWxkIHR5cGVzICovCisgICAgICBmdFtpXSA9IC0xOworICAgIGZsZFtpID0gMF0gPSAocCA9IHMp OwkJLyogRmlyc3QgZmllbGQgKi8KKyAgICB3aGlsZSAoKnApIHsJCQkvKiBHZXQgbmV4dCB0d28g ZmllbGRzICovCisJaWYgKGlzZGF0ZXNlcCgqcCkpIHsJCS8qIEhhdmUgYSBkYXRlIHNlcGFyYXRv ciAqLworCSAgICBpZiAoaSA9PSAwKSB7CisJCWRhdGVzZXAgPSAqcDsKKwkgICAgfSBlbHNlIGlm IChpID09IDEgJiYgKnAgIT0gZGF0ZXNlcCkgeworCQltYWtlc3RyKCZjbWRhdGVtc2csIkluY29u c2lzdGVudCBkYXRlIHNlcGFyYXRvcnMiKTsKKwkJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRh dGVtc2csLTEpOworCQlyZXR1cm4oTlVMTCk7CisJICAgIH0KKwkgICAgKnArKyA9IE5VTDsJCQkv KiBSZXBsYWNlIGJ5IE5VTCAqLworCSAgICBpZiAoKnApIHsJCQkvKiBOb3cgd2UncmUgYXQgdGhl IG5leHQgZmllbGQgKi8KKwkJd2hpbGUgKCpwID09IFNQKSBwKys7CS8qIFNraXAgbGVhZGluZyBz cGFjZXMgKi8KKwkJaWYgKCEqcCkgYnJlYWs7CQkvKiBNYWtlIHN1cmUgd2Ugc3RpbGwgaGF2ZSBz b21ldGhpbmcgKi8KKwkJaWYgKGkgPT0gMikJCS8qIExhc3Qgb25lPyAqLworCQkgIGJyZWFrOwor CQlmbGRbKytpXSA9IHA7CQkvKiBObywgcmVjb3JkIHBvaW50ZXIgdG8gdGhpcyBvbmUgKi8KKwkg ICAgfSBlbHNlIHsKKwkJYnJlYWs7CisJICAgIH0JICAgIAorCX0gZWxzZSBpZiAoKCpwID09ICdU JyB8fCAqcCA9PSAndCcpICYmIGlzZGlnaXQoKihwKzEpKSkgeyAvKiBUaW1lICovCisJICAgICpw KysgPSBOVUw7CisJICAgIGJyZWFrOworCX0gZWxzZSBpZiAoKnAgPT0gJzonKSB7CisJICAgIGlm IChpID09IDAgJiYgcCA9PSBzKSB7CisJCW5vZGF0ZSA9IDE7CisJCWJyZWFrOworCSAgICB9IGVs c2UgaWYgKGkgIT0gMCkgewkvKiBBZnRlciBhIGRhdGUgKi8KKwkJaWYgKGkgPT0gMikgewkJLyog T0sgYXMgZGF0ZS10aW1lIHNlcGFyYXRvciAoVk1TKSAqLworCQkgICAgKnArKyA9IE5VTDsKKwkJ ICAgIGJyZWFrOworCQl9CisJCWlmIChpIDwgMikKKwkJICBtYWtlc3RyKCZjbWRhdGVtc2csIlRv byBmZXcgZmllbGRzIGluIGRhdGUiKTsKKwkJZWxzZQorCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywi TWlzcGxhY2VkIHRpbWUgc2VwYXJhdG9yIik7CisJCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21k YXRlbXNnLC0xKTsKKwkJcmV0dXJuKE5VTEwpOworCSAgICB9CisJICAgIG5vZGF0ZSA9IDE7CQkJ LyogT3Igd2l0aG91dCBhIGRhdGUgKi8KKwkgICAgYnJlYWs7CisJfQorCXArKzsKKyAgICB9Cisg ICAgaWYgKHAgPiBzICYmIGkgPT0gMCkJCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgZGF0ZSAqLwor ICAgICAgbm9kYXRlID0gMTsJCQkvKiBObyBkYXRlLiAqLworCisgICAgaWYgKG5vZGF0ZSAmJiBk b3cgPiAtMSkgewkJLyogSGF2ZSBpbXBsaWVkIGRhdGUgZnJvbSBET1c/ICovCisJZ290byBkb3Rp bWU7CQkJLyogVXNlLCB1c2UgdGhhdCwgZ28gZG8gdGltZS4gKi8KKworICAgIH0gZWxzZSBpZiAo bm9kYXRlKSB7CQkvKiBObyBkYXRlIGFuZCBubyBpbXBsaWVkIGRhdGUgKi8KKwljaGFyICp0bXAg PSBOVUxMOwkJLyogU3Vic3RpdHV0ZSB0b2RheSdzIGRhdGUgKi8KKwl6dGltZSgmdG1wKTsKKwlp ZiAoIXRtcCkKKwkgIHRtcCAgPSAiIjsKKwlpZiAoISp0bXApIHsKKwkgICAgbWFrZXN0cigmY21k YXRlbXNnLCJQcm9ibGVtIHN1cHBseWluZyBjdXJyZW50IGRhdGUiKTsKKwkgICAgZGVidWcoRjEx MSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQorCWNr c3RybmNweShkYnVmLHRtcCwyNik7CQkvKiBSZWZvcm1hdCAqLworCWlmIChkYnVmWzhdID09IFNQ KSBkYnVmWzhdID0gJzAnOworCWZsZFswXSA9IGRidWYrODsJCS8qIGRkICovCisJZGJ1ZlsxMF0g PSBOVUw7CisJZmxkWzFdID0gZGJ1Zis0OwkJLyogbW1tICovCisJZGJ1Zls3XSA9IE5VTDsKKwlm bGRbMl0gPSBkYnVmKzIwOwkJLyogeXl5eSAqLworCWRidWZbMjRdID0gTlVMOworCWhoID0gYXRv aSgmZGJ1ZlsxMV0pOworCW1tID0gYXRvaSgmZGJ1ZlsxNF0pOworCXNzID0gYXRvaSgmZGJ1Zlsx N10pOworCXAgPSBzOwkJCQkvKiBCYWNrIHVwIHNvdXJjZSBwb2ludGVyIHRvIHJlcGFyc2UgKi8K KyAgICB9IGVsc2UgaWYgKGkgPCAyKSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJUb28gZmV3IGZp ZWxkcyBpbiBkYXRlIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOwor CXJldHVybihOVUxMKTsKKyAgICB9CisgICAgLyogSGF2ZSB0aHJlZSBkYXRlIGZpZWxkcyAtIHNl ZSB3aGF0IHRoZXkgYXJlICovCisKKyAgICBmb3IgKGsgPSAwLCBqID0gMDsgaiA8IDM7IGorKykg ewkvKiBHZXQgbnVtYmVyIG9mIG5vbi1udW1lcmljIGZpZWxkcyAqLworCWZ0W2pdID0gcmRpZ2l0 cyhmbGRbal0pOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBmbGQiLGZsZFtqXSxqKTsKKwlpZiAo ZnRbal0gPT0gMCkKKwkgIGsrKzsKKyAgICB9CisgICAga24gPSBrOwkJCQkvKiBIb3cgbWFueSBu dW1lcmljIGZpZWxkcyAqLworICAgIG1vbnRoID0gTlVMTDsJCQkvKiBTdHJpa2Ugb3V0IGRlZmF1 bHQgdmFsdWVzICovCisgICAgeWVhciA9IE5VTEw7CisgICAgZGF5ID0gTlVMTDsKKworICAgIGlm IChrID09IDIgJiYgZnRbMl0gPiAwKSB7CQkvKiBKdWwgMjAsIDIwMDEgKi8KKwlpbnQgeHg7CisJ eHggPSBzdHJsZW4oZmxkWzFdKTsKKwlwMyA9IGZsZFsxXTsKKwlpZiAoeHggPiAwKSBpZiAocDNb eHgtMV0gPT0gJywnKSB7CisJICAgIHAzW3h4LTFdID0gTlVMOworCSAgICBpZiAocmRpZ2l0cyhw MykpIHsKKwkJayA9IDE7CQorCQlmdFsxXSA9IDE7CisJICAgIH0gZWxzZSBwM1t4eC0xXSA9ICcs JzsKKwl9CisgICAgfQorICAgIGlmIChrID4gMSkgewkJCS8qIFdlIGNhbiBoYXZlIG9ubHkgb25l IG5vbi1udW1lcmljICovCisJaWYgKG5vZGF0ZSkKKwkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVW5y ZWNvZ25pemVkIHdvcmQgaW4gZGF0ZSIpOyAKKwllbHNlIGlmICghZnRbMl0gJiYgaXNkaWdpdCgq KGZsZFsyXSkpKQorCSAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIGRhdGUtdGltZSBzZXBh cmF0b3IiKTsgCisJZWxzZQorCSAgbWFrZXN0cigmY21kYXRlbXNnLCJUb28gbWFueSBub24tbnVt ZXJpYyBmaWVsZHMgaW4gZGF0ZSIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNn LC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmICghZnRbMF0pIHsKKwlrID0gMDsK KyAgICB9IGVsc2UgaWYgKCFmdFsxXSkgeworCWsgPSAxOworICAgIH0gZWxzZSBpZiAoIWZ0WzJd KSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJOb24tZGlnaXQgaW4gdGhpcmQgZGF0ZSBmaWVsZCIp OworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7 CisgICAgfSBlbHNlCisgICAgICBrID0gLTE7CisKKyAgICBpZiAoayA+IC0xKSB7CisJaWYgKCh4 ID0gbG9va3VwKGNtb250aHMsZmxkW2tdLDEyLE5VTEwpKSA8IDApIHsKKwkgICAgbWFrZXN0cigm Y21kYXRlbXNnLCJVbmtub3duIG1vbnRoIik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIs Y21kYXRlbXNnLC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOworCX0KKwlzcHJpbnRmKHRtcGJ1Ziwi JTAyZCIseCk7CisJbW9udGggPSB0bXBidWY7CisgICAgfQorICAgIGYybGVuID0gc3RybGVuKGZs ZFsyXSk7CQkvKiBMZW5ndGggb2YgM3JkIGZpZWxkICovCisKKyAgICBpZiAoayA9PSAwKSB7CQkJ LyogbW9udGhuYW1lIGRkLCB5eXl5ICovCisJZGF5ID0gZmxkWzFdOworCXllYXIgPSBmbGRbMl07 CisgICAgfSBlbHNlIGlmICgoKGludClzdHJsZW4oZmxkWzBdKSA9PSA0KSkgeyAvKiB5eXl5LXh4 LWRkICovCisJeWVhciA9IGZsZFswXTsKKwlkYXkgPSBmbGRbMl07CisJaWYgKCFtb250aCkKKwkg IG1vbnRoID0gZmxkWzFdOwkJLyogeXl5eS1tbS1kZCAqLworICAgIH0gZWxzZSBpZiAoZjJsZW4g PT0gNCkgewkJLyogeHgteHgteXl5eSAqLworCXllYXIgPSBmbGRbMl07CisJaWYgKG1vbnRoKSB7 CQkJLyogZGQtbmFtZS15eXl5ICovCisJICAgIGRheSA9IGZsZFswXTsKKwl9IGVsc2UgewkJCS8q IHh4LXh4LXl5eXkgKi8KKwkgICAgaW50IGYwLCBmMTsKKwkgICAgZjAgPSBhdG9pKGZsZFswXSk7 CisJICAgIGYxID0gYXRvaShmbGRbMV0pOworCSAgICBpZiAoKChmMCA+IDEyKSAmJiAoZjEgPD0g MTIpKSB8fCAoZjEgPD0gMTIgJiYgZjAgPT0gZjEpKSB7CisJCWRheSA9IGZsZFswXTsJCS8qIG1t LWRkLXl5eXkgKi8KKwkJbW9udGggPSBmbGRbMV07CisJICAgIH0gZWxzZSBpZiAoKGYwIDw9IDEy KSAmJiAoZjEgPiAxMikpIHsKKwkJaWYgKCFyZGlnaXRzKGZsZFsxXSkpIHsKKwkJICAgIG1ha2Vz dHIoJmNtZGF0ZW1zZywiRGF5IG5vdCBudW1lcmljIik7CisJCSAgICBkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJCSAgICByZXR1cm4oTlVMTCk7CisJCX0gZWxzZSB7CisJ CSAgICBkYXkgPSBmbGRbMV07CS8qIGRkLW1tLXl5eXkgKi8KKwkJfQorCQltb250aCA9IGZsZFsw XTsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKCFmMCB8fCAhZjEpCisJCSAgbWFrZXN0cigmY21kYXRl bXNnLCJEYXkgb3IgbW9udGggb3V0IG9mIHJhbmdlIik7CisJCWVsc2UKKwkJICBtYWtlc3RyKCZj bWRhdGVtc2csIkRheSBhbmQgbW9udGggYXJlIGFtYmlndW91cyIpOworCQlkZWJ1ZyhGMTExLCJj bWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJCXJldHVybihOVUxMKTsKKwkgICAgfQorCX0KKyAg ICB9IGVsc2UgaWYgKChmMmxlbiA8IDQpICYmCQkvKiBkZCBtbW0geXkgKFJGQzgyMikgKi8KKwkg ICAgICAgIXJkaWdpdHMoZmxkWzFdKSAmJgkvKiBtaWRkbGUgZmllbGQgaXMgbW9udGhuYW1lICov CisJICAgICAgIHJkaWdpdHMoZmxkWzJdKSkgeworCWludCB0bXB5ZWFyOworCWRheSA9IGZsZFsw XTsKKwlpZiAoIWZsZFsyXVsxXSkgeworCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBmZXcg ZGlnaXRzIGluIHllYXIiKTsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2cs LTEpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQorCXRtcHllYXIgPSBhdG9pKGZsZFsyXSk7CisJ aWYgKHRtcHllYXIgPCA1MCkJCS8qIFJGQyAyODIyIHdpbmRvd2luZyAqLworCSAgdG1weWVhciAr PSAyMDAwOworCWVsc2UJCQkJLyogVGhpcyBpbmNsdWRlcyAzLWRpZ2l0IHllYXJzLiAqLworCSAg dG1weWVhciArPSAxOTAwOworCXllYXIgPSBja2l0b2EodG1weWVhcik7CisKKyAgICB9IGVsc2Ug aWYgKChmMmxlbiA8IDQpICYmIChrIDwgMCkgJiYgKChpbnQpc3RybGVuKGZsZFswXSkgPCA0KSkg eworCW1ha2VzdHIoJmNtZGF0ZW1zZywiQW1iaWd1b3VzIG51bWVyaWMgZGF0ZSIpOworCWRlYnVn KEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfSBl bHNlIGlmICgoZjJsZW4gPiA0KSAmJiBmdFsyXSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiVG9v IG1hbnkgZGlnaXRzIGluIHllYXIiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1z ZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0gZWxzZSB7CisJbWFrZXN0cigmY21kYXRlbXNn LCJVbmV4cGVjdGVkIGRhdGUgZm9ybWF0Iik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRh dGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgeCA9IGF0b2kobW9udGgpOwor ICAgIHNwcmludGYodG1wYnVmLCIlMDJkIix4KTsJCS8qIDItZGlnaXQgbnVtZXJpYyBtb250aCAq LworCisvKgorICAgc3RhdGUgPSAxID0gaG91cnMKKyAgIHN0YXRlID0gMiA9IG1pbnV0ZXMKKyAg IHN0YXRlID0gMyA9IHNlY29uZHMKKyAgIHN0YXRlID0gNCA9IGZyYWN0aW9ucyBvZiBzZWNvbmRz CisqLworCisgIGRvdGltZToKKyAgICBpZiAoaXNsZXR0ZXIgJiYgKHMgPT0gcCkpIHsKKwltYWtl c3RyKCZjbWRhdGVtc2csIlVua25vd24gZGF0ZS10aW1lIHdvcmQiKTsKKwlkZWJ1ZyhGMTExLCJj bWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAo IXllYXIgJiYgeXl5eW1tZGRbMF0pIHsKKwlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1lIHl5 eXltbWRkIix5eXl5bW1kZCwwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCSAgeWVhcmJ1 ZltpXSA9IHl5eXltbWRkW2ldOworCXllYXJidWZbNF0gPSBOVUw7CisJbW9uYnVmWzBdID0geXl5 eW1tZGRbNF07CisJbW9uYnVmWzFdID0geXl5eW1tZGRbNV07CisJbW9uYnVmWzJdID0gTlVMOwor CWRheWJ1ZlswXSA9IHl5eXltbWRkWzZdOworCWRheWJ1ZlsxXSA9IHl5eXltbWRkWzddOworCWRh eWJ1ZlsyXSA9IE5VTDsKKwlkYXkgPSBkYXlidWY7CisJbmRheSA9IGF0b2koZGF5YnVmKTsKKwlt b250aCA9IG1vbmJ1ZjsKKwl5ZWFyID0geWVhcmJ1ZjsKKyAgICB9CisgICAgaWYgKCF5ZWFyKSB7 CisJbWFrZXN0cigmY21kYXRlbXNnLCJJbnRlcm5hbCBlcnJvciAtIGRhdGUgbm90IGRlZmF1bHRl ZCIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVM TCk7CisgICAgfQorICAgIC8qIEdldCBoZXJlIHdpdGggZGF5LCBtb250aCwgYW5kIHllYXIgc2V0 ICovCisgICAgZGVidWcoRjExMCwiY21jdnRkYXRlIGRvdGltZSBkYXkiLGRheSwwKTsKKyAgICBk ZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1lIG1vbnRoIixtb250aCwwKTsKKyAgICBkZWJ1ZyhG MTEwLCJjbWN2dGRhdGUgZG90aW1lIHllYXIiLHllYXIsMCk7CisgICAgZGVidWcoRjExMCwiY21j dnRkYXRlIGRvdGltZSBzIixzLDApOworICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUg cCIscCwwKTsKKyAgICB4ID0gYXRvaShtb250aCk7CisgICAgaWYgKHggPiAxMiB8fCB4IDwgMSkg eworCW1ha2VzdHIoJmNtZGF0ZW1zZywiTW9udGggb3V0IG9mIHJhbmdlIik7CisJZGVidWcoRjEx MSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAg bmRheSAgPSBhdG9pKGRheSk7CisgICAgaSA9IG1kYXlzW3hdOworICAgIGlmICh4ID09IDIpIGlm IChpc2xlYXAoYXRvaSh5ZWFyKSkpIGkrKzsKKyAgICBpZiAobmRheSA+IGkgfHwgbmRheSA8IDEp IHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIkRheSBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1ZyhGMTEx LCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBp ZiAoISpwICYmIHQgPT0gMCkgeworCXNwcmludGYoemJ1ZiwiJTA0ZCUwMmQlMDJkIixhdG9pKHll YXIpLGF0b2kobW9udGgpLG5kYXkpOwkKKwlkcCA9IHpidWY7CisJZ290byB4Y3Z0ZGF0ZTsKKyAg ICB9CisgICAgaWYgKCpwID09ICcrJyB8fCAqcCA9PSAnLScpIHsJLyogR01UIG9mZnNldCB3aXRo b3V0IGEgdGltZSAqLworCWhoID0gMDsJCQkJLyogc28gZGVmYXVsdCB0aW1lIHRvIDAwOjAwOjAw ICovCisJbW0gPSAwOworCXNzID0gMDsKKwlnb3RvIGNtdGltZXpvbmU7CQkvKiBhbmQgZ28gZG8g dGltZXpvbmUgKi8KKyAgICB9CisgICAgaWYgKCpwICYmICFpc2RpZ2l0KCpwKSAmJiAqcCAhPSAn OicpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgdGltZSIpOworCWRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIHNw cmludGYoeXl5eW1tZGQsIiVzJXMlMDJkIix5ZWFyLG1vbnRoLG5kYXkpOyAvKiBmb3IgdHogY2Fs Y3VsYXRpb25zLi4uICovCisKKyAgICBzdGF0ZSA9IDE7CQkJCS8qIEluaXRpYWxpemUgdGltZS1w YXJzaW5nIEZTQSAqLworICAgIGhoID0gMDsJCQkJLyogaG91cnMgKi8KKyAgICBtbSA9IDA7CQkJ CS8qIG1pbnV0ZXMgKi8KKyAgICBzcyA9IDA7CQkJCS8qIHNlY29uZHMgKi8KKyAgICBmZiA9IC0x OwkJCQkvKiBmcmFjdGlvbiAqLworICAgIGQgPSAwOwkJCQkvKiBEaWdpdCBjb3VudGVyICovCisg ICAgcDIgPSBwOwkJCQkvKiBQcmVsaW1pbmFyeSBkaWdpdCBjb3VudC4uLiAqLworICAgIHdoaWxl IChpc2RpZ2l0KCpwMikpIHsKKwlkKys7CisJcDIrKzsKKyAgICB9CisgICAgaWYgKGQgPiA2KSB7 CisJbWFrZXN0cigmY21kYXRlbXNnLCJUb28gbWFueSB0aW1lIGRpZ2l0cyIpOworCWRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAg IGQgPSAoZCAmIDEgJiYgKnAyICE9ICc6JykgPyAxIDogMDsJLyogT2RkIGltcGxpZXMgbGVhZGlu ZyAnMCcgKi8KKworICAgIHdoaWxlICgqcCkgewkJCS8qIEdldCB0aGUgdGltZSwgaWYgYW55ICov CisJaWYgKGlzZGlnaXQoKnApKSB7CQkvKiBkaWdpdCAqLworCSAgICBpZiAoZCsrID4gMSkgewor CQlzdGF0ZSsrOworCQlkID0gMTsKKwkgICAgfQorCSAgICBzd2l0Y2ggKHN0YXRlKSB7CisJICAg ICAgY2FzZSAxOgkJCS8qIEhvdXJzICovCisJCWhoID0gaGggKiAxMCArICgqcCAtICcwJyk7CisJ CWJyZWFrOworCSAgICAgIGNhc2UgMjoJCQkvKiBNaW51dGVzICovCisJCW1tID0gbW0gKiAxMCAr ICgqcCAtICcwJyk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMzoJCQkvKiBTZWNvbmRzICovCisJ CXNzID0gc3MgKiAxMCArICgqcCAtICcwJyk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgNDoJCQkv KiBGcmFjdGlvbiBvZiBzZWNvbmQgKi8KKwkJaWYgKGZmIDwgMCkKKwkJICBmZiA9ICgqcCA+ICc0 JykgPyAxIDogMDsKKwkJYnJlYWs7CisJICAgIH0KKwl9IGVsc2UgaWYgKCpwID09ICc6JykgewkJ LyogQ29sb24gKi8KKwkgICAgc3RhdGUrKzsKKwkgICAgZCA9IDA7CisJICAgIGlmIChzdGF0ZSA+ IDMpIHsKKwkJbWFrZXN0cigmY21kYXRlbXNnLCJUb28gbWFueSB0aW1lIGZpZWxkcyIpOworCQlk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJCXJldHVybihOVUxMKTsKKwkg ICAgfQorCX0gZWxzZSBpZiAoKnAgPT0gJy4nKSB7CisJICAgIGlmIChzdGF0ZSA9PSAzKSB7CisJ CXN0YXRlID0gNDsKKwkJZCA9IDA7CisJICAgIH0gZWxzZSB7CisJCW1ha2VzdHIoJmNtZGF0ZW1z ZywiSW1wcm9wZXIgZnJhY3Rpb24iKTsKKwkJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVt c2csLTEpOworCQlyZXR1cm4oTlVMTCk7CisJICAgIH0KKwl9IGVsc2UgaWYgKCpwID09IFNQKSB7 CQkvKiBTcGFjZSAqLworCSAgICB3aGlsZSAoKnAgJiYgKCpwID09IFNQKSkJLyogcG9zaXRpb24g dG8gZmlyc3Qgbm9uc3BhY2UgKi8KKwkgICAgICBwKys7CisJICAgIGJyZWFrOworCX0gZWxzZSBp ZiAoaXNhbHBoYSgqcCkpIHsJLyogQU0vUE0vWiBvciB0aW1lem9uZSAqLworCSAgICBicmVhazsK Kwl9IGVsc2UgaWYgKCpwID09ICcrJyB8fCAqcCA9PSAnLScpIHsgLyogR01UIG9mZnNldCAqLwor CSAgICBicmVhazsKKwl9IGVsc2UgeworCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQg dGltZSBjaGFyYWN0ZXJzIik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNn LC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOworCX0KKwlwKys7CisgICAgfQorICAgIGlmICghKnAp CQkJCS8qIElmIG5vdGhpbmcgbGVmdCAqLworICAgICAgZ290byB4Y21kYXRlOwkJCS8qIGdvIGZp bmlzaCB1cCAqLworCisgICAgLyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIEhILCBNTSwgU1MsIGFu ZCBGRiAqLworICAgIC8qIE5vdyBoYW5kbGUgdGhlIHJlc3Q6IEFNLCBQTSwgYW5kL29yIHRpbWV6 b25lIGluZm8gKi8KKworICAgIGlmICghY2tzdHJjbXAocCwiYW0iLDIsMCkpIHsJLyogQU0vUE0u Li4gKi8KKwlwbWZsYWcgPSAwOworCXAgKz0gMjsKKyAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChw LCJhLm0uIiw0LDApKSB7CisJcG1mbGFnID0gMDsKKwlwICs9IDQ7CisgICAgfSBlbHNlIGlmICgh Y2tzdHJjbXAocCwicG0iLDIsMCkpIHsKKwlwbWZsYWcgPSAxOworCXAgKz0gMjsKKyAgICB9IGVs c2UgaWYgKCFja3N0cmNtcChwLCJwLm0uIiw0LDApKSB7CisJcG1mbGFnID0gMTsKKwlwICs9IDQ7 CisgICAgfQorICAgIGlmIChwbWZsYWcgJiYgaGggPCAxMikJCS8qIElmIFBNIHdhcyBnaXZlbiAq LworICAgICAgaGggKz0gMTI7CQkJCS8qIGFkZCAxMiB0byB0aGUgaG91ciAqLworCisgICAgLyog Tm93IGhhbmRsZSB0aW1lem9uZSAqLworCisgIGNtdGltZXpvbmU6CisgICAgZGVidWcoRjExMCwi Y21jdnRkYXRlIHRpbWV6b25lIixwLDApOworCisgICAgemhoID0gMDsJCQkJLyogR01UIG9mZnNl dCBISCAqLworICAgIHptbSA9IDA7CQkJCS8qIEdNVCBvZmZzZXQgTU0gKi8KKyAgICBnbXRzaWdu ID0gMDsJCQkvKiBTaWduIG9mIEdNVCBvZmZzZXQgKi8KKyAgICBpc2dtdCA9IDA7CQkJCS8qIDEg aWYgdGltZSBpcyBHTVQgKi8KKworICAgIHdoaWxlICgqcCAmJiAqcCA9PSBTUCkJCS8qIEdvYmJs ZSBzcGFjZXMgKi8KKyAgICAgIHArKzsKKyAgICBpZiAoISpwKQkJCQkvKiBJZiBub3RoaW5nIGxl ZnQgKi8KKyAgICAgIGdvdG8geGNtZGF0ZTsJCQkvKiB3ZSdyZSBkb25lICovCisKKyAgICBpZiAo aXNhbHBoYSgqcCkpIHsJCQkvKiBTb21ldGhpbmcgbGVmdCAqLworCWludCB6b25lID0gMDsJCQkv KiBBbHBoYWJldGljIG11c3QgYmUgdGltZXpvbmUgKi8KKwlwMiA9IHA7CQkJCS8qIElzb2xhdGUg dGltZXpvbmUgKi8KKwlwKys7CisJd2hpbGUgKGlzYWxwaGEoKnApKQorCSAgcCsrOworCXAzID0g cDsKKwljYyA9ICpwOworCSpwID0gTlVMOworCXAgPSBwMjsJCQkJLyogSGF2ZSB0aW1lem9uZSwg bG9vayBpdCB1cCAqLworCXpvbmUgPSBsb29rdXAodXNhdHoscCxudXNhdHosTlVMTCk7CisJZGVi dWcoRjExMSwiY21jdnRkYXRlIHRpbWV6b25lIGFscGhhIixwLHpvbmUpOworCisJaWYgKHpvbmUg PCAwKSB7CQkJLyogTm90IGZvdW5kICovCisJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVW5rbm93 biB0aW1lem9uZSIpOworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7 CisJICAgIHJldHVybihOVUxMKTsKKwl9CisJaXNnbXQrKzsJCQkvKiBBbGwgZGF0ZXMgYXJlIEdN VCBmcm9tIGhlcmUgZG93biAqLworCWlmICh6b25lICE9IDApIHsJCS8qIEJ1dCBub3QgdGhpcyBv bmUgc28gbWFrZSBpdCBHTVQgKi8KKwkgICAgaGggKz0gem9uZTsJCQkvKiBSRkMgODIyIHRpbWV6 b25lOiBFU1QgZXRjICovCisJICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBoaCArIHpvbmUiLCIi LGhoKTsKKwkgICAgaWYgKGhoID4gMjMpIHsJCS8qIE9mZnNldCBjcm9zc2VzIGRhdGUgYm91bmRh cnkgKi8KKwkJaW50IGk7CisJCWxvbmcgamQ7CisJCWpkID0gbWpkKHl5eXltbWRkKTsJLyogR2V0 IE1KRCAqLworCQlqZCArPSBoaCAvIDI0OwkJLyogQWRkIG5ldyBkYXkocykgKi8KKwkJaGggPSBo aCAlIDI0OwkJLyogYW5kIGNvbnZlcnQgYmFjayB0byB5eXl5bW1kZCAqLworCQlja3N0cm5jcHko eXl5eW1tZGQsbWpkMmRhdGUoamQpLFlZWVlNTUREKTsKKwkJZGVidWcoRjExMSwiY21jdnRkYXRl IHpvbmUtYWRqdXN0ZWQgZGF0ZSIseXl5eW1tZGQsaGgpOworCQlmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKQorCQkgIHllYXJidWZbaV0gPSB5eXl5bW1kZFtpXTsKKwkJeWVhcmJ1Zls0XSA9IE5VTDsK KwkJbW9uYnVmWzBdID0geXl5eW1tZGRbNF07CisJCW1vbmJ1ZlsxXSA9IHl5eXltbWRkWzVdOwor CQltb25idWZbMl0gPSBOVUw7CisJCWRheWJ1ZlswXSA9IHl5eXltbWRkWzZdOworCQlkYXlidWZb MV0gPSB5eXl5bW1kZFs3XTsKKwkJZGF5YnVmWzJdID0gTlVMOworCQlkYXkgPSBkYXlidWY7CisJ CW5kYXkgPSBhdG9pKGRheWJ1Zik7CisJCW1vbnRoID0gbW9uYnVmOworCQl5ZWFyID0geWVhcmJ1 ZjsKKwkgICAgfQorCX0KKwlwID0gcDM7CQkJCS8qIFB1dCBiYWNrIHdoYXRldmVyIHdlIHBva2Vk IGFib3ZlICovCisJKnAgPSBjYzsKKworICAgIH0gZWxzZSBpZiAoKnAgPT0gJysnIHx8ICpwID09 ICctJykgeyAvKiBHTVQvVVRDIG9mZnNldCAqLworCXAzID0gcDsKKwlkZWJ1ZyhGMTEwLCJjbWN2 dGRhdGUgdGltZXpvbmUgR01UIG9mZnNldCIscCwwKTsKKwlnbXRzaWduID0gKCpwID09ICcrJykg PyAtMSA6IDE7CisJaXNnbXQrKzsKKwlwKys7CisJd2hpbGUgKCpwID09IFNQKSBwKys7CisJZCA9 IDA7CisJcDIgPSBwOworCXdoaWxlIChpc2RpZ2l0KCpwKSkgewkJLyogQ291bnQgZGlnaXRzICov CisJICAgIGQrKzsKKwkgICAgcCsrOworCX0KKwlpZiAoZCAhPSA0KSB7CQkJLyogU3RyaWN0IFJG QyBbMl04MjIgKi8KKwkgICAgaXNnbXQgPSAwOwkJCS8qIElmIG5vdCBleGFjdGx5IDQgZGlnaXRz ICovCisJICAgIHAgPSBwMzsJCQkvKiBpdCdzIG5vdCBhIEdNVCBvZmZzZXQuICovCisJICAgIGdv dG8gZGVsdGE7CQkJLyogU28gdHJlYXQgaXQgYXMgYSBkZWx0YSB0aW1lLiAqLworCX0KKwlkID0g KGQgJiAxICYmICpwICE9ICc6JykgPyAxIDogMDsgLyogT2RkIGltcGxpZXMgbGVhZGluZyAnMCcg Ki8KKwlwID0gcDI7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIEdNVCBvZmZzZXQgc2lnbiIscCxn bXRzaWduKTsKKwlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgR01UIG9mZnNldCBkIiwiIixkKTsKKwlz dGF0ZSA9IDE7CisJd2hpbGUgKCpwKSB7CisJICAgIGlmIChpc2RpZ2l0KCpwKSkgewkJLyogZGln aXQgKi8KKwkJaWYgKGQrKyA+IDEpIHsKKwkJICAgIHN0YXRlKys7CisJCSAgICBkID0gMTsKKwkJ fQorCQlzd2l0Y2ggKHN0YXRlKSB7CisJCSAgY2FzZSAxOgorCQkgICAgemhoID0gemhoICogMTAg KyAoKnAgLSAnMCcpOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSAyOgorCQkgICAgem1tID0gem1t ICogMTAgKyAoKnAgLSAnMCcpOworCQkgICAgYnJlYWs7CisJCSAgZGVmYXVsdDoJCS8qIElnbm9y ZSBzZWNvbmRzIG9yIGZyYWN0aW9ucyAqLworCQkgICAgYnJlYWs7CisJCX0JCQkKKwkgICAgfSBl bHNlIGlmICgqcCA9PSAnOicpIHsJLyogQ29sb24gKi8KKwkJc3RhdGUrKzsKKwkJZCA9IDA7CisJ ICAgIH0gZWxzZSBpZiAoKnAgPT0gU1AgfHwgKnAgPT0gJygnKSB7CisJCWJyZWFrOworCSAgICB9 IGVsc2UgeworCQlwID0gcDM7CQkJLyogTWF5YmUgaXQncyBub3QgYSBHTVQgb2Zmc2V0LiAqLwor CQlnb3RvIGRlbHRhOwkJLyogU28gdHJlYXQgaXQgYXMgYSBkZWx0YSB0aW1lLiAqLworCSAgICB9 CisJICAgIHArKzsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBzb3VyY2Ug c3RyaW5nIGFmdGVyIHRpbWV6b25lIixwLDApOworCisgICAgaWYgKCpwKSB7CQkJCS8qIEFueXRo aW5nIGxlZnQ/ICovCisJcDIgPSBwOworCXdoaWxlICgqcDIgPT0gU1ApCQkvKiBTa2lwIHBhc3Qg c3BhY2VzICovCisJICBwMisrOworCWlmICgqcDIgPT0gJygnKSB7CQkvKiBSRkMtODIyIGNvbW1l bnQ/ICovCisJICAgIGludCBwYyA9IDE7CQkJLyogcGFyZW4gY291bnRlciAqLworCSAgICBwMisr OworCSAgICB3aGlsZSAoKnAyKSB7CisJCWlmICgqcDIgPT0gJyknKSB7CisJCSAgICBpZiAoLS1w YyA9PSAwKSB7CisJCQlwMisrOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0gZWxzZSBpZiAoKnAy ID09ICcpJykgeworCQkgICAgcGMrKzsKKwkJfQorCQlwMisrOworCSAgICB9CQkKKwkgICAgd2hp bGUgKCpwMiA9PSBTUCkJCS8qIFNraXAgcGFzdCBzcGFjZXMgKi8KKwkgICAgICBwMisrOworCSAg ICBpZiAoISpwMikJCQkvKiBBbnl0aGluZyBsZWZ0PyAqLworCSAgICAgICpwID0gTlVMOwkJCS8q IE5vLCBlcmFzZSBjb21tZW50ICovCisJfQorCWlmICghKnAyKQkJCS8qIEFueXRoaW5nIGxlZnQ/ ICovCisJICBnb3RvIHhjbWRhdGU7CQkJLyogTm8sIGRvbmUuICovCisJcCA9IHAyOworCisgICAg ICBkZWx0YToKKwlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZGVsdGEgeXl5eW1tZGQiLHl5eXltbWRk LDApOworCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkZWx0YSB5ZWFyIix5ZWFyLDApOworCWRlYnVn KEYxMTAsImNtY3Z0ZGF0ZSBkZWx0YSBwIixwLDApOworCisJaWYgKCpwID09ICcrJyB8fCAqcCA9 PSAnLScpIHsJLyogRGVsdGEgdGltZSAqLworCSAgICBpbnQgc3RhdGUgPSBORUVEX0RBWVM7CS8q IFN0YXJ0IG9mZiBsb29raW5nIGZvciBkYXlzICovCisJICAgIGNoYXIgYyA9IDA7CisJICAgIGRz aWduID0gMTsJCQkvKiBHZXQgc2lnbiAqLworCSAgICBpZiAoKnArKyA9PSAnLScpCisJICAgICAg ZHNpZ24gPSAtMTsKKwkgICAgd2hpbGUgKCpwID09IFNQKQkJLyogU2tpcCBpbnRlcnZlbmluZyBz cGFjZXMgKi8KKwkgICAgICBwKys7CisJICAgIHdoaWxlIChzdGF0ZSkgewkJLyogRlNBIHRvIHBh cnNlIGRlbHRhIHRpbWUgKi8KKwkJaWYgKHN0YXRlIDwgMCB8fCAhaXNkaWdpdCgqcCkpIHsKKwkJ ICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBkZWx0YSB0aW1lIik7CisJCSAgICBkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJCSAgICByZXR1cm4oTlVMTCk7CisJ CX0KKwkJcDIgPSBwOwkJCS8qIEdldCBuZXh0IG51bWVyaWMgZmllbGQgKi8KKwkJd2hpbGUgKGlz ZGlnaXQoKnAyKSkKKwkJICBwMisrOworCQljID0gKnAyOwkJLyogQW5kIGJyZWFrIGNoYXJhY3Rl ciAqLworCQkqcDIgPSBOVUw7CQkvKiBUZXJtaW5hdGUgdGhlIG51bWJlciAqLworCisJCXN3aXRj aCAoc3RhdGUpIHsJLyogSW50ZXJwcmV0IGFjY29yZGluZyB0byBzdGF0ZSAqLworCQkgIGNhc2Ug TkVFRF9EQVlTOgkvKiBJbml0aWFsICovCisJCSAgICBpZiAoKGMgPT0gJy0nKSB8fAkvKiBWTVMg Zm9ybWF0ICovCisJCQkoKGMgPT0gJ2QnIHx8IGMgPT0gJ0QnKQorCQkJICYmICFpc2FscGhhKCoo cDIrMSkpKSkgeyAvKiBEYXlzICovCisJCQlkZGF5cyA9IGF0b2kocCk7CisJCQlpZiAoISoocDIr MSkpCQkJCisJCQkgIHN0YXRlID0gMDsKKwkJCWVsc2UJCSAgICAgIC8qIGlmIGFueXRoaW5nIGlz IGxlZnQgKi8KKwkJCSAgc3RhdGUgPSBORUVEX0hSUzsgICAvKiBub3cgd2Ugd2FudCBob3Vycy4g Ki8KKwkJICAgIH0gZWxzZSBpZiAoKGMgPT0gJ1cnIHx8IGMgPT0gJ3cnKSAmJiAhaXNhbHBoYSgq KHAyKzEpKSkgeworCQkJZGRheXMgPSBhdG9pKHApICogNzsgICAvKiB3ZWVrcy4uLiAqLworCQkJ aWYgKCEqKHAyKzEpKQkJCQorCQkJICBzdGF0ZSA9IDA7CisJCQllbHNlCisJCQkgIHN0YXRlID0g TkVFRF9IUlM7CisJCSAgICB9IGVsc2UgaWYgKChjID09ICdNJyB8fCBjID09ICdtJykgJiYgIWlz YWxwaGEoKihwMisxKSkpIHsKKwkJCWRtb250aHMgPSBhdG9pKHApOyAvKiBtb250aHMuLi4gKi8K KwkJCWlmICghKihwMisxKSkJCQkKKwkJCSAgc3RhdGUgPSAwOworCQkJZWxzZQorCQkJICBzdGF0 ZSA9IE5FRURfSFJTOworCQkgICAgfSBlbHNlIGlmICgoYyA9PSAnWScgfHwgYyA9PSAneScpICYm ICFpc2FscGhhKCoocDIrMSkpKSB7CisJCQlkeWVhcnMgPSBhdG9pKHApOyAvKiB5ZWFycy4uLiAq LworCQkJaWYgKCEqKHAyKzEpKQkJCQorCQkJICBzdGF0ZSA9IDA7CisJCQllbHNlCisJCQkgIHN0 YXRlID0gTkVFRF9IUlM7CisJCSAgICB9IGVsc2UgaWYgKGMgPT0gJzonKSB7IC8qIGRlbGltaXRl ciBpcyBjb2xvbiAqLworCQkJZGhvdXJzID0gYXRvaShwKTsgIC8qIHNvIGl0J3MgaG91cnMgKi8K KwkJCXN0YXRlID0gTkVFRF9NSU5TOyAvKiBub3cgd2Ugd2FudCBtaW51dGVzICovCisJCSAgICB9 IGVsc2UgaWYgKCFjKSB7ICAgICAgIC8qIGVuZCBvZiBzdHJpbmcgKi8KKwkJCWRob3VycyA9IGF0 b2kocCk7ICAvKiBpdCdzIHN0aWxsIGhvdXJzICovCisJCQlzdGF0ZSA9IDA7ICAgICAgICAgLyog YW5kIHdlJ3JlIGRvbmUgKi8KKwkJICAgIH0gZWxzZSBpZiAoaXNhbHBoYShjKSB8fCBjID09IFNQ KSB7CisJCQlpZiAoYyA9PSBTUCkgewkvKiBJdCdzIGEga2V5d29yZD8gKi8KKwkJCSAgICBwMisr OwkvKiBTa2lwIHNwYWNlcyAqLworCQkJICAgIHdoaWxlICgqcDIgPT0gU1ApCisJCQkgICAgICBw MisrOworCQkJfSBlbHNlIHsJLyogb3IgcmVwbGFjZSBmaXJzdCBsZXR0ZXIgKi8KKwkJCSAgICAq cDIgPSBjOworCQkJfQorCQkJcDMgPSBwMjsJLyogcDIgcG9pbnRzIHRvIGJlZ2lubmluZyBvZiBr ZXl3b3JkICovCisJCQl3aGlsZSAoaXNhbHBoYSgqcDMpKSAvKiBGaW5kIGVuZCBvZiBrZXl3b3Jk ICovCisJCQkgIHAzKys7CisJCQljID0gKnAzOwkvKiBOVUwgaXQgb3V0IHNvIHdlIGNhbiBsb29r IGl0IHVwICovCisJCQlpZiAoKnAzKQkvKiBwMyBwb2ludHMgdG8ga2V5d29yZCB0ZXJtaW5hdG9y ICovCisJCQkgICpwMyA9IE5VTDsKKwkJCXVuaXRzID0gbG9va3VwKHRpbWV1bml0cyxwMixudW5p dHMsTlVMTCk7CisJCQlpZiAodW5pdHMgPCAwKSB7CisJCQkgICAgbWFrZXN0cigmY21kYXRlbXNn LCJJbnZhbGlkIHVuaXRzIGluIGRlbHRhIHRpbWUiKTsKKwkJCSAgICBkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJCQkgICAgcmV0dXJuKE5VTEwpOworCQkJfQorCQkJKnAy ID0gTlVMOwkvKiBSZS10ZXJtaW5hdGUgdGhlIG51bWJlciAqLworCQkJKnAzID0gYzsKKwkJCXdo aWxlICgqcDMgPT0gU1ApIC8qIFBvaW50IGF0IGZpZWxkIGFmdGVyIHVuaXRzICovCisJCQkgIHAz Kys7CisJCQlwMiA9IHAzOworCQkJc3dpdGNoICh1bml0cykgeworCQkJICBjYXNlIFRVX0RBWVM6 CisJCQkgICAgZGRheXMgPSBhdG9pKHApOworCQkJICAgIGJyZWFrOworCQkJICBjYXNlIFRVX1dF RUtTOgorCQkJICAgIGRkYXlzID0gYXRvaShwKSAqIDc7CisJCQkgICAgYnJlYWs7CisJCQkgIGNh c2UgVFVfTU9OVEhTOgorCQkJICAgIGRtb250aHMgPSBhdG9pKHApOworCQkJICAgIGJyZWFrOwor CQkJICBjYXNlIFRVX1lFQVJTOgorCQkJICAgIGR5ZWFycyA9IGF0b2kocCk7CisJCQkgICAgYnJl YWs7CisJCQl9CisJCQlpZiAoKnAyKSB7CisJCQkgICAgc3RhdGUgPSBORUVEX0hSUzsKKwkJCSAg ICBwMi0tOworCQkJfSBlbHNlCisJCQkgIHN0YXRlID0gMDsKKworCQkgICAgfSBlbHNlIHsJCS8q IEFueXRoaW5nIGVsc2UgKi8KKwkJCXN0YXRlID0gLTE7CS8qIGlzIGFuIGVycm9yICovCisJCSAg ICB9CisJCSAgICBicmVhazsKKwkJICBjYXNlIE5FRURfSFJTOgkvKiBMb29raW5nIGZvciBob3Vy cyAqLworCQkgICAgZGVidWcoRjAwMCwiY21jdnRkYXRlIE5FRURfSFJTIixwLGMpOworCQkgICAg aWYgKGMgPT0gJzonKSB7CisJCQlkaG91cnMgPSBhdG9pKHApOworCQkJc3RhdGUgPSBORUVEX01J TlM7CisJCSAgICB9IGVsc2UgaWYgKCFjKSB7CisJCQlkaG91cnMgPSBhdG9pKHApOworCQkJc3Rh dGUgPSAwOworCQkgICAgfSBlbHNlIHsKKwkJCXN0YXRlID0gLTE7CisJCSAgICB9CisJCSAgICBi cmVhazsKKwkJICBjYXNlIE5FRURfTUlOUzoJLyogTG9va2luZyBmb3IgbWludXRlcyAqLworCQkg ICAgaWYgKGMgPT0gJzonKSB7CisJCQlkbWlucyA9IGF0b2kocCk7CisJCQlzdGF0ZSA9IE5FRURf U0VDUzsKKwkJICAgIH0gZWxzZSBpZiAoIWMpIHsKKwkJCWRtaW5zID0gYXRvaShwKTsKKwkJCXN0 YXRlID0gMDsKKwkJICAgIH0gZWxzZSB7CisJCQlzdGF0ZSA9IC0xOworCQkgICAgfQorCQkgICAg YnJlYWs7CisJCSAgY2FzZSBORUVEX1NFQ1M6CS8qIExvb2tpbmcgZm9yIHNlY29uZHMgKi8KKwkJ ICAgIGlmIChjID09ICcuJykgeworCQkJZHNlY3MgPSBhdG9pKHApOworCQkJc3RhdGUgPSBORUVE X0ZSQUM7CisJCSAgICB9IGVsc2UgaWYgKCFjKSB7CisJCQlkc2VjcyA9IGF0b2kocCk7CisJCQlz dGF0ZSA9IDA7CisJCSAgICB9IGVsc2UgeworCQkJc3RhdGUgPSAtMTsKKwkJICAgIH0KKwkJICAg IGJyZWFrOworCQkgIGNhc2UgTkVFRF9GUkFDOgkvKiBGcmFjdGlvbiBvZiBzZWNvbmQgKi8KKwkJ ICAgIGlmICghYyAmJiByZGlnaXRzKHApKSB7CisJCQlpZiAoKnAgPiAnNCcpCisJCQkgIGRzZWNz Kys7CisJCQlzdGF0ZSA9IDA7CisJCSAgICB9IGVsc2UgeworCQkJc3RhdGUgPSAtMTsKKwkJICAg IH0KKwkJICAgIGJyZWFrOworCQl9CisJCWlmIChjKQkJCS8qIG5leHQgZmllbGQgaWYgYW55ICov CisJCSAgcCA9IHAyICsgMTsKKwkgICAgfQorCSAgICBoYXZlZGVsdGEgPSAxOworCisJfSBlbHNl IHsKKwkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJFeHRyYW5lb3VzIG1hdGVyaWFsIGF0IGVuZCIp OworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJICAgIHJldHVy bihOVUxMKTsKKwl9CisgICAgfQorCisgeGNtZGF0ZToKKworICAgIGlmICgodCAhPSAyICYmIGho ID4gMjQpIHx8IGhoIDwgMCkgeyAvKiBIb3VyIHJhbmdlIGNoZWNrICovCisJbWFrZXN0cigmY21k YXRlbXNnLCJJbnZhbGlkIGhvdXJzIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVt c2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKG1tID4gNTkpIHsJCQkvKiBN aW51dGUgcmFuZ2UgY2hlY2sgKi8KKwltYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgbWludXRl cyIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVM TCk7CisgICAgfQorICAgIGlmIChmZiA+IDApIHsJCQkvKiBGcmFjdGlvbiBvZiBzZWNvbmQ/ICov CisJaWYgKHNzIDwgNTkpIHsKKwkgICAgc3MrKzsKKwkgICAgZmYgPSAwOworCX0gZWxzZSBpZiAo bW0gPCA1OSkgeworCSAgICBzcyA9IDA7CisJICAgIG1tKys7CisJICAgIGZmID0gMDsKKwl9IGVs c2UgaWYgKGhoIDwgMjQpIHsKKwkgICAgc3MgPSAwOworCSAgICBtbSA9IDA7CisJICAgIGhoKys7 CisJICAgIGZmID0gMDsKKwl9CisJLyogTXVzdCBhZGQgYSBkYXkgLS0gbGVhdmUgZmYgYXQgMS4u LiAqLworCS8qIChETyBTT01FVEhJTkcgQUJPVVQgVEhJUyBMQVRFUikgKi8KKyAgICB9CisgICAg aWYgKHNzID4gNjApIHsJCQkvKiBTZWNvbmRzIHJhbmdlIGNoZWNrICovCisJbWFrZXN0cigmY21k YXRlbXNnLCJJbnZhbGlkIHNlY29uZHMiKTsgLyogNjAgaXMgb2sgYmVjYXVzZSBvZiAqLworCWRl YnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsgIC8qIExlYXAgU2Vjb25kLiAqLwor CXJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKChtbSA8IDAgfHwgc3MgPCAwKSB8fAorCSh0 ICE9IDIgJiYgKHNzID4gMCB8fCBtbSA+IDApICYmIGhoID4gMjMpKSB7CisJbWFrZXN0cigmY21k YXRlbXNnLCJJbnZhbGlkIG1pbnV0ZXMgb3Igc2Vjb25kcyIpOworCWRlYnVnKEYxMTEsImNtY3Z0 ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGRlYnVnKEYx MTAsImNtY3Z0ZGF0ZSB5ZWFyIix5ZWFyLDApOworICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBt b250aCIsbW9udGgsMCk7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIG5kYXkiLCIiLG5kYXkp OworICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBoaCIsIiIsaGgpOworICAgIGRlYnVnKEYxMDEs ImNtY3Z0ZGF0ZSBtbSIsIiIsbW0pOworICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBzcyIsIiIs c3MpOworICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBnbXRzaWduIiwiIixnbXRzaWduKTsKKyAg ICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgemhoIiwiIix6aGgpOworICAgIGRlYnVnKEYxMDEsImNt Y3Z0ZGF0ZSB6bW0iLCIiLHptbSk7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGlzZ210Iiwi Iixpc2dtdCk7CisKKyNpZmRlZiBaTE9DQUxUSU1FCisvKiBIYW5kbGUgdGltZXpvbmUgLS0gZmly c3QgY29udmVydCB0byBHTVQgKi8KKworICAgIHpkZCA9IDA7CQkJCS8qIERheXMgY2hhbmdlZCAq LworICAgIGlmIChpc2dtdCAmJiAoem1tIHx8IHpoaCkpIHsJLyogSWYgR01UIG9mZnNldCBnaXZl biAqLworCWxvbmcgc2VjMSwgc2VjMiwgeno7CisJc2VjMSA9IHNzICsgNjAgKiBtbSArIDM2MDAg KiBoaDsKKwlzZWMyID0gZ210c2lnbiAqICg2MCAqIHptbSArIDM2MDAgKiB6aGgpOworCXNlYzEg Kz0gc2VjMjsKKwlpZiAoc2VjMSA8IDApIHsKKwkgICAgc2VjMSA9IDAgLSBzZWMxOworCSAgICB6 ZGQgPSAwTCAtIChzZWMxIC8gODY0MDBMKTsKKwkgICAgc2VjMSA9IHNlYzEgJSA4NjQwMEw7CisJ fSBlbHNlIGlmIChzZWMxID4gODY0MDBMKSB7CisJICAgIHpkZCA9IHNlYzEgLyA4NjQwMEw7CisJ ICAgIHNlYzEgPSBzZWMxICUgODY0MDBMOworCX0KKwlzcyA9IHNlYzEgJSA2MDsKKwl6eiA9IHNl YzEgLyA2MDsKKwltbSA9IHp6ICUgNjA7CisJaGggPSB6eiAvIDYwOworCWRlYnVnKEYxMDEsImNt Y3Z0ZGF0ZSBORVcgaGgiLCIiLGhoKTsKKwlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgTkVXIG1tIiwi IixtbSk7CisJZGVidWcoRjEwMSwiY21jdnRkYXRlIE5FVyBkZCIsIiIsemRkKTsKKworLyogQXQg dGhpcyBwb2ludCBoaDptbTpzcyBpcyBpbiBHTVQgYW5kIHpkZCBpcyB0aGUgY2FsZW5kYXIgYWRq dXN0bWVudCAqLworCisgICAgfQorI2VuZGlmIC8qIFpMT0NBTFRJTUUgKi8KKworICAgIGlmICh5 eXl5bW1kZFswXSAmJiAheWVhcikgeworCWNrc3RybmNweSh5ZWFyYnVmLHl5eXltbWRkLDUpOwor CWNrc3RybmNweShtb25idWYsJnl5eXltbWRkWzRdLDMpOworCWNrc3RybmNweShkYXlidWYsJnl5 eXltbWRkWzZdLDMpOworCXllYXIgPSB5ZWFyYnVmOworCW1vbnRoID0gbW9uYnVmOworCWRheSA9 IGRheWJ1ZjsKKwluZGF5ID0gYXRvaShkYXlidWYpOworICAgIH0KKyAgICBzcHJpbnRmKHpidWYs IiUwNGQlMDJkJTAyZCAlMDJkOiUwMmQ6JTAyZCIsIC8qIFNBRkUgKi8KKwkgICAgYXRvaSh5ZWFy KSxhdG9pKG1vbnRoKSxuZGF5LGhoLG1tLHNzCisJICAgICk7CisgICAgZHAgPSB6YnVmOworCisj aWZkZWYgWkxPQ0FMVElNRQorICAgIC8qIE5vdyBjb252ZXJ0IGZyb20gR01UIHRvIGxvY2FsIHRp bWUgKi8KKworICAgIGlmIChpc2dtdCkgewkJCS8qIElmIEdNVCBjb252ZXJ0IHRvIGxvY2FsIHRp bWUgKi8KKwlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgR01UIDEiLGRwLDApOworCWlmICh6ZGQpIHsJ CQkvKiBBcHBseSBhbnkgY2FsZW5kYXIgYWRqdXN0bWVudCAqLworCSAgICBsb25nIHp6OworCSAg ICB6eiA9IG1qZChkcCkgKyB6ZGQ7CisJICAgIHNwcmludGYoemJ1ZiwiJXMgJTAyZDolMDJkOiUw MmQiLG1qZDJkYXRlKHp6KSxoaCxtbSxzcyk7CisJfQorCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBH TVQgMiIsZHAsMCk7CisJaWYgKChwID0gemxvY2FsdGltZShkcCkpKSB7CisJICAgIGRlYnVnKEYx MTAsImNtY3Z0ZGF0ZSBhc2N0aW1lIHpsb2NhbHRpbWUiLHAsMCk7CisJICAgIGlmIChwKSBja3N0 cm5jcHkoemJ1ZixwLDE4KTsKKwl9CisJZGVidWcoRjExMCwiY21jdnRkYXRlIEdNVCAzIixkcCww KTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCSAgeWVhcmJ1ZltpXSA9IGRwW2ldOworCXll YXJidWZbNF0gPSBOVUw7CisJbW9uYnVmWzBdID0gZHBbNF07CisJbW9uYnVmWzFdID0gZHBbNV07 CisJbW9uYnVmWzJdID0gTlVMOworCWRheWJ1ZlswXSA9IGRwWzZdOworCWRheWJ1ZlsxXSA9IGRw WzddOworCWRheWJ1ZlsyXSA9IE5VTDsKKwlkYXkgPSBkYXlidWY7CisJbmRheSA9IGF0b2koZGF5 YnVmKTsKKwltb250aCA9IG1vbmJ1ZjsKKwl5ZWFyID0geWVhcmJ1ZjsKKwloaCA9IGF0b2koJmRw WzldKTsKKwltbSA9IGF0b2koJmRwWzEyXSk7CisJc3MgPSBhdG9pKCZkcFsxNV0pOworICAgIH0K KyNlbmRpZiAvKiBaTE9DQUxUSU1FICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cp IHsKKwlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaG91ciIsIiIsaGgpOworCWRlYnVnKEYxMDEsImNt Y3Z0ZGF0ZSBtaW51dGUiLCIiLG1tKTsKKwlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgc2Vjb25kIiwi Iixzcyk7CisgICAgfQorI2VuZGlmIC8qIERFQkxPRyAqLworCisgICAgbWFrZXN0cigmY21kYXRl bXNnLE5VTEwpOworICAgIGlmIChoYXZlZGVsdGEpIHsKKyNpZmRlZiBERUJVRworCWlmIChkZWJs b2cpIHsKKwkgICAgZGVidWcoRjExMCwiY21jdnRkYXRlIGJhc2UgIixkcCwwKTsKKwkgICAgZGVi dWcoRjEwMSwiY21jdnRkYXRlIGRlbHRhIHNpZ24iLCIiLGRzaWduKTsKKwkgICAgZGVidWcoRjEw MSwiY21jdnRkYXRlIGRlbHRhIHlycyAiLCIiLGR5ZWFycyk7CisJICAgIGRlYnVnKEYxMDEsImNt Y3Z0ZGF0ZSBkZWx0YSBtb3MgIiwiIixkbW9udGhzKTsKKwkgICAgZGVidWcoRjEwMSwiY21jdnRk YXRlIGRlbHRhIGRheXMiLCIiLGRkYXlzKTsKKwkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRl bHRhIGhycyAiLCIiLGRob3Vycyk7CisJICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBkZWx0YSBt aW5zIiwiIixkbWlucyk7CisJICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBkZWx0YSBzZWNzIiwi Iixkc2Vjcyk7CisJfQorI2VuZGlmIC8qIERFQkxPRyAqLworCWlmICghKGRwID0gY21kZWx0YShh dG9pKHllYXIpLAorCQkgICAgYXRvaShtb250aCksCisJCSAgICBuZGF5LCBoaCwgbW0sIHNzLAor CQkgICAgZHNpZ24sIGR5ZWFycywgZG1vbnRocywgZGRheXMsIGRob3VycywgZG1pbnMsIGRzZWNz KSkpIHsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCSAgICBy ZXR1cm4oTlVMTCk7CisJfQorICAgIH0KKworICB4Y3Z0ZGF0ZToJCQkJLyogRXhpdCBwb2ludCBm b3Igc3VjY2VzcyAqLworICAgIHsKKwlpbnQgbGVuLCBrLCBuOworCWNoYXIgKiBwOworCWRlYnVn KEYxMTAsImNtY3Z0ZGF0ZSB4Y3Z0ZGF0ZSBkcCIsZHAsMCk7CisJaWYgKCFkcCkgZHAgPSAiIjsJ CS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwlpZiAoISpkcCkgcmV0dXJuKE5VTEwpOwkJLyogLi4u ICovCisJbGVuID0gc3RybGVuKGRwKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgcmVzdWx0Iixk cCxsZW4pOworCWsgPSBjbWRhdGVicCAtIChjaGFyICopY21kYXRlYnVmOyAvKiBTcGFjZSB1c2Vk ICovCisJbiA9IENNREFURUJVRiAtIGsgLSAxOwkJLyogU3BhY2UgbGVmdCAqLworCWlmIChuIDwg bGVuKSB7CQkJLyogTm90IGVub3VnaD8gKi8KKwkgICAgY21kYXRlYnAgPSBjbWRhdGVidWY7CS8q IFdyYXAgYXJvdW5kICovCisJICAgIG4gPSBDTURBVEVCVUY7CisJfQorCWNrc3RybmNweShjbWRh dGVicCxkcCxuKTsKKwlwID0gY21kYXRlYnA7CisJY21kYXRlYnAgKz0gbGVuICsgMTsKKwlyZXR1 cm4ocCk7CisgICAgfQorfQorCitpbnQKK2NtdmRhdGUoZCkgY2hhciAqIGQ7IHsJCQkvKiBWZXJp ZnkgZGF0ZS10aW1lICovCisgICAgaW50IGk7CisgICAgaWYgKCFkKSByZXR1cm4oMCk7CisgICAg aWYgKChpbnQpc3RybGVuKGQpICE9IDE3KSByZXR1cm4oMCk7CisgICAgZm9yIChpID0gMDsgaSA8 IDg7IGkrKykgeyBpZiAoIWlzZGlnaXQoZFtpXSkpIHJldHVybigwKTsgfQorICAgIGlmICghaXNk aWdpdChkWzldKSAgfHwgIWlzZGlnaXQoZFsxMF0pIHx8CisJIWlzZGlnaXQoZFsxMl0pIHx8ICFp c2RpZ2l0KGRbMTNdKSB8fAorCSFpc2RpZ2l0KGRbMTVdKSB8fCAhaXNkaWdpdChkWzE2XSkpCisg ICAgICByZXR1cm4oMCk7CisgICAgaWYgKCFja3N0cmNocigiIFR0Xy06IixkWzhdKSkgcmV0dXJu KDApOworICAgIGlmIChkWzExXSAhPSAnOicgJiYgZFsxNF0gIT0gJzonKSByZXR1cm4oMCk7Cisg ICAgcmV0dXJuKDEpOworfQorCisvKiBjIG0gZCBpIGYgZiBkIGEgdCBlICAtLSAgR2V0IGRpZmZl cmVuY2UgYmV0d2VlbiB0d28gZGF0ZS10aW1lcyAqLworCitjaGFyICoKK2NtZGlmZmRhdGUoZDEs ZDIpIGNoYXIgKiBkMSwgKiBkMjsgeworICAgIGNoYXIgZDFidWZbOV0sIGQyYnVmWzldOworICAg IGNoYXIgeDFidWZbMThdLCB4MmJ1ZlsxOF07CisgICAgY2hhciAqIHA7CisKKyAgICBpbnQgaGgx ID0gMCwgbW0xID0gMCwgc3MxID0gMDsKKyAgICBpbnQgaGgyID0gMCwgbW0yID0gMCwgc3MyID0g MDsKKyAgICBpbnQgaGgsIG1tLCBzczsKKyAgICBpbnQgc2lnbjsKKyAgICBsb25nIGpkMSwgamQy LCBqZCwgZjEsIGYyLCBmeDsKKyAgICBzdGF0aWMgY2hhciByZXN1bHRbMjRdLCAqcnA7CisKKyAg ICBkZWJ1ZyhGMTEwLCJjbWRpZmZkYXRlIGQxIEEiLGQxLDApOworICAgIGRlYnVnKEYxMTAsImNt ZGlmZmRhdGUgZDIgQSIsZDIsMCk7CisKKyAgICBpZiAoIShwID0gY21jdnRkYXRlKGQxLDEpKSkJ CS8qIENvbnZlcnQgZGF0ZXMgdG8gc3RhbmRhcmQgZm9ybWF0ICovCisgICAgICByZXR1cm4oTlVM TCk7CisgICAgY2tzdHJuY3B5KHgxYnVmLHAsMTgpOworICAgIGQxID0geDFidWY7CisKKyAgICBp ZiAoIShwID0gY21jdnRkYXRlKGQyLDEpKSkKKyAgICAgIHJldHVybihOVUxMKTsKKyAgICBja3N0 cm5jcHkoeDJidWYscCwxOCk7CisgICAgZDIgPSB4MmJ1ZjsKKworICAgIGRlYnVnKEYxMTAsImNt ZGlmZmRhdGUgZDEgQiIsZDEsMCk7CisgICAgZGVidWcoRjExMCwiY21kaWZmZGF0ZSBkMiBCIixk MiwwKTsKKyAgICBpZiAoIWNtdmRhdGUoZDEpIHx8ICFjbXZkYXRlKGQyKSkKKyAgICAgIHJldHVy bihOVUxMKTsKKworICAgIGhoMSA9IGF0b2koJmQxWzldKTsJCQkvKiBHZXQgaG91cnMsIG1pbnV0 ZXMsIGFuZCBzZWNvbmRzICovCisgICAgbW0xID0gYXRvaSgmZDFbMTJdKTsJCS8qIGZvciBmaXJz dCBkYXRlICovCisgICAgc3MxID0gYXRvaSgmZDFbMTVdKTsKKyAgICBja3N0cm5jcHkoZDFidWYs ZDEsOSk7CisKKyAgICBoaDIgPSBhdG9pKCZkMls5XSk7CQkJLyogZGl0dG8gZm9yIHNlY29uZCBk YXRlICovCisgICAgbW0yID0gYXRvaSgmZDJbMTJdKTsKKyAgICBzczIgPSBhdG9pKCZkMlsxNV0p OworICAgIGNrc3RybmNweShkMmJ1ZixkMiw5KTsKKyAgICAKKyAgICBqZDEgPSBtamQoZDFidWYp OwkJCS8qIEdldCB0aGUgdHdvIEp1bGlhbiBkYXRlcyAqLworICAgIGpkMiA9IG1qZChkMmJ1Zik7 CisgICAgZjEgPSBzczEgKyA2MCAqIG1tMSArIDM2MDAgKiBoaDE7CS8qIENvbnZlcnQgZmlyc3Qg dGltZSB0byBzZWNvbmRzICovCisKKyAgICBmMiA9IHNzMiArIDYwICogbW0yICsgMzYwMCAqIGho MjsJLyogRGl0dG8gZm9yIHNlY29uZCB0aW1lICovCisgICAgZGVidWcoRjEwMSwiY21kaWZmZGF0 ZSBqZDEiLCIiLGpkMSk7CisgICAgZGVidWcoRjEwMSwiY21kaWZmZGF0ZSBmMSIsIiIsZjEpOwor ICAgIGRlYnVnKEYxMDEsImNtZGlmZmRhdGUgamQyIiwiIixqZDIpOworICAgIGRlYnVnKEYxMDEs ImNtZGlmZmRhdGUgZjIiLCIiLGYyKTsKKyAgCisgICAgaWYgKGpkMiA+IGpkMSB8fCAoamQxID09 IGpkMiAmJiBmMiA+IGYxKSkgeworICAgICAgICBzaWduID0gLTE7IAorICAgICAgICBpZiAoZjEg PiBmMikge2pkMi0tOyBmMiArPSA4NjQwMEw7fQorICAgICAgICBqZCA9IGpkMiAtIGpkMTsKKyAg ICAgICAgZnggPSBmMiAtIGYxOworICAgIH0gZWxzZSB7CisgICAgICAgIHNpZ24gPSAxOworICAg ICAgICBpZiAoZjIgPiBmMSkge2pkMS0tOyBmMSArPSA4NjQwMEw7fQorICAgICAgICBqZCA9IGpk MSAtIGpkMjsKKyAgICAgICAgZnggPSBmMSAtIGYyOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJj bWRpZmZkYXRlIHNpZ24gamQiLHNpZ248MD8iLSI6IisiLGpkKTsKKyAgICBkZWJ1ZyhGMTAxLCJj bWRpZmZkYXRlIGZ4IiwiIixmeCk7CisgIAorICAgIGhoID0gKGludCkgKGZ4IC8gMzYwMEwpOwkJ LyogQ29udmVydCBzZWNvbmRzIHRvIGhoOm1tOnNzICovCisKKyAgICBtbSA9IChpbnQpIChmeCAl IDM2MDBMKSAvIDYwTDsKKyAgICBzcyA9IChpbnQpIChmeCAlIDM2MDBMKSAlIDYwTDsKKworICAg IHJwID0gcmVzdWx0OwkJCS8qIEZvcm1hdCB0aGUgcmVzdWx0ICovCisgICAgKnJwKysgPSAoc2ln biA8IDApID8gJy0nIDogJysnOworICAgIGlmIChqZCAhPSAwICYmIGhoK21tK3NzID09IDApIHsK KwlzcHJpbnRmKHJwLCIlbGRkIixqZCk7CisgICAgfSBlbHNlIGlmIChqZCA9PSAwKSB7CisJaWYg KHNzID09IDApCisJICBzcHJpbnRmKHJwLCIlZDolMDJkIixoaCxtbSk7CisJZWxzZQorCSAgc3By aW50ZihycCwiJWQ6JTAyZDolMDJkIixoaCxtbSxzcyk7CisgICAgfSBlbHNlIHsKKwlpZiAoc3Mg PT0gMCkKKwkgIHNwcmludGYocnAsIiVsZGQlZDolMDJkIixqZCxoaCxtbSk7CisJZWxzZQorCSAg c3ByaW50ZihycCwiJWxkZCVkOiUwMmQ6JTAyZCIsamQsaGgsbW0sc3MpOworICAgIH0KKyAgICBk ZWJ1ZyhGMTEwLCJjbWRpZmZkYXRlIHJlc3VsdCIscmVzdWx0LDApOworICAgIHJldHVybigoY2hh ciAqKXJlc3VsdCk7Cit9CisKKyNpZm5kZWYgTk9TUEwKKy8qIHMgaCB1IGYgZiBsIGUgZCBhIHQg ZSAgLS0gIFJlYXJyYW5nZSBkYXRlIHN0cmluZyAqLworCisvKgorICBDYWxsIHdpdGg6CisgICAg QSBkYXRlIHN0cmluZyBpbiBzdGFuZGFyZCBmb3JtYXQ6IHl5eXltbWRkIGhoOm1tOnNzICh0aW1l IG9wdGlvbmFsKS4KKyAgICBPcHRpb25zOgorICAgICAgMTogUmVmb3JtYXQgZGF0ZSB0byB5eXl5 LW1tbS1kZCAobW1tID0gRW5nbGlzaCBtb250aCBhYmJyZXZpYXRpb24pLgorICAgICAgMjogUmVm b3JtYXQgZGF0ZSB0byBkZC1tbW0teXl5eSAobW1tID0gRW5nbGlzaCBtb250aCBhYmJyZXZpYXRp b24pLgorICAgICAgMzogUmVmb3JtYXQgYXMgbnVtZXJpYyB5eXl5bW1kZGhobW1zcy4KKyAgICAg IDQ6IFJlZm9ybWF0IGluIGFzY3RpbWUoKSBmb3JtYXQgU2F0IE5vdiAyNiAxMToxMDozNCAyMDA1 CisgICAgUmV0dXJuczoKKyAgICAgIFBvaW50ZXIgdG8gcmVzdWx0IGlmIGFyZ3MgdmFsaWQsIG90 aGVyd2lzZSBvcmlnaW5hbCBhcmcgcG9pbnRlci4KKyovCitjaGFyICoKK3NodWZmbGVkYXRlKHAs b3B0KSBjaGFyICogcDsgaW50IG9wdDsgeworICAgIGV4dGVybiBjaGFyICogd2tkYXlzW107Cisg ICAgaW50IGxlbjsKKyAgICBjaGFyIGlidWZbMzJdOworICAgIHN0YXRpYyBjaGFyIG9idWZbNDhd OworICAgIGNoYXIgYzsKKyAgICBpbnQgeXksIGRkLCBtbTsKKworICAgIGlmICghcCkgcCA9ICIi OworICAgIGlmICghKnApIHAgPSBja2RhdGUoKTsKKyAgICBpZiAob3B0IDwgMSB8fCBvcHQgPiA0 KQorICAgICAgcmV0dXJuKHApOworICAgIGxlbiA9IHN0cmxlbihwKTsKKyAgICBpZiAobGVuIDwg OCB8fCBsZW4gPiAzMSkgcmV0dXJuKHApOworICAgIGlmIChvcHQgPT0gNCkgewkJCS8qIEFzY3Rp bWUgZm9ybWF0ICgyNiBOb3YgMjAwNSkgKi8KKwljaGFyIGMsICogczsKKwlsb25nIHo7IGludCBr OworCWNrc3RybmNweShpYnVmLHAsMzEpOworCWsgPSBsZW47CisJd2hpbGUgKGsgPj0gMCAmJiBp YnVmW2tdID09IENSIHx8IGlidWZba10gPT0gTEYpCisJICBpYnVmW2stLV0gPSBOVUw7CisJd2hp bGUgKGsgPj0gMCAmJiBpYnVmW2tdID09IFNQIHx8IGlidWZba10gPT0gSFQpCisJICBpYnVmW2st LV0gPSBOVUw7CisJaWYgKGsgPCA5KSBja3N0cm5jcHkoJmlidWZbOF0sIiAwMDowMDowMCIsOSk7 CisJcCA9IGlidWY7CisgICAgICAgIHogPSBtamQocCk7ICAgICAgICAgICAgICAgICAgICAgLyog Q29udmVydCB0byBtb2RpZmllZCBKdWxpYW4gZGF0ZSAqLworICAgICAgICB6ID0geiAlIDdMOwor ICAgICAgICBpZiAoeiA8IDApIHsKKyAgICAgICAgICAgIHogPSAwIC0gejsKKyAgICAgICAgICAg IGsgPSA2IC0gKChpbnQpeiArIDMpICUgNzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IGsgPSAoKGludCl6ICsgMykgJSA3OwkvKiBEYXkgb2Ygd2VlayAqLworICAgICAgICB9CisJcyA9 IHdrZGF5c1trXTsKKyAgICAgICAgb2J1ZlswXSA9IHNbMF07CQkJLyogRGF5IG9mIHdlZWsgKi8K KyAgICAgICAgb2J1ZlsxXSA9IHNbMV07CisgICAgICAgIG9idWZbMl0gPSBzWzJdOworICAgICAg ICBvYnVmWzNdID0gU1A7CQkJLyogU3BhY2UgKi8KKwljID0gcFs2XTsKKyAgICAgICAgcFs2XSA9 IE5VTDsKKwltbSA9IGF0b2koJmlidWZbNF0pOwkJLyogTW9udGggKi8KKwlzID0gbW9uYW1lW21t LTFdOwkJLyogTmFtZSBvZiBtb250aCAqLworCXBbNl0gPSBjOworCisgICAgICAgIG9idWZbNF0g PSBzWzBdOwkJCS8qIE1vbnRoICovCisgICAgICAgIG9idWZbNV0gPSBzWzFdOworICAgICAgICBv YnVmWzZdID0gc1syXTsKKyAgICAgICAgb2J1Zls3XSA9IFNQOwkJCS8qIFNwYWNlICovCisJaWYg KHBbNl0gPT0gJzAnKQkJLyogRGF0ZSBvZiBtb250aCAqLworCSAgb2J1Zls4XSA9IFNQOworCWVs c2UKKwkgIG9idWZbOF0gPSBwWzZdOworICAgICAgICBvYnVmWzldID0gcFs3XTsKKwlja3N0cm5j cHkoJm9idWZbMTBdLCZwWzhdLDEwKTsJLyogVGltZSAqLworICAgICAgICBvYnVmWzE5XSA9IFNQ OwkJCS8qIFNwYWNlICovCisJb2J1ZlsyMF0gPSBwWzBdOwkJLyogWWVhciAqLworCW9idWZbMjFd ID0gcFsxXTsKKwlvYnVmWzIyXSA9IHBbMl07CisJb2J1ZlsyM10gPSBwWzNdOworCW9idWZbMjRd ID0gTlVMOworCXJldHVybigoY2hhciAqKW9idWYpOworICAgIH0KKyAgICBpZiAob3B0ID09IDMp IHsKKwlja3N0cm5jcHkob2J1ZixwLDQ4KTsKKwkvKiB5eXl5bW1kZCBoaDptbTpzcyAqLworCS8q IDAxMjM0NTY3ODkwMTIzNDU2ICovCisJLyogeXl5eW1tZGRoaG1tc3MgICAgKi8KKwlvYnVmWzhd ID0gb2J1Zls5XTsKKwlvYnVmWzldID0gb2J1ZlsxMF07CisJb2J1ZlsxMF0gPSBvYnVmWzEyXTsK KwlvYnVmWzExXSA9IG9idWZbMTNdOworCW9idWZbMTJdID0gb2J1ZlsxNV07CisJb2J1ZlsxM10g PSBvYnVmWzE2XTsKKwlvYnVmWzE0XSA9IE5VTDsKKwlyZXR1cm4oKGNoYXIgKilvYnVmKTsKKyAg ICB9CisgICAgY2tzdHJuY3B5KGlidWYscCwzMik7CisgICAgYyA9IGlidWZbNF07CQkJLyogV2Fy bmluZzogbm90IFkxMEsgY29tcGxpYW50ICovCisgICAgaWJ1Zls0XSA9IE5VTDsKKyAgICBpZiAo IXJkaWdpdHMoaWJ1ZikpCisgICAgICByZXR1cm4ocCk7CisgICAgeXkgPSBhdG9pKGlidWYpOwor ICAgIGlmICh5eSA8IDEgfHwgeXkgPiA5OTk5KQorICAgICAgcmV0dXJuKHApOworICAgIGlidWZb NF0gPSBjOworICAgIGMgPSBpYnVmWzZdOworICAgIGlidWZbNl0gPSBOVUw7CisgICAgaWYgKCFy ZGlnaXRzKCZpYnVmWzRdKSkKKyAgICAgIHJldHVybihwKTsKKyAgICBtbSA9IGF0b2koJmlidWZb NF0pOworICAgIGlmIChtbSA8IDEgfHwgbW0gPiAxMikKKyAgICAgIHJldHVybihwKTsKKyAgICBp YnVmWzZdID0gYzsKKyAgICBjID0gaWJ1Zls4XTsKKyAgICBpYnVmWzhdID0gTlVMOworICAgIGlm ICghcmRpZ2l0cygmaWJ1Zls2XSkpCisgICAgICByZXR1cm4ocCk7CisgICAgZGQgPSBhdG9pKCZp YnVmWzZdKTsKKyAgICBpYnVmWzhdID0gYzsKKyAgICBpZiAoZGQgPCAxIHx8IG1tID4gMzEpCisg ICAgICByZXR1cm4ocCk7CisgICAgLyogSUdOT1JFIFdBUk5JTkdTIEFCT1VUIG1vbmFtZVtdIFJF RlMgT1VUIE9GIFJBTkdFIC0gaXQncyBwcmVjaGVja2VkLiAqLworICAgIHN3aXRjaCAob3B0KSB7 CisgICAgICBjYXNlIDE6CisJc3ByaW50ZihvYnVmLCIlMDRkLSVzLSUwMmQlcyIseXksbW9uYW1l W21tLTFdLGRkLCZpYnVmWzhdKTsKKwlicmVhazsKKyAgICAgIGNhc2UgMjoKKwlzcHJpbnRmKG9i dWYsIiUwMmQtJXMtJTA0ZCVzIixkZCxtb25hbWVbbW0tMV0seXksJmlidWZbOF0pOworICAgIH0K KyAgICByZXR1cm4oKGNoYXIgKilvYnVmKTsKK30KKyNlbmRpZgkvKiBOT1NQTCAqLworCisvKiAg QyBLIEMgViBUIEQgQSBUIEUgIC0tICBMaWtlIGNtY3Z0ZGF0ZSgpLCBidXQgcmV0dXJucyBzdHJp bmcuICAqLworLyogIEZvciB1c2UgYnkgZGF0ZS1yZWxhdGVkIGZ1bmN0aW9ucyAqLworLyogIFNl ZSBjYWxsaW5nIGNvbnZlbnRpb25zIGZvciBjbWN2dGRhdGUoKSBhYm92ZS4gKi8KKworY2hhciAq Citja2N2dGRhdGUocCx0KSBjaGFyICogcDsgaW50IHQ7IHsKKyAgICBjaGFyICogczsKKyAgICBp ZiAoIShzID0gY21jdnRkYXRlKHAsdCkpKQorICAgICAgcmV0dXJuKCI8QkFEX0RBVEVfT1JfVElN RT4iKTsJLyogXGZibGFoKCkgZXJyb3IgbWVzc2FnZSAqLworICAgIGVsc2UKKyAgICAgIHJldHVy bihzKTsKK30KKworCisvKiAgQyBNIEQgQSBUIEUgIC0tICBQYXJzZSBhIGRhdGUgYW5kL29yIHRp bWUgICovCisKKy8qCisgIEFjY2VwdHMgZGF0ZSBpbiB2YXJpb3VzIGZvcm1hdHMuICBJZiB0aGUg ZGF0ZSBpcyByZWNvZ25pemVkLAorICB0aGlzIHJvdXRpbmUgcmV0dXJucyAwIG9yIGdyZWF0ZXIg d2l0aCB0aGUgcmVzdWx0IHN0cmluZyBwb2ludGVyCisgIHBvaW50aW5nIHRvIGEgYnVmZmVyIGNv bnRhaW5pbmcgdGhlIGRhdGUgYXMgInl5eXltbWRkIGhoOm1tOnNzIi4KKyovCitpbnQKK2NtZGF0 ZSh4aGxwLHhkZWYseHAscXVpZXQsZikgY2hhciAqeGhscCwgKnhkZWYsICoqeHA7IGludCBxdWll dDsgeHhfc3RycCBmOyB7CisgICAgaW50IHgsIHJjOworICAgIGNoYXIgKm8sICpzLCAqenEsICpk cDsKKworICAgIGNtZmxkZmxncyA9IDA7CisgICAgaWYgKCF4aGxwKSB4aGxwID0gIiI7CisgICAg aWYgKCF4ZGVmKSB4ZGVmID0gIiI7CisgICAgaWYgKCEqeGhscCkgeGhscCA9ICJEYXRlIGFuZC9v ciB0aW1lIjsKKyAgICAqeHAgPSAiIjsKKworICAgIHJjID0gY21mbGQoeGhscCx4ZGVmLCZzLCh4 eF9zdHJwKTApOworICAgIGRlYnVnKEYxMDEsImNtZGF0ZSBjbWZsZCByYyIsIiIscmMpOworICAg IGlmIChyYyA8IDApCisgICAgICByZXR1cm4ocmMpOworICAgIGRlYnVnKEYxMTAsImNtZGF0ZSAx IixzLDApOworICAgIG8gPSBzOwkJCQkvKiBSZW1lbWJlciB3aGF0IHRoZXkgdHlwZWQuICovCisg ICAgcyA9IGJyc3RyaXAocyk7CisgICAgZGVidWcoRjExMCwiY21kYXRlIDIiLHMsMCk7CisKKyAg ICB4ID0gMDsKKyAgICBpZiAoZikgewkJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMg Z2l2ZW4gKi8KKwljaGFyICogcHA7CisJenEgPSBhdHhidWY7CQkJLyogZG8gdGhlIGNvbnZlcnNp b24uICovCisJcHAgPSBhdHhidWY7CisJYXR4biA9IENNREJMOworCWlmICgoeCA9ICgqZikocywm enEsJmF0eG4pKSA8IDApIHJldHVybigtMik7CisJaWYgKCEqcHApCisJICBwcCA9IHhkZWY7CisJ aWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkgICAgaWYgKCFxdWlldCkgcHJpbnRmKCI/RXZhbHVh dGVkIGRhdGUgdG9vIGxvbmdcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlzID0gYXR4YnVm OworICAgIH0KKyAgICBkcCA9IGNtY3Z0ZGF0ZShzLDEpOworICAgIGlmICghZHApIHsKKwlpZiAo IXF1aWV0KSBwcmludGYoIj8lc1xuIixjbWRhdGVtc2cpOworCXJldHVybigtOSk7CisgICAgfQor ICAgICp4cCA9IGRwOworICAgIHJldHVybigwKTsKK30KKworI2lmZGVmIENLX1JFQ0FMTAkJCS8q IENvbW1hbmQtcmVjYWxsIGZ1bmN0aW9ucyAqLworCisvKiAgQyBNIFIgSSBOIEkgIC0tICBJbml0 aWFsaXplIG9yIGNoYW5nZSBzaXplIG9mIGNvbW1hbmQgcmVjYWxsIGJ1ZmZlciAqLworCitpbnQK K2NtcmluaShuKSBpbnQgbjsgeworICAgIGludCBpOworICAgIGlmIChyZWNhbGwgJiYgaW5fcmVj YWxsKSB7CQkvKiBGcmVlIG9sZCBzdG9yYWdlLCBpZiBhbnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwg Y21fcmVjYWxsOyBpKyspIHsKKwkgICAgaWYgKHJlY2FsbFtpXSkgeworCQlmcmVlKHJlY2FsbFtp XSk7CisJCXJlY2FsbFtpXSA9IE5VTEw7CisJICAgIH0KKwl9CisJZnJlZShyZWNhbGwpOworCXJl Y2FsbCA9IE5VTEw7CisgICAgfQorICAgIGNtX3JlY2FsbCA9IG47CQkJLyogU2V0IG5ldyBzaXpl ICovCisgICAgcmxhc3QgPSBjdXJyZW50ID0gLTE7CQkvKiBJbml0aWFsaXplIHBvaW50ZXJzICov CisgICAgaWYgKG4gPiAwKSB7CisJcmVjYWxsID0gKGNoYXIgKiopbWFsbG9jKChjbV9yZWNhbGwg KyAxKSAqIHNpemVvZihjaGFyICopKTsKKwlpZiAoIXJlY2FsbCkKKwkgIHJldHVybigxKTsKKwlm b3IgKGkgPSAwOyBpIDwgY21fcmVjYWxsOyBpKyspIHsKKwkgICAgcmVjYWxsW2ldID0gTlVMTDsK Kwl9CisJaW5fcmVjYWxsID0gMTsJCQkvKiBSZWNhbGwgYnVmZmVycyBpbml0J2QgKi8KKyAgICB9 CisgICAgcmV0dXJuKDApOworfQorCisvKiAgQyBNIEEgRCBEIE4gRSBYIFQgIC0tICBGb3JjZSBh ZGRpdGlvbiBvZiBuZXh0IGNvbW1hbmQgKi8KKworVk9JRAorY21hZGRuZXh0KCkgeworICAgIGlm IChvbl9yZWNhbGwgJiYgaW5fcmVjYWxsKSB7CS8qIEV2ZW4gaWYgaXQgZG9lc24ndCBjb21lICov CisJZm9yY2VfYWRkID0gMTsJCQkvKiBmcm9tIHRoZSBrZXlib2FyZCAqLworCW5ld2NtZCA9IDE7 CisJbm9fcmVjYWxsID0gMDsKKyAgICB9Cit9CisKKy8qICBDIE0gRyBFIFQgQyBNIEQgIC0tICBG aW5kIG1vc3QgcmVjZW50IG1hdGNoaW5nIGNvbW1hbmQgICovCisKK2NoYXIgKgorY21nZXRjbWQo cykgY2hhciAqIHM7IHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSBjdXJyZW50OyBpID49IDA7 IGktLSkgewkvKiBTZWFyY2ggYmFja3dhcmQgdGhydSBoaXN0b3J5IGxpc3QgKi8KKwlpZiAoIXJl Y2FsbFtpXSkgY29udGludWU7CS8qIFRoaXMgb25lJ3MgbnVsbCwgc2tpcCBpdCAqLworCWlmIChj a21hdGNoKHMscmVjYWxsW2ldLDAsMSkpCS8qIE1hdGNoPyAqLworCSAgcmV0dXJuKHJlY2FsbFtp XSk7CQkvKiBZZXMsIHJldHVybiBwb2ludGVyICovCisgICAgfQorICAgIHJldHVybihOVUxMKTsJ CQkvKiBObyBtYXRjaCwgcmV0dXJuIE5VTEwgcG9pbnRlciAqLworfQorI2VuZGlmIC8qIENLX1JF Q0FMTCAqLworCisvKiAgQSBEIEQgQyBNIEQgIC0tICBBZGQgYSBjb21tYW5kIHRvIHRoZSByZWNh bGwgYnVmZmVyICAqLworCitWT0lECithZGRjbWQocykgY2hhciAqIHM7IHsKKyAgICBpbnQgbGVu ID0gMCwgbnEgPSAwOworICAgIGNoYXIgKiBwOworI2lmZGVmIENLTEVBUk4KKyAgICBleHRlcm4g aW50IGxlYXJuaW5nOworI2VuZGlmIC8qIENLTEVBUk4gKi8KKworICAgIGlmICh4Y21kc3JjKQkJ CS8qIE9ubHkgZm9yIGludGVyYWN0aXZlIGNvbW1hbmRzICovCisgICAgICByZXR1cm47CisKKyAg ICBpZiAoIW5ld2NtZCkJCQkvKiBUaGUgY29tbWFuZCBoYXMgYmVlbiBoZXJlIGFscmVhZHkgKi8K KyAgICAgIHJldHVybjsJCQkJLyogc28gaWdub3JlIGl0LiAqLworICAgIG5ld2NtZCA9IDA7CQkJ CS8qIEl0J3MgbmV3IGJ1dCBkbyB0aGlzIG9ubHkgb25jZS4gKi8KKworICAgIGlmICghcykgcyA9 IGNtZGJ1ZjsKKyAgICBpZiAoc1swXSkKKyAgICAgIGxlbiA9IHN0cmxlbihzKTsKKworICAgIGlm IChsZW4gPCAxKQkJCS8qIERvbid0IHNhdmUgZW1wdHkgY29tbWFuZHMgKi8KKyAgICAgIHJldHVy bjsKKworICAgIHAgPSBzOworICAgIHdoaWxlICgqcCkgeyBpZiAoKnArKyA9PSAnPycpIG5xKys7 IH0gLyogQ291bnQgcXVlc3Rpb24gbWFya3MgKi8KKworI2lmZGVmIENLTEVBUk4KKyAgICBpZiAo bGVhcm5pbmcpCQkJLyogSWYgYSBsZWFybmVkIHNjcmlwdCBpcyBhY3RpdmUgKi8KKyAgICAgIGxl YXJuY21kKHMpOwkJCS8qIHJlY29yZCB0aGlzIGNvbW1hbmQuICovCisjZW5kaWYgLyogQ0tMRUFS TiAqLworCisgICAgZGVidWcoRjAxMCwiQ01EKFApIixzLDApOwkJLyogTWF5YmUgcmVjb3JkIGl0 IGluIHRoZSBkZWJ1ZyBsb2cgKi8KKworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreGxvZ2dp bmcpIHsJCQkvKiBNYXliZSByZWNvcmQgaXQgaW4gc3lzbG9nICovCisJaWYgKGNreHN5c2xvZyA+ PSBTWVNMR19DWCB8fCBja3hzeXNsb2cgPj0gU1lTTEdfQ00pCisJICBja3N5c2xvZyhTWVNMR19D WCwgMSwgImNvbW1hbmQiLCBzLCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KworI2lmZGVmIENLX1JFQ0FMTAorICAgIGxhc3RfcmVjYWxsID0gMDsKKworICAgIGlmIChvbl9y ZWNhbGwgJiYJCQkvKiBDb21tYW5kIHJlY2FsbCBpcyBvbj8gKi8KKwljbV9yZWNhbGwgPiAwICYm CQkvKiBSZWNhbGwgYnVmZmVyIHNpemUgaXMgPiAwPyAqLworCSFub19yZWNhbGwpIHsJCQkvKiBO b3Qgbm90IHNhdmluZyB0aGlzIGNvbW1hbmQ/ICovCisKKwlpZiAoIWZvcmNlX2FkZCAmJiBybGFz dCA+IC0xKQkvKiBJZiBwcmV2aW91cyBjb21tYW5kIHdhcyBpZGVudGljYWwgKi8KKwkgIGlmICgh c3RyY21wKHMscmVjYWxsW3JsYXN0XSkpIC8qIGRvbid0IGFkZCBhbm90aGVyIGNvcHkgKi8KKwkg ICAgcmV0dXJuOworCisJZm9yY2VfYWRkID0gMDsJCQkvKiBSZXNldCBub3cgaW4gY2FzZSBpdCB3 YXMgc2V0ICovCisKKyAgICAgICAgaWYgKHJsYXN0ID49IGNtX3JlY2FsbCAtIDEpIHsJLyogUmVj YWxsIGJ1ZmZlciBmdWxsPyAqLworCSAgICBpbnQgaTsKKwkgICAgaWYgKHJlY2FsbFswXSkgewkJ LyogRGlzY2FyZCBvbGRlc3QgY29tbWFuZCAqLworCQlmcmVlKHJlY2FsbFswXSk7CisJCXJlY2Fs bFswXSA9IE5VTEw7CisJICAgIH0KKwkgICAgZm9yIChpID0gMDsgaSA8IHJsYXN0OyBpKyspIHsg IC8qIFRoZSByZXN0ICovCisJCXJlY2FsbFtpXSA9IHJlY2FsbFtpKzFdOyAgIC8qIG1vdmUgYmFj ayAqLworCSAgICB9CisJICAgIHJsYXN0LS07CQkJLyogTm93IHdlIGhhdmUgb25lIGxlc3MgKi8K Kwl9CisgICAgICAgIHJsYXN0Kys7CQkJLyogSW5kZXggb2YgbGFzdCBjb21tYW5kIGluIGJ1ZmZl ciAqLworCWN1cnJlbnQgPSBybGFzdDsJCS8qIEFsc28gbm93IHRoZSBjdXJyZW50IGNvbW1hbmQg Ki8KKwlpZiAoY3VycmVudCA+PSBjbV9yZWNhbGwpIHsJLyogU2hvdWxkbid0IGhhcHBlbiAqLwor CSAgICBwcmludGYoIj9Db21tYW5kIGhpc3RvcnkgZXJyb3JcbiIpOwkvKiBidXQgaWYgaXQgZG9l cyAqLworCSAgICBvbl9yZWNhbGwgPSAwOwkJICAgICAgICAvKiB0dXJuIG9mZiBjb21tYW5kIHNh dmluZyAqLworI2lmZGVmIENPTU1FTlQKKwl9IGVsc2UgaWYgKG5xID4gMCkgewkJLyogSGF2ZSBh dCBsZWFzdCBvbmUgcXVlc3Rpb24gbWFyayAqLworCSAgICByZWNhbGxbY3VycmVudF0gPSBtYWxs b2MobGVuK25xKzEpOworCSAgICBpZiAocmVjYWxsW2N1cnJlbnRdKSB7CisJCXAgPSByZWNhbGxb Y3VycmVudF07CisJCXdoaWxlICgqcykgeworCQkgICAgaWYgKCpzID09ICc/JykKKwkJICAgICAg KnArKyA9ICdcXCc7CisJCSAgICAqcCsrID0gKnMrKzsKKwkJfQorCQkqcCA9IE5VTDsKKwkgICAg fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwl9IGVsc2UgewkJCS8qIE5vcm1hbCBjYXNlLCBqdXN0 IGNvcHkgKi8KKwkgICAgcmVjYWxsW2N1cnJlbnRdID0gbWFsbG9jKGxlbisxKTsKKwkgICAgaWYg KHJlY2FsbFtjdXJyZW50XSkKKwkgICAgICBja3N0cm5jcHkocmVjYWxsW2N1cnJlbnRdLHMsbGVu KzEpOworCX0KKyAgICB9CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCit9CisKKworI2lmZGVmIENL X1JFQ0FMTAorCisvKiBDIE0gSCBJIFMgVCBPIFIgWSAqLworCitWT0lECitjbWhpc3RvcnkoKSB7 CisgICAgaW50IGksIGxjID0gMTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IGN1cnJlbnQ7IGkrKykg eworCXByaW50ZigiICVzXG4iLCByZWNhbGxbaV0pOworCWlmICgrK2xjID4gKGNtZF9yb3dzIC0g MikpIHsJLyogU2NyZWVuIGZ1bGw/ICovCisJICAgIGlmICghYXNrbW9yZSgpKQkJLyogRG8gbW9y ZS1wcm9tcHRpbmcuLi4gKi8KKwkgICAgICBicmVhazsKKwkgICAgZWxzZQorCSAgICAgIGxjID0g MDsKKwl9CisgICAgfQorfQorCitpbnQKK3Nhdmhpc3RvcnkocyxkaXNwKSBjaGFyICpzOyBpbnQg ZGlzcDsgeworICAgIEZJTEUgKiBmcDsKKyAgICBpbnQgaTsKKworICAgIGZwID0gZm9wZW4ocywg ZGlzcCA/ICJhIiA6ICJ3Iik7CisgICAgaWYgKCFmcCkgeworCXBlcnJvcihzKTsKKwlyZXR1cm4o MCk7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPD0gY3VycmVudDsgaSsrKQorICAgICAgZnBy aW50ZihmcCwiJXNcbiIsIHJlY2FsbFtpXSk7CisgICAgZmNsb3NlKGZwKTsKKyAgICByZXR1cm4o MSk7Cit9CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBhcHBh cmVudGx5IG5vdCB1c2VkICovCitpbnQKK2NtZ2V0bGMocykgY2hhciAqIHM7IHsJCQkvKiBHZXQg bGVhZGluZyBjaGFyICovCisgICAgY2hhciBjOworICAgIHdoaWxlICgoYyA9ICpzKyspIDw9IFNQ KSB7CisJaWYgKCFjKQorCSAgYnJlYWs7CisgICAgfQorICAgIHJldHVybihjKTsKK30KKyNlbmRp ZiAvKiBDT01NRU5UICovCisKKworLyogIEMgTSBDIEYgTSAgLS0gIFBhcnNlIGNvbW1hbmQgY29u ZmlybWF0aW9uIChlbmQgb2YgbGluZSkgICovCisKKy8qCisgUmV0dXJucworICAgLTI6IFVzZXIg dHlwZWQgYW55dGhpbmcgYnV0IHdoaXRlc3BhY2Ugb3IgbmV3bGluZQorICAgLTE6IFJlcGFyc2Ug bmVlZGVkCisgICAgMDogQ29uZmlybWF0aW9uIHdhcyByZWNlaXZlZAorKi8KK2ludAorY21jZm0o KSB7CisgICAgaW50IHgsIHhjOworICAgIGRlYnVnKEYxMDEsImNtY2ZtOiBjbWZsZ3MiLCIiLGNt Zmxncyk7CisgICAgZGVidWcoRjExMCwiY21jZm06IGF0bWJ1ZiIsYXRtYnVmLDApOworICAgIGlu d29yZCA9IHhjID0gY2MgPSAwOworCisgICAgc2V0YXRtKCIiLDApOwkJCS8qIChQcm9iYWJseSB1 bm5lY2Vzc2FyeSkgKi8KKworICAgIHdoaWxlIChjbWZsZ3MgIT0gMSkgeworICAgICAgICB4ID0g Z3R3b3JkKDApOworICAgICAgICB4YyArPSBjYzsKKworICAgICAgICBzd2l0Y2ggKHgpIHsKKwkg IGNhc2UgLTk6CisJICAgIHByaW50ZigiQ29tbWFuZCBvciBmaWVsZCB0b28gbG9uZ1xuIik7CisJ ICBjYXNlIC00OgkJCS8qIEVPRiAqLworCSAgY2FzZSAtMjoKKwkgIGNhc2UgLTE6CisJICAgIHJl dHVybih4KTsKKwkgIGNhc2UgMToJCQkvKiBFbmQgb2YgbGluZSAqLworCSAgICBpZiAoeGMgPiAw KSB7CisJCWlmICh4Y21mZGIpIHsKKwkJICAgIHJldHVybigtNik7CisJCX0gZWxzZSB7CisJCSAg ICBwcmludGYoIj9Ob3QgY29uZmlybWVkIC0gJXNcbiIsYXRtYnVmKTsKKwkJICAgIHJldHVybigt OSk7CisJCX0KKwkgICAgfSBlbHNlCisJICAgICAgYnJlYWs7CQkJLyogRmluaXNoIHVwIGJlbG93 ICovCisJICBjYXNlIDI6CQkJLyogRVNDICovCisJICAgIGlmICh4YyA9PSAwKSB7CisJCWJsZWVw KEJQX1dBUk4pOworCQljb250aW51ZTsJCS8qIG9yIGZhbGwgdGhydS4gKi8KKwkgICAgfQorCSAg Y2FzZSAwOgkJCS8qIFNwYWNlICovCisJICAgIGlmICh4YyA9PSAwKQkJLyogSWYgbm8gY2hhcnMg dHlwZWQsIGNvbnRpbnVlLCAqLworCSAgICAgIGNvbnRpbnVlOwkJCS8qIGVsc2UgZmFsbCB0aHJ1 LiAqLworCSAgICAvKiBlbHNlIGZhbGwgdGhydS4uLiAqLworCisJICBjYXNlIDM6CQkJLyogUXVl c3Rpb24gbWFyayAqLworCSAgICBpZiAoeGMgPiAwKSB7CisJCWlmICh4Y21mZGIpIHsKKwkJICAg IHJldHVybigtNik7CisJCX0gZWxzZSB7CisJCSAgICBwcmludGYoIj9Ob3QgY29uZmlybWVkIC0g JXNcbiIsYXRtYnVmKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkgICAgfQorCSAgICBwcmlu dGYoCisJICAgICAgICJcbiBQcmVzcyB0aGUgUmV0dXJuIG9yIEVudGVyIGtleSB0byBjb25maXJt IHRoZSBjb21tYW5kXG4iKTsKKwkgICAgcHJpbnRmKCIlcyVzIixjbXByb20sY21kYnVmKTsKKwkg ICAgZmZsdXNoKHN0ZG91dCk7CisJICAgIGNvbnRpbnVlOworCX0KKyAgICB9CisgICAgZGVib2sg PSAxOworICAgIHJldHVybigwKTsKK30KKworCisvKiBUaGUgZm9sbG93aW5nIG1hdGVyaWFsIHN1 cHBvcnRzIGNoYWluZWQgcGFyc2luZyBmdW5jdGlvbnMuICovCisvKiBTZWUgY2t1Y21kLmggZm9y IEZEQiBhbmQgT0ZEQiBkZWZpbml0aW9ucy4gKi8KKworc3RydWN0IE9GREIgY21yZXN1bHQgPSB7 CQkvKiBVbml2ZXJzYWwgY21mZGIgcmVzdWx0IGhvbGRlciAqLworICAgIE5VTEwsCQkJCS8qIEFk ZHJlc3Mgb2Ygc3VjY2VlZGluZyBGREIgc3RydWN0ICovCisgICAgMCwJCQkJCS8qIEZ1bmN0aW9u IGNvZGUgKi8KKyAgICBOVUxMLAkJCQkvKiBTdHJpbmcgcmVzdWx0ICovCisgICAgMCwJCQkJCS8q IEludGVnZXIgcmVzdWx0ICovCisgICAgKENLX09GRl9UKTAJCQkJLyogV2lkZSByZXN1bHQgKi8K K307CisKK1ZPSUQKK2NtZmRiaShwLGZjLHMxLHMyLHMzLG4xLG4yLGYsayxueHQpCS8qIEluaXRp YWxpemUgYW4gRkRCICovCisgICAgc3RydWN0IEZEQiAqIHA7CisgICAgaW50IGZjOworICAgIGNo YXIgKiBzMSwgKiBzMiwgKiBzMzsKKyAgICBpbnQgbjEsIG4yOworICAgIHh4X3N0cnAgZjsKKyAg ICBzdHJ1Y3Qga2V5dGFiICogazsKKyAgICBzdHJ1Y3QgRkRCICogbnh0OyB7CisKKyAgICBwLT5m Y29kZSA9IGZjOworICAgIHAtPmhscG1zZyA9IHMxOworICAgIHAtPmRmbHQgPSBzMjsKKyAgICBw LT5zZGF0YSA9IHMzOworICAgIHAtPm5kYXRhMSA9IG4xOworICAgIHAtPm5kYXRhMiA9IG4yOwor ICAgIHAtPnNwZiA9IGY7CisgICAgcC0+a3dkdGJsID0gazsKKyAgICBwLT5ueHRmZGIgPSBueHQ7 Cit9CisKKy8qICBDIE0gRiBEIEIgIC0tICBQYXJzZSBhIGZpZWxkIHdpdGggc2V2ZXJhbCBwb3Nz aWJsZSBmdW5jdGlvbnMgICovCisKK2ludAorY21mZGIoZmRiaW4pIHN0cnVjdCBGREIgKiBmZGJp bjsgeworI2lmbmRlZiBOT1NQTAorICAgIGV4dGVybiBpbnQgeF9pZm51bTsgICAgICAgICAgICAg ICAgIC8qIElGIE5VTUVSSUMgLSBkaXNhYmxlcyB3YXJuaW5ncyAqLworI2VuZGlmIC8qIE5PU1BM ICovCisgICAgc3RydWN0IEZEQiAqIGluID0gZmRiaW47CisgICAgc3RydWN0IE9GREIgKiBvdXQg PSAmY21yZXN1bHQ7CisgICAgaW50IHggPSAwLCBuLCByOworICAgIENLX09GRl9UIHcgPSAoQ0tf T0ZGX1QpMDsKKyAgICBjaGFyICpzLCAqeHAsICptID0gTlVMTDsKKyAgICBpbnQgZXJyYml0cyA9 IDA7CisKKyAgICB4cCA9IGJwOworCisgICAgb3V0LT5mY29kZSA9IC0xOwkJCS8qIEluaXRpYWxp emUgb3V0cHV0IHN0cnVjdCAqLworICAgIG91dC0+ZmRiYWRkciA9IE5VTEw7CisgICAgb3V0LT5z cmVzdWx0ID0gTlVMTDsKKyAgICBvdXQtPm5yZXN1bHQgPSAwOworLyoKKyAgQ3VycmVudGx5IHdl IG1ha2Ugb25lIHRyaXAgdGhyb3VnaCB0aGUgRkRCcy4gIFNvIGlmIHRoZSB1c2VyIHR5cGVzIEVz YyBvcgorICBUYWIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGZpZWxkLCBvbmx5IHRoZSBmaXJzdCBG REIgaXMgZXhhbWluZWQgZm9yIGEKKyAgZGVmYXVsdC4gIElmIHRoZSB1c2VyIHR5cGVzID8sIGhl bHAgaXMgZ2l2ZW4gb25seSBmb3Igb25lIEZEQi4gIFdlIHNob3VsZAorICBzZWFyY2ggdGhyb3Vn aCB0aGUgRkRCcyBmb3IgYWxsIG1hdGNoaW5nIHBvc3NpYmlsaXRpZXMgLS0gYW5kIGluIHBhcnRp Y3VsYXIKKyAgZGlzcGxheSB0aGUgcGVydGluZW50IGNvbnRleHQtc2Vuc2l0aXZlIGhlbHAgZm9y IGVhY2ggZnVuY3Rpb24sIHJhdGhlciB0aGFuCisgIHRoZSBvbmx5IHRoZSBmaXJzdCBvbmUgdGhh dCB3b3JrcywgYW5kIHRoZW4gcmV3aW5kIHRoZSBGREIgcG9pbnRlciBzbyB3ZQorICBhcmUgbm90 IGxvY2tlZCBvdXQgb2YgdGhlIGVhcmxpZXIgb25lcy4KKyovCisgICAgY21mbGRmbGdzID0gMDsK KyAgICB3aGlsZSAoMSkgewkJCQkvKiBMb29wIHRocm91Z2ggdGhlIGNoYWluIG9mIEZEQnMgKi8K Kwlub21zZyA9IDE7CisJeGNtZmRiID0gMTsKKwlzID0gTlVMTDsKKwluID0gMDsKKwlkZWJ1ZyhG MTAxLCJjbWZkYiBpbi0+ZmNvZGUiLCIiLGluLT5mY29kZSk7CisJc3dpdGNoIChpbi0+ZmNvZGUp IHsJCS8qIEN1cnJlbnQgcGFyc2luZyBmdW5jdGlvbiBjb2RlICovCisJICBjYXNlIF9DTU5VTToK KwkgICAgciA9IGluLT5uZGF0YTE7CisJICAgIGlmIChyICE9IDEwICYmIHIgIT0gOCkgciA9IDEw OworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgeF9pZm51bSA9IDE7ICAgICAgICAgICAgICAg IC8qIERpc2FibGVzIHdhcm5pbmcgbWVzc2FnZXMgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCSAg ICB4ID0gY21udW0oaW4tPmhscG1zZyxpbi0+ZGZsdCxyLCZuLGluLT5zcGYpOworI2lmbmRlZiBO T1NQTAorICAgICAgICAgICAgeF9pZm51bSA9IDA7CisjZW5kaWYgLyogTk9TUEwgKi8KKwkgICAg ZGVidWcoRjEwMSwiY21mZGIgY21udW0iLCIiLHgpOworCSAgICBpZiAoeCA8IDApIGVycmJpdHMg fD0gMTsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9DTU5VVzoJCQkvKiBXaWRlIGNtbnVtIC0gMjQg RGVjIDIwMDUgKi8KKwkgICAgciA9IGluLT5uZGF0YTE7CisJICAgIGlmIChyICE9IDEwICYmIHIg IT0gOCkgciA9IDEwOworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgeF9pZm51bSA9IDE7ICAg ICAgICAgICAgICAgIC8qIERpc2FibGVzIHdhcm5pbmcgbWVzc2FnZXMgKi8KKyNlbmRpZiAvKiBO T1NQTCAqLworCSAgICB4ID0gY21udW13KGluLT5obHBtc2csaW4tPmRmbHQsciwmdyxpbi0+c3Bm KTsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgIHhfaWZudW0gPSAwOworI2VuZGlmIC8qIE5P U1BMICovCisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtbnVtdyIsIiIsdyk7CisJICAgIGlmICh4 IDwgMCkgZXJyYml0cyB8PSAxOworCSAgICBicmVhazsKKwkgIGNhc2UgX0NNT0ZJOgorCSAgICB4 ID0gY21vZmkoaW4tPmhscG1zZyxpbi0+ZGZsdCwmcyxpbi0+c3BmKTsKKwkgICAgZGVidWcoRjEw MSwiY21mZGIgY21vZmkiLCIiLHgpOworCSAgICBpZiAoeCA8IDApIGVycmJpdHMgfD0gMjsKKwkg ICAgYnJlYWs7CisJICBjYXNlIF9DTUlGSToKKwkgICAgeCA9IGNtaWZpMihpbi0+aGxwbXNnLAor CQkgICAgICAgaW4tPmRmbHQsCisJCSAgICAgICAmcywKKwkJICAgICAgICZuLAorCQkgICAgICAg aW4tPm5kYXRhMSwKKwkJICAgICAgIGluLT5zZGF0YSwKKwkJICAgICAgIGluLT5zcGYsCisJCSAg ICAgICBpbi0+bmRhdGEyCisJCSAgICAgICApOworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWlm aTIgeCIsIiIseCk7CisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtaWZpMiBuIiwiIixuKTsKKwkg ICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDQ7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01GTEQ6 CisJICAgIGNtZmxkZmxncyA9IGluLT5uZGF0YTE7CisJICAgIHggPSBjbWZsZChpbi0+aGxwbXNn LGluLT5kZmx0LCZzLGluLT5zcGYpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWZsZCIsIiIs eCk7CisJICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSA4OworCSAgICBicmVhazsKKwkgIGNhc2Ug X0NNVFhUOgorCSAgICB4ID0gY210eHQoaW4tPmhscG1zZyxpbi0+ZGZsdCwmcyxpbi0+c3BmKTsK KwkgICAgZGVidWcoRjEwMSwiY21mZGIgY210eHQiLCIiLHgpOworCSAgICBpZiAoeCA8IDApIGVy cmJpdHMgfD0gMTY7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01LRVk6CisJICAgIHggPSBjbWtl eTIoaW4tPmt3ZHRibCwKKwkJICAgICAgIGluLT5uZGF0YTEsCisJCSAgICAgICBpbi0+aGxwbXNn LGluLT5kZmx0LGluLT5zZGF0YSxpbi0+c3BmLGluLT5uZGF0YTIpOworCSAgICBkZWJ1ZyhGMTAx LCJjbWZkYiBjbWtleSIsIiIseCk7CisJICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAoKGluLT5u ZGF0YTIgJiA0KSA/IDMyIDogNjQpOworCSAgICBicmVhazsKKwkgIGNhc2UgX0NNQ0ZNOgorCSAg ICB4ID0gY21jZm0oKTsKKwkgICAgZGVidWcoRjEwMSwiY21mZGIgY21jZm0iLCIiLHgpOworCSAg ICBpZiAoeCA8IDApIGVycmJpdHMgfD0gMTI4OworCSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisJ ICAgIGRlYnVnKEYxMDEsImNtZmRiIC0gdW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlIiwiIixpbi0+ ZmNvZGUpOworCSAgICBwcmludGYoIj9jbWZkYiAtIHVuZXhwZWN0ZWQgZnVuY3Rpb24gY29kZTog JWRcbiIsaW4tPmZjb2RlKTsKKwl9CisJZGVidWcoRjEwMSwiY21mZGIgeCIsIiIseCk7CisJZGVi dWcoRjEwMSwiY21mZGIgY21mbGdzIiwiIixjbWZsZ3MpOworCWRlYnVnKEYxMDEsImNtZmRiIGNy ZmxhZyIsIiIsY3JmbGFnKTsKKwlkZWJ1ZyhGMTAxLCJjbWZkYiBxbWZsYWciLCIiLHFtZmxhZyk7 CisJZGVidWcoRjEwMSwiY21mZGIgZXNmbGFnIiwiIixlc2ZsYWcpOworCisJaWYgKHggPiAtMSkg ewkJCS8qIFN1Y2Nlc3MgKi8KKwkgICAgb3V0LT5mY29kZSA9IGluLT5mY29kZTsJLyogRmlsbCBp biBvdXRwdXQgc3RydWN0ICovCisJICAgIG91dC0+ZmRiYWRkciA9IGluOworCSAgICBvdXQtPnNy ZXN1bHQgPSBzOworCSAgICBvdXQtPm5yZXN1bHQgPSAoaW4tPmZjb2RlID09IF9DTUtFWSkgPyB4 IDogbjsKKwkgICAgb3V0LT53cmVzdWx0ID0gdzsKKwkgICAgb3V0LT5rZmxhZ3MgPSAoaW4tPmZj b2RlID09IF9DTUtFWSkgPyBjbWt3ZmxncyA6IDA7CisJICAgIGRlYnVnKEYxMTEsImNtZmRiIG91 dC0+bnJlc3VsdCIsb3V0LT5zcmVzdWx0LG91dC0+bnJlc3VsdCk7CisJICAgIGRlYnVnKEYxMTEs ImNtZmRiIG91dC0+d3Jlc3VsdCIsb3V0LT5zcmVzdWx0LG91dC0+d3Jlc3VsdCk7CisJICAgIG5v bXNnID0gMDsKKwkgICAgeGNtZmRiID0gMDsKKwkgICAgLyogZGVidWcoRjExMSwiY21mZGIgY21k YnVmICYgY3JmbGFnIixjbWRidWYsY3JmbGFnKTsgKi8KKwkgICAgaWYgKGNyZmxhZykgeworCQlj bWZsZ3MgPSAxOworCSAgICB9CisJICAgIHJldHVybih4KTsJCQkvKiBhbmQgcmV0dXJuICovCisJ fQorCWluID0gaW4tPm54dGZkYjsJCS8qIEZhaWxlZCwgZ2V0IG5leHQgcGFyc2luZyBmdW5jdGlv biAqLworCW5vbXNnID0gMDsKKwl4Y21mZGIgPSAwOworCWlmICghaW4pIHsJCQkvKiBObyBtb3Jl ICovCisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGZhaWx1cmUgeCIsIiIseCk7CisJICAgIGRlYnVn KEYxMDEsImNtZmRiIGZhaWx1cmUgZXJyYml0cyIsIiIsZXJyYml0cyk7CisJICAgIGlmICh4ID09 IC02KQorCSAgICAgIHggPSAtOTsKKwkgICAgaWYgKHggPT0gLTkpIHsKKyNpZmRlZiBDS1JPT1QK KwkJaWYgKGNrcm9vdGVycikKKwkJICBtID0gIk9mZiBMaW1pdHMiOworCQllbHNlCisjZW5kaWYg LyogQ0tST09UICovCisJCS8qIE1ha2UgaW5mb3JtYXRpdmUgbWVzc2FnZXMgZm9yIGEgZmV3IGNv bW1vbiBjYXNlcyAqLworCQlzd2l0Y2ggKGVycmJpdHMpIHsKKwkJICBjYXNlIDQrMzI6IG0gPSAi RG9lcyBub3QgbWF0Y2ggZmlsZW5hbWUgb3Igc3dpdGNoIjsgYnJlYWs7CisJCSAgY2FzZSA0KzY0 OiBtID0gIkRvZXMgbm90IG1hdGNoIGZpbGVuYW1lIG9yIGtleXdvcmQiOyBicmVhazsKKwkJICBj YXNlIDErMzI6IG0gPSAiTm90IGEgbnVtYmVyIG9yIHZhbGlkIGtleXdvcmQiOyBicmVhazsKKwkJ ICBjYXNlIDErNjQ6IG0gPSAiTm90IGEgbnVtYmVyIG9yIHZhbGlkIHN3aXRjaCI7IGJyZWFrOwor CQkgIGRlZmF1bHQ6IG0gPSAiTm90IHZhbGlkIGluIHRoaXMgcG9zaXRpb24iOworCQl9CisJCXBy aW50ZigiPyVzOiBcIiVzXCJcbiIsbSwgYXRtYnVmKTsKKwkgICAgfQorCSAgICByZXR1cm4oeCk7 CisJfQorCWlmICh4ICE9IC0yICYmIHggIT0gLTYgJiYgeCAhPSAtOSAmJiB4ICE9IC0zKSAvKiBF ZGl0aW5nIG9yIHNvbWVzdWNoICovCisJICByZXR1cm4oeCk7CQkJLyogR28gYmFjayBhbmQgcmVw YXJzZSAqLworCXBwID0gbnAgPSBicCA9IHhwOwkJLyogQmFjayB1cCBwb2ludGVycyAqLworCWNt ZmxncyA9IC0xOwkJCS8qIEZvcmNlIGEgcmVwYXJzZSAqLworCisjaWZuZGVmIE5PU1BMCisJaWYg KCFhc2tmbGFnKSB7CQkJLyogSWYgbm90IGV4ZWN1dGluZyBBU0stY2xhc3MgY21kLi4uICovCisj ZW5kaWYgLyogTk9TUEwgKi8KKwkgICAgaWYgKGNyZmxhZykgewkJLyogSWYgQ1Igd2FzIHR5cGVk LCBwdXQgaXQgYmFjayAqLworCQlwdXNoYyA9IExGOwkJLyogQnV0IGFzIGEgbGluZWZlZWQgKi8K KwkgICAgfSBlbHNlIGlmIChxbWZsYWcpIHsJLyogRGl0dG8gZm9yIFF1ZXN0aW9uIG1hcmsgKi8K KwkJcHVzaGMgPSAnPyc7CisJICAgIH0gZWxzZSBpZiAoZXNmbGFnKSB7CS8qIGFuZCBFc2NhcGUg b3IgVGFiICovCisJCXB1c2hjID0gRVNDOworCSAgICB9CisjaWZuZGVmIE5PU1BMCisJfQorI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgfQorfQorCisvKgorICAgQyBNIEkgTyBGIEkgIC0tICBQYXJz ZSBhbiBpbnB1dCBmaWxlIE9SIHRoZSBuYW1lIG9mIGEgbm9uZXhpc3RlbnQgZmlsZS4KKworICAg UmVwbGFjZXMgdGhlIGNvbW1lbnRlZC1vdXQgdmVyc2lvbiBhYm92ZS4gIFRoaXMgb25lIGFjdHVh bGx5IHdvcmtzIGFuZAorICAgaGFzIHRoZSBleHBlY3RlZCBzdHJhaWdodGZvcndhcmQgaW50ZXJm YWNlLgorKi8KK2ludAorY21pb2ZpKHhobHAseGRlZix4cCx3aWxkLGYpIGNoYXIgKnhobHAsICp4 ZGVmLCAqKnhwOyBpbnQgKndpbGQ7IHh4X3N0cnAgZjsgeworICAgIGludCB4OworICAgIHN0cnVj dCBGREIgZjEsIGYyOworICAgIGNtZmRiaSgmZjEsX0NNSUZJLHhobHAseGRlZiwiIiwwLDAsZixO VUxMLCZmMik7CisgICAgY21mZGJpKCZmMixfQ01PRkksIiIsIiIsIiIsMCwwLGYsTlVMTCxOVUxM KTsKKyAgICB4ID0gY21mZGIoJmYxKTsKKyAgICBpZiAoeCA8IDApIHsKKwlpZiAoeCA9PSAtMykg eworCSAgICB4ID0gLTk7CisJICAgIHByaW50ZigiP0ZpbGVuYW1lIHJlcXVpcmVkXG4iKTsKKwl9 CisgICAgfQorICAgICp3aWxkID0gY21yZXN1bHQubnJlc3VsdDsKKyAgICAqeHAgPSBjbXJlc3Vs dC5zcmVzdWx0OworICAgIHJldHVybih4KTsKK30KKworLyogIEcgVCBXIE8gUiBEICAtLSAgR2V0 cyBhICJ3b3JkIiBmcm9tIHRoZSBjb21tYW5kIGlucHV0IHN0cmVhbSAgKi8KKworLyoKK1VzYWdl OiByZXRjb2RlID0gZ3R3b3JkKGJyayk7CisgIGJyayA9IDAgZm9yIG5vcm1hbCB3b3JkIGJyZWFr cyAoc3BhY2UsIENSLCBFc2MsID8pCisgIGJyayA9IDEgdG8gYWRkICc6JyBhbmQgJz0nIChmb3Ig cGFyc2luZyBzd2l0Y2hlcykuICBUaGVzZSBjaGFyYWN0ZXJzCisgICAgICAgIGFjdCBhcyBicmVh ayBjaGFyYWN0ZXJzIG9ubHkgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZmllbGQKKyAg ICAgICAgaXMgc2xhc2ggKCcvJyksIGkuZS4gc3dpdGNoIGludHJvZHVjZXIuCisgIGJyayA9IDQg dG8gbm90IHN0cmlwIGNvbW1lbnRzICh1c2VkIG9ubHkgZm9yICJoZWxwICMiIGFuZCAiaGVscCA7 IikuCisKK1JldHVybnM6CistMTAgVGltZWxpbWl0IHNldCBhbmQgdGltZWQgb3V0CisgLTkgaWYg aW5wdXQgd2FzIHRvbyBsb25nCisgLTQgaWYgZW5kIG9mIGZpbGUgKGUuZy4gcGlwZSBicm9rZW4p CisgLTMgaWYgbnVsbCBmaWVsZAorIC0yIGlmIGNvbW1hbmQgYnVmZmVyIG92ZXJmbG93cworIC0x IGlmIHVzZXIgZGlkIHNvbWUgZGVsZXRpbmcKKyAgMCBpZiB3b3JkIHRlcm1pbmF0ZXMgd2l0aCBT UCBvciB0YWIKKyAgMSBpZiAuLi4gQ1IKKyAgMiBpZiAuLi4gRVNDCisgIDMgaWYgLi4uID8gKHF1 ZXN0aW9uIG1hcmspCisgIDQgaWYgLi4uIDogb3IgPSBhbmQgY2FsbGVkIHdpdGggYnJrICE9IDAK KworV2l0aDoKKyAgcHAgcG9pbnRpbmcgdG8gYmVnaW5uaW5nIG9mIHdvcmQgaW4gYnVmZmVyCisg IGJwIHBvaW50aW5nIHRvIGFmdGVyIGN1cnJlbnQgcG9zaXRpb24KKyAgYXRtYnVmIGNvbnRhaW5p bmcgYSBjb3B5IG9mIHRoZSB3b3JkCisgIGNjIGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBjaGFy YWN0ZXJzIGluIHRoZSB3b3JkIGNvcGllZCB0byBhdG1idWYKKyovCisKK2ludAordW5nd29yZCgp IHsJCQkJLyogVW5nZXQgYSB3b3JkICovCisgICAgZGVidWcoRjEwMSwidW5nd29yZCBjbWZsZ3Mi LCIiLGNtZmxncyk7CisgICAgaWYgKHVuZ3cpIHJldHVybigwKTsKKyAgICBjbWZzYXYgPSBjbWZs Z3M7CisgICAgdW5ndyA9IDE7CisgICAgY21mbGdzID0gMDsKKyAgICByZXR1cm4oMCk7Cit9CisK Ky8qIFVuLXVuLWdldCB3b3JkLiAgVW5kbyB1bmd3b3JkKCkgaWYgaXQgaGFzIGJlZW4gZG9uZS4g Ki8KKworVk9JRAordW51bmd3KCkgeworICAgIGRlYnVnKEYwMTAsInVudW5ndyBhdG1idWYiLGF0 bWJ1ZiwwKTsKKyAgICBpZiAodW5ndykgeworCXVuZ3cgPSAwOworCWNtZmxncyA9IGNtZnNhdjsK KwlhdG1idWZbMF0gPSBOVUw7CisgICAgfQorfQorCitzdGF0aWMgaW50CitndHdvcmQoYnJrKSBp bnQgYnJrOyB7CisgICAgaW50IGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3Vy cmVudCBjaGFyICovCisgICAgaW50IHF1b3RlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyog RmxhZyBmb3IgcXVvdGUgY2hhcmFjdGVyICovCisgICAgaW50IGVjaG9mID0gMDsgICAgICAgICAg ICAgICAgICAgICAgLyogRmxhZyBmb3Igd2hldGhlciB0byBlY2hvICovCisgICAgaW50IGNvbW1l bnQgPSAwOwkJCS8qIEZsYWcgZm9yIGluIGNvbW1lbnQgKi8KKyAgICBjaGFyICpjcCA9IE5VTEw7 CQkJLyogQ29tbWVudCBwb2ludGVyICovCisgICAgaW50IGVpbnRyID0gMDsJCQkvKiBGbGFnIGZv ciBzeXNjYWxsIGludGVycnVwdGVkICovCisgICAgaW50IGJyYWNlbHZsID0gMDsJCQkvKiBuZXN0 ZWQgYnJhY2UgY291bnRlciBbanJzXSAqLworICAgIGludCBpc2NvbnRkID0gMDsJCQkvKiBGbGFn IGZvciBjb250aW51YXRpb24gKi8KKyAgICBpbnQgcmVhbHR0eSA9IDA7CQkJLyogU3RkaW4gaXMg cmVhbGx5IGEgdHR5ICovCisgICAgY2hhciBmaXJzdG5iICA9IE5VTDsKKyAgICBjaGFyIGxhc3Rj aGFyID0gTlVMOworICAgIGNoYXIgcHJldmNoYXIgPSBOVUw7CisgICAgY2hhciBsYnJhY2UsIHJi cmFjZTsKKyAgICBpbnQgZHEgPSAwOwkJCQkvKiBEb3VibGVxdW90ZSBmbGFnICovCisgICAgaW50 IGRxbiA9IDA7CQkJLyogYW5kIGNvdW50ICovCisgICAgaW50IGlzZXNjID0gMDsKKworI2lmZGVm IFJUVQorICAgIGV4dGVybiBpbnQgcnR1X2J1ZzsKKyNlbmRpZiAvKiBSVFUgKi8KKworI2lmZGVm IElLU0QKKyAgICBleHRlcm4gaW50IGluc2VydmVyOworI2VuZGlmIC8qIElLU0QgKi8KKyAgICBl eHRlcm4gaW50IGtzdGFydGFjdGl2ZTsKKworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgZXh0ZXJu IGludCB0ZXJtdHlwZTsgICAgICAgICAgICAgICAgLyogREcgdGVybWluYWwgdHlwZSBmbGFnICov CisgICAgZXh0ZXJuIGludCBjb25fcmVhZHNfbXQ7ICAgICAgICAgICAgLyogQ29uc29sZSByZWFk IGFzeW5jaCBpcyBhY3RpdmUgKi8KKyAgICBpZiAoY29uX3JlYWRzX210KSBjb25ub2lfbXQoKTsg ICAgICAvKiBUYXNrIHdvdWxkIGludGVyZmVyZSB3L2NvbnMgcmVhZCAqLworI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVi bG9nKSB7CisJZGVidWcoRjEwMSwiZ3R3b3JkIGJyayIsIiIsYnJrKTsKKwlkZWJ1ZyhGMTAxLCJn dHdvcmQgY21mbGRmbGdzIiwiIixjbWZsZGZsZ3MpOworCWRlYnVnKEYxMDEsImd0d29yZCBzd2Fy ZyIsIiIsc3dhcmcpOworCWRlYnVnKEYxMDEsImd0d29yZCBkcHgiLCIiLGRweCk7CisJZGVidWco RjEwMSwiZ3R3b3JkIGVjaG9mIiwiIixlY2hvZik7CisjaWZuZGVmIE5PU1BMCisJZGVidWcoRjEw MSwiZ3R3b3JkIGFza2ZsYWciLCIiLGFza2ZsYWcpOworCWRlYnVnKEYxMDEsImd0d29yZCB0aW1l bGltaXQiLCIiLHRpbWVsaW1pdCk7CisjaWZuZGVmIE5PTE9DQUwKKyNpZm5kZWYgTk9YRkVSCisj aWZkZWYgQ0tfQVVUT0RMCisJZGVidWcoRjEwMSwiZ3R3b3JkIGNtZGFkbCIsIiIsY21kYWRsKTsK KyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBO T0xPQ0FMICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICByZWFsdHR5ID0gaXNfYV90dHkoMCk7CQkvKiBT dGRpbiBpcyByZWFsbHkgYSB0dHk/ICovCisKKyAgICBpZiAoY21mbGRmbGdzICYgMSkgeworCWxi cmFjZSA9ICcoJzsKKwlyYnJhY2UgPSAnKSc7CisgICAgfSBlbHNlIHsKKwlsYnJhY2UgPSAneyc7 CisJcmJyYWNlID0gJ30nOworICAgIH0KKyAgICBjcmZsYWcgPSAwOworICAgIHFtZmxhZyA9IDA7 CisgICAgZXNmbGFnID0gMDsKKworICAgIGlmIChzd2FyZykgewkJCS8qIE5vIGxlYWRpbmcgc3Bh Y2UgZm9yIHN3aXRjaCBhcmdzICovCisJaW53b3JkID0gMTsKKwlzd2FyZyA9IDA7CisgICAgfQor ICAgIGlmICh1bmd3KSB7CQkJCS8qIEhhdmUgYSB3b3JkIHNhdmVkPyAqLworI2lmZGVmIE1fVU5H VworCS8qIEV4cGVyaW1lbnRhbCBjb2RlIHRvIGFsbG93IHVuZ2V0dGluZyBtdWx0aXBsZSB3b3Jk cy4gKi8KKwkvKiBTZWUgY29tbWVudHMgaW4gY2tta2V5MigpIGFib3ZlLiAqLworCWludCB4Owor CWlmIChucCA+IHBwKSBwcCA9IG5wOworCXdoaWxlICgqcHAgPT0gU1ApIHBwKys7CisJaWYgKCEq cHApIHsKKwkgICAgdW5ndyA9IDA7CisJICAgIGNtZmxncyA9IGNtZnNhdjsKKwl9IGVsc2Ugewor CSAgICBpZiAoKHggPSBzZXRhdG0ocHAsMikpIDwgMCkgeworCQlwcmludGYoIj9TYXZlZCB3b3Jk IHRvbyBsb25nXG4iKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorCSAgICBpZiAocHBbeF0gPj0g U1ApIHsKKwkJY2hhciAqcDI7CisJCXAyID0gcHA7CisJCXAyICs9IHg7CisJCXdoaWxlICgqcDIg PT0gU1ApIHAyKys7CisJCWlmICgqcDIpIHsKKwkJICAgIG5wID0gcDI7CisJCSAgICB1bmd3b3Jk KCk7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJdW5ndyA9IDA7CisJCWNtZmxncyA9IGNtZnNhdjsK KwkJZGVidWcoRjAxMCwiZ3R3b3JkIHVuZ3cgcmV0dXJuIGF0bWJ1ZiIsYXRtYnVmLDApOworCSAg ICB9CisJfQorCXJldHVybihjbWZsZ3MpOworI2Vsc2UKKwkvKgorCSAgIFlvdSB3b3VsZCB0aGlu ayB0aGUgZm9sbG93aW5nIHNob3VsZCBiZToKKyAgICAgICAgICAgICB3aGlsZSAoKnBwID09IFNQ KSBwcCsrOworICAgICAgICAgICBidXQgeW91IHdvdWxkIGJlIHdyb25nIC0tIG1ha2luZyB0aGlz IGNoYW5nZSBicmVha3MgR09UTy4KKyAgICAgICAgKi8KKwl3aGlsZSAoKnBwKysgPT0gU1ApIDsK KwlpZiAoc2V0YXRtKHBwLDIpIDwgMCkgeworCSAgICBwcmludGYoIj9TYXZlZCB3b3JkIHRvbyBs b25nXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJdW5ndyA9IDA7CisJY21mbGdzID0gY21m c2F2OworCWRlYnVnKEYwMTAsImd0d29yZCB1bmd3IHJldHVybiBhdG1idWYiLGF0bWJ1ZiwwKTsK KwlyZXR1cm4oY21mbGdzKTsKKyNlbmRpZiAvKiBNX1VOR1cgKi8KKyAgICB9CisgICAgcHAgPSBu cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgY3VycmVudCBmaWVsZCAq LworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRl YnVnKEYxMTAsImd0d29yZCBjbWRidWYiLGNtZGJ1ZiwwKTsKKwlkZWJ1ZyhGMTEwLCJndHdvcmQg YnAiLGJwLDApOworCWRlYnVnKEYxMTAsImd0d29yZCBwcCIscHAsMCk7CisgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHsKKwkvKiBJZiB3ZSBhcmUg cmVwYXJzaW5nIHdlIGhhdmUgdG8gcmVjb3VudCBhbnkgYnJhY2VzIG9yIGRvdWJsZXF1b3RlcyAq LworCWNoYXIgKiBwID0gcHA7CisJY2hhciBjOworCWlmICgqcCA9PSAnIicpCisJICBkcSsrOwor CXdoaWxlICgoYyA9ICpwKyspKQorCSAgaWYgKGMgPT0gbGJyYWNlKQorCSAgICBicmFjZWx2bCsr OworCSAgZWxzZSBpZiAoYyA9PSByYnJhY2UpCisJICAgIGJyYWNlbHZsLS07CisJICBlbHNlIGlm IChkcSAmJiBjID09ICciJykKKwkgICAgZHFuKys7CisgICAgfQorICAgIHdoaWxlIChicCA8IGNt ZGJ1ZitDTURCTCkgeyAgICAgICAgIC8qIEJpZyBnZXQtYS1jaGFyYWN0ZXIgbG9vcCAqLworCWVj aG9mID0gMDsJCQkvKiBBc3N1bWUgd2UgZG9uJ3QgZWNobyBiZWNhdXNlICovCisJY2hzcmMgPSAw OwkJCS8qIGNoYXJhY3RlciBjYW1lIGZyb20gcmVwYXJzZSBidWYuICovCisjaWZkZWYgQlNfRElS U0VQCitDTURJUlBBUlNFOgorI2VuZGlmIC8qIEJTX0RJUlNFUCAqLworCisJYyA9ICpicDsKKyAg ICAgICAgaWYgKCFjKSB7CQkJLyogSWYgbm8gY2hhciB3YWl0aW5nIGluIHJlcGFyc2UgYnVmICov CisJICAgIGlmICgoZHB4CisjaWZuZGVmIE5PU1BMCisJCSB8fCBlY2hvc3RhcnMKKyNlbmRpZiAv KiBOT1NQTCAqLworCQkgKSAmJiAoIXB1c2hjCisjaWZuZGVmIE5PU1BMCisJCQl8fCBhc2tmbGFn CisjZW5kaWYgLyogTk9TUEwgKi8KKwkJCSkpCQkvKiBHZXQgZnJvbSB0dHksIHNldCBlY2hvIGZs YWcgKi8KKwkgICAgICBlY2hvZiA9IDE7CisJICAgIGMgPSBjbWRnZXRjKHRpbWVsaW1pdCk7CS8q IFJlYWQgYSBjb21tYW5kIGNoYXJhY3Rlci4gKi8KKyNpZmRlZiBERUJVRworCSAgICBkZWJ1ZyhG MTAxLCJndHdvcmQgYyIsIiIsYyk7CisjZW5kaWYgLyogREVCVUcgKi8KKworCSAgICBpZiAodGlt ZWxpbWl0ICYmIGMgPCAtMSkgewkvKiBUaW1lZCBvdXQgKi8KKwkJcmV0dXJuKC0xMCk7CisJICAg IH0KKworI2lmbmRlZiBOT1hGRVIKKy8qCisgIFRoZSBmb2xsb3dpbmcgYWxsb3dzIHBhY2tldCBy ZWNvZ25pdGlvbiBpbiB0aGUgY29tbWFuZCBwYXJzZXIuCisgIFByZXNlbnRseSBpdCB3b3JrcyBv bmx5IGZvciBLZXJtaXQgcGFja2V0cywgYW5kIGlmIG91ciBjdXJyZW50IHByb3RvY29sCisgIGhh cHBlbnMgdG8gYmUgYW55dGhpbmcgYmVzaWRlcyBLZXJtaXQsIHdlIHNpbXBseSBmb3JjZSBpdCB0 byBLZXJtaXQuCisgIFdlIGRvbid0IHVzZSB0aGUgQVBDIG1lY2hhbmlzbSBoZXJlIGZvciBtZWNo YW5pY2FsIHJlYXNvbnMsIGFuZCBhbHNvCisgIGJlY2F1c2UgdGhpcyB3YXksIGl0IHdvcmtzIGV2 ZW4gd2l0aCBtaW5pbWFsbHkgY29uZmlndXJlZCBpbnRlcmFjdGl2ZQorICB2ZXJzaW9ucy4gIEFk ZCBabW9kZW0gbGF0ZXIuLi4KKyovCisjaWZkZWYgQ0tfQVVUT0RMCisJICAgIGlmICgoIWxvY2Fs ICYmIGNtZGFkbCkJLyogQXV0b2Rvd25sb2FkIGVuYWJsZWQ/ICovCisjaWZkZWYgSUtTX09QVElP TgorCQl8fCBURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0CisjZW5kaWYg LyogSUtTX09QVElPTiAqLworCQkpIHsKKwkJaW50IGs7CisJCWsgPSBrc3RhcnQoKENIQVIpYyk7 CS8qIEtlcm1pdCBTIG9yIEkgcGFja2V0PyAqLworCQlpZiAoaykgeworCQkgICAgaW50IGtzaWdu ID0gMDsKKwkJICAgIGlmIChrIDwgMCkgewkvKiBNaW51cy1Qcm90b2NvbD8gKi8KKyNpZmRlZiBO T1NFUlZFUgorCQkJZ290byBub3NlcnZlcjsJLyogTmVlZCBzZXJ2ZXIgbW9kZSBmb3IgdGhpcyAq LworI2Vsc2UKKwkJCWtzaWduID0gMTsJLyogUmVtZW1iZXIgKi8KKwkJCWsgPSAwIC0gazsJLyog Q29udmVydCB0byBhY3R1YWwgcHJvdG9jb2wgKi8KKwkJCWp1c3RvbmUgPSAxOwkvKiBGbGFnIGZv ciBwcm90b2NvbCBtb2R1bGUgKi8KKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCQkgICAgfSBlbHNl CisJCSAgICAgIGp1c3RvbmUgPSAwOworCQkgICAgay0tOwkJLyogQWRqdXN0IGtzdGFydCdzIHJl dHVybiB2YWx1ZSAqLworCQkgICAgaWYgKGsgPT0gUFJPVE9fSykgeworCQkJZXh0ZXJuIGludCBw cm90b2NvbCwgZ19wcm90bzsKKwkJCWV4dGVybiBDSEFSIHNzdGF0ZTsKKwkJCWdfcHJvdG8gPSBw cm90b2NvbDsKKwkJCXByb3RvY29sID0gUFJPVE9fSzsgLyogQ3J1ZGUuLi4gKi8KKwkJCXNzdGF0 ZSA9IGtzaWduID8gJ3gnIDogJ3YnOworCQkJY21kYnVmWzBdID0gTlVMOworCQkJcmV0dXJuKC0z KTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisjaWZkZWYgTk9TRVJWRVIKKwkgIG5vc2VydmVyOgor I2VuZGlmIC8qIE5PU0VSVkVSICovCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisjZW5kaWYgLyog Tk9YRkVSICovCisKKwkgICAgY2hzcmMgPSAxOwkJCS8qIFJlbWVtYmVyIGNoYXJhY3RlciBzb3Vy Y2UgaXMgdHR5LiAqLworCSAgICBicmtjaGFyID0gYzsKKworI2lmZGVmIElLU0QKKyAgICAgICAg ICAgIGlmIChpbnNlcnZlciAmJiBjIDwgMCkgeyAgICAvKiBFbmQgb2Ygc2Vzc2lvbj8gKi8KKyAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJndHdvcmQgYyA8IDAiLCJleGl0aW5nIixjKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oLTQpOyAgICAgICAgICAgICAvKiBDbGVhbnVwIGFuZCB0ZXJt aW5hdGUgKi8KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyNpZmRlZiBPUzIK KyAgICAgICAgICAgaWYgKGMgPCAwKSB7CQkJLyogRXJyb3IgKi8KKwkgICAgICAgaWYgKGMgPT0g LTMpIHsJCS8qIEVtcHR5IHdvcmQ/ICovCisJCSAgIGlmIChibG9ja2x2bCA+IDApCS8qIEluIGEg YmxvY2sgKi8KKwkJICAgICBjb250aW51ZTsJCS8qIHNvIGtlZXAgbG9va2luZyBmb3IgYmxvY2sg ZW5kICovCisJCSAgIGVsc2UKKwkJICAgICByZXR1cm4oLTMpOwkvKiBPdGhlcndpc2Ugc2F5IHdl IGdvdCBub3RoaW5nICovCisJICAgICAgIH0gZWxzZSB7CQkJLyogTm90IGVtcHR5IHdvcmQgKi8K KwkJICAgcmV0dXJuKC00KTsJCS8qIFNvIHNvbWUga2luZCBvZiBpL28gZXJyb3IgKi8KKwkgICAg ICAgfQorICAgICAgICAgICB9CisjZWxzZQorI2lmZGVmIE1BQworCSAgIGlmIChjID09IC0zKQkJ CS8qIEVtcHR5IHdvcmQuLi4gKi8KKwkgICAgIGlmIChibG9ja2x2bCA+IDApCisJICAgICAgIGNv bnRpbnVlOworCSAgICAgZWxzZQorCSAgICAgICByZXR1cm4oLTMpOworI2VuZGlmIC8qIE1BQyAq LworI2VuZGlmIC8qIE9TMiAqLworCSAgIGlmIChjID09IEVPRikgewkJLyogVGhpcyBjYW4gaGFw cGVuIGlmIHN0ZGluIG5vdCB0dHkuICovCisjaWZkZWYgRUlOVFIKKy8qCisgIFNvbWUgb3BlcmF0 aW5nIGFuZC9vciBDIHJ1bnRpbWUgc3lzdGVtcyByZXR1cm4gRUlOVFIgZm9yIG5vIGdvb2QgcmVh c29uLAorICB3aGVuIHRoZSBlbmQgb2YgdGhlIHN0YW5kYXJkIGlucHV0ICJmaWxlIiBpcyBlbmNv dW50ZXJlZC4gIEluIGNhc2VzIGxpa2UKKyAgdGhpcywgd2UgZ2V0IGludG8gYW4gaW5maW5pdGUg bG9vcDsgaGVuY2UgdGhlIGVpbnRyIGNvdW50ZXIsIHdoaWNoIGlzIHJlc2V0CisgIHRvIDAgdXBv biBlYWNoIGNhbGwgdG8gdGhpcyByb3V0aW5lLgorKi8KKwkJZGVidWcoRjEwMSwiZ3R3b3JkIEVP RiIsIiIsZXJybm8pOworCQlpZiAoZXJybm8gPT0gRUlOVFIgJiYgKytlaW50ciA8IDQpIC8qIFdo ZW4gYmcnZCBwcm9jZXNzIGlzICovCisJCSAgY29udGludWU7CQkvKiBmZydkIGFnYWluLiAqLwor I2VuZGlmIC8qIEVJTlRSICovCisJCXJldHVybigtNCk7CisJICAgIH0KKwkgICAgYyAmPSBjbWRt c2s7CQkvKiBTdHJpcCBhbnkgcGFyaXR5IGJpdCAqLworCX0JCQkJLyogaWYgZGVzaXJlZC4gKi8K KworLyogTm93IHdlIGhhdmUgdGhlIG5leHQgY2hhcmFjdGVyICovCisKKwlpc2VzYyA9IChjID09 IEVTQyk7CQkvKiBBIHJlYWwgRVNDPyAqLworCisJaWYgKCFmaXJzdG5iICYmIGMgPiBTUCkgewkv KiBGaXJzdCBub25ibGFuayAqLworCSAgICBmaXJzdG5iID0gYzsKKwkgICAgaWYgKGMgPT0gJyIn KQkJLyogU3RhcnRzIHdpdGggZG91YmxlcXVvdGUgKi8KKwkgICAgICBkcSA9IDE7CisJfQorCWlm IChjID09ICciJykJCQkvKiBDb3VudCBkb3VibGVxdW90ZXMgKi8KKwkgIGRxbisrOworCisJaWYg KHF1b3RlICYmIChjID09IENSIHx8IGMgPT0gTEYpKSB7IC8qIEVudGVyIGtleSBmb2xsb3dpbmcg cXVvdGUgKi8KKwkgICAgKmJwKysgPSBDTURROwkJLyogRG91YmxlIGl0ICovCisJICAgICpicCA9 IE5VTDsKKwkgICAgcXVvdGUgPSAwOworCX0KKyAgICAgICAgaWYgKHF1b3RlID09IDApIHsJCS8q IElmIHRoaXMgaXMgbm90IGEgcXVvdGVkIGNoYXJhY3RlciAqLworCSAgICBzd2l0Y2ggKGMpIHsK KwkgICAgICBjYXNlIENNRFE6CQkvKiBHb3QgdGhlIHF1b3RlIGNoYXJhY3RlciBpdHNlbGYgKi8K KwkJaWYgKCFjb21tZW50ICYmIHF1b3RpbmcpCisJCSAgcXVvdGUgPSAxOwkJLyogRmxhZyBpdCBp ZiBub3QgaW4gYSBjb21tZW50ICovCisJCWJyZWFrOworCSAgICAgIGNhc2UgRkY6CQkJLyogRm9y bWZlZWQuICovCisgICAgICAgICAgICAgICAgYyA9IE5MOyAgICAgICAgICAgICAgICAgLyogUmVw bGFjZSB3aXRoIG5ld2xpbmUgKi8KKwkJY21kY2xyc2NuKCk7CQkvKiBDbGVhciB0aGUgc2NyZWVu ICovCisJCWJyZWFrOworCSAgICAgIGNhc2UgSFQ6CQkJLyogSG9yaXpvbnRhbCBUYWIgKi8KKwkJ aWYgKGNvbW1lbnQpCQkvKiBJZiBpbiBjb21tZW50LCAqLworCQkgIGMgPSBTUDsJCS8qIHN1YnN0 aXR1dGUgc3BhY2UgKi8KKwkJZWxzZQkJCS8qIG90aGVyd2lzZSAqLworCQkgIGMgPSBFU0M7CQkv KiBzdWJzdGl0dXRlIEVTQyAoZm9yIGNvbXBsZXRpb24pICovCisJCWJyZWFrOworCSAgICAgIGNh c2UgJzsnOgkJCS8qIFRyYWlsaW5nIGNvbW1lbnQgKi8KKwkgICAgICBjYXNlICcjJzoKKwkJaWYg KCEgKGJyayAmIDQpICkgewkvKiBJZiBub3Qga2VlcGluZyBjb21tZW50cyAqLworCQkgICAgaWYg KGlud29yZCA9PSAwICYmIHF1b3RpbmcpIHsgLyogSWYgbm90IGluIGEgd29yZCAqLworCQkJY29t bWVudCA9IDE7CS8qIHN0YXJ0IGEgY29tbWVudC4gKi8KKwkJCWNwID0gYnA7CS8qIHJlbWVtYmVy IHdoZXJlIGl0IHN0YXJ0cy4gKi8KKwkJICAgIH0KKwkJfQorCQlicmVhazsKKwkgICAgfQorCSAg ICBpZiAoIWtzdGFydGFjdGl2ZSAmJgkvKiBOb3QgaW4gcG9zc2libGUgS2VybWl0IHBhY2tldCAq LworCQkhY29tbWVudCAmJiBjID09IFNQKSB7CS8qIFNwYWNlIG5vdCBpbiBjb21tZW50ICovCisg ICAgICAgICAgICAgICAgKmJwKysgPSAoY2hhcikgYzsJLyogZGVwb3NpdCBpbiBidWZmZXIgaWYg bm90IGFscmVhZHkgKi8KKwkJLyogZGVidWcoRjEwMSwiZ3R3b3JkIGVjaG9mIDIiLCIiLGVjaG9m KTsgKi8KKyNpZmRlZiBCRUJPWAorICAgICAgICAgICAgICAgIGlmIChlY2hvZikgeworCQkgICAg Y21kZWNobygoY2hhcikgYywgMCk7IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisgICAgICAg ICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICBmZmx1c2go c3RkZXJyKTsKKyAgICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChl Y2hvZikgeworCQkgICAgY21kZWNobygoY2hhcikgYywgMCk7IC8qIEVjaG8gd2hhdCB3YXMgdHlw ZWQuICovCisJCSAgICBpZiAodGltZWxpbWl0KQorCQkgICAgICBmZmx1c2goc3Rkb3V0KTsKKwkJ fQorI2VuZGlmIC8qIEJFQk9YICovCisgICAgICAgICAgICAgICAgaWYgKGlud29yZCA9PSAwKSB7 ICAgICAgLyogSWYgbGVhZGluZywgZ29iYmxlIGl0LiAqLworICAgICAgICAgICAgICAgICAgICBw cCsrOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAvKiBJZiB0ZXJtaW5hdGluZywgcmV0dXJuLiAqLworCQkgICAg aWYgKCghZHEgJiYgKCgqcHAgIT0gbGJyYWNlKSB8fCAoYnJhY2VsdmwgPT0gMCkpKSB8fAorCQkJ KGRxICYmIGRxbiA+IDEgJiYgKihicC0yKSA9PSAnIicpKSB7CisJCQlucCA9IGJwOworCQkJY21i cHRyID0gbnA7CisJCQlpZiAoc2V0YXRtKHBwLDApIDwgMCkgeworCQkJICAgIHByaW50ZigiP0Zp ZWxkIHRvbyBsb25nIGVycm9yIDFcbiIpOworCQkJICAgIGRlYnVnKEYxMTEsImd0d29yZCB0b28g bG9uZyAjMSIscHAsc3RybGVuKHBwKSk7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJCX0KKwkJCWJy a2NoYXIgPSBjOworCQkJaW53b3JkID0gY21mbGdzID0gMDsKKwkJCXJldHVybigwKTsKKwkJICAg IH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPT0gbGJyYWNlKSB7CisJCWJyYWNlbHZsKys7 CisJCS8qIGRlYnVnKEYxMDEsImd0d29yZCBicmFjZWx2bCsrIiwiIixicmFjZWx2bCk7ICovCisJ ICAgIH0KKyAgICAgICAgICAgIGlmIChjID09IHJicmFjZSAmJiBicmFjZWx2bCA+IDApIHsKKyAg ICAgICAgICAgICAgICBicmFjZWx2bC0tOworCQkvKiBkZWJ1ZyhGMTAxLCJndHdvcmQgYnJhY2Vs dmwtLSIsIiIsYnJhY2VsdmwpOyAqLworICAgICAgICAgICAgICAgIGlmIChsaW5lYmVnaW4pCisJ CSAgYmxvY2tsdmwtLTsKKyAgICAgICAgICAgIH0KKwkgICAgaWYgKChjID09ICc9JyB8fCBjID09 ICc6JykgJiYKKwkJLyogXl5eICovCisJCSFrc3RhcnRhY3RpdmUgJiYgIWNvbW1lbnQgJiYgYnJr IC8qICYmIChmaXJzdG5iID09ICcvJykgKi8KKwkJKSB7CisgICAgICAgICAgICAgICAgKmJwKysg PSAoY2hhcikgYzsJLyogU3dpdGNoIGFyZ3VtZW50IHNlcGFyYXRvciAqLworCQkvKiBkZWJ1ZyhG MTExLCJndHdvcmQgc3dpdGNoIGFyZ3NlcCIsY21kYnVmLGJyayk7ICovCisjaWZkZWYgQkVCT1gK KyAgICAgICAgICAgICAgICBpZiAoZWNob2YpIHsKKwkJICAgIGNtZGVjaG8oKGNoYXIpIGMsIDAp OyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLworICAgICAgICAgICAgICAgICAgICBmZmx1c2go c3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAg ICAgICAgfQorI2Vsc2UKKwkJaWYgKGVjaG9mKSB7CisJCSAgICBjbWRlY2hvKChjaGFyKSBjLCAw KTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KKwkJICAgIGlmICh0aW1lbGltaXQpCisJCSAg ICAgIGZmbHVzaChzdGRvdXQpOworCQl9CisjZW5kaWYgLyogQkVCT1ggKi8KKwkJaWYgKCgqcHAg IT0gbGJyYWNlKSB8fCAoYnJhY2VsdmwgPT0gMCkpIHsKKwkJICAgIG5wID0gYnA7CisJCSAgICBj bWJwdHIgPSBucDsKKwkJICAgIGlmIChzZXRhdG0ocHAsMikgPCAwKSB7IC8qIF5eXiAqLworCQkJ cHJpbnRmKCI/RmllbGQgdG9vIGxvbmcgZXJyb3IgMVxuIik7CisJCQlkZWJ1ZyhGMTExLCJndHdv cmQgdG9vIGxvbmcgIzEiLHBwLHN0cmxlbihwcCkpOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0K KwkJICAgIGlud29yZCA9IGNtZmxncyA9IDA7CisJCSAgICBicmtjaGFyID0gYzsKKwkJICAgIHJl dHVybig0KTsKKwkJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPT0gTEYgfHwg YyA9PSBDUikgewkvKiBDUiBvciBMRi4gKi8KKwkJaWYgKGVjaG9mKSB7CisgICAgICAgICAgICAg ICAgICAgIGNtZG5ld2woKGNoYXIpYyk7CS8qIGVjaG8gaXQuICovCisjaWZkZWYgQkVCT1gKKyAg ICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgIGZm bHVzaChzdGRlcnIpOworI2VuZGlmIC8qIEJFQk9YICovCisgICAgICAgICAgICAgICAgfQorCQl7 CisJCSAgICAvKiBUcmltIHRyYWlsaW5nIGNvbW1lbnQgYW5kIHdoaXRlc3BhY2UgKi8KKwkJICAg IGNoYXIgKnFxOworCQkgICAgaWYgKGNvbW1lbnQpIHsJLyogRXJhc2UgY29tbWVudCAqLworCQkJ d2hpbGUgKGJwID49IGNwKSAvKiBCYWNrIHRvIGNvbW1lbnQgcG9pbnRlciAqLworCQkJICAqYnAt LSA9IE5VTDsKKwkJCWJwKys7CisJCQlwcCA9IGJwOwkvKiBBZGp1c3Qgb3RoZXIgcG9pbnRlcnMg Ki8KKwkJCWlud29yZCA9IDA7CS8qIGFuZCBmbGFncyAqLworCQkJY29tbWVudCA9IDA7CisJCQlj cCA9IE5VTEw7CisJCSAgICB9CisJCSAgICBxcSA9IGlud29yZCA/IHBwIDogKGNoYXIgKiljbWRi dWY7CisJCSAgICAvKiBFcmFzZSB0cmFpbGluZyB3aGl0ZXNwYWNlICovCisJCSAgICB3aGlsZSAo YnAgPiBxcSAmJiAoKihicC0xKSA9PSBTUCB8fCAqKGJwLTEpID09IEhUKSkgeworCQkJYnAtLTsK KwkJCS8qIGRlYnVnKEYwMDAsImVyYXNpbmciLCIiLCpicCk7ICovCisJCQkqYnAgPSBOVUw7CisJ CSAgICB9CisJCSAgICBsYXN0Y2hhciA9IChicCA+IHFxKSA/ICooYnAtMSkgOiBOVUw7CisJCSAg ICBwcmV2Y2hhciA9IChicCA+IHFxKzEpID8gKihicC0yKSA6IE5VTDsKKwkJfQorCQlpZiAobGlu ZWJlZ2luICYmIGJsb2NrbHZsID4gMCkgLyogQmxhbmsgbGluZSBpbiB7Li4ufSBibG9jayAqLwor CQkgIGNvbnRpbnVlOworCisJCWxpbmViZWdpbiA9IDE7CQkvKiBBdCBiZWdpbm5pbmcgb2YgbmV4 dCBsaW5lICovCisJCWlzY29udGQgPSBwcmV2Y2hhciAhPSBDTURRICYmCisJCSAgKGxhc3RjaGFy ID09ICctJyB8fCBsYXN0Y2hhciA9PSBsYnJhY2UpOworCQlkZWJ1ZyhGMTAxLCJndHdvcmQgaXNj b250ZCIsIiIsaXNjb250ZCk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNjb250ZCkgewkJLyog SWYgbGluZSBpcyBjb250aW51ZWQuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoc3Jj KSB7CS8qIElmIHJlYWRpbmcgZnJvbSB0dHksICovCisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoKihicC0xKSA9PSBsYnJhY2UpIHsgLyogQ2hlY2sgZm9yICJiZWdpbiBibG9jayIgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqYnArKyA9IFNQOwkvKiBJbnNlcnQgYSBzcGFjZSBm b3IgbmVhdG5lc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja2x2bCsrOwkv KiBDb3VudCBibG9jayBuZXN0aW5nIGxldmVsICovCisgICAgICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgewkvKiBPciBoeXBoZW4gKi8KKwkJCSAgICBicC0tOwkvKiBPdmVyd3JpdGUgdGhlIGh5 cGhlbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgKmJwID0gTlVMOwkvKiBlcmFzZSB0aGUgZGFzaCwgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwkvKiBhbmQgZ28gYmFjayBmb3IgbmV4dCBjaGFyIG5vdy4gKi8KKyAgICAg ICAgICAgICAgICAgICAgfQorCQl9IGVsc2UgaWYgKGJsb2NrbHZsID4gMCkgeyAvKiBObyBjb250 aW51YXRpb24gY2hhcmFjdGVyICovCisJCSAgICBpZiAoY2hzcmMpIHsJLyogQnV0IHdlJ3JlIGlu IGEgImJsb2NrIiAqLworCQkJKmJwKysgPSAnLCc7CS8qIEFkZCBjb21tYSAqLworCQkJKmJwID0g TlVMOworCQkJY29udGludWU7CisJCSAgICB9CisJCX0gZWxzZSB7CQkvKiBObyBjb250aW51YXRp b24sIGVuZCBvZiBjb21tYW5kLiAqLworCQkgICAgKmJwID0gTlVMOwkJLyogVGVybWluYXRlIHRo ZSBjb21tYW5kIHN0cmluZy4gKi8KKwkJICAgIGlmIChjb21tZW50KSB7CS8qIElmIHdlJ3JlIGlu IGEgY29tbWVudCwgKi8KKwkJCWNvbW1lbnQgPSAwOwkvKiBTYXkgd2UncmUgbm90IGFueSBtb3Jl LCAqLworCQkJKmNwID0gTlVMOwkvKiBjdXQgaXQgb2ZmLiAqLworCQkgICAgfQorCQkgICAgbnAg PSBicDsJCS8qIFdoZXJlIHRvIHN0YXJ0IG5leHQgZmllbGQuICovCisJCSAgICBjbWJwdHIgPSBu cDsKKwkJICAgIGlmIChzZXRhdG0ocHAsMCkgPCAwKSB7IC8qIENvcHkgZmllbGQgdG8gYXRvbSBi dWZmZXIgKi8KKwkJCWRlYnVnKEYxMTEsImd0d29yZCB0b28gbG9uZyAjMiIscHAsc3RybGVuKHBw KSk7CisJCQlwcmludGYoIj9GaWVsZCB0b28gbG9uZyBlcnJvciAyXG4iKTsKKwkJCXJldHVybigt OSk7CisJCSAgICB9CisJCSAgICBpbndvcmQgPSAwOwkJLyogTm90IGluIGEgd29yZCBhbnkgbW9y ZS4gKi8KKwkJICAgIGNyZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIC8qIGRlYnVnKEYx MTAsImd0d29yZCIsImNyZmxhZyBpcyBzZXQiLDApOyAqLworI2lmZGVmIENLX1JFQ0FMTAorCQkg ICAgY3VycmVudCA9IHJsYXN0OworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCQkgICAgY21mbGdz ID0gMTsKKwkJICAgIGlmICgheGNtZHNyYworI2lmZGVmIENLX1JFQ0FMTAorCQkJfHwgZm9yY2Vf YWRkCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisJCQkpCisgIAkJICAgICAgYWRkY21kKGNtZGJ1 Zik7CisJCSAgICByZXR1cm4oY21mbGdzKTsKKwkJfQorICAgICAgICAgICAgfQorLyoKKyAgVGhp cyBzZWN0aW9uIGhhbmRsZXMgaW50ZXJhY3RpdmUgaGVscCwgY29tcGxldGlvbiwgZWRpdGluZywg YW5kIGhpc3RvcnkuCisgIFJlYXJyYW5nZWQgYXMgYSBzd2l0Y2ggc3RhdGVtZW50IGV4ZWN1dGVk IG9ubHkgaWYgd2UncmUgYXQgdG9wIGxldmVsIHNpbmNlCisgIHRoZXJlIGlzIG5vIG5lZWQgZm9y IGFueSBvZiB0aGlzIHdpdGhpbiBjb21tYW5kIGZpbGVzIGFuZCBtYWNyb3M6IEF1ZyAyMDAwLgor ICBKdW4gMjAwMTogRXZlbiBpZiBhdCB0b3AgbGV2ZWwsIHNraXAgdGhpcyBpZiB0aGUgY2hhcmFj dGVyIHdhcyBmZXRjaGVkIGZyb20KKyAgdGhlIHJlcGFyc2Ugb3IgcmVjYWxsIGJ1ZmZlciwgb3Ig aWYgc3RkaW4gaXMgcmVkaXJlY3RlZC4KKyovCisJICAgIGlmICgoeGNtZHNyYyA9PSAwCQkvKiBP bmx5IGF0IHRvcCBsZXZlbCAqLworI2lmbmRlZiBOT1NQTAorCQl8fCBhc2tmbGFnCQkvKiBvciB1 c2VyIGlzIHR5cGluZyBBU0sgcmVzcG9uc2UgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCQkgKSAm JiBjaHNyYyAhPSAwICYmIHJlYWx0dHkpIHsgLyogZnJvbSB0aGUgcmVhbCBrZXlib2FyZCAqLwor CisvKiBVc2UgQU5TSSAvIFZUMTAwIHVwIGFuZCBkb3duIGFycm93IGtleXMgZm9yIGNvbW1hbmQg cmVjYWxsLiAgKi8KKworCQlpZiAoaXNlc2MgJiYgKAorI2lmZGVmIElLU0QKKwkJICAgIGluc2Vy dmVyCisjZWxzZQorCQkgICAgMAorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBVU0VfQVJST1dL RVlTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAxCisjZW5kaWYgLyogVVNFX0FS Uk9XS0VZUyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAg ICAgICAgICApIHsJCS8qIEEgcmVhbCBFU0Mgd2FzIHR5cGVkICovCisJCSAgICBpbnQgeDsKKwkJ ICAgIG1zbGVlcCgyMDApOwkvKiBXYWl0IDEvNSBzZWMgKi8KKwkJICAgIHggPSBjbWRjb25jaGso KTsJLyogV2FzIGl0IGZvbGxvd2VkIGJ5IGFueXRoaW5nPyAqLworCQkgICAgZGVidWcoRjEwMSwi QXJyb3drZXkgRVNDIGNtZGNvbmNoayIsIiIseCk7CisKKwkJICAgIGlmICh4ID4gMSkgewkvKiBJ ZiBmb2xsb3dlZCBieSBhdCBsZWFzdCAyIGNoYXJzICovCisJCQlpbnQgYzI7CisJCQljMiA9IGNt ZGdldGMoMCk7IC8qIEdldCB0aGUgZmlyc3Qgb25lICovCisJCQlkZWJ1ZyhGMTAxLCJBcnJvd2tl eSBFU0MgYzIiLCIiLGMyKTsKKworCQkJaWYgKGMyICE9ICdbJyAmJiBjMiAhPSAnTycpIHsgLyog SWYgbm90IFsgb3IgTyAqLworCQkJICAgIHB1c2hjID0gYzI7CS8qIFB1c2ggaXQgYW5kIHRha2Ug dGhlIEVTQyBzb2xvICovCisJCQl9IGVsc2UgeworCQkJICAgIGMyID0gY21kZ2V0YygwKTsgLyog R2V0IHRoZSBzZWNvbmQgb25lICovCisJCQkgICAgZGVidWcoRjEwMSwiQXJyb3drZXkgRVNDIGMz IiwiIixjMik7CisJCQkgICAgc3dpdGNoIChjMikgeworI2lmbmRlZiBOT1JFQ0FMTAorCQkJICAg ICAgY2FzZSAnQSc6CS8qIFVwICovCisJCQkJYyA9IEJFTDsKKwkJCQljID0gQ19VUDsKKwkJCQli cmVhazsKKwkJCSAgICAgIGNhc2UgJ0InOgkvKiBEb3duICovCisJCQkJYyA9IEJFTDsKKwkJCQlj ID0gQ19ETjsKKwkJCQlicmVhazsKKwkJCSAgICAgIGNhc2UgJ0MnOgkvKiBSaWdodCAqLworCQkJ ICAgICAgY2FzZSAnRCc6CS8qIExlZnQgKi8KKyNlbHNlCisJCQkgICAgICBkZWZhdWx0OgorI2Vu ZGlmIC8qIE5PUkVDQUxMICovCisJCQkJYyA9IEJFTDsgLyogV2UgZG9uJ3QgdXNlIHRoZXNlIHll dCAqLworCQkJCWJyZWFrOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJfQorCisJCXN3aXRj aCAoYykgeworCQkgIGNhc2UgJz8nOgkJLyogPy1IZWxwICovCisjaWZuZGVmIE5PU1BMCisJCSAg ICBpZiAoYXNrZmxhZykJLyogTm8gaGVscCBpbiBBU0sgcmVzcG9uc2UgKi8KKwkJICAgICAgYnJl YWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKwkJICAgIGlmIChxdW90aW5nCisJCQkmJiAha3N0YXJ0 YWN0aXZlCisJCQkmJiAhY29tbWVudAorCQkJKSB7CisJCQljbWRlY2hvKChjaGFyKSBjLCAwKTsK KwkJCSpicCA9IE5VTDsKKwkJCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7CisJCQkgICAgZGVidWco RjExMSwiZ3R3b3JkIHRvbyBsb25nID8iLHBwLHN0cmxlbihwcCkpOworCQkJICAgIHByaW50Zigi P1RvbyBsb25nXG4iKTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQorCQkJcW1mbGFnID0gMTsK KwkJCXJldHVybihjbWZsZ3MgPSAzKTsKKwkJICAgIH0KKworCQkgIGNhc2UgRVNDOgkJLyogRXNj IG9yIFRhYiBjb21wbGV0aW9uICovCisJCSAgICBpZiAoIWNvbW1lbnQpIHsKKwkJCSpicCA9IE5V TDsKKwkJCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7CisJCQkgICAgZGVidWcoRjExMSwiZ3R3b3Jk IHRvbyBsb25nIEVzYyIscHAsc3RybGVuKHBwKSk7CisJCQkgICAgcHJpbnRmKCI/VG9vIGxvbmdc biIpOworCQkJICAgIHJldHVybigtOSk7CisJCQl9CisJCQllc2ZsYWcgPSAxOworCQkJcmV0dXJu KGNtZmxncyA9IDIpOworCQkgICAgfSBlbHNlIHsKKwkJCWJsZWVwKEJQX1dBUk4pOworCQkJY29u dGludWU7CisJCSAgICB9CisKKwkJICBjYXNlIEJTOgkJLyogQ2hhcmFjdGVyIGRlbGV0aW9uICov CisJCSAgY2FzZSBSVUI6CisJCSAgICBpZiAoYnAgPiBjbWRidWYpIHsJLyogSWYgc3RpbGwgaW4g YnVmZmVyLi4uICovCisJCQljbWRjaGFyZGVsKCk7CS8qIGVyYXNlIGl0LiAqLworCQkJYnAtLTsJ CS8qIHBvaW50IGJlaGluZCBpdCwgKi8KKwkJCWlmICgqYnAgPT0gbGJyYWNlKSBicmFjZWx2bC0t OyAvKiBBZGp1c3QgYnJhY2UgY291bnQgKi8KKwkJCWlmICgqYnAgPT0gcmJyYWNlKSBicmFjZWx2 bCsrOworCQkJaWYgKCgqYnAgPT0gU1ApICYmIC8qIEZsYWcgaWYgY3VycmVudCBmaWVsZCBnb25l ICovCisJCQkgICAgKCpwcCAhPSBsYnJhY2UgfHwgYnJhY2VsdmwgPT0gMCkpCisJCQkgIGlud29y ZCA9IDA7CisJCQkqYnAgPSBOVUw7CS8qIEVyYXNlIGNoYXJhY3RlciBmcm9tIGJ1ZmZlci4gKi8K KwkJICAgIH0gZWxzZSB7CQkvKiBPdGhlcndpc2UsICovCisJCQlibGVlcChCUF9XQVJOKTsKKwkJ CWNtcmVzKCk7CS8qIGFuZCBzdGFydCBwYXJzaW5nIGEgbmV3IGNvbW1hbmQuICovCisJCQkqYnAg PSAqYXRtYnVmID0gTlVMOworCQkgICAgfQorCQkgICAgaWYgKHBwIDwgYnApCisJCSAgICAgIGNv bnRpbnVlOworCQkgICAgZWxzZQorCQkgICAgICByZXR1cm4oY21mbGdzID0gLTEpOworCisJCSAg Y2FzZSBMREVMOgkJLyogXlUsIGxpbmUgZGVsZXRpb24gKi8KKwkJICAgIHdoaWxlICgoYnAtLSkg PiBjbWRidWYpIHsKKwkJCWNtZGNoYXJkZWwoKTsKKwkJCSpicCA9IE5VTDsKKwkJICAgIH0KKwkJ ICAgIGNtcmVzKCk7CQkvKiBSZXN0YXJ0IHRoZSBjb21tYW5kLiAqLworCQkgICAgKmJwID0gKmF0 bWJ1ZiA9IE5VTDsKKwkJICAgIGlud29yZCA9IDA7CisJCSAgICByZXR1cm4oY21mbGdzID0gLTEp OworCisJCSAgY2FzZSBXREVMOgkJLyogXlcsIHdvcmQgZGVsZXRpb24gKi8KKwkJICAgIGlmIChi cCA8PSBjbWRidWYpIHsJLyogQmVlcCBpZiBub3RoaW5nIHRvIGRlbGV0ZSAqLworCQkJYmxlZXAo QlBfV0FSTik7CisJCQljbXJlcygpOworCQkJKmJwID0gKmF0bWJ1ZiA9IE5VTDsKKwkJCXJldHVy bihjbWZsZ3MgPSAtMSk7CisJCSAgICB9CisJCSAgICBicC0tOworCQkgICAgLyogQmFjayB1cCBv dmVyIGFueSB0cmFpbGluZyBub25hbHBoYW51bXMgKi8KKwkJICAgIC8qIFRoaXMgaXMgZGVwZW5k ZW50IG9uIEFTQ0lJIGNvbGxhdGluZyBzZXF1ZW5jZSAqLworCQkgICAgLyogYnV0IGlzYWxwaGFu dW0oKSBpcyBub3QgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUuICovCisJCSAgICBmb3IgKCA7CisJCQkg KGJwID49IGNtZGJ1ZikgJiYKKwkJCSAoKCpicCA8ICcwJykgfHwKKwkJCSAoKCpicCA+ICc5Jykg JiYgKCpicCA8ICdAJykpIHx8CisJCQkgKCgqYnAgPiAnWicpICYmICgqYnAgPCAnYScpKSB8fAor CQkJICgqYnAgPiAneicpKTsKKwkJCSBicC0tCisJCQkgKSB7CisJCQljbWRjaGFyZGVsKCk7CisJ CQkqYnAgPSBOVUw7CisJCSAgICB9CisJCSAgICAvKiBOb3cgZGVsZXRlIGJhY2sgdG8gcmlnaHRt b3N0IHJlbWFpbmluZyBub25hbHBoYW51bSAqLworCQkgICAgZm9yICggOyAoYnAgPj0gY21kYnVm KSAmJiAoKmJwKSA7IGJwLS0pIHsKKwkJCWlmICgoKmJwIDwgJzAnKSB8fAorCQkJICAgICgqYnAg PiAnOScgJiYgKmJwIDwgJ0AnKSB8fAorCQkJICAgICgqYnAgPiAnWicgJiYgKmJwIDwgJ2EnKSB8 fAorCQkJICAgICgqYnAgPiAneicpKQorCQkJICBicmVhazsKKwkJCWNtZGNoYXJkZWwoKTsKKwkJ CSpicCA9IE5VTDsKKwkJICAgIH0KKwkJICAgIGJwKys7CisJCSAgICBpbndvcmQgPSAwOworCQkg ICAgcmV0dXJuKGNtZmxncyA9IC0xKTsKKworCQkgIGNhc2UgUkRJUzogewkJLyogXlIsIHJlZGlz cGxheSAqLworCQkgICAgICBjaGFyICpjcHg7IGNoYXIgY3g7CisJCSAgICAgICpicCA9IE5VTDsK KwkJICAgICAgcHJpbnRmKCJcbiVzIixjbXByb20pOworCQkgICAgICBjcHggPSBjbWRidWY7CisJ CSAgICAgIHdoaWxlICgoY3ggPSAqY3B4KyspKSB7CisJCQkgIGNtZGVjaG8oY3gsMCk7CisJCSAg ICAgIH0KKwkJICAgICAgZmZsdXNoKHN0ZG91dCk7CisJCSAgICAgIGNvbnRpbnVlOworCQkgIH0K KyNpZm5kZWYgTk9MQVNURklMRQorCQkgIGNhc2UgVlQ6CisJCSAgICBpZiAobGFzdGZpbGUpIHsK KwkJCXByaW50ZigiJXMgIixsYXN0ZmlsZSk7CisjaWZkZWYgR0VNRE9TCisJCQlmZmx1c2goc3Rk b3V0KTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKwkJCWlud29yZCA9IGNtZmxncyA9IDA7CisJCQlh ZGRidWYobGFzdGZpbGUpOwkvKiBTdXBwbHkgZGVmYXVsdC4gKi8KKwkJCWlmIChzZXRhdG0obGFz dGZpbGUsMCkgPCAwKSB7CisJCQkgICAgcHJpbnRmKCJMYXN0IG5hbWUgdG9vIGxvbmdcbiIpOwor CQkJICAgIGlmIChucCkgZnJlZShucCk7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJCX0KKwkJICAg IH0gZWxzZSB7CQkvKiBObyBkZWZhdWx0ICovCisJCQlibGVlcChCUF9XQVJOKTsKKwkJICAgIH0K KwkJICAgIHJldHVybigwKTsKKyNlbmRpZgkvKiBOT0xBU1RGSUxFICovCisJCX0KKworI2lmZGVm IENLX1JFQ0FMTAorCQlpZiAob25fcmVjYWxsICYmCS8qIFJlYWRpbmcgY29tbWFuZHMgZnJvbSBr ZXlib2FyZD8gKi8KKwkJICAgIChjbV9yZWNhbGwgPiAwKSAmJgkvKiBTYXZpbmcgY29tbWFuZHM/ ICovCisJCSAgICAoYyA9PSBDX1VQIHx8IGMgPT0gQ19VUDIpKSB7IC8qIEdvIHVwIG9uZSAqLwor CQkgICAgaWYgKGxhc3RfcmVjYWxsID09IDIgJiYgY3VycmVudCA+IDApCisJCSAgICAgIGN1cnJl bnQtLTsKKwkJICAgIGlmIChjdXJyZW50IDwgMCkgewkvKiBOb3doZXJlIHRvIGdvLCAqLworCQkJ YmxlZXAoQlBfV0FSTik7CisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJICAgIGlmIChyZWNhbGxb Y3VycmVudF0pIHsgLyogV2UgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgKi8KKwkJCXdoaWxlICgo YnAtLSkgPiBjbWRidWYpIHsgLyogRXJhc2UgY3VycmVudCBsaW5lICovCisJCQkgICAgY21kY2hh cmRlbCgpOworCQkJICAgICpicCA9IE5VTDsKKwkJCX0KKwkJCWNrc3RybmNweShjbWRidWYscmVj YWxsW2N1cnJlbnRdLENNREJMKTsKKyNpZmRlZiBPU0sKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJ d3JpdGUoZmlsZW5vKHN0ZG91dCksICJcciIsIDEpOworCQkJcHJpbnRmKCIlcyVzIixjbXByb20s Y21kYnVmKTsKKyNlbHNlCisJCQlwcmludGYoIlxyJXMlcyIsY21wcm9tLGNtZGJ1Zik7CisjZW5k aWYgLyogT1NLICovCisJCQljdXJyZW50LS07CisJCSAgICB9CisJCSAgICBsYXN0X3JlY2FsbCA9 IDE7CisJCSAgICByZXR1cm4oY21mbGdzID0gLTEpOyAvKiBGb3JjZSBhIHJlcGFyc2UgKi8KKwkJ fQorCQlpZiAob25fcmVjYWxsICYmCS8qIFJlYWRpbmcgY29tbWFuZHMgZnJvbSBrZXlib2FyZD8g Ki8KKwkJICAgIChjbV9yZWNhbGwgPiAwKSAmJgkvKiBTYXZpbmcgY29tbWFuZHM/ICovCisJCSAg ICAoYyA9PSBDX0ROKSkgewkvKiBEb3duIG9uZSAqLworCQkgICAgaW50IHggPSAxOworCQkgICAg aWYgKGxhc3RfcmVjYWxsID09IDEpCisJCSAgICAgIHgrKzsKKwkJICAgIGlmIChjdXJyZW50ICsg eCA+IHJsYXN0KSB7IC8qIEFscmVhZHkgYXQgYm90dG9tLCBiZWVwICovCisJCQlibGVlcChCUF9X QVJOKTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQkgICAgY3VycmVudCArPSB4OwkvKiBPSyB0 byBnbyBkb3duICovCisJCSAgICBpZiAocmVjYWxsW2N1cnJlbnRdKSB7CisJCQl3aGlsZSAoKGJw LS0pID4gY21kYnVmKSB7IC8qIEVyYXNlIGN1cnJlbnQgbGluZSAqLworCQkJICAgIGNtZGNoYXJk ZWwoKTsKKwkJCSAgICAqYnAgPSBOVUw7CisJCQl9CisJCQlja3N0cm5jcHkoY21kYnVmLHJlY2Fs bFtjdXJyZW50XSxDTURCTCk7CisjaWZkZWYgT1NLCisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCXdy aXRlKGZpbGVubyhzdGRvdXQpLCAiXHIiLCAxKTsKKwkJCXByaW50ZigiJXMlcyIsY21wcm9tLGNt ZGJ1Zik7CisjZWxzZQorCQkJcHJpbnRmKCJcciVzJXMiLGNtcHJvbSxjbWRidWYpOworI2VuZGlm IC8qIE9TSyAqLworCQkJbGFzdF9yZWNhbGwgPSAyOworCQkJcmV0dXJuKGNtZmxncyA9IC0xKTsg LyogRm9yY2UgcmVwYXJzZSAqLworCQkgICAgfQorCQl9CisjZW5kaWYgLyogQ0tfUkVDQUxMICov CisJICAgIH0KKworCSAgICBpZiAoYyA8IFNQICYmIHF1b3RlID09IDApIHsgLyogQW55IG90aGVy IHVucXVvdGVkIGNvbnRyb2wgY2hhciAqLworCQlpZiAoIWNoc3JjKSB7CQkvKiBJZiBjbWQgZmls ZSwgcG9pbnQgcGFzdCBpdCAqLworCQkgICAgYnArKzsKKwkJfSBlbHNlIHsKKwkJICAgIGJsZWVw KEJQX1dBUk4pOworCQl9CisJCWNvbnRpbnVlOwkJLyogY29udGludWUsIGRvbid0IHB1dCBpbiBi dWZmZXIgKi8KKwkgICAgfQorCSAgICBsaW5lYmVnaW4gPSAwOwkJLyogTm90IGF0IGJlZ2lubmlu ZyBvZiBsaW5lICovCisjaWZkZWYgQkVCT1gKKwkgICAgaWYgKGVjaG9mKSB7CisgICAgICAgICAg ICAgICAgY21kZWNobygoY2hhcikgYywgMCk7CS8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisg ICAgICAgICAgICAgICAgZmZsdXNoIChzdGRvdXQpOworICAgICAgICAgICAgICAgIGZmbHVzaChz dGRlcnIpOworICAgICAgICAgICAgfQorI2Vsc2UKKyNpZmRlZiBOT1NQTAorICAgICAgICAgICAg aWYgKGVjaG9mIHx8IGNoc3JjKQorI2Vsc2UKKyAgICAgICAgICAgIGlmIChlY2hvZiB8fCAoZWNo b3N0YXJzICYmIGNoc3JjKSkKKyNlbmRpZgkvKiBOT1NQTCAqLworCSAgICAgIGNtZGVjaG8oKGNo YXIpIGMsIDApOwkvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLworI2VuZGlmIC8qIEJFQk9YICov CisgICAgICAgIH0gZWxzZSB7CQkJLyogVGhpcyBjaGFyYWN0ZXIgd2FzIHF1b3RlZC4gKi8KKwkg ICAgaW50IHFmID0gMTsKKwkgICAgcXVvdGUgPSAwOwkJCS8qIFVuc2V0IHRoZSBxdW90ZSBmbGFn LiAqLworCSAgICAvKiBkZWJ1ZyhGMDAwLCJndHdvcmQgcXVvdGUgMCIsIiIsYyk7ICovCisJICAg IC8qIFF1b3RlIGNoYXJhY3RlciBhdCB0aGlzIGxldmVsIGlzIG9ubHkgZm9yIFNQLCA/LCBhbmQg Y29udHJvbHMgKi8KKyAgICAgICAgICAgIC8qIElmIGFueXRoaW5nIGVsc2Ugd2FzIHF1b3RlZCwg bGVhdmUgcXVvdGUgaW4sIGFuZCBsZXQgKi8KKwkgICAgLyogdGhlIGNvbW1hbmQtc3BlY2lmaWMg cGFyc2luZyByb3V0aW5lcyBoYW5kbGUgaXQsIGUuZy4gXDAwNyAqLworCSAgICBpZiAoYyA+IDMy ICYmIGMgIT0gJz8nICYmIGMgIT0gUlVCICYmIGNoc3JjICE9IDApIHsKKwkJLyogZGVidWcoRjAw MCwiZ3R3b3JkIHF1b3RlIDEiLCIiLGMpOyAqLworCQkqYnArKyA9IENNRFE7CQkvKiBEZXBvc2l0 IFwgaWYgaXQgY2FtZSBmcm9tIHR0eSAqLworCQlxZiA9IDA7CQkJLyogYW5kIGRvbid0IGVyYXNl IGl0IGZyb20gc2NyZWVuICovCisJCWxpbmViZWdpbiA9IDA7CQkvKiBOb3QgYXQgYmVnaW5uaW5n IG9mIGxpbmUgKi8KKyNpZmRlZiBCU19ESVJTRVAKKy8qCisgIFRoaXMgaXMgYSBoYWNrIHRvIGhh bmRsZSAiY2QgXCIgb3IgImNkIGZvb1wiIG9uIE9TLzIgYW5kIHNpbWlsYXIgc3lzdGVtcy4KKyAg SWYgd2Ugd2VyZSBjYWxsZWQgZnJvbSBjbWRpcigpIGFuZCB0aGUgcHJldmlvdXMgY2hhcmFjdGVy IHdhcyB0aGUgcXVvdGUKKyAgY2hhcmFjdGVyLCBpLmUuIGJhY2tzbGFzaCwgYW5kIHRoaXMgY2hh cmFjdGVyIGlzIHRoZSBjb21tYW5kIHRlcm1pbmF0b3IsCisgIHRoZW4gd2Ugc3R1ZmYgYW4gZXh0 cmEgYmFja3NsYXNoIGludG8gdGhlIGJ1ZmZlciB3aXRob3V0IGVjaG9pbmcsIHRoZW4KKyAgd2Ug c3R1ZmYgdGhlIGNhcnJpYWdlIHJldHVybiBiYWNrIGluIGFnYWluLCBhbmQgZ28gYmFjayBhbmQg cHJvY2VzcyBpdCwKKyAgdGhpcyB0aW1lIHdpdGggdGhlIHF1b3RlIGZsYWcgb2ZmLgorKi8KKwkg ICAgfSBlbHNlIGlmIChkaXJuYW1mbGcgJiYgKGMgPT0gQ1IgfHwgYyA9PSBMRiB8fCBjID09IFNQ KSkgeworCQkvKiBkZWJ1ZyhGMDAwLCJndHdvcmQgcXVvdGUgMiIsIiIsYyk7ICovCisJCSpicCsr ID0gQ01EUTsKKwkJbGluZWJlZ2luID0gMDsJCS8qIE5vdCBhdCBiZWdpbm5pbmcgb2YgbGluZSAq LworCQkqYnAgPSAoYyA9PSBTUCA/IFNQIDogQ1IpOworCQlnb3RvIENNRElSUEFSU0U7CisjZW5k aWYgLyogQlNfRElSU0VQICovCisJICAgIH0KKyNpZmRlZiBCRUJPWAorCSAgICBpZiAoZWNob2Yp IHsKKyAgICAgICAgICAgICAgICBjbWRlY2hvKChjaGFyKSBjLCBxZik7CS8qIEVjaG8gd2hhdCB3 YXMgdHlwZWQuICovCisgICAgICAgICAgICAgICAgZmZsdXNoIChzdGRvdXQpOworICAgICAgICAg ICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICAgICAgfQorI2Vsc2UKKwkgICAgaWYgKGVj aG9mKSBjbWRlY2hvKChjaGFyKSBjLCBxZik7IC8qIE5vdyBlY2hvIHF1b3RlZCBjaGFyYWN0ZXIg Ki8KKyNlbmRpZiAvKiBCRUJPWCAqLworCSAgICAvKiBkZWJ1ZyhGMTExLCJndHdvcmQgcXVvdGUi LGNtZGJ1ZixjKTsgKi8KKwl9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAoZWNob2YpIGNt ZGVjaG8oKGNoYXIpIGMscXVvdGUpOyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKCFjb21tZW50KSBpbndvcmQgPSAxOwkvKiBGbGFn IHdlJ3JlIGluIGEgd29yZC4gKi8KKwlpZiAocXVvdGUpIGNvbnRpbnVlOwkJLyogRG9uJ3QgZGVw b3NpdCBxdW90ZSBjaGFyYWN0ZXIuICovCisgICAgICAgIGlmIChjICE9IE5MKSB7CQkJLyogRGVw b3NpdCBjb21tYW5kIGNoYXJhY3Rlci4gKi8KKwkgICAgKmJwKysgPSAoY2hhcikgYzsJCS8qIGFu ZCBtYWtlIHN1cmUgdGhlcmUgaXMgYSBOVUwgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgICpicCA9 IE5VTDsJCQkvKiBhZnRlciBpdCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwl9CisgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIGJpZyB3aGlsZSAqLwor ICAgIGJsZWVwKEJQX1dBUk4pOworICAgIHByaW50ZigiP0NvbW1hbmQgdG9vIGxvbmcsIG1heGlt dW0gbGVuZ3RoOiAlZC5cbiIsQ01EQkwpOworICAgIGNtZmxncyA9IC0yOworICAgIHJldHVybigt OSk7Cit9CisKKy8qIFV0aWxpdHkgZnVuY3Rpb25zICovCisKKy8qIEEgRCBEIEIgVSBGICAtLSBB ZGQgdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IGNwIHRvIHRoZSBjb21tYW5kIGJ1ZmZlciAgKi8K Kworc3RhdGljIGludAorYWRkYnVmKGNwKSBjaGFyICpjcDsgeworICAgIGludCBsZW4gPSAwOwor ICAgIHdoaWxlICgoKmNwICE9IE5VTCkgJiYgKGJwIDwgY21kYnVmK0NNREJMKSkgeworICAgICAg ICAqYnArKyA9ICpjcCsrOyAgICAgICAgICAgICAgICAgIC8qIENvcHkgYW5kICovCisgICAgICAg IGxlbisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnQgdGhlIGNoYXJhY3RlcnMu ICovCisgICAgfQorICAgICpicCsrID0gU1A7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1 dCBhIHNwYWNlIGF0IHRoZSBlbmQgKi8KKyAgICAqYnAgPSBOVUw7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUZXJtaW5hdGUgd2l0aCBhIG51bGwgKi8KKyAgICBucCA9IGJwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgdGhlIG5leHQtZmllbGQgcG9pbnRlciAqLwor ICAgIGNtYnB0ciA9IG5wOworICAgIHJldHVybihsZW4pOyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJldHVybiB0aGUgbGVuZ3RoICovCit9CisKKy8qICBTIEUgVCBBIFQgTSAgLS0gIERlcG9z aXQgYSB0b2tlbiBpbiB0aGUgYXRvbSBidWZmZXIuICAqLworLyoKKyAgQnJlYWsgb24gc3BhY2Us IG5ld2xpbmUsIGNhcnJpYWdlIHJldHVybiwgb3IgTlVMLgorICBDYWxsIHdpdGg6CisgICAgY3Ag PSBQb2ludGVyIHRvIHN0cmluZyB0byBjb3B5IHRvIGF0b20gYnVmZmVyLgorICAgIGZjb2RlID0g MCBtZWFucyBicmVhayBvbiB3aGl0ZXNwYWNlIG9yIEVPTC4KKyAgICBmY29kZSA9IDEgbWVhbnMg ZG9uJ3QgYnJlYWsgb24gc3BhY2UuCisgICAgZmNvZGUgPSAyIG1lYW5zIGJyZWFrIG9uIHNwYWNl LCAnOicsIG9yICc9Jy4KKyAgICBmY29kZSA9IDMgbWVhbnMgY29weSB0aGUgd2hvbGUgc3RyaW5n LgorICBOdWxsLXRlcm1pbmF0ZSB0aGUgcmVzdWx0LgorICBSZXR1cm4gbGVuZ3RoIG9mIHRva2Vu LCBhbmQgYWxzbyBzZXQgZ2xvYmFsICJjYyIgdG8gdGhpcyBsZW5ndGguCisgIFJldHVybiAtMSBp ZiB0b2tlbiB3YXMgdG9vIGxvbmcuCisqLworc3RhdGljIGludAorc2V0YXRtKGNwLGZjb2RlKSBj aGFyICpjcDsgaW50IGZjb2RlOyB7CisgICAgY2hhciAqYXAsICp4cCwgKmRxcCA9IE5VTEwsIGxi cmFjZSwgcmJyYWNlOworICAgIGludCBicmFjZWx2bCA9IDAsIGRxID0gMDsKKworICAgIHJlZ2lz dGVyIGNoYXIgKiBzOworICAgIHJlZ2lzdGVyIGludCBuID0gMDsKKworICAgIGlmIChjbWZsZGZs Z3MgJiAxKSB7CQkvKiBIYW5kbGUgZ3JvdXBpbmcgKi8KKwlsYnJhY2UgPSAnKCc7CisJcmJyYWNl ID0gJyknOworICAgIH0gZWxzZSB7CisJbGJyYWNlID0gJ3snOworCXJicmFjZSA9ICd9JzsKKyAg ICB9CisgICAgY2MgPSAwOwkJCQkvKiBDaGFyYWN0ZXIgY291bnRlciAqLworICAgIGFwID0gYXRt YnVmOwkJCS8qIEFkZHJlc3Mgb2YgYXRvbSBidWZmZXIgKi8KKworICAgIHMgPSBjcDsKKworICAg IHdoaWxlICgqcysrKSBuKys7CQkJLyogU2F2ZSBhIGNhbGwgdG8gc3RybGVuICovCisKKyAgICBp ZiAobiA+IEFUTUJMKSB7CisJcHJpbnRmKCI/Q29tbWFuZCBidWZmZXIgb3ZlcmZsb3dcbiIpOwor CXJldHVybigtMSk7CisgICAgfQorICAgIC8qIGRlYnVnKEYxMTEsInNldGF0bSIsY3Asbik7ICov CisgICAgaWYgKGNwID09IGFwKSB7CQkJLyogSW4gY2FzZSBzb3VyY2UgaXMgYXRvbSBidWZmZXIg Ki8KKwl4cCA9IGF0eWJ1ZjsJCQkvKiBtYWtlIGEgY29weSAqLworI2lmZGVmIENPTU1FTlQKKwlz dHJuY3B5KHhwLGFwLEFUTUJMKTsJCS8qIHNvIHdlIGNhbiBjb3B5IGl0IGJhY2ssIGVkaXRlZC4g Ki8KKwljcCA9IHhwOworI2Vsc2UKKwlzID0gYXA7CisJd2hpbGUgKCgqeHArKyA9ICpzKyspKSA7 CS8qIFdlIGFscmVhZHkga25vdyBpdCdzIGJpZyBlbm91Z2ggKi8KKwljcCA9IHhwID0gYXR5YnVm OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisgICAgKmFwID0gTlVMOwkJCQkvKiBaZXJv IHRoZSBhdG9tIGJ1ZmZlciAqLworICAgIGlmIChmY29kZSA9PSAxKSB7CQkJLyogVHJpbSB0cmFp bGluZyBibGFua3MgKi8KKwl3aGlsZSAoLS1uID49IDAgJiYgY3Bbbl0gPT0gU1ApCisJICA7CisJ Y3BbbisxXSA9IE5VTDsKKyAgICB9CisgICAgd2hpbGUgKCpjcCA9PSBTUCkgewkJCS8qIFRyaW0g bGVhZGluZyBzcGFjZXMgKi8KKwljcCsrOworCW4tLTsKKyAgICB9CisgICAgaWYgKCpjcCA9PSAn IicpIHsJCQkvKiBTdGFydHMgd2l0aCBkb3VibGVxdW90ZT8gKi8KKwlkcSA9IDE7CisJZHFwID0g Y3A7CisgICAgfQorICAgIHdoaWxlICgqY3ApIHsKKyAgICAgICAgaWYgKCpjcCA9PSBsYnJhY2Up CisJICBicmFjZWx2bCsrOworICAgICAgICBlbHNlIGlmICgqY3AgPT0gcmJyYWNlKQorCSAgYnJh Y2VsdmwtLTsKKwlpZiAoYnJhY2VsdmwgPCAwKQorCSAgYnJhY2VsdmwgPSAwOworCWlmIChicmFj ZWx2bCA9PSAwKSB7CisJICAgIGlmIChkcSkgeworCQlpZiAoKmNwID09IFNQIHx8ICpjcCA9PSBI VCkgeworCQkgICAgaWYgKGNwID4gZHFwKzEpIHsKKwkJCWlmICgqKGNwLTEpID09ICciJyAmJiAq KGNwLTIpICE9IENNRFEpIHsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAg ICB9IGVsc2UgaWYgKCgqY3AgPT0gU1AgfHwgKmNwID09IEhUKSAmJiBmY29kZSAhPSAxICYmIGZj b2RlICE9IDMpCisJICAgICAgYnJlYWs7CisJICAgIGlmICgoZmNvZGUgPT0gMikgJiYgKCpjcCA9 PSAnPScgfHwgKmNwID09ICc6JykpIGJyZWFrOworCSAgICBpZiAoKGZjb2RlICE9IDMpICYmICgq Y3AgPT0gTEYgfHwgKmNwID09IENSKSkgYnJlYWs7CisJfQorICAgICAgICAqYXArKyA9ICpjcCsr OworICAgICAgICBjYysrOworICAgIH0KKyAgICAqYXAgPSBOVUw7CQkJCS8qIFRlcm1pbmF0ZSB0 aGUgc3RyaW5nLiAqLworICAgIC8qIGRlYnVnKEYxMTEsInNldGF0bSByZXN1bHQiLGF0bWJ1Zixj Yyk7ICovCisgICAgcmV0dXJuKGNjKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJu IGxlbmd0aC4gKi8KK30KKworLyoKKyAgVGhlc2UgZnVuY3Rpb25zIGF0dGVtcHQgdG8gaGlkZSBz eXN0ZW0gZGVwZW5kZW5jaWVzIGZyb20gdGhlIG1haW5saW5lCisgIGNvZGUgaW4gZ3R3b3JkKCku ICBEdW1teSBhcmcgZm9yIGNtZGdldGMoKSBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAor ICBjb25pbmMoKSwgdHRpbmMoKSwgZXRjLCBzaW5jZSBhIHBvaW50ZXIgdG8gdGhpcyByb3V0aW5l IGNhbiBiZSBwYXNzZWQgaW4KKyAgcGxhY2Ugb2YgdGhvc2UgdG8gdG5fZG9vcCgpLgorCisgIE5v IGxvbmdlciBzdGF0aWMuICBVc2VkIGJ5IGFza21vcmUoKS4gIEZyaSBBdWcgMjAgMTU6MDM6MzQg MTk5OS4KKyovCisjZGVmaW5lIENNRF9DT05JTkMJCQkvKiBIb3cgd2UgZ2V0IGtleWJvYXJkIGNo YXJzICovCisKK2ludAorY21kZ2V0Yyh0aW1lbGltaXQpIGludCB0aW1lbGltaXQ7IHsJLyogR2V0 IGEgY2hhcmFjdGVyIGZyb20gdGhlIHR0eS4gKi8KKyAgICBpbnQgYzsKKyNpZmRlZiBJS1NECisg ICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgQ0tfTE9H SU4KKyAgICBleHRlcm4gaW50IHhfbG9nZ2VkOworI2VuZGlmIC8qIENLX0xPR0lOICovCisjaWZk ZWYgVE5DT0RFCisgICAgc3RhdGljIGludCBnb3RfY3IgPSAwOworICAgIGV4dGVybiBpbnQgY2t4 ZWNoOworICAgIGludCB0eCA9IDAsIGlzX3RuID0gMDsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwor ICAgIGlmIChwdXNoYworI2lmbmRlZiBOT1NQTAorCSYmICFhc2tmbGFnCisjZW5kaWYgLyogTk9T UEwgKi8KKwkpIHsKKyAgICAgICAgZGVidWcoRjExMSwiY21kZ2V0YygpIiwicHVzaGMiLHB1c2hj KTsKKwljID0gcHVzaGM7CisJcHVzaGMgPSBOVUw7CisJaWYgKHhjbWZkYiAmJiBjID09ICc/JykJ CS8qIERvbid0IGVjaG8gPyB0d2ljZSBpZiBjaGFpbmluZy4gKi8KKwkgIGNtZGNoYXJkZWwoKTsK KwlyZXR1cm4oYyk7CisgICAgfQorI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgeworCWNoYXIgY2g7 CisJYyA9IGRnbmNpbmIoMCwmY2gsMSk7CQkvKiAtMSBpcyBFT0YsIC0yIFRPLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC1jIGlzIEFPUy9WUyBlcnJvciAqLwor CWlmIChjID09IC0yKSB7CQkJLyogdGltZW91dCB3YXMgZW5hYmxlZD8gKi8KKwkgICAgcmVzdG8o Y2hhbm5lbCgwKSk7CQkvKiByZXNldCB0aW1lb3V0cyAqLworCSAgICBjID0gZGduY2luYigwLCZj aCwxKTsJLyogcmV0cnkgdGhpcyBub3chICovCisJfQorCWlmIChjIDwgMCkgcmV0dXJuKC00KTsJ CS8qIEVPRiBvciBzb21lIGVycm9yICovCisJZWxzZSBjID0gKGludCkgY2ggJiAwMTc3OwkvKiBH ZXQgY2hhciB3aXRob3V0IHBhcml0eSAqLworLyoJZWNob2YgPSAxOyAqLworICAgIH0KKyNlbHNl IC8qIE5vdCBkYXRhZ2VuZXJhbCAqLworI2lmbmRlZiBNSU5JWDIKKyAgICBpZiAoCisjaWZkZWYg SUtTRAorCSghbG9jYWwgJiYgaW5zZXJ2ZXIpIHx8CisjZW5kaWYgLyogSUtTRCAqLworCXRpbWVs aW1pdCA+IDApIHsKKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICBHRVRORVhUQ0g6CisgICAgICAg ICAgICBpc190biA9ICFwdXNoYyAmJiAhbG9jYWwgJiYgc3N0ZWxuZXQ7CisjZW5kaWYgLyogVE5D T0RFICovCisjaWZkZWYgQ09NTUVOVAorCSAgICBjID0gY29uaW5jKHRpbWVsaW1pdCA+IDAgPyAx IDogMCk7CisjZWxzZSAvKiBDT01NRU5UICovCisJICAgIC8qIFRoaXMgaXMgbGlrZWx5IHRvIGJy ZWFrIHRoZSBhc2t0aW1lb3V0Li4uICovCisJICAgIGMgPSBjb25pbmModGltZWxpbWl0KTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisJICAgIC8qIGRlYnVnKEYxMDEsImNtZGdldGMgY29uaW5jIiwi IixjKTsgKi8KKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAgIGlmIChjID49IDAgJiYgaXNfdG4p IHsJLyogU2VydmVyLXNpZGUgVGVsbmV0ICovCisgICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7 CisJCSAgY2FzZSBJQUM6CisgICAgICAgICAgICAgICAgICAgIC8qIGRlYnVnKEYxMTEsImd0d29y ZCBJQUMiLCJjIixjKTsgKi8KKyAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKCh0eCA9IHRuX2Rvb3AoKENIQVIpKGMgJiAweGZmKSxja3hlY2gs Y29uaW5jKSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBHRVRORVhUQ0g7 CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHggPD0gLTEpIHsgLyogSS9PIGVycm9y ICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGVyZSB3YXMgYSBmYXRhbCBJL08g ZXJyb3IgdGhlbiB0dGNsb3MoKSAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogaGFz IGJlZW4gY2FsbGVkIGFuZCB0aGUgbmV4dCBHRVRORVhUQ0ggYXR0ZW1wdCAgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHdpbGwgYmUgIWlzX3RuIHNpbmNlIHR0Y2xvcygpIHNldHMgc3N0 ZWxuZXQgPSAwICovCisgICAgICAgICAgICAgICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsLTEp OyAvKiAob3IgcmV0dXJuKC00KT8gKi8KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0 eCA9PSAxKSB7IC8qIEVDSE8gY2hhbmdlICovCisgICAgICAgICAgICAgICAgICAgICAgICBja3hl Y2ggPSBkcHggPSAxOyAvKiBHZXQgbmV4dCBjaGFyICovCisgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIEdFVE5FWFRDSDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eCA9PSAy KSB7IC8qIEVDSE8gY2hhbmdlICovCisgICAgICAgICAgICAgICAgICAgICAgICBja3hlY2ggPSBk cHggPSAwOyAvKiBHZXQgbmV4dCBjaGFyICovCisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IEdFVE5FWFRDSDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eCA9PSAzKSB7IC8q IFF1b3RlZCBJQUMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAyNTU7CS8qIHByb2Nl ZWVkIHdpdGggaXQuICovCisgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBJS1NfT1BUSU9O CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR4ID09IDQpIHsJLyogSUtTIFN0YXRlIENo YW5nZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBHRVRORVhUQ0g7CisgICAgICAg ICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHR4ID09IDYpIHsJLyogUmVtb3RlIExvZ291dCAqLworCQkJZG9leGl0KEdP T0RfRVhJVCwwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkJCWdvdG8gR0VUTkVY VENIOwkvKiBVbmtub3duLCBnZXQgbmV4dCBjaGFyICovCisJCSAgICB9CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgIGNhc2UgQ1I6 CisgICAgICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpIHsKKwkJ CWlmIChnb3RfY3IpIHsKKwkJCSAgICAvKiBUaGlzIG1lYW5zIHRoZSBzZW5kZXIgaXMgdmlvbGF0 aW5nIFRlbG5ldCAgICovCisJCQkgICAgLyogcHJvdG9jb2wgYmVjYXVzZSB3ZSByZWNlaXZlZCB0 d28gQ1JzIGluIGEgICAqLworCQkJICAgIC8qIHJvdyB3aXRob3V0IGdldHRpbmcgZWl0aGVyIExG IG9yIE5VTC4gICAgICAgKi8KKwkJCSAgICAvKiBUaGlzIHdpbGwgbm90IHNvbHZlIHRoZSBwcm9i bGVtIGJ1dCBpdCAgICAgICovCisJCQkgICAgLyogd2lsbCBhdCBsZWFzdCBhbGxvdyB0d28gQ1Jz IHRvIGRvIHNvbWV0aGluZyAqLworCQkJICAgIC8qIHdoZXJlYXMgYmVmb3JlIHRoZSB1c2VyIHdv dWxkIGhhdmUgdG8gZ3Vlc3MgKi8KKwkJCSAgICAvKiB0byBzZW5kIExGIG9yIE5VTCBhZnRlciB0 aGUgQ1IuICAgICAgICAgICAgICovCisJCQkgICAgZGVidWcoRjEwMCwiZ3R3b3JkIENSIHRlbG5l dCBlcnJvciIsIiIsMCk7CisJCQkgICAgYyA9IExGOworCQkJfSBlbHNlIHsKKwkJCSAgICBkZWJ1 ZyhGMTAwLCJndHdvcmQgc2tpcHBpbmcgQ1IiLCIiLDApOworCQkJICAgIGdvdF9jciA9IDE7CS8q IFJlbWVtYmVyIGEgQ1Igd2FzIHJlY2VpdmVkICovCisJCQkgICAgZ290byBHRVRORVhUQ0g7CisJ CQl9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCQlkZWJ1ZyhGMTAwLCJndHdvcmQg Q1IgdG8gTEYiLCIiLDApOworCQkJYyA9IExGOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBMRjoKKyAgICAg ICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSkgeworCQkJZ290X2Ny ID0gMDsKKwkJCWRlYnVnKEYxMDAsImd0d29yZCBMRiIsIiIsMCk7CisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisJCQlpZiAoZ290X2NyKSB7CisJCQkgICAgZ290X2NyID0gMDsKKwkJCSAg ICBkZWJ1ZyhGMTAwLCJndHdvcmQgc2tpcHBpbmcgTEYiLCIiLDApOworCQkJICAgIGdvdG8gR0VU TkVYVENIOworCQkJfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBOVUw6CisgICAgICAgICAgICAgICAgICAg IGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkgJiYgZ290X2NyKSB7CisJCQljID0gTEY7CisJ CQlkZWJ1ZyhGMTAwLCJndHdvcmQgTlVMIHRvIExGIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKwkJCWRlYnVnKEYxMDAsImd0d29yZCBOVUwiLCIiLDApOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7CisgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAg Y2FzZSBDUjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhVEVMT1BUX1UoVEVMT1BUX0JJTkFS WSkgJiYgZ290X2NyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBtZWFucyB0 aGUgc2VuZGVyIGlzIHZpb2xhdGluZyBUZWxuZXQgICAqLworICAgICAgICAgICAgICAgICAgICAg ICAgLyogcHJvdG9jb2wgYmVjYXVzZSB3ZSByZWNlaXZlZCB0d28gQ1JzIGluIGEgICAqLworICAg ICAgICAgICAgICAgICAgICAgICAgLyogcm93IHdpdGhvdXQgZ2V0dGluZyBlaXRoZXIgTEYgb3Ig TlVMLiAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyB3aWxsIG5vdCBz b2x2ZSB0aGUgcHJvYmxlbSBidXQgaXQgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAg Lyogd2lsbCBhdCBsZWFzdCBhbGxvdyB0d28gQ1JzIHRvIGRvIHNvbWV0aGluZyAqLworICAgICAg ICAgICAgICAgICAgICAgICAgLyogd2hlcmVhcyBiZWZvcmUgdGhlIHVzZXIgd291bGQgaGF2ZSB0 byBndWVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gc2VuZCBMRiBvciBOVUwg YWZ0ZXIgdGhlIENSLiAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGVi dWcoRjEwMCwiZ3R3b3JkIENSIHRlbG5ldCBlcnJvciIsIiIsMCk7CisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAxOwkvKiBSZW1l bWJlciBhIENSIHdhcyByZWNlaXZlZCAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIC8qIGRlYnVnKEYxMDAsImd0d29yZCBDUiB0byBMRiIsIiIsMCk7ICovCisg ICAgICAgICAgICAgICAgICAgIGMgPSBMRjsKKwkJICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgY2FzZSBMRjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdvdF9jcikgeworICAgICAgICAg ICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRl YnVnKEYxMDAsImd0d29yZCBza2lwcGluZyBMRiIsIiIsMCk7ICovCisgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIEdFVE5FWFRDSDsKKyAgICAgICAgICAgICAgICAgICAgfQorCQkgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIE5VTDoKKyAgICAgICAgICAgICAgICAgICAgaWYg KGdvdF9jcikgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGRlYnVnKEYxMDAsImd0d29yZCBza2lwcGluZyBOVUwiLCIiLDAp OyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBHRVRORVhUQ0g7CisjaWZkZWYgQ09N TUVOVAorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMDAsImd0d29yZCBOVUwiLCIiLDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBDT01NRU5UICovCisjaWZkZWYgSUtTRAorCQkgIGNhc2UgRVRYOgkJLyogQ3RybC1DLi4uICov CisgICAgICAgICAgICAgICAgICBjYXNlIEVPVDoJCS8qIEVPVCA9IEVPRiAqLworICAgICAgICAg ICAgICAgICAgICAgIGlmIChpbnNlcnZlcgorI2lmZGVmIENLX0xPR0lOCisJCQkgICYmICF4X2xv Z2dlZAorI2VuZGlmIC8qIENLX0xPR0lOICovCisJCQkgICkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC00KTsKKwkJICAgIGJyZWFrOworI2VuZGlmIC8qIElLU0QgKi8KKwkJICBk ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworICAgIH0gZWxzZSB7Cisj aWZkZWYgT1MyCisJYyA9IGNvbmluYygwKTsKKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIENNRF9D T05JTkMKKyN1bmRlZiBDTURfQ09OSU5DCisjZW5kaWYgLyogQ01EX0NPTklOQyAqLworCWMgPSBn ZXRjaGFyKCk7CisjZW5kaWYgLyogT1MyICovCisgICAgfQorI2Vsc2UgIC8qIE1JTklYMiAqLwor I3VuZGVmIGdldGMKKyNpZmRlZiBDTURfQ09OSU5DCisjdW5kZWYgQ01EX0NPTklOQworI2VuZGlm IC8qIENNRF9DT05JTkMgKi8KKyAgICBjID0gZ2V0YyhzdGRpbik7CisgICAgLyogZGVidWcoRjEw MSwiY21kZ2V0YyBnZXRjIiwiIixjKTsgKi8KKyNlbmRpZiAvKiBNSU5JWDIgKi8KKyNpZmRlZiBS VFUKKyAgICBpZiAocnR1X2J1ZykgeworI2lmZGVmIENNRF9DT05JTkMKKyN1bmRlZiBDTURfQ09O SU5DCisjZW5kaWYgLyogQ01EX0NPTklOQyAqLworCWMgPSBnZXRjaGFyKCk7CQkJLyogUlRVIGRv ZXNuJ3QgZGlzY2FyZCB0aGUgXlogKi8KKwlydHVfYnVnID0gMDsKKyAgICB9CisjZW5kaWYgLyog UlRVICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICByZXR1cm4oYyk7CQkJCS8qIFJl dHVybiB3aGF0IHdlIGdvdCAqLworfQorCisvKiAjaWZkZWYgVVNFX0FSUk9XS0VZUyAqLworCisv KiBNZWNoYW5pc20gdG8gdXNlIGZvciBwZWVraW5nIGludG8gc3RkaW4gYnVmZmVyICovCisKKyNp Zm5kZWYgVVNFX0ZJTEVfQ05UCQkJLyogc3RkaW4tPl9fY250ICovCisjaWZuZGVmIFVTRV9GSUxF X19DTlQJCQkvKiBOb3RlOiB0d28gdW5kZXJzY29yZXMgKi8KKyNpZmRlZiBIUFVYCQkJCS8qIEhQ VVggNy0xMSAqLworI2lmbmRlZiBIUFVYNQorI2lmbmRlZiBIUFVYNgorI2RlZmluZSBVU0VfRklM RV9fQ05UCisjZW5kaWYgLyogSFBVWDYgKi8KKyNlbmRpZiAvKiBIUFVYNSAqLworI2Vsc2UKKyNp ZmRlZiBBTllTQ08JCQkJLyogU0NPIFVOSVgsIE9TUjUsIFVuaXh3YXJlLCBldGMgKi8KKyNpZm5k ZWYgT0xEX1VOSVhXQVJFCQkJLyogQnV0IG5vdCBVbml4d2FyZSAxLnggb3IgMi4wICovCisjaWZu ZGVmIFVOSVhXQVJFMgkJCS8qIG9yIDIuMS4wICovCisjZGVmaW5lIFVTRV9GSUxFX19DTlQKKyNl bmRpZiAvKiBVTklYV0FSRTIgKi8KKyNlbmRpZiAvKiBPTERfVU5JWFdBUkUgKi8KKyNlbmRpZiAv KiBBTllTQ08gKi8KKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogVVNFX0ZJTEVfX0NOVCAq LworI2VuZGlmIC8qIFVTRV9GSUxFX0NOVCAqLworCisjaWZuZGVmIFVTRV9GSUxFX1IJCQkvKiBz dGRpbi0+X3IgKi8KKyNpZm5kZWYgVVNFX0ZJTEVfQ05UCisjaWZuZGVmIFVTRV9GSUxFX19DTlQK KyNpZmRlZiBCU0Q0NAkJCQkvKiB7RnJlZSxPcGVuLE5ldH1CU0QsIEJTREkgKi8KKyNkZWZpbmUg VVNFX0ZJTEVfUgorI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogVVNFX0ZJTEVfX0NOVCAq LworI2VuZGlmIC8qIFVTRV9GSUxFX0NOVCAqLworI2VuZGlmIC8qIFVTRV9GSUxFX1IgKi8KKwor I2lmbmRlZiBVU0VfRklMRV9SCQkJLyogc3RkaW4tPl9jbnQgKi8KKyNpZm5kZWYgVVNFX0ZJTEVf Q05UCisjaWZuZGVmIFVTRV9GSUxFX19DTlQKKyNkZWZpbmUgVVNFX0ZJTEVfQ05UCQkJLyogRXZl cnlib2R5IGVsc2UgKGJ1dCBMaW51eCkgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9fQ05UICovCisj ZW5kaWYgLyogVVNFX0ZJTEVfQ05UICovCisjZW5kaWYgLyogVVNFX0ZJTEVfUiAqLworCisKKy8q CisgIGMgbSBkIGMgbyBuIGMgaCBrCisKKyAgSG93IG1hbnkgY2hhcmFjdGVycyBhcmUgd2FpdGlu ZyB0byBiZSByZWFkIGF0IHRoZSBjb25zb2xlPyAgTm9ybWFsbHkKKyAgY29uY2hrKCkgd291bGQg dGVsbCB1cywgYnV0IGluIFVuaXggYW5kIFZNUyBjbWRnZXRjKCkgdXNlcyBzdGRpbyBnZXRjaGFy KCksCisgIHRodXMgYnlwYXNzaW5nIGNvbmluYygpL2NvbmNoaygpLCBzbyB3ZSBoYXZlIHRvIHBl ZWsgaW50byB0aGUgc3RkaW4gYnVmZmVyLAorICB3aGljaCBpcyB0b3RhbGx5IG5vbnBvcnRhYmxl LiAgV2hpY2ggaXMgd2h5IHRoaXMgcm91dGluZSBpcywgYXQgbGVhc3QgZm9yCisgIG5vdywgdXNl ZCBvbmx5IGZvciBjaGVja2luZyBmb3IgYXJyb3cta2V5IHNlcXVlbmNlcyBmcm9tIHRoZSBrZXli b2FyZCBhZnRlcgorICBhbiBFU0Mgd2FzIHJlYWQuICBXb3VsZG4ndCBpdCBiZSBuaWNlIGlmIHRo ZSBzdGRpbyBwYWNrYWdlIGhhZCBhIGZ1bmN0aW9uCisgIHRoYXQgcmV0dXJuZWQgdGhlIG51bWJl ciBvZiBieXRlcyB3YWl0aW5nIHRvIGJlIHJlYWQgZnJvbSBpdHMgYnVmZmVyPworICBSZXR1cm5z IDAgb3IgZ3JlYXRlciBhbHdheXMuCisqLworaW50CitjbWRjb25jaGsoKSB7CisgICAgaW50IHgg PSAwLCB5OworICAgIHkgPSBwdXNoYyA/IDEgOiAwOwkJCS8qIEhhdmUgY29tbWFuZCBjaGFyYWN0 ZXIgcHVzaGVkPyAqLworI2lmZGVmIE9TMgorICAgIHggPSBjb25jaGsoKTsJCQkvKiBDaGVjayBk ZXZpY2UtZHJpdmVyIGJ1ZmZlciAqLworICAgIGlmICh4IDwgMCkgeCA9IDA7CisjZWxzZSAvKiBP UzIgKi8KKyNpZmRlZiBDTURfQ09OSU5DCQkJLyogU2VlIGNtZGdldGMoKSAqLworICAgIHggPSBj b25jaGsoKTsJCQkvKiBDaGVjayBkZXZpY2UtZHJpdmVyIGJ1ZmZlciAqLworICAgIGlmICh4IDwg MCkgeCA9IDA7CisjZWxzZSAgLyogQ01EX0NPTklOQyAqLworCisvKiBIZXJlIHdlIG11c3QgbG9v ayBpbnNpZGUgdGhlIHN0ZGluIGJ1ZmZlciAtIGhpZ2hseSBwbGF0Zm9ybSBkZXBlbmRlbnQgKi8K KworI2lmZGVmIF9JT19FT0ZfU0VFTgkJCS8qIExpbnV4ICovCisgICAgeCA9IChpbnQpICgoc3Rk aW4tPl9JT19yZWFkX2VuZCkgLSAoc3RkaW4tPl9JT19yZWFkX3B0cikpOworICAgIGRlYnVnKEYx MDEsImNtZGNvbmNoayBfSU9fZmlsZV9mbGFncyIsIiIseCk7CisjZWxzZSAgLyogX0lPX2ZpbGVf ZmxhZ3MgKi8KKyNpZmRlZiBVU0VfRklMRV9DTlQJCQkvKiBUcmFkaXRpb25hbCAqLworI2lmZGVm IFZNUworICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayAoKnN0ZGluKS0+X2NudCIsIiIsKCpzdGRp biktPl9jbnQpOworICAgIHggPSAoKnN0ZGluKS0+X2NudDsKKyNlbHNlCisjaWZkZWYgTk9BUlJP V0tFWVMKKyAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgTk9BUlJPV0tFWVMgeCIsIiIsMCk7Cisj ZWxzZQorICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBzdGRpbi0+X2NudCIsIiIsc3RkaW4tPl9j bnQpOworICAgIHggPSBzdGRpbi0+X2NudDsKKyNlbmRpZiAvKiBOT0FSUk9XS0VZUyAqLworI2Vu ZGlmIC8qIFZNUyAqLworICAgIGlmICh4ID09IDApIHggPSBjb25jaGsoKTsKKyAgICBpZiAoeCA8 IDApIHggPSAwOworI2Vsc2UgIC8qIFVTRV9GSUxFX0NOVCAqLworI2lmZGVmIFVTRV9GSUxFX19D TlQJCQkvKiBIUC1VWCAqLworICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBzdGRpbi0+X19jbnQi LCIiLHN0ZGluLT5fX2NudCk7CisgICAgeCA9IHN0ZGluLT5fX2NudDsKKyAgICBpZiAoeCA9PSAw KSB4ID0gY29uY2hrKCk7CisgICAgaWYgKHggPCAwKSB4ID0gMDsKKyNlbHNlICAvKiBVU0VfRklM RV9DTlQgKi8KKyNpZmRlZiBVU0VfRklMRV9SCQkJLyogRnJlZUJTRCwgT3BlbkJTRCwgZXRjICov CisgICAgZGVidWcoRjEwMSwiY21kY29uY2hrIHN0ZGluLT5fciIsIiIsc3RkaW4tPl9yKTsKKyAg ICB4ID0gc3RkaW4tPl9yOworICAgIGlmICh4ID09IDApIHggPSBjb25jaGsoKTsKKyAgICBpZiAo eCA8IDApIHggPSAwOworCisgICAgLyogRmlsbCBpbiBhbnkgb3RoZXJzIGhlcmUuLi4gKi8KKwor I2VuZGlmIC8qIFVTRV9GSUxFX1IgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9fQ05UICovCisjZW5k aWYgLyogVVNFX0ZJTEVfQ05UICovCisjZW5kaWYgLyogX0lPX2ZpbGVfZmxhZ3MgKi8KKyNlbmRp ZiAvKiBDTURfQ09OSU5DICovCisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuKHggKyB5KTsK K30KKy8qICNlbmRpZiAqLyAvKiBVU0VfQVJST1dLRVlTICovCisKKworc3RhdGljIFZPSUQKK2Nt ZGNscnNjbigpIHsJCQkJLyogQ2xlYXIgdGhlIHNjcmVlbiAqLworICAgIGNrX2NscygpOworfQor CitzdGF0aWMgVk9JRAkJCQkvKiBXaGF0IHRvIGVjaG8gYXQgZW5kIG9mIGNvbW1hbmQgKi8KKyNp ZmRlZiBDS19BTlNJQworY21kbmV3bChjaGFyIGMpCisjZWxzZQorY21kbmV3bChjKSBjaGFyIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNtZG5ld2wgKi8geworI2lmZGVmIE9TMgorI2lm ZGVmIElLU0QKKyAgICBleHRlcm4gaW50IGluc2VydmVyOworICAgIGlmIChpbnNlcnZlciAmJiBj ID09IExGKQorICAgICAgcHV0Y2hhcihDUik7CisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8q IE9TMiAqLworCisgICAgcHV0Y2hhcihjKTsJCQkJLyogYyBpcyB0aGUgdGVybWluYXRpbmcgY2hh cmFjdGVyICovCisKKyNpZmRlZiBXSU5UQ1AJCQkJLyogd2hhdCBpcyB0aGlzIGRvaW5nIGhlcmU/ ICovCisgICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOworI2VuZGlmIC8qIFdJTlRDUCAqLwor CisvKgorICBBLkEuIENoZXJub3YsIHdobyBzZW50IGluIGNoYW5nZXMgZm9yIEZyZWVCU0QsIHNh aWQgd2UgYWxzbyBuZWVkZWQgdGhpcworICBmb3IgU1ZPUlBPU0lYIGJlY2F1c2UgInNldHVwIHRl cm1pbmFsIGJ5IHRlcm1pb3MgYW5kIGN1cnNlcyBkb2VzCisgIG5vdCBjb252ZXJ0IFxyIHRvIFxu LCBzbyBhZGRpdGlvbmFsIFxuIG5lZWRlZCBpbiBuZXdsaW5lIGZ1bmN0aW9uLiIgIEJ1dAorICBp dCBpcyBhbHNvIHZlcnkgbGlrZWx5IHRvIHJlc3VsdCBpbiB1bndhbnRlZCBibGFuayBsaW5lcy4K KyovCisjaWZkZWYgQlNENDQKKyAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7CisjZW5kaWYg LyogQlNENDQgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBPUzIgbm8gbG9uZ2VyIG5lZWRz IHRoaXMgYXMgYWxsIENSIGFyZSBjb252ZXJ0ZWQgdG8gTkwgaW4gY29uaW5jKCkgKi8KKyAgICAv KiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHVnbHkgZXh0cmEgYmxhbmsgbGluZXMgZGlzY3Vzc2VkIGFi b3ZlLiAgICAgICAgKi8KKyNpZmRlZiBPUzIKKyAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7 CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIGFlZ2lzCisg ICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOworI2VuZGlmIC8qIGFlZ2lzICovCisjaWZkZWYg QU1JR0EKKyAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7CisjZW5kaWYgLyogQU1JR0EgKi8K KyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKKyNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLworI2lmZGVmIEdFTURPUworICAgIGlmIChjID09IENSKSBwdXRj aGFyKE5MKTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNpZmRlZiBTVFJBVFVTCisgICAgaWYgKGMg PT0gQ1IpIHB1dGNoYXIoTkwpOworI2VuZGlmIC8qIFNUUkFUVVMgKi8KK30KKworc3RhdGljIFZP SUQKK2NtZGNoYXJkZWwoKSB7CQkJCS8qIEVyYXNlIGEgY2hhcmFjdGVyIGZyb20gdGhlIHNjcmVl biAqLworI2lmbmRlZiBOT1NQTAorICAgIGlmICghZWNob3N0YXJzKQorI2VuZGlmCS8qIE5PU1BM ICovCisgICAgICBpZiAoIWRweCkgcmV0dXJuOworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgLyog REcgJ1xiJyBpcyBFTSAoXnkgb3IgXDAzMSkgKi8KKyAgICBpZiAodGVybXR5cGUgPT0gMSkKKyAg ICAgIC8qIEVyYXNlIGEgY2hhcmFjdGVyIGZyb20gbm9uLURHIHNjcmVlbiwgKi8KKyAgICAgIGRn bmNvdWIoMSwiXDAxMCBcMDEwIiwzKTsKKyAgICBlbHNlCisjZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KKyAgICAgIHByaW50ZigiXGIgXGIiKTsKKyNpZmRlZiBHRU1ET1MKKyAgICBmZmx1c2goc3Rk b3V0KTsKKyNlbHNlCisjaWZkZWYgQkVCT1gKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAv KiBCRUJPWCAqLworI2VuZGlmIC8qIEdFTURPUyAqLworfQorCitzdGF0aWMgVk9JRAorI2lmZGVm IENLX0FOU0lDCitjbWRlY2hvKGNoYXIgYywgaW50IHF1b3RlKQorI2Vsc2UKK2NtZGVjaG8oYyxx dW90ZSkgY2hhciBjOyBpbnQgcXVvdGU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogY21k ZWNobyAqLworI2lmZGVmIE5PU1BMCisgICAgaWYgKCFkcHgpIHJldHVybjsKKyNlbHNlCisgICAg aWYgKCFlY2hvc3RhcnMpIHsKKwlpZiAoIWRweCkgcmV0dXJuOworICAgIH0gZWxzZSB7CisJYyA9 IChjaGFyKWVjaG9zdGFyczsKKyAgICB9CisjZW5kaWYJLyogTk9TUEwgKi8KKyAgICAvKiBFY2hv IHR0eSBpbnB1dCBjaGFyYWN0ZXIgYyAqLworICAgIGlmIChxdW90ZSkgeworCXB1dGNoYXIoQlMp OworCXB1dGNoYXIoU1ApOworCXB1dGNoYXIoQlMpOworI2lmZGVmIGlzcHJpbnQKKwlwdXRjaGFy KChDSEFSKSAoaXNwcmludChjKSA/IGMgOiAnXicgKSk7CisjZWxzZQorCXB1dGNoYXIoKENIQVIp ICgoYyA+PSBTUCAmJiBjIDwgREVMKSA/IGMgOiAnXicpKTsKKyNlbmRpZiAvKiBpc3ByaW50ICov CisgICAgfSBlbHNlIHsKKwlwdXRjaGFyKGMpOworICAgIH0KKyNpZmRlZiBPUzIKKyAgICBpZiAo cXVvdGU9PTEgJiYgYz09Q1IpIHB1dGNoYXIoKENIQVIpIE5MKTsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICBpZiAodGltZWxpbWl0KQorICAgICAgZmZsdXNoKHN0ZG91dCk7Cit9CisKKy8qIFJldHVy biBwb2ludGVyIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gY29tbWFuZCBidWZmZXIuICovCisKK2No YXIgKgorY21wZWVrKCkgeworICAgIHJldHVybihucCk7Cit9CisjZW5kaWYgLyogTk9JQ1AgKi8K KworCisjaWZkZWYgTk9JQ1AKKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpbmNsdWRlICJja3VjbWQu aCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNlbmRpZiAvKiBOT0lDUCAqLworCisvKiAgWCBYIEUg UyBDICAtLSAgSW50ZXJwcmV0cyBiYWNrc2xhc2ggY29kZXMgICovCisvKiAgUmV0dXJucyB0aGUg aW50IHZhbHVlIG9mIHRoZSBiYWNrc2xhc2ggY29kZSBpZiBpdCBpcyA+IC0xIGFuZCA8IDI1NiAq LworLyogIGFuZCB1cGRhdGVzIHRoZSBzdHJpbmcgcG9pbnRlciB0byBmaXJzdCBjaGFyYWN0ZXIg YWZ0ZXIgYmFja3NsYXNoIGNvZGUuICovCisvKiAgSWYgdGhlIGFyZ3VtZW50IGlzIGludmFsaWQs IGxlYXZlcyBwb2ludGVyIHVuY2hhbmdlZCBhbmQgcmV0dXJucyAtMS4gKi8KKworaW50Cit4eGVz YyhzKSBjaGFyICoqczsgewkJCS8qIEV4cGFuZCBiYWNrc2xhc2ggZXNjYXBlcyAqLworICAgIGlu dCB4LCB5LCBicmFjZSwgcmFkaXg7CQkvKiBSZXR1cm5zIHRoZSBpbnQgdmFsdWUgKi8KKyAgICBj aGFyIGhkID0gJzknOwkJCS8qIEhpZ2hlc3QgZGlnaXQgaW4gcmFkaXggKi8KKyAgICBjaGFyICpw OworCisgICAgcCA9ICpzOwkJCQkvKiBwb2ludGVyIHRvIGJlZ2lubmluZyAqLworICAgIGlmICgh cCkgcmV0dXJuKC0xKTsJCQkvKiB3YXRjaCBvdXQgZm9yIG51bGwgcG9pbnRlciAqLworICAgIHgg PSAqcCsrOwkJCQkvKiBjaGFyYWN0ZXIgYXQgYmVnaW5uaW5nICovCisgICAgaWYgKHggIT0gQ01E USkgcmV0dXJuKC0xKTsJCS8qIG1ha2Ugc3VyZSBpdCdzIGEgYmFja3NsYXNoIGNvZGUgKi8KKwor ICAgIHggPSAqcDsJCQkJLyogaXQgaXMsIGdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KKyAgICBp ZiAoeCA9PSAneycpIHsJCQkvKiBicmFja2V0ZWQgcXVhbnRpdHk/ICovCisJcCsrOwkJCQkvKiBi ZWdpbiBwYXN0IGJyYWNrZXQgKi8KKwl4ID0gKnA7CisJYnJhY2UgPSAxOworICAgIH0gZWxzZSBi cmFjZSA9IDA7CisgICAgc3dpdGNoICh4KSB7CQkJLyogU3RhcnQgaW50ZXJwcmV0aW5nICovCisg ICAgICBjYXNlICdkJzoJCQkJLyogRGVjaW1hbCByYWRpeCBpbmRpY2F0b3IgKi8KKyAgICAgIGNh c2UgJ0QnOgorCXArKzsJCQkJLyogSnVzdCBwb2ludCBwYXN0IGl0IGFuZCBmYWxsIHRocnUgKi8K KyAgICAgIGNhc2UgJzAnOgkJCQkvKiBTdGFydHMgd2l0aCBkaWdpdCAqLworICAgICAgY2FzZSAn MSc6CisgICAgICBjYXNlICcyJzogIGNhc2UgJzMnOiAgY2FzZSAnNCc6ICBjYXNlICc1JzoKKyAg ICAgIGNhc2UgJzYnOiAgY2FzZSAnNyc6ICBjYXNlICc4JzogIGNhc2UgJzknOgorCXJhZGl4ID0g MTA7CQkJLyogRGVjaW1hbCAqLworCWhkID0gJzknOwkJCS8qIGhpZ2hlc3QgdmFsaWQgZGlnaXQg Ki8KKwlicmVhazsKKyAgICAgIGNhc2UgJ28nOgkJCQkvKiBTdGFydHMgd2l0aCBvIG9yIE8gKi8K KyAgICAgIGNhc2UgJ08nOgorCXJhZGl4ID0gODsJCQkvKiBPY3RhbCAqLworCWhkID0gJzcnOwkJ CS8qIGhpZ2hlc3QgdmFsaWQgZGlnaXQgKi8KKwlwKys7CQkJCS8qIHBvaW50IHBhc3QgcmFkaXgg aW5kaWNhdG9yICovCisJYnJlYWs7CisgICAgICBjYXNlICd4JzoJCQkJLyogU3RhcnRzIHdpdGgg eCBvciBYICovCisgICAgICBjYXNlICdYJzoKKwlyYWRpeCA9IDE2OwkJCS8qIEhleGFkZWNpbWFs ICovCisJcCsrOwkJCQkvKiBwb2ludCBwYXN0IHJhZGl4IGluZGljYXRvciAqLworCWJyZWFrOwor ICAgICAgZGVmYXVsdDoJCQkJLyogQWxsIG90aGVycyAqLworI2lmZGVmIENPTU1FTlQKKwkqcyA9 IHArMTsJCQkvKiBUcmVhdCBhcyBxdW90ZSBvZiBuZXh0IGNoYXIgKi8KKwlyZXR1cm4oKnApOwor I2Vsc2UKKwlyZXR1cm4oLTEpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisgICAgLyog Rm9yIE9TLzIsIHRoZXJlIGFyZSAid2lkZSIgY2hhcmFjdGVycyByZXF1aXJlZCBmb3IgdGhlIGtl eWJvYXJkCisgICAgICogYmluZGluZywgaS5lIFw2NDQgYW5kIHNpbWlsYXIgY29kZXMgbGFyZ2Vy IHRoYW4gMjU1IChieXRlKS4KKyAgICAgKiBGb3IgdGhpcyBwdXJwb3NlLCBnaXZlIHVwIGNoZWNr aW5nIGZvciA8IDI1Ni4gSWYgc29tZW9uZSBtZWFucworICAgICAqIFwyNjYgc2hvdWxkIHJlc3Vs dCBpbiBcMjYgZm9sbG93ZWQgYnkgYSAiNiIgY2hhcmFjdGVyLCBoZSBzaG91bGQKKyAgICAgKiBh bHdheXMgd3JpdGUgXHsyNn02IGFueXdheS4gIE5vdywgcmV0dXJuIG9ubHkgdGhlIGxvd2VyIGJ5 dGUgb2YKKyAgICAgKiB0aGUgcmVzdWx0LCBpLmUuIDEwLCBidXQgZWF0IHVwIHRoZSB3aG9sZSBc MjY2IHNlcXVlbmNlIGFuZAorICAgICAqIHB1dCB0aGUgd2lkZSByZXN1bHQgMjY2IGludG8gYSBn bG9iYWwgdmFyaWFibGUuICBZZXMsIHRoYXQncyBub3QKKyAgICAgKiB0aGUgbW9zdCBiZWF1dGlm dWwgcHJvZ3JhbW1pbmcgc3R5bGUgYnV0IHJlcXVpcmVzIHRoZSBsZWFzdAorICAgICAqIGFtb3Vu dCBvZiBjaGFuZ2VzIHRvIG90aGVyIHJvdXRpbmVzLgorICAgICAqLworICAgIGlmICgqcCA9PSAn eycpIHsJCQkvKiBTdW4gTWF5IDExIDIwOjAwOjQwIDIwMDMgKi8KKwlicmFjZSA9IDE7CQkJLyog QWxsb3cge30gYWZ0ZXIgcmFkaXggaW5kaWNhdG9yICovCisJcCsrOworICAgIH0KKyAgICBpZiAo cmFkaXggPD0gMTApIHsJCQkvKiBOdW1iZXIgaW4gcmFkaXggOCBvciAxMCAqLworCWZvciAoIHgg PSB5ID0gMDsKKyAJICAgICAgKCpwKSAmJiAoKnAgPj0gJzAnKSAmJiAoKnAgPD0gaGQpCisjaWZk ZWYgT1MyCisgICAgICAgICAgICAgICAgICAgJiYgKHkgPCA1KSAmJiAoeCpyYWRpeCA8IEtNU0la RSk7CisgICAgICAgICAgICAgIC8qIHRoZSBtYXhpbXVtIG5lZWRlZCB2YWx1ZSBcODE5NiBpcyA0 IGRpZ2l0cyBsb25nICovCisgICAgICAgICAgICAgIC8qIHdoaWxlIGFzIG9jdGFsIGl0IHJlcXVp cmVzIFwxMzc3LCBpLmUuIDUgZGlnaXRzICovCisjZWxzZQorICAgICAgICAgICAgICAgICAgICYm ICh5IDwgMykgJiYgKHgqcmFkaXggPCAyNTYpOworI2VuZGlmIC8qIE9TMiAqLworCSAgICAgIHAr Kyx5KyspIHsKKwkgICAgeCA9IHggKiByYWRpeCArIChpbnQpICpwIC0gNDg7CisJfQorI2lmZGVm IE9TMgorICAgICAgICB3aWRlcmVzdWx0ID0geDsJCQkvKiBSZW1lbWJlciB3aWRlIHJlc3VsdCAq LworICAgICAgICB4ICY9IDI1NTsKKyNlbmRpZiAvKiBPUzIgKi8KKwlpZiAoeSA9PSAwIHx8IHgg PiAyNTUpIHsJLyogTm8gdmFsaWQgZGlnaXRzPyAqLworCSAgICAqcyA9IHA7CQkJLyogcG9pbnQg YWZ0ZXIgaXQgKi8KKwkgICAgcmV0dXJuKC0xKTsJCQkvKiByZXR1cm4gZmFpbHVyZS4gKi8KKwl9 CisgICAgfSBlbHNlIGlmIChyYWRpeCA9PSAxNikgewkJLyogU3BlY2lhbCBjYXNlIGZvciBoZXgg Ki8KKwlpZiAoKHggPSB1bmhleCgqcCsrKSkgPCAwKSB7ICpzID0gcCAtIDE7IHJldHVybigtMSk7 IH0KKwlpZiAoKHkgPSB1bmhleCgqcCsrKSkgPCAwKSB7ICpzID0gcCAtIDI7IHJldHVybigtMSk7 IH0KKwl4ID0gKCh4IDw8IDQpICYgMHhGMCkgfCAoeSAmIDB4MEYpOworI2lmZGVmIE9TMgorICAg ICAgICB3aWRlcmVzdWx0ID0geDsKKyAgICAgICAgaWYgKCh5ID0gdW5oZXgoKnApKSA+PSAwKSB7 CisgICAgICAgICAgIHArKzsKKwkgICB3aWRlcmVzdWx0ID0gKCh4IDw8IDQpICYgMHhGRjApIHwg KHkgJiAweDBGKTsKKyAgICAgICAgICAgeCA9IHdpZGVyZXN1bHQgJiAyNTU7CisgICAgICAgIH0K KyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9IGVsc2UgeCA9IC0xOworICAgIGlmIChicmFjZSAmJiAq cCA9PSAnfScgJiYgeCA+IC0xKQkvKiBQb2ludCBwYXN0IGNsb3NpbmcgYnJhY2UsIGlmIGFueSAq LworICAgICAgcCsrOworICAgICpzID0gcDsJCQkJLyogUG9pbnQgdG8gbmV4dCBjaGFyIGFmdGVy IHNlcXVlbmNlICovCisgICAgcmV0dXJuKHgpOwkJCQkvKiBSZXR1cm4gdmFsdWUgb2Ygc2VxdWVu Y2UgKi8KK30KKworaW50CQkJCQkvKiBDb252ZXJ0IGhleCBzdHJpbmcgdG8gaW50ICovCisjaWZk ZWYgQ0tfQU5TSUMKK3VuaGV4KGNoYXIgeCkKKyNlbHNlCit1bmhleCh4KSBjaGFyIHg7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKy8qIHVuaGV4ICovIHsKKworICAgIGlmICh4ID49ICcwJyAmJiB4 IDw9ICc5JykJCS8qIDAtOSBpcyBvZmZzZXQgYnkgaGV4IDMwICovCisgICAgICByZXR1cm4oeCAt IDB4MzApOworICAgIGVsc2UgaWYgKHggPj0gJ0EnICYmIHggPD0gJ0YnKQkvKiBBLUYgb2Zmc2V0 IGJ5IGhleCAzNyAqLworICAgICAgcmV0dXJuKHggLSAweDM3KTsKKyAgICBlbHNlIGlmICh4ID49 ICdhJyAmJiB4IDw9ICdmJykJLyogYS1mIG9mZnNldCBieSBoZXggNTcgKi8KKyAgICAgIHJldHVy bih4IC0gMHg1Nyk7CQkJLyogKG9idmlvdXNseSBBU0NJSSBkZXBlbmRlbnQpICovCisgICAgZWxz ZSByZXR1cm4oLTEpOworfQorCisvKiAgTCBPIE8gSyBVIFAgIC0tICBMb29rdXAgdGhlIHN0cmlu ZyBpbiB0aGUgZ2l2ZW4gYXJyYXkgb2Ygc3RyaW5ncyAgKi8KKworLyoKKyAgQ2FsbCB0aGlzIHdh eTogIHYgPSBsb29rdXAodGFibGUsd29yZCxuLCZ4KTsKKworICAgIHRhYmxlIC0gYSAnc3RydWN0 IGtleXRhYicgdGFibGUuCisgICAgd29yZCAgLSB0aGUgdGFyZ2V0IHN0cmluZyB0byBsb29rIHVw IGluIHRoZSB0YWJsZS4KKyAgICBuICAgICAtIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhl IHRhYmxlLgorICAgIHggICAgIC0gYWRkcmVzcyBvZiBhbiBpbnRlZ2VyIGZvciByZXR1cm5pbmcg dGhlIHRhYmxlIGFycmF5IGluZGV4LAorCSAgICBvciBOVUxMIGlmIHlvdSBkb24ndCBuZWVkIGEg dGFibGUgaW5kZXguCisKKyAgVGhlIGtleXdvcmQgdGFibGUgbXVzdCBiZSBhcnJhbmdlZCBpbiBh c2NlbmRpbmcgYWxwaGFiZXRpY2FsIG9yZGVyOworICBhbHBoYWJldGljIGNhc2UgZG9lc24ndCBt YXR0ZXIgYnV0IGxldHRlcnMgYXJlIHRyZWF0ZWQgYXMgbG93ZXJjYXNlCisgIGZvciBwdXJwb3Nl cyBvZiBvcmRlcmluZzsgdGh1cyAiXiIgYW5kICJfIiBjb21lICpiZWZvcmUqIHRoZSBsZXR0ZXJz LAorICBub3QgYWZ0ZXIgdGhlbS4KKworICBSZXR1cm5zIHRoZSBrZXl3b3JkJ3MgYXNzb2NpYXRl ZCB2YWx1ZSAoemVybyBvciBncmVhdGVyKSBpZiBmb3VuZCwKKyAgd2l0aCB0aGUgdmFyaWFibGUg eCBzZXQgdG8gdGhlIGtleXdvcmQtdGFibGUgaW5kZXguICBJZiBpcyBsb29rdXAoKQorICBpcyBu b3Qgc3VjY2Vzc2Z1bCwgaXQgcmV0dXJuczoKKworICAgLTMgaWYgbm90aGluZyB0byBsb29rIHVw ICh0YXJnZXQgd2FzIG51bGwpLAorICAgLTIgaWYgYW1iaWd1b3VzLAorICAgLTEgaWYgbm90IGZv dW5kLgorCisgIEEgbWF0Y2ggaXMgc3VjY2Vzc2Z1bCBpZiB0aGUgdGFyZ2V0IG1hdGNoZXMgYSBr ZXl3b3JkIGV4YWN0bHksIG9yIGlmCisgIHRoZSB0YXJnZXQgaXMgYSBwcmVmaXggb2YgZXhhY3Rs eSBvbmUga2V5d29yZC4gIEl0IGlzIGFtYmlndW91cyBpZiB0aGUKKyAgdGFyZ2V0IG1hdGNoZXMg dHdvIG9yIG1vcmUga2V5d29yZHMgZnJvbSB0aGUgdGFibGUuCisKKyAgTG9va3VwKCkgaXMgdGhl IGNyaXRpY2FsIHJvdXRpbmUgaW4gc2NyaXB0cyBhbmQgc28gaXMgb3B0aW1pemVkIHdpdGggYQor ICBzaW1wbGUgc3RhdGljIGNhY2hlIHBsdXMgc29tZSBvdGhlciB0cmlja3MuICBNYXliZSBpdCBj b3VsZCBiZSBpbXByb3ZlZAorICBmdXJ0aGVyIHdpdGggYmluYXJ5IHNlYXJjaCBvciBoYXNoIHRl Y2huaXF1ZXMgYnV0IEkgZG91YnQgaXQgc2luY2UgbW9zdAorICBrZXl3b3JkIHRhYmxlcyBhcmUg ZmFpcmx5IHNob3J0LgorKi8KKworI2lmZGVmIFVTRV9MVUNBQ0hFCQkJLyogTG9va3VwIGNhY2hl ICovCitleHRlcm4gaW50IGx1c2l6ZTsJCQkvKiAoaW5pdGlhbGl6ZWQgaW4gY2t1dXM1LmMpICov CitleHRlcm4gY2hhciAqIGx1Y21kW107CitleHRlcm4gaW50IGx1dmFsW107CitleHRlcm4gaW50 IGx1aWR4W107CitleHRlcm4gc3RydWN0IGtleXRhYiAqIGx1dGFiW107Citsb25nIGx1aGl0cyA9 IDBMOworbG9uZyBsdWNhbGxzID0gMEw7Citsb25nIHh4aGl0cyA9IDBMOworbG9uZyBsdWxvb3Ag PSAwTDsKKyNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLworCitpbnQKK2xvb2t1cCh0YWJsZSxjbWQs bix4KSBjaGFyICpjbWQ7IHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50IG4sICp4OyB7CisKKyAg ICByZWdpc3RlciBpbnQgaSwgbTsKKyAgICBpbnQgdiwgbGVuLCBjbWRsZW4gPSAwOworICAgIGNo YXIgYyA9IE5VTCwgYzEsICpzOworCisvKiBHZXQgMXN0IGNoYXIgb2Ygc2VhcmNoIG9iamVjdCwg aWYgaXQncyBudWxsIHJldHVybiAtMy4gKi8KKworICAgIGlmICghY21kIHx8IG4gPCAxKQkJCS8q IERlZmVuc2UgZGUgbnVsbGFyZyAqLworICAgICAgcmV0dXJuKC0zKTsKKyAgICBjMSA9ICpjbWQ7 CQkJCS8qIEZpcnN0IGNoYXJhY3RlciAqLworICAgIGlmICghYzEpCQkJCS8qIE1ha2Ugc3VyZSB0 aGVyZSBpcyBvbmUgKi8KKyAgICAgIHJldHVybigtMyk7CisgICAgaWYgKGlzdXBwZXIoYzEpKQkJ CS8qIElmIGxldHRlciBtYWtlIGl0IGxvd2VyY2FzZSAqLworICAgICAgYzEgPSB0b2xvd2VyKGMx KTsKKworI2lmZGVmIFVTRV9MVUNBQ0hFCQkJLyogbG9va3VwKCkgY2FjaGUgKi8KKyAgICBtID0g bHVzaXplOworICAgIGx1Y2FsbHMrKzsJCQkJLyogQ291bnQgdGhpcyBsb29rdXAoKSBjYWxsICov CisgICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgewkJLyogTG9vcCB0aHJ1IGNhY2hlICovCisJ aWYgKCoobHVjbWRbaV0pID09IGMxKSB7CS8qIFNhbWUgYXMgMXN0IGNoYXIgb2Ygc2VhcmNoIGl0 ZW0/ICovCisJICAgIGlmIChsdXRhYltpXSA9PSB0YWJsZSkgewkvKiBZZXMgLSBzYW1lIHRhYmxl IHRvbz8gKi8KKwkJaWYgKCFzdHJjbXAoY21kLGx1Y21kW2ldKSkgeyAvKiBZZXMgLSBjb21wYXJl ICovCisJCSAgICBpZiAoeCkgKnggPSBsdWlkeFtpXTsgICAgLyogTWF0Y2ggLSByZXR1cm4gaW5k ZXggKi8KKwkJICAgIGx1aGl0cysrOyAgICAgICAgICAgICAgICAvKiBDb3VudCBjYWNoZSBoaXQg Ki8KKwkJICAgIHJldHVybihsdXZhbFtpXSk7ICAgICAgICAvKiBSZXR1cm4gYXNzb2NpYXRlZCB2 YWx1ZSAqLworCQl9CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICov CisKKy8qIE5vdCBudWxsLCBub3QgaW4gY2FjaGUsIGxvb2sgaXQgdXAgKi8KKworICAgIHMgPSBj bWQ7CisgICAgd2hpbGUgKCpzKyspIGNtZGxlbisrOwkJLyogTGVuZ3RoIG9mIHRhcmdldCAqLwor LyoKKyAgUXVpY2sgYmluYXJ5IHNlYXJjaCB0byBmaW5kIGxhc3QgdGFibGUgZW50cnkgd2hvc2Ug Zmlyc3QgY2hhcmFjdGVyIGlzCisgIGxleGljYWxseSBsZXNzIHRoYW4gdGhlIGZpcnN0IGNoYXJh Y3RlciBvZiB0aGUgc2VhcmNoIG9iamVjdC4gIFRoaXMgaXMKKyAgdGhlIHN0YXJ0aW5nIHBvaW50 IG9mIHRoZSBuZXh0IGxvb3AsIHdoaWNoIG11c3QgZ28gaW4gc2VxdWVuY2Ugc2luY2UgaXQKKyAg Y29tcGFyZXMgYWRqYWNlbnQgdGFibGUgZW50cmllcy4KKyovCisgICAgaWYgKG4gPCA1KSB7CQkJ LyogTm90IHdvcnRoIGl0IGZvciBzbWFsbCB0YWJsZXMgKi8KKwlpID0gMDsKKyAgICB9IGVsc2Ug eworCWludCBsbyA9IDA7CisJaW50IGhpID0gbjsKKwlpbnQgY291bnQgPSAwOworCXdoaWxlIChs bysyIDwgaGkgJiYgKytjb3VudCA8IDEyKSB7CisJICAgIGkgPSBsbyArICgoaGkgLSBsbykgLyAy KTsKKwkgICAgYyA9ICoodGFibGVbaV0ua3dkKTsKKwkgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0 b2xvd2VyKGMpOworCSAgICBpZiAoYyA8IGMxKSB7CisJCWxvID0gaTsKKwkgICAgfSBlbHNlIHsK KwkJaGkgPSBpOworCSAgICB9CisJfQorCWkgPSAoYyA8IGMxKSA/IGxvKzEgOiBsbzsKKyNpZmRl ZiBVU0VfTFVDQUNIRQorCWlmIChpID4gMCkgeHhoaXRzKys7CisjZW5kaWYgLyogVVNFX0xVQ0FD SEUgKi8KKyAgICB9CisgICAgZm9yICggOyBpIDwgbi0xOyBpKyspIHsKKyNpZmRlZiBVU0VfTFVD QUNIRQorCWx1bG9vcCsrOworI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCisJdiA9IDA7CisJYyA9 ICoodGFibGVbaV0ua3dkKTsKKwlpZiAoYykgeworCSAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRv bG93ZXIoYyk7CisKKwkgICAgLyogVGhlIGZvbGxvd2luZyBpcyBhIGJpZyBwZXJmb3JtYW5jZSBi b29zdGVyIGJ1dCBtYWtlcyBpdCAqLworCSAgICAvKiBhYnNvbHV0ZWx5IGVzc2VudGlhbCB0aGF0 IGFsbCBsb29rdXAoKSB0YWJsZXMgYXJlIGluIG9yZGVyLiAqLworCisJICAgIGlmIChjID4gYzEp CQkJLyogTGVhdmUgZWFybHkgaWYgcGFzdCBvdXIgbWFyayAqLworCSAgICAgIHJldHVybigtMSk7 CisKKyNpZmRlZiBERUJVRworCSAgICAvKiBVc2UgTE9HIERFQlVHIHRvIGNoZWNrICovCisKKwkg ICAgaWYgKGRlYmxvZykgeworCQlpZiAoY2tzdHJjbXAodGFibGVbaV0ua3dkLHRhYmxlW2krMV0u a3dkLDAsMCkgPiAwKSB7CisJCSAgICBwcmludGYoIlRBQkxFIE9VVCBPRiBPUkRFUiBbJXNdIFsl c11cbiIsCisJCQkgICB0YWJsZVtpXS5rd2QsdGFibGVbaSsxXS5rd2QpOworCisJCX0KKwkgICAg fQorI2VuZGlmIC8qIERFQlVHICovCisKKwkgICAgaWYgKGMgPT0gYzEpIHsKKwkJbGVuID0gMDsK KwkJcyA9IHRhYmxlW2ldLmt3ZDsKKwkJd2hpbGUgKCpzKyspIGxlbisrOworCQlpZiAoKGxlbiA9 PSBjbWRsZW4gJiYgIWNrc3RyY21wKHRhYmxlW2ldLmt3ZCxjbWQsbGVuLDApKSB8fAorCQkgICAg KCh2ID0gIWNrc3RyY21wKHRhYmxlW2ldLmt3ZCxjbWQsY21kbGVuLDApKSAmJgorCQkgICAgIGNr c3RyY21wKHRhYmxlW2krMV0ua3dkLGNtZCxjbWRsZW4sMCkpKSB7CisJCSAgICBpZiAoeCkgKngg PSBpOworCQkgICAgcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsKKwkJfQorCSAgICB9IGVsc2UgdiA9 IDA7CisJfQorICAgICAgICBpZiAodikgewkJCS8qIEFtYmlndW91cyAqLworCSAgICBpZiAoeCkg KnggPSBpOwkJLyogU2V0IGluZGV4IG9mIGZpcnN0IG1hdGNoICovCisJICAgIHJldHVybigtMik7 CisJfQorICAgIH0KKworLyogTGFzdCAob3Igb25seSkgZWxlbWVudCAqLworCisgICAgaWYgKCFj a3N0cmNtcCh0YWJsZVtuLTFdLmt3ZCxjbWQsY21kbGVuLDApKSB7CisgICAgICAgIGlmICh4KSAq eCA9IG4tMTsKKwkvKiBkZWJ1ZyhGMTExLCJsb29rdXAiLHRhYmxlW2ldLmt3ZCx0YWJsZSk7ICov CisgICAgICAgIHJldHVybih0YWJsZVtuLTFdLmt3dmFsKTsKKyAgICB9IGVsc2UgcmV0dXJuKC0x KTsKK30KKworLyoKKyAgeCBsIG8gbyBrIHUgcAorCisgIExpa2UgbG9va3VwLCBidXQgcmVxdWly ZXMgYSBmdWxsIChidXQgY2FzZS1pbmRlcGVuZGVudCkgbWF0Y2gKKyAgYW5kIGRvZXMgTk9UIHJl cXVpcmUgdGhlIHRhYmxlIHRvIGJlIGluIG9yZGVyLgorKi8KK2ludAoreGxvb2t1cCh0YWJsZSxj bWQsbix4KSBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGNoYXIgKmNtZDsgaW50IG4sICp4OyB7Cisg ICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IGxlbiwgY21kbGVuLCBvbmUgPSAwOworICAgIHJl Z2lzdGVyIGNoYXIgYywgYzIsICogcywgKiBzMjsKKworICAgIGlmICghY21kKSBjbWQgPSAiIjsJ CQkvKiBDaGVjayBhcmdzICovCisgICAgaWYgKCEqY21kIHx8IG4gPCAxKSByZXR1cm4oLTMpOwor CisgICAgYyA9ICpjbWQ7CQkJCS8qIEZpcnN0IGNoYXIgb2Ygc3RyaW5nIHRvIGxvb2sgdXAgKi8K KyAgICBpZiAoISooY21kKzEpKSB7CQkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgMS1jaGFyIG5h bWVzICovCisJY21kbGVuID0gMTsKKwlpZiAoaXN1cHBlcihjKSkKKwkgIGMgPSB0b2xvd2VyKGMp OworCW9uZSA9IDE7CisgICAgfSBlbHNlIHsKKwljbWRsZW4gPSAwOworCXMgPSBjbWQ7CisJd2hp bGUgKCpzKyspIGNtZGxlbisrOworCWMgPSAqY21kOworCWlmIChpc3VwcGVyKGMpKQorCSAgYyA9 IHRvbG93ZXIoYyk7CisgICAgfQorICAgIGlmIChjbWRsZW4gPCAxKQorICAgICAgcmV0dXJuKC0z KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwlzID0gdGFibGVbaV0ua3dkOwkJ LyogVGhpcyBlbnRyeSAqLworCWlmICghcykgcyA9ICIiOworCWlmICghKnMpIGNvbnRpbnVlOwkJ LyogRW1wdHkgdGFibGUgZW50cnkgKi8KKwljMiA9ICpzOworCWlmIChpc3VwcGVyKGMyKSkgYzIg PSB0b2xvd2VyKGMyKTsKKwlpZiAoYyAhPSBjMikgY29udGludWU7CQkvKiBGaXJzdCBjaGFyIGRv ZXNuJ3QgbWF0Y2ggKi8KKwlpZiAob25lKSB7CQkJLyogTmFtZSBpcyBvbmUgY2hhciBsb25nICov CisJICAgIGlmICghKihzKzEpKSB7CisJCWlmICh4KSAqeCA9IGk7CisgICAgICAgICAgICAgICAg KmNtZCA9IGM7IAorCQlyZXR1cm4odGFibGVbaV0ua3d2YWwpOwkvKiBTbyBpcyB0YWJsZSBlbnRy eSAqLworCSAgICB9CisJfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UgZG8gc3RyaW5nIGNvbXBhcmlz b24gKi8KKwkgICAgczIgPSBzOworCSAgICBsZW4gPSAwOworCSAgICB3aGlsZSAoKnMyKyspIGxl bisrOworCSAgICBpZiAobGVuID09IGNtZGxlbiAmJiAhY2tzdHJjbXAocyxjbWQsLTEsMCkpIHsK KwkJaWYgKHgpICp4ID0gaTsKKwkJcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsKKwkgICAgfQorCX0K KyAgICB9CisgICAgcmV0dXJuKC0xKTsKK30KKworLyogUmV2ZXJzZSBsb29rdXAgKi8KKworY2hh ciAqCitybG9va3VwKHRhYmxlLG4seCkgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbiwgeDsg eworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgaWYg KHRhYmxlW2ldLmt3dmFsID09IHgpCisJICByZXR1cm4odGFibGVbaV0ua3dkKTsKKyAgICB9Cisg ICAgcmV0dXJuKE5VTEwpOworfQorCisjaWZuZGVmIE5PSUNQCitpbnQKK2NtZHNxdW8oeCkgaW50 IHg7IHsKKyAgICBxdW90aW5nID0geDsKKyAgICByZXR1cm4oMSk7Cit9CisKK2ludAorY21kZ3F1 bygpIHsKKyAgICByZXR1cm4ocXVvdGluZyk7Cit9CisjZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYg LS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWNtZC5jLmds aWJjMl8yOCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y21kLmMu Z2xpYmMyXzI4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGRjMmQKLS0t IC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr dWNtZC5jLmdsaWJjMl8yOApAQCAtMCwwICsxLDc5MTkgQEAKKyNpbmNsdWRlICJja2NzeW0uaCIK KworY2hhciAqY21kdiA9ICJDb21tYW5kIHBhY2thZ2UgOS4wLjE2OCwgMTIgTWFyY2ggMjAxMCI7 CisKKy8qICBDIEsgVSBDIE0gRCAgLS0gIEludGVyYWN0aXZlIGNvbW1hbmQgcGFja2FnZSBmb3Ig VW5peCAgKi8KKworLyogKEluIHJlYWxpdHksIGl0J3MgZm9yIGFsbCBwbGF0Zm9ybXMsIG5vdCBq dXN0IFVuaXgpICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlh LmVkdSksCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVt cywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTAsCisgICAgVHJ1 c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAg ICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxl IG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRp c2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworI2RlZmluZSBUT0tQUkVDSEVDSworCisj ZGVmaW5lIERPQ0hLVkFSCisKKy8qIENvbW1hbmQtdGVybWluYWwtdG8tQy1LZXJtaXQgY2hhcmFj dGVyIG1hc2sgKi8KKworI2lmZGVmIE9TMgkJCQkvKiBLOTUgKi8KK2ludCBjbWRtc2sgPSAyNTU7 CQkJLyogKGFsd2F5cyB3YXMgMjU1KSAqLworI2Vsc2UJCQkJCS8qIEFsbCBvdGhlcnMuLi4gKi8K K2ludCBjbWRtc2sgPSAyNTU7CQkJLyogMzEgRGVjIDIwMDAgKHdhcyAxMjcpICovCisjZW5kaWYg LyogT1MyICovCisKKyNpZmRlZiBCU19ESVJTRVAJCQkvKiBEaXJlY3Rvcnkgc2VwYXJhdG9yIGlz IGJhY2tzbGFzaCAqLworI3VuZGVmIEJTX0RJUlNFUAorI2VuZGlmIC8qIEJTX0RJUlNFUCAqLwor CisjaWZkZWYgT1MyCisjZGVmaW5lIEJTX0RJUlNFUAorI2VuZGlmIC8qIEJTX0RJUlNFUCAqLwor CisjZGVmaW5lIENLVUNNRF9DCisKKyNpbmNsdWRlICJja2NkZWIuaCIgICAgICAgICAgICAgICAg ICAgICAvKiBGb3JtYXRzIGZvciBkZWJ1ZygpLCBldGMuICovCisjaW5jbHVkZSAiY2tja2VyLmgi CQkJLyogTmVlZGVkIGZvciBCSUdCVUZPSyBkZWZpbml0aW9uICovCisjaW5jbHVkZSAiY2tjbmV0 LmgiCQkJLyogTmVlZGVkIGZvciBzZXJ2ZXItc2lkZSBUZWxuZXQgKi8KKyNpbmNsdWRlICJja3Vj bWQuaCIJCQkvKiBOZWVkZWQgZm9yIGV2ZXJ5dGhpbmcgKi8KKyNpbmNsdWRlICJja3V1c3IuaCIg ICAgICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgZm9yIHByb21wdCBsZW5ndGggKi8KKworI2lm bmRlZiBOT0FSUk9XS0VZUworI2lmbmRlZiBOT0VTQ1NFUQorI2lmZGVmIFZNU09SVU5JWAorI2Rl ZmluZSBVU0VfQVJST1dLRVlTCQkJLyogVXNlIGFycm93IGtleXMgZm9yIGNvbW1hbmQgcmVjYWxs ICovCisjZW5kaWYgLyogVk1TT1JVTklYICovCisjZW5kaWYgLyogTk9FU0NTRVEgKi8KKyNlbmRp ZiAvKiBOT0FSUk9XS0VZUyAqLworCisjdW5kZWYgQ0tVQ01EX0MKKworX1BST1RPVFlQKCBpbnQg dW5oZXgsIChjaGFyKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBjbWRjbHJzY24sICh2b2lk KSApOworCisjaWZkZWYgQ0tMRUFSTgorX1BST1RPVFlQKCBWT0lEIGxlYXJuY21kLCAoY2hhciAq KSApOworI2VuZGlmIC8qIENLTEVBUk4gKi8KKworc3RhdGljIGNoYXIgKm1vbmFtZVtdID0gewor ICAgICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCisgICAgIkp1bCIs ICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgorfTsKKworc3RydWN0IGtleXRhYiBj bW9udGhzW10gPSB7CisgIHsgImFwcmlsIiwgICAgIDQsIDAgfSwKKyAgeyAiYXVndXN0IiwgICAg OCwgMCB9LAorICB7ICJkZWNlbWJlciIsIDEyLCAwIH0sCisgIHsgImZlYnJ1YXJ5IiwgIDIsIDAg fSwKKyAgeyAiamFudWFyeSIsICAgMSwgMCB9LAorICB7ICJqdWx5IiwgICAgICA3LCAwIH0sCisg IHsgImp1bmUiLCAgICAgIDYsIDAgfSwKKyAgeyAibWFyY2giLCAgICAgMywgMCB9LAorICB7ICJt YXkiLCAgICAgICA1LCAwIH0sCisgIHsgIm5vdmVtYmVyIiwgMTEsIDAgfSwKKyAgeyAib2N0b2Jl ciIsICAxMCwgMCB9LAorICB7ICJzZXB0ZW1iZXIiLCA5LCAwIH0KK307CisKKyNpZm5kZWYgTk9J Q1AgICAgIC8qIFRoZSByZXN0IG9ubHkgaWYgaW50ZXJhY3RpdmUgY29tbWFuZCBwYXJzaW5nIHNl bGVjdGVkICovCisKKyNpZm5kZWYgTk9TUEwKK19QUk9UT1RZUCggaW50IGNoa3ZhciwgKGNoYXIg KikgKTsKK2V4dGVybiBpbnQgYXNrZmxhZywgZWNob3N0YXJzOworI2VuZGlmIC8qIE5PU1BMICov CisKKyNpZmRlZiBDS1JPT1QKK2V4dGVybiBpbnQgY2tyb290ZXJyOworI2VuZGlmIC8qIENLUk9P VCAqLworCisjaWZkZWYgSUtTRAorZXh0ZXJuIGludCBpbnNlcnZlcjsKKyNlbmRpZiAvKiBJS1NE ICovCisKK2ludCBjbWZsZGZsZ3MgPSAwOwkJCS8qIEZsYWdzIGZvciBjbWZsZCgpICovCitpbnQg Y21rd2ZsZ3MgPSAwOwkJCS8qIEZsYWdzIGZyb20gbGFzdCBrZXl3b3JkIHBhcnNlICovCitzdGF0 aWMgaW50IG5vbXNnID0gMDsKK3N0YXRpYyBpbnQgYmxvY2tsdmwgPSAwOwkJLyogQmxvY2sgbmVz dGluZyBsZXZlbCAqLworc3RhdGljIGludCBsaW5lYmVnaW4gPSAwOwkJLyogRmxhZyBmb3IgYXQg c3RhcnQgb2YgYSBsaW5lICovCitzdGF0aWMgaW50IHF1b3RpbmcgPSAxOwkJCS8qIFF1b3Rpbmcg aXMgYWxsb3dlZCAqLworc3RhdGljIGludCBzd2FyZyA9IDA7CQkJLyogUGFyc2luZyBhIHN3aXRj aCBhcmd1bWVudCAqLworc3RhdGljIGludCB4Y21mZGIgPSAwOwkJCS8qIEZsYWcgZm9yIHBhcnNp bmcgY2hhaW5lZCBmZGJzLi4uICovCitzdGF0aWMgaW50IGNoc3JjID0gMDsJCQkvKiBTb3VyY2Ug b2YgY2hhcmFjdGVyLCAxID0gdHR5ICovCitzdGF0aWMgaW50IG5ld2NtZCA9IDA7CQkJLyogU2Vl IGFkZGNtZCgpICovCisKKyNpZmRlZiBCU19ESVJTRVAKK3N0YXRpYyBpbnQgZGlybmFtZmxnID0g MDsKKyNlbmRpZiAvKiBCU19ESVJTRVAgKi8KKworLyoKK01vZGVsZWQgYWZ0ZXIgdGhlIERFQ1NZ U1RFTS0yMCBjb21tYW5kIHBhcnNlciAodGhlIENPTU5EIEpTWVMpLCBSSVAuIEZlYXR1cmVzOgor CisgLiBwYXJzZXMgYW5kIHZlcmlmaWVzIGtleXdvcmRzLCBmaWxlbmFtZXMsIHRleHQgc3RyaW5n cywgbnVtYmVycywgb3RoZXIgZGF0YQorIC4gZGlzcGxheXMgYXBwcm9wcmlhdGUgbWVudSBvciBo ZWxwIG1lc3NhZ2Ugd2hlbiB1c2VyIHR5cGVzICI/IgorIC4gZG9lcyBrZXl3b3JkIGFuZCBmaWxl bmFtZSBjb21wbGV0aW9uIHdoZW4gdXNlciB0eXBlcyBFU0Mgb3IgVEFCCisgLiBkb2VzIHBhcnRp YWwga2V5d29yZCBhbmQgZmlsZW5hbWUgY29tcGxldGlvbgorIC4gYWNjZXB0cyBhbnkgdW5pcXVl IGFiYnJldmlhdGlvbiBmb3IgYSBrZXl3b3JkCisgLiBhbGxvd3Mga2V5d29yZHMgdG8gaGF2ZSBh dHRyaWJ1dGVzLCBsaWtlICJpbnZpc2libGUiIGFuZCAiYWJicmV2aWF0aW9uIgorIC4gY2FuIHN1 cHBseSBkZWZhdWx0cyBmb3IgZmllbGRzIG9taXR0ZWQgYnkgdXNlcgorIC4gcHJvdmlkZXMgY29t bWFuZCByZXRyeSBhbmQgcmVjYWxsCisgLiBwcm92aWRlcyBjaGFyYWN0ZXIsIHdvcmQsIGFuZCBs aW5lIGRlbGV0aW9uIChidXQgb25seSBmcm9tIHRoZSBlbmQpCisgLiBhY2NlcHRzIGlucHV0IGZy b20ga2V5Ym9hcmQsIGNvbW1hbmQgZmlsZXMsIG1hY3Jvcywgb3IgcmVkaXJlY3RlZCBzdGRpbgor IC4gYWxsb3dzIGZvciBmdWxsIG9yIGhhbGYgZHVwbGV4IG9wZXJhdGlvbiwgY2hhcmFjdGVyIG9y IGxpbmUgaW5wdXQKKyAuIGFsbG93cyBcLWVzY2FwZXMgZm9yIHNwZWNpYWwgY2hhcmFjdGVycwor IC4gYWxsb3dzIHNwZWNpZmljYXRpb24gb2YgYSB1c2VyIGV4aXQgdG8gZXhwYW5kIHZhcmlhYmxl cywgZXRjLgorIC4gc2V0dGFibGUgcHJvbXB0LCBwcm90ZWN0ZWQgZnJvbSBkZWxldGlvbiwgZHlu YW1pY2FsbHkgcmUtZXZhbHVhdGVkIGVhY2ggdGltZQorIC4gYWxsb3dzIGNoYWluZWQgcGFyc2Ug ZnVuY3Rpb25zLgorCitGdW5jdGlvbnM6CisgY21zZXRwIC0gU2V0IHByb21wdCAoY21wcm9tIGlz IHByb21wdCBzdHJpbmcpCisgY21zYXZwIC0gU2F2ZSBjdXJyZW50IHByb21wdAorIGNtZ2V0cCA9 IEdldCBjdXJyZW50IHByb21wdAorIHByb21wdCAtIElzc3VlIHByb21wdAorIGNtaW5pICAtIENs ZWFyIHRoZSBjb21tYW5kIGJ1ZmZlciAoYmVmb3JlIHBhcnNpbmcgYSBuZXcgY29tbWFuZCkKKyBj bXJlcyAgLSBSZXNldCBjb21tYW5kIGJ1ZmZlciBwb2ludGVycyAoYmVmb3JlIHJlcGFyc2luZykK KyBjbWtleSAgLSBQYXJzZSBhIGtleXdvcmQgb3IgdG9rZW4gKGFsc28gY21rZXkyKQorIGNtc3dp ICAtIFBhcnNlIGEgc3dpdGNoCisgY21udW0gIC0gUGFyc2UgYSBudW1iZXIKKyBjbWlmaSAgLSBQ YXJzZSBhbiBpbnB1dCBmaWxlIG5hbWUKKyBjbW9maSAgLSBQYXJzZSBhbiBvdXRwdXQgZmlsZSBu YW1lIChhbHNvIGNtaWZpcCwgY21pZmkyLCAuLi4pCisgY21kaXIgIC0gUGFyc2UgYSBkaXJlY3Rv cnkgbmFtZSAoYWxzbyBjbWRpcnApCisgY21mbGQgIC0gUGFyc2UgYW4gYXJiaXRyYXJ5IGZpZWxk CisgY210eHQgIC0gUGFyc2UgYSB0ZXh0IHN0cmluZworIGNtZGF0ZSAtIFBhcnNlIGEgZGF0ZS10 aW1lIHN0cmluZworIGNtY2ZtICAtIFBhcnNlIGNvbW1hbmQgY29uZmlybWF0aW9uIChlbmQgb2Yg bGluZSkKKyBjbWZkYiAgLSBQYXJzZSBhbnkgb2YgYSBsaXN0IG9mIHRoZSBmb3JlZ29pbmcgKGNo YWluZWQgcGFyc2UgZnVuY3Rpb25zKQorCitSZXR1cm4gY29kZXM6CisgLTk6IGxpa2UgLTIgZXhj ZXB0IHRoaXMgbW9kdWxlIGFscmVhZHkgcHJpbnRlZCB0aGUgZXJyb3IgbWVzc2FnZQorIC0zOiBu byBpbnB1dCBwcm92aWRlZCB3aGVuIHJlcXVpcmVkCisgLTI6IGlucHV0IHdhcyBpbnZhbGlkIChl LmcuIG5vdCBhIG51bWJlciB3aGVuIGEgbnVtYmVyIHdhcyByZXF1aXJlZCkKKyAtMTogcmVwYXJz ZSByZXF1aXJlZCAodXNlciBkZWxldGVkIGludG8gYSBwcmVjZWRpbmcgZmllbGQpCisgIDAgb3Ig Z3JlYXRlcjogc3VjY2VzcworU2VlIGluZGl2aWR1YWwgZnVuY3Rpb25zIGZvciBncmVhdGVyIGRl dGFpbC4KKworQmVmb3JlIHVzaW5nIHRoZXNlIHJvdXRpbmVzLCB0aGUgY2FsbGVyIHNob3VsZCAj aW5jbHVkZSAiY2t1Y21kLmgiIGFuZCBzZXQgdGhlCitwcm9ncmFtJ3MgcHJvbXB0IGJ5IGNhbGxp bmcgY21zZXRwKCkuICBJZiB0aGUgZmlsZSBwYXJzaW5nIGZ1bmN0aW9ucyBjbWlmaSwKK2Ntb2Zp LCBvciBjbWRpciBhcmUgdG8gYmUgdXNlZCwgdGhpcyBtb2R1bGUgbXVzdCBiZSBsaW5rZWQgd2l0 aCBhIGNrP2ZpbyBmaWxlCitzeXN0ZW0gc3VwcG9ydCBtb2R1bGUgZm9yIHRoZSBhcHByb3ByaWF0 ZSBzeXN0ZW0sIGUuZy4gY2t1ZmlvIGZvciBVbml4LiAgSWYKK3RoZSBjYWxsZXIgcHV0cyB0aGUg dGVybWluYWwgaW4gY2hhcmFjdGVyIHdha2V1cCAoImNicmVhayIpIG1vZGUgd2l0aCBubyBlY2hv LAordGhlbiB0aGVzZSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIGxpbmUgZWRpdGluZyAtLSBjaGFy YWN0ZXIsIHdvcmQsIGFuZCBsaW5lCitkZWxldGlvbiwgYXMgd2VsbCBhcyBrZXl3b3JkIGFuZCBm aWxlbmFtZSBjb21wbGV0aW9uIHVwb24gRVNDIGFuZCBoZWxwCitzdHJpbmdzLCBrZXl3b3JkLCBv ciBmaWxlIG1lbnVzIHVwb24gJz8nLiAgSWYgdGhlIGNhbGxlciBwdXRzIHRoZSB0ZXJtaW5hbAor aW50byBjaGFyYWN0ZXIgd2FrZXVwL25vZWNobyBtb2RlLCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0 byByZXN0b3JlIGl0IGJlZm9yZQorZXhpdCBmcm9tIG9yIGludGVycnVwdGlvbiBvZiB0aGUgcHJv Z3JhbS4gIElmIHRoZSBjaGFyYWN0ZXIgd2FrZXVwIG1vZGUgaXMgbm90CitzZXQsIHRoZSBzeXN0 ZW0ncyBvd24gbGluZSBlZGl0b3IgbWF5IGJlIHVzZWQuCisKK05PVEU6IENvbnRyYXJ5IHRvIGV4 cGVjdGF0aW9ucywgbWFueSAjaWZkZWYncyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhpcyBtb2R1bGUu CitBbnkgb3BlcmF0aW9uIHJlcXVpcmluZyBhbiAjaWZkZWYgKGxpa2UgY2xlYXIgc2NyZWVuLCBn ZXQgY2hhcmFjdGVyIGZyb20KK2tleWJvYXJkLCBlcmFzZSBjaGFyYWN0ZXIgZnJvbSBzY3JlZW4s IGV0Yykgc2hvdWxkIGV2ZW50dWFsbHkgYmUgdHVybmVkIGludG8gYQorY2FsbCB0byBhIGZ1bmN0 aW9uIHRoYXQgaXMgZGVmaW5lZCBpbiBjaz90aW8uYywgYnV0IHRoZW4gYWxsIHRoZSBjaz90aW8u YworbW9kdWxlcyB3b3VsZCBoYXZlIHRvIGJlIGNoYW5nZWQuLi4KKyovCisKKy8qIEluY2x1ZGVz ICovCisKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIJCQkvKiBBU0NJ SSBjaGFyYWN0ZXIgc3ltYm9scyAqLworI2luY2x1ZGUgImNrdWNtZC5oIiAgICAgICAgICAgICAg ICAgICAgIC8qIENvbW1hbmQgcGFyc2luZyBkZWZpbml0aW9ucyAqLworCisjaWZkZWYgT1NGMTMK KyNpZmRlZiBDS19BTlNJQworI2lmZGVmIF9OT19QUk9UTworI3VuZGVmIF9OT19QUk9UTworI2Vu ZGlmIC8qIF9OT19QUk9UTyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1NG MTMgKi8KKworI2lmbmRlZiBIUFVYUFJFNjUKKyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9y IG51bWJlciBzeW1ib2xzICovCisjZWxzZQorI2lmbmRlZiBFUlJOT19JTkNMVURFRAorI2luY2x1 ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KKyNlbmRpZgkvKiBFUlJO T19JTkNMVURFRCAqLworI2VuZGlmCS8qIEhQVVhQUkU2NSAqLworCisjaWZkZWYgT1MyCisjaWZu ZGVmIE5UCisjZGVmaW5lIElOQ0xfTk9QTQorI2RlZmluZSBJTkNMX1ZJTwkJCS8qIE5lZWRlZCBm b3IgY2tvY29uLmggKi8KKyNpbmNsdWRlIDxvczIuaD4KKyN1bmRlZiBDT01NRU5UCisjZWxzZQor I2RlZmluZSBBUElSRVQgVUxPTkcKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYgLyogTlQg Ki8KKyNpbmNsdWRlICJja29jb24uaCIKKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmIC8qIE9TMiAq LworCisjaWZkZWYgT1NLCisjZGVmaW5lIGNjIGNjb3VudAkJCS8qIE9TLTkvNjhLIGNvbXBpbGVy IGJ1ZyAqLworI2VuZGlmIC8qIE9TSyAqLworCisjaWZkZWYgR0VNRE9TCQkJCS8qIEF0YXJpIFNU ICovCisjaWZkZWYgcHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICov CisjZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKworI2lm ZGVmIENLX0FVVE9ETAorZXh0ZXJuIGludCBjbWRhZGwsIGp1c3RvbmU7CisjZW5kaWYgLyogQ0tf QVVUT0RMICovCisKK2V4dGVybiBpbnQgdGltZWxpbWl0LCBuenhvcHRzLCBub3B1c2gsIG5vbG9j YWwsIHhjbWRzcmMsIGtlZXBhbGxjaGFyczsKKworI2lmZGVmIENLU1lTTE9HCisjaWZkZWYgVU5J WAorI2lmZGVmIENLWFBSSU5URgkJCS8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGgg Ki8KKyN1bmRlZiBwcmludGYJCQkJLyogdXNlIG9mICJwcmludGYiIGluIHN5c2xvZy5oICovCisj ZW5kaWYgLyogQ0tYUFJJTlRGICovCisjaWZkZWYgUlRBSVgKKyNpbmNsdWRlIDxzeXMvc3lzbG9n Lmg+CisjZWxzZSAgLyogUlRBSVggKi8KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNlbmRpZiAvKiBS VEFJWCAqLworI2lmZGVmIENLWFBSSU5URgorI2RlZmluZSBwcmludGYgY2t4cHJpbnRmCisjZW5k aWYgLyogQ0tYUFJJTlRGICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIENLU1lTTE9H ICovCisKKy8qIExvY2FsIHZhcmlhYmxlcyAqLworCitzdGF0aWMKK2ludCBwc2V0ZiA9IDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgcHJvbXB0IGhhcyBiZWVuIHNldCAq LworICAgIGNjID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBj b3VudCAqLworICAgIGRweCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIER1cGxl eCAoMCA9IGZ1bGwpICovCisgICAgaW53b3JkID0gMDsJCQkJLyogSW4gdGhlIG1pZGRsZSBvZiBn ZXR0aW5nIGEgd29yZCAqLworCitjaGFyICpkZnByb20gPSAiQ29tbWFuZD8gIjsgICAgICAgICAg ICAgLyogRGVmYXVsdCBwcm9tcHQgKi8KKyNpZm5kZWYgTk9MQVNURklMRQorY2hhciAqbGFzdGZp bGUgPSBOVUxMOwkJCS8qIExhc3QgZmlsZXNwZWMgKi8KK3N0YXRpYyBjaGFyICp0bXBsYXN0Zmls ZSA9IE5VTEw7CS8qIExhc3QgZmlsZXNwZWMgY2FuZGlkYXRlICovCisjZW5kaWYJLyogTk9MQVNU RklMRSAqLworCitpbnQgY21mbGdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29t bWFuZCBmbGFncyAqLworaW50IGNtZnNhdjsJCQkJLyogQSBzYXZlZCB2ZXJzaW9uIG9mIHRoZW0g Ki8KKworc3RhdGljIGNoYXIgcHVzaGMgPSBOVUw7CitzdGF0aWMgY2hhciBicmtjaGFyID0gTlVM OworCisjZGVmaW5lIENNREVGQVVMVCAxMDIzCitzdGF0aWMgY2hhciBjbWRlZmF1bHRbQ01ERUZB VUxUKzFdOworCisjaWZkZWYgRENNREJVRgorY2hhciAqY21kYnVmID0gTlVMTDsJCQkvKiBDb21t YW5kIGJ1ZmZlciAqLworY2hhciAqc2F2YnVmID0gTlVMTDsJCQkvKiBCdWZmZXIgdG8gc2F2ZSBj b3B5IG9mIGNvbW1hbmQgKi8KK2NoYXIgKmF0bWJ1ZiA9IE5VTEw7CQkJLyogQXRvbSBidWZmZXIg LSBmb3IgY3VycmVudCBmaWVsZCAqLworY2hhciAqYXR4YnVmID0gTlVMTDsJCQkvKiBGb3IgZXhw YW5kaW5nIHRoZSBhdG9tIGJ1ZmZlciAqLworY2hhciAqcHJldmNtZCA9IE5VTEw7CitzdGF0aWMg Y2hhciAqYXR5YnVmID0gTlVMTDsJCS8qIEZvciBjb3B5aW5nIGF0b20gYnVmZmVyICovCitzdGF0 aWMgY2hhciAqZmlsYnVmID0gTlVMTDsJCS8qIEZpbGUgbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBj aGFyICpjbXByb20gPSBOVUxMOwkJLyogUHJvZ3JhbSdzIHByb21wdCAqLworc3RhdGljIGNoYXIg KmNtcHJ4eCA9IE5VTEw7CQkvKiBQcm9ncmFtJ3MgcHJvbXB0LCB1bmV2YWx1YXRlZCAqLworCisj aWZkZWYgQ0tfUkVDQUxMCisvKgorICBDb21tYW5kIHJlY2FsbCBpcyBhdmFpbGFibGUgb25seSBp ZiB3ZSBjYW4gbWFrZSBwcm9mbGlnYXRlIHVzZSBvZiBtYWxsb2MoKS4KKyovCisjZGVmaW5lIFJf TUFYIDEwCQkJLyogSG93IG1hbnkgY29tbWFuZHMgdG8gc2F2ZSAqLworaW50IGNtX3JlY2FsbCA9 IFJfTUFYOwkJCS8qIFNpemUgb2YgY29tbWFuZCByZWNhbGwgYnVmZmVyICovCitpbnQgb25fcmVj YWxsID0gMTsJCQkvKiBSZWNhbGwgZmVhdHVyZSBpcyBPTiAqLworc3RhdGljIGludCBub19yZWNh bGwgPSAwOwkJLyogUmVjYWxsIE9GRiBmb3IgdGhpcyBjbWQgb25seSAqLworc3RhdGljIGludCBm b3JjZV9hZGQgPSAwOwkJLyogRm9yY2UgY21kIGludG8gcmVjYWxsIGJ1ZmZlciAqLworc3RhdGlj IGludCBsYXN0X3JlY2FsbCA9IC0xOwkJLyogTGFzdCByZWNhbGwtcmVsYXRlZCBhY3Rpb24gKi8K Ky8qCisgIC0xID0gbm9uZQorICAgMCA9IENSIChhIGNvbW1hbmQgd2FzIGVudGVyZWQpCisgICAx ID0gVXAKKyAgIDIgPSBEb3duCisqLworaW50IGluX3JlY2FsbCA9IDA7CQkJLyogUmVjYWxsIGJ1 ZmZlcnMgYXJlIGluaXQnZCAqLworc3RhdGljIGludAorICBjdXJyZW50ID0gLTEsCQkJCS8qIFBv aW50ZXIgdG8gY3VycmVudCBjb21tYW5kICovCisgIHJsYXN0ID0gLTE7CQkJCS8qIEluZGV4IG9m IGxhc3QgY29tbWFuZCBpbiBidWZmZXIgKi8KK3N0YXRpYyBjaGFyICoqcmVjYWxsID0gTlVMTDsJ CS8qIEFycmF5IG9mIHJlY2FsbCBidWZmZXIgcG9pbnRlcnMgKi8KKyNlbmRpZiAvKiBDS19SRUNB TEwgKi8KKyNlbHNlICAvKiAhRENNREJVRiAqLworY2hhciBjbWRidWZbQ01EQkwrNF07ICAgICAg ICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICovCitjaGFyIHNhdmJ1ZltDTURCTCs0XTsg ICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIHRvIHNhdmUgY29weSBvZiBjb21tYW5kICovCitj aGFyIGF0bWJ1ZltBVE1CTCs0XTsgICAgICAgICAgICAgICAgICAgLyogQXRvbSBidWZmZXIgKi8K K2NoYXIgYXR4YnVmW0NNREJMKzRdOyAgICAgICAgICAgICAgICAgICAvKiBGb3IgZXhwYW5kaW5n IHRoZSBhdG9tIGJ1ZmZlciAqLworY2hhciBwcmV2Y21kW0NNREJMKzRdOwkJCS8qIEZvciBkaXNw bGF5aW5nIHRoZSBsYXN0IGNvbW1hbmQgKi8KK3N0YXRpYyBjaGFyIGF0eWJ1ZltBVE1CTCs0XTsJ CS8qIEZvciBjb3B5aW5nIGF0b20gYnVmZmVyICovCitzdGF0aWMgY2hhciBmaWxidWZbQVRNQkwr NF07CQkvKiBGaWxlIG5hbWUgYnVmZmVyICovCitzdGF0aWMgY2hhciBjbXByb21bUFJPTVBUTCsx XTsJCS8qIFByb2dyYW0ncyBwcm9tcHQgKi8KK3N0YXRpYyBjaGFyIGNtcHJ4eFtQUk9NUFRMKzFd OwkJLyogUHJvZ3JhbSdzIHByb21wdCwgdW5ldmFsdWF0ZWQgKi8KKyNlbmRpZiAvKiBEQ01EQlVG ICovCisKKy8qIENvbW1hbmQgYnVmZmVyIHBvaW50ZXJzICovCisKKyNkZWZpbmUgUFBWTEVOIFZO QU1MCQkJLyogMjAwODAzMDUgV29sZnJhbSBTYW5nICh3YXMgMjQpICovCitjaGFyIHBwdm5hbWJ1 ZltQUFZMRU4rMV0gPSB7IE5VTCwgTlVMIH07CisKK2NoYXIgKiBjbWJwdHIgPSBOVUxMOwkJCS8q IEN1cnJlbnQgcG9zaXRpb24gKGZvciBleHBvcnQpICovCisKK3N0YXRpYyBjaGFyICpicCwgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGNvbW1hbmQgYnVmZmVyIHBvc2l0aW9uICov CisgICAgKnBwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgY3Vy cmVudCBmaWVsZCAqLworICAgICpucDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0YXJ0IG9mIG5leHQgZmllbGQgKi8KKworc3RhdGljIGludCB1bmd3LAkJCS8qIEZvciB1bmdl dHRpbmcgd29yZHMgKi8KKyAgICBhdHhuOwkJCQkvKiBFeHBhbnNpb24gYnVmZmVyIChhdHhidWYp IGxlbmd0aCAqLworCisjaWZkZWYgT1MyCitleHRlcm4gaW50IHdpZGVyZXN1bHQ7CisjZW5kaWYg LyogT1MyICovCisKK2V4dGVybiBpbnQgY21kX2NvbHMsIGNtZF9yb3dzLCBsb2NhbCwgcXVpZXQ7 CisKKyNpZmRlZiBUTkNPREUKKyNpZmRlZiBJQUMKKyN1bmRlZiBJQUMKKyNlbmRpZiAvKiBJQUMg Ki8KKyNkZWZpbmUgSUFDIDI1NQorI2VuZGlmIC8qIFROQ09ERSAqLworCitfUFJPVE9UWVAoIHN0 YXRpYyBpbnQgZ3R3b3JkLCAoaW50KSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IGFkZGJ1Ziwg KGNoYXIgKikgKTsKK19QUk9UT1RZUCggc3RhdGljIGludCBzZXRhdG0sIChjaGFyICosIGludCkg KTsKK19QUk9UT1RZUCggc3RhdGljIFZPSUQgY21kbmV3bCwgKGNoYXIpICk7CitfUFJPVE9UWVAo IHN0YXRpYyBWT0lEIGNtZGNoYXJkZWwsICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9J RCBjbWRlY2hvLCAoY2hhciwgaW50KSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IHRlc3QsIChp bnQsIGludCkgKTsKKyNpZmRlZiBHRU1ET1MKK19QUk9UT1RZUCggZXh0ZXJuIGNoYXIgKnN0cmNo ciwgKGNoYXIgKiwgaW50KSApOworI2VuZGlmIC8qIEdFTURPUyAqLworCitleHRlcm4gY2hhciAq IGRmdHR5OworCisvKiBUaGUgZm9sbG93aW5nIGFyZSBmb3IgdXNlIHdpdGggY2hhaW5lZCBGREIn cyAqLworCitzdGF0aWMgaW50IGNyZmxhZyA9IDA7CQkJLyogQ2FycmlhZ2UgcmV0dXJuIHdhcyB0 eXBlZCAqLworc3RhdGljIGludCBxbWZsYWcgPSAwOwkJCS8qIFF1ZXN0aW9uIG1hcmsgd2FzIHR5 cGVkICovCitzdGF0aWMgaW50IGVzZmxhZyA9IDA7CQkJLyogRXNjYXBlIHdhcyB0eXBlZCAqLwor CisvKiBEaXJlY3Rvcnkgc2VwYXJhdG9yICovCisKKyNpZmRlZiBHRU1ET1MKK3N0YXRpYyBjaGFy IGRpcnNlcCA9ICdcXCc7CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCitzdGF0aWMgY2hhciBk aXJzZXAgPSAnOic7CisjZWxzZQorI2lmZGVmIE1BQworc3RhdGljIGNoYXIgZGlyc2VwID0gJzon OworI2Vsc2UKKyNpZmRlZiBWTVMKK3N0YXRpYyBjaGFyIGRpcnNlcCA9ICcuJzsKKyNlbHNlCisj aWZkZWYgU1RSQVRVUworc3RhdGljIGNoYXIgZGlyc2VwID0gJz4nOworI2Vsc2UKK3N0YXRpYyBj aGFyIGRpcnNlcCA9ICcvJzsJCS8qIFVOSVgsIE9TLzIsIE9TLTksIEFtaWdhLCBldGMuICovCisj ZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE1BQyAqLwor I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogR0VNRE9TICovCisKKy8qICBIIEEg UyBOIE8gUCBBIFQgSCAgKi8KKworLyogIFJldHVybnMgMCBpZiBmaWxlc3BlYyBzIGluY2x1ZGVz IGFueSBwYXRoIHNlZ21lbnRzOyAxIGlmIGl0IGRvZXNuJ3QuICovCisKK2ludAoraGFzbm9wYXRo KHMpIGNoYXIgKiBzOyB7CisgICAgY2hhciAqIHAgPSBOVUxMOworICAgIGlmICghcykgcmV0dXJu KDApOworICAgIGlmICghKnMpIHJldHVybigwKTsKKyAgICB6c3RyaXAocywmcCk7CisgICAgcmV0 dXJuKGNrc3RyY21wKHMscCxDS01BWFBBVEgsZmlsZWNhc2UpID09IDAgPyAxIDogMCk7Cit9CisK Ky8qICBDIEsgUyBQIFIgRSBBIEQgIC0tICBQcmludCBzdHJpbmcgZG91YmxlLXNwYWNlZCAgKi8K Kworc3RhdGljIGNoYXIgKiBzcHJwdHIgPSBOVUxMOworCitzdGF0aWMgY2hhciAqCitja3NwcmVh ZChzKSBjaGFyICogczsgeworICAgIGludCBuID0gMDsKKyAgICBjaGFyICogcDsKKyAgICBuID0g c3RybGVuKHMpOworICAgIGlmIChzcHJwdHIpCisgICAgICBmcmVlKHNwcnB0cik7CisgICAgc3By cHRyID0gbWFsbG9jKG4gKyBuICsgMyk7CisgICAgaWYgKHNwcnB0cikgeworCXAgPSBzcHJwdHI7 CisJd2hpbGUgKCpzKSB7CisJICAgICpwKysgPSAqcysrOworCSAgICAqcCsrID0gU1A7CisJfQor CSpwID0gTlVMOworICAgIH0KKyAgICByZXR1cm4oc3BycHRyID8gc3BycHRyIDogIiIpOworfQor CisvKiAgVCBFIFMgVCAgLS0gIEJpdCB0ZXN0ICAqLworCitzdGF0aWMgaW50Cit0ZXN0KHgsbSkg aW50IHgsIG07IHsgLyogIFJldHVybnMgMSBpZiBhbnkgYml0cyBmcm9tIG0gYXJlIG9uIGluIHgs IGVsc2UgMCAgKi8KKyAgICByZXR1cm4oKHggJiBtKSA/IDEgOiAwKTsKK30KKworLyogIEsgVyBE IEggRSBMIFAgIC0tICBHaXZlbiBhIGtleXdvcmQgdGFibGUsIHByaW50IGtleXdvcmRzIGluIGNv bHVtbnMuICAqLworLyoKKyAgQ2FsbCB3aXRoOgorICAgIHMgICAgIC0ga2V5d29yZCB0YWJsZQor ICAgIG4gICAgIC0gbnVtYmVyIG9mIGVudHJpZXMKKyAgICBwYXQgICAtIHBhdHRlcm4gKGxlZnQg c3Vic3RyaW5nKSB0aGF0IG11c3QgbWF0Y2ggZm9yIGVhY2gga2V5d29yZAorICAgIHByZSAgIC0g cHJlZml4IHRvIGFkZCB0byBlYWNoIGtleXdvcmQKKyAgICBwb3N0ICAtIHN1ZmZpeCB0byBhZGQg dG8gZWFjaCBrZXl3b3JkCisgICAgb2ZmICAgLSBvZmZzZXQgb24gZmlyc3Qgc2NyZWVuZnVsLCBh bGxvd2luZyByb29tIGZvciBpbnRyb2R1Y3RvcnkgdGV4dAorICAgIHhobHAgIC0gMSB0byBwcmlu dCBhbnkgQ01fSU5WIGtleXdvcmRzIHRoYXQgYXJlIG5vdCBhbHNvIGFiYnJldmlhdGlvbnMuCisg ICAgICAgICAgICAyIHRvIHByaW50IENNX0lOViBrZXl3b3JkcyBpZiBDTV9ITFAgYWxzbyBzZXQK KyAgICAgICAgICAgIDQgaWYgaXQncyBhIHN3aXRjaCB0YWJsZSAodG8gc2hvdyAnOicgaWYgQ01f QVJHKQorCisgIEFycmFuZ2VzIGtleXdvcmRzIGluIGNvbHVtbnMgd2l0aCB3aWR0aCBiYXNlZCBv biBsb25nZXN0IGtleXdvcmQuCisgIERvZXMgIm1vcmU/IiBwcm9tcHRpbmcgYXQgZW5kIG9mIHNj cmVlbi4KKyAgVXNlcyBnbG9iYWwgY21kX3Jvd3MgYW5kIGNtZF9jb2xzIGZvciBzY3JlZW4gc2l6 ZS4KKyovCitWT0lECitrd2RoZWxwKHMsbixwYXQscHJlLHBvc3Qsb2ZmLHhobHApCisgICAgc3Ry dWN0IGtleXRhYiBzW107IGludCBuLCBvZmYsIHhobHA7IGNoYXIgKnBhdCwgKnByZSwgKnBvc3Q7 CisvKiBrd2RoZWxwICovIHsKKworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGNjOworICAg IGludCBjb2xzLCBoZWlnaHQsIGksIGosIGssIGxjLCBuMiA9IDA7CisgICAgY2hhciAqYiA9IE5V TEwsICpwLCAqcTsKKyAgICBjaGFyICpwYSwgKnB4OworICAgIGNoYXIgKipzMiA9IE5VTEw7Cisg ICAgY2hhciAqdG1wYnVmID0gTlVMTDsKKworICAgIGNjID0gc3RybGVuKHBhdCk7CisKKyAgICBp ZiAoIXMpIHJldHVybjsJCQkvKiBOb3RoaW5nIHRvIGRvICovCisgICAgaWYgKG4gPCAxKSByZXR1 cm47CQkJLyogRGl0dG8gKi8KKyAgICBpZiAob2ZmIDwgMCkgb2ZmID0gMDsJCS8qIE9mZnNldCBm b3IgZmlyc3QgcGFnZSAqLworICAgIGlmICghcHJlKSBwcmUgPSAiIjsJCQkvKiBIYW5kbGUgbnVs bCBzdHJpbmcgcG9pbnRlcnMgKi8KKyAgICBpZiAoIXBvc3QpIHBvc3QgPSAiIjsKKyAgICBsYyA9 IG9mZjsJCQkJLyogU2NyZWVuLWxpbmUgY291bnRlciAqLworCisgICAgaWYgKHhobHAgJiA0KQkJ CS8qIEZvciBzd2l0Y2hlcyAqLworICAgICAgdG1wYnVmID0gKGNoYXIgKiltYWxsb2MoVE1QQlVG U0laKzEpOworCisgICAgaWYgKChzMiA9IChjaGFyICoqKSBtYWxsb2MobiAqIHNpemVvZihjaGFy ICopKSkpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CS8qIEZpbmQgbG9uZ2VzdCBrZXl3 b3JkICovCisJICAgIHMyW2ldID0gTlVMTDsKKwkgICAgaWYgKGNrc3RyY21wKHNbaV0ua3dkLHBh dCxjYywwKSkKKwkgICAgICBjb250aW51ZTsKKworCSAgICBpZiAoc1tpXS5mbGdzICYgQ01fUFNI CS8qIE5PUFVTSCBvciBub3B1c2ggc2NyZWVuaW5nICovCisjaWZuZGVmIE5PUFVTSAorCQkmJiBu b3B1c2gKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKwkJKQorCSAgICAgIGNvbnRpbnVlOworCSAgICBp ZiAoc1tpXS5mbGdzICYgQ01fTE9DCS8qIE5PTE9DQUwgb3Igbm9sb2NhbCBzY3JlZW5pbmcgKi8K KyNpZm5kZWYgTk9MT0NBTAorCQkmJiBub2xvY2FsCisjZW5kaWYgLyogTk9MT0NBTCAqLworCQkp CisJICAgICAgY29udGludWU7CisKKwkgICAgaWYgKHNbaV0uZmxncyAmIENNX0lOVikgeworI2lm ZGVmIENPTU1FTlQKKy8qIFRoaXMgY29kZSBkb2VzIG5vdCBzaG93IGludmlzaWJsZSBrZXl3b3Jk cyBhdCBhbGwgZXhjZXB0IGZvciAiaGVscCA/IiAqLworLyogYW5kIHRoZW4gb25seSBoZWxwIHRv cGljcyAoQ01fSExQKSBpbiB0aGUgdG9wLWxldmVsIGtleXdvcmQgbGlzdC4gKi8KKworCQlpZiAo KHhobHAgJiAyKSA9PSAwKQorCQkgIGNvbnRpbnVlOworCQllbHNlIGlmICgoc1tpXS5mbGdzICYg Q01fSExQKSA9PSAwKQorCQkgIGNvbnRpbnVlOworI2Vsc2UKKy8qIFRoaXMgY29kZSBzaG93cyBp bnZpc2libGUga2V5d29yZHMgdGhhdCBhcmUgbm90IGFsc28gYWJicmV2aWF0aW9ucyB3aGVuICov CisvKiA/IHdhcyB0eXBlZCBBRlRFUiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWVsZCBzbyB0aGUg dXNlciBjYW4gZmluZCBvdXQgKi8KKy8qIHdoYXQgdGhleSBhcmUgYW5kIChmb3IgZXhhbXBsZSkg d2h5IGNvbXBsZXRpb24gZG9lc24ndCB3b3JrIGF0IHRoaXMgcG9pbnQgKi8KKworCQlpZiAoc1tp XS5mbGdzICYgQ01fQUJSKQorCQkgIGNvbnRpbnVlOworCQllbHNlIGlmICgoeGhscCAmIDMpID09 IDApCisJCSAgY29udGludWU7CisJCWVsc2UgaWYgKCh4aGxwICYgMikgJiYgKChzW2ldLmZsZ3Mg JiBDTV9ITFApID09IDApKQorCQkgIGNvbnRpbnVlOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkg ICAgfQorCSAgICBqID0gc3RybGVuKHNbaV0ua3dkKTsKKwkgICAgaWYgKCEoeGhscCAmIDQpIHx8 ICF0bXBidWYpIHsgLyogUmVndWxhciBrZXl3b3JkIHRhYmxlICovCisJCXMyW24yKytdID0gc1tp XS5rd2Q7CS8qIENvcHkgcG9pbnRlcnMgdG8gdmlzaWJsZSBvbmVzICovCisJICAgIH0gZWxzZSB7 CQkJLyogU3dpdGNoZXMgKi8KKwkJY2ttYWttc2codG1wYnVmLAkvKiBNYWtlIGEgY29weSB0aGF0 IHNob3dzICI6IiBpZiAqLworCQkJIFRNUEJVRlNJWiwJLyogdGhlIHN3aXRjaCB0YWtlcyBhbiBh cmd1bWVudC4gKi8KKwkJCSBzW2ldLmt3ZCwKKwkJCSAoc1tpXS5mbGdzICYgQ01fQVJHKSA/ICI6 IiA6ICIiLAorCQkJIE5VTEwsCisJCQkgTlVMTAorCQkJICk7CisJCW1ha2VzdHIoJihzMltuMl0p LHRtcGJ1Zik7CisJCWlmIChzW2ldLmZsZ3MgJiBDTV9BUkcpIGorKzsKKwkJbjIrKzsKKwkgICAg fQorCSAgICBpZiAoaiA+IHdpZHRoKQorCSAgICAgIHdpZHRoID0gajsKKwl9CisJLyogQ29sdW1u IHdpZHRoICovCisJbiA9IG4yOworICAgIH0KKyAgICBpZiAoczIgJiYgKGIgPSAoY2hhciAqKSBt YWxsb2MoY21kX2NvbHMgKyAxKSkpIHsgLyogTWFrZSBhIGxpbmUgYnVmZmVyICAgKi8KKwljaGFy ICogYng7CisJYnggPSBiICsgY21kX2NvbHM7CisJd2lkdGggKz0gKGludClzdHJsZW4ocHJlKSAr IChpbnQpc3RybGVuKHBvc3QpICsgMjsKKwljb2xzID0gY21kX2NvbHMgLyB3aWR0aDsJLyogSG93 IG1hbnkgY29sdW1ucz8gKi8KKwlpZiAoY29scyA8IDEpIGNvbHMgPSAxOworCWhlaWdodCA9IG4g LyBjb2xzOwkJLyogSG93IGxvbmcgaXMgZWFjaCBjb2x1bW4/ICovCisJaWYgKG4gJSBjb2xzKSBo ZWlnaHQrKzsJCS8qIEFkZCBvbmUgZm9yIHJlbWFpbmRlciwgaWYgYW55ICovCisKKwlmb3IgKGkg PSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsJICAgIC8qIExvb3AgZm9yIGVhY2ggcm93ICovCisJICAg IGZvciAoaiA9IDA7IGogPCBjbWRfY29sczsgaisrKSAgLyogRmlyc3QgZmlsbCByb3cgd2l0aCBi bGFua3MgKi8KKwkgICAgICBiW2pdID0gU1A7CisJICAgIGZvciAoaiA9IDA7IGogPCBjb2xzOyBq KyspIHsgICAgLyogTG9vcCBmb3IgZWFjaCBjb2x1bW4gaW4gcm93ICovCisJCWsgPSBpICsgKGog KiBoZWlnaHQpOyAgICAgICAvKiBJbmRleCBvZiBuZXh0IGtleXdvcmQgKi8KKwkJaWYgKGsgPCBu KSB7CQkgICAgLyogSW4gcmFuZ2U/ICovCisJCSAgICBwYSA9IHByZTsKKwkJICAgIHB4ID0gcG9z dDsKKwkJICAgIHAgPSBzMltrXTsJCSAgICAvKiBQb2ludCB0byB2ZXJiIG5hbWUgKi8KKwkJICAg IHEgPSBiICsgKGogKiB3aWR0aCkgKyAxOyAvKiBXaGVyZSB0byBjb3B5IGl0IHRvICovCisJCSAg ICB3aGlsZSAoKHEgPCBieCkgJiYgKCpxKysgPSAqcGErKykpIDsgLyogQ29weSBwcmVmaXggKi8K KwkJICAgIHEtLTsJCSAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLworCQkg ICAgd2hpbGUgKChxIDwgYngpICYmICgqcSsrID0gKnArKykpIDsJIC8qIENvcHkgZmlsZW5hbWUg Ki8KKwkJICAgIHEtLTsJCSAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAqLwor CQkgICAgd2hpbGUgKChxIDwgYngpICYmICgqcSsrID0gKnB4KyspKSA7IC8qIENvcHkgc3VmZml4 ICovCisJCSAgICBpZiAoaiA8IGNvbHMgLSAxKSB7CisJCQlxLS07CisJCQkqcSA9IFNQOwkvKiBS ZXBsYWNlIHRoZSBzcGFjZSAqLworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgcCA9IGIgKyBj bWRfY29scyAtIDE7CS8qIExhc3QgY2hhciBpbiBsaW5lICovCisJICAgIHdoaWxlICgqcC0tID09 IFNQKSA7CS8qIFRyaW0gKi8KKwkgICAgKihwKzIpID0gTlVMOworCSAgICBwcmludGYoIiVzXG4i LGIpOwkJLyogUHJpbnQgdGhlIGxpbmUgKi8KKwkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAy KSkgeyAvKiBTY3JlZW4gZnVsbD8gKi8KKwkJaWYgKCFhc2ttb3JlKCkpCQkvKiBEbyBtb3JlLXBy b21wdGluZy4uLiAqLworCQkgIGdvdG8geGt3ZGhlbHA7CisJCWVsc2UKKwkJICBsYyA9IDA7CisJ ICAgIH0KKwl9CisJLyogcHJpbnRmKCJcbiIpOyAqLwkJLyogQmxhbmsgbGluZSBhdCBlbmQgb2Yg cmVwb3J0ICovCisgICAgfSBlbHNlIHsJCQkJLyogTWFsbG9jIGZhaWx1cmUsIG5vIGNvbHVtbnMg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIGlmIChzW2ldLmZsZ3MgJiBDTV9J TlYpCS8qIFVzZSBvcmlnaW5hbCBrZXl3b3JkIHRhYmxlICovCisJICAgICAgY29udGludWU7CQkJ Lyogc2tpcHBpbmcgaW52aXNpYmxlIGVudHJpZXMgKi8KKwkgICAgcHJpbnRmKCIlcyVzJXNcbiIs cHJlLHNbaV0ua3dkLHBvc3QpOworCSAgICBpZiAoKytsYyA+IChjbWRfcm93cyAtIDIpKSB7IC8q IFNjcmVlbiBmdWxsPyAqLworCQlpZiAoIWFza21vcmUoKSkJCS8qIERvIG1vcmUtcHJvbXB0aW5n Li4uICovCisJCSAgZ290byB4a3dkaGVscDsKKwkJZWxzZQorCQkgIGxjID0gMDsKKwkgICAgfQor CX0KKyAgICB9CisgIHhrd2RoZWxwOgorICAgIGlmICh4aGxwICYgNCkgeworCWlmICh0bXBidWYp IGZyZWUoKGNoYXIgKil0bXBidWYpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJICBpZiAo czJbaV0pIGZyZWUoczJbaV0pOworICAgIH0KKyAgICBpZiAoczIpIGZyZWUoczIpOwkJCS8qIEZy ZWUgYXJyYXkgY29weSAqLworICAgIGlmIChiKSBmcmVlKGIpOwkJCS8qIEZyZWUgbGluZSBidWZm ZXIgKi8KKyAgICByZXR1cm47Cit9CisKKy8qICBYIEYgSSBMIEggRSBMIFAgIC0tICBHaXZlbiBh IGZpbGUgbGlzdCwgcHJpbnQgbmFtZXMgaW4gY29sdW1ucy4gICovCisvKgorICBDYWxsIHdpdGg6 CisgICAgbiAgICAgLSBudW1iZXIgb2YgZW50cmllcworICAgIHByZSAgIC0gcHJlZml4IHRvIGFk ZCB0byBlYWNoIGZpbGVuYW1lCisgICAgcG9zdCAgLSBzdWZmaXggdG8gYWRkIHRvIGVhY2ggZmls ZW5hbWUKKyAgICBvZmYgICAtIG9mZnNldCBvbiBmaXJzdCBzY3JlZW5mdWwsIGFsbG93aW5nIHJv b20gZm9yIGludHJvZHVjdG9yeSB0ZXh0CisgICAgY21kaXJmbGcgLSAxIGlmIG9ubHkgZGlyZWN0 b3J5IG5hbWVzIHNob3VsZCBiZSBsaXN0ZWQsIDAgdG8gbGlzdCBhbGwgZmlsZXMKKyAgICBmcyAg ICAtIGNhbGwgZmlsZXNlbGVjdCgpIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgZWFjaCBm aWxlLgorICAgIFRoZSByZXN0IG9mIHRoZSBhcmdzIGFyZSB0aGUgc2FtZSBhcyBmb3IgZmlsZXNl bGVjdCgpLgorCisgIEFycmFuZ2VzIGZpbGVuYW1lcyBpbiBjb2x1bW5zIHdpdGggd2lkdGggYmFz ZWQgb24gbG9uZ2VzdCBmaWxlbmFtZS4KKyAgRG9lcyAibW9yZT8iIHByb21wdGluZyBhdCBlbmQg b2Ygc2NyZWVuLgorICBVc2VzIGdsb2JhbCBjbWRfcm93cyBhbmQgY21kX2NvbHMgZm9yIHNjcmVl biBzaXplLgorKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3hmaWxoZWxwKAorICAgIGludCBu LCBjaGFyICpwcmUsIGNoYXIgKnBvc3QsIGludCBvZmYsIGludCBjbWRpcmZsYWcsCisgICAgaW50 IGZzLCBjaGFyICpzYSwgY2hhciAqc2IsIGNoYXIgKnNuYSwgY2hhciAqc25iLAorICAgIENLX09G Rl9UIG1pbnNpeiwgQ0tfT0ZGX1QgbWF4c2l6LAorICAgIGludCBuYnUsIGludCBueGxpc3QsCisg ICAgY2hhciAqKiB4bGlzdAorKQorI2Vsc2UKK3hmaWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGly ZmxnLAorCSBmcyxzYSxzYixzbmEsc25iLG1pbnNpeixtYXhzaXosbmJ1LG54bGlzdCx4bGlzdCkK KyAgICBpbnQgbiwgb2ZmOyBjaGFyICpwcmUsICpwb3N0OyBpbnQgY21kaXJmbGc7CisgICAgaW50 IGZzOyBjaGFyICpzYSwqc2IsKnNuYSwqc25iOyBDS19PRkZfVCBtaW5zaXosbWF4c2l6OworICAg IGludCBuYnUsbnhsaXN0OyBjaGFyICoqIHhsaXN0OworI2VuZGlmCS8qIENLX0FOU0lDICovCisg eworICAgIGNoYXIgZmlsYnVmW0NLTUFYUEFUSCArIDFdOwkJLyogVGVtcCBidWZmZXIgZm9yIG9u ZSBmaWxlbmFtZSAqLworICAgIGludCB3aWR0aCA9IDA7CisgICAgaW50IGNvbHMsIGhlaWdodCwg aSwgaiwgaywgbGMsIG4yID0gMCwgcmMgPSAwLCBpdHNhZGlyID0gMDsKKyAgICBjaGFyICpiID0g TlVMTCwgKnAsICpxOworICAgIGNoYXIgKnBhLCAqcHg7CisgICAgY2hhciAqKnMyID0gTlVMTDsK KyNpZmRlZiBWTVMKKyAgICBjaGFyICogY2RwID0gemd0ZGlyKCk7CisjZW5kaWYgLyogVk1TICov CisKKyAgICBpZiAobiA8IDEpIHJldHVybigwKTsKKyAgICBpZiAob2ZmIDwgMCkgb2ZmID0gMDsJ CS8qIE9mZnNldCBmb3IgZmlyc3QgcGFnZSAqLworICAgIGlmICghcHJlKSBwcmUgPSAiIjsJCQkv KiBIYW5kbGUgbnVsbCBzdHJpbmcgcG9pbnRlcnMgKi8KKyAgICBpZiAoIXBvc3QpIHBvc3QgPSAi IjsKKworICAgIGxjID0gb2ZmOwkJCQkvKiBTY3JlZW4tbGluZSBjb3VudGVyICovCisKKyAgICBp ZiAoKHMyID0gKGNoYXIgKiopIG1hbGxvYyhuICogc2l6ZW9mKGNoYXIgKikpKSkgeworCWZvciAo aSA9IDA7IGkgPCBuOyBpKyspIHsJLyogTG9vcCB0aHJvdWdoIGZpbGVuYW1lcyAqLworCSAgICBp dHNhZGlyID0gMDsKKwkgICAgczJbaV0gPSBOVUxMOwkJLyogSW5pdGlhbGl6ZSBlYWNoIHBvaW50 ZXIgdG8gTlVMTCAqLworCSAgICB6bmV4dChmaWxidWYpOwkJLyogR2V0IG5leHQgZmlsZW5hbWUg Ki8KKwkgICAgaWYgKCFmaWxidWZbMF0pCQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJICAgICAg YnJlYWs7CisjaWZkZWYgQ09NTUVOVAorCSAgICBpdHNhZGlyID0gaXNkaXIoZmlsYnVmKTsJLyog SXMgaXQgYSBkaXJlY3Rvcnk/ICovCisJICAgIGlmIChjbWRpcmZsZyAmJiAhaXRzYWRpcikJLyog Tm8sIGxpc3RpbmcgZGlyZWN0b3JpZXMgb25seT8gKi8KKwkgICAgICBjb250aW51ZTsJCQkvKiBT byBza2lwIHRoaXMgb25lLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgaWYgKGZzKSBp ZiAoZmlsZXNlbGVjdChmaWxidWYsCisJCQkgICBzYSxzYixzbmEsc25iLAorCQkJICAgbWluc2l6 LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0KSA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u dGludWU7CisJICAgIH0KKyNpZmRlZiBWTVMKKwkgICAgY2tzdHJuY3B5KGZpbGJ1Zix6cmVsbmFt ZShmaWxidWYsY2RwKSxDS01BWFBBVEgpOworI2VuZGlmIC8qIFZNUyAqLworCSAgICBqID0gc3Ry bGVuKGZpbGJ1Zik7CisjaWZuZGVmIFZNUworCSAgICBpZiAoaXRzYWRpciAmJiBqIDwgQ0tNQVhQ QVRIIC0gMSAmJiBqID4gMCkgeworCQlpZiAoZmlsYnVmW2otMV0gIT0gZGlyc2VwKSB7CisJCSAg ICBmaWxidWZbaisrXSA9IGRpcnNlcDsKKwkJICAgIGZpbGJ1ZltqXSA9IE5VTDsKKwkJfQorCSAg ICB9CisjZW5kaWYgLyogVk1TICovCisJICAgIGlmICghKHMyW24yXSA9IG1hbGxvYyhqKzEpKSkg eworCQlwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKwkJcmMgPSAtOTsK KwkJZ290byB4ZmlsaGVscDsKKwkgICAgfQorCSAgICBpZiAoaiA8PSBDS01BWFBBVEgpIHsKKwkJ c3RyY3B5KHMyW24yXSxmaWxidWYpOworCQluMisrOworCSAgICB9IGVsc2UgeworCQlwcmludGYo Ij9OYW1lIHRvbyBsb25nIC0gJXNcbiIsIGZpbGJ1Zik7CisJCXJjID0gLTk7CisJCWdvdG8geGZp bGhlbHA7CisJICAgIH0KKwkgICAgaWYgKGogPiB3aWR0aCkJCS8qIEdldCB3aWR0aCBvZiB3aWRl c3Qgb25lICovCisJICAgICAgd2lkdGggPSBqOworCX0KKwluID0gbjI7CQkJCS8qIEhvdyBtYW55 IHdlIGFjdHVhbGx5IGdvdCAqLworICAgIH0KKyAgICBzaF9zb3J0KHMyLE5VTEwsbiwwLDAsZmls ZWNhc2UpOwkvKiBBbHBoYWJldGl6ZSB0aGUgbGlzdCAqLworCisgICAgcmMgPSAxOworICAgIGlm IChzMiAmJiAoYiA9IChjaGFyICopIG1hbGxvYyhjbWRfY29scyArIDEpKSkgeyAvKiBNYWtlIGEg bGluZSBidWZmZXIgKi8KKwljaGFyICogYng7CisJYnggPSBiICsgY21kX2NvbHM7CisJd2lkdGgg Kz0gKGludClzdHJsZW4ocHJlKSArIChpbnQpc3RybGVuKHBvc3QpICsgMjsKKwljb2xzID0gY21k X2NvbHMgLyB3aWR0aDsJLyogSG93IG1hbnkgY29sdW1ucz8gKi8KKwlpZiAoY29scyA8IDEpIGNv bHMgPSAxOworCWhlaWdodCA9IG4gLyBjb2xzOwkJLyogSG93IGxvbmcgaXMgZWFjaCBjb2x1bW4/ ICovCisJaWYgKG4gJSBjb2xzKSBoZWlnaHQrKzsJCS8qIEFkZCBvbmUgZm9yIHJlbWFpbmRlciwg aWYgYW55ICovCisKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsJICAgIC8qIExvb3Ag Zm9yIGVhY2ggcm93ICovCisJICAgIGZvciAoaiA9IDA7IGogPCBjbWRfY29sczsgaisrKSAgLyog Rmlyc3QgZmlsbCByb3cgd2l0aCBibGFua3MgKi8KKwkgICAgICBiW2pdID0gU1A7CisJICAgIGZv ciAoaiA9IDA7IGogPCBjb2xzOyBqKyspIHsgICAgLyogTG9vcCBmb3IgZWFjaCBjb2x1bW4gaW4g cm93ICovCisJCWsgPSBpICsgKGogKiBoZWlnaHQpOyAgICAgICAvKiBJbmRleCBvZiBuZXh0IGZp bGVuYW1lICovCisJCWlmIChrIDwgbikgewkJICAgIC8qIEluIHJhbmdlPyAqLworCQkgICAgcGEg PSBwcmU7CisJCSAgICBweCA9IHBvc3Q7CisJCSAgICBwID0gczJba107CQkgICAgICAgICAgICAg ICAvKiBQb2ludCB0byBmaWxlbmFtZSAqLworCQkgICAgcSA9IGIgKyAoaiAqIHdpZHRoKSArIDE7 ICAgICAgICAgICAgIC8qIGFuZCBkZXN0aW5hdGlvbiAqLworCQkgICAgd2hpbGUgKChxIDwgYngp ICYmICgqcSsrID0gKnBhKyspKSA7IC8qIENvcHkgcHJlZml4ICovCisJCSAgICBxLS07CQkgICAg ICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJICAgIHdoaWxlICgocSA8IGJ4 KSAmJiAoKnErKyA9ICpwKyspKSA7CSAvKiBDb3B5IGZpbGVuYW1lICovCisJCSAgICBxLS07CQkg ICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJICAgIHdoaWxlICgocSA8 IGJ4KSAmJiAoKnErKyA9ICpweCsrKSkgOyAvKiBDb3B5IHN1ZmZpeCAqLworCQkgICAgaWYgKGog PCBjb2xzIC0gMSkgeworCQkJcS0tOworCQkJKnEgPSBTUDsJLyogUmVwbGFjZSB0aGUgc3BhY2Ug Ki8KKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHAgPSBiICsgY21kX2NvbHMgLSAxOwkvKiBM YXN0IGNoYXIgaW4gbGluZSAqLworCSAgICB3aGlsZSAoKnAtLSA9PSBTUCkgOwkvKiBUcmltICov CisJICAgICoocCsyKSA9IE5VTDsKKwkgICAgcHJpbnRmKCIlc1xuIixiKTsJCS8qIFByaW50IHRo ZSBsaW5lICovCisJICAgIGlmICgrK2xjID4gKGNtZF9yb3dzIC0gMikpIHsgLyogU2NyZWVuIGZ1 bGw/ICovCisJCWlmICghYXNrbW9yZSgpKSB7CS8qIERvIG1vcmUtcHJvbXB0aW5nLi4uICovCisJ CSAgICByYyA9IDA7CisJCSAgICBnb3RvIHhmaWxoZWxwOworCQl9IGVsc2UKKwkJICBsYyA9IDA7 CisJICAgIH0KKwl9CisJcHJpbnRmKCJcbiIpOwkJCS8qIEJsYW5rIGxpbmUgYXQgZW5kIG9mIHJl cG9ydCAqLworCWdvdG8geGZpbGhlbHA7CisgICAgfSBlbHNlIHsJCQkJLyogTWFsbG9jIGZhaWx1 cmUsIG5vIGNvbHVtbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgIHpuZXh0 KGZpbGJ1Zik7CisJICAgIGlmICghZmlsYnVmWzBdKSBicmVhazsKKwkgICAgcHJpbnRmKCIlcyVz JXNcbiIscHJlLGZpbGJ1Zixwb3N0KTsKKwkgICAgaWYgKCsrbGMgPiAoY21kX3Jvd3MgLSAyKSkg eyAvKiBTY3JlZW4gZnVsbD8gKi8KKwkJaWYgKCFhc2ttb3JlKCkpIHsJIC8qIERvIG1vcmUtcHJv bXB0aW5nLi4uICovCisJCSAgICByYyA9IDA7CisJCSAgICBnb3RvIHhmaWxoZWxwOworCQl9IGVs c2UgbGMgPSAwOworCSAgICB9CisJfQoreGZpbGhlbHA6CisJaWYgKGIpIGZyZWUoYik7CisJZm9y IChpID0gMDsgaSA8IG4yOyBpKyspCisJICBpZiAoczJbaV0pIGZyZWUoczJbaV0pOworCWlmIChz MikgZnJlZSgoY2hhciAqKXMyKTsKKwlyZXR1cm4ocmMpOworICAgIH0KK30KKworLyoKKyAgU2lt cGxlciBmcm9udCBlbmQgZm9yIHhmaWxoZWxwKCkgd2l0aCBzaG9ydGVyIGFyZyBsaXN0IHdoZW4g bm8KKyAgZmlsZSBzZWxlY3Rpb24gaXMgbmVlZGVkLgorKi8KK2ludAorZmlsaGVscChuLHByZSxw b3N0LG9mZixjbWRpcmZsZykgaW50IG4sIG9mZjsgY2hhciAqcHJlLCAqcG9zdDsgaW50IGNtZGly ZmxnOyB7CisgICAgcmV0dXJuKHhmaWxoZWxwKG4scHJlLHBvc3Qsb2ZmLGNtZGlyZmxnLAorCQkg ICAgMCxOVUxMLE5VTEwsTlVMTCxOVUxMLAorCQkgICAgKENLX09GRl9UKTAsKENLX09GRl9UKTAs MCwwLChjaGFyICoqKU5VTEwpKTsKK30KKworLyogIEMgTSBTIEUgVCBVIFAgIC0tICBTZXQgdXAg Y29tbWFuZCBidWZmZXJzICAqLworCisjaWZkZWYgRENNREJVRgoraW50CitjbXNldHVwKCkgewor ICAgIGlmICghKGNtZGJ1ZiA9IG1hbGxvYyhDTURCTCArIDQpKSkgcmV0dXJuKC0xKTsKKyAgICBp ZiAoIShzYXZidWYgPSBtYWxsb2MoQ01EQkwgKyA0KSkpIHJldHVybigtMSk7CisgICAgc2F2YnVm WzBdID0gJ1wwJzsKKyAgICBpZiAoIShwcmV2Y21kID0gbWFsbG9jKENNREJMICsgNCkpKSByZXR1 cm4oLTEpOworICAgIHByZXZjbWRbMF0gPSAnXDAnOworICAgIGlmICghKGF0bWJ1ZiA9IG1hbGxv YyhBVE1CTCArIDQpKSkgcmV0dXJuKC0xKTsKKyAgICBpZiAoIShhdHhidWYgPSBtYWxsb2MoQ01E QkwgKyA0KSkpIHJldHVybigtMSk7CisgICAgaWYgKCEoYXR5YnVmID0gbWFsbG9jKEFUTUJMICsg NCkpKSByZXR1cm4oLTEpOworICAgIGlmICghKGZpbGJ1ZiA9IG1hbGxvYyhBVE1CTCArIDQpKSkg cmV0dXJuKC0xKTsKKyAgICBpZiAoIShjbXByb20gPSBtYWxsb2MoUFJPTVBUTCArIDQpKSkgcmV0 dXJuKC0xKTsKKyAgICBpZiAoIShjbXByeHggPSBtYWxsb2MoUFJPTVBUTCArIDQpKSkgcmV0dXJu KC0xKTsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICBjbXJpbmkoY21fcmVjYWxsKTsKKyNlbmRpZiAv KiBDS19SRUNBTEwgKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogRENNREJVRiAqLwor CisvKiAgQyBNIFMgRSBUIFAgIC0tICBTZXQgdGhlIHByb2dyYW0gcHJvbXB0LiAgKi8KKworVk9J RAorY21zZXRwKHMpIGNoYXIgKnM7IHsKKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBja3N0cm5j cHkoY21wcnh4LHMsUFJPTVBUTCk7CisgICAgcHNldGYgPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmxhZyB0aGF0IHByb21wdCBoYXMgYmVlbiBzZXQuICovCit9CisKKy8qICBDIE0g UyBBIFYgUCAgLS0gIFNhdmUgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHByb21wdC4gICovCisKK1ZP SUQKKyNpZmRlZiBDS19BTlNJQworY21zYXZwKGNoYXIgc1tdLCBpbnQgbikKKyNlbHNlCitjbXNh dnAocyxuKSBjaGFyIHNbXTsgaW50IG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNtc2F2 cCAqLyB7CisgICAgaWYgKHBzZXRmKQkJCQkvKiBCdXQgbm90IGlmIG5vIHByb21wdCBpcyBzZXQu ICovCisgICAgICBja3N0cm5jcHkocyxjbXByeHgsbik7Cit9CisKK2NoYXIgKgorY21nZXRwKCkg eworICAgIHJldHVybihjbXByeHgpOworfQorCitpbnQKK2NtZ2JyaygpIHsKKyAgICByZXR1cm4o YnJrY2hhcik7Cit9CisKK2ludAorY21na3dmbGdzKCkgeworICAgIHJldHVybihjbWt3Zmxncyk7 Cit9CisKKy8qICBQIFIgTyBNIFAgVCAgLS0gIElzc3VlIHRoZSBwcm9ncmFtIHByb21wdC4gICov CisKK1ZPSUQKK3Byb21wdChmKSB4eF9zdHJwIGY7IHsKKyAgICBjaGFyICpzeCwgKnN5OyBpbnQg bjsKKyNpZmRlZiBDS19TU0wKKyAgICBleHRlcm4gaW50IHNzbF9hY3RpdmVfZmxhZywgdGxzX2Fj dGl2ZV9mbGFnOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIE9TMgorICAgIGV4dGVybiBp bnQgZGlzcGxheV9kZW1vOworCisgICAgLyogSWYgdGhlcmUgaXMgYSBkZW1vIHNjcmVlbiB0byBi ZSBkaXNwbGF5ZWQsIGRpc3BsYXkgaXQgKi8KKyAgICBpZiAoZGlzcGxheV9kZW1vICYmIHhjbWRz cmMgPT0gMCkgeworICAgICAgICBkZW1vc2NybihWQ01EKTsKKyAgICAgICAgZGlzcGxheV9kZW1v ID0gMDsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAocHNldGYgPT0gMCkJCQkv KiBJZiBubyBwcm9tcHQgc2V0LCBzZXQgZGVmYXVsdC4gKi8KKyAgICAgIGNtc2V0cChkZnByb20p OworCisgICAgc3ggPSBjbXByeHg7CQkJLyogVW5ldmFsdWF0ZWQgY29weSAqLworICAgIGlmIChm KSB7CQkJCS8qIElmIGNvbnZlcnNpb24gZnVuY3Rpb24gZ2l2ZW4gKi8KKwlzeSA9IGNtcHJvbTsJ CQkvKiBFdmFsdWF0ZSBpdCAqLworI2lmZGVmIENPTU1FTlQKKwlkZWJ1ZyhGMTAxLCJwcm9tcHQg c3giLCIiLHN4KTsKKwlkZWJ1ZyhGMTAxLCJwcm9tcHQgc3kiLCIiLHN5KTsKKyNlbmRpZgkvKiBD T01NRU5UICovCisJbiA9IFBST01QVEw7CisJaWYgKCgqZikoc3gsJnN5LCZuKSA8IDApCS8qIElm IGV2YWx1YXRpb24gZmFpbGVkICovCisJICBzeCA9IGNtcHJ4eDsJCQkvKiByZXZlcnQgdG8gdW5l dmFsdWF0ZWQgY29weSAqLworCWVsc2UgaWYgKCEqY21wcm9tKQkJLyogZGl0dG8gaWYgaXQgY2Ft ZSB1cCBlbXB0eSAqLworCSAgc3ggPSBjbXByeHg7CisJZWxzZQorCSAgc3ggPSBjbXByb207Cisg ICAgfSBlbHNlCisgICAgICBja3N0cm5jcHkoY21wcm9tLHN4LFBST01QVEwpOworICAgIGNtcHJv bVtQUk9NUFRMLTFdID0gTlVMOworICAgIGlmICghKnN4KQkJCQkvKiBEb24ndCBwcmludCBpZiBl bXB0eSAqLworICAgICAgcmV0dXJuOworCisjaWZkZWYgT1NLCisgICAgZnB1dHMoc3gsIHN0ZG91 dCk7CisjZWxzZQorI2lmZGVmIE1BQworICAgIHByaW50ZigiJXMiLCBzeCk7CisjZWxzZQorI2lm ZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsJCQkvKiBQcmludCB0aGUgcHJvbXB0LiAqLwor ICAgICAgICB0dG9jKENSKTsJCQkvKiBJZiBURUxORVQgU2VydmVyICovCisgICAgICAgIHR0b2Mo TlVMKTsJCQkvKiBtdXN0IGZvbGxvVyBDUiBieSBOVUwgKi8KKyAgICAgICAgcHJpbnRmKCIlcyIs c3gpOworICAgIH0gZWxzZQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgIHByaW50ZigiXHIlcyIs c3gpOworI2lmZGVmIENLX1NTTAorICAgIGlmICghKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0 aXZlX2ZsYWcpKQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgZmZsdXNoKHN0ZG91dCk7CQkJ LyogTm93ISAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TSyAqLworfQorCisjaWZu ZGVmIE5PU1BMCitWT0lECitwdXNoY21kKHMpIGNoYXIgKiBzOyB7CQkJLyogRm9yIHVzZSB3aXRo IElGIGNvbW1hbmQuICovCisgICAgaWYgKCFzKSBzID0gbnA7CisgICAgY2tzdHJuY3B5KHNhdmJ1 ZixzLENNREJMKTsJCS8qIFNhdmUgdGhlIGRlcGVuZGVudCBjbGF1c2UsICAqLworICAgIGNtcmVz KCk7CQkJCS8qIGFuZCBjbGVhciB0aGUgY29tbWFuZCBidWZmZXIuICovCisgICAgZGVidWcoRjEx MCwgInB1c2hjbWQgc2F2YnVmIiwgc2F2YnVmLCAwKTsKK30KKworVk9JRAorcHVzaHFjbWQocykg Y2hhciAqIHM7IHsJCQkvKiBGb3IgdXNlIHdpdGggRUxTRSBjb21tYW5kLiAqLworICAgIGNoYXIg YywgKiBwID0gc2F2YnVmOwkJLyogRGVzdCAqLworICAgIGlmICghcykgcyA9IG5wOwkJCS8qIFNv dXJjZSAqLworICAgIHdoaWxlICgqcykgewkJCS8qIEdldCBmaXJzdCBub253aGl0ZXNwYWNlIGNo YXIgKi8KKwlpZiAoKnMgIT0gU1ApCisJICBicmVhazsKKwllbHNlCisJICBzKys7CisgICAgfQor ICAgIGlmICgqcyAhPSAneycpIHsJCQkvKiBJZiBpdCdzIG5vdCAieyIgKi8KKwlwdXNoY21kKHMp OwkJCS8qIGRvIHJlZ3VsYXIgcHVzaGNtZCAqLworCXJldHVybjsKKyAgICB9CisgICAgd2hpbGUg KChjID0gKnMrKykpIHsJCS8qIE90aGVyd2lzZSBpbnNlcnQgcXVvdGVzICovCisJaWYgKGMgPT0g Q01EUSkKKwkgICpwKysgPSBDTURROworCSpwKysgPSBjOworICAgIH0KKyAgICBjbXJlcygpOwkJ CQkvKiBhbmQgY2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyLiAqLworICAgIGRlYnVnKEYxMTAsICJw dXNocWNtZCBzYXZidWYiLCBzYXZidWYsIDApOworfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNp ZmRlZiBDT01NRU5UCisvKiBubyBsb25nZXIgdXNlZC4uLiAqLworVk9JRAorcG9wY21kKCkgewor ICAgIGNrc3RybmNweShjbWRidWYsc2F2YnVmLENNREJMKTsJLyogUHV0IGJhY2sgdGhlIHNhdmVk IG1hdGVyaWFsICovCisgICAgKnNhdmJ1ZiA9ICdcMCc7CQkJLyogYW5kIGNsZWFyIHRoZSBzYXZl IGJ1ZmZlciAqLworICAgIGNtcmVzKCk7Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisvKiAg QyBNIFIgRSBTICAtLSAgUmVzZXQgcG9pbnRlcnMgdG8gYmVnaW5uaW5nIG9mIGNvbW1hbmQgYnVm ZmVyLiAgKi8KKworVk9JRAorY21yZXMoKSB7CisgICAgaW53b3JkID0gMDsJCQkJLyogV2UncmUg bm90IGluIGEgd29yZCAqLworICAgIGNjID0gMDsJCQkJLyogQ2hhcmFjdGVyIGNvdW50IGlzIHpl cm8gKi8KKworLyogSW5pdGlhbGl6ZSBwb2ludGVycyAqLworCisgICAgcHAgPSBjbWRidWY7CQkJ LyogQmVnaW5uaW5nIG9mIGN1cnJlbnQgZmllbGQgKi8KKyAgICBicCA9IGNtZGJ1ZjsJCQkvKiBD dXJyZW50IHBvc2l0aW9uIHdpdGhpbiBidWZmZXIgKi8KKyAgICBucCA9IGNtZGJ1ZjsJCQkvKiBX aGVyZSB0byBzdGFydCBuZXh0IGZpZWxkICovCisKKyAgICBjbWZsZGZsZ3MgPSAwOworICAgIGNt ZmxncyA9IC01OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIG5vdCB5ZXQgc3RhcnRl ZC4gKi8KKyAgICB1bmd3ID0gMDsJCQkJLyogRG9uJ3QgbmVlZCB0byB1bmdldCBhIHdvcmQuICov Cit9CisKKy8qICBDIE0gSSBOIEkgIC0tICBDbGVhciB0aGUgY29tbWFuZCBhbmQgYXRvbSBidWZm ZXJzLCByZXNldCBwb2ludGVycy4gICovCisKKy8qCitUaGUgYXJndW1lbnQgc3BlY2lmaWVzIHdo byBpcyB0byBlY2hvIHRoZSB1c2VyJ3MgdHlwZWluIC0tCisgIDEgbWVhbnMgdGhlIGNtZCBwYWNr YWdlIGVjaG9lcworICAwIHNvbWVib2R5IGVsc2UgKHN5c3RlbSwgZnJvbnQgZW5kLCB0ZXJtaW5h bCkgZWNob2VzCisqLworVk9JRAorY21pbmkoZCkgaW50IGQ7IHsKKyNpZmRlZiBEQ01EQlVGCisg ICAgaWYgKCFhdG1idWYpCisgICAgICBpZiAoY21zZXR1cCgpPDApCisJZmF0YWwoImZhdGFsIGVy cm9yOiB1bmFibGUgdG8gYWxsb2NhdGUgY29tbWFuZCBidWZmZXJzIik7CisjZW5kaWYgLyogRENN REJVRiAqLworI2lmZGVmIFVTRV9NRU1DUFkKKyAgICBtZW1zZXQoY21kYnVmLDAsQ01EQkwpOwor ICAgIG1lbXNldChhdG1idWYsMCxBVE1CTCk7CisjZWxzZQorICAgIGZvciAoYnAgPSBjbWRidWY7 IGJwIDwgY21kYnVmK0NNREJMOyBicCsrKSAqYnAgPSBOVUw7CisgICAgZm9yIChicCA9IGF0bWJ1 ZjsgYnAgPCBhdG1idWYrQVRNQkw7IGJwKyspICpicCA9IE5VTDsKKyNlbmRpZiAvKiBVU0VfTUVN Q1BZICovCisKKyAgICAqYXRtYnVmID0gKnNhdmJ1ZiA9ICphdHhidWYgPSAqYXR5YnVmID0gKmZp bGJ1ZiA9IE5VTDsKKyAgICBibG9ja2x2bCA9IDA7CQkJLyogQmxvY2sgbGV2ZWwgaXMgMCAqLwor ICAgIGxpbmViZWdpbiA9IDE7CQkJLyogQXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgKi8KKyAg ICBkcHggPSBkOwkJCQkvKiBHbG9iYWwgY29weSBvZiB0aGUgZWNobyBmbGFnICovCisgICAgZGVi dWcoRjEwMSwiY21pbmkgZHB4IiwiIixkcHgpOworICAgIGNyZmxhZyA9IDA7CQkJCS8qIFJlc2V0 IGZsYWdzICovCisgICAgcW1mbGFnID0gMDsKKyAgICBlc2ZsYWcgPSAwOworI2lmZGVmIENLX1JF Q0FMTAorICAgIG5vX3JlY2FsbCA9IDA7CQkJLyogU3RhcnQgb3V0IHdpdGggcmVjYWxsIGVuYWJs ZWQgKi8KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICBjbXJlcygpOwkJCQkvKiBTZXRzIGJw IGV0YyAqLworICAgIG5ld2NtZCA9IDE7CQkJCS8qIFNlZSBhZGRjbWQoKSAqLworfQorCisjaWZu ZGVmIE5PU1BMCisvKgorICBUaGUgZm9sbG93aW5nIGJpdHMgYXJlIHRvIGFsbG93IHRoZSBjb21t YW5kIHBhY2thZ2UgdG8gY2FsbCBpdHNlbGYKKyAgaW4gdGhlIG1pZGRsZSBvZiBhIHBhcnNlLiAg VG8gZG8gdGhpcywgYmVnaW4gYnkgY2FsbGluZyBjbXB1c2gsIGFuZAorICBlbmQgYnkgY2FsbGlu ZyBjbXBvcC4gIEFzIHlvdSBjYW4gc2VlLCB0aGlzIGlzIHJhdGhlciBleHBlbnNpdmUuCisqLwor I2lmZGVmIERDTURCVUYKK3N0cnVjdCBjbXAgeworICAgIGludCBpWzVdOwkJCQkvKiBzdGFjayBm b3IgaW50ZWdlcnMgKi8KKyAgICBjaGFyICpjWzNdOwkJCQkvKiBzdGFjayBmb3IgcG9pbnRlcnMg Ki8KKyAgICBjaGFyICpiWzhdOwkJCQkvKiBzdGFjayBmb3IgYnVmZmVyIGNvbnRlbnRzICovCit9 Oworc3RydWN0IGNtcCAqY21wID0gMDsKKyNlbHNlCitpbnQgY21wX2lbQ01EREVQKzFdWzVdOwkJ CS8qIFN0YWNrIGZvciBpbnRlZ2VycyAqLworY2hhciAqY21wX2NbQ01EREVQKzFdWzVdOwkJLyog Zm9yIG1pc2MgcG9pbnRlcnMgKi8KK2NoYXIgKmNtcF9iW0NNRERFUCsxXVs3XTsJCS8qIGZvciBi dWZmZXIgY29udGVudHMgcG9pbnRlcnMgKi8KKyNlbmRpZiAvKiBEQ01EQlVGICovCisKK2ludCBj bWRkZXAgPSAtMTsJCQkvKiBDdXJyZW50IHN0YWNrIGRlcHRoICovCisKK2ludAorY21wdXNoKCkg ewkJCQkvKiBTYXZlIHRoZSBjb21tYW5kIGVudmlyb25tZW50ICovCisgICAgY2hhciAqY3A7CQkJ CS8qIENoYXJhY3RlciBwb2ludGVyICovCisKKyAgICBpZiAoY21kZGVwID49IENNRERFUCkJCS8q IEVudGVyIGEgbmV3IGNvbW1hbmQgZGVwdGggKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgY21k ZGVwKys7CisgICAgZGVidWcoRjEwMSwiJmNtcHVzaCB0byBkZXB0aCIsIiIsY21kZGVwKTsKKwor I2lmZGVmIERDTURCVUYKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNtcCBpZiBub3QgYWxy ZWFkeSBkb25lICovCisgICAgaWYgKCFjbXAgJiYgIShjbXAgPSAoc3RydWN0IGNtcCAqKSBtYWxs b2Moc2l6ZW9mKHN0cnVjdCBjbXApKihDTURERVArMSkpKSkKKyAgICAgIGZhdGFsKCJjbXB1c2g6 IG5vIG1lbW9yeSBmb3IgY21wIik7CisgICAgY21wW2NtZGRlcF0uaVswXSA9IGNtZmxnczsJCS8q IEZpcnN0IGRvIHRoZSBnbG9iYWwgaW50cyAqLworICAgIGNtcFtjbWRkZXBdLmlbMV0gPSBjbWZz YXY7CisgICAgY21wW2NtZGRlcF0uaVsyXSA9IGF0eG47CisgICAgY21wW2NtZGRlcF0uaVszXSA9 IHVuZ3c7CisKKyAgICBjbXBbY21kZGVwXS5jWzBdID0gYnA7CQkvKiBUaGVuIHRoZSBnbG9iYWwg cG9pbnRlcnMgKi8KKyAgICBjbXBbY21kZGVwXS5jWzFdID0gcHA7CisgICAgY21wW2NtZGRlcF0u Y1syXSA9IG5wOworI2Vsc2UKKyAgICBjbXBfaVtjbWRkZXBdWzBdID0gY21mbGdzOwkJLyogRmly c3QgZG8gdGhlIGdsb2JhbCBpbnRzICovCisgICAgY21wX2lbY21kZGVwXVsxXSA9IGNtZnNhdjsK KyAgICBjbXBfaVtjbWRkZXBdWzJdID0gYXR4bjsKKyAgICBjbXBfaVtjbWRkZXBdWzNdID0gdW5n dzsKKworICAgIGNtcF9jW2NtZGRlcF1bMF0gPSBicDsJCS8qIFRoZW4gdGhlIGdsb2JhbCBwb2lu dGVycyAqLworICAgIGNtcF9jW2NtZGRlcF1bMV0gPSBwcDsKKyAgICBjbXBfY1tjbWRkZXBdWzJd ID0gbnA7CisjZW5kaWYgLyogRENNREJVRiAqLworCisgICAgLyogTm93IHRoZSBidWZmZXJzIHRo ZW1zZWx2ZXMuICBBIGxvdCBvZiByZXBpdGl0aW91cyBjb2RlLi4uICovCisKKyNpZmRlZiBEQ01E QlVGCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oY21kYnVmKSsxKTsJLyogMDogQ29tbWFu ZCBidWZmZXIgKi8KKyAgICBpZiAoY3ApIHN0cmNweShjcCxjbWRidWYpOworICAgIGNtcFtjbWRk ZXBdLmJbMF0gPSBjcDsKKyAgICBpZiAoY3AgPT0gTlVMTCkgcmV0dXJuKC0xKTsKKworICAgIGNw ID0gbWFsbG9jKChpbnQpc3RybGVuKHNhdmJ1ZikrMSk7CS8qIDE6IFNhdmUgYnVmZmVyICovCisg ICAgaWYgKGNwKSBzdHJjcHkoY3Asc2F2YnVmKTsKKyAgICBjbXBbY21kZGVwXS5iWzFdID0gY3A7 CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjbXBbY21kZGVwXS5iWzJd ID0gTlVMTDsKKworICAgIGNwID0gbWFsbG9jKChpbnQpc3RybGVuKGF0bWJ1ZikrMSk7CS8qIDM6 IEF0b20gYnVmZmVyICovCisgICAgaWYgKGNwKSBzdHJjcHkoY3AsYXRtYnVmKTsKKyAgICBjbXBb Y21kZGVwXS5iWzNdID0gY3A7CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAg ICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihhdHhidWYpKzEpOwkvKiA0OiBFeHBhbnNpb24gYnVm ZmVyICovCisgICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR4YnVmKTsKKyAgICBjbXBbY21kZGVwXS5i WzRdID0gY3A7CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1h bGxvYygoaW50KXN0cmxlbihhdHlidWYpKzEpOwkvKiA1OiBBdG9tIGJ1ZmZlciBjb3B5ICovCisg ICAgaWYgKGNwKSBzdHJjcHkoY3AsYXR5YnVmKTsKKyAgICBjbXBbY21kZGVwXS5iWzVdID0gY3A7 CisgICAgaWYgKGNwID09IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1hbGxvYygoaW50 KXN0cmxlbihmaWxidWYpKzEpOwkvKiA2OiBGaWxlIG5hbWUgYnVmZmVyICovCisgICAgaWYgKGNw KSBzdHJjcHkoY3AsZmlsYnVmKTsKKyAgICBjbXBbY21kZGVwXS5iWzZdID0gY3A7CisgICAgaWYg KGNwID09IE5VTEwpIHJldHVybigtMSk7CisjZWxzZQorICAgIGNwID0gbWFsbG9jKChpbnQpc3Ry bGVuKGNtZGJ1ZikrMSk7CS8qIDA6IENvbW1hbmQgYnVmZmVyICovCisgICAgaWYgKGNwKSBzdHJj cHkoY3AsY21kYnVmKTsKKyAgICBjbXBfYltjbWRkZXBdWzBdID0gY3A7CisgICAgaWYgKGNwID09 IE5VTEwpIHJldHVybigtMSk7CisKKyAgICBjcCA9IG1hbGxvYygoaW50KXN0cmxlbihzYXZidWYp KzEpOwkvKiAxOiBTYXZlIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLHNhdmJ1Zik7 CisgICAgY21wX2JbY21kZGVwXVsxXSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4o LTEpOworCisgICAgY21wX2JbY21kZGVwXVsyXSA9IE5VTEw7CisKKyAgICBjcCA9IG1hbGxvYygo aW50KXN0cmxlbihhdG1idWYpKzEpOwkvKiAzOiBBdG9tIGJ1ZmZlciAqLworICAgIGlmIChjcCkg c3RyY3B5KGNwLGF0bWJ1Zik7CisgICAgY21wX2JbY21kZGVwXVszXSA9IGNwOworICAgIGlmIChj cCA9PSBOVUxMKSByZXR1cm4oLTEpOworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXR4 YnVmKSsxKTsJLyogNDogRXhwYW5zaW9uIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNw LGF0eGJ1Zik7CisgICAgY21wX2JbY21kZGVwXVs0XSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxM KSByZXR1cm4oLTEpOworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oYXR5YnVmKSsxKTsJ LyogNTogQXRvbSBidWZmZXIgY29weSAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLGF0eWJ1Zik7 CisgICAgY21wX2JbY21kZGVwXVs1XSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4o LTEpOworCisgICAgY3AgPSBtYWxsb2MoKGludClzdHJsZW4oZmlsYnVmKSsxKTsJLyogNjogRmls ZSBuYW1lIGJ1ZmZlciAqLworICAgIGlmIChjcCkgc3RyY3B5KGNwLGZpbGJ1Zik7CisgICAgY21w X2JbY21kZGVwXVs2XSA9IGNwOworICAgIGlmIChjcCA9PSBOVUxMKSByZXR1cm4oLTEpOworI2Vu ZGlmIC8qIERDTURCVUYgKi8KKworICAgIGNtaW5pKGRweCk7CQkJCS8qIEluaXRpemUgdGhlIGNv bW1hbmQgcGFyc2VyICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NtcG9wKCkgewkJCQkv KiBSZXN0b3JlIHRoZSBjb21tYW5kIGVudmlyb25tZW50ICovCisgICAgaWYgKGNtZGRlcCA8IDAp IHsKKwlkZWJ1ZyhGMTAwLCImY21wb3AgY2FsbGVkIGZyb20gdG9wIGxldmVsIiwiIiwwKTsKKwly ZXR1cm4oLTEpOwkJCS8qIERvbid0IHBvcCB0b28gbXVjaCEgKi8KKyAgICB9CisjaWZkZWYgRENN REJVRgorICAgIGNtZmxncyA9IGNtcFtjbWRkZXBdLmlbMF07CQkvKiBGaXJzdCBkbyB0aGUgZ2xv YmFsIGludHMgKi8KKyAgICBjbWZzYXYgPSBjbXBbY21kZGVwXS5pWzFdOworICAgIGF0eG4gPSBj bXBbY21kZGVwXS5pWzJdOworICAgIHVuZ3cgPSBjbXBbY21kZGVwXS5pWzNdOworCisgICAgYnAg PSBjbXBbY21kZGVwXS5jWzBdOwkJLyogVGhlbiB0aGUgZ2xvYmFsIHBvaW50ZXJzICovCisgICAg cHAgPSBjbXBbY21kZGVwXS5jWzFdOworICAgIG5wID0gY21wW2NtZGRlcF0uY1syXTsKKyNlbHNl CisgICAgY21mbGdzID0gY21wX2lbY21kZGVwXVswXTsJCS8qIEZpcnN0IGRvIHRoZSBnbG9iYWwg aW50cyAqLworICAgIGNtZnNhdiA9IGNtcF9pW2NtZGRlcF1bMV07CisgICAgYXR4biA9IGNtcF9p W2NtZGRlcF1bMl07CisgICAgdW5ndyA9IGNtcF9pW2NtZGRlcF1bM107CisKKyAgICBicCA9IGNt cF9jW2NtZGRlcF1bMF07CQkvKiBUaGVuIHRoZSBnbG9iYWwgcG9pbnRlcnMgKi8KKyAgICBwcCA9 IGNtcF9jW2NtZGRlcF1bMV07CisgICAgbnAgPSBjbXBfY1tjbWRkZXBdWzJdOworI2VuZGlmIC8q IERDTURCVUYgKi8KKworICAgIC8qIE5vdyB0aGUgYnVmZmVycyB0aGVtc2VsdmVzLiAqLworICAg IC8qIE5vdGU6IHN0cm5jcHkoKSwgbm90IGNrc3RybmNweSgpIC0tIEhlcmUgd2UgV0FOVCB0aGUg TlVMIHBhZGRpbmcuLi4gKi8KKworI2lmZGVmIERDTURCVUYKKyAgICBpZiAoY21wW2NtZGRlcF0u YlswXSkgeworCisJc3RybmNweShjbWRidWYsY21wW2NtZGRlcF0uYlswXSxDTURCTCk7IC8qIDA6 IENvbW1hbmQgYnVmZmVyICovCisJZnJlZShjbXBbY21kZGVwXS5iWzBdKTsKKwljbXBbY21kZGVw XS5iWzBdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcFtjbWRkZXBdLmJbMV0pIHsKKwlzdHJu Y3B5KHNhdmJ1ZixjbXBbY21kZGVwXS5iWzFdLENNREJMKTsgLyogMTogU2F2ZSBidWZmZXIgKi8K KwlmcmVlKGNtcFtjbWRkZXBdLmJbMV0pOworCWNtcFtjbWRkZXBdLmJbMV0gPSBOVUxMOworICAg IH0KKyAgICBpZiAoY21wW2NtZGRlcF0uYlszXSkgeworCXN0cm5jcHkoYXRtYnVmLGNtcFtjbWRk ZXBdLmJbM10sQVRNQkwpOyAvKiAzOiBBdG9taWMgYnVmZmVyISAqLworCWZyZWUoY21wW2NtZGRl cF0uYlszXSk7CisJY21wW2NtZGRlcF0uYlszXSA9IE5VTEw7CisgICAgfQorICAgIGlmIChjbXBb Y21kZGVwXS5iWzRdKSB7CisJc3RybmNweShhdHhidWYsY21wW2NtZGRlcF0uYls0XSxBVE1CTCk7 IC8qIDQ6IGVYcGFuc2lvbiBidWZmZXIgKi8KKwlmcmVlKGNtcFtjbWRkZXBdLmJbNF0pOworCWNt cFtjbWRkZXBdLmJbNF0gPSBOVUxMOworICAgIH0KKyAgICBpZiAoY21wW2NtZGRlcF0uYls1XSkg eworCXN0cm5jcHkoYXR5YnVmLGNtcFtjbWRkZXBdLmJbNV0sQVRNQkwpOyAvKiA1OiBBdG9tIGJ1 ZmZlciBjb3BZICovCisJZnJlZShjbXBbY21kZGVwXS5iWzVdKTsKKwljbXBbY21kZGVwXS5iWzVd ID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcFtjbWRkZXBdLmJbNl0pIHsKKwlzdHJuY3B5KGZp bGJ1ZixjbXBbY21kZGVwXS5iWzZdLEFUTUJMKTsgLyogNjogRmlsZW5hbWUgYnVmZmVyICovCisJ ZnJlZShjbXBbY21kZGVwXS5iWzZdKTsKKwljbXBbY21kZGVwXS5iWzZdID0gTlVMTDsKKyAgICB9 CisjZWxzZQorICAgIGlmIChjbXBfYltjbWRkZXBdWzBdKSB7CisJc3RybmNweShjbWRidWYsY21w X2JbY21kZGVwXVswXSxDTURCTCk7IC8qIDA6IENvbW1hbmQgYnVmZmVyICovCisJZnJlZShjbXBf YltjbWRkZXBdWzBdKTsKKwljbXBfYltjbWRkZXBdWzBdID0gTlVMTDsKKyAgICB9CisgICAgaWYg KGNtcF9iW2NtZGRlcF1bMV0pIHsKKwlzdHJuY3B5KHNhdmJ1ZixjbXBfYltjbWRkZXBdWzFdLENN REJMKTsgLyogMTogU2F2ZSBidWZmZXIgKi8KKwlmcmVlKGNtcF9iW2NtZGRlcF1bMV0pOworCWNt cF9iW2NtZGRlcF1bMV0gPSBOVUxMOworICAgIH0KKyAgICBpZiAoY21wX2JbY21kZGVwXVszXSkg eworCXN0cm5jcHkoYXRtYnVmLGNtcF9iW2NtZGRlcF1bM10sQVRNQkwpOyAvKiAzOiBBdG9taWMg YnVmZmVyISAqLworCWZyZWUoY21wX2JbY21kZGVwXVszXSk7CisJY21wX2JbY21kZGVwXVszXSA9 IE5VTEw7CisgICAgfQorICAgIGlmIChjbXBfYltjbWRkZXBdWzRdKSB7CisJc3RybmNweShhdHhi dWYsY21wX2JbY21kZGVwXVs0XSxBVE1CTCk7IC8qIDQ6IGVYcGFuc2lvbiBidWZmZXIgKi8KKwlm cmVlKGNtcF9iW2NtZGRlcF1bNF0pOworCWNtcF9iW2NtZGRlcF1bNF0gPSBOVUxMOworICAgIH0K KyAgICBpZiAoY21wX2JbY21kZGVwXVs1XSkgeworCXN0cm5jcHkoYXR5YnVmLGNtcF9iW2NtZGRl cF1bNV0sQVRNQkwpOyAvKiA1OiBBdG9tIGJ1ZmZlciBjb3BZICovCisJZnJlZShjbXBfYltjbWRk ZXBdWzVdKTsKKwljbXBfYltjbWRkZXBdWzVdID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcF9i W2NtZGRlcF1bNl0pIHsKKwlzdHJuY3B5KGZpbGJ1ZixjbXBfYltjbWRkZXBdWzZdLEFUTUJMKTsg LyogNjogRmlsZW5hbWUgYnVmZmVyICovCisJZnJlZShjbXBfYltjbWRkZXBdWzZdKTsKKwljbXBf YltjbWRkZXBdWzZdID0gTlVMTDsKKyAgICB9CisjZW5kaWYgLyogRENNREJVRiAqLworCisgICAg Y21kZGVwLS07CQkJCS8qIFJpc2UsIHJpc2UgKi8KKyAgICBkZWJ1ZyhGMTAxLCImY21wb3AgdG8g ZGVwdGgiLCIiLGNtZGRlcCk7CisgICAgcmV0dXJuKGNtZGRlcCk7Cit9CisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmZGVmIENPTU1FTlQKK1ZPSUQJCQkJCS8qIE5vdCB1c2VkICovCitzdHJpcHEo cykgY2hhciAqczsgeyAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gdG8gc3RyaXAgJ1wn IHF1b3RlcyAqLworICAgIGNoYXIgKnQ7CisgICAgd2hpbGUgKCpzKSB7CisgICAgICAgIGlmICgq cyA9PSBDTURRKSB7CisgICAgICAgICAgICBmb3IgKHQgPSBzOyAqdCAhPSAnXDAnOyB0KyspICp0 ID0gKih0KzEpOworICAgICAgICB9CisgICAgICAgIHMrKzsKKyAgICB9Cit9CisjZW5kaWYgLyog Q09NTUVOVCAqLworCisvKiBDb252ZXJ0IHRhYnMgdG8gc3BhY2VzLCBvbmUgZm9yIG9uZSAqLwor Vk9JRAordW50YWIocykgY2hhciAqczsgeworICAgIHdoaWxlICgqcykgeworCWlmICgqcyA9PSBI VCkgKnMgPSBTUDsKKwlzKys7CisgICAgfQorfQorCisvKiAgQyBNIE4gVSBNICAtLSAgUGFyc2Ug YSBudW1iZXIgaW4gdGhlIGluZGljYXRlZCByYWRpeCAgKi8KKworLyoKKyBUaGUgcmFkaXggaXMg c3BlY2lmaWVkIGluIHRoZSBhcmcgbGlzdC4KKyBQYXJzZXMgdW5xdW90ZWQgbnVtZXJpYyBzdHJp bmdzIGluIHRoZSBnaXZlbiByYWRpeC4KKyBQYXJzZXMgYmFja3NsYXNoLXF1b3RlZCBudW1iZXJz IGluIHRoZSByYWRpeCBpbmRpY2F0ZWQgYnkgdGhlIHF1b3RlOgorICAgXG5ubiA9IFxkbm5uID0g ZGVjaW1hbCwgXG9ubm4gPSBvY3RhbCwgXHhubiA9IEhleGFkZWNpbWFsLgorIElmIHRoZXNlIGZh aWwsIHRoZW4gaWYgYSBwcmVwcm9jZXNzaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLCB0aGF0IGlz IGFwcGxpZWQKKyBhbmQgdGhlbiBhIHNlY29uZCBhdHRlbXB0IGlzIG1hZGUgdG8gcGFyc2UgYW4g dW5xdW90ZWQgZGVjaW1hbCBzdHJpbmcuCisgQW5kIGlmIHRoYXQgZmFpbHMsIHRoZSBwcmVwcm9j ZXNzZWQgc3RyaW5nIGlzIHBhc3NlZCB0byBhbiBhcml0aG1ldGljCisgZXhwcmVzc2lvbiBldmFs dWF0b3IuCisKKyBSZXR1cm5zOgorICAgLTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3aGVuIHJlcXVp cmVkLAorICAgLTIgaWYgdXNlciB0eXBlZCBhbiBpbGxlZ2FsIG51bWJlciwKKyAgIC0xIGlmIHJl cGFyc2UgbmVlZGVkLAorICAgIDAgb3RoZXJ3aXNlLCB3aXRoIGFyZ3VtZW50IG4gc2V0IHRvIHRo ZSBudW1iZXIgdGhhdCB3YXMgcGFyc2VkCisqLworLyogVGhpcyBpcyB0aGUgdHJhZGl0aW9uYWwg Y21udW0oKSB0aGF0IGdldHMgYW4gaW50ICovCitpbnQKK2NtbnVtKHhobHAseGRlZixyYWRpeCxu LGYpIGNoYXIgKnhobHAsICp4ZGVmOyBpbnQgcmFkaXgsICpuOyB4eF9zdHJwIGY7IHsKKyAgICBD S19PRkZfVCB6ID0gKENLX09GRl9UKTAsIGNoZWNrOworICAgIGludCB4OworICAgIHggPSBjbW51 bXcoeGhscCx4ZGVmLHJhZGl4LCZ6LGYpOworICAgICpuID0gejsKKyAgICBjaGVjayA9ICpuOwor ICAgIGlmIChjaGVjayAhPSB6KSB7CisJcHJpbnRmKCI/TWFnbml0dWRlIG9mIHJlc3VsdCB0b28g bGFyZ2UgZm9yIGludGVnZXIgLSAlc1xuIixja2ZzdG9hKHopKTsKKwlyZXR1cm4oLTkpOworICAg IH0KKyAgICByZXR1cm4oeCk7Cit9CisKKy8qCisgIFRoaXMgaXMgdGhlIG5ldyBjbW51bSgpIHRo YXQgZ2V0cyBhICJ3aWRlIiByZXN1bHQsIHdoYXRldmVyIENLX09GRl9UCisgIGlzIGRlZmluZWQg dG8gYmUsIG5vcm1hbGx5IDMyIG9yIDY0IGJpdHMsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0u CisgIGZkYywgMjQgRGVjIDIwMDUuCisqLworaW50CitjbW51bXcoeGhscCx4ZGVmLHJhZGl4LG4s ZikKKyAgICBjaGFyICp4aGxwLCAqeGRlZjsgaW50IHJhZGl4OyBDS19PRkZfVCAqbjsgeHhfc3Ry cCBmOyB7CisgICAgaW50IHg7IGNoYXIgKnMsICp6cCwgKnpxOworI2lmZGVmIENPTU1FTlQKKyAg ICBjaGFyIGxicmFjZSwgcmJyYWNlOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmICgh eGhscCkgeGhscCA9ICIiOworICAgIGlmICgheGRlZikgeGRlZiA9ICIiOworCisjaWZkZWYgQ09N TUVOVAorICAgIGlmIChjbWZsZGZsZ3MgJiAxKSB7CisJbGJyYWNlID0gJygnOworCXJicmFjZSA9 ICcpJzsKKyAgICB9IGVsc2UgeworCWxicmFjZSA9ICd7JzsKKwlyYnJhY2UgPSAnfSc7CisgICAg fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmIChyYWRpeCAhPSAxMCAmJiByYWRpeCAh PSA4KSB7CS8qIEp1c3QgZG8gYmFzZXMgOCBhbmQgMTAgKi8KKyAgICAgICAgcHJpbnRmKCJjbW51 bTogaWxsZWdhbCByYWRpeCAtICVkXG4iLHJhZGl4KTsKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAg ICB9IC8qIEVhc3kgdG8gYWRkIG90aGVycyBidXQgdGhlcmUgaGFzIG5ldmVyIGJlZW4gYSBuZWVk IGZvciBpdC4gKi8KKyAgICB4ID0gY21mbGQoeGhscCx4ZGVmLCZzLCh4eF9zdHJwKTApOworICAg IGRlYnVnKEYxMDEsImNtbnVtOiBjbWZsZCIsIiIseCk7CisgICAgaWYgKHggPCAwKSByZXR1cm4o eCk7CQkvKiBQYXJzZSBhIGZpZWxkICovCisgICAgenAgPSBhdG1idWY7CisvKgorICBFZGl0IDE5 MiAtIEFsbG93IGFueSBudW1iZXIgZmllbGQgdG8gYmUgYnJhY2VkLiAgVGhpcyBsZXRzIHVzIGlu Y2x1ZGUKKyAgc3BhY2VzIGluIGV4cHJlc3Npb25zLCBidXQgcGVyaGFwcyBtb3JlIGltcG9ydGFu dCBsZXRzIHVzIGhhdmUgdXNlci1kZWZpbmVkCisgIGZ1bmN0aW9ucyBpbiBudW1lcmljIGZpZWxk cy4KKyovCisgICAgenAgPSBicnN0cmlwKHpwKTsJCQkvKiBTdHJpcCBicmFjZXMgKi8KKyAgICBp ZiAoY21mbGRmbGdzICYgMSAmJiAqenAgPT0gJygnKSB7CS8qIFBhcmVucyB0b28uLiAqLworCXgg PSAoaW50KSBzdHJsZW4oYXRtYnVmKTsKKwlpZiAoeCA+IDApIHsKKwkgICAgaWYgKCooYXRtYnVm K3gtMSkgPT0gJyknKSB7CisJCSooYXRtYnVmK3gtMSkgPSBOVUw7CisJCXpwKys7CisJICAgIH0K Kwl9CisgICAgfQorICAgIGlmIChjaGtudW0oenApKSB7CQkJLyogQ2hlY2sgZm9yIG51bWJlciAq LworCWlmIChyYWRpeCA9PSA4KSB7CQkvKiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICov CisJICAgIHpwID0gY2tyYWRpeCh6cCw4LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCisJ ICAgIGlmICghenApIHJldHVybigtMik7CisJICAgIGlmICghc3RyY21wKHpwLCItMSIpKSByZXR1 cm4oLTIpOworCX0KKwllcnJubyA9IDA7CQkJLyogR290IG9uZSwgd2UncmUgZG9uZS4gKi8KKyAg ICAgICAgKm4gPSBja2F0b2ZzKHpwKTsKKwlpZiAoZXJybm8pIHsKKwkgICAgcGVycm9yKHpwKTsK KwkgICAgcmV0dXJuKC05KTsKKwl9CisJZGVidWcoRjEwMSwiY21udW0gMXN0IGNoa251bSBvayIs IiIsKm4pOworICAgICAgICByZXR1cm4oMCk7CisgICAgfSBlbHNlIGlmICgoeCA9IHh4ZXNjKCZ6 cCkpID4gLTEpIHsJLyogQ2hlY2sgZm9yIGJhY2tzbGFzaCBlc2NhcGUgKi8KKworI2lmbmRlZiBP UzIKKwkqbiA9IHg7CisjZWxzZQorCSpuID0gd2lkZXJlc3VsdDsKKyNlbmRpZiAvKiBPUzIgKi8K KworCWRlYnVnKEYxMDEsImNtbnVtIHh4ZXNjIG9rIiwiIiwqbik7CisJcmV0dXJuKCp6cCA/IC0y IDogMCk7CisgICAgfSBlbHNlIGlmIChmKSB7CQkJLyogSWYgY29udmVyc2lvbiBmdW5jdGlvbiBn aXZlbiAqLworCXpxID0gYXR4YnVmOwkJCS8qIFRyeSB0aGF0ICovCisJYXR4biA9IENNREJMOwor CWlmICgoKmYpKHpwLCZ6cSwmYXR4bikgPCAwKQkvKiBDb252ZXJ0ICovCisJICByZXR1cm4oLTIp OworCXpwID0gYXR4YnVmOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJjbW51bSB6cCAxIix6cCww KTsKKyAgICBpZiAoISp6cCkgenAgPSB4ZGVmOwkJLyogUmVzdWx0IGVtcHR5LCBzdWJzdGl0dXRl IGRlZmF1bHQgKi8KKyAgICBkZWJ1ZyhGMTEwLCJjbW51bSB6cCAyIix6cCwwKTsKKyAgICBpZiAo Y2hrbnVtKHpwKSkgewkJCS8qIENoZWNrIGFnYWluIGZvciBkZWNpbWFsIG51bWJlciAqLworCWlm IChyYWRpeCA9PSA4KSB7CQkvKiBJZiBpdCdzIHN1cHBvc2VkIHRvIGJlIG9jdGFsICovCisJICAg IHpwID0gY2tyYWRpeCh6cCw4LDEwKTsJLyogY29udmVydCB0byBkZWNpbWFsICovCisJICAgIGlm ICghenApIHJldHVybigtMik7CisJICAgIGlmICghc3RyY21wKHpwLCItMSIpKSByZXR1cm4oLTIp OworCX0KKwllcnJubyA9IDA7CisgICAgICAgICpuID0gY2thdG9mcyh6cCk7CisJaWYgKGVycm5v KSB7CisJICAgIHBlcnJvcih6cCk7CisJICAgIHJldHVybigtOSk7CisJfQorCWRlYnVnKEYxMDEs ImNtbnVtIDJuZCBjaGtudW0gb2siLCIiLCpuKTsKKyAgICAgICAgcmV0dXJuKDApOworI2lmbmRl ZiBOT1NQTAorICAgIH0gIGVsc2UgaWYgKCh4ID0geHhlc2MoJnpwKSkgPiAtMSkgeyAvKiBDaGVj ayBmb3IgYmFja3NsYXNoIGVzY2FwZSAqLworI2lmbmRlZiBPUzIKKwkqbiA9IHg7CisjZWxzZQor CSpuID0gd2lkZXJlc3VsdDsKKyNlbmRpZiAvKiBPUzIgKi8KKwlkZWJ1ZyhGMTAxLCJjbW51bSB4 eGVzYyAyIG9rIiwiIiwqbik7CisJcmV0dXJuKCp6cCA/IC0yIDogMCk7CisgICAgfSBlbHNlIGlm IChmKSB7CQkJLyogTm90IG51bWVyaWMsIG1heWJlIGFuIGV4cHJlc3Npb24gKi8KKwljaGFyICog cDsKKwlwID0gZXZhbGEoenApOworCWlmIChjaGtudW0ocCkpIHsKKwkgICAgaWYgKHJhZGl4ID09 IDgpIHsJCS8qIElmIGl0J3Mgc3VwcG9zZWQgdG8gYmUgb2N0YWwgKi8KKwkJenAgPSBja3JhZGl4 KHpwLDgsMTApOwkvKiBjb252ZXJ0IHRvIGRlY2ltYWwgKi8KKwkJaWYgKCF6cCkgcmV0dXJuKC0y KTsKKwkJaWYgKCFzdHJjbXAoenAsIi0xIikpIHJldHVybigtMik7CisJICAgIH0KKwkgICAgZXJy bm8gPSAwOworCSAgICAqbiA9IGNrYXRvZnMocCk7CisJICAgIGlmIChlcnJubykgeworCQlwZXJy b3IocCk7CisJCXJldHVybigtOSk7CisJICAgIH0KKwkgICAgZGVidWcoRjEwMSwiY21udW0gZXhw IGV2YWwgb2siLCIiLCpuKTsKKwkgICAgcmV0dXJuKDApOworCX0gZWxzZSByZXR1cm4oLTIpOwor I2VuZGlmIC8qIE5PU1BMICovCisgICAgfSBlbHNlIHsJCQkJLyogTm90IG51bWVyaWMgKi8KKwly ZXR1cm4oLTIpOworICAgIH0KK30KKworI2lmZGVmIENLQ0hBTk5FTElPCitleHRlcm4gaW50IHpf ZXJyb3I7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworLyogIEMgTSBPIEYgSSAgLS0gIFBh cnNlIHRoZSBuYW1lIG9mIGFuIG91dHB1dCBmaWxlICAqLworCisvKgorIERlcGVuZHMgb24gdGhl IGV4dGVybmFsIGZ1bmN0aW9uIHpjaGtvKCk7IGlmIHpjaGtvKCkgbm90IGF2YWlsYWJsZSwgdXNl CisgY21mbGQoKSB0byBwYXJzZSBvdXRwdXQgZmlsZSBuYW1lcy4KKworIFJldHVybnM6CisgICAt OSBsaWtlIC0yLCBleGNlcHQgbWVzc2FnZSBhbHJlYWR5IHByaW50ZWQsCisgICAtMyBpZiBubyBp bnB1dCBwcmVzZW50IHdoZW4gcmVxdWlyZWQsCisgICAtMiBpZiBwZXJtaXNzaW9uIHdvdWxkIGJl IGRlbmllZCB0byBjcmVhdGUgdGhlIGZpbGUsCisgICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKKyAg ICAwIG9yIDEgaWYgZmlsZSBjYW4gYmUgY3JlYXRlZCwgd2l0aCB4cCBwb2ludGluZyB0byBuYW1l LgorICAgIDIgaWYgZ2l2ZW4gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LgorKi8K K2ludAorY21vZmkoeGhscCx4ZGVmLHhwLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAqKnhwOyB4eF9z dHJwIGY7IHsKKyAgICBpbnQgeDsgY2hhciAqcywgKnpxOworI2lmZGVmIERPQ0hLVkFSCisgICAg aW50IHRyaWVzOworI2VuZGlmIC8qIERPQ0hLVkFSICovCisjaWZkZWYgRFRJTERFCisgICAgY2hh ciAqZGlycDsKKyNlbmRpZiAvKiBEVElMREUgKi8KKworICAgIGNtZmxkZmxncyA9IDA7CisKKyAg ICBpZiAoIXhobHApIHhobHAgPSAiIjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKworICAg IGlmICgqeGhscCA9PSBOVUwpIHhobHAgPSAiT3V0cHV0IGZpbGUiOworICAgICp4cCA9ICIiOwor CisgICAgZGVidWcoRjExMCwiY21vZmkgeGRlZiIseGRlZiwwKTsKKyAgICB4ID0gY21mbGQoeGhs cCx4ZGVmLCZzLCh4eF9zdHJwKTApOworICAgIGRlYnVnKEYxMTEsImNtb2ZpIGNtZmxkIHJldHVy bnMiLHMseCk7CisgICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKHgpOworCisgICAgcyA9IGJy c3RyaXAocyk7CQkJLyogU3RyaXAgZW5jbG9zaW5nIGJyYWNlcyAqLworICAgIGRlYnVnKEYxMTAs ImNtb2ZpIDEuNSIscywwKTsKKworI2lmZGVmIERPQ0hLVkFSCisgICAgdHJpZXMgPSAwOworICAg IHsKKwljaGFyICpwID0gczsKKyAgICAvKgorICAgICAgVGhpcyBpcyByZWFsbHkgdWdseS4gIElm IHdlIHNraXAgY29udmVyc2lvbiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLAorICAgICAgdGhlbiB2 YXJpYWJsZSBuYW1lcyBsaWtlIFwlYSB3aWxsIGJlIHVzZWQgYXMgZmlsZW5hbWVzIChlLmcuIGNy ZWF0aW5nCisgICAgICBhIGZpbGUgY2FsbGVkICVBIGluIHRoZSByb290IGRpcmVjdG9yeSkuICBJ ZiB3ZSBET04nVCBza2lwIGNvbnZlcnNpb24KKyAgICAgIHRoZSBmaXJzdCB0aW1lIHRocm91Z2gs IHRoZW4gc2luZ2xlIGJhY2tzbGFzaGVzIHVzZWQgYXMgZGlyZWN0b3J5CisgICAgICBzZXBhcmF0 b3JzIGluIGZpbGVuYW1lcyB3aWxsIGJlIG1pc2ludGVycHJldGVkIGFzIHZhcmlhYmxlIGxlYWQt aW5zLgorICAgICAgU28gd2UgcHJlc2NhbiB0byBzZWUgaWYgaXQgaGFzIGFueSB2YXJpYWJsZSBy ZWZlcmVuY2VzLiAgQnV0IHRoaXMKKyAgICAgIG1vZHVsZSBpcyBub3Qgc3VwcG9zZWQgdG8ga25v dyBhbnl0aGluZyBhYm91dCB2YXJpYWJsZXMsIGZ1bmN0aW9ucywKKyAgICAgIGV0Yywgc28gdGhp cyBjb2RlIGRvZXMgbm90IHJlYWxseSBiZWxvbmcgaGVyZSwgYnV0IHJhdGhlciBpdCBzaG91bGQK KyAgICAgIGJlIGF0IHRoZSBzYW1lIGxldmVsIGFzIHp6c3RyaW5nKCkuCisgICAgKi8KKy8qCisg IEhtbW0sIHRoaXMgbG9va3MgYSBsb3QgbGlrZSBjaGt2YXIoKSBleGNlcHQgaXQgdGhhdCBpbmNs dWRlcyBcbm5uIG51bWJlcgorICBlc2NhcGVzLiAgQnV0IHdoeT8gIFRoaXMgbWFrZXMgY29tbWFu ZHMgbGlrZSAibWtkaXIgYzpcMTIzIiBpbXBvc3NpYmxlLgorICBBbmQgaW4gZmFjdCwgIm1rZGly IGM6XDEyMyIgY3JlYXRlcyBhIGRpcmVjdG9yeSBjYWxsZWQgImM6eyIuICBXaGF0J3Mgd29yc2Us CisgIHJtZGlyKCksIHdoaWNoICpkb2VzKiBjYWxsIGNoa3ZhcigpLCB3b24ndCBsZXQgdXMgcmVt b3ZlIGl0LiAgU28gbGV0J3MgYXQKKyAgbGVhc3QgdHJ5IG1ha2luZyBjbW9maSgpIHN5bW1ldHJp Y2FsIHdpdGggY21pZmkoKS4uLgorKi8KKyNpZmRlZiBDT01NRU5UCisJY2hhciAqIHE7CisJd2hp bGUgKCAodHJpZXMgPT0gMCkgJiYgKHAgPSBzdHJjaHIocCxDTURRKSkgKSB7CisJICAgIHEgPSAq KHArMSk7CQkJLyogQ2hhciBhZnRlciBiYWNrc2xhc2ggKi8KKwkgICAgaWYgKCFxKQkJCS8qIE5v bmUsIHF1aXQgKi8KKwkgICAgICBicmVhazsKKwkgICAgaWYgKGlzdXBwZXIocSkpCQkvKiBJZiBs ZXR0ZXIsIGNvbnZlcnQgdG8gbG93ZXJjYXNlICovCisJICAgICAgcSA9IHRvbG93ZXIocSk7CisJ ICAgIGlmIChpc2RpZ2l0KHEpKSB7CQkvKiBJZiBpdCdzIGEgZGlnaXQsICovCisJCXRyaWVzID0g MTsJCS8qIGFzc3VtZSBpdCdzIGEgYmFja3NsYXNoIGNvZGUgICovCisJCWJyZWFrOworCSAgICB9 CisJICAgIHN3aXRjaCAocSkgeworCSAgICAgIGNhc2UgQ01EUToJCS8qIERvdWJsZSBiYWNrc2xh c2ggKi8KKwkJdHJpZXMgPSAxOwkJLyogc28gY2FsbCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiAq LworCQlicmVhazsKKwkgICAgICBjYXNlICclJzoJCQkvKiBWYXJpYWJsZSBvciBhcnJheSByZWZl cmVuY2UgKi8KKwkgICAgICBjYXNlICcmJzoJCQkvKiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGxldHRl ciAqLworCQlpZiAoaXNhbHBoYSgqKHArMikpIHx8ICgqKHArMikgPj0gJzAnICYmICoocCsyKSA8 PSAnOScpKQorCQkgIHRyaWVzID0gMTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAnbSc6IGNhc2Ug J3YnOiBjYXNlICckJzogLyogXG0oKSwgXHYoKSwgXCQoKSAqLworCQlpZiAoKihwKzIpID09ICco JykKKwkJICBpZiAoc3RyY2hyKHArMiwnKScpKQorCQkgICAgdHJpZXMgPSAxOworCQlicmVhazsK KwkgICAgICBjYXNlICdmJzoJCQkvKiBcRm5hbWUoKSAqLworCQlpZiAoc3RyY2hyKHArMiwnKCcp KQorCQkgIGlmIChzdHJjaHIocCsyLCcpJykpCisJCSAgICAgIHRyaWVzID0gMTsKKwkJYnJlYWs7 CisJICAgICAgY2FzZSAneyc6CQkJLyogXHsuLi59ICovCisJCWlmIChzdHJjaHIocCsyLCd9Jykp CisJCSAgdHJpZXMgPSAxOworCQlicmVhazsKKwkgICAgICBjYXNlICdkJzogY2FzZSAnbyc6CS8q IERlY2ltYWwgb3IgT2N0YWwgbnVtYmVyICovCisJICAgICAgICBpZiAoaXNkaWdpdCgqKHArMikp KQorCQkgIHRyaWVzID0gMTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAneCc6CQkJLyogSGV4IG51 bWJlciAqLworCQlpZiAoaXNkaWdpdCgqKHArMikpIHx8CisJCSAgICAoKCoocCsyKSA+PSAnYScg JiYgKihwKzIpIDw9ICdmJykgfHwKKwkJICAgICAoKCoocCsyKSA+PSAnQScgJiYgKihwKzIpIDw9 ICdGJykpKSkKKwkJICB0cmllcyA9IDE7CisJICAgICAgZGVmYXVsdDoKKwkJYnJlYWs7CisJICAg IH0KKwkgICAgcCsrOworCX0KKyNlbHNlCisjaWZuZGVmIE5PU1BMCisJaWYgKGYpIHsJCQkvKiBJ ZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwkgICAgY2hhciAqcyA9IHA7CQkv KiBTZWUgaWYgdGhlcmUgYXJlIGFueSB2YXJpYWJsZXMgaW4gKi8KKwkgICAgd2hpbGUgKCpzKSB7 CQkvKiB0aGUgc3RyaW5nIGFuZCBpZiBzbywgZXhwYW5kIHRoZW0gKi8KKwkJaWYgKGNoa3Zhcihz KSkgeworCQkgICAgdHJpZXMgPSAxOworCQkgICAgYnJlYWs7CisJCX0KKwkJcysrOworCSAgICB9 CisJfQorI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyNp ZmRlZiBPUzIKK29fYWdhaW46CisjZW5kaWYgLyogT1MyICovCisgICAgaWYgKHRyaWVzID09IDEp CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKyAgICBpZiAoZikgewkJCQkvKiBJZiBhIGNvbnZlcnNp b24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwl6cSA9IGF0eGJ1ZjsJCQkvKiBkbyB0aGUgY29udmVy c2lvbi4gKi8KKwlhdHhuID0gQ01EQkw7CisJaWYgKCh4ID0gKCpmKShzLCZ6cSwmYXR4bikpIDwg MCkKKwkgIHJldHVybigtMik7CisJcyA9IGF0eGJ1ZjsKKwlpZiAoISpzKQkJCS8qIFJlc3VsdCBl bXB0eSwgc3Vic3RpdHV0ZSBkZWZhdWx0ICovCisJICBzID0geGRlZjsKKyAgICB9CisgICAgZGVi dWcoRjExMSwiY21vZmkgMiIscyx4KTsKKworI2lmZGVmIERUSUxERQorICAgIGRpcnAgPSB0aWxk ZV9leHBhbmQocyk7CQkvKiBFeHBhbmQgdGlsZGUsIGlmIGFueSwgKi8KKyAgICBpZiAoKmRpcnAg IT0gJ1wwJykgewkJLyogcmlnaHQgaW4gdGhlIGF0b20gYnVmZmVyLiAqLworCWlmIChzZXRhdG0o ZGlycCwxKSA8IDApIHsKKwkgICAgcHJpbnRmKCI/TmFtZSB0b28gbG9uZ1xuIik7CisJICAgIHJl dHVybigtOSk7CisJfQorICAgIH0KKyAgICBzID0gYXRtYnVmOworICAgIGRlYnVnKEYxMTAsImNt b2ZpIDMiLHMsMCk7CisjZW5kaWYgLyogRFRJTERFICovCisKKyAgICBpZiAoaXN3aWxkKHMpKSB7 CisgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZCAtICVzXG4iLHMpOworICAg ICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJjbW9maSA0IixzLDApOwor CisjaWZkZWYgQ0tfVE1QRElSCisgICAgLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJlZCBmb3Ig dGhpcyEgKi8KKyAgICBpZiAoaXNkaXIocykpIHsKKwlkZWJ1ZyhGMTEwLCJjbW9maSA1OiBpcyBk aXJlY3RvcnkiLHMsMCk7CisgICAgICAgICp4cCA9IHM7CisJcmV0dXJuKDIpOworICAgIH0KKyNl bmRpZiAvKiBDS19UTVBESVIgKi8KKworICAgIGlmIChzdHJjbXAocyxDVFROQU0pICYmICh6Y2hr byhzKSA8IDApKSB7IC8qIE9LIHRvIHdyaXRlIHRvIGNvbnNvbGUgKi8KKyNpZmRlZiBDT01NRU5U CisjaWZkZWYgT1MyCisvKgorICBXZSBkb24ndCB0cnkgYWdhaW4gYmVjYXVzZSB3ZSBhbHJlYWR5 IHByZXNjYW5uZWQgdGhlIHN0cmluZyB0byBzZWUgaWYKKyAgaWYgaXQgY29udGFpbmVkIGFueXRo aW5nIHRoYXQgY291bGQgYmUgdXNlZCBieSB6enN0cmluZygpLgorKi8KKwlpZiAodHJpZXMrKyA8 IDEpCisJICBnb3RvIG9fYWdhaW47CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ09NTUVO VCAqLworLyoKKyAgTm90ZTogdGhlcmUgYXJlIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB6 Y2hrbygpIGNhbiBnaXZlIGEgZmFsc2UKKyAgcG9zaXRpdmUsIHNvIGRvbid0IHJlbHkgb24gaXQg dG8gY2F0Y2ggZXZlcnkgY29uY2VpdmFibGUgc2l0dWF0aW9uIGluCisgIHdoaWNoIHRoZSBnaXZl biBvdXRwdXQgZmlsZSBjYW4ndCBiZSBjcmVhdGVkLiAgSW4gb3RoZXIgd29yZHMsIHdlIHByaW50 CisgIGEgbWVzc2FnZSBhbmQgZmFpbCBoZXJlIGlmIHdlIEtOT1cgdGhlIGZpbGUgY2FuJ3QgYmUg Y3JlYXRlZC4gIElmIHdlCisgIHN1Y2NlZWQgYnV0IHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwg dGhlIGNvZGUgdGhhdCB0cmllcyB0byBvcGVuIHRoZSBmaWxlCisgIGhhcyB0byBwcmludCBhIG1l c3NhZ2UuCisqLworCWRlYnVnKEYxMTAsImNtb2ZpIDY6IGZhaWx1cmUiLHMsMCk7CisjaWZkZWYg Q0tST09UCisJaWYgKGNrcm9vdGVycikKKwkgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHMp OworCWVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKwkgIHByaW50ZigiP1dyaXRlIHBlcm1pc3Np b24gZGVuaWVkIC0gJXNcbiIscyk7CisjaWZkZWYgQ0tDSEFOTkVMSU8KKwl6X2Vycm9yID0gRlhf QUNDOworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisgICAgICAgIHJldHVybigtOSk7CisgICAg fSBlbHNlIHsKKwlkZWJ1ZyhGMTEwLCJjbW9maSA3OiBvayIscywwKTsKKyAgICAgICAgKnhwID0g czsKKyAgICAgICAgcmV0dXJuKHgpOworICAgIH0KK30KKworLyogIEMgTSBJIEYgSSAgLS0gIFBh cnNlIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUgICovCisKKy8qCisgVGhpcyBmdW5jdGlv biBkZXBlbmRzIG9uIHRoZSBleHRlcm5hbCBmdW5jdGlvbnM6CisgICB6Y2hraSgpICAtIENoZWNr IGlmIGlucHV0IGZpbGUgZXhpc3RzIGFuZCBpcyByZWFkYWJsZS4KKyAgIHp4cGFuZCgpIC0gRXhw YW5kIGEgd2lsZCBmaWxlIHNwZWNpZmljYXRpb24gaW50byBhIGxpc3QuCisgICB6bmV4dCgpICAt IFJldHVybiBuZXh0IGZpbGUgbmFtZSBmcm9tIGxpc3QuCisgSWYgdGhlc2UgZnVuY3Rpb25zIGFy ZW4ndCBhdmFpbGFibGUsIHRoZW4gdXNlIGNtZmxkKCkgdG8gcGFyc2UgZmlsZW5hbWVzLgorKi8K Ky8qCisgUmV0dXJucworICAgLTQgRU9GCisgICAtMyBpZiBubyBpbnB1dCBwcmVzZW50IHdoZW4g cmVxdWlyZWQsCisgICAtMiBpZiBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJs ZSwKKyAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkLAorICAgIDAgb3IgMSBvdGhlcndpc2UsIHdpdGg6 CisgICAgICAgIHhwIHBvaW50aW5nIHRvIG5hbWUsCisgICAgICAgIHdpbGQgPSAxIGlmIG5hbWUg Y29udGFpbnMgJyonIG9yICc/JywgMCBvdGhlcndpc2UuCisqLworCisjaWZkZWYgQ09NTUVOVCAv KiBUaGlzIGhvcnJpYmxlIGhhY2sgaGFzIGJlZW4gcmVwbGFjZWQgLSBzZWUgZnVydGhlciBkb3du ICovCisvKgorICAgQyBNIEkgTyBGIEkgIC0tICBQYXJzZSBhbiBpbnB1dCBmaWxlIE9SIHRoZSBu YW1lIG9mIGEgbm9uZXhpc3RlbnQgZmlsZS4KKworICAgVXNlIHRoaXMgd2hlbiBhbiBleGlzdGlu ZyBmaWxlIGlzIHdhbnRlZCAoc28gd2UgZ2V0IGhlbHAsIGNvbXBsZXRpb24sIGV0YyksCisgICBi dXQgaWYgYSBmaWxlIG9mIHRoZSBnaXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LCB0aGUgbmFtZSBv ZiBhIG5ldyBmaWxlIGlzCisgICBhY2NlcHRlZC4gIEZvciBleGFtcGxlLCB3aXRoIHRoZSBFRElU IGNvbW1hbmQgKGVkaXQgYW4gZXhpc3RpbmcgZmlsZSwgb3IKKyAgIGNyZWF0ZSBhIG5ldyBmaWxl KS4gIFJldHVybnMgLTkgaWYgZmlsZSBkb2VzIG5vdCBleGlzdC4gIEl0IGlzIHVwIHRvIHRoZQor ICAgY2FsbGVyIHRvIGNoZWNrIGNyZWF0YWJpbGl0eS4KKyovCitzdGF0aWMgaW50IG5vbXNnID0g MDsKK2ludAorY21pb2ZpKHhobHAseGRlZix4cCx3aWxkLGYpIGNoYXIgKnhobHAsICp4ZGVmLCAq KnhwOyBpbnQgKndpbGQ7IHh4X3N0cnAgZjsgeworICAgIGludCBtc2dzYXZlLCB4OworICAgIG1z Z3NhdmUgPSBub21zZzsKKyAgICBub21zZyA9IDE7CisgICAgeCA9IGNtaWZpMih4aGxwLHhkZWYs eHAsd2lsZCwwLE5VTEwsZiwwKTsKKyAgICBub21zZyA9IG1zZ3NhdmU7CisgICAgcmV0dXJuKHgp OworfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKworaW50CitjbWlmaSh4aGxwLHhkZWYseHAsd2ls ZCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgaW50ICp3aWxkOyB4eF9zdHJwIGY7IHsKKyAg ICByZXR1cm4oY21pZmkyKHhobHAseGRlZix4cCx3aWxkLDAsTlVMTCxmLDApKTsKK30KKy8qCisg IGNtaWZpcCgpIGlzIGNhbGxlZCB3aGVuIHdlIHdhbnQgdG8gc3VwcGx5IGEgcGF0aCBvciBwYXRo IGxpc3QgdG8gc2VhcmNoCisgIGluIGNhc2UgdGhlIGZpbGVuYW1lIHRoYXQgdGhlIHVzZXIgZ2l2 ZXMgaXMgKGEpIG5vdCBhYnNvbHV0ZSwgYW5kIChiKSBjYW4ndAorICBiZSBmb3VuZCBhcyBnaXZl bi4gIFRoZSBwYXRoIHN0cmluZyBjYW4gYmUgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZGlyZWN0b3J5 LAorICBvciBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgc2VwYXJhdGVkIGJ5IHRoZSBQQVRIU0VQIGNo YXJhY3RlciwgZGVmaW5lZCBpbgorICBja3VjbWQuaC4gIExvb2sgaW4gY2t1dXNyLmMgYW5kIGNr dXVzMy5jIGZvciBleGFtcGxlcyBvZiB1c2FnZS4KKyovCitpbnQKK2NtaWZpcCh4aGxwLHhkZWYs eHAsd2lsZCxkLHBhdGgsZikKKyAgICBjaGFyICp4aGxwLCp4ZGVmLCoqeHA7IGludCAqd2lsZCwg ZDsgY2hhciAqIHBhdGg7IHh4X3N0cnAgZjsgeworICAgIHJldHVybihjbWlmaTIoeGhscCx4ZGVm LHhwLHdpbGQsMCxwYXRoLGYsMCkpOworfQorCisvKiAgQyBNIEQgSSBSICAtLSAgUGFyc2UgYSBk aXJlY3RvcnkgbmFtZSAgKi8KKworLyoKKyBUaGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhlIGV4 dGVybmFsIGZ1bmN0aW9uczoKKyAgIGlzZGlyKHMpICAtIENoZWNrIGlmIHN0cmluZyBzIGlzIHRo ZSBuYW1lIG9mIGEgZGlyZWN0b3J5CisgICB6Y2hraShzKSAgLSBDaGVjayBpZiBpbnB1dCBmaWxl IHMgZXhpc3RzIGFuZCB3aGF0IHR5cGUgaXQgaXMuCisgSWYgdGhlc2UgZnVuY3Rpb25zIGFyZW4n dCBhdmFpbGFibGUsIHRoZW4gdXNlIGNtZmxkKCkgdG8gcGFyc2UgZGlyIG5hbWVzLgorCisgUmV0 dXJucworICAgLTkgRm9yIGFsbCBzb3J0cyBvZiByZWFzb25zLCBhZnRlciBwcmludGluZyBhcHBy b3ByaWF0ZSBlcnJvciBtZXNzYWdlLgorICAgLTQgRU9GCisgICAtMyBpZiBubyBpbnB1dCBwcmVz ZW50IHdoZW4gcmVxdWlyZWQsCisgICAtMiBpZiBvdXQgb2Ygc3BhY2Ugb3Igb3RoZXIgaW50ZXJu YWwgZXJyb3IsCisgICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKKyAgICAwIG9yIDEsIHdpdGggeHAg cG9pbnRpbmcgdG8gbmFtZSwgaWYgZGlyZWN0b3J5IHNwZWNpZmllZCwKKyovCitpbnQKK2NtZGly KHhobHAseGRlZix4cCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgeHhfc3RycCBmOyB7Cisg ICAgaW50IHdpbGQ7CisgICAgcmV0dXJuKGNtaWZpMih4aGxwLHhkZWYseHAsJndpbGQsMCxOVUxM LGYsMSkpOworfQorCisvKiBMaWtlIENNRElSIGJ1dCBpbmNsdWRlcyBQQVRIIHNlYXJjaCAqLwor CitpbnQKK2NtZGlycCh4aGxwLHhkZWYseHAscGF0aCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4 cDsgY2hhciAqIHBhdGg7IHh4X3N0cnAgZjsgeworICAgIGludCB3aWxkOworICAgIHJldHVybihj bWlmaTIoeGhscCx4ZGVmLHhwLCZ3aWxkLDAscGF0aCxmLDEpKTsKK30KKworLyoKKyAgY21pZmky KCkgaXMgdGhlIGJhc2UgZmlsZW5hbWUgcGFyc2VyIGNhbGxlZCBieSBjbWlmaSwgY21pZmlwLCBj bWRpciwgZXRjLgorICBVc2UgaXQgZGlyZWN0bHkgd2hlbiB5b3UgYWxzbyB3YW50IHRvIHBhcnNl IGEgZGlyZWN0b3J5IG9yIGRldmljZQorICBuYW1lIGFzIGFuIGlucHV0IGZpbGUsIGFzIGluIHRo ZSBESVJFQ1RPUlkgY29tbWFuZC4gIENhbGwgd2l0aDoKKyAgICB4aGxwICAtLSBoZWxwIG1lc3Nh Z2Ugb24gPworICAgIHhkZWYgIC0tIGRlZmF1bHQgcmVzcG9uc2UKKyAgICB4cCAgICAtLSBwb2lu dGVyIHRvIHJlc3VsdCAoaW4gb3VyIHNwYWNlLCBtdXN0IGJlIGNvcGllZCBmcm9tIGhlcmUpCisg ICAgd2lsZCAgLS0gZmxhZyBzZXQgdXBvbiByZXR1cm4gdG8gaW5kaWNhdGUgaWYgZmlsZXNwZWMg d2FzIHdpbGQKKyAgICBkICAgICAtLSAwIHRvIHBhcnNlIGZpbGVzLCAxIHRvIHBhcnNlIGZpbGVz IG9yIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAgQWRkIDIgdG8gaW5oaWJpdCBmb2xsb3dpbmcg b2Ygc3ltbGlua3MuCisgICAgcGF0aCAgLS0gc2VhcmNoIHBhdGggZm9yIGZpbGVzCisgICAgZiAg ICAgLS0gcG9pbnRlciB0byBzdHJpbmcgcHJvY2Vzc2luZyBmdW5jdGlvbiAoZS5nLiB0byBldmFs dWF0ZSB2YXJpYWJsZXMpCisgICAgZGlyZmxnIC0tIDEgdG8gcGFyc2UgKm9ubHkqIGRpcmVjdG9y aWVzLCAwIG90aGVyd2lzZQorKi8KK2ludAorY21pZmkyKHhobHAseGRlZix4cCx3aWxkLGQscGF0 aCxmLGRpcmZsZykKKyAgICBjaGFyICp4aGxwLCp4ZGVmLCoqeHA7IGludCAqd2lsZCwgZDsgY2hh ciAqIHBhdGg7IHh4X3N0cnAgZjsgaW50IGRpcmZsZzsgeworICAgIGV4dGVybiBpbnQgcmVjdXJz aXZlLCBkaXJhY3RpdmUsIGNkYWN0aXZlLCBkYmxxdW87CisgICAgaW50IGksIHgsIGl0c2FkaXIs IHhjLCBleHBhbmRlZCA9IDAsIG5maWxlcyA9IDAsIGNoaWxkcmVuID0gLTE7CisgICAgaW50IHFm bGFnID0gMDsKKyAgICBsb25nIHk7CisgICAgQ0tfT0ZGX1QgZmlsZXNpemU7CisgICAgY2hhciAq c3AgPSBOVUxMLCAqenEsICpucCA9IE5VTEw7CisgICAgY2hhciAqc3YgPSBOVUxMLCAqcCA9IE5V TEw7CisjaWZkZWYgRFRJTERFCisgICAgY2hhciAqZGlycDsKKyNlbmRpZiAvKiBEVElMREUgKi8K KworI2lmbmRlZiBOT1BBUlRJQUwKKyNpZm5kZWYgT1MyCisjaWZkZWYgT1NLCisgICAgLyogVGhp cyBsYXJnZSBhcnJheSBpcyBkeW5hbWljIGZvciBPUy05IC0tIHNob3VsZCBkbyBmb3Igb3RoZXJz IHRvby4uLiAqLworICAgIGV4dGVybiBjaGFyICoqbXRjaHM7CisjZWxzZQorI2lmZGVmIFVOSVgK KyAgICAvKiBPSywgZm9yIFVOSVggdG9vICovCisgICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKKyNl bHNlCisjaWZkZWYgVk1TCisgICAgZXh0ZXJuIGNoYXIgKiptdGNoczsKKyNlbHNlCisgICAgZXh0 ZXJuIGNoYXIgKm10Y2hzW107CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWCAqLwor I2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PUEFSVElBTCAq LworCisgICAgaWYgKCF4aGxwKSB4aGxwID0gIiI7CisgICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7 CisKKyNpZm5kZWYgTk9MQVNURklMRQorICAgIG1ha2VzdHIoJnRtcGxhc3RmaWxlLE5VTEwpOwor I2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KKyAgICBuenhvcHRzID0gMDsJCQkvKiB6eHBhbmQoKSBv cHRpb25zICovCisgICAgZGVidWcoRjEwMSwiY21pZmkgZCIsIiIsZCk7CisgICAgaWYgKGQgJiAy KSB7CQkJLyogZCAmIDIgbWVhbnMgZG9uJ3QgZm9sbG93IHN5bWxpbmtzICovCisJZCBePSAyOwor CW56eG9wdHMgPSBaWF9OT0xJTktTOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBuenhv cHRzIiwiIixuenhvcHRzKTsKKyAgICBjbWZsZGZsZ3MgPSAwOworICAgIGlmIChwYXRoKQorICAg ICAgaWYgKCEqcGF0aCkKKwlwYXRoID0gTlVMTDsKKyAgICBpZiAocGF0aCkgewkJCQkvKiBNYWtl IGEgY29weSB3ZSBjYW4gcG9rZSAqLworCXggPSBzdHJsZW4ocGF0aCk7CisJbnAgPSAoY2hhciAq KSBtYWxsb2MoeCArIDEpOworCWlmIChucCkgeworCSAgICBzdHJjcHkobnAsIHBhdGgpOworCSAg ICBwYXRoID0gc3AgPSBucDsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMTAsImNtaWZpMiBwYXRo IixwYXRoLDApOworCisgICAgY2tzdHJuY3B5KGNtZGVmYXVsdCx4ZGVmLENNREVGQVVMVCk7IC8q IENvcHkgZGVmYXVsdCAqLworICAgIHhkZWYgPSBjbWRlZmF1bHQ7CisKKyAgICBpbndvcmQgPSAw OwkJCQkvKiBJbml0aWFsaXplIGNvdW50cyAmIHBvaW50ZXJzICovCisgICAgY2MgPSAwOworICAg IHhjID0gMDsKKyAgICAqeHAgPSAiIjsJCQkJLyogUG9pbnRlciB0byByZXN1bHQgc3RyaW5nICov CisgICAgaWYgKCh4ID0gY21mbGdzKSAhPSAxKSB7ICAgICAgICAgICAgLyogQWxyZWFkeSBjb25m aXJtZWQ/ICovCisjaWZkZWYgQlNfRElSU0VQCisJZGlybmFtZmxnID0gMTsKKyAgICAgICAgeCA9 IGd0d29yZCgwKTsJCQkvKiBObywgZ2V0IGEgd29yZCAqLworCWRpcm5hbWZsZyA9IDA7CisjZWxz ZQorICAgICAgICB4ID0gZ3R3b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3 b3JkICovCisjZW5kaWYgLyogQlNfRElSU0VQICovCisgICAgfSBlbHNlIHsJCQkJLyogSWYgc28s IHVzZSBkZWZhdWx0LCBpZiBhbnkuICovCisgICAgICAgIGlmIChzZXRhdG0oeGRlZiwxKSA8IDAp IHsKKwkgICAgcHJpbnRmKCI/RGVmYXVsdCBuYW1lIHRvbyBsb25nXG4iKTsKKwkgICAgaWYgKG5w KSBmcmVlKG5wKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgfQorICBpX3BhdGg6CisgICAg KnhwID0gYXRtYnVmOyAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAq LworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgeGMgKz0gY2M7ICAgICAgICAgICAgICAgICAg ICAgICAvKiBDb3VudCB0aGlzIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgZGVidWcoRjExMSwiY21p ZmkgZ3R3b3JkIixhdG1idWYseGMpOworCWRlYnVnKEYxMDEsImNtaWZpIHN3aXRjaCB4IiwiIix4 KTsKKyAgICAgICAgc3dpdGNoICh4KSB7CQkJLyogeCA9IGd0d29yZCgpIHJldHVybiBjb2RlICov CisJICBjYXNlIC0xMDoKKwkgICAgaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7CisjaWZkZWYg SUtTRAorICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgICAgICAg ICBwcmludGYoIlxyXG5JS1NEIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7 CisgICAgICAgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7CisgICAgICAgICAgICAg ICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKwkJLyogaWYgKCFxdWlldCkgcHJpbnRmKCI/VGltZWQg b3V0XG4iKTsgKi8KKwkJcmV0dXJuKC0xMCk7CisJICAgIH0gZWxzZSB7CisJCXggPSBndHdvcmQo MCk7CisJCWNvbnRpbnVlOworCSAgICB9CisJICBjYXNlIC05OgorCSAgICBwcmludGYoIkNvbW1h bmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOworCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8KKwkgIGNh c2UgLTI6CQkJLyogT3V0IG9mIHNwYWNlLiAqLworCSAgY2FzZSAtMToJCQkvKiBSZXBhcnNlIG5l ZWRlZCAqLworCSAgICBpZiAobnApIGZyZWUobnApOworCSAgICByZXR1cm4oeCk7CisJICBjYXNl IDE6CQkJLyogQ1IgKi8KKwkgIGNhc2UgMDoJCQkvKiBTUCAqLworCSAgICBpZiAoeGMgPT0gMCkJ CS8qIElmIG5vIGlucHV0Li4uICovCisJICAgICAgKnhwID0geGRlZjsJCS8qIHN1YnN0aXR1dGUg dGhlIGRlZmF1bHQgKi8KKyNpZm5kZWYgTk9MQVNURklMRQorCSAgICBtYWtlc3RyKCZ0bXBsYXN0 ZmlsZSwqeHApOwkvKiBNYWtlIGEgY29weSBiZWZvcmUgYnN0cmlwcGluZyAqLworI2VuZGlmCS8q ICNpZm5kZWYgTk9MQVNURklMRSAqLworCSAgICAqeHAgPSBicnN0cmlwKCp4cCk7CQkvKiBTdHJp cCBicmFjZXMgKi8KKwkgICAgaWYgKCoqeHAgPT0gTlVMKSB7CQkvKiAxMiBtYXIgMjAwMSAqLwor CQlpZiAobnApIGZyZWUobnApOworCQlyZXR1cm4oLTMpOworCSAgICB9CisJICAgIGRlYnVnKEYx MTAsImNtaWZpIGJyc3RyaXAiLCp4cCwwKTsKKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKGYpIHsJ CQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKyNpZmRlZiBET0NIS1ZB UgorCQljaGFyICpzID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGlu ICovCisJCWludCB4OworCQl3aGlsZSAoKnMpIHsJCS8qIHRoZSBzdHJpbmcgYW5kIGlmIHNvLCBl eHBhbmQgdGhlbSAqLworCQkgICAgeCA9IGNoa3ZhcihzKTsKKwkJICAgIC8qIGRlYnVnKEYxMTEs ImNtaWZpIGNoa3ZhciIsKnhwLHgpOyAqLworCQkgICAgaWYgKHgpIHsKKyNlbmRpZiAvKiBET0NI S1ZBUiAqLworCQkJenEgPSBhdHhidWY7CisJCQlhdHhuID0gQ01EQkw7CisJCQlpZiAoKCpmKSgq eHAsJnpxLCZhdHhuKSA8IDApIHsKKwkJCSAgICBpZiAobnApIGZyZWUobnApOworCQkJICAgIHJl dHVybigtMik7CisJCQl9CisJCQkqeHAgPSBhdHhidWY7CisJCQlpZiAoIWF0eGJ1ZlswXSkKKwkJ CSAgKnhwID0geGRlZjsKKyNpZmRlZiBET0NIS1ZBUgorCQkJYnJlYWs7CisJCSAgICB9CisJCSAg ICBzKys7CisJCX0KKyNlbmRpZiAvKiBET0NIS1ZBUiAqLworCSAgICB9CisjZW5kaWYgLyogTk9T UEwgKi8KKwkgICAgaWYgKCoqeHAgPT0gTlVMKSB7CQkvKiAxMiBtYXIgMjAwMSAqLworCQlpZiAo bnApIGZyZWUobnApOworCQlyZXR1cm4oLTMpOworCSAgICB9CisjaWZkZWYgRFRJTERFCisJICAg IGlmIChkaXJmbGcpIHsKKwkJZGlycCA9IHRpbGRlX2V4cGFuZCgqeHApOyAvKiBFeHBhbmQgdGls ZGUsIGlmIGFueSwgKi8KKwkJaWYgKCpkaXJwICE9ICdcMCcpIHsJLyogaW4gdGhlIGF0b20gYnVm ZmVyLiAqLworCQkgICAgaWYgKHNldGF0bShkaXJwLDEpIDwgMCkgeworCQkJcHJpbnRmKCJFeHBh bmRlZCBuYW1lIHRvbyBsb25nXG4iKTsKKwkJCWlmIChucCkgZnJlZShucCk7CisJCQlyZXR1cm4o LTkpOworCQkgICAgfQorCQl9CisJCSp4cCA9IGF0bWJ1ZjsKKwkJZGVidWcoRjExMCwiY21pZmkg dGlsZGVfZXhwYW5kIiwqeHAsMCk7CisJICAgIH0KKyNlbmRpZiAvKiBEVElMREUgKi8KKwkgICAg aWYgKCFzdikgewkJCS8qIE9ubHkgZG8gdGhpcyBvbmNlICovCisJCXN2ID0gbWFsbG9jKChpbnQp c3RybGVuKCp4cCkrMSk7IC8qIE1ha2UgYSBzYWZlIGNvcHkgKi8KKwkJaWYgKCFzdikgeworCQkg ICAgcHJpbnRmKCI/Y21pZmk6IG1hbGxvYyBlcnJvclxuIik7CisJCSAgICBpZiAobnApIGZyZWUo bnApOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCQlzdHJjcHkoc3YsKnhwKTsKKwkJZGVidWco RjExMCwiY21pZmkgc3YiLHN2LDApOworCSAgICB9CisKKy8qIFRoaXMgaXMgdG8gZ2V0IGFyb3Vu ZCAiY2QgLyIgZmFpbGluZyBiZWNhdXNlICJ0b28gbWFueSBkaXJlY3RvcmllcyBtYXRjaCIgKi8K KworCSAgICBleHBhbmRlZCA9IDA7CQkvKiBEaWRuJ3QgY2FsbCB6eHBhbmQgKi8KKyNpZmRlZiBk YXRhZ2VuZXJhbAorCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBpc2RpciAxIiwqeHAsMCk7CisJICAg IHsKKwkJaW50IHk7IGNoYXIgKnM7CisJCXMgPSAqeHA7CisJCXkgPSBzdHJsZW4ocyk7CisJCWlm ICh5ID4gMSAmJgorCQkgICAgKHNbeS0xXSA9PSAnOicgfHwKKwkJICAgICBzW3ktMV0gPT0gJ14n IHx8CisJCSAgICAgc1t5LTFdID09ICc9JykKKwkJICAgICkKKwkJICBzW3ktMV0gPSBOVUw7CisJ ICAgIH0KKwkgICAgZGVidWcoRjExMCwiY21pZmkgaXNkaXIgMiIsKnhwLDApOworI2VuZGlmIC8q ICBkYXRhZ2VuZXJhbCAqLworCisjaWZkZWYgVk1TCisJICAgIGlmIChkaXJmbGcpIHsKKwkJaWYg KCFzdHJjbXAoKnhwLCIuLiIpKSB7IC8qIEZvciBVTklYZXJzLi4uICovCisJCSAgICBzZXRhdG0o Ii0iLDApOworCQkgICAgKnhwID0gYXRtYnVmOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoKnhwLCIu IikpIHsKKwkJICAgIHNldGF0bSgiW10iLDApOworCQkgICAgKnhwID0gYXRtYnVmOworCQl9CisJ ICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgaXRzYWRpciA9IGlzZGlyKCp4cCk7CS8qIElz IGl0IGEgZGlyZWN0b3J5PyAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBpdHNhZGlyIiwqeHAs aXRzYWRpcik7CisjaWZkZWYgVk1TCisJICAgIC8qIElmIHRoZXkgc2FpZCAiYmxhaCIgd2hlcmUg ImJsYWguZGlyIiBpcyBhIGRpcmVjdG9yeS4uLiAqLworCSAgICAvKiBjaGFuZ2UgaXQgdG8gWy5i bGFoXS4gKi8KKwkgICAgaWYgKCFpdHNhZGlyKSB7CisJCWNoYXIgdG1wYnVmWzYwMF07CisJCWlu dCBmbGFnID0gMDsgY2hhciBjLCAqIHA7CisJCXAgPSAqeHA7CisJCXdoaWxlICgoYyA9ICpwKysp ICYmICFmbGFnKQorCQkgIGlmIChja3N0cmNocigiLltdOio/PD4iLGMpKQorCQkgICAgZmxhZyA9 IDE7CisJCWRlYnVnKEYxMTEsImNtaWZpIFZNUyBkaXJuYW1lIGZsYWciLCp4cCxmbGFnKTsKKwkJ aWYgKCFmbGFnKSB7CisJCSAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJbLiIsKnhwLCJd IixOVUxMKTsKKwkJICAgIGl0c2FkaXIgPSBpc2Rpcih0bXBidWYpOworCQkgICAgaWYgKGl0c2Fk aXIpIHsKKwkJCXNldGF0bSh0bXBidWYsMCk7CisJCQkqeHAgPSBhdG1idWY7CisJCSAgICB9CisJ CSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBWTVMgZGlybmFtZSBmbGFnIGl0c2FkaXIiLCp4cCxpdHNh ZGlyKTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKGl0c2FkaXIgPT0gMSAmJiAqKHhwWzBdKSA9PSAn LicgJiYgKih4cFsxXSkpIHsKKwkJY2hhciAqcDsKKwkJaWYgKHAgPSBtYWxsb2MoY2MgKyA0KSkg eworCQkgICAgY2ttYWttc2cocCxjYys0LCJbIiwqeHAsIl0iLE5VTEwpOworCQkgICAgc2V0YXRt KHAsMCk7CisJCSAgICAqeHAgPSBhdG1idWY7CisJCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciAuZm9v IiwqeHAsMCk7CisJCSAgICBmcmVlKHApOworCQl9CisJICAgIH0gZWxzZSBpZiAoaXRzYWRpciA9 PSAyICYmICFkaXJhY3RpdmUpIHsKKwkJaW50IHg7CQkJLyogW0ZPT11CQVIuRElSIGluc3RlYWQg b2YgW0ZPTy5CQVJdICovCisJCWNoYXIgKnA7CisJCXAgPSBtYWxsb2MoY2MgKyA0KTsKKwkJaWYg KHApIHsKKwkJICAgIHggPSBjdnRkaXIoKnhwLHAsQVRNQkwpOyAvKiBDb252ZXJ0IHRvIFtGT08u QkFSXSAqLworCQkgICAgaWYgKHggPiAwKSB7CisJCQlzZXRhdG0ocCwwKTsKKwkJCSp4cCA9IGF0 bWJ1ZjsKKwkJCWRlYnVnKEYxMTAsImNtZGlyIGN2dGRpciIsKnhwLDApOworCQkgICAgfQorCQkg ICAgZnJlZShwKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVk1TICovCisKKwkgICAgZGVidWco RjEwMSwiY21pZmkgZGlyZmxnIiwiIixkaXJmbGcpOworCSAgICBpZiAoZGlyZmxnKSB7CQkvKiBQ YXJzaW5nIGEgZGlyZWN0b3J5IG5hbWU/ICovCisJCS8qIFllcywgZG9lcyBpdCBjb250YWluIHdp bGRjYXJkcz8gKi8KKwkJaWYgKGlzd2lsZCgqeHApIHx8CisJCSAgICAoZGlyYWN0aXZlICYmICgh c3RyY21wKCp4cCwiLiIpICB8fCAhc3RyY21wKCp4cCwiLi4iKSkpCisJCSAgICApIHsKKwkJICAg IG56eG9wdHMgfD0gWlhfRElST05MWTsgLyogTWF0Y2ggb25seSBkaXJlY3RvcnkgbmFtZXMgKi8K KwkJICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7CisJCSAgICBpZiAo cmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisJCSAgICBkZWJ1ZyhGMTExLCJjbWlm aSBuenhvcHRzIDIiLCp4cCxuenhvcHRzKTsKKwkJICAgIHkgPSBuenhwYW5kKCp4cCxuenhvcHRz KTsKKwkJICAgIGRlYnVnKEYxMTEsImNtaWZpIG56eHBhbmQgMiIsKnhwLHkpOworCQkgICAgbmZp bGVzID0geTsKKwkJICAgIGV4cGFuZGVkID0gMTsKKwkJfSBlbHNlIHsKKyNpZmRlZiBWTVMKKy8q CisgIFRoaXMgaXMgdG8gYWxsb3cgKGUuZy4pICJjZCBmb28iLCB3aGVyZSBGT08uRElSOzEgaXMg aW4gdGhlCisgIGN1cnJlbnQgZGlyZWN0b3J5LgorKi8KKwkJICAgIGRlYnVnKEYxMTEsImNtZGly IGl0c2FkaXIiLCp4cCxpdHNhZGlyKTsKKwkJICAgIGlmICghaXRzYWRpcikgeworCQkJY2hhciAq czsKKwkJCWludCBuOworCQkJcyA9ICp4cDsKKwkJCW4gPSBzdHJsZW4ocyk7CisJCQlpZiAobiA+ IDAgJiYKKyNpZmRlZiBDT01NRU5UCisJCQkgICAgKnMgIT0gJ1snICYmIHNbbi0xXSAhPSAnXScg JiYKKwkJCSAgICAqcyAhPSAnPCcgJiYgc1tuLTFdICE9ICc+JyAmJgorI2Vsc2UKKwkJCSAgICBj a2luZGV4KCJbIixzLDAsMCwxKSA9PSAwICYmCisJCQkgICAgY2tpbmRleCgiPCIscywwLDAsMSkg PT0gMCAmJgorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJCSAgICBzW24tMV0gIT0gJzonKSB7CisJ CQkgICAgY2hhciAqIGRpcmJ1ZiA9IE5VTEw7CisJCQkgICAgZGlyYnVmID0gKGNoYXIgKiltYWxs b2Mobis0KTsKKwkJCSAgICBpZiAoZGlyYnVmKSB7CisJCQkJaWYgKCpzID09ICcuJykKKwkJCQkg IGNrbWFrbXNnKGRpcmJ1ZixuKzQsIlsiLHMsIl0iLE5VTEwpOworCQkJCWVsc2UKKwkJCQkgIGNr bWFrbXNnKGRpcmJ1ZixuKzQsIlsuIixzLCJdIixOVUxMKTsKKwkJCQlpdHNhZGlyID0gaXNkaXIo ZGlyYnVmKTsKKwkJCQlkZWJ1ZyhGMTExLCJjbWRpciBkaXJidWYiLGRpcmJ1ZixpdHNhZGlyKTsK KwkJCQlpZiAoaXRzYWRpcikgeworCQkJCSAgICBzZXRhdG0oZGlyYnVmLDApOworCQkJCSAgICAq eHAgPSBhdG1idWY7CisJCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIG5ldyAqeHAiLCp4cCwwKTsK KwkJCQl9CisJCQkJZnJlZShkaXJidWYpOworCQkJICAgIH0KKworLyogVGhpcyBpcyB0byBhbGxv dyBDRFBBVEggdG8gd29yayBpbiBWTVMuLi4gKi8KKworCQkJfSBlbHNlIGlmIChuID4gMCkgewor CQkJICAgIGNoYXIgKiBwOyBpbnQgaSwgaiwgaywgZDsKKwkJCSAgICBjaGFyIHJiWzJdID0gIl0i OworCQkJICAgIGlmIChwID0gbWFsbG9jKHggKyA4KSkgeworCQkJCWNrc3RybmNweShwLCp4cCx4 KzgpOworCQkJCWkgPSBja2luZGV4KCIuIixwLC0xLDEsMSk7CisJCQkJZCA9IGNraW5kZXgoIi5k aXIiLHAsMCwwLDApOworCQkJCWogPSBja2luZGV4KCJdIixwLC0xLDEsMSk7CisJCQkJaWYgKGog PT0gMCkgeworCQkJCSAgICBqID0gY2tpbmRleCgiPiIscCwtMSwxLDEpOworCQkJCSAgICByYlsw XSA9ICc+JzsKKwkJCQl9CisJCQkJayA9IGNraW5kZXgoIjoiLHAsLTEsMSwxKTsKKwkJCQlpZiAo aSA8IGogfHwgaSA8IGspIGkgPSAwOworCQkJCWlmIChkIDwgaiB8fCBkIDwgaykgZCA9IDA7CisJ CQkJLyogQ2hhbmdlIFtGT09dQkFSIG9yIFtGT09dQkFSLkRJUiAqLworCQkJCS8qIHRvIFtGT08u QkFSXSAqLworCQkJCWlmIChqID4gMCAmJiBqIDwgbikgeworCQkJCSAgICBwW2otMV0gPSAnLic7 CisJCQkJICAgIGlmIChkID4gMCkgcFtkLTFdID0gTlVMOworCQkJCSAgICBja3N0cm5jYXQocCxy Yix4KzgpOworCQkJCSAgICBkZWJ1ZyhGMTEwLCJjbWRpciB4eHgiLHAsMCk7CisJCQkJfQorCQkJ CWl0c2FkaXIgPSBpc2RpcihwKTsKKwkJCQlkZWJ1ZyhGMTExLCJjbWRpciBwIixwLGl0c2FkaXIp OworCQkJCWlmIChpdHNhZGlyKSB7CisJCQkJICAgIHNldGF0bShwLDApOworCQkJCSAgICAqeHAg PSBhdG1idWY7CisJCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIG5ldyAqeHAiLCp4cCwwKTsKKwkJ CQl9CisJCQkJZnJlZShwKTsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisjZW5kaWYgLyogVk1T ICovCisJCSAgICB5ID0gKCFpdHNhZGlyKSA/IDAgOiAxOworCQkgICAgZGVidWcoRjExMSwiY21p ZmkgeSBpdHNhZGlyIiwqeHAseSk7CisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBQYXJzaW5nIGEg ZmlsZW5hbWUuICovCisJCWRlYnVnKEYxMTAsImNtaWZpICp4cCBwcmUtenhwYW5kIiwqeHAsMCk7 CisjaWZuZGVmIENPTU1FTlQKKwkJbnp4b3B0cyB8PSAoZCA9PSAwKSA/IFpYX0ZJTE9OTFkgOiAw OyAvKiBTbyBhbHdheXMgZXhwYW5kLiAqLworCQlpZiAobWF0Y2hkb3QpICBuenhvcHRzIHw9IFpY X01BVENIRE9UOworCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VSU0U7CisJCXkg PSBuenhwYW5kKCp4cCxuenhvcHRzKTsKKyNlbHNlCisvKiBIZXJlIHdlJ3JlIHRyeWluZyB0byBm aXggYSBwcm9ibGVtIGluIHdoaWNoIGEgZGlyZWN0b3J5IG5hbWUgaXMgYWNjZXB0ZWQgKi8KKy8q IGFzIGEgZmlsZW5hbWUsIGJ1dCB0aGlzIGJyZWFrcyB0b28gbWFueSBvdGhlciB0aGluZ3MuICov CisJCS8qIG56eG9wdHMgPSAwOyAqLworCQlpZiAoIWQpIHsKKwkJICAgIGlmIChpdHNhZGlyICYg IWlzd2lsZCgqeHApKSB7CisJCQlkZWJ1ZyhGMTAwLCJjbWlmaSBkaXIgd2hlbiBmaWxvbmx5Iiwi IiwwKTsKKwkJCXByaW50ZigiP05vdCBhIHJlZ3VsYXIgZmlsZTogXCIlc1wiXG4iLCp4cCk7CisJ CQlpZiAoc3YpIGZyZWUoc3YpOworCQkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJCXJldHVybigtOSk7 CisJCSAgICB9IGVsc2UgeworCQkJbnp4b3B0cyB8PSBaWF9GSUxPTkxZOworCQkJaWYgKG1hdGNo ZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKKwkJCWlmIChyZWN1cnNpdmUpIG56eG9wdHMg fD0gWlhfUkVDVVJTRTsKKwkJCXkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKKwkJICAgIH0KKwkJ fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJbmZpbGVzID0geTsKKwkJZGVidWcoRjExMSwiY21p ZmkgeSBuenhwYW5kIiwqeHAseSk7CisJCWRlYnVnKEYxMTEsImNtaWZpIHkgYXRtYnVmIixhdG1i dWYsaXRzYWRpcik7CisJCWV4cGFuZGVkID0gMTsKKwkgICAgfQorCSAgICAvKiBkb215ZGlyKCkg Y2FsbHMgenhyZXdpbmQoKSBzbyB3ZSBNVVNUIGNhbGwgbnp4cGFuZCgpIGhlcmUgKi8KKwkgICAg aWYgKCFleHBhbmRlZCAmJiBkaXJhY3RpdmUpIHsKKwkJZGVidWcoRjExMCwiY21pZmkgZGlyYWN0 aXZlIGNhdGNoLWFsbCB6eHBhbmQiLCp4cCwwKTsKKwkJbnp4b3B0cyB8PSAoZCA9PSAwKSA/IFpY X0ZJTE9OTFkgOiAoZGlyZmxnID8gWlhfRElST05MWSA6IDApOworCQlpZiAobWF0Y2hkb3QpICBu enhvcHRzIHw9IFpYX01BVENIRE9UOworCQlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JF Q1VSU0U7CisJCXkgPSBuenhwYW5kKCp4cCxuenhvcHRzKTsKKwkJZGVidWcoRjExMSwiY21pZmkg ZGlyYWN0aXZlIG56eHBhbmQiLCp4cCx5KTsKKwkJbmZpbGVzID0geTsKKwkJZXhwYW5kZWQgPSAx OworCSAgICB9CisJICAgICp3aWxkID0gKGlzd2lsZChzdikgfHwgKHkgPiAxKSkgJiYgKGl0c2Fk aXIgPT0gMCk7CisKKyNpZmRlZiBSRUNVUlNJVkUKKwkgICAgaWYgKCEqd2lsZCkgKndpbGQgPSBy ZWN1cnNpdmU7CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisKKwkgICAgZGVidWcoRjExMSwiY21p Zmkgc3Ygd2lsZCIsc3YsKndpbGQpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSB5IiwiIix5KTsK KwkgICAgaWYgKGRpcmZsZyAmJiAqd2lsZCAmJiBjZGFjdGl2ZSkgeworCQlpZiAoeSA+IDEpIHsK KwkJICAgIHByaW50ZigiP1dpbGRjYXJkIG1hdGNoZXMgbW9yZSB0aGFuIG9uZSBkaXJlY3Rvcnlc biIpOworCQkgICAgaWYgKHN2KSBmcmVlKHN2KTsKKwkJICAgIGlmIChucCkgZnJlZShucCk7CisJ CSAgICByZXR1cm4oLTkpOworCQl9IGVsc2UgeworCQkgICAgem5leHQoKnhwKTsKKwkJfQorCSAg ICB9CisJICAgIGlmIChpdHNhZGlyICYmIGQgJiYgIWRpcmZsZykgeyAvKiBJdCdzIGEgZGlyZWN0 b3J5IGFuZCBub3Qgd2lsZCAqLworCQlpZiAoc3YpIGZyZWUoc3YpOwkvKiBhbmQgaXQncyBvayB0 byBwYXJzZSBkaXJlY3RvcmllcyAqLworCQlpZiAobnApIGZyZWUobnApOworI2lmbmRlZiBOT0xB U1RGSUxFCisJCW1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKKyNlbmRpZgkvKiBOT0xB U1RGSUxFICovCisJCXJldHVybih4KTsKKwkgICAgfQorCSAgICBpZiAoeSA9PSAwKSB7CQkvKiBG aWxlIHdhcyBub3QgZm91bmQgKi8KKwkJaW50IGRvc2VhcmNoID0gMDsKKwkJZG9zZWFyY2ggPSAo cGF0aCAhPSBOVUxMKTsgLyogQSBzZWFyY2ggcGF0aCB3YXMgZ2l2ZW4gKi8KKwkJaWYgKGRvc2Vh cmNoKSB7CisJCSAgICBkb3NlYXJjaCA9IGhhc25vcGF0aChzdik7IC8qIEZpbGVuYW1lIGluY2x1 ZGVzIG5vIHBhdGggKi8KKwkJICAgIGRlYnVnKEYxMTEsImNtaWZpcCBoYXNub3BhdGgiLHN2LGRv c2VhcmNoKTsKKwkJfQorCQlpZiAoZG9zZWFyY2gpIHsJCS8qIFNlYXJjaCB0aGUgcGF0aC4uLiAq LworCQkgICAgY2hhciAqIHB0ciA9IHBhdGg7CisJCSAgICBjaGFyIGM7CisJCSAgICB3aGlsZSAo MSkgeworCQkJYyA9ICpwdHI7CisJCQlpZiAoYyA9PSBQQVRIU0VQIHx8IGMgPT0gTlVMKSB7CisJ CQkgICAgaWYgKCEqcGF0aCkgeworCQkJCXBhdGggPSBOVUxMOworCQkJCWJyZWFrOworCQkJICAg IH0KKwkJCSAgICAqcHRyID0gTlVMOworI2lmZGVmIFVOSVgKKy8qIEJ5IGRlZmluaXRpb24gb2Yg Q0RQQVRILCBhbiBlbXB0eSBtZW1iZXIgZGVub3RlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKi8K KwkJCSAgICBpZiAoISpwYXRoKQorCQkJICAgICAgY2tzdHJuY3B5KGF0bWJ1ZiwiLiIsQVRNQkwp OworCQkJICAgIGVsc2UKKyNlbmRpZiAvKiBVTklYICovCisJCQkgICAgICBja3N0cm5jcHkoYXRt YnVmLHBhdGgsQVRNQkwpOworI2lmZGVmIFZNUworCQkJICAgIGF0bWJ1ZltBVE1CTF0gPSBOVUw7 CisvKiBJZiB3ZSBoYXZlIGEgbG9naWNhbCBuYW1lLCBldmFsdWF0ZSBpdCByZWN1cnNpdmVseSAq LworCQkJICAgIGlmICgqKHB0ci0xKSA9PSAnOicpIHsgLyogTG9naWNhbCBuYW1lIGVuZHMgaW4g OiAqLworCQkJCWNoYXIgKnA7IGludCBuOworCQkJCXdoaWxlICgoKG4gPSBzdHJsZW4oYXRtYnVm KSkgID4gMCkgJiYKKwkJCQkgICAgICAgYXRtYnVmW24tMV0gPT0gJzonKSB7CisJCQkJICAgIGF0 bWJ1ZltuLTFdID0gTlVMOworCQkJCSAgICBmb3IgKHAgPSBhdG1idWY7ICpwOyBwKyspCisJCQkJ ICAgICAgaWYgKGlzbG93ZXIoKnApKSAqcCA9IHRvdXBwZXIoKnApOworCQkJCSAgICBkZWJ1ZyhG MTExLCJjbWRpciBDRFBBVEggTE4gMSIsYXRtYnVmLG4pOworCQkJCSAgICBwID0gZ2V0ZW52KGF0 bWJ1Zik7CisJCQkJICAgIGRlYnVnKEYxMTAsImNtZGlyIENEUEFUSCBMTiAyIixwLDApOworCQkJ CSAgICBpZiAoIXApCisJCQkJICAgICAgYnJlYWs7CisJCQkJICAgIHN0cm5jcHkoYXRtYnVmLHAs QVRNQkwpOworCQkJCSAgICBhdG1idWZbQVRNQkxdID0gTlVMOworCQkJCX0KKwkJCSAgICB9Cisj ZWxzZQorI2lmZGVmIE9TMgorCQkJICAgIGlmICgqKHB0ci0xKSAhPSAnXFwnICYmICoocHRyLTEp ICE9ICcvJykKKwkJCSAgICAgIGNrc3RybmNhdChhdG1idWYsIlxcIixBVE1CTCk7CisjZWxzZQor I2lmZGVmIFVOSVgKKwkJCSAgICBpZiAoKihwdHItMSkgIT0gJy8nKQorCQkJICAgICAgY2tzdHJu Y2F0KGF0bWJ1ZiwiLyIsQVRNQkwpOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorCQkJICAg IGlmICgqKHB0ci0xKSAhPSAnOicpCisJCQkgICAgICBja3N0cm5jYXQoYXRtYnVmLCI6IixBVE1C TCk7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisJCQkgICAgY2tzdHJuY2F0KGF0bWJ1ZixzdixB VE1CTCk7CisJCQkgICAgZGVidWcoRjExMCwiY21pZmlwIGFkZCBwYXRoIixhdG1idWYsMCk7CisJ CQkgICAgaWYgKGMgPT0gUEFUSFNFUCkgcHRyKys7CisJCQkgICAgcGF0aCA9IHB0cjsKKwkJCSAg ICBicmVhazsKKwkJCX0KKwkJCXB0cisrOworCQkgICAgfQorCQkgICAgeCA9IDE7CisJCSAgICBp bndvcmQgPSAwOworCQkgICAgY2MgPSAwOworCQkgICAgeGMgPSAoaW50KSBzdHJsZW4oYXRtYnVm KTsKKwkJICAgICp4cCA9ICIiOworCQkgICAgZ290byBpX3BhdGg7CisJCX0KKwkJaWYgKGQpIHsK KwkJICAgIGlmIChzdikgZnJlZShzdik7CisJCSAgICBpZiAobnApIGZyZWUobnApOworCQkgICAg cmV0dXJuKC0yKTsKKwkJfSBlbHNlIHsKKwkJICAgIGlmICghbm9tc2cpIHsKKyNpZmRlZiBDS1JP T1QKKwkJCWlmIChja3Jvb3RlcnIpCisJCQkgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLHN2 KTsKKwkJCWVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKwkJCSAgaWYgKCFxdWlldCkKKwkJCSAg ICBwcmludGYoIj9ObyAlcyBtYXRjaCAtICVzXG4iLAorCQkJCSBkaXJmbGcgPyAiZGlyZWN0b3Jp ZXMiIDogImZpbGVzIiwgc3YpOworCQkgICAgfQorCQkgICAgaWYgKHN2KSBmcmVlKHN2KTsKKwkJ ICAgIGlmIChucCkgZnJlZShucCk7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAgIH0gZWxz ZSBpZiAoeSA8IDApIHsKKyNpZmRlZiBDS1JPT1QKKwkJaWYgKGNrcm9vdGVycikKKwkJICBwcmlu dGYoIj9PZmYgTGltaXRzOiAlc1xuIixzdik7CisJCWVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8K KwkJICBwcmludGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAorCQkJIGRpcmZsZyA/ICJk aXJlY3RvcmllcyIgOiAiZmlsZXMiLCBzdik7CisJCWlmIChzdikgZnJlZShzdik7CisJCWlmIChu cCkgZnJlZShucCk7CisJCXJldHVybigtOSk7CisJICAgIH0gZWxzZSBpZiAoKndpbGQgfHwgeSA+ IDEpIHsKKwkJaWYgKHN2KSBmcmVlKHN2KTsKKwkJaWYgKG5wKSBmcmVlKG5wKTsKKyNpZm5kZWYg Tk9MQVNURklMRQorCQltYWtlc3RyKCZsYXN0ZmlsZSx0bXBsYXN0ZmlsZSk7CisjZW5kaWYJLyog Tk9MQVNURklMRSAqLworCQlyZXR1cm4oeCk7CisJICAgIH0KKworCSAgICAvKiBJZiBub3Qgd2ls ZCwgc2VlIGlmIGl0IGV4aXN0cyBhbmQgaXMgcmVhZGFibGUuICovCisKKwkgICAgZGVidWcoRjEx MSwiY21pZmkgc3Ygbm90IHdpbGQiLHN2LCp3aWxkKTsKKwkgICAgaWYgKGV4cGFuZGVkKQorCSAg ICAgIHpuZXh0KCp4cCk7CQkvKiBHZXQgZmlyc3QgKG9ubHk/KSBtYXRjaGluZyBmaWxlICovCisJ ICAgIGlmIChkaXJmbGcpCQkJLyogTWF5YmUgd2lsZCBhbmQgZXhwYW5kZWQgKi8KKwkgICAgICBp dHNhZGlyID0gaXNkaXIoKnhwKTsJLyogc28gZG8gdGhpcyBhZ2Fpbi4gKi8KKwkgICAgZmlsZXNp emUgPSBkaXJmbGcgPyBpdHNhZGlyIDogemNoa2koKnhwKTsgLyogQ2hlY2sgYWNjZXNzaWJpbGl0 eSAqLworCSAgICBpZiAoZXhwYW5kZWQpIHsKKyNpZmRlZiBaWFJFV0lORAorCQluZmlsZXMgPSB6 eHJld2luZCgpOwkvKiBSZXdpbmQgc28gbmV4dCB6bmV4dCgpIGdldHMgMXN0ICovCisjZWxzZQor CisJCW56eG9wdHMgfD0gZGlyZmxnID8gWlhfRElST05MWSA6IDA7CisJCWlmIChtYXRjaGRvdCkg IG56eG9wdHMgfD0gWlhfTUFUQ0hET1Q7CisJCWlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhf UkVDVVJTRTsKKwkJbmZpbGVzID0gbnp4cGFuZCgqeHAsbnp4b3B0cyk7CisjZW5kaWYgLyogWlhS RVdJTkQgKi8KKwkgICAgfQorCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBuZmlsZXMiLCp4cCxuZmls ZXMpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBmaWxlc2l6ZSIsIiIsZmlsZXNpemUpOworCSAg ICBmcmVlKHN2KTsJCQkvKiBkb25lIHdpdGggdGhpcyAqLworCSAgICBzdiA9IE5VTEw7CisJICAg IGlmIChkaXJmbGcgJiYgIWZpbGVzaXplKSB7CisJCXByaW50ZigiP05vdCBhIGRpcmVjdG9yeSAt ICVzXG4iLCp4cCk7CisjaWZkZWYgQ0tDSEFOTkVMSU8KKwkJel9lcnJvciA9IEZYX0FDQzsKKyNl bmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgaWYgKGZp bGVzaXplID09IChDS19PRkZfVCktMykgeworCQlpZiAoIXhjbWZkYikgeworCQkgICAgaWYgKGRp cmFjdGl2ZSkKKwkJICAgICAgLyogRG9uJ3Qgc2hvdyBmaWxlbmFtZSBpZiB3ZSdyZSBub3QgYWxs b3dlZCB0byBzZWUgaXQgKi8KKwkJICAgICAgcHJpbnRmKCI/UmVhZCBwZXJtaXNzaW9uIGRlbmll ZFxuIik7CisJCSAgICBlbHNlCisJCSAgICAgIHByaW50ZigiP1JlYWQgcGVybWlzc2lvbiBkZW5p ZWQgLSAlc1xuIiwqeHApOworCQl9CisJCWlmIChucCkgZnJlZShucCk7CisjaWZkZWYgQ0tDSEFO TkVMSU8KKwkJel9lcnJvciA9IEZYX0FDQzsKKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCQly ZXR1cm4oeGNtZmRiID8gLTYgOiAtOSk7CisJICAgIH0gZWxzZSBpZiAoZmlsZXNpemUgPT0gKENL X09GRl9UKS0yKSB7CisJCWlmICghcmVjdXJzaXZlKSB7CisJCSAgICBpZiAobnApIGZyZWUobnAp OworCQkgICAgaWYgKGQpIHsKKyNpZm5kZWYgTk9MQVNURklMRQorCQkJbWFrZXN0cigmbGFzdGZp bGUsdG1wbGFzdGZpbGUpOworI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KKwkJCXJldHVybigwKTsK KwkJICAgIH0KKwkJICAgIGlmICgheGNtZmRiKQorCQkgICAgICBwcmludGYoIj9GaWxlIG5vdCBy ZWFkYWJsZSAtICVzXG4iLCp4cCk7CisjaWZkZWYgQ0tDSEFOTkVMSU8KKwkJICAgIHpfZXJyb3Ig PSBGWF9BQ0M7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKwkJICAgIHJldHVybih4Y21mZGIg PyAtNiA6IC05KTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKGZpbGVzaXplIDwgKENLX09GRl9UKTAp IHsKKwkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJaWYgKCFub21zZyAmJiAheGNtZmRiKQorCQkgIHBy aW50ZigiP0ZpbGUgbm90IGZvdW5kIC0gJXNcbiIsKnhwKTsKKyNpZmRlZiBDS0NIQU5ORUxJTwor CQl6X2Vycm9yID0gRlhfRk5GOworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisJCXJldHVybih4 Y21mZGIgPyAtNiA6IC05KTsKKwkgICAgfQorCSAgICBpZiAobnApIGZyZWUobnApOworI2lmbmRl ZiBOT0xBU1RGSUxFCisJICAgIG1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsKKyNlbmRp ZgkvKiBOT0xBU1RGSUxFICovCisJICAgIHJldHVybih4KTsKKworI2lmbmRlZiBNQUMKKwkgIGNh c2UgMjoJCQkvKiBFU0MgKi8KKwkgICAgZGVidWcoRjEwMSwiY21pZmkgZXNjLCB4YyIsIiIseGMp OworCSAgICBpZiAoeGMgPT0gMCkgeworCQlpZiAoKnhkZWYpIHsKKwkJICAgIHByaW50ZigiJXMg Iix4ZGVmKTsgLyogSWYgYXQgYmVnaW5uaW5nIG9mIGZpZWxkICovCisjaWZkZWYgR0VNRE9TCisJ CSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKwkJICAgIGlud29yZCA9 IGNtZmxncyA9IDA7CisJCSAgICBhZGRidWYoeGRlZik7CS8qIFN1cHBseSBkZWZhdWx0LiAqLwor CQkgICAgaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgeworCQkJcHJpbnRmKCJEZWZhdWx0IG5hbWUg dG9vIGxvbmdcbiIpOworCQkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJCXJldHVybigtOSk7CisJCSAg ICB9CisJCX0gZWxzZSB7CQkvKiBObyBkZWZhdWx0ICovCisJCSAgICBibGVlcChCUF9XQVJOKTsK KwkJfQorCQlicmVhazsKKwkgICAgfQorCSAgICBpZiAoKip4cCA9PSAneycpIHsJCS8qIERpZCB1 c2VyIHR5cGUgb3BlbmluZyBicmFjZS4uLiAqLworCQkqeHAgPSAqeHAgKyAxOworCQl4Yy0tOwor CQljYy0tOworCQlxZmxhZyA9ICd9JzsKKwkgICAgfSBlbHNlIGlmIChkYmxxdW8gJiYgKip4cCA9 PSAnIicpIHsJLyogb3IgZG91YmxlcXVvdGU/ICovCisJCSp4cCA9ICp4cCArIDE7CQkvKiBJZiBz byBpZ25vcmUgaXQgYW5kIHNwYWNlIHBhc3QgaXQgKi8KKwkJeGMtLTsKKwkJY2MtLTsKKwkJcWZs YWcgPSAnIic7CisJICAgIH0KKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYgKGYpIHsJCQkvKiBJZiBh IGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKyNpZmRlZiBET0NIS1ZBUgorCQljaGFy ICpzID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFyaWFibGVzIGluICovCisJCXdo aWxlICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4cGFuZCBpdC4gICovCisJCSAg ICBpZiAoY2hrdmFyKHMpKSB7CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKwkJCXpxID0gYXR4YnVm OworCQkJYXR4biA9IENNREJMOworCQkJaWYgKCh4ID0gKCpmKSgqeHAsJnpxLCZhdHhuKSkgPCAw KSB7CisJCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJCSAgICByZXR1cm4oLTIpOworCQkJfQor I2lmZGVmIERPQ0hLVkFSCisJCSAgICAvKiByZWR1Y2UgY2MgYnkgbnVtYmVyIG9mIFxcIGNvbnN1 bWVkIGJ5IGNvbnZlcnNpb24gKi8KKwkJICAgIC8qIGZ1bmN0aW9uIChuZWVkZWQgZm9yIE9TLzIs IHdoZXJlIFwgaXMgcGF0aCBzZXBhcmF0b3IpICovCisJCQljYyAtPSAoc3RybGVuKCp4cCkgLSBz dHJsZW4oYXR4YnVmKSk7CisjZW5kaWYgLyogRE9DSEtWQVIgKi8KKwkJCSp4cCA9IGF0eGJ1ZjsK KwkJCWlmICghYXR4YnVmWzBdKSB7IC8qIFJlc3VsdCBlbXB0eSwgdXNlIGRlZmF1bHQgKi8KKwkJ CSAgICAqeHAgPSB4ZGVmOworCQkJICAgIGNjID0gc3RybGVuKHhkZWYpOworCQkJfQorI2lmZGVm IERPQ0hLVkFSCisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIHMrKzsKKwkJfQorI2VuZGlmIC8q IERPQ0hLVkFSICovCisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgRFRJTERF CisJICAgIGlmIChkaXJmbGcgJiYgKigqeHApID09ICd+JykgeworCQlkZWJ1ZyhGMTExLCJjbWlm aSB0aWxkZV9leHBhbmQgQSIsKnhwLGNjKTsKKwkJZGlycCA9IHRpbGRlX2V4cGFuZCgqeHApOyAv KiBFeHBhbmQgdGlsZGUsIGlmIGFueS4uLiAqLworCQlpZiAoIWRpcnApIGRpcnAgPSAiIjsKKwkJ aWYgKCpkaXJwKSB7CisJCSAgICBpbnQgaSwgeHg7CisJCSAgICBjaGFyICogc3A7CisJCSAgICB4 YyA9IGNjOwkJLyogTGVuZ3RoIG9mIH50aGluZyAqLworCQkgICAgeHggPSBzZXRhdG0oZGlycCww KTsgLyogQ29weSBleHBhbnNpb24gdG8gYXRvbSBidWZmZXIgKi8KKwkJICAgIGRlYnVnKEYxMTEs ImNtaWZpIHRpbGRlX2V4cGFuZCBCIixhdG1idWYsY2MpOworCQkgICAgaWYgKHh4IDwgMCkgewor CQkJcHJpbnRmKCJFeHBhbmRlZCBuYW1lIHRvbyBsb25nXG4iKTsKKwkJCWlmIChucCkgZnJlZShu cCk7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgZGVidWcoRjExMSwiY21pZmkgdGls ZGVfZXhwYW5kIHhjIiwiIix4Yyk7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgeGM7IGkrKykgewor CQkJY21kY2hhcmRlbCgpOwkvKiBCYWNrIHVwIG92ZXIgfnRoaW5nICovCisJCQlicC0tOworCQkg ICAgfQorCQkgICAgeGMgPSBjYzsJCS8qIEhvdyBtYW55IG5ldyBvbmVzIHdlIGp1c3QgZ290ICov CisJCSAgICBzcCA9IGF0bWJ1ZjsKKwkJICAgIHByaW50ZigiJXMiLHNwKTsJLyogUHJpbnQgdGhl bSAqLworCQkgICAgd2hpbGUgKCgqYnArKyA9ICpzcCsrKSkgOwkvKiBDb3B5IHRvIGNvbW1hbmQg YnVmZmVyICovCisJCSAgICBicC0tOwkgICAgCSAgICAgICAgLyogQmFjayB1cCBvdmVyIE5VTCAq LworCQl9CisJCSp4cCA9IGF0bWJ1ZjsKKwkgICAgfQorI2VuZGlmIC8qIERUSUxERSAqLworCisJ ICAgIHNwID0gKnhwICsgY2M7CisKKyNpZmRlZiBVTklYT1JPU0sKKwkgICAgaWYgKCFzdHJjbXAo YXRtYnVmLCIuLiIpKSB7CisJCXByaW50ZigiICIpOworCQlja3N0cm5jYXQoY21kYnVmLCIgIixD TURCTCk7CisJCWNjKys7CisJCWJwKys7CisJCSp3aWxkID0gMDsKKwkJKnhwID0gYXRtYnVmOwor CQlicmVhazsKKwkgICAgfSBlbHNlIGlmICghc3RyY21wKGF0bWJ1ZiwiLiIpKSB7CisJCWJsZWVw KEJQX1dBUk4pOworCQlpZiAobnApIGZyZWUobnApOworCQlyZXR1cm4oLTEpOworCSAgICB9IGVs c2UgeworCQkvKiBUaGlzIHBhdGNoZXMgYSBnbGl0Y2ggd2hlbiB1c2VyIHR5cGVzICIuL2ZvbzxF U0M+IiAqLworCQkvKiBpbiB3aGljaCB0aGUgbmV4dCB0d28gY2hhcnMgYXJlIG9taXR0ZWQgZnJv bSB0aGUgKi8KKwkJLyogZXhwYW5zaW9uLiAgVGhlcmUgc2hvdWxkIGJlIGEgYmV0dGVyIGZpeCwg aG93ZXZlciwgKi8KKwkJLyogc2luY2UgdGhlcmUgaXMgbm8gcHJvYmxlbSB3aXRoICIuLi9mb288 RVNDPiIuICovCisJCWNoYXIgKnAgPSAqeHA7CisJCWlmICgqcCA9PSAnLicgJiYgKihwKzEpID09 ICcvJykKKwkJICBjYyAtPSAyOworCSAgICB9CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisKKyNp ZmRlZiBkYXRhZ2VuZXJhbAorCSAgICAqc3ArKyA9ICcrJzsJCS8qIERhdGEgR2VuZXJhbCBBT1Mg d2lsZGNhcmQgKi8KKyNlbHNlCisJICAgICpzcCsrID0gJyonOwkJLyogT3RoZXJzICovCisjZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KKwkgICAgKnNwLS0gPSAnXDAnOworI2lmZGVmIEdFTURPUwor CSAgICBpZiAoIXN0cmNocigqeHAsICcuJykpCS8qIGFiZGUuZSAtPiBhYmNkZS5lKiAqLworCSAg ICAgIHN0cmNhdCgqeHAsICIuKiIpOwkvKiBhYmMgLT4gYWJjKi4qICovCisjZW5kaWYgLyogR0VN RE9TICovCisJICAgIC8qIEFkZCB3aWxkY2FyZCBhbmQgZXhwYW5kIGxpc3QuICovCisjaWZkZWYg Q09NTUVOVAorCSAgICAvKiBUaGlzIGtpbGxzIHBhcnRpYWwgY29tcGxldGlvbiB3aGVuIEVTQyBn aXZlbiBpbiBwYXRoIHNlZ21lbnQgKi8KKwkgICAgbnp4b3B0cyB8PSBkaXJmbGcgPyBaWF9ESVJP TkxZIDogKGQgPyAwIDogWlhfRklMT05MWSk7CisjZWxzZQorCSAgICAvKiBuenhvcHRzID0gMDsg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0g WlhfTUFUQ0hET1Q7CisJICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsK KwkgICAgeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOworCSAgICBuZmlsZXMgPSB5OworCSAgICBk ZWJ1ZyhGMTExLCJjbWlmaSBuenhwYW5kIiwqeHAseSk7CisJICAgIGlmICh5ID4gMCkgeworI2lm ZGVmIE9TMgorICAgICAgICAgICAgICAgIHpuZXh0KGZpbGJ1Zik7CQkvKiBHZXQgZmlyc3QgKi8K KyNpZmRlZiBaWFJFV0lORAorCQl6eHJld2luZCgpOwkJLyogTXVzdCAicmV3aW5kIiAqLworI2Vs c2UKKwkJbnp4cGFuZCgqeHAsbnh6b3B0cyk7CisjZW5kaWYgLyogWlhSRVdJTkQgKi8KKyNlbHNl ICAvKiBOb3QgT1MyICovCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZpbGJ1ZixtdGNoc1sw XSxDS01BWFBBVEgpOworI2VuZGlmIC8qIE9TMiAqLworCSAgICB9IGVsc2UKKwkgICAgICAqZmls YnVmID0gJ1wwJzsKKwkgICAgZmlsYnVmW0NLTUFYUEFUSF0gPSBOVUw7CisJICAgICpzcCA9ICdc MCc7CQkJLyogUmVtb3ZlIHdpbGRjYXJkLiAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWlmaSBmaWxi dWYiLGZpbGJ1Zix5KTsKKwkgICAgZGVidWcoRjExMSwiY21pZmkgKnhwIiwqeHAsY2MpOworCisJ ICAgICp3aWxkID0gKHkgPiAxKTsKKwkgICAgaWYgKHkgPT0gMCkgeworCQlpZiAoIW5vbXNnKSB7 CisjaWZkZWYgQ0tST09UCisJCSAgICBpZiAoY2tyb290ZXJyKQorCQkgICAgICBwcmludGYoIj9P ZmYgTGltaXRzOiAlc1xuIixhdG1idWYpOworCQkgICAgZWxzZQorI2VuZGlmIC8qIENLUk9PVCAq LworCQkgICAgICBwcmludGYoIj9ObyAlcyBtYXRjaCAtICVzXG4iLAorCQkJICAgZGlyZmxnID8g ImRpcmVjdG9yaWVzIiA6ICJmaWxlcyIsIGF0bWJ1Zik7CisJCSAgICBpZiAobnApIGZyZWUobnAp OworCQkgICAgcmV0dXJuKC05KTsKKwkJfSBlbHNlIHsKKwkJICAgIGJsZWVwKEJQX1dBUk4pOwor CQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJICAgIHJldHVybigtMSk7CisJCX0KKwkgICAgfSBl bHNlIGlmICh5IDwgMCkgeworI2lmZGVmIENLUk9PVAorCQlpZiAoY2tyb290ZXJyKQorCQkgIHBy aW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7CisJCWVsc2UKKyNlbmRpZiAvKiBDS1JP T1QgKi8KKwkJICBwcmludGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAorCQkJIGRpcmZs ZyA/ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOworCQlpZiAobnApIGZyZWUobnAp OworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgaWYgKHkgPiAxCQkvKiBOb3QgdW5pcXVlICov CisjaWZuZGVmIFZNUworCQkgICAgICAgfHwgKHkgPT0gMSAmJiBpc2RpcihmaWxidWYpKSAvKiBV bmlxdWUgZGlyZWN0b3J5ICovCisjZW5kaWYgLyogVk1TICovCisJCSAgICAgICApIHsKKyNpZm5k ZWYgTk9QQVJUSUFMCisvKiBQYXJ0aWFsIGZpbGVuYW1lIGNvbXBsZXRpb24gKi8KKwkJaW50IGos IGs7IGNoYXIgYzsKKwkJayA9IDA7CisJCWRlYnVnKEYxMTEsImNtaWZpIHBhcnRpYWwiLGZpbGJ1 ZixjYyk7CisjaWZkZWYgT1MyCisJCXsKKwkJICAgIGludCBjdXIgPSAwLAorCQkgICAgbGVuID0g MCwKKwkJICAgIGxlbjIgPSAwLAorCQkgICAgbWluID0gc3RybGVuKGZpbGJ1ZiksCisJCSAgICBm b3VuZCA9IDA7CisJCSAgICBjaGFyIGxvY2FsZm5bQ0tNQVhQQVRIKzFdOworCisJCSAgICBsZW4g PSBtaW47CisJCSAgICBmb3IgKGogPSAxOyBqIDw9IHk7IGorKykgeworCQkJem5leHQobG9jYWxm bik7CisJCQlpZiAoZGlyZmxnICYmICFpc2Rpcihsb2NhbGZuKSkKKwkJCSAgY29udGludWU7CisJ CQlmb3VuZCA9IDE7CisJCQlsZW4yID0gc3RybGVuKGxvY2FsZm4pOworCQkJZm9yIChjdXIgPSBj YzsKKwkJCSAgICAgY3VyIDwgbGVuICYmIGN1ciA8IGxlbjIgJiYgY3VyIDw9IG1pbjsKKwkJCSAg ICAgY3VyKysKKwkJCSAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1Mv MiBvciBXaW5kb3dzLCBjYXNlIGRvZXNuJ3QgbWF0dGVyICovCisJCQkgICAgaWYgKHRvbG93ZXIo ZmlsYnVmW2N1cl0pICE9IHRvbG93ZXIobG9jYWxmbltjdXJdKSkKKwkJCSAgICAgIGJyZWFrOwor CQkJfQorCQkJaWYgKGN1ciA8IG1pbikKKwkJCSAgbWluID0gY3VyOworCQkgICAgfQorCQkgICAg aWYgKCFmb3VuZCkKKwkJICAgICAgbWluID0gY2M7CisJCSAgICBmaWxidWZbbWluXSA9IE5VTDsK KwkJICAgIGlmIChtaW4gPiBjYykKKwkJICAgICAgaysrOworCQl9CisjZWxzZSAvKiBPUzIgKi8K KwkJZm9yIChpID0gY2M7IChjID0gZmlsYnVmW2ldKTsgaSsrKSB7CisJCSAgICBmb3IgKGogPSAx OyBqIDwgeTsgaisrKQorCQkgICAgICBpZiAobXRjaHNbal1baV0gIT0gYykgYnJlYWs7CisJCSAg ICBpZiAoaiA9PSB5KSBrKys7CisJCSAgICBlbHNlIGZpbGJ1ZltpXSA9IGZpbGJ1ZltpKzFdID0g TlVMOworCQl9CisjZW5kaWYgLyogT1MyICovCisKKworI2lmbmRlZiBWTVMKKwkJLyogaXNkaXIo KSBmdW5jdGlvbiByZXF1aXJlZCBmb3IgdGhpcyEgKi8KKwkJaWYgKHkgPT0gMSAmJiBpc2Rpcihm aWxidWYpKSB7IC8qIERvbnQgd2UgYWxyZWFkeSBrbm93IHRoaXM/ICovCisJCSAgICBpbnQgbGVu OworCQkgICAgbGVuID0gc3RybGVuKGZpbGJ1Zik7CisJCSAgICBpZiAobGVuID4gMCAmJiBsZW4g PCBBVE1CTCAtIDEpIHsKKwkJCWlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkgeworCQkJICAg IGZpbGJ1ZltsZW5dID0gZGlyc2VwOworCQkJICAgIGZpbGJ1ZltsZW4rMV0gPSBOVUw7CisJCQl9 CisJCSAgICB9CisvKgorICBBdCB0aGlzIHBvaW50LCBiZWZvcmUganVzdCBkb2luZyBwYXJ0aWFs IGNvbXBsZXRpb24sIHdlIHNob3VsZCBsb29rIGZpcnN0IHRvCisgIHNlZSBpZiB0aGUgZ2l2ZW4g ZGlyZWN0b3J5IGRvZXMgaW5kZWVkIGhhdmUgYW55IHN1YmRpcmVjdG9yaWVzIChkaXJmbGcpIG9y CisgIGZpbGVzICghZGlyZmxnKTsgaWYgaXQgZG9lc24ndCB3ZSBzaG91bGQgZG8gZnVsbCBjb21w bGV0aW9uLiAgT3RoZXJ3aXNlLCB0aGUKKyAgcmVzdWx0IGxvb2tzIGZ1bm55IHRvIHRoZSB1c2Vy IGFuZCAiPyIgYmxvd3MgdXAgdGhlIGNvbW1hbmQgZm9yIG5vIGdvb2QKKyAgcmVhc29uLgorKi8K KwkJICAgIHsKKwkJCWludCBmbGFncyA9IDA7CisJCQlmaWxidWZbbGVuKzFdID0gJyonOworCQkJ ZmlsYnVmW2xlbisyXSA9IE5VTDsKKwkJCWlmIChkaXJmbGcpIGZsYWdzID0gWlhfRElST05MWTsK KwkJCWNoaWxkcmVuID0gbnp4cGFuZChmaWxidWYsZmxhZ3MpOworCQkJZGVidWcoRjExMSwiY21p ZmkgY2hpbGRyZW4iLGZpbGJ1ZixjaGlsZHJlbik7CisJCQlmaWxidWZbbGVuKzFdID0gTlVMOwor CQkJbnp4cGFuZChmaWxidWYsZmxhZ3MpOyAvKiBSZXN0b3JlIHByZXZpb3VzIGxpc3QgKi8KKwkJ CWlmIChjaGlsZHJlbiA9PSAwKQorCQkJICBnb3RvIE5PU1VCRElSUzsKKwkJICAgIH0KKwkJICAg IGlmIChsZW4gKyAxID4gY2MpCisJCSAgICAgIGsrKzsKKwkJfQorICAgICAgICAgICAgICAgIC8q IEFkZCBkb3VibGVxdW90ZXMgaWYgdGhlcmUgYXJlIHNwYWNlcyBpbiB0aGUgbmFtZSAqLworCQl7 CisJCSAgICBpbnQgeDsKKwkJICAgIGlmIChxZmxhZykgeworCQkJeCA9IChxZmxhZyA9PSAnfScp OyAvKiAob3IgYnJhY2VzKSAqLworCQkgICAgfSBlbHNlIHsKKwkJCXggPSAhZGJscXVvOworCQkg ICAgfQorCQkgICAgaWYgKGZpbGJ1ZlswXSAhPSAnIicgJiYgZmlsYnVmWzBdICE9ICd7JykKKwkJ ICAgICAgayA9IGRxdW90ZShmaWxidWYsQVRNQkwseCk7CisJCX0KKyNlbmRpZiAvKiBWTVMgKi8K KwkJZGVidWcoRjExMSwiY21pZmkgUkVQQUlOVCBmaWxidWYiLGZpbGJ1ZixrKTsKKwkJaWYgKGsg PiAwKSB7CQkvKiBHb3QgbW9yZSBjaGFyYWN0ZXJzICovCisJCSAgICBkZWJ1ZyhGMTAxLCJjbWlm aSBSRVBBSU5UIGNjIiwiIixjYyk7CisJCSAgICBkZWJ1ZyhGMTAxLCJjbWlmaSBSRVBBSU5UIHhj IiwiIix4Yyk7CisJCSAgICBkZWJ1ZyhGMTEwLCJjbWlmaSBSRVBBSU5UIGJwLWNjIixicC1jYyww KTsKKwkJICAgIGRlYnVnKEYxMTAsImNtaWZpIFJFUEFJTlQgYnAteGMiLGJwLXhjLDApOworCQkg ICAgc3AgPSBmaWxidWYgKyBjYzsJLyogUG9pbnQgdG8gbmV3IG9uZXMgKi8KKwkJICAgIGlmIChx ZmxhZyB8fCBzdHJuY21wKGZpbGJ1ZixicC1jYyxjYykpIHsgLyogUmVwYWludD8gKi8KKwkJCWlu dCB4OworCQkJeCA9IGNjOworCQkJaWYgKHFmbGFnKSB4Kys7CisJCQlmb3IgKGkgPSAwOyBpIDwg eDsgaSsrKSB7CisJCQkgICAgY21kY2hhcmRlbCgpOyAvKiBCYWNrIHVwIG92ZXIgb2xkIHBhcnRp YWwgc3BlYyAqLworCQkJICAgIGJwLS07CisJCQl9CisJCQlzcCA9IGZpbGJ1ZjsJLyogUG9pbnQg dG8gbmV3IHdvcmQgc3RhcnQgKi8KKwkJCWRlYnVnKEYxMTAsImNtaWZpIGVyYXNlIG9rIixzcCww KTsKKwkJICAgIH0KKwkJICAgIGNjID0gazsJCS8qIEhvdyBtYW55IG5ldyBvbmVzIHdlIGp1c3Qg Z290ICovCisJCSAgICBwcmludGYoIiVzIixzcCk7CS8qIFByaW50IHRoZW0gKi8KKwkJICAgIHdo aWxlICgoKmJwKysgPSAqc3ArKykpIDsJLyogQ29weSB0byBjb21tYW5kIGJ1ZmZlciAqLworCQkg ICAgYnAtLTsJICAgIAkgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBOVUwgKi8KKwkJICAgIGRlYnVn KEYxMTAsImNtaWZpIHBhcnRpYWwgY21kYnVmIixjbWRidWYsMCk7CisJCSAgICBpZiAoc2V0YXRt KGZpbGJ1ZiwwKSA8IDApIHsKKwkJCXByaW50ZigiP1BhcnRpYWwgbmFtZSB0b28gbG9uZ1xuIik7 CisJCQlpZiAobnApIGZyZWUobnApOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGRl YnVnKEYxMTEsImNtaWZpIHBhcnRpYWwgYXRtYnVmIixhdG1idWYsY2MpOworCQkgICAgKnhwID0g YXRtYnVmOworCQl9CisjZW5kaWYgLyogTk9QQVJUSUFMICovCisJCWJsZWVwKEJQX1dBUk4pOwor CSAgICB9IGVsc2UgewkJCS8qIFVuaXF1ZSwgY29tcGxldGUgaXQuICAqLworI2lmbmRlZiBWTVMK KyNpZmRlZiBDS19UTVBESVIKKwkJLyogaXNkaXIoKSBmdW5jdGlvbiByZXF1aXJlZCBmb3IgdGhp cyEgKi8KKwkgICAgICBOT1NVQkRJUlM6CisJCWRlYnVnKEYxMTEsImNtaWZpIHVuaXF1ZSIsZmls YnVmLGNoaWxkcmVuKTsKKwkJaWYgKGlzZGlyKGZpbGJ1ZikgJiYgY2hpbGRyZW4gPiAwKSB7CisJ CSAgICBpbnQgbGVuOworCQkgICAgbGVuID0gc3RybGVuKGZpbGJ1Zik7CisJCSAgICBpZiAobGVu ID4gMCAmJiBsZW4gPCBBVE1CTCAtIDEpIHsKKwkJCWlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNl cCkgeworCQkJICAgIGZpbGJ1ZltsZW5dID0gZGlyc2VwOworCQkJICAgIGZpbGJ1ZltsZW4rMV0g PSBOVUw7CisJCQl9CisJCSAgICB9CisJCSAgICBzcCA9IGZpbGJ1ZiArIGNjOworCQkgICAgYmxl ZXAoQlBfV0FSTik7CisJCSAgICBwcmludGYoIiVzIixzcCk7CisJCSAgICBjYysrOworCQkgICAg d2hpbGUgKCgqYnArKyA9ICpzcCsrKSkgOworCQkgICAgYnAtLTsKKwkJICAgIGlmIChzZXRhdG0o ZmlsYnVmLDApIDwgMCkgeworCQkJcHJpbnRmKCI/RGlyZWN0b3J5IG5hbWUgdG9vIGxvbmdcbiIp OworCQkJaWYgKG5wKSBmcmVlKG5wKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBk ZWJ1ZyhGMTExLCJjbWlmaSBkaXJlY3RvcnkgYXRtYnVmIixhdG1idWYsY2MpOworCQkgICAgKnhw ID0gYXRtYnVmOworCQl9IGVsc2UgewkJLyogTm90IGEgZGlyZWN0b3J5IG9yIGRpcmZsZyAqLwor I2VuZGlmIC8qIENLX1RNUERJUiAqLworI2VuZGlmIC8qIFZNUyAqLworI2lmbmRlZiBWTVMJCQkJ LyogVk1TIGRpciBuYW1lcyBhcmUgc3BlY2lhbCAqLworI2lmbmRlZiBkYXRhZ2VuZXJhbAkJCS8q IFZTIGRpcm5hbWVzIG11c3Qgbm90IGVuZCBpbiAiOiIgKi8KKwkJICAgIGlmIChkaXJmbGcpIHsK KwkJCWludCBsZW47CisJCQlsZW4gPSBzdHJsZW4oZmlsYnVmKTsKKwkJCWlmIChsZW4gPiAwICYm IGxlbiA8IEFUTUJMIC0gMSkgeworCQkJICAgIGlmIChmaWxidWZbbGVuLTFdICE9IGRpcnNlcCkg eworCQkJCWZpbGJ1ZltsZW5dID0gZGlyc2VwOworCQkJCWZpbGJ1ZltsZW4rMV0gPSBOVUw7CisJ CQkgICAgfQorCQkJfQorCQkgICAgfQorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYg LyogVk1TICovCisJCSAgICBzcCA9IGZpbGJ1ZiArIGNjOwkvKiBQb2ludCBwYXN0IHdoYXQgdXNl ciB0eXBlZC4gKi8KKwkJICAgIHsKKwkJCWludCB4OworCQkJaWYgKHFmbGFnKSB7CisJCQkgICAg eCA9IChxZmxhZyA9PSAnfScpOworCQkJfSBlbHNlIHsKKwkJCSAgICB4ID0gIWRibHF1bzsKKwkJ CX0KKwkJCWlmIChmaWxidWZbMF0gIT0gJyInICYmIGZpbGJ1ZlswXSAhPSAneycpCisJCQkgIGRx dW90ZShmaWxidWYsQVRNQkwseCk7CisJCSAgICB9CisJCSAgICBpZiAocWZsYWcgfHwgc3RybmNt cChmaWxidWYsYnAtY2MsY2MpKSB7IC8qIFJlcGFpbnQ/ICovCisJCQlpbnQgeDsKKwkJCXggPSBj YzsKKwkJCWlmIChxZmxhZykgeCsrOworCQkJZm9yIChpID0gMDsgaSA8IHg7IGkrKykgeworCQkJ ICAgIGNtZGNoYXJkZWwoKTsgLyogQmFjayB1cCBvdmVyIG9sZCBwYXJ0aWFsIHNwZWMgKi8KKwkJ CSAgICBicC0tOworCQkJfQorCQkJc3AgPSBmaWxidWY7CS8qIFBvaW50IHRvIG5ldyB3b3JkIHN0 YXJ0ICovCisJCQlkZWJ1ZyhGMTExLCJjbWlmaSBhZnRlciBlcmFzZSBzcD0iLHNwLGNjKTsKKwkJ ICAgIH0KKwkJICAgIHByaW50ZigiJXMgIixzcCk7CS8qIFByaW50IHRoZSBjb21wbGV0ZWQgbmFt ZS4gKi8KKyNpZmRlZiBHRU1ET1MKKwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdF TURPUyAqLworCQkgICAgYWRkYnVmKHNwKTsJCS8qIEFkZCB0aGUgY2hhcmFjdGVycyB0byBjbWRi dWYuICovCisJCSAgICBpZiAoc2V0YXRtKGZpbGJ1ZiwwKSA8IDApIHsgLyogQW5kIHRvIGF0bWJ1 Zi4gKi8KKwkJCXByaW50ZigiP0NvbXBsZXRlZCBuYW1lIHRvbyBsb25nXG4iKTsKKwkJCWlmIChu cCkgZnJlZShucCk7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgaW53b3JkID0gY21m bGdzID0gMDsKKwkJICAgICp4cCA9IGJyc3RyaXAoYXRtYnVmKTsgLyogUmV0dXJuIHBvaW50ZXIg dG8gYXRtYnVmLiAqLworCQkgICAgaWYgKGRpcmZsZyAmJiAhaXNkaXIoKnhwKSkgeworCQkJcHJp bnRmKCI/Tm90IGEgZGlyZWN0b3J5IC0gJXNcbiIsIGZpbGJ1Zik7CisJCQlpZiAobnApIGZyZWUo bnApOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGlmIChucCkgZnJlZShucCk7Cisj aWZuZGVmIE5PTEFTVEZJTEUKKwkJICAgIG1ha2VzdHIoJmxhc3RmaWxlLHRtcGxhc3RmaWxlKTsK KyNlbmRpZgkvKiBOT0xBU1RGSUxFICovCisJCSAgICByZXR1cm4oMCk7CisjaWZuZGVmIFZNUwor I2lmZGVmIENLX1RNUERJUgorCQl9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjZW5kaWYgLyog Vk1TICovCisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgMzoJCQkvKiBRdWVzdGlvbiBt YXJrIC0gZmlsZSBtZW51IHdhbnRlZCAqLworCSAgICBpZiAoKnhobHAgPT0gTlVMKQorCSAgICAg IHByaW50ZihkaXJmbGcgPyAiIERpcmVjdG9yeSBuYW1lIiA6ICIgSW5wdXQgZmlsZSBzcGVjaWZp Y2F0aW9uIik7CisJICAgIGVsc2UKKwkgICAgICBwcmludGYoIiAlcyIseGhscCk7CisjaWZkZWYg R0VNRE9TCisJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURPUyAqLworCSAgICAv KiBJZiB1c2VyIHR5cGVkIGFuIG9wZW5pbmcgcXVvdGUgb3IgYnJhY2UsIGp1c3Qgc2tpcCBwYXN0 IGl0ICovCisKKwkgICAgaWYgKCoqeHAgPT0gJyInIHx8ICoqeHAgPT0gJ3snKSB7CisJCSp4cCA9 ICp4cCArIDE7CisJCXhjLS07CisJCWNjLS07CisJICAgIH0KKyNpZm5kZWYgTk9TUEwKKwkgICAg aWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKyNpZmRl ZiBET0NIS1ZBUgorCQljaGFyICpzID0gKnhwOwkJLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgdmFy aWFibGVzIGluICovCisJCXdoaWxlICgqcykgewkJLyogdGhlIHN0cmluZyBhbmQgaWYgc28sIGV4 cGFuZCB0aGVtICovCisJCSAgICBpZiAoY2hrdmFyKHMpKSB7CisjZW5kaWYgLyogRE9DSEtWQVIg Ki8KKwkJCXpxID0gYXR4YnVmOworCQkJYXR4biA9IENNREJMOworCQkJaWYgKCh4ID0gKCpmKSgq eHAsJnpxLCZhdHhuKSkgPCAwKSB7CisJCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJCSAgICBy ZXR1cm4oLTIpOworCQkJfQorI2lmZGVmIERPQ0hLVkFSCisJCSAgICAvKiByZWR1Y2UgY2MgYnkg bnVtYmVyIG9mIFxcIGNvbnN1bWVkIGJ5IGNvbnZlcnNpb24gKi8KKwkJICAgIC8qIGZ1bmN0aW9u IChuZWVkZWQgZm9yIE9TLzIsIHdoZXJlIFwgaXMgcGF0aCBzZXBhcmF0b3IpICovCisJCQljYyAt PSAoc3RybGVuKCp4cCkgLSBzdHJsZW4oYXR4YnVmKSk7CisjZW5kaWYgLyogRE9DSEtWQVIgKi8K KwkJCSp4cCA9IGF0eGJ1ZjsKKyNpZmRlZiBET0NIS1ZBUgorCQkJYnJlYWs7CisJCSAgICB9CisJ CSAgICBzKys7CisJCX0KKyNlbmRpZiAvKiBET0NIS1ZBUiAqLworCSAgICB9CisjZW5kaWYgLyog Tk9TUEwgKi8KKwkgICAgZGVidWcoRjExMSwiY21pZmkgPyAqeHAsIGNjIiwqeHAsY2MpOworCSAg ICBzcCA9ICp4cCArIGNjOwkJLyogSW5zZXJ0ICIqIiBhdCBlbmQgKi8KKyNpZmRlZiBkYXRhZ2Vu ZXJhbAorCSAgICAqc3ArKyA9ICcrJzsJCS8qIEluc2VydCArLCB0aGUgREcgd2lsZCBjYXJkICov CisjZWxzZQorCSAgICAqc3ArKyA9ICcqJzsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCSAg ICAqc3AtLSA9ICdcMCc7CisjaWZkZWYgR0VNRE9TCisJICAgIGlmICghIHN0cmNocigqeHAsICcu JykpCS8qIGFiZGUuZSAtPiBhYmNkZS5lKiAqLworCSAgICAgIHN0cmNhdCgqeHAsICIuKiIpOwkv KiBhYmMgLT4gYWJjKi4qICovCisjZW5kaWYgLyogR0VNRE9TICovCisJICAgIGRlYnVnKEYxMTAs ImNtaWZpID8gd2lsZCIsKnhwLDApOworCisJICAgIG56eG9wdHMgfD0gZGlyZmxnID8gWlhfRElS T05MWSA6IChkID8gMCA6IFpYX0ZJTE9OTFkpOworCisJICAgIGRlYnVnKEYxMDEsImNtaWZpIG1h dGNoZG90IiwiIixtYXRjaGRvdCk7CisJICAgIGlmIChtYXRjaGRvdCkgIG56eG9wdHMgfD0gWlhf TUFUQ0hET1Q7CisJICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKKwkg ICAgeSA9IG56eHBhbmQoKnhwLG56eG9wdHMpOworCSAgICBuZmlsZXMgPSB5OworCSAgICAqc3Ag PSAnXDAnOworCSAgICBpZiAoeSA9PSAwKSB7CisJCWlmIChub21zZykgeworCQkgICAgcHJpbnRm KCI6ICVzXG4iLGF0bWJ1Zik7CisJCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYpOwor CQkgICAgZmZsdXNoKHN0ZG91dCk7CisJCSAgICBpZiAobnApIGZyZWUobnApOworCQkgICAgcmV0 dXJuKC0xKTsKKwkJfSBlbHNlIHsKKyNpZmRlZiBDS1JPT1QKKwkJICAgIGlmIChja3Jvb3RlcnIp CisJCSAgICAgIHByaW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7CisJCSAgICBlbHNl CisjZW5kaWYgLyogQ0tST09UICovCisJCSAgICAgIHByaW50ZigiP05vICVzIG1hdGNoIC0gJXNc biIsCisJCQkgICAgIGRpcmZsZyA/ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOwor CQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkgICAgfSBl bHNlIGlmICh5IDwgMCkgeworI2lmZGVmIENLUk9PVAorCQlpZiAoY2tyb290ZXJyKQorCQkgIHBy aW50ZigiP09mZiBMaW1pdHM6ICVzXG4iLGF0bWJ1Zik7CisJCWVsc2UKKyNlbmRpZiAvKiBDS1JP T1QgKi8KKwkJICBwcmludGYoIj9Ub28gbWFueSAlcyBtYXRjaCAtICVzXG4iLAorCQkJIGRpcmZs ZyA/ICJkaXJlY3RvcmllcyIgOiAiZmlsZXMiLCBhdG1idWYpOworCQlpZiAobnApIGZyZWUobnAp OworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgeworCQlwcmludGYoIiwgb25lIG9mIHRoZSBm b2xsb3dpbmc6XG4iKTsKKwkJaWYgKGZpbGhlbHAoKGludCl5LCIiLCIiLDEsZGlyZmxnKSA8IDAp IHsKKwkJICAgIGlmIChucCkgZnJlZShucCk7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAg IH0KKwkgICAgcHJpbnRmKCIlcyVzIixjbXByb20sY21kYnVmKTsKKwkgICAgZmZsdXNoKHN0ZG91 dCk7CisJICAgIGJyZWFrOworI2VuZGlmIC8qIE1BQyAqLworCX0KKyNpZmRlZiBCU19ESVJTRVAK KyAgICAgICAgZGlybmFtZmxnID0gMTsKKyAgICAgICAgeCA9IGd0d29yZCgwKTsgICAgICAgICAg ICAgICAgICAvKiBObywgZ2V0IGEgd29yZCAqLworCWRpcm5hbWZsZyA9IDA7CisjZWxzZQorICAg ICAgICB4ID0gZ3R3b3JkKDApOyAgICAgICAgICAgICAgICAgIC8qIE5vLCBnZXQgYSB3b3JkICov CisjZW5kaWYgLyogQlNfRElSU0VQICovCisJKnhwID0gYXRtYnVmOworICAgIH0KK30KKworLyog IEMgTSBGIEwgRCAgLS0gIFBhcnNlIGFuIGFyYml0cmFyeSBmaWVsZCAgKi8KKy8qCisgIFJldHVy bnM6CisgICAgLTMgaWYgbm8gaW5wdXQgcHJlc2VudCB3aGVuIHJlcXVpcmVkLAorICAgIC0yIGlm IGZpZWxkIHRvbyBiaWcgZm9yIGJ1ZmZlciwKKyAgICAtMSBpZiByZXBhcnNlIG5lZWRlZCwKKyAg ICAgMCBvdGhlcndpc2UsIHhwIHBvaW50aW5nIHRvIHN0cmluZyByZXN1bHQuCisKKyAgTk9URTog R2xvYmFsIGZsYWcga2VlcGFsbGNoYXJzIHNheXMgd2hldGhlciB0aGlzIHJvdXRpbmUgc2hvdWxk IGJyZWFrIG9uIENSCisgIG9yIExGOiBuZWVkZWQgZm9yIE1JTlBVVCB0YXJnZXRzIGFuZCBERUNM QVJFIGluaXRpYWxpemVycywgd2hlcmUgd2Ugd2FudCB0bworICBrZWVwIGNvbnRyb2wgY2hhcmFj dGVycyBpZiB0aGUgdXNlciBzcGVjaWZpZXMgdGhlbSAoTWFyY2ggMjAwMykuICBJdCBtaWdodAor ICBoYXZlIGJlZW4gYmV0dGVyIHRvIGNoYW5nZSB0aGUgY2FsbGluZyBzZXF1ZW5jZSBidXQgdGhh dCB3YXMgbm90IHByYWN0aWNhbC4KKyovCitpbnQKK2NtZmxkKHhobHAseGRlZix4cCxmKSBjaGFy ICp4aGxwLCAqeGRlZiwgKip4cDsgeHhfc3RycCBmOyB7CisgICAgaW50IHgsIHhjOworICAgIGNo YXIgKnpxOworCisgICAgaW53b3JkID0gMDsJCQkJLyogSW5pdGlhbGl6ZSBjb3VudHMgJiBwb2lu dGVycyAqLworICAgIGNjID0gMDsKKyAgICB4YyA9IDA7CisgICAgKnhwID0gIiI7CisKKyAgICBk ZWJ1ZyhGMTEwLCJjbWZsZCB4ZGVmIDEiLHhkZWYsMCk7CisKKyAgICBpZiAoIXhobHApIHhobHAg PSAiIjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKyAgICBja3N0cm5jcHkoY21kZWZhdWx0 LHhkZWYsQ01ERUZBVUxUKTsgLyogQ29weSBkZWZhdWx0ICovCisgICAgeGRlZiA9IGNtZGVmYXVs dDsKKworICAgIGRlYnVnKEYxMTEsImNtZmxkIHhkZWYgMiIseGRlZixjbWZsZ3MpOworICAgIGRl YnVnKEYxMTEsImNtZmxkIGF0bWJ1ZiAxIixhdG1idWYseGMpOworCisgICAgaWYgKCh4ID0gY21m bGdzKSAhPSAxKSB7ICAgICAgICAgICAgLyogQWxyZWFkeSBjb25maXJtZWQ/ICovCisgICAgICAg IHggPSBndHdvcmQoMCk7ICAgICAgICAgICAgICAgICAgLyogTm8sIGdldCBhIHdvcmQgKi8KKyAg ICB9IGVsc2UgeworCWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsJLyogSWYgc28sIHVzZSBkZWZh dWx0LCBpZiBhbnkuICovCisJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOworCSAg ICByZXR1cm4oLTkpOworCX0KKyAgICB9CisgICAgKnhwID0gYXRtYnVmOyAgICAgICAgICAgICAg ICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLworICAgIGRlYnVnKEYxMTEsImNtZmxkIGF0 bWJ1ZiAyIixhdG1idWYsY21mbGdzKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHhjICs9 IGNjOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhlIGNoYXJhY3RlcnMuICovCisg ICAgICAgIGRlYnVnKEYxMTEsImNtZmxkIGd0d29yZCIsYXRtYnVmLHhjKTsKKyAgICAgICAgZGVi dWcoRjEwMSwiY21mbGQgeCIsIiIseCk7CisgICAgICAgIHN3aXRjaCAoeCkgeworCSAgY2FzZSAt OToKKwkgICAgcHJpbnRmKCJDb21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4iKTsKKwkgIGNhc2Ug LTQ6CQkJLyogRU9GICovCisJICBjYXNlIC0zOgkJCS8qIEVtcHR5LiAqLworCSAgY2FzZSAtMjoJ CQkvKiBPdXQgb2Ygc3BhY2UuICovCisJICBjYXNlIC0xOgkJCS8qIFJlcGFyc2UgbmVlZGVkICov CisJICAgIHJldHVybih4KTsKKwkgIGNhc2UgMToJCQkvKiBDUiAqLworCSAgY2FzZSAwOgkJCS8q IFNQICovCisJICAgIGRlYnVnKEYxMTEsImNtZmxkIDEiLGF0bWJ1Zix4Yyk7CisJICAgIGlmICh4 YyA9PSAwKSB7CQkvKiBJZiBubyBpbnB1dCwgcmV0dXJuIGRlZmF1bHQuICovCisJCWlmIChzZXRh dG0oeGRlZiwwKSA8IDApIHsKKwkJICAgIHByaW50ZigiP0RlZmF1bHQgdG9vIGxvbmdcbiIpOwor CQkgICAgcmV0dXJuKC05KTsKKwkJfQorCSAgICB9CisJICAgICp4cCA9IGF0bWJ1ZjsJCS8qIFBv aW50IHRvIHdoYXQgd2UgZ290LiAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWZsZCAyIixhdG1idWYs KChmKSA/IDEgOiAwKSk7CisJICAgIGlmIChmKSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0 aW9uIGlzIGdpdmVuICovCisJCXpxID0gYXR4YnVmOwkJLyogZW1wbG95IGl0IG5vdy4gKi8KKwkJ YXR4biA9IENNREJMOworCQlpZiAoKCpmKSgqeHAsJnpxLCZhdHhuKSA8IDApCisJCSAgcmV0dXJu KC0yKTsKKwkJZGVidWcoRjExMSwiY21mbGQgMyIsYXR4YnVmLHhjKTsKKwkJLyogUmVwbGFjZSBi eSBuZXcgdmFsdWUgLS0gZm9yIE1JTlBVVCBvbmx5IGtlZXAgYWxsIGNoYXJzICovCisJCWlmIChz ZXRhdG0oYXR4YnVmLGtlZXBhbGxjaGFycyA/IDM6MSkgPCAwKSB7IC8qIDE2IE1hciAyMDAzICov CisJCSAgICBwcmludGYoIlZhbHVlIHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJ CX0KKwkJKnhwID0gYXRtYnVmOworCSAgICB9CisJICAgIGRlYnVnKEYxMTEsImNtZmxkIDQiLGF0 bWJ1Zix4Yyk7CisJICAgIGlmICgqKnhwID09IE5VTCkgewkJLyogSWYgdmFyaWFibGUgZXZhbHVh dGVzIHRvIG51bGwgKi8KKwkJaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgeworCQkgICAgcHJpbnRm KCI/RGVmYXVsdCB0b28gbG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJCWlmICgq KnhwID09IE5VTCkgeCA9IC0zOyAvKiBJZiBzdGlsbCBlbXB0eSwgcmV0dXJuIC0zLiAqLworCSAg ICB9CisJICAgIGRlYnVnKEYxMTEsImNtZmxkIHJldHVybnMiLCp4cCx4KTsKKwkgICAgcmV0dXJu KHgpOworCSAgY2FzZSAyOgkJCS8qIEVTQyAqLworCSAgICBpZiAoeGMgPT0gMCAmJiAqeGRlZikg eworCQlwcmludGYoIiVzICIseGRlZik7IC8qIElmIGF0IGJlZ2lubmluZyBvZiBmaWVsZCwgKi8K KyNpZmRlZiBHRU1ET1MKKwkJZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogR0VNRE9TICovCisJ CWFkZGJ1Zih4ZGVmKTsJCS8qIFN1cHBseSBkZWZhdWx0LiAqLworCQlpbndvcmQgPSBjbWZsZ3Mg PSAwOworCQlpZiAoc2V0YXRtKHhkZWYsMCkgPCAwKSB7CisJCSAgICBwcmludGYoIj9EZWZhdWx0 IHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0gZWxzZQkJCS8qIFJldHVybiBh cyBpZiB3aG9sZSBmaWVsZCAqLworCQkgIHJldHVybigwKTsJCS8qIHR5cGVkLCBmb2xsb3dlZCBi eSBzcGFjZS4gKi8KKwkgICAgfSBlbHNlIHsKKwkJYmxlZXAoQlBfV0FSTik7CisJICAgIH0KKwkg ICAgYnJlYWs7CisJICBjYXNlIDM6CQkJLyogUXVlc3Rpb24gbWFyayAqLworCSAgICBkZWJ1ZyhG MTEwLCJjbWZsZCBRVUVTVElPTk1BUksiLGNtZGJ1ZiwwKTsKKwkgICAgaWYgKCp4aGxwID09IE5V TCkKKwkgICAgICBwcmludGYoIiBQbGVhc2UgY29tcGxldGUgdGhpcyBmaWVsZCIpOworCSAgICBl bHNlCisJICAgICAgcHJpbnRmKCIgJXMiLHhobHApOworCSAgICBwcmludGYoIlxuJXMlcyIsY21w cm9tLGNtZGJ1Zik7CisJICAgIGZmbHVzaChzdGRvdXQpOworCSAgICBicmVhazsKKyAgICAgICAg fQorCWRlYnVnKEYxMTEsImNtZmxkIGd0d29yZCBBIHgiLGNtZGJ1Zix4KTsKKwl4ID0gZ3R3b3Jk KDApOworCWRlYnVnKEYxMTEsImNtZmxkIGd0d29yZCBCIHgiLGNtZGJ1Zix4KTsKKyAgICB9Cit9 CisKKworLyogIEMgTSBUIFggVCAgLS0gIEdldCBhIHRleHQgc3RyaW5nLCBpbmNsdWRpbmcgY29u ZmlybWF0aW9uICAqLworCisvKgorICBQcmludCBoZWxwIG1lc3NhZ2UgJ3hobHAnIGlmID8gdHlw ZWQsIHN1cHBseSBkZWZhdWx0ICd4ZGVmJyBpZiBudWxsCisgIHN0cmluZyB0eXBlZC4gIFJldHVy bnM6CisKKyAgIC0xIGlmIHJlcGFyc2UgbmVlZGVkIG9yIGJ1ZmZlciBvdmVyZmxvd3MuCisgICAg MSBvdGhlcndpc2UuCisKKyAgd2l0aCBjbWZsZ3Mgc2V0IHRvIHJldHVybiBjb2RlLCBhbmQgeHAg cG9pbnRpbmcgdG8gcmVzdWx0IHN0cmluZy4KKyovCitpbnQKK2NtdHh0KHhobHAseGRlZix4cCxm KSBjaGFyICp4aGxwOyBjaGFyICp4ZGVmOyBjaGFyICoqeHA7IHh4X3N0cnAgZjsgeworCisgICAg aW50IHgsIGk7CisgICAgY2hhciAqeHgsICp6cTsKKyAgICBzdGF0aWMgaW50IHhjOworCisgICAg aWYgKCF4aGxwKSB4aGxwID0gIiI7CisgICAgaWYgKCF4ZGVmKSB4ZGVmID0gIiI7CisKKyAgICBj bWZsZGZsZ3MgPSAwOworCisgICAgY21kZWZhdWx0WzBdID0gTlVMOworICAgIGlmICgqeGRlZikK KyAgICAgIGNrc3RybmNweShjbWRlZmF1bHQseGRlZixDTURFRkFVTFQpOyAvKiBDb3B5IGRlZmF1 bHQgKi8KKyAgICB4ZGVmID0gY21kZWZhdWx0OworCisgICAgZGVidWcoRjEwMSwiY210eHQgY21m bGdzIiwiIixjbWZsZ3MpOworICAgIGlud29yZCA9IDA7CQkJCS8qIFN0YXJ0IGF0bWJ1ZiBjb3Vu dGVyIG9mZiBhdCAwICovCisgICAgY2MgPSAwOworICAgIGlmIChjbWZsZ3MgPT0gLTEpIHsgICAg ICAgICAgICAgICAgIC8qIElmIHJlcGFyc2luZywgKi8KKwkqeHAgPSBwcDsKKyAgICAgICAgeGMg PSAoaW50KXN0cmxlbigqeHApOwkJLyogZ2V0IGJhY2sgdGhlIHRvdGFsIHRleHQgbGVuZ3RoLCAq LworCWJwID0gKnhwOwkJCS8qIGFuZCBiYWNrIHVwIHRoZSBwb2ludGVycy4gKi8KKwlucCA9ICp4 cDsKKwlwcCA9ICp4cDsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBvdGhlcndpc2UsICovCisJLyogZGVidWcoRjEwMCwiY210eHQ6IGZyZXNoIHN0YXJ0IiwiIiww KTsgKi8KKyAgICAgICAgKnhwID0gIiI7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBm cmVzaC4gKi8KKyAgICAgICAgeGMgPSAwOworICAgIH0KKyAgICAqYXRtYnVmID0gTlVMOyAgICAg ICAgICAgICAgICAgICAgICAvKiBBbmQgZW1wdHkgdGhlIGF0b20gYnVmZmVyLiAqLworICAgIHJ0 aW1lcigpOwkJCQkvKiBSZXNldCB0aW1lciAqLworICAgIGlmICgoeCA9IGNtZmxncykgIT0gMSkg eworCWludCBkb25lID0gMDsKKwl3aGlsZSAoIWRvbmUpIHsKKwkgICAgeCA9IGd0d29yZCgwKTsJ CS8qIEdldCBmaXJzdCB3b3JkLiAqLworCSAgICAqeHAgPSBwcDsJCQkvKiBTYXZlIHBvaW50ZXIg dG8gaXQuICovCisJICAgIC8qIGRlYnVnKEYxMTEsImNtdHh0OiIsKnhwLGNjKTsgKi8KKwkgICAg aWYgKHggPT0gLTEwKSB7CisJCWlmIChndGltZXIoKSA+IHRpbWVsaW1pdCkgeworCQkgICAgLyog aWYgKCFxdWlldCkgcHJpbnRmKCI/VGltZWQgb3V0XG4iKTsgKi8KKwkJICAgIHJldHVybih4KTsK KwkJfQorCSAgICB9IGVsc2UKKwkgICAgICBkb25lID0gMTsKKwl9CisgICAgfQorICAgIHdoaWxl ICgxKSB7CQkJCS8qIExvb3AgZm9yIGVhY2ggd29yZCBpbiB0ZXh0LiAqLworICAgICAgICB4YyAr PSBjYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXIgY291bnQgZm9yIGFsbCB3b3Jkcy4g Ki8KKyAgICAgICAgLyogZGVidWcoRjExMSwiY210eHQgZ3R3b3JkIixhdG1idWYseGMpOyAqLwor ICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJjbXR4dCB4IiwiIix4KTsgKi8KKyAgICAgICAgc3dpdGNo ICh4KSB7CisJICBjYXNlIC0xMDoKKwkgICAgaWYgKGd0aW1lcigpID4gdGltZWxpbWl0KSB7Cisj aWZkZWYgSUtTRAorICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7CisgICAgICAg ICAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJc bklLU0QgSURMRSBUSU1FT1VUOiAlZCBzZWNcclxuIiwgdGltZWxpbWl0KTsKKyAgICAgICAgICAg ICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYg LyogSUtTRCAqLworCQkvKiBpZiAoIXF1aWV0KSBwcmludGYoIj9UaW1lZCBvdXRcbiIpOyAqLwor CQlyZXR1cm4oLTEwKTsKKwkgICAgfSBlbHNlIHsKKwkJeCA9IGd0d29yZCgwKTsKKwkJY29udGlu dWU7CisJICAgIH0KKwkgIGNhc2UgLTk6CQkJLyogQnVmZmVyIG92ZXJmbG93ICovCisJICAgIHBy aW50ZigiQ29tbWFuZCBvciBmaWVsZCB0b28gbG9uZ1xuIik7CisJICBjYXNlIC00OgkJCS8qIEVP RiAqLworI2lmZGVmIE1BQworCSAgY2FzZSAtMzoJCQkvKiBRdWl0L1RpbWVvdXQgKi8KKyNlbmRp ZiAvKiBNQUMgKi8KKwkgIGNhc2UgLTI6CQkJLyogT3ZlcmZsb3cgKi8KKwkgIGNhc2UgLTE6CQkJ LyogRGVsZXRpb24gKi8KKwkgICAgcmV0dXJuKHgpOworCSAgY2FzZSAwOgkJCS8qIFNwYWNlICov CisJICAgIHhjKys7CQkJLyogSnVzdCBjb3VudCBpdCAqLworCSAgICBicmVhazsKKwkgIGNhc2Ug MToJCQkvKiBDUiBvciBMRiAqLworCSAgICBpZiAoeGMgPT0gMCkgKnhwID0geGRlZjsKKwkgICAg aWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZlcnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwkJY2hh ciAqIHN4ID0gYXR4YnVmOworCQl6cSA9IGF0eGJ1ZjsJCS8qIFBvaW50IHRvIHRoZSBleHBhbnNp b24gYnVmZmVyICovCisJCWF0eG4gPSBDTURCTDsJCS8qIHNwZWNpZnkgaXRzIGxlbmd0aCAqLwor CQkvKiBkZWJ1ZyhGMTExLCJjbXR4dCBjYWxsaW5nICgqZikiLCp4cCxhdHhidWYpOyAqLworCQlp ZiAoKHggPSAoKmYpKCp4cCwmenEsJmF0eG4pKSA8IDApIHJldHVybigtMik7CisJCXN4ID0gYXR4 YnVmOworI2lmbmRlZiBDT01NRU5UCisJCWNjID0gMDsKKwkJd2hpbGUgKCpzeCsrKSBjYysrOwkv KiAoZmFzdGVyIHRoYW4gY2FsbGluZyBzdHJsZW4pICovCisjZWxzZQorCQljYyA9IChpbnQpc3Ry bGVuKGF0eGJ1Zik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkvKiBTaG91bGQgYmUgZXF1YWwg dG8gKENNREJMIC0gYXR4bikgYnV0IGlzbid0IGFsd2F5cy4gKi8KKwkJLyogV2h5IG5vdD8gKi8K KwkJaWYgKGNjIDwgMSkgewkJLyogTm90aGluZyBpbiBleHBhbnNpb24gYnVmZmVyPyAqLworCQkg ICAgKnhwID0geGRlZjsJCS8qIFBvaW50IHRvIGRlZmF1bHQgc3RyaW5nIGluc3RlYWQuICovCisj aWZuZGVmIENPTU1FTlQKKwkJICAgIHN4ID0geGRlZjsKKwkJICAgIHdoaWxlICgqc3grKykgY2Mr KzsJLyogKGZhc3RlciB0aGFuIGNhbGxpbmcgc3RybGVuKSAqLworI2Vsc2UKKwkJICAgIGNjID0g c3RybGVuKHhkZWYpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJfSBlbHNlIHsJCS8qIEV4cGFu c2lvbiBmdW5jdGlvbiBnb3Qgc29tZXRoaW5nICovCisJCSAgICAqeHAgPSBhdHhidWY7CS8qIHJl dHVybiBwb2ludGVyIHRvIGl0LiAqLworCQl9CisJCWRlYnVnKEYxMTEsImNtdHh0ICgqZikiLCp4 cCxjYyk7CisJICAgIH0gZWxzZSB7CQkJLyogTm8gZXhwYW5zaW9uIGZ1bmN0aW9uICovCisjaWZu ZGVmIENPTU1FTlQKKwkJLyogQXZvaWQgYSBzdHJsZW4oKSBjYWxsICovCisJCXh4ID0gKnhwOwor CQljYyA9IDA7CisJCXdoaWxlICgqeHgrKykgY2MrKzsKKyNlbHNlCisJCS8qIE5PISAgeGMgaXMg YXBwYXJlbnRseSBub3QgYWx3YXlzIHNldCBhcHByb3ByaWF0ZWx5ICovCisJCWNjID0geGM7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICB9CisJICAgIHh4ID0gKnhwOworI2lmZGVmIENPTU1F TlQKKwkgICAgLyogc3RybGVuKCkgbm8gbG9uZ2VyIG5lZWRlZCAqLworCSAgICBmb3IgKGkgPSAo aW50KXN0cmxlbih4eCkgLSAxOyBpID4gMDsgaS0tKQorI2Vsc2UKKwkgICAgZm9yIChpID0gY2Mg LSAxOyBpID4gMDsgaS0tKQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgICBpZiAoeHhbaV0g IT0gU1ApCQkvKiBUcmltIHRyYWlsaW5nIGJsYW5rcyAqLworCQlicmVhazsKKwkgICAgICBlbHNl CisJCXh4W2ldID0gTlVMOworCSAgICByZXR1cm4oeCk7CisJICBjYXNlIDI6CQkJLyogRVNDICov CisJICAgIGlmICh4YyA9PSAwKSB7CQkvKiBOb3RoaW5nIHR5cGVkIHlldCAqLworCQlpZiAoKnhk ZWYpIHsJCS8qIEhhdmUgYSBkZWZhdWx0IGZvciB0aGlzIGZpZWxkPyAqLworCQkgICAgcHJpbnRm KCIlcyAiLHhkZWYpOwkvKiBZZXMsIHN1cHBseSBpdCAqLworCQkgICAgaW53b3JkID0gY21mbGdz ID0gMDsKKyNpZmRlZiBHRU1ET1MKKwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdF TURPUyAqLworCQkgICAgY2MgPSBhZGRidWYoeGRlZik7CisJCX0gZWxzZSBibGVlcChCUF9XQVJO KTsJLyogTm8gZGVmYXVsdCAqLworCSAgICB9IGVsc2UgewkJCS8qIEFscmVhZHkgaW4gZmllbGQg Ki8KKwkJaW50IHg7IGNoYXIgKnA7CisJCXggPSBzdHJsZW4oYXRtYnVmKTsKKwkJaWYgKGNrc3Ry Y21wKGF0bWJ1Zix4ZGVmLHgsMCkpIHsgICAgLyogTWF0Y2hlcyBkZWZhdWx0PyAqLworCQkgICAg YmxlZXAoQlBfV0FSTik7CSAgICAgICAgICAgIC8qIE5vICovCisJCX0gZWxzZSBpZiAoKGludClz dHJsZW4oeGRlZikgPiB4KSB7IC8qIFllcyAqLworCQkgICAgcCA9IHhkZWYgKyB4OworCQkgICAg cHJpbnRmKCIlcyAiLCBwKTsKKyNpZmRlZiBHRU1ET1MKKwkJICAgIGZmbHVzaChzdGRvdXQpOwor I2VuZGlmIC8qIEdFTURPUyAqLworCQkgICAgYWRkYnVmKHApOworCQkgICAgaW53b3JkID0gY21m bGdzID0gMDsKKwkJICAgIGRlYnVnKEYxMTAsImNtdHh0OiBhZGRidWYiLGNtZGJ1ZiwwKTsKKwkJ fSBlbHNlIHsKKwkJICAgIGJsZWVwKEJQX1dBUk4pOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7 CisJICBjYXNlIDM6CQkJLyogUXVlc3Rpb24gTWFyayAqLworCSAgICBpZiAoKnhobHAgPT0gTlVM KQorCSAgICAgIHByaW50ZigiIFRleHQgc3RyaW5nIik7CisJICAgIGVsc2UKKwkgICAgICBwcmlu dGYoIiAlcyIseGhscCk7CisJICAgIHByaW50ZigiXG4lcyVzIixjbXByb20sY21kYnVmKTsKKwkg ICAgZmZsdXNoKHN0ZG91dCk7CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgcHJpbnRm KCI/VW5leHBlY3RlZCByZXR1cm4gY29kZSBmcm9tIGd0d29yZCgpIC0gJWRcbiIseCk7CisJICAg IHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgeCA9IGd0d29yZCgwKTsKKyAgICB9Cit9 CisKKy8qICBDIE0gSyBFIFkgIC0tICBQYXJzZSBhIGtleXdvcmQgICovCisKKy8qCisgQ2FsbCB3 aXRoOgorICAgdGFibGUgICAgLS0gIGtleXdvcmQgdGFibGUsIGluICdzdHJ1Y3Qga2V5dGFiJyBm b3JtYXQ7CisgICBuICAgICAgICAtLSAgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGFibGU7CisgICB4 aGxwICAgICAtLSAgcG9pbnRlciB0byBoZWxwIHN0cmluZzsKKyAgIHhkZWYgICAgIC0tICBwb2lu dGVyIHRvIGRlZmF1bHQga2V5d29yZDsKKyAgIGYgICAgICAgIC0tICBzdHJpbmcgcHJlcHJvY2Vz c2luZyBmdW5jdGlvbiAoZS5nLiB0byBldmFsdWF0ZSB2YXJpYWJsZXMpCisgICBwbXNnICAgICAt LSAgMCA9IGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgMSA9IHBy aW50IGVycm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgMiA9IGluY2x1ZGUgQ01fSExQIGtl eXdvcmRzIGV2ZW4gaWYgaW52aXNpYmxlCisgICAgICAgICAgICAgICAgMyA9IDErMgorICAgICAg ICAgICAgICAgIDQgPSBwYXJzZSBhIHN3aXRjaCAoa2V5d29yZCBwb3NzaWJseSBlbmRpbmcgaW4g OiBvciA9KQorICAgICAgICAgICAgICAgIDggPSBkb24ndCBzdHJpcCBjb21tZW50cyAodXNlZCwg ZS5nLiwgZm9yICJoZWxwICMiKQorIFJldHVybnM6CisgICAtMyAgICAgICAtLSAgbm8gaW5wdXQg c3VwcGxpZWQgYW5kIG5vIGRlZmF1bHQgYXZhaWxhYmxlCisgICAtMiAgICAgICAtLSAgaW5wdXQg ZG9lc24ndCB1bmlxdWVseSBtYXRjaCBhIGtleXdvcmQgaW4gdGhlIHRhYmxlCisgICAtMSAgICAg ICAtLSAgdXNlciBkZWxldGVkIHRvbyBtdWNoLCBjb21tYW5kIHJlcGFyc2UgcmVxdWlyZWQKKyAg ICBuID49IDAgIC0tICB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgga2V5d29yZAorKi8KKworLyoKKyAg RnJvbnQgZW5kcyBmb3IgY21rZXkyKCk6IAorICBjbWtleSgpICAtIFRoZSBub3JtYWwga2V5d29y ZCBwYXJzZXIKKyAgY21rZXl4KCkgLSBMaWtlIGNta2V5KCkgYnV0IHN1cHByZXNzZXMgZXJyb3Ig bWVzc2FnZXMKKyAgY21zd2koKSAgLSBTd2l0Y2ggcGFyc2VyCisqLworaW50CitjbWtleSh0YWJs ZSxuLHhobHAseGRlZixmKQorLyogY21rZXkgKi8gIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50 IG47IGNoYXIgKnhobHAsICp4ZGVmOyB4eF9zdHJwIGY7IHsKKyAgICByZXR1cm4oY21rZXkyKHRh YmxlLG4seGhscCx4ZGVmLCIiLGYsMSkpOworfQoraW50CitjbWtleXgodGFibGUsbix4aGxwLHhk ZWYsZikKKy8qIGNta2V5eCAqLyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAq eGhscCwgKnhkZWY7IHh4X3N0cnAgZjsgeworICAgIHJldHVybihjbWtleTIodGFibGUsbix4aGxw LHhkZWYsIiIsZiwwKSk7Cit9CitpbnQKK2Ntc3dpKHRhYmxlLG4seGhscCx4ZGVmLGYpCisvKiBj bXN3aSAqLyAgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBpbnQgbjsgY2hhciAqeGhscCwgKnhkZWY7 IHh4X3N0cnAgZjsgeworICAgIHJldHVybihjbWtleTIodGFibGUsbix4aGxwLHhkZWYsIiIsZiw0 KSk7Cit9CisKK2ludAorY21rZXkyKHRhYmxlLG4seGhscCx4ZGVmLHRvayxmLHBtc2cpCisgICAg c3RydWN0IGtleXRhYiB0YWJsZVtdOworICAgIGludCBuOworICAgIGNoYXIgKnhobHAsICp4ZGVm OworICAgIGNoYXIgKnRvazsKKyAgICB4eF9zdHJwIGY7CisgICAgaW50IHBtc2c7Cit7IC8qIGNt a2V5MiAqLworICAgIGV4dGVybiBpbnQgaGF2ZXRva2VuOworICAgIGludCBpLCB0bCwgeSwgeiA9 IDAsIHp6LCB4Yywgd29yZGxlbiA9IDAsIGNtc3dpdGNoOworICAgIGNoYXIgKnhwLCAqenE7CisK KyAgICBpZiAoIXhobHApIHhobHAgPSAiIjsKKyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKwor ICAgIGNtZmxkZmxncyA9IDA7CisgICAgaWYgKCF0YWJsZSkgeworCXByaW50ZigiP0tleXdvcmQg dGFibGUgbWlzc2luZ1xuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgdGwgPSAoaW50KXN0 cmxlbih0b2spOworCisgICAgaW53b3JkID0geGMgPSBjYyA9IDA7CQkvKiBDbGVhciBjaGFyYWN0 ZXIgY291bnRlcnMuICovCisgICAgY21zd2l0Y2ggPSBwbXNnICYgNDsJCS8qIEZsYWcgZm9yIHBh cnNpbmcgYSBzd2l0Y2ggKi8KKworICAgIGRlYnVnKEYxMDEsImNta2V5OiBwbXNnIiwiIixwbXNn KTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWtleTogY21mbGdzIiwiIixjbWZsZ3MpOworICAgIGRlYnVn KEYxMDEsImNta2V5OiBjbXN3aXRjaCIsIiIsY21zd2l0Y2gpOworICAgIC8qIGRlYnVnKEYxMDEs ImNta2V5OiBjbWRidWYiLCIiLGNtZGJ1Zik7Ki8KKworICAgIHBwdm5hbWJ1ZlswXSA9IE5VTDsK KworICAgIGlmICgoenogPSBjbWZsZ3MpID09IDEpIHsJCS8qIENvbW1hbmQgYWxyZWFkeSBlbnRl cmVkPyAqLworCWlmIChzZXRhdG0oeGRlZiwwKSA8IDApIHsJLyogWWVzLCBjb3B5IGRlZmF1bHQg aW50byBhdG9tIGJ1ZiAqLworCSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKKwkg ICAgcmV0dXJuKC05KTsKKwl9CisgICAgICAgIHJ0aW1lcigpOwkJCSAvKiBSZXNldCB0aW1lciAq LworICAgIH0gZWxzZSB7CQkJCSAvKiBPdGhlcndpc2UgZ2V0IGEgY29tbWFuZCB3b3JkICovCisg ICAgICAgIHJ0aW1lcigpOwkJCSAvKiBSZXNldCB0aW1lciAqLworCWlmIChwbXNnICYgOCkJCQkg LyogOCBpcyBmb3IgcGFyc2luZyBIRUxQIHRva2VucyAqLworCSAgenogPSBndHdvcmQoNCk7CisJ ZWxzZQorCSAgenogPSBndHdvcmQoKHBtc2cgPT0gNCkgPyAxIDogMCk7CisgICAgfQorCisgICAg ZGVidWcoRjEwMSwiY21rZXkgdGFibGUgbGVuZ3RoIiwiIixuKTsKKyAgICBkZWJ1ZyhGMTAxLCJj bWtleSBjbWZsZ3MiLCIiLGNtZmxncyk7CisgICAgZGVidWcoRjEwMSwiY21rZXkgY2MiLCIiLGNj KTsKKworICAgIHdoaWxlICgxKSB7CisJeGMgKz0gY2M7CisJZGVidWcoRjExMSwiY21rZXkgZ3R3 b3JkIHhjIixhdG1idWYseGMpOworCWRlYnVnKEYxMDEsImNta2V5IGd0d29yZCB6eiIsIiIsenop OworCisJc3dpdGNoICh6eikgeworCSAgY2FzZSAtMTA6CQkJLyogVGltZW91dCAqLworCSAgICBp ZiAoZ3RpbWVyKCkgPCB0aW1lbGltaXQpIHsKKwkJaWYgKHBtc2cgJiA4KQkJLyogOCBpcyBmb3Ig cGFyc2luZyBIRUxQIHRva2VucyAqLworCQkgIHp6ID0gZ3R3b3JkKDQpOworCQllbHNlCisJCSAg enogPSBndHdvcmQoKHBtc2cgPT0gNCkgPyAxIDogMCk7CisJCWNvbnRpbnVlOworCSAgICB9IGVs c2UgeworI2lmZGVmIElLU0QKKyAgICAgICAgICAgICAgICBleHRlcm4gaW50IGluc2VydmVyOwor ICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIlxyXG5JS1NEIElETEUgVElNRU9VVDogJWQgc2VjXHJcbiIsIHRpbWVsaW1pdCk7CisgICAg ICAgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7CisgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIElLU0QgKi8KKwkJcmV0dXJuKC0xMCk7CisgICAgICAgICAgICB9CisJICBjYXNl IC01OgorCSAgICByZXR1cm4oY21mbGdzID0gMCk7CisJICBjYXNlIC05OgorCSAgICBwcmludGYo IkNvbW1hbmQgb3IgZmllbGQgdG9vIGxvbmdcbiIpOworCSAgY2FzZSAtNDoJCQkvKiBFT0YgKi8K KwkgIGNhc2UgLTM6CQkJLyogTnVsbCBDb21tYW5kL1F1aXQvVGltZW91dCAqLworCSAgY2FzZSAt MjoJCQkvKiBCdWZmZXIgb3ZlcmZsb3cgKi8KKwkgIGNhc2UgLTE6CQkJLyogT3IgdXNlciBkaWQg c29tZSBkZWxldGluZy4gKi8KKwkgICAgcmV0dXJuKGNtZmxncyA9IHp6KTsKKworCisJICBjYXNl IDE6CQkJLyogQ1IgKi8KKwkgIGNhc2UgMDoJCQkvKiBVc2VyIHRlcm1pbmF0ZWQgd29yZCB3aXRo IHNwYWNlICovCisJICBjYXNlIDQ6CQkJLyogb3Igc3dpdGNoIGVuZGluZyBpbiA6IG9yID0gKi8K KwkgICAgd29yZGxlbiA9IGNjOwkJLyogTGVuZ3RoIGlmIG5vIGNvbnZlcnNpb24gKi8KKwkgICAg aWYgKGNjID09IDApIHsJCS8qIFN1cHBseSBkZWZhdWx0IGlmIHdlIGdvdCBub3RoaW5nICovCisJ CWlmICgod29yZGxlbiA9IHNldGF0bSh4ZGVmLCh6eiA9PSA0KSA/IDIgOiAwKSkgPCAwKSB7CisJ CSAgICBwcmludGYoIj9EZWZhdWx0IHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJ CX0KKwkgICAgfQorCSAgICBpZiAoenogPT0gMSAmJiBjYyA9PSAwKQkvKiBSZXF1aXJlZCBmaWVs ZCBtaXNzaW5nICovCisJICAgICAgcmV0dXJuKC0zKTsKKworCSAgICBpZiAoZikgewkJCS8qIElm IGEgY29udmVyc2lvbiBmdW5jdGlvbiBpcyBnaXZlbiAqLworCQljaGFyICogcDI7CisJCXpxID0g YXR4YnVmOwkJLyogYXBwbHkgaXQgKi8KKwkJcDIgPSBhdHhidWY7CisJCWF0eG4gPSBDTURCTDsK KwkJaWYgKCgqZikoYXRtYnVmLCZ6cSwmYXR4bikgPCAwKSByZXR1cm4oLTIpOworCQlkZWJ1ZyhG MTEwLCJjbWtleSBhdHhidWYgYWZ0ZXIgKmYiLGF0eGJ1ZiwwKTsKKwkJaWYgKCEqcDIpCQkvKiBT dXBwbHkgZGVmYXVsdCBpZiB3ZSBnb3Qgbm90aGluZyAqLworCQkgIHAyID0geGRlZjsKKwkJY2tz dHJuY3B5KHBwdm5hbWJ1ZixhdG1idWYsUFBWTEVOKTsKKwkJaWYgKCh3b3JkbGVuID0gc2V0YXRt KHAyLCh6eiA9PSA0KSA/IDIgOiAwKSkgPCAwKSB7CisJCSAgICBwcmludGYoIkV2YWx1YXRlZCBr ZXl3b3JkIHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKyNpZmRlZiBNX1VO R1cKKwkJLyoKKwkJICBUaGlzIGJpdCBsZXRzIHVzIHNhdmUgbW9yZSB0aGFuIG9uZSAid29yZCIu CisJCSAgRm9yIGV4YW1wbGUsICJkZWZpbmUgXCV4IGVjaG8gb25lIHR3byB0aHJlZSIsICJcJXgi LgorCQkgIEl0IHdvcmtzIHRvbywgYnV0IGl0IGJyZWFrcyBsYWJlbHMsIGFuZCB0aGVyZWZvcmUK KwkJICBXSElMRSBhbmQgRk9SIGxvb3BzLCBldGMuCisJCSovCisJCWlmIChwMlt3b3JkbGVuXSA+ PSBTUCkgeworCQkgICAgcDIgKz0gd29yZGxlbjsKKwkJICAgIHdoaWxlICgqcDIgPT0gU1ApIHAy Kys7CisJCSAgICBpZiAoKnAyKSB7CisJCQl1bmd3b3JkKCk7CisJCQlwcCA9IHAyOworCQkgICAg fQorCQl9CisjZW5kaWYgLyogTV9VTkdXICovCisJICAgIH0KKyNpZmRlZiBDT01NRU5UCQkJCS8q IF5eXiAqLworCSAgICBpZiAoY21zd2l0Y2ggJiYgKmF0bWJ1ZiAhPSAnLycpIHsKKwkJaWYgKHBt c2cgJiAxKSB7CisJCSAgICBibGVlcChCUF9GQUlMKTsKKyAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCI/Tm90IGEgc3dpdGNoIC0gJXNcbiIsYXRtYnVmKTsKKwkJfQorCQljbWZsZ3MgPSAtMjsK KwkJcmV0dXJuKC02KTsKKwkgICAgfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKwkgICAgaWYgKGNt c3dpdGNoKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgd29yZGxlbjsgaSsrKSB7CisJ CSAgICBpZiAoYXRtYnVmW2ldID09ICc6JyB8fCBhdG1idWZbaV0gPT0gJz0nKSB7CisJCQlicmtj aGFyID0gYXRtYnVmW2ldOworCQkJYXRtYnVmW2ldID0gTlVMOworCQkJYnJlYWs7CisJCSAgICB9 CisJCX0KKwkgICAgfQorCisjaWZkZWYgVE9LUFJFQ0hFQ0sKKy8qIFRoaXMgd2FzIGFuIGVmZmVj dGl2ZSBvcHRpbWl6YXRpb24gYnV0IGl0IGJyZWFrcyBzb21ldGltZXMgb24gbGFiZWxzLiAqLwor CSAgICBpZiAodGwgJiYgIWlzYWxwaGEoYXRtYnVmWzBdKSkgeyAvKiBQcmVjaGVjayBmb3IgdG9r ZW4gKi8KKwkJZm9yIChpID0gMDsgaSA8IHRsOyBpKyspIHsgLyogU2F2ZSBmdW5jdGlvbiBjYWxs IHRvIGNrc3RyY2hyICovCisJCSAgICBpZiAodG9rW2ldID09IGF0bWJ1ZlswXSkgeworCQkJZGVi dWcoRjAwMCwiY21rZXkgdG9rZW46IixhdG1idWYsKmF0bWJ1Zik7CisJCQl1bmd3b3JkKCk7ICAv KiBQdXQgYmFjayB0aGUgZm9sbG93aW5nIHdvcmQgKi8KKwkJCXJldHVybigtNSk7IC8qIFNwZWNp YWwgcmV0dXJuIGNvZGUgZm9yIHRva2VuICovCisJCSAgICB9CisJCX0KKwkgICAgfQorI2VuZGlm IC8qIFRPS1BSRUNIRUNLICovCisKKwkgICAgeSA9IGxvb2t1cCh0YWJsZSxhdG1idWYsbiwmeik7 IC8qIExvb2sgdXAgd29yZCBpbiB0aGUgdGFibGUgKi8KKwkgICAgZGVidWcoRjExMSwiY21rZXkg bG9va3VwIixhdG1idWYseSk7CisJICAgIGRlYnVnKEYxMDEsImNta2V5IHp6IiwiIix6eik7CisJ ICAgIGRlYnVnKEYxMDEsImNta2V5IGNtZmxncyIsIiIsY21mbGdzKTsKKwkgICAgZGVidWcoRjEw MSwiY21rZXkgY3JmbGFnIiwiIixjcmZsYWcpOworCSAgICBzd2l0Y2ggKHkpIHsKKwkgICAgICBj YXNlIC0zOgkJCS8qIE5vdGhpbmcgdG8gbG9vayB1cCAqLworCQlicmVhazsKKwkgICAgICBjYXNl IC0yOgkJCS8qIEFtYmlndW91cyAqLworCQljbWZsZ3MgPSAtMjsKKwkJaWYgKHBtc2cgJiAxKSB7 CisJCSAgICBibGVlcChCUF9GQUlMKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QW1i aWd1b3VzIC0gJXNcbiIsYXRtYnVmKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkJcmV0dXJu KC0yKTsKKwkgICAgICBjYXNlIC0xOgkJCS8qIE5vdCBmb3VuZCBhdCBhbGwgKi8KKyNpZm5kZWYg VE9LUFJFQ0hFQ0sKKwkJaWYgKHRsKSB7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykg LyogQ2hlY2sgZm9yIHRva2VuICovCisJCSAgICAgIGlmICh0b2tbaV0gPT0gKmF0bWJ1ZikgeyAv KiBHb3Qgb25lICovCisJCQkgIGRlYnVnKEYwMDAsImNta2V5IHRva2VuOiIsYXRtYnVmLCphdG1i dWYpOworCQkJICB1bmd3b3JkKCk7ICAvKiBQdXQgYmFjayB0aGUgZm9sbG93aW5nIHdvcmQgKi8K KwkJCSAgcmV0dXJuKC01KTsgLyogU3BlY2lhbCByZXR1cm4gY29kZSBmb3IgdG9rZW4gKi8KKwkJ ICAgICAgfQorCQl9CisjZW5kaWYgLyogVE9LUFJFQ0hFQ0sgKi8KKworCQlpZiAodGwgPT0gMCkg ewkJLyogTm8gdG9rZW5zIHdlcmUgaW5jbHVkZWQgKi8KKyNpZmRlZiBPUzIKKwkJICAgIC8qIElu IE9TLzIgYW5kIFdpbmRvd3MsIGFsbG93IGZvciBhIGRpc2sgbGV0dGVyIGxpa2UgRE9TICovCisJ CSAgICBpZiAoaXNhbHBoYSgqYXRtYnVmKSAmJiAqKGF0bWJ1ZisxKSA9PSAnOicpCisJCSAgICAg IHJldHVybigtNyk7CisjZW5kaWYgLyogT1MyICovCisJCSAgICBpZiAoKHBtc2cgJiAxKSAmJiAh cXVpZXQpIHsKKwkJCWJsZWVwKEJQX0ZBSUwpOworCQkJcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0 Y2ggLSAlc1xuIixhdG1idWYpOyAvKiBjbWtleSAqLworCQkgICAgfQorCQkgICAgcmV0dXJuKGNt ZmxncyA9IC05KTsKKwkJfSBlbHNlIHsKKwkJICAgIGlmIChjbWZsZ3MgPT0gMSB8fCBjbXN3aXRj aCkgLyogY21rZXkyIG9yIGNtc3dpICovCisJCSAgICAgIHJldHVybihjbWZsZ3MgPSAtNik7CisJ CSAgICBlbHNlCisJCSAgICAgIHJldHVybihjbWZsZ3MgPSAtMik7CisJCSAgICAvKiBUaGUgLTYg Y29kZSBpcyB0byBsZXQgY2FsbGVyIHRyeSBhbm90aGVyIHRhYmxlICovCisJCX0KKwkJYnJlYWs7 CisJICAgICAgZGVmYXVsdDoKKyNpZmRlZiBDS19SRUNBTEwKKwkJaWYgKHRlc3QodGFibGVbel0u ZmxncyxDTV9OT1IpKSBub19yZWNhbGwgPSAxOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCQlp ZiAoenogPT0gNCkKKwkJICBzd2FyZyA9IDE7CisJCWNta3dmbGdzID0gdGFibGVbel0uZmxnczsK KwkJYnJlYWs7CisJICAgIH0KKwkgICAgcmV0dXJuKHkpOworCisJICBjYXNlIDI6CQkJLyogVXNl ciB0ZXJtaW5hdGVkIHdvcmQgd2l0aCBFU0MgKi8KKwkgICAgZGVidWcoRjEwMSwiY21rZXkgRXNj IGNjIiwiIixjYyk7CisgICAgICAgICAgICBpZiAoY2MgPT0gMCkgeworCQlpZiAoKnhkZWYgIT0g TlVMKSB7ICAgICAvKiBOb3RoaW5nIGluIGF0bWJ1ZiAqLworCQkgICAgcHJpbnRmKCIlcyAiLHhk ZWYpOyAvKiBTdXBwbHkgZGVmYXVsdCBpZiBhbnkgKi8KKyNpZmRlZiBHRU1ET1MKKwkJICAgIGZm bHVzaChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURPUyAqLworCQkgICAgYWRkYnVmKHhkZWYpOwor CQkgICAgaWYgKHNldGF0bSh4ZGVmLDApIDwgMCkgeworCQkJcHJpbnRmKCI/RGVmYXVsdCB0b28g bG9uZ1xuIik7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgaW53b3JkID0gY21mbGdz ID0gMDsKKwkJICAgIGRlYnVnKEYxMTEsImNta2V5OiBkZWZhdWx0IixhdG1idWYsY2MpOworCQl9 IGVsc2UgeworCQkgICAgZGVidWcoRjEwMSwiY21rZXkgRXNjIHBtc2ciLCIiLDApOworI2lmZGVm IENPTU1FTlQKKy8qCisgIENoYWluZWQgRkRCcy4uLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGlzIGZ1 bmN0aW9uIG1pZ2h0IG5vdCBoYXZlIGEgZGVmYXVsdCwKKyAgYnV0IHRoZSBuZXh0IG9uZSBtaWdo dC4gIEJ1dCBpZiBpdCBkb2Vzbid0LCB0aGVyZSBpcyBubyB3YXkgdG8gY29tZSBiYWNrIHRvCisg IHRoaXMgb25lLiAgVG8gYmUgcmV2aXNpdGVkIGxhdGVyLi4uCisqLworCQkgICAgaWYgKHhjbWZk YikJCS8qIENoYWluZWQgZmRiIC0tIHRyeSBuZXh0IG9uZSAqLworCQkgICAgICByZXR1cm4oLTMp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJICAgIGlmIChwbXNnICYgKDF8NCkpIHsJLyogU28g Zm9yIG5vdyBqdXN0IGJlZXAgKi8KKwkJCWJsZWVwKEJQX1dBUk4pOworCQkgICAgfQorCQkgICAg YnJlYWs7CisJCX0KKyAgICAgICAgICAgIH0KKwkgICAgaWYgKGYpIHsJCQkvKiBJZiBhIGNvbnZl cnNpb24gZnVuY3Rpb24gaXMgZ2l2ZW4gKi8KKwkJY2hhciAqIHBwOworCQl6cSA9IGF0eGJ1ZjsJ CS8qIGFwcGx5IGl0ICovCisJCXBwID0gYXR4YnVmOworCQlhdHhuID0gQ01EQkw7CisJCWlmICgo KmYpKGF0bWJ1ZiwmenEsJmF0eG4pIDwgMCkKKwkJICByZXR1cm4oLTIpOworCQlpZiAoISpwcCkK KwkJICBwcCA9IHhkZWY7CisJCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7CisJCSAgICBwcmludGYo IkV2YWx1YXRlZCBrZXl3b3JkIHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0K KwkgICAgfQorCSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogU29tZXRoaW5n IGluIGF0bWJ1ZiAqLworCSAgICBkZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAgeSIsYXRtYnVmLHkp OworCSAgICBkZWJ1ZyhGMTExLCJjbWtleSBsb29rdXAgeiIsYXRtYnVmLHopOworCSAgICBpZiAo eSA9PSAtMiAmJiB6ID49IDAgJiYgeiA8IG4pIHsgLyogQW1iaWd1b3VzICovCisjaWZuZGVmIE5P UEFSVElBTAorCQlpbnQgaiwgaywgbGVuID0gOTk5OTsJLyogRG8gcGFydGlhbCBjb21wbGV0aW9u ICovCisJCS8qIFNraXAgcGFzdCBhbnkgYWJicmV2aWF0aW9ucyBpbiB0aGUgdGFibGUgKi8KKwkJ Zm9yICggOyB6IDwgbjsgeisrKSB7CisJCSAgICBpZiAoKHRhYmxlW3pdLmZsZ3MgJiBDTV9BQlIp ID09IDApCisJCSAgICAgIGJyZWFrOworCQkgICAgaWYgKCEodGFibGVbel0uZmxncyAmIENNX0hM UCkgfHwgKHBtc2cgJiAyKSkKKwkJICAgICAgYnJlYWs7CisJCX0KKwkJZGVidWcoRjExMSwiY21r ZXkgcGFydGlhbCB6IixhdG1idWYseik7CisJCWRlYnVnKEYxMTEsImNta2V5IHBhcnRpYWwgbiIs YXRtYnVmLG4pOworCQlmb3IgKGogPSB6KzE7IGogPCBuOyBqKyspIHsKKwkJICAgIGRlYnVnKEYx MTEsImNta2V5IHBhcnRpYWwgaiIsdGFibGVbal0ua3dkLGopOworCQkgICAgaWYgKGNrc3RyY21w KGF0bWJ1Zix0YWJsZVtqXS5rd2QsY2MsMCkpCisJCSAgICAgIGJyZWFrOworCQkgICAgaWYgKHRh YmxlW2pdLmZsZ3MgJiBDTV9BQlIpCisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgaWYgKCh0YWJs ZVtqXS5mbGdzICYgQ01fSExQKSAmJiAhKHBtc2cgJiAyKSkKKwkJICAgICAgY29udGludWU7CisJ CSAgICBrID0gY2tzdHJwcmUodGFibGVbel0ua3dkLHRhYmxlW2pdLmt3ZCk7CisJCSAgICBkZWJ1 ZyhGMTExLCJjbWtleSBwYXJ0aWFsIGsiLHRhYmxlW3pdLmt3ZCxrKTsKKwkJICAgIGlmIChrIDwg bGVuKQorCQkgICAgICBsZW4gPSBrOyAvKiBMZW5ndGggb2YgbG9uZ2VzdCBjb21tb24gcHJlZml4 ICovCisJCX0KKwkJZGVidWcoRjExMSwiY21rZXkgcGFydGlhbCBsZW4iLHRhYmxlW3pdLmt3ZCxs ZW4pOworCQlpZiAobGVuICE9IDk5OTkgJiYgbGVuID4gY2MpIHsKKwkJICAgIGNrc3RybmNhdChh dG1idWYsdGFibGVbel0ua3dkK2NjLEFUTUJMKTsKKwkJICAgIGF0bWJ1ZltsZW5dID0gTlVMOwor CQkgICAgcHJpbnRmKCIlcyIsYXRtYnVmK2NjKTsKKwkJICAgIGNrc3RybmNhdChjbWRidWYsYXRt YnVmK2NjLENNREJMKTsKKwkJICAgIHhjICs9IChsZW4gLSBjYyk7CisJCSAgICBjYyA9IGxlbjsK KwkJfQorI2VuZGlmIC8qIE5PUEFSVElBTCAqLworCQlibGVlcChCUF9XQVJOKTsKKwkJYnJlYWs7 CisJICAgIH0gZWxzZSBpZiAoeSA9PSAtMykgeworCQlibGVlcChCUF9XQVJOKTsKKwkJYnJlYWs7 CisJICAgIH0gZWxzZSBpZiAoeSA9PSAtMSkgewkvKiBOb3QgZm91bmQgKi8KKwkJaWYgKChwbXNn ICYgMSkgJiYgIXF1aWV0KSB7CisJCSAgICBibGVlcChCUF9GQUlMKTsKKwkJICAgIHByaW50Zigi P05vIGtleXdvcmRzIG1hdGNoIC0gXCIlc1wiXG4iLGF0bWJ1Zik7CisJCX0KKwkJY21mbGdzID0g LTI7CisJCXJldHVybigtOSk7CisJICAgIH0KKy8qCisgIElmIHdlIGZvdW5kIGl0LCBidXQgaXQn cyBhIGhlbHAtb25seSBrZXl3b3JkIGFuZCB0aGUgImhlbHAiIGJpdCBpcyBub3QKKyAgc2V0IGlu IHBtc2csIHRoZW4gbm90IGZvdW5kLgorKi8KKwkgICAgZGVidWcoRjEwMSwiY21rZXkgZmxncyIs IiIsdGFibGVbel0uZmxncyk7CisJICAgIGlmICh0ZXN0KHRhYmxlW3pdLmZsZ3MsQ01fSExQKSAm JiAoKHBtc2cgJiAyKSA9PSAwKSkgeworCQlpZiAoKHBtc2cgJiAxKSAmJiAhcXVpZXQpIHsKKwkJ ICAgIGJsZWVwKEJQX0ZBSUwpOworCQkgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgbWF0Y2ggLSAl c1xuIixhdG1idWYpOworCQl9CisJCWNtZmxncyA9IC0yOworCQlyZXR1cm4oLTkpOworCSAgICB9 CisvKgorICBTZWUgaWYgdGhlIGtleXdvcmQganVzdCBmb3VuZCBoYXMgdGhlIENNX0FCUiBiaXQg c2V0IGluIGl0cyBmbGdzIGZpZWxkLCBhbmQKKyAgaWYgc28sIHNlYXJjaCBmb3J3YXJkcyBpbiB0 aGUgdGFibGUgZm9yIGEga2V5d29yZCB0aGF0IGhhcyB0aGUgc2FtZSBrd3ZhbAorICBidXQgZG9l cyBub3QgaGF2ZSBDTV9BQlIgKG9yIENNX0lOVj8pIHNldCwgYW5kIHRoZW4gZXhwYW5kIHVzaW5n IHRoZSBmdWxsCisgIGtleXdvcmQuICBXQVJOSU5HOiBUaGlzIGFzc3VtZXMgdGhhdCAoYSkga2V5 d29yZHMgYXJlIGluIGFscGhhYmV0aWNhbCBvcmRlciwKKyAgYW5kIChiKSB0aGUgQ01fQUJSIGJp dCBpcyBzZXQgb25seSBpZiB0aGUgdGhlIGFiYnJldmlhdGVkIGtleXdvcmQgaXMgYSB0cnVlCisg IGFiYnJldmlhdGlvbiAobGVmdCBzdWJzdHJpbmcpIG9mIHRoZSBmdWxsIGtleXdvcmQuCisqLwor CSAgICBpZiAodGVzdCh0YWJsZVt6XS5mbGdzLENNX0FCUikpIHsKKwkJaW50IHp6OworCQlmb3Ig KHp6ID0geisxOyB6eiA8IG47IHp6KyspCisJCSAgaWYgKCh0YWJsZVt6el0ua3d2YWwgPT0gdGFi bGVbel0ua3d2YWwpICYmCisJCSAgICAgICghdGVzdCh0YWJsZVt6el0uZmxncyxDTV9BQlIpKSAm JgorCQkgICAgICAoIXRlc3QodGFibGVbenpdLmZsZ3MsQ01fSU5WKSkpIHsKKwkJICAgICAgeiA9 IHp6OworCQkgICAgICBicmVhazsKKwkJICB9CisJICAgIH0KKwkgICAgeHAgPSB0YWJsZVt6XS5r d2QgKyBjYzsKKwkgICAgaWYgKGNtc3dpdGNoICYmIHRlc3QodGFibGVbel0uZmxncyxDTV9BUkcp KSB7CisjaWZkZWYgVk1TCisJCXByaW50ZigiJXM9Iix4cCk7CisJCWJya2NoYXIgPSAnPSc7Cisj ZWxzZQorCQlwcmludGYoIiVzOiIseHApOworCQlicmtjaGFyID0gJzonOworI2VuZGlmIC8qIFZN UyAqLworCSAgICB9IGVsc2UgeworCQlwcmludGYoIiVzICIseHApOworCQlicmtjaGFyID0gU1A7 CisJICAgIH0KKyNpZmRlZiBDS19SRUNBTEwKKwkgICAgaWYgKHRlc3QodGFibGVbel0uZmxncyxD TV9OT1IpKSBub19yZWNhbGwgPSAxOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCSAgICBjbWt3 ZmxncyA9IHRhYmxlW3pdLmZsZ3M7CisjaWZkZWYgR0VNRE9TCisJICAgIGZmbHVzaChzdGRvdXQp OworI2VuZGlmIC8qIEdFTURPUyAqLworCSAgICBhZGRidWYoeHApOworCSAgICBpZiAoY21zd2l0 Y2ggJiYgdGVzdCh0YWJsZVt6XS5mbGdzLENNX0FSRykpIHsKKwkJYnAtLTsJCQkvKiBSZXBsYWNl IHRyYWlsaW5nIHNwYWNlIHdpdGggOiAqLworI2lmZGVmIFZNUworCQkqYnArKyA9ICc9JzsKKyNl bHNlCisJCSpicCsrID0gJzonOworI2VuZGlmIC8qIFZNUyAqLworCQkqYnAgPSBOVUw7CisJCW5w ID0gYnA7CisJCXN3YXJnID0gMTsKKwkgICAgfQorCSAgICBpbndvcmQgPSAwOworCSAgICBjbWZs Z3MgPSAwOworCSAgICBkZWJ1ZyhGMTEwLCJjbWtleTogYWRkYnVmIixjbWRidWYsMCk7CisJICAg IHJldHVybih5KTsKKworCSAgY2FzZSAzOgkJCS8qIFVzZXIgdHlwZWQgIj8iICovCisJICAgIGlm IChmKSB7CQkJLyogSWYgYSBjb252ZXJzaW9uIGZ1bmN0aW9uIGlzIGdpdmVuICovCisJCWNoYXIg KiBwcDsKKwkJenEgPSBhdHhidWY7CQkvKiBkbyB0aGUgY29udmVyc2lvbiBub3cuICovCisJCXBw ID0gYXR4YnVmOworCQlhdHhuID0gQ01EQkw7CisJCWlmICgoKmYpKGF0bWJ1ZiwmenEsJmF0eG4p IDwgMCkgcmV0dXJuKC0yKTsKKwkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkJICAgIHByaW50 ZigiP0V2YWx1YXRlZCBrZXl3b3JkIHRvbyBsb25nXG4iKTsKKwkJICAgIHJldHVybigtOSk7CisJ CX0KKwkgICAgfQorCSAgICB5ID0gbG9va3VwKHRhYmxlLGF0bWJ1ZixuLCZ6KTsgLyogTG9vayB1 cCB3aGF0IHdlIGhhdmUgc28gZmFyLiAqLworCSAgICBpZiAoeSA9PSAtMSkgeworCQkvKgorCQkg IFN0cmljdGx5IHNwZWFraW5nIGlmIHRoZSBtYWluIGtleXdvcmQgdGFibGUgc2VhcmNoIGZhaWxz LAorCQkgIHRoZW4gd2Ugc2hvdWxkIGxvb2sgaW4gdGhlIHRva2VuIHRhYmxlIGlmIG9uZSBpcyBn aXZlbi4KKwkJICBCdXQgaW4gcHJhY3RpY2UsIHRva2VucyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0 aGUgbWFpbgorCQkgIGtleXdvcmQgdGFibGUuCisJCSovCisJCWNtZmxncyA9IC0yOworCQlpZiAo KHBtc2cgJiAxKSAmJiAhcXVpZXQpIHsKKwkJICAgIGJsZWVwKEJQX0ZBSUwpOworCQkgICAgcHJp bnRmKCIgTm8ga2V5d29yZHMgbWF0Y2hcbiIpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCQly ZXR1cm4oLTIpOworCSAgICB9CisjaWZuZGVmIENPTU1FTlQKKwkgICAgLyogVGhpcyBpcyB0byBh bGxvdyA/LWhlbHAgdG8gd29yayBpbW1lZGlhdGVseSBhZnRlciBhIHRva2VuICovCisJICAgIC8q IHdpdGhvdXQgaGF2aW5nIHRvIHR5cGUgYW4gaW50ZXJtZWRpYXRlIHNwYWNlICovCisJICAgIGlm ICh0bCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdGw7IGkrKykgLyogQ2hlY2sgZm9yIHRva2VuICov CisJCSAgaWYgKHRva1tpXSA9PSAqYXRtYnVmKSB7IC8qIEdvdCBvbmUgKi8KKwkJICAgICAgZGVi dWcoRjAwMCwiY21rZXkgdG9rZW46IixhdG1idWYsKmF0bWJ1Zik7CisJCSAgICAgIHVuZ3dvcmQo KTsJLyogUHV0IGJhY2sgdGhlIGZvbGxvd2luZyB3b3JkICovCisJCSAgICAgIGNtZmxncyA9IDM7 CS8qIEZvcmNlIGhlbHAgbmV4dCB0aW1lIGFyb3VuZCAqLworCQkgICAgICByZXR1cm4oLTUpOwkv KiBTcGVjaWFsIHJldHVybiBjb2RlIGZvciB0b2tlbiAqLworCQkgIH0KKwkgICAgfQorI2VuZGlm IC8qIENPTU1FTlQgKi8KKworCSAgICBpZiAoKnhobHAgPT0gTlVMKQorCSAgICAgIHByaW50Zigi IE9uZSBvZiB0aGUgZm9sbG93aW5nOlxuIik7CisJICAgIGVsc2UKKwkgICAgICBwcmludGYoIiAl cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4iLHhobHApOworCSAgICB7CisJCWludCB4OworCQl4 ID0gcG1zZyAmICgyfDQpOwkvKiBTZWUga3dkaGVscCgpIGNvbW1lbnRzICovCisJCWlmIChhdG1i dWZbMF0pCQkvKiBJZiBub3QgYXQgYmVnaW5uaW5nIG9mIGZpZWxkICovCisJCSAgeCB8PSAxOwkJ LyogYWxzbyBzaG93IGludmlzaWJsZXMgKi8KKwkJa3dkaGVscCh0YWJsZSxuLGF0bWJ1ZiwiIiwi IiwxLHgpOworCSAgICB9CisjaWZuZGVmIE5PU1BMCisJICAgIGlmICghaGF2ZXRva2VuKSB7CisJ CWV4dGVybiBpbnQgdG9wY21kOworCQlpZiAodGwgPiAwICYmIHRvcGNtZCAhPSBYWEhMUCkgLyog VGhpcyBpcyBiYWQuLi4gKi8KKwkJICBwcmludGYoIm9yIGEgbWFjcm8gbmFtZSAoXCJkbyA/XCIg Zm9yIGEgbGlzdCkgIik7CisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICBpZiAoKmF0 bWJ1ZiA9PSBOVUwgJiYgIWhhdmV0b2tlbikgeworCQlpZiAodGwgPT0gMSkKKwkJICBwcmludGYo Im9yIHRoZSB0b2tlbiAlY1xuIiwqdG9rKTsKKwkJZWxzZSBpZiAodGwgPiAxKQorCQkgIHByaW50 Zigib3Igb25lIG9mIHRoZSB0b2tlbnM6ICVzXG4iLGNrc3ByZWFkKHRvaykpOworCSAgICB9CisJ ICAgIHByaW50ZigiJXMlcyIsIGNtcHJvbSwgY21kYnVmKTsKKwkgICAgZmZsdXNoKHN0ZG91dCk7 CisJICAgIGJyZWFrOworCisJICBkZWZhdWx0OgorCSAgICBwcmludGYoIlxuJWQgLSBVbmV4cGVj dGVkIHJldHVybiBjb2RlIGZyb20gZ3R3b3JkXG4iLHp6KTsKKwkgICAgcmV0dXJuKGNtZmxncyA9 IC0yKTsKKwl9CisJenogPSAocG1zZyAmIDgpID8gZ3R3b3JkKDQpIDogZ3R3b3JkKChwbXNnID09 IDQpID8gMSA6IDApOworCWRlYnVnKEYxMTEsImNta2V5IGd0d29yZCB6eiIsYXRtYnVmLHp6KTsK KyAgICB9Cit9CisKK2ludAorY2hrdG9rKHRsaXN0KSBjaGFyICp0bGlzdDsgeworICAgIGNoYXIg KnA7CisgICAgcCA9IHRsaXN0OworICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gKmF0bWJ1 ZikgcCsrOworICAgIHJldHVybigoKnApID8gKGludCkgKnAgOiAwKTsKK30KKworLyogUm91dGlu ZXMgZm9yIHBhcnNpbmcgYW5kIGNvbnZlcnRpbmcgZGF0ZXMgYW5kIHRpbWVzICovCisKKyNkZWZp bmUgaXNkYXRlc2VwKGMpIChja3N0cmNocigiIC0vLl8iLGMpKQorCisjZGVmaW5lIENNREFURUJV RiAxMDI0CitjaGFyIGNtZGF0ZWJ1ZltDTURBVEVCVUYrNF0gPSB7IE5VTCwgTlVMIH07CitzdGF0 aWMgY2hhciAqIGNtZGF0ZWJwID0gY21kYXRlYnVmOworY2hhciAqIGNtZGF0ZW1zZyA9IE5VTEw7 CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRpbWV1bml0c1tdID0geworICAgIHsgImRheXMiLCAg IFRVX0RBWVMsICAgMCB9LAorICAgIHsgIm1vbnRocyIsIFRVX01PTlRIUywgMCB9LAorICAgIHsg IndlZWtzIiwgIFRVX1dFRUtTLCAgMCB9LAorICAgIHsgIndrcyIsICAgIFRVX1dFRUtTLCAgMCB9 LAorICAgIHsgInllYXJzIiwgIFRVX1lFQVJTLCAgMCB9LAorICAgIHsgInlycyIsICAgIFRVX1lF QVJTLCAgMCB9Cit9Oworc3RhdGljIGludCBudW5pdHMgPSAoc2l6ZW9mKHRpbWV1bml0cykgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOworCisjZGVmaW5lIFNZTV9OT1cgIDAKKyNkZWZpbmUgU1lN X1RPREEgMQorI2RlZmluZSBTWU1fVE9NTyAyCisjZGVmaW5lIFNZTV9ZRVNUIDMKKworc3RhdGlj IHN0cnVjdCBrZXl0YWIgc3ltZGF5dGFiW10gPSB7CisgICAgeyAibm93IiwgICAgICAgU1lNX05P VywgIDAgfSwKKyAgICB7ICJ0b2RheSIsICAgICBTWU1fVE9EQSwgMCB9LAorICAgIHsgInRvbW9y cm93IiwgIFNZTV9UT01PLCAwIH0sCisgICAgeyAieWVzdGVyZGF5IiwgU1lNX1lFU1QsIDAgfQor fTsKK3N0YXRpYyBpbnQgbnN5bWRheXMgPSAoc2l6ZW9mKHN5bWRheXRhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBkYXlzb2Z3ZWVrW10gPSB7Cisg ICAgeyAiRnJpZGF5IiwgICAgNSwgMCB9LAorICAgIHsgIk1vbmRheSIsICAgIDEsIDAgfSwKKyAg ICB7ICJTYXR1cmRheSIsICA2LCAwIH0sCisgICAgeyAiU3VuZGF5IiwgICAgMCwgMCB9LAorICAg IHsgIlRodXJzZGF5IiwgIDQsIDAgfSwKKyAgICB7ICJUdWVzZGF5IiwgICAyLCAwIH0sCisgICAg eyAiV2VkbmVzZGF5IiwgMywgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGtleXRhYiB1c2F0eltd ID0gewkvKiBSRkMgODIyIHRpbWV6b25lcyAgKi8KKyAgICB7ICJjZHQiLCAgNSwgMCB9LAkJCS8q IFZhbHVlcyBhcmUgR01UIG9mZnNldHMgKi8KKyAgICB7ICJjc3QiLCAgNiwgMCB9LAorICAgIHsg ImVkdCIsICA0LCAwIH0sCisgICAgeyAiZXN0IiwgIDUsIDAgfSwKKyAgICB7ICJnbXQiLCAgMCwg MCB9LAorICAgIHsgIm1kdCIsICA2LCAwIH0sCisgICAgeyAibXN0IiwgIDcsIDAgfSwKKyAgICB7 ICJwZHQiLCAgNywgMCB9LAorICAgIHsgInBzdCIsICA4LCAwIH0sCisgICAgeyAidXRjIiwgIDAs IDAgfSwKKyAgICB7ICJ6dWx1IiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBudXNhdHogPSAoc2l6 ZW9mKHVzYXR6KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKworLyogIEMgTSBDIFYgVCBE IEEgVCBFICAtLSAgQ29udmVydHMgZnJlZS1mb3JtIGRhdGUgdG8gc3RhbmRhcmQgZm9ybS4gICov CisKKy8qCisgICBDYWxsIHdpdGgKKyAgICAgcyA9IHBvaW50ZXIgdG8gZnJlZS1mb3JtYXQgZGF0 ZSwgdGltZSwgb3IgZGF0ZSBhbmQgdGltZS4KKyAgICAgdCA9IDA6IHJldHVybiB0aW1lIG9ubHkg aWYgdGltZSB3YXMgZ2l2ZW4gaW4gcy4KKyAgICAgdCA9IDE6IGFsd2F5cyByZXR1cm4gdGltZSAo MDA6MDA6MDAgaWYgbm8gdGltZSBnaXZlbiBpbiBzKS4KKyAgICAgdCA9IDI6IGFsbG93IHRpbWUg dG8gYmUgPiAyNDowMDowMC4KKyAgIFJldHVybnM6CisgICAgIE5VTEwgb24gZmFpbHVyZTsKKyAg ICAgUG9pbnRlciB0byAieXl5eW1tZGQgaGg6bW06c3MiIChsb2NhbCBkYXRlLXRpbWUpIG9uIHN1 Y2Nlc3MuCisqLworCisvKgorICBCZWZvcmUgZmluYWwgcmVsZWFzZSB0aGUgZm9sbG93aW5nIGxv bmcgbGluZXMgc2hvdWxkIGJlIHdyYXBwZWQuCisgIFVudGlsIHRoZW4gd2UgbGVhdmUgdGhlbSBs b25nIHNpbmNlIHdyYXBwaW5nIHRoZW0gd3JlY2tzIEVNQUNTJ3MKKyAgQyBpbmRlbnRhdGlvbi4K KyovCisKKy8qIGFzY3RpbWUgcGF0dGVybiAqLworc3RhdGljIGNoYXIgKiBhdHAxID0gIltBLVpd W2Etel1bYS16XSBbQS1aXVthLXpdW2Etel0gWyAwLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVsw LTldOlswLTldWzAtOV0gWzAtOV1bMC05XVswLTldWzAtOV0iOworCisvKiBhc2N0aW1lIHBhdHRl cm4gd2l0aCB0aW1lem9uZSAqLworc3RhdGljIGNoYXIgKiBhdHAyID0gIltBLVpdW2Etel1bYS16 XSBbQS1aXVthLXpdW2Etel0gWyAwLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldOlswLTld WzAtOV0gW0EtWl1bQS1aXVtBLVpdIFswLTldWzAtOV1bMC05XVswLTldIjsKKworI2RlZmluZSBE QVRFQlVGTEVOIDEyNworI2RlZmluZSBZWVlZTU1ERCAxMgorCisjZGVmaW5lIGlzbGVhcCh5KSAo KCh5KSAlIDQgPT0gMCAmJiAoeSkgJSAxMDAgIT0gMCkgfHwgKHkpICUgNDAwID09IDApCitzdGF0 aWMgaW50IG1kYXlzWzEzXSA9IHsgMCwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAz MCwgMzEsIDMwLCAzMSB9OworCisjZGVmaW5lIE5FRURfREFZUyAxCisjZGVmaW5lIE5FRURfSFJT ICAyCisjZGVmaW5lIE5FRURfTUlOUyAzCisjZGVmaW5lIE5FRURfU0VDUyA0CisjZGVmaW5lIE5F RURfRlJBQyA1CisKKyNkZWZpbmUgREVMVEFCVUYgMjU2CitzdGF0aWMgY2hhciBkZWx0YWJ1ZltE RUxUQUJVRl07CitzdGF0aWMgY2hhciAqIGRlbHRhYnAgPSBkZWx0YWJ1ZjsKKworY2hhciAqCitj bWRlbHRhKHl5LCBtbywgZGQsIGhoLCBtbSwgc3MsIHNpZ24sIGR5eSwgZG1vLCBkZGQsIGRoaCwg ZG1tLCBkc3MpCisgICAgaW50IHl5LCBtbywgZGQsIGhoLCBtbSwgc3MsIHNpZ24sIGR5eSwgZG1v LCBkZGQsIGRoaCwgZG1tLCBkc3M7CisvKiBjbWRlbHRhICovIHsKKyAgICBpbnQgenl5LCB6bW8s IHpkZCwgemhoLCB6bW0sIHpzczsKKyAgICBsb25nIHQxLCB0MiwgdDMsIHQ0OworICAgIGxvbmcg ZDEgPSAwLCBkMiwgZDM7CisgICAgY2hhciBkYXRlYnVmW0RBVEVCVUZMRU4rMV07CisKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIHl5IiwiIix5 eSk7CisJZGVidWcoRjEwMSwiY21kZWx0YSBtbyIsIiIsbW8pOworCWRlYnVnKEYxMDEsImNtZGVs dGEgZGQiLCIiLGRkKTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIGhoIiwiIixoaCk7CisJZGVidWco RjEwMSwiY21kZWx0YSBtbSIsIiIsbW0pOworCWRlYnVnKEYxMDEsImNtZGVsdGEgc3MiLCIiLHNz KTsKKwlkZWJ1ZyhGMTAxLCJjbWRlbHRhIHNpZ24iLCIiLHNpZ24pOworCWRlYnVnKEYxMDEsImNt ZGVsdGEgZHl5IiwiIixkeXkpOworCWRlYnVnKEYxMDEsImNtZGVsdGEgZG1vIiwiIixkbW8pOwor CWRlYnVnKEYxMDEsImNtZGVsdGEgZGRkIiwiIixkZGQpOworCWRlYnVnKEYxMDEsImNtZGVsdGEg ZGhoIiwiIixkaGgpOworCWRlYnVnKEYxMDEsImNtZGVsdGEgZG1tIiwiIixkbW0pOworCWRlYnVn KEYxMDEsImNtZGVsdGEgZHNzIiwiIixkc3MpOworICAgIH0KKyNlbmRpZiAvKiBERUJMT0cgKi8K KworICAgIGlmICh5eSA8IDAgfHwgeXkgPiA5OTk5KSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJC YXNlIHllYXIgb3V0IG9mIHJhbmdlIik7CisJZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNn LC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmIChtbyA8IDEgfHwgbW8gPiAxMikg eworCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBtb250aCBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1 ZyhGMTExLCJjbWRlbHRhIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9Cisg ICAgaWYgKGRkIDwgMSB8fCBkZCA+IG1kYXlzW21vXSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywi QmFzZSBkYXkgb3V0IG9mIHJhbmdlIik7CisJZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNn LC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmIChoaCA8IDAgfHwgaGggPiAyMykg eworCW1ha2VzdHIoJmNtZGF0ZW1zZywiQmFzZSBob3VyIG91dCBvZiByYW5nZSIpOworCWRlYnVn KEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAg ICBpZiAobW0gPCAwIHx8IG1tID4gNTkpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIkJhc2UgbWlu dXRlIG91dCBvZiByYW5nZSIpOworCWRlYnVnKEYxMTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7 CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoc3MgPCAwIHx8IHNzID4gNjApIHsKKwlt YWtlc3RyKCZjbWRhdGVtc2csIkJhc2Ugc2Vjb25kIG91dCBvZiByYW5nZSIpOworCWRlYnVnKEYx MTEsImNtZGVsdGEiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBz aWduID0gKHNpZ24gPCAwKSA/IC0xIDogMTsKKyAgICBpZiAoZG1vICE9IDApIHsKKyAgICAgICAg aWYgKHNpZ24gPiAwKSB7CisgICAgICAgICAgICBtbyArPSAoc2lnbiAqIGRtbyk7CisgICAgICAg ICAgICBpZiAobW8gPiAxMikgeworICAgICAgICAgICAgICAgIHl5ICs9IG1vIC8gMTI7CisgICAg ICAgICAgICAgICAgbW8gPSBtbyAlIDEyOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug aWYgKHNpZ24gPCAwKSB7CisgICAgICAgICAgICB3aGlsZSAoZG1vID4gMTIpIHsKKyAgICAgICAg ICAgICAgICB5eS0tOworICAgICAgICAgICAgICAgIGRtbyAtPSAxMjsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmIChkbW8gPCBtbykgeworICAgICAgICAgICAgICAgIG1vIC09IGRtbzsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeXktLTsKKyAgICAgICAgICAg ICAgICBtbyA9IDEyIC0gKGRtbyAtIG1vKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKyAgICBpZiAoZHl5ICE9IDApIHsKKwl5eSArPSAoc2lnbiAqIGR5eSk7CisJaWYgKHl5ID4g OTk5OSB8fCB5eSA8IDApIHsKKwkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJSZXN1bHQgeWVhciBv dXQgb2YgcmFuZ2UiKTsKKwkgICAgZGVidWcoRjExMSwiY21kZWx0YSIsY21kYXRlbXNnLC0xKTsK KwkgICAgcmV0dXJuKE5VTEwpOworCX0KKyAgICB9CisgICAgc3ByaW50ZihkYXRlYnVmLCIlMDRk JTAyZCUwMmQgJTAyZDolMDJkOiUwMmQiLHl5LG1vLGRkLGhoLG1tLHNzKTsKKyAgICBkMSA9IG1q ZChkYXRlYnVmKTsKKyAgICBkZWJ1ZyhGMTExLCJjbWRlbHRhIG1qZCIsZGF0ZWJ1ZixkMSk7ICAg IAorCisgICAgdDEgPSBoaCAqIDM2MDAgKyBtbSAqIDYwICsgc3M7CS8qIEJhc2UgdGltZSB0byBz ZWNzIHNpbmNlIG1pZG5pZ2h0ICovCisgICAgdDIgPSBkaGggKiAzNjAwICsgZG1tICogNjAgKyBk c3M7CS8qIERlbHRhIHRpbWUsIGRpdHRvICovCisgICAgdDMgPSB0MSArIChzaWduICogdDIpOwkJ LyogR2V0IHN1bSAob3IgZGlmZmVyZW5jZSkgKi8KKyAgICAKKyAgICBkMiA9IChzaWduICogZGRk KTsJCQkvKiBEZWx0YSBkYXlzICovCisgICAgZDIgKz0gdDMgLyA4NjQwMEw7CisKKyAgICB0NCA9 IHQzICUgODY0MDBMOwkJCS8qIEZyYWN0aW9uYWwgcGFydCBvZiBkYXkgKi8KKyAgICBpZiAodDQg PCAwKSB7CQkJLyogSWYgbmVnYXRpdmUgKi8KKwlkMi0tOwkJCQkvKiBvbmUgbGVzcyBkZWx0YSBk YXkgKi8KKwl0NCArPSA4NjQwMEw7CQkJLyogZ2V0IHBvc2l0aXZlIHNlY29uZHMgKi8KKyAgICB9 CisgICAgaGggPSAoaW50KSAodDQgLyAzNjAwTCk7CisgICAgbW0gPSAoaW50KSAodDQgJSAzNjAw TCkgLyA2MDsKKyAgICBzcyA9IChpbnQpICh0NCAlIDM2MDBMKSAlIDYwOworCisgICAgc3ByaW50 ZihkYXRlYnVmLCIlcyAlMDJkOiUwMmQ6JTAyZCIsIG1qZDJkYXRlKGQxK2QyKSxoaCxtbSxzcyk7 CisgICAgeworCWludCBsZW4sIGssIG47CisJY2hhciAqIHA7CisJbGVuID0gc3RybGVuKGRhdGVi dWYpOworCWsgPSBkZWx0YWJwIC0gKGNoYXIgKilkZWx0YWJ1ZjsJLyogU3BhY2UgdXNlZCAqLwor CW4gPSBERUxUQUJVRiAtIGsgLSAxOwkJLyogU3BhY2UgbGVmdCAqLworCWlmIChuIDwgbGVuKSB7 CQkJLyogTm90IGVub3VnaD8gKi8KKwkgICAgZGVsdGFicCA9IGRlbHRhYnVmOwkJLyogV3JhcCBh cm91bmQgKi8KKwkgICAgbiA9IERFTFRBQlVGOworCX0KKwlja3N0cm5jcHkoZGVsdGFicCxkYXRl YnVmLG4pOworCXAgPSBkZWx0YWJwOworCWRlbHRhYnAgKz0gbGVuICsgMTsKKwlyZXR1cm4ocCk7 CisgICAgfQorfQorCisKKy8qIENvbnZlcnQgRGVsdGEgVGltZSB0byBTZWNvbmRzICovCisKK2lu dAorZGVsdGEyc2VjKHMscmVzdWx0KSBjaGFyICogczsgbG9uZyAqIHJlc3VsdDsgeworICAgIGxv bmcgZGRheXMgPSAwTCwgeno7CisgICAgaW50IGRzaWduID0gMSwgZGhvdXJzID0gMCwgZG1pbnMg PSAwLCBkc2VjcyA9IDAsIHVuaXRzOworICAgIGludCBzdGF0ZSA9IE5FRURfREFZUzsKKyAgICBj aGFyICpwLCAqcDIsICpwMywgYyA9IDA7CisgICAgY2hhciBidWZbNjRdOworCisgICAgaWYgKCFz KSBzID0gIiI7CisgICAgaWYgKCEqcykKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYgKChpbnQp c3RybGVuKHMpID4gNjMpCisgICAgICByZXR1cm4oLTEpOworICAgIGNrc3RybmNweShidWYscyw2 NCk7CisgICAgcCA9IGJ1ZjsKKworICAgIGlmICgqcCAhPSAnKycgJiYgKnAgIT0gJy0nKQorICAg ICAgcmV0dXJuKC0xKTsKKworICAgIGlmICgqcCsrID09ICctJykKKyAgICAgIGRzaWduID0gLTE7 CisgICAgd2hpbGUgKCpwID09IFNQKQkJCS8qIFNraXAgaW50ZXJ2ZW5pbmcgc3BhY2VzICovCisg ICAgICBwKys7CisKKyAgICB3aGlsZSAoc3RhdGUpIHsJCQkvKiBGU0EgdG8gcGFyc2UgZGVsdGEg dGltZSAqLworCWlmIChzdGF0ZSA8IDAgfHwgIWlzZGlnaXQoKnApKQorCSAgcmV0dXJuKC0xKTsK KwlwMiA9IHA7CQkJCS8qIEdldCBuZXh0IG51bWVyaWMgZmllbGQgKi8KKwl3aGlsZSAoaXNkaWdp dCgqcDIpKQorCSAgcDIrKzsKKwljID0gKnAyOwkJCS8qIEFuZCBicmVhayBjaGFyYWN0ZXIgKi8K KwkqcDIgPSBOVUw7CQkJLyogVGVybWluYXRlIHRoZSBudW1iZXIgKi8KKwlzd2l0Y2ggKHN0YXRl KSB7CQkvKiBJbnRlcnByZXQgYWNjb3JkaW5nIHRvIHN0YXRlICovCisJICBjYXNlIE5FRURfREFZ UzoJCS8qIEluaXRpYWwgKi8KKwkgICAgaWYgKChjID09ICctJykgfHwJCS8qIFZNUyBmb3JtYXQg Ki8KKwkJKChjID09ICdkJyB8fCBjID09ICdEJykKKwkJICYmICFpc2FscGhhKCoocDIrMSkpKSkg eyAvKiBEYXlzICovCisJCWRkYXlzID0gYXRvbChwKTsKKwkJaWYgKCEqKHAyKzEpKQkJCQorCQkg IHN0YXRlID0gMDsKKwkJZWxzZQkJCS8qIGlmIGFueXRoaW5nIGlzIGxlZnQgKi8KKwkJICBzdGF0 ZSA9IE5FRURfSFJTOwkvKiBub3cgd2Ugd2FudCBob3Vycy4gKi8KKwkgICAgfSBlbHNlIGlmIChj ID09ICc6JykgewkvKiBkZWxpbWl0ZXIgaXMgY29sb24gKi8KKwkJZGhvdXJzID0gYXRvaShwKTsJ Lyogc28gaXQncyBob3VycyAqLworCQlzdGF0ZSA9IE5FRURfTUlOUzsJLyogbm93IHdlIHdhbnQg bWludXRlcyAqLworCSAgICB9IGVsc2UgaWYgKCFjKSB7CQkvKiBlbmQgb2Ygc3RyaW5nICovCisJ CWRob3VycyA9IGF0b2kocCk7CS8qIGl0J3Mgc3RpbGwgaG91cnMgKi8KKwkJc3RhdGUgPSAwOwkJ LyogYW5kIHdlJ3JlIGRvbmUgKi8KKwkgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpIHx8IGMgPT0g U1ApIHsKKwkJaWYgKGMgPT0gU1ApIHsJCS8qIEl0J3MgYSBrZXl3b3JkPyAqLworCQkgICAgcDIr KzsJCS8qIFNraXAgc3BhY2VzICovCisJCSAgICB3aGlsZSAoKnAyID09IFNQKQorCQkgICAgICBw MisrOworCQl9IGVsc2UgewkJLyogb3IgcmVwbGFjZSBmaXJzdCBsZXR0ZXIgKi8KKwkJICAgICpw MiA9IGM7CisJCX0KKwkJcDMgPSBwMjsJCS8qIHAyIHBvaW50cyB0byBiZWdpbm5pbmcgb2Yga2V5 d29yZCAqLworCQl3aGlsZSAoaXNhbHBoYSgqcDMpKQkvKiBGaW5kIGVuZCBvZiBrZXl3b3JkICov CisJCSAgcDMrKzsKKwkJYyA9ICpwMzsJCS8qIE5VTCBpdCBvdXQgc28gd2UgY2FuIGxvb2sgaXQg dXAgKi8KKwkJaWYgKCpwMykJCS8qIHAzIHBvaW50cyB0byBrZXl3b3JkIHRlcm1pbmF0b3IgKi8K KwkJICAqcDMgPSBOVUw7CisJCWlmICgodW5pdHMgPSBsb29rdXAodGltZXVuaXRzLHAyLG51bml0 cyxOVUxMKSkgPCAwKQorCQkgIHJldHVybigtMSk7CisJCSpwMiA9IE5VTDsJCS8qIFJlLXRlcm1p bmF0ZSB0aGUgbnVtYmVyICovCisJCSpwMyA9IGM7CisJCXdoaWxlICgqcDMgPT0gU1ApCS8qIFBv aW50IGF0IGZpZWxkIGFmdGVyIHVuaXRzICovCisJCSAgcDMrKzsKKwkJcDIgPSBwMzsKKwkJc3dp dGNoICh1bml0cykgeworCQkgIGNhc2UgVFVfREFZUzoKKwkJICAgIGRkYXlzID0gYXRvbChwKTsK KwkJICAgIGJyZWFrOworCQkgIGRlZmF1bHQ6CisJCSAgICByZXR1cm4oLTEpOworCQl9CisJCWlm ICgqcDIpIHsKKwkJICAgIHN0YXRlID0gTkVFRF9IUlM7CisJCSAgICBwMi0tOworCQl9IGVsc2UK KwkJICBzdGF0ZSA9IDA7CisJICAgIH0gZWxzZSB7CQkJLyogQW55dGhpbmcgZWxzZSAqLworCQlz dGF0ZSA9IC0xOwkJLyogaXMgYW4gZXJyb3IgKi8KKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNh c2UgTkVFRF9IUlM6CQkvKiBMb29raW5nIGZvciBob3VycyAqLworCSAgICBpZiAoYyA9PSAnOicp IHsKKwkJZGhvdXJzID0gYXRvaShwKTsKKwkJc3RhdGUgPSBORUVEX01JTlM7CisJICAgIH0gZWxz ZSBpZiAoIWMpIHsKKwkJZGhvdXJzID0gYXRvaShwKTsKKwkJc3RhdGUgPSAwOworCSAgICB9IGVs c2UgeworCQlzdGF0ZSA9IC0xOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSBORUVEX01J TlM6CQkvKiBMb29raW5nIGZvciBtaW51dGVzICovCisJICAgIGlmIChjID09ICc6JykgeworCQlk bWlucyA9IGF0b2kocCk7CisJCXN0YXRlID0gTkVFRF9TRUNTOworCSAgICB9IGVsc2UgaWYgKCFj KSB7CisJCWRtaW5zID0gYXRvaShwKTsKKwkJc3RhdGUgPSAwOworCSAgICB9IGVsc2UgeworCQlz dGF0ZSA9IC0xOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSBORUVEX1NFQ1M6CQkvKiBM b29raW5nIGZvciBzZWNvbmRzICovCisJICAgIGlmIChjID09ICcuJykgeworCQlkc2VjcyA9IGF0 b2kocCk7CisJCXN0YXRlID0gTkVFRF9GUkFDOworCSAgICB9IGVsc2UgaWYgKCFjKSB7CisJCWRz ZWNzID0gYXRvaShwKTsKKwkJc3RhdGUgPSAwOworCSAgICB9IGVsc2UgeworCQlzdGF0ZSA9IC0x OworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSBORUVEX0ZSQUM6CQkvKiBGcmFjdGlvbiBv ZiBzZWNvbmQgKi8KKwkgICAgaWYgKCFjICYmIHJkaWdpdHMocCkpIHsKKwkJaWYgKCpwID4gJzQn KQorCQkgIGRzZWNzKys7CisJCXN0YXRlID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJc3RhdGUgPSAt MTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJaWYgKGMpCQkJCS8qIG5leHQgZmllbGQgaWYg YW55ICovCisJICBwID0gcDIgKyAxOworICAgIH0KKyAgICBpZiAoc3RhdGUgPCAwKQorICAgICAg cmV0dXJuKC0xKTsKKworICAgIC8qIGlmIGRheXMgPiAyNDg1NCBhbmQgc2l6ZW9mKGxvbmcpID09 IDMyIHdlIG92ZXJmbG93ICovCisKKyAgICB6eiA9IGRkYXlzICogODY0MDBMOworICAgIGlmICh6 eiA8IDBMKQkJCS8qIFRoaXMgY2F0Y2hlcyBpdCAqLworICAgICAgcmV0dXJuKC0yKTsKKyAgICB6 eiArPSBkaG91cnMgKiAzNjAwTCArIGRtaW5zICogNjBMICsgZHNlY3M7CisgICAgenogKj0gZHNp Z247CisgICAgKnJlc3VsdCA9IHp6OworICAgIHJldHVybigwKTsKK30KKworCitjaGFyICoKK2Nt Y3Z0ZGF0ZShzLHQpIGNoYXIgKiBzOyBpbnQgdDsgeworICAgIGludCB4LCBpLCBqLCBrLCBoaCwg bW0sIHNzLCBmZiwgcG1mbGFnID0gMCwgbm9kYXRlID0gMCwgbGVuLCBkb3c7CisgICAgaW50IHVu aXRzLCBpc2dtdCA9IDAsIGdtdHNpZ24gPSAwLCBkID0gMCwgc3RhdGUgPSAwLCBuZGF5OworICAg IGludCBrbiA9IDAsIGZ0WzhdLCBpc2xldHRlciA9IDAsIGYybGVuID0gMDsKKworICAgIGludCB6 aGggPSAwOwkJCS8qIFRpbWV6b25lIGFkanVzdG1lbnRzICovCisgICAgaW50IHptbSA9IDA7Cisg ICAgaW50IHpkZCA9IDA7CisKKyAgICBpbnQgZHNpZ24gPSAxOwkJCS8qIERlbHRhLXRpbWUgYWRq dXN0bWVudHMgKi8KKyAgICBpbnQgZGRheXMgPSAwOworICAgIGludCBkbW9udGhzID0gMDsKKyAg ICBpbnQgZHllYXJzID0gMDsKKyAgICBpbnQgZGhvdXJzID0gMDsKKyAgICBpbnQgZG1pbnMgPSAw OworICAgIGludCBkc2VjcyA9IDA7CisgICAgaW50IGhhdmVkZWx0YSA9IDA7CisKKyAgICBjaGFy ICogZmxkWzhdLCAqIHAgPSAiIiwgKiBwMiwgKiBwMzsgLyogQXNzb3J0ZWQgYnVmZmVycyBhbmQg cG9pbnRlcnMgICovCisgICAgY2hhciAqIHMyLCAqIHMzOworICAgIGNoYXIgKiB5ZWFyID0gTlVM TCwgKiBtb250aCA9IE5VTEwsICogZGF5ID0gTlVMTDsKKyAgICBjaGFyICogaG91ciA9ICIwMCIs ICogbWluID0gIjAwIiwgKiBzZWMgPSAiMDAiOworICAgIGNoYXIgZGF0ZXNlcCA9IDA7CisgICAg Y2hhciB0bXBidWZbOF07CisgICAgY2hhciB4YnVmW0RBVEVCVUZMRU4rMV07CisgICAgY2hhciB5 YnVmW0RBVEVCVUZMRU4rMV07CisgICAgY2hhciB6YnVmW0RBVEVCVUZMRU4rMV07CisgICAgY2hh ciB5eXl5bW1kZFtZWVlZTU1ERF07CisgICAgY2hhciBkYnVmWzI2XTsKKyAgICBjaGFyIGRheWJ1 ZlszXTsKKyAgICBjaGFyIG1vbmJ1ZlszXTsKKyAgICBjaGFyIHllYXJidWZbNV07CisgICAgY2hh ciB0aW1idWZbMTZdLCAqdGIsIGNjOworICAgIGNoYXIgKiBkcCA9IE5VTEw7CQkJLyogUmVzdWx0 IHBvaW50ZXIgKi8KKworICAgIGlmICghcykgcyA9ICIiOworICAgIHRtcGJ1ZlswXSA9IE5VTDsK KworICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOwkJLyogR29iYmxlIGFueSBsZWFkaW5nIGJsYW5r cyAqLworICAgIGlmIChpc2FscGhhKCpzKSkJCQkvKiBSZW1lbWJlciBpZiAxc3QgY2hhciBpcyBh IGxldHRlciAqLworICAgICAgaXNsZXR0ZXIgPSAxOworCisgICAgbGVuID0gc3RybGVuKHMpOwor ICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSIscyxsZW4pOworICAgIGlmIChsZW4gPT0gMCkgewkJ CS8qIE5vIGFyZyAtIHJldHVybiBjdXJyZW50IGRhdGUtdGltZSAqLworCWRwID0gY2tkYXRlKCk7 CisJZ290byB4Y3Z0ZGF0ZTsKKyAgICB9CisgICAgaWYgKGxlbiA+IERBVEVCVUZMRU4pIHsJCS8q IENoZWNrIGxlbmd0aCBvZiBhcmcgKi8KKwltYWtlc3RyKCZjbWRhdGVtc2csIkRhdGUtdGltZSBz dHJpbmcgdG9vIGxvbmciKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7 CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBoaCA9IDA7CQkJCS8qIEluaXQgdGltZSB0byAw MDowMDowMC4wICovCisgICAgbW0gPSAwOworICAgIHNzID0gMDsKKyAgICBmZiA9IDA7CisgICAg enRpbWUoJnApOworICAgIGlmICghcCkKKyAgICAgIHAgID0gIiI7CisgICAgaWYgKCpwKSB7CQkJ CS8qIEluaXQgdGltZSB0byBjdXJyZW50IHRpbWUgKi8KKwl4ID0gY2tzdHJuY3B5KGRidWYscCwy Nik7CisJaWYgKHggPiAxNykgeworCSAgICBoaCA9IGF0b2koJmRidWZbMTFdKTsKKwkgICAgbW0g PSBhdG9pKCZkYnVmWzE0XSk7CisJICAgIHNzID0gYXRvaSgmZGJ1ZlsxN10pOworCX0KKyAgICB9 CisgICAgY2tzdHJuY3B5KHl5eXltbWRkLHp6bmRhdGUoKSxZWVlZTU1ERCk7IC8qIEluaXQgZGF0 ZSB0byBjdXJyZW50IGRhdGUgKi8KKyAgICBja3N0cm5jcHkoeWVhcmJ1Zix5eXl5bW1kZCw1KTsK KyAgICBja3N0cm5jcHkobW9uYnVmLCZ5eXl5bW1kZFs0XSwzKTsKKyAgICBja3N0cm5jcHkoZGF5 YnVmLCZ5eXl5bW1kZFs2XSwzKTsKKyAgICB5ZWFyID0geWVhcmJ1ZjsKKyAgICBtb250aCA9IG1v bmJ1ZjsKKyAgICBkYXkgPSBkYXlidWY7CisgICAgbmRheSA9IGF0b2koZGF5YnVmKTsKKyAgICBj a3N0cm5jcHkoeGJ1ZixzLERBVEVCVUZMRU4pOwkvKiBNYWtlIGEgbG9jYWwgY29weSB3ZSBjYW4g cG9rZSAqLworICAgIHMgPSB4YnVmOwkJCQkvKiBQb2ludCB0byBpdCAqLworICAgIHNbbGVuXSA9 IE5VTDsKKyAgICBpZiAoc1swXSA9PSAnOicpIHsKKwlwID0gczsKKwlnb3RvIGRvdGltZTsKKyAg ICB9CisgICAgLyogU3BlY2lhbCBwcmVzZXQgZm9ybWF0cy4uLiAqLworCisgICAgaWYgKGxlbiA+ PSAxNCkgewkJCS8qIEZUUCBNRFRNIGFsbC1udW1lcmljIGRhdGUgKi8KKwljaGFyIGM7CisJYyA9 IHNbMTRdOwkJCS8qIGUuZy4gMTk5ODA2MTUxMDAwNDUuMDE0ICovCisJc1sxNF0gPSBOVUw7CisJ eCA9IHJkaWdpdHMocyk7CisJc1sxNF0gPSBjOworCWlmICh4KSB7CisJICAgIGNrc3RybmNweSh5 eXl5bW1kZCxzLDgrMSk7CisJICAgIHllYXIgPSBOVUxMOworCSAgICBwID0gJnNbOF07CisJICAg IGdvdG8gZG90aW1lOworCX0KKyAgICB9CisgICAgeCA9IDA7CQkJCS8qIEJlY29tZXMgPiAwIGZv ciBhc2N0aW1lIGZvcm1hdCAqLworICAgIGlmIChpc2FscGhhKHNbMF0pKSB7CisJaWYgKGxlbiA9 PSAyNCkgewkJLyogQXNjdGltZSBmb3JtYXQ/ICovCisJICAgIC8qIFNhdCBKdWwgMTQgMTU6NTc6 MzIgMjAwMSAqLworCSAgICB4ID0gY2ttYXRjaChhdHAxLHMsMCwwKTsKKwkgICAgZGVidWcoRjEx MSwiY21jdnRkYXRlIGFzY3RpbWUiLHMseCk7CisJfSBlbHNlIGlmIChsZW4gPT0gMjgpIHsJCS8q IE9yIEFzY3RpbWUgcGx1cyB0aW1lem9uZT8gKi8KKwkgICAgLyogU2F0IEp1bCAxNCAxNToxNToz OSBFRFQgMjAwMSAqLworCSAgICB4ID0gY2ttYXRjaChhdHAyLHMsMCwwKTsKKwkgICAgZGVidWco RjExMSwiY21jdnRkYXRlIGFzY3RpbWUrdGltZXpvbmUiLHMseCk7CisJfQorICAgIH0KKyAgICBp ZiAoeCA+IDApIHsJCQkvKiBBc2N0aW1lIGZvcm1hdCAqLworICAgICAgICBpbnQgeHg7CisgICAg ICAgIHN0cm5jcHkoeWVhcmJ1ZixzICsgbGVuIC0gNCw0KTsKKyAgICAgICAgeWVhcmJ1Zls0XSA9 IE5VTDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICB0bXBidWZb aV0gPSBzW2krNF07CisgICAgICAgIHRtcGJ1ZlszXSA9IE5VTDsKKwlpZiAoKHh4ID0gbG9va3Vw KGNtb250aHMsdG1wYnVmLDEyLE5VTEwpKSA8IDApIHsKKwkgICAgbWFrZXN0cigmY21kYXRlbXNn LCJJbnZhbGlkIG1vbnRoIik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNn LC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOworCX0KKyAgICAgICAgZGVidWcoRjEwMSwiY21jdnRk YXRlIGFzY3RpbWUgbW9udGgiLCIiLHh4KTsKKyAgICAgICAgbW9uYnVmWzBdID0gKHh4IC8gMTAp ICsgJzAnOyAKKyAgICAgICAgbW9uYnVmWzFdID0gKHh4ICUgMTApICsgJzAnOyAKKyAgICAgICAg bW9uYnVmWzJdID0gTlVMOworICAgICAgICBkYXlidWZbMF0gPSAoc1s4XSA9PSAnICcgPyAnMCcg OiBzWzhdKTsKKyAgICAgICAgZGF5YnVmWzFdID0gc1s5XTsKKyAgICAgICAgZGF5YnVmWzJdID0g TlVMOworCXhidWZbMF0gPSBTUDsKKyAgICAgICAgZm9yIChpID0gMTE7IGkgPCAxOTsgaSsrKQor ICAgICAgICAgIHhidWZbaS0xMF0gPSBzW2ldOworICAgICAgICB4YnVmWzldID0gTlVMOworCWNr bWFrbXNnKHpidWYsMTgseWVhcmJ1Zixtb25idWYsZGF5YnVmLHhidWYpOworCWRlYnVnKEYxMTAs ImNtY3Z0ZGF0ZSBhc2N0aW1lIG9rIix6YnVmLDApOworCWlmIChsZW4gPT0gMjQpIHsKKwkgICAg ZHAgPSB6YnVmOworCSAgICBnb3RvIHhjdnRkYXRlOworCX0gZWxzZSB7CisJICAgIGludCBuOwor CSAgICBuID0gY2ttYWttc2coeWJ1ZixEQVRFQlVGTEVOLTQsemJ1ZiwiICIsTlVMTCxOVUxMKTsK KwkgICAgeWJ1ZltuKytdID0gc1syMF07CisJICAgIHlidWZbbisrXSA9IHNbMjFdOworCSAgICB5 YnVmW24rK10gPSBzWzIyXTsKKwkgICAgeWJ1ZltuKytdID0gTlVMOworCSAgICBja3N0cm5jcHko eGJ1Zix5YnVmLERBVEVCVUZMRU4pOworCSAgICBzID0geGJ1ZjsKKwkgICAgaXNsZXR0ZXIgPSAw OworCX0KKyAgICB9CisKKy8qIENoZWNrIGZvciBkYXkgb2Ygd2VlayAqLworCisgICAgcCA9IHM7 CisgICAgd2hpbGUgKCpwID09IFNQKSBwKys7CisgICAgZG93ID0gLTE7CisgICAgaWYgKCpwKSB7 CisJcDIgPSBwOworCWNjID0gTlVMOworCXdoaWxlICgxKSB7CisJICAgIGlmICgqcDIgPT0gJywn IHx8ICpwMiA9PSBTUCB8fCAhKnAyKSB7CisJCWNjID0gKnAyOwkJLyogU2F2ZSBicmVhayBjaGFy ICovCisJCSpwMiA9IE5VTDsJCS8qIE5VTCBpdCBvdXQgKi8KKwkJcDMgPSBwMjsJCS8qIFJlbWVt YmVyIHRoaXMgc3BvdCAqLworCQlpZiAoKGRvdyA9IGxvb2t1cChkYXlzb2Z3ZWVrLHAsNyxOVUxM KSkgPiAtMSkgeworCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscCxkb3cpOworCQkg ICAgcyA9IHAyOworCQkgICAgaWYgKGNjID09ICcsJyB8fCBjYyA9PSBTUCkgeyAvKiBQb2ludCB0 byBuZXh0IGZpZWxkICovCisJCQlzKys7CisJCQl3aGlsZSAoKnMgPT0gU1ApIHMrKzsKKwkJICAg IH0KKwkJICAgIHAgPSBzOworCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyBuZXcgcCIs cCxkb3cpOworCQkgICAgYnJlYWs7CisJCX0gZWxzZSBpZiAoaXNhbHBoYSgqcCkgJiYgY2MgPT0g JywnKSB7CisJCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIlVucmVjb2duaXplZCBkYXkgb2Ygd2Vl ayIpOworCQkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCQkgICAg cmV0dXJuKE5VTEwpOworCQl9IGVsc2UgeworCQkgICAgKnAzID0gY2M7CisJCSAgICBicmVhazsK KwkJfQorCSAgICB9CisJICAgIHAyKys7CisJfQorICAgIH0KKyAgICBsZW4gPSBzdHJsZW4ocyk7 CQkvKiBVcGRhdGUgbGVuZ3RoICovCisgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIHMiLHMsbGVu KTsKKworICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBkb3ciLHMsZG93KTsKKyAgICBpZiAoZG93 ID4gLTEpIHsJCQkvKiBIYXZlIGEgZGF5LW9mLXdlZWsgbnVtYmVyICovCisJbG9uZyB6ejsgaW50 IG4sIGo7CisJenogPSBtamQoenpuZGF0ZSgpKTsJCS8qIEdldCB0b2RheSdzIE1KRCAqLworCWRl YnVnKEYxMTEsImNtY3Z0ZGF0ZSB6eiIsIiIsenopOworCWogPSAoKChpbnQpKHp6ICUgN0wpKSAr IDMpICUgNzsgLyogVG9kYXkncyBkYXktb2Ytd2VlayBudW1iZXIgKi8KKwlkZWJ1ZyhGMTExLCJj bWN2dGRhdGUgaiIsIiIsaik7CisJaGggPSAwOwkJCQkvKiBJbml0IHRpbWUgdG8gbWlkbmlnaHQg Ki8KKwltbSA9IDA7CisJc3MgPSAwOworCWlmIChqID09IGRvdykgeworCSAgICBja3N0cm5jcHko eXl5eW1tZGQsenpuZGF0ZSgpLFlZWVlNTUREKTsKKwkgICAgeWVhciA9IE5VTEw7CisJfSBlbHNl IHsKKwkgICAgbiA9IGRvdyAtIGo7CQkvKiBEYXlzIGZyb20gbm93ICovCisJICAgIGlmIChkb3cg PCBqKQorCSAgICAgIG4gKz0gNzsKKwkgICAgaWYgKG4gPCAwKSBuICs9IDc7CQkvKiBBZGQgdG8g TUpEICovCisJICAgIHp6ICs9IG47CisJICAgIGNrc3RybmNweSh5eXl5bW1kZCxtamQyZGF0ZSh6 eiksWVlZWU1NREQpOyAvKiBOZXcgZGF0ZSAqLworCSAgICB5ZWFyID0gTlVMTDsKKwl9CisJZGVi dWcoRjExMSwiY21jdnRkYXRlIEEiLHl5eXltbWRkLGxlbik7CisJaWYgKGxlbiA9PSAwKSB7CQkJ LyogTm8gbW9yZSBmaWVsZHMgYWZ0ZXIgdGhpcyAqLworCSAgICBja21ha21zZyh6YnVmLDE4LHl5 eXltbWRkLCIgMDA6MDA6MDAiLE5VTEwsTlVMTCk7CisJICAgIGRwID0gemJ1ZjsKKwkgICAgZ290 byB4Y3Z0ZGF0ZTsKKwl9CisJaXNsZXR0ZXIgPSAwOworCWlmIChyZGlnaXRzKHApICYmIGxlbiA8 IDgpCS8qIE5leHQgZmllbGQgaXMgdGltZT8gKi8KKwkgIGdvdG8gZG90aW1lOwkJCS8qIElmIHNv IGdvIHN0cmFpZ2h0IHRvIHRpbWUgc2VjdGlvbiAqLworCWlmIChpc2RpZ2l0KCpwKSkgeworCSAg ICBpZiAoKihwKzEpID09ICc6JykKKwkgICAgICBnb3RvIGRvdGltZTsKKwkgICAgZWxzZSBpZiAo aXNkaWdpdCgqKHArMSkpICYmICgqKHArMikgPT0gJzonKSkKKwkgICAgICBnb3RvIGRvdGltZTsK Kwl9CisgICAgfQorICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBCIHMiLHMsZG93KTsKKyAgICBk ZWJ1ZyhGMTExLCJjbWN2dGRhdGUgQiBwIixwLGRvdyk7CisKKyAgICBpZiAoKnMgPT0gJysnIHx8 ICpzID09ICctJykgewkvKiBEZWx0YSB0aW1lIG9ubHkgLSBza2lwIGFoZWFkLiAqLworCXAgPSBz OworCWdvdG8gZGVsdGE7CisgICAgfQorI2lmZGVmIENPTU1FTlQKKy8qCisgIFdoYXQgaXMgdGhl IHB1cnBvc2Ugb2YgdGhpcz8gIEl0IGJyZWFrcyBwYXJzaW5nIG9mIGVtYWlsIGRhdGVzIGxpa2UK KyAgIldlZCwgMTMgRmViIDIwMDIgMTc6NDM6MDIgLTA4MDAgKFBTVCkiLiAgUmVtb3ZpbmcgdGhp cyBjb2RlIGZpeGVzIHRoZQorICBwcm9ibGVtIGFuZCBLZXJtaXQgc3RpbGwgcGFzc2VzIHRoZSAn ZGF0ZXMnIHNjcmlwdC4KKyAgLSBmZGMsIFNhdCBOb3YgMjYgMTA6NTI6NDUgMjAwNS4KKyovCisg ICAgaWYgKGRvdyA+IC0xKSB7CisJLyogRGF5IG9mIHdlZWsgZ2l2ZW4gZm9sbG93ZWQgYnkgc29t ZXRoaW5nIHRoYXQgaXMgbm90IGEgdGltZSAqLworCS8qIG9yIGEgZGVsdGEgc28gaXQgY2FuJ3Qg YmUgdmFsaWQgKi8KKwltYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgdG9rZW5zIGFmdGVyIGRh eSBvZiB3ZWVrIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIGZhaWwiLGNtZGF0ZW1zZywtMSk7 CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICAvKiBI YW5kbGUgInRvZGF5IiwgInllc3RlcmRheSIsICJ0b21vcnJvdyIsIGFuZCArLy0gbiB1bml0cyAq LworCisgICAgaWYgKGNrc3RyY2hyKCJUdFl5Tm4iLHNbMF0pKSB7CisJaW50IGksIGssIG4sIG1p bnVzID0gMDsKKwljaGFyIGM7CisJbG9uZyBqZDsKKwlqZCA9IG1qZChja2RhdGUoKSk7CisJZGVi dWcoRjExMSwiY21jdnRkYXRlIG1qZCIscyxqZCk7CisKKwkvKiBTeW1ib2xpYyBkYXRlOiBUT0RB WSwgVE9NT1JST1csIGV0Yy4uLj8gKi8KKworCXMyID0gczsJCQkJLyogRmluZCBlbmQgb2Yga2V5 d29yZCAqLworCWkgPSAwOworCXdoaWxlIChpc2FscGhhKCpzMikpIHsJCS8qIGFuZCBnZXQgaXRz IGxlbmd0aCAqLworCSAgICBpKys7CisJICAgIHMyKys7CisJfQorCWMgPSAqczI7CQkJLyogWmFw IGJ1dCBzYXZlIGRlbGltaXRlciAqLworCSpzMiA9IE5VTDsKKwlrID0gbG9va3VwKHN5bWRheXRh YixzLG5zeW1kYXlzLE5VTEwpOyAvKiBMb29rIHVwIGtleXdvcmQgKi8KKwkqczIgPSBjOwkJCS8q IFJlcGxhY2UgZGVsaW1pdGVyICovCisJaWYgKGsgPCAwKQkJCS8qIEtleXdvcmQgbm90IGZvdW5k ICovCisJICBnb3RvIG5vcm1hbDsKKwlzMyA9ICZzW2ldOworCXdoaWxlICgqczMgPT0gU1ApCQkv KiBTa2lwIHdoaXRlc3BhY2UgKi8KKwkgIHMzKys7CisJaWYgKCpzMyA9PSAnXycgfHwgKnMzID09 ICc6JykKKwkgIHMzKys7CisKKwlzd2l0Y2ggKGspIHsJCQkvKiBIYXZlIGtleXdvcmQgKi8KKwkg IGNhc2UgU1lNX05PVzoJCQkvKiBOT1cgKi8KKwkgICAgY2tzdHJuY3B5KHlidWYsY2tkYXRlKCks REFURUJVRkxFTik7CisJICAgIGNrc3RybmNweSh5eXl5bW1kZCx5YnVmLFlZWVlNTUREKTsKKwkg ICAgeWVhciA9IE5VTEw7CisJICAgIGlmICgqczMpIHsJCQkvKiBObyBvdmVyd3JpdGluZyBjdXJy ZW50IHRpbWUuICovCisJCWNrc3RybmNhdCh5YnVmLCIgIixEQVRFQlVGTEVOKTsKKwkJY2tzdHJu Y2F0KHlidWYsczMsREFURUJVRkxFTik7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBkZWZhdWx0 OgkJCS8qIFllc3RlcmRheSwgVG9kYXksIGFuZCBUb21vcnJvdyAqLworCSAgICBpZiAoayA9PSBT WU1fVE9NTykgewkvKiBUT01PUlJPVyAqLworCQlzdHJuY3B5KHlidWYsbWpkMmRhdGUoamQrMSks OCk7CisJICAgIH0gZWxzZSBpZiAoayA9PSBTWU1fWUVTVCkgewkvKiBZRVNURVJEQVkgKi8KKwkJ c3RybmNweSh5YnVmLG1qZDJkYXRlKGpkLTEpLDgpOworCSAgICB9IGVsc2UgewkJCS8qIFRPREFZ ICovCisJCXN0cm5jcHkoeWJ1Zixja2RhdGUoKSw4KTsKKwkgICAgfQorCSAgICBzdHJuY3B5KHli dWYrOCwiIDAwOjAwOjAwIixEQVRFQlVGTEVOLTgpOyAvKiBEZWZhdWx0IHRpbWUgaXMgMCAqLwor CSAgICBja3N0cm5jcHkoeXl5eW1tZGQseWJ1ZixZWVlZTU1ERCk7CisJICAgIHllYXIgPSBOVUxM OworCSAgICBpZiAoKnMzKSB7CQkJLyogSWYgc29tZXRoaW5nIGZvbGxvd3Mga2V5d29yZC4uLiAq LworCQlpZiAoaXNkaWdpdCgqczMpKSB7CS8qIFRpbWUgLSBvdmVyd3JpdGUgZGVmYXVsdCB0aW1l ICovCisJCSAgICBzdHJuY3B5KHlidWYrOCxzK2ksREFURUJVRkxFTi04KTsKKwkJfSBlbHNlIHsJ CS8qIFNvbWV0aGluZyBlbHNlLCBrZWVwIGRlZmF1bHQgdGltZSAqLworCQkgICAgY2tzdHJuY2F0 KHlidWYsIiAiLERBVEVCVUZMRU4pOyAvKiBhbmQgYXBwZW5kICovCisJCSAgICBja3N0cm5jYXQo eWJ1ZixzMyxEQVRFQlVGTEVOKTsgLyogd2hhdGV2ZXIgd2UgaGF2ZSAqLworCQl9CisJICAgIH0K Kwl9CisJcyA9IHlidWY7CQkJLyogUG9pbnQgdG8gcmV3cml0dGVuIGRhdGUtdGltZSAqLworCWxl biA9IHN0cmxlbihzKTsJCS8qIFVwZGF0ZSBsZW5ndGggKi8KKwlpc2xldHRlciA9IDA7CQkJLyog Q2FuY2VsIHRoaXMgKi8KKyAgICB9CisKKy8qIFJlZ3VsYXIgZnJlZS1mb3JtYXQgbm9uLXN5bWJv bGljIGRhdGUgKi8KKworICBub3JtYWw6CisKKyAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9S TUFMIixzLGxlbik7CisgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIGRvdyIscyxkb3cpOworICAg IGlmICh5eXl5bW1kZFswXSAmJiAheWVhcikgeworCWNrc3RybmNweSh5ZWFyYnVmLHl5eXltbWRk LDUpOworCWNrc3RybmNweShtb25idWYsJnl5eXltbWRkWzRdLDMpOworCWNrc3RybmNweShkYXli dWYsJnl5eXltbWRkWzZdLDMpOworCXllYXIgPSB5ZWFyYnVmOworCW1vbnRoID0gbW9uYnVmOwor CWRheSA9IGRheWJ1ZjsKKwluZGF5ID0gYXRvaShkYXlidWYpOworICAgIH0KKyAgICBpZiAoaXNk aWdpdChzWzBdKSkgewkJLyogVGltZSB3aXRob3V0IGRhdGU/ICovCisJcCA9IHM7CisJaWYgKHNb MV0gPT0gJzonKSB7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSBOT1JNQUwgWDEiLHMsbGVu KTsKKwkgICAgZ290byBkb3RpbWU7CisJfSBlbHNlIGlmIChsZW4gPiAxICYmIGlzZGlnaXQoc1sx XSkgJiYgc1syXSA9PSAnOicpIHsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIE5PUk1BTCBY MiIscyxsZW4pOworCSAgICBnb3RvIGRvdGltZTsKKwl9IGVsc2UgaWYgKHJkaWdpdHMocykgJiYg bGVuIDwgOCkgeworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFMIFgzIixzLGxlbik7 CisJICAgIGdvdG8gZG90aW1lOworCX0KKyAgICB9CisgICAgaWYgKGxlbiA+PSA4ICYmIGlzZGln aXQoKnMpKSB7CS8qIENoZWNrIGZpcnN0IGZvciB5eXl5bW1kZCogKi8KKwlkZWJ1ZyhGMTExLCJj bWN2dGRhdGUgTk9STUFMIEEiLHMsbGVuKTsKKwljYyA9IHNbOF07CisJc1s4XSA9IE5VTDsJCQkv KiBJc29sYXRlIGZpcnN0IDggY2hhcmFjdGVycyAqLworCWlmIChyZGlnaXRzKHMpKSB7CisJICAg IC8qIEhhdmUgdmFsaWQgdGltZSBzZXBhcmF0b3I/ICovCisJICAgIHAyID0gY2MgPyBja3N0cmNo cigiIFR0Xy06IixjYykgOiBOVUxMOworCSAgICBpZiAoIWNjIHx8IHAyKSB7CisJCWNrc3RybmNw eSh5eXl5bW1kZCxzLFlZWVlNTUREKTsJLyogVmFsaWQgc2VwYXJhdG9yICovCisJCXllYXIgPSBO VUxMOworCQlzICs9IDg7CQkJICAgICAgICAvKiBvciB0aW1lIG5vdCBnaXZlbiAqLworCQlpZiAo Y2MpIHMrKzsJCSAgICAgICAgLyogS2VlcCBkYXRlICovCisJCXAgPSBzOwkJCSAgICAgICAgLyog YW5kIGdvIGhhbmRsZSB0aW1lICovCisJCWdvdG8gZG90aW1lOworCSAgICB9IGVsc2UgaWYgKCFw MikgeworCQlpZiAoaXNkaWdpdChjYykpCisJCSAgbWFrZXN0cigmY21kYXRlbXNnLCJOdW1lcmlj IGRhdGUgdG9vIGxvbmciKTsKKwkJZWxzZQorCQkgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxp ZCBkYXRlLXRpbWUgc2VwYXJhdG9yIik7CisJCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRl bXNnLC0xKTsKKwkJcmV0dXJuKE5VTEwpOworCSAgICB9CisJfQorCXNbOF0gPSBjYzsJCQkvKiBQ dXQgdGhpcyBiYWNrISAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgTk9STUFM IG5vbi15eXl5bW1kZCIscyxsZW4pOworCisgICAgLyogRnJlZS1mb3JtYXQgZGF0ZSAtLSBmaWd1 cmUgaXQgb3V0ICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKCpzICYmICFpc2RpZ2l0KCpz KSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiVW5yZWNvZ25pemVkIHdvcmQgaW4gZGF0ZSIpOwor CWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7Cisg ICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQkJ LyogRmllbGQgdHlwZXMgKi8KKyAgICAgIGZ0W2ldID0gLTE7CisgICAgZmxkW2kgPSAwXSA9IChw ID0gcyk7CQkvKiBGaXJzdCBmaWVsZCAqLworICAgIHdoaWxlICgqcCkgewkJCS8qIEdldCBuZXh0 IHR3byBmaWVsZHMgKi8KKwlpZiAoaXNkYXRlc2VwKCpwKSkgewkJLyogSGF2ZSBhIGRhdGUgc2Vw YXJhdG9yICovCisJICAgIGlmIChpID09IDApIHsKKwkJZGF0ZXNlcCA9ICpwOworCSAgICB9IGVs c2UgaWYgKGkgPT0gMSAmJiAqcCAhPSBkYXRlc2VwKSB7CisJCW1ha2VzdHIoJmNtZGF0ZW1zZywi SW5jb25zaXN0ZW50IGRhdGUgc2VwYXJhdG9ycyIpOworCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUi LGNtZGF0ZW1zZywtMSk7CisJCXJldHVybihOVUxMKTsKKwkgICAgfQorCSAgICAqcCsrID0gTlVM OwkJCS8qIFJlcGxhY2UgYnkgTlVMICovCisJICAgIGlmICgqcCkgewkJCS8qIE5vdyB3ZSdyZSBh dCB0aGUgbmV4dCBmaWVsZCAqLworCQl3aGlsZSAoKnAgPT0gU1ApIHArKzsJLyogU2tpcCBsZWFk aW5nIHNwYWNlcyAqLworCQlpZiAoISpwKSBicmVhazsJCS8qIE1ha2Ugc3VyZSB3ZSBzdGlsbCBo YXZlIHNvbWV0aGluZyAqLworCQlpZiAoaSA9PSAyKQkJLyogTGFzdCBvbmU/ICovCisJCSAgYnJl YWs7CisJCWZsZFsrK2ldID0gcDsJCS8qIE5vLCByZWNvcmQgcG9pbnRlciB0byB0aGlzIG9uZSAq LworCSAgICB9IGVsc2UgeworCQlicmVhazsKKwkgICAgfQkgICAgCisJfSBlbHNlIGlmICgoKnAg PT0gJ1QnIHx8ICpwID09ICd0JykgJiYgaXNkaWdpdCgqKHArMSkpKSB7IC8qIFRpbWUgKi8KKwkg ICAgKnArKyA9IE5VTDsKKwkgICAgYnJlYWs7CisJfSBlbHNlIGlmICgqcCA9PSAnOicpIHsKKwkg ICAgaWYgKGkgPT0gMCAmJiBwID09IHMpIHsKKwkJbm9kYXRlID0gMTsKKwkJYnJlYWs7CisJICAg IH0gZWxzZSBpZiAoaSAhPSAwKSB7CS8qIEFmdGVyIGEgZGF0ZSAqLworCQlpZiAoaSA9PSAyKSB7 CQkvKiBPSyBhcyBkYXRlLXRpbWUgc2VwYXJhdG9yIChWTVMpICovCisJCSAgICAqcCsrID0gTlVM OworCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKGkgPCAyKQorCQkgIG1ha2VzdHIoJmNtZGF0ZW1z ZywiVG9vIGZldyBmaWVsZHMgaW4gZGF0ZSIpOworCQllbHNlCisJCSAgbWFrZXN0cigmY21kYXRl bXNnLCJNaXNwbGFjZWQgdGltZSBzZXBhcmF0b3IiKTsKKwkJZGVidWcoRjExMSwiY21jdnRkYXRl IixjbWRhdGVtc2csLTEpOworCQlyZXR1cm4oTlVMTCk7CisJICAgIH0KKwkgICAgbm9kYXRlID0g MTsJCQkvKiBPciB3aXRob3V0IGEgZGF0ZSAqLworCSAgICBicmVhazsKKwl9CisJcCsrOworICAg IH0KKyAgICBpZiAocCA+IHMgJiYgaSA9PSAwKQkJLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBkYXRl ICovCisgICAgICBub2RhdGUgPSAxOwkJCS8qIE5vIGRhdGUuICovCisKKyAgICBpZiAobm9kYXRl ICYmIGRvdyA+IC0xKSB7CQkvKiBIYXZlIGltcGxpZWQgZGF0ZSBmcm9tIERPVz8gKi8KKwlnb3Rv IGRvdGltZTsJCQkvKiBVc2UsIHVzZSB0aGF0LCBnbyBkbyB0aW1lLiAqLworCisgICAgfSBlbHNl IGlmIChub2RhdGUpIHsJCS8qIE5vIGRhdGUgYW5kIG5vIGltcGxpZWQgZGF0ZSAqLworCWNoYXIg KnRtcCA9IE5VTEw7CQkvKiBTdWJzdGl0dXRlIHRvZGF5J3MgZGF0ZSAqLworCXp0aW1lKCZ0bXAp OworCWlmICghdG1wKQorCSAgdG1wICA9ICIiOworCWlmICghKnRtcCkgeworCSAgICBtYWtlc3Ry KCZjbWRhdGVtc2csIlByb2JsZW0gc3VwcGx5aW5nIGN1cnJlbnQgZGF0ZSIpOworCSAgICBkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJICAgIHJldHVybihOVUxMKTsKKwl9 CisJY2tzdHJuY3B5KGRidWYsdG1wLDI2KTsJCS8qIFJlZm9ybWF0ICovCisJaWYgKGRidWZbOF0g PT0gU1ApIGRidWZbOF0gPSAnMCc7CisJZmxkWzBdID0gZGJ1Zis4OwkJLyogZGQgKi8KKwlkYnVm WzEwXSA9IE5VTDsKKwlmbGRbMV0gPSBkYnVmKzQ7CQkvKiBtbW0gKi8KKwlkYnVmWzddID0gTlVM OworCWZsZFsyXSA9IGRidWYrMjA7CQkvKiB5eXl5ICovCisJZGJ1ZlsyNF0gPSBOVUw7CisJaGgg PSBhdG9pKCZkYnVmWzExXSk7CisJbW0gPSBhdG9pKCZkYnVmWzE0XSk7CisJc3MgPSBhdG9pKCZk YnVmWzE3XSk7CisJcCA9IHM7CQkJCS8qIEJhY2sgdXAgc291cmNlIHBvaW50ZXIgdG8gcmVwYXJz ZSAqLworICAgIH0gZWxzZSBpZiAoaSA8IDIpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBm ZXcgZmllbGRzIGluIGRhdGUiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywt MSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICAvKiBIYXZlIHRocmVlIGRhdGUgZmllbGRz IC0gc2VlIHdoYXQgdGhleSBhcmUgKi8KKworICAgIGZvciAoayA9IDAsIGogPSAwOyBqIDwgMzsg aisrKSB7CS8qIEdldCBudW1iZXIgb2Ygbm9uLW51bWVyaWMgZmllbGRzICovCisJZnRbal0gPSBy ZGlnaXRzKGZsZFtqXSk7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIGZsZCIsZmxkW2pdLGopOwor CWlmIChmdFtqXSA9PSAwKQorCSAgaysrOworICAgIH0KKyAgICBrbiA9IGs7CQkJCS8qIEhvdyBt YW55IG51bWVyaWMgZmllbGRzICovCisgICAgbW9udGggPSBOVUxMOwkJCS8qIFN0cmlrZSBvdXQg ZGVmYXVsdCB2YWx1ZXMgKi8KKyAgICB5ZWFyID0gTlVMTDsKKyAgICBkYXkgPSBOVUxMOworCisg ICAgaWYgKGsgPT0gMiAmJiBmdFsyXSA+IDApIHsJCS8qIEp1bCAyMCwgMjAwMSAqLworCWludCB4 eDsKKwl4eCA9IHN0cmxlbihmbGRbMV0pOworCXAzID0gZmxkWzFdOworCWlmICh4eCA+IDApIGlm IChwM1t4eC0xXSA9PSAnLCcpIHsKKwkgICAgcDNbeHgtMV0gPSBOVUw7CisJICAgIGlmIChyZGln aXRzKHAzKSkgeworCQlrID0gMTsJCisJCWZ0WzFdID0gMTsKKwkgICAgfSBlbHNlIHAzW3h4LTFd ID0gJywnOworCX0KKyAgICB9CisgICAgaWYgKGsgPiAxKSB7CQkJLyogV2UgY2FuIGhhdmUgb25s eSBvbmUgbm9uLW51bWVyaWMgKi8KKwlpZiAobm9kYXRlKQorCSAgbWFrZXN0cigmY21kYXRlbXNn LCJVbnJlY29nbml6ZWQgd29yZCBpbiBkYXRlIik7IAorCWVsc2UgaWYgKCFmdFsyXSAmJiBpc2Rp Z2l0KCooZmxkWzJdKSkpCisJICBtYWtlc3RyKCZjbWRhdGVtc2csIkludmFsaWQgZGF0ZS10aW1l IHNlcGFyYXRvciIpOyAKKwllbHNlCisJICBtYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IG5v bi1udW1lcmljIGZpZWxkcyBpbiBkYXRlIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRh dGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKCFmdFswXSkgeworCWsg PSAwOworICAgIH0gZWxzZSBpZiAoIWZ0WzFdKSB7CisJayA9IDE7CisgICAgfSBlbHNlIGlmICgh ZnRbMl0pIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIk5vbi1kaWdpdCBpbiB0aGlyZCBkYXRlIGZp ZWxkIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihO VUxMKTsKKyAgICB9IGVsc2UKKyAgICAgIGsgPSAtMTsKKworICAgIGlmIChrID4gLTEpIHsKKwlp ZiAoKHggPSBsb29rdXAoY21vbnRocyxmbGRba10sMTIsTlVMTCkpIDwgMCkgeworCSAgICBtYWtl c3RyKCZjbWRhdGVtc2csIlVua25vd24gbW9udGgiKTsKKwkgICAgZGVidWcoRjExMSwiY21jdnRk YXRlIixjbWRhdGVtc2csLTEpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQorCXNwcmludGYodG1w YnVmLCIlMDJkIix4KTsKKwltb250aCA9IHRtcGJ1ZjsKKyAgICB9CisgICAgZjJsZW4gPSBzdHJs ZW4oZmxkWzJdKTsJCS8qIExlbmd0aCBvZiAzcmQgZmllbGQgKi8KKworICAgIGlmIChrID09IDAp IHsJCQkvKiBtb250aG5hbWUgZGQsIHl5eXkgKi8KKwlkYXkgPSBmbGRbMV07CisJeWVhciA9IGZs ZFsyXTsKKyAgICB9IGVsc2UgaWYgKCgoaW50KXN0cmxlbihmbGRbMF0pID09IDQpKSB7IC8qIHl5 eXkteHgtZGQgKi8KKwl5ZWFyID0gZmxkWzBdOworCWRheSA9IGZsZFsyXTsKKwlpZiAoIW1vbnRo KQorCSAgbW9udGggPSBmbGRbMV07CQkvKiB5eXl5LW1tLWRkICovCisgICAgfSBlbHNlIGlmIChm MmxlbiA9PSA0KSB7CQkvKiB4eC14eC15eXl5ICovCisJeWVhciA9IGZsZFsyXTsKKwlpZiAobW9u dGgpIHsJCQkvKiBkZC1uYW1lLXl5eXkgKi8KKwkgICAgZGF5ID0gZmxkWzBdOworCX0gZWxzZSB7 CQkJLyogeHgteHgteXl5eSAqLworCSAgICBpbnQgZjAsIGYxOworCSAgICBmMCA9IGF0b2koZmxk WzBdKTsKKwkgICAgZjEgPSBhdG9pKGZsZFsxXSk7CisJICAgIGlmICgoKGYwID4gMTIpICYmIChm MSA8PSAxMikpIHx8IChmMSA8PSAxMiAmJiBmMCA9PSBmMSkpIHsKKwkJZGF5ID0gZmxkWzBdOwkJ LyogbW0tZGQteXl5eSAqLworCQltb250aCA9IGZsZFsxXTsKKwkgICAgfSBlbHNlIGlmICgoZjAg PD0gMTIpICYmIChmMSA+IDEyKSkgeworCQlpZiAoIXJkaWdpdHMoZmxkWzFdKSkgeworCQkgICAg bWFrZXN0cigmY21kYXRlbXNnLCJEYXkgbm90IG51bWVyaWMiKTsKKwkJICAgIGRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJICAgIHJldHVybihOVUxMKTsKKwkJfSBlbHNl IHsKKwkJICAgIGRheSA9IGZsZFsxXTsJLyogZGQtbW0teXl5eSAqLworCQl9CisJCW1vbnRoID0g ZmxkWzBdOworCSAgICB9IGVsc2UgeworCQlpZiAoIWYwIHx8ICFmMSkKKwkJICBtYWtlc3RyKCZj bWRhdGVtc2csIkRheSBvciBtb250aCBvdXQgb2YgcmFuZ2UiKTsKKwkJZWxzZQorCQkgIG1ha2Vz dHIoJmNtZGF0ZW1zZywiRGF5IGFuZCBtb250aCBhcmUgYW1iaWd1b3VzIik7CisJCWRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJcmV0dXJuKE5VTEwpOworCSAgICB9CisJ fQorICAgIH0gZWxzZSBpZiAoKGYybGVuIDwgNCkgJiYJCS8qIGRkIG1tbSB5eSAoUkZDODIyKSAq LworCSAgICAgICAhcmRpZ2l0cyhmbGRbMV0pICYmCS8qIG1pZGRsZSBmaWVsZCBpcyBtb250aG5h bWUgKi8KKwkgICAgICAgcmRpZ2l0cyhmbGRbMl0pKSB7CisJaW50IHRtcHllYXI7CisJZGF5ID0g ZmxkWzBdOworCWlmICghZmxkWzJdWzFdKSB7CisJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiVG9v IGZldyBkaWdpdHMgaW4geWVhciIpOworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0 ZW1zZywtMSk7CisJICAgIHJldHVybihOVUxMKTsKKwl9CisJdG1weWVhciA9IGF0b2koZmxkWzJd KTsKKwlpZiAodG1weWVhciA8IDUwKQkJLyogUkZDIDI4MjIgd2luZG93aW5nICovCisJICB0bXB5 ZWFyICs9IDIwMDA7CisJZWxzZQkJCQkvKiBUaGlzIGluY2x1ZGVzIDMtZGlnaXQgeWVhcnMuICov CisJICB0bXB5ZWFyICs9IDE5MDA7CisJeWVhciA9IGNraXRvYSh0bXB5ZWFyKTsKKworICAgIH0g ZWxzZSBpZiAoKGYybGVuIDwgNCkgJiYgKGsgPCAwKSAmJiAoKGludClzdHJsZW4oZmxkWzBdKSA8 IDQpKSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJBbWJpZ3VvdXMgbnVtZXJpYyBkYXRlIik7CisJ ZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAg ICB9IGVsc2UgaWYgKChmMmxlbiA+IDQpICYmIGZ0WzJdKSB7CisJbWFrZXN0cigmY21kYXRlbXNn LCJUb28gbWFueSBkaWdpdHMgaW4geWVhciIpOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21k YXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfSBlbHNlIHsKKwltYWtlc3RyKCZjbWRh dGVtc2csIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUi LGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICB4ID0gYXRvaShtb250 aCk7CisgICAgc3ByaW50Zih0bXBidWYsIiUwMmQiLHgpOwkJLyogMi1kaWdpdCBudW1lcmljIG1v bnRoICovCisKKy8qCisgICBzdGF0ZSA9IDEgPSBob3VycworICAgc3RhdGUgPSAyID0gbWludXRl cworICAgc3RhdGUgPSAzID0gc2Vjb25kcworICAgc3RhdGUgPSA0ID0gZnJhY3Rpb25zIG9mIHNl Y29uZHMKKyovCisKKyAgZG90aW1lOgorICAgIGlmIChpc2xldHRlciAmJiAocyA9PSBwKSkgewor CW1ha2VzdHIoJmNtZGF0ZW1zZywiVW5rbm93biBkYXRlLXRpbWUgd29yZCIpOworCWRlYnVnKEYx MTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQorICAg IGlmICgheWVhciAmJiB5eXl5bW1kZFswXSkgeworCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3Rp bWUgeXl5eW1tZGQiLHl5eXltbWRkLDApOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJICB5 ZWFyYnVmW2ldID0geXl5eW1tZGRbaV07CisJeWVhcmJ1Zls0XSA9IE5VTDsKKwltb25idWZbMF0g PSB5eXl5bW1kZFs0XTsKKwltb25idWZbMV0gPSB5eXl5bW1kZFs1XTsKKwltb25idWZbMl0gPSBO VUw7CisJZGF5YnVmWzBdID0geXl5eW1tZGRbNl07CisJZGF5YnVmWzFdID0geXl5eW1tZGRbN107 CisJZGF5YnVmWzJdID0gTlVMOworCWRheSA9IGRheWJ1ZjsKKwluZGF5ID0gYXRvaShkYXlidWYp OworCW1vbnRoID0gbW9uYnVmOworCXllYXIgPSB5ZWFyYnVmOworICAgIH0KKyAgICBpZiAoIXll YXIpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIkludGVybmFsIGVycm9yIC0gZGF0ZSBub3QgZGVm YXVsdGVkIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVy bihOVUxMKTsKKyAgICB9CisgICAgLyogR2V0IGhlcmUgd2l0aCBkYXksIG1vbnRoLCBhbmQgeWVh ciBzZXQgKi8KKyAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgZG90aW1lIGRheSIsZGF5LDApOwor ICAgIGRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgbW9udGgiLG1vbnRoLDApOworICAgIGRl YnVnKEYxMTAsImNtY3Z0ZGF0ZSBkb3RpbWUgeWVhciIseWVhciwwKTsKKyAgICBkZWJ1ZyhGMTEw LCJjbWN2dGRhdGUgZG90aW1lIHMiLHMsMCk7CisgICAgZGVidWcoRjExMCwiY21jdnRkYXRlIGRv dGltZSBwIixwLDApOworICAgIHggPSBhdG9pKG1vbnRoKTsKKyAgICBpZiAoeCA+IDEyIHx8IHgg PCAxKSB7CisJbWFrZXN0cigmY21kYXRlbXNnLCJNb250aCBvdXQgb2YgcmFuZ2UiKTsKKwlkZWJ1 ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0K KyAgICBuZGF5ICA9IGF0b2koZGF5KTsKKyAgICBpID0gbWRheXNbeF07CisgICAgaWYgKHggPT0g MikgaWYgKGlzbGVhcChhdG9pKHllYXIpKSkgaSsrOworICAgIGlmIChuZGF5ID4gaSB8fCBuZGF5 IDwgMSkgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiRGF5IG91dCBvZiByYW5nZSIpOworCWRlYnVn KEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwlyZXR1cm4oTlVMTCk7CisgICAgfQor ICAgIGlmICghKnAgJiYgdCA9PSAwKSB7CisJc3ByaW50Zih6YnVmLCIlMDRkJTAyZCUwMmQiLGF0 b2koeWVhciksYXRvaShtb250aCksbmRheSk7CQorCWRwID0gemJ1ZjsKKwlnb3RvIHhjdnRkYXRl OworICAgIH0KKyAgICBpZiAoKnAgPT0gJysnIHx8ICpwID09ICctJykgewkvKiBHTVQgb2Zmc2V0 IHdpdGhvdXQgYSB0aW1lICovCisJaGggPSAwOwkJCQkvKiBzbyBkZWZhdWx0IHRpbWUgdG8gMDA6 MDA6MDAgKi8KKwltbSA9IDA7CisJc3MgPSAwOworCWdvdG8gY210aW1lem9uZTsJCS8qIGFuZCBn byBkbyB0aW1lem9uZSAqLworICAgIH0KKyAgICBpZiAoKnAgJiYgIWlzZGlnaXQoKnApICYmICpw ICE9ICc6JykgeworCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCB0aW1lIik7CisJZGVidWco RjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9Cisg ICAgc3ByaW50Zih5eXl5bW1kZCwiJXMlcyUwMmQiLHllYXIsbW9udGgsbmRheSk7IC8qIGZvciB0 eiBjYWxjdWxhdGlvbnMuLi4gKi8KKworICAgIHN0YXRlID0gMTsJCQkJLyogSW5pdGlhbGl6ZSB0 aW1lLXBhcnNpbmcgRlNBICovCisgICAgaGggPSAwOwkJCQkvKiBob3VycyAqLworICAgIG1tID0g MDsJCQkJLyogbWludXRlcyAqLworICAgIHNzID0gMDsJCQkJLyogc2Vjb25kcyAqLworICAgIGZm ID0gLTE7CQkJCS8qIGZyYWN0aW9uICovCisgICAgZCA9IDA7CQkJCS8qIERpZ2l0IGNvdW50ZXIg Ki8KKyAgICBwMiA9IHA7CQkJCS8qIFByZWxpbWluYXJ5IGRpZ2l0IGNvdW50Li4uICovCisgICAg d2hpbGUgKGlzZGlnaXQoKnAyKSkgeworCWQrKzsKKwlwMisrOworICAgIH0KKyAgICBpZiAoZCA+ IDYpIHsKKwltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IHRpbWUgZGlnaXRzIik7CisJZGVi dWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9 CisgICAgZCA9IChkICYgMSAmJiAqcDIgIT0gJzonKSA/IDEgOiAwOwkvKiBPZGQgaW1wbGllcyBs ZWFkaW5nICcwJyAqLworCisgICAgd2hpbGUgKCpwKSB7CQkJLyogR2V0IHRoZSB0aW1lLCBpZiBh bnkgKi8KKwlpZiAoaXNkaWdpdCgqcCkpIHsJCS8qIGRpZ2l0ICovCisJICAgIGlmIChkKysgPiAx KSB7CisJCXN0YXRlKys7CisJCWQgPSAxOworCSAgICB9CisJICAgIHN3aXRjaCAoc3RhdGUpIHsK KwkgICAgICBjYXNlIDE6CQkJLyogSG91cnMgKi8KKwkJaGggPSBoaCAqIDEwICsgKCpwIC0gJzAn KTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAyOgkJCS8qIE1pbnV0ZXMgKi8KKwkJbW0gPSBtbSAq IDEwICsgKCpwIC0gJzAnKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAzOgkJCS8qIFNlY29uZHMg Ki8KKwkJc3MgPSBzcyAqIDEwICsgKCpwIC0gJzAnKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSA0 OgkJCS8qIEZyYWN0aW9uIG9mIHNlY29uZCAqLworCQlpZiAoZmYgPCAwKQorCQkgIGZmID0gKCpw ID4gJzQnKSA/IDEgOiAwOworCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSBpZiAoKnAgPT0gJzon KSB7CQkvKiBDb2xvbiAqLworCSAgICBzdGF0ZSsrOworCSAgICBkID0gMDsKKwkgICAgaWYgKHN0 YXRlID4gMykgeworCQltYWtlc3RyKCZjbWRhdGVtc2csIlRvbyBtYW55IHRpbWUgZmllbGRzIik7 CisJCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJcmV0dXJuKE5VTEwp OworCSAgICB9CisJfSBlbHNlIGlmICgqcCA9PSAnLicpIHsKKwkgICAgaWYgKHN0YXRlID09IDMp IHsKKwkJc3RhdGUgPSA0OworCQlkID0gMDsKKwkgICAgfSBlbHNlIHsKKwkJbWFrZXN0cigmY21k YXRlbXNnLCJJbXByb3BlciBmcmFjdGlvbiIpOworCQlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNt ZGF0ZW1zZywtMSk7CisJCXJldHVybihOVUxMKTsKKwkgICAgfQorCX0gZWxzZSBpZiAoKnAgPT0g U1ApIHsJCS8qIFNwYWNlICovCisJICAgIHdoaWxlICgqcCAmJiAoKnAgPT0gU1ApKQkvKiBwb3Np dGlvbiB0byBmaXJzdCBub25zcGFjZSAqLworCSAgICAgIHArKzsKKwkgICAgYnJlYWs7CisJfSBl bHNlIGlmIChpc2FscGhhKCpwKSkgewkvKiBBTS9QTS9aIG9yIHRpbWV6b25lICovCisJICAgIGJy ZWFrOworCX0gZWxzZSBpZiAoKnAgPT0gJysnIHx8ICpwID09ICctJykgeyAvKiBHTVQgb2Zmc2V0 ICovCisJICAgIGJyZWFrOworCX0gZWxzZSB7CisJICAgIG1ha2VzdHIoJmNtZGF0ZW1zZywiSW52 YWxpZCB0aW1lIGNoYXJhY3RlcnMiKTsKKwkgICAgZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRh dGVtc2csLTEpOworCSAgICByZXR1cm4oTlVMTCk7CisJfQorCXArKzsKKyAgICB9CisgICAgaWYg KCEqcCkJCQkJLyogSWYgbm90aGluZyBsZWZ0ICovCisgICAgICBnb3RvIHhjbWRhdGU7CQkJLyog Z28gZmluaXNoIHVwICovCisKKyAgICAvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgSEgsIE1NLCBT UywgYW5kIEZGICovCisgICAgLyogTm93IGhhbmRsZSB0aGUgcmVzdDogQU0sIFBNLCBhbmQvb3Ig dGltZXpvbmUgaW5mbyAqLworCisgICAgaWYgKCFja3N0cmNtcChwLCJhbSIsMiwwKSkgewkvKiBB TS9QTS4uLiAqLworCXBtZmxhZyA9IDA7CisJcCArPSAyOworICAgIH0gZWxzZSBpZiAoIWNrc3Ry Y21wKHAsImEubS4iLDQsMCkpIHsKKwlwbWZsYWcgPSAwOworCXAgKz0gNDsKKyAgICB9IGVsc2Ug aWYgKCFja3N0cmNtcChwLCJwbSIsMiwwKSkgeworCXBtZmxhZyA9IDE7CisJcCArPSAyOworICAg IH0gZWxzZSBpZiAoIWNrc3RyY21wKHAsInAubS4iLDQsMCkpIHsKKwlwbWZsYWcgPSAxOworCXAg Kz0gNDsKKyAgICB9CisgICAgaWYgKHBtZmxhZyAmJiBoaCA8IDEyKQkJLyogSWYgUE0gd2FzIGdp dmVuICovCisgICAgICBoaCArPSAxMjsJCQkJLyogYWRkIDEyIHRvIHRoZSBob3VyICovCisKKyAg ICAvKiBOb3cgaGFuZGxlIHRpbWV6b25lICovCisKKyAgY210aW1lem9uZToKKyAgICBkZWJ1ZyhG MTEwLCJjbWN2dGRhdGUgdGltZXpvbmUiLHAsMCk7CisKKyAgICB6aGggPSAwOwkJCQkvKiBHTVQg b2Zmc2V0IEhIICovCisgICAgem1tID0gMDsJCQkJLyogR01UIG9mZnNldCBNTSAqLworICAgIGdt dHNpZ24gPSAwOwkJCS8qIFNpZ24gb2YgR01UIG9mZnNldCAqLworICAgIGlzZ210ID0gMDsJCQkJ LyogMSBpZiB0aW1lIGlzIEdNVCAqLworCisgICAgd2hpbGUgKCpwICYmICpwID09IFNQKQkJLyog R29iYmxlIHNwYWNlcyAqLworICAgICAgcCsrOworICAgIGlmICghKnApCQkJCS8qIElmIG5vdGhp bmcgbGVmdCAqLworICAgICAgZ290byB4Y21kYXRlOwkJCS8qIHdlJ3JlIGRvbmUgKi8KKworICAg IGlmIChpc2FscGhhKCpwKSkgewkJCS8qIFNvbWV0aGluZyBsZWZ0ICovCisJaW50IHpvbmUgPSAw OwkJCS8qIEFscGhhYmV0aWMgbXVzdCBiZSB0aW1lem9uZSAqLworCXAyID0gcDsJCQkJLyogSXNv bGF0ZSB0aW1lem9uZSAqLworCXArKzsKKwl3aGlsZSAoaXNhbHBoYSgqcCkpCisJICBwKys7CisJ cDMgPSBwOworCWNjID0gKnA7CisJKnAgPSBOVUw7CisJcCA9IHAyOwkJCQkvKiBIYXZlIHRpbWV6 b25lLCBsb29rIGl0IHVwICovCisJem9uZSA9IGxvb2t1cCh1c2F0eixwLG51c2F0eixOVUxMKTsK KwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgdGltZXpvbmUgYWxwaGEiLHAsem9uZSk7CisKKwlpZiAo em9uZSA8IDApIHsJCQkvKiBOb3QgZm91bmQgKi8KKwkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJV bmtub3duIHRpbWV6b25lIik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNn LC0xKTsKKwkgICAgcmV0dXJuKE5VTEwpOworCX0KKwlpc2dtdCsrOwkJCS8qIEFsbCBkYXRlcyBh cmUgR01UIGZyb20gaGVyZSBkb3duICovCisJaWYgKHpvbmUgIT0gMCkgewkJLyogQnV0IG5vdCB0 aGlzIG9uZSBzbyBtYWtlIGl0IEdNVCAqLworCSAgICBoaCArPSB6b25lOwkJCS8qIFJGQyA4MjIg dGltZXpvbmU6IEVTVCBldGMgKi8KKwkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGhoICsgem9u ZSIsIiIsaGgpOworCSAgICBpZiAoaGggPiAyMykgewkJLyogT2Zmc2V0IGNyb3NzZXMgZGF0ZSBi b3VuZGFyeSAqLworCQlpbnQgaTsKKwkJbG9uZyBqZDsKKwkJamQgPSBtamQoeXl5eW1tZGQpOwkv KiBHZXQgTUpEICovCisJCWpkICs9IGhoIC8gMjQ7CQkvKiBBZGQgbmV3IGRheShzKSAqLworCQlo aCA9IGhoICUgMjQ7CQkvKiBhbmQgY29udmVydCBiYWNrIHRvIHl5eXltbWRkICovCisJCWNrc3Ry bmNweSh5eXl5bW1kZCxtamQyZGF0ZShqZCksWVlZWU1NREQpOworCQlkZWJ1ZyhGMTExLCJjbWN2 dGRhdGUgem9uZS1hZGp1c3RlZCBkYXRlIix5eXl5bW1kZCxoaCk7CisJCWZvciAoaSA9IDA7IGkg PCA0OyBpKyspCisJCSAgeWVhcmJ1ZltpXSA9IHl5eXltbWRkW2ldOworCQl5ZWFyYnVmWzRdID0g TlVMOworCQltb25idWZbMF0gPSB5eXl5bW1kZFs0XTsKKwkJbW9uYnVmWzFdID0geXl5eW1tZGRb NV07CisJCW1vbmJ1ZlsyXSA9IE5VTDsKKwkJZGF5YnVmWzBdID0geXl5eW1tZGRbNl07CisJCWRh eWJ1ZlsxXSA9IHl5eXltbWRkWzddOworCQlkYXlidWZbMl0gPSBOVUw7CisJCWRheSA9IGRheWJ1 ZjsKKwkJbmRheSA9IGF0b2koZGF5YnVmKTsKKwkJbW9udGggPSBtb25idWY7CisJCXllYXIgPSB5 ZWFyYnVmOworCSAgICB9CisJfQorCXAgPSBwMzsJCQkJLyogUHV0IGJhY2sgd2hhdGV2ZXIgd2Ug cG9rZWQgYWJvdmUgKi8KKwkqcCA9IGNjOworCisgICAgfSBlbHNlIGlmICgqcCA9PSAnKycgfHwg KnAgPT0gJy0nKSB7IC8qIEdNVC9VVEMgb2Zmc2V0ICovCisJcDMgPSBwOworCWRlYnVnKEYxMTAs ImNtY3Z0ZGF0ZSB0aW1lem9uZSBHTVQgb2Zmc2V0IixwLDApOworCWdtdHNpZ24gPSAoKnAgPT0g JysnKSA/IC0xIDogMTsKKwlpc2dtdCsrOworCXArKzsKKwl3aGlsZSAoKnAgPT0gU1ApIHArKzsK KwlkID0gMDsKKwlwMiA9IHA7CisJd2hpbGUgKGlzZGlnaXQoKnApKSB7CQkvKiBDb3VudCBkaWdp dHMgKi8KKwkgICAgZCsrOworCSAgICBwKys7CisJfQorCWlmIChkICE9IDQpIHsJCQkvKiBTdHJp Y3QgUkZDIFsyXTgyMiAqLworCSAgICBpc2dtdCA9IDA7CQkJLyogSWYgbm90IGV4YWN0bHkgNCBk aWdpdHMgKi8KKwkgICAgcCA9IHAzOwkJCS8qIGl0J3Mgbm90IGEgR01UIG9mZnNldC4gKi8KKwkg ICAgZ290byBkZWx0YTsJCQkvKiBTbyB0cmVhdCBpdCBhcyBhIGRlbHRhIHRpbWUuICovCisJfQor CWQgPSAoZCAmIDEgJiYgKnAgIT0gJzonKSA/IDEgOiAwOyAvKiBPZGQgaW1wbGllcyBsZWFkaW5n ICcwJyAqLworCXAgPSBwMjsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUgR01UIG9mZnNldCBzaWdu IixwLGdtdHNpZ24pOworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBHTVQgb2Zmc2V0IGQiLCIiLGQp OworCXN0YXRlID0gMTsKKwl3aGlsZSAoKnApIHsKKwkgICAgaWYgKGlzZGlnaXQoKnApKSB7CQkv KiBkaWdpdCAqLworCQlpZiAoZCsrID4gMSkgeworCQkgICAgc3RhdGUrKzsKKwkJICAgIGQgPSAx OworCQl9CisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJICBjYXNlIDE6CisJCSAgICB6aGggPSB6aGgg KiAxMCArICgqcCAtICcwJyk7CisJCSAgICBicmVhazsKKwkJICBjYXNlIDI6CisJCSAgICB6bW0g PSB6bW0gKiAxMCArICgqcCAtICcwJyk7CisJCSAgICBicmVhazsKKwkJICBkZWZhdWx0OgkJLyog SWdub3JlIHNlY29uZHMgb3IgZnJhY3Rpb25zICovCisJCSAgICBicmVhazsKKwkJfQkJCQorCSAg ICB9IGVsc2UgaWYgKCpwID09ICc6JykgewkvKiBDb2xvbiAqLworCQlzdGF0ZSsrOworCQlkID0g MDsKKwkgICAgfSBlbHNlIGlmICgqcCA9PSBTUCB8fCAqcCA9PSAnKCcpIHsKKwkJYnJlYWs7CisJ ICAgIH0gZWxzZSB7CisJCXAgPSBwMzsJCQkvKiBNYXliZSBpdCdzIG5vdCBhIEdNVCBvZmZzZXQu ICovCisJCWdvdG8gZGVsdGE7CQkvKiBTbyB0cmVhdCBpdCBhcyBhIGRlbHRhIHRpbWUuICovCisJ ICAgIH0KKwkgICAgcCsrOworCX0KKyAgICB9CisgICAgZGVidWcoRjExMCwiY21jdnRkYXRlIHNv dXJjZSBzdHJpbmcgYWZ0ZXIgdGltZXpvbmUiLHAsMCk7CisKKyAgICBpZiAoKnApIHsJCQkJLyog QW55dGhpbmcgbGVmdD8gKi8KKwlwMiA9IHA7CisJd2hpbGUgKCpwMiA9PSBTUCkJCS8qIFNraXAg cGFzdCBzcGFjZXMgKi8KKwkgIHAyKys7CisJaWYgKCpwMiA9PSAnKCcpIHsJCS8qIFJGQy04MjIg Y29tbWVudD8gKi8KKwkgICAgaW50IHBjID0gMTsJCQkvKiBwYXJlbiBjb3VudGVyICovCisJICAg IHAyKys7CisJICAgIHdoaWxlICgqcDIpIHsKKwkJaWYgKCpwMiA9PSAnKScpIHsKKwkJICAgIGlm ICgtLXBjID09IDApIHsKKwkJCXAyKys7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfSBlbHNlIGlm ICgqcDIgPT0gJyknKSB7CisJCSAgICBwYysrOworCQl9CisJCXAyKys7CisJICAgIH0JCQorCSAg ICB3aGlsZSAoKnAyID09IFNQKQkJLyogU2tpcCBwYXN0IHNwYWNlcyAqLworCSAgICAgIHAyKys7 CisJICAgIGlmICghKnAyKQkJCS8qIEFueXRoaW5nIGxlZnQ/ICovCisJICAgICAgKnAgPSBOVUw7 CQkJLyogTm8sIGVyYXNlIGNvbW1lbnQgKi8KKwl9CisJaWYgKCEqcDIpCQkJLyogQW55dGhpbmcg bGVmdD8gKi8KKwkgIGdvdG8geGNtZGF0ZTsJCQkvKiBObywgZG9uZS4gKi8KKwlwID0gcDI7CisK KyAgICAgIGRlbHRhOgorCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBkZWx0YSB5eXl5bW1kZCIseXl5 eW1tZGQsMCk7CisJZGVidWcoRjExMCwiY21jdnRkYXRlIGRlbHRhIHllYXIiLHllYXIsMCk7CisJ ZGVidWcoRjExMCwiY21jdnRkYXRlIGRlbHRhIHAiLHAsMCk7CisKKwlpZiAoKnAgPT0gJysnIHx8 ICpwID09ICctJykgewkvKiBEZWx0YSB0aW1lICovCisJICAgIGludCBzdGF0ZSA9IE5FRURfREFZ UzsJLyogU3RhcnQgb2ZmIGxvb2tpbmcgZm9yIGRheXMgKi8KKwkgICAgY2hhciBjID0gMDsKKwkg ICAgZHNpZ24gPSAxOwkJCS8qIEdldCBzaWduICovCisJICAgIGlmICgqcCsrID09ICctJykKKwkg ICAgICBkc2lnbiA9IC0xOworCSAgICB3aGlsZSAoKnAgPT0gU1ApCQkvKiBTa2lwIGludGVydmVu aW5nIHNwYWNlcyAqLworCSAgICAgIHArKzsKKwkgICAgd2hpbGUgKHN0YXRlKSB7CQkvKiBGU0Eg dG8gcGFyc2UgZGVsdGEgdGltZSAqLworCQlpZiAoc3RhdGUgPCAwIHx8ICFpc2RpZ2l0KCpwKSkg eworCQkgICAgbWFrZXN0cigmY21kYXRlbXNnLCJJbnZhbGlkIGRlbHRhIHRpbWUiKTsKKwkJICAg IGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJICAgIHJldHVybihOVUxM KTsKKwkJfQorCQlwMiA9IHA7CQkJLyogR2V0IG5leHQgbnVtZXJpYyBmaWVsZCAqLworCQl3aGls ZSAoaXNkaWdpdCgqcDIpKQorCQkgIHAyKys7CisJCWMgPSAqcDI7CQkvKiBBbmQgYnJlYWsgY2hh cmFjdGVyICovCisJCSpwMiA9IE5VTDsJCS8qIFRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCisKKwkJ c3dpdGNoIChzdGF0ZSkgewkvKiBJbnRlcnByZXQgYWNjb3JkaW5nIHRvIHN0YXRlICovCisJCSAg Y2FzZSBORUVEX0RBWVM6CS8qIEluaXRpYWwgKi8KKwkJICAgIGlmICgoYyA9PSAnLScpIHx8CS8q IFZNUyBmb3JtYXQgKi8KKwkJCSgoYyA9PSAnZCcgfHwgYyA9PSAnRCcpCisJCQkgJiYgIWlzYWxw aGEoKihwMisxKSkpKSB7IC8qIERheXMgKi8KKwkJCWRkYXlzID0gYXRvaShwKTsKKwkJCWlmICgh KihwMisxKSkJCQkKKwkJCSAgc3RhdGUgPSAwOworCQkJZWxzZQkJICAgICAgLyogaWYgYW55dGhp bmcgaXMgbGVmdCAqLworCQkJICBzdGF0ZSA9IE5FRURfSFJTOyAgIC8qIG5vdyB3ZSB3YW50IGhv dXJzLiAqLworCQkgICAgfSBlbHNlIGlmICgoYyA9PSAnVycgfHwgYyA9PSAndycpICYmICFpc2Fs cGhhKCoocDIrMSkpKSB7CisJCQlkZGF5cyA9IGF0b2kocCkgKiA3OyAgIC8qIHdlZWtzLi4uICov CisJCQlpZiAoISoocDIrMSkpCQkJCisJCQkgIHN0YXRlID0gMDsKKwkJCWVsc2UKKwkJCSAgc3Rh dGUgPSBORUVEX0hSUzsKKwkJICAgIH0gZWxzZSBpZiAoKGMgPT0gJ00nIHx8IGMgPT0gJ20nKSAm JiAhaXNhbHBoYSgqKHAyKzEpKSkgeworCQkJZG1vbnRocyA9IGF0b2kocCk7IC8qIG1vbnRocy4u LiAqLworCQkJaWYgKCEqKHAyKzEpKQkJCQorCQkJICBzdGF0ZSA9IDA7CisJCQllbHNlCisJCQkg IHN0YXRlID0gTkVFRF9IUlM7CisJCSAgICB9IGVsc2UgaWYgKChjID09ICdZJyB8fCBjID09ICd5 JykgJiYgIWlzYWxwaGEoKihwMisxKSkpIHsKKwkJCWR5ZWFycyA9IGF0b2kocCk7IC8qIHllYXJz Li4uICovCisJCQlpZiAoISoocDIrMSkpCQkJCisJCQkgIHN0YXRlID0gMDsKKwkJCWVsc2UKKwkJ CSAgc3RhdGUgPSBORUVEX0hSUzsKKwkJICAgIH0gZWxzZSBpZiAoYyA9PSAnOicpIHsgLyogZGVs aW1pdGVyIGlzIGNvbG9uICovCisJCQlkaG91cnMgPSBhdG9pKHApOyAgLyogc28gaXQncyBob3Vy cyAqLworCQkJc3RhdGUgPSBORUVEX01JTlM7IC8qIG5vdyB3ZSB3YW50IG1pbnV0ZXMgKi8KKwkJ ICAgIH0gZWxzZSBpZiAoIWMpIHsgICAgICAgLyogZW5kIG9mIHN0cmluZyAqLworCQkJZGhvdXJz ID0gYXRvaShwKTsgIC8qIGl0J3Mgc3RpbGwgaG91cnMgKi8KKwkJCXN0YXRlID0gMDsgICAgICAg ICAvKiBhbmQgd2UncmUgZG9uZSAqLworCQkgICAgfSBlbHNlIGlmIChpc2FscGhhKGMpIHx8IGMg PT0gU1ApIHsKKwkJCWlmIChjID09IFNQKSB7CS8qIEl0J3MgYSBrZXl3b3JkPyAqLworCQkJICAg IHAyKys7CS8qIFNraXAgc3BhY2VzICovCisJCQkgICAgd2hpbGUgKCpwMiA9PSBTUCkKKwkJCSAg ICAgIHAyKys7CisJCQl9IGVsc2UgewkvKiBvciByZXBsYWNlIGZpcnN0IGxldHRlciAqLworCQkJ ICAgICpwMiA9IGM7CisJCQl9CisJCQlwMyA9IHAyOwkvKiBwMiBwb2ludHMgdG8gYmVnaW5uaW5n IG9mIGtleXdvcmQgKi8KKwkJCXdoaWxlIChpc2FscGhhKCpwMykpIC8qIEZpbmQgZW5kIG9mIGtl eXdvcmQgKi8KKwkJCSAgcDMrKzsKKwkJCWMgPSAqcDM7CS8qIE5VTCBpdCBvdXQgc28gd2UgY2Fu IGxvb2sgaXQgdXAgKi8KKwkJCWlmICgqcDMpCS8qIHAzIHBvaW50cyB0byBrZXl3b3JkIHRlcm1p bmF0b3IgKi8KKwkJCSAgKnAzID0gTlVMOworCQkJdW5pdHMgPSBsb29rdXAodGltZXVuaXRzLHAy LG51bml0cyxOVUxMKTsKKwkJCWlmICh1bml0cyA8IDApIHsKKwkJCSAgICBtYWtlc3RyKCZjbWRh dGVtc2csIkludmFsaWQgdW5pdHMgaW4gZGVsdGEgdGltZSIpOworCQkJICAgIGRlYnVnKEYxMTEs ImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkJCSAgICByZXR1cm4oTlVMTCk7CisJCQl9CisJ CQkqcDIgPSBOVUw7CS8qIFJlLXRlcm1pbmF0ZSB0aGUgbnVtYmVyICovCisJCQkqcDMgPSBjOwor CQkJd2hpbGUgKCpwMyA9PSBTUCkgLyogUG9pbnQgYXQgZmllbGQgYWZ0ZXIgdW5pdHMgKi8KKwkJ CSAgcDMrKzsKKwkJCXAyID0gcDM7CisJCQlzd2l0Y2ggKHVuaXRzKSB7CisJCQkgIGNhc2UgVFVf REFZUzoKKwkJCSAgICBkZGF5cyA9IGF0b2kocCk7CisJCQkgICAgYnJlYWs7CisJCQkgIGNhc2Ug VFVfV0VFS1M6CisJCQkgICAgZGRheXMgPSBhdG9pKHApICogNzsKKwkJCSAgICBicmVhazsKKwkJ CSAgY2FzZSBUVV9NT05USFM6CisJCQkgICAgZG1vbnRocyA9IGF0b2kocCk7CisJCQkgICAgYnJl YWs7CisJCQkgIGNhc2UgVFVfWUVBUlM6CisJCQkgICAgZHllYXJzID0gYXRvaShwKTsKKwkJCSAg ICBicmVhazsKKwkJCX0KKwkJCWlmICgqcDIpIHsKKwkJCSAgICBzdGF0ZSA9IE5FRURfSFJTOwor CQkJICAgIHAyLS07CisJCQl9IGVsc2UKKwkJCSAgc3RhdGUgPSAwOworCisJCSAgICB9IGVsc2Ug ewkJLyogQW55dGhpbmcgZWxzZSAqLworCQkJc3RhdGUgPSAtMTsJLyogaXMgYW4gZXJyb3IgKi8K KwkJICAgIH0KKwkJICAgIGJyZWFrOworCQkgIGNhc2UgTkVFRF9IUlM6CS8qIExvb2tpbmcgZm9y IGhvdXJzICovCisJCSAgICBkZWJ1ZyhGMDAwLCJjbWN2dGRhdGUgTkVFRF9IUlMiLHAsYyk7CisJ CSAgICBpZiAoYyA9PSAnOicpIHsKKwkJCWRob3VycyA9IGF0b2kocCk7CisJCQlzdGF0ZSA9IE5F RURfTUlOUzsKKwkJICAgIH0gZWxzZSBpZiAoIWMpIHsKKwkJCWRob3VycyA9IGF0b2kocCk7CisJ CQlzdGF0ZSA9IDA7CisJCSAgICB9IGVsc2UgeworCQkJc3RhdGUgPSAtMTsKKwkJICAgIH0KKwkJ ICAgIGJyZWFrOworCQkgIGNhc2UgTkVFRF9NSU5TOgkvKiBMb29raW5nIGZvciBtaW51dGVzICov CisJCSAgICBpZiAoYyA9PSAnOicpIHsKKwkJCWRtaW5zID0gYXRvaShwKTsKKwkJCXN0YXRlID0g TkVFRF9TRUNTOworCQkgICAgfSBlbHNlIGlmICghYykgeworCQkJZG1pbnMgPSBhdG9pKHApOwor CQkJc3RhdGUgPSAwOworCQkgICAgfSBlbHNlIHsKKwkJCXN0YXRlID0gLTE7CisJCSAgICB9CisJ CSAgICBicmVhazsKKwkJICBjYXNlIE5FRURfU0VDUzoJLyogTG9va2luZyBmb3Igc2Vjb25kcyAq LworCQkgICAgaWYgKGMgPT0gJy4nKSB7CisJCQlkc2VjcyA9IGF0b2kocCk7CisJCQlzdGF0ZSA9 IE5FRURfRlJBQzsKKwkJICAgIH0gZWxzZSBpZiAoIWMpIHsKKwkJCWRzZWNzID0gYXRvaShwKTsK KwkJCXN0YXRlID0gMDsKKwkJICAgIH0gZWxzZSB7CisJCQlzdGF0ZSA9IC0xOworCQkgICAgfQor CQkgICAgYnJlYWs7CisJCSAgY2FzZSBORUVEX0ZSQUM6CS8qIEZyYWN0aW9uIG9mIHNlY29uZCAq LworCQkgICAgaWYgKCFjICYmIHJkaWdpdHMocCkpIHsKKwkJCWlmICgqcCA+ICc0JykKKwkJCSAg ZHNlY3MrKzsKKwkJCXN0YXRlID0gMDsKKwkJICAgIH0gZWxzZSB7CisJCQlzdGF0ZSA9IC0xOwor CQkgICAgfQorCQkgICAgYnJlYWs7CisJCX0KKwkJaWYgKGMpCQkJLyogbmV4dCBmaWVsZCBpZiBh bnkgKi8KKwkJICBwID0gcDIgKyAxOworCSAgICB9CisJICAgIGhhdmVkZWx0YSA9IDE7CisKKwl9 IGVsc2UgeworCSAgICBtYWtlc3RyKCZjbWRhdGVtc2csIkV4dHJhbmVvdXMgbWF0ZXJpYWwgYXQg ZW5kIik7CisJICAgIGRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSIsY21kYXRlbXNnLC0xKTsKKwkgICAg cmV0dXJuKE5VTEwpOworCX0KKyAgICB9CisKKyB4Y21kYXRlOgorCisgICAgaWYgKCh0ICE9IDIg JiYgaGggPiAyNCkgfHwgaGggPCAwKSB7IC8qIEhvdXIgcmFuZ2UgY2hlY2sgKi8KKwltYWtlc3Ry KCZjbWRhdGVtc2csIkludmFsaWQgaG91cnMiKTsKKwlkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNt ZGF0ZW1zZywtMSk7CisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAobW0gPiA1OSkgewkJ CS8qIE1pbnV0ZSByYW5nZSBjaGVjayAqLworCW1ha2VzdHIoJmNtZGF0ZW1zZywiSW52YWxpZCBt aW51dGVzIik7CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVy bihOVUxMKTsKKyAgICB9CisgICAgaWYgKGZmID4gMCkgewkJCS8qIEZyYWN0aW9uIG9mIHNlY29u ZD8gKi8KKwlpZiAoc3MgPCA1OSkgeworCSAgICBzcysrOworCSAgICBmZiA9IDA7CisJfSBlbHNl IGlmIChtbSA8IDU5KSB7CisJICAgIHNzID0gMDsKKwkgICAgbW0rKzsKKwkgICAgZmYgPSAwOwor CX0gZWxzZSBpZiAoaGggPCAyNCkgeworCSAgICBzcyA9IDA7CisJICAgIG1tID0gMDsKKwkgICAg aGgrKzsKKwkgICAgZmYgPSAwOworCX0KKwkvKiBNdXN0IGFkZCBhIGRheSAtLSBsZWF2ZSBmZiBh dCAxLi4uICovCisJLyogKERPIFNPTUVUSElORyBBQk9VVCBUSElTIExBVEVSKSAqLworICAgIH0K KyAgICBpZiAoc3MgPiA2MCkgewkJCS8qIFNlY29uZHMgcmFuZ2UgY2hlY2sgKi8KKwltYWtlc3Ry KCZjbWRhdGVtc2csIkludmFsaWQgc2Vjb25kcyIpOyAvKiA2MCBpcyBvayBiZWNhdXNlIG9mICov CisJZGVidWcoRjExMSwiY21jdnRkYXRlIixjbWRhdGVtc2csLTEpOyAgLyogTGVhcCBTZWNvbmQu ICovCisJcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoKG1tIDwgMCB8fCBzcyA8IDApIHx8 CisJKHQgIT0gMiAmJiAoc3MgPiAwIHx8IG1tID4gMCkgJiYgaGggPiAyMykpIHsKKwltYWtlc3Ry KCZjbWRhdGVtc2csIkludmFsaWQgbWludXRlcyBvciBzZWNvbmRzIik7CisJZGVidWcoRjExMSwi Y21jdnRkYXRlIixjbWRhdGVtc2csLTEpOworCXJldHVybihOVUxMKTsKKyAgICB9CisgICAgZGVi dWcoRjExMCwiY21jdnRkYXRlIHllYXIiLHllYXIsMCk7CisgICAgZGVidWcoRjExMCwiY21jdnRk YXRlIG1vbnRoIixtb250aCwwKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgbmRheSIsIiIs bmRheSk7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGhoIiwiIixoaCk7CisgICAgZGVidWco RjEwMSwiY21jdnRkYXRlIG1tIiwiIixtbSk7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIHNz IiwiIixzcyk7CisgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGdtdHNpZ24iLCIiLGdtdHNpZ24p OworICAgIGRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSB6aGgiLCIiLHpoaCk7CisgICAgZGVidWcoRjEw MSwiY21jdnRkYXRlIHptbSIsIiIsem1tKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgaXNn bXQiLCIiLGlzZ210KTsKKworI2lmZGVmIFpMT0NBTFRJTUUKKy8qIEhhbmRsZSB0aW1lem9uZSAt LSBmaXJzdCBjb252ZXJ0IHRvIEdNVCAqLworCisgICAgemRkID0gMDsJCQkJLyogRGF5cyBjaGFu Z2VkICovCisgICAgaWYgKGlzZ210ICYmICh6bW0gfHwgemhoKSkgewkvKiBJZiBHTVQgb2Zmc2V0 IGdpdmVuICovCisJbG9uZyBzZWMxLCBzZWMyLCB6ejsKKwlzZWMxID0gc3MgKyA2MCAqIG1tICsg MzYwMCAqIGhoOworCXNlYzIgPSBnbXRzaWduICogKDYwICogem1tICsgMzYwMCAqIHpoaCk7CisJ c2VjMSArPSBzZWMyOworCWlmIChzZWMxIDwgMCkgeworCSAgICBzZWMxID0gMCAtIHNlYzE7CisJ ICAgIHpkZCA9IDBMIC0gKHNlYzEgLyA4NjQwMEwpOworCSAgICBzZWMxID0gc2VjMSAlIDg2NDAw TDsKKwl9IGVsc2UgaWYgKHNlYzEgPiA4NjQwMEwpIHsKKwkgICAgemRkID0gc2VjMSAvIDg2NDAw TDsKKwkgICAgc2VjMSA9IHNlYzEgJSA4NjQwMEw7CisJfQorCXNzID0gc2VjMSAlIDYwOworCXp6 ID0gc2VjMSAvIDYwOworCW1tID0genogJSA2MDsKKwloaCA9IHp6IC8gNjA7CisJZGVidWcoRjEw MSwiY21jdnRkYXRlIE5FVyBoaCIsIiIsaGgpOworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBORVcg bW0iLCIiLG1tKTsKKwlkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgTkVXIGRkIiwiIix6ZGQpOworCisv KiBBdCB0aGlzIHBvaW50IGhoOm1tOnNzIGlzIGluIEdNVCBhbmQgemRkIGlzIHRoZSBjYWxlbmRh ciBhZGp1c3RtZW50ICovCisKKyAgICB9CisjZW5kaWYgLyogWkxPQ0FMVElNRSAqLworCisgICAg aWYgKHl5eXltbWRkWzBdICYmICF5ZWFyKSB7CisJY2tzdHJuY3B5KHllYXJidWYseXl5eW1tZGQs NSk7CisJY2tzdHJuY3B5KG1vbmJ1ZiwmeXl5eW1tZGRbNF0sMyk7CisJY2tzdHJuY3B5KGRheWJ1 ZiwmeXl5eW1tZGRbNl0sMyk7CisJeWVhciA9IHllYXJidWY7CisJbW9udGggPSBtb25idWY7CisJ ZGF5ID0gZGF5YnVmOworCW5kYXkgPSBhdG9pKGRheWJ1Zik7CisgICAgfQorICAgIHNwcmludGYo emJ1ZiwiJTA0ZCUwMmQlMDJkICUwMmQ6JTAyZDolMDJkIiwgLyogU0FGRSAqLworCSAgICBhdG9p KHllYXIpLGF0b2kobW9udGgpLG5kYXksaGgsbW0sc3MKKwkgICAgKTsKKyAgICBkcCA9IHpidWY7 CisKKyNpZmRlZiBaTE9DQUxUSU1FCisgICAgLyogTm93IGNvbnZlcnQgZnJvbSBHTVQgdG8gbG9j YWwgdGltZSAqLworCisgICAgaWYgKGlzZ210KSB7CQkJLyogSWYgR01UIGNvbnZlcnQgdG8gbG9j YWwgdGltZSAqLworCWRlYnVnKEYxMTAsImNtY3Z0ZGF0ZSBHTVQgMSIsZHAsMCk7CisJaWYgKHpk ZCkgewkJCS8qIEFwcGx5IGFueSBjYWxlbmRhciBhZGp1c3RtZW50ICovCisJICAgIGxvbmcgeno7 CisJICAgIHp6ID0gbWpkKGRwKSArIHpkZDsKKwkgICAgc3ByaW50Zih6YnVmLCIlcyAlMDJkOiUw MmQ6JTAyZCIsbWpkMmRhdGUoenopLGhoLG1tLHNzKTsKKwl9CisJZGVidWcoRjExMCwiY21jdnRk YXRlIEdNVCAyIixkcCwwKTsKKwlpZiAoKHAgPSB6bG9jYWx0aW1lKGRwKSkpIHsKKwkgICAgZGVi dWcoRjExMCwiY21jdnRkYXRlIGFzY3RpbWUgemxvY2FsdGltZSIscCwwKTsKKwkgICAgaWYgKHAp IGNrc3RybmNweSh6YnVmLHAsMTgpOworCX0KKwlkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgR01UIDMi LGRwLDApOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJICB5ZWFyYnVmW2ldID0gZHBbaV07 CisJeWVhcmJ1Zls0XSA9IE5VTDsKKwltb25idWZbMF0gPSBkcFs0XTsKKwltb25idWZbMV0gPSBk cFs1XTsKKwltb25idWZbMl0gPSBOVUw7CisJZGF5YnVmWzBdID0gZHBbNl07CisJZGF5YnVmWzFd ID0gZHBbN107CisJZGF5YnVmWzJdID0gTlVMOworCWRheSA9IGRheWJ1ZjsKKwluZGF5ID0gYXRv aShkYXlidWYpOworCW1vbnRoID0gbW9uYnVmOworCXllYXIgPSB5ZWFyYnVmOworCWhoID0gYXRv aSgmZHBbOV0pOworCW1tID0gYXRvaSgmZHBbMTJdKTsKKwlzcyA9IGF0b2koJmRwWzE1XSk7Cisg ICAgfQorI2VuZGlmIC8qIFpMT0NBTFRJTUUgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZykgeworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBob3VyIiwiIixoaCk7CisJZGVidWcoRjEw MSwiY21jdnRkYXRlIG1pbnV0ZSIsIiIsbW0pOworCWRlYnVnKEYxMDEsImNtY3Z0ZGF0ZSBzZWNv bmQiLCIiLHNzKTsKKyAgICB9CisjZW5kaWYgLyogREVCTE9HICovCisKKyAgICBtYWtlc3RyKCZj bWRhdGVtc2csTlVMTCk7CisgICAgaWYgKGhhdmVkZWx0YSkgeworI2lmZGVmIERFQlVHCisJaWYg KGRlYmxvZykgeworCSAgICBkZWJ1ZyhGMTEwLCJjbWN2dGRhdGUgYmFzZSAiLGRwLDApOworCSAg ICBkZWJ1ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgc2lnbiIsIiIsZHNpZ24pOworCSAgICBkZWJ1 ZyhGMTAxLCJjbWN2dGRhdGUgZGVsdGEgeXJzICIsIiIsZHllYXJzKTsKKwkgICAgZGVidWcoRjEw MSwiY21jdnRkYXRlIGRlbHRhIG1vcyAiLCIiLGRtb250aHMpOworCSAgICBkZWJ1ZyhGMTAxLCJj bWN2dGRhdGUgZGVsdGEgZGF5cyIsIiIsZGRheXMpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWN2dGRh dGUgZGVsdGEgaHJzICIsIiIsZGhvdXJzKTsKKwkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRl bHRhIG1pbnMiLCIiLGRtaW5zKTsKKwkgICAgZGVidWcoRjEwMSwiY21jdnRkYXRlIGRlbHRhIHNl Y3MiLCIiLGRzZWNzKTsKKwl9CisjZW5kaWYgLyogREVCTE9HICovCisJaWYgKCEoZHAgPSBjbWRl bHRhKGF0b2koeWVhciksCisJCSAgICBhdG9pKG1vbnRoKSwKKwkJICAgIG5kYXksIGhoLCBtbSwg c3MsCisJCSAgICBkc2lnbiwgZHllYXJzLCBkbW9udGhzLCBkZGF5cywgZGhvdXJzLCBkbWlucywg ZHNlY3MpKSkgeworCSAgICBkZWJ1ZyhGMTExLCJjbWN2dGRhdGUiLGNtZGF0ZW1zZywtMSk7CisJ ICAgIHJldHVybihOVUxMKTsKKwl9CisgICAgfQorCisgIHhjdnRkYXRlOgkJCQkvKiBFeGl0IHBv aW50IGZvciBzdWNjZXNzICovCisgICAgeworCWludCBsZW4sIGssIG47CisJY2hhciAqIHA7CisJ ZGVidWcoRjExMCwiY21jdnRkYXRlIHhjdnRkYXRlIGRwIixkcCwwKTsKKwlpZiAoIWRwKSBkcCA9 ICIiOwkJLyogU2hvdWxkbid0IGhhcHBlbiAqLworCWlmICghKmRwKSByZXR1cm4oTlVMTCk7CQkv KiAuLi4gKi8KKwlsZW4gPSBzdHJsZW4oZHApOworCWRlYnVnKEYxMTEsImNtY3Z0ZGF0ZSByZXN1 bHQiLGRwLGxlbik7CisJayA9IGNtZGF0ZWJwIC0gKGNoYXIgKiljbWRhdGVidWY7IC8qIFNwYWNl IHVzZWQgKi8KKwluID0gQ01EQVRFQlVGIC0gayAtIDE7CQkvKiBTcGFjZSBsZWZ0ICovCisJaWYg KG4gPCBsZW4pIHsJCQkvKiBOb3QgZW5vdWdoPyAqLworCSAgICBjbWRhdGVicCA9IGNtZGF0ZWJ1 ZjsJLyogV3JhcCBhcm91bmQgKi8KKwkgICAgbiA9IENNREFURUJVRjsKKwl9CisJY2tzdHJuY3B5 KGNtZGF0ZWJwLGRwLG4pOworCXAgPSBjbWRhdGVicDsKKwljbWRhdGVicCArPSBsZW4gKyAxOwor CXJldHVybihwKTsKKyAgICB9Cit9CisKK2ludAorY212ZGF0ZShkKSBjaGFyICogZDsgewkJCS8q IFZlcmlmeSBkYXRlLXRpbWUgKi8KKyAgICBpbnQgaTsKKyAgICBpZiAoIWQpIHJldHVybigwKTsK KyAgICBpZiAoKGludClzdHJsZW4oZCkgIT0gMTcpIHJldHVybigwKTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgODsgaSsrKSB7IGlmICghaXNkaWdpdChkW2ldKSkgcmV0dXJuKDApOyB9CisgICAgaWYg KCFpc2RpZ2l0KGRbOV0pICB8fCAhaXNkaWdpdChkWzEwXSkgfHwKKwkhaXNkaWdpdChkWzEyXSkg fHwgIWlzZGlnaXQoZFsxM10pIHx8CisJIWlzZGlnaXQoZFsxNV0pIHx8ICFpc2RpZ2l0KGRbMTZd KSkKKyAgICAgIHJldHVybigwKTsKKyAgICBpZiAoIWNrc3RyY2hyKCIgVHRfLToiLGRbOF0pKSBy ZXR1cm4oMCk7CisgICAgaWYgKGRbMTFdICE9ICc6JyAmJiBkWzE0XSAhPSAnOicpIHJldHVybigw KTsKKyAgICByZXR1cm4oMSk7Cit9CisKKy8qIGMgbSBkIGkgZiBmIGQgYSB0IGUgIC0tICBHZXQg ZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRlLXRpbWVzICovCisKK2NoYXIgKgorY21kaWZmZGF0 ZShkMSxkMikgY2hhciAqIGQxLCAqIGQyOyB7CisgICAgY2hhciBkMWJ1Zls5XSwgZDJidWZbOV07 CisgICAgY2hhciB4MWJ1ZlsxOF0sIHgyYnVmWzE4XTsKKyAgICBjaGFyICogcDsKKworICAgIGlu dCBoaDEgPSAwLCBtbTEgPSAwLCBzczEgPSAwOworICAgIGludCBoaDIgPSAwLCBtbTIgPSAwLCBz czIgPSAwOworICAgIGludCBoaCwgbW0sIHNzOworICAgIGludCBzaWduOworICAgIGxvbmcgamQx LCBqZDIsIGpkLCBmMSwgZjIsIGZ4OworICAgIHN0YXRpYyBjaGFyIHJlc3VsdFsyNF0sICpycDsK KworICAgIGRlYnVnKEYxMTAsImNtZGlmZmRhdGUgZDEgQSIsZDEsMCk7CisgICAgZGVidWcoRjEx MCwiY21kaWZmZGF0ZSBkMiBBIixkMiwwKTsKKworICAgIGlmICghKHAgPSBjbWN2dGRhdGUoZDEs MSkpKQkJLyogQ29udmVydCBkYXRlcyB0byBzdGFuZGFyZCBmb3JtYXQgKi8KKyAgICAgIHJldHVy bihOVUxMKTsKKyAgICBja3N0cm5jcHkoeDFidWYscCwxOCk7CisgICAgZDEgPSB4MWJ1ZjsKKwor ICAgIGlmICghKHAgPSBjbWN2dGRhdGUoZDIsMSkpKQorICAgICAgcmV0dXJuKE5VTEwpOworICAg IGNrc3RybmNweSh4MmJ1ZixwLDE4KTsKKyAgICBkMiA9IHgyYnVmOworCisgICAgZGVidWcoRjEx MCwiY21kaWZmZGF0ZSBkMSBCIixkMSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJjbWRpZmZkYXRlIGQy IEIiLGQyLDApOworICAgIGlmICghY212ZGF0ZShkMSkgfHwgIWNtdmRhdGUoZDIpKQorICAgICAg cmV0dXJuKE5VTEwpOworCisgICAgaGgxID0gYXRvaSgmZDFbOV0pOwkJCS8qIEdldCBob3Vycywg bWludXRlcywgYW5kIHNlY29uZHMgKi8KKyAgICBtbTEgPSBhdG9pKCZkMVsxMl0pOwkJLyogZm9y IGZpcnN0IGRhdGUgKi8KKyAgICBzczEgPSBhdG9pKCZkMVsxNV0pOworICAgIGNrc3RybmNweShk MWJ1ZixkMSw5KTsKKworICAgIGhoMiA9IGF0b2koJmQyWzldKTsJCQkvKiBkaXR0byBmb3Igc2Vj b25kIGRhdGUgKi8KKyAgICBtbTIgPSBhdG9pKCZkMlsxMl0pOworICAgIHNzMiA9IGF0b2koJmQy WzE1XSk7CisgICAgY2tzdHJuY3B5KGQyYnVmLGQyLDkpOworICAgIAorICAgIGpkMSA9IG1qZChk MWJ1Zik7CQkJLyogR2V0IHRoZSB0d28gSnVsaWFuIGRhdGVzICovCisgICAgamQyID0gbWpkKGQy YnVmKTsKKyAgICBmMSA9IHNzMSArIDYwICogbW0xICsgMzYwMCAqIGhoMTsJLyogQ29udmVydCBm aXJzdCB0aW1lIHRvIHNlY29uZHMgKi8KKworICAgIGYyID0gc3MyICsgNjAgKiBtbTIgKyAzNjAw ICogaGgyOwkvKiBEaXR0byBmb3Igc2Vjb25kIHRpbWUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJjbWRp ZmZkYXRlIGpkMSIsIiIsamQxKTsKKyAgICBkZWJ1ZyhGMTAxLCJjbWRpZmZkYXRlIGYxIiwiIixm MSk7CisgICAgZGVidWcoRjEwMSwiY21kaWZmZGF0ZSBqZDIiLCIiLGpkMik7CisgICAgZGVidWco RjEwMSwiY21kaWZmZGF0ZSBmMiIsIiIsZjIpOworICAKKyAgICBpZiAoamQyID4gamQxIHx8IChq ZDEgPT0gamQyICYmIGYyID4gZjEpKSB7CisgICAgICAgIHNpZ24gPSAtMTsgCisgICAgICAgIGlm IChmMSA+IGYyKSB7amQyLS07IGYyICs9IDg2NDAwTDt9CisgICAgICAgIGpkID0gamQyIC0gamQx OworICAgICAgICBmeCA9IGYyIC0gZjE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2lnbiA9IDE7 CisgICAgICAgIGlmIChmMiA+IGYxKSB7amQxLS07IGYxICs9IDg2NDAwTDt9CisgICAgICAgIGpk ID0gamQxIC0gamQyOworICAgICAgICBmeCA9IGYxIC0gZjI7CisgICAgfQorICAgIGRlYnVnKEYx MTEsImNtZGlmZmRhdGUgc2lnbiBqZCIsc2lnbjwwPyItIjoiKyIsamQpOworICAgIGRlYnVnKEYx MDEsImNtZGlmZmRhdGUgZngiLCIiLGZ4KTsKKyAgCisgICAgaGggPSAoaW50KSAoZnggLyAzNjAw TCk7CQkvKiBDb252ZXJ0IHNlY29uZHMgdG8gaGg6bW06c3MgKi8KKworICAgIG1tID0gKGludCkg KGZ4ICUgMzYwMEwpIC8gNjBMOworICAgIHNzID0gKGludCkgKGZ4ICUgMzYwMEwpICUgNjBMOwor CisgICAgcnAgPSByZXN1bHQ7CQkJLyogRm9ybWF0IHRoZSByZXN1bHQgKi8KKyAgICAqcnArKyA9 IChzaWduIDwgMCkgPyAnLScgOiAnKyc7CisgICAgaWYgKGpkICE9IDAgJiYgaGgrbW0rc3MgPT0g MCkgeworCXNwcmludGYocnAsIiVsZGQiLGpkKTsKKyAgICB9IGVsc2UgaWYgKGpkID09IDApIHsK KwlpZiAoc3MgPT0gMCkKKwkgIHNwcmludGYocnAsIiVkOiUwMmQiLGhoLG1tKTsKKwllbHNlCisJ ICBzcHJpbnRmKHJwLCIlZDolMDJkOiUwMmQiLGhoLG1tLHNzKTsKKyAgICB9IGVsc2UgeworCWlm IChzcyA9PSAwKQorCSAgc3ByaW50ZihycCwiJWxkZCVkOiUwMmQiLGpkLGhoLG1tKTsKKwllbHNl CisJICBzcHJpbnRmKHJwLCIlbGRkJWQ6JTAyZDolMDJkIixqZCxoaCxtbSxzcyk7CisgICAgfQor ICAgIGRlYnVnKEYxMTAsImNtZGlmZmRhdGUgcmVzdWx0IixyZXN1bHQsMCk7CisgICAgcmV0dXJu KChjaGFyICopcmVzdWx0KTsKK30KKworI2lmbmRlZiBOT1NQTAorLyogcyBoIHUgZiBmIGwgZSBk IGEgdCBlICAtLSAgUmVhcnJhbmdlIGRhdGUgc3RyaW5nICovCisKKy8qCisgIENhbGwgd2l0aDoK KyAgICBBIGRhdGUgc3RyaW5nIGluIHN0YW5kYXJkIGZvcm1hdDogeXl5eW1tZGQgaGg6bW06c3Mg KHRpbWUgb3B0aW9uYWwpLgorICAgIE9wdGlvbnM6CisgICAgICAxOiBSZWZvcm1hdCBkYXRlIHRv IHl5eXktbW1tLWRkIChtbW0gPSBFbmdsaXNoIG1vbnRoIGFiYnJldmlhdGlvbikuCisgICAgICAy OiBSZWZvcm1hdCBkYXRlIHRvIGRkLW1tbS15eXl5IChtbW0gPSBFbmdsaXNoIG1vbnRoIGFiYnJl dmlhdGlvbikuCisgICAgICAzOiBSZWZvcm1hdCBhcyBudW1lcmljIHl5eXltbWRkaGhtbXNzLgor ICAgICAgNDogUmVmb3JtYXQgaW4gYXNjdGltZSgpIGZvcm1hdCBTYXQgTm92IDI2IDExOjEwOjM0 IDIwMDUKKyAgICBSZXR1cm5zOgorICAgICAgUG9pbnRlciB0byByZXN1bHQgaWYgYXJncyB2YWxp ZCwgb3RoZXJ3aXNlIG9yaWdpbmFsIGFyZyBwb2ludGVyLgorKi8KK2NoYXIgKgorc2h1ZmZsZWRh dGUocCxvcHQpIGNoYXIgKiBwOyBpbnQgb3B0OyB7CisgICAgZXh0ZXJuIGNoYXIgKiB3a2RheXNb XTsKKyAgICBpbnQgbGVuOworICAgIGNoYXIgaWJ1ZlszMl07CisgICAgc3RhdGljIGNoYXIgb2J1 Zls0OF07CisgICAgY2hhciBjOworICAgIGludCB5eSwgZGQsIG1tOworCisgICAgaWYgKCFwKSBw ID0gIiI7CisgICAgaWYgKCEqcCkgcCA9IGNrZGF0ZSgpOworICAgIGlmIChvcHQgPCAxIHx8IG9w dCA+IDQpCisgICAgICByZXR1cm4ocCk7CisgICAgbGVuID0gc3RybGVuKHApOworICAgIGlmIChs ZW4gPCA4IHx8IGxlbiA+IDMxKSByZXR1cm4ocCk7CisgICAgaWYgKG9wdCA9PSA0KSB7CQkJLyog QXNjdGltZSBmb3JtYXQgKDI2IE5vdiAyMDA1KSAqLworCWNoYXIgYywgKiBzOworCWxvbmcgejsg aW50IGs7CisJY2tzdHJuY3B5KGlidWYscCwzMSk7CisJayA9IGxlbjsKKwl3aGlsZSAoayA+PSAw ICYmIGlidWZba10gPT0gQ1IgfHwgaWJ1ZltrXSA9PSBMRikKKwkgIGlidWZbay0tXSA9IE5VTDsK Kwl3aGlsZSAoayA+PSAwICYmIGlidWZba10gPT0gU1AgfHwgaWJ1ZltrXSA9PSBIVCkKKwkgIGli dWZbay0tXSA9IE5VTDsKKwlpZiAoayA8IDkpIGNrc3RybmNweSgmaWJ1Zls4XSwiIDAwOjAwOjAw Iiw5KTsKKwlwID0gaWJ1ZjsKKyAgICAgICAgeiA9IG1qZChwKTsgICAgICAgICAgICAgICAgICAg ICAvKiBDb252ZXJ0IHRvIG1vZGlmaWVkIEp1bGlhbiBkYXRlICovCisgICAgICAgIHogPSB6ICUg N0w7CisgICAgICAgIGlmICh6IDwgMCkgeworICAgICAgICAgICAgeiA9IDAgLSB6OworICAgICAg ICAgICAgayA9IDYgLSAoKGludCl6ICsgMykgJSA3OworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgayA9ICgoaW50KXogKyAzKSAlIDc7CS8qIERheSBvZiB3ZWVrICovCisgICAgICAgIH0K KwlzID0gd2tkYXlzW2tdOworICAgICAgICBvYnVmWzBdID0gc1swXTsJCQkvKiBEYXkgb2Ygd2Vl ayAqLworICAgICAgICBvYnVmWzFdID0gc1sxXTsKKyAgICAgICAgb2J1ZlsyXSA9IHNbMl07Cisg ICAgICAgIG9idWZbM10gPSBTUDsJCQkvKiBTcGFjZSAqLworCWMgPSBwWzZdOworICAgICAgICBw WzZdID0gTlVMOworCW1tID0gYXRvaSgmaWJ1Zls0XSk7CQkvKiBNb250aCAqLworCXMgPSBtb25h bWVbbW0tMV07CQkvKiBOYW1lIG9mIG1vbnRoICovCisJcFs2XSA9IGM7CisKKyAgICAgICAgb2J1 Zls0XSA9IHNbMF07CQkJLyogTW9udGggKi8KKyAgICAgICAgb2J1Zls1XSA9IHNbMV07CisgICAg ICAgIG9idWZbNl0gPSBzWzJdOworICAgICAgICBvYnVmWzddID0gU1A7CQkJLyogU3BhY2UgKi8K KwlpZiAocFs2XSA9PSAnMCcpCQkvKiBEYXRlIG9mIG1vbnRoICovCisJICBvYnVmWzhdID0gU1A7 CisJZWxzZQorCSAgb2J1Zls4XSA9IHBbNl07CisgICAgICAgIG9idWZbOV0gPSBwWzddOworCWNr c3RybmNweSgmb2J1ZlsxMF0sJnBbOF0sMTApOwkvKiBUaW1lICovCisgICAgICAgIG9idWZbMTld ID0gU1A7CQkJLyogU3BhY2UgKi8KKwlvYnVmWzIwXSA9IHBbMF07CQkvKiBZZWFyICovCisJb2J1 ZlsyMV0gPSBwWzFdOworCW9idWZbMjJdID0gcFsyXTsKKwlvYnVmWzIzXSA9IHBbM107CisJb2J1 ZlsyNF0gPSBOVUw7CisJcmV0dXJuKChjaGFyICopb2J1Zik7CisgICAgfQorICAgIGlmIChvcHQg PT0gMykgeworCWNrc3RybmNweShvYnVmLHAsNDgpOworCS8qIHl5eXltbWRkIGhoOm1tOnNzICov CisJLyogMDEyMzQ1Njc4OTAxMjM0NTYgKi8KKwkvKiB5eXl5bW1kZGhobW1zcyAgICAqLworCW9i dWZbOF0gPSBvYnVmWzldOworCW9idWZbOV0gPSBvYnVmWzEwXTsKKwlvYnVmWzEwXSA9IG9idWZb MTJdOworCW9idWZbMTFdID0gb2J1ZlsxM107CisJb2J1ZlsxMl0gPSBvYnVmWzE1XTsKKwlvYnVm WzEzXSA9IG9idWZbMTZdOworCW9idWZbMTRdID0gTlVMOworCXJldHVybigoY2hhciAqKW9idWYp OworICAgIH0KKyAgICBja3N0cm5jcHkoaWJ1ZixwLDMyKTsKKyAgICBjID0gaWJ1Zls0XTsJCQkv KiBXYXJuaW5nOiBub3QgWTEwSyBjb21wbGlhbnQgKi8KKyAgICBpYnVmWzRdID0gTlVMOworICAg IGlmICghcmRpZ2l0cyhpYnVmKSkKKyAgICAgIHJldHVybihwKTsKKyAgICB5eSA9IGF0b2koaWJ1 Zik7CisgICAgaWYgKHl5IDwgMSB8fCB5eSA+IDk5OTkpCisgICAgICByZXR1cm4ocCk7CisgICAg aWJ1Zls0XSA9IGM7CisgICAgYyA9IGlidWZbNl07CisgICAgaWJ1Zls2XSA9IE5VTDsKKyAgICBp ZiAoIXJkaWdpdHMoJmlidWZbNF0pKQorICAgICAgcmV0dXJuKHApOworICAgIG1tID0gYXRvaSgm aWJ1Zls0XSk7CisgICAgaWYgKG1tIDwgMSB8fCBtbSA+IDEyKQorICAgICAgcmV0dXJuKHApOwor ICAgIGlidWZbNl0gPSBjOworICAgIGMgPSBpYnVmWzhdOworICAgIGlidWZbOF0gPSBOVUw7Cisg ICAgaWYgKCFyZGlnaXRzKCZpYnVmWzZdKSkKKyAgICAgIHJldHVybihwKTsKKyAgICBkZCA9IGF0 b2koJmlidWZbNl0pOworICAgIGlidWZbOF0gPSBjOworICAgIGlmIChkZCA8IDEgfHwgbW0gPiAz MSkKKyAgICAgIHJldHVybihwKTsKKyAgICAvKiBJR05PUkUgV0FSTklOR1MgQUJPVVQgbW9uYW1l W10gUkVGUyBPVVQgT0YgUkFOR0UgLSBpdCdzIHByZWNoZWNrZWQuICovCisgICAgc3dpdGNoIChv cHQpIHsKKyAgICAgIGNhc2UgMToKKwlzcHJpbnRmKG9idWYsIiUwNGQtJXMtJTAyZCVzIix5eSxt b25hbWVbbW0tMV0sZGQsJmlidWZbOF0pOworCWJyZWFrOworICAgICAgY2FzZSAyOgorCXNwcmlu dGYob2J1ZiwiJTAyZC0lcy0lMDRkJXMiLGRkLG1vbmFtZVttbS0xXSx5eSwmaWJ1Zls4XSk7Cisg ICAgfQorICAgIHJldHVybigoY2hhciAqKW9idWYpOworfQorI2VuZGlmCS8qIE5PU1BMICovCisK Ky8qICBDIEsgQyBWIFQgRCBBIFQgRSAgLS0gIExpa2UgY21jdnRkYXRlKCksIGJ1dCByZXR1cm5z IHN0cmluZy4gICovCisvKiAgRm9yIHVzZSBieSBkYXRlLXJlbGF0ZWQgZnVuY3Rpb25zICovCisv KiAgU2VlIGNhbGxpbmcgY29udmVudGlvbnMgZm9yIGNtY3Z0ZGF0ZSgpIGFib3ZlLiAqLworCitj aGFyICoKK2NrY3Z0ZGF0ZShwLHQpIGNoYXIgKiBwOyBpbnQgdDsgeworICAgIGNoYXIgKiBzOwor ICAgIGlmICghKHMgPSBjbWN2dGRhdGUocCx0KSkpCisgICAgICByZXR1cm4oIjxCQURfREFURV9P Ul9USU1FPiIpOwkvKiBcZmJsYWgoKSBlcnJvciBtZXNzYWdlICovCisgICAgZWxzZQorICAgICAg cmV0dXJuKHMpOworfQorCisKKy8qICBDIE0gRCBBIFQgRSAgLS0gIFBhcnNlIGEgZGF0ZSBhbmQv b3IgdGltZSAgKi8KKworLyoKKyAgQWNjZXB0cyBkYXRlIGluIHZhcmlvdXMgZm9ybWF0cy4gIElm IHRoZSBkYXRlIGlzIHJlY29nbml6ZWQsCisgIHRoaXMgcm91dGluZSByZXR1cm5zIDAgb3IgZ3Jl YXRlciB3aXRoIHRoZSByZXN1bHQgc3RyaW5nIHBvaW50ZXIKKyAgcG9pbnRpbmcgdG8gYSBidWZm ZXIgY29udGFpbmluZyB0aGUgZGF0ZSBhcyAieXl5eW1tZGQgaGg6bW06c3MiLgorKi8KK2ludAor Y21kYXRlKHhobHAseGRlZix4cCxxdWlldCxmKSBjaGFyICp4aGxwLCAqeGRlZiwgKip4cDsgaW50 IHF1aWV0OyB4eF9zdHJwIGY7IHsKKyAgICBpbnQgeCwgcmM7CisgICAgY2hhciAqbywgKnMsICp6 cSwgKmRwOworCisgICAgY21mbGRmbGdzID0gMDsKKyAgICBpZiAoIXhobHApIHhobHAgPSAiIjsK KyAgICBpZiAoIXhkZWYpIHhkZWYgPSAiIjsKKyAgICBpZiAoISp4aGxwKSB4aGxwID0gIkRhdGUg YW5kL29yIHRpbWUiOworICAgICp4cCA9ICIiOworCisgICAgcmMgPSBjbWZsZCh4aGxwLHhkZWYs JnMsKHh4X3N0cnApMCk7CisgICAgZGVidWcoRjEwMSwiY21kYXRlIGNtZmxkIHJjIiwiIixyYyk7 CisgICAgaWYgKHJjIDwgMCkKKyAgICAgIHJldHVybihyYyk7CisgICAgZGVidWcoRjExMCwiY21k YXRlIDEiLHMsMCk7CisgICAgbyA9IHM7CQkJCS8qIFJlbWVtYmVyIHdoYXQgdGhleSB0eXBlZC4g Ki8KKyAgICBzID0gYnJzdHJpcChzKTsKKyAgICBkZWJ1ZyhGMTEwLCJjbWRhdGUgMiIscywwKTsK KworICAgIHggPSAwOworICAgIGlmIChmKSB7CQkJCS8qIElmIGEgY29udmVyc2lvbiBmdW5jdGlv biBpcyBnaXZlbiAqLworCWNoYXIgKiBwcDsKKwl6cSA9IGF0eGJ1ZjsJCQkvKiBkbyB0aGUgY29u dmVyc2lvbi4gKi8KKwlwcCA9IGF0eGJ1ZjsKKwlhdHhuID0gQ01EQkw7CisJaWYgKCh4ID0gKCpm KShzLCZ6cSwmYXR4bikpIDwgMCkgcmV0dXJuKC0yKTsKKwlpZiAoISpwcCkKKwkgIHBwID0geGRl ZjsKKwlpZiAoc2V0YXRtKHBwLDApIDwgMCkgeworCSAgICBpZiAoIXF1aWV0KSBwcmludGYoIj9F dmFsdWF0ZWQgZGF0ZSB0b28gbG9uZ1xuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCXMgPSBh dHhidWY7CisgICAgfQorICAgIGRwID0gY21jdnRkYXRlKHMsMSk7CisgICAgaWYgKCFkcCkgewor CWlmICghcXVpZXQpIHByaW50ZigiPyVzXG4iLGNtZGF0ZW1zZyk7CisJcmV0dXJuKC05KTsKKyAg ICB9CisgICAgKnhwID0gZHA7CisgICAgcmV0dXJuKDApOworfQorCisjaWZkZWYgQ0tfUkVDQUxM CQkJLyogQ29tbWFuZC1yZWNhbGwgZnVuY3Rpb25zICovCisKKy8qICBDIE0gUiBJIE4gSSAgLS0g IEluaXRpYWxpemUgb3IgY2hhbmdlIHNpemUgb2YgY29tbWFuZCByZWNhbGwgYnVmZmVyICovCisK K2ludAorY21yaW5pKG4pIGludCBuOyB7CisgICAgaW50IGk7CisgICAgaWYgKHJlY2FsbCAmJiBp bl9yZWNhbGwpIHsJCS8qIEZyZWUgb2xkIHN0b3JhZ2UsIGlmIGFueSAqLworCWZvciAoaSA9IDA7 IGkgPCBjbV9yZWNhbGw7IGkrKykgeworCSAgICBpZiAocmVjYWxsW2ldKSB7CisJCWZyZWUocmVj YWxsW2ldKTsKKwkJcmVjYWxsW2ldID0gTlVMTDsKKwkgICAgfQorCX0KKwlmcmVlKHJlY2FsbCk7 CisJcmVjYWxsID0gTlVMTDsKKyAgICB9CisgICAgY21fcmVjYWxsID0gbjsJCQkvKiBTZXQgbmV3 IHNpemUgKi8KKyAgICBybGFzdCA9IGN1cnJlbnQgPSAtMTsJCS8qIEluaXRpYWxpemUgcG9pbnRl cnMgKi8KKyAgICBpZiAobiA+IDApIHsKKwlyZWNhbGwgPSAoY2hhciAqKiltYWxsb2MoKGNtX3Jl Y2FsbCArIDEpICogc2l6ZW9mKGNoYXIgKikpOworCWlmICghcmVjYWxsKQorCSAgcmV0dXJuKDEp OworCWZvciAoaSA9IDA7IGkgPCBjbV9yZWNhbGw7IGkrKykgeworCSAgICByZWNhbGxbaV0gPSBO VUxMOworCX0KKwlpbl9yZWNhbGwgPSAxOwkJCS8qIFJlY2FsbCBidWZmZXJzIGluaXQnZCAqLwor ICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBDIE0gQSBEIEQgTiBFIFggVCAgLS0gIEZv cmNlIGFkZGl0aW9uIG9mIG5leHQgY29tbWFuZCAqLworCitWT0lECitjbWFkZG5leHQoKSB7Cisg ICAgaWYgKG9uX3JlY2FsbCAmJiBpbl9yZWNhbGwpIHsJLyogRXZlbiBpZiBpdCBkb2Vzbid0IGNv bWUgKi8KKwlmb3JjZV9hZGQgPSAxOwkJCS8qIGZyb20gdGhlIGtleWJvYXJkICovCisJbmV3Y21k ID0gMTsKKwlub19yZWNhbGwgPSAwOworICAgIH0KK30KKworLyogIEMgTSBHIEUgVCBDIE0gRCAg LS0gIEZpbmQgbW9zdCByZWNlbnQgbWF0Y2hpbmcgY29tbWFuZCAgKi8KKworY2hhciAqCitjbWdl dGNtZChzKSBjaGFyICogczsgeworICAgIGludCBpOworICAgIGZvciAoaSA9IGN1cnJlbnQ7IGkg Pj0gMDsgaS0tKSB7CS8qIFNlYXJjaCBiYWNrd2FyZCB0aHJ1IGhpc3RvcnkgbGlzdCAqLworCWlm ICghcmVjYWxsW2ldKSBjb250aW51ZTsJLyogVGhpcyBvbmUncyBudWxsLCBza2lwIGl0ICovCisJ aWYgKGNrbWF0Y2gocyxyZWNhbGxbaV0sMCwxKSkJLyogTWF0Y2g/ICovCisJICByZXR1cm4ocmVj YWxsW2ldKTsJCS8qIFllcywgcmV0dXJuIHBvaW50ZXIgKi8KKyAgICB9CisgICAgcmV0dXJuKE5V TEwpOwkJCS8qIE5vIG1hdGNoLCByZXR1cm4gTlVMTCBwb2ludGVyICovCit9CisjZW5kaWYgLyog Q0tfUkVDQUxMICovCisKKy8qICBBIEQgRCBDIE0gRCAgLS0gIEFkZCBhIGNvbW1hbmQgdG8gdGhl IHJlY2FsbCBidWZmZXIgICovCisKK1ZPSUQKK2FkZGNtZChzKSBjaGFyICogczsgeworICAgIGlu dCBsZW4gPSAwLCBucSA9IDA7CisgICAgY2hhciAqIHA7CisjaWZkZWYgQ0tMRUFSTgorICAgIGV4 dGVybiBpbnQgbGVhcm5pbmc7CisjZW5kaWYgLyogQ0tMRUFSTiAqLworCisgICAgaWYgKHhjbWRz cmMpCQkJLyogT25seSBmb3IgaW50ZXJhY3RpdmUgY29tbWFuZHMgKi8KKyAgICAgIHJldHVybjsK KworICAgIGlmICghbmV3Y21kKQkJCS8qIFRoZSBjb21tYW5kIGhhcyBiZWVuIGhlcmUgYWxyZWFk eSAqLworICAgICAgcmV0dXJuOwkJCQkvKiBzbyBpZ25vcmUgaXQuICovCisgICAgbmV3Y21kID0g MDsJCQkJLyogSXQncyBuZXcgYnV0IGRvIHRoaXMgb25seSBvbmNlLiAqLworCisgICAgaWYgKCFz KSBzID0gY21kYnVmOworICAgIGlmIChzWzBdKQorICAgICAgbGVuID0gc3RybGVuKHMpOworCisg ICAgaWYgKGxlbiA8IDEpCQkJLyogRG9uJ3Qgc2F2ZSBlbXB0eSBjb21tYW5kcyAqLworICAgICAg cmV0dXJuOworCisgICAgcCA9IHM7CisgICAgd2hpbGUgKCpwKSB7IGlmICgqcCsrID09ICc/Jykg bnErKzsgfSAvKiBDb3VudCBxdWVzdGlvbiBtYXJrcyAqLworCisjaWZkZWYgQ0tMRUFSTgorICAg IGlmIChsZWFybmluZykJCQkvKiBJZiBhIGxlYXJuZWQgc2NyaXB0IGlzIGFjdGl2ZSAqLworICAg ICAgbGVhcm5jbWQocyk7CQkJLyogcmVjb3JkIHRoaXMgY29tbWFuZC4gKi8KKyNlbmRpZiAvKiBD S0xFQVJOICovCisKKyAgICBkZWJ1ZyhGMDEwLCJDTUQoUCkiLHMsMCk7CQkvKiBNYXliZSByZWNv cmQgaXQgaW4gdGhlIGRlYnVnIGxvZyAqLworCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4 bG9nZ2luZykgewkJCS8qIE1heWJlIHJlY29yZCBpdCBpbiBzeXNsb2cgKi8KKwlpZiAoY2t4c3lz bG9nID49IFNZU0xHX0NYIHx8IGNreHN5c2xvZyA+PSBTWVNMR19DTSkKKwkgIGNrc3lzbG9nKFNZ U0xHX0NYLCAxLCAiY29tbWFuZCIsIHMsIE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xP RyAqLworCisjaWZkZWYgQ0tfUkVDQUxMCisgICAgbGFzdF9yZWNhbGwgPSAwOworCisgICAgaWYg KG9uX3JlY2FsbCAmJgkJCS8qIENvbW1hbmQgcmVjYWxsIGlzIG9uPyAqLworCWNtX3JlY2FsbCA+ IDAgJiYJCS8qIFJlY2FsbCBidWZmZXIgc2l6ZSBpcyA+IDA/ICovCisJIW5vX3JlY2FsbCkgewkJ CS8qIE5vdCBub3Qgc2F2aW5nIHRoaXMgY29tbWFuZD8gKi8KKworCWlmICghZm9yY2VfYWRkICYm IHJsYXN0ID4gLTEpCS8qIElmIHByZXZpb3VzIGNvbW1hbmQgd2FzIGlkZW50aWNhbCAqLworCSAg aWYgKCFzdHJjbXAocyxyZWNhbGxbcmxhc3RdKSkgLyogZG9uJ3QgYWRkIGFub3RoZXIgY29weSAq LworCSAgICByZXR1cm47CisKKwlmb3JjZV9hZGQgPSAwOwkJCS8qIFJlc2V0IG5vdyBpbiBjYXNl IGl0IHdhcyBzZXQgKi8KKworICAgICAgICBpZiAocmxhc3QgPj0gY21fcmVjYWxsIC0gMSkgewkv KiBSZWNhbGwgYnVmZmVyIGZ1bGw/ICovCisJICAgIGludCBpOworCSAgICBpZiAocmVjYWxsWzBd KSB7CQkvKiBEaXNjYXJkIG9sZGVzdCBjb21tYW5kICovCisJCWZyZWUocmVjYWxsWzBdKTsKKwkJ cmVjYWxsWzBdID0gTlVMTDsKKwkgICAgfQorCSAgICBmb3IgKGkgPSAwOyBpIDwgcmxhc3Q7IGkr KykgeyAgLyogVGhlIHJlc3QgKi8KKwkJcmVjYWxsW2ldID0gcmVjYWxsW2krMV07ICAgLyogbW92 ZSBiYWNrICovCisJICAgIH0KKwkgICAgcmxhc3QtLTsJCQkvKiBOb3cgd2UgaGF2ZSBvbmUgbGVz cyAqLworCX0KKyAgICAgICAgcmxhc3QrKzsJCQkvKiBJbmRleCBvZiBsYXN0IGNvbW1hbmQgaW4g YnVmZmVyICovCisJY3VycmVudCA9IHJsYXN0OwkJLyogQWxzbyBub3cgdGhlIGN1cnJlbnQgY29t bWFuZCAqLworCWlmIChjdXJyZW50ID49IGNtX3JlY2FsbCkgewkvKiBTaG91bGRuJ3QgaGFwcGVu ICovCisJICAgIHByaW50ZigiP0NvbW1hbmQgaGlzdG9yeSBlcnJvclxuIik7CS8qIGJ1dCBpZiBp dCBkb2VzICovCisJICAgIG9uX3JlY2FsbCA9IDA7CQkgICAgICAgIC8qIHR1cm4gb2ZmIGNvbW1h bmQgc2F2aW5nICovCisjaWZkZWYgQ09NTUVOVAorCX0gZWxzZSBpZiAobnEgPiAwKSB7CQkvKiBI YXZlIGF0IGxlYXN0IG9uZSBxdWVzdGlvbiBtYXJrICovCisJICAgIHJlY2FsbFtjdXJyZW50XSA9 IG1hbGxvYyhsZW4rbnErMSk7CisJICAgIGlmIChyZWNhbGxbY3VycmVudF0pIHsKKwkJcCA9IHJl Y2FsbFtjdXJyZW50XTsKKwkJd2hpbGUgKCpzKSB7CisJCSAgICBpZiAoKnMgPT0gJz8nKQorCQkg ICAgICAqcCsrID0gJ1xcJzsKKwkJICAgICpwKysgPSAqcysrOworCQl9CisJCSpwID0gTlVMOwor CSAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0gZWxzZSB7CQkJLyogTm9ybWFsIGNhc2Us IGp1c3QgY29weSAqLworCSAgICByZWNhbGxbY3VycmVudF0gPSBtYWxsb2MobGVuKzEpOworCSAg ICBpZiAocmVjYWxsW2N1cnJlbnRdKQorCSAgICAgIGNrc3RybmNweShyZWNhbGxbY3VycmVudF0s cyxsZW4rMSk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KK30KKworCisjaWZk ZWYgQ0tfUkVDQUxMCisKKy8qIEMgTSBIIEkgUyBUIE8gUiBZICovCisKK1ZPSUQKK2NtaGlzdG9y eSgpIHsKKyAgICBpbnQgaSwgbGMgPSAxOworICAgIGZvciAoaSA9IDA7IGkgPD0gY3VycmVudDsg aSsrKSB7CisJcHJpbnRmKCIgJXNcbiIsIHJlY2FsbFtpXSk7CisJaWYgKCsrbGMgPiAoY21kX3Jv d3MgLSAyKSkgewkvKiBTY3JlZW4gZnVsbD8gKi8KKwkgICAgaWYgKCFhc2ttb3JlKCkpCQkvKiBE byBtb3JlLXByb21wdGluZy4uLiAqLworCSAgICAgIGJyZWFrOworCSAgICBlbHNlCisJICAgICAg bGMgPSAwOworCX0KKyAgICB9Cit9CisKK2ludAorc2F2aGlzdG9yeShzLGRpc3ApIGNoYXIgKnM7 IGludCBkaXNwOyB7CisgICAgRklMRSAqIGZwOworICAgIGludCBpOworCisgICAgZnAgPSBmb3Bl bihzLCBkaXNwID8gImEiIDogInciKTsKKyAgICBpZiAoIWZwKSB7CisJcGVycm9yKHMpOworCXJl dHVybigwKTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8PSBjdXJyZW50OyBpKyspCisgICAg ICBmcHJpbnRmKGZwLCIlc1xuIiwgcmVjYWxsW2ldKTsKKyAgICBmY2xvc2UoZnApOworICAgIHJl dHVybigxKTsKK30KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKworI2lmZGVmIENPTU1FTlQKKy8q IGFwcGFyZW50bHkgbm90IHVzZWQgKi8KK2ludAorY21nZXRsYyhzKSBjaGFyICogczsgewkJCS8q IEdldCBsZWFkaW5nIGNoYXIgKi8KKyAgICBjaGFyIGM7CisgICAgd2hpbGUgKChjID0gKnMrKykg PD0gU1ApIHsKKwlpZiAoIWMpCisJICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuKGMpOworfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworCisvKiAgQyBNIEMgRiBNICAtLSAgUGFyc2UgY29tbWFu ZCBjb25maXJtYXRpb24gKGVuZCBvZiBsaW5lKSAgKi8KKworLyoKKyBSZXR1cm5zCisgICAtMjog VXNlciB0eXBlZCBhbnl0aGluZyBidXQgd2hpdGVzcGFjZSBvciBuZXdsaW5lCisgICAtMTogUmVw YXJzZSBuZWVkZWQKKyAgICAwOiBDb25maXJtYXRpb24gd2FzIHJlY2VpdmVkCisqLworaW50Citj bWNmbSgpIHsKKyAgICBpbnQgeCwgeGM7CisgICAgZGVidWcoRjEwMSwiY21jZm06IGNtZmxncyIs IiIsY21mbGdzKTsKKyAgICBkZWJ1ZyhGMTEwLCJjbWNmbTogYXRtYnVmIixhdG1idWYsMCk7Cisg ICAgaW53b3JkID0geGMgPSBjYyA9IDA7CisKKyAgICBzZXRhdG0oIiIsMCk7CQkJLyogKFByb2Jh Ymx5IHVubmVjZXNzYXJ5KSAqLworCisgICAgd2hpbGUgKGNtZmxncyAhPSAxKSB7CisgICAgICAg IHggPSBndHdvcmQoMCk7CisgICAgICAgIHhjICs9IGNjOworCisgICAgICAgIHN3aXRjaCAoeCkg eworCSAgY2FzZSAtOToKKwkgICAgcHJpbnRmKCJDb21tYW5kIG9yIGZpZWxkIHRvbyBsb25nXG4i KTsKKwkgIGNhc2UgLTQ6CQkJLyogRU9GICovCisJICBjYXNlIC0yOgorCSAgY2FzZSAtMToKKwkg ICAgcmV0dXJuKHgpOworCSAgY2FzZSAxOgkJCS8qIEVuZCBvZiBsaW5lICovCisJICAgIGlmICh4 YyA+IDApIHsKKwkJaWYgKHhjbWZkYikgeworCQkgICAgcmV0dXJuKC02KTsKKwkJfSBlbHNlIHsK KwkJICAgIHByaW50ZigiP05vdCBjb25maXJtZWQgLSAlc1xuIixhdG1idWYpOworCQkgICAgcmV0 dXJuKC05KTsKKwkJfQorCSAgICB9IGVsc2UKKwkgICAgICBicmVhazsJCQkvKiBGaW5pc2ggdXAg YmVsb3cgKi8KKwkgIGNhc2UgMjoJCQkvKiBFU0MgKi8KKwkgICAgaWYgKHhjID09IDApIHsKKwkJ YmxlZXAoQlBfV0FSTik7CisJCWNvbnRpbnVlOwkJLyogb3IgZmFsbCB0aHJ1LiAqLworCSAgICB9 CisJICBjYXNlIDA6CQkJLyogU3BhY2UgKi8KKwkgICAgaWYgKHhjID09IDApCQkvKiBJZiBubyBj aGFycyB0eXBlZCwgY29udGludWUsICovCisJICAgICAgY29udGludWU7CQkJLyogZWxzZSBmYWxs IHRocnUuICovCisJICAgIC8qIGVsc2UgZmFsbCB0aHJ1Li4uICovCisKKwkgIGNhc2UgMzoJCQkv KiBRdWVzdGlvbiBtYXJrICovCisJICAgIGlmICh4YyA+IDApIHsKKwkJaWYgKHhjbWZkYikgewor CQkgICAgcmV0dXJuKC02KTsKKwkJfSBlbHNlIHsKKwkJICAgIHByaW50ZigiP05vdCBjb25maXJt ZWQgLSAlc1xuIixhdG1idWYpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCSAgICB9CisJICAg IHByaW50ZigKKwkgICAgICAgIlxuIFByZXNzIHRoZSBSZXR1cm4gb3IgRW50ZXIga2V5IHRvIGNv bmZpcm0gdGhlIGNvbW1hbmRcbiIpOworCSAgICBwcmludGYoIiVzJXMiLGNtcHJvbSxjbWRidWYp OworCSAgICBmZmx1c2goc3Rkb3V0KTsKKwkgICAgY29udGludWU7CisJfQorICAgIH0KKyAgICBk ZWJvayA9IDE7CisgICAgcmV0dXJuKDApOworfQorCisKKy8qIFRoZSBmb2xsb3dpbmcgbWF0ZXJp YWwgc3VwcG9ydHMgY2hhaW5lZCBwYXJzaW5nIGZ1bmN0aW9ucy4gKi8KKy8qIFNlZSBja3VjbWQu aCBmb3IgRkRCIGFuZCBPRkRCIGRlZmluaXRpb25zLiAqLworCitzdHJ1Y3QgT0ZEQiBjbXJlc3Vs dCA9IHsJCS8qIFVuaXZlcnNhbCBjbWZkYiByZXN1bHQgaG9sZGVyICovCisgICAgTlVMTCwJCQkJ LyogQWRkcmVzcyBvZiBzdWNjZWVkaW5nIEZEQiBzdHJ1Y3QgKi8KKyAgICAwLAkJCQkJLyogRnVu Y3Rpb24gY29kZSAqLworICAgIE5VTEwsCQkJCS8qIFN0cmluZyByZXN1bHQgKi8KKyAgICAwLAkJ CQkJLyogSW50ZWdlciByZXN1bHQgKi8KKyAgICAoQ0tfT0ZGX1QpMAkJCQkvKiBXaWRlIHJlc3Vs dCAqLworfTsKKworVk9JRAorY21mZGJpKHAsZmMsczEsczIsczMsbjEsbjIsZixrLG54dCkJLyog SW5pdGlhbGl6ZSBhbiBGREIgKi8KKyAgICBzdHJ1Y3QgRkRCICogcDsKKyAgICBpbnQgZmM7Cisg ICAgY2hhciAqIHMxLCAqIHMyLCAqIHMzOworICAgIGludCBuMSwgbjI7CisgICAgeHhfc3RycCBm OworICAgIHN0cnVjdCBrZXl0YWIgKiBrOworICAgIHN0cnVjdCBGREIgKiBueHQ7IHsKKworICAg IHAtPmZjb2RlID0gZmM7CisgICAgcC0+aGxwbXNnID0gczE7CisgICAgcC0+ZGZsdCA9IHMyOwor ICAgIHAtPnNkYXRhID0gczM7CisgICAgcC0+bmRhdGExID0gbjE7CisgICAgcC0+bmRhdGEyID0g bjI7CisgICAgcC0+c3BmID0gZjsKKyAgICBwLT5rd2R0YmwgPSBrOworICAgIHAtPm54dGZkYiA9 IG54dDsKK30KKworLyogIEMgTSBGIEQgQiAgLS0gIFBhcnNlIGEgZmllbGQgd2l0aCBzZXZlcmFs IHBvc3NpYmxlIGZ1bmN0aW9ucyAgKi8KKworaW50CitjbWZkYihmZGJpbikgc3RydWN0IEZEQiAq IGZkYmluOyB7CisjaWZuZGVmIE5PU1BMCisgICAgZXh0ZXJuIGludCB4X2lmbnVtOyAgICAgICAg ICAgICAgICAgLyogSUYgTlVNRVJJQyAtIGRpc2FibGVzIHdhcm5pbmdzICovCisjZW5kaWYgLyog Tk9TUEwgKi8KKyAgICBzdHJ1Y3QgRkRCICogaW4gPSBmZGJpbjsKKyAgICBzdHJ1Y3QgT0ZEQiAq IG91dCA9ICZjbXJlc3VsdDsKKyAgICBpbnQgeCA9IDAsIG4sIHI7CisgICAgQ0tfT0ZGX1QgdyA9 IChDS19PRkZfVCkwOworICAgIGNoYXIgKnMsICp4cCwgKm0gPSBOVUxMOworICAgIGludCBlcnJi aXRzID0gMDsKKworICAgIHhwID0gYnA7CisKKyAgICBvdXQtPmZjb2RlID0gLTE7CQkJLyogSW5p dGlhbGl6ZSBvdXRwdXQgc3RydWN0ICovCisgICAgb3V0LT5mZGJhZGRyID0gTlVMTDsKKyAgICBv dXQtPnNyZXN1bHQgPSBOVUxMOworICAgIG91dC0+bnJlc3VsdCA9IDA7CisvKgorICBDdXJyZW50 bHkgd2UgbWFrZSBvbmUgdHJpcCB0aHJvdWdoIHRoZSBGREJzLiAgU28gaWYgdGhlIHVzZXIgdHlw ZXMgRXNjIG9yCisgIFRhYiBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmllbGQsIG9ubHkgdGhlIGZp cnN0IEZEQiBpcyBleGFtaW5lZCBmb3IgYQorICBkZWZhdWx0LiAgSWYgdGhlIHVzZXIgdHlwZXMg PywgaGVscCBpcyBnaXZlbiBvbmx5IGZvciBvbmUgRkRCLiAgV2Ugc2hvdWxkCisgIHNlYXJjaCB0 aHJvdWdoIHRoZSBGREJzIGZvciBhbGwgbWF0Y2hpbmcgcG9zc2liaWxpdGllcyAtLSBhbmQgaW4g cGFydGljdWxhcgorICBkaXNwbGF5IHRoZSBwZXJ0aW5lbnQgY29udGV4dC1zZW5zaXRpdmUgaGVs cCBmb3IgZWFjaCBmdW5jdGlvbiwgcmF0aGVyIHRoYW4KKyAgdGhlIG9ubHkgdGhlIGZpcnN0IG9u ZSB0aGF0IHdvcmtzLCBhbmQgdGhlbiByZXdpbmQgdGhlIEZEQiBwb2ludGVyIHNvIHdlCisgIGFy ZSBub3QgbG9ja2VkIG91dCBvZiB0aGUgZWFybGllciBvbmVzLgorKi8KKyAgICBjbWZsZGZsZ3Mg PSAwOworICAgIHdoaWxlICgxKSB7CQkJCS8qIExvb3AgdGhyb3VnaCB0aGUgY2hhaW4gb2YgRkRC cyAqLworCW5vbXNnID0gMTsKKwl4Y21mZGIgPSAxOworCXMgPSBOVUxMOworCW4gPSAwOworCWRl YnVnKEYxMDEsImNtZmRiIGluLT5mY29kZSIsIiIsaW4tPmZjb2RlKTsKKwlzd2l0Y2ggKGluLT5m Y29kZSkgewkJLyogQ3VycmVudCBwYXJzaW5nIGZ1bmN0aW9uIGNvZGUgKi8KKwkgIGNhc2UgX0NN TlVNOgorCSAgICByID0gaW4tPm5kYXRhMTsKKwkgICAgaWYgKHIgIT0gMTAgJiYgciAhPSA4KSBy ID0gMTA7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICB4X2lmbnVtID0gMTsgICAgICAgICAg ICAgICAgLyogRGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyAqLworI2VuZGlmIC8qIE5PU1BMICov CisJICAgIHggPSBjbW51bShpbi0+aGxwbXNnLGluLT5kZmx0LHIsJm4saW4tPnNwZik7CisjaWZu ZGVmIE5PU1BMCisgICAgICAgICAgICB4X2lmbnVtID0gMDsKKyNlbmRpZiAvKiBOT1NQTCAqLwor CSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbW51bSIsIiIseCk7CisJICAgIGlmICh4IDwgMCkgZXJy Yml0cyB8PSAxOworCSAgICBicmVhazsKKwkgIGNhc2UgX0NNTlVXOgkJCS8qIFdpZGUgY21udW0g LSAyNCBEZWMgMjAwNSAqLworCSAgICByID0gaW4tPm5kYXRhMTsKKwkgICAgaWYgKHIgIT0gMTAg JiYgciAhPSA4KSByID0gMTA7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICB4X2lmbnVtID0g MTsgICAgICAgICAgICAgICAgLyogRGlzYWJsZXMgd2FybmluZyBtZXNzYWdlcyAqLworI2VuZGlm IC8qIE5PU1BMICovCisJICAgIHggPSBjbW51bXcoaW4tPmhscG1zZyxpbi0+ZGZsdCxyLCZ3LGlu LT5zcGYpOworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgeF9pZm51bSA9IDA7CisjZW5kaWYg LyogTk9TUEwgKi8KKwkgICAgZGVidWcoRjEwMSwiY21mZGIgY21udW13IiwiIix3KTsKKwkgICAg aWYgKHggPCAwKSBlcnJiaXRzIHw9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01PRkk6CisJ ICAgIHggPSBjbW9maShpbi0+aGxwbXNnLGluLT5kZmx0LCZzLGluLT5zcGYpOworCSAgICBkZWJ1 ZyhGMTAxLCJjbWZkYiBjbW9maSIsIiIseCk7CisJICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAy OworCSAgICBicmVhazsKKwkgIGNhc2UgX0NNSUZJOgorCSAgICB4ID0gY21pZmkyKGluLT5obHBt c2csCisJCSAgICAgICBpbi0+ZGZsdCwKKwkJICAgICAgICZzLAorCQkgICAgICAgJm4sCisJCSAg ICAgICBpbi0+bmRhdGExLAorCQkgICAgICAgaW4tPnNkYXRhLAorCQkgICAgICAgaW4tPnNwZiwK KwkJICAgICAgIGluLT5uZGF0YTIKKwkJICAgICAgICk7CisJICAgIGRlYnVnKEYxMDEsImNtZmRi IGNtaWZpMiB4IiwiIix4KTsKKwkgICAgZGVidWcoRjEwMSwiY21mZGIgY21pZmkyIG4iLCIiLG4p OworCSAgICBpZiAoeCA8IDApIGVycmJpdHMgfD0gNDsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9D TUZMRDoKKwkgICAgY21mbGRmbGdzID0gaW4tPm5kYXRhMTsKKwkgICAgeCA9IGNtZmxkKGluLT5o bHBtc2csaW4tPmRmbHQsJnMsaW4tPnNwZik7CisJICAgIGRlYnVnKEYxMDEsImNtZmRiIGNtZmxk IiwiIix4KTsKKwkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9IDg7CisJICAgIGJyZWFrOworCSAg Y2FzZSBfQ01UWFQ6CisJICAgIHggPSBjbXR4dChpbi0+aGxwbXNnLGluLT5kZmx0LCZzLGluLT5z cGYpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbXR4dCIsIiIseCk7CisJICAgIGlmICh4IDwg MCkgZXJyYml0cyB8PSAxNjsKKwkgICAgYnJlYWs7CisJICBjYXNlIF9DTUtFWToKKwkgICAgeCA9 IGNta2V5Mihpbi0+a3dkdGJsLAorCQkgICAgICAgaW4tPm5kYXRhMSwKKwkJICAgICAgIGluLT5o bHBtc2csaW4tPmRmbHQsaW4tPnNkYXRhLGluLT5zcGYsaW4tPm5kYXRhMik7CisJICAgIGRlYnVn KEYxMDEsImNtZmRiIGNta2V5IiwiIix4KTsKKwkgICAgaWYgKHggPCAwKSBlcnJiaXRzIHw9ICgo aW4tPm5kYXRhMiAmIDQpID8gMzIgOiA2NCk7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01DRk06 CisJICAgIHggPSBjbWNmbSgpOworCSAgICBkZWJ1ZyhGMTAxLCJjbWZkYiBjbWNmbSIsIiIseCk7 CisJICAgIGlmICh4IDwgMCkgZXJyYml0cyB8PSAxMjg7CisJICAgIGJyZWFrOworCSAgZGVmYXVs dDoKKwkgICAgZGVidWcoRjEwMSwiY21mZGIgLSB1bmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGUiLCIi LGluLT5mY29kZSk7CisJICAgIHByaW50ZigiP2NtZmRiIC0gdW5leHBlY3RlZCBmdW5jdGlvbiBj b2RlOiAlZFxuIixpbi0+ZmNvZGUpOworCX0KKwlkZWJ1ZyhGMTAxLCJjbWZkYiB4IiwiIix4KTsK KwlkZWJ1ZyhGMTAxLCJjbWZkYiBjbWZsZ3MiLCIiLGNtZmxncyk7CisJZGVidWcoRjEwMSwiY21m ZGIgY3JmbGFnIiwiIixjcmZsYWcpOworCWRlYnVnKEYxMDEsImNtZmRiIHFtZmxhZyIsIiIscW1m bGFnKTsKKwlkZWJ1ZyhGMTAxLCJjbWZkYiBlc2ZsYWciLCIiLGVzZmxhZyk7CisKKwlpZiAoeCA+ IC0xKSB7CQkJLyogU3VjY2VzcyAqLworCSAgICBvdXQtPmZjb2RlID0gaW4tPmZjb2RlOwkvKiBG aWxsIGluIG91dHB1dCBzdHJ1Y3QgKi8KKwkgICAgb3V0LT5mZGJhZGRyID0gaW47CisJICAgIG91 dC0+c3Jlc3VsdCA9IHM7CisJICAgIG91dC0+bnJlc3VsdCA9IChpbi0+ZmNvZGUgPT0gX0NNS0VZ KSA/IHggOiBuOworCSAgICBvdXQtPndyZXN1bHQgPSB3OworCSAgICBvdXQtPmtmbGFncyA9IChp bi0+ZmNvZGUgPT0gX0NNS0VZKSA/IGNta3dmbGdzIDogMDsKKwkgICAgZGVidWcoRjExMSwiY21m ZGIgb3V0LT5ucmVzdWx0IixvdXQtPnNyZXN1bHQsb3V0LT5ucmVzdWx0KTsKKwkgICAgZGVidWco RjExMSwiY21mZGIgb3V0LT53cmVzdWx0IixvdXQtPnNyZXN1bHQsb3V0LT53cmVzdWx0KTsKKwkg ICAgbm9tc2cgPSAwOworCSAgICB4Y21mZGIgPSAwOworCSAgICAvKiBkZWJ1ZyhGMTExLCJjbWZk YiBjbWRidWYgJiBjcmZsYWciLGNtZGJ1ZixjcmZsYWcpOyAqLworCSAgICBpZiAoY3JmbGFnKSB7 CisJCWNtZmxncyA9IDE7CisJICAgIH0KKwkgICAgcmV0dXJuKHgpOwkJCS8qIGFuZCByZXR1cm4g Ki8KKwl9CisJaW4gPSBpbi0+bnh0ZmRiOwkJLyogRmFpbGVkLCBnZXQgbmV4dCBwYXJzaW5nIGZ1 bmN0aW9uICovCisJbm9tc2cgPSAwOworCXhjbWZkYiA9IDA7CisJaWYgKCFpbikgewkJCS8qIE5v IG1vcmUgKi8KKwkgICAgZGVidWcoRjEwMSwiY21mZGIgZmFpbHVyZSB4IiwiIix4KTsKKwkgICAg ZGVidWcoRjEwMSwiY21mZGIgZmFpbHVyZSBlcnJiaXRzIiwiIixlcnJiaXRzKTsKKwkgICAgaWYg KHggPT0gLTYpCisJICAgICAgeCA9IC05OworCSAgICBpZiAoeCA9PSAtOSkgeworI2lmZGVmIENL Uk9PVAorCQlpZiAoY2tyb290ZXJyKQorCQkgIG0gPSAiT2ZmIExpbWl0cyI7CisJCWVsc2UKKyNl bmRpZiAvKiBDS1JPT1QgKi8KKwkJLyogTWFrZSBpbmZvcm1hdGl2ZSBtZXNzYWdlcyBmb3IgYSBm ZXcgY29tbW9uIGNhc2VzICovCisJCXN3aXRjaCAoZXJyYml0cykgeworCQkgIGNhc2UgNCszMjog bSA9ICJEb2VzIG5vdCBtYXRjaCBmaWxlbmFtZSBvciBzd2l0Y2giOyBicmVhazsKKwkJICBjYXNl IDQrNjQ6IG0gPSAiRG9lcyBub3QgbWF0Y2ggZmlsZW5hbWUgb3Iga2V5d29yZCI7IGJyZWFrOwor CQkgIGNhc2UgMSszMjogbSA9ICJOb3QgYSBudW1iZXIgb3IgdmFsaWQga2V5d29yZCI7IGJyZWFr OworCQkgIGNhc2UgMSs2NDogbSA9ICJOb3QgYSBudW1iZXIgb3IgdmFsaWQgc3dpdGNoIjsgYnJl YWs7CisJCSAgZGVmYXVsdDogbSA9ICJOb3QgdmFsaWQgaW4gdGhpcyBwb3NpdGlvbiI7CisJCX0K KwkJcHJpbnRmKCI/JXM6IFwiJXNcIlxuIixtLCBhdG1idWYpOworCSAgICB9CisJICAgIHJldHVy bih4KTsKKwl9CisJaWYgKHggIT0gLTIgJiYgeCAhPSAtNiAmJiB4ICE9IC05ICYmIHggIT0gLTMp IC8qIEVkaXRpbmcgb3Igc29tZXN1Y2ggKi8KKwkgIHJldHVybih4KTsJCQkvKiBHbyBiYWNrIGFu ZCByZXBhcnNlICovCisJcHAgPSBucCA9IGJwID0geHA7CQkvKiBCYWNrIHVwIHBvaW50ZXJzICov CisJY21mbGdzID0gLTE7CQkJLyogRm9yY2UgYSByZXBhcnNlICovCisKKyNpZm5kZWYgTk9TUEwK KwlpZiAoIWFza2ZsYWcpIHsJCQkvKiBJZiBub3QgZXhlY3V0aW5nIEFTSy1jbGFzcyBjbWQuLi4g Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICBpZiAoY3JmbGFnKSB7CQkvKiBJZiBDUiB3YXMg dHlwZWQsIHB1dCBpdCBiYWNrICovCisJCXB1c2hjID0gTEY7CQkvKiBCdXQgYXMgYSBsaW5lZmVl ZCAqLworCSAgICB9IGVsc2UgaWYgKHFtZmxhZykgewkvKiBEaXR0byBmb3IgUXVlc3Rpb24gbWFy ayAqLworCQlwdXNoYyA9ICc/JzsKKwkgICAgfSBlbHNlIGlmIChlc2ZsYWcpIHsJLyogYW5kIEVz Y2FwZSBvciBUYWIgKi8KKwkJcHVzaGMgPSBFU0M7CisJICAgIH0KKyNpZm5kZWYgTk9TUEwKKwl9 CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB9Cit9CisKKy8qCisgICBDIE0gSSBPIEYgSSAgLS0g IFBhcnNlIGFuIGlucHV0IGZpbGUgT1IgdGhlIG5hbWUgb2YgYSBub25leGlzdGVudCBmaWxlLgor CisgICBSZXBsYWNlcyB0aGUgY29tbWVudGVkLW91dCB2ZXJzaW9uIGFib3ZlLiAgVGhpcyBvbmUg YWN0dWFsbHkgd29ya3MgYW5kCisgICBoYXMgdGhlIGV4cGVjdGVkIHN0cmFpZ2h0Zm9yd2FyZCBp bnRlcmZhY2UuCisqLworaW50CitjbWlvZmkoeGhscCx4ZGVmLHhwLHdpbGQsZikgY2hhciAqeGhs cCwgKnhkZWYsICoqeHA7IGludCAqd2lsZDsgeHhfc3RycCBmOyB7CisgICAgaW50IHg7CisgICAg c3RydWN0IEZEQiBmMSwgZjI7CisgICAgY21mZGJpKCZmMSxfQ01JRkkseGhscCx4ZGVmLCIiLDAs MCxmLE5VTEwsJmYyKTsKKyAgICBjbWZkYmkoJmYyLF9DTU9GSSwiIiwiIiwiIiwwLDAsZixOVUxM LE5VTEwpOworICAgIHggPSBjbWZkYigmZjEpOworICAgIGlmICh4IDwgMCkgeworCWlmICh4ID09 IC0zKSB7CisJICAgIHggPSAtOTsKKwkgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWRcbiIp OworCX0KKyAgICB9CisgICAgKndpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OworICAgICp4cCA9IGNt cmVzdWx0LnNyZXN1bHQ7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgRyBUIFcgTyBSIEQgIC0t ICBHZXRzIGEgIndvcmQiIGZyb20gdGhlIGNvbW1hbmQgaW5wdXQgc3RyZWFtICAqLworCisvKgor VXNhZ2U6IHJldGNvZGUgPSBndHdvcmQoYnJrKTsKKyAgYnJrID0gMCBmb3Igbm9ybWFsIHdvcmQg YnJlYWtzIChzcGFjZSwgQ1IsIEVzYywgPykKKyAgYnJrID0gMSB0byBhZGQgJzonIGFuZCAnPScg KGZvciBwYXJzaW5nIHN3aXRjaGVzKS4gIFRoZXNlIGNoYXJhY3RlcnMKKyAgICAgICAgYWN0IGFz IGJyZWFrIGNoYXJhY3RlcnMgb25seSBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaWVs ZAorICAgICAgICBpcyBzbGFzaCAoJy8nKSwgaS5lLiBzd2l0Y2ggaW50cm9kdWNlci4KKyAgYnJr ID0gNCB0byBub3Qgc3RyaXAgY29tbWVudHMgKHVzZWQgb25seSBmb3IgImhlbHAgIyIgYW5kICJo ZWxwIDsiKS4KKworUmV0dXJuczoKKy0xMCBUaW1lbGltaXQgc2V0IGFuZCB0aW1lZCBvdXQKKyAt OSBpZiBpbnB1dCB3YXMgdG9vIGxvbmcKKyAtNCBpZiBlbmQgb2YgZmlsZSAoZS5nLiBwaXBlIGJy b2tlbikKKyAtMyBpZiBudWxsIGZpZWxkCisgLTIgaWYgY29tbWFuZCBidWZmZXIgb3ZlcmZsb3dz CisgLTEgaWYgdXNlciBkaWQgc29tZSBkZWxldGluZworICAwIGlmIHdvcmQgdGVybWluYXRlcyB3 aXRoIFNQIG9yIHRhYgorICAxIGlmIC4uLiBDUgorICAyIGlmIC4uLiBFU0MKKyAgMyBpZiAuLi4g PyAocXVlc3Rpb24gbWFyaykKKyAgNCBpZiAuLi4gOiBvciA9IGFuZCBjYWxsZWQgd2l0aCBicmsg IT0gMAorCitXaXRoOgorICBwcCBwb2ludGluZyB0byBiZWdpbm5pbmcgb2Ygd29yZCBpbiBidWZm ZXIKKyAgYnAgcG9pbnRpbmcgdG8gYWZ0ZXIgY3VycmVudCBwb3NpdGlvbgorICBhdG1idWYgY29u dGFpbmluZyBhIGNvcHkgb2YgdGhlIHdvcmQKKyAgY2MgY29udGFpbmluZyB0aGUgbnVtYmVyIG9m IGNoYXJhY3RlcnMgaW4gdGhlIHdvcmQgY29waWVkIHRvIGF0bWJ1ZgorKi8KKworaW50Cit1bmd3 b3JkKCkgewkJCQkvKiBVbmdldCBhIHdvcmQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ1bmd3b3JkIGNt ZmxncyIsIiIsY21mbGdzKTsKKyAgICBpZiAodW5ndykgcmV0dXJuKDApOworICAgIGNtZnNhdiA9 IGNtZmxnczsKKyAgICB1bmd3ID0gMTsKKyAgICBjbWZsZ3MgPSAwOworICAgIHJldHVybigwKTsK K30KKworLyogVW4tdW4tZ2V0IHdvcmQuICBVbmRvIHVuZ3dvcmQoKSBpZiBpdCBoYXMgYmVlbiBk b25lLiAqLworCitWT0lECit1bnVuZ3coKSB7CisgICAgZGVidWcoRjAxMCwidW51bmd3IGF0bWJ1 ZiIsYXRtYnVmLDApOworICAgIGlmICh1bmd3KSB7CisJdW5ndyA9IDA7CisJY21mbGdzID0gY21m c2F2OworCWF0bWJ1ZlswXSA9IE5VTDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK2d0d29yZChi cmspIGludCBicms7IHsKKyAgICBpbnQgYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDdXJyZW50IGNoYXIgKi8KKyAgICBpbnQgcXVvdGUgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBGbGFnIGZvciBxdW90ZSBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgZWNob2YgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciB3aGV0aGVyIHRvIGVjaG8gKi8KKyAgICBpbnQg Y29tbWVudCA9IDA7CQkJLyogRmxhZyBmb3IgaW4gY29tbWVudCAqLworICAgIGNoYXIgKmNwID0g TlVMTDsJCQkvKiBDb21tZW50IHBvaW50ZXIgKi8KKyAgICBpbnQgZWludHIgPSAwOwkJCS8qIEZs YWcgZm9yIHN5c2NhbGwgaW50ZXJydXB0ZWQgKi8KKyAgICBpbnQgYnJhY2VsdmwgPSAwOwkJCS8q IG5lc3RlZCBicmFjZSBjb3VudGVyIFtqcnNdICovCisgICAgaW50IGlzY29udGQgPSAwOwkJCS8q IEZsYWcgZm9yIGNvbnRpbnVhdGlvbiAqLworICAgIGludCByZWFsdHR5ID0gMDsJCQkvKiBTdGRp biBpcyByZWFsbHkgYSB0dHkgKi8KKyAgICBjaGFyIGZpcnN0bmIgID0gTlVMOworICAgIGNoYXIg bGFzdGNoYXIgPSBOVUw7CisgICAgY2hhciBwcmV2Y2hhciA9IE5VTDsKKyAgICBjaGFyIGxicmFj ZSwgcmJyYWNlOworICAgIGludCBkcSA9IDA7CQkJCS8qIERvdWJsZXF1b3RlIGZsYWcgKi8KKyAg ICBpbnQgZHFuID0gMDsJCQkvKiBhbmQgY291bnQgKi8KKyAgICBpbnQgaXNlc2MgPSAwOworCisj aWZkZWYgUlRVCisgICAgZXh0ZXJuIGludCBydHVfYnVnOworI2VuZGlmIC8qIFJUVSAqLworCisj aWZkZWYgSUtTRAorICAgIGV4dGVybiBpbnQgaW5zZXJ2ZXI7CisjZW5kaWYgLyogSUtTRCAqLwor ICAgIGV4dGVybiBpbnQga3N0YXJ0YWN0aXZlOworCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBl eHRlcm4gaW50IHRlcm10eXBlOyAgICAgICAgICAgICAgICAvKiBERyB0ZXJtaW5hbCB0eXBlIGZs YWcgKi8KKyAgICBleHRlcm4gaW50IGNvbl9yZWFkc19tdDsgICAgICAgICAgICAvKiBDb25zb2xl IHJlYWQgYXN5bmNoIGlzIGFjdGl2ZSAqLworICAgIGlmIChjb25fcmVhZHNfbXQpIGNvbm5vaV9t dCgpOyAgICAgIC8qIFRhc2sgd291bGQgaW50ZXJmZXJlIHcvY29ucyByZWFkICovCisjZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgIGlm IChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJndHdvcmQgYnJrIiwiIixicmspOworCWRlYnVnKEYx MDEsImd0d29yZCBjbWZsZGZsZ3MiLCIiLGNtZmxkZmxncyk7CisJZGVidWcoRjEwMSwiZ3R3b3Jk IHN3YXJnIiwiIixzd2FyZyk7CisJZGVidWcoRjEwMSwiZ3R3b3JkIGRweCIsIiIsZHB4KTsKKwlk ZWJ1ZyhGMTAxLCJndHdvcmQgZWNob2YiLCIiLGVjaG9mKTsKKyNpZm5kZWYgTk9TUEwKKwlkZWJ1 ZyhGMTAxLCJndHdvcmQgYXNrZmxhZyIsIiIsYXNrZmxhZyk7CisJZGVidWcoRjEwMSwiZ3R3b3Jk IHRpbWVsaW1pdCIsIiIsdGltZWxpbWl0KTsKKyNpZm5kZWYgTk9MT0NBTAorI2lmbmRlZiBOT1hG RVIKKyNpZmRlZiBDS19BVVRPREwKKwlkZWJ1ZyhGMTAxLCJndHdvcmQgY21kYWRsIiwiIixjbWRh ZGwpOworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlm IC8qIE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIHJlYWx0dHkgPSBpc19hX3R0eSgwKTsJ CS8qIFN0ZGluIGlzIHJlYWxseSBhIHR0eT8gKi8KKworICAgIGlmIChjbWZsZGZsZ3MgJiAxKSB7 CisJbGJyYWNlID0gJygnOworCXJicmFjZSA9ICcpJzsKKyAgICB9IGVsc2UgeworCWxicmFjZSA9 ICd7JzsKKwlyYnJhY2UgPSAnfSc7CisgICAgfQorICAgIGNyZmxhZyA9IDA7CisgICAgcW1mbGFn ID0gMDsKKyAgICBlc2ZsYWcgPSAwOworCisgICAgaWYgKHN3YXJnKSB7CQkJLyogTm8gbGVhZGlu ZyBzcGFjZSBmb3Igc3dpdGNoIGFyZ3MgKi8KKwlpbndvcmQgPSAxOworCXN3YXJnID0gMDsKKyAg ICB9CisgICAgaWYgKHVuZ3cpIHsJCQkJLyogSGF2ZSBhIHdvcmQgc2F2ZWQ/ICovCisjaWZkZWYg TV9VTkdXCisJLyogRXhwZXJpbWVudGFsIGNvZGUgdG8gYWxsb3cgdW5nZXR0aW5nIG11bHRpcGxl IHdvcmRzLiAqLworCS8qIFNlZSBjb21tZW50cyBpbiBja21rZXkyKCkgYWJvdmUuICovCisJaW50 IHg7CisJaWYgKG5wID4gcHApIHBwID0gbnA7CisJd2hpbGUgKCpwcCA9PSBTUCkgcHArKzsKKwlp ZiAoISpwcCkgeworCSAgICB1bmd3ID0gMDsKKwkgICAgY21mbGdzID0gY21mc2F2OworCX0gZWxz ZSB7CisJICAgIGlmICgoeCA9IHNldGF0bShwcCwyKSkgPCAwKSB7CisJCXByaW50ZigiP1NhdmVk IHdvcmQgdG9vIGxvbmdcbiIpOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJICAgIGlmIChwcFt4 XSA+PSBTUCkgeworCQljaGFyICpwMjsKKwkJcDIgPSBwcDsKKwkJcDIgKz0geDsKKwkJd2hpbGUg KCpwMiA9PSBTUCkgcDIrKzsKKwkJaWYgKCpwMikgeworCQkgICAgbnAgPSBwMjsKKwkJICAgIHVu Z3dvcmQoKTsKKwkJfQorCSAgICB9IGVsc2UgeworCQl1bmd3ID0gMDsKKwkJY21mbGdzID0gY21m c2F2OworCQlkZWJ1ZyhGMDEwLCJndHdvcmQgdW5ndyByZXR1cm4gYXRtYnVmIixhdG1idWYsMCk7 CisJICAgIH0KKwl9CisJcmV0dXJuKGNtZmxncyk7CisjZWxzZQorCS8qCisJICAgWW91IHdvdWxk IHRoaW5rIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlOgorICAgICAgICAgICAgIHdoaWxlICgqcHAg PT0gU1ApIHBwKys7CisgICAgICAgICAgIGJ1dCB5b3Ugd291bGQgYmUgd3JvbmcgLS0gbWFraW5n IHRoaXMgY2hhbmdlIGJyZWFrcyBHT1RPLgorICAgICAgICAqLworCXdoaWxlICgqcHArKyA9PSBT UCkgOworCWlmIChzZXRhdG0ocHAsMikgPCAwKSB7CisJICAgIHByaW50ZigiP1NhdmVkIHdvcmQg dG9vIGxvbmdcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwl1bmd3ID0gMDsKKwljbWZsZ3Mg PSBjbWZzYXY7CisJZGVidWcoRjAxMCwiZ3R3b3JkIHVuZ3cgcmV0dXJuIGF0bWJ1ZiIsYXRtYnVm LDApOworCXJldHVybihjbWZsZ3MpOworI2VuZGlmIC8qIE1fVU5HVyAqLworICAgIH0KKyAgICBw cCA9IG5wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBjdXJyZW50IGZp ZWxkICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7 CisJZGVidWcoRjExMCwiZ3R3b3JkIGNtZGJ1ZiIsY21kYnVmLDApOworCWRlYnVnKEYxMTAsImd0 d29yZCBicCIsYnAsMCk7CisJZGVidWcoRjExMCwiZ3R3b3JkIHBwIixwcCwwKTsKKyAgICB9Cisj ZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeworCS8qIElmIHdl IGFyZSByZXBhcnNpbmcgd2UgaGF2ZSB0byByZWNvdW50IGFueSBicmFjZXMgb3IgZG91YmxlcXVv dGVzICovCisJY2hhciAqIHAgPSBwcDsKKwljaGFyIGM7CisJaWYgKCpwID09ICciJykKKwkgIGRx Kys7CisJd2hpbGUgKChjID0gKnArKykpCisJICBpZiAoYyA9PSBsYnJhY2UpCisJICAgIGJyYWNl bHZsKys7CisJICBlbHNlIGlmIChjID09IHJicmFjZSkKKwkgICAgYnJhY2VsdmwtLTsKKwkgIGVs c2UgaWYgKGRxICYmIGMgPT0gJyInKQorCSAgICBkcW4rKzsKKyAgICB9CisgICAgd2hpbGUgKGJw IDwgY21kYnVmK0NNREJMKSB7ICAgICAgICAgLyogQmlnIGdldC1hLWNoYXJhY3RlciBsb29wICov CisJZWNob2YgPSAwOwkJCS8qIEFzc3VtZSB3ZSBkb24ndCBlY2hvIGJlY2F1c2UgKi8KKwljaHNy YyA9IDA7CQkJLyogY2hhcmFjdGVyIGNhbWUgZnJvbSByZXBhcnNlIGJ1Zi4gKi8KKyNpZmRlZiBC U19ESVJTRVAKK0NNRElSUEFSU0U6CisjZW5kaWYgLyogQlNfRElSU0VQICovCisKKwljID0gKmJw OworICAgICAgICBpZiAoIWMpIHsJCQkvKiBJZiBubyBjaGFyIHdhaXRpbmcgaW4gcmVwYXJzZSBi dWYgKi8KKwkgICAgaWYgKChkcHgKKyNpZm5kZWYgTk9TUEwKKwkJIHx8IGVjaG9zdGFycworI2Vu ZGlmIC8qIE5PU1BMICovCisJCSApICYmICghcHVzaGMKKyNpZm5kZWYgTk9TUEwKKwkJCXx8IGFz a2ZsYWcKKyNlbmRpZiAvKiBOT1NQTCAqLworCQkJKSkJCS8qIEdldCBmcm9tIHR0eSwgc2V0IGVj aG8gZmxhZyAqLworCSAgICAgIGVjaG9mID0gMTsKKwkgICAgYyA9IGNtZGdldGModGltZWxpbWl0 KTsJLyogUmVhZCBhIGNvbW1hbmQgY2hhcmFjdGVyLiAqLworI2lmZGVmIERFQlVHCisJICAgIGRl YnVnKEYxMDEsImd0d29yZCBjIiwiIixjKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisJICAgIGlm ICh0aW1lbGltaXQgJiYgYyA8IC0xKSB7CS8qIFRpbWVkIG91dCAqLworCQlyZXR1cm4oLTEwKTsK KwkgICAgfQorCisjaWZuZGVmIE5PWEZFUgorLyoKKyAgVGhlIGZvbGxvd2luZyBhbGxvd3MgcGFj a2V0IHJlY29nbml0aW9uIGluIHRoZSBjb21tYW5kIHBhcnNlci4KKyAgUHJlc2VudGx5IGl0IHdv cmtzIG9ubHkgZm9yIEtlcm1pdCBwYWNrZXRzLCBhbmQgaWYgb3VyIGN1cnJlbnQgcHJvdG9jb2wK KyAgaGFwcGVucyB0byBiZSBhbnl0aGluZyBiZXNpZGVzIEtlcm1pdCwgd2Ugc2ltcGx5IGZvcmNl IGl0IHRvIEtlcm1pdC4KKyAgV2UgZG9uJ3QgdXNlIHRoZSBBUEMgbWVjaGFuaXNtIGhlcmUgZm9y IG1lY2hhbmljYWwgcmVhc29ucywgYW5kIGFsc28KKyAgYmVjYXVzZSB0aGlzIHdheSwgaXQgd29y a3MgZXZlbiB3aXRoIG1pbmltYWxseSBjb25maWd1cmVkIGludGVyYWN0aXZlCisgIHZlcnNpb25z LiAgQWRkIFptb2RlbSBsYXRlci4uLgorKi8KKyNpZmRlZiBDS19BVVRPREwKKwkgICAgaWYgKCgh bG9jYWwgJiYgY21kYWRsKQkvKiBBdXRvZG93bmxvYWQgZW5hYmxlZD8gKi8KKyNpZmRlZiBJS1Nf T1BUSU9OCisJCXx8IFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKKyNl bmRpZiAvKiBJS1NfT1BUSU9OICovCisJCSkgeworCQlpbnQgazsKKwkJayA9IGtzdGFydCgoQ0hB UiljKTsJLyogS2VybWl0IFMgb3IgSSBwYWNrZXQ/ICovCisJCWlmIChrKSB7CisJCSAgICBpbnQg a3NpZ24gPSAwOworCQkgICAgaWYgKGsgPCAwKSB7CS8qIE1pbnVzLVByb3RvY29sPyAqLworI2lm ZGVmIE5PU0VSVkVSCisJCQlnb3RvIG5vc2VydmVyOwkvKiBOZWVkIHNlcnZlciBtb2RlIGZvciB0 aGlzICovCisjZWxzZQorCQkJa3NpZ24gPSAxOwkvKiBSZW1lbWJlciAqLworCQkJayA9IDAgLSBr OwkvKiBDb252ZXJ0IHRvIGFjdHVhbCBwcm90b2NvbCAqLworCQkJanVzdG9uZSA9IDE7CS8qIEZs YWcgZm9yIHByb3RvY29sIG1vZHVsZSAqLworI2VuZGlmIC8qIE5PU0VSVkVSICovCisJCSAgICB9 IGVsc2UKKwkJICAgICAganVzdG9uZSA9IDA7CisJCSAgICBrLS07CQkvKiBBZGp1c3Qga3N0YXJ0 J3MgcmV0dXJuIHZhbHVlICovCisJCSAgICBpZiAoayA9PSBQUk9UT19LKSB7CisJCQlleHRlcm4g aW50IHByb3RvY29sLCBnX3Byb3RvOworCQkJZXh0ZXJuIENIQVIgc3N0YXRlOworCQkJZ19wcm90 byA9IHByb3RvY29sOworCQkJcHJvdG9jb2wgPSBQUk9UT19LOyAvKiBDcnVkZS4uLiAqLworCQkJ c3N0YXRlID0ga3NpZ24gPyAneCcgOiAndic7CisJCQljbWRidWZbMF0gPSBOVUw7CisJCQlyZXR1 cm4oLTMpOworCQkgICAgfQorCQl9CisJICAgIH0KKyNpZmRlZiBOT1NFUlZFUgorCSAgbm9zZXJ2 ZXI6CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKworCSAgICBjaHNyYyA9IDE7CQkJLyogUmVtZW1iZXIgY2hhcmFjdGVy IHNvdXJjZSBpcyB0dHkuICovCisJICAgIGJya2NoYXIgPSBjOworCisjaWZkZWYgSUtTRAorICAg ICAgICAgICAgaWYgKGluc2VydmVyICYmIGMgPCAwKSB7ICAgIC8qIEVuZCBvZiBzZXNzaW9uPyAq LworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImd0d29yZCBjIDwgMCIsImV4aXRpbmciLGMp OworICAgICAgICAgICAgICAgIHJldHVybigtNCk7ICAgICAgICAgICAgIC8qIENsZWFudXAgYW5k IHRlcm1pbmF0ZSAqLworICAgICAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVm IE9TMgorICAgICAgICAgICBpZiAoYyA8IDApIHsJCQkvKiBFcnJvciAqLworCSAgICAgICBpZiAo YyA9PSAtMykgewkJLyogRW1wdHkgd29yZD8gKi8KKwkJICAgaWYgKGJsb2NrbHZsID4gMCkJLyog SW4gYSBibG9jayAqLworCQkgICAgIGNvbnRpbnVlOwkJLyogc28ga2VlcCBsb29raW5nIGZvciBi bG9jayBlbmQgKi8KKwkJICAgZWxzZQorCQkgICAgIHJldHVybigtMyk7CS8qIE90aGVyd2lzZSBz YXkgd2UgZ290IG5vdGhpbmcgKi8KKwkgICAgICAgfSBlbHNlIHsJCQkvKiBOb3QgZW1wdHkgd29y ZCAqLworCQkgICByZXR1cm4oLTQpOwkJLyogU28gc29tZSBraW5kIG9mIGkvbyBlcnJvciAqLwor CSAgICAgICB9CisgICAgICAgICAgIH0KKyNlbHNlCisjaWZkZWYgTUFDCisJICAgaWYgKGMgPT0g LTMpCQkJLyogRW1wdHkgd29yZC4uLiAqLworCSAgICAgaWYgKGJsb2NrbHZsID4gMCkKKwkgICAg ICAgY29udGludWU7CisJICAgICBlbHNlCisJICAgICAgIHJldHVybigtMyk7CisjZW5kaWYgLyog TUFDICovCisjZW5kaWYgLyogT1MyICovCisJICAgaWYgKGMgPT0gRU9GKSB7CQkvKiBUaGlzIGNh biBoYXBwZW4gaWYgc3RkaW4gbm90IHR0eS4gKi8KKyNpZmRlZiBFSU5UUgorLyoKKyAgU29tZSBv cGVyYXRpbmcgYW5kL29yIEMgcnVudGltZSBzeXN0ZW1zIHJldHVybiBFSU5UUiBmb3Igbm8gZ29v ZCByZWFzb24sCisgIHdoZW4gdGhlIGVuZCBvZiB0aGUgc3RhbmRhcmQgaW5wdXQgImZpbGUiIGlz IGVuY291bnRlcmVkLiAgSW4gY2FzZXMgbGlrZQorICB0aGlzLCB3ZSBnZXQgaW50byBhbiBpbmZp bml0ZSBsb29wOyBoZW5jZSB0aGUgZWludHIgY291bnRlciwgd2hpY2ggaXMgcmVzZXQKKyAgdG8g MCB1cG9uIGVhY2ggY2FsbCB0byB0aGlzIHJvdXRpbmUuCisqLworCQlkZWJ1ZyhGMTAxLCJndHdv cmQgRU9GIiwiIixlcnJubyk7CisJCWlmIChlcnJubyA9PSBFSU5UUiAmJiArK2VpbnRyIDwgNCkg LyogV2hlbiBiZydkIHByb2Nlc3MgaXMgKi8KKwkJICBjb250aW51ZTsJCS8qIGZnJ2QgYWdhaW4u ICovCisjZW5kaWYgLyogRUlOVFIgKi8KKwkJcmV0dXJuKC00KTsKKwkgICAgfQorCSAgICBjICY9 IGNtZG1zazsJCS8qIFN0cmlwIGFueSBwYXJpdHkgYml0ICovCisJfQkJCQkvKiBpZiBkZXNpcmVk LiAqLworCisvKiBOb3cgd2UgaGF2ZSB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KKworCWlzZXNjID0g KGMgPT0gRVNDKTsJCS8qIEEgcmVhbCBFU0M/ICovCisKKwlpZiAoIWZpcnN0bmIgJiYgYyA+IFNQ KSB7CS8qIEZpcnN0IG5vbmJsYW5rICovCisJICAgIGZpcnN0bmIgPSBjOworCSAgICBpZiAoYyA9 PSAnIicpCQkvKiBTdGFydHMgd2l0aCBkb3VibGVxdW90ZSAqLworCSAgICAgIGRxID0gMTsKKwl9 CisJaWYgKGMgPT0gJyInKQkJCS8qIENvdW50IGRvdWJsZXF1b3RlcyAqLworCSAgZHFuKys7CisK KwlpZiAocXVvdGUgJiYgKGMgPT0gQ1IgfHwgYyA9PSBMRikpIHsgLyogRW50ZXIga2V5IGZvbGxv d2luZyBxdW90ZSAqLworCSAgICAqYnArKyA9IENNRFE7CQkvKiBEb3VibGUgaXQgKi8KKwkgICAg KmJwID0gTlVMOworCSAgICBxdW90ZSA9IDA7CisJfQorICAgICAgICBpZiAocXVvdGUgPT0gMCkg ewkJLyogSWYgdGhpcyBpcyBub3QgYSBxdW90ZWQgY2hhcmFjdGVyICovCisJICAgIHN3aXRjaCAo YykgeworCSAgICAgIGNhc2UgQ01EUToJCS8qIEdvdCB0aGUgcXVvdGUgY2hhcmFjdGVyIGl0c2Vs ZiAqLworCQlpZiAoIWNvbW1lbnQgJiYgcXVvdGluZykKKwkJICBxdW90ZSA9IDE7CQkvKiBGbGFn IGl0IGlmIG5vdCBpbiBhIGNvbW1lbnQgKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSBGRjoJCQkv KiBGb3JtZmVlZC4gKi8KKyAgICAgICAgICAgICAgICBjID0gTkw7ICAgICAgICAgICAgICAgICAv KiBSZXBsYWNlIHdpdGggbmV3bGluZSAqLworCQljbWRjbHJzY24oKTsJCS8qIENsZWFyIHRoZSBz Y3JlZW4gKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSBIVDoJCQkvKiBIb3Jpem9udGFsIFRhYiAq LworCQlpZiAoY29tbWVudCkJCS8qIElmIGluIGNvbW1lbnQsICovCisJCSAgYyA9IFNQOwkJLyog c3Vic3RpdHV0ZSBzcGFjZSAqLworCQllbHNlCQkJLyogb3RoZXJ3aXNlICovCisJCSAgYyA9IEVT QzsJCS8qIHN1YnN0aXR1dGUgRVNDIChmb3IgY29tcGxldGlvbikgKi8KKwkJYnJlYWs7CisJICAg ICAgY2FzZSAnOyc6CQkJLyogVHJhaWxpbmcgY29tbWVudCAqLworCSAgICAgIGNhc2UgJyMnOgor CQlpZiAoISAoYnJrICYgNCkgKSB7CS8qIElmIG5vdCBrZWVwaW5nIGNvbW1lbnRzICovCisJCSAg ICBpZiAoaW53b3JkID09IDAgJiYgcXVvdGluZykgeyAvKiBJZiBub3QgaW4gYSB3b3JkICovCisJ CQljb21tZW50ID0gMTsJLyogc3RhcnQgYSBjb21tZW50LiAqLworCQkJY3AgPSBicDsJLyogcmVt ZW1iZXIgd2hlcmUgaXQgc3RhcnRzLiAqLworCQkgICAgfQorCQl9CisJCWJyZWFrOworCSAgICB9 CisJICAgIGlmICgha3N0YXJ0YWN0aXZlICYmCS8qIE5vdCBpbiBwb3NzaWJsZSBLZXJtaXQgcGFj a2V0ICovCisJCSFjb21tZW50ICYmIGMgPT0gU1ApIHsJLyogU3BhY2Ugbm90IGluIGNvbW1lbnQg Ki8KKyAgICAgICAgICAgICAgICAqYnArKyA9IChjaGFyKSBjOwkvKiBkZXBvc2l0IGluIGJ1ZmZl ciBpZiBub3QgYWxyZWFkeSAqLworCQkvKiBkZWJ1ZyhGMTAxLCJndHdvcmQgZWNob2YgMiIsIiIs ZWNob2YpOyAqLworI2lmZGVmIEJFQk9YCisgICAgICAgICAgICAgICAgaWYgKGVjaG9mKSB7CisJ CSAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsgLyogRWNobyB3aGF0IHdhcyB0eXBlZC4gKi8KKyAg ICAgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgICAgICAgICAgICAgIGZm bHVzaChzdGRlcnIpOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAg aWYgKGVjaG9mKSB7CisJCSAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsgLyogRWNobyB3aGF0IHdh cyB0eXBlZC4gKi8KKwkJICAgIGlmICh0aW1lbGltaXQpCisJCSAgICAgIGZmbHVzaChzdGRvdXQp OworCQl9CisjZW5kaWYgLyogQkVCT1ggKi8KKyAgICAgICAgICAgICAgICBpZiAoaW53b3JkID09 IDApIHsgICAgICAvKiBJZiBsZWFkaW5nLCBnb2JibGUgaXQuICovCisgICAgICAgICAgICAgICAg ICAgIHBwKys7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIElmIHRlcm1pbmF0aW5nLCByZXR1cm4uICovCisJ CSAgICBpZiAoKCFkcSAmJiAoKCpwcCAhPSBsYnJhY2UpIHx8IChicmFjZWx2bCA9PSAwKSkpIHx8 CisJCQkoZHEgJiYgZHFuID4gMSAmJiAqKGJwLTIpID09ICciJykpIHsKKwkJCW5wID0gYnA7CisJ CQljbWJwdHIgPSBucDsKKwkJCWlmIChzZXRhdG0ocHAsMCkgPCAwKSB7CisJCQkgICAgcHJpbnRm KCI/RmllbGQgdG9vIGxvbmcgZXJyb3IgMVxuIik7CisJCQkgICAgZGVidWcoRjExMSwiZ3R3b3Jk IHRvbyBsb25nICMxIixwcCxzdHJsZW4ocHApKTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQor CQkJYnJrY2hhciA9IGM7CisJCQlpbndvcmQgPSBjbWZsZ3MgPSAwOworCQkJcmV0dXJuKDApOwor CQkgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSBsYnJhY2UpIHsKKwkJYnJhY2Vs dmwrKzsKKwkJLyogZGVidWcoRjEwMSwiZ3R3b3JkIGJyYWNlbHZsKysiLCIiLGJyYWNlbHZsKTsg Ki8KKwkgICAgfQorICAgICAgICAgICAgaWYgKGMgPT0gcmJyYWNlICYmIGJyYWNlbHZsID4gMCkg eworICAgICAgICAgICAgICAgIGJyYWNlbHZsLS07CisJCS8qIGRlYnVnKEYxMDEsImd0d29yZCBi cmFjZWx2bC0tIiwiIixicmFjZWx2bCk7ICovCisgICAgICAgICAgICAgICAgaWYgKGxpbmViZWdp bikKKwkJICBibG9ja2x2bC0tOworICAgICAgICAgICAgfQorCSAgICBpZiAoKGMgPT0gJz0nIHx8 IGMgPT0gJzonKSAmJgorCQkvKiBeXl4gKi8KKwkJIWtzdGFydGFjdGl2ZSAmJiAhY29tbWVudCAm JiBicmsgLyogJiYgKGZpcnN0bmIgPT0gJy8nKSAqLworCQkpIHsKKyAgICAgICAgICAgICAgICAq YnArKyA9IChjaGFyKSBjOwkvKiBTd2l0Y2ggYXJndW1lbnQgc2VwYXJhdG9yICovCisJCS8qIGRl YnVnKEYxMTEsImd0d29yZCBzd2l0Y2ggYXJnc2VwIixjbWRidWYsYnJrKTsgKi8KKyNpZmRlZiBC RUJPWAorICAgICAgICAgICAgICAgIGlmIChlY2hvZikgeworCQkgICAgY21kZWNobygoY2hhcikg YywgMCk7IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisgICAgICAgICAgICAgICAgICAgIGZm bHVzaChzdGRvdXQpOworICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAg ICAgICAgICAgICB9CisjZWxzZQorCQlpZiAoZWNob2YpIHsKKwkJICAgIGNtZGVjaG8oKGNoYXIp IGMsIDApOyAvKiBFY2hvIHdoYXQgd2FzIHR5cGVkLiAqLworCQkgICAgaWYgKHRpbWVsaW1pdCkK KwkJICAgICAgZmZsdXNoKHN0ZG91dCk7CisJCX0KKyNlbmRpZiAvKiBCRUJPWCAqLworCQlpZiAo KCpwcCAhPSBsYnJhY2UpIHx8IChicmFjZWx2bCA9PSAwKSkgeworCQkgICAgbnAgPSBicDsKKwkJ ICAgIGNtYnB0ciA9IG5wOworCQkgICAgaWYgKHNldGF0bShwcCwyKSA8IDApIHsgLyogXl5eICov CisJCQlwcmludGYoIj9GaWVsZCB0b28gbG9uZyBlcnJvciAxXG4iKTsKKwkJCWRlYnVnKEYxMTEs Imd0d29yZCB0b28gbG9uZyAjMSIscHAsc3RybGVuKHBwKSk7CisJCQlyZXR1cm4oLTkpOworCQkg ICAgfQorCQkgICAgaW53b3JkID0gY21mbGdzID0gMDsKKwkJICAgIGJya2NoYXIgPSBjOworCQkg ICAgcmV0dXJuKDQpOworCQl9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSBM RiB8fCBjID09IENSKSB7CS8qIENSIG9yIExGLiAqLworCQlpZiAoZWNob2YpIHsKKyAgICAgICAg ICAgICAgICAgICAgY21kbmV3bCgoY2hhciljKTsJLyogZWNobyBpdC4gKi8KKyNpZmRlZiBCRUJP WAorICAgICAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAgICAgICAgICAg ICAgZmZsdXNoKHN0ZGVycik7CisjZW5kaWYgLyogQkVCT1ggKi8KKyAgICAgICAgICAgICAgICB9 CisJCXsKKwkJICAgIC8qIFRyaW0gdHJhaWxpbmcgY29tbWVudCBhbmQgd2hpdGVzcGFjZSAqLwor CQkgICAgY2hhciAqcXE7CisJCSAgICBpZiAoY29tbWVudCkgewkvKiBFcmFzZSBjb21tZW50ICov CisJCQl3aGlsZSAoYnAgPj0gY3ApIC8qIEJhY2sgdG8gY29tbWVudCBwb2ludGVyICovCisJCQkg ICpicC0tID0gTlVMOworCQkJYnArKzsKKwkJCXBwID0gYnA7CS8qIEFkanVzdCBvdGhlciBwb2lu dGVycyAqLworCQkJaW53b3JkID0gMDsJLyogYW5kIGZsYWdzICovCisJCQljb21tZW50ID0gMDsK KwkJCWNwID0gTlVMTDsKKwkJICAgIH0KKwkJICAgIHFxID0gaW53b3JkID8gcHAgOiAoY2hhciAq KWNtZGJ1ZjsKKwkJICAgIC8qIEVyYXNlIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KKwkJICAgIHdo aWxlIChicCA+IHFxICYmICgqKGJwLTEpID09IFNQIHx8ICooYnAtMSkgPT0gSFQpKSB7CisJCQli cC0tOworCQkJLyogZGVidWcoRjAwMCwiZXJhc2luZyIsIiIsKmJwKTsgKi8KKwkJCSpicCA9IE5V TDsKKwkJICAgIH0KKwkJICAgIGxhc3RjaGFyID0gKGJwID4gcXEpID8gKihicC0xKSA6IE5VTDsK KwkJICAgIHByZXZjaGFyID0gKGJwID4gcXErMSkgPyAqKGJwLTIpIDogTlVMOworCQl9CisJCWlm IChsaW5lYmVnaW4gJiYgYmxvY2tsdmwgPiAwKSAvKiBCbGFuayBsaW5lIGluIHsuLi59IGJsb2Nr ICovCisJCSAgY29udGludWU7CisKKwkJbGluZWJlZ2luID0gMTsJCS8qIEF0IGJlZ2lubmluZyBv ZiBuZXh0IGxpbmUgKi8KKwkJaXNjb250ZCA9IHByZXZjaGFyICE9IENNRFEgJiYKKwkJICAobGFz dGNoYXIgPT0gJy0nIHx8IGxhc3RjaGFyID09IGxicmFjZSk7CisJCWRlYnVnKEYxMDEsImd0d29y ZCBpc2NvbnRkIiwiIixpc2NvbnRkKTsKKworICAgICAgICAgICAgICAgIGlmIChpc2NvbnRkKSB7 CQkvKiBJZiBsaW5lIGlzIGNvbnRpbnVlZC4uLiAqLworICAgICAgICAgICAgICAgICAgICBpZiAo Y2hzcmMpIHsJLyogSWYgcmVhZGluZyBmcm9tIHR0eSwgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgqKGJwLTEpID09IGxicmFjZSkgeyAvKiBDaGVjayBmb3IgImJlZ2luIGJsb2NrIiAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpicCsrID0gU1A7CS8qIEluc2VydCBhIHNw YWNlIGZvciBuZWF0bmVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrbHZs Kys7CS8qIENvdW50IGJsb2NrIG5lc3RpbmcgbGV2ZWwgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CS8qIE9yIGh5cGhlbiAqLworCQkJICAgIGJwLS07CS8qIE92ZXJ3cml0ZSB0 aGUgaHlwaGVuICovCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAqYnAgPSBOVUw7CS8qIGVyYXNlIHRoZSBkYXNoLCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CS8qIGFuZCBnbyBiYWNrIGZvciBuZXh0IGNoYXIgbm93LiAqLwor ICAgICAgICAgICAgICAgICAgICB9CisJCX0gZWxzZSBpZiAoYmxvY2tsdmwgPiAwKSB7IC8qIE5v IGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKi8KKwkJICAgIGlmIChjaHNyYykgewkvKiBCdXQgd2Un cmUgaW4gYSAiYmxvY2siICovCisJCQkqYnArKyA9ICcsJzsJLyogQWRkIGNvbW1hICovCisJCQkq YnAgPSBOVUw7CisJCQljb250aW51ZTsKKwkJICAgIH0KKwkJfSBlbHNlIHsJCS8qIE5vIGNvbnRp bnVhdGlvbiwgZW5kIG9mIGNvbW1hbmQuICovCisJCSAgICAqYnAgPSBOVUw7CQkvKiBUZXJtaW5h dGUgdGhlIGNvbW1hbmQgc3RyaW5nLiAqLworCQkgICAgaWYgKGNvbW1lbnQpIHsJLyogSWYgd2Un cmUgaW4gYSBjb21tZW50LCAqLworCQkJY29tbWVudCA9IDA7CS8qIFNheSB3ZSdyZSBub3QgYW55 IG1vcmUsICovCisJCQkqY3AgPSBOVUw7CS8qIGN1dCBpdCBvZmYuICovCisJCSAgICB9CisJCSAg ICBucCA9IGJwOwkJLyogV2hlcmUgdG8gc3RhcnQgbmV4dCBmaWVsZC4gKi8KKwkJICAgIGNtYnB0 ciA9IG5wOworCQkgICAgaWYgKHNldGF0bShwcCwwKSA8IDApIHsgLyogQ29weSBmaWVsZCB0byBh dG9tIGJ1ZmZlciAqLworCQkJZGVidWcoRjExMSwiZ3R3b3JkIHRvbyBsb25nICMyIixwcCxzdHJs ZW4ocHApKTsKKwkJCXByaW50ZigiP0ZpZWxkIHRvbyBsb25nIGVycm9yIDJcbiIpOworCQkJcmV0 dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGlud29yZCA9IDA7CQkvKiBOb3QgaW4gYSB3b3JkIGFu eSBtb3JlLiAqLworCQkgICAgY3JmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgLyogZGVi dWcoRjExMCwiZ3R3b3JkIiwiY3JmbGFnIGlzIHNldCIsMCk7ICovCisjaWZkZWYgQ0tfUkVDQUxM CisJCSAgICBjdXJyZW50ID0gcmxhc3Q7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisJCSAgICBj bWZsZ3MgPSAxOworCQkgICAgaWYgKCF4Y21kc3JjCisjaWZkZWYgQ0tfUkVDQUxMCisJCQl8fCBm b3JjZV9hZGQKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKwkJCSkKKyAgCQkgICAgICBhZGRjbWQo Y21kYnVmKTsKKwkJICAgIHJldHVybihjbWZsZ3MpOworCQl9CisgICAgICAgICAgICB9CisvKgor ICBUaGlzIHNlY3Rpb24gaGFuZGxlcyBpbnRlcmFjdGl2ZSBoZWxwLCBjb21wbGV0aW9uLCBlZGl0 aW5nLCBhbmQgaGlzdG9yeS4KKyAgUmVhcnJhbmdlZCBhcyBhIHN3aXRjaCBzdGF0ZW1lbnQgZXhl Y3V0ZWQgb25seSBpZiB3ZSdyZSBhdCB0b3AgbGV2ZWwgc2luY2UKKyAgdGhlcmUgaXMgbm8gbmVl ZCBmb3IgYW55IG9mIHRoaXMgd2l0aGluIGNvbW1hbmQgZmlsZXMgYW5kIG1hY3JvczogQXVnIDIw MDAuCisgIEp1biAyMDAxOiBFdmVuIGlmIGF0IHRvcCBsZXZlbCwgc2tpcCB0aGlzIGlmIHRoZSBj aGFyYWN0ZXIgd2FzIGZldGNoZWQgZnJvbQorICB0aGUgcmVwYXJzZSBvciByZWNhbGwgYnVmZmVy LCBvciBpZiBzdGRpbiBpcyByZWRpcmVjdGVkLgorKi8KKwkgICAgaWYgKCh4Y21kc3JjID09IDAJ CS8qIE9ubHkgYXQgdG9wIGxldmVsICovCisjaWZuZGVmIE5PU1BMCisJCXx8IGFza2ZsYWcJCS8q IG9yIHVzZXIgaXMgdHlwaW5nIEFTSyByZXNwb25zZSAqLworI2VuZGlmIC8qIE5PU1BMICovCisJ CSApICYmIGNoc3JjICE9IDAgJiYgcmVhbHR0eSkgeyAvKiBmcm9tIHRoZSByZWFsIGtleWJvYXJk ICovCisKKy8qIFVzZSBBTlNJIC8gVlQxMDAgdXAgYW5kIGRvd24gYXJyb3cga2V5cyBmb3IgY29t bWFuZCByZWNhbGwuICAqLworCisJCWlmIChpc2VzYyAmJiAoCisjaWZkZWYgSUtTRAorCQkgICAg aW5zZXJ2ZXIKKyNlbHNlCisJCSAgICAwCisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIFVTRV9B UlJPV0tFWVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IDEKKyNlbmRpZiAvKiBV U0VfQVJST1dLRVlTICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAg ICAgICAgICAgICAgICkgewkJLyogQSByZWFsIEVTQyB3YXMgdHlwZWQgKi8KKwkJICAgIGludCB4 OworCQkgICAgbXNsZWVwKDIwMCk7CS8qIFdhaXQgMS81IHNlYyAqLworCQkgICAgeCA9IGNtZGNv bmNoaygpOwkvKiBXYXMgaXQgZm9sbG93ZWQgYnkgYW55dGhpbmc/ICovCisJCSAgICBkZWJ1ZyhG MTAxLCJBcnJvd2tleSBFU0MgY21kY29uY2hrIiwiIix4KTsKKworCQkgICAgaWYgKHggPiAxKSB7 CS8qIElmIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IDIgY2hhcnMgKi8KKwkJCWludCBjMjsKKwkJCWMy ID0gY21kZ2V0YygwKTsgLyogR2V0IHRoZSBmaXJzdCBvbmUgKi8KKwkJCWRlYnVnKEYxMDEsIkFy cm93a2V5IEVTQyBjMiIsIiIsYzIpOworCisJCQlpZiAoYzIgIT0gJ1snICYmIGMyICE9ICdPJykg eyAvKiBJZiBub3QgWyBvciBPICovCisJCQkgICAgcHVzaGMgPSBjMjsJLyogUHVzaCBpdCBhbmQg dGFrZSB0aGUgRVNDIHNvbG8gKi8KKwkJCX0gZWxzZSB7CisJCQkgICAgYzIgPSBjbWRnZXRjKDAp OyAvKiBHZXQgdGhlIHNlY29uZCBvbmUgKi8KKwkJCSAgICBkZWJ1ZyhGMTAxLCJBcnJvd2tleSBF U0MgYzMiLCIiLGMyKTsKKwkJCSAgICBzd2l0Y2ggKGMyKSB7CisjaWZuZGVmIE5PUkVDQUxMCisJ CQkgICAgICBjYXNlICdBJzoJLyogVXAgKi8KKwkJCQljID0gQkVMOworCQkJCWMgPSBDX1VQOwor CQkJCWJyZWFrOworCQkJICAgICAgY2FzZSAnQic6CS8qIERvd24gKi8KKwkJCQljID0gQkVMOwor CQkJCWMgPSBDX0ROOworCQkJCWJyZWFrOworCQkJICAgICAgY2FzZSAnQyc6CS8qIFJpZ2h0ICov CisJCQkgICAgICBjYXNlICdEJzoJLyogTGVmdCAqLworI2Vsc2UKKwkJCSAgICAgIGRlZmF1bHQ6 CisjZW5kaWYgLyogTk9SRUNBTEwgKi8KKwkJCQljID0gQkVMOyAvKiBXZSBkb24ndCB1c2UgdGhl c2UgeWV0ICovCisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisKKwkJ c3dpdGNoIChjKSB7CisJCSAgY2FzZSAnPyc6CQkvKiA/LUhlbHAgKi8KKyNpZm5kZWYgTk9TUEwK KwkJICAgIGlmIChhc2tmbGFnKQkvKiBObyBoZWxwIGluIEFTSyByZXNwb25zZSAqLworCQkgICAg ICBicmVhazsKKyNlbmRpZiAvKiBOT1NQTCAqLworCQkgICAgaWYgKHF1b3RpbmcKKwkJCSYmICFr c3RhcnRhY3RpdmUKKwkJCSYmICFjb21tZW50CisJCQkpIHsKKwkJCWNtZGVjaG8oKGNoYXIpIGMs IDApOworCQkJKmJwID0gTlVMOworCQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkJCSAgICBk ZWJ1ZyhGMTExLCJndHdvcmQgdG9vIGxvbmcgPyIscHAsc3RybGVuKHBwKSk7CisJCQkgICAgcHJp bnRmKCI/VG9vIGxvbmdcbiIpOworCQkJICAgIHJldHVybigtOSk7CisJCQl9CisJCQlxbWZsYWcg PSAxOworCQkJcmV0dXJuKGNtZmxncyA9IDMpOworCQkgICAgfQorCisJCSAgY2FzZSBFU0M6CQkv KiBFc2Mgb3IgVGFiIGNvbXBsZXRpb24gKi8KKwkJICAgIGlmICghY29tbWVudCkgeworCQkJKmJw ID0gTlVMOworCQkJaWYgKHNldGF0bShwcCwwKSA8IDApIHsKKwkJCSAgICBkZWJ1ZyhGMTExLCJn dHdvcmQgdG9vIGxvbmcgRXNjIixwcCxzdHJsZW4ocHApKTsKKwkJCSAgICBwcmludGYoIj9Ub28g bG9uZ1xuIik7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJCX0KKwkJCWVzZmxhZyA9IDE7CisJCQly ZXR1cm4oY21mbGdzID0gMik7CisJCSAgICB9IGVsc2UgeworCQkJYmxlZXAoQlBfV0FSTik7CisJ CQljb250aW51ZTsKKwkJICAgIH0KKworCQkgIGNhc2UgQlM6CQkvKiBDaGFyYWN0ZXIgZGVsZXRp b24gKi8KKwkJICBjYXNlIFJVQjoKKwkJICAgIGlmIChicCA+IGNtZGJ1ZikgewkvKiBJZiBzdGls bCBpbiBidWZmZXIuLi4gKi8KKwkJCWNtZGNoYXJkZWwoKTsJLyogZXJhc2UgaXQuICovCisJCQli cC0tOwkJLyogcG9pbnQgYmVoaW5kIGl0LCAqLworCQkJaWYgKCpicCA9PSBsYnJhY2UpIGJyYWNl bHZsLS07IC8qIEFkanVzdCBicmFjZSBjb3VudCAqLworCQkJaWYgKCpicCA9PSByYnJhY2UpIGJy YWNlbHZsKys7CisJCQlpZiAoKCpicCA9PSBTUCkgJiYgLyogRmxhZyBpZiBjdXJyZW50IGZpZWxk IGdvbmUgKi8KKwkJCSAgICAoKnBwICE9IGxicmFjZSB8fCBicmFjZWx2bCA9PSAwKSkKKwkJCSAg aW53b3JkID0gMDsKKwkJCSpicCA9IE5VTDsJLyogRXJhc2UgY2hhcmFjdGVyIGZyb20gYnVmZmVy LiAqLworCQkgICAgfSBlbHNlIHsJCS8qIE90aGVyd2lzZSwgKi8KKwkJCWJsZWVwKEJQX1dBUk4p OworCQkJY21yZXMoKTsJLyogYW5kIHN0YXJ0IHBhcnNpbmcgYSBuZXcgY29tbWFuZC4gKi8KKwkJ CSpicCA9ICphdG1idWYgPSBOVUw7CisJCSAgICB9CisJCSAgICBpZiAocHAgPCBicCkKKwkJICAg ICAgY29udGludWU7CisJCSAgICBlbHNlCisJCSAgICAgIHJldHVybihjbWZsZ3MgPSAtMSk7CisK KwkJICBjYXNlIExERUw6CQkvKiBeVSwgbGluZSBkZWxldGlvbiAqLworCQkgICAgd2hpbGUgKChi cC0tKSA+IGNtZGJ1ZikgeworCQkJY21kY2hhcmRlbCgpOworCQkJKmJwID0gTlVMOworCQkgICAg fQorCQkgICAgY21yZXMoKTsJCS8qIFJlc3RhcnQgdGhlIGNvbW1hbmQuICovCisJCSAgICAqYnAg PSAqYXRtYnVmID0gTlVMOworCQkgICAgaW53b3JkID0gMDsKKwkJICAgIHJldHVybihjbWZsZ3Mg PSAtMSk7CisKKwkJICBjYXNlIFdERUw6CQkvKiBeVywgd29yZCBkZWxldGlvbiAqLworCQkgICAg aWYgKGJwIDw9IGNtZGJ1ZikgewkvKiBCZWVwIGlmIG5vdGhpbmcgdG8gZGVsZXRlICovCisJCQli bGVlcChCUF9XQVJOKTsKKwkJCWNtcmVzKCk7CisJCQkqYnAgPSAqYXRtYnVmID0gTlVMOworCQkJ cmV0dXJuKGNtZmxncyA9IC0xKTsKKwkJICAgIH0KKwkJICAgIGJwLS07CisJCSAgICAvKiBCYWNr IHVwIG92ZXIgYW55IHRyYWlsaW5nIG5vbmFscGhhbnVtcyAqLworCQkgICAgLyogVGhpcyBpcyBk ZXBlbmRlbnQgb24gQVNDSUkgY29sbGF0aW5nIHNlcXVlbmNlICovCisJCSAgICAvKiBidXQgaXNh bHBoYW51bSgpIGlzIG5vdCBhdmFpbGFibGUgZXZlcnl3aGVyZS4gKi8KKwkJICAgIGZvciAoIDsK KwkJCSAoYnAgPj0gY21kYnVmKSAmJgorCQkJICgoKmJwIDwgJzAnKSB8fAorCQkJICgoKmJwID4g JzknKSAmJiAoKmJwIDwgJ0AnKSkgfHwKKwkJCSAoKCpicCA+ICdaJykgJiYgKCpicCA8ICdhJykp IHx8CisJCQkgKCpicCA+ICd6JykpOworCQkJIGJwLS0KKwkJCSApIHsKKwkJCWNtZGNoYXJkZWwo KTsKKwkJCSpicCA9IE5VTDsKKwkJICAgIH0KKwkJICAgIC8qIE5vdyBkZWxldGUgYmFjayB0byBy aWdodG1vc3QgcmVtYWluaW5nIG5vbmFscGhhbnVtICovCisJCSAgICBmb3IgKCA7IChicCA+PSBj bWRidWYpICYmICgqYnApIDsgYnAtLSkgeworCQkJaWYgKCgqYnAgPCAnMCcpIHx8CisJCQkgICAg KCpicCA+ICc5JyAmJiAqYnAgPCAnQCcpIHx8CisJCQkgICAgKCpicCA+ICdaJyAmJiAqYnAgPCAn YScpIHx8CisJCQkgICAgKCpicCA+ICd6JykpCisJCQkgIGJyZWFrOworCQkJY21kY2hhcmRlbCgp OworCQkJKmJwID0gTlVMOworCQkgICAgfQorCQkgICAgYnArKzsKKwkJICAgIGlud29yZCA9IDA7 CisJCSAgICByZXR1cm4oY21mbGdzID0gLTEpOworCisJCSAgY2FzZSBSRElTOiB7CQkvKiBeUiwg cmVkaXNwbGF5ICovCisJCSAgICAgIGNoYXIgKmNweDsgY2hhciBjeDsKKwkJICAgICAgKmJwID0g TlVMOworCQkgICAgICBwcmludGYoIlxuJXMiLGNtcHJvbSk7CisJCSAgICAgIGNweCA9IGNtZGJ1 ZjsKKwkJICAgICAgd2hpbGUgKChjeCA9ICpjcHgrKykpIHsKKwkJCSAgY21kZWNobyhjeCwwKTsK KwkJICAgICAgfQorCQkgICAgICBmZmx1c2goc3Rkb3V0KTsKKwkJICAgICAgY29udGludWU7CisJ CSAgfQorI2lmbmRlZiBOT0xBU1RGSUxFCisJCSAgY2FzZSBWVDoKKwkJICAgIGlmIChsYXN0Zmls ZSkgeworCQkJcHJpbnRmKCIlcyAiLGxhc3RmaWxlKTsKKyNpZmRlZiBHRU1ET1MKKwkJCWZmbHVz aChzdGRvdXQpOworI2VuZGlmIC8qIEdFTURPUyAqLworCQkJaW53b3JkID0gY21mbGdzID0gMDsK KwkJCWFkZGJ1ZihsYXN0ZmlsZSk7CS8qIFN1cHBseSBkZWZhdWx0LiAqLworCQkJaWYgKHNldGF0 bShsYXN0ZmlsZSwwKSA8IDApIHsKKwkJCSAgICBwcmludGYoIkxhc3QgbmFtZSB0b28gbG9uZ1xu Iik7CisJCQkgICAgaWYgKG5wKSBmcmVlKG5wKTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQor CQkgICAgfSBlbHNlIHsJCS8qIE5vIGRlZmF1bHQgKi8KKwkJCWJsZWVwKEJQX1dBUk4pOworCQkg ICAgfQorCQkgICAgcmV0dXJuKDApOworI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KKwkJfQorCisj aWZkZWYgQ0tfUkVDQUxMCisJCWlmIChvbl9yZWNhbGwgJiYJLyogUmVhZGluZyBjb21tYW5kcyBm cm9tIGtleWJvYXJkPyAqLworCQkgICAgKGNtX3JlY2FsbCA+IDApICYmCS8qIFNhdmluZyBjb21t YW5kcz8gKi8KKwkJICAgIChjID09IENfVVAgfHwgYyA9PSBDX1VQMikpIHsgLyogR28gdXAgb25l ICovCisJCSAgICBpZiAobGFzdF9yZWNhbGwgPT0gMiAmJiBjdXJyZW50ID4gMCkKKwkJICAgICAg Y3VycmVudC0tOworCQkgICAgaWYgKGN1cnJlbnQgPCAwKSB7CS8qIE5vd2hlcmUgdG8gZ28sICov CisJCQlibGVlcChCUF9XQVJOKTsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQkgICAgaWYgKHJl Y2FsbFtjdXJyZW50XSkgeyAvKiBXZSBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCAqLworCQkJd2hp bGUgKChicC0tKSA+IGNtZGJ1ZikgeyAvKiBFcmFzZSBjdXJyZW50IGxpbmUgKi8KKwkJCSAgICBj bWRjaGFyZGVsKCk7CisJCQkgICAgKmJwID0gTlVMOworCQkJfQorCQkJY2tzdHJuY3B5KGNtZGJ1 ZixyZWNhbGxbY3VycmVudF0sQ01EQkwpOworI2lmZGVmIE9TSworCQkJZmZsdXNoKHN0ZG91dCk7 CisJCQl3cml0ZShmaWxlbm8oc3Rkb3V0KSwgIlxyIiwgMSk7CisJCQlwcmludGYoIiVzJXMiLGNt cHJvbSxjbWRidWYpOworI2Vsc2UKKwkJCXByaW50ZigiXHIlcyVzIixjbXByb20sY21kYnVmKTsK KyNlbmRpZiAvKiBPU0sgKi8KKwkJCWN1cnJlbnQtLTsKKwkJICAgIH0KKwkJICAgIGxhc3RfcmVj YWxsID0gMTsKKwkJICAgIHJldHVybihjbWZsZ3MgPSAtMSk7IC8qIEZvcmNlIGEgcmVwYXJzZSAq LworCQl9CisJCWlmIChvbl9yZWNhbGwgJiYJLyogUmVhZGluZyBjb21tYW5kcyBmcm9tIGtleWJv YXJkPyAqLworCQkgICAgKGNtX3JlY2FsbCA+IDApICYmCS8qIFNhdmluZyBjb21tYW5kcz8gKi8K KwkJICAgIChjID09IENfRE4pKSB7CS8qIERvd24gb25lICovCisJCSAgICBpbnQgeCA9IDE7CisJ CSAgICBpZiAobGFzdF9yZWNhbGwgPT0gMSkKKwkJICAgICAgeCsrOworCQkgICAgaWYgKGN1cnJl bnQgKyB4ID4gcmxhc3QpIHsgLyogQWxyZWFkeSBhdCBib3R0b20sIGJlZXAgKi8KKwkJCWJsZWVw KEJQX1dBUk4pOworCQkJY29udGludWU7CisJCSAgICB9CisJCSAgICBjdXJyZW50ICs9IHg7CS8q IE9LIHRvIGdvIGRvd24gKi8KKwkJICAgIGlmIChyZWNhbGxbY3VycmVudF0pIHsKKwkJCXdoaWxl ICgoYnAtLSkgPiBjbWRidWYpIHsgLyogRXJhc2UgY3VycmVudCBsaW5lICovCisJCQkgICAgY21k Y2hhcmRlbCgpOworCQkJICAgICpicCA9IE5VTDsKKwkJCX0KKwkJCWNrc3RybmNweShjbWRidWYs cmVjYWxsW2N1cnJlbnRdLENNREJMKTsKKyNpZmRlZiBPU0sKKwkJCWZmbHVzaChzdGRvdXQpOwor CQkJd3JpdGUoZmlsZW5vKHN0ZG91dCksICJcciIsIDEpOworCQkJcHJpbnRmKCIlcyVzIixjbXBy b20sY21kYnVmKTsKKyNlbHNlCisJCQlwcmludGYoIlxyJXMlcyIsY21wcm9tLGNtZGJ1Zik7Cisj ZW5kaWYgLyogT1NLICovCisJCQlsYXN0X3JlY2FsbCA9IDI7CisJCQlyZXR1cm4oY21mbGdzID0g LTEpOyAvKiBGb3JjZSByZXBhcnNlICovCisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBDS19SRUNB TEwgKi8KKwkgICAgfQorCisJICAgIGlmIChjIDwgU1AgJiYgcXVvdGUgPT0gMCkgeyAvKiBBbnkg b3RoZXIgdW5xdW90ZWQgY29udHJvbCBjaGFyICovCisJCWlmICghY2hzcmMpIHsJCS8qIElmIGNt ZCBmaWxlLCBwb2ludCBwYXN0IGl0ICovCisJCSAgICBicCsrOworCQl9IGVsc2UgeworCQkgICAg YmxlZXAoQlBfV0FSTik7CisJCX0KKwkJY29udGludWU7CQkvKiBjb250aW51ZSwgZG9uJ3QgcHV0 IGluIGJ1ZmZlciAqLworCSAgICB9CisJICAgIGxpbmViZWdpbiA9IDA7CQkvKiBOb3QgYXQgYmVn aW5uaW5nIG9mIGxpbmUgKi8KKyNpZmRlZiBCRUJPWAorCSAgICBpZiAoZWNob2YpIHsKKyAgICAg ICAgICAgICAgICBjbWRlY2hvKChjaGFyKSBjLCAwKTsJLyogRWNobyB3aGF0IHdhcyB0eXBlZC4g Ki8KKyAgICAgICAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7CisgICAgICAgICAgICAgICAgZmZs dXNoKHN0ZGVycik7CisgICAgICAgICAgICB9CisjZWxzZQorI2lmZGVmIE5PU1BMCisgICAgICAg ICAgICBpZiAoZWNob2YgfHwgY2hzcmMpCisjZWxzZQorICAgICAgICAgICAgaWYgKGVjaG9mIHx8 IChlY2hvc3RhcnMgJiYgY2hzcmMpKQorI2VuZGlmCS8qIE5PU1BMICovCisJICAgICAgY21kZWNo bygoY2hhcikgYywgMCk7CS8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisjZW5kaWYgLyogQkVC T1ggKi8KKyAgICAgICAgfSBlbHNlIHsJCQkvKiBUaGlzIGNoYXJhY3RlciB3YXMgcXVvdGVkLiAq LworCSAgICBpbnQgcWYgPSAxOworCSAgICBxdW90ZSA9IDA7CQkJLyogVW5zZXQgdGhlIHF1b3Rl IGZsYWcuICovCisJICAgIC8qIGRlYnVnKEYwMDAsImd0d29yZCBxdW90ZSAwIiwiIixjKTsgKi8K KwkgICAgLyogUXVvdGUgY2hhcmFjdGVyIGF0IHRoaXMgbGV2ZWwgaXMgb25seSBmb3IgU1AsID8s IGFuZCBjb250cm9scyAqLworICAgICAgICAgICAgLyogSWYgYW55dGhpbmcgZWxzZSB3YXMgcXVv dGVkLCBsZWF2ZSBxdW90ZSBpbiwgYW5kIGxldCAqLworCSAgICAvKiB0aGUgY29tbWFuZC1zcGVj aWZpYyBwYXJzaW5nIHJvdXRpbmVzIGhhbmRsZSBpdCwgZS5nLiBcMDA3ICovCisJICAgIGlmIChj ID4gMzIgJiYgYyAhPSAnPycgJiYgYyAhPSBSVUIgJiYgY2hzcmMgIT0gMCkgeworCQkvKiBkZWJ1 ZyhGMDAwLCJndHdvcmQgcXVvdGUgMSIsIiIsYyk7ICovCisJCSpicCsrID0gQ01EUTsJCS8qIERl cG9zaXQgXCBpZiBpdCBjYW1lIGZyb20gdHR5ICovCisJCXFmID0gMDsJCQkvKiBhbmQgZG9uJ3Qg ZXJhc2UgaXQgZnJvbSBzY3JlZW4gKi8KKwkJbGluZWJlZ2luID0gMDsJCS8qIE5vdCBhdCBiZWdp bm5pbmcgb2YgbGluZSAqLworI2lmZGVmIEJTX0RJUlNFUAorLyoKKyAgVGhpcyBpcyBhIGhhY2sg dG8gaGFuZGxlICJjZCBcIiBvciAiY2QgZm9vXCIgb24gT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1z LgorICBJZiB3ZSB3ZXJlIGNhbGxlZCBmcm9tIGNtZGlyKCkgYW5kIHRoZSBwcmV2aW91cyBjaGFy YWN0ZXIgd2FzIHRoZSBxdW90ZQorICBjaGFyYWN0ZXIsIGkuZS4gYmFja3NsYXNoLCBhbmQgdGhp cyBjaGFyYWN0ZXIgaXMgdGhlIGNvbW1hbmQgdGVybWluYXRvciwKKyAgdGhlbiB3ZSBzdHVmZiBh biBleHRyYSBiYWNrc2xhc2ggaW50byB0aGUgYnVmZmVyIHdpdGhvdXQgZWNob2luZywgdGhlbgor ICB3ZSBzdHVmZiB0aGUgY2FycmlhZ2UgcmV0dXJuIGJhY2sgaW4gYWdhaW4sIGFuZCBnbyBiYWNr IGFuZCBwcm9jZXNzIGl0LAorICB0aGlzIHRpbWUgd2l0aCB0aGUgcXVvdGUgZmxhZyBvZmYuCisq LworCSAgICB9IGVsc2UgaWYgKGRpcm5hbWZsZyAmJiAoYyA9PSBDUiB8fCBjID09IExGIHx8IGMg PT0gU1ApKSB7CisJCS8qIGRlYnVnKEYwMDAsImd0d29yZCBxdW90ZSAyIiwiIixjKTsgKi8KKwkJ KmJwKysgPSBDTURROworCQlsaW5lYmVnaW4gPSAwOwkJLyogTm90IGF0IGJlZ2lubmluZyBvZiBs aW5lICovCisJCSpicCA9IChjID09IFNQID8gU1AgOiBDUik7CisJCWdvdG8gQ01ESVJQQVJTRTsK KyNlbmRpZiAvKiBCU19ESVJTRVAgKi8KKwkgICAgfQorI2lmZGVmIEJFQk9YCisJICAgIGlmIChl Y2hvZikgeworICAgICAgICAgICAgICAgIGNtZGVjaG8oKGNoYXIpIGMsIHFmKTsJLyogRWNobyB3 aGF0IHdhcyB0eXBlZC4gKi8KKyAgICAgICAgICAgICAgICBmZmx1c2ggKHN0ZG91dCk7CisgICAg ICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgICAgICB9CisjZWxzZQorCSAgICBp ZiAoZWNob2YpIGNtZGVjaG8oKGNoYXIpIGMsIHFmKTsgLyogTm93IGVjaG8gcXVvdGVkIGNoYXJh Y3RlciAqLworI2VuZGlmIC8qIEJFQk9YICovCisJICAgIC8qIGRlYnVnKEYxMTEsImd0d29yZCBx dW90ZSIsY21kYnVmLGMpOyAqLworCX0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmIChlY2hv ZikgY21kZWNobygoY2hhcikgYyxxdW90ZSk7IC8qIEVjaG8gd2hhdCB3YXMgdHlwZWQuICovCisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBpZiAoIWNvbW1lbnQpIGlud29yZCA9IDE7CS8q IEZsYWcgd2UncmUgaW4gYSB3b3JkLiAqLworCWlmIChxdW90ZSkgY29udGludWU7CQkvKiBEb24n dCBkZXBvc2l0IHF1b3RlIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgaWYgKGMgIT0gTkwpIHsJCQkv KiBEZXBvc2l0IGNvbW1hbmQgY2hhcmFjdGVyLiAqLworCSAgICAqYnArKyA9IChjaGFyKSBjOwkJ LyogYW5kIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIE5VTCAqLworI2lmZGVmIENPTU1FTlQKKwkgICAg KmJwID0gTlVMOwkJCS8qIGFmdGVyIGl0ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0KKyAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgYmlnIHdoaWxl ICovCisgICAgYmxlZXAoQlBfV0FSTik7CisgICAgcHJpbnRmKCI/Q29tbWFuZCB0b28gbG9uZywg bWF4aW11bSBsZW5ndGg6ICVkLlxuIixDTURCTCk7CisgICAgY21mbGdzID0gLTI7CisgICAgcmV0 dXJuKC05KTsKK30KKworLyogVXRpbGl0eSBmdW5jdGlvbnMgKi8KKworLyogQSBEIEQgQiBVIEYg IC0tIEFkZCB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgY3AgdG8gdGhlIGNvbW1hbmQgYnVmZmVy ICAqLworCitzdGF0aWMgaW50CithZGRidWYoY3ApIGNoYXIgKmNwOyB7CisgICAgaW50IGxlbiA9 IDA7CisgICAgd2hpbGUgKCgqY3AgIT0gTlVMKSAmJiAoYnAgPCBjbWRidWYrQ01EQkwpKSB7Cisg ICAgICAgICpicCsrID0gKmNwKys7ICAgICAgICAgICAgICAgICAgLyogQ29weSBhbmQgKi8KKyAg ICAgICAgbGVuKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCB0aGUgY2hhcmFj dGVycy4gKi8KKyAgICB9CisgICAgKmJwKysgPSBTUDsgICAgICAgICAgICAgICAgICAgICAgICAg LyogUHV0IGEgc3BhY2UgYXQgdGhlIGVuZCAqLworICAgICpicCA9IE5VTDsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSB3aXRoIGEgbnVsbCAqLworICAgIG5wID0gYnA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgbmV4dC1maWVsZCBwb2ludGVy ICovCisgICAgY21icHRyID0gbnA7CisgICAgcmV0dXJuKGxlbik7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmV0dXJuIHRoZSBsZW5ndGggKi8KK30KKworLyogIFMgRSBUIEEgVCBNICAtLSAg RGVwb3NpdCBhIHRva2VuIGluIHRoZSBhdG9tIGJ1ZmZlci4gICovCisvKgorICBCcmVhayBvbiBz cGFjZSwgbmV3bGluZSwgY2FycmlhZ2UgcmV0dXJuLCBvciBOVUwuCisgIENhbGwgd2l0aDoKKyAg ICBjcCA9IFBvaW50ZXIgdG8gc3RyaW5nIHRvIGNvcHkgdG8gYXRvbSBidWZmZXIuCisgICAgZmNv ZGUgPSAwIG1lYW5zIGJyZWFrIG9uIHdoaXRlc3BhY2Ugb3IgRU9MLgorICAgIGZjb2RlID0gMSBt ZWFucyBkb24ndCBicmVhayBvbiBzcGFjZS4KKyAgICBmY29kZSA9IDIgbWVhbnMgYnJlYWsgb24g c3BhY2UsICc6Jywgb3IgJz0nLgorICAgIGZjb2RlID0gMyBtZWFucyBjb3B5IHRoZSB3aG9sZSBz dHJpbmcuCisgIE51bGwtdGVybWluYXRlIHRoZSByZXN1bHQuCisgIFJldHVybiBsZW5ndGggb2Yg dG9rZW4sIGFuZCBhbHNvIHNldCBnbG9iYWwgImNjIiB0byB0aGlzIGxlbmd0aC4KKyAgUmV0dXJu IC0xIGlmIHRva2VuIHdhcyB0b28gbG9uZy4KKyovCitzdGF0aWMgaW50CitzZXRhdG0oY3AsZmNv ZGUpIGNoYXIgKmNwOyBpbnQgZmNvZGU7IHsKKyAgICBjaGFyICphcCwgKnhwLCAqZHFwID0gTlVM TCwgbGJyYWNlLCByYnJhY2U7CisgICAgaW50IGJyYWNlbHZsID0gMCwgZHEgPSAwOworCisgICAg cmVnaXN0ZXIgY2hhciAqIHM7CisgICAgcmVnaXN0ZXIgaW50IG4gPSAwOworCisgICAgaWYgKGNt ZmxkZmxncyAmIDEpIHsJCS8qIEhhbmRsZSBncm91cGluZyAqLworCWxicmFjZSA9ICcoJzsKKwly YnJhY2UgPSAnKSc7CisgICAgfSBlbHNlIHsKKwlsYnJhY2UgPSAneyc7CisJcmJyYWNlID0gJ30n OworICAgIH0KKyAgICBjYyA9IDA7CQkJCS8qIENoYXJhY3RlciBjb3VudGVyICovCisgICAgYXAg PSBhdG1idWY7CQkJLyogQWRkcmVzcyBvZiBhdG9tIGJ1ZmZlciAqLworCisgICAgcyA9IGNwOwor CisgICAgd2hpbGUgKCpzKyspIG4rKzsJCQkvKiBTYXZlIGEgY2FsbCB0byBzdHJsZW4gKi8KKwor ICAgIGlmIChuID4gQVRNQkwpIHsKKwlwcmludGYoIj9Db21tYW5kIGJ1ZmZlciBvdmVyZmxvd1xu Iik7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgLyogZGVidWcoRjExMSwic2V0YXRtIixjcCxu KTsgKi8KKyAgICBpZiAoY3AgPT0gYXApIHsJCQkvKiBJbiBjYXNlIHNvdXJjZSBpcyBhdG9tIGJ1 ZmZlciAqLworCXhwID0gYXR5YnVmOwkJCS8qIG1ha2UgYSBjb3B5ICovCisjaWZkZWYgQ09NTUVO VAorCXN0cm5jcHkoeHAsYXAsQVRNQkwpOwkJLyogc28gd2UgY2FuIGNvcHkgaXQgYmFjaywgZWRp dGVkLiAqLworCWNwID0geHA7CisjZWxzZQorCXMgPSBhcDsKKwl3aGlsZSAoKCp4cCsrID0gKnMr KykpIDsJLyogV2UgYWxyZWFkeSBrbm93IGl0J3MgYmlnIGVub3VnaCAqLworCWNwID0geHAgPSBh dHlidWY7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICAqYXAgPSBOVUw7CQkJCS8q IFplcm8gdGhlIGF0b20gYnVmZmVyICovCisgICAgaWYgKGZjb2RlID09IDEpIHsJCQkvKiBUcmlt IHRyYWlsaW5nIGJsYW5rcyAqLworCXdoaWxlICgtLW4gPj0gMCAmJiBjcFtuXSA9PSBTUCkKKwkg IDsKKwljcFtuKzFdID0gTlVMOworICAgIH0KKyAgICB3aGlsZSAoKmNwID09IFNQKSB7CQkJLyog VHJpbSBsZWFkaW5nIHNwYWNlcyAqLworCWNwKys7CisJbi0tOworICAgIH0KKyAgICBpZiAoKmNw ID09ICciJykgewkJCS8qIFN0YXJ0cyB3aXRoIGRvdWJsZXF1b3RlPyAqLworCWRxID0gMTsKKwlk cXAgPSBjcDsKKyAgICB9CisgICAgd2hpbGUgKCpjcCkgeworICAgICAgICBpZiAoKmNwID09IGxi cmFjZSkKKwkgIGJyYWNlbHZsKys7CisgICAgICAgIGVsc2UgaWYgKCpjcCA9PSByYnJhY2UpCisJ ICBicmFjZWx2bC0tOworCWlmIChicmFjZWx2bCA8IDApCisJICBicmFjZWx2bCA9IDA7CisJaWYg KGJyYWNlbHZsID09IDApIHsKKwkgICAgaWYgKGRxKSB7CisJCWlmICgqY3AgPT0gU1AgfHwgKmNw ID09IEhUKSB7CisJCSAgICBpZiAoY3AgPiBkcXArMSkgeworCQkJaWYgKCooY3AtMSkgPT0gJyIn ICYmICooY3AtMikgIT0gQ01EUSkgeworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9 CisJICAgIH0gZWxzZSBpZiAoKCpjcCA9PSBTUCB8fCAqY3AgPT0gSFQpICYmIGZjb2RlICE9IDEg JiYgZmNvZGUgIT0gMykKKwkgICAgICBicmVhazsKKwkgICAgaWYgKChmY29kZSA9PSAyKSAmJiAo KmNwID09ICc9JyB8fCAqY3AgPT0gJzonKSkgYnJlYWs7CisJICAgIGlmICgoZmNvZGUgIT0gMykg JiYgKCpjcCA9PSBMRiB8fCAqY3AgPT0gQ1IpKSBicmVhazsKKwl9CisgICAgICAgICphcCsrID0g KmNwKys7CisgICAgICAgIGNjKys7CisgICAgfQorICAgICphcCA9IE5VTDsJCQkJLyogVGVybWlu YXRlIHRoZSBzdHJpbmcuICovCisgICAgLyogZGVidWcoRjExMSwic2V0YXRtIHJlc3VsdCIsYXRt YnVmLGNjKTsgKi8KKyAgICByZXR1cm4oY2MpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXR1cm4gbGVuZ3RoLiAqLworfQorCisvKgorICBUaGVzZSBmdW5jdGlvbnMgYXR0ZW1wdCB0byBo aWRlIHN5c3RlbSBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgbWFpbmxpbmUKKyAgY29kZSBpbiBndHdv cmQoKS4gIER1bW15IGFyZyBmb3IgY21kZ2V0YygpIG5lZWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3 aXRoCisgIGNvbmluYygpLCB0dGluYygpLCBldGMsIHNpbmNlIGEgcG9pbnRlciB0byB0aGlzIHJv dXRpbmUgY2FuIGJlIHBhc3NlZCBpbgorICBwbGFjZSBvZiB0aG9zZSB0byB0bl9kb29wKCkuCisK KyAgTm8gbG9uZ2VyIHN0YXRpYy4gIFVzZWQgYnkgYXNrbW9yZSgpLiAgRnJpIEF1ZyAyMCAxNTow MzozNCAxOTk5LgorKi8KKyNkZWZpbmUgQ01EX0NPTklOQwkJCS8qIEhvdyB3ZSBnZXQga2V5Ym9h cmQgY2hhcnMgKi8KKworaW50CitjbWRnZXRjKHRpbWVsaW1pdCkgaW50IHRpbWVsaW1pdDsgewkv KiBHZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgdHR5LiAqLworICAgIGludCBjOworI2lmZGVmIElL U0QKKyAgICBleHRlcm4gaW50IGluc2VydmVyOworI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBD S19MT0dJTgorICAgIGV4dGVybiBpbnQgeF9sb2dnZWQ7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8K KyNpZmRlZiBUTkNPREUKKyAgICBzdGF0aWMgaW50IGdvdF9jciA9IDA7CisgICAgZXh0ZXJuIGlu dCBja3hlY2g7CisgICAgaW50IHR4ID0gMCwgaXNfdG4gPSAwOworI2VuZGlmIC8qIFROQ09ERSAq LworCisgICAgaWYgKHB1c2hjCisjaWZuZGVmIE5PU1BMCisJJiYgIWFza2ZsYWcKKyNlbmRpZiAv KiBOT1NQTCAqLworCSkgeworICAgICAgICBkZWJ1ZyhGMTExLCJjbWRnZXRjKCkiLCJwdXNoYyIs cHVzaGMpOworCWMgPSBwdXNoYzsKKwlwdXNoYyA9IE5VTDsKKwlpZiAoeGNtZmRiICYmIGMgPT0g Jz8nKQkJLyogRG9uJ3QgZWNobyA/IHR3aWNlIGlmIGNoYWluaW5nLiAqLworCSAgY21kY2hhcmRl bCgpOworCXJldHVybihjKTsKKyAgICB9CisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICB7CisJY2hh ciBjaDsKKwljID0gZGduY2luYigwLCZjaCwxKTsJCS8qIC0xIGlzIEVPRiwgLTIgVE8sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLWMgaXMgQU9TL1ZTIGVycm9y ICovCisJaWYgKGMgPT0gLTIpIHsJCQkvKiB0aW1lb3V0IHdhcyBlbmFibGVkPyAqLworCSAgICBy ZXN0byhjaGFubmVsKDApKTsJCS8qIHJlc2V0IHRpbWVvdXRzICovCisJICAgIGMgPSBkZ25jaW5i KDAsJmNoLDEpOwkvKiByZXRyeSB0aGlzIG5vdyEgKi8KKwl9CisJaWYgKGMgPCAwKSByZXR1cm4o LTQpOwkJLyogRU9GIG9yIHNvbWUgZXJyb3IgKi8KKwllbHNlIGMgPSAoaW50KSBjaCAmIDAxNzc7 CS8qIEdldCBjaGFyIHdpdGhvdXQgcGFyaXR5ICovCisvKgllY2hvZiA9IDE7ICovCisgICAgfQor I2Vsc2UgLyogTm90IGRhdGFnZW5lcmFsICovCisjaWZuZGVmIE1JTklYMgorICAgIGlmICgKKyNp ZmRlZiBJS1NECisJKCFsb2NhbCAmJiBpbnNlcnZlcikgfHwKKyNlbmRpZiAvKiBJS1NEICovCisJ dGltZWxpbWl0ID4gMCkgeworI2lmZGVmIFROQ09ERQorICAgICAgICAgIEdFVE5FWFRDSDoKKyAg ICAgICAgICAgIGlzX3RuID0gIXB1c2hjICYmICFsb2NhbCAmJiBzc3RlbG5ldDsKKyNlbmRpZiAv KiBUTkNPREUgKi8KKyNpZmRlZiBDT01NRU5UCisJICAgIGMgPSBjb25pbmModGltZWxpbWl0ID4g MCA/IDEgOiAwKTsKKyNlbHNlIC8qIENPTU1FTlQgKi8KKwkgICAgLyogVGhpcyBpcyBsaWtlbHkg dG8gYnJlYWsgdGhlIGFza3RpbWVvdXQuLi4gKi8KKwkgICAgYyA9IGNvbmluYyh0aW1lbGltaXQp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgLyogZGVidWcoRjEwMSwiY21kZ2V0YyBjb25p bmMiLCIiLGMpOyAqLworI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgaWYgKGMgPj0gMCAmJiBp c190bikgewkvKiBTZXJ2ZXItc2lkZSBUZWxuZXQgKi8KKyAgICAgICAgICAgICAgICBzd2l0Y2gg KGMpIHsKKwkJICBjYXNlIElBQzoKKyAgICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjExMSwi Z3R3b3JkIElBQyIsImMiLGMpOyAqLworICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOwor ICAgICAgICAgICAgICAgICAgICBpZiAoKHR4ID0gdG5fZG9vcCgoQ0hBUikoYyAmIDB4ZmYpLGNr eGVjaCxjb25pbmMpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5F WFRDSDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eCA8PSAtMSkgeyAvKiBJL08g ZXJyb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIHdhcyBhIGZhdGFs IEkvTyBlcnJvciB0aGVuIHR0Y2xvcygpICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAv KiBoYXMgYmVlbiBjYWxsZWQgYW5kIHRoZSBuZXh0IEdFVE5FWFRDSCBhdHRlbXB0ICAqLworICAg ICAgICAgICAgICAgICAgICAgICAgLyogd2lsbCBiZSAhaXNfdG4gc2luY2UgdHRjbG9zKCkgc2V0 cyBzc3RlbG5ldCA9IDAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJ VCwtMSk7IC8qIChvciByZXR1cm4oLTQpPyAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKHR4ID09IDEpIHsgLyogRUNITyBjaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IGNreGVjaCA9IGRweCA9IDE7IC8qIEdldCBuZXh0IGNoYXIgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gR0VUTkVYVENIOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4 ID09IDIpIHsgLyogRUNITyBjaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNreGVj aCA9IGRweCA9IDA7IC8qIEdldCBuZXh0IGNoYXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gR0VUTkVYVENIOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR4ID09IDMp IHsgLyogUXVvdGVkIElBQyAqLworICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDI1NTsJLyog cHJvY2VlZWQgd2l0aCBpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgfQorI2lmZGVmIElLU19P UFRJT04KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNCkgewkvKiBJS1MgU3Rh dGUgQ2hhbmdlICovCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKKyAg ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAodHggPT0gNikgewkvKiBSZW1vdGUgTG9nb3V0ICovCisJCQlkb2V4 aXQoR09PRF9FWElULDApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkJZ290byBH RVRORVhUQ0g7CS8qIFVua25vd24sIGdldCBuZXh0IGNoYXIgKi8KKwkJICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAgY2Fz ZSBDUjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSkg eworCQkJaWYgKGdvdF9jcikgeworCQkJICAgIC8qIFRoaXMgbWVhbnMgdGhlIHNlbmRlciBpcyB2 aW9sYXRpbmcgVGVsbmV0ICAgKi8KKwkJCSAgICAvKiBwcm90b2NvbCBiZWNhdXNlIHdlIHJlY2Vp dmVkIHR3byBDUnMgaW4gYSAgICovCisJCQkgICAgLyogcm93IHdpdGhvdXQgZ2V0dGluZyBlaXRo ZXIgTEYgb3IgTlVMLiAgICAgICAqLworCQkJICAgIC8qIFRoaXMgd2lsbCBub3Qgc29sdmUgdGhl IHByb2JsZW0gYnV0IGl0ICAgICAgKi8KKwkJCSAgICAvKiB3aWxsIGF0IGxlYXN0IGFsbG93IHR3 byBDUnMgdG8gZG8gc29tZXRoaW5nICovCisJCQkgICAgLyogd2hlcmVhcyBiZWZvcmUgdGhlIHVz ZXIgd291bGQgaGF2ZSB0byBndWVzcyAqLworCQkJICAgIC8qIHRvIHNlbmQgTEYgb3IgTlVMIGFm dGVyIHRoZSBDUi4gICAgICAgICAgICAgKi8KKwkJCSAgICBkZWJ1ZyhGMTAwLCJndHdvcmQgQ1Ig dGVsbmV0IGVycm9yIiwiIiwwKTsKKwkJCSAgICBjID0gTEY7CisJCQl9IGVsc2UgeworCQkJICAg IGRlYnVnKEYxMDAsImd0d29yZCBza2lwcGluZyBDUiIsIiIsMCk7CisJCQkgICAgZ290X2NyID0g MTsJLyogUmVtZW1iZXIgYSBDUiB3YXMgcmVjZWl2ZWQgKi8KKwkJCSAgICBnb3RvIEdFVE5FWFRD SDsKKwkJCX0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkJCWRlYnVnKEYxMDAsImd0 d29yZCBDUiB0byBMRiIsIiIsMCk7CisJCQljID0gTEY7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIExGOgor ICAgICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7CisJCQln b3RfY3IgPSAwOworCQkJZGVidWcoRjEwMCwiZ3R3b3JkIExGIiwiIiwwKTsKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKwkJCWlmIChnb3RfY3IpIHsKKwkJCSAgICBnb3RfY3IgPSAwOwor CQkJICAgIGRlYnVnKEYxMDAsImd0d29yZCBza2lwcGluZyBMRiIsIiIsMCk7CisJCQkgICAgZ290 byBHRVRORVhUQ0g7CisJCQl9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIE5VTDoKKyAgICAgICAgICAgICAg ICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSAmJiBnb3RfY3IpIHsKKwkJCWMgPSBM RjsKKwkJCWRlYnVnKEYxMDAsImd0d29yZCBOVUwgdG8gTEYiLCIiLDApOworICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgeworCQkJZGVidWcoRjEwMCwiZ3R3b3JkIE5VTCIsIiIsMCk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisjZWxzZSAvKiBDT01NRU5UICovCisgICAgICAgICAgICAg ICAgICBjYXNlIENSOgorICAgICAgICAgICAgICAgICAgICBpZiAoICFURUxPUFRfVShURUxPUFRf QklOQVJZKSAmJiBnb3RfY3IgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIG1l YW5zIHRoZSBzZW5kZXIgaXMgdmlvbGF0aW5nIFRlbG5ldCAgICovCisgICAgICAgICAgICAgICAg ICAgICAgICAvKiBwcm90b2NvbCBiZWNhdXNlIHdlIHJlY2VpdmVkIHR3byBDUnMgaW4gYSAgICov CisgICAgICAgICAgICAgICAgICAgICAgICAvKiByb3cgd2l0aG91dCBnZXR0aW5nIGVpdGhlciBM RiBvciBOVUwuICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwg bm90IHNvbHZlIHRoZSBwcm9ibGVtIGJ1dCBpdCAgICAgICovCisgICAgICAgICAgICAgICAgICAg ICAgICAvKiB3aWxsIGF0IGxlYXN0IGFsbG93IHR3byBDUnMgdG8gZG8gc29tZXRoaW5nICovCisg ICAgICAgICAgICAgICAgICAgICAgICAvKiB3aGVyZWFzIGJlZm9yZSB0aGUgdXNlciB3b3VsZCBo YXZlIHRvIGd1ZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBzZW5kIExGIG9y IE5VTCBhZnRlciB0aGUgQ1IuICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJndHdvcmQgQ1IgdGVsbmV0IGVycm9yIiwiIiwwKTsKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9jciA9IDE7CS8q IFJlbWVtYmVyIGEgQ1Igd2FzIHJlY2VpdmVkICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjEwMCwiZ3R3b3JkIENSIHRvIExGIiwiIiwwKTsg Ki8KKyAgICAgICAgICAgICAgICAgICAgYyA9IExGOworCQkgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICBjYXNlIExGOgorICAgICAgICAgICAgICAgICAgICBpZiAoZ290X2NyKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAg LyogZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIExGIiwiIiwwKTsgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIGdvdG8gR0VUTkVYVENIOworICAgICAgICAgICAgICAgICAgICB9CisJCSAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgTlVMOgorICAgICAgICAgICAgICAgICAg ICBpZiAoZ290X2NyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RfY3IgPSAwOworICAg ICAgICAgICAgICAgICAgICAgICAgLyogZGVidWcoRjEwMCwiZ3R3b3JkIHNraXBwaW5nIE5VTCIs IiIsMCk7ICovCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEdFVE5FWFRDSDsKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgICAgZGVidWcoRjEwMCwiZ3R3b3JkIE5VTCIsIiIsMCk7CisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBJS1NECisJCSAgY2FzZSBFVFg6CQkvKiBDdHJsLUMu Li4gKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgRU9UOgkJLyogRU9UID0gRU9GICovCisgICAg ICAgICAgICAgICAgICAgICAgaWYgKGluc2VydmVyCisjaWZkZWYgQ0tfTE9HSU4KKwkJCSAgJiYg IXhfbG9nZ2VkCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKwkJCSAgKQorICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oLTQpOworCQkgICAgYnJlYWs7CisjZW5kaWYgLyogSUtTRCAqLwor CQkgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLyogVE5DT0RFICovCisgICAgfSBlbHNl IHsKKyNpZmRlZiBPUzIKKwljID0gY29uaW5jKDApOworI2Vsc2UgLyogT1MyICovCisjaWZkZWYg Q01EX0NPTklOQworI3VuZGVmIENNRF9DT05JTkMKKyNlbmRpZiAvKiBDTURfQ09OSU5DICovCisJ YyA9IGdldGNoYXIoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisjZWxzZSAgLyogTUlOSVgy ICovCisjdW5kZWYgZ2V0YworI2lmZGVmIENNRF9DT05JTkMKKyN1bmRlZiBDTURfQ09OSU5DCisj ZW5kaWYgLyogQ01EX0NPTklOQyAqLworICAgIGMgPSBnZXRjKHN0ZGluKTsKKyAgICAvKiBkZWJ1 ZyhGMTAxLCJjbWRnZXRjIGdldGMiLCIiLGMpOyAqLworI2VuZGlmIC8qIE1JTklYMiAqLworI2lm ZGVmIFJUVQorICAgIGlmIChydHVfYnVnKSB7CisjaWZkZWYgQ01EX0NPTklOQworI3VuZGVmIENN RF9DT05JTkMKKyNlbmRpZiAvKiBDTURfQ09OSU5DICovCisJYyA9IGdldGNoYXIoKTsJCQkvKiBS VFUgZG9lc24ndCBkaXNjYXJkIHRoZSBeWiAqLworCXJ0dV9idWcgPSAwOworICAgIH0KKyNlbmRp ZiAvKiBSVFUgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgIHJldHVybihjKTsJCQkJ LyogUmV0dXJuIHdoYXQgd2UgZ290ICovCit9CisKKy8qICNpZmRlZiBVU0VfQVJST1dLRVlTICov CisKKy8qIE1lY2hhbmlzbSB0byB1c2UgZm9yIHBlZWtpbmcgaW50byBzdGRpbiBidWZmZXIgKi8K KworI2lmbmRlZiBVU0VfRklMRV9DTlQJCQkvKiBzdGRpbi0+X19jbnQgKi8KKyNpZm5kZWYgVVNF X0ZJTEVfX0NOVAkJCS8qIE5vdGU6IHR3byB1bmRlcnNjb3JlcyAqLworI2lmZGVmIEhQVVgJCQkJ LyogSFBVWCA3LTExICovCisjaWZuZGVmIEhQVVg1CisjaWZuZGVmIEhQVVg2CisjZGVmaW5lIFVT RV9GSUxFX19DTlQKKyNlbmRpZiAvKiBIUFVYNiAqLworI2VuZGlmIC8qIEhQVVg1ICovCisjZWxz ZQorI2lmZGVmIEFOWVNDTwkJCQkvKiBTQ08gVU5JWCwgT1NSNSwgVW5peHdhcmUsIGV0YyAqLwor I2lmbmRlZiBPTERfVU5JWFdBUkUJCQkvKiBCdXQgbm90IFVuaXh3YXJlIDEueCBvciAyLjAgKi8K KyNpZm5kZWYgVU5JWFdBUkUyCQkJLyogb3IgMi4xLjAgKi8KKyNkZWZpbmUgVVNFX0ZJTEVfX0NO VAorI2VuZGlmIC8qIFVOSVhXQVJFMiAqLworI2VuZGlmIC8qIE9MRF9VTklYV0FSRSAqLworI2Vu ZGlmIC8qIEFOWVNDTyAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9f Q05UICovCisjZW5kaWYgLyogVVNFX0ZJTEVfQ05UICovCisKKyNpZm5kZWYgVVNFX0ZJTEVfUgkJ CS8qIHN0ZGluLT5fciAqLworI2lmbmRlZiBVU0VfRklMRV9DTlQKKyNpZm5kZWYgVVNFX0ZJTEVf X0NOVAorI2lmZGVmIEJTRDQ0CQkJCS8qIHtGcmVlLE9wZW4sTmV0fUJTRCwgQlNESSAqLworI2Rl ZmluZSBVU0VfRklMRV9SCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9f Q05UICovCisjZW5kaWYgLyogVVNFX0ZJTEVfQ05UICovCisjZW5kaWYgLyogVVNFX0ZJTEVfUiAq LworCisjaWZuZGVmIFVTRV9GSUxFX1IJCQkvKiBzdGRpbi0+X2NudCAqLworI2lmbmRlZiBVU0Vf RklMRV9DTlQKKyNpZm5kZWYgVVNFX0ZJTEVfX0NOVAorI2RlZmluZSBVU0VfRklMRV9DTlQJCQkv KiBFdmVyeWJvZHkgZWxzZSAoYnV0IExpbnV4KSAqLworI2VuZGlmIC8qIFVTRV9GSUxFX19DTlQg Ki8KKyNlbmRpZiAvKiBVU0VfRklMRV9DTlQgKi8KKyNlbmRpZiAvKiBVU0VfRklMRV9SICovCisK KworLyoKKyAgYyBtIGQgYyBvIG4gYyBoIGsKKworICBIb3cgbWFueSBjaGFyYWN0ZXJzIGFyZSB3 YWl0aW5nIHRvIGJlIHJlYWQgYXQgdGhlIGNvbnNvbGU/ICBOb3JtYWxseQorICBjb25jaGsoKSB3 b3VsZCB0ZWxsIHVzLCBidXQgaW4gVW5peCBhbmQgVk1TIGNtZGdldGMoKSB1c2VzIHN0ZGlvIGdl dGNoYXIoKSwKKyAgdGh1cyBieXBhc3NpbmcgY29uaW5jKCkvY29uY2hrKCksIHNvIHdlIGhhdmUg dG8gcGVlayBpbnRvIHRoZSBzdGRpbiBidWZmZXIsCisgIHdoaWNoIGlzIHRvdGFsbHkgbm9ucG9y dGFibGUuICBXaGljaCBpcyB3aHkgdGhpcyByb3V0aW5lIGlzLCBhdCBsZWFzdCBmb3IKKyAgbm93 LCB1c2VkIG9ubHkgZm9yIGNoZWNraW5nIGZvciBhcnJvdy1rZXkgc2VxdWVuY2VzIGZyb20gdGhl IGtleWJvYXJkIGFmdGVyCisgIGFuIEVTQyB3YXMgcmVhZC4gIFdvdWxkbid0IGl0IGJlIG5pY2Ug aWYgdGhlIHN0ZGlvIHBhY2thZ2UgaGFkIGEgZnVuY3Rpb24KKyAgdGhhdCByZXR1cm5lZCB0aGUg bnVtYmVyIG9mIGJ5dGVzIHdhaXRpbmcgdG8gYmUgcmVhZCBmcm9tIGl0cyBidWZmZXI/CisgIFJl dHVybnMgMCBvciBncmVhdGVyIGFsd2F5cy4KKyovCitpbnQKK2NtZGNvbmNoaygpIHsKKyAgICBp bnQgeCA9IDAsIHk7CisgICAgeSA9IHB1c2hjID8gMSA6IDA7CQkJLyogSGF2ZSBjb21tYW5kIGNo YXJhY3RlciBwdXNoZWQ/ICovCisjaWZkZWYgT1MyCisgICAgeCA9IGNvbmNoaygpOwkJCS8qIENo ZWNrIGRldmljZS1kcml2ZXIgYnVmZmVyICovCisgICAgaWYgKHggPCAwKSB4ID0gMDsKKyNlbHNl IC8qIE9TMiAqLworI2lmZGVmIENNRF9DT05JTkMJCQkvKiBTZWUgY21kZ2V0YygpICovCisgICAg eCA9IGNvbmNoaygpOwkJCS8qIENoZWNrIGRldmljZS1kcml2ZXIgYnVmZmVyICovCisgICAgaWYg KHggPCAwKSB4ID0gMDsKKyNlbHNlICAvKiBDTURfQ09OSU5DICovCisKKy8qIEhlcmUgd2UgbXVz dCBsb29rIGluc2lkZSB0aGUgc3RkaW4gYnVmZmVyIC0gaGlnaGx5IHBsYXRmb3JtIGRlcGVuZGVu dCAqLworCisjaWZkZWYgX0lPX2ZpbGVfZmxhZ3MJCQkvKiBMaW51eCAqLworICAgIHggPSAoaW50 KSAoKHN0ZGluLT5fSU9fcmVhZF9lbmQpIC0gKHN0ZGluLT5fSU9fcmVhZF9wdHIpKTsKKyAgICBk ZWJ1ZyhGMTAxLCJjbWRjb25jaGsgX0lPX2ZpbGVfZmxhZ3MiLCIiLHgpOworI2Vsc2UgIC8qIF9J T19maWxlX2ZsYWdzICovCisjaWZkZWYgVVNFX0ZJTEVfQ05UCQkJLyogVHJhZGl0aW9uYWwgKi8K KyNpZmRlZiBWTVMKKyAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgKCpzdGRpbiktPl9jbnQiLCIi LCgqc3RkaW4pLT5fY250KTsKKyAgICB4ID0gKCpzdGRpbiktPl9jbnQ7CisjZWxzZQorI2lmZGVm IE5PQVJST1dLRVlTCisgICAgZGVidWcoRjEwMSwiY21kY29uY2hrIE5PQVJST1dLRVlTIHgiLCIi LDApOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgc3RkaW4tPl9jbnQiLCIiLHN0 ZGluLT5fY250KTsKKyAgICB4ID0gc3RkaW4tPl9jbnQ7CisjZW5kaWYgLyogTk9BUlJPV0tFWVMg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBpZiAoeCA9PSAwKSB4ID0gY29uY2hrKCk7CisgICAg aWYgKHggPCAwKSB4ID0gMDsKKyNlbHNlICAvKiBVU0VfRklMRV9DTlQgKi8KKyNpZmRlZiBVU0Vf RklMRV9fQ05UCQkJLyogSFAtVVggKi8KKyAgICBkZWJ1ZyhGMTAxLCJjbWRjb25jaGsgc3RkaW4t Pl9fY250IiwiIixzdGRpbi0+X19jbnQpOworICAgIHggPSBzdGRpbi0+X19jbnQ7CisgICAgaWYg KHggPT0gMCkgeCA9IGNvbmNoaygpOworICAgIGlmICh4IDwgMCkgeCA9IDA7CisjZWxzZSAgLyog VVNFX0ZJTEVfQ05UICovCisjaWZkZWYgVVNFX0ZJTEVfUgkJCS8qIEZyZWVCU0QsIE9wZW5CU0Qs IGV0YyAqLworICAgIGRlYnVnKEYxMDEsImNtZGNvbmNoayBzdGRpbi0+X3IiLCIiLHN0ZGluLT5f cik7CisgICAgeCA9IHN0ZGluLT5fcjsKKyAgICBpZiAoeCA9PSAwKSB4ID0gY29uY2hrKCk7Cisg ICAgaWYgKHggPCAwKSB4ID0gMDsKKworICAgIC8qIEZpbGwgaW4gYW55IG90aGVycyBoZXJlLi4u ICovCisKKyNlbmRpZiAvKiBVU0VfRklMRV9SICovCisjZW5kaWYgLyogVVNFX0ZJTEVfX0NOVCAq LworI2VuZGlmIC8qIFVTRV9GSUxFX0NOVCAqLworI2VuZGlmIC8qIF9JT19maWxlX2ZsYWdzICov CisjZW5kaWYgLyogQ01EX0NPTklOQyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHJldHVybih4 ICsgeSk7Cit9CisvKiAjZW5kaWYgKi8gLyogVVNFX0FSUk9XS0VZUyAqLworCisKK3N0YXRpYyBW T0lECitjbWRjbHJzY24oKSB7CQkJCS8qIENsZWFyIHRoZSBzY3JlZW4gKi8KKyAgICBja19jbHMo KTsKK30KKworc3RhdGljIFZPSUQJCQkJLyogV2hhdCB0byBlY2hvIGF0IGVuZCBvZiBjb21tYW5k ICovCisjaWZkZWYgQ0tfQU5TSUMKK2NtZG5ld2woY2hhciBjKQorI2Vsc2UKK2NtZG5ld2woYykg Y2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBjbWRuZXdsICovIHsKKyNpZmRlZiBP UzIKKyNpZmRlZiBJS1NECisgICAgZXh0ZXJuIGludCBpbnNlcnZlcjsKKyAgICBpZiAoaW5zZXJ2 ZXIgJiYgYyA9PSBMRikKKyAgICAgIHB1dGNoYXIoQ1IpOworI2VuZGlmIC8qIElLU0QgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKworICAgIHB1dGNoYXIoYyk7CQkJCS8qIGMgaXMgdGhlIHRlcm1pbmF0 aW5nIGNoYXJhY3RlciAqLworCisjaWZkZWYgV0lOVENQCQkJCS8qIHdoYXQgaXMgdGhpcyBkb2lu ZyBoZXJlPyAqLworICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKKyNlbmRpZiAvKiBXSU5U Q1AgKi8KKworLyoKKyAgQS5BLiBDaGVybm92LCB3aG8gc2VudCBpbiBjaGFuZ2VzIGZvciBGcmVl QlNELCBzYWlkIHdlIGFsc28gbmVlZGVkIHRoaXMKKyAgZm9yIFNWT1JQT1NJWCBiZWNhdXNlICJz ZXR1cCB0ZXJtaW5hbCBieSB0ZXJtaW9zIGFuZCBjdXJzZXMgZG9lcworICBub3QgY29udmVydCBc ciB0byBcbiwgc28gYWRkaXRpb25hbCBcbiBuZWVkZWQgaW4gbmV3bGluZSBmdW5jdGlvbi4iICBC dXQKKyAgaXQgaXMgYWxzbyB2ZXJ5IGxpa2VseSB0byByZXN1bHQgaW4gdW53YW50ZWQgYmxhbmsg bGluZXMuCisqLworI2lmZGVmIEJTRDQ0CisgICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOwor I2VuZGlmIC8qIEJTRDQ0ICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogT1MyIG5vIGxvbmdl ciBuZWVkcyB0aGlzIGFzIGFsbCBDUiBhcmUgY29udmVydGVkIHRvIE5MIGluIGNvbmluYygpICov CisgICAgLyogVGhpcyBlbGltaW5hdGVzIHRoZSB1Z2x5IGV4dHJhIGJsYW5rIGxpbmVzIGRpc2N1 c3NlZCBhYm92ZS4gICAgICAgICovCisjaWZkZWYgT1MyCisgICAgaWYgKGMgPT0gQ1IpIHB1dGNo YXIoTkwpOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBh ZWdpcworICAgIGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKKyNlbmRpZiAvKiBhZWdpcyAqLwor I2lmZGVmIEFNSUdBCisgICAgaWYgKGMgPT0gQ1IpIHB1dGNoYXIoTkwpOworI2VuZGlmIC8qIEFN SUdBICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBpZiAoYyA9PSBDUikgcHV0Y2hhcihOTCk7 CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBHRU1ET1MKKyAgICBpZiAoYyA9PSBD UikgcHV0Y2hhcihOTCk7CisjZW5kaWYgLyogR0VNRE9TICovCisjaWZkZWYgU1RSQVRVUworICAg IGlmIChjID09IENSKSBwdXRjaGFyKE5MKTsKKyNlbmRpZiAvKiBTVFJBVFVTICovCit9CisKK3N0 YXRpYyBWT0lECitjbWRjaGFyZGVsKCkgewkJCQkvKiBFcmFzZSBhIGNoYXJhY3RlciBmcm9tIHRo ZSBzY3JlZW4gKi8KKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoIWVjaG9zdGFycykKKyNlbmRpZgkv KiBOT1NQTCAqLworICAgICAgaWYgKCFkcHgpIHJldHVybjsKKyNpZmRlZiBkYXRhZ2VuZXJhbAor ICAgIC8qIERHICdcYicgaXMgRU0gKF55IG9yIFwwMzEpICovCisgICAgaWYgKHRlcm10eXBlID09 IDEpCisgICAgICAvKiBFcmFzZSBhIGNoYXJhY3RlciBmcm9tIG5vbi1ERyBzY3JlZW4sICovCisg ICAgICBkZ25jb3ViKDEsIlwwMTAgXDAxMCIsMyk7CisgICAgZWxzZQorI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCisgICAgICBwcmludGYoIlxiIFxiIik7CisjaWZkZWYgR0VNRE9TCisgICAgZmZs dXNoKHN0ZG91dCk7CisjZWxzZQorI2lmZGVmIEJFQk9YCisgICAgZmZsdXNoKHN0ZG91dCk7Cisj ZW5kaWYgLyogQkVCT1ggKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KK30KKworc3RhdGljIFZPSUQK KyNpZmRlZiBDS19BTlNJQworY21kZWNobyhjaGFyIGMsIGludCBxdW90ZSkKKyNlbHNlCitjbWRl Y2hvKGMscXVvdGUpIGNoYXIgYzsgaW50IHF1b3RlOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7 IC8qIGNtZGVjaG8gKi8KKyNpZmRlZiBOT1NQTAorICAgIGlmICghZHB4KSByZXR1cm47CisjZWxz ZQorICAgIGlmICghZWNob3N0YXJzKSB7CisJaWYgKCFkcHgpIHJldHVybjsKKyAgICB9IGVsc2Ug eworCWMgPSAoY2hhcillY2hvc3RhcnM7CisgICAgfQorI2VuZGlmCS8qIE5PU1BMICovCisgICAg LyogRWNobyB0dHkgaW5wdXQgY2hhcmFjdGVyIGMgKi8KKyAgICBpZiAocXVvdGUpIHsKKwlwdXRj aGFyKEJTKTsKKwlwdXRjaGFyKFNQKTsKKwlwdXRjaGFyKEJTKTsKKyNpZmRlZiBpc3ByaW50CisJ cHV0Y2hhcigoQ0hBUikgKGlzcHJpbnQoYykgPyBjIDogJ14nICkpOworI2Vsc2UKKwlwdXRjaGFy KChDSEFSKSAoKGMgPj0gU1AgJiYgYyA8IERFTCkgPyBjIDogJ14nKSk7CisjZW5kaWYgLyogaXNw cmludCAqLworICAgIH0gZWxzZSB7CisJcHV0Y2hhcihjKTsKKyAgICB9CisjaWZkZWYgT1MyCisg ICAgaWYgKHF1b3RlPT0xICYmIGM9PUNSKSBwdXRjaGFyKChDSEFSKSBOTCk7CisjZW5kaWYgLyog T1MyICovCisgICAgaWYgKHRpbWVsaW1pdCkKKyAgICAgIGZmbHVzaChzdGRvdXQpOworfQorCisv KiBSZXR1cm4gcG9pbnRlciB0byBjdXJyZW50IHBvc2l0aW9uIGluIGNvbW1hbmQgYnVmZmVyLiAq LworCitjaGFyICoKK2NtcGVlaygpIHsKKyAgICByZXR1cm4obnApOworfQorI2VuZGlmIC8qIE5P SUNQICovCisKKworI2lmZGVmIE5PSUNQCisjaW5jbHVkZSAiY2tjZGViLmgiCisjaW5jbHVkZSAi Y2t1Y21kLmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCisjZW5kaWYgLyogTk9JQ1AgKi8KKworLyog IFggWCBFIFMgQyAgLS0gIEludGVycHJldHMgYmFja3NsYXNoIGNvZGVzICAqLworLyogIFJldHVy bnMgdGhlIGludCB2YWx1ZSBvZiB0aGUgYmFja3NsYXNoIGNvZGUgaWYgaXQgaXMgPiAtMSBhbmQg PCAyNTYgKi8KKy8qICBhbmQgdXBkYXRlcyB0aGUgc3RyaW5nIHBvaW50ZXIgdG8gZmlyc3QgY2hh cmFjdGVyIGFmdGVyIGJhY2tzbGFzaCBjb2RlLiAqLworLyogIElmIHRoZSBhcmd1bWVudCBpcyBp bnZhbGlkLCBsZWF2ZXMgcG9pbnRlciB1bmNoYW5nZWQgYW5kIHJldHVybnMgLTEuICovCisKK2lu dAoreHhlc2MocykgY2hhciAqKnM7IHsJCQkvKiBFeHBhbmQgYmFja3NsYXNoIGVzY2FwZXMgKi8K KyAgICBpbnQgeCwgeSwgYnJhY2UsIHJhZGl4OwkJLyogUmV0dXJucyB0aGUgaW50IHZhbHVlICov CisgICAgY2hhciBoZCA9ICc5JzsJCQkvKiBIaWdoZXN0IGRpZ2l0IGluIHJhZGl4ICovCisgICAg Y2hhciAqcDsKKworICAgIHAgPSAqczsJCQkJLyogcG9pbnRlciB0byBiZWdpbm5pbmcgKi8KKyAg ICBpZiAoIXApIHJldHVybigtMSk7CQkJLyogd2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXIgKi8K KyAgICB4ID0gKnArKzsJCQkJLyogY2hhcmFjdGVyIGF0IGJlZ2lubmluZyAqLworICAgIGlmICh4 ICE9IENNRFEpIHJldHVybigtMSk7CQkvKiBtYWtlIHN1cmUgaXQncyBhIGJhY2tzbGFzaCBjb2Rl ICovCisKKyAgICB4ID0gKnA7CQkJCS8qIGl0IGlzLCBnZXQgdGhlIG5leHQgY2hhcmFjdGVyICov CisgICAgaWYgKHggPT0gJ3snKSB7CQkJLyogYnJhY2tldGVkIHF1YW50aXR5PyAqLworCXArKzsJ CQkJLyogYmVnaW4gcGFzdCBicmFja2V0ICovCisJeCA9ICpwOworCWJyYWNlID0gMTsKKyAgICB9 IGVsc2UgYnJhY2UgPSAwOworICAgIHN3aXRjaCAoeCkgewkJCS8qIFN0YXJ0IGludGVycHJldGlu ZyAqLworICAgICAgY2FzZSAnZCc6CQkJCS8qIERlY2ltYWwgcmFkaXggaW5kaWNhdG9yICovCisg ICAgICBjYXNlICdEJzoKKwlwKys7CQkJCS8qIEp1c3QgcG9pbnQgcGFzdCBpdCBhbmQgZmFsbCB0 aHJ1ICovCisgICAgICBjYXNlICcwJzoJCQkJLyogU3RhcnRzIHdpdGggZGlnaXQgKi8KKyAgICAg IGNhc2UgJzEnOgorICAgICAgY2FzZSAnMic6ICBjYXNlICczJzogIGNhc2UgJzQnOiAgY2FzZSAn NSc6CisgICAgICBjYXNlICc2JzogIGNhc2UgJzcnOiAgY2FzZSAnOCc6ICBjYXNlICc5JzoKKwly YWRpeCA9IDEwOwkJCS8qIERlY2ltYWwgKi8KKwloZCA9ICc5JzsJCQkvKiBoaWdoZXN0IHZhbGlk IGRpZ2l0ICovCisJYnJlYWs7CisgICAgICBjYXNlICdvJzoJCQkJLyogU3RhcnRzIHdpdGggbyBv ciBPICovCisgICAgICBjYXNlICdPJzoKKwlyYWRpeCA9IDg7CQkJLyogT2N0YWwgKi8KKwloZCA9 ICc3JzsJCQkvKiBoaWdoZXN0IHZhbGlkIGRpZ2l0ICovCisJcCsrOwkJCQkvKiBwb2ludCBwYXN0 IHJhZGl4IGluZGljYXRvciAqLworCWJyZWFrOworICAgICAgY2FzZSAneCc6CQkJCS8qIFN0YXJ0 cyB3aXRoIHggb3IgWCAqLworICAgICAgY2FzZSAnWCc6CisJcmFkaXggPSAxNjsJCQkvKiBIZXhh ZGVjaW1hbCAqLworCXArKzsJCQkJLyogcG9pbnQgcGFzdCByYWRpeCBpbmRpY2F0b3IgKi8KKwli cmVhazsKKyAgICAgIGRlZmF1bHQ6CQkJCS8qIEFsbCBvdGhlcnMgKi8KKyNpZmRlZiBDT01NRU5U CisJKnMgPSBwKzE7CQkJLyogVHJlYXQgYXMgcXVvdGUgb2YgbmV4dCBjaGFyICovCisJcmV0dXJu KCpwKTsKKyNlbHNlCisJcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQor ICAgIC8qIEZvciBPUy8yLCB0aGVyZSBhcmUgIndpZGUiIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9y IHRoZSBrZXlib2FyZAorICAgICAqIGJpbmRpbmcsIGkuZSBcNjQ0IGFuZCBzaW1pbGFyIGNvZGVz IGxhcmdlciB0aGFuIDI1NSAoYnl0ZSkuCisgICAgICogRm9yIHRoaXMgcHVycG9zZSwgZ2l2ZSB1 cCBjaGVja2luZyBmb3IgPCAyNTYuIElmIHNvbWVvbmUgbWVhbnMKKyAgICAgKiBcMjY2IHNob3Vs ZCByZXN1bHQgaW4gXDI2IGZvbGxvd2VkIGJ5IGEgIjYiIGNoYXJhY3RlciwgaGUgc2hvdWxkCisg ICAgICogYWx3YXlzIHdyaXRlIFx7MjZ9NiBhbnl3YXkuICBOb3csIHJldHVybiBvbmx5IHRoZSBs b3dlciBieXRlIG9mCisgICAgICogdGhlIHJlc3VsdCwgaS5lLiAxMCwgYnV0IGVhdCB1cCB0aGUg d2hvbGUgXDI2NiBzZXF1ZW5jZSBhbmQKKyAgICAgKiBwdXQgdGhlIHdpZGUgcmVzdWx0IDI2NiBp bnRvIGEgZ2xvYmFsIHZhcmlhYmxlLiAgWWVzLCB0aGF0J3Mgbm90CisgICAgICogdGhlIG1vc3Qg YmVhdXRpZnVsIHByb2dyYW1taW5nIHN0eWxlIGJ1dCByZXF1aXJlcyB0aGUgbGVhc3QKKyAgICAg KiBhbW91bnQgb2YgY2hhbmdlcyB0byBvdGhlciByb3V0aW5lcy4KKyAgICAgKi8KKyAgICBpZiAo KnAgPT0gJ3snKSB7CQkJLyogU3VuIE1heSAxMSAyMDowMDo0MCAyMDAzICovCisJYnJhY2UgPSAx OwkJCS8qIEFsbG93IHt9IGFmdGVyIHJhZGl4IGluZGljYXRvciAqLworCXArKzsKKyAgICB9Cisg ICAgaWYgKHJhZGl4IDw9IDEwKSB7CQkJLyogTnVtYmVyIGluIHJhZGl4IDggb3IgMTAgKi8KKwlm b3IgKCB4ID0geSA9IDA7CisgCSAgICAgICgqcCkgJiYgKCpwID49ICcwJykgJiYgKCpwIDw9IGhk KQorI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICYmICh5IDwgNSkgJiYgKHgqcmFkaXgg PCBLTVNJWkUpOworICAgICAgICAgICAgICAvKiB0aGUgbWF4aW11bSBuZWVkZWQgdmFsdWUgXDgx OTYgaXMgNCBkaWdpdHMgbG9uZyAqLworICAgICAgICAgICAgICAvKiB3aGlsZSBhcyBvY3RhbCBp dCByZXF1aXJlcyBcMTM3NywgaS5lLiA1IGRpZ2l0cyAqLworI2Vsc2UKKyAgICAgICAgICAgICAg ICAgICAmJiAoeSA8IDMpICYmICh4KnJhZGl4IDwgMjU2KTsKKyNlbmRpZiAvKiBPUzIgKi8KKwkg ICAgICBwKysseSsrKSB7CisJICAgIHggPSB4ICogcmFkaXggKyAoaW50KSAqcCAtIDQ4OworCX0K KyNpZmRlZiBPUzIKKyAgICAgICAgd2lkZXJlc3VsdCA9IHg7CQkJLyogUmVtZW1iZXIgd2lkZSBy ZXN1bHQgKi8KKyAgICAgICAgeCAmPSAyNTU7CisjZW5kaWYgLyogT1MyICovCisJaWYgKHkgPT0g MCB8fCB4ID4gMjU1KSB7CS8qIE5vIHZhbGlkIGRpZ2l0cz8gKi8KKwkgICAgKnMgPSBwOwkJCS8q IHBvaW50IGFmdGVyIGl0ICovCisJICAgIHJldHVybigtMSk7CQkJLyogcmV0dXJuIGZhaWx1cmUu ICovCisJfQorICAgIH0gZWxzZSBpZiAocmFkaXggPT0gMTYpIHsJCS8qIFNwZWNpYWwgY2FzZSBm b3IgaGV4ICovCisJaWYgKCh4ID0gdW5oZXgoKnArKykpIDwgMCkgeyAqcyA9IHAgLSAxOyByZXR1 cm4oLTEpOyB9CisJaWYgKCh5ID0gdW5oZXgoKnArKykpIDwgMCkgeyAqcyA9IHAgLSAyOyByZXR1 cm4oLTEpOyB9CisJeCA9ICgoeCA8PCA0KSAmIDB4RjApIHwgKHkgJiAweDBGKTsKKyNpZmRlZiBP UzIKKyAgICAgICAgd2lkZXJlc3VsdCA9IHg7CisgICAgICAgIGlmICgoeSA9IHVuaGV4KCpwKSkg Pj0gMCkgeworICAgICAgICAgICBwKys7CisJICAgd2lkZXJlc3VsdCA9ICgoeCA8PCA0KSAmIDB4 RkYwKSB8ICh5ICYgMHgwRik7CisgICAgICAgICAgIHggPSB3aWRlcmVzdWx0ICYgMjU1OworICAg ICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgfSBlbHNlIHggPSAtMTsKKyAgICBpZiAoYnJh Y2UgJiYgKnAgPT0gJ30nICYmIHggPiAtMSkJLyogUG9pbnQgcGFzdCBjbG9zaW5nIGJyYWNlLCBp ZiBhbnkgKi8KKyAgICAgIHArKzsKKyAgICAqcyA9IHA7CQkJCS8qIFBvaW50IHRvIG5leHQgY2hh ciBhZnRlciBzZXF1ZW5jZSAqLworICAgIHJldHVybih4KTsJCQkJLyogUmV0dXJuIHZhbHVlIG9m IHNlcXVlbmNlICovCit9CisKK2ludAkJCQkJLyogQ29udmVydCBoZXggc3RyaW5nIHRvIGludCAq LworI2lmZGVmIENLX0FOU0lDCit1bmhleChjaGFyIHgpCisjZWxzZQordW5oZXgoeCkgY2hhciB4 OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB1bmhleCAqLyB7CisKKyAgICBpZiAoeCA+PSAn MCcgJiYgeCA8PSAnOScpCQkvKiAwLTkgaXMgb2Zmc2V0IGJ5IGhleCAzMCAqLworICAgICAgcmV0 dXJuKHggLSAweDMwKTsKKyAgICBlbHNlIGlmICh4ID49ICdBJyAmJiB4IDw9ICdGJykJLyogQS1G IG9mZnNldCBieSBoZXggMzcgKi8KKyAgICAgIHJldHVybih4IC0gMHgzNyk7CisgICAgZWxzZSBp ZiAoeCA+PSAnYScgJiYgeCA8PSAnZicpCS8qIGEtZiBvZmZzZXQgYnkgaGV4IDU3ICovCisgICAg ICByZXR1cm4oeCAtIDB4NTcpOwkJCS8qIChvYnZpb3VzbHkgQVNDSUkgZGVwZW5kZW50KSAqLwor ICAgIGVsc2UgcmV0dXJuKC0xKTsKK30KKworLyogIEwgTyBPIEsgVSBQICAtLSAgTG9va3VwIHRo ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGFycmF5IG9mIHN0cmluZ3MgICovCisKKy8qCisgIENhbGwg dGhpcyB3YXk6ICB2ID0gbG9va3VwKHRhYmxlLHdvcmQsbiwmeCk7CisKKyAgICB0YWJsZSAtIGEg J3N0cnVjdCBrZXl0YWInIHRhYmxlLgorICAgIHdvcmQgIC0gdGhlIHRhcmdldCBzdHJpbmcgdG8g bG9vayB1cCBpbiB0aGUgdGFibGUuCisgICAgbiAgICAgLSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz IGluIHRoZSB0YWJsZS4KKyAgICB4ICAgICAtIGFkZHJlc3Mgb2YgYW4gaW50ZWdlciBmb3IgcmV0 dXJuaW5nIHRoZSB0YWJsZSBhcnJheSBpbmRleCwKKwkgICAgb3IgTlVMTCBpZiB5b3UgZG9uJ3Qg bmVlZCBhIHRhYmxlIGluZGV4LgorCisgIFRoZSBrZXl3b3JkIHRhYmxlIG11c3QgYmUgYXJyYW5n ZWQgaW4gYXNjZW5kaW5nIGFscGhhYmV0aWNhbCBvcmRlcjsKKyAgYWxwaGFiZXRpYyBjYXNlIGRv ZXNuJ3QgbWF0dGVyIGJ1dCBsZXR0ZXJzIGFyZSB0cmVhdGVkIGFzIGxvd2VyY2FzZQorICBmb3Ig cHVycG9zZXMgb2Ygb3JkZXJpbmc7IHRodXMgIl4iIGFuZCAiXyIgY29tZSAqYmVmb3JlKiB0aGUg bGV0dGVycywKKyAgbm90IGFmdGVyIHRoZW0uCisKKyAgUmV0dXJucyB0aGUga2V5d29yZCdzIGFz c29jaWF0ZWQgdmFsdWUgKHplcm8gb3IgZ3JlYXRlcikgaWYgZm91bmQsCisgIHdpdGggdGhlIHZh cmlhYmxlIHggc2V0IHRvIHRoZSBrZXl3b3JkLXRhYmxlIGluZGV4LiAgSWYgaXMgbG9va3VwKCkK KyAgaXMgbm90IHN1Y2Nlc3NmdWwsIGl0IHJldHVybnM6CisKKyAgIC0zIGlmIG5vdGhpbmcgdG8g bG9vayB1cCAodGFyZ2V0IHdhcyBudWxsKSwKKyAgIC0yIGlmIGFtYmlndW91cywKKyAgIC0xIGlm IG5vdCBmb3VuZC4KKworICBBIG1hdGNoIGlzIHN1Y2Nlc3NmdWwgaWYgdGhlIHRhcmdldCBtYXRj aGVzIGEga2V5d29yZCBleGFjdGx5LCBvciBpZgorICB0aGUgdGFyZ2V0IGlzIGEgcHJlZml4IG9m IGV4YWN0bHkgb25lIGtleXdvcmQuICBJdCBpcyBhbWJpZ3VvdXMgaWYgdGhlCisgIHRhcmdldCBt YXRjaGVzIHR3byBvciBtb3JlIGtleXdvcmRzIGZyb20gdGhlIHRhYmxlLgorCisgIExvb2t1cCgp IGlzIHRoZSBjcml0aWNhbCByb3V0aW5lIGluIHNjcmlwdHMgYW5kIHNvIGlzIG9wdGltaXplZCB3 aXRoIGEKKyAgc2ltcGxlIHN0YXRpYyBjYWNoZSBwbHVzIHNvbWUgb3RoZXIgdHJpY2tzLiAgTWF5 YmUgaXQgY291bGQgYmUgaW1wcm92ZWQKKyAgZnVydGhlciB3aXRoIGJpbmFyeSBzZWFyY2ggb3Ig aGFzaCB0ZWNobmlxdWVzIGJ1dCBJIGRvdWJ0IGl0IHNpbmNlIG1vc3QKKyAga2V5d29yZCB0YWJs ZXMgYXJlIGZhaXJseSBzaG9ydC4KKyovCisKKyNpZmRlZiBVU0VfTFVDQUNIRQkJCS8qIExvb2t1 cCBjYWNoZSAqLworZXh0ZXJuIGludCBsdXNpemU7CQkJLyogKGluaXRpYWxpemVkIGluIGNrdXVz NS5jKSAqLworZXh0ZXJuIGNoYXIgKiBsdWNtZFtdOworZXh0ZXJuIGludCBsdXZhbFtdOworZXh0 ZXJuIGludCBsdWlkeFtdOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiBsdXRhYltdOworbG9uZyBs dWhpdHMgPSAwTDsKK2xvbmcgbHVjYWxscyA9IDBMOworbG9uZyB4eGhpdHMgPSAwTDsKK2xvbmcg bHVsb29wID0gMEw7CisjZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KKworaW50Citsb29rdXAodGFi bGUsY21kLG4seCkgY2hhciAqY21kOyBzdHJ1Y3Qga2V5dGFiIHRhYmxlW107IGludCBuLCAqeDsg eworCisgICAgcmVnaXN0ZXIgaW50IGksIG07CisgICAgaW50IHYsIGxlbiwgY21kbGVuID0gMDsK KyAgICBjaGFyIGMgPSBOVUwsIGMxLCAqczsKKworLyogR2V0IDFzdCBjaGFyIG9mIHNlYXJjaCBv YmplY3QsIGlmIGl0J3MgbnVsbCByZXR1cm4gLTMuICovCisKKyAgICBpZiAoIWNtZCB8fCBuIDwg MSkJCQkvKiBEZWZlbnNlIGRlIG51bGxhcmcgKi8KKyAgICAgIHJldHVybigtMyk7CisgICAgYzEg PSAqY21kOwkJCQkvKiBGaXJzdCBjaGFyYWN0ZXIgKi8KKyAgICBpZiAoIWMxKQkJCQkvKiBNYWtl IHN1cmUgdGhlcmUgaXMgb25lICovCisgICAgICByZXR1cm4oLTMpOworICAgIGlmIChpc3VwcGVy KGMxKSkJCQkvKiBJZiBsZXR0ZXIgbWFrZSBpdCBsb3dlcmNhc2UgKi8KKyAgICAgIGMxID0gdG9s b3dlcihjMSk7CisKKyNpZmRlZiBVU0VfTFVDQUNIRQkJCS8qIGxvb2t1cCgpIGNhY2hlICovCisg ICAgbSA9IGx1c2l6ZTsKKyAgICBsdWNhbGxzKys7CQkJCS8qIENvdW50IHRoaXMgbG9va3VwKCkg Y2FsbCAqLworICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHsJCS8qIExvb3AgdGhydSBjYWNo ZSAqLworCWlmICgqKGx1Y21kW2ldKSA9PSBjMSkgewkvKiBTYW1lIGFzIDFzdCBjaGFyIG9mIHNl YXJjaCBpdGVtPyAqLworCSAgICBpZiAobHV0YWJbaV0gPT0gdGFibGUpIHsJLyogWWVzIC0gc2Ft ZSB0YWJsZSB0b28/ICovCisJCWlmICghc3RyY21wKGNtZCxsdWNtZFtpXSkpIHsgLyogWWVzIC0g Y29tcGFyZSAqLworCQkgICAgaWYgKHgpICp4ID0gbHVpZHhbaV07ICAgIC8qIE1hdGNoIC0gcmV0 dXJuIGluZGV4ICovCisJCSAgICBsdWhpdHMrKzsgICAgICAgICAgICAgICAgLyogQ291bnQgY2Fj aGUgaGl0ICovCisJCSAgICByZXR1cm4obHV2YWxbaV0pOyAgICAgICAgLyogUmV0dXJuIGFzc29j aWF0ZWQgdmFsdWUgKi8KKwkJfQorCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBVU0VfTFVD QUNIRSAqLworCisvKiBOb3QgbnVsbCwgbm90IGluIGNhY2hlLCBsb29rIGl0IHVwICovCisKKyAg ICBzID0gY21kOworICAgIHdoaWxlICgqcysrKSBjbWRsZW4rKzsJCS8qIExlbmd0aCBvZiB0YXJn ZXQgKi8KKy8qCisgIFF1aWNrIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBsYXN0IHRhYmxlIGVudHJ5 IHdob3NlIGZpcnN0IGNoYXJhY3RlciBpcworICBsZXhpY2FsbHkgbGVzcyB0aGFuIHRoZSBmaXJz dCBjaGFyYWN0ZXIgb2YgdGhlIHNlYXJjaCBvYmplY3QuICBUaGlzIGlzCisgIHRoZSBzdGFydGlu ZyBwb2ludCBvZiB0aGUgbmV4dCBsb29wLCB3aGljaCBtdXN0IGdvIGluIHNlcXVlbmNlIHNpbmNl IGl0CisgIGNvbXBhcmVzIGFkamFjZW50IHRhYmxlIGVudHJpZXMuCisqLworICAgIGlmIChuIDwg NSkgewkJCS8qIE5vdCB3b3J0aCBpdCBmb3Igc21hbGwgdGFibGVzICovCisJaSA9IDA7CisgICAg fSBlbHNlIHsKKwlpbnQgbG8gPSAwOworCWludCBoaSA9IG47CisJaW50IGNvdW50ID0gMDsKKwl3 aGlsZSAobG8rMiA8IGhpICYmICsrY291bnQgPCAxMikgeworCSAgICBpID0gbG8gKyAoKGhpIC0g bG8pIC8gMik7CisJICAgIGMgPSAqKHRhYmxlW2ldLmt3ZCk7CisJICAgIGlmIChpc3VwcGVyKGMp KSBjID0gdG9sb3dlcihjKTsKKwkgICAgaWYgKGMgPCBjMSkgeworCQlsbyA9IGk7CisJICAgIH0g ZWxzZSB7CisJCWhpID0gaTsKKwkgICAgfQorCX0KKwlpID0gKGMgPCBjMSkgPyBsbysxIDogbG87 CisjaWZkZWYgVVNFX0xVQ0FDSEUKKwlpZiAoaSA+IDApIHh4aGl0cysrOworI2VuZGlmIC8qIFVT RV9MVUNBQ0hFICovCisgICAgfQorICAgIGZvciAoIDsgaSA8IG4tMTsgaSsrKSB7CisjaWZkZWYg VVNFX0xVQ0FDSEUKKwlsdWxvb3ArKzsKKyNlbmRpZiAvKiBVU0VfTFVDQUNIRSAqLworCXYgPSAw OworCWMgPSAqKHRhYmxlW2ldLmt3ZCk7CisJaWYgKGMpIHsKKwkgICAgaWYgKGlzdXBwZXIoYykp IGMgPSB0b2xvd2VyKGMpOworCisJICAgIC8qIFRoZSBmb2xsb3dpbmcgaXMgYSBiaWcgcGVyZm9y bWFuY2UgYm9vc3RlciBidXQgbWFrZXMgaXQgKi8KKwkgICAgLyogYWJzb2x1dGVseSBlc3NlbnRp YWwgdGhhdCBhbGwgbG9va3VwKCkgdGFibGVzIGFyZSBpbiBvcmRlci4gKi8KKworCSAgICBpZiAo YyA+IGMxKQkJCS8qIExlYXZlIGVhcmx5IGlmIHBhc3Qgb3VyIG1hcmsgKi8KKwkgICAgICByZXR1 cm4oLTEpOworCisjaWZkZWYgREVCVUcKKwkgICAgLyogVXNlIExPRyBERUJVRyB0byBjaGVjayAq LworCisJICAgIGlmIChkZWJsb2cpIHsKKwkJaWYgKGNrc3RyY21wKHRhYmxlW2ldLmt3ZCx0YWJs ZVtpKzFdLmt3ZCwwLDApID4gMCkgeworCQkgICAgcHJpbnRmKCJUQUJMRSBPVVQgT0YgT1JERVIg WyVzXSBbJXNdXG4iLAorCQkJICAgdGFibGVbaV0ua3dkLHRhYmxlW2krMV0ua3dkKTsKKworCQl9 CisJICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisJICAgIGlmIChjID09IGMxKSB7CisJCWxl biA9IDA7CisJCXMgPSB0YWJsZVtpXS5rd2Q7CisJCXdoaWxlICgqcysrKSBsZW4rKzsKKwkJaWYg KChsZW4gPT0gY21kbGVuICYmICFja3N0cmNtcCh0YWJsZVtpXS5rd2QsY21kLGxlbiwwKSkgfHwK KwkJICAgICgodiA9ICFja3N0cmNtcCh0YWJsZVtpXS5rd2QsY21kLGNtZGxlbiwwKSkgJiYKKwkJ ICAgICBja3N0cmNtcCh0YWJsZVtpKzFdLmt3ZCxjbWQsY21kbGVuLDApKSkgeworCQkgICAgaWYg KHgpICp4ID0gaTsKKwkJICAgIHJldHVybih0YWJsZVtpXS5rd3ZhbCk7CisJCX0KKwkgICAgfSBl bHNlIHYgPSAwOworCX0KKyAgICAgICAgaWYgKHYpIHsJCQkvKiBBbWJpZ3VvdXMgKi8KKwkgICAg aWYgKHgpICp4ID0gaTsJCS8qIFNldCBpbmRleCBvZiBmaXJzdCBtYXRjaCAqLworCSAgICByZXR1 cm4oLTIpOworCX0KKyAgICB9CisKKy8qIExhc3QgKG9yIG9ubHkpIGVsZW1lbnQgKi8KKworICAg IGlmICghY2tzdHJjbXAodGFibGVbbi0xXS5rd2QsY21kLGNtZGxlbiwwKSkgeworICAgICAgICBp ZiAoeCkgKnggPSBuLTE7CisJLyogZGVidWcoRjExMSwibG9va3VwIix0YWJsZVtpXS5rd2QsdGFi bGUpOyAqLworICAgICAgICByZXR1cm4odGFibGVbbi0xXS5rd3ZhbCk7CisgICAgfSBlbHNlIHJl dHVybigtMSk7Cit9CisKKy8qCisgIHggbCBvIG8gayB1IHAKKworICBMaWtlIGxvb2t1cCwgYnV0 IHJlcXVpcmVzIGEgZnVsbCAoYnV0IGNhc2UtaW5kZXBlbmRlbnQpIG1hdGNoCisgIGFuZCBkb2Vz IE5PVCByZXF1aXJlIHRoZSB0YWJsZSB0byBiZSBpbiBvcmRlci4KKyovCitpbnQKK3hsb29rdXAo dGFibGUsY21kLG4seCkgc3RydWN0IGtleXRhYiB0YWJsZVtdOyBjaGFyICpjbWQ7IGludCBuLCAq eDsgeworICAgIHJlZ2lzdGVyIGludCBpOworICAgIGludCBsZW4sIGNtZGxlbiwgb25lID0gMDsK KyAgICByZWdpc3RlciBjaGFyIGMsIGMyLCAqIHMsICogczI7CisKKyAgICBpZiAoIWNtZCkgY21k ID0gIiI7CQkJLyogQ2hlY2sgYXJncyAqLworICAgIGlmICghKmNtZCB8fCBuIDwgMSkgcmV0dXJu KC0zKTsKKworICAgIGMgPSAqY21kOwkJCQkvKiBGaXJzdCBjaGFyIG9mIHN0cmluZyB0byBsb29r IHVwICovCisgICAgaWYgKCEqKGNtZCsxKSkgewkJCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIDEt Y2hhciBuYW1lcyAqLworCWNtZGxlbiA9IDE7CisJaWYgKGlzdXBwZXIoYykpCisJICBjID0gdG9s b3dlcihjKTsKKwlvbmUgPSAxOworICAgIH0gZWxzZSB7CisJY21kbGVuID0gMDsKKwlzID0gY21k OworCXdoaWxlICgqcysrKSBjbWRsZW4rKzsKKwljID0gKmNtZDsKKwlpZiAoaXN1cHBlcihjKSkK KwkgIGMgPSB0b2xvd2VyKGMpOworICAgIH0KKyAgICBpZiAoY21kbGVuIDwgMSkKKyAgICAgIHJl dHVybigtMyk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJcyA9IHRhYmxlW2ld Lmt3ZDsJCS8qIFRoaXMgZW50cnkgKi8KKwlpZiAoIXMpIHMgPSAiIjsKKwlpZiAoISpzKSBjb250 aW51ZTsJCS8qIEVtcHR5IHRhYmxlIGVudHJ5ICovCisJYzIgPSAqczsKKwlpZiAoaXN1cHBlcihj MikpIGMyID0gdG9sb3dlcihjMik7CisJaWYgKGMgIT0gYzIpIGNvbnRpbnVlOwkJLyogRmlyc3Qg Y2hhciBkb2Vzbid0IG1hdGNoICovCisJaWYgKG9uZSkgewkJCS8qIE5hbWUgaXMgb25lIGNoYXIg bG9uZyAqLworCSAgICBpZiAoISoocysxKSkgeworCQlpZiAoeCkgKnggPSBpOworICAgICAgICAg ICAgICAgICpjbWQgPSBjOyAKKwkJcmV0dXJuKHRhYmxlW2ldLmt3dmFsKTsJLyogU28gaXMgdGFi bGUgZW50cnkgKi8KKwkgICAgfQorCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlIGRvIHN0cmluZyBj b21wYXJpc29uICovCisJICAgIHMyID0gczsKKwkgICAgbGVuID0gMDsKKwkgICAgd2hpbGUgKCpz MisrKSBsZW4rKzsKKwkgICAgaWYgKGxlbiA9PSBjbWRsZW4gJiYgIWNrc3RyY21wKHMsY21kLC0x LDApKSB7CisJCWlmICh4KSAqeCA9IGk7CisJCXJldHVybih0YWJsZVtpXS5rd3ZhbCk7CisJICAg IH0KKwl9CisgICAgfQorICAgIHJldHVybigtMSk7Cit9CisKKy8qIFJldmVyc2UgbG9va3VwICov CisKK2NoYXIgKgorcmxvb2t1cCh0YWJsZSxuLHgpIHN0cnVjdCBrZXl0YWIgdGFibGVbXTsgaW50 IG4sIHg7IHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAg ICAgIGlmICh0YWJsZVtpXS5rd3ZhbCA9PSB4KQorCSAgcmV0dXJuKHRhYmxlW2ldLmt3ZCk7Cisg ICAgfQorICAgIHJldHVybihOVUxMKTsKK30KKworI2lmbmRlZiBOT0lDUAoraW50CitjbWRzcXVv KHgpIGludCB4OyB7CisgICAgcXVvdGluZyA9IHg7CisgICAgcmV0dXJuKDEpOworfQorCitpbnQK K2NtZGdxdW8oKSB7CisgICAgcmV0dXJuKHF1b3RpbmcpOworfQorI2VuZGlmIC8qIE5PSUNQICov CgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vj bWQuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y21kLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkNGNlZAotLS0gL2Rldi9udWxsCisr KyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y21kLmgKQEAgLTAs MCArMSwzMTIgQEAKKy8qICBDIEsgVSBDIE0gRCAuIEggIC0tICBIZWFkZXIgZmlsZSBmb3IgVW5p eCBjbWQgcGFja2FnZSAgKi8KKworLyoKKyAgQXV0aG9yOiBGcmFuayBkYSBDcnV6IDxmZGNAY29s dW1iaWEuZWR1PgorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEtlcm1pdCBQcm9qZWN0LCBOZXcgWW9y ayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAwOSwKKyAgICBUcnVzdGVlcyBvZiBD b2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdo dHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisg ICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBh bmQgcGVybWlzc2lvbnMuCisqLworCisjaWZuZGVmIENLVUNNRF9ICisjZGVmaW5lIENLVUNNRF9I CisKKy8qIENvbW1hbmQgcmVjYWxsICovCisKKyNpZmRlZiBwZHAxMQkJCQkvKiBOb3QgZW5vdWdo IHJvb20gZm9yIHRoaXMgKi8KKyNpZm5kZWYgTk9SRUNBTEwKKyNkZWZpbmUgTk9SRUNBTEwKKyNl bmRpZiAvKiBOT1JFQ0FMTCAqLworI2VuZGlmIC8qIHBkcDExICovCisKKyNpZmRlZiBEWU5BTUlD CQkJCS8qIER5bmFtaWMgY29tbWFuZCBidWZmZXJzICovCisvKgorICBVc2UgbWFsbG9jKCkgdG8g YWxsb2NhdGUgdGhlIG1hbnkgY29tbWFuZC1yZWxhdGVkIGJ1ZmZlcnMgaW4gY2t1Y21kLmMuCisq LworI2lmbmRlZiBEQ01EQlVGCisjaWZuZGVmIE5PUkVDQUxMCisjZGVmaW5lIE5PUkVDQUxMCisj ZW5kaWYgLyogTk9SRUNBTEwgKi8KKyNlbmRpZiAvKiBEQ01EQlVGICovCisKKyNpZm5kZWYgTk9S RUNBTEwKKyNkZWZpbmUgQ0tfUkVDQUxMCisjZWxzZQorI2lmZGVmIENLX1JFQ0FMTAorI3VuZGVm IENLX1JFQ0FMTAorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworI2VuZGlmIC8qIE5PUkVDQUxMICov CisjZWxzZQorI2lmbmRlZiBOT1JFQ0FMTAorI2RlZmluZSBOT1JFQ0FMTAorI2VuZGlmIC8qICBO T1JFQ0FMTCAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworI2lmZGVmIE5PUkVDQUxMCisjaWZk ZWYgQ0tfUkVDQUxMCisjdW5kZWYgQ0tfUkVDQUxMCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisj ZW5kaWYgLyogTk9SRUNBTEwgKi8KKworI2lmZGVmIE5PUkVDQUxMCisjaWZuZGVmIE5PQVJST1dL RVlTCisjZGVmaW5lIE5PQVJST1dLRVlTCisjZW5kaWYgLyogTk9BUlJPV0tFWVMgKi8KKyNlbmRp ZiAvKiBOT1JFQ0FMTCAqLworCisvKiBTcGVjaWFsIGdldGNoYXJzICovCisKKyNpZmRlZiBWTVMK KyNpZmRlZiBnZXRjaGFyCQkJCS8qIFRoaXMgaXMgZm9yIFZNUyBHQ0MgKi8KKyN1bmRlZiBnZXRj aGFyCisjZW5kaWYgLyogZ2V0Y2hhciAqLworI2RlZmluZSBnZXRjaGFyKCkgICB2bXNfZ2V0Y2hh cigpCitpbnQgdm1zX2dldGNoYXIodm9pZCk7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBh ZWdpcworI3VuZGVmIGdldGNoYXIKKyNkZWZpbmUgZ2V0Y2hhcigpICAgY29uaW5jKDApCisjZW5k aWYgLyogYWVnaXMgKi8KKworI2lmZGVmIEFNSUdBCisjdW5kZWYgZ2V0Y2hhcgorI2RlZmluZSBn ZXRjaGFyKCkgY29uaW5jKDApCisjZW5kaWYgLyogQU1JR0EgKi8KKworI2lmZGVmIFBsYW45Cisj dW5kZWYgZ2V0Y2hhcgorI2RlZmluZSBnZXRjaGFyKCkgY29uaW5jKDApCisjdW5kZWYgcHV0Y2hh cgorI2RlZmluZSBwdXRjaGFyKGMpIGNvbm9jKGMpCisjdW5kZWYgcHJpbnRmCisjZGVmaW5lIHBy aW50ZiBjb25wcmludAorI2VuZGlmIC8qIFBsYW45ICovCisKKy8qIFNpemVzIG9mIHRoaW5ncyAq LworCisjaWZuZGVmIENNRERFUAorI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIENNRERFUCAgNjQJ CQkvKiBNYXhpbXVtIGNvbW1hbmQgcmVjdXJzaW9uIGRlcHRoICovCisjZWxzZQorI2RlZmluZSBD TURERVAgIDIwCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBDTURERVAgKi8KKyNk ZWZpbmUgSExQTFcgICA3OAkJCS8qIFdpZHRoIG9mID8taGVscCBsaW5lICovCisjZGVmaW5lIEhM UENXICAgMTkJCQkvKiBXaWR0aCBvZiA/LWhlbHAgY29sdW1uICovCisjZGVmaW5lIEhMUEJMICAx MDAJCQkvKiBIZWxwIHN0cmluZyBidWZmZXIgbGVuZ3RoICovCisjaWZkZWYgQklHQlVGT0sKKyNk ZWZpbmUgQVRNQkwgMTAyMzgJCQkvKiBDb21tYW5kIGF0b20gYnVmZmVyIGxlbmd0aCovCisjZWxz ZQorI2lmZGVmIE5PU1BMCisjZGVmaW5lIEFUTUJMICAyNTYKKyNlbHNlCisjZGVmaW5lIEFUTUJM ICAxMDI0CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworCisjaWZu ZGVmIENNREJMCisjaWZkZWYgTk9TUEwKKy8qIE5vIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFn ZSwgc2F2ZSBzb21lIHNwYWNlICovCisjZGVmaW5lIENNREJMIDYwOAkJCS8qIENvbW1hbmQgYnVm ZmVyIGxlbmd0aCAqLworI2Vsc2UKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBDTURCTCAzMjc2 MworI2Vsc2UKKyNkZWZpbmUgQ01EQkwgNDA5MgorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IE5PU1BMICovCisjZW5kaWYgLyogQ01EQkwgKi8KKworLyogU3BlY2lhbCBjaGFyYWN0ZXJzICov CisKKyNkZWZpbmUgUkRJUyAwMDIyCQkJLyogUmVkaXNwbGF5ICAgKF5SKSAqLworI2RlZmluZSBM REVMIDAwMjUJCQkvKiBEZWxldGUgbGluZSAoXlUpICovCisjZGVmaW5lIFdERUwgMDAyNwkJCS8q IERlbGV0ZSB3b3JkICheVykgKi8KKyNpZmRlZiBDS19SRUNBTEwKKyNkZWZpbmUgQ19VUCAwMDIw CQkJLyogR28gVXAgaW4gcmVjYWxsIGJ1ZmZlciAoXlApICovCisjZGVmaW5lIENfVVAyIDAwMDIJ CQkvKiBBbHRlcm5hdGUgR28gVXAgKF5CKSBmb3IgVk1TICovCisjZGVmaW5lIENfRE4gMDAxNgkJ CS8qIEdvIERvd24gaW4gcmVjYWxsIGJ1ZmZlciAoXk4pICovCisjZW5kaWYgLyogQ0tfUkVDQUxM ICovCisKKy8qIEtleXdvcmQgZmxhZ3MgKGJpdHMsIHBvd2VycyBvZiAyKSAqLworCisjZGVmaW5l IENNX0lOViAxCQkJLyogSW52aXNpYmxlIGtleXdvcmQgKi8KKyNkZWZpbmUgQ01fQUJSIDIJCQkv KiBBYmJyZXZpYXRpb24gZm9yIGFub3RoZXIga2V5d29yZCAqLworI2RlZmluZSBDTV9ITFAgNAkJ CS8qIEhlbHAtb25seSBrZXl3b3JkICovCisjZGVmaW5lIENNX0FSRyA4CQkJLyogQW4gYXJndW1l bnQgaXMgcmVxdWlyZWQgKi8KKyNkZWZpbmUgQ01fTk9SIDE2CQkJLyogTm8gcmVjYWxsIGZvciB0 aGlzIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ01fUFJFIDMyCQkJLyogTG9uZy1mb3JtIGNtZGxpbmUg YXJnIGZvciBwcmVzY2FuICovCisjZGVmaW5lIENNX1BTSCA2NAkJCS8qIENvbW1hbmQgZGlzYWJs ZWQgaWYgbm9wdXNoICovCisjZGVmaW5lIENNX0xPQyAxMjgJCQkvKiBDb21tYW5kIGRpc2FibGVk IGlmIG5vbG9jYWwgKi8KKworLyoKKyAgQSBsb25nLWZvcm0gY29tbWFuZCBsaW5lIG9wdGlvbiBp cyBhIGtleXdvcmQgdXNpbmcgdGhlIHJlZ3VsYXIgc3RydWN0IGtleXRhYgorICBhbmQgbG9va3Vw IG1lY2hhbmlzbXMuICBGbGFncyB0aGF0IG1ha2Ugc2Vuc2UgaW4gdGhpcyBjb250ZXh0IGFyZSBD TV9BUkcsCisgIGluZGljYXRpbmcgdGhpcyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgKG9w ZXJhbmQpLCBhbmQgQ01fUFJFLCB3aGljaAorICBtZWFucyB0aGlzIG9wdGlvbiBtdXN0IGJlIHBy b2Nlc3NlZCBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUuICBUaGUKKyAgYWJzZW5jZSBv ZiBDTV9QUkUgbWVhbnMgdGhlIG9wdGlvbiBpcyB0byBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlCisg IGluaXRpYWxpemF0aW9uIGZpbGUgaW4gdGhlIG5vcm1hbCBtYW5uZXIuCisqLworCisvKiBUb2tl biBmbGFncyAobnVtYmVycykgKi8KKworI2RlZmluZSBDTVRfQ09NIDAJCQkvKiBDb21tZW50ICg7 IG9yICMpICovCisjZGVmaW5lIENNVF9TSEUgMQkJCS8qIFNoZWxsIGVzY2FwZSAoISkgKi8KKyNk ZWZpbmUgQ01UX0xCTCAyCQkJLyogTGFiZWwgKDopICovCisjZGVmaW5lIENNVF9GSUwgMwkJCS8q IEluZGlyZWN0IGZpbGVzcGVjIChAKSAobm90IHVzZWQpICovCisKKy8qIFBhdGggc2VwYXJhdG9y IGZvciBwYXRoIHNlYXJjaGVzICovCisKKyNpZmRlZiBPUzIKKyNkZWZpbmUgUEFUSFNFUCAnOycK KyNlbHNlCisjaWZkZWYgVU5JWAorI2RlZmluZSBQQVRIU0VQICc6JworI2Vsc2UKKyNkZWZpbmUg UEFUSFNFUCAnLCcKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5k ZWYgQ0tfS0VZVEFCCisjZGVmaW5lIENLX0tFWVRBQgorCisvKiBLZXl3b3JkIFRhYmxlIFRlbXBs YXRlIHBlcmhhcHMgYWxyZWFkeSBkZWZpbmVkIGluIGNrY2RlYi5oICovCisKK3N0cnVjdCBrZXl0 YWIgewkJCQkvKiBLZXl3b3JkIHRhYmxlICovCisgICAgY2hhciAqa3dkOwkJCQkvKiBQb2ludGVy IHRvIGtleXdvcmQgc3RyaW5nICovCisgICAgaW50IGt3dmFsOwkJCQkvKiBBc3NvY2lhdGVkIHZh bHVlICovCisgICAgaW50IGZsZ3M7CQkJCS8qIEZsYWdzIChhcyBkZWZpbmVkIGFib3ZlKSAqLwor fTsKKyNlbmRpZiAvKiBDS19LRVlUQUIgKi8KKworLyogU3RyaW5nIHByZXByb2Nlc3NpbmcgZnVu Y3Rpb24gKi8KKworI2lmZGVmIENLX0FOU0lDCQkJCS8qIEFOU0kgQyAqLworI2lmZGVmIE1fU1lT VgkJCQkvKiBTQ08gTWljcm9zb2Z0IEMgd2FudHMgbm8gYXJncyAqLwordHlwZWRlZiBpbnQgKCp4 eF9zdHJwKSgpOworI2Vsc2UKK3R5cGVkZWYgaW50ICgqeHhfc3RycCkoY2hhciAqLCBjaGFyICoq LCBpbnQgKik7CisjZW5kaWYgLyogTV9TWVNWICovCisjZWxzZQkJCQkJLyogTm90IEFOU0kgQyAq LwordHlwZWRlZiBpbnQgKCp4eF9zdHJwKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisKKy8q IEZMRERCIHN0cnVjdCAqLworCit0eXBlZGVmIHN0cnVjdCBGREIgeworICAgIGludCBmY29kZTsJ CQkJLyogRnVuY3Rpb24gY29kZSAqLworICAgIGNoYXIgKiBobHBtc2c7CQkJLyogSGVscCBtZXNz YWdlICovCisgICAgY2hhciAqIGRmbHQ7CQkJLyogRGVmYXVsdCAqLworICAgIGNoYXIgKiBzZGF0 YTsJCQkvKiBBZGRpdGlvbmFsIHN0cmluZyBkYXRhICovCisgICAgaW50IG5kYXRhMTsJCQkJLyog QWRkaXRpb25hbCBudW1lcmljIGRhdGEgMSAqLworICAgIGludCBuZGF0YTI7CQkJCS8qIEFkZGl0 aW9uYWwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICB4eF9zdHJwIHNwZjsJCQkvKiBTdHJpbmcgcHJv Y2Vzc2luZyBmdW5jdGlvbiAqLworICAgIHN0cnVjdCBrZXl0YWIgKiBrd2R0Ymw7CQkvKiBLZXl3 b3JkIHRhYmxlICovCisgICAgc3RydWN0IEZEQiAqIG54dGZkYjsJCS8qIFBvaW50ZXIgdG8gbmV4 dCBhbHRlcm5hdGl2ZSAqLworfSBmZGI7CisKK3R5cGVkZWYgc3RydWN0IE9GREIgeworICAgIHN0 cnVjdCBGREIgKiBmZGJhZGRyOwkJLyogQWRkcmVzcyBvZiBzdWNjZWVkaW5nIEZEQiBzdHJ1Y3Qg Ki8KKyAgICBpbnQgZmNvZGU7CQkJCS8qIEZ1bmN0aW9uIGNvZGUgKi8KKyAgICBjaGFyICogc3Jl c3VsdDsJCQkvKiBTdHJpbmcgcmVzdWx0ICovCisgICAgaW50IG5yZXN1bHQ7CQkJLyogSW50ZWdl ciByZXN1bHQgKi8KKyAgICBpbnQga2ZsYWdzOwkJCQkvKiBLZXl3b3JkIGZsYWdzIGlmIGFueSAq LworICAgIENLX09GRl9UIHdyZXN1bHQ7CQkJLyogTG9uZyBpbnRlZ2VyICgid2lkZSIpIHJlc3Vs dCAqLworfSBvZmRiOworCisjaWZuZGVmIENLVUNNRF9DCitleHRlcm4gc3RydWN0IE9GREIgY21y ZXN1bHQ7CisjZW5kaWYgLyogQ0tVQ01EX0MgKi8KKworLyogQ29kZXMgZm9yIHByaW1hcnkgcGFy c2luZyBmdW5jdGlvbiAgKi8KKworI2RlZmluZSBfQ01OVU0gMAkJCS8qIE51bWJlciAqLworI2Rl ZmluZSBfQ01PRkkgMQkJCS8qIE91dHB1dCBmaWxlICovCisjZGVmaW5lIF9DTUlGSSAyCQkJLyog SW5wdXQgZmlsZSAqLworI2RlZmluZSBfQ01GTEQgMwkJCS8qIEFyYml0cmFyeSBmaWVsZCAqLwor I2RlZmluZSBfQ01UWFQgNAkJCS8qIFRleHQgc3RyaW5nICovCisjZGVmaW5lIF9DTUtFWSA1CQkJ LyogS2V5d29yZCAqLworI2RlZmluZSBfQ01DRk0gNgkJCS8qIENvbmZpcm1hdGlvbiAqLworI2Rl ZmluZSBfQ01EQVQgNwkJCS8qIERhdGUvdGltZSAqLworI2RlZmluZSBfQ01OVVcgOAkJCS8qIFdp ZGUgdmVyc2lvbiBvZiBjbW51bSAqLworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCisKK19Q Uk9UT1RZUCggaW50IHh4ZXNjLCAoY2hhciAqKikgKTsKK19QUk9UT1RZUCggaW50IGNtcmluaSwg KGludCkgKTsKK19QUk9UT1RZUCggVk9JRCBjbXNldHAsIChjaGFyICopICk7CitfUFJPVE9UWVAo IFZPSUQgY21zYXZwLCAoY2hhciBbXSwgaW50KSApOworX1BST1RPVFlQKCBjaGFyICogY21nZXRw LCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBwcm9tcHQsICh4eF9zdHJwKSApOworX1BST1RP VFlQKCBWT0lEIHB1c2hjbWQsIChjaGFyICopICk7CitfUFJPVE9UWVAoIFZPSUQgY21yZXMsICh2 b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGNtaW5pLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQg Y21nYnJrLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGNtZ2t3ZmxncywgKHZvaWQpICk7Citf UFJPVE9UWVAoIGludCBjbXB1c2gsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgY21wb3AsICh2 b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHVudGFiLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBp bnQgY21udW0sIChjaGFyICosIGNoYXIgKiwgaW50LCBpbnQgKiwgeHhfc3RycCApICk7CitfUFJP VE9UWVAoIGludCBjbW51bXcsIChjaGFyICosIGNoYXIgKiwgaW50LCBDS19PRkZfVCAqLCB4eF9z dHJwICkgKTsKK19QUk9UT1RZUCggaW50IGNtb2ZpLCAoY2hhciAqLCBjaGFyICosIGNoYXIgKios IHh4X3N0cnAgKSApOworX1BST1RPVFlQKCBpbnQgY21pZmksIChjaGFyICosIGNoYXIgKiwgY2hh ciAqKiwgaW50ICosIHh4X3N0cnAgKSApOworX1BST1RPVFlQKCBpbnQgY21pb2ZpLCAoY2hhciAq LCBjaGFyICosIGNoYXIgKiosIGludCAqLCB4eF9zdHJwICkgKTsKK19QUk9UT1RZUCggaW50IGNt aWZpcCwoY2hhciAqLCBjaGFyICosIGNoYXIgKiosIGludCAqLCBpbnQsIGNoYXIgKiwgeHhfc3Ry cCApKTsKK19QUk9UT1RZUCggaW50IGNtaWZpMiwoY2hhciAqLGNoYXIgKixjaGFyICoqLGludCAq LGludCxjaGFyICoseHhfc3RycCxpbnQgKSk7CitfUFJPVE9UWVAoIGludCBjbWRpciwgKGNoYXIg KiwgY2hhciAqLCBjaGFyICoqLCB4eF9zdHJwICkgKTsKK19QUk9UT1RZUCggaW50IGNtZGlycCwg KGNoYXIgKiwgY2hhciAqLCBjaGFyICoqLCBjaGFyICosIHh4X3N0cnAgKSApOworX1BST1RPVFlQ KCBpbnQgY21mbGQsIChjaGFyICosIGNoYXIgKiwgY2hhciAqKiwgeHhfc3RycCApICk7CitfUFJP VE9UWVAoIGludCBjbXR4dCwgKGNoYXIgKiwgY2hhciAqLCBjaGFyICoqLCB4eF9zdHJwICkgKTsK K19QUk9UT1RZUCggaW50IGNta2V5LCAgKHN0cnVjdCBrZXl0YWIgW10sIGludCwgY2hhciAqLCBj aGFyICosIHh4X3N0cnApICk7CitfUFJPVE9UWVAoIGludCBjbWtleXgsIChzdHJ1Y3Qga2V5dGFi IFtdLCBpbnQsIGNoYXIgKiwgY2hhciAqLCB4eF9zdHJwKSApOworX1BST1RPVFlQKCBpbnQgY21r ZXkyLChzdHJ1Y3Qga2V5dGFiIFtdLGludCxjaGFyICosY2hhciAqLGNoYXIgKix4eF9zdHJwLGlu dCkpOworX1BST1RPVFlQKCBpbnQgY21zd2ksICAoc3RydWN0IGtleXRhYiBbXSwgaW50LCBjaGFy ICosIGNoYXIgKiwgeHhfc3RycCkgKTsKK19QUk9UT1RZUCggaW50IGNtZGF0ZSwoY2hhciAqLCBj aGFyICosIGNoYXIgKiosIGludCwgeHhfc3RycCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGNtcGVl aywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBjbWZkYiwgKHN0cnVjdCBGREIgKikgKTsKK19Q Uk9UT1RZUCggVk9JRCBjbWZkYmksIChzdHJ1Y3QgRkRCICosCisJCQlpbnQsIGNoYXIgKiwgY2hh ciAqLCBjaGFyICosIGludCwgaW50LCB4eF9zdHJwLAorCQkJc3RydWN0IGtleXRhYiAqLCBzdHJ1 Y3QgRkRCICopICk7CitfUFJPVE9UWVAoIGludCBjaGt0b2ssIChjaGFyICopICk7CitfUFJPVE9U WVAoIGludCBjbWNmbSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBsb29rdXAsIChzdHJ1Y3Qg a2V5dGFiIFtdLCBjaGFyICosIGludCwgaW50ICopICk7CitfUFJPVE9UWVAoIFZPSUQga3dkaGVs cCwgKHN0cnVjdCBrZXl0YWJbXSxpbnQsY2hhciAqLGNoYXIgKixjaGFyICosaW50LGludCkgKTsK K19QUk9UT1RZUCggaW50IHVuZ3dvcmQsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHVudW5n dywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBjbWRzcXVvLCAoaW50KSApOworX1BST1RPVFlQ KCBpbnQgY21kZ3F1bywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBja2N2dGRhdGUsIChj aGFyICosIGludCkgKTsKK19QUk9UT1RZUCggaW50IGNtZGdldGMsIChpbnQpKTsKKyNpZm5kZWYg Tk9BUlJPV0tFWVMKK19QUk9UT1RZUCggaW50IGNtZGNvbmNoaywgKHZvaWQpICk7CisjZW5kaWYg LyogTk9BUlJPV0tFWVMgKi8KKworI2lmZGVmIENLX1JFQ0FMTAorX1BST1RPVFlQKCBjaGFyICog Y21nZXRjbWQsIChjaGFyICopICk7CitfUFJPVE9UWVAoIFZPSUQgYWRkY21kLCAoY2hhciAqKSAp OworX1BST1RPVFlQKCBWT0lEIGNtYWRkbmV4dCwgKHZvaWQpICk7CisjZW5kaWYgLyogQ0tfUkVD QUxMICovCitfUFJPVE9UWVAoIGNoYXIgKiBjbWN2dGRhdGUsIChjaGFyICosIGludCkgKTsKK19Q Uk9UT1RZUCggY2hhciAqIGNtZGlmZmRhdGUsIChjaGFyICosIGNoYXIgKikgKTsKK19QUk9UT1RZ UCggY2hhciAqIGNtZGVsdGEsIChpbnQsCisJCQkgICAgaW50LGludCxpbnQsaW50LGludCxpbnQs aW50LGludCxpbnQsaW50LGludCxpbnQgKSk7CitfUFJPVE9UWVAoIGNoYXIgKiBzaHVmZmxlZGF0 ZSwgKGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgZmlsaGVscCwgKGludCwgY2hhciAq LCBjaGFyICosIGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgeGZpbGhlbHAsIChpbnQsIGNo YXIgKiwgY2hhciAqLCBpbnQsIGludCwKKwkJCSAgaW50LAorCQkJICBjaGFyICosIGNoYXIgKiwg Y2hhciAqLCBjaGFyICosCisJCQkgIENLX09GRl9ULCBDS19PRkZfVCwKKwkJCSAgaW50LCBpbnQs CisJCQkgIGNoYXIgKiopICk7CitfUFJPVE9UWVAoIGludCBkZWx0YTJzZWMsIChjaGFyICosIGxv bmcgKikgKTsKKworI2lmZGVmIERDTURCVUYKK19QUk9UT1RZUCggaW50IGNtc2V0dXAsICh2b2lk KSApOworI2VuZGlmIC8qIERDTURCVUYgKi8KKworI2VuZGlmIC8qIENLVUNNRF9IICovCisKKy8q IEVuZCBvZiBja3VjbWQuaCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2t1Y25zLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdWNucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNzE5 N2MKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdWNucy5jCkBAIC0wLDAgKzEsMjcyMCBAQAorI2luY2x1ZGUgImNrY3N5bS5oIgorY2hh ciAqY29ubnYgPSAiQ09OTkVDVCBDb21tYW5kIGZvciBVTklYOnNlbGVjdCgpLCA5LjAuMTM5LCAx IE1hciAyMDEwIjsKKworLyogIEMgSyBVIEMgTiBTICAtLSAgVGVybWluYWwgY29ubmVjdGlvbiB0 byByZW1vdGUgc3lzdGVtLCBmb3IgVU5JWCAgKi8KKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1 eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5m b3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUs IDIwMTAsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBv ZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBD T1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWku YyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAgVGhp cyB2ZXJzaW9uIG9mIHRoZSBVTklYIENPTk5FQ1QgbW9kdWxlIHVzZXMgc2VsZWN0KCksIHdoaWNo IGlzIHJlcXVpcmVkIGZvcgorICBLZXJiZXJvcyBlbmNyeXB0aW9uLiAgVGh1cyBpdCBjYW4gYmUg dXNlZCBvbmx5IG9uIFVOSVggc3lzdGVtcyB0aGF0IHN1cHBvcnQKKyAgc2VsZWN0KCkgb24gYm90 aCBUQ1AvSVAgYW5kIHNlcmlhbCBjb25uZWN0aW9ucy4gIEEgc2VwYXJhdGUgbW9kdWxlIHRoYXQg dXNlcworICBhIGNvbXBsZXRlbHkgcG9ydGFibGUgZm9yaygpIHN0cnVjdHVyZSBjYW4gYmUgdXNl ZCBvbiBzeXN0ZW1zIHdoZXJlIHNlbGVjdCgpCisgIGlzIG5vdCBhdmFpbGFibGUgb3IgZG9lcyBu b3Qgd29yayBhcyByZXF1aXJlZC4KKyovCisKKyNpbmNsdWRlICJja2NkZWIuaCIJCQkvKiBDb21t b24gdGhpbmdzIGZpcnN0ICovCisKKyNpZm5kZWYgTk9MT0NBTAorCisjaWZkZWYgT1NGMTMKKyNp ZmRlZiBDS19BTlNJQworI2lmZGVmIF9OT19QUk9UTworI3VuZGVmIF9OT19QUk9UTworI2VuZGlm IC8qIF9OT19QUk9UTyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1NGMTMg Ki8KKworI2luY2x1ZGUgPGVycm5vLmg+CQkJLyogRXJyb3IgbnVtYmVycyAqLworCisjaWZuZGVm IE5PVElNRUgKKyNpbmNsdWRlIDx0aW1lLmg+CQkJLyogRm9yIEZEX2JsYWggKi8KKyNpZmRlZiBT WVNUSU1FSAkJCQkvKiAoSVJJWCA1LjMpICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRp ZiAvKiBTWVNUSU1FSCAqLworI2VuZGlmIC8qIE5PVElNRUggKi8KKworI2lmZGVmIEJTRDQySEFD SwkJCS8qIFdoeSBpcyB0aGlzIG5lY2Vzc2FyeT8gKi8KKyNpZm5kZWYgRENMVElNRVZBTAorI2Rl ZmluZSBEQ0xUSU1FVkFMCisjZW5kaWYgLyogRENMVElNRVZBTCAqLworI2VuZGlmIC8qIEJTRDQy SEFDSyAqLworCisvKiBLZXJtaXQtc3BlY2lmaWMgaW5jbHVkZXMgKi8KKworI2luY2x1ZGUgImNr Y2FzYy5oIgkJCS8qIEFTQ0lJIGNoYXJhY3RlcnMgKi8KKyNpbmNsdWRlICJja2NrZXIuaCIJCQkv KiBLZXJtaXQgdGhpbmdzICovCisjaW5jbHVkZSAiY2t1Y21kLmgiCQkJLyogRm9yIHh4ZXNjKCkg cHJvdG90eXBlICovCisjaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyogTmV0d29yayBzeW1ib2xzICov CisjaWZuZGVmIE5PQ1NFVFMKKyNpbmNsdWRlICJja2N4bGEuaCIJCQkvKiBDaGFyYWN0ZXIgc2V0 IHRyYW5zbGF0aW9uICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgQkVCT1gKKyNp bmNsdWRlIDxrZXJuZWwvT1MuaD4KKyNpbmNsdWRlIDxzb2NrZXQuaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorI2VuZGlmIC8qIEJFQk9YICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4JCQkvKiBTaWdu YWxzICovCisKKy8qIEFsbCB0aGUgZm9sbG93aW5nIGlzIGZvciBzZWxlY3QoKS4uLiAqLworCisj aWZkZWYgQ0tUSURMRQkJCQkvKiBUaW1lb3V0cyBvbmx5IGZvciBTRVQgVEVSTSBJRExFICovCisK KyNpZm5kZWYgRENMVElNRVZBTAorI2lmZGVmIFVOSVhXQVJFCisjaWZuZGVmIFVXNworI2RlZmlu ZSBEQ0xUSU1FVkFMCisjZW5kaWYgLyogVVc3ICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKyNl bmRpZiAvKiBEQ0xUSU1FVkFMICovCisKKyNpZmRlZiBEQ0xUSU1FVkFMCQkJLyogRGVjbGFyZSB0 aW1ldmFsIG91cnNlbHZlcyAqLworc3RydWN0IHRpbWV2YWwgeworICAgIGxvbmcgdHZfc2VjOwor ICAgIGxvbmcgdHZfdXNlYzsKK307CisjZWxzZSAgLyogIURDTFRJTUVWQUwgKi8KKyNpZm5kZWYg Tk9TWVNUSU1FQkgKKyNpZmRlZiBTWVNUSU1FQkgKKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNl bmRpZiAvKiBTWVNUSU1FQkggKi8KKyNlbmRpZiAvKiBOT1NZU1RJTUVCSCAqLworI2VuZGlmIC8q IERDTFRJTUVWQUwgKi8KKyNlbmRpZiAvKiBDS1RJRExFICovCisKKyNpZm5kZWYgU0NPX09TUjUw NAorI2lmZGVmIFNFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmIC8qIFNF TEVDVF9IICovCisjZW5kaWYgLyogU0NPX09TUjUwNCAqLworCisjaWZuZGVmIEZEX1NFVFNJWkUK KyNpZmRlZiBDS19GT1JXQVJEX1gKKyNkZWZpbmUgRkRfU0VUU0laRSAyNTYKKyNlbHNlCisjZGVm aW5lIEZEX1NFVFNJWkUgMzIKKyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyNlbmRpZiAvKiBG RF9TRVRTSVpFICovCisKKyNpZmRlZiBIUFVYCisjaWZuZGVmIEhQVVgxMAorI2lmbmRlZiBIUFVY MTEwMAorLyogVGhlIHRocmVlIGludGVyaW9yIGFyZ3MgdG8gc2VsZWN0KCkgYXJlIChpbnQgKikg cmF0aGVyIHRoYW4gKGZkX3NldCAqKSAqLworI2lmbmRlZiBJTlRTRUxFQ1QKKyNkZWZpbmUgSU5U U0VMRUNUCisjZW5kaWYgLyogSU5UU0VMRUNUICovCisjZW5kaWYgLyogSFBVWDExMDAgKi8KKyNl bmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBIUFVYICovCisKKy8qIEludGVybmFsIGZ1bmN0 aW9uIHByb3RvdHlwZXMgKi8KKworI2lmZGVmIE5FV0ZUUAorI2VuZGlmIC8qIE5FV0ZUUCAqLwor X1BST1RPVFlQKCBWT0lEIHR0Zmx1eCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgZG9lc2Ms IChjaGFyKSApOworX1BST1RPVFlQKCBpbnQgaGNvbm5lLCAodm9pZCkgKTsKKyNpZm5kZWYgTk9T SE9XCitfUFJPVE9UWVAoIFZPSUQgc2hvbWRtLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBOT1NIT1cg Ki8KK19QUk9UT1RZUCggc3RhdGljIGludCBrYmdldCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0 YXRpYyBpbnQgY2tjcHV0ZiwgKHZvaWQpICk7CisKKy8qIEV4dGVybmFsIHZhcmlhYmxlcyAqLwor CitleHRlcm4gc3RydWN0IGNrX3AgcHRhYltdOworCitleHRlcm4gaW50IGxvY2FsLCBlc2NhcGUs IGR1cGxleCwgcGFyaXR5LCBmbG93LCBzZXNsb2csIHNlc3NmdCwgZGVic2VzLAorIG1kbXR5cCwg dHRucHJvdG8sIGNtYXNrLCBjbWRtc2ssIG5ldHdvcmssIG5ldHR5cGUsIHNvc2ksIHRubG0sCisg eGl0c3RhLCB3aGF0LCB0dHlmZCwgdHRwaXBlLCBxdWlldCwgYmFja2dyZCwgcGZsYWcsIHR0X2Ny ZCwgdHRfbGZkLAorIHRuX25sbSwgdHRmZGZsZywKKyB0dF9lc2NhcGUsIGp1c3RvbmUsIGNhcnJp ZXIsIHR0cHR5LCBod3Bhcml0eTsKKworI2lmbmRlZiBOT0RJQUwKK2V4dGVybiBpbnQgZGlhbG1o dSwgZGlhbHN0YTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmZGVmIENLTEVBUk4KK2V4dGVy biBGSUxFICogbGVhcm5mcDsKK2V4dGVybiBpbnQgbGVhcm5pbmc7CitzdGF0aWMgVUxPTkcgbGVh cm50MTsKK3N0YXRpYyBjaGFyIGxlYXJuYnVmW0xFQVJOQlVGU0laXSA9IHsgTlVMLCBOVUwgfTsK K3N0YXRpYyBpbnQgIGxlYXJuYmMgPSAwOworc3RhdGljIGludCAgbGVhcm5icCA9IDA7CitzdGF0 aWMgaW50ICBsZWFybnN0ID0gMDsKKyNlbmRpZiAvKiBDS0xFQVJOICovCisKK2V4dGVybiBsb25n IHNwZWVkOworZXh0ZXJuIGNoYXIgdHRuYW1lW10sIHNlc2ZpbFtdLCBteWhvc3RbXSwgKmNjbnRh YltdOworI2lmZGVmIFROQ09ERQorZXh0ZXJuIGludCB0bl9iX25sbSwgdG5fcmVtX2VjaG87Cisj ZW5kaWYgLyogVE5DT0RFICovCisKKyNpZmRlZiBDS19UUklHR0VSCitleHRlcm4gY2hhciAqIHR0 X3RyaWdnZXJbXSwgKiB0cmlnZ2VydmFsOworI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKworI2lm ZGVmIENLVElETEUKK2V4dGVybiBpbnQgdHRfaWRsZWxpbWl0LCB0dF9pZGxlYWN0OworZXh0ZXJu IGNoYXIgKiB0dF9pZGxlc3RyOworc3RhdGljIGludCBpZGxlbGltaXQgPSAwOworI2VuZGlmIC8q IENLVElETEUgKi8KK2V4dGVybiBpbnQgY3hfc3RhdHVzOwkJCS8qIENPTk5FQ1Qgc3RhdHVzIGNv ZGUgKi8KKworZXh0ZXJuIGludCBub3B1c2g7CisKKyNpZmRlZiBDS19BUEMKK2V4dGVybiBpbnQg YXBjYWN0aXZlOwkJCS8qIEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCAoQVBDKSAqLworZXh0 ZXJuIGludCBhcGNzdGF0dXM7CQkJLyogaXRlbXMgLi4uICovCitzdGF0aWMgaW50IGFwY2xlbmd0 aCA9IDA7CisjaWZkZWYgRENNREJVRgorZXh0ZXJuIGNoYXIgKmFwY2J1ZjsKKyNlbHNlCitleHRl cm4gY2hhciBhcGNidWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCitzdGF0aWMgaW50IGFwY2J1 ZmxlbiA9IEFQQ0JVRkxFTiAtIDI7CitleHRlcm4gaW50IHByb3RvY29sOworI2VuZGlmIC8qIENL X0FQQyAqLworI2lmbmRlZiBOT1hGRVIKK2V4dGVybiBpbnQgYXV0b2RsOwkJCS8qIEF1dG8gZG93 bmxvYWQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIENLX0FVVE9ETAorZXh0ZXJu IENIQVIga3NidWZbXTsKK2V4dGVybiBDSEFSIHN0Y2hyOworZXh0ZXJuIGludCBrc3RhcnRhY3Rp dmU7CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCitleHRl cm4gaW50IG1lX2F1dGg7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCisjaWZkZWYgQ0tf WFlaCisjaWZkZWYgWFlaX0lOVEVSTkFMCitzdGF0aWMgaW50IHptZGxvayA9IDE7CQkJLyogWm1v ZGVtIGF1dG9kb3dubG9hZHMgYXZhaWxhYmxlICovCisjZWxzZQorc3RhdGljIGludCB6bWRsb2sg PSAwOwkJCS8qIERlcGVuZHMgb24gZXh0ZXJuYWwgcHJvdG9jb2wgZGVmICovCisjZW5kaWYgLyog WFlaX0lOVEVSTkFMICovCisjZWxzZQorc3RhdGljIGludCB6bWRsb2sgPSAwOwkJCS8qIE5vdCBh dmFpbGFibGUgYXQgYWxsICovCisjZW5kaWYgLyogQ0tfWFlaICovCisKKyNpZm5kZWYgTk9TRVRL RVkJCQkvKiBLZXlib2FyZCBtYXBwaW5nICovCitleHRlcm4gS0VZICprZXltYXA7CQkJLyogU2lu Z2xlLWNoYXJhY3RlciBrZXkgbWFwICovCitleHRlcm4gTUFDUk8gKm1hY3JvdGFiOwkJCS8qIEtl eSBtYWNybyBwb2ludGVyIHRhYmxlICovCitzdGF0aWMgTUFDUk8ga21wdHIgPSBOVUxMOwkJLyog UG9pbnRlciB0byBjdXJyZW50IGtleSBtYWNybyAqLworI2VuZGlmIC8qIE5PU0VUS0VZICovCisK Ky8qIEdsb2JhbCB2YXJpYWJsZXMgbG9jYWwgdG8gdGhpcyBtb2R1bGUgKi8KKworc3RhdGljIGlu dAorICBhY3RpdmUgPSAwLAorICBxdWl0bm93ID0gMCwJCQkJLyogPGVzYy1jaGFyPlEgd2FzIHR5 cGVkICovCisgIGRvaGFuZ3VwID0gMCwJCQkJLyogPGVzYy1jaGFyPkggd2FzIHR5cGVkICovCisg IGluc2hpZnQgPSAwLAkJCQkvKiBTTy9TSSBzaGlmdCBzdGF0ZXMgKi8KKyAgb3V0c2hpZnQgPSAw OworCitzdGF0aWMgY2hhciBlY2J1ZlsxMF0sICplY2JwOwkJLyogRXNjYXBlIGNoYXIgYnVmZmVy ICYgcG9pbnRlciAqLworCisjaWZkZWYgQ0tfU01BTEwKKyNkZWZpbmUgSUJVRkwgMTUzNgkJCS8q IElucHV0IGJ1ZmZlciBsZW5ndGggKi8KKyNlbHNlCisjZGVmaW5lIElCVUZMIDQwOTYKKyNlbmRp ZiAvKiBDS19TTUFMTCAqLworCitzdGF0aWMgaW50IG9iYyA9IDA7CQkJLyogT3V0cHV0IGJ1ZmZl ciBjb3VudCAqLworCisjaWZuZGVmIE9YT1MKKyNkZWZpbmUgT0JVRkwgMTAyNAkJCS8qIE91dHB1 dCBidWZmZXIgbGVuZ3RoICovCisjZWxzZQorI2RlZmluZSBPQlVGTCBJQlVGTAorI2VuZGlmIC8q IE9YT1MgKi8KKworI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIFRNUExFTiA0MDk2CQkJLyogVGVt cG9yYXJ5IG1lc3NhZ2UgYnVmZmVyIGxlbmd0aCAqLworI2Vsc2UKKyNkZWZpbmUgVE1QTEVOIDIw MAorI2VuZGlmIC8qIEJJR0JVRk9LICovCisKKyNpZmRlZiBEWU5BTUlDCitzdGF0aWMgY2hhciAq aWJ1ZiA9IE5VTEwsICpvYnVmID0gTlVMTCwgKnRlbXAgPSBOVUxMOyAvKiBCdWZmZXJzICovCisj ZWxzZQorc3RhdGljIGNoYXIgaWJ1ZltJQlVGTF0sIG9idWZbT0JVRkxdLCB0ZW1wW1RNUExFTl07 CisjZW5kaWYgLyogRFlOQU1JQyAqLworCisjaWZkZWYgVE5DT0RFCitzdGF0aWMgY2hhciB0bm9w dFs0XTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFy ICppYnA7CQkJLyogSW5wdXQgYnVmZmVyIHBvaW50ZXIgKi8KKyNlbHNlCitzdGF0aWMgY2hhciAq aWJwID0gaWJ1ZjsJCS8qIElucHV0IGJ1ZmZlciBwb2ludGVyICovCisjZW5kaWYgLypEWU5BTUlD ICovCitzdGF0aWMgaW50IGliYyA9IDA7CQkJLyogSW5wdXQgYnVmZmVyIGNvdW50ICovCisKKyNp ZmRlZiBEWU5BTUlDCitzdGF0aWMgY2hhciAqb2JwOwkJCS8qIE91dHB1dCBidWZmZXIgcG9pbnRl ciAqLworI2Vsc2UKK3N0YXRpYyBjaGFyICpvYnAgPSBvYnVmOwkJLyogT3V0cHV0IGJ1ZmZlciBw b2ludGVyICovCisjZW5kaWYgLyogRFlOQU1JQyAqLworCisvKiBDaGFyYWN0ZXItc2V0IGl0ZW1z ICovCisKK3N0YXRpYyBpbnQgdW5pY29kZSA9IDA7CisKKyNpZm5kZWYgTk9DU0VUUworI2lmZGVm IENLX0FOU0lDIC8qIEFOU0kgQyBwcm90b3R5cGVzLi4uICovCitleHRlcm4gQ0hBUiAoKnhsc1tN QVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsgLyogQ2hhcmFjdGVyIHNldCAqLworZXh0 ZXJuIENIQVIgKCp4bHJbTUFYVENTRVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIHRyYW5z bGF0aW9uIGZ1bmN0aW9ucyAqLworc3RhdGljIENIQVIgKCpzeG8pKENIQVIpOwkvKiBMb2NhbCB0 cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KK3N0YXRpYyBDSEFSICgqcnhvKShDSEFSKTsJLyogZm9y IG91dHB1dCAoc2VuZGluZykgdGVybWluYWwgY2hhcnMgKi8KK3N0YXRpYyBDSEFSICgqc3hpKShD SEFSKTsJLyogYW5kIGZvciBpbnB1dCAocmVjZWl2aW5nKSB0ZXJtaW5hbCBjaGFycy4gKi8KK3N0 YXRpYyBDSEFSICgqcnhpKShDSEFSKTsKKyNlbHNlIC8qIE5vdCBBTlNJIEMuLi4gKi8KK2V4dGVy biBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7CS8qIENoYXJhY3RlciBz ZXQgKi8KK2V4dGVybiBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7CS8q IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyBDSEFSICgqc3hvKSgpOwkJLyogTG9j YWwgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCitzdGF0aWMgQ0hBUiAoKnJ4bykoKTsJCS8qIGZv ciBvdXRwdXQgKHNlbmRpbmcpIHRlcm1pbmFsIGNoYXJzICovCitzdGF0aWMgQ0hBUiAoKnN4aSko KTsJCS8qIGFuZCBmb3IgaW5wdXQgKHJlY2VpdmluZykgdGVybWluYWwgY2hhcnMuICovCitzdGF0 aWMgQ0hBUiAoKnJ4aSkoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworZXh0ZXJuIGludCBsYW5n dWFnZTsJCS8qIEN1cnJlbnQgbGFuZ3VhZ2UuICovCitzdGF0aWMgaW50IGxhbmdzdjsJCS8qIEZv ciByZW1lbWJlcmluZyBsYW5ndWFnZSBzZXR0aW5nLiAqLworZXh0ZXJuIHN0cnVjdCBjc2luZm8g ZmNzaW5mb1tdOyAvKiBGaWxlIGNoYXJhY3RlciBzZXQgaW5mby4gKi8KK2V4dGVybiBpbnQgdGNz ciwgdGNzbDsJCS8qIFRlcm1pbmFsIGNoYXJhY3RlciBzZXRzLCByZW1vdGUgJiBsb2NhbC4gKi8K K3N0YXRpYyBpbnQgdGNzOwkJCS8qIEludGVybWVkaWF0ZSAoInRyYW5zZmVyIikgY2hhcmFjdGVy IHNldC4gKi8KK3N0YXRpYyBpbnQgdGNzc2l6ZSA9IDA7CQkvKiBTaXplIG9mIHRjcyAqLworI2lm ZGVmIFVOSUNPREUJCQkJLyogVVRGLTggc3VwcG9ydCAqLworI2lmZGVmIENLX0FOU0lDCitleHRl cm4gaW50ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoVVNIT1JUKTsgIC8qIFVuaWNvZGUgdG8gRkNT ICovCitleHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIEZDUyB0 byBVbmljb2RlICovCitleHRlcm4gaW50ICgqeHVmKShVU0hPUlQpOwkJLyogVHJhbnNsYXRpb24g ZnVuY3Rpb24gVUNTIHRvIEZDUyAqLworZXh0ZXJuIFVTSE9SVCAoKnhmdSkoQ0hBUik7CQkvKiBU cmFuc2xhdGlvbiBmdW5jdGlvbiBGQ1MgdG8gVUNTICovCisjZWxzZQorZXh0ZXJuIGludCAoKnhs X3VmY1tNQVhGQ1NFVFMrMV0pKCk7CitleHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysx XSkoKTsKK2V4dGVybiBpbnQgKCp4dWYpKCk7CitleHRlcm4gVVNIT1JUICgqeGZ1KSgpOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworI2VuZGlmIC8qIE5PQ1NF VFMgKi8KKworc3RhdGljIGludCBwcmludGluZyA9IDA7CisKKy8qCisgIFdlIGRvIG5vdCBuZWVk IHRvIHBhcnNlIGFuZCByZWNvZ25pemUgZXNjYXBlIHNlcXVlbmNlcyBpZiB3ZSBhcmUgYmVpbmcg YnVpbHQKKyAgd2l0aG91dCBjaGFyYWN0ZXItc2V0IHN1cHBvcnQgQU5EIHdpdGhvdXQgQVBDIHN1 cHBvcnQuCisqLworI2lmZGVmIE5PRVNDU0VRCisjaWZkZWYgWFBSSU5UCisjdW5kZWYgWFBSSU5U CisjZW5kaWYgLyogWFBSSU5UICovCisKKyNlbHNlICAvKiBOT0VTQ1NFUSBub3QgZGVmaW5lZCBm cm9tIG91dHNpZGUgKi8KKworI2lmZGVmIE5PQ1NFVFMJCQkJLyogTm8gY2hhcmFjdGVyIHNldHMg Ki8KKyNpZm5kZWYgQ0tfQVBDCQkJCS8qIE5vIEFQQyAqLworI2lmbmRlZiBYUFJJTlQJCQkJLyog Tm8gdHJhbnNwYXJlbnQgcHJpbnRpbmcgKi8KKyNkZWZpbmUgTk9FU0NTRVEJCQkvKiBTbyBubyBl c2NhcGUgc2VxdWVuY2UgcmVjb2duaXplciAqLworI2VuZGlmIC8qIFhQUklOVCAqLworI2VuZGlm IC8qIENLX0FQQyAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNlbmRpZiAvKiBOT0VTQ1NFUSAq LworCisvKiBpbmVzY1tdIGFuZCBvbGRlc2NbXSBtYWRlIGdsb2JhbCAyMDEwLzAzLzAxIGZvciBJ TlBVVCBjb21tYW5kICovCisKK3N0YXRpYyBpbnQgZXNjc2VxID0gMDsJCQkvKiAxID0gUmVjb2du aXplciBpcyBhY3RpdmUgKi8KKy8qIHN0YXRpYyAqLyBpbnQgaW5lc2NbMl0gPSB7IDAsIDAgfTsJ LyogU3RhdGUgb2Ygc2VxdWVuY2UgcmVjb2duaXplciAqLworLyogc3RhdGljICovIGludCBvbGRl c2NbMl0gPSB7IC0xLCAtMSB9OyAvKiBQcmV2aW91cyBzdGF0ZSBvZiByZWNvZ25pemVyICovCisK KyNpZmRlZiBOT0VTQ1NFUQorI2RlZmluZSBFU19OT1JNQUwgMAkJCS8qIE5vcm1hbCwgbm90IGlu IGFuIGVzY2FwZSBzZXF1ZW5jZSAqLworI2RlZmluZSBjaGthZXMoeCx5KSAwCisjZWxzZQorLyoK KyAgQXMgb2YgQy1LZXJtaXQgNUEoMTc4KSwgdGhlIENPTk5FQ1QgY29tbWFuZCBza2lwcyBwYXN0 IEFOU0kgZXNjYXBlIHNlcXVlbmNlcworICB0byBhdm9pZCB0cmFuc2xhdGluZyB0aGUgY2hhcmFj dGVycyB3aXRoaW4gdGhlbS4gIFRoaXMgYWxsb3dzIHRoZSBDT05ORUNUCisgIGNvbW1hbmQgdG8g d29yayBjb3JyZWN0bHkgd2l0aCBhIGhvc3QgdGhhdCB1c2VzIGEgNy1iaXQgSVNPIDY0NiBuYXRp b25hbAorICBjaGFyYWN0ZXIgc2V0LCBpbiB3aGljaCBjaGFyYWN0ZXJzIGxpa2UgJ1snIHdvdWxk IG5vcm1hbGx5IGJlIGNvbnZlcnRlZCB0bworICBhY2NlbnRlZCBsZXR0ZXJzLCBydWluaW5nIHRo ZSB0ZXJtaW5hbCdzIGludGVycHJldGF0aW9uIChhbmQgZ2VuZXJhdGlvbikKKyAgb2YgZXNjYXBl IHNlcXVlbmNlcy4KKworICBBcyBvZiA1QSgxOTApLCB0aGUgQ09OTkVDVCBjb21tYW5kIHJlc3Bv bmRzIHRvIEFQQyBlc2NhcGUgc2VxdWVuY2VzCisgIChFU0MgXyB0ZXh0IEVTQyBcKSBpZiB0aGUg dXNlciBTRVRzIFRFUk1JTkFMIEFQQyBPTiBvciBVTkNIRUNLRUQsIGFuZCB0aGUKKyAgcHJvZ3Jh bSB3YXMgYnVpbHQgd2l0aCBDS19BUEMgZGVmaW5lZC4KKworICBOb24tQU5TSS9JU08tY29tcGxp YW50IGVzY2FwZSBzZXF1ZW5jZXMgYXJlIG5vdCBoYW5kbGVkLiAqLworCisvKiBTdGF0ZXMgZm9y IHRoZSBlc2NhcGUtc2VxdWVuY2UgcmVjb2duaXplci4gKi8KKworI2RlZmluZSBFU19OT1JNQUwg MAkJCS8qIE5vcm1hbCwgbm90IGluIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLworI2RlZmluZSBFU19H T1RFU0MgMQkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyIGlzIEVTQyAqLworI2RlZmluZSBFU19FU0NT RVEgMgkJCS8qIEluc2lkZSBhbiBlc2NhcGUgc2VxdWVuY2UgKi8KKyNkZWZpbmUgRVNfR09UQ1NJ IDMJCQkvKiBJbnNpZGUgYSBjb250cm9sIHNlcXVlbmNlICovCisjZGVmaW5lIEVTX1NUUklORyA0 CQkJLyogSW5zaWRlIERDUyxPU0MsUE0sIG9yIEFQQyBzdHJpbmcgKi8KKyNkZWZpbmUgRVNfVEVS TUlOIDUJCQkvKiAxc3QgY2hhciBvZiBzdHJpbmcgdGVybWluYXRvciAqLworCisvKgorICBBTlNJ IGVzY2FwZSBzZXF1ZW5jZSBoYW5kbGluZy4gIE9ubHkgdGhlIDctYml0IGZvcm0gaXMgdHJlYXRl ZCwgYmVjYXVzZQorICB0cmFuc2xhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGluIHRoZSA4LWJpdCBl bnZpcm9ubWVudCwgaW4gd2hpY2ggYWxsIEdMCisgIGNoYXJhY3RlcnMgYXJlIEFTQ0lJIGFuZCBu byB0cmFuc2xhdGlvbiB0YWtlcyBwbGFjZS4gIFNvIHdlIGRvbid0IGNoZWNrCisgIGZvciB0aGUg OC1iaXQgc2luZ2xlLWNoYXJhY3RlciB2ZXJzaW9ucyBvZiBDU0ksIERDUywgT1NDLCBBUEMsIG9y IFNULgorICBIZXJlIGlzIHRoZSBBTlNJIHNlcXVlbmNlIHJlY29nbml6ZXIgc3RhdGUgdGFibGUs IGZvbGxvd2VkIGJ5IHRoZSBjb2RlCisgIHRoYXQgaW1wbGVtZW50cyBpdC4KKworICBEZWZpbml0 aW9uczoKKyAgICBDQU4gPSBDYW5jZWwgICAgICAgICAgICAgICAgICAgICAgIDAxLzA4ICAgICAg ICAgQ3RybC1YCisgICAgU1VCID0gU3Vic3RpdHV0ZSAgICAgICAgICAgICAgICAgICAwMS8xMCAg ICAgICAgIEN0cmwtWgorICAgIERDUyA9IERldmljZSBDb250cm9sIFNlcXVlbmNlICAgICAgMDEv MTEgMDUvMDAgICBFU0MgUAorICAgIENTSSA9IENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciAg MDEvMTEgMDUvMTEgICBFU0MgWworICAgIFNUICA9IFN0cmluZyBUZXJtaW5hdG9yICAgICAgICAg ICAgMDEvMTEgMDUvMTIgICBFU0MgXAorICAgIE9TQyA9IE9wZXJhdGluZyBTeXN0ZW0gQ29tbWFu ZCAgICAgMDEvMTEgMDUvMTMgICBFU0MgXQorICAgIFBNICA9IFByaXZhY3kgTWVzc2FnZSAgICAg ICAgICAgICAgMDEvMTEgMDUvMTQgICBFU0MgXgorICAgIEFQQyA9IEFwcGxpY2F0aW9uIFByb2dy YW0gQ29tbWFuZCAgMDEvMTEgMDUvMTUgICBFU0MgXworCisgIEFOU0kgZXNjYXBlIHNlcXVlbmNl IHJlY29nbml6ZXI6CisKKyAgICBTdGF0ZSAgICBJbnB1dCAgTmV3IFN0YXRlICA7IENvbW1lbnRh cnkKKworICAgIE5PUk1BTCAgIChzdGFydCkgICAgICAgICAgIDsgU3RhcnQgaW4gTk9STUFMIHN0 YXRlCisKKyAgICAoYW55KSAgICBDQU4gICAgTk9STUFMICAgICA7IF5YIGNhbmNlbHMKKyAgICAo YW55KSAgICBTVUIgICAgTk9STUFMICAgICA7IF5aIGNhbmNlbHMKKworICAgIE5PUk1BTCAgIEVT QyAgICBHT1RFU0MgICAgIDsgQmVnaW4gZXNjYXBlIHNlcXVlbmNlCisgICAgTk9STUFMICAgb3Ro ZXIgICAgICAgICAgICAgOyBOT1JNQUwgY29udHJvbCBvciBncmFwaGljIGNoYXJhY3RlcgorCisg ICAgR09URVNDICAgRVNDICAgICAgICAgICAgICAgOyBTdGFydCBhZ2FpbgorICAgIEdPVEVTQyAg IFsgICAgICBHT1RDU0kgICAgIDsgQ1NJCisgICAgR09URVNDICAgUCAgICAgIFNUUklORyAgICAg OyBEQ1MgaW50cm9kdWNlciwgY29uc3VtZSB0aHJvdWdoIFNUCisgICAgR09URVNDICAgXSAgICAg IFNUUklORyAgICAgOyBPU0MgaW50cm9kdWNlciwgY29uc3VtZSB0aHJvdWdoIFNUCisgICAgR09U RVNDICAgXiAgICAgIFNUUklORyAgICAgOyBQTSAgaW50cm9kdWNlciwgY29uc3VtZSB0aHJvdWdo IFNUCisgICAgR09URVNDICAgXyAgICAgIFNUUklORyAgICAgOyBBUEMgaW50cm9kdWNlciwgY29u c3VtZSB0aHJvdWdoIFNUCisgICAgR09URVNDICAgMC4ufiAgIE5PUk1BTCAgICAgOyAwMy8wMCB0 aHJvdWdoIDE3LzE0ID0gRmluYWwgY2hhcmFjdGVyCisgICAgR09URVNDICAgb3RoZXIgIEVTQ1NF USAgICAgOyBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBjb250cm9sIGNoYXJhY3RlcgorCisgICAg RVNDU0VRICAgRVNDICAgIEdPVEVTQyAgICAgOyBTdGFydCBhZ2FpbgorICAgIEVTQ1NFUSAgIDAu Ln4gICBOT1JNQUwgICAgIDsgMDMvMDAgdGhyb3VnaCAxNy8xNCA9IEZpbmFsIGNoYXJhY3Rlcgor ICAgIEVTQ1NFUSAgIG90aGVyICAgICAgICAgICAgIDsgSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQg Y29udHJvbCBjaGFyYWN0ZXIKKworICAgIEdPVENTSSAgIEVTQyAgICBHT1RFU0MgICAgIDsgU3Rh cnQgYWdhaW4KKyAgICBHT1RDU0kgICBALi5+ICAgTk9STUFMICAgICA7IDA0LzAwIHRocm91Z2gg MTcvMTQgPSBGaW5hbCBjaGFyYWN0ZXIKKyAgICBHT1RDU0kgICBvdGhlciAgICAgICAgICAgICA7 IEludGVybWVkaWF0ZSBjaGFyIG9yIGlnbm9yZWQgY29udHJvbCBjaGFyCisKKyAgICBTVFJJTkcg ICBFU0MgICAgVEVSTUlOICAgICA7IE1heWJlIGhhdmUgU1QKKyAgICBTVFJJTkcgICBvdGhlciAg ICAgICAgICAgICA7IENvbnN1bWUgYWxsIGVsc2UKKworICAgIFRFUk1JTiAgIFwgICAgICBOT1JN QUwgICAgIDsgRW5kIG9mIHN0cmluZworICAgIFRFUk1JTiAgIG90aGVyICBTVFJJTkcgICAgIDsg U3RpbGwgaW4gc3RyaW5nCisqLworCisjaWZkZWYgWFBSSU5UCQkJCS8qIFRyYW5zcGFyZW50IHBy aW50IHN1cHBvcnQgKi8KKy8qCisgIFdlIGNhbid0IGp1c3QgcHJpbnQgZWFjaCBieXRlIGFzIGl0 IGNvbWVzIGluIGJlY2F1c2UgdGhlbiB0aGUgcHJpbnRlci1vZmYKKyAgc2VxdWVuY2Ugd291bGQg YmUgc2VudCB0byB0aGUgcHJpbnRlci4gIFRodXMgd2UgaGF2ZSB0byBidWZmZXIgdXAgZXNjYXBl CisgIHNlcXVlbmNlcyBhbmQgcHJpbnQgdGhlbSBvbmx5IHdoZW4gdGhleSBhcmUgY29tcGxldGUg QU5EIHdlIGtub3cgdGhleSBhcmUKKyAgbm90IHRoZSBwcmludGVyLW9mZiBzZXF1ZW5jZS4gIEFs bCBwcmludGluZyBpcyBkb25lIHZpYSB6c291dHgoWk1GSUxFLHMsbikuCisgIFRoaXMgYWxsb3dz IGZvciBzdHJpbmdzIHRoYXQgY29udGFpbiBOVUxzLiAgRG9uJ3QgbWl4IGNhbGxzIHRvIHpzb3V0 eCgpIHdpdGgKKyAgY2FsbHMgdG8gemNob3V0KCksIG9yIHRoZSBvdXRwdXQgd2lsbCBiZSBzY3Jh bWJsZWQuICBBbHNvIG5vdGUgdGhhdCB3aGVuCisgIHByaW50aW5nIGEgc2F2ZWQtdXAgZXNjYXBl IHNlcXVlbmNlLCB3ZSBuZXZlciBwcmludCBpdHMgZmluYWwgY2hhcmFjdGVyCisgIGJlY2F1c2Ug dGhhdCB3aWxsIGJlIHByaW50ZWQgaW4gdGhlIG1haW5saW5lIGNvZGUsIHVwb24gcmV0dXJuIGZy b20KKyAgY2hrYWVzKCkuICBOb3RlIHRoYXQgdGhlIHByaW50ZXItb24gc2VxdWVuY2UgaXMgcGFz c2VkIHRvIHRoZSBzY3JlZW47IHRoaXMKKyAgaXMgdW5hdm9pZGFibGUsIHNpbmNlIHdlIGRvbid0 IGtub3cgd2hhdCBpdCBpcyB1bnRpbCBhZnRlciB3ZSBnZXQgdG8gdGhlCisgIGVuZCwgYW5kIGZv ciBzY3JlZW4gZGlzcGxheSBwdXJwb3NlcyB3ZSBjYW4ndCBidWZmZXIgdXAgZXNjYXBlIHNlcXVl bmNlcworICBmb3IgbnVtZXJvdXMgcmVhc29ucy4gIFRoZXJlZm9yZSB3ZSBhbHNvIG11c3Qgb3V0 cHV0IHRoZSBwcmludGVyLW9mZgorICBzZXF1ZW5jZSwgb3RoZXJ3aXNlIGEgcmVhbCB0ZXJtaW5h bCBvciBlbXVsYXRvciB3aWxsIGJlIHN0dWNrIGluIHByaW50IG1vZGUuCisqLworZXh0ZXJuIGlu dCB0dF9wcmludDsKKyNkZWZpbmUgRVNDQlVGTEVOIDYzCitzdGF0aWMgY2hhciBlc2NidWZbRVND QlVGTEVOKzFdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGludCBlc2NidWZjID0gMDsKK3N0YXRp YyBpbnQgZG9udHByaW50ID0gMDsKKworVk9JRAorcHJpbnRvbigpIHsJCQkJLyogVHVybiBwcmlu dGluZyBvbiAqLworICAgIGludCB4LCBwcDsKKyAgICBjaGFyICogcDsKKyAgICBleHRlcm4gaW50 IHByaW50cGlwZSwgbm9wcmludGVyOworICAgIGV4dGVybiBjaGFyICogcHJpbnRlcm5hbWU7CisK KyAgICBpZiAobm9wcmludGVyKSB7CisJZGVidWcoRjExMCwiUFJJTlRFUiBPTiBOT1BSSU5URVIi LCIiLDApOworCXJldHVybjsKKyAgICB9CisgICAgcCA9IHByaW50ZXJuYW1lOworICAgIHBwID0g cHJpbnRwaXBlOworICAgIGlmICghcCkgcCA9ICIiOworICAgIGlmICghKnApIHsKKyNpZmRlZiBB TllCU0QKKwlwID0gImxwciI7CisjZWxzZQorCXAgPSAibHAiOworI2VuZGlmIC8qIEFOWUJTRCAq LworCXBwID0gMTsKKwlkZWJ1ZyhGMTEwLCJQUklOVEVSIERFRkFVTFQiLHAsMCk7CisgICAgfQor ICAgIGRlYnVnKEYxMTEsIlBSSU5URVIgT04iLHAscHApOworICAgIGlmIChwcCkgewkJCQkvKiBQ cmludGluZyB0byBwaXBlICovCisJeCA9IHp4Y21kKFpNRklMRSxwKTsKKyAgICB9IGVsc2UgewkJ CQkvKiBBcHBlbmQgdG8gZmlsZSAqLworCXN0cnVjdCBmaWxpbmZvIHh4OworCXh4LmJzID0gMDsg eHguY3MgPSAwOyB4eC5ybCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNjID0gMDsKKwl4eC50eXAgPSAw OyB4eC5kc3AgPSBYWUZaX0E7IHh4Lm9zX3NwZWNpZmljID0gTlVMOworCXh4LmxibG9wdHMgPSAw OworCXggPSB6b3Blbm8oWk1GSUxFLHAsTlVMTCwmeHgpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAx LCJQUklOVEVSIE9QRU4iLCIiLHgpOworICAgIHByaW50aW5nID0gMTsKK30KKworVk9JRAorcHJp bnRvZmYoKSB7CQkJCS8qIFR1cm4gcHJpbnRpbmcgb2ZmICovCisgICAgaW50IHg7CisgICAgZXh0 ZXJuIGludCBub3ByaW50ZXI7CisgICAgaWYgKG5vcHJpbnRlcikgeworCXByaW50aW5nID0gMDsK KwlkZWJ1ZyhGMTAwLCJQUklOVEVSIE9GRiBOT1BSSU5URVIiLCIiLDApOworCXJldHVybjsKKyAg ICB9CisgICAgZGVidWcoRjEwMCwiUFJJTlRFUiBPRkYiLCIiLDApOworICAgIGlmIChwcmludGlu ZykgeworCXggPSB6Y2xvc2UoWk1GSUxFKTsKKwlkZWJ1ZyhGMTAxLCJQUklOVEVSIENMT1NFIiwi Iix4KTsKKwlwcmludGluZyA9IDA7CisgICAgfQorfQorI2VuZGlmIC8qIFhQUklOVCAqLworCisv KgorICBDIEggSyBBIEUgUyAgLS0gIENoZWNrIEFOU0kgRXNjYXBlIFNlcXVlbmNlLgorCisgIENh bGwgd2l0aCBFQUNIIGNoYXJhY3RlciBpbiBpbnB1dCBzdHJlYW0uCisgIHNyYyA9IDAgbWVhbnMg YyBpcyBpbmNvbWluZyBmcm9tIHJlbW90ZTsgMSA9IGNoYXIgZnJvbSBrZXlib2FyZC4KKyAgU2V0 cyBnbG9iYWwgaW5lc2Nbc3JjXSB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gZXNjYXBlIHNlcXVlbmNl IHN0YXRlLgorICBSZXR1cm5zIDAgbm9ybWFsbHksIDEgaWYgYW4gQVBDIHNlcXVlbmNlIGlzIHRv IGJlIGV4ZWN1dGVkLgorICBIYW5kbGVzIHRyYW5zcGFyZW50IHByaW50aW5nIGludGVybmFsbHku CisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2Noa2FlcyhjaGFyIGMsIGludCBzcmMpCisjZWxz ZQorY2hrYWVzKGMsc3JjKSBjaGFyIGM7IGludCBzcmM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIGNoa2FlcyAqLyB7CisKKyAgICBkZWJ1ZyhGMTExLCJjaGthZXMgZW50cnkgaW5lc2MiLGNr aXRvYShzcmMpLGluZXNjW3NyY10pOworICAgIGRlYnVnKEYxMDEsImNoa2FlcyBjIiwiIixjKTsK KworICAgIGlmIChzcmMgPCAwIHx8IHNyYyA+IDEpCQkvKiBEb24ndCBhbGxvdyBiYWQgYXJncy4g Ki8KKyAgICAgIHJldHVybigwKTsKKworICAgIG9sZGVzY1tzcmNdID0gaW5lc2Nbc3JjXTsJCS8q IFJlbWVtYmVyIHByZXZpb3VzIHN0YXRlICovCisKKyNpZmRlZiBYUFJJTlQKKyAgICBpZiAoaW5l c2Nbc3JjXSAmJiAhc3JjKSB7CQkvKiBTYXZlIHVwIGVzY2FwZSBzZXEgZm9yIHByaW50aW5nICAq LworCWlmICghYykgcmV0dXJuKDApOwkJLyogSWdub3JlIE5VTHMgKi8KKwlpZiAoZXNjYnVmYyA8 IEVTQ0JVRkxFTikgeworCSAgICBlc2NidWZbZXNjYnVmYysrXSA9IGM7CisJICAgIGVzY2J1Zltl c2NidWZjXSA9IE5VTDsKKwkgICAgZGVidWcoRjExMSwiRVNDQlVGIDEiLGVzY2J1Zixlc2NidWZj KTsKKwl9IGVsc2UgewkJCS8qIEJ1ZmZlciBvdmVycnVuICovCisJICAgIGlmIChwcmludGluZyAm JiBlc2NidWZjKQkvKiBQcmludCB3aGF0J3MgdGhlcmUgc28gZmFyICovCisJICAgICAgenNvdXR4 KFpNRklMRSxlc2NidWYsZXNjYnVmYyk7CisJICAgIGVzY2J1ZmMgPSAxOwkJLyogY2xlYXIgaXQg b3V0ICovCisJICAgIGVzY2J1ZlswXSA9IGM7CQkvKiBhbmQgc3RhcnQgb2ZmIGZyZXNoIGJ1ZmZl ciAqLworCSAgICBlc2NidWZbMV0gPSBOVUw7CQkvKiB3aXRoIHRoaXMgY2hhcmFjdGVyLiAqLwor CX0KKyAgICB9CisjZW5kaWYgLyogWFBSSU5UICovCisKKyAgICBpZiAoYyA9PSBDQU4gfHwgYyA9 PSBTVUIpIHsJCS8qIENBTiBhbmQgU1VCIGNhbmNlbCBhbnkgc2VxdWVuY2UgKi8KKyNpZmRlZiBY UFJJTlQKKwlpZiAoIXNyYykgeworCSAgICBpZiAocHJpbnRpbmcgJiYgZXNjYnVmYyA+IDEpCisJ ICAgICAgenNvdXR4KFpNRklMRSxlc2NidWYsZXNjYnVmYy0xKTsKKwkgICAgZXNjYnVmYyA9IDA7 CQkvKiBDbGVhciBidWZmZXIgKi8KKwkgICAgZXNjYnVmWzBdID0gTlVMOworCX0KKyNlbmRpZiAv KiBYUFJJTlQgKi8KKwlpbmVzY1tzcmNdID0gRVNfTk9STUFMOworICAgIH0gZWxzZQkJCQkvKiBP dGhlcndpc2UgKi8KKworICAgICAgc3dpdGNoIChpbmVzY1tzcmNdKSB7CQkvKiBlbnRlciBzdGF0 ZSBzd2l0Y2hlciAqLworCWNhc2UgRVNfTk9STUFMOgkJCS8qIE5PUk1BTCBzdGF0ZSAqLworCSAg aWYgKGMgPT0gRVNDKSB7CQkvKiBHb3QgYW4gRVNDICovCisJICAgICAgaW5lc2Nbc3JjXSA9IEVT X0dPVEVTQzsJLyogQ2hhbmdlIHN0YXRlIHRvIEdPVEVTQyAqLworI2lmZGVmIFhQUklOVAorCSAg ICAgIGlmICghc3JjKSB7CisJCSAgZXNjYnVmYyA9IDE7CQkvKiBDbGVhciBlc2NhcGUgc2VxdWVu Y2UgYnVmZmVyICovCisJCSAgZXNjYnVmWzBdID0gYzsJLyogYW5kIGRlcG9zaXQgdGhlIEVTQyAq LworCQkgIGVzY2J1ZlsxXSA9IE5VTDsKKwkJICBkZWJ1ZyhGMTExLCJFU0NCVUYgMiIsZXNjYnVm LGVzY2J1ZmMpOworCSAgICAgIH0KKyNlbmRpZiAvKiBYUFJJTlQgKi8KKwkgIH0KKwkgIGJyZWFr OwkJCS8qIE90aGVyd2lzZSBzdGF5IGluIE5PUk1BTCBzdGF0ZSAqLworCisJY2FzZSBFU19HT1RF U0M6CQkJLyogR09URVNDIHN0YXRlIC0gcHJldiBjaGFyIHdhcyBFU0MqLworCSAgaWYgKGMgPT0g J1snKSB7CQkvKiBMZWZ0IGJyYWNrZXQgYWZ0ZXIgRVNDIGlzIENTSSAqLworCSAgICAgIGluZXNj W3NyY10gPSBFU19HT1RDU0k7CS8qIENoYW5nZSB0byBHT1RDU0kgc3RhdGUgKi8KKwkgIH0gZWxz ZSBpZiAoYyA9PSAnUCcgfHwgKGMgPiAwMTM0ICYmIGMgPCAwMTQwKSkgeyAvKiBQLCBdLCBeLCBv ciBfICovCisJICAgICAgaW5lc2Nbc3JjXSA9IEVTX1NUUklORzsJLyogU3dpdGNoIHRvIFNUUklO Ry1hYnNvcnB0aW9uIHN0YXRlICovCisjaWZkZWYgWFBSSU5UCisJICAgICAgZGVidWcoRjExMSwi RVNDQlVGIFNUUklORyIsZXNjYnVmLGVzY2J1ZmMpOworI2VuZGlmIC8qIFhQUklOVCAqLworI2lm ZGVmIENLX0FQQworCSAgICAgIC8qIElmIEFQQyBub3QgZGlzYWJsZWQgKi8KKwkgICAgICBpZiAo IXNyYyAmJiBjID09ICdfJyAmJiAoYXBjc3RhdHVzICYgQVBDX09OKSkgeworCQkgIGRlYnVnKEYx MDAsIkNPTk5FQ1QgQVBDIGJlZ2luIiwiIiwwKTsKKwkJICBhcGNhY3RpdmUgPSBBUENfUkVNT1RF OyAvKiBTZXQgQVBDLUFjdGl2ZSBmbGFnICovCisJCSAgYXBjbGVuZ3RoID0gMDsJLyogYW5kIHJl c2V0IEFQQyBidWZmZXIgcG9pbnRlciAqLworCSAgICAgIH0KKyNlbmRpZiAvKiBDS19BUEMgKi8K KwkgIH0gZWxzZSBpZiAoYyA+IDA1NyAmJiBjIDwgMDE3NykgeyAvKiBGaW5hbCBjaGFyYWN0ZXIg JzAnIHRocnUgJ34nICovCisJICAgICAgaW5lc2Nbc3JjXSA9IEVTX05PUk1BTDsJLyogQmFjayB0 byBub3JtYWwgKi8KKyNpZmRlZiBYUFJJTlQKKwkgICAgICBpZiAoIXNyYykgeworCQkgIGlmIChw cmludGluZyAmJiBlc2NidWZjID4gMSkgeworCQkgICAgICAvKiBEdW1wIGVzYyBzZXEgYnVmIHRv IHByaW50ZXIgKi8KKwkJICAgICAgenNvdXR4KFpNRklMRSxlc2NidWYsZXNjYnVmYy0xKTsKKwkJ ICAgICAgZGVidWcoRjExMSwiRVNDQlVGIFBSSU5UIDEiLGVzY2J1Zixlc2NidWZjKTsKKwkJICB9 CisKKwkJICBlc2NidWZjID0gMDsJCS8qIENsZWFyIHBhcmFtZXRlciBidWZmZXIgKi8KKwkJICBl c2NidWZbMF0gPSBOVUw7CisJICAgICAgfQorI2VuZGlmIC8qIFhQUklOVCAqLworCSAgfSBlbHNl IGlmIChjICE9IEVTQykgewkvKiBFU0MgaW4gYW4gZXNjYXBlIHNlcXVlbmNlLi4uICovCisJICAg ICAgaW5lc2Nbc3JjXSA9IEVTX0VTQ1NFUTsJLyogc3RhcnRzIGEgbmV3IGVzY2FwZSBzZXF1ZW5j ZSAqLworCSAgfQorCSAgYnJlYWs7CQkJLyogSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY3RybCBj aGFyICovCisKKwljYXNlIEVTX0VTQ1NFUToJCQkvKiBFU0NTRVEgLS0gaW4gYW4gZXNjYXBlIHNl cXVlbmNlICovCisJICBpZiAoYyA+IDA1NyAmJiBjIDwgMDE3NykgewkvKiBGaW5hbCBjaGFyYWN0 ZXIgJzAnIHRocnUgJ34nICovCisJICAgICAgaW5lc2Nbc3JjXSA9IEVTX05PUk1BTDsJLyogUmV0 dXJuIHRvIE5PUk1BTCBzdGF0ZS4gKi8KKyNpZmRlZiBYUFJJTlQKKwkgICAgICBpZiAoIXNyYykg eworCQkgIGlmIChwcmludGluZyAmJiBlc2NidWZjID4gMSkgeworCQkgICAgICB6c291dHgoWk1G SUxFLGVzY2J1Zixlc2NidWZjLTEpOworCQkgICAgICBkZWJ1ZyhGMTExLCJFU0NCVUYgUFJJTlQg MiIsZXNjYnVmLGVzY2J1ZmMpOworCQkgIH0KKwkJICBlc2NidWZjID0gMDsJCS8qIENsZWFyIGVz Y3NlcSBidWZmZXIgKi8KKwkJICBlc2NidWZbMF0gPSBOVUw7CisJICAgICAgfQorI2VuZGlmIC8q IFhQUklOVCAqLworCSAgfSBlbHNlIGlmIChjID09IEVTQykgewkvKiBFU0MgLi4uICovCisJICAg ICAgaW5lc2Nbc3JjXSA9IEVTX0dPVEVTQzsJLyogc3RhcnRzIGEgbmV3IGVzY2FwZSBzZXF1ZW5j ZSAqLworCSAgfQorCSAgYnJlYWs7CQkJLyogSW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY3RybCBj aGFyICovCisKKwljYXNlIEVTX0dPVENTSToJCQkvKiBHT1RDU0kgLS0gSW4gYSBjb250cm9sIHNl cXVlbmNlICovCisJICBpZiAoYyA+IDA3NyAmJiBjIDwgMDE3NykgewkvKiBGaW5hbCBjaGFyYWN0 ZXIgJ0AnIHRocnUgJ34nICovCisjaWZkZWYgWFBSSU5UCisJICAgICAgaWYgKCFzcmMgJiYgdHRf cHJpbnQpIHsJLyogUHJpbnRlciBlbmFibGVkPyAqLworCQkgIGlmIChjID09ICdpJykgewkvKiBG aW5hbCBjaGFyIGlzICJpIj8gKi8KKwkJICAgICAgY2hhciAqIHAgPSAoY2hhciAqKSAoZXNjYnVm ICsgZXNjYnVmYyAtIDQpOworCQkgICAgICBpZiAoIXN0cm5jbXAocCwgIlwwMzNbNWkiLCA0KSkg eyAvKiBUdXJuIHByaW50ZXIgb24gKi8KKwkJCSAgcHJpbnRvbigpOworCQkgICAgICB9IGVsc2Ug aWYgKCFzdHJuY21wKHAsICJcMDMzWzRpIiwgNCkpIHsgLyogT3Igb2ZmLi4uICovCisJCQkgIGlu dCBpOworCQkJICBwcmludG9mZigpOwkJCS8qIFR1cm4gb2ZmIHByaW50ZXIuICovCisJCQkgIGRv bnRwcmludCA9IDE7CisJCQkgIGZvciAoaSA9IDA7IGkgPCBlc2NidWZjOyBpKyspCS8qIEFuZCBv dXRwdXQgdGhlICovCisJCQkgICAgY2tjcHV0Yyhlc2NidWZbaV0pOyAgICAgICAgIC8qIHNlcXVl bmNlLiAqLworCQkgICAgICB9IGVsc2UgaWYgKHByaW50aW5nICYmIGVzY2J1ZmMgPiAxKSB7CisJ CQkgIHpzb3V0eChaTUZJTEUsZXNjYnVmLGVzY2J1ZmMtMSk7CisJCQkgIGRlYnVnKEYwMTEsIkVT Q0JVRiBQUklOVCAzIixlc2NidWYsZXNjYnVmYyk7CisJCSAgICAgIH0KKwkJICB9IGVsc2UgaWYg KHByaW50aW5nICYmIGVzY2J1ZmMgPiAxKSB7CisJCSAgICAgIHpzb3V0eChaTUZJTEUsZXNjYnVm LGVzY2J1ZmMtMSk7CisJCSAgICAgIGRlYnVnKEYxMTEsIkVTQ0JVRiBQUklOVCA0Iixlc2NidWYs ZXNjYnVmYyk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBpZiAoIXNyYykgeworCQkgIGVzY2J1 ZmMgPSAwOwkJLyogQ2xlYXIgZXNjIHNlcXVlbmNlIGJ1ZmZlciAqLworCQkgIGVzY2J1ZlswXSA9 IE5VTDsKKwkgICAgICB9CisjZW5kaWYgLyogWFBSSU5UICovCisJICAgICAgaW5lc2Nbc3JjXSA9 IEVTX05PUk1BTDsJLyogUmV0dXJuIHRvIE5PUk1BTC4gKi8KKwkgIH0gZWxzZSBpZiAoYyA9PSBF U0MpIHsJLyogRVNDIC4uLiAqLworCSAgICAgIGluZXNjW3NyY10gPSBFU19HT1RFU0M7CS8qIHN0 YXJ0cyBvdmVyLiAqLworCSAgfQorCSAgYnJlYWs7CisKKwljYXNlIEVTX1NUUklORzoJCQkvKiBJ bnNpZGUgYSBzdHJpbmcgKi8KKwkgIGlmIChjID09IEVTQykJCQkvKiBFU0MgbWF5IGJlIDFzdCBj aGFyIG9mIHRlcm1pbmF0b3IgKi8KKwkgICAgaW5lc2Nbc3JjXSA9IEVTX1RFUk1JTjsJLyogR28g c2VlLiAqLworI2lmZGVmIENLX0FQQworCSAgZWxzZSBpZiAoYXBjYWN0aXZlKSB7CQkvKiBJZiBp biBBUEMgKi8KKwkgICAgICBpZiAoYXBjbGVuZ3RoIDwgYXBjYnVmbGVuKSB7IC8qIGFuZCB0aGVy ZSBpcyByb29tLi4uICovCisJCSAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IGM7IC8qIGRlcG9zaXQg dGhpcyBjaGFyYWN0ZXIuICovCisJICAgICAgfSBlbHNlIHsJCQkvKiBCdWZmZXIgb3ZlcnJ1biAq LworCQkgIGFwY2FjdGl2ZSA9IDA7CS8qIERpc2NhcmQgd2hhdCB3ZSBnb3QgKi8KKwkJICBhcGNs ZW5ndGggPSAwOwkvKiBhbmQgZ28gYmFjayB0byBub3JtYWwgKi8KKwkJICBhcGNidWZbMF0gPSAw OwkvKiBOb3QgcHJldHR5LCBidXQgd2hhdCBlbHNlICovCisJCSAgaW5lc2Nbc3JjXSA9IEVTX05P Uk1BTDsgLyogY2FuIHdlIGRvPyAgKFNUIG1pZ2h0IG5vdCBjb21lKSAqLworCSAgICAgIH0KKwkg IH0KKyNlbmRpZiAvKiBDS19BUEMgKi8KKwkgIGJyZWFrOwkJCS8qIEFic29yYiBhbGwgb3RoZXIg Y2hhcmFjdGVycy4gKi8KKworCWNhc2UgRVNfVEVSTUlOOgkJCS8qIE1heWJlIGEgc3RyaW5nIHRl cm1pbmF0b3IgKi8KKwkgIGlmIChjID09ICdcXCcpIHsJCS8qIHdoaWNoIG11c3QgYmUgYmFja3Ns YXNoICovCisJICAgICAgaW5lc2Nbc3JjXSA9IEVTX05PUk1BTDsJLyogSWYgc28sIGJhY2sgdG8g Tk9STUFMICovCisjaWZkZWYgWFBSSU5UCisJICAgICAgaWYgKCFzcmMpIHsKKwkJICBpZiAocHJp bnRpbmcgJiYgZXNjYnVmYyA+IDEpIHsgLyogSWYgcHJpbnRpbmcuLi4gKi8KKwkJICAgICAgLyog UHJpbnQgZXNjIHNlcSBidWZmZXIgKi8KKwkJICAgICAgenNvdXR4KFpNRklMRSxlc2NidWYsZXNj YnVmYy0xKTsKKwkJICAgICAgZGVidWcoRjExMSwiRVNDQlVGIFBSSU5UIDUiLGVzY2J1Zixlc2Ni dWZjKTsKKwkJICB9CisJCSAgZXNjYnVmYyA9IDA7CQkvKiBDbGVhciBlc2NzZXEgYnVmZmVyICov CisJCSAgZXNjYnVmWzBdID0gTlVMOworCSAgICAgIH0KKyNlbmRpZiAvKiBYUFJJTlQgKi8KKyNp ZmRlZiBDS19BUEMKKwkgICAgICBpZiAoIXNyYyAmJiBhcGNhY3RpdmUpIHsJLyogSWYgaXQgd2Fz IGFuIEFQQyBzdHJpbmcsICovCisJCSAgZGVidWcoRjEwMSwiQ09OTkVDVCBBUEMgdGVybWluYXRl ZCIsIiIsYyk7CisJCSAgYXBjYnVmW2FwY2xlbmd0aF0gPSBOVUw7IC8qIHRlcm1pbmF0ZSBpdCBh bmQgdGhlbiAuLi4gKi8KKwkJICByZXR1cm4oMSk7CisJICAgICAgfQorI2VuZGlmIC8qIENLX0FQ QyAqLworCSAgfSBlbHNlIHsJCQkvKiBJdCdzIG5vdCBhIGJhY2tzbGFzaCBzby4uLiAqLworCSAg ICAgIGluZXNjW3NyY10gPSBFU19TVFJJTkc7CS8qIGJhY2sgdG8gc3RyaW5nIGFic29ycHRpb24u ICovCisjaWZkZWYgQ0tfQVBDCisJICAgICAgaWYgKGFwY2FjdGl2ZSkgewkJLyogSW4gQVBDIHN0 cmluZyAqLworCQkgIGlmIChhcGNsZW5ndGgrMSA8IGFwY2J1ZmxlbikgeyAvKiBJZiBlbm91Z2gg cm9vbSAqLworCQkgICAgICBhcGNidWZbYXBjbGVuZ3RoKytdID0gRVNDOyAvKiBkZXBvc2l0IHRo ZSBFc2MgKi8KKwkJICAgICAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IGM7ICAgLyogYW5kIHRoaXMg Y2hhcmFjdGVyIHRvby4gKi8KKwkJICB9IGVsc2UgewkJLyogQnVmZmVyIG92ZXJydW4gKi8KKwkJ ICAgICAgYXBjYWN0aXZlID0gMDsKKwkJICAgICAgYXBjbGVuZ3RoID0gMDsKKwkJICAgICAgYXBj YnVmWzBdID0gMDsKKwkJICAgICAgaW5lc2Nbc3JjXSA9IEVTX05PUk1BTDsKKwkJICB9CisJICAg ICAgfQorI2VuZGlmIC8qIENLX0FQQyAqLworCSAgfQorICAgICAgfQkvKiBzd2l0Y2goKSAqLwor ICAgIGRlYnVnKEYxMTEsImNoa2FlcyBleGl0IGluZXNjIixja2l0b2Eoc3JjKSxpbmVzY1tzcmNd KTsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogTk9FU0NTRVEgKi8KKworVk9JRAorI2lm ZGVmIENLX0FOU0lDCitMT0dDSEFSKGNoYXIgYykKKyNlbHNlCitMT0dDSEFSKGMpIGNoYXIgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogTE9HQ0hBUiAqLyB7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExvZyBjaGFyYWN0ZXIgYyB0byBzZXNzaW9uIGxvZyAqLworICAgIC8qIGJ1dCBz a2lwIG92ZXIgZXNjYXBlIHNlcXVlbmNlcyBpZiBzZXNzaW9uIGxvZyBpcyB0ZXh0ICovCisgICAg aWYgKGVzY3NlcSkgeworCWlmICgoc2Vzc2Z0ID09IFhZRlRfVCkgJiYgKGRlYnNlcyA9PSAwKSAm JgorCSAgICAoaW5lc2NbMF0gIT0gRVNfTk9STUFMIHx8IG9sZGVzY1swXSAhPSBFU19OT1JNQUwp KQorCSAgcmV0dXJuOworICAgIH0KKyAgICBsb2djaGFyKGMpOworfQorCisvKiAgQyBLIEMgUCBV IFQgQyAgLS0gIEMtS2VybWl0IENPTk5FQ1QgUHV0IENoYXJhY3RlciB0byBTY3JlZW4gICovCisv KgorICBPdXRwdXQgaXMgYnVmZmVyZWQgdG8gYXZvaWQgc2xvdyBzY3JlZW4gd3JpdGVzIG9uIGZh c3QgY29ubmVjdGlvbnMuCisqLworc3RhdGljIGludAorY2tjcHV0ZigpIHsJCQkJLyogRHVtcCB0 aGUgY29uc29sZSBvdXRwdXQgYnVmZmVyICovCisgICAgaW50IHggPSAwOworICAgIGlmIChvYmMg PiAwKQkJCS8qIElmIHdlIGhhdmUgYW55IGNoYXJhY3RlcnMsICovCisgICAgICB4ID0gY29ueG8o b2JjLG9idWYpOwkJLyogZHVtcCB0aGVtLCAqLworICAgIG9icCA9IG9idWY7CQkJCS8qIHJlc2V0 IHRoZSBwb2ludGVyICovCisgICAgb2JjID0gMDsJCQkJLyogYW5kIHRoZSBjb3VudGVyLiAqLwor ICAgIHJldHVybih4KTsJCQkJLyogUmV0dXJuIGNvbnhvJ3MgcmV0dXJuIGNvZGUgKi8KK30KKwor LyoKKyAgTk9URTogVGhpcyBpcyBwcm9iYWJseSB0aGUgcmlnaHQgcGxhY2UgZm9yIGNoYXJhY3Rl ci1zZXQgdHJhbnNsYXRpb24sCisgIHJhdGhlciB0aGFuIGRvd24gYmVsb3cgaW4gdGhlIG1haW5s aW5lIGNvZGUuICBja2NwdXRjKCkgd291bGQgYWN0IGxpa2UKKyAgeHBuYnl0ZSgpIGluIGNrY2Zu cy5jLCBhbmQgY2tjZ2V0YygpIHdvdWxkIGFjdCBsaWtlIHhnbmJ5dGUoKS4gIFRoaXMKKyAgd291 bGQgc2hpZWxkIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gYWxsIHRoZSBjb21wbGV4aXRpZXMg b2YgbWFueS10by1vbmUKKyAgYW5kIG9uZS10by1tYW55IGNvbnZlcnNpb25zLCBhbmQgd291bGQg YWxsb3cgaGFuZGxpbmcgb2YgS2FuamkgYW5kIG90aGVyCisgIENKSyBzZXRzIGFsb25nIHdpdGgg VVRGLTggYW5kIHRoZSByZXN0LgorKi8KK2ludAorY2tjcHV0YyhjKSBpbnQgYzsgeworICAgIGlu dCB4OworCisgICAgKm9icCsrID0gYyAmIDB4ZmY7CQkJLyogRGVwb3NpdCB0aGUgY2hhcmFjdGVy ICovCisgICAgb2JjKys7CQkJCS8qIENvdW50IGl0ICovCisgICAgaWYgKGliYyA9PSAwIHx8CQkJ LyogSWYgaW5wdXQgYnVmZmVyIGFib3V0IGVtcHR5ICovCisJb2JjID09IE9CVUZMKSB7CQkJLyog b3Igb3V0cHV0IGJ1ZmZlciBmdWxsICovCisJZGVidWcoRjEwMSwiQ09OTkVDVCBDS0NQVVRDIG9i YyIsIiIsb2JjKTsKKwl4ID0gY29ueG8ob2JjLG9idWYpOwkJLyogZHVtcCB0aGUgYnVmZmVyLCAq LworCW9icCA9IG9idWY7CQkJLyogcmVzZXQgdGhlIHBvaW50ZXIgKi8KKwlvYmMgPSAwOwkJCS8q IGFuZCB0aGUgY291bnRlci4gKi8KKwlyZXR1cm4oeCk7CQkJLyogUmV0dXJuIGNvbnhvJ3MgcmV0 dXJuIGNvZGUgKi8KKyAgICB9IGVsc2UgcmV0dXJuKDApOworfQorCisvKiAgQyBLIEMgRyBFIFQg QyAgLS0gIEMtS2VybWl0IENPTk5FQ1QgR2V0IENoYXJhY3RlciAgKi8KKy8qCisgIEJ1ZmZlcmVk IHJlYWQgZnJvbSBjb21tdW5pY2F0aW9uIGRldmljZS4KKyAgUmV0dXJucyB0aGUgbmV4dCBjaGFy YWN0ZXIsIHJlZmlsbGluZyB0aGUgYnVmZmVyIGlmIG5lY2Vzc2FyeS4KKyAgT24gZXJyb3IsIHJl dHVybnMgdHRpbmMncyByZXR1cm4gY29kZSAoc2VlIHR0aW5jKCkgZGVzY3JpcHRpb24pLgorICBE dW1teSBhcmd1bWVudCBmb3IgY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb25zIHdpdGggdHRp bmMoKQorICBzbyBhIHBvaW50ZXIgdG8gdGhpcyBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIHRvIHRu X2Rvb3AoKS4KKyovCitpbnQKK2NrY2dldGMoZHVtbXkpIGludCBkdW1teTsgeworICAgIGludCBj LCBuOworI2lmZGVmIENLX1NTTAorICAgIGV4dGVybiBpbnQgc3NsX2FjdGl2ZV9mbGFnLCB0bHNf YWN0aXZlX2ZsYWc7CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9O CisgICAgLyogTm8gYnVmZmVyaW5nIGZvciBwb3NzaWJseSBlbmNyeXB0ZWQgY29ubmVjdGlvbnMg Ki8KKyAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSAmJiBURUxPUFRfTUUoVEVMT1BUX0FV VEhFTlRJQ0FUSU9OKSkKKyAgICAgIHJldHVybih0dGluYygwKSk7CisjZW5kaWYgLyogQ0tfRU5D UllQVElPTiAqLworI2lmZGVmIENLX1NTTAorICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxz X2FjdGl2ZV9mbGFnKQorICAgICAgICByZXR1cm4odHRpbmMoMCkpOworI2VuZGlmIC8qIENLX1NT TCAqLworCisgICAgaWYgKGliYyA8IDEpIHsJCQkvKiBOZWVkIHRvIHJlZmlsbCBidWZmZXI/ICov CisJaWJjID0gMDsJCQkvKiBZZXMsIHJlc2V0IGNvdW50ICovCisJaWJwID0gaWJ1ZjsJCQkvKiBh bmQgYnVmZmVyIHBvaW50ZXIgKi8KKwljID0gdHRpbmMoMCk7CQkJLyogUmVhZCBvbmUgY2hhcmFj dGVyLCBibG9ja2luZyAqLworCWlmIChjIDwgMCkgewkJCS8qIElmIGVycm9yLCByZXR1cm4gZXJy b3IgY29kZSAqLworCSAgICByZXR1cm4oYyk7CisJfSBlbHNlIHsJCQkvKiBPdGhlcndpc2UsIGdv dCBvbmUgY2hhcmFjdGVyICovCisJICAgICppYnArKyA9IGM7CQkJLyogQWR2YW5jZSBidWZmZXIg cG9pbnRlciAqLworCSAgICBpYmMrKzsJCQkvKiBhbmQgY291bnQuICovCisJfQorCWlmICgobiA9 IHR0Y2hrKCkpID4gMCkgewkvKiBBbnkgbW9yZSB3YWl0aW5nPyAqLworCSAgICBpZiAobiA+IChJ QlVGTCAtIGliYykpCS8qIEdldCB0aGVtIGFsbCBhdCBvbmNlLiAqLworCSAgICAgIG4gPSBJQlVG TCAtIGliYzsJCS8qIERvbid0IG92ZXJmbG93IGJ1ZmZlciAqLworCSAgICAgIGlmICgobiA9IHR0 eGluKG4sKENIQVIgKilpYnApKSA+IDApIHsKKwkJICBpYmMgKz0gbjsJCS8qIEFkdmFuY2UgY291 bnRlciAqLworICAgICAgICAgICAgICB9CisJfSBlbHNlIGlmIChuIDwgMCkgewkJLyogRXJyb3I/ ICovCisJICAgIHJldHVybihuKTsJCQkvKiBSZXR1cm4gdGhlIGVycm9yIGNvZGUgKi8KKwl9CisJ aWJwID0gaWJ1ZjsJCQkvKiBQb2ludCB0byBiZWdpbm5pbmcgb2YgYnVmZmVyICovCisgICAgfQor ICAgIGMgPSAqaWJwKysgJiAweGZmOwkJCS8qIEdldCBuZXh0IGNoYXJhY3RlciBmcm9tIGJ1ZmZl ciAqLworICAgIGliYy0tOwkJCQkvKiBSZWR1Y2UgYnVmZmVyIGNvdW50ICovCisgICAgLyogZGVi dWcoRjAwMCwiQ0tDR0VUQyIsIiIsYyk7ICovCisgICAgcmV0dXJuKGMpOwkJCQkvKiBSZXR1cm4g dGhlIGNoYXJhY3RlciAqLworfQorCisvKgorICAgS2V5Ym9hcmQgaGFuZGxpbmcsIGJ1ZmZlcmVk IGZvciBzcGVlZCwgd2hpY2ggaXMgbmVlZGVkIHdoZW4gQy1LZXJtaXQgaXMKKyAgIGluIENPTk5F Q1QgbW9kZSBiZXR3ZWVuIHR3byBvdGhlciBjb21wdXRlcnMgdGhhdCBhcmUgdHJhbnNmZXJyaW5n IGRhdGEuCisqLworc3RhdGljIGNoYXIgKmticDsJCQkvKiBLZXlib2FyZCBpbnB1dCBidWZmZXIg cG9pbnRlciAqLworc3RhdGljIGludCBrYmM7CQkJCS8qIEtleWJvYXJkIGlucHV0IGJ1ZmZlciBj b3VudCAqLworCisjaWZkZWYgQ0tfU01BTEwJCQkJLyogS2V5Ym9hcmQgaW5wdXQgYnVmZmVyIGxl bmd0aCAqLworI2RlZmluZSBLQlVGTCAzMgkJCS8qIFNtYWxsIGZvciBQRFAtMTEgVU5JWCAqLwor I2Vsc2UKKyNkZWZpbmUgS0JVRkwgMjU3CQkJLyogUmVndWxhciBrZXJuZWwgc2l6ZSBmb3Igb3Ro ZXJzICovCisjZW5kaWYgLyogQ0tfU01BTEwgKi8KKworI2lmZGVmIERZTkFNSUMKK3N0YXRpYyBj aGFyICprYnVmID0gTlVMTDsKKyNlbHNlCitzdGF0aWMgY2hhciBrYnVmW0tCVUZMXTsKKyNlbmRp ZiAvKiBEWU5BTUlDICovCisKKy8qIE1hY3JvIGZvciByZWFkaW5nIGtleXN0cm9rZXMuICovCisK KyNkZWZpbmUgQ09OR0tTKCkgKCgoLS1rYmMpPj0wKSA/ICgoaW50KSgqa2JwKyspICYgMDM3Nykg OiBrYmdldCgpKQorCisvKgorICBOb3RlIHRoYXQgd2UgY2FsbCByZWFkKCkgZGlyZWN0bHkgaGVy ZSwgbm9ybWFsbHkgYSBuby1ubywgYnV0IGluIHRoaXMgY2FzZQorICB3ZSBrbm93IGl0J3MgVU5J WCBhbmQgd2UncmUgb25seSBkb2luZyB3aGF0IGNvbmluYygwKSB3b3VsZCBoYXZlIGRvbmUsCisg IGV4Y2VwdCB3ZSdyZSByZWFkaW5nIGEgYmxvY2sgb2YgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBq dXN0IG9uZS4gIFRoZXJlIGlzLAorICBhdCBwcmVzZW50LCBubyBjb254aW4oKSBhbmFsb2cgdG8g dHR4aW4oKSBmb3IgY2h1bmsgcmVhZHMsIGFuZCBpbnN0aXR1dGluZworICBvbmUgd291bGQgb25s eSBhZGQgZnVuY3Rpb24tY2FsbCBvdmVyaGVhZCBhcyBpdCB3b3VsZCBvbmx5IGJlIGEgd3JhcHBl ciBmb3IKKyAgYSByZWFkKCkgY2FsbCBhbnl3YXkuCisKKyAgQW5vdGhlciBub3RlOiBXZSBzdGlj ayBpbiB0aGlzIHJlYWQoKSB0aWxsIHRoZSB1c2VyIHR5cGVzIHNvbWV0aGluZy4KKyAgQnV0IHdl IGtub3cgdGhleSBhbHJlYWR5IGRpZCwgc2luY2Ugc2VsZWN0KCkgc2FpZCBzby4gIFRoZXJlZm9y ZSBzb21ldGhpbmcKKyAgd291bGQgbmVlZCB0byBiZSBtaWdodHkgd3JvbmcgYmVmb3JlIHdlIGdl dCBzdHVjayBoZXJlLgorKi8KK3N0YXRpYyBpbnQJCQkJLyogS2V5Ym9hcmQgYnVmZmVyIGZpbGxl ciAqLwora2JnZXQoKSB7CisjaWZkZWYgRUlOVFIKKyAgICBpbnQgdHJpZXMgPSAxMDsJCQkvKiBJ ZiByZWFkKCkgaXMgaW50ZXJydXB0ZWQsICovCisgICAgaW50IG9rID0gMDsKKyAgICB3aGlsZSAo dHJpZXMtLSA+IDApIHsJCS8qIHRyeSBhIGZldyB0aW1lcy4uLiAqLworI2VuZGlmIC8qIEVJTlRS ICovCisJa2JjID0gY29uY2hrKCk7CQkJLyogSG93IG1hbnkgY2hhcnMgd2FpdGluZz8gKi8KKwlk ZWJ1ZyhGMTAxLCJrYmdldCBrYmMiLCIiLGtiYyk7CisJaWYgKGtiYyA8IDEpCisJICBrYmMgPSAx OwkJCS8qIElmIG5vbmUgb3IgZHVubm8sIHdhaXQgZm9yIG9uZS4gKi8KKwllbHNlIGlmIChrYmMg PiBLQlVGTCkJCS8qIElmIHRvbyBtYW55LCAqLworCSAga2JjID0gS0JVRkw7CQkJLyogb25seSBy ZWFkIHRoaXMgbWFueS4gKi8KKwlpZiAoKGtiYyA9IHJlYWQoMCwga2J1Ziwga2JjKSkgPCAxKSB7 IC8qIE5vdyByZWFkIGl0L3RoZW0uICovCisJICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qga2JnZXQg ZXJybm8iLCIiLGVycm5vKTsJLyogR290IGFuIGVycm9yLiAqLworI2lmZGVmIEVJTlRSCisJICAg IGlmIChlcnJubyA9PSBFSU5UUikJCS8qIEludGVycnVwdGVkIHN5c3RlbSBjYWxsLiAqLworCSAg ICAgIGNvbnRpbnVlOwkJCS8qIFRyeSBhZ2FpbiwgdXAgdG8gbGltaXQuICovCisJICAgIGVsc2UJ CQkvKiBTb21ldGhpbmcgZWxzZS4gKi8KKyNlbmRpZiAvKiBFSU5UUiAqLworCSAgICAgIHJldHVy bigtMSk7CQkvKiBQYXNzIGFsb25nIHJlYWQoKSBlcnJvci4gKi8KKwl9CisjaWZkZWYgRUlOVFIK KwllbHNlIHsgb2sgPSAxOyBicmVhazsgfQorICAgIH0KKyAgICBpZiAoIW9rKSByZXR1cm4oLTEp OworI2VuZGlmIC8qIEVJTlRSICovCisgICAga2JwID0ga2J1ZjsJCQkJLyogQWRqdXN0IGJ1ZmZl ciBwb2ludGVyLCAqLworICAgIGtiYy0tOwkJCQkvKiBjb3VudCwgKi8KKyAgICByZXR1cm4oKGlu dCkoKmticCsrKSAmIDAzNzcpOwkvKiBhbmQgcmV0dXJuIGZpcnN0IGNoYXJhY3Rlci4gKi8KK30K KworI2lmZGVmIEJFQk9YCisvKgorICogQ3JlYXRlU29ja2V0UGFpciAtLQorICoKKyAqCVRoaXMg cHJvY2VkdXJlIGNyZWF0ZXMgYSBjb25uZWN0ZWQgc29ja2V0IHBhaXIKKyAqCisgKiBSZXN1bHRz OgorICoJMCBpZiBPSywgdGhlIGVycm9yIGlmIG5vdCBPSy4KKyAqCisgKiBTaWRlIGVmZmVjdHM6 CisgKglOb25lCisgKi8KK2ludAorc29ja2V0cGFpcihpbnQgKnBhaXIpIHsKKyAgICBpbnQgc2Vy dnNvY2s7CisgICAgaW50IHZhbDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2Vydl9hZGRyLCBj bGlfYWRkcjsKKyAgICBleHRlcm4gY2hhciBteWlwYWRkcltdOworCisgICAgZGVidWcoRjExMCwi c29ja2V0cGFpciIsbXlpcGFkZHIsMCk7CisKKyAgICBpZiAobXlpcGFkZHJbMF0gPT0gMCkKKyAg ICAgIGdldGxvY2FsaXBhZGRyKCk7CisKKyAgICBzZXJ2c29jayA9IHNvY2tldChBRl9JTkVULCBT T0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKHNlcnZzb2NrID09IDApIHsKKwlyZXR1cm4gaF9lcnJu bzsKKyAgICB9CisgICAgZGVidWcoRjExMSwic29ja2V0cGFpciIsInNvY2tldCIsc2VydnNvY2sp OworCisgICAgbWVtc2V0KCZzZXJ2X2FkZHIsIDAsIHNpemVvZihzZXJ2X2FkZHIpKTsKKyAgICBz ZXJ2X2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgc2Vydl9hZGRyLnNpbl9hZGRyLnNf YWRkciA9IGh0b25sKElOQUREUl9BTlkpOworICAgIHNlcnZfYWRkci5zaW5fcG9ydCA9IGh0b25z KDApOworCisgICAgdmFsID0gc2l6ZW9mKHNlcnZfYWRkcik7CisgICAgaWYgKGJpbmQoc2VydnNv Y2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZfYWRkciwgdmFsKSA8IDApIHsKKwljbG9zZXNv Y2tldChzZXJ2c29jayk7CisJcmV0dXJuIGhfZXJybm87CisgICAgfQorICAgIGRlYnVnKEYxMTEs InNvY2tldHBhaXIiLCJiaW5kIiwwKTsKKworICAgIGxpc3RlbihzZXJ2c29jaywgMSk7CisgICAg ZGVidWcoRjExMSwic29ja2V0cGFpciIsImxpc3RlbiIsMCk7CisKKyAgICBpZiAoZ2V0c29ja25h bWUoc2VydnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZfYWRkciwgJnZhbCkgPCAwKSB7 CisJY2xvc2Vzb2NrZXQoc2VydnNvY2spOworCXJldHVybiBoX2Vycm5vOworICAgIH0KKyAgICBk ZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwiZ2V0c29ja25hbWUiLDApOworCisgICAgcGFpclswXSA9 IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKHBhaXJbMF0gPT0gMCkg eworCWNsb3Nlc29ja2V0KHNlcnZzb2NrKTsKKwlyZXR1cm4gaF9lcnJubzsKKyAgICB9CisgICAg ZGVidWcoRjExMSwic29ja2V0cGFpciIsInNvY2tldCIscGFpclswXSk7CisKKyAgICBtZW1zZXQo JmNsaV9hZGRyLCAwLCBzaXplb2YoY2xpX2FkZHIpKTsKKyAgICBjbGlfYWRkci5zaW5fZmFtaWx5 ID0gQUZfSU5FVDsKKyAgICBjbGlfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIobXlp cGFkZHJbMF0/bXlpcGFkZHI6IjEyNy4wLjAuMSIpOworICAgIGNsaV9hZGRyLnNpbl9wb3J0ID0g c2Vydl9hZGRyLnNpbl9wb3J0OworCisgICAgaWYgKGNvbm5lY3QocGFpclswXSwoc3RydWN0IHNv Y2thZGRyICopICZjbGlfYWRkciwgc2l6ZW9mKGNsaV9hZGRyKSkgPCAwKSB7CisJY2xvc2Vzb2Nr ZXQocGFpclswXSk7CisJY2xvc2Vzb2NrZXQoc2VydnNvY2spOworCXJldHVybiBoX2Vycm5vOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJzb2NrZXRwYWlyIiwiY29ubmVjdCIsMCk7CisKKyAgICBw YWlyWzFdID0gYWNjZXB0KHNlcnZzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2X2FkZHIs ICZ2YWwpOworICAgIGlmIChwYWlyWzFdID09IDApIHsKKwljbG9zZXNvY2tldChwYWlyWzBdKTsK KwljbG9zZXNvY2tldChzZXJ2c29jayk7CisJcmV0dXJuIGhfZXJybm87CisgICAgfQorICAgIGRl YnVnKEYxMTEsInNvY2tldHBhaXIiLCJhY2NlcHQiLHBhaXJbMV0pOworCisgICAgY2xvc2Vzb2Nr ZXQoc2VydnNvY2spOworICAgIGRlYnVnKEYxMTEsInNvY2tldHBhaXIiLCJjbG9zZXNvY2tldCIs MCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2xvbmcKK2tiZHJlYWQodm9pZCAqIHBhcmFtKSB7Cisg ICAgaW50IHNvY2sgPSAoaW50KSBwYXJhbTsKKyAgICBjaGFyIGNoOworICAgIGludCByYyA9IDA7 CisKKyAgICBkZWJ1ZyhGMTExLCJrYmRyZWFkIiwic29jayIsc29jayk7CisKKyAgICB3aGlsZSAo cmMgPj0gMCkgeworCXJjID0gcmVhZChmaWxlbm8oc3RkaW4pLCAmY2gsIDEpOyAvKiBSZWFkIGEg Y2hhcmFjdGVyLiAqLworCWlmIChyYyA+IDApIHsKKwkgICAgcmMgPSBzZW5kKHNvY2ssJmNoLDEs MCk7CisJICAgIC8qIGRlYnVnKEYwMDAsImtiZHJlYWQiLCJzZW5kKCkiLGNoKTsgKi8KKwkgICAg cHJpbnRmKCJcclxuZ290OiAlYyByYyA9ICVkXHJcbiIsY2gscmMpOworCX0gZWxzZQorCSAgbXNs ZWVwKDEwMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImtiZHJlYWQiLCJ0ZXJtaW5hdGluZyIs MCk7CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAvKiBCRUJPWCAqLworCisjaWZkZWYgQ0tM RUFSTgorc3RhdGljIFZPSUQKK2xlYXJuY2hhcihjKSBpbnQgYzsgewkJCS8qIExlYXJuZWQgc2Ny aXB0IGtleWJvYXJkIGNoYXJhY3RlciAqLworICAgIGludCBjYzsKKyAgICBjaGFyIHhidWZbOF07 CisKKyAgICBpZiAoIWxlYXJuaW5nIHx8ICFsZWFybmZwKQorICAgICAgcmV0dXJuOworCisgICAg c3dpdGNoIChsZWFybnN0KSB7CQkJLyogTGVhcm4gc3RhdGUuLi4gKi8KKyAgICAgIGNhc2UgMDoJ CQkJLyogTmV1dHJhbCAqLworICAgICAgY2FzZSAxOgkJCQkvKiBOZXQgKi8KKwlpZiAobGVhcm5i YyA+IDApIHsJCS8qIEhhdmUgbmV0IGNoYXJhY3RlcnM/ICovCisJICAgIGNoYXIgYnVmW0xFQVJO QlVGU0laXTsKKwkgICAgaW50IGksIGosIG47CisJICAgIFVMT05HIHQ7CisKKwkgICAgdCA9IChV TE9ORykgdGltZSgwKTsJLyogQ2FsY3VsYXRlIElOUFVUIHRpbWVvdXQgKi8KKwkgICAgaiA9IHQg LSBsZWFybnQxOworCSAgICBqICs9IChqIC8gNCkgPiAwID8gKGogLyA0KSA6IDE7IC8qIEFkZCBz b21lIHNsb3AgKi8KKwkgICAgaWYgKGogPCAyKSBqID0gMjsJCSAgICAvKiAyIHNlY29uZHMgbWlu aW11bSAqLworCisJICAgIGZwdXRzKCJcbklOUFVUICIsbGVhcm5mcCk7CS8qIEdpdmUgSU5QVVQg Y29tbWFuZCBmb3IgdGhlbSAqLworCSAgICBmcHV0cyhja2l0b2EoaiksbGVhcm5mcCk7CisJICAg IGZwdXRzKCIgeyIsbGVhcm5mcCk7CisJICAgIGxlYXJudDEgPSB0OworCisJICAgIG4gPSBMRUFS TkJVRlNJWjsKKwkgICAgaWYgKGxlYXJuYmMgPCBMRUFSTkJVRlNJWikgeyAgLyogQ2lyY3VsYXIg YnVmZmVyICovCisJCW4gPSBsZWFybmJjOwkJICAvKiAgaGFzbid0IHdyYXBwZWQgeWV0LiAqLwor CQlsZWFybmJwID0gMDsKKwkgICAgfQorCSAgICBqID0gMDsJCQkvKiBDb3B5IHRvIGxpbmVhciBi dWZmZXIgKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewkvKiBOdW1iZXIgb2YgY2hh cnMgaW4gY2lyY3VsYXIgYnVmICovCisKKwkJY2MgPSBsZWFybmJ1ZlsobGVhcm5icCArIGkpICUg TEVBUk5CVUZTSVpdOworCisJCS8qIExhdGVyIGFjY291bnQgZm9yIHByb21wdHMgdGhhdCBlbmQg d2l0aCBhIG5ld2xpbmU/ICovCisKKwkJaWYgKGNjID09IENSICYmIGogPiAwKSB7CisJCSAgICBp ZiAoYnVmW2otMV0gIT0gTEYpCisJCSAgICAgIGogPSAwOworCQl9CisJCWJ1ZltqKytdID0gY2M7 CisJICAgIH0KKwkgICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgewkvKiBOb3cgY29weSBvdXQg dGhlIGJ1ZmZlciAqLworCQljYyA9IGJ1ZltpXTsJCS8qIGludGVycHJldGluZyBjb250cm9sIGNo YXJzICovCisJCWlmIChjYyA9PSAwKSB7CQkvKiBXZSBkb24ndCBJTlBVVCBOVUxzICovCisJCSAg ICBjb250aW51ZTsKKwkJfSBlbHNlIGlmIChjYyA8IFNQIHx8CS8qIENvbnRyb2xzIG5lZWQgcXVv dGluZyAqLworCQkJICAgKGNjID4gMTI2ICYmIGNjIDwgMTYwKSkgeworCQkgICAgY2ttYWttc2co eGJ1Ziw4LCJcXHsiLGNraXRvYSgoaW50KWNjKSwifSIsTlVMTCk7CisJCSAgICBmcHV0cyh4YnVm LGxlYXJuZnApOworCQl9IGVsc2UgewkJLyogUGxhaW4gY2hhcmFjdGVyICovCisJCSAgICBwdXRj KGNjLGxlYXJuZnApOworCQl9CisJICAgIH0KKwkgICAgZnB1dHMoIn1cbklGIEZBSUwgU1RPUCAx IElOUFVUIHRpbWVvdXQiLGxlYXJuZnApOworCSAgICBsZWFybmJjID0gMDsKKwl9CisJbGVhcm5i cCA9IDA7CisJZnB1dHMoIlxuUEFVU0UgMVxuT1VUUFVUICIsbGVhcm5mcCk7IC8qIEVtaXQgT1VU UFVUIGFuZCBmYWxsIHRocnUgKi8KKworICAgICAgY2FzZSAyOgkJCQkvKiBBbHJlYWR5IGluIEtl eWJvYXJkIHN0YXRlICovCisJaWYgKGMgPT0gMCkgeworCSAgICBmcHV0cygiXFxOIixsZWFybmZw KTsKKwl9IGVsc2UgaWYgKGMgPT0gLTcpIHsKKwkgICAgZnB1dHMoIlxcQiIsbGVhcm5mcCk7CisJ fSBlbHNlIGlmIChjID09IC04KSB7CisJICAgIGZwdXRzKCJcXEwiLGxlYXJuZnApOworCX0gZWxz ZSBpZiAoYyA8IFNQIHx8IChjID4gMTI2ICYmIGMgPCAxNjApKSB7CisJICAgIGNrbWFrbXNnKHhi dWYsOCwiXFx7Iixja2l0b2EoKGludCljKSwifSIsTlVMTCk7CisJICAgIGZwdXRzKHhidWYsbGVh cm5mcCk7CisJfSBlbHNlIHsKKwkgICAgcHV0YyhjLGxlYXJuZnApOworCX0KKyAgICB9Cit9Cisj ZW5kaWYgLyogQ0tMRUFSTiAqLworCitzdGF0aWMgaW50IHByaW50YmFyID0gMDsKKworI2RlZmlu ZSBPVVRYQlVGU0laIDE1CitzdGF0aWMgQ0hBUiBpbnhidWZbT1VUWEJVRlNJWisxXTsJLyogSG9z dC10by1zY3JlZW4gZXhwYW5zaW9uIGJ1ZmZlciAqLworc3RhdGljIGludCBpbnhjb3VudCA9IDA7 CQkvKiBhbmQgY291bnQgKi8KK3N0YXRpYyBDSEFSIG91dHhidWZbT1VUWEJVRlNJWisxXTsJLyog S2V5Ym9hcmQtdG8taG9zdCBleHBhbnNpb24gYnVmICovCitzdGF0aWMgaW50IG91dHhjb3VudCA9 IDA7CQkvKiBhbmQgY291bnQgKi8KKworaW50Citjb25lY3QoKSB7CisgICAgaW50IHJjID0gMDsJ CQkJLyogUmV0dXJuIGNvZGU6IDAgPSBmYWlsLCAxID0gT0sgKi8KKyAgICBpbnQgaSwgeCA9IDAs IHByZXYgPSAtMTsJCS8qIFJlYXNvbiBjb2RlIGluIGN4X3N0YXR1cyAqLworI2lmZGVmIENLTEVB Uk4KKyAgICBpbnQgY3JmbGFnID0gMDsKKyNlbmRpZiAvKiBDS0xFQVJOICovCisgICAgcmVnaXN0 ZXIgaW50IGMgPSAtMSwgYzIsIGNzYXZlOwkvKiBDaGFyYWN0ZXJzICovCisjaWZkZWYgVE5DT0RF CisgICAgaW50IHR4OwkJCQkvKiBGb3IgVGVsbmV0IG5lZ290aWF0aW9ucyAqLworI2VuZGlmIC8q IFROQ09ERSAqLworICAgIGludCBhcGNyYyA9IDA7CQkJLyogRm9yIEFQQyBhbmQgdHJhbnNwYXJl bnQgcHJpbnQgKi8KKyAgICBpbnQgbiwga2Jpbiwgc2Nybm91dDsJCS8qIHNlbGVjdCgpIGl0ZW1z Li4uICovCisgICAgZmRfc2V0IGluLCBvdXQsIGVycjsJCS8qIEZpbGUgZGVzY3JpcHRvciBzZXRz ICovCisgICAgaW50IGdvdG5ldCA9IDA7CQkJLyogRmxhZyBmb3IgbmV0IHJlYWR5IHRvIHJlYWQg Ki8KKyAgICBpbnQgZ290a2JkID0gMDsJCQkvKiBGbGFnIGZvciBrZXlib2FyZCByZWFkeSB0byBy ZWFkICovCisgICAgaW50IG9sZHBydCA9IDA7CQkJLyogVXNlZCB3aXRoIHByaW50aW5nICovCisg ICAgaW50IG1zZ2ZsZyA9IDA7CisgICAgY2hhciBjYnVmWzJdOwkJCS8qIERpdHRvICovCisKKyNp ZmRlZiBCRUJPWAorICAgIGludCB0aWQgPSAwOwkJCS8qIFRocmVhZCBJRCAqLworICAgIGludCBw YWlyWzJdOwkJCS8qIFNvY2tldCBQYWlyICovCisgICAgQ0hBUiBjaDsKKyAgICBDSEFSIGJ1Zls2 NF07CisjZW5kaWYgLyogQkVCT1ggKi8KKworICAgIGN4X3N0YXR1cyA9IENTWF9JTlRFUk5BTDsK KyAgICBkZWJvayA9IDE7CisKKyNpZmRlZiBCRUJPWAorICAgIHsKKwkvKiBDcmVhdGUgYSBzb2Nr ZXQgcGFpciB0byBiZSB1c2VkIGZvciB0aGUga2V5Ym9hcmQgaW5wdXQgKi8KKwlpZiAoc29ja2V0 cGFpcihwYWlyKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJjb25lY3QiLCJ1bmFibGUgdG8gY3JlYXRl IHNvY2tldCBwYWlyIiwwKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJZGVidWcoRjExMSwiY29u bmVjdCIsInNvY2tldCBwYWlyWzBdIixwYWlyWzBdKTsKKwlkZWJ1ZyhGMTExLCJjb25uZWN0Iiwi c29ja2V0IHBhaXJbMV0iLHBhaXJbMV0pOworCisJLyogQXNzaWduIG9uZSBlbmQgb2YgdGhlIHNv Y2tldCB0byBrYmluICovCisJa2JpbiA9IHBhaXJbMF07CisgICAgICAgIHRpZCA9IHNwYXduX3Ro cmVhZChrYmRyZWFkLAorCQkJICAgIktiZCB0byBTb2NrZXQgUGFpciIsCisJCQkgICAgQl9OT1JN QUxfUFJJT1JJVFksCisJCQkgICAodm9pZCAqKXBhaXJbMV0KKwkJCSAgICk7CisgICAgICAgIHJl c3VtZV90aHJlYWQodGlkKTsKKwlkZWJ1ZyhGMTEwLCJjb25uZWN0IiwidGlkIix0aWQpOworICAg IH0KKyNlbHNlIC8qIEJFQk9YICovCisgICAga2JpbiA9IGZpbGVubyhzdGRpbik7CQkvKiBzdGRp biBmaWxlIGRlc2NyaXB0b3IgKi8KKyNlbmRpZiAvKiBCRUJPWCAqLworCisgICAgc2Nybm91dCA9 IGZpbGVubyhzdGRvdXQpOwkJLyogc3Rkb3V0IGZpbGUgZGVzY3JpcHRvciAqLworCisjaWZkZWYg Q0tfVFJJR0dFUgorICAgIG1ha2VzdHIoJnRyaWdnZXJ2YWwsTlVMTCk7CQkvKiBSZXNldCB0cmln Z2VyICovCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCisjaWZkZWYgWFBSSU5UCisgICAgZXNj YnVmYyA9IDA7CQkJLyogUmVzZXQgZXNjLXNlcXVlbmNlIGJ1ZmZlciAqLworICAgIGVzY2J1Zlsw XSA9IE5VTDsKKyNlbmRpZiAvKiBYUFJJTlQgKi8KKyAgICBjYnVmWzFdID0gTlVMOworCisgICAg dHRpbW9mZigpOwkJCQkvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworICAgIGlm ICghbG9jYWwpIHsJCQkvKiBCZSBzdXJlIHdlJ3JlIG5vdCBpbiByZW1vdGUgbW9kZSAqLworI2lm ZGVmIE5FVENPTk4KKyNpZmRlZiBORVdGVFAKKwlpZiAoZnRwaXNjb25uZWN0ZWQoKSkKKwkgIHBy aW50ZigiU29ycnksIHlvdSBjYW4ndCBDT05ORUNUIHRvIGFuIEZUUCBzZXJ2ZXJcbiIpOworCWVs c2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkgIHByaW50ZigiU29ycnksIHlvdSBtdXN0IFNFVCBM SU5FIG9yIFNFVCBIT1NUIGZpcnN0XG4iKTsKKyNlbHNlCisJcHJpbnRmKCJTb3JyeSwgeW91IG11 c3QgU0VUIExJTkUgZmlyc3RcbiIpOworI2VuZGlmIC8qIE5FVENPTk4gKi8KKwlyZXR1cm4oMCk7 CisgICAgfQorICAgIGlmIChzcGVlZCA8IDBMICYmIG5ldHdvcmsgPT0gMCAmJiB0dGZkZmxnID09 IDApIHsKKwlwcmludGYoIlNvcnJ5LCB5b3UgbXVzdCBTRVQgU1BFRUQgZmlyc3RcbiIpOworCXJl dHVybigwKTsKKyAgICB9CisjaWZkZWYgVENQU09DS0VUCisgICAgaWYgKG5ldHdvcmsgJiYgIXR0 cGlwZSAmJiAobmV0dHlwZSAhPSBORVRfVENQQiAmJiBuZXR0eXBlICE9IE5FVF9QVFkpKSB7CisJ cHJpbnRmKCJTb3JyeSwgbmV0d29yayB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCXJldHVybigw KTsKKyAgICB9CisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZmRlZiBEWU5BTUlDCisgICAg aWYgKCFpYnVmKSB7CisJaWYgKCEoaWJ1ZiA9IG1hbGxvYyhJQlVGTCsxKSkpIHsgLyogQWxsb2Nh dGUgaW5wdXQgbGluZSBidWZmZXIgKi8KKwkgICAgcHJpbnRmKCJTb3JyeSwgQ09OTkVDVCBpbnB1 dCBidWZmZXIgY2FuJ3QgYmUgYWxsb2NhdGVkXG4iKTsKKwkgICAgcmV0dXJuKDApOworCX0gZWxz ZSB7CisJICAgIGlicCA9IGlidWY7CisJICAgIGliYyA9IDA7CisJfQorICAgIH0KKyAgICBpZiAo IW9idWYpIHsKKwlpZiAoIShvYnVmID0gbWFsbG9jKE9CVUZMKzEpKSkgeyAvKiBBbGxvY2F0ZSBv dXRwdXQgbGluZSBidWZmZXIgKi8KKwkgICAgcHJpbnRmKCJTb3JyeSwgQ09OTkVDVCBvdXRwdXQg YnVmZmVyIGNhbid0IGJlIGFsbG9jYXRlZFxuIik7CisJICAgIHJldHVybigwKTsKKwl9IGVsc2Ug eworCSAgICBvYnAgPSBvYnVmOworCSAgICBvYmMgPSAwOworCX0KKyAgICB9CisgICAgaWYgKCFr YnVmKSB7CisJaWYgKCEoa2J1ZiA9IG1hbGxvYyhLQlVGTCsxKSkpIHsgLyogQWxsb2NhdGUga2V5 Ym9hcmQgaW5wdXQgYnVmZmVyICovCisJICAgIHByaW50ZigiU29ycnksIENPTk5FQ1Qga2V5Ym9h cmQgYnVmZmVyIGNhbid0IGJlIGFsbG9jYXRlZFxuIik7CisJICAgIHJldHVybigwKTsKKwl9Cisg ICAgfQorICAgIGlmICghdGVtcCkgeworCWlmICghKHRlbXAgPSBtYWxsb2MoVE1QTEVOKzEpKSkg eyAvKiBBbGxvY2F0ZSB0ZW1wb3JhcnkgYnVmZmVyICovCisJICAgIHByaW50ZigiU29ycnksIENP Tk5FQ1QgdGVtcG9yYXJ5IGJ1ZmZlciBjYW4ndCBiZSBhbGxvY2F0ZWRcbiIpOworCSAgICByZXR1 cm4oMCk7CisJfQorICAgIH0KKyNlbHNlCisgICAgb2JwID0gb2J1ZjsKKyAgICBvYmMgPSAwOwor I2VuZGlmIC8qIERZTkFNSUMgKi8KKworICAgIGticCA9IGtidWY7CQkJCS8qIEFsd2F5cyBjbGVh ciB0aGVzZS4gKi8KKyAgICAqa2JwID0gTlVMOwkJCQkvKiBObyBuZWVkIHRvIHByZXNlcnZlIHRo ZW0gYmV0d2VlbiAqLworICAgIGtiYyA9IDA7CQkJCS8qIENPTk5FQ1Qgc2Vzc2lvbnMuICovCisK KyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNv bmVjdCBlbnRyeSB0dHlmZCIsIiIsdHR5ZmQpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgY29uZWN0 IGVudHJ5IGliYyIsIiIsaWJjKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNvbmVjdCBlbnRyeSBv YmMiLCIiLG9iYyk7CisJZGVidWcoRjEwMSwiQ09OTkVDVCBjb25lY3QgZW50cnkga2JjIiwiIixr YmMpOworI2lmZGVmIENLX1RSSUdHRVIKKwlkZWJ1ZyhGMTEwLCJDT05ORUNUIGNvbmVjdCB0cmln Z2VyIix0dF90cmlnZ2VyWzBdLDApOworI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKwlpZiAodHR5 ZmQgPiAtMSkgeworCSAgICBuID0gdHRjaGsoKTsKKwkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBj b25lY3QgZW50cnkgdHRjaGsiLCIiLG4pOworCX0KKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KworICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBJZiBjb21tdW5pY2F0aW9uIGRldmljZSBub3Qg b3BlbiAqLworI2lmZGVmIFRUTEVCVUYKKyAgICAgICAgaW50IG4gPSBsZV9pbmJ1ZigpOworICAg ICAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGxlX2luYnVmKCkiLCJ0dHlmZCA8IDAiLG4pOworICAg ICAgICBpZiAobiA+IDApIHsKKyAgICAgICAgICAgIHdoaWxlIChuLS0pIHsKKyAgICAgICAgICAg ICAgICBDSEFSIGNoOworICAgICAgICAgICAgICAgIGxlX2dldGNoYXIoJmNoKTsKKyAgICAgICAg ICAgICAgICBjb25vYyhjaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oMCk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBUVExFQlVGICovCisKKwlkZWJ1ZyhGMTAxLCJDT05ORUNU IHR0bnByb3RvIiwiIix0dG5wcm90byk7CisJZGVidWcoRjExMSwiQ09OTkVDVCBvcGVuaW5nIix0 dG5hbWUsMCk7IC8qIE9wZW4gaXQgbm93ICovCisJaWYgKHR0b3Blbih0dG5hbWUsCisJCSAgICZs b2NhbCwKKwkJICAgbmV0d29yayA/IC1uZXR0eXBlIDogbWRtdHlwLAorCQkgICAwCisJCSAgICkg PCAwKSB7CisJICAgIGNrbWFrbXNnKHRlbXAsVE1QTEVOLCJTb3JyeSwgY2FuJ3Qgb3BlbiAiLHR0 bmFtZSxOVUxMLE5VTEwpOworCSAgICBwZXJyb3IodGVtcCk7CisJICAgIGRlYnVnKEYxMTAsIkNP Tk5FQ1Qgb3BlbiBmYWlsdXJlIix0dG5hbWUsMCk7CisJICAgIHJldHVybigwKTsKKwl9CisKKyNp ZmRlZiBJS1NfT1BUSU9OCisJLyogSWYgcGVlciBpcyBpbiBLZXJtaXQgc2VydmVyIG1vZGUsIHJl dHVybiBub3cuICovCisJaWYgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFy dCkgeworCSAgICBjeF9zdGF0dXMgPSBDU1hfSUtTRDsKKwkgICAgcmV0dXJuKDApOworCX0KKyNl bmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgfQorICAgIGRvaGFuZ3VwID0gMDsJCQkvKiBIYW5n dXAgbm90IHJlcXVlc3RlZCB5ZXQgKi8KKworICAgIG1zZ2ZsZyA9ICFxdWlldAorI2lmZGVmIENL X0FQQworICAgICAgJiYgIWFwY2FjdGl2ZQorI2VuZGlmIC8qIENLX0FQQyAqLworCTsKKworICAg IGlmIChtc2dmbGcpIHsKKyNpZmRlZiBORVRDT05OCisJaWYgKG5ldHdvcmspIHsKKyNpZmRlZiBD S19FTkNSWVBUSU9OCisJICAgIGV4dGVybiBpbnQgbWVfZW5jcnlwdCwgdV9lbmNyeXB0OworCSAg ICBpZiAoY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKSkKKwkgICAgICBw cmludGYoIlNFQ1VSRSBjb25uZWN0aW9uIHRvIGhvc3QgJXMiLHR0bmFtZSk7CisJICAgIGVsc2UK KyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisJICAgICAgaWYgKHR0cGlwZSB8fCB0dHB0eSkK KwkJcHJpbnRmKCJDb25uZWN0aW5nIHZpYSBjb21tYW5kIFwiJXNcIiIsdHRuYW1lKTsKKwkgICAg ICBlbHNlCisJCXByaW50ZigiQ29ubmVjdGluZyB0byBob3N0ICVzIix0dG5hbWUpOworCX0gZWxz ZSB7CisjZW5kaWYgLyogTkVUQ09OTiAqLworCSAgICBwcmludGYoIkNvbm5lY3RpbmcgdG8gJXMi LHR0bmFtZSk7CisJICAgIGlmIChzcGVlZCA+IC0xTCkgcHJpbnRmKCIsIHNwZWVkICVsZCIsc3Bl ZWQpOworI2lmZGVmIE5FVENPTk4KKwl9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCWlmICh0dF9l c2NhcGUpIHsKKwkgICAgcHJpbnRmKCJcclxuIik7CisJICAgIHNob2VzYyhlc2NhcGUpOworCSAg ICBwcmludGYoIlR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgQyB0byBnZXQg YmFjayxcclxuIik7CisJICAgIHByaW50Zigib3IgZm9sbG93ZWQgYnkgPyB0byBzZWUgb3RoZXIg b3B0aW9ucy5cclxuIik7CisJfSBlbHNlIHsKKwkgICAgcHJpbnRmKCIuXHJcblxuRVNDQVBFIENI QVJBQ1RFUiBJUyBESVNBQkxFRFxyXG5cbiIpOworCX0KKwlpZiAoc2VzbG9nKSB7CisJICAgIGV4 dGVybiBpbnQgc2xvZ3RzOworCSAgICBjaGFyICogcyA9ICIiOworCSAgICBzd2l0Y2ggKHNlc3Nm dCkgeworCSAgICAgIGNhc2UgWFlGVF9EOgorCQlzID0gImRlYnVnIjsgYnJlYWs7CisJICAgICAg Y2FzZSBYWUZUX1Q6CisJCXMgPSBzbG9ndHMgPyAidGltZXN0YW1wZWQtdGV4dCIgOiAidGV4dCI7 IGJyZWFrOworCSAgICAgIGRlZmF1bHQ6CisJCXMgPSAiYmluYXJ5IjsKKwkgICAgfQorCSAgICBw cmludGYoIlNlc3Npb24gTG9nOiAlcywgJXMgKCVkKSBcclxuIixzZXNmaWwscyxzZXNzZnQpOwor CX0KKwlpZiAoZGVic2VzKSBwcmludGYoIkRlYnVnZ2luZyBEaXNwbGF5Li4uKVxyXG4iKTsKKyAg ICB9CisKKy8qIENvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsIGFuZCBjb21tdW5pY2F0aW9uIGxp bmUgKi8KKworICAgIGlmIChjb25iaW4oKGNoYXIpZXNjYXBlKSA8IDApIHsKKwlwcmludGYoIlNv cnJ5LCBjYW4ndCBjb25kaXRpb24gY29uc29sZSB0ZXJtaW5hbFxuIik7CisJZmZsdXNoKHN0ZG91 dCk7CisJcmV0dXJuKDApOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNtYXNrIiwi IixjbWFzayk7CisgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBjbWRtc2siLCIiLGNtZG1zayk7Cisg ICAgZGVidWcoRjEwMSwiQ09OTkVDVCBzcGVlZCBiZWZvcmUgdHR2dCIsIiIsc3BlZWQpOworICAg IGlmICgobiA9IHR0dnQoc3BlZWQsZmxvdykpIDwgMCkgewkvKiBFbnRlciAidmlydHVhbCB0ZXJt aW5hbCIgbW9kZSAqLworCWlmICghbmV0d29yaykgeworCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNU IHR0dnQiLCIiLG4pOworCSAgICB0dGhhbmcoKTsJCQkvKiBIYW5nIHVwIGFuZCBjbG9zZSB0aGUg ZGV2aWNlLiAqLworCSAgICB0dGNsb3MoMCk7CisJICAgIGRvbG9nZW5kKCk7CisJICAgIGlmICh0 dG9wZW4odHRuYW1lLAkJLyogT3BlbiBpdCBhZ2Fpbi4uLiAqLworCQkgICAgICAgJmxvY2FsLAor CQkgICAgICAgbmV0d29yayA/IC1uZXR0eXBlIDogbWRtdHlwLAorCQkgICAgICAgMAorCQkgICAg ICAgKSA8IDApIHsKKwkJY3hfc3RhdHVzID0gQ1NYX0lOVEVSTkFMOworCQlja21ha21zZyh0ZW1w LFRNUExFTiwiU29ycnksIGNhbid0IHJlb3BlbiAiLHR0bmFtZSxOVUxMLE5VTEwpOworCQlwZXJy b3IodGVtcCk7CisJCXJldHVybigwKTsKKwkgICAgfQorI2lmZGVmIElLU19PUFRJT04KKwkgICAg aWYgKFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkgeworCQljeF9zdGF0 dXMgPSBDU1hfSUtTRDsKKwkJcmV0dXJuKDApOworCSAgICB9CisjZW5kaWYgLyogSUtTX09QVElP TiAqLworCisJICAgIGlmICh0dHZ0KHNwZWVkLGZsb3cpIDwgMCkgewkvKiBUcnkgdmlydHVhbCB0 ZXJtaW5hbCBtb2RlIGFnYWluLiAqLworCQljb25yZXMoKTsJCS8qIEZhaWx1cmUgdGhpcyB0aW1l IGlzIGZhdGFsLiAqLworCQlwcmludGYoIlNvcnJ5LCBDYW4ndCBjb25kaXRpb24gY29tbXVuaWNh dGlvbiBsaW5lXG4iKTsKKwkJY3hfc3RhdHVzID0gQ1NYX0lOVEVSTkFMOworCQlyZXR1cm4oMCk7 CisJICAgIH0KKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgdHR2dCBvaywgZXNj YXBlIiwiIixlc2NhcGUpOworCisgICAgLyogRGVzcGl0ZSB0dHZ0KCkgdGhpcyBpcyBzdGlsbCBu ZWVkZWQgaW4gSFAtVVggKi8KKyAgICAvKiBiZWNhdXNlIG9mIHRoZSBIUC05MDAwIDxSRVNFVD4g a2V5LiovCisKKyAgICBzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKyAgICBzaWduYWwoU0lHUVVJ VCwgU0lHX0lHTik7CisKKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNhcnJpZXItd2F0Y2giLCIi LGNhcnJpZXIpOworICAgIGlmICgoIW5ldHdvcmsgCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAg ICB8fCBpc3RuY29tcG9ydCgpCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCSkgJiYgKGNhcnJp ZXIgIT0gQ0FSX09GRikpIHsKKwlpbnQgeDsKKwl4ID0gdHRnbWRtKCk7CisJZGVidWcoRjEwMCwi Q09OTkVDVCB0dGdtZG0iLCIiLHgpOworCWlmICgoeCA+IC0xKSAmJiAhKHggJiBCTV9EQ0QpKSB7 CisjaWZuZGVmIE5PSElOVFMKKwkgICAgZXh0ZXJuIGludCBoaW50czsKKyNlbmRpZiAvKiBOT0hJ TlRTICovCisJICAgIGRlYnVnKEYxMDAsIkNPTk5FQ1QgdHRnbWRtIENEIHRlc3QgZmFpbHMiLCIi LHgpOworCSAgICBjb25yZXMoKTsKKwkgICAgcHJpbnRmKCI/Q2FycmllciByZXF1aXJlZCBidXQg bm90IGRldGVjdGVkLlxuIik7CisjaWZuZGVmIE5PSElOVFMKKwkgICAgY3hfc3RhdHVzID0gQ1NY X0NBUlJJRVI7CisJICAgIGlmICghaGludHMpCisJICAgICAgcmV0dXJuKDApOworCSAgICBwcmlu dGYoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwkgICAgcHJpbnRm KCIgSGludDogVG8gQ09OTkVDVCB0byBhIHNlcmlhbCBkZXZpY2UgdGhhdFxuIik7CisJICAgIHBy aW50ZigiIGlzIG5vdCBwcmVzZW50aW5nIHRoZSBDYXJyaWVyIERldGVjdCBzaWduYWwsXG4iKTsK KwkgICAgcHJpbnRmKCIgZmlyc3QgdGVsbCBDLUtlcm1pdCB0bzpcblxuIik7CisJICAgIHByaW50 ZigiICAgU0VUIENBUlJJRVItV0FUQ0ggT0ZGXG5cbiIpOworCSAgICBwcmludGYoIioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpOworI2VuZGlmIC8qIE5PSElOVFMgKi8K KwkgICAgcmV0dXJuKDApOworCX0KKwlkZWJ1ZyhGMTAwLCJDT05ORUNUIHR0Z21kbSBvayIsIiIs MCk7CisgICAgfQorCisgICAgLyogTm93IHdlIGFyZSBjb25uZWN0ZWQuICovCisKKyAgICBpZiAo bXNnZmxnIHx8IHByaW50YmFyKQorICAgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIpOworICAgIGZmbHVzaChzdGRvdXQp OworCisjaWZuZGVmIE5PQ1NFVFMKKy8qIFNldCB1cCBjaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9u cyAqLworCisgICAgdW5pY29kZSA9IDA7CQkJLyogQXNzdW1lIFVuaWNvZGUgd29uJ3QgYmUgaW52 b2x2ZWQgKi8KKyAgICB0Y3MgPSAwOwkJCQkvKiAiVHJhbnNmZXIiIG9yICJPdGhlciIgY2hhcnNl dCAqLworICAgIHN4byA9IHJ4byA9IE5VTEw7CQkJLyogSW5pdGlhbGl6ZSBieXRlLXRvLWJ5dGUg ZnVuY3Rpb25zICovCisgICAgc3hpID0gcnhpID0gTlVMTDsKKworICAgIGlmICh0Y3NyICE9IHRj c2wpIHsJCQkvKiBSZW1vdGUgYW5kIGxvY2FsIHNldHMgZGlmZmVyLi4uICovCisjaWZkZWYgVU5J Q09ERQorCWlmICh0Y3NyID09IEZDX1VURjggfHwJCS8qIFJlbW90ZSBjaGFyc2V0IGlzIFVURi04 ICovCisJICAgIHRjc2wgPT0gRkNfVVRGOCkgewkJLyogb3IgbG9jYWwgb25lIGlzLiAqLworCSAg ICB4dWYgPSB4bF91ZmNbdGNzbF07CQkvKiBJbmNvbWluZyBVbmljb2RlIHRvIGxvY2FsICovCisJ ICAgIGlmICh4dWYgfHwgdGNzbCA9PSBGQ19VVEY4KSB7CisJCXRjcyA9ICh0Y3NyID09IEZDX1VU RjgpID8gdGNzbCA6IHRjc3I7IC8qIFRoZSAib3RoZXIiIHNldCAqLworCQl4ZnUgPSB4bF9mY3Vb dGNzXTsJLyogTG9jYWwgYnl0ZSB0byByZW1vdGUgVW5pY29kZSAqLworCQlpZiAoeGZ1KQorCQkg IHVuaWNvZGUgPSAodGNzciA9PSBGQ19VVEY4KSA/IDEgOiAyOworCSAgICB9CisJICAgIHRjc3Np emUgPSBmY3NpbmZvW3Rjc10uc2l6ZTsgLyogU2l6ZSBvZiBvdGhlciBjaGFyYWN0ZXIgc2V0LiAq LworCX0gZWxzZSB7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCSAgICB0Y3MgPSBnZXR0Y3ModGNz cix0Y3NsKTsJLyogR2V0IGludGVybWVkaWF0ZSBzZXQuICovCisJICAgIHN4byA9IHhsc1t0Y3Nd W3Rjc2xdOwkvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbiAqLworCSAgICByeG8gPSB4bHJbdGNzXVt0 Y3NyXTsJLyogcG9pbnRlcnMgZm9yIG91dHB1dCBmdW5jdGlvbnMgKi8KKwkgICAgc3hpID0geGxz W3Rjc11bdGNzcl07CS8qIGFuZCBmb3IgaW5wdXQgZnVuY3Rpb25zLiAqLworCSAgICByeGkgPSB4 bHJbdGNzXVt0Y3NsXTsKKyNpZmRlZiBVTklDT0RFCisJfQorI2VuZGlmIC8qIFVOSUNPREUgKi8K KyAgICB9CisvKgorICBUaGlzIGlzIHRvIHByZXZlbnQgdXNlIG9mIHptc3R1ZmYoKSBhbmQgemRz dHVmZigpIGJ5IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4KKyAgVGhleSBvbmx5IHdvcmsgd2l0aCBk aXNrIGkvbywgbm90IHdpdGggY29tbXVuaWNhdGlvbiBpL28uICBMdWNraWx5IFJ1c3NpYW4KKyAg dHJhbnNsYXRpb24gZnVuY3Rpb25zIGRvbid0IGRvIGFueSBzdHVmZmluZy4uLgorKi8KKyAgICBs YW5nc3YgPSBsYW5ndWFnZTsKKyNpZm5kZWYgTk9DWVJJTAorICAgIGlmIChsYW5ndWFnZSAhPSBM X1JVU1NJQU4pCisjZW5kaWYgLyogTk9DWVJJTCAqLworICAgICAgbGFuZ3VhZ2UgPSBMX1VTQVND SUk7CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJ ZGVidWcoRjEwMSwiQ09OTkVDVCB0Y3MiLCIiLHRjcyk7CisJZGVidWcoRjEwMSwiQ09OTkVDVCB0 Y3NsIiwiIix0Y3NsKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHRjc3IiLCIiLHRjc3IpOworCWRl YnVnKEYxMDEsIkNPTk5FQ1QgZmNzaW5mb1t0Y3NsXS5zaXplIiwiIixmY3NpbmZvW3Rjc2xdLnNp emUpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgZmNzaW5mb1t0Y3NyXS5zaXplIiwiIixmY3NpbmZv W3Rjc3JdLnNpemUpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdW5pY29kZSIsIiIsdW5pY29kZSk7 CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZk ZWYgQ0tfWFlaCisjaWZuZGVmIFhZWl9JTlRFUk5BTAorICAgIHsKKwlleHRlcm4gaW50IGJpbmFy eTsJCS8qIFNlZSBhYm91dCBaTU9ERU0gYXV0b2Rvd25sb2FkcyAqLworCWNoYXIgKiBzOworCXMg PSBiaW5hcnkgPyBwdGFiW1BST1RPX1pdLnBfYl9yY21kIDogcHRhYltQUk9UT19aXS5wX3RfcmNt ZDsKKwlpZiAoIXMpIHMgPSAiIjsKKwl6bWRsb2sgPSAoKnMgIT0gTlVMKTsJCS8qIE9LIGlmIHdl IGhhdmUgZXh0ZXJuYWwgY29tbWFuZHMgKi8KKyAgICB9CisjZW5kaWYgLyogWFlaX0lOVEVSTkFM ICovCisjZW5kaWYgLyogQ0tfWFlaICovCisKKyNpZm5kZWYgTk9FU0NTRVEKKy8qCisgIFdlIG5l ZWQgdG8gYWN0aXZhdGUgdGhlIGVzY2FwZS1zZXF1ZW5jZSByZWNvZ25pdGlvbiBmZWF0dXJlIHdo ZW46CisgICAoYSkgdHJhbnNsYXRpb24gaXMgZWxlY3RlZCwgQU5ECisgICAoYikgdGhlIGxvY2Fs IGFuZC9vciByZW1vdGUgc2V0IGlzIGEgNy1iaXQgc2V0IG90aGVyIHRoYW4gVVMgQVNDSUk7Cisg IE9yOgorICAgU0VUIFNFU1NJT04tTE9HIGlzIFRFWFQgKHNvIHdlIGNhbiBzdHJpcCBlc2NhcGUg c2VxdWVuY2VzIG91dCBvZiB0aGUgbG9nKTsKKyAgT3I6CisgICBTRVQgVEVSTUlOQUwgQVBDIGlz IG5vdCBPRkYgKGhhbmRsZWQgaW4gdGhlIG5leHQgc3RhdGVtZW50KS4KKyovCisgICAgZXNjc2Vx ID0gKHRjcyAhPSBUQ19UUkFOU1ApICYmCS8qIE5vdCB0cmFuc3BhcmVudCAqLworICAgICAgKGZj c2luZm9bdGNzbF0uc2l6ZSA9PSAxMjggfHwgZmNzaW5mb1t0Y3NyXS5zaXplID09IDEyOCkgJiYg LyogNyBiaXRzICovCisJKGZjc2luZm9bdGNzbF0uY29kZSAhPSBGQ19VU0FTQ0lJKTsgLyogQnV0 IG5vdCBBU0NJSSAqLworI2VuZGlmIC8qIE5PRVNDU0VRICovCisjZW5kaWYgLyogTk9DU0VUUyAq LworCisjaWZuZGVmIE5PRVNDU0VRCisgICAgaWYgKCFlc2NzZXEpIHsJCQkvKiAyMDA5LzEwLzIy ICovCisJaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KQorCSAgZXNjc2VxID0gMTsKKyAgICB9CisjaWZk ZWYgQ0tfQVBDCisgICAgZXNjc2VxID0gZXNjc2VxIHx8IChhcGNzdGF0dXMgJiBBUENfT04pOwor ICAgIGFwY2FjdGl2ZSA9IDA7CQkJLyogQW4gQVBDIGNvbW1hbmQgaXMgbm90IGFjdGl2ZSAqLwor ICAgIGFwY2xlbmd0aCA9IDA7CQkJLyogLi4uICovCisjZW5kaWYgLyogQ0tfQVBDICovCisjaWZk ZWYgWFBSSU5UCisgICAgZXNjc2VxIHw9IHR0X3ByaW50OworI2VuZGlmIC8qIFhQUklOVCAqLwor ICAgIC8qIEluaXRpYWwgc3RhdGUgb2YgcmVjb2duaXplciAqLworICAgIGluZXNjWzBdID0gRVNf Tk9STUFMOwkJLyogUmVtb3RlIHRvIHNjcmVlbiAqLworICAgIGluZXNjWzFdID0gRVNfTk9STUFM OwkJLyogS2V5Ym9hcmQgdG8gcmVtb3RlICovCisgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBlc2Nz ZXEiLCIiLGVzY3NlcSk7CisjZW5kaWYgLyogTk9FU0NTRVEgKi8KKworICAgIGlmICh0dHlmZCA+ IC0xKSB7CQkJLyogKGp1c3QgaW4gY2FzZS4uLikgKi8KKwl3aGF0ID0gV19DT05ORUNUOwkJLyog S2VlcCB0cmFjayBvZiB3aGF0IHdlJ3JlIGRvaW5nICovCisJYWN0aXZlID0gMTsKKyAgICB9Cisj aWZkZWYgQ0tMRUFSTgorICAgIGlmIChsZWFybmluZykgewkJCS8qIExlYXJuZWQgc2NyaXB0IGFj dGl2ZS4uLiAqLworCWxlYXJuYnAgPSAwOwkJCS8qIElOUFVUIGJ1ZmZlciBwb2ludGVyICovCisJ bGVhcm5iYyA9IDA7CQkJLyogSU5QVVQgYnVmZmVyIGNvdW50ICovCisJbGVhcm5zdCA9IDA7CQkJ LyogU3RhdGUgKDAgPSBuZXV0cmFsLCBub25lKSAqLworCWxlYXJudDEgPSAoVUxPTkcpIHRpbWUo MCk7CisgICAgfQorI2VuZGlmIC8qIENLTEVBUk4gKi8KKworI2lmZGVmIENLVElETEUKKyAgICBp ZGxlbGltaXQgPSB0dF9pZGxlbGltaXQ7CisjZW5kaWYgLyogQ0tUSURMRSAqLworCisgICAgd2hp bGUgKGFjdGl2ZSkgewkJCS8qIEJpZyBsb29wLi4uICovCisJZGVidWcoRjEwMCwiQ09OTkVDVCB0 b3Agb2YgbG9vcCIsIiIsMCk7CisJRkRfWkVSTygmaW4pOwkJCS8qIENsZWFyIHNlbGVjdCgpIHN0 cnVjdHMgKi8KKwlGRF9aRVJPKCZvdXQpOworCUZEX1pFUk8oJmVycik7CisJZ290a2JkID0gMDsK Kwlnb3RuZXQgPSB0dHBlZWsoKTsJCS8qIFNvbWV0aGluZyBzaXR0aW5nIGluIGNrdXRpbyBidWYg Ki8KKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHR0cGVlayIsIiIsZ290bmV0KTsKKworCWlmICgKKyNp Zm5kZWYgTk9TRVRLRVkKKwkgICAgIWttcHRyCQkJLyogQ2hlY2sgZm9yIGtleSBtYWNybyBhY3Rp dmUgKi8KKyNlbHNlCisJICAgIDEKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworCSAgICApIHsKKwkg ICAgaWYgKG9iYykgewkJCS8qIE5vIGtleSBtYWNybyAtIHNldCB1cCBmb3Igc2VsZWN0ICovCisJ CUZEX1NFVCh0dHlmZCwgJm91dCk7CS8qIEhhdmUgc3R1ZmYgdG8gc2VuZCB0byBuZXQgKi8KKwkg ICAgfSBlbHNlIHsKKwkJRkRfU0VUKGtiaW4sICZpbik7CS8qIE5lZWQgdG8gcmVhZCBzdHVmZiBm cm9tIGtleWJvYXJkICovCisJICAgIH0KKyNpZmRlZiBCRUJPWAorCSAgICBpZiAoIShpYmMgfHwg Z290bmV0ID4gMCkpCisJCUZEX1NFVCh0dHlmZCwgJmluKTsJLyogTmVlZCB0byByZWFkIHN0dWZm IGZyb20gbmV0ICovCisjZWxzZSAvKiBCRUJPWCAqLworCSAgICBpZiAoaWJjIHx8IGdvdG5ldCA+ IDApIHsKKwkJRkRfU0VUKHNjcm5vdXQsICZvdXQpOwkvKiBIYXZlIHN0dWZmIHRvIHB1dCBvbiBz Y3JlZW4gKi8KKwkgICAgfSBlbHNlIHsKKwkJRkRfU0VUKHR0eWZkLCAmaW4pOwkvKiBOZWVkIHRv IHJlYWQgc3R1ZmYgZnJvbSBuZXQgKi8KKwkgICAgfQorI2VuZGlmIC8qIEJFQk9YICovCisgICAg ICAgICAgICBGRF9TRVQodHR5ZmQsICZlcnIpOworI2lmZGVmIENLX0ZPUldBUkRfWAorICAgICAg ICAgICAgZndkeF9pbml0X2ZkX3NldCgmaW4pOworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLwor CisJICAgIC8qIFdhaXQgdGlsbCB0aGUgZmlyc3Qgb25lIG9mIHRoZSBhYm92ZSBpcyByZWFkeSBm b3IgaS9vICovCisJICAgIC8qIG9yIFRFUk0gSURMRS1TRU5EIGlzIGFjdGl2ZSBhbmQgd2UgdGlt ZSBvdXQuICovCisKKwkgICAgZXJybm8gPSAwOworI2lmZGVmIENLVElETEUKKwkgICAgLyogVGhp cyByZWFsbHkgY291bGQgYmUgbW92ZWQgb3V0IG9mIHRoZSBsb29wLi4uICovCisJICAgIGlmIChp ZGxlbGltaXQpIHsJCS8qIElkbGUgdGltZW91dCBzZXQgKi8KKwkJc3RydWN0IHRpbWV2YWwgdHY7 CisJCWlmIChpZGxlbGltaXQgPiAwKSB7CS8qIFBvc2l0aXZlID0gc2VjICovCisJCSAgICB0di50 dl9zZWMgPSAobG9uZykgaWRsZWxpbWl0OworCQkgICAgdHYudHZfdXNlYyA9IDBMOworCQl9IGVs c2UgewkJLyogTmVnYXRpdmUgPSBtaWxsaXNlYyAqLworCQkgICAgbG9uZyB1ID0gKDAgLSBpZGxl bGltaXQpOworCQkgICAgdHYudHZfc2VjID0gdSAvIDEwMDBMOworCQkgICAgdHYudHZfdXNlYyA9 ICgodSAlIDEwMDBMKSAqIDEwMDBMKTsKKwkJfQorI2lmZGVmIElOVFNFTEVDVAorCQljID0gc2Vs ZWN0KEZEX1NFVFNJWkUsKGludCAqKSZpbiwoaW50ICopJm91dCwoaW50ICopJmVyciwgJnR2KTsK KyNlbHNlCisJCWMgPSBzZWxlY3QoRkRfU0VUU0laRSwgJmluLCAmb3V0LCAmZXJyLCAmdHYpOwor I2VuZGlmIC8qIElOVFNFTEVDVCAqLworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS1RJRExFICov CisjaWZkZWYgSU5UU0VMRUNUCisJICAgICAgYyA9IHNlbGVjdChGRF9TRVRTSVpFLCAoaW50ICop JmluLCAoaW50ICopJm91dCwgKGludCAqKSZlcnIsIDApOworI2Vsc2UKKwkgICAgICBjID0gc2Vs ZWN0KEZEX1NFVFNJWkUsICZpbiwgJm91dCwgJmVyciwgMCk7CisjZW5kaWYgLyogSU5UU0VMRUNU ICovCisJICAgIGlmIChjIDwgMSkgeworI2lmZGVmIENLVElETEUKKwkJaWYgKGMgPT0gMCkgewkJ LyogVGltZW91dCAqLworCQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBzZWxlY3QoKSB0aW1lb3V0 IiwiIix0dF9pZGxlYWN0KTsKKwkJICAgIHN3aXRjaCAodHRfaWRsZWFjdCkgeworCQkgICAgICBj YXNlIElETEVfSEFORzogewkvKiBIYW5nIHVwICovCisJCQkgIGludCB4ID0gMDsKKyNpZm5kZWYg Tk9ESUFMCisJCQkgIGlmIChkaWFsbWh1KQorCQkJICAgIHggPSBtZG1odXAoKTsKKwkJCSAgaWYg KHggPCAxKQorI2VuZGlmIC8qIE5PRElBTCAqLworCQkJICAgIHR0aGFuZygpOwkvKiBmYWxsIHRo cnUgZGVsaWJlcmF0ZWx5Li4uICovCisJCSAgICAgIH0KKwkJICAgICAgY2FzZSBJRExFX1JFVDoJ LyogUmV0dXJuIHRvIGNvbW1hbmQgbW9kZSAqLworCQkJY3hfc3RhdHVzID0gQ1NYX0lETEU7CisJ CQlhY3RpdmUgPSAwOworCQkJY29udGludWU7CisJCSAgICAgIGNhc2UgSURMRV9PVVQ6CS8qIE9V VFBVVCBhIHN0cmluZyAqLworCQkJaWYgKHR0X2lkbGVzdHIpIHsKKwkJCSAgICBpbnQgbGVuID0g c3RybGVuKHR0X2lkbGVzdHIpOworCQkJICAgIGlmIChsZW4gPiAwKQorCQkJICAgICAgdHRvbCgo Q0hBUiAqKXR0X2lkbGVzdHIsbGVuKTsKKwkJCSAgICBlbHNlCisJCQkgICAgICB0dG9jKE5VTCk7 IC8qIE5vIHN0cmluZywgc2VuZCBhIE5VTCAqLworCQkJfSBlbHNlCisJCQkgIHR0b2MoTlVMKTsJ LyogTm8gc3RyaW5nLCBzZW5kIGEgTlVMICovCisJCQljb250aW51ZTsKKwkJICAgICAgY2FzZSBJ RExFX0VYSVQ6CS8qIEV4aXQgZnJvbSBLZXJtaXQgKi8KKwkJCWRvZXhpdChHT09EX0VYSVQseGl0 c3RhKTsKKyNpZmRlZiBUTkNPREUKKwkJICAgICAgY2FzZSBJRExFX1RBWVQ6CS8qIFNlbmQgVGVs bmV0IEFyZSBZb3UgVGhlcmU/ICovCisJCQlpZiAobmV0d29yayAmJiBJU19URUxORVQoKSkgewor CQkJICAgIHRub3B0WzBdID0gKENIQVIpIElBQzsKKwkJCSAgICB0bm9wdFsxXSA9IChDSEFSKSBU Tl9BWVQ7CisJCQkgICAgdG5vcHRbMl0gPSBOVUw7CisJCQkgICAgaWYgKHR0b2woKENIQVIgKil0 bm9wdCwyKSA8IDApCisJCQkgICAgICBhY3RpdmUgPSAwOworCQkJfQorCQkJY29udGludWU7CisK KwkJICAgICAgY2FzZSBJRExFX1ROT1A6CS8qIFNlbmQgVGVsbmV0IE5PUCAqLworCQkJaWYgKG5l dHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsKKwkJCSAgICB0bm9wdFswXSA9IChDSEFSKSBJQUM7CisJ CQkgICAgdG5vcHRbMV0gPSAoQ0hBUikgVE5fTk9QOworCQkJICAgIHRub3B0WzJdID0gTlVMOwor CQkJICAgIGlmICh0dG9sKChDSEFSICopdG5vcHQsMikgPCAwKQorCQkJICAgICAgYWN0aXZlID0g MDsKKwkJCX0KKwkJCWNvbnRpbnVlOworI2VuZGlmIC8qIFROQ09ERSAqLworCQkgICAgfQorCQl9 CisjZW5kaWYgLyogQ0tUSURMRSAqLworCisJCWRlYnVnKEYxMDEsIkNPTk5FQ1Qgc2VsZWN0KCkg ZXJybm8iLCIiLGVycm5vKTsKKwkJLyogQSB0b28tYmlnIGZpcnN0IGFyZyB0byBzZWxlY3QoKSBn ZXRzIEVCQURGICovCisjaWZkZWYgRUlOVFIKKwkJaWYgKGMgPT0gLTEpIHsKKwkJICAgIGlmIChl cnJubyA9PSBFSU5UUikgeworCQkJY29udGludWU7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBF SU5UUiAqLworCQlzbGVlcCgxKTsKKwkJY29udGludWU7CisJICAgIH0KKyNpZm5kZWYgQkVCT1gK KyNpZmRlZiBERUJVRworCSAgICBpZiAoRkRfSVNTRVQoc2Nybm91dCwgJm91dCkpIHsKKwkJZGVi dWcoRjEwMCwiQ09OTkVDVCBTRUxFQ1Qgc2Nybm91dCIsIiIsMCk7CisJICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworI2VuZGlmIC8qIEJFQk9YICovCisKKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAg ICAgICAgICAgIGZ3ZHhfY2hlY2tfc29ja2V0cygmaW4pOworI2VuZGlmIC8qIENLX0ZPUldBUkRf WCAqLworCisJICAgIGlmIChGRF9JU1NFVCh0dHlmZCwgJmluKSkgewkvKiBSZWFkIGZyb20gbmV0 PyAqLworCQlkZWJ1ZyhGMTEwLCJDT05ORUNUIFNFTEVDVCB0dHlmZCIsImluIiwwKTsKKwkJRkRf Q0xSKHR0eWZkLCAmaW4pOworCQlnb3RuZXQgPSAxOwkJLyogTmV0IGlzIHJlYWR5ICovCisJICAg IH0KKwkgICAgaWYgKEZEX0lTU0VUKGtiaW4sICZpbikpIHsJLyogUmVhZCBmcm9tIGtleWJvYXJk PyAqLworCQlkZWJ1ZyhGMTAwLCJDT05ORUNUIFNFTEVDVCBrYmluIiwiIiwwKTsKKwkJRkRfQ0xS KGtiaW4sICZpbik7CisJCWdvdGtiZCA9IDE7CQkvKiBLZXlib2FyZCBpcyByZWFkeSAqLworCSAg ICB9CisgICAgICAgICAgICBpZiAoRkRfSVNTRVQodHR5ZmQsICZlcnIpKSB7CisJCWRlYnVnKEYx MTAsIkNPTk5FQ1QgU0VMRUNUIHR0eWZkIiwiZXJyIiwwKTsKKwkJRkRfQ0xSKHR0eWZkLCAmZXJy KTsKKyNpZmRlZiBORVRQVFkKKyNpZmRlZiBIQVZFX1BUWVRSQVAKKwkJLyogU3BlY2lhbCBoYW5k bGluZyBmb3IgSFAtVVggcHR5IGkvbyAqLworICAgICAgICAgICAgICAgIGlmICh0dHB0eSkgewor ICAgICAgICAgICAgICAgICAgICBpZiAocHR5X3RyYXBfaGFuZGxlcih0dHlmZCkgPiAwKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGNvbnJldDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAq LworI2VuZGlmIC8qIE5FVFBUWSAqLworCQlnb3RuZXQgPSAxOwkJLyogTmV0IGlzIHJlYWR5IChk b24ndCBzZXQgaWYgcHR5KSAqLworICAgICAgICAgICAgfQorCX0KKyNpZmRlZiBERUJVRworCWlm IChkZWJsb2cpIHsKKwkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBnb3RrYmQiLCIiLGdvdGtiZCk7 CisJICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qga2JjIiwiIixrYmMpOworI2lmZGVmIENPTU1FTlQK KyNpZm5kZWYgTk9TRVRLRVkKKwkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBrbXB0ciIsIiIsa21w dHIpOworI2VuZGlmIC8qIE5PU0VUS0VZICovCisjZW5kaWYJLyogQ09NTUVOVCAqLworCX0KKyNl bmRpZiAvKiBERUJVRyAqLworCisJd2hpbGUgKGdvdGtiZCB8fCBrYmMgPiAwCS8qIElmIHdlIGhh dmUga2V5Ym9hcmQgY2hhcnMgKi8KKyNpZm5kZWYgTk9TRVRLRVkKKwkgICAgICAgfHwga21wdHIK KyNlbmRpZiAvKiBOT1NFVEtFWSAqLworCSAgICAgICApIHsKKyNpZm5kZWYgTk9TRVRLRVkKKwkg ICAgaWYgKGttcHRyKSB7CQkvKiBIYXZlIGN1cnJlbnQgbWFjcm8/ICovCisJCWRlYnVnKEYxMDAs IkNPTk5FQ1Qga21wdHIgbm9uIE5VTEwiLCIiLDApOworCQlpZiAoKGMgPSAoQ0hBUikgKmttcHRy KyspID09IE5VTCkgeyAvKiBHZXQgY2hhciBmcm9tIGl0ICovCisJCSAgICBkZWJ1ZyhGMTAwLCJD T05ORUNUIG1hY3JvIGVtcHR5LCBjb250aW51aW5nIiwiIiwwKTsKKwkJICAgIGttcHRyID0gTlVM TDsJLyogSWYgbm8gbW9yZSBjaGFycywgICovCisJCSAgICBjb250aW51ZTsJCS8qIFJlc2V0IHBv aW50ZXIgYW5kIGNvbnRpbnVlICovCisJCX0KKwkJZGVidWcoRjAwMCwiQ09OTkVDVCBjaGFyIGZy b20gbWFjcm8iLCIiLGMpOworCSAgICB9IGVsc2UgewkJCS8qIE5vIG1hY3JvLi4uICovCisjZW5k aWYgLyogTk9TRVRLRVkgKi8KKyNpZmRlZiBCRUJPWAorCQl7CisJCSAgICBpbnQgcmMgPSAwOwor CQkgICAgaWYgKChyYyA9IHJlY3Yoa2JpbixidWYsMSwwKSkgPiAwKQorCQkgICAgICBjID0gYnVm WzBdOworCQkgICAgZWxzZQorCQkgICAgICBjID0gLTE7CisJCSAgICBkZWJ1ZyhGMTExLCJyZWN2 IiwicmMiLHJjKTsKKwkJICAgIHByaW50ZigiXHJcbnJlY3Y6ICVjIHJjPSVkXHJcbiIsYnVmWzBd LHJjKTsKKwkJfQorI2Vsc2UgLyogQkVCT1ggKi8KKwkJYyA9IENPTkdLUygpOwkJLyogWWVzLCBy ZWFkIGZyb20ga2V5Ym9hcmQgKi8KKyNlbmRpZiAvKiBCRUJPWCAqLworCQlnb3RrYmQgPSAwOwkJ LyogVHVybiBvZmYgc2VsZWN0KCkgcmVzdWx0IGZsYWcgKi8KKyNpZm5kZWYgTk9TRVRLRVkKKwkg ICAgfQorI2VuZGlmIC8qIE5PU0VUS0VZICovCisJICAgIGlmIChjID09IC0xKSB7CisjaWZkZWYg RUlOVFIKKwkJaWYgKGVycm5vID09IEVJTlRSKQorCQkgIGNvbnRpbnVlOworI2VuZGlmIC8qIEVJ TlRSICovCisJCWN4X3N0YXR1cyA9IENTWF9JT0VSUk9SOworCQljb25vYyhCRUwpOworCQlnb3Rv IGNvbnJldDA7CisJICAgIH0KKwkgICAgYyAmPSBjbWRtc2s7CQkvKiBEbyBhbnkgcmVxdWVzdGVk IG1hc2tpbmcgKi8KKworI2lmbmRlZiBOT1NFVEtFWQorLyoKKyAgTm90ZToga21wdHIgaXMgTlVM TCBpZiB3ZSBnb3QgY2hhcmFjdGVyIGMgZnJvbSB0aGUga2V5Ym9hcmQsIGFuZCBpdCBpcworICBu b3QgTlVMTCBpZiBpdCBjYW1lIGZyb20gYSBtYWNyby4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgd2Ug bXVzdCBhdm9pZAorICBleHBhbmRpbmcgaXQgYWdhaW4uCisqLworCSAgICBpZiAoIWttcHRyICYm IG1hY3JvdGFiW2NdKSB7IC8qIE1hY3JvIGRlZmluaXRpb24gZm9yIGM/ICovCisJCWRlYnVnKEYw MDAsIkNPTk5FQ1QgbWFjcm8ga2V5IixtYWNyb3RhYltjXSxjKTsKKwkJa21wdHIgPSBtYWNyb3Rh YltjXTsJLyogWWVzLCBzZXQgdXAgbWFjcm8gcG9pbnRlciAqLworCQljb250aW51ZTsJCS8qIGFu ZCByZXN0YXJ0IHRoZSBsb29wLCAqLworCSAgICB9IGVsc2UgYyA9IGtleW1hcFtjXTsJLyogZWxz ZSB1c2Ugc2luZ2xlLWNoYXIga2V5bWFwICovCisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKwkgICAg aWYgKAorI2lmbmRlZiBOT1NFVEtFWQorCQkha21wdHIgJiYKKyNlbmRpZiAvKiBOT1NFVEtFWSAq LworCQkodHRfZXNjYXBlICYmICgoYyAmIDB4ZmYpID09IGVzY2FwZSkpKSB7IC8qIEVzY2FwZSBj aGFyPyAqLworCQlkZWJ1ZyhGMDAwLCJDT05ORUNUIGdvdCBlc2NhcGUiLCIiLGMpOworI2lmZGVm IEJFQk9YCisJCWlmIChyZWN2KGtiaW4sYnVmLDEsMCk+PTApCisJCSAgYyA9IGJ1ZlswXTsKKwkJ ZWxzZQorCQkgIGMgPSAtMTsKKyNlbHNlIC8qIEJFQk9YICovCisJCWMgPSBDT05HS1MoKSAmIDB4 N2Y7CS8qIFJlYWQgYXJndW1lbnQgKi8KKyNlbmRpZiAvKiBCRUJPWCAqLworCQlkb2VzYygoY2hh cikgYyk7CS8qIEhhbmRsZSBpdCAqLworCQljb250aW51ZTsJCS8qIEJhY2sgdG8gbG9vcCAqLwor CSAgICB9CisJICAgIGNzYXZlID0gYzsJCQkvKiBTYXZlIGl0IGJlZm9yZSB0cmFuc2xhdGlvbiAq LworCSAgICAJCQkJLyogZm9yIGxvY2FsIGVjaG9pbmcuICovCisjaWZkZWYgQ0tMRUFSTgorCSAg ICBjcmZsYWcgPSAoYyA9PSBDUik7CQkvKiBSZW1lbWJlciBpZiBpdCB3YXMgQ1IuICovCisjZW5k aWYgLyogQ0tMRUFSTiAqLworCisjaWZuZGVmIE5PQ1NFVFMKKwkgICAgaWYgKGluZXNjWzFdID09 IEVTX05PUk1BTCkgeyAvKiBJZiBub3QgaW5zaWRlIGVzY2FwZSBzZXEuLiAqLworCQkvKiBUcmFu c2xhdGUgY2hhcmFjdGVyIHNldHMgKi8KKyNpZmRlZiBVTklDT0RFCisJCWludCB4OworCQlpZiAo dW5pY29kZSA9PSAxKSB7CS8qIFJlbW90ZSBpcyBVVEYtOCAqLworCQkgICAgb3V0eGNvdW50ID0g Yl90b191KChDSEFSKWMsb3V0eGJ1ZixPVVRYQlVGU0laLHRjc3NpemUpOworCQkgICAgb3V0eGJ1 ZltvdXR4Y291bnRdID0gTlVMOworCQl9IGVsc2UgaWYgKHVuaWNvZGUgPT0gMikgeyAvKiBMb2Nh bCBpcyBVVEYtOCAqLworCQkgICAgCisJCSAgICB4ID0gdV90b19iKChDSEFSKWMpOworCQkgICAg aWYgKHggPCAwKQorCQkgICAgICBjb250aW51ZTsKKwkJICAgIG91dHhidWZbMF0gPSAodW5zaWdu ZWQpKHggJiAweGZmKTsKKwkJICAgIG91dHhjb3VudCA9IDE7CisJCSAgICBvdXR4YnVmW291dHhj b3VudF0gPSBOVUw7CisJCX0gZWxzZSB7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCQkgICAgaWYg KHN4bykgYyA9ICgqc3hvKSgoY2hhciljKTsgLyogTG9jYWwtaW50ZXJtZWRpYXRlICovCisJCSAg ICBpZiAocnhvKSBjID0gKCpyeG8pKChjaGFyKWMpOyAvKiBJbnRlcm1lZGlhdGUtcmVtb3RlICov CisJCSAgICBvdXR4YnVmWzBdID0gYzsKKwkJICAgIG91dHhjb3VudCA9IDE7CisJCSAgICBvdXR4 YnVmW291dHhjb3VudF0gPSBOVUw7CisjaWZkZWYgVU5JQ09ERQorCQl9CisjZW5kaWYgLyogVU5J Q09ERSAqLworCSAgICB9IGVsc2UgeworCQlvdXR4YnVmWzBdID0gYzsKKwkJb3V0eGNvdW50ID0g MTsKKwkJb3V0eGJ1ZltvdXR4Y291bnRdID0gTlVMOworCSAgICB9CisJICAgIGlmIChlc2NzZXEp CisJICAgICAgYXBjcmMgPSBjaGthZXMoKGNoYXIpYywxKTsKKyNlbHNlICAvKiBOT0NTRVRTICov CisJICAgIG91dHhidWZbMF0gPSBjOworCSAgICBvdXR4Y291bnQgPSAxOworCSAgICBvdXR4YnVm W291dHhjb3VudF0gPSBOVUw7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisJICAgIGRlYnVnKEYx MTEsIk9VVFhCVUYiLG91dHhidWYsb3V0eGNvdW50KTsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwg b3V0eGNvdW50OyBpKyspIHsKKwkJYyA9IG91dHhidWZbaV07CisvKgorIElmIFNoaWZ0LUluL1No aWZ0LU91dCBpcyBzZWxlY3RlZCBhbmQgd2UgaGF2ZSBhIDctYml0IGNvbm5lY3Rpb24sCisgaGFu ZGxlIHNoaWZ0aW5nIGhlcmUuCisqLworCQlpZiAoc29zaSkgewkJCSAvKiBTaGlmdC1Jbi9PdXQg c2VsZWN0ZWQ/ICovCisJCSAgICBpZiAoY21hc2sgPT0gMDE3NykgewkgLyogSW4gNy1iaXQgZW52 aXJvbm1lbnQ/ICovCisJCQlpZiAoYyAmIDAyMDApIHsJCSAvKiA4LWJpdCBjaGFyYWN0ZXI/ICov CisJCQkgICAgaWYgKG91dHNoaWZ0ID09IDApIHsgLyogSWYgbm90IHNoaWZ0ZWQsICovCisJCQkJ dHRvYyhkb3BhcihTTykpOyAvKiBzaGlmdC4gKi8KKwkJCQlvdXRzaGlmdCA9IDE7CisJCQkgICAg fQorCQkJfSBlbHNlIHsKKwkJCSAgICBpZiAob3V0c2hpZnQgPT0gMSkgeyAvKiA3LWJpdCBjaGFy YWN0ZXIgKi8KKwkJCQl0dG9jKGRvcGFyKFNJKSk7IC8qIElmIHNoaWZ0ZWQsICovCisJCQkJb3V0 c2hpZnQgPSAwOyAgICAvKiB1bnNoaWZ0LiAqLworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJ ICAgIGlmIChjID09IFNPKSBvdXRzaGlmdCA9IDE7IC8qIFVzZXIgdHlwZWQgU08gKi8KKwkJICAg IGlmIChjID09IFNJKSBvdXRzaGlmdCA9IDA7IC8qIFVzZXIgdHlwZWQgU0kgKi8KKwkJfQorCQlj ICY9IGNtYXNrOwkJLyogQXBwbHkgS2VybWl0LXRvLWhvc3QgbWFzayBub3cuICovCisJCWlmIChj ID09ICdcMDE1JykgewkvKiBDYXJyaWFnZSBSZXR1cm4gKi8KKwkJICAgIGludCBzdHVmZiA9IC0x OworCQkgICAgaWYgKHRubG0pIHsJCS8qIFRFUk1JTkFMIE5FV0xJTkUgT04gKi8KKwkJCXN0dWZm ID0gTEY7IAkvKiBTdHVmZiBMRiAqLworI2lmZGVmIFROQ09ERQorCQkgICAgfSBlbHNlIGlmIChu ZXR3b3JrICYmIC8qIFRFTE5FVCBORVdMSU5FIE9OL09GRi9SQVcgKi8KKwkJCSAgICAgICBJU19U RUxORVQoKSkgeworCQkJc3dpdGNoICghVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpID8gdG5fbmxt IDogdG5fYl9ubG0peworCQkJICBjYXNlIFROTF9DUkxGOgorCQkJICAgIHN0dWZmID0gTEY7CisJ CQkgICAgYnJlYWs7CisJCQkgIGNhc2UgVE5MX0NSTlVMOgorCQkJICAgIHN0dWZmID0gTlVMOwor CQkJICAgIGJyZWFrOworCQkJfQorI2VuZGlmIC8qIFROQ09ERSAqLworCQkgICAgfQorCQkgICAg aWYgKHN0dWZmID4gLTEpIHsKKwkJCXR0b2MoZG9wYXIoJ1wwMTUnKSk7CS8qIFNlbmQgQ1IgKi8K KwkJCWlmIChkdXBsZXgpIGNvbm9jKCdcMDE1Jyk7IC8qIE1heWJlIGVjaG8gQ1IgKi8KKwkJCWMg PSBzdHVmZjsJLyogQ2hhciB0byBzdHVmZiAqLworCQkJY3NhdmUgPSBjOworCQkgICAgfQorCQl9 CisjaWZkZWYgVE5DT0RFCisvKiBJZiB1c2VyIHR5cGVzIHRoZSAweGZmIGNoYXJhY3RlciAoVEVM TkVUIElBQyksIGl0IG11c3QgYmUgZG91YmxlZC4gKi8KKwkJZWxzZQkJLyogTm90IENSICovCisJ CSAgaWYgKChkb3BhcigoQ0hBUikgYykgPT0gSUFDKSAmJiAvKiBJQUMgKDB4ZmYpICovCisJCSAg ICAgIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsgLyogU2VuZCBvbmUgbm93ICovCisJCSAgICAg IHR0b2MoKGNoYXIpSUFDKTsgLyogYW5kIHRoZSBvdGhlciBvbmUganVzdCBiZWxvdy4gKi8KKwkJ ICB9CisjZW5kaWYgLyogVE5DT0RFICovCisJCS8qIFNlbmQgdGhlIGNoYXJhY3RlciAqLworCisJ CXggPSB0dG9jKChjaGFyKWRvcGFyKChDSEFSKSBjKSk7CisJCWlmICh4ID4gLTEpIHsKKyNpZmRl ZiBDS0xFQVJOCisJCSAgICBpZiAobGVhcm5pbmcpIHsJLyogTGVhcm5lZCBzY3JpcHQgYWN0aXZl ICovCisJCQlpZiAoY3JmbGFnKSB7CS8qIFVzZXIgdHlwZWQgQ1IgKi8KKwkJCSAgICBsZWFybmNo YXIoQ1IpOyAvKiBIYW5kbGUgQ1IgKi8KKwkJCSAgICBsZWFybnN0ID0gMDsgICAvKiBTaGlmdCB0 byBOZXV0cmFsICovCisJCQl9IGVsc2UgeworCQkJICAgIGxlYXJuY2hhcihjKTsgIC8qIE5vdCBD UiAqLworCQkJICAgIGxlYXJuc3QgPSAyOyAgIC8qIENoYW5nZSBzdGF0ZSB0byBLZXlib2FyZCAq LworCQkJfQorCQkgICAgfQorI2VuZGlmIC8qIENLTEVBUk4gKi8KKwkJICAgIGlmIChkdXBsZXgp IHsJLyogSWYgaGFsZiBkdXBsZXgsIG11c3QgZWNobyAqLworCQkJaWYgKGRlYnNlcykKKwkJCSAg Y29ub2woZGJjaHIoY3NhdmUpKTsgLyogdGhlIG9yaWdpbmFsIGNoYXIgKi8KKwkJCWVsc2UJCS8q IG5vdCB0aGUgdHJhbnNsYXRlZCBvbmUgKi8KKwkJCSAgY29ub2MoKGNoYXIpY3NhdmUpOworCQkJ aWYgKHNlc2xvZykgewkvKiBBbmQgbWF5YmUgbG9nIGl0IHRvbyAqLworCQkJICAgIGMyID0gY3Nh dmU7CisJCQkgICAgaWYgKHNlc3NmdCA9PSAwICYmIGNzYXZlID09ICdccicpCisJCQkgICAgICBj MiA9ICdcbic7CisJCQkgICAgTE9HQ0hBUigoY2hhciljMik7CisJCQl9CisJCSAgICB9CisJCX0g ZWxzZSB7CisJCSAgICBwZXJyb3IoIlxyXG5DYW4ndCBzZW5kIGNoYXJhY3RlciIpOworCQkgICAg Y3hfc3RhdHVzID0gQ1NYX0lPRVJST1I7CisJCSAgICBhY3RpdmUgPSAwOworCQkgICAgYnJlYWs7 CisJCX0KKwkgICAgfQorCX0KKwlpZiAoRkRfSVNTRVQodHR5ZmQsICZvdXQpKSB7CisJICAgIEZE X0NMUih0dHlmZCwgJm91dCk7CisJfQorCXdoaWxlIChnb3RuZXQgPiAwIHx8IGliYyA+IDApIHsK KwkgICAgZ290bmV0ID0gMDsKKwkgICAgcHJldiA9IGM7CisJICAgIGMgPSBja2NnZXRjKDApOwkJ LyogR2V0IG5leHQgY2hhcmFjdGVyICovCisJICAgIGlmIChjIDwgMCkgewkJLyogRmFpbGVkLi4u ICovCisJCWNrY3B1dGYoKTsJCS8qIEZsdXNoIENPTk5FQ1Qgb3V0cHV0IGJ1ZmZlciAqLworCQlp ZiAobXNnZmxnKSB7CisJCSAgICBwcmludGYoIlxyXG5Db21tdW5pY2F0aW9ucyBkaXNjb25uZWN0 ICIpOworI2lmZGVmIENPTU1FTlQKKwkJICAgIGlmIChjID09IC0zCisjaWZkZWYgdWx0cml4Cisv KiBUaGlzIGhhcHBlbnMgb24gVWx0cml4IGlmIHRoZXJlJ3Mgbm8gY2FycmllciAqLworCQkJJiYg ZXJybm8gIT0gRUlPCisjZW5kaWYgLyogdWx0cml4ICovCisjaWZkZWYgVVRFSworLyogVGhpcyBo YXBwZW5zIG9uIFVURUsgaWYgdGhlcmUncyBubyBjYXJyaWVyICovCisJCQkmJiBlcnJubyAhPSBF V09VTERCTE9DSworI2VuZGlmIC8qIFVURUsgKi8KKwkJCSkKKwkJICAgICAgcGVycm9yKCJcclxu Q2FuJ3QgcmVhZCBjaGFyYWN0ZXIiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCX0KKyNpZmRl ZiBOT1NFVEJVRgorCQlmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworCQlk b2xvZ2VuZCgpOworCQl0dGhhbmcoKTsJCS8qIEhhbmcgdXAgdGhlIGNvbm5lY3Rpb24gKi8KKwkJ ZGVidWcoRjExMSwiQ09OTkVDVCBpL28gZXJyb3IgMSIsY2tfZXJyc3RyKCksZXJybm8pOworCQlj eF9zdGF0dXMgPSBDU1hfSE9TVERJU0M7CisJCWdvdG8gY29ucmV0MDsKKwkgICAgfQorI2lmZGVm IFROQ09ERQorCSAgICB0eCA9IDA7CisJICAgIGlmICgoYyA9PSBOVUwpICYmIG5ldHdvcmsgJiYg SVNfVEVMTkVUKCkpIHsKKwkJaWYgKHByZXYgPT0gQ1IpIHsgICAgLyogRGlzY2FyZCA8TlVMPiBv ZiA8Q1I+PE5VTD4gaWYgcGVlciAqLworCQkgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZ KSkgeyAgLyogbm90IGluIGJpbmFyeSBtb2RlICovCisJCQlkZWJ1ZyhGMTExLCJDT05ORUNUIE5V TCIsY2tpdG9hKHByZXYpLGMpOworCQkJY2tjcHV0ZigpOwkvKiBGbHVzaCBzY3JlZW4gb3V0cHV0 IGJ1ZmZlciAqLworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBkZWJ1ZyhG MTExLCJDT05ORUNUIiwiYyIsYyk7CisJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QiLCJuZXR3b3Jr IixuZXR3b3JrKTsKKwkgICAgZGVidWcoRjExMSwiQ09OTkVDVCIsIklTX1RFTE5FVCIsSVNfVEVM TkVUKCkpOworCSAgICBpZiAoKGMgPT0gSUFDKSAmJiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7 CisjaWZkZWYgQ0tfRU5DUllQVElPTgorCQlpbnQgeF9hdXRoID0gVEVMT1BUX01FKFRFTE9QVF9B VVRIRU5USUNBVElPTik7CisjZWxzZQorCQlpbnQgeF9hdXRoID0gMDsKKyNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCisJCWludCBtZV9iaW4gPSBURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSk7CisJ CWludCB1X2JpbiA9IFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpOworCQlkZWJ1ZyhGMTAwLCJDT05O RUNUIGdvdCBJQUMiLCIiLDApOworCQlja2NwdXRmKCk7CQkvKiBEdW1wIHNjcmVlbi1vdXRwdXQg YnVmZmVyICovCisJCWlmICgodHggPSB0bl9kb29wKChDSEFSKShjICYgMHhmZiksZHVwbGV4LGNr Y2dldGMpKSA9PSAwKSB7CisJCSAgICBpZiAobWVfYmluICE9IFRFTE9QVF9NRShURUxPUFRfQklO QVJZKSkgeworCQkJbWVfYmluID0gVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpOworCQkgICAgfSBl bHNlIGlmICh1X2JpbiAhPSBURUxPUFRfVShURUxPUFRfQklOQVJZKSkgeworCQkJdV9iaW4gPSBU RUxPUFRfVShURUxPUFRfQklOQVJZKTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisvKgorICBIZXJl IHdlIGhhdmUgdG8gcHVzaCBiYWNrIGFueSBieXRlcyB3ZSBoYXZlIHJlYWQgdXNpbmcgYmxvY2sg cmVhZHMsIHNvIHdlCisgIGNhbiByZWFkIHRoZW0gYWdhaW4gdXNpbmcgc2luZ2xlLWNoYXJhY3Rl ciByZWFkcywgc28gdGhleSBjYW4gYmUgZGVjcnlwdGVkCisgIGluIGNhc2UgdGhlcmUgd2FzIGEg c3dpdGNoIHRvIGVuY3J5cHRpb24gaW4gdGhlIGJsb2NrLiAgTm90ZSB0aGF0IHdlIGNhbid0Cisg IGhhbmRsZSBzd2l0Y2hlcyBpbiB0aGUgZW5jcnlwdGlvbiBzdGF0ZSBpdHNlbGYgdGhpcyB3YXkg LS0gd2hpY2ggd291bGQgYmUKKyAgbmljZSwgc2luY2UgaXQgd291bGQgZWxpbWluYXRlIHRoZSBu ZWVkIGZvciBzaW5nbGUtY2hhcmFjdGVyIHJlYWRzLiAgV2h5PworICBCZWNhdXNlIGlmIGEgc2Vy aWVzIG9mIGNoYXJhY3RlcnMgaGFzIGFscmVhZHkgYmVlbiBkZWNyeXB0ZWQgdGhhdCBzaG91bGRu J3QKKyAgaGF2ZSBiZWVuLCB0aGVuIChhKSBpdCdzIHJ1aW5lZCwgYW5kIChiKSBzbyBpcyB0aGUg c3RhdGUgb2YgdGhlIGRlY3J5cHRpb24KKyAgbWFjaGluZS4gIFRvbyBiYWQuCisqLworCQkgICAg fSBlbHNlIGlmIChURUxPUFRfTUUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSAhPSAwICYmCisJCQkg ICAgICAgVEVMT1BUX01FKFRFTE9QVF9BVVRIRU5USUNBVElPTikgIT0geF9hdXRoCisJCQkgICAg ICAgKSB7CisJCQlpZiAodHRwdXNoYmFjaygoQ0hBUiAqKWlicCxpYmMpID4gLTEpIHsKKwkJCSAg ICBpYmMgPSAwOworCQkJICAgIGlicCA9IGlidWY7CisJCQl9CisjZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLworCQkgICAgfQorCQkgICAgY29udGludWU7CisJCX0gZWxzZSBpZiAodHggPT0gLTEp IHsJLyogSS9PIGVycm9yICovCisJCSAgICBpZiAobXNnZmxnKQorCQkgICAgICBwcmludGYoIlxy XG5Db21tdW5pY2F0aW9ucyBkaXNjb25uZWN0ICIpOworI2lmZGVmIE5PU0VUQlVGCisJCSAgICBm Zmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworCQkgICAgZG9sb2dlbmQoKTsK KwkJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgaS9vIGVycm9yIDIiLGNrX2VycnN0cigpLGVycm5v KTsKKwkJICAgIGN4X3N0YXR1cyA9IENTWF9JT0VSUk9SOworCQkgICAgZ290byBjb25yZXQwOwor CQl9IGVsc2UgaWYgKHR4ID09IC0yKSB7CS8qIEkvTyBlcnJvciAqLworCQkgICAgaWYgKG1zZ2Zs ZykKKwkJICAgICAgcHJpbnRmKCJcclxuQ29ubmVjdGlvbiBjbG9zZWQgYnkgcGVlciIpOworI2lm ZGVmIE5PU0VUQlVGCisJCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAq LworCQkgICAgZG9sb2dlbmQoKTsKKwkJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgaS9vIGVycm9y IDMiLGNrX2VycnN0cigpLGVycm5vKTsKKwkJICAgIGN4X3N0YXR1cyA9IENTWF9JT0VSUk9SOwor CQkgICAgZ290byBjb25yZXQwOworCQl9IGVsc2UgaWYgKHR4ID09IC0zKSB7CS8qIEkvTyBlcnJv ciAqLworCQkgICAgaWYgKG1zZ2ZsZykKKwkJICAgICAgcHJpbnRmKCJcclxuQ29ubmVjdGlvbiBj bG9zZWQgZHVlIHRvIHRlbG5ldCBwb2xpY3kiKTsKKyNpZmRlZiBOT1NFVEJVRgorCQkgICAgZmZs dXNoKHN0ZG91dCk7CisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKwkJICAgIGRvbG9nZW5kKCk7CisJ CSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGkvbyBlcnJvciA0Iixja19lcnJzdHIoKSxlcnJubyk7 CisJCSAgICBjeF9zdGF0dXMgPSBDU1hfSU9FUlJPUjsKKwkJICAgIGdvdG8gY29ucmV0MDsKKwkJ fSBlbHNlIGlmICgodHggPT0gMSkgJiYgKCFkdXBsZXgpKSB7IC8qIEVDSE8gY2hhbmdlICovCisJ CSAgICBkdXBsZXggPSAxOwkJLyogVHVybiBvbiBsb2NhbCBlY2hvICovCisJCSAgICBjb250aW51 ZTsKKwkJfSBlbHNlIGlmICgodHggPT0gMikgJiYgKGR1cGxleCkpIHsgLyogRUNITyBjaGFuZ2Ug Ki8KKwkJICAgIGR1cGxleCA9IDA7CisJCSAgICBjb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eCA9 PSAzKSB7CS8qIFF1b3RlZCBJQUMgKi8KKwkJICAgIGMgPSBwYXJpdHkgPyAxMjcgOiAyNTU7CisJ CX0KKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNCkg eyAgIC8qIElLUyBTdGF0ZSBDaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJgorCQkJIXRjcF9pbmNvbWluZwor CQkJKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBoZXJlIHdlIG5lZWQgdG8gcHJpbnQg YSBtc2cgdGhhdCB0aGUgb3RoZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZGUg aXMgaW4gU0VSVkVSIG1vZGUgYW5kIHRoYXQgUkVNT1RFICAgICAqLworICAgICAgICAgICAgICAg ICAgICAgICAgLyogY29tbWFuZHMgc2hvdWxkIGJlIHVzZWQuICBBbmQgQ09OTkVDVCBtb2RlICov CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaG91bGQgYmUgZW5kZWQuICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KKwkJCWN4X3N0YXR1cyA9IENTWF9JS1NEOworCQkJYWN0aXZlID0g MDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBJ S1NfT1BUSU9OICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNikgeworICAgICAg ICAgICAgICAgICAgICAvKiBETyBMT0dPVVQgd2FzIHJlY2VpdmVkICovCisJCSAgICBpZiAobXNn ZmxnKQorCQkgICAgICBwcmludGYoIlxyXG5SZW1vdGUgTG9nb3V0ICIpOworI2lmZGVmIE5PU0VU QlVGCisJCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworCQkgICAg ZGVidWcoRjEwMCwiQ09OTkVDVCBSZW1vdGUgTG9nb3V0IiwiIiwwKTsKKwkJICAgIGN4X3N0YXR1 cyA9IENTWF9UUklHR0VSOworCQkgICAgZ290byBjb25yZXQwOworICAgICAgICAgICAgICAgIH0g ZWxzZQorCQkgIGNvbnRpbnVlOwkJLyogTmVnb3RpYXRpb24gT0ssIGdldCBuZXh0IGNoYXIuICov CisJICAgIH0gZWxzZSBpZiAocGFyaXR5KQorCSAgICAgIGMgJj0gMHg3ZjsKKworCSAgICAvKiBJ J20gZWNob2luZyBmb3IgdGhlIHJlbW90ZSAqLworICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShU RUxPUFRfRUNITykgJiYgdG5fcmVtX2VjaG8pCisJICAgICAgdHRvYygoY2hhciljKTsKKyNlbmRp ZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIENLTEVBUk4KKwkgLyogTGVhcm5lZCBzY3JpcHQ6IFJl Y29yZCBpbmNvbWluZyBjaGFycyBpZiBub3QgaW4gS2V5Ym9hcmQgc3RhdGUgKi8KKworCSAgICBp ZiAobGVhcm5pbmcgJiYgbGVhcm5zdCAhPSAyKSB7IC8qIExlYXJuZWQgc2NyaXB0IGFjdGl2ZSAq LworCQlsZWFybmJ1ZltsZWFybmJwKytdID0gYzsgICAgLyogU2F2ZSBmb3IgSU5QVVQgY29tbWFu ZCAqLworCQlpZiAobGVhcm5icCA+PSBMRUFSTkJVRlNJWikgLyogaW4gY2lyY3VsYXIgYnVmZmVy ICovCisJCSAgbGVhcm5icCA9IDA7ICAgICAgICAgICAgICAvKiB3cmFwcGluZyBpZiBhdCBlbmQu ICovCisJCWxlYXJuYmMrKzsgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGJ5dGUuICov CisJCWxlYXJuc3QgPSAxOyAgICAgICAgICAgICAgICAvKiBTdGF0ZSBpcyBOZXQuICovCisJICAg IH0KKyNlbmRpZiAvKiBDS0xFQVJOICovCisKKwkgICAgaWYgKGRlYnNlcykgewkJLyogT3V0cHV0 IGNoYXJhY3RlciB0byBzY3JlZW4gKi8KKwkJY2hhciAqczsJCS8qIERlYnVnZ2luZyBkaXNwbGF5 Li4uICovCisJCXMgPSBkYmNocihjKTsJCS8qIE1ha2UgY2hhciBpbnRvIHN0cmluZyAqLworCQl3 aGlsZSAoKnMpIHsJCS8qIE91dHB1dCBlYWNoIGNoYXIgZnJvbSBzdHJpbmcgKi8KKwkJICAgIGNr Y3B1dGMoKnMpOworCQkgICAgaWYgKHNlc2xvZykJCS8qIEFuZCBtYXliZSBsb2cgaXQuICovCisJ CSAgICAgIExPR0NIQVIoKGNoYXIpKnMpOworCQkgICAgcysrOworCQl9CisJICAgIH0gZWxzZSB7 CQkJLyogUmVndWxhciBkaXNwbGF5IC4uLiAqLworCQljICY9IGNtYXNrOwkJLyogQXBwbHkgS2Vy bWl0LXRvLXJlbW90ZSBtYXNrICovCisJCWlmIChzZXNsb2cgJiYgc2Vzc2Z0KQkvKiBJZiBiaW5h cnkgc2Vzc2lvbiBsb2cgKi8KKwkJICBMT0dDSEFSKChjaGFyKWMpOwkvKiBsb2cgdGhlIGNoYXJh Y3RlciBub3cuICovCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIENLX0FVVE9ETAorLyoKKyAgQXV0 b2Rvd25sb2FkLiAgQ2hlY2sgZm9yIEtlcm1pdCBTIHBhY2tldCBwcmlvciB0byB0cmFuc2xhdGlv biwgc2luY2UgdGhhdAorICBjYW4gY2hhbmdlIHRoZSBwYWNrZXQgYW5kIG1ha2UgaXQgdW5yZWNv Z25pemFibGUgKGFzIHdoZW4gdGhlIHRlcm1pbmFsCisgIGNoYXJhY3RlciBzZXQgaXMgYW4gSVNP IDY0NiBvbmUpLi4uICBEaXR0byBmb3IgWm1vZGVtIHN0YXJ0IHBhY2tldC4KKyovCisJCWlmIChh dXRvZGwJCS8qIEF1dG9kb3dubG9hZCBlbmFibGVkPyAqLworI2lmZGVmIElLU19PUFRJT04KKwkJ ICAgIHx8IFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKKyNlbmRpZiAv KiBJS1NfT1BUSU9OICovCisJCSAgICApIHsKKwkJICAgIGludCBrID0gMDsKKworCQkgICAgaWYg KGtzdGFydGFjdGl2ZSB8fCBjID09IHN0Y2hyIC8qIEtlcm1pdCBTIG9yIEkgcGFja2V0PyAqLwor I2lmZGVmIENPTU1FTlQKKwkJCXx8IGFkbF9rbW9kZSA9PSBBRExTVFIgLyogTm90IHVzZWQgaW4g Qy1LZXJtaXQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJCQkpCisJCSAgICAgIGsgPSBrc3Rh cnQoKENIQVIpYyk7CisjaWZkZWYgQ0tfWFlaCisJCSAgICBpZiAoIWsgJiYgem1kbG9rKQkvKiBP ciBhbiAic3oiIHN0YXJ0PyAqLworCQkgICAgICBrID0genN0YXJ0KChDSEFSKWMpOworI2VuZGlm IC8qIENLX1hZWiAqLworCQkgICAgaWYgKGspIHsKKwkJCWludCBrc2lnbiA9IDA7CisJCQlkZWJ1 ZyhGMTAxLCJDT05ORUNUIGF1dG9kb3dubG9hZCBrIiwiIixrKTsKKwkJCWlmIChrIDwgMCkgeyAv KiBNaW51cy1Qcm90b2NvbD8gKi8KKyNpZmRlZiBOT1NFUlZFUgorCQkJICAgIGdvdG8gbm9zZXJ2 ZXI7IC8qIE5lZWQgc2VydmVyIG1vZGUgZm9yIHRoaXMgKi8KKyNlbHNlCisJCQkgICAga3NpZ24g PSAxOyAvKiBSZW1lbWJlciAqLworCQkJICAgIGsgPSAwIC0gazsgLyogQ29udmVydCB0byBhY3R1 YWwgcHJvdG9jb2wgKi8KKwkJCSAgICBqdXN0b25lID0gMTsgLyogRmxhZyBmb3IgcHJvdG9jb2wg bW9kdWxlICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKwkJCX0gZWxzZQorCQkJICBqdXN0b25l ID0gMDsKKwkJCWstLTsJCS8qIEFkanVzdCBba3pdc3RhcnQncyByZXR1cm4gdmFsdWUgKi8KKwkJ CWlmIChrID09IFBST1RPX0sKKyNpZmRlZiBDS19YWVoKKwkJCSAgICB8fCBrID09IFBST1RPX1oK KyNlbmRpZiAvKiBDS19YWVogKi8KKwkJCSAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEYW1hZ2UgdGhlIHBhY2tldCBzbyB0aGF0IGl0IGRvZXNuJ3QgdHJpZ2dlciAqLwor CQkJICAgIC8qIGF1dG9kb3dubG9hZCBkZXRlY3Rpb24gZG93bnN0cmVhbS4gKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoayA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBpLCBsZW4gPSBzdHJsZW4oKGNoYXIgKilrc2J1Zik7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJ CQkgIGNrY3B1dGMoQlMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBD S19YWVoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQkJICBja2NwdXRjKENBTik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1hZWiAqLworCisjaWZuZGVmIE5PSUNQ CisJCQkgICAgLyogc3ByaW50ZiBpcyBzYWZlIGhlcmUgKGJ1aWx0aW4ga2V5d29yZHMpICovCisJ CQkgICAgc3ByaW50ZihhcGNidWYsCisJCQkJICAgICJzZXQgcHJvdG8gJXMsICVzLCBzZXQgcHJv dG8gJXMiLAorCQkJCSAgICBwdGFiW2tdLnBfbmFtZSwKKwkJCQkgICAga3NpZ24gPyAic2VydmVy IiA6ICJyZWNlaXZlIiwKKwkJCQkgICAgcHRhYltwcm90b2NvbF0ucF9uYW1lCisJCQkJICAgICk7 CisJCQkgICAgYXBjbGVuZ3RoID0gc3RybGVuKGFwY2J1Zik7CisJCQkgICAgZGVidWcoRjExMSwi Q09OTkVDVCBrc2J1ZiIsa3NidWYsayk7CisJCQkgICAgZGVidWcoRjExMCwiQ09OTkVDVCBhdXRv ZG93bmxvYWQiLGFwY2J1ZiwwKTsKKwkJCSAgICBhcGNhY3RpdmUgPSBBUENfTE9DQUw7CisJCQkg ICAgY2tjcHV0ZigpOwkvKiBGb3JjZSBzY3JlZW4gdXBkYXRlICovCisJCQkgICAgY3hfc3RhdHVz ID0gQ1NYX0FQQzsKKwkJCSAgICBnb3RvIGNvbnJldDE7CisjZWxzZQorLyoKKyAgSGVyZSdzIGFu b3RoZXIgd2F5IHRoYXQgZG9lc24ndCByZXF1aXJlIEFQQywgYnV0IHRoZW4gd2UnbGwgaGF2ZSB0 byBjaGFuZ2UKKyAgYWxsIHRoZSBvdGhlciBDT05ORUNUIG1vZHVsZXMsIGFuZCB0aGVuIHRoZSBt YWlubGluZSBjb2RlIHRoYXQgY2FsbHMgdGhlbS4KKyovCisJCQkgICAgeworCQkJCWV4dGVybiBj aGFyIHNzdGF0ZTsKKwkJCQlzc3RhdGUgPSBrc2lnbiA/ICd4JyA6ICd2JzsKKwkJCQlwcm90bygp OworCQkJICAgIH0KKyNlbmRpZiAvKiBOT0lDUCAqLworCQkJfQorCQkgICAgfQorCQl9CisjaWZk ZWYgTk9TRVJWRVIKKwkgICAgICBub3NlcnZlcjoKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisj ZW5kaWYgLyogQ0tfQVVUT0RMICovCisjZW5kaWYgLyogTk9YRkVSICovCisJCWlmIChzb3NpKSB7 CQkvKiBIYW5kbGUgU0kvU08gKi8KKwkJICAgIGlmIChjID09IFNPKSB7CS8qIFNoaWZ0IE91dCAq LworCQkJaW5zaGlmdCA9IDE7CisJCQljb250aW51ZTsKKwkJICAgIH0gZWxzZSBpZiAoYyA9PSBT SSkgeyAvKiBTaGlmdCBJbiAqLworCQkJaW5zaGlmdCA9IDA7CisJCQljb250aW51ZTsKKwkJICAg IH0KKwkJICAgIGlmIChpbnNoaWZ0KSBjIHw9IDAyMDA7CisJCX0KKwkJaW54YnVmWzBdID0gYzsJ CS8qIEluIGNhc2UgdGhlcmUgaXMgbm8gdHJhbnNsYXRpb24gKi8KKwkJaW54Y291bnQgPSAxOwkJ LyogLi4uICovCisjaWZuZGVmIE5PQ1NFVFMKKwkJaWYgKGluZXNjWzBdID09IEVTX05PUk1BTCAv KiBJZiBub3QgaW4gYW4gZXNjYXBlIHNlcXVlbmNlICovCisJCSAgICAmJiAhcHJpbnRpbmcJLyog YW5kIG5vdCBpbiB0cmFuc3BhcmVudCBwcmludCAqLworCQkgICAgKSB7CQkJLyogVHJhbnNsYXRl IGNoYXJhY3RlciBzZXRzICovCisjaWZkZWYgVU5JQ09ERQorCQkgICAgaW50IHg7CisJCSAgICBp ZiAodW5pY29kZSA9PSAxKSB7CS8qIFJlbW90ZSBpcyBVVEYtOCAqLworCQkJeCA9IHVfdG9fYigo Q0hBUiljKTsKKwkJCWlmICh4ID09IC0xKQorCQkJICBjb250aW51ZTsKKwkJCWVsc2UgaWYgKHgg PT0gLTIpIHsgLyogTFMgb3IgUFMgKi8KKwkJCSAgICBpbnhidWZbMF0gPSBDUjsKKwkJCSAgICBp bnhidWZbMV0gPSBMRjsKKwkJCSAgICBpbnhjb3VudCA9IDI7CisJCQl9IGVsc2UgaWYgKHggPT0g LTkpIHsgLyogVVRGLTggZXJyb3IgKi8KKwkJCSAgICBpbnhidWZbMF0gPSAnPyc7CisJCQkgICAg aW54YnVmWzFdID0gdV90b19iMigpOworCQkJICAgIGlueGNvdW50ID0gMjsKKwkJCX0gZWxzZSB7 CisJCQkgICAgaW54YnVmWzBdID0gKHVuc2lnbmVkKSh4ICYgMHhmZik7CisJCQl9CisJCQljID0g aW54YnVmWzBdOworCQkgICAgfSBlbHNlIGlmICh1bmljb2RlID09IDIpIHsgLyogTG9jYWwgaXMg VVRGLTggKi8KKwkJCWlueGNvdW50ID0gYl90b191KChDSEFSKWMsaW54YnVmLE9VVFhCVUZTSVos dGNzc2l6ZSk7CisJCQljID0gaW54YnVmWzBdOworCQkgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBV TklDT0RFICovCisJCQlpZiAoc3hpKSBjID0gKCpzeGkpKChDSEFSKWMpOworCQkJaWYgKHJ4aSkg YyA9ICgqcnhpKSgoQ0hBUiljKTsKKwkJCWlueGJ1ZlswXSA9IGM7CisjaWZkZWYgVU5JQ09ERQor CQkgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkJfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8K KworI2lmbmRlZiBOT0VTQ1NFUQorCQlpZiAoZXNjc2VxKSB7CQkvKiBJZiBoYW5kbGluZyBlc2Nh cGUgc2VxdWVuY2VzICovCisJCSAgICBvbGRwcnQgPSBwcmludGluZzsJICAgICAvKiByZW1lbWJl ciBwcmludGVyIHN0YXRlICovCisJCSAgICBhcGNyYyA9IGNoa2FlcygoY2hhciljLDApOyAvKiBh bmQgdXBkYXRlIGVzY3NlcSBzdGF0ZS4gKi8KKwkJICAgIGlmIChwcmludGluZyAmJiAhb2xkcHJ0 KSAvKiBJZiBwcmludGVyIHdhcyB0dXJuZWQgb24gKi8KKwkJICAgICAgY29udGludWU7CQkvKiBk b24ndCBwcmludCBmaW5hbCBjaGFyIG9mIGVzY3NlcSAqLworCQl9CisjaWZkZWYgQ0tfQVBDCisv KgorICBJZiB3ZSBhcmUgaGFuZGxpbmcgQVBDcywgd2UgaGF2ZSBzZXZlcmFsIHBvc3NpYmlsaXRp ZXMgYXQgdGhpcyBwb2ludDoKKyAgIDEuIE9yZGluYXJ5IGNoYXJhY3RlciB0byBiZSB3cml0dGVu IHRvIHRoZSBzY3JlZW4uCisgICAyLiBBbiBFc2M7IHdlIGNhbid0IHdyaXRlIGl0IGJlY2F1c2Ug aXQgbWlnaHQgYmUgdGhlIGJlZ2lubmluZyBvZiBhbiBBUEMuCisgICAzLiBUaGUgY2hhcmFjdGVy IGZvbGxvd2luZyBhbiBFc2MsIGluIHdoaWNoIGNhc2Ugd2Ugd3JpdGUgRXNjLCB0aGVuIGNoYXIs CisgICAgICBidXQgb25seSBpZiB3ZSBoYXZlIG5vdCBqdXN0IGVudGVyZWQgYW4gQVBDIHNlcXVl bmNlLgorKi8KKwkJaWYgKGVzY3NlcSAmJiAoYXBjc3RhdHVzICYgQVBDX09OKSkgeworCQkgICAg aWYgKGluZXNjWzBdID09IEVTX0dPVEVTQykgLyogRG9uJ3Qgd3JpdGUgRVNDIHlldCAqLworCQkg ICAgICBjb250aW51ZTsKKwkJICAgIGVsc2UgaWYgKG9sZGVzY1swXSA9PSBFU19HT1RFU0MgJiYg IWFwY2FjdGl2ZSkgeworCQkJY2tjcHV0YyhFU0MpOwkvKiBXcml0ZSBzYXZlZCBFU0MgKi8KKwkJ CWlmIChzZXNsb2cgJiYgIXNlc3NmdCkgTE9HQ0hBUigoY2hhcilFU0MpOworCQkgICAgfSBlbHNl IGlmIChhcGNyYykgewkvKiBXZSBoYXZlIGFuIEFQQyAqLworCQkJZGVidWcoRjExMSwiQ09OTkVD VCBBUEMgY29tcGxldGUiLGFwY2J1ZixhcGNsZW5ndGgpOworCQkJY2tjcHV0ZigpOwkvKiBGb3Jj ZSBzY3JlZW4gdXBkYXRlICovCisJCQljeF9zdGF0dXMgPSBDU1hfQVBDOworCQkJZ290byBjb25y ZXQxOworCQkgICAgfQorCQl9CisjZW5kaWYgLyogQ0tfQVBDICovCisjZW5kaWYgLyogTk9FU0NT RVEgKi8KKworCQlkZWJ1ZyhGMTExLCJJTlhCVUYiLGlueGJ1Zixpbnhjb3VudCk7CisJCWZvciAo aSA9IDA7IGkgPCBpbnhjb3VudDsgaSsrKSB7IC8qIExvb3AgdGhydSAqLworCQkgICAgYyA9IGlu eGJ1ZltpXTsJLyogaW5wdXQgZXhwYW5zaW9uIGJ1ZmZlci4uLiAqLworCQkgICAgaWYgKAorI2lm ZGVmIENLX0FQQworCQkJIWFwY2FjdGl2ZSAmJgkvKiBEb24ndCBkaXNwbGF5IEFQQyBzZXF1ZW5j ZXMgKi8KKyNlbmRpZiAvKiBDS19BUEMgKi8KKwkJCSFwcmludGluZwkvKiBvciB0cmFuc3BhcmVu dCBwcmludCBtYXRlcmlhbCAqLworCisJCQkpIHsKKwkJCWMgJj0gY21kbXNrOwkvKiBBcHBseSBj b21tYW5kIG1hc2suICovCisKKwkJCS8qIEhhbmRsZSBiYXJlIGNhcnJpYWdlIHJldHVybnMgYW5k IGxpbmVmZWVkcyAqLworCisJCQlpZiAoYyA9PSBDUiAmJiB0dF9jcmQpIHsgLyogU0VUIFRFUk0g Q1ItRElTUExBIENSTEY/ICovCisJCQkgICAgY2tjcHV0YyhjKTsJLyogWWVzLCBvdXRwdXQgQ1Ig Ki8KKwkJCSAgICBpZiAoc2VzbG9nICYmICFzZXNzZnQpIExPR0NIQVIoKGNoYXIpYyk7CisJCQkg ICAgYyA9IExGOwkvKiBhbmQgaW5zZXJ0IGEgbGluZWZlZWQgKi8KKwkJCX0KKwkJCWlmIChjID09 IExGICYmIHR0X2xmZCkgeyAvKiBTRVQgVEVSTSBDUi1ESVNQTEEgQ1JMRj8gKi8KKwkJCSAgICBj a2NwdXRjKENSKTsgLyogWWVzLCBvdXRwdXQgQ1IgKi8KKwkJCSAgICBpZiAoc2VzbG9nICYmICFz ZXNzZnQpIExPR0NIQVIoKGNoYXIpQ1IpOworCQkJfQorI2lmbmRlZiBOT0VTQ1NFUQorCQkJaWYg KGRvbnRwcmludCkJeyAvKiBEbyB0cmFuc3BhcmVudCBwcmludGluZy4gKi8KKwkJCSAgICBkb250 cHJpbnQgPSAwOworCQkJICAgIGNvbnRpbnVlOworCQkJfSBlbHNlCisjZW5kaWYJLyogTk9FU0NT RVEgKi8KKwkJCWNrY3B1dGMoYyk7CS8qIFdyaXRlIGNoYXJhY3RlciB0byBzY3JlZW4gKi8KKwkJ ICAgIH0KKwkJICAgIGlmIChzZXNsb2cgJiYgIXNlc3NmdCkgeyAvKiBIYW5kbGUgc2Vzc2lvbiBs b2cuICovCisJCQlMT0dDSEFSKChjaGFyKWMpOworCQkgICAgfQorI2lmZGVmIFhQUklOVAorCQkg ICAgaWYgKHByaW50aW5nICYmICFpbmVzY1swXSkgeworCQkJLyogemNob3V0KCkgY2FuJ3QgYmUg dXNlZCBiZWNhdXNlICovCisJCQkvKiBpdCdzIGJ1ZmZlcmVkIGRpZmZlcmVudGx5LiAqLworCQkJ Y2J1ZlswXSA9IGM7CisJCQl6c291dHgoWk1GSUxFLChjaGFyICopY2J1ZiwxKTsKKwkJICAgIH0K KyNlbmRpZiAvKiBYUFJJTlQgKi8KKworI2lmZGVmIENLX1RSSUdHRVIKKwkJICAgIC8qIENoZWNr IGZvciB0cmlnZ2VyIHN0cmluZyAqLworCQkgICAgaWYgKHR0X3RyaWdnZXJbMF0pIHsKKwkJCWlu dCBpOworCQkJaWYgKChpID0gYXV0b2V4aXRjaGsoKENIQVIpYykpID4gLTEpIHsKKwkJCSAgICBt YWtlc3RyKCZ0cmlnZ2VydmFsLHR0X3RyaWdnZXJbaV0pOworCQkJICAgIGNrY3B1dGYoKTsJLyog Rm9yY2Ugc2NyZWVuIHVwZGF0ZSAqLworI2lmZGVmIE5PU0VUQlVGCisJCQkgICAgZmZsdXNoKHN0 ZG91dCk7IC8qIEkgbWVhbiByZWFsbHkgZm9yY2UgaXQgKi8KKyNlbmRpZiAvKiBOT1NFVEJVRiAq LworCQkJICAgIGN4X3N0YXR1cyA9IENTWF9UUklHR0VSOworCQkJICAgIGdvdG8gY29ucmV0MTsK KwkJCX0KKwkJICAgIH0KKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisJCX0KKwkgICAgfQorCX0K KyNpZm5kZWYgQkVCT1gKKwlpZiAoRkRfSVNTRVQoc2Nybm91dCwgJm91dCkpIHsKKwkgICAgRkRf Q0xSKHNjcm5vdXQsICZvdXQpOworCX0KKyNlbmRpZiAvKiBCRUJPWCAqLworICAgIH0gLyogRW5k IG9mIGJpZyBsb29wICovCisgIGNvbnJldDE6CQkJCS8qIENvbWUgaGVyZSB0byBzdWNjZWVkICov CisgICAgcmMgPSAxOworICBjb25yZXQwOgkJCQkvKiBDb21tb24gZXhpdCBwb2ludCAqLworI2lm ZGVmIEJFQk9YCisgICAgeworCWxvbmcgcmV0X3ZhbDsKKwljbG9zZXNvY2tldChwYWlyWzBdKTsK KwljbG9zZXNvY2tldChwYWlyWzFdKTsKKwl4ID0ga2lsbCh0aWQsU0lHS0lMTFRIUik7CS8qIEtp bGwgdGhyZWFkICovCisJd2FpdF9mb3JfdGhyZWFkICh0aWQsICZyZXRfdmFsKTsKKyAgICB9Cisj ZW5kaWYgLyogQkVCT1ggKi8KKworI2lmZGVmIENLTEVBUk4KKyAgICBpZiAobGVhcm5pbmcgJiYg bGVhcm5mcCkKKyAgICAgIGZwdXRzKCJcbiIsbGVhcm5mcCk7CisjZW5kaWYgLyogQ0tMRUFSTiAq LworCisgICAgY29ucmVzKCk7CisgICAgaWYgKGRvaGFuZ3VwID4gMCkgeworI2lmZGVmIE5FVENP Tk4KKwlpZiAobmV0d29yaworI2lmZGVmIFROQ09ERQorCSAgICAmJiAhVEVMT1BUX01FKFRFTE9Q VF9DT01QT1JUKQorI2VuZGlmIC8qIFROQ09ERSAqLworCSAgICApCisJICB0dGNsb3MoMCk7Cisj ZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZuZGVmIENPTU1FTlQKKy8qCisgIFRoaXMgaXMgYmFk IGJlY2F1c2UgaWYgdGhleSBzYWlkIFNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EIE1PREVNLUNPTU1B TkQsCisgIHRoZXkgbWVhbiBpdCAtLSB3ZSBzaG91bGRuJ3QgZmFsbCBiYWNrIG9uIHR0aGFuZygp IGlmIG1kbWh1cCgpIGZhaWxzLAorICBiZWNhdXNlIG1heWJlIHRoZXkgaGF2ZSBzb21lIHNwZWNp YWwga2luZCBvZiBjb25uZWN0aW9uLiAgT24gdGhlIG90aGVyCisgIGhhbmQsIG1ha2luZyB0aGlz IGNoYW5nZSBwcmV2ZW50cyBkaWFsaW5nIGZyb20gd29ya2luZyBhdCBhbGwgaW4gc29tZQorICBj YXNlcy4gIEZ1cnRoZXIgc3R1ZHkgbmVlZGVkLgorKi8KKyNpZm5kZWYgTk9ESUFMCisJaWYgKGRv aGFuZ3VwID4gMSkJCS8qIFVzZXIgYXNrZWQgZm9yIGl0ICovCisJICBpZiAobWRtaHVwKCkgPCAx KQkJLyogTWF5YmUgaGFuZyB1cCB2aWEgbW9kZW0gKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKwkg ICAgdHRoYW5nKCk7CQkJLyogQW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYW5nIHVwICovCisjZWxz ZQorCWlmICghbmV0d29yaykgewkJCS8qIFNlcmlhbCBjb25uZWN0aW9uLiAqLworI2lmbmRlZiBO T0RJQUwKKwkgICAgaWYgKGRpYWxtaHUpCQkvKiBIYW5nIHVwIHRoZSB3YXkgdGhleSBzYWlkIHRv LiAqLworCSAgICAgIG1kbWh1cCgpOworCSAgICBlbHNlCisjZW5kaWYgLyogTk9ESUFMICovCisJ ICAgICAgdHRoYW5nKCk7CisJfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlkb2xvZ2VuZCgpOwor CWRvaGFuZ3VwID0gMDsJCQkvKiBhZ2FpbiB1bmxlc3MgcmVxdWVzdGVkIGFnYWluLiAqLworICAg IH0KKyAgICBpZiAocXVpdG5vdykJCQkvKiBFeGl0IG5vdyBpZiByZXF1ZXN0ZWQuICovCisgICAg ICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7CisgICAgaWYgKG1zZ2ZsZworI2lmZGVmIENLX0FQ QworCSYmICFhcGNhY3RpdmUKKyNlbmRpZiAvKiBDS19BUEMgKi8KKwkpCisgICAgICBwcmludGYo IihCYWNrIGF0ICVzKSIsICpteWhvc3QgPyBteWhvc3QgOiAibG9jYWwgVU5JWCBzeXN0ZW0iKTsK KyNpZmRlZiBDS19BUEMKKyAgICBpZiAoIWFwY2FjdGl2ZSkKKyNlbmRpZiAvKiBDS19BUEMgKi8K KyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB3aGF0ID0gV19OT1RISU5HOwkJCS8qIFNvIGNvbnNv bGUgbW9kZXMgc2V0IHJpZ2h0LiAqLworI2lmbmRlZiBOT0NTRVRTCisgICAgbGFuZ3VhZ2UgPSBs YW5nc3Y7CQkJLyogUmVzdG9yZSBsYW5ndWFnZSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNp ZmRlZiBDS19BUEMKKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGV4aXQgYXBjYWN0aXZlIiwiIixh cGNhY3RpdmUpOworICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgZXhpdCBqdXN0b25lIiwiIixqdXN0 b25lKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyAgICBpZiAobXNnZmxnKSB7CisjaWZkZWYgQ0tf QVBDCisJaWYgKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwpCisJICBwcmludGYoIlxuIik7CisjZW5k aWYgLyogQ0tfQVBDICovCisJcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlwcmludGJhciA9IDE7CisgICAgfSBlbHNlCisJ cHJpbnRiYXIgPSAwOworICAgIGZmbHVzaChzdGRvdXQpOworICAgIHJldHVybihyYyk7Cit9CisK Ky8qICBIIEMgTyBOIE4gRSAgLS0gIEdpdmUgaGVscCBtZXNzYWdlIGZvciBjb25uZWN0LiAgKi8K KworI2RlZmluZSBDWE1fU0VSIDEJCQkvKiBTZXJpYWwgY29ubmVjdGlvbnMgb25seSAqLworI2Rl ZmluZSBDWE1fTkVUIDIJCQkvKiBOZXR3b3JrIG9ubHkgKGJ1dCBub3QgVGVsbmV0KSAqLworI2Rl ZmluZSBDWE1fVEVMIDQJCQkvKiBUZWxuZXQgb25seSAqLworCitzdGF0aWMgc3RydWN0IGhtc2d0 YWIgeworICAgIGNoYXIgKiBobXNnOworICAgIGludCBoZmxhZ3M7Cit9IGhscG1zZ1tdID0gewor ICAgIHsiICA/IG9yIEggZm9yIHRoaXMgbWVzc2FnZSIsICAgICAgICAgICAgICAgIDB9LAorICAg IHsiICAwICh6ZXJvKSB0byBzZW5kIHRoZSBOVUwgKDApIGNoYXJhY3RlciIsIDB9LAorICAgIHsi ICBCIHRvIHNlbmQgYSBCUkVBSyBzaWduYWwgKDAuMjc1c2VjKSIsICBDWE1fU0VSfSwKKyNpZmRl ZiBORVRDT05OCisgICAgeyIgIEIgdG8gc2VuZCBhIG5ldHdvcmsgQlJFQUsiLCAgICAgICAgICAg IENYTV9ORVR9LAorICAgIHsiICBCIHRvIHNlbmQgYSBUZWxuZXQgQlJFQUsiLCAgICAgICAgICAg ICBDWE1fVEVMfSwKKyNlbmRpZiAvKiBORVRDT05OICovCisjaWZkZWYgQ0tfTEJSSworICAgIHsi ICBMIHRvIHNlbmQgYSBMb25nIEJSRUFLICgxLjVzZWMpIiwgICAgICBDWE1fU0VSfSwKKyNlbmRp ZiAvKiBDS19MQlJLICovCisjaWZkZWYgTkVUQ09OTgorICAgIHsiICBJIHRvIHNlbmQgYSBuZXR3 b3JrIGludGVycnVwdCBwYWNrZXQiLCBDWE1fTkVUfSwKKyAgICB7IiAgSSB0byBzZW5kIGEgVGVs bmV0IEludGVycnVwdCByZXF1ZXN0IiwgQ1hNX1RFTH0sCisjaWZkZWYgVE5DT0RFCisgICAgeyIg IEEgdG8gc2VuZCBUZWxuZXQgQXJlLVlvdS1UaGVyZT8iLCAgICAgIENYTV9URUx9LAorI2VuZGlm IC8qIFROQ09ERSAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyAgICB7IiAgVSB0byBoYW5ndXAg YW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uIiwgMH0sCisgICAgeyIgIFEgdG8gaGFuZ3VwIGFuZCBx dWl0IEtlcm1pdCIsICAgICAgICAgIDB9LAorICAgIHsiICBTIGZvciBzdGF0dXMiLCAgICAgICAg ICAgICAgICAgICAgICAgICAwfSwKKyNpZmRlZiBOT1BVU0gKKyAgICB7IiAgISB0byBwdXNoIHRv IGxvY2FsIHNoZWxsIChkaXNhYmxlZCkiLCAgMH0sCisgICAgeyIgIFogdG8gc3VzcGVuZCAoZGlz YWJsZWQpIiwgICAgICAgICAgICAgIDB9LAorI2Vsc2UKKyAgICB7IiAgISB0byBwdXNoIHRvIGxv Y2FsIHNoZWxsIiwgICAgICAgICAgICAgMH0sCisjaWZkZWYgTk9KQworICAgIHsiICBaIHRvIHN1 c3BlbmQgKGRpc2FibGVkKSIsICAgICAgICAgICAgICAwfSwKKyNlbHNlCisgICAgeyIgIFogdG8g c3VzcGVuZCIsICAgICAgICAgICAgICAgICAgICAgICAgIDB9LAorI2VuZGlmIC8qIE5PSkMgKi8K KyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICB7IiAgXFwgYmFja3NsYXNoIGNvZGU6IiwgICAgICAg ICAgICAgICAgICAgMH0sCisgICAgeyIgICAgXFxubm4gIGRlY2ltYWwgY2hhcmFjdGVyIGNvZGUi LCAgICAgIDB9LAorICAgIHsiICAgIFxcT25ubiBvY3RhbCBjaGFyYWN0ZXIgY29kZSIsICAgICAg ICAwfSwKKyAgICB7IiAgICBcXFhoaCAgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIGNvZGU7IiwgMH0s CisgICAgeyIgICAgdGVybWluYXRlIHdpdGggQ2FycmlhZ2UgUmV0dXJuLiIsICAgIDB9LAorICAg IHsiICBUeXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGFnYWluIHRvIHNlbmQgdGhlIGVzY2FwZSBj aGFyYWN0ZXIgaXRzZWxmLCIsCisgICAgICAgMH0sCisgICAgeyIgIG9yIHByZXNzIHRoZSBzcGFj ZS1iYXIgdG8gcmVzdW1lIHRoZSBDT05ORUNUIHNlc3Npb24uIiwgMH0sCisgICAge05VTEwsIDB9 Cit9OworCitpbnQKK2hjb25uZSgpIHsKKyAgICBpbnQgYywgaSwgY3h0eXBlOworICAgIGlmIChu ZXR3b3JrKQorICAgICAgY3h0eXBlID0gSVNfVEVMTkVUKCkgPyBDWE1fVEVMIDogQ1hNX05FVDsK KyAgICBlbHNlCisgICAgICBjeHR5cGUgPSBDWE1fU0VSOworCisgICAgY29ub2woIlxyXG4tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIpOwor ICAgIGNvbm9sbCgiUHJlc3M6Iik7CisgICAgY29ub2woIiAgQyB0byByZXR1cm4gdG8gIik7Cisg ICAgY29ub2xsKCpteWhvc3QgPyBteWhvc3QgOiAidGhlIEMtS2VybWl0IHByb21wdCIpOworICAg IGZvciAoaSA9IDA7IGhscG1zZ1tpXS5obXNnOyBpKyspIHsKKwlpZiAoIShobHBtc2dbaV0uaGZs YWdzKSB8fCAoaGxwbXNnW2ldLmhmbGFncyA9PSBjeHR5cGUpKQorCSAgY29ub2xsKGhscG1zZ1tp XS5obXNnKTsKKyAgICB9CisgICAgY29ub2woIlByZXNzIGEga2V5PiIpOwkJLyogUHJvbXB0IGZv ciBjb21tYW5kLiAqLworICAgIGMgPSBDT05HS1MoKSAmIDAxNzc7CQkvKiBHZXQgY2hhcmFjdGVy LCBzdHJpcCBhbnkgcGFyaXR5LiAqLworICAgIC8qIE5vIGtleSBtYXBwaW5nIG9yIHRyYW5zbGF0 aW9uIGhlcmUgKi8KKyAgICBpZiAoYyAhPSBDTURRKQorICAgICAgY29ub2xsKCIiKTsKKyAgICBj b25vbGwoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0iKTsKKyAgICByZXR1cm4oYyk7CQkJCS8qIFJldHVybiBpdC4gKi8KK30KKworCisvKiAgRCBP IEUgUyBDICAtLSAgUHJvY2VzcyBhbiBlc2NhcGUgY2hhcmFjdGVyIGFyZ3VtZW50ICAqLworCitW T0lECisjaWZkZWYgQ0tfQU5TSUMKK2RvZXNjKGNoYXIgYykKKyNlbHNlCitkb2VzYyhjKSBjaGFy IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvZXNjICovIHsKKyAgICBDSEFSIGQ7CisK KyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGRvZXNjIiwiIixjKTsKKyAgICB3aGlsZSAoMSkgewor CWlmIChjID09IGVzY2FwZSkgewkJLyogU2VuZCBlc2NhcGUgY2hhcmFjdGVyICovCisJICAgIGQg PSBkb3BhcigoQ0hBUikgYyk7IHR0b2MoKGNoYXIpIGQpOyByZXR1cm47CisgICAgCX0gZWxzZQkJ CQkvKiBPciBlbHNlIGxvb2sgaXQgdXAgYmVsb3cuICovCisJICAgIGlmIChpc3VwcGVyKGMpKSBj ID0gdG9sb3dlcihjKTsKKworCXN3aXRjaChjKSB7CisKKwkgIGNhc2UgJ2MnOgkJCS8qIEVzY2Fw ZSBiYWNrIHRvIHByb21wdCAqLworCSAgY2FzZSAnXDAzJzoKKwkgICAgY3hfc3RhdHVzID0gQ1NY X0VTQ0FQRTsKKyNpZmRlZiBOT0lDUAorCSAgICBjb25vbGwoIiIpOworCSAgICBjb25vbGwoIiIp OworCSAgICBjb25vbGwoCisiICBXQVJOSU5HOiBUaGlzIHZlcnNpb24gb2YgQy1LZXJtaXQgaGFz IG5vIGNvbW1hbmQgcHJvY2Vzc29yIHRvIGVzY2FwZSIKKwkJICAgKTsKKwkgICAgY29ub2xsKAor IiAgYmFjayB0by4gIFRvIHJldHVybiB0byB5b3VyIGxvY2FsIHN5c3RlbSwgbG9nIG91dCBmcm9t IHRoZSByZW1vdGUgYW5kL29yIgorCQkgICApOworCSAgICBjb25vbGwoCisiICB1c2UgdGhlIGVz Y2FwZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhlIGxldHRlciBVIHRvIGNsb3NlIChoYW5nIFVw KSB0aGUiCisJCSAgICk7CisJICAgIGNvbm9sbCgKKyIgIGNvbm5lY3Rpb24uICBSZXN1bWluZyB5 b3VyIHNlc3Npb24uLi4iCisJCSAgICk7CisJICAgIGNvbm9sbCgiIik7CisJICAgIHJldHVybjsK KyNlbHNlCisJICAgIGFjdGl2ZSA9IDA7IGNvbm9sKCJcclxuIik7IHJldHVybjsKKyNlbmRpZiAv KiBOT0lDUCAqLworCisJICBjYXNlICdiJzoJCQkvKiBTZW5kIGEgQlJFQUsgc2lnbmFsICovCisJ ICBjYXNlICdcMDInOgorI2lmZGVmIENLTEVBUk4KKwkgICAgbGVhcm5jaGFyKC03KTsKKyNlbmRp ZiAvKiBDS0xFQVJOICovCisJICAgIHR0c25kYigpOyByZXR1cm47CisKKyNpZmRlZiBORVRDT05O CisJICBjYXNlICdpJzoJCQkvKiBTZW5kIEludGVycnVwdCAqLworCSAgY2FzZSAnXDAxMSc6Cisj aWZkZWYgVENQU09DS0VUCisJICAgIGlmIChuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7IC8qIFRF TE5FVCAqLworCQl0ZW1wWzBdID0gKENIQVIpIElBQzsJLyogSSBBbSBhIENvbW1hbmQgKi8KKwkJ dGVtcFsxXSA9IChDSEFSKSBUTl9JUDsJLyogSW50ZXJydXB0IFByb2Nlc3MgKi8KKwkJdGVtcFsy XSA9IE5VTDsKKwkJdHRvbCgoQ0hBUiAqKXRlbXAsMik7CisJICAgIH0gZWxzZQorI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworCSAgICAgIGNvbm9jKEJFTCk7CisJICAgIHJldHVybjsKKworI2lmZGVm IFRDUFNPQ0tFVAorCSAgY2FzZSAnYSc6CQkJLyogIkFyZSBZb3UgVGhlcmU/IiAqLworCSAgY2Fz ZSAnXDAxJzoKKwkgICAgaWYgKG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsKKwkJdGVtcFswXSA9 IChDSEFSKSBJQUM7CS8qIEkgQW0gYSBDb21tYW5kICovCisJCXRlbXBbMV0gPSAoQ0hBUikgVE5f QVlUOyAvKiBBcmUgWW91IFRoZXJlPyAqLworCQl0ZW1wWzJdID0gTlVMOworCQl0dG9sKChDSEFS ICopdGVtcCwyKTsKKwkgICAgfSBlbHNlIGNvbm9jKEJFTCk7CisJICAgIHJldHVybjsKKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBDS19MQlJL CisJICBjYXNlICdsJzoJCQkvKiBTZW5kIGEgTG9uZyBCUkVBSyBzaWduYWwgKi8KKyNpZmRlZiBD S0xFQVJOCisJICAgIGxlYXJuY2hhcigtOCk7CisjZW5kaWYgLyogQ0tMRUFSTiAqLworCSAgICB0 dHNuZGxiKCk7IHJldHVybjsKKyNlbmRpZiAvKiBDS19MQlJLICovCisKKwkgIGNhc2UgJ3UnOgkJ CS8qIEhhbmd1cCAqLworICAgICAgIC8qIGNhc2UgJ1wwMTAnOiAqLwkJLyogTm8sIHRvbyBkYW5n ZXJvdXMgKi8KKwkgICAgY3hfc3RhdHVzID0gQ1NYX1VTRVJESVNDOworCSAgICBkb2hhbmd1cCA9 IDI7IGFjdGl2ZSA9IDA7IGNvbm9sKCJcclxuSGFuZ2luZyB1cCAiKTsgcmV0dXJuOworCisJICBj YXNlICdxJzoJCQkvKiBRdWl0ICovCisJICAgIGN4X3N0YXR1cyA9IENTWF9VU0VSRElTQzsKKwkg ICAgZG9oYW5ndXAgPSAyOyBxdWl0bm93ID0gMTsgYWN0aXZlID0gMDsgY29ub2woIlxyXG4iKTsg cmV0dXJuOworCisJICBjYXNlICdzJzoJCQkvKiBTdGF0dXMgKi8KKwkgICAgY29ub2xsKCIiKTsK KwkgICAgY29ub2xsKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tIik7CisjaWZkZWYgUFRZT1JQSVBFCisJICAgIGlmICh0dHBpcGUpCisJICAgICAg Y2ttYWttc2codGVtcCxUTVBMRU4sIiBQaXBlOiBcIiIsdHRuYW1lLCJcIiIsTlVMTCk7CisJICAg IGVsc2UgaWYgKHR0cHR5KQorCSAgICAgIGNrbWFrbXNnKHRlbXAsVE1QTEVOLCIgUHR5OiBcIiIs dHRuYW1lLCJcIiIsTlVMTCk7CisJICAgIGVsc2UKKyNlbmRpZiAvKiBQVFlPUlBJUEUgKi8KKwkg ICAgICBja21ha21zZyh0ZW1wLAorCQkgICAgICAgVE1QTEVOLAorCQkgICAgICAgIiAiLAorCQkg ICAgICAgKG5ldHdvcmsgPyAiSG9zdCIgOiAiRGV2aWNlIiksCisJCSAgICAgICAiOiAiLAorCQkg ICAgICAgdHRuYW1lCisJCSAgICAgICApOworCSAgICBjb25vbGwodGVtcCk7CisKKwkgICAgLyog VGhlIGZvbGxvd2luZyBzcHJpbnRmJ3MgYXJlIHNhZmUsIHRlbXBbXSBzaXplIGlzIGF0IGxlYXN0 IDIwMCAqLworCisJICAgIGlmICghbmV0d29yayAmJiBzcGVlZCA+PSAwTCkgeworCQlzcHJpbnRm KHRlbXAsIlNwZWVkICVsZCIsIHNwZWVkKTsKKwkJY29ub2xsKHRlbXApOworCSAgICB9CisJICAg IHNwcmludGYodGVtcCwiIFRlcm1pbmFsIGVjaG86ICVzIiwgZHVwbGV4ID8gImxvY2FsIiA6ICJy ZW1vdGUiKTsKKwkgICAgY29ub2xsKHRlbXApOworCSAgICBzcHJpbnRmKHRlbXAsIiBUZXJtaW5h bCBieXRlc2l6ZTogJWQiLCAoY21hc2sgPT0gMDE3NykgPyA3IDogOCk7CisJICAgIGNvbm9sbCh0 ZW1wKTsKKwkgICAgc3ByaW50Zih0ZW1wLCIgQ29tbWFuZCBieXRlc2l6ZTogJWQiLCAoY21kbXNr ID09IDAxNzcpID8gNyA6IDgpOworCSAgICBjb25vbGwodGVtcCk7CisgICAgICAgICAgICBpZiAo aHdwYXJpdHkpCisgICAgICAgICAgICAgIHNwcmludGYodGVtcCwiIFBhcml0eVtoYXJkd2FyZV06 ICVzIixwYXJuYW0oaHdwYXJpdHkpKTsKKyAgICAgICAgICAgIGVsc2UJICAgIAorICAgICAgICAg ICAgICBzcHJpbnRmKHRlbXAsIiBQYXJpdHk6ICVzIiwgcGFybmFtKHBhcml0eSkpOworCSAgICBj b25vbGwodGVtcCk7CisjaWZuZGVmIE5PWEZFUgorCSAgICBzcHJpbnRmKHRlbXAsIiBBdXRvZG93 bmxvYWQ6ICVzIiwgYXV0b2RsID8gIm9uIiA6ICJvZmYiKTsKKwkgICAgY29ub2xsKHRlbXApOwor I2VuZGlmIC8qIE5PWEZFUiAqLworCSAgICBja21ha21zZyh0ZW1wLAkJLyogKHdvdWxkIG5vdCBi ZSBzYWZlIGZvciBzcHJpbnRmKSAqLworCQkgICAgIFRNUExFTiwKKwkJICAgICAiIFNlc3Npb24g bG9nOiAiLAorCQkgICAgICpzZXNmaWwgPyBzZXNmaWwgOiAiKG5vbmUpIiwKKwkJICAgICBOVUxM LAorCQkgICAgIE5VTEwKKwkJICAgICApOworCSAgICBjb25vbGwodGVtcCk7CisjaWZuZGVmIE5P U0hPVworCSAgICBpZiAoIW5ldHdvcmspIHNob21kbSgpOworI2VuZGlmIC8qIE5PU0hPVyAqLwor I2lmZGVmIENLTE9HRElBTAorCSAgICB7CisJCWxvbmcgejsKKwkJeiA9IGRvbG9nc2hvdygwKTsK KwkJaWYgKHogPiAtMUwpIHsKKwkJICAgIHNwcmludGYodGVtcCwiIEVsYXBzZWQgdGltZTogJXMi LGhobW1zcyh6KSk7CisJCSAgICBjb25vbGwodGVtcCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8q IENLTE9HRElBTCAqLworCSAgICBjb25vbGwoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKwkgICAgcmV0dXJuOworCisJICBjYXNlICdoJzoJ CQkvKiBIZWxwICovCisJICBjYXNlICc/JzoJCQkvKiBIZWxwICovCisJICAgIGMgPSBoY29ubmUo KTsgY29udGludWU7CisKKwkgIGNhc2UgJzAnOgkJCS8qIFNlbmQgYSBudWxsICovCisJICAgIGMg PSAnXDAnOyBkID0gZG9wYXIoKENIQVIpIGMpOyB0dG9jKChjaGFyKSBkKTsgcmV0dXJuOworCisJ ICBjYXNlICd6JzogY2FzZSAnXDAzMic6CS8qIFN1c3BlbmQgKi8KKyNpZm5kZWYgTk9QVVNICisJ ICAgIGlmICghbm9wdXNoKQorCSAgICAgIHN0cHRyYXAoMCk7CisJICAgIGVsc2UKKwkgICAgICBj b25vYyhCRUwpOworI2Vsc2UKKwkgICAgY29ub2MoQkVMKTsKKyNlbmRpZiAvKiBOT1BVU0ggKi8K KwkgICAgcmV0dXJuOworCisJICBjYXNlICdAJzoJCQkvKiBTdGFydCBpbmZlcmlvciBjb21tYW5k IHByb2Nlc3NvciAqLworCSAgY2FzZSAnISc6CisjaWZuZGVmIE5PUFVTSAorCSAgICBpZiAoIW5v cHVzaCkgeworCQljb25yZXMoKTsJCSAgICAgIC8qIFB1dCBjb25zb2xlIGJhY2sgdG8gbm9ybWFs ICovCisJCXpzaGNtZCgiIik7CQkgICAgICAvKiBGb3JrIGEgc2hlbGwuICovCisJCWlmIChjb25i aW4oKGNoYXIpZXNjYXBlKSA8IDApIHsKKwkJICAgIGN4X3N0YXR1cyA9IENTWF9JTlRFUk5BTDsK KwkJICAgIHByaW50ZigiRXJyb3IgcmVzdW1pbmcgQ09OTkVDVCBzZXNzaW9uXG4iKTsKKwkJICAg IGFjdGl2ZSA9IDA7CisJCX0KKwkgICAgfSBlbHNlIGNvbm9jKEJFTCk7CisjZWxzZQorCSAgICBj b25vYyhCRUwpOworI2VuZGlmIC8qIE5PUFVTSCAqLworCSAgICByZXR1cm47CisKKwkgIGNhc2Ug U1A6CQkJLyogU3BhY2UsIGlnbm9yZSAqLworCSAgICByZXR1cm47CisKKwkgIGRlZmF1bHQ6CQkJ LyogT3RoZXIgKi8KKwkgICAgaWYgKGMgPT0gQ01EUSkgewkJLyogQmFja3NsYXNoIGVzY2FwZSAq LworCQlpbnQgeDsKKwkJZWNicCA9IGVjYnVmOworCQkqZWNicCsrID0gYzsKKwkJd2hpbGUgKCgo YyA9IChDT05HS1MoKSAmIGNtZG1zaykpICE9ICdccicpICYmIChjICE9ICdcbicpKQorCQkgICpl Y2JwKysgPSBjOworCQkqZWNicCA9IE5VTDsgZWNicCA9IGVjYnVmOworCQl4ID0geHhlc2MoJmVj YnApOwkvKiBJbnRlcnByZXQgaXQgKi8KKwkJaWYgKHggPj0gMCkgewkJLyogTm8ga2V5IG1hcHBp bmcgaGVyZSAqLworCQkgICAgYyA9IGRvcGFyKChDSEFSKSB4KTsKKwkJICAgIHR0b2MoKGNoYXIp IGMpOworCQkgICAgcmV0dXJuOworCQl9IGVsc2UgewkJLyogSW52YWxpZCBiYWNrc2xhc2ggY29k ZS4gKi8KKwkJICAgIGNvbm9jKEJFTCk7CisJCSAgICByZXR1cm47CisJCX0KKwkgICAgfQorCSAg ICBjb25vYyhCRUwpOyByZXR1cm47IAkvKiBJbnZhbGlkIGVzYyBhcmcsIGJlZXAgKi8KKyAgICAJ fQorICAgIH0KK30KKyNlbmRpZiAvKiBOT0xPQ0FMICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3Vjb24uYyBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1Y29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNTBjZWI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2t1Y29uLmMKQEAgLTAsMCArMSwyNjkwIEBACisjaW5jbHVkZSAi Y2tjc3ltLmgiCisKK2NoYXIgKmNvbm52ID0gIkNPTk5FQ1QgQ29tbWFuZCBmb3IgVU5JWDpmb3Jr KCksIDkuMC4xMTcsIDE0IEp1bCAyMDExIjsKKworLyogIEMgSyBVIEMgTyBOICAtLSAgVGVybWlu YWwgY29ubmVjdGlvbiB0byByZW1vdGUgc3lzdGVtLCBmb3IgVU5JWCAgKi8KKy8qCisgIEF1dGhv cjogRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNp dHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5 cmlnaHQgKEMpIDE5ODUsIDIwMTEsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0 eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2Vl IHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0 IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgor CisgIE5PVEU6IFRoaXMgbW9kdWxlIGhhcyBiZWVuIHN1cGVyc2VkZWQgb24gbW9zdCBwbGF0Zm9y bXMgYnkgY2t1Y25zLmMsIHdoaWNoCisgIHVzZXMgc2VsZWN0KCkgcmF0aGVyIHRoYW4gZm9yaygp IGZvciBtdWx0aXBsZXhpbmcgaXRzIGkvby4gIFRoaXMgbW9kdWxlCisgIGlzIHN0aWxsIG5lZWRl ZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgc2VsZWN0KCksIGFuZCBhbHNvIGZv cgorICBpdHMgWC4yNSBzdXBwb3J0LiAgQWx0aG91Z2ggdGhlIHR3byBtb2R1bGVzIHNoYXJlIGxh cmdlIGFtb3VudHMgb2YgY29kZSwKKyAgdGhlaXIgc3RydWN0dXJlIGlzIHJhZGljYWxseSBkaWZm ZXJlbnQgYW5kIHRoZXJlZm9yZSBhdHRlbXB0cyBhdCBtZXJnaW5nCisgIHRoZW0gaGF2ZSBzbyBm YXIgYmVlbiB1bnN1Y2Nlc3NmdWwuICAoTm92ZW1iZXIgMTk5OC4pCisKKyAgU3BlY2lhbCB0aGFu a3MgdG8gRWR1YXJkIFZvcGlja2EsIFByYWd1ZSBVbml2ZXJzaXR5IG9mIEVjb25vbWljcywKKyAg Q3plY2ggUmVwdWJsaWMsIGZvciB2YWx1YWJsZSBjb250cmlidXRpb25zIHRvIHRoaXMgbW9kdWxl IGluIEp1bHkgMTk5NCwKKyAgYW5kIHRvIE5lYWwgUC4gTXVycGh5IG9mIHRoZSBNb3Rvcm9sYSBD ZWxsdWxhciBJbmZyYXN0cnVjdHVyZSBHcm91cCBpbiAxOTk2CisgIGZvciByZWFycmFuZ2luZyB0 aGUgY29kZSB0byBhbGxvdyBvcGVyYXRpb24gb24gdGhlIEJlQm94LCB5ZXQgc3RpbGwgd29yawor ICBpbiByZWd1bGFyIFVOSVguCisqLworI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIENvbW1vbiB0 aGluZ3MgZmlyc3QgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisKKyNpZmRlZiBCRU9TT1JCRUJPWAor c3RhdGljIGRvdWJsZSB0aW1lX3N0YXJ0ZWQgPSAwLjA7CisjaW5jbHVkZSA8a2VybmVsL09TLmg+ CitfUFJPVE9UWVAoIHN0YXRpYyBsb25nIGNvbmNsZCwgKHZvaWQgKikgKTsKKyNlbHNlCitfUFJP VE9UWVAoIHN0YXRpYyBWT0lEIGNvbmNsZCwgKHZvaWQpICk7CisjZW5kaWYgLyogQkVPU09SQkVC T1ggKi8KKworI2lmZGVmIE5FWFQKKyN1bmRlZiBOU0lHCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4J CQkvKiBGb3Igd2FpdCgpICovCisjZW5kaWYgLyogTkVYVCAqLworCisjaW5jbHVkZSA8c2lnbmFs Lmg+CQkJLyogU2lnbmFscyAqLworCisjaWZuZGVmIEhQVVhQUkU2NQorI2luY2x1ZGUgPGVycm5v Lmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KKyNlbHNlCisjaWZuZGVmIEVSUk5PX0lO Q0xVREVECisjaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLwor I2VuZGlmCS8qIEVSUk5PX0lOQ0xVREVEICovCisjZW5kaWYJLyogSFBVWFBSRTY1ICovCisKKyNp ZmRlZiBaSUxPRwkJCQkvKiBMb25nanVtcHMgKi8KKyNpbmNsdWRlIDxzZXRyZXQuaD4KKyNlbHNl CisjaW5jbHVkZSA8c2V0am1wLmg+CisjZW5kaWYgLyogWklMT0cgKi8KKyNpbmNsdWRlICJja2Nz aWcuaCIKKworLyogS2VybWl0LXNwZWNpZmljIGluY2x1ZGVzICovCisKKyNpbmNsdWRlICJja2Nh c2MuaCIJCQkvKiBBU0NJSSBjaGFyYWN0ZXJzICovCisjaW5jbHVkZSAiY2tja2VyLmgiCQkJLyog S2VybWl0IHRoaW5ncyAqLworI2luY2x1ZGUgImNrdWNtZC5oIgkJCS8qIEZvciB4eGVzYygpIHBy b3RvdHlwZSAqLworI2luY2x1ZGUgImNrY25ldC5oIgkJCS8qIE5ldHdvcmsgc3ltYm9scyAqLwor I2lmbmRlZiBOT0NTRVRTCisjaW5jbHVkZSAiY2tjeGxhLmgiCQkJLyogQ2hhcmFjdGVyIHNldCB0 cmFuc2xhdGlvbiAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworLyogSW50ZXJuYWwgZnVuY3Rp b24gcHJvdG90eXBlcyAqLworCitfUFJPVE9UWVAoIFZPSUQgdHRmbHV4LCAodm9pZCkgKTsKK19Q Uk9UT1RZUCggVk9JRCBkb2VzYywgKGNoYXIpICk7CitfUFJPVE9UWVAoIFZPSUQgbG9nY2hhciwg KGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBoY29ubmUsICh2b2lkKSApOworI2lmbmRlZiBOT1NI T1cKK19QUk9UT1RZUCggVk9JRCBzaG9tZG0sICh2b2lkKSApOworI2VuZGlmIC8qIE5PU0hPVyAq LworX1BST1RPVFlQKCBzdGF0aWMgaW50IGtiZ2V0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggc3Rh dGljIGludCBwaXBlbXNnLCAoaW50KSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IGNrY3B1dGYs ICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBja19zbmRtc2csICh2b2lkKSApOwor LyoKKyAgRm9yIGludGVyLWZvcmsgc2lnbmFsaW5nLiAgTm9ybWFsbHkgd2UgdXNlIFNJR1VTUjEs IGV4Y2VwdCBvbiBTQ08sIHdoZXJlCisgIHdlIHVzZSBTSUdVU1IyIGJlY2F1c2UgU0lHVVNSMSBp cyB1c2VkIGJ5IHRoZSBzeXN0ZW0uICBZb3UgY2FuIGRlZmluZQorICBDS19GT1JLX1NJRyB0byBi ZSB3aGF0ZXZlciBvdGhlciBzaWduYWwgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGF0IGNvbXBpbGUK KyAgdGltZS4gIFdlIGRvbid0IHVzZSBTSUdVU1IyIGV2ZXJ5d2hlcmUgYmVjYXVzZSBpbiBzb21l IHN5c3RlbXMsIGxpa2UKKyAgVW5peFdhcmUsIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgU0lHVVNS MiBpcyB0byBraWxsIHRoZSBwcm9jZXNzIHRoYXQgZ2V0cyBpdC4KKyovCisjaWZuZGVmIENLX0ZP UktfU0lHCisKKyNpZm5kZWYgU0lHVVNSMQkJCQkvKiBVc2VyLWRlZmluZWQgc2lnbmFscyAqLwor I2RlZmluZSBTSUdVU1IxIDMwCisjZW5kaWYgLyogU0lHVVNSMSAqLworCisjaWZuZGVmIFNJR1VT UjIKKyNkZWZpbmUgU0lHVVNSMiAzMQorI2VuZGlmIC8qIFNJR1VTUjIgKi8KKworI2lmZGVmIE1f VU5JWAorI2RlZmluZSBDS19GT1JLX1NJRyBTSUdVU1IyCQkvKiBTQ08gLSB1c2UgU0lHVVNSMiAq LworI2Vsc2UKKyNkZWZpbmUgQ0tfRk9SS19TSUcgU0lHVVNSMQkJLyogT3RoZXJzIC0gdXNlIFNJ R1VTUjEgKi8KKyNlbmRpZiAvKiBNX1VOSVggKi8KKworI2VuZGlmIC8qIENLX0ZPUktfU0lHICov CisKKy8qIEV4dGVybmFsIHZhcmlhYmxlcyAqLworCitleHRlcm4gc3RydWN0IGNrX3AgcHRhYltd OworCitleHRlcm4gaW50IGxvY2FsLCBlc2NhcGUsIGR1cGxleCwgcGFyaXR5LCBmbG93LCBzZXNs b2csIHNlc3NmdCwgZGVic2VzLAorIG1kbXR5cCwgdHRucHJvdG8sIGNtYXNrLCBjbWRtc2ssIG5l dHdvcmssIG5ldHR5cGUsIGRlYmxvZywgc29zaSwgdG5sbSwKKyB4aXRzdGEsIHdoYXQsIHR0eWZk LCB0dHBpcGUsIHF1aWV0LCBiYWNrZ3JkLCBwZmxhZywgdHRfY3JkLCB0dF9sZmQsCisgdG5fbmxt LCB0dGZkZmxnLAorIHR0X2VzY2FwZSwganVzdG9uZSwgY2FycmllciwgaHdwYXJpdHk7CisKK2V4 dGVybiBsb25nIHNwZWVkOworZXh0ZXJuIGNoYXIgdHRuYW1lW10sIHNlc2ZpbFtdLCBteWhvc3Rb XSwgKmNjbnRhYltdOworI2lmZGVmIFROQ09ERQorZXh0ZXJuIGludCB0bl9iX25sbSwgdG5fcmVt X2VjaG87CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZmRlZiBDS19UUklHR0VSCitleHRlcm4g Y2hhciAqIHR0X3RyaWdnZXJbXSwgKiB0cmlnZ2VydmFsOworI2VuZGlmIC8qIENLX1RSSUdHRVIg Ki8KKworZXh0ZXJuIGludCBub3B1c2g7CisKKyNpZmRlZiBDS19BUEMKK2V4dGVybiBpbnQgYXBj YWN0aXZlOwkJCS8qIEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCAoQVBDKSAqLworZXh0ZXJu IGludCBhcGNzdGF0dXM7CQkJLyogaXRlbXMgLi4uICovCitzdGF0aWMgaW50IGFwY2xlbmd0aCA9 IDA7CisjaWZkZWYgRENNREJVRgorZXh0ZXJuIGNoYXIgKmFwY2J1ZjsKKyNlbHNlCitleHRlcm4g Y2hhciBhcGNidWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCitzdGF0aWMgaW50IGFwY2J1Zmxl biA9IEFQQ0JVRkxFTiAtIDI7CitleHRlcm4gaW50IHByb3RvY29sOwkJCS8qIEF1dG8gZG93bmxv YWQgKi8KKyNlbmRpZiAvKiBDS19BUEMgKi8KKworZXh0ZXJuIGludCBhdXRvZGw7CisjaWZkZWYg Q0tfQVVUT0RMCitleHRlcm4gQ0hBUiBrc2J1ZltdOworI2VuZGlmIC8qIENLX0FVVE9ETCAqLwor CisjaWZkZWYgQ0tfWFlaCisjaWZkZWYgWFlaX0lOVEVSTkFMCitzdGF0aWMgaW50IHptZGxvayA9 IDE7CQkJLyogWm1vZGVtIGF1dG9kb3dubG9hZHMgYXZhaWxhYmxlICovCisjZWxzZQorc3RhdGlj IGludCB6bWRsb2sgPSAwOwkJCS8qIERlcGVuZHMgb24gZXh0ZXJuYWwgcHJvdG9jb2wgZGVmICov CisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisjZWxzZQorc3RhdGljIGludCB6bWRsb2sgPSAw OwkJCS8qIE5vdCBhdmFpbGFibGUgYXQgYWxsICovCisjZW5kaWYgLyogQ0tfWFlaICovCisKKyNp Zm5kZWYgTk9TRVRLRVkJCQkvKiBLZXlib2FyZCBtYXBwaW5nICovCitleHRlcm4gS0VZICprZXlt YXA7CQkJLyogU2luZ2xlLWNoYXJhY3RlciBrZXkgbWFwICovCitleHRlcm4gTUFDUk8gKm1hY3Jv dGFiOwkJCS8qIEtleSBtYWNybyBwb2ludGVyIHRhYmxlICovCitzdGF0aWMgTUFDUk8ga21wdHIg PSBOVUxMOwkJLyogUG9pbnRlciB0byBjdXJyZW50IGtleSBtYWNybyAqLworI2VuZGlmIC8qIE5P U0VUS0VZICovCisKKy8qIEdsb2JhbCB2YXJpYWJsZXMgbG9jYWwgdG8gdGhpcyBtb2R1bGUgKi8K Kworc3RhdGljIGludAorICBxdWl0bm93ID0gMCwJCQkJLyogPGVzYy1jaGFyPlEgd2FzIHR5cGVk ICovCisgIGpic2V0ID0gMCwJCQkJLyogRmxhZyB3aGV0aGVyIGptcCBidWYgaXMgc2V0LiAqLwor ICBkb2hhbmd1cCA9IDAsCQkJCS8qIDxlc2MtY2hhcj5IIHdhcyB0eXBlZCAqLworICBzanZhbCwJ CQkJLyogU2V0anVtcCByZXR1cm4gdmFsdWUgKi8KKyAgZ290ZXJyID0gMCwJCQkJLyogRm9yay9w aXBlIGNyZWF0aW9uIGVycm9yIGZsYWcgKi8KKyAgaW5zaGlmdCA9IDAsCQkJCS8qIFNPL1NJIHNo aWZ0IHN0YXRlcyAqLworICBvdXRzaGlmdCA9IDA7CisKK2ludCBhY3RpdmUgPSAwOwkJCQkvKiBM b3dlciBmb3JrIGFjdGl2ZSBmbGFnICovCisKK3N0YXRpYyBQSURfVCBwYXJlbnRfaWQgPSAoUElE X1QpMDsJLyogUHJvY2VzcyBJRCBvZiBrZXlib2FyZCBmb3JrICovCisKK3N0YXRpYyBjaGFyIGVj YnVmWzEwXSwgKmVjYnA7CQkvKiBFc2NhcGUgY2hhciBidWZmZXIgJiBwb2ludGVyICovCisKKyNp ZmRlZiBDS19TTUFMTAorI2RlZmluZSBJQlVGTCAxNTM2CQkJLyogSW5wdXQgYnVmZmVyIGxlbmd0 aCAqLworI2Vsc2UKKyNkZWZpbmUgSUJVRkwgNDA5NgorI2VuZGlmIC8qIENLX1NNQUxMICovCisK K3N0YXRpYyBpbnQgb2JjID0gMDsJCQkvKiBPdXRwdXQgYnVmZmVyIGNvdW50ICovCisKKyNpZm5k ZWYgT1hPUworI2RlZmluZSBPQlVGTCAxMDI0CQkJLyogT3V0cHV0IGJ1ZmZlciBsZW5ndGggKi8K KyNlbHNlCisjZGVmaW5lIE9CVUZMIElCVUZMCisjZW5kaWYgLyogT1hPUyAqLworCisjaWZkZWYg QklHQlVGT0sKKyNkZWZpbmUgVE1QTEVOIDQwOTYJCQkvKiBUZW1wb3JhcnkgbWVzc2FnZSBidWZm ZXIgbGVuZ3RoICovCisjZWxzZQorI2RlZmluZSBUTVBMRU4gMjAwCisjZW5kaWYgLyogQklHQlVG T0sgKi8KKworI2lmZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFyICppYnVmID0gTlVMTCwgKm9idWYg PSBOVUxMLCAqdGVtcCA9IE5VTEw7IC8qIEJ1ZmZlcnMgKi8KKyNlbHNlCitzdGF0aWMgY2hhciBp YnVmW0lCVUZMXSwgb2J1ZltPQlVGTF0sIHRlbXBbVE1QTEVOXTsKKyNlbmRpZiAvKiBEWU5BTUlD ICovCisKKyNpZmRlZiBEWU5BTUlDCitzdGF0aWMgY2hhciAqaWJwOwkJCS8qIElucHV0IGJ1ZmZl ciBwb2ludGVyICovCisjZWxzZQorc3RhdGljIGNoYXIgKmlicCA9IGlidWY7CQkvKiBJbnB1dCBi dWZmZXIgcG9pbnRlciAqLworI2VuZGlmIC8qRFlOQU1JQyAqLworc3RhdGljIGludCBpYmMgPSAw OwkJCS8qIElucHV0IGJ1ZmZlciBjb3VudCAqLworCisjaWZkZWYgRFlOQU1JQworc3RhdGljIGNo YXIgKm9icDsJCQkvKiBPdXRwdXQgYnVmZmVyIHBvaW50ZXIgKi8KKyNlbHNlCitzdGF0aWMgY2hh ciAqb2JwID0gb2J1ZjsJCS8qIE91dHB1dCBidWZmZXIgcG9pbnRlciAqLworI2VuZGlmIC8qIERZ TkFNSUMgKi8KKworLyogWC4yNSBpdGVtcyAqLworCisjaWZkZWYgQU5ZWDI1CitzdGF0aWMgY2hh ciAqcDsJCQkJLyogR2VuZXJhbCBwdXJwb3NlIHBvaW50ZXIgKi8KK2NoYXIgeDI1aWJ1ZltNQVhJ WDI1XTsJCQkvKiBJbnB1dCBidWZmZXIgKi8KK2NoYXIgeDI1b2J1ZltNQVhPWDI1XTsJCQkvKiBP dXRwdXQgYnVmZmVyICovCitpbnQgaWJ1Zmw7CQkJCS8qIExlbmd0aCBvZiBpbnB1dCBidWZmZXIg Ki8KK2ludCBvYnVmbDsJCQkJLyogTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIgKi8KK3Vuc2lnbmVk IGNoYXIgdG9zZW5kID0gMDsKK2ludCBsaW5raWQsIGxjbjsKK3N0YXRpYyBpbnQgZG94MjVjbHIg PSAwOworI2lmbmRlZiBJQk1YMjUKK2V4dGVybiBDSEFSIHBhZHBhcm1zW107CisjZW5kaWYgLyog SUJNWDI1ICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisKK3N0YXRpYyBpbnQgeHBpcGVbMl0gPSB7 LTEsIC0xfTsJLyogUGlwZSBkZXNjcmlwdG9yIGZvciBjaGlsZC1wYXJlbnQgbWVzc2FnZXMgKi8K K3N0YXRpYyBQSURfVCBwaWQgPSAoUElEX1QpIDA7CS8qIFByb2Nlc3MgSUQgb2YgY2hpbGQgKi8K KworLyogQ2hhcmFjdGVyLXNldCBpdGVtcyAqLworCitzdGF0aWMgaW50IHVuaWNvZGUgPSAwOwor CitzdGF0aWMgaW50IGVzY3NlcSA9IDA7CQkJLyogMSA9IFJlY29nbml6ZXIgaXMgYWN0aXZlICov CitpbnQgaW5lc2MgPSAwOwkJCQkvKiBTdGF0ZSBvZiBzZXF1ZW5jZSByZWNvZ25pemVyICovCitp bnQgb2xkZXNjID0gLTE7CQkJLyogUHJldmlvdXMgc3RhdGUgb2YgcmVjb2duaXplciAqLworCisj ZGVmaW5lIE9VVFhCVUZTSVogMTUKK3N0YXRpYyBDSEFSIGlueGJ1ZltPVVRYQlVGU0laKzFdOwkv KiBIb3N0LXRvLXNjcmVlbiBleHBhbnNpb24gYnVmZmVyICovCitzdGF0aWMgaW50IGlueGNvdW50 ID0gMDsJCS8qIGFuZCBjb3VudCAqLworc3RhdGljIENIQVIgb3V0eGJ1ZltPVVRYQlVGU0laKzFd OwkvKiBLZXlib2FyZC10by1ob3N0IGV4cGFuc2lvbiBidWYgKi8KK3N0YXRpYyBpbnQgb3V0eGNv dW50ID0gMDsJCS8qIGFuZCBjb3VudCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyNpZmRlZiBDS19B TlNJQyAvKiBBTlNJIEMgcHJvdG90eXBlcy4uLiAqLworZXh0ZXJuIENIQVIgKCp4bHNbTUFYVENT RVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUik7IC8qIENoYXJhY3RlciBzZXQgKi8KK2V4dGVybiBD SEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiB0cmFuc2xhdGlv biBmdW5jdGlvbnMgKi8KK3N0YXRpYyBDSEFSICgqc3hvKShDSEFSKTsJLyogTG9jYWwgdHJhbnNs YXRpb24gZnVuY3Rpb25zICovCitzdGF0aWMgQ0hBUiAoKnJ4bykoQ0hBUik7CS8qIGZvciBvdXRw dXQgKHNlbmRpbmcpIHRlcm1pbmFsIGNoYXJzICovCitzdGF0aWMgQ0hBUiAoKnN4aSkoQ0hBUik7 CS8qIGFuZCBmb3IgaW5wdXQgKHJlY2VpdmluZykgdGVybWluYWwgY2hhcnMuICovCitzdGF0aWMg Q0hBUiAoKnJ4aSkoQ0hBUik7CisjZWxzZSAvKiBOb3QgQU5TSSBDLi4uICovCitleHRlcm4gQ0hB UiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOwkvKiBDaGFyYWN0ZXIgc2V0ICov CitleHRlcm4gQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOwkvKiB0cmFu c2xhdGlvbiBmdW5jdGlvbnMuICovCitzdGF0aWMgQ0hBUiAoKnN4bykoKTsJCS8qIExvY2FsIHRy YW5zbGF0aW9uIGZ1bmN0aW9ucyAqLworc3RhdGljIENIQVIgKCpyeG8pKCk7CQkvKiBmb3Igb3V0 cHV0IChzZW5kaW5nKSB0ZXJtaW5hbCBjaGFycyAqLworc3RhdGljIENIQVIgKCpzeGkpKCk7CQkv KiBhbmQgZm9yIGlucHV0IChyZWNlaXZpbmcpIHRlcm1pbmFsIGNoYXJzLiAqLworc3RhdGljIENI QVIgKCpyeGkpKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK2V4dGVybiBpbnQgbGFuZ3VhZ2U7 CQkvKiBDdXJyZW50IGxhbmd1YWdlLiAqLworc3RhdGljIGludCBsYW5nc3Y7CQkvKiBGb3IgcmVt ZW1iZXJpbmcgbGFuZ3VhZ2Ugc2V0dGluZy4gKi8KK2V4dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2lu Zm9bXTsgLyogRmlsZSBjaGFyYWN0ZXIgc2V0IGluZm8uICovCitleHRlcm4gaW50IHRjc3IsIHRj c2w7CQkvKiBUZXJtaW5hbCBjaGFyYWN0ZXIgc2V0cywgcmVtb3RlICYgbG9jYWwuICovCitzdGF0 aWMgaW50IHRjczsJCQkvKiBJbnRlcm1lZGlhdGUgKCJ0cmFuc2ZlciIpIGNoYXJhY3RlciBzZXQu ICovCitzdGF0aWMgaW50IHRjc3NpemUgPSAwOwkJLyogU2l6ZSBvZiB0Y3MgKi8KKyNpZmRlZiBV TklDT0RFCQkJCS8qIFVURi04IHN1cHBvcnQgKi8KKyNpZmRlZiBDS19BTlNJQworZXh0ZXJuIGlu dCAoKnhsX3VmY1tNQVhGQ1NFVFMrMV0pKFVTSE9SVCk7ICAvKiBVbmljb2RlIHRvIEZDUyAqLwor ZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtNQVhGQ1NFVFMrMV0pKENIQVIpOyAvKiBGQ1MgdG8gVW5p Y29kZSAqLworZXh0ZXJuIGludCAoKnh1ZikoVVNIT1JUKTsJCS8qIFRyYW5zbGF0aW9uIGZ1bmN0 aW9uIFVDUyB0byBGQ1MgKi8KK2V4dGVybiBVU0hPUlQgKCp4ZnUpKENIQVIpOwkJLyogVHJhbnNs YXRpb24gZnVuY3Rpb24gRkNTIHRvIFVDUyAqLworI2Vsc2UKK2V4dGVybiBpbnQgKCp4bF91ZmNb TUFYRkNTRVRTKzFdKSgpOworZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtNQVhGQ1NFVFMrMV0pKCk7 CitleHRlcm4gaW50ICgqeHVmKSgpOworZXh0ZXJuIFVTSE9SVCAoKnhmdSkoKTsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICov CisKKy8qCisgIFdlIGRvIG5vdCBuZWVkIHRvIHBhcnNlIGFuZCByZWNvZ25pemUgZXNjYXBlIHNl cXVlbmNlcyBpZiB3ZSBhcmUgYmVpbmcgYnVpbHQKKyAgd2l0aG91dCBjaGFyYWN0ZXItc2V0IHN1 cHBvcnQgQU5EIHdpdGhvdXQgQVBDIHN1cHBvcnQuCisqLworI2lmZGVmIE5PQ1NFVFMJCQkJLyog Tm8gY2hhcmFjdGVyIHNldHMgKi8KKyNpZm5kZWYgQ0tfQVBDCQkJCS8qIE5vIEFQQyAqLworI2lm bmRlZiBOT0VTQ1NFUQorI2RlZmluZSBOT0VTQ1NFUQkJCS8qIFNvIG5vIGVzY2FwZSBzZXF1ZW5j ZSByZWNvZ25pemVyICovCisjZW5kaWYgLyogTk9FU0NTRVEgKi8KKyNlbmRpZiAvKiBDS19BUEMg Ki8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKy8qIENoaWxkIHByb2Nlc3MgZXZlbnRzIGFuZCBt ZXNzYWdlcyAqLworCisjZGVmaW5lIENFVl9OTyAgMAkJCS8qIE5vIGV2ZW50ICovCisjZGVmaW5l IENFVl9IVVAgMQkJCS8qIENvbW11bmljYXRpb25zIGhhbmd1cCAqLworI2RlZmluZSBDRVZfUEFE IDIJCQkvKiBYLjI1IC0gY2hhbmdlIFBBRCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIENFVl9EVVAg MwkJCS8qIFRvZ2dsZSBkdXBsZXggKi8KKyNkZWZpbmUgQ0VWX0FQQyA0CQkJLyogRXhlY3V0ZSBB UEMgKi8KKyNpZmRlZiBUTkNPREUKKyNkZWZpbmUgQ0VWX01FQklOIDUJCQkvKiBDaGFuZ2Ugb2Yg bWVfYmluYXJ5ICovCisjZGVmaW5lIENFVl9VQklOIDYJCQkvKiBDaGFuZ2Ugb2YgdV9iaW5hcnkg Ki8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNkZWZpbmUgQ0VWX0FETCA3CQkJLyogQXV0b2Rvd25s b2FkICovCisjZGVmaW5lIENFVl9BVUwgOAkJCS8qIEF1dG91cGxvYWQgKi8KKyNkZWZpbmUgQ0VW X1RSSSA5CQkJLyogVHJpZ2dlciBzdHJpbmcgKi8KKworI2lmZGVmIE5PRVNDU0VRCisjZGVmaW5l IGNoa2Flcyh4KSAwCisjZWxzZQorLyoKKyAgQXMgb2YgZWRpdCAxNzgsIHRoZSBDT05ORUNUIGNv bW1hbmQgc2tpcHMgcGFzdCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8KKyAgYXZvaWQgdHJhbnNs YXRpbmcgdGhlIGNoYXJhY3RlcnMgd2l0aGluIHRoZW0uICBUaGlzIGFsbG93cyB0aGUgQ09OTkVD VAorICBjb21tYW5kIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggYSBob3N0IHRoYXQgdXNlcyBhIDct Yml0IElTTyA2NDYgbmF0aW9uYWwKKyAgY2hhcmFjdGVyIHNldCwgaW4gd2hpY2ggY2hhcmFjdGVy cyBsaWtlICdbJyB3b3VsZCBub3JtYWxseSBiZSB0cmFuc2xhdGVkCisgIGludG8gYWNjZW50ZWQg Y2hhcmFjdGVycywgcnVpbmluZyB0aGUgdGVybWluYWwncyBpbnRlcnByZXRhdGlvbiAoYW5kCisg IGdlbmVyYXRpb24pIG9mIGVzY2FwZSBzZXF1ZW5jZXMuCisKKyAgQXMgb2YgZWRpdCAxOTAsIHRo ZSBDT05ORUNUIGNvbW1hbmQgcmVzcG9uZHMgdG8gQVBDIGVzY2FwZSBzZXF1ZW5jZXMKKyAgKEVT QyBfIHRleHQgRVNDIFwpIGlmIHRoZSB1c2VyIFNFVHMgVEVSTUlOQUwgQVBDIE9OIG9yIFVOQ0hF Q0tFRCwgYW5kIHRoZQorICBwcm9ncmFtIHdhcyBidWlsdCB3aXRoIENLX0FQQyBkZWZpbmVkLgor CisgIE5vbi1BTlNJL0lTTy1jb21wbGlhbnQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbm90IGhhbmRs ZWQuCisqLworCisvKiBTdGF0ZXMgZm9yIHRoZSBlc2NhcGUtc2VxdWVuY2UgcmVjb2duaXplci4g Ki8KKworI2RlZmluZSBFU19OT1JNQUwgMAkJCS8qIE5vcm1hbCwgbm90IGluIGFuIGVzY2FwZSBz ZXF1ZW5jZSAqLworI2RlZmluZSBFU19HT1RFU0MgMQkJCS8qIEN1cnJlbnQgY2hhcmFjdGVyIGlz IEVTQyAqLworI2RlZmluZSBFU19FU0NTRVEgMgkJCS8qIEluc2lkZSBhbiBlc2NhcGUgc2VxdWVu Y2UgKi8KKyNkZWZpbmUgRVNfR09UQ1NJIDMJCQkvKiBJbnNpZGUgYSBjb250cm9sIHNlcXVlbmNl ICovCisjZGVmaW5lIEVTX1NUUklORyA0CQkJLyogSW5zaWRlIERDUyxPU0MsUE0sIG9yIEFQQyBz dHJpbmcgKi8KKyNkZWZpbmUgRVNfVEVSTUlOIDUJCQkvKiAxc3QgY2hhciBvZiBzdHJpbmcgdGVy bWluYXRvciAqLworCisvKgorICBBTlNJIGVzY2FwZSBzZXF1ZW5jZSBoYW5kbGluZy4gIE9ubHkg dGhlIDctYml0IGZvcm0gaXMgdHJlYXRlZCwgYmVjYXVzZQorICB0cmFuc2xhdGlvbiBpcyBub3Qg YSBwcm9ibGVtIGluIHRoZSA4LWJpdCBlbnZpcm9ubWVudCwgaW4gd2hpY2ggYWxsIEdMCisgIGNo YXJhY3RlcnMgYXJlIEFTQ0lJIGFuZCBubyB0cmFuc2xhdGlvbiB0YWtlcyBwbGFjZS4gIFNvIHdl IGRvbid0IGNoZWNrCisgIGZvciB0aGUgOC1iaXQgc2luZ2xlLWNoYXJhY3RlciB2ZXJzaW9ucyBv ZiBDU0ksIERDUywgT1NDLCBBUEMsIG9yIFNULgorICBIZXJlIGlzIHRoZSBBTlNJIHNlcXVlbmNl IHJlY29nbml6ZXIgc3RhdGUgdGFibGUsIGZvbGxvd2VkIGJ5IHRoZSBjb2RlCisgIHRoYXQgaW1w bGVtZW50cyBpdC4KKworICBEZWZpbml0aW9uczoKKyAgICBDQU4gPSBDYW5jZWwgICAgICAgICAg ICAgICAgICAgICAgIDAxLzA4ICAgICAgICAgQ3RybC1YCisgICAgU1VCID0gU3Vic3RpdHV0ZSAg ICAgICAgICAgICAgICAgICAwMS8xMCAgICAgICAgIEN0cmwtWgorICAgIERDUyA9IERldmljZSBD b250cm9sIFNlcXVlbmNlICAgICAgMDEvMTEgMDUvMDAgICBFU0MgUAorICAgIENTSSA9IENvbnRy b2wgU2VxdWVuY2UgSW50cm9kdWNlciAgMDEvMTEgMDUvMTEgICBFU0MgWworICAgIFNUICA9IFN0 cmluZyBUZXJtaW5hdG9yICAgICAgICAgICAgMDEvMTEgMDUvMTIgICBFU0MgXAorICAgIE9TQyA9 IE9wZXJhdGluZyBTeXN0ZW0gQ29tbWFuZCAgICAgMDEvMTEgMDUvMTMgICBFU0MgXQorICAgIFBN ICA9IFByaXZhY3kgTWVzc2FnZSAgICAgICAgICAgICAgMDEvMTEgMDUvMTQgICBFU0MgXgorICAg IEFQQyA9IEFwcGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCAgMDEvMTEgMDUvMTUgICBFU0MgXwor CisgIEFOU0kgZXNjYXBlIHNlcXVlbmNlIHJlY29nbml6ZXI6CisKKyAgICBTdGF0ZSAgICBJbnB1 dCAgTmV3IFN0YXRlICA7IENvbW1lbnRhcnkKKworICAgIE5PUk1BTCAgIChzdGFydCkgICAgICAg ICAgIDsgU3RhcnQgaW4gTk9STUFMIHN0YXRlCisKKyAgICAoYW55KSAgICBDQU4gICAgTk9STUFM ICAgICA7IF5YIGNhbmNlbHMKKyAgICAoYW55KSAgICBTVUIgICAgTk9STUFMICAgICA7IF5aIGNh bmNlbHMKKworICAgIE5PUk1BTCAgIEVTQyAgICBHT1RFU0MgICAgIDsgQmVnaW4gZXNjYXBlIHNl cXVlbmNlCisgICAgTk9STUFMICAgb3RoZXIgICAgICAgICAgICAgOyBOT1JNQUwgY29udHJvbCBv ciBncmFwaGljIGNoYXJhY3RlcgorCisgICAgR09URVNDICAgRVNDICAgICAgICAgICAgICAgOyBT dGFydCBhZ2FpbgorICAgIEdPVEVTQyAgIFsgICAgICBHT1RDU0kgICAgIDsgQ1NJCisgICAgR09U RVNDICAgUCAgICAgIFNUUklORyAgICAgOyBEQ1MgaW50cm9kdWNlciwgY29uc3VtZSB0aHJvdWdo IFNUCisgICAgR09URVNDICAgXSAgICAgIFNUUklORyAgICAgOyBPU0MgaW50cm9kdWNlciwgY29u c3VtZSB0aHJvdWdoIFNUCisgICAgR09URVNDICAgXiAgICAgIFNUUklORyAgICAgOyBQTSAgaW50 cm9kdWNlciwgY29uc3VtZSB0aHJvdWdoIFNUCisgICAgR09URVNDICAgXyAgICAgIFNUUklORyAg ICAgOyBBUEMgaW50cm9kdWNlciwgY29uc3VtZSB0aHJvdWdoIFNUCisgICAgR09URVNDICAgMC4u fiAgIE5PUk1BTCAgICAgOyAwMy8wMCB0aHJvdWdoIDE3LzE0ID0gRmluYWwgY2hhcmFjdGVyCisg ICAgR09URVNDICAgb3RoZXIgIEVTQ1NFUSAgICAgOyBJbnRlcm1lZGlhdGUgb3IgaWdub3JlZCBj b250cm9sIGNoYXJhY3RlcgorCisgICAgRVNDU0VRICAgRVNDICAgIEdPVEVTQyAgICAgOyBTdGFy dCBhZ2FpbgorICAgIEVTQ1NFUSAgIDAuLn4gICBOT1JNQUwgICAgIDsgMDMvMDAgdGhyb3VnaCAx Ny8xNCA9IEZpbmFsIGNoYXJhY3RlcgorICAgIEVTQ1NFUSAgIG90aGVyICAgICAgICAgICAgIDsg SW50ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY29udHJvbCBjaGFyYWN0ZXIKKworICAgIEdPVENTSSAg IEVTQyAgICBHT1RFU0MgICAgIDsgU3RhcnQgYWdhaW4KKyAgICBHT1RDU0kgICBALi5+ICAgTk9S TUFMICAgICA7IDA0LzAwIHRocm91Z2ggMTcvMTQgPSBGaW5hbCBjaGFyYWN0ZXIKKyAgICBHT1RD U0kgICBvdGhlciAgICAgICAgICAgICA7IEludGVybWVkaWF0ZSBjaGFyIG9yIGlnbm9yZWQgY29u dHJvbCBjaGFyCisKKyAgICBTVFJJTkcgICBFU0MgICAgVEVSTUlOICAgICA7IE1heWJlIGhhdmUg U1QKKyAgICBTVFJJTkcgICBvdGhlciAgICAgICAgICAgICA7IENvbnN1bWUgYWxsIGVsc2UKKwor ICAgIFRFUk1JTiAgIFwgICAgICBOT1JNQUwgICAgIDsgRW5kIG9mIHN0cmluZworICAgIFRFUk1J TiAgIG90aGVyICBTVFJJTkcgICAgIDsgU3RpbGwgaW4gc3RyaW5nCisqLworLyoKKyAgY2hrYWVz KCkgLS0gQ2hlY2sgQU5TSSBFc2NhcGUgU2VxdWVuY2UuCisgIENhbGwgd2l0aCBFQUNIIGNoYXJh Y3RlciBpbiBpbnB1dCBzdHJlYW0uCisgIFNldHMgZ2xvYmFsIGluZXNjIHZhcmlhYmxlIGFjY29y ZGluZyB0byBlc2NhcGUgc2VxdWVuY2Ugc3RhdGUuCisgIFJldHVybnMgMCBub3JtYWxseSwgMSBp ZiBhbiBBUEMgc2VxdWVuY2UgaXMgdG8gYmUgZXhlY3V0ZWQuCisqLworaW50CisjaWZkZWYgQ0tf QU5TSUMKK2Noa2FlcyhjaGFyIGMpCisjZWxzZQorY2hrYWVzKGMpIGNoYXIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworLyogY2hrYWVzICovIHsKKworICAgIG9sZGVzYyA9IGluZXNjOwkJCS8q IFJlbWVtYmVyIHByZXZpb3VzIHN0YXRlICovCisgICAgaWYgKGMgPT0gQ0FOIHx8IGMgPT0gU1VC KQkJLyogQ0FOIGFuZCBTVUIgY2FuY2VsIGFueSBzZXF1ZW5jZSAqLworICAgICAgaW5lc2MgPSBF U19OT1JNQUw7CisgICAgZWxzZQkJCQkvKiBPdGhlcndpc2UgKi8KKyAgICAgIHN3aXRjaCAoaW5l c2MpIHsJCQkvKiBlbnRlciBzdGF0ZSBzd2l0Y2hlciAqLworCisJY2FzZSBFU19OT1JNQUw6CQkJ LyogTk9STUFMIHN0YXRlICovCisJICBpZiAoYyA9PSBFU0MpCQkJLyogR290IGFuIEVTQyAqLwor CSAgICBpbmVzYyA9IEVTX0dPVEVTQzsJCS8qIENoYW5nZSBzdGF0ZSB0byBHT1RFU0MgKi8KKwkg IGJyZWFrOwkJCS8qIE90aGVyd2lzZSBzdGF5IGluIE5PUk1BTCBzdGF0ZSAqLworCisJY2FzZSBF U19HT1RFU0M6CQkJLyogR09URVNDIHN0YXRlICovCisJICBpZiAoYyA9PSAnWycpCQkJLyogTGVm dCBicmFja2V0IGFmdGVyIEVTQyBpcyBDU0kgKi8KKwkgICAgaW5lc2MgPSBFU19HT1RDU0k7CQkv KiBDaGFuZ2UgdG8gR09UQ1NJIHN0YXRlICovCisJICBlbHNlIGlmIChjID09ICdQJyB8fCAoYyA+ IDAxMzQgJiYgYyA8IDAxNDApKSB7IC8qIFAsIFssIF4sIG9yIF8gKi8KKwkgICAgICBpbmVzYyA9 IEVTX1NUUklORzsJLyogU3dpdGNoIHRvIFNUUklORy1hYnNvcnB0aW9uIHN0YXRlICovCisjaWZk ZWYgQ0tfQVBDCisJICAgICAgaWYgKGMgPT0gJ18nICYmIHBpZCA9PSAwICYmIC8qIEFQQyBoYW5k bGVkIGluIGNoaWxkIG9ubHkgKi8KKwkJICAoYXBjc3RhdHVzICYgQVBDX09OKSkgeyAvKiBhbmQg b25seSBpZiBub3QgZGlzYWJsZWQuICovCisJCSAgZGVidWcoRjEwMCwiQ09OTkVDVCBBUEMgYmVn aW4iLCIiLDApOworCQkgIGFwY2FjdGl2ZSA9IEFQQ19SRU1PVEU7IC8qIFNldCBBUEMtQWN0aXZl IGZsYWcgKi8KKwkJICBhcGNsZW5ndGggPSAwOwkvKiBhbmQgcmVzZXQgQVBDIGJ1ZmZlciBwb2lu dGVyICovCisJICAgICAgfQorI2VuZGlmIC8qIENLX0FQQyAqLworCSAgfSBlbHNlIGlmIChjID4g MDU3ICYmIGMgPCAwMTc3KSAvKiBGaW5hbCBjaGFyYWN0ZXIgJzAnIHRocnUgJ34nICovCisJICAg IGluZXNjID0gRVNfTk9STUFMOwkJLyogQmFjayB0byBub3JtYWwgKi8KKwkgIGVsc2UgaWYgKGMg IT0gRVNDKQkJLyogRVNDIGluIGFuIGVzY2FwZSBzZXF1ZW5jZS4uLiAqLworCSAgICBpbmVzYyA9 IEVTX0VTQ1NFUTsJCS8qIHN0YXJ0cyBhIG5ldyBlc2NhcGUgc2VxdWVuY2UgKi8KKwkgIGJyZWFr OwkJCS8qIEludGVybWVkaWF0ZSBvciBpZ25vcmVkIGN0cmwgY2hhciAqLworCisJY2FzZSBFU19F U0NTRVE6CQkJLyogRVNDU0VRIC0tIGluIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLworCSAgaWYgKGMg PiAwNTcgJiYgYyA8IDAxNzcpCS8qIEZpbmFsIGNoYXJhY3RlciAnMCcgdGhydSAnficgKi8KKwkg ICAgaW5lc2MgPSBFU19OT1JNQUw7CQkvKiBSZXR1cm4gdG8gTk9STUFMIHN0YXRlLiAqLworCSAg ZWxzZSBpZiAoYyA9PSBFU0MpCQkvKiBFU0MgLi4uICovCisJICAgIGluZXNjID0gRVNfR09URVND OwkJLyogc3RhcnRzIGEgbmV3IGVzY2FwZSBzZXF1ZW5jZSAqLworCSAgYnJlYWs7CQkJLyogSW50 ZXJtZWRpYXRlIG9yIGlnbm9yZWQgY3RybCBjaGFyICovCisKKwljYXNlIEVTX0dPVENTSToJCQkv KiBHT1RDU0kgLS0gSW4gYSBjb250cm9sIHNlcXVlbmNlICovCisJICBpZiAoYyA+IDA3NyAmJiBj IDwgMDE3NykJLyogRmluYWwgY2hhcmFjdGVyICdAJyB0aHJ1ICd+JyAqLworCSAgICBpbmVzYyA9 IEVTX05PUk1BTDsJCS8qIFJldHVybiB0byBOT1JNQUwuICovCisJICBlbHNlIGlmIChjID09IEVT QykJCS8qIEVTQyAuLi4gKi8KKwkgICAgaW5lc2MgPSBFU19HT1RFU0M7CQkvKiBzdGFydHMgb3Zl ci4gKi8KKwkgIGJyZWFrOwkJCS8qIEludGVybWVkaWF0ZSBvciBpZ25vcmVkIGN0cmwgY2hhciAq LworCisJY2FzZSBFU19TVFJJTkc6CQkJLyogSW5zaWRlIGEgc3RyaW5nICovCisJICBpZiAoYyA9 PSBFU0MpCQkJLyogRVNDIG1heSBiZSAxc3QgY2hhciBvZiB0ZXJtaW5hdG9yICovCisJICAgIGlu ZXNjID0gRVNfVEVSTUlOOwkJLyogR28gc2VlLiAqLworI2lmZGVmIENLX0FQQworCSAgZWxzZSBp ZiAoYXBjYWN0aXZlICYmIChhcGNsZW5ndGggPCBhcGNidWZsZW4pKSAvKiBJZiBpbiBBUEMsICov CisJICAgIGFwY2J1ZlthcGNsZW5ndGgrK10gPSBjOwkvKiBkZXBvc2l0IHRoaXMgY2hhcmFjdGVy LiAqLworCSAgZWxzZSB7CQkJLyogQnVmZmVyIG92ZXJydW4gKi8KKwkgICAgICBhcGNhY3RpdmUg PSAwOwkJLyogRGlzY2FyZCB3aGF0IHdlIGdvdCAqLworCSAgICAgIGFwY2xlbmd0aCA9IDA7CQkv KiBhbmQgZ28gYmFjayB0byBub3JtYWwgKi8KKwkgICAgICBhcGNidWZbMF0gPSAwOwkJLyogTm90 IHByZXR0eSwgYnV0IHdoYXQgZWxzZSAqLworCSAgICAgIGluZXNjID0gRVNfTk9STUFMOwkvKiBj YW4gd2UgZG8/ICAoU1QgbWlnaHQgbm90IGNvbWUpICovCisJICB9CisjZW5kaWYgLyogQ0tfQVBD ICovCisJICBicmVhazsJCQkvKiBBYnNvcmIgYWxsIG90aGVyIGNoYXJhY3RlcnMuICovCisKKwlj YXNlIEVTX1RFUk1JTjoJCQkvKiBNYXkgaGF2ZSBhIHN0cmluZyB0ZXJtaW5hdG9yICovCisJICBp ZiAoYyA9PSAnXFwnKSB7CQkvKiB3aGljaCBtdXN0IGJlIGJhY2tzbGFzaCAqLworCSAgICAgIGlu ZXNjID0gRVNfTk9STUFMOwkvKiBJZiBzbywgYmFjayB0byBOT1JNQUwgKi8KKyNpZmRlZiBDS19B UEMKKwkgICAgICBpZiAoYXBjYWN0aXZlKSB7CQkvKiBJZiBpdCB3YXMgYW4gQVBDIHN0cmluZywg Ki8KKwkJICBkZWJ1ZyhGMTAxLCJDT05ORUNUIEFQQyB0ZXJtaW5hdGVkIiwiIixjKTsKKwkJICBh cGNidWZbYXBjbGVuZ3RoXSA9IE5VTDsgLyogdGVybWluYXRlIGl0IGFuZCB0aGVuIC4uLiAqLwor CQkgIHJldHVybigxKTsKKwkgICAgICB9CisjZW5kaWYgLyogQ0tfQVBDICovCisJICB9IGVsc2Ug ewkJCS8qIE90aGVyd2lzZSAqLworCSAgICAgIGluZXNjID0gRVNfU1RSSU5HOwkvKiBCYWNrIHRv IHN0cmluZyBhYnNvcnB0aW9uLiAqLworI2lmZGVmIENLX0FQQworCSAgICAgIGlmIChhcGNhY3Rp dmUgJiYgKGFwY2xlbmd0aCsxIDwgYXBjYnVmbGVuKSkgeyAvKiBJbiBBUEMgc3RyaW5nICovCisJ CSAgYXBjYnVmW2FwY2xlbmd0aCsrXSA9IEVTQzsgLyogZGVwb3NpdCB0aGUgRXNjIGNoYXJhY3Rl ciAqLworCQkgIGFwY2J1ZlthcGNsZW5ndGgrK10gPSBjOyAgIC8qIGFuZCB0aGlzIGNoYXJhY3Rl ciB0b28gKi8KKwkgICAgICB9CisjZW5kaWYgLyogQ0tfQVBDICovCisJICB9CisgICAgICB9Cisg ICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIE5PRVNDU0VRICovCisKKy8qIENvbm5lY3Qgc3Rh dGUgcGFyZW50L2NoaWxkIGNvbW11bmljYXRpb24gc2lnbmFsIGhhbmRsZXJzICovCisKKy8qIFJv dXRpbmVzIHVzZWQgYnkgdGhlIGNoaWxkIHByb2Nlc3MgKi8KKworc3RhdGljIGludAorcGlwZW1z ZyhuKSBpbnQgbjsgewkJCS8qIFNlbmQgbWVzc2FnZSBJRCB0byBwYXJlbnQgKi8KKyAgICBpbnQg Y29kZSA9IG4gJiAyNTU7CisgICAgcmV0dXJuKHdyaXRlKHhwaXBlWzFdLCAmY29kZSwgc2l6ZW9m KGNvZGUpKSk7Cit9CisKKy8qIEVudmlyb25tZW50IHBvaW50ZXIgZm9yIENLX0ZPUktfU0lHIHNp Z25hbCBoYW5kbGluZyBpbiBjaGlsZC4uLiAqLworCisjaWZkZWYgQ0tfUE9TSVhfU0lHCitzdGF0 aWMgc2lnam1wX2J1ZiBzaWdfZW52OworI2Vsc2UKK3N0YXRpYyBqbXBfYnVmIHNpZ19lbnY7Cisj ZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisKK3N0YXRpYyBTSUdUWVAJCQkJLyogQ0tfRk9SS19T SUcgaGFuZGxpbmcgaW4gY2hpbGQgLi4uICovCitmb3JraW50KGZvbykgaW50IGZvbzsgeworICAg IC8qIEl0IGlzIGltcG9ydGFudCB0byBkaXNhYmxlIENLX0ZPUktfU0lHIGJlZm9yZSBsb25nam1w ICovCisgICAgc2lnbmFsKENLX0ZPUktfU0lHLCBTSUdfSUdOKTsJLyogU2V0IHRvIGlnbm9yZSBD S19GT1JLX1NJRyAqLworICAgIGRlYnVnKEYxMDAsIkNPTk5FQ1QgZm9ya2ludCAtIENLX0ZPUktf U0lHIiwgIiIsIDApOworICAgIC8qIEZvcmNlIHJldHVybiBmcm9tIGNrX3NuZG1zZygpICovCisg ICAgY2tsb25nam1wKHNpZ19lbnYsIDEpOworICAgIC8qIE5PVFJFQUNIRUQgKi8KK30KKworc3Rh dGljIFZPSUQKK2NrX3NuZG1zZygpIHsJCQkJLyogRXhlY3V0ZWQgYnkgY2hpbGQgb25seSAuLi4g Ki8KKyAgICBkZWJ1ZyhGMTAwLCJDT05ORUNUIGNrX3NuZG1zZywgYWN0aXZlIiwgIiIsIGFjdGl2 ZSk7CisgICAgaWYgKAorI2lmZGVmIENLX1BPU0lYX1NJRworCXNpZ3NldGptcChzaWdfZW52LDEp CisjZWxzZQorCXNldGptcChzaWdfZW52KQorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCT09 IDApIHsKKwlkZWJ1ZyhGMTAwLCJDT05ORUNUIGNrX3NuZG1zZyBzaWduYWxpbmcgcGFyZW50Iiwi IiwwKTsKKyAgICAgICAgc2lnbmFsKENLX0ZPUktfU0lHLCBmb3JraW50KTsJLyogU2V0IHVwIHNp Z25hbCBoYW5kbGVyICovCisgICAgICAgIGtpbGwocGFyZW50X2lkLCBDS19GT1JLX1NJRyk7CS8q IEtpY2sgdGhlIHBhcmVudCAqLworCWRlYnVnKEYxMDAsImNrX3NuZG1zZyBwYXVzaW5nIiwiIiww KTsKKyAgICAgICAgZm9yICg7OykgcGF1c2UoKTsJCS8qIFdhaXQgZm9yIENLX0ZPUktfU0lHIG9y IFNJR0tJTEwgKi8KKwkvKiBOT1RSRUFDSEVEICovCisgICAgfQorICAgIC8qIFdlIGNvbWUgaGVy ZSBmcm9tIGZvcmtpbnQoKSB2aWEgW3NpZ11ja2xvbmdqbXAoc2lnX2VudiwxKSAqLworICAgIGRl YnVnKEYxMDAsIkNPTk5FQ1QgY2tfc25kbXNnIGlzIHBhcmVudCAtIHJldHVybmluZyIsICIiLCAw KTsKK30KKworLyogUm91dGluZXMgdXNlZCBieSB0aGUgcGFyZW50IHByb2Nlc3MgKi8KKworI2lm ZGVmIENLX1BPU0lYX1NJRwkJIC8qIEVudmlyb25tZW50IHBvaW50ZXIgZm9yIENPTk5FQ1QgZXJy b3JzICovCitzdGF0aWMgc2lnam1wX2J1ZiBjb25fZW52OworI2Vsc2UKK3N0YXRpYyBqbXBfYnVm IGNvbl9lbnY7CisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisvKgorICBwaXBlaW50KCkgaGFu ZGxlcyBDS19GT1JLX1NJRyBzaWduYWxzIGZyb20gdGhlIGxvd2VyIChwb3J0KSBmb3JrLgorICBJ dCByZWFkcyBhIGZ1bmN0aW9uIGNvZGUgZnJvbSB0aGUgcGlwZSB0aGF0IGNvbm5lY3RzIHRoZSB0 d28gZm9ya3MsCisgIHRoZW4gcmVhZHMgYWRkaXRpb25hbCBkYXRhIGZyb20gdGhlIHBpcGUsIHRo ZW4gaGFuZGxlcyBpdC4KKyovCitzdGF0aWMgU0lHVFlQCitwaXBlaW50KGFyZykgaW50IGFyZzsg ewkJCS8qIER1bW15IGFyZ3VtZW50ICovCisgICAgaW50IGNvZGUsIGN4LCB4LCBpIC8qICwgbiAq LyA7CisKKyNpZm5kZWYgTk9DQ1RSQVAKKyAgICBleHRlcm4gY2tqbXBidWYgY21qYnVmOworI2Vu ZGlmIC8qIE5PQ0NUUkFQICovCisgICAgLyoKKyAgICAgIElNUE9SVEFOVDogQXQgdGhpcyBwb2lu dCwgdGhlIGNoaWxkIGZvcmsgaXMgd2FpdGluZyBmb3IgQ0tfRk9SS19TSUcKKyAgICAgIChldmVu dHVhbGx5IGZvciBTSUdLSUxMKSBpbnNpZGUgb2YgY2tfc25kbXNnKCkuICBTbyB3ZSBjYW4ndCBn ZXQgYW55CisgICAgICBzdWJzZXF1ZW50IENLX0ZPUktfU0lHIGZyb20gY2hpbGQgYmVmb3JlIHdl IHNlbmQgaXQgQ0tfRk9SS19TSUcuCisgICAgKi8KKyAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJ R19JR04pOwkvKiBJZ25vcmUgQ0tfRk9SS19TSUcgbm93ICovCisgICAgZGVidWcoRjEwMSwiQ09O TkVDVCBwaXBlaW50IGFyZyIsIiIsYXJnKTsKKworICAgIHJlYWQoeHBpcGVbMF0sICZjb2RlLCBz aXplb2YoY29kZSkpOyAvKiBHZXQgZnVuY3Rpb24gY29kZSBmcm9tIHBpcGUgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJDT05ORUNUIHBpcGVpbnQgY29kZSIsIiIsY29kZSk7CisgICAgY3ggPSBjb2RlICYg MjU1OwkJCS8qIDgtYml0IHZlcnNpb24gb2YgZnVuY3Rpb24gY29kZSAqLworCisjaWZuZGVmIE5P Q0NUUkFQCisjaWZuZGVmIE5PSUNQCisjZGVmaW5lIFVTRUNDSk1QQlVGCisjZW5kaWYgLyogTk9J Q1AgKi8KKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworLyoKKyAgUmVhZCBpbmZvIHBhc3NlZCBiYWNr IHVwIHRvIHVzIGJ5IHRoZSBsb3dlciBmb3JrLCBkZXBlbmRpbmcgb24gdGhlIGZ1bmN0aW9uCisg IHJlcXVlc3RlZC4gIFRoZSBzYW1lIG51bWJlciBvZiBpdGVtcyBtdXN0IGJlIHJlYWQgZnJvbSB0 aGUgcGlwZSBpbiB0aGUgc2FtZQorICBvcmRlciBhcyB0aGUgbG93ZXIgZm9yayBwdXQgdGhlbSB0 aGVyZS4gIFRyeWluZyB0byByZWFkIHNvbWV0aGluZyB0aGF0J3Mgbm90CisgIHRoZXJlIG1ha2Vz IHRoZSBwcm9ncmFtIGhhbmcgdW5pbnRlcnJ1cHRpYmx5LiAgUGF5IGNsb3NlIGF0dGVudGlvbiAt LSBub3RpY2UKKyAgaG93IHdlIGZhbGwgdGhyb3VnaCBzb21lIG9mIHRoZSBjYXNlcyByYXRoZXIg dGhhbiBicmVhazsgdGhhdCdzIGRlbGliZXJhdGUuCisqLworICAgIHN3aXRjaCAoY3gpIHsKKyNp ZmRlZiBDS19UUklHR0VSCisgICAgICBjYXNlIENFVl9UUkk6CQkJLyogVHJpZ2dlciBzdHJpbmcg Ki8KKwlkZWJ1ZyhGMTAwLCJDT05ORUNUIHRyaWdnZXIiLCIiLDApOworCXJlYWQoeHBpcGVbMF0s IChjaGFyICopJmksIHNpemVvZihpKSk7IC8qIFRyaWdnZXIgaW5kZXggKi8KKwlkZWJ1ZyhGMTAx LCJDT05ORUNUIHRyaWdnZXIgaW5kZXgiLCIiLGkpOworCW1ha2VzdHIoJnRyaWdnZXJ2YWwsdHRf dHJpZ2dlcltpXSk7IC8qIE1ha2UgYSBjb3B5IG9mIHRoZSB0cmlnZ2VyICovCisJZGVidWcoRjEx MCwiQ09OTkVDVCB0cmlnZ2VydmFsIix0cmlnZ2VydmFsLDApOworCXJlYWQoeHBpcGVbMF0sIChj aGFyICopJmliYywgc2l6ZW9mKGliYykpOyAvKiBDb3B5IGNoaWxkJ3MgKi8KKwlkZWJ1ZyhGMTAx LCJDT05ORUNUIHRyaWdnZXIgaWJjICh1cHBlcikiLCIiLGliYyk7IC8qIGlucHV0IGJ1ZmZlci4g Ki8KKwlpZiAoaWJjID4gMCkgeworCSAgICByZWFkKHhwaXBlWzBdLCAoY2hhciAqKSZpYnAsIHNp emVvZihpYnApKTsKKwkgICAgcmVhZCh4cGlwZVswXSwgaWJwLCBpYmMpOworCX0KKwkvKiBGYWxs IHRocnUuLi4gKi8KKworI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKworICAgICAgY2FzZSBDRVZf SFVQOgorLyoKKyAgVGhlIENFVl9IVVAgY2FzZSBpcyBleGVjdXRlZCB3aGVuIHRoZSBvdGhlciBz aWRlIGhhcyBodW5nIHVwIG9uIHVzLgorICBJbiBzb21lIGNhc2VzLCB0aGlzIGhhcHBlbnMgYmVm b3JlIHdlIGhhdmUgaGFkIGEgY2hhbmNlIHRvIGV4ZWN1dGUgdGhlCisgIHNldGptcChjb25fZW52 LDEpIGNhbGwsIGFuZCBpbiB0aGF0IGNhc2Ugd2UnZCBiZXR0ZXIgbm90IHRha2UgdGhlIGxvbmdq bXAhCisgIEEgZ29vZCBleGFtcGxlIGlzIHdoZW4geW91IFRFTE5FVCB0byBwb3J0IDEzIG9uIHRo ZSBsb2NhbCBob3N0OyBpdCBwcmludHMKKyAgaXRzIGFzY3RpbWUoKSBzdHJpbmcgKDI2IGNoYXJz KSBhbmQgdGhlbiBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCisqLworI2lmZGVmIENLX1RSSUdHRVIK KwlpZiAoY3ggPT0gQ0VWX1RSSSkKKwkgIHNqdmFsID0gQ0VWX1RSSTsJCS8qIFNldCBnbG9iYWwg dmFyaWFibGUuICovCisJZWxzZQorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKwkgIHNqdmFsID0g Q0VWX0hVUDsKKwlpZiAoamJzZXQpIHsJCQkvKiBqbXBfYnVmIGlzIGluaXRpYWxpemVkICovCisJ ICAgIGNrbG9uZ2ptcChjb25fZW52LHNqdmFsKTsJLyogc28gZG8gdGhlIHJpZ2h0IHRoaW5nLiAq LworCX0gZWxzZSB7CisJICAgIGludCB4ID0gMDsKKyNpZmRlZiBVU0VDQ0pNUEJVRgorCSAgICAv KiBqbXBfYnVmIG5vdCBpbml0J2QgeWV0IGEgY2xvc2UgYXBwcm94aW1hdGlvbi4uLiAqLworI2lm ZGVmIENLX1RSSUdHRVIKKwkgICAgaWYgKGN4ID09IENFVl9IVVApCisjZW5kaWYgLyogQ0tfVFJJ R0dFUiAqLworCSAgICAgIHR0Y2xvcygwKTsJCS8qIENsb3NlIG91ciBlbmQgb2YgdGhlIGNvbm5l Y3Rpb24gKi8KKwkgICAgaWYgKHBpZCkgeworCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIHRyaWdnZXIg a2lsbGluZyBwaWQiLCIiLHBpZCk7CisjaWZkZWYgQkVPU09SQkVCT1gKKwkJeworCQkgICAgbG9u ZyByZXRfdmFsOworCQkgICAgeCA9IGtpbGwocGlkLFNJR0tJTExUSFIpOwkvKiBLaWxsIGxvd2Vy IGZvcmsgKi8KKwkJICAgIHdhaXRfZm9yX3RocmVhZCAocGlkLCAmcmV0X3ZhbCk7CisJCX0KKyNl bHNlCisjaWZkZWYgUGxhbjkKKwkJeCA9IGtpbGwocGlkLCBTSUdLSUxMKTsgLyogKHNob3VsZCBh bHdheXMgdXNlIHRoaXMgcmVhbGx5KSAqLworI2Vsc2UKKwkJeCA9IGtpbGwocGlkLDkpOwkvKiBL aWxsIGxvd2VyIGZvcmsgKGhpc3RvcnkpICovCisjZW5kaWYgLyogUGxhbjkgKi8KKwkJd2FpdCgo V0FJVF9UICopMCk7CS8qIFdhaXQgdGlsbCBnb25lLiAqLworCQlpZiAoeCA8IDApIHsKKwkJICAg IHByaW50ZigiRVJST1I6IEZhaWx1cmUgdG8ga2lsbCBwaWQgJWxkOiAlcywgZXJybm89JWRcbiIs CisJCQkgICAobG9uZykgcGlkLCBja19lcnJzdHIoKSwgZXJybm8pOworCQkgICAgZGVidWcoRjEx MSwiQ09OTkVDVCBlcnJvciBraWxsaW5nIHN0YWxlIHBpZCIsCisJCQkgIGNrX2VycnN0cigpLGVy cm5vKTsKKwkJfQorCQlwaWQgPSAoUElEX1QpIDA7CisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8K KwkgICAgfQorCSAgICBjb25yZXMoKTsJCQkvKiBSZXNldCB0aGUgY29uc29sZS4gKi8KKwkgICAg aWYgKCFxdWlldCkgeworCQlwcmludGYoIlxyXG4oQmFjayBhdCAlcylcclxuIiwKKwkJICAgICAg ICpteWhvc3QgPyBteWhvc3QgOgorI2lmZGVmIFVOSVgKKwkJICAgICAgICJsb2NhbCBVTklYIHN5 c3RlbSIKKyNlbHNlCisJCSAgICAgICAibG9jYWwgc3lzdGVtIgorI2VuZGlmIC8qIFVOSVggKi8K KwkJICAgICAgICk7CisJICAgIH0KKwkgICAgd2hhdCA9IFdfTk9USElORzsJCS8qIFNvIGNvbnNv bGUgbW9kZXMgYXJlIHNldCByaWdodC4gKi8KKwkgICAgcHJpbnRmKCJcclxuIik7CQkvKiBwcmV2 ZW50IHByb21wdC1zdG9tcGluZyAqLworCSAgICBja2xvbmdqbXAoY21qYnVmLDApOwkvKiBEbyB3 aGF0IHRoZSBDdHJsLUMgaGFuZGxlciBkb2VzICovCisjZWxzZQorCSAgICBwcmludGYoIlxyXG5M b25nanVtcCBmYWlsdXJlIC0gZmF0YWxcclxuIik7CisJICAgIGRvZXhpdChHT09EX0VYSVQsLTEp OwkvKiBCZXR0ZXIgdGhhbiBkdW1waW5nIGNvcmUuLi4gKi8KKyNlbmRpZiAvKiBVU0VDQ0pNUEJV RiAqLworCX0KKyNpZmRlZiBVU0VDQ0pNUEJVRgorI3VuZGVmIFVTRUNDSk1QQlVGCisjZW5kaWYg LyogVVNFQ0NKTVBCVUYgKi8KKworICAgICAgY2FzZSBDRVZfRFVQOgkJCS8qIENoaWxkIHNlbmRz IGR1cGxleCBjaGFuZ2UgKi8KKwlyZWFkKHhwaXBlWzBdLCAoY2hhciAqKSZkdXBsZXgsIHNpemVv ZihkdXBsZXgpKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHBpcGVpbnQgZHVwbGV4IiwiIixkdXBs ZXgpOworCWJyZWFrOworI2lmZGVmIFROQ09ERQorICAgICAgY2FzZSBDRVZfTUVCSU46CQkJLyog Q2hpbGQgc2VuZHMgbWVfYmluYXJ5IGNoYW5nZSAqLworCXJlYWQoeHBpcGVbMF0sCisJICAgICAo Y2hhciAqKSZURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSksCisJICAgICBzaXplb2YoVEVMT1BUX01F KFRFTE9QVF9CSU5BUlkpKQorCSAgICAgKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHBpcGVpbnQg bWVfYmluYXJ5IiwiIixURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpOworCWJyZWFrOworICAgICAg Y2FzZSBDRVZfVUJJTjoJCQkvKiBDaGlsZCBzZW5kcyB1X2JpbmFyeSBjaGFuZ2UgKi8KKwlyZWFk KHhwaXBlWzBdLAorCSAgICAgKGNoYXIgKikmVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSksCisJICAg ICBzaXplb2YoVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpCisJICAgICApOworCWRlYnVnKEYxMDEs IkNPTk5FQ1QgcGlwZWludCB1X2JpbmFyeSIsIiIsVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkpOwor CWJyZWFrOworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYgQ0tfQVBDCisgICAgICBjYXNl IENFVl9BVUw6CQkJLyogQXV0b3VwbG9hZCAqLworCWp1c3RvbmUgPSAxOworCWRlYnVnKEYxMDAs IkNPTk5FQ1QgYXV0b3VwbG9hZCBhdCBwYXJlbnQiLCIiLDApOworI2lmZGVmIENLX0FVVE9ETAor ICAgICAgY2FzZSBDRVZfQURMOgkJCS8qIEF1dG9kb3dubG9hZCAqLworCWFwY2FjdGl2ZSA9IEFQ Q19MT0NBTDsKKwlpZiAoIWp1c3RvbmUpIGRlYnVnKEYxMDAsIkNPTk5FQ1QgYXV0b2Rvd25sb2Fk IGF0IHBhcmVudCIsIiIsMCk7CisJLyogQ29weSBjaGlsZCdzIEtlcm1pdCBwYWNrZXQgaWYgYW55 ICovCisJcmVhZCh4cGlwZVswXSwgKGNoYXIgKikmeCwgc2l6ZW9mKHgpKTsKKwlkZWJ1ZyhGMTAx LCJDT05ORUNUIHRyaWdnZXIgaWJjICh1cHBlcikiLCIiLGliYyk7CisJaWYgKHggPiAwKQorCSAg cmVhZCh4cGlwZVswXSwgKGNoYXIgKilrc2J1ZiwgeCsxKTsKKyNlbmRpZiAvKiBDS19BVVRPREwg Ki8KKyAgICAgIGNhc2UgQ0VWX0FQQzoJCQkvKiBBcHBsaWNhdGlvbiBQcm9ncmFtIENvbW1hbmQg Ki8KKwlyZWFkKHhwaXBlWzBdLCAoY2hhciAqKSZhcGNsZW5ndGgsIHNpemVvZihhcGNsZW5ndGgp KTsKKwlyZWFkKHhwaXBlWzBdLCBhcGNidWYsIGFwY2xlbmd0aCsxKTsgLyogSW5jbHVkZSB0cmFp bGluZyB6ZXJvIGJ5dGUgKi8KKwlkZWJ1ZyhGMTExLCJDT05ORUNUIEFQQyBhdCBwYXJlbnQiLGFw Y2J1ZixhcGNsZW5ndGgpOworCXJlYWQoeHBpcGVbMF0sIChjaGFyICopJmliYywgc2l6ZW9mKGli YykpOyAvKiBDb3B5IGNoaWxkJ3MgKi8KKwlpZiAoaWJjID4gMCkgewkJCQkgICAvKiBpbnB1dCBi dWZmZXIuICovCisJICAgIHJlYWQoeHBpcGVbMF0sIChjaGFyICopJmlicCwgc2l6ZW9mKGlicCkp OworCSAgICByZWFkKHhwaXBlWzBdLCBpYnAsIGliYyk7CisJfQorCW9iYyA9IDA7IG9icCA9IG9i dWY7ICpvYnVmID0gTlVMOyAvKiBCZWNhdXNlIHBvcnQgZm9yayBmbHVzaGVkICovCisJc2p2YWwg PSBDRVZfQVBDOworCWNrbG9uZ2ptcChjb25fZW52LHNqdmFsKTsKKwkvKiBOT1RSRUFDSEVEICov CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNpZmRlZiBTVU5YMjUKKyAgICAgIGNhc2UgQ0VWX1BB RDoJCQkvKiBYLjI1IFBBRCBwYXJhbWV0ZXIgY2hhbmdlICovCisJZGVidWcoRjEwMCwiQ09OTkVD VCBwaXBlaW50IFBBRCBjaGFuZ2UiLCIiLDApOworCXJlYWQoeHBpcGVbMF0scGFkcGFybXMsTUFY UEFEUEFSTVMpOworCXNqdmFsID0gQ0VWX1BBRDsJCS8qIFNldCBnbG9iYWwgdmFyaWFibGUuICov CisjaWZkZWYgQ09NTUVOVAkJCQkvKiBXZSBtaWdodCBub3QgbmVlZCB0byBkbyB0aGlzLi4uICov CisJY2tsb25nam1wKGNvbl9lbnYsc2p2YWwpOworCS8qIE5PVFJFQUNIRUQgKi8KKyNlbHNlICAv KiBDT01NRU5UICovCisJYnJlYWs7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIFNV TlgyNSAqLworICAgIH0KKyAgICBzaWduYWwoQ0tfRk9SS19TSUcsIHBpcGVpbnQpOwkvKiBTZXQg dXAgc2lnbmFsIGhhbmRsZXIgKi8KKyAgICBraWxsKHBpZCwgQ0tfRk9SS19TSUcpOwkJLyogU2ln bmFsIHRoZSBwb3J0IGZvcmsgLi4uICovCit9CisKKy8qICBDIEsgQyBQIFUgVCBDICAtLSAgQy1L ZXJtaXQgQ09OTkVDVCBQdXQgQ2hhcmFjdGVyIHRvIFNjcmVlbiAgKi8KKy8qCisgIE91dHB1dCBp cyBidWZmZXJlZCB0byBhdm9pZCBzbG93IHNjcmVlbiB3cml0ZXMgb24gZmFzdCBjb25uZWN0aW9u cy4KKyAgTk9URTogVGhlc2UgY291bGQgKGVhc2lseT8pIGJlY29tZSBtYWNyb3MgLi4uCisqLwor c3RhdGljIGludAorY2tjcHV0ZigpIHsJCQkJLyogRHVtcCB0aGUgb3V0cHV0IGJ1ZmZlciAqLwor ICAgIGludCB4ID0gMDsKKyAgICBpZiAob2JjID4gMCkJCQkvKiBJZiB3ZSBoYXZlIGFueSBjaGFy YWN0ZXJzLCAqLworICAgICAgeCA9IGNvbnhvKG9iYyxvYnVmKTsJCS8qIGR1bXAgdGhlbSwgKi8K KyAgICBvYnAgPSBvYnVmOwkJCQkvKiByZXNldCB0aGUgcG9pbnRlciAqLworICAgIG9iYyA9IDA7 CQkJCS8qIGFuZCB0aGUgY291bnRlci4gKi8KKyAgICByZXR1cm4oeCk7CQkJCS8qIFJldHVybiBj b254bydzIHJldHVybiBjb2RlICovCit9CisKK2ludAorY2tjcHV0YyhjKSBpbnQgYzsgeworICAg IGludCB4OworCisgICAgKm9icCsrID0gYyAmIDB4ZmY7CQkJLyogRGVwb3NpdCB0aGUgY2hhcmFj dGVyICovCisgICAgb2JjKys7CQkJCS8qIENvdW50IGl0ICovCisgICAgaWYgKGliYyA9PSAwIHx8 CQkJLyogSWYgaW5wdXQgYnVmZmVyIGFib3V0IGVtcHR5ICovCisJb2JjID09IE9CVUZMKSB7CQkJ Lyogb3Igb3V0cHV0IGJ1ZmZlciBmdWxsICovCisJZGVidWcoRjEwMSwiQ09OTkVDVCBDS0NQVVRD IG9iYyIsIiIsb2JjKTsKKwl4ID0gY29ueG8ob2JjLG9idWYpOwkJLyogZHVtcCB0aGUgYnVmZmVy LCAqLworCW9icCA9IG9idWY7CQkJLyogcmVzZXQgdGhlIHBvaW50ZXIgKi8KKwlvYmMgPSAwOwkJ CS8qIGFuZCB0aGUgY291bnRlci4gKi8KKwlyZXR1cm4oeCk7CQkJLyogUmV0dXJuIGNvbnhvJ3Mg cmV0dXJuIGNvZGUgKi8KKyAgICB9IGVsc2UgcmV0dXJuKDApOworfQorCisvKiAgQyBLIEMgRyBF IFQgQyAgLS0gIEMtS2VybWl0IENPTk5FQ1QgR2V0IENoYXJhY3RlciAgKi8KKy8qCisgIEJ1ZmZl cmVkIHJlYWQgZnJvbSBjb21tdW5pY2F0aW9uIGRldmljZS4KKyAgUmV0dXJucyB0aGUgbmV4dCBj aGFyYWN0ZXIsIHJlZmlsbGluZyB0aGUgYnVmZmVyIGlmIG5lY2Vzc2FyeS4KKyAgT24gZXJyb3Is IHJldHVybnMgdHRpbmMncyByZXR1cm4gY29kZSAoc2VlIHR0aW5jKCkgZGVzY3JpcHRpb24pLgor ICBEdW1teSBhcmd1bWVudCBmb3IgY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb25zIHdpdGgg dHRpbmMoKS4KKyAgTk9URTogV2UgZG9uJ3QgaGF2ZSBhIG1hY3JvIGZvciB0aGlzIGJlY2F1c2Ug d2UgaGF2ZSB0byBwYXNzCisgIGEgcG9pbnRlciB0byB0aGlzIGZ1bmN0aW9uIGFzIGFuIGFyZ3Vt ZW50IHRvIHRuX2Rvb3AoKS4KKyovCitpbnQKK2NrY2dldGMoZHVtbXkpIGludCBkdW1teTsgewor ICAgIGludCBjLCBuOworI2lmZGVmIENLX1NTTAorICAgIGV4dGVybiBpbnQgc3NsX2FjdGl2ZV9m bGFnLCB0bHNfYWN0aXZlX2ZsYWc7CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyNpZmRlZiBDS19F TkNSWVBUSU9OCisgICAgLyogTm8gYnVmZmVyaW5nIGZvciBwb3NzaWJseSBlbmNyeXB0ZWQgY29u bmVjdGlvbnMgKi8KKyAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSAmJiBURUxPUFRfTUUo VEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSkKKyAgICAgIHJldHVybih0dGluYygwKSk7CisjZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX1NTTAorICAgIGlmIChzc2xfYWN0aXZlX2Zs YWcgfHwgdGxzX2FjdGl2ZV9mbGFnKQorICAgICAgICByZXR1cm4odHRpbmMoMCkpOworI2VuZGlm IC8qIENLX1NTTCAqLworI2lmZGVmIENPTU1FTlQKKy8qIHRvbyBtdWNoICovCisgICAgZGVidWco RjEwMSwiQ09OTkVDVCBDS0NHRVRDIDEgaWJjIiwiIixpYmMpOyAvKiBMb2cgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgaWYgKGliYyA8IDEpIHsJCQkvKiBOZWVkIHRvIHJlZmlsbCBidWZm ZXI/ICovCisJaWJjID0gMDsJCQkvKiBZZXMsIHJlc2V0IGNvdW50ICovCisJaWJwID0gaWJ1ZjsJ CQkvKiBhbmQgYnVmZmVyIHBvaW50ZXIgKi8KKwkvKiBkZWJ1ZyhGMTAwLCJDT05ORUNUIENLQ0dF VEMgMSBjYWxsaW5nIHR0aW5jKDApIiwiIiwwKTsgKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBU aGlzIGNoZWNrIGlzIG5vdCB3b3J0aCB0aGUgb3ZlcmhlYWQuICBTY2VuYXJpbzogdHRjaGsoKSBy ZXR1cm5zIDAsIHNvIHdlCisgIGZhbGwgdGhyb3VnaCB0byB0aGUgYmxvY2tpbmcgdHRpbmMoKS4g IFdoaWxlIGluIHR0aW5jKCksIHRoZSBjb25uZWN0aW9uIGlzCisgIGxvc3QuICBCdXQgdGhlIHJl YWQoKSB0aGF0IHR0aW5jKCkgY2FsbHMgZG9lcyBub3Qgbm90aWNlLCBhbmQgbmV2ZXIgcmV0dXJu cy4KKyAgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IGluIEhQLVVYLCBhbmQgY2FuIGJlIHNlZW4gd2hl biB3ZSB0dXJuIG9mZiB0aGUgbW9kZW0uCisqLworCWlmICghbmV0d29yayAmJiAoY2FycmllciAh PSBDQVJfT0ZGKSkKKwkgIGlmICgobiA9IHR0Y2hrKCkpIDwgMCkJLyogTWFrZSBzdXJlIGNvbm5l Y3Rpb24gaXMgbm90IGxvc3QgKi8KKwkgICAgcmV0dXJuKG4pOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKwljID0gdHRpbmMoMCk7CQkJLyogUmVhZCBvbmUgY2hhcmFjdGVyLCBibG9ja2luZyAqLwor CS8qIGRlYnVnKEYxMDEsIkNPTk5FQ1QgQ0tDR0VUQyAxIHR0aW5jKDApIiwiIixjKTsgKi8KKwlp ZiAoYyA8IDApIHsJCQkvKiBJZiBlcnJvciwgcmV0dXJuIGVycm9yIGNvZGUgKi8KKwkgICAgcmV0 dXJuKGMpOworCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlLCBnb3Qgb25lIGNoYXJhY3RlciAqLwor CSAgICAqaWJwKysgPSBjOwkJCS8qIEFkdmFuY2UgYnVmZmVyIHBvaW50ZXIgKi8KKwkgICAgaWJj Kys7CQkJLyogYW5kIGNvdW50LiAqLworCX0KKwlpZiAoKG4gPSB0dGNoaygpKSA+IDApIHsJLyog QW55IG1vcmUgd2FpdGluZz8gKi8KKwkgICAgaWYgKG4gPiAoSUJVRkwgLSBpYmMpKQkvKiBHZXQg dGhlbSBhbGwgYXQgb25jZS4gKi8KKwkgICAgICBuID0gSUJVRkwgLSBpYmM7CQkvKiBEb24ndCBv dmVyZmxvdyBidWZmZXIgKi8KKwkgICAgaWYgKChuID0gdHR4aW4obiwoQ0hBUiAqKWlicCkpID4g MCkgeworI2lmZGVmIENLX0VOQ1JZUFRJT04KKwkJaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBU SU9OKSkKKwkJICBja190bl9kZWNyeXB0KGlicCxuKTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisJCWliYyArPSBuOwkJCS8qIEFkdmFuY2UgY291bnRlciAqLworCSAgICB9CisJfSBlbHNl IGlmIChuIDwgMCkgewkJLyogRXJyb3I/ICovCisJICAgIHJldHVybihuKTsJCQkvKiBSZXR1cm4g dGhlIGVycm9yIGNvZGUgKi8KKwl9CisJZGVidWcoRjEwMSwiQ09OTkVDVCBDS0NHRVRDIDIgaWJj IiwiIixpYmMpOyAvKiBMb2cgaG93IG1hbnkgKi8KKwlpYnAgPSBpYnVmOwkJCS8qIFBvaW50IHRv IGJlZ2lubmluZyBvZiBidWZmZXIgKi8KKyAgICB9CisgICAgYyA9ICppYnArKyAmIDB4ZmY7CQkJ LyogR2V0IG5leHQgY2hhcmFjdGVyIGZyb20gYnVmZmVyICovCisgICAgaWJjLS07CQkJCS8qIFJl ZHVjZSBidWZmZXIgY291bnQgKi8KKyAgICByZXR1cm4oYyk7CQkJCS8qIFJldHVybiB0aGUgY2hh cmFjdGVyICovCit9CisKKy8qCisgICBLZXlib2FyZCBoYW5kbGluZywgYnVmZmVyZWQgZm9yIHNw ZWVkLCB3aGljaCBpcyBuZWVkZWQgd2hlbiBDLUtlcm1pdCBpcworICAgaW4gQ09OTkVDVCBtb2Rl IGJldHdlZW4gdHdvIG90aGVyIGNvbXB1dGVycyB0aGF0IGFyZSB0cmFuc2ZlcnJpbmcgZGF0YS4K KyovCitzdGF0aWMgY2hhciAqa2JwOwkJCS8qIEtleWJvYXJkIGlucHV0IGJ1ZmZlciBwb2ludGVy ICovCitzdGF0aWMgaW50IGtiYzsJCQkJLyogS2V5Ym9hcmQgaW5wdXQgYnVmZmVyIGNvdW50ICov CisKKyNpZmRlZiBDS19TTUFMTAkJCQkvKiBLZXlib2FyZCBpbnB1dCBidWZmZXIgbGVuZ3RoICov CisjZGVmaW5lIEtCVUZMIDMyCQkJLyogU21hbGwgZm9yIFBEUC0xMSBVTklYICovCisjZWxzZQor I2RlZmluZSBLQlVGTCAyNTcJCQkvKiBSZWd1bGFyIGtlcm5lbCBzaXplIGZvciBvdGhlcnMgKi8K KyNlbmRpZiAvKiBDS19TTUFMTCAqLworCisjaWZkZWYgRFlOQU1JQworc3RhdGljIGNoYXIgKmti dWYgPSBOVUxMOworI2Vsc2UKK3N0YXRpYyBjaGFyIGtidWZbS0JVRkxdOworI2VuZGlmIC8qIERZ TkFNSUMgKi8KKworLyogTWFjcm8gZm9yIHJlYWRpbmcga2V5c3Ryb2tlcy4gKi8KKworI2RlZmlu ZSBDT05HS1MoKSAoKCgtLWtiYyk+PTApID8gKChpbnQpKCprYnArKykgJiAwMzc3KSA6IGtiZ2V0 KCkpCisKKy8qCisgIE5vdGUgdGhhdCB3ZSBjYWxsIHJlYWQoKSBkaXJlY3RseSBoZXJlLCBub3Jt YWxseSBhIG5vLW5vLCBidXQgaW4gdGhpcyBjYXNlCisgIHdlIGtub3cgaXQncyBVTklYIGFuZCB3 ZSdyZSBvbmx5IGRvaW5nIHdoYXQgY29uaW5jKDApIHdvdWxkIGhhdmUgZG9uZSwKKyAgZXhjZXB0 IHdlJ3JlIHJlYWRpbmcgYSBibG9jayBvZiBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIGp1c3Qgb25l LiAgVGhlcmUgaXMsCisgIGF0IHByZXNlbnQsIG5vIGNvbnhpbigpIGFuYWxvZyB0byB0dHhpbigp IGZvciBjaHVuayByZWFkcywgYW5kIGluc3RpdHV0aW5nCisgIG9uZSB3b3VsZCBvbmx5IGFkZCBm dW5jdGlvbi1jYWxsIG92ZXJoZWFkIGFzIGl0IHdvdWxkIG9ubHkgYmUgYSB3cmFwcGVyIGZvcgor ICBhIHJlYWQoKSBjYWxsIGFueXdheS4KKyovCisvKgorICBBbm90aGVyIG5vdGU6IFdlIHN0aWNr IGluIHRoaXMgcmVhZCgpIHRpbGwgdGhlIHVzZXIgdHlwZXMgc29tZXRoaW5nLgorICBCdXQgdGhl IG90aGVyIChsb3dlcikgZm9yayBpcyBydW5uaW5nIHRvbywgYW5kIG9uIFRFTE5FVCBjb25uZWN0 aW9ucywKKyAgaXQgd2lsbCBzaWduYWwgdXMgdG8gaW5kaWNhdGUgZWNoby1jaGFuZ2UgbmVnb3Rp YXRpb25zLCBhbmQgdGhpcyBjYW4KKyAgaW50ZXJydXB0IHRoZSByZWFkKCkuICBTb21lIFVOSVhl cyBhdXRvbWF0aWNhbGx5IHJlc3RhcnQgdGhlIGludGVycnVwdGVkCisgIHN5c3RlbSBjYWxsLCBv dGhlcnMgcmV0dXJuIGZyb20gaXQgd2l0aCBlcnJubyA9PSBFSU5UUi4KKyovCitzdGF0aWMgaW50 CQkJCS8qIEtleWJvYXJkIGJ1ZmZlciBmaWxsZXIgKi8KK2tiZ2V0KCkgeworI2lmZGVmIEVJTlRS CisgICAgaW50IHRyaWVzID0gMTA7CQkJLyogSWYgcmVhZCgpIGlzIGludGVycnVwdGVkLCAqLwor ICAgIGludCBvayA9IDA7CisgICAgd2hpbGUgKHRyaWVzLS0gPiAwKSB7CQkvKiB0cnkgYSBmZXcg dGltZXMuLi4gKi8KKyNlbmRpZiAvKiBFSU5UUiAqLworCWlmICgoa2JjID0gY29uY2hrKCkpIDwg MSkJLyogSG93IG1hbnkgY2hhcnMgd2FpdGluZz8gKi8KKwkgIGtiYyA9IDE7CQkJLyogSWYgbm9u ZSBvciBkdW5ubywgd2FpdCBmb3Igb25lLiAqLworCWVsc2UgaWYgKGtiYyA+IEtCVUZMKQkJLyog SWYgdG9vIG1hbnksICovCisJICBrYmMgPSBLQlVGTDsJCQkvKiBvbmx5IHJlYWQgdGhpcyBtYW55 LiAqLworCWlmICgoa2JjID0gcmVhZCgwLCBrYnVmLCBrYmMpKSA8IDEpIHsgLyogTm93IHJlYWQg aXQvdGhlbS4gKi8KKwkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBrYmdldCBlcnJubyIsIiIsZXJy bm8pOwkvKiBHb3QgYW4gZXJyb3IuICovCisjaWZkZWYgRUlOVFIKKwkgICAgaWYgKGVycm5vID09 IEVJTlRSKQkJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwuICovCisJICAgICAgY29udGludWU7 CQkJLyogVHJ5IGFnYWluLCB1cCB0byBsaW1pdC4gKi8KKwkgICAgZWxzZQkJCS8qIFNvbWV0aGlu ZyBlbHNlLiAqLworI2VuZGlmIC8qIEVJTlRSICovCisJICAgICAgcmV0dXJuKC0xKTsJCS8qIFBh c3MgYWxvbmcgcmVhZCgpIGVycm9yLiAqLworCX0KKyNpZmRlZiBFSU5UUgorCWVsc2UgeyBvayA9 IDE7IGJyZWFrOyB9CisgICAgfQorICAgIGlmICghb2spIHJldHVybigtMSk7CisjZW5kaWYgLyog RUlOVFIgKi8KKyAgICBrYnAgPSBrYnVmOwkJCQkvKiBBZGp1c3QgYnVmZmVyIHBvaW50ZXIsICov CisgICAga2JjLS07CQkJCS8qIGNvdW50LCAqLworICAgIHJldHVybigoaW50KSgqa2JwKyspICYg MDM3Nyk7CS8qIGFuZCByZXR1cm4gZmlyc3QgY2hhcmFjdGVyLiAqLworfQorCisvKiAgQyBPIE4g QyBMIEQgLS0gIEludGVyYWN0aXZlIHRlcm1pbmFsIGNvbm5lY3Rpb24gY2hpbGQgZnVuY3Rpb24g Ki8KKworc3RhdGljCisjaWZkZWYgQkVPU09SQkVCT1gKK2xvbmcKKyNlbHNlCitWT0lECisjZW5k aWYgLyogQkVPU09SQkVCT1ggKi8KK2NvbmNsZCAoCisjaWZkZWYgQkVPU09SQkVCT1gKKyAgICAg ICB2b2lkICpiZXZvaWQKKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworICAgICAgICkgeworICAg IGludAluOwkJCS8qIEdlbmVyYWwgcHVycG9zZSBjb3VudGVyICovCisgICAgaW50IGk7CQkJLyog Rm9yIGxvb3BzLi4uICovCisgICAgaW50IGMgPSAtMTsJCQkvKiBjIGlzIGEgY2hhcmFjdGVyLCBi dXQgbXVzdCBiZSBzaWduZWQKKwkJCQkgICBpbnRlZ2VyIHRvIHBhc3MgdGhydSAtMSwgd2hpY2gg aXMgdGhlCisJCQkJICAgbW9kZW0gZGlzY29ubmVjdGlvbiBzaWduYWwsIGFuZCBpcworCQkJCSAg IGRpZmZlcmVudCBmcm9tIHRoZSBjaGFyYWN0ZXIgMDM3NyAqLworICAgIGludCBwcmV2OworI2lm ZGVmIFROQ09ERQorICAgIGludCB0eDsJCQkvKiB0bl9kb29wKCkgcmV0dXJuIGNvZGUgKi8KKyNl bmRpZiAvKiBUTkNPREUgKi8KKyNpZmRlZiBDS19UUklHR0VSCisgICAgaW50IGl4OwkJCQkvKiBU cmlnZ2VyIGluZGV4ICovCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworI2lmbmRlZiBOT0VTQ1NF UQorICAgIGludCBhcGNyYzsKKyNlbmRpZiAvKiBOT0VTQ1NFUSAqLworCisjaWZkZWYgQ09NTUVO VAorICAgIGludCBjb25yZXQgPSAwOwkJCS8qIFJldHVybiB2YWx1ZSBmcm9tIGNvbmVjdCgpICov CisgICAgamJjaGtzdW0gPSAtMUw7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGpic2V0ID0g MDsJCQkJLyogam1wX2J1ZiBub3Qgc2V0IHlldCwgZG9uJ3QgdXNlIGl0ICovCisgICAgZGVidWco RjEwMSwiQ09OTkVDVCBjb25jbGQgZW50cnkiLCIiLENLX0ZPUktfU0lHKTsKKyAJLyogKioqICov CQkvKiBJbmZlcmlvciByZWFkcywgcHJpbnRzIHBvcnQgaW5wdXQgKi8KKworICAgIGlmIChwcml2 X2NhbigpKSB7CQkJLyogQ2FuY2VsIGFsbCBwcml2cyAqLworCXByaW50ZigiP3NldHVpZCBlcnJv ciAtIGZhdGFsXG4iKTsKKwlkb2V4aXQoQkFEX0VYSVQsLTEpOworICAgIH0KKyAgICBzaWduYWwo U0lHSU5ULCBTSUdfSUdOKTsJCS8qIEluIGNhc2UgdGhlc2UgaGF2ZW4ndCBiZWVuICovCisgICAg c2lnbmFsKFNJR1FVSVQsIFNJR19JR04pOwkJLyogaW5oZXJpdGVkIGZyb20gYWJvdmUuLi4gKi8K KyAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOwkvKiBDS19GT1JLX1NJRyBub3QgZXhw ZWN0ZWQgeWV0ICovCisKKyAgICBpbnNoaWZ0ID0gb3V0c2hpZnQgPSAwOwkJLyogSW5pdGlhbCBT Ty9TSSBzaGlmdCBzdGF0ZS4gKi8KKyAgICB7CQkJCQkvKiBXYWl0IGZvciBwYXJlbnQncyBzZXR1 cCAqLworCWludCBpOworCXdoaWxlICgoaSA9IHJlYWQoeHBpcGVbMF0sICZjLCAxKSkgPD0gMCkg eworCSAgICBpZiAoaSA8IDApIHsKKwkJZGVidWcoRjEwMSwiQ09OTkVDVCBjb25jbGQgc2V0dXAg ZXJyb3IiLCIiLGkpOworCQlkZWJ1ZyhGMTExLCJDT05ORUNUIGNvbmNsZCBzZXR1cCBlcnJvciIs Y2tfZXJyc3RyKCksZXJybm8pOworCQlwaXBlbXNnKENFVl9IVVApOwkvKiBSZWFkIGVycm9yIC0g aGFuZ3VwICovCisJCWNrX3NuZG1zZygpOwkJLyogU2VuZCBhbmQgd2FpdCB0byBiZSBraWxsZWQg Ki8KKwkJLyogTk9UUkVBQ0hFRCAqLworCSAgICB9IC8qIFJlc3RhcnQgaW50ZXJydXB0ZWQgcmVh ZCgpICovCisJfQorICAgIH0KKyAgICBjbG9zZSh4cGlwZVswXSk7IHhwaXBlWzBdID0gLTE7CS8q IENoaWxkIC0gcHJldmVudCBmdXR1cmUgcmVhZHMgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChk ZWJsb2cpIHsKKwlkZWJ1ZyhGMTAwLCJDT05ORUNUIHN0YXJ0aW5nIHBvcnQgZm9yayIsIiIsMCk7 CisJZGVidWcoRjEwMSwiQ09OTkVDVCBwb3J0IGZvcmsgaWJjIiwiIixpYmMpOworCWRlYnVnKEYx MDEsIkNPTk5FQ1QgcG9ydCBmb3JrIG9iYyIsIiIsb2JjKTsKKyAgICB9CisjZW5kaWYgLyogREVC VUcgKi8KKyAgICB3aGF0ID0gV19DT05ORUNUOworCisgICAgd2hpbGUgKDEpIHsJCQkJLyogRnJl c2ggcmVhZCwgd2FpdCBmb3IgYSBjaGFyYWN0ZXIuICovCisjaWZkZWYgQU5ZWDI1CisJaWYgKG5l dHdvcmsgJiYgKG5ldHR5cGUgPT0gTkVUX1NYMjUpKSB7CisJICAgIGJ6ZXJvKHgyNWlidWYsc2l6 ZW9mKHgyNWlidWYpKSA7CisJICAgIGlmICgoaWJ1ZmwgPSB0dHhpbihNQVhJWDI1LChDSEFSICop eDI1aWJ1ZikpIDwgMCkgeworI2lmbmRlZiBJQk1YMjUKKwkJaWYgKGlidWZsID09IC0yKSB7ICAv KiBQQUQgcGFybXMgY2hhbmdlcyAqLworCQkgICAgcGlwZW1zZyhDRVZfUEFEKTsKKwkJICAgIHdy aXRlKHhwaXBlWzFdLHBhZHBhcm1zLE1BWFBBRFBBUk1TKTsKKwkJICAgIGNrX3NuZG1zZygpOwor CQl9IGVsc2UgeworI2VuZGlmIC8qIElCTVgyNSAqLworCQkgICAgaWYgKCFxdWlldCkKKwkJICAg ICAgcHJpbnRmKCJcclxuQ29tbXVuaWNhdGlvbnMgZGlzY29ubmVjdCAiKTsKKwkJICAgIGRvbG9n ZW5kKCk7CisJCSAgICBwaXBlbXNnKENFVl9IVVApOworCQkgICAgY2tfc25kbXNnKCk7CQkvKiBX YWl0IHRvIGJlIGtpbGxlZCAqLworCQkgICAgLyogTk9UUkVBQ0hFRCAqLworI2lmbmRlZiBJQk1Y MjUKKyAgCQl9CisjZW5kaWYgLyogSUJNWDI1ICovCisJCS8qIHBhdXNlKCk7IDwtLS0gU0hPVUxE IEJFIE9CU09MRVRFIE5PVyEgKi8KKwkJLyogQkVDQVVTRSBwYXVzZSgpIGlzIGRvbmUgaW5zaWRl IG9mIGNrX3NuZG1zZygpICovCisJICAgIH0KKwkgICAgaWYgKGRlYnNlcykgewkJLyogRGVidWdn aW5nIG91dHB1dCAqLworCQlwID0geDI1aWJ1ZiA7CisJCXdoaWxlIChpYnVmbC0tKSB7IGMgPSAq cCsrOyBjb25vbChkYmNocihjKSk7IH0KKwkgICAgfSBlbHNlIHsKKwkJaWYgKHNlc2xvZyAmJiBz ZXNzZnQpCS8qIEJpbmFyeSBzZXNzaW9uIGxvZyAqLworCQkgIGxvZ2NoYXIoKGNoYXIpYyk7CS8q IExvZyBjaGFyIGJlZm9yZSB0cmFuc2xhdGlvbiAqLworCisJCWlmIChzb3NpCisjaWZuZGVmIE5P Q1NFVFMKKwkJICAgIHx8IHRjc2wgIT0gdGNzcgorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwkJICAg ICkgeyAvKiBDaGFyYWN0ZXIgYXQgYSB0aW1lICovCisJCSAgICBmb3IgKGkgPSAxOyBpIDwgaWJ1 Zmw7IGkrKykgeworCQkJYyA9IHgyNWlidWZbaV0gJiBjbWFzazsKKwkJCWlmIChzb3NpKSB7IC8q IEhhbmRsZSBTSS9TTyAqLworCQkJICAgIGlmIChjID09IFNPKSB7CisJCQkJaW5zaGlmdCA9IDE7 CisJCQkJY29udGludWU7CisJCQkgICAgfSBlbHNlIGlmIChjID09IFNJKSB7CisJCQkJaW5zaGlm dCA9IDA7CisJCQkJY29udGludWU7CisJCQkgICAgfQorCQkJICAgIGlmIChpbnNoaWZ0KQorCQkJ ICAgICAgYyB8PSAwMjAwOworCQkJfQorI2lmbmRlZiBOT0NTRVRTCisJCQlpZiAoaW5lc2MgPT0g RVNfTk9STUFMKSB7CisjaWZkZWYgVU5JQ09ERQorCQkJICAgIGludCB4OworCQkJICAgIGlmICh1 bmljb2RlID09IDEpIHsJLyogUmVtb3RlIGlzIFVURi04ICovCisJCQkJeCA9IHVfdG9fYigoQ0hB UiljKTsKKwkJCSAgICAgICAgaWYgKHggPT0gLTEpCisJCQkJICBjb250aW51ZTsKKwkJCQllbHNl IGlmICh4ID09IC0yKSB7IC8qIExTIG9yIFBTICovCisJCQkJICAgIGlueGJ1ZlswXSA9IENSOwor CQkJCSAgICBpbnhidWZbMV0gPSBMRjsKKwkJCQkgICAgaW54Y291bnQgPSAyOworCQkJCX0gZWxz ZSB7CisJCQkJICAgIGlueGJ1ZlswXSA9ICh1bnNpZ25lZCkoeCAmIDB4ZmYpOworCQkJCX0KKwkJ CQljID0gaW54YnVmWzBdOworCQkJICAgIH0gZWxzZSBpZiAodW5pY29kZSA9PSAyKSB7IC8qIExv Y2FsIGlzIFVURi04ICovCisJCQkJaW54Y291bnQgPQorCQkJCSAgYl90b191KChDSEFSKWMsaW54 YnVmLE9VVFhCVUZTSVosdGNzc2l6ZSk7CisJCQkJYyA9IGlueGJ1ZlswXTsKKwkJCSAgICB9IGVs c2UgeworI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkJCQlpZiAoc3hpKSBjID0gKCpzeGkpKChDSEFS KWMpOworCQkJCWlmIChyeGkpIGMgPSAoKnJ4aSkoKENIQVIpYyk7CisJCQkJaW54YnVmWzBdID0g YzsKKyNpZmRlZiBVTklDT0RFCisJCQkgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkJCX0K KyNlbmRpZiAvKiBOT0NTRVRTICovCisJCQljICY9IGNtZG1zazsgLyogQXBwbHkgY29tbWFuZCBt YXNrLiAqLworCQkJY29ub2MoYyk7ICAgIC8qIE91dHB1dCB0byBzY3JlZW4gKi8KKwkJCWlmIChz ZXNsb2cgJiYgIXNlc3NmdCkgLyogYW5kIHNlc3Npb24gbG9nICovCisJCQkgIGxvZ2NoYXIoYyk7 CisJCSAgICB9CisJCX0gZWxzZSB7CQkvKiBBbGwgYXQgb25jZSAqLworCQkgICAgZm9yIChpID0g MTsgaSA8IGlidWZsOyBpKyspCisJCSAgICAgIHgyNWlidWZbaV0gJj0gKGNtYXNrICYgY21kbXNr KTsKKwkJICAgIGNvbnhvKGlidWZsLHgyNWlidWYpOworCQkgICAgaWYgKHNlc2xvZykgenNvdXR4 KFpTRklMRSx4MjVpYnVmLGlidWZsKTsKKwkJfQorCSAgICB9CisJICAgIGNvbnRpbnVlOworCisJ fSBlbHNlIHsJCQkvKiBOb3QgWC4yNS4uLiAqLworI2VuZGlmIC8qIEFOWVgyNSAqLworLyoKKyAg R2V0IHRoZSBuZXh0IGNvbW11bmljYXRpb24gbGluZSBjaGFyYWN0ZXIgZnJvbSBvdXIgaW50ZXJu YWwgYnVmZmVyLgorICBJZiB0aGUgYnVmZmVyIGlzIGVtcHR5LCByZWZpbGwgaXQuCisqLworCSAg ICBwcmV2ID0gYzsJCQkvKiBSZW1lbWJlciBwcmV2aW91cyBjaGFyYWN0ZXIgKi8KKwkgICAgYyA9 IGNrY2dldGMoMCk7CQkvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgKi8KKwkgICAgLyogZGVidWcoRjEw MSwiQ09OTkVDVCBjIiwiIixjKTsgKi8KKwkgICAgaWYgKGMgPCAwKSB7CQkvKiBGYWlsZWQuLi4g Ki8KKwkJZGVidWcoRjEwMSwiQ09OTkVDVCBkaXNjb25uZWN0IGliYyIsIiIsaWJjKTsKKwkJZGVi dWcoRjEwMSwiQ09OTkVDVCBkaXNjb25uZWN0IG9iYyIsIiIsb2JjKTsKKwkJY2tjcHV0ZigpOwkJ LyogRmx1c2ggQ09OTkVDVCBvdXRwdXQgYnVmZmVyICovCisJCWlmICghcXVpZXQpIHsKKwkJICAg IHByaW50ZigiXHJcbkNvbW11bmljYXRpb25zIGRpc2Nvbm5lY3QgIik7CisjaWZkZWYgQ09NTUVO VAorCQkgICAgaWYgKCBjID09IC0zCisjaWZkZWYgdWx0cml4CisvKiBUaGlzIGhhcHBlbnMgb24g VWx0cml4IGlmIHRoZXJlJ3Mgbm8gY2FycmllciAqLworCQkJJiYgZXJybm8gIT0gRUlPCisjZW5k aWYgLyogdWx0cml4ICovCisjaWZkZWYgVVRFSworLyogVGhpcyBoYXBwZW5zIG9uIFVURUsgaWYg dGhlcmUncyBubyBjYXJyaWVyICovCisJCQkmJiBlcnJubyAhPSBFV09VTERCTE9DSworI2VuZGlm IC8qIFVURUsgKi8KKwkJCSkKKwkJICAgICAgcGVycm9yKCJcclxuQ2FuJ3QgcmVhZCBjaGFyYWN0 ZXIiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCX0KKyNpZmRlZiBOT1NFVEJVRgorCQlmZmx1 c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworCQl0dGhhbmcoKTsJCS8qIEhhbmcg dXAgdGhlIGNvbm5lY3Rpb24gKi8KKwkJZGVidWcoRjExMSwiQ09OTkVDVCBjb25jbGQgaS9vIGVy cm9yIixja19lcnJzdHIoKSxlcnJubyk7CisJCXBpcGVtc2coQ0VWX0hVUCk7CisJCWNrX3NuZG1z ZygpOwkJLyogV2FpdCB0byBiZSBraWxsZWQgKi8KKwkgICAgfQorI2lmZGVmIENPTU1FTlQKKy8q IHRvbyBtdWNoLi4uICovCisJICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgKiogUE9SVCIsIiIsYyk7 IC8qIEdvdCBjaGFyYWN0ZXIgYyBPSy4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYg VE5DT0RFCisJICAgIC8qIEhhbmRsZSBURUxORVQgbmVnb3RpYXRpb25zLi4uICovCisKKwkgICAg aWYgKChjID09IE5VTCkgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkgeworCQlpZiAocHJldiA9 PSBDUikJCS8qIERpc2NhcmQgPE5VTD4gb2YgPENSPjxOVUw+ICovCisJCSAgaWYgKCFURUxPUFRf VShURUxPUFRfQklOQVJZKSkKKwkJICAgIGNvbnRpbnVlOworCSAgICB9CisJICAgIGlmICgoYyA9 PSBJQUMpICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsKKwkJaW50IG1lX2JpbiA9IFRFTE9Q VF9NRShURUxPUFRfQklOQVJZKTsKKwkJaW50IHVfYmluID0gVEVMT1BUX1UoVEVMT1BUX0JJTkFS WSk7CisJCWRlYnVnKEYxMDAsIkNPTk5FQ1QgZ290IElBQyIsIiIsMCk7CisJCWNrY3B1dGYoKTsJ CS8qIER1bXAgc2NyZWVuLW91dHB1dCBidWZmZXIgKi8KKwkJaWYgKCh0eCA9IHRuX2Rvb3AoKENI QVIpKGMgJiAweGZmKSxkdXBsZXgsY2tjZ2V0YykpID09IDApIHsKKwkJICAgIGlmIChtZV9iaW4g IT0gVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKSB7CisJCQlkZWJ1ZyhGMTAxLAorCQkJICAgICAg IkNPTk5FQ1QgVEVMTkVUIG1lX2JpbiIsCisJCQkgICAgICAiIiwKKwkJCSAgICAgIFRFTE9QVF9N RShURUxPUFRfQklOQVJZKQorCQkJICAgICAgKTsKKwkJCXBpcGVtc2coQ0VWX01FQklOKTsgLyog VGVsbCBwYXJlbnQgKi8KKwkJCXdyaXRlKHhwaXBlWzFdLAorCQkJICAgICAgJlRFTE9QVF9NRShU RUxPUFRfQklOQVJZKSwKKwkJCSAgICAgIHNpemVvZihURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkp CisJCQkgICAgICApOworCQkJY2tfc25kbXNnKCk7CS8qIFRlbGwgdGhlIHBhcmVudCBmb3JrICov CisJCSAgICB9IGVsc2UgaWYgKHVfYmluICE9IFRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpKSB7CisJ CQlkZWJ1ZyhGMTAxLAorCQkJICAgICAgIkNPTk5FQ1QgVEVMTkVUIHVfYmluIiwKKwkJCSAgICAg ICIiLAorCQkJICAgICAgVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkKKwkJCSAgICAgICk7CisJCQlw aXBlbXNnKENFVl9VQklOKTsgLyogVGVsbCBwYXJlbnQgKi8KKwkJCXdyaXRlKHhwaXBlWzFdLAor CQkJICAgICAgJlRFTE9QVF9VKFRFTE9QVF9CSU5BUlkpLAorCQkJICAgICAgc2l6ZW9mKFRFTE9Q VF9VKFRFTE9QVF9CSU5BUlkpKQorCQkJICAgICAgKTsKKwkJCWNrX3NuZG1zZygpOwkvKiBUZWxs IHRoZSBwYXJlbnQgZm9yayAqLworCQkgICAgfQorCQkgICAgY29udGludWU7CisJCX0gZWxzZSBp ZiAodHggPT0gLTEpIHsJLyogSS9PIGVycm9yICovCisJCSAgICBpZiAoIXF1aWV0KQorCQkgICAg ICBwcmludGYoIlxyXG5Db21tdW5pY2F0aW9ucyBkaXNjb25uZWN0ICIpOworI2lmZGVmIE5PU0VU QlVGCisJCSAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworCQkgICAg ZG9sb2dlbmQoKTsKKwkJICAgIGRlYnVnKEYxMTEsIkNPTk5FQ1QgY29uY2xkIGkvbyBlcnJvciAy Iixja19lcnJzdHIoKSxlcnJubyk7CisJCSAgICBwaXBlbXNnKENFVl9IVVApOworCQkgICAgY2tf c25kbXNnKCk7CS8qIFdhaXQgdG8gYmUga2lsbGVkICovCisJCSAgICAvKiBOT1RSRUFDSEVEICov CisJCX0gZWxzZSBpZiAodHggPT0gLTMpIHsJLyogSS9PIGVycm9yICovCisJCSAgICBpZiAoIXF1 aWV0KQorCQkgICAgICBwcmludGYoIlxyXG5Db25uZWN0aW9uIGNsb3NlZCBkdWUgdG8gdGVsbmV0 IHBvbGljeSAiKTsKKyNpZmRlZiBOT1NFVEJVRgorCQkgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5k aWYgLyogTk9TRVRCVUYgKi8KKwkJICAgIGRvbG9nZW5kKCk7CisJCSAgICBkZWJ1ZyhGMTExLCJD T05ORUNUIGNvbmNsZCBpL28gZXJyb3IgMiIsY2tfZXJyc3RyKCksZXJybm8pOworCQkgICAgcGlw ZW1zZyhDRVZfSFVQKTsKKwkJICAgIGNrX3NuZG1zZygpOwkvKiBXYWl0IHRvIGJlIGtpbGxlZCAq LworCQkgICAgLyogTk9UUkVBQ0hFRCAqLworCQl9IGVsc2UgaWYgKHR4ID09IC0yKSB7CS8qIEkv TyBlcnJvciAqLworCQkgICAgaWYgKCFxdWlldCkKKwkJICAgICAgcHJpbnRmKCJcclxuQ29ubmVj dGlvbiBjbG9zZWQgYnkgcGVlciAiKTsKKyNpZmRlZiBOT1NFVEJVRgorCQkgICAgZmZsdXNoKHN0 ZG91dCk7CisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKwkJICAgIGRvbG9nZW5kKCk7CisJCSAgICBk ZWJ1ZyhGMTExLCJDT05ORUNUIGNvbmNsZCBpL28gZXJyb3IgMiIsY2tfZXJyc3RyKCksZXJybm8p OworCQkgICAgcGlwZW1zZyhDRVZfSFVQKTsKKwkJICAgIGNrX3NuZG1zZygpOwkvKiBXYWl0IHRv IGJlIGtpbGxlZCAqLworCQkgICAgLyogTk9UUkVBQ0hFRCAqLworCQl9IGVsc2UgaWYgKCh0eCA9 PSAxKSAmJiAoIWR1cGxleCkpIHsgLyogRUNITyBjaGFuZ2UgKi8KKwkJICAgIGR1cGxleCA9IDE7 CQkvKiBUdXJuIG9uIGxvY2FsIGVjaG8gKi8KKwkJICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1QgVEVM TkVUIGR1cGxleCBjaGFuZ2UiLCIiLGR1cGxleCk7CisJCSAgICBwaXBlbXNnKENFVl9EVVApOwkv KiBUZWxsIHBhcmVudCAqLworCQkgICAgd3JpdGUoeHBpcGVbMV0sICZkdXBsZXgsIHNpemVvZihk dXBsZXgpKTsKKwkJICAgIGNrX3NuZG1zZygpOwkvKiBUZWxsIHRoZSBwYXJlbnQgZm9yayAqLwor CQkgICAgY29udGludWU7CisJCX0gZWxzZSBpZiAoKHR4ID09IDIpICYmIChkdXBsZXgpKSB7IC8q IEVDSE8gY2hhbmdlICovCisJCSAgICBkdXBsZXggPSAwOworCQkgICAgZGVidWcoRjEwMSwiQ09O TkVDVCBURUxORVQgZHVwbGV4IGNoYW5nZSIsIiIsZHVwbGV4KTsKKwkJICAgIHBpcGVtc2coQ0VW X0RVUCk7CisJCSAgICB3cml0ZSh4cGlwZVsxXSwgJmR1cGxleCwgc2l6ZW9mKGR1cGxleCkpOwor CQkgICAgY2tfc25kbXNnKCk7CisJCSAgICBjb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eCA9PSAz KSB7IC8qIFF1b3RlZCBJQUMgKi8KKwkJICAgIGMgPSBwYXJpdHkgPyAxMjcgOiAyNTU7CisJCX0K KyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNCkgeyAg IC8qIElLUyBTdGF0ZSBDaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9T QihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJgorCQkJIXRjcF9pbmNvbWluZworCQkJ KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBoZXJlIHdlIG5lZWQgdG8gcHJpbnQgYSBt c2cgdGhhdCB0aGUgb3RoZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZGUgaXMg aW4gU0VSVkVSIG1vZGUgYW5kIHRoYXQgUkVNT1RFICAgICAqLworICAgICAgICAgICAgICAgICAg ICAgICAgLyogY29tbWFuZHMgc2hvdWxkIGJlIHVzZWQuICBBbmQgQ09OTkVDVCBtb2RlICovCisg ICAgICAgICAgICAgICAgICAgICAgICAvKiBzaG91bGQgYmUgZW5kZWQuICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KKwkJCWFjdGl2ZSA9IDA7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBJ S1NfT1BUSU9OICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHggPT0gNikgeworICAgICAg ICAgICAgICAgICAgICAvKiBETyBMT0dPVVQgcmVjZWl2ZWQgKi8KKwkJICAgIGlmICghcXVpZXQp CisJCSAgICAgIHByaW50ZigiXHJcblJlbW90ZSBMb2dvdXQgIik7CisjaWZkZWYgTk9TRVRCVUYK KwkJICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisJCSAgICBkZWJ1 ZyhGMTAwLCJDT05ORUNUIFJlbW90ZSBMb2dvdXQiLCIiLDApOworCQkgICAgcGlwZW1zZyhDRVZf SFVQKTsKKwkJICAgIGNrX3NuZG1zZygpOwkvKiBXYWl0IHRvIGJlIGtpbGxlZCAqLworCQkgICAg LyogTk9UUkVBQ0hFRCAqLworICAgICAgICAgICAgICAgIH0gZWxzZQorCQkgIGNvbnRpbnVlOwkJ LyogTmVnb3RpYXRpb24gT0ssIGdldCBuZXh0IGNoYXIuICovCisKKwkgICAgfSBlbHNlIGlmIChw YXJpdHkpCisJICAgICAgYyAmPSAweDdmOworCisgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRF TE9QVF9FQ0hPKSAmJiB0bl9yZW1fZWNobykKKyAgICAgICAgICAgICAgICB0dG9jKGMpOyAgICAg ICAgICAgICAgICAvKiBJJ20gZWNob2luZyBmb3IgdGhlIHJlbW90ZSAqLworI2VuZGlmIC8qIFRO Q09ERSAqLworCisJICAgIGlmIChkZWJzZXMpIHsJCS8qIE91dHB1dCBjaGFyYWN0ZXIgdG8gc2Ny ZWVuICovCisJCWNoYXIgKnM7CQkvKiBEZWJ1Z2dpbmcgZGlzcGxheS4uLiAqLworCQlzID0gZGJj aHIoYyk7CisJCXdoaWxlICgqcykKKwkJICBja2NwdXRjKCpzKyspOworCSAgICB9IGVsc2UgewkJ CS8qIFJlZ3VsYXIgZGlzcGxheSAuLi4gKi8KKwkJYyAmPSBjbWFzazsJCS8qIEFwcGx5IEtlcm1p dC10by1yZW1vdGUgbWFzayAqLworI2lmZGVmIENLX0FVVE9ETAorLyoKKyAgQXV0b2Rvd25sb2Fk LiAgQ2hlY2sgZm9yIEtlcm1pdCBTIHBhY2tldCBwcmlvciB0byB0cmFuc2xhdGlvbiwgc2luY2Ug dGhhdAorICBjYW4gY2hhbmdlIHRoZSBwYWNrZXQgYW5kIG1ha2UgaXQgdW5yZWNvZ25pemFibGUg KGFzIHdoZW4gdGhlIHRlcm1pbmFsCisgIGNoYXJhY3RlciBzZXQgaXMgYW4gSVNPIDY0NiBvbmUp Li4uICBEaXR0byBmb3IgWm1vZGVtIHN0YXJ0IHBhY2tldC4KKyovCisJCWlmIChhdXRvZGwJCS8q IEF1dG9kb3dubG9hZCBlbmFibGVkPyAqLworI2lmZGVmIElLU19PUFRJT04KKwkJICAgIHx8IFRF TE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQKKyNlbmRpZiAvKiBJS1NfT1BU SU9OICovCisJCSAgICApIHsKKwkJICAgIGludCBrOworCQkgICAgayA9IGtzdGFydCgoQ0hBUilj KTsgLyogS2VybWl0IFMgb3IgSSBwYWNrZXQ/ICovCisjaWZkZWYgQ0tfWFlaCisJCSAgICBpZiAo IWsgJiYgem1kbG9rKQkvKiBPciBhbiAic3oiIHN0YXJ0PyAqLworCQkgICAgICBrID0genN0YXJ0 KChDSEFSKWMpOworI2VuZGlmIC8qIENLX1hZWiAqLworCQkgICAgaWYgKGspIHsKKwkJCWludCBr c2lnbiA9IDA7CisJCQlkZWJ1ZyhGMTAxLCJDT05ORUNUIGF1dG9kb3dubG9hZCBrIiwiIixrKTsK KwkJCWlmIChrIDwgMCkgeyAvKiBNaW51cy1Qcm90b2NvbD8gKi8KKyNpZmRlZiBOT1NFUlZFUgor CQkJICAgIGdvdG8gbm9zZXJ2ZXI7IC8qIE5lZWQgc2VydmVyIG1vZGUgZm9yIHRoaXMgKi8KKyNl bHNlCisJCQkgICAga3NpZ24gPSAxOyAvKiBSZW1lbWJlciAqLworCQkJICAgIGsgPSAwIC0gazsg LyogQ29udmVydCB0byBhY3R1YWwgcHJvdG9jb2wgKi8KKwkJCSAgICBqdXN0b25lID0gMTsgLyog RmxhZyBmb3IgcHJvdG9jb2wgbW9kdWxlICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKwkJCX0g ZWxzZQorCQkJICBqdXN0b25lID0gMDsKKwkJCWstLTsJCS8qIEFkanVzdCBba3pdc3RhcnQncyBy ZXR1cm4gdmFsdWUgKi8KKwkJCWlmIChrID09IFBST1RPX0sKKyNpZmRlZiBDS19YWVoKKwkJCSAg ICB8fCBrID09IFBST1RPX1oKKyNlbmRpZiAvKiBDS19YWVogKi8KKwkJCSAgICApIHsKKworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBkYW1hZ2UgdGhlIHBhY2tldCBzbyB0aGF0 IGl0IGRvZXMgbm90ICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cmlnZ2Vy IGF1dG9kb3dubG9hZCBkZXRlY3Rpb24gb24gc3Vic3F1ZW50ICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogbGlua3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gUFJPVE9fSykgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgbGVuID0gc3RybGVuKChjaGFy Kilrc2J1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCBsZW47IGkrKykKKwkJCQkgIGNrY3B1dGMoQlMpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyNpZmRlZiBDS19YWVoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQkJICBja2NwdXRjKENB Tik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1hZWiAqLwor CQkJICAgIC8qIE5vdGlmeSBwYXJlbnQgKi8KKwkJCSAgICBwaXBlbXNnKGp1c3RvbmUgPyBDRVZf QVVMIDogQ0VWX0FETCk7CisvKgorICBTZW5kIG91ciBtZW1vcnkgYmFjayB1cCB0byB0aGUgdG9w IGZvcmsgdGhydSB0aGUgcGlwZS4KKyAgQ0FSRUZVTCAtLSBXcml0ZSB0aGlzIHN0dWZmIGluIHRo ZSBzYW1lIG9yZGVyIGl0IGlzIHRvIGJlIHJlYWQhCisqLworCQkJICAgIC8qIENvcHkgb3VyIEtl cm1pdCBwYWNrZXQgdG8gdGhlIHBhcmVudCBmb3JrICovCisJCQkgICAgbiA9IChpbnQpIHN0cmxl bigoY2hhciAqKWtzYnVmKTsKKwkJCSAgICB3cml0ZSh4cGlwZVsxXSwgKGNoYXIgKikmbiwgc2l6 ZW9mKG4pKTsKKwkJCSAgICBpZiAobiA+IDApCisJCQkgICAgICB3cml0ZSh4cGlwZVsxXSwgKGNo YXIgKilrc2J1ZiwgbisxKTsKKwkJCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGF1dG9kb3dubG9h ZCBrc2J1ZiIsa3NidWYsbik7CisJCQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBhdXRvZG93bmxv YWQganVzdG9uZSIsIiIsCisJCQkJICBqdXN0b25lKTsKKwkJCSAgICAvKiBDb25zdHJ1Y3QgdGhl IEFQQyBjb21tYW5kICovCisJCQkgICAgc3ByaW50ZihhcGNidWYsCisJCQkJICAgICJzZXQgcHJv dG8gJXMsICVzLCBzZXQgcHJvdG8gJXMiLAorCQkJCSAgICBwdGFiW2tdLnBfbmFtZSwKKwkJCQkg ICAga3NpZ24gPyAic2VydmVyIiA6ICJyZWNlaXZlIiwKKwkJCQkgICAgcHRhYltwcm90b2NvbF0u cF9uYW1lCisJCQkJICAgICk7CisJCQkgICAgYXBjbGVuZ3RoID0gc3RybGVuKGFwY2J1Zik7CisJ CQkgICAgZGVidWcoRjExMSwiQ09OTkVDVCBrc2J1ZiIsa3NidWYsayk7CisJCQkgICAgZGVidWco RjExMCwiQ09OTkVDVCBhdXRvZG93bmxvYWQiLGFwY2J1ZiwwKTsKKwkJCSAgICBhcGNhY3RpdmUg PSBBUENfTE9DQUw7CisJCQkgICAgY2tjcHV0ZigpOwkvKiBGb3JjZSBzY3JlZW4gdXBkYXRlICov CisKKwkJCSAgICAvKiBXcml0ZSBidWZmZXIgaW5jbHVkaW5nIHRyYWlsaW5nIE5VTCBieXRlICov CisJCQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCB3cml0ZSB4cGlwZSBhcGNsZW5ndGgiLCIiLAor CQkJCSAgYXBjbGVuZ3RoKTsKKwkJCSAgICB3cml0ZSh4cGlwZVsxXSwKKwkJCQkgIChjaGFyICop JmFwY2xlbmd0aCwKKwkJCQkgIHNpemVvZihhcGNsZW5ndGgpCisJCQkJICApOworCQkJICAgIGRl YnVnKEYxMTAsIkNPTk5FQ1Qgd3JpdGUgeHBpcGUgYXBjYnVmIixhcGNidWYsMCk7CisJCQkgICAg d3JpdGUoeHBpcGVbMV0sIGFwY2J1ZiwgYXBjbGVuZ3RoKzEpOworCisJCQkgICAgLyogQ29weSBv dXIgaW5wdXQgYnVmZmVyIHRvIHRoZSBwYXJlbnQgZm9yayAqLworCisJCQkgICAgZGVidWcoRjEw MSwiQ09OTkVDVCBhdXRvZG93bmxvYWQgY29tcGxldGUgaWJjIiwKKwkJCQkgICIiLGliYyk7CisJ CQkgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBhdXRvZG93bmxvYWQgY29tcGxldGUgb2JjIiwKKwkJ CQkgICIiLG9iYyk7CisJCQkgICAgd3JpdGUoeHBpcGVbMV0sIChjaGFyICopJmliYywgc2l6ZW9m KGliYykpOworCQkJICAgIGlmIChpYmMgPiAwKSB7CisJCQkJd3JpdGUoeHBpcGVbMV0sIChjaGFy ICopJmlicCwgc2l6ZW9mKGlicCkpOworCQkJCXdyaXRlKHhwaXBlWzFdLCBpYnAsIGliYyk7CisJ CQkgICAgfQorCQkJICAgIGNrX3NuZG1zZygpOyAvKiBXYWl0IHRvIGJlIGtpbGxlZCAqLworCQkJ ICAgIC8qIE5PVFJFQUNIRUQgKi8KKwkJCX0KKwkJICAgIH0KKwkJfQorI2lmZGVmIE5PU0VSVkVS CisJICAgICAgbm9zZXJ2ZXI6CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyNlbmRpZiAvKiBDS19B VVRPREwgKi8KKwkJaWYgKHNvc2kpIHsJCS8qIEhhbmRsZSBTSS9TTyAqLworCQkgICAgaWYgKGMg PT0gU08pIHsJLyogU2hpZnQgT3V0ICovCisJCQlpbnNoaWZ0ID0gMTsKKwkJCWNvbnRpbnVlOwor CQkgICAgfSBlbHNlIGlmIChjID09IFNJKSB7IC8qIFNoaWZ0IEluICovCisJCQlpbnNoaWZ0ID0g MDsKKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQkgICAgaWYgKGluc2hpZnQpIGMgfD0gMDIwMDsK KwkJfQorCQlpbnhidWZbMF0gPSBjOwkJLyogSW4gY2FzZSB0aGVyZSBpcyBubyB0cmFuc2xhdGlv biAqLworCQlpbnhjb3VudCA9IDE7CQkvKiAuLi4gKi8KKyNpZm5kZWYgTk9DU0VUUworCQlpZiAo aW5lc2MgPT0gRVNfTk9STUFMKQl7IC8qIElmIG5vdCBpbiBhbiBlc2NhcGUgc2VxdWVuY2UgKi8K KyNpZmRlZiBVTklDT0RFCisJCSAgICBpbnQgeDsJCS8qIFRyYW5zbGF0ZSBjaGFyYWN0ZXIgc2V0 cyAqLworCQkgICAgQ0hBUiBjaDsKKwkJICAgIGNoID0gYzsKKwkJICAgIGlmICh1bmljb2RlID09 IDEpIHsJLyogUmVtb3RlIGlzIFVURi04ICovCisJCQl4ID0gdV90b19iKGNoKTsKKwkJCWlmICh4 IDwgMCkKKwkJCSAgY29udGludWU7CisJCQlpbnhidWZbMF0gPSAodW5zaWduZWQpKHggJiAweGZm KTsKKwkJCWMgPSBpbnhidWZbMF07CisJCSAgICB9IGVsc2UgaWYgKHVuaWNvZGUgPT0gMikgeyAv KiBMb2NhbCBpcyBVVEYtOCAqLworCQkJaW54Y291bnQgPSBiX3RvX3UoY2gsaW54YnVmLE9VVFhC VUZTSVosdGNzc2l6ZSk7CisJCQljID0gaW54YnVmWzBdOworCQkgICAgfSBlbHNlIHsKKyNlbmRp ZiAvKiBVTklDT0RFICovCisJCQlpZiAoc3hpKSBjID0gKCpzeGkpKChDSEFSKWMpOworCQkJaWYg KHJ4aSkgYyA9ICgqcnhpKSgoQ0hBUiljKTsKKwkJCWlueGJ1ZlswXSA9IGM7CisjaWZkZWYgVU5J Q09ERQorCQkgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkJfQorI2VuZGlmIC8qIE5PQ1NF VFMgKi8KKworI2lmbmRlZiBOT0VTQ1NFUQorCQlpZiAoZXNjc2VxKQkJLyogSWYgaGFuZGxpbmcg ZXNjYXBlIHNlcXVlbmNlcyAqLworCQkgIGFwY3JjID0gY2hrYWVzKChjaGFyKWMpOyAvKiB1cGRh dGUgb3VyIHN0YXRlICovCisjaWZkZWYgQ0tfQVBDCisvKgorICBJZiB3ZSBhcmUgaGFuZGxpbmcg QVBDcywgd2UgaGF2ZSBzZXZlcmFsIHBvc3NpYmlsaXRpZXMgYXQgdGhpcyBwb2ludDoKKyAgIDEu IE9yZGluYXJ5IGNoYXJhY3RlciB0byBiZSB3cml0dGVuIHRvIHRoZSBzY3JlZW4uCisgICAyLiBB biBFc2M7IHdlIGNhbid0IHdyaXRlIGl0IGJlY2F1c2UgaXQgbWlnaHQgYmUgdGhlIGJlZ2lubmlu ZyBvZiBhbiBBUEMuCisgICAzLiBUaGUgY2hhcmFjdGVyIGZvbGxvd2luZyBhbiBFc2MsIGluIHdo aWNoIGNhc2Ugd2Ugd3JpdGUgRXNjLCB0aGVuIGNoYXIsCisgICAgICBidXQgb25seSBpZiB3ZSBo YXZlIG5vdCBqdXN0IGVudGVyZWQgYW4gQVBDIHNlcXVlbmNlLgorKi8KKwkJaWYgKGVzY3NlcSAm JiAoYXBjc3RhdHVzICYgQVBDX09OKSkgeworCQkgICAgaWYgKGluZXNjID09IEVTX0dPVEVTQykJ LyogRG9uJ3Qgd3JpdGUgRVNDIHlldCAqLworCQkgICAgICBjb250aW51ZTsKKwkJICAgIGVsc2Ug aWYgKG9sZGVzYyA9PSBFU19HT1RFU0MgJiYgIWFwY2FjdGl2ZSkgeworCQkJY2tjcHV0YyhFU0Mp OwkvKiBXcml0ZSBzYXZlZCBFU0MgKi8KKwkJCWlmIChzZXNsb2cgJiYgIXNlc3NmdCkKKwkJCSAg bG9nY2hhcigoY2hhcilFU0MpOworCQkgICAgfSBlbHNlIGlmIChhcGNyYykgewkvKiBXZSBoYXZl IGFuIEFQQyAqLworCQkJZGVidWcoRjExMSwiQ09OTkVDVCBBUEMgY29tcGxldGUiLGFwY2J1Zixh cGNsZW5ndGgpOworCQkJY2tjcHV0ZigpOwkJLyogRm9yY2Ugc2NyZWVuIHVwZGF0ZSAqLworCQkJ cGlwZW1zZyhDRVZfQVBDKTsJLyogTm90aWZ5IHBhcmVudCAqLworCQkJd3JpdGUoeHBpcGVbMV0s CisJCQkgICAgICAoY2hhciAqKSZhcGNsZW5ndGgsCisJCQkgICAgICBzaXplb2YoYXBjbGVuZ3Ro KQorCQkJICAgICAgKTsKKwkJCS8qIFdyaXRlIGJ1ZmZlciBpbmNsdWRpbmcgdHJhaWxpbmcgTlVM IGJ5dGUgKi8KKworCQkJd3JpdGUoeHBpcGVbMV0sIGFwY2J1ZiwgYXBjbGVuZ3RoKzEpOworCisJ CQkvKiBDb3B5IG91ciBpbnB1dCBidWZmZXIgdG8gdGhlIHBhcmVudCBmb3JrICovCisKKwkJCWRl YnVnKEYxMDEsIkNPTk5FQ1QgQVBDIGNvbXBsZXRlIGliYyIsIiIsaWJjKTsKKwkJCWRlYnVnKEYx MDEsIkNPTk5FQ1QgQVBDIGNvbXBsZXRlIG9iYyIsIiIsb2JjKTsKKwkJCXdyaXRlKHhwaXBlWzFd LCAoY2hhciAqKSZpYmMsIHNpemVvZihpYmMpKTsKKwkJCWlmIChpYmMgPiAwKSB7CisJCQkgICAg d3JpdGUoeHBpcGVbMV0sIChjaGFyICopJmlicCwgc2l6ZW9mKGlicCkpOworCQkJICAgIHdyaXRl KHhwaXBlWzFdLCBpYnAsIGliYyk7CisJCQl9CisJCQlja19zbmRtc2coKTsJLyogV2FpdCB0byBi ZSBraWxsZWQgKi8KKwkJCS8qIE5PVFJFQUNIRUQgKi8KKwkJICAgIH0KKwkJfQorI2VuZGlmIC8q IENLX0FQQyAqLworI2VuZGlmIC8qIE5PRVNDU0VRICovCisKKwkJZm9yIChpID0gMDsgaSA8IGlu eGNvdW50OyBpKyspIHsgLyogTG9vcCB0aHJ1ICovCisJCSAgICBjID0gaW54YnVmW2ldOwkvKiBp bnB1dCBleHBhbnNpb24gYnVmZmVyLi4uICovCisJCSAgICBpZiAoCisjaWZkZWYgQ0tfQVBDCisJ CQkhYXBjYWN0aXZlCS8qIElnbm9yZSBBUEMgc2VxdWVuY2VzICovCisjZWxzZQorCQkJMQorI2Vu ZGlmIC8qIENLX0FQQyAqLworCQkJKSB7CisJCQljICY9IGNtZG1zazsJLyogQXBwbHkgY29tbWFu ZCBtYXNrLiAqLworCQkJaWYgKGMgPT0gQ1IgJiYgdHRfY3JkKSB7IC8qIFNFVCBURVJNIENSLURJ U1BMQSBDUkxGPyAqLworCQkJICAgIGNrY3B1dGMoYyk7CS8qIFllcywgb3V0cHV0IENSICovCisJ CQkgICAgaWYgKHNlc2xvZyAmJiAhc2Vzc2Z0KQorCQkJICAgICAgbG9nY2hhcigoY2hhciljKTsK KwkJCSAgICBjID0gTEY7CS8qIGFuZCBpbnNlcnQgYSBsaW5lZmVlZCAqLworCQkJfQorCQkJaWYg KGMgPT0gTEYgJiYgdHRfbGZkKSB7IC8qIFNFVCBURVJNIENSLURJU1BMQSBDUkxGPyAqLworCQkJ ICAgIGNrY3B1dGMoQ1IpOyAvKiBZZXMsIG91dHB1dCBDUiAqLworCQkJICAgIGlmIChzZXNsb2cg JiYgIXNlc3NmdCkgbG9nY2hhcigoY2hhcilDUik7CisJCQl9CisJCQlja2NwdXRjKGMpOwkvKiBX cml0ZSBjaGFyYWN0ZXIgdG8gc2NyZWVuICovCisJCSAgICB9CisJCSAgICBpZiAoc2VzbG9nICYm ICFzZXNzZnQpIC8qIEhhbmRsZSBzZXNzaW9uIGxvZyAqLworCQkgICAgICBsb2djaGFyKChjaGFy KWMpOworI2lmZGVmIENLX1RSSUdHRVIKKwkJICAgIC8qIENoZWNrIGZvciB0cmlnZ2VyIHN0cmlu ZyAqLworCQkgICAgaWYgKHR0X3RyaWdnZXJbMF0pIGlmICgoaXggPSBhdXRvZXhpdGNoaygoQ0hB UiljKSkgPiAtMSkgeworCQkJY2tjcHV0ZigpOwkvKiBGb3JjZSBzY3JlZW4gdXBkYXRlICovCisj aWZkZWYgTk9TRVRCVUYKKwkJCWZmbHVzaChzdGRvdXQpOwkvKiBJIG1lYW4gcmVhbGx5IGZvcmNl IGl0ICovCisjZW5kaWYgLyogTk9TRVRCVUYgKi8KKwkJCXBpcGVtc2coQ0VWX1RSSSk7IC8qIFNl bmQgdXAgdHJpZ2dlciBpbmRpY2F0aW9uICovCisJCQl3cml0ZSh4cGlwZVsxXSwgKGNoYXIgKikm aXgsIHNpemVvZihpeCkpOyAvKiBpbmRleCAqLworCQkJd3JpdGUoeHBpcGVbMV0sIChjaGFyICop JmliYywgc2l6ZW9mKGliYykpOworCQkJaWYgKGliYyA+IDApIHsKKwkJCSAgICB3cml0ZSh4cGlw ZVsxXSwgKGNoYXIgKikmaWJwLCBzaXplb2YoaWJwKSk7CisJCQkgICAgd3JpdGUoeHBpcGVbMV0s IGlicCwgaWJjKTsKKwkJCX0KKwkJCWRlYnVnKEYxMDAsIkNPTk5FQ1QgY29uY2xkIHRyaWdnZXIi LCIiLDApOworCQkJY2tfc25kbXNnKCk7CS8qIFdhaXQgdG8gYmUga2lsbGVkICovCisJCQlhY3Rp dmUgPSAwOwkvKiBTaG91bGRuJ3QgYmUgbmVjZXNzYXJ5Li4uICovCisJCQlicmVhazsKKwkJICAg IH0KKwkJICAgIC8qIE5PVFJFQUNIRUQgKi8KKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisJCX0K KwkgICAgfQorI2lmZGVmIEFOWVgyNQorCX0KKyNlbmRpZiAvKiBBTllYMjUgKi8KKyAgICB9Cit9 CisKKworLyogIEMgTyBOIEUgQyBUICAtLSAgSW50ZXJhY3RpdmUgdGVybWluYWwgY29ubmVjdGlv biAgKi8KKworaW50Citjb25lY3QoKSB7CisgICAgaW50CW47CQkJLyogR2VuZXJhbCBwdXJwb3Nl IGNvdW50ZXIgKi8KKyAgICBpbnQgaTsJCQkvKiBGb3IgbG9vcHMuLi4gKi8KKyAgICBpbnQgYzsJ CQkvKiBjIGlzIGEgY2hhcmFjdGVyLCBidXQgbXVzdCBiZSBzaWduZWQKKwkJCQkgICBpbnRlZ2Vy IHRvIHBhc3MgdGhydSAtMSwgd2hpY2ggaXMgdGhlCisJCQkJICAgbW9kZW0gZGlzY29ubmVjdGlv biBzaWduYWwsIGFuZCBpcworCQkJCSAgIGRpZmZlcmVudCBmcm9tIHRoZSBjaGFyYWN0ZXIgMDM3 NyAqLworICAgIGludCBjMjsJCQkvKiBBIGNvcHkgb2YgYyAqLworICAgIGludCBjc2F2ZTsJCQkv KiBBbm90aGVyIGNvcHkgb2YgYyAqLworI2lmbmRlZiBOT0VTQ1NFUQorICAgIGludCBhcGNyYzsK KyNlbmRpZiAvKiBOT0VTQ1NFUSAqLworCisgICAgaW50IGNvbnJldCA9IDA7CQkJLyogUmV0dXJu IHZhbHVlIGZyb20gY29uZWN0KCkgKi8KKyAgICBpbnQgbXNnZmxnID0gMDsKKyAgICAvKiBqYmNo a3N1bSA9IC0xTDsgKi8KKyAgICBqYnNldCA9IDA7CQkJCS8qIGptcF9idWYgbm90IHNldCB5ZXQs IGRvbid0IHVzZSBpdCAqLworICAgIGRlYm9rID0gMTsKKworICAgIGRlYnVnKEYxMDEsIkNPTk5F Q1QgZm9yayBzaWduYWwiLCIiLENLX0ZPUktfU0lHKTsKKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNU IGVudHJ5IHBpZCIsIiIscGlkKTsKKworICAgIG1zZ2ZsZyA9ICFxdWlldAorI2lmZGVmIENLX0FQ QworICAgICAgJiYgIWFwY2FjdGl2ZQorI2VuZGlmIC8qIENLX0FQQyAqLworCTsKKy8qCisgIFRo ZSBmb2xsb3dpbmcgaXMgdG8gaGFuZGxlIGEgZm9yayBsZWZ0IGJlaGluZCBpZiB3ZSBleGl0IENP Tk5FQ1QgbW9kZQorICB3aXRob3V0IGtpbGxpbmcgaXQsIGFuZCB0aGVuIHJldHVybiB0byBDT05O RUNUIG1vZGUuICBUaGlzIGhhcHBlbmVkIGluCisgIEhQLVVYLCB3aGVyZSB0aGUgUmVzZXQga2V5 IHdvdWxkIHJhaXNlIFNJR0lOVCBldmVuIHRob3VnaCBTSUdJTlQgd2FzIHNldCB0bworICBTSUdf SUdOLiAgVGhlIGNvZGUgYmVsb3cgZml4ZXMgdGhlIHN5bXB0b207IHRoZSByZWFsIGZpeCBpcyBp biB0aGUgbWFpbgorICBTSUdJTlQgaGFuZGxlciAoaWYgU0lHSU5UIHNob3dzIHVwIGR1cmluZyBD T05ORUNULCBqdXN0IHJldHVybiByYXRoZXIgdGhhbgorICB0YWtpbmcgdGhlIGxvbmdqbXApLgor Ki8KKyAgICBpZiAocGlkKSB7CQkJCS8qIFRoaXMgc2hvdWxkIGJlIDAgKi8KKwlpbnQgeCA9IDA7 CisJZGVidWcoRjEwMSwiQ09OTkVDVCBlbnRyeSBraWxsaW5nIHN0YWxlIHBpZCIsIiIscGlkKTsK KwlwcmludGYoIldBUk5JTkc6IE9sZCBDT05ORUNUIGZvcmsgc2VlbXMgdG8gYmUgYWN0aXZlLlxu Iik7CisJcHJpbnRmKCJBdHRlbXB0aW5nIHRvIHJlbW92ZSBpdC4uLiIpOworI2lmZGVmIEJFT1NP UkJFQk9YCisJeworCSAgICBsb25nIHJldF92YWw7CisJICAgIHggPSBraWxsKHBpZCxTSUdLSUxM VEhSKTsgLyogS2lsbCBsb3dlciBmb3JrICovCisJICAgIHdhaXRfZm9yX3RocmVhZCAocGlkLCAm cmV0X3ZhbCk7CisJfQorI2Vsc2UKKyNpZmRlZiBQbGFuOQorCXggPSBraWxsKHBpZCxTSUdLSUxM KTsJCS8qIEtpbGwgbG93ZXIgZm9yayAqLworI2Vsc2UKKwl4ID0ga2lsbChwaWQsOSk7CisjZW5k aWYgLyogUGxhbjkgKi8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworCXdhaXQoKFdBSVRfVCAq KTApOwkJLyogV2FpdCB0aWxsIGdvbmUuICovCisJaWYgKHggPCAwKSB7CisJICAgIHByaW50Zigi RVJST1I6IEZhaWx1cmUgdG8ga2lsbCBwaWQgJWQ6ICVzLCBlcnJubz0lZFxuIiwKKwkJICAgKGlu dCkgcGlkLCBja19lcnJzdHIoKSwgZXJybm8pOworCSAgICBkZWJ1ZyhGMTExLCJDT05ORUNUIGVy cm9yIGtpbGxpbmcgc3RhbGUgcGlkIixja19lcnJzdHIoKSxwaWQpOworCX0KKwlwaWQgPSAoUElE X1QpIDA7CisJcHJpbnRmKCJcbiIpOworICAgIH0KKyAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJ R19JR04pOwkvKiBJbml0aWFsIENLX0ZPUktfU0lHIGhhbmRsaW5nLCAqLworLyoKKyAgVGhlIGZv bGxvd2luZyB0dGltb2ZmKCkgY2FsbCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYnV0IGV2aWRl bnRseSB0aGVyZQorICBhcmUgY2FzZXMgd2hlcmUgYSB0aW1lciBpcyBsZWZ0IGFjdGl2ZSBhbmQg dGhlbiBnb2VzIG9mZiwgdGFraW5nIGEgbG9uZ2ptcAorICB0byBub3doZXJlIGFmdGVyIHRoZSBw cm9ncmFtJ3Mgc3RhY2sgaGFzIGNoYW5nZWQuICBJbiBhbnkgY2FzZSwgdGhpcyBpcworICBzYWZl IGJlY2F1c2UgdGhlIENPTk5FQ1QgbW9kdWxlIHVzZXMgbm8gdGltZXIgb2YgYW55IGtpbmQsIGFu ZCBubyBvdGhlciB0aW1lcgorICBzaG91bGQgYmUgYXJtZWQgd2hpbGUgS2VybWl0IGlzIGluIENP Tk5FQ1QgbW9kZS4KKyovCisgICAgdHRpbW9mZigpOwkJCQkvKiBUdXJuIG9mZiBhbnkgdGltZXIg aW50ZXJydXB0cyAqLworCisjaWZkZWYgQ0tfVFJJR0dFUgorICAgIG1ha2VzdHIoJnRyaWdnZXJ2 YWwsTlVMTCk7CQkvKiBSZXNldCB0cmlnZ2VyICovCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLwor CisgICAgaWYgKCFsb2NhbCkgeworI2lmZGVmIE5FVENPTk4KKwlwcmludGYoIlNvcnJ5LCB5b3Ug bXVzdCBTRVQgTElORSBvciBTRVQgSE9TVCBmaXJzdFxuIik7CisjZWxzZQorCXByaW50ZigiU29y cnksIHlvdSBtdXN0IFNFVCBMSU5FIGZpcnN0XG4iKTsKKyNlbmRpZiAvKiBORVRDT05OICovCisJ Z290byBjb25yZXQwOworICAgIH0KKyAgICBpZiAoc3BlZWQgPCAwTCAmJiBuZXR3b3JrID09IDAg JiYgdHRmZGZsZyA9PSAwKSB7CisJcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgU0VUIFNQRUVEIGZp cnN0XG4iKTsKKwlnb3RvIGNvbnJldDA7CisgICAgfQorI2lmZGVmIFRDUFNPQ0tFVAorICAgIGlm IChuZXR3b3JrICYmIChuZXR0eXBlICE9IE5FVF9UQ1BCKQorI2lmZGVmIFNVTlgyNQorICAgICAg ICAmJiAobmV0dHlwZSAhPSBORVRfU1gyNSkKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKyNpZmRlZiBJ Qk1YMjUKKwkmJiAobmV0dHlwZSAhPSBORVRfSVgyNSkKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNp ZmRlZiBORVRDTUQKKyAgICAgICAgJiYgKG5ldHR5cGUgIT0gTkVUX0NNRCkKKyNlbmRpZiAvKiBO RVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICAgICAmJiAobmV0dHlwZSAhPSBORVRfUFRZKQor I2VuZGlmIC8qIE5FVFBUWSAqLworICAgICkgeworCXByaW50ZigiU29ycnksIG5ldHdvcmsgdHlw ZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwlnb3RvIGNvbnJldDA7CisgICAgfQorI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworCisjaWZkZWYgRFlOQU1JQworICAgIGlmICghaWJ1ZikgeworCWlmICghKGli dWYgPSBtYWxsb2MoSUJVRkwrMSkpKSB7IC8qIEFsbG9jYXRlIGlucHV0IGxpbmUgYnVmZmVyICov CisJICAgIHByaW50ZigiU29ycnksIENPTk5FQ1QgaW5wdXQgYnVmZmVyIGNhbid0IGJlIGFsbG9j YXRlZFxuIik7CisJICAgIGdvdG8gY29ucmV0MDsKKwl9IGVsc2UgeworCSAgICBpYnAgPSBpYnVm OworCSAgICBpYmMgPSAwOworCX0KKyAgICB9CisgICAgaWYgKCFvYnVmKSB7CisJaWYgKCEob2J1 ZiA9IG1hbGxvYyhPQlVGTCsxKSkpIHsgICAgLyogQWxsb2NhdGUgb3V0cHV0IGxpbmUgYnVmZmVy ICovCisJICAgIHByaW50ZigiU29ycnksIENPTk5FQ1Qgb3V0cHV0IGJ1ZmZlciBjYW4ndCBiZSBh bGxvY2F0ZWRcbiIpOworCSAgICBnb3RvIGNvbnJldDA7CisJfSBlbHNlIHsKKwkgICAgb2JwID0g b2J1ZjsKKwkgICAgb2JjID0gMDsKKwl9CisgICAgfQorICAgIGlmICgha2J1ZikgeworCWlmICgh KGtidWYgPSBtYWxsb2MoS0JVRkwrMSkpKSB7IC8qIEFsbG9jYXRlIGtleWJvYXJkIGlucHV0IGJ1 ZmZlciAqLworCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIGtleWJvYXJkIGJ1ZmZlciBjYW4n dCBiZSBhbGxvY2F0ZWRcbiIpOworCSAgICBnb3RvIGNvbnJldDA7CisJfQorICAgIH0KKyAgICBp ZiAoIXRlbXApIHsKKwlpZiAoISh0ZW1wID0gbWFsbG9jKFRNUExFTisxKSkpIHsgLyogQWxsb2Nh dGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLworCSAgICBwcmludGYoIlNvcnJ5LCBDT05ORUNUIHRlbXBv cmFyeSBidWZmZXIgY2FuJ3QgYmUgYWxsb2NhdGVkXG4iKTsKKwkgICAgZ290byBjb25yZXQwOwor CX0KKyAgICB9CisjZWxzZQorI2lmZGVmIENPTU1FTlQKKyAgICBpYnAgPSBpYnVmOworICAgIGli YyA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIG9icCA9IG9idWY7CisgICAgb2JjID0g MDsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisKKyAgICBrYnAgPSBrYnVmOwkJCQkvKiBBbHdheXMg Y2xlYXIgdGhlc2UuICovCisgICAgKmticCA9IE5VTDsJCQkJLyogTm8gbmVlZCB0byBwcmVzZXJ2 ZSB0aGVtIGJldHdlZW4gKi8KKyAgICBrYmMgPSAwOwkJCQkvKiBDT05ORUNUIHNlc3Npb25zLiAq LworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEwMSwiQ09OTkVD VCBjb25lY3QgZW50cnkgdHR5ZmQiLCIiLHR0eWZkKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGNv bmVjdCBlbnRyeSBpYmMiLCIiLGliYyk7CisJZGVidWcoRjEwMSwiQ09OTkVDVCBjb25lY3QgZW50 cnkgb2JjIiwiIixvYmMpOworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgY29uZWN0IGVudHJ5IGtiYyIs IiIsa2JjKTsKKyNpZmRlZiBDS19UUklHR0VSCisJZGVidWcoRjExMCwiQ09OTkVDVCBjb25lY3Qg dHJpZ2dlciIsdHRfdHJpZ2dlclswXSwwKTsKKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisJaWYg KHR0eWZkID4gLTEpIHsKKwkgICAgbiA9IHR0Y2hrKCk7CisJICAgIGRlYnVnKEYxMDEsIkNPTk5F Q1QgY29uZWN0IGVudHJ5IHR0Y2hrIiwiIixuKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIERFQlVH ICovCisKKyAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogSWYgY29tbXVuaWNhdGlvbiBkZXZpY2Ug bm90IG9wZW4gKi8KKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHR0bnByb3RvIiwiIix0dG5wcm90byk7 CisJZGVidWcoRjExMSwiQ09OTkVDVCBvcGVuaW5nIix0dG5hbWUsMCk7IC8qIE9wZW4gaXQgbm93 ICovCisJaWYgKHR0b3Blbih0dG5hbWUsCisJCSAgICZsb2NhbCwKKwkJICAgbmV0d29yayA/IC1u ZXR0eXBlIDogbWRtdHlwLAorCQkgICAwCisJCSAgICkgPCAwKSB7CisJICAgIGNrbWFrbXNnKHRl bXAsVE1QTEVOLCJTb3JyeSwgY2FuJ3Qgb3BlbiAiLHR0bmFtZSxOVUxMLE5VTEwpOworCSAgICBw ZXJyb3IodGVtcCk7CisJICAgIGRlYnVnKEYxMTAsIkNPTk5FQ1Qgb3BlbiBmYWlsdXJlIix0dG5h bWUsMCk7CisJICAgIGdvdG8gY29ucmV0MDsKKwl9CisjaWZkZWYgSUtTX09QVElPTgorCS8qIElm IHBlZXIgaXMgaW4gS2VybWl0IHNlcnZlciBtb2RlLCByZXR1cm4gbm93LiAqLworCWlmIChURUxP UFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQpCisJICByZXR1cm4oMCk7CisjZW5k aWYgLyogSUtTX09QVElPTiAqLworICAgIH0KKyAgICBkb2hhbmd1cCA9IDA7CQkJLyogSGFuZ3Vw IG5vdCByZXF1ZXN0ZWQgeWV0ICovCisjaWZkZWYgQU5ZWDI1CisgICAgZG94MjVjbHIgPSAwOwkJ CS8qIFguMjUgY2xlYXIgbm90IHJlcXVlc3RlZCB5ZXQgKi8KKyNlbmRpZiAvKiBBTllYMjUgKi8K KworICAgIGlmIChtc2dmbGcpIHsKKyNpZmRlZiBORVRDT05OCisJaWYgKG5ldHdvcmspIHsKKwkg ICAgaWYgKHR0cGlwZSkKKwkgICAgICBwcmludGYoIkNvbm5lY3RpbmcgdmlhIGNvbW1hbmQgXCIl c1wiIix0dG5hbWUpOworCSAgICBlbHNlCisJICAgICAgcHJpbnRmKCJDb25uZWN0aW5nIHRvIGhv c3QgJXMiLHR0bmFtZSk7CisjaWZkZWYgQU5ZWDI1CisJICAgIGlmIChuZXR0eXBlID09IE5FVF9T WDI1IHx8IG5ldHR5cGUgPT0gTkVUX0lYMjUpCisJICAgICAgcHJpbnRmKCIsIExpbmsgSUQgJWQs IExDTiAlZCIsbGlua2lkLGxjbik7CisjZW5kaWYgLyogQU5ZWDI1ICovCisJfSBlbHNlIHsKKyNl bmRpZiAvKiBORVRDT05OICovCisJICAgIHByaW50ZigiQ29ubmVjdGluZyB0byAlcyIsdHRuYW1l KTsKKwkgICAgaWYgKHNwZWVkID4gLTFMKSBwcmludGYoIiwgc3BlZWQgJWxkIixzcGVlZCk7Cisj aWZkZWYgTkVUQ09OTgorCX0KKyNlbmRpZiAvKiBORVRDT05OICovCisJaWYgKHR0X2VzY2FwZSkg eworCSAgICBwcmludGYoIlxyXG4iKTsKKwkgICAgc2hvZXNjKGVzY2FwZSk7CisJICAgIHByaW50 ZigiVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSBDIHRvIGdldCBiYWNrLFxy XG4iKTsKKwkgICAgcHJpbnRmKCJvciBmb2xsb3dlZCBieSA/IHRvIHNlZSBvdGhlciBvcHRpb25z LlxyXG4iKTsKKwl9IGVsc2UgeworCSAgICBwcmludGYoIi5cclxuXG5FU0NBUEUgQ0hBUkFDVEVS IElTIERJU0FCTEVEXHJcblxuIik7CisJfQorCWlmIChzZXNsb2cpIHsKKwkgICAgZXh0ZXJuIGlu dCBzbG9ndHM7CisJICAgIGNoYXIgKiBzID0gIiI7CisJICAgIHN3aXRjaCAoc2Vzc2Z0KSB7CisJ ICAgICAgY2FzZSBYWUZUX0Q6CisJCXMgPSAiZGVidWciOyBicmVhazsKKwkgICAgICBjYXNlIFhZ RlRfVDoKKwkJcyA9IHNsb2d0cyA/ICJ0aW1lc3RhbXBlZC10ZXh0IiA6ICJ0ZXh0IjsgYnJlYWs7 CisJICAgICAgZGVmYXVsdDoKKwkJcyA9ICJiaW5hcnkiOworCSAgICB9CisJICAgIHByaW50Zigi U2Vzc2lvbiBMb2c6ICVzLCAlc1xyXG4iLHNlc2ZpbCxzKTsKKwl9CisJaWYgKGRlYnNlcykgcHJp bnRmKCJEZWJ1Z2dpbmcgRGlzcGxheS4uLilcclxuIik7CisgICAgICAgIHByaW50ZigiLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iKTsKKwlm Zmx1c2goc3Rkb3V0KTsKKyAgICB9CisKKy8qIENvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsIGFu ZCBjb21tdW5pY2F0aW9uIGxpbmUgKi8KKworICAgIGlmIChjb25iaW4oKGNoYXIpZXNjYXBlKSA8 IDApIHsKKwlwcmludGYoIlNvcnJ5LCBjYW4ndCBjb25kaXRpb24gY29uc29sZSB0ZXJtaW5hbFxu Iik7CisJZ290byBjb25yZXQwOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGNtYXNr IiwiIixjbWFzayk7CisgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBjbWRtc2siLCIiLGNtZG1zayk7 CisgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBzcGVlZCBiZWZvcmUgdHR2dCIsIiIsc3BlZWQpOwor ICAgIGlmICgobiA9IHR0dnQoc3BlZWQsZmxvdykpIDwgMCkgewkvKiBFbnRlciAidmlydHVhbCB0 ZXJtaW5hbCIgbW9kZSAqLworCWlmICghbmV0d29yaykgeworCSAgICBkZWJ1ZyhGMTAxLCJDT05O RUNUIHR0dnQiLCIiLG4pOworCSAgICB0dGhhbmcoKTsJCQkvKiBIYW5nIHVwIGFuZCBjbG9zZSB0 aGUgZGV2aWNlLiAqLworCSAgICB0dGNsb3MoMCk7CisJICAgIGRvbG9nZW5kKCk7CisJICAgIGlm ICh0dG9wZW4odHRuYW1lLAkJLyogT3BlbiBpdCBhZ2Fpbi4uLiAqLworCQkgICAgICAgJmxvY2Fs LAorCQkgICAgICAgbmV0d29yayA/IC1uZXR0eXBlIDogbWRtdHlwLAorCQkgICAgICAgMAorCQkg ICAgICAgKSA8IDApIHsKKwkJY2ttYWttc2codGVtcCxUTVBMRU4sIlNvcnJ5LCBjYW4ndCByZW9w ZW4gIix0dG5hbWUsTlVMTCxOVUxMKTsKKwkJcGVycm9yKHRlbXApOworCQlnb3RvIGNvbnJldDA7 CisJICAgIH0KKyNpZmRlZiBJS1NfT1BUSU9OCisJICAgIGlmIChURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0LnVfc3RhcnQpCisJICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIElLU19P UFRJT04gKi8KKwkgICAgaWYgKHR0dnQoc3BlZWQsZmxvdykgPCAwKSB7CS8qIFRyeSB2aXJ0dWFs IHRlcm1pbmFsIG1vZGUgYWdhaW4uICovCisJCWNvbnJlcygpOwkJLyogRmFpbHVyZSB0aGlzIHRp bWUgaXMgZmF0YWwuICovCisJCXByaW50ZigiU29ycnksIENhbid0IGNvbmRpdGlvbiBjb21tdW5p Y2F0aW9uIGxpbmVcbiIpOworCQlnb3RvIGNvbnJldDA7CisJICAgIH0KKwl9CisgICAgfQorICAg IGRlYnVnKEYxMDEsIkNPTk5FQ1QgdHR2dCBvaywgZXNjYXBlIiwiIixlc2NhcGUpOworCisgICAg ZGVidWcoRjEwMSwiQ09OTkVDVCBjYXJyaWVyLXdhdGNoIiwiIixjYXJyaWVyKTsKKyAgICBpZiAo KCFuZXR3b3JrIAorI2lmZGVmIFROX0NPTVBPUlQKKwkgIHx8IGlzdG5jb21wb3J0KCkKKyNlbmRp ZiAvKiBUTl9DT01QT1JUICovCisJICkgJiYgKGNhcnJpZXIgIT0gQ0FSX09GRikpIHsKKwlpbnQg eDsKKwl4ID0gdHRnbWRtKCk7CisJZGVidWcoRjEwMCwiQ09OTkVDVCB0dGdtZG0iLCIiLHgpOwor CWlmICgoeCA+IC0xKSAmJiAhKHggJiBCTV9EQ0QpKSB7CisjaWZuZGVmIE5PSElOVFMKKwkgICAg ZXh0ZXJuIGludCBoaW50czsKKyNlbmRpZiAvKiBOT0hJTlRTICovCisJICAgIGRlYnVnKEYxMDAs IkNPTk5FQ1QgdHRnbWRtIENEIHRlc3QgZmFpbHMiLCIiLHgpOworCSAgICBjb25yZXMoKTsKKwkg ICAgcHJpbnRmKCI/Q2FycmllciByZXF1aXJlZCBidXQgbm90IGRldGVjdGVkLlxuIik7CisjaWZu ZGVmIE5PSElOVFMKKwkgICAgaWYgKCFoaW50cykKKwkgICAgICByZXR1cm4oMCk7CisJICAgIHBy aW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCSAgICBwcmlu dGYoIiBIaW50OiBUbyBDT05ORUNUIHRvIGEgc2VyaWFsIGRldmljZSB0aGF0XG4iKTsKKwkgICAg cHJpbnRmKCIgaXMgbm90IHByZXNlbnRpbmcgdGhlIENhcnJpZXIgRGV0ZWN0IHNpZ25hbCxcbiIp OworCSAgICBwcmludGYoIiBmaXJzdCB0ZWxsIEMtS2VybWl0IHRvOlxuXG4iKTsKKwkgICAgcHJp bnRmKCIgICBTRVQgQ0FSUklFUi1XQVRDSCBPRkZcblxuIik7CisJICAgIHByaW50ZigiKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7CisjZW5kaWYgLyogTk9ISU5UUyAq LworCSAgICBnb3RvIGNvbnJldDA7CisJfQorCWRlYnVnKEYxMDAsIkNPTk5FQ1QgdHRnbWRtIG9r IiwiIiwwKTsKKyAgICB9CisjaWZuZGVmIE5PQ1NFVFMKKy8qIFNldCB1cCBjaGFyYWN0ZXIgc2V0 IHRyYW5zbGF0aW9ucyAqLworCisgICAgdW5pY29kZSA9IDA7CQkJLyogQXNzdW1lIFVuaWNvZGUg d29uJ3QgYmUgaW52b2x2ZWQgKi8KKyAgICB0Y3MgPSAwOwkJCQkvKiAiVHJhbnNmZXIiIG9yICJP dGhlciIgY2hhcnNldCAqLworICAgIHN4byA9IHJ4byA9IE5VTEw7CQkJLyogSW5pdGlhbGl6ZSBi eXRlLXRvLWJ5dGUgZnVuY3Rpb25zICovCisgICAgc3hpID0gcnhpID0gTlVMTDsKKyAgICBpZiAo dGNzciAhPSB0Y3NsKSB7CQkJLyogUmVtb3RlIGFuZCBsb2NhbCBzZXRzIGRpZmZlci4uLiAqLwor I2lmZGVmIFVOSUNPREUKKwlpZiAodGNzciA9PSBGQ19VVEY4IHx8CQkvKiBSZW1vdGUgY2hhcnNl dCBpcyBVVEYtOCAqLworCSAgICB0Y3NsID09IEZDX1VURjgpIHsJCS8qIG9yIGxvY2FsIG9uZSBp cy4gKi8KKwkgICAgeHVmID0geGxfdWZjW3Rjc2xdOwkJLyogSW5jb21pbmcgVW5pY29kZSB0byBs b2NhbCAqLworCSAgICBpZiAoeHVmIHx8IHRjc2wgPT0gRkNfVVRGOCkgeworCQl0Y3MgPSAodGNz ciA9PSBGQ19VVEY4KSA/IHRjc2wgOiB0Y3NyOyAvKiBUaGUgIm90aGVyIiBzZXQgKi8KKwkJeGZ1 ID0geGxfZmN1W3Rjc107CS8qIExvY2FsIGJ5dGUgdG8gcmVtb3RlIFVuaWNvZGUgKi8KKwkJaWYg KHhmdSkKKwkJICB1bmljb2RlID0gKHRjc3IgPT0gRkNfVVRGOCkgPyAxIDogMjsKKwkgICAgfQor CSAgICB0Y3NzaXplID0gZmNzaW5mb1t0Y3NdLnNpemU7IC8qIFNpemUgb2Ygb3RoZXIgY2hhcmFj dGVyIHNldC4gKi8KKwl9IGVsc2UgeworI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkgICAgdGNzID0g Z2V0dGNzKHRjc3IsdGNzbCk7CS8qIEdldCBpbnRlcm1lZGlhdGUgc2V0LiAqLworCSAgICBzeG8g PSB4bHNbdGNzXVt0Y3NsXTsJLyogdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KKwkgICAgcnhvID0g eGxyW3Rjc11bdGNzcl07CS8qIHBvaW50ZXJzIGZvciBvdXRwdXQgZnVuY3Rpb25zICovCisJICAg IHN4aSA9IHhsc1t0Y3NdW3Rjc3JdOwkvKiBhbmQgZm9yIGlucHV0IGZ1bmN0aW9ucy4gKi8KKwkg ICAgcnhpID0geGxyW3Rjc11bdGNzbF07CisjaWZkZWYgVU5JQ09ERQorCX0KKyNlbmRpZiAvKiBV TklDT0RFICovCisgICAgfQorLyoKKyAgVGhpcyBpcyB0byBwcmV2ZW50IHVzZSBvZiB6bXN0dWZm KCkgYW5kIHpkc3R1ZmYoKSBieSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMuCisgIFRoZXkgb25seSB3 b3JrIHdpdGggZGlzayBpL28sIG5vdCB3aXRoIGNvbW11bmljYXRpb24gaS9vLiAgTHVja2lseSBS dXNzaWFuCisgIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBkb24ndCBkbyBhbnkgc3R1ZmZpbmcuLi4K KyovCisgICAgbGFuZ3N2ID0gbGFuZ3VhZ2U7CisjaWZuZGVmIE5PQ1lSSUwKKyAgICBpZiAobGFu Z3VhZ2UgIT0gTF9SVVNTSUFOKQorI2VuZGlmIC8qIE5PQ1lSSUwgKi8KKyAgICAgIGxhbmd1YWdl ID0gTF9VU0FTQ0lJOworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZykgeworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgdGNzIiwiIix0Y3MpOworCWRlYnVnKEYxMDEs IkNPTk5FQ1QgdGNzbCIsIiIsdGNzbCk7CisJZGVidWcoRjEwMSwiQ09OTkVDVCB0Y3NyIiwiIix0 Y3NyKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGZjc2luZm9bdGNzbF0uc2l6ZSIsIiIsZmNzaW5m b1t0Y3NsXS5zaXplKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIGZjc2luZm9bdGNzcl0uc2l6ZSIs IiIsZmNzaW5mb1t0Y3NyXS5zaXplKTsKKwlkZWJ1ZyhGMTAxLCJDT05ORUNUIHVuaWNvZGUiLCIi LHVuaWNvZGUpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworI2lmZGVmIENLX1hZWgorI2lmbmRlZiBYWVpfSU5URVJOQUwKKyAgICB7CisJZXh0ZXJu IGludCBiaW5hcnk7CQkvKiBTZWUgYWJvdXQgWk1PREVNIGF1dG9kb3dubG9hZHMgKi8KKwljaGFy ICogczsKKwlzID0gYmluYXJ5ID8gcHRhYltQUk9UT19aXS5wX2JfcmNtZCA6IHB0YWJbUFJPVE9f Wl0ucF90X3JjbWQ7CisJaWYgKCFzKSBzID0gIiI7CisJem1kbG9rID0gKCpzICE9IE5VTCk7CQkv KiBPSyBpZiB3ZSBoYXZlIGV4dGVybmFsIGNvbW1hbmRzICovCisgICAgfQorI2VuZGlmIC8qIFhZ Wl9JTlRFUk5BTCAqLworI2VuZGlmIC8qIENLX1hZWiAqLworCisjaWZuZGVmIE5PRVNDU0VRCisv KgorICBXZSBuZWVkIHRvIGFjdGl2YXRlIHRoZSBlc2NhcGUtc2VxdWVuY2UgcmVjb2duaXRpb24g ZmVhdHVyZSB3aGVuOgorICAgKGEpIHRyYW5zbGF0aW9uIGlzIGVsZWN0ZWQsIEFORAorICAgKGIp IHRoZSBsb2NhbCBhbmQvb3IgcmVtb3RlIHNldCBpcyBhIDctYml0IHNldCBvdGhlciB0aGFuIFVT IEFTQ0lJLgorICBPcjoKKyAgIFNFVCBURVJNSU5BTCBBUEMgaXMgbm90IE9GRiAoaGFuZGxlZCBp biB0aGUgbmV4dCBzdGF0ZW1lbnQpLgorKi8KKyAgICBlc2NzZXEgPSAodGNzICE9IFRDX1RSQU5T UCkgJiYJLyogTm90IHRyYW5zcGFyZW50ICovCisgICAgICAoZmNzaW5mb1t0Y3NsXS5zaXplID09 IDEyOCB8fCBmY3NpbmZvW3Rjc3JdLnNpemUgPT0gMTI4KSAmJiAvKiA3IGJpdHMgKi8KKwkoZmNz aW5mb1t0Y3NsXS5jb2RlICE9IEZDX1VTQVNDSUkpOyAvKiBCdXQgbm90IEFTQ0lJICovCisjZW5k aWYgLyogTk9FU0NTRVEgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZm5kZWYgTk9FU0NT RVEKKyNpZmRlZiBDS19BUEMKKyAgICBlc2NzZXEgPSBlc2NzZXEgfHwgKGFwY3N0YXR1cyAmIEFQ Q19PTik7CisgICAgYXBjYWN0aXZlID0gMDsJCQkvKiBBbiBBUEMgY29tbWFuZCBpcyBub3QgYWN0 aXZlICovCisgICAgYXBjbGVuZ3RoID0gMDsJCQkvKiAuLi4gKi8KKyNlbmRpZiAvKiBDS19BUEMg Ki8KKyAgICBpbmVzYyA9IEVTX05PUk1BTDsJCQkvKiBJbml0aWFsIHN0YXRlIG9mIHJlY29nbml6 ZXIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGVzY3NlcSIsIiIsZXNjc2VxKTsKKyNlbmRp ZiAvKiBOT0VTQ1NFUSAqLworCisgICAgcGFyZW50X2lkID0gZ2V0cGlkKCk7CQkvKiBHZXQgcGFy ZW50J3MgcGlkIGZvciBzaWduYWxsaW5nICovCisgICAgZGVidWcoRjEwMSwiQ09OTkVDVCBwYXJl bnQgcGlkIiwiIixwYXJlbnRfaWQpOworCisgICAgaWYgKHhwaXBlWzBdID4gLTEpCQkJLyogSWYg b2xkIHBpcGUgaGFuZ2luZyBhcm91bmQsIGNsb3NlICovCisgICAgICBjbG9zZSh4cGlwZVswXSk7 CisgICAgeHBpcGVbMF0gPSAtMTsKKyAgICBpZiAoeHBpcGVbMV0gPiAtMSkKKyAgICAgIGNsb3Nl KHhwaXBlWzFdKTsKKyAgICB4cGlwZVsxXSA9IC0xOworICAgIGdvdGVyciA9IDA7CQkJCS8qIEVy cm9yIGZsYWcgZm9yIHBpcGUgJiBmb3JrICovCisgICAgaWYgKHBpcGUoeHBpcGUpICE9IDApIHsJ CS8qIENyZWF0ZSBuZXcgcGlwZSB0byBwYXNzIGluZm8gKi8KKwlwZXJyb3IoIkNhbid0IG1ha2Ug cGlwZSIpOwkvKiBiZXR3ZWVuIGZvcmtzLiAqLworCWRlYnVnKEYxMDEsIkNPTk5FQ1QgcGlwZSBl cnJvciIsIiIsZXJybm8pOworCWdvdGVyciA9IDE7CisgICAgfSBlbHNlCisjaWZkZWYgQkVPU09S QkVCT1gKKyAgICB7CisgICAgICAgIHBpZCA9IHNwYXduX3RocmVhZChjb25jbGQsICJMb3dlciBG b3JrIiwgQl9OT1JNQUxfUFJJT1JJVFksIE5VTEwpOworICAgICAgICByZXN1bWVfdGhyZWFkKHBp ZCk7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gKFBJRF9UKSAtMSkg eyAvKiBQaXBlIE9LLCBtYWtlIHBvcnQgZm9yay4gKi8KKwlwZXJyb3IoIkNhbid0IG1ha2UgcG9y dCBmb3JrIik7CisJZGVidWcoRjEwMSwiQ09OTkVDVCBmb3JrIGVycm9yIiwiIixlcnJubyk7CisJ Z290ZXJyID0gMTsKKyAgICB9CisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKyAgICBkZWJ1ZyhG MTAxLCJDT05ORUNUIGNyZWF0ZWQgZm9yaywgcGlkIiwiIixwaWQpOworICAgIGlmIChnb3RlcnIp IHsJCQkvKiBGYWlsZWQgdG8gbWFrZSBwaXBlIG9yIGZvcmsgKi8KKwljb25yZXMoKTsJCQkvKiBS ZXNldCB0aGUgY29uc29sZS4gKi8KKwlpZiAobXNnZmxnKSB7CisJICAgIHByaW50ZigiXHJcbkNv bW11bmljYXRpb25zIGRpc2Nvbm5lY3QgKEJhY2sgYXQgJXMpXHJcbiIsCisJCSAgICpteWhvc3Qg PworCQkgICBteWhvc3QgOgorI2lmZGVmIFVOSVgKKwkJICAgImxvY2FsIFVOSVggc3lzdGVtIgor I2Vsc2UKKwkJICAgImxvY2FsIHN5c3RlbSIKKyNlbmRpZiAvKiBVTklYICovCisJCSAgICk7CisJ fQorCXByaW50ZigiXG4iKTsKKwl3aGF0ID0gV19OT1RISU5HOwkJLyogU28gY29uc29sZSBtb2Rl cyBhcmUgc2V0IHJpZ2h0LiAqLworI2lmbmRlZiBOT0NTRVRTCisJbGFuZ3VhZ2UgPSBsYW5nc3Y7 CQkvKiBSZXN0b3JlIGxhbmd1YWdlICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCXBhcmVudF9p ZCA9IChQSURfVCkgMDsJCS8qIENsZWFuIHVwICovCisJZ290byBjb25yZXQxOworICAgIH0KKyAg ICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGZvcmsgcGlkIiwiIixwaWQpOworCisvKiBVcHBlciBmb3Jr IChLRVlCIGZvcmspIHJlYWRzIGtleXN0cm9rZXMgYW5kIHNlbmRzIHRoZW0gb3V0LiAqLworCisg ICAgaWYgKHBpZCkgewkJCQkvKiBwaWQgIT0gMCwgc28gSSBhbSB0aGUgdXBwZXIgZm9yay4gKi8K Ky8qCisgIEJlZm9yZSBkb2luZyBhbnl0aGluZyBzaWduaWZpY2FudCwgdGhlIGNoaWxkIGZvcmsg bXVzdCB3YWl0IGZvciBhIGdvLWFoZWFkCisgIGNoYXJhY3RlciBmcm9tIHhwaXBlWzBdLiAgQmVm b3JlIHN0YXJ0aW5nIHRvIHdhaXQsIHdlIGhhdmUgZW5vdWdoIHRpbWUgdG8KKyAgY2xlYXIgYnVm ZmVycyBhbmQgc2V0IHVwIHRoZSBzaWduYWwgaGFuZGxlci4gIFdoZW4gZG9uZSB3aXRoIHRoaXMs IHdlIHdpbGwKKyAgYWxsb3cgdGhlIGNoaWxkIHRvIGNvbnRpbnVlIGJ5IHNhdGlzZnlpbmcgaXRz IHBlbmRpbmcgcmVhZC4KKworICBSZW1lbWJlciB0aGUgY2hpbGQgYW5kIHBhcmVudCBoYXZlIHNl cGFyYXRlIGFkZHJlc3Mgc3BhY2UuICBUaGUgY2hpbGQgaGFzCisgIGl0cyBvd24gY29weSBvZiBp bnB1dCBidWZmZXJzLCBzbyB3ZSBtdXN0IGNsZWFyIHRoZSBpbnB1dCBidWZmZXJzIGluIHRoZQor ICBwYXJlbnQuICBPdGhlcndpc2Ugc3RyYW5nZSBlZmZlY3RzIG1heSBvY2N1ciwgbGlrZSBjaHVu a3Mgb2YgY2hhcmFjdGVycworICByZXBlYXRlZGx5IGVjaG9lZCBvbiB0ZXJtaW5hbCBzY3JlZW4u ICBUaGUgY2hpbGQgcHJvY2VzcyBpcyBkZXNpZ25lZCB0bworICBlbXB0eSBpdHMgaW5wdXQgYnVm ZmVycyBieSByZWFkaW5nIGFsbCBhdmFpbGFibGUgY2hhcmFjdGVycyBhbmQgZWl0aGVyCisgIGVj aG9pbmcgdGhlbSBvbiB0aGUgdGVybWluYWwgc2NyZWVuIG9yIHNhdmluZyB0aGVtIGZvciBmdXR1 cmUgdXNlIGluIHRoZQorICBwYXJlbnQuICBUaGUgbGF0dGVyIGNhc2UgaGFwcGVucyBkdXJpbmcg QVBDIHByb2Nlc3NpbmcgLSBzZWUgdGhlIGNvZGUgYXJvdW5kCisgIENFVl9BUEMgb2NjdXJyZW5j ZXMgdG8gc2VlIGhvdyB0aGUgY2hpbGQgcGFzc2VzIGl0cyBpYnVmIGV0YyB0byBwYXJlbnQgdmlh CisgIHhwaXBlLCBmb3IgcHJlc2VydmF0aW9uIHVudGlsIHRoZSBuZXh0IGVudHJ5IHRvIHRoaXMg bW9kdWxlLCB0byBlbnN1cmUgdGhhdAorICBubyBjaGFyYWN0ZXJzIGFyZSBsb3N0IGJldHdlZW4g Q09OTkVDVCBzZXNzaW9ucy4KKyovCisKKy8qCisgIFRoaXMgb25lIG5lZWRzIGEgYml0IG9mIGV4 dHJhIGV4cGxhbmF0aW9uLi4uICBJbiBhZGRpdGlvbiB0byB0aGUgQ09OTkVDVAorICBtb2R1bGUn cyBvd24gYnVmZmVycywgd2hpY2ggYXJlIGNvbW11bmljYXRlZCBhbmQgc3luY2hyb25pemVkIHZp YSB4cGlwZSwKKyAgdGhlIGxvdy1sZXZlbCBVTklYIGNvbW11bmljYXRpb24gcm91dGluZXMgKHR0 aW5jLCB0dHhpbiwgZXRjKSBhcmUgYWxzbworICBidWZmZXJlZCwgc3RhdGljYWxseSwgaW4gdGhl IGNrdXRpby5jIG1vZHVsZS4gIEJ1dCB3aGVuIHRoZSB0d28gQ09OTkVDVAorICBmb3JrcyBzcGxp dCBvZmYsIHRoZSBsb3dlciBmb3JrIGlzIHVwZGF0aW5nIHRoaXMgYnVmZmVyJ3MgcG9pbnRlcnMg YW5kCisgIGNvdW50cywgYnV0IHRoZSB1cHBlciBmb3JrIG5ldmVyIGZpbmRzIG91dCBhYm91dCBp dCBhbmQgc3RpbGwgaGFzIHRoZSBvbGQKKyAgb25lcy4gIFRoZSBmb2xsb3dpbmcgVU5JWC1zcGVj aWZpYyBjYWxsIHRvIHRoZSBja3V0aW8uYyBtb2R1bGUgdGFrZXMgY2FyZQorICBvZiB0aGlzLi4u ICBXaXRob3V0IGl0LCB3ZSBnZXQgZHVhbCBlY2hvaW5nIG9mIGluY29taW5nIGNoYXJhY3RlcnMu CisqLworCXR0Zmx1eCgpOworLyoKKyAgQXQgdGhpcyBwb2ludCwgcGVyaGFwcyB5b3UgYXJlIHdv bmRlcmluZyB3aHkgd2UgdXNlIGZvcmtzIGF0IGFsbC4gIEl0IGlzCisgIHNpbXBseSBiZWNhdXNl IHRoZXJlIGlzIG5vIG90aGVyIG1ldGhvZCBwb3J0YWJsZSBhbW9uZyBhbGwgVU5JWCB2YXJpYXRp b25zLgorICBOb3QgdGhyZWFkcywgbm90IHNlbGVjdCgpLCAuLi4gIChZZXMsIHNlbGVjdCgpIGlz IG1vcmUgY29tbW9uIG5vdzsgaXQgbWlnaHQKKyAgYWN0dWFsbHkgYmUgd29ydGggd3JpdGluZyBh IHZhcmlhdGlvbiBvZiB0aGlzIG1vZHVsZSB0aGF0IHdvcmtzIGxpa2UgQlNECisgIFRlbG5ldCwg b25lIGZvcmssIGRyaXZlbiBieSBzZWxlY3QoKSkuCisqLworCWlicCA9IGlidWY7CQkJLyogQ2xl YXIgaWJ1ZltdLiAqLworCWliYyA9IDA7CQkJLyogQ2hpbGQgbm93IGhhcyBpdHMgb3duIGNvcHkg Ki8KKwlzaWduYWwoQ0tfRk9SS19TSUcsIHBpcGVpbnQpOwkvKiBIYW5kbGVyIGZvciBtZXNzYWdl cyBmcm9tIGNoaWxkLiAqLworCXdyaXRlKHhwaXBlWzFdLCBpYnVmLCAxKTsJLyogQWxsb3cgY2hp bGQgdG8gcHJvY2VlZCAqLworCWNsb3NlKHhwaXBlWzFdKTsgeHBpcGVbMV0gPSAtMTsgLyogUGFy ZW50IC0gcHJldmVudCBmdXR1cmUgd3JpdGVzICovCisKKwl3aGF0ID0gV19DT05ORUNUOwkJLyog S2VlcCB0cmFjayBvZiB3aGF0IHdlJ3JlIGRvaW5nICovCisJYWN0aXZlID0gMTsKKwlkZWJ1ZyhG MTAxLCJDT05ORUNUIGtleWJvYXJkIGZvcmsgZHVwbGV4IiwiIixkdXBsZXgpOworLyoKKyAgQ2F0 Y2ggY29tbXVuaWNhdGlvbiBlcnJvcnMgb3IgbW9kZSBjaGFuZ2VzIGluIGxvd2VyIGZvcmsuCisK KyAgTm90ZTogU29tZSBDIGNvbXBpbGVycyAoZS5nLiBDcmF5IFVOSUNPUykgaW50ZXJwcmV0IHRo ZSBBTlNJIEMgc3RhbmRhcmQKKyAgYWJvdXQgc2V0am1wKCkgaW4gYSB3YXkgdGhhdCBkaXNhbGxv d3MgY29uc3RydWN0aW9ucyBsaWtlOgorCisgICAgICAgIGlmICgodmFyID0gW3NpZ11zZXRqbXAo ZW52KSkgPT0gMCkgLi4uCisKKyAgd2hpY2ggcHJldmVudHMgdGhlIHZhbHVlIHJldHVybmVkIGJ5 IGNrbG9uZ2ptcCgpIGZyb20gYmVpbmcgdXNlZCBhdCBhbGwuCisgIFNvIHRoZSBzaWduYWwgaGFu ZGxlcnMgc2V0IGEgZ2xvYmFsIHZhcmlhYmxlLCBzanZhbCwgaW5zdGVhZC4KKyovCisJaWYgKAor I2lmZGVmIENLX1BPU0lYX1NJRworCSAgICBzaWdzZXRqbXAoY29uX2VudiwxKQorI2Vsc2UKKwkg ICAgc2V0am1wKGNvbl9lbnYpCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJICAgID09IDAp IHsJCQkvKiBOb3JtYWwgZW50cnkuLi4gKi8KKwkgICAgamJzZXQgPSAxOwkJCS8qIE5vdyB3ZSBo YXZlIGEgbG9uZ2ptcCBidWZmZXIgKi8KKwkgICAgc2p2YWwgPSBDRVZfTk87CQkvKiBJbml0aWFs aXplIHNldGptcCByZXR1cm4gY29kZS4gKi8KKworCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIHNl dGptcCBub3JtYWwgZW50cnkiLCIiLHNqdmFsKTsKKworI2lmZGVmIEFOWVgyNQorCSAgICBpZiAo bmV0d29yayAmJiAobmV0dHlwZSA9PSBORVRfU1gyNSB8fCBuZXR0eXBlID09IE5FVF9JWDI1KSkg eworCQlvYnVmbCA9IDA7CisJCWJ6ZXJvICh4MjVvYnVmLHNpemVvZih4MjVvYnVmKSk7CisJICAg IH0KKyNlbmRpZiAvKiBBTllYMjUgKi8KKy8qCisgIEhlcmUgaXMgdGhlIGJpZyBsb29wIHRoYXQg Z2V0cyBjaGFyYWN0ZXJzIGZyb20gdGhlIGtleWJvYXJkIGFuZCBzZW5kcyB0aGVtCisgIG91dCB0 aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UuICBUaGVyZSBhcmUgdHdvIGNvbXBvbmVudHMgdG8gdGhl IGNvbW11bmljYXRpb24KKyAgcGF0aDogdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUga2V5Ym9hcmQg dG8gQy1LZXJtaXQsIGFuZCBmcm9tIEMtS2VybWl0IHRvCisgIHRoZSByZW1vdGUgY29tcHV0ZXIu ICBUaGUgdHJlYXRtZW50IG9mIHRoZSA4dGggYml0IG9mIGtleWJvYXJkIGNoYXJhY3RlcnMKKyAg aXMgZ292ZXJuZWQgYnkgU0VUIENPTU1BTkQgQllURVNJWkUgKGNtZG1zaykuICBUaGUgdHJlYXRt ZW50IG9mIHRoZSA4dGggYml0CisgIG9mIGNoYXJhY3RlcnMgc2VudCB0byB0aGUgcmVtb3RlIGlz IGdvdmVybmVkIGJ5IFNFVCBURVJNSU5BTCBCWVRFU0laRQorICAoY21hc2spLiAgIFRoaXMgZGlz dGluY3Rpb24gd2FzIGludHJvZHVjZWQgaW4gZWRpdCA1QSgxNjQpLgorKi8KKwkgICAgd2hpbGUg KGFjdGl2ZSkgeworI2lmbmRlZiBOT1NFVEtFWQorCQlpZiAoa21wdHIpIHsJCS8qIEhhdmUgY3Vy cmVudCBtYWNybz8gKi8KKwkJICAgIGRlYnVnKEYxMDAsIkNPTk5FQ1Qga21wdHIgbm9uIE5VTEwi LCIiLDApOworCQkgICAgaWYgKChjID0gKENIQVIpICprbXB0cisrKSA9PSBOVUwpIHsgLyogR2V0 IGNoYXIgZnJvbSBpdCAqLworCQkJa21wdHIgPSBOVUxMOwkvKiBJZiBubyBtb3JlIGNoYXJzLCAg Ki8KKwkJCWRlYnVnKEYxMDAsIkNPTk5FQ1QgbWFjcm8gZW1wdHksIGNvbnRpbnVpbmciLCIiLDAp OworCQkJY29udGludWU7CS8qIHJlc2V0IHBvaW50ZXIgYW5kIGNvbnRpbnVlICovCisJCSAgICB9 CisJCSAgICBkZWJ1ZyhGMDAwLCJDT05ORUNUIGNoYXIgZnJvbSBtYWNybyIsIiIsYyk7CisJCX0g ZWxzZQkJCS8qIE5vIG1hY3JvLi4uICovCisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKwkJICBjID0g Q09OR0tTKCk7CQkvKiBSZWFkIGZyb20ga2V5Ym9hcmQgKi8KKworI2lmZGVmIENPTU1FTlQKKy8q IHRvbyBtdWNoLi4uICovCisJCWRlYnVnKEYxMDEsIkNPTk5FQ1QgKiogS0VZQiIsIiIsYyk7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgIGlmIChjID09IC0xKSB7CQkvKiBJ ZiByZWFkKCkgZ290IGFuIGVycm9yLi4uICovCisJCSAgICBkZWJ1ZyhGMTAxLCJDT05ORUNUIGtl eWJvYXJkIHJlYWQgZXJybm8iLCIiLGVycm5vKTsKKyNpZmRlZiBDT01NRU5UCisvKgorIFRoaXMg c2VlbXMgdG8gY2F1c2UgcHJvYmxlbXMuICBJZiByZWFkKCkgcmV0dXJucyAtMSwgdGhlIHNpZ25h bCBoYXMgYWxyZWFkeQorIGJlZW4gZGVsaXZlcmVkLCBhbmQgbm90aGluZyB3aWxsIHdha2UgdXAg dGhlIHBhdXNlKCkuCisqLworCQkgICAgcGF1c2UoKTsJCS8qIFdhaXQgZm9yIHRyYW5zbWl0dGVy IHRvIGZpbmlzaC4gKi8KKyNlbHNlCisjaWZkZWYgQTk4NgorLyoKKyAgT24gQWx0b3MgbWFjaGlu ZXMgd2l0aCBYZW5peCAzLjAsIHByZXNzaW5nIERFTCBpbiBjb25uZWN0IG1vZGUgYnJpbmdzIHVz CisgIGhlcmUgKHJlYXNvbiB1bmtub3duKS4gIFRoZSBjb25zb2xlIGxpbmUgZGlzY2lwbGluZSBh dCB0aGlzIHBvaW50IGhhcworICBpbnRyID0gXkMuICBUaGUgY29tbXVuaWNhdGlvbnMgdHR5IGhh cyBpbnRyID0gREVMIGJ1dCB3ZSBnZXQgaGVyZSBhZnRlcgorICBwcmVzc2luZyBERUwgb24gdGhl IGtleWJvYXJkLCBldmVuIHdoZW4gdGhlIHJlbW90ZSBzeXN0ZW0gaGFzIGJlZW4gc2V0IG5vdAor ICB0byBlY2hvLiAgV2l0aCBBOTg2IGRlZmluZWQsIHdlIHN0YXkgaW4gdGhlIHJlYWQgbG9vcCBh bmQgYmVlcCBvbmx5IGlmIHRoZQorICBvZmZlbmRpbmcgY2hhcmFjdGVyIGlzIG5vdCBERUwuCisq LworCQkgICAgaWYgKChjICYgMTI3KSAhPSAxMjcpIGNvbm9jKEJFTCk7CisjZWxzZQorI2lmZGVm IEVJTlRSCisvKgorICAgVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IHRoZSBvdGhlciBmb3JrIHNpZ25h bGxpbmcgdGhpcyBvbmUgYWJvdXQKKyAgIGFuIGVjaG9pbmcgY2hhbmdlIGR1cmluZyBURUxORVQg bmVnb3RpYXRpb25zLgorKi8KKwkJICAgIGlmIChlcnJubyA9PSBFSU5UUikKKwkJICAgICAgY29u dGludWU7CisjZW5kaWYgLyogRUlOVFIgKi8KKwkJICAgIGNvbm9jKEJFTCk7CQkvKiBPdGhlcndp c2UsIGJlZXAgKi8KKwkJICAgIGFjdGl2ZSA9IDA7CQkvKiBhbmQgdGVybWluYXRlIHRoZSByZWFk IGxvb3AgKi8KKwkJICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIEE5ODYgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisJCX0KKwkJYyAmPSBjbWRtc2s7CQkvKiBEbyBhbnkgcmVxdWVzdGVkIG1hc2tp bmcgKi8KKyNpZm5kZWYgTk9TRVRLRVkKKy8qCisgIE5vdGU6IGttcHRyIGlzIE5VTEwgaWYgd2Ug Z290IGNoYXJhY3RlciBjIGZyb20gdGhlIGtleWJvYXJkLCBhbmQgaXQgaXMKKyAgbm90IE5VTEwg aWYgaXQgY2FtZSBmcm9tIGEgbWFjcm8uICBJbiB0aGUgbGF0dGVyIGNhc2UsIHdlIG11c3QgYXZv aWQKKyAgZXhwYW5kaW5nIGl0IGFnYWluLgorKi8KKwkJaWYgKCFrbXB0ciAmJiBtYWNyb3RhYltj XSkgeyAvKiBNYWNybyBkZWZpbml0aW9uIGZvciBjPyAqLworCQkgICAga21wdHIgPSBtYWNyb3Rh YltjXTsgICAgIC8qIFllcywgc2V0IHVwIG1hY3JvIHBvaW50ZXIgKi8KKwkJICAgIGNvbnRpbnVl OwkJICAgICAvKiBhbmQgcmVzdGFydCB0aGUgbG9vcCwgKi8KKwkJfSBlbHNlIGMgPSBrZXltYXBb Y107CSAgICAgLyogZWxzZSB1c2Ugc2luZ2xlLWNoYXIga2V5bWFwICovCisjZW5kaWYgLyogTk9T RVRLRVkgKi8KKwkJaWYgKAorI2lmbmRlZiBOT1NFVEtFWQorCQkgICAgIWttcHRyICYmCisjZW5k aWYgLyogTk9TRVRLRVkgKi8KKwkJICAgICh0dF9lc2NhcGUgJiYgKGMgJiAweGZmKSA9PSBlc2Nh cGUpKSB7IC8qIEVzY2FwZSBjaGFyPyAqLworCQkgICAgZGVidWcoRjAwMCwiQ09OTkVDVCBnb3Qg ZXNjYXBlIiwiIixjKTsKKwkJICAgIGMgPSBDT05HS1MoKSAmIDAxNzc7IC8qIEdvdCBlc2MsIGdl dCBpdHMgYXJnICovCisJCSAgICAvKiBObyBrZXkgbWFwcGluZyBoZXJlICovCisJCSAgICBkb2Vz YygoY2hhcikgYyk7CS8qIE5vdyBwcm9jZXNzIGl0ICovCisKKwkJfSBlbHNlIHsJCS8qIEl0J3Mg bm90IHRoZSBlc2NhcGUgY2hhcmFjdGVyICovCisJCSAgICBjc2F2ZSA9IGM7CQkvKiBTYXZlIGl0 IGJlZm9yZSB0cmFuc2xhdGlvbiAqLworCQkJCQkvKiBmb3IgbG9jYWwgZWNob2luZy4gKi8KKyNp Zm5kZWYgTk9DU0VUUworCQkgICAgaWYgKGluZXNjID09IEVTX05PUk1BTCkgeyAvKiBJZiBub3Qg aW5zaWRlIGVzY2FwZSBzZXEuLiAqLworCQkJLyogVHJhbnNsYXRlIGNoYXJhY3RlciBzZXRzICov CisjaWZkZWYgVU5JQ09ERQorCQkJaW50IHg7CisJCQlDSEFSIGNoOworCQkJY2ggPSBjOworCQkJ aWYgKHVuaWNvZGUgPT0gMSkgeyAvKiBSZW1vdGUgaXMgVVRGLTggKi8KKwkJCSAgICBvdXR4Y291 bnQgPSBiX3RvX3UoY2gsb3V0eGJ1ZixPVVRYQlVGU0laLHRjc3NpemUpOworCQkJICAgIG91dHhi dWZbb3V0eGNvdW50XSA9IE5VTDsKKwkJCX0gZWxzZSBpZiAodW5pY29kZSA9PSAyKSB7IC8qIExv Y2FsIGlzIFVURi04ICovCisJCQkgICAgeCA9IHVfdG9fYihjaCk7IC8qIFNvIHRyYW5zbGF0ZSB0 byByZW1vdGUgYnl0ZSAqLworCQkJICAgIGlmICh4IDwgMCkKKwkJCSAgICAgIGNvbnRpbnVlOwor CQkJICAgIG91dHhidWZbMF0gPSAodW5zaWduZWQpKHggJiAweGZmKTsKKwkJCSAgICBvdXR4Y291 bnQgPSAxOworCQkJICAgIG91dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKKwkJCX0gZWxzZSB7Cisj ZW5kaWYgLyogVU5JQ09ERSAqLworCQkJICAgIC8qIExvY2FsLXRvLWludGVybWVkaWF0ZSAqLwor CQkJICAgIGlmIChzeG8pIGMgPSAoKnN4bykoKGNoYXIpYyk7CisJCQkgICAgLyogSW50ZXJtZWRp YXRlLXRvLXJlbW90ZSAqLworCQkJICAgIGlmIChyeG8pIGMgPSAoKnJ4bykoKGNoYXIpYyk7CisJ CQkgICAgb3V0eGJ1ZlswXSA9IGM7CisJCQkgICAgb3V0eGNvdW50ID0gMTsKKwkJCSAgICBvdXR4 YnVmW291dHhjb3VudF0gPSBOVUw7CisjaWZkZWYgVU5JQ09ERQorCQkJfQorI2VuZGlmIC8qIFVO SUNPREUgKi8KKwkJICAgIH0KKwkJICAgIGlmIChlc2NzZXEpCisJCSAgICAgIGFwY3JjID0gY2hr YWVzKChjaGFyKWMpOworI2Vsc2UKKwkJICAgIG91dHhidWZbMF0gPSBjOworCQkgICAgb3V0eGNv dW50ID0gMTsKKwkJICAgIG91dHhidWZbb3V0eGNvdW50XSA9IE5VTDsKKyNlbmRpZiAvKiBOT0NT RVRTICovCisJCSAgICBmb3IgKGkgPSAwOyBpIDwgb3V0eGNvdW50OyBpKyspIHsKKwkJCWMgPSBv dXR4YnVmW2ldOworLyoKKyBJZiBTaGlmdC1Jbi9TaGlmdC1PdXQgaXMgc2VsZWN0ZWQgYW5kIHdl IGhhdmUgYSA3LWJpdCBjb25uZWN0aW9uLAorIGhhbmRsZSBzaGlmdGluZyBoZXJlLgorKi8KKwkJ CWlmIChzb3NpKSB7CS8qIFNoaWZ0LUluL091dCBzZWxlY3RlZD8gKi8KKwkJCSAgICBpZiAoY21h c2sgPT0gMDE3NykgeyAvKiBJbiA3LWJpdCBlbnZpcm9ubWVudD8gKi8KKwkJCQlpZiAoYyAmIDAy MDApIHsJLyogOC1iaXQgY2hhcmFjdGVyPyAqLworCQkJCSAgICBpZiAob3V0c2hpZnQgPT0gMCkg eyAvKiBJZiBub3Qgc2hpZnRlZCwgKi8KKwkJCQkJdHRvYyhkb3BhcihTTykpOyAvKiBzaGlmdC4g Ki8KKwkJCQkJb3V0c2hpZnQgPSAxOworCQkJCSAgICB9CisJCQkJfSBlbHNlIHsKKwkJCQkgICAg aWYgKG91dHNoaWZ0ID09IDEpIHsgLyogNy1iaXQgY2hhcmFjdGVyICovCisJCQkJCXR0b2MoZG9w YXIoU0kpKTsgLyogSWYgc2hpZnRlZCwgKi8KKwkJCQkJb3V0c2hpZnQgPSAwOyAgICAvKiB1bnNo aWZ0LiAqLworCQkJCSAgICB9CisJCQkJfQorCQkJICAgIH0KKwkJCSAgICBpZiAoYyA9PSBTTykg b3V0c2hpZnQgPSAxOyAgIC8qIFVzZXIgdHlwZWQgU08gKi8KKwkJCSAgICBpZiAoYyA9PSBTSSkg b3V0c2hpZnQgPSAwOyAgIC8qIFVzZXIgdHlwZWQgU0kgKi8KKwkJCX0KKwkJCWMgJj0gY21hc2s7 CS8qIEFwcGx5IEtlcm1pdC10by1ob3N0IG1hc2sgbm93LiAqLworI2lmZGVmIFNVTlgyNQorCQkJ aWYgKG5ldHdvcmsgJiYgbmV0dHlwZSA9PSBORVRfU1gyNSkgeworCQkJICAgIGlmIChwYWRwYXJt c1tQQURfRUNIT10pIHsKKwkJCQlpZiAoZGVic2VzKQorCQkJCSAgY29ub2woZGJjaHIoYykpIDsK KwkJCQllbHNlCisJCQkJICBpZiAoKGMgIT0gcGFkcGFybXNbUEFEX0NIQVJfREVMRVRFX0NIQVJd KSAmJgorCQkJCSAgICAoYyAhPSBwYWRwYXJtc1tQQURfQlVGRkVSX0RFTEVURV9DSEFSXSkgJiYK KwkJCQkgICAgKGMgIT0gcGFkcGFybXNbUEFEX0JVRkZFUl9ESVNQTEFZX0NIQVJdKSkKKwkJCQkg ICAgY29ub2MoYykgOworCQkJCWlmIChzZXNsb2cgJiYgIXNlc3NmdCkKKwkJCQkgIGxvZ2NoYXIo Yyk7CisJCQkgICAgfQorCQkJICAgIGlmIChjID09IENSICYmIChwYWRwYXJtc1tQQURfTEZfQUZU RVJfQ1JdID09IDQgfHwKKwkJCQkJICAgIHBhZHBhcm1zW1BBRF9MRl9BRlRFUl9DUl0gPT0gNSkp IHsKKwkJCQlpZiAoZGVic2VzKQorCQkJCSAgY29ub2woZGJjaHIoTEYpKSA7CisJCQkJZWxzZQor CQkJCSAgY29ub2MoTEYpIDsKKwkJCQlpZiAoc2VzbG9nICYmICFzZXNzZnQpCisJCQkJICBsb2dj aGFyKExGKTsKKwkJCSAgICB9CisJCQkgICAgaWYgKGMgPT0gcGFkcGFybXNbUEFEX0JSRUFLX0NI QVJBQ1RFUl0pIHsKKwkJCQlicmVha2FjdCgpOworCQkJICAgIH0gZWxzZSBpZiAocGFkcGFybXNb UEFEX0RBVEFfRk9SV0FSRF9USU1FT1VUXSkgeworCQkJCXRvc2VuZCA9IDE7CisJCQkJeDI1b2J1 ZiBbb2J1ZmwrK10gPSBjOworCQkJICAgIH0gZWxzZSBpZiAoKChjID09IHBhZHBhcm1zW1BBRF9D SEFSX0RFTEVURV9DSEFSXSl8fAorCQkJCSAgICAgKGMgPT0gcGFkcGFybXNbUEFEX0JVRkZFUl9E RUxFVEVfQ0hBUl0pIHx8CisJCQkJICAgICAoYyA9PSBwYWRwYXJtc1tQQURfQlVGRkVSX0RJU1BM QVlfQ0hBUl0pKQorCQkJCSAgICAgICAmJiAocGFkcGFybXNbUEFEX0VESVRJTkddKSkgeworCQkJ CWlmIChjID09IHBhZHBhcm1zW1BBRF9DSEFSX0RFTEVURV9DSEFSXSkgeworCQkJCSAgICBpZiAo b2J1ZmwgPiAwKSB7CisJCQkJCWNvbm9sKCJcYiBcYiIpOyBvYnVmbC0tOworCQkJCSAgICB9IGVs c2Uge30KKwkJCQl9IGVsc2UgaWYKKwkJCQkgIChjID09IHBhZHBhcm1zW1BBRF9CVUZGRVJfREVM RVRFX0NIQVJdKSB7CisJCQkJICAgICAgY29ub2wgKCJcclxuUEFEIEJ1ZmZlciBEZWxldGVkXHJc biIpOworCQkJCSAgICAgIG9idWZsID0gMDsKKwkJCQl9IGVsc2UgaWYKKwkJCQkgIChjPT1wYWRw YXJtc1tQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUl0pIHsKKwkJCQkgICAgICBjb25vbCgiXHJcbiIp OworCQkJCSAgICAgIGNvbm9sKHgyNW9idWYpOworCQkJCSAgICAgIGNvbm9sKCJcclxuIik7CisJ CQkJfSBlbHNlIHt9CisJCQkgICAgfSBlbHNlIHsKKwkJCQl4MjVvYnVmIFtvYnVmbCsrXSA9IGM7 CisJCQkJaWYgKG9idWZsID09IE1BWE9YMjUpIHRvc2VuZCA9IDE7CisJCQkJZWxzZSBpZiAoYyA9 PSBDUikgdG9zZW5kID0gMTsKKwkJCSAgICB9CisJCQkgICAgaWYgKHRvc2VuZCkgeworCQkJCWlm ICh0dG9sKChDSEFSICopeDI1b2J1ZixvYnVmbCkgPCAwKSB7CisJCQkJICAgIHBlcnJvciAoIlxy XG5DYW4ndCBzZW5kIGNoYXJhY3RlcnMiKTsKKwkJCQkgICAgYWN0aXZlID0gMDsKKwkJCQl9IGVs c2UgeworCQkJCSAgICBiemVybyAoeDI1b2J1ZixzaXplb2YoeDI1b2J1ZikpOworCQkJCSAgICBv YnVmbCA9IDA7CisJCQkJICAgIHRvc2VuZCA9IDA7CisJCQkJfQorCQkJICAgIH0gZWxzZSB7fTsK KwkJCX0gZWxzZSB7CisjZW5kaWYgLyogU1VOWDI1ICovCisJCQkgICAgaWYgKGMgPT0gJ1wwMTUn KSB7IC8qIENhcnJpYWdlIFJldHVybiAqLworCQkJCWludCBzdHVmZiA9IC0xOworCQkJCWlmICh0 bmxtKSB7IC8qIFRFUk1JTkFMIE5FV0xJTkUgT04gKi8KKwkJCQkgICAgc3R1ZmYgPSBMRjsJLyog U3R1ZmYgTEYgKi8KKyNpZmRlZiBUTkNPREUKKwkJCQl9IGVsc2UgaWYgKG5ldHdvcmsgJiYgLyog VEVMTkVUIE5FV0xJTkUgKi8KKwkJCQkJICAgSVNfVEVMTkVUKCkpIHsKKwkJCQkgICAgc3dpdGNo ICghVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpID8KKwkJCQkJICAgIHRuX25sbSA6CisJCQkJCSAg ICB0bl9iX25sbQorCQkJCQkgICAgKSB7CisJCQkJICAgICAgY2FzZSBUTkxfQ1JMRjoKKwkJCQkJ c3R1ZmYgPSBMRjsKKwkJCQkJYnJlYWs7CisJCQkJICAgICAgY2FzZSBUTkxfQ1JOVUw6CisJCQkJ CXN0dWZmID0gTlVMOworCQkJCQlicmVhazsKKwkJCQkgICAgfQorI2VuZGlmIC8qIFROQ09ERSAq LworCQkJCX0KKwkJCQlpZiAoc3R1ZmYgPiAtMSkgeworCQkJCSAgICB0dG9jKGRvcGFyKCdcMDE1 JykpOyAvKiBTZW5kIENSICovCisJCQkJICAgIGlmIChkdXBsZXgpIGNvbm9jKCdcMDE1Jyk7IC8q IEVjaG8gQ1IgKi8KKwkJCQkgICAgYyA9IHN0dWZmOyAvKiBDaGFyIHRvIHN0dWZmICovCisJCQkJ ICAgIGNzYXZlID0gYzsKKwkJCQl9CisJCQkgICAgfQorI2lmZGVmIFROQ09ERQorLyogSWYgdXNl ciB0eXBlcyB0aGUgMHhmZiBjaGFyYWN0ZXIgKFRFTE5FVCBJQUMpLCBpdCBtdXN0IGJlIGRvdWJs ZWQuICovCisJCQkgICAgZWxzZQkvKiBOb3QgQ1IgKi8KKwkJCSAgICAgIGlmICgoZG9wYXIoKENI QVIpIGMpID09IElBQykgJiYgLyogSUFDICgweGZmKSAqLworCQkJCSAgbmV0d29yayAmJiBJU19U RUxORVQoKSkgeworCQkJCSAgLyogU2VuZCBvbmUgY29weSBub3cgKi8KKwkJCQkgIC8qIGFuZCB0 aGUgb3RoZXIgb25lIGp1c3QgYmVsb3cuICovCisJCQkJICB0dG9jKChjaGFyKUlBQyk7CisJCQkg ICAgICB9CisjZW5kaWYgLyogVE5DT0RFICovCisJCQkgICAgLyogU2VuZCB0aGUgY2hhcmFjdGVy ICovCisKKwkJCSAgICBpZiAodHRvYygoY2hhcilkb3BhcigoQ0hBUikgYykpID4gLTEpIHsKKwkJ CQlpZiAoZHVwbGV4KSB7CS8qIElmIGhhbGYgZHVwbGV4LCBtdXN0IGVjaG8gKi8KKwkJCQkgICAg aWYgKGRlYnNlcykKKwkJCQkgICAgICBjb25vbChkYmNocihjc2F2ZSkpOyAvKiBvcmlnaW5hbCBj aGFyICovCisJCQkJICAgIGVsc2UgLyogbm90IHRoZSB0cmFuc2xhdGVkIG9uZSAqLworCQkJCSAg ICAgIGNvbm9jKChjaGFyKWNzYXZlKTsKKwkJCQkgICAgaWYgKHNlc2xvZykgeyAvKiBBbmQgbWF5 YmUgbG9nIGl0IHRvbyAqLworCQkJCQljMiA9IGNzYXZlOworCQkJCQlpZiAoc2Vzc2Z0ID09IDAg JiYgY3NhdmUgPT0gJ1xyJykKKwkJCQkJICBjMiA9ICdcbic7CisJCQkJCWxvZ2NoYXIoKGNoYXIp YzIpOworCQkJCSAgICB9CisJCQkJfQorCQkJICAgIH0gZWxzZSB7CisJCQkJcGVycm9yKCJcclxu Q2FuJ3Qgc2VuZCBjaGFyYWN0ZXIiKTsKKwkJCQlhY3RpdmUgPSAwOworCQkJICAgIH0KKyNpZmRl ZiBTVU5YMjUKKwkJCX0KKyNlbmRpZiAvKiBTVU5YMjUgKi8KKwkJICAgIH0gLyogZm9yLi4uICov CisJCX0KKwkgICAgfQorCisJICAgIC8qIG5vdyBhY3RpdmUgPT0gMCAqLworICAgICAgICAgICAg c2lnbmFsKENLX0ZPUktfU0lHLCBTSUdfSUdOKTsgLyogVHVybiBvZmYgQ0tfRk9SS19TSUcgKi8K KwkgICAgc2p2YWwgPSBDRVZfTk87CQkvKiBTZXQgdG8gaGFuZ3VwICovCisJfQkJCQkvKiBDb21l IGhlcmUgb24gdGVybWluYXRpb24gb2YgY2hpbGQgKi8KKworLyogY2tsb25nam1wKCkgZXhlY3V0 ZWQgaW4gcGlwZWludCgpIChwYXJlbnQgb25seSEpIGNvbWVzIGhlcmUgKi8KKworLyoKKyAgTm93 IHRoZSBjaGlsZCBmb3JrIGlzIGdvbmUgb3IgaXMgd2FpdGluZyBmb3IgQ0tfRk9SS19TSUcgaW4g Y2tfc25kbXNnKCkuCisgIFNvIHdlIGNhbid0IGdldCAoaW4gdGhlIHBhcmVudCkgYW55IHN1YnNl cXVlbnQgQ0tfRk9SS19TSUcgc2lnbmFscyB1bnRpbAorICB3ZSBzaWduYWwgdGhlIGNoaWxkIHdp dGggQ0tfRk9SS19TSUcuCisqLworCWRlYnVnKEYxMDAsIkNPTk5FQ1Qgc2lnbmFsaW5nIHBvcnQg Zm9yayIsIiIsMCk7CisJc2lnbmFsKENLX0ZPUktfU0lHLCBTSUdfSUdOKTsJLyogVHVybiB0aGlz IG9mZiAqLworCWRlYnVnKEYxMDEsIkNPTk5FQ1Qga2lsbGluZyBwb3J0IGZvcmsiLCIiLHBpZCk7 CisJaWYgKHBpZCkgeworCSAgICBpbnQgeCA9IDA7CisjaWZkZWYgQkVPU09SQkVCT1gKKwkgICAg eworCQlsb25nIHJldF92YWw7CisJCXggPSBraWxsKHBpZCxTSUdLSUxMVEhSKTsgLyogS2lsbCBs b3dlciBmb3JrICovCisJCXdhaXRfZm9yX3RocmVhZChwaWQsICZyZXRfdmFsKTsKKwkgICAgfQor I2Vsc2UKKyNpZmRlZiBQbGFuOQorCSAgICB4ID0ga2lsbChwaWQsU0lHS0lMTCk7CS8qIEtpbGwg bG93ZXIgZm9yayAqLworI2Vsc2UKKwkgICAgeCA9IGtpbGwocGlkLDkpOworI2VuZGlmIC8qIFBs YW45ICovCisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKwkgICAgd2FpdCgoV0FJVF9UICopMCk7 CQkvKiBXYWl0IHRpbGwgZ29uZS4gKi8KKwkgICAgaWYgKHggPCAwKSB7CisJCXByaW50ZigiV0FS TklORzogRmFpbHVyZSB0byBraWxsIGZvcmssIHBpZCAlZDogJXMsIGVycm5vPSVkXG4iLAorCQkg ICAgICAgKGludCkgcGlkLCBja19lcnJzdHIoKSwgZXJybm8pOworCQlkZWJ1ZyhGMTExLCJDT05O RUNUIGVycm9yIGtpbGxpbmcgcGlkIixja19lcnJzdHIoKSxlcnJubyk7CisJICAgIH0KKwkgICAg ZGVidWcoRjEwMSwiQ09OTkVDVCBraWxsZWQgcG9ydCBmb3JrIiwiIixwaWQpOworCSAgICBwaWQg PSAoUElEX1QpIDA7CisJfQorCWlmIChzanZhbCA9PSBDRVZfSFVQKSB7CQkvKiBSZWFkIGVycm9y IG9uIGNvbW0gZGV2aWNlICovCisJICAgIGRvaGFuZ3VwID0gMTsJCS8qIHNvIHdlIHdhbnQgdG8g aGFuZyB1cCBvdXIgc2lkZSAqLworI2lmZGVmIE5FVENPTk4KKwkgICAgaWYgKG5ldHdvcmspIHsJ CS8qIGFuZC9vciBjbG9zZSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KKwkJdHRjbG9zKDApOworCQlk b2xvZ2VuZCgpOworI2lmZGVmIFNVTlgyNQorCQlpZiAobmV0dHlwZSA9PSBORVRfU1gyNSkgLyog SWYgWC4yNSwgcmVzdG9yZSB0aGUgUEFEIHBhcmFtcyAqLworCQkgIGluaXRwYWQoKTsKKyNlbmRp ZiAvKiBTVU5YMjUgKi8KKwkgICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKwl9CisjaWZkZWYg Q0tfQVBDCisJaWYgKHNqdmFsID09IENFVl9BUEMpIHsJCS8qIEFwcGxpY2F0aW9uIFByb2dyYW0g Q29tbWFuZCByZWMnZCAqLworCSAgICBhcGNhY3RpdmUgPSBBUENfUkVNT1RFOwkvKiBGbGFnIEFQ QyBhcyBhY3RpdmUgKi8KKwkgICAgYWN0aXZlID0gMDsJCQkvKiBGbGFnIENPTk5FQ1QgYXMgaW5h Y3RpdmUgKi8KKwl9CisjZW5kaWYgLyogQ0tfQVBDICovCisJY29ucmVzKCk7CQkJLyogUmVzZXQg dGhlIGNvbnNvbGUuICovCisJaWYgKGRvaGFuZ3VwID4gMCkgewkJLyogSWYgaGFuZ3VwIHJlcXVl c3RlZCwgZG8gdGhhdC4gKi8KKyNpZm5kZWYgTk9ESUFMCisJICAgIGlmIChkb2hhbmd1cCA+IDEp CQkvKiBVc2VyIGFza2VkIGZvciBpdCAqLworCSAgICAgIGlmIChtZG1odXAoKSA8IDEpCQkvKiBN YXliZSBoYW5nIHVwIHZpYSBtb2RlbSAqLworI2VuZGlmIC8qIE5PRElBTCAqLworCQl0dGhhbmco KTsJCS8qIEFuZCBtYWtlIHN1cmUgd2UgZG9uJ3QgaGFuZyB1cCAqLworCSAgICBkb2hhbmd1cCA9 IDA7CQkvKiBhZ2FpbiB1bmxlc3MgcmVxdWVzdGVkIGFnYWluLiAqLworCX0KKworI2lmZGVmIENP TU1FTlQKKyNpZmRlZiBORVRDT05OCisjaWZkZWYgU0lHUElQRQorCWlmIChuZXR3b3JrICYmIHNp Z3BpcGgpCQkvKiBSZXN0b3JlIHByZXZpb3VzIFNJR1BJUEUgaGFuZGxlciAqLworCSAgKFZPSUQp IHNpZ25hbChTSUdQSVBFLCBzaWdwaXBoKTsKKyNlbmRpZiAvKiBTSUdQSVBFICovCisjZW5kaWYg LyogTkVUQ09OTiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIEFOWVgyNQorCWlm IChkb3gyNWNscikgewkJCS8qIElmIFguMjUgQ2xlYXIgcmVxdWVzdGVkICovCisJICAgIHgyNWNs ZWFyKCk7CQkJLyogZG8gdGhhdC4gKi8KKyNpZm5kZWYgSUJNWDI1CisJICAgIGluaXRwYWQoKTsK KyNlbmRpZiAvKiBJQk1YMjUgKi8KKwkgICAgZG94MjVjbHIgPSAwOwkJLyogQnV0IG9ubHkgb25j ZS4gKi8KKwl9CisjZW5kaWYgLyogQU5ZWDI1ICovCisKKwlpZiAocXVpdG5vdykgZG9leGl0KEdP T0RfRVhJVCx4aXRzdGEpOyAvKiBFeGl0IG5vdyBpZiByZXF1ZXN0ZWQuICovCisgIAlpZiAobXNn ZmxnKQorCSAgcHJpbnRmKCIoQmFjayBhdCAlcykiLCAqbXlob3N0ID8gbXlob3N0IDogImxvY2Fs IFVOSVggc3lzdGVtIik7CisjaWZkZWYgQ0tfQVBDCisgICAgICAgIGlmICghYXBjYWN0aXZlKQor I2VuZGlmIC8qIENLX0FQQyAqLworCSAgcHJpbnRmKCJcbiIpOworCXdoYXQgPSBXX05PVEhJTkc7 CQkvKiBTbyBjb25zb2xlIG1vZGVzIHNldCByaWdodC4gKi8KKyNpZm5kZWYgTk9DU0VUUworCWxh bmd1YWdlID0gbGFuZ3N2OwkJLyogUmVzdG9yZSBsYW5ndWFnZSAqLworI2VuZGlmIC8qIE5PQ1NF VFMgKi8KKwlwYXJlbnRfaWQgPSAoUElEX1QpIDA7CisJZ290byBjb25yZXQxOworCisgICAgfQor I2lmbmRlZiBCRU9TT1JCRUJPWAorICAgIGVsc2UgewkvKiAqKiogKi8JCS8qIEluZmVyaW9yIHJl YWRzLCBwcmludHMgcG9ydCBpbnB1dCAqLworICAgICAgICBjb25jbGQoLyogKHZvaWQgKikmcGlk ICovKTsKKyAgICB9CisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKworY29ucmV0MToKKyAgICBj b25yZXQgPSAxOworY29ucmV0MDoKKyAgICBzaWduYWwoQ0tfRk9SS19TSUcsIFNJR19JR04pOwkv KiBJbiBjYXNlIHRoaXMgd2Fzbid0IGRvbmUgYWxyZWFkeSAqLworICAgIGRlYnVnKEYxMDEsIkNP Tk5FQ1QgY29uZWN0IGV4aXQgaWJjIiwiIixpYmMpOworICAgIGRlYnVnKEYxMDEsIkNPTk5FQ1Qg Y29uZWN0IGV4aXQgb2JjIiwiIixvYmMpOworICAgIGNsb3NlKHhwaXBlWzBdKTsgeHBpcGVbMF0g PSAtMTsJLyogQ2xvc2UgdGhlIHBpcGUgKi8KKyAgICBjbG9zZSh4cGlwZVsxXSk7IHhwaXBlWzFd ID0gLTE7CisgICAgaWYgKG1zZ2ZsZykgeworI2lmZGVmIENLX0FQQworCWlmIChhcGNhY3RpdmUg PT0gQVBDX0xPQ0FMKQorCSAgcHJpbnRmKCJcbiIpOworI2VuZGlmIC8qIENLX0FQQyAqLworCXBy aW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LVxyXG4iKTsKKyAgICB9CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgcmV0dXJuKGNvbnJldCk7 Cit9CisKKworLyogIEggQyBPIE4gTiBFICAtLSAgR2l2ZSBoZWxwIG1lc3NhZ2UgZm9yIGNvbm5l Y3QuICAqLworCitpbnQKK2hjb25uZSgpIHsKKyAgICBpbnQgYzsKKyAgICBzdGF0aWMgY2hhciAq aGxwbXNnW10gPSB7CisiXHJcbiAgPyBmb3IgdGhpcyBtZXNzYWdlIiwKKyJcclxuICAwICh6ZXJv KSB0byBzZW5kIGEgbnVsbCIsCisiXHJcbiAgQiB0byBzZW5kIGEgQlJFQUsiLAorI2lmZGVmIENL X0xCUksKKyJcclxuICBMIHRvIHNlbmQgYSBMb25nIEJSRUFLIiwKKyNlbmRpZiAvKiBDS19MQlJL ICovCisjaWZkZWYgTkVUQ09OTgorIlxyXG4gIEkgdG8gc2VuZCBhIG5ldHdvcmsgaW50ZXJydXB0 IHBhY2tldCIsCisjaWZkZWYgVENQU09DS0VUCisiXHJcbiAgQSB0byBzZW5kIEFyZSBZb3UgVGhl cmU/IiwKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBBTllYMjUKKyJcclxuICBSIHRv IHJlc2V0IFguMjUgdmlydHVhbCBjaXJjdWl0IiwKKyNlbmRpZiAvKiBBTllYMjUgKi8KKyNlbmRp ZiAvKiBORVRDT05OICovCisiXHJcbiAgVSB0byBoYW5ndXAgYW5kIGNsb3NlIHRoZSBjb25uZWN0 aW9uIiwKKyJcclxuICBRIHRvIGhhbmd1cCBhbmQgcXVpdCBLZXJtaXQiLAorIlxyXG4gIFMgZm9y IHN0YXR1cyIsCisjaWZkZWYgTk9QVVNICisiXHJcbiAgISB0byBwdXNoIHRvIGxvY2FsIHNoZWxs IChkaXNhYmxlZCkiLAorIlxyXG4gIFogdG8gc3VzcGVuZCAoZGlzYWJsZWQpIiwKKyNlbHNlCisi XHJcbiAgISB0byBwdXNoIHRvIGxvY2FsIHNoZWxsIiwKKyNpZmRlZiBOT0pDCisiXHJcbiAgWiB0 byBzdXNwZW5kIChkaXNhYmxlZCkiLAorI2Vsc2UKKyJcclxuICBaIHRvIHN1c3BlbmQiLAorI2Vu ZGlmIC8qIE5PSkMgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyJcclxuICBcXCBiYWNrc2xhc2gg Y29kZToiLAorIlxyXG4gICAgXFxubm4gIGRlY2ltYWwgY2hhcmFjdGVyIGNvZGUiLAorIlxyXG4g ICAgXFxPbm5uIG9jdGFsIGNoYXJhY3RlciBjb2RlIiwKKyJcclxuICAgIFxcWGhoICBoZXhhZGVj aW1hbCBjaGFyYWN0ZXIgY29kZSIsCisiXHJcbiAgICB0ZXJtaW5hdGUgd2l0aCBjYXJyaWFnZSBy ZXR1cm4uIiwKKyJcclxuIFR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgYWdhaW4gdG8gc2VuZCB0 aGUgZXNjYXBlIGNoYXJhY3Rlciwgb3IiLAorIlxyXG4gcHJlc3MgdGhlIHNwYWNlLWJhciB0byBy ZXN1bWUgdGhlIENPTk5FQ1QgY29tbWFuZC5cclxuIiwKKyIiIH07CisKKyAgICBjb25vbCgiXHJc bi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsK KyAgICBjb25vbCgiXHJcblByZXNzIEMgdG8gcmV0dXJuIHRvICIpOworICAgIGNvbm9sKCpteWhv c3QgPyBteWhvc3QgOiAidGhlIEMtS2VybWl0IHByb21wdCIpOworICAgIGNvbm9sKCIsIG9yOiIp OworICAgIGNvbm9sYShobHBtc2cpOwkJCS8qIFByaW50IHRoZSBoZWxwIG1lc3NhZ2UuICovCisg ICAgY29ub2woIkNvbW1hbmQ+Iik7CQkJLyogUHJvbXB0IGZvciBjb21tYW5kLiAqLworICAgIGMg PSBDT05HS1MoKSAmIDAxNzc7CQkvKiBHZXQgY2hhcmFjdGVyLCBzdHJpcCBhbnkgcGFyaXR5LiAq LworICAgIC8qIE5vIGtleSBtYXBwaW5nIG9yIHRyYW5zbGF0aW9uIGhlcmUgKi8KKyAgICBpZiAo YyAhPSBDTURRKQorICAgICAgY29ub2xsKCIiKTsKKyAgICBjb25vbGwoIi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgIHJldHVybihjKTsJ CQkJLyogUmV0dXJuIGl0LiAqLworfQorCisKKy8qICBEIE8gRSBTIEMgIC0tICBQcm9jZXNzIGFu IGVzY2FwZSBjaGFyYWN0ZXIgYXJndW1lbnQgICovCisKK1ZPSUQKKyNpZmRlZiBDS19BTlNJQwor ZG9lc2MoY2hhciBjKQorI2Vsc2UKK2RvZXNjKGMpIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogZG9lc2MgKi8geworICAgIENIQVIgZDsKKworICAgIGRlYnVnKEYxMDEsIkNPTk5F Q1QgZG9lc2MiLCIiLGMpOworICAgIHdoaWxlICgxKSB7CisJaWYgKGMgPT0gZXNjYXBlKSB7CQkv KiBTZW5kIGVzY2FwZSBjaGFyYWN0ZXIgKi8KKwkgICAgZCA9IGRvcGFyKChDSEFSKSBjKTsgdHRv YygoY2hhcikgZCk7IHJldHVybjsKKyAgICAJfSBlbHNlCQkJCS8qIE9yIGVsc2UgbG9vayBpdCB1 cCBiZWxvdy4gKi8KKwkgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0b2xvd2VyKGMpOworCisJc3dp dGNoKGMpIHsKKworCWNhc2UgJ2MnOgkJCS8qIEVzY2FwZSBiYWNrIHRvIHByb21wdCAqLworCWNh c2UgJ1wwMyc6CisJICAgIGFjdGl2ZSA9IDA7IGNvbm9sKCJcclxuIik7IHJldHVybjsKKworCWNh c2UgJ2InOgkJCS8qIFNlbmQgYSBCUkVBSyBzaWduYWwgKi8KKwljYXNlICdcMDInOgorCSAgICB0 dHNuZGIoKTsgcmV0dXJuOworCisjaWZkZWYgTkVUQ09OTgorCWNhc2UgJ2knOgkJCS8qIFNlbmQg SW50ZXJydXB0ICovCisJY2FzZSAnXDAxMSc6CisjaWZkZWYgVENQU09DS0VUCisjaWZuZGVmIElQ CisjZGVmaW5lIElQIDI0NAorI2VuZGlmIC8qIElQICovCisJICAgIGlmIChuZXR3b3JrICYmIElT X1RFTE5FVCgpKSB7IC8qIFRFTE5FVCAqLworCQl0ZW1wWzBdID0gKENIQVIpIElBQzsJLyogSSBB bSBhIENvbW1hbmQgKi8KKwkJdGVtcFsxXSA9IChDSEFSKSBJUDsJLyogSW50ZXJydXB0IFByb2Nl c3MgKi8KKwkJdGVtcFsyXSA9IE5VTDsKKwkJdHRvbCgoQ0hBUiAqKXRlbXAsMik7CisJICAgIH0g ZWxzZQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmZGVmIFNVTlgyNQorCSAgICBpZiAobmV0 d29yayAmJiAobmV0dHlwZSA9PSBORVRfU1gyNSkpIHsKKwkJKFZPSUQpIHgyNWludHIoMCk7CSAg ICAgICAgICAgIC8qIFguMjUgaW50ZXJydXB0IHBhY2tldCAqLworCQljb25vbCgiXHJcbiIpOwor CSAgICB9IGVsc2UKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKwkgICAgICBjb25vYyhCRUwpOworCSAg ICByZXR1cm47CisKKyNpZmRlZiBUQ1BTT0NLRVQKKwljYXNlICdhJzoJCQkvKiAiQXJlIFlvdSBU aGVyZT8iICovCisJY2FzZSAnXDAxJzoKKyNpZm5kZWYgQVlUCisjZGVmaW5lIEFZVCAyNDYKKyNl bmRpZiAvKiBBWVQgKi8KKwkgICAgaWYgKG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHsKKwkJdGVt cFswXSA9IChDSEFSKSBJQUM7CS8qIEkgQW0gYSBDb21tYW5kICovCisJCXRlbXBbMV0gPSAoQ0hB UikgQVlUOwkvKiBBcmUgWW91IFRoZXJlPyAqLworCQl0ZW1wWzJdID0gTlVMOworCQl0dG9sKChD SEFSICopdGVtcCwyKTsKKwkgICAgfSBlbHNlIGNvbm9jKEJFTCk7CisJICAgIHJldHVybjsKKyNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBDS19M QlJLCisJY2FzZSAnbCc6CQkJLyogU2VuZCBhIExvbmcgQlJFQUsgc2lnbmFsICovCisJICAgIHR0 c25kbGIoKTsgcmV0dXJuOworI2VuZGlmIC8qIENLX0xCUksgKi8KKworCWNhc2UgJ3UnOgkJCS8q IEhhbmd1cCAqLworICAgICAvKgljYXNlICdcMDEwJzogKi8JCQkvKiBObywgdG9vIGRhbmdlcm91 cyAqLworI2lmZGVmIEFOWVgyNQorICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgKG5ldHR5cGUg PT0gTkVUX1NYMjUgfHwgbmV0dHlwZSA9PSBORVRfSVgyNSkpCisJICAgICAgZG94MjVjbHIgPSAx OworICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIEFOWVgyNSAqLworCSAgICBkb2hhbmd1cCA9 IDI7IGFjdGl2ZSA9IDA7IGNvbm9sKCJcclxuSGFuZ2luZyB1cCAiKTsgcmV0dXJuOworCisjaWZk ZWYgQU5ZWDI1CisgICAgICAgIGNhc2UgJ3InOiAgICAgICAgICAgICAgICAgICAgICAgLyogUmVz ZXQgdGhlIFguMjUgdmlydHVhbCBjaXJjdWl0ICovCisgICAgICAgIGNhc2UgJ1wwMjInOgorICAg ICAgICAgICAgaWYgKG5ldHdvcmsgJiYgKG5ldHR5cGUgPT0gTkVUX1NYMjUgfHwgbmV0dHlwZSA9 PSBORVRfSVgyNSkpCisJCShWT0lEKSB4MjVyZXNldCgwLDApOworICAgICAgICAgICAgY29ub2wo IlxyXG4iKTsKKwkgICAgcmV0dXJuOworI2VuZGlmIC8qIEFOWVgyNSAqLworCisJY2FzZSAncSc6 CQkJLyogUXVpdCAqLworCSAgICBkb2hhbmd1cCA9IDI7IHF1aXRub3cgPSAxOyBhY3RpdmUgPSAw OyBjb25vbCgiXHJcbiIpOyByZXR1cm47CisKKwljYXNlICdzJzoJCQkvKiBTdGF0dXMgKi8KKwkg ICAgY29ub2xsKCIiKTsKKwkgICAgY29ub2xsKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisjaWZkZWYgTkVUQ01ECisJICAgIGlmICh0dHBp cGUpCisJICAgICAgY2ttYWttc2codGVtcCxUTVBMRU4sIiBQaXBlOiBcIiIsdHRuYW1lLCJcIiIs TlVMTCk7CisJICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKwkgICAgICBja21ha21zZyh0 ZW1wLAorCQkgICAgICAgVE1QTEVOLAorCQkgICAgICAgIiAiLAorCQkgICAgICAgKG5ldHdvcmsg PyAiSG9zdCIgOiAiRGV2aWNlIiksCisJCSAgICAgICAiOiAiLAorCQkgICAgICAgdHRuYW1lCisJ CSAgICAgICApOworCSAgICBjb25vbGwodGVtcCk7CisJICAgIGlmICghbmV0d29yayAmJiBzcGVl ZCA+PSAwTCkgeworCQlzcHJpbnRmKHRlbXAsIlNwZWVkICVsZCIsIHNwZWVkKTsKKwkJY29ub2xs KHRlbXApOworCSAgICB9CisJICAgIHNwcmludGYodGVtcCwiIFRlcm1pbmFsIGVjaG86ICVzIiwg ZHVwbGV4ID8gImxvY2FsIiA6ICJyZW1vdGUiKTsKKwkgICAgY29ub2xsKHRlbXApOworCSAgICBz cHJpbnRmKHRlbXAsIiBUZXJtaW5hbCBieXRlc2l6ZTogJWQiLCAoY21hc2sgID09IDAxNzcpID8g NyA6IDgpOworCSAgICBjb25vbGwodGVtcCk7CisJICAgIHNwcmludGYodGVtcCwiIENvbW1hbmQg Ynl0ZXNpemU6ICVkIiwgKGNtZG1zayA9PSAwMTc3KSA/IDcgOiA4ICk7CisJICAgIGNvbm9sbCh0 ZW1wKTsKKyAgICAgICAgICAgIGlmIChod3Bhcml0eSkKKyAgICAgICAgICAgICAgc3ByaW50Zih0 ZW1wLCIgUGFyaXR5W2hhcmR3YXJlXTogJXMiLHBhcm5hbSgoY2hhcilod3Bhcml0eSkpOworICAg ICAgICAgICAgZWxzZQkgICAgCisgIAkgICAgICBzcHJpbnRmKHRlbXAsIiBQYXJpdHk6ICVzIiwg cGFybmFtKChjaGFyKXBhcml0eSkpOworCSAgICBjb25vbGwodGVtcCk7CisJICAgIHNwcmludGYo dGVtcCwiIEF1dG9kb3dubG9hZDogJXMiLCBhdXRvZGwgPyAib24iIDogIm9mZiIpOworCSAgICBj b25vbGwodGVtcCk7CisJICAgIGNrbWFrbXNnKHRlbXAsCQkvKiAod291bGQgbm90IGJlIHNhZmUg Zm9yIHNwcmludGYpICovCisJCSAgICAgVE1QTEVOLAorCQkgICAgICIgU2Vzc2lvbiBsb2c6ICIs CisJCSAgICAgKnNlc2ZpbCA/IHNlc2ZpbCA6ICIobm9uZSkiLAorCQkgICAgIE5VTEwsCisJCSAg ICAgTlVMTAorCQkgICAgICk7CisJICAgIGNvbm9sbCh0ZW1wKTsKKyNpZm5kZWYgTk9TSE9XCisJ ICAgIGlmICghbmV0d29yaykgc2hvbWRtKCk7CisjZW5kaWYgLyogTk9TSE9XICovCisjaWZkZWYg Q0tMT0dESUFMCisJICAgIHsKKwkJbG9uZyB6OworCQl6ID0gZG9sb2dzaG93KDApOworCQlpZiAo eiA+IC0xTCkgeworCQkgICAgc3ByaW50Zih0ZW1wLCIgRWxhcHNlZCB0aW1lOiAlcyIsaGhtbXNz KHopKTsKKwkJICAgIGNvbm9sbCh0ZW1wKTsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogQ0tMT0dE SUFMICovCisJICAgIGNvbm9sbCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSIpOworCSAgICByZXR1cm47CisKKwljYXNlICdoJzoJCQkvKiBIZWxw ICovCisJY2FzZSAnPyc6CQkJLyogSGVscCAqLworCSAgICBjID0gaGNvbm5lKCk7IGNvbnRpbnVl OworCisJY2FzZSAnMCc6CQkJLyogU2VuZCBhIG51bGwgKi8KKwkgICAgYyA9ICdcMCc7IGQgPSBk b3BhcigoQ0hBUikgYyk7IHR0b2MoKGNoYXIpIGQpOyByZXR1cm47CisKKwljYXNlICd6JzogY2Fz ZSAnXDAzMic6CQkvKiBTdXNwZW5kICovCisjaWZuZGVmIE5PUFVTSAorCSAgICBpZiAoIW5vcHVz aCkKKwkgICAgICBzdHB0cmFwKDApOworCSAgICBlbHNlCisJICAgICAgY29ub2MoQkVMKTsKKyNl bHNlCisJICAgIGNvbm9jKEJFTCk7CisjZW5kaWYgLyogTk9QVVNIICovCisJICAgIHJldHVybjsK KworCWNhc2UgJ0AnOgkJCS8qIFN0YXJ0IGluZmVyaW9yIGNvbW1hbmQgcHJvY2Vzc29yICovCisJ Y2FzZSAnISc6CisjaWZuZGVmIE5PUFVTSAorCSAgICBpZiAoIW5vcHVzaCkgeworCQljb25yZXMo KTsJCSAgICAgIC8qIFB1dCBjb25zb2xlIGJhY2sgdG8gbm9ybWFsICovCisJCXpzaGNtZCgiIik7 CQkgICAgICAvKiBGb3JrIGEgc2hlbGwuICovCisJCWlmIChjb25iaW4oKGNoYXIpZXNjYXBlKSA8 IDApIHsKKwkJICAgIHByaW50ZigiRXJyb3IgcmVzdW1pbmcgQ09OTkVDVCBzZXNzaW9uXG4iKTsK KwkJICAgIGFjdGl2ZSA9IDA7CisJCX0KKwkgICAgfSBlbHNlIGNvbm9jKEJFTCk7CisjZWxzZQor CSAgICBjb25vYyhCRUwpOworI2VuZGlmIC8qIE5PUFVTSCAqLworCSAgICByZXR1cm47CisKKwlj YXNlIFNQOgkJCS8qIFNwYWNlLCBpZ25vcmUgKi8KKwkgICAgcmV0dXJuOworCisJZGVmYXVsdDoJ CQkvKiBPdGhlciAqLworCSAgICBpZiAoYyA9PSBDTURRKSB7CQkvKiBCYWNrc2xhc2ggZXNjYXBl ICovCisJCWludCB4OworCQllY2JwID0gZWNidWY7CisJCSplY2JwKysgPSBjOworCQl3aGlsZSAo KChjID0gKENPTkdLUygpICYgY21kbXNrKSkgIT0gJ1xyJykgJiYgKGMgIT0gJ1xuJykpCisJCSAg KmVjYnArKyA9IGM7CisJCSplY2JwID0gTlVMOyBlY2JwID0gZWNidWY7CisJCXggPSB4eGVzYygm ZWNicCk7CS8qIEludGVycHJldCBpdCAqLworCQlpZiAoeCA+PSAwKSB7CQkvKiBObyBrZXkgbWFw cGluZyBoZXJlICovCisJCSAgICBjID0gZG9wYXIoKENIQVIpIHgpOworCQkgICAgdHRvYygoY2hh cikgYyk7CisJCSAgICByZXR1cm47CisJCX0gZWxzZSB7CQkvKiBJbnZhbGlkIGJhY2tzbGFzaCBj b2RlLiAqLworCQkgICAgY29ub2MoQkVMKTsKKwkJICAgIHJldHVybjsKKwkJfQorCSAgICB9CisJ ICAgIGNvbm9jKEJFTCk7IHJldHVybjsgCS8qIEludmFsaWQgZXNjIGFyZywgYmVlcCAqLworICAg IAl9CisgICAgfQorfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0 LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWRpYS5jIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VkaWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi41ODdhMGQxCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VkaWEuYwpAQCAtMCwwICsxLDgyNDkgQEAKKyNpbmNsdWRl ICJja2NzeW0uaCIKK2NoYXIgKmRpYWx2ID0gIkRpYWwgQ29tbWFuZCwgOS4wLjE2MCwgMTYgT2N0 IDIwMDkiOworCisvKiAgQyBLIFUgRCBJIEEJIC0tICBNb2R1bGUgZm9yIGF1dG9tYXRpYyBtb2Rl bSBkaWFsaW5nLiAqLworCisvKgorICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisgICAgVHJ1 c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAg ICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxl IG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRp c2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAgQXV0aG9yczoKKworICBPcmln aW5hbCAodmVyc2lvbiAxLCAxOTg1KSBhdXRob3I6IEhlcm0gRmlzY2hlciwgRW5jaW5vLCBDQS4K KyAgQ29udHJpYnV0ZWQgdG8gQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiAxOTg1IGZvciBpbmNsdXNp b24gaW4gQy1LZXJtaXQgNC4wLgorICBBdXRob3IgYW5kIG1haW50YWluZXIgc2luY2UgMTk4NTog RnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0eSwKKyAgZmRjQGNvbHVtYmlhLmVkdS4K KworICBDb250cmlidXRpb25zIGJ5IG1hbnkgb3RoZXJzIHRocm91Z2hvdXQgdGhlIHllYXJzLCBp bmNsdWRpbmc6IEplZmZyZXkKKyAgQWx0bWFuLCBNYXJrIEJlcnJ5bWFuLCBGZXJuYW5kbyBDYWJy YWwsIEpvaG4gQ2htaWVsZXdza2ksIEpvZSBEb3VwbmlrLAorICBSaWNoYXJkIEhpbGwsIExhcnJ5 IEphY29icywgRXJpYyBKb25lcywgVG9tIEtsb29zLCBCb2IgTGFyc29uLCBQZXRlciBNYXV6ZXks CisgIEpvZSBPcm9zdCwgS2V2aW4gTydHb3JtYW4sIEthaSBVd2UgUm9tbWVsLCBEYW4gU2NodWxs bWFuLCBXYXJyZW4gVHVja2VyLCBhbmQKKyAgbWFueSBvdGhlcnMuCisqLworCisvKgorICBFbnRy eSBwb2ludHM6CisgICAgY2tkaWFsKGNoYXIgKiBudW1iZXIpICAgRGlhbCBhIG51bWJlciBvciBh bnN3ZXIgYSBjYWxsCisgICAgZGlhbGh1cCgpICAgICAgICAgICAgICAgSGFuZyB1cCBhIGRpYWxl ZCBjb25uZWN0aW9uCisgICAgbWRtaHVwKCkgICAgICAgICAgICAgICAgVXNlIG1vZGVtIGNvbW1h bmRzIHRvIGhhbmcgdXAKKworICBBbGwgb3RoZXIgcm91dGluZXMgYXJlIHN0YXRpYy4KKyAgRG9u J3QgY2FsbCBkaWFsaHVwKCkgb3IgbWRtaHVwKCkgd2l0aG91dCBmaXJzdCBjYWxsaW5nIGNrZGlh bCgpLgorKi8KKworLyoKKyAgVGhpcyBtb2R1bGUgY2FsbHMgZXh0ZXJuYWxseSBkZWZpbmVkIHN5 c3RlbS1kZXBlbmRlbnQgZnVuY3Rpb25zIGZvcgorICBjb21tdW5pY2F0aW9ucyBpL28sIGFzIGRl c2NyaWJlZCBpbiBDS0NQTE0uRE9DLCB0aGUgQy1LZXJtaXQgUHJvZ3JhbSBMb2dpYworICBNYW51 YWwsIGFuZCB0aHVzIHNob3VsZCBiZSBwb3J0YWJsZSB0byBhbGwgc3lzdGVtcyB0aGF0IGltcGxl bWVudCB0aG9zZQorICBmdW5jdGlvbnMsIGFuZCB3aGVyZSBhbGFybSgpIGFuZCBzaWduYWwoKSB3 b3JrLgorCisgIEhPVyBUTyBBREQgU1VQUE9SVCBGT1IgQU5PVEhFUiBNT0RFTToKKworICAxLiBJ biBja3V1c3IuaCwgZGVmaW5lIGEgbW9kZW0tdHlwZSBudW1iZXIgc3ltYm9sIChuX1hYWCkgZm9y IHRoZSBuZXcgbW9kZW0sCisgICAgIHRoZSBuZXh0IGhpZ2hlc3Qgb25lLgorCisgIDIuIEluIGNr dXVzci5oLCBhZGp1c3QgTUFYX01ETSB0byB0aGUgbmV3IG51bWJlciBvZiBtb2RlbSB0eXBlcy4K KworVGhlIHJlbWFpbmluZyBzdGVwcyBhcmUgaW4gdGhpcyBtb2R1bGU6CisKKyAgMy4gQ3JlYXRl IGEgTURNSU5GIHN0cnVjdHVyZSBmb3IgaXQuICBOT1RFOiBUaGUgd2FrZV9zdHIgc2hvdWxkIGlu Y2x1ZGUKKyAgICAgYWxsIGludmFyaWFudCBzZXR1cCBpbmZvLCBlLmcuIGVuYWJsZSByZXN1bHQg Y29kZXMsIEJSRUFLIHRyYW5zcGFyZW5jeSwKKyAgICAgbW9kdWxhdGlvbiBuZWdvdGlhdGlvbiwg ZXRjLiAgU2VlIGNrY2tlci5oIGZvciBNRE1JTkYgc3RydWN0IGRlZmluaXRpb24uCisKKyAgNC4g QWRkIHRoZSBhZGRyZXNzIG9mIHRoZSBNRE1JTkYgc3RydWN0dXJlIHRvIHRoZSBtb2RlbXBbXSBh cnJheSwKKyAgICAgYWNjb3JkaW5nIHRvIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlIG1vZGVt LXR5cGUgbnVtYmVyLgorCisgIDUuIEFkZCB0aGUgdXNlci12aXNpYmxlIChTRVQgTU9ERU0pIG5h bWUgYW5kIGNvcnJlc3BvbmRpbmcgbW9kZW0gbnVtYmVyCisgICAgIHRvIHRoZSBtZG10YWJbXSBh cnJheSwgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IG1vZGVtLW5hbWUgc3RyaW5nLgorCisgIDYu IElmIHRoaXMgZmFsbHMgaW50byBhIGNsYXNzIGxpa2UgaXNfcm9ja3dlbGwsIGlzX3N1cHJhLCBl dGMsIGFkZCB0aGUgbmV3CisgICAgIG9uZSB0byB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY2xhc3Mu CisKKyAgNy4gQWRqdXN0IHRoZSBnZXRocm4oKSByb3V0aW5lIHRvIGFjY291bnQgZm9yIGFueSBz cGVjaWFsIG51bWVyaWMgcmVzdWx0CisgICAgIGNvZGVzIChpZiBpdCdzIGEgSGF5ZXMgY29tcGF0 aWJsZSBtb2RlbSkuCisKKyAgOC4gUmVhZCB0aHJvdWdoIHRoZSBjb2RlIGFuZCBhZGQgYW55IG1v ZGVtLXNwZWNpZmljIHNlY3Rpb25zIGFzIG5lY2Vzc2FyeS4KKyAgICAgRm9yIG1vc3QgbW9kZXJu IEhheWVzLWNvbXBhdGlibGUgbW9kZW1zLCBubyBzcGVjaWZpYyBjb2RlIHdpbGwgYmUKKyAgICAg bmVlZGVkLgorCisgIE5PVEU6IFRoZSBNSU5JRElBTCBzeW1ib2wgaXMgdXNlZCB0byBidWlsZCB0 aGlzIG1vZHVsZSB0byBpbmNsdWRlIHN1cHBvcnQKKyAgZm9yIG9ubHkgYSBtaW5pbXVtIG51bWJl ciBvZiBzdGFuZGFyZCBhbmQvb3IgZ2VuZXJhbGx5IHVzZWZ1bCBtb2RlbSB0eXBlcywKKyAgbmFt ZWx5IEhheWVzIDEyMDAgYW5kIDI0MDAsIElUVS1UIChDQ0lUVCkgVi4yNWJpcyBhbmQgVi4yNXRl ciAoVi4yNTApLAorICBHZW5lcmljLUhpZ2gtU3BlZWQsICJVbmtub3duIiwgYW5kIE5vbmUuICBX aGVuIGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldworICBtb2RlbSB0eXBlLCBrZWVwIGl0IG91dHNp ZGUgb2YgdGhlIE1JTklESUFMIHNlY3Rpb25zIHVubGVzcyBpdCBkZXNlcnZlcyB0bworICBiZSBp biBpdC4KKyovCisKKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpZm5kZWYgTk9MT0NBTAorI2lmbmRl ZiBOT0RJQUwKKyNpZm5kZWYgTk9JQ1AKKworI2lmbmRlZiBDS19BVERUCisjZGVmaW5lIENLX0FU RFQKKyNlbmRpZiAvKiBDS19BVERUICovCisKKyNpZm5kZWYgTk9PTERNT0RFTVMgICAgICAgIC8q IFVubGVzcyBpbnN0cnVjdGVkIG90aGVyd2lzZSwgKi8KKyNkZWZpbmUgT0xETU9ERU1TICAgICAg ICAgIC8qIGtlZXAgc3VwcG9ydCBmb3Igb2xkIG1vZGVtcy4gKi8KKyNlbmRpZiAvKiBOT09MRE1P REVNUyAqLworCisjaWZuZGVmIE1fT0xECQkgICAvKiBIaWRlIG9sZCBtb2RlbSBrZXl3b3JkcyBp biBTRVQgTU9ERU0gdGFibGUuICovCisjZGVmaW5lIE1fT0xEIDAJCSAgIC8qIERlZmluZSBhcyBD TV9JTlYgdG8gbWFrZSB0aGVtIGludmlzaWJsZS4gKi8KKyNlbmRpZiAvKiBNX09MRCAqLworCisj aWZuZGVmIE1fQUxJQVMKKyNkZWZpbmUgTV9BTElBUyA2NAorI2VuZGlmIC8qIE1fQUxJQVMgKi8K KworI2lmbmRlZiBNQUMKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZiAvKiBNQUMgKi8KKyNp bmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNpbmNsdWRlICJja3VjbWQu aCIKKyNpbmNsdWRlICJja2NuZXQuaCIKKyNpbmNsdWRlICJja3V1c3IuaCIKKworI2lmZGVmIE9T Mk9OTFkKKyNkZWZpbmUgSU5DTF9WSU8JCQkvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCisjaW5j bHVkZSA8b3MyLmg+CisjdW5kZWYgQ09NTUVOVAorI2luY2x1ZGUgImNrb2Nvbi5oIgorI2VuZGlm IC8qIE9TMk9OTFkgKi8KKworI2lmZGVmIE5UCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1 ZGUgPHRhcGkuaD4KKyNpbmNsdWRlICJja253aW4uaCIKKyNpbmNsdWRlICJja250YXAuaCIKKyNl bmRpZiAvKiBOVCAqLworI2lmZGVmIE9TMgorI2luY2x1ZGUgImNrb3dpbi5oIgorI2VuZGlmIC8q IE9TMiAqLworCisjaWZuZGVmIFpJTE9HCisjaWZkZWYgTlQKKyNpbmNsdWRlIDxzZXRqbXBleC5o PgorI2Vsc2UgLyogTlQgKi8KKyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNlbmRpZiAvKiBOVCAqLwor I2Vsc2UKKyNpbmNsdWRlIDxzZXRyZXQuaD4KKyNlbmRpZiAvKiBaSUxPRyAqLworCisjaW5jbHVk ZSAiY2tjc2lnLmgiICAgICAgICAvKiBDLUtlcm1pdCBzaWduYWwgcHJvY2Vzc2luZyAqLworCisj aWZkZWYgTUFDCisjZGVmaW5lIHNpZ25hbCBtc2lnbmFsCisjZGVmaW5lIFNJR1RZUCBsb25nCisj ZGVmaW5lIGFsYXJtIG1hbGFybQorI2RlZmluZSBTSUdfSUdOIDAKKyNkZWZpbmUgU0lHQUxSTSAx CisjZGVmaW5lIFNJR0lOVCAgMgorU0lHVFlQICgqbXNpZ25hbChpbnQgdHlwZSwgU0lHVFlQICgq ZnVuYykoaW50KSkpKGludCk7CisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBBTUlHQQorI2Rl ZmluZSBzaWduYWwgYXNpZ25hbAorI2RlZmluZSBhbGFybSBhYWxhcm0KKyNkZWZpbmUgU0lHQUxS TSAoX05VTVNJRysxKQorI2RlZmluZSBTSUdUWVAgdm9pZAorU0lHVFlQICgqYXNpZ25hbChpbnQg dHlwZSwgU0lHVFlQICgqZnVuYykoaW50KSkpKGludCk7Cit1bnNpZ25lZCBhYWxhcm0odW5zaWdu ZWQpOworI2VuZGlmIC8qIEFNSUdBICovCisKKyNpZmRlZiBTVFJBVFVTCisvKgorICBWT1MgZG9l c24ndCBoYXZlIGFsYXJtKCksIGJ1dCBpdCBkb2VzIGhhdmUgc29tZSB0aGluZ3Mgd2UgY2FuIHdv cmsgd2l0aC4KKyAgSG93ZXZlciwgd2UgaGF2ZSB0byBjYXRjaCBhbGwgdGhlIHNpZ25hbHMgaW4g b25lIHBsYWNlIHRvIGRvIHRoaXMsIHNvCisgIHdlIGludGVyY2VwdCB0aGUgc2lnbmFsKCkgcm91 dGluZSBhbmQgY2FsbCBpdCBmcm9tIG91ciBvd24gcmVwbGFjZW1lbnQuCisqLworI2RlZmluZSBz aWduYWwgdnNpZ25hbAorI2RlZmluZSBhbGFybSB2YWxhcm0KK1NJR1RZUCAoKnZzaWduYWwoaW50 IHR5cGUsIFNJR1RZUCAoKmZ1bmMpKGludCkpKShpbnQpOworaW50IHZhbGFybShpbnQgaW50ZXJ2 YWwpOworI2lmZGVmIHB1dGNoYXIKKyN1bmRlZiBwdXRjaGFyCisjZW5kaWYgLyogcHV0Y2hhciAq LworI2RlZmluZSBwdXRjaGFyKHgpIGNvbm9jKHgpCisjaWZkZWYgZ2V0Y2hhcgorI3VuZGVmIGdl dGNoYXIKKyNlbmRpZiAvKiBnZXRjaGFyICovCisjZGVmaW5lIGdldGNoYXIoeCkgY29uaW5jKDAp CisjZW5kaWYgLyogU1RSQVRVUyAqLworCisjaWZkZWYgT1MyCisjaWZkZWYgcHV0Y2hhcgorI3Vu ZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICovCisjZGVmaW5lIHB1dGNoYXIoeCkgY29u b2MoeCkKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBOT0hJTlRTCitleHRlcm4gaW50IGhp bnRzOworI2VuZGlmIC8qIE5PSElOVFMgKi8KKworI2lmZGVmIENLX1RBUEkKK2V4dGVybiBpbnQg dHR0YXBpOworZXh0ZXJuIGludCB0YXBpcGFzczsKKyNlbmRpZiAvKiBDS19UQVBJICovCisKKyNp ZmRlZiBDS0xPR0RJQUwKK2V4dGVybiBpbnQgZGlhbG9nOworI2VuZGlmIC8qIENLTE9HRElBTCAq LworCitjaGFyICogZGlhbG1zZ1tdID0gewkJCS8qIERJQUwgc3RhdHVzIHN0cmluZ3MgKi8KKwor ICAgIC8qIEtleWVkIHRvIG51bWJlcnMgZGVmaW5lZCBpbiBja2NrZXIuaCAtLSBrZWVwIGluIHN5 bmMhICovCisKKyAgICAiRElBTCBzdWNjZWVkZWQiLAkJCSAgICAvKiAgMCBESUFfT0sgKi8KKyAg ICAiTW9kZW0gdHlwZSBub3Qgc3BlY2lmaWVkIiwJCSAgICAvKiAgMSBESUFfTk9NTyAqLworICAg ICJDb21tdW5pY2F0aW9uIGRldmljZSBub3Qgc3BlY2lmaWVkIiwgICAvKiAgMiBESUFfTk9MSSAq LworICAgICJDb21tdW5pY2F0aW9uIGRldmljZSBjYW4ndCBiZSBvcGVuZWQiLCAvKiAgMyBESUFf T1BFTiAqLworICAgICJTcGVlZCBub3Qgc3BlY2lmaWVkIiwJCSAgICAvKiAgNCBESUFfTk9TUCAq LworICAgICJQcmUtRElBTCBoYW5ndXAgZmFpbGVkIiwJCSAgICAvKiAgNSBESUFfSEFORyAqLwor ICAgICJJbnRlcm5hbCBlcnJvciIsCQkJICAgIC8qICA2IERJQV9JRSAgICovCisgICAgIkRldmlj ZSBpbnB1dC9vdXRwdXQgZXJyb3IiLAkgICAgLyogIDcgRElBX0lPICAgKi8KKyAgICAiRElBTCBU SU1FT1VUIGV4cGlyZWQiLAkJICAgIC8qICA4IERJQV9USU1PICovCisgICAgIkludGVycnVwdGVk IGJ5IHVzZXIiLAkJICAgIC8qICA5IERJQV9JTlRSICovCisgICAgIk1vZGVtIG5vdCByZWFkeSIs CQkJICAgIC8qIDEwIERJQV9OUkRZICovCisgICAgIlBhcnRpYWwgZGlhbCBPSyIsCQkJICAgIC8q IDExIERJQV9QQVJUICovCisgICAgIkRpYWwgZGlyZWN0b3J5IGxvb2t1cCBlcnJvciIsCSAgICAv KiAxMiBESUFfRElSICAqLworICAgICJIYW5ndXAgT0siLAkJCSAgICAvKiAxMyBESUFfSFVQICAq LworICAgIE5VTEwsCQkJCSAgICAvKiAxNCAodW5kZWYpICAqLworICAgIE5VTEwsCQkJCSAgICAv KiAxNSAodW5kZWYpICAqLworICAgIE5VTEwsCQkJCSAgICAvKiAxNiAodW5kZWYpICAqLworICAg IE5VTEwsCQkJCSAgICAvKiAxNyAodW5kZWYpICAqLworICAgIE5VTEwsCQkJCSAgICAvKiAxOCAo dW5kZWYpICAqLworICAgICJObyByZXNwb25zZSBmcm9tIG1vZGVtIiwJCSAgICAvKiAxOSBESUFf TlJTUCAqLworICAgICJNb2RlbSBjb21tYW5kIGVycm9yIiwJCSAgICAvKiAyMCBESUFfRVJSICAq LworICAgICJGYWlsdXJlIHRvIGluaXRpYWxpemUgbW9kZW0iLAkgICAgLyogMjEgRElBX05PSU4g Ki8KKyAgICAiUGhvbmUgYnVzeSIsCQkJICAgIC8qIDIyIERJQV9CVVNZICovCisgICAgIk5vIGNh cnJpZXIiLAkJCSAgICAvKiAyMyBESUFfTk9DQSAqLworICAgICJObyBkaWFsdG9uZSIsCQkJICAg IC8qIDI0IERJQV9OT0RUICovCisgICAgIkluY29taW5nIGNhbGwiLAkJCSAgICAvKiAyNSBESUFf UklORyAqLworICAgICJObyBhbnN3ZXIiLAkJCSAgICAvKiAyNiBESUFfTk9BTiAqLworICAgICJE aXNjb25uZWN0ZWQiLAkJCSAgICAvKiAyNyBESUFfRElTQyAqLworICAgICJBbnN3ZXJlZCBieSB2 b2ljZSIsCQkgICAgLyogMjggRElBX1ZPSUMgKi8KKyAgICAiQWNjZXNzIGRlbmllZCAvIGZvcmJp ZGRlbiBjYWxsIiwJICAgIC8qIDI5IERJQV9OT0FDICovCisgICAgIkJsYWNrbGlzdGVkIiwJCQkg ICAgLyogMzAgRElBX0JMQ0sgKi8KKyAgICAiRGVsYXllZCIsICAgIAkJCSAgICAvKiAzMSBESUFf REVMQSAqLworICAgICJGYXggY29ubmVjdGlvbiIsCQkJICAgIC8qIDMyIERJQV9GQVggICovCisg ICAgIkRpZ2l0YWwgbGluZSIsCQkJICAgIC8qIDMzIERJQV9ESUdJICovCisgICAgIlRBUEkgZGlh bGluZyBmYWlsdXJlIiwJICAgICAgICAgICAgLyogMzQgRElBX1RBUEkgKi8KKyAgICBOVUxMCQkJ CSAgICAvKiAzNCAqLworfTsKKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBOT1NQTAorc3RhdGlj CisjZW5kaWYgLyogTk9TUEwgKi8KK2NoYXIgbW9kZW1tc2dbMTI4XSA9IHsgTlVMLCBOVUwgfTsJ LyogRElBTCByZXNwb25zZSBmcm9tIG1vZGVtICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisj aWZkZWYgTlRTSUcKK2V4dGVybiBpbnQgVGxzSW5kZXg7CisjZW5kaWYgLyogTlRTSUcgKi8KKwor aW50IG1kbXR5cCA9IG5fR0VORVJJQzsJCQkvKiBEZWZhdWx0IG1vZGVtIHR5cGUgKi8KK2ludCBt ZG1zZXQgPSAwOwkJCQkvKiBVc2VyIGV4cGxpY2l0bHkgc2V0IGEgbW9kZW0gdHlwZSAqLworCitp bnQJCQkJCS8qIFNFVCBESUFMIHBhcmFtZXRlcnMgKi8KKyAgZGlhbGhuZyA9IDEsCQkJCS8qIERJ QUwgSEFOR1VQLCBkZWZhdWx0IGlzIE9OICovCisgIGRpYWxkcHkgPSAwLAkJCQkvKiBESUFMIERJ U1BMQVksIGRlZmF1bHQgaXMgT0ZGICovCisgIG1kbXNwZCAgPSAwLAkJCQkvKiBESUFMIFNQRUVE LU1BVENISU5HICgwID0gT0ZGKSAqLworICBtZG1zcGsgID0gMSwJCQkJLyogTU9ERU0gU1BFQUtF UiAqLworICBtZG12b2wgID0gMiwJCQkJLyogTU9ERU0gVk9MVU1FICovCisgIGRpYWx0bW8gPSAw LAkJCQkvKiBESUFMIFRJTUVPVVQgKi8KKyAgZGlhbGF0bW8gPSAtMSwJCQkvKiBBTlNXRVIgVElN RU9VVCAqLworICBkaWFsa3NwID0gMCwJCQkJLyogRElBTCBLRVJNSVQtU1BPT0YsIDAgPSBPRkYg Ki8KKyAgZGlhbGlkdCA9IDAsCQkJCS8qIERJQUwgSUdOT1JFLURJQUxUT05FICovCisjaWZuZGVm IENLX1JUU0NUUworICAvKiBJZiB3ZSBjYW4ndCBkbyBSVFMvQ1RTIHRoZW4gdGhlcmUncyBubyBm bG93IGNvbnRyb2wgYXQgZmlyc3QuICAqLworICAvKiBTbyB3ZSBtaWdodCBlYXNpbHkgbG9zZSB0 aGUgZWNobyB0byB0aGUgaW5pdCBzdHJpbmcgYW5kIHRoZSBPSyAqLworICAvKiBhbmQgdGhlbiBn aXZlICJObyByZXNwb25zZSBmcm9tIG1vZGVtIiBlcnJvcnMuICovCisgIGRpYWxwYWNlID0gMTUw LAkJCS8qIERJQUwgUEFDSU5HICovCisjZWxzZQorICBkaWFscGFjZSA9IC0xLAorI2VuZGlmIC8q IENLX1JUU0NUUyAqLworCisgIC8qIDAgPSBSUzIzMiAoZHJvcCBEVFIpOyAxID0gTU9ERU0tQ09N TUFORCAoZS5nLiA8c2VjPisrKzxzZWM+QVRIMCkgKi8KKyAgZGlhbG1odSA9IERFRk1ETUhVUDsJ CQkvKiBNT0RFTSBIQU5HVVAtTUVUSE9EICovCisKK2ludAorICBkaWFsZWMgPSAxLAkJCQkvKiBE SUFMIEVSUk9SLUNPUlJFQ1RJT04gKi8KKyAgZGlhbGRjID0gMSwJCQkJLyogRElBTCBDT01QUkVT U0lPTiAgKi8KKyNpZmRlZiBWTVMKKyAgLyogVk1TIGNhbiBvbmx5IHVzZSBYb24vWG9mZiAqLwor ICBkaWFsZmMgPSBGTE9fWE9OWCwJCQkvKiBESUFMIEZMT1ctQ09OVFJPTCAqLworI2Vsc2UKKyAg ZGlhbGZjID0gRkxPX0FVVE8sCisjZW5kaWYgLyogVk1TICovCisgIGRpYWxtdGggPSBYWURNX0Qs CQkJLyogRElBTCBNRVRIT0QgKFRvbmUsIFB1bHNlLCBEZWZhbHQpICovCisgIGRpYWxtYXV0byA9 IDEsCQkJLyogRElBTCBNRVRIT0QgaXMgQVVUTyAqLworICBkaWFsZXNjID0gMDsJCQkJLyogRElB TCBFU0NBUEUgKi8KKworaW50IHRlbGVwaG9ueSA9IDA7CQkJLyogQ29tbWFuZC1saW5lICctVCcg b3B0aW9uICovCisKK2xvbmcgZGlhbG1heCA9IDBMLAkJCS8qIE1vZGVtJ3MgbWF4IGludGVyZmFj ZSBzcGVlZCAqLworICBkaWFsY2FwYXMgID0gMEw7CQkJLyogTW9kZW0ncyBjYXBhYmlsaXRpZXMg Ki8KKworaW50IGRpYWxzdGEgPSBESUFfVU5LOwkJCS8qIERldGFpbGVkIHJldHVybiBjb2RlIChj a3V1c3IuaCkgKi8KKworI2lmZGVmIENPTU1FTlQKK2ludCBhbnNfY2lkID0gMDsJCQkvKiBTRVQg QU5TV0VSIHBhcmFtZXRlcnMgKi8KK2ludCBhbnNfcmluZ3MgPSAwOwkJCS8qIChub3QgdXNlZCB5 ZXQuLi4pICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCitpbnQgaXNfcm9ja3dlbGwgPSAwOwor aW50IGlzX21vdG9yb2xhID0gMDsKK2ludCBpc19zdXByYSA9IDA7CitpbnQgaXNfaGF5ZXNoaXNw ZCA9IDA7CisKKy8qIERpYWxpbmcgZGlyZWN0b3J5IGxpc3QgKi8KKworY2hhciAqZGlhbGRpcltN QVhERElSXTsJCQkvKiBESUFMIERJUkVDVE9SWSBmaWxlbmFtZSBhcnJheSAqLworaW50ICAgbmRp YWxkaXIgPSAwOwkJCS8qIEhvdyBtYW55IGRpYWwgZGlyZWN0b3JpZXMgKi8KKworLyogVXNlciBv dmVycmlkZXMgZm9yIGJ1aWx0LWluIG1vZGVtIGNvbW1hbmRzICovCisKK2NoYXIgKmRpYWxpbmkg PSBOVUxMOwkJCS8qIE1PREVNIElOSVQtU1RSSU5HIG5vbmUgKi8KK2NoYXIgKmRpYWxtc3RyID0g TlVMTDsJCQkvKiBNT0RFTSBESUFMTU9ERS1TVFJJTkcgKi8KK2NoYXIgKmRpYWxtcHJtdCA9IE5V TEw7CQkJLyogTU9ERU0gRElBTE1PREUtUFJPTVBUICovCitjaGFyICpkaWFsY21kID0gTlVMTDsJ CQkvKiBNT0RFTSBESUFMLUNPTU1BTkQsIGRlZmF1bHQgbm9uZSAqLworY2hhciAqZGlhbG5hbWUg ID0gTlVMTDsJCQkvKiBEZXNjcmlwdGl2ZSBuYW1lIGZvciBtb2RlbSAqLworY2hhciAqZGlhbGRj b24gID0gTlVMTDsJCQkvKiBEQyBPTiBjb21tYW5kICovCitjaGFyICpkaWFsZGNvZmYgPSBOVUxM OwkJCS8qIERDIE9GRiBjb21tYW5kICovCitjaGFyICpkaWFsZWNvbiAgPSBOVUxMOwkJCS8qIEVD IE9OIGNvbW1hbmQgKi8KK2NoYXIgKmRpYWxlY29mZiA9IE5VTEw7CQkJLyogRUMgT0ZGIGNvbW1h bmQgKi8KK2NoYXIgKmRpYWxhYW9uICA9IE5VTEw7CQkJLyogQXV0b2Fuc3dlciBPTiBjb21tYW5k ICovCitjaGFyICpkaWFsYWFvZmYgPSBOVUxMOwkJCS8qIEF1dG9hbnN3ZXIgT0ZGIGNvbW1hbmQg Ki8KK2NoYXIgKmRpYWxoY21kICA9IE5VTEw7CQkJLyogSGFuZ3VwIGNvbW1hbmQgKi8KK2NoYXIg KmRpYWxod2ZjICA9IE5VTEw7CQkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9sIGNvbW1hbmQgKi8K K2NoYXIgKmRpYWxzd2ZjICA9IE5VTEw7CQkJLyogKExvY2FsKSBzb2Z0d2FyZSBmLmMuIGNvbW1h bmQgKi8KK2NoYXIgKmRpYWxub2ZjICA9IE5VTEw7CQkJLyogTm8gKExvY2FsKSBmbG93IGNvbnRy b2wgY29tbWFuZCAqLworY2hhciAqZGlhbHRvbmUgID0gTlVMTDsJCQkvKiBDb21tYW5kIHRvIGZv cmNlIHRvbmUgZGlhbGluZyAqLworY2hhciAqZGlhbHB1bHNlID0gTlVMTDsJCQkvKiAgLi50byBm b3JjZSBwdWxzZSBkaWFsaW5nICovCitjaGFyICpkaWFseDMgICAgPSBOVUxMOwkJCS8qIElnbm9y ZSBkaWFsdG9uZSAqLworY2hhciAqbWRtbmFtZSAgID0gTlVMTDsKK2NoYXIgKmRpYWxzcG9uICA9 IE5VTEw7CQkJLyogU3BlYWtlciBPbiBjb21tYW5kICovCitjaGFyICpkaWFsc3BvZmYgPSBOVUxM OwkJCS8qIFNwZWFrZXIgT2ZmIGNvbW1hbmQgKi8KK2NoYXIgKmRpYWx2b2wxICA9IE5VTEw7CQkJ LyogVm9sdW1lIExvdyBjb21tYW5kICovCitjaGFyICpkaWFsdm9sMiAgPSBOVUxMOwkJCS8qIFZv bHVtZSBNZWRpdW0gY29tbWFuZCAqLworY2hhciAqZGlhbHZvbDMgID0gTlVMTDsJCQkvKiBWb2x1 bWUgSGlnaCBjb21tYW5kICovCitjaGFyICpkaWFsaW5pMiAgPSBOVUxMOwkJCS8qIFNlY29uZCBp bml0IHN0cmluZyAqLworCisvKiBQaG9uZSBudW1iZXIgb3B0aW9ucyAqLworCitjaGFyICpkaWFs bnByID0gTlVMTDsJCQkvKiBESUFMIFBSRUZJWCwgZGl0dG8gKi8KK2NoYXIgKmRpYWxsYWMgPSBO VUxMOwkJCS8qIERJQUwgTE9DQUwtQVJFQS1DT0RFLCBkaXR0byAqLworY2hhciAqZGlhbGxjYyA9 IE5VTEw7CQkJLyogRElBTCBMT0NBTC1DT1VOVFJZLUNPREUsIGRpdHRvICovCitjaGFyICpkaWFs aXhwID0gTlVMTDsJCQkvKiBESUFMIElOVEwtUFJFRklYICovCitjaGFyICpkaWFsaXhzID0gTlVM TDsJCQkvKiBESUFMIElOVEwtU1VGRklYICovCitjaGFyICpkaWFsbGRwID0gTlVMTDsJCQkvKiBE SUFMIExELVBSRUZJWCAqLworY2hhciAqZGlhbGxkcyA9IE5VTEw7CQkJLyogRElBTCBMRC1TVUZG SVggKi8KK2NoYXIgKmRpYWxsY3AgPSBOVUxMOwkJCS8qIERJQUwgTE9DQUwtUFJFRklYICovCitj aGFyICpkaWFsbGNzID0gTlVMTDsJCQkvKiBESUFMIExPQ0FMLVNVRkZJWCAqLworY2hhciAqZGlh bHB4aSA9IE5VTEw7CQkJLyogRElBTCBQQlgtSU5URVJOQUwtUFJFRklYICovCitjaGFyICpkaWFs cHhvID0gTlVMTDsJCQkvKiBESUFMIFBCWC1PVVRTSURFLVBSRUZJWCAqLworY2hhciAqZGlhbHNm eCA9IE5VTEw7CQkJLyogRElBTCBTVUZGSVggKi8KK2NoYXIgKmRpYWx0ZnAgPSBOVUxMOwkJCS8q IERJQUwgVE9MTC1GUkVFLVBSRUZJWCAqLworCitjaGFyICpjYWxsaWRfZGF0ZSA9IE5VTEw7CQkv KiBDYWxsZXIgSUQgc3RyaW5ncyAqLworY2hhciAqY2FsbGlkX3RpbWUgPSBOVUxMOworY2hhciAq Y2FsbGlkX25hbWUgPSBOVUxMOworY2hhciAqY2FsbGlkX25tYnIgPSBOVUxMOworY2hhciAqY2Fs bGlkX21lc2cgPSBOVUxMOworCitleHRlcm4gY2hhciAqIGRfbmFtZTsKK2V4dGVybiBjaGFyICog ZGlhbHRmY1tdOwkJLyogRElBTCBUT0xMLUZSRUUtQVJFQS1DT0RFICovCitleHRlcm4gY2hhciAq IGRpYWxweHhbXTsJCS8qIERJQUwgUEJYLUVYQ0hBTkdFICovCitleHRlcm4gaW50IG50b2xsZnJl ZTsKK2V4dGVybiBpbnQgbmRpYWxweHg7CisKK2V4dGVybiBjaGFyICogZGlhbHB1Y2NbXTsJCS8q IERJQUwgUHVsc2UgY291bnRyaWVzICovCitleHRlcm4gaW50IG5kaWFscHVjYzsKK2V4dGVybiBj aGFyICogZGlhbHRvY2NbXTsJCS8qIERJQUwgVG9uZSBjb3VudHJpZXMgKi8KK2V4dGVybiBpbnQg bmRpYWx0b2NjOworCitjaGFyICpkaWFsbWFjICAgPSBOVUxMOwkJCS8qIERJQUwgbWFjcm8gKi8K KworLyogQ291bnRyaWVzIHdoZXJlIHB1bHNlIGRpYWxpbmcgbXVzdCBiZSB1c2VkICh0b25lIGlz IG5vdCBhdmFpbGFibGUpICovCitzdGF0aWMgY2hhciAqIHB1bHNlY2NbXSA9IHsgTlVMTCB9Owkv KiAoVW5rbm93biBhdCBwcmVzZW50KSAqLworCisvKiBDb3VudHJpZXMgd2hlcmUgdG9uZSBkaWFs aW5nIG1heSBzYWZlbHkgYmUgdGhlIGRlZmF1bHQuICovCisvKiAiKyIgbWFya3MgY291bnRyaWVz IHdoZXJlIHB1bHNlIGlzIGFsc28gYWxsb3dlZC4gKi8KKy8qIEJvdGggUHVsc2UgYW5kIFRvbmUg YXJlIGFsbG93ZWQgaW4gQXVzdHJpYSAmIFN3aXR6ZXJsYW5kIGJ1dCBpdCBpcyBub3QgKi8KKy8q IHlldCBrbm93biBpZiBUb25lIGlzIHVuaXZlcnNhbGx5IGluIHRob3NlIGNvdW50cmllcy4gKi8K K3N0YXRpYyBjaGFyICogdG9uZWNjW10gPSB7CisgICAgIjEiLAkJCQkvKiArIE5vcnRoIEFtZXJp Y2FuIE51bWJlcmluZyBQbGFuICovCisgICAgIjMxIiwJCQkJLyogICBOZXRoZXJsYW5kcyAqLwor ICAgICIzMiIsCQkJCS8qICAgQmVsZ2l1bSAqLworICAgICIzMyIsCQkJCS8qICAgRnJhbmNlICov CisgICAgIjM1MiIsCQkJCS8qICAgTHV4ZW1ib3VyZyAqLworICAgICIzNTMiLAkJCQkvKiAgIEly ZWxhbmQgKi8KKyAgICAiMzU0IiwJCQkJLyogICBJY2VsYW5kICovCisgICAgIjM1OCIsCQkJCS8q ICAgRmlubGFuZCAqLworICAgICIzOSIsCQkJCS8qICAgSXRhbHkgKi8KKyAgICAiNDQiLAkJCQkv KiArIFVLICovCisgICAgIjQ1IiwJCQkJLyogICBEZW5tYXJrICovCisgICAgIjQ2IiwJCQkJLyog ICBTd2VkZW4gKi8KKyAgICAiNDciLAkJCQkvKiAgIE5vcndheSAqLworICAgICI0OSIsCQkJCS8q ICsgR2VybWFueSAqLworICAgIE5VTEwKK307CisKKyNpZm5kZWYgTUlOSURJQUwKKy8qCisgIFRl bGViaXQgbW9kZWwgY29kZXM6CisKKyAgQVRJICBNb2RlbCBOdW1iZXJzICAgICAgICAgICBFeGFt cGxlcworICAtLS0gIC0tLS0tLS0tLS0tLS0gICAgICAgICAgIC0tLS0tLS0tCisgIDEyMyAgICAg ICAgICAgICAgICAgICAgICAgICAgVGVsZWJpdCBpbiAidG90YWwgSGF5ZXMtMTIwMCIgZW11bGF0 aW9uIG1vZGUKKyAgOTYwICAgICAgICAgICAgICAgICAgICAgICAgICBUZWxlYml0IGluIENvbnZl bnRpb25hbCBDb21tYW5kIChIYXllcykgbW9kZQorICA5NjEgIFJBMTJDICAgICAgICAgICAgICAg ICAgIElCTSBQQyBpbnRlcm5hbCBvcmlnaW5hbCBUcmFpbGJsYXplcgorICA5NjIgIFJBMTJFICAg ICAgICAgICAgICAgICAgIEV4dGVybmFsIG9yaWdpbmFsIFRyYWlsYmxhemVyCisgIDk2MyAgUk0x MkMgICAgICAgICAgICAgICAgICAgUmFja21vdW50IG9yaWdpbmFsIFRyYWlsYmxhemVyCisgIDk2 NCAgVDE4UEMgICAgICAgICAgICAgICAgICAgSUJNIFBDIGludGVybmFsIFRyYWlsYmxhemVyLVBs dXMgKFRCKykKKyAgOTY1ICBUMThTQSwgVDJTQUEsIFQyU0FTICAgICBFeHRlcm5hbCBUQissIFQx NjAwLCBUMjAwMCwgVDMwMDAsIFdCLCBhbmQgbGF0ZXIKKyAgOTY2ICBUMThSTU0gICAgICAgICAg ICAgICAgICBSYWNrbW91bnQgVEIrCisgIDk2NyAgVDJNQyAgICAgICAgICAgICAgICAgICAgSUJN IFBTLzIgaW50ZXJuYWwgVEIrCisgIDk2OCAgVDEwMDAgICAgICAgICAgICAgICAgICAgRXh0ZXJu YWwgVDEwMDAKKyAgOTY5ICA/ICAgICAgICAgICAgICAgICAgICAgICBRYmxhemVyCisgIDk3MCAg ICAgICAgICAgICAgICAgICAgICAgICAgUWJsYXplciBQbHVzCisgIDk3MSAgVDI1MDAgICAgICAg ICAgICAgICAgICAgRXh0ZXJuYWwgVDI1MDAKKyAgOTcyICBUMjUwMCAgICAgICAgICAgICAgICAg ICBSYWNrbW91bnQgVDI1MDAKKyovCisKKy8qIFRlbGViaXQgbW9kZWwgY29kZXMgKi8KKworI2Rl ZmluZSBUQl9VTksgIDAJCQkvKiBVbmtub3duIFRlbGViaXQgbW9kZWwgKi8KKyNkZWZpbmUgVEJf QkxBWiAxCQkJLyogT3JpZ2luYWwgVHJhaWxCbGF6ZXIgKi8KKyNkZWZpbmUgVEJfUExVUwkyCQkJ LyogVHJhaWxCbGF6ZXIgUGx1cyAqLworI2RlZmluZSBUQl8xMDAwIDMJCQkvKiBUMTAwMCAqLwor I2RlZmluZSBUQl8xNTAwIDQJCQkvKiBUMTUwMCAqLworI2RlZmluZSBUQl8xNjAwIDUJCQkvKiBU MTYwMCAqLworI2RlZmluZSBUQl8yMDAwIDYJCQkvKiBUMjAwMCAqLworI2RlZmluZSBUQl8yNTAw IDcJCQkvKiBUMjUwMCAqLworI2RlZmluZSBUQl8zMDAwIDgJCQkvKiBUMzAwMCAqLworI2RlZmlu ZSBUQl9RQkxBIDkJCQkvKiBRYmxhemVyICovCisjZGVmaW5lIFRCX1dCTEEgMTAJCQkvKiBXb3Js ZEJsYXplciAqLworI2RlZmluZSBUQl9fTUFYIDEwCQkJLyogSGlnaGVzdCBudW1iZXIgKi8KKwor Y2hhciAqdGJfbmFtZVtdID0gewkJCS8qIEFycmF5IG9mIG1vZGVsIG5hbWVzICovCisgICAgIlVu a25vd24iLAkJCQkvKiBUQl9VTksgICovCisgICAgIlRyYWlsQmxhemVyIiwJCQkvKiBUQl9CTEFa ICovCisgICAgIlRyYWlsQmxhemVyLVBsdXMiLAkJCS8qIFRCX1BMVVMgKi8KKyAgICAiVDEwMDAi LAkJCQkvKiBUQl8xMDAwICovCisgICAgIlQxNTAwIiwJCQkJLyogVEJfMTUwMCAqLworICAgICJU MTYwMCIsCQkJCS8qIFRCXzE2MDAgKi8KKyAgICAiVDIwMDAiLAkJCQkvKiBUQl8yMDAwICovCisg ICAgIlQyNTAwIiwJCQkJLyogVEJfMjUwMCAqLworICAgICJUMzAwMCIsCQkJCS8qIFRCXzMwMDAg Ki8KKyAgICAiUWJsYXplciIsCQkJCS8qIFRCX1FCTEEgKi8KKyAgICAiV29ybGRCbGF6ZXIiLAkJ CS8qIFRCX1dCTEEgKi8KKyAgICAiIgorfTsKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCitleHRl cm4gaW50IGZsb3csIGxvY2FsLCBtZG10eXAsIHF1aWV0LCBiYWNrZ3JkLCBwYXJpdHksIHNlc2xv ZywgbmV0d29yazsKK2V4dGVybiBpbnQgY2FycmllciwgZHVwbGV4LCBtZG1zYXYsIHJlbGlhYmxl LCBzZXRyZWxpYWJsZTsKK2V4dGVybiBpbnQgdHRucHJvdG8sIG5ldHR5cGU7CitleHRlcm4gbG9u ZyBzcGVlZDsKK2V4dGVybiBjaGFyIHR0bmFtZVtdLCBzZXNmaWxbXTsKKyNpZm5kZWYgTk9YRkVS CitleHRlcm4gQ0hBUiBzdGNocjsKK2V4dGVybiBpbnQgaW50ZXJydXB0ZWQ7CisjZW5kaWYgLyog Tk9YRkVSICovCisKKy8qICBGYWlsdXJlIGNvZGVzICAqLworCisjZGVmaW5lIEZfVElNRQkJMQkJ LyogdGltZW91dCAqLworI2RlZmluZSBGX0lOVAkJMgkJLyogaW50ZXJydXB0ICovCisjZGVmaW5l IEZfTU9ERU0JCTMJCS8qIG1vZGVtLWRldGVjdGVkIGZhaWx1cmUgKi8KKyNkZWZpbmUgRl9NSU5J VAkJNAkJLyogY2Fubm90IGluaXRpYWxpemUgbW9kZW0gKi8KKworI2lmbmRlZiBDS19UQVBJCitz dGF0aWMKKyNlbmRpZiAvKiBDS19UQVBJICovCisjaWZkZWYgT1MyCisgdm9sYXRpbGUKKyNlbmRp ZiAvKiBPUzIgKi8KKyBpbnQgZmFpbF9jb2RlID0gIDA7CQkJLyogRGVmYXVsdCBmYWlsdXJlIHJl YXNvbi4gKi8KKworc3RhdGljIGludCB4cmVkaWFsID0gMDsKK3N0YXRpYyBpbnQgZnVuY19jb2Rl OwkJCS8qIDAgPSBkaWFsaW5nLCBub256ZXJvID0gYW5zd2VyaW5nICovCitzdGF0aWMgaW50IHBh cnRpYWw7CitzdGF0aWMgaW50IG15bWRtdHlwID0gMDsKKworI2RlZmluZSBEV19OT1RISU5HICAg ICAgMAkJLyogV2hhdCB3ZSBhcmUgZG9pbmcgKi8KKyNkZWZpbmUgRFdfSU5JVCAgICAgICAgIDEK KyNkZWZpbmUgRFdfRElBTCAgICAgICAgIDIKKworc3RhdGljIGludCBkaWFsX3doYXQgPSBEV19O T1RISU5HOwkvKiBOb3RoaW5nIGF0IGZpcnN0LiAqLworc3RhdGljIGludCBub252ZXJiYWwgPSAw OwkJLyogSGF5ZXMgaW4gbnVtZXJpYyByZXNwb25zZSBtb2RlICovCitzdGF0aWMgTURNSU5GICog bXA7CitzdGF0aWMgQ0hBUiBlc2NidWZbNl07CitzdGF0aWMgbG9uZyBtZG1jYXBhczsKKworX1BS T1RPVFlQIChzdGF0aWMgVk9JRCBkcmVzZXQsICh2b2lkKSApOworX1BST1RPVFlQIChzdGF0aWMg aW50ICgqeHhfb2spLCAoaW50LGludCkgKTsKK19QUk9UT1RZUCAoc3RhdGljIGludCBkZGluYywg KGludCkgKTsKK19QUk9UT1RZUCAoaW50IGRpYWxodXAsICh2b2lkKSApOworX1BST1RPVFlQIChp bnQgZ2V0b2ssIChpbnQsaW50KSApOworX1BST1RPVFlQIChjaGFyICogY2tfdGltZSwgKHZvaWQp ICk7CitfUFJPVE9UWVAgKHN0YXRpYyBWT0lEIHR0c2xvdywgKGNoYXIgKiwgaW50KSApOworI2lm ZGVmIENPTU1FTlQKK19QUk9UT1RZUCAoc3RhdGljIFZPSUQgeGNweSwgKGNoYXIgKiwgY2hhciAq LCB1bnNpZ25lZCBpbnQpICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworX1BST1RPVFlQIChzdGF0 aWMgVk9JRCB3YWl0Zm9yLCAoY2hhciAqKSApOworX1BST1RPVFlQIChzdGF0aWMgVk9JRCBkaWFs b2MsIChjaGFyKSApOworX1BST1RPVFlQIChzdGF0aWMgaW50IGRpZHdlZ2V0LCAoY2hhciAqLCBj aGFyICopICk7CitfUFJPVE9UWVAgKHN0YXRpYyBWT0lEIHNwZGNoZywgKGxvbmcpICk7CitfUFJP VE9UWVAgKHN0YXRpYyBpbnQgZGlhbGZhaWwsIChpbnQpICk7CitfUFJPVE9UWVAgKHN0YXRpYyBW T0lEIGdldGhydywgKHZvaWQpICk7CitfUFJPVE9UWVAgKHN0YXRpYyBWT0lEIGdldGhybiwgKHZv aWQpICk7CisKK2ludCBkaWFsdWR0ID0gbl9VREVGOwkJCS8qIE51bWJlciBvZiB1c2VyLWRlZmlu ZWQgdHlwZSAqLworCisvKiBCRUdJTiBNRE1JTkYgU1RSVUNUIERFRklOSVRJT05TICovCisKKy8q CisgIERlY2xhcmUgc3RydWN0dXJlcyBjb250YWluaW5nIG1vZGVtLXNwZWNpZmljIGluZm9ybWF0 aW9uLgorICBSRU1FTUJFUiB0aGF0IG9ubHkgdGhlIGZpcnN0IFNFVkVOIGNoYXJhY3RlcnMgb2Yg dGhlc2UgbmFtZXMgYXJlCisgIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlLgorCisgIEZpcnN0IGRl Y2xhcmUgdGhlIHRocmVlIHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIE1JTklESUFMIHZlcnNp b25zLgorKi8KK3N0YXRpYworTURNSU5GIENDSVRUID0JCQkJLyogQ0NJVFQgLyBJVFUtVCBWLjI1 YmlzIGF1dG9kaWFsZXIgKi8KKy8qCisgIEFjY29yZGluZyB0byBWLjI1YmlzOgorICAuIEV2ZW4g cGFyaXR5IGlzIHJlcXVpcmVkIGZvciBnaXZpbmcgY29tbWFuZHMgdG8gdGhlIG1vZGVtLgorICAu IENvbW1hbmRzIG1pZ2h0IG9yIG1pZ2h0IG5vdCBlY2hvLgorICAuIFJlc3BvbnNlcyAoIkluZGlj YXRpb25zIikgZnJvbSB0aGUgbW9kZW0gYXJlIHRlcm1pbmF0ZWQgYnkgQ1IgYW5kIExGLgorICAu IENhbGwgc2V0dXAgaXMgYWNjb21wbGlzaGVkIGJ5OgorICAgIC0gRFRFIHJhaXNlcyBEVFIgKFYu MjQgY2lyY3VpdCAxMDgpICAgICAgICAgICAgICBbdHRvcGVuKCkgZG9lcyB0aGlzXQorICAgIC0g TW9kZW0gcmFpc2VzIENUUyAoVi4yNCBjaXJjdWl0IDEwNikgICAgICAgICAgICBbQy1LZXJtaXQg aWdub3JlcyB0aGlzXQorICAgIC0gRFRFIGlzc3VlcyBhIGNhbGwgcmVxdWVzdCBjb21tYW5kICgi Q1JOIikKKyAgICAtIE1vZGVtIHJlc3BvbmRzIHdpdGggIlZBTCIgKCJjb21tYW5kIGFjY2VwdGVk IikKKyAgICAtIElmIHRoZSBjYWxsIGlzIGNvbXBsZXRlZDoKKyAgICAgICAgbW9kZW0gcmVzcG9u ZHMgd2l0aCAiQ05YIiAoImNhbGwgY29ubmVjdGVkIik7CisgICAgICAgIG1vZGVtIHR1cm5zIENU UyAoMTA2KSBPRkY7CisgICAgICAgIG1vZGVtIHR1cm5zIERTUiAoMTA3KSBPTjsKKyAgICAgIGVs c2U6CisgICAgICAgIG1vZGVtIHJlc3BvbmRzIHdpdGggIkNGSSA8cGFyYW1ldGVyPiIgKCJjYWxs IGZhaWx1cmUgaW5kaWNhdGlvbiIpLgorICAuIFRvIGNsZWFyIGEgY2FsbCwgdGhlIERURSB0dXJu cyBEVFIgKDEwOCkgT0ZGLgorICAuIFRoZXJlIGlzIG5vIG1lbnRpb24gb2YgdGhlIENhcnJpZXIg RGV0ZWN0IGNpcmN1aXQgKDEwOSkgaW4gdGhlIHN0YW5kYXJkLgorICAuIFRoZXJlIGlzIG5vIHBy b3Zpc2lvbiBmb3IgImVzY2FwaW5nIGJhY2siIHRvIHRoZSBtb2RlbSdzIGNvbW1hbmQgbW9kZS4K KworICBJdCBpcyBub3Qga25vd24gd2hldGhlciB0aGVyZSBleGlzdHMgaW4gcmVhbCBsaWZlIGEg cHVyZSBWLjI1YmlzIG1vZGVtLgorICBJZiB0aGVyZSBpcywgdGhpcyBjb2RlIGhhcyBuZXZlciBi ZWVuIHRlc3RlZCBvbiBpdC4gIFNlZSB0aGUgRGlnaXRlbCBlbnRyeS4KKyovCisgICAgeworICAg ICJBbnkgQ0NJVFQgLyBJVFUtVCBWLjI1YmlzIGNvbmZvcm1hbnQgbW9kZW0iLAorICAgICIiLAkJ CS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICA0 MCwJCQkvKiBkaWFsX3RpbWUgLS0gcHJvZ3JhbW1hYmxlIC0tICovCisgICAgIiw6IiwJCS8qIHBh dXNlX2NoYXJzIC0tICIsIiB3YWl0cyBmb3IgcHJvZ3JhbW1hYmxlIHRpbWUgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIC8qICI6IiB3YWl0cyBmb3IgZGlhbCB0b25lICovCisgICAgMTAsCQkJ LyogcGF1c2VfdGltZSAoc2Vjb25kcywganVzdCBhIGd1ZXNzKSAqLworICAgICIiLAkJCS8qIHdh a2Vfc3RyIChub25lKSAqLworICAgIDIwMCwJCS8qIHdha2VfcmF0ZSAobXNlYykgKi8KKyAgICAi VkFMIiwJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJLyogZG1vZGVfc3RyIChub25lKSAq LworICAgICIiLAkJCS8qIGRtb2RlX3Byb21wdCAobm9uZSkgKi8KKyAgICAiQ1JOJXNcMDE1Iiwg ICAgICAgIC8qIGRpYWxfc3RyICovCisgICAgMjAwLAkJLyogZGlhbF9yYXRlIChtc2VjKSAqLwor ICAgIDAsCQkJLyogTm8gZXNjX3RpbWUgKi8KKyAgICAwLAkJCS8qIE5vIGVzY19jaGFyICAqLwor ICAgICIiLAkJCS8qIE5vIGh1cF9zdHIgICovCisgICAgIiIsCQkJLyogaHdmY19zdHIgKi8KKyAg ICAiIiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICIiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIiIs CQkJLyogZWNfb25fc3RyICovCisgICAgIiIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJ CS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQ0lDXDAx NSIsCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiRElDXDAxNSIsCQkvKiBhYV9vZmZfc3RyICovCisg ICAgIiIsCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAg ICIiLAkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAi IiwJCQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCS8qIHZvbDJfc3RyICovCisgICAgIiIsCQkJ Lyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCS8qIGlu aTIgKi8KKyAgICAwTCwJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfVjI1LAkJLyogY2FwYXMg Ki8KKyAgICBOVUxMCQkvKiBObyBva19mbiAgICAqLworfTsKKworc3RhdGljCitNRE1JTkYgSEFZ RVMgPQkJCQkvKiBIYXllcyAyNDAwIGFuZCBjb21wYXRpYmxlIG1vZGVtcyAqLworICAgIHsKKyAg ICAiSGF5ZXMgU21hcnRtb2RlbSAyNDAwIGFuZCBjb21wYXRpYmxlcyIsCisgICAgIkFUUFwwMTUi LAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1h bmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2Vf Y2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJB VEUxUTBWMSZTMCZDMSZEMlwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1T CisgICAgIkFUUTAmUzFcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMFww MTUiLAkJCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAq LworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9w cm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1v ZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIsIHVzZXIgc3VwcGxp ZXMgRCBvciBUICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8q IGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1 IiwJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIiLAkJ CQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIsCQkJ CQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJB VFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFf b2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBz Yl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFU TTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFf c3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUi LAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisg ICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMjQwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAg IENLRF9BVCwJCQkJLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKwor LyoKKyAgVGhlIGludGVudCBvZiB0aGUgInVua25vd24iIG1vZGVtIGlzIHRvIGFsbG93IEtFUk1J VCB0byBzdXBwb3J0CisgIHVua25vd24gbW9kZW1zIGJ5IGhhdmluZyB0aGUgdXNlciB0eXBlIHRo ZSBlbnRpcmUgYXV0b2RpYWwgc2VxdWVuY2UKKyAgKHBvc3NpYmx5IGluY2x1ZGluZyBjb250cm9s IGNoYXJhY3RlcnMsIGV0Yy4pIGFzIHRoZSAicGhvbmUgbnVtYmVyIi4KKyAgVGhlIHByb3RvY29s IGFuZCBvdGhlciBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhpcyBtb2RlbSBhcmUgdW5rbm93biwgd2l0 aAorICBzb21lICJyZWFzb25hYmxlIiB2YWx1ZXMgYmVpbmcgY2hvc2VuIGZvciBzb21lIG9mIHRo ZW0uICBUaGUgb25seSB3YXkgdG8KKyAgZGV0ZWN0IGlmIGEgY29ubmVjdGlvbiBpcyBtYWRlIGlz IHRvIGxvb2sgZm9yIGNhcnJpZXIuCisqLworc3RhdGljCitNRE1JTkYgVU5LTk9XTiA9CQkJLyog SW5mb3JtYXRpb24gZm9yICJVbmtub3duIiBtb2RlbSAqLworICAgIHsKKyAgICAiVW5rbm93biIs CQkJCS8qIG5hbWUgKi8KKyAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJ CQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDMwLAkJCQkJLyogZGlhbF90aW1lICovCisgICAg IiIsCQkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDAsCQkJCQkvKiBwYXVzZV90aW1lICovCisg ICAgIiIsCQkJCQkvKiB3YWtlX3N0ciAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAg ICAiIiwJCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8K KyAgICBOVUxMLAkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiJXNcMDE1IiwJCQkJLyogZGlh bF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMCwJCQkJCS8qIGVzY190 aW1lICovCisgICAgMCwJCQkJCS8qIGVzY19jaGFyICovCisgICAgIiIsCQkJCQkvKiBodXBfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogc3dmY19zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vbl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29uX3N0 ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb25f c3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9v bl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNw X29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyog dm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAgIiIsCQkJCQkvKiB2 b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGlu aTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLworICAgIDAsCQkJCQkvKiBjYXBhcyAq LworICAgIE5VTEwJCQkJLyogb2tfZm4gKi8KK307CisKKyNpZm5kZWYgTUlOSURJQUwKK3N0YXRp YworTURNSU5GIEFUVElTTiA9CQkJCS8qIEFUJlQgSVNOIE5ldHdvcmsgKi8KKyAgICB7CisgICAg IiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQg Ki8KKyAgICAiQVQmVCBJU04gTmV0d29yayIsCisgICAgMzAsCQkJCQkvKiBEaWFsIHRpbWUgKi8K KyAgICAiIiwJCQkJCS8qIFBhdXNlIGNoYXJhY3RlcnMgKi8KKyAgICAwLAkJCQkJLyogUGF1c2Ug dGltZSAqLworICAgICJcMDE1XDAxNVwwMTVcMDE1IiwJCQkvKiBXYWtlIHN0cmluZyAqLworICAg IDkwMCwJCQkJLyogV2FrZSByYXRlICovCisgICAgIkRJQUwiLAkJCQkvKiBXYWtlIHByb21wdCAq LworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9t cHQgKi8KKyAgICAiJXNcMDE1IiwJCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlh bF9yYXRlICovCisgICAgMCwJCQkJCS8qIGVzY190aW1lICovCisgICAgMCwJCQkJCS8qIGVzY19j aGFyICovCisgICAgIiIsCQkJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0 ciAqLworICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2Zm X3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9v ZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNi X29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHZvbDJfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyog aWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9z cGVlZCAqLworICAgIDAsCQkJCQkvKiBjYXBhcyAqLworICAgIE5VTEwJCQkJLyogb2tfZm4gKi8K K307CisKK3N0YXRpYworTURNSU5GIEFUVE1PREVNID0JLyogaW5mb3JtYXRpb24gZm9yIEFUJlQg c3dpdGNoZWQtbmV0d29yayBtb2RlbXMgKi8KKwkJCS8qICJOdW1iZXIiIGZvbGxvd2luZyAiZGlh bCIgY2FuIGluY2x1ZGU6IHAncyBhbmQKKwkJCSAqIHQncyB0byBpbmRpY2F0ZSBwdWxzZSBvciB0 b25lIChkZWZhdWx0KSBkaWFsaW5nLAorCQkJICogKyBmb3Igd2FpdCBmb3IgZGlhbCB0b25lLCAs IGZvciBwYXVzZSwgciBmb3IKKwkJCSAqIGxhc3QgbnVtYmVyIGRpYWxlZCwgYW5kLCBleGNlcHQg Zm9yIDIyMjRCLCBzb21lCisJCQkgKiBjb21tYS1kZWxpbWl0ZWQgb3B0aW9ucyBsaWtlIG8xMj15 LCBiZWZvcmUgbnVtYmVyLgorCisgKiAiSW1wb3J0YW50IiBvcHRpb25zIGZvciB0aGUgbW9kZW1z OgorICoKKyAqCUFsbDoJCUV4Y2VwdCBmb3IgMjIyNEIsIGVuYWJsZSBvcHRpb24gMTIgZm9yICJ0 cmFuc3BhcmVudAorICoJCQlkYXRhLCIgbzEyPXkuICBJZiBhIGNvbXB1dGVyIHBvcnQgdXNlZCBm b3IgYm90aAorICoJCQlpbmNvbWluZyBhbmQgb3V0Z29pbmcgY2FsbHMgaXMgY29ubmVjdGVkIHRv IHRoZQorICoJCQltb2RlbSwgZGlzYWJsZSAiZW50ZXIgaW50ZXJhY3RpdmUgbW9kZSBvbiBjYXJy aWFnZQorICoJCQlyZXR1cm4sIiBFSUNSLiAgVGhlIEtlcm1pdCAiZGlhbCIgY29tbWFuZCBjYW4K KyAqCQkJZnVuY3Rpb24gd2l0aCBFSUEgbGVhZHMgc3RhbmRhcmQsIEVJQVMuCisgKgorICoJMjIx MkM6CQlJbnRlcm5hbCBoYXJkd2FyZSBzd2l0Y2hlcyBhdCB0aGVpciBkZWZhdWx0CisgKgkJCXBv c2l0aW9ucyAoZm91ciByb2NrZXJzIGRvd24gYXdheSBmcm9tIG51bWJlcnMpCisgKgkJCXVubGVz cyBFSUNSIGlzIG5vdCB3YW50ZWQgKHJvY2tlciBkb3duIGF0IHRoZSA0KS4KKyAqCQkJRm9yIEVJ QVMsIHJvY2tlciBkb3duIGF0IHRoZSAxLgorICoKKyAqCTIyMjRCOgkJRnJvbnQtcGFuZWwgc3dp dGNoIHBvc2l0aW9uIDEgbXVzdCBiZSB1cCAoYXQgdGhlIDEsCisgKgkJCWNsb3NlZCkuICBEaXNh YmxlIEVJQ1Igd2l0aCBwb3NpdGlvbiAyIGRvd24uCisgKgkJCUZvciBFSUFTLCBwb3NpdGlvbiA0 IGRvd24uCisgKgkJCUFsbCBzd2l0Y2hlcyBvbiB0aGUgYmFjayBwYW5lbCBkb3duLgorICoKKyAq CTIyMjRDRU86CUFsbCBmcm9udC1wYW5lbCBzd2l0Y2hlcyBkb3duIGV4Y2VwdCBlaXRoZXIgNSBv ciA2LgorICoJCQlFbmFibGUgaW50ZXJhY3RpdmUgZmxvdyBjb250cm9sIHdpdGggbzE2PXkuCisg KgkJCVNlbGVjdCBub3JtYWwgYXN5bmNocm9ub3VzIG1vZGUgd2l0aCBvMzQ9MCAoemVybykuCisg KgkJCURpc2FibGUgRUlDUiB3aXRoIHBvc2l0aW9uIDMgdXAuICBGb3IgRUlBUywgMSB1cC4KKyAq CQkJUmVzZXQgdGhlIG1vZGVtIGFmdGVyIGNoYW5naW5nIHN3aXRjaGVzLgorICoKKyAqCTIyOTZB OgkJSWYgb3B0aW9uIDAwICh6ZXJvcykgaXMgcHJlc2VudCwgdXNlIG8wMD0wLgorICoJCQlFbmFi bGUgaW50ZXJhY3RpdmUgZmxvdyBjb250cm9sIHdpdGggbzE2PXkuCisgKgkJCVNlbGVjdCBub3Jt YWwgYXN5bmNocm9ub3VzIG1vZGUgd2l0aCBvMzQ9MCAoemVybykuCisgKiAgICAgICAgICAgICAg ICAgICAgICAoYXZhaWxhYmxlIGluIE1pY3JvY29tIE5ldHdvcmtpbmcgdmVyc2lvbiwgYnV0Cisg KiAgICAgICAgICAgICAgICAgICAgICBub3QgbmVjZXNzYXJpbHkgb3RoZXIgbW9kZWxzIG9mIHRo ZSAyMjk2QSkuCisgKgkJCUVuYWJsZSBtb2RlbS1wb3J0IGZsb3cgY29udHJvbCAoaWYgYXZhaWxh YmxlKSB3aXRoCisgKiAJCQlvNDI9eS4gIEVuYWJsZSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHdp dGggbzUwPXkuCisgKiAJCQlEaXNhYmxlIEVJQ1Igd2l0aCBvNjk9bi4gIEZvciBFSUFTLCBvNjY9 biwgdXNpbmcKKyAqIAkJCWZyb250IHBhbmVsLgorICovCisgICAgeworICAgIkFUJlQgc3dpdGNo ZWQtbmV0d29yayBtb2RlbXMiLAorICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAg ICIiLAkJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMjAsCQkJCQkvKiBkaWFsX3RpbWUgKi8K KyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUg Ki8KKyAgICAiKyIsCQkJCS8qIHdha2Vfc3RyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAq LworICAgICIiLAkJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0 ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgImF0JXNcMDE1IiwJCQkJ LyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMCwJCQkJCS8q IGVzY190aW1lICovCisgICAgMCwJCQkJCS8qIGVzY19jaGFyICovCisgICAgIiIsCQkJCQkvKiBo dXBfc3RyICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogc3dm Y19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19v bl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRj X29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyog YWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkv KiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLworICAgICIiLAkJ CQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAgIiIsCQkJ CQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJ CS8qIGluaTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVCwJCQkJ LyogY2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlO RiBBVFREVERNID0gLyogQVQmVCBEaWdpdGFsIFRlcm1pbmFsIERhdGEgTW9kdWxlICAqLworCQkg LyogRm9yIGRpYWxpbmc6IEtZQkQgc3dpdGNoIGRvd24sIG90aGVycyB1c3VhbGx5IHVwLiAqLwor ICAgIHsKKyAgICAiQVQmVCBEaWdpdGFsIFRlcm1pbmFsIERhdGEgTW9kdWxlIiwKKyAgICAiIiwJ CQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLwor ICAgIDIwLAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiIsCQkJCQkvKiBwYXVzZV9jaGFycyAq LworICAgIDAsCQkJCQkvKiBwYXVzZV90aW1lICovCisgICAgIiIsCQkJCQkvKiB3YWtlX3N0ciAq LworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiIiwJCQkJCS8qIHdha2VfcHJvbXB0 ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3By b21wdCAqLworICAgICIlc1wwMTUiLAkJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBk aWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KKyAgICAwLAkJCQkJLyogZXNj X2NoYXIgKi8KKyAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGh3ZmNf c3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogbm9mY19z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb2Zm X3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19v ZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFh X29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyog c2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc3Bfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJ Lyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCisgICAgIiIsCQkJCQkv KiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDBMLAkJCQkJLyogbWF4 X3NwZWVkICovCisgICAgMCwJCQkJCS8qIGNhcGFzICovCisgICAgTlVMTAkJCQkvKiBva19mbiAq LworfTsKKworc3RhdGljCitNRE1JTkYgRElHSVRFTCA9ICAgICAgICAvKiBEaWdpdGVsIERULTIy IENDSVRUIHZhcmlhbnQgdXNlZCBpbiBCcmF6aWwgKi8KKy8qCisgIEF0dGVtcHRzIHRvIGFkaGVy ZSBzdHJpY3RseSB0byB0aGUgVi4yNWJpcyBzcGVjaWZpY2F0aW9uIGRvIG5vdCBwcm9kdWNlIGdv b2QKKyAgcmVzdWx0cyBpbiByZWFsIGxpZmUuICBUaGUgbW9kZW0gZm9yIHdoaWNoIHRoaXMgY29k ZSB3YXMgZGV2ZWxvcGVkOiAoYSkKKyAgaWdub3JlcyBwYXJpdHk7IChiKSBzb21ldGltZXMgdGVy bWluYXRlcyByZXNwb25zZXMgd2l0aCBMRiBDUiBpbnN0ZWFkIG9mIENSCisgIExGOyAoYykgaGFz IGEgSGF5ZXMtbGlrZSBlc2NhcGUgc2VxdWVuY2U7IChkKSBzdXBwb3J0cyBhIGhhbmd1cCAoIkhV UCIpCisgIGNvbW1hbmQuICBJbmZvcm1hdGlvbiBmcm9tIEZlcm5hbmRvIENhYnJhbCBpbiBCcmFz aWxpYS4KKyovCisgICAgeworICAgICJEaWdpdGVsIERULTIyIENDSVRUIGRpYWxlciIsCisgICAg IiIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJLyogdG9uZSBjb21tYW5kICov CisgICAgNDAsCQkJCS8qIGRpYWxfdGltZSAtLSBwcm9ncmFtbWFibGUgLS0gKi8KKyAgICAiLDoi LAkJLyogcGF1c2VfY2hhcnMgLS0gIiwiIHdhaXRzIGZvciBwcm9ncmFtbWFibGUgdGltZSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgLyogIjoiIHdhaXRzIGZvciBkaWFsIHRvbmUgKi8KKyAg ICAxMCwJCQkvKiBwYXVzZV90aW1lIChzZWNvbmRzLCBqdXN0IGEgZ3Vlc3MpICovCisgICAgIkhV UFwwMTUiLCAgICAgICAgICAvKiB3YWtlX3N0ciAoTm90IFN0YW5kYXJkIENDSVRUKSAqLworICAg IDIwMCwJCS8qIHdha2VfcmF0ZSAobXNlYykgKi8KKyAgICAiVkFMIiwJCS8qIHdha2VfcHJvbXB0 ICovCisgICAgIiIsCQkJLyogZG1vZGVfc3RyIChub25lKSAqLworICAgICIiLAkJCS8qIGRtb2Rl X3Byb21wdCAobm9uZSkgKi8KKyAgICAiQ1JOJXNcMDE1IiwgICAgICAgIC8qIGRpYWxfc3RyICov CisgICAgMjAwLAkJLyogZGlhbF9yYXRlIChtc2VjKSAqLworICAgIDExMDAsCQkvKiBlc2NfdGlt ZSAoTm90IFN0YW5kYXJkIENDSVRUKSAqLworICAgIDQzLAkJCS8qIGVzY19jaGFyICAoTm90IFN0 YW5kYXJkIENDSVRUKSAqLworICAgICJIVVBcMDE1IiwJCS8qIGh1cF9zdHIgIChOb3QgU3RhbmRh cmQgQ0NJVFQpICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyog c3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBl Y19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJDSUNcMDE1 IiwJCQkJLyogYWFfb25fc3RyICovCisgICAgIkRJQ1wwMTUiLAkJCQkvKiBhYV9vZmZfc3RyICov CisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0 ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3Ry ICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQg Ki8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAwTCwJCQkJCS8qIG1heF9zcGVlZCAqLwor ICAgIENLRF9WMjUsCQkJCS8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307 CisKK3N0YXRpYworTURNSU5GIEhfMTIwMCA9CQkvKiBIYXllcyAxMjAwIGFuZCBjb21wYXRpYmxl IG1vZGVtcyAqLworICAgIHsKKyAgICAiSGF5ZXMgU21hcnRtb2RlbSAxMjAwIGFuZCBjb21wYXRp YmxlcyIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFww MTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwor ICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAq LworI2lmZGVmIE9TMgorICAgICJBVEUxUTBWMVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCisjZWxz ZQorICAgICJBVFEwXDAxNSIsCQkJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogT1MyICovCisg ICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21w dCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9w cm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkv KiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJ LyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICIi LAkJCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIs CQkJCQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCisgICAgIiIs CQkJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3Ry ICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAx NSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIg Ki8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJ CS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMTIwMEws CQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVCwJCQkJLyogY2FwYXMgKi8KKyAgICBnZXRv awkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgSF9VTFRSQSA9CQkJLyogSGF5 ZXMgaGlnaC1zcGVlZCAqLworICAgIHsKKyAgICAiSGF5ZXMgVWx0cmEvT3B0aW1hL0FjY3VyYSA5 Ni8xNDQvMjg4IiwgLyogVSxPLEEgKi8KKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1h bmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJ LyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJ CQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFURTFRMFYxWDROMVkwJlMwJkMx JkQyUzM3PTBTODI9MTI4XDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUwor ICAgICJBVFEwWDROMVkwJlMxUzM3PTBTODI9MTI4XDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxz ZQorICAgICJBVFEwWDROMVkwUzM3PTBTODI9MTI4XDAxNSIsCS8qIHdha2Vfc3RyICovCisjZW5k aWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAq LworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1v ZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1 IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAw LAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRR MEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3Ry ICovICAgLyogT0sgZm9yIFUsTyAqLworICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICov ICAgLyogT0sgZm9yIFUsTyAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovICAg LyogT0sgZm9yIFUsTyAqLworICAgICJBVCZRNVMzNj03UzQ4PTdcMDE1IiwJCS8qIGVjX29uX3N0 ciAqLyAgLyogT0sgZm9yIFUsTyAqLworICAgICJBVCZRMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIg Ki8gLyogT0sgZm9yIFUsTyAqLworICAgICJBVFM0Nj0yXDAxNSIsCQkJLyogZGNfb25fc3RyICov CisgICAgIkFUUzQ2PTBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUi LAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICov CisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIg Ki8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJ CQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAg ICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZv bDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJ CS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8gIC8qICh2YXJpZXMp ICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNh cGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIEhf QUNDVVJBID0JCQkvKiBIYXllcyBBY2N1cmEgKi8KKyAgICB7CQkJCQkvKiBHVUVTU0lORyBJVCdT IExJS0UgVUxUUkEgJiBPUFRJTUEgKi8KKyAgICAiSGF5ZXMgQWNjdXJhIiwKKyAgICAiQVRQXDAx NSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29t bWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVz ZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAg IkFURTFRMFYxWDROMVkwJlMwJkMxJkQyUzM3PTBcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNl CisjaWZkZWYgVk1TCisgICAgIkFUUTBYNE4xWTAmUzFTMzc9MFwwMTUiLAkJLyogd2FrZV9zdHIg Ki8KKyNlbHNlCisgICAgIkFUUTBYNE4xWTBTMzc9MFwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRl ICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBk bW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1ww MTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDEx MDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJB VFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19z dHIgKi8KKyAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFwwMTUi LAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1UzM2PTdTNDg9N1wwMTUiLAkJLyogZWNfb25f c3RyICovCisgICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVFM0Nj0y XDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUUzQ2PTBcMDE1IiwJCQkvKiBkY19vZmZf c3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBc MDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9z dHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1 IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwor ICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyog aWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBt YXhfc3BlZWQgKi8gIC8qICh2YXJpZXMpICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tE X0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8K K307CisKK3N0YXRpYworTURNSU5GIFBQSSA9CQkJCS8qIFByYWN0aWNhbCBQZXJpcGhlcmFscyAg Ki8KKyAgICB7CisgICAgIlByYWN0aWNhbCBQZXJpcGhlcmFscyBWLjIyYmlzIG9yIGhpZ2hlciB3 aXRoIFYuNDIgYW5kIFYuNDJiaXMiLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFu ZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkv KiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJ CS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBDT01NRU5UCisvKiBJbiBuZXdlciBtb2RlbHMgUzgy IChCUkVBSyBoYW5kbGluZykgd2FzIGVsaW1pbmF0ZWQsIGNhdXNpbmcgYW4gZXJyb3IuICovCisj aWZkZWYgT1MyCisgICAgIkFUUTBYNE4xJlMwJkMxJkQyUzM3PTBTODI9MTI4XDAxNSIsIC8qIHdh a2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwWDROMVMzNz0wUzgyPTEyOFwwMTUiLAkJLyogd2Fr ZV9zdHIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNlIC8qIFNvIG5vdyB3ZSB1c2UgWTAgaW5z dGVhZCAqLworI2lmZGVmIE9TMgorICAgICJBVEUxUTBWMVg0TjEmUzAmQzEmRDJZMFMzNz0wXDAx NSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwWDROMVkwJlMx UzM3PTBcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwWDROMVkwUzM3PTBc MDE1IiwJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAi T0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAq LworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyog ZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyog ZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUi LAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAg ICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9m Y19zdHIgKi8KKyAgICAiQVQmUTVTMzY9N1M0OD03XDAxNSIsCQkvKiBlY19vbl9zdHIgKi8KKyAg ICAiQVQmUTBTMzY9MFM0OD0xMjhcMDE1IiwJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVRTNDY9 MlwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVFM0Nj0wXDAxNSIsCQkJLyogZGNfb2Zm X3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0w XDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICAqLwor ICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9v bl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFc MDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAq LworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJ LyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkv KiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGlj CitNRE1JTkYgREFUQVBPUlQgPQkJCS8qIEFUJlQgRGF0YXBvcnQgICovCisgICAgeworICAgICJB VCZUIC8gUGFyYWR5bmUgRGF0YVBvcnQgVi4zMiBvciBoaWdoZXIiLAorICAgICJBVFBcMDE1IiwJ CQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5k ICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2No YXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyAgICAvKgorICAgICAgIE5vdGU6 IFM0MT0wICh1c2UgaGlnaGVzdCBtb2R1bGF0aW9uKSBvbWl0dGVkLCBzaW5jZSBpdCBpcyBub3QK KyAgICAgICBzdXBwb3J0ZWQgb24gdGhlIFYuMzIgYW5kIGxvd2VyIG1vZGVscy4gIFNvIGxldCdz IG5vdCB0b3VjaCBpdC4KKyAgICAqLworI2lmZGVmIE9TMgorICAgICJBVFEwRTFWMVg2JlMwJkMx JkQyJlEwWTBcXEs1Uzc4PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1T CisgICAgIkFUUTBFMVg2JlMxJlEwWTBcXEs1Uzc4PTBcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNl bHNlCisgICAgIkFUUTBFMVg2JlEwWTBcXEs1Uzc4PTBcMDE1IiwJCS8qIHdha2Vfc3RyICovCisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0 ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyog ZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNc MDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAx MTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAi QVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVFxcUTNcMDE1IiwJCQkvKiBod2Zj X3N0ciAqLworICAgICJBVFxcUTFcXFgwXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVRc XFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRcXE43XDAxNSIsCQkJLyogZWNfb25f c3RyICovCisgICAgIkFUXFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQlQzFc MDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3Ry ICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1 IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIg Ki8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJ CQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAg ICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdu b3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9z cGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAv KiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlO RiBVQ09NX0FUID0JCQkvKiBNaWNyb2NvbSBEZXNrUG9ydGUgRkFTVCBFUyAyOC44ICovCisgICAg eworICAgICJNaWNyb2NvbSBEZXNrUG9ydGUgRkFTVCAyOC44IiwKKyAgICAiQVRQXDAxNSIsCQkJ CS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAq LworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFy cyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFURTFR MFYxWDRcXE4wRjAmUzAmQzEmRDJcXEs1XDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lm ZGVmIFZNUworICAgICJBVFEwWDRGMCZTMVxcSzVcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZWxz ZQorICAgICJBVFEwWDRGMFxcSzVcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZN UyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAi T0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAq LworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyog ZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyog ZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUi LAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVRcXFEzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAg ICAiQVRcXFExXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVRcXEgwXFxRMFwwMTUiLAkJ CS8qIG5vZmNfc3RyICovCisgICAgIkFUXFxOM1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAg ICJBVFxcTjBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMzXDAxNSIsCQkJLyog ZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJB VFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFf b2ZmX3N0ciAqLworICAgICJBVC1KMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLworICAgICJBVC1K MVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9z dHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1 IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLwor ICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyog aWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBt YXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9T VywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitN RE1JTkYgWk9PTSA9CQkJCS8qIFpvb20gVGVsZXBob25pY3MgVi4zMmJpcyAgKi8KKyAgICB7Cisg ICAgIlpvb20gVGVsZXBob25pY3MgVi4zMmJpcyIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxz ZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAz NSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAg ICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVEUxUTBWMU4xVzFY NCZTMCZDMSZEMlM4Mj0xMjhTOTU9NDdcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZk ZWYgVk1TCisgICAgIkFUUTBFMU4xVzFYNCZTMVM4Mj0xMjhTOTU9NDdcMDE1IiwJLyogd2FrZV9z dHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMU4xVzFYNFM4Mj0xMjhTOTU9NDdcMDE1IiwJLyogd2Fr ZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJ Lyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAg IiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwor ICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0 ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hh ciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIs CQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAg ICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1UzM2PTdTNDg9N1wwMTUi LAkJLyogZWNfb25fc3RyICovCisgICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLwor ICAgICJBVFM0Nj0xMzhcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVRTNDY9MTM2XDAx NSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIg Ki8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyog c2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1 IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAq LworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJ Lyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJB VFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAg NTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0Rf REN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLwor fTsKKworc3RhdGljCitNRE1JTkYgWllYRUwgPQkJCQkvKiBaeVhFTCBVLVNlcmllcyAqLworICAg IHsKKyAgICAiWnlYRUwgVS1TZXJpZXMgVi4zMmJpcyBvciBoaWdoZXIiLAorICAgICJBVFBcMDE1 IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21t YW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNl X2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAi QVRFMVEwVjEmUzAmQzEmRDImTjBYNSZZMVwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNp ZmRlZiBWTVMKKyAgICAiQVRRMEUxJlMxJk4wWDUmWTFcMDE1IiwJCS8qIHdha2Vfc3RyICovCisj ZWxzZQorICAgICJBVFEwRTEmTjBYNSZZMVwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAv KiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisg ICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJ CS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJ CS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBc MDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkgzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8K KyAgICAiQVQmSDRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZIMFwwMTUiLAkJCS8q IG5vZmNfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFU JkswXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCZLNFwwMTUiLAkJCS8qIGRjX29u X3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0x XDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2Zm X3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAx NSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAq LworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJ Lyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIi LAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tE X0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAg Z2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIFpPTFRSSVggPQkJCS8q IFpvbHRyaXggKi8KKyAgICB7CisgICAgIlpvbHRyaXggVi4zMmJpcyBhbmQgVi4zNCBtb2RlbXMg d2l0aCBSb2Nrd2VsbCBBQ0kgY2hpcHNldCIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBj b21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJ CQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAy LAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgIkFURTFRMFYxRjBXMVg0WTAm UzAmQzEmRDJcXEs1UzgyPTEyOFM5NT00MVwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNp ZmRlZiBWTVMKKyAgICJBVFEwRTFGMFcxWDRZMCZTMVxcSzVTODI9MTI4Uzk1PTQxXDAxNSIsIC8q IHdha2Vfc3RyICovCisjZWxzZQorICAgIkFUUTBFMUYwVzFYNFkwXFxLNVM4Mj0xMjhTOTU9NDFc MDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJv bXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2Rl X3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJ CQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAg IkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1 IiwJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAg ICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFUXFxOMVwwMTUiLAkJCS8q IGVjX29mZl9zdHIgKi8KKyAgICAiQVRTNDY9MTM4JUMzXDAxNSIsCQkJLyogZGNfb25fc3RyICov CisgICAgIkFUUzQ2PTEzNiVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0x XDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9z dHIgKi8KKyAgICAiQVRcXE4wXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCisgICAgIkFUJlEwXDAx NSIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAq LworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJ CQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAg IkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25v cmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4X3Nw ZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8q IGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5G IE1PVE9ST0xBID0gewkJCS8qIE1vdG9yb2xhIEZhc1RhbGsgSUkgb3IgTGlmZXN0eWxlICovCisv KgorICAiXEUiIGFuZCAiXFgiIGNvbW1hbmRzIHJlbW92ZWQgLSBNb3Rvcm9sYSBMaWZlc3R5bGUg ZG9lc24ndCBoYXZlIHRoZW0uCisgICAgIFxFMCA9IERvbid0IGVjaG8gd2hpbGUgb25saW5lCisg ICAgIFxYMCA9IFByb2Nlc3MgWG9uL1hvZmYgYnV0IGRvbid0IHBhc3MgdGhyb3VnaAorKi8KKyAg ICAiTW90b3JvbGEgRmFzVGFsayBJSSBvciBMaWZlc3R5bGUiLAkvKiBOYW1lICovCisgICAgIkFU UFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25l IGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyog cGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgor ICAgICJBVEUxUTBWMVg0JlMwJkMxJkQyXFxLNVxcVjFcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNl bHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBFMVg0JlMxXFxLNVxcVjFcMDE1IiwJCS8qIHdha2Vf c3RyICovCisjZWxzZQorICAgICJBVFEwRTFYNFxcSzVcXFYxXDAxNSIsCQkvKiB3YWtlX3N0ciAq LworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtl X3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJ CS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFU RCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisg ICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisg ICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVRcXFEzXDAxNSIsCQkJLyog aHdmY19zdHIgKi8KKyAgICAiQVRcXFExXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVRc XFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRcXE42XDAxNSIsCQkJLyogZWNfb25f c3RyICovCisgICAgIkFUXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQlQzFc MDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3Ry ICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1 IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIkFUXFxKMFwwMTUiLAkJCS8qIHNiX29uX3N0ciAq LworICAgICJBVFxcSjFcMDE1IiwJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJ CQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLwor ICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyog dm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgz XDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2 MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8 Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsK Kworc3RhdGljCitNRE1JTkYgQk9DQSA9CQkJCS8qIEJvY2EgKi8KKyAgICB7CisgICAgIkJPQ0Eg MTQuNCBGYXhtb2RlbSIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisg ICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxf dGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1 c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVEUxUTBWMUYxTjFXMSZTMCZDMSZEMlxcSzVT Mzc9MTFTODI9MTI4Uzk1PTQ3WDRcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYg Vk1TCisgICAgIkFUUTBFMUYxTjFXMSZTMVxcSzVTMzc9MTFTODI9MTI4Uzk1PTQ3WDRcMDE1Iiwg Lyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMUYxTjFXMVxcSzVTMzc9MTFTODI9MTI4 Uzk1PTQ3WDRcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8q IHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisg ICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisg ICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3Ry ICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRcMDE1IiwJ CQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAg IkFUXFxOM1MzNj03UzQ4PTdcMDE1IiwJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFxcTjFcMDE1 IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUUzQ2PTEzOFwwMTUiLAkJCS8qIGRjX29uX3N0 ciAqLworICAgICJBVFM0Nj0xMzZcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9 MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZf c3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29m Zl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFww MTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIg Ki8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJ CS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAi IiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENL RF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAg IGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBJTlRFTCA9CQkJCS8q IEludGVsICovCisgICAgeworICAgICJJbnRlbCBIaWdoLVNwZWVkIEZheG1vZGVtIiwKKyAgICAi QVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRv bmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkv KiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1My CisgICAgIkFURTFRMFYxWTBYNCZTMCZDMSZEMlxcSzFcXFYyUzI1PTUwXDAxNSIsIC8qIHdha2Vf c3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwRTFZMFg0JlMxXFxLMVxcVjJTMjU9 NTBcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMVkwWDRcXEsxXFxWMlMy NT01MFwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9T MiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2Fr ZV9wcm9tcHQgKi8KKyAgICAiQVRCMStGQ0xBU1M9MFwwMTUiLAkJLyogZG1vZGVfc3RyICovCisg ICAgIk9LXDAxNSIsCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8q IGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8q IGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1 IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUXFxHMVxcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAq LworICAgICJBVFxcRzFcXFExXFxYMFwwMTUiLAkJLyogc3dmY19zdHIgKi8KKyAgICAiQVRcXEcw XDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRcXEowXFxOM1wiSDNcMDE1IiwJCS8qIGVj X29uX3N0ciAqLworICAgICJBVFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFU JUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2Zm X3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0w XDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisg ICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25f c3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAx NSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8K KyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8q IGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkvKiBt YXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9T VywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitN RE1JTkYgTVVMVElURUNIID0JCQkvKiBNdWx0aXRlY2ggKi8KKyAgICB7CisgICAgIk11bHRpdGVj aCBNVDE0MzIgb3IgTVQyODM0IFNlcmllcyIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBj b21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJ CQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAy LAkJCQkJLyogcGF1c2VfdGltZSAqLworLyogI1AwICg9IG5vIHBhcml0eSkgaXMgbm90IGxpc3Rl ZCBpbiB0aGUgbWFudWFsIGZvciBuZXdlciBtb2RlbHMgKi8KKy8qIHNvIGl0IGhhcyBiZWVuIHJl bW92ZWQgZnJvbSBhbGwgdGhyZWUgY29waWVzIG9mIHRoZSBNdWx0aXRlY2ggd2FrZV9zdHIgKi8K KyNpZmRlZiBPUzIKKyAgICAiQVRFMVEwVjFYNCZTMCZDMSZEMiZFOCZRMFwwMTUiLAkvKiB3YWtl X3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMEUxWDQmUzEmRTgmUTBcMDE1IiwJ CS8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwRTFYNCZFOCZRMFwwMTUiLAkJLyogd2Fr ZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJ Lyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAg IiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLwor ICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0 ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hh ciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkU0JkU3JkU4 JkUxMSZFMTNcMDE1IiwJCS8qIGh3ZmNfc3RyICovCisgICAgIkFUJkU1JkU2JkU4JkUxMSZFMTNc MDE1IiwJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkUzJkU3JkU4JkUxMCZFMTJcMDE1IiwJCS8q IG5vZmNfc3RyICovCisgICAgIkFUJkUxXDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFU JkUwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCZFMTVcMDE1IiwJCQkvKiBkY19v bl9zdHIgKi8KKyAgICAiQVQmRTE0XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2Zm X3N0ciAqLworICAgICJBVCRCQTBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKD0gImJhdWQgYWRqdXN0 IG9mZiIpICovCisgICAgIkFUJEJBMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRN MVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZf c3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUi LAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisg ICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8K KyAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VD fENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2Zu ICovCit9OworCitzdGF0aWMKK01ETUlORiBTVVBSQSA9CQkJCS8qIFN1cHJhICovCisgICAgewor ICAgICJTdXByYUZBWE1vZGVtIDE0NCBvciAyODgiLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisg ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFOMVcw WDRZMCZTMCZDMSZEMlxcSzVTODI9MTI4XDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lm ZGVmIFZNUworICAgICJBVFEwRTFOMVcwWDRZMCZTMVxcSzVTODI9MTI4XDAxNSIsCS8qIHdha2Vf c3RyICovCisjZWxzZQorICAgICJBVFEwRTFOMVcwWDRZMFxcSzVTODI9MTI4XDAxNSIsCS8qIHdh a2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJ CS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAg ICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8K KyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3Jh dGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2No YXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUi LAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAg ICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVCZRNVxcTjNTNDg9N1wwMTUi LAkJLyogZWNfb25fc3RyICovCisgICAgIkFUJlEwXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIg Ki8KKyAgICAiQVQlQzFTNDY9MTM4XDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMw UzQ2PTEzNlwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyog YWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAg ICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE1cMDE1IiwJCQkJLyogc3Bf b2ZmX3N0ciAqLworICAgICJBVExcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlww MTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICov CisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIg Ki8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tE X0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9r X2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBTVVBSQVggPQkJCQkvKiBTdXByYSBFeHByZXNz ICovCisgICAgeworICAgICJEaWFtb25kIFN1cHJhIEV4cHJlc3MgVi45MCIsCisgICAgIkFUUFww MTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNv bW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1 c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAg ICJBVFEwRTFWMVcwWDQmQzEmRDImUzBcXEs1XDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQor I2lmZGVmIFZNUworICAgICJBVFEwRTFXMFg0JlMxXFxLNVwwMTUiLAkJLyogd2FrZV9zdHIgKi8K KyNlbHNlCisgICAgIkFUUTBFMVcwWDRcXEs1XDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2VuZGlm IC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8K KyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2Rl X3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIs CQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJ CQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBI MFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAq LworICAgICJBVCZLNFwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJ Lyogbm9mY19zdHIgKi8KKyAgICAiQVRcXE4zXDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAg IkFUXFxOMVwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQlQzJcMDE1IiwJCQkvKiBk Y19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFU UzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9v ZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNi X29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRN XDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMXDAxNSIsCQkJCS8qIHZvbDFfc3Ry ICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJ CQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAg IiIsCQkJCQkvKiBpbmkyICovCisgICAgMjMwNDAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAg Q0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisg ICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIE1BWFRFQ0ggPQkJ CS8qIE1heFRlY2ggKi8KKyAgICB7CisgICAgIk1heFRlY2ggWE0yODhFQSBvciBHVkMgRkFYTW9k ZW0iLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1 IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAg ICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8K KyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNFkwJlMwJkMxJkQyJkwwJk0wXFxLNVwwMTUiLCAv KiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMEUxWDRZMCZMMCZNMCZT MVxcSzVcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMVg0WTAmTDAmTTBc XEs1XDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9T MiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2Fr ZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyog ZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAw LAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0 MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8K KyAgICAiQVRcXFEzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVRcXFExXFxYMFwwMTUi LAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisg ICAgIkFUXFxONlwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFxcTjBcMDE1IiwJCQkv KiBlY19vZmZfc3RyICovCisgICAgIkFUXFxONiVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLwor ICAgICJBVFxcTjYlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUi LAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICov CisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIg Ki8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJ CQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAg ICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZv bDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJ CS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8 Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRv awkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgUk9MTSA9CQkvKiBJQk0gLyBT aWVtZW5zIC8gUm9sbSA4MDAwLCA5MDAwLCA5NzUxIENCWCBEQ00gKi8KKyAgICB7CisgICAgIklC TS9TaWVtZW5zL1JvbG0gQ0JYIERhdGEgQ29tbXVuaWNhdGlvbnMgTW9kdWxlIiwKKyAgICAiIiwJ CQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLwor ICAgIDYwLAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiIsCQkJCQkvKiBwYXVzZV9jaGFycyAq LworICAgIDAsCQkJCQkvKiBwYXVzZV90aW1lICovCisgICAgIlwwMTVcMDE1IiwJCQkJLyogd2Fr ZV9zdHIgKi8KKyAgICA1MCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJNT0RJRlk/IiwJCQkJ Lyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJ CQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkNBTEwgJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAq LworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8K KyAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiIiwJCQkJCS8qIGh1cF9zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLworICAg ICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLworICAg ICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCisg ICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vbl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAq LworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0 ciAqLworICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wxX3N0 ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDNfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLwor ICAgIDE5MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgMCwJCQkJCS8qIGNhcGFzICovCisg ICAgTlVMTAkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgVVNSID0JCQkJLyog VVNSIENvdXJpZXIgYW5kIFNwb3J0c3RlciBtb2RlbXMgKi8KKyAgICB7CisgICAgIlVTIFJvYm90 aWNzIENvdXJpZXIsIFNwb3J0c3Rlciwgb3IgY29tcGF0aWJsZSIsCisgICAgIkFUUFwwMTUiLAkJ CQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQg Ki8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hh cnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEw RTFWMVg0JkEzJlMwJkMxJkQyJk4wJlkzUzE0PTBcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNl CisjaWZkZWYgU1VOT1M0CisgICAgIkFUUTBYNCZBMyZTMCZOMCZZM1MxND0wXDAxNSIsCS8qIHdh a2Vfc3RyIC0tIG5lZWRzICZTMCBpbiBTdW5PUyAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAi QVRRMFg0JkEzJlMxJk4wJlkzUzE0PTBcMDE1IiwJLyogd2FrZV9zdHIgLS0gbmVlZHMgJlMxIGlu IFZNUyAqLworI2Vsc2UKKyAgICAiQVRRMFg0JkEzJk4wJlkzUzE0PTBcMDE1IiwJCS8qIHdha2Vf c3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyog T1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkv KiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAg IDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAg IDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAq LworICAgICJBVCZIMSZSMiZJMFwwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFUJkgyJlIx JkkyXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQmSDAmUjEmSTBcMDE1IiwJCQkvKiBu b2ZjX3N0ciAqLworICAgICJBVCZNNCZCMVwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJB VCZNMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQmSzFcMDE1IiwJCQkvKiBkY19v bl9zdHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9 MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZf c3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29m Zl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFww MTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIg Ki8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJ CS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAi IiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBD S0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAg ICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworCitzdGF0aWMKK01ETUlORiBVU1JYMiA9CQkJ CS8qIFVTUiBYSi1DQzE1NjAgWDIgNTZLICovCisgICAgeworICAgICJVUyBSb2JvdGljcyAvIE1l Z2FoZXJ0eiBDQy9YSi1DQzE1NjAgWDIiLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29t bWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJ CQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJ CQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNCZBMyZTMCZC MiZDMSZEMiZOMFwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAi QVRRMFg0JkEzJkIyJk4wJlMxXDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRR MFg0JkEzJkIyJk4wXDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2VuZGlmIC8qIFZNUyAqLworI2Vu ZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJ CQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIi LAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIg Ki8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUg Ki8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1 cF9zdHIgKi8KKyAgICAiQVQmSDEmSTBcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZI MiZJMlwwMTUiLAkJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUJkgwJkkwXDAxNSIsCQkJLyogbm9m Y19zdHIgKi8KKyAgICAiQVQmTTRcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVQmTTBc MDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJksxXDAxNSIsCQkJLyogZGNfb25fc3Ry ICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1 IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAq LworICAgICJBVCZCMVwwMTUiLAkJCS8qIHNiX29uX3N0ciAqLworICAgICJBVCZCMFwwMTUiLAkJ CS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAg ICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyog dm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwz XDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQg Ki8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQg Ki8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2Fw YXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgT0xE VEIgPQkJCQkvKiBPbGQgVGVsZWJpdHMgKi8KKyAgICB7CisgICAgIlRlbGViaXQgVHJhaWxCbGF6 ZXIsIFQxMDAwLCBUMTUwMCwgVDIwMDAsIFQyNTAwIiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1 bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAg IDYwLAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLwor ICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIlwwMjFBQUFBQVRR MEUxVjFYMSZTMCZDMSZEMlMxMj01MFM1MD0wUzU0PTNcMDE1IiwgLyogd2FrZV9zdHIuICovCisj ZWxzZQorI2lmZGVmIFZNUworICAgICJcMDIxQUFBQUFUUTBYMVMxMj01MFM1MD0wUzU0PTNcMDE1 IiwgLyogd2FrZV9zdHIuICovCisjZWxzZQorICAgICJcMDIxQUFBQUFUUTBYMSZTMVMxMj01MFM1 MD0wUzU0PTNcMDE1IiwgLyogd2FrZV9zdHIuICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYg LyogT1MyICovCisgICAgMTAwLAkJCQkvKiB3YWtlX3JhdGUgPSAxMDAgbXNlYyAqLworICAgICJP S1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICov CisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBk aWFsX3N0ciwgTm90ZTogbm8gVCBvciBQICovCisgICAgODAsCQkJCQkvKiBkaWFsX3JhdGUgKi8K KyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAoZ3VhcmQgdGltZSkgKi8KKyAgICA0MywJCQkJCS8q IGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVRT NTg9MlM2OD0yXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVRTNTg9M1M2OD0zUzY5PTBc MDE1IiwJCS8qIHN3ZmNfc3RyICovCisgICAgIkFUUzU4PTBTNjg9MFwwMTUiLAkJCS8qIG5vZmNf c3RyICovCisgICAgIkFUUzY2PTFTOTU9MlwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJB VFM5NT0wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVFMxMTA9MVM5Nj0xXDAxNSIs CQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVRTMTEwPTBTOTY9MFwwMTUiLAkJLyogZGNfb2ZmX3N0 ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAx NSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAg IiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3Ry ICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIs CQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAg ICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGln bm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMTkyMDBMLAkJCQkvKiBtYXhf c3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TV3xD S0RfVEJ8Q0tEX0tTLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9Owor CitzdGF0aWMKK01ETUlORiBORVdUQiA9CQkJCS8qIE5ldyBUZWxlYml0cyAqLworICAgIHsKKyAg ICAiVGVsZWJpdCBUMTYwMCwgVDMwMDAsIFFCbGF6ZXIsIFdvcmxkQmxhemVyLCBldGMuIiwKKyAg ICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8q IHRvbmUgY29tbWFuZCAqLworICAgIDYwLAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJ CQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYg T1MyCisgICAgIlwwMjFBQUFBQVRRMEUxVjFYMiZTMCZDMSZEMlMxMj01MFM1MD0wUzYxPTBTNjM9 MFwwMTUiLCAvKiB3YWtlX3N0ci4gKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIlwwMjFBQUFB QVRRMFgyJlMxUzEyPTUwUzUwPTBTNjE9MFM2Mz0wXDAxNSIsIC8qIHdha2Vfc3RyLiAqLworI2Vs c2UKKyAgICAiXDAyMUFBQUFBVFEwWDJTMTI9NTBTNTA9MFM2MT0wUzYzPTBcMDE1IiwgLyogd2Fr ZV9zdHIuICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMTAwLAkJ CQkvKiB3YWtlX3JhdGUgPSAxMDAgbXNlYyAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3By b21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9k ZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciwgTm90ZTogbm8gVCBv ciBQICovCisgICAgODAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2Nf dGltZSAoZ3VhcmQgdGltZSkgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFU UTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiQVRTNTg9MlM2OD0yXDAxNSIsCQkJLyog aHdmY19zdHIgKi8KKyAgICAiQVRTNTg9M1M2OD0zXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAg ICAiQVRTNTg9MFM2OD0wXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRTMTgwPTNcMDE1 IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVRTMTgwPTBcMDE1IiwJCQkvKiBlY19vZmZfc3Ry ICovCisgICAgIkFUUzE5MD0xXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUUzE5MD0w XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9z dHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFc MDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0 ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJ CQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAg ICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisg ICAgMzg0MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xD S0RfREN8Q0tEX0hXfENLRF9TV3xDS0RfVEJ8Q0tEX0tTLCAvKiBjYXBhcyAqLworICAgIGdldG9r CQkJCS8qIG9rX2ZuICovCit9OworI2VuZGlmIC8qIE1JTklESUFMICovCisKK3N0YXRpYworTURN SU5GIERVTU1ZID0gLyogZHVtbXkgaW5mb3JtYXRpb24gZm9yIG1vZGVtcyB0aGF0IGFyZSBoYW5k bGVkIGVsc2V3aGVyZSAqLworICAgIHsKKyAgICAiKGR1bW15KSIsCisgICAgIiIsCQkJCQkvKiBw dWxzZSBjb21tYW5kICovCisgICAgIiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzMCwJ CQkJCS8qIGRpYWxfdGltZSAqLworICAgICIiLAkJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAw LAkJCQkJLyogcGF1c2VfdGltZSAqLworICAgICIiLAkJCQkJLyogd2FrZV9zdHIgKi8KKyAgICAw LAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIiIsCQkJCQkvKiB3YWtlX3Byb21wdCAqLworICAg ICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgTlVMTCwJCQkJLyogZG1vZGVfcHJvbXB0ICov CisgICAgIiVzXDAxNSIsCQkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0 ZSAqLworICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLworICAgIDAsCQkJCQkvKiBlc2NfY2hhciAq LworICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLworICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8K KyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLwor ICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICov CisgICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0 ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZf c3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9v bl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wy X3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9y ZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQg Ki8KKyAgICAwLAkJCQkJLyogY2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9Owor CisjaWZuZGVmIE1JTklESUFMCitzdGF0aWMKK01ETUlORiBSV1YzMiA9CQkJCS8qIEdlbmVyaWMg Um9ja3dlbGwgVi4zMiAqLworICAgIHsKKyAgICAiR2VuZXJpYyBSb2Nrd2VsbCBWLjMyIG1vZGVt IiwJLyogQVRJMywgQVRJNCwgYW5kIEFUSTYgZm9yIGRldGFpbHMgKi8KKyAgICAiQVRQXDAxNSIs CQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFu ZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9j aGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFU UTBFMVYxWDRZMCZTMCZDMSZEMiVFMlxcSzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vf c3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwWDRZMCZTMSVFMlxcSzUrRkNMQVNT PTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwWDRZMCVFMlxc SzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICov CisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1ww MTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisg ICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFs X3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2Nf dGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJ LyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFU Jks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJ CS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE2XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAg IkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDMVwwMTUiLAkJCS8qIGRj X29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRT MD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29m Zl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jf b2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0w XDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0 ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJ CQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAg ICIiLAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAg Q0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisg ICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIFJXVjMyQiA9CQkJ CS8qIEdlbmVyaWMgUm9ja3dlbGwgVi4zMmJpcyAqLworICAgIHsKKyAgICAiR2VuZXJpYyBSb2Nr d2VsbCBWLjMyYmlzIG1vZGVtIiwJLyogQVRJMywgQVRJNCwgYW5kIEFUSTYgZm9yIGRldGFpbHMg Ki8KKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIs CQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAg IiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisj aWZkZWYgT1MyCisgICAgIkFUUTBFMVYxWDRZMCZTMCZDMSZEMiVFMlxcSzUrRkNMQVNTPTBOMVMz Nz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwWDRZ MCZTMSVFMlxcSzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQor ICAgICJBVFEwWDRZMCVFMlxcSzUrRkNMQVNTPTBOMVMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICov CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2Vf cmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJ LyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVRE JXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAg ICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAg ICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3 ZmNfc3RyICovCisgICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLwor ICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1XDAxNSIsCQkJLyog ZWNfb25fc3RyICovCisgICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJB VFMlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVRTJUMwXDAxNSIsCQkJLyogZGNf b2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRT MD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICov CisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bf b25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwx XDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIg Ki8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJ CS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkv KiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGlj CitNRE1JTkYgUldWMzQgPQkJCQkvKiBHZW5lcmljIFJvY2t3ZWxsIFYuMzQgRGF0YS9GYXggKi8K KyAgICB7CisgICAgIkdlbmVyaWMgUm9ja3dlbGwgVi4zNCBtb2RlbSIsCS8qIEFUSTMsIEFUSTQs IGFuZCBBVEk2IGZvciBkZXRhaWxzICovCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21t YW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJ CS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJ CQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEwVjFYNFkwJkMxJkQyJlMw JUUyXFxLNStGQ0xBU1M9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMK KyAgICAiQVRRMFYxWDRZMCZDMSZEMiZTMSVFMlxcSzUrRkNMQVNTPTBcMDE1IiwgLyogd2FrZV9z dHIgKi8KKyNlbHNlCisgICAgIkFUUTBWMVg0WTAmQzEmRDIlRTJcXEs1K0ZDTEFTUz0wXDAxNSIs IC8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAg MCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAq LworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9t cHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBk aWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyog ZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZL M1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkv KiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFU JlE1XDAxNSIsCQkJLyogZWNfb25fc3RyICovCisgICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2Zm X3N0ciAqLworICAgICJBVFMlQzNcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVRTJUMw XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9z dHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFc MDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0 ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJ CQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAg ICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisg ICAgMTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8 Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4g Ki8KK307CisKK3N0YXRpYworTURNSU5GIFJXVjkwID0JCQkJLyogR2VuZXJpYyBSb2Nrd2VsbCBW LjkwIERhdGEvRmF4ICovCisgICAgeworICAgICJHZW5lcmljIFJvY2t3ZWxsIFYuOTAgNTZLIG1v ZGVtIiwJLyogQVRJMywgQVRJNCwgYW5kIEFUSTYgZm9yIGRldGFpbHMgKi8KKyAgICAiQVRQXDAx NSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29t bWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVz ZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAg IkFUUTBWMU4xWDRZMCZDMSZEMiZTMCVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAvKiBLOTUg Ki8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZTMSVFMlxcSzUr RkNMQVNTPTBTMzc9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMFYxTjFY NFkwJkMxJkQyJUUyXFxLNStGQ0xBU1M9MFMzNz0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZW5k aWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAq LworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1v ZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1 IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAw LAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRR MEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3Ry ICovCisgICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLworICAgICJB VCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1XDAxNSIsCQkJLyogZWNfb25f c3RyICovCisgICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDM1ww MTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIg Ki8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUi LAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLworICAgICIi LAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAq LworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJ CQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAg IkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25v cmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1heF9z cGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAv KiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlO RiBNV0FWRSA9CQkJCS8qIElCTSBNd2F2ZSAqLworICAgIHsKKyAgICAiSUJNIE13YXZlIEFkYXB0 ZXIiLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1 IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAg ICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8K KyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNFkwJlMwJkMxJkQyJk0wJlEwJk4xXFxLM1xcVDAl RTJTMjg9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRR MFg0WTAmTTAmUzEmUTAmTjEmUzBcXEszXFxUMCVFMlMyOD0wXDAxNSIsIC8qIHdha2Vfc3RyICov CisjZWxzZQorICAgICJBVFEwWDRZMCZNMCZRMCZOMSZTMFxcSzNcXFQwJUUyUzI4PTBcMDE1Iiwg Lyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAw LAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICov CisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21w dCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRp YWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBl c2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUXFxR M1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAoaXQgZG9l c24ndCEpICovCisgICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUXFxO N1wwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFxcTjBcMDE1IiwJCQkvKiBlY19vZmZf c3RyICovCisgICAgIkFUJUMxXCJIM1wwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVD MFwiSDBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFh X29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIs CQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAi QVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9v ZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlww MTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICov CisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIg Ki8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tE X0VDfENLRF9EQ3xDS0RfSFcsIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8K K307CisKK3N0YXRpYworTURNSU5GIFRFTEVQQVRIID0JCQkvKiBHYXRld2F5IDIwMDAgVGVsZXBh dGggKi8KKyAgICB7CisgICAgIkdhdGV3YXkgMjAwMCBUZWxlcGF0aCBJSSAyOC44IiwKKyAgICAi QVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRv bmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkv KiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1My CisgICAgIkFUUTBFMVYxWDQmUzAmQzEmRDImTjAmWTIjQ0xTPTBTMTM9MFMxNT0wUzE5PTBcMDE1 IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBYNCZOMCZTMSZZ MSNDTFM9MFMxMz0wUzE1PTBTMTk9MFwwMTUiLCAvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAi QVRRMFg0Jk4wJlkxI0NMUz0wUzEzPTBTMTU9MFMxOT0wXDAxNSIsIC8qIHdha2Vfc3RyICovCisj ZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0 ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyog ZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNc MDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAx MTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAi QVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZIMSZSMlwwMTUiLAkJCS8qIGh3 ZmNfc3RyICovCisgICAgIkFUJkgyJkkyUzIyPTE3UzIzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAq LworICAgICJBVCZIMCZJMCZSMVwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJk00JkIx XDAxNSIsCQkJLyogZWNfb25fc3RyIC0tIGFsc28gZml4ZXMgc3BlZWQgKi8KKyAgICAiQVQmTTBc MDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJksxXDAxNSIsCQkJLyogZGNfb25fc3Ry ICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1 IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAq LworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3Ry ICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJ CQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisg ICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2 b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJ CQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8 Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRv awkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgQ0FSRElOQUwgPQkJCS8qIENh cmRpbmFsIC0gYmFzZWQgb24gUm9ja3dlbGwgVi4zNCAqLworICAgIHsKKyAgICAiQ2FyZGluYWwg TVZQMjg4WCBTZXJpZXMiLAkJLyogQVRJMywgQVRJNCwgYW5kIEFUSTYgZm9yIGRldGFpbHMgKi8K KyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJ CS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwi LAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZk ZWYgT1MyCisgICAgIkFUUTBFMVYxWDRXMVkwJUUyJlMwJkMxJkQyXFxLNStGQ0xBU1M9MCtNUz0x MSwxXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwWDRX MVkwJlMxJUUyXFxLNStGQ0xBU1M9MCtNUz0xMSwxXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxz ZQorICAgICJBVFEwWDRXMVkwJUUyXFxLNStGQ0xBU1M9MCtNUz0xMSwxXDAxNSIsIC8qIHdha2Vf c3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8q IHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIi LAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAg ICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUg Ki8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIg Ki8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJ CS8qIGh3ZmNfc3RyICovCisgICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0 ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1UzM2PTdT NDg9N1xcTjNcMDE1IiwJCS8qIGVjX29uX3N0ciAqLworICAgICJBVCZRMFM0OD0xMjhcXE4xXDAx NSIsCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUUzQ2PTEzOCVDMVwwMTUiLAkJCS8qIGRjX29u X3N0ciAqLworICAgICJBVFM0Nj0xMzYlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAg IkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBh YV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAi QVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9s MV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAx NSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8K KyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8K KyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMg Ki8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgTFVDRU5U ID0JCQkJLyogTHVjZW50IFZlbnVzIG9yIERhdGEvRmF4IG1vZGVtICovCisgICAgeworICAgICJM dWNlbnQgVmVudXMgY2hpcHNldCIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5k ICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8q IGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJ LyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEwVjFOMVg0WTAmQzEmRDImUzAl RTJcXEs1K0ZDTEFTUz0wUzM3PTBcMDE1IiwgLyogSzk1ICovCisjZWxzZQorI2lmZGVmIFZNUwor ICAgICJBVFEwVjFOMVg0WTAmQzEmRDImUzElRTJcXEs1K0ZDTEFTUz0wUzM3PTBcMDE1IiwgLyog Vk1TICovCisjZWxzZQorICAgICJBVFEwVjFOMVg0WTAmQzEmRDIlRTJcXEs1K0ZDTEFTUz0wUzM3 PTBcMDE1IiwgLyogQWxsIG90aGVycyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9T MiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2Fr ZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyog ZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAw LAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0 MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8K KyAgICAiQVQmSzNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZLNFMzMj0xN1MzMz0x OVwwMTUiLAkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0ciAq LworICAgICJBVCZRNVwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVCZRMFwwMTUiLAkJ CS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAg ICAiQVQlQzBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8q IGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAg IiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAg ICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBz cF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRM MlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3Ry ICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGlu aTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NC fENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkv KiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgQ09ORVhBTlQgPQkJCS8qIENvbmV4YW50 IGZhbWlseSAqLworICAgIHsKKyAgICAiQ29uZXhhbnQgZmFtaWx5IG9mIG1vZGVtcyIsCisgICAg IkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0 b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJ LyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9T MgorICAgICJBVFEwVjFYNCZDMSZEMiZTMCVFMStGQ0xBU1M9MFwwMTUiLCAvKiBLOTUgKi8KKyNl bHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBWMVg0JkMxJkQyJlMxJUUxK0ZDTEFTUz0wXDAxNSIs IC8qIFZNUyAqLworI2Vsc2UKKyAgICAiQVRRMFYxWDQmQzEmRDIlRTErRkNMQVNTPTBcMDE1Iiwg LyogVU5JWCBldGMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAw LAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICov CisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21w dCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRp YWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBl c2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJksz XDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8q IHN3ZmNfc3RyICovCisgICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQm UTVcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZf c3RyICovCisgICAgIkFUJUMzXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAx NSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIg Ki8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyog c2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1 IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAq LworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJ Lyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJB VFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAg MTE1MjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tE X0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8K K307CisKK3N0YXRpYworTURNSU5GIFBDVEVMID0JCQkJLyogUENUZWwgY2hpcHNldCAqLworICAg IHsKKyAgICAiUENUZWwgY2hpcHNldCIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21t YW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJ CS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJ CQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEwVjFOMVg0WTAmQzEmRDIm UzAlRTJcXEs1UzM3PTBcMDE1IiwgLyogSzk1ICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJB VFEwVjFOMVg0WTAmQzEmRDImUzElRTJcXEs1UzM3PTBcMDE1IiwgLyogVk1TICovCisjZWxzZQor ICAgICJBVFEwVjFOMVg0WTAmQzEmRDIlRTJcXEs1UzM3PTBcMDE1IiwgLyogVU5JWCBldGMgKi8K KyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9y YXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkv KiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQl c1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAg IDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAg ICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdm Y19zdHIgKi8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICovCisg ICAgIkFUJkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVRcXE4zXDAxNSIsCQkJLyog ZWNfb25fc3RyICovCisgICAgIkFUXFxOMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAi QVQlQzFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcMDE1IiwJCQkvKiBkY19v ZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMw PTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9v bl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFc MDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAq LworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJ LyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkv KiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGlj CitNRE1JTkYgWk9PTVYzNCA9CQkJLyogWm9vbSBUZWxlcGhvbmljcyBWLjM0ICAqLworICAgIHsK KyAgICAiWm9vbSBUZWxlcGhvbmljcyBWLjM0IiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNl IGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1 LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAg IDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBWMU4xVzFYNCZT MCZDMSZEMlM4Mj0xMjhcMDE1IiwgLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisg ICAgIkFUUTBWMU4xVzFYNCZTMVM4Mj0xMjhcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisg ICAgIkFUUTBWMU4xVzFYNFM4Mj0xMjhTMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyog Vk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAg ICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkv KiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkv KiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAx NSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisg ICAgIkFUJks0XDAxNVMzMj0xN1MzMz0xOSIsCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFww MTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1XDAxNSIsCQkJLyogZWNfb25fc3RyICov CisgICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVFMlQzNcMDE1IiwJ CQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVRTJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLwor ICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJ LyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJ CQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisg ICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8q IHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRM M1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0 ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQg Ki8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2Fw YXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgWk9P TVY5MCA9CQkJLyogWk9PTSBWLjkwICovCisgICAgeworICAgICJab29tIFYuOTAgNTZLIiwKKyAg ICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8q IHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJ CQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYg T1MyCisgICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZTMCVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUi LCAvKiBLOTUgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZT MSVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAvKiBWTVMgKi8KKyNlbHNlCisgICAgIkFUUTBW MU4xWDRZMCZDMSZEMiVFMlxcSzUrRkNMQVNTPTBTMzc9MFwwMTUiLCAvKiBBbGwgb3RoZXJzICov CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2Vf cmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJ LyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVRE JXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAg ICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAg ICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3 ZmNfc3RyICovCisgICAgIkFUJks0UzMyPTE3UzMzPTE5XDAxNSIsCQkvKiBzd2ZjX3N0ciAqLwor ICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1XDAxNSIsCQkJLyog ZWNfb25fc3RyICovCisgICAgIkFUJlEwXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJB VCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29m Zl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9 MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwor ICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29u X3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVww MTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICov CisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkv KiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8q IG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tE X1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMK K01ETUlORiBaT09NVjkyID0JCQkvKiBaT09NIFYuOTIgKi8KKyAgICB7CisgICAgIlpvb20gVi45 MiB3aXRoIFYuNDQgY29tcHJlc3Npb24iLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29t bWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJ CQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJ CQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMFYxTjFYNFkwJkMxJkQy JlMwJUUyXFxLNStGQ0xBU1M9MFMzNz0wK01TPVY5MlwwMTUiLCAvKiBLOTUgKi8KKyNlbHNlCisj aWZkZWYgVk1TCisgICAgIkFUUTBWMU4xWDRZMCZDMSZEMiZTMSVFMlxcSzUrRkNMQVNTPTBTMzc9 MCtNUz1WOTJcMDE1IiwgLyogVk1TICovCisjZWxzZQorICAgICJBVFEwVjFOMVg0WTAmQzEmRDIl RTJcXEs1K0ZDTEFTUz0wUzM3PTArTVM9VjkyXDAxNSIsIC8qIEFsbCBvdGhlcnMgKi8KKyNlbmRp ZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICov CisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9k ZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUi LAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAs CQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEw SDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIg Ki8KKyAgICAiQVQmSzRTMzI9MTdTMzM9MTlcMDE1IiwJCS8qIHN3ZmNfc3RyICovCisgICAgIkFU JkswXDAxNSIsCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQVQmUTVcMDE1IiwJCQkvKiBlY19vbl9z dHIgKi8KKyAgICAiQVQmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMxK0RD Uz0xLDFcMDE1IiwJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29m Zl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9 MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29uX3N0ciAqLwor ICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29u X3N0ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVww MTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICov CisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkv KiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8q IG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tE X1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCisKKy8qCisg IE5vdyB0aGUgIm9sZCIgbW9kZW1zLCBhbGwgZ3JvdXBlZCB0b2dldGhlciwgYW5kIGFsc28gd2l0 aGluCisgICJpZiBub3QgZGVmaW5lZCBNSU5JRElBTCIuLi4KKyovCisjaWZkZWYgT0xETU9ERU1T CisKK3N0YXRpYworTURNSU5GIENFUk1FVEVLID0JLyogSW5mb3JtYXRpb24gZm9yICJDZXJtZXRl ayBJbmZvLU1hdGUgMjEyIEEiIG1vZGVtICovCisgICAgeworICAgICJDZXJtZXRlayBJbmZvLU1h dGUgMjEyIEEiLAorICAgICIiLAkJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICIiLAkJCQkJ LyogdG9uZSBjb21tYW5kICovCisgICAgMjAsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiQmJQ cFR0IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAwLAkJCQkJLyogcGF1c2VfdGltZSAqLwor ICAgICIgIFhZXDAxNlJcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworICAgIDIwMCwJCQkJLyogd2Fr ZV9yYXRlICovCisgICAgIiIsCQkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyog ZG1vZGVfc3RyICovCisgICAgTlVMTCwJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIlwwMTZE ICclcydcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDIwMCwJCQkJLyogZGlhbF9yYXRlICov CisgICAgMCwJCQkJCS8qIGVzY190aW1lICovCisgICAgMCwJCQkJCS8qIGVzY19jaGFyICovCisg ICAgIiIsCQkJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAg ICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAg IiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLwor ICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICov CisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0 ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3Ry ICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQg Ki8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMjAwTCwJCQkJLyogbWF4X3NwZWVkICov CisgICAgMCwJCQkJCS8qIGNhcGFzICovCisgICAgTlVMTAkJCQkvKiBva19mbiAqLworfTsKKwor c3RhdGljCitNRE1JTkYgREYwMyA9CQkvKiBpbmZvcm1hdGlvbiBmb3IgIkRFQyBERjAzLUFDIiBt b2RlbSAqLworICAgIHsKKyAgICAiRGlnaXRhbCBERjAzLUFDIiwKKyAgICAiIiwJCQkJCS8qIHB1 bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDI3LAkJ CQkJLyogZGlhbF90aW1lICovCisgICAgIj0iLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDE1 LAkJCQkJLyogcGF1c2VfdGltZSAqLworICAgICJcMDAxXDAwMiIsCQkJCS8qIHdha2Vfc3RyICov CisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICIiLAkJCQkJLyogd2FrZV9wcm9tcHQg Ki8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgIE5VTEwsCQkJCS8qIGRtb2RlX3By b21wdCAqLworICAgICIlcyIsCQkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxf cmF0ZSAqLworICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLworICAgIDAsCQkJCQkvKiBlc2NfY2hh ciAqLworICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLworICAgICIiLAkJCQkJLyogaHdmY19zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAq LworICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vZmZfc3Ry ICovCisgICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29mZl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb2Zm X3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9v ZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBz cF9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2 b2wyX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGln bm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMEwsCQkJCQkvKiBtYXhfc3Bl ZWQgKi8KKyAgICAwLAkJCQkJLyogY2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9 OworCitzdGF0aWMKK01ETUlORiBERjEwMCA9CQkvKiBpbmZvcm1hdGlvbiBmb3IgIkRFQyBERjEw MC1zZXJpZXMiIG1vZGVtICovCisJCQkvKgorCQkJICogVGhlIHRlbGVwaG9uZSAibnVtYmVyIiBj YW4gaW5jbHVkZSAiUCJzIGFuZC9vciAiVCJzCisJCQkgKiB3aXRoaW4gaXQgdG8gaW5kaWNhdGUg dGhhdCBzdWJzZXF1ZW50IGRpZ2l0cyBhcmUKKwkJCSAqIHRvIGJlIGRpYWxlZCB1c2luZyBwdWxz ZSBvciB0b25lIGRpYWxpbmcuICBUaGUKKwkJCSAqIG1vZGVtIGRlZmF1bHRzIHRvIHB1bHNlIGRp YWxpbmcuICBZb3UgbWF5IG1vZGlmeQorCQkJICogdGhlIGRpYWwgc3RyaW5nIGJlbG93IHRvIGV4 cGxpY2l0bHkgZGVmYXVsdCBhbGwKKwkJCSAqIGRpYWxpbmcgdG8gcHVsc2Ugb3IgdG9uZSwgYnV0 IGRvaW5nIHNvIHByZXZlbnRzCisJCQkgKiB0aGUgdXNlIG9mIHBob25lIG51bWJlcnMgdGhhdCB5 b3UgbWF5IGhhdmUgc3RvcmVkCisJCQkgKiBpbiB0aGUgbW9kZW0ncyBtZW1vcnkuCisJCQkgKi8K KyAgICB7CisgICAgIkRpZ2l0YWwgREYtMTAwIiwKKyAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1h bmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDMwLAkJCQkJLyogZGlh bF90aW1lICovCisgICAgIj0iLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDE1LAkJCQkJLyog cGF1c2VfdGltZSAqLworICAgICJcMDAxIiwJCQkJLyogd2FrZV9zdHIgKi8KKyAgICAwLAkJCQkJ Lyogd2FrZV9yYXRlICovCisgICAgIiIsCQkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJ CQkJLyogZG1vZGVfc3RyICovCisgICAgTlVMTCwJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAg IiVzIyIsCQkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAg IDAsCQkJCQkvKiBlc2NfdGltZSAqLworICAgIDAsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICIi LAkJCQkJLyogaHVwX3N0ciAqLworICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJ CQkJLyogZWNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIs CQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGFhX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLworICAg ICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisg ICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwor ICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCisg ICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICAw LAkJCQkJLyogY2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMK K01ETUlORiBERjIwMCA9CQkvKiBpbmZvcm1hdGlvbiBmb3IgIkRFQyBERjIwMC1zZXJpZXMiIG1v ZGVtICovCisJCQkvKgorCQkJICogVGhlIHRlbGVwaG9uZSAibnVtYmVyIiBjYW4gaW5jbHVkZSAi UCJzIGFuZC9vciAiVCJzCisJCQkgKiB3aXRoaW4gaXQgdG8gaW5kaWNhdGUgdGhhdCBzdWJzZXF1 ZW50IGRpZ2l0cyBhcmUKKwkJCSAqIHRvIGJlIGRpYWxlZCB1c2luZyBwdWxzZSBvciB0b25lIGRp YWxpbmcuICBUaGUKKwkJCSAqIG1vZGVtIGRlZmF1bHRzIHRvIHB1bHNlIGRpYWxpbmcuICBZb3Ug bWF5IG1vZGlmeQorCQkJICogdGhlIGRpYWwgc3RyaW5nIGJlbG93IHRvIGV4cGxpY2l0bHkgZGVm YXVsdCBhbGwKKwkJCSAqIGRpYWxpbmcgdG8gcHVsc2Ugb3IgdG9uZSwgYnV0IGRvaW5nIHNvIHBy ZXZlbnRzCisJCQkgKiB0aGUgdXNlIG9mIHBob25lIG51bWJlcnMgdGhhdCB5b3UgbWF5IGhhdmUg c3RvcmVkCisJCQkgKiBpbiB0aGUgbW9kZW0ncyBtZW1vcnkuCisJCQkgKi8KKyAgICB7CisgICAg IkRpZ2l0YWwgREYtMjAwIiwKKyAgICAiIiwJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIiIs CQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzAsCQkJLyogZGlhbF90aW1lICovCisgICAgIj1X IiwJCS8qIHBhdXNlX2NoYXJzICovCS8qID06IHNlY29uZCB0b25lOyBXOiA1IHNlY3MgKi8KKyAg ICAxNSwJCQkvKiBwYXVzZV90aW1lICovCS8qIHdvcnN0IGNhc2UgKi8KKyAgICAiXDAwMiIsCQkv KiB3YWtlX3N0ciAqLwkJLyogYWxsb3cgc3RvcmVkIG51bWJlciB1c2FnZSAqLworICAgIDAsCQkJ Lyogd2FrZV9yYXRlICovCisgICAgIiIsCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkv KiBkbW9kZV9zdHIgKi8KKyAgICBOVUxMLAkJLyogZG1vZGVfcHJvbXB0ICovCisjaWZkZWYgQ09N TUVOVAorICAgICIlcyEiLAkJLyogZGlhbF9zdHIgKi8KKyNlbHNlCisgICAgIiAgIGQgJXNcMDE1 IiwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAg IDAsCQkJCQkvKiBlc2NfdGltZSAqLworICAgIDAsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICIi LAkJCQkJLyogaHVwX3N0ciAqLworICAgICIiLAkJCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJ CQkJLyogZWNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIs CQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGFhX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLworICAg ICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisg ICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLwor ICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCisg ICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICAw LAkJCQkJLyogY2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMK K01ETUlORiBHREMgPQkJLyogaW5mb3JtYXRpb24gZm9yICJHZW5lcmFsRGF0YUNvbW0gMjEyQS9F RCIgbW9kZW0gKi8KKyAgICB7CisgICAgIkdlbmVyYWxEYXRhQ29tbSAyMTJBL0VEIiwKKyAgICAi IiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAq LworICAgIDMyLAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiUiLAkJCQkvKiBwYXVzZV9jaGFy cyAqLworICAgIDMsCQkJCQkvKiBwYXVzZV90aW1lICovCisgICAgIlwwMTVcMDE1IiwJCQkJLyog d2FrZV9zdHIgKi8KKyAgICA1MDAsCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICIkIiwJCQkJLyog d2FrZV9wcm9tcHQgKi8KKyAgICAiRFwwMTUiLAkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiOiIs CQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJUJXNcMDE1IiwJCQkJLyogZGlhbF9zdHIgKi8K KyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMCwJCQkJCS8qIGVzY190aW1lICovCisg ICAgMCwJCQkJCS8qIGVzY19jaGFyICovCisgICAgIiIsCQkJCQkvKiBodXBfc3RyICovCisgICAg IiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAi IiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLworICAg ICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb25fc3RyICovCisg ICAgIiIsCQkJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8K KyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMV9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wzX3N0ciAq LworICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAg ICAxMjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgMCwJCQkJCS8qIGNhcGFzICovCisgICAg TlVMTAkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgUEVOUklMID0JCS8qIGlu Zm9ybWF0aW9uIGZvciAiUGVucmlsIiBtb2RlbSAqLworICAgIHsKKyAgICAiUGVucmlsIG1vZGVt IiwKKyAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUg Y29tbWFuZCAqLworICAgIDUwLAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiIsCQkJCQkvKiBw YXVzZV9jaGFycyAqLworICAgIDAsCQkJCQkvKiBwYXVzZV90aW1lICovCisgICAgIlwwMTVcMDE1 IiwJCQkJLyogd2FrZV9zdHIgKi8KKyAgICAzMDAsCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICI+ IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAia1wwMTUiLAkJCQkvKiBkbW9kZV9zdHIgKi8K KyAgICAiOiIsCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICIlc1wwMTUiLAkJCQkvKiBkaWFs X3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJLyogZXNjX3Rp bWUgKi8KKyAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiIiwJCQkJCS8qIGh1cF9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAq LworICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAq LworICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25fc3Ry ICovCisgICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBhYV9vbl9z dHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29u X3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bf b2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiB2 b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZv bDNfc3RyICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5p MiAqLworICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICovCisgICAgMCwJCQkJCS8qIGNhcGFzICov CisgICAgTlVMTAkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgUkFDQUwgPQkJ CQkvKiBSYWNhbCBWYWRpYyBWQTQ0OTJFICovCisgICAgeworICAgICJSYWNhbCBWYWRpYyBWQTQ0 OTJFIiwKKyAgICAiIiwJCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRv bmUgY29tbWFuZCAqLworICAgIDM1LAkJCS8qIGRpYWxfdGltZSAobWFudWFsIHNheXMgbW9kZW0g aXMgaGFyZHdpcmVkIHRvIDYwKSAqLworICAgICJLayIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisg ICAgNSwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyAgICAiXDAwNVwwMTUiLAkJCQkvKiB3YWtlX3N0 ciwgXkVeTSAqLworICAgIDUwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIioiLAkJCQkvKiB3 YWtlX3Byb21wdCAqLworICAgICJEXDAxNSIsCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICI/IiwJ CQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIiVzXDAxNSIsCQkJCS8qIGRpYWxfc3RyICovCisg ICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisg ICAgNSwJCQkJCS8qIGVzY19jaGFyLCBeRSAqLworICAgICJcMDAzXDAwNCIsCQkJCS8qIGh1cF9z dHIsIF5DXkQgKi8KKyAgICAwLAkJCQkJLyogaHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3 ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBub2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNf b25fc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBk Y19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGFhX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIiIsCQkJ CQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLworICAgICIiLAkJ CQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJ CQkvKiBpbmkyICovCisgICAgMEwsCQkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICAwLAkJCQkJLyog Y2FwYXMgKi8KKyAgICBOVUxMCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBW RU5URUwgPQkJCQkvKiBJbmZvcm1hdGlvbiBmb3IgVmVuLVRlbCBtb2RlbSAqLworICAgIHsKKyAg ICAiVmVuLVRlbCIsCisgICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIiIsCQkJ CQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAyMCwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIl IiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICA1LAkJCQkJLyogcGF1c2VfdGltZSAqLworICAg ICJcMDE1XDAxNVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCisgICAgMzAwLAkJCQkvKiB3YWtlX3Jh dGUgKi8KKyAgICAiJCIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIktcMDE1IiwJCQkJLyog ZG1vZGVfc3RyICh3YXMgIiIpICovCisgICAgIk51bWJlciB0byBjYWxsOiAiLAkJCS8qIGRtb2Rl X3Byb21wdCAod2FzIE5VTEwpICovCisgICAgIiVzXDAxNSIsCQkJCS8qIGRpYWxfc3RyICh3YXMg IjxLJXNccj4iKSAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJLyog ZXNjX3RpbWUgKi8KKyAgICAwLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiIiwJCQkJCS8qIGh1 cF9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2Zj X3N0ciAqLworICAgICIiLAkJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29u X3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNf b25fc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBh YV9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNiX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb25fc3RyICovCisgICAgIiIsCQkJ CQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIHZvbDNfc3RyICovCisgICAgIiIsCQkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJ LyogaW5pMiAqLworICAgIDBMLAkJCQkJLyogbWF4X3NwZWVkICovCisgICAgMCwJCQkJCS8qIGNh cGFzICovCisgICAgTlVMTAkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgQ09O Q09SRCA9CS8qIEluZm8gZm9yIENvbmRvciBDRFMgMjIwIDI0MDBiIG1vZGVtICovCisgICAgewor ICAgICJDb25jb3JkIENvbmRvciBDRFMgMjIwIDI0MDBiIiwKKyAgICAiIiwJCQkJCS8qIHB1bHNl IGNvbW1hbmQgKi8KKyAgICAiIiwJCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJ LyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJ CQkvKiBwYXVzZV90aW1lICovCisgICAgIlwwMTVcMDE1IiwJCQkJLyogd2FrZV9zdHIgKi8KKyAg ICAyMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJDRFMgPiIsCQkJCS8qIHdha2VfcHJvbXB0 ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICBOVUxMLAkJCQkvKiBkbW9kZV9w cm9tcHQgKi8KKyAgICAiPEQgTSVzXDAxNT4iLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLworICAgIDAsCQkJCQkvKiBlc2NfdGltZSAqLworICAgIDAsCQkJCQkv KiBlc2NfY2hhciAqLworICAgICIiLAkJCQkJLyogaHVwX3N0ciAqLworICAgICIiLAkJCQkJLyog aHdmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHN3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBu b2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogZWNfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBl Y19vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGRjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGFhX29uX3N0ciAqLworICAgICIiLAkJCQkJ LyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJ CQkvKiBzYl9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIiIs CQkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIs CQkJCQkvKiB2b2wyX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMjQwMEwsCQkJ CS8qIG1heF9zcGVlZCAqLworICAgIDAsCQkJCQkvKiBjYXBhcyAqLworICAgIE5VTEwJCQkJLyog b2tfZm4gKi8KK307CisjZW5kaWYgLyogT0xETU9ERU1TICovCisKK3N0YXRpYworTURNSU5GIE1J Q1JPQ09NID0JLyogTWljcm9jb20gbW9kZW1zIGluIG5hdGl2ZSBTWCBtb2RlICovCisJCQkvKiAo bG9uZyBhbnN3ZXIgb25seSkgKi8KK3sKKyAgICAiTWljcm9jb20gTU5QIG1vZGVtcyBpbiBTWCBj b21tYW5kIG1vZGUiLAorICAgICJEUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAg IkRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1l ICovCisgICAgIiwhQCIsCQkvKiBwYXVzZV9jaGFycyAoISBhbmQgQCBhcmVuJ3QgcHVyZSBwYXVz ZXMpICovCisgICAgMywJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKy8qCisgIFRoZSBmb2xsb3dpbmcg c2V0cyA4IGJpdHMsIG5vIHBhcml0eSwgQlJFQUsgcGFzc3RocnUsIGFuZCBTRTAgZGlzYWJsZXMg dGhlCisgIGVzY2FwZSBjaGFyYWN0ZXIsIHdoaWNoIGlzIGEgc2luZ2xlIGNoYXJhY3RlciB3aXRo IG5vIGd1YXJkIHRpbWUsIHRvdGFsbHkKKyAgdW5zYWZlLCBzbyB3ZSBoYXZlIG5vIGNob2ljZSBi dXQgdG8gZGlzYWJsZSBpdC4gIEVzcGVjaWFsbHkgc2luY2UsIGJ5CisgIGRlZmF1bHQsIGl0IGlz IEN0cmwtQSwgd2hpY2ggaXMgS2VybWl0J3MgcGFja2V0LXN0YXJ0IGNoYXJhY3Rlci4gIFdlIHdv dWxkCisgIGNoYW5nZSBpdCB0byBzb21ldGhpbmcgZWxzZSwgd2hpY2ggd291bGQgZW5hYmxlICJt ZG1odXAoKSIsIGJ1dCB0aGUgdXNlcgorICB3b3VsZG4ndCBrbm93IGFib3V0IGl0LiAgVmVyeSBi YWQuICBOb3RlOiBTRTEgc2V0cyBpdCB0byBDdHJsLUEsIFNFMgorICBzZXRzIGl0IHRvIEN0cmwt QiwgZXRjICgxLi4zMSBhbGxvd2VkKS4gIEFsc28gU0UvUSBzZXRzIGl0IHRvICJRIi4KKyovCisg ICAgIlNFMDtTMVA0O1NCUks1XDAxNSIsCQkvKiB3YWtlX3N0ciAqLworICAgIDEwMCwJCQkJLyog d2FrZV9yYXRlICovCisgICAgIiEiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJ LyogZG1vZGVfc3RyICovCisgICAgTlVMTCwJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkQl c1wwMTUiLAkJCQkvKiBkaWFsX3N0ciAtIG51bWJlciB1cCB0byAzOSBjaGFycyAqLworICAgIDAs CQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAwLAkJCQkJLyogZXNjX3RpbWUgKi8KKyAgICAwLAkJ CQkJLyogZXNjX2NoYXIgLSB3ZSBjYW4ndCB1c2UgdGhpcyAqLworICAgICIiLAkJCQkJLyogaHVw X3N0ciAtIGl0J3MgIkgiIGJ1dCBjYW4ndCB1c2UgKi8KKyAgICAiU0YxM1wwMTUiLAkJCQkvKiBo d2ZjX3N0ciAqLworICAgICJTRjExXDAxNSIsCQkJCS8qIHN3ZmNfc3RyICovCisgICAgIlNGMTBc MDE1IiwJCQkJLyogbm9mY19zdHIgKi8KKyAgICAiQkFPRkY7U01BVVRcMDE1IiwJCQkvKiBlY19v bl9zdHIgKi8KKyAgICAiQkFPTjtTTURJUlwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAi Q09NUDFcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQ09NUDBcMDE1IiwJCQkvKiBkY19v ZmZfc3RyICovCisgICAgIkFBIiwJCQkJLyogYWFfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBh YV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNiX29mZl9zdHIgKi8KKyAgICAiU0EyIiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJTQTAi LAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIs CQkJCQkvKiB2b2wyX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMEwsCQkJCQkv KiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXfENL RF9LUywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGlj CitNRE1JTkYgTUlDUk9MSU5LID0JCQkvKiBNaWNyb0xpbmsgLi4uICovCisgICAgewkJCQkJLyog MTQuNFRRLFRMLFBDOzI4LjhUUSxUUVY7MjQ0MFQvVFIgKi8KKyAgICAiRUxTQSBNaWNyb0xpbmsg MTQuNCwgMjguOCwgMzMuNiBvciA1NksiLCAvKiBFTFNBIEdtYkgsIEFhY2hlbiAqLworICAgICJB VFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9u ZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8q IHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIK KyAgICAiQVRRMEUxVjFYNCZTMFxcRDAmQzEmRDJcXEs1XDAxNSIsCS8qIHdha2Vfc3RyICovCisj ZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwWDQmUzFcXEs1XDAxNSIsCQkvKiB3YWtlX3N0ciAq LworI2Vsc2UKKyAgICAiQVRRMFg0XFxLNVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCisjZW5kaWYg LyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwor ICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVf c3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJ CQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJ CQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEhc MDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICov CisgICAgIkFUXFxRMVxcWDBcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVFxcUTBcMDE1 IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8K KyAgICAiQVRcXE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDM1wwMTUiLAkJ CS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAg ICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8q IGFhX29mZl9zdHIgKi8KKyAgICAiXFxKMCIsCQkJCS8qIHNiX29uX3N0ciAoPykgKi8KKyAgICAi IiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIg Ki8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJ CQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAg ICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdu b3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9z cGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAv KiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlO RiBVTElOS1YyNTAgPQkJCS8qIE1pY3JvTGluayBWLjI1MCAqLworICAgIHsJCQkJCS8qIDU2S2Zs ZXgsIFYuOTA7IFYuMjUwIGNvbW1hbmQgc2V0ICovCisgICAgIkVMU0EgTWljcm9MaW5rIDU2SyBW LjI1MCIsCQkvKiBFTFNBIEdtYkgsIEFhY2hlbiAqLworICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisg ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAvKiBcRDAgPSBEU1Ig JiBDVFMgYWx3YXlzIG9uIGJ1dCBod2ZjIG92ZXJyaWRlcyBvbiBDVFMuICovCisgICAgIkFUUTBF MVYxWDQmUzBcXEQwJkMxJkQyXDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZN UworICAgICJBVFEwWDQmUzFcMDE1IiwJCQkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRR MFg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdh a2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAg MCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAg NDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICov CisgICAgIkFUK0lGQz0yLDJcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCtJRkM9MSwx XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQrSUZDPTAsMFwwMTUiLAkJCS8qIG5vZmNf c3RyICovCisgICAgIkFUK0VTPTMsMFwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVCtF Uz0xLDBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUK0RTPTMsMCwyMDQ4LDMyXDAx NSIsCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQrRFM9MCwwXDAxNSIsCQkJLyogZGNfb2ZmX3N0 ciAqLworCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBc MDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKD8pICov CisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bf b25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwx XDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIg Ki8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJ CS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkv KiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENL RF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKyNlbmRpZiAv KiBNSU5JRElBTCAqLworCitzdGF0aWMKK01ETUlORiBJVFVUVjI1MCA9CQkJLyogSVRVLVQgVi4y NTAgY29uZm9ybWluZyBtb2RlbSAqLworeworICAgICJBbnkgSVRVLVQgVi4yNXRlci9WLjI1MCBj b25mb3JtYW50IG1vZGVtIiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8K KyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlh bF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBw YXVzZV90aW1lICovCisgICAgIkFUUTBFMVYxWDQmQzEmRDJcMDE1IiwJCS8qIHdha2Vfc3RyIChu byAmU24gaW4gVi4yNSkgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAx NSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxf c3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190 aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkv KiBodXBfc3RyICovCisgICAgIkFUK0lGQz0yLDJcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAg ICJBVCtJRkM9MSwxXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQrSUZDPTAsMFwwMTUi LAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUK0VTPTMsMCwyOytFQj0xLDAsMzBcMDE1IiwJLyog ZWNfb25fc3RyICovCisgICAgIkFUK0VTPTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAg IkFUK0RTPTMsMFwwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCtEUz0wLDBcMDE1IiwJ CQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwor ICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9v bl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJ CQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisg ICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2 b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNc MDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYw MEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xD S0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9Owor CisjaWZuZGVmIENLX1RBUEkKK3N0YXRpYworI2VuZGlmIC8qIENLX1RBUEkgKi8KK01ETUlORiBH RU5FUklDID0JCQkvKiBHZW5lcmljIGhpZ2ggc3BlZWQgLi4uICovCisgICAgeworICAgICJHZW5l cmljIGhpZ2gtc3BlZWQgQVQgY29tbWFuZCBzZXQiLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVs c2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAg MzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisg ICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyAgICAiIiwJCQkJCS8qIHdha2Vfc3RyICovCisg ICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICIiLAkJCQkJLyogd2FrZV9wcm9tcHQgKi8K KyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0 ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlh bF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVz Y19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiIiwJCQkJ CS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLworICAgICIiLAkJCQkJ Lyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLworICAgICIiLAkJCQkJ LyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCisgICAgIiIsCQkJ CQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLwor ICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9v bl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNw X29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyog dm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAgIiIsCQkJCQkvKiB2 b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJ CQkvKiBpbmkyICovCisgICAgMTE1MjAwLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8 Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8q IG9rX2ZuICovCit9OworCisjaWZuZGVmIE1JTklESUFMCitzdGF0aWMKK01ETUlORiBYSkFDSyA9 CQkJCS8qIE1lZ2FoZXJ0eiBYLUphY2sgKi8KKyAgICB7CisgICAgIk1lZ2FoZXJ0eiBYLUphY2sg WEozMTQ0IC8gQ0M2MTQ0IiwKKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8K KyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlh bF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBw YXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBFMVYxWDROMSZDMSZEMlxcSzVcMDE1 IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBYNE4xXFxLNVwwMTUiLAkJCS8qIHdh a2Vfc3RyICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLwor ICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVf c3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJ CQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJ CQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEhc MDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8K KyAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8q IG5vZmNfc3RyICovCisgICAgIkFUXFxOMyZRNVwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAg ICJBVFxcTjEmUTBcMDE1IiwJCQkvKiBlY19vZmZfc3RyICovCisgICAgIkFUJUMzXDAxNSIsCQkJ LyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAg ICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyog YWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkv KiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFcMDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAg IkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICJBVEwxXDAxNSIsCQkJCS8qIHZv bDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9sMl9zdHIgKi8KKyAgICAiQVRMM1ww MTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAxNSIsCQkJCS8qIGlnbm9yZWR0ICov CisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgNTc2MDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8K KyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMg Ki8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgU1BJUklU SUkgPQkJCS8qIFF1aWNrQ29tbSBTcGlyaXQgSUkgKi8KKyAgICB7CisgICAgIlF1aWNrQ29tbSBT cGlyaXQgSUkiLAorICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJB VFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUg Ki8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3Rp bWUgKi8KKyAgICAiQVQmRlwwMTUiLAkJCQkvKiB3YWtlX3N0ciAqLworICAgIDAsCQkJCQkvKiB3 YWtlX3JhdGUgKi8KKyAgICAiT0tcMDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJ CQkJCS8qIGRtb2RlX3N0ciAqLworICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAg IkFURCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICov CisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICov CisgICAgIkFUUTBIXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCpGM1wwMTUiLAkJCS8q IGh3ZmNfc3RyICovCisgICAgIkFUKkYyXDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQq RjBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVCpFNlwwMTUiLAkJCS8qIGVjX29uX3N0 ciAqLworICAgICJBVCpFMFwwMTUiLAkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQqRTlcMDE1 IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQqRTBcMDE1IiwJCQkvKiBkY19vZmZfc3RyICov CisgICAgIkFUUzA9MlwwMTUiLAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVFMwPTBcMDE1IiwJ CQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8K KyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJ Lyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJB VEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3Jl ZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9zcGVl ZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBj YXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlORiBN T05UQU5BID0gewkJCS8qIE1vdG9yb2xhIE1vbnRhbmEgKi8KKyAgICAiTW90b3JvbGEgTW9udGFu YSIsCQkJLyogTmFtZSAqLworICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLwor ICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFs X3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBh dXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKyAgICAiQVRRMEUxVjFYNCZTMCZDMSZEMlxcSzVcXFYx XDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwRTFYNCZT MVxcSzVcXFYxXDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMEUxWDRcXEs1 XFxWMVwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdh a2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAg MCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAg NDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICov CisgICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFUXFxRMVwwMTUiLAkJ CS8qIHN3ZmNfc3RyICovCisgICAgIkFUXFxRMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAg IkFUXFxONFwwMTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFxcTjFcMDE1IiwJCQkvKiBl Y19vZmZfc3RyICovCisgICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFU JUMwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9v bl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICJBVFxc SjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiQVRcXEoxXDAxNSIsCQkJLyogc2Jfb2Zm X3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAqLworICAgICJBVE0wXDAx NSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJCQkvKiB2b2wxX3N0ciAq LworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJ Lyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIi LAkJCQkJLyogaW5pMiAqLworICAgIDU3NjAwTCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tE X0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENLRF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAg Z2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIENPTVBBUSA9IHsJCQkv KiBDb21wYXEgRGF0YStGYXggTW9kZW0gKi8KKyAgICAiQ29tcGFxIERhdGErRmF4IE1vZGVtIiwJ CS8qIE5hbWUgKi8KKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAi QVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1l ICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90 aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBFMVYxWDQmUzAmQzEmRDJcMDE1IiwJCS8qIHdh a2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwRTFYNCZTMVwwMTUiLAkJCS8q IHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwRTFYNFwwMTUiLAkJCS8qIHdha2Vfc3RyICov CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2Vf cmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJ LyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVRE JXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAg ICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAg ICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVFxcUTNcMDE1IiwJCQkvKiBo d2ZjX3N0ciAoc2FtZSBhcyAmSzMpICovCisgICAgIkFUXFxRMVwwMTUiLAkJCS8qIHN3ZmNfc3Ry IChzYW1lIGFzICZLNCkgKi8KKyAgICAiQVRcXFEwXDAxNSIsCQkJLyogbm9mY19zdHIgKHNhbWUg YXMgJkswKSAqLworICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVRc XE4wXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDMVwwMTUiLAkJCS8qIGRjX29u X3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0x XDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9z dHIgKi8KKyAgICAiQVRcXE4zXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCisgICAgIkFUXFxOMVww MTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIg Ki8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDBcMDE1IiwJ CQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAg ICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdu b3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhf c3BlZWQgKi8KKyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywg LyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworCitzdGF0aWMKK01E TUlORiBGVUpJVFNVID0gewkJCS8qIEZ1aml0c3UgKi8KKyAgICAiRnVqaXRzdSBGYXgvTW9kZW0g QWRhcHRlciIsCS8qIE5hbWUgKi8KKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQg Ki8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyog ZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkv KiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBFMVYxWDQmUzAmQzEmRDJcXEs1 XFxOM1wwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMEUx WDQmUzFcXEs1XFxOM1wwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMVg0 XFxLNVxcTjNcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYg LyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkv KiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJ CQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLwor ICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLwor ICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0 ciAqLworICAgICJBVCZLM1xcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJBVCZLNFxc UTFcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZLMFxcUTBcMDE1IiwJCQkvKiBub2Zj X3N0ciAqLworICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVRcXE4w XDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDMSIsCQkJCS8qIGRjX29uX3N0ciAq LworICAgICJBVCVDMCIsCQkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJ LyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAg ICAiQVRcXEowXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCisgICAgIkFUXFxKMVwwMTUiLAkJCS8q IHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAi QVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9s MV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAx NSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8K KyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8K KyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMg Ki8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgTUhaQVRU ID0JCQkJLyogTWVnYWhlcnR6IEFUJlQgVi4zNCAqLworICAgIHsKKyAgICAiTWVnYWhlcnR6IEFU JlQgVi4zNCIsCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIkFU VFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAq LworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGlt ZSAqLworI2lmZGVmIE9TMgorICAgICJBVFEwRTFWMVg0TjEmQzEmRDJcXEs1XDAxNSIsCS8qIHdh a2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwWDROMVxcSzVcMDE1IiwJCQkvKiB3YWtlX3N0ciAq LworI2VuZGlmIC8qIE9TMiAqLworICAgIDAsCQkJCQkvKiB3YWtlX3JhdGUgKi8KKyAgICAiT0tc MDE1IiwJCQkJLyogd2FrZV9wcm9tcHQgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3N0ciAqLwor ICAgICIiLAkJCQkJLyogZG1vZGVfcHJvbXB0ICovCisgICAgIkFURCVzXDAxNSIsCQkJLyogZGlh bF9zdHIgKi8KKyAgICAwLAkJCQkJLyogZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNj X3RpbWUgKi8KKyAgICA0MywJCQkJCS8qIGVzY19jaGFyICovCisgICAgIkFUUTBIXDAxNSIsCQkJ LyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisgICAgIkFU Jks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQmSzBcMDE1IiwJCQkvKiBub2ZjX3N0 ciAqLworICAgICJBVFxcTjNcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVRcXE4wXDAx NSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDMVwiSDNcMDE1IiwJCQkvKiBkY19vbl9z dHIgKi8KKyAgICAiQVQlQzBcIkgwXDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMw PTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2Zm X3N0ciAqLworICAgICJBVFxcSjBcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiQVRcXEox XDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0 ciAqLworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUi LAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisg ICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYM1wwMTUiLAkJCQkvKiBp Z25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1h eF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NX LCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01E TUlORiBTVVBSQVNPTiA9CQkJLyogU3VwcmFTb25pYyAqLworICAgIHsKKyAgICAiRGlhbW9uZCBT dXByYVNvbmljIDI4OFYrIiwJCS8qIERpYW1vbmQgTXVsdGltZWRpYSBTeXN0ZW1zIEluYyAqLwor ICAgICJBVFBcMDE1IiwJCQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJ LyogdG9uZSBjb21tYW5kICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIs CQkJCS8qIHBhdXNlX2NoYXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRl ZiBPUzIKKyAgICAiQVRRMEUxVjFOMVcwWDRZMCZTMCZDMSZEMlwwMTUiLAkvKiB3YWtlX3N0ciAq LworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiQVRRMEUxTjFXMFg0WTAmUzFcMDE1IiwJCS8qIHdh a2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwRTFOMVcwWDRZMFwwMTUiLAkJLyogd2FrZV9zdHIg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2Fr ZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJ CQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJB VEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLwor ICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLwor ICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUJkszXDAxNSIsCQkJLyog aHdmY19zdHIgKi8KKyAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVCZL XDAxNSIsCQkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUJlE1XFxOM1M0OD03XDAxNSIsCQkvKiBl Y19vbl9zdHIgKi8KKyAgICAiQVQmUTBcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAg ICJBVCVDM1M0Nj0xMzhcMDE1IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBTNDY9MTM2 XDAxNSIsCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9z dHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIkFUTTFc MDE1IiwJCQkJLyogc3Bfb25fc3RyICovCisgICAgIkFUTVwwMTUiLAkJCQkvKiBzcF9vZmZfc3Ry ICovCisgICAgIkFUTFwwMTUiLAkJCQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJ CS8qIHZvbDJfc3RyICovCisgICAgIkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAi QVRYM1wwMTUiLAkJCQkvKiBpZ25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAg IDExNTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENL RF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICov Cit9OworCitzdGF0aWMKK01ETUlORiBCRVNUREFUQSA9CQkJLyogQmVzdCBEYXRhICovCisgICAg eworICAgICJCZXN0IERhdGEgRmF4IE1vZGVtIiwJCS8qIEJlc3QgRGF0YSBGYXggTW9kZW0gKi8K KyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJ CS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwi LAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZk ZWYgT1MyCisgICAgIkFUUTBFMVYxTjFXMFg0WTAmUzAmQzEmRDJcMDE1IiwJLyogd2FrZV9zdHIg Ki8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFUUTBFMU4xVzBYNFkwJlMxXDAxNSIsCQkvKiB3 YWtlX3N0ciAqLworI2Vsc2UKKyAgICAiQVRRMEUxTjFXMFg0WTBcMDE1IiwJCS8qIHdha2Vfc3Ry ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdh a2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJ CQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAi QVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8K KyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8K KyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCZLM1wwMTUiLAkJCS8q IGh3ZmNfc3RyICovCisgICAgIkFUJks0XDAxNSIsCQkJLyogc3dmY19zdHIgKi8KKyAgICAiQVQm S1wwMTUiLAkJCQkvKiBub2ZjX3N0ciAqLworICAgICJBVCZRNlxcTjNcMDE1IiwJCQkvKiBlY19v bl9zdHIgKi8KKyAgICAiQVQmUTBcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJB VCVDM1wwMTUiLAkJCS8qIGRjX29uX3N0ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29m Zl9zdHIgKi8KKyAgICAiQVRTMD0xXDAxNSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9 MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIgKi8KKyAgICAiQVRcXE4zXDAxNSIsCQkJLyogc2Jfb25f c3RyICovCisgICAgIkFUXFxOMFwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVww MTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3Ry ICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJ CQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAg IkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAg ICA1NzYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENL RF9EQ3xDS0RfSFd8Q0tEX1NXLCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICov Cit9OworCitzdGF0aWMKK01ETUlORiBBVFQxOTAwID0JCQkvKiBBVCZUIFNlY3VyZSBEYXRhIFNU VSBJSUkgMTkwMCAqLworICAgIHsKKyAgICAiQVQmVCBTZWN1cmUgRGF0YSBTVFUgSUlJIE1vZGVs IDE5MDAiLCAvKiBuYW1lICovCisgICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAg IiIsCQkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLwor ICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAq LworI2lmZGVmIE9TMgorICAgICJBVFEwRTFWMVg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNl bHNlCisgICAgIkFUUTBFMVg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2Vf cHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRt b2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJ CQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMs CQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisg ICAgIiIsCQkJCQkvKiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIG5vZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBlY19vbl9zdHIgKi8KKyAg ICAiIiwJCQkJCS8qIGVjX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRjX29uX3N0ciAqLwor ICAgICIiLAkJCQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9v bl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICIiLAkJ CQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICovCisgICAgIiIs CQkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAi IiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAqLworICAgICIi LAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIs CQkJCQkvKiBpbmkyICovCisgICAgOTYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9B VHxDS0RfU0J8Q0tEX0hXLAkJLyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLwor fTsKKworLyoKKyAgRXhwZXJpbWVudGF0aW9uIHNob3dlZCB0aGF0IGhhcmRseSBhbnkgb2YgdGhl IGRvY3VtZW50ZWQgY29tbWFuZHMgZGlkCisgIGFueXRoaW5nIG90aGVyIHRoYXQgcHJpbnQgRVJS T1IuICBBdCBmaXJzdCB0aGVyZSB3YXMgbm8gY29tbXVuaWNhdGlvbiBhdAorICBhbGwgYXQgOTYw MCBicHMgLS0gdHVybnMgb3V0IHRoZSBpbnRlcmZhY2Ugc3BlZWQgd2FzIHN0dWNrIGF0IDI0MDAu CisgIEFUUzI4PTEzMCAoZ2l2ZW4gYXQgMjQwMCBicHMpIGFsbG93ZWQgaXQgdG8gd29yayBhdCA5 NjAwLgorKi8KK3N0YXRpYworTURNSU5GIEFUVDE5MTAgPQkJCS8qIEFUJlQgU2VjdXJlIERhdGEg U1RVIElJSSAxOTEwICovCisgICAgewkJCQkJLyogQWRkcyBWLjMyYmlzLCBWLjQyLCBWLjQyYmlz ICovCisgICAgIkFUJlQgU2VjdXJlIERhdGEgU1RVIElJSSBNb2RlbCAxOTEwIiwgLyogbmFtZSAq LworCisvKiBCZWxpZXZlIGl0IG9yIG5vdCwgIkFUVCIgYW5kICJBVFAiIHJlc3VsdCBpbiBFUlJP UiAqLworCisgICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIiIsCQkJCQkvKiB0 b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJ LyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9T MgorICAgICJBVFEwRTFWMVg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFU UTBFMVg0XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJ CQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisg ICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAq LworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxf cmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2Nf Y2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAgIiIsCQkJCQkv KiBod2ZjX3N0ciAqLworICAgICIiLAkJCQkJLyogc3dmY19zdHIgKi8KKyAgICAiIiwJCQkJCS8q IG5vZmNfc3RyICovCisjaWZkZWYgQ09NTUVOVAorLyogVGhlc2UgYXJlIGV2aWRlbnRseSByZWFk LW9ubHkgcmVnaXN0ZXJzICovCisgICAgIkFUUzQ2PTEzOFM0Nz0wXDAxNSIsCQkvKiBlY19vbl9z dHIgKi8KKyAgICAiQVRTNDY9MTM4UzQ3PTEyOFwwMTUiLAkJLyogZWNfb2ZmX3N0ciAqLworICAg ICJBVFM0Nj0xMzhTNDc9MFwwMTUiLAkJLyogZGNfb25fc3RyICovCisgICAgIkFUUzQ2PTEzOFM0 Nz0xMjhcMDE1IiwJCS8qIGRjX29mZl9zdHIgKi8KKyNlbHNlCisgICAgIiIsCisgICAgIiIsCisg ICAgIiIsCisgICAgIiIsCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICJBVFMwPTFcMDE1IiwJ CQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLwor ICAgICIiLAkJCQkJLyogc2Jfb25fc3RyICovCisgICAgIiIsCQkJCQkvKiBzYl9vZmZfc3RyICov CisgICAgIiIsCQkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNwX29mZl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHZvbDFfc3RyICovCisgICAgIiIsCQkJCQkvKiB2b2wyX3N0ciAq LworICAgICIiLAkJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGlnbm9yZWR0ICov CisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgOTYwMEwsCQkJCS8qIG1heF9zcGVlZCAqLwor ICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFcsCS8qIGNhcGFzICovCisgICAg Z2V0b2sJCQkJLyogb2tfZm4gKi8KK307CisKK3N0YXRpYworTURNSU5GIEtFRVBJTlRPVUNIID0J CQkvKiBBVCZUIEtlZXBpblRvdWNoIENhcmQgTW9kZW0gKi8KKyAgICB7CisgICAgIkFUJlQgS2Vl cGluVG91Y2ggVi4zMmJpcyBDYXJkIE1vZGVtIiwgLyogTmFtZSAqLworICAgICJBVFBcMDE1IiwJ CQkJLyogcHVsc2UgY29tbWFuZCAqLworICAgICJBVFRcMDE1IiwJCQkJLyogdG9uZSBjb21tYW5k ICovCisgICAgMzUsCQkJCQkvKiBkaWFsX3RpbWUgKi8KKyAgICAiLCIsCQkJCS8qIHBhdXNlX2No YXJzICovCisgICAgMiwJCQkJCS8qIHBhdXNlX3RpbWUgKi8KKyNpZmRlZiBPUzIKKy8qIFRoaXMg dXNlZCB0byBpbmNsdWRlICZDMSZTMCZEMitRMCBidXQgdGhhdCBnaXZlcyBFUlJPUiAqLworICAg ICJBVFEwRTFWMVg0JlMwJkMxJkQyXFxLNVwwMTUiLAkvKiB3YWtlX3N0ciAqLworI2Vsc2UKKyNp ZmRlZiBWTVMKKyAgICAiQVRRMEUxWDQmUzFcXEs1XDAxNSIsCQkvKiB3YWtlX3N0ciAqLworI2Vs c2UKKyAgICAiQVRRMEUxWDRcXEs1XDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAg Ik9LXDAxNSIsCQkJCS8qIHdha2VfcHJvbXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIGRtb2RlX3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8q IGRpYWxfc3RyICovCisgICAgMCwJCQkJCS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8q IGVzY190aW1lICovCisgICAgNDMsCQkJCQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1 IiwJCQkvKiBodXBfc3RyICovCisgICAgIkFUXFxRM1wwMTUiLAkJCS8qIGh3ZmNfc3RyICovCisg ICAgIkFUXFxRMVxcWDBcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVFxcUTBcMDE1IiwJ CQkvKiBub2ZjX3N0ciAqLworICAgICJBVFxcTjMtSjFcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8K KyAgICAiQVRcXE4xXDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDM1wiSDNcMDE1 IiwJCQkvKiBkY19vbl9zdHIgKi8KKyAgICAiQVQlQzBcIkgwXDAxNSIsCQkJLyogZGNfb2ZmX3N0 ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8KKyAgICAiQVRTMD0wXDAx NSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICJBVE4wXFxKMFwwMTUiLAkJCS8qIHNiX29uX3N0 ciAqLworICAgICJBVE4xXFxKMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiQVRNMVww MTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3Ry ICovCisgICAgIiIsCQkJCQkvKiB2b2wxX3N0ciAqLworICAgICIiLAkJCQkJLyogdm9sMl9zdHIg Ki8KKyAgICAiIiwJCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdu b3JlZHQgKi8KKyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICA1NzYwMEwsCQkJCS8qIG1heF9z cGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NXLCAv KiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01ETUlO RiBST0xNX0FUID0JCS8qIFJvbG0gZGF0YSBwaG9uZSB3aXRoIEFUIGNvbW1hbmQgc2V0ICovCisg ICAgeworICAgICJSb2xtIDI0NFBDIG9yIDYwMCBTZXJpZXMgd2l0aCBBVCBDb21tYW5kIFNldCIs CisgICAgIiIsCQkJCQkvKiBwdWxzZSBjb21tYW5kICovCisgICAgIiIsCQkJCQkvKiB0b25lIGNv bW1hbmQgKi8KKyAgICAzNSwJCQkJCS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1 c2VfY2hhcnMgKi8KKyAgICAyLAkJCQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAg ICJBVEUxUTBWMVwwMTUiLAkJCS8qIHdha2Vfc3RyICovCisjZWxzZQorICAgICJBVFEwXDAxNSIs CQkJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2Vf cmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJ LyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVRE VCVzXDAxNSIsCQkJLyogZGlhbF9zdHIgLS0gYWx3YXlzIFRvbmUgKi8KKyAgICAwLAkJCQkJLyog ZGlhbF9yYXRlICovCisgICAgMTEwMCwJCQkJLyogZXNjX3RpbWUgKi8KKyAgICA0MywJCQkJCS8q IGVzY19jaGFyICovCisgICAgIkFUUTBIMFwwMTUiLAkJCS8qIGh1cF9zdHIgKi8KKyAgICAiIiwJ CQkJCS8qIGh3ZmNfc3RyICovCisgICAgIiIsCQkJCQkvKiBzd2ZjX3N0ciAqLworICAgICIiLAkJ CQkJLyogbm9mY19zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGVjX29uX3N0ciAqLworICAgICIiLAkJ CQkJLyogZWNfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJLyogZGNfb25fc3RyICovCisgICAgIiIs CQkJCQkvKiBkY19vZmZfc3RyICovCisgICAgIkFUUzA9MVwwMTUiLAkJCS8qIGFhX29uX3N0ciAq LworICAgICJBVFMwPTBcMDE1IiwJCQkvKiBhYV9vZmZfc3RyICovCisgICAgIiIsCQkJCQkvKiBz Yl9vbl9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHNiX29mZl9zdHIgKi8KKyAgICAiIiwJCQkJCS8q IHNwX29uX3N0ciAqLworICAgICIiLAkJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAgICIiLAkJCQkJ Lyogdm9sMV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIHZvbDJfc3RyICovCisgICAgIiIsCQkJCQkv KiB2b2wzX3N0ciAqLworICAgICIiLAkJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJCS8q IGluaTIgKi8KKyAgICAxOTIwMEwsCQkJCS8qIG1heF9zcGVlZCAqLworICAgIENLRF9BVCwJCQkJ LyogY2FwYXMgKi8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1J TkYgQVRMQVMgPQkJCQkvKiBBdGxhcyAvIE5ld2NvbSBpeGZDIDMzLjYgKi8KKyAgICB7CisgICAg IkF0bGFzIC8gTmV3Y29tIDMzNjAwaXhmQyBEYXRhL0ZheCBNb2RlbSIsIC8qIE5hbWUgKi8KKyAg ICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8q IHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJ CQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYg T1MyCisgICAgIkFUWjAmRlEwVjEmQzEmRDJcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZWxzZQor ICAgICJBVFowJkZRMFYxXDAxNSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJv bXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2Rl X3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJ CQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAg IkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2Zj X3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUXCJIM1ww MTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFwiSDBcMDE1IiwJCQkvKiBlY19vZmZfc3Ry ICovCisgICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIs CQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8K KyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICJBVE4wXFxKMFwwMTUi LAkJCS8qIHNiX29uX3N0ciAqLworICAgICJBVE4xXFxKMVwwMTUiLAkJCS8qIHNiX29mZl9zdHIg Ki8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAiQVRNMFwwMTUiLAkJ CQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9sMV9zdHIgKi8KKyAg ICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAxNSIsCQkJCS8qIHZv bDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8KKyAgICAiIiwJCQkJ CS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8KKyAgICBDS0RfQVR8 Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMgKi8KKyAgICBnZXRv awkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgQ09ERVggPSB7CQkJLyogTW90 b3JvbGEgQ29kZXggKi8KKyAgICAiTW90b3JvbGEgQ29kZXggMzI2WCBTZXJpZXMiLAkvKiBOYW1l IC0gQVQmViB0byBzZWUgc2V0dGluZ3MgKi8KKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNlIGNv bW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1LAkJ CQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAgIDIs CQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgLyogJk0wPUFzeW5jIChub3Qg c3luYykgKi8KKyAgICAvKiAqTU0wPUF1dG9tYXRpYyBtb2R1bGF0aW9uIG5lZ290aWF0aW9uICov CisgICAgLyogKkRFMjI9QXV0b21hdGljIGRhdGEgcmF0ZSAqLworICAgICJBVFpRMEUxVjFYNFkw KkRFMjIqTU0wJkMxJk0wJlMwJkQyXDAxNSIsIC8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVm IFZNUworICAgICJBVFpRMEUxVjFYNFkwKkRFMjIqTU0wJkMxJk0wJlMxXDAxNSIsIC8qIHdha2Vf c3RyICovCisjZWxzZQorICAgICJBVFpRMEUxVjFYNFkwKkRFMjIqTU0wJkMxJk0wXDAxNSIsCS8q IHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisgICAgMCwJ CQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1wwMTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLwor ICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQg Ki8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFsX3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFs X3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2NfdGltZSAqLworICAgIDQzLAkJCQkJLyogZXNj X2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJLyogaHVwX3N0ciAqLworICAgICJBVCpNRjEq RkwzXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQqTUYxKkZMMVwwMTUiLAkJCS8qIHN3 ZmNfc3RyICovCisgICAgIkFUKk1GMCpGTDBcMDE1IiwJCQkvKiBub2ZjX3N0ciAqLworICAgICJB VCpFQzAqU00zKlNDMFwwMTUiLAkJLyogZWNfb25fc3RyICovCisgICAgIkFUKlNNMFwwMTUiLAkJ CS8qIGVjX29mZl9zdHIgKi8KKyAgICAiQVQqREMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisg ICAgIkFUKkRDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVQqQUE1UzA9MVwwMTUi LAkJCS8qIGFhX29uX3N0ciAqLworICAgICJBVCpBQTVTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0 ciAqLworICAgICJBVCpTQzFcMDE1IiwJCQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiQVQqU0MwXDAx NSIsCQkJLyogc2Jfb2ZmX3N0ciAqLworICAgICJBVE0xXDAxNSIsCQkJCS8qIHNwX29uX3N0ciAq LworICAgICJBVE0wXDAxNSIsCQkJCS8qIHNwX29mZl9zdHIgKi8KKyAgICAiQVRMMVwwMTUiLAkJ CQkvKiB2b2wxX3N0ciAqLworICAgICJBVEwyXDAxNSIsCQkJCS8qIHZvbDJfc3RyICovCisgICAg IkFUTDNcMDE1IiwJCQkJLyogdm9sM19zdHIgKi8KKyAgICAiQVRYMypCRDJcMDE1IiwJCQkvKiBp Z25vcmVkdCAqLworICAgICIiLAkJCQkJLyogaW5pMiAqLworICAgIDExNTIwMEwsCQkJCS8qIG1h eF9zcGVlZCAqLworICAgIENLRF9BVHxDS0RfU0J8Q0tEX0VDfENLRF9EQ3xDS0RfSFd8Q0tEX1NX LCAvKiBjYXBhcyAqLworICAgIGdldG9rCQkJCS8qIG9rX2ZuICovCit9OworCitzdGF0aWMKK01E TUlORiBNVDU2MzRaUFggPQkJCS8qIE11bHRpdGVjaCAqLworICAgIHsKKyAgICAiTXVsdGl0ZWNo IE1UNTYzNFpQWCIsCQkvKiBuYW1lICovCisgICAgIkFUUFwwMTUiLAkJCQkvKiBwdWxzZSBjb21t YW5kICovCisgICAgIkFUVFwwMTUiLAkJCQkvKiB0b25lIGNvbW1hbmQgKi8KKyAgICAzNSwJCQkJ CS8qIGRpYWxfdGltZSAqLworICAgICIsIiwJCQkJLyogcGF1c2VfY2hhcnMgKi8KKyAgICAyLAkJ CQkJLyogcGF1c2VfdGltZSAqLworI2lmZGVmIE9TMgorICAgICJBVEUxUTBWMVg0JlMwJkMxJkQy JlEwXDAxNSIsCS8qIHdha2Vfc3RyICovCisjZWxzZQorI2lmZGVmIFZNUworICAgICJBVFEwRTFY NCZTMSZRMFwwMTUiLAkJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFUUTBFMVg0JlEwXDAx NSIsCQkJLyogd2FrZV9zdHIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAwLAkJCQkJLyogd2FrZV9yYXRlICovCisgICAgIk9LXDAxNSIsCQkJCS8qIHdha2VfcHJv bXB0ICovCisgICAgIiIsCQkJCQkvKiBkbW9kZV9zdHIgKi8KKyAgICAiIiwJCQkJCS8qIGRtb2Rl X3Byb21wdCAqLworICAgICJBVEQlc1wwMTUiLAkJCS8qIGRpYWxfc3RyICovCisgICAgMCwJCQkJ CS8qIGRpYWxfcmF0ZSAqLworICAgIDExMDAsCQkJCS8qIGVzY190aW1lICovCisgICAgNDMsCQkJ CQkvKiBlc2NfY2hhciAqLworICAgICJBVFEwSDBcMDE1IiwJCQkvKiBodXBfc3RyICovCisgICAg IkFUJkszXDAxNSIsCQkJLyogaHdmY19zdHIgKi8KKyAgICAiQVQmSzRcMDE1IiwJCQkvKiBzd2Zj X3N0ciAqLworICAgICJBVCZLMFwwMTUiLAkJCS8qIG5vZmNfc3RyICovCisgICAgIkFUXFxOM1ww MTUiLAkJCS8qIGVjX29uX3N0ciAqLworICAgICJBVFxcTjFcMDE1IiwJCQkvKiBlY19vZmZfc3Ry ICovCisgICAgIkFUJUMxXDAxNSIsCQkJLyogZGNfb25fc3RyICovCisgICAgIkFUJUMwXDAxNSIs CQkJLyogZGNfb2ZmX3N0ciAqLworICAgICJBVFMwPTFcMDE1IiwJCQkvKiBhYV9vbl9zdHIgKi8K KyAgICAiQVRTMD0wXDAxNSIsCQkJLyogYWFfb2ZmX3N0ciAqLworICAgICJBVFxcSjBcMDE1IiwJ CQkvKiBzYl9vbl9zdHIgKi8KKyAgICAiQVRcXEoxXDAxNSIsCQkJLyogc2Jfb2ZmX3N0ciAoTk9U IFNVUFBPUlRFRCkgKi8KKyAgICAiQVRNMVwwMTUiLAkJCQkvKiBzcF9vbl9zdHIgKi8KKyAgICAi QVRNMFwwMTUiLAkJCQkvKiBzcF9vZmZfc3RyICovCisgICAgIkFUTDFcMDE1IiwJCQkJLyogdm9s MV9zdHIgKi8KKyAgICAiQVRMMlwwMTUiLAkJCQkvKiB2b2wyX3N0ciAqLworICAgICJBVEwzXDAx NSIsCQkJCS8qIHZvbDNfc3RyICovCisgICAgIkFUWDNcMDE1IiwJCQkJLyogaWdub3JlZHQgKi8K KyAgICAiIiwJCQkJCS8qIGluaTIgKi8KKyAgICAxMTUyMDBMLAkJCQkvKiBtYXhfc3BlZWQgKi8K KyAgICBDS0RfQVR8Q0tEX1NCfENLRF9FQ3xDS0RfREN8Q0tEX0hXfENLRF9TVywgLyogY2FwYXMg Ki8KKyAgICBnZXRvawkJCQkvKiBva19mbiAqLworfTsKKworc3RhdGljCitNRE1JTkYgTU9UU001 NiA9CQkJLyogTW90b3JvbGEgU001NiBDaGlwc2V0ICovCisgICAgeworICAgICJNb3Rvcm9sYSBT TTU2IFYuOTAgY2hpcHNldCIsCS8qIG5hbWUgKi8KKyAgICAiQVRQXDAxNSIsCQkJCS8qIHB1bHNl IGNvbW1hbmQgKi8KKyAgICAiQVRUXDAxNSIsCQkJCS8qIHRvbmUgY29tbWFuZCAqLworICAgIDM1 LAkJCQkJLyogZGlhbF90aW1lICovCisgICAgIiwiLAkJCQkvKiBwYXVzZV9jaGFycyAqLworICAg IDIsCQkJCQkvKiBwYXVzZV90aW1lICovCisjaWZkZWYgT1MyCisgICAgIkFUUTBWMVg0JlMwJkMx JkQyKk1NMTZcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgIkFU UTBWMVg0JlMxJkMxJkQyKk1NMTZcMDE1IiwJLyogd2FrZV9zdHIgKi8KKyNlbHNlCisgICAgIkFU UTBWMVg0JkMxJkQyKk1NMTZcMDE1IiwJCS8qIHdha2Vfc3RyICovCisjZW5kaWYgLyogVk1TICov CisjZW5kaWYgLyogT1MyICovCisgICAgMCwJCQkJCS8qIHdha2VfcmF0ZSAqLworICAgICJPS1ww MTUiLAkJCQkvKiB3YWtlX3Byb21wdCAqLworICAgICIiLAkJCQkJLyogZG1vZGVfc3RyICovCisg ICAgIiIsCQkJCQkvKiBkbW9kZV9wcm9tcHQgKi8KKyAgICAiQVREJXNcMDE1IiwJCQkvKiBkaWFs X3N0ciAqLworICAgIDAsCQkJCQkvKiBkaWFsX3JhdGUgKi8KKyAgICAxMTAwLAkJCQkvKiBlc2Nf dGltZSAqLworICAgIDQzLAkJCQkJLyogZXNjX2NoYXIgKi8KKyAgICAiQVRRMEgwXDAxNSIsCQkJ LyogaHVwX3N0ciAqLworICAgICJBVFxcUTNcMDE1IiwJCQkvKiBod2ZjX3N0ciAqLworICAgICJB VFxcUTFcMDE1IiwJCQkvKiBzd2ZjX3N0ciAqLworICAgICJBVFxcUTBcMDE1IiwJCQkvKiBub2Zj X3N0ciAqLworICAgICJBVFxcTjdcMDE1IiwJCQkvKiBlY19vbl9zdHIgKi8KKyAgICAiQVRcXE4x XDAxNSIsCQkJLyogZWNfb2ZmX3N0ciAqLworICAgICJBVCVDMVwwMTUiLAkJCS8qIGRjX29uX3N0 ciAqLworICAgICJBVCVDMFwwMTUiLAkJCS8qIGRjX29mZl9zdHIgKi8KKyAgICAiQVRTMD0xXDAx NSIsCQkJLyogYWFfb25fc3RyICovCisgICAgIkFUUzA9MFwwMTUiLAkJCS8qIGFhX29mZl9zdHIg Ki8KKyAgICAiQVRcXEowXDAxNSIsCQkJLyogc2Jfb25fc3RyICovCisgICAgIkFUXFxKMVwwMTUi LAkJCS8qIHNiX29mZl9zdHIgKE5PVCBTVVBQT1JURUQpICovCisgICAgIkFUTTFcMDE1IiwJCQkJ Lyogc3Bfb25fc3RyICovCisgICAgIkFUTTBcMDE1IiwJCQkJLyogc3Bfb2ZmX3N0ciAqLworICAg ICJBVEwxXDAxNSIsCQkJCS8qIHZvbDFfc3RyICovCisgICAgIkFUTDJcMDE1IiwJCQkJLyogdm9s Ml9zdHIgKi8KKyAgICAiQVRMM1wwMTUiLAkJCQkvKiB2b2wzX3N0ciAqLworICAgICJBVFgzXDAx NSIsCQkJCS8qIGlnbm9yZWR0ICovCisgICAgIiIsCQkJCQkvKiBpbmkyICovCisgICAgMTE1MjAw TCwJCQkJLyogbWF4X3NwZWVkICovCisgICAgQ0tEX0FUfENLRF9TQnxDS0RfRUN8Q0tEX0RDfENL RF9IV3xDS0RfU1csIC8qIGNhcGFzICovCisgICAgZ2V0b2sJCQkJLyogb2tfZm4gKi8KK307Cisj ZW5kaWYgLyogTUlOSURJQUwgKi8KKworLyogRU5EIE1ETUlORiBTVFJVQ1QgREVGSU5JVElPTlMg Ki8KKworLyoKKyAgVGFibGUgdG8gY29udmVydCBtb2RlbSBudW1iZXJzIHRvIE1ETUlORiBzdHJ1 Y3QgcG9pbnRlcnMuCisgIFRoZSBlbnRyaWVzIE1VU1QgYmUgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5 IG1vZGVtIG51bWJlciwgd2l0aG91dCBhbnkKKyAgImdhcHMiIGluIHRoZSBudW1iZXJzLCBhbmQg c3RhcnRpbmcgZnJvbSBvbmUgKDEpLgorKi8KKworTURNSU5GICptb2RlbXBbXSA9IHsKKyNpZmRl ZiBNSU5JRElBTAorICAgIE5VTEwsCQkJCS8qICAwICovCisgICAgJkNDSVRULAkJCQkvKiAgMSAq LworICAgICZIQVlFUywJCQkJLyogIDIgKi8KKyAgICAmVU5LTk9XTiwJCQkJLyogIDMgKi8KKyAg ICAmRFVNTVksCQkJCS8qICA0ICovCisgICAgJkdFTkVSSUMsCQkJCS8qICA1ICovCisgICAgJklU VVRWMjUwCQkJCS8qICA2ICovCisjZWxzZSAgLyogTm90IE1JTklESUFMICovCisgICAgTlVMTCwJ CQkJLyogIDAgKi8KKyAgICAmQVRURFRETSwJCQkJLyogIDEgKi8KKyAgICAmQVRUSVNOLAkJCQkv KiAgMiAqLworICAgICZBVFRNT0RFTSwJCQkJLyogIDMgKi8KKyAgICAmQ0NJVFQsCQkJCS8qICA0 ICovCisjaWZkZWYgT0xETU9ERU1TCisgICAgJkNFUk1FVEVLLAkJCQkvKiAgNSAqLworICAgICZE RjAzLAkJCQkvKiAgNiAqLworICAgICZERjEwMCwJCQkJLyogIDcgKi8KKyAgICAmREYyMDAsCQkJ CS8qICA4ICovCisgICAgJkdEQywJCQkJLyogIDkgKi8KKyNlbHNlCisgICAgTlVMTCwKKyAgICBO VUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorI2VuZGlmIC8qIE9MRE1PREVN UyAqLworICAgICZIQVlFUywJCQkJLyogMTAgKi8KKyNpZmRlZiBPTERNT0RFTVMKKyAgICAmUEVO UklMLAkJCQkvKiAxMSAqLworICAgICZSQUNBTCwJCQkJLyogMTIgKi8KKyNlbHNlCisgICAgTlVM TCwKKyAgICBOVUxMLAorI2VuZGlmIC8qIE9MRE1PREVNUyAqLworICAgICZVTktOT1dOLAkJCQkv KiAxMyAqLworI2lmZGVmIE9MRE1PREVNUworICAgICZWRU5URUwsCQkJCS8qIDE0ICovCisgICAg JkNPTkNPUkQsCQkJCS8qIDE1ICovCisjZWxzZQorICAgIE5VTEwsCisgICAgTlVMTCwKKyNlbmRp ZiAvKiBPTERNT0RFTVMgKi8KKyAgICAmRFVNTVksCQkJCS8qIDE2ICovCisgICAgJlJPTE0sCQkJ CS8qIDE3ICovCisjaWZkZWYgT0xETU9ERU1TCisgICAgJk1JQ1JPQ09NLAkJCQkvKiAxOCAqLwor I2Vsc2UKKyAgICBOVUxMLAorI2VuZGlmIC8qIE9MRE1PREVNUyAqLworICAgICZVU1IsCQkJCS8q IDE5IFVTUiBDb3VyaWVyIGFuZCBTcG9ydHN0ZXIgKi8KKyAgICAmT0xEVEIsCQkJCS8qIDIwIE9s ZCBUZWxlYml0cyAqLworICAgICZESUdJVEVMLAkJCQkvKiAyMSBEaWdpdGVsIENDSVRUICovCisg ICAgJkhfMTIwMCwJCQkJLyogMjIgSGF5ZXMgMTIwMCAqLworICAgICZIX1VMVFJBLAkJCQkvKiAy MyBIYXllcyBVbHRyYSAqLworICAgICZIX0FDQ1VSQSwJCQkJLyogMjQgSGF5ZXMgT3B0aW1hICov CisgICAgJlBQSSwJCQkJLyogMjUgUFBJICovCisgICAgJkRBVEFQT1JULAkJCQkvKiAyNiBEYXRh cG9ydCAqLworICAgICZCT0NBLAkJCQkvKiAyNyBCb2NhICovCisgICAgJk1PVE9ST0xBLAkJCQkv KiAyOCBNb3Rvcm9sYSBVRFMgTU9UT1JPTEEgKi8KKyAgICBOVUxMLAkJCQkvKiAyOSBEaWdpY29t bSAqLworICAgIE5VTEwsCQkJCS8qIDMwIER5bmFsaW5rICovCisgICAgJklOVEVMLAkJCQkvKiAz MSBJbnRlbCAqLworICAgICZVQ09NX0FULAkJCQkvKiAzMiBNaWNyb2NvbSBpbiBBVCBtb2RlICov CisgICAgJk1VTFRJVEVDSCwJCQkJLyogMzMgTXVsdGl0ZWNoICovCisgICAgJlNVUFJBLAkJCQkv KiAzNCBTdXByYSAqLworICAgICZaT0xUUklYLAkJCQkvKiAzNSBab2x0cml4ICovCisgICAgJlpP T00sCQkJCS8qIDM2IFpvb20gKi8KKyAgICAmWllYRUwsCQkJCS8qIDM3IFp5WEVMICovCisgICAg JkRVTU1ZLAkJCQkvKiAzOCBUQVBJICovCisgICAgJk5FV1RCLAkJCQkvKiAzOSBOZXctVGVsZWJp dCAqLworICAgICZNQVhURUNILAkJCQkvKiA0MCBNYXhUZWNoICovCisgICAgJkRVTU1ZLAkJCQkv KiA0MSBVc2VyLWRlZmluZWQgKi8KKyAgICAmUldWMzIsCQkJCS8qIDQyIFJvY2t3ZWxsIFYuMzIg Ki8KKyAgICAmUldWMzJCLAkJCQkvKiA0MyBSb2Nrd2VsbCBWLjMyYmlzICovCisgICAgJlJXVjM0 LAkJCQkvKiA0NCBSb2Nrd2VsbCBWLjM0ICovCisgICAgJk1XQVZFLAkJCQkvKiA0NSBJQk0gTXdh dmUgKi8KKyAgICAmVEVMRVBBVEgsCQkJCS8qIDQ2IEdhdGV3YXkgMjAwMCBUZWxlcGF0aCBJSSAy OC44ICovCisgICAgJk1JQ1JPTElOSywJCQkJLyogNDcgTWljcm9MaW5rIG1vZGVtcyAqLworICAg ICZDQVJESU5BTCwJCQkJLyogNDggQ2FyZGluYWwgKi8KKyAgICAmR0VORVJJQywJCQkJLyogNDkg R2VuZXJpYyBoaWdoLXNwZWVkICovCisgICAgJlhKQUNLLAkJCQkvKiA1MCBNZWdhaGVydHotWGph Y2sgKi8KKyAgICAmU1BJUklUSUksCQkJCS8qIDUxIFF1aWNrQ29tbSBTcGlyaXQgSUkgKi8KKyAg ICAmTU9OVEFOQSwJCQkJLyogNTIgTW90b3JvbGEgTW9udGFuYSAqLworICAgICZDT01QQVEsCQkJ CS8qIDUzIENvbXBhcSBEYXRhK0ZheCAqLworICAgICZGVUpJVFNVLAkJCQkvKiA1NCBGdWppdHN1 ICovCisgICAgJk1IWkFUVCwJCQkJLyogNTUgTWVnYWhlcnR6IEFUJlQgVi4zNCAqLworICAgICZT VVBSQVNPTiwJCQkJLyogNTYgU3VwcmFzb25pYyAqLworICAgICZCRVNUREFUQSwJCQkJLyogNTcg QmVzdCBEYXRhICovCisgICAgJkFUVDE5MDAsCQkJCS8qIDU4IEFUJlQgU2VjdXJlIERhdGEgU1RV IElJSSAxOTAwICovCisgICAgJkFUVDE5MTAsCQkJCS8qIDU5IEFUJlQgU2VjdXJlIERhdGEgU1RV IElJSSAxOTEwICovCisgICAgJktFRVBJTlRPVUNILAkJCS8qIDYwIEFUJlQgS2VlcGluVG91Y2gg Ki8KKyAgICAmVVNSWDIsCQkJCS8qIDYxIFVTUiBYSi0xNTYwIFgyICovCisgICAgJlJPTE1fQVQs CQkJCS8qIDYyIFJvbG0gd2l0aCBBVCBjb21tYW5kIHNldCAqLworICAgICZBVExBUywJCQkJLyog NjMgQXRsYXMgLyBOZXdjb20gKi8KKyAgICAmQ09ERVgsCQkJCS8qIDY0IE1vdG9yb2xhIENvZGV4 ICovCisgICAgJk1UNTYzNFpQWCwJCQkJLyogNjUgTXVsdGl0ZWNoIE1UNTYzNFpQWCAqLworICAg ICZVTElOS1YyNTAsCQkJCS8qIDY2IE1pY3JvbGluayBWLjI1MCA1NksgKi8KKyAgICAmSVRVVFYy NTAsCQkJCS8qIDY3IEdlbmVyaWMgSVRVLVQgVi4yNTAgKi8KKyAgICAmUldWOTAsCQkJCS8qIDY4 IFJvY2t3ZWxsIFYuOTAgNTZLICovCisgICAgJlNVUFJBWCwJCQkJLyogNjkgRGlhbW9uZCBTdXBy YSBFeHByZXNzIFYuOTAgKi8KKyAgICAmTFVDRU5ULAkJCQkvKiA3MCBMdWNlbnQgVmVudXMgY2hp cHNldCAqLworICAgICZQQ1RFTCwJCQkJLyogNzEgUENUZWwgKi8KKyAgICAmQ09ORVhBTlQsCQkJ CS8qIDcyIENvbmV4YW50ICovCisgICAgJlpPT01WMzQsCQkJCS8qIDczIFpvb20gVi4zNCAqLwor ICAgICZaT09NVjkwLAkJCQkvKiA3NCBab29tIFYuOTAgKi8KKyAgICAmWk9PTVY5MiwJCQkJLyog NzUgWm9vbSBWLjkyICovCisgICAgJk1PVFNNNTYJCQkJLyogNzYgTW90b3JvbGEgU001NiBjaGlw c2V0ICovCisjZW5kaWYgLyogTUlOSURJQUwgKi8KK307CisvKgorICogRGVjbGFyZSBtb2RlbSBu YW1lcyBhbmQgYXNzb2NpYXRlZCBudW1iZXJzIGZvciBjb21tYW5kIHBhcnNpbmcsCisgKiBhbmQg YWxzbyBmb3IgZG9pbmcgbnVtYmVyLXRvLW5hbWUgdHJhbnNsYXRpb24uCisgKgorICogVGhlIGVu dHJpZXMgbXVzdCBiZSBpbiBhbHBoYWJldGljYWwgb3JkZXIgYnkgbW9kZW0gbmFtZS4KKyAqLwor c3RydWN0IGtleXRhYiBtZG10YWJbXSA9IHsKKyNpZm5kZWYgTUlOSURJQUwKKyAgICAiM2NvbS11 c3ItbWVnYWhlcnR6LTU2ayIsIG5fVVNSWDIsICBDTV9JTlYsCisgICAgImFjZXItdjkwIiwgICAg ICAgICBuX1JXVjkwLCAgICAgICAgTV9BTElBUywKKyAgICAiYXRsYXMtbmV3Y29tLTMzNjAwaWZ4 QyIsIG5fQVRMQVMsICAwLAorICAgICJhdHQtMTkwMC1zdHUtaWlpIiwgbl9BVFQxOTAwLCAgICAg IDAsCisgICAgImF0dC0xOTEwLXN0dS1paWkiLCBuX0FUVDE5MTAsICAgICAgMCwKKyAgICAiYXR0 LTczMDAiLAkJbl9BVFRVUEMsCTAsCisgICAgImF0dC1kYXRhcG9ydCIsCW5fREFUQVBPUlQsCTAs CisgICAgImF0dC1kdGRtIiwJCW5fQVRURFRETSwJMCwKKyAgICAiYXR0LWlzbiIsICAgICAgICAg IG5fQVRUSVNOLCAgICAgICAwLAorICAgICJhdHQta2VlcGludG91Y2giLCAgbl9LRUVQSU5UT1VD SCwgIDAsCisgICAgImF0dC1zd2l0Y2hlZC1uZXQiLCBuX0FUVE1PREVNLAkwLAorCisgICAgImF0 dDczMDAiLAkJbl9BVFRVUEMsCUNNX0lOViwJLyogb2xkIG5hbWUgKi8KKyAgICAiYXR0ZHRkbSIs CQluX0FUVERURE0sCUNNX0lOViwJLyogb2xkIG5hbWUgKi8KKyAgICAiYXR0aXNuIiwgICAgICAg ICAgIG5fQVRUSVNOLCAgICAgICBDTV9JTlYsCS8qIG9sZCBuYW1lICovCisgICAgImF0dG1vZGVt IiwJCW5fQVRUTU9ERU0sCUNNX0lOViwJLyogb2xkIG5hbWUgKi8KKworICAgICJiZXN0ZGF0YSIs ICAgICAgICAgbl9CRVNUREFUQSwgICAgIDAsCisgICAgImJvY2EiLAkJbl9CT0NBLAkJMCwKKyAg ICAiY2FyZGluYWwiLCAgICAgICAgIG5fQ0FSRElOQUwsICAgICAwLAorI2VuZGlmIC8qIE1JTklE SUFMICovCisgICAgImNjaXR0LXYyNWJpcyIsCW5fQ0NJVFQsCUNNX0lOViwgLyogTmFtZSBjaGFu Z2VkIHRvIElUVS1UICovCisjaWZuZGVmIE1JTklESUFMCisjaWZkZWYgT0xETU9ERU1TCisgICAg ImNlcm1ldGVrIiwJCW5fQ0VSTUVURUssCU1fT0xELAorI2VuZGlmIC8qIE9MRE1PREVNUyAqLwor ICAgICJjb21wYXEiLCAgICAgICAgICAgbl9DT01QQVEsICAgICAgIDAsCisjaWZkZWYgT0xETU9E RU1TCisgICAgImNvbmNvcmQiLAkJbl9DT05DT1JELAlNX09MRCwKKyNlbmRpZiAvKiBPTERNT0RF TVMgKi8KKyAgICAiY29uZXhhbnQiLCAgICAgICAgIG5fQ09ORVhBTlQsICAgICAwLAorICAgICJj b3VyaWVyIiwgICAgICAgICAgbl9VU1IsICAgICAgICAgIENNX0lOViwKKyAgICAiZGF0YXBvcnQi LAkJbl9EQVRBUE9SVCwJQ01fSU5WLAkvKiA9PSBhdHQtZGF0YXBvcnQgKi8KKyNpZmRlZiBPTERN T0RFTVMKKyAgICAiZGYwMy1hYyIsCQluX0RGMDMsCQlNX09MRCwKKyAgICAiZGYxMDAtc2VyaWVz IiwJbl9ERjEwMCwJTV9PTEQsCisgICAgImRmMjAwLXNlcmllcyIsCW5fREYyMDAsCU1fT0xELAor I2VuZGlmIC8qIE9MRE1PREVNUyAqLworICAgICJkaWdpdGVsLWR0MjIiLAluX0RJR0lURUwsCTAs CisjZW5kaWYgLyogTUlOSURJQUwgKi8KKyAgICAiZGlyZWN0IiwJCTAsCQlDTV9JTlYsCS8qIFN5 bm9ueW0gZm9yIE5PTkUgKi8KKyNpZm5kZWYgTUlOSURJQUwKKyAgICAiZnVqaXRzdSIsICAgICAg ICAgIG5fRlVKSVRTVSwgICAgICAwLAorICAgICJnYXRld2F5LXRlbGVwYXRoIiwgbl9URUxFUEFU SCwgICAgIDAsCisjaWZkZWYgT0xETU9ERU1TCisgICAgImdkYy0yMTJhL2VkIiwJbl9HREMsCQlN X09MRCwKKyAgICAiZ2UiLCAgICAgICAgICAgICAgIG5fR0VORVJJQywJQ01fSU5WfENNX0FCUiwK KyAgICAiZ2VuIiwgICAgICAgICAgICAgIG5fR0VORVJJQywJQ01fSU5WfENNX0FCUiwKKyAgICAi Z2VuZGF0YWNvbW0iLAluX0dEQywJCUNNX0lOViwJLyogU3lub255bSBmb3IgR0RDICovCisjZW5k aWYgLyogT0xETU9ERU1TICovCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKyAgICAiZ2VuZSIsICAg ICAgICAgICAgIG5fR0VORVJJQywgICAgICBDTV9JTlZ8Q01fQUJSLAorICAgICJnZW5lcmljIiwg ICAgICAgICAgbl9HRU5FUklDLCAgICAgIDAsCisgICAgImdlbmVyaWMtaGlnaC1zcGVlZCIsbl9H RU5FUklDLCAgICAgQ01fSU5WLAorICAgICJoIiwgCSAgIAluX0hBWUVTLAlDTV9JTlZ8Q01fQUJS LAorICAgICJoYSIsIAkgICAJbl9IQVlFUywJQ01fSU5WfENNX0FCUiwKKyAgICAiaGF5IiwgICAg CQluX0hBWUVTLAlDTV9JTlZ8Q01fQUJSLAorICAgICJoYXllIiwgCSAgIAluX0hBWUVTLAlDTV9J TlZ8Q01fQUJSLAorICAgICJoYXllcyIsICAgIAluX0hBWUVTLAlDTV9JTlZ8Q01fQUJSLCAvKiBI YXllcyAyNDAwICovCisjaWZuZGVmIE1JTklESUFMCisgICAgImhheWVzLTEyMDAiLAluX0hfMTIw MCwJMCwKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworICAgICJoYXllcy0yNDAwIiwJbl9IQVlFUywJ MCwKKyNpZm5kZWYgTUlOSURJQUwKKyAgICAiaGF5ZXMtaGlnaC1zcGVlZCIsIG5fSF9BQ0NVUkEs ICAgICAwLAorICAgICJoYXllcy1hY2N1cmEiLCAgICAgbl9IX0FDQ1VSQSwgICAgIENNX0lOViwK KyAgICAiaGF5ZXMtb3B0aW1hIiwgICAgIG5fSF9BQ0NVUkEsICAgICBDTV9JTlYsCisgICAgImhh eWVzLXVsdHJhIiwJbl9IX1VMVFJBLAlDTV9JTlYsCisgICAgImhzdC1jb3VyaWVyIiwgICAgICBu X1VTUiwgICAgICAgICAgQ01fSU5WLAkvKiBTeW5vbnltIGZvciBDT1VSSUVSICovCisgICAgImlu dGVsIiwJCW5fSU5URUwsICAgICAgICAwLAorI2VuZGlmIC8qIE1JTklESUFMICovCisKKyAgICAi aXR1LXQtdjI1MCIsICAgICAgIG5fSVRVVFYyNTAsICAgICAwLAorICAgICJpdHUtdC12MjViaXMi LAluX0NDSVRULAkwLAkvKiBOZXcgbmFtZSBmb3IgQ0NJVFQgKi8KKyAgICAiaXR1LXQtdjI1dGVy L3YyNTAiLG5fSVRVVFYyNTAsICAgICBDTV9JTlYsCisKKyNpZm5kZWYgTUlOSURJQUwKKyAgICAi bHVjZW50IiwgICAgICAgICAgIG5fTFVDRU5ULCAgICAgIDAsCisgICAgIm1heHRlY2giLAkJbl9N QVhURUNILCAgICAgMCwKKworICAgICJtZWdhaGVydHotYXR0LXYzNCIsICAgIG5fTUhaQVRULCAg MCwgLyogTWVnYWhlcnR6ZXMgKi8KKyAgICAibWVnYWhlcnR6LXhqYWNrIiwgICAgICBuX1hKQUNL LCAgIENNX0lOVnxDTV9BQlIsCisgICAgIm1lZ2FoZXJ0ei14amFjay0zMy42Iiwgbl9YSkFDSywg ICAwLAorICAgICJtZWdhaGVydHoteGphY2stNTZrIiwgIG5fVVNSWDIsICAgMCwgLyogM0NPTS9V U1IvTWVnYWhlcnR6IDMzLjYgUEMgQ2FyZCAqLworCisgICAgIm1pIiwJCW5fTUlDUk9DT00sCUNN X0lOVnxDTV9BQlIsCisgICAgIm1pYyIsCQluX01JQ1JPQ09NLAlDTV9JTlZ8Q01fQUJSLAorICAg ICJtaWNyIiwJCW5fTUlDUk9DT00sCUNNX0lOVnxDTV9BQlIsCisgICAgIm1pY3JvIiwJCW5fTUlD Uk9DT00sCUNNX0lOVnxDTV9BQlIsCisgICAgIm1pY3JvYyIsCQluX01JQ1JPQ09NLAlDTV9JTlZ8 Q01fQUJSLAorICAgICJtaWNyb2NvIiwJCW5fTUlDUk9DT00sCUNNX0lOVnxDTV9BQlIsCisgICAg Im1pY3JvY29tIiwJCW5fTUlDUk9DT00sCUNNX0lOVnxDTV9BQlIsCisgICAgIm1pY3JvY29tLWF0 LW1vZGUiLAluX1VDT01fQVQsCTAsIC8qIE1pY3JvY29tIERlc2tQb3J0ZSwgZXRjICovCisgICAg Im1pY3JvY29tLXN4LW1vZGUiLAluX01JQ1JPQ09NLAkwLCAvKiBNaWNyb2NvbSBBWCxRWCxTWCwg bmF0aXZlIG1vZGUgKi8KKyAgICAibWljcm9saW5rIiwgICAgICAgIG5fTUlDUk9MSU5LLCAgICAw LAorICAgICJtaWNyb2xpbmstdjI1MCIsICAgbl9VTElOS1YyNTAsICAgIDAsCisgICAgIm1vdG9y b2xhLWNvZGV4IiwgICBuX0NPREVYLCAgICAgICAgMCwKKyAgICAibW90b3JvbGEtZmFzdGFsayIs IG5fTU9UT1JPTEEsCTAsCisgICAgIm1vdG9yb2xhLWxpZmVzdHlsZSIsbl9NT1RPUk9MQSwJMCwK KyAgICAibW90b3JvbGEtbW9udGFuYSIsIG5fTU9OVEFOQSwJMCwKKyAgICAibW90b3JvbGEtc201 Ni12OTAiLG5fTU9UU001NiwJMCwKKyAgICAibXQ1NjM0enB4IiwgICAgICAgIG5fTVQ1NjM0WlBY LCAgICAwLAorICAgICJtdWx0aXRlY2giLAluX01VTFRJLAkwLAorICAgICJtd2F2ZSIsCQluX01X QVZFLAkwLAorI2VuZGlmIC8qIE1JTklESUFMICovCisgICAgIm5vbmUiLCAgICAgICAgICAgICAw LCAgICAgICAgICAgICAgMCwKKyNpZm5kZWYgTUlOSURJQUwKKyNpZm5kZWYgT0xEVEJDT0RFCisg ICAgIm9sZC10ZWxlYml0IiwgICAgICBuX1RFTEVCSVQsICAgICAgMCwKKyNlbmRpZiAvKiBPTERU QkNPREUgKi8KKyAgICAicGN0ZWwiLCAgICAgICAgICAgIG5fUENURUwsICAgICAgICAwLAorI2lm ZGVmIE9MRE1PREVNUworICAgICJwZW5yaWwiLAkJbl9QRU5SSUwsCU1fT0xELAorI2VuZGlmIC8q IE9MRE1PREVNUyAqLworICAgICJwcGkiLCAgICAgICAgICAgICAgbl9QUEksCQkwLAorI2lmZGVm IE9MRE1PREVNUworICAgICJyYWNhbHZhZGljIiwJbl9SQUNBTCwJTV9PTEQsCisjZW5kaWYgLyog T0xETU9ERU1TICovCisgICAgInJvY2t3ZWxsLXYzMiIsCW5fUldWMzIsCTAsCisgICAgInJvY2t3 ZWxsLXYzMmJpcyIsCW5fUldWMzJCLAkwLAorICAgICJyb2Nrd2VsbC12MzQiLAluX1JXVjM0LAkw LAorICAgICJyb2Nrd2VsbC12OTAiLAluX1JXVjkwLAkwLAorICAgICJyb2xtIiwgICAgICAgICAg ICAgbl9ST0xNLAkJQ01fSU5WfENNX0FCUiwKKyAgICAicm9sbS0yNDRwYyIsICAgICAgIG5fUk9M TUFULCAgICAgICAwLAorICAgICJyb2xtLTYwMC1zZXJpZXMiLCAgbl9ST0xNQVQsICAgICAgIDAs CisgICAgInJvbG0tZGNtIiwJCW5fUk9MTSwJCTAsCisgICAgInNtYXJ0bGluay12OTAiLCAgICBu X1VTUiwgICAgICAgICAgTV9BTElBUywKKyAgICAic3Bpcml0LWlpIiwgICAgICAgIG5fU1BJUklU SUksICAgICAwLAorICAgICJzcG9ydHN0ZXIiLCAgICAgICAgbl9VU1IsICAgICAgICAgIE1fQUxJ QVMsCisgICAgInN1cCIsCSAgICAgICAgbl9TVVBSQSwJQ01fSU5WfENNX0FCUiwKKyAgICAic3Vw ciIsCSAgICAgICAgbl9TVVBSQSwJQ01fSU5WfENNX0FCUiwKKyAgICAic3VwcmEiLAkgICAgICAg IG5fU1VQUkEsCUNNX0lOVnxDTV9BQlIsCisgICAgInN1cHJhLWV4cHJlc3MtdjkwIixuX1NVUFJB WCwgICAgICAgMCwKKyAgICAic3VwcmFmYXhtb2RlbSIsCW5fU1VQUkEsCTAsCisgICAgInN1cHJh c29uaWMiLAluX1NVUFJBU09OLAkwLAorI2lmZGVmIENLX1RBUEkKKyAgICAidGFwaSIsCQluX1RB UEksCQkwLAorI2VuZGlmIC8qIENLX1RBUEkgKi8KKyAgICAidGUiLCAgICAgICAgICAgICAgIG5f VEJORVcsICAgICAgICBDTV9JTlZ8Q01fQUJSLAorICAgICJ0ZWwiLCAgICAgICAgICAgICAgbl9U Qk5FVywgICAgICAgIENNX0lOVnxDTV9BQlIsCisgICAgInRlbGViaXQiLCAgICAgICAgICBuX1RC TkVXLCAgICAgICAgMCwKKyAgICAidGVsZXBhdGgiLCAgICAgICAgIG5fVEVMRVBBVEgsICAgICBD TV9JTlYsCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKyAgICAidW5rbm93biIsCQluX1VOS05PV04s CTAsCisgICAgInVzZXItZGVmaW5lZCIsICAgICBuX1VERUYsCQkwLAorI2lmbmRlZiBNSU5JRElB TAorCisgICAgInVzciIsICAgICAgICAgICAgICAgbl9VU1IsICAgICAgICAgQ01fSU5WfENNX0FC UiwKKyAgICAidXNyLTIxMmEiLAkJIG5fSEFZRVMsCUNNX0lOVnxNX0FMSUFTLAorICAgICJ1c3It Y291cmllciIsICAgICAgIG5fVVNSLCAgICAgICAgIENNX0lOViwKKyAgICAidXNyLW1lZ2FoZXJ0 ei01NmsiLCBuX1VTUlgyLCAgICAgICAwLAorICAgICJ1c3Itc3BvcnRzdGVyIiwgICAgIG5fVVNS LCAgICAgICAgIENNX0lOViwKKyAgICAidXNyLXhqMTU2MC14MiIsICAgICBuX1VTUlgyLCAgICAg ICBDTV9JTlYsCisgICAgInVzcm9ib3RpY3MiLCAgICAgICAgbl9VU1IsICAgICAgICAgMCwKKwor ICAgICJ2MjViaXMiLAkJbl9DQ0lUVCwJQ01fSU5WLCAvKiBOYW1lIGNoYW5nZWQgdG8gSVRVLVQg Ki8KKyNpZmRlZiBPTERNT0RFTVMKKyAgICAidmVudGVsIiwJCW5fVkVOVEVMLAlNX09MRCwKKyNl bmRpZiAvKiBPTERNT0RFTVMgKi8KKyAgICAiem9sdHJpeC12MzQiLAluX1pPTFRSSVgsCTAsCisg ICAgInpvbHRyaXgtaHNwLXY5MCIsICBuX1BDVEVMLCAgICAgICAgTV9BTElBUywKKyAgICAiem9s dHJpeC1oY2YtdjkwIiwgIG5fSVRVVFYyNTAsICAgICAwLAorICAgICJ6b28iLAkJbl9aT09NLAkJ Q01fSU5WfENNX0FCUiwKKyAgICAiem9vbSIsCQluX1pPT00sCQlDTV9JTlZ8Q01fQUJSLAorICAg ICJ6b29tLXYzMmJpcyIsCW5fWk9PTSwJCTAsCisgICAgInpvb20tdjM0IiwJCW5fWk9PTVYzNCwJ MCwKKyAgICAiem9vbS12OTAiLAkJbl9aT09NVjkwLAkwLAorICAgICJ6b29tLXY5MiIsCQluX1pP T01WOTIsCTAsCisgICAgInp5eGVsIiwJCW5fWllYRUwsCTAsCisjZW5kaWYgLyogTUlOSURJQUwg Ki8KKyAgICAiIiwgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAwCit9OworaW50IG5t ZG0gPSAoc2l6ZW9mKG1kbXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsgLyogTnVt YmVyIG9mIG1vZGVtcyAqLworCisjZGVmaW5lIENPTk5FQ1RFRCAxCQkJLyogRm9yIGNvbXBsZXRp b24gc3RhdHVzICovCisjZGVmaW5lIERfRkFJTEVEICAyCisjZGVmaW5lIERfUEFSVElBTCAzCisK K3N0YXRpYyBpbnQgdHJpZXMgPSAwOworc3RhdGljIGludCBtZG1lY2hvID0gMDsJCQkvKiBBc3N1 bWUgbW9kZW0gZG9lcyBub3QgZWNobyAqLworCitzdGF0aWMgY2hhciAqcDsJCQkJLyogRm9yIGNv bW1hbmQgc3RyaW5ncyAmIG1lc3NhZ2VzICovCisKKyNkZWZpbmUgTEJVRkwgMjAwCitzdGF0aWMg Y2hhciBsYnVmW0xCVUZMKzRdOworY2hhciBtb2RlbW1zZ1tMQlVGTCs0XSA9IHsgTlVMLCBOVUwg fTsJLyogRElBTCByZXNwb25zZSBmcm9tIG1vZGVtICovCisKKyNpZmRlZiBEWU5BTUlDCisjZGVm aW5lIFJCVUZMIDI1Ngorc3RhdGljIGNoYXIgKnJidWYgPSBOVUxMOworI2Vsc2UKKyNkZWZpbmUg UkJVRkwgNjMKK3N0YXRpYyBjaGFyIHJidWZbUkJVRkwrMV07CisjZW5kaWYgLyogRFlOQU1JQyAq LworCisjaWZkZWYgRFlOQU1JQworI2RlZmluZSBGVUxMTlVNTCAyNTYKK2NoYXIgKmZidWYgPSBO VUxMOwkJCS8qIEZvciBmdWxsIChwcmVmaXhlZCkgcGhvbmUgbnVtYmVyICovCisjZWxzZQorI2Rl ZmluZSBGVUxMTlVNTCAxMDAKK2NoYXIgZmJ1ZltGVUxMTlVNTF07CisjZW5kaWYgLyogRFlOQU1J QyAqLworCitzdGF0aWMgY2tqbXBidWYgc2pidWY7CisKKyNpZmRlZiBDS19BTlNJQworc3RhdGlj IFNJR1RZUCAoKnNhdmFscm0pKGludCk7CS8qIEZvciBzYXZpbmcgYWxhcm0gaGFuZGxlciAqLwor c3RhdGljIFNJR1RZUCAoKnNhdmludCkoaW50KTsJLyogRm9yIHNhdmluZyBpbnRlcnJ1cHQgaGFu ZGxlciAqLworI2Vsc2UKK3N0YXRpYyBTSUdUWVAgKCpzYXZhbHJtKSgpOwkvKiBGb3Igc2F2aW5n IGFsYXJtIGhhbmRsZXIgKi8KK3N0YXRpYyBTSUdUWVAgKCpzYXZpbnQpKCk7CS8qIEZvciBzYXZp bmcgaW50ZXJydXB0IGhhbmRsZXIgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworCisjaWZkZWYg Q0tMT0dESUFMCitzdGF0aWMgVk9JRAorZG9sb2dkaWFsKHMpIGNoYXIgKnM7IHsKKyAgICBjaGFy IGJ1ZjJbMTZdOworICAgIGNoYXIgKiByID0gTlVMTDsKKyAgICBpbnQgeCwgbSwgbjsKKyAgICBl eHRlcm4gY2hhciBjeGxvZ2J1ZltdLCB1aWRidWZbXSwgbXlob3N0W107CisKKyAgICBpZiAoIXMp IHMgPSAiIjsKKyAgICBpZiAoKHggPSBzdHJsZW4ocykpID4gMCkgewkJLyogUmVwbGFjZSBzcGFj ZXMgYnkgdW5kZXJzY29yZXMgKi8KKwlyID0gKGNoYXIgKiltYWxsb2MoeCsxKTsKKwlpZiAocikg eworCSAgICBpbnQgaTsKKwkgICAgZm9yIChpID0gMDsgaSA8PSB4OyBpKyspIHsKKwkJaWYgKHNb aV0gIT0gMCAmJiBzW2ldIDw9IFNQKQorCQkgIHJbaV0gPSAnXyc7CisJCWVsc2UKKwkJICByW2ld ID0gc1tpXTsKKwkgICAgfQorCSAgICBzID0gcjsKKwl9CisgICAgfQorICAgIHAgPSBja2RhdGUo KTsKKyAgICBuID0gY2tzdHJuY3B5KGN4bG9nYnVmLHAsQ1hMT0dCVUZMKTsKKyAgICBpZiAoIXVp ZGJ1ZlswXSkgeworCWRlYnVnKEYxMDAsImRvbG9nZGlhbCB1aWRidWYgZW1wdHkiLCIiLDApOwor CWNrc3RybmNweSh1aWRidWYsKGNoYXIgKil3aG9hbWkoKSxVSURCVUZMRU4pOworICAgIH0KKyAg ICBtID0gc3RybGVuKHVpZGJ1Zikrc3RybGVuKG15aG9zdCkrc3RybGVuKHR0bmFtZSkrc3RybGVu KHMpK3N0cmxlbihidWYyKSszMjsKKyAgICBpZiAobittIDwgQ1hMT0dCVUZMLTEpIHsKKwlwID0g Y3hsb2didWYrbjsKKwlpZiAoZGlhbGxjYyAmJiBkaWFsbGFjKSB7CisJICAgIGJ1ZjJbMF0gPSAn Kyc7CisJICAgIGNrbWFrbXNnKCZidWYyWzFdLDE1LGRpYWxsY2MsIigiLGRpYWxsYWMsIikiKTsK Kwl9IGVsc2UgeworCSAgICBja3N0cm5jcHkoYnVmMiwiVW5rbm93biIsMTYpOworCX0KKwlzcHJp bnRmKHAsIiAlcyAlcyBUPURJQUwgSD0lcyBEPSVzIE49JXMgTz0lcyAiLAkvKiBzYWZlIChwcmVj aGVja2VkKSAqLworCQl1aWRidWYsCisJCWNrZ2V0cGlkKCksCisJCW15aG9zdCwKKwkJdHRuYW1l LAorCQlzLAorCQlidWYyCisJCSk7CisJZGVidWcoRjExMCwiZG9sb2dkaWFsIGN4bG9nYnVmIixj eGxvZ2J1ZiwwKTsKKyAgICB9IGVsc2UKKyAgICAgIHNwcmludGYocCwiTE9HRElBTCBCVUZGRVIg T1ZFUkZMT1ciKTsKKyAgICBpZiAocikgZnJlZShyKTsKK30KKyNlbmRpZiAvKiBDS0xPR0RJQUwg Ki8KKworI2lmbmRlZiBNSU5JRElBTAorCisjaWZkZWYgQ09NTUVOVAorc3RhdGljIFZPSUQKK3hj cHkodG8sZnJvbSxsZW4pCQkvKiBDb3B5IHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgKi8KKyAg ICByZWdpc3RlciBjaGFyICp0bywgKmZyb207CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxl bjsgeworCXdoaWxlIChsZW4tLSkgKnRvKysgPSAqZnJvbSsrOworfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCitzdGF0aWMgU0lHVFlQCisjaWZkZWYgQ0tf QU5TSUMKK2RpYWx0aW1lKGludCBmb28pCQkJLyogVGltZXIgaW50ZXJydXB0IGhhbmRsZXIgKi8K KyNlbHNlCitkaWFsdGltZShmb28pIGludCBmb287CQkJLyogVGltZXIgaW50ZXJydXB0IGhhbmRs ZXIgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZGlhbHRpbWUgKi8geworCisgICAgZmFp bF9jb2RlID0gRl9USU1FOwkJCS8qIEZhaWx1cmUgcmVhc29uID0gdGltZW91dCAqLworICAgIGRl YnVnKEYxMDAsImRpYWx0aW1lIGNhdWdodCBTSUdBTFJNIiwiIiwwKTsKKyNpZmRlZiBCRUJPWAor I2lmZGVmIEJFX0RSXzcKKyAgICBhbGFybV9leHBpcmVkKCk7CisjZW5kaWYgLyogQkVfRFJfNyAq LworI2VuZGlmIC8qIEJFQk9YICovCisjaWZkZWYgT1MyCisgICAgc2lnbmFsKFNJR0FMUk0sIGRp YWx0aW1lKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBfX0VNWF9fCisgICAgc2lnbmFsKFNJ R0FMUk0sIFNJR19BQ0spOwkJLyogTmVlZGVkIGZvciBPUy8yICovCisjZW5kaWYgLyogX19FTVhf XyAqLworCisjaWZkZWYgT1NLCQkJCS8qIE9TLTkgKi8KKy8qCisgIFdlIGFyZSBpbiBhbiBpbnRl cmNlcHQgcm91dGluZSBidXQgZG8gbm90IHBlcmZvcm0gYSBGJFJURSAoZG9uZSBpbXBsaWNpdGx5 CisgIGJ5IFJUUyksIHNvIHdlIGhhdmUgdG8gZGVjcmVtZW50IHRoZSBzaWdtYXNrIGFzIEYkUlRF IGRvZXMuICBXYXJuaW5nOgorICBsb25nanVtcCBvbmx5IHJlc3RvcmVzIHRoZSBDUFUgcmVnaXN0 ZXJzLCBOT1QgdGhlIEZQVSByZWdpc3RlcnMuICBTbywgZG9uJ3QKKyAgdXNlIEZQVSBhdCBhbGwg b3IgYXQgbGVhc3QgZG9uJ3QgdXNlIGNvbW1vbiBGUFUgKGRvdWJsZSBvciBmbG9hdCkgcmVnaXN0 ZXIKKyAgdmFyaWFibGVzLgorKi8KKyAgICBzaWdtYXNrKC0xKTsKKyNlbmRpZiAvKiBPU0sgKi8K KworI2lmZGVmIE5UU0lHCisgICAgaWYgKGZvbyA9PSBTSUdBTFJNKQorICAgICAgUG9zdEFsYXJt U2lnU2VtKCk7CisgICAgZWxzZQorICAgICAgUG9zdEN0cmxDU2VtKCk7CisjZWxzZSAvKiBOVFNJ RyAqLworI2lmZGVmIE5UCisgICAgY2tsb25nam1wKGNramFkZHIoc2pidWYpLDEpOworI2Vsc2Ug LyogTlQgKi8KKyAgICBja2xvbmdqbXAoc2pidWYsMSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRp ZiAvKiBOVFNJRyAqLworICAgIC8qIE5PVFJFQUNIRUQgKi8KKyAgICBTSUdSRVRVUk47Cit9CisK K3N0YXRpYyBTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworZGlhbGludChpbnQgZm9vKQkJCS8qIEtl eWJvYXJkIGludGVycnVwdCBoYW5kbGVyICovCisjZWxzZQorZGlhbGludChmb28pIGludCBmb287 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRpYWxpbnQgKi8geworICAgIGZhaWxfY29kZSA9 IEZfSU5UOworICAgIGRlYnVnKEYxMDAsImRpYWxpbnQgY2F1Z2h0IFNJR0lOVCIsIiIsMCk7Cisj aWZkZWYgT1MyCisgICAgc2lnbmFsKFNJR0lOVCwgZGlhbGludCk7CisgICAgZGVidWcoRjEwMCwi ZGlhbGludCgpIFNJR0lOVCBjYXVnaHQgLS0gZGlhbGludCByZXN0b3JlZCIsIiIsMCkgOworI2Vu ZGlmIC8qIE9TMiAqLworI2lmZGVmIF9fRU1YX18KKyAgICBzaWduYWwoU0lHSU5ULCBTSUdfQUNL KTsJCS8qIE5lZWRlZCBmb3IgT1MvMiAqLworI2VuZGlmIC8qIF9fRU1YX18gKi8KKyNpZmRlZiBP U0sJCQkJLyogT1MtOSwgc2VlIGNvbW1lbnQgaW4gZGlhbHRpbWUoKSAqLworICAgIHNpZ21hc2so LTEpOworI2VuZGlmIC8qIE9TSyAqLworI2lmZGVmIE5UU0lHCisgICAgUG9zdEN0cmxDU2VtKCkg OworI2lmZGVmIENLX1RBUEkKKyAgICBQb3N0VEFQSUNvbm5lY3RTZW0oKTsKKyAgICBQb3N0VEFQ SUFuc3dlclNlbSgpOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKyNlbHNlIC8qIE5UU0lHICovCisj aWZkZWYgTlQKKyAgICBja2xvbmdqbXAoY2tqYWRkcihzamJ1ZiksMSk7CisjZWxzZSAvKiBOVCAq LworICAgIGNrbG9uZ2ptcChzamJ1ZiwxKTsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE5U ICovCisgICAgU0lHUkVUVVJOOworfQorCisvKgorICBSb3V0aW5lIHRvIHJlYWQgYSBjaGFyYWN0 ZXIgZnJvbSBjb21tdW5pY2F0aW9uIGRldmljZSwgaGFuZGxpbmcgVEVMTkVUCisgIHByb3RvY29s IG5lZ290aWF0aW9ucyBpbiBjYXNlIHdlJ3JlIGNvbm5lY3RlZCB0byB0aGUgbW9kZW0gdGhyb3Vn aCBhCisgIFRDUC9JUCBURUxORVQgbW9kZW0gc2VydmVyLgorKi8KK3N0YXRpYyBpbnQKK2RkaW5j KG4pIGludCBuOyB7CisjaWZkZWYgVE5DT0RFCisgICAgaW50IGMgPSAwOworICAgIGludCBkb25l ID0gMDsKKyAgICBkZWJ1ZyhGMTAxLCJkZGluYyBlbnRyeSBuIiwiIixuKTsKKyAgICB3aGlsZSAo IWRvbmUpIHsKKwljID0gdHRpbmMobik7CisJLyogZGVidWcoRjAwMCwiZGRpbmMiLCIiLGMpOyAq LworCWlmIChjIDwgMCkgcmV0dXJuKGMpOworI2lmbmRlZiBPUzIKKwlpZiAoKGMgPT0gSUFDKSAm JiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB7CisJICAgIHN3aXRjaCAodG5fZG9vcCgoQ0hBUiko YyAmIDB4ZmYpLGR1cGxleCx0dGluYykpIHsKKwkgICAgICBjYXNlIDI6IGR1cGxleCA9IDA7IGNv bnRpbnVlOworCSAgICAgIGNhc2UgMTogZHVwbGV4ID0gMTsKKwkgICAgICBkZWZhdWx0OiBjb250 aW51ZTsKKwkgICAgfQorCX0gZWxzZSBkb25lID0gMTsKKyNlbHNlIC8qIE9TMiAqLworCWRvbmUg PSAhKGMgPT0gSUFDICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpOworCXNjcmlwdHdydGJ1Zihj KTsJLyogVEVMTkVUIG5lZ290aWF0aW9ucyBoYW5kbGVkIGJ5IGVtdWxhdG9yICovCisjZW5kaWYg LyogT1MyICovCisgICAgfQorICAgIHJldHVybihjICYgMHhmZik7CisjZWxzZSAgLyogVE5DT0RF ICovCisgICAgcmV0dXJuKHR0aW5jKG4pKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KK30KKworc3Rh dGljIFZPSUQKK3R0c2xvdyhzLG1pbGxpc2VjKSBjaGFyICpzOyBpbnQgbWlsbGlzZWM7IHsgLyog T3V0cHV0IHMtbC1vLXctbC15ICovCisjaWZkZWYgVENQU09DS0VUCisgICAgZXh0ZXJuIGludCB0 bl9ubG0sIHRuX2JfbmxtOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgIGRlYnVnKEYxMTEs InR0c2xvdyIscyxtaWxsaXNlYyk7CisgICAgaWYgKGRpYWxkcHkgJiYgKGR1cGxleCB8fCAhbWRt ZWNobykpIHsgLyogRWNobyB0aGUgY29tbWFuZCBpbiBjYXNlIG1vZGVtICovCisJcHJpbnRmKCIl c1xuIixzKTsJCS8qIGlzbid0IGVjaG9pbmcgY29tbWFuZHMuICovCisjaWZkZWYgT1MyCisJewor CSAgICBjaGFyICpzMiA9IHM7CQkvKiBFY2hvIHRvIGVtdWxhdG9yICovCisJICAgIHdoaWxlICgq czIpIHsKKwkJc2NyaXB0d3J0YnVmKChVU0hPUlQpKnMyKyspOworCSAgICB9CisJICAgIHNjcmlw dHdydGJ1ZigoVVNIT1JUKUNSKTsKKwkgICAgc2NyaXB0d3J0YnVmKChVU0hPUlQpTEYpOworCX0K KyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisgICAgZm9yICg7ICpzOyBzKyspIHsKKwl0dG9jKCpz KTsKKyNpZmRlZiBUQ1BTT0NLRVQKKwlpZiAoKnMgPT0gQ1IgJiYgbmV0d29yayAmJiBJU19URUxO RVQoKSkgeworCSAgICBpZiAoIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKSAmJiB0bl9ubG0gIT0g VE5MX0NSKQorCSAgICAgIHR0b2MoKGNoYXIpKCh0bl9ubG0gPT0gVE5MX0NSTEYpID8gTEYgOiBO VUwpKTsKKwkgICAgZWxzZSBpZiAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpICYmCisJCSAgICAg KHRuX2JfbmxtID09IFROTF9DUkxGIHx8IHRuX2JfbmxtID09IFROTF9DUk5VTCkpCisJICAgICAg dHRvYygoY2hhcikoKHRuX2JfbmxtID09IFROTF9DUkxGKSA/IExGIDogTlVMKSk7CisgICAgICAg IH0KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKwlpZiAobWlsbGlzZWMgPiAwKQorCSAgbXNsZWVw KG1pbGxpc2VjKTsKKyAgICB9Cit9CisKKy8qCisgKiBXYWl0IGZvciBhIHN0cmluZyBvZiBjaGFy YWN0ZXJzLgorICoKKyAqIFRoZSBjaGFyYWN0ZXJzIGFyZSB3YWl0ZWQgZm9yIGluZGl2aWR1YWxs eSwgYW5kIG90aGVyIGNoYXJhY3RlcnMgbWF5CisgKiBiZSByZWNlaXZlZCAiaW4gYmV0d2VlbiIu ICBUaGlzIG1lcmVseSBndWFyYW50ZWVzIHRoYXQgdGhlIGNoYXJhY3RlcnMKKyAqIEFSRSByZWNl aXZlZCwgYW5kIGluIHRoZSBvcmRlciBzcGVjaWZpZWQuCisgKi8KK3N0YXRpYyBWT0lECit3YWl0 Zm9yKHMpIGNoYXIgKnM7IHsKKyAgICBDSEFSIGMsIHg7CisgICAgd2hpbGUgKChjID0gKnMrKykp IHsJCS8qIHdoaWxlIG1vcmUgY2hhcmFjdGVycyByZW1haW4uLi4gKi8KKwlkbyB7CQkJCS8qIHdh aXQgZm9yIHRoZSBjaGFyYWN0ZXIgKi8KKwkgICAgeCA9IChDSEFSKSAoZGRpbmMoMCkgJiAwMTc3 KTsKKwkgICAgZGVidWcoRjAwMCwiZGlhbCB3YWl0Zm9yIGdvdCIsIiIseCk7CisJICAgIGlmIChk aWFsZHB5KSB7CisJCWlmICh4ICE9IExGKSBjb25vYyh4KTsKKwkJaWYgKHggPT0gQ1IpIGNvbm9j KExGKTsKKwkgICAgfQorCX0gd2hpbGUgKHggIT0gYyk7CisgICAgfQorfQorCitzdGF0aWMgaW50 CitkaWR3ZWdldChzLHIpIGNoYXIgKnMsICpyOyB7CS8qIExvb2tzIGluIHN0cmluZyBzIGZvciBy ZXNwb25zZSByICovCisgICAgaW50IGxyID0gKGludClzdHJsZW4ocik7CS8qICAwIG1lYW5zIG5v dCBmb3VuZCwgMSBtZWFucyBmb3VuZCBpdCAqLworICAgIGludCBpOworICAgIGRlYnVnKEYxMTAs ImRpZHdlZ2V0IixyLDApOworICAgIGRlYnVnKEYxMTAsIiBpbiIscywwKTsKKyAgICBmb3IgKGkg PSAoaW50KXN0cmxlbihzKS1scjsgaSA+PSAwOyBpLS0pCisJaWYgKCBzW2ldID09IHJbMF0gKSBp ZiAoICFzdHJuY21wKHMraSxyLGxyKSApIHJldHVybiggMSApOworICAgIHJldHVybiggMCApOwor fQorCisKKy8qIFIgRSBTIEUgVCAtLSBSZXNldCBhbGFybXMsIGV0Yy4gb24gZXhpdC4gKi8KKwor c3RhdGljIFZPSUQKK2RyZXNldCgpIHsKKyAgICBkZWJ1ZyhGMTAwLCJkcmVzZXQgcmVzZXR0aW5n IGFsYXJtIGFuZCBzaWduYWwgaGFuZGxlcnMiLCIiLDApOworICAgIGFsYXJtKDApOworICAgIHNp Z25hbChTSUdBTFJNLHNhdmFscm0pOwkJLyogcmVzdG9yZSBhbGFybSBoYW5kbGVyICovCisgICAg c2lnbmFsKFNJR0lOVCxzYXZpbnQpOwkJLyogcmVzdG9yZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwor ICAgIGRlYnVnKEYxMDAsImRyZXNldCBhbGFybSBhbmQgc2lnbmFsIGhhbmRsZXJzIHJlc2V0Iiwi IiwwKTsKK30KKworLyoKKyAgQ2FsbCB0aGlzIHJvdXRpbmUgd2hlbiB0aGUgbW9kZW0gcmVwb3J0 cyB0aGF0IGl0IGhhcyBjb25uZWN0ZWQgYXQgYSBjZXJ0YWluCisgIHNwZWVkLCBnaXZpbmcgdGhh dCBzcGVlZCBhcyB0aGUgYXJndW1lbnQuICBJZiB0aGUgY29ubmVjdGlvbiBzcGVlZCBpcyBub3QK KyAgdGhlIHNhbWUgYXMgS2VybWl0J3MgY3VycmVudCBjb21tdW5pY2F0aW9uIHNwZWVkLCBBTkQg dGhlIG1vZGVtIGludGVyZmFjZQorICBzcGVlZCBpcyBub3QgbG9ja2VkIChpLmUuIERJQUwgU1BF RUQtTUFUQ0hJTkcgaXMgbm90IE9OKSwgdGhlbiBjaGFuZ2UgdGhlCisgIGRldmljZSBzcGVlZCB0 byB0aGUgb25lIGdpdmVuLgorKi8KK3N0YXRpYyBWT0lECisjaWZkZWYgQ0tfQU5TSUMKK3NwZGNo Zyhsb25nIHMpCisjZWxzZQorc3BkY2hnKHMpIGxvbmcgczsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogc3BkY2hnICovIHsKKyAgICBpbnQgczI7CisgICAgaWYgKCFtZG1zcGQpCQkJLyogSWYg bW9kZW0gaW50ZXJmYWNlIHNwZWVkIGxvY2tlZCwgKi8KKyAgICAgIHJldHVybjsJCQkJLyogIGRv bid0IGRvIHRoaXMuICovCisgICAgaWYgKHNwZWVkICE9IHMpIHsJCQkvKiBTcGVlZHMgZGlmZmVy PyAqLworCXMyID0gcyAvIDEwTDsJCQkvKiBDb252ZXJ0IHRvIGNwcyBleHByZXNzZWQgYXMgaW50 ICovCisJaWYgKHR0c3NwZChzMikgPCAwKSB7CQkvKiBDaGFuZ2Ugc3BlZWQuICovCisJICAgIHBy aW50ZigiIFdBUk5JTkcgLSBzcGVlZCBjaGFuZ2UgdG8gJWxkIGZhaWxlZC5cclxuIixzKTsKKwl9 IGVsc2UgeworCSAgICBwcmludGYoIiBTcGVlZCBjaGFuZ2VkIHRvICVsZC5cclxuIixzKTsKKwkg ICAgc3BlZWQgPSBzOwkJCS8qIFVwZGF0ZSBnbG9iYWwgc3BlZWQgdmFyaWFibGUgKi8KKwl9Cisg ICAgfQorfQorCisvKgorICBEaXNwbGF5IGFsbCBjaGFyYWN0ZXJzIHJlY2VpdmVkIGZyb20gbW9k ZW0gZGlhbGVyIHRocm91Z2ggdGhpcyByb3V0aW5lLAorICBmb3IgY29uc2lzdGVudCBoYW5kbGlu ZyBvZiBjYXJyaWFnZSByZXR1cm5zIGFuZCBsaW5lZmVlZHMuCisqLworc3RhdGljIFZPSUQKKyNp ZmRlZiBDS19BTlNJQworZGlhbG9jKGNoYXIgYykKKyNlbHNlCitkaWFsb2MoYykgY2hhciBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIGRpYWxvYyAqLwkJCQkvKiBEaWFsIE91dHB1dCBD aGFyYWN0ZXIgKi8KKyAgICBpZiAoZGlhbGRweSkgeworCWlmIChjICE9IExGKSBjb25vYyhjKTsJ CS8qIERvbid0IGVjaG8gTEYgKi8KKwlpZiAoYyA9PSBDUikgY29ub2MoTEYpOwkJLyogRWNobyBD UiBhcyBDUkxGICovCisgICAgfQorfQorCisjaWZuZGVmIE5PU1BMCitjaGFyICoKK2dldGRtKHgp IGludCB4OyB7CQkJLyogUmV0dXJuIGRpYWwgbW9kaWZpZXIgKi8KKyAgICBNRE1JTkYgKiBtcDsK KyAgICBpbnQgbTsKKyAgICBpbnQgaXNoYXllcyA9IDA7CisgICAgbSA9IG1kbXR5cDsKKyAgICBp ZiAobSA8IDEpCisgICAgICBpZiAobWRtc2F2ID4gLTEpCisJbSA9IG1kbXNhdjsKKyAgICBpZiAo bSA8IDEpCisgICAgICByZXR1cm4oIiIpOworI2lmbmRlZiBNSU5JRElBTAorICAgIGlmIChtID09 IG5fVEFQSSkKKyAgICAgIG0gPSBuX0hBWUVTOworI2VuZGlmIC8qIE1JTklESUFMICovCisgICAg bXAgPSBtb2RlbXBbbV07CisgICAgaXNoYXllcyA9IChkaWFsY2FwYXMgPyBkaWFsY2FwYXMgOiBt cC0+Y2FwYXMpICYgQ0tEX0FUOworICAgIHN3aXRjaCAoeCkgeworICAgICAgY2FzZSBWTl9ETV9M UDoKKwlyZXR1cm4oaXNoYXllcyA/ICIsIiA6ICIiKTsKKyAgICAgIGNhc2UgVk5fRE1fU1A6Cisj aWZkZWYgTUlOSURJQUwKKwlyZXR1cm4oIiIpOworI2Vsc2UKKwlyZXR1cm4obSA9PSBuX1VTUiA/ ICIvIiA6ICIiKTsKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworICAgICAgY2FzZSBWTl9ETV9QRDoK KwlyZXR1cm4oaXNoYXllcyA/ICJQIiA6ICIiKTsKKyAgICAgIGNhc2UgVk5fRE1fVEQ6CisJcmV0 dXJuKGlzaGF5ZXMgPyAiVCIgOiAiIik7CisgICAgICBjYXNlIFZOX0RNX1dBOgorCXJldHVybihp c2hheWVzID8gIkAiIDogIiIpOworICAgICAgY2FzZSBWTl9ETV9XRDoKKwlyZXR1cm4oaXNoYXll cyA/ICJXIiA6ICIiKTsKKyAgICAgIGNhc2UgVk5fRE1fUkM6CisJcmV0dXJuKGlzaGF5ZXMgPyAi OyIgOiAiIik7CisgICAgICBjYXNlIFZOX0RNX0hGOgorCXJldHVybihpc2hheWVzID8gIiEiIDog IiIpOworICAgICAgY2FzZSBWTl9ETV9XQjoKKwlyZXR1cm4oaXNoYXllcyA/ICIkIiA6ICIiKTsK KyAgICB9CisgICAgcmV0dXJuKCIiKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCitzdGF0aWMg Vk9JRAorZ2V0ZGlhbG10aCgpIHsKKyAgICBpZiAoZGlhbG1hdXRvICYmIGRpYWxsY2MpIHsJCS8q IElmIERJQUwgTUVUSE9EIEFVVE8uLi4gKi8KKwlpbnQgaTsJCQkJLyogYW5kIHdlIGtub3cgb3Vy IGFyZWEgY29kZS4uLiAqLworCWZvciAoaSA9IDA7IGkgPCBuZGlhbHRvY2M7IGkrKykgeyAvKiBG aXJzdCBjaGVjayBUb25lIGNvdW50cmllcyBsaXN0ICovCisJICAgIGlmICghc3RyY21wKGRpYWx0 b2NjW2ldLGRpYWxsY2MpKSB7CisJCWRpYWxtdGggPSBYWURNX1Q7CisJCWJyZWFrOworCSAgICB9 CisJfQorCWZvciAoaSA9IDA7IGkgPCBuZGlhbHB1Y2M7IGkrKykgeyAvKiBUaGVuIFB1bHNlIGNv dW50cmllcyBsaXN0ICovCisJICAgIGlmICghc3RyY21wKGRpYWxwdWNjW2ldLGRpYWxsY2MpKSB7 CisJCWRpYWxtdGggPSBYWURNX1A7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KK30KKwor Vk9JRAkJCQkvKiBHZXQgZGlhbGluZyBkZWZhdWx0cyBmcm9tIGVudmlyb25tZW50ICovCitnZXRk aWFsZW52KCkgeworICAgIGNoYXIgKnAgPSBOVUxMOworICAgIGludCBpLCB4OworCisgICAgbWFr ZXN0cigmcCxnZXRlbnYoIktfRElBTF9ESVJFQ1RPUlkiKSk7CisgICAgaWYgKHApIHsKKwlpbnQg aTsKKwl4d29yZHMocCwoTUFYRERJUiAtIDIpLGRpYWxkaXIsMCk7CisJZm9yIChpID0gMDsgaSA8 IChNQVhERElSIC0gMSk7IGkrKykgeworCSAgICBpZiAoIWRpYWxkaXJbaSsxXSkKKwkgICAgICBi cmVhazsKKwkgICAgZWxzZQorCSAgICAgIGRpYWxkaXJbaV0gPSBkaWFsZGlyW2krMV07CisJfQor CW5kaWFsZGlyID0gaTsKKyAgICB9CisgICAgeG1ha2VzdHIoJmRpYWxsY2MsZ2V0ZW52KCJLX0NP VU5UUllDT0RFIikpOyAvKiBNeSBjb3VudHJ5IGNvZGUgKi8KKyAgICB4bWFrZXN0cigmZGlhbGl4 cCxnZXRlbnYoIktfTERfUFJFRklYIikpOyAgIC8qIE15IGxvbmctZGlzdGFuY2UgcHJlZml4ICov CisgICAgeG1ha2VzdHIoJmRpYWxsZHAsZ2V0ZW52KCJLX0lOVExfUFJFRklYIikpOyAvKiBNeSBp bnRlcm5hdGlvbmFsIHByZWZpeCAqLworICAgIHhtYWtlc3RyKCZkaWFsbGRwLGdldGVudigiS19U Rl9QUkVGSVgiKSk7ICAgLyogTnkgVG9sbC1mcmVlIHByZWZpeCAqLworCisjaWZuZGVmIE5PSUNQ CisgICAgcCA9IGdldGVudigiS19ESUFMX01FVEhPRCIpOwkvKiBMb2NhbCBkaWFsIG1ldGhvZCAq LworICAgIGlmIChwKSBpZiAoKnApIHsKKwlleHRlcm4gc3RydWN0IGtleXRhYiBkaWFsX21bXTsK KwlleHRlcm4gaW50IG5kaWFsX207CisJaSA9IGxvb2t1cChkaWFsX20scCxuZGlhbF9tLCZ4KTsK KwlpZiAoaSA+IC0xKSB7CisJICAgIGlmIChpID09IFhZRE1fQSkgeworCQlkaWFsbWF1dG8gPSAx OworCQlkaWFsbXRoID0gWFlETV9EOworCSAgICB9IGVsc2UgeworCQlkaWFsbWF1dG8gPSAwOwor CQlkaWFsbXRoID0gaTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogTk9JQ1AgKi8KKwor ICAgIHAgPSBOVUxMOworICAgIHhtYWtlc3RyKCZwLGdldGVudigiS19URl9BUkVBQ09ERSIpKTsg LyogVG9sbC1mcmVlIGFyZWFjb2RlcyAqLworICAgIGlmIChwKSB7CisJaW50IGk7CisJeHdvcmRz KHAsNyxkaWFsdGZjLDApOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkgICAgaWYgKCFk aWFsdGZjW2krMV0pCisJICAgICAgYnJlYWs7CisJICAgIGVsc2UKKwkgICAgICBkaWFsdGZjW2ld ID0gZGlhbHRmY1tpKzFdOworCX0KKwludG9sbGZyZWUgPSBpOworCWZyZWUocCk7CisgICAgfQor ICAgIGZvciAoaSA9IDA7IGkgPCBNQVhUUENDOyBpKyspIHsJLyogQ2xlYXIgVG9uZS9QdWxzZSBj b3VudHJ5IGxpc3RzICovCisJZGlhbHRvY2NbaV0gPSBOVUxMOworCWRpYWxwdWNjW2ldID0gTlVM TDsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IE1BWFRQQ0M7IGkrKykgewkvKiBJbml0IFRv bmUgY291bnRyeSBsaXN0ICovCisJaWYgKHRvbmVjY1tpXSkKKwkgIG1ha2VzdHIoJihkaWFsdG9j Y1tpXSksdG9uZWNjW2ldKTsKKwllbHNlCisJICBicmVhazsKKyAgICB9CisgICAgbmRpYWx0b2Nj ID0gaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYVFBDQzsgaSsrKSB7CS8qIEluaXQgUHVsc2Ug Y291bnRyeSBsaXN0ICovCisJaWYgKHB1bHNlY2NbaV0pCisJICBtYWtlc3RyKCYoZGlhbHB1Y2Nb aV0pLHB1bHNlY2NbaV0pOworCWVsc2UKKwkgIGJyZWFrOworICAgIH0KKyAgICBuZGlhbHB1Y2Mg PSBpOworCisgICAgaWYgKGRpYWxsY2MpIHsJCQkvKiBIYXZlIGNvdW50cnkgY29kZSAqLworCWlm ICghc3RyY21wKGRpYWxsY2MsIjEiKSkgewkvKiBJZiBpdCdzIDEgKi8KKwkgICAgaWYgKCFkaWFs bGRwKQkJLyogU2V0IHRoZXNlIHByZWZpeGVzLi4uICovCisJICAgICAgbWFrZXN0cigmZGlhbGxk cCwiMSIpOworCSAgICBpZiAoIWRpYWx0ZnApCisJICAgICAgbWFrZXN0cigmZGlhbHRmcCwiMSIp OworCSAgICBpZiAoIWRpYWxpeHApCisJICAgICAgbWFrZXN0cigmZGlhbGl4cCwiMDExIik7CisJ ICAgIGlmIChudG9sbGZyZWUgPT0gMCkgewkvKiBUb2xsLWZyZWUgYXJlYSBjb2RlcyAqLworCQlp ZiAoKGRpYWx0ZmNbMF0gPSBtYWxsb2MoNCkpKSB7CisJCSAgICBja3N0cm5jcHkoZGlhbHRmY1sw XSwiODAwIiw0KTsgLyogMTk3MC1zb21ldGhpbmcgKi8KKwkJICAgIG50b2xsZnJlZSsrOworCQkg ICAgaWYgKChkaWFsdGZjWzFdID0gbWFsbG9jKDQpKSkgeworCQkJY2tzdHJuY3B5KGRpYWx0ZmNb MV0sIjg4OCIsNCk7IC8qIDE5OTYgKi8KKwkJCW50b2xsZnJlZSsrOworCQkJaWYgKChkaWFsdGZj WzJdID0gbWFsbG9jKDQpKSkgeworCQkJICAgIGNrc3RybmNweShkaWFsdGZjWzJdLCI4NzciLDQp OyAvKiA1IEFwcmlsIDE5OTggKi8KKwkJCSAgICBudG9sbGZyZWUrKzsKKwkJCSAgICBpZiAoKGRp YWx0ZmNbM10gPSBtYWxsb2MoNCkpKSB7CisJCQkJY2tzdHJuY3B5KGRpYWx0ZmNbM10sIjg2NiIs NCk7IC8qIDIwMDA/ICovCisJCQkJbnRvbGxmcmVlKys7CisJCQkgICAgfQorCQkJfQorCQkgICAg fQorCQl9CisJICAgIH0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoZGlhbGxjYywiMzU4IikgJiYKKwkJ ICAgKChpbnQpIHN0cmNtcCh6em5kYXRlKCksIjE5OTYxMDExIikgPiAwKQorCQkgICApIHsJCQkv KiBGaW5sYW5kICovCisJICAgIGlmICghZGlhbGxkcCkJCS8qIExvbmctZGlzdGFuY2UgcHJlZml4 ICovCisJICAgICAgbWFrZXN0cigmZGlhbGxkcCwiOSIpOworCSAgICBpZiAoIWRpYWxpeHApIAkJ LyogSW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCAqLworCSAgICAgIG1ha2VzdHIoJmRpYWxp eHAsIjk5MCIpOworCX0gZWxzZSB7CQkJLyogTm90IE5BTlAgb3IgRmlubGFuZCAqLworCSAgICBp ZiAoIWRpYWxsZHApCisJICAgICAgbWFrZXN0cigmZGlhbGxkcCwiMCIpOworCSAgICBpZiAoIWRp YWxpeHApCisJICAgICAgbWFrZXN0cigmZGlhbGl4cCwiMDAiKTsKKwl9CisgICAgfQorICAgIHht YWtlc3RyKCZkaWFsbGFjLGdldGVudigiS19BUkVBQ09ERSIpKTsKKyAgICB4bWFrZXN0cigmZGlh bHB4byxnZXRlbnYoIktfUEJYX09DUCIpKTsKKyAgICB4bWFrZXN0cigmZGlhbHB4aSxnZXRlbnYo IktfUEJYX0lDUCIpKTsKKyAgICBwID0gZ2V0ZW52KCJLX1BCWF9YQ0giKTsKKyNpZmRlZiBDT01N RU5UCisgICAgeG1ha2VzdHIoJmRpYWxweHgscCk7CisjZWxzZQorICAgIGlmIChwKSBpZiAoKnAp IHsKKwljaGFyICogcyA9IE5VTEw7CisJY2hhciAqIHBwW01BWFBCWEVYQ0grMl07CisJbWFrZXN0 cigmcyxwKTsJCQkvKiBNYWtlIGEgY29weSBmb3IgcG9raW5nICovCisJaWYgKHMpIHsKKwkgICAg eHdvcmRzKHMsTUFYUEJYRVhDSCsxLHBwLDApOyAvKiBOb3RlOiBwcFtdIGlzIDEtYmFzZWQuICov CisJICAgIGZvciAoaSA9IDA7IGkgPD0gTUFYUEJYRVhDSDsgaSsrKSB7CisgICAgICAgICAgICAg ICAgaWYgKCFwcFtpKzFdKSBicmVhazsKKwkJbWFrZXN0cigmKGRpYWxweHhbaV0pLHBwW2krMV0p OworCQluZGlhbHB4eCsrOworCSAgICB9CisJICAgIG1ha2VzdHIoJnMsTlVMTCk7CQkvKiBGcmVl IHBva2VkIGNvcHkgKi8KKwl9CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KK30KKworc3Rh dGljIGludAorZGlhbGZhaWwoeCkgaW50IHg7IHsKKyAgICBjaGFyICogczsKKworICAgIGZhaWxf Y29kZSA9IHg7CisgICAgZGVidWcoRjEwMSwiY2t1ZGlhbCBkaWFsZmFpbCIsIiIseCk7CisgICAg ZHJlc2V0KCk7CQkJCS8qIFJlc2V0IGFsYXJtIGFuZCBzaWduYWwgaGFuZGxlcnMgKi8KKworICAg IHByaW50ZigiJXMgRmFpbHVyZTogIiwgZnVuY19jb2RlID09IDAgPyAiRElBTCIgOiAiQU5TV0VS Iik7CisgICAgaWYgKGRpYWxkcHkpIHsJCQkvKiBJZiBzaG93aW5nIHByb2dyZXNzICovCisgICAg ICAgZGVidWcoRjEwMCwiZGlhbCBkaXNwbGF5IGlzIG9uIiwiIiwwKTsKKwlwID0gY2tfdGltZSgp OwkJCS8qIGdldCBjdXJyZW50IHRpbWU7ICovCisJaWYgKCpwKSBwcmludGYoIiVzOiAiLHApOwor ICAgIH0KKyAgICBzd2l0Y2ggKGZhaWxfY29kZSkgewkJLyogVHlwZSBvZiBmYWlsdXJlICovCisg ICAgICBjYXNlIEZfVElNRTogCQkJLyogVGltZW91dCAqLworCWlmIChkaWFsX3doYXQgPT0gRFdf SU5JVCkKKwkgIHByaW50ZiAoIlRpbWVkIG91dCB3aGlsZSB0cnlpbmcgdG8gaW5pdGlhbGl6ZSBt b2RlbS5cbiIpOworCWVsc2UgaWYgKGRpYWxfd2hhdCA9PSBEV19ESUFMKQorCSAgcHJpbnRmICgi JXMgaW50ZXJ2YWwgZXhwaXJlZC5cbiIsCisJCSAgZnVuY19jb2RlID09IDAgPyAiRElBTCBUSU1F T1VUIiA6ICJBTlNXRVIgdGltZW91dCIpOworCWVsc2UKKwkgIHByaW50ZigiVGltZW91dC5cbiIp OworCWZmbHVzaChzdGRvdXQpOworCWlmIChtZG1jYXBhcyAmIENLRF9BVCkKKwkgIHR0b2MoJ1ww MTUnKTsJCQkvKiBTZW5kIENSIHRvIGludGVycnVwdCBkaWFsaW5nICovCisJLyogU29tZSBIYXll cyBtb2RlbXMgZG9uJ3QgZmFpbCB3aXRoIEJVU1kgb24gYnVzeSBsaW5lcyAqLworCWRpYWxzdGEg PSBESUFfVElNTzsKKwlkZWJ1ZyhGMTEwLCJkaWFsIiwidGltZW91dCIsMCk7CisJYnJlYWs7CisK KyAgICAgIGNhc2UgRl9JTlQ6CQkJLyogRGlhbGluZyBpbnRlcnJ1cHRlZCAqLworCXByaW50ZiAo IkludGVycnVwdGVkLlxuIik7CisJZmZsdXNoKHN0ZG91dCk7CisjaWZuZGVmIE5PWEZFUgorCWlu dGVycnVwdGVkID0gMTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwlkZWJ1ZyhGMTExLCJkaWFsIiwi aW50ZXJydXB0ZWQiLG1kbWNhcGFzICYgQ0tEX0FUKTsKKwlpZiAobWRtY2FwYXMgJiBDS0RfQVQp CisJICB0dG9jKCdcMDE1Jyk7CQkJLyogU2VuZCBDUiB0byBpbnRlcnJ1cHQgZGlhbGluZyAqLwor CWRpYWxzdGEgPSBESUFfSU5UUjsKKwlicmVhazsKKworICAgIGNhc2UgRl9NT0RFTToJCQkvKiBN b2RlbSBkZXRlY3RlZCBhIGZhaWx1cmUgKi8KKyAgICAgICAgIGRlYnVnKEYxMTEsImRpYWxmYWls KCkiLCJsYnVmIixsYnVmKTsKKyAgICAgICAgIGlmIChsYnVmICYmICpsYnVmKSB7CisgICAgICAg ICAgICBwcmludGYoIiBcIiIpOworICAgICAgICAgICAgZm9yIChzID0gbGJ1ZjsgKnM7IHMrKykK KyAgICAgICAgICAgICAgIGlmIChpc3ByaW50KCpzKSkKKyAgICAgICAgICAgICAgICAgIHB1dGNo YXIoKnMpOwkJLyogRGlzcGxheSBwcmludGFibGUgcmVhc29uICovCisgICAgICAgICAgICBwcmlu dGYgKCJcIiIpOworICAgICAgICAgfSBlbHNlIHByaW50ZihmdW5jX2NvZGUgPT0gMCA/CisgICAg ICAgICAgICAgICAgICAgICAgICAiIENhbGwgbm90IGNvbXBsZXRlZC4iIDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICIgQ2FsbCBkaWQgbm90IGNvbWUgaW4uIgorICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKwlwcmludGYoIlxuIik7CisJZGVidWcoRjExMCwiZGlhbCIsbGJ1ZiwwKTsKKwlp ZiAoZGlhbHN0YSA8IDApIGRpYWxzdGEgPSBESUFfVU5TUDsKKwlicmVhazsKKworICAgICAgY2Fz ZSBGX01JTklUOgkJCS8qIEZhaWx1cmUgdG8gaW5pdGlhbGl6ZSBtb2RlbSAqLworCXByaW50ZiAo IkVycm9yIGluaXRpYWxpemluZyBtb2RlbS5cbiIpOworCWRlYnVnKEYxMTAsImRpYWwiLCJtb2Rl bSBpbml0IiwwKTsKKwlkaWFsc3RhID0gRElBX05PSU47CisJYnJlYWs7CisKKyAgICBkZWZhdWx0 OgorCXByaW50ZigidW5rbm93blxuIik7CisJZGVidWcoRjExMCwiZGlhbCIsInVua25vd24iLDAp OworCWZmbHVzaChzdGRvdXQpOworCWlmIChtZG1jYXBhcyAmIENLRF9BVCkKKwkgIHR0b2MoJ1ww MTUnKTsJCQkvKiBTZW5kIENSIHRvIGludGVycnVwdCBkaWFsaW5nICovCisJZGlhbHN0YSA9IERJ QV9JTlRSOworICAgIH0KKworI2lmZGVmIERZTkFNSUMKKyAgICBpZiAocmJ1ZikgZnJlZShyYnVm KTsgcmJ1ZiA9IE5VTEw7CisgICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxMOwor I2VuZGlmIC8qIERZTkFNSUMgKi8KKworICAgIGlmIChkaWFsc3RhIDwgMCkgZGlhbHN0YSA9IERJ QV9VRVJSOyAvKiBTZXQgZmFpbHVyZSBjb2RlICovCisgICAgcmV0dXJuKDApOwkJCQkvKiBSZXR1 cm4gemVybyAoaW1wb3J0YW50KSAqLworfQorCisvKiAgQyBLIEQgSSBBIEwJIC0tICBEaWFsIHVw IHRoZSByZW1vdGUgc3lzdGVtICovCisKKy8qIFJldHVybnMgMSBpZiBjYWxsIGNvbXBsZXRlZCwg MCBvdGhlcndpc2UgKi8KKworc3RhdGljIGludCBtZG13YWl0LCBtZG1zdGF0ID0gMDsKKyNpZm5k ZWYgQ0tfVEFQSQorc3RhdGljCisjZW5kaWYgLyogQ0tfVEFQSSAqLworaW50IHdhaXRjdDsKK2lu dCBtZG13YWl0ZCA9IDEwIDsJCQkvKiBkaWFsdG1vIC8gbWRtd2FpdCBkaWZmZXJlbmNlICovCitz dGF0aWMgY2hhciBjOworc3RhdGljIGNoYXIgKnRlbG5icjsKKworc3RhdGljIGludCB3ciA9IDA7 CQkJLyogd3IgPSB3YWtlIHJhdGUgKi8KK3N0YXRpYyBjaGFyICogd3M7CQkJLyogd3MgPSB3YWtl IHN0cmluZyAqLworc3RhdGljIGNoYXIgKiB4bnVtID0gTlVMTDsKK3N0YXRpYyBpbnQgaW5pdGVk ID0gMDsKKworc3RhdGljIFNJR1RZUAorI2lmZGVmIENLX0FOU0lDCitfZG9kaWFsKHZvaWQgKiB0 aHJlYWRpbmZvKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK19kb2RpYWwodGhyZWFkaW5mbykgVk9J RCAqIHRocmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIF9kb2RpYWwgKi8gewor ICAgIGNoYXIgYzI7CisgICAgY2hhciAqZGNtZCwgKnMsICpmbG9jbWQgPSBOVUxMOworICAgIGlu dCB4ID0gMCwgbiA9IEZfVElNRTsKKworI2lmZGVmIE5UU0lHCisgICAgc2lnbmFsKCBTSUdJTlQs IGRpYWxpbnQgKTsKKyAgICBpZiAodGhyZWFkaW5mbykgewkJCS8qIFRocmVhZCBsb2NhbCBzdG9y YWdlLi4uICovCisJVGxzU2V0VmFsdWUoVGxzSW5kZXgsdGhyZWFkaW5mbyk7CisgICAgfQorI2Vu ZGlmIC8qIE5UU0lHICovCisKKyAgICBkY21kID0gZGlhbGNtZCA/IGRpYWxjbWQgOiBtcC0+ZGlh bF9zdHI7CisgICAgaWYgKChpbnQpc3RybGVuKGRjbWQpICsgKGludClzdHJsZW4odGVsbmJyKSA+ IChMQlVGTCAtIDIpKSB7CisJcHJpbnRmKCJESUFMIGNvbW1hbmQgKyBwaG9uZSBudW1iZXIgdG9v IGxvbmchXG4iKTsKKwlkcmVzZXQoKTsKKyNpZmRlZiBEWU5BTUlDCisJaWYgKHJidWYpIGZyZWUo cmJ1Zik7IHJidWYgPSBOVUxMOworCWlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVMTDsK KyNlbmRpZiAvKiBEWU5BTUlDICovCisjaWZkZWYgTlRTSUcKKwlja1RocmVhZEVuZCh0aHJlYWRp bmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworCVNJR1JFVFVSTjsJIC8qIE5vIGNvbnZlcnNhdGlv biB3aXRoIG1vZGVtIHRvIGNvbXBsZXRlIGRpYWxpbmcgKi8KKyAgICB9CisgICAgbWFrZXN0cigm eG51bSx0ZWxuYnIpOworCisgICAgZ2V0ZGlhbG10aCgpOwkJCS8qIEdldCBkaWFsIG1ldGhvZCAq LworCisjaWZkZWYgQ0tfQVREVAorICAgIC8qIENvbWJpbmUgdGhlIFNFVCBESUFMIE1FVEhPRCBj b21tYW5kIHdpdGggdGhlIERJQUwgY29tbWFuZCBzdHJpbmcgKi8KKyAgICBpZiAoIWRpYWxjbWQg JiYJCQkvKiBVc2luZyBkZWZhdWx0IERJQUwgY29tbWFuZCAqLworCShtZG1jYXBhcyAmIENLRF9B VCkgJiYJCS8qIEFUIGNvbW1hbmQgc2V0IG9ubHkgKi8KKwkoKGRpYWxtdGggPT0gWFlETV9UICYm ICFkaWFsdG9uZSkgfHwgLyogYW5kIHVzaW5nIGRlZmF1bHQgKi8KKwkgKGRpYWxtdGggPT0gWFlE TV9QICYmICFkaWFscHVsc2UpKSkgeyAvKiBtb2RlbSBjb21tYW5kcy4uLiAqLworCWNoYXIgYzsK KwlkZWJ1ZyhGMTEwLCJkaWFsIGF0ZHQgeG51bSAxIix4bnVtLDApOworCXMgPSBkY21kOworCWRl YnVnKEYxMTAsImRpYWwgYXRkdCBzIixzLDApOworCWlmICgqdGVsbmJyICE9ICdUJyAmJgorCSAg ICAqdGVsbmJyICE9ICdQJyAmJgorCSAgICAqdGVsbmJyICE9ICd0JyAmJgorCSAgICAqdGVsbmJy ICE9ICdwJyAmJgorCSAgICAhY2tzdHJjbXAocywiYXRkIiwzLDApICYmCisJICAgIHNbM10gIT0g J1QnICYmCisJICAgIHNbM10gIT0gJ1AnICYmCisJICAgIHNbM10gIT0gJ3QnICYmCisJICAgIHNb M10gIT0gJ3AnKSB7CisJICAgIGNoYXIgeGJ1ZlsyMDBdOworCSAgICBjID0gKGRpYWxtdGggPT0g WFlETV9UKSA/ICdUJyA6ICdQJzsKKwkgICAgaWYgKGlzbG93ZXIoc1swXSkpCisJICAgICAgYyA9 IHRvbG93ZXIoYyk7CisJICAgIGlmICgoaW50KXN0cmxlbih0ZWxuYnIpIDwgMTk5KSB7CisJCXNw cmludGYoeGJ1ZiwiJWMlcyIsYyx0ZWxuYnIpOworCQltYWtlc3RyKCZ4bnVtLHhidWYpOworCSAg ICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBDS19BVERUICovCisgICAgZGVidWcoRjExMSwiX2Rv ZGlhbCIseG51bSx4cmVkaWFsKTsKKworICAgIC8qIEhhbmcgdXAgdGhlIG1vZGVtIChpbiBjYXNl IGl0IHdhc24ndCAib24gaG9vayIpICovCisgICAgLyogQnV0IG9ubHkgaWYgU0VUIERJQUwgSEFO R1VQIE9OLi4uICovCisKKyAgICBpZiAoIXhyZWRpYWwpIHsJCQkvKiBNb2RlbSBub3QgaW5pdGFs aXplZCB5ZXQuICovCisJaW5pdGVkID0gMDsKKyAgICB9CisgICAgaWYgKCF4cmVkaWFsIHx8ICFp bml0ZWQpIHsKKwlpZiAoZGlhbGh1cCgpIDwgMCkgewkJLyogSGFuZ3VwIGZpcnN0ICovCisJICAg IGRlYnVnKEYxMDAsIl9kb2RpYWwgZGlhbGh1cCBmYWlsZWQiLCIiLDApOworI2lmbmRlZiBNSU5J RElBTAorCSAgICBpZiAobWRtY2FwYXMgJiBDS0RfVEIpCS8qIFRlbGViaXRzIG1pZ2h0IG5lZWQg YSBCUkVBSyAqLworCSAgICAgIHR0c25kYigpOwkJCS8qICBmaXJzdC4gKi8KKyNlbmRpZiAvKiBN SU5JRElBTCAqLworCSAgICBpZiAoZGlhbGhuZyAmJiBkaWFsc3RhICE9IERJQV9QQVJUKSB7IC8q IElmIGhhbmd1cCBmYWlsZWQsICovCisJCXR0Y2xvcygwKTsJCS8qIGNsb3NlIGFuZCByZW9wZW4g dGhlIGRldmljZS4gKi8KKwkJaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG15bWRtdHlwLDApIDwg MCkgeworCQkgICAgcHJpbnRmKCJTb3JyeSwgQ2FuJ3QgaGFuZyB1cCBjb21tdW5pY2F0aW9uIGRl dmljZS5cbiIpOworCQkgICAgcHJpbnRmKCJUcnkgJ3NldCBsaW5lICVzJyBhZ2Fpbi5cbiIsdHRu YW1lKTsKKwkJICAgIGRpYWxzdGEgPSBESUFfSEFORzsKKyNpZmRlZiBEWU5BTUlDCisJCSAgICBp ZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7CisJCSAgICBpZiAoZmJ1ZikgZnJlZShm YnVmKTsgZmJ1ZiA9IE5VTEw7CisjZW5kaWYgLyogRFlOQU1JQyAqLworCQkgICAgZHJlc2V0KCk7 CisjaWZkZWYgTlRTSUcKKwkJICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8q IE5UU0lHICovCisJCSAgICBTSUdSRVRVUk47CisJCX0KKwkgICAgfQorCX0KKwlpbml0ZWQgPSAw OwkJCS8qIFdlIGh1bmcgdXAgc28gbXVzdCByZWluaXQgKi8KKyAgICB9CisjaWZuZGVmIE1JTklE SUFMCisgICAgLyogRG9uJ3Qgc3RhcnQgdGFsa2luZyB0byBSb2xtIHRvbyBzb29uICovCisgICAg aWYgKG15bWRtdHlwID09IG5fUk9MTSAmJiBkaWFsc3RhICE9IERJQV9QQVJUKQorICAgICAgbXNs ZWVwKDUwMCk7CisjZW5kaWYgLyogTUlOSURJQUwgKi8KKworICAgIGlmIChkaWFsc3RhICE9IERJ QV9QQVJUCQkvKiBTb21lIGluaXRpYWwgc2V0dXBzLiAqLworI2lmbmRlZiBNSU5JRElBTAorCSYm IG15bWRtdHlwICE9IG5fQVRUVVBDCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwkpIHsKKwlmYWls X2NvZGUgPSBGX01JTklUOwkJLyogRGVmYXVsdCBmYWlsdXJlIGNvZGUgKi8KKwlkaWFsX3doYXQg PSBEV19JTklUOwkJLyogV2hhdCBJJ20gRG9pbmcgTm93ICAgKi8KKwlpZiAoZGlhbGRweSkgewkJ CS8qIElmIHNob3dpbmcgcHJvZ3Jlc3MsICovCisJICAgIHAgPSBja190aW1lKCk7CQkvKiBnZXQg dGltZXN0YW1wLiAgICovCisJICAgIGlmICghaW5pdGVkKQorCSAgICAgIGlmICgqcCkKKwkJcHJp bnRmKCIgSW5pdGlhbGl6aW5nOiAlcy4uLlxuIixwKTsKKwl9CisgICAgfQorI2lmbmRlZiBNSU5J RElBTAorI2lmZGVmIEFUVDczMDAKKyAgICBpZiAobXltZG10eXAgPT0gbl9BVFRVUEMpIHsKKy8q CisgIEZvciBBVFQ3MzAwL1VuaXggUEMncyB3aXRoIHRoZWlyIHNwZWNpYWwgaW50ZXJuYWwgbW9k ZW0uICBXaG9sZSBkaWFsaW5nCisgIHByb2Nlc3MgaXMgaGFuZGxlZCByaWdodCBoZXJlLCBhbiBl eGNlcHRpb24gdG8gdGhlIG5vcm1hbCBzdHJ1Y3R1cmUuCisgIFRpbWVvdXQgYW5kIHVzZXIgaW50 ZXJydXB0cyBhcmUgZW5hYmxlZCBkdXJpbmcgZGlhbGluZy4gIGF0dGRpYWwoKSBpcyBpbgorICBm aWxlIGNrdXRpby5jLiAgLSBqcmQKKyovCisgICAgICAgIF9QUk9UT1RZUCggaW50IGF0dGRpYWws IChjaGFyICosIGxvbmcsIGNoYXIgKikgKTsKKwlmYWlsX2NvZGUgPSBGX01PREVNOwkJLyogRGVm YXVsdCBmYWlsdXJlIGNvZGUgKi8KKwlkaWFsX3doYXQgPSBEV19ESUFMOworCWlmIChkaWFsZHB5 KSB7CQkJLyogSWYgc2hvd2luZyBwcm9ncmVzcyAqLworCSAgICBwID0gY2tfdGltZSgpOwkJLyog Z2V0IGN1cnJlbnQgdGltZTsgKi8KKwkgICAgaWYgKCpwKQorCSAgICAgIHByaW50ZigiIERpYWxp bmc6ICVzLi4uXG4iLHApOworCX0KKwlhbGFybSh3YWl0Y3QpOwkJCS8qIFNldCBhbGFybSAqLwor CWlmIChhdHRkaWFsKHR0bmFtZSxzcGVlZCx0ZWxuYnIpKSB7IC8qIGRpYWwgaW50ZXJuYWwgbW9k ZW0gKi8KKwkgICAgZHJlc2V0KCk7CQkJLyogcmVzZXQgYWxhcm1zLCBldGMuICovCisJICAgIHBy aW50ZigiIENhbGwgZmFpbGVkLlxyXG4iKTsKKwkgICAgZGlhbGh1cCgpOwkgICAgICAgIAkvKiBI YW5ndXAgdGhlIGNhbGwgKi8KKyNpZmRlZiBEWU5BTUlDCisJICAgIGlmIChyYnVmKSBmcmVlKHJi dWYpOyByYnVmID0gTlVMTDsKKwkgICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxM OworI2VuZGlmIC8qIERZTkFNSUMgKi8KKwkgICAgZGlhbHN0YSA9IERJQV9VRVJSOworI2lmZGVm IE5UU0lHCisJICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICov CisJICAgIFNJR1JFVFVSTjsJCQkvKiByZXR1cm4gZmFpbHVyZSAqLworCX0KKwlkcmVzZXQoKTsJ CQkvKiByZXNldCBhbGFybXMsIGV0Yy4gKi8KKwl0dHBrdChzcGVlZCxGTE9fRElBWCxwYXJpdHkp OwkvKiBjYW5jZWwgZGlhbGluZyBpb2N0bCAqLworCWlmICghcXVpZXQgJiYgIWJhY2tncmQpIHsK KwkgICAgaWYgKGRpYWxkcHkpIHsKKwkJcHJpbnRmKCJcbiIpOworCQlwcmludGYoIiBDYWxsIGNv bXBsZXRlLlxyXG4iKTsKKwkgICAgfSBlbHNlIGlmIChtb2RlbW1zZ1swXSkKKwkJcHJpbnRmKCIg Q2FsbCBjb21wbGV0ZTogXCIlc1wiLlxyXG4iLChjaGFyICopbW9kZW1tc2cpOworCSAgICBlbHNl CisJICAgICAgcHJpbnRmKCIgQ2FsbCBjb21wbGV0ZS5cclxuIik7CisJfQorI2lmZGVmIENLTE9H RElBTAorCWRvbG9nZGlhbCh0ZWxuYnIpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisJZGlh bHN0YSA9IERJQV9PSzsKKyNpZmRlZiBEWU5BTUlDCisJaWYgKHJidWYpIGZyZWUocmJ1Zik7IHJi dWYgPSBOVUxMOworCWlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVMTDsKKyNlbmRpZiAv KiBEWU5BTUlDICovCisjaWZkZWYgTlRTSUcKKwlja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNl bmRpZiAvKiBOVFNJRyAqLworCVNJR1JFVFVSTjsJLyogTm8gY29udmVyc2F0aW9uIHdpdGggbW9k ZW0gdG8gY29tcGxldGUgZGlhbGluZyAqLworICAgIH0gZWxzZQorI2VuZGlmIC8qIEFUVDczMDAg Ki8KKyNpZmRlZiBDS19UQVBJCisgICAgICBpZiAodHR0YXBpICYmICF0YXBpcGFzcykgewkvKiBU QVBJIERpYWxpbmcgKi8KKwkgIHN3aXRjaCAoZnVuY19jb2RlKSB7CisJICAgIGNhc2UgMDoJCQkv KiBEaWFsICovCisJICAgICAgaWYgKGNrdGFwaWRpYWwodGVsbmJyKSkgeworCQkgIGZhaWxfY29k ZSA9IDA7CisJCSAgaWYgKHBhcnRpYWwpIHsKKwkJICAgICAgZGlhbHN0YSA9IERJQV9QQVJUOwor CQkgIH0gZWxzZSB7CisJCSAgICAgIGRpYWxzdGEgPSBESUFfT0s7CisJCSAgICAgIHNwZWVkID0g dHRnc3BkKCk7CisJCSAgfQorCSAgICAgIH0gZWxzZSB7CisJCSAgaWYgKGRpYWxzdGEgPT0gRElB X1BBUlQpCisJCSAgICBja3RhcGloYW5ndXAoKTsKKwkJICBpZiAoIWZhaWxfY29kZSkKKwkJICAg IGZhaWxfY29kZSA9IEZfTU9ERU07CisJCSAgZGlhbHN0YSA9IERJQV9UQVBJOworCSAgICAgIH0K KwkgICAgICBicmVhazsKKwkgICAgY2FzZSAxOiB7CQkJLyogQW5zd2VyICovCisJCWxvbmcgc3Ry dHRpbWUgPSB0aW1lKChsb25nICopTlVMTCk7CisJCWxvbmcgZGlmZiA9IDA7CisJCWRvIHsKKwkJ ICAgIGlmIChkaWFsYXRtbyA+IDApIHsKKwkJCXN0cnR0aW1lICs9IGRpZmY7CisJCQl3YWl0Y3Qg ICAtPSBkaWZmOworCQkgICAgfQorCQkgICAgZmFpbF9jb2RlID0gMDsKKwkJICAgIGlmIChja3Rh cGlhbnN3ZXIoKSkgeyAvKiBTVUNDRVNTICovCisJCQlkaWFsc3RhID0gRElBX09LOworCQkJc3Bl ZWQgPSB0dGdzcGQoKTsKKwkJCWJyZWFrOworCQkgICAgfSBlbHNlIHsJCS8qIEZBSUxVUkUgKi8K KwkJCWlmIChmYWlsX2NvZGUpIHsKKwkJCSAgICBkaWFsc3RhID0gRElBX1RBUEk7CisJCQkgICAg YnJlYWs7CisJCQl9IGVsc2UgeworCQkJICAgIGZhaWxfY29kZSA9IEZfTU9ERU07CisJCQkgICAg ZGlhbHN0YSA9IERJQV9UQVBJOworCQkJfQorCQkgICAgfQorCQkgICAgaWYgKGRpYWxhdG1vID4g MCkgeworCQkJZGlmZiA9IHRpbWUoKGxvbmcgKilOVUxMKSAtIHN0cnR0aW1lOworCQkgICAgfQor CQl9IHdoaWxlICgoZGlhbGF0bW8gPiAwKSA/IChkaWZmIDwgd2FpdGN0KSA6IDEpOworCQlicmVh azsKKwkgICAgfQorCSAgfQorI2lmZGVmIE5UU0lHCisJICBja1RocmVhZEVuZCh0aHJlYWRpbmZv KTsKKyNlbmRpZiAvKiBOVFNJRyAqLworCSAgU0lHUkVUVVJOOworICAgICAgfSBlbHNlCisjZW5k aWYgLyogQ0tfVEFQSSAqLworI2VuZGlmIC8qIE1JTklESUFMICovCisKKy8qIE1vZGVtcyB3aXRo IEFUIGNvbW1hbmQgc2V0Li4uICovCisKKyAgICAgIGlmICgobWRtY2FwYXMgJiBDS0RfQVQpICYm IGRpYWxzdGEgIT0gRElBX1BBUlQpIHsKKworCSAgaWYgKGRpYWxwYWNlID4gLTEpCQkvKiBTZXQg aW50ZXJjaGFyYWN0ZXIgcGFjaW5nICovCisJICAgIHdyID0gZGlhbHBhY2U7CisJICBlbHNlCisJ ICAgIHdyID0gbXAtPndha2VfcmF0ZTsKKworCSAgaWYgKGRpYWxpbmkpCQkJLyogR2V0IHdha2V1 cC9pbml0IHN0cmluZyAqLworCSAgICB3cyA9IGRpYWxpbmk7CisJICBlbHNlCisJICAgIHdzID0g bXAtPndha2Vfc3RyOworI2lmZGVmIENPTU1FTlQKKwkgIGlmICghd3MpIHdzID0gIlwwMTUiOwkJ LyogSWYgbm9uZSwgdXNlIENSICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisJICAvKiBGaXJz dCBnZXQgdGhlIG1vZGVtJ3MgYXR0ZW50aW9uIGFuZCBlbmFibGUgcmVzdWx0IGNvZGVzICovCisK KwkgIGZvciAodHJpZXMgPSAwOyB0cmllcyA8IDU7IHRyaWVzKyspIHsgLyogU2VuZCBzaG9ydCBj b21tYW5kICovCisJICAgICAgaWYgKHRyaWVzID4gMCkgeworCQkgIHR0b2MoJ1wwMTUnKTsJCS8q IEFUIG11c3QgZ28gZmlyc3QgZm9yIHNwZWVkICovCisJCSAgbXNsZWVwKHdyKTsJCS8qIGRldGVj dGlvbi4gKi8KKwkgICAgICB9CisJICAgICAgaWYgKG15bWRtdHlwID09IG5fR0VORVJJQykgLyog Rm9yY2Ugd29yZCByZXN1bHQgY29kZXMgKi8KKwkJdHRzbG93KCJBVFEwVjFcMDE1Iix3cik7IC8q IGZvciBnZW5lcmljIG1vZGVtIHR5cGUgKi8KKwkgICAgICBlbHNlCisJCXR0c2xvdygiQVRRMFww MTUiLHdyKTsKKwkgICAgICBtZG1zdGF0ID0gZ2V0b2sodHJpZXMgPCAyID8gMiA6IHRyaWVzLCAx KTsgLyogR2V0IHJlc3BvbnNlICovCisJICAgICAgaWYgKG1kbXN0YXQgPiAwKSBicmVhazsJLyog T0sgLSBkb25lICovCisJICAgICAgaWYgKGRpYWxkcHkgJiYgdHJpZXMgPiAwKSB7CisJCSAgcHJp bnRmKCJcclxuIE5vIHJlc3BvbnNlIGZyb20gbW9kZW0iKTsKKwkJICBpZiAodHJpZXMgPT0gNCkg eworCQkgICAgICBwcmludGYoIi5cclxuIik7CisJCSAgICAgIGRpYWxzdGEgPSBESUFfTlJTUDsK KyNpZmRlZiBEWU5BTUlDCisJCSAgICAgIGlmIChyYnVmKSBmcmVlKHJidWYpOyByYnVmID0gTlVM TDsKKwkJICAgICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxMOworI2VuZGlmIC8q IERZTkFNSUMgKi8KKyNpZmRlZiBOVFNJRworCQkgICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZv KTsKKyNlbmRpZiAvKiBOVFNJRyAqLworCQkgICAgICBTSUdSRVRVUk47CS8qIHJldHVybiBmYWls dXJlICovCisJCSAgfQorCQkgIHByaW50ZigiLCByZXRyeWluZyVzLi4uXHJcbiIsCisJCQkgKHRy aWVzID4gMSkgPyAiIGFnYWluIiA6ICIiKTsKKwkJICBmZmx1c2goc3Rkb3V0KTsKKwkgICAgICB9 CisJICAgICAgdHRmbHVpKCk7CisJICAgICAgc3dpdGNoICh0cmllcykgeworCQljYXNlIDA6IG1z bGVlcCgxMDApOyBicmVhazsKKwkJY2FzZSAxOiB0dHNuZGIoKTsgYnJlYWs7CisJCWRlZmF1bHQ6 CisJCSAgaWYgKG5ldHdvcmspIHsKKwkJICAgICAgdHRzbmRiKCk7CisJCSAgfSBlbHNlIHsKKwkJ ICAgICAgaWYgKHRyaWVzID09IDIpIHsKKwkJCSAgdHRoYW5nKCk7CisJCQkgIHR0Zmx1aSgpOwor CQkgICAgICB9IGVsc2UgeworCQkJICBtZG1odXAoKTsKKwkJICAgICAgfQorCQkgICAgICBpbml0 ZWQgPSAwOworCQkgIH0KKwkgICAgICB9CisJICAgICAgZmZsdXNoKHN0ZG91dCk7CisJICB9CisJ ICBkZWJ1ZyhGMTAxLCJfZG9kaWFsIEFUUTAgbWRtc3RhdCIsIiIsbWRtc3RhdCk7CisKKwkgIGlm ICh4cmVkaWFsICYmIGluaXRlZCkgewkvKiBSZWRpYWxpbmcuLi4gKi8KKwkgICAgICB0dG9jKCdc MDE1Jyk7CQkvKiBDYW5jZWwgcHJldmlvdXMgKi8KKwkgICAgICBtc2xlZXAoMjUwKTsJCS8qIFdh aXQgYSBiaXQgKi8KKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIHdhc24ndCB0aGUgcHJvYmxlbS4u LiAqLworCSAgICAgIHR0Zmx1aSgpOwkJCS8qIENsZWFyIG91dCBzdHVmZiBmcm9tIG1vZGVtIHNl dHVwICovCisJICAgICAgdHRzbG93KCJBVFM3PTYwXDAxNSIsd3IpOwkvKiBSZWRvIGNhcnJpZXIg d2FpdCAqLworCSAgICAgIGdldG9rKDQsMSk7CQkvKiBHZXQgcmVzcG9uc2UgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisJICAgICAgYWxhcm0oMCk7CQkJLyogSnVzdCBpbiBjYXNlLi4uICovCisJ ICAgICAgdHRmbHVpKCk7CQkJLyogQ2xlYXIgb3V0IHN0dWZmIGZyb20gbW9kZW0gc2V0dXAgKi8K KwkgICAgICBnb3RvIFJFRElBTDsJCS8qIFNraXAgc2V0dXAgLSB3ZSBhbHJlYWR5IGRpZCBpdCAq LworCSAgfQorLyoKKyAgRG8gZmxvdyBjb250cm9sIG5leHQgYmVjYXVzZSBhIGxvbmcgaW5pdCBz dHJpbmcgZWNob2luZyBiYWNrIGNvdWxkCisgIGNhdXNlIGRhdGEgb3ZlcnJ1bnMsIGNhdXNpbmcg dXMgdG8gbWlzcyB0aGUgT0ssIG9yICh3b3JzZSkgdG8gZ2V0IG91dAorICBvZiBzeW5jIGVudGly ZWx5LgorKi8KKwkgIHggPSAwOwkJCS8qIFVzZXIgc2FpZCBTRVQgRElBTCBGTE9XIFJUUy9DVFMg Ki8KKwkgIGlmIChkaWFsZmMgPT0gRkxPX1JUU0MgfHwJLyogRXZlbiBpZiBLZXJtaXQncyBGTE9X IGlzbid0Li4uICAqLworCSAgICAgIChkaWFsZmMgPT0gRkxPX0FVVE8gJiYgZmxvdyA9PSBGTE9f UlRTQykpIHsKKwkgICAgICBpZiAoZGlhbGh3ZmMpIHsJCS8qIFVzZXItZGVmaW5lZCBIV0ZDIHN0 cmluZyAqLworCQkgIGlmICgqZGlhbGh3ZmMpIHsKKwkJICAgICAgeCA9IDE7CisJCSAgICAgIGZs b2NtZCA9IGRpYWxod2ZjOworCQkgIH0KKwkgICAgICB9IGVsc2UgaWYgKChtZG1jYXBhcyAmIENL RF9IVykgJiYgKihtcC0+aHdmY19zdHIpKSB7CisJCSAgeCA9IDE7CisJCSAgZmxvY21kID0gbXAt Pmh3ZmNfc3RyOworCSAgICAgIH0KKwkgIH0gZWxzZSBpZiAoZGlhbGZjID09IEZMT19YT05YIHx8 IC8qIFVzZXIgc2FpZCBTRVQgRElBTCBGTE9XIFNPRlQgKi8KKwkJICAgICAoZGlhbGZjID09IEZM T19BVVRPICYmIGZsb3cgPT0gRkxPX1hPTlgpKSB7CisJICAgICAgaWYgKGRpYWxzd2ZjKSB7CisJ CSAgaWYgKCpkaWFsc3dmYykgeworCQkgICAgICB4ID0gMTsKKwkJICAgICAgZmxvY21kID0gZGlh bHN3ZmM7CisJCSAgfQorCSAgICAgIH0gZWxzZSBpZiAoKG1kbWNhcGFzICYgQ0tEX1NXKSAmJiAq KG1wLT5zd2ZjX3N0cikpIHsKKwkJICB4ID0gMTsKKwkJICBmbG9jbWQgPSBtcC0+c3dmY19zdHI7 CisJICAgICAgfQorCSAgfSBlbHNlIGlmIChkaWFsZmMgPT0gRkxPX05PTkUpIHsgLyogVXNlciBz YWlkIFNFVCBESUFMIEZMT1cgTk9ORSAqLworCSAgICAgIGlmIChkaWFsbm9mYykgeworCQkgIGlm ICgqZGlhbG5vZmMpIHsKKwkJICAgICAgeCA9IDE7CisJCSAgICAgIGZsb2NtZCA9IGRpYWxub2Zj OworCQkgIH0KKwkgICAgICB9IGVsc2UgaWYgKG1wLT5ub2ZjX3N0ciAmJiAqKG1wLT5ub2ZjX3N0 cikpIHsKKwkJICB4ID0gMTsKKwkJICBmbG9jbWQgPSBtcC0+bm9mY19zdHI7CisJICAgICAgfQor CSAgfQorCSAgaWYgKHgpIHsJCQkvKiBTZW5kIHRoZSBmbG93IGNvbnRyb2wgY29tbWFuZCAqLwor CSAgICAgIGRlYnVnKEYxMTAsIl9kb2RpYWwgZmxvY21kIixmbG9jbWQsMCk7CisJICAgICAgZm9y ICh0cmllcyA9IDQ7IHRyaWVzID4gMDsgdHJpZXMtLSkgeyAvKiBTZW5kIHRoZSBjb21tYW5kICov CisJCSAgdHRzbG93KGZsb2NtZCx3cik7CisJCSAgbWRtc3RhdCA9IGdldG9rKDUsMSk7CisJCSAg aWYgKG1kbXN0YXQgPiAwKSBicmVhazsKKwkJICBpZiAoZGlhbGRweSAmJiB0cmllcyA+IDEpCisJ CSAgICBwcmludGYoIiBObyByZXNwb25zZSBmcm9tIG1vZGVtLCByZXRyeWluZyVzLi4uXG4iLAor CQkJICAgKHRyaWVzIDwgNCkgPyAiIGFnYWluIiA6ICIiKTsKKwkgICAgICB9CisKKyNpZmRlZiBD S19UVFNFVEZMT1cKKyNpZmRlZiBDS19SVFNDVFMKKy8qCisgIFNvIGZhciBvbmx5IGNrdXRpby5j IGhhcyB0dHNldGZsb3coKS4KKyAgV2UgaGF2ZSBqdXN0IHRvbGQgdGhlIG1vZGVtIHRvIHR1cm4g b24gUlRTL0NUUyBmbG93IGNvbnRyb2wgYW5kIHRoZSBtb2RlbQorICBoYXMgc2FpZCBPSy4gIEJ1 dCB3ZSBvdXJzZWx2ZXMgaGF2ZSBub3QgdHVybmVkIGl0IG9uIHlldCBiZWNhdXNlIG9mIHRoZQor ICBkaXNndXN0aW5nIHR0cGt0KC4uLkZMT19ESUFMLi4uKSBoYWNrLiAgU28gbm93LCBpZiB0aGUg Y29tcHV0ZXIgZG9lcyBub3QKKyAgaGFwcGVuIHRvIGJlIGFzc2VydGluZyBSVFMsIHRoZSBtb2Rl bSB3aWxsIG5vIGxvbmdlciBzZW5kIGNoYXJhY3RlcnMgdG8gaXQuCisgIFNvIGF0IEVYQUNUTFkg VEhJUyBQT0lOVCwgd2UgbXVzdCBlbmFibGUgUlRTL0NUUyBpbiB0aGUgZGV2aWNlIGRyaXZlci4K KyovCisJICAgICAgaWYgKGRpYWxmYyA9PSBGTE9fUlRTQyB8fAorCQkgIChkaWFsZmMgPT0gRkxP X0FVVE8gJiYgZmxvdyA9PSBGTE9fUlRTQykpIHsKKwkJICB0dHNldGZsb3coRkxPX1JUU0MpOwor CSAgICAgIH0KKyNlbmRpZiAvKiBDS19SVFNDVFMgKi8KKyNlbmRpZiAvKiBDS19UVFNFVEZMT1cg Ki8KKwkgIH0KKwkgIHR0Zmx1aSgpOwkJCS8qIENsZWFyIG91dCBzdHVmZiBmcm9tIG1vZGVtIHNl dHVwICovCisJICBtc2xlZXAoMjUwKTsKKworCSAgaWYgKCF3cykgZ290byB4ZGlhbGVjOwkvKiBO byBpbml0IHN0cmluZyAqLworCSAgaWYgKCEqd3MpIGdvdG8geGRpYWxlYzsKKworCSAgZm9yICh0 cmllcyA9IDQ7IHRyaWVzID4gMDsgdHJpZXMtLSkgeyAvKiBTZW5kIGluaXQgc3RyaW5nICovCisJ ICAgICAgdHRzbG93KHdzLHdyKTsKKwkgICAgICBtZG1zdGF0ID0gZ2V0b2soNCwxKTsJLyogR2V0 IHJlc3BvbnNlICovCisJICAgICAgaWYgKG1kbXN0YXQgPiAwKSBicmVhazsKKwkgICAgICBpZiAo ZGlhbGRweSAmJiB0cmllcyA+IDEpCisJCXByaW50ZigiIE5vIHJlc3BvbnNlIGZyb20gbW9kZW0s IHJldHJ5aW5nJXMuLi5cbiIsCisJCSAgICAgICAodHJpZXMgPCA0KSA/ICIgYWdhaW4iIDogIiIp OworCSAgfQorCSAgZGVidWcoRjEwMSwiX2RvZGlhbCB3YWtlX3N0ciBtZG1zdGF0IiwiIixtZG1z dGF0KTsKKworCSAgaWYgKG1kbXN0YXQgPCAxKSB7CQkvKiBJbml0aWFsaXplZCBPSz8gKi8KKwkg ICAgICBkaWFsZmFpbChGX01JTklUKTsJLyogTm8sIGZhaWwuICovCisjaWZkZWYgTlRTSUcKKwkg ICAgICBja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAqLworCSAgICAg IFNJR1JFVFVSTjsKKwkgIH0KKworI2lmbmRlZiBNSU5JRElBTAorICAgIH0gZWxzZSBpZiAobXlt ZG10eXAgPT0gbl9BVFREVERNICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsgLyogQVQmVCAuLi4g Ki8KKwl0dHNuZGIoKTsJCQkvKiBTZW5kIEJSRUFLICovCisjZW5kaWYgLyogTUlOSURJQUwgKi8K KworICAgIH0gZWxzZSBpZiAoZGlhbHN0YSAhPSBESUFfUEFSVCkgeyAvKiBBbGwgb3RoZXJzICov CisKKwkvKiBQbGFjZSBtb2RlbSBpbnRvIGNvbW1hbmQgbW9kZSAqLworCisJd3MgPSBkaWFsaW5p ID8gZGlhbGluaSA6IG1wLT53YWtlX3N0cjsKKwlpZiAod3MgJiYgKGludClzdHJsZW4od3MpID4g MCkgeworCSAgICBkZWJ1ZyhGMTExLCJfZG9kaWFsIGRlZmF1bHQsIHdha2Ugc3RyaW5nIiwgd3Ms IHdyKTsKKwkgICAgdHRzbG93KHdzLCB3cik7CisJfSBlbHNlIGRlYnVnKEYxMDAsIl9kb2RpYWwg bm8gd2FrZV9zdHIiLCIiLDApOworCWlmIChtcC0+d2FrZV9wcm9tcHQgJiYgKGludClzdHJsZW4o bXAtPndha2VfcHJvbXB0KSA+IDApIHsKKwkgICAgZGVidWcoRjExMCwiX2RvZGlhbCBkZWZhdWx0 LCB3YWl0aW5nIGZvciB3YWtlX3Byb21wdCIsCisJCSAgbXAtPndha2VfcHJvbXB0LDApOworCSAg ICBhbGFybSgxMCk7CisJICAgIHdhaXRmb3IobXAtPndha2VfcHJvbXB0KTsKKwkgICAgYWxhcm0o MCk7CisJfSBlbHNlIGRlYnVnKEYxMDAsIl9kb2RpYWwgbm8gd2FrZV9wcm9tcHQiLCIiLDApOwor ICAgIH0KKworLyogSGFuZGxlIGVycm9yIGNvcnJlY3Rpb24sIGRhdGEgY29tcHJlc3Npb24sIGFu ZCBmbG93IGNvbnRyb2wuLi4gKi8KKworICB4ZGlhbGVjOgorCisgICAgaWYgKGRpYWxzdGEgIT0g RElBX1BBUlQpIHsKKwlhbGFybSgwKTsJCQkvKiBUdXJuIG9mZiBhbGFybSAqLworCWRlYnVnKEYx MDAsIl9kb2RpYWwgZ290IHdha2UgcHJvbXB0IiwiIiwwKTsKKwltc2xlZXAoNTAwKTsJCQkvKiBB bGxvdyBzZXR0bGluZyB0aW1lICovCisKKwkvKiBFbmFibGUvZGlzYWJsZSBlcnJvci1jb3JyZWN0 aW9uICovCisKKwl4ID0gMDsKKwlpZiAoZGlhbGVjKSB7CQkJLyogRElBTCBFUlJPUi1DT1JSRUNU SU9OIGlzIE9OICovCisJICAgIGlmIChkaWFsZWNvbikgewkJLyogU0VUIERJQUwgU1RSSU5HIEVS Uk9SLUNPUlJFQ1RJT04gKi8KKwkJaWYgKCpkaWFsZWNvbikgeworCQkgICAgeCA9IDE7CisJCSAg ICB0dHNsb3coZGlhbGVjb24sIHdyKTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKChtZG1jYXBhcyAm IENLRF9FQykgJiYgKihtcC0+ZWNfb25fc3RyKSkgeworCQl4ID0gMTsKKwkJdHRzbG93KG1wLT5l Y19vbl9zdHIsIHdyKTsKKwkgICAgfQorI2lmZGVmIENPTU1FTlQKKwkgICAgZWxzZSBwcmludGYo CisJCSAgIldBUk5JTkcgLSBJIGRvbid0IGtub3cgaG93IHRvIHR1cm4gb24gRUMgZm9yIHRoaXMg bW9kZW1cbiIKKwkJICAgICApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwl9IGVsc2UgeworCSAg ICBpZiAoZGlhbGVjb2ZmKSB7CQkvKiBESUFMIEVSUk9SLUNPUlJFQ1RJT04gT0ZGICovCisJCWlm ICgqZGlhbGVjb2ZmKSB7CisJCSAgICB4ID0gMTsKKwkJICAgIHR0c2xvdyhkaWFsZWNvZmYsIHdy KTsKKwkJfQorCSAgICB9IGVsc2UgaWYgKChtZG1jYXBhcyAmIENLRF9FQykgJiYgKihtcC0+ZWNf b2ZmX3N0cikpIHsKKwkJeCA9IDE7CisJCXR0c2xvdyhtcC0+ZWNfb2ZmX3N0ciwgd3IpOworCSAg ICB9CisjaWZkZWYgQ09NTUVOVAorCSAgICBlbHNlIHByaW50ZigKKwkJICAiV0FSTklORyAtIEkg ZG9uJ3Qga25vdyBob3cgdG8gdHVybiBvZmYgRUMgZm9yIHRoaXMgbW9kZW1cbiIKKwkJICAgICAp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwl9CisJLyogZGVidWcoRjEwMSwiY2t1ZGlhIHh4X29r IiwiIix4eF9vayk7ICovCisJaWYgKHggJiYgeHhfb2spIHsJCQkvKiBMb29rIGZvciBPSyByZXNw b25zZSAqLworCSAgICBkZWJ1ZyhGMTAwLCJja3VkaWEgY2FsbGluZyB4eF9vayBmb3IgRUMiLCIi LDApOworCSAgICB4ID0gKCp4eF9vaykoNSwxKTsKKwkgICAgZGVidWcoRjEwMSwiY2t1ZGlhIHh4 X29rIiwiIix4KTsKKwkgICAgaWYgKHggPCAwKSB7CisJCXByaW50ZigiV0FSTklORyAtIFRyb3Vi bGUgZW5hYmxpbmcgZXJyb3ItY29ycmVjdGlvbi5cbiIpOworCQlwcmludGYoCisiIExpa2VseSBj YXVzZTogWW91ciBtb2RlbSBpcyBhbiBSUEkgbW9kZWwsIHdoaWNoIGRvZXMgbm90IGhhdmUgYnVp bHQtaW5cbiIpOworCQlwcmludGYoIiBlcnJvciBjb3JyZWN0aW9uIGFuZCBkYXRhIGNvbXByZXNz aW9uLiIpOworCSAgICB9CisJfQorCisJLyogRW5hYmxlL2Rpc2FibGUgZGF0YSBjb21wcmVzc2lv biAqLworCisJaWYgKHggPiAwKSB4ID0gMDsKKwlpZiAoZGlhbGRjKSB7CisJICAgIGlmICh4IDwg MCB8fCAhZGlhbGVjKSB7CisJCXByaW50ZigKKyJXQVJOSU5HIC0gWW91IGNhbid0IGhhdmUgY29t cHJlc3Npb24gd2l0aG91dCBlcnJvciBjb3JyZWN0aW9uLlxuIik7CisJICAgIH0gZWxzZSBpZiAo ZGlhbGRjb24pIHsJLyogU0VUIERJQUwgU1RSSU5HIC4uLiAqLworCQlpZiAoKmRpYWxkY29uKSB7 CisJCSAgICB4ID0gMTsKKwkJICAgIHR0c2xvdyhkaWFsZGNvbiwgd3IpOworCQl9CisJICAgIH0g ZWxzZSBpZiAoKG1kbWNhcGFzICYgQ0tEX0RDKSAmJiAqKG1wLT5kY19vbl9zdHIpKSB7CisJCXgg PSAxOworCQl0dHNsb3cobXAtPmRjX29uX3N0ciwgd3IpOworCSAgICB9CisjaWZkZWYgQ09NTUVO VAorCSAgICBlbHNlIHByaW50ZigKKwkJICAiV0FSTklORyAtIEkgZG9uJ3Qga25vdyBob3cgdG8g dHVybiBvbiBEQyBmb3IgdGhpcyBtb2RlbVxuIgorCQkJICApOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKwl9IGVsc2UgeworCSAgICBpZiAoZGlhbGRjb2ZmKSB7CisJCWlmICgqZGlhbGRjb2ZmKSB7 CisJCSAgICB4ID0gMTsKKwkJICAgIHR0c2xvdyhkaWFsZGNvZmYsIHdyKTsKKwkJfQorCSAgICB9 IGVsc2UgaWYgKChtZG1jYXBhcyAmIENLRF9EQykgJiYgKihtcC0+ZGNfb2ZmX3N0cikpIHsKKwkJ eCA9IDE7CisJCXR0c2xvdyhtcC0+ZGNfb2ZmX3N0ciwgd3IpOworCSAgICB9CisjaWZkZWYgQ09N TUVOVAorCSAgICBlbHNlIHByaW50ZigKKyJXQVJOSU5HIC0gSSBkb24ndCBrbm93IGhvdyB0byB0 dXJuIG9mZiBjb21wcmVzc2lvbiBmb3IgdGhpcyBtb2RlbVxuIgorCQkJICApOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKwl9CisJaWYgKHggJiYgeHhfb2spIHsJCQkvKiBMb29rIGZvciBPSyByZXNw b25zZSAqLworCSAgICB4ID0gKCp4eF9vaykoNSwxKTsKKwkgICAgaWYgKHggPCAwKSBwcmludGYo IldBUk5JTkcgLSBUcm91YmxlIGVuYWJsaW5nIGNvbXByZXNzaW9uXG4iKTsKKwl9CisgICAgfQor CisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBNSU5JRElBTAorICAgIGlmIChtZG1jYXBhcyAmIENL RF9LUyAmJiBkaWFsc3RhICE9IERJQV9QQVJUKSB7IC8qIEtlcm1pdCBzcG9vZiAqLworCWludCBy OwkJCQkvKiBSZWdpc3RlciAqLworCWNoYXIgdGJjbWRidWZbNjRdOwkJLyogQ29tbWFuZCBidWZm ZXIgKi8KKwlzd2l0Y2ggKG15bWRtdHlwKSB7CisKKwkgIGNhc2Ugbl9NSUNST0NPTToJCS8qIE1p Y3JvY29tcyBpbiBTWCBtb2RlICovCisgIAkgICAgaWYgKGRpYWxrc3ApCisJICAgICAgc3ByaW50 Zih0YmNtZGJ1ZiwiQVBNMTtLTUMlZFwwMTUiLHN0Y2hyKTsJLyogc2FmZSAqLworCSAgICBlbHNl CisJICAgICAgc3ByaW50Zih0YmNtZGJ1ZiwiQVBNMFwwMTUiKTsgLyogc2FmZSAqLworICAJICAg IHR0c2xvdyh0YmNtZGJ1ZiwgTUlDUk9DT00ud2FrZV9yYXRlKTsKKyAgCSAgICBhbGFybSgzKTsK KwkgICAgd2FpdGZvcihtcC0+d2FrZV9wcm9tcHQpOworCSAgICBhbGFybSgwKTsKKwkgICAgYnJl YWs7CisKKwkgIGNhc2Ugbl9URUxFQklUOgkJLyogT2xkIGFuZCBuZXcgVGVsZWJpdHMgKi8KKwkg IGNhc2Ugbl9UQk5FVzoKKwkgICAgaWYgKCFkaWFsa3NwKSB7CisJCXNwcmludGYodGJjbWRidWYs IkFUUzExMT0wXDAxNSIpOyAvKiBzYWZlICovCisJICAgIH0gZWxzZSB7CisJCXN3aXRjaCAocGFy aXR5KSB7CS8qIFMxMTEgdmFsdWUgZGVwZW5kcyBvbiBwYXJpdHkgKi8KKwkJICBjYXNlICdlJzog ciA9IDEyOyBicmVhazsKKwkJICBjYXNlICdtJzogciA9IDEzOyBicmVhazsKKwkJICBjYXNlICdv JzogciA9IDExOyBicmVhazsKKwkJICBjYXNlICdzJzogciA9IDE0OyBicmVhazsKKwkJICBjYXNl IDA6CisJCSAgZGVmYXVsdDogIHIgPSAxMDsgYnJlYWs7CisJCX0KKwkJc3ByaW50Zih0YmNtZGJ1 ZiwiQVRTMTExPSVkIFMxMTI9JWRcMDE1IixyLHN0Y2hyKTsgLyogc2FmZSAqLworCSAgICB9CisJ ICAgIHR0c2xvdyh0YmNtZGJ1Ziwgd3IpOworCisvKiBOb3QgYWxsIFRlbGViaXQgbW9kZWxzIGhh dmUgdGhlIEtlcm1pdCBzcG9vZiwgc28gaWdub3JlIHJlc3BvbnNlLiAqLworCisJICAgIGlmICh4 eF9vaykgewkJLyogR2V0IG1vZGVtJ3MgcmVzcG9uc2UgKi8KKwkJeCA9ICgqeHhfb2spKDUsMSk7 CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIE1JTklESUFMICovCisjZW5kaWYgLyogTk9Y RkVSICovCisKKyAgICAvKiBTcGVha2VyICovCisKKyAgICBpZiAobXltZG10eXAgIT0gbl9HRU5F UklDICYmCisJKG1kbWNhcGFzICYgQ0tEX0FUKSAmJiAoZGlhbHN0YSAhPSBESUFfUEFSVCkgJiYK KwkhZGlhbHNwb24gJiYgIWRpYWxzcG9mZiAmJgorCSFkaWFsdm9sMSAmJiAhZGlhbHZvbDIgJiYh ZGlhbHZvbDMpIHsKKwkvKiBBVCBjb21tYW5kIHNldCBhbmQgY29tbWFuZHMgaGF2ZSBub3QgYmVl biBjdXN0b21pemVkICovCisJLyogc28gY29tYmluZSBzcGVha2VyIGFuZCB2b2x1bWUgY29tbWFu ZHMuICovCisJaWYgKG1kbXNwaykKKwkgIHNwcmludGYobGJ1ZiwiQVRNMUwlZCVjIixtZG12b2ws MTMpOyAvKiBzYWZlICovCisJZWxzZQorCSAgc3ByaW50ZihsYnVmLCJBVE0wJWMiLDEzKTsJLyog c2FmZSAqLworCXR0c2xvdyhsYnVmLHdyKTsJCS8qIFNlbmQgY29tbWFuZCAqLworCWdldG9rKDUs MSk7CQkJLyogR2V0IGJ1dCBpZ25vcmUgcmVzcG9uc2UgKi8KKyAgICB9IGVsc2UgaWYgKGRpYWxz dGEgIT0gRElBX1BBUlQpIHsJLyogQ3VzdG9taXplZCBvciBub3QgQVQgY29tbWFuZHMgKi8KKwl4 ID0gMDsJCQkJLyogRG8gaXQgdGhlIGhhcmQgd2F5ICovCisJaWYgKG1kbXNwaykgeworCSAgICBp ZiAoZGlhbHNwb24pIHsKKwkJaWYgKCpkaWFsc3BvbikgeworCQkgICAgeCA9IDE7CisJCSAgICB0 dHNsb3coZGlhbHNwb24sd3IpOworCQl9CisJICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg aWYgKG1wLT5zcF9vbl9zdHJbMF0pIHsKKwkJICAgIHggPSAxOworCQkgICAgdHRzbG93KG1wLT5z cF9vbl9zdHIsd3IpOworCQl9CisJICAgIH0KKwl9IGVsc2UgeworCSAgICAvKiBzID0gZGlhbHNw b2ZmID8gZGlhbHNwb2ZmIDogbXAtPnNwX29mZl9zdHI7ICovCisJICAgIGlmIChkaWFsc3BvZmYp IHsKKwkJaWYgKCpkaWFsc3BvZmYpIHsKKwkJICAgIHggPSAxOworCQkgICAgdHRzbG93KGRpYWxz cG9mZix3cik7CisJCX0KKwkgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobXAtPnNw X29mZl9zdHJbMF0pIHsKKwkJICAgIHggPSAxOworCQkgICAgdHRzbG93KG1wLT5zcF9vZmZfc3Ry LHdyKTsKKwkJfQorCSAgICB9CisJfQorCWlmICh4KSB7CisJICAgIGlmICh4eF9vaykJCQkvKiBH ZXQgcmVzcG9uc2UgKi8KKwkgICAgICB4ID0gKCp4eF9vaykoNSwxKTsKKwkgICAgaWYgKHggJiYg bWRtc3BrKSB7CQkvKiBHb29kIHJlc3BvbnNlIGFuZCBzcGVha2VyIG9uPyAqLworCQlzd2l0Y2gg KG1kbXZvbCkgewkvKiBZZXMsIHNlbmQgdm9sdW1lIGNvbW1hbmQuICovCisJCSAgY2FzZSAwOgor CQkgIGNhc2UgMToKKwkJICAgIHMgPSBkaWFsdm9sMSA/IGRpYWx2b2wxIDogbXAtPnZvbDFfc3Ry OyBicmVhazsKKwkJICBjYXNlIDI6CisJCSAgICBzID0gZGlhbHZvbDIgPyBkaWFsdm9sMiA6IG1w LT52b2wyX3N0cjsgYnJlYWs7CisJCSAgY2FzZSAzOgorCQkgICAgcyA9IGRpYWx2b2wzID8gZGlh bHZvbDMgOiBtcC0+dm9sM19zdHI7IGJyZWFrOworCQkgIGRlZmF1bHQ6CisJCSAgICBzID0gTlVM TDsKKwkJfQorCQlpZiAocykgaWYgKCpzKSB7CS8qIFNlbmQgdm9sdW1lIGNvbW1hbmQuICovCisJ CSAgICB0dHNsb3cocywgd3IpOworCQkgICAgaWYgKHh4X29rKQkJLyogR2V0IHJlc3BvbnNlIGJ1 dCBpZ25vcmUgaXQgKi8KKwkJICAgICAgKCp4eF9vaykoNSwxKTsKKwkJfQorCSAgICB9CisJfQor ICAgIH0KKworI2lmbmRlZiBDS19BVERUCisgICAgLyogRGlhbGluZyBNZXRob2QgKi8KKworICAg IGlmIChkaWFsbXRoICYmIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsgLyogSWYgZGlhbGluZyBtZXRo b2Qgc3BlY2lmaWVkLi4uICovCisJY2hhciAqcyA9ICIiOwkJCS8qIERvIGl0IGhlcmUuLi4gKi8K KworCWlmIChkaWFsbXRoID09IFhZRE1fVCAmJiBkaWFsdG9uZSkgLyogVG9uZSAqLworCSAgcyA9 IGRpYWx0b25lOworCWVsc2UgaWYgKGRpYWxtdGggPT0gWFlETV9QICYmIGRpYWxwdWxzZSkgLyog UHVsc2UgKi8KKwkgIHMgPSBkaWFscHVsc2U7CisJaWYgKHMpIGlmICgqcykgeworCSAgICB0dHNs b3cocywgd3IpOworCSAgICBpZiAoeHhfb2spCQkJLyogR2V0IG1vZGVtJ3MgcmVzcG9uc2UgKi8K KwkgICAgICAoKnh4X29rKSg1LDEpOwkJLyogKGJ1dCBpZ25vcmUgaXQuLi4pICovCisJfQorICAg IH0KKyNlbmRpZiAvKiBDS19BVERUICovCisKKyAgICBpZiAoZGlhbGlkdCkgewkJCS8qIElnbm9y ZSBkaWFsdG9uZT8gKi8KKwljaGFyICpzID0gIiI7CisJcyA9IGRpYWx4MyA/IGRpYWx4MyA6IG1w LT5pZ25vcmVkdDsKKwlpZiAocykgaWYgKCpzKSB7CisJICAgIHR0c2xvdyhzLCB3cik7CisJICAg IGlmICh4eF9vaykJCQkvKiBHZXQgbW9kZW0ncyByZXNwb25zZSAqLworCSAgICAgICgqeHhfb2sp KDUsMSk7CQkvKiAoYnV0IGlnbm9yZSBpdC4uLikgKi8KKwl9CisgICAgfQorICAgIHsKKwljaGFy ICpzID0gIiI7CQkJLyogTGFzdC1taW51dGUgaW5pdCBzdHJpbmc/ICovCisJcyA9IGRpYWxpbmky ID8gZGlhbGluaTIgOiBtcC0+aW5pMjsKKwlpZiAocykgaWYgKCpzKSB7CisJICAgIHR0c2xvdyhz LCB3cik7CisJICAgIGlmICh4eF9vaykJCQkvKiBHZXQgbW9kZW0ncyByZXNwb25zZSAqLworCSAg ICAgICgqeHhfb2spKDUsMSk7CQkvKiAoYnV0IGlnbm9yZSBpdC4uLikgKi8KKwl9CisgICAgfQor ICAgIGlmIChmdW5jX2NvZGUgPT0gMSkgewkJLyogQU5TV0VSIChub3QgRElBTCkgKi8KKwljaGFy ICpzOworCXMgPSBkaWFsYWFvbiA/IGRpYWxhYW9uIDogbXAtPmFhX29uX3N0cjsKKwlpZiAoIXMp IHMgPSAiIjsKKwlpZiAoKnMpIHsKKwkgICAgLyogSGVyZSB3ZSB3b3VsZCBoYW5kbGUgY2FsbGVy IElEICovCisJICAgIHR0c2xvdyhzLCAoZGlhbHBhY2UgPiAtMSkgPyB3ciA6IG1wLT5kaWFsX3Jh dGUpOworCSAgICBpZiAoeHhfb2spCQkJLyogR2V0IG1vZGVtJ3MgcmVzcG9uc2UgKi8KKwkgICAg ICAoKnh4X29rKSg1LDEpOwkJLyogKGJ1dCBpZ25vcmUgaXQuLi4pICovCisJfSBlbHNlIHsKKwkg ICAgcHJpbnRmKAorIldBUk5JTkcgLSBJIGRvbid0IGtub3cgaG93IHRvIGVuYWJsZSBhdXRvYW5z d2VyIGZvciB0aGlzIG1vZGVtLlxuIgorCQkgICApOworCX0gLyogQW5kIHNraXAgYWxsIHRoZSBw aG9uZS1udW1iZXIgJiBkaWFsaW5nIHN0dWZmLi4uICovCisJYWxhcm0od2FpdGN0KTsJCQkvKiBU aGlzIG11Y2ggdGltZSBhbGxvd2VkLiAqLworCWRlYnVnKEYxMDEsIl9kb2RpYWwgQU5TV0VSIHdh aXRjdCIsIiIsd2FpdGN0KTsKKworICAgIH0gZWxzZSB7CQkJCS8qIERJQUwgKG5vdCBBTlNXRVIp ICovCisKKwlpZiAoZGlhbHN0YSAhPSBESUFfUEFSVCkgewkvKiBMYXN0IGRpYWwgd2FzIG5vdCBw YXJ0aWFsICovCisKKwkgICAgY2hhciAqcyA9ICIiOworI2lmZGVmIENPTU1FTlQKKwkgICAgcyA9 IGRpYWxhYW9mZiA/IGRpYWxhYW9mZiA6IG1wLT5hYV9vZmZfc3RyOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKwkgICAgaWYgKHMpIGlmICgqcykgeworCQl0dHNsb3cocywgKGRpYWxwYWNlID4gLTEp ID8gd3IgOiBtcC0+ZGlhbF9yYXRlKTsKKwkJaWYgKHh4X29rKQkJLyogR2V0IG1vZGVtJ3MgcmVz cG9uc2UgKi8KKwkJICAoKnh4X29rKSg1LDEpOwkvKiAoYnV0IGlnbm9yZSBpdC4uLikgKi8KKwkg ICAgfQorCisJICAgIC8qIFB1dCBtb2RlbSBpbnRvIGRpYWxpbmcgbW9kZSwgaWYgdGhlIG1vZGVt IHJlcXVpcmVzIGl0LiAqLworCisJICAgIGlmIChtcC0+ZG1vZGVfc3RyICYmICoobXAtPmRtb2Rl X3N0cikpIHsKKwkJdHRzbG93KG1wLT5kbW9kZV9zdHIsIChkaWFscGFjZSA+IC0xKSA/IHdyIDog bXAtPmRpYWxfcmF0ZSk7CisJCXNhdmFscm0gPSBzaWduYWwoU0lHQUxSTSxkaWFsdGltZSk7CisJ CWFsYXJtKDEwKTsKKwkJLyogV2FpdCBmb3IgcHJvbXB0LCBpZiBhbnkgZXhwZWN0ZWQgKi8KKwkJ aWYgKG1wLT5kbW9kZV9wcm9tcHQgJiYgKihtcC0+ZG1vZGVfcHJvbXB0KSkgeworCQkgICAgd2Fp dGZvcihtcC0+ZG1vZGVfcHJvbXB0KTsKKwkJICAgIG1zbGVlcCgzMDApOworCQl9CisJCWFsYXJt KDApOwkJLyogVHVybiBvZmYgYWxhcm0gb24gZGlhbGluZyBwcm9tcHRzICovCisJCXNpZ25hbChT SUdBTFJNLHNhdmFscm0pOyAvKiBSZXN0b3JlIGFsYXJtICovCisJICAgIH0KKwl9CisJLyogQVQt Q29tbWFuZC1TZXQgbm9uLUdlbmVyaWMgbW9kZW0gKi8KKwlpZiAobWRtY2FwYXMgJiBDS0RfQVQg JiYgbXltZG10eXAgIT0gbl9HRU5FUklDICYmCisJICAgIGRpYWxzdGEgIT0gRElBX1BBUlQpIHsK KwkgICAgaWYgKG1kbXdhaXQgPiAyNTUpCQkvKiBJZiBsYXJnZXIgdGhhbiBtYXhpbXVtLCAqLwor CSAgICAgIG1kbXdhaXQgPSAyNTU7CQkvKiBtYWtlIGl0IG1heGltdW0uICovCisJICAgIGlmIChk aWFsZXNjID4gMCAmJgkJLyogTW9kZW0gZXNjYXBlIGNoYXJhY3RlciBpcyBzZXQgKi8KKwkJZGlh bG1odSA+IDApIHsJCS8qIEhhbmd1cCBtZXRob2QgaXMgbW9kZW0gY29tbWFuZCAqLworCQlpbnQg eCA9IGRpYWxlc2M7CisJCWlmIChkaWFsZXNjIDwgMCB8fCBkaWFsZXNjID4gMTI3KQorCQkgIHgg PSAxMjg7CisJCXNwcmludGYobGJ1ZiwKKwkJCSJBVFMyPSVkUzc9JWRcMDE1IiwKKwkJCWRpYWxl c2MgPyB4IDogbXAtPmVzY19jaGFyLCBtZG13YWl0KTsgLyogc2FmZSAqLworCSAgICB9IGVsc2UK KwkgICAgICBzcHJpbnRmKGxidWYsIkFUUzc9JWQlYyIsbWRtd2FpdCwxMyk7IC8qIHNhZmUgKi8K KwkgICAgdHRzbG93KGxidWYsd3IpOwkJLyogU2V0IGl0LiAqLworCSAgICBtZG1zdGF0ID0gZ2V0 b2soNSwxKTsJLyogR2V0IHJlc3BvbnNlIGZyb20gbW9kZW0gKi8KKwkgICAgLyogSWYgaXQgZ2V0 cyBhbiBlcnJvciwgZ28gYWhlYWQgYW55d2F5ICovCisJICAgIGRlYnVnKEYxMDEsIl9kb2RpYWwg UzcgbWRtc3RhdCIsIiIsbWRtc3RhdCk7CisJfQorCXR0Zmx1aSgpOwkJCS8qIENsZWFyIG91dCBz dHVmZiBmcm9tIG1vZGVtIHNldHVwICovCisJaW5pdGVkID0gMTsJCQkvKiBSZW1lbWJlciBtb2Rl bSBpcyBpbml0aWFsaXplZCAqLworCisgICAgICBSRURJQUw6CisJaWYgKChpbnQpc3RybGVuKGRj bWQpICsgKGludClzdHJsZW4oeG51bSkgPiBMQlVGTCkKKwkgIGNrc3RybmNweShsYnVmLCJOVU1C RVIgVE9PIExPTkchIixMQlVGTCk7CisJZWxzZQorCSAgc3ByaW50ZihsYnVmLCBkY21kLCB4bnVt KTsJLyogc2FmZSAocHJlY2hlY2tlZCkgKi8KKwlkZWJ1ZyhGMTEwLCJkaWFsaW5nIixsYnVmLDAp OworCS8qIFNlbmQgdGhlIGRpYWxpbmcgc3RyaW5nICovCisJdHRzbG93KGxidWYsZGlhbHBhY2Ug PiAtMSA/IHdyIDogbXAtPmRpYWxfcmF0ZSk7CisKKwlmYWlsX2NvZGUgPSBGX01PREVNOwkJLyog TmV3IGRlZmF1bHQgZmFpbHVyZSBjb2RlIGNoYW5nZXMgKi8KKwlkaWFsX3doYXQgPSBEV19ESUFM OwkJLyogYW5kIG91ciBzdGF0ZSwgdG9vLiAqLworCWlmIChkaWFsZHB5KSB7CQkJLyogSWYgc2hv d2luZyBwcm9ncmVzcyAqLworCSAgICBwID0gY2tfdGltZSgpOwkJLyogZ2V0IGN1cnJlbnQgdGlt ZTsgKi8KKwkgICAgaWYgKCpwKSBwcmludGYoIiBEaWFsaW5nOiAlcy4uLlxuIixwKTsKKyNpZmRl ZiBWTVMKKwkgICAgcHJpbnRmKCIgXG4iKTsKKwkgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYg LyogVk1TICovCisJfQorCWFsYXJtKHdhaXRjdCk7CQkJLyogVGhpcyBtdWNoIHRpbWUgYWxsb3dl ZC4gKi8KKwlkZWJ1ZyhGMTAxLCJfZG9kaWFsIHdhaXRjdCIsIiIsd2FpdGN0KTsKKworI2lmbmRl ZiBNSU5JRElBTAorI2lmZGVmIE9MRE1PREVNUworCXN3aXRjaCAobXltZG10eXApIHsKKwkgIGNh c2Ugbl9SQUNBTDoJCQkvKiBBY2tub3dsZWRnZSBkaWFsaW5nIHN0cmluZyAqLworCSAgICBzbGVl cCgzKTsKKwkgICAgdHRmbHVpKCk7CisJICAgIHR0b2MoJ1wwMTUnKTsKKwkgICAgYnJlYWs7CisJ ICBjYXNlIG5fVkVOVEVMOgorCSAgICB3YWl0Zm9yKCJcMDEyXDAxMiIpOwkvKiBJZ25vcmUgdGhl IGZpcnN0IHR3byBzdHJpbmdzICovCisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgYnJl YWs7CisJfQorI2VuZGlmIC8qIE9MRE1PREVNUyAqLworI2VuZGlmIC8qIE1JTklESUFMICovCisg ICAgfQorCisvKiBDaGVjayBmb3IgY29ubmVjdGlvbiAqLworCisgICAgbWRtc3RhdCA9IDA7CQkJ LyogTm8gc3RhdHVzIHlldCAqLworICAgIGxidWZbMF0gPSBOVUw7CQkJLyogRGVmYXVsdCByZWFz b24gZm9yIGZhaWx1cmUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJkaWFsIGF3YWl0aW5nIHJlc3BvbnNl LCBteW1kbXR5cCIsIiIsbXltZG10eXApOworCisjaWZuZGVmIE5PU1BMCisgICAgbW9kZW1tc2db MF0gPSBOVUw7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB3aGlsZSAobWRtc3RhdCA9PSAwKSB7 CQkvKiBUaWxsIHdlIGdldCBhIHJlc3VsdCBvciB0aW1lIG91dCAqLworCisJaWYgKChtZG1jYXBh cyAmIENLRF9BVCkgJiYgbm9udmVyYmFsKSB7IC8qIEFUIGNvbW1hbmQgc2V0ICovCisJICAgIGdl dGhybigpOwkJCS8qIEluIGRpZ2l0IHJlc3VsdCBtb2RlICovCisJICAgIGlmIChwYXJ0aWFsICYm IGRpYWxzdGEgPT0gRElBX0VSUikgeworCQkvKgorCQkgICBJZiB3ZSBnZXQgYW4gZXJyb3IgaGVy ZSwgdGhlIHBob25lIGlzIHN0aWxsCisJCSAgIG9mZiBob29rIHNvIHdlIGhhdmUgdG8gaGFuZyBp dCB1cC4KKwkJKi8KKwkJZGlhbGh1cCgpOworCQlkaWFsc3RhID0gRElBX0VSUjsJLyogKGJlY2F1 c2UgZGlhbGh1cCgpIGNoYW5nZXMgaXQpICovCisJICAgIH0KKwkgICAgY29udGludWU7CisKKwl9 IGVsc2UgaWYgKG15bWRtdHlwID09IG5fVU5LTk9XTikgeyAvKiBVbmtub3duIG1vZGVtIHR5cGUg Ki8KKwkgICAgaW50IHgsIHkgPSB3YWl0Y3Q7CisJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsJCS8q IEFzc3VtZSBmYWlsdXJlLiAqLworCSAgICB3aGlsZSAoeS0tID4gLTEpIHsKKwkJeCA9IHR0Y2hr KCk7CisJCWlmICh4ID4gMCkgeworCQkgICAgaWYgKHggPiBMQlVGTCkgeCA9IExCVUZMOworCQkg ICAgeCA9IHR0eGluKHgsKENIQVIgKilsYnVmKTsKKwkJICAgIGlmICgoeCA+IDApICYmIGRpYWxk cHkpIGNvbm9sKGxidWYpOworCQl9IGVsc2UgaWYgKG5ldHdvcmsgCisjaWZkZWYgVE5fQ09NUE9S VAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWlzdG5jb21wb3J0KCkKKyNlbmRpZiAv KiBUTl9DT01QT1JUICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB4IDwgMCkgeyAv KiBDb25uZWN0aW9uIGRyb3BwZWQgKi8KKwkJICAgIGluaXRlZCA9IDA7CisjaWZkZWYgTlRTSUcK KwkJICAgIGNrVGhyZWFkRW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisJCSAg ICBkaWFsc3RhID0gRElBX0lPOwkvKiBDYWxsIGl0IGFuIEkvTyBlcnJvciAqLworI2lmZGVmIERZ TkFNSUMKKwkJICAgIGlmIChyYnVmKSBmcmVlKHJidWYpOyByYnVmID0gTlVMTDsKKwkJICAgIGlm IChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVMTDsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisJ CSAgICBTSUdSRVRVUk47CisJCX0KKwkJeCA9IHR0Z21kbSgpOwkJLyogVHJ5IHRvIHJlYWQgbW9k ZW0gc2lnbmFscyAqLworCQlpZiAoeCA8IDApIGJyZWFrOwkvKiBDYW4ndCwgZmFpbC4gKi8KKwkJ aWYgKHggJiBCTV9EQ0QpIHsJLyogR290IHNpZ25hbHMgT0suICBDYXJyaWVyIHByZXNlbnQ/ICov CisJCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOyAvKiBZZXMsIGRvbmUuICovCisJCSAgICBicmVh azsKKwkJfQkJCS8qIE5vLCBrZWVwIHdhaXRpbmcuICovCisJCXNsZWVwKDEpOworCSAgICB9CisJ ICAgIGNvbnRpbnVlOworCX0KKworCWZvciAobiA9IC0xOyBuIDwgTEJVRkwtMTsgKSB7CS8qIEFj Y3VtdWxhdGUgbW9kZW0gcmVzcG9uc2UgKi8KKwkgICAgaW50IHh4OworCSAgICBjMiA9IChjaGFy KSAoeHggPSBkZGluYygwKSk7IC8qIFJlYWQgYSBjaGFyYWN0ZXIsIGJsb2NraW5nICovCisJICAg IGlmICh4eCA8IDEpCQkJLyogSWdub3JlIE5VTHMgYW5kIGVycm9ycyAqLworCSAgICAgIGNvbnRp bnVlOwkJCS8qIChUaW1lb3V0IHdpbGwgaGFuZGxlIGVycm9ycykgKi8KKwkgICAgZWxzZQkJCS8q IFJlYWwgY2hhcmFjdGVyLCBrZWVwIGl0ICovCisJICAgICAgbGJ1ZlsrK25dID0gKGNoYXIpIChj MiAmIDAxNzcpOworCSAgICBkaWFsb2MobGJ1ZltuXSk7CQkvKiBNYXliZSBlY2hvIGl0ICAqLwor CSAgICBpZiAobWRtY2FwYXMgJiBDS0RfVjI1KSB7CS8qIFYuMjViaXMgZGlhbGluZy4uLiAqLwor LyoKKyAgVGhpcyBhc3N1bWVzIHRoYXQgVi4yNWJpcyBpbmRpY2F0aW9ucyBhcmUgYWxsIGF0IGxl YXN0IDMgY2hhcmFjdGVycyBsb25nCisgIGFuZCBhcmUgdGVybWluYXRlZCBieSBlaXRoZXIgQ1JM RiBvciBMRkNSLgorKi8KKwkJaWYgKG15bWRtdHlwID09IG5fQ0NJVFQpIHsKKwkJICAgIGlmIChu IDwgMykgY29udGludWU7CisJCSAgICBpZiAoKGxidWZbbl0gPT0gQ1IpICYmIChsYnVmW24tMV0g PT0gTEYpKSBicmVhazsKKwkJICAgIGlmICgobGJ1ZltuXSA9PSBMRikgJiYgKGxidWZbbi0xXSA9 PSBDUikpIGJyZWFrOworCQl9CisjaWZuZGVmIE1JTklESUFMCisJCWVsc2UgaWYgKG15bWRtdHlw ID09IG5fRElHSVRFTCkgeworCQkgICAgaWYgKCgobGJ1ZltuXSA9PSBDUikgJiYgKGxidWZbbi0x XSA9PSBMRikpIHx8CisJCQkoKGxidWZbbl0gPT0gTEYpICYmIChsYnVmW24tMV0gPT0gQ1IpKSkK KwkJICAgICAgYnJlYWs7CisJCSAgICBlbHNlCisJCSAgICAgIGNvbnRpbnVlOworCQl9CisjZW5k aWYgLyogTUlOSURJQUwgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBBbGwgb3RoZXJzLCBicmVhayBv biBDUiBvciBMRiAqLworCQlpZiAoIGxidWZbbl0gPT0gQ1IgfHwgbGJ1ZltuXSA9PSBMRiApIGJy ZWFrOworCSAgICB9CisJfQorCWxidWZbKytuXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUgcmVzcG9u c2UgZnJvbSBtb2RlbSAqLworCWRlYnVnKEYxMTEsIl9kb2RpYWwgbW9kZW0gcmVzcG9uc2UiLGxi dWYsbik7CisjaWZuZGVmIE5PU1BMCisJY2tzdHJuY3B5KG1vZGVtbXNnLGxidWYsTEJVRkwpOwkv KiBDYWxsIHJlc3VsdCBtZXNzYWdlICovCisJbGJ1Zls3OV0gPSBOVUw7CisJeworCSAgICBpbnQg eDsJCQkvKiBTdHJpcCBqdW5rIGZyb20gZW5kICovCisJICAgIHggPSAoaW50KXN0cmxlbihtb2Rl bW1zZykgLSAxOworCSAgICB3aGlsZSAoeCA+IC0xKSB7CisJCWlmIChtb2RlbW1zZ1t4XSA8IChj aGFyKSAzMykKKwkJICBtb2RlbW1zZ1t4XSA9IE5VTDsKKwkJZWxzZQorCQkgIGJyZWFrOworCQl4 LS07CisJICAgIH0KKwl9CisjZW5kaWYgLyogTk9TUEwgKi8KKwlpZiAobWRtY2FwYXMgJiBDS0Rf QVQpIHsJLyogSGF5ZXMgQVQgY29tbWFuZCBzZXQgKi8KKwkgICAgZ2V0aHJ3KCk7CQkJLyogaW4g d29yZCByZXN1bHQgbW9kZSAqLworCSAgICBpZiAocGFydGlhbCAmJiBkaWFsc3RhID09IERJQV9F UlIpIHsKKwkJZGlhbGh1cCgpOworCQlkaWFsc3RhID0gRElBX0VSUjsJLyogKGJlY2F1c2UgZGlh bGh1cCgpIGNoYW5nZXMgaXQpICovCisJICAgIH0KKwkgICAgY29udGludWU7CisJfSBlbHNlIGlm IChtZG1jYXBhcyAmIENLRF9WMjUpIHsgLyogQ0NJVFQgY29tbWFuZCBzZXQgKi8KKwkgICAgaWYg KGRpZHdlZ2V0KGxidWYsIlZBTCIpKSB7IC8qIERpYWwgY29tbWFuZCBjb25maXJtYXRpb24gKi8K KyNpZm5kZWYgTUlOSURJQUwKKwkJaWYgKG15bWRtdHlwID09IG5fQ0NJVFQpCisjZW5kaWYgLyog TUlOSURJQUwgKi8KKwkJICBjb250aW51ZTsJCS8qIEdvIGJhY2sgYW5kIHJlYWQgbW9yZSAqLwor I2lmbmRlZiBNSU5JRElBTAorLyogRGlnaXRlbCBkb2Vzbid0IGdpdmUgYW4gZXhwbGljaXQgY29u bmVjdCBjb25maXJtYXRpb24gbWVzc2FnZSAqLworCQllbHNlIHsKKwkJICAgIGludCBuOworCQkg ICAgZm9yIChuID0gLTE7IG4gPCBMQlVGTC0xOyApIHsKKwkJCWxidWZbKytuXSA9IGMyID0gKGNo YXIpIChkZGluYygwKSAmIDAxNzcpOworCQkJZGlhbG9jKGxidWZbbl0pOworCQkJaWYgKCgobGJ1 ZltuXSA9PSBDUikgJiYgKGxidWZbbi0xXSA9PSBMRikpIHx8CisJCQkgICAgKChsYnVmW25dID09 IExGKSAmJiAobGJ1ZltuLTFdID09IENSKSkpCisJCQkgIGJyZWFrOworCQkgICAgfQorCQkgICAg bWRtc3RhdCA9IENPTk5FQ1RFRDsgLyogQXNzdW1lIHdlJ3JlIGNvbm5lY3RlZCAqLworCQkgICAg aWYgKGRpYWxkcHkgJiYgY2FycmllciAhPSBDQVJfT0ZGKSB7CisjaWZkZWYgVE5fQ09NUE9SVAor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDAsIlROIENvbSBQb3J0IERDRCB3YWl0Li4uIiwiIiwwKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKChuID0gdHRnbWRtKCkpID49IDApIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobiAmIEJNX0RDRCkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtc2xlZXAoNTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRuY193YWl0KAorCQkJCQkoQ0hBUiAqKSJfZG9kaWFsIHdhaXRpbmcgZm9yIERDRCIs MSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBU Tl9DT01QT1JUICovCisJCQkgIHNsZWVwKDEpOyAJLyogV2FpdCBhIHNlY29uZCAqLworCQkJbiA9 IHR0Z21kbSgpOwkvKiBUcnkgdG8gcmVhZCBtb2RlbSBzaWduYWxzICovCisJCQlpZiAoKG4gPiAt MSkgJiYgKChuICYgQk1fRENEKSA9PSAwKSkKKwkJCSAgcHJpbnRmKCJXQVJOSU5HIC0gbm8gY2Fy cmllclxuIik7CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCisJCS8qIFN0 YW5kYXJkIFYuMjViaXMgc3R1ZmYgKi8KKworCSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYs IkNOWCIpKSB7IC8qIENvbm5lY3RlZCAqLworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9 IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsICJJTlYiKSkgeworCQltZG1zdGF0ID0gRF9GQUlMRUQ7 CS8qIENvbW1hbmQgZXJyb3IgKi8KKwkJZGlhbHN0YSA9IERJQV9FUlI7CisJCWNrc3RybmNweShs YnVmLCJJTlYiLExCVUZMKTsKKworCSAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNGSSIp KSB7IC8qIENhbGwgRmFpbHVyZSAqLworCisJCWlmIChkaWR3ZWdldChsYnVmLCJBQiIpKSB7IC8q IEludGVycHJldCByZWFzb24gY29kZSAqLworCQkgICAgY2tzdHJuY3B5KGxidWYsIkFCOiBUaW1l ZCBvdXQiLExCVUZMKTsKKwkJICAgIGRpYWxzdGEgPSBESUFfVElNTzsKKwkJfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJDQiIpKSB7CisJCSAgICBja3N0cm5jcHkobGJ1ZiwiQ0I6IExvY2FsIERD RSBCdXN5IixMQlVGTCk7CisJCSAgICBkaWFsc3RhID0gRElBX05SRFk7CisJCX0gZWxzZSBpZiAo ZGlkd2VnZXQobGJ1ZiwiRVQiKSkgeworCQkgICAgY2tzdHJuY3B5KGxidWYsIkVUOiBCdXN5IixM QlVGTCk7CisJCSAgICBkaWFsc3RhID0gRElBX0JVU1k7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQo bGJ1ZiwgIk5TIikpIHsKKwkJICAgIGNrc3RybmNweShsYnVmLCJOUzogTnVtYmVyIG5vdCBzdG9y ZWQiLExCVUZMKTsKKwkJICAgIGRpYWxzdGEgPSBESUFfRVJSOworCQl9IGVsc2UgaWYgKGRpZHdl Z2V0KGxidWYsIk5UIikpIHsKKwkJICAgIGNrc3RybmNweShsYnVmLCJOVDogTm8gYW5zd2VyIixM QlVGTCk7CisJCSAgICBkaWFsc3RhID0gRElBX05PQU47CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQo bGJ1ZiwiUlQiKSkgeworCQkgICAgY2tzdHJuY3B5KGxidWYsIlJUOiBSaW5nIHRvbmUiLExCVUZM KTsKKwkJICAgIGRpYWxzdGEgPSBESUFfUklORzsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVm LCJQViIpKSB7CisJCSAgICBja3N0cm5jcHkobGJ1ZiwiUFY6IFBhcmFtZXRlciB2YWx1ZSBlcnJv ciIsTEJVRkwpOworCQkgICAgZGlhbHN0YSA9IERJQV9FUlI7CisJCX0gZWxzZSBpZiAoZGlkd2Vn ZXQobGJ1ZiwiUFMiKSkgeworCQkgICAgY2tzdHJuY3B5KGxidWYsIlBTOiBQYXJhbWV0ZXIgc3lu dGF4IGVycm9yIixMQlVGTCk7CisJCSAgICBkaWFsc3RhID0gRElBX0VSUjsKKwkJfSBlbHNlIGlm IChkaWR3ZWdldChsYnVmLCJNUyIpKSB7CisJCSAgICBja3N0cm5jcHkobGJ1ZiwiTVM6IE1lc3Nh Z2Ugc3ludGF4IGVycm9yIixMQlVGTCk7CisJCSAgICBkaWFsc3RhID0gRElBX0VSUjsKKwkJfSBl bHNlIGlmIChkaWR3ZWdldChsYnVmLCJDVSIpKSB7CisJCSAgICBja3N0cm5jcHkobGJ1ZiwiQ1U6 IENvbW1hbmQgdW5rbm93biIsTEJVRkwpOworCQkgICAgZGlhbHN0YSA9IERJQV9FUlI7CisJCX0g ZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRkMiKSkgeworCQkgICAgY2tzdHJuY3B5KGxidWYsIkZD OiBGb3JiaWRkZW4gY2FsbCIsTEJVRkwpOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0FDOworCQl9 CisJCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJJ TkMiKSkgeyAvKiBJbmNvbWluZyBDYWxsICovCisJCWNrc3RybmNweShsYnVmLCJJTkM6IEluY29t aW5nIGNhbGwiLExCVUZMKTsKKwkJZGlhbHN0YSA9IERJQV9SSU5HOworCQltZG1zdGF0ID0gRF9G QUlMRUQ7CisJICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRExDIikpIHsgLyogRGVsYXll ZCBDYWxsICovCisJCWNrc3RybmNweShsYnVmLCJETEM6IERlbGF5ZWQgY2FsbCIsTEJVRkwpOwor CQlkaWFsc3RhID0gRElBX05PQU47CisJCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkgICAgfSBlbHNl CQkJLyogUmVzcG9uc2Ugd2FzIHByb2JhYmx5IGFuIGVjaG8uICovCisjaWZuZGVmIE1JTklESUFM CisJICAgICAgaWYgKG15bWRtdHlwID09IG5fQ0NJVFQpCisjZW5kaWYgLyogTUlOSURJQUwgKi8K KwkJY29udGludWU7CisjaWZuZGVmIE1JTklESUFMCisJICAgICAgZWxzZQkJCS8qIERpZ2l0ZWw6 IElmIG5vIGVycm9yLCBjb25uZWN0LiAqLworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworI2VuZGlm IC8qIE1JTklESUFMICovCisJICAgIGJyZWFrOworCisJfSBlbHNlIGlmIChuKSB7CQkJLyogTm9u LUhheWVzLWNvbXBhdGlibGVzLi4uICovCisJICAgIHN3aXRjaCAobXltZG10eXApIHsKKyNpZm5k ZWYgTUlOSURJQUwKKwkgICAgICBjYXNlIG5fQVRUTU9ERU06CisJCS8qIENhcmVmdWwgLSAiQ29u bmVjdGVkIiAvICJOb3QgQ29ubmVjdGVkIiAqLworCQlpZiAoZGlkd2VnZXQobGJ1ZiwiQnVzeSIp KSB7CisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX0JVU1k7 CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTm90IGNvbm5lY3RlZCIpIHx8CisJCQkgICBk aWR3ZWdldChsYnVmLCJOb3QgQ29ubmVjdGVkIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxF RDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9DQTsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVm LCJObyBkaWFsIHRvbmUiKSB8fAorCQkJICAgZGlkd2VnZXQobGJ1ZiwiTm8gRGlhbCBUb25lIikp IHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9EVDsK KwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJObyBhbnN3ZXIiKSB8fAorCQkJICAgZGlkd2Vn ZXQobGJ1ZiwiTm8gQW5zd2VyIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAg IGRpYWxzdGEgPSBESUFfTk9BTjsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJBbnN3ZXJl ZCIpIHx8CisJCQkgICBkaWR3ZWdldChsYnVmLCJDb25uZWN0ZWQiKSkgeworCQkgICAgbWRtc3Rh dCA9IENPTk5FQ1RFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfT0s7CisJCX0KKwkJYnJlYWs7CisK KwkgICAgICBjYXNlIG5fQVRUSVNOOgorCQlpZiAoZGlkd2VnZXQobGJ1ZiwiQU5TV0VSRUQiKSkg eworCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfT0s7CisJ CX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQlVTWSIpKSB7CisJCSAgICBtZG1zdGF0ID0gRF9G QUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX0JVU1k7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQo bGJ1ZiwiRElTQ09OTkVDVCIpKSB7CisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBk aWFsc3RhID0gRElBX0RJU0M7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gQU5TV0VS IikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9B TjsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJXUk9ORyBBRERSRVNTIikpIHsKKwkJICAg IG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9BQzsKKwkJfQorCQli cmVhazsKKworCSAgICAgIGNhc2Ugbl9BVFREVERNOgorCQlpZiAoZGlkd2VnZXQobGJ1ZiwiQU5T V0VSRUQiKSkgeworCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkJfSBlbHNlIGlmIChkaWR3 ZWdldChsYnVmLCJCVVNZIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRp YWxzdGEgPSBESUFfQlVTWTsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJDSEVDSyBPUFRJ T05TIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFf RVJSOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRJU0NPTk5FQ1RFRCIpKSB7CisJCSAg ICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX0RJU0M7CisJCX0gZWxz ZSBpZiAoZGlkd2VnZXQobGJ1ZiwiREVOSUVEIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxF RDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9BQzsKKwkJfQorI2lmZGVmIERFQlVHCisjaWZkZWYg QVRUNjMwMAorCQkvKiBIb3JyaWJsZSBoYWNrIGxvc3QgaW4gaGlzdG9yeS4gKi8KKwkJZWxzZSBp ZiAoZGVibG9nICYmIGRpZHdlZ2V0KGxidWYsIn5+IikpCisJCSAgbWRtc3RhdCA9IENPTk5FQ1RF RDsKKyNlbmRpZiAvKiBBVFQ2MzAwICovCisjZW5kaWYgLyogREVCVUcgKi8KKwkJYnJlYWs7CisK KyNpZmRlZiBPTERNT0RFTVMKKwkgICAgICBjYXNlIG5fQ0VSTUVURUs6CisJCWlmIChkaWR3ZWdl dChsYnVmLCJcMDE2QSIpKSB7CisJCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCQkgICAgdHRz bG93KCJcMDE2VSAxXDAxNSIsMjAwKTsgLyogTWFrZSB0cmFuc3BhcmVudCovCisJCX0KKwkJYnJl YWs7CisKKwkgICAgICBjYXNlIG5fREYwMzoKKwkJLyogQmVjYXVzZSByZXNwb25zZSBsYWNrcyBD UiBvciBOTCAuIC4gLiAqLworCQljID0gKGNoYXIpIChkZGluYygwKSAmIDAxNzcpOworCQlkaWFs b2MoYyk7CisJCWRlYnVnKEYwMDAsImRpYWwgZGYwMyBnb3QiLCIiLGMpOworCQlpZiAoIGMgPT0g J0EnICkgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkJaWYgKCBjID09ICdCJyApIG1kbXN0YXQgPSBE X0ZBSUxFRDsKKwkJYnJlYWs7CisKKwkgICAgICBjYXNlIG5fREYxMDA6CSAgICAgLyogREYxMDAg aGFzIHNob3J0IHJlc3BvbnNlIGNvZGVzICovCisJCWlmIChzdHJjbXAobGJ1ZiwiQSIpID09IDAp IHsKKwkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7IC8qIEF0dGFjaGVkICovCisJCSAgICBkaWFs c3RhID0gRElBX09LOworCQl9IGVsc2UgaWYgKHN0cmNtcChsYnVmLCJOIikgPT0gMCkgeworCQkg ICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0FOOyAvKiBObyBh bnN3ZXIgb3Igbm8gZGlhbHRvbmUgKi8KKwkJfSBlbHNlIGlmIChzdHJjbXAobGJ1ZiwiRSIpID09 IDAgfHwgLyogRXJyb3IgKi8KKwkJCSAgIHN0cmNtcChsYnVmLCJSIikgPT0gMCkgeyAvKiAiUmVh ZHkiICg/KSAqLworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJ QV9FUlI7CS8qIENvbW1hbmQgZXJyb3IgKi8KKwkJfQorCQkvKiBvdGhlcndpc2UgZmFsbCB0aHJ1 Li4uICovCisKKwkgICAgICBjYXNlIG5fREYyMDA6CisJCWlmIChkaWR3ZWdldChsYnVmLCJBdHRh Y2hlZCIpKSB7CisJCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCQkgICAgZGlhbHN0YSA9IERJ QV9PSzsKKwkJICAgIC8qCisJCSAgICAgKiBUaGUgREYxMDAgd2lsbCByZXNwb25kIHdpdGggIkF0 dGFjaGVkIiBldmVuIGlmIERUUgorCQkgICAgICogYW5kL29yIGNhcnJpZXIgYXJlIG5vdCBwcmVz ZW50LglBbm90aGVyIHJlYXNvbiB0bworCQkgICAgICogKGFsc28pIHdhaXQgZm9yIGNhcnJpZXI/ CisJCSAgICAgKi8KKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJCdXN5IikpIHsKKwkJICAg IG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKKwkJfSBlbHNl IGlmIChkaWR3ZWdldChsYnVmLCJEaXNjb25uZWN0ZWQiKSkgeworCQkgICAgbWRtc3RhdCA9IERf RkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9ESVNDOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0 KGxidWYsIkVycm9yIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxz dGEgPSBESUFfRVJSOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5vIGFuc3dlciIpKSB7 CisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX05PQU47CisJ CX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTm8gZGlhbCB0b25lIikpIHsKKwkJICAgIG1kbXN0 YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9EVDsKKwkJfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJTcGVlZDopIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJ ICAgIGRpYWxzdGEgPSBESUFfRVJSOworCQl9CisJCS8qCisJCSAqIEl0IGFwcGVhcnMgdGhhdCB0 aGUgIlNwZWVkOi4uLiIgcmVzcG9uc2UgY29tZXMgYWZ0ZXIgYW4KKwkJICogIkF0dGFjaGVkIiBy ZXNwb25zZSwgc28gdGhpcyBpcyBuZXZlciBzZWVuLiAgSE9XRVZFUiwKKwkJICogaXQgd291bGQg YmUgdmVyeSBoYW5keSB0byBkZXRlY3QgdGhpcyBhbmQgdGVtcG9yYXJpbHkKKwkJICogcmVzZXQg dGhlIHNwZWVkLCBzaW5jZSBpdCdzIGEgbnVpc2FuY2Ugb3RoZXJ3aXNlLgorCQkgKiBJZiB3ZSB3 YWl0IGZvciBzb21lIG1vcmUgaW5wdXQgZnJvbSB0aGUgbW9kZW0sIGhvdyBkbworCQkgKiB3ZSBr bm93IGlmIGl0J3MgZnJvbSB0aGUgcmVtb3RlIGhvc3Qgb3IgdGhlIG1vZGVtPworCQkgKiBDYXJy aWVyIHJlcG9ydGVkbHkgZG9lc24ndCBnZXQgc2V0IHVudGlsIGFmdGVyIHRoZQorCQkgKiAiU3Bl ZWQ6Li4uIiByZXNwb25zZSAoaWYgYW55KSBpcyBzZW50LiAgQW5vdGhlciByZWFzb24KKwkJICog dG8gKGFsc28pIHdhaXQgZm9yIGNhcnJpZXIuCisJCSAqLworCQlicmVhazsKKworCSAgICAgIGNh c2Ugbl9HREM6CisJCWlmIChkaWR3ZWdldChsYnVmLCJPTiBMSU5FIikpCisJCSAgbWRtc3RhdCA9 IENPTk5FQ1RFRDsKKwkJZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gQ09OTkVDVCIpKQorCQkg IG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJYnJlYWs7CisKKwkgICAgICBjYXNlIG5fUEVOUklMOgor CQlpZiAoZGlkd2VnZXQobGJ1ZiwiT0siKSkgeworCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsK KwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJCVVNZIikpIHsKKwkJICAgIG1kbXN0YXQgPSBE X0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKKwkJICAgIH0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiTk8gUklORyIpKSB7CisJCQltZG1zdGF0ID0gRF9GQUlMRUQ7CisJCQlkaWFs c3RhID0gRElBX05PQ0E7CisJCSAgICB9CisJCWJyZWFrOworCisJICAgICAgY2FzZSBuX1JBQ0FM OgorCQlpZiAoZGlkd2VnZXQobGJ1ZiwiT04gTElORSIpKQorCQkgIG1kbXN0YXQgPSBDT05ORUNU RUQ7CisJCWVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkZBSUxFRCBDQUxMIikpCisJCSAgbWRtc3Rh dCA9IERfRkFJTEVEOworCQlicmVhazsKKyNlbmRpZiAvKiBPTERNT0RFTVMgKi8KKworCSAgICAg IGNhc2Ugbl9ST0xNOgorCQlpZiAoZGlkd2VnZXQobGJ1ZiwiQ0FMTElORyIpKQorCQkgIG1kbXN0 YXQgPSAwOworCQllbHNlIGlmIChkaWR3ZWdldChsYnVmLCJDT01QTEVURSIpKQorCQkgIG1kbXN0 YXQgPSBDT05ORUNURUQ7CisJCWVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkZBSUxFRCIpIHx8CisJ CQkgZGlkd2VnZXQobGJ1ZiwiQUJBTkRPTkRFRCIpKSB7CisJCSAgICBtZG1zdGF0ID0gRF9GQUlM RUQ7CisJCSAgICBkaWFsc3RhID0gRElBX05PQ0E7CisJCX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1 ZiwiTk9UIEFWQUlMQUJMRSIpIHx8CisJCQkgICBkaWR3ZWdldChsYnVmLCJMQUNLUyBQRVJNSVNT SU9OIikgfHwKKwkJCSAgIGRpZHdlZ2V0KGxidWYsIk5PVCBBIERBVEFMSU5FIikgfHwKKwkJCSAg IGRpZHdlZ2V0KGxidWYsIklOVkFMSUQgREFUQSBMSU5FIE5VTUJFUiIpIHx8CisJCQkgICBkaWR3 ZWdldChsYnVmLCJJTlZBTElEIEdST1VQIE5BTUUiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJ TEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9OT0FDOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxi dWYsIkJVU1kiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9 IERJQV9CVVNZOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkRPRVMgTk9UIEFOU1dFUiIp KSB7CisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX05PQU47 CisJCX0KKwkJYnJlYWs7CisKKyNpZmRlZiBPTERNT0RFTVMKKwkgICAgICBjYXNlIG5fVkVOVEVM OgorCQlpZiAoZGlkd2VnZXQobGJ1ZiwiT05MSU5FISIpIHx8CisJCSAgICBkaWR3ZWdldChsYnVm LCJPbmxpbmUhIikpIHsKKwkJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJCX0gZWxzZSBpZiAo ZGlkd2VnZXQobGJ1ZiwiQlVTWSIpIHx8CisJCQkgICBkaWR3ZWdldChsYnVmLCJCdXN5IikpIHsK KwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKKwkJ fSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJERUFEIFBIT05FIikpIHsKKwkJICAgIG1kbXN0YXQg PSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfRElTQzsKKwkJfQorCQlicmVhazsKKwor CSAgICAgIGNhc2Ugbl9DT05DT1JEOgorCQlpZiAoZGlkd2VnZXQobGJ1ZiwiSU5JVElBVElORyIp KQorCQkgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJCWVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkJV U1kiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkgICAgZGlhbHN0YSA9IERJQV9C VVNZOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNBTEwgRkFJTEVEIikpIHsKKwkJICAg IG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9DQTsKKwkJfQorCQli cmVhazsKKyNlbmRpZiAvKiBPTERNT0RFTVMgKi8KKworCSAgICAgIGNhc2Ugbl9NSUNST0NPTToK KwkJLyogIlJJTkdCQUNLIiBtZWFucyBwaG9uZSBsaW5lIHJpbmdpbmcsIGNvbnRpbnVlICovCisJ CWlmIChkaWR3ZWdldChsYnVmLCJOTyBDT05ORUNUIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZB SUxFRDsKKwkJICAgIGRpYWxzdGEgPSBESUFfTk9DQTsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChs YnVmLCJCVVNZIikpIHsKKwkJICAgIG1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJICAgIGRpYWxzdGEg PSBESUFfQlVTWTsKKwkJfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTyBESUFMVE9ORSIpKSB7 CisJCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX05PRFQ7CisJ CX0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiQ09NTUFORCBFUlJPUiIpKSB7CisJCSAgICBtZG1z dGF0ID0gRF9GQUlMRUQ7CisJCSAgICBkaWFsc3RhID0gRElBX0VSUjsKKwkJfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJJTiBVU0UiKSkgeworCQkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCQkg ICAgZGlhbHN0YSA9IERJQV9OT0FDOworCQl9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkNPTk5F Q1QiKSkgeworCQkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkJICAgIC8qIHRyYWlsaW5nIHNw ZWVkIGlnbm9yZWQgKi8KKwkJfQorCQlicmVhazsKKworI2VuZGlmIC8qIE1JTklESUFMICovCisJ ICAgICAgZGVmYXVsdDoKKwkJcHJpbnRmKAorCQkgICAgIlBST0dSQU0gRVJST1IgLSBObyByZXNw b25zZSBoYW5kbGVyIGZvciBtb2RlbSB0eXBlICVkXG4iLAorCQkgICAgICAgbXltZG10eXApOwor CQltZG1zdGF0ID0gRF9GQUlMRUQ7CisJCWRpYWxzdGEgPSBESUFfRVJSOworCSAgICB9CisJfQor ICAgIH0gLyogd2hpbGUgKG1kbXN0YXQgPT0gMCkgKi8KKworICAgIGRlYnVnKEYxMDEsIl9kb2Rp YWwgYWxhcm0gb2ZmIiwiIix4KTsKKyAgICBhbGFybSgwKTsKKyAgICBpZiAobWRtc3RhdCA9PSBE X0ZBSUxFRCkgewkJLyogRmFpbHVyZSBkZXRlY3RlZCBieSBtb2RlbSAgKi8KKyAgICAgICAgZGlh bGZhaWwoRl9NT0RFTSk7CisjaWZkZWYgTlRTSUcKKwlja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsK KyNlbmRpZiAvKiBOVFNJRyAqLworICAgICAgICBTSUdSRVRVUk47CisgICAgfSBlbHNlIGlmICht ZG1zdGF0ID09IERfUEFSVElBTCApCXsgLyogUGFydGlhbCBkaWFsIGNvbW1hbmQgT0sgKi8KKwlt c2xlZXAoNTAwKTsKKwlkZWJ1ZyhGMTAwLCJkaWFsIHBhcnRpYWwiLCIiLDApOworICAgIH0gZWxz ZSB7CQkJCS8qIENhbGwgd2FzIGNvbXBsZXRlZCAqLworCWludCB4OworCW1zbGVlcCg3MDApOwkJ CS8qIEluIGNhc2UgbW9kZW0gc2lnbmFscyBibGluayAgKi8KKwlkZWJ1ZyhGMTAwLCJkaWFsIHN1 Y2NlZWRlZCIsIiIsMCk7CisJaWYgKAorI2lmbmRlZiBNSU5JRElBTAorCSAgICBteW1kbXR5cCAh PSBuX1JPTE0JCS8qIFJvbG0gaGFzIHdlaXJkIG1vZGVtIHNpZ25hbGluZyAqLworI2Vsc2UKKwkg ICAgMQorI2VuZGlmIC8qIE1JTklESUFMICovCisJICAgICkgeworCSAgICBhbGFybSgzKTsJCQkv KiBJbiBjYXNlIHR0cGt0KCkgZ2V0cyBzdHVjay4uLiAqLworCSAgICB0dHBrdChzcGVlZCxGTE9f RElBWCxwYXJpdHkpOyAvKiBDYW5jZWwgZGlhbGluZyBzdGF0ZSBpb2N0bCAqLworICAgICAgICAg ICAgYWxhcm0oMCk7CisJfQorLyoKKyAgSW4gY2FzZSBDRCB3ZW50IG9mZiBpbiB0aGUgaW50ZXJ2 YWwgYmV0d2VlbiBjYWxsIGNvbXBsZXRpb24gYW5kIHJldHVybgorICBmcm9tIHR0cGt0KCkuLi4K KyovCisJaWYgKGNhcnJpZXIgIT0gQ0FSX09GRikgeworICAgICAgICAgICAgaWYgKCh4ID0gdHRn bWRtKCkpID49IDApIHsKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgICAgICAgICAgaWYgKGlz dG5jb21wb3J0KCkgJiYgISh4ICYgQk1fRENEKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQg aTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAg ICAgICAgICAgICAgICAgICAgbXNsZWVwKDUwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0 bmNfd2FpdCgoQ0hBUiAqKSJfZG9kaWFsIHdhaXRpbmcgZm9yIERDRCIsMSk7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKHggPSB0dGdtZG0oKSkgPj0gMCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgoeCAmIEJNX0RDRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAg ICAgICAgICAgICBpZiAoISh4ICYgQk1fRENEKSkKKwkJICBwcmludGYoIldBUk5JTkc6IENhcnJp ZXIgc2VlbXMgdG8gaGF2ZSBkcm9wcGVkLi4uXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KKyAgICBkcmVzZXQoKTsJCQkJLyogUmVzZXQgYWxhcm1zIGFuZCBzaWduYWxzLiAq LworICAgIGlmICghcXVpZXQgJiYgIWJhY2tncmQpIHsKKwlpZiAoZGlhbGRweSAmJiAocCA9IGNr X3RpbWUoKSkpIHsgLyogSWYgRElBTCBESVNQTEFZIE9OLCAqLworCSAgICBwcmludGYoIiAlc2Fs bCBjb21wbGV0ZTogJXMuXG4iLCAvKiBpbmNsdWRlIHRpbWVzdGFtcC4gICovCisJCSAgIChtZG1z dGF0ID09IERfUEFSVElBTCkgPworCQkgICAiUGFydGlhbCBjIiA6CisJCSAgICJDIiwKKwkJICAg cCApOworCX0gZWxzZSBpZiAobW9kZW1tc2dbMF0pIHsKKwkgICAgcHJpbnRmICgiICVzYWxsIGNv bXBsZXRlOiBcIiVzXCIuXG4iLAorCQkgICAgKG1kbXN0YXQgPT0gRF9QQVJUSUFMKSA/ICJQYXJ0 aWFsIGMiIDogIkMiLAorCQkgICAgKGNoYXIgKiltb2RlbW1zZworCQkgICAgKTsKKwl9IGVsc2Ug eworCSAgICBwcmludGYgKCIgJXNhbGwgY29tcGxldGUuXG4iLAorCQkgICAgKG1kbXN0YXQgPT0g RF9QQVJUSUFMKSA/CisJCSAgICAiUGFydGlhbCBjIiA6CisJCSAgICAiQyIKKwkJICAgICk7CisJ fQorICAgIH0KKyNpZmRlZiBDS0xPR0RJQUwKKyAgICBkb2xvZ2RpYWwodGVsbmJyKTsKKyNlbmRp ZiAvKiBDS0xPR0RJQUwgKi8KKworI2lmZGVmIERZTkFNSUMKKyAgICBpZiAocmJ1ZikgZnJlZShy YnVmKTsgcmJ1ZiA9IE5VTEw7CisgICAgaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYgPSBOVUxM OworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyAgICBkaWFsc3RhID0gKG1kbXN0YXQgPT0gRF9QQVJU SUFMKSA/IERJQV9QQVJUIDogRElBX09LOworI2lmZGVmIE5UU0lHCisgICAgY2tUaHJlYWRFbmQo dGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICBTSUdSRVRVUk47Cit9CisKK3N0 YXRpYyBTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworZmFpbGRpYWwodm9pZCAqIHRocmVhZGluZm8p CisjZWxzZSAvKiBOb3QgQ0tfQU5TSUMgKi8KK2ZhaWxkaWFsKHRocmVhZGluZm8pIFZPSUQgKiB0 aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBmYWlsZGlhbCAqLyB7CisgICAg ZGVidWcoRjEwMCwibG9uZ2ptcCByZXR1cm5zIHRvIGRpYWwgcm91dGluZSIsIiIsMCk7CisgICAg ZGlhbGZhaWwoZmFpbF9jb2RlKTsKKyAgICBTSUdSRVRVUk47Cit9CisKKy8qCisgIG5iciA9IG51 bWJlciB0byBkaWFsIChzdHJpbmcpCisgIHgxICA9IFJldHJ5IGNvdW50ZXIKKyAgeDIgID0gTnVt YmVyIGNvdW50ZXIKKyAgZmMgID0gRnVuY3Rpb24gY29kZToKKyAgICAgICAgMCA9PSBESUFMCisg ICAgICAgIDEgPT0gQU5TV0VSCisgICAgICAgIDIgPT0gSU5JVC9DT05GSUcKKyAgICAgICAgMyA9 PSBQQVJUSUFMIERJQUwKKyovCisKK2ludAorI2lmZGVmIE9MRF9ESUFMCitja2RpYWwobmJyKSBj aGFyICpuYnI7CisjZWxzZQorY2tkaWFsKG5iciwgeDEsIHgyLCBmYywgcmVkaWFsKSBjaGFyICpu YnI7IGludCB4MSwgeDIsIGZjLCByZWRpYWw7CisjZW5kaWYgLyogT0xEX0RJQUwgKi8KKy8qIGNr ZGlhbCAqLyB7CisjZGVmaW5lIEVSTVNHTCA1MAorICAgIGNoYXIgZXJybXNnW0VSTVNHTF0sICpl cnA7CQkvKiBGb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICBpbnQgbiA9IEZfVElNRTsKKyAgICBj aGFyICpzOworICAgIGxvbmcgc3BkbWF4OworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQgdGVy bV9pbzsKKyAgICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lvOworI2VuZGlmIC8qIE9TMiAqLwor CisgICAgY2hhciAqbW1zZyA9ICJTb3JyeSwgRElBTCBtZW1vcnkgYnVmZmVyIGNhbid0IGJlIGFs bG9jYXRlZFxuIjsKKyAgICAvKgorICAgICAgQSBESUFMIGNvbW1hbmQgaW1wbGllcyBhIFNFVCBN T0RFTSBUWVBFIGNvbW1hbmQgYW5kIHRoZXJlZm9yZSBlbmFibGVzCisgICAgICBoYW5naW5nIHVw IGJ5IG1vZGVtIGNvbW1hbmRzIHJhdGhlciB0aGFuIGRyb3BwaW5nIERUUi4KKyAgICAqLworICAg IG1kbXNldCA9IDE7CQkJCS8qIFNlZSBtZG1odXAoKSAqLworCisgICAgcGFydGlhbCA9IDA7Cisg ICAgaWYgKGZjID09IDMpIHsJCQkvKiBQYXJ0aWFsIGRpYWwgcmVxdWVzdGVkICovCisJcGFydGlh bCA9IDE7CQkJLyogU2V0IGZsYWcgKi8KKwlmYyA9IDA7CQkJCS8qIFRyZWF0IGxpa2UgcmVndWxh ciBkaWFsaW5nICovCisgICAgfQorICAgIGZ1bmNfY29kZSA9IGZjOwkJCS8qIE1ha2UgZ2xvYmFs IHRvIHRoaXMgbW9kdWxlICovCisgICAgdGVsbmJyID0gbmJyOworICAgIHhyZWRpYWwgPSByZWRp YWw7CisgICAgZGVidWcoRjExMSwiY2tkaWFsIGVudHJ5IHBhcnRpYWwiLGNraXRvYShmYykscGFy dGlhbCk7CisgICAgZGVidWcoRjExMSwiY2tkaWFsIGVudHJ5IG51bWJlciIsbmJyLHJlZGlhbCk7 CisKKyAgICBpZiAoZmMgPT0gMSkgewkJCS8qIEFOU1dFUiBjb21tYW5kPyAqLworCS8qIFJlc2V0 IGNhbGxlciBJRCBzdHJpbmdzICovCisJaWYgKGNhbGxpZF9kYXRlKSBtYWtlc3RyKCZjYWxsaWRf ZGF0ZSxOVUxMKTsKKwlpZiAoY2FsbGlkX3RpbWUpIG1ha2VzdHIoJmNhbGxpZF90aW1lLE5VTEwp OworCWlmIChjYWxsaWRfbmFtZSkgbWFrZXN0cigmY2FsbGlkX25hbWUsTlVMTCk7CisJaWYgKGNh bGxpZF9ubWJyKSBtYWtlc3RyKCZjYWxsaWRfbm1icixOVUxMKTsKKwlpZiAoY2FsbGlkX21lc2cp IG1ha2VzdHIoJmNhbGxpZF9tZXNnLE5VTEwpOworICAgIH0KKworI2lmZGVmIENLX1RBUElfWAor ICAgIGlmICh0dHRhcGkgJiYgdGFwaXBhc3MpIHsKKwlpZiAobW9kZW1wW25fVEFQSV0gPSBja3Rh cGlHZXRNb2RlbUluZigpKSB7CisJICAgIG15bWRtdHlwID0gbl9UQVBJOworCX0gZWxzZSB7CisJ ICAgIG15bWRtdHlwID0gbWRtdHlwOworCSAgICBtb2RlbXBbbl9UQVBJXSA9ICZHRU5FUklDOwor CX0KKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19UQVBJICovCisgICAgbXltZG10eXAgPSBtZG10 eXA7CisgICAgaWYgKG15bWRtdHlwIDwgMCkgewkJCS8qIFdob2EsIG5ldHdvcmsgZGlhbGluZy4u LiAqLworCWlmIChtZG1zYXYgPiAtMSkKKwkgIG15bWRtdHlwID0gbWRtc2F2OworICAgIH0KKyAg ICBpZiAobXltZG10eXAgPCAwKSB7CisJcHJpbnRmKCJJbnZhbGlkIG1vZGVtIHR5cGUgJWQgLSBp bnRlcm5hbCBlcnJvci5cbiIsbXltZG10eXApOworCWRpYWxzdGEgPSBESUFfTk9NTzsKKwlyZXR1 cm4oMCk7CisgICAgfQorICAgIGRpYWxfd2hhdCA9IERXX05PVEhJTkc7CQkvKiBEb2luZyBub3Ro aW5nIGF0IGZpcnN0LiAqLworICAgIG5vbnZlcmJhbCA9IDA7CisKKy8qIFRoZXNlIGFyZSBPTkxZ IGZvciB0aGUgcHVycG9zZSBvZiBpbnRlcnByZXRpbmcgbnVtZXJpYyByZXN1bHQgY29kZXMuICov CisKKyAgICBpc19tb3Rvcm9sYSA9CisjaWZkZWYgTUlOSURJQUwKKyAgICAgIDAKKyNlbHNlCisg ICAgICBteW1kbXR5cCA9PSBuX1NVUFJBIHx8IG15bWRtdHlwID09IG5fU1VQUkFTT047CisjZW5k aWYgLyogTUlOSURJQUwgKi8KKwk7CisKKyAgICBpc19tb3Rvcm9sYSA9CisjaWZkZWYgTUlOSURJ QUwKKyAgICAgIDAKKyNlbHNlCisgICAgICBteW1kbXR5cCA9PSBuX01PVE9ST0xBIHx8IG15bWRt dHlwID09IG5fTU9OVEFOQTsKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCTsKKworICAgIGlzX3Jv Y2t3ZWxsID0KKyNpZmRlZiBNSU5JRElBTAorICAgICAgMAorI2Vsc2UKKyAgICAgIG15bWRtdHlw ID09IG5fUldWMzIgfHwgbXltZG10eXAgPT0gbl9SV1YzMkIgfHwKKwlteW1kbXR5cCA9PSBuX1JX VjM0IHx8IG15bWRtdHlwID09IG5fUldWOTAgfHwKKwkgIG15bWRtdHlwID09IG5fQk9DQSB8fCBt eW1kbXR5cCA9PSBuX1RFTEVQQVRIIHx8CisJICAgIG15bWRtdHlwID09IG5fQ0FSRElOQUwgfHwg bXltZG10eXAgPT0gbl9CRVNUREFUQSB8fAorCSAgICAgIG15bWRtdHlwID09IG5fQ09ORVhBTlQg fHwgbXltZG10eXAgPT0gbl9QQ1RFTAorI2VuZGlmIC8qIE1JTklESUFMICovCisJOworCisgICAg aXNfaGF5ZXNoaXNwZCA9CisjaWZkZWYgTUlOSURJQUwKKyAgICAgIDAKKyNlbHNlCisgICAgICBt eW1kbXR5cCA9PSBuX0hfVUxUUkEgfHwgbXltZG10eXAgPT0gbl9IX0FDQ1VSQSB8fCBuX1BQSQor I2VuZGlmIC8qIE1JTklESUFMICovCisJOworCisgICAgaXNfc3VwcmEgPQorI2lmZGVmIE1JTklE SUFMCisgICAgICAwCisjZWxzZQorICAgICAgbXltZG10eXAgPT0gbl9TVVBSQSB8fCBteW1kbXR5 cCA9PSBuX1NVUFJBWCB8fCBuX1NVUFJBU09OCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKwk7CisK KyAgICBtcCA9IG1vZGVtcFtteW1kbXR5cF07CQkvKiBTZXQgcG9pbnRlciB0byBtb2RlbSBpbmZv ICovCisgICAgaWYgKCFtcCkgeworCXByaW50ZigiU29ycnksIGhhbmRsZXIgZm9yIHRoaXMgbW9k ZW0gdHlwZSBub3QgeWV0IGZpbGxlZCBpbi5cbiIpOworCWRpYWxzdGEgPSBESUFfTk9NTzsKKwly ZXR1cm4gMDsKKyAgICB9CisgICAgZGVidWcoRjExMCwiZGlhbCBudW1iZXIiLHRlbG5iciwwKTsK KyNpZmRlZiBDT01NRU5UCisgICAgZGVidWcoRjExMCwiZGlhbCBwcmVmaXgiLChkaWFsbnByID8g ZGlhbG5wciA6ICIiKSwgMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgRFlOQU1J QworICAgICpsYnVmID0gTlVMOworICAgIGRlYnVnKEYxMDEsIkRJQUwgbGJ1ZiBtYWxsb2Mgb2si LCIiLExCVUZMKzEpOworCisgICAgaWYgKCFyYnVmKSB7ICAgIC8qIFRoaXMgb25lIG1pZ2h0IGFs cmVhZHkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBieSBnZXRvaygpICovCisJaWYgKCEocmJ1ZiA9IG1h bGxvYyhSQlVGTCsxKSkpIHsgICAgLyogQWxsb2NhdGUgaW5wdXQgbGluZSBidWZmZXIgKi8KKwkg ICAgcHJpbnRmKCIlcyIsIG1tc2cpOworCSAgICBkaWFsc3RhID0gRElBX0lFOworCSAgICByZXR1 cm4gMDsKKwl9IGVsc2UKKwkgIGRlYnVnKEYxMDEsIkRJQUwgcmJ1ZiBtYWxsb2Mgb2siLCIiLFJC VUZMKzEpOworICAgIH0KKyAgICBpZiAoIShmYnVmID0gbWFsbG9jKEZVTExOVU1MKzEpKSkgeyAg ICAvKiBBbGxvY2F0ZSBpbnB1dCBsaW5lIGJ1ZmZlciAqLworCXByaW50ZigiJXMiLCBtbXNnKTsK KwlkaWFsc3RhID0gRElBX0lFOworCWlmIChyYnVmKSBmcmVlKHJidWYpOyByYnVmID0gTlVMTDsK KwlyZXR1cm4gMDsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiRElBTCBmYnVmIG1hbGxvYyBvayIs IiIsRlVMTE5VTUwrMSk7CisjZW5kaWYgLyogRFlOQU1JQyAqLworCisgICAgLyogTk9URTogbWRt dHlwLCBub3QgbXltZG10eXAgKi8KKworICAgIGlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10 eXAsMCkgPCAwKSB7IC8qIE9wZW4sIG5vIGNhcnJpZXIgd2FpdCAqLworCWVycCA9IGVycm1zZzsK KwlpZiAoKGludClzdHJsZW4odHRuYW1lKSA8IChFUk1TR0wgLSAxOCkpIC8qIHNhZmUsIGNoZWNr ZWQgKi8KKwkgIHNwcmludGYoZXJwLCJTb3JyeSwgY2FuJ3Qgb3BlbiAlcyIsdHRuYW1lKTsKKwll bHNlCisJICBzcHJpbnRmKGVycCwiU29ycnksIGNhbid0IG9wZW4gZGV2aWNlIik7CisJcGVycm9y KGVycm1zZyk7CisJZGlhbHN0YSA9IERJQV9PUEVOOworI2lmZGVmIERZTkFNSUMKKwlpZiAocmJ1 ZikgZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7CisJaWYgKGZidWYpIGZyZWUoZmJ1Zik7IGZidWYg PSBOVUxMOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKwlyZXR1cm4gMDsKKyAgICB9CisKKyNpZmRl ZiBDS19UQVBJCisgICAgaWYgKCF0dHRhcGkpIHsKKyNlbmRpZiAvKiBDS19UQVBJICovCisKKy8q IENvbmRpdGlvbiBjb25zb2xlIHRlcm1pbmFsIGFuZCBjb21tdW5pY2F0aW9uIGxpbmUgKi8KKwor ICAgIC8qIFBsYWNlIGxpbmUgaW50byAiY2xvY2FsIiBkaWFsaW5nIHN0YXRlLCAqLworICAgIC8q IGltcG9ydGFudCBtYWlubHkgZm9yIFN5c3RlbSBWIFVOSVguICAgICAqLworCisgICAgaWYgKHR0 cGt0KHNwZWVkLEZMT19ESUFMLHBhcml0eSkgPCAwKSB7CisJdHRjbG9zKDApOwkJCS8qIElmIHR0 cGt0IGZhaWxzIGRvIGFsbCB0aGlzLi4uICovCisJaWYgKHR0b3Blbih0dG5hbWUsJmxvY2FsLG15 bWRtdHlwLDApIDwgMCkgeworCSAgICBlcnAgPSBlcnJtc2c7CisJICAgIGlmICgoaW50KXN0cmxl bih0dG5hbWUpIDwgKEVSTVNHTCAtIDE4KSkgLyogc2FmZSwgY2hlY2tlZCAqLworCSAgICAgIHNw cmludGYoZXJwLCJTb3JyeSwgY2FuJ3QgcmVvcGVuICVzIix0dG5hbWUpOworCSAgICBlbHNlCisJ ICAgICAgc3ByaW50ZihlcnAsIlNvcnJ5LCBjYW4ndCByZW9wZW4gZGV2aWNlIik7CisJICAgIHBl cnJvcihlcnJtc2cpOworCSAgICBkaWFsc3RhID0gRElBX09QRU47CisjaWZkZWYgRFlOQU1JQwor CSAgICBpZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1ZiA9IE5VTEw7CisJICAgIGlmIChmYnVmKSBm cmVlKGZidWYpOyBmYnVmID0gTlVMTDsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisJICAgIHJldHVy biAwOworCX0JCQkJLyogQW5kIHRyeSBhZ2Fpbi4gKi8KKwlpZiAoKHR0cGt0KHNwZWVkLEZMT19E SUFMLHBhcml0eSkgPCAwKQorI2lmZGVmIFVOSVgKKwkmJiAoc3RyY21wKHR0bmFtZSwiL2Rldi9u dWxsIikpCisjZWxzZQorI2lmZGVmIE9TSworCSYmIChzdHJjbXAodHRuYW1lLCIvbmlsIikpCisj ZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIENLX1RBUEkKKwkgICAg ICYmICF0dHRhcGkKKyNlbmRpZiAvKiBDS19UQVBJICovCisJICAgICkgeworCSAgICBwcmludGYo IlNvcnJ5LCBDYW4ndCBjb25kaXRpb24gY29tbXVuaWNhdGlvbiBsaW5lXG4iKTsKKwkgICAgcHJp bnRmKCJUcnkgJ3NldCBsaW5lICVzJyBhZ2FpblxuIix0dG5hbWUpOworCSAgICBkaWFsc3RhID0g RElBX09QRU47CisjaWZkZWYgRFlOQU1JQworCSAgICBpZiAocmJ1ZikgZnJlZShyYnVmKTsgcmJ1 ZiA9IE5VTEw7CisJICAgIGlmIChmYnVmKSBmcmVlKGZidWYpOyBmYnVmID0gTlVMTDsKKyNlbmRp ZiAvKiBEWU5BTUlDICovCisJICAgIHJldHVybiAwOworCX0KKyAgICB9CisjaWZkZWYgQ0tfVEFQ SQorICAgIH0KKyNlbmRpZiAvKiBDS19UQVBJICovCisKKyAgICAvKiBNb2RlbSdzIGVzY2FwZSBz ZXF1ZW5jZS4uLiAqLworCisgICAgaWYgKGRpYWxlc2MgPCAwIHx8IGRpYWxlc2MgPiAxMjcpCisg ICAgICBjID0gTlVMOworICAgIGVsc2UKKyAgICAgIGMgPSAoY2hhcikgKGRpYWxlc2MgPyBkaWFs ZXNjIDogbXAtPmVzY19jaGFyKTsKKyAgICBtZG1jYXBhcyA9IGRpYWxjYXBhcyA/IGRpYWxjYXBh cyA6IG1wLT5jYXBhczsKKworICAgIHh4X29rID0gbXAtPm9rX2ZuOwkJCS8qIFBvaW50ZXIgdG8g cmVzcG9uc2UgcmVhZGVyICovCisKKyAgICBpZiAobWRtY2FwYXMgJiBDS0RfQVQpIHsJCS8qIEhh eWVzIGNvbXBhdGlibGUgKi8KKwllc2NidWZbMF0gPSBjOworCWVzY2J1ZlsxXSA9IGM7CisJZXNj YnVmWzJdID0gYzsKKwllc2NidWZbM10gPSBOVUw7CisJLyogSW4gY2FzZSB0aGlzIG1vZGVtIHR5 cGUgaXMgdXNlci1kZWZpbmVkICovCisJaWYgKCF4eF9vaykgeHhfb2sgPSBnZXRvazsKKyAgICB9 IGVsc2UgewkJCQkvKiBPdGhlciAqLworCWVzY2J1ZlswXSA9IGM7CisJZXNjYnVmWzFdID0gTlVM OworCS8qIEluIGNhc2UgdXNlci1kZWZpbmVkICovCisJaWYgKG1kbWNhcGFzICYgQ0tEX1YyNSkg aWYgKCF4eF9vaykgeHhfb2sgPSBnZXRvazsKKyAgICB9CisKKyAgICAvKiBQYXJ0aWFsIGRpYWxp bmcgKi8KKworICAgIGlmIChtZG1jYXBhcyAmIENLRF9BVAorI2lmbmRlZiBNSU5JRElBTAorCXx8 IG15bWRtdHlwID09IG5fTUlDUk9DT00KKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCSkgeworCWlu dCB4OworCXggPSAoaW50KSBzdHJsZW4odGVsbmJyKTsKKwlpZiAoeCA+IDApIHsKKwkgICAgaWYg KHRlbG5iclt4LTFdID09ICc7JykgeworCQlwYXJ0aWFsID0gMTsKKwkJZGVidWcoRjExMCwiY2tk aWFsIHNldHMgcGFydGlhbD0xOiIsdGVsbmJyLDApOworCSAgICB9IGVsc2UgaWYgKHBhcnRpYWwp IHsKKwkJY2ttYWttc2coZmJ1ZixGVUxMTlVNTCx0ZWxuYnIsIjsiLE5VTEwsTlVMTCk7IC8qIGFk ZCBvbmUgKi8KKwkJdGVsbmJyID0gZmJ1ZjsKKwkgICAgfQorCX0KKyAgICB9CisgICAgbXNsZWVw KDUwMCk7CisKKyAgICBkZWJ1ZyhGMTAxLCJja2RpYWwgZGlhbHRtbyIsIiIsZGlhbHRtbyk7IC8q IFRpbWVvdXQgKi8KKworICAgIGlmIChmYyA9PSAxKSB7CQkJLyogQU5TV0VSICovCisJd2FpdGN0 ID0gKGRpYWxhdG1vID4gLTEpID8gZGlhbGF0bW8gOiAwOworICAgIH0gZWxzZSB7CQkJCS8qIERJ QUwgKi8KKwlpZiAoZGlhbHRtbyA8IDEpIHsJCS8qIEF1dG9tYXRpYyBjb21wdXRhdGlvbi4gKi8K KyNpZmRlZiBDS19UQVBJCisJICAgIGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzKSB7CisJCXdhaXRj dCA9IDEgKiAoaW50KXN0cmxlbih0ZWxuYnIpIDsgLyogV29yc3QgY2FzZSBkaWFsIHRpbWUgKi8K KwkJd2FpdGN0ICs9IDYwOwkJLyogZGlhbHRvbmUgKyBjb21wbGV0aW9uIHdhaXQgdGltZXMgKi8K KwkJZm9yIChzID0gdGVsbmJyOyAqczsgcysrKSB7IC8qIGFkZCBpbiBwYXVzZSBjaGFyYWN0ZXJz IHRpbWUgKi8KKwkJICAgIGlmICgqcyA9PSAnLCcpIHsKKwkJCXdhaXRjdCArPSAyOyAvKiB1bmxl c3MgaXQgd2FzIGNoYW5nZWQgaW4gdGhlIG1vZGVtICovCisJCSAgICB9IGVsc2UgaWYgKCpzID09 ICdXJyB8fAorCQkJICAgICAgICpzID09ICd3JyB8fAorCQkJICAgICAgICpzID09ICckJyB8fAor CQkJICAgICAgICpzID09ICdAJworCQkJICAgICAgICkgeworCQkJd2FpdGN0ICs9IDg7CisJCSAg ICB9CisJCX0KKwkgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBDS19UQVBJICovCisJCXdhaXRjdCA9 IDEgKiAoaW50KXN0cmxlbih0ZWxuYnIpIDsKKwkJLyogZGlhbHRvbmUgKyBjb21wbGV0aW9uIHdh aXQgdGltZXMgKi8KKwkJd2FpdGN0ICs9IG1wLT5kaWFsX3RpbWU7CisJCWZvciAocyA9IHRlbG5i cjsgKnM7IHMrKykgeworCQkgICAgZm9yIChwID0gbXAtPnBhdXNlX2NoYXJzOyAqcDsgcCsrKQor CQkgICAgICBpZiAoKnMgPT0gKnApIHsKKwkJCSAgd2FpdGN0ICs9IG1wLT5wYXVzZV90aW1lOwor CQkJICBicmVhazsKKwkJICAgICAgfQorCQl9CisjaWZkZWYgQ0tfVEFQSQorCSAgICB9CisjZW5k aWYgLyogQ0tfVEFQSSAqLworCX0gZWxzZSB7CisJICAgIHdhaXRjdCA9IGRpYWx0bW87CQkvKiBV c2VyLXNwZWNpZmllZCB0aW1lb3V0ICovCisJfQorCWRlYnVnKEYxMDEsImNrZGlhbCB3YWl0Y3Qg QSIsIiIsd2FpdGN0KTsKKyAgICB9CisKKy8qCisgIHdhaXRjdCBpcyBvdXIgYWxhcm0oKSB0aW1l ci4KKyAgbWRtd2FpdCBpcyBob3cgbG9uZyB3ZSB0ZWxsIHRoZSBtb2RlbSB0byB3YWl0IGZvciBj YXJyaWVyLgorICBXZSBzZXQgbWRtd2FpdCB0byBiZSA1IHNlY29uZHMgbGVzcyB0aGFuIHdhaXRj dCwgdG8gaW5jcmVhc2UgdGhlCisgIGNoYW5jZSB0aGF0IHdlIGdldCBhIHJlc3BvbnNlIGZyb20g dGhlIG1vZGVtIGJlZm9yZSB0aW1pbmcgb3V0LgorKi8KKyAgICBpZiAod2FpdGN0IDw9IDApIHsJ CQkvKiAwIG9yIG5lZ2F0aXZlIG1lYW5zIHdhaXQgZm9yZXZlciAgKi8KKyNpZmRlZiBDT01NRU5U CisJd2FpdGN0ID0gMjU0OwkJCS8qIFRoZXNlIHdlcmUgYmFja3dhcmRzIGluIDcuMC4xOTYgKi8K KwltZG13YWl0ID0gMDsKKyNlbHNlCisJd2FpdGN0ID0gMDsJCQkvKiBGaXhlZCBpbiA3LjAuMTk4 LiAqLworCW1kbXdhaXQgPSAyNTQ7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0gZWxzZSB7 CisJaWYgKGRpYWx0bW8gPCAxKSB7CQkvKiBBdXRvbWF0aWMgY29tcHV0YXRpb24uICovCisjaWZk ZWYgWFdBSVRDVAorCSAgICAvKiBBZGR0bCB3YWl0IHNsb3AgY2FuIGJlIGRlZmluZWQgYXQgY29t cGlsZSB0aW1lICovCisJICAgIHdhaXRjdCArPSBYV0FJVENUOworI2VuZGlmIC8qIFhXQUlUQ1Qg Ki8KKwkgICAgaWYgKHdhaXRjdCA8IDYwICsgbWRtd2FpdGQpCisJICAgICAgd2FpdGN0ID0gNjAg KyBtZG13YWl0ZDsKKwl9CisJaWYgKG1kbWNhcGFzICYgQ0tEX0FUKSB7CS8qIEFUIGNvbW1hbmQt c2V0IG1vZGVtcyAqLworCSAgICBtZG13YWl0ID0gd2FpdGN0OwkJLyogUzcgdGltZW91dCA9IHdo YXQgdXNlciBhc2tlZCBmb3IgKi8KKwkgICAgd2FpdGN0ICs9IG1kbXdhaXRkOwkJLyogS2VybWl0 IHRpbWVvdXQgYSBiaXQgbGF0ZXIgKi8KKwl9IGVsc2UgewkJCS8qIE5vbi1BVCAqLworCSAgICBt ZG13YWl0ID0gd2FpdGN0OwkJLyogbm8gZGlmZmVyZW5jZSAqLworCX0KKyAgICB9CisgICAgZGVi dWcoRjEwMSwiY2tkaWFsIHdhaXRjdCBCIiwiIix3YWl0Y3QpOworICAgIGlmIChmYyA9PSAxKSB7 CQkJLyogQU5TV0VSICovCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgVGhpcyBpcyB3cm9uZy4gIG1k bXdhaXQgaXMgdGhlIHZhbHVlIGdpdmVuIHRvIFM3IGluIEhheWVzbGlrZSBtb2RlbXMuCisgIFdo ZW4gaW4gYXV0b2Fuc3dlciBtb2RlLCB0aGlzIGlzIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgbW9k ZW0gd2FpdHMgZm9yCisgIGNhcnJpZXIgb25jZSByaW5naW5nIHN0YXJ0cy4gIFdoZXJlYXMgd2Fp dGN0IGlzIHRoZSB0aW1lb3V0IGdpdmVuIHRvIHRoZQorICBBTlNXRVIgY29tbWFuZCwgd2hpY2gg aXMgYW4gZW50aXJlbHkgZGlmZmVyZW50IHRoaW5nLiAgU2luY2UgdGhlIGRlZmF1bHQKKyAgQU5T V0VSIHRpbWVvdXQgaXMgMCAobWVhbmluZyAid2FpdCBmb3JldmVyIiksIHRoZSBmb2xsb3dpbmcg c3RhdGVtZW50IHNldHMKKyAgUzcgdG8gMCwgd2hpY2gsIG9uIHNvbWUgbW9kZW1zIChsaWtlIHRo ZSBVU1IgU3BvcnRzdGVyKSBtYWtlcyBpdCBoYW5nIHVwCisgIGFuZCByZXBvcnQgTk8gQ0FSUklF UiB0aGUgaW5zdGFudCB0aGUgcGhvbmUgcmluZ3MuCisqLworCW1kbXdhaXQgPSB3YWl0Y3Q7Cisj ZWxzZQorCWlmIChtZG13YWl0IDw9IDApCisJICBtZG13YWl0ID0gNjA7CQkJLyogQWx3YXlzIHdh aXQgNjAgc2Vjb25kcy4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICB9CisgICAgaWYg KCFxdWlldCAmJiAhYmFja2dyZCkgewkJLyogUHJpbnQgaW5mb3JtYXRpb24gbWVzc2FnZXMuICov CisjaWZkZWYgVk1TCisJcHJpbnRmKCIgXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAv KiBWTVMgKi8KKwlpZiAoZmMgPT0gMSkKKwkgIHByaW50ZigiIFdhaXRpbmcgZm9yIHBob25lIGNh bGwuLi5cbiIpOworCWVsc2UKKwkgIHByaW50ZigiICVzcnlpbmc6ICVzLi4uXG4iLCB4MSA+IDAg PyAiUmV0IiA6ICJUIiwgdGVsbmJyKTsKKwlpZiAoeDEgPT0gMCAmJiB4MiA9PSAwICYmIGRpYWxz dGEgIT0gRElBX1BBUlQpIHsKKwkgICAgaWYgKG5ldHdvcmspIHsKKwkJcHJpbnRmKCIgVmlhIG1v ZGVtIHNlcnZlcjogJXMsIG1vZGVtOiAlc1xuIiwKKwkJICAgICAgIHR0bmFtZSwgZ21kbXR5cCgp ICk7CisJICAgIH0gZWxzZSB7CisjaWZkZWYgQ0tfVEFQSQorCQlpZiAodHR0YXBpICYmICF0YXBp cGFzcykKKwkJICBwcmludGYoIiBEZXZpY2U6ICVzLCBtb2RlbTogJXMiLCB0dG5hbWUsICJUQVBJ IiApOworCQllbHNlCisjZW5kaWYgLyogQ0tfVEFQSSAqLworCQlwcmludGYoIiBEZXZpY2U6ICVz LCBtb2RlbTogJXMiLAorCQkgICAgICAgdHRuYW1lLCBnbWRtdHlwKCkgKTsKKwkJaWYgKHNwZWVk ID4gLTFMKQorCQkgIHByaW50ZigiLCBzcGVlZDogJWxkXG4iLCBzcGVlZCk7CisJCWVsc2UKKwkJ ICBwcmludGYoIiwgc3BlZWQ6ICh1bmtub3duKVxuIik7CisJICAgIH0KKwkgICAgc3BkbWF4ID0g ZGlhbG1heCA+IDBMID8gZGlhbG1heCA6IG1wLT5tYXhfc3BlZWQ7CisKKyNpZm5kZWYgTk9ISU5U UworCSAgICBpZiAoaGludHMgJiYgIXF1aWV0ICYmCisJCSFuZXR3b3JrICYmIHNwZG1heCA+IDBM ICYmIHNwZWVkID4gc3BkbWF4CisjaWZkZWYgQ0tfVEFQSQorCQkmJiAoIXR0dGFwaSB8fCB0YXBp cGFzcykKKyNlbmRpZiAvKiBDS19UQVBJICovCisJCSkgeworCQlwcmludGYoIlxuKioqKioqKioq KioqKioqKioqKioqKioqKlxuIik7CisJCXByaW50ZigKKyAgICAiSW50ZXJmYWNlIHNwZWVkICVs ZCBtaWdodCBiZSB0b28gaGlnaCBmb3IgdGhpcyBtb2RlbSB0eXBlLlxuIiwKKwkJICAgICAgIHNw ZWVkCisJCSAgICAgICApOworCQlwcmludGYoCisgICAgIklmIGRpYWxpbmcgZmFpbHMsIFNFVCBT UEVFRCB0byAlbGQgb3IgbGVzcyBhbmQgdHJ5IGFnYWluLlxuIiwKKwkJICAgICAgIHNwZG1heAor CQkgICAgICAgKTsKKwkJcHJpbnRmKCIoVXNlIFNFVCBISU5UUyBPRkYgdG8gc3VwcHJlc3MgZnV0 dXJlIGhpbnRzLilcbiIpOworCQlwcmludGYoIioqKioqKioqKioqKioqKioqKioqKioqKipcbiIp OworCQlwcmludGYoIlxuIik7CisJICAgIH0KKyNlbmRpZiAvKiBOT0hJTlRTICovCisJICAgIHBy aW50ZigiICVzIHRpbWVvdXQ6ICIsIGZjID09IDAgPyAiRGlhbCIgOiAiQW5zd2VyIik7CisJICAg IGlmICh3YWl0Y3QgPiAwKQorCSAgICAgIHByaW50ZigiJWQgc2Vjb25kc1xuIixtZG13YWl0KTsK KwkgICAgZWxzZQorCSAgICAgIHByaW50ZigiIChub25lKVxuIik7CisJICAgIHByaW50ZigKKyNp ZmRlZiBNQUMKKwkgICAgICAgIiBUeXBlIENvbW1hbmQtLiB0byBjYW5jZWwuXG4iCisjZWxzZQor I2lmZGVmIFVOSVgKKwkgICAgICAgIiBUbyBjYW5jZWw6IHR5cGUgeW91ciBpbnRlcnJ1cHQgY2hh cmFjdGVyIChub3JtYWxseSBDdHJsLUMpLlxuIgorI2Vsc2UKKwkgICAgICAgIiBUbyBjYW5jZWw6 IHR5cGUgQ3RybC1DIChob2xkIGRvd24gQ3RybCwgcHJlc3MgQykuXG4iCisjZW5kaWYgLyogVU5J WCAqLworI2VuZGlmIC8qIE1BQyAqLworCSAgICAgICApOworICAgICAgICB9CisgICAgfQorICAg IGRlYnVnKEYxMTEsImNrZGlhbCIsdHRuYW1lLChpbnQpIChzcGVlZCAvIDEwTCkpOworICAgIGRl YnVnKEYxMDEsImNrZGlhbCB0aW1lb3V0IiwiIix3YWl0Y3QpOworI2lmZGVmIE9TMgorICAgIHRl cm1faW8gPSAwOworI2VuZGlmIC8qIE9TMiAqLworCisvKiBTZXQgdGltZXIgYW5kIGludGVycnVw dCBoYW5kbGVycy4gKi8KKyAgICBzYXZpbnQgPSBzaWduYWwoIFNJR0lOVCwgZGlhbGludCApIDsg LyogQW5kIHRlcm1pbmFsIGludGVycnVwdCBoYW5kbGVyLiAqLworICAgIGNjX2Fscm1fZXhlY3V0 ZShja2phZGRyKHNqYnVmKSwgMCwgZGlhbHRpbWUsIF9kb2RpYWwsIGZhaWxkaWFsKTsKKworICAg IHNpZ25hbChTSUdJTlQsIHNhdmludCk7CisjaWZkZWYgT1MyCisgICAgaWYgKGRpYWxzdGEgPT0g RElBX09LKQkJLyogRGlhbGluZyBpcyBjb21wbGV0ZWQgKi8KKyAgICAgIERpYWxlclNlbmQoT1BU X0tFUk1JVF9DT05ORUNULCAwKTsKKyAgICB0ZXJtX2lvID0gdGVybV9pb19zYXY7CisjZW5kaWYg LyogT1MyICovCisgICAgaWYgKGRpYWxzdGEgPT0gRElBX1BBUlQgfHwgZGlhbHN0YSA9PSBESUFf T0spIHsKKwkvKiBUaGlzIGlzIG5lZWRlZCwgZS5nLiwgZm9yIFRlbG5ldCBtb2RlbSBzZXJ2ZXJz ICovCisJaWYgKHJlbGlhYmxlICE9IFNFVF9PRkYgfHwgIXNldHJlbGlhYmxlKSB7CisJICAgIHJl bGlhYmxlID0gU0VUX09GRjsJCS8qIFRyYW5zcG9ydCBpcyBub3QgcmVsaWFibGUgKi8KKwkgICAg ZGVidWcoRjEwMSwiY2tkaWFsIHJlbGlhYmxlIiwiIixyZWxpYWJsZSk7CisJfQorCXJldHVybigx KTsJCQkvKiBEaWFsIGF0dGVtcHQgc3VjY2VlZGVkICovCisgICAgfSBlbHNlIHsKKwlyZXR1cm4o MCk7CQkJLyogRGlhbCBhdHRlbXB0IGZhaWxlZCAqLworICAgIH0KK30gLyogY2tkaWFsICovCisK Ky8qCisgIGdldG9rKCkgLSB3YWl0IHVwIHRvIG4gc2Vjb25kcyBmb3IgT0sgKDApIG9yIEVSUk9S ICg0KSByZXNwb25zZSBmcm9tIG1vZGVtLgorICBVc2Ugd2l0aCBIYXllc2xpa2Ugb3IgQ0NJVFQg bW9kZW1zIGZvciByZWFkaW5nIHRoZSByZXBseSB0byBhIG5vbmRpYWxpbmcKKyAgY29tbWFuZC4K KworICBTZWNvbmQgYXJndW1lbnQgc2F5cyB3aGV0aGVyIHRvIGJlIHN0cmljdCBhYm91dCBudW1l cmljIHJlc3VsdCBjb2RlcywgaS5lLgorICB0byByZXF1aXJlIHRoZXkgYmUgcHJlY2VkZWQgYnkg Q1Igb3IgZWxzZSBiZSB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZQorICByZXNwb25zZSwgZS5n LiB0byBwcmV2ZW50IHRoZSBBVEgwPENSPiBlY2hvIGZyb20gbG9va2luZyBsaWtlIGEgdmFsaWQK KyAgcmVzcG9uc2UuICBTdHJpY3QgPT0gMCBpcyBuZWVkZWQgZm9yIEFUSSBvbiBUZWxlYml0LCB3 aGljaCBjYW4gcmV0dXJuIHRoZQorICBtb2RlbCBudW1iZXIgY29uY2F0ZW5hdGVkIHdpdGggdGhl IG51bWVyaWMgcmVzcG9uc2UgY29kZSwgZS5nLiAiOTYyMCIKKyAgKCI5NjIiIGlzIHRoZSBtb2Rl bCBudW1iZXIsICIwIiBpcyB0aGUgcmVzcG9uc2UgY29kZSkuICBnZXRvaygpIFJldHVybnM6CisK KyAgIDAgaWYgaXQgdGltZWQgb3V0LAorICAgMSBpZiBpdCBzdWNjZWVkZWQsCisgIC0xIG9uIG1v ZGVtIGNvbW1hbmQsIGkvbywgb3Igb3RoZXIgZXJyb3IuCisqLworc3RhdGljIGNram1wYnVmIG9r YnVmOworCitzdGF0aWMgU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK29rdGltbyhpbnQgZm9vKQkJ CQkvKiBBbGFybSBoYW5kbGVyIGZvciBnZXRvaygpLiAqLworI2Vsc2UKK29rdGltbyhmb28pIGlu dCBmb287CQkJLyogQWxhcm0gaGFuZGxlciBmb3IgZ2V0b2soKS4gKi8KKyNlbmRpZiAvKiBDS19B TlNJQyAqLworLyogb2t0aW1vICovIHsKKworI2lmZGVmIE9TMgorICAgIGFsYXJtKDApOworICAg IC8qIHNpZ25hbChTSUdBTFJNLFNJR19JR04pOyAqLworICAgIGRlYnVnKEYxMDAsIm9rdGltbygp IFNJR0FMUk0gY2F1Z2h0IC0tIFNJR19JR04gc2V0IiwiIiwwKSA7CisjZW5kaWYgLyogT1MyICov CisKKyNpZmRlZiBPU0sJCQkJLyogT1MtOSwgc2VlIGNvbW1lbnQgaW4gZGlhbHRpbWUoKS4gKi8K KyAgICBzaWdtYXNrKC0xKTsKKyNlbmRpZiAvKiBPU0sgKi8KKyNpZmRlZiBOVFNJRworICAgIGlm ICggZm9vID09IFNJR0FMUk0gKQorICAgICAgUG9zdEFsYXJtU2lnU2VtKCk7CisgICAgZWxzZQor ICAgICAgUG9zdEN0cmxDU2VtKCk7CisjZWxzZSAvKiBOVFNJRyAqLworI2lmZGVmIE5UCisgICAg Y2tsb25nam1wKGNramFkZHIob2tidWYpLDEpOworI2Vsc2UgLyogTlQgKi8KKyAgICBja2xvbmdq bXAob2tidWYsMSk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyNlbmRpZiAvKiBOVCAqLworICAgIC8q IE5PVFJFQUNIRUQgKi8KKyAgICBTSUdSRVRVUk47Cit9CisKK3N0YXRpYyBpbnQgb2tzdGF0dXMs IG9rbiwgb2tzdHJpY3Q7CisKK3N0YXRpYyBTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworZG9vayh2 b2lkICogdGhyZWFkaW5mbykKKyNlbHNlIC8qIENLX0FOU0lDICovCitkb29rKHRocmVhZGluZm8p IFZPSUQgKiB0aHJlYWRpbmZvIDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9vayAqLyB7 CisgICAgQ0hBUiBjOworI2lmZGVmIERFQlVHCisgICAgY2hhciAqIG1kbW1zZyA9ICIiOworI2Vu ZGlmIC8qIERFQlVHICovCisKKyAgICBpbnQgaSwgeDsKKyNpZmRlZiBJS1NECisgICAgZXh0ZXJu IGludCBpbnNlcnZlcjsKKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgTlRTSUcKKyAgICBzaWdu YWwoU0lHSU5ULG9rdGltbyk7CisgICAgaWYgKHRocmVhZGluZm8pIHsJCQkvKiBUaHJlYWQgbG9j YWwgc3RvcmFnZS4uLiAqLworCVRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAg IH0KKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyNpZmRl ZiBJS1NECisgICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8q IElLU0QgKi8KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAgICBp ZiAobWRtY2FwYXMgJiBDS0RfVjI1KSB7CQkvKiBDQ0lUVCwgZWFzeS4uLiAqLworICAgICAgICB3 YWl0Zm9yKCJWQUwiKTsKKyAgICAgICAgb2tzdGF0dXMgPSAxOworCWRlYnVnKEYxMTEsIk1vZGVt X1Jlc3BvbnNlKFYyNSkiLCJWQUwiLG9rc3RhdHVzKTsKKyNpZmRlZiBOVFNJRworCWNrVGhyZWFk RW5kKHRocmVhZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisJU0lHUkVUVVJOOworI2lmbmRl ZiBNSU5JRElBTAorICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9NSUNST0NPTSkgeyAvKiBN aWNyb2NvbSBpbiBTWCBtb2RlLCBhbHNvIGVhc3kgKi8KKyAgICAgICAgd2FpdGZvcihNSUNST0NP TS53YWtlX3Byb21wdCk7CS8qIChJIHRoaW5rLi4uKSAqLworCWRlYnVnKEYxMTEsIk1vZGVtX1Jl c3BvbnNlKE1pY3JvY29tKSIsTUlDUk9DT00ud2FrZV9wcm9tcHQsb2tzdGF0dXMpOworICAgICAg ICBva3N0YXR1cyA9IDE7CisjaWZkZWYgTlRTSUcKKwlja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsK KyNlbmRpZiAvKiBOVFNJRyAqLworCVNJR1JFVFVSTjsKKyNlbmRpZiAvKiBNSU5JRElBTCAqLwor ICAgIH0gZWxzZSB7CQkJCS8qIEhheWVzICYgZnJpZW5kcywgc3RhcnQgaGVyZS4uLiAqLworCW9r c3RhdHVzID0gMDsJCQkvKiBObyBzdGF0dXMgeWV0LiAqLworCWZvciAoeCA9IDA7IHggPCBSQlVG TDsgeCsrKQkvKiBJbml0aWFsaXplIHJlc3BvbnNlIGJ1ZmZlciAqLworCSAgcmJ1Zlt4XSA9IFNQ OwkJCS8qICB0byBhbGwgc3BhY2VzICovCisJcmJ1ZltSQlVGTF0gPSBOVUw7CQkvKiBhbmQgdGVy bWluYXRlIHdpdGggTlVMLiAqLworCXdoaWxlIChva3N0YXR1cyA9PSAwKSB7CQkvKiBXaGlsZSBu byBzdGF0dXMuLi4gKi8KKwkgICAgeCA9IGRkaW5jKG9rbik7CQkvKiBSZWFkIGEgY2hhcmFjdGVy ICovCisJICAgIGlmICh4IDwgMCkgewkJLyogSS9PIGVycm9yICovCisJCW9rc3RhdHVzID0gLTE7 CisjaWZkZWYgTlRTSUcKKwkJY2tUaHJlYWRFbmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRT SUcgKi8KKwkJU0lHUkVUVVJOOworCSAgICB9CisjaWZkZWYgQ09NTUVOVAorCSAgICAvKiB0b28g bXVjaCAqLworCSAgICBkZWJ1ZyhGMTAxLCJnZXRvayBkZGluYyIsIiIseCk7IC8qIEdvdCBhIGNo YXJhY3Rlci4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIGMgPSAoY2hhcikgKHggJiAw eDdmKTsJLyogR2V0IGxvdyBvcmRlciA3IGJpdHMgKi8KKwkgICAgaWYgKCFjKQkJCS8qIERvbid0 IGRlcG9zaXQgTlVMcyAqLworCSAgICAgIGNvbnRpbnVlOwkJCS8qIG9yIGVsc2UgZGlkd2VnZXQo KSB3b24ndCB3b3JrICovCisJICAgIGlmIChkaWFsZHB5KSBjb25vYygoY2hhciljKTsgLyogRWNo byBpdCBpZiByZXF1ZXN0ZWQgKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IFJCVUZMLTE7IGkrKykg LyogUm90YXRlIGJ1ZmZlciAqLworCSAgICAgIHJidWZbaV0gPSByYnVmW2krMV07CisJICAgIHJi dWZbUkJVRkwtMV0gPSBjOwkJLyogRGVwb3NpdCBjaGFyYWN0ZXIgYXQgZW5kICovCisjaWZkZWYg Q09NTUVOVAorCSAgICAvKiB0b28gbXVjaCAqLworCSAgICBkZWJ1ZyhGMDAwLCJnZXRvazoiLHJi dWYsKGludCkgYyk7IC8qIExvZyBpdCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgc3dp dGNoIChjKSB7CQkvKiBJbnRlcnByZXQgaXQuICovCisJICAgICAgY2FzZSBDUjoJCQkvKiBHb3Qg YSBjYXJyaWFnZSByZXR1cm4uICovCisJCXN3aXRjaChyYnVmW1JCVUZMLTJdKSB7CS8qIExvb2sg YXQgY2hhcmFjdGVyIGJlZm9yZSBpdC4gKi8KKwkJICBjYXNlICcwJzoJCS8qIDAgPSBPSyBudW1l cmljIHJlc3BvbnNlICovCisJCSAgICBpZiAoIW9rc3RyaWN0IHx8CisJCQlyYnVmW1JCVUZMLTNd ID09IENSIHx8IHJidWZbUkJVRkwtM10gPT0gU1ApIHsKKwkJCW5vbnZlcmJhbCA9IDE7CisJCQlv a3N0YXR1cyA9IDE7CS8qIEdvb2QgcmVzcG9uc2UgKi8KKwkJICAgIH0KKwkJICAgIGRlYnVnKEYx MTEsIk1vZGVtX1Jlc3BvbnNlKEhheWVzKSIsIjAiLG9rc3RhdHVzKTsKKwkJICAgIGJyZWFrOwor CQkgIGNhc2UgJzQnOgkJLyogNCA9IEVSUk9SIG51bWVyaWMgcmVzcG9uc2UgKi8KKyNpZm5kZWYg TUlOSURJQUwKKwkJICAgIC8qIE9yIFRlbGViaXQgbW9kZWwgbnVtYmVyIDk2NCEgKi8KKwkJICAg IGlmIChteW1kbXR5cCA9PSBuX1RFTEVCSVQgJiYKKwkJCWlzZGlnaXQocmJ1ZltSQlVGTC0zXSkg JiYKKwkJCWlzZGlnaXQocmJ1ZltSQlVGTC00XSkpCisJCSAgICAgIGJyZWFrOworCQkgICAgZWxz ZQorI2VuZGlmIC8qIE1JTklESUFMICovCisJCSAgICAgIGlmICghb2tzdHJpY3QgfHwKKwkJCXJi dWZbUkJVRkwtM10gPT0gQ1IgfHwgcmJ1ZltSQlVGTC0zXSA9PSBTUCkgeworCQkJbm9udmVyYmFs ID0gMTsKKwkJCW9rc3RhdHVzID0gLTE7CS8qIEJhZCBjb21tYW5kICovCisJCSAgICB9CisJCSAg ICBkZWJ1ZyhGMTExLCJNb2RlbV9SZXNwb25zZShIYXllcykiLCI0Iixva3N0YXR1cyk7CisJCSAg ICBicmVhazsKKwkJfQorCQlpZiAoZGlhbGRweSAmJiBub252ZXJiYWwpIC8qIElmIG51bWVyaWMg cmVzdWx0cywgKi8KKwkJICBjb25vYyhMRik7CQkgIC8qIGVjaG8gYSBsaW5lZmVlZCB0b28uICov CisJCWJyZWFrOworCSAgICAgIGNhc2UgTEY6CQkJLyogR290IGEgbGluZWZlZWQuICovCisJCS8q CisJCSAgTm90ZSB1c2Ugb2YgZXhwbGljaXQgb2N0YWwgY29kZXMgaW4gdGhlIHN0cmluZyBmb3IK KwkJICBDUiBhbmQgTEYuICBXZSB3YW50IHJlYWwgQ1IgYW5kIExGIGhlcmUsIG5vdCB3aGF0ZXZl cgorCQkgIHRoZSBjb21waWxlciBoYXBwZW5zIHRvIHJlcGxhY2UgXHIgYW5kIFxuIHdpdGguLi4K KwkJKi8KKwkJaWYgKCFzdHJjbXAocmJ1ZitSQlVGTC00LCJPS1wwMTVcMDEyIikpIHsgLyogR29v ZCByZXNwb25zZSAqLworCQkgICAgb2tzdGF0dXMgPSAxOworCQkgICAgZGVidWcoRjExMSwiTW9k ZW1fUmVzcG9uc2UoSGF5ZXMpIiwiT0siLG9rc3RhdHVzKTsKKwkJfQorCQlpZiAoIXN0cmNtcChy YnVmK1JCVUZMLTMsIk9LXDAxMiIpKSB7IC8qIEdvb2QgcmVzcG9uc2UgKi8KKwkJICAgIG9rc3Rh dHVzID0gMTsKKwkJICAgIGRlYnVnKEYxMTEsIk1vZGVtX1Jlc3BvbnNlKEhheWVzKSIsIk9LIixv a3N0YXR1cyk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChyYnVmK1JCVUZMLTcsIkVSUk9SXDAxNVww MTIiKSkgeyAvKiBFcnJvciAqLworCQkgICAgb2tzdGF0dXMgPSAtMTsKKwkJICAgIGRlYnVnKEYx MTEsIk1vZGVtX1Jlc3BvbnNlKEhheWVzKSIsIkVSUk9SIixva3N0YXR1cyk7CisJCX0gZWxzZSBp ZiAoIXN0cmNtcChyYnVmK1JCVUZMLTYsIkVSUk9SXDAxMiIpKSB7IC8qIEVycm9yICovCisJCSAg ICBva3N0YXR1cyA9IC0xOworCQkgICAgZGVidWcoRjExMSwiTW9kZW1fUmVzcG9uc2UoSGF5ZXMp IiwiRVJST1IiLG9rc3RhdHVzKTsKKwkJfQorCQlicmVhazsKKwkgICAgICAvKiBDaGVjayB3aGV0 aGVyIG1vZGVtIGVjaG9lcyBpdHMgY29tbWFuZHMuLi4gKi8KKwkgICAgICBjYXNlICd0JzoJCQkv KiBHb3QgbGl0dGxlIHQgKi8KKwkJaWYgKCFzdHJjbXAocmJ1ZitSQlVGTC0zLCJcMDE1YXQiKSB8 fCAvKiBTZWUgaWYgaXQncyAiYXQiICovCisJCSAgICAhc3RyY21wKHJidWYrUkJVRkwtMywiIGF0 IikpCisJCSAgICBtZG1lY2hvID0gMTsKKwkJLyogZGVidWcoRjExMSwiTURNRUNITy10IixyYnVm K1JCVUZMLTIsbWRtZWNobyk7ICovCisJCWJyZWFrOworCSAgICAgIGNhc2UgJ1QnOgkJCS8qIEdv dCBCaWcgVCAqLworCQlpZiAoIXN0cmNtcChyYnVmK1JCVUZMLTMsIlwwMTVBVCIpIHx8CS8qIFNl ZSBpZiBpdCdzICJBVCIgKi8KKwkJICAgICFzdHJjbXAocmJ1ZitSQlVGTC0zLCIgQVQiKSkKKwkJ ICAgIG1kbWVjaG8gPSAxOworCQkvKiBkZWJ1ZyhGMTExLCJNRE1FQ0hPLVQiLHJidWYrUkJVRkwt MyxtZG1lY2hvKTsgKi8KKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoJCQkvKiBPdGhlciBjaGFy YWN0ZXJzLCBhY2N1bXVsYXRlLiAqLworCQlva3N0YXR1cyA9IDA7CisJCWJyZWFrOworCSAgICB9 CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJnZXRvayIsIiIsb2tzdGF0dXMpOwkvKiA8LS0g SXQncyBhIGxpZSAod2h5PykgKi8KKyNpZmRlZiBOVFNJRworICAgIGNrVGhyZWFkRW5kKHRocmVh ZGluZm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgU0lHUkVUVVJOOworfQorCitzdGF0aWMg U0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK2ZhaWxvayh2b2lkICogdGhyZWFkaW5mbykKKyNlbHNl IC8qIENLX0FOU0lDICovCitmYWlsb2sodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZhaWxvayAqLyB7CisgICAgZGVidWcoRjEwMCwibG9u Z2ptcCByZXR1cm5lZCB0byBnZXRvaygpIiwiIiwwKTsKKyAgICBkZWJ1ZyhGMTAwLCJnZXRvayB0 aW1lb3V0IiwiIiwwKTsKKyAgICBTSUdSRVRVUk47Cit9CisKK2ludAorZ2V0b2sobiwgc3RyaWN0 KSBpbnQgbiwgc3RyaWN0OyB7CisgICAgZGVidWcoRjEwMSwiZ2V0b2sgZW50cnkgbiIsIiIsbik7 CisgICAgb2tzdGF0dXMgPSAwOworICAgIG9rbiA9IG47CisgICAgb2tzdHJpY3QgPSBzdHJpY3Q7 CisKKyNpZmRlZiBEWU5BTUlDCisgICAgaWYgKCFyYnVmKSB7CisJaWYgKCEocmJ1ZiA9IG1hbGxv YyhSQlVGTCsxKSkpIHsgLyogQWxsb2NhdGUgaW5wdXQgbGluZSBidWZmZXIgKi8KKwkgICAgZGlh bHN0YSA9IERJQV9JRTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJZGVidWcoRjEwMSwiR0VUT0sg cmJ1ZiBtYWxsb2Mgb2siLCIiLFJCVUZMKzEpOworICAgIH0KKyNlbmRpZiAvKiBEWU5BTUlDICov CisKKyAgICBtZG1lY2hvID0gMDsJCQkvKiBBc3N1bWUgbm8gZWNob2luZyBvZiBjb21tYW5kcyAq LworCisgICAgZGVidWcoRjEwMCwiYWJvdXQgdG8gYWxybV9leGVjdXRlIGRvb2soKSIsIiIsMCk7 CisgICAgYWxybV9leGVjdXRlKCBja2phZGRyKG9rYnVmKSwgbiwgb2t0aW1vLCBkb29rLCBmYWls b2sgKSA7CisgICAgZGVidWcoRjEwMCwicmV0dXJuaW5nIGZyb20gYWxybV9leGVjdXRlIGRvb2so KSIsIiIsMCk7CisKKyAgICB0dGZsdWkoKTsJCQkJLyogRmx1c2ggaW5wdXQgYnVmZmVyICovCisg ICAgcmV0dXJuKG9rc3RhdHVzKTsJCQkvKiBSZXR1cm4gc3RhdHVzICovCit9CisKKy8qICBHIEUg VCBIIFIgTiAgLS0gIEdldCBIYXllcyBSZXN1bHQgTnVtZXJpYyAgKi8KKworc3RhdGljIFZPSUQK K2dldGhybigpIHsKKyAgICBjaGFyIGM7CisgICAgaW50IHg7CisvKgorICBIYXllcyBudW1lcmlj IHJlc3VsdCBjb2RlcyAoSGF5ZXMgMTIwMCBhbmQgaGlnaGVyKToKKyAgICAgMCA9IE9LCisgICAg IDEgPSBDT05ORUNUIGF0IDMwMCBicHMgKG9yIDEyMDAgYnBzIG9uIEhheWVzIDEyMDAgd2l0aCBi YXNpYyBjb2RlIHNldCkKKyAgICAgMiA9IFJJTkcKKyAgICAgMyA9IE5PIENBUlJJRVIKKyAgICAg NCA9IEVSUk9SIChpbiBjb21tYW5kIGxpbmUpCisgICAgIDUgPSBDT05ORUNUIDEyMDAgKGV4dGVu ZGVkIGNvZGUgc2V0KQorICBIYXllcyAyNDAwIGFuZCBoaWdoZXI6CisgICAgIDYgPSBOTyBESUFM VE9ORQorICAgICA3ID0gQlVTWQorICAgICA4ID0gTk8gQU5TV0VSCisgICAgIDkgPSAodGhlcmUg aXMgbm8gOSkKKyAgICAxMCA9IENPTk5FQ1QgMjQwMAorICBSZXBvcnRlZGx5LCB0aGUgY29kZXMg Zm9yIEhheWVzIFYuMzIgbW9kZW1zIGFyZToKKyAgICAxeCA9IENPTk5FQ1QgPHN1ZmZpeD4KKyAg ICA1eCA9IENPTk5FQ1QgMTIwMCA8c3VmZml4PgorICAgIDl4ID0gQ09OTkVDVCAyNDAwIDxzdWZm aXg+CisgICAxMXggPSBDT05ORUNUIDQ4MDAgPHN1ZmZpeD4KKyAgIDEyeCA9IENPTk5FQ1QgOTYw MCA8c3VmZml4PgorICBXaGVyZToKKyAgICB4OiAgIHN1ZmZpeDoKKyAgICBSICA9IFJFTElBQkxF CisgICAgUkMgPSBSRUxJQUJMRSBDT01QUkVTU0VECisgICAgTCAgPSBMQVBNCisgICAgTEMgPSBM QVBNIENPTVBSRVNTRUQKKyAgQW5kIGZvciBUZWxlYml0cywgYWxsIHRoZSBhYm92ZSwgZXhjZXB0 IG5vIHN1ZmZpeCBpbiBudW1lcmljIG1vZGUsIHBsdXM6CisgICAgMTEgPSBDT05ORUNUIDQ4MDAK KyAgICAxMiA9IENPTk5FQ1QgOTYwMAorICAgIDEzID0gQ09OTkVDVCAxNDQwMAorICAgIDE0ID0g Q09OTkVDVCAxOTIwMAorICAgIDE1ID0gQ09OTkVDVCAzODQwMAorICAgIDE2ID0gQ09OTkVDVCA1 NzYwMAorICAgIDIwID0gQ09OTkVDVCAzMDAvUkVMICAoPSBNTlApCisgICAgMjIgPSBDT05ORUNU IDEyMDAvUkVMICg9IE1OUCkKKyAgICAyMyA9IENPTk5FQ1QgMjQwMC9SRUwgKD0gTU5QKQorICAg IDQ2ID0gQ09OTkVDVCA3NTEyICAoaS5lLiA3NS8xMjAwKQorICAgIDQ3ID0gQ09OTkVDVCAxMjc1 ICAoaS5lLiAxMjAwLzc1KQorICAgIDQ4ID0gQ09OTkVDVCA3MjAwCisgICAgNDkgPSBDT05ORUNU IDEyMDAwCisgICAgNTAgPSBDT05ORUNUIEZBU1QgKG5vdCBvbiBUMTYwMC8zMDAwKQorICAgIDUy ID0gUlJJTkcKKyAgICA1MyA9IERJQUxJTkcKKyAgICA1NCA9IE5PIFBST01QVFRPTkUKKyAgICA2 MSA9IENPTk5FQ1QgRkFTVC9LRVJNIChLZXJtaXQgc3Bvb2YpCisgICAgNzAgPSBDT05ORUNUIEZB U1QvQ09NUCAoUEVQICsgY29tcHJlc3Npb24pCisgICAgNzEgPSBDT05ORUNUIEZBU1QvS0VSTS9D T01QIChQRVAgKyBjb21wcmVzc2lvbiArIEtlcm1pdCBzcG9vZikKKworICBBbmQgZm9yIG90aGVy cywgbG90cyBvZiBzcGVjaWFsIGNhc2VzIGJlbG93Li4uCisqLworI2RlZmluZSBOQlVGTCA4Cisg ICAgY2hhciBuYnVmW05CVUZMKzFdOwkJCS8qIFJlc3BvbnNlIGJ1ZmZlciAqLworICAgIGludCBp ID0gMCwgaiA9IDA7CQkJLyogQnVmZmVyIHBvaW50ZXJzICovCisKKyAgICBkZWJ1ZyhGMTAxLCJS RVNQT05TRSBtZG1lY2hvIiwiIixtZG1lY2hvKTsKKyAgICBpZiAobWRtZWNobykgewkJCS8qIFNw b25nZSB1cCBkaWFsaW5nIHN0cmluZyBlY2hvLiAqLworCXdoaWxlICgxKSB7CisJICAgIGMgPSAo Y2hhcikgKGRkaW5jKDApICYgMHg3Zik7CisJICAgIGRlYnVnKEYwMDAsIlNQT05HRSIsIiIsYyk7 CisJICAgIGRpYWxvYyhjKTsKKwkgICAgaWYgKGMgPT0gQ1IpIGJyZWFrOworCX0KKyAgICB9Cisg ICAgd2hpbGUgKG1kbXN0YXQgPT0gMCkgewkJLyogUmVhZCByZXNwb25zZSAqLworCWZvciAoaSA9 IDA7IGkgPCBOQlVGTDsgaSsrKQkvKiBDbGVhciB0aGUgYnVmZmVyICovCisJICBuYnVmW2ldID0g J1wwJzsKKwlpID0gMDsJCQkJLyogUmVzZXQgdGhlIGJ1ZmZlciBwb2ludGVyLiAqLworCWMgPSAo Y2hhcikgKGRkaW5jKDApICYgMDE3Nyk7CS8qIEdldCBmaXJzdCBkaWdpdCBvZiByZXNwb25zZS4g Ki8KKwkJCQkJLyogdXNpbmcgYW4gdW50aW1lZCwgYmxvY2tpbmcgcmVhZC4gKi8KKwlkZWJ1ZyhG MDAwLCJSRVNQT05TRS1BIiwiIixjKTsKKwlkaWFsb2MoYyk7CQkJLyogRWNobyBpdCBpZiByZXF1 ZXN0ZWQuICovCisJaWYgKCFpc2RpZ2l0KGMpKQkJLyogSWYgbm90IGEgZGlnaXQsIGtlZXAgbG9v a2luZy4gKi8KKwkgIGNvbnRpbnVlOworCW5idWZbaSsrXSA9IGM7CQkJLyogR290IGZpcnN0IGRp Z2l0LCBzYXZlIGl0LiAqLworCXdoaWxlIChjICE9IENSICYmIGkgPCA4KSB7CS8qIFJlYWQgY2hh cnMgdXAgdG8gQ1IgKi8KKwkgICAgeCA9IGRkaW5jKDApICYgMDE3NzsJLyogR2V0IGEgY2hhcmFj dGVyLiAqLworCSAgICBjID0gKGNoYXIpIHg7CQkvKiBHb3QgaXQgT0suICovCisJICAgIGRlYnVn KEYwMDAsIlJFU1BPTlNFLUMiLCIiLGMpOworCSAgICBpZiAoYyAhPSBDUikJCS8qIElmIGl0J3Mg bm90IGEgY2FycmlhZ2UgcmV0dXJuLCAqLworCSAgICAgIG5idWZbaSsrXSA9IGM7CQkvKiAgc2F2 ZSBpdC4gKi8KKwkgICAgZGlhbG9jKGMpOwkJCS8qIEVjaG8gaXQuICovCisJfQorCW5idWZbaV0g PSAnXDAnOwkJCS8qIERvbmUsIHRlcm1pbmF0ZSB0aGUgYnVmZmVyLiAqLworCWRlYnVnKEYxMTAs ImRpYWwgaGF5ZXNudiBsYnVmIixsYnVmLDApOworCWRlYnVnKEYxMTEsImRpYWwgaGF5ZXNudiBn b3QiLG5idWYsaSk7CisJLyoKKwkgICBTZXBhcmF0ZSBhbnkgbm9uLW51bWVyaWMgc3VmZml4IGZy b20gdGhlIG51bWVyaWMKKwkgICByZXN1bHQgY29kZSB3aXRoIGEgbnVsbC4KKwkqLworCWZvciAo aiA9IGktMTsgKGogPiAtMSkgJiYgIWlzZGlnaXQobmJ1ZltqXSk7IGotLSkKKwkgIG5idWZbaisx XSA9IG5idWZbal07CisJaisrOworCW5idWZbaisrXSA9ICdcMCc7CisJZGVidWcoRjExMCwiZGlh bCBoYXllc252IG51bWVyaWMiLG5idWYsMCk7CisJZGVidWcoRjExMSwiZGlhbCBoYXllc252IHN1 ZmZpeCAiLG5idWYraixqKTsKKwkvKiBQcm9iYWJseSBwaG9uZSBudW1iZXIgZWNob2luZy4gKi8K KwlpZiAoKGludClzdHJsZW4obmJ1ZikgPiAzKQorCSAgY29udGludWU7CisKKwkvKiBOb3cgcmVh ZCBhbmQgaW50ZXJwcmV0IHRoZSByZXN1bHRzLi4uICovCisKKwlpID0gYXRvaShuYnVmKTsJLyog Q29udmVydCB0byBpbnRlZ2VyICovCisJc3dpdGNoIChpKSB7CisJICBjYXNlIDA6CisJICAgIG1k bXN0YXQgPSBEX1BBUlRJQUw7CS8qIE9LIHJlc3BvbnNlICovCisJICAgIGJyZWFrOworCSAgY2Fz ZSAxOgkJCS8qIENPTk5FQ1QgKi8KKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsJLyogQ291bGQg YmUgYW55IHNwZWVkICovCisJICAgIGJyZWFrOworCSAgY2FzZSAyOgkJCS8qIFJJTkcgKi8KKwkg ICAgaWYgKGRpYWxkcHkpCisJICAgICAgcHJpbnRmKCJcclxuIExvY2FsIHBob25lIGlzIHJpbmdp bmchXHJcbiIpOworCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJICAgIGRpYWxzdGEgPSBESUFf UklORzsKKwkgICAgYnJlYWs7CisJICBjYXNlIDM6CQkJLyogTk8gQ0FSUklFUiAqLworCSAgICBp ZiAoZGlhbGRweSkgcHJpbnRmKCJcclxuIE5vIENhcnJpZXIuXHJcbiIpOworCSAgICBtZG1zdGF0 ID0gRF9GQUlMRUQ7CisJICAgIGRpYWxzdGEgPSBESUFfTk9DQTsKKwkgICAgYnJlYWs7CisJICBj YXNlIDQ6CQkJLyogRVJST1IgKi8KKwkgICAgaWYgKGRpYWxkcHkpCisJICAgICAgcHJpbnRmKCJc clxuIE1vZGVtIENvbW1hbmQgRXJyb3IuXHJcbiIpOworCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7 CisJICAgIGRpYWxzdGEgPSBESUFfRVJSOworCSAgICBicmVhazsKKwkgIGNhc2UgNToJCQkvKiBD T05ORUNUIDEyMDAgKi8KKwkgICAgc3BkY2hnKDEyMDBMKTsgLyogQ2hhbmdlIHNwZWVkIGlmIG5l Y2Vzc2FyeS4gKi8KKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBj YXNlIDY6CQkJLyogTk8gRElBTFRPTkUgKi8KKyNpZm5kZWYgTUlOSURJQUwKKwkgICAgaWYgKG15 bWRtdHlwID09IG5fTUlDUk9MSU5LICYmIGF0b2koZGlhbGxjYykgPT0gNDkgJiYgZGlhbGRweSkK KwkgICAgICBwcmludGYoIlxyXG4gRGlhbCBMb2NrZWQuXHJcbiIpOyAvKiBHZXJtYW55ICovCisJ ICAgIGVsc2UKKyNlbmRpZiAvKiBNSU5JRElBTCAqLworCSAgICAgIGlmIChkaWFsZHB5KQorCQlw cmludGYoIlxyXG4gTm8gRGlhbHRvbmUuXHJcbiIpOworCSAgICBtZG1zdGF0ID0gRF9GQUlMRUQ7 CisJICAgIGRpYWxzdGEgPSBESUFfTk9EVDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDc6CQkJLyog QlVTWSAqLworCSAgICBpZiAoZGlhbGRweSkgcHJpbnRmKCJcclxuIEJ1c3kuXHJcbiIpOworCSAg ICBtZG1zdGF0ID0gRF9GQUlMRUQ7CisJICAgIGRpYWxzdGEgPSBESUFfQlVTWTsKKwkgICAgYnJl YWs7CisJICBjYXNlIDg6CQkJLyogTk8gQU5TV0VSICovCisjaWZuZGVmIE1JTklESUFMCisJICAg IGlmIChteW1kbXR5cCA9PSBuX01JQ1JPTElOSyAmJiBhdG9pKGRpYWxsY2MpID09IDQxICYmIGRp YWxkcHkpCisJICAgICAgcHJpbnRmKCJcclxuIERpYWwgTG9ja2VkLlxyXG4iKTsgLyogU3dpdHpl cmxhbmQgKi8KKwkgICAgZWxzZQorI2VuZGlmIC8qIE1JTklESUFMICovCisJICAgICAgaWYgKGRp YWxkcHkpCisJCXByaW50ZigiXHJcbiBObyBBbnN3ZXIuXHJcbiIpOworCSAgICBtZG1zdGF0ID0g RF9GQUlMRUQ7CisJICAgIGRpYWxzdGEgPSBESUFfTk9BTjsKKwkgICAgYnJlYWs7CisKKwkgIGNh c2UgOToKKyNpZm5kZWYgTUlOSURJQUwKKwkgICAgaWYgKG15bWRtdHlwID09IG5fWEpBQ0sgfHwg bXltZG10eXAgPT0gbl9TVVBSQVgpIHsKKwkJc3BkY2hnKDYwMCk7CisJCWJyZWFrOworCSAgICB9 IC8qIGZhbGwgdGhydSAqLworI2VuZGlmIC8qIE1JTklESUFMICovCisJICBjYXNlIDEwOgkJCS8q IENPTk5FQ1QgMjQwMCAqLworCSAgICBzcGRjaGcoMjQwMEwpOwkJLyogQ2hhbmdlIHNwZWVkIGlm IG5lY2Vzc2FyeS4gKi8KKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisK KyNpZm5kZWYgTUlOSURJQUwKKworLyogU3RhcnRpbmcgaGVyZSwgd2UgZ2V0IGRpZmZlcmVudCBt ZWFuaW5ncyBmcm9tIGRpZmZlcmVudCBtYW51ZmFjdHVyZXJzICovCisKKwkgIGNhc2UgMTE6CisJ ICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUikgeworCQlpZiAoZGlhbGRweSkgcHJpbnRmKCIgUmlu Z2luZy4uLlxyXG4iKTsKKwkgICAgfSBlbHNlIHsKKwkJc3BkY2hnKDQ4MDBMKTsJCS8qIENPTk5F Q1QgNDgwMCAqLworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOwor CSAgY2FzZSAxMjoKKwkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSKSB7CisJCWlmIChkaWFsZHB5 KQorCQkgIHByaW50ZigiXHJcbiBBbnN3ZXJlZCBieSB2b2ljZS5cclxuIik7CisJCW1kbXN0YXQg PSBEX0ZBSUxFRDsKKwkJZGlhbHN0YSA9IERJQV9WT0lDOworCSAgICB9IGVsc2UgaWYgKG15bWRt dHlwID09IG5fS0VFUElOVE9VQ0gpIHsKKwkJc3BkY2hnKDcyMDBMKTsKKwkJbWRtc3RhdCA9IENP Tk5FQ1RFRDsKKwkgICAgfSBlbHNlIHsKKwkJc3BkY2hnKDk2MDBMKTsKKwkJbWRtc3RhdCA9IENP Tk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgMTM6CisJICAgIGlmIChteW1k bXR5cCA9PSBuX0FUVDE5MDAgfHwgbXltZG10eXAgPT0gbl9BVFQxOTEwKSB7CisJCWlmIChkaWFs ZHB5KSBwcmludGYoIiBXYWl0Li4uXHJcbiIpOworCQlicmVhazsKKwkgICAgfSBlbHNlIGlmICht eW1kbXR5cCA9PSBuX1VTUiB8fCBteW1kbXR5cCA9PSBuX1VTUlgyKQorCSAgICAgIHNwZGNoZyg5 NjAwTCk7CisJICAgIGVsc2UgaWYgKGlzX3JvY2t3ZWxsIHx8IGlzX3N1cHJhIHx8CisJCW15bWRt dHlwID09IG5fWk9MVFJJWCB8fCBteW1kbXR5cCA9PSBuX1hKQUNLKQorCSAgICAgIHNwZGNoZyg3 MjAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwICE9IG5fTUlDUk9MSU5LKQorCSAgICAgIHNw ZGNoZygxNDQwMEwpOworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkg IGNhc2UgMTQ6CisJICAgIGlmIChpc19yb2Nrd2VsbCB8fCBpc19zdXByYSB8fCBteW1kbXR5cCA9 PSBuX1hKQUNLKQorCSAgICAgIHNwZGNoZygxMjAwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5 cCA9PSBuX0RBVEFQT1JUIHx8IG15bWRtdHlwID09IG5fTUlDUk9MSU5LKQorCSAgICAgIHNwZGNo ZygxNDQwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKQorCSAg ICAgIHNwZGNoZyg5NjAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwICE9IG5fVVNSICYmIG15 bWRtdHlwICE9IG5fWk9MVFJJWCkKKwkgICAgICBzcGRjaGcoMTkyMDBMKTsKKwkgICAgbWRtc3Rh dCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE1OgorCSAgICBpZiAoaXNfcm9j a3dlbGwgfHwgaXNfc3VwcmEgfHwKKwkJbXltZG10eXAgPT0gbl9aT0xUUklYIHx8IG15bWRtdHlw ID09IG5fWEpBQ0spCisJICAgICAgc3BkY2hnKDE0NDAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRt dHlwID09IG5fVVNSKQorCSAgICAgIHNwZGNoZygxMjAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRt dHlwID09IG5fWllYRUwgfHwgbXltZG10eXAgPT0gbl9JTlRFTCkKKwkgICAgICBzcGRjaGcoNzIw MEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0RBVEFQT1JUKQorCSAgICAgIHNwZGNo ZygxOTIwMEwpOworCSAgICBlbHNlCisJICAgICAgc3BkY2hnKDM4NDAwTCk7CisJICAgIG1kbXN0 YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAxNjoKKwkgICAgaWYgKGlzX3Jv Y2t3ZWxsIHx8IGlzX3N1cHJhIHx8CisJCW15bWRtdHlwID09IG5fWk9MVFJJWCB8fCBteW1kbXR5 cCA9PSBuX1hKQUNLKQorCSAgICAgIHNwZGNoZygxOTIwMEwpOworCSAgICBlbHNlIGlmIChteW1k bXR5cCA9PSBuX1VTUikKKwkgICAgICBzcGRjaGcoMjQwMEwpOworCSAgICBlbHNlIGlmIChteW1k bXR5cCA9PSBuX0RBVEFQT1JUKQorCSAgICAgIHNwZGNoZyg3MjAwTCk7CisJICAgIGVsc2UgaWYg KG15bWRtdHlwICE9IG5fWllYRUwgJiYgbXltZG10eXAgIT0gbl9JTlRFTCkgLyogMTIwMDAgKi8K KwkgICAgICBzcGRjaGcoNTc2MDBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAg YnJlYWs7CisJICBjYXNlIDE3OgorCSAgICBpZiAobXltZG10eXAgIT0gbl9EQVRBUE9SVCB8fCBt eW1kbXR5cCA9PSBuX1hKQUNLKQkvKiAxNjgwMCAqLworCSAgICAgIHNwZGNoZygzODQwMEwpOwor CSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX1pZWEVMIHx8IG15bWRtdHlwID09IG5fSU5URUwp CisJICAgICAgc3BkY2hnKDE0NDAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fS0VF UElOVE9VQ0gpCisJICAgICAgc3BkY2hnKDE0NDAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlw ID09IG5fVVNSKQorCSAgICAgIHNwZGNoZyg5NjAwTCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNU RUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAxODoKKwkgICAgaWYgKGlzX3JvY2t3ZWxsIHx8IGlz X3N1cHJhIHx8CisJCW15bWRtdHlwID09IG5fWk9MVFJJWCB8fCBteW1kbXR5cCA9PSBuX1hKQUNL IHx8CisJCW15bWRtdHlwID09IG5fTUhaQVRUIHx8IG15bWRtdHlwID09IG5fTFVDRU5UKQorCSAg ICAgIHNwZGNoZyg1NzYwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMKQor CSAgICAgIHNwZGNoZygxOTIwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX1VTUiB8 fCBteW1kbXR5cCA9PSBuX1VTUlgyKQorCSAgICAgIHNwZGNoZyg0ODAwTCk7CisJICAgIG1kbXN0 YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAxOToKKwkgICAgaWYgKG15bWRt dHlwID09IG5fREFUQVBPUlQpCisJICAgICAgc3BkY2hnKDMwMEwpOworCSAgICBlbHNlIGlmICht eW1kbXR5cCA9PSBuX1pZWEVMIHx8IG15bWRtdHlwID09IG5fSU5URUwpCisJICAgICAgc3BkY2hn KDM4NDAwTCk7CisJICAgIGVsc2UKKwkgICAgICBzcGRjaGcoMTE1MjAwTCk7CisJICAgIG1kbXN0 YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAyMDoKKwkgICAgaWYgKG15bWRt dHlwID09IG5fVVNSIHx8IG15bWRtdHlwID09IG5fVVNSWDIpCisJICAgICAgc3BkY2hnKDcyMDBM KTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKKwkgICAgICBzcGRjaGco MjQwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX1pZWEVMIHx8IG15bWRtdHlwID09 IG5fSU5URUwpCisJICAgICAgc3BkY2hnKDU3NjAwTCk7CisJICAgIGVsc2UKKwkgICAgICBzcGRj aGcoMzAwTCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2Fz ZSAyMToKKwkgICAgaWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCisJICAgICAgc3BkY2hnKDQ4 MDBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDIy OgorCSAgICBpZiAoaXNfcm9ja3dlbGwgfHwgaXNfc3VwcmEgfHwgbXltZG10eXAgPT0gbl9YSkFD SykKKwkgICAgICBzcGRjaGcoODg4MEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0RB VEFQT1JUKQorCSAgICAgIHNwZGNoZyg5NjAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09 IG5fS0VFUElOVE9VQ0gpCisJICAgICAgc3BkY2hnKDMwMEwpOworCSAgICBlbHNlIGlmICghaXNf aGF5ZXNoaXNwZCkKKwkgICAgICBzcGRjaGcoMTIwMEwpOworCSAgICBtZG1zdGF0ID0gQ09OTkVD VEVEOworCSAgICBicmVhazsKKwkgIGNhc2UgMjM6CisJICAgIGlmIChpc19oYXllc2hpc3BkIHx8 IGlzX3N1cHJhIHx8CisJCW15bWRtdHlwID09IG5fTVVMVEkgfHwgbXltZG10eXAgPT0gbl9YSkFD SykKKwkgICAgICBzcGRjaGcoODg4MEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCAhPSBuX0RB VEFQT1JUICYmICFpc19yb2Nrd2VsbCkgLyogMTIwMDAgKi8KKwkgICAgICBzcGRjaGcoMjQwMEwp OworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkgIGNhc2UgMjQ6CisJ ICAgIGlmIChpc19yb2Nrd2VsbCB8fCAgaXNfc3VwcmEgfHwgbXltZG10eXAgPT0gbl9YSkFDSykg eworCQltZG1zdGF0ID0gRF9GQUlMRUQ7CisJCWRpYWxzdGEgPSBESUFfREVMQTsJLyogRGVsYXll ZCAqLworCQlicmVhazsKKwkgICAgfSBlbHNlIGlmIChpc19oYXllc2hpc3BkIHx8IG15bWRtdHlw ID09IG5fTFVDRU5UKQorCSAgICAgIHNwZGNoZyg3MjAwTCk7CisJICAgIGVsc2UgaWYgKG15bWRt dHlwID09IG5fREFUQVBPUlQpCisJICAgICAgc3BkY2hnKDE0NDAwTCk7CisJICAgIGVsc2UgaWYg KG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkKKwkgICAg ICBzcGRjaGcoMTIwMEwpOworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsK KwkgIGNhc2UgMjU6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX1VTUiB8fCBteW1kbXR5cCA9PSBu X1VTUlgyKQorCSAgICAgIHNwZGNoZygxNDQwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9 PSBuX0xVQ0VOVCkKKwkgICAgICBzcGRjaGcoMTIwMDBMKTsKKwkgICAgZWxzZSBpZiAoaXNfbW90 b3JvbGEpCisJICAgICAgc3BkY2hnKDk2MDBMKTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAgPT0g bl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKQorCSAgICAgIHNwZGNoZygyNDAw TCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAyNjoK KwkgICAgaWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCisJICAgICAgc3BkY2hnKDE5MjAwTCk7 CisJICAgIGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQ SU5UT1VDSCkKKwkgICAgICBzcGRjaGcoNDgwMEwpOworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVE OworCSAgICBicmVhazsKKwkgIGNhc2UgMjc6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0RBVEFQ T1JUKQorCSAgICAgIHNwZGNoZygzODQwMEwpOworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBu X0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpCisJICAgICAgc3BkY2hnKDcyMDBM KTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9NSFpBVFQpCisJICAgICAgc3BkY2hnKDg4 ODBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDI4 OgorCSAgICBpZiAobXltZG10eXAgPT0gbl9EQVRBUE9SVCkKKwkgICAgICBzcGRjaGcoNzIwMEwp OworCSAgICBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VF UElOVE9VQ0gpCisJICAgICAgc3BkY2hnKDk2MDBMKTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAg PT0gbl9NSFpBVFQgfHwgbXltZG10eXAgPT0gbl9MVUNFTlQpCisJICAgICAgc3BkY2hnKDM4NDAw TCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAyOToK KwkgICAgaWYgKGlzX21vdG9yb2xhKQorCSAgICAgIHNwZGNoZyg0ODAwTCk7CisJICAgIGVsc2Ug aWYgKG15bWRtdHlwID09IG5fREFUQVBPUlQpCisJICAgICAgc3BkY2hnKDE5MjAwTCk7CisJICAg IG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSAzMDoKKwkgICAgaWYg KG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlz cGRjaGcoMTQ0MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSAvKiBmYWxsIHRo cnUgb24gcHVycG9zZS4uLiAqLworCSAgY2FzZSAzMToKKwkgICAgaWYgKG15bWRtdHlwID09IG5f VUNPTV9BVCB8fCBteW1kbXR5cCA9PSBuX01JQ1JPTElOSykgeworCQlzcGRjaGcoNDgwMEwpOwor CQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKGlzX21vdG9yb2xhKSB7CisJ CXNwZGNoZyg1NzYwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJy ZWFrOworCSAgY2FzZSAzMjoKKwkgICAgaWYgKGlzX3JvY2t3ZWxsIHx8IGlzX3N1cHJhIHx8IG15 bWRtdHlwID09IG5fWEpBQ0spIHsKKwkJbWRtc3RhdCA9IERfRkFJTEVEOworCQlkaWFsc3RhID0g RElBX0JMQ0s7CS8qIEJsYWNrbGlzdGVkICovCisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0g bl9VQ09NX0FUIHx8IG15bWRtdHlwID09IG5fTUlDUk9MSU5LKSB7CisJCXNwZGNoZyg5NjAwTCk7 CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9L RUVQSU5UT1VDSCkgeworCQlzcGRjaGcoMzAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJ ICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCkgeworCQlzcGRjaGcoMjQwMEwpOwor CQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSAzMzoJ CQkvKiBGQVggY29ubmVjdGlvbiAqLworCSAgICBpZiAoaXNfcm9ja3dlbGwgfHwgaXNfc3VwcmEg fHwKKwkJbXltZG10eXAgPT0gbl9aT0xUUklYIHx8IG15bWRtdHlwID09IG5fWEpBQ0spIHsKKwkJ bWRtc3RhdCA9IERfRkFJTEVEOworCQlkaWFsc3RhID0gRElBX0ZBWDsKKwkgICAgfSBlbHNlIGlm IChteW1kbXR5cCA9PSBuX1VDT01fQVQgfHwKKwkJICAgICAgIGlzX21vdG9yb2xhIHx8CisJCSAg ICAgICBteW1kbXR5cCA9PSBuX01JQ1JPTElOSworCQkgICAgICAgKSB7CisJCXNwZGNoZyg5NjAw TCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0g bl9NSFpBVFQpIHsKKwkJc3BkY2hnKDExNTIwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOwor CSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSAzNDoKKwkgICAgaWYgKG15bWRtdHlwID09IG5f SU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGcoMTIwMEwpOwor CQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fTUlD Uk9MSU5LKSB7CisJCXNwZGNoZyg3MjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAg IH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDM1OgorCSAgICBpZiAoaXNfcm9ja3dlbGwpIHsKKwkJ c3BkY2hnKDMwMEwpOworCQlkaWFsc3RhID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKGlz X21vdG9yb2xhKSB7CisJCXNwZGNoZygxNDQwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOwor CSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQ SU5UT1VDSCkgeworCQlzcGRjaGcoMjQwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAg ICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fTUlDUk9MSU5LKSB7CisJCXNwZGNoZyg3MjAwTCk7 CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9a T0xUUklYIHx8IG15bWRtdHlwID09IG5fWEpBQ0spIC8qIERBVEEgKi8KKwkgICAgICBtZG1zdGF0 ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKwkgIGNhc2UgMzY6CisJICAgIGlmIChteW1kbXR5 cCA9PSBuX1VDT01fQVQpIHsKKwkJc3BkY2hnKDE5MjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNU RUQ7CisJICAgIH0gZWxzZSBpZiAoaXNfbW90b3JvbGEpIHsKKwkJc3BkY2hnKDEyMDBMKTsKKwkJ bWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChteW1kbXR5cCA9PSBuX0lOVEVM IHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKKwkJc3BkY2hnKDQ4MDBMKTsKKwkJbWRt c3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgMzc6CisJICAg IGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKKwkJc3BkY2hnKDE5MjAwTCk7CisJCW1kbXN0 YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAoaXNfbW90b3JvbGEpIHsKKwkJc3BkY2hn KDI0MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChteW1kbXR5 cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKKwkJc3BkY2hnKDcy MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNh c2UgMzg6CisJICAgIGlmIChpc19tb3Rvcm9sYSkgeworCQlzcGRjaGcoNDgwMEwpOworCQltZG1z dGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwg bXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGcoOTYwMEwpOworCQltZG1zdGF0 ID0gQ09OTkVDVEVEOworCSAgICB9IC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlLi4uICovCisJICBj YXNlIDM5OgorCSAgICBpZiAobXltZG10eXAgPT0gbl9VQ09NX0FUKSB7CisJCXNwZGNoZygzODQw MEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKGlzX21vdG9yb2xh KSB7CisJCXNwZGNoZyg5NjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxz ZSBpZiAobXltZG10eXAgPT0gbl9NSUNST0xJTkspIHsKKwkJc3BkY2hnKDE0NDAwTCk7CisJCW1k bXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDQwOgorCSAg ICBpZiAobXltZG10eXAgPT0gbl9VQ09NX0FUKSB7CisJCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwkJ ZGlhbHN0YSA9IERJQV9OT0NBOworCSAgICB9IGVsc2UgaWYgKGlzX21vdG9yb2xhIHx8IG15bWRt dHlwID09IG5fSU5URUwgfHwKKwkJICAgICAgIG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsK KwkJc3BkY2hnKDE0NDAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAg YnJlYWs7CisJICBjYXNlIDQxOgorCSAgICBpZiAoaXNfbW90b3JvbGEpIHsKKwkJc3BkY2hnKDE5 MjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBj YXNlIDQyOgorCSAgICBpZiAobXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGco MzAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0gZWxzZSBpZiAoaXNfbW90b3Jv bGEpIHsKKwkJc3BkY2hnKDM4NDAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0g LyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UuLi4gKi8KKwkgIGNhc2UgNDM6CisJICAgIGlmIChteW1k bXR5cCA9PSBuX1VDT01fQVQpIHsKKwkJc3BkY2hnKDU3NjAwTCk7CisJCW1kbXN0YXQgPSBDT05O RUNURUQ7CisJICAgIH0gZWxzZSBpZiAobXltZG10eXAgPT0gbl9VU1JYMikKKwkgICAgICBtZG1z dGF0ID0gQ09OTkVDVEVEOwkvKiAxNjgwMDAgKi8KKwkgICAgYnJlYWs7CisJICBjYXNlIDQ0Ogor CSAgICBpZiAoaXNfcm9ja3dlbGwpIHsKKwkJc3BkY2hnKDg4MDBMKTsKKwkJZGlhbHN0YSA9IENP Tk5FQ1RFRDsKKwkgICAgfSBlbHNlIGlmIChpc19tb3Rvcm9sYSkgeworCQlzcGRjaGcoNzIwMEwp OworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5f SU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGcoMTIwMEwpOwor CQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSA0NToK KwkgICAgaWYgKGlzX21vdG9yb2xhKSB7CisJCXNwZGNoZyg1NzYwMEwpOworCQltZG1zdGF0ID0g Q09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10 eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGcoMjQwMEwpOworCQltZG1zdGF0ID0gQ09O TkVDVEVEOworCSAgICB9IGVsc2UgaWYgKG5fVVNSKSB7CisJCXNwZGNoZygxNDQwMEwpOworCQlt ZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9CisJICAgIGJyZWFrOworCSAgY2FzZSA0NjoKKwkg ICAgaWYgKGlzX3JvY2t3ZWxsKQorCSAgICAgIHNwZGNoZygxMjAwTCk7CisJICAgIGVsc2UgaWYg KG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkKKwkgICAg ICBzcGRjaGcoNDgwMEwpOworCSAgICBlbHNlCisJICAgICAgc3BkY2hnKDg4ODBMKTsJCS8qIDc1 LzEyMDAgc3BsaXQgc3BlZWQgKi8KKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJl YWs7CisJICBjYXNlIDQ3OgorCSAgICBpZiAoaXNfcm9ja3dlbGwpCisJICAgICAgc3BkY2hnKDI0 MDBMKTsKKwkgICAgZWxzZSBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBu X0tFRVBJTlRPVUNIKQorCSAgICAgIHNwZGNoZyg3MjAwTCk7CisJICAgIGVsc2UKKwkgICAgICBw cmludGYoIkNPTk5FQ1QgMTIwMC83NSAtIE5vdCBzdXBwb3J0ZWQgYnkgQy1LZXJtaXRcclxuIik7 CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSA0ODoKKwkg ICAgaWYgKGlzX3JvY2t3ZWxsKQorCSAgICAgIHNwZGNoZyg0ODAwTCk7CisJICAgIGVsc2UgaWYg KG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkKKwkgICAg ICBzcGRjaGcoOTYwMEwpOworCSAgICBlbHNlCisJICAgICAgc3BkY2hnKDcyMDBMKTsKKwkgICAg bWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDQ5OgorCSAgICBpZiAo aXNfcm9ja3dlbGwpCisJICAgICAgc3BkY2hnKDcyMDBMKTsKKwkgICAgbWRtc3RhdCA9IENPTk5F Q1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNlIDUwOgkJCS8qIENPTk5FQ1QgRkFTVCAqLworCSAg ICBpZiAoaXNfcm9ja3dlbGwpCisJICAgICAgc3BkY2hnKDk2MDBMKTsKKwkgICAgZWxzZSBpZiAo bXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKQorCSAgICAg IHNwZGNoZygxNDQwMEwpOworCSAgICBtZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsK KwkgIGNhc2UgNTE6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKKwkJbWRtc3Rh dCA9IERfRkFJTEVEOworCQlkaWFsc3RhID0gRElBX05PRFQ7CisJICAgIH0KKwkgICAgYnJlYWs7 CisJICBjYXNlIDUyOgkJCS8qIFJSSU5HICovCisJICAgIGlmIChteW1kbXR5cCA9PSBuX1RFTEVC SVQpCisJICAgICAgaWYgKGRpYWxkcHkpIHByaW50ZigiIFJpbmdpbmcuLi5cclxuIik7CisJICAg IGJyZWFrOworCSAgY2FzZSA1MzoJCQkvKiBESUFMSU5HICovCisJICAgIGlmIChteW1kbXR5cCA9 PSBuX1RFTEVCSVQpCisJICAgICAgaWYgKGRpYWxkcHkpIHByaW50ZigiIERpYWxpbmcuLi5cclxu Iik7CisJICAgIGJyZWFrOworCSAgY2FzZSA1NDoKKwkgICAgaWYgKGlzX3JvY2t3ZWxsKSB7CisJ CXNwZGNoZygxOTIwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYg KG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlz cGRjaGcoMTIwMEwpOworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCSAgICB9IGVsc2UgaWYgKG15 bWRtdHlwID09IG5fVEVMRUJJVCkgeworCQlpZiAoZGlhbGRweSkgcHJpbnRmKCJcclxuIE5vIFBy b21wdHRvbmUuXHJcbiIpOworCQltZG1zdGF0ID0gRF9GQUlMRUQ7CisJCWRpYWxzdGEgPSBESUFf Tk9EVDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNTU6CisJICAgIGlmIChteW1kbXR5 cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKKwkJc3BkY2hnKDI0 MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNh c2UgNTY6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VF UElOVE9VQ0gpIHsKKwkJc3BkY2hnKDQ4MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkg ICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNTc6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0lO VEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gpIHsKKwkJc3BkY2hnKDcyMDBMKTsKKwkJ bWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNTg6CisJ ICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMIHx8IG15bWRtdHlwID09IG5fS0VFUElOVE9VQ0gp IHsKKwkJc3BkY2hnKDk2MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAg ICBicmVhazsKKwkgIGNhc2UgNTk6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0lOVEVMKQkvKiAx MjAwMCAqLworCSAgICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2Fz ZSA2MDoKKwkgICAgaWYgKG15bWRtdHlwID09IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQ SU5UT1VDSCkgeworCQlzcGRjaGcoMTQ0MDBMKTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkg ICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNjQ6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX0lO VEVMKSB7CisJCXNwZGNoZygxMjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0g ZWxzZSBpZiAoaXNfc3VwcmEpIHsKKwkJc3BkY2hnKDI4ODAwTCk7CisJCW1kbXN0YXQgPSBDT05O RUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDY1OgorCSAgICBpZiAobXltZG10 eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJCXNwZGNoZygy NDAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBj YXNlIDY2OgorCSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tF RVBJTlRPVUNIKSB7CisJCXNwZGNoZyg0ODAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJ ICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDY3OgorCSAgICBpZiAobXltZG10eXAgPT0gbl9J TlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSB7CisJCXNwZGNoZyg3MjAwTCk7CisJ CW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDY4Ogor CSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBteW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNI KSB7CisJCXNwZGNoZyg5NjAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkg ICAgYnJlYWs7CisJICBjYXNlIDY5OgorCSAgICBpZiAobXltZG10eXAgPT0gbl9JTlRFTCB8fCBt eW1kbXR5cCA9PSBuX0tFRVBJTlRPVUNIKSAvKiAxMjAwMCAqLworCSAgICAgIG1kbXN0YXQgPSBD T05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2FzZSA3MDoKKwkgICAgaWYgKG15bWRtdHlwID09 IG5fSU5URUwgfHwgbXltZG10eXAgPT0gbl9LRUVQSU5UT1VDSCkgeworCQlzcGRjaGcoMTQ0MDBM KTsKKwkJbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2Ug NzM6CisJICAgIGlmIChteW1kbXR5cCA9PSBuX1VDT01fQVQpIHsKKwkJc3BkY2hnKDExNTIwMEwp OworCQltZG1zdGF0ID0gQ09OTkVDVEVEOworCQlicmVhazsKKwkgICAgfSAvKiBlbHNlIGZhbGwg dGhydSAqLworCSAgICBpZiAobXltZG10eXAgPT0gbl9URUxFQklUKQkvKiBFYXJseSBtb2RlbHMg b25seSAqLworCSAgICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFrOworCSAgY2Fz ZSA4NToKKwkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSIHx8IG15bWRtdHlwID09IG5fVVNSWDIp CisJICAgICAgc3BkY2hnKDE5MjAwTCk7CisJICAgIG1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAg IGJyZWFrOworCSAgY2FzZSA5MToJCQkvKiAyMTYwMCAqLworCSAgY2FzZSA5OToJCQkvKiAyNDAw MCAqLworCSAgY2FzZSAxMDM6CQkJLyogMjY0MDAgKi8KKwkgICAgaWYgKG15bWRtdHlwID09IG5f VVNSWDIpCisJICAgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgYnJlYWs7CisJICBjYXNl IDEwNzoKKwkgICAgaWYgKG15bWRtdHlwID09IG5fVVNSIHx8IG15bWRtdHlwID09IG5fVVNSWDIp IHsKKwkJc3BkY2hnKDI4ODAwTCk7CisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIH0KKwkg ICAgYnJlYWs7CisJICBjYXNlIDE1MToJCQkvKiAzMTIwMDAgKi8KKwkgIGNhc2UgMTU1OgkJCS8q IDMzNjAwMCAqLworCSAgICBpZiAobXltZG10eXAgPT0gbl9VU1JYMikKKwkgICAgICBtZG1zdGF0 ID0gQ09OTkVDVEVEOworCSAgICBicmVhazsKKworI2VuZGlmIC8qIE1JTklESUFMICovCisJICBk ZWZhdWx0OgorI2lmbmRlZiBNSU5JRElBTAorCSAgICBpZiAobXltZG10eXAgPT0gbl9VU1IgfHwg bXltZG10eXAgPT0gbl9VU1JYMiB8fAorCQlpc19oYXllc2hpc3BkIHx8IGlzX3JvY2t3ZWxsKQor I2VuZGlmIC8qIE1JTklESUFMICovCisJICAgICAgaWYgKGkgPiAxMikJCS8qIFRoZXJlIGFyZSBo dW5kcmVkcyBvZiB0aGVtLi4uICovCisJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJICAgIGJyZWFr OworCX0KKyAgICB9CisgICAgaWYgKG1kbXN0YXQgPT0gQ09OTkVDVEVEICYmIG5idWZbal0gIT0g J1wwJykgeworCWlmIChkaWFsZHB5KSB7CisJICAgIHByaW50ZigiXHJcbiIpOworCSAgICBpZiAo bmJ1ZltqXSA9PSAnUicpIHByaW50ZigiIFJFTElBQkxFIik7CisJICAgIGlmIChuYnVmW2pdID09 ICdMJykgcHJpbnRmKCIgTEFQTSIpOworCSAgICBpZiAobmJ1ZltqKzFdID09ICdDJykgcHJpbnRm KCIgQ09NUFJFU1NFRCIpOworCSAgICBwcmludGYoIlxyXG4iKTsKKwl9CisJY2tzdHJuY3B5KGxi dWYsbmJ1ZixMQlVGTCk7CQkvKiAoZm9yIG1lc3NhZ2VzLi4uKSAqLworICAgIH0KK30KKworc3Rh dGljIFZPSUQJCQkJLyogR2V0IEhheWVzIFJlc3VsdCBpbiBXb3JkIG1vZGUgKi8KK2dldGhydygp IHsKKyAgICBjaGFyICpjcHRyLCAqczsKKyAgICBsb25nIGNvbnNwZDsKKworICAgIGlmIChtZG1z cGQgJiYgIW5ldHdvcmspIHsKKwlzID0gbGJ1ZjsKKwl3aGlsZSAoKnMgIT0gJ1wwJyAmJiAqcyAh PSAnQycpIHMrKzsKKwljcHRyID0gKCpzID09ICdDJykgPyBzIDogTlVMTDsKKwljb25zcGQgPSAw TDsKKwlpZiAoKGNwdHIgIT0gTlVMTCkgJiYgIXN0cm5jbXAoY3B0ciwiQ09OTkVDVCAiLDgpKSB7 CisJICAgIGlmICgoaW50KXN0cmxlbihjcHRyKSA8IDkpICAgLyogSnVzdCBDT05ORUNULCAqLwor CSAgICAgIGNvbnNwZCA9IDMwMEw7CQkgLyogdXNlIDMwMCBicHMgKi8KKwkgICAgZWxzZSBpZiAo aXNkaWdpdCgqKGNwdHIrOCkpKSAvKiBub3QgQ09OTkVDVCBGQVNUICovCisJICAgICAgY29uc3Bk ID0gYXRvbChjcHRyICsgOCk7ICAgLyogQ09OTkVDVCBubm5uICovCisJICAgIGlmIChjb25zcGQg IT0gc3BlZWQpIHsKKwkJaWYgKChjb25zcGQgLyAxMEwpID4gMCkgeworCQkgICAgaWYgKHR0c3Nw ZCgoaW50KSAoY29uc3BkIC8gMTBMKSkgPCAwKSB7CisJCQlwcmludGYoIiBDYW4ndCBjaGFuZ2Ug c3BlZWQgdG8gJWxkXHJcbiIsCisJCQkgICAgICAgY29uc3BkKTsKKwkJICAgIH0gZWxzZSB7CisJ CQlzcGVlZCA9IGNvbnNwZDsKKwkJCW1kbXN0YXQgPSBDT05ORUNURUQ7CisJCQlpZiAoICFxdWll dCAmJiAhYmFja2dyZCApCisJCQkgIHByaW50ZigiIFNwZWVkIGNoYW5nZWQgdG8gJWxkXHJcbiIs CisJCQkJIGNvbnNwZCk7CisJCSAgICB9CisJCX0KKwkgICAgfSAvKiBFeHBhbmRlZCB0byBoYW5k bGUgYW55IGNvbmNlaXZhYmxlIHNwZWVkICovCisJfQorICAgIH0KKyNpZm5kZWYgTUlOSURJQUwK KyAgICBpZiAobXltZG10eXAgPT0gbl9URUxFQklUKSB7CisJaWYgKGRpZHdlZ2V0KGxidWYsIkNP Tk5FQ1QgRkFTVC9LRVJNIikpIHsKKwkgICAgbWRtc3RhdCA9IENPTk5FQ1RFRDsKKwkgICAgaWYg KGRpYWxkcHkpIHByaW50ZigiRkFTVC9LRVJNICIpOworCSAgICByZXR1cm47CisJfQorICAgIH0K KyNlbmRpZiAvKiBNSU5JRElBTCAqLworICAgIGlmIChkaWR3ZWdldChsYnVmLCJSUklORyIpIHx8 CisJZGlkd2VnZXQobGJ1ZiwiUklOR0lORyIpIHx8CisJZGlkd2VnZXQobGJ1ZiwiRElBTElORyIp KSB7CisJbWRtc3RhdCA9IDA7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJDT05ORUNU IikpIHsKKwltZG1zdGF0ID0gQ09OTkVDVEVEOworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1 ZiwiT0siKSkgeworCWlmIChwYXJ0aWFsKSB7CisJICAgIG1kbXN0YXQgPSBEX1BBUlRJQUw7CisJ fSBlbHNlIHsKKwkgICAgbWRtc3RhdCA9IERfRkFJTEVEOworCSAgICBkaWFsc3RhID0gRElBX0VS UjsKKwl9CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTyBDQVJSSUVSIikpIHsKKwlt ZG1zdGF0ID0gRF9GQUlMRUQ7CisJZGlhbHN0YSA9IERJQV9OT0NBOworICAgIH0gZWxzZSBpZiAo ZGlkd2VnZXQobGJ1ZiwiTk8gRElBTFRPTkUiKSkgeworCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwlk aWFsc3RhID0gRElBX05PRFQ7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJOTyBESUFM IFRPTkUiKSkgeworCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX05PRFQ7Cisg ICAgfSBlbHNlIGlmIChkaWR3ZWdldChsYnVmLCJCVVNZIikpIHsKKwltZG1zdGF0ID0gRF9GQUlM RUQ7CisJZGlhbHN0YSA9IERJQV9CVVNZOworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1Ziwi Tk8gQU5TV0VSIikpIHsKKwltZG1zdGF0ID0gRF9GQUlMRUQ7CisJZGlhbHN0YSA9IERJQV9OT0FO OworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiVk9JQ0UiKSkgeworCW1kbXN0YXQgPSBE X0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX1ZPSUM7CisgICAgfSBlbHNlIGlmIChkaWR3ZWdldChs YnVmLCJWQ09OIikpIHsKKwltZG1zdGF0ID0gRF9GQUlMRUQ7CisJZGlhbHN0YSA9IERJQV9WT0lD OworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTk8gUFJPTVBUIFRPTkUiKSkgeworCW1k bXN0YXQgPSBEX0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX05PRFQ7CisgICAgfSBlbHNlIGlmIChk aWR3ZWdldChsYnVmLCJSRU1PVEUgQUNDRVNTIEZBSUxFRCIpKSB7CisJbWRtc3RhdCA9IERfRkFJ TEVEOworCWRpYWxzdGEgPSBESUFfTk9DQTsKKyAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYs IkZBWCIpKSB7CisJbWRtc3RhdCA9IERfRkFJTEVEOworCWRpYWxzdGEgPSBESUFfRkFYOworICAg IH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiV0FJVCAtIENPTk5FQ1RJTkciKSB8fAorCSAgICAg ICBkaWR3ZWdldChsYnVmLCJXQUlULUNPTk5FQ1RJTkciKSkgeyAvKiBBVCZUIFNUVS1JSUkgMTl4 eCAqLworCW1kbXN0YXQgPSAwOworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiREVMQVlF RCIpKSB7CisJbWRtc3RhdCA9IERfRkFJTEVEOworCWRpYWxzdGEgPSBESUFfREVMQTsKKyAgICB9 IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIkJMQUNLTElTVEVEIikpIHsKKwltZG1zdGF0ID0gRF9G QUlMRUQ7CisJZGlhbHN0YSA9IERJQV9CTENLOworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1 ZiwiQ09NUFJFU1NJT04iKSkgeworCW1kbXN0YXQgPSAwOworICAgIH0gZWxzZSBpZiAoZGlkd2Vn ZXQobGJ1ZiwiUFJPVE9DT0wiKSkgeworCW1kbXN0YXQgPSAwOworICAgIH0gZWxzZSBpZiAoZGlk d2VnZXQobGJ1ZiwiRElBTCBMT0NLRUQiKSkgeyAvKiBHZXJtYW55LCBBdXN0cmlhLCBTY2h3ZWl6 ICovCisJbWRtc3RhdCA9IERfRkFJTEVEOworCWRpYWxzdGEgPSBESUFfQkxDSzsKKyAgICB9IGVs c2UgaWYgKCBkaWR3ZWdldChsYnVmLCJSSU5HIikgfHwKKwkgICAgICAgIGRpZHdlZ2V0KGxidWYs IlJJTkcxIikgfHwgLyogRGlzdGluY3RpdmUgUmluZyAxICovCisJCWRpZHdlZ2V0KGxidWYsIlJJ TkcyIikgfHwgLyogRGlzdGluY3RpdmUgUmluZyAyICovCisJCWRpZHdlZ2V0KGxidWYsIlJJTkcz IikgKSB7CisJbWRtc3RhdCA9IChmdW5jX2NvZGUgPT0gMCkgPyBEX0ZBSUxFRCA6IDA7CisJZGlh bHN0YSA9IERJQV9SSU5HOworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRVJST1IiKSkg eworCW1kbXN0YXQgPSBEX0ZBSUxFRDsKKwlkaWFsc3RhID0gRElBX0VSUjsKKyAgICB9IGVsc2Ug aWYgKGRpZHdlZ2V0KGxidWYsIkNBUlJJRVIiKSkgeyAvKiBCb2NhIC8gUm9ja3dlbGwgZmFtaWx5 ICovCisjaWZkZWYgQ09NTUVOVAorCWlmIChpc19yb2Nrd2VsbCkKKyNlbmRpZiAvKiBDT01NRU5U ICovCisJICBtZG1zdGF0ID0gMDsKKyNpZmRlZiBDT01NRU5UCisJLyogRG9lcyBDQVJSSUVSIGV2 ZXIgbWVhbiB0aGUgc2FtZSBhcyBDT05ORUNUPyAqLworCWVsc2UKKwkgIG1kbXN0YXQgPSBDT05O RUNURUQ7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1 ZiwiREFUQSIpKSB7CS8qIEJvY2EgLyBSb2Nrd2VsbCBmYW1pbHkgKi8KKwkvKiBUaGlzIG1lc3Nh Z2UgaXMgc2VudCB3aGVuIHRoZSBtb2RlbSBpcyBpbiBGQVggbW9kZSAgKi8KKwkvKiBTbyBzZXR0 aW5nIHRoaXMgdG8gQ09OTkVDVEVEIG1heSBub3QgYmUgYXBwcm9wcmlhdGUgKi8KKwkvKiBXZSBt dXN0IHNlbmQgQVRPXDAxNSB0byB0aGUgbW9kZW0gaW4gcmVzcG9uc2UgICAgICAgKi8KKwkvKiBU aGVuIHdlIHdpbGwgZ2V0IGEgQ09OTkVDVEVEIG1lc3NhZ2UgICAgICAgICAgICAgICAgKi8KKwlt ZG1zdGF0ID0gQ09OTkVDVEVEOworICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiRElHSVRB TCBMSU5FIikpIHsKKwltZG1zdGF0ID0gRF9GQUlMRUQ7CisJZGlhbHN0YSA9IERJQV9ESUdJOwor ICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiREFURSIpKSB7IC8qIENhbGxlciBJRCBEYXRl ICovCisJZGVidWcoRjExMCwiQ0FMTElEIERBVEUiLGxidWYsMCk7CisJLyogRm9ybWF0IGlzICJE QVRFICAgICA9ICAgTU1ERCIgICAqLworCW1ha2VzdHIoJmNhbGxpZF9kYXRlLGxidWYpOworICAg IH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiVElNRSIpKSB7IC8qIENhbGxlciBJRCBUaW1lICov CisJLyogRm9ybWF0IGlzICJUSU1FICAgICA9ICAgSEhNTSIgICAqLworCWRlYnVnKEYxMTAsIkNB TExJRCBUSU1FIixsYnVmLDApOworCW1ha2VzdHIoJmNhbGxpZF90aW1lLGxidWYpOworICAgIH0g ZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTkFNRSIpKSB7IC8qIENhbGxlciBJRCBOYW1lICovCisJ LyogRm9ybWF0IGlzICJOQU1FICAgICA9ICAgPGxpc3RpbmcgbmFtZT4iICAgKi8KKwlkZWJ1ZyhG MTEwLCJDQUxMSUQgTkFNRSIsbGJ1ZiwwKTsKKwltYWtlc3RyKCZjYWxsaWRfbmFtZSxsYnVmKTsK KyAgICB9IGVsc2UgaWYgKGRpZHdlZ2V0KGxidWYsIk5NQlIiKSkgeyAvKiBDYWxsZXIgSUQgTnVt YmVyICovCisJLyogRm9ybWF0IGlzICJOTUJSICAgICA9ICAgPG51bWJlcj4sICdQJyBvciAnTyci ICAgKi8KKwkvKiAJJ1AnIG1lYW5zIFByaXZhY3kgUmVxdWVzdGVkIAkJICAgKi8KKwkvKiAgICAg ICdPJyBtZWFucyBPdXQgb2YgU2VydmljZSBvciBOb3QgYXZhaWxhYmxlICAqLworCWRlYnVnKEYx MTAsIkNBTExJRCBOTUJSIixsYnVmLDApOworCW1ha2VzdHIoJmNhbGxpZF9ubWJyLGxidWYpOwor ICAgIH0gZWxzZSBpZiAoZGlkd2VnZXQobGJ1ZiwiTUVTRyIpKSB7IC8qIENhbGxlciBJRCBVbnJl Y29nbml6ZWQgTWVzc2FnZSAqLworCS8qIEZvcm1hdCBpcyAiTUVTRyAgICAgPSAgIDx0YWc+PGxl bmd0aD48ZGF0YT48Y2hlY2tzdW0+IiAgICovCisJZGVidWcoRjExMCwiQ0FMTElEIE1FU0ciLGxi dWYsMCk7CisJbWFrZXN0cigmY2FsbGlkX21lc2csbGJ1Zik7CisgICAgfQorfQorCisvKiBNYXli ZSBoYW5nIHVwIHRoZSBwaG9uZSwgZGVwZW5kaW5nIG9uIHZhcmlvdXMgU0VUIERJQUwgcGFyYW1l dGVycy4gKi8KKworaW50CitkaWFsaHVwKCkgeworICAgIGludCB4ID0gMDsKKyAgICBpZiAoZGlh bGhuZyAmJiBkaWFsc3RhICE9IERJQV9QQVJUKSB7IC8qIERJQUwgSEFOR1VQIE9OPyAqLworCXgg PSBtZG1odXAoKTsJCQkvKiBUcnkgbW9kZW0tc3BlY2lmaWMgbWV0aG9kIGZpcnN0ICovCisJZGVi dWcoRjEwMSwiZGlhbGh1cCBtZG1odXAiLCIiLHgpOworCWlmICh4ID4gMCkgewkJCS8qIElmIGl0 IHdvcmtlZCwgKi8KKwkgICAgZGlhbHN0YSA9IERJQV9IVVA7CisJICAgIGlmIChkaWFsZHB5KQor CSAgICAgIHByaW50ZigiIE1vZGVtIGhhbmd1cCBPS1xyXG4iKTsgLyogZmluZS4gKi8KKwl9IGVs c2UgaWYgKG5ldHdvcmsJCS8qIElmIHdlJ3JlIHRlbG5ldHRlZCB0byAqLworI2lmZGVmIFROX0NP TVBPUlQKKyAgICAgICAgICAgICAgICAgICAmJiAhaXN0bmNvbXBvcnQoKSAgICAvKiAod2l0aG91 dCBSRkMgMjIxNykgICAgKi8KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgICAgICAgICAg ICAgICAgKSB7CQkKKwkgICAgZGlhbHN0YSA9IERJQV9IQU5HOworCSAgICBpZiAoZGlhbGRweSkJ CS8qIGEgbW9kZW0gc2VydmVyLCBqdXN0IHByaW50IGEgbXNnICovCisJICAgICAgcHJpbnRmKCIg V0FSTklORyAtIG1vZGVtIGhhbmd1cCBmYWlsZWRcclxuIik7IC8qIGRvbid0IGhhbmd1cCEgKi8K KwkgICAgcmV0dXJuKDApOworCX0gZWxzZSB7CQkJLyogT3RoZXJ3aXNlICovCisJICAgIHggPSB0 dGhhbmcoKTsJCS8qIFRlbGwgdGhlIE9TIHRvIHR1cm4gb2ZmIERUUi4gKi8KKwkgICAgaWYgKHgg PiAwKSB7CQkvKiBZZXMsIHRlbGwgcmVzdWx0cyBmcm9tIHR0aGFuZygpICovCisJCWRpYWxzdGEg PSBESUFfSFVQOworCQlpZiAoZGlhbGRweSkgcHJpbnRmKCIgSGFuZ3VwIE9LXHJcbiIpOworCSAg ICB9IGVsc2UgaWYgKHggPT0gMCkgeworCQlpZiAoZGlhbGRweSkgcHJpbnRmKCIgSGFuZ3VwIHNr aXBwZWRcclxuIik7CisJICAgIH0gZWxzZSB7CisJCWRpYWxzdGEgPSBESUFfSEFORzsKKwkJaWYg KGRpYWxkcHkpIHBlcnJvcigiIEhhbmd1cCBlcnJvciIpOworCSAgICB9CisJICAgIHR0Zmx1aSgp OworCX0KKyAgICB9IGVsc2UgaWYgKGRpYWxkcHkpIHByaW50ZigiIEhhbmd1cCBza2lwcGVkXHJc biIpOyAvKiBESUFMIEhBTkdVUCBPRkYgKi8KKyAgICByZXR1cm4oeCk7Cit9CisKKy8qCisgIE0g RCBNIEggVSBQICAtLQorCisgIFNlbmRzIGVzY2FwZSBzZXF1ZW5jZSB0byBtb2RlbSwgdGhlbiBz ZW5kcyBpdHMgaGFuZ3VwIGNvbW1hbmQuICBSZXR1cm5zOgorICAgMDogSWYgbW9kZW0gdHlwZSBp cyAwIChkaXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb24pLAorICAgICAgb3IgaWYgbW9kZW0gdHlwZSBp cyA8IDAgKG5ldHdvcmsgY29ubmVjdGlvbiksCisgICAgICBvciBpZiBubyBhY3Rpb24gdGFrZW4g YmVjYXVzZSBESUFMIE1PREVNLUhBTkdVUCBpcyBPRkYpCisgICAgICAgIG9yIGJlY2F1c2Ugbm8g aGFuZ3VwIHN0cmluZyBmb3IgY3VycmVudCBtb2RlbSB0eXBlLAorICAgICAgb3IgQy1LZXJtaXQg aXMgaW4gcmVtb3RlIG1vZGUsCisgICAgICBvciBpZiBhY3Rpb24gdGFrZW4gYnV0IHRoZXJlIHdh cyBubyBwb3NpdGl2ZSByZXNwb25zZSBmcm9tIG1vZGVtOworICAgMTogU3VjY2VzczogbW9kZW0g aXMgaW4gY29tbWFuZCBzdGF0ZSBhbmQgYWNrbm93bGVkZ2VkIHRoZSBoYW5ndXAgY29tbWFuZDsK KyAgLTE6IE9uIG1vZGVtIGNvbW1hbmQgZXJyb3IuCisqLworaW50CittZG1odXAoKSB7CisjaWZk ZWYgTURNSFVQCisgICAgaW50IG0sIHggPSAwOworICAgIGludCB4cGFyaXR5OworICAgIGludCBz YXZjYXJyOworICAgIGV4dGVybiBpbnQgdHRjYXJyOworICAgIGNoYXIgKnMsICpwLCBjOworICAg IE1ETUlORiAqIG1wID0gTlVMTDsKKworICAgIGRlYnVnKEYxMDEsIm1kbWh1cCBkaWFsbWh1Iiwi IixkaWFsbWh1KTsgLyogTU9ERU0tSEFOR1VQIE1FVEhPRCAqLworICAgIGRlYnVnKEYxMDEsIm1k bWh1cCBsb2NhbCIsIiIsbG9jYWwpOworCisgICAgaWYgKGRpYWxtaHUgPT0gMCB8fCBsb2NhbCA9 PSAwKQkvKiBJZiBESUFMIE1PREVNLUhBTkdVUCBpcyBPRkYsICovCisgICAgICByZXR1cm4oMCk7 CQkJLyogIG9yIG5vdCBpbiBsb2NhbCBtb2RlLCBmYWlsLiAqLworCisgICAgZGVidWcoRjEwMSwi bWRtaHVwIGRpYWxzdGEiLCIiLGRpYWxzdGEpOworICAgIGRlYnVnKEYxMDEsIm1kbWh1cCBtZG1z ZXQiLCIiLG1kbXNldCk7CisKKyAgICBpZiAoZGlhbHN0YSAhPSBESUFfT0sgJiYgIW1kbXNldCkJ LyogSXQncyBub3QgYSBkaWFsZWQgY29ubmVjdGlvbiAqLworICAgICAgcmV0dXJuKDApOworCisj aWZkZWYgQ0tfVEFQSQorICAgIGlmICh0dHRhcGkgJiYgIXRhcGlwYXNzKQkJLyogRG9uJ3QgaGFu Z3VwIGlmIHVzaW5nIFRBUEkgKi8KKyAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBDS19UQVBJ ICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogTm8sIHdlIHN0aWxsIG5lZWQgdGhpcyBmb3Ig bW9kZW1zIHRoYXQgaWdub3JlIERUUiAqLworICAgIGlmIChteW1kbXR5cCA9PSBuX0dFTkVSSUMg JiYgIW5ldHdvcmspCisgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisg ICAgZGVidWcoRjEwMSwibWRtaHVwIGRpYWxlc2MiLCIiLGRpYWxlc2MpOworICAgIGlmIChkaWFs ZXNjIDwgMCkKKyAgICAgIHJldHVybigwKTsJCQkvKiBObyBtb2RlbSBlc2NhcGUtY2hhcmFjdGVy LCBmYWlsLiAqLworCisgICAgc2F2Y2FyciA9IHR0Y2FycjsKKyAgICB0dGNhcnIgPSBDQVJfT0ZG OworICAgIHggPSB0dGNoaygpOworICAgIHR0Y2FyciA9IHNhdmNhcnI7CisgICAgZGVidWcoRjEw MSwibWRtaHVwIHR0Y2hrIiwiIix4KTsKKyAgICBpZiAoeCA8IDApCQkJCS8qIFRoZXJlIGFwcGVh cnMgdG8gYmUgbm8gY29ubmVjdGlvbiAqLworICAgICAgcmV0dXJuKDApOworICAgIHggPSAwOwor CisjaWZkZWYgT1MyCisvKgorICBJbiBPUy8yLCBpZiBDQVJSSUVSIGlzIE9GRiwgYW5kIHRoZXJl IGlzIGluZGVlZCBubyBjYXJyaWVyIHNpZ25hbCwgYW55CisgIGF0dGVtcHQgdG8gZG8gaS9vIGF0 IHRoaXMgcG9pbnQgY2FuIGhhbmcgdGhlIHByb2dyYW0uICBUaGlzIG1pZ2h0IGJlIHRydWUKKyAg Zm9yIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIHRvby4KKyovCisgICAgaWYgKCFuZXR3b3JrCQkJ LyogTm90IGEgbmV0d29yayBjb25uZWN0aW9uICovCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAg ICB8fCBpc3RuY29tcG9ydCgpCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCSkgeworCW0gPSB0 dGdtZG0oKTsJCQkvKiBHZXQgbW9kZW0gc2lnbmFscyAqLworCWlmICgobSA+IC0xKSAmJiAobSAm IEJNX0RDRCA9PSAwKSkgLyogQ2hlY2sgZm9yIGNhcnJpZXIgKi8KKwkgIHJldHVybigwKTsJCQkv KiBObyBjYXJyaWVyLCBza2lwIHRoZSByZXN0ICovCisgICAgfQorI2VuZGlmIC8qIE9TMiAqLwor CisgICAgZGVidWcoRjExMSwibWRtaHVwIG5ldHdvcmsiLHR0bmFtZSxuZXR3b3JrKTsKKyAgICBk ZWJ1ZyhGMTAxLCJtZG1odXAgbXltZG10eXAiLCIiLG15bWRtdHlwKTsKKyAgICBkZWJ1ZyhGMTAx LCJtZG1odXAgbWRtdHlwIiwiIixtZG10eXApOworICAgIC8qIEluIGNhc2Ugb2YgSEFOR1VQIGJl Zm9yZSBESUFMICovCisgICAgaWYgKG5ldHdvcmsgJiYgbWRtdHlwIDwgMSkJCS8qIFNFVCBIT1NU IGJ1dCBubyBzdWJzZXF1ZW50ICovCisgICAgICByZXR1cm4oMCk7CQkJLyogU0VUIE1PREVNIFRZ UEUuLi4gKi8KKyAgICBpZiAobXltZG10eXAgPT0gMCAmJiBtZG10eXAgPiAwKQorICAgICAgbXlt ZG10eXAgPSBtZG10eXA7CisgICAgaWYgKG15bWRtdHlwIDwgMSkJCQkvKiBOb3QgdXNpbmcgYSBt b2RlbSAqLworICAgICAgcmV0dXJuKDApOworICAgIGlmIChteW1kbXR5cCA+IDApCQkJLyogQW4g YWN0dWFsIG1vZGVtLi4uICovCisgICAgICBtcCA9IG1vZGVtcFtteW1kbXR5cF07CisgICAgaWYg KCFtcCkgewkJCQkvKiBHZXQgcG9pbnRlciB0byBpdHMgTURNSU5GIHN0cnVjdCAqLworCWRlYnVn KEYxMDAsIm1kbWh1cCBubyBNRE1JTkYiLCIiLDApOworCXJldHVybigwKTsKKyAgICB9CisgICAg bWRtY2FwYXMgPSBkaWFsY2FwYXMgPyBkaWFsY2FwYXMgOiBtcC0+Y2FwYXM7CisgICAgeHhfb2sg PSBtcC0+b2tfZm47CQkJLyogUG9pbnRlciB0byByZXNwb25zZSByZWFkZXIgKi8KKworICAgIHMg PSBkaWFsaGNtZCA/IGRpYWxoY21kIDogbXAtPmh1cF9zdHI7IC8qIEdldCBoYW5ndXAgY29tbWFu ZCAqLworICAgIGlmICghcykgcyA9ICIiOworICAgIGRlYnVnKEYxMTAsIm1kbWh1cCBodXBfc3Ry IixzLDApOworICAgIGlmICghKnMpIHJldHVybigwKTsJCQkvKiBJZiBub25lLCBmYWlsLiAqLwor CisgICAgaWYgKHR0cGt0KHNwZWVkLEZMT19ESUFMLHBhcml0eSkgPCAwKSAvKiBDb25kaXRpb24g bGluZSBmb3IgZGlhbGluZyAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIHhwYXJpdHkgPSBw YXJpdHk7CQkJLyogU2V0IFBBUklUWSB0byBOT05FIHRlbXBvcmFyaWx5ICovCisgICAgcGFyaXR5 ID0gMDsKKworICAgIC8qIEluIGNhc2UgdGhleSBnYXZlIGEgU0VUIE1PREVNIEVTQ0FQRSBjb21t YW5kIHJlY2VudGx5Li4uICovCisKKyAgICBpZiAoZGlhbGVzYyA8IDAgfHwgZGlhbGVzYyA+IDEy NykKKyAgICAgIGMgPSBOVUw7CisgICAgZWxzZQorICAgICAgYyA9IChjaGFyKSAoZGlhbGVzYyA/ IGRpYWxlc2MgOiBtcC0+ZXNjX2NoYXIpOworCisgICAgaWYgKG1kbWNhcGFzICYgQ0tEX0FUKSB7 CQkvKiBIYXllcyBjb21wYXRpYmxlICovCisJZXNjYnVmWzBdID0gYzsKKwllc2NidWZbMV0gPSBj OworCWVzY2J1ZlsyXSA9IGM7CisJZXNjYnVmWzNdID0gTlVMOworICAgIH0gZWxzZSB7CQkJCS8q IE90aGVyICovCisJZXNjYnVmWzBdID0gYzsKKwllc2NidWZbMV0gPSBOVUw7CisgICAgfQorICAg IGRlYnVnKEYxMTAsIm1kbWh1cCBlc2NidWYiLGVzY2J1ZiwwKTsKKyAgICBpZiAoZXNjYnVmWzBd KSB7CQkJLyogSGF2ZSBlc2NhcGUgc2VxdWVuY2U/ICovCisJZGVidWcoRjEwMSwibWRtaHVwIGVz Y190aW1lIiwwLG1wLT5lc2NfdGltZSk7CisJaWYgKG1wLT5lc2NfdGltZSkJCS8qIElmIHdlIGhh dmUgYSBndWFyZCB0aW1lICovCisJICBtc2xlZXAobXAtPmVzY190aW1lKTsJCS8qIFBhdXNlIGZv ciBndWFyZCB0aW1lICovCisJZGVidWcoRjEwMCwibWRtaHVwIHBhdXNlIDEgT0siLCIiLDApOwor CisjaWZkZWYgTkVUQ09OTgkJCQkvKiBTZW5kIG1vZGVtJ3MgZXNjYXBlIHNlcXVlbmNlICovCisJ aWYgKG5ldHdvcmspIHsJCQkvKiBNdXN0IGNhdGNoIGVycm9ycyBoZXJlLiAqLworCSAgICBpZiAo dHRvbCgoQ0hBUiAqKWVzY2J1ZiwoaW50KXN0cmxlbigoY2hhciAqKWVzY2J1ZikpIDwgMCkgewor CQlwYXJpdHkgPSB4cGFyaXR5OworCQlyZXR1cm4oLTEpOworCSAgICB9CisJICAgIGRlYnVnKEYx MTAsIm1kbWh1cCB0dHNsb3cgbmV0IG9rIixlc2NidWYsMCk7CisJfSBlbHNlIHsKKyNlbmRpZiAv KiBORVRDT05OICovCisJICAgIHR0c2xvdygoY2hhciAqKWVzY2J1Zix3cik7IC8qIFNlbmQgZXNj YXBlIHNlcXVlbmNlICovCisJICAgIGRlYnVnKEYxMTAsIm1kbWh1cCB0dHNsb3cgb2siLGVzY2J1 ZiwwKTsKKyNpZmRlZiBORVRDT05OCisJfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworCWlmICht cC0+ZXNjX3RpbWUpCQkvKiBQYXVzZSBmb3IgZ3VhcmQgdGltZSBhZ2FpbiAqLworCSAgbXNsZWVw KG1wLT5lc2NfdGltZSk7CisJZWxzZQorCSAgbXNsZWVwKDUwMCk7CQkJLyogV2FpdCBoYWxmIGEg c2VjIGZvciBlY2hvZXMuICovCisJZGVidWcoRjEwMCwibWRtaHVwIHBhdXNlIDEgT0siLCIiLDAp OworI2lmZGVmIENPTU1FTlQKKwl0dGZsdWkoKTsJCQkvKiBGbHVzaCByZXNwb25zZSBvciBlY2hv LCBpZiBhbnkgKi8KKwlkZWJ1ZyhGMTAwLCJtZG1odXAgdHRmbHVpIE9LIiwiIiwwKTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgfQorICAgIHR0c2xvdyhzLHdyKTsJCQkvKiBOb3cgU2VuZCBo YW5ndXAgc3RyaW5nICovCisgICAgZGVidWcoRjExMCwibWRtaHVwIHR0c2xvdyBvayIscywwKTsK Ky8qCisgIFRoaXMgaXMgbm90IGV4YWN0bHkgcmlnaHQsIGJ1dCBpdCB3b3Jrcy4KKyAgSWYgd2Ug YXJlIG9ubGluZToKKyAgICB0aGUgbW9kZW0gc2F5cyBPSyB3aGVuIGl0IGdldHMgdGhlIGVzY2Fw ZSBzZXF1ZW5jZSwKKyAgICBhbmQgaXQgc2F5cyBOTyBDQVJSSUVSIHdoZW4gaXQgZ2V0cyB0aGUg aGFuZ3VwIGNvbW1hbmQuCisgIElmIHdlIGFyZSBvZmZsaW5lOgorICAgIHRoZSBtb2RlbSBkb2Vz IE5PVCBzYXkgT0sgKG9yIGFueXRoaW5nIGVsc2UpIHdoZW4gaXQgZ2V0cyB0aGUgZXNjIHNlcXVl bmNlLAorICAgIGJ1dCBpdCBET0VTIHNheSBPSyAoYW5kIG5vdCBOTyBDQVJSSUVSKSB3aGVuIGl0 IGdldHMgdGhlIGhhbmd1cCBjb21tYW5kLgorICBTbyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHNo b3VsZCByZWFkIHRoZSBPSyBpbiBib3RoIGNhc2VzLgorICBPZiBjb3Vyc2UsIHRoaXMgaXMgc29t ZXdoYXQgSGF5ZXMtc3BlY2lmaWMuLi4KKyovCisgICAgaWYgKHh4X29rKSB7CQkJLyogTG9vayBm b3IgT0sgcmVzcG9uc2UgKi8KKwlkZWJ1ZyhGMTAwLCJtZG1odXAgY2FsbGluZyByZXNwb25zZSBm dW5jdGlvbiIsIiIsMCk7CisJeCA9ICgqeHhfb2spKDMsMSk7CQkvKiBHaXZlIGl0IDMgc2Vjb25k cywgYmUgc3RyaWN0LiAqLworCWRlYnVnKEYxMDEsIm1kbWh1cCBoYW5ndXAgcmVzcG9uc2UiLCIi LHgpOworCW1zbGVlcCg1MDApOwkJCS8qIFdhaXQgaGFsZiBhIHNlYyAqLworCXR0Zmx1aSgpOwkJ CS8qIEdldCByaWQgb2YgTk8gQ0FSUklFUiwgaWYgYW55ICovCisgICAgfSBlbHNlIHsJCQkJLyog Tm8gT0sgZnVuY3Rpb24sICovCisJeCA9IDE7CQkJCS8qIHNvIGFzc3VtZSBpdCB3b3JrZWQgKi8K KwlkZWJ1ZyhGMTAxLCJtZG1odXAgbm8gb2tfZm4iLCIiLHgpOworICAgIH0KKyAgICBwYXJpdHkg PSB4cGFyaXR5OwkJCS8qIFJlc3RvcmUgcHJldmFpbGluZyBwYXJpdHkgKi8KKyAgICByZXR1cm4o eCk7CQkJCS8qIFJldHVybiBPSyBmdW5jdGlvbidzIHJldHVybiBjb2RlLiAqLworCisjZWxzZSAg LyogTURNSFVQIG5vdCBkZWZpbmVkLiAqLworCisgICAgZGVidWcoRjEwMCwibWRtaHVwIE1ETUhV UCBub3QgZGVmaW5lZCIsIiIsMCk7CisgICAgcmV0dXJuKDApOwkJCQkvKiBBbHdheXMgZmFpbC4g Ki8KKworI2VuZGlmIC8qIE1ETUhVUCAqLworfQorCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNlbHNl IC8qIE5PRElBTCAqLworCitpbnQgbWRtdHlwID0gMDsJCQkJLyogRGVmYXVsdCBtb2RlbSB0eXBl ICovCisKK2ludAkJCQkJLyogVG8gYWxsb3cgTk9ESUFMIHZlcnNpb25zIHRvICovCittZG1odXAo KSB7CQkJCS8qIGNhbGwgbWRtaHVwKCksIHNvIGNhbGxzIHRvICAqLworICAgIHJldHVybigwKTsJ CQkJLyogbWRtaHVwKCkgbmVlZCBub3QgYmUgd2l0aGluICovCit9CQkJCQkvKiAjaWZuZGVmIE5P RElBTCBjb25kaXRpb25hbHMgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNlbHNlCitpbnQgbWRt dHlwID0gMDsJCQkJLyogRGVmYXVsdCBtb2RlbSB0eXBlICovCisjZW5kaWYgLyogTk9MT0NBTCAq LwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1 ZmlvLmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWZpby5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YmZhYWUKLS0tIC9kZXYvbnVsbAor KysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdWZpby5jCkBAIC0w LDAgKzEsODU0NSBAQAorLyogQyBLIFUgRiBJIE8gIC0tICBLZXJtaXQgZmlsZSBzeXN0ZW0gc3Vw cG9ydCBmb3IgVU5JWCwgQWVnaXMsIGFuZCBQbGFuIDkgKi8KKworI2RlZmluZSBDS19OT05CTE9D SyAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSB6b3V0ZHVtcCgpICovCisKKyNpZmRlZiBhZWdp cworY2hhciAqY2t6diA9ICJBZWdpcyBGaWxlIHN1cHBvcnQsIDkuMC4yMTYsIDIwIEF1ZyAyMDEx IjsKKyNlbHNlCisjaWZkZWYgUGxhbjkKK2NoYXIgKmNrenYgPSAiUGxhbiA5IEZpbGUgc3VwcG9y dCwgOS4wLjIxNiwgMjAgQXVnIDIwMTEiOworI2Vsc2UKK2NoYXIgKmNrenYgPSAiVU5JWCBGaWxl IHN1cHBvcnQsIDkuMC4yMTYsIDIwIEF1ZyAyMDExIjsKKyNlbmRpZiAvKiBQbGFuOSAqLworI2Vu ZGlmIC8qIGFlZ2lzICovCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJp YS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5c3Rl bXMsIE5ldyBZb3JrIENpdHksCisgIGFuZCBvdGhlcnMgbm90ZWQgaW4gdGhlIGNvbW1lbnRzIGJl bG93LiAgTm90ZTogQ1VDQ0EgPSBQcmV2aW91cyBuYW1lIG9mCisgIENvbHVtYmlhIFVuaXZlcnNp dHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcy4gIE5vdGU6IEFjSVMgPSBQcmV2aW91cwor ICBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IEluZm9ybWF0aW9uIFRlY2hub2xvZ3kuCisKKyAgQ29w eXJpZ2h0IChDKSAxOTg1LCAyMDExLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNp dHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNl ZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4 dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4K KyovCisKKy8qCisgIE5PVEUgVE8gQ09OVFJJQlVUT1JTOiBUaGlzIGZpbGUsIGFuZCBhbGwgdGhl IG90aGVyIEMtS2VybWl0IGZpbGVzLCBtdXN0IGJlCisgIGNvbXBhdGlibGUgd2l0aCBDIHByZXBy b2Nlc3NvcnMgdGhhdCBzdXBwb3J0IG9ubHkgI2lmZGVmLCAjZWxzZSwgI2VuZGlmLAorICAjZGVm aW5lLCBhbmQgI3VuZGVmLiAgUGxlYXNlIGRvIG5vdCB1c2UgI2lmLCBsb2dpY2FsIG9wZXJhdG9y cywgb3Igb3RoZXIKKyAgcHJlcHJvY2Vzc29yIGZlYXR1cmVzIGluIGFueSBvZiB0aGUgcG9ydGFi bGUgQy1LZXJtaXQgbW9kdWxlcy4gIFlvdSBjYW4sCisgIG9mIGNvdXJzZSwgdXNlIHRoZXNlIGNv bnN0cnVjdGlvbnMgaW4gcGxhdGZvcm0tc3BlY2lmaWMgbW9kdWxlcyB3aGVyZSB5b3UKKyAga25v dyB0aGV5IGFyZSBzdXBwb3J0ZWQuCisqLworLyogSW5jbHVkZSBGaWxlcyAqLworCisjaWZkZWYg TUlOSVgyCisjZGVmaW5lIF9NSU5JWAorI2VuZGlmIC8qIE1JTklYMiAqLworCisjaW5jbHVkZSAi Y2tjc3ltLmgiCisjaW5jbHVkZSAiY2tjZGViLmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCisKKyNp Zm5kZWYgTk9DU0VUUworI2luY2x1ZGUgImNrY3hsYS5oIgorI2VuZGlmIC8qIE5PQ1NFVFMgKi8K KworLyogVG8gYXZvaWQgcHVsbGluZyBpbiBhbGwgb2YgY2t1dXNyLmggc28gd2UgY29weSB0aGUg ZmV3IG5lZWRlZCBwcm90b3R5cGVzICovCisKK3N0cnVjdCBtdGFiIHsJCQkJLyogTWFjcm8gdGFi bGUsIGxpa2Uga2V5d29yZCB0YWJsZSAqLworICAgIGNoYXIgKmt3ZDsJCQkJLyogQnV0IHdpdGgg cG9pbnRlcnMgZm9yIHZhbHMgKi8KKyAgICBjaGFyICptdmFsOwkJCQkvKiBpbnN0ZWFkIG9mIGlu dHMuICovCisgICAgc2hvcnQgZmxnczsKK307CitfUFJPVE9UWVAoIGludCBtbG9vaywgKHN0cnVj dCBtdGFiIFtdLCBjaGFyICosIGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvZG8sIChpbnQsIGNo YXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgcGFyc2VyLCAoIGludCApICk7CisKKyNpZmRl ZiBDT01NRU5UCisvKiBUaGlzIGNhdXNlcyB0cm91YmxlIGluIEMtS2VybWl0IDguMC4gIEkgZG9u J3QgcmVtZW1iZXIgdGhlIG9yaWdpbmFsICovCisvKiByZWFzb24gZm9yIHRoaXMgYmVpbmcgaGVy ZSBidXQgaXQgbXVzdCBoYXZlIGJlZW4gbmVlZGVkIGF0IHRoZSB0aW1lLi4uICovCisjaWZkZWYg T1NGMTMKKyNpZmRlZiBDS19BTlNJQworI2lmZGVmIF9OT19QUk9UTworI3VuZGVmIF9OT19QUk9U TworI2VuZGlmIC8qIF9OT19QUk9UTyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYg LyogT1NGMTMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgSFBVWFBSRTY1Cisj aW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLworI2Vsc2UKKyNp Zm5kZWYgRVJSTk9fSU5DTFVERUQKKyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJl ciBzeW1ib2xzICovCisjZW5kaWYJLyogRVJSTk9fSU5DTFVERUQgKi8KKyNlbmRpZgkvKiBIUFVY UFJFNjUgKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWZkZWYgTUlOSVgyCisjdW5kZWYg TUlOSVgKKyN1bmRlZiBDS1NZU0xPRworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHRp bWUuaD4KKyNkZWZpbmUgTk9GSUxFSAorI2VuZGlmIC8qIE1JTklYMiAqLworCisjaWZkZWYgTUlO SVgKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRl IDx0aW1lLmg+CisjZWxzZQorI2lmZGVmIFBPU0lYCisjaW5jbHVkZSA8bGltaXRzLmg+CisjZWxz ZQorI2lmZGVmIFNWUjMKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbmRpZiAvKiBTVlIzICovCisj ZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBNSU5JWCAqLworLyoKKyAgRGlyZWN0b3J5IFNl cGFyYXRvciBtYWNyb3MsIHRvIGFsbG93IHRoaXMgbW9kdWxlIHRvIHdvcmsgd2l0aCBib3RoIFVO SVggYW5kCisgIE9TLzI6IEJlY2F1c2Ugb2YgYW1iaWd1aXR5IHdpdGggdGhlIGNvbW1hbmQgbGlu ZSBlZGl0b3IgZXNjYXBlIFwgY2hhcmFjdGVyLAorICB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciBp cyBjdXJyZW50bHkgbGVmdCBhcyAvIGZvciBPUy8yIHRvbywgYmVjYXVzZSB0aGUKKyAgT1MvMiBr ZXJuZWwgYWxzbyBhY2NlcHRzIC8gYXMgZGlyZWN0b3J5IHNlcGFyYXRvci4gIEJ1dCB0aGlzIGlz IHN1YmplY3QgdG8KKyAgY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucyB0byBjb25mb3JtIHRvIHRo ZSBub3JtYWwgT1MvMiBzdHlsZS4KKyovCisjaWZuZGVmIERJUlNFUAorI2RlZmluZSBESVJTRVAg ICAgICAgJy8nCisjZW5kaWYgLyogRElSU0VQICovCisjaWZuZGVmIElTRElSU0VQCisjZGVmaW5l IElTRElSU0VQKGMpICAoKGMpPT0nLycpCisjZW5kaWYgLyogSVNESVJTRVAgKi8KKworI2lmZGVm IFNESVJFTlQKKyNkZWZpbmUgRElSRU5UCisjZW5kaWYgLyogU0RJUkVOVCAqLworCisjaWZkZWYg WE5ESVIKKyNpbmNsdWRlIDxzeXMvbmRpci5oPgorI2Vsc2UgLyogIVhORElSICovCisjaWZkZWYg TkRJUgorI2luY2x1ZGUgPG5kaXIuaD4KKyNlbHNlIC8qICFORElSLCAhWE5ESVIgKi8KKyNpZmRl ZiBSVFUKKyNpbmNsdWRlICIvdXNyL2xpYi9uZGlyLmgiCisjZWxzZSAvKiAhUlRVLCAhTkRJUiwg IVhORElSICovCisjaWZkZWYgRElSRU5UCisjaWZkZWYgU0RJUkVOVAorI2luY2x1ZGUgPHN5cy9k aXJlbnQuaD4KKyNlbHNlCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYgLyogU0RJUkVOVCAq LworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvZGlyLmg+CisjZW5kaWYgLyogRElSRU5UICovCisjZW5k aWYgLyogUlRVICovCisjZW5kaWYgLyogTkRJUiAqLworI2VuZGlmIC8qIFhORElSICovCisKKyNp ZmRlZiBVTklYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIGFyZyB0byB3 YWl0KCkgYWxsb3dlZCAqLworI2RlZmluZSBDS19DSElMRCAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFzc3VtZSB0aGlzIGlzIHNhZmUgaW4gYWxsIFVOSVggKi8KKyNlbmRpZiAvKiBVTklYICov CisKK2V4dGVybiBpbnQgYmluYXJ5LCByZWN1cnNpdmUsIHN0YXRoYWNrOworI2lmZGVmIENLX0NU UkxaCitleHRlcm4gaW50IGVvZm1ldGhvZDsKKyNlbmRpZiAvKiBDS19DVFJMWiAqLworCisjaW5j bHVkZSA8cHdkLmg+ICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFzc3dvcmQgZmlsZSBmb3Ig c2hlbGwgbmFtZSAqLworI2lmZGVmIENLX1NSUAorI2luY2x1ZGUgPHRfcHdkLmg+ICAgICAgICAg ICAgICAgICAgICAgIC8qIFNSUCBQYXNzd29yZCBmaWxlICovCisjZW5kaWYgLyogQ0tfU1JQICov CisKKyNpZmRlZiBIUFVYMTBfVFJVU1RFRAorI2luY2x1ZGUgPGhwc2VjdXJpdHkuaD4KKyNpbmNs dWRlIDxwcm90Lmg+CisjZW5kaWYgLyogSFBVWDEwX1RSVVNURUQgKi8KKworI2lmZGVmIENPTU1F TlQKKy8qIE1vdmVkIHRvIGNrY2RlYi5oICovCisjaWZkZWYgUE9TSVgKKyNkZWZpbmUgVVRJTUVI CisjZWxzZQorI2lmZGVmIEhQVVg5CisjZGVmaW5lIFVUSU1FSAorI2VuZGlmIC8qIEhQVVg5ICov CisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBTWVNV VElNRUggICAgICAgICAgICAgICAgICAgICAgICAvKiA8c3lzL3V0aW1lLmg+IGlmIHJlcXVlc3Rl ZCwgICovCisjaW5jbHVkZSA8c3lzL3V0aW1lLmg+ICAgICAgICAgICAgICAgICAgLyogZm9yIGV4 dHJhIGZpZWxkcyByZXF1aXJlZCBieSAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDg4T3BlbiBzcGVjLiAqLworI2lmZGVmIFVUSU1FSCAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIG9yIDx1dGltZS5oPiBpZiByZXF1ZXN0ZWQgKi8KKyNpbmNsdWRlIDx1 dGltZS5oPiAgICAgICAgICAgICAgICAgICAgICAvKiAoU1ZSNCwgUE9TSVgpICovCisjaWZuZGVm IEJTRDQ0CisjaWZuZGVmIFY3CisvKiBOb3Qgc3VyZSB3aHkgdGhpcyBpcyBoZXJlLiAgV2hhdCBp dCBpbXBsaWVzIGlzIHRoYXQgdGhlIGNvZGUgYnJhY2tldGVkCisgICBieSBTWVNVVElNRUggaXMg dmFsaWQgb24gYWxsIHBsYXRmb3JtcyBvbiB3aGljaCB3ZSBzdXBwb3J0IHRpbWUgCisgICBmdW5j dGlvbmFsaXR5LiAgQnV0IHdlIGtub3cgdGhhdCBpcyBub3QgdHJ1ZSBiZWNhdXNlIHRoZSBCU0Q0 NCBhbmQgVjcKKyAgIHBsYXRmb3JtcyBkbyBub3Qgc3VwcG9ydCBzeXMvdXRpbWUuaCBhbmQgdGhl IGRhdGEgc3RydWN0dXJlcyB3aGljaAorICAgYXJlIGRlZmluZWQgaW4gdGhlbS4gIE5vdyB0aGlz IHdvcmtlZCBiZWZvcmUgYmVjYXVzZSBwcmlvciB0byB0b2RheSdzCisgICBjaGFuZ2VzIHRoZSBV VElNRUggZGVmaW5pdGlvbiBmb3IgQlNENDQgYW5kIFY3IGRpZCBub3QgdGFrZSBwbGFjZQorICAg dW50aWwgYWZ0ZXIgU1lTVVRJTUVIIHdhcyBkZWZpbmVkLiAgSXQgYWxzbyB3b3VsZCBub3QgaGF2 ZSBiZWVuIGEgCisgICBwcm9ibGVtIGlmIHRoZSBvcmRlcmluZyBvZiBhbGwgdGhlIHRpbWUgYmxv Y2tzIHdhcyBjb25zaXN0ZW50LiAgQWxsIGJ1dAorICAgb25lIG9mIHRoZSBibG9ja3Mgd2VyZSBC U0Q0NCwgVjcsIFNZU1VUSU1FSCwgPE9USEVSPi4gIFRoYXQgb25lIGNhc2UKKyAgIGlzIHdoZXJl IHRoaXMgcHJvYmxlbSB3YXMgdHJpZ2dlcmVkLgorKi8KKyNkZWZpbmUgU1lTVVRJTUVIICAgICAg ICAgICAgICAgICAgICAgICAvKiBVc2UgdGhpcyBmb3IgYm90aCBjYXNlcy4gKi8KKyNlbmRpZiAv KiBWNyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogVVRJTUVIICovCisjZW5kaWYg LyogU1lTVVRJTUVIICovCisKKyNpZm5kZWYgTk9USU1FU1RBTVAKKyNpZmRlZiBQT1NJWAorI2lm bmRlZiBBUzQwMAorI2RlZmluZSBUSU1FU1RBTVAKKyNlbmRpZiAvKiBBUzQwMCAqLworI2VuZGlm IC8qIFBPU0lYICovCisKKyNpZmRlZiBCU0Q0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBCU0QgNC40ICovCisjaWZuZGVmIFRJTUVTVEFNUAorI2RlZmluZSBUSU1FU1RBTVAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENhbiBkbyBmaWxlIGRhdGVzICovCisjZW5kaWYgLyogVElNRVNU QU1QICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKwor I2Vsc2UgIC8qIE5vdCBCU0Q0NCAqLworCisjaWZkZWYgQlNENCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQlNEIDQuMyBhbmQgYmVsb3cgKi8KKyNkZWZpbmUgVElNRVNUQU1QICAgICAg ICAgICAgICAgICAgICAgICAvKiBDYW4gZG8gZmlsZSBkYXRlcyAqLworI2luY2x1ZGUgPHRpbWUu aD4gICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWQgdGhpcyAqLworI2luY2x1ZGUgPHN5cy90 aW1lYi5oPiAgICAgICAgICAgICAgICAgIC8qIE5lZWQgdGhpcyBpZiByZWFsbHkgQlNEICovCisK KyNlbHNlICAvKiBOb3QgQlNEIDQuMyBhbmQgYmVsb3cgKi8KKworI2lmZGVmIFNWT1JQT1NJWCAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBWIG9yIFBPU0lYICovCisjaWZuZGVmIFRJ TUVTVEFNUAorI2RlZmluZSBUSU1FU1RBTVAKKyNlbmRpZiAvKiBUSU1FU1RBTVAgKi8KKyNpbmNs dWRlIDx0aW1lLmg+CisKKy8qIHZvaWQgdHpzZXQoKTsgKHRoZSAidm9pZCIgdHlwZSB1cHNldHMg c29tZSBjb21waWxlcnMpICovCisjaWZuZGVmIElSSVg2MAorI2lmbmRlZiB1bHRyaXgKKyNpZm5k ZWYgQ09OVkVYOQorLyogQ29udmV4T1MgOS4wLCBzdXBwb3NlZGx5IFBPU0lYLCBoYXMgZXh0ZXJu IGNoYXIgKnRpbWV6b25lKGludCxpbnQpICovCisjaWZuZGVmIFBsYW45CitleHRlcm4gbG9uZyB0 aW1lem9uZTsKKyNlbmRpZiAvKiBQbGFuOSAqLworI2VuZGlmIC8qIENPTlZFWDkgKi8KKyNlbmRp ZiAvKiB1bHRyaXggKi8KKyNlbmRpZiAvKiBJUklYNjAgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVgg Ki8KKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogQlNENDQgKi8KKworI2lmZGVmIENPSEVS RU5UCisjaW5jbHVkZSA8dGltZS5oPgorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKy8qIElzIGB5 JyBhIGxlYXAgeWVhcj8gKi8KKyNkZWZpbmUgbGVhcCh5KSAoKCh5KSAlIDQgPT0gMCAmJiAoeSkg JSAxMDAgIT0gMCkgfHwgKHkpICUgNDAwID09IDApCisKKy8qIE51bWJlciBvZiBsZWFwIHllYXJz IGZyb20gMTk3MCB0byBgeScgKG5vdCBpbmNsdWRpbmcgYHknIGl0c2VsZikuICovCisjZGVmaW5l IG5sZWFwKHkpICgoKHkpIC0gMTk2OSkgLyA0IC0gKCh5KSAtIDE5MDEpIC8gMTAwICsgKCh5KSAt IDE2MDEpIC8gNDAwKQorCisjZW5kaWYgLyogTk9USU1FU1RBTVAgKi8KKworI2lmZGVmIENJRQor I2luY2x1ZGUgPHN0YXQuaD4gICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc3RhdHVzICov CisjZWxzZQorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYgLyogQ0lFICovCisKKworCisv KiBNYWNybyB0byBhbGxldmlhdGUgaXNkaXIoKSBjYWxscyBpbnRlcm5hbCB0byB0aGlzIG1vZHVs ZSAqLworCitzdGF0aWMgc3RydWN0IHN0YXQgU1RBVEJVRjsKKyNkZWZpbmUgeGlzZGlyKGEpICgo c3RhdChhLCZTVEFUQlVGKT09LTEpPzA6KFNfSVNESVIoU1RBVEJVRi5zdF9tb2RlKT8xOjApKQor CitleHRlcm4gY2hhciB1aWRidWZbXTsKK2V4dGVybiBpbnQgeGZlcmxvZzsKK2V4dGVybiBjaGFy ICogeGZlcmZpbGU7CitpbnQgaWtsb2dvcGVuID0gMDsKK3N0YXRpYyB0aW1lX3QgdGltZW5vdzsK KworI2RlZmluZSBJS1NETVNHTEVOIENLTUFYUEFUSCs1MTIKKworc3RhdGljIGNoYXIgaWtzZG1z Z1tJS1NETVNHTEVOXTsKKworZXh0ZXJuIGludCBsb2NhbDsKKworZXh0ZXJuIGludCBzZXJ2ZXIs IGVuX21rZCwgZW5fY3dkLCBlbl9kZWw7CisKKy8qCisgIEZ1bmN0aW9ucyAobiBpcyBvbmUgb2Yg dGhlIHByZWRlZmluZWQgZmlsZSBudW1iZXJzIGZyb20gY2tja2VyLmgpOgorCisgICB6b3Blbmko bixuYW1lKSAgIC0tIE9wZW5zIGFuIGV4aXN0aW5nIGZpbGUgZm9yIGlucHV0LgorICAgem9wZW5v KG4sbmFtZSxhdHRyLGZjYikgLS0gT3BlbnMgYSBuZXcgZmlsZSBmb3Igb3V0cHV0LgorICAgemNs b3NlKG4pICAgICAgICAtLSBDbG9zZXMgYSBmaWxlLgorICAgemNoaW4obiwmYykgICAgICAtLSBH ZXRzIHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIGFuIGlucHV0IGZpbGUuCisgICB6c2lubChuLCZz LHgpICAgIC0tIFJlYWQgYSBsaW5lIGZyb20gZmlsZSBuLCBtYXggbGVuIHgsIGludG8gYWRkcmVz cyBzLgorICAgenNvdXQobixzKSAgICAgICAtLSBXcml0ZSBhIG51bGwtdGVybWluYXRlZCBzdHJp bmcgdG8gb3V0cHV0IGZpbGUsIGJ1ZmZlcmVkLgorICAgenNvdXRsKG4scykgICAgICAtLSBMaWtl IHpzb3V0LCBidXQgYXBwZW5kcyBhIGxpbmUgdGVybWluYXRvci4KKyAgIHpzb3V0eChuLHMseCkg ICAgLS0gV3JpdGUgeCBjaGFyYWN0ZXJzIHRvIG91dHB1dCBmaWxlLCB1bmJ1ZmZlcmVkLgorICAg emNob3V0KG4sYykgICAgICAtLSBBZGQgYSBjaGFyYWN0ZXIgdG8gYW4gb3V0cHV0IGZpbGUsIHVu YnVmZmVyZWQuCisgICB6Y2hraShuYW1lKSAgICAgIC0tIENoZWNrIGlmIG5hbWVkIGZpbGUgZXhp c3RzIGFuZCBpcyByZWFkYWJsZSwgcmV0dXJuIHNpemUuCisgICB6Y2hrbyhuYW1lKSAgICAgIC0t IENoZWNrIGlmIG5hbWVkIGZpbGUgY2FuIGJlIGNyZWF0ZWQuCisgICB6Y2hrc3BhKG5hbWUsbikg IC0tIENoZWNrIGlmIG4gYnl0ZXMgYXZhaWxhYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZSwgbmFtZS4K KyAgIHpuZXduKG5hbWUscykgICAgLS0gTWFrZSBhIG5ldyB1bmlxdWUgZmlsZSBuYW1lIGJhc2Vk IG9uIHRoZSBnaXZlbiBuYW1lLgorICAgemRlbGV0KG5hbWUpICAgICAtLSBEZWxldGUgdGhlIG5h bWVkIGZpbGUuCisgICB6eHBhbmQoc3RyaW5nKSAgIC0tIEV4cGFuZHMgdGhlIGdpdmVuIHdpbGRj YXJkIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBmaWxlcy4KKyAgIHpuZXh0KHN0cmluZykgICAgLS0g UmV0dXJucyB0aGUgbmV4dCBmaWxlIGZyb20gdGhlIGxpc3QgaW4gInN0cmluZyIuCisgICB6eHJl d2luZCgpICAgICAgIC0tIFJld2luZCB6eHBhbmQgbGlzdC4KKyAgIHp4Y21kKG4sY21kKSAgICAg LS0gRXhlY3V0ZSB0aGUgY29tbWFuZCBpbiBhIGxvd2VyIGZvcmsgb24gZmlsZSBudW1iZXIgbi4K KyAgIHpjbG9zZigpICAgICAgICAgLS0gQ2xvc2UgaW5wdXQgZmlsZSBhc3NvY2lhdGVkIHdpdGgg enhjbWQoKSdzIGxvd2VyIGZvcmsuCisgICB6cnRvbChuMSxuMikgICAgIC0tIENvbnZlcnQgcmVt b3RlIGZpbGVuYW1lIGludG8gbG9jYWwgZm9ybS4KKyAgIHpsdG9yKG4xLG4yKSAgICAgLS0gQ29u dmVydCBsb2NhbCBmaWxlbmFtZSBpbnRvIHJlbW90ZSBmb3JtLgorICAgemNoZGlyKGRpcm5hbSkg ICAtLSBDaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkuCisgICB6aG9tZSgpICAgICAgICAgIC0tIFJl dHVybiBwb2ludGVyIHRvIGhvbWUgZGlyZWN0b3J5IG5hbWUgc3RyaW5nLgorICAgemtzZWxmKCkg ICAgICAgICAtLSBLaWxsIHNlbGYsIGxvZyBvdXQgb3duIGpvYi4KKyAgIHpzYXR0cihzdHJ1Y3Qg emF0dHIgKikgLS0gUmV0dXJuIGF0dHJpYnV0ZXMgZm9yIGZpbGUgd2hpY2ggaXMgYmVpbmcgc2Vu dC4KKyAgIHpzdGltZShmLCBzdHJ1Y3QgemF0dHIgKiwgeCkgLSBTZXQgZmlsZSBjcmVhdGlvbiBk YXRlIGZyb20gYXR0cmlidXRlIHBhY2tldC4KKyAgIHpyZW5hbWUob2xkLCBuZXcpIC0tIFJlbmFt ZSBhIGZpbGUuCisgICB6Y29weShzb3VyY2UsZGVzdGluYXRpb24pIC0tIENvcHkgYSBmaWxlLgor ICAgem1rZGlyKHBhdGgpICAgICAgIC0tIENyZWF0ZSB0aGUgZGlyZWN0b3J5IHBhdGggaWYgcG9z c2libGUKKyAgIHpmbnFmcChmbmFtZSxsZW4sZnVsbHBhdGgpIC0gRGV0ZXJtaW5lIGZ1bGwgcGF0 aCBmb3IgZmlsZSBuYW1lLgorICAgemdldGZzKG5hbWUpICAgICAtLSByZXR1cm4gZmlsZSBzaXpl IHJlZ2FyZGxlc3Mgb2YgYWNjZXNzaWJpbGl0eQorICAgemNoa3BpZChwaWQpICAgICAtLSB0ZWxs IGlmIFBJRCBpcyB2YWxpZCBhbmQgYWN0aXZlCisqLworCisvKiBLZXJtaXQtc3BlY2lmaWMgaW5j bHVkZXMgKi8KKy8qCisgIERlZmluaXRpb25zIGhlcmUgc3VwZXJzZWRlIHRob3NlIGZyb20gc3lz dGVtIGluY2x1ZGUgZmlsZXMuCisgIGNrY2RlYi5oIGlzIGluY2x1ZGVkIGFib3ZlLgorKi8KKyNp bmNsdWRlICJja2NrZXIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQgZGVmaW5pdGlv bnMgKi8KKyNpbmNsdWRlICJja3VjbWQuaCIgICAgICAgICAgICAgICAgICAgICAvKiBGb3Iga2V5 d29yZCB0YWJsZXMgKi8KKyNpbmNsdWRlICJja3V2ZXIuaCIgICAgICAgICAgICAgICAgICAgICAv KiBWZXJzaW9uIGhlcmFsZCAqLworCitjaGFyICpja3pzeXMgPSBIRVJBTEQ7CisKKy8qCisgIEZp bGUgYWNjZXNzIGNoZWNraW5nIC4uLiAgVGhlcmUgYXJlIHR3byBjYWxscyB0byBhY2Nlc3MoKSBp biB0aGlzIG1vZHVsZS4KKyAgSWYgdGhpcyBwcm9ncmFtIGlzIGluc3RhbGxlZCBzZXR1aWQgb3Ig c2V0Z2lkIG9uIGEgQmVya2VsZXktYmFzZWQgVU5JWAorICBzeXN0ZW0gdGhhdCBkb2VzIE5PVCBp bmNvcnBvcmF0ZSB0aGUgc2F2ZWQtb3JpZ2luYWwtZWZmZWN0aXZlLXVpZC9naWQKKyAgZmVhdHVy ZSwgdGhlbiwgd2hlbiB3ZSBoYXZlIHN3YXBwZWQgdGhlIGVmZmVjdGl2ZSBhbmQgb3JpZ2luYWwg dWlkL2dpZCwKKyAgYWNjZXNzKCkgZmFpbHMgYmVjYXVzZSBpdCB1c2VzIHdoYXQgaXQgdGhpbmtz IGFyZSB0aGUgUkVBTCBpZHMsIGJ1dCB3ZSBoYXZlCisgIHN3YXBwZWQgdGhlbS4gIFRoaXMgb2Nj dXJzIG9uIHN5c3RlbXMgd2hlcmUgQU5ZQlNEIGlzIGRlZmluZWQsIE5PU0VUUkVVCisgIGlzIE5P VCBkZWZpbmVkLCBhbmQgU0FWRURVSUQgaXMgTk9UIGRlZmluZWQuICBTbywgaW4gdGhlb3J5LCB3 ZSBzaG91bGQgdGFrZQorICBjYXJlIG9mIHRoaXMgc2l0dWF0aW9uIGxpa2Ugc286CisKKyAgICBp ZmRlZiBBTllCU0QKKyAgICBpZm5kZWYgTk9TRVRSRVUKKyAgICBpZm5kZWYgU0FWRURVSUQKKyAg ICBkZWZpbmUgU1dfQUNDX0lECisgICAgZW5kaWYKKyAgICBlbmRpZgorICAgIGVuZGlmCisKKyAg QnV0IHdlIGNhbid0IHRlc3Qgc3VjaCBhIGdlbmVyYWwgc2NoZW1lIGV2ZXJ5d2hlcmUsIHNvIGxl dCdzIG9ubHkgZG8gdGhpcworICB3aGVuIHdlIGtub3cgd2UgaGF2ZSB0by4uLgorKi8KKyNpZmRl ZiBORVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZVhUU1RFUCAxLjAtMy4wICov CisjZGVmaW5lIFNXX0FDQ19JRAorI2VuZGlmIC8qIE5FWFQgKi8KKworLyogU3VwcG9ydCBmb3Ig dGlsZGUtZXhwYW5zaW9uIGluIGZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lcyAqLworCisjaWZkZWYg UE9TSVgKKyNkZWZpbmUgTkFNRUVOViAiTE9HTkFNRSIKKyNlbHNlCisjaWZkZWYgQlNENAorI2Rl ZmluZSBOQU1FRU5WICJVU0VSIgorI2Vsc2UKKyNpZmRlZiBBVFRTVgorI2RlZmluZSBOQU1FRU5W ICJMT0dOQU1FIgorI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNENCAqLworI2VuZGlm IC8qIFBPU0lYICovCisKKy8qIEJlcmtlbGV5IFVuaXggVmVyc2lvbiA0LnggKi8KKy8qIDQuMWJz ZCBzdXBwb3J0IGZyb20gQ2hhcmxlcyBFIEJyb29rcywgRUROLVZBWCAqLworCisjaWZkZWYgQlNE NAorI2lmZGVmIE1BWE5BTUxFTgorI2RlZmluZSBCU0Q0MgorI2VuZGlmIC8qIE1BWE5BTUxFTiAq LworI2VuZGlmIC8qIEJTRDQgKi8KKworLyogRGVmaW5pdGlvbnMgb2Ygc29tZSBzeXN0ZW0gY29t bWFuZHMgKi8KKworY2hhciAqREVMQ01EID0gInJtIC1mICI7ICAgICAgICAgICAgICAgIC8qIEZv ciBmaWxlIGRlbGV0aW9uICovCitjaGFyICpDUFlDTUQgPSAiY3AgIjsgICAgICAgICAgICAgICAg ICAgLyogRm9yIGZpbGUgY29weSAqLworY2hhciAqUkVOQ01EID0gIm12ICI7ICAgICAgICAgICAg ICAgICAgIC8qIEZvciBmaWxlIHJlbmFtZSAqLworY2hhciAqUFdEQ01EID0gInB3ZCAiOyAgICAg ICAgICAgICAgICAgIC8qIEZvciBzYXlpbmcgd2hlcmUgSSBhbSAqLworCisjaWZkZWYgQ09NTUVO VAorI2lmZGVmIEhQVVgxMAorY2hhciAqRElSQ01EID0gIi91c3IvYmluL2xzIC1sICI7ICAgICAg IC8qIEZvciBkaXJlY3RvcnkgbGlzdGluZyAqLworY2hhciAqRElSQ00yID0gIi91c3IvYmluL2xz IC1sICI7ICAgICAgIC8qIEZvciBkaXJlY3RvcnkgbGlzdGluZywgbm8gYXJncyAqLworI2Vsc2UK K2NoYXIgKkRJUkNNRCA9ICIvYmluL2xzIC1sICI7ICAgICAgICAgICAvKiBGb3IgZGlyZWN0b3J5 IGxpc3RpbmcgKi8KK2NoYXIgKkRJUkNNMiA9ICIvYmluL2xzIC1sICI7ICAgICAgICAgICAvKiBG b3IgZGlyZWN0b3J5IGxpc3RpbmcsIG5vIGFyZ3MgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNl bHNlCitjaGFyICpESVJDTUQgPSAibHMgLWwgIjsgICAgICAgICAgICAgICAgLyogRm9yIGRpcmVj dG9yeSBsaXN0aW5nICovCitjaGFyICpESVJDTTIgPSAibHMgLWwgIjsgICAgICAgICAgICAgICAg LyogRm9yIGRpcmVjdG9yeSBsaXN0aW5nLCBubyBhcmdzICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworCitjaGFyICpUWVBDTUQgPSAiY2F0ICI7ICAgICAgICAgICAgICAgICAgLyogRm9yIHR5cGlu ZyBhIGZpbGUgKi8KKworI2lmZGVmIEhQVVgKK2NoYXIgKk1BSUxDTUQgPSAibWFpbHgiOyAgICAg ICAgICAgICAgICAvKiBGb3Igc2VuZGluZyBtYWlsICovCisjZWxzZQorI2lmZGVmIERHVVg1NDAK K2NoYXIgKk1BSUxDTUQgPSAibWFpbHgiOworI2Vsc2UKKyNpZmRlZiBVTklYCisjaWZkZWYgQ0tf TUFJTENNRAorY2hhciAqTUFJTENNRCA9IENLX01BSUxDTUQ7CQkvKiBDRkxBR1Mgb3ZlcnJpZGUg Ki8KKyNlbHNlCitjaGFyICpNQUlMQ01EID0gIk1haWwiOwkJCS8qIERlZmF1bHQgKi8KKyNlbmRp ZiAvKiBDS19NQUlMQ01EICovCisjZWxzZQorY2hhciAqTUFJTENNRCA9ICIiOworI2VuZGlmIC8q IFVOSVggKi8KKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogREdVWDQwICovCisKKyNpZmRl ZiBVTklYCisjaWZkZWYgQU5ZQlNEICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlNEIHVz ZXMgbHByIHRvIHNwb29sICovCisjaWZkZWYgREdVWDU0MCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQW5kIERHL1VYICovCitjaGFyICogUFJJTlRDTUQgPSAibHAiOworI2Vsc2UKK2NoYXIg KiBQUklOVENNRCA9ICJscHIiOworI2VuZGlmIC8qIERHVVg1NDAgKi8KKyNlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTeXMgViB1c2VzIGxwICovCisjaWZkZWYgVFJT MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhjZXB0IGZvciBUYW5keS0xNi82MDAw Li4uICovCitjaGFyICogUFJJTlRDTUQgPSAibHByIjsKKyNlbHNlCitjaGFyICogUFJJTlRDTUQg PSAibHAiOworI2VuZGlmIC8qIFRSUzE2ICovCisjZW5kaWYgLyogQU5ZQlNEICovCisjZWxzZSAg LyogTm90IFVOSVggKi8KKyNkZWZpbmUgUFJJTlRDTUQgIiIKKyNlbmRpZiAvKiBVTklYICovCisK KyNpZmRlZiBGVDE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3J0dW5lIEZvcjpQ cm8gMS44ICovCisjdW5kZWYgQlNENAorI2VuZGlmIC8qIEZUMTggKi8KKworI2lmZGVmIEJTRDQK K2NoYXIgKlNQQUNNRCA9ICJwd2QgOyBkZiAuIjsgICAgICAgICAgICAvKiBTcGFjZSBpbiBjdXJy ZW50IGRpcmVjdG9yeSAqLworI2Vsc2UKKyNpZmRlZiBGVDE4CitjaGFyICpTUEFDTUQgPSAicHdk IDsgZHUgOyBkZiAuIjsKKyNlbHNlCitjaGFyICpTUEFDTUQgPSAiZGYgIjsKKyNlbmRpZiAvKiBG VDE4ICovCisjZW5kaWYgLyogQlNENCAqLworCitjaGFyICpTUEFDTTIgPSAiZGYgIjsgICAgICAg ICAgICAgICAgICAgLyogRm9yIHNwYWNlIGluIHNwZWNpZmllZCBkaXJlY3RvcnkgKi8KKworI2lm ZGVmIEZUMTgKKyNkZWZpbmUgQlNENAorI2VuZGlmIC8qIEZUMTggKi8KKworI2lmZGVmIEJTRDQK K2NoYXIgKldIT0NNRCA9ICJmaW5nZXIgIjsKKyNlbHNlCitjaGFyICpXSE9DTUQgPSAid2hvICI7 CisjZW5kaWYgLyogQlNENCAqLworCisvKiBNb3JlIHN5c3RlbS1kZXBlbmRlbnQgaW5jbHVkZXMs IHdoaWNoIGRlcGVuZCBvbiBzeW1ib2xzIGRlZmluZWQgKi8KKy8qIGluIHRoZSBLZXJtaXQtc3Bl Y2lmaWMgaW5jbHVkZXMuICBPaCB3aGF0IGEgdGFuZ2xlZCB3ZWIgd2Ugd2VhdmUuLi4gKi8KKwor I2lmZGVmIENPSEVSRU5UICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDxzeXMvZmlsZS5oPiAq LworI2RlZmluZSBOT0ZJTEVICisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIE1JTklY CisjZGVmaW5lIE5PRklMRUgKKyNlbmRpZiAvKiBNSU5JWCAqLworCisjaWZkZWYgYWVnaXMKKyNk ZWZpbmUgTk9GSUxFSAorI2VuZGlmIC8qIGFlZ2lzICovCisKKyNpZmRlZiB1bm9zCisjZGVmaW5l IE5PRklMRUgKKyNlbmRpZiAvKiB1bm9zICovCisKKyNpZm5kZWYgTk9GSUxFSAorI2luY2x1ZGUg PHN5cy9maWxlLmg+CisjZW5kaWYgLyogTk9GSUxFSCAqLworCisjaWZuZGVmIGlzNjhrICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBpbmNsdWRlIDxmY250bC5oPiAqLwor I2lmbmRlZiBCU0Q0MSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBidXQgYSBjb3Vw bGUgVU5JWGVzIGhhdmUgaXQuICovCisjaWZuZGVmIEZUMTgKKyNpZm5kZWYgQ09IRVJFTlQKKyNp bmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogRlQxOCAg Ki8KKyNlbmRpZiAvKiBCU0Q0MSAqLworI2VuZGlmIC8qIGlzNjhrICovCisKKyNpZmRlZiBDT0hF UkVOVAorI2lmZGVmIF9JMzg2CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbHNlCisjaW5jbHVkZSA8 c3lzL2ZjbnRsLmg+CisjZW5kaWYgLyogX0kzODYgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLwor CitleHRlcm4gaW50IGluc2VydmVyOwkJCS8qIEkgYW0gSUtTRCAqLworaW50IGd1ZXN0ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyB1c2VyICovCisKKyNpZmRlZiBJ S1NECitleHRlcm4gaW50IGlzZ3Vlc3Q7CitleHRlcm4gY2hhciAqIGFub25yb290OworI2VuZGlm IC8qIElLU0QgKi8KKworI2lmZGVmIENLX0xPR0lOCisjZGVmaW5lIEdVRVNUUEFTUyAyNTYKK3N0 YXRpYyBjaGFyIGd1ZXN0cGFzc1tHVUVTVFBBU1NdID0geyBOVUwsIE5VTCB9OyAvKiBBbm9ueW1v dXMgInBhc3N3b3JkIiAqLworc3RhdGljIGludCBsb2dnZWRfaW4gPSAwOyAgICAgICAgICAgICAg IC8qIFNldCB3aGVuIHVzZXIgaXMgbG9nZ2VkIGluICovCitzdGF0aWMgaW50IGFza3Bhc3N3ZCA9 IDA7ICAgICAgICAgICAgICAgLyogSGF2ZSBPSyB1c2VyLCBtdXN0IGFzayBmb3IgcGFzc3dkICov CisjaWZkZWYgQ0tfUEFNCitleHRlcm4gaW50IGdvdGVtcHR5cGFzc3dkOworI2VuZGlmIC8qIENL X1BBTSAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyNpZmRlZiBDS1JPT1QKK3N0YXRpYyBj aGFyIGNrcm9vdFtDS01BWFBBVEgrMV0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMgaW50IGNrcm9v dHNldCA9IDA7CitpbnQgY2tyb290ZXJyID0gMDsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworX1BS T1RPVFlQKCBWT0lEIGlnbm9yc2lncywgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgcmVzdG9y c2lncywgKHZvaWQpICk7CisjaWZkZWYgU0VMRUNUCitfUFJPVE9UWVAoIGludCB0dHdhaXQsIChp bnQsIGludCkgKTsJLyogY2t1dGlvLmMgKi8KKyNlbmRpZgkvKiBTRUxFQ1QgKi8KKworLyoKKyAg Q2hhbmdlIGFyZ3VtZW50IHRvICIoY29uc3QgY2hhciAqKSIgaWYgdGhpcyBjYXVzZXMgdHJvdWJs ZS4KKyAgT3IuLi4gaWYgaXQgY2F1c2VzIHRyb3VibGUsIHRoZW4gbWF5YmUgaXQgd2FzIGFscmVh ZHkgZGVjbGFyZWQKKyAgaW4gYSBoZWFkZXIgZmlsZSBhZnRlciBhbGwsIHNvIHlvdSBjYW4gcmVt b3ZlIHRoaXMgcHJvdG90eXBlLgorKi8KKyNpZm5kZWYgTkRHUFdOQU0gLyogSWYgbm90IGRlZmlu ZWQgTm8gRGVjbGFyZSBnZXRwd25hbS4uLiAqLworI2lmbmRlZiBfUE9TSVhfU09VUkNFCisjaWZu ZGVmIE5FWFQKKyNpZm5kZWYgU1ZSNAorLyogUE9TSVggPHB3ZC5oPiBhbHJlYWR5IGdhdmUgcHJv dG90eXBlcyBmb3IgdGhlc2UuICovCisjaWZkZWYgSVJJWDQwCitfUFJPVE9UWVAoIHN0cnVjdCBw YXNzd2QgKiBnZXRwd25hbSwgKGNvbnN0IGNoYXIgKikgKTsKKyNlbHNlCisjaWZkZWYgSVJJWDUx CitfUFJPVE9UWVAoIHN0cnVjdCBwYXNzd2QgKiBnZXRwd25hbSwgKGNvbnN0IGNoYXIgKikgKTsK KyNlbHNlCisjaWZkZWYgTV9VTklYCitfUFJPVE9UWVAoIHN0cnVjdCBwYXNzd2QgKiBnZXRwd25h bSwgKGNvbnN0IGNoYXIgKikgKTsKKyNlbHNlCisjaWZkZWYgSFBVWDkKK19QUk9UT1RZUCggc3Ry dWN0IHBhc3N3ZCAqIGdldHB3bmFtLCAoY29uc3QgY2hhciAqKSApOworI2Vsc2UKKyNpZmRlZiBI UFVYMTAKK19QUk9UT1RZUCggc3RydWN0IHBhc3N3ZCAqIGdldHB3bmFtLCAoY29uc3QgY2hhciAq KSApOworI2Vsc2UKKyNpZmRlZiBEQ0dQV05BTQorX1BST1RPVFlQKCBzdHJ1Y3QgcGFzc3dkICog Z2V0cHduYW0sIChjb25zdCBjaGFyICopICk7CisjZWxzZQorX1BST1RPVFlQKCBzdHJ1Y3QgcGFz c3dkICogZ2V0cHduYW0sIChjaGFyICopICk7CisjZW5kaWYgLyogRENHUFdOQU0gKi8KKyNlbmRp ZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlmIC8qIE1fVU5JWCAqLwor I2VuZGlmIC8qIElSSVg1MSAqLworI2VuZGlmIC8qIElSSVg0MCAqLworI2lmbmRlZiBTVU5PUzQK KyNpZm5kZWYgSFBVWDkKKyNpZm5kZWYgSFBVWDEwCisjaWZuZGVmIF9TQ09fRFMKK19QUk9UT1RZ UCggc3RydWN0IHBhc3N3ZCAqIGdldHB3dWlkLCAoUFdJRF9UKSApOworI2VuZGlmIC8qIF9TQ09f RFMgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlmIC8q IFNVTk9TNCAqLworX1BST1RPVFlQKCBzdHJ1Y3QgcGFzc3dkICogZ2V0cHdlbnQsICh2b2lkKSAp OworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyogX1BPU0lY X1NPVVJDRSAqLworI2VuZGlmIC8qIE5ER1BXTkFNICovCisKKyNpZmRlZiBDS19TSEFET1cgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTaGFkb3cgUGFzc3dvcmRzLi4uICovCisjaW5jbHVkZSA8 c2hhZG93Lmg+CisjZW5kaWYgLyogQ0tfU0hBRE9XICovCisjaWZkZWYgQ0tfUEFNICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogUEFNLi4uICovCisjaWZkZWYgTUFDT1NYCisjaW5jbHVkZSA8 cGFtL3BhbV9hcHBsLmg+CisjZWxzZSAvKiBNQUNPU1ggKi8KKyNpbmNsdWRlIDxzZWN1cml0eS9w YW1fYXBwbC5oPgorI2VuZGlmIC8qIE1BQ09TWCAqLworI2lmbmRlZiBQQU1fU0VSVklDRV9UWVBF ICAgICAgICAgICAgICAgIC8qIERlZmluZXMgd2hpY2ggUEFNIHNlcnZpY2Ugd2UgYXJlICovCisj ZGVmaW5lIFBBTV9TRVJWSUNFX1RZUEUgImtlcm1pdCIKKyNlbmRpZiAvKiBQQU1fU0VSVklDRV9U WVBFICovCisKKyNpZmRlZiBTT0xBUklTCisjZGVmaW5lIFBBTV9DT05TVCAKKyNlbHNlIC8qIFNP TEFSSVMgKi8KKyNkZWZpbmUgUEFNX0NPTlNUIENPTlNUCisjZW5kaWYgCisKK3N0YXRpYyBjaGFy ICogcGFtX3B3ID0gTlVMTDsKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3BhbV9jYihpbnQgbnVt X21zZywKKyAgICAgICBQQU1fQ09OU1Qgc3RydWN0IHBhbV9tZXNzYWdlICoqbXNnLAorICAgICAg IHN0cnVjdCBwYW1fcmVzcG9uc2UgKipyZXNwLAorICAgICAgIHZvaWQgKmFwcGRhdGFfcHRyCisg ICAgICAgKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3BhbV9jYihudW1fbXNnLCBtc2csIHJlc3As IGFwcGRhdGFfcHRyKQorICAgIGludCBudW1fbXNnOworICAgIFBBTV9DT05TVCBzdHJ1Y3QgcGFt X21lc3NhZ2UgKiptc2c7CisgICAgc3RydWN0IHBhbV9yZXNwb25zZSAqKnJlc3A7CisgICAgdm9p ZCAqYXBwZGF0YV9wdHI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpbnQgaTsKKwor ICAgIGRlYnVnKEYxMTEsInBhbV9jYiIsIm51bV9tc2ciLG51bV9tc2cpOworCisgICAgZm9yIChp ID0gMDsgaSA8IG51bV9tc2c7IGkrKykgeworICAgICAgICBjaGFyIG1lc3NhZ2VbUEFNX01BWF9N U0dfU0laRV07CisKKyAgICAgICAgLyogSXNzdWUgcHJvbXB0IGFuZCBnZXQgcmVzcG9uc2UgKi8K KyAgICAgICAgZGVidWcoRjExMSwicGFtX2NiIiwiTWVzc2FnZSIsaSk7CisgICAgICAgIGRlYnVn KEYxMTEsInBhbV9jYiIsbXNnW2ldLT5tc2csbXNnW2ldLT5tc2dfc3R5bGUpOworICAgICAgICBp ZiAobXNnW2ldLT5tc2dfc3R5bGUgPT0gUEFNX0VSUk9SX01TRykgeworICAgICAgICAgICAgZGVi dWcoRjExMSwicGFtX2NiIiwiUEFNIEVSUk9SIiwwKTsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk b3V0LCIlc1xuIiwgbXNnW2ldLT5tc2cpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAg ICB9IGVsc2UgaWYgKG1zZ1tpXS0+bXNnX3N0eWxlID09IFBBTV9URVhUX0lORk8pIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTEsInBhbV9jYiIsIlBBTSBURVhUIElORk8iLDApOworICAgICAgICAg ICAgZnByaW50ZihzdGRvdXQsIiVzXG4iLCBtc2dbaV0tPm1zZyk7CisgICAgICAgICAgICByZXR1 cm4oMCk7CisgICAgICAgIH0gZWxzZSBpZiAobXNnW2ldLT5tc2dfc3R5bGUgPT0gUEFNX1BST01Q VF9FQ0hPX09GRikgeworICAgICAgICAgICAgZGVidWcoRjExMSwicGFtX2NiIiwiUmVhZGluZyBy ZXNwb25zZSwgbm8gZWNobyIsMCk7CisgICAgICAgICAgICAvKiBVZ2x5IGhhY2suICBXZSBjaGVj ayB0byBzZWUgaWYgYSBwYXNzd29yZCBoYXMgYmVlbiBwdXNoZWQgKi8KKyAgICAgICAgICAgIC8q IGludG8genZwYXNzd2QoKS4gIFRoaXMgd291bGQgYmUgdHJ1ZSBpZiB0aGUgcGFzc3dvcmQgd2Fz ICAqLworICAgICAgICAgICAgLyogcmVjZWl2ZWQgYnkgUkVNT1RFIExPR0lOLiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAocGFtX3B3KSB7CisgICAg ICAgICAgICAgICAgY2tzdHJuY3B5KG1lc3NhZ2UscGFtX3B3LFBBTV9NQVhfTVNHX1NJWkUpOwor ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVhZHBhc3MoKGNoYXIgKiltc2db aV0tPm1zZyxtZXNzYWdlLFBBTV9NQVhfTVNHX1NJWkUpOworICAgICAgICB9IGVsc2UgaWYgKG1z Z1tpXS0+bXNnX3N0eWxlID09IFBBTV9QUk9NUFRfRUNIT19PTikgeworICAgICAgICAgICAgZGVi dWcoRjExMSwicGFtX2NiIiwiUmVhZGluZyByZXNwb25zZSwgd2l0aCBlY2hvIiwwKTsKKyAgICAg ICAgICAgIHJlYWR0ZXh0KChjaGFyICopbXNnW2ldLT5tc2csbWVzc2FnZSxQQU1fTUFYX01TR19T SVpFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInBhbV9jYiIs InVua25vd24gc3R5bGUiLDApOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisK KyAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoaXMgbWVzc2FnZSdzIHJlc3BvbnNlIHN0 cnVjdHVyZSAqLworICAgICAgICByZXNwW2ldID0gKHN0cnVjdCBwYW1fcmVzcG9uc2UgKikgbWFs bG9jKHNpemVvZiAoc3RydWN0IHBhbV9yZXNwb25zZSkpOworICAgICAgICBpZiAoIXJlc3BbaV0p IHsKKyAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgZGVidWcoRjExMCwicGFtX2NiIiwi bWFsbG9jIGZhaWx1cmUiLDApOworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykg eworICAgICAgICAgICAgICAgIGZyZWUocmVzcFtqXS0+cmVzcCk7CisgICAgICAgICAgICAgICAg ZnJlZShyZXNwW2pdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigwKTsKKyAg ICAgICAgfQorCisgICAgICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGUgcmVzcG9uc2Ug Ki8KKyAgICAgICAgcmVzcFtpXS0+cmVzcCA9IChjaGFyICopIG1hbGxvYygoaW50KXN0cmxlbiht ZXNzYWdlKSArIDEpOworICAgICAgICBpZiAoIXJlc3BbaV0tPnJlc3ApIHsKKyAgICAgICAgICAg IGludCBqOworICAgICAgICAgICAgZGVidWcoRjExMCwicGFtX2NiIiwibWFsbG9jIGZhaWx1cmUi LDApOworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAg ICAgIGZyZWUocmVzcFtqXS0+cmVzcCk7CisgICAgICAgICAgICAgICAgZnJlZShyZXNwW2pdKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZyZWUocmVzcFtpXSk7CisgICAgICAgICAgICBy ZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgLyogUmV0dXJuIHRoZSByZXN1bHRzIGJhY2sg dG8gUEFNICovCisgICAgICAgIHN0cmNweShyZXNwW2ldLT5yZXNwLCBtZXNzYWdlKTsJLyogc2Fm ZSAocHJlY2hlY2tlZCkgKi8KKyAgICAgICAgcmVzcFtpXS0+cmVzcF9yZXRjb2RlID0gMDsKKyAg ICB9CisgICAgZGVidWcoRjExMCwicGFtX2NiIiwiRXhpdGluZyIsMCk7CisgICAgcmV0dXJuKDAp OworfQorI2VuZGlmIC8qIENLX1BBTSAqLworCisvKiBEZWZpbmUgbWFjcm9zIGZvciBnZXR0aW5n IGZpbGUgdHlwZSAqLworCisjaWZkZWYgT1hPUworLyoKKyAgT2xpdmV0dGkgWC9PUyAyLjMgaGFz IFNfSVNSRUcgYW5kIFNfSVNESVIgZGVmaW5lZAorICBpbmNvcnJlY3RseSwgc28gd2UgZm9yY2Ug dGhlaXIgcmVkZWZpbml0aW9uLgorKi8KKyN1bmRlZiBTX0lTUkVHCisjdW5kZWYgU19JU0RJUgor I2VuZGlmIC8qIE9YT1MgKi8KKworI2lmZGVmIFVUU1YgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNhbWUgZGVhbCBmb3IgQW1kYWhsIFVUU1YgKi8KKyN1bmRlZiBTX0lTUkVHCisjdW5k ZWYgU19JU0RJUgorI2VuZGlmIC8qIFVUU1YgKi8KKworI2lmZGVmIFVOSVNZUzUyICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFuZCBmb3IgVU5JU1lTIFVUUyBWIDUuMiAqLworI3VuZGVmIFNf SVNSRUcKKyN1bmRlZiBTX0lTRElSCisjZW5kaWYgLyogVU5JU1lTNTIgKi8KKworI2lmZGVmIElD TFNWUjMgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFuZCBmb3Igb2xkIElDTCB2ZXJzaW9u cyAqLworI3VuZGVmIFNfSVNSRUcKKyN1bmRlZiBTX0lTRElSCisjZW5kaWYgLyogSUNMU1ZSMyAq LworCisjaWZkZWYgSVNESVJCVUcgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxzbyBhbGxv dyB0aGlzIGZyb20gY29tbWFuZCBsaW5lICovCisjaWZkZWYgU19JU1JFRworI3VuZGVmIFNfSVNS RUcKKyNlbmRpZiAvKiBTX0lTUkVHICovCisjaWZkZWYgU19JU0RJUgorI3VuZGVmIFNfSVNESVIK KyNlbmRpZiAvKiAgU19JU0RJUiAqLworI2VuZGlmIC8qIElTRElSQlVHICovCisKKyNpZm5kZWYg X0lGTVQKKyNpZmRlZiBTX0lGTVQKKyNkZWZpbmUgX0lGTVQgU19JRk1UCisjZWxzZQorI2RlZmlu ZSBfSUZNVCAwMTcwMDAwCisjZW5kaWYgLyogU19JRk1UICovCisjZW5kaWYgLyogX0lGTVQgKi8K KworI2lmbmRlZiBTX0lTUkVHCisjZGVmaW5lIFNfSVNSRUcobSkgKCgobSkgJiBTX0lGTVQpID09 IFNfSUZSRUcpCisjZW5kaWYgLyogU19JU1JFRyAqLworI2lmbmRlZiBTX0lTRElSCisjZGVmaW5l IFNfSVNESVIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCisjZW5kaWYgLyogU19JU0RJ UiAqLworCisvKiBUaGUgZm9sbG93aW5nIG1haW5seSBmb3IgTmVYVFNURVAuLi4gKi8KKworI2lm bmRlZiBTX0lXVVNSCisjZGVmaW5lIFNfSVdVU1IgMDAwMDIwMAorI2VuZGlmIC8qIFNfSVdVU1Ig Ki8KKworI2lmbmRlZiBTX0lSR1JQCisjZGVmaW5lIFNfSVJHUlAgMDAwMDA0MAorI2VuZGlmIC8q IFNfSVJHUlAgKi8KKworI2lmbmRlZiBTX0lXR1JQCisjZGVmaW5lIFNfSVdHUlAgMDAwMDAyMAor I2VuZGlmIC8qIFNfSVdHUlAgKi8KKworI2lmbmRlZiBTX0lYR1JQCisjZGVmaW5lIFNfSVhHUlAg MDAwMDAxMAorI2VuZGlmIC8qIFNfSVhHUlAgKi8KKworI2lmbmRlZiBTX0lST1RICisjZGVmaW5l IFNfSVJPVEggMDAwMDAwNAorI2VuZGlmIC8qIFNfSVJPVEggKi8KKworI2lmbmRlZiBTX0lXT1RI CisjZGVmaW5lIFNfSVdPVEggMDAwMDAwMgorI2VuZGlmIC8qIFNfSVdPVEggKi8KKworI2lmbmRl ZiBTX0lYT1RICisjZGVmaW5lIFNfSVhPVEggMDAwMDAwMQorI2VuZGlmIC8qIFNfSVhPVEggKi8K Ky8qCisgIERlZmluZSBtYXhpbXVtIGxlbmd0aCBmb3IgYSBmaWxlIG5hbWUgaWYgbm90IGFscmVh ZHkgZGVmaW5lZC4KKyAgTk9URTogVGhpcyBhcHBsaWVzIHRvIGEgcGF0aCBzZWdtZW50IChkaXJl Y3Rvcnkgb3IgZmlsZSBuYW1lKSwKKyAgbm90IHRoZSBlbnRpcmUgcGF0aCBzdHJpbmcsIHdoaWNo IGNhbiBiZSBDS01BWFBBVEggYnl0ZXMgbG9uZy4KKyovCisjaWZkZWYgUU5YCisjaWZkZWYgX01B WF9GTkFNRQorI2RlZmluZSBNQVhOQU1MRU4gX01BWF9GTkFNRQorI2Vsc2UKKyNkZWZpbmUgTUFY TkFNTEVOIDQ4CisjZW5kaWYgLyogX01BWF9GTkFNRSAqLworI2Vsc2UKKyNpZm5kZWYgTUFYTkFN TEVOCisjaWZkZWYgc3VuCisjZGVmaW5lIE1BWE5BTUxFTiAyNTUKKyNlbHNlCisjaWZkZWYgRklM RU5BTUVfTUFYCisjZGVmaW5lIE1BWE5BTUxFTiBGSUxFTkFNRV9NQVgKKyNlbHNlCisjaWZkZWYg TkFNRV9NQVgKKyNkZWZpbmUgTUFYTkFNTEVOIE5BTUVfTUFYCisjZWxzZQorI2lmZGVmIF9QT1NJ WF9OQU1FX01BWAorI2RlZmluZSBNQVhOQU1MRU4gX1BPU0lYX05BTUVfTUFYCisjZWxzZQorI2lm ZGVmIF9EX05BTUVfTUFYCisjZGVmaW5lIE1BWE5BTUxFTiBfRF9OQU1FX01BWAorI2Vsc2UKKyNp ZmRlZiBESVJTSVoKKyNkZWZpbmUgTUFYTkFNTEVOIERJUlNJWgorI2Vsc2UKKyNkZWZpbmUgTUFY TkFNTEVOIDE0CisjZW5kaWYgLyogRElSU0laICovCisjZW5kaWYgLyogX0RfTkFNRV9NQVggKi8K KyNlbmRpZiAvKiBfUE9TSVhfTkFNRV9NQVggKi8KKyNlbmRpZiAvKiBOQU1FX01BWCAqLworI2Vu ZGlmIC8qIEZJTEVOQU1FX01BWCAqLworI2VuZGlmIC8qIHN1biAqLworI2VuZGlmIC8qIE1BWE5B TUxFTiAqLworI2VuZGlmIC8qIFFOWCAqLworCisjaWZkZWYgQ09NTUVOVAorLyogQXMgb2YgMjAw MS0xMS0wMyB0aGlzIGlzIGhhbmRsZWQgaW4gY2tjZGViLmggKi8KKy8qIExvbmdlc3QgcGF0aG5h bWUgLi4uICovCisvKgorICBCZXdhcmU6IE1BWFBBVEhMRU4gaXMgb25lIG9mIFVOSVgncyBkaXJ0 eSBsaXR0bGUgc2VjcmV0cy4gIFdoZXJlIGlzIGl0CisgIGRlZmluZWQ/ICBXaG8ga25vd3MuLi4g IDxwYXJhbS5oPiwgPG1vZC5oPiwgPHVuaXN0ZC5oPiwgPGxpbWl0cy5oPiwgLi4uCisgIFRoZXJl IGlzIG5vdCBuZWNlc3NhcmlseSBldmVuIGEgZGVmaW5pdGlvbiBmb3IgaXQgYW55d2hlcmUsIG9y IGl0IG1pZ2h0IGhhdmUKKyAgYW5vdGhlciBuYW1lLiAgSWYgeW91IGdldCBpdCB3cm9uZywgYmFk IHRoaW5ncyBoYXBwZW4gd2l0aCBnZXRjd2QoKSBhbmQvb3IKKyAgZ2V0d2QoKS4gIElmIHlvdSBh bGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGlzIHRvbyBzaG9ydCwgZ2V0d2QoKSBtaWdodCB3cml0ZQor ICBvdmVyIG1lbW9yeSBhbmQgZ2V0Y3dkKCkgd2lsbCBmYWlsIHdpdGggRVJBTkdFLiAgVGhlIGRl ZmluaXRpb25zIG9mIHRoZXNlCisgIGZ1bmN0aW9ucyAoZS5nLiBpbiBTVklEIG9yIFBPU0lYLjEp IGRvIG5vdCB0ZWxsIHlvdSBob3cgdG8gZGV0ZXJtaW5lIHRoZQorICBtYXhpbXVtIHBhdGggbGVu Z3RoIGluIG9yZGVyIHRvIGFsbG9jYXRlIGEgYnVmZmVyIHRoYXQgaXMgdGhlIHJpZ2h0IHNpemUu CisqLworI2lmZGVmIEJTRDQ0CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ICAgICAgICAgICAgICAg ICAgLyogRm9yIE1BWFBBVEhMRU4gKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2lmZGVmIENPSEVS RU5UCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ICAvKiBmb3IgTUFYUEFUSExFTiwgbmVlZGVkIGZv ciAtRERJUkVOVCAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworCisjaWZkZWYgTUFYUEFUSExFTgorI2lmZGVmIE1BWFBBVEgKKyN1bmRlZiBNQVhQQVRICisj ZW5kaWYgLyogTUFYUEFUSCAqLworI2RlZmluZSBNQVhQQVRIIE1BWFBBVEhMRU4KKyNlbHNlCisj aWZkZWYgUEFUSF9NQVgKKyNkZWZpbmUgTUFYUEFUSCBQQVRIX01BWAorI2Vsc2UKKyNpZmRlZiBf UE9TSVhfUEFUSF9NQVgKKyNkZWZpbmUgTUFYUEFUSCBfUE9TSVhfUEFUSF9NQVgKKyNlbHNlCisj aWZkZWYgQlNENDIKKyNkZWZpbmUgTUFYUEFUSCAxMDI0CisjZWxzZQorI2lmZGVmIFNWUjQKKyNk ZWZpbmUgTUFYUEFUSCAxMDI0CisjZWxzZQorI2RlZmluZSBNQVhQQVRIIDI1NQorI2VuZGlmIC8q IFNWUjQgKi8KKyNlbmRpZiAvKiBCU0Q0MiAqLworI2VuZGlmIC8qIF9QT1NJWF9QQVRIX01BWCAq LworI2VuZGlmIC8qIFBBVEhfTUFYICovCisjZW5kaWYgLyogTUFYUEFUSExFTiAqLworCisvKiBN YXhpbXVtIG51bWJlciBvZiBmaWxlbmFtZXMgZm9yIHdpbGRjYXJkIGV4cGFuc2lvbiAqLworCisj aWZuZGVmIE1BWFdMRAorLyogQWxyZWFkeSBkZWZpbmVkIGluIGNrY2RlYi5oIHNvIHRoZSBmb2xs b3dpbmcgaXMgc3VwZXJmbHVvdXMuICovCisvKiBEb24ndCBleHBlY3QgY2hhbmdpbmcgdGhlbSB0 byBoYXZlIGFueSBlZmZlY3QuICovCisjaWZkZWYgQ0tfU01BTEwKKyNkZWZpbmUgTUFYV0xEIDUw CisjZWxzZQorI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5lIE1BWFdMRCAxMDI0MDAKKyNlbHNlCisj ZGVmaW5lIE1BWFdMRCA4MTkyCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBDS19T TUFMTCAqLworI2VuZGlmIC8qIE1BWFdMRCAqLworCitzdGF0aWMgaW50IG1heG5hbWVzID0gTUFY V0xEOworCisvKiBEZWZpbmUgdGhlIHNpemUgb2YgdGhlIHN0cmluZyBzcGFjZSBmb3IgZmlsZW5h bWUgZXhwYW5zaW9uLiAqLworCisjaWZuZGVmIERZTkFNSUMKKyNpZmRlZiBQUk9WWDEKKyNkZWZp bmUgU1NQQUNFIDUwMAorI2Vsc2UKKyNpZmRlZiBCU0QyOQorI2RlZmluZSBTU1BBQ0UgNTAwCisj ZWxzZQorI2lmZGVmIHBkcDExCisjZGVmaW5lIFNTUEFDRSA1MDAKKyNlbHNlCisjaWZkZWYgYWVn aXMKKyNkZWZpbmUgU1NQQUNFIDEwMDAwICAgICAgICAgICAgICAgICAgICAvKiBTaXplIG9mIHN0 cmluZy1nZW5lcmF0aW5nIGJ1ZmZlciAqLworI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERlZmF1bHQgc3RhdGljIGJ1ZmZlciBzaXplICovCisjaWZkZWYgQklHQlVG T0sKKyNkZWZpbmUgU1NQQUNFIDY1MDAwICAgICAgICAgICAgICAgICAgICAvKiBTaXplIG9mIHN0 cmluZy1nZW5lcmF0aW5nIGJ1ZmZlciAqLworI2Vsc2UKKyNkZWZpbmUgU1NQQUNFIDIwMDAgICAg ICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIHN0cmluZy1nZW5lcmF0aW5nIGJ1ZmZlciAqLwor I2VuZGlmIC8qIEJJR0JVRk9LICovCisjZW5kaWYgLyogYWVnaXMgKi8KKyNlbmRpZiAvKiBwZHAx MSAqLworI2VuZGlmIC8qIEJTRDI5ICovCisjZW5kaWYgLyogUFJPVlgxICovCitzdGF0aWMgY2hh ciBzc3BhY2VbU1NQQUNFXTsgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBnZW5lcmF0aW5nIGZp bGVuYW1lcyAqLworI2Vsc2UgLyogaXMgRFlOQU1JQyAqLworI2lmZGVmIENLXzY0QklUCisjZGVm aW5lIFNTUEFDRSAyMDAwMDAwMDAwCQkvKiBUd28gYmlsbGlvbiBieXRlcyAqLworI2Vsc2UKKyNp ZmRlZiBCSUdCVUZPSworI2RlZmluZSBTU1BBQ0UgMTAwMDAwMDAJCQkvKiBUZW4gbWlsbGlvbiAq LworI2Vsc2UKKyNkZWZpbmUgU1NQQUNFIDEwMDAwCQkJLyogVGVuIHRob3VzYW5kICovCisjZW5k aWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZgkvKiBDS182NEJJVCAqLworY2hhciAqc3NwYWNlID0g KGNoYXIgKikwOworI2VuZGlmIC8qIERZTkFNSUMgKi8KK3N0YXRpYyBpbnQgc3NwbGVuID0gU1NQ QUNFOwkJLyogTGVuZ3RoIG9mIHN0cmluZyBzcGFjZSBidWZmZXIgKi8KKworI2lmZGVmIERDTEZE T1BFTgorLyogZmRvcGVuKCkgbmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFy ZWQgaW4gPHN0ZGlvLmg+ICovCitfUFJPVE9UWVAoIEZJTEUgKiBmZG9wZW4sIChpbnQsIGNoYXIg KikgKTsKKyNlbmRpZiAvKiBEQ0xGRE9QRU4gKi8KKworI2lmZGVmIERDTFBPUEVOCisvKiBwb3Bl bigpIG5lZWRzIGRlY2xhcmluZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5o PiAqLworX1BST1RPVFlQKCBGSUxFICogcG9wZW4sIChjaGFyICosIGNoYXIgKikgKTsKKyNlbmRp ZiAvKiBEQ0xQT1BFTiAqLworCitleHRlcm4gaW50IG5vcHVzaDsKKworLyogTW9yZSBpbnRlcm5h bCBmdW5jdGlvbiBwcm90b3R5cGVzICovCisvKgorICogVGhlIHBhdGggc3RydWN0dXJlIGlzIHVz ZWQgdG8gcmVwcmVzZW50IHRoZSBuYW1lIHRvIG1hdGNoLgorICogRWFjaCBzbGFzaC1zZXBhcmF0 ZWQgc2VnbWVudCBvZiB0aGUgbmFtZSBpcyBrZXB0IGluIG9uZQorICogc3VjaCBzdHJ1Y3R1cmUs IGFuZCB0aGV5IGFyZSBsaW5rZWQgdG9nZXRoZXIsIHRvIG1ha2UKKyAqIHRyYXZlcnNpbmcgdGhl IG5hbWUgZWFzaWVyLgorICovCitzdHJ1Y3QgcGF0aCB7CisgICAgY2hhciBucGFydFtNQVhOQU1M RU4rNF07ICAgICAgICAgICAgLyogbmFtZSBwYXJ0IG9mIHBhdGggc2VnbWVudCAqLworICAgIHN0 cnVjdCBwYXRoICpmd2Q7ICAgICAgICAgICAgICAgICAgIC8qIGZvcndhcmQgcHRyICovCit9Owor I2lmbmRlZiBOT1BVU0gKK19QUk9UT1RZUCggaW50IHNoeHBhbmQsIChjaGFyICosIGNoYXIgKltd LCBpbnQgKSApOworI2VuZGlmIC8qIE5PUFVTSCAqLworX1BST1RPVFlQKCBzdGF0aWMgaW50IGZn ZW4sIChjaGFyICosIGNoYXIgKltdLCBpbnQgKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCB0 cmF2ZXJzZSwgKHN0cnVjdCBwYXRoICosIGNoYXIgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBz dGF0aWMgVk9JRCBhZGRyZXN1bHQsIChjaGFyICosIGludCkgKTsKKyNpZmRlZiBDT01NRU5UCisv KiBSZXBsYWNlZCBieSBja21hdGNoKCkgKi8KK19QUk9UT1RZUCggc3RhdGljIGludCBtYXRjaCwg KGNoYXIgKiwgY2hhciAqKSApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK19QUk9UT1RZUCggY2hh ciAqIHdob2FtaSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFVJRF9UIHJlYWxfdWlkLCAodm9pZCkg KTsKK19QUk9UT1RZUCggc3RhdGljIHN0cnVjdCBwYXRoICpzcGxpdHBhdGgsIChjaGFyICpwKSAp OworX1BST1RPVFlQKCBjaGFyICogemR0c3RyLCAodGltZV90KSApOworX1BST1RPVFlQKCB0aW1l X3QgenN0cmR0LCAoY2hhciAqLCBpbnQpICk7CisKKy8qIFNvbWUgc3lzdGVtcyBkZWZpbmUgdGhl c2Ugc3ltYm9scyBpbiBpbmNsdWRlIGZpbGVzLCBvdGhlcnMgZG9uJ3QuLi4gKi8KKworI2lmbmRl ZiBSX09LCisjZGVmaW5lIFJfT0sgNCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGFj Y2VzcyAqLworI2VuZGlmIC8qIFJfT0sgKi8KKworI2lmbmRlZiBXX09LCisjZGVmaW5lIFdfT0sg MgorI2VuZGlmIC8qIFdfT0sgKi8KKworI2lmbmRlZiBYX09LCisjZGVmaW5lIFhfT0sgMQorI2Vu ZGlmIC8qIFhfT0sgKi8KKworI2lmbmRlZiBPX1JET05MWQorI2RlZmluZSBPX1JET05MWSAwMDAK KyNlbmRpZiAvKiBPX1JET05MWSAqLworCisvKiBzeXNsb2cgYW5kIHd0bXAgaXRlbXMgZm9yIElu dGVybmV0IEtlcm1pdCBTZXJ2aWNlICovCisKK2V4dGVybiBjaGFyICogY2xpZW50aG9zdDsgICAg ICAgICAgICAgICAvKiBGcm9tIGNrY21haS5jLiAqLworCitzdGF0aWMgY2hhciBmdWxsbmFtZVtD S01BWFBBVEgrMV07CitzdGF0aWMgY2hhciB0bXAyW0NLTUFYUEFUSCsxXTsKKworZXh0ZXJuIGlu dCBja3hsb2dnaW5nOworCisjaWZkZWYgQ0tYUFJJTlRGICAgICAgICAgICAgICAgICAgICAgICAg LyogT3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLworI3VuZGVmIHByaW50ZiAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSBvZiAicHJpbnRmIiBpbiBzeXNsb2cuaCAqLwor I2VuZGlmIC8qIENLWFBSSU5URiAqLworI2lmZGVmIENLU1lTTE9HCisjaWZkZWYgUlRBSVgKKyNp bmNsdWRlIDxzeXMvc3lzbG9nLmg+CisjZWxzZSAgLyogUlRBSVggKi8KKyNpbmNsdWRlIDxzeXNs b2cuaD4KKyNlbmRpZiAvKiBSVEFJWCAqLworI2VuZGlmIC8qIENLU1lTTE9HICovCisjaWZkZWYg Q0tYUFJJTlRGCisjZGVmaW5lIHByaW50ZiBja3hwcmludGYKKyNlbmRpZiAvKiBDS1hQUklOVEYg Ki8KKworaW50IGNreGFub24gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFub255bW91 cyBsb2dpbiBvayAqLworaW50IGNreHBlcm1zID0gMDA0MDsgICAgICAgICAgICAgICAgICAgIC8q IEFub255bW91cyBmaWxlIHBlcm1pc3Npb25zICovCitpbnQgY2t4cHJpdiA9IDE7CQkJLyogUHJp didkIGxvZ2luIG9rICovCisKKyNpZm5kZWYgWEZFUkZJTEUKKyNkZWZpbmUgWEZFUkZJTEUgIi92 YXIvbG9nL2lrc2QubG9nIgorI2VuZGlmIC8qIFhGRVJGSUxFICovCisKKy8qIHd0bXAgbG9nZ2lu ZyBmb3IgSUtTRC4uLiAqLworCisjaWZuZGVmIENLV1RNUCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogd3RtcCBsb2dnaW5nIG5vdCBzZWxlY3RlZCAqLworaW50IGNreHd0bXAgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEtub3cgdGhpcyBhdCBydW50aW1lICovCisjZWxzZSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd3RtcCBmaWxlIGRldGFpbHMgKi8KK2lu dCBja3h3dG1wID0gMTsKKyNpZmRlZiBVVE1QQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBVbmZvcnR1bmF0ZWx5Li4uICovCisvKgorICBTb21lIHZlcnNpb25zIG9mIExpbnV4IGhhdmUg YSA8dXRtcC5oPiBmaWxlIHRoYXQgY29udGFpbnMKKyAgImVudW0gdXRsb2dpbiB7IGxvY2FsLCB0 ZWxuZXQsIHJsb2dpbiwgc2NyZWVuLCAuLi4gfTsiICBUaGlzIGNsb2JiZXJzCisgIGFueSBwcm9n cmFtIHRoYXQgdXNlcyBhbnkgb2YgdGhlc2Ugd29yZHMgYXMgdmFyaWFibGUgbmFtZXMsIGZ1bmN0 aW9uCisgIG5hbWVzLCBtYWNybyBuYW1lcywgZXRjLiAgKE90aGVyIHZlcnNpb25zIG9mIExpbnV4 IGhhdmUgdGhpcyBkZWNsYXJhdGlvbgorICB3aXRoaW4gI2lmIDAgLi4uICNlbmRpZi4pICBUaGVy ZSBpcyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCB0aGlzIG90aGVyCisgIHRoYW4gdG8gbm90IGlu Y2x1ZGUgdGhlIHN0dXBpZCBmaWxlLiAgQnV0IHdlIG5lZWQgc3R1ZmYgZnJvbSBpdCwgc28uLi4K KyovCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNkZWZp bmUgVVRfTElORVNJWkUgICAgIDMyCisjZGVmaW5lIFVUX05BTUVTSVpFICAgICAzMgorI2RlZmlu ZSBVVF9IT1NUU0laRSAgICAgMjU2CisKK3N0cnVjdCB0aW1ldmFsIHsKKyAgdGltZV90IHR2X3Nl YzsKKyAgdGltZV90IHR2X3VzZWM7Cit9OworCitzdHJ1Y3QgZXhpdF9zdGF0dXMgeworICBzaG9y dCBpbnQgZV90ZXJtaW5hdGlvbjsgICAgICAvKiBQcm9jZXNzIHRlcm1pbmF0aW9uIHN0YXR1cy4g ICovCisgIHNob3J0IGludCBlX2V4aXQ7ICAgICAgICAgICAgIC8qIFByb2Nlc3MgZXhpdCBzdGF0 dXMuICAqLworfTsKKworc3RydWN0IHV0bXAgeworICBzaG9ydCBpbnQgdXRfdHlwZTsgICAgICAg ICAgICAgICAgICAgIC8qIFR5cGUgb2YgbG9naW4gKi8KKyAgcGlkX3QgdXRfcGlkOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQaWQgb2YgbG9naW4gcHJvY2VzcyAqLworICBjaGFyIHV0X2xp bmVbVVRfTElORVNJWkVdOyAgICAgICAgICAgIC8qIE5VTC10ZXJtaW5hdGVkIGRldmljZW5hbWUg b2YgdHR5ICovCisgIGNoYXIgdXRfaWRbNF07ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5p dHRhYiBpZCAqLworICBjaGFyIHV0X3VzZXJbVVRfTkFNRVNJWkVdOyAgICAgICAgICAgIC8qIFVz ZXJuYW1lIChub3QgTlVMIHRlcm1pbmF0ZWQpICovCisKKyAgY2hhciB1dF9ob3N0W1VUX0hPU1RT SVpFXTsgICAgICAgICAgICAvKiBIb3N0bmFtZSBmb3IgcmVtb3RlIGxvZ2luICovCisgIHN0cnVj dCBleGl0X3N0YXR1cyB1dF9leGl0OyAgICAgICAgICAgLyogRXhpdCBzdGF0dXMgKi8KKyAgbG9u ZyB1dF9zZXNzaW9uOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXNzaW9uIElELCB1c2VkIGZv ciB3aW5kb3dpbmcgKi8KKyAgc3RydWN0IHRpbWV2YWwgdXRfdHY7ICAgICAgICAgICAgICAgICAv KiBUaW1lIGVudHJ5IHdhcyBtYWRlICovCisgIGludDMyX3QgdXRfYWRkcl92Nls0XTsgICAgICAg ICAgICAgICAgLyogSW50ZXJuZXQgYWRkcmVzcyBvZiByZW1vdGUgaG9zdCAqLworICBjaGFyIHBh ZFsyMF07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2VydmVkICovCit9OworCisjZGVm aW5lIHV0X3RpbWUgdXRfdHYudHZfc2VjICAgIC8qIFdoeSBzaG91bGQgTGludXggYmUgbGlrZSBh bnl0aGluZyBlbHNlPyAqLworI2RlZmluZSB1dF9uYW1lIHV0X3VzZXIgICAgICAgICAvKiAuLi4g Ki8KKworZXh0ZXJuIHZvaWQKK2xvZ3d0bXAgX19QICgoX19jb25zdCBjaGFyICpfX3V0X2xpbmUs IF9fY29uc3QgY2hhciAqX191dF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fdXRfaG9zdCkpOworCisjZWxzZSAgLyogTm90IFVUTVBCVUcgKi8KKworI2lm bmRlZiBIQVZFVVRNUFggICAgICAgICAgICAgICAgICAgICAgIC8qIFdobyBoYXMgPHV0bXB4Lmg+ ICovCisjaWZkZWYgU09MQVJJUworI2RlZmluZSBIQVZFVVRNUFgKKyNlbHNlCisjaWZkZWYgSVJJ WDYwCisjZGVmaW5lIEhBVkVVVE1QWAorI2Vsc2UKKyNpZmRlZiBDS19TQ09WNQorI2RlZmluZSBI QVZFVVRNUFgKKyNlbHNlCisjaWZkZWYgSFBVWDEwMAorI2RlZmluZSBIQVZFVVRNUFgKKyNlbHNl CisjaWZkZWYgVU5JWFdBUkUKKyNkZWZpbmUgSEFWRVVUTVBYCisjZW5kaWYgLyogVU5JWFdBUkUg Ki8KKyNlbmRpZiAvKiBIUFVYMTAwICovCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNlbmRpZiAv KiBJUklYNjAgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5kaWYgLyogSEFWRVVUTVBYICov CisKKyNpZmRlZiBIQVZFVVRNUFgKKyNpbmNsdWRlIDx1dG1weC5oPgorI2Vsc2UKKyNpZmRlZiBP U0Y1MAorLyogQmVjYXVzZSB0aGUgdGltZV90IGluIHRoZSB1dG1wIHN0cnVjdCBpcyA2NCBiaXRz IGJ1dCB0aW1lKCkgd2FudHMgMzIgKi8KKyNkZWZpbmUgX19WNDBfT0JKX0NPTVBBVCAxCisjZW5k aWYgLyogT1NGNTAgKi8KKyNpbmNsdWRlIDx1dG1wLmg+CisjaWZkZWYgT1NGNTAKKyN1bmRlZiBf X1Y0MF9PQkpfQ09NUEFUCisjZW5kaWYgLyogT1NGNTAgKi8KKyNlbmRpZiAvKiBIQVZFVVRNUFgg Ki8KKyNlbmRpZiAvKiBVVE1QQlVHICovCisKKyNpZmRlZiBIQVZFVVRNUFgKKyNkZWZpbmUgVVRN UFNUUlVDVCB1dG1weAorI2Vsc2UKKyNkZWZpbmUgVVRNUFNUUlVDVCB1dG1wCisjZW5kaWYJLyog SEFWRVVUTVBYICovCisKKyNpZm5kZWYgV1RNUEZJTEUKKyNpZmRlZiBRTlgKKyNkZWZpbmUgV1RN UEZJTEUgIi91c3IvYWRtL3d0bXAuMSIKKyNlbHNlCisjaWZkZWYgTElOVVgKKyNkZWZpbmUgV1RN UEZJTEUgIi92YXIvbG9nL3d0bXAiCisjZWxzZQorI2RlZmluZSBXVE1QRklMRSAiL3Vzci9hZG0v d3RtcCIKKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBMSU5VWCAqLworI2VuZGlmIC8qIFdU TVBGSUxFICovCitjaGFyICogd3RtcGZpbGUgPSBOVUxMOworCitzdGF0aWMgaW50IHd0bXBmZCA9 IDA7CitzdGF0aWMgY2hhciBja3N5c2xpbmVbMzJdID0geyBOVUwsIE5VTCB9OworCisjaWZuZGVm IEhBVkVVVEhPU1QgICAgICAgICAgICAgICAgICAgICAgLyogRG9lcyB1dG1wIGluY2x1ZGUgdXRf aG9zdFtdPyAqLworI2lmZGVmIEhBVkVVVE1QWCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHV0 bXB4IGFsd2F5cyBkb2VzICovCisjZGVmaW5lIEhBVkVVVEhPU1QKKyNlbHNlCisjaWZkZWYgTElO VVggICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGludXggZG9lcyAqLworI2RlZmluZSBI QVZFVVRIT1NUCisjZWxzZQorI2lmZGVmIFNVTk9TNCAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFN1bk9TIGRvZXMgKi8KKyNkZWZpbmUgSEFWRVVUSE9TVAorI2Vsc2UKKyNpZmRlZiBBSVg0 MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBSVggNC4xIGFuZCBsYXRlciBkbyAqLwor I2RlZmluZSBIQVZFVVRIT1NUCisjZW5kaWYgLyogQUlYNDEgKi8KKyNlbmRpZiAvKiBTVU5PUzQg Ki8KKyNlbmRpZiAvKiBMSU5VWCAqLworI2VuZGlmIC8qIEhBVkVVVE1QWCAqLworI2VuZGlmIC8q IEhBVkVVVEhPU1QgKi8KKworI2lmZGVmIFVXMjAwCitQSURfVCBfdmZvcmsoKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogVG8gc2F0aXNmeSBhIGxpYnJhcnkgZm91bHVwICovCisgICAgcmV0 dXJuKGZvcmsoKSk7ICAgICAgICAgICAgICAgICAgICAgLyogaW4gVW5peHdhcmUgMi4wLnggKi8K K30KKyNlbmRpZiAvKiBVVzIwMCAqLworCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2xvZ3d0bXAo Y29uc3QgY2hhciAqIGxpbmUsIGNvbnN0IGNoYXIgKiBuYW1lLCBjb25zdCBjaGFyICogaG9zdCkK KyNlbHNlCitsb2d3dG1wKGxpbmUsIG5hbWUsIGhvc3QpIGNoYXIgKmxpbmUsICpuYW1lLCAqaG9z dDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbG9nd3RtcCAqLyB7CisgICAgc3RydWN0IFVU TVBTVFJVQ1QgdXQ7CisgICAgc3RydWN0IHN0YXQgYnVmOworICAgIC8qIHRpbWVfdCB0aW1lKCk7 ICovCisKKyAgICBpZiAoIWNreHd0bXApCisgICAgICByZXR1cm47CisKKyAgICBpZiAoIXd0bXBm aWxlKQorICAgICAgbWFrZXN0cigmd3RtcGZpbGUsV1RNUEZJTEUpOworCisgICAgaWYgKCFsaW5l KSBsaW5lID0gIiI7CisgICAgaWYgKCFuYW1lKSBuYW1lID0gIiI7CisgICAgaWYgKCFob3N0KSBo b3N0ID0gIiI7CisKKyAgICBpZiAoIXd0bXBmZCAmJiAod3RtcGZkID0gb3Blbih3dG1wZmlsZSwg T19XUk9OTFl8T19BUFBFTkQsIDApKSA8IDApIHsKKyAgICAgICAgY2t4d3RtcCA9IDA7CisgICAg ICAgIGRlYnVnKEYxMTAsIldUTVAgb3BlbiBmYWlsZWQiLGxpbmUsMCk7CisgICAgICAgIHJldHVy bjsKKyAgICB9CisgICAgaWYgKCFmc3RhdCh3dG1wZmQsICZidWYpKSB7CisgICAgICAgIGNrc3Ry bmNweSh1dC51dF9saW5lLCBsaW5lLCBzaXplb2YodXQudXRfbGluZSkpOworI2lmZGVmIEZSRUVC U0Q5CisgICAgICAgIGNrc3RybmNweSh1dC51dF91c2VyLCBuYW1lLCBzaXplb2YodXQudXRfdXNl cikpOworI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KHV0LnV0X25hbWUsIG5hbWUsIHNpemVvZih1 dC51dF9uYW1lKSk7CisjZW5kaWYJLyogRlJFRUJTRDkgKi8KKyNpZmRlZiBIQVZFVVRIT1NUCisg ICAgICAgIC8qIE5vdCBwb3J0YWJsZSAqLworICAgICAgICBja3N0cm5jcHkodXQudXRfaG9zdCwg aG9zdCwgc2l6ZW9mKHV0LnV0X2hvc3QpKTsKKyNlbmRpZiAvKiBIQVZFVVRIT1NUICovCisjaWZk ZWYgSEFWRVVUTVBYCisgICAgICAgIHRpbWUoJnV0LnV0X3R2LnR2X3NlYyk7CisjZWxzZQorI2lm ZGVmIExJTlVYCisvKiBJbiBsaWdodCBvZiB0aGUgZm9sbG93aW5nIGNvbW1lbnQgcGVyaGFwcyB0 aGUgcHJldmlvdXMgbGluZSBzaG91bGQgKi8KKy8qIGJlICIjaWZuZGVmIENPTU1FTlQiLiAqLwor ICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogT24gNjQtYml0IHBsYXRm b3JtcyBzaXplb2YodGltZV90KSBhbmQgc2l6ZW9mKHV0LnV0X3RpbWUpCisgICAgICAgICAgICAg KiBhcmUgbm90IHRoZSBzYW1lIGFuZCBhdHRlbXB0IHRvIHVzZSBhbiBhZGRyZXNzIG9mCisgICAg ICAgICAgICAgKiB1dC51dF90aW1lIGFzIGFuIGFyZ3VtZW50IHRvIHRpbWUoKSBjYWxsIG1heSBj YXVzZQorICAgICAgICAgICAgICogInVuYWxpZ25lZCBhY2Nlc3MiIHRyYXAuCisgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgIHRpbWVfdCB6ejsKKyAgICAgICAgICAgIHRpbWUoJnp6KTsKKyAg ICAgICAgICAgIHV0LnV0X3RpbWUgPSB6ejsKKyAgICAgICAgfQorI2Vsc2UKKyNpZmRlZiBDS182 NEJJVAorICAgICAgICB7CisJICAgIC8qIE5vdyAoSmFuIDIwMDYpIHdlIGNhbiBkbyB0aGlzIGZv ciBhbnkgNjQtYml0IGJ1aWxkICovCisgICAgICAgICAgICB0aW1lX3Qgeno7CisgICAgICAgICAg ICB0aW1lKCZ6eik7CisgICAgICAgICAgICB1dC51dF90aW1lID0geno7CisgICAgICAgIH0KKyNl bHNlCisgICAgICAgIHRpbWUoJnV0LnV0X3RpbWUpOworI2VuZGlmCS8qIENLXzY0QklUICovCisj ZW5kaWYgLyogTElOVVggKi8KKyNlbmRpZiAvKiBIQVZFVVRNUFggKi8KKyAgICAgICAgaWYgKHdy aXRlKHd0bXBmZCwgKGNoYXIgKikmdXQsIHNpemVvZihzdHJ1Y3QgVVRNUFNUUlVDVCkpICE9Cisg ICAgICAgICAgICBzaXplb2Yoc3RydWN0IFVUTVBTVFJVQ1QpKSB7CisjaWZuZGVmIE5PRlRSVU5D QVRFCisjaWZuZGVmIENPSEVSRU5UCisgICAgICAgICAgICBmdHJ1bmNhdGUod3RtcGZkLCBidWYu c3Rfc2l6ZSk7IC8qIEVycm9yLCB1bmRvIGFueSBwYXJ0aWFsIHdyaXRlICovCisjZWxzZQorICAg ICAgICAgICAgY2hzaXplKHd0bXBmZCwgYnVmLnN0X3NpemUpOyAvKiBFcnJvciwgdW5kbyBhbnkg cGFydGlhbCB3cml0ZSAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogTk9GVFJV TkNBVEUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIldUTVAgd3JpdGUgZXJyb3IiLGxpbmUs MCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJXVE1QIHJlY29y ZCBPSyIsbGluZSwwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30K KyNlbmRpZiAvKiBDS1dUTVAgKi8KKworI2lmZGVmIENLU1lTTE9HCisvKgorICBDIEsgUyBZIFMg TCBPIEcgIC0tICBDLUtlcm1pdCBzeXN0ZW0gbG9nZ2luZyBmdW5jdGlvbiwKKworICBGb3IgdXNl IGJ5IG90aGVyIG1vZHVsZXMuCisgIFRoaXMgbW9kdWxlIGNhbiwgYnV0IGRvZXNuJ3QgaGF2ZSB0 bywgdXNlIGl0LgorICBDYWxsIHdpdGg6CisgICAgbiA9IFNZU0xHX3h4IHZhbHVlcyBkZWZpbmVk IGluIGNrY2RlYi5oCisgICAgczEsIHMyLCBzMzogc3RyaW5ncy4KKyovCitWT0lECitja3N5c2xv ZyhuLCBtLCBzMSwgczIsIHMzKSBpbnQgbiwgbTsgY2hhciAqIHMxLCAqIHMyLCAqIHMzOyB7Cisg ICAgaW50IGxldmVsOworCisgICAgaWYgKCFja3hsb2dnaW5nKSAgICAgICAgICAgICAgICAgICAg Lyogc3lzbG9nZ2luZyAqLworICAgICAgcmV0dXJuOworICAgIGlmICghczEpIHMxID0gIiI7ICAg ICAgICAgICAgICAgICAgIC8qIEZpeCBudWxsIGFyZ3MgKi8KKyAgICBpZiAoIXMyKSBzMiA9ICIi OworICAgIGlmICghczMpIHMzID0gIiI7CisgICAgc3dpdGNoIChuKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogVHJhbnNsYXRlIEtlcm1pdCBsZXZlbCAqLworICAgICAgY2FzZSBTWVNMR19E QjogICAgICAgICAgICAgICAgICAgIC8qIHRvIHN5c2xvZyBsZXZlbCAqLworICAgICAgICBsZXZl bCA9IExPR19ERUJVRzsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBs ZXZlbCA9IG0gPyBMT0dfSU5GTyA6IExPR19FUlI7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImNr c3lzbG9nIHMxIixzMSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJja3N5c2xvZyBzMiIsczIsMCk7Cisg ICAgZGVidWcoRjExMCwiY2tzeXNsb2cgczMiLHMzLDApOworICAgIGVycm5vID0gMDsKKyAgICBz eXNsb2cobGV2ZWwsICIlczogJXMgJXMiLCBzMSwgczIsIHMzKTsgLyogV3JpdGUgc3lzbG9nIHJl Y29yZCAqLworICAgIGRlYnVnKEYxMDEsImNrc3lzbG9nIGVycm5vIiwiIixlcnJubyk7Cit9Cisj ZW5kaWYgLyogQ0tTWVNMT0cgKi8KKworCisvKiBEZWNsYXJhdGlvbnMgKi8KKworaW50IG1heG5h bSA9IE1BWE5BTUxFTjsgICAgICAgICAgICAgICAgIC8qIEF2YWlsYWJsZSB0byB0aGUgb3V0c2lk ZSAqLworaW50IG1heHBhdGggPSBNQVhQQVRIOworaW50IGNrX3puZXduID0gLTE7CisKKyNpZmRl ZiBVTklYCitjaGFyIHN0YXJ0dXBkaXJbTUFYUEFUSCsxXTsKKyNlbmRpZiAvKiBVTklYICovCisK K2ludCBwZXhpdHN0YXQgPSAtMjsgICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGV4aXQg c3RhdHVzICovCisKK0ZJTEUgKmZwW1pORklMU10gPSB7ICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIHBvaW50ZXJzICovCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCisvKiBGbGFncyBm b3IgZWFjaCBmaWxlIGluZGljYXRpbmcgd2hldGhlciBpdCB3YXMgb3BlbmVkIHdpdGggcG9wZW4o KSAqLworaW50IGlzcGlwZVtaTkZJTFNdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwIH07CisKKy8qIEJ1ZmZlcnMgYW5kIHBvaW50ZXJzIHVzZWQgaW4gYnVmZmVyZWQg ZmlsZSBpbnB1dCBhbmQgb3V0cHV0LiAqLworI2lmZGVmIERZTkFNSUMKK2V4dGVybiBjaGFyICp6 aW5idWZmZXIsICp6b3V0YnVmZmVyOworI2Vsc2UKK2V4dGVybiBjaGFyIHppbmJ1ZmZlcltdLCB6 b3V0YnVmZmVyW107CisjZW5kaWYgLyogRFlOQU1JQyAqLworZXh0ZXJuIGNoYXIgKnppbnB0ciwg KnpvdXRwdHI7CitleHRlcm4gaW50IHppbmNudCwgem91dGNudDsKK2V4dGVybiBpbnQgd2lsZHhw YW5kLCB3aWxkZW5hOwkJLyogV2lsZGNhcmQgaGFuZGxpbmcgKi8KKworc3RhdGljIENLX09GRl9U IGlmbGVuID0gKENLX09GRl9UKS0xOwkvKiBJbnB1dCBmaWxlIGxlbmd0aCAqLworCitzdGF0aWMg UElEX1QgcGlkID0gMDsgICAgICAgICAgICAgICAgICAgLyogcGlkIG9mIGNoaWxkIGZvcmsgKi8K K3N0YXRpYyBpbnQgZmNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgZmls ZXMgaW4gd2lsZCBncm91cCAqLworc3RhdGljIGludCBueHBhbmQgPSAwOyAgICAgICAgICAgICAg ICAgIC8qIENvcHkgb2YgZmNvdW50ICovCitzdGF0aWMgY2hhciBuYW1idWZbQ0tNQVhQQVRIKzRd OyAgICAgICAgLyogQnVmZmVyIGZvciBhIHBhdGhuYW1lICovCisKKyNpZm5kZWYgTk9GUklMTFMK KyNkZWZpbmUgWk1CVUZMRU4gMjAwCitzdGF0aWMgY2hhciB6bWJ1ZltaTUJVRkxFTl07CQkvKiBG b3IgbWFpbCwgcmVtb3RlIHByaW50IHN0cmluZ3MgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLwor CitjaGFyICoqbXRjaHMgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgLyogTWF0Y2hlcyBmb3Vu ZCBmb3IgZmlsZW5hbWUgKi8KK2NoYXIgKiptdGNocHRyID0gTlVMTDsgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIGN1cnJlbnQgbWF0Y2ggKi8KKworLyogIFogSyBTIEUgTCBGICAtLSAg S2lsbCBTZWxmOiBsb2cgb3V0IG93biBqb2IsIGlmIHBvc3NpYmxlLiAgKi8KKworLyogTm90ZSwg c2hvdWxkIGdldCBjdXJyZW50IHBpZCwgYnV0IGlmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSAq LworLyogZ2V0cHBpZCgpLCB0aGVuIGp1c3Qga2lsbCgwLDkpLi4uICAqLworCisjaWZuZGVmIFNW UjMKKyNpZm5kZWYgUE9TSVgKKyNpZm5kZWYgT1NGUEMKKy8qIEFscmVhZHkgZGVjbGFyZWQgaW4g dW5pc3RkLmggZm9yIFNWUjMgYW5kIFBPU0lYICovCisjaWZkZWYgQ0tfQU5TSUMKK2V4dGVybiBQ SURfVCBnZXRwcGlkKHZvaWQpOworI2Vsc2UKKyNpZm5kZWYgUFMyQUlYMTAKKyNpZm5kZWYgQ09I RVJFTlQKK2V4dGVybiBQSURfVCBnZXRwcGlkKCk7CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNl bmRpZiAvKiBQUzJBSVgxMCAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1NG UEMgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIFNWUjMgKi8KKworaW50Cit6a3Nl bGYoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yICJieWUiLCBidXQgbm8g Z3VhcmFudGVlISAqLworI2lmZGVmIFBST1ZYMQorICAgIHJldHVybihraWxsKDAsOSkpOworI2Vs c2UKKyNpZmRlZiBWNworICAgIHJldHVybihraWxsKDAsOSkpOworI2Vsc2UKKyNpZmRlZiBUT1dF UjEKKyAgICByZXR1cm4oa2lsbCgwLDkpKTsKKyNlbHNlCisjaWZkZWYgRlQxOAorICAgIHJldHVy bihraWxsKDAsOSkpOworI2Vsc2UKKyNpZmRlZiBhZWdpcworICAgIHJldHVybihraWxsKDAsOSkp OworI2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorICAgIHJldHVybihraWxsKChQSURfVClnZXRwaWQo KSwxKSk7CisjZWxzZQorI2lmZGVmIFBJRF9UCisgICAgZXhpdChraWxsKChQSURfVClnZXRwcGlk KCksMSkpOworICAgIHJldHVybigwKTsKKyNlbHNlCisgICAgZXhpdChraWxsKGdldHBwaWQoKSwx KSk7CisgICAgcmV0dXJuKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5k aWYKKyNlbmRpZgorI2VuZGlmCit9CisKK3N0YXRpYyBWT0lECitnZXRmdWxsbmFtZShuYW1lKSBj aGFyICogbmFtZTsgeworICAgIGNoYXIgKnAgPSAoY2hhciAqKWZ1bGxuYW1lOworICAgIGludCBs ZW4gPSAwOworICAgIGZ1bGxuYW1lWzBdID0gJ1wwJzsKKyAgICAvKiBJZiBuZWNlc3Nhcnkgd2Ug Y291bGQgYWxzbyBjaGFzZSBkb3duIHN5bWxpbmtzIGhlcmUuLi4gKi8KKyNpZmRlZiBDT01NRU5U CisgICAgLyogVGhpcyB3b3JrcyBidXQgaXMgaW5jb21wYXRpYmxlIHdpdGggd3VmdHBkICovCisg ICAgaWYgKGlzZ3Vlc3QgJiYgYW5vbnJvb3QpIHsKKyAgICAgICAgY2tzdHJuY3B5KGZ1bGxuYW1l LGFub25yb290LENLTUFYUEFUSCk7CisgICAgICAgIGxlbiA9IHN0cmxlbihmdWxsbmFtZSk7Cisg ICAgICAgIGlmIChsZW4gPiAwKQorICAgICAgICAgIGlmIChmdWxsbmFtZVtsZW4tMV0gPT0gJy8n KQorICAgICAgICAgICAgbGVuLS07CisgICAgfQorICAgIHAgKz0gbGVuOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICB6Zm5xZnAobmFtZSwgQ0tNQVhQQVRIIC0gbGVuLCBwKTsKKyAgICB3aGls ZSAoKnApIHsKKyAgICAgICAgaWYgKCpwIDwgJyEnKSAqcCA9ICdfJzsKKyAgICAgICAgcCsrOwor ICAgIH0KK30KKworLyogIEQgTyBJIEsgTCBPIEcgIC0tICBPcGVuIEtlcm1pdC1zcGVjaWZpYyBm dHAtbGlrZSB0cmFuc2ZlciBsb2cuICovCisKK1ZPSUQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDYWxsZWQgaW4gY2tjbWFpLmMgKi8KK2RvaWtsb2coKSB7CisgICAgaWYg KGlrbG9nb3BlbikgICAgICAgICAgICAgICAgICAgICAgLyogQWxyZWFkeSBvcGVuPyAqLworICAg ICAgcmV0dXJuOworICAgIGlmICh4ZmVybG9nKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIE9w ZW4gaWtzZCBsb2cgaWYgcmVxdWVzdGVkICovCisgICAgICAgIGlmICgheGZlcmZpbGUpICAgICAg ICAgICAgICAgICAgLyogSWYgbm8gcGF0aG5hbWUgZ2l2ZW4gKi8KKyAgICAgICAgICBtYWtlc3Ry KCZ4ZmVyZmlsZSxYRkVSRklMRSk7CS8qIHVzZSB0aGlzIGRlZmF1bHQgKi8KKyAgICAgICAgaWYg KCp4ZmVyZmlsZSkgeworICAgICAgICAgICAgeGZlcmxvZyA9IG9wZW4oeGZlcmZpbGUsIE9fV1JP TkxZIHwgT19BUFBFTkQgfCBPX0NSRUFULCAwNjYwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs ImRvaWtsb2cgb3BlbiIsIiIseGZlcmxvZyk7CisgICAgICAgICAgICBpZiAoeGZlcmxvZyA8IDAp IHsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgICAgIHN5c2xvZyhMT0dfRVJSLCAieGZl cmxvZyBvcGVuIGZhaWx1cmUgJXM6ICVtIiwgeGZlcmZpbGUpOworI2VuZGlmIC8qIENLU1lTTE9H ICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9pa2xvZyBvcGVuIGVycm5vIiwiIixl cnJubyk7CisgICAgICAgICAgICAgICAgeGZlcmxvZyA9IDA7CisgICAgICAgICAgICB9IGVsc2UK KyAgICAgICAgICAgICAgaWtsb2dvcGVuID0gMTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg eGZlcmxvZyA9IDA7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKHhmZXJsb2cgJiYgY2t4 bG9nZ2luZykKKyAgICAgICAgICBzeXNsb2coTE9HX0lORk8sICJ4ZmVybG9nOiAlcyBvcGVuIG9r IiwgeGZlcmZpbGUpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgfQorfQorCisvKiAgWiBP IFAgRSBOIEkgIC0tICBPcGVuIGFuIGV4aXN0aW5nIGZpbGUgZm9yIGlucHV0LiAqLworCisvKiBS ZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlICovCisKK2ludAorem9wZW5pKG4sbmFt ZSkgaW50IG47IGNoYXIgKm5hbWU7IHsKKyAgICBpbnQgeDsKKworICAgIGRlYnVnKEYxMTEsInpv cGVuaSIsbmFtZSxuKTsKKyAgICBpZiAoKHggPSBjaGtmbihuKSkgIT0gMCkgeworCWRlYnVnKEYx MTEsInpvcGVuaSBjaGtmbiIsY2tpdG9hKG4pLHgpOworCXJldHVybigwKTsKKyAgICB9CisgICAg emluY250ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgaW5wdXQgYnVmZmVy ICovCisgICAgaWYgKG4gPT0gWlNZU0ZOKSB7ICAgICAgICAgICAgICAgICAgLyogSW5wdXQgZnJv bSBhIHN5c3RlbSBmdW5jdGlvbj8gKi8KKyNpZmRlZiBDT01NRU5UCisvKioqIE5vdGUsIHRoaXMg ZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBaU1lTRk4gKioqLworLyoqKiBBbHdh eXMgY2FsbCB6eGNtZCgpIGRpcmVjdGx5LCBhbmQgZ2l2ZSBpdCB0aGUgcmVhbCBmaWxlIG51bWJl ciAqKiovCisvKioqIHlvdSB3YW50IHRvIHVzZS4gICoqKi8KKyAgICAgICAgcmV0dXJuKHp4Y21k KG4sbmFtZSkpOyAgICAgICAgICAvKiBUcnkgdG8gZm9yayB0aGUgY29tbWFuZCAqLworI2Vsc2UK KyAgICAgICAgZGVidWcoRjExMCwiem9wZW5pIGNhbGxlZCB3aXRoIFpTWVNGTiwgZmFpbGluZyEi LG5hbWUsMCk7CisgICAgICAgICpuYW1idWYgPSAnXDAnOyAgICAgICAgICAgICAgICAgLyogTm8g ZmlsZW5hbWUuICovCisgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgLyog ZmFpbC4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAgIGlmIChuID09IFpTVERJ TykgeyAgICAgICAgICAgICAgICAgIC8qIFN0YW5kYXJkIGlucHV0PyAqLworICAgICAgICBpZiAo aXNfYV90dHkoMCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJUZXJtaW5hbCBpbnB1 dCBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgZGVidWcoRjExMCwiem9wZW5pOiBhdHRlbXB0 cyBpbnB1dCBmcm9tIHVucmVkaXJlY3RlZCBzdGRpbiIsIiIsMCk7CisgICAgICAgICAgICByZXR1 cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgZnBbWklGSUxFXSA9IHN0ZGluOworICAgICAgICBp c3BpcGVbWklGSUxFXSA9IDA7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisjaWZkZWYgQ0tS T09UCisgICAgZGVidWcoRjExMSwiem9wZW5pIHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOwor ICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChuYW1lKSkgeworCWRlYnVnKEYxMTAsInpv cGVuaSBzZXRyb290IHZpb2xhdGlvbiIsbmFtZSwwKTsKKwlyZXR1cm4oMCk7CisgICAgfQorI2Vu ZGlmIC8qIENLUk9PVCAqLworICAgIGZwW25dID0gZm9wZW4obmFtZSwiciIpOyAgICAgICAgICAg IC8qIFJlYWwgZmlsZSwgb3BlbiBpdC4gKi8KKyAgICAvKiBkZWJ1ZyhGMTExLCJ6b3BlbmkgZm9w ZW4iLCBuYW1lLCBmcFtuXSk7ICovCisjaWZkZWYgWkRFQlVHCisgICAgLyogcHJpbnRmKCJaT1BF TkkgZnBbJWRdPSVsZFxuIixuLGZwW25dKTsgKi8KKyNlbmRpZiAvKiBaREVCVUcgKi8KKyAgICBp c3BpcGVbbl0gPSAwOworCisgICAgaWYgKHhmZXJsb2cKKyNpZmRlZiBDS1NZU0xPRworICAgICAg ICB8fCAoKGNreHN5c2xvZyA+PSBTWVNMR19GQSkgJiYgY2t4bG9nZ2luZykKKyNlbmRpZiAvKiBD S1NZU0xPRyAqLworICAgICAgICApIHsKKyAgICAgICAgZ2V0ZnVsbG5hbWUobmFtZSk7CisgICAg ICAgIGRlYnVnKEYxMTAsInpvcGVuaSBmdWxsbmFtZSIsZnVsbG5hbWUsMCk7CisgICAgfQorICAg IGlmIChmcFtuXSA9PSBOVUxMKSB7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5 c2xvZyA+PSBTWVNMR19GQSAmJiBja3hsb2dnaW5nKSB7CisJICAgIHN5c2xvZyhMT0dfSU5GTywg ImZpbGVbJWRdICVzOiBvcGVuIGZhaWxlZCAoJW0pIiwgbiwgZnVsbG5hbWUpOworCSAgICBwZXJy b3IoZnVsbG5hbWUpOworCX0gZWxzZQorI2VuZGlmIC8qIENLU1lTTE9HICovCisJICBwZXJyb3Io bmFtZSk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9IGVsc2UgeworI2lmZGVmIENLU1lTTE9H CisgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfRkEgJiYgY2t4bG9nZ2luZykKKyAgICAg ICAgICBzeXNsb2coTE9HX0lORk8sICJmaWxlWyVkXSAlczogb3BlbiByZWFkIG9rIiwgbiwgZnVs bG5hbWUpOworI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIGNsZWFyZXJyKGZwW25dKTsK KyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KK30KKworI2lmZGVmIFFOWAorI2RlZmluZSBET05E RUxBWQorI2Vsc2UKKyNpZmRlZiBPX05ERUxBWQorI2RlZmluZSBET05ERUxBWQorI2VuZGlmIC8q IE9fTkRFTEFZICovCisjZW5kaWYgLyogUU5YICovCisKKy8qICBaIE8gUCBFIE4gTyAgLS0gIE9w ZW4gYSBuZXcgZmlsZSBmb3Igb3V0cHV0LiAgKi8KKworLypBUkdTVVNFRCovCS8qIHp6IG5vdCB1 c2VkICovCitpbnQKK3pvcGVubyhuLG5hbWUsenosZmNiKQorLyogem9wZW5vICovICBpbnQgbjsg Y2hhciAqbmFtZTsgc3RydWN0IHphdHRyICp6ejsgc3RydWN0IGZpbGluZm8gKmZjYjsgeworCisg ICAgY2hhciBwWzhdOworICAgIGludCBhcHBlbmQgPSAwOworICAgIGludCBpc3R0eSA9IDAsIGZp bGVmZCA9IDA7CisKKy8qIEFzIG9mIFZlcnNpb24gNUEsIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJl IGFuZCB0aGUgZmlsZSBpbmZvcm1hdGlvbiAqLworLyogc3RydWN0dXJlIGFyZSBpbmNsdWRlZCBp biB0aGUgYXJnbGlzdC4gKi8KKworI2lmZGVmIERFQlVHCisgICAgZGVidWcoRjExMSwiem9wZW5v IixuYW1lLG4pOworICAgIGlmIChmY2IpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiem9wZW5vIGZj YiBkaXNwIiwiIixmY2ItPmRzcCk7CisgICAgICAgIGRlYnVnKEYxMDEsInpvcGVubyBmY2IgdHlw ZSIsIiIsZmNiLT50eXApOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6b3Blbm8gZmNiIGNoYXIiLCIi LGZjYi0+Y3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKEYxMDAsInpvcGVubyBmY2Ig aXMgTlVMTCIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAoY2hr Zm4obikgIT0gMCkgICAgICAgICAgICAgICAgICAvKiBBbHJlYWR5IG9wZW4/ICovCisgICAgICBy ZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byBkby4gKi8KKwor ICAgIGlmICgobiA9PSBaQ1RFUk0pIHx8IChuID09IFpTVERJTykpIHsgLyogVGVybWluYWwgb3Ig c3RhbmRhcmQgb3V0cHV0ICovCisgICAgICAgIGZwW1pPRklMRV0gPSBzdGRvdXQ7CisgICAgICAg IGlzcGlwZVtaT0ZJTEVdID0gMDsKKyNpZmRlZiBDT01NRU5UCisJLyogVGhpcyBzZWVtcyByaWdo dCBidXQgaXQgYnJlYWtzIGNsaWVudCBzZXJ2ZXIgb3BzICovCisJZnBbbl0gPSBzdGRvdXQ7Cisg ICAgICAgIGlzcGlwZVtuXSA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIENPTU1F TlQKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAobiAhPSBaREZJTEUpCisgICAgICAgICAgZGVi dWcoRjEwMSwiem9wZW5vIGZwW25dPXN0ZG91dCIsIiIsZnBbbl0pOworI2VuZGlmIC8qIERFQlVH ICovCisjZW5kaWYJLyogQ09NTUVOVCAqLworICAgICAgICB6b3V0Y250ID0gMDsKKyAgICAgICAg em91dHB0ciA9IHpvdXRidWZmZXI7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisKKy8qIEEg cmVhbCBmaWxlLiAgT3BlbiBpdCBpbiBkZXNpcmVkIG1vZGUgKGNyZWF0ZSBvciBhcHBlbmQpLiAq LworCisjaWZkZWYgQ0tST09UCisgICAgZGVidWcoRjExMSwiem9wZW5vIHNldHJvb3QiLGNrcm9v dCxja3Jvb3RzZXQpOworICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChuYW1lKSkgewor CWRlYnVnKEYxMTAsInpvcGVubyBzZXRyb290IHZpb2xhdGlvbiIsbmFtZSwwKTsKKwlyZXR1cm4o MCk7CisgICAgfQorI2VuZGlmIC8qIENLUk9PVCAqLworCisgICAgY2tzdHJuY3B5KHAsInciLDgp OwkJCS8qIEFzc3VtZSB3cml0ZS9jcmVhdGUgbW9kZSAqLworICAgIGlmIChmY2IpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIElmIGNhbGxlZCB3aXRoIGFuIEZDQi4uLiAqLworICAgICAg ICBpZiAoZmNiLT5kc3AgPT0gWFlGWl9BKSB7ICAgICAgIC8qIERvZXMgaXQgc2F5IEFwcGVuZD8g Ki8KKyAgICAgICAgICAgIGNrc3RybmNweShwLCJhIiw4KTsJCS8qIFllcy4gKi8KKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsInpvcGVubyBhcHBlbmQiLCIiLDApOworICAgICAgICAgICAgYXBwZW5k ID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoeGZlcmxvZworI2lmZGVmIENLU1lTTE9H CisgICAgICAgIHx8ICgoY2t4c3lzbG9nID49IFNZU0xHX0ZDKSAmJiBja3hsb2dnaW5nKQorI2Vu ZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgICkgeworICAgICAgICBnZXRmdWxsbmFtZShuYW1l KTsKKyAgICAgICAgZGVidWcoRjExMCwiem9wZW5vIGZ1bGxuYW1lIixmdWxsbmFtZSwwKTsKKyAg ICB9CisgICAgeworICAgIC8qIEFsbG93IHR0eSBkZXZpY2VzIHRvIG9wZW5lZCBhcyBvdXRwdXQg ZmlsZXMgMjAwOS8xMC8yMCAqLworCWludCBmZCwgbW9kZSA9IDA7CisJZGVidWcoRjExMCwiem9w ZW5vIGF0dGVtcHRpbmcgdG8gb3BlbiIsbmFtZSwwKTsKKyNpZmRlZiBPX05PTkJMT0NLCisJbW9k ZSA9IE9fTk9OQkxPQ0s7CisjZWxzZQorI2lmZGVmIE9fTkRFTEFZCisJbW9kZSA9IE9fTkRFTEFZ OworI2Vsc2UKKyNpZmRlZiBGTkRFTEFZCisJbW9kZSA9IEZOREVMQVk7CisjZW5kaWYgLyogRk5E RUxBWSAqLworI2VuZGlmCS8qIE9fTkRFTEFZICovCisjZW5kaWYJLyogT19OT05CTE9DSyAqLwor CWRlYnVnKEYxMTEsInpvcGVubyBvcGVuIG1vZGUiLG5hbWUsbW9kZSk7CisJZmQgPSBvcGVuKG5h bWUsT19XUk9OTFksbW9kZSk7CisJZGVidWcoRjExMSwiem9wZW5vIG9wZW4iLG5hbWUsZmQpOyAK KwlpZiAoZmQgPiAtMSkgeworCSAgICBpZiAoaXNhdHR5KGZkKSkgeworCQlmaWxlZmQgPSBmZDsK KwkJaXN0dHkrKzsKKwkgICAgfQorCX0KKyAgICB9CisgICAgZGVidWcoRjExMSwiem9wZW5vIGlz dHR5IixuYW1lLGlzdHR5KTsKKyAgICBkZWJ1ZyhGMTEwLCJ6b3Blbm8gZm9wZW4gYXJnIixwLDAp OworICAgIGlmIChpc3R0eSkKKyAgICAgIGZwW25dID0gZmRvcGVuKGZpbGVmZCxwKTsKKyAgICBl bHNlCisgICAgICBmcFtuXSA9IGZvcGVuKG5hbWUscCk7CQkvKiBUcnkgdG8gb3BlbiB0aGUgZmls ZSAqLworICAgIGlzcGlwZVtaSUZJTEVdID0gMDsKKworI2lmZGVmIFpERUJVRworICAgIHByaW50 ZigiWk9QRU5PIGZwWyVkXT0lbGRcbiIsbixmcFtuXSk7CisjZW5kaWYgLyogWkRFQlVHICovCisK KyAgICBpZiAoZnBbbl0gPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAvKiBGYWlsZWQgKi8KKyAg ICAgICAgZGVidWcoRjEwMSwiem9wZW5vIGZhaWxlZCBlcnJubyIsIiIsZXJybm8pOworCWlmIChp c3R0eSkgY2xvc2UoZmlsZWZkKTsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lz bG9nID49IFNZU0xHX0ZDICYmIGNreGxvZ2dpbmcpCisgICAgICAgICAgc3lzbG9nKExPR19JTkZP LCAiZmlsZVslZF0gJXM6ICVzIGZhaWxlZCAoJW0pIiwKKyAgICAgICAgICAgICAgICAgbiwKKyAg ICAgICAgICAgICAgICAgZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgIGFwcGVuZCA/ICJhcHBl bmQiIDogImNyZWF0ZSIKKyAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExldCB1cHBlciBs ZXZlbHMgcHJpbnQgbWVzc2FnZS4gKi8KKyAgICAgICAgcGVycm9yKCJDYW4ndCBvcGVuIG91dHB1 dCBmaWxlIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFN1Y2NlZWRlZCAqLworICAgICAgICBleHRlcm4gaW50IHpvZmJ1 ZmZlciwgem9mYmxvY2ssIHpvYnVmc2l6ZTsKKyAgICAgICAgZGVidWcoRjEwMSwgInpvcGVubyB6 b2J1ZnNpemUiLCAiIiwgem9idWZzaXplKTsKKyAgICAgICAgaWYgKG4gPT0gWkRGSUxFIHx8IG4g PT0gWlRGSUxFKSB7IC8qIElmIGRlYnVnIG9yIHRyYW5zYWN0aW9uIGxvZyAqLworICAgICAgICAg ICAgc2V0YnVmKGZwW25dLE5VTEwpOyAgICAgICAgICAgLyogbWFrZSBpdCB1bmJ1ZmZlcmVkLiAq LworI2lmZGVmIERPTkRFTEFZCisgICAgICAgIH0gZWxzZSBpZiAobiA9PSBaT0ZJTEUgJiYgIXpv ZmJsb2NrKSB7IC8qIGJsb2NraW5nIG9yIG5vbmJsb2NraW5nICovCisgICAgICAgICAgICBpbnQg ZmxhZ3M7CisgICAgICAgICAgICBpZiAoKGZsYWdzID0gZmNudGwoZmlsZW5vKGZwW25dKSxGX0dF VEZMLDApKSA+IC0xKQorICAgICAgICAgICAgICBmY250bChmaWxlbm8oZnBbbl0pLEZfU0VURkws IGZsYWdzIHwKKyNpZmRlZiBRTlgKKyAgICAgICAgICAgICAgICAgICAgT19OT05CTE9DSworI2Vs c2UKKyAgICAgICAgICAgICAgICAgICAgT19OREVMQVkKKyNlbmRpZiAvKiBRTlggKi8KKyAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInpvcGVubyBaT0ZJTEUg bm9uYmxvY2tpbmciLCIiLDApOworI2VuZGlmIC8qIERPTkRFTEFZICovCisgICAgICAgIH0gZWxz ZSBpZiAobiA9PSBaT0ZJTEUgJiYgIXpvZmJ1ZmZlcikgeyAvKiBidWZmZXJlZCBvciB1bmJ1ZmZl cmVkICovCisgICAgICAgICAgICBzZXRidWYoZnBbbl0sTlVMTCk7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJ6b3Blbm8gWk9GSUxFIHVuYnVmZmVyZWQiLCIiLDApOworICAgICAgICB9CisKKyNp ZmRlZiBDS19MT0dJTgorICAgICAgICAvKiBFbmZvcmNlIGFub255bW91cyBmaWxlLWNyZWF0aW9u IHBlcm1pc3Npb24gKi8KKyAgICAgICAgaWYgKGlzZ3Vlc3QpCisgICAgICAgICAgaWYgKG4gPT0g WldGSUxFIHx8IG4gPT0gWk1GSUxFIHx8CisgICAgICAgICAgICAgIG4gPT0gWk9GSUxFIHx8IG4g PT0gWkRGSUxFIHx8CisgICAgICAgICAgICAgIG4gPT0gWlRGSUxFIHx8IG4gPT0gWlBGSUxFIHx8 CisgICAgICAgICAgICAgIG4gPT0gWlNGSUxFKQorICAgICAgICAgICAgY2htb2QobmFtZSxja3hw ZXJtcyk7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX0ZDICYmIGNreGxvZ2dpbmcpCisgICAgICAgICAgc3lzbG9n KExPR19JTkZPLCAiZmlsZVslZF0gJXM6ICVzIG9rIiwKKyAgICAgICAgICAgICAgICAgbiwKKyAg ICAgICAgICAgICAgICAgZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgIGFwcGVuZCA/ICJhcHBl bmQiIDogImNyZWF0ZSIKKyAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAq LworICAgICAgICBkZWJ1ZyhGMTAwLCAiem9wZW5vIG9rIiwgIiIsIDApOworICAgIH0KKyAgICB6 b3V0Y250ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAoUFdQKSByZXNldCBvdXRwdXQg YnVmZmVyICovCisgICAgem91dHB0ciA9IHpvdXRidWZmZXI7CisgICAgcmV0dXJuKChmcFtuXSAh PSBOVUxMKSA/IDEgOiAwKTsKK30KKworLyogIFogQyBMIE8gUyBFICAtLSAgQ2xvc2UgdGhlIGdp dmVuIGZpbGUuICAqLworCisvKiAgUmV0dXJucyAwIGlmIGFyZyBvdXQgb2YgcmFuZ2UsIDEgaWYg c3VjY2Vzc2Z1bCwgLTEgaWYgY2xvc2UgZmFpbGVkLiAgKi8KKworaW50Cit6Y2xvc2UobikgaW50 IG47IHsKKyAgICBpbnQgeCA9IDAsIHgyID0gMDsKKyAgICBleHRlcm4gQ0tfT0ZGX1QgZmZjOwor CisgICAgZGVidWcoRjEwMSwiemNsb3NlIGZpbGUgbnVtYmVyIiwiIixuKTsKKyAgICBpZiAoY2hr Zm4obikgPCAxKSByZXR1cm4oMCk7ICAgICAgICAvKiBDaGVjayByYW5nZSBvZiBuICovCisgICAg aWYgKChuID09IFpPRklMRSkgJiYgKHpvdXRjbnQgPiAwKSkgLyogKFBXUCkgb3V0cHV0IGxlZnRv dmVycyAqLworICAgICAgeDIgPSB6b3V0ZHVtcCgpOworCisgICAgaWYgKGZwW1pTWVNGTl0gfHwg aXNwaXBlW25dKSB7ICAgICAgLyogSWYgZmlsZSBpcyByZWFsbHkgcGlwZSAqLworI2lmbmRlZiBO T1BVU0gKKyAgICAgICAgeCA9IHpjbG9zZihuKTsgICAgICAgICAgICAgICAgICAvKiBkbyBpdCBz cGVjaWFsbHkgKi8KKyNlbHNlCisgICAgICAgIHggPSBFT0Y7CisjZW5kaWYgLyogTk9QVVNIICov CisgICAgICAgIGRlYnVnKEYxMDEsInpjbG9zZSB6Y2xvc2YiLCIiLHgpOworICAgICAgICAvKiBk ZWJ1ZyhGMTAxLCJ6Y2xvc2UgemNsb3NmIGZwW25dIiwiIixmcFtuXSk7ICovCisgICAgfSBlbHNl IHsKKyAgICAgICAgaWYgKChmcFtuXSAhPSBzdGRvdXQpICYmIChmcFtuXSAhPSBzdGRpbikpCisg ICAgICAgICAgeCA9IGZjbG9zZShmcFtuXSk7CisgICAgICAgIGZwW25dID0gTlVMTDsKKyNpZmRl ZiBDT01NRU5UCisJaWYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKQkvKiBTZWUgem9wZW5v KCkgKi8KKwkgIGlmIChmcFtaT0ZJTEVdID09IHN0ZG91dCkKKwkgICAgZnBbWk9GSUxFXSA9IE5V TEw7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICBpZmxlbiA9IC0xTDsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkYXRlIGZpbGUgbGVuZ3RoICovCisgICAgaWYgKHgg PT0gRU9GKSB7ICAgICAgICAgICAgICAgICAgICAgLyogaWYgd2UgZ290IGEgY2xvc2UgZXJyb3Ig Ki8KKyAgICAgICAgZGVidWcoRjEwMSwiemNsb3NlIGZjbG9zZSBmYWlscyIsIiIseCk7CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIGlmICh4MiA8IDApIHsgICAgICAgICAgICAgICAg Lyogb3IgZXJyb3IgZmx1c2hpbmcgbGFzdCBidWZmZXIgKi8KKyAgICAgICAgZGVidWcoRjEwMSwi emNsb3NlIGVycm9yIGZsdXNoaW5nIGxhc3QgYnVmZmVyIiwiIix4Mik7CisgICAgICAgIHJldHVy bigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogdGhlbiByZXR1cm4gYW4gZXJyb3IgKi8KKyAg ICB9IGVsc2UgeworICAgICAgICAvKiBQcmludCBsb2cgcmVjb3JkIGNvbXBhdGlibGUgd2l0aCB3 dS1mdHBkICovCisgICAgICAgIGlmICh4ZmVybG9nICYmIChuID09IFpJRklMRSB8fCBuID09IFpP RklMRSkpIHsKKyAgICAgICAgICAgIGNoYXIgKiBzLCAqcDsKKyAgICAgICAgICAgIGV4dGVybiBj aGFyIHR0bmFtZVtdOworICAgICAgICAgICAgaWYgKCFpa2xvZ29wZW4pIChWT0lEKSBkb2lrbG9n KCk7IC8qIE9wZW4gbG9nIGlmIG5lY2Vzc2FyeSAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwi emNsb3NlIGlrbG9nb3BlbiIsIiIsaWtsb2dvcGVuKTsKKyAgICAgICAgICAgIGlmIChpa2xvZ29w ZW4pIHsKKwkJaW50IGxlbjsKKwkJY2hhciAqIGZuYW07CisKKyAgICAgICAgICAgICAgICB0aW1l bm93ID0gdGltZShOVUxMKTsKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAgICAgICAgIGlmIChs b2dnZWRfaW4pCisgICAgICAgICAgICAgICAgICBzID0gY2xpZW50aG9zdDsKKyAgICAgICAgICAg ICAgICBlbHNlCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgICAgICAgICAgIHMgPSAo Y2hhciAqKXR0bmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAg ICAgICAgICBpZiAoISpzKSBzID0gIioiOworI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgICAg ICAgaWYgKGxvZ2dlZF9pbikgeworICAgICAgICAgICAgICAgICAgICBwID0gZ3Vlc3RwYXNzOwor ICAgICAgICAgICAgICAgICAgICBpZiAoISpwKSBwID0gIioiOworICAgICAgICAgICAgICAgIH0g ZWxzZQorI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICAgICAgICAgICAgICBwID0gd2hvYW1p KCk7CisKKwkJbGVuID0gMjQgKyAxMiArIChpbnQpc3RybGVuKHMpICsgMTYKKwkJICArIChpbnQp c3RybGVuKGZ1bGxuYW1lKSArIDEgKyAxICsgMSArIDEKKwkJICAgICsgKGludClzdHJsZW4ocCkg KyA2ICsgMiArIDEyOworCQlmbmFtID0gZnVsbG5hbWU7CisJCWlmICghKmZuYW0pIGZuYW0gPSAi KHBpcGUpIjsKKworCQlpZiAobGVuID4gSUtTRE1TR0xFTikKKwkJICBzcHJpbnRmKGlrc2Rtc2cs CS8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICIlLjI0cyBbQlVGRkVSIFdPVUxE IE9WRVJGTE9XXVxuIixjdGltZSgmdGltZW5vdykpOworCQllbHNlCisJCSAgc3ByaW50Zihpa3Nk bXNnLAkvKiBTQUZFICovCisgICAgICAgICAgICAgICAgICAgICAgICAiJS4yNHMgJWQgJXMgJXMg JXMgJWMgJXMgJWMgJWMgJXMgJXMgJWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBj dGltZSgmdGltZW5vdyksICAgICAgICAvKiBkYXRlL3RpbWUgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIGd0aW1lcigpLCAgICAgICAgICAgICAgIC8qIGVsYXBzZWQgc2VjcyAqLworICAgICAg ICAgICAgICAgICAgICAgICAgcywgICAgICAgICAgICAgICAgICAgICAgLyogcGVlciBuYW1lICov CisJCQlja2ZzdG9hKGZmYyksCSAgICAgICAgLyogYnl0ZSBjb3VudCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgZm5hbSwJCQkvKiBmdWxsIHBhdGhuYW1lIG9mIGZpbGUgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIChiaW5hcnkgPyAnYicgOiAnYScpLCAgIC8qIGJpbmFyeSBvciBhc2Np aSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIl8iLCAgICAgICAgICAgICAgICAgICAgLyog b3B0aW9ucyA9IG5vbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPT0gWklGSUxFID8g J28nIDogJ2knLCAvKiBpbi9vdXQgKi8KKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAgICAgICAg ICAgICAgICAgKGlzZ3Vlc3QgPyAnYScgOiAncicpLCAgLyogVXNlciB0eXBlICovCisjZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgJ3InLAorI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAg ICAgICAgICAgICAgICAgICAgICBwLCAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VybmFtZSBv ciBndWVzdCBwYXNzd2QgKi8KKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAgICAgICAgICAgICAg ICAgbG9nZ2VkX2luID8gImlrcyIgOiAia2VybWl0IiwgLyogUmVjb3JkIElEICovCisjZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgImtlcm1pdCIsCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAvKiBVc2VyIElEIG9uIGNs aWVudCBzeXN0ZW0gdW5rbm93biAqLworICAgICAgICAgICAgICAgICAgICAgICAgIioiICAgICAg ICAgICAgIC8qIERpdHRvICovCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsInpjbG9zZSBpa3NkbXNnIixpa3NkbXNnLDApOworICAgICAgICAg ICAgICAgIHdyaXRlKHhmZXJsb2csIGlrc2Rtc2csIChpbnQpc3RybGVuKGlrc2Rtc2cpKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2UgcmV0dXJu cyIsIiIsMSk7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9Cit9CisKKy8qICBaIEMgSCBJIE4g IC0tICBHZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgaW5wdXQgZmlsZS4gICovCisKKy8qICBSZXR1 cm5zIC0xIGlmIEVPRiwgMCBvdGhlcndpc2Ugd2l0aCBjaGFyYWN0ZXIgcmV0dXJuZWQgaW4gYXJn dW1lbnQgICovCisKK2ludAoremNoaW4obixjKSBpbnQgbjsgaW50ICpjOyB7CisgICAgaW50IGE7 CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCAmJiAobiA9PSBaQ1RF Uk0gfHwgbiA9PSBaU1RESU8pKSB7CisgICAgICAgIGEgPSBjb25pbmMoMCk7CisgICAgICAgIGlm ICgqYyA8IDApCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBJ S1NEICovCisgICAgLyogKFBXUCkgSnVzdCBpbiBjYXNlIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiBp dCBzaG91bGRuJ3QuICovCisgICAgaWYgKG4gPT0gWklGSUxFKSB7CisgICAgICAgIGEgPSB6bWlu Y2hhcigpOwkJCS8qIE5vdGU6IHRoaXMgY2F0Y2hlcyBDdHJsLVogKi8KKyAgICAgICAgaWYgKGEg PCAwKQkJCS8qIChTZWUgemluZmlsbCgpLi4uKSAqLworCSAgcmV0dXJuKC0xKTsKKyAgICB9IGVs c2UgeworCWEgPSBnZXRjKGZwW25dKTsKKwlpZiAoYSA9PSBFT0YpIHJldHVybigtMSk7CisjaWZk ZWYgQ0tfQ1RSTFoKKwkvKiBJZiBTRVQgRklMRSBFT0YgQ1RSTC1aLCBmaXJzdCBDdHJsLVogbWFy a3MgRU9GICovCisJaWYgKCFiaW5hcnkgJiYgYSA9PSAweDFBICYmIGVvZm1ldGhvZCA9PSBYWUVP Rl9aKQorCSAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBDS19DVFJMWiAqLworICAgIH0KKyAgICAq YyA9IChDSEFSKSBhICYgMDM3NzsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBaIFMgSSBOIEwg IC0tICBSZWFkIGEgbGluZSBmcm9tIGEgZmlsZSAgKi8KKworLyoKKyAgV3JpdGVzIHRoZSBsaW5l IGludG8gdGhlIGFkZHJlc3MgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KKyAgbiBpcyB0aGUgS2Vy bWl0ICJjaGFubmVsIG51bWJlciIuCisgIFdyaXRpbmcgdGVybWluYXRlcyB3aGVuIG5ld2xpbmUg aXMgZW5jb3VudGVyZWQsIG5ld2xpbmUgaXMgbm90IGNvcGllZC4KKyAgV3JpdGluZyBhbHNvIHRl cm1pbmF0ZXMgdXBvbiBFT0Ygb3IgaWYgbGVuZ3RoIHggaXMgZXhoYXVzdGVkLgorICBSZXR1cm5z IDAgb24gc3VjY2VzcywgLTEgb24gRU9GIG9yIGVycm9yLgorKi8KK2ludAorenNpbmwobixzLHgp IGludCBuLCB4OyBjaGFyICpzOyB7CisgICAgaW50IGEsIHogPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgLyogeiBpcyByZXR1cm4gY29kZS4gKi8KKyAgICBpbnQgY291bnQgPSAwOworICAgIGlu dCBsZW4gPSAwOworICAgIGNoYXIgKmJ1ZjsKKyAgICBleHRlcm4gQ0hBUiBmZW9sOyAgICAgICAg ICAgICAgICAgICAvKiBMaW5lIHRlcm1pbmF0b3IgKi8KKworICAgIGlmICghcyB8fCBjaGtmbihu KSA8IDEpICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBmaWxlIGlzIG9wZW4sIGV0YyAqLworICAg ICAgcmV0dXJuKC0xKTsKKyAgICBidWYgPSBzOworICAgIHNbMF0gPSAnXDAnOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERvbid0IHJldHVybiBqdW5rICovCisKKyAgICBhID0gLTE7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IGNoYXJhY3Rlciwgbm9uZSB5ZXQuICov CisgICAgd2hpbGUgKHgtLSkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogVXAgdG8gZ2l2ZW4g bGVuZ3RoICovCisgICAgICAgIGludCBvbGQgPSAwOworICAgICAgICBpZiAoZmVvbCkgICAgICAg ICAgICAgICAgICAgICAgIC8qIFByZXZpb3VzIGNoYXJhY3RlciAqLworICAgICAgICAgIG9sZCA9 IGE7CisgICAgICAgIGlmICh6Y2hpbihuLCZhKSA8IDApIHsgICAgICAgICAgLyogUmVhZCBhIGNo YXJhY3RlciBmcm9tIHRoZSBmaWxlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c2lubCB6 Y2hpbiBmYWlsIiwiIixjb3VudCk7CisgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAg ICAgICAgICAgeiA9IC0xOyAgICAgICAgICAgICAgICAgICAvKiBFT0Ygb3Igb3RoZXIgZXJyb3Ig Ki8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICBjb3VudCsr OworICAgICAgICBpZiAoZmVvbCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFNpbmdsZS1jaGFy YWN0ZXIgbGluZSB0ZXJtaW5hdG9yICovCisgICAgICAgICAgICBpZiAoYSA9PSBmZW9sKQorICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDUkxGIGxpbmUgdGVybWluYXRvciAqLworICAgICAgICAgICAgaWYgKGEgPT0gJ1wwMTUn KSAgICAgICAgICAgIC8qIENSLCBnZXQgbmV4dCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgICAgICBpZiAob2xkID09ICdcMDE1JykgeyAgICAgICAgLyogUHJl dmlvdXMgY2hhcmFjdGVyIHdhcyBDUiAqLworICAgICAgICAgICAgICAgIGlmIChhID09ICdcMDEy JykgeyAgICAgIC8qIFRoaXMgb25lIGlzIExGLCBzbyB3ZSBoYXZlIGEgbGluZSAqLworICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAvKiBOb3QgTEYsIGRlcG9zaXQgQ1IgKi8KKyAgICAgICAgICAgICAgICAgICAgKnMrKyA9 ICdcMDE1JzsKKyAgICAgICAgICAgICAgICAgICAgeC0tOworICAgICAgICAgICAgICAgICAgICBs ZW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgKnMgPSBhOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZXBvc2l0IGNoYXJhY3RlciAq LworICAgICAgICBzKys7CisgICAgICAgIGxlbisrOworICAgIH0KKyAgICAqcyA9ICdcMCc7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0cmluZyAqLworICAgIGRl YnVnKEYwMTEsInpzaW5sIixidWYsbGVuKTsKKyAgICByZXR1cm4oeik7Cit9CisKKy8qICBaIFgg SSBOICAtLSAgUmVhZCB4IGJ5dGVzIGZyb20gYSBmaWxlICAqLworCisvKgorICBSZWFkcyB4IGJ5 dGVzIChvciBsZXNzKSBmcm9tIGNoYW5uZWwgbiBhbmQgd3JpdGVzIHRoZW0KKyAgdG8gdGhlIGFk ZHJlc3MgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KKyAgUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMg cmVhZCBvbiBzdWNjZXNzLCAwIG9uIEVPRiBvciBlcnJvci4KKyovCitpbnQKK3p4aW4obixzLHgp IGludCBuLCB4OyBjaGFyICpzOyB7CisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJiAh bG9jYWwgJiYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkgeworICAgICAgICBpbnQgYSwg aTsKKyAgICAgICAgYSA9IHR0Y2hrKCk7CisgICAgICAgIGlmIChhIDwgMSkgcmV0dXJuKDApOwor ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYSAmJiBpIDwgeDsgaSsrKQorICAgICAgICAgIHNbaV0g PSBjb25pbmMoMCk7CisgICAgICAgIHJldHVybihpKTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAq LworCisgICAgcmV0dXJuKGZyZWFkKHMsIHNpemVvZiAoY2hhciksIHgsIGZwW25dKSk7Cit9CisK Ky8qCisgIFogSSBOIEYgSSBMIEwgIC0tICBCdWZmZXJlZCBmaWxlIGlucHV0LgorCisgIChyZSlm aWxsIHRoZSBmaWxlIGlucHV0IGJ1ZmZlciB3aXRoIGRhdGEuICBBbGwgZmlsZSBpbnB1dAorICBz aG91bGQgZ28gdGhyb3VnaCB0aGlzIHJvdXRpbmUsIHVzdWFsbHkgYnkgY2FsbGluZyB0aGUgem1p bmNoYXIoKQorICBtYWNybyBkZWZpbmVkIGluIGNrY2tlci5oLiAgUmV0dXJuczoKKworICBWYWx1 ZSAwLi4yNTUgb24gc3VjY2VzcywgdGhlIGNoYXJhY3RlciB0aGF0IHdhcyByZWFkLgorICAtMSBv biBlbmQgb2YgZmlsZS4KKyAgLTIgb24gYW55IGtpbmQgb2YgZXJyb3Igb3RoZXIgdGhhbiBlbmQg b2YgZmlsZS4KKyAgLTMgdGltZW91dCB3aGVuIHJlYWRpbmcgZnJvbSBwaXBlIChLZXJtaXQgcGFj a2V0IG1vZGUgb25seSkuCisqLworaW50Cit6aW5maWxsKCkgeworICAgIGV4dGVybiBpbnQga2Fj dGl2ZSwgc3J2cGluZzsKKyAgICBlcnJubyA9IDA7CisKKyNpZmRlZiBaREVCVUcKKyAgICBwcmlu dGYoIlpJTkZJTEwgZnBbJWRdPSVsZFxuIixaSUZJTEUsZnBbWklGSUxFXSk7CisjZW5kaWYgLyog WkRFQlVHICovCisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCAmJiBm cFtaSUZJTEVdID09IHN0ZGluKSB7CisgICAgICAgIGludCBhLCBpOworICAgICAgICBhID0gdHRj aGsoKTsKKyAgICAgICAgaWYgKGEgPCAwKSByZXR1cm4oLTIpOworICAgICAgICBmb3IgKGkgPSAw OyBpIDwgYSAmJiBpIDwgSU5CVUZTSVpFOyBpKyspIHsKKyAgICAgICAgICAgIHppbmJ1ZmZlcltp XSA9IGNvbmluYygwKTsKKyAgICAgICAgfQorICAgICAgICB6aW5jbnQgPSBpOworICAgICAgICAv KiBzZXQgcG9pbnRlciB0byBiZWdpbm5pbmcsICg9PSAmemluYnVmZmVyWzBdKSAqLworICAgICAg ICB6aW5wdHIgPSB6aW5idWZmZXI7CisgICAgICAgIGlmICh6aW5jbnQgPT0gMCkgcmV0dXJuKC0x KTsKKyAgICAgICAgemluY250LS07ICAgICAgICAgICAgICAgICAgICAgICAvKiBPbmUgbGVzcyBj aGFyIGluIGJ1ZmZlciAqLworICAgICAgICByZXR1cm4oKGludCkoKnppbnB0cisrKSAmIDAzNzcp OyAvKiBiZWNhdXNlIHdlIHJldHVybiB0aGUgZmlyc3QgKi8KKyAgICB9CisjZW5kaWYgLyogSUtT RCAqLworCisgICAgZGVidWcoRjEwMSwiemluZmlsbCBrYWN0aXZlIiwiIixrYWN0aXZlKTsKKwor ICAgIGlmICghKGthY3RpdmUgJiYgaXNwaXBlW1pJRklMRV0pKSB7CisgICAgICAgIGlmIChmZW9m KGZwW1pJRklMRV0pKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJaSU5GSUxMIGZlb2YiLCIi LDApOworI2lmZGVmIFpERUJVRworICAgICAgICAgICAgcHJpbnRmKCJaSU5GSUxMIEVPRlxuIik7 CisjZW5kaWYgLyogWkRFQlVHICovCisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 CisgICAgfQorICAgIGNsZWFyZXJyKGZwW1pJRklMRV0pOworCisjaWZkZWYgU0VMRUNUCisgICAg LyogSGVyZSB3ZSBjYW4gY2FsbCBzZWxlY3QoKSB0byBnZXQgYSB0aW1lb3V0Li4uICovCisgICAg aWYgKGthY3RpdmUgJiYgaXNwaXBlW1pJRklMRV0pIHsKKyAgICAgICAgaW50IHNlY3MsIHogPSAw OworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgaWYgKHNydnBpbmcpIHsKKyAgICAgICAgICAgIHNl Y3MgPSAxOworICAgICAgICAgICAgZGVidWcoRjEwMSwiemluZmlsbCBjYWxsaW5nIHR0d2FpdCIs IiIsc2Vjcyk7CisgICAgICAgICAgICB6ID0gdHR3YWl0KGZpbGVubyhmcFtaSUZJTEVdKSxzZWNz KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInppbmZpbGwgdHR3YWl0IiwiIix6KTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICBpZiAoeiA9PSAwKQorICAgICAgICAg IHJldHVybigtMyk7CisgICAgfQorI2VuZGlmIC8qIFNFTEVDVCAqLworCisjaWZkZWYgREVCVUcK KyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGludCBpOworICAgICAgICBkZWJ1ZyhGMTAxLCJa SU5GSUxMIElOQlVGU0laRSIsIiIsSU5CVUZTSVpFKTsKKyNpZmRlZiBVU0VfTUVNQ1BZCisgICAg ICAgIG1lbXNldCh6aW5idWZmZXIsIDB4RkYsIElOQlVGU0laRSk7CisjZWxzZQorICAgICAgICBm b3IgKGkgPSAwOyBpIDwgSU5CVUZTSVpFOyBpKyspIHsKKyAgICAgICAgICAgIHppbmJ1ZmZlcltp XSA9IDB4RkY7CisjaWZkZWYgQ09NTUVOVAkJCQkvKiBUb28gbXVjaCEgKi8KKyAgICAgICAgICAg IGRlYnVnKEYxMDEsIlpJTkZJTEwgemluYnVmZmVyW2ldIiwiIixpKTsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBVU0VfTUVNQ1BZICovCisJY2tzdHJuY3B5KHpp bmJ1ZmZlciwiemluYnVmZmVyIGlzIGEgdmFsaWQgYnVmZmVyIixJTkJVRlNJWkUpOworCS8qIGRl YnVnKEYxMTEsIlpJTkZJTEwgYWJvdXQgdG8gY2FsbCBmcmVhZCIsemluYnVmZmVyLHppbmJ1ZmZl cik7ICovCisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qCisgIE5vdGU6IFRoZSBmb2xs b3dpbmcgcmVhZCBNVVNUIGJlIG5vbmJsb2NraW5nIHdoZW4gcmVhZGluZyBmcm9tIGEgcGlwZQor ICBhbmQgd2Ugd2FudCB0aW1lb3V0cyB0byB3b3JrLiAgU2VlIHp4Y21kKCkuCisqLworICAgIHpp bmNudCA9IGZyZWFkKHppbmJ1ZmZlciwgc2l6ZW9mIChjaGFyKSwgSU5CVUZTSVpFLCBmcFtaSUZJ TEVdKTsKKyAgICBkZWJ1ZyhGMTAxLCJaSU5GSUxMIGZyZWFkIiwiIix6aW5jbnQpOyAvKiBKdXN0 IHRoZSBzaXplICovCisjaWZkZWYgWkRFQlVHCisgICAgcHJpbnRmKCJGUkVBRD0lZFxuIix6aW5j bnQpOworI2VuZGlmIC8qIFpERUJVRyAqLworI2lmZGVmIENLX0NUUkxaCisgICAgLyogSWYgU0VU IEZJTEUgRU9GIENUUkwtWiwgZmlyc3QgQ3RybC1aIG1hcmtzIEVPRiAqLworICAgIGlmICh6aW5j bnQgPiAwICYmICFiaW5hcnkgJiYgZW9mbWV0aG9kID09IFhZRU9GX1opIHsKKwlyZWdpc3RlciBp bnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgemluY250OyBpKyspIHsKKwkgICAgaWYgKHppbmJ1ZmZl cltpXSA9PSBTVUIpIHsKKwkJemluY250ID0gaTsJCS8qIFN0b3AgYXQgZmlyc3QgQ3RybC1aICov CisJCWlmIChpID09IDApCisJCSAgcmV0dXJuKC0xKTsKKwkJYnJlYWs7CisJICAgIH0KKyAgICAg ICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19DVFJMWiAqLworCisgICAgaWYgKHppbmNudCA9PSAw KSB7ICAgICAgICAgICAgICAgICAgLyogR290IG5vdGhpbmc/ICovCisgICAgICAgIGlmIChmZXJy b3IoZnBbWklGSUxFXSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsIlpJTkZJTEwgZmVycm9y IiwiIiwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlpJTkZJTEwgZXJybm8iLCIiLGVycm5v KTsKKyNpZmRlZiBaREVCVUcKKyAgICAgICAgICAgIHByaW50ZigiWklORklMTCBlcnJubz0lZFxu IixlcnJubyk7CisjZW5kaWYgLyogWkRFQlVHICovCisjaWZkZWYgRVdPVUxEQkxPQ0sKKyAgICAg ICAgICAgIHJldHVybigoZXJybm8gPT0gRVdPVUxEQkxPQ0spID8gLTMgOiAtMik7CisjZWxzZQor ICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBFV09VTERCTE9DSyAqLworICAgICAg ICB9CisKKyAgICAvKiBJbiBjYXNlIGZlb2YoKSBkaWRuJ3Qgd29yayBqdXN0IGFib3ZlIC0tIHNv bWV0aW1lcyBpdCBkb2Vzbid0Li4uICovCisKKyAgICAgICAgaWYgKGZlb2YoZnBbWklGSUxFXSkg KSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJaSU5GSUxMIGNvdW50IDAgRU9GIHJldHVybiAt MSIsIiIsMCk7CisgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGRlYnVnKEYxMDAsIlpJTkZJTEwgY291bnQgMCBub3QgRU9GIHJldHVybiAtMiIs IiIsMCk7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgfQorICAgIHpp bnB0ciA9IHppbmJ1ZmZlcjsgICAgLyogc2V0IHBvaW50ZXIgdG8gYmVnaW5uaW5nLCAoPT0gJnpp bmJ1ZmZlclswXSkgKi8KKyAgICB6aW5jbnQtLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBPbmUgbGVzcyBjaGFyIGluIGJ1ZmZlciAqLworICAgIHJldHVybigoaW50KSgqemlucHRyKysp ICYgMDM3Nyk7ICAgIC8qIGJlY2F1c2Ugd2UgcmV0dXJuIHRoZSBmaXJzdCAqLworfQorCisvKiAg WiBTIE8gVSBUICAtLSAgV3JpdGUgYSBzdHJpbmcgb3V0IHRvIHRoZSBnaXZlbiBmaWxlLCBidWZm ZXJlZC4gICovCisKKy8qICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSAqLwor CitpbnQKK3pzb3V0KG4scykgaW50IG47IGNoYXIgKnM7IHsKKyAgICBpbnQgcmMgPSAwOworICAg IHJjID0gY2hrZm4obik7CisgICAgaWYgKHJjIDwgMSkgcmV0dXJuKC0xKTsgICAgICAgICAgICAg LyogS2VlcCB0aGlzLCBwcmV2ZW50cyBtZW1vcnkgZmF1bHRzICovCisgICAgaWYgKCFzKSByZXR1 cm4oMCk7ICAgICAgICAgICAgICAgICAgLyogTnVsbCBwb2ludGVyLCBkbyBub3RoaW5nLCBzdWNj ZWVkICovCisgICAgaWYgKCEqcykgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgLyogZW1wdHkg c3RyaW5nLCBkaXR0byAqLworCisjaWZkZWYgSUtTRAorICAgIC8qCisgICAgICBUaGlzIGhhcHBl bnMgd2l0aCBjbGllbnQtc2lkZSBLZXJtaXQgc2VydmVyIHdoZW4gYSBSRU1PVEUgY29tbWFuZAor ICAgICAgd2FzIHNlbnQgZnJvbSB0aGUgc2VydmVyIHRvIHRoZSBjbGllbnQgYW5kIHRoZSBzZXJ2 ZXIgaXMgc3VwcG9zZWQgdG8KKyAgICAgIGRpc3BsYXkgdGhlIHRleHQsIGJ1dCBvZiBjb3Vyc2Ug dGhlcmUgaXMgbm8gcGxhY2UgdG8gZGlzcGxheSBpdAorICAgICAgc2luY2UgaXQgaXMgaW4gcmVt b3RlIG1vZGUgZXhlY3V0aW5nIEtlcm1pdCBwcm90b2NvbC4KKyAgICAqLworICAgIGlmIChpbnNl cnZlciAmJiAhbG9jYWwgJiYgKG4gPT0gWkNURVJNIHx8IG4gPT0gWlNURElPKSkgeworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgcmV0dXJuKHR0b2wocywoKGludClzdHJsZW4ocykpIDwgMCkgPyAt MSA6IDApOworI2Vsc2UKKyAgICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgaWYgKG4gPT0gWlNGSUxFKSB7CisJaW50 IGs7CisJayA9IHN0cmxlbihzKTsKKwlyYyA9IHdyaXRlKGZpbGVubyhmcFtuXSkscyxrKTsKKwly ZXR1cm4oKHJjID09IGspID8gMCA6IC0xKTsKKyAgICB9CisgICAgcmMgPSBmcHV0cyhzLGZwW25d KSA9PSBFT0YgPyAtMSA6IDA7CisgICAgaWYgKG4gPT0gWldGSUxFKQorICAgICAgZmZsdXNoKGZw W25dKTsKKyAgICByZXR1cm4ocmMpOworfQorCisvKiAgWiBTIE8gVSBUIEwgIC0tICBXcml0ZSBz dHJpbmcgdG8gZmlsZSwgd2l0aCBsaW5lIHRlcm1pbmF0b3IsIGJ1ZmZlcmVkICAqLworCisvKiAg UmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKi8KKworaW50Cit6c291dGwobixz KSBpbnQgbjsgY2hhciAqczsgeworICAgIGlmICh6c291dChuLHMpIDwgMCkKKyAgICAgICAgcmV0 dXJuKC0xKTsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYmIChu ID09IFpDVEVSTSB8fCBuID09IFpTVERJTykpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIHJl dHVybih0dG9jKExGKSk7CisjZWxzZQorICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNlZSBjb21tZW50cyBpbiB6c291dCgpICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBpZiAobiA9PSBaU0ZJTEUpICAgICAg ICAgICAgICAgICAgICAvKiBTZXNzaW9uIGxvZyBpcyB1bmJ1ZmZlcmVkICovCisgICAgICByZXR1 cm4od3JpdGUoZmlsZW5vKGZwW25dKSwiXG4iLDEpID09IDEgPyAwIDogLTEpOworICAgIGVsc2Ug aWYgKGZwdXRzKCJcbiIsZnBbbl0pID09IEVPRikKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYg KG4gPT0gWkRJRklMIHx8IG4gPT0gWldGSUxFKSAgICAgLyogRmx1c2ggY29ubmVjdGlvbiBsb2cg cmVjb3JkcyAqLworICAgICAgZmZsdXNoKGZwW25dKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8q ICBaIFMgTyBVIFQgWCAgLS0gIFdyaXRlIHggY2hhcmFjdGVycyB0byBmaWxlLCB1bmJ1ZmZlcmVk LiAgKi8KKworLyogIFJldHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiBvbiBzdWNj ZXNzLCAtMSBvbiBmYWlsdXJlICovCisKK2ludAorenNvdXR4KG4scyx4KSBpbnQgbiwgeDsgY2hh ciAqczsgeworICAgIGludCBrOworICAgIGlmICghcykgcmV0dXJuKDApOworICAgIGlmICghKnMp IHJldHVybigwKTsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYm IChuID09IFpDVEVSTSB8fCBuID09IFpTVERJTykpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAg IHJldHVybih0dG9sKHMseCkpOyAgICAgICAgICAgICAgLyogU2VlIGNvbW1lbnRzIGluIHpzb3V0 KCkgKi8KKyNlbHNlCisgICAgICAgIHJldHVybih4KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAgIGlmICgoayA9IChpbnQpc3RybGVuKHMpKSA+ IHgpIHggPSBrOyAvKiBOb3RoaW5nIGVsc2Ugd291bGQgbWFrZSBzZW5zZSAqLworI2lmZGVmIENP TU1FTlQKKyAgICBpZiAoY2hrZm4obikgPCAxKSByZXR1cm4oLTEpOworICAgIHJldHVybih3cml0 ZShmcFtuXS0+X2ZpbGUscyx4KSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHJldHVybih3 cml0ZShmaWxlbm8oZnBbbl0pLHMseCkgPT0geCA/IHggOiAtMSk7Cit9CisKKy8qICBaIEMgSCBP IFUgVCAgLS0gIEFkZCBhIGNoYXJhY3RlciB0byB0aGUgZ2l2ZW4gZmlsZS4gICovCisKKy8qICBT aG91bGQgcmV0dXJuIDAgb3IgZ3JlYXRlciBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlIChlLmcu IGRpc2sgZnVsbCkgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCit6Y2hvdXQocmVnaXN0ZXIg aW50IG4sIGNoYXIgYykKKyNlbHNlCit6Y2hvdXQobixjKSByZWdpc3RlciBpbnQgbjsgY2hhciBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB6Y2hvdXQoKSAqLyB7CisgICAgLyogaWYgKGNo a2ZuKG4pIDwgMSkgcmV0dXJuKC0xKTsgKi8KKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2 ZXIgJiYgIWxvY2FsICYmIChuID09IFpDVEVSTSB8fCBuID09IFpTVERJTykpIHsKKyNpZmRlZiBD T01NRU5UCisgICAgICAgIHJldHVybih0dG9jKGMpKTsKKyNlbHNlCisgICAgICAgIHJldHVybigw KTsgICAgICAgICAgICAgICAgICAgICAgLyogU2VlIGNvbW1lbnRzIGluIHpzb3V0KCkgKi8KKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAgIGlmIChu ID09IFpTRklMRSkgICAgICAgICAgICAgICAgICAgIC8qIFVzZSB1bmJ1ZmZlcmVkIGZvciBzZXNz aW9uIGxvZyAqLworICAgICAgcmV0dXJuKHdyaXRlKGZpbGVubyhmcFtuXSksJmMsMSkgPT0gMSA/ IDAgOiAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlcmVkIGZv ciBldmVyeXRoaW5nIGVsc2UgKi8KKyAgICBpZiAocHV0YyhjLGZwW25dKSA9PSBFT0YpICAgLyog SWYgdHJ1ZSwgbWF5YmUgdGhlcmUgd2FzIGFuIGVycm9yICovCisgICAgICByZXR1cm4oZmVycm9y KGZwW25dKT8tMTowKTsgICAgICAgLyogQ2hlY2sgdG8gbWFrZSBzdXJlICovCisgICAgZWxzZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLi4uICovCisgICAgICBy ZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlcmUgd2FzIG5vIGVycm9yLiAq LworfQorCisvKiAoUFdQKSBidWZmZXJlZCBjaGFyYWN0ZXIgb3V0cHV0IHJvdXRpbmUgdG8gc3Bl ZWQgdXAgZmlsZSBJTyAqLworCitpbnQKK3pvdXRkdW1wKCkgeworICAgIGludCB4OworICAgIGNo YXIgKiB6cDsKKyAgICB6b3V0cHRyID0gem91dGJ1ZmZlcjsgICAgICAgICAgICAgICAvKiBSZXNl dCBidWZmZXIgcG9pbnRlciBpbiBhbGwgY2FzZXMgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChk ZWJsb2cpCisgICAgICBkZWJ1ZyhGMTAxLCJ6b3V0ZHVtcCB6b3V0Y250IiwiIix6b3V0Y250KTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgIGlmICh6b3V0Y250ID09IDApIHsgICAgICAgICAgICAg ICAgIC8qIE5vdGhpbmcgdG8gb3V0cHV0ICovCisgICAgICAgIHJldHVybigwKTsKKyAgICB9IGVs c2UgaWYgKHpvdXRjbnQgPCAwKSB7ICAgICAgICAgICAvKiBVbmV4cGVjdGVkIG5lZ2F0aXZlIGFy Z3VtZW50ICovCisgICAgICAgIHpvdXRjbnQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogUmVz ZXQgb3V0cHV0IGJ1ZmZlciBjb3VudCAqLworICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAg ICAgICAgICAgIC8qIGFuZCBmYWlsLiAqLworICAgIH0KKworI2lmZGVmIElLU0QKKyAgICBpZiAo aW5zZXJ2ZXIgJiYgIWxvY2FsICYmIGZwW1pPRklMRV0gPT0gc3Rkb3V0KSB7CisjaWZkZWYgQ09N TUVOVAorICAgICAgICB4ID0gdHRvbCh6b3V0YnVmZmVyLHpvdXRjbnQpOworI2Vsc2UKKyAgICAg ICAgeCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgY29tbWVudHMgaW4genNv dXQoKSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgem91dGNudCA9IDA7CisgICAg ICAgIHJldHVybih4ID4gMCA/IDAgOiAtMSk7CisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKwor LyoKKyAgRnJhbmsgUHJpbmRsZSBzdWdnZXN0ZWQgdGhhdCByZXBsYWNpbmcgdGhpcyBmd3JpdGUo KSBieSBhbiBmZmx1c2goKQorICBmb2xsb3dlZCBieSBhIHdyaXRlKCkgd291bGQgaW1wcm92ZSB0 aGUgZWZmaWNpZW5jeSwgZXNwZWNpYWxseSB3aGVuCisgIHdyaXRpbmcgdG8gc3Rkb3V0LiAgU3Vi c2VxdWVudCB0ZXN0cyBzaG93ZWQgYSA1LWZvbGQgaW1wcm92ZW1lbnQuCisqLworI2lmZGVmIENP TU1FTlQKKyAgICBpZiAoeCA9IGZ3cml0ZSh6b3V0YnVmZmVyLCAxLCB6b3V0Y250LCBmcFtaT0ZJ TEVdKSkgLi4uCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZuZGVmIENLX05PTkJMT0NLCisg ICAgZmZsdXNoKGZwW1pPRklMRV0pOworI2VuZGlmIC8qIENLX05PTkJMT0NLICovCisgICAgenAg PSB6b3V0YnVmZmVyOworICAgIHdoaWxlICh6b3V0Y250ID4gMCkgeworICAgICAgICBpZiAoKHgg PSB3cml0ZShmaWxlbm8oZnBbWk9GSUxFXSksenAsem91dGNudCkpID4gLTEpIHsKKyNpZmRlZiBE RUJVRworICAgICAgICAgICAgaWYgKGRlYmxvZykgICAgICAgICAgICAgICAgIC8qIFNhdmUgYSBm dW5jdGlvbiBjYWxsLi4uICovCisgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInpvdXRkdW1wIHdy b3RlIiwiIix4KTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgem91dGNudCAtPSB4 OyAgICAgICAgICAgICAgIC8qIEFkanVzdCBvdXRwdXQgYnVmZmVyIGNvdW50ICovCisgICAgICAg ICAgICB6cCArPSB4OyAgICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50ZXIgKi8KKyAgICAg ICAgfSBlbHNlIHsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGRlYmxvZykgeworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsInpvdXRkdW1wIHdyaXRlIGVycm9yIiwiIixlcnJubyk7 CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiem91dGR1bXAgd3JpdGUgcmV0dXJucyIsIiIs eCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgIHpvdXRj bnQgPSAwOyAgICAgICAgICAgICAgICAvKiBSZXNldCBvdXRwdXQgYnVmZmVyIGNvdW50ICovCisg ICAgICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgLyogd3JpdGUoKSBmYWlsZWQg Ki8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBDIEggSyBGIE4g IC0tICBJbnRlcm5hbCBmdW5jdGlvbiB0byB2ZXJpZnkgZmlsZSBudW1iZXIgaXMgb2sgICovCisK Ky8qCisgUmV0dXJuczoKKyAgLTE6IEZpbGUgbnVtYmVyIG4gaXMgb3V0IG9mIHJhbmdlCisgICAw OiBuIGlzIGluIHJhbmdlLCBidXQgZmlsZSBpcyBub3Qgb3BlbgorICAgMTogbiBpbiByYW5nZSBh bmQgZmlsZSBpcyBvcGVuCisqLworaW50CitjaGtmbihuKSBpbnQgbjsgeworICAgIC8qIGlmIChu ICE9IFpERklMRSkgZGVidWcoRjEwMSwiY2hrZm4iLCIiLG4pOyAqLworICAgIGlmIChuIDwgMCB8 fCBuID49IFpORklMUykgeworICAgICAgICBpZiAobiAhPSBaREZJTEUpIGRlYnVnKEYxMDEsImNo a2ZuIG91dCBvZiByYW5nZSIsIiIsbik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNl IHsKKyAgICAgICAgLyogaWYgKG4gIT0gWkRGSUxFKSBkZWJ1ZyhGMTAxLCJjaGtmbiBmcFtuXSIs IiIsZnBbbl0pOyAqLworICAgICAgICByZXR1cm4oKGZwW25dID09IE5VTEwpID8gMCA6IDEpOwor ICAgIH0KK30KKworLyogIFogRyBFIFQgRiBTIC0tIFJldHVybiBmaWxlIHNpemUgcmVnYXJkbGVz cyBvZiBhY2Nlc3NpYmlsaXR5ICovCisvKgorICBVc2VkIGZvciBkaXJlY3RvcnkgbGlzdGluZ3Ms IGV0Yy4KKyAgUmV0dXJuczoKKyAgICBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBpbiBieXRlcywgMCBv ciBncmVhdGVyLCBpZiB0aGUgc2l6ZSBjYW4gYmUgbGVhcm5lZC4KKyAgICAtMSBpZiB0aGUgZmls ZSBzaXplIGNhbiBub3QgYmUgb2J0YWluZWQuCisgIEFsc28gKGFuZCB0aGlzIGlzIGEgaGFjayBq dXN0IGZvciBVTklYKToKKyAgICBJZiB0aGUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBzeW1i b2xpYyBsaW5rLAorICAgIHRoZSBnbG9iYWwgdmFyaWFibGUgaXNzeW1saW5rIGlzIHNldCB0byAx LAorICAgIGFuZCB0aGUgZ2xvYmFsIGJ1ZmZlciBsaW5rbmFtZVtdIGdldHMgdGhlIGxpbmsgdmFs dWUuCisgICAgQW5kIGl0IHNldHMgemdmc19kaXIgdG8gMSBpZiBpdCdzIGEgZGlyZWN0b3J5LCBv dGhlcndpc2UgMC4KKyAgVGhpcyBsZXRzIHVzIGF2b2lkIG51bWVyb3VzIHJlZHVuZGFudCBjYWxs cyB0byBzdGF0KCkuCisqLworaW50IHpnZnNfbGluayA9IDA7CitpbnQgemdmc19kaXIgPSAwOwor dGltZV90IHpnZnNfbXRpbWUgPSAwOwordW5zaWduZWQgaW50IHpnZnNfbW9kZSA9IDA7CisKKyNp ZmRlZiBDS1NZTUxJTksKK2NoYXIgbGlua25hbWVbQ0tNQVhQQVRIKzFdOworI2lmbmRlZiBfSUZM TksKKyNkZWZpbmUgX0lGTE5LIDAxMjAwMDAKKyNlbmRpZiAvKiBfSUZMTksgKi8KKyNlbmRpZiAv KiBDS1NZTUxJTksgKi8KKworQ0tfT0ZGX1QKK3pnZXRmcyhuYW1lKSBjaGFyICpuYW1lOyB7Cisg ICAgc3RydWN0IHN0YXQgYnVmOworICAgIGNoYXIgZm5hbVtDS01BWFBBVEgrNF07CisgICAgQ0tf T0ZGX1Qgc2l6ZSA9IChDS19PRkZfVCktMTsKKyAgICBpbnQgeDsKKyAgICBpbnQgbmVlZHJsaW5r ID0gMDsKKyAgICBjaGFyICogczsKKworICAgIGlmICghbmFtZSkgbmFtZSA9ICIiOworICAgIGlm ICghKm5hbWUpIHJldHVybigtMSk7CisKKyNpZmRlZiBVTklYCisgICAgeCA9IHN0cmxlbihuYW1l KTsKKyAgICBpZiAoeCA9PSA5ICYmICFzdHJjbXAobmFtZSwiL2Rldi9udWxsIikpCisgICAgICBy ZXR1cm4oMCk7CisjZW5kaWYgLyogVU5JWCAqLworCisgICAgcyA9IG5hbWU7CisjaWZkZWYgRFRJ TERFCisgICAgaWYgKCpzID09ICd+JykgeworICAgICAgICBzID0gdGlsZGVfZXhwYW5kKHMpOwor ICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCEqcykgcyA9IG5hbWU7CisgICAg fQorI2VuZGlmIC8qIERUSUxERSAqLworICAgIHggPSBja3N0cm5jcHkoZm5hbSxzLENLTUFYUEFU SCk7CisgICAgcyA9IGZuYW07CisgICAgZGVidWcoRjExMSwiemdldGZzIGZuYW0iLHMseCk7Cisg ICAgaWYgKHggPiAwICYmIHNbeC0xXSA9PSAnLycpCisgICAgICBzW3gtMV0gPSAnXDAnOworCisg ICAgemdmc19kaXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGl0J3Mgbm90 IGEgZGlyZWN0b3J5ICovCisgICAgemdmc19saW5rID0gMDsgICAgICAgICAgICAgICAgICAgICAg LyogQXNzdW1lIGl0J3Mgbm90IGEgc3ltbGluayAqLworICAgIHpnZnNfbXRpbWUgPSAwOwkJCS8q IE5vIHRpbWUgeWV0ICovCisgICAgemdmc19tb2RlID0gMDsJCQkvKiBObyBwZXJtaXNzaW9uIGJp dHMgeWV0ICovCisKKyNpZmRlZiBDS1NZTUxJTksgICAgICAgICAgICAgICAgICAgICAgICAvKiBX ZSdyZSBkb2luZyBzeW1saW5rcz8gKi8KKyNpZmRlZiBVU0VfTFNUQVQgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPSyB0byB1c2UgbHN0YXQoKT8gKi8KKyAgICB4ID0gbHN0YXQocywmYnVmKTsK KyAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxKTsKKyAgICBpZiAoeCA8IDApICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBzdGF0KCkgZmFpbGVkICovCisgICAgICByZXR1cm4oLTEpOworICAg IGlmICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBzZWUgaWYgaXQncyBh IHN5bWxpbmsgKi8KKyNpZmRlZiBTX0lTTE5LCisgICAgICAgIFNfSVNMTksoYnVmLnN0X21vZGUp CisjZWxzZQorI2lmZGVmIF9JRkxOSworICAgICAgICAoKF9JRk1UICYgYnVmLnN0X21vZGUpID09 IF9JRkxOSykKKyNlbmRpZiAvKiBfSUZMTksgKi8KKyNlbmRpZiAvKiBTX0lTTE5LICovCisgICAg ICAgICkgeworICAgICAgICB6Z2ZzX2xpbmsgPSAxOyAgICAgICAgICAgICAgICAgIC8qIEl0J3Mg YSBzeW1saW5rICovCisgICAgICAgIGxpbmtuYW1lWzBdID0gJ1wwJzsgICAgICAgICAgICAgLyog R2V0IHRoZSBuYW1lICovCisgICAgICAgIHggPSByZWFkbGluayhzLGxpbmtuYW1lLENLTUFYUEFU SCk7CisgICAgICAgIGRlYnVnKEYxMDEsInpnZXRmcyByZWFkbGluayIscyx4KTsKKyAgICAgICAg aWYgKHggPiAtMSAmJiB4IDwgQ0tNQVhQQVRIKSB7ICAvKiBJdCdzIGEgbGluayAqLworICAgICAg ICAgICAgbGlua25hbWVbeF0gPSAnXDAnOworICAgICAgICAgICAgc2l6ZSA9IGJ1Zi5zdF9zaXpl OyAgICAgICAgIC8qIFJlbWVtYmVyIHNpemUgb2YgbGluayAqLworICAgICAgICAgICAgeCA9IHN0 YXQocywmYnVmKTsgICAgICAgICAgIC8qIE5vdyBzdGF0IHRoZSBsaW5rZWQtdG8gZmlsZSAqLwor CSAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwyKTsKKyAgICAgICAgICAgIGlmICh4IDwgMCkgICAg ICAgICAgICAgICAgICAvKiBzbyB3ZSBjYW4gc2VlIGlmIGl0J3MgYSBkaXJlY3RvcnkgKi8KKyAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNr c3RybmNweShsaW5rbmFtZSwiKGxvb2t1cCBmYWlsZWQpIixDS01BWFBBVEgpOworICAgICAgICB9 CisgICAgfQorI2Vsc2UgIC8qICFVU0VfTFNUQVQgKi8KKyAgICB4ID0gc3RhdChzLCZidWYpOyAg ICAgICAgICAgICAgICAgICAvKiBObyBsc3RhdCgpLCB1c2Ugc3RhdCgpIGluc3RlYWQgKi8KKyAg ICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwzKTsKKyAgICBpZiAoeCA8IDApCisgICAgICByZXR1cm4o LTEpOworI2VuZGlmIC8qIFVTRV9MU1RBVCAqLworCisgICAgLyogRG8gd2UgbmVlZCB0byBjYWxs IHJlYWRsaW5rKCk/ICovCisKKyNpZmRlZiBOT0xJTktCSVRTCisvKgorICBsc3RhdCgpIGRvZXMg bm90IHdvcmsgaW4gU0NPIG9wZXJhdGluZyBzeXN0ZW1zLiAgRnJvbSAibWFuIE5TIGxzdGF0IjoK KworICBsc3RhdCBvYnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlIG5hbWVkIGJ5IHBh dGguIEluIHRoZSBjYXNlIG9mIGEKKyAgc3ltYm9saWMgbGluaywgbHN0YXQgcmV0dXJucyBpbmZv cm1hdGlvbiBhYm91dCB0aGUgbGluaywgYW5kIG5vdCB0aGUgZmlsZQorICBuYW1lZCBieSB0aGUg bGluay4gSXQgaXMgb25seSB1c2VkIGJ5IHRoZSBORlMgYXV0b21vdW50IGRhZW1vbiBhbmQgc2hv dWxkCisgIG5vdCBiZSB1dGlsaXplZCBieSB1c2Vycy4KKyovCisgICAgbmVlZHJsaW5rID0gMTsK KyAgICBkZWJ1ZyhGMTAxLCJ6Z2V0ZnMgZm9yY2VkIG5lZWRybGluayIsIiIsbmVlZHJsaW5rKTsK KyNlbHNlCisjaWZkZWYgU19JU0xOSworICAgIG5lZWRybGluayA9IFNfSVNMTksoYnVmLnN0X21v ZGUpOworICAgIGRlYnVnKEYxMDEsInpnZXRmcyBTX0lTTE5LIG5lZWRybGluayIsIiIsbmVlZHJs aW5rKTsKKyNlbHNlCisjaWZkZWYgX0lGTE5LCisgICAgbmVlZHJsaW5rID0gKF9JRk1UICYgYnVm LnN0X21vZGUpID09IF9JRkxOSzsKKyAgICBkZWJ1ZyhGMTAxLCJ6Z2V0ZnMgX0lGTE5LIG5lZWRy bGluayIsIiIsbmVlZHJsaW5rKTsKKyNlbHNlCisgICAgbmVlZHJsaW5rID0gMTsKKyAgICBkZWJ1 ZyhGMTAxLCJ6Z2V0ZnMgZGVmYXVsdCBuZWVkcmxpbmsiLCIiLG5lZWRybGluayk7CisjZW5kaWYg LyogX0lGTE5LICovCisjZW5kaWYgLyogU19JU0xOSyAqLworI2VuZGlmIC8qIE5PTElOS0JJVFMg Ki8KKworICAgIGlmIChuZWVkcmxpbmspIHsKKyAgICAgICAgbGlua25hbWVbMF0gPSAnXDAnOwor ICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIHggPSByZWFkbGluayhzLGxpbmtuYW1lLENLTUFY UEFUSCk7CisjaWZkZWYgREVCVUcKKyAgICAgICAgZGVidWcoRjExMSwiemdldGZzIHJlYWRsaW5r IixzLHgpOworICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgZGVidWcoRjEwMSwiemdldGZz IHJlYWRsaW5rIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBkZWJ1 ZyhGMTEwLCJ6Z2V0ZnMgcmVhZGxpbmsgcmVzdWx0IixsaW5rbmFtZSwwKTsKKyNlbmRpZiAvKiBE RUJVRyAqLworICAgICAgICBpZiAoeCA+IC0xICYmIHggPCBDS01BWFBBVEgpIHsKKyAgICAgICAg ICAgIHpnZnNfbGluayA9IDE7CisgICAgICAgICAgICBsaW5rbmFtZVt4XSA9ICdcMCc7CisgICAg ICAgIH0KKyAgICB9CisjZWxzZSAgLyogIUNLU1lNTElOSyAqLworICAgIHggPSBzdGF0KHMsJmJ1 Zik7ICAgICAgICAgICAgICAgICAgIC8qIEp1c3Qgc3RhdCB0aGUgZmlsZSAqLworICAgIGRlYnVn KEYxMTEsInpnZXRmcyBzdGF0IixzLHgpOworICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGFuZCBnZXQgdGhlIHNpemUgKi8KKyAgICAgIHJldHVybigtMSk7CisjZW5k aWYgLyogQ0tTWU1MSU5LICovCisKKyAgICB6Z2ZzX210aW1lID0gYnVmLnN0X210aW1lOworICAg IHpnZnNfbW9kZSA9IGJ1Zi5zdF9tb2RlOworICAgIHpnZnNfZGlyID0gKFNfSVNESVIoYnVmLnN0 X21vZGUpKSA/IDEgOiAwOyAvKiBTZXQgImlzIGRpcmVjdG9yeSIgZmxhZyAqLworICAgIGRlYnVn KEYxMTEsInpnZXRmcyBzaXplIixzLHNpemUpOworICAgIGRlYnVnKEYxMTEsInpnZXRmcyBzdF9z aXplIixzLGJ1Zi5zdF9zaXplKTsKKyAgICByZXR1cm4oKHNpemUgPCAwTCkgPyBidWYuc3Rfc2l6 ZSA6IHNpemUpOyAvKiBSZXR1cm4gdGhlIHNpemUgKi8KK30KKworCisvKiAgWiBDIEggSyBJICAt LSAgQ2hlY2sgaWYgaW5wdXQgZmlsZSBleGlzdHMgYW5kIGlzIHJlYWRhYmxlICAqLworCisvKgor ICBSZXR1cm5zOgorICAgPj0gMCBpZiB0aGUgZmlsZSBjYW4gYmUgcmVhZCAocmV0dXJucyB0aGUg c2l6ZSkuCisgICAgIC0xIGlmIGZpbGUgZG9lc24ndCBleGlzdCBvciBjYW4ndCBiZSBhY2Nlc3Nl ZCwKKyAgICAgLTIgaWYgZmlsZSBleGlzdHMgYnV0IGlzIG5vdCByZWFkYWJsZSAoZS5nLiBhIGRp cmVjdG9yeSBmaWxlKS4KKyAgICAgLTMgaWYgZmlsZSBleGlzdHMgYnV0IHByb3RlY3RlZCBhZ2Fp bnN0IHJlYWQgYWNjZXNzLgorCisgIEZvciBCZXJrZWxleSBVbml4LCBhIGZpbGUgbXVzdCBiZSBv ZiB0eXBlICJyZWd1bGFyIiB0byBiZSByZWFkYWJsZS4KKyAgRGlyZWN0b3J5IGZpbGVzLCBzcGVj aWFsIGZpbGVzLCBhbmQgc3ltYm9saWMgbGlua3MgYXJlIG5vdCByZWFkYWJsZS4KKyovCitDS19P RkZfVAoremNoa2kobmFtZSkgY2hhciAqbmFtZTsgeworICAgIHN0cnVjdCBzdGF0IGJ1ZjsKKyAg ICBjaGFyICogczsKKyAgICBpbnQgeCwgaXRzYWRpciA9IDA7CisgICAgZXh0ZXJuIGludCB6Y2hr aWQsIGRpcmFjdGl2ZSwgbWF0Y2hmaWZvOworCisgICAgaWYgKCFuYW1lKQorICAgICAgcmV0dXJu KC0xKTsKKyAgICB4ID0gc3RybGVuKG5hbWUpOworICAgIGlmICh4IDwgMSkKKyAgICAgIHJldHVy bigtMSk7CisgICAgcyA9IG5hbWU7CisKKyNpZmRlZiBVTklYCisgICAgaWYgKHggPT0gOSAmJiAh c3RyY21wKHMsIi9kZXYvbnVsbCIpKQorICAgICAgcmV0dXJuKDApOworICAgIGlmICh4ID09IDgg JiYgIXN0cmNtcChzLCIvZGV2L3R0eSIpKQorICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIFVO SVggKi8KKworI2lmZGVmIERUSUxERQorICAgIGlmICgqcyA9PSAnficpIHsKKyAgICAgICAgcyA9 IHRpbGRlX2V4cGFuZChzKTsKKyAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgIGlmICgh KnMpIHMgPSBuYW1lOworICAgIH0KKyNlbmRpZiAvKiBEVElMREUgKi8KKworI2lmZGVmIENLUk9P VAorICAgIGRlYnVnKEYxMTEsInpjaGtpIHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOworICAg IGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChuYW1lKSkgeworCWRlYnVnKEYxMTAsInpjaGtp IHNldHJvb3QgdmlvbGF0aW9uIixuYW1lLDApOworCXJldHVybigtMSk7CisgICAgfQorI2VuZGlm IC8qIENLUk9PVCAqLworCisgICAgeCA9IHN0YXQocywmYnVmKTsKKyAgICBkZWJ1ZyhGMTAxLCJT VEFUIiwiIiw1KTsKKyAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwiemNoa2kg c3RhdCBmYWlscyIscyxlcnJubyk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGlm IChTX0lTRElSIChidWYuc3RfbW9kZSkpCisgICAgICBpdHNhZGlyID0gMTsKKworICAgIGlmICgh KGl0c2FkaXIgJiYgemNoa2lkKSkgeyAgICAgICAgIC8qIFVubGVzcyB0aGlzLi4uICovCisgICAg ICAgIGlmICghU19JU1JFRyAoYnVmLnN0X21vZGUpICAgICAgLyogTXVzdCBiZSByZWd1bGFyIGZp bGUgKi8KKyNpZmRlZiBTX0lTRklGTworICAgICAgICAgICAgJiYgKCFtYXRjaGZpZm8gfHwgIVNf SVNGSUZPIChidWYuc3RfbW9kZSkpICAvKiBvciBGSUZPICovCisjZW5kaWYgLyogU19JU0ZJRk8g Ki8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiemNoa2kgbm90IHJl Z3VsYXIgZmlsZSAob3IgZmlmbykiLHMsbWF0Y2hmaWZvKTsKKyAgICAgICAgICAgIHJldHVybigt Mik7CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjExMSwiemNoa2kgc3RhdCBvazoiLHMs eCk7CisKKyAgICBpZiAoZGlyYWN0aXZlKSB7CQkJLyogSWYgbGlzdGluZyBkb24ndCBjaGVjayBh Y2Nlc3MgKi8KKwl4ID0gMTsKKyAgICB9IGVsc2UgeworI2lmZGVmIFNXX0FDQ19JRAorCWRlYnVn KEYxMDAsInpjaGtpIHN3YXBwaW5nIGlkcyBmb3IgYWNjZXNzKCkiLCIiLDApOworCXByaXZfb24o KTsKKyNlbmRpZiAvKiBTV19BQ0NfSUQgKi8KKwlpZiAoKHggPSBhY2Nlc3MocyxSX09LKSkgPCAw KQorCSAgeCA9IGFjY2VzcyhzLFhfT0spOwkJLyogRm9yIFJVTi1jbGFzcyBjb21tYW5kcyAqLwor I2lmZGVmIFNXX0FDQ19JRAorCXByaXZfb2ZmKCk7CisJZGVidWcoRjEwMCwiemNoa2kgc3dhcHBl ZCBpZHMgcmVzdG9yZWQiLCIiLDApOworI2VuZGlmIC8qIFNXX0FDQ19JRCAqLworICAgIH0KKyAg ICBpZiAoeCA8IDApIHsJCQkvKiBJcyB0aGUgZmlsZSBhY2Nlc3NpYmxlPyAqLworICAgICAgICBk ZWJ1ZyhGMTExLCJ6Y2hraSBhY2Nlc3MgZmFpbGVkOiIscyx4KTsgLyogTm8gKi8KKyAgICAgICAg cmV0dXJuKC0zKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZmxlbiA9IGJ1Zi5zdF9zaXplOyAg ICAgICAgICAgIC8qIFllcywgcmVtZW1iZXIgc2l6ZSAqLworICAgICAgICBja3N0cm5jcHkobmFt YnVmLHMsQ0tNQVhQQVRIKTsgIC8qIGFuZCBuYW1lIGdsb2JhbGx5LiAqLworICAgICAgICBkZWJ1 ZyhGMTExLCJ6Y2hraSBhY2Nlc3Mgb2s6IixzLGlmbGVuKTsKKyAgICAgICAgcmV0dXJuKChpZmxl biA+IC0xTCkgPyBpZmxlbiA6IDBMKTsKKyAgICB9Cit9CisKKy8qICBaIEMgSCBLIE8gIC0tICBD aGVjayBpZiBvdXRwdXQgZmlsZSBjYW4gYmUgY3JlYXRlZCAgKi8KKworLyoKKyAgUmV0dXJucyAt MSBpZiB3cml0ZSBwZXJtaXNzaW9uIGZvciB0aGUgZmlsZSB3b3VsZCBiZSBkZW5pZWQsIDAgb3Ro ZXJ3aXNlLgorCisgIE5PVEU6IFRoZSBkZXNpZ24gaXMgZmxhd2VkLiAgVGhlcmUgaXMgbm8gZGlz dGluY3Rpb24gYW1vbmc6CisgICAuIENhbiBJIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlPwor ICAgLiBDYW4gSSBjcmVhdGUgYSBmaWxlIChvciBkaXJlY3RvcnkpIGluIGFuIGV4aXN0aW5nIGRp cmVjdG9yeT8KKyAgIC4gQ2FuIEkgY3JlYXRlIGEgZmlsZSAob3IgZGlyZWN0b3J5KSBhbmQgaXRz IHBhcmVudChzKT8KKyovCitpbnQKK3pjaGtvKG5hbWUpIGNoYXIgKm5hbWU7IHsKKyAgICBpbnQg aSwgeCwgaXRzYWRpciA9IDA7CisgICAgY2hhciAqcyA9IE5VTEw7CisgICAgY2hhciAqIG9uYW1l OworICAgIGV4dGVybiBpbnQgemNoa29kOyAgICAgICAgICAgICAgICAgIC8qIFVzZWQgYnkgSUYg V1JJVEVBQkxFICovCisKKyAgICBkZWJ1ZyhGMTEwLCJ6Y2hrbyBlbnRyeSIsbmFtZSwwKTsKKwor ICAgIGlmICghbmFtZSkgcmV0dXJuKC0xKTsgICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3Ig bnVsbCBwb2ludGVyLiAqLworCisgICAgb25hbWUgPSBuYW1lOworCisjaWZkZWYgQ0tST09UCisg ICAgZGVidWcoRjExMSwiemNoa28gc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7CisgICAgaWYg KGNrcm9vdHNldCkgaWYgKCF6aW5yb290KG5hbWUpKSB7CisJZGVidWcoRjExMCwiemNoa28gc2V0 cm9vdCB2aW9sYXRpb24iLG5hbWUsMCk7CisJZXJybm8gPSBFQUNDRVM7CisJcmV0dXJuKC0xKTsK KyAgICB9CisjZW5kaWYgLyogQ0tST09UICovCisKKyAgICB4ID0gKGludClzdHJsZW4obmFtZSk7 ICAgICAgICAgICAgICAvKiBHZXQgbGVuZ3RoIG9mIGZpbGVuYW1lICovCisgICAgZGVidWcoRjEx MSwiemNoa28gbGVuIixuYW1lLHgpOworICAgIGRlYnVnKEYxMTEsInpjaGtvIHpjaGtvZCIsbmFt ZSx6Y2hrb2QpOworCisjaWZkZWYgVU5JWAorLyoKKyAgV3JpdGluZyB0byBudWxsIGRldmljZSBp cyBPSy4KKyovCisgICAgaWYgKHggPT0gOSAmJiAhc3RyY21wKG5hbWUsIi9kZXYvbnVsbCIpKQor ICAgICAgcmV0dXJuKDApOworICAgIGlmICh4ID09IDggJiYgIXN0cmNtcChuYW1lLCIvZGV2L3R0 eSIpKQorICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIFVOSVggKi8KKworICAgIHMgPSBuYW1l OworI2lmZGVmIERUSUxERQorICAgIGlmICgqcyA9PSAnficpIHsKKyAgICAgICAgcyA9IHRpbGRl X2V4cGFuZChzKTsKKyAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgIGlmICghKnMpIHMg PSBuYW1lOworCXggPSBzdHJsZW4ocyk7CisgICAgfQorI2VuZGlmIC8qIERUSUxERSAqLworICAg IG5hbWUgPSBzOworICAgIHMgPSBOVUxMOworLyoKKyAgemNoa29kIGlzIGEgZ2xvYmFsIGZsYWcg bWVhbmluZyB3ZSdyZSBjaGVja2luZyBub3QgdG8gc2VlIGlmIHRoZSBkaXJlY3RvcnkKKyAgZmls ZSBpcyB3cml0ZWFibGUsIGJ1dCBpZiBpdCdzIE9LIHRvIGNyZWF0ZSBmaWxlcyBJTiB0aGUgZGly ZWN0b3J5LgorKi8KKyAgICBpZiAoIXpjaGtvZCAmJiBpc2RpcihuYW1lKSkgewkvKiBEaXJlY3Rv cmllcyBhcmUgbm90IHdyaXRlYWJsZSAqLworCWRlYnVnKEYxMTEsInpjaGtvIGlzZGlyIixuYW1l LDEpOworCXJldHVybigtMSk7CisgICAgfQorICAgIHMgPSBtYWxsb2MoeCszKTsgICAgICAgICAg ICAgICAgICAgIC8qIE11c3QgY29weSBiZWNhdXNlIHdlIGNhbid0ICovCisgICAgaWYgKCFzKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd3JpdGUgaW50byBvdXIgYXJndW1lbnQuICov CisgICAgICAgIGZwcmludGYoc3RkZXJyLCJ6Y2hrbzogTWFsbG9jIGVycm9yIDQ2XG4iKTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgY2tzdHJuY3B5KHMsbmFtZSx4KzMpOworI2lm ZGVmIFVOSVgKKyNpZmRlZiBOT1VVQ1AKKyAgICB7CQkJCQkvKiAyMDA5LzEwLzIwICovCisgICAg LyogQWxsb3cgdHR5IGRldmljZXMgdG8gb3BlbmVkIGFzIG91dHB1dCBmaWxlcyAqLworCWludCBm ZCwgaXN0dHkgPSAwLCBtb2RlID0gMDsKKwlkZWJ1ZyhGMTEwLCJ6Y2hrbyBhdHRlbXB0aW5nIHRv IG9wZW4iLG5hbWUsMCk7CisJLyogRG9uJ3QgYmxvY2sgb24gbGFjayBvZiBDYXJyaWVyIG9yIG90 aGVyIG1vZGVtIHNpZ25hbHMgKi8KKyNpZmRlZiBPX05PTkJMT0NLCisJbW9kZSA9IE9fTk9OQkxP Q0s7CisjZWxzZQorI2lmZGVmIE9fTkRFTEFZCisJbW9kZSA9IE9fTkRFTEFZOworI2Vsc2UKKyNp ZmRlZiBGTkRFTEFZCisJbW9kZSA9IEZOREVMQVk7CisjZW5kaWYgLyogRk5ERUxBWSAqLworI2Vu ZGlmCS8qIE9fTkRFTEFZICovCisjZW5kaWYJLyogT19OT05CTE9DSyAqLworCWRlYnVnKEYxMTEs InpjaGtvIG9wZW4gbW9kZSIsbmFtZSxtb2RlKTsKKwlmZCA9IG9wZW4obmFtZSxPX1dST05MWSxt b2RlKTsJLyogTXVzdCBhdHRlbXB0IHRvIG9wZW4gaXQgKi8KKwlkZWJ1ZyhGMTExLCJ6Y2hrbyBv cGVuIixuYW1lLGZkKTsgCisJaWYgKGZkID4gLTEpIHsJCQkvKiB0byBnZXQgYSBmaWxlIGRlc2Ny aXB0b3IgKi8KKwkgICAgaWYgKGlzYXR0eShmZCkpCQkvKiBmb3IgaXNhdHR5KCkgKi8KKwkgICAg ICBpc3R0eSsrOworCSAgICBkZWJ1ZyhGMTExLCJ6Y2hrbyBpc2F0dHkiLG5hbWUsaXN0dHkpOwor CSAgICBmZCA9IGNsb3NlKGZkKTsKKwkgICAgaWYgKGlzdHR5KSB7CisJCWdvdG8gZG9hY2Nlc3M7 CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBkZWJ1ZyhGMTAxLCJ6Y2hrbyBvcGVuIGVycm5vIiwi IixlcnJubyk7IAorCSAgICB4ID0gLTE7CisJfQorICAgIH0KKyNlbmRpZgkvKiBOT1VVQ1AgKi8K KyNlbmRpZgkvKiBVTklYICovCisgICAgZm9yIChpID0geDsgaSA+IDA7IGktLSkgeyAgICAgICAg ICAgLyogU3RyaXAgZmlsZW5hbWUgZnJvbSByaWdodC4gKi8KKyAgICAgICAgaWYgKElTRElSU0VQ KHNbaS0xXSkpIHsKKyAgICAgICAgICAgIGl0c2FkaXIgPSAxOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjEwMSwiemNoa28gaSIsIiIsaSk7CisgICAg ZGVidWcoRjEwMSwiemNoa28gaXRzYWRpciIsIiIsaXRzYWRpcik7CisKKyNpZmRlZiBDT01NRU5U CisvKiBYL09QRU4gWFBHMy1jb21wbGlhbnQgc3lzdGVtcyBmYWlsIGlmIGFyZ3VtZW50IGVuZHMg d2l0aCAiLyIuLi4gICovCisgICAgaWYgKGkgPT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgbm8gcGF0aCwgdXNlIGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgICBzdHJjcHkocywi Li8iKTsKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndp c2UsIHVzZSBnaXZlbiBvbmUuICovCisgICAgICBzW2ldID0gJ1wwJzsKKyNlbHNlCisjaWZkZWYg Q09NTUVOVAorLyoKKyAgVGhlIGZvbGxvd2luZyBkb2VzIG5vdCB3b3JrIGZvciAiZm9vL2JhciIg d2hlcmUgdGhlIGZvbyBkaXJlY3RvcnkgZG9lcworICBub3QgZXhpc3QgZXZlbiB0aG91Z2ggd2Ug Y291bGQgY3JlYXRlIGl0OiBhY2Nlc3MoImZvby8uIikgZmFpbHMsIGJ1dAorICBhY2Nlc3MoImZv byIpIHdvcmtzIE9LLgorKi8KKy8qIFNvIG5vdyB3ZSB1c2UgInBhdGgvLiIgaWYgcGF0aCBnaXZl biwgb3IgIi4iIGlmIG5vIHBhdGggZ2l2ZW4uICovCisgICAgc1tpKytdID0gJy4nOyAgICAgICAg ICAgICAgICAgICAgICAgLyogQXBwZW5kICIuIiB0byBwYXRoLiAqLworICAgIHNbaV0gPSAnXDAn OworI2Vsc2UKKy8qIFNvIE5PVyB3ZSBzdHJpcCBwYXRoIHNlZ21lbnRzIGZyb20gdGhlIHJpZ2h0 IGFzIGxvbmcgYXMgdGhleSBkb24ndCAqLworLyogZXhpc3QgLS0gd2Ugb25seSBjYWxsIGFjY2Vz cygpIGZvciBwYXRoIHNlZ21lbnRzIHRoYXQgKmRvKiBleGlzdC4uICovCisvKiAoQnV0IHRoaXMg aXNuJ3QgcXVpdGUgcmlnaHQgZWl0aGVyIHNpbmNlIG5vdyB6Y2hrbygvZm9vL2Jhci9iYXoveHh4 KSAqLworLyogc3VjY2VlZHMgd2hlbiBJIGhhdmUgd3JpdGUgYWNjZXNzIHRvIGZvbyBhbmQgYmFy IGJ1dCBiYXogZG9lc24ndCBleGl0LikgKi8KKworICAgIGlmIChpdHNhZGlyICYmIGkgPiAwKSB7 CisgICAgICAgIHNbaS0xXSA9ICdcMCc7CisgICAgICAgIHdoaWxlIChzWzBdICYmICFpc2Rpcihz KSkgeworICAgICAgICAgICAgZm9yIChpID0gKGludClzdHJsZW4ocyk7IGkgPiAwOyBpLS0pIHsK KyAgICAgICAgICAgICAgICBpZiAoSVNESVJTRVAoc1tpLTFdKSkgeworICAgICAgICAgICAgICAg ICAgICBzW2ktMV0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA9PSAwKQorICAgICAg ICAgICAgICBzWzBdID0gJ1wwJzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHNb aSsrXSA9ICcuJzsgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kICIuIiB0byBwYXRoLiAqLwor ICAgICAgICBzW2ldID0gJ1wwJzsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworICAgIGlmICghc1swXSkKKyAgICAgIGNrc3RybmNweShzLCIuIix4 KzMpOworCisgIGRvYWNjZXNzOgorCisjaWZkZWYgU1dfQUNDX0lECisgICAgZGVidWcoRjEwMCwi emNoa28gc3dhcHBpbmcgaWRzIGZvciBhY2Nlc3MoKSIsIiIsMCk7CisgICAgcHJpdl9vbigpOwor I2VuZGlmIC8qIFNXX0FDQ19JRCAqLworCisgICAgeCA9IGFjY2VzcyhzLFdfT0spOyAgICAgICAg ICAgICAgICAgLyogQ2hlY2sgYWNjZXNzIG9mIHBhdGguICovCisKKyNpZmRlZiBTV19BQ0NfSUQK KyAgICBwcml2X29mZigpOworICAgIGRlYnVnKEYxMDAsInpjaGtvIHN3YXBwZWQgaWRzIHJlc3Rv cmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBTV19BQ0NfSUQgKi8KKworICAgIGlmICh4IDwgMCkKKyAg ICAgIGRlYnVnKEYxMTEsInpjaGtvIGFjY2VzcyBmYWlsZWQ6IixzLGVycm5vKTsKKyAgICBlbHNl CisgICAgICBkZWJ1ZyhGMTExLCJ6Y2hrbyBhY2Nlc3Mgb2s6IixzLHgpOworICAgIGlmIChzKSBm cmVlKHMpOwkJCS8qIEZyZWUgdGVtcG9yYXJ5IHN0b3JhZ2UgKi8KKworICAgIHJldHVybigoeCA8 IDApID8gLTEgOiAwKTsgICAgICAgICAgIC8qIGFuZCByZXR1cm4uICovCit9CisKKy8qICBaIEQg RSBMIEUgVCAgLS0gIERlbGV0ZSB0aGUgbmFtZWQgZmlsZS4gICovCisKKy8qIFJldHVybnM6IC0x IG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MgKi8KKworaW50Cit6ZGVsZXQobmFtZSkgY2hhciAqbmFt ZTsgeworICAgIGludCB4OworI2lmZGVmIENLX0xPR0lOCisgICAgaWYgKGlzZ3Vlc3QpCisgICAg ICByZXR1cm4oLTEpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyNpZmRlZiBDS1JPT1QKKyAg ICBkZWJ1ZyhGMTExLCJ6ZGVsZXQgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7CisgICAgaWYg KGNrcm9vdHNldCkgaWYgKCF6aW5yb290KG5hbWUpKSB7CisJZGVidWcoRjExMCwiemRlbGV0IHNl dHJvb3QgdmlvbGF0aW9uIixuYW1lLDApOworCXJldHVybigtMSk7CisgICAgfQorI2VuZGlmIC8q IENLUk9PVCAqLworCisgICAgeCA9IHVubGluayhuYW1lKTsKKyAgICBkZWJ1ZyhGMTExLCJ6ZGVs ZXQiLG5hbWUseCk7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xH X0ZDICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgZnVsbG5hbWVbMF0gPSAnXDAnOworICAgICAg ICB6Zm5xZnAobmFtZSxDS01BWFBBVEgsZnVsbG5hbWUpOworICAgICAgICBkZWJ1ZyhGMTEwLCJ6 ZGVsZXQgZnVsbG5hbWUiLGZ1bGxuYW1lLDApOworICAgICAgICBpZiAoeCA8IDApCisgICAgICAg ICAgc3lzbG9nKExPR19JTkZPLCAiZmlsZVtdICVzOiBkZWxldGUgZmFpbGVkICglbSkiLCBmdWxs bmFtZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzeXNsb2coTE9HX0lORk8sICJmaWxlW10g JXM6IGRlbGV0ZSBvayIsIGZ1bGxuYW1lKTsKKyAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KyAgICByZXR1cm4oeCk7Cit9CisKKy8qICBaIFIgVCBPIEwgIC0tICBDb252ZXJ0IHJlbW90ZSBm aWxlbmFtZSBpbnRvIGxvY2FsIGZvcm0gICovCisKK1ZPSUQKK3pydG9sKG5hbWUsbmFtZTIpIGNo YXIgKm5hbWUsICpuYW1lMjsgeworICAgIG56cnRvbChuYW1lLG5hbWUyLDEsMCxDS01BWFBBVEgp OworfQorCitWT0lECituenJ0b2wobmFtZSxuYW1lMixmbmNudixmbnJwYXRoLG1heCkKKyAgICBj aGFyICpuYW1lLCAqbmFtZTI7IGludCBmbmNudiwgZm5ycGF0aCwgbWF4OworeyAvKiBuenJ0b2wg Ki8KKyAgICBjaGFyICpzLCAqcDsKKyAgICBpbnQgZmxhZyA9IDAsIG4gPSAwOworICAgIGNoYXIg ZnVsbG5hbWVbQ0tNQVhQQVRIKzFdOworICAgIGludCBkZXZudWxsID0gMDsKKyAgICBpbnQgYWNh c2UgPSAwOworICAgIGlmICghbmFtZTIpIHJldHVybjsKKyAgICBpZiAoIW5hbWUpIG5hbWUgPSAi IjsKKworICAgIGRlYnVnKEYxMTEsIm56cnRvbCBuYW1lIixuYW1lLGZuY252KTsKKworI2lmZGVm IERUSUxERQorICAgIHMgPSBuYW1lOworICAgIGlmICgqcyA9PSAnficpIHsKKyAgICAgICAgcyA9 IHRpbGRlX2V4cGFuZChzKTsKKyAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgIGlmICgq cykgbmFtZSA9IHM7CisgICAgfQorI2VuZGlmIC8qIERUSUxERSAqLworCisgICAgLyogSGFuZGxl IHRoZSBwYXRoIC0tIHdlIGRvbid0IGhhdmUgdG8gY29udmVydCBpdHMgZm9ybWF0LCBzaW5jZSAq LworICAgIC8qIHRoZSBzdGFuZGFyZCBwYXRoIGZvcm1hdCBhbmQgb3VyIChVTklYKSBmb3JtYXQg YXJlIHRoZSBzYW1lLiAqLworCisgICAgZnVsbG5hbWVbMF0gPSBOVUw7CisgICAgZGV2bnVsbCA9 ICFzdHJjbXAobmFtZSwiL2Rldi9udWxsIik7CisKKyAgICBpZiAoIWRldm51bGwgJiYgZm5ycGF0 aCA9PSBQQVRIX09GRikgeyAvKiBSRUNFSVZFIFBBVEhOQU1FUyBPRkYgKi8KKyAgICAgICAgenN0 cmlwKG5hbWUsJnApOworICAgICAgICBzdHJuY3B5KGZ1bGxuYW1lLHAsQ0tNQVhQQVRIKTsKKyAg ICB9IGVsc2UgaWYgKCFkZXZudWxsICYmIGZucnBhdGggPT0gUEFUSF9BQlMpIHsgLyogUkVDIFBB VEhOQU1FUyBBQlNPTFVURSAqLworICAgICAgICBzdHJuY3B5KGZ1bGxuYW1lLG5hbWUsQ0tNQVhQ QVRIKTsKKyAgICB9IGVsc2UgaWYgKCFkZXZudWxsICYmIGlzYWJzb2x1dGUobmFtZSkpIHsgLyog UkVDRUlWRSBQQVRITkFNRVMgUkVMQVRJVkUgKi8KKwlja21ha21zZyhmdWxsbmFtZSxDS01BWFBB VEgsIi4iLG5hbWUsTlVMTCxOVUxMKTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBEaXR0byAqLworICAgICAgICBja3N0cm5jcHkoZnVsbG5hbWUsbmFtZSxDS01B WFBBVEgpOworICAgIH0KKyAgICBmdWxsbmFtZVtDS01BWFBBVEhdID0gTlVMOworICAgIGRlYnVn KEYxMTAsIm56cnRvbCBmdWxsbmFtZSIsZnVsbG5hbWUsMCk7CisKKyNpZm5kZWYgTk9UUlVOQ0FU RQorLyoKKyAgVGhlIG1heGltdW0gbGVuZ3RoIGZvciBhbnkgc2VnbWVudCBvZiBhIGZpbGVuYW1l IGlzIE1BWE5BTUxFTiwgZGVmaW5lZAorICBhYm92ZS4gIE9uIHNvbWUgcGxhdGZvcm1zIChhdCBs ZWFzdCBRTlgpIGlmIGEgc2VnbWVudCBleGNlZWRzIHRoaXMgbGltaXQsCisgIHRoZSBvcGVuIGZh aWxzIHdpdGggRU5BTUVUT09MT05HLCBzbyB3ZSBtdXN0IHByZXZlbnQgaXQgYnkgdHJ1bmNhdGlu ZyBlYWNoCisgIG92ZXJsb25nIG5hbWUgc2VnbWVudCB0byB0aGUgbWF4aW11bSBzZWdtZW50IGxl bmd0aCBiZWZvcmUgcGFzc2luZyB0aGUKKyAgbmFtZSB0byBvcGVuKCkuICBUaGlzIG11c3QgYmUg ZG9uZSBldmVuIHdoZW4gZmlsZSBuYW1lcyBhcmUgbGl0ZXJhbCwgc28gYXMKKyAgbm90IHRvIGhh bHQgYSBmaWxlIHRyYW5zZmVyIHVubmVjZXNzYXJpbHkuCisqLworICAgIHsKKyAgICAgICAgY2hh ciBidWZbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAvKiBOZXcgdGVtcG9yYXJ5IGJ1ZmZlciBvbiBz dGFjayAqLworICAgICAgICBjaGFyICpwID0gZnVsbG5hbWU7ICAgICAgICAgICAgIC8qIFNvdXJj ZSBhbmQgICovCisgICAgICAgIGNoYXIgKnMgPSBidWY7ICAgICAgICAgICAgICAgICAgLyogZGVz dGluYXRpb24gcG9pbnRlcnMgKi8KKyAgICAgICAgaW50IGkgPSAwLCBuID0gMDsKKyAgICAgICAg ZGVidWcoRjEwMSwibnpydG9sIHNpemluZyBNQVhOQU1MRU4iLCIiLE1BWE5BTUxFTik7CisgICAg ICAgIHdoaWxlICgqcCAmJiBuIDwgQ0tNQVhQQVRIKSB7ICAgLyogQ29weSBuYW1lIHRvIG5ldyBi dWZmZXIgKi8KKyAgICAgICAgICAgIGlmICgrK2kgPiBNQVhOQU1MRU4pIHsgICAgICAvKiBJZiB0 aGlzIHNlZ21lbnQgdG9vIGxvbmcgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKnAgJiYgKnAg IT0gJy8nKSAvKiBza2lwIHBhc3QgdGhlIHJlc3QuLi4gKi8KKyAgICAgICAgICAgICAgICAgIHAr KzsKKyAgICAgICAgICAgICAgICBpID0gMDsgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVzZXQg Y291bnRlci4gKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJy8nKSB7ICAgICAvKiBF bmQgb2YgdGhpcyBzZWdtZW50LiAqLworICAgICAgICAgICAgICAgIGkgPSAwOyAgICAgICAgICAg ICAgICAgIC8qIFJlc2V0IGNvdW50ZXIuICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICAq cysrID0gKnArKzsgICAgICAgICAgICAgICAgLyogQ29weSB0aGlzIGNoYXJhY3Rlci4gKi8KKyAg ICAgICAgICAgIG4rKzsKKyAgICAgICAgfQorICAgICAgICAqcyA9IE5VTDsKKyAgICAgICAgY2tz dHJuY3B5KGZ1bGxuYW1lLGJ1ZixDS01BWFBBVEgpOyAvKiBDb3B5IGJhY2sgdG8gb3JpZ2luYWwg YnVmZmVyLiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJuenJ0b2wgc2l6aW5nIixmdWxsbmFtZSxu KTsKKyAgICB9CisjZW5kaWYgLyogTk9UUlVOQ0FURSAqLworCisgICAgaWYgKCFmbmNudiB8fCBk ZXZudWxsKSB7ICAgICAgICAgICAgLyogTm90IGNvbnZlcnRpbmcgKi8KKyAgICAgICAgY2tzdHJu Y3B5KG5hbWUyLGZ1bGxuYW1lLG1heCk7ICAvKiBXZSdyZSBkb25lLiAqLworICAgICAgICByZXR1 cm47CisgICAgfQorICAgIG5hbWUgPSBmdWxsbmFtZTsgICAgICAgICAgICAgICAgICAgIC8qIENv bnZlcnRpbmcgKi8KKworICAgIHAgPSBuYW1lMjsKKyAgICBmb3IgKDsgKm5hbWUgIT0gJ1wwJyAm JiBuIDwgbWF4bmFtOyBuYW1lKyspIHsKKyAgICAgICAgaWYgKCpuYW1lID4gU1ApIGZsYWcgPSAx OyAgICAgICAvKiBTdHJpcCBsZWFkaW5nIGJsYW5rcyBhbmQgY29udHJvbHMgKi8KKyAgICAgICAg aWYgKGZsYWcgPT0gMCAmJiAqbmFtZSA8ICchJykKKyAgICAgICAgICBjb250aW51ZTsKKwlpZiAo Zm5jbnYgPiAwKSB7CisJICAgIGlmICgqbmFtZSA9PSBTUCkgeworCQkqcCsrID0gJ18nOworCQlu Kys7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGlmIChpc3VwcGVyKCpuYW1lKSkJCS8qIENo ZWNrIGZvciBtaXhlZCBjYXNlICovCisJICAgICAgYWNhc2UgfD0gMTsKKwkgICAgZWxzZSBpZiAo aXNsb3dlcigqbmFtZSkpCisJICAgICAgYWNhc2UgfD0gMjsKKwl9CisgICAgICAgICpwKysgPSAq bmFtZTsKKyAgICAgICAgbisrOworICAgIH0KKyAgICAqcC0tID0gJ1wwJzsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUZXJtaW5hdGUgKi8KKyAgICB3aGlsZSAoKnAgPCAnIScgJiYgcCA+IG5h bWUyKSAgICAgICAvKiBTdHJpcCB0cmFpbGluZyBibGFua3MgJiBjb250cm9scyAqLworICAgICAg KnAtLSA9ICdcMCc7CisKKyAgICBpZiAoKm5hbWUyID09ICdcMCcpIHsgICAgICAgICAgICAgICAv KiBOb3RoaW5nIGxlZnQ/ICovCisgICAgICAgIGNrc3RybmNweShuYW1lMiwiTk9OQU1FIixtYXgp OwkvKiBkbyB0aGlzLi4uICovCisgICAgfSBlbHNlIGlmIChhY2FzZSA9PSAxKSB7ICAgICAgICAg ICAgLyogQWxsIHVwcGVyY2FzZT8gKi8KKyAgICAgICAgcCA9IG5hbWUyOyAgICAgICAgICAgICAg ICAgICAgICAvKiBTbyBjb252ZXJ0IGFsbCBsZXR0ZXJzIHRvIGxvd2VyICovCisgICAgICAgIHdo aWxlICgqcCkgeworICAgICAgICAgICAgaWYgKGlzdXBwZXIoKnApKQorICAgICAgICAgICAgICAq cCA9IHRvbG93ZXIoKnApOworICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgfQorICAg IGRlYnVnKEYxMTAsIm56cnRvbCBuZXcgbmFtZSIsbmFtZTIsMCk7Cit9CisKKworLyogIFogUyBU IFIgSSBQICAtLSAgU3RyaXAgZGV2aWNlICYgZGlyZWN0b3J5IG5hbWUgZnJvbSBmaWxlIHNwZWNp ZmljYXRpb24gKi8KKworLyogIFN0cmlwIHBhdGhuYW1lIGZyb20gZmlsZW5hbWUgIm5hbWUiLCBy ZXR1cm4gcG9pbnRlciB0byByZXN1bHQgaW4gbmFtZTIgKi8KKworc3RhdGljIGNoYXIgd29ya1tD S01BWFBBVEgrMV07CisKK1ZPSUQKK3pzdHJpcChuYW1lLG5hbWUyKSBjaGFyICpuYW1lLCAqKm5h bWUyOyB7CisgICAgY2hhciAqY3AsICpwcDsKKyAgICBpbnQgbiA9IDA7CisKKyAgICBkZWJ1ZyhG MTEwLCJ6c3RyaXAgYmVmb3JlIixuYW1lLDApOworICAgIGlmICghbmFtZSkgeyAqbmFtZTIgPSAi IjsgcmV0dXJuOyB9CisgICAgcHAgPSB3b3JrOworI2lmZGVmIERUSUxERQorICAgIC8qIFN0cmlw IGxlYWRpbmcgdGlsZGUgKi8KKyAgICBpZiAoKm5hbWUgPT0gJ34nKSBuYW1lKys7CisgICAgZGVi dWcoRjExMCwienN0cmlwIGFmdGVyIHRpbGRlLXN0cmlwcGluZyIsbmFtZSwwKTsKKyNlbmRpZiAv KiBEVElMREUgKi8KKyAgICBmb3IgKGNwID0gbmFtZTsgKmNwOyBjcCsrKSB7CisgICAgICAgIGlm IChJU0RJUlNFUCgqY3ApKSB7CisgICAgICAgICAgICBwcCA9IHdvcms7CisgICAgICAgICAgICBu ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpwcCsrID0gKmNwOworICAgICAg ICAgICAgaWYgKG4rKyA+PSBDS01BWFBBVEgpCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgfQorICAgICpwcCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRl cm1pbmF0ZSB0aGUgc3RyaW5nICovCisgICAgKm5hbWUyID0gd29yazsKKyAgICBkZWJ1ZyhGMTEw LCJ6c3RyaXAgYWZ0ZXIiLCpuYW1lMiwwKTsKK30KKworLyogIFogTCBUIE8gUiAgLS0gIExvY2Fs IFRPIFJlbW90ZSAqLworCitWT0lECit6bHRvcihuYW1lLG5hbWUyKSBjaGFyICpuYW1lLCAqbmFt ZTI7IHsKKyAgICBuemx0b3IobmFtZSxuYW1lMiwxLDAsQ0tNQVhQQVRIKTsKK30KKworLyogIE4g WiBMIFQgTyBSICAtLSAgTmV3IExvY2FsIFRPIFJlbW90ZSAqLworCisvKgorICBmbmNudiA9IDAg Zm9yIG5vIGNvbnZlcnNpb24sID4gMCBmb3IgcmVndWxhciBjb252ZXJzaW9uLCA8IDAgZm9yIG1p bmltYWwuCisqLworVk9JRAorbnpsdG9yKG5hbWUsbmFtZTIsZm5jbnYsZm5zcGF0aCxtYXgpCisg ICAgY2hhciAqbmFtZSwgKm5hbWUyOyBpbnQgZm5jbnYsIGZuc3BhdGgsIG1heDsKK3sgLyogbnps dG9yICovCisgICAgY2hhciAqY3AsICpwcDsKKyNpZmRlZiBDT01NRU5UCisgICAgaW50IGRjID0g MDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaW50IG4gPSAwOworICAgIGNoYXIgKmRvdHAg PSBOVUxMOworICAgIGNoYXIgKmRpcnAgPSBOVUxMOworICAgIGNoYXIgZnVsbG5hbWVbQ0tNQVhQ QVRIKzFdOworICAgIGNoYXIgKnA7CisgICAgQ0hBUiBjOworCisjaWZuZGVmIE5PQ1NFVFMKKyAg ICBleHRlcm4gaW50IGZjaGFyc2V0LCAvKiB0Y2hhcnNldCwgKi8gbGFuZ3VhZ2U7CisgICAgaW50 IGxhbmdzdjsKKyAgICBfUFJPVE9UWVAgKCBDSEFSICgqc3hvKSwgKENIQVIpICkgPSBOVUxMOyAv KiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KKyNpZmRlZiBDS19BTlNJQworICAgIGV4dGVybiBD SEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKENIQVIpOworI2Vsc2UKKyAgICBl eHRlcm4gQ0hBUiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpOworI2VuZGlmIC8q IENLX0FOU0lDICovCisgICAgbGFuZ3N2ID0gbGFuZ3VhZ2U7CisgICAgbGFuZ3VhZ2UgPSBMX1VT QVNDSUk7CisjaWZkZWYgQ09NTUVOVAorICAgIC8qIFByb3BlciB0cmFuc2xhdGlvbiBvZiBmaWxl bmFtZXMgbXVzdCBiZSBkb25lIGVsc2V3aGVyZSAqLworICAgIG4gPSB0Y2hhcnNldCA/IHRjaGFy c2V0IDogVENfVVNBU0NJSTsKKyAgICBzeG8gPSB4bHNbbl1bZmNoYXJzZXRdOworI2Vsc2UKKyAg ICBzeG8gPSB4bHNbVENfVVNBU0NJSV1bZmNoYXJzZXRdOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBkZWJ1ZyhGMTEwLCJuemx0b3IgbmFtZSIsbmFt ZSwwKTsKKworICAgIC8qIEhhbmRsZSBwYXRobmFtZSAqLworCisgICAgZnVsbG5hbWVbMF0gPSBO VUw7CisgICAgaWYgKGZuc3BhdGggPT0gUEFUSF9PRkYpIHsgICAgICAgICAgLyogUEFUSE5BTUVT IE9GRiAqLworICAgICAgICB6c3RyaXAobmFtZSwmcCk7CisgICAgICAgIGNrc3RybmNweShmdWxs bmFtZSxwLENLTUFYUEFUSCk7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUEFUSE5BTUVTIFJFTEFUSVZFIG9yIEFCU09MVVRFICovCisgICAgICAgIGNoYXIgKiBw ID0gbmFtZTsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGlmICghc3RybmNtcChw LCIuLi8iLDMpKQorICAgICAgICAgICAgICBwICs9IDM7CisgICAgICAgICAgICBlbHNlIGlmICgh c3RybmNtcChwLCIuLyIsMikpCisgICAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZuc3BhdGgg PT0gUEFUSF9BQlMpIHsgICAgICAvKiBBQlNPTFVURSAqLworICAgICAgICAgICAgemZucWZwKHAs Q0tNQVhQQVRILGZ1bGxuYW1lKTsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSRUxBVElWRSAqLworICAgICAgICAgICAgY2tzdHJuY3B5KGZ1bGxuYW1lLHAsQ0tN QVhQQVRIKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJuemx0b3IgZnVsbG5h bWUiLGZ1bGxuYW1lLDApOworCisgICAgaWYgKCFmbmNudikgeyAgICAgICAgICAgICAgICAgICAg ICAgLyogTm90IGNvbnZlcnRpbmcgKi8KKyAgICAgICAgY2tzdHJuY3B5KG5hbWUyLGZ1bGxuYW1l LG1heCk7ICAvKiBXZSdyZSBkb25lLiAqLworI2lmbmRlZiBOT0NTRVRTCisgICAgICAgIGxhbmdz diA9IGxhbmd1YWdlOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgcmV0dXJuOworICAg IH0KKyAgICBuYW1lID0gZnVsbG5hbWU7ICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0aW5n ICovCisKKyNpZmRlZiBhZWdpcworICAgIGNoYXIgKm5hbWVjaGFyczsKKyAgICBpbnQgdGlsZGUg PSAwLCBic2xhc2ggPSAwOworCisgICAgaWYgKChuYW1lY2hhcnMgPSBnZXRlbnYoIk5BTUVDSEFS UyIpKSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChja3N0cmNocihuYW1lY2hhcnMsICd+JyApICE9 IE5VTEwpIHRpbGRlICA9ICd+JzsKKyAgICAgICAgaWYgKGNrc3RyY2hyKG5hbWVjaGFycywgJ1xc JykgIT0gTlVMTCkgYnNsYXNoID0gJ1xcJzsKKyAgICB9IGVsc2UgeworICAgICAgICB0aWxkZSA9 ICd+JzsKKyAgICAgICAgYnNsYXNoID0gJ1xcJzsKKyAgICB9CisjZW5kaWYgLyogYWVnaXMgKi8K KworICAgIHBwID0gd29yazsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZm ZXIgKi8KKyAgICBmb3IgKGNwID0gbmFtZSwgbiA9IDA7ICpjcCAmJiBuIDwgbWF4OyBjcCsrLG4r KykgeyAvKiBDb252ZXJ0IG5hbWUgY2hhcnMgKi8KKyAgICAgICAgYyA9ICpjcDsKKyNpZm5kZWYg Tk9DU0VUUworICAgICAgICBpZiAoc3hvKSBjID0gKCpzeG8pKGMpOyAgICAgICAgIC8qIENvbnZl cnQgdG8gQVNDSUkgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgICAgIGlmIChmbmNudiA+ IDAgJiYgaXNsb3dlcihjKSkJLyogVXBwZXJjYXNlIGxldHRlcnMgKi8KKyAgICAgICAgICAqcHAr KyA9IHRvdXBwZXIoYyk7ICAgICAgICAgICAvKiBDaGFuZ2UgdGlsZGUgdG8gaHlwaGVuICovCisg ICAgICAgIGVsc2UgaWYgKGMgPT0gJ34nKQorICAgICAgICAgICpwcCsrID0gJy0nOworICAgICAg ICBlbHNlIGlmIChmbmNudiA+IDAgJiYgYyA9PSAnIycpCS8qIENoYW5nZSBudW1iZXIgc2lnbiB0 byAnWCcgKi8KKyAgICAgICAgICAqcHArKyA9ICdYJzsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAn KicgfHwgYyA9PSAnPycpICAvKiBDaGFuZ2Ugd2lsZGNhcmQgY2hhcnMgdG8gJ1gnICovCisgICAg ICAgICAgKnBwKysgPSAnWCc7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJyAnKSAgICAgICAgICAg ICAgLyogQ2hhbmdlIHNwYWNlIHRvIHVuZGVyc2NvcmUgKi8KKyAgICAgICAgICAqcHArKyA9ICdf JzsKKyAgICAgICAgZWxzZSBpZiAoYyA8ICcgJykgICAgICAgICAgICAgICAvKiBDaGFuZ2UgY29u dHJvbHMgdG8gJ1gnICovCisgICAgICAgICAgKnBwKysgPSAnWCc7CisgICAgICAgIGVsc2UgaWYg KGZuY252ID4gMCAmJiBjID09ICcuJykgeyAvKiBDaGFuZ2UgZG90IHRvIHVuZGVyc2NvcmUgKi8K KyAgICAgICAgICAgIGRvdHAgPSBwcDsgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB3aGVy ZSB3ZSBsYXN0IGRpZCB0aGlzICovCisgICAgICAgICAgICAqcHArKyA9ICdfJzsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjID09ICcvJykKKyAgICAgICAgICAgICAgZGlycCA9 IHBwOworICAgICAgICAgICAgKnBwKysgPSBjOworICAgICAgICB9CisgICAgfQorICAgICpwcCA9 IE5VTDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpZSBpdCBvZmYuICovCisjaWZkZWYg Q09NTUVOVAorICAgIGlmIChkb3RwKSAqZG90cCA9ICcuJzsgICAgICAgICAgICAgIC8qIFJlc3Rv cmUgbGFzdCBkb3QgKGlmIGFueSkgKi8KKyNlbHNlCisgICAgaWYgKGRvdHAgPiBkaXJwKSAqZG90 cCA9ICcuJzsgICAgICAgLyogUmVzdG9yZSBsYXN0IGRvdCBpbiBmaWxlIG5hbWUgKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgY3AgPSBuYW1lMjsgICAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgbm90aGluZyBiZWZvcmUgZG90LCAqLworICAgIGlmICgqd29yayA9PSAnLicpICpjcCsr ID0gJ1gnOyAgICAgIC8qIGluc2VydCAnWCcgKi8KKyAgICBja3N0cm5jcHkoY3Asd29yayxtYXgp OworI2lmbmRlZiBOT0NTRVRTCisgICAgbGFuZ3VhZ2UgPSBsYW5nc3Y7CisjZW5kaWYgLyogTk9D U0VUUyAqLworICAgIGRlYnVnKEYxMTAsIm56bHRvciBuYW1lMiIsbmFtZTIsMCk7Cit9CisKKwor LyogIFogQyBIIEQgSSBSICAtLSAgQ2hhbmdlIGRpcmVjdG9yeSAgKi8KKy8qCisgIENhbGwgd2l0 aDoKKyAgICBkaXJuYW0gPSBwb2ludGVyIHRvIG5hbWUgb2YgZGlyZWN0b3J5IHRvIGNoYW5nZSB0 bywKKyAgICAgIHdoaWNoIG1heSBiZSAiIiBvciBOVUxMIHRvIGluZGljYXRlIHVzZXIncyBob21l IGRpcmVjdG9yeS4KKyAgUmV0dXJuczoKKyAgICAwIG9uIGZhaWx1cmUKKyAgICAxIG9uIHN1Y2Nl c3MKKyovCitpbnQKK3pjaGRpcihkaXJuYW0pIGNoYXIgKmRpcm5hbTsgeworICAgIGNoYXIgKmhk LCAqc3A7CisjaWZkZWYgSUtTREIKKyAgICBfUFJPVE9UWVAgKGludCBzbG90ZGlyLChjaGFyICos Y2hhciAqKSk7CisjZW5kaWYgLyogSUtTREIgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICBleHRlcm4g c3RydWN0IG10YWIgKm1hY3RhYjsgICAgICAgICAgICAgLyogTWFpbiBtYWNybyB0YWJsZSAqLwor ICAgIGV4dGVybiBpbnQgbm1hYzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2Yg bWFjcm9zICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIGRlYnVnKEYxMTAsInpjaGRpciIs ZGlybmFtLDApOworICAgIGlmICghZGlybmFtKSBkaXJuYW0gPSAiIjsKKyAgICBpZiAoISpkaXJu YW0pICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBhcmd1bWVudCBpcyBudWxsIG9yIGVtcHR5 LCAqLworICAgICAgZGlybmFtID0gemhvbWUoKTsgICAgICAgICAgICAgICAgIC8qIHVzZSB1c2Vy J3MgaG9tZSBkaXJlY3RvcnkuICovCisgICAgc3AgPSBkaXJuYW07CisgICAgZGVidWcoRjExMCwi emNoZGlyIDIiLGRpcm5hbSwwKTsKKworI2lmZGVmIERUSUxERQorICAgIGhkID0gdGlsZGVfZXhw YW5kKGRpcm5hbSk7ICAgICAgICAgIC8qIEF0dGVtcHQgdG8gZXhwYW5kIHRpbGRlICovCisgICAg aWYgKCFoZCkgaGQgPSAiIjsKKyAgICBpZiAoKmhkID09ICdcMCcpIGhkID0gZGlybmFtOyAgICAg ICAvKiBpbiBkaXJlY3RvcnkgbmFtZS4gKi8KKyNlbHNlCisgICAgaGQgPSBkaXJuYW07CisjZW5k aWYgLyogRFRJTERFICovCisgICAgZGVidWcoRjExMCwiemNoZGlyIDMiLGhkLDApOworCisjaWZk ZWYgQ0tST09UCisgICAgZGVidWcoRjExMSwiemNoZGlyIHNldHJvb3QiLGNrcm9vdCxja3Jvb3Rz ZXQpOworICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChoZCkpIHsKKwlkZWJ1ZyhGMTEw LCJ6Y2hkaXIgc2V0cm9vdCB2aW9sYXRpb24iLGhkLDApOworCXJldHVybigwKTsKKyAgICB9Cisj ZW5kaWYgLyogQ0tST09UICovCisKKyNpZmRlZiBwZHAxMQorICAgIC8qIEp1c3QgdG8gc2F2ZSBz b21lIHNwYWNlICovCisgICAgcmV0dXJuKChjaGRpcihoZCkgPT0gMCkgPyAxIDogMCk7CisjZWxz ZQorICAgIGlmIChjaGRpcihoZCkgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogVHJ5 IHRvIGNkICovCisjaWZkZWYgSUtTREIKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICBpZiAoaW5z ZXJ2ZXIgJiYgaWtkYm9wZW4pCisgICAgICAgICAgc2xvdGRpcihpc2d1ZXN0ID8gYW5vbnJvb3Qg OiAiIiwgemd0ZGlyKCkpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTREIg Ki8KKworI2lmbmRlZiBOT1NQTAorICAgICAgICBpZiAobm1hYykgewkJCS8qIEFueSBtYWNyb3Mg ZGVmaW5lZD8gKi8KKyAgICAgICAgICAgIGludCBrOwkJCS8qIFllcyAqLworICAgICAgICAgICAg c3RhdGljIGludCBvbl9jZCA9IDA7CisgICAgICAgICAgICBpZiAoIW9uX2NkKSB7CisgICAgICAg ICAgICAgICAgb25fY2QgPSAxOworICAgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9u X2NkIixubWFjKTsgICAvKiBMb29rIHRoaXMgdXAgKi8KKyAgICAgICAgICAgICAgICBpZiAoayA+ PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCisgICAgICAgICAgICAg ICAgICAgIGlmIChkb2RvKGssemd0ZGlyKCksMCkgPiAtMSkgIC8qIHNldCBpdCB1cCwgKi8KKwkJ ICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9uX2NkID0gMDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgIHJldHVybigxKTsKKyAg ICB9CisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIHBkcDExICovCit9CisKK2ludAorI2lmZGVm IENLX0FOU0lDCit6Y2hrcGlkKHVuc2lnbmVkIGxvbmcgeHBpZCkKKyNlbHNlCit6Y2hrcGlkKHhw aWQpIHVuc2lnbmVkIGxvbmcgeHBpZDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIHJl dHVybigoa2lsbCgoUElEX1QpeHBpZCwwKSA8IDApID8gMCA6IDEpOworfQorCisKKy8qICBaIEgg TyBNIEUgIC0tICBSZXR1cm4gcG9pbnRlciB0byB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgICovCisK K3N0YXRpYyBjaGFyICogemhvbWRpciA9IE5VTEw7CisKK2NoYXIgKgoremhvbWUoKSB7CisgICAg Y2hhciAqIGhvbWU7CisKKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAoY2tyb290c2V0KQorICAgICAg cmV0dXJuKChjaGFyICopY2tyb290KTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworI2lmZGVmIFBs YW45CisgICAgaG9tZSA9IGdldGVudigiaG9tZSIpOworI2Vsc2UKKyAgICBob21lID0gZ2V0ZW52 KCJIT01FIik7CisjZW5kaWYgLyogUGxhbjkgKi8KKyAgICBtYWtlc3RyKCZ6aG9tZGlyLGhvbWUp OworICAgIHJldHVybihob21lID8gemhvbWRpciA6ICIuIik7Cit9CisKKy8qICBaIEcgVCBEIEkg UiAgLS0gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAgKi8KKwor LyoKKyAgVGhlICJwcmVmZXJyZWQiIGludGVyZmFjZSBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCBk aXJlY3RvcnkgaW4gbW9kZXJuIFVOSVgKKyAgaXMgZ2V0Y3dkKCkgW1BPU0lYIDEwMDMuMSA1LjIu Ml0uICBIb3dldmVyLCBvbiBjZXJ0YWluIHBsYXRmb3JtcyAoc3VjaCBhcworICBTdW5PUyksIGl0 IGlzIGltcGxlbWVudGVkIGJ5IGZvcmtpbmcgYSBzaGVsbCwgZmVlZGluZyBpdCB0aGUgcHdkIGNv bW1hbmQsCisgIGFuZCByZXR1cm5pbmcgdGhlIHJlc3VsdCwgd2hpY2ggaXMgbm90IG9ubHkgaW5l ZmZpY2llbnQgYnV0IGFsc28gY2FuIHJlc3VsdAorICBpbiBzdHJheSBtZXNzYWdlcyB0byB0aGUg dGVybWluYWwuICBJbiBzdWNoIGNhc2VzIC0tIGFzIHdlbGwgYXMgd2hlbgorICBnZXRjd2QoKSBp cyBub3QgYXZhaWxhYmxlIGF0IGFsbCAtLSBnZXR3ZCgpIGNhbiBiZSB1c2VkIGluc3RlYWQgYnkg ZGVmaW5pbmcKKyAgVVNFX0dFVFdELiAgSG93ZXZlciwgbm90ZSB0aGF0IGdldHdkKCkgcHJvdmlk ZXMgbm8gYnVmZmVyLWxlbmd0aCBhcmd1bWVudAorICBhbmQgdGhlcmVmb3JlIG5vIHNhZmVndWFy ZCBhZ2FpbnN0IG1lbW9yeSBsZWFrcy4KKyovCisjaWZuZGVmIFVTRV9HRVRXRAorI2lmZGVmIEJT RDQyCisjZGVmaW5lIFVTRV9HRVRXRAorI2Vsc2UKKyNpZmRlZiBTVU5PUzQKKyNkZWZpbmUgVVNF X0dFVFdECisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogQlNENDIgKi8KKyNlbmRpZiAv KiBVU0VfR0VUV0QgKi8KKworI2lmZGVmIHBkcDExCisjZGVmaW5lIENXREJMIDgwICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2F2ZSBldmVyeSBieXRlIHdlIGNhbi4uLiAqLworI2Vsc2UKKyNk ZWZpbmUgQ1dEQkwgQ0tNQVhQQVRICisjZW5kaWYgLyogcGRwMTEgKi8KK3N0YXRpYyBjaGFyIGN3 ZGJ1ZltDV0RCTCsyXTsKKy8qCisgIE5PVEU6IFRoZSBnZXRjd2QoKSBwcm90b3R5cGVzIGFyZSBj b21tZW50ZWQgb3V0IG9uIHB1cnBvc2UuICBJZiB5b3UgZ2V0CisgIGNvbXBpbGUtdGltZSB3YXJu aW5ncywgc2VhcmNoIHRocm91Z2ggeW91ciBzeXN0ZW0ncyBoZWFkZXIgZmlsZXMgdG8gc2VlCisg IHdoaWNoIG9uZSBoYXMgdGhlIG5lZWRlZCBwcm90b3R5cGUsIGFuZCAjaW5jbHVkZSBpdC4gIFVz dWFsbHkgaXQgaXMKKyAgPHVuaXN0ZC5oPi4gIFNlZSB0aGUgc2VjdGlvbiBmb3IgaW5jbHVkaW5n IDx1bmlzdGQuaD4gaW4gY2tjZGViLmggYW5kCisgIG1ha2UgYW55IG5lZWRlZCBhZGp1c3RtZW50 cyB0aGVyZSAoYW5kIHJlcG9ydCB0aGVtKS4KKyovCitjaGFyICoKK3pndGRpcigpIHsKKyAgICBj aGFyICogYnVmID0gY3dkYnVmOworICAgIGNoYXIgKiBzOworCisjaWZkZWYgVVNFX0dFVFdECisg ICAgZXh0ZXJuIGNoYXIgKmdldHdkKCk7CisgICAgcyA9IGdldHdkKGJ1Zik7CisgICAgZGVidWco RjExMCwiemd0ZGlyIEJTRDQgZ2V0d2QoKSIscywwKTsKKyAgICBpZiAoIXMpIHMgPSAiLi8iOwor ICAgIHJldHVybihzKTsKKyNlbHNlCisjaWZkZWYgQlNENDQKKyNpZmRlZiBEQ0xHRVRDV0QKK19Q Uk9UT1RZUCggY2hhciAqIGdldGN3ZCwgKGNoYXIgKiwgU0laRV9UKSApOworI2VuZGlmIC8qIERD TEdFVENXRCAqLworICAgIGRlYnVnKEYxMDEsInpndGRpciBCU0Q0NCBDV0RCTCIsIiIsQ1dEQkwp OworICAgIHMgPSBnZXRjd2QoYnVmLENXREJMKTsKKyAgICBpZiAoIXMpIHMgPSAiLi8iOworICAg IHJldHVybihzKTsKKyNlbHNlCisjaWZkZWYgTUlOSVgyCisjaWZkZWYgRENMR0VUQ1dECisgICAg X1BST1RPVFlQKCBjaGFyICogZ2V0Y3dkLCAoY2hhciAqLCBTSVpFX1QpICk7CisjZW5kaWYgLyog RENMR0VUQ1dEICovCisgICAgZGVidWcoRjEwMSwiemd0ZGlyIE1JTklYMiBDV0RCTCIsIiIsQ1dE QkwpOworICAgIHMgPSBnZXRjd2QoYnVmLENXREJMKTsKKyAgICBpZiAoIXMpIHMgPSAiLi8iOwor ICAgIHJldHVybihzKTsKKyNlbHNlCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZkZWYgQ09NTUVOVAor LyogVGhpcyBub24tQU5TSSBwcm90b3R5cGUgY2FuIGJlIGZhdGFsIGF0IHJ1bnRpbWUhIChlLmcu IGluIFNDTzMuMnY1LjAuNSkuICovCisvKiBBbnl3YXkgaXQncyBhbHJlYWR5IHByb3RvdHlwZWQg aW4gc29tZSBoZWFkZXIgZmlsZSB0aGF0IHdlIGhhdmUgaW5jbHVkZWQuICovCisgICAgZXh0ZXJu IGNoYXIgKmdldGN3ZCgpOworI2Vsc2UKKyNpZmRlZiBEQ0xHRVRDV0QKKyAgICBfUFJPVE9UWVAo IGNoYXIgKiBnZXRjd2QsIChjaGFyICosIFNJWkVfVCkgKTsKKyNlbmRpZiAvKiBEQ0xHRVRDV0Qg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgZGVidWcoRjEwMSwiemd0ZGlyIFNWT1JQT1NJ WCBDV0RCTCIsIiIsQ1dEQkwpOworICAgIHMgPSBnZXRjd2QoYnVmLENXREJMKTsKKyAgICBpZiAo IXMpIHMgPSAiLi8iOworICAgIHJldHVybihzKTsKKyNlbHNlCisjaWZkZWYgQ09IRVJFTlQKKyNp ZmRlZiBfSTM4NgorI2lmZGVmIERDTEdFVENXRAorICAgIGV4dGVybiBjaGFyICpnZXRjd2QoKTsK KyNlbmRpZiAvKiBEQ0xHRVRDV0QgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ6Z3RkaXIgQ09IRVJFTlQg X0kzODYgQ1dEQkwiLCIiLENXREJMKTsKKyAgICBzID0gZ2V0Y3dkKGJ1ZixDV0RCTCk7CisgICAg aWYgKCFzKSBzID0gIi4vIjsKKyAgICByZXR1cm4ocyk7CisjZWxzZQorICAgIGV4dGVybiBjaGFy ICpnZXR3ZCgpOworICAgIGRlYnVnKEYxMDEsInpndGRpciBDT0hFUkVOVCBDV0RCTCIsIiIsQ1dE QkwpOworICAgIHMgPSBnZXR3ZChidWYpOworICAgIGlmICghcykgcyA9ICIuLyI7CisgICAgcmV0 dXJuKHMpOworI2VuZGlmIC8qIF9JMzg2ICovCisjZWxzZQorI2lmZGVmIFNVTk9TNAorICAgIGRl YnVnKEYxMDEsInpndGRpciBTVU5PUyBDV0RCTCIsIiIsQ1dEQkwpOworICAgIHMgPSBnZXRjd2Qo YnVmLENXREJMKTsKKyAgICBpZiAoIXMpIHMgPSAiLi8iOworICAgIHJldHVybihzKTsKKyNlbHNl CisgICAgcmV0dXJuKCIuLyIpOworI2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIENPSEVS RU5UICovCisjZW5kaWYgLyogU1lTVk9SUE9TSVggKi8KKyNlbmRpZiAvKiBNSU5JWDIgKi8KKyNl bmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIFVTRV9HRVRXRCAqLworfQorCisvKiAgWiBYIEMg TSBEIC0tIFJ1biBhIHN5c3RlbSBjb21tYW5kIHNvIGl0cyBvdXRwdXQgY2FuIGJlIHJlYWQgbGlr ZSBhIGZpbGUgKi8KKworI2lmbmRlZiBOT1BVU0gKK2ludAorenhjbWQoZmlsbnVtLGNvbWFuZCkg aW50IGZpbG51bTsgY2hhciAqY29tYW5kOyB7CisgICAgaW50IG91dDsKKyAgICBpbnQgcGlwZXNb Ml07CisgICAgZXh0ZXJuIGludCBrYWN0aXZlOyAgICAgICAgICAgICAgICAgLyogRnJvbSBja2Nw cm8udyBhbmQgY2tjbWFpLmMgKi8KKworICAgIGlmIChub3B1c2gpIHsKKyAgICAgICAgZGVidWco RjEwMCwienhjbWQgZmFpbHM6IG5vcHVzaCIsIiIsMCk7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorICAgIGRlYnVnKEYxMTEsInp4Y21kIixjb21hbmQsZmlsbnVtKTsKKyAgICBpZiAoY2hr Zm4oZmlsbnVtKSA8IDApIHJldHVybigtMSk7ICAvKiBOZWVkIGEgdmFsaWQgS2VybWl0IGZpbGUg bnVtYmVyLiAqLworICAgIGlmIChmaWxudW0gPT0gWlNURElPIHx8IGZpbG51bSA9PSBaQ1RFUk0p IC8qIEJ1dCBub3Qgb25lIG9mIHRoZXNlLiAqLworICAgICAgcmV0dXJuKDApOworCisgICAgb3V0 ID0gKGZpbG51bSA9PSBaSUZJTEUgfHwgZmlsbnVtID09IFpSRklMRSkgPyAwIDogMSA7CisgICAg ZGVidWcoRjEwMSwienhjbWQgb3V0Iixjb21hbmQsb3V0KTsKKworLyogT3V0cHV0IHRvIGEgY29t bWFuZCAqLworCisgICAgaWYgKG91dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmVl ZCBwb3BlbigpIHRvIGRvIHRoaXMuICovCisJY2tzdHJuY3B5KGZ1bGxuYW1lLCIocGlwZSkiLENL TUFYUEFUSCk7CisjaWZkZWYgTk9QT1BFTgorICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIG5vIHBvcGVuKCksIGZhaWwuICovCisjZWxzZQorLyogVXNlIHBvcGVuKCkg dG8gcnVuIHRoZSBjb21tYW5kLiAqLworCisjaWZkZWYgX1BPU0lYX1NPVVJDRQorLyogU3RyaWN0 bHkgc3BlYWtpbmcsIHBvcGVuKCkgaXMgbm90IGF2YWlsYWJsZSBpbiBQT1NJWC4xICovCisjZGVm aW5lIERDTFBPUEVOCisjZW5kaWYgLyogX1BPU0lYX1NPVVJDRSAqLworCisJZGVidWcoRjExMCwi enhjbWQgb3V0Iixjb21hbmQsMCk7CisKKyAgICAgICAgaWYgKHByaXZfY2hrKCkpIHsKKwkgICAg ZGVidWcoRjEwMCwienhjbWQgcHJpdl9jaGsgZmFpbGVkIiwiIiwwKTsKKyAgICAgICAgICAgIHJl dHVybigwKTsKKwl9CQorCWVycm5vID0gMDsKKyAgICAgICAgZnBbZmlsbnVtXSA9IHBvcGVuKGNv bWFuZCwidyIpOworCWRlYnVnKEYxMTEsInp4Y21kIHBvcGVuIixmcFtmaWxudW1dID8gIk9LIiA6 ICJGYWlsZWQiLCBlcnJubyk7CisJaWYgKGZwW2ZpbG51bV0gPT0gTlVMTCkKKwkgIHJldHVybigw KTsKKyNpZmRlZiBDT01NRU5UCisvKiBJIHdvbmRlciB3aGF0IHRoaXMgaXMgYWxsIGFib3V0Li4u ICovCisJY2xvc2UocGlwZXNbMF0pOwkJLyogRG9uJ3QgbmVlZCB0aGUgaW5wdXQgc2lkZSAqLwor CWZwW2ZpbG51bV0gPSBmZG9wZW4ocGlwZXNbMV0sInciKTsgLyogT3BlbiBvdXRwdXQgc3RyZWFt LiAqLworCWZwW1pTWVNGTl0gPSBmcFtmaWxudW1dOyAgICAgICAgICAgLyogUmVtZW1iZXIuICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworCWlzcGlwZVtmaWxudW1dID0gMTsKKwl6b3V0Y250ID0g MDsJCQkvKiAoUFdQKSByZXNldCBpbnB1dCBidWZmZXIgKi8KKwl6b3V0cHRyID0gem91dGJ1ZmZl cjsKKwlyZXR1cm4oMSk7CisjZW5kaWYgLyogTk9QT1BFTiAqLworICAgIH0KKworLyogSW5wdXQg ZnJvbSBhIGNvbW1hbmQgKi8KKworI2lmZGVmIFNOSTU0MQorICAgIC8qIFNJTklYLUwgNS40MSBk b2VzIG5vdCBsaWtlIGZkb3BlbigpICovCisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAgICBpZiAo cGlwZShwaXBlcykgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJ6eGNtZCBwaXBlIGZhaWx1 cmUiLCIiLDApOworICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIGNh bid0IG1ha2UgcGlwZSwgZmFpbCAqLworICAgIH0KKworLyogQ3JlYXRlIGEgZm9yayBpbiB3aGlj aCB0byBydW4gdGhlIG5hbWVkIHByb2Nlc3MgKi8KKworICAgIGlmICgoCisjaWZkZWYgYWVnaXMK KyAgICAgICAgIHBpZCA9IHZmb3JrKCkgICAgICAgICAgICAgICAgICAvKiBjaGlsZCAqLworI2Vs c2UKKyAgICAgICAgIHBpZCA9IGZvcmsoKSAgICAgICAgICAgICAgICAgICAvKiBjaGlsZCAqLwor I2VuZGlmIC8qIGFlZ2lzICovCisgICAgICAgICApID09IDApIHsKKworLyogV2UncmUgaW4gdGhl IGZvcmsuICovCisKKyAgICAgICAgY2hhciAqc2hwYXRoLCAqc2huYW1lLCAqc2hwdHI7ICAvKiBG aW5kIHVzZXIncyBwcmVmZXJyZWQgc2hlbGwgKi8KKyNpZm5kZWYgYWVnaXMKKyAgICAgICAgc3Ry dWN0IHBhc3N3ZCAqcDsKKyAgICAgICAgY2hhciAqZGVmc2hlbGw7CisjaWZkZWYgSFBVWDEwICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBzaGVsbCAqLworICAgICAgICBkZWZz aGVsbCA9ICIvdXNyL2Jpbi9zaCI7CisjZWxzZQorI2lmZGVmIFBsYW45CisgICAgICAgIGRlZnNo ZWxsID0gIi9iaW4vcmMiOworI2Vsc2UKKyAgICAgICAgZGVmc2hlbGwgPSAiL2Jpbi9zaCI7Cisj ZW5kaWYgLyogUGxhbjkgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBhZWdpcyAq LworICAgICAgICBpZiAocHJpdl9jYW4oKSkgZXhpdCgxKTsgICAgICAgIC8qIFR1cm4gb2ZmIGFu eSBwcml2aWxlZ2VzISAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ6eGNtZCBwaWQiLCIiLHBpZCk7 CisgICAgICAgIGNsb3NlKHBpcGVzWzBdKTsgICAgICAgICAgICAgICAgLyogY2xvc2UgaW5wdXQg c2lkZSBvZiBwaXBlICovCisgICAgICAgIGNsb3NlKDApOyAgICAgICAgICAgICAgICAgICAgICAg LyogY2xvc2Ugc3RkaW4gKi8KKyAgICAgICAgaWYgKG9wZW4oIi9kZXYvbnVsbCIsMCkgPCAwKSBy ZXR1cm4oMCk7IC8qIHJlcGxhY2UgaW5wdXQgYnkgbnVsbCAqLworI2lmbmRlZiBPWE9TCisjaWZu ZGVmIFNWT1JQT1NJWAorICAgICAgICBkdXAyKHBpcGVzWzFdLDEpOyAgICAgICAgICAgICAgIC8q IEJTRDogcmVwbGFjZSBzdGRvdXQgJiBzdGRlcnIgKi8KKyAgICAgICAgZHVwMihwaXBlc1sxXSwy KTsgICAgICAgICAgICAgICAvKiBieSB0aGUgcGlwZSAqLworI2Vsc2UKKyAgICAgICAgY2xvc2Uo MSk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBVCZUOiBjbG9zZSBzdGRvdXQgKi8KKyAgICAg ICAgaWYgKGR1cChwaXBlc1sxXSkgIT0gMSkgICAgICAgICAvKiBTZW5kIHN0ZG91dCB0byB0aGUg cGlwZSAqLworICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgY2xvc2UoMik7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBTZW5kIHN0ZGVyciB0byB0aGUgcGlwZSAqLworICAgICAgICBpZiAo ZHVwKHBpcGVzWzFdKSAhPSAyKQorICAgICAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBTVk9S UE9TSVggKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICAgICAgZHVwMihwaXBlc1sxXSwxKTsKKyAg ICAgICAgZHVwMihwaXBlc1sxXSwyKTsKKyNlbmRpZiAvKiBPWE9TICovCisgICAgICAgIGNsb3Nl KHBpcGVzWzFdKTsgICAgICAgICAgICAgICAgLyogRG9uJ3QgbmVlZCB0aGlzIGFueSBtb3JlLiAq LworCisjaWZkZWYgYWVnaXMKKyAgICAgICAgaWYgKChzaHBhdGggPSBnZXRlbnYoIlNFUlZFUlNI RUxMIikpID09IE5VTEwpCisgICAgICAgICAgc2hwYXRoID0gIi9iaW4vc2giOworI2Vsc2UKKyAg ICAgICAgc2hwYXRoID0gZ2V0ZW52KCJTSEVMTCIpOyAgICAgICAvKiBXaGF0IHNoZWxsPyAqLwor ICAgICAgICBpZiAoc2hwYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgIHAgPSBnZXRwd3VpZCgg cmVhbF91aWQoKSApOyAvKiBHZXQgbG9naW4gZGF0YSAqLworICAgICAgICAgICAgLyogZGVidWco RjExMSwienhjbWQgc2hwYXRoIiwiZ2V0cHd1aWQoKSIscCk7ICovCisgICAgICAgICAgICBpZiAo cCA9PSAoc3RydWN0IHBhc3N3ZCAqKU5VTEwgfHwgISoocC0+cHdfc2hlbGwpKQorICAgICAgICAg ICAgICBzaHBhdGggPSBkZWZzaGVsbDsKKyAgICAgICAgICAgIGVsc2Ugc2hwYXRoID0gcC0+cHdf c2hlbGw7CisgICAgICAgIH0KKyNlbmRpZiAvKiBhZWdpcyAqLworICAgICAgICBzaHB0ciA9IHNo bmFtZSA9IHNocGF0aDsKKyAgICAgICAgd2hpbGUgKCpzaHB0ciAhPSAnXDAnKQorICAgICAgICAg IGlmICgqc2hwdHIrKyA9PSAnLycpCisgICAgICAgICAgICBzaG5hbWUgPSBzaHB0cjsKKyAgICAg ICAgZGVidWcoRjExMCxzaHBhdGgsc2huYW1lLDApOworCXJlc3RvcnNpZ3MoKTsJCQkvKiBSZXN0 b3JlIGlnbm9yZWQgc2lnbmFscyAqLworICAgICAgICBleGVjbChzaHBhdGgsc2huYW1lLCItYyIs Y29tYW5kLChjaGFyICopTlVMTCk7IC8qIEV4ZWN1dGUgdGhlIGNtZCAqLworICAgICAgICBleGl0 KDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGp1c3QgcHVudCBpZiBpdCBmYWlsZWQuICov CisgICAgfSBlbHNlIGlmIChwaWQgPT0gKFBJRF9UKSAtMSkgeworICAgICAgICBkZWJ1ZyhGMTAw LCJ6eGNtZCBmb3JrIGZhaWx1cmUiLCIiLDApOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQor ICAgIGRlYnVnKEYxMDEsInp4Y21kIHBpZCIsIiIscGlkKTsKKyAgICBjbG9zZShwaXBlc1sxXSk7 ICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBuZWVkIHRoZSBvdXRwdXQgc2lkZSAqLworICAg IGlzcGlwZVtmaWxudW1dID0gMTsgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGl0J3MgYSBw aXBlICovCisgICAgZnBbZmlsbnVtXSA9IGZkb3BlbihwaXBlc1swXSwiciIpOwkvKiBPcGVuIGEg c3RyZWFtIGZvciBpbnB1dC4gKi8KKworI2lmZGVmIERPTkRFTEFZCisjaWZkZWYgU0VMRUNUCisg ICAgaWYgKGZpbG51bSA9PSBaSUZJTEUgJiYga2FjdGl2ZSkgeyAgLyogTWFrZSBwaXBlIHJlYWRz IG5vbmJsb2NraW5nICovCisgICAgICAgIGludCBmbGFncywgeDsKKyAgICAgICAgaWYgKChmbGFn cyA9IGZjbnRsKGZpbGVubyhmcFtmaWxudW1dKSxGX0dFVEZMLDApKSA+IC0xKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ6eGNtZCBmY250bCAxIHBpcGUgZmxhZ3MiLCIiLGZsYWdzKTsKKyAg ICAgICAgICAgIHggPSBmY250bChmaWxlbm8oZnBbZmlsbnVtXSksRl9TRVRGTCwgZmxhZ3MgfAor I2lmZGVmIFFOWAorICAgICAgICAgICAgICAgICAgT19OT05CTE9DSworI2Vsc2UKKyAgICAgICAg ICAgICAgICAgIE9fTkRFTEFZCisjZW5kaWYgLyogUU5YICovCisgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgZGVidWcoRjEwMSwienhjbWQgZmNudGwgMiByZXN1bHQiLCIiLHgpOwor ICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIFNFTEVDVCAqLworI2VuZGlmIC8qIERPTkRFTEFZ ICovCisjZW5kaWYgLyogU05JNTQxICovCisgICAgZnBbWlNZU0ZOXSA9IGZwW2ZpbG51bV07ICAg ICAgICAgICAgLyogUmVtZW1iZXIuICovCisgICAgemluY250ID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogKFBXUCkgcmVzZXQgaW5wdXQgYnVmZmVyICovCisgICAgemlucHRyID0gemlu YnVmZmVyOworICAgIGZ1bGxuYW1lWzBdID0gJ1wwJzsKKyAgICByZXR1cm4oMSk7Cit9IC8qIHp4 Y21kICovCisKKy8qICBaIEMgTCBPIFMgRiAgLSB3YWl0IGZvciB0aGUgY2hpbGQgZm9yayB0byB0 ZXJtaW5hdGUgYW5kIGNsb3NlIHRoZSBwaXBlLiAqLworCisvKiAgVXNlZCBpbnRlcm5hbGx5IGJ5 IHpjbG9zZSAtIHJldHVybnMgLTEgb24gZmFpbHVyZSwgMSBvbiBzdWNjZXNzLiAqLworCitpbnQK K3pjbG9zZihmaWxudW0pIGludCBmaWxudW07IHsKKyAgICBpbnQgd3N0YXQsIG91dDsKKyAgICBp bnQgc3RhdHVzcDsKKworICAgIGRlYnVnKEYxMDEsInpjbG9zZiBmaWxudW0iLCIiLGZpbG51bSk7 CisgICAgb3V0ID0gKGZpbG51bSA9PSBaSUZJTEUgfHwgZmlsbnVtID09IFpSRklMRSkgPyAwIDog MSA7CisgICAgZGVidWcoRjEwMSwiemNsb3NmIG91dCIsIiIsb3V0KTsKKworI2lmbmRlZiBOT1BP UEVOCisgICAgaWYgKGlzcGlwZVtmaWxudW1dCisgICAgICAgIC8qIEluIFVOSVggd2UgdXNlIHBv cGVuKCkgb25seSBmb3Igb3V0cHV0IGZpbGVzICovCisgICAgICAgICYmIG91dAorICAgICAgICAp IHsKKyAgICAgICAgaW50IHg7CisgICAgICAgIHggPSBwY2xvc2UoZnBbZmlsbnVtXSk7CisgICAg ICAgIHBleGl0c3RhdCA9IHggPj4gODsKKyAgICAgICAgZGVidWcoRjEwMSwiemNsb3NmIHBjbG9z ZSIsIiIseCk7CisgICAgICAgIGRlYnVnKEYxMDEsInpjbG9zZiBwZXhpdHN0YXQiLCIiLHBleGl0 c3RhdCk7CisgICAgICAgIGZwW2ZpbG51bV0gPSBmcFtaU1lTRk5dID0gTlVMTDsKKyAgICAgICAg aXNwaXBlW2ZpbG51bV0gPSAwOworICAgICAgICByZXR1cm4oKHggIT0gMCkgPyAtMSA6IDEpOwor ICAgIH0KKyNlbmRpZiAvKiBOT1BPUEVOICovCisgICAgLyogZGVidWcoRjEwMSwiemNsb3NmIGZw W2ZpbG51bV0iLCIiLCBmcFtmaWxudW1dKTsgKi8KKyAgICAvKiBkZWJ1ZyhGMTAxLCJ6Y2xvc2Yg ZnBbWlNZU0ZOXSIsIiIsIGZwW1pTWVNGTl0pOyAqLworCisgICAgaWYgKHBpZCAhPSAoUElEX1Qp IDApIHsKKyAgICAgICAgZGVidWcoRjEwMSwiemNsb3NmIGtpbGxpbmcgcGlkIiwiIixwaWQpOwor I2lmZGVmIFBsYW45CisgICAgICAgIGtpbGwocGlkLCBTSUdLSUxMKTsKKyNlbHNlCisgICAgICAg IGtpbGwocGlkLDkpOworI2VuZGlmIC8qIFBsYW45ICovCisKKyNpZm5kZWYgQ0tfQ0hJTEQKKy8q CisgIFRoaXMgaXMgdGhlIG9yaWdpbmFsIGNvZGUgKGJlZm9yZSAyMCBBcHJpbCAxOTk3KSBhbmQg aGFzIHByb3ZlbiB0b3RhbGx5CisgIHBvcnRhYmxlLiAgQnV0IGl0IGRvZXMgbm90IGdpdmUgdXMg dGhlIHByb2Nlc3MncyByZXR1cm4gY29kZS4KKyovCisgICAgICAgIHdoaWxlICgod3N0YXQgPSB3 YWl0KChXQUlUX1QgKikwKSkgIT0gcGlkICYmIHdzdGF0ICE9IC0xKSA7CisjZWxzZQorLyogSGVy ZSB3ZSB0cnkgdG8gZ2V0IHRoZSByZXR1cm4gY29kZS4gIExldCdzIGhvcGUgdGhpcyBpcyBwb3J0 YWJsZSB0b28uICovCisgICAgICAgIHdoaWxlICgod3N0YXQgPSB3YWl0KCZzdGF0dXNwKSkgIT0g cGlkICYmIHdzdGF0ICE9IC0xKSA7CisgICAgICAgIHBleGl0c3RhdCA9IChzdGF0dXNwICYgMHhm ZikgPyBzdGF0dXNwIDogc3RhdHVzcCA+PiA4OworICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y2xvc2Yg d2FpdCBzdGF0dXNwIiwiIixzdGF0dXNwKTsKKyAgICAgICAgZGVidWcoRjEwMSwiemNsb3NmIHdh aXQgcGV4aXRzdGF0IiwiIixwZXhpdHN0YXQpOworI2VuZGlmIC8qIENLX0NISUxEICovCisgICAg ICAgIHBpZCA9IDA7CisgICAgfQorICAgIGZjbG9zZShmcFtmaWxudW1dKTsKKyAgICBmcFtmaWxu dW1dID0gZnBbWlNZU0ZOXSA9IE5VTEw7CisKKyAgICBpc3BpcGVbZmlsbnVtXSA9IDA7CisgICAg LyogZGVidWcoRjEwMSwiemNsb3NmIGZwW2ZpbG51bV0iLCIiLGZwW2ZpbG51bV0pOyAqLworI2lm ZGVmIENLX0NISUxECisgICAgcmV0dXJuKHBleGl0c3RhdCA9PSAwID8gMSA6IC0xKTsKKyNlbHNl CisgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIENLX0NISUxEICovCit9CisKKyNlbHNlICAvKiBO T1BVU0ggKi8KKworaW50Cit6eGNtZChmaWxudW0sY29tYW5kKSBpbnQgZmlsbnVtOyBjaGFyICpj b21hbmQ7IHsKKyAgICByZXR1cm4oMCk7Cit9CitpbnQKK3pjbG9zZihmaWxudW0pIGludCBmaWxu dW07IHsKKyAgICByZXR1cm4oRU9GKTsKK30KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworCisvKiAg WiBYIFAgQSBOIEQgIC0tICBFeHBhbmQgYSB3aWxkY2FyZCBzdHJpbmcgaW50byBhbiBhcnJheSBv ZiBzdHJpbmdzICAqLworLyoKKyAgQXMgb2YgQy1LZXJtaXQgNy4wLCB0aGlzIEFQSSBpcyBvYnNv bGV0ZSwgcmVwbGFjZWQgYnkgbnp4cGFuZCgpLCBhbmQgdGhpcworICBmdW5jdGlvbiBpcyBvbmx5 IHVzZWQgaW50ZXJuYWxseS4gIFNlZSBuenhwYW5kKCkgYmVsb3cuCisKKyAgUmV0dXJucyB0aGUg bnVtYmVyIG9mIGZpbGVzIHRoYXQgbWF0Y2ggZm5hcmcsIHdpdGggZGF0YSBzdHJ1Y3R1cmVzIHNl dCB1cAorICBzbyB0aGF0IGZpcnN0IGZpbGUgKGlmIGFueSkgd2lsbCBiZSByZXR1cm5lZCBieSB0 aGUgbmV4dCB6bmV4dCgpIGNhbGwuCisKKyAgRGVwZW5kcyBvbiBleHRlcm5hbCB2YXJpYWJsZSB3 aWxkeHBhbmQ6IDAgbWVhbnMgd2UgZXhwYW5kIHdpbGRjYXJkcworICBpbnRlcm5hbGx5LCBub256 ZXJvIG1lYW5zIHdlIGNhbGwgdGhlIHNoZWxsIHRvIGRvIGl0LgorICAKKyAgQU5EIGluIEMtS2Vy bWl0IDguMC4yMTIgYW5kIGxhdGVyLCBvbiBleHRlcm4gd2lsZGVuYTogMSBtZWFucyB3aWxkY2Fy ZHMKKyAgYXJlIGVuYWJsZWQsIDAgbWVhbnMgZGlzYWJsZWQsIHRoZSBjaGFyYWN0ZXJzIGFyZSB0 YWtlbiBsaXRlcmFsbHkuCisqLworc3RhdGljIGludCB4ZGlyb25seSA9IDA7CitzdGF0aWMgaW50 IHhmaWxvbmx5ID0gMDsKK3N0YXRpYyBpbnQgeG1hdGNoZG90ID0gMDsKK3N0YXRpYyBpbnQgeHJl Y3Vyc2l2ZSA9IDA7CitzdGF0aWMgaW50IHhub2JhY2t1cCA9IDA7CitzdGF0aWMgaW50IHhub2xp bmtzID0gMDsKKworc3RhdGljIGNoYXIgKmZyZWVwdHIgPSBOVUxMLCAqKnJlc3B0ciA9IE5VTEw7 IC8qIENvcGllcyBvZiBjYWxsZXIncyBhcmdzICovCitzdGF0aWMgaW50IHJlbWxlbjsgICAgICAg ICAgICAgICAgICAgICAgLyogUmVtYWluaW5nIHNwYWNlIGluIGNhbGxlcidzIGFycmF5ICovCitz dGF0aWMgaW50IG51bWZuZCA9IDA7CQkJLyogTnVtYmVyIG9mIG1hdGNoZXMgZm91bmQgKi8KKwor I2RlZmluZSBNSU5TUEFDRSAxMDI0CisKK3N0YXRpYyBpbnQKK2luaXRzcGFjZShyZXNhcnJ5LGxl bikgY2hhciAqIHJlc2FycnlbXTsgaW50IGxlbjsgeworI2lmZGVmIERZTkFNSUMKKyAgICBpZiAo bGVuIDwgTUlOU1BBQ0UpIGxlbiA9IE1JTlNQQUNFOworICAgIGlmICghc3NwYWNlKSB7ICAgICAg ICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gYWxsb2NhdGUgc3RyaW5nIHNwYWNlPyAqLworICAg ICAgICB3aGlsZSAobGVuID49IE1JTlNQQUNFKSB7CisgICAgICAgICAgICBpZiAoKHNzcGFjZSA9 IG1hbGxvYyhsZW4rMikpKSB7IC8qIEdvdCBpdC4gKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJmZ2VuIHN0cmluZyBzcGFjZSIsIiIsbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IChsZW4gLyAyKSArIChsZW4gLyA0KTsg LyogRGlkbid0LCByZWR1Y2UgYnkgMy80ICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlbiA8 PSBNSU5TUEFDRSkgewkJLyogRGlkIHdlIGdldCBpdD8gKi8KKyAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCJmZ2VuIGNhbid0IG1hbGxvYyBzdHJpbmcgc3BhY2VcbiIpOworICAgICAgICAgICAg cmV0dXJuKC0xKTsKKyAgICAgICAgfQorCXNzcGxlbiA9IGxlbjsKKyAgICB9CisjZW5kaWYgLyog RFlOQU1JQyAqLworCisgICAgZnJlZXB0ciA9IHNzcGFjZTsgICAgICAgICAgICAgICAgICAgLyog VGhpcyBpcyB3aGVyZSBtYXRjaGVzIGFyZSBjb3BpZWQuICovCisgICAgcmVzcHRyID0gcmVzYXJy eTsJCQkvKiBTdGF0aWMgY29waWVzIG9mIHRoZXNlIHNvICovCisgICAgcmVtbGVuID0gbGVuOyAg ICAgICAgICAgICAgICAgICAgICAgLyogcmVjdXJzaXZlIGNhbGxzIGNhbiBhbHRlciB0aGVtLiAq LworICAgIGRlYnVnKEYxMDEsImluaXRzcGFjZSBzc3BsZW4iLCIiLHNzcGxlbik7CisgICAgcmV0 dXJuKDApOworfQorCisvKgorICBaIFMgRSBUIEYgSSBMICAtLSAgUXVlcnkgb3IgY2hhbmdlIHRo ZSBzaXplIG9mIGZpbGUgbGlzdCBidWZmZXJzLgorCisgIGZjID0gMTogQ2hhbmdlIGN1cnJlbnQg c3RyaW5nIHNwYWNlIHRvIG4sIHJldHVybiBuZXcgc2l6ZS4KKyAgZmMgPSAyOiBSZXR1cm4gY3Vy cmVudCBzdHJpbmcgc3BhY2Ugc2l6ZS4KKyAgZmMgPSAzOiBDaGFuZ2UgY3VycmVudCBtYXhuYW1l cyB0byBuLCByZXR1cm4gbmV3IG1heG5hbWVzLgorICBmYyA9IDQ6IFJldHVybiBjdXJyZW50IG1h eG5hbWVzLgorICBSZXR1cm5zIDwgMCBvbiBlcnJvci4KKyovCitpbnQKK3pzZXRmaWwobiwgZmMp IGludCBuLCBmYzsgeworI2lmZGVmIERZTkFNSUMKKyAgICBzd2l0Y2ggKGZjKSB7CisgICAgICBj YXNlIDE6CQkJCS8qIFN0cmluZ3NwYWNlICovCisJaWYgKHNzcGFjZSkgeworCSAgICBmcmVlKHNz cGFjZSk7CisJICAgIHNzcGFjZSA9IE5VTEw7CisJfQorCWlmIChpbml0c3BhY2UobXRjaHMsbikg PCAwKQorCSAgcmV0dXJuKC0xKTsKKyAgICAgIGNhc2UgMjoJCQkJLyogRmFsbCB0aHJ1IGRlbGli ZXJhdGVseSAqLworCXJldHVybihzc3BsZW4pOworICAgICAgY2FzZSAzOgkJCQkvKiBMaXN0c2l6 ZSAqLworCWlmIChtdGNocykgeworCSAgICBmcmVlKChjaGFyICopbXRjaHMpOworCSAgICBtdGNo cyA9IE5VTEw7CisJfQorCW10Y2hzID0gKGNoYXIgKiopbWFsbG9jKG4gKiBzaXplb2YoY2hhciAq KSk7CisJaWYgKCFtdGNocykKKwkgIHJldHVybigtMSk7CisJbWF4bmFtZXMgPSBuOworICAgICAg Y2FzZSA0OgkJCQkvKiBGYWxsIHRocnUgZGVsaWJlcmF0ZWx5ICovCisJcmV0dXJuKG1heG5hbWVz KTsKKyAgICB9CisjZW5kaWYgLyogRFlOQU1JQyAqLworICAgIHJldHVybigtMSk7Cit9CisKKwor CisjaWZuZGVmIE5PTlpYUEFORAorI2lmbmRlZiBwZHAxMQorc3RhdGljCisjZW5kaWYgLyogcGRw MTEgKi8KKyNlbmRpZiAvKiBOT05aWFBBTkQgKi8KK2ludAorenhwYW5kKGZuYXJnKSBjaGFyICpm bmFyZzsgeworICAgIGV4dGVybiBpbnQgZGlyYWN0aXZlOworICAgIGNoYXIgZm5idWZbQ0tNQVhQ QVRIKzhdLCAqIGZuLCAqIHA7CisKKyNpZmRlZiBEVElMREUgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBCdWlsdCB3aXRoIHRpbGRlLWV4cGFuc2lvbj8gKi8KKyAgICBjaGFyICp0bmFtOwor I2VuZGlmIC8qIERUSUxERSAqLworICAgIGludCB4OworICAgIGludCBoYXZlb25lZGlyID0gMDsK KworICAgIGlmICghZm5hcmcpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vIGFyZ3Vt ZW50IHByb3ZpZGVkICovCisJbnhwYW5kID0gZmNvdW50ID0gMDsKKwlyZXR1cm4oMCk7CQkJLyog UmV0dXJuIHplcm8gZmlsZXMgZm91bmQgKi8KKyAgICB9CisgICAgZGVidWcoRjExMCwienhwYW5k IGVudHJ5IixmbmFyZywwKTsKKyAgICBkZWJ1ZyhGMTAxLCJ6eHBhbmQgeGRpcm9ubHkiLCIiLHhk aXJvbmx5KTsKKyAgICBkZWJ1ZyhGMTAxLCJ6eHBhbmQgeGZpbG9ubHkiLCIiLHhmaWxvbmx5KTsK KworICAgIGlmICghKmZuYXJnKSB7CQkJLyogSWYgbm8gYXJndW1lbnQgcHJvdmlkZWQgKi8KKwlu eHBhbmQgPSBmY291bnQgPSAwOworCXJldHVybigwKTsJCQkvKiBSZXR1cm4gemVybyBmaWxlcyBm b3VuZCAqLworICAgIH0KKworI2lmZGVmIENLUk9PVAorICAgIGRlYnVnKEYxMTEsInp4cGFuZCBz ZXRyb290Iixja3Jvb3QsY2tyb290c2V0KTsKKyAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJv b3QoZm5hcmcpKSB7CisJZGVidWcoRjExMCwienhwYW5kIHNldHJvb3QgdmlvbGF0aW9uIixmbmFy ZywwKTsKKwlueHBhbmQgPSBmY291bnQgPSAwOworCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYg LyogQ0tST09UICovCisKKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIHdvdWxkIGhhdmUgYmVl biBwZXJmZWN0LCBleGNlcHQgaXQgbWFrZXMgdXMgcmV0dXJuIGZ1bGx5IHF1YWxpZmllZAorICBw YXRobmFtZXMgZm9yIGFsbCBmaWxlcy4KKyovCisgICAgemZucWZwKGZuYXJnLENLTUFYUEFUSCxm bmJ1Zik7CisgICAgZGVidWcoRjExMCwienhwYW5kIHpmbnFmcCIsZm5idWYsMCk7CisgICAgcyA9 IHpndGRpcigpOworICAgIGRlYnVnKEYxMTAsInp4cGFuZCB6Z3RkaXIiLHMsMCk7CisgICAgcCA9 IGZuYnVmOworICAgIHdoaWxlICgqcCAmJiAqcykgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ug aXQgcmVsYXRpdmUgKi8KKyAgICAgIGlmICgqcysrICE9ICpwKyspCisgICAgICAgIGJyZWFrOwor ICAgIGZuID0gKCpzKSA/IGZuYnVmIDogcDsKKyAgICBkZWJ1ZyhGMTEwLCJ6eHBhbmQgZm4gMCIs Zm4sMCk7CisgICAgaWYgKCEqZm4pIHsKKyAgICAgICAgZm4gPSBmbmJ1ZjsKKyAgICAgICAgZm5i dWZbMF0gPSAnKic7CisgICAgICAgIGZuYnVmWzFdID0gJ1wwJzsKKyAgICB9CisgICAgZGVidWco RjExMCwienhwYW5kIGZuIDAuNSIsZm4sMCk7CisjZWxzZQorI2lmZGVmIERUSUxERSAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEJ1aWx0IHdpdGggdGlsZGUtZXhwYW5zaW9uPyAqLworICAg IGlmICgqZm5hcmcgPT0gJ34nKSB7ICAgICAgICAgICAgICAgIC8qIFN0YXJ0cyB3aXRoIHRpbGRl PyAqLworICAgICAgICB0bmFtID0gdGlsZGVfZXhwYW5kKGZuYXJnKTsgICAgIC8qIFRyeSB0byBl eHBhbmQgaXQuICovCisgICAgICAgIGNrc3RybmNweShmbmJ1Zix0bmFtLENLTUFYUEFUSCk7Cisg ICAgfSBlbHNlCisjZW5kaWYgLyogRFRJTERFICovCisgICAgICBja3N0cm5jcHkoZm5idWYsZm5h cmcsQ0tNQVhQQVRIKTsKKyAgICBmbiA9IGZuYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQb2ludCB0byB3aGF0IHdlJ2xsIHdvcmsgd2l0aCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICBkZWJ1ZyhGMTEwLCJ6eHBhbmQgZm4gMSIsZm4sMCk7CisKKyAgICBpZiAoISpmbikgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBCdXQgbWFrZSBzdXJlIHNvbWV0aGluZyBpcyB0aGVy ZSAqLworICAgICAgcmV0dXJuKDApOworCisgICAgcCA9IGZuICsgKGludClzdHJsZW4oZm4pIC0g MTsKKyAgICBpZiAoKnAgPT0gJy8nKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiBsYXN0IGNo YXIgPSAvIGl0IG11c3QgYmUgYSBkaXIgKi8KKwlpZiAoIXhmaWxvbmx5ICYmICFpc3dpbGQocCkp IGhhdmVvbmVkaXIrKzsKKyAgICAgICAgY2tzdHJuY2F0KGZuLCAiKiIsIENLTUFYUEFUSCs4KTsg Lyogc28gYXBwZW5kICcqJyAqLworICAgIH0gZWxzZSBpZiAocCA+IGZuKSB7ICAgICAgICAgICAg ICAgIC8qIElmIGVuZHMgaW4gIi8uIiAqLworICAgICAgICBpZiAoKihwLTEpID09ICcvJyAmJiAq cCA9PSAnLicpIC8qIGNoYW5nZSAnLicgdG8gJyonICovCisgICAgICAgICAgKnAgPSAnKic7Cisg ICAgfSBlbHNlIGlmIChwID09IGZuKSB7ICAgICAgICAgICAgICAgLyogSWYgaXQncyAnLicgYWxv bmUgKi8KKyAgICAgICAgaWYgKCpwID09ICcuJykgICAgICAgICAgICAgICAgICAvKiBjaGFuZ2Ug Jy4nIHRvICcqJyAqLworICAgICAgICAgICpwID0gJyonOworICAgIH0KKyAgICBkZWJ1ZyhGMTEw LCJ6eHBhbmQgZm4gMiIsZm4sMCk7CisgICAgeCA9IGlzZGlyKGZuKTsgICAgICAgICAgICAgICAg ICAgICAgLyogSXMgaXQgYSBkaXJlY3Rvcnk/ICovCisgICAgZGVidWcoRjExMSwienhwYW5kIGlz ZGlyIDEiLGZuLHgpOworICAgIGlmICh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IElmIHNvLCBtYWtlIGl0IGludG8gYSB3aWxkY2FyZCAqLworCWlmICgheGZpbG9ubHkgJiYgIWlz d2lsZChwKSkKKwkgIGhhdmVvbmVkaXIrKzsKKyAgICAgICAgaWYgKCh4ID0gc3RybGVuKGZuKSkg PiAwKSB7CisgICAgICAgICAgICBpZiAoIUlTRElSU0VQKGZuW3gtMV0pKQorICAgICAgICAgICAg ICBmblt4KytdID0gRElSU0VQOworICAgICAgICAgICAgZm5beCsrXSA9ICcqJzsKKyAgICAgICAg ICAgIGZuW3hdID0gJ1wwJzsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ6eHBh bmQgZm4gMyBoYXZlb25lZGlyIixmbixoYXZlb25lZGlyKTsKKy8qCisgIFRoZSBmb2xsb3dpbmcg YWxsb3dzIHVzIHRvIHBhcnNlIGEgc2luZ2xlIGRpcmVjdG9yeSBuYW1lIHdpdGhvdXQgb3Blbmlu ZworICB0aGUgZGlyZWN0b3J5IGFuZCBsb29raW5nIGF0IGl0cyBjb250ZW50cy4gIFRoZSBkaXJh Y3RpdmUgZmxhZyBpcyBhIGhvcnJpYmxlCisgIGhhY2sgKGVzcGVjaWFsbHkgc2luY2UgRElSIC9O T1JFQ1VSU0lWRSB0dXJucyBpdCBvZmYpLCBidXQgb3RoZXJ3aXNlIHdlJ2QKKyAgaGF2ZSB0byBj aGFuZ2UgdGhlIEFQSS4KKyovCisgICAgZGVidWcoRjExMSwienhwYW5kIGZuIDMgZGlyYWN0aXZl IixmbixkaXJhY3RpdmUpOworICAgIGlmICghZGlyYWN0aXZlICYmIGhhdmVvbmVkaXIpIHsKKwlm Y291bnQgPSAwOworCWlmICghbXRjaHMpIHsKKwkgICAgbXRjaHMgPSAoY2hhciAqKiltYWxsb2Mo bWF4bmFtZXMgKiBzaXplb2YoKm10Y2hzKSk7CisJICAgIGlmICghbXRjaHMpCisJICAgICAgcmV0 dXJuKG54cGFuZCA9IGZjb3VudCk7CisJfQorCWZjb3VudCA9IDE7CisJZGVidWcoRjExMCwienhw YW5kIGhhdmVvbmVkaXIgQTEiLGZuYXJnLDApOworCWluaXRzcGFjZShtdGNocyxzc3BsZW4pOwor CWFkZHJlc3VsdChmbmFyZywxKTsKKwlpZiAobnVtZm5kIDwgMCkgcmV0dXJuKC0xKTsKKwltdGNo cHRyID0gbXRjaHM7CQkvKiBTYXZlIHBvaW50ZXIgZm9yIG5leHQuICovCisJZGVidWcoRjExMSwi enhwYW5kIGhhdmVvbmVkaXIgQTIiLCptdGNocHRyLG51bWZuZCk7CisJcmV0dXJuKG54cGFuZCA9 IGZjb3VudCk7CisgICAgfQorCisjaWZuZGVmIE5PUFVTSAorICAgIGlmICghbm9wdXNoICYmIHdp bGR4cGFuZCkgICAgICAgICAgIC8qIFdobyBpcyBleHBhbmRpbmcgd2lsZGNhcmRzPyAqLworICAg ICAgZmNvdW50ID0gKG10Y2hzID09IE5VTEwgJiYgICAgICAgIC8qIFNoZWxsICovCisgICAgICAg ICAgICAgICAgKG10Y2hzID0gKGNoYXIgKiopbWFsbG9jKG1heG5hbWVzICogc2l6ZW9mKCptdGNo cykpKSA9PSBOVUxMKQorICAgICAgICA/IDAKKyAgICAgICAgICA6ICBzaHhwYW5kKGZuLG10Y2hz LG1heG5hbWVzKTsKKyAgICBlbHNlCisjZW5kaWYgLyogTk9QVVNIICovCisgICAgICBmY291bnQg PSAobXRjaHMgPT0gTlVMTCAmJiAgICAgICAgLyogS2VybWl0ICovCisgICAgICAgICAgICAgICAg KG10Y2hzID0gKGNoYXIgKiopbWFsbG9jKG1heG5hbWVzICogc2l6ZW9mKCptdGNocykpKSA9PSBO VUxMKQorICAgICAgICA/IDAKKyAgICAgICAgICA6IGZnZW4oZm4sbXRjaHMsbWF4bmFtZXMpOyAg ICAgIC8qIExvb2sgdXAgdGhlIGZpbGUuICovCisKKyAgICBpZiAoZmNvdW50ID09IDAgJiYgaGF2 ZW9uZWRpcikgeworCWZjb3VudCA9IDE7CisJZGVidWcoRjExMCwienhwYW5kIGhhdmVvbmVkaXIg QiIsZm5hcmcsMCk7CisJYWRkcmVzdWx0KGZuYXJnLDEpOworCWlmIChudW1mbmQgPCAwKSByZXR1 cm4oLTEpOworICAgIH0KKyAgICBtdGNocHRyID0gbXRjaHM7ICAgICAgICAgICAgICAgICAgICAv KiBTYXZlIHBvaW50ZXIgZm9yIG5leHQuICovCisgICAgbnhwYW5kID0gZmNvdW50OworCisjaWZk ZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGlmIChmY291bnQgPiAxKQorICAg ICAgICAgIGRlYnVnKEYxMTEsInp4cGFuZCBvayIsbXRjaHNbMF0sZmNvdW50KTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgIGRlYnVnKEYxMDEsInp4cGFuZCBmY291bnQiLCIiLGZjb3VudCk7Cisg ICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgcmV0dXJuKGZjb3VudCk7Cit9CisKKyNpZm5k ZWYgTk9OWlhQQU5ECisvKiAgTiBaIFggUCBBIE4gRCAgLS0gIEV4cGFuZCBhIGZpbGUgbGlzdCwg d2l0aCBvcHRpb25zLiAgKi8KKy8qCisgIENhbGwgd2l0aDoKKyAgIHMgPSBwb2ludGVyIHRvIGZp bGVuYW1lIG9yIHBhdHRlcm4uCisgICBmbGFncyA9IG9wdGlvbiBiaXRzOgorCisgICAgIGZsYWdz ICYgWlhfRklMT05MWSAgIE1hdGNoIHJlZ3VsYXIgZmlsZXMKKyAgICAgZmxhZ3MgJiBaWF9ESVJP TkxZICAgTWF0Y2ggZGlyZWN0b3JpZXMKKyAgICAgZmxhZ3MgJiBaWF9SRUNVUlNFICAgRGVzY2Vu ZCB0aHJvdWdoIGRpcmVjdG9yeSB0cmVlCisgICAgIGZsYWdzICYgWlhfTUFUQ0hET1QgIE1hdGNo ICJkb3QgZmlsZXMiCisgICAgIGZsYWdzICYgWlhfTk9CQUNLVVAgIERvbid0IG1hdGNoICJiYWNr dXAgZmlsZXMiCisgICAgIGZsYWdzICYgWlhfTk9MSU5LUyAgIERvbid0IGZvbGxvdyBzeW1saW5r cy4KKworICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpbGVzIHRoYXQgbWF0Y2ggcywgd2l0aCBk YXRhIHN0cnVjdHVyZXMgc2V0IHVwCisgICBzbyB0aGF0IGZpcnN0IGZpbGUgKGlmIGFueSkgd2ls bCBiZSByZXR1cm5lZCBieSB0aGUgbmV4dCB6bmV4dCgpIGNhbGwuCisqLworaW50CituenhwYW5k KHMsZmxhZ3MpIGNoYXIgKiBzOyBpbnQgZmxhZ3M7IHsKKyAgICBjaGFyICogcDsKKyAgICBpbnQg eDsKKworICAgIGRlYnVnKEYxMTEsIm56eHBhbmQiLHMsZmxhZ3MpOworICAgIHggPSBmbGFncyAm IChaWF9ESVJPTkxZfFpYX0ZJTE9OTFkpOworICAgIHhkaXJvbmx5ID0gKHggPT0gWlhfRElST05M WSk7CisgICAgeGZpbG9ubHkgPSAoeCA9PSBaWF9GSUxPTkxZKTsKKyAgICBpZiAoeGRpcm9ubHkg JiYgeGZpbG9ubHkpIHsKKyAgICAgICAgeGRpcm9ubHkgPSAwOworICAgICAgICB4Zmlsb25seSA9 IDA7CisgICAgfQorICAgIHhtYXRjaGRvdCAgPSAoZmxhZ3MgJiBaWF9NQVRDSERPVCk7CisgICAg ZGVidWcoRjExMSwibnp4cGFuZCB4bWF0Y2hkb3QgMSIscyx4bWF0Y2hkb3QpOworICAgIC8qIElm IHhtYXRjaGRvdCBub3Qgc2V0IGJ5IGNhbGxlciBidXQgcGF0dGVybiBpbXBsaWVzIGl0LCBzZXQg aXQgYW55d2F5ICovCisgICAgaWYgKCF4bWF0Y2hkb3QgJiYgKChwID0gY2tzdHJjaHIocywnLicp KSkpIHsKKwlpZiAocCA9PSBzICYmIHBbMV0gIT0gJy8nKSB7CisJICAgIHhtYXRjaGRvdCA9IDE7 CisJICAgIGRlYnVnKEYxMTEsIm56eHBhbmQgeG1hdGNoZG90IDIiLHMseG1hdGNoZG90KTsKKwl9 IGVsc2UgaWYgKHAgPiBzKSB7CisJICAgIHhtYXRjaGRvdCA9ICgqKHAtMSkgPT0gJywnKSB8fCAo KihwLTEpID09ICd7JykgfHwgKCoocC0xKSA9PSAnLycpOworCSAgICBkZWJ1ZyhGMTExLCJuenhw YW5kIHhtYXRjaGRvdCAzIixzLHhtYXRjaGRvdCk7CisJfQorICAgIH0KKyAgICB4cmVjdXJzaXZl ID0gKGZsYWdzICYgWlhfUkVDVVJTRSk7CisgICAgeG5vYmFja3VwICA9IChmbGFncyAmIFpYX05P QkFDS1VQKTsKKyAgICB4bm9saW5rcyAgID0gKGZsYWdzICYgWlhfTk9MSU5LUyk7CisKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJuenhwYW5kIHhkaXJvbmx5 IiwiIix4ZGlyb25seSk7CisJZGVidWcoRjEwMSwibnp4cGFuZCB4Zmlsb25seSIsIiIseGZpbG9u bHkpOworCWRlYnVnKEYxMDEsIm56eHBhbmQgeG1hdGNoZG90IiwiIix4bWF0Y2hkb3QpOworCWRl YnVnKEYxMDEsIm56eHBhbmQgeHJlY3Vyc2l2ZSIsIiIseHJlY3Vyc2l2ZSk7CisJZGVidWcoRjEw MSwibnp4cGFuZCB4bm9iYWNrdXAiLCIiLHhub2JhY2t1cCk7CisJZGVidWcoRjEwMSwibnp4cGFu ZCB4bm9saW5rcyIsIiIseG5vbGlua3MpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisg ICAgeCA9IHp4cGFuZChzKTsKKyAgICBpZiAoeCA+IDEpCisgICAgICBzaF9zb3J0KG10Y2hzLE5V TEwseCwwLDAsMSk7CS8qIEFscGhhYmV0aXplIHRoZSBsaXN0ICovCisgICAgeGRpcm9ubHkgPSAw OworICAgIHhmaWxvbmx5ID0gMDsKKyAgICB4bWF0Y2hkb3QgPSAwOworICAgIHhyZWN1cnNpdmUg PSAwOworICAgIHhub2JhY2t1cCA9IDA7CisgICAgeG5vbGlua3MgPSAwOworICAgIHJldHVybih4 KTsKK30KKyNlbmRpZiAvKiBOT05aWFBBTkQgKi8KKworI2lmbmRlZiBOT1pYUkVXSU5ECisvKiAg WiBYIFIgRSBXIEkgTiBEICAtLSAgUmV3aW5kcyB0aGUgenhwYW5kKCkgbGlzdCAqLworCitpbnQK K3p4cmV3aW5kKCkgeworICAgIC8qIGlmICghbXRjaHMpIHJldHVybigtMSk7ICovCisgICAgZmNv dW50ID0gbnhwYW5kOworICAgIG10Y2hwdHIgPSBtdGNoczsKKyAgICByZXR1cm4obnhwYW5kKTsK K30KKyNlbmRpZiAvKiBOT1pYUkVXSU5EICovCisKKy8qICBaIE4gRSBYIFQgIC0tICBHZXQgbmFt ZSBvZiBuZXh0IGZpbGUgZnJvbSBsaXN0IGNyZWF0ZWQgYnkgenhwYW5kKCkuICovCisvKgorICBS ZXR1cm5zID4wIGlmIHRoZXJlJ3MgYW5vdGhlciBmaWxlLCB3aXRoIGl0cyBuYW1lIGNvcGllZCBp bnRvIHRoZSBhcmcgc3RyaW5nLAorICBvciAwIGlmIG5vIG1vcmUgZmlsZXMgaW4gbGlzdC4KKyov CitpbnQKK3puZXh0KGZuKSBjaGFyICpmbjsgeworICAgIGlmIChmY291bnQtLSA+IDApIHsKKyAg ICAgICAgY2tzdHJuY3B5KGZuLCptdGNocHRyKyssQ0tNQVhQQVRIKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBmblswXSA9ICdcMCc7CisgICAgfQorI2lmbmRlZiBDT01NRU5UCisgICAgZGVidWco RjExMSwiem5leHQiLGZuLGZjb3VudCsxKTsKKyAgICByZXR1cm4oZmNvdW50KzEpOworI2Vsc2UK KyAgICBkZWJ1ZyhGMTExLCJ6bmV4dCIsZm4sZmNvdW50KTsgICAgICAvKiBSZXR1cm4gMCBpZiBu byBmaWxlbmFtZSB0byByZXR1cm4gKi8KKyAgICByZXR1cm4oZmNvdW50KTsKKyNlbmRpZiAvKiBD T01NRU5UICovCit9CisKKy8qICBaIEMgSCBLIFMgUCBBICAtLSAgQ2hlY2sgaWYgdGhlcmUgaXMg ZW5vdWdoIHNwYWNlIHRvIHN0b3JlIHRoZSBmaWxlICAqLworCisvKgorIENhbGwgd2l0aCBmaWxl IHNwZWNpZmljYXRpb24gZiwgc2l6ZSBuIGluIGJ5dGVzLgorIFJldHVybnMgLTEgb24gZXJyb3Is IDAgaWYgbm90IGVub3VnaCBzcGFjZSwgMSBpZiBlbm91Z2ggc3BhY2UuCisqLworLypBUkdTVVNF RCovCitpbnQKKyNpZmRlZiBDS19BTlNJQworemNoa3NwYShjaGFyICpmLCBDS19PRkZfVCBuKQor I2Vsc2UKK3pjaGtzcGEoZixuKSBjaGFyICpmOyBDS19PRkZfVCBuOworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiB6Y2hrc3BhKCkgKi8geworICAgIC8qIEluIFVOSVggdGhlcmUgaXMgbm8gZ29v ZCAoYW5kIHBvcnRhYmxlKSB3YXkuICovCisgICAgcmV0dXJuKDEpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQWx3YXlzIHNheSBPSy4gKi8KK30KKworI2lmZGVmIENPTU1FTlQJCQkJLyog KG5vdCB1c2VkKSAqLworCisvKiAgSSBTIEIgQSBDIEsgVSBQICAtLSAgVGVsbHMgaWYgZ2l2ZW4g ZmlsZSBoYXMgYSBiYWNrdXAgc3VmZml4ICAqLworLyoKKyAgIFJldHVybnM6CisgICAtMTogSW52 YWxpZCBhcmd1bWVudAorICAgIDA6IEZpbGUgZG9lcyBub3QgaGF2ZSBhIGJhY2t1cCBzdWZmaXgK KyAgID4wOiBCYWNrdXAgc3VmZml4IG51bWJlcgorKi8KK2ludAoraXNiYWNrdXAoZm4pIGNoYXIg KiBmbjsgewkJLyogR2V0IGJhY2t1cCBzdWZmaXggbnVtYmVyICovCisgICAgaW50IGksIGosIGss IHgsIHN0YXRlLCBmbGFnOworCisgICAgaWYgKCFmbikJCQkJLyogV2F0Y2ggb3V0IGZvciBudWxs IHBvaW50ZXJzLiAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBpZiAoISpmbikJCQkJLyogQW5k IGVtcHR5IG5hbWVzLiAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIGZsYWcgPSBzdGF0ZSA9 IDA7CisgICAgZm9yIChpID0gKGludClzdHJsZW4oZm4pIC0gMTsgKCFmbGFnICYmIChpID4gMCkp OyBpLS0pIHsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJICBjYXNlIDA6CQkJLyogU3RhdGUgMCAtIGZp bmFsIGNoYXIgKi8KKwkgICAgaWYgKGZuW2ldID09ICd+JykJCS8qIElzIHRpbGRlICovCisJICAg ICAgc3RhdGUgPSAxOwkJLyogU3dpdGNoIHRvIG5leHQgc3RhdGUgKi8KKwkgICAgZWxzZQkJCS8q IE90aGVyd2lzZSAqLworCSAgICAgIGZsYWcgPSAxOwkJCS8qIFF1aXQgLSBubyBiYWNrdXAgc3Vm Zml4LiAqLworCSAgICBicmVhazsKKwkgIGNhc2UgMToJCQkvKiBTdGF0ZSAxIC0gZGlnaXRzICov CisJICAgIGlmIChmbltpXSA9PSAnficgICYmIGZuW2ktMV0gPT0gJy4nKSB7IC8qIEhhdmUgc3Vm Zml4ICovCisJCXJldHVybihhdG9pKCZmbltpKzFdKSk7CisJICAgIH0gZWxzZSBpZiAoZm5baV0g Pj0gJzAnICYmIGZuW2ldIDw9ICc5JykgeyAvKiBJbiBudW1iZXIgcGFydCAqLworCQljb250aW51 ZTsJCS8qIEtlZXAgZ29pbmcgKi8KKwkgICAgfSBlbHNlIHsJCQkvKiBTb21ldGhpbmcgZWxzZSAq LworCQlmbGFnID0gMTsJCS8qIE5vdCBhIGJhY2t1cCBzdWZmaXggLSBxdWl0LiAqLworCSAgICB9 CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKworCisvKiAgWiBOIEUgVyBOICAtLSAgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUg Z2l2ZW4gZmlsZSAgKi8KKworLyoKKyAgR2l2ZW4gdGhlIG5hbWUsIGZuLCBvZiBhIGZpbGUgdGhh dCBhbHJlYWR5IGV4aXN0cywgdGhpcyBmdW5jdGlvbiBidWlsZHMgYQorICBuZXcgbmFtZSBvZiB0 aGUgZm9ybSAiPG9sZG5hbWU+Ln48bj5+Iiwgd2hlcmUgPG9sZG5hbWU+IGlzIGFyZ3VtZW50IG5h bWUKKyAgKGZuKSwgYW5kIDxuPiBpcyBhIHZlcnNpb24gbnVtYmVyLCBvbmUgaGlnaGVyIHRoYW4g YW55IGV4aXN0aW5nIHZlcnNpb24KKyAgbnVtYmVyIGZvciB0aGF0IGZpbGUsIHVwIHRvIDk5OTk5 LiAgVGhpcyBmb3JtYXQgaXMgY29uc2lzdGVudCB3aXRoIHRoYXQgdXNlZAorICBieSBHTlUgRU1B Q1MuICBJZiB0aGUgY29uc3RydWN0ZWQgbmFtZSBpcyB0b28gbG9uZyBmb3IgdGhlIHN5c3RlbSdz IG1heGltdW0sCisgIGVub3VnaCBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgZnJvbSB0aGUgZW5k IG9mIDxmbj4gdG8gYWxsb3cgdGhlIHZlcnNpb24KKyAgbnVtYmVyIHRvIGZpdC4gIElmIG5vIGZy ZWUgdmVyc2lvbiBudW1iZXJzIGV4aXN0IGJldHdlZW4gMSBhbmQgOTk5OTksIGEKKyAgdmVyc2lv biBudW1iZXIgb2YgInh4eHgiIGlzIHVzZWQuICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3 IG5hbWUgaW4KKyAgYXJndW1lbnQgcy4KKyovCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgWk5FV05C TCA2MyAgICAgICAgICAgICAgICAgICAgICAvKiBOYW1lIGJ1ZmZlciBsZW5ndGggKi8KKyNkZWZp bmUgWk5FV05NRCAzICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXggZGlnaXRzIGZvciB2ZXJz aW9uIG51bWJlciAqLworI2Vsc2UKKyNkZWZpbmUgWk5FV05CTCBDS01BWFBBVEgKKyNkZWZpbmUg Wk5FV05NRCA0CisjZW5kaWYgLyogcGRwMTEgKi8KKworI2RlZmluZSBNQVhCVURJR0lUUyA1CisK K3N0YXRpYyBjaGFyIHpuZXdidWZbWk5FV05CTCsxMl07CisKK1ZPSUQKK3puZXduKGZuLHMpIGNo YXIgKmZuLCAqKnM7IHsKKyAgICBjaGFyICogYnVmOwkJCQkvKiBQb2ludGVyIHRvIGJ1ZmZlciBm b3IgbmV3IG5hbWUgKi8KKyAgICBjaGFyICogeHAsICogbmFtZXBhcnQgPSBOVUxMOyAgICAgICAv KiBQb2ludGVyIHRvIGZpbGVuYW1lIHBhcnQgKi8KKyAgICBzdHJ1Y3QgemZuZnAgKiBmbmZwOyAg ICAgICAgICAgICAgICAvKiB6bmZxZnAoKSByZXN1bHQgc3RydWN0IHBvaW50ZXIgKi8KKyAgICBp bnQgZCA9IDAsIHQsIGZubGVuLCBidWZsZW47CisgICAgaW50IG4sIGksIGssIGZsYWcsIHN0YXRl OworICAgIGludCBtYXggPSBNQVhOQU1MRU47ICAgICAgICAgICAgICAgIC8qIE1heGltdW0gbmFt ZSBsZW5ndGggKi8KKyAgICBjaGFyICogZG5hbWUgPSBOVUxMOworCisgICAgYnVmID0gem5ld2J1 ZjsKKyAgICAqcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXpl IHJldHVybiB2YWx1ZSAqLworICAgIGlmICghZm4pIGZuID0gIiI7ICAgICAgICAgICAgICAgICAg IC8qIENoZWNrIGZpbGVuYW1lIGFyZ3VtZW50ICovCisgICAgaSA9IHN0cmxlbihmbik7CisKKy8q IElmIGluY29taW5nIGZpbGUgYWxyZWFkeSBoYXMgYSBiYWNrdXAgc3VmZml4LCByZW1vdmUgaXQu ICovCisvKiBUaGVuIHdlJ2xsIHRhY2sgYSBuZXcgb24gbGF0ZXIsIHdoaWNoIHdpbGwgYmUgdGhl IGhpZ2hlc3QgZm9yIHRoaXMgZmlsZS4gKi8KKworICAgIGlmIChpIDw9IG1heCAmJiBpID4gMCAm JiBmbltpLTFdID09ICd+JykgeworCWNoYXIgKiBwOworCWktLTsKKwlkZWJ1ZyhGMTExLCJ6bmV3 biBzdWZmaXggcmVtb3ZhbCIsZm4saSk7CisJaWYgKChkbmFtZSA9IChjaGFyICopbWFsbG9jKGkr MSkpKSB7CisJICAgIGNrc3RybmNweShkbmFtZSxmbixpKzEpOworCSAgICBwID0gZG5hbWU7CisJ ICAgIGZvciAoZmxhZyA9IHN0YXRlID0gMDsgKCFmbGFnICYmIChpID4gMCkpOyBpLS0pIHsKKwkJ c3dpdGNoIChzdGF0ZSkgeworCQkgIGNhc2UgMDoJCS8qIFN0YXRlIDAgLSBmaW5hbCBjaGFyICov CisJCSAgICBpZiAocFtpXSA9PSAnficpCS8qIElzIHRpbGRlICovCisJCSAgICAgIHN0YXRlID0g MTsJLyogU3dpdGNoIHRvIG5leHQgc3RhdGUgKi8KKwkJICAgIGVsc2UJCS8qIE90aGVyd2lzZSAq LworCQkgICAgICBmbGFnID0gMTsJCS8qIFF1aXQgLSBubyBiYWNrdXAgc3VmZml4LiAqLworCQkg ICAgYnJlYWs7CisJCSAgY2FzZSAxOgkJLyogU3RhdGUgMSAtIGRpZ2l0cyAqLworCQkgICAgaWYg KHBbaV0gPT0gJ34nICAmJiBwW2ktMV0gPT0gJy4nKSB7IC8qIEhhdmUgc3VmZml4ICovCisJCQlw W2ktMV0gPSBOVUw7CS8qIFRyaW0gaXQgKi8KKwkJCWZuID0gZG5hbWU7CisJCQlkZWJ1ZyhGMTEx LCJ6bmV3biBzdWZmaXggcmVtb3ZhbCAyIixmbixpKTsKKwkJCWZsYWcgPSAxOwkvKiBkb25lICov CisJCSAgICB9IGVsc2UgaWYgKHBbaV0gPj0gJzAnICYmIHBbaV0gPD0gJzknKSB7IC8qIE51bWJl ciBwYXJ0ICovCisJCQljb250aW51ZTsJLyogS2VlcCBnb2luZyAqLworCQkgICAgfSBlbHNlIHsJ CS8qIFNvbWV0aGluZyBlbHNlICovCisJCQlmbGFnID0gMTsJLyogTm90IGEgYmFja3VwIHN1ZmZp eCAtIHF1aXQuICovCisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQorICAg IH0KKyAgICBpZiAoKGZubGVuID0gc3RybGVuKGZuKSkgPCAxKSB7CS8qIEdldCBsZW5ndGggKi8K KwlpZiAoZG5hbWUpIGZyZWUoZG5hbWUpOworCXJldHVybjsKKyAgICB9CisgICAgZGVidWcoRjEx MSwiem5ld24iLGZuLGZubGVuKTsKKworICAgIGRlYnVnKEYxMDEsInpuZXduIG1heCAxIiwiIixt YXgpOworICAgIGlmIChtYXggPCAxNCkgbWF4ID0gMTQ7ICAgICAgICAgICAgIC8qIE1ha2UgbWF4 IHJlYXNvbmFibGUgZm9yIGFueSBVTklYICovCisgICAgaWYgKG1heCA+IFpORVdOQkwpIG1heCA9 IFpORVdOQkw7CisgICAgZGVidWcoRjEwMSwiem5ld24gbWF4IDIiLCIiLG1heCk7CisKKyAgICBp ZiAoKGZuZnAgPSB6Zm5xZnAoZm4sIFpORVdOQkwsIGJ1ZikpKSB7IC8qIEdldCBmdWxseSBxdWFs aWZpZWQgbmFtZSAqLworICAgICAgICBuYW1lcGFydCA9IGZuZnAtPmZuYW1lOyAgICAgICAgIC8q IElzb2xhdGUgdGhlIGZpbGVuYW1lICovCisgICAgICAgIGsgPSBzdHJsZW4oZm4pOyAgICAgICAg ICAgICAgICAgLyogTGVuZ3RoIG9mIG5hbWUgcGFydCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJ6 bmV3biBuYW1lcGFydCIsbmFtZXBhcnQsayk7CisgICAgfSBlbHNlIHsKKwlpZiAoZG5hbWUpIGZy ZWUoZG5hbWUpOworCXJldHVybjsKKyAgICB9CisgICAgYnVmbGVuID0gZm5mcC0+bGVuOyAgICAg ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGZ1bGx5IHF1YWxpZmllZCBuYW1lICovCisgICAgZGVi dWcoRjExMSwiem5ld24gbGVuIixidWYsYnVmbGVuKTsKKworICAgIGlmIChrICsgTUFYQlVESUdJ VFMgKyAzIDwgbWF4KSB7ICAgIC8qIEJhY2t1cCBuYW1lIGZpdHMgLSBubyBvdmVyZmxvdyAqLwor CS8qIE1ha2UgcGF0dGVybiBmb3IgYmFja3VwIG5hbWVzICovCisgICAgICAgIGNrc3RybmNweShi dWYrYnVmbGVuLCIufip+IixaTkVXTkJMKzEyLWJ1Zmxlbik7CisgICAgICAgIG4gPSBuenhwYW5k KGJ1ZixaWF9GSUxPTkxZKTsgICAgLyogRXhwYW5kIHRoZSBwYXR0ZXJuICovCisgICAgICAgIGRl YnVnKEYxMTEsInpuZXduIEEgbWF0Y2hlcyIsYnVmLG4pOworICAgICAgICB3aGlsZSAobi0tID4g MCkgeyAgICAgICAgICAgICAgIC8qIEZpbmQgYW55IGV4aXN0aW5nIG5hbWUufm5+IGZpbGVzICov CisgICAgICAgICAgICB4cCA9ICptdGNocHRyKys7ICAgICAgICAgICAgLyogUG9pbnQgYXQgbWF0 Y2hpbmcgbmFtZSAqLworICAgICAgICAgICAgdCA9IGF0b2koeHArYnVmbGVuKzIpOyAgICAgIC8q IEdldCBudW1iZXIgKi8KKyAgICAgICAgICAgIGlmICh0ID4gZCkgZCA9IHQ7ICAgICAgICAgICAv KiBTYXZlIGQgPSBoaWdoZXN0IHZlcnNpb24gbnVtYmVyICovCisgICAgICAgIH0KKyAgICAgICAg c3ByaW50ZihidWYrYnVmbGVuLCIufiVkfiIsZCsxKTsgLyogWWVzLCBtYWtlICJuYW1lLn48ZCsx Pn4iICovCisgICAgICAgIGRlYnVnKEYxMTAsInpuZXduIEEgbmV3bmFtZSIsYnVmLDApOworICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2t1cCBuYW1lIHdvdWxk IGJlIHRvbyBsb25nICovCisgICAgICAgIGludCB4bGVuOyAgICAgICAgICAgICAgICAgICAgICAg LyogU28gd2UgaGF2ZSB0byBlYXQgYmFjayBpbnRvIGl0ICovCisgICAgICAgIGludCBkZWx0YTsK KyAgICAgICAgY2hhciBidWYyW1pORVdOQkwrMTJdOworCisgICAgICAgIGRlbHRhID0gbWF4IC0g azsKKyAgICAgICAgZGVidWcoRjEwMSwiem5ld24gQiBkZWx0YSIsIiIsZGVsdGEpOworCisgICAg ICAgIGZvciAoaSA9IE1BWEJVRElHSVRTOyBpID4gMDsgaS0tKSB7IC8qIEluIHRoaXMgY2FzZSB0 aGUgZm9ybWF0IG9mICovCisgICAgICAgICAgICBja3N0cm5jcHkoYnVmMixidWYsWk5FV05CTCsx Mik7IC8qIHRoZSBiYWNrdXAgbmFtZSBkZXBlbmRzIG9uICovCisgICAgICAgICAgICB4bGVuID0g YnVmbGVuIC0gaSAtIDMgKyBkZWx0YTsgIC8qIGhvdyBtYW55IGRpZ2l0cyBhcmUgaW4gdGhlICov CisgICAgICAgICAgICBja3N0cm5jcHkoYnVmMit4bGVuLCIufip+IixaTkVXTkJMKzEyLXhsZW4p OyAvKiBiYWNrdXAgbnVtYmVyICovCisgICAgICAgICAgICBuID0gbnp4cGFuZChidWYyLFpYX0ZJ TE9OTFkpOworICAgICAgICAgICAgZGVidWcoRjExMSwiem5ld24gQiBtYXRjaGVzIixidWYyLG4p OworICAgICAgICAgICAgaWYgKG4gPiAwKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorICAgICAgICB3aGlsZSAobi0tID4gMCkgeyAgICAgICAgICAgICAgIC8qIEZpbmQgYW55IGV4 aXN0aW5nIG5hbWUufm5+IGZpbGVzICovCisgICAgICAgICAgICB4cCA9ICptdGNocHRyKys7ICAg ICAgICAgICAgLyogUG9pbnQgYXQgbWF0Y2hpbmcgbmFtZSAqLworICAgICAgICAgICAgdCA9IGF0 b2koeHAreGxlbisyKTsgICAgICAgIC8qIEdldCBudW1iZXIgKi8KKyAgICAgICAgICAgIGlmICh0 ID4gZCkgZCA9IHQ7ICAgICAgICAgICAvKiBTYXZlIGQgPSBoaWdoZXN0IHZlcnNpb24gbnVtYmVy ICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKGQgPiAwKSAgICAgICAgICAgICAgICAgICAgICAv KiBJZiB0aGUgb2RvbWV0ZXIgdHVybmVkIG92ZXIuLi4gKi8KKyAgICAgICAgICBpZiAoKGQgJSAx MCkgPT0gOSkgICAgICAgICAgICAvKiBiYWNrIHVwIG9uZSBzcGFjZS4gKi8KKyAgICAgICAgICAg IHhsZW4tLTsKKyAgICAgICAgc3ByaW50ZihidWYyK3hsZW4sIi5+JWR+IixkKzEpOyAvKiBUaGlz IGp1c3QgZml0cyAqLworICAgICAgICBja3N0cm5jcHkoYnVmLGJ1ZjIsWk5FV05CTCsxMik7CS8q ICh3ZSBjb3VsZCBiZSBtb3JlIGNsZXZlciBoZXJlLi4uKSAqLworICAgICAgICBkZWJ1ZyhGMTEw LCJ6bmV3biBCIG5ldyBuYW1lIixidWYsMCk7CisgICAgfQorICAgICpzID0gYnVmOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIG5ldyBuYW1lICovCisgICAgY2tfem5ld24g PSBkKzE7ICAgICAgICAgICAgICAgICAgICAgLyogQWxzbyBtYWtlIGl0IGF2YWlsYWJsZSBnbG9i YWxseSAqLworICAgIGlmIChkbmFtZSkgZnJlZShkbmFtZSk7CisgICAgcmV0dXJuOworfQorCisv KiAgWiBSIEUgTiBBIE0gRSAgLS0gIFJlbmFtZSBhIGZpbGUgICovCisvKgorICAgQ2FsbCB3aXRo IG9sZCBhbmQgbmV3IG5hbWVzLgorICAgSWYgbmV3IG5hbWUgaXMgdGhlIG5hbWUgb2YgYSBkaXJl Y3RvcnksIHRoZSAnb2xkJyBmaWxlIGlzIG1vdmVkIHRvCisgICB0aGF0IGRpcmVjdG9yeS4KKyAg IFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorKi8KK2ludAorenJlbmFtZShv bGQsbmV3KSBjaGFyICpvbGQsICpuZXc7IHsKKyAgICBjaGFyICpwLCAqczsKKyAgICBpbnQgeDsK KworICAgIGlmICghb2xkKSBvbGQgPSAiIjsKKyAgICBpZiAoIW5ldykgbmV3ID0gIiI7CisgICAg ZGVidWcoRjExMCwienJlbmFtZSBvbGQiLG9sZCwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ6cmVuYW1l IG5ldyIsbmV3LDApOworICAgIGlmICghKm9sZCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoISpuZXcp IHJldHVybigtMSk7CisKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKyAgICBpZiAoaW5z ZXJ2ZXIgJiYgaXNndWVzdCkKKyAgICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogQ0tfTE9HSU4g Ki8KKyNlbmRpZiAvKiBJS1NEICovCisKKyNpZmRlZiBDS1JPT1QKKyAgICBkZWJ1ZyhGMTExLCJ6 cmVuYW1lIHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQpOworICAgIGlmIChja3Jvb3RzZXQpIHsK KwlpZiAoIXppbnJvb3Qob2xkKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJ6cmVuYW1lIG9sZDogc2V0 cm9vdCB2aW9sYXRpb24iLG9sZCwwKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJaWYgKCF6aW5y b290KG5ldykpIHsKKwkgICAgZGVidWcoRjExMCwienJlbmFtZSBuZXc6IHNldHJvb3QgdmlvbGF0 aW9uIixuZXcsMCk7CisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBDS1JP T1QgKi8KKworICAgIHAgPSBOVUxMOworICAgIHMgPSBuZXc7CisKKyAgICBpZiAoaXNkaXIobmV3 KSkgeworICAgICAgICBjaGFyICpxID0gTlVMTDsKKyAgICAgICAgeCA9IHN0cmxlbihuZXcpOwor ICAgICAgICBpZiAoIShwID0gbWFsbG9jKHN0cmxlbihuZXcpICsgc3RybGVuKG9sZCkgKyAyKSkp CisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgc3RyY3B5KHAsbmV3KTsgICAgICAgICAg ICAgICAgICAvKiAoc2FmZSkgRGlyZWN0b3J5IHBhcnQgKi8KKyAgICAgICAgaWYgKCFJU0RJUlNF UCgqKG5ldyt4LTEpKSkgICAgICAvKiBTZXBhcmF0b3IsIGlmIG5lZWRlZCAqLworICAgICAgICAg IHN0cmNhdChwLCIvIik7CQkvKiAoc2FmZSkgKi8KKyAgICAgICAgenN0cmlwKG9sZCwmcSk7ICAg ICAgICAgICAgICAgICAvKiBTdHJpcCBwYXRoIHBhcnQgZnJvbSBvbGQgbmFtZSAqLworICAgICAg ICBzdHJjYXQocCxxKTsgICAgICAgICAgICAgICAgICAgIC8qIGNhdCB0byBuZXcgZGlyZWN0b3J5 IChzYWZlKSAqLworICAgICAgICBzID0gcDsKKyAgICAgICAgZGVidWcoRjExMCwienJlbmFtZSBk aXIiLHMsMCk7CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgZWxzZSBkZWJ1ZyhGMTEwLCJ6cmVu YW1lIG5vIGRpciIscywwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgSUtTRAorICAg IGlmIChpbnNlcnZlciAmJiAoIUVOQUJMRUQoZW5fZGVsKSkpIHsKKwlpZiAoemNoa2kocykgPiAt MSkJCS8qIERlc3RpbmF0aW9uIGZpbGUgZXhpc3RzPyAqLworCSAgcmV0dXJuKC0xKTsKKyAgICB9 CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgeCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmV0dXJuIGNvZGUuICovCisjaWZkZWYgUkVOQU1FCisvKiBBdG9taWMsIHByZWZl cnJlZCwgdXNlcyBhIHNpbmdsZSBzeXN0ZW0gY2FsbCwgcmVuYW1lKCksIGlmIGF2YWlsYWJsZS4g Ki8KKyAgICB4ID0gcmVuYW1lKG9sZCxzKTsKKyAgICBkZWJ1ZyhGMTExLCJ6cmVuYW1lIHJlbmFt ZSgpIixvbGQseCk7CisgICAgaWYgKHgpIHggPSAtMTsKKyNlbmRpZiAvKiBSRU5BTUUgKi8KKwor ICAgIC8qIElmIHJlbmFtZSgpIGZhaWxlZCBvciBub3QgYXZhaWxhYmxlIHRyeSBsaW5rKCkvdW5s aW5rKCkgKi8KKworICAgIGlmICh4IDwgMCkgeworCWlmICh6Y2hrbyhvbGQpID4gLTEpIHsJCS8q IFJlcXVpcmVzIHdyaXRlIGFjY2VzcyB0byBvcmlnbmFsICovCisJICAgIHggPSBsaW5rKG9sZCxz KTsKKwkgICAgZGVidWcoRjExMSwienJlbmFtZSBsaW5rKCkiLG9sZCx4KTsKKwkgICAgaWYgKHgg PiAtMSkgewkJLyogTWFrZSBhIGxpbmsgd2l0aCB0aGUgbmV3IG5hbWUuICovCisJCXggPSB1bmxp bmsob2xkKTsKKwkJZGVidWcoRjExMSwienJlbmFtZSB1bmxpbmsoKSIsb2xkLHgpOworCSAgICB9 CisJICAgIC8qIElmIGxpbmsvdW5saW5rIGZhaWxlZCBjb3B5IGFuZCBkZWxldGUgKi8KKwkgICAg aWYgKHggPCAwKSB7CisJCXggPSB6Y29weShvbGQscyk7CisJCWRlYnVnKEYxMTEsInpyZW5hbWUg emNvcHkoKSIsb2xkLHgpOworCQlpZiAoeCA+IC0xKSB7CisJCSAgICB4ID0gemRlbGV0KG9sZCk7 CisJCSAgICBkZWJ1ZyhGMTExLCJ6cmVuYW1lIHpkZWxldCgpIixvbGQseCk7CisJCX0KKwkgICAg fQorCX0KKyAgICB9CisgICAgZnVsbG5hbWVbMF0gPSAnXDAnOwkJCS8qIENsZWFyIHRoaXMgb3V0 IGZvciBuZXh0IHRpbWUuICovCisKKyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cg Pj0gU1lTTEdfRkMgJiYgY2t4bG9nZ2luZykgeworICAgICAgICB6Zm5xZnAob2xkLENLTUFYUEFU SCxmdWxsbmFtZSk7CisgICAgICAgIHRtcDJbMF0gPSAnXDAnOworICAgICAgICB6Zm5xZnAocyxD S01BWFBBVEgsdG1wMik7CisgICAgICAgIGlmICh4ID4gLTEpCisgICAgICAgICAgc3lzbG9nKExP R19JTkZPLCJmaWxlW10gJXM6IHJlbmFtZWQgdG8gJXMgb2siLCBmdWxsbmFtZSwgdG1wMik7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICBzeXNsb2coTE9HX0lORk8sImZpbGVbXSAlczogcmVuYW1l IHRvICVzIGZhaWxlZCAoJW0pIixmdWxsbmFtZSx0bXAyKTsKKyAgICB9CisjZW5kaWYgLyogQ0tT WVNMT0cgKi8KKworICAgIGlmIChwKSBmcmVlKHApOworICAgIHJldHVybih4KTsKK30KKworLyog IFogQyBPIFAgWSAgLS0gIENvcHkgYSBzaW5nbGUgZmlsZS4gKi8KKy8qCisgIENhbGwgd2l0aCBz b3VyY2UgYW5kIGRlc3RpbmF0aW9uIG5hbWVzLgorICBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVj dG9yeSwgdGhlIHNvdXJjZSBmaWxlIGlzCisgIGNvcGllZCB0byB0aGF0IGRpcmVjdG9yeSB3aXRo IGl0cyBvcmlnaW5hbCBuYW1lLgorICBSZXR1cm5zOgorICAgMCBvbiBzdWNjZXNzLgorICA8MCBv biBmYWlsdXJlOgorICAtMiA9IHNvdXJjZSBmaWxlIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZS4KKyAg LTMgPSBzb3VyY2UgZmlsZSBub3QgZm91bmQuCisgIC00ID0gcGVybWlzc2lvbiBkZW5pZWQuCisg IC01ID0gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgZmlsZS4KKyAgLTYgPSBp L28gZXJyb3IuCisgIC0xID0gb3RoZXIgZXJyb3IuCisqLworaW50Cit6Y29weShzb3VyY2UsZGVz dGluYXRpb24pIGNoYXIgKnNvdXJjZSwgKmRlc3RpbmF0aW9uOyB7CisgICAgY2hhciAqc3JjLCAq ZHN0OwkJCS8qIExvY2FsIHBvaW50ZXJzIHRvIGZpbGVuYW1lcyAqLworICAgIGludCB4LCB5LCBy YzsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlcnMgKi8KKyAgICBpbnQgaW4gPSAtMSwg b3V0ID0gLTE7ICAgICAgICAgICAgICAvKiBpL28gZmlsZSBkZXNjcmlwdG9ycyAqLworICAgIHN0 cnVjdCBzdGF0IHNyY2J1ZjsgICAgICAgICAgICAgICAgIC8qIFNvdXJjZSBmaWxlIGluZm8gYnVm ZmVyICovCisgICAgaW50IHBlcm1zOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0 IGZpbGUgcGVybWlzc2lvbnMgKi8KKyAgICBjaGFyIGJ1ZlsxMDI0XTsgICAgICAgICAgICAgICAg ICAgICAvKiBGaWxlIGNvcHlpbmcgYnVmZmVyICovCisKKyAgICBpZiAoIXNvdXJjZSkgc291cmNl ID0gIiI7CisgICAgaWYgKCFkZXN0aW5hdGlvbikgZGVzdGluYXRpb24gPSAiIjsKKworICAgIGRl YnVnKEYxMTAsInpjb3B5IHNyYyBhcmciLHNvdXJjZSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ6Y29w eSBkc3QgYXJnIixkZXN0aW5hdGlvbiwwKTsKKworICAgIGlmICghKnNvdXJjZSkgcmV0dXJuKC0x KTsKKyAgICBpZiAoISpkZXN0aW5hdGlvbikgcmV0dXJuKC0xKTsKKworI2lmZGVmIElLU0QKKyNp ZmRlZiBDS19MT0dJTgorICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQorICAgICAgcmV0dXJu KC00KTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVm IENLUk9PVAorICAgIGRlYnVnKEYxMTEsInpjb3B5IHNldHJvb3QiLGNrcm9vdCxja3Jvb3RzZXQp OworICAgIGlmIChja3Jvb3RzZXQpIHsKKwlpZiAoIXppbnJvb3Qoc291cmNlKSkgeworCSAgICBk ZWJ1ZyhGMTEwLCJ6Y29weSBzb3VyY2U6IHNldHJvb3QgdmlvbGF0aW9uIixzb3VyY2UsMCk7CisJ ICAgIHJldHVybigtMSk7CisJfQorCWlmICghemlucm9vdChkZXN0aW5hdGlvbikpIHsKKwkgICAg ZGVidWcoRjExMCwiemNvcHkgZGVzdGluYXRpb246IHNldHJvb3QgdmlvbGF0aW9uIixkZXN0aW5h dGlvbiwwKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIENLUk9PVCAq LworCisgICAgc3JjID0gc291cmNlOworICAgIGRzdCA9IGRlc3RpbmF0aW9uOworCisgICAgaWYg KHN0YXQoc3JjLCZzcmNidWYpID09IDApIHsgICAgICAgLyogR2V0IHNvdXJjZSBmaWxlIGluZm8g Ki8KKyAgICAgICAgc3RydWN0IHN0YXQgZHN0YnVmOyAgICAgICAgICAgICAvKiBEZXN0aW5hdGlv biBmaWxlIGluZm8gYnVmZmVyICovCisJZGVidWcoRjEwMSwiU1RBVCIsIiIsNik7CisgICAgICAg IGlmIChzdGF0KGRzdCwmZHN0YnVmKSA9PSAwKSB7CisJICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIi LDcpOworICAgICAgICAgICAgaWYgKHNyY2J1Zi5zdF9kZXYgPT0gZHN0YnVmLnN0X2RldikKKyAg ICAgICAgICAgICAgaWYgKHNyY2J1Zi5zdF9pbm8gPT0gZHN0YnVmLnN0X2lubykgeworICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMCwiemNvcHkgZmlsZXMgaWRlbnRpY2FsOiBzdGF0KCkiLCIi LDApOworICAgICAgICAgICAgICAgICAgcmV0dXJuKC01KTsKKyAgICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhdCgp IGZhaWxlZC4uLiAqLworCWRlYnVnKEYxMDEsIlNUQVQiLCIiLDgpOworICAgICAgICBkZWJ1ZyhG MTExLCJzb3VyY2UgZmlsZSBub3QgZm91bmQiLHNyYyxlcnJubyk7CisgICAgICAgIHJldHVybigt Myk7CisgICAgfQorICAgIGZ1bGxuYW1lWzBdID0gJ1wwJzsgICAgICAgICAgICAgICAgIC8qIEdl dCBmdWxsIHBhdGhuYW1lcyAqLworICAgIGlmICh6Zm5xZnAoc291cmNlLENLTUFYUEFUSCxmdWxs bmFtZSkpCisgICAgICBzcmMgPSBmdWxsbmFtZTsKKyAgICBkZWJ1ZyhGMTEwLCJ6Y29weSBzcmMi LHNyYywwKTsKKyAgICB0bXAyWzBdID0gJ1wwJzsKKyAgICBpZiAoemZucWZwKGRlc3RpbmF0aW9u LENLTUFYUEFUSCx0bXAyKSkKKyAgICAgIGRzdCA9IHRtcDI7CisgICAgZGVidWcoRjExMCwiemNv cHkgZHN0IDEiLGRzdCwwKTsKKyAgICBpZiAoIXN0cmNtcChzcmMsZHN0KSkgeyAgICAgICAgICAg ICAvKiBTcmMgYW5kIGRzdCBhcmUgc2FtZSBmaWxlPyAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJ6 Y29weSBmaWxlcyBpZGVudGljYWw6IHN0cmNtcCgpIiwiIiwwKTsgLyogVGhpcy4uLiAqLworICAg ICAgICByZXR1cm4oLTUpOyAgICAgICAgICAgICAgICAgICAgIC8qIHNob3VsZCBub3QgaGFwcGVu LiAqLworICAgIH0KKyAgICBpZiAoaXNkaXIoc3JjKSkgeyAgICAgICAgICAgICAgICAgICAvKiBT b3VyY2UgZmlsZSBpcyBhIGRpcmVjdG9yeT8gKi8KKyAgICAgICAgZGVidWcoRjExMCwiemNvcHkg c291cmNlIGlzIGRpcmVjdG9yeSIsc3JjLDApOworICAgICAgICByZXR1cm4oLTIpOyAgICAgICAg ICAgICAgICAgICAgIC8qIEZhaWwgKi8KKyAgICB9CisgICAgaWYgKGlzZGlyKGRzdCkpIHsgICAg ICAgICAgICAgICAgICAgLyogRGVzdGluYXRpb24gaXMgYSBkaXJlY3Rvcnk/ICovCisgICAgICAg IGNoYXIgKnEgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogWWVzLCBhZGQgZmlsZW5hbWUgdG8g aXQuICovCisgICAgICAgIHggPSBzdHJsZW4oZHN0KTsKKwlpZiAoeCA8IDEpIHJldHVybigtMSk7 CisgICAgICAgIGlmICghSVNESVJTRVAoKihkc3QreC0xKSkpIHsgICAgLyogQWRkIHNlcGFyYXRv ciBpZiBuZWVkZWQgKi8KKyAgICAgICAgICAgIHRtcDJbeCsrXSA9ICcvJzsKKyAgICAgICAgICAg IHRtcDJbeF0gPSAnXDAnOworICAgICAgICB9CisJZGVidWcoRjExMSwiemNvcHkgZHN0IDIiLGRz dCx4KTsKKyAgICAgICAgenN0cmlwKHNyYywmcSk7ICAgICAgICAgICAgICAgICAvKiBTdHJpcCBw YXRoIHBhcnQgZnJvbSBvbGQgbmFtZSAqLworICAgICAgICBja3N0cm5jcHkodG1wMit4LHEsQ0tN QVhQQVRILXgpOyAvKiBDb25jYXRlbmF0ZSBpdCB0byBuZXcgbmFtZSAqLworICAgIH0KKyAgICBk ZWJ1ZyhGMTEwLCJ6Y29weSBkc3QgMyIsZHN0LDApOworCisjaWZkZWYgSUtTRAorICAgIGlmIChp bnNlcnZlciAmJiAoIUVOQUJMRUQoZW5fZGVsKSkpIHsKKwlpZiAoemNoa2koZHN0KSA+IC0xKQkJ LyogRGVzdGluYXRpb24gZmlsZSBleGlzdHM/ICovCisJICByZXR1cm4oLTQpOworICAgIH0KKyNl bmRpZiAvKiBJS1NEICovCisKKyAgICBwZXJtcyA9IHVtYXNrKDApOyAgICAgICAgICAgICAgICAg ICAvKiBHZXQgdXNlcidzIHVtYXNrICovCisgICAgdW1hc2socGVybXMpOwkJCS8qIFB1dCBpdCBi YWNrISAqLworICAgIHBlcm1zIF49IDA3Nzc7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZsaXAg dGhlIGJpdHMgKi8KKyAgICBwZXJtcyAmPSAwNjY2OyAgICAgICAgICAgICAgICAgICAgICAvKiBa ZXJvIGV4ZWN1dGUgYml0cyBmcm9tIHVtYXNrICovCisgICAgcGVybXMgfD0gKHNyY2J1Zi5zdF9t b2RlICYgMDExMSk7ICAgLyogT1IgaW4gc291cmNlIGZpbGUncyBleGVjdXRlIGJpdHMgKi8KKyAg ICByYyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHJldHVybiBj b2RlICovCisgICAgZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQg ZXJybm8gKi8KKyAgICBpbiA9IG9wZW4oc3JjLCBPX1JET05MWSwgMCk7ICAgICAgICAvKiBPcGVu IHNvdXJjZSBmaWxlICovCisgICAgZGVidWcoRjExMSwiemNvcHkgb3BlbiBzb3VyY2UiLHNyYyxp bik7CisgICAgaWYgKGluID4gLTEpIHsgICAgICAgICAgICAgICAgICAgICAgLyogSWYgb3Blbi4u LiAqLworCS8qIE9wZW4gZGVzdGluYXRpb24gZmlsZSAqLworI2lmZGVmIE9fVFJVTkMKKyAgICAg ICAgb3V0ID0gb3Blbihkc3QsIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQywgcGVybXMpOworI2Vs c2UKKyAgICAgICAgb3V0ID0gb3Blbihkc3QsIE9fV1JPTkxZfE9fQ1JFQVQsIHBlcm1zKTsKKyNl bmRpZiAvKiBPX1RSVU5DICovCisgICAgICAgIGRlYnVnKEYxMTEsInpjb3B5IG9wZW4gZGVzdCIs ZHN0LG91dCk7CisgICAgICAgIGlmIChvdXQgPiAtMSkgeyAgICAgICAgICAgICAgICAgLyogSWYg b3Blbi4uLiAqLworICAgICAgICAgICAgd2hpbGUgKCh4ID0gcmVhZChpbixidWYsMTAyNCkpID4g MCkgeyAvKiBDb3B5IGluIDFLIGJsb2NrcyAqLworICAgICAgICAgICAgICAgIHkgPSB3cml0ZShv dXQsYnVmLHgpOworICAgICAgICAgICAgICAgIGlmICh5IDwgMCkgeyAgICAgICAgICAgIC8qIE9u IHdyaXRlIGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgeCA9IC0xOworICAgICAgICAg ICAgICAgICAgICByYyA9IC02OyAgICAgICAgICAgIC8qIEluZGljYXRlIGkvbyBlcnJvciAqLwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6Y29weSBmaW5hbCByZWFkIiwiIix4KTsKKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsInpjb3B5IGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAg ICByYyA9ICh4ID09IDApID8gMCA6IC02OyAgICAgLyogSW4gY2FzZSBvZiByZWFkIGZhaWx1cmUg Ki8KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaW4gPiAtMSkgY2xvc2UoaW4pOyAgICAgICAg ICAgICAvKiBDbG9zZSBmaWxlcyAqLworICAgIGlmIChvdXQgPiAtMSkgY2xvc2Uob3V0KTsKKyAg ICBpZiAocmMgPT0gLTEpIHsgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgcmV0dXJuIGNvZGUg Ki8KKyAgICAgICAgc3dpdGNoIChlcnJubykgeworICAgICAgICAgIGNhc2UgRU5PRU5UOiByYyA9 IC0zOyBicmVhazsKKyAgICAgICAgICBjYXNlIEVBQ0NFUzogcmMgPSAtNDsgYnJlYWs7CisgICAg ICAgICAgY2FzZSBFSU86ICAgIHJjID0gLTY7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBD S1NZU0xPRworICAgIGlmIChyYyA+IC0xICYmIGNreHN5c2xvZyA+PSBTWVNMR19GQyAmJiBja3hs b2dnaW5nKSB7CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICBzeXNsb2coTE9HX0lORk8sImZp bGVbXSAlczogY29weSB0byAlcyBmYWlsZWQgKCVtKSIsIGZ1bGxuYW1lLCB0bXAyKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywiZmlsZVtdICVzOiBjb3B5IHRvICVz IG9rIiwgZnVsbG5hbWUsIHRtcDIpOworICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisg ICAgcmV0dXJuKHJjKTsKK30KKworLyogIFogUyBBIFQgVCBSICovCisvKgorIEZpbGxzIGluIGEg S2VybWl0IGZpbGUgYXR0cmlidXRlIHN0cnVjdHVyZSBmb3IgdGhlIGZpbGUgd2hpY2ggaXMgdG8g YmUgc2VudC4KKyBSZXR1cm5zIDAgb24gc3VjY2VzcyB3aXRoIHRoZSBzdHJ1Y3R1cmUgZmlsbGVk IGluLCBvciAtMSBvbiBmYWlsdXJlLgorIElmIGFueSBzdHJpbmcgbWVtYmVyIGlzIG51bGwsIHRo ZW4gaXQgc2hvdWxkIGJlIGlnbm9yZWQuCisgSWYgYW55IG51bWVyaWMgbWVtYmVyIGlzIC0xLCB0 aGVuIGl0IHNob3VsZCBiZSBpZ25vcmVkLgorKi8KKyNpZmRlZiBDS19QRVJNUworCisjaWZkZWYg Q0tfR1BFUk1TCisjdW5kZWYgQ0tfR1BFUk1TCisjZW5kaWYgLyogQ0tfR1BFUk1TICovCisKKyNp ZmRlZiBVTklYCisjaWZuZGVmIFNfSVJVU1IKKyNkZWZpbmUgU19JUlVTUiAwNDAwCisjZW5kaWYg LyogU19JUlVTUiAqLworI2lmbmRlZiBTX0lXVVNSCisjZGVmaW5lIFNfSVhVU1IgMDIwMAorI2Vu ZGlmIC8qIFNfSVdVU1IgKi8KKyNpZm5kZWYgU19JWFVTUgorI2RlZmluZSBTX0lYVVNSIDAxMDAK KyNlbmRpZiAvKiBTX0lYVVNSICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgU19JUlVT UgorI2lmZGVmIFNfSVdVU1IKKyNpZmRlZiBTX0lYVVNSCisjZGVmaW5lIENLX0dQRVJNUworI2Vu ZGlmIC8qIFNfSVhVU1IgKi8KKyNlbmRpZiAvKiBTX0lXVVNSICovCisjZW5kaWYgLyogU19JUlVT UiAqLworCitzdGF0aWMgY2hhciBncGVybXNbMl07CisKKyNlbmRpZiAvKiBDS19HUEVSTVMgKi8K Kworc3RhdGljIGNoYXIgbHBlcm1zWzI0XTsKKworI2lmZGVmIENLX1BFUk1TCitzdGF0aWMgY2hh ciB4bHBlcm1zWzI0XTsKKworLyogIFogUyBFIFQgUCBFIFIgTSAgLS0gIFNldCBwZXJtaXNzaW9u cyBvZiBhIGZpbGUgICovCisKK2ludAorenNldHBlcm0oZixjb2RlKSBjaGFyICogZjsgaW50IGNv ZGU7IHsKKyAgICBpbnQgeDsKKyNpZmRlZiBDS19TQ08zMlY0CisgICAgbW9kZV90IG1hc2s7Cisj ZWxzZQorICAgIGludCBtYXNrOworI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KKyAgICBtYXNrID0g Y29kZTsKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgZ3Vlc3QpIHsKKwlkZWJ1ZyhGMTEwLCJ6c2V0cGVy bSBndWVzdCIsZiwwKTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIHggPSBjaG1vZChmLG1hc2sp OworICAgIGlmICh4IDwgMCkgeworCWRlYnVnKEYxMTEsInpzZXRwZXJtIGVycm9yIixmLGVycm5v KTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInpzZXRwZXJtIG9rIixmLG1h c2spOworICAgIHJldHVybigxKTsKK30KKworLyogIFogRyBQIEUgUiBNICAtLSAgR2V0IHBlcm1p c3Npb25zIG9mIGEgZmlsZSBhcyBhbiBvY3RhbCBzdHJpbmcgICovCisKK2NoYXIgKgoremdwZXJt KGYpIGNoYXIgKmY7IHsKKyAgICBleHRlcm4gaW50IGRpcmFjdGl2ZTsKKyAgICBpbnQgeDsgY2hh ciAqcyA9IChjaGFyICopeGxwZXJtczsKKyAgICBzdHJ1Y3Qgc3RhdCBidWY7CisgICAgZGVidWco RjExMCwiemdwZXJtIixmLDApOworICAgIGlmICghZikgcmV0dXJuKCItLS0tLS0tLS0tIik7Cisg ICAgaWYgKCEqZikgcmV0dXJuKCItLS0tLS0tLS0tIik7CisKKyNpZmRlZiBDS1JPT1QKKyAgICBk ZWJ1ZyhGMTExLCJ6Z3Blcm0gc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7CisgICAgaWYgKGNr cm9vdHNldCkgaWYgKCF6aW5yb290KGYpKSB7CisJZGVidWcoRjExMCwiemdwZXJtIHNldHJvb3Qg dmlvbGF0aW9uIixmLDApOworCXJldHVybigiLS0tLS0tLS0tLSIpOworICAgIH0KKyNlbmRpZiAv KiBDS1JPT1QgKi8KKworI2lmZGVmIFVTRV9MU1RBVAorICAgIGlmIChkaXJhY3RpdmUpCisgICAg ICB4ID0gbHN0YXQoZiwmYnVmKTsKKyAgICBlbHNlCisjZW5kaWYgLyogVVNFX0xTVEFUICovCisg ICAgICB4ID0gc3RhdChmLCZidWYpOworICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDkpOworICAg IGlmICh4IDwgMCkKKyAgICAgIHJldHVybigiLS0tLS0tLS0tLSIpOworICAgIHNwcmludGYocywi JW8iLGJ1Zi5zdF9tb2RlKTsKKyAgICBkZWJ1ZyhGMTEwLCJ6Z3Blcm0iLHMsMCk7CisgICAgcmV0 dXJuKHMpOworfQorCisvKiBMaWtlIHpncGVybSgpIGJ1dCByZXR1cm5zIHBlcm1pc3Npb25zIGlu ICJscyAtbCIgc3RyaW5nIGZvcm1hdCAqLworCitzdGF0aWMgY2hhciB4c3Blcm1zWzI0XTsKKwor Y2hhciAqCit6aXBlcm0oZikgY2hhciAqIGY7IHsKKyAgICBleHRlcm4gaW50IGRpcmFjdGl2ZTsK KyAgICBpbnQgeDsgY2hhciAqcyA9IChjaGFyICopeHNwZXJtczsKKyAgICBzdHJ1Y3Qgc3RhdCBi dWY7CisgICAgdW5zaWduZWQgaW50IHBlcm1zID0gMDsKKworICAgIGRlYnVnKEYxMTAsInppcGVy bSIsZiwwKTsKKworICAgIGlmICghZikgcmV0dXJuKE5VTEwpOworICAgIGlmICghKmYpIHJldHVy bihOVUxMKTsKKworICAgIGlmIChkaXJhY3RpdmUgJiYgemdmc19tb2RlICE9IDApIHsKKwlwZXJt cyA9IHpnZnNfbW9kZTsJCS8qIHpnZXRmcygpIGFscmVhZHkgZ290IHRoZW0gKi8KKyAgICB9IGVs c2UgeworI2lmZGVmIFVTRV9MU1RBVAorCWlmIChkaXJhY3RpdmUpCisJICB4ID0gbHN0YXQoZiwm YnVmKTsKKwllbHNlCisjZW5kaWYgLyogVVNFX0xTVEFUICovCisJICB4ID0gc3RhdChmLCZidWYp OworCWRlYnVnKEYxMDEsIlNUQVQiLCIiLDEwKTsKKwlpZiAoeCA8IDApCisJICByZXR1cm4oIi0t LS0tLS0tLS0iKTsKKwlwZXJtcyA9IGJ1Zi5zdF9tb2RlOworICAgIH0KKyAgICBzd2l0Y2ggKHBl cm1zICYgU19JRk1UKSB7CisgICAgICBjYXNlIFNfSUZESVI6CisgICAgICAgICpzKysgPSAnZCc7 CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTX0lGQ0hSOiAgICAgICAgICAgICAgICAgICAg IC8qIENoYXJhY3RlciBzcGVjaWFsICovCisgICAgICAgICpzKysgPSAnYyc7CisgICAgICAgIGJy ZWFrOworICAgICAgY2FzZSBTX0lGQkxLOiAgICAgICAgICAgICAgICAgICAgIC8qIEJsb2NrIHNw ZWNpYWwgKi8KKyAgICAgICAgKnMrKyA9ICdiJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IFNfSUZSRUc6ICAgICAgICAgICAgICAgICAgICAgLyogUmVndWxhciAqLworICAgICAgICAqcysr ID0gJy0nOworICAgICAgICBicmVhazsKKyNpZmRlZiBTX0lGTE5LCisgICAgICBjYXNlIFNfSUZM Tks6ICAgICAgICAgICAgICAgICAgICAgLyogU3ltYm9saWMgbGluayAqLworICAgICAgICAqcysr ID0gJ2wnOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBTX0lGTE5LICovCisjaWZkZWYgU19J RlNPQ0sKKyAgICAgIGNhc2UgU19JRlNPQ0s6ICAgICAgICAgICAgICAgICAgICAvKiBTb2NrZXQg Ki8KKyAgICAgICAgKnMrKyA9ICdzJzsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogU19JRlNP Q0sgKi8KKyNpZmRlZiBTX0lGSUZPCisjaWZuZGVmIFBsYW45CisjaWZuZGVmIENPSEVSRU5UCisg ICAgICBjYXNlIFNfSUZJRk86ICAgICAgICAgICAgICAgICAgICAgLyogRklGTyAqLworICAgICAg ICAqcysrID0gJ3AnOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2Vu ZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogU19JRklGTyAqLworI2lmZGVmIFNfSUZXSFQKKyAg ICAgIGNhc2UgU19JRldIVDogICAgICAgICAgICAgICAgICAgICAvKiBXaGl0ZW91dCAqLworICAg ICAgICAqcysrID0gJ3cnOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBTX0lGV0hUICovCisg ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5rbm93biAqLworICAg ICAgICAqcysrID0gJz8nOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHBlcm1zICYg U19JUlVTUikgICAgICAgICAgLyogT3duZXIncyBwZXJtaXNzaW9ucyAqLworICAgICAgKnMrKyA9 ICdyJzsKKyAgICBlbHNlCisgICAgICAqcysrID0gJy0nOworICAgIGlmIChwZXJtcyAmIFNfSVdV U1IpCisgICAgICAqcysrID0gJ3cnOworICAgIGVsc2UKKyAgICAgICpzKysgPSAnLSc7CisgICAg c3dpdGNoIChwZXJtcyAmIChTX0lYVVNSIHwgU19JU1VJRCkpIHsKKyAgICAgIGNhc2UgMDoKKyAg ICAgICAgKnMrKyA9ICctJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFNfSVhVU1I6Cisg ICAgICAgICpzKysgPSAneCc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTX0lTVUlEOgor ICAgICAgICAqcysrID0gJ1MnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgU19JWFVTUiB8 IFNfSVNVSUQ6CisgICAgICAgICpzKysgPSAncyc7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg ICBpZiAocGVybXMgJiBTX0lSR1JQKSAgICAgICAgICAvKiBHcm91cCBwZXJtaXNzaW9ucyAqLwor ICAgICAgKnMrKyA9ICdyJzsKKyAgICBlbHNlCisgICAgICAqcysrID0gJy0nOworICAgIGlmIChw ZXJtcyAmIFNfSVdHUlApCisgICAgICAqcysrID0gJ3cnOworICAgIGVsc2UKKyAgICAgICpzKysg PSAnLSc7CisgICAgc3dpdGNoIChwZXJtcyAmIChTX0lYR1JQIHwgU19JU0dJRCkpIHsKKyAgICAg IGNhc2UgMDoKKyAgICAgICAgKnMrKyA9ICctJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IFNfSVhHUlA6CisgICAgICAgICpzKysgPSAneCc7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSBTX0lTR0lEOgorICAgICAgICAqcysrID0gJ1MnOworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgU19JWEdSUCB8IFNfSVNHSUQ6CisgICAgICAgICpzKysgPSAncyc7CisgICAgICAgIGJyZWFr OworICAgIH0KKyAgICBpZiAocGVybXMgJiBTX0lST1RIKSAgICAgICAgICAvKiBXb3JsZCBwZXJt aXNzaW9ucyAqLworICAgICAgKnMrKyA9ICdyJzsKKyAgICBlbHNlCisgICAgICAqcysrID0gJy0n OworICAgIGlmIChwZXJtcyAmIFNfSVdPVEgpCisgICAgICAqcysrID0gJ3cnOworICAgIGVsc2UK KyAgICAgICpzKysgPSAnLSc7CisgICAgc3dpdGNoICgKKyNpZmRlZiBQbGFuOQorICAgICAgICAg ICAgcGVybXMgJiAoU19JWE9USCkKKyNlbHNlCisgICAgICAgICAgICBwZXJtcyAmIChTX0lYT1RI IHwgU19JU1ZUWCkKKyNlbmRpZgorICAgICAgICAgICAgKSB7CisgICAgICBjYXNlIDA6CisgICAg ICAgICpzKysgPSAnLSc7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTX0lYT1RIOgorICAg ICAgICAqcysrID0gJ3gnOworICAgICAgICBicmVhazsKKyNpZm5kZWYgUGxhbjkKKyAgICAgIGNh c2UgU19JU1ZUWDoKKyAgICAgICAgKnMrKyA9ICdUJzsKKyAgICAgICAgYnJlYWs7CisgICAgICBj YXNlIFNfSVhPVEggfCBTX0lTVlRYOgorICAgICAgICAqcysrID0gJ3QnOworICAgICAgICBicmVh azsKKyNlbmRpZiAvKiBQbGFuOSAqLworICAgIH0KKyAgICAqcyA9ICdcMCc7CisgICAgZGVidWco RjExMCwiemlwZXJtIix4c3Blcm1zLDApOworICAgIHJldHVybigoY2hhciAqKXhzcGVybXMpOwor fQorCisjZWxzZQorCitjaGFyICoKK3pncGVybShmKSBjaGFyICpmOyB7CisgICAgcmV0dXJuKCIt LS0tLS0tLS0tIik7Cit9CitjaGFyICoKK3ppcGVybXMoZikgY2hhciAqZjsgeworICAgIHJldHVy bigiLS0tLS0tLS0tLSIpOworfQorI2VuZGlmIC8qIENLX1BFUk1TICovCisKK2ludAorenNhdHRy KHh4KSBzdHJ1Y3QgemF0dHIgKnh4OyB7CisgICAgQ0tfT0ZGX1QgazsgaW50IHg7CisgICAgc3Ry dWN0IHN0YXQgYnVmOworCisgICAgayA9IGlmbGVuICUgMTAyNDsJCQkvKiBGaWxlIGxlbmd0aCBp biBLICovCisgICAgaWYgKGspIGsgPSAxTDsKKyAgICB4eC0+bGVuZ3RoayA9IChpZmxlbiAvIDEw MjQpICsgazsKKyAgICB4eC0+dHlwZS5sZW4gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGaWxl IHR5cGUgY2FuJ3QgYmUgZmlsbGVkIGluIGhlcmUgKi8KKyAgICB4eC0+dHlwZS52YWwgPSAiIjsK KyAgICBpZiAoKm5hbWJ1ZikgeworICAgICAgICB4eC0+ZGF0ZS52YWwgPSB6ZmNkYXQobmFtYnVm KTsgIC8qIEZpbGUgY3JlYXRpb24gZGF0ZSAqLworICAgICAgICB4eC0+ZGF0ZS5sZW4gPSAoaW50 KXN0cmxlbih4eC0+ZGF0ZS52YWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHh4LT5kYXRlLmxl biA9IDA7CisgICAgICAgIHh4LT5kYXRlLnZhbCA9ICIiOworICAgIH0KKyAgICB4eC0+Y3JlYXRv ci5sZW4gPSAwOyAgICAgICAgICAgICAgICAvKiBGaWxlIGNyZWF0b3IgKi8KKyAgICB4eC0+Y3Jl YXRvci52YWwgPSAiIjsKKyAgICB4eC0+YWNjb3VudC5sZW4gPSAwOyAgICAgICAgICAgICAgICAv KiBGaWxlIGFjY291bnQgKi8KKyAgICB4eC0+YWNjb3VudC52YWwgPSAiIjsKKyAgICB4eC0+YXJl YS5sZW4gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGFyZWEgKi8KKyAgICB4eC0+YXJl YS52YWwgPSAiIjsKKyAgICB4eC0+cGFzc3dvcmQubGVuID0gMDsgICAgICAgICAgICAgICAvKiBB cmVhIHBhc3N3b3JkICovCisgICAgeHgtPnBhc3N3b3JkLnZhbCA9ICIiOworICAgIHh4LT5ibGtz aXplID0gLTFMOyAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYmxvY2tzaXplICovCisgICAgeHgt PnhhY2Nlc3MubGVuID0gMDsgICAgICAgICAgICAgICAgLyogRmlsZSBhY2Nlc3MgKi8KKyAgICB4 eC0+eGFjY2Vzcy52YWwgPSAiIjsKKyAgICB4eC0+ZW5jb2RpbmcubGVuID0gMDsgICAgICAgICAg ICAgICAvKiBUcmFuc2ZlciBzeW50YXggKi8KKyAgICB4eC0+ZW5jb2RpbmcudmFsID0gMDsKKyAg ICB4eC0+ZGlzcC5sZW4gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBEaXNwb3NpdGlvbiB1cG9u IGFycml2YWwgKi8KKyAgICB4eC0+ZGlzcC52YWwgPSAiIjsKKyAgICB4eC0+bHByb3RlY3QubGVu ID0gMDsgICAgICAgICAgICAgICAvKiBMb2NhbCBwcm90ZWN0aW9uICovCisgICAgeHgtPmxwcm90 ZWN0LnZhbCA9ICIiOworICAgIHh4LT5ncHJvdGVjdC5sZW4gPSAwOyAgICAgICAgICAgICAgIC8q IEdlbmVyaWMgcHJvdGVjdGlvbiAqLworICAgIHh4LT5ncHJvdGVjdC52YWwgPSAiIjsKKyAgICB4 ID0gLTE7CisgICAgaWYgKCpuYW1idWYpIHggPSBzdGF0KG5hbWJ1ZiwmYnVmKTsKKyAgICBkZWJ1 ZyhGMTAxLCJTVEFUIiwiIiwxMSk7CisgICAgaWYgKHggPj0gMCkgeworICAgICAgICBkZWJ1ZyhG MTExLCJ6c2F0dHIgYnVmLnN0X21vZGUgJiAwNzc3IixuYW1idWYsYnVmLnN0X21vZGUgJiAwNzc3 KTsKKyAgICAgICAgLyogVU5JWCBmaWxlbW9kZSBhcyBhbiBvY3RhbCBzdHJpbmcgd2l0aG91dCBm aWxldHlwZSBiaXRzICovCisgICAgICAgIHNwcmludGYobHBlcm1zLCIlbyIsYnVmLnN0X21vZGUg JiAwNzc3KTsKKyAgICAgICAgeHgtPmxwcm90ZWN0LmxlbiA9IChpbnQpc3RybGVuKGxwZXJtcyk7 CisgICAgICAgIHh4LT5scHJvdGVjdC52YWwgPSAoY2hhciAqKWxwZXJtczsKKyAgICAgICAgeCA9 IDA7CisjaWZkZWYgQ0tfR1BFUk1TCisgICAgICAgIC8qIEdlbmVyaWMgcGVybWlzc2lvbnMgb25s eSBpZiB3ZSBoYXZlIHN0YXQuaCBzeW1ib2xzIGRlZmluZWQgKi8KKyAgICAgICAgaWYgKGJ1Zi5z dF9tb2RlICYgU19JUlVTUikgeCB8PSAxOyAgICAgIC8qIFJlYWQgKi8KKyAgICAgICAgaWYgKGJ1 Zi5zdF9tb2RlICYgU19JV1VTUikgeCB8PSAoMisxNik7IC8qIFdyaXRlIGFuZCBEZWxldGUgKi8K KyAgICAgICAgaWYgKGJ1Zi5zdF9tb2RlICYgU19JWFVTUikgeCB8PSA0OyAgICAgIC8qIEV4ZWN1 dGUgKi8KKyAgICAgICAgZ3Blcm1zWzBdID0gdG9jaGFyKHgpOworICAgICAgICBncGVybXNbMV0g PSBOVUw7CisgICAgICAgIHh4LT5ncHJvdGVjdC5sZW4gPSAxOworICAgICAgICB4eC0+Z3Byb3Rl Y3QudmFsID0gKGNoYXIgKilncGVybXM7CisjZW5kaWYgLyogQ0tfR1BFUk1TICovCisgICAgfQor ICAgIGRlYnVnKEYxMTEsInpzYXR0ciBscGVybXMiLHh4LT5scHJvdGVjdC52YWwseHgtPmxwcm90 ZWN0Lmxlbik7CisgICAgZGVidWcoRjExMSwienNhdHRyIGdwZXJtcyIseHgtPmdwcm90ZWN0LnZh bCx4eC0+Z3Byb3RlY3QubGVuKTsKKyAgICB4eC0+c3lzdGVtaWQudmFsID0gIlUxIjsgICAgICAg ICAgICAvKiBVMSA9IFVOSVggKi8KKyAgICB4eC0+c3lzdGVtaWQubGVuID0gMjsgICAgICAgICAg ICAgICAvKiBTeXN0ZW0gSUQgKi8KKyAgICB4eC0+cmVjZm0ubGVuID0gMDsgICAgICAgICAgICAg ICAgICAvKiBSZWNvcmQgZm9ybWF0ICovCisgICAgeHgtPnJlY2ZtLnZhbCA9ICIiOworICAgIHh4 LT5zeXNwYXJhbS5sZW4gPSAwOyAgICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBlbmRlbnQgcGFy YW1ldGVycyAqLworICAgIHh4LT5zeXNwYXJhbS52YWwgPSAiIjsKKyAgICB4eC0+bGVuZ3RoID0g aWZsZW47ICAgICAgICAgICAgICAgICAvKiBMZW5ndGggKi8KKyAgICByZXR1cm4oMCk7Cit9CisK Ky8qIFogRiBDIEQgQSBUICAtLSAgR2V0IGZpbGUgY3JlYXRpb24gZGF0ZSAqLworLyoKKyAgQ2Fs bCB3aXRoIHBvaW50ZXIgdG8gZmlsZW5hbWUuCisgIE9uIHN1Y2Nlc3MsIHJldHVybnMgcG9pbnRl ciB0byBtb2RpZmljYXRpb24gZGF0ZSBpbiB5eXl5bW1kZCBoaDptbTpzcyBmb3JtYXQuCisgIE9u IGZhaWx1cmUsIHJldHVybnMgcG9pbnRlciB0byBudWxsIHN0cmluZy4KKyovCitzdGF0aWMgY2hh ciBkYXRidWZbNDBdOworCitjaGFyICoKKyNpZmRlZiBDS19BTlNJQworemR0c3RyKHRpbWVfdCB0 aW1lYXJnKQorI2Vsc2UKK3pkdHN0cih0aW1lYXJnKSB0aW1lX3QgdGltZWFyZzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworLyogemR0c3RyICovIHsKKyNpZm5kZWYgVElNRVNUQU1QCisgICAgcmV0 dXJuKCIiKTsKKyNlbHNlCisgICAgc3RydWN0IHRtICogdGltZV9zdGFtcDsKKyAgICBzdHJ1Y3Qg dG0gKiBsb2NhbHRpbWUoKTsKKyAgICBpbnQgeXksIHNzOworCisgICAgZGVidWcoRjEwMSwiemR0 c3RyIHRpbWVhcmciLCIiLHRpbWVhcmcpOworICAgIGlmICh0aW1lYXJnIDwgMCkKKyAgICAgIHJl dHVybigiIik7CisgICAgdGltZV9zdGFtcCA9IGxvY2FsdGltZSgmKHRpbWVhcmcpKTsKKyAgICBp ZiAoIXRpbWVfc3RhbXApIHsKKyAgICAgICAgZGVidWcoRjEwMCwibG9jYWx0aW1lIHJldHVybnMg bnVsbCIsIiIsMCk7CisgICAgICAgIHJldHVybigiIik7CisgICAgfQorLyoKKyAgV2UgYXNzdW1l IHRoYXQgdG1feWVhciBpcyBBTFdBWVMgeWVhcnMgc2luY2UgMTkwMC4KKyAgQW55IHBsYXRmb3Jt IHdoZXJlIHRoaXMgaXMgbm90IHRoZSBjYXNlIHdpbGwgaGF2ZSBwcm9ibGVtcworICBzdGFydGlu ZyBpbiAyMDAwLgorKi8KKyAgICB5eSA9IHRpbWVfc3RhbXAtPnRtX3llYXI7ICAgICAgICAgICAv KiBZZWFyIC0gMTkwMCAqLworICAgIGRlYnVnKEYxMDEsInpkdHN0ciB0bV95ZWFyIiwiIix0aW1l X3N0YW1wLT50bV95ZWFyKTsKKyAgICBpZiAoeXkgPiAxMDAwKSB7CisgICAgICAgIGRlYnVnKEYx MDEsInpzdHJkdCBZRUFSLTIwMDAgQUxFUlQgMTogbG9jYWx0aW1lIHllYXIiLCIiLHl5KTsKKyAg ICB9CisgICAgeXkgKz0gMTkwMDsKKyAgICBkZWJ1ZyhGMTAxLCJ6ZGF0c3RyIHllYXIiLCIiLHl5 KTsKKworICAgIGlmICh0aW1lX3N0YW1wLT50bV9tb24gIDwgMCB8fCB0aW1lX3N0YW1wLT50bV9t b24gID4gMTEpCisgICAgICByZXR1cm4oIiIpOworICAgIGlmICh0aW1lX3N0YW1wLT50bV9tZGF5 IDwgMCB8fCB0aW1lX3N0YW1wLT50bV9tZGF5ID4gMzEpCisgICAgICByZXR1cm4oIiIpOworICAg IGlmICh0aW1lX3N0YW1wLT50bV9ob3VyIDwgMCB8fCB0aW1lX3N0YW1wLT50bV9ob3VyID4gMjMp CisgICAgICByZXR1cm4oIiIpOworICAgIGlmICh0aW1lX3N0YW1wLT50bV9taW4gIDwgMCB8fCB0 aW1lX3N0YW1wLT50bV9taW4gID4gNTkpCisgICAgICByZXR1cm4oIiIpOworICAgIHNzID0gdGlt ZV9zdGFtcC0+dG1fc2VjOyAgICAgICAgICAgIC8qIFNlY29uZHMgKi8KKyAgICBpZiAoc3MgPCAw IHx8IHNzICA+IDU5KSAgICAgICAgICAgICAvKiBTb21lIHN5c3RlbXMgZ2l2ZSBhIEJJRyBudW1i ZXIgKi8KKyAgICAgIHNzID0gMDsKKyAgICBzcHJpbnRmKGRhdGJ1ZiwKKyNpZmRlZiBwZHAxMQor LyogRm9yIHNvbWUgcmVhc29uLCAyLjF4IEJTRCBzcHJpbnRmIGdldHMgdGhlIGxhc3QgZmllbGQg d3JvbmcuICovCisgICAgICAgICAgICAiJTA0ZCUwMmQlMDJkICUwMmQ6JTAyZDowMCIsCisjZWxz ZQorICAgICAgICAgICAgIiUwNGQlMDJkJTAyZCAlMDJkOiUwMmQ6JTAyZCIsCisjZW5kaWYgLyog cGRwMTEgKi8KKyAgICAgICAgICAgIHl5LAorICAgICAgICAgICAgdGltZV9zdGFtcC0+dG1fbW9u ICsgMSwKKyAgICAgICAgICAgIHRpbWVfc3RhbXAtPnRtX21kYXksCisgICAgICAgICAgICB0aW1l X3N0YW1wLT50bV9ob3VyLAorICAgICAgICAgICAgdGltZV9zdGFtcC0+dG1fbWluCisjaWZuZGVm IHBkcDExCisgICAgICAgICAgICAsIHNzCisjZW5kaWYgLyogcGRwMTEgKi8KKyAgICAgICAgICAg ICk7CisgICAgeXkgPSAoaW50KXN0cmxlbihkYXRidWYpOworICAgIGRlYnVnKEYxMTEsInpkYXRz dHIiLGRhdGJ1Zix5eSk7CisgICAgaWYgKHl5ID4gMTcpIGRhdGJ1ZlsxN10gPSAnXDAnOworICAg IHJldHVybihkYXRidWYpOworI2VuZGlmIC8qIFRJTUVTVEFNUCAqLworfQorCitjaGFyICoKK3pm Y2RhdChuYW1lKSBjaGFyICpuYW1lOyB7CisjaWZkZWYgVElNRVNUQU1QCisgICAgc3RydWN0IHN0 YXQgYnVmZmVyOworICAgIGV4dGVybiBpbnQgZGlyYWN0aXZlOworICAgIHVuc2lnbmVkIGludCBt dGltZTsKKyAgICBpbnQgeDsKKyAgICBjaGFyICogczsKKworICAgIGlmICghbmFtZSkKKyAgICAg IHJldHVybigiIik7CisgICAgcyA9IG5hbWU7CisgICAgaWYgKCEqcykKKyAgICAgIHJldHVybigi Iik7CisKKyNpZmRlZiBDS1JPT1QKKyAgICBkZWJ1ZyhGMTExLCJ6ZmNkYXQgc2V0cm9vdCIsY2ty b290LGNrcm9vdHNldCk7CisgICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5yb290KG5hbWUpKSB7 CisJZGVidWcoRjExMCwiemZjZGF0IHNldHJvb3QgdmlvbGF0aW9uIixuYW1lLDApOworCXJldHVy bigiIik7CisgICAgfQorI2VuZGlmIC8qIENLUk9PVCAqLworCisjaWZkZWYgRFRJTERFCisgICAg aWYgKCpzID09ICd+JykgeworICAgICAgICBzID0gdGlsZGVfZXhwYW5kKHMpOworICAgICAgICBp ZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCEqcykgcyA9IG5hbWU7CisgICAgfQorI2VuZGlm IC8qIERUSUxERSAqLworCisgICAgZGF0YnVmWzBdID0gJ1wwJzsKKyAgICB4ID0gMDsKKyAgICBk ZWJ1ZyhGMTExLCJ6ZmNkYXQiLHMsZGlyYWN0aXZlKTsKKworICAgIGlmIChkaXJhY3RpdmUgJiYg emdmc19tdGltZSkgeworCW10aW1lID0gemdmc19tdGltZTsKKyAgICB9IGVsc2UgeworI2lmZGVm IFVTRV9MU1RBVAorCWlmIChkaXJhY3RpdmUpIHsKKwkgICAgeCA9IGxzdGF0KHMsJmJ1ZmZlcik7 CisJICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDEyKTsKKwkgICAgZGVidWcoRjEwMSwiemZjZGF0 IGxzdGF0IiwiIix4KTsKKwl9IGVsc2UgeworI2VuZGlmIC8qIFVTRV9MU1RBVCAqLworCSAgICB4 ID0gc3RhdChzLCZidWZmZXIpOworCSAgICBkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxMyk7CisJICAg IGRlYnVnKEYxMDEsInpmY2RhdCBzdGF0IiwiIix4KTsKKyNpZmRlZiBVU0VfTFNUQVQKKwl9Cisj ZW5kaWYgLyogVVNFX0xTVEFUICovCisJaWYgKHggIT0gMCkgeworI2lmZGVmIFVTRV9MU1RBVAor CSAgICBkZWJ1ZyhGMTExLCJ6ZmNkYXQgc3RhdCBmYWlsZWQiLHMsZXJybm8pOworI2Vsc2UKKwkg ICAgZGVidWcoRjExMSwiemZjZGF0IGxzdGF0IGZhaWxlZCIscyxlcnJubyk7CisjZW5kaWYgLyog VVNFX0xTVEFUICovCisJICAgIHJldHVybigiIik7CisJfQorCWRlYnVnKEYxMDEsInpmY2RhdCBi dWZmZXIuc3RfbXRpbWUiLCIiLGJ1ZmZlci5zdF9tdGltZSk7CisJbXRpbWUgPSBidWZmZXIuc3Rf bXRpbWU7CisgICAgfQorICAgIHJldHVybih6ZHRzdHIobXRpbWUpKTsKKyNlbHNlCisgICAgcmV0 dXJuKCIiKTsKKyNlbmRpZiAvKiBUSU1FU1RBTVAgKi8KK30KKworI2lmbmRlZiBOT1RJTUVTVEFN UAorCisvKiBaIFMgVCBSIEQgVCAgLS0gIENvbnZlcnRzIGxvY2FsIGRhdGUgc3RyaW5nIHRvIGlu dGVybmFsIHJlcHJlc2VudGF0aW9uICovCisvKgorICBJbiBvdXIgY2FzZSAoVU5JWCkgdGhpcyBp cyBzZWNvbmRzIHNpbmNlIG1pZG5pdGUgMSBKYW4gMTk3MCBVVEMsCisgIHN1aXRhYmxlIGZvciBj b21wYXJpc29uIHdpdGggVU5JWCBmaWxlIGRhdGVzLiAgQXMgZmFyIGFzIEkga25vdywgdGhlcmUg aXMKKyAgbm8gbGlicmFyeSBvciBzeXN0ZW0gY2FsbCAtLSBhdCBsZWFzdCBub3RoaW5nIHJlYXNv bmFibHkgcG9ydGFibGUgLS0gdG8KKyAgY29udmVydCBsb2NhbCB0aW1lIHRvIFVUQy4KKyovCit0 aW1lX3QKK3pzdHJkdChkYXRlLGxlbikgY2hhciAqIGRhdGU7IGludCBsZW47IHsKKyNpZmRlZiBN X1VOSVgKKy8qCisgIFNDTyBVTklYIDMuMnYyLjAgYW5kIE9EVCAyLjAgbGFjayBwcm90b3R5cGVz IGZvciBmdGltZSgpLgorICBPRFQgMy4wICgzLjJ2NC4yIE9TKSBoYXMgYSBwcm90b3R5cGUsIHdo aWNoIG1heSB2YXJ5IGluCisgIGRlcGVuZGVuY2Ugb24gdGhlIFhQRzQgc3VwcGxlbWVudCBwcmVz ZW5jZS4gIFNvIGFsd2F5cyB1c2UKKyAgd2hhdCB0aGUgc3lzdGVtIGhlYWRlciBmaWxlIHN1cHBs aWVzIGluIE9EVCAzLjAuLi4KKyovCisjaWZuZGVmIE9EVDMwCisjaWZuZGVmIF9TQ09fRFMKKyAg ICBleHRlcm4gdm9pZCBmdGltZSgpOyAgLyogZXh0ZXJuIHZvaWQgZnRpbWUoc3RydWN0IHRpbWVi ICopICovCisjZW5kaWYgLyogX1NDT19EUyAqLworI2VuZGlmIC8qIE9EVDMwICovCisjZWxzZQor I2lmbmRlZiBNX1hFTklYCisgICAgZXh0ZXJuIGludCBmdGltZSgpOworI2VuZGlmIC8qIE1fWEVO SVggKi8KKyNlbmRpZiAvKiBNX1VOSVggKi8KKyAgICBleHRlcm4gc3RydWN0IHRtICogbG9jYWx0 aW1lKCk7CisKKyAgICAvKiBBbmQgdGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRlY2xhcmVkIGFsd2F5 cyB0aHJvdWdoIGEgaGVhZGVyIGZpbGUgKi8KKyNpZmRlZiBIUFVYMTAKKyAgICB0aW1lX3QgdG14 OworICAgIGxvbmcgZGF5czsKKyNlbHNlCisjaWZkZWYgQlNENDQKKyAgICB0aW1lX3QgdG14Owor ICAgIGxvbmcgZGF5czsKKyNlbHNlCisgICAgbG9uZyB0bXgsIGRheXM7CisjZW5kaWYgLyogQlNE NDQgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyAgICBpbnQgaSwgbiwgaXNsZWFweWVhcjsKKyAg ICAgICAgICAgICAgICAgICAvKiAgICAgICBKICBGICBNICBBICAgTSAgIEogICBKICAgQSAgIFMg ICBPICAgTiAgIEQgICAqLworICAgICAgICAgICAgICAgICAgIC8qICAgICAgMzEgMjggMzEgMzAg IDMxICAzMCAgMzEgIDMxICAzMCAgMzEgIDMwICAzMSAgICovCisgICAgc3RhdGljCisgICAgaW50 IG1vbnRoZGF5cyBbMTNdID0geyAgMCwwLDMxLDU5LDkwLDEyMCwxNTEsMTgxLDIxMiwyNDMsMjcz LDMwNCwzMzQgfTsKKyAgICBjaGFyIHNbNV07CisgICAgc3RydWN0IHRtICp0aW1lX3N0YW1wOwor CisjaWZkZWYgQlNENDQKKyAgICBzdHJ1Y3QgdGltZXZhbCB0cFsyXTsKKyAgICBsb25nIHh0aW1l em9uZSA9IDBMOworI2Vsc2UKKyNpZmRlZiBWNworICAgIHN0cnVjdCB1dGltYnVmIHsKKyAgICAg IHRpbWVfdCB0aW1lcFsyXTsgICAgICAgICAgLyogTmV3IGFjY2VzcyBhbmQgbW9kaWZpY2F0b24g dGltZSAqLworICAgIH0gdHA7CisgICAgY2hhciAqdHo7CisgICAgbG9uZyB0aW1lem9uZTsgICAg ICAgICAgICAgIC8qIEluIGNhc2UgdGltZXpvbmUgbm90IGRlZmluZWQgaW4gLmggZmlsZSAqLwor I2Vsc2UKKyNpZmRlZiBTWVNVVElNRUgKKyAgICBzdHJ1Y3QgdXRpbWJ1ZiB0cDsKKyNlbHNlCisg ICAgc3RydWN0IHV0aW1idWYgeworICAgICAgICB0aW1lX3QgYXRpbWU7CisgICAgICAgIHRpbWVf dCBtdGltZTsKKyAgICB9IHRwOworI2VuZGlmIC8qIFNZU1VUSU1FSCAqLworI2VuZGlmIC8qIFY3 ICovCisjZW5kaWYgLyogQlNENDQgKi8KKworI2lmZGVmIEFOWUJTRAorICAgIGxvbmcgdGltZXpv bmUgPSAwTDsKKyAgICBzdGF0aWMgc3RydWN0IHRpbWViIHRicDsKKyNlbmRpZiAvKiBBTllCU0Qg Ki8KKworI2lmZGVmIEJFQk9YCisgICAgbG9uZyB0aW1lem9uZSA9IDBMOworI2VuZGlmIC8qIEJF Qk9YICovCisKKyAgICBkZWJ1ZyhGMTExLCJ6c3RyZHQiLGRhdGUsbGVuKTsKKworICAgIGlmICgo bGVuID09IDApCisgICAgICAgIHx8IChsZW4gIT0gMTcpCisgICAgICAgIHx8IChkYXRlWzhdICE9 ICcgJykKKyAgICAgICAgfHwgKGRhdGVbMTFdICE9ICc6JykKKyAgICAgICAgfHwgKGRhdGVbMTRd ICE9ICc6JykgKSB7CisgICAgICAgIGRlYnVnKEYxMTEsIkJhZCBjcmVhdGlvbiBkYXRlICIsZGF0 ZSxsZW4pOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ6c3Ry ZHQgZGF0ZSBjaGVjayAxIixkYXRlLGxlbik7CisgICAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKSB7 CisgICAgICAgIGlmICghaXNkaWdpdChkYXRlW2ldKSkgeworICAgICAgICAgICAgZGVidWcoRjEx MSwiQmFkIGNyZWF0aW9uIGRhdGUgIixkYXRlLGxlbik7CisgICAgICAgICAgICByZXR1cm4oLTEp OworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMTEsInpzdHJkdCBkYXRlIGNoZWNrIDIi LGRhdGUsbGVuKTsKKyAgICBpKys7CisKKyAgICBmb3IgKDsgaSA8IDE2OyBpICs9IDMpIHsKKyAg ICAgICAgaWYgKCghaXNkaWdpdChkYXRlW2ldKSkgfHwgKCFpc2RpZ2l0KGRhdGVbaSArIDFdKSkp IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIkJhZCBjcmVhdGlvbiBkYXRlICIsZGF0ZSxsZW4p OworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhG MTExLCJ6c3RyZHQgZGF0ZSBjaGVjayAzIixkYXRlLGxlbik7CisKKworI2lmZGVmIENPTU1FTlQg Lyogd2FzIEJTRDQ0ICovCisvKgorICAgbWFuIGdldHRpbWVvZmRheSBvbiBCU0RJIDMuMSBzYXlz OgorICAgIlRoZSB0aW1lem9uZSBmaWVsZCBpcyBubyBsb25nZXIgdXNlZDsgdGltZXpvbmUgaW5m b3JtYXRpb24gaXMgc3RvcmVkIG91dC0KKyAgICAgc2lkZSB0aGUga2VybmVsLiAgU2VlIGN0aW1l KDMpIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgIFNvIHRoaXMgY2h1bmsgb2YKKyAgIGNvZGUgaXMg ZWZmZWN0aXZlbHkgYSBuby1vcCwgYXQgbGVhc3QgaW4gQlNESSAzLnguCisqLworICAgIHsKKyAg ICAgICAgaW50IHg7CisgICAgICAgIHN0cnVjdCB0aW1lem9uZSB0enA7CisgICAgICAgIHggPSBn ZXR0aW1lb2ZkYXkoTlVMTCwgJnR6cCk7CisgICAgICAgIGRlYnVnKEYxMDEsInpzdHJkdCBCU0Q0 NCBnZXR0aW1lb2ZkYXkiLCIiLHgpOworICAgICAgICBpZiAoeCA+IC0xKQorICAgICAgICAgIHh0 aW1lem9uZSA9IHR6cC50el9taW51dGVzd2VzdCAqIDYwTDsKKyAgICAgICAgZWxzZQorICAgICAg ICAgIHh0aW1lem9uZSA9IDBMOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RyZHQgQlNENDQgdGlt ZXpvbmUiLCIiLHh0aW1lem9uZSk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBBTllCU0QKKyAgICBk ZWJ1ZyhGMTAwLCJ6c3RyZHQgQlNEIGNhbGxpbmcgZnRpbWUiLCIiLDApOworICAgIGZ0aW1lKCZ0 YnApOworICAgIGRlYnVnKEYxMDAsInpzdHJkdCBCU0QgYmFjayBmcm9tIGZ0aW1lIiwiIiwwKTsK KyAgICB0aW1lem9uZSA9IHRicC50aW1lem9uZSAqIDYwTDsKKyAgICBkZWJ1ZyhGMTAxLCJ6c3Ry ZHQgQlNEIHRpbWV6b25lIiwiIix0aW1lem9uZSk7CisjZWxzZQorI2lmZGVmIFNWT1JQT1NJWAor ICAgIHR6c2V0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0aW1lem9uZSAq LworI2Vsc2UKKyNpZmRlZiBWNworICAgIGlmICgodHogPSBnZXRlbnYoIlRaIikpID09IE5VTEwp CisgICAgICB0aW1lem9uZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogVVRDL0dNVCAqLwor ICAgIGVsc2UKKyAgICAgIHRpbWV6b25lID0gYXRvaSgmdHpbM10pOyAgICAgICAgICAvKiBTZXQg J3RpbWV6b25lJy4gKi8KKyAgICB0aW1lem9uZSAqPSA2MEw7CisjZW5kaWYgLyogVjcgKi8KKyNl bmRpZiAvKiBTVk9SUE9TSVggKi8KKyNlbmRpZiAvKiBBTllCU0QgKi8KKyNlbmRpZiAvKiBDT01N RU5UICh3YXMgQlNENDQpICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ6c3RyZHQgc28gZmFyIHNvIGdv b2QiLCIiLDApOworCisgICAgc1s0XSA9ICdcMCc7CisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkr KykgICAgICAgICAgICAgLyogRml4IHRoZSB5ZWFyICovCisgICAgICBzW2ldID0gZGF0ZVtpXTsK KworICAgIG4gPSBhdG9pKHMpOworICAgIGRlYnVnKEYxMTEsInpzdHJkdCB5ZWFyIixzLG4pOwor ICAgIGlmIChuIDwgMTk3MCkgeworICAgICAgICBkZWJ1ZyhGMTAwLCJ6c3RyZHQgZmFpbHMgLSB5 ZWFyIiwiIixuKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKy8qICBQcmV2aW91cyB5 ZWFyJ3MgbGVhcCBkYXlzLiAgVGhpcyB3b24ndCB3b3JrIGFmdGVyIHllYXIgMjEwMC4gKi8KKwor ICAgIGlzbGVhcHllYXIgPSAoKCBuICUgNCA9PSAwICYmIG4gJSAxMDAgIT0wKSB8fCBuICUgNDAw ID09IDApOworICAgIGRheXMgPSAobG9uZykgKG4gLSAxOTcwKSAqIDM2NTsKKyAgICBkYXlzICs9 IChuIC0gMTk2OCAtIDEpIC8gNCAtIChuIC0gMTkwMCAtIDEpIC8gMTAwICsgKG4gLSAxNjAwIC0g MSkgLyA0MDA7CisKKyAgICBzWzJdID0gJ1wwJzsKKworICAgIGZvciAoaSA9IDQ7IGkgPCAxNjsg aSArPSAyKSB7CisgICAgICAgIHNbMF0gPSBkYXRlW2ldOworICAgICAgICBzWzFdID0gZGF0ZVtp ICsgMV07CisgICAgICAgIG4gPSBhdG9pKHMpOworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAg ICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAgICAvKiBNTTogbW9udGggKi8KKyAgICAg ICAgICAgIGlmICgobiA8IDEgKSB8fCAoIG4gPiAxMikpIHsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJ6c3RyZHQgNCBiYWQgZGF0ZSAiLGRhdGUsbGVuKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF5cyArPSBtb250aGRheXMg W25dOworICAgICAgICAgICAgaWYgKGlzbGVhcHllYXIgJiYgbiA+IDIpCisgICAgICAgICAgICAg ICsrZGF5czsKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgY2FzZSA2OiAgICAg ICAgICAgICAgICAgICAgICAgLyogREQ6IGRheSAqLworICAgICAgICAgICAgaWYgKChuIDwgMSAp IHx8ICggbiA+IDMxKSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpzdHJkdCA2IGJh ZCBkYXRlICIsZGF0ZSxsZW4pOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB0bXggPSAoZGF5cyArIG4gLSAxKSAqIDI0TCAqIDYwTCAqIDYw TDsKKyAgICAgICAgICAgIGkrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIHRoZSBz cGFjZSAqLworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIDk6ICAgICAg ICAgICAgICAgICAgICAgICAvKiBoaDogaG91ciAqLworICAgICAgICAgICAgaWYgKChuIDwgMCAp IHx8ICggbiA+IDIzKSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpzdHJkdCA5IGJh ZCBkYXRlICIsZGF0ZSxsZW4pOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB0bXggKz0gbiAqIDYwTCAqIDYwTDsKKyAgICAgICAgICAgIGkr KzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIHRoZSBjb2xvbiAqLworICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIDEyOiAgICAgICAgICAgICAgICAgICAgICAv KiBtbTogbWludXRlICovCisgICAgICAgICAgICBpZiAoKG4gPCAwICkgfHwgKCBuID4gNTkpKSB7 CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwienN0cmR0IDEyIGJhZCBkYXRlICIsZGF0ZSxs ZW4pOworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisjaWZkZWYg Q09NTUVOVCAvKiAod2FzIEJTRDQ0KSAqLyAgICAgICAgLyogQ29ycmVjdCBmb3IgdGltZSB6b25l ICovCisgICAgICAgICAgICB0bXggKz0geHRpbWV6b25lOworICAgICAgICAgICAgZGVidWcoRjEw MSwienN0cmR0IEJTRDQ0IHRteCIsIiIsdG14KTsKKyNlbHNlCisjaWZkZWYgQU5ZQlNECisgICAg ICAgICAgICB0bXggKz0gdGltZXpvbmU7CisjZWxzZQorI2lmbmRlZiBDT05WRVg5IC8qIERvbid0 IHlldCBrbm93IGhvdyB0byBkbyB0aGlzIGhlcmUgKi8KKyNpZmRlZiB1bHRyaXgKKyAgICAgICAg ICAgIHRteCArPSAobG9uZykgdGltZXpvbmU7CisjZWxzZQorI2lmZGVmIFBsYW45CisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgZXh0ZXJuIHRpbWVfdCB0em9mZnNldDsKKyAgICAgICAg ICAgICAgICB0bXggKz0gdHpvZmZzZXQ7CisgICAgICAgICAgICB9CisjZWxzZQorI2lmbmRlZiBC U0Q0NAorI2lmbmRlZiBOT1RJTUVaT05FCisgICAgICAgICAgICB0bXggKz0gdGltZXpvbmU7Cisj ZW5kaWYJLyogTk9USU1FWk9ORSAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogUGxh bjkgKi8KKyNlbmRpZiAvKiB1bHRyaXggKi8KKyNlbmRpZiAvKiBDT05WRVg5ICovCisjZW5kaWYg LyogQU5ZQlNEICovCisjZW5kaWYgLyogQ09NTUVOVCAod2FzIEJTRDQ0KSAqLworICAgICAgICAg ICAgdG14ICs9IG4gKiA2MEw7CisgICAgICAgICAgICBpKys7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogU2tpcCB0aGUgY29sb24gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg ICAgY2FzZSAxNTogICAgICAgICAgICAgICAgICAgICAgLyogc3M6IHNlY29uZCAqLworICAgICAg ICAgICAgaWYgKChuIDwgMCApIHx8ICggbiA+IDU5KSkgeworICAgICAgICAgICAgICAgIGRlYnVn KEYxMTEsInpzdHJkdCAxNSBiYWQgZGF0ZSAiLGRhdGUsbGVuKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG14ICs9IG47CisgICAgICAg IH0KKyAgICAgICAgdGltZV9zdGFtcCA9IGxvY2FsdGltZSgmdG14KTsKKyAgICAgICAgZGVidWco RjEwMSwienN0cmR0IHRteCAxIiwiIix0bXgpOworICAgICAgICBpZiAoIXRpbWVfc3RhbXApCisg ICAgICAgICAgcmV0dXJuKC0xKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIC8qIFdoeSB3YXMg dGhpcyBoZXJlPyAqLworICAgICAgICB0aW1lX3N0YW1wID0gbG9jYWx0aW1lKCZ0bXgpOworICAg ICAgICBkZWJ1ZyhGMTAxLCJ6c3RyZHQgdG14IDIiLCIiLHRteCk7CisjZW5kaWYgLyogQ09NTUVO VCAqLworI2lmZGVmIEJTRDQ0CisgICAgICAgIHsgICAvKiBOZXcgdG8gNy4wIC0gV29ya3MgaW4g YXQgYXQgbGVhc3QgQlNESSAzLjEgYW5kIEZyZWVCU0QgMi4yLjcgKi8KKyAgICAgICAgICAgIGxv bmcgeno7CisgICAgICAgICAgICB6eiA9IHRpbWVfc3RhbXAtPnRtX2dtdG9mZjsgLyogU2Vjb25k cyBhd2F5IGZyb20gWmVybyBNZXJpZGlhbiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwienN0 cmR0IEJTRDQ0IHRtX2dtdG9mZiIsIiIsenopOworICAgICAgICAgICAgdG14IC09IHp6OworICAg ICAgICAgICAgZGVidWcoRjEwMSwienN0cmR0IEJTRDQ0IHRteCAzIChHTVQpIiwiIix0bXgpOwor ICAgICAgICB9CisjZWxzZQorICAgICAgICAvKgorICAgICAgICAgICBEYXlsaWdodCBTYXZpbmdz IFRpbWUgYWRqdXN0bWVudC4KKyAgICAgICAgICAgRG8gdGhpcyBldmVyeXdoZXJlIEJVVCBpbiBC U0Q0NCBiZWNhdXNlIGluIEJTRDQ0LAorICAgICAgICAgICB0bV9nbXRvZmYgYWxzbyBpbmNsdWRl cyB0aGUgRFNUIGFkanVzdG1lbnQuCisgICAgICAgICovCisgICAgICAgIGlmICh0aW1lX3N0YW1w LT50bV9pc2RzdCkgeworICAgICAgICAgICAgdG14IC09IDYwTCAqIDYwTDsKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsInpzdHJkdCB0bXggMyAoRFNUKSIsIiIsdG14KTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIEJTRDQ0ICovCisgICAgICAgIG4gPSB0aW1lX3N0YW1wLT50bV95ZWFyOworICAgICAg ICBpZiAobiA8IDMwMCkgeworICAgICAgICAgICAgbiArPSAxOTAwOworICAgICAgICB9CisgICAg fQorICAgIHJldHVybih0bXgpOworfQorCisKKyNpZmRlZiBaTE9DQUxUSU1FCisvKiBaIEwgTyBD IEEgTCBUIEkgTSBFICAtLSAgR01UL1VUQyB0aW1lIHN0cmluZyB0byBsb2NhbCB0aW1lIHN0cmlu ZyAqLworCisvKgorICAgQ2FsbCB3aXRoOiAieXl5eW1tZGQgaGg6bW06c3MiIEdNVC9VVEMgZGF0 ZS10aW1lLgorICAgUmV0dXJuczogICAieXl5eW1tZGQgaGg6bW06c3MiIGxvY2FsIGRhdGUtdGlt ZSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCisqLworc3RhdGljIGNoYXIgemx0aW1idWZb NjRdOworCitjaGFyICoKK3psb2NhbHRpbWUoZ210c3RyaW5nKSBjaGFyICogZ210c3RyaW5nOyB7 CisjaWZkZWYgTV9VTklYCisvKgorICBTQ08gVU5JWCAzLjJ2Mi4wIGFuZCBPRFQgMi4wIGxhY2sg cHJvdG90eXBlcyBmb3IgZnRpbWUoKS4KKyAgT0RUIDMuMCAoMy4ydjQuMiBPUykgaGFzIGEgcHJv dG90eXBlLCB3aGljaCBtYXkgdmFyeSBpbgorICBkZXBlbmRlbmNlIG9uIHRoZSBYUEc0IHN1cHBs ZW1lbnQgcHJlc2VuY2UuICBTbyBhbHdheXMgdXNlCisgIHdoYXQgdGhlIHN5c3RlbSBoZWFkZXIg ZmlsZSBzdXBwbGllcyBpbiBPRFQgMy4wLi4uCisqLworI2lmbmRlZiBPRFQzMAorI2lmbmRlZiBf U0NPX0RTCisgICAgZXh0ZXJuIHZvaWQgZnRpbWUoKTsgIC8qIGV4dGVybiB2b2lkIGZ0aW1lKHN0 cnVjdCB0aW1lYiAqKSAqLworI2VuZGlmIC8qIF9TQ09fRFMgKi8KKyNlbmRpZiAvKiBPRFQzMCAq LworI2Vsc2UKKyNpZm5kZWYgTV9YRU5JWAorICAgIGV4dGVybiBpbnQgZnRpbWUoKTsKKyNlbmRp ZiAvKiBNX1hFTklYICovCisjZW5kaWYgLyogTV9VTklYICovCisgICAgZXh0ZXJuIHN0cnVjdCB0 bSAqIGxvY2FsdGltZSgpOworCisgICAgLyogQW5kIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBkZWNs YXJlZCBhbHdheXMgdGhyb3VnaCBhIGhlYWRlciBmaWxlICovCisjaWZkZWYgSFBVWDEwCisgICAg dGltZV90IHRteDsKKyAgICBsb25nIGRheXM7CisjZWxzZQorI2lmZGVmIEJTRDQ0CisgICAgdGlt ZV90IHRteDsKKyAgICBsb25nIGRheXM7CisjZWxzZQorICAgIGxvbmcgdG14LCBkYXlzOworI2Vu ZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogSFBVWDEwICovCisgICAgaW50IGksIG4sIHgsIGlz bGVhcHllYXI7CisgICAgICAgICAgICAgICAgICAgLyogICAgICAgSiAgRiAgTSAgQSAgIE0gICBK ICAgSiAgIEEgICBTICAgTyAgIE4gICBEICAgKi8KKyAgICAgICAgICAgICAgICAgICAvKiAgICAg IDMxIDI4IDMxIDMwICAzMSAgMzAgIDMxICAzMSAgMzAgIDMxICAzMCAgMzEgICAqLworICAgIHN0 YXRpYworICAgIGludCBtb250aGRheXMgWzEzXSA9IHsgIDAsMCwzMSw1OSw5MCwxMjAsMTUxLDE4 MSwyMTIsMjQzLDI3MywzMDQsMzM0IH07CisgICAgY2hhciBzWzVdOworICAgIHN0cnVjdCB0bSAq dGltZV9zdGFtcDsKKworI2lmZGVmIEJTRDQ0CisgICAgc3RydWN0IHRpbWV2YWwgdHBbMl07Cisj ZWxzZQorI2lmZGVmIFY3CisgICAgc3RydWN0IHV0aW1idWYgeworICAgICAgdGltZV90IHRpbWVw WzJdOyAgICAgICAgICAvKiBOZXcgYWNjZXNzIGFuZCBtb2RpZmljYXRvbiB0aW1lICovCisgICAg fSB0cDsKKyNlbHNlCisjaWZkZWYgU1lTVVRJTUVICisgICAgc3RydWN0IHV0aW1idWYgdHA7Cisj ZWxzZQorICAgIHN0cnVjdCB1dGltYnVmIHsKKyAgICAgICAgdGltZV90IGF0aW1lOworICAgICAg ICB0aW1lX3QgbXRpbWU7CisgICAgfSB0cDsKKyNlbmRpZiAvKiBTWVNVVElNRUggKi8KKyNlbmRp ZiAvKiBWNyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisKKyNpZmRlZiBBTllCU0QKKyAgICBzdGF0 aWMgc3RydWN0IHRpbWViIHRicDsKKyNlbmRpZiAvKiBBTllCU0QgKi8KKworICAgIGNoYXIgKiBk YXRlID0gZ210c3RyaW5nOworICAgIGludCBsZW47CisKKyAgICBsZW4gPSBzdHJsZW4oZGF0ZSk7 CisgICAgZGVidWcoRjExMSwiemxvY2FsdGltZSIsZGF0ZSxsZW4pOworCisgICAgaWYgKChsZW4g PT0gMCkKKyAgICAgICAgfHwgKGxlbiAhPSAxNykKKyAgICAgICAgfHwgKGRhdGVbOF0gIT0gJyAn KQorICAgICAgICB8fCAoZGF0ZVsxMV0gIT0gJzonKQorICAgICAgICB8fCAoZGF0ZVsxNF0gIT0g JzonKSApIHsKKyAgICAgICAgZGVidWcoRjExMSwiQmFkIGNyZWF0aW9uIGRhdGUgIixkYXRlLGxl bik7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwiemxvY2Fs dGltZSBkYXRlIGNoZWNrIDEiLGRhdGUsbGVuKTsKKyAgICBmb3IoaSA9IDA7IGkgPCA4OyBpKysp IHsKKyAgICAgICAgaWYgKCFpc2RpZ2l0KGRhdGVbaV0pKSB7CisgICAgICAgICAgICBkZWJ1ZyhG MTExLCJCYWQgY3JlYXRpb24gZGF0ZSAiLGRhdGUsbGVuKTsKKyAgICAgICAgICAgIHJldHVybihO VUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1lIGRhdGUg Y2hlY2sgMiIsZGF0ZSxsZW4pOworICAgIGkrKzsKKworICAgIGZvciAoOyBpIDwgMTY7IGkgKz0g MykgeworICAgICAgICBpZiAoKCFpc2RpZ2l0KGRhdGVbaV0pKSB8fCAoIWlzZGlnaXQoZGF0ZVtp ICsgMV0pKSkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiQmFkIGNyZWF0aW9uIGRhdGUgIixk YXRlLGxlbik7CisJICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWJ1 ZyhGMTExLCJ6bG9jYWx0aW1lIGRhdGUgY2hlY2sgMyIsZGF0ZSxsZW4pOworCisgICAgZGVidWco RjEwMCwiemxvY2FsdGltZSBzbyBmYXIgc28gZ29vZCIsIiIsMCk7CisKKyAgICBzWzRdID0gJ1ww JzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSAgICAgICAgICAgICAvKiBGaXggdGhlIHll YXIgKi8KKyAgICAgIHNbaV0gPSBkYXRlW2ldOworCisgICAgbiA9IGF0b2kocyk7CisgICAgZGVi dWcoRjExMSwiemxvY2FsdGltZSB5ZWFyIixzLG4pOworICAgIGlmIChuIDwgMTk3MCkgeworICAg ICAgICBkZWJ1ZyhGMTAwLCJ6bG9jYWx0aW1lIGZhaWxzIC0geWVhciIsIiIsbik7CisgICAgICAg IHJldHVybihOVUxMKTsKKyAgICB9CisKKy8qICBQcmV2aW91cyB5ZWFyJ3MgbGVhcCBkYXlzLiAg VGhpcyB3b24ndCB3b3JrIGFmdGVyIHllYXIgMjEwMC4gKi8KKworICAgIGlzbGVhcHllYXIgPSAo KCBuICUgNCA9PSAwICYmIG4gJSAxMDAgIT0wKSB8fCBuICUgNDAwID09IDApOworICAgIGRheXMg PSAobG9uZykgKG4gLSAxOTcwKSAqIDM2NTsKKyAgICBkYXlzICs9IChuIC0gMTk2OCAtIDEpIC8g NCAtIChuIC0gMTkwMCAtIDEpIC8gMTAwICsgKG4gLSAxNjAwIC0gMSkgLyA0MDA7CisKKyAgICBz WzJdID0gJ1wwJzsKKworICAgIGZvciAoaSA9IDQ7IGkgPCAxNjsgaSArPSAyKSB7CisgICAgICAg IHNbMF0gPSBkYXRlW2ldOworICAgICAgICBzWzFdID0gZGF0ZVtpICsgMV07CisgICAgICAgIG4g PSBhdG9pKHMpOworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgICBjYXNlIDQ6ICAgICAg ICAgICAgICAgICAgICAgICAvKiBNTTogbW9udGggKi8KKyAgICAgICAgICAgIGlmICgobiA8IDEg KSB8fCAoIG4gPiAxMikpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6bG9jYWx0aW1l IDQgYmFkIGRhdGUgIixkYXRlLGxlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF5cyArPSBtb250aGRheXMgW25dOworICAgICAg ICAgICAgaWYgKGlzbGVhcHllYXIgJiYgbiA+IDIpCisgICAgICAgICAgICAgICsrZGF5czsKKyAg ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAg ICAgICAgLyogREQ6IGRheSAqLworICAgICAgICAgICAgaWYgKChuIDwgMSApIHx8ICggbiA+IDMx KSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpsb2NhbHRpbWUgNiBiYWQgZGF0ZSAi LGRhdGUsbGVuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICB0bXggPSAoZGF5cyArIG4gLSAxKSAqIDI0TCAqIDYwTCAqIDYwTDsKKyAg ICAgICAgICAgIGkrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIHRoZSBzcGFjZSAq LworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIDk6ICAgICAgICAgICAg ICAgICAgICAgICAvKiBoaDogaG91ciAqLworICAgICAgICAgICAgaWYgKChuIDwgMCApIHx8ICgg biA+IDIzKSkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsInpsb2NhbHRpbWUgOSBiYWQg ZGF0ZSAiLGRhdGUsbGVuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB0bXggKz0gbiAqIDYwTCAqIDYwTDsKKyAgICAgICAgICAgIGkr KzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIHRoZSBjb2xvbiAqLworICAgICAgICAg ICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIDEyOiAgICAgICAgICAgICAgICAgICAgICAv KiBtbTogbWludXRlICovCisgICAgICAgICAgICBpZiAoKG4gPCAwICkgfHwgKCBuID4gNTkpKSB7 CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiemxvY2FsdGltZSAxMiBiYWQgZGF0ZSAiLGRh dGUsbGVuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICB0bXggKz0gbiAqIDYwTDsKKyAgICAgICAgICAgIGkrKzsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTa2lwIHRoZSBjb2xvbiAqLworICAgICAgICAgICAgY29udGludWU7CisK KyAgICAgICAgICBjYXNlIDE1OiAgICAgICAgICAgICAgICAgICAgICAvKiBzczogc2Vjb25kICov CisgICAgICAgICAgICBpZiAoKG4gPCAwICkgfHwgKCBuID4gNTkpKSB7CisgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiemxvY2FsdGltZSAxNSBiYWQgZGF0ZSAiLGRhdGUsbGVuKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0bXgg Kz0gbjsKKyAgICAgICAgfQorCisvKgorICBBdCB0aGlzIHBvaW50IHRteCBpcyB0aGUgdGltZV90 IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhcmd1bWVudCBkYXRlLXRpbWUKKyAgc3RyaW5nIHdpdGhv dXQgYW55IHRpbWV6b25lIG9yIERTVCBhZGp1c3RtZW50cy4gIFRoZXJlZm9yZSBpdCBzaG91bGQg YmUKKyAgdGhlIHNhbWUgYXMgdGhlIHRpbWVfdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgR01UL1VU QyB0aW1lLiAgTm93IHdlIHNob3VsZAorICBiZSBhYmxlIHRvIGZlZWQgaXQgdG8gbG9jYWx0aW1l KCkgYW5kIGhhdmUgaXQgY29udmVydGVkIHRvIGEgc3RydWN0IHRtCisgIHJlcHJlc2VudGluZyB0 aGUgbG9jYWwgdGltZSBlcXVpdmFsZW50IG9mIHRoZSBnaXZlbiBVVEMgdGltZS4KKyovCisgICAg ICAgIHRpbWVfc3RhbXAgPSBsb2NhbHRpbWUoJnRteCk7CisgICAgICAgIGlmICghdGltZV9zdGFt cCkKKyAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisvKiBOb3cgd2Ugc2ltcGx5IHJl Zm9ybWF0IHRoZSBzdHJ1Y3QgdG0gdG8gYSBzdHJpbmcgKi8KKworICAgIHggPSB0aW1lX3N0YW1w LT50bV95ZWFyOworICAgIGlmICh0aW1lX3N0YW1wLT50bV95ZWFyIDwgNzAgfHwgdGltZV9zdGFt cC0+dG1feWVhciA+IDgwOTkpCisgICAgICByZXR1cm4oTlVMTCk7CisgICAgaWYgKHRpbWVfc3Rh bXAtPnRtX21vbiA8IDAgfHwgdGltZV9zdGFtcC0+dG1fbW9uID4gMTEpCisgICAgICByZXR1cm4o TlVMTCk7CisgICAgaWYgKHRpbWVfc3RhbXAtPnRtX21kYXkgPCAxIHx8IHRpbWVfc3RhbXAtPnRt X21kYXkgPiAzMSkKKyAgICAgIHJldHVybihOVUxMKTsKKyAgICBpZiAodGltZV9zdGFtcC0+dG1f aG91ciA8IDAgfHwgdGltZV9zdGFtcC0+dG1faG91ciA+IDI0KQorICAgICAgcmV0dXJuKE5VTEwp OworICAgIGlmICh0aW1lX3N0YW1wLT50bV9taW4gPCAwIHx8IHRpbWVfc3RhbXAtPnRtX21pbiA+ IDYwKQorICAgICAgcmV0dXJuKE5VTEwpOworICAgIGlmICh0aW1lX3N0YW1wLT50bV9zZWMgPCAw IHx8IHRpbWVfc3RhbXAtPnRtX3NlYyA+IDYwKQorICAgICAgcmV0dXJuKE5VTEwpOworICAgIHNw cmludGYoemx0aW1idWYsIiUwNGQlMDJkJTAyZCAlMDJkOiUwMmQ6JTAyZCIsCisJICAgIHRpbWVf c3RhbXAtPnRtX3llYXIgKyAxOTAwLAorCSAgICB0aW1lX3N0YW1wLT50bV9tb24gKyAxLAorCSAg ICB0aW1lX3N0YW1wLT50bV9tZGF5LAorCSAgICB0aW1lX3N0YW1wLT50bV9ob3VyLAorCSAgICB0 aW1lX3N0YW1wLT50bV9taW4sCisJICAgIHRpbWVfc3RhbXAtPnRtX3NlYworCSAgICApOworICAg IHJldHVybigoY2hhciAqKXpsdGltYnVmKTsKK30KKyNlbmRpZiAvKiBaTE9DQUxUSU1FICovCisj ZW5kaWYgLyogTk9USU1FU1RBTVAgKi8KKworLyogWiBTIFQgSSBNIEUgIC0tICBTZXQgbW9kaWZp Y2F0aW9uIGRhdGUvdGltZStwZXJtaXNzaW9ucyBmb3IgaW5jb21pbmcgZmlsZSAqLworLyoKKyBD YWxsIHdpdGg6CisgZiAgPSBwb2ludGVyIHRvIG5hbWUgb2YgZXhpc3RpbmcgZmlsZS4KKyB5eSA9 IHBvaW50ZXIgdG8gYSBLZXJtaXQgZmlsZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGluIHdoaWNoIHl5 LT5kYXRlLnZhbAorICAgICAgaXMgYSBkYXRlIG9mIHRoZSBmb3JtIHl5eXltbWRkIGhoOm1tOnNz LCBlLmcuIDE5OTAwMjA4IDEzOjAwOjAwLgorICAgICAgeXktPmxwcm90ZWN0LnZhbCAmIHl5LT5n cHJvdGVjdC52YWwgYXJlIHBlcm1pc3Npb24vcHJvdGVjdGlvbiB2YWx1ZXMuCisgeCAgPSBpcyBh IGZ1bmN0aW9uIGNvZGU6IDAgbWVhbnMgdG8gc2V0IHRoZSBmaWxlJ3MgYXR0cmlidXRlcyBhcyBn aXZlbi4KKyAgICAgIDEgbWVhbnMgY29tcGFyZSB0aGUgZGF0ZSBpbiBzdHJ1Y3QgeXkgd2l0aCB0 aGUgZmlsZSBjcmVhdGlvbiBkYXRlLgorIFJldHVybnM6CisgLTEgb24gYW55IGtpbmQgb2YgZXJy b3IuCisgIDAgaWYgeCBpcyAwIGFuZCB0aGUgYXR0cmlidXRlcyB3ZXJlIHNldCBzdWNjZXNzZnVs bHkuCisgIDAgaWYgeCBpcyAxIGFuZCBkYXRlIGZyb20gYXR0cmlidXRlIHN0cnVjdHVyZSA8PSBm aWxlIGNyZWF0aW9uIGRhdGUuCisgIDEgaWYgeCBpcyAxIGFuZCBkYXRlIGZyb20gYXR0cmlidXRl IHN0cnVjdHVyZSA+IGZpbGUgY3JlYXRpb24gZGF0ZS4KKyovCitpbnQKK3pzdGltZShmLHl5LHgp CisgICAgY2hhciAqZjsgc3RydWN0IHphdHRyICp5eTsgaW50IHg7CisvKiB6c3RpbWUgKi8gewor ICAgIGludCByID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlICov CisjaWZkZWYgQ0tfUEVSTVMKKyAgICBpbnQgc2V0cGVybXMgPSAwOworI2VuZGlmIC8qIENLX1BF Uk1TICovCisgICAgaW50IHNldGRhdGUgPSAwOworCisvKiBJdCBpcyBpZmRlZidkIFRJTUVTVEFN UCBiZWNhdXNlIGl0IG1pZ2h0IG5vdCB3b3JrIG9uIFY3LiBia0BrdWxsbWFyLnNlLiAgKi8KKwor I2lmZGVmIFRJTUVTVEFNUAorI2lmZGVmIEJTRDQ0CisgICAgZXh0ZXJuIGludCB1dGltZXMoKTsK KyNlbHNlCisgICAgZXh0ZXJuIGludCB1dGltZSgpOworI2VuZGlmIC8qIEJTRDQ0ICovCisKKyAg ICBzdHJ1Y3Qgc3RhdCBzYjsKKworLyogQXQgbGVhc3QsIHRoZSBkZWNsYXJhdGlvbnMgZm9yIGlu dCBmdW5jdGlvbnMgYXJlIG5vdCBuZWVkZWQgYW55d2F5ICovCisKKyNpZmRlZiBCU0Q0NAorICAg IHN0cnVjdCB0aW1ldmFsIHRwWzJdOworICAgIGxvbmcgeHRpbWV6b25lOworI2Vsc2UKKyNpZmRl ZiBWNworICAgIHN0cnVjdCB1dGltYnVmIHsKKwl0aW1lX3QgdGltZXBbMl07CQkvKiBOZXcgYWNj ZXNzIGFuZCBtb2RpZmljYXRvbiB0aW1lICovCisgICAgfSB0cDsKKyAgICBjaGFyICp0ejsKKyAg ICBsb25nIHRpbWV6b25lOyAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBjYXNlIG5vdCBkZWZp bmVkIGluIC5oIGZpbGUgKi8KKyNlbHNlCisjaWZkZWYgU1lTVVRJTUVICisgICAgc3RydWN0IHV0 aW1idWYgdHA7CisjZWxzZQorICAgIHN0cnVjdCB1dGltYnVmIHsKKyAgICAgICAgdGltZV90IGF0 aW1lOworICAgICAgICB0aW1lX3QgbXRpbWU7CisgICAgfSB0cDsKKyNlbmRpZiAvKiBTWVNVVElN RUggKi8KKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisKKyAgICBsb25nIHRt ID0gMEw7CisKKyAgICBpZiAoIWYpIGYgPSAiIjsKKyAgICBpZiAoISpmKSByZXR1cm4oLTEpOwor ICAgIGlmICgheXkpIHJldHVybigtMSk7CisKKyNpZmRlZiBDS1JPT1QKKyAgICBkZWJ1ZyhGMTEx LCJ6c3RpbWUgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7CisgICAgaWYgKGNrcm9vdHNldCkg aWYgKCF6aW5yb290KGYpKSB7CisJZGVidWcoRjExMCwienN0aW1lIHNldHJvb3QgdmlvbGF0aW9u IixmLDApOworCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tST09UICovCisKKyAgICBp ZiAoeXktPmRhdGUubGVuID09IDApIHsgICAgICAgICAgICAvKiBObyBkYXRlIGluIHN0cnVjdCAq LworICAgICAgICBpZiAoeXktPmxwcm90ZWN0LmxlbiAhPSAwKSB7ICAgIC8qIFNvIGdvIGRvIHBl cm1pc3Npb25zICovCisgICAgICAgICAgICBnb3RvIHpzcGVybXM7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6c3RpbWU6IG5vdGhpbmcgdG8gZG8iLCIiLDApOwor ICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgfQorICAgIGlmICgodG0gPSB6 c3RyZHQoeXktPmRhdGUudmFsLHl5LT5kYXRlLmxlbikpIDwgMCkgeworICAgICAgICBkZWJ1ZyhG MTAxLCJ6c3RpbWU6IHpzdHJkdCBmYWlscyIsIiIsMCk7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorICAgIGRlYnVnKEYxMDEsInpzdGltZTogdG0iLCIiLHRtKTsKKyAgICBkZWJ1ZyhGMTEx LCJ6c3RpbWU6IEEtcGt0IGRhdGUgb2sgIix5eS0+ZGF0ZS52YWwseXktPmRhdGUubGVuKTsKKwor ICAgIGlmIChzdGF0KGYsJnNiKSkgeyAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdGltZSBm b3IgdGhlIGZpbGUgKi8KKwlkZWJ1ZyhGMTAxLCJTVEFUIiwiIiwxNCk7CisgICAgICAgIGRlYnVn KEYxMTEsInpzdGltZTogQ2FuJ3Qgc3RhdCBmaWxlOiIsZixlcnJubyk7CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDE1KTsKKyAgICBzZXRkYXRl ID0gMTsKKworICB6c3Blcm1zOgorI2lmZGVmIENLX1BFUk1TCisgICAgeworICAgICAgICBpbnQg aSwgeCA9IDAsIHh4LCBmbGFnID0gMDsKKyAgICAgICAgY2hhciAqIHM7CisjaWZkZWYgREVCVUcK KyAgICAgICAgY2hhciBvYnVmWzI0XTsKKyAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAg ICAgZGVidWcoRjExMSwienN0aW1lIGxwZXJtcyIseXktPmxwcm90ZWN0LnZhbCx5eS0+bHByb3Rl Y3QubGVuKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInpzdGltZSBncGVybXMiLHl5LT5ncHJv dGVjdC52YWwseXktPmdwcm90ZWN0Lmxlbik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6c3Rp bWUgc3lzdGVtIGlkIix5eS0+c3lzdGVtaWQudmFsLDApOworICAgICAgICAgICAgc3ByaW50Zihv YnVmLCIlbyIsc2Iuc3RfbW9kZSk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6c3RpbWUgZmls ZSBwZXJtcyBiZWZvcmUiLG9idWYsMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLwor CisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIGlzZ3Vlc3QiLCIi LGlzZ3Vlc3QpOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgY2t4cGVybXMiLCIiLGNreHBl cm1zKTsKKyAgICAgICAgaWYgKGlzZ3Vlc3QpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAg ICAvKiBDbGVhciBvd25lciBwZXJtaXNzaW9ucyAqLworICAgICAgICAgICAgc2Iuc3RfbW9kZSAm PSAodW5zaWduZWQpIDAxNzcwNzc7IC8qICgxNiBiaXRzKSAqLworI2Vsc2UKKyAgICAgICAgICAg IC8qIFNldCBwZXJtaXNzaW9ucyBmcm9tIGNreHBlcm1zIHZhcmlhYmxlICovCisgICAgICAgICAg ICBzYi5zdF9tb2RlID0gY2t4cGVybXM7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAg ICAgZGVidWcoRjEwMSwienN0aW1lIGlzZ3Vlc3Qgc2Iuc3RfbW9kZSIsIiIsc2Iuc3RfbW9kZSk7 CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgLyogV2UgYWxyZWFkeSBzZXQgdGhlbSBpbiB6 b3Blbm8oKSAqLworICAgICAgICAgICAgc2V0cGVybXMgPSAxOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAgICAgICAgIGZsYWcgPSAwOworICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19M T0dJTiAqLworICAgICAgICAgIGlmICgoeXktPmxwcm90ZWN0LmxlbiA+IDAgJiYgIC8qIEhhdmUg bG9jYWwtZm9ybWF0IHBlcm1pc3Npb25zICovCisgICAgICAgICAgICB5eS0+c3lzdGVtaWQubGVu ID4gMCAmJiAgICAgLyogZnJvbSBBLXBhY2tldC4uLiAqLworI2lmZGVmIFVOSVgKKyAgICAgICAg ICAgICFzdHJjbXAoeXktPnN5c3RlbWlkLnZhbCwiVTEiKSAvKiBBTkQgeW91IGFyZSBzYW1lIGFz IG1lICovCisjZWxzZQorICAgICAgICAgICAgMAorI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAg ICAgICApIHx8ICh5eS0+bHByb3RlY3QubGVuIDwgMCkgLyogT1IgYnkgaW5oZXJpdGFuY2UgZnJv bSBvbGQgZmlsZSAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBmbGFnID0gMTsKKyAg ICAgICAgICAgIHMgPSB5eS0+bHByb3RlY3QudmFsOyAgICAgICAvKiBVTklYIGZpbGVtb2RlICov CisgICAgICAgICAgICB4eCA9IHl5LT5scHJvdGVjdC5sZW47CisgICAgICAgICAgICBpZiAoeHgg PCAwKSAgICAgICAgICAgICAgICAgLyogbGVuIDwgMCBtZWFucyBpbmhlcml0YW5jZSAqLworICAg ICAgICAgICAgICB4eCA9IDAgLSB4eDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB4eDsg aSsrKSB7ICAvKiBEZWNvZGUgb2N0YWwgc3RyaW5nICovCisgICAgICAgICAgICAgICAgaWYgKCpz IDw9ICc3JyAmJiAqcyA+PSAnMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IDggKiB4ICsg KGludCkoKnMpIC0gJzAnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgIGZsYWcgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgfQorI2lmZGVmIERFQlVH CisgICAgICAgICAgICBzcHJpbnRmKG9idWYsIiVvIix4KTsKKyAgICAgICAgICAgIGRlYnVnKEYx MTAsInpzdGltZSBvY3RhbCBscGVybSIsb2J1ZiwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAg ICAgICB9IGVsc2UgaWYgKCFmbGFnICYmIHl5LT5ncHJvdGVjdC5sZW4gPiAwKSB7CisgICAgICAg ICAgICBpbnQgZzsKKyNpZmRlZiBDS19TQ08zMlY0CisgICAgICAgICAgICBtb2RlX3QgbWFzazsK KyNlbHNlCisgICAgICAgICAgICBpbnQgbWFzazsKKyNlbmRpZiAvKiBDS19TQ08zMlY0ICovCisg ICAgICAgICAgICBtYXNrID0gdW1hc2soMCk7ICAgICAgICAgICAgLyogR2V0IHVtYXNrICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgbWFzayAxIiwiIixtYXNrKTsKKyAgICAgICAg ICAgIHVtYXNrKG1hc2spOyAgICAgICAgICAgICAgICAvKiBQdXQgaXQgYmFjayAqLworICAgICAg ICAgICAgbWFzayBePSAwNzc3OyAgICAgICAgICAgICAgIC8qIEZsaXAgdGhlIGJpdHMgKi8KKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBtYXNrIDIiLCIiLG1hc2spOworICAgICAgICAg ICAgZyA9IHh1bmNoYXIoKih5eS0+Z3Byb3RlY3QudmFsKSk7IC8qIERlY29kZSBnZW5lcmljIHBy b3RlY3Rpb24gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBncHJvdGVjdCIsIiIs Zyk7CisjaWZkZWYgU19JUlVTUgorICAgICAgICAgICAgZGVidWcoRjEwMCwienN0aW1lIFNfSVJV U1IiLCIiLDApOworICAgICAgICAgICAgaWYgKGcgJiAxKSB4IHw9IFNfSVJVU1I7ICAgIC8qIFJl YWQgcGVybWlzc2lvbiAqLworICAgICAgICAgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogU19JUlVT UiAqLworI2lmZGVmIFNfSVdVU1IKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInpzdGltZSBTX0lX VVNSIiwiIiwwKTsKKyAgICAgICAgICAgIGlmIChnICYgMikgeCB8PSBTX0lXVVNSOyAgICAvKiBX cml0ZSBwZXJtaXNzaW9uICovCisgICAgICAgICAgICBpZiAoZyAmIDE2KSB4IHw9IFNfSVdVU1I7 ICAgLyogRGVsZXRlIHBlcm1pc3Npb24gKi8KKyAgICAgICAgICAgIGZsYWcgPSAxOworI2VuZGlm IC8qIFNfSVdVU1IgKi8KKyNpZmRlZiBTX0lYVVNSCisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6 c3RpbWUgU19JWFVTUiIsIiIsMCk7CisgICAgICAgICAgICBpZiAoZyAmIDQpICAgICAgICAgICAg ICAgICAgLyogSGFzIGV4ZWN1dGUgcGVybWlzc2lvbiBiaXQgKi8KKyAgICAgICAgICAgICAgeCB8 PSBTX0lYVVNSOworICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIERv ZXNuJ3QgaGF2ZSBpdCAqLworICAgICAgICAgICAgICBtYXNrICY9IDA2NjY7ICAgICAgICAgICAg IC8qIHNvIGFsc28gY2xlYXIgaXQgb3V0IG9mIG1hc2sgKi8KKyAgICAgICAgICAgIGZsYWcgPSAx OworI2VuZGlmIC8qIFNfSVhVU1IgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInpzdGltZSBt YXNrIHgiLCIiLHgpOworICAgICAgICAgICAgeCB8PSBtYXNrOworICAgICAgICAgICAgZGVidWco RjEwMSwienN0aW1lIG1hc2sgeHxtYXNrIiwiIix4KTsKKyAgICAgICAgfQorICAgICAgICBkZWJ1 ZyhGMTAxLCJ6c3RpbWUgZmxhZyIsIiIsZmxhZyk7CisgICAgICAgIGlmIChmbGFnKSB7CisjaWZk ZWYgU19JRk1UCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgU19JRk1UIHgiLCIiLHgp OworICAgICAgICAgICAgc2Iuc3RfbW9kZSA9IChzYi5zdF9tb2RlICYgU19JRk1UKSB8IHg7Cisg ICAgICAgICAgICBzZXRwZXJtcyA9IDE7CisjZWxzZQorI2lmZGVmIF9JRk1UCisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgX0lGTVQgeCIsIiIseCk7CisgICAgICAgICAgICBzYi5zdF9t b2RlID0gKHNiLnN0X21vZGUgJiBfSUZNVCkgfCB4OworICAgICAgICAgICAgc2V0cGVybXMgPSAx OworI2VuZGlmIC8qIF9JRk1UICovCisjZW5kaWYgLyogU19JRk1UICovCisgICAgICAgIH0KKyNp ZmRlZiBERUJVRworICAgICAgICBzcHJpbnRmKG9idWYsIiUwNG8iLHNiLnN0X21vZGUpOworICAg ICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWUgZmlsZSBwZXJtcyBhZnRlciIsb2J1ZixzZXRwZXJtcyk7 CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICB9CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworICAg IGRlYnVnKEYxMDEsInpzdGltZTogc2Iuc3RfYXRpbWUiLCIiLHNiLnN0X2F0aW1lKTsKKworI2lm ZGVmIEJTRDQ0CisgICAgdHBbMF0udHZfc2VjID0gc2Iuc3RfYXRpbWU7ICAgICAgICAgLyogQWNj ZXNzIHRpbWUgZmlyc3QgKi8KKyAgICB0cFsxXS50dl9zZWMgPSB0bTsgICAgICAgICAgICAgICAg ICAvKiBVcGRhdGUgdGltZSBzZWNvbmQgKi8KKyAgICBkZWJ1ZyhGMTAwLCJ6c3RpbWU6IEJTRDQ0 IG1vZHRpbWUiLCIiLDApOworI2Vsc2UKKyNpZmRlZiBWNworICAgIHRwLnRpbWVwWzBdID0gdG07 ICAgICAgICAgICAgICAgICAgIC8qIFNldCBtb2RpZi4gdGltZSB0byBjcmVhdGlvbiBkYXRlICov CisgICAgdHAudGltZXBbMV0gPSBzYi5zdF9hdGltZTsgICAgICAgICAgLyogRG9uJ3QgY2hhbmdl IHRoZSBhY2Nlc3MgdGltZSAqLworICAgIGRlYnVnKEYxMDAsInpzdGltZTogVjcgbW9kdGltZSIs IiIsMCk7CisjZWxzZQorI2lmZGVmIFNZU1VUSU1FSAorICAgIHRwLm1vZHRpbWUgPSB0bTsgICAg ICAgICAgICAgICAgICAgIC8qIFNldCBtb2RpZi4gdGltZSB0byBjcmVhdGlvbiBkYXRlICovCisg ICAgdHAuYWN0aW1lID0gc2Iuc3RfYXRpbWU7ICAgICAgICAgICAgLyogRG9uJ3QgY2hhbmdlIHRo ZSBhY2Nlc3MgdGltZSAqLworICAgIGRlYnVnKEYxMDAsInpzdGltZTogU1lTVVRJTUVIIG1vZHRp bWUiLCIiLDApOworI2Vsc2UKKyAgICB0cC5tdGltZSA9IHRtOyAgICAgICAgICAgICAgICAgICAg ICAvKiBTZXQgbW9kaWYuIHRpbWUgdG8gY3JlYXRpb24gZGF0ZSAqLworICAgIHRwLmF0aW1lID0g c2Iuc3RfYXRpbWU7ICAgICAgICAgICAgIC8qIERvbid0IGNoYW5nZSB0aGUgYWNjZXNzIHRpbWUg Ki8KKyAgICBkZWJ1ZyhGMTAwLCJ6c3RpbWU6IGRlZmF1bHQgbW9kdGltZSIsIiIsMCk7CisjZW5k aWYgLyogU1lTVVRJTUVIICovCisjZW5kaWYgLyogVjcgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLwor CisgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhlY3V0ZSBkZXNp cmVkIGZ1bmN0aW9uICovCisgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU2V0IHRoZSBjcmVhdGlvbiBkYXRlIG9mIHRoZSBmaWxlICovCisjaWZkZWYgQ0tfUEVSTVMg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIHBlcm1pc3Npb25zICovCisvKgorICBOT1RF OiBJZiB3ZSBhcmUgaW5oZXJpdGluZyBwZXJtaXNzaW9ucyBmcm9tIGEgcHJldmlvdXMgZmlsZSwg YW5kIHRoZQorICBwcmV2aW91cyBmaWxlIHdhcyBhIGRpcmVjdG9yeSwgdGhpcyB3b3VsZCB0dXJu IHRoZSBuZXcgZmlsZSBpbnRvIGEgZGlyZWN0b3J5CisgIHRvbywgYnV0IGl0J3Mgbm90LCBzbyB3 ZSB0cnkgdG8gdW5zZXQgdGhlIHJpZ2h0IGJpdC4gIEx1Y2tpbHksIHRoaXMgY29kZQorICB3aWxs IHByb2JhYmx5IG5ldmVyIGJlIGV4ZWN1dGVkIHNpbmNlIHRoZSB1cHBlciBsZXZlbCBtb2R1bGVz IGRvIG5vdCBhbGxvdworICByZWNlcHRpb24gb2YgYSBmaWxlIHRoYXQgaGFzIHRoZSBzYW1lIG5h bWUgYXMgYSBkaXJlY3RvcnkuCisKKyAgTk9URSAyOiBXZSBjaGFuZ2UgdGhlIHBlcm1pc3Npb25z ICpiZWZvcmUqIHdlIGNoYW5nZSB0aGUgbW9kaWZpY2F0aW9uIHRpbWUsCisgIG90aGVyd2lzZSBj aGFuZ2luZyB0aGUgcGVybWlzc2lvbnMgd291bGQgc2V0IHRoZSBtb2QgdGltZSB0byB0aGUgcHJl c2VudAorICB0aW1lLgorKi8KKyAgICAgICAgeworICAgICAgICAgICAgaW50IHg7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ6c3RpbWUgc2V0cGVybXMiLCIiLHNldHBlcm1zKTsKKyAgICAgICAg ICAgIGlmIChTX0lTRElSKHNiLnN0X21vZGUpKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwienN0aW1lIERJUkVDVE9SWSBiaXQgb24iLCIiLHNiLnN0X21vZGUpOworICAgICAgICAgICAg ICAgIHNiLnN0X21vZGUgXj0gMDA0MDAwMDsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6 c3RpbWUgRElSRUNUT1JZIGJpdCBvZmYiLCIiLHNiLnN0X21vZGUpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKHNldHBlcm1zKSB7CisgICAgICAgICAgICAgICAgeCA9IGNobW9kKGYs c2Iuc3RfbW9kZSk7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienN0aW1lIGNobW9kIiwi Iix4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoeCA8IDApIHJldHVy bigtMSk7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworICAgICAgICBpZiAoIXNldGRhdGUpICAg ICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IGhhdmUgYSBkYXRlICovCisgICAgICAgICAgcmV0 dXJuKDApOyAgICAgICAgICAgICAgICAgICAgLyogc28gc2tpcCB0aGUgZm9sbG93aW5nLi4uICov CisKKyAgICAgICAgaWYgKAorI2lmZGVmIEJTRDQ0CisgICAgICAgICAgICB1dGltZXMoZix0cCkK KyNlbHNlCisgICAgICAgICAgICB1dGltZShmLCZ0cCkKKyNlbmRpZiAvKiBCU0Q0NCAqLworICAg ICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpeCBtb2RpZmljYXRpb24g dGltZSAqLworICAgICAgICAgICAgZGVidWcoRjExMSwienN0aW1lIDA6IGNhbid0IHNldCBtb2R0 aW1lIGZvciBmaWxlIixmLGVycm5vKTsKKyAgICAgICAgICAgIHIgPSAtMTsKKyAgICAgICAgfSBl bHNlICB7CisJICAgIC8qIEluY2x1ZGluZyB0aGUgbW9kdGltZSBoZXJlIGlzIG5vdCBwb3J0YWJs ZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwienN0aW1lIDA6IG1vZHRpbWUgc2V0IGZvciBm aWxlIixmLDApOworICAgICAgICAgICAgciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21wYXJlIHRo ZSBkYXRlcyAqLworLyoKKyAgVGhpcyB3YXMgc3RfYXRpbWUsIHdoaWNoIHdhcyB3cm9uZy4gIFdl IHdhbnQgdGhlIGZpbGUtZGF0YSBtb2RpZmljYXRpb24KKyAgdGltZSwgc3RfbXRpbWUuCisqLwor ICAgICAgICBkZWJ1ZyhGMTExLCJ6c3RpbWUgMTogY29tcGFyZSIsZixzYi5zdF9tdGltZSk7Cisg ICAgICAgIGRlYnVnKEYxMTEsInpzdGltZSAxOiBjb21wYXJlIiwicGFja2V0Iix0bSk7CisKKyAg ICAgICAgciA9IChzYi5zdF9tdGltZSA8IHRtKSA/IDAgOiAxOworICAgICAgICBicmVhazsKKwor ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAg ICAgIHIgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogVElNRVNUQU1QICovCisgICAgcmV0dXJuKHIp OworfQorCisvKiBGaW5kIGluaXRpYWxpemF0aW9uIGZpbGUuICovCisKKyNpZmRlZiBOT1RVU0VE CitpbnQKK3prZXJtaW5pKCkgeworLyogIG5vdGhpbmcgaGVyZSBmb3IgVW5peC4gIFRoaXMgZnVu Y3Rpb24gYWRkZWQgZm9yIGJlbmVmaXQgb2YgVk1TIEtlcm1pdC4gICovCisgICAgcmV0dXJuKDAp OworfQorI2VuZGlmIC8qIE5PVFVTRUQgKi8KKworI2lmbmRlZiBVTklYCisvKiBIaXN0b3JpY2Fs IC0tIG5vdCB1c2VkIGluIFVuaXggYW55IG1vcmUgKDIwMDEtMTEtMDMpICovCisjaWZuZGVmIE5P RlJJTExTCitpbnQKK3ptYWlsKHAsZikgY2hhciAqcDsgY2hhciAqZjsgeyAgICAgICAgICAvKiBT ZW5kIGZpbGUgZiBhcyBtYWlsIHRvIGFkZHJlc3MgcCAqLworLyoKKyAgUmV0dXJucyAwIG9uIHN1 Y2Nlc3MKKyAgIDIgaWYgbWFpbCBkZWxpdmVyZWQgYnV0IHRlbXAgZmlsZSBjYW4ndCBiZSBkZWxl dGVkCisgIC0yIGlmIG1haWwgY2FuJ3QgYmUgZGVsaXZlcmVkCisgIC0xIG9uIGZpbGUgYWNjZXNz IGVycm9yCisgIFRoZSBVTklYIHZlcnNpb24gYWx3YXlzIHJldHVybnMgMCBiZWNhdXNlIGl0IGNh bid0IGdldCBhIGdvb2QgcmV0dXJuCisgIGNvZGUgZnJvbSB6c3lzY21kLgorKi8KKyAgICBpbnQg bjsKKworI2lmZGVmIENLX0xPR0lOCisgICAgaWYgKGlzZ3Vlc3QpCisgICAgICByZXR1cm4oLTIp OworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAgICBpZiAoIWYpIGYgPSAiIjsKKyAgICBpZiAo ISpmKSByZXR1cm4oLTEpOworCisjaWZkZWYgQ0tST09UCisgICAgZGVidWcoRjExMSwiem1haWwg c2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7CisgICAgaWYgKGNrcm9vdHNldCkgaWYgKCF6aW5y b290KGYpKSB7CisJZGVidWcoRjExMCwiem1haWwgc2V0cm9vdCB2aW9sYXRpb24iLGYsMCk7CisJ cmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyogQ0tST09UICovCisKKyNpZmRlZiBCU0Q0Cisv KiBUaGUgaWRlYSBpcyB0byB1c2UgL3Vzci91Y2IvbWFpbCwgcmF0aGVyIHRoYW4gcmVndWxhciBt YWlsLCBzbyB0aGF0ICAgKi8KKy8qIGEgc3ViamVjdCBsaW5lIGNhbiBiZSBpbmNsdWRlZCB3aXRo IC1zLiAgU2luY2Ugd2UgY2FuJ3QgZGVwZW5kIG9uIHRoZSAqLworLyogdXNlcidzIHBhdGgsIHdl IHVzZSB0aGUgY29udmVudGlvbiB0aGF0IC91c3IvdWNiL01haWwgPSAvdXNyL3VjYi9tYWlsICov CisvKiBhbmQgZXZlbiBpZiBNYWlsIGhhcyBiZWVuIG1vdmVkIHRvIHNvbWV3aGVyZSBlbHNlLCB0 aGlzIHNob3VsZCBzdGlsbCAgKi8KKy8qIGZpbmQgaXQuLi4gIFRoZSBzZWFyY2ggY291bGQgYmUg bWFkZSBtb3JlIHJlbGlhYmxlIGJ5IGFjdHVhbGx5IHVzaW5nICAqLworLyogYWNjZXNzKCkgdG8g c2VlIGlmIC91c3IvdWNiL01haWwgZXhpc3RzLiAqLworCisgICAgbiA9IHN0cmxlbihmKTsKKyAg ICBuID0gbiArIG4gKyAxNSArIChpbnQpc3RybGVuKHApOworCisgICAgaWYgKG4gPiBaTUJVRkxF TikKKyAgICAgIHJldHVybigtMik7CisKKyNpZmRlZiBER1VYNTQwCisgICAgc3ByaW50Zih6bWJ1 ZiwibWFpbHggLXMgJWMlcyVjICVzIDwgJXMiLCAnIicsIGYsICciJywgcCwgZik7CisjZWxzZQor ICAgIHNwcmludGYoem1idWYsIk1haWwgLXMgJWMlcyVjICVzIDwgJXMiLCAnIicsIGYsICciJywg cCwgZik7CisjZW5kaWYgLyogREdVWDU0MCAqLworICAgIHpzeXNjbWQoem1idWYpOworI2Vsc2UK KyNpZmRlZiBTVk9SUE9TSVgKKyNpZm5kZWYgT1hPUworICAgIHNwcmludGYoem1idWYsIm1haWwg JXMgPCAlcyIsIHAsIGYpOworI2Vsc2UgLyogT1hPUyAqLworICAgIHNwcmludGYoem1idWYsIm1h aWx4IC1zICVjJXMlYyAlcyA8ICVzIiwgJyInLCBmLCAnIicsIHAsIGYpOworI2VuZGlmIC8qIE9Y T1MgKi8KKyAgICB6c3lzY21kKHptYnVmKTsKKyNlbHNlCisgICAgKnptYnVmID0gJ1wwJzsKKyNl bmRpZgorI2VuZGlmCisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIE5PRlJJTExTICovCisj ZW5kaWYgLyogVU5JWCAqLworCisjaWZuZGVmIE5PRlJJTExTCitpbnQKK3pwcmludChwLGYpIGNo YXIgKnA7IGNoYXIgKmY7IHsgICAgICAgICAvKiBQcmludCBmaWxlIGYgd2l0aCBvcHRpb25zIHAg Ki8KKyAgICBleHRlcm4gY2hhciAqIHByaW50ZXJuYW1lOyAgICAgICAgICAvKiBGcm9tIGNrdXVz My5jICovCisgICAgZXh0ZXJuIGludCBwcmludHBpcGU7CisgICAgaW50IG47CisKKyNpZmRlZiBD S19MT0dJTgorICAgIGlmIChpc2d1ZXN0KQorICAgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBD S19MT0dJTiAqLworCisgICAgaWYgKCFmKSBmID0gIiI7CisgICAgaWYgKCEqZikgcmV0dXJuKC0x KTsKKworI2lmZGVmIENLUk9PVAorICAgIGRlYnVnKEYxMTEsInpwcmludCBzZXRyb290Iixja3Jv b3QsY2tyb290c2V0KTsKKyAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QoZikpIHsKKwlk ZWJ1ZyhGMTEwLCJ6cHJpbnQgc2V0cm9vdCB2aW9sYXRpb24iLGYsMCk7CisJcmV0dXJuKC0xKTsK KyAgICB9CisjZW5kaWYgLyogQ0tST09UICovCisKKyAgICBkZWJ1ZyhGMTEwLCJ6cHJpbnQgZmls ZSIsZiwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ6cHJpbnQgZmxhZ3MiLHAsMCk7CisgICAgZGVidWco RjExMCwienByaW50IHByaW50ZXJuYW1lIixwcmludGVybmFtZSwwKTsKKyAgICBkZWJ1ZyhGMTAx LCJ6cHJpbnQgcHJpbnRwaXBlIiwiIixwcmludHBpcGUpOworCisjaWZkZWYgVU5JWAorLyoKKyAg Tm90ZSB1c2Ugb2Ygc3RhbmRhcmQgaW5wdXQgcmVkaXJlY3Rpb24uICBJbiBzb21lIHN5c3RlbXMs IGxwW3JdIHJ1bnMKKyAgc2V0dWlkIHRvIGxwIChvciAuLi4/KSwgc28gaWYgdXNlciBoYXMgc2Vu dCBhIGZpbGUgaW50byBhIGRpcmVjdG9yeQorICB0aGF0IGxwIGRvZXMgbm90IGhhdmUgcmVhZCBh Y2Nlc3MgdG8sIGl0IGNhbid0IGJlIHByaW50ZWQgdW5sZXNzIGl0IGlzCisgIGZlZCB0byBscFty XSBhcyBzdGFuZGFyZCBpbnB1dC4KKyovCisgICAgaWYgKHByaW50cGlwZSAmJiBwcmludGVybmFt ZSkgeworCW4gPSA4ICsgKGludClzdHJsZW4oZikgKyAoaW50KXN0cmxlbihwcmludGVybmFtZSk7 CisJaWYgKG4gPiBaTUJVRkxFTikKKwkgIHJldHVybigtMik7CisgICAgICAgIHNwcmludGYoem1i dWYsImNhdCAlcyB8ICVzIiwgZiwgcHJpbnRlcm5hbWUpOworICAgIH0gZWxzZSBpZiAocHJpbnRl cm5hbWUpIHsKKwluID0gOCArIChpbnQpc3RybGVuKGYpICsgKGludClzdHJsZW4ocHJpbnRlcm5h bWUpOworCWlmIChuID4gWk1CVUZMRU4pCisJICByZXR1cm4oLTIpOworICAgICAgICBzcHJpbnRm KHptYnVmLCJjYXQgJXMgPj4gJXMiLCBmLCBwcmludGVybmFtZSk7CisgICAgfSBlbHNlIHsKKwlu ID0gNCArIChpbnQpc3RybGVuKFBSSU5UQ01EKSArIChpbnQpc3RybGVuKHApICsgKGludClzdHJs ZW4oZik7CisJaWYgKG4gPiBaTUJVRkxFTikKKwkgIHJldHVybigtMik7CisgICAgICAgIHNwcmlu dGYoem1idWYsIiVzICVzIDwgJXMiLCBQUklOVENNRCwgcCwgZik7CisgICAgfQorICAgIGRlYnVn KEYxMTAsInpwcmludCBjb21tYW5kIix6bWJ1ZiwwKTsKKyAgICB6c3lzY21kKHptYnVmKTsKKyNl bHNlIC8qIE5vdCBVTklYICovCisgICAgKnptYnVmID0gJ1wwJzsKKyNlbmRpZiAvKiBVTklYICov CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIE5PRlJJTExTICovCisKKy8qICBXaWxkY2Fy ZCBleHBhbnNpb24gZnVuY3Rpb25zLi4uICAqLworCitzdGF0aWMgY2hhciBzY3JhdGNoW01BWFBB VEgrNF07ICAgICAgICAgLyogVXNlZCBieSBib3RoIG1ldGhvZHMgKi8KKworc3RhdGljIGludCBv bGRtdGNocyA9IDA7ICAgICAgICAgICAgICAgIC8qIExldCBzaGVsbCAobHMpIGV4cGFuZCB0aGVt LiAqLworI2lmZGVmIENPTU1FTlQKK3N0YXRpYyBjaGFyICpsc2NtZCA9ICIvYmluL2xzIC1kIjsg ICAgICAvKiBDb21tYW5kIHRvIHVzZS4gKi8KKyNlbHNlCitzdGF0aWMgY2hhciAqbHNjbWQgPSAi ZWNobyI7ICAgICAgICAgICAgLyogQ29tbWFuZCB0byB1c2UuICovCisjZW5kaWYgLyogQ09NTUVO VCAqLworCisjaWZuZGVmIE5PUFVTSAoraW50CitzaHhwYW5kKHBhdCxuYW1sc3QsbGVuKSBjaGFy ICpwYXQsICpuYW1sc3RbXTsgaW50IGxlbjsgeworICAgIGNoYXIgKmZnYnVmID0gTlVMTDsgICAg ICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgZm9ybWluZyBscyBjb21tYW5kICovCisgICAgY2hh ciAqcCwgKnE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLworCisgICAgaW50 IGksIHgsIHJldGNvZGUsIGl0c2FkaXI7CisgICAgY2hhciBjOworCisgICAgeCA9IChpbnQpc3Ry bGVuKHBhdCkgKyAoaW50KXN0cmxlbihsc2NtZCkgKyAzOyAvKiBMZW5ndGggb2YgbHMgY29tbWFu ZCAqLworICAgIGZvciAoaSA9IDA7IGkgPCBvbGRtdGNoczsgaSsrKSB7ICAgIC8qIEZyZWUgcHJl dmlvdXMgZmlsZSBsaXN0ICovCisgICAgICAgIGlmIChuYW1sc3RbaV0gKSB7ICAgICAgICAgICAg ICAgLyogSWYgbWVtb3J5IGlzIGFsbG9jYXRlZCAgKi8KKyAgICAgICAgICAgIGZyZWUobmFtbHN0 W2ldKTsgICAgICAgICAgICAvKiBGcmVlIHRoZSBtZW1vcnkgICAgICAgICAqLworICAgICAgICAg ICAgbmFtbHN0W2ldID0gTlVMTCA7ICAgICAgICAgIC8qIFJlbWVtYmVyIG5vIG1lbW9yeSBpcyBh bGxvY2F0ZWQgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBvbGRtdGNocyA9IDAgOyAgICAgICAg ICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGVyZSBhcmUgbm8gbWF0Y2hlcyAqLworICAgIGZn YnVmID0gbWFsbG9jKHgpOyAgICAgICAgICAgICAgICAgIC8qIEdldCBidWZmZXIgZm9yIGNvbW1h bmQgKi8KKyAgICBpZiAoIWZnYnVmKSByZXR1cm4oLTEpOyAgICAgICAgICAgICAvKiBGYWlsIGlm IGNhbm5vdCAqLworICAgIGNrbWFrbXNnKGZnYnVmLHgsbHNjbWQsIiAiLHBhdCxOVUxMKTsgLyog Rm9ybSB0aGUgY29tbWFuZCAqLworICAgIHp4Y21kKFpJRklMRSxmZ2J1Zik7ICAgICAgICAgICAg ICAgIC8qIFN0YXJ0IHRoZSBjb21tYW5kICovCisgICAgaSA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmlsZSBjb3VudGVyICovCisgICAgcCA9IHNjcmF0Y2g7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc2NyYXRjaCBhcmVhICovCisgICAgcmV0Y29kZSA9 IC0xOyAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGZhaWx1cmUgKi8KKyAgICB3aGls ZSAoKHggPSB6bWluY2hhcigpKSAhPSAtMSkgeyAgICAvKiBSZWFkIGNoYXJhY3RlcnMgZnJvbSBj b21tYW5kICovCisgICAgICAgIGMgPSAoY2hhcikgeDsKKyAgICAgICAgaWYgKGMgPT0gJyAnIHx8 IGMgPT0gJ1xuJykgeyAgICAvKiBHb3QgbmV3bGluZSBvciBzcGFjZT8gKi8KKyAgICAgICAgICAg ICpwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAvKiBZZXMsIHRlcm1pbmF0ZSBzdHJpbmcgKi8K KyAgICAgICAgICAgIHAgPSBzY3JhdGNoOyAgICAgICAgICAgICAgICAvKiBQb2ludCBiYWNrIHRv IGJlZ2lubmluZyAqLworICAgICAgICAgICAgaWYgKHpjaGtpKHApID09IC0xKSAgICAgICAgIC8q IERvZXMgZmlsZSBleGlzdD8gKi8KKyAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAg ICAgICAvKiBObywgY29udGludWUgKi8KKyAgICAgICAgICAgIGl0c2FkaXIgPSBpc2RpcihwKTsg ICAgICAgICAvKiBZZXMsIGlzIGl0IGEgZGlyZWN0b3J5PyAqLworICAgICAgICAgICAgaWYgKHhk aXJvbmx5ICYmICFpdHNhZGlyKSAgIC8qIFdhbnQgb25seSBkaXJzIGJ1dCB0aGlzIGlzbid0ICov CisgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgLyogc28gc2tpcC4gKi8K KyAgICAgICAgICAgIGlmICh4Zmlsb25seSAmJiBpdHNhZGlyKSAgICAvKiBJdCdzIGEgZGlyIGJ1 dCB3YW50IG9ubHkgZmlsZXMgKi8KKyAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAg ICAgICAvKiBzbyBza2lwLiAqLworICAgICAgICAgICAgeCA9IChpbnQpc3RybGVuKHApOyAgICAg ICAgIC8qIEtlZXAgLSBnZXQgbGVuZ3RoIG9mIG5hbWUgKi8KKyAgICAgICAgICAgIHEgPSBtYWxs b2MoeCsxKTsgICAgICAgICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgaXQgKi8KKyAgICAgICAg ICAgIGlmICghcSkgZ290byBzaHhmaW47ICAgICAgICAvKiBGYWlsIGlmIHNwYWNlIGNhbid0IGJl IG9idGFpbmVkICovCisgICAgICAgICAgICBzdHJjcHkocSxzY3JhdGNoKTsgICAgICAgICAgLyog KHNhZmUpIENvcHkgbmFtZSB0byBzcGFjZSAqLworICAgICAgICAgICAgbmFtbHN0W2krK10gPSBx OyAgICAgICAgICAgIC8qIENvcHkgcG9pbnRlciB0byBuYW1lIGludG8gYXJyYXkgKi8KKyAgICAg ICAgICAgIGlmIChpID49IGxlbikgZ290byBzaHhmaW47ICAvKiBGYWlsIGlmIHRvbyBtYW55ICov CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVndWxhciBjaGFy YWN0ZXIgKi8KKyAgICAgICAgICAgICpwKysgPSBjOyAgICAgICAgICAgICAgICAgICAvKiBDb3B5 IGl0IGludG8gc2NyYXRjaCBhcmVhICovCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0Y29kZSA9 IGk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIG51bWJlciBvZiBtYXRjaGluZyBm aWxlcyAqLworc2h4ZmluOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1v biBleGl0IHBvaW50ICovCisgICAgZnJlZShmZ2J1Zik7ICAgICAgICAgICAgICAgICAgICAgICAg LyogRnJlZSBjb21tYW5kIGJ1ZmZlciAqLworICAgIGZnYnVmID0gTlVMTDsKKyAgICB6Y2xvc2Yo WklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBEZWxldGUgdGhlIGNvbW1hbmQgZm9yay4g Ki8KKyAgICBvbGRtdGNocyA9IGk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBo b3cgbWFueSBmaWxlcyAqLworICAgIHJldHVybihyZXRjb2RlKTsKK30KKyNlbmRpZiAvKiBOT1BV U0ggKi8KKworLyoKKyAgRGlyZWN0b3J5LXJlYWRpbmcgZnVuY3Rpb25zIGZvciBVTklYIG9yaWdp bmFsbHkgd3JpdHRlbiBmb3IgQy1LZXJtaXQgNC4wCisgIGJ5IEplZmYgRGFtZW5zLCBDVUNDQSwg MTk4NC4KKyovCitzdGF0aWMgY2hhciAqIHhwYXQgPSBOVUxMOyAgICAgICAgICAgICAgLyogR2xv YmFsIGNvcHkgb2YgZmdlbigpIHBhdHRlcm4gKi8KK3N0YXRpYyBjaGFyICogeHBhdGxhc3QgPSBO VUxMOyAgICAgICAgICAvKiBSaWdodG1vc3Qgc2VnbWVudCBvZiBwYXR0ZXJuKi8KK3N0YXRpYyBp bnQgeHBhdHNsYXNoID0gMDsgICAgICAgICAgICAgICAvKiBTbGFzaCBjb3VudCBpbiBwYXR0ZXJu ICovCitzdGF0aWMgaW50IHhwYXR3aWxkID0gMDsgICAgICAgICAgICAgICAgLyogT3JpZ2luYWwg cGF0dGVybiBpcyB3aWxkICovCitzdGF0aWMgaW50IHhsZWFmd2lsZCA9IDA7ICAgICAgICAgICAg ICAgLyogTGFzdCBzZWdtZW50IG9mIHBhdHRlcm4gaXMgd2lsZCAqLworc3RhdGljIGludCB4cGF0 YWJzb2x1dGUgPSAwOworCisjaWZkZWYgYWVnaXMKK3N0YXRpYyBjaGFyIGJzbGFzaDsKKyNlbmRp ZiAvKiBhZWdpcyAqLworCisKKy8qICBTIFAgTCBJIFQgUCBBIFQgSCAgKi8KKworLyoKKyAgU3Bs aXRzIHRoZSBzbGFzaC1zZXBhcmF0ZWQgcG9ydGlvbnMgb2YgdGhlIGFyZ3VtZW50IHN0cmluZyBp bnRvCisgIGEgbGlzdCBvZiBwYXRoIHN0cnVjdHVyZXMuICBSZXR1cm5zIHRoZSBoZWFkIG9mIHRo ZSBsaXN0LiAgVGhlCisgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBieSBtYWxsb2MsIHNvIHRo ZXkgbXVzdCBiZSBmcmVlZC4KKyAgU3BsaXRwYXRoIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUg ZmlsZW5hbWUgZ2VuZXJhdG9yLgorCisgIElucHV0OgorICAgIEEgcGF0aCBzdHJpbmcuCisKKyAg UmV0dXJuczoKKyAgICBBIGxpbmtlZCBsaXN0IG9mIHRoZSBzbGFzaC1zZXBhcmF0ZWQgc2VnbWVu dHMgb2YgdGhlIGlucHV0LgorKi8KK3N0YXRpYyBzdHJ1Y3QgcGF0aCAqCitzcGxpdHBhdGgocCkg Y2hhciAqcDsgeworICAgIHN0cnVjdCBwYXRoICpoZWFkLCpjdXIsKnBydjsKKyAgICBpbnQgaTsK KworICAgIGRlYnVnKEYxMTEsInNwbGl0cGF0aCIscCx4cmVjdXJzaXZlKTsKKyAgICBoZWFkID0g cHJ2ID0gTlVMTDsKKworICAgIGlmICghcCkgcmV0dXJuKE5VTEwpOworICAgIGlmICghKnApIHJl dHVybihOVUxMKTsKKworICAgIGlmICghc3RyY21wKHAsIioqIikpIHsgICAgICAgICAgICAgIC8q IEZpeCB0aGlzICovCisgICAgICAgIHAgPSAiKiI7CisgICAgfQorICAgIGlmIChJU0RJUlNFUCgq cCkpIHArKzsgICAgICAgICAgICAgIC8qIFNraXAgbGVhZGluZyBzbGFzaCBpZiBhbnkgKi8KKwor ICAgIC8qIE1ha2UgbGlua2VkIGxpc3Qgb2YgcGF0aCBzZWdtZW50cyBmcm9tIHBhdHRlcm4gKi8K KworICAgIHdoaWxlICgqcCkgeworICAgICAgICBjdXIgPSAoc3RydWN0IHBhdGggKikgbWFsbG9j KHNpemVvZiAoc3RydWN0IHBhdGgpKTsKKyAgICAgICAgLyogZGVidWcoRjEwMSwic3BsaXRwYXRo IG1hbGxvYyIsIiIsY3VyKTsgKi8KKyAgICAgICAgaWYgKGN1ciA9PSBOVUxMKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJzcGxpdHBhdGggbWFsbG9jIGZhaWx1cmUiLCIiLDApOworICAgICAg ICAgICAgcHJ2IC0+IGZ3ZCA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4oKHN0cnVjdCBwYXRo ICopTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgY3VyIC0+IGZ3ZCA9IE5VTEw7CisgICAgICAg IGlmIChoZWFkID09IE5VTEwpICAgICAgICAgICAgICAgLyogRmlyc3QsIG1ha2UgbGlzdCBoZWFk ICovCisgICAgICAgICAgaGVhZCA9IGN1cjsKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBOb3QgZmlyc3QsIGxpbmsgaW50byBjaGFpbiAqLworICAgICAgICAgIHBy diAtPiBmd2QgPSBjdXI7CisgICAgICAgIHBydiA9IGN1cjsgICAgICAgICAgICAgICAgICAgICAg LyogTGluayBmcm9tIHByZXZpb3VzIHRvIHRoaXMgb25lICovCisKKyNpZmRlZiBhZWdpcworICAg ICAgICAvKiB0cmVhdCBiYWNrc2xhc2ggYXMgIi4uLyIgKi8KKyAgICAgICAgaWYgKGJzbGFzaCAm JiAqcCA9PSBic2xhc2gpIHsKKyAgICAgICAgICAgIHN0cmNweShjdXItPm5wYXJ0LCAiLi4iKTsJ Lyogc2FmZSAqLworICAgICAgICAgICAgKytwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgZm9yIChpPTA7IGkgPCBNQVhOQU1MRU4gJiYgKnAgJiYgKnAgIT0gJy8nICYmICpwICE9IGJz bGFzaDsgaSsrKQorICAgICAgICAgICAgICBjdXIgLT4gbnBhcnRbaV0gPSAqcCsrOworICAgICAg ICAgICAgY3VyIC0+IG5wYXJ0W2ldID0gJ1wwJzsgICAgIC8qIGVuZCB0aGlzIHNlZ21lbnQgKi8K KyAgICAgICAgICAgIGlmIChpID49IE1BWE5BTUxFTikKKyAgICAgICAgICAgICAgd2hpbGUgKCpw ICYmICpwICE9ICcvJyAmJiAqcCAhPSBic2xhc2gpCisgICAgICAgICAgICAgICAgcCsrOworICAg ICAgICB9CisgICAgICAgIGlmICgqcCA9PSAnLycpIHArKzsKKyNlbHNlCisgICAgICAgIC8qIEdl bmVyYWwgY2FzZSAoVU5JWCkgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IE1BWE5BTUxFTiAm JiAhSVNESVJTRVAoKnApICYmICpwICE9ICdcMCc7IGkrKykgeworICAgICAgICAgICAgY3VyIC0+ IG5wYXJ0W2ldID0gKnArKzsKKyAgICAgICAgfQorCisgICAgICAgIGN1ciAtPiBucGFydFtpXSA9 ICdcMCc7ICAgICAgICAgLyogRW5kIHRoaXMgcGF0aCBzZWdtZW50ICovCisgICAgICAgIGlmIChp ID49IE1BWE5BTUxFTikKKyAgICAgICAgICB3aGlsZSAoIUlTRElSU0VQKCpwKSAmJiAqcCAhPSAn XDAnKSBwKys7CisgICAgICAgIGlmIChJU0RJUlNFUCgqcCkpCisgICAgICAgICAgcCsrOworCisj ZW5kaWYgLyogYWVnaXMgKi8KKyAgICB9CisgICAgaWYgKHBydikgeworICAgICAgICBtYWtlc3Ry KCZ4cGF0bGFzdCxwcnYgLT4gbnBhcnQpOworICAgICAgICBkZWJ1ZyhGMTEwLCJzcGxpdHBhdGgg eHBhdGxhc3QiLHhwYXRsYXN0LDApOworICAgIH0KKyNpZmRlZiBERUJVRworICAgIC8qIFNob3cg b3JpZ2luYWwgcGF0aCBsaXN0ICovCisgICAgaWYgKGRlYmxvZykgeworICAgICAgICBmb3IgKGkg PSAwLCBjdXIgPSBoZWFkOyBjdXI7IGkrKykgeworICAgICAgICAgICAgZGVidWcoRjExMSwiU1BM SVRQQVRIIixjdXIgLT4gbnBhcnQsIGkpOworICAgICAgICAgICAgY3VyID0gY3VyIC0+IGZ3ZDsK KyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJldHVybihoZWFkKTsK K30KKworLyogIEYgRyBFIE4gIC0tICBHZW5lcmF0ZSBGaWxlIExpc3QgICovCisKKy8qCisgIEZp bGUgbmFtZSBnZW5lcmF0b3IuICBJdCBpcyBwYXNzZWQgYSBzdHJpbmcsIHBvc3NpYmx5IGNvbnRh aW5pbmcgd2lsZGNhcmRzLAorICBhbmQgYW4gYXJyYXkgb2YgY2hhcmFjdGVyIHBvaW50ZXJzLiAg SXQgZmluZHMgYWxsIHRoZSBtYXRjaGluZyBmaWxlbmFtZXMgYW5kCisgIHN0b3JlcyBwb2ludGVy cyB0byB0aGVtIGluIHRoZSBhcnJheS4gIFRoZSByZXR1cm5lZCBzdHJpbmdzIGFyZSBhbGxvY2F0 ZWQKKyAgZnJvbSBhIHN0YXRpYyBidWZmZXIgbG9jYWwgdG8gdGhpcyBtb2R1bGUgKHNvIHRoZSBj YWxsZXIgZG9lc24ndCBoYXZlIHRvCisgIHdvcnJ5IGFib3V0IGRlYWxsb2NhdGluZyB0aGVtKTsg dGhpcyBtZWFucyB0aGF0IHN1Y2Nlc3NpdmUgY2FsbHMgdG8gZmdlbgorICB3aWxsIHdpcGUgb3V0 IHRoZSByZXN1bHRzIG9mIHByZXZpb3VzIGNhbGxzLgorCisgIElucHV0OgorICAgIEEgd2lsZGNh cmQgc3RyaW5nLCBhbiBhcnJheSB0byB3cml0ZSBuYW1lcyB0bywgdGhlIGxlbmd0aCBvZiB0aGUg YXJyYXkuCisKKyAgUmV0dXJuczoKKyAgICBUaGUgbnVtYmVyIG9mIG1hdGNoZXMuCisgICAgVGhl IGFycmF5IGlzIGZpbGxlZCB3aXRoIGZpbGVuYW1lcyB0aGF0IG1hdGNoZWQgdGhlIHBhdHRlcm4u CisgICAgSWYgdGhlcmUgd2Fzbid0IGVub3VnaCByb29tIGluIHRoZSBhcnJheSwgLTEgaXMgcmV0 dXJuZWQuCisKKyAgT3JpZ2luYWxseSBieTogSmVmZiBEYW1lbnMsIENVQ0NBLCAxOTg0LiAgTWFu eSBjaGFuZ2VzIHNpbmNlIHRoZW4uCisqLworc3RhdGljIGludAorZmdlbihwYXQscmVzYXJyeSxs ZW4pIGNoYXIgKnBhdCwqcmVzYXJyeVtdOyBpbnQgbGVuOyB7CisgICAgc3RydWN0IHBhdGggKmhl YWQ7CisgICAgY2hhciAqc3B0ciwgKnM7CisgICAgaW50IG47CisKKyNpZmRlZiBhZWdpcworICAg IGNoYXIgKm5hbWVjaGFyczsKKyAgICBpbnQgdGlsZGUgPSAwLCBicXVvdGUgPSAwOworCisgICAg aWYgKChuYW1lY2hhcnMgPSBnZXRlbnYoIk5BTUVDSEFSUyIpKSAhPSBOVUxMKSB7CisgICAgICAg IGlmIChja3N0cmNocihuYW1lY2hhcnMsICd+JyApICE9IE5VTEwpIHRpbGRlICA9ICd+JzsKKyAg ICAgICAgaWYgKGNrc3RyY2hyKG5hbWVjaGFycywgJ1xcJykgIT0gTlVMTCkgYnNsYXNoID0gJ1xc JzsKKyAgICAgICAgaWYgKGNrc3RyY2hyKG5hbWVjaGFycywgJ2AnICkgIT0gTlVMTCkgYnF1b3Rl ID0gJ2AnOworICAgIH0gZWxzZSB7CisgICAgICAgIHRpbGRlID0gJ34nOyBic2xhc2ggPSAnXFwn OyBicXVvdGUgPSAnYCc7CisgICAgfQorICAgIHNwdHIgPSBzY3JhdGNoOworCisgICAgLyogY29w eSAiYG5vZGVfZGF0YSIsIGV0Yy4gYW5jaG9ycyAqLworICAgIGlmIChicXVvdGUgJiYgKnBhdCA9 PSBicXVvdGUpCisgICAgICB3aGlsZSAoKnBhdCAmJiAqcGF0ICE9ICcvJyAmJiAqcGF0ICE9IGJz bGFzaCkKKyAgICAgICAgKnNwdHIrKyA9ICpwYXQrKzsKKyAgICBlbHNlIGlmICh0aWxkZSAmJiAq cGF0ID09IHRpbGRlKQorICAgICAgKnNwdHIrKyA9ICpwYXQrKzsKKyAgICB3aGlsZSAoKnBhdCA9 PSAnLycpCisgICAgICAqc3B0cisrID0gKnBhdCsrOworICAgIGlmIChzcHRyID09IHNjcmF0Y2gp IHsKKyAgICAgICAgc3RyY3B5KHNjcmF0Y2gsIi4vIik7CQkvKiBzYWZlICovCisgICAgICAgIHNw dHIgPSBzY3JhdGNoKzI7CisgICAgfQorICAgIGlmICghKGhlYWQgPSBzcGxpdHBhdGgocGF0KSkp IHJldHVybigtMSk7CisKKyNlbHNlIC8qIG5vdCBhZWdpcyAqLworCisgICAgZGVidWcoRjExMSwi ZmdlbiBwYXQiLHBhdCxsZW4pOworICAgIGRlYnVnKEYxMTAsImZnZW4gY3VycmVudCBkaXJlY3Rv cnkiLHpndGRpcigpLDApOworICAgIGRlYnVnKEYxMDEsImZnZW4gc3RhdGhhY2siLCIiLHN0YXRo YWNrKTsKKworICAgIHNjcmF0Y2hbMF0gPSAnXDAnOworICAgIHhwYXR3aWxkID0gMDsKKyAgICB4 bGVhZndpbGQgPSAwOworICAgIHhwYXRhYnNvbHV0ZSA9IDA7CisKKyAgICBpZiAoIShoZWFkID0g c3BsaXRwYXRoKHBhdCkpKSAgICAgICAvKiBNYWtlIHRoZSBwYXRoIHNlZ21lbnQgbGlzdCAqLwor CXJldHVybigtMSk7CisKKyAgICBzcHRyID0gc2NyYXRjaDsKKworI2lmZGVmIENPTU1FTlQKKyAg ICBpZiAoc3RybmNtcChwYXQsIi4vIiwyKSAmJiBzdHJuY21wKHBhdCwiLi4vIiwzKSkgeworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKwlpZiAoIUlTRElSU0VQKCpwYXQpKQkJLyogSWYgbmFtZSBpcyBu b3QgYWJzb2x1dGUgKi8KKwkgICpzcHRyKysgPSAnLic7CQkvKiBwdXQgIi4vIiBpbiBmcm9udC4g Ki8KKwkqc3B0cisrID0gRElSU0VQOworI2lmZGVmIENPTU1FTlQKKyAgICB9CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICpzcHRyID0gJ1wwJzsKKyNlbmRpZiAvKiBhZWdpcyAqLworCisgICAg bWFrZXN0cigmeHBhdCxwYXQpOyAgICAgICAgICAgICAgICAgLyogU2F2ZSBjb3B5IG9mIG9yaWdp bmFsIHBhdHRlcm4gKi8KKyAgICBkZWJ1ZyhGMTEwLCJmZ2VuIHNjcmF0Y2giLHNjcmF0Y2gsMCk7 CisKKyAgICBmb3IgKG4gPSAwLCBzID0geHBhdDsgKnM7IHMrKykgICAgICAvKiBIb3cgbWFueSBz bGFzaGVzIGluIHRoZSBwYXR0ZXJuICovCisgICAgICBpZiAoKnMgPT0gRElSU0VQKSAgICAgICAg ICAgICAgICAgLyogc2luY2UgdGhlc2UgYXJlIGZlbmNlcyBmb3IgKi8KKyAgICAgICAgbisrOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwYXR0ZXJuIG1hdGNoaW5nICovCisgICAgeHBh dHNsYXNoID0gbjsKKyAgICBkZWJ1ZyhGMTAxLCJmZ2VuIHhwYXRzbGFzaCIsIiIseHBhdHNsYXNo KTsKKworICAgIG51bWZuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgZm91 bmQgeWV0ICovCisKKyAgICBpZiAoaW5pdHNwYWNlKHJlc2Fycnksc3NwbGVuKSA8IDApCisgICAg ICByZXR1cm4oLTEpOworCisgICAgeHBhdHdpbGQgPSBpc3dpbGQoeHBhdCk7CQkvKiBPcmlnaW5h bCBwYXR0ZXJuIGlzIHdpbGQ/ICovCisgICAgeHBhdGFic29sdXRlID0gaXNhYnNvbHV0ZSh4cGF0 KTsKKyAgICB4bGVhZndpbGQgPSBpc3dpbGQoeHBhdGxhc3QpOworCisgICAgZGVidWcoRjExMSwi ZmdlbiB4cGF0Iix4cGF0LHhwYXR3aWxkKTsKKyAgICBkZWJ1ZyhGMTExLCJmZ2VuIHhwYXRsYXN0 Iix4cGF0bGFzdCx4bGVhZndpbGQpOworICAgIGRlYnVnKEYxMDEsImZnZW4geHBhdGFic29sdXRl IiwiIix4cGF0YWJzb2x1dGUpOworCisgICAgdHJhdmVyc2UoaGVhZCxzY3JhdGNoLHNwdHIpOyAg ICAgICAgLyogR28gd2FsayB0aGUgZGlyZWN0b3J5IHRyZWUuICovCisgICAgd2hpbGUgKGhlYWQg IT0gTlVMTCkgeyAgICAgICAgICAgICAgLyogRG9uZSAtIGZyZWUgcGF0aCBzZWdtZW50IGxpc3Qu ICovCisgICAgICAgIHN0cnVjdCBwYXRoICpuZXh0ID0gaGVhZCAtPiBmd2Q7CisgICAgICAgIGZy ZWUoKGNoYXIgKiloZWFkKTsKKyAgICAgICAgaGVhZCA9IG5leHQ7CisgICAgfQorICAgIGRlYnVn KEYxMDEsImZnZW4iLCIiLG51bWZuZCk7CisgICAgcmV0dXJuKG51bWZuZCk7ICAgICAgICAgICAg ICAgICAgICAgLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyAqLworfQorCisvKiBEZWZp bmUgTE9OR0ZOIChsb25nIGZpbGUgbmFtZXMpIGF1dG9tYXRpY2FsbHkgZm9yIEJTRCAyLjkgYW5k IDQuMiAqLworLyogTE9OR0ZOIGNhbiBhbHNvIGJlIGRlZmluZWQgb24gdGhlIGNjIGNvbW1hbmQg bGluZS4gKi8KKworI2lmZGVmIEJTRDI5CisjaWZuZGVmIExPTkdGTgorI2RlZmluZSBMT05HRk4K KyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBCU0Q0MgorI2lmbmRlZiBMT05HRk4KKyNkZWZpbmUg TE9OR0ZOCisjZW5kaWYKKyNlbmRpZgorCisvKgorICAgVCBSIEEgViBFIFIgUyBFICAtLSAgVHJh dmVyc2UgYSBkaXJlY3RvcnkgdHJlZS4KKworICAgV2Fsa3MgdGhlIGRpcmVjdG9yeSB0cmVlIGxv b2tpbmcgZm9yIG1hdGNoZXMgdG8gaXRzIGFyZ3VtZW50cy4KKyAgIFRoZSBhbGdvcml0aG0gaXMs IGJyaWVmbHk6CisKKyAgICBJZiB0aGUgY3VycmVudCBwYXR0ZXJuIHNlZ21lbnQgY29udGFpbnMg bm8gd2lsZGNhcmRzLCB0aGF0CisgICAgc2VnbWVudCBpcyBhZGRlZCB0byB3aGF0IHdlIGFscmVh ZHkgaGF2ZS4gIElmIHRoZSBuYW1lIHNvIGZhcgorICAgIGV4aXN0cywgd2UgY2FsbCBvdXJzZWx2 ZXMgcmVjdXJzaXZlbHkgd2l0aCB0aGUgbmV4dCBzZWdtZW50CisgICAgaW4gdGhlIHBhdHRlcm4g c3RyaW5nOyBvdGhlcndpc2UsIHdlIGp1c3QgcmV0dXJuLgorCisgICAgSWYgdGhlIGN1cnJlbnQg cGF0dGVybiBzZWdtZW50IGNvbnRhaW5zIHdpbGRjYXJkcywgd2Ugb3BlbiB0aGUgbmFtZQorICAg IHdlJ3ZlIGFjY3VtdWxhdGVkIHNvIGZhciAoYXNzdW1pbmcgaXQgaXMgcmVhbGx5IGEgZGlyZWN0 b3J5KSwgdGhlbiByZWFkCisgICAgZWFjaCBmaWxlbmFtZSBpbiBpdCwgYW5kLCBpZiBpdCBtYXRj aGVzIHRoZSB3aWxkY2FyZCBwYXR0ZXJuIHNlZ21lbnQsIGFkZAorICAgIHRoYXQgZmlsZW5hbWUg dG8gd2hhdCB3ZSBoYXZlIHNvIGZhciBhbmQgY2FsbCBvdXJzZWx2ZXMgcmVjdXJzaXZlbHkgb24K KyAgICB0aGUgbmV4dCBzZWdtZW50LgorCisgICAgRmluYWxseSwgd2hlbiBubyBtb3JlIHBhdHRl cm4gc2VnbWVudHMgcmVtYWluLCB3ZSBhZGQgd2hhdCdzIGFjY3VtdWxhdGVkCisgICAgc28gZmFy IHRvIHRoZSByZXN1bHQgYXJyYXkgYW5kIGluY3JlbWVudCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMu CisKKyAgSW5wdXRzOgorICAgIEEgcGF0dGVybiBwYXRoIGxpc3QgKGFzIGdlbmVyYXRlZCBieSBz cGxpdHBhdGgpLCBhIHN0cmluZyBwb2ludGVyIHRoYXQKKyAgICBwb2ludHMgdG8gd2hhdCB3ZSd2 ZSB0cmF2ZXJzZWQgc28gZmFyICh0aGlzIGNhbiBiZSBpbml0aWFsaXplZCB0byAiLyIKKyAgICB0 byBzdGFydCB0aGUgc2VhcmNoIGF0IHRoZSByb290IGRpcmVjdG9yeSwgb3IgdG8gIi4vIiB0byBz dGFydCB0aGUKKyAgICBzZWFyY2ggYXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5KSwgYW5kIGEgc3Ry aW5nIHBvaW50ZXIgdG8gdGhlIGVuZCBvZgorICAgIHRoZSBzdHJpbmcgaW4gdGhlIHByZXZpb3Vz IGFyZ3VtZW50LCBwbHVzIHRoZSBnbG9iYWwgInJlY3Vyc2l2ZSIsCisgICAgInhtYXRjaGRvdCIs IGFuZCAieGRpcm9ubHkiIGZsYWdzLgorCisgIFJldHVybnM6IHZvaWQsIHdpdGg6CisgICAgbXRj aHNbXSBjb250YWluaW5nIHRoZSBhcnJheSBvZiBmaWxlbmFtZSBzdHJpbmcgcG9pbnRlcnMsIGFu ZDoKKyAgICBudW1mbmQgY29udGFpbmluZyB0aGUgbnVtYmVyIG9mIGZpbGVuYW1lcy4KKworICBB bHRob3VnaCBpdCBtaWdodCBiZSBwb29yIHByYWN0aWNlLCB0aGUgbXRjaHNbXSBhcnJheSBpcyBy ZXZlYWxlZCB0byB0aGUKKyAgb3V0c2lkZSBpbiBjYXNlIGl0IG5lZWRzIGl0OyBmb3IgZXhhbXBs ZSwgdG8gYmUgc29ydGVkIHByaW9yIHRvIHVzZS4KKyAgKEl0IGlzIHBvb3IgcHJhY3RpY2UgYmVj YXVzZSBub3QgYWxsIHBsYXRmb3JtcyBpbXBsZW1lbnQgZmlsZSBsaXN0cyB0aGUKKyAgc2FtZSB3 YXk7IHNvbWUgZG9uJ3QgdXNlIGFuIGFycmF5IGF0IGFsbC4pCisKKyAgTm90ZSB0aGF0IGFkZHJl c3VsdCgpIGFjdHMgYXMgYSBzZWNvbmQtbGV2ZWwgZmlsdGVyOyBkdWUgdG8gc2VsZWN0aW9uCisg IGNyaXRlcmlhIG91dHNpZGUgb2YgdGhlIHBhdHRlcm4sIGl0IG1pZ2h0IGRlY2xpbmUgdG8gYWRk IGZpbGVzIHRoYXQKKyAgdGhpcyByb3V0aW5lIGFza3MgaXQgdG8sIGUuZy4gYmVjYXVzZSB3ZSBh cmUgY29sbGVjdGluZyBvbmx5IGRpcmVjdG9yeQorICBuYW1lcyBidXQgbm90IHRoZSBuYW1lcyBv ZiByZWd1bGFyIGZpbGVzLgorCisgIFdBUk5JTkc6IEluIHRoZSBjb3Vyc2Ugb2YgQy1LZXJtaXQg Ny4wIGRldmVsb3BtZW50LCB0aGlzIHJvdXRpbmUgYmVjYW1lCisgIHJpZGljdWxvdXNseSBjb21w bGV4LCBpbiBvcmRlciB0byBtZWV0IGFwcHJveGltYXRlbHkgc2l4dHkgc3BlY2lmaWMKKyAgcmVx dWlyZW1lbnRzLiAgRE9OJ1QgRVZFTiBUSElOSyBBQk9VVCBNT0RJRllJTkcgVEhJUyBST1VUSU5F ISAgVHJ1c3QgbWU7CisgIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBmaXggYW55dGhpbmcgaW4gaXQg d2l0aG91dCBicmVha2luZyBzb21ldGhpbmcgZWxzZS4KKyAgVGhpcyByb3V0aW5lIGJhZGx5IG5l ZWRzIGEgdG90YWwgcmVkZXNpZ24gYW5kIHJld3JpdGUuICBOb3RlOiBUaGVyZSBtYXkKKyAgYmUg c29tZSBnb29kIGFwcGxpY2F0aW9ucyBmb3IgcmVhbHBhdGgoKSBhbmQvb3Igc2NhbmRpcigpIGFu ZC9vciBmdHNfYmxhaCgpCisgIGhlcmUsIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGV5IGFyZSBhdmFp bGFibGUuCisqLworc3RhdGljIFZPSUQKK3RyYXZlcnNlKHBsLHNvZmFyLGVuZGN1cikgc3RydWN0 IHBhdGggKnBsOyBjaGFyICpzb2ZhciwgKmVuZGN1cjsgeworCisvKiBBcHByb3ByaWF0ZSBkZWNs YXJhdGlvbnMgZm9yIGRpcmVjdG9yeSByb3V0aW5lcyBhbmQgc3RydWN0dXJlcyAqLworLyogI2Rl ZmluZSBPUEVORElSIG1lYW5zIHRvIHVzZSBvcGVuZGlyKCksIHJlYWRkaXIoKSwgY2xvc2VkaXIo KSAgKi8KKy8qIElmIE9QRU5ESVIgbm90IGRlZmluZWQsIHdlIHVzZSBvcGVuKCksIHJlYWQoKSwg Y2xvc2UoKSAqLworCisjaWZkZWYgRElSRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TmV3IHdheSwgPGRpcmVudC5oPiAqLworI2RlZmluZSBPUEVORElSCisgICAgRElSICpmZCwgKm9w ZW5kaXIoKTsKKyAgICBzdHJ1Y3QgZGlyZW50ICpkaXJidWY7CisgICAgc3RydWN0IGRpcmVudCAq cmVhZGRpcigpOworI2Vsc2UgLyogIURJUkVOVCAqLworI2lmZGVmIExPTkdGTiAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9sZCB3YXksIDxkaXIuaD4gd2l0aCBvcGVuZGlyKCkgKi8KKyNk ZWZpbmUgT1BFTkRJUgorICAgIERJUiAqZmQsICpvcGVuZGlyKCk7CisgICAgc3RydWN0IGRpcmVj dCAqZGlyYnVmOworI2Vsc2UgLyogIUxPTkdGTiAqLworICAgIGludCBmZDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE9sZCB3YXksIDxkaXIuaD4gd2l0aCBvcGVuKCkgKi8KKyAgICBz dHJ1Y3QgZGlyZWN0IGRpcl9lbnRyeTsKKyAgICBzdHJ1Y3QgZGlyZWN0ICpkaXJidWYgPSAmZGly X2VudHJ5OworI2VuZGlmIC8qIExPTkdGTiAqLworI2VuZGlmIC8qIERJUkVOVCAqLworICAgIGlu dCBtb3B0cyA9IDA7CQkJLyogY2ttYXRjaCgpIG9wdHMgKi8KKyAgICBpbnQgZGVwdGggPSAwOwkJ CS8qIERpcmVjdG9yeSB0cmVlIGRlcHRoICovCisKKyAgICBjaGFyIG5hbWJ1ZltNQVhOQU1MRU4r NF07ICAgICAgICAgICAvKiBCdWZmZXIgZm9yIGEgZmlsZW5hbWUgKi8KKyAgICBpbnQgaXRzYWRp ciA9IDAsIHNlZ2lzZGlyID0gMCwgaXRzd2lsZCA9IDAsIG1yZXN1bHQsIG4sIHggLyogLCB5ICov IDsKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOyAgICAgICAgICAgICAgICAvKiBGb3IgZmlsZSBp bmZvLiAqLworCisgICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMTYpOworICAgIGlmIChwbCA9PSBO VUxMKSB7ICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBwYXRoLXNlZ21lbnQgbGlzdCAqLwor ICAgICAgICAqLS1lbmRjdXIgPSAnXDAnOyAvKiBUZXJtaW5hdGUgc3RyaW5nLCBvdmVyd3JpdGUg dHJhaWxpbmcgc2xhc2ggKi8KKyAgICAgICAgZGVidWcoRjExMCwidHJhdmVyc2UgYWRkOiBlbmQg b2YgcGF0aCBzZWdtZW50Iixzb2ZhciwwKTsKKyAgICAgICAgYWRkcmVzdWx0KHNvZmFyLC0xKTsK KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc3RhdGhhY2spIHsKKwkvKiBUaGlzIHNw ZWVkcyB1cCB0aGUgc2VhcmNoIGEgbG90IGFuZCB3ZSBzdGlsbCBnZXQgZ29vZCByZXN1bHRzICov CisJLyogYnV0IGl0IGJyZWFrcyB0aGUgdGFnZ2luZyBvZiBkaXJlY3RvcnkgbmFtZXMgZG9uZSBp biBhZGRyZXN1bHQgKi8KKwlpZiAoeHJlY3Vyc2l2ZSB8fCB4Zmlsb25seSB8fCB4ZGlyb25seSB8 fCB4cGF0c2xhc2gpIHsKKwkgICAgaXRzYWRpciA9IHhpc2Rpcihzb2Zhcik7CisJICAgIGRlYnVn KEYxMDEsIlNUQVQiLCIiLDE3KTsKKwl9IGVsc2UKKwkgIGl0c2FkaXIgPSAoc3RybmNtcChzb2Zh ciwiLi8iLDIpID09IDApOworICAgIH0gZWxzZSB7CisJaXRzYWRpciA9IHhpc2Rpcihzb2Zhcik7 CisJZGVidWcoRjEwMSwiU1RBVCIsIiIsMTgpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0cmF2 ZXJzZSBlbnRyeSBzb2ZhciIsc29mYXIsaXRzYWRpcik7CisKKyNpZmRlZiBDS1NZTUxJTksgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXZSdyZSBkb2luZyBzeW1saW5rcz8gKi8KKyNpZmRlZiBV U0VfTFNUQVQgICAgICAgICAgICAgICAgICAgICAgICAvKiBPSyB0byB1c2UgbHN0YXQoKT8gKi8K KyAgICBpZiAoaXRzYWRpciAmJiB4bm9saW5rcykgewkJLyogSWYgbm90IGZvbGxvd2luZyBzeW1s aW5rcyAqLworCWludCB4OworCXN0cnVjdCBzdGF0IGJ1ZjsKKwl4ID0gbHN0YXQoc29mYXIsJmJ1 Zik7CisJZGVidWcoRjExMSwidHJhdmVyc2UgbHN0YXQgMSIsc29mYXIseCk7CisJaWYgKHggPiAt MSAmJgorI2lmZGVmIFNfSVNMTksKKwkgICAgU19JU0xOSyhidWYuc3RfbW9kZSkKKyNlbHNlCisj aWZkZWYgX0lGTE5LCisJICAgICgoX0lGTVQgJiBidWYuc3RfbW9kZSkgPT0gX0lGTE5LKQorI2Vu ZGlmIC8qIF9JRkxOSyAqLworI2VuZGlmIC8qIFNfSVNMTksgKi8KKwkgICAgKQorCSAgaXRzYWRp ciA9IDA7CisgICAgfQorI2VuZGlmIC8qIFVTRV9MU1RBVCAqLworI2VuZGlmIC8qIENLU1lNTElO SyAqLworCisgICAgaWYgKCF4bWF0Y2hkb3QgJiYgeHBhdGxhc3RbMF0gPT0gJy4nKQorICAgICAg eG1hdGNoZG90ID0gMTsKKyAgICBpZiAoIXhtYXRjaGRvdCAmJiB4cGF0WzBdID09ICcuJyAmJiB4 cGF0WzFdICE9ICcvJyAmJiB4cGF0WzFdICE9ICcuJykKKyAgICAgIHhtYXRjaGRvdCA9IDE7CisK KyAgICAvKiBja21hdGNoKCkgb3B0aW9ucyAqLworCisgICAgaWYgKHhtYXRjaGRvdCkgICBtb3B0 cyB8PSAxOwkvKiBNYXRjaCBkb3QgKi8KKyAgICBpZiAoIXhyZWN1cnNpdmUpIG1vcHRzIHw9IDI7 CS8qIERpcnNlcCBpcyBmZW5jZSAqLworCisgICAgZGVidWcoRjExMSwidHJhdmVyc2UgZW50cnkg eHBhdCIseHBhdCx4cGF0c2xhc2gpOworICAgIGRlYnVnKEYxMTEsInRyYXZlcnNlIGVudHJ5IHhw YXRsYXN0Iix4cGF0bGFzdCx4bWF0Y2hkb3QpOworICAgIGRlYnVnKEYxMTAsInRyYXZlcnNlIGVu dHJ5IHBsIC0+IG5wYXJ0IixwbCAtPiBucGFydCwwKTsKKworI2lmZGVmIFJFQ1VSU0lWRQorICAg IGlmICh4cmVjdXJzaXZlID4gMCAmJiAhaXRzYWRpcikgeworICAgICAgICBjaGFyICogczsgICAg ICAgICAvKiBSZWN1cnNpdmUgZGVzY2VudCBhbmQgdGhpcyBpcyBhIHJlZ3VsYXIgZmlsZSAqLwor ICAgICAgICAqLS1lbmRjdXIgPSAnXDAnOyAvKiBUZXJtaW5hdGUgc3RyaW5nLCBvdmVyd3JpdGUg dHJhaWxpbmcgc2xhc2ggKi8KKworICAgICAgICAvKiBGaW5kIHRoZSBudGggc2xhc2ggZnJvbSB0 aGUgcmlnaHQgYW5kIG1hdGNoIGZyb20gdGhlcmUuLi4gKi8KKyAgICAgICAgLyogKG4gPT0gdGhl IG51bWJlciBvZiBzbGFzaGVzIGluIHRoZSBvcmlnaW5hbCBwYXR0ZXJuIC0gc2VlIGZnZW4pICov CisgICAgICAgIGlmICgqc29mYXIgPT0gJy8nKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ0 cmF2ZXJzZSB4cGF0c2xhc2ggYWJzb2x1dGUiLHNvZmFyLDApOworICAgICAgICAgICAgcyA9IHNv ZmFyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMSwidHJhdmVyc2Ug eHBhdHNsYXNoIHJlbGF0aXZlIixzb2Zhcix4cGF0c2xhc2gpOworICAgICAgICAgICAgZm9yIChz ID0gZW5kY3VyIC0gMSwgbiA9IDA7IHMgPj0gc29mYXI7IHMtLSkgeworICAgICAgICAgICAgICAg IGlmICgqcyA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrbiA+PSB4cGF0c2xh c2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICB9CisjaWZuZGVmIE5PU0tJUE1BVENICisJLyogVGhpcyBzcGVl ZHMgdGhpbmdzIHVwIGEgYml0LiAqLworCS8qIElmIGl0IGNhdXNlcyB0cm91YmxlIGRlZmluZSBO T1NLSVBNQVRDSCBhbmQgcmVidWlsZC4gKi8KKwlpZiAoeHBhdFswXSA9PSAnKicgJiYgIXhwYXRb MV0pCisJICB4ID0geG1hdGNoZG90ID8gMSA6IChzWzBdICE9ICcuJyk7CisJZWxzZQorI2VuZGlm IC8qIE5PU0tJUE1BVENIICovCisJICB4ID0gY2ttYXRjaCh4cGF0LCBzLCAxLCBtb3B0cyk7IC8q IE1hdGNoIHdpdGggb3JpZ2luYWwgcGF0dGVybiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJ0cmF2 ZXJzZSB4cGF0c2xhc2ggY2ttYXRjaCIscyx4KTsKKyAgICAgICAgaWYgKHggPiAwKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJ0cmF2ZXJzZSBhZGQ6IHJlY3Vyc2l2ZSwgbWF0Y2gsICYmICFp c2RpciIsc29mYXIsMCk7CisgICAgICAgICAgICBhZGRyZXN1bHQoc29mYXIsaXRzYWRpcik7Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8K KworICAgIGRlYnVnKEYxMTEsInRyYXZlcnNlIHNvZmFyIDIiLHNvZmFyLDApOworCisgICAgc2Vn aXNkaXIgPSAoKHBsIC0+IGZ3ZCkgPT0gTlVMTCkgPyAwIDogMTsKKyAgICBpdHN3aWxkID0gd2ls ZGVuYSA/IChpc3dpbGQocGwgLT4gbnBhcnQpKSA6IDA7IC8qIDE1IEp1biAyMDA1ICovCisKKyAg ICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBzZWdpc2RpciIsc29mYXIsc2VnaXNkaXIpOworICAgIGRl YnVnKEYxMTEsInRyYXZlcnNlIGl0c3dpbGQgIixwbCAtPiBucGFydCxpdHN3aWxkKTsKKworI2lm ZGVmIFJFQ1VSU0lWRQorICAgIGlmICh4cmVjdXJzaXZlID4gMCkgeyAgICAgICAgICAgICAgIC8q IElmIHJlY3Vyc2luZyBhbmQuLi4gKi8KKyAgICAgICAgaWYgKHNlZ2lzZGlyICYmIGl0c3dpbGQp ICAgICAgICAvKiB0aGlzIGlzIGEgZGlyIGFuZCBucGFydCBpcyB3aWxkICovCisgICAgICAgICAg Z290byBibGFoOyAgICAgICAgICAgICAgICAgICAgLyogb3IuLi4gKi8KKyAgICAgICAgZWxzZSBp ZiAoIXhwYXRhYnNvbHV0ZSAmJiAheHBhdHdpbGQpIC8qIHNlYXJjaCBvYmplY3QgaXMgbm9ud2ls ZCAqLworICAgICAgICAgIGdvdG8gYmxhaDsgICAgICAgICAgICAgICAgICAgIC8qIHRoZW4gZ28g cmVjdXJzZSAqLworICAgIH0KKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKworICAgIGlmICghaXRz d2lsZCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgcGF0aCBzZWdtZW50IG5vdCB3aWxk PyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgc3RyY3B5KGVuZGN1cixwbCAtPiBucGFydCk7 ICAgICAvKiAoc2FmZSkgQXBwZW5kIG5leHQgcGFydC4gKi8KKyAgICAgICAgZW5kY3VyICs9IChp bnQpc3RybGVuKHBsIC0+IG5wYXJ0KTsgLyogQWR2YW5jZSBlbmQgcG9pbnRlciAqLworI2Vsc2UK Ky8qCisgIHN0cmNweSgpIGRvZXMgbm90IGFjY291bnQgZm9yIHF1b3RlZCBtZXRhY2hhcmFjdGVy cy4KKyAgV2UgbXVzdCByZW1vdmUgdGhlIHF1b3RlcyBiZWZvcmUgZG9pbmcgdGhlIHN0YXQoKS4K KyovCisJeworCSAgICBpbnQgcXVvdGUgPSAwOworCSAgICBjaGFyIGMsICogczsKKwkgICAgcyA9 IHBsIC0+IG5wYXJ0OworCSAgICB3aGlsZSAoKGMgPSAqcysrKSkgeworCQlpZiAoIXF1b3RlKSB7 CisJCSAgICBpZiAoYyA9PSBDTURRKSB7CisJCQlxdW90ZSA9IDE7CisJCQljb250aW51ZTsKKwkJ ICAgIH0KKwkJfQorCQkqZW5kY3VyKysgPSBjOworCQlxdW90ZSA9IDA7CisJICAgIH0KKwl9Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAqZW5kY3VyID0gJ1wwJzsgICAgICAgICAgICAg ICAgIC8qIEVuZCBuZXcgY3VycmVudCBzdHJpbmcuICovCisKKyAgICAgICAgaWYgKHN0YXQoc29m YXIsJnN0YXRidWYpID09IDApIHsgLyogSWYgdGhpcyBwaWVjZSBleGlzdHMuLi4gKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsInRyYXZlcnNlIGV4aXN0cyIsc29mYXIsMCk7CisgICAgICAgICAg ICAqZW5kY3VyKysgPSBESVJTRVA7ICAgICAgICAgLyogYWRkIHNsYXNoIHRvIGVuZCAqLworICAg ICAgICAgICAgKmVuZGN1ciA9ICdcMCc7ICAgICAgICAgICAgIC8qIGFuZCBlbmQgdGhlIHN0cmlu ZyBhZ2Fpbi4gKi8KKyAgICAgICAgICAgIHRyYXZlcnNlKHBsIC0+IGZ3ZCwgc29mYXIsIGVuZGN1 cik7CisgICAgICAgIH0KKyNpZmRlZiBERUJVRworICAgICAgICBlbHNlIGRlYnVnKEYxMTAsInRy YXZlcnNlIG5vdCBmb3VuZCIsIHNvZmFyLCAwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAg ICByZXR1cm47CisgICAgfQorCisgICAgKmVuZGN1ciA9ICdcMCc7ICAgICAgICAgICAgICAgICAg ICAgLyogRW5kIGN1cnJlbnQgc3RyaW5nICovCisgICAgZGVidWcoRjExMSwidHJhdmVyc2Ugc29m YXIgMyIsc29mYXIsMCk7CisKKyAgICBpZiAoIWl0c2FkaXIpCisgICAgICByZXR1cm47CisKKyAg ICAvKiBTZWFyY2ggaXMgcmVjdXJzaXZlIG9yIC4uLiAqLworICAgIC8qIHBhdGggc2VnbWVudCBj b250YWlucyB3aWxkY2FyZHMsIGhhdmUgdG8gb3BlbiBhbmQgc2VhcmNoIGRpcmVjdG9yeS4gKi8K KworICBibGFoOgorCisgICAgZGVidWcoRjExMCwidHJhdmVyc2Ugb3BlbmluZyBkaXJlY3Rvcnki LCBzb2ZhciwgMCk7CisKKyNpZmRlZiBPUEVORElSCisgICAgZGVidWcoRjExMCwidHJhdmVyc2Ug b3BlbmRpcigpIixzb2ZhciwwKTsKKyAgICBpZiAoKGZkID0gb3BlbmRpcihzb2ZhcikpID09IE5V TEwpIHsgICAgICAgIC8qIENhbid0IG9wZW4sIGZhaWwuICovCisgICAgICAgIGRlYnVnKEYxMDEs InRyYXZlcnNlIG9wZW5kaXIoKSBmYWlsZWQiLCIiLGVycm5vKTsKKyAgICAgICAgcmV0dXJuOwor ICAgIH0KKyAgICB3aGlsZSAoKGRpcmJ1ZiA9IHJlYWRkaXIoZmQpKSkKKyNlbHNlIC8qICFPUEVO RElSICovCisgICAgZGVidWcoRjExMCwidHJhdmVyc2UgZGlyZWN0b3J5IG9wZW4oKSIsc29mYXIs MCk7CisgICAgaWYgKChmZCA9IG9wZW4oc29mYXIsT19SRE9OTFkpKSA8IDApIHsKKyAgICAgICAg ZGVidWcoRjEwMSwidHJhdmVyc2UgZGlyZWN0b3J5IG9wZW4oKSBmYWlsZWQiLCIiLGVycm5vKTsK KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB3aGlsZSAocmVhZChmZCwgKGNoYXIgKilkaXJi dWYsIHNpemVvZiBkaXJfZW50cnkpID4gMCkKKyNlbmRpZiAvKiBPUEVORElSICovCisgICAgICB7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgZWFjaCBlbnRyeSBpbiB0aGlzIGRpcmVj dG9yeSAqLworICAgICAgICAgIGludCBleGlzdHM7CisgICAgICAgICAgY2hhciAqZW9zLCAqczsK KyAgICAgICAgICBleGlzdHMgPSAwOworCisgICAgICAgICAgLyogT24gc29tZSBwbGF0Zm9ybXMs IHRoZSByZWFkW2Rpcl0oKSBjYW4gcmV0dXJuIGRlbGV0ZWQgZmlsZXMsICovCisgICAgICAgICAg LyogZS5nLiBIUC1VWCA1LjAwLiAgVGhlcmUgaXMgbm8gcG9pbnQgaW4gZ3JpbmRpbmcgdGhyb3Vn aCB0aGlzICovCisgICAgICAgICAgLyogcm91dGluZSB3aGVuIHRoZSBmaWxlIGRvZXNuJ3QgZXhp c3QuLi4gKi8KKworICAgICAgICAgIGlmICggICAgICAgICAgLyogVGhlcmUgIGFjdHVhbGx5IGlz IGFuIGlub2RlLi4uICovCisjaWZkZWYgQlNENDIKKyAgICAgICAgICAgICAgICAgICAgICAgICBk aXJidWYtPmRfaW5vICE9IC0xCisjZWxzZQorI2lmZGVmIHVub3MKKyAgICAgICAgICAgICAgICAg ICAgICAgICBkaXJidWYtPmRfaW5vICE9IC0xCisjZWxzZQorI2lmZGVmIFFOWAorICAgICAgICAg ICAgICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9zdGF0LnN0X2lubyAhPSAwCisjZWxzZQorI2lmZGVm IFNPTEFSSVMKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJidWYtPmRfaW5vICE9IDAKKyNl bHNlCisjaWZkZWYgc3VuCisgICAgICAgICAgICAgICAgICAgICAgICAgZGlyYnVmLT5kX2ZpbGVu byAhPSAwCisjZWxzZQorI2lmZGVmIGJzZGkKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJi dWYtPmRfZmlsZW5vICE9IDAKKyNlbHNlCisjaWZkZWYgX18zODZCU0RfXworICAgICAgICAgICAg ICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9maWxlbm8gIT0gMAorI2Vsc2UKKyNpZmRlZiBfX0ZyZWVC U0RfXworICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9maWxlbm8gIT0gMAorI2Vs c2UKKyNpZmRlZiB1bHRyaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJidWYtPmdkX2lu byAhPSAwCisjZWxzZQorI2lmZGVmIFBsYW45CisgICAgICAgICAgICAgICAgICAgICAgICAgMQor I2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJidWYtPmRfaW5vICE9IDAKKyNlbmRp ZiAvKiBQbGFuOSAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworI2VuZGlmIC8qIF9fRnJlZUJTRF9f ICovCisjZW5kaWYgLyogX18zODZCU0RfXyAqLworI2VuZGlmIC8qIGJzZGkgKi8KKyNlbmRpZiAv KiBzdW4gKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYg LyogdW5vcyAqLworI2VuZGlmIC8qIEJTRDQyICovCisgICAgICAgICAgICAgICkKKyAgICAgICAg ICAgIGV4aXN0cyA9IDE7CisgICAgICAgICAgaWYgKCFleGlzdHMpCisgICAgICAgICAgICBjb250 aW51ZTsKKworICAgICAgICAgIGNrc3RybmNweShuYW1idWYsICAgICAgICAgICAgIC8qIENvcHkg dGhlIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgIGRpcmJ1Zi0+ZF9uYW1lLAorICAgICAgICAg ICAgICAgICAgTUFYTkFNTEVOCisgICAgICAgICAgICAgICAgICApOworICAgICAgICAgIGlmIChu YW1idWZbMF0gPT0gJy4nKSB7CisgICAgICAgICAgICAgIGlmICghbmFtYnVmWzFdIHx8IChuYW1i dWZbMV0gPT0gJy4nICYmICFuYW1idWZbMl0pKSB7CisgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJ0cmF2ZXJzZSBza2lwcGluZyIsbmFtYnVmLDApOworICAgICAgICAgICAgICAgICAgY29u dGludWU7ICAgICAgICAgICAgIC8qIHNraXAgIi4iIGFuZCAiLi4iICovCisgICAgICAgICAgICAg IH0KKyAgICAgICAgICB9CisgICAgICAgICAgcyA9IG5hbWJ1ZjsgICAgICAgICAgICAgICAgICAg LyogQ29weSBuYW1lIHRvIGVuZCBvZiBzb2ZhciAqLworICAgICAgICAgIGVvcyA9IGVuZGN1cjsK KyAgICAgICAgICB3aGlsZSAoKCplb3MgPSAqcykpIHsKKyAgICAgICAgICAgICAgcysrOworICAg ICAgICAgICAgICBlb3MrKzsKKyAgICAgICAgICB9CisvKgorICBOb3cgd2UgY2hlY2sgdGhlIGZp bGUgZm9yIChhKSB3aGV0aGVyIGl0IGlzIGEgZGlyZWN0b3J5LCBhbmQgKGIpIHdoZXRoZXIKKyAg aXRzIG5hbWUgbWF0Y2hlcyBvdXIgcGF0dGVybi4gIElmIGl0IGlzIGEgZGlyZWN0b3J5LCBhbmQg aWYgd2UgaGF2ZSBiZWVuCisgIHRvbGQgdG8gYnVpbGQgYSByZWN1cnNpdmUgbGlzdCwgdGhlbiB3 ZSBtdXN0IGRlc2NlbmQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisgIGl0IG1hdGNoZXMgdGhlIHBh dHRlcm4uICBJZiBpdCBpcyBub3QgYSBkaXJlY3RvcnkgYW5kIGl0IGRvZXMgbm90IG1hdGNoCisg IG91ciBwYXR0ZXJuLCB3ZSBza2lwIGl0LiAgTm90ZTogc29mYXIgaXMgdGhlIGZ1bGwgcGF0aG5h bWUsIG5hbWJ1ZiBpcworICB0aGUgbmFtZSBvbmx5LgorKi8KKyAgICAgICAgICAvKiBEbyB0aGlz IGZpcnN0IHRvIHNhdmUgcG9pbnRsZXNzIGZ1bmN0aW9uIGNhbGxzICovCisgICAgICAgICAgaWYg KG5hbWJ1ZlswXSA9PSAnLicgJiYgIXhtYXRjaGRvdCkgLyogRGlyIG5hbWUgc3RhcnRzIHdpdGgg Jy4nICovCisgICAgICAgICAgICBjb250aW51ZTsKKwkgIGlmIChzdGF0aGFjaykgeworCSAgICAg IGlmICh4cmVjdXJzaXZlIHx8IHhmaWxvbmx5IHx8IHhkaXJvbmx5IHx8IHhwYXRzbGFzaCkgewor CQkgIGl0c2FkaXIgPSB4aXNkaXIoc29mYXIpOyAvKiBTZWUgaWYgaXQncyBhIGRpcmVjdG9yeSAq LworCQkgIGRlYnVnKEYxMDEsIlNUQVQiLCIiLDE5KTsKKwkgICAgICB9IGVsc2UgeworCQkgIGl0 c2FkaXIgPSAwOworCSAgICAgIH0KKwkgIH0gZWxzZSB7CisJICAgICAgaXRzYWRpciA9IHhpc2Rp cihzb2Zhcik7CisJICAgICAgZGVidWcoRjEwMSwiU1RBVCIsIiIsMjApOworCSAgfQorCisjaWZk ZWYgQ0tTWU1MSU5LCisjaWZkZWYgVVNFX0xTVEFUCisJICBpZiAoaXRzYWRpciAmJiB4bm9saW5r cykgewkJLyogSWYgbm90IGZvbGxvd2luZyBzeW1saW5rcyAqLworCSAgICAgIGludCB4OworCSAg ICAgIHN0cnVjdCBzdGF0IGJ1ZjsKKwkgICAgICB4ID0gbHN0YXQoc29mYXIsJmJ1Zik7CisJICAg ICAgZGVidWcoRjExMSwidHJhdmVyc2UgbHN0YXQgMiIsc29mYXIseCk7CisJICAgICAgaWYgKHgg PiAtMSAmJgorI2lmZGVmIFNfSVNMTksKKwkJICBTX0lTTE5LKGJ1Zi5zdF9tb2RlKQorI2Vsc2UK KyNpZmRlZiBfSUZMTksKKwkJICAoKF9JRk1UICYgYnVmLnN0X21vZGUpID09IF9JRkxOSykKKyNl bmRpZiAvKiBfSUZMTksgKi8KKyNlbmRpZiAvKiBTX0lTTE5LICovCisJCSAgKQorCQlpdHNhZGly ID0gMDsKKwkgIH0KKyNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KKyNlbmRpZiAvKiBDS1NZTUxJTksg Ki8KKworI2lmZGVmIFJFQ1VSU0lWRQorICAgICAgICAgIGlmICh4cmVjdXJzaXZlID4gMCAmJiBp dHNhZGlyICYmCisgICAgICAgICAgICAgICh4cGF0bGFzdFswXSA9PSAnKicpICYmICF4cGF0bGFz dFsxXQorICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgZGVidWcoRjExMCwKKyAgICAg ICAgICAgICAgICAgICAgInRyYXZlcnNlIGFkZDogcmVjdXJzaXZlICYmIGlzZGlyICYmIHNlZ2lz ZGlyIG9yIG1hdGNoIiwKKyAgICAgICAgICAgICAgICAgICAgc29mYXIsCisgICAgICAgICAgICAg ICAgICAgIHNlZ2lzZGlyCisgICAgICAgICAgICAgICAgICAgICk7CisJICAgICAgYWRkcmVzdWx0 KHNvZmFyLGl0c2FkaXIpOworCSAgICAgIGlmIChudW1mbmQgPCAwKSByZXR1cm47CisgICAgICAg ICAgfQorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworCisgICAgICAgICAgZGVidWcoRjExMSwidHJh dmVyc2UgbXJlc3VsdCB4cGF0Iix4cGF0LHhyZWN1cnNpdmUpOworICAgICAgICAgIGRlYnVnKEYx MTEsInRyYXZlcnNlIG1yZXN1bHQgcGwgLT4gbnBhcnQiLAorICAgICAgICAgICAgICAgIHBsIC0+ IG5wYXJ0LAorICAgICAgICAgICAgICAgICgocGwgLT4gZndkKSA/IDk5OTkgOiAwKQorICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgZGVidWcoRjExMSwidHJhdmVyc2UgbXJlc3VsdCBzb2Zh ciBzZWdpc2RpciIsc29mYXIsc2VnaXNkaXIpOworICAgICAgICAgIGRlYnVnKEYxMTEsInRyYXZl cnNlIG1yZXN1bHQgc29mYXIgaXRzYWRpciIsc29mYXIsaXRzYWRpcik7CisgICAgICAgICAgZGVi dWcoRjEwMSwidHJhdmVyc2UgbXJlc3VsdCB4bWF0Y2hkb3QiLCIiLHhtYXRjaGRvdCk7CisvKgor ICBNYXRjaCB0aGUgcGF0aCBzbyBmYXIgd2l0aCB0aGUgcGF0dGVybiBhZnRlciBzdHJpcHBpbmcg YW55IGxlYWRpbmcgIi4vIgorICBmcm9tIGVpdGhlciBvciBib3RoLiAgVGhlIHBhdHRlcm4gY2hv c2VuIGlzIHRoZSBmdWxsIG9yaWdpbmFsIHBhdHRlcm4gaWYKKyAgdGhlIG1hdGNoIGNhbmRpZGF0 ZSAoc29mYXIpIGlzIG5vdCBhIGRpcmVjdG9yeSwgb3IgZWxzZSBqdXN0IHRoZSBuYW1lIHBhcnQK KyAgKHBsLT5ucGFydCkgaWYgaXQgaXMuCisqLworCSAgeworCSAgICAgIGNoYXIgKiBzMTsJCS8q IFRoZSBwYXR0ZXJuICovCisJICAgICAgY2hhciAqIHMyID0gc29mYXI7CS8qIFRoZSBwYXRoIHNv IGZhciAqLworCSAgICAgIGNoYXIgKiBzMzsJCS8qIFdvcmtlciAqLworCSAgICAgIGludCBvcHRz OwkJCS8qIE1hdGNoIG9wdGlvbnMgKi8KKworCSAgICAgIHMxID0gaXRzYWRpciA/IHBsLT5ucGFy dCA6IHhwYXQ7CisKKyNpZm5kZWYgQ09NTUVOVAorCSAgICAgIC8qIEkgY2FuJ3QgZXhwbGFpbiB0 aGlzIGJ1dCBpdCB1bmJyZWFrcyAiY2QgYmxhaC9zdWI8RXNjPiIgKi8KKwkgICAgICBpZiAoaXRz YWRpciAmJiAheHJlY3Vyc2l2ZSAmJiB4cGF0c2xhc2ggPiAwICYmCisJCSAgc2VnaXNkaXIgPT0g MCAmJiBpdHN3aWxkKSB7CisJCSAgczEgPSB4cGF0OworCQkgIGRlYnVnKEYxMTAsInRyYXZlcnNl IG1yZXN1bHQgczEga2x1ZGdlIixzMSwwKTsKKwkgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAq LworCisJICAgICAgaWYgKHhyZWN1cnNpdmUgJiYgeHBhdHNsYXNoID09IDApCisJCXMyID0gbmFt YnVmOworCSAgICAgIHdoaWxlICgoczFbMF0gPT0gJy4nKSAmJiAoczFbMV0gPT0gJy8nKSkgLyog U3RyaXAgIi4vIiAqLworCQlzMSArPSAyOworCSAgICAgIHdoaWxlICgoczJbMF0gPT0gJy4nKSAm JiAoczJbMV0gPT0gJy8nKSkgLyogRGl0dG8gKi8KKwkJczIgKz0gMjsKKwkgICAgICBvcHRzID0g bW9wdHM7CQkvKiBNYXRjaCBvcHRpb25zICovCisJICAgICAgaWYgKGl0c2FkaXIpIAkJLyogQ3Vy cmVudCBzZWdtZW50IGlzIGEgZGlyZWN0b3J5ICovCisJCW9wdHMgPSBtb3B0cyAmIDE7CS8qIE5v IGZlbmNlcyAqLworCSAgICAgIHMzID0gczI7CQkJLyogR2V0IHNlZ21lbnQgZGVwdGggKi8KKwkg ICAgICBkZXB0aCA9IDA7CisJICAgICAgd2hpbGUgKCpzMykgeyBpZiAoKnMzKysgPT0gJy8nKSBk ZXB0aCsrOyB9CisjaWZuZGVmIE5PU0tJUE1BVENICisJICAgICAgLyogVGhpcyBzcGVlZHMgdGhp bmdzIHVwIGEgYml0LiAqLworCSAgICAgIC8qIElmIGl0IGNhdXNlcyB0cm91YmxlIGRlZmluZSBO T1NLSVBNQVRDSCBhbmQgcmVidWlsZC4gKi8KKwkgICAgICBpZiAoZGVwdGggPT0gMCAmJiAoczFb MF0gPT0gJyonKSAmJiAhczFbMV0pCisJCW1yZXN1bHQgPSB4bWF0Y2hkb3QgPyAxIDogKHMyWzBd ICE9ICcuJyk7CisJICAgICAgZWxzZQorI2VuZGlmIC8qIE5PU0tJUE1BVENIICovCisJCW1yZXN1 bHQgPSBja21hdGNoKHMxLHMyLDEsb3B0cyk7IC8qIE1hdGNoICovCisJICB9CisjaWZkZWYgREVC VUcKKwkgIGlmIChkZWJsb2cpIHsKKwkgICAgICBkZWJ1ZyhGMTExLCJ0cmF2ZXJzZSBtcmVzdWx0 IGRlcHRoIixzb2ZhcixkZXB0aCk7CisJICAgICAgZGVidWcoRjEwMSwidHJhdmVyc2UgbXJlc3Vs dCB4cGF0c2xhc2giLCIiLHhwYXRzbGFzaCk7CisJICAgICAgZGVidWcoRjExMSwidHJhdmVyc2Ug bXJlc3VsdCBuYW1idWYiLG5hbWJ1ZixtcmVzdWx0KTsKKwkgICAgICBkZWJ1ZyhGMTExLCJ0cmF2 ZXJzZSBtcmVzdWx0IGl0c3dpbGQiLHBsIC0+IG5wYXJ0LGl0c3dpbGQpOworCSAgICAgIGRlYnVn KEYxMTEsInRyYXZlcnNlIG1yZXN1bHQgc2VnaXNkaXIiLHBsIC0+IG5wYXJ0LHNlZ2lzZGlyKTsK KwkgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgIGlmIChtcmVzdWx0IHx8CQkvKiBJ ZiBtYXRjaCBzdWNjZWVkZWQgKi8KKwkgICAgICB4cmVjdXJzaXZlIHx8CQkvKiBPciBzZWFyY2gg aXMgcmVjdXJzaXZlICovCisJICAgICAgZGVwdGggPCB4cGF0c2xhc2gJCS8qIE9yIG5vdCBkZWVw IGVub3VnaCB0byBtYXRjaC4uLiAqLworCSAgICAgICkgeworICAgICAgICAgICAgICBpZiAoICAg ICAgICAgICAgICAgICAgICAgIC8qIElmIGl0J3Mgbm90IGEgZGlyZWN0b3J5Li4uICovCisvKgor ICBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgc2VnaXNkaXIgaXMgYXBwYXJlbnRseSBub3Qgc2V0 IGFwcHJvcHJpYXRlbHkuCisgIElmIEkgbGVhdmUgaW4gdGhlICFzZWdpc2RpciB0ZXN0LCB0aGVu ICJkaXIgL3JlY3Vyc2l2ZSBibGFoIiAod2hlcmUgYmxhaCBpcworICBhIGRpcmVjdG9yeSBuYW1l KSBtaXNzZXMgc29tZSByZWd1bGFyIGZpbGVzIGJlY2F1c2Ugc29tZXRpbWVzIHNlZ2lzZGlyCisg IGlzIHNldCBhbmQgc29tZXRpbWVzIGl0J3Mgbm90LiAgQnV0IGlmIEkgY29tbWVudCBpdCBvdXQs IHRoZW4KKyAgImRpciA8c3Rhcj4vPHN0YXI+LnR4dCBsaXN0cyBldmVyeSBmaWxlIGluICogYW5k IGRvZXMgbm90IGV2ZW4gb3BlbiB1cCB0aGUKKyAgc3ViZGlyZWN0b3JpZXMuICBIb3dldmVyLCAi ZGlyIC9yZWMgPHN0YXI+LzxzdGFyPi50eHQiIHdvcmtzIHJpZ2h0LgorKi8KKyNpZmRlZiBDT01N RU5UCisgICAgICAgICAgICAgICAgICBtcmVzdWx0ICYmICghaXRzYWRpciAmJiAhc2VnaXNkaXIp CisjZWxzZQorICAgICAgICAgICAgICAgICAgbXJlc3VsdCAmJgkJLyogTWF0Y2hlZCAqLworICAg ICAgICAgICAgICAgICAgIWl0c2FkaXIgJiYJCS8qIHNvZmFyIGlzIG5vdCBhIGRpcmVjdG9yeSAq LworICAgICAgICAgICAgICAgICAgKCgheHJlY3Vyc2l2ZSAmJiAhc2VnaXNkaXIpIHx8IHhyZWN1 cnNpdmUpCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgKSB7CisJCSAg ZGVidWcoRjExMCwKKwkJCSJ0cmF2ZXJzZSBhZGQ6IG1hdGNoICYmICFpdHNhZGlyIixzb2Zhciww KTsKKwkJICBhZGRyZXN1bHQoc29mYXIsaXRzYWRpcik7CisJCSAgaWYgKG51bWZuZCA8IDApIHJl dHVybjsKKyAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdHNhZGlyICYmICh4cmVjdXJzaXZlIHx8 IG1yZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGF0aCAqIHh4ID0gTlVMTDsK KyAgICAgICAgICAgICAgICAgICplb3MrKyA9IERJUlNFUDsgICAgICAvKiBBZGQgZGlyZWN0b3J5 IHNlcGFyYXRvciAqLworICAgICAgICAgICAgICAgICAgKmVvcyA9ICdcMCc7ICAgICAgICAgIC8q IHRvIGVuZCBvZiBzZWdtZW50ICovCisjaWZkZWYgUkVDVVJTSVZFCisgICAgICAgICAgICAgICAg ICAvKiBDb3B5IHByZXZpb3VzIHBhdHRlcm4gc2VnbWVudCB0byB0aGlzIG5ldyBkaXJlY3Rvcnkg Ki8KKworICAgICAgICAgICAgICAgICAgaWYgKHhyZWN1cnNpdmUgPiAwICYmICEocGwgLT4gZndk KSkgeworICAgICAgICAgICAgICAgICAgICAgIHh4ID0gKHN0cnVjdCBwYXRoICopIG1hbGxvYyhz aXplb2YgKHN0cnVjdCBwYXRoKSk7CisgICAgICAgICAgICAgICAgICAgICAgcGwgLT4gZndkID0g eHg7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHh4KSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIHh4IC0+IGZ3ZCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNw eSh4eCAtPiBucGFydCwgcGwgLT4gbnBhcnQpOyAvKiBzYWZlICovCisgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAg ICAgICAgICAgICAgICAgdHJhdmVyc2UocGwgLT4gZndkLCBzb2ZhciwgZW9zKTsgLyogVHJhdmVy c2UgbmV3IGRpcmVjdG9yeSAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg fQorI2lmZGVmIE9QRU5ESVIKKyAgICBjbG9zZWRpcihmZCk7CisjZWxzZSAvKiAhT1BFTkRJUiAq LworICAgIGNsb3NlKGZkKTsKKyNlbmRpZiAvKiBPUEVORElSICovCit9CisKKy8qCisgKiBhZGRy ZXN1bHQ6CisgKiAgQWRkcyBhIHJlc3VsdCBzdHJpbmcgdG8gdGhlIHJlc3VsdCBhcnJheS4gIElu Y3JlbWVudHMgdGhlIG51bWJlcgorICogIG9mIG1hdGNoZXMgZm91bmQsIGNvcGllcyB0aGUgZm91 bmQgc3RyaW5nIGludG8gb3VyIHN0cmluZworICogIGJ1ZmZlciwgYW5kIHB1dHMgYSBwb2ludGVy IHRvIHRoZSBidWZmZXIgaW50byB0aGUgY2FsbGVyJ3MgcmVzdWx0CisgKiAgYXJyYXkuICBPdXIg ZnJlZSBidWZmZXIgcG9pbnRlciBpcyB1cGRhdGVkLiAgSWYgdGhlcmUgaXMgbm8KKyAqICBtb3Jl IHJvb20gaW4gdGhlIGNhbGxlcidzIGFycmF5LCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaXMgc2V0 IHRvIC0xLgorICogSW5wdXQ6IGEgcmVzdWx0IHN0cmluZy4KKyAqIFJldHVybnM6IG5vdGhpbmcu CisgKi8KK3N0YXRpYyBWT0lECithZGRyZXN1bHQoc3RyLGl0c2FkaXIpIGNoYXIgKnN0cjsgaW50 IGl0c2FkaXI7IHsKKyAgICBpbnQgbGVuOworCisgICAgaWYgKCFmcmVlcHRyKSB7CisJZGVidWco RjEwMCwiYWRkcmVzdWx0IHN0cmluZyBzcGFjZSBub3QgaW5pdCdkIiwiIiwwKTsKKwlpbml0c3Bh Y2UobXRjaHMsc3NwbGVuKTsKKyAgICB9CisgICAgaWYgKCFzdHIpIHN0ciA9ICIiOworICAgIGRl YnVnKEYxMTEsImFkZHJlc3VsdCIsc3RyLGl0c2FkaXIpOworICAgIGlmICghKnN0cikKKyAgICAg IHJldHVybjsKKworICAgIGlmIChpdHNhZGlyIDwgMCkgeworCWl0c2FkaXIgPSB4aXNkaXIoc3Ry KTsKKyAgICB9CisgICAgaWYgKCh4ZGlyb25seSAmJiAhaXRzYWRpcikgfHwgKHhmaWxvbmx5ICYm IGl0c2FkaXIpKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImFkZHJlc3VsdCBza2lwIixzdHIsaXRz YWRpcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgd2hpbGUgKHN0clswXSA9PSAnLicg JiYgSVNESVJTRVAoc3RyWzFdKSkgLyogU3RyaXAgYWxsICIuLyIgZnJvbSBmcm9udCAqLworICAg ICAgc3RyICs9IDI7CisgICAgaWYgKC0tcmVtbGVuIDwgMCkgeyAgICAgICAgICAgICAgICAgLyog RWxlbWVudHMgbGVmdCBpbiBhcnJheSBvZiBuYW1lcyAqLworICAgICAgICBkZWJ1ZyhGMTExLCJh ZGRyZXN1bHQgQVJSQVkgRlVMTCIsc3RyLG51bWZuZCk7CisgICAgICAgIG51bWZuZCA9IC0xOwor ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGxlbiA9IChpbnQpc3RybGVuKHN0cik7CQkvKiBT cGFjZSB0aGlzIHdpbGwgdXNlICovCisgICAgZGVidWcoRjExMSwiYWRkcmVzdWx0IGxlbiIsc3Ry LGxlbik7CisKKyAgICBpZiAobGVuIDwgMSkKKyAgICAgIHJldHVybjsKKworICAgIGlmICgoZnJl ZXB0ciArIGxlbiArIGl0c2FkaXIgKyAxKSA+IChzc3BhY2UgKyBzc3BsZW4pKSB7CisgICAgICAg IGRlYnVnKEYxMTEsImFkZHJlc3VsdCBPVVQgT0YgU1BBQ0UiLHN0cixudW1mbmQpOworI2lmZGVm IERZTkFNSUMKKwlwcmludGYoCisiP1N0cmluZyBzcGFjZSAlZCBleGhhdXN0ZWQgLSB1c2UgU0VU IEZJTEUgU1RSSU5HU1BBQ0UgdG8gaW5jcmVhc2VcbiIsc3NwbGVuKTsKKyNlbHNlCisJcHJpbnRm KCI/U3RyaW5nIHNwYWNlICVkIGV4aGF1c3RlZFxuIixzc3BsZW4pOworI2VuZGlmIC8qIERZTkFN SUMgKi8KKyAgICAgICAgbnVtZm5kID0gLTE7ICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3Qg cmVjb3JkIGlmIG5vdCBlbm91Z2ggc3BhY2UgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg ICBzdHJjcHkoZnJlZXB0cixzdHIpOwkJLyogc2FmZSAqLworCisgICAgLyogVGFnIGRpcmVjdG9y eSBuYW1lcyBieSBwdXR0aW5nICcvJyBhdCB0aGUgZW5kICovCisKKyAgICBpZiAoaXRzYWRpciAm JiAoZnJlZXB0cltsZW4tMV0gPT0gJy8nKSkgeworICAgICAgICBmcmVlcHRyW2xlbisrXSA9IERJ UlNFUDsKKyAgICAgICAgZnJlZXB0cltsZW5dID0gJ1wwJzsKKyAgICB9CisgICAgaWYgKG51bWZu ZCA+PSBtYXhuYW1lcykgeworI2lmZGVmIERZTkFNSUMKKwlwcmludGYoCisiP1RvbyBtYW55IGZp bGVzICglZCBtYXgpIC0gdXNlIFNFVCBGSUxFIExJU1RTSVpFIHRvIGluY3JlYXNlXG4iLG1heG5h bWVzKTsKKyNlbHNlCisJcHJpbnRmKCI/VG9vIG1hbnkgZmlsZXMgLSAlZCBtYXhcbiIsbWF4bmFt ZXMpOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKyAgICAgICAgbnVtZm5kID0gLTE7CisgICAgICAg IHJldHVybjsKKyAgICB9CisgICAgc3RyID0gZnJlZXB0cjsKKyAgICAqcmVzcHRyKysgPSBmcmVl cHRyOworICAgIGZyZWVwdHIgKz0gKGxlbiArIDEpOworICAgIG51bWZuZCsrOworICAgIGRlYnVn KEYxMTEsImFkZHJlc3VsdCBBREQiLHN0cixudW1mbmQpOworfQorCisjaWZkZWYgQ09NTUVOVAor LyoKKyAqIG1hdGNoKHBhdHRlcm4sc3RyaW5nKToKKyAqICBwYXR0ZXJuIG1hdGNoZXIuICBUYWtl cyBhIHN0cmluZyBhbmQgYSBwYXR0ZXJuIHBvc3NpYmx5IGNvbnRhaW5pbmcKKyAqICB0aGUgd2ls ZGNhcmQgY2hhcmFjdGVycyAnKicgYW5kICc/Jy4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGF0dGVy bgorICogIG1hdGNoZXMgdGhlIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlLgorICogT3JpZ25hbGx5 IGJ5OiBKZWZmIERhbWVucywgQ1VDQ0EsIDE5ODQKKyAqIE5vIGxvbmdlciB1c2VkIGFzIG9mIEMt S2VybWl0IDcuMCwgbm93IHdlIHVzZSBja21hdGNoKCkgaW5zdGVhZCAoY2tjbGliLmMpLgorICoK KyAqIElucHV0OiBhIHN0cmluZyBhbmQgYSB3aWxkY2FyZCBwYXR0ZXJuLgorICogUmV0dXJuczog MSBpZiBtYXRjaCwgMCBpZiBubyBtYXRjaC4KKyAqLworc3RhdGljIGludAorbWF0Y2gocGF0dGVy biwgc3RyaW5nKSBjaGFyICpwYXR0ZXJuLCAqc3RyaW5nOyB7CisgICAgY2hhciAqcHNhdmUgPSBO VUxMLCAqc3NhdmUgPSBOVUxMOyAgLyogQmFja3VwIHBvaW50ZXJzIGZvciBmYWlsdXJlICovCisg ICAgaW50IHEgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUXVvdGUgZmxhZyAqLwor CisgICAgaWYgKCpzdHJpbmcgPT0gJy4nICYmICpwYXR0ZXJuICE9ICcuJyAmJiAheG1hdGNoZG90 KSB7CisgICAgICAgIGRlYnVnKEYxMTAsIm1hdGNoIHNraXAiLHN0cmluZywwKTsKKyAgICAgICAg cmV0dXJuKDApOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBmb3IgKDsgKnBhdHRl cm4gPT0gKnN0cmluZzsgcGF0dGVybisrLHN0cmluZysrKSAvKiBTa2lwIGZpcnN0ICovCisgICAg ICAgICAgaWYgKCpzdHJpbmcgPT0gJ1wwJykgcmV0dXJuKDEpOyAvKiBFbmQgb2Ygc3RyaW5ncywg c3VjY2VlZCAqLworCisgICAgICAgIGlmICgqcGF0dGVybiA9PSAnXFwnICYmIHEgPT0gMCkgeyAv KiBXYXRjaCBvdXQgZm9yIHF1b3RlZCAqLworICAgICAgICAgICAgcSA9IDE7ICAgICAgICAgICAg ICAgICAgICAgIC8qIG1ldGFjaGFyYWN0ZXJzICovCisgICAgICAgICAgICBwYXR0ZXJuKys7ICAg ICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwYXN0IHF1b3RlICovCisgICAgICAgICAgICBpZiAo KnBhdHRlcm4gIT0gKnN0cmluZykgcmV0dXJuKDApOworICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgIH0gZWxzZSBxID0gMDsKKworICAgICAgICBpZiAocSkgeworICAgICAgICAgICAgcmV0 dXJuKDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCpzdHJpbmcgIT0gJ1ww JyAmJiAqcGF0dGVybiA9PSAnPycpIHsKKyAgICAgICAgICAgICAgICBwYXR0ZXJuKys7ICAgICAg ICAgICAgICAvKiAnPycsIGxldCBpdCBtYXRjaCAqLworICAgICAgICAgICAgICAgIHN0cmluZysr OworICAgICAgICAgICAgfSBlbHNlIGlmICgqcGF0dGVybiA9PSAnKicpIHsgLyogJyonIC4uLiAq LworICAgICAgICAgICAgICAgIHBzYXZlID0gKytwYXR0ZXJuOyAgICAgIC8qIHJlbWVtYmVyIHdo ZXJlIHdlIHNhdyBpdCAqLworICAgICAgICAgICAgICAgIHNzYXZlID0gc3RyaW5nOyAgICAgICAg IC8qIGxldCBpdCBtYXRjaCAwIGNoYXJzICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKHNzYXZl ICE9IE5VTEwgJiYgKnNzYXZlICE9ICdcMCcpIHsgLyogaWYgbm90IGF0IGVuZCAgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAuLi5oYXZlIHNlZW4gYSBzdGFy ICovCisgICAgICAgICAgICAgICAgc3RyaW5nID0gKytzc2F2ZTsgICAgICAgLyogc2tpcCAxIGNo YXIgZnJvbSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcHNhdmU7ICAgICAg ICAvKiBhbmQgYmFjayB1cCBwYXR0ZXJuICovCisgICAgICAgICAgICB9IGVsc2UgcmV0dXJuKDAp OyAgICAgICAgICAgLyogb3RoZXJ3aXNlIGp1c3QgZmFpbCAqLworICAgICAgICB9CisgICAgfQor fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworLyoKKyAgVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rp b25zIGFyZSBmb3IgZXhwYW5kaW5nIHRpbGRlIGluIGZpbGVuYW1lcworICBDb250cmlidXRlZCBi eSBIb3dpZSBLYXllLCBDVUNDQSwgZGV2ZWxvcGVkIGZvciBDQ01EIHBhY2thZ2UuCisqLworCisv KiAgVyBIIE8gQSBNIEkgIC0tICBHZXQgdXNlcidzIHVzZXJuYW1lLiAgKi8KKworLyoKKyAgMSkg R2V0IHJlYWwgdWlkCisgIDIpIFNlZSBpZiB0aGUgJFVTRVIgZW52aXJvbm1lbnQgdmFyaWFibGUg aXMgc2V0ICgkTE9HTkFNRSBvbiBBVCZUKQorICAzKSBJZiAkVVNFUidzIHVpZCBpcyB0aGUgc2Ft ZSBhcyBydWlkLCByZWFsbmFtZSBpcyAkVVNFUgorICA0KSBPdGhlcndpc2UgZ2V0IGxvZ2dlZCBp biB1c2VyJ3MgbmFtZQorICA1KSBJZiB0aGF0IG5hbWUgaGFzIHRoZSBzYW1lIHVpZCBhcyB0aGUg cmVhbCB1aWQgcmVhbG5hbWUgaXMgbG9naW5uYW1lCisgIDYpIE90aGVyd2lzZSwgZ2V0IGEgbmFt ZSBmb3IgcnVpZCBmcm9tIC9ldGMvcGFzc3dkCisqLworY2hhciAqCit3aG9hbWkoKSB7CisjaWZk ZWYgRFRJTERFCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgV0hPTEVOIDEwMAorI2Vsc2UKKyNkZWZp bmUgV0hPTEVOIDI1NworI2VuZGlmIC8qIHBkcDExICovCisgICAgc3RhdGljIGNoYXIgcmVhbG5h bWVbVUlEQlVGTEVOKzFdOyAgLyogdXNlcidzIG5hbWUgKi8KKyAgICBzdGF0aWMgaW50IHJ1aWQg PSAtMTsgICAgICAgICAgICAgICAvKiB1c2VyJ3MgcmVhbCB1aWQgKi8KKyAgICBjaGFyIGxvZ2lu bmFtZVtVSURCVUZMRU4rMV0sIGVudm5hbWVbMjU2XTsgLyogdGVtcCBzdG9yYWdlICovCisgICAg Y2hhciAqYzsKKyAgICBzdHJ1Y3QgcGFzc3dkICpwOworICAgIF9QUk9UT1RZUChleHRlcm4gY2hh ciAqIGdldGxvZ2luLCAodm9pZCkgKTsKKworICAgIGRlYnVnKEYxMTEsIndob2FtaSBydWlkIEEi LHJlYWxuYW1lLHJ1aWQpOworCisgICAgaWYgKHJ1aWQgIT0gLTEpCisgICAgICByZXR1cm4ocmVh bG5hbWUpOworCisgICAgcnVpZCA9IHJlYWxfdWlkKCk7ICAgICAgICAgICAgICAgICAgLyogZ2V0 IG91ciB1aWQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ3aG9hbWkgcnVpZCBCIiwiIixydWlkKTsKKyAg ICBpZiAocnVpZCA8IDApIHJ1aWQgPSBnZXR1aWQoKTsKKyAgICBkZWJ1ZyhGMTAxLCJ3aG9hbWkg cnVpZCBDIiwiIixydWlkKTsKKworICAvKiBob3cgYWJvdXQgJFVTRVIgb3IgJExPR05BTUU/ICov CisgICAgaWYgKChjID0gZ2V0ZW52KE5BTUVFTlYpKSAhPSBOVUxMKSB7IC8qIGNoZWNrIHRoZSBl bnYgdmFyaWFibGUgKi8KKyAgICAgICAgY2tzdHJuY3B5KGVudm5hbWUsIGMsIDI1NSk7CisJZGVi dWcoRjExMCwid2hvYW1pIGVudm5hbWUiLGVudm5hbWUsMCk7CisgICAgICAgIGlmICgocCA9IGdl dHB3bmFtKGVudm5hbWUpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAocC0+cHdfdWlkID09 IHJ1aWQpIHsgICAgLyogZ2V0IHBhc3N3ZCBlbnRyeSBmb3IgZW52bmFtZSAqLworICAgICAgICAg ICAgICAgIGNrc3RybmNweShyZWFsbmFtZSwgZW52bmFtZSwgVUlEQlVGTEVOKTsgLyogdWlkJ3Mg YXJlIHNhbWUgKi8KKwkJZGVidWcoRjExMCwid2hvYW1pIHJlYWxuYW1lIixyZWFsbmFtZSwwKTsK KyAgICAgICAgICAgICAgICByZXR1cm4ocmVhbG5hbWUpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorCisgIC8qIGNhbiB3ZSB1c2UgbG9naW5uYW1lKCkgPyAqLworCisgICAgaWYg KChjID0gIGdldGxvZ2luKCkpICE9IE5VTEwpIHsgICAgLyogbmFtZSBmcm9tIHV0bXAgZmlsZSAq LworICAgICAgICBja3N0cm5jcHkgKGxvZ2lubmFtZSwgYywgVUlEQlVGTEVOKTsKKwlkZWJ1ZyhG MTEwLCJ3aG9hbWkgbG9naW5uYW1lIixsb2dpbm5hbWUsMCk7IAorICAgICAgICBpZiAoKHAgPSBn ZXRwd25hbShsb2dpbm5hbWUpKSAhPSBOVUxMKSAvKiBnZXQgcGFzc3dkIGVudHJ5ICovCisgICAg ICAgICAgaWYgKHAtPnB3X3VpZCA9PSBydWlkKSAgICAgICAgLyogZm9yIGxvZ2lubmFtZSAqLwor ICAgICAgICAgICAgY2tzdHJuY3B5KHJlYWxuYW1lLCBlbnZuYW1lLCBVSURCVUZMRU4pOyAvKiBp ZiB1aWQncyBhcmUgc2FtZSAqLworICAgIH0KKworICAvKiBVc2UgZmlyc3QgbmFtZSB3ZSBnZXQg Zm9yIHJ1aWQgKi8KKworICAgIGlmICgocCA9IGdldHB3dWlkKHJ1aWQpKSA9PSBOVUxMKSB7IC8q IG5hbWUgZm9yIHVpZCAqLworCWRlYnVnKEYxMDEsIndob2FtaSBubyB1c2VybmFtZSBmb3IgcnVp ZCIsIiIscnVpZCk7IAorICAgICAgICByZWFsbmFtZVswXSA9ICdcMCc7ICAgICAgICAgICAgIC8q IG5vIHVzZXIgbmFtZSAqLworICAgICAgICBydWlkID0gLTE7CisgICAgICAgIHJldHVybihOVUxM KTsKKyAgICB9CisgICAgY2tzdHJuY3B5KHJlYWxuYW1lLCBwLT5wd19uYW1lLCBVSURCVUZMRU4p OworICAgIGRlYnVnKEYxMTAsIndob2FtaSByZWFsbmFtZSBmcm9tIGdldHB3dWlkIixyZWFsbmFt ZSwwKTsKKyAgICByZXR1cm4ocmVhbG5hbWUpOworI2Vsc2UKKyAgICByZXR1cm4oTlVMTCk7Cisj ZW5kaWYgLyogRFRJTERFICovCit9CisKKy8qICBUIEkgTCBEIEUgXyBFIFggUCBBIE4gRCAgLS0g IGV4cGFuZCB+dXNlciB0byB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAqLworCitjaGFyICoK K3RpbGRlX2V4cGFuZChkaXJuYW1lKSBjaGFyICpkaXJuYW1lOyB7CisjaWZkZWYgRFRJTERFCisj aWZkZWYgcGRwMTEKKyNkZWZpbmUgQlVGTEVOIDEwMAorI2Vsc2UKKyNkZWZpbmUgQlVGTEVOIDI1 NworI2VuZGlmIC8qIHBkcDExICovCisgICAgc3RydWN0IHBhc3N3ZCAqdXNlcjsKKyAgICBzdGF0 aWMgY2hhciBvbGRkaXJbQlVGTEVOKzFdOworICAgIHN0YXRpYyBjaGFyIG9sZHJlYWxkaXJbQlVG TEVOKzFdOworICAgIHN0YXRpYyBjaGFyIHRlbXBbQlVGTEVOKzFdOworICAgIGludCBpLCBqOwor CisgICAgZGVidWcoRjExMSwidGlsZGVfZXhwYW5kIixkaXJuYW1lLGRpcm5hbWVbMF0pOworCisg ICAgaWYgKGRpcm5hbWVbMF0gIT0gJ34nKSB7ICAgICAgICAgICAgICAvKiBOb3QgYSB0aWxkZS4u LnJldHVybiBwYXJhbSAqLworCWRlYnVnKEYwMDAsInRpbGRlX2V4cGFuZCBOT1QgVElMREUiLCIi LGRpcm5hbWVbMF0pOworCXJldHVybihkaXJuYW1lKTsKKyAgICB9CisgICAgaWYgKCFzdHJjbXAo b2xkZGlyLGRpcm5hbWUpKSB7ICAgICAgLyogU2FtZSBhcyBsYXN0IHRpbWUgKi8KKwlkZWJ1ZyhG MTEwLCJ0aWxkZV9leHBhbmQgc2FtZSBhcyBwcmV2aW91cyIsb2xkcmVhbGRpciwwKTsKKwlyZXR1 cm4ob2xkcmVhbGRpcik7ICAgICAgICAgICAgICAgLyogc28gcmV0dXJuIG9sZCBhbnN3ZXIuICov CisgICAgfSBlbHNlIHsKKwlkZWJ1ZyhGMTEwLCJ0aWxkZV9leHBhbmQgd29ya2luZy4uLiIsIiIs MCk7CisgICAgICAgIGogPSAoaW50KXN0cmxlbihkaXJuYW1lKTsKKyAgICAgICAgZm9yIChpID0g MDsgaSA8IGo7IGkrKykgICAgICAgICAvKiBmaW5kIHVzZXJuYW1lIHBhcnQgb2Ygc3RyaW5nICov CisgICAgICAgICAgaWYgKCFJU0RJUlNFUChkaXJuYW1lW2ldKSkKKyAgICAgICAgICAgIHRlbXBb aV0gPSBkaXJuYW1lW2ldOworICAgICAgICAgIGVsc2UgYnJlYWs7CisgICAgICAgIHRlbXBbaV0g PSAnXDAnOyAgICAgICAgICAgICAgICAgLyogdGllIG9mZiB3aXRoIGEgTlVMTCAqLworCWRlYnVn KEYxMTEsInRpbGRlX2V4cGFuZCBmaXJzdCBwYXJ0Iix0ZW1wLGkpOworICAgICAgICBpZiAoaSA9 PSAxKSB7ICAgICAgICAgICAgICAgICAgIC8qIGlmIGp1c3QgYSAifiIgKi8KKyNpZmRlZiBJS1NE CisgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICAgICAgICAgIHVzZXIgPSBnZXRwd25h bSh1aWRidWYpOyAgLyogR2V0IGluZm8gb24gY3VycmVudCB1c2VyICovCisgICAgICAgICAgICBl bHNlCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNo YXIgKiBwID0gd2hvYW1pKCk7CisJCWRlYnVnKEYxMTAsInRpbGRlX2V4cGFuZCBwIixwLDApOwor ICAgICAgICAgICAgICAgIGlmIChwKSB7CisJCSAgICB1c2VyID0gZ2V0cHduYW0ocCk7CisJCSAg ICBkZWJ1ZyhGMTEwLCJ0aWxkZV9leHBhbmQgZ2V0cHdwYW0gfiIsdXNlciwwKTsKKwkJfSBlbHNl IHsKKwkJICAgIHVzZXIgPSBOVUxMOworCQl9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSB7CisJICAgIGRlYnVnKEYxMTAsInRpbGRlX2V4cGFuZCB+dXNlciIsJnRlbXBbMV0sMCk7Cisg ICAgICAgICAgICB1c2VyID0gZ2V0cHduYW0oJnRlbXBbMV0pOyAgLyogb3RoZXJ3aXNlIG9uIHRo ZSBzcGVjaWZpZWQgdXNlciAqLworCSAgICBkZWJ1ZyhGMTEwLCJ0aWxkZV9leHBhbmQgZ2V0cHdw YW0gdXNlciIsdXNlciwwKTsKKyAgICAgICAgfQorCisgICAgfQorICAgIGlmICh1c2VyICE9IE5V TEwpIHsgICAgICAgICAgICAgICAgIC8qIHZhbGlkIHVzZXI/ICovCisgICAgICAgIGNrc3RybmNw eShvbGRkaXIsIGRpcm5hbWUsIEJVRkxFTik7IC8qIHJlbWVtYmVyIHRoZSBkaXJlY3RvcnkgKi8K KyAgICAgICAgY2tzdHJuY3B5KG9sZHJlYWxkaXIsdXNlci0+cHdfZGlyLCBCVUZMRU4pOyAvKiBh bmQgaG9tZSBkaXJlY3RvcnkgKi8KKyAgICAgICAgY2tzdHJuY2F0KG9sZHJlYWxkaXIsJmRpcm5h bWVbaV0sIEJVRkxFTik7CisgICAgICAgIG9sZHJlYWxkaXJbQlVGTEVOXSA9ICdcMCc7CisgICAg ICAgIHJldHVybihvbGRyZWFsZGlyKTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBpbnZhbGlkPyAqLworICAgICAgICBja3N0cm5jcHkob2xkZGlyLCBkaXJuYW1l LCBCVUZMRU4pOyAvKiByZW1lbWJlciBmb3IgbmV4dCB0aW1lICovCisgICAgICAgIGNrc3RybmNw eShvbGRyZWFsZGlyLCBkaXJuYW1lLCBCVUZMRU4pOworICAgICAgICByZXR1cm4ob2xkcmVhbGRp cik7CisgICAgfQorI2Vsc2UKKyAgICByZXR1cm4oTlVMTCk7CisjZW5kaWYgLyogRFRJTERFICov Cit9CisKKy8qCisgIEZ1bmN0aW9ucyBmb3IgZXhlY3V0aW5nIHN5c3RlbSBjb21tYW5kcy4KKyAg enN5c2NtZCgpIGV4ZWN1dGVzIHRoZSBzeXN0ZW0gY29tbWFuZCBpbiB0aGUgbm9ybWFsLCBkZWZh dWx0IHdheSBmb3IKKyAgdGhlIHN5c3RlbS4gIEluIFVOSVgsIGl0IGRvZXMgd2hhdCBzeXN0ZW0o KSBkb2VzLiAgVGh1cywgaXRzIHJlc3VsdHMKKyAgYXJlIGFsd2F5cyBwcmVkaWN0YWJsZS4KKyAg enNoY21kKCkgZXhlY3V0ZXMgdGhlIGNvbW1hbmQgdXNpbmcgdGhlIHVzZXIncyBwcmVmZXJyZWQg c2hlbGwuCisqLworaW50Cit6c3lzY21kKHMpIGNoYXIgKnM7IHsKKyNpZmRlZiBhZWdpcworICAg IGlmIChub3B1c2gpIHJldHVybigtMSk7CisgICAgaWYgKCFwcml2X2NoaygpKSByZXR1cm4oc3lz dGVtKHMpKTsKKyNlbHNlCisgICAgUElEX1Qgc2hwaWQ7CisjaWZkZWYgQ09NTUVOVAorLyogVGhp cyBkb2Vzbid0IHdvcmsuLi4gKi8KKyAgICBXQUlUX1Qgc3RhdHVzOworI2Vsc2UKKyAgICBpbnQg c3RhdHVzOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmIChub3B1c2gpIHJldHVybigt MSk7CisgICAgaWYgKChzaHBpZCA9IGZvcmsoKSkpIHsKKyAgICAgICAgaWYgKHNocGlkIDwgKFBJ RF9UKTApIHJldHVybigtMSk7IC8qIFBhcmVudCAqLworICAgICAgICB3aGlsZSAoc2hwaWQgIT0g KFBJRF9UKSB3YWl0KCZzdGF0dXMpKQorICAgICAgICAgOworICAgICAgICByZXR1cm4oc3RhdHVz KTsKKyAgICB9CisgICAgaWYgKHByaXZfY2FuKCkpIHsgICAgICAgICAgICAgICAgICAgLyogQ2hp bGQ6IGNhbmNlbCBhbnkgcHJpdidzICovCisgICAgICAgIHByaW50ZigiP1ByaXZpbGVnZSBjYW5j ZWxsYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgIF9leGl0KDI1NSk7CisgICAgfQorICAgIHJl c3RvcnNpZ3MoKTsJCQkvKiBSZXN0b3JlIGlnbm9yZWQgc2lnbmFscyAqLworI2lmZGVmIEhQVVgx MAorICAgIGV4ZWNsKCIvdXNyL2Jpbi9zaCIsInNoIiwiLWMiLHMsTlVMTCk7CisgICAgcGVycm9y KCIvdXNyL2Jpbi9zaCIpOworI2Vsc2UKKyNpZmRlZiBQbGFuOQorICAgIGV4ZWNsKCIvYmluL3Jj IiwgInJjIiwgIi1jIiwgcywgTlVMTCk7CisgICAgcGVycm9yKCIvYmluL3JjIik7CisjZWxzZQor ICAgIGV4ZWNsKCIvYmluL3NoIiwic2giLCItYyIscyxOVUxMKTsKKyAgICBwZXJyb3IoIi9iaW4v c2giKTsKKyNlbmRpZiAvKiBQbGFuOSAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworICAgIF9leGl0 KDI1NSk7CisgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2h1dCB1 cCBBTlNJIGNvbXBpbGVycy4gKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworfQorCisKKy8qICBaIF8g RSBYIEUgQyAgLS0gIE92ZXJsYXkgb3Vyc2VsdmVzIHdpdGggYW5vdGhlciBwcm9ncmFtICAqLwor CisjaWZuZGVmIE5PWkVYRUMKKyNpZmRlZiBIUFVYNQorI2RlZmluZSBOT1pFWEVDCisjZWxzZQor I2lmZGVmIEFUVDczMDAKKyNkZWZpbmUgTk9aRVhFQworI2VuZGlmIC8qIEFUVDczMDAgKi8KKyNl bmRpZiAvKiBIUFVYNSAqLworI2VuZGlmIC8qIE5PWkVYRUMgKi8KKworVk9JRAorel9leGVjKHAs cyx0KSBjaGFyICogcCwgKiogczsgaW50IHQ7IHsgIC8qIE92ZXJsYXkgb3Vyc2VsdmVzIHdpdGgg InAgcy4uLiIgKi8KKyNpZmRlZiBOT1pFWEVDCisgICAgcHJpbnRmKCJFWEVDIC9SRURJUkVDVCBO T1QgSU1QTEVNRU5URUQgSU4gVEhJUyBWRVJTSU9OIE9GIEMtS0VSTUlUXG4iKTsKKyAgICBkZWJ1 ZyhGMTEwLCJ6X2V4ZWMgTk9UIElNUExFTUVOVEVEIixwLDApOworI2Vsc2UKKyAgICBpbnQgeDsK KyAgICBleHRlcm4gaW50IHR0eWZkOworICAgIGRlYnVnKEYxMTAsInpfZXhlYyBjb21tYW5kIixw LDApOworICAgIGRlYnVnKEYxMTAsInpfZXhlYyBhcmcgMCIsc1swXSwwKTsKKyAgICBkZWJ1ZyhG MTEwLCJ6X2V4ZWMgYXJnIDEiLHNbMV0sMCk7CisgICAgZGVidWcoRjEwMSwiel9leGVjIHQiLCIi LHQpOworICAgIGVycm5vID0gMDsKKyAgICBpZiAodCkgeworICAgICAgICBpZiAodHR5ZmQgPiAy KSB7CisgICAgICAgICAgICBkdXAyKHR0eWZkLCAwKTsKKyAgICAgICAgICAgIGR1cDIodHR5ZmQs IDEpOworICAgICAgICAgICAgLyogZHVwMih0dHlmZCwgMik7ICovCisgICAgICAgICAgICBjbG9z ZSh0dHlmZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdG9yc2lncygpOwkJCS8qIFJlc3Rv cmUgaWdub3JlZCBzaWduYWxzICovCisgICAgeCA9IGV4ZWN2cChwLHMpOworICAgIGlmICh4IDwg MCkgZGVidWcoRjEwMSwiel9leGVjIGVycm5vIiwiIixlcnJubyk7CisjZW5kaWYgLyogTk9aRVhF QyAqLworfQorCisvKgorICBaIFMgSCBDIE0gRCAgLS0gIEV4ZWN1dGUgYSBzaGVsbCBjb21tYW5k IChvciBwcm9ncmFtIHRocnUgdGhlIHNoZWxsKS4KKworICBPcmlnaW5hbCBVTklYIGNvZGUgYnkg SC4gRmlzY2hlcjsgY29weXJpZ2h0IHJpZ2h0cyBhc3NpZ25lZCB0byBDb2x1bWJpYSBVLgorICBB ZGFwdGVkIHRvIHVzZSBnZXRwd3VpZCB0byBmaW5kIGxvZ2luIHNoZWxsIGJlY2F1c2UgbWFueSBz eXN0ZW1zIGRvIG5vdAorICBoYXZlIFNIRUxMIGluIGVudmlyb25tZW50LCBhbmQgdG8gdXNlIGRp cmVjdCBjYWxsaW5nIG9mIHNoZWxsIHJhdGhlcgorICB0aGFuIGludGVybWVkaWF0ZSBzeXN0ZW0o KSBjYWxsLiAtLSBILiBGaXNjaGVyICgxOTg1KTsgbWFueSBjaGFuZ2VzIHNpbmNlCisgIHRoZW4u ICBDYWxsIHdpdGggcyBwb2ludGluZyB0byBjb21tYW5kIHRvIGV4ZWN1dGUuICBSZXR1cm5zOgor ICAgLTEgb24gZmFpbHVyZSB0byBzdGFydCB0aGUgY29tbWFuZCAoY2FuJ3QgZmluZCwgY2FuJ3Qg Zm9yaywgY2FuJ3QgcnVuKS4KKyAgICAxIGlmIGNvbW1hbmQgcmFuIGFuZCBnYXZlIGFuIGV4aXQg c3RhdHVzIG9mIDAuCisgICAgMCBpZiBjb21tYW5kIHJhbiBhbmQgZ2F2ZSBhIG5vbnplcm8gZXhp dCBzdGF0dXMuCisgIHdpdGggcGV4aXRzdGF0dXMgY29udGFpbmluZyB0aGUgY29tbWFuZCdzIGV4 aXQgc3RhdHVzLgorKi8KK2ludAorenNoY21kKHMpIGNoYXIgKnM7IHsKKyAgICBQSURfVCBwaWQ7 CisKKyNpZmRlZiBOT1BVU0gKKyAgICByZXR1cm4oMCk7CisjZWxzZQorICAgIGlmIChub3B1c2gp IHJldHVybigtMSk7CisgICAgaWYgKCFzKSByZXR1cm4oLTEpOworICAgIHdoaWxlICgqcyA9PSAn ICcpIHMrKzsKKworICAgIGRlYnVnKEYxMTAsInpzaGNtZCBjb21tYW5kIixzLDApOworCisjaWZk ZWYgYWVnaXMKKyAgICBpZiAoKHBpZCA9IHZmb3JrKCkpID09IDApIHsgICAgICAgICAvKiBNYWtl IGNoaWxkIHF1aWNrbHkgKi8KKyAgICAgICAgY2hhciAqc2hwYXRoLCAqc2huYW1lLCAqc2hwdHI7 ICAvKiBGb3IgZmluZGluZyBkZXNpcmVkIHNoZWxsICovCisKKyAgICAgICAgaWYgKHByaXZfY2Fu KCkpIGV4aXQoMSk7ICAgICAgICAvKiBUdXJuIG9mZiBwcml2cy4gKi8KKyAgICAgICAgaWYgKChz aHBhdGggPSBnZXRlbnYoIlNIRUxMIikpID09IE5VTEwpIHNocGF0aCA9ICIvY29tL3NoIjsKKwor I2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBVbml4IHN5c3Rl bXMgKi8KKyAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gMCkgeyAgICAgICAgICAvKiBNYWtlIGNo aWxkICovCisgICAgICAgIGNoYXIgKnNocGF0aCwgKnNobmFtZSwgKnNocHRyOyAgLyogRm9yIGZp bmRpbmcgZGVzaXJlZCBzaGVsbCAqLworICAgICAgICBzdHJ1Y3QgcGFzc3dkICpwOworI2lmZGVm IEhQVVgxMCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgKi8KKyAgICAgICAg Y2hhciAqZGVmc2hlbGwgPSAiL3Vzci9iaW4vc2giOworI2Vsc2UKKyNpZmRlZiBQbGFuOQorICAg ICAgICBjaGFyICpkZWZzaGVsbCA9ICIvYmluL3JjIjsKKyNlbHNlCisgICAgICAgIGNoYXIgKmRl ZnNoZWxsID0gIi9iaW4vc2giOworI2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogSFBVWDEw ICovCisgICAgICAgIGlmIChwcml2X2NhbigpKSBleGl0KDEpOyAgICAgICAgLyogVHVybiBvZmYg cHJpdnMuICovCisjaWZkZWYgQ09NTUVOVAorLyogT2xkIHdheSBhbHdheXMgdXNlZCAvZXRjL3Bh c3N3ZCBzaGVsbCAqLworICAgICAgICBwID0gZ2V0cHd1aWQocmVhbF91aWQoKSk7ICAgICAgIC8q IEdldCBsb2dpbiBkYXRhICovCisgICAgICAgIGlmIChwID09IChzdHJ1Y3QgcGFzc3dkICopIE5V TEwgfHwgISoocC0+cHdfc2hlbGwpKQorICAgICAgICAgIHNocGF0aCA9IGRlZnNoZWxsOworICAg ICAgICBlbHNlCisgICAgICAgICAgc2hwYXRoID0gcC0+cHdfc2hlbGw7CisjZWxzZQorLyogTmV3 IHdheSBsZXRzIHVzZXIgb3ZlcnJpZGUgd2l0aCBTSEVMTCB2YXJpYWJsZSwgYnV0IGRvZXMgbm90 IHJlbHkgb24gaXQuICovCisvKiBUaGlzIGFsbG93cyB1c2VyIHRvIHNwZWNpZnkgYSBkaWZmZXJl bnQgc2hlbGwuICovCisgICAgICAgIHNocGF0aCA9IGdldGVudigiU0hFTEwiKTsgICAgICAgLyog V2hhdCBzaGVsbD8gKi8KKwlkZWJ1ZyhGMTEwLCJ6c2hjbWQgU0hFTEwiLHNocGF0aCwwKTsKKwl7 CisJICAgIGludCB4ID0gMDsKKwkgICAgaWYgKCFzaHBhdGgpIHsKKwkJeCsrOworCSAgICB9IGVs c2UgaWYgKCEqc2hwYXRoKSB7CisJCXgrKzsKKwkgICAgfQorCSAgICBpZiAoeCkgeworCQlkZWJ1 ZyhGMTAwLCJ6c2hjbWQgU0hFTEwgbm90IGRlZmluZWQiLCIiLDApOworCQlwID0gZ2V0cHd1aWQo IHJlYWxfdWlkKCkgKTsgLyogR2V0IGxvZ2luIGRhdGEgKi8KKwkJaWYgKHAgPT0gKHN0cnVjdCBw YXNzd2QgKilOVUxMIHx8ICEqKHAtPnB3X3NoZWxsKSkgeworCQkgICAgc2hwYXRoID0gZGVmc2hl bGw7CisJCX0gZWxzZSB7CisJCSAgICBzaHBhdGggPSBwLT5wd19zaGVsbDsKKwkJfQorCQlkZWJ1 ZyhGMTEwLCJ6c2hjbWQgc2hwYXRoIGZyb20gZ2V0cHd1aWQiLHNocGF0aCwwKTsKKwkgICAgfQor ICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIGFlZ2lzICovCisgICAg ICAgIHNocHRyID0gc2huYW1lID0gc2hwYXRoOworICAgICAgICB3aGlsZSAoKnNocHRyICE9ICdc MCcpCisgICAgICAgICAgaWYgKCpzaHB0cisrID09IERJUlNFUCkKKyAgICAgICAgICAgIHNobmFt ZSA9IHNocHRyOworCXJlc3RvcnNpZ3MoKTsJCQkvKiBSZXN0b3JlIGlnbm9yZWQgc2lnbmFscyAq LworCWRlYnVnKEYxMTAsInpzaGNtZCBleGVjbCBzaHBhdGgiLHNocGF0aCwwKTsKKwlkZWJ1ZyhG MTEwLCJ6c2hjbWQgZXhlY2wgc2huYW1lIixzaG5hbWUsMCk7CisgICAgICAgIGlmIChzID09IE5V TEwgfHwgKnMgPT0gJ1wwJykgeyAgLyogSW50ZXJhY3RpdmUgc2hlbGwgcmVxdWVzdGVkPyAqLwor CSAgICBkZWJ1ZyhGMTAwLCJ6c2hjbWQgZXhlY2wgaW50ZXJhY3RpdmUiLCIiLDApOworICAgICAg ICAgICAgZXhlY2woc2hwYXRoLHNobmFtZSwiLWkiLE5VTEwpOyAvKiBZZXMsIGRvIHRoYXQgKi8K KyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsICov CisJICAgIGRlYnVnKEYxMTAsInpzaGNtZCBleGVjbCBjb21tYW5kIixzLDApOworICAgICAgICAg ICAgZXhlY2woc2hwYXRoLHNobmFtZSwiLWMiLHMsTlVMTCk7IC8qIGV4ZWMgdGhlIGdpdmVuIGNv bW1hbmQgKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBl eGVjbCgpIGZhaWxlZCwgKi8KKyAgICAgICAgZGVidWcoRjEwMSwienNoY21kIGVycm5vIiwiIixl cnJubyk7CisJcGVycm9yKHNocGF0aCk7CQkJLyogcHJpbnQgcmVhc29uIGFuZCAqLworICAgICAg ICBleGl0KEJBRF9FWElUKTsgICAgICAgICAgICAgICAgIC8qIHJldHVybiBiYWQgcmV0dXJuIGNv ZGUuICovCisKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJl bnQgKi8KKworICAgICAgICBpbnQgd3N0YXQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIC4uLiBt dXN0IHdhaXQgZm9yIGNoaWxkICovCisjaWZkZWYgQ0tfQ0hJTEQKKyAgICAgICAgaW50IGNoaWxk OyAgICAgICAgICAgICAgICAgICAgICAvKiBDaGlsZCdzIGV4aXQgc3RhdHVzICovCisjZW5kaWYg LyogQ0tfQ0hJTEQgKi8KKyAgICAgICAgU0lHVFlQICgqaXN0YXQpKCksICgqcXN0YXQpKCk7CisK KyAgICAgICAgaWYgKHBpZCA9PSAoUElEX1QpIC0xKSByZXR1cm4oLTEpOyAvKiBmb3JrKCkgZmFp bGVkPyAqLworCisgICAgICAgIGlzdGF0ID0gc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsgLyogTGV0 IHRoZSBmb3JrIGhhbmRsZSBrZXlib2FyZCAqLworICAgICAgICBxc3RhdCA9IHNpZ25hbChTSUdR VUlULFNJR19JR04pOyAvKiBpbnRlcnJ1cHRzIGl0c2VsZi4uLiAqLworCisJZGVidWcoRjExMCwi enNoY21kIHBhcmVudCB3YWl0aW5nIGZvciBjaGlsZCIscywwKTsKKyNpZmRlZiBDS19DSElMRAor ICAgICAgICB3aGlsZSAoKCh3c3RhdCA9IHdhaXQoJmNoaWxkKSkgIT0gcGlkKSAmJiAod3N0YXQg IT0gLTEpKQorI2Vsc2UKKyAgICAgICAgd2hpbGUgKCgod3N0YXQgPSB3YWl0KChXQUlUX1QgKikw KSkgIT0gcGlkKSAmJiAod3N0YXQgIT0gLTEpKQorI2VuZGlmIC8qIENLX0NISUxEICovCisgICAg ICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgZm9yayAqLwor ICAgICAgICBzaWduYWwoU0lHSU5ULGlzdGF0KTsgICAgICAgICAgIC8qIFJlc3RvcmUgaW50ZXJy dXB0cyAqLworICAgICAgICBzaWduYWwoU0lHUVVJVCxxc3RhdCk7CisjaWZkZWYgQ0tfQ0hJTEQK KyAgICAgICAgcGV4aXRzdGF0ID0gKGNoaWxkICYgMHhmZikgPyBjaGlsZCA6IGNoaWxkID4+IDg7 CisJZGVidWcoRjEwMSwienNoY21kIGV4aXQgc3RhdHVzIiwiIixwZXhpdHN0YXQpOworICAgICAg ICByZXR1cm4oY2hpbGQgPT0gMCA/IDEgOiAwKTsgICAgIC8qIFJldHVybiBjaGlsZCdzIHN0YXR1 cyAqLworI2VuZGlmIC8qIENLX0NISUxEICovCisgICAgfQorICAgIHJldHVybigxKTsKKyNlbmRp ZiAvKiBOT1BVU0ggKi8KK30KKworLyogIEkgUyBXIEkgTCBEICAtLSAgQ2hlY2sgaWYgZmlsZXNw ZWMgaXMgIndpbGQiICAqLworCisvKgorICBSZXR1cm5zOgorICAgIDAgd2lsZGNhcmRzIGRpc2Fi bGVkIG9yIGFyZ3VtZW50IGlzIGVtcHR5IG9yIGlzIHRoZSBuYW1lIG9mIGEgc2luZ2xlIGZpbGU7 CisgICAgMSBpZiBpdCBjb250YWlucyB3aWxkY2FyZCBjaGFyYWN0ZXJzLgorICBOb3RlOiBtdXN0 IG1hdGNoIHRoZSBhbGdvcml0aG0gdXNlZCBieSBtYXRjaCgpLCBoZW5jZSBubyBbYS16XSwgZXRj LgorKi8KK2ludAoraXN3aWxkKGZpbGVzcGVjKSBjaGFyICpmaWxlc3BlYzsgeworICAgIGNoYXIg YywgKnAsICpmOyBpbnQgeDsKKyAgICBpbnQgcXVvID0gMDsKKyAgICBpZiAoIWZpbGVzcGVjKQkJ CS8qIFNhZmV0eSAqLworICAgICAgcmV0dXJuKDApOworICAgIGlmICghd2lsZGVuYSkJCQkvKiBX aWxkY2FyZHMgZGlzYWJsZWQgLSAxMiBKdW4gMjAwNSAqLworICAgICAgcmV0dXJuKDApOworICAg IGYgPSBmaWxlc3BlYzsKKyAgICBpZiAod2lsZHhwYW5kKSB7CQkJLyogU2hlbGwgaGFuZGxlcyB3 aWxkY2FyZGluZyAqLworICAgICAgICBpZiAoKHggPSBuenhwYW5kKGZpbGVzcGVjLDApKSA+IDEp CisgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICBpZiAoeCA9PSAwKSByZXR1cm4oMCk7ICAg ICAgICAgIC8qIEZpbGUgZG9lcyBub3QgZXhpc3QgKi8KKyAgICAgICAgcCA9IG1hbGxvYyhNQVhO QU1MRU4gKyAyMCk7CisgICAgICAgIHpuZXh0KHApOworICAgICAgICB4ID0gKHN0cmNtcChmaWxl c3BlYyxwKSAhPSAwKTsKKyAgICAgICAgZnJlZShwKTsKKyAgICAgICAgcCA9IE5VTEw7CisgICAg ICAgIHJldHVybih4KTsKKyAgICB9IGVsc2UgewkJCQkvKiBXZSBkbyBpdCBvdXJzZWx2ZXMgKi8K KyAgICAgICAgd2hpbGUgKChjID0gKmZpbGVzcGVjKyspICE9ICdcMCcpIHsKKyAgICAgICAgICAg IGlmIChjID09ICdcXCcgJiYgcXVvID09IDApIHsKKyAgICAgICAgICAgICAgICBxdW8gPSAxOwor ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KCFxdW8gJiYgKGMgPT0gJyonIHx8IGMgPT0gJz8nCisjaWZkZWYgQ0tSRUdFWAorI2lmbmRlZiBW TVMKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCBjID09ICdbJworI2VuZGlmIC8qIFZNUyAq LworCQkJIHx8IGMgPT0gJ3snCisjZW5kaWYgLyogQ0tSRUdFWCAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICkpIHsKKwkJZGVidWcoRjExMSwiaXN3aWxkIixmLDEpOworCQlyZXR1cm4oMSk7 CisJICAgIH0KKyAgICAgICAgICAgIHF1byA9IDA7CisgICAgICAgIH0KKwlkZWJ1ZyhGMTExLCJp c3dpbGQiLGYsMCk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9Cit9CisKKy8qCisgIEkgUyBE IEkgUiAgLS0gIElzIGEgRGlyZWN0b3J5LgorCisgIFRlbGwgaWYgc3RyaW5nIHBvaW50ZXIgcyBp cyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBkaXJlY3RvcnkuICBSZXR1cm5zIDEgaWYKKyAgZGly ZWN0b3J5LCAwIGlmIG5vdCBhIGRpcmVjdG9yeS4KKworICBUaGUgZm9sbG93aW5nIG5vIGxvbmdl ciBhcHBsaWVzOgorCisgIElmIHRoZSBmaWxlIGlzIGEgc3ltbGluaywgd2UgcmV0dXJuIDEgaWYK KyAgaXQgaXMgYSBkaXJlY3RvcnkgT1IgaWYgaXQgaXMgYSBsaW5rIHRvIGEgZGlyZWN0b3J5IGFu ZCB0aGUgInhyZWN1cnNpdmUiIGZsYWcKKyAgaXMgTk9UIHNldC4gIFRoaXMgaXMgdG8gYWxsb3cg cGFyc2luZyBhIGxpbmsgdG8gYSBkaXJlY3RvcnkgYXMgaWYgaXQgd2VyZSBhCisgIGRpcmVjdG9y eSAoZS5nLiBpbiB0aGUgQ0Qgb3IgSUYgRElSRUNUT1JZIGNvbW1hbmQpIGJ1dCBzdGlsbCBwcmV2 ZW50CisgIHJlY3Vyc2l2ZSB0cmF2ZXJzYWwgZnJvbSB2aXNpdGluZyB0aGUgc2FtZSBkaXJlY3Rv cnkgdHdpY2UuCisqLworCisjaWZkZWYgSVNESVJDQUNIRQorLyogVGhpcyB0dXJucyBvdXQgdG8g YmUgdW5zYWZlIGFuZCBnaXZlcyBsaXR0bGUgYmVuZWZpdCBhbnl3YXkuICovCisvKiBTZWUgbm90 ZXMgMjggU2VwIDIwMDMuICBUaHVzIElTRElSQ0FDSEUgaXMgbm90IGRlZmluZWQuICovCisKK3N0 YXRpYyBjaGFyIHByZXZwYXRoW0NLTUFYUEFUSCs0XSA9IHsgJ1wwJywgJ1wwJyB9Oworc3RhdGlj IGludCBwcmV2c3RhdCA9IC0xOworaW50CitjbHJkaXJjYWNoZSgpIHsKKyAgICBkZWJ1ZyhGMTAw LCJDTEVBUiBJU0RJUiBDQUNIRSIsIiIsMCk7CisgICAgcHJldnN0YXQgPSAtMTsKKyAgICBwcmV2 cGF0aFswXSA9IE5VTDsKK30KKyNlbmRpZiAvKiBJU0RJUkNBQ0hFICovCisKK2ludAoraXNhbGlu ayhzKSBjaGFyICpzOyB7CisjaWZuZGVmIENLU1lNTElOSworICAgIHJldHVybigwKTsKKyNlbHNl CisgICAgaW50IHIgPSAwOworICAgIGNoYXIgZmlsYnVmW0NLTUFYUEFUSCs0XTsKKyAgICBpZiAo cmVhZGxpbmsocyxmaWxidWYsQ0tNQVhQQVRIKSA+IC0xKQorICAgICAgciA9IDE7CisgICAgZGVi dWcoRjExMCwiaXNhbGluayByZWFkbGluayIscyxyKTsKKyAgICByZXR1cm4ocik7CisjZW5kaWYJ LyogQ0tTWU1MSU5LICovCit9CisKK2ludAoraXNkaXIocykgY2hhciAqczsgeworICAgIGludCB4 LCBuZWVkcmxpbmsgPSAwLCBpc2xpbmsgPSAwOworICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7Cisg ICAgY2hhciBmbmFtW0NLTUFYUEFUSCs0XTsKKworICAgIGlmICghcykgcmV0dXJuKDApOworICAg IGRlYnVnKEYxMTAsImlzZGlyIGVudHJ5IixzLDApOworI2lmZGVmIERUSUxERQkJCQkvKiAyMDA1 LTA4LTEzICovCisgICAgaWYgKCpzID09ICd+JykgewkJCS8qIFN0YXJ0cyB3aXRoIHRpbGRlPyAq LworICAgICAgICBzID0gdGlsZGVfZXhwYW5kKHMpOwkJLyogQXR0ZW1wdCB0byBleHBhbmQgdGls ZGUgKi8KKyAgICAgICAgaWYgKCFzKSBzID0gIiI7CisJZGVidWcoRjExMCwiaXNkaXIgdGlsZGVf ZXhwYW5kIixzLDApOworICAgIH0KKyNlbmRpZiAvKiBEVElMREUgKi8KKyAgICBpZiAoISpzKSBy ZXR1cm4oMCk7CisKKyNpZmRlZiBJU0RJUkNBQ0hFCisgICAgaWYgKHByZXZzdGF0ID4gLTEpIHsK KwlpZiAoc1swXSA9PSBwcmV2cGF0aFswXSkgeworCSAgICBpZiAoIXN0cmNtcChzLHByZXZwYXRo KSkgeworCQlkZWJ1ZyhGMTExLCJpc2RpciBjYWNoZSBoaXQiLHMscHJldnN0YXQpOworCQlyZXR1 cm4ocHJldnN0YXQpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBJU0RJUkNBQ0hFICov CisKKyNpZmRlZiBDS1NZTUxJTksKKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGUgZm9sbG93aW5n IG92ZXItY2xldmVyIGJpdCBoYXMgYmVlbiBjb21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgcHJlc3Vt ZXMKKyAgdG8ga25vdyB3aGVuIGEgc3ltbGluayBtaWdodCBiZSByZWR1bmRhbnQsIHdoaWNoIGl0 IGNhbid0IHBvc3NpYmx5IGtub3cuCisgIFVzaW5nIHBsYWluIG9sZCBzdGF0KCkgZ2l2ZXMgS2Vy bWl0IHRoZSBzYW1lIHJlc3VsdHMgYXMgbHMgYW5kIGxzIC1SLCB3aGljaAorICBpcyBqdXN0IGZp bmU6IG5vIHN1cnByaXNlcy4KKyovCisjaWZkZWYgVVNFX0xTVEFUCisgICAgaWYgKHhyZWN1cnNp dmUpIHsKKyAgICAgICAgeCA9IGxzdGF0KHMsJnN0YXRidWYpOworICAgICAgICBkZWJ1ZyhGMTEx LCJpc2RpciBsc3RhdCIscyx4KTsKKyAgICB9IGVsc2UgeworI2VuZGlmIC8qIFVTRV9MU1RBVCAq LworICAgICAgICB4ID0gc3RhdChzLCZzdGF0YnVmKTsKKyAgICAgICAgZGVidWcoRjExMSwiaXNk aXIgc3RhdCIscyx4KTsKKyNpZmRlZiBVU0VfTFNUQVQKKyAgICB9CisjZW5kaWYgLyogVVNFX0xT VEFUICovCisjZWxzZQorICAgIHggPSBzdGF0KHMsJnN0YXRidWYpOworICAgIGRlYnVnKEYxMTEs ImlzZGlyIHN0YXQiLHMseCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGlmICh4ID09IC0x KSB7CisgICAgICAgIGRlYnVnKEYxMDEsImlzZGlyIGVycm5vIiwiIixlcnJubyk7CisgICAgICAg IHJldHVybigwKTsKKyAgICB9CisgICAgaXNsaW5rID0gMDsKKyAgICBpZiAoeHJlY3Vyc2l2ZSkg eworI2lmZGVmIE5PTElOS0JJVFMKKyAgICAgICAgbmVlZHJsaW5rID0gMTsKKyNlbHNlCisjaWZk ZWYgU19JU0xOSworICAgICAgICBpc2xpbmsgPSBTX0lTTE5LKHN0YXRidWYuc3RfbW9kZSk7Cisg ICAgICAgIGRlYnVnKEYxMDEsImlzZGlyIFNfSVNMTksgaXNsaW5rIiwiIixpc2xpbmspOworI2Vs c2UKKyNpZmRlZiBfSUZMTksKKyAgICAgICAgaXNsaW5rID0gKF9JRk1UICYgc3RhdGJ1Zi5zdF9t b2RlKSA9PSBfSUZMTks7CisgICAgICAgIGRlYnVnKEYxMDEsImlzZGlyIF9JRkxOSyBpc2xpbmsi LCIiLGlzbGluayk7CisjZW5kaWYgLyogX0lGTE5LICovCisjZW5kaWYgLyogU19JU0xOSyAqLwor I2VuZGlmIC8qIE5PTElOS0JJVFMgKi8KKyAgICAgICAgaWYgKG5lZWRybGluaykgeworICAgICAg ICAgICAgaWYgKHJlYWRsaW5rKHMsZm5hbSxDS01BWFBBVEgpID4gLTEpCisgICAgICAgICAgICAg IGlzbGluayA9IDE7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIHggPSBzdGF0KHMsJnN0 YXRidWYpOworICAgIGlmICh4ID09IC0xKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImlzZGlyIGVy cm5vIiwiIixlcnJubyk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisgICAgZGVidWcoRjEx MSwiaXNkaXIgc3RhdCIscyx4KTsKKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyAgICBkZWJ1ZyhG MTAxLCJpc2RpciBpc2xpbmsiLCIiLGlzbGluayk7CisgICAgZGVidWcoRjEwMSwiaXNkaXIgc3Rh dGJ1Zi5zdF9tb2RlIiwiIixzdGF0YnVmLnN0X21vZGUpOworICAgIHggPSBpc2xpbmsgPyAwIDog KFNfSVNESVIgKHN0YXRidWYuc3RfbW9kZSkgPyAxIDogMCk7CisjaWZkZWYgSVNESVJDQUNIRQor ICAgIHByZXZzdGF0ID0geDsKKyAgICBja3N0cm5jcHkocHJldnBhdGgscyxDS01BWFBBVEgrMSk7 CisjZW5kaWYgLyogSVNESVJDQUNIRSAqLworICAgIHJldHVybih4KTsKK30KKworI2lmZGVmIENL X01LRElSCisvKiBTb21lIHN5c3RlbXMgZG9uJ3QgaGF2ZSBta2RpcigpLCBlLmcuIFRhbmR5IFhl bml4IDMuMi4uICovCisKKy8qIFogTSBLIEQgSSBSICAtLSAgQ3JlYXRlIGRpcmVjdG9yeShzKSBp ZiBuZWNlc3NhcnkgKi8KKy8qCisgICBDYWxsIHdpdGg6CisgICAgQSBwb2ludGVyIHRvIGEgZmls ZSBzcGVjaWZpY2F0aW9uIHRoYXQgbWlnaHQgY29udGFpbiBkaXJlY3RvcnkKKyAgICBpbmZvcm1h dGlvbi4gIFRoZSBmaWxlbmFtZSBpcyBleHBlY3RlZCB0byBiZSBpbmNsdWRlZC4KKyAgICBJZiB0 aGUgZmlsZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGluY2x1ZGUgYW55IGRpcmVjdG9yeSBzZXBh cmF0b3JzLAorICAgIHRoZW4gaXQgaXMgYXNzdW1lZCB0byBiZSBhIHBsYWluIGZpbGUuCisgICAg SWYgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBmaWxlIHNwZWNp ZmljYXRpb24sCisgICAgdGhpcyByb3V0aW5lIHRyaWVzIHRvIGNyZWF0ZSB0aGVtIGlmIHRoZXkg ZG9uJ3QgYWxyZWFkeSBleGlzdC4KKyAgIFJldHVybnM6CisgICAgMCBvciBncmVhdGVyIG9uIHN1 Y2Nlc3MsIGkuZS4gdGhlIG51bWJlciBvZiBkaXJlY3RvcmllcyBjcmVhdGVkLgorICAgLTEgb24g ZmFpbHVyZSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeQorKi8KK2ludAorem1rZGlyKHBhdGgpIGNo YXIgKnBhdGg7IHsKKyAgICBjaGFyICp4cCwgKnRwLCBjOworICAgIGludCB4LCBjb3VudCA9IDA7 CisKKyAgICBpZiAoIXBhdGgpIHBhdGggPSAiIjsKKyAgICBpZiAoISpwYXRoKSByZXR1cm4oLTEp OworCisjaWZkZWYgQ0tST09UCisgICAgZGVidWcoRjExMSwiem1rZGlyIHNldHJvb3QiLGNrcm9v dCxja3Jvb3RzZXQpOworICAgIGlmIChja3Jvb3RzZXQpIGlmICghemlucm9vdChwYXRoKSkgewor CWRlYnVnKEYxMTAsInpta2RpciBzZXRyb290IHZpb2xhdGlvbiIscGF0aCwwKTsKKwlyZXR1cm4o LTEpOworICAgIH0KKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworICAgIHggPSBzdHJsZW4ocGF0aCk7 CisgICAgZGVidWcoRjExMSwiem1rZGlyIixwYXRoLHgpOworICAgIGlmICh4IDwgMSB8fCB4ID4g TUFYUEFUSCkgICAgICAgICAgIC8qIENoZWNrIGxlbmd0aCAqLworICAgICAgcmV0dXJuKC0xKTsK KyAgICBpZiAoISh0cCA9IG1hbGxvYyh4KzEpKSkgICAgICAgICAgICAvKiBNYWtlIGEgdGVtcG9y YXJ5IGNvcHkgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgc3RyY3B5KHRwLHBhdGgpOwkJCS8q IHNhZmUgKHByZWNoZWNrZWQpICovCisjaWZkZWYgRFRJTERFCisgICAgaWYgKCp0cCA9PSAnficp IHsgICAgICAgICAgICAgICAgICAgLyogU3RhcnRzIHdpdGggdGlsZGU/ICovCisgICAgICAgIHhw ID0gdGlsZGVfZXhwYW5kKHRwKTsgICAgICAgICAgLyogQXR0ZW1wdCB0byBleHBhbmQgdGlsZGUg Ki8KKyAgICAgICAgaWYgKCF4cCkgeHAgPSAiIjsKKyAgICAgICAgaWYgKCp4cCkgeworICAgICAg ICAgICAgY2hhciAqenA7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6bWtkaXIgdGlsZGVfZXhw YW5kIix4cCwwKTsKKyAgICAgICAgICAgIGlmICghKHpwID0gbWFsbG9jKHN0cmxlbih4cCkgKyAx KSkpIHsgLyogTWFrZSBhIHBsYWNlIGZvciBpdCAqLworICAgICAgICAgICAgICAgIGZyZWUodHAp OworICAgICAgICAgICAgICAgIHRwID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJlZSh0cCk7ICAgICAgICAgICAgICAgICAg IC8qIEZyZWUgcHJldmlvdXMgYnVmZmVyICovCisgICAgICAgICAgICB0cCA9IHpwOyAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnQgdG8gbmV3IG9uZSAqLworICAgICAgICAgICAgc3RyY3B5KHRw LHhwKTsgICAgICAgICAgICAgIC8qIENvcHkgZXhwYW5kZWQgbmFtZSB0byBuZXcgYnVmZmVyICov CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRFRJTERFICovCisgICAgZGVidWcoRjExMCwi em1rZGlyIHRwIGFmdGVyIHRpbGRlX2V4cGFuc2lvbiIsdHAsMCk7CisgICAgeHAgPSB0cDsKKyAg ICBpZiAoSVNESVJTRVAoKnhwKSkgICAgICAgICAgICAgICAgICAvKiBEb24ndCBjcmVhdGUgcm9v dCBkaXJlY3RvcnkhICovCisgICAgICB4cCsrOworCisgICAgLyogR28gdGhydSBmaWxlc3BlYyBm cm9tIGxlZnQgdG8gcmlnaHQuLi4gKi8KKworICAgIGZvciAoOyAqeHA7IHhwKyspIHsgICAgICAg ICAgICAgICAgIC8qIENyZWF0ZSBwYXJ0cyB0aGF0IGRvbid0IGV4aXN0ICovCisgICAgICAgIGlm ICghSVNESVJTRVAoKnhwKSkgICAgICAgICAgICAgLyogRmluZCBuZXh0IGRpcmVjdG9yeSBzZXBh cmF0b3IgKi8KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYyA9ICp4cDsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBHb3Qgb25lLiAqLworICAgICAgICAqeHAgPSBOVUw7ICAgICAgICAg ICAgICAgICAgICAgIC8qIE1ha2UgdGhpcyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuICovCisgICAg ICAgIGlmICghaXNkaXIodHApKSB7ICAgICAgICAgICAgICAgLyogVGhpcyBkaXJlY3RvcnkgZXhp c3RzIGFscmVhZHk/ICovCisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICAgIGlmIChpc2d1ZXN0 KSAgICAgICAgICAgICAgICAgICAgLyogTm90IGFsbG93ZWQgZm9yIGd1ZXN0cyAqLworCSAgICAg IHJldHVybigtMSk7CisjaWZuZGVmIE5PWEZFUgorICAgICAgICAgICAgLyogTm9yIGlmIE1LRElS IGFuZC9vciBDRCBhcmUgZGlzYWJsZWQgKi8KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBD S19MT0dJTiAqLworCSAgICAgIGlmICgoc2VydmVyCisjaWZkZWYgSUtTRAorCQkgICB8fCBpbnNl cnZlcgorI2VuZGlmIC8qIElLU0QgKi8KKwkJICAgKSAmJiAoIUVOQUJMRUQoZW5fbWtkKSB8fCAh RU5BQkxFRChlbl9jd2QpKSkKKwkJcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBJS1NEICovCisKKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsInpta2RpciBtYWtpbmciLHRwLDApOworICAgICAgICAgICAg eCA9ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vLCB0cnkgdG8gY3JlYXRlIGl0ICovCisj aWZkZWYgTk9NS0RJUgorICAgICAgICAgICAgICAgLTEgICAgICAgICAgICAgICAgICAgICAgIC8q IFN5c3RlbXMgd2l0aG91dCBta2RpcigpICovCisjZWxzZQorICAgICAgICAgICAgICAgbWtkaXIo dHAsMDc3NykgICAgICAgICAgIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBOT01LRElSICovCisgICAg ICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsInpta2RpciBmYWlsZWQsIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgICAg ICAgICAgZnJlZSh0cCk7ICAgICAgICAgICAgICAgLyogRnJlZSB0ZW1wb3JhcnkgYnVmZmVyLiAq LworICAgICAgICAgICAgICAgIHRwID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEp OyAgICAgICAgICAgICAvKiBSZXR1cm4gZmFpbHVyZSBjb2RlLiAqLworICAgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgKnhwID0gYzsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBsYWNlIHRoZSBzZXBhcmF0b3IuICovCisgICAg fQorICAgIGZyZWUodHApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGVtcG9y YXJ5IGJ1ZmZlci4gKi8KKyAgICByZXR1cm4oY291bnQpOyAgICAgICAgICAgICAgICAgICAgICAv KiBSZXR1cm4gc3VjY2VzcyBjb2RlLiAqLworfQorI2VuZGlmIC8qIENLX01LRElSICovCisKK2lu dAorenJtZGlyKHBhdGgpIGNoYXIgKnBhdGg7IHsKKyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChp c2d1ZXN0KQorICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisgICAg aWYgKCFwYXRoKSBwYXRoID0gIiI7CisgICAgaWYgKCEqcGF0aCkgcmV0dXJuKC0xKTsKKworI2lm ZGVmIENLUk9PVAorICAgIGRlYnVnKEYxMTEsInpybWRpciBzZXRyb290Iixja3Jvb3QsY2tyb290 c2V0KTsKKyAgICBpZiAoY2tyb290c2V0KSBpZiAoIXppbnJvb3QocGF0aCkpIHsKKwlkZWJ1ZyhG MTEwLCJ6cm1kaXIgc2V0cm9vdCB2aW9sYXRpb24iLHBhdGgsMCk7CisJcmV0dXJuKC0xKTsKKyAg ICB9CisjZW5kaWYgLyogQ0tST09UICovCisKKyNpZm5kZWYgTk9NS0RJUgorICAgIHJldHVybihy bWRpcihwYXRoKSk7CisjZWxzZQorICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogTk9NS0RJUiAq LworfQorCisvKiBaIEYgUyBFIEUgSyAgLS0gIFBvc2l0aW9uIGlucHV0IGZpbGUgcG9pbnRlciAq LworLyoKKyAgIENhbGwgd2l0aDoKKyAgICBDS19PRkZfVCAoMzIgb3IgNjQgYml0cyksIDAtYmFz ZWQsIGluZGljYXRpbmcgZGVzaXJlZCBwb3NpdGlvbi4KKyAgIFJldHVybnM6CisgICAgMCBvbiBz dWNjZXNzLgorICAgLTEgb24gZmFpbHVyZS4KKyovCisjaWZuZGVmIE5PUkVTRU5ECitpbnQKKyNp ZmRlZiBDS19BTlNJQworemZzZWVrKENLX09GRl9UIHBvcykKKyNlbHNlCit6ZnNlZWsocG9zKSBD S19PRkZfVCBwb3M7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHpmc2VlayAqLyB7CisgICAg emluY250ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVzdCBlbXB0eSB0aGUgaW5w dXQgYnVmZmVyICovCisgICAgZGVidWcoRjEwMSwiemZzZWVrIiwiIixwb3MpOworICAgIHJldHVy bihDS0ZTRUVLKGZwW1pJRklMRV0sIHBvcywgMCk/LTE6MCk7Cit9CisjZW5kaWYgLyogTk9SRVNF TkQgKi8KKworLyogIFogRiBOIFEgRiBQICAtLSAgQ29udmVydCBmaWxlbmFtZSB0byBmdWxseSBx dWFsaWZpZWQgYWJzb2x1dGUgcGF0aG5hbWUgKi8KKworLyoKKyAgR2l2ZW4gYSBwb3NzaWJseSB1 bnF1YWxpZmllZCBvciByZWxhdGl2ZSBmaWxlIHNwZWNpZmljYXRpb24gZm4sIHpmbnFmcCgpCisg IHJldHVybnMgdGhlIGZ1bGx5IHF1YWxpZmllZCBmaWxlc3BlYyBmb3IgdGhlIHNhbWUgZmlsZSwg cmV0dXJuaW5nIGEgc3RydWN0CisgIHRoYXQgY29udGFpbnMgdGhlIGxlbmd0aCAobGVuKSBvZiB0 aGUgcmVzdWx0LCBhIHBvaW50ZXIgKGZwYXRoKSB0byB0aGUKKyAgd2hvbGUgcmVzdWx0LCBhbmQg YSBwb2ludGVyIChmbmFtZSkgdG8gd2hlcmUgdGhlIGZpbGVuYW1lIHN0YXJ0cy4KKyovCitzdGF0 aWMgc3RydWN0IHpmbmZwIGZuZnAgPSB7IDAsIE5VTEwsIE5VTEwgfTsKKworc3RydWN0IHpmbmZw ICoKK3pmbnFmcChmbmFtZSwgYnVmbGVuLCBidWYpICBjaGFyICogZm5hbWU7IGludCBidWZsZW47 IGNoYXIgKiBidWY7IHsKKyAgICBjaGFyICogczsKKyAgICBpbnQgbGVuOworI2lmZGVmIE1BWFBB VEhMRU4KKyAgICBjaGFyIHpmbnRtcFtNQVhQQVRITEVOKzRdOworI2Vsc2UKKyAgICBjaGFyIHpm bnRtcFtDS01BWFBBVEgrNF07CisjZW5kaWYgLyogTUFYUEFUSExFTiAqLworCisgICAgY2hhciBz YlszMl0sICogdG1wOworICAgIGludCBpID0gMCwgaiA9IDAsIGsgPSAwLCB4ID0gMCwgeSA9IDA7 CisgICAgaW50IGl0c2FkaXIgPSAwOworCisgICAgcyA9IGZuYW1lOworICAgIGlmICghcykKKyAg ICAgIHJldHVybihOVUxMKTsKKyAgICBpZiAoISpzKQorICAgICAgcmV0dXJuKE5VTEwpOworICAg IGlmICghYnVmKQorICAgICAgcmV0dXJuKE5VTEwpOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUg ZGF0YSBzdHJ1Y3R1cmUgKi8KKworICAgIGZuZnAubGVuID0gY2tzdHJuY3B5KGJ1ZixmbmFtZSxi dWZsZW4pOworICAgIGZuZnAuZnBhdGggPSBidWY7CisgICAgZm5mcC5mbmFtZSA9IE5VTEw7Cisg ICAgbGVuID0gYnVmbGVuOworICAgIGRlYnVnKEYxMTEsInpmbnFmcCBmbmFtZSIsZm5hbWUsbGVu KTsKKworI2lmZGVmIERUSUxERQorICAgIGlmICgqcyA9PSAnficpIHsgICAgICAgICAgICAgICAg ICAgIC8qIFN0YXJ0cyB3aXRoIHRpbGRlPyAqLworICAgICAgICBjaGFyICogeHA7CisgICAgICAg IHhwID0gdGlsZGVfZXhwYW5kKHMpOyAgICAgICAgICAgLyogQXR0ZW1wdCB0byBleHBhbmQgdGls ZGUgKi8KKyAgICAgICAgZGVidWcoRjExMCwiemZucWZwIHhwIix4cCwwKTsgICAvKiAocmVhbHBh dGgoKSBkb2Vzbid0IGRvIHRoaXMpICovCisgICAgICAgIGlmICgheHApIHhwID0gIiI7CisgICAg ICAgIGlmICgqeHApCisgICAgICAgICAgcyA9IHhwOworICAgIH0KKyNlbmRpZiAvKiBEVElMREUg Ki8KKworI2lmZGVmIENLUkVBTFBBVEgKKworLyogTi5CLjogVGhlIHJlYWxwYXRoKCkgcmVzdWx0 IGJ1ZmZlciBNVVNUIGJlIE1BWFBBVEhMRU4gYnl0ZXMgbG9uZyAqLworLyogb3RoZXJ3aXNlIHdl IHdyaXRlIG92ZXIgbWVtb3J5LiAqLworCisgICAgaWYgKCFyZWFscGF0aChzLHpmbnRtcCkpIHsK KyAgICAgICAgZGVidWcoRjExMSwiemZucWZwIHJlYWxwYXRoIGZhaWxzIixzLGVycm5vKTsKKyNp ZmRlZiBDT01NRU5UCisJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkgIHJldHVybihOVUxMKTsKKyNl bHNlCisJLyogSWYgcmVhbHBhdGgoKSBmYWlscyB1c2UgdGhlIGRvLWl0LXlvdXJzZWxmIG1ldGhv ZCAqLworCS8qIDE2IEphbiAyMDAyICovCisJZ290byBub3JlYWxwYXRoOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICB9CisgICAgbGVuID0gc3RybGVuKHpmbnRtcCk7CisgICAgaWYgKGxlbiA+ IGJ1ZmxlbikgeworCWRlYnVnKEYxMTEsInpmbnFmcCByZXN1bHQgdG9vIGxvbmciLGNraXRvYShi dWZsZW4pLGxlbik7CisJcmV0dXJuKE5VTEwpOworICAgIH0gZWxzZSB7CisJY2tzdHJuY3B5KGJ1 Zix6Zm50bXAsYnVmbGVuKTsKKyAgICB9CisgICAgaWYgKGJ1ZltsZW4tMV0gIT0gJy8nKSB7CisJ aWYgKChpdHNhZGlyID0gaXNkaXIoYnVmKSkgJiYgbGVuIDwgKGJ1ZmxlbiAtIDEpKSB7CisJICAg IGJ1ZltsZW4rK10gPSAnLyc7CisJICAgIGJ1ZltsZW5dID0gTlVMOworCX0KKyAgICB9CisgICAg Zm5mcC5sZW4gPSBsZW47CisgICAgZm5mcC5mcGF0aCA9IGJ1ZjsKKyAgICBkZWJ1ZyhGMTEwLCJ6 Zm5xZnAgcmVhbHBhdGggcGF0aCIsZm5mcC5mcGF0aCwwKTsKKyAgICB0bXAgPSBidWYgKyBmbmZw LmxlbiAtIDE7CisgICAgaWYgKCFpdHNhZGlyKSB7CisJd2hpbGUgKHRtcCA+PSBidWYpIHsKKwkg ICAgaWYgKCp0bXAgPT0gJy8nKSB7CisJCWZuZnAuZm5hbWUgPSB0bXAgKyAxOworCQlkZWJ1ZyhG MTEwLCJ6Zm5xZnAgcmVhbHBhdGggbmFtZSIsZm5mcC5mbmFtZSwwKTsKKwkJYnJlYWs7CisJICAg IH0KKwkgICAgdG1wLS07CisJfQorICAgIH0KKyAgICByZXR1cm4oJmZuZnApOworCisjZW5kaWYg LyogQ0tSRUFMUEFUSCAqLworCisgIG5vcmVhbHBhdGg6CisKKyAgICB0bXAgPSB6Zm50bXA7Cisg ICAgd2hpbGUgKCpzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtb3ZlIGxlYWRpbmcg Ii4vIiAoMCBvciBtb3JlKSAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJ6Zm5xZnAgd2hpbGUgKnMi LHMsMCk7CisgICAgICAgIGlmICgqcyA9PSAnLicgJiYgKihzKzEpID09ICcvJykgeworICAgICAg ICAgICAgcyArPSAyOworICAgICAgICAgICAgd2hpbGUgKCpzID09ICcvJykgcysrOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCEqcykgcmV0dXJuKE5V TEwpOworICAgIGlmICgqcyA9PSAnLycpIHsgICAgICAgICAgICAgICAgICAgIC8qIFBhdGhuYW1l IGlzIGFic29sdXRlICovCisgICAgICAgIGNrc3RybmNweShidWYscyxsZW4pOworICAgICAgICB4 ID0gc3RybGVuKGJ1Zik7CisgICAgICAgIHkgPSAwOworICAgIH0gZWxzZSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFBhdGhuYW1lIGlzIHJlbGF0aXZlICovCisgICAgICAgIGNoYXIg KiBwOworICAgICAgICBpZiAocCA9IHpndGRpcigpKSB7ICAgICAgICAgICAgIC8qIFNvIGdldCBj dXJyZW50IGRpcmVjdG9yeSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiemZucWZwIHpndGRp ciIscCwwKTsKKyAgICAgICAgICAgIHggPSBja3N0cm5jcHkoYnVmLHAsbGVuKTsKKyAgICAgICAg ICAgIGJ1Zlt4KytdID0gJy8nOworICAgICAgICAgICAgZGVidWcoRjExMCwiemZucWZwIGJ1ZiAx IixidWYsMCk7CisgICAgICAgICAgICBsZW4gLT0geDsgICAgICAgICAgICAgICAgICAgLyogSG93 IG11Y2ggcm9vbSBsZWZ0IGluIGJ1ZmZlciAqLworICAgICAgICAgICAgaWYgKCh5ID0gKGludClz dHJsZW4ocykpID4gbGVuKSAvKiBJZiBlbm91Z2ggcm9vbS4uLiAqLworICAgICAgICAgICAgICBy ZXR1cm4oTlVMTCk7CisgICAgICAgICAgICBja3N0cm5jcHkoYnVmK3gscyxsZW4pOyAgICAgLyog Li4uIGFwcGVuZCB0aGUgZmlsZW5hbWUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInpmbnFm cCBidWYgMiIsYnVmLDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuKE5V TEwpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQnVmIG5vdyBob2xkcyBmdWxsIHBhdGgg YnV0IG1heWJlIGNvbnRhaW5pbmcgc29tZSAuIG9yIC4uIHRyaWNrcyAqLworCisgICAgaiA9IHgg KyB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHdoYXQncyBpbiBidWYg Ki8KKyAgICBsZW4gPSBqOworICAgIGRlYnVnKEYxMDEsInpmbnFmcCBsZW4iLCIiLGxlbik7CisK KyAgICAvKiBDYXRjaCBkYW5nbGluZyAiLy4iIG9yICIvLi4iICovCisgICAgaWYgKChqID4gMSAm JiBidWZbai0xXSA9PSAnLicgJiYgYnVmW2otMl0gPT0gJy8nKSB8fAorICAgICAgICAoaiA+IDIg JiYgYnVmW2otMV0gPT0gJy4nICYmIGJ1ZltqLTJdID09ICcuJyAmJiBidWZbai0zXSA9PSAnLycp KSB7CisgICAgICAgIGlmIChqIDwgYnVmbGVuIC0gMikgeworICAgICAgICAgICAgYnVmW2pdID0g Jy8nOworICAgICAgICAgICAgYnVmW2orMV0gPSBOVUw7CisgICAgICAgIH0KKyAgICB9CisgICAg aiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaiA9IHBvc2l0aW9uIG9mIHJp Z2h0bW9zdCAiLyIgKi8KKyAgICBpID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBpID0gZGVzdGluYXRpb24gaW5kZXggKi8KKyAgICB0bXBbaV0gPSBOVUw7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBpcyB0ZW1wb3JhcnkgYnVmZmVyICAqLworCisgICAg Zm9yICh4ID0gMDsgeCA8IGxlbjsgeCsrKSB7ICAgICAgICAgLyogeCA9IHNvdXJjZSBpbmRleCAq LworICAgICAgICBpZiAoYnVmW3hdID09ICcvJykgeworICAgICAgICAgICAgZm9yIChrID0gMDsg ayA8IDQ7IGsrKykgeworICAgICAgICAgICAgICAgIHNiW2tdID0gYnVmW3gra107CisgICAgICAg ICAgICAgICAgc2JbaysxXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgaWYgKCFzYltrXSkgYnJl YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN0cm5jbXAoc2IsIi8uLyIsMykp IHsgLyogRWxpbWluYXRlICIuLyIgaW4gIi8uLyIgKi8KKyAgICAgICAgICAgICAgICB4ICs9IDE7 CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJu Y21wKHNiLCIvLyIsMikpIHsgLyogQ2hhbmdlICIvLyIgdG8gIi8iICovCisgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHNiLCIvLi4vIiw0 KSkgeyAvKiAiLi4iIGluIHBhdGggKi8KKyAgICAgICAgICAgICAgICBmb3IgKGsgPSBpIC0gMTsg ayA+PSAwOyBrLS0pIHsgLyogQmFjayB1cCBvbmUgbGV2ZWwgKi8KKyAgICAgICAgICAgICAgICAg ICAgaWYgKHRtcFtrXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBrOwor ICAgICAgICAgICAgICAgICAgICAgICAgdG1wW2ldID0gTlVMOworICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgeCArPSAyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpID49IChidWZsZW4gLSAxKSkgeworICAg ICAgICAgICAgZGVidWcoRjExMSwiemZucWZwIG92ZXJmbG93Iix0bXAsaSk7CisgICAgICAgICAg ICByZXR1cm4oTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgdG1wW2krK10gPSBidWZbeF07ICAg ICAgICAgICAgICAvKiBSZWd1bGFyIGNoYXJhY3RlciwgY29weSAqLworICAgICAgICB0bXBbaV0g PSBOVUw7CisgICAgICAgIGlmIChidWZbeF0gPT0gJy8nKSAgICAgICAgICAgICAgLyogUmVtZW1i ZXIgcmlnaHRtb3N0ICIvIiAqLworICAgICAgICAgIGogPSBpOworICAgIH0KKyAgICBja3N0cm5j cHkoYnVmLHRtcCxidWZsZW4tMSk7ICAgICAgICAvKiBDb3B5IHRoZSByZXN1bHQgYmFjayAqLwor CisgICAgYnVmW2J1Zmxlbi0xXSA9IE5VTDsKKyAgICBpZiAoIWJ1ZlswXSkgeyAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBlbXB0eSwgc2F5IHJvb3QgKi8KKyAgICAgICAgYnVmWzBdID0gJy8n OworICAgICAgICBidWZbMl0gPSBOVUw7CisgICAgICAgIGogPSAwOworICAgICAgICBpID0gMTsK KyAgICB9CisgICAgaWYgKChpdHNhZGlyID0gaXNkaXIoYnVmKSkpIHsKKwlpZiAoYnVmW2ktMV0g IT0gJy8nICYmIGkgPCAoYnVmbGVuIC0gMSkpIHsKKwkgICAgYnVmW2krK10gPSAnLyc7CisJICAg IGJ1ZltpXSA9IE5VTDsKKwl9CisgICAgfQorICAgIGlmICghaXRzYWRpciAmJiAoaiA+IC0xKSkg ewkJLyogU2V0IHBvaW50ZXIgdG8gYmFzZW5hbWUgKi8KKyAgICAgICAgZm5mcC5mbmFtZSA9IChj aGFyICopKGJ1ZiArIGopOworICAgICAgICBmbmZwLmZwYXRoID0gKGNoYXIgKilidWY7CisgICAg ICAgIGZuZnAubGVuID0gaTsKKyAgICAgICAgZGVidWcoRjExMSwiemZucWZwIHBhdGgiLGZuZnAu ZnBhdGgsaSk7CisgICAgICAgIGRlYnVnKEYxMTAsInpmbnFmcCBuYW1lIixmbmZwLmZuYW1lLDAp OworICAgICAgICByZXR1cm4oJmZuZnApOworICAgIH0KKyAgICByZXR1cm4oTlVMTCk7Cit9CisK Ky8qICBaIEMgTSBQIEYgTiAgLS0gIENvbXBhcmUgdHdvIGZpbGVuYW1lcyAgKi8KKworLyogIFJl dHVybnMgMSBpZiB0aGUgdHdvIG5hbWVzIHJlZmVyIHRvIHRoZSBzYW1lIGV4aXN0aW5nIGZpbGUs IDAgb3RoZXJ3aXNlLiAqLworCitpbnQKK3pjbXBmbihzMSxzMikgY2hhciAqIHMxLCAqIHMyOyB7 CisgICAgY2hhciBidWYxW0NLTUFYUEFUSCsxXTsKKyAgICBjaGFyIGJ1ZjJbQ0tNQVhQQVRIKzFd OworCisjaWZkZWYgVVNFX0xTVEFUCisgICAgY2hhciBsaW5rbmFtZVtDS01BWFBBVEgrMV07Cisg ICAgc3RydWN0IHN0YXQgYnVmOworI2VuZGlmIC8qIFVTRV9MU1RBVCAqLworICAgIGludCB4LCBy YyA9IDA7CisKKyAgICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGlmICghczIpIHMyID0gIiI7Cisg ICAgaWYgKCEqczEgfHwgISpzMikgcmV0dXJuKDApOworCisjaWZkZWYgQ0tTWU1MSU5LICAgICAg ICAgICAgICAgICAgICAgICAgLyogV2UncmUgZG9pbmcgc3ltbGlua3M/ICovCisjaWZkZWYgVVNF X0xTVEFUICAgICAgICAgICAgICAgICAgICAgICAgLyogT0sgdG8gdXNlIGxzdGF0KCk/ICovCisg ICAgeCA9IGxzdGF0KHMxLCZidWYpOworICAgIGlmICh4ID4gLTEgJiYJCQkvKiBOb3cgc2VlIGlm IGl0J3MgYSBzeW1saW5rICovCisjaWZkZWYgU19JU0xOSworICAgICAgICBTX0lTTE5LKGJ1Zi5z dF9tb2RlKQorI2Vsc2UKKyNpZmRlZiBfSUZMTksKKyAgICAgICAgKChfSUZNVCAmIGJ1Zi5zdF9t b2RlKSA9PSBfSUZMTkspCisjZW5kaWYgLyogX0lGTE5LICovCisjZW5kaWYgLyogU19JU0xOSyAq LworICAgICAgICApIHsKKyAgICAgICAgbGlua25hbWVbMF0gPSAnXDAnOyAgICAgICAgICAgICAv KiBHZXQgdGhlIG5hbWUgKi8KKyAgICAgICAgeCA9IHJlYWRsaW5rKHMxLGxpbmtuYW1lLENLTUFY UEFUSCk7CisgICAgICAgIGlmICh4ID4gLTEgJiYgeCA8IENLTUFYUEFUSCkgeyAgLyogSXQncyBh IGxpbmsgKi8KKyAgICAgICAgICAgIGxpbmtuYW1lW3hdID0gJ1wwJzsKKwkgICAgczEgPSBsaW5r bmFtZTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KKyNlbmRpZiAv KiBDS1NZTUxJTksgKi8KKworICAgIGlmICh6Zm5xZnAoczEsQ0tNQVhQQVRILGJ1ZjEpKSB7CS8q IENvbnZlcnQgdG8gZnVsbCBwYXRobmFtZSAqLworCisjaWZkZWYgQ0tTWU1MSU5LCQkJLyogU2Ft ZSBkZWFsIGZvciBzZWNvbmQgbmFtZS4uLiAqLworI2lmZGVmIFVTRV9MU1RBVAorCXggPSBsc3Rh dChzMiwmYnVmKTsKKwlpZiAoeCA+IC0xICYmCisjaWZkZWYgU19JU0xOSworCSAgICBTX0lTTE5L KGJ1Zi5zdF9tb2RlKQorI2Vsc2UKKyNpZmRlZiBfSUZMTksKKwkgICAgKChfSUZNVCAmIGJ1Zi5z dF9tb2RlKSA9PSBfSUZMTkspCisjZW5kaWYgLyogX0lGTE5LICovCisjZW5kaWYgLyogU19JU0xO SyAqLworCSAgICApIHsKKwkgICAgbGlua25hbWVbMF0gPSAnXDAnOworCSAgICB4ID0gcmVhZGxp bmsoczIsbGlua25hbWUsQ0tNQVhQQVRIKTsKKwkgICAgaWYgKHggPiAtMSAmJiB4IDwgQ0tNQVhQ QVRIKSB7CisJCWxpbmtuYW1lW3hdID0gJ1wwJzsKKwkJczIgPSBsaW5rbmFtZTsKKwkgICAgfQor CX0KKyNlbmRpZiAvKiBVU0VfTFNUQVQgKi8KKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKwlpZiAo emZucWZwKHMyLENLTUFYUEFUSCxidWYyKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJ6Y21wZm4gczEi LGJ1ZjEsMCk7CisJICAgIGRlYnVnKEYxMTAsInpjbXBmbiBzMiIsYnVmMiwwKTsKKwkgICAgaWYg KCFzdHJuY21wKGJ1ZjEsYnVmMixDS01BWFBBVEgpKQorCSAgICAgIHJjID0gMTsKKwl9CisgICAg fQorICAgIGRlYnVnKEYxMDEsInpjbXBmbiByZXN1bHQiLCIiLHJjKTsKKyAgICByZXR1cm4ocmMp OworfQorCisjaWZkZWYgQ0tST09UCisKKy8qIFVzZXItbW9kZSBjaHJvb3QoKSBpbXBsZW1lbnRh dGlvbiAqLworCitpbnQKK3pzZXRyb290KHMpIGNoYXIgKiBzOyB7CQkJLyogU2V0cyB0aGUgcm9v dCAqLworICAgIGNoYXIgYnVmW0NLTUFYUEFUSCsxXTsKKyAgICBpZiAoIXMpIHJldHVybigtMSk7 CisgICAgaWYgKCEqcykgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhGMTEwLCJ6c2V0cm9vdCIscyww KTsKKyAgICBpZiAoIWlzZGlyKHMpKSByZXR1cm4oLTIpOworICAgIGlmICghemZucWZwKHMsQ0tN QVhQQVRILGJ1ZikpCS8qIEdldCBmdWxsLCByZWFsIHBhdGggKi8KKyAgICAgIHJldHVybigtMyk7 CisgICAgaWYgKGFjY2VzcyhidWYsUl9PSykgPCAwKSB7CQkvKiBDaGVjayBhY2Nlc3MgKi8KKwlk ZWJ1ZyhGMTEwLCJ6c2V0cm9vdCBhY2Nlc3MgZGVuaWVkIixidWYsMCk7CisJcmV0dXJuKC00KTsK KyAgICB9CisgICAgcyA9IGJ1ZjsKKyAgICBpZiAoY2tyb290c2V0KSB7CQkJLyogSWYgcm9vdCBh bHJlYWR5IHNldCAqLworCWlmICghemlucm9vdChzKSkgewkJLyogbWFrZSBzdXJlIG5ldyByb290 IGlzIGluIGl0ICovCisJICAgIGRlYnVnKEYxMTAsInpzZXRyb290IG5ldyByb290IG5vdCBpbiBy b290Iixja3Jvb3QsMCk7CisJICAgIHJldHVybigtNSk7CisJfQorICAgIH0KKyAgICBpZiAoemNo ZGlyKGJ1ZikgPCAxKSByZXR1cm4oLTQpOwkvKiBDaGFuZ2UgZGlyZWN0b3J5IHRvIG5ldyByb290 ICovCisgICAgY2tyb290c2V0ID0gY2tzdHJuY3B5KGNrcm9vdCxidWYsQ0tNQVhQQVRIKTsgLyog Tm93IHNldCB0aGUgbmV3IHJvb3QgKi8KKyAgICBpZiAoY2tyb290W2Nrcm9vdHNldC0xXSAhPSAn LycpIHsKKwlja3Jvb3RbY2tyb290c2V0KytdID0gJy8nOworCWNrcm9vdFtja3Jvb3RzZXRdID0g J1wwJzsKKyAgICB9CisgICAgZGVidWcoRjExMSwienNldHJvb3Qgcm9vdHNldCIsY2tyb290LGNr cm9vdHNldCk7CisgICAgY2tyb290ZXJyID0gMDsJCQkvKiBSZXNldCBlcnJvciBmbGFnICovCisg ICAgcmV0dXJuKDEpOworfQorCitjaGFyICoKK3pnZXRyb290KCkgewkJCQkvKiBSZXR1cm5zIHRo ZSByb290ICovCisgICAgaWYgKCFja3Jvb3RzZXQpCisgICAgICByZXR1cm4oTlVMTCk7CisgICAg cmV0dXJuKChjaGFyICopY2tyb290KTsKK30KKworaW50Cit6aW5yb290KHMpIGNoYXIgKiBzOyB7 CQkJLyogQ2hlY2tzIGlmIGZpbGUgcyBpcyBpbiB0aGUgcm9vdCAqLworICAgIGludCB4LCBuOwor ICAgIHN0cnVjdCB6Zm5mcCAqIGYgPSBOVUxMOworICAgIGNoYXIgYnVmW0NLTUFYUEFUSCsyXTsK KworICAgIGRlYnVnKEYxMTEsInppbnJvb3Qgc2V0cm9vdCIsY2tyb290LGNrcm9vdHNldCk7Cisg ICAgY2tyb290ZXJyID0gMDsJCQkvKiBSZXNldCBnbG9iYWwgZXJyb3IgZmxhZyAqLworICAgIGlm ICghY2tyb290c2V0KQkJCS8qIFJvb3Qgbm90IHNldCAqLworICAgICAgcmV0dXJuKDEpOwkJCS8q IHNvIGl0J3Mgb2sgLSBubyBuZWVkIHRvIGNoZWNrICovCisgICAgaWYgKCEoZiA9IHpmbnFmcChz LENLTUFYUEFUSCxidWYpKSkJLyogR2V0IGZ1bGwgYW5kIHJlYWwgcGF0aG5hbWUgKi8KKyAgICAg IHJldHVybigwKTsJCQkvKiBGYWlsIGlmIHdlIGNhbid0ICAqLworICAgIG4gPSBmLT5sZW47CQkJ CS8qIExlbmd0aCBvZiBmdWxsIHBhdGhuYW1lICovCisgICAgZGVidWcoRjExMSwiemlucm9vdCBu IixidWYsbik7CisgICAgaWYgKG4gPCAoY2tyb290c2V0IC0gMSkgfHwgbiA+IENLTUFYUEFUSCkg ewkvKiBCYWQgbGVuZ3RoICovCisJY2tyb290ZXJyID0gMTsJCQkgICAgICAgIC8qIEZhaWwgKi8K KwlyZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChpc2RpcihidWYpICYmIGJ1ZltuLTFdICE9ICcv JykgeyAgLyogSWYgaXQncyBhIGRpcmVjdG9yeSBuYW1lICovCisJYnVmW24rK10gPSAnLyc7CQkJ ICAvKiBtYWtlIHN1cmUgaXQgZW5kcyB3aXRoICcvJyAqLworCWJ1ZltuXSA9ICdcMCc7CisgICAg fQorICAgIHggPSBzdHJuY21wKGJ1Zixja3Jvb3QsY2tyb290c2V0KTsJLyogQ29tcGFyZSwgY2Fz ZS1zZW5zaXRpdmUgKi8KKyAgICBkZWJ1ZyhGMTExLCJ6aW5yb290IGNoZWNrZWQiLGJ1Zix4KTsK KyAgICBpZiAoeCA9PSAwKQkJCQkvKiBPSyAqLworICAgICAgcmV0dXJuKDEpOworICAgIGNrcm9v dGVyciA9IDE7CQkJLyogTm90IE9LICovCisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENL Uk9PVCAqLworCisjaWZkZWYgQ0tfTE9HSU4KKy8qCisgIFRoZSBmb2xsb3dpbmcgY29kZSBwcm92 aWRlcyBzdXBwb3J0IGZvciB1c2VyIGxvZ2luIGFuZCBsb2dvdXQKKyAgaW5jbHVkaW5nIGFub255 bW91cyBhY2NvdW50cy4gIElmIHRoaXMgZmVhdHVyZSBpcyB0byBiZSBzdXBwb3J0ZWQKKyAgb3V0 c2lkZSBvZiBVTklYLCBpdCBzaG91bGQgYmUgc3ByZWFkIG91dCBhbW9uZyB0aGUgY2s/ZmlvLmMg bW9kdWxlcy4uLgorKi8KKyNpZm5kZWYgX1BBVEhfQlNIRUxMCisjZGVmaW5lIF9QQVRIX0JTSEVM TCAgICAiL3Vzci9iaW4vYmFzaCIKKyNlbmRpZiAvKiBfUEFUSF9CU0hFTEwgKi8KKyNpZm5kZWYg X1BBVEhfRlRQVVNFUlMKKyNkZWZpbmUgX1BBVEhfRlRQVVNFUlMgICIvZXRjL2Z0cHVzZXJzIgor I2VuZGlmIC8qIF9QQVRIX0ZUUFVTRVJTICovCisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9y IHNnZXRwd25hbSgpLgorICovCitjaGFyICoKK3NnZXRzYXZlKHMpIGNoYXIgKnM7IHsKKyAgICBj aGFyICpuZXcgPSBtYWxsb2MoKHVuc2lnbmVkKSBzdHJsZW4ocykgKyAxKTsKKyAgICBpZiAobmV3 ID09IE5VTEwpIHsKKyAgICAgICAgcHJpbnRmKCI/TG9jYWwgcmVzb3VyY2UgZmFpbHVyZTogbWFs bG9jXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgLyogTk9UUkVBQ0hFRCAqLworICAg IH0KKyAgICAodm9pZCkgc3RyY3B5KG5ldywgcyk7CQkvKiBzYWZlICovCisgICAgcmV0dXJuIChu ZXcpOworfQorCisvKgorICogU2F2ZSB0aGUgcmVzdWx0IG9mIGdldHB3bmFtKCkuICBVc2VkIGZv ciBVU0VSIGNvbW1hbmQsIHNpbmNlCisgKiB0aGUgZGF0YSByZXR1cm5lZCBtdXN0IG5vdCBiZSBj bG9iYmVyZWQgYnkgYW55IG90aGVyIGNvbW1hbmQKKyAqIChlLmcuLCBnbG9iYmluZykuCisgKi8K K3N0cnVjdCBwYXNzd2QgKgorc2dldHB3bmFtKG5hbWUpIGNoYXIgKm5hbWU7IHsKKyAgICBzdGF0 aWMgc3RydWN0IHBhc3N3ZCBzYXZlOworICAgIHJlZ2lzdGVyIHN0cnVjdCBwYXNzd2QgKnA7Cisj aWZkZWYgQ0tfU0hBRE9XCisgICAgcmVnaXN0ZXIgc3RydWN0IHNwd2QgKnNwOworI2VuZGlmIC8q IENLX1NIQURPVyAqLworICAgIGNoYXIgKnNnZXRzYXZlKCk7CisKKyNpZmRlZiBIUFVYMTBfVFJV U1RFRAorICAgIHN0cnVjdCBwcl9wYXNzd2QgKnByOworI2VuZGlmIC8qIEhQVVgxMF9UUlVTVEVE ICovCisKKyNpZmRlZiBDS19TSEFET1cKKyAgICBzcCA9IGdldHNwbmFtKG5hbWUpOworICAgIGlm IChzcCA9PSBOVUxMKSB7CisgICAgICAgIGRlYnVnKEYxMTAsInNnZXRwd25hbSIsImdldHNwbmFt KCkgZmFpbHMiLDApOworCXJldHVybiAoTlVMTCk7CisgICAgfQorI2VuZGlmIC8qIENLX1NIQURP VyAqLworCisjaWZkZWYgSFBVWDEwX1RSVVNURUQKKyAgICBpZiAoKHByID0gZ2V0cHJwd25hbShu YW1lKSkgPT0gTlVMTCkKKyAgICAgIHJldHVybihOVUxMKTsKKyNlbmRpZiAvKiBIUFVYMTBfVFJV U1RFRCAqLworCisgICAgcCA9IGdldHB3bmFtKG5hbWUpOworICAgIC8qIGRlYnVnKEYxMTEsInNn ZXRwd25hbSIsImdldHB3bmFtKCkiLHApOyAqLworICAgIGlmIChwID09IE5VTEwpCisgICAgICBy ZXR1cm4oTlVMTCk7CisgICAgaWYgKHNhdmUucHdfbmFtZSkgeworICAgICAgICBmcmVlKHNhdmUu cHdfbmFtZSk7CisgICAgICAgIGZyZWUoc2F2ZS5wd19wYXNzd2QpOworICAgICAgICBmcmVlKHNh dmUucHdfZ2Vjb3MpOworICAgICAgICBmcmVlKHNhdmUucHdfZGlyKTsKKyAgICAgICAgZnJlZShz YXZlLnB3X3NoZWxsKTsKKyAgICB9CisgICAgc2F2ZSA9ICpwOworICAgIHNhdmUucHdfbmFtZSA9 IHNnZXRzYXZlKHAtPnB3X25hbWUpOworI2lmZGVmIENLX1NIQURPVworICAgIHNhdmUucHdfcGFz c3dkID0gc2dldHNhdmUoc3AtPnNwX3B3ZHApOworI2Vsc2UgLyogQ0tfU0hBRE9XICovCisjaWZk ZWYgSFBVWDEwX1RSVVNURUQKKyAgICBpZiAocHItPnVmbGcuZmdfZW5jcnlwdCAmJiBwci0+dWZs ZC5mZF9lbmNyeXB0ICYmICpwci0+dWZsZC5mZF9lbmNyeXB0KQorICAgICAgc2F2ZS5wd19wYXNz d2QgPSBzZ2V0c2F2ZShwci0+dWZsZC5mZF9lbmNyeXB0KTsKKyAgICBlbHNlCisgICAgICBzYXZl LnB3X3Bhc3N3ZCA9IHNnZXRzYXZlKCIiKTsKKyNlbHNlIC8qIEhQVVgxMF9UUlVTVEVEICovCisg ICAgc2F2ZS5wd19wYXNzd2QgPSBzZ2V0c2F2ZShwLT5wd19wYXNzd2QpOworI2VuZGlmIC8qIEhQ VVgxMF9UUlVTVEVEICovCisjZW5kaWYgLyogQ0tfU0hBRE9XICovCisgICAgc2F2ZS5wd19nZWNv cyA9IHNnZXRzYXZlKHAtPnB3X2dlY29zKTsKKyAgICBzYXZlLnB3X2RpciA9IHNnZXRzYXZlKHAt PnB3X2Rpcik7CisgICAgc2F2ZS5wd19zaGVsbCA9IHNnZXRzYXZlKHAtPnB3X3NoZWxsKTsKKyAg ICByZXR1cm4oJnNhdmUpOworfQorCisjZGVmaW5lIENLWExPR0JTSVogMjU2CisKK3N0cnVjdCBw YXNzd2QgKiBwdyA9IE5VTEw7CitjaGFyICogaG9tZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAg ICAgLyogSG9tZSBkaXJlY3RvcnkgcG9pbnRlciBmb3IgZ2xvYiAqLworI2lmZGVmIENNQVNLCisj dW5kZWYgQ01BU0sKKyNlbmRpZiAvKiBDTUFTSyAqLworCisjZGVmaW5lIENNQVNLIDAyNworCitp bnQgZGVmdW1hc2sgPSBDTUFTSzsgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCB1bWFzayB2 YWx1ZSAqLworCisvKiAgWiBWIFUgUyBFIFIgIC0tICBWZXJpZnkgdXNlciwgUmV0dXJucyAxIGlm IHVzZXIgT0ssIDAgb3RoZXJ3aXNlLiAgKi8KKworLyogU2V0cyBnbG9iYWwgcGFzc3dkIHBvaW50 ZXIgcHcgaWYgbmFtZWQgYWNjb3VudCBleGlzdHMgYW5kIGlzIGFjY2VwdGFibGU7CisgKiBzZXRz IGFza3Bhc3N3ZCBpZiBhIFBBU1MgY29tbWFuZCBpcyBleHBlY3RlZC4gIElmIGxvZ2dlZCBpbiBw cmV2aW91c2x5LAorICogbmVlZCB0byByZXNldCBzdGF0ZS4gIElmIG5hbWUgaXMgImZ0cCIgb3Ig ImFub255bW91cyIsIHRoZSBuYW1lIGlzIG5vdCBpbgorICogX1BBVEhfRlRQVVNFUlMsIGFuZCBm dHAgYWNjb3VudCBleGlzdHMsIHNldCBndWVzdCBhbmQgcHcsIHRoZW4ganVzdCByZXR1cm4uCisg KiBJZiBhY2NvdW50IGRvZXNuJ3QgZXhpc3QsIGFzayBmb3IgcGFzc3dkIGFueXdheS4gIE90aGVy d2lzZSwgY2hlY2sgdXNlcgorICogcmVxdWVzdGluZyBsb2dpbiBwcml2aWxlZ2VzLiAgRGlzYWxs b3cgYW55b25lIHdobyBkb2VzIG5vdCBoYXZlIGEgc3RhbmRhcmQKKyAqIHNoZWxsIGFzIHJldHVy bmVkIGJ5IGdldHVzZXJzaGVsbCgpLiAgRGlzYWxsb3cgYW55b25lIG1lbnRpb25lZCBpbiB0aGUg ZmlsZQorICogX1BBVEhfRlRQVVNFUlMgdG8gYWxsb3cgcGVvcGxlIHN1Y2ggYXMgcm9vdCBhbmQg dXVjcCB0byBiZSBhdm9pZGVkLgorICovCitfUFJPVE9UWVAoc3RhdGljIGludCBjaGVja3VzZXIs IChjaGFyICopICk7CisKK2NoYXIgenZ1bmFtZVs2NF0gPSB7IE5VTCwgTlVMIH07CitjaGFyIHp2 aG9tZVtDS01BWFBBVEgrMV0gPSB7IE5VTCwgTlVMIH07CisjZGVmaW5lIFpFTlZVU0VSIDcwCisj ZGVmaW5lIFpFTlZIT01FIENLTUFYUEFUSCsxMgorI2RlZmluZSBaRU5WTE9HTkFNRSA3NAorc3Rh dGljIGNoYXIgemVudnVzZXJbWkVOVlVTRVJdOworc3RhdGljIGNoYXIgemVudmhvbWVbWkVOVkhP TUVdOworc3RhdGljIGNoYXIgemVudmxvZ25hbWVbWkVOVkxPR05BTUVdOworCisjaWZkZWYgQ0tf UEFNCitzdGF0aWMgY2hhciBwYW1fZGF0YVs1MDBdOworc3RydWN0IHBhbV9jb252IHBhbV9jb252 ID0ge3BhbV9jYiwgcGFtX2RhdGF9OyAvKiBQQU0gc3RydWN0dXJlICovCitzdHJ1Y3QgcGFtX2hh bmRsZSAqIHBhbWggPSBOVUxMOyAgICAgICAgICAgICAgIC8qIFBBTSByZWZlcmVuY2UgaGFuZGxl ICovCisjZW5kaWYgLyogQ0tfUEFNICovCisKK2ludAorenZ1c2VyKG5hbWUpIGNoYXIgKm5hbWU7 IHsKKyAgICByZWdpc3RlciBjaGFyICpjcCA9IE5VTEw7CisgICAgaW50IHg7CisgICAgY2hhciAq c2hlbGw7CisjaWZkZWYgR0VUVVNFUlNIRUxMCitfUFJPVE9UWVAoY2hhciAqIGdldHVzZXJzaGVs bCwgKHZvaWQpICk7CisjZW5kaWYgLyogR0VUVVNFUlNIRUxMICovCisjaWZuZGVmIE5PRENMRU5E VVNFUlNIRUxMCitfUFJPVE9UWVAoVk9JRCBlbmR1c2Vyc2hlbGwsICh2b2lkKSApOworI2VuZGlm CS8qIE5PRENMRU5EVVNFUlNIRUxMICovCisKKyNpZmRlZiBDS19QQU0KKyAgICBpbnQgcGFtX3N0 YXR1czsKKyAgICBjb25zdCBjaGFyICogcmVwbHkgPSBOVUxMOworI2VuZGlmIC8qIENLX1BBTSAq LworCisgICAgZGVidWcoRjExMSwidXNlciIsbmFtZSxsb2dnZWRfaW4pOworCisgICAgaWYgKCFu YW1lKSBuYW1lID0gIiI7CisgICAgenZ1bmFtZVswXSA9IE5VTDsKKworICAgIGRlYnVnKEYxMDEs Inp2dXNlciBja3hzeXNsb2ciLCIiLGNreHN5c2xvZyk7CisKKyNpZmRlZiBDS1NZU0xPRworICAg IGRlYnVnKEYxMDAsInp2dXNlciBDS1NZU0xPRyBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBD S1NZU0xPRyAqLworCisgICAgaWYgKGxvZ2dlZF9pbikgICAgICAgICAgICAgICAgICAgICAgLyog U2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgbG9nZ2VkIGluICovCisgICAgICByZXR1cm4oMCk7CisK KyNpZmRlZiBDS1NZU0xPRworICAgIGlmIChja3hzeXNsb2cgJiYgY2t4bG9nZ2luZykgeworICAg ICAgICBzeXNsb2coTE9HX0lORk8sCisgICAgICAgICAgICAgICAgImxvZ2luOiB1c2VyICVzIixu YW1lCisgICAgICAgICAgICAgICAgKTsKKyAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKwor ICAgIGd1ZXN0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBub3QgZ3Vl c3QgKi8KKyAgICBhc2twYXNzd2QgPSAwOworCisgICAgaWYgKHN0cmNtcChuYW1lLCAiZnRwIikg PT0gMCB8fCBzdHJjbXAobmFtZSwgImFub255bW91cyIpID09IDApIHsKKyAgICAgICAgZGVidWco RjEwMSwienZ1c2VyIGFub255bW91cyBja3hhbm9uIiwiIixja3hhbm9uKTsKKyAgICAgICAgaWYg KCFja3hhbm9uKSB7ICAgICAgICAgICAgICAgICAvKiBBbm9ueW1vdXMgbG9naW4gbm90IGFsbG93 ZWQgKi8KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hs b2dnaW5nKSB7CisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLAorICAgICAgICAgICAg ICAgICAgICAgICAibG9naW46IGFub255bW91cyBsb2dpbiBub3QgYWxsb3dlZDogJXMiLAorICAg ICAgICAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBo b3N0KSIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAv KiBDS1NZU0xPRyAqLworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAg IGlmIChjaGVja3VzZXIoImZ0cCIpIHx8IGNoZWNrdXNlcigiYW5vbnltb3VzIikpIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMDAsInp2dXNlciBhbm9uIGZvcmJpZGRlbiBieSBmdHB1c2VycyBmaWxl IiwiIiwwKTsKKyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBj a3hsb2dnaW5nKSB7CisgICAgICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLAorICAgICAgICAg ICAgICAgICAgICAgICAibG9naW46IGFub255bW91cyBsb2dpbiBmb3JiaWRkZW4gYnkgZnRwdXNl cnMgZmlsZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50 aG9zdCA6ICIodW5rbm93biBob3N0KSIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICAgICAgcmV0dXJuKDApOwor CX0gZWxzZSBpZiAoKHB3ID0gc2dldHB3bmFtKCJmdHAiKSkgIT0gTlVMTCkgeworICAgICAgICAg ICAgZGVidWcoRjEwMCwienZ1c2VyIGFub24gc2dldHB3bmFtKGZ0cCkgT0siLCIiLDApOworICAg ICAgICAgICAgZ3Vlc3QgPSAxOworICAgICAgICAgICAgYXNrcGFzc3dkID0gMTsKKyAgICAgICAg ICAgIGNrc3RybmNweSh6dnVuYW1lLCJhbm9ueW1vdXMiLDY0KTsKKyAgICAgICAgICAgIHJldHVy bigxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInp2dXNlciBh bm9uIHNnZXRwd25hbShmdHApIEZBSUxFRCIsIiIsMCk7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAg ICAgICAgIGlmIChja3hzeXNsb2cgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgIHN5 c2xvZyhMT0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgImxvZ2luOiBhbm9ueW1vdXMg Z2V0cHduYW0oZnRwKSBmYWlsZWQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50 aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVua25vd24gaG9zdCkiCisgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgICAg IHJldHVybigwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdyA9IHNnZXRwd25hbShuYW1lKTsK KyAgICBpZiAocHcpIHsKKy8qCisgIE9mIGNvdXJzZSBzb21lIFVOSVggcGxhdGZvcm1zIChsaWtl IEFJWCkgZG9uJ3QgaGF2ZSBnZXR1c2Vyc2hlbGwoKS4KKyAgSW4gdGhhdCBjYXNlIHdlIGNhbid0 IGNoZWNrIGlmIHRoZSB1c2VyJ3MgYWNjb3VudCBoYXMgYmVlbiAidHVybmVkIG9mZiIKKyAgb3Ig c29tZXN1Y2gsIGUuZy4gYnkgc2V0dGluZyB0aGVpciBzaGVsbCB0byAiL2V0Yy9ub2xvZ2luIiBv ciBzb21lc3VjaCwKKyAgd2hpY2ggcnVucyAodXN1YWxseSBqdXN0IHByaW50aW5nIGEgbWVzc2Fn ZSBhbmQgZXhpdGluZyksIGJ1dCB3aGljaCBpcworICBub3QgbGlzdGVkIGluIC9ldGMvc2hlbGxz LiAgRm9yIHRoYXQgbWF0dGVyLCBpZiBnZXR1c2Vyc2hlbGwoKSBpcyBub3QKKyAgYXZhaWxhYmxl LCB0aGVuIHByb2JhYmx5IG5laXRoZXIgaXMgL2V0Yy9zaGVsbHMuCisqLworICAgICAgICBkZWJ1 ZyhGMTAwLCJ6dnVzZXIgc2dldHB3bmFtIG9rIiwiIiwwKTsKKyAgICAgICAgc2hlbGwgPSBwdy0+ cHdfc2hlbGw7CisgICAgICAgIGlmICghc2hlbGwpIHNoZWxsID0gIiI7CisgICAgICAgIGlmICgh KnNoZWxsKQorICAgICAgICAgIHNoZWxsID0gX1BBVEhfQlNIRUxMOworICAgICAgICBkZWJ1ZyhG MTEwLCJ6dnVzZXIgc2hlbGwiLHNoZWxsLDApOworI2lmZGVmIEdFVFVTRVJTSEVMTAorICAgICAg ICB3aGlsZSAoKGNwID0gZ2V0dXNlcnNoZWxsKCkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGRl YnVnKEYxMTAsInp2dXNlciBnZXR1c2Vyc2hlbGwiLGNwLDApOworICAgICAgICAgICAgaWYgKChp bnQpc3RyY21wKGNwLCBzaGVsbCkgPT0gMCkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKyAgICAgICAgZGVidWcoRjEwMCwienZ1c2VyIGVuZHVzZXJzaGVsbCAxIiwiIiwwKTsKKyNp Zm5kZWYgTk9EQ0xFTkRVU0VSU0hFTEwKKyAgICAgICAgKFZPSUQpIGVuZHVzZXJzaGVsbCgpOwor I2Vsc2UKKyAgICAgICAgZW5kdXNlcnNoZWxsKCk7CisjZW5kaWYJLyogTk9EQ0xFTkRVU0VSU0hF TEwgKi8KKyAgICAgICAgZGVidWcoRjEwMCwienZ1c2VyIGVuZHVzZXJzaGVsbCAyIiwiIiwwKTsK KyNlbHNlIC8qIEdFVFVTRVJTSEVMTCAqLworICAgICAgICBjcCA9ICIiOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERvIG5vdCByZWZ1c2UgaWYgd2UgY2Fubm90IGNoZWNrICovCisjZW5kaWYg LyogR0VUVVNFUlNIRUxMICovCisgICAgICAgIHggPSBjaGVja3VzZXIobmFtZSk7CisgICAgICAg IGRlYnVnKEYxMDEsInp2dXNlciBjaGVja3VzZXIiLCIiLHgpOworICAgICAgICBpZiAoY3AgPT0g TlVMTCkgeworICAgICAgICAgICAgZGVidWcoRjEwMCwienZ1c2VyIHJlZnVzZWQgMSIsIiIsMCk7 CisgICAgICAgICAgICBwdyA9IChzdHJ1Y3QgcGFzc3dkICopIE5VTEw7CisjaWZkZWYgQ0tTWVNM T0cKKyAgICAgICAgICAgIGlmIChja3hzeXNsb2cgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAg ICAgICAgIHN5c2xvZyhMT0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgImxvZ2luOiBp bnZhbGlkIHNoZWxsICVzIGZvciAlcyAlcyIsc2hlbGwsIG5hbWUsCisgICAgICAgICAgICAgICAg ICAgICAgIGNsaWVudGhvc3QgPyBjbGllbnRob3N0IDogIih1bmtub3duIGhvc3QpIgorICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICov CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0gZWxzZSBpZiAoeCkgeworICAgICAg ICAgICAgZGVidWcoRjEwMCwienZ1c2VyIHJlZnVzZWQgMiIsIiIsMCk7CisgICAgICAgICAgICBw dyA9IChzdHJ1Y3QgcGFzc3dkICopIE5VTEw7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAg IGlmIChja3hzeXNsb2cgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgICAgIHN5c2xvZyhM T0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgImxvZ2luOiAlcyBsb2dpbiBmb3JiaWRk ZW4gYnkgZnRwdXNlcnMgZmlsZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBj bGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBob3N0KSIKKyAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAg ICAgICAgcmV0dXJuKDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCA9IDA7Cisj aWZkZWYgQ0tfUEFNCisgICAgICAgICAgICAvKiBHZXQgUEFNIGF1dGhlbnRpY2F0aW9uIGRldGFp bHMgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInp2dXNlciIsImNhbGxpbmcgcGFtX3N0YXJ0 IiwwKTsKKyAgICAgICAgICAgIGlmICgocGFtX3N0YXR1cyA9CisgICAgICAgICAgICAgICAgIHBh bV9zdGFydChQQU1fU0VSVklDRV9UWVBFLG5hbWUsJnBhbV9jb252LCZwYW1oKSkKKyAgICAgICAg ICAgICAgICAhPSBQQU1fU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHJlcGx5ID0gcGFtX3N0 cmVycm9yKE5VTEwsIHBhbV9zdGF0dXMpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInp2 dXNlciBQQU0gZmFpbHVyZSIscmVwbHksMCk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlc1xu IixyZXBseSk7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgICAgICAgICBpZiAoY2t4c3lzbG9n ICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19JTkZPLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvZ2luOiAlcyByZWZ1c2VkIGJ5IFBBTSBcIiVz XCI6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUscmVwbHksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rbm93biBo b3N0KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAg ICAgICAgfQorI2VuZGlmIC8qIENLX1BBTSAqLworICAgICAgICAgICAgYXNrcGFzc3dkID0gMTsK KyAgICAgICAgICAgIGNrc3RybmNweSh6dnVuYW1lLG5hbWUsNjQpOworICAgICAgICAgICAgcmV0 dXJuKDEpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgeCA9IDA7CisgICAgICAg IGRlYnVnKEYxMDAsInp2dXNlciBzZ2V0cHduYW0gTlVMTCIsIiIsMCk7CisjaWZkZWYgQ0tTWVNM T0cKKyAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICBz eXNsb2coTE9HX0lORk8sCisgICAgICAgICAgICAgICAgICAgImxvZ2luOiBnZXRwd25hbSglcykg ZmFpbGVkOiAlcyIsbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjbGllbnRob3N0ID8gY2xpZW50 aG9zdCA6ICIodW5rbm93biBob3N0KSIKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9 CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKworI2lm ZGVmIEZUUF9LRVJCRVJPUworICAgIGlmIChhdXRoX3R5cGUgJiYgc3RyY21wKGF1dGhfdHlwZSwg IktFUkJFUk9TX1Y0IikgPT0gMCkgeworI2lmZGVmIENPTU1FTlQKKwkvKiBXaHkgc3ByaW50ZiBh bmQgdGhlbiBwcmludGY/ICovCisJLyogQWxzbywgd2hhdCBpcyBrZXJiX29rPyAgQW5kIGlzIHRo ZSB0ZXN0IG9uIGl0IHJpZ2h0PyAqLworICAgICAgICBjaGFyIGJ1ZltDS1hMT0dCU0laXTsKKyAg ICAgICAgc3ByaW50ZihidWYsICJLZXJiZXJvcyB1c2VyICVzJXMlc0AlcyBpcyVzIGF1dGhvcml6 ZWQgYXMgJXMlcyIsCisgICAgICAgICAgICAgICAgIGtkYXRhLnBuYW1lLCAqa2RhdGEucGluc3Qg PyAiLiIgOiAiIiwKKyAgICAgICAgICAgICAgICAga2RhdGEucGluc3QsIGtkYXRhLnByZWFsbSwK KyAgICAgICAgICAgICAgICAgKGtlcmJfb2sgPSBrdXNlcm9rKCZrZGF0YSxuYW1lKSA9PSAwKSA/ ICIiIDogIiBub3QiLAorICAgICAgICAgICAgICAgICBuYW1lLCBrZXJiX29rID8gIiIgOiAiOyBQ YXNzd29yZCByZXF1aXJlZC4iKTsKKyAgICAgICAgcHJpbnRmKCIlcyIsIGJ1Zik7CisjZWxzZQor ICAgICAgICBwcmludGYoIktlcmJlcm9zIHVzZXIgJXMlcyVzQCVzIGlzJXMgYXV0aG9yaXplZCBh cyAlcyVzIiwKKyAgICAgICAgICAgICAgICAga2RhdGEucG5hbWUsICprZGF0YS5waW5zdCA/ICIu IiA6ICIiLAorICAgICAgICAgICAgICAgICBrZGF0YS5waW5zdCwga2RhdGEucHJlYWxtLAorICAg ICAgICAgICAgICAgICAoa2VyYl9vayA9IGt1c2Vyb2soJmtkYXRhLG5hbWUpID09IDApID8gIiIg OiAiIG5vdCIsCisgICAgICAgICAgICAgICAgIG5hbWUsIGtlcmJfb2sgPyAiIiA6ICI7IFBhc3N3 b3JkIHJlcXVpcmVkLiIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKGtlcmJf b2spIHJldHVybigxKTsKKyAgICB9IGVsc2UKKyAgICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBG VFBfS0VSQkVST1MgKi8KK30KKworLyogQ2hlY2sgaWYgdGhlIGdpdmVuIHVzZXIgaXMgaW4gdGhl IGZvcmJpZGRlbi11c2VyIGZpbGUgKi8KKworc3RhdGljIGludAorY2hlY2t1c2VyKG5hbWUpIGNo YXIgKm5hbWU7IHsKKyAgICBleHRlcm4gY2hhciAqIHVzZXJmaWxlOworICAgIEZJTEUgKmZkOwor ICAgIGludCBpOworICAgIGNoYXIgbGluZVtDS1hMT0dCU0laKzFdOworCisgICAgaWYgKCFuYW1l KQorICAgICAgbmFtZSA9ICIiOworICAgIGkgPSBzdHJsZW4obmFtZSk7CisgICAgZGVidWcoRjEx MSwiY2hlY2t1c2VyIG5hbWUiLG5hbWUsaSk7CisgICAgaWYgKCEqbmFtZSkKKyAgICAgIHJldHVy bigxKTsKKworICAgIGZkID0gZm9wZW4odXNlcmZpbGUgPyB1c2VyZmlsZSA6IF9QQVRIX0ZUUFVT RVJTLCAiciIpOworICAgIC8qIGRlYnVnKEYxMTEsImNoZWNrdXNlciB1c2VyZmlsZSIsdXNlcmZp bGUsZmQpOyAqLworICAgIGlmIChmZCkgeworICAgICAgICBsaW5lWzBdID0gJ1wwJzsKKyAgICAg ICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZmQpKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJjaGVja3VzZXIgbGluZSIsbGluZSwwKTsKKyAgICAgICAgICAgIGlmIChsaW5l WzBdIDw9ICcjJykKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3Ry bmNtcChsaW5lLCBuYW1lLCBpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwi Y2hlY2t1c2VyIFJFRlVTRUQiLG5hbWUsMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKDEpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZVswXSA9ICdcMCc7CisgICAgICAgIH0KKyAg ICAgICAgKFZPSUQpIGZjbG9zZShmZCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImNoZWNrdXNl ciBPSyIsbmFtZSwwKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBaIFYgTCBPIEcgTyBVIFQg IC0tICBMb2cgb3V0IGZyb20gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UgICovCisKK1ZPSUQKK3p2 bG9nb3V0KCkgeworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBUaGlzIGNvdWxkIGJlIGRhbmdlcm91 cyAqLworICAgIGlmIChzZXR1aWQoKFVJRF9UKTApIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTAw LCJ6dmxvZ291dCBzZXR1aWQgRkFJTEVEIiwiIiwwKTsKKyAgICAgICAgZ290byBiYWQ7CisgICAg fQorICAgIGRlYnVnKEYxMDAsInp2bG9nb3V0IHNldHVpZCBPSyIsIiIsMCk7CisjZW5kaWYgLyog Q09NTUVOVCAqLworI2lmZGVmIENLU1lTTE9HCisgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19M SSAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgIGNrc3lzbG9nKFNZU0xHX0xJLCAxLCAibG9nb3V0 IiwoY2hhciAqKSB1aWRidWYsIGNsaWVudGhvc3QpOworICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xP RyAqLworI2lmZGVmIENLV1RNUAorICAgIGRlYnVnKEYxMTAsIldUTVAgbG9nb3V0Iixja3N5c2xp bmUsbG9nZ2VkX2luKTsKKyAgICBpZiAobG9nZ2VkX2luKQorICAgICAgbG9nd3RtcChja3N5c2xp bmUsICIiLCAiIik7CisjZW5kaWYgLyogQ0tXVE1QICovCisgICAgcHcgPSBOVUxMOworICAgIGxv Z2dlZF9pbiA9IDA7CisgICAgZ3Vlc3QgPSAwOworICAgIGlzZ3Vlc3QgPSAwOworfQorCisjaWZk ZWYgRlRQX0tFUkJFUk9TCitrcGFzcyhuYW1lLCBwKSBjaGFyICpuYW1lLCAqcDsgeworICAgIGNo YXIgaW5zdGFuY2VbSU5TVF9TWl07CisgICAgY2hhciByZWFsbVtSRUFMTV9TWl07CisgICAgY2hh ciB0a3RfZmlsZVsyMF07CisgICAgS1RFWFRfU1QgdGlja2V0OworICAgIEFVVEhfREFUIGF1dGhk YXRhOworICAgIHVuc2lnbmVkIGxvbmcgZmFkZHI7CisgICAgc3RydWN0IGhvc3RlbnQgKmhwOwor CisgICAgaWYgKGtyYl9nZXRfbHJlYWxtKHJlYWxtLCAxKSAhPSBLU1VDQ0VTUykKKyAgICAgIHJl dHVybigwKTsKKworICAgIGNrc3RybmNweSh0a3RfZmlsZSwgVEtUX1JPT1QsIDIwKTsKKyAgICBj a3N0cm5jYXQodGt0X2ZpbGUsICJfZnRwZFhYWFhYWCIsIDIwKTsKKyAgICBrcmJfc2V0X3RrdF9z dHJpbmcobWt0ZW1wKHRrdF9maWxlKSk7CisKKyAgICAoVk9JRCkgY2tzdHJuY3B5KGluc3RhbmNl LCBrcmJfZ2V0X3Bob3N0KGhvc3RuYW1lKSwgc2l6ZW9mKGluc3RhbmNlKSk7CisKKyAgICBpZiAo KGhwID0gZ2V0aG9zdGJ5bmFtZShpbnN0YW5jZSkpID09IE5VTEwpCisgICAgICByZXR1cm4oMCk7 CisKKyNpZmRlZiBIQUREUkxJU1QKKyAgICBocCA9IGNrX2NvcHlob3N0ZW50KGhwKTsJCS8qIHNh ZmUgY29weSB0aGF0IHdvbid0IGNoYW5nZSAqLworI2VuZGlmIC8qIEhBRERSTElTVCAqLworICAg IGJjb3B5KChjaGFyICopaHAtPmhfYWRkciwgKGNoYXIgKikgJmZhZGRyLCBzaXplb2YoZmFkZHIp KTsKKworICAgIGlmIChrcmJfZ2V0X3B3X2luX3RrdChuYW1lLCAiIiwgcmVhbG0sICJrcmJ0Z3Qi LCByZWFsbSwgMSwgcCkgfHwKKyAgICAgICAga3JiX21rX3JlcSgmdGlja2V0LCAicmNtZCIsIGlu c3RhbmNlLCByZWFsbSwgMzMpIHx8CisgICAgICAgIGtyYl9yZF9yZXEoJnRpY2tldCwgInJjbWQi LCBpbnN0YW5jZSwgZmFkZHIsICZhdXRoZGF0YSwgIiIpIHx8CisgICAgICAgIGt1c2Vyb2soJmF1 dGhkYXRhLCBuYW1lKSkgeworICAgICAgICBkZXN0X3RrdCgpOworICAgICAgICByZXR1cm4oMCk7 CisgICAgfQorICAgIGRlc3RfdGt0KCk7CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIEZU UF9LRVJCRVJPUyAqLworCitWT0lECit6c3lzbG9nKCkgeworI2lmZGVmIENLU1lTTE9HCisgICAg aWYgKGNreHN5c2xvZyAmJiAhY2t4bG9nZ2luZykgeworI2lmZGVmIExPR19EQUVNT04KKyAgICAg ICAgb3BlbmxvZyhpbnNlcnZlciA/ICJpa3NkIiA6ICJja2VybWl0IiwgTE9HX1BJRCwgTE9HX0RB RU1PTik7CisjZWxzZQorICAgICAgICBvcGVubG9nKGluc2VydmVyID8gImlrc2QiIDogImNrZXJt aXQiLCBMT0dfUElEKTsKKyNlbmRpZiAvKiBMT0dfREFFTU9OICovCisgICAgICAgIGNreGxvZ2dp bmcgPSAxOworICAgICAgICBkZWJ1ZyhGMTAwLCJ6c3lzbG9nIHN5c2xvZyBvcGVuZWQiLCIiLDAp OworICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworfQorCisvKiAgWiBWIFAgQSBTIFMgIC0t ICBWZXJpZnkgcGFzc3dvcmQ7IHJldHVybnMgMSBpZiBPSywgMCBvdGhlcndpc2UgICovCisKKyNp Zm5kZWYgQVVUSF9VU0VSCisjZGVmaW5lIEFVVEhfVVNFUiAzCisjZW5kaWYgLyogQVVUSF9VU0VS ICovCisjaWZuZGVmIEFVVEhfVkFMSUQKKyNkZWZpbmUgQVVUSF9WQUxJRCA0CisjZW5kaWYgLyog QVVUSF9WQUxJRCAqLworCisjaWZkZWYgX19GcmVlQlNEX18JCQkvKiAyOTkgVGhpcyB3YXMgbmVj ZXNzYXJ5IGluICovCisjaWZuZGVmIE5PRENMSU5JVEdST1VQUwkJCS8qIEZyZWVCU0QgNC40LCBk b24ndCBrbm93ICovCisjZGVmaW5lIE5PRENMSU5JVEdST1VQUwkJCS8qIGFib3V0IG90aGVyIHZl cnNpb25zLi4uICovCisjZW5kaWYJLyogTk9EQ0xJTklUR1JPVVBTICovICAgICAgICAgICAgCisj ZW5kaWYJLyogIF9fRnJlZUJTRF9fICovCisKK2ludAorenZwYXNzKHApIGNoYXIgKnA7IHsKKyNp Zm5kZWYgTk9EQ0xJTklUR1JPVVBTCitfUFJPVE9UWVAoaW50IGluaXRncm91cHMsIChjb25zdCBj aGFyICosIGdpZF90KSApOworI2VuZGlmCS8qIE5PRENMSU5JVEdST1VQUyAqLworCisgICAgY2hh ciAqeHBhc3N3ZCwgKnNhbHQ7CisgICAgY2hhciAqIGRpciA9IE5VTEw7CisjaWZkZWYgQ0tfUEFN CisgICAgaW50IHBhbV9zdGF0dXM7CisgICAgY29uc3QgY2hhciAqIHJlcGx5ID0gTlVMTDsKKyNl bmRpZiAvKiBDS19QQU0gKi8KKworICAgIGlmIChsb2dnZWRfaW4gfHwgYXNrcGFzc3dkID09IDAp IHsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ6dnBhc3MiLHAg PyAoZ3Vlc3QgPyBwIDogInh4eHh4eCIpIDogIihudWxsKSIsZ3Vlc3QpOworICAgIGlmICghcCkg cCA9ICIiOworICAgIGFza3Bhc3N3ZCA9IDA7CisgICAgaWYgKGd1ZXN0ICYmICEqcCkgeyAgICAg ICAgICAgICAgICAgLyogR3Vlc3RzIG11c3Qgc3BlY2lmeSBhIHBhc3N3b3JkICovCisjaWZkZWYg Q0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5c2xvZyAmJiBja3hsb2dnaW5nKSB7CisgICAgICAg ICAgICBzeXNsb2coTE9HX0lORk8sCisgICAgICAgICAgICAgICAgICAgImxvZ2luOiBhbm9ueW1v dXMgZ3Vlc3RzIG11c3Qgc3BlY2lmeSBhIHBhc3N3b3JkIgorICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICByZXR1cm4oMCk7Cisg ICAgfQorICAgIGlmICghZ3Vlc3QKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAm JiBja190bl9hdXRoX3ZhbGlkKCkgIT0gQVVUSF9WQUxJRAorI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCisgICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgIC8qICJmdHAiIGlzIG9u bHkgYWNjb3VudCBhbGxvd2VkIG5vIHBhc3N3b3JkICovCisjaWZkZWYgQ0tfUEFNCisgICAgICAg IGRlYnVnKEYxMTAsInp2cGFzcyIsImNhbGxpbmcgcGFtX3NldF9pdGVtKEFVVEhUT0spIiwwKTsK KyAgICAgICAgaWYgKChwYW1fc3RhdHVzID0gcGFtX3NldF9pdGVtKHBhbWgsUEFNX0FVVEhUT0ss cCkpICE9IFBBTV9TVUNDRVNTKSB7CisgICAgICAgICAgICByZXBseSA9IHBhbV9zdHJlcnJvcihw YW1oLCBwYW1fc3RhdHVzKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInp2cGFzcyBQQU0gZmFp bHVyZSIscmVwbHksMCk7CisgICAgICAgICAgICAvKiBpZiBubyBwYXNzd29yZCBnaXZlbiB0cmVh dCBhcyBub24tZmF0YWwgZXJyb3IgKi8KKyAgICAgICAgICAgIC8qIHBhbSB3aWxsIHByb21wdCBm b3IgcGFzc3dvcmQgaW4gcGFtX2F1dGhlbnRpY2F0ZSgpICovCisgICAgICAgICAgICBpZiAoIXAp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLHJlcGx5KTsKKyAgICAgICAgICAgICAg ICBwYW1fZW5kKHBhbWgsIDApOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInp2cGFzcyBk ZW5pZWQiLCIiLDApOworICAgICAgICAgICAgICAgIHB3ID0gTlVMTDsKKyAgICAgICAgICAgICAg ICB6dnVuYW1lWzBdID0gTlVMOworICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3MiLCJjYWxsaW5nIHBh bV9hdXRoZW50aWNhdGUiLDApOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKCpwKQorCSAg cGFtX3B3ID0gcDsKKyNlbHNlCisvKgorICBNYWtlIElLU0QgYXV0aGVudGljYXRpb24gKHVzaW5n IFBBTSkgYXNrIGZvciBhIHBhc3N3b3JkIHdoZW4gYW4KKyAgaW52YWxpZCB1c2VybmFtZSBoYXMg YmVlbiBnaXZlbiwgdG8gYXZvaWQgZGlzY2xvc2luZyB3aGljaCBhY2NvdW50CisgIG5hbWVzIGFy ZSB2YWxpZC4gU2VlICM0MTcyNDcgKERlYmlhbikuCisqLworICAgICAgICBpZiAoKnAKKyNpZmRl ZiBDS19MT0dJTgorCSAgICB8fCBnb3RlbXB0eXBhc3N3ZAorI2VuZGlmIC8qIENLX0xPR0lOICov CisJICAgICkKKwkgICAgcGFtX3B3ID0gcDsKKyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgICAg IGlmICgocGFtX3N0YXR1cyA9IHBhbV9hdXRoZW50aWNhdGUocGFtaCwgMCkpICE9IFBBTV9TVUND RVNTKSB7CisgICAgICAgICAgICByZXBseSA9IHBhbV9zdHJlcnJvcihwYW1oLCBwYW1fc3RhdHVz KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInp2cGFzcyBQQU0gZmFpbHVyZSIscmVwbHksMCk7 CisgICAgICAgICAgICBwcmludGYoIiVzXG4iLHJlcGx5KTsKKyAgICAgICAgICAgIHBhbV9lbmQo cGFtaCwgMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6dnBhc3MgZGVuaWVkIiwiIiwwKTsK KyAgICAgICAgICAgIHBhbV9wdyA9IE5VTEw7CisgICAgICAgICAgICBwdyA9IE5VTEw7CisgICAg ICAgICAgICB6dnVuYW1lWzBdID0gTlVMOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAg ICB9CisgICAgICAgIHBhbV9wdyA9IE5VTEw7CisgICAgICAgIGRlYnVnKEYxMTAsInp2cGFzcyIs ImNhbGxpbmcgcGFtX2FjY3RfbWdtdCIsMCk7CisgICAgICAgIGlmICgocGFtX3N0YXR1cyA9IHBh bV9hY2N0X21nbXQocGFtaCwgMCkpICE9IFBBTV9TVUNDRVNTKSB7CisgICAgICAgICAgICByZXBs eSA9IHBhbV9zdHJlcnJvcihwYW1oLCBwYW1fc3RhdHVzKTsKKyAgICAgICAgICAgIGRlYnVnKEYx MTAsInp2cGFzcyBQQU0gZmFpbHVyZSIscmVwbHksMCk7CisgICAgICAgICAgICBwcmludGYoIiVz XG4iLHJlcGx5KTsKKyAgICAgICAgICAgIHBhbV9lbmQocGFtaCwgMCk7CisgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJ6dnBhc3MgZGVuaWVkIiwiIiwwKTsKKyAgICAgICAgICAgIHB3ID0gTlVMTDsK KyAgICAgICAgICAgIHp2dW5hbWVbMF0gPSBOVUw7CisgICAgICAgICAgICByZXR1cm4oMCk7Cisg ICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwienZwYXNzIiwiUEFNIHZhbGlkYXRlcyBPSyIs MCk7CisgICAgICAgIHBhbV9lbmQocGFtaCwwKTsKKyNlbHNlIC8qIENLX1BBTSAqLworICAgICAg ICBpZiAocHcgPT0gTlVMTCkKKyAgICAgICAgICBzYWx0ID0gInh4IjsKKyAgICAgICAgZWxzZQor ICAgICAgICAgIHNhbHQgPSBwdy0+cHdfcGFzc3dkOworCisjaWZkZWYgSFBVWDEwX1RSVVNURUQK KyAgICAgICAgeHBhc3N3ZCA9IGJpZ2NyeXB0KHAsIHNhbHQpOworI2Vsc2UKKy8qCisgIE9uIDY0 LWJpdCBwbGF0Zm9ybXMgdGhpcyBjYW4gZ2l2ZSAiY2FzdCB0byBwb2ludGVyIGZyb20gaW50ZWdl ciBvZgorICBkaWZmZXJlbnQgc2l6ZSIgd2FybmluZywgYnV0IEknbSBub3Qgc3VyZSB3aGF0IHRo ZSBlZmZlY3QgaXMgYXQgcnVudGltZSwKKyAgb3Igd2hhdCB0byBkbyBhYm91dCBpdC4KKyAqLwor ICAgICAgICB4cGFzc3dkID0gKGNoYXIgKiljcnlwdChwLCBzYWx0KTsKKyNlbmRpZiAvKiBIUFVY MTBfVFJVU1RFRCAqLworCisgICAgICAgIGlmICgKKyNpZmRlZiBGVFBfS0VSQkVST1MKKyAgICAg ICAgICAgIC8qIG51bGwgcHdfcGFzc3dkIG9rIGlmIEtlcmJlcm9zIHBhc3N3b3JkIG9rICovCisg ICAgICAgICAgICBwdyA9PSBOVUxMIHx8CisgICAgICAgICAgICAoKCpwdy0+cHdfcGFzc3dkICE9 ICdcMCcgfHwKKyAgICAgICAgICAgICAgc3RyY21wKHhwYXNzd2QsIHB3LT5wd19wYXNzd2QpKQor ICAgICAgICAgICAgICYmICFrcGFzcyhwdy0+cHdfbmFtZSwgcCkpCisjZWxzZQorI2lmZGVmIENL X1NSUAorICAgICAgICAgICAgLyogY2hlY2sgd2l0aCB0cGFzc3dkIGZpcnN0IGlmIHRoZXJlICov CisgICAgICAgICAgICBwdyA9PSBOVUxMIHx8ICpwdy0+cHdfcGFzc3dkID09ICdcMCcgfHwKKyAg ICAgICAgICAgIHRfdmVyaWZ5cHcgKHB3LT5wd19uYW1lLCBwKSA9PSAwIHx8CisgICAgICAgICAg ICAodF92ZXJpZnlwdyAocHctPnB3X25hbWUsIHApIDwgMCAmJgorICAgICAgICAgICAgc3RyY21w ICh4cGFzc3dkLCBwdy0+cHdfcGFzc3dkKSkKKyNlbHNlIC8qIENLX1NSUCAqLworICAgICAgICAg ICAgLyogVGhlIHN0cmNtcCBkb2VzIG5vdCBjYXRjaCBudWxsIHBhc3N3b3JkcyEgKi8KKyAgICAg ICAgICAgIChwdyA9PSBOVUxMKSB8fCAoKnB3LT5wd19wYXNzd2QgPT0gJ1wwJykgfHwKKyAgICAg ICAgICAgIHN0cmNtcCh4cGFzc3dkLCBwdy0+cHdfcGFzc3dkKQorI2VuZGlmIC8qIENLX1NSUCAq LworI2VuZGlmIC8qIEZUUF9LRVJCRVJPUyAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAg ICBkZWJ1ZyhGMTAwLCJ6dnBhc3MgZGVuaWVkIiwiIiwwKTsKKyAgICAgICAgICAgIHB3ID0gTlVM TDsKKyAgICAgICAgICAgIHp2dW5hbWVbMF0gPSBOVUw7CisgICAgICAgICAgICByZXR1cm4oMCk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19QQU0gKi8KKyAgICB9CisKKyAgICAoVk9JRCkgc2V0 Z2lkKChHSURfVClwdy0+cHdfZ2lkKTsgICAvKiBTZXQgZ3JvdXAgSUQgKi8KKworI2lmbmRlZiBO T0lOSVRHUk9VUFMKKyAgICAoVk9JRCkgaW5pdGdyb3Vwcyhwdy0+cHdfbmFtZSwgcHctPnB3X2dp ZCk7CisjZW5kaWYgLyogTk9JTklUR1JPVVBTICovCisKKyAgICBsb2dnZWRfaW4gPSAxOworICAg IGRpciA9IHB3LT5wd19kaXI7CisKKyNpZmRlZiBDS1dUTVAKKyAgICAvKiBPcGVuIHd0bXAgYmVm b3JlIGNocm9vdCAqLworICAgIGlmIChja3h3dG1wKSB7CisgICAgICAgIHNwcmludGYoY2tzeXNs aW5lLCJpa3NfJTA0eCIsIGdldHBpZCgpKTsgLyogc2FmZSAqLworICAgICAgICBsb2d3dG1wKGNr c3lzbGluZSwgcHctPnB3X25hbWUsCisgICAgICAgICAgICAgICAgIGNsaWVudGhvc3QgPyBjbGll bnRob3N0IDogIih1bmtub3duIGhvc3QpIgorICAgICAgICAgICAgICAgICk7CisgICAgICAgIGRl YnVnKEYxMTAsIldUTVAgbG9naW4iLGNrc3lzbGluZSxsb2dnZWRfaW4pOworICAgIH0KKyNlbmRp ZiAvKiBDS1dUTVAgKi8KKy8qCisgIEZvciBhbm9ueW1vdXMgdXNlcnMsIHdlIGNocm9vdCB0byB1 c2VyIGZ0cCdzIGhvbWUgZGlyZWN0b3J5IHVubGVzcworICBzdGFydGVkIHdpdGggLS1hbm9ucm9v dDp4eHgsIGluIHdoaWNoIGNhc2Ugd2UgY2hyb290IHRvIHh4eC4gIFdlIG11c3QKKyAgaW1tZWRp YXRlbHkgY2hkaXIoKSB0byB0aGUgc2FtZSBkaXJlY3Rvcnkgd2UgY2hyb290KCkgdG8gb3IgZWxz ZSB0aGUKKyAgb2xkIGN1cnJlbnQgZGlyZWN0b3J5IHJlbWFpbnMgYWNjZXNzaWJsZSBhcyAiLiIg b3V0c2lkZSB0aGUgbmV3IHJvb3QuCisqLworICAgIGlmIChndWVzdCkgeworICAgICAgICBpZiAo YW5vbnJvb3QpICAgICAgICAgICAgICAgICAgIC8qIE5vbi1kZWZhdWx0IGFub255bW91cyByb290 ICovCisgICAgICAgICAgZGlyID0gYW5vbnJvb3Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBt YWtlc3RyKCZhbm9ucm9vdCxkaXIpOworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIGRlYnVn KEYxMTAsInp2cGFzcyBhbm9uIGNocm9vdCIsZGlyLDApOworICAgICAgICBpZiAoY2hyb290KGRp cikgPCAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6dnBhc3MgYW5vbiBjaHJvb3QgRkFJ TEVEIixkaXIsZXJybm8pOworICAgICAgICAgICAgZ290byBiYWQ7CisgICAgICAgIH0KKyAgICAg ICAgZXJybm8gPSAwOworICAgICAgICBpZiAoY2hkaXIoIi8iKSA8IDApIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMTEsInp2cGFzcyBhbm9uIGNoZGlyIEZBSUxFRCIsZGlyLGVycm5vKTsKKyAgICAg ICAgICAgIGdvdG8gYmFkOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsInp2cGFzcyBh bm9uIGNocm9vdC9jaGRpciBPSyIsZGlyLDApOworICAgIH0gZWxzZSBpZiAoY2hkaXIoZGlyKSA8 IDApIHsgICAgICAgIC8qIE5vdCBndWVzdCAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYg KGNoZGlyKCIvIikgPCAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJOb24tZ3Vlc3QgY2hk aXIgRkFJTEVEIixkaXIsMCk7CisgICAgICAgICAgICBnb3RvIGJhZDsKKyAgICAgICAgfSBlbHNl CisgICAgICAgICAgcHJpbnRmKCI/Tm8gZGlyZWN0b3J5ISBMb2dnaW5nIGluIHdpdGggaG9tZT0v XG4iKTsKKyNlbHNlCisgICAgICAgIGRlYnVnKEYxMTAsInp2cGFzcyBub24tZ3Vlc3QgY2hkaXIg RkFJTEVEIixkaXIsMCk7CisgICAgICAgIGdvdG8gYmFkOyAgICAgICAgICAgICAgICAgICAgICAg LyogQmUgY29uc2VydmF0aXZlIGF0IGZpcnN0ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg IH0KKyAgICBkZWJ1ZyhGMTEwLCJ6dnBhc3Mgbm9uLWd1ZXN0IGNoZGlyIE9LIixkaXIsMCk7Cisg ICAgaWYgKHNldHVpZCgoVUlEX1QpcHctPnB3X3VpZCkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYx MDEsInp2cGFzcyBzZXR1aWQgRkFJTEVEIiwiIixwdy0+cHdfdWlkKTsKKyAgICAgICAgZ290byBi YWQ7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInp2cGFzcyBzZXR1aWQgT0siLCIiLHB3LT5wd191 aWQpOworCisgICAgZ3Vlc3RwYXNzWzBdID0gJ1wwJzsKKyAgICBpZiAoZ3Vlc3QpIHsKKyAgICAg ICAgZXh0ZXJuIGludCBmbmNhY3Q7CisgICAgICAgIGlzZ3Vlc3QgPSAxOworICAgICAgICBmbmNh Y3QgPSBYWUZYX1I7ICAgICAgICAgICAgICAgIC8qIEZJTEUgQ09MTElTSU9OID0gUkVOQU1FICov CisgICAgICAgIGRlYnVnKEYxMTAsIkdVRVNUIGZuY2FjdD1SIixwLDApOworICAgICAgICBsc2V0 KGd1ZXN0cGFzcywiYW5vbnltb3VzOiIsMTAsMzIpOworICAgICAgICBja3N0cm5jcHkoJmd1ZXN0 cGFzc1sxMF0scCxHVUVTVFBBU1MtMTApOworICAgICAgICBob21lID0gIi8iOworICAgICAgICBw cmludGYoIkFub255bW91cyBsb2dpbi5cclxuIik7CisKKyNpZmRlZiBTRVRQUk9DVElUTEUKKwkv KiBwcm9jdGl0bGUgZGVjbGFyZWQgd2hlcmU/ICBPYnZpb3VzbHkgdGhpcyBjb2RlIGlzIG5ldmVy IGNvbXBpbGVkLiAqLworICAgICAgICBzcHJpbnRmKHByb2N0aXRsZSwgIiVzOiBhbm9ueW1vdXMv JS4qcyIsCisgICAgICAgICAgICAgICAgY2xpZW50aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVuayki LAorICAgICAgICAgICAgICAgIHNpemVvZihwcm9jdGl0bGUpIC0gc2l6ZW9mKGNsaWVudGhvc3Qp IC0KKyAgICAgICAgICAgICAgICBzaXplb2YoIjogYW5vbnltb3VzLyIpLCBwKTsKKyAgICAgICAg c2V0cHJvY3RpdGxlKHByb2N0aXRsZSk7CisjZW5kaWYgLyogU0VUUFJPQ1RJVExFICovCisKKyNp ZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nICYmIGNreGxvZ2dpbmcpIHsKKyAg ICAgICAgICAgIHN5c2xvZyhMT0dfSU5GTywKKyAgICAgICAgICAgICAgICAgICAibG9naW46IGFu b255bW91cyAlcyAlcyIsCisgICAgICAgICAgICAgICAgICAgY2xpZW50aG9zdCA/IGNsaWVudGhv c3QgOiAiKHVua25vd24gaG9zdCkiLAorICAgICAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAg ICAgICAgICApOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKworICAgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWwgdXNlciAqLworICAgICAgICBp c2d1ZXN0ID0gMDsKKyAgICAgICAgaG9tZSA9IGRpcjsKKyAgICAgICAgY2tzdHJuY3B5KGd1ZXN0 cGFzcyx6dnVuYW1lLEdVRVNUUEFTUyk7CisKKyAgICAgICAgcHJpbnRmKCJVc2VyICVzIGxvZ2dl ZCBpbi5cclxuIiwgcHctPnB3X25hbWUpOworI2lmZGVmIFNFVFBST0NUSVRMRQorCS8qIG5vdCB1 c2VkICovCisgICAgICAgIHNwcmludGYocHJvY3RpdGxlLCAiJXM6ICVzIiwKKyAgICAgICAgICAg ICAgICBjbGllbnRob3N0ID8gY2xpZW50aG9zdCA6ICIodW5rKSIsCisgICAgICAgICAgICAgICAg cHctPnB3X25hbWUKKyAgICAgICAgICAgICAgICApOworICAgICAgICBzZXRwcm9jdGl0bGUocHJv Y3RpdGxlKTsKKyNlbmRpZiAvKiBTRVRQUk9DVElUTEUgKi8KKworI2lmZGVmIENLU1lTTE9HCisg ICAgICAgIGlmIChja3hzeXNsb2cgJiYgY2t4bG9nZ2luZykKKyAgICAgICAgICBzeXNsb2coTE9H X0lORk8sICJsb2dpbjogJXMgJXMiLAorICAgICAgICAgICAgICAgICBwdy0+cHdfbmFtZSwKKyAg ICAgICAgICAgICAgICAgY2xpZW50aG9zdCA/IGNsaWVudGhvc3QgOiAiKHVua25vd24gaG9zdCki CisgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICB9CisgICAg Y2tzdHJuY3B5KHp2aG9tZSxob21lLENLTUFYUEFUSCk7ICAgLyogU2V0IGVudmlyb25tZW50IHZh cmlhYmxlcyAqLworI2lmbmRlZiBOT1BVVEVOVgorCisgICAgY2ttYWttc2coemVudnVzZXIsWkVO VlVTRVIsIlVTRVI9Iix6dnVuYW1lLE5VTEwsTlVMTCk7CisgICAgcHV0ZW52KChjaGFyICopemVu dnVzZXIpOworICAgIGNrbWFrbXNnKHplbnZsb2duYW1lLFpFTlZMT0dOQU1FLCJMT0dOQU1FPSIs enZ1bmFtZSxOVUxMLE5VTEwpOworICAgIHB1dGVudigoY2hhciAqKXplbnZsb2duYW1lKTsKKyAg ICBja21ha21zZyh6ZW52aG9tZSxaRU5WSE9NRSwiSE9NRT0iLHp2aG9tZSxOVUxMLE5VTEwpOwor ICAgIHB1dGVudigoY2hhciAqKXplbnZob21lKTsKKyNlbmRpZiAvKiBOT1BVVEVOViAqLworICAg IC8qIGhvbWRpciA9IChjaGFyICopenZob21lOyAqLworICAgIGNrc3RybmNweSgoY2hhciAqKXVp ZGJ1ZiwoY2hhciAqKXp2dW5hbWUsNjQpOworICAgIChWT0lEKSB1bWFzayhkZWZ1bWFzayk7Cisj aWZkZWYgSUtTREIKKyAgICBpZiAoaWtkYm9wZW4pIHsKKyAgICAgICAgY2hhciAqIHAyOworICAg ICAgICBpbnQgazsKKyAgICAgICAgZXh0ZXJuIGNoYXIgZGJyZWNbXTsKKyAgICAgICAgZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbXlmbGFnczsKKyAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGludCBteWRi c2xvdDsKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBpa3NkYmZsZCBkYmZsZFtdOworI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCisgICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIG15YW1vZGUsIG15 YXR5cGU7CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAgICAgbXlmbGFncyB8 PSBEQkZfTE9HR0VEOworI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZykgeworCSAgICBkZWJ1ZyhG MTAxLCJ6dnBhc3MgZ3Vlc3QiLCIiLGd1ZXN0KTsKKwkgICAgZGVidWcoRjExMSwienZwYXNzIHp2 dW5hbWUiLHp2dW5hbWUsMCk7CisJICAgIGRlYnVnKEYxMTAsInp2cGFzcyBndWVzdHBhc3MiLGd1 ZXN0cGFzcywwKTsKKwkgICAgZGVidWcoRjExMCwienZwYXNzIGRpciIsZGlyLDApOworCSAgICBk ZWJ1ZyhGMTEwLCJ6dnBhc3MgaG9tZSIsaG9tZSwwKTsKKwkgICAgZGVidWcoRjExMCwienZwYXNz IGFub25yb290Iixhbm9ucm9vdCwwKTsKKwl9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAg cDIgPSBndWVzdCA/IGd1ZXN0cGFzcyA6IHp2dW5hbWU7CisgICAgICAgIGlmIChndWVzdCkgewor ICAgICAgICAgICAgcDIgPSAoY2hhciAqKWd1ZXN0cGFzczsKKyAgICAgICAgICAgIG15ZmxhZ3Mg Jj0gfkRCRl9VU0VSOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcDIgPSAoY2hhciAq KXp2dW5hbWU7CisgICAgICAgICAgICBteWZsYWdzIHw9IERCRl9VU0VSOworICAgICAgICB9Cisg ICAgICAgIGsgPSBzdHJsZW4ocDIpOworICAgICAgICBzdHJuY3B5KCZkYnJlY1tEQl9VTEVOXSx1 bG9uZ3RvaGV4KCh1bnNpZ25lZCBsb25nKWssNCksNCk7CisgICAgICAgIGxzZXQoJmRicmVjW2Ri ZmxkW2RiX1VTRVJdLm9mZl0scDIsMTAyNCwzMik7CisgICAgICAgIHN0cm5jcHkoJmRicmVjW0RC X0ZMQUdTXSx1bG9uZ3RvaGV4KG15ZmxhZ3MsNCksNCk7CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJ T04KKyAgICAgICAgbXlhbW9kZSA9IGNrX3RuX2F1dGhfdmFsaWQoKTsKKyAgICAgICAgc3RybmNw eSgmZGJyZWNbREJfQU1PREVdLHVsb25ndG9oZXgobXlhbW9kZSw0KSw0KTsKKyAgICAgICAgbXlh dHlwZSA9IGNrX3RuX2F1dGhlbnRpY2F0ZWQoKTsKKyAgICAgICAgc3RybmNweSgmZGJyZWNbREJf QVRZUEVdLHVsb25ndG9oZXgobXlhdHlwZSw0KSw0KTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNB VElPTiAqLworICAgICAgICBpZiAoZ3Vlc3QpIHsKKyAgICAgICAgICAgIHAyID0gZGlyOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcDIgPSB6Z3RkaXIoKTsKKyAgICAgICAgICAgIGlm ICghcDIpIHAyID0gIiI7CisgICAgICAgICAgICBpZiAoISpwMikgcDIgPSBob21lOworICAgICAg ICB9CisgICAgICAgIHN0cm5jcHkoJmRicmVjW0RCX0RMRU5dLAorICAgICAgICAgICAgICAgIHVs b25ndG9oZXgoKHVuc2lnbmVkIGxvbmcpc3RybGVuKHAyKSw0KSwKKyAgICAgICAgICAgICAgICA0 CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRbZGJfRElSXS5v ZmZdLHAyLDEwMjQsMzIpOworICAgICAgICB1cGRzbG90KG15ZGJzbG90KTsKKyAgICB9CisjZW5k aWYgLyogSUtTREIgKi8KKyAgICByZXR1cm4oMSk7CisKK2JhZDogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDb21tb24gZmFpbHVyZSBleGl0ICovCisgICAgenZ1bmFtZVsw XSA9IE5VTDsKKyAgICB6dmxvZ291dCgpOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBD S19MT0dJTiAqLworCisvKiBCdWdneSBYZW5peCAyLjMuNCBjYyBuZWVkcyB0aGlzIGxpbmUgYWZ0 ZXIgdGhlIGVuZGlmICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9ja3VpbnMudHh0IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4w LjMwMi9ja3VpbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2Zl ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAu MzAyL2NrdWlucy50eHQKQEAgLTAsMCArMSwzNTg4IEBACisKKyAgIFsxXVRoZSBDb2x1bWJpYSBD cm93biBUaGUgS2VybWl0IFByb2plY3QgfCBDb2x1bWJpYSBVbml2ZXJzaXR5CisgICA2MTIgV2Vz dCAxMTV0aCBTdHJlZXQsIE5ldyBZb3JrIE5ZIDEwMDI1IFVTQSBvIFsyXWtlcm1pdEBjb2x1bWJp YS5lZHUKKyAgIC4uLnNpbmNlIDE5ODEKKyAgIFszXUhvbWUgWzRdS2VybWl0IDk1IFs1XUMtS2Vy bWl0IFs2XVNjcmlwdHMgWzddQ3VycmVudCBbOF1OZXcgWzldRkFRCisgICBbMTBdU3VwcG9ydAor CitDLUtlcm1pdCA5LjAgSW5zdGFsbGF0aW9uIEluc3RydWN0aW9ucyBhbmQgT3B0aW9ucyBmb3Ig VW5peAorCisgICBbIFsxMV1Db250ZW50cyBdIFsgWzEyXUMtS2VybWl0IF0gWyBbMTNdS2VybWl0 IEhvbWUgXQorCisgICBGcmFuayBkYSBDcnV6CisgICBUaGUgS2VybWl0IFByb2plY3QKKyAgIENv bHVtYmlhIFVuaXZlcnNpdHkKKworICAgICAgQXMgb2YgQy1LZXJtaXQgdmVyc2lvbjogOS4wLjMw MiwgMjAgQXVndXN0IDIwMTEKKyAgICAgIFRoaXMgZmlsZSBsYXN0IHVwZGF0ZWQ6IFN1biBBdWcg MjEgMTI6MDg6MjkgMjAxMSAoTmV3IFlvcmsgQ2l0eQorICAgdGltZSkKKworICAgSUYgWU9VIEFS RSBSRUFESU5HIEEgUExBSU4tVEVYVCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIGl0IGlzIGEK KyAgIHBsYWluLXRleHQgY29weSBvZiBhIFdlYiBwYWdlLiBZb3UgY2FuIHZpc2l0IHRoZSBvcmln aW5hbCAoYW5kIHBvc3NpYmx5CisgICBtb3JlIHVwLXRvLWRhdGUpIFdlYiBwYWdlIGhlcmU6CisK K1sxNF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKKworQ09OVEVO VFMKKworICAgWzE1XU9WRVJWSUVXCisgICAgMS4gWzE2XUlOVEVSTkVUIFFVSUNLIFNUQVJUCisg ICAgMi4gWzE3XUlOU1RBTExJTkcgRlJPTSBQQUNLQUdFUworICAgIDMuIFsxOF1JTlNUQUxMSU5H IFBSRUJVSUxUIEJJTkFSSUVTCisgICAgNC4gWzE5XUJVSUxESU5HIEZST00gU09VUkNFIENPREUK KyAgICA1LiBbMjBdSU5TVEFMTElORyBUSEUgS0VSTUlUIEZJTEVTCisgICAgNi4gWzIxXUlOU1RB TExJTkcgVU5JWCBDLUtFUk1JVCBGUk9NIERPUy1GT1JNQVQgRElTS0VUVEVTCisgICAgNy4gWzIy XUNIRUNLSU5HIFRIRSBSRVNVTFRTCisgICAgOC4gWzIzXVJFRFVDSU5HIFRIRSBTSVpFIE9GIFRI RSBFWEVDVVRBQkxFIFBST0dSQU0gSU1BR0UKKyAgICA5LiBbMjRdVU5JWCBWRVJTSU9OUworICAg MTAuIFsyNV1ESUFMSU5HIE9VVCBBTkQgQ09PUkRJTkFUSU5HIFdJVEggVVVDUAorICAgMTEuIFsy Nl1SVU5OSU5HIFVOSVggQy1LRVJNSVQgU0VUVUlEIE9SIFNFVEdJRAorICAgMTIuIFsyN11DT05G SUdVUklORyBVTklYIFdPUktTVEFUSU9OUworICAgMTMuIFsyOF1CSVpBUlJFIEJFSEFWSU9SIEFU IFJVTlRJTUUKKyAgIDE0LiBbMjldQ1JBU0hFUyBBTkQgQ09SRSBEVU1QUworICAgMTUuIFszMF1T WVNMT0dHSU5HCisgICAxNi4gWzMxXUJVSUxESU5HIFNFQ1VSRSBWRVJTSU9OUyBPRiBDLUtFUk1J VCA5LjAKKyAgIDE3LiBbMzJdSU5TVEFMTElORyBDLUtFUk1JVCBBUyBBTiBTU0ggU0VSVkVSIFNV QlNZU1RFTQorCitPVkVSVklFVworCisgICBbIFszM11Ub3AgXSBbIFszNF1Db250ZW50cyBdIFsg WzM1XU5leHQgXQorCisgICAgIFdBUk5JTkc6IFRoaXMgZG9jdW1lbnQgY29udGFpbnMgbm90ZXMg dGhhdCBoYXZlIGJlZW4gYWNjdW11bGF0aW5nCisgICAgIHNpbmNlIHRoZSBtaWQgMTk4MHMuIE1h bnkgb2YgdGhlIHByb2R1Y3RzIGFuZCBVbml4IHZlcnNpb25zCisgICAgIG1lbnRpb25lZCBoZXJl IGhhdmUgbm90IGJlZW4gaGVhcmQgb2YgaW4gYSBsb25nIHdoaWxlLCBidXQgdGhhdCBkb2VzCisg ICAgIG5vdCBuZWNlc3NhcmlseSBtZWFuIHRoZXkgYXJlIG5vdCBzdGlsbCBydW5uaW5nIGluIHNv bWUgb2JzY3VyZQorICAgICBub29rLgorCisgICBUaGlzIGZpbGUgY29udGFpbnMgVW5peC1zcGVj aWZpYyBpbmZvcm1hdGlvbi4gQSBsb3Qgb2YgaXQuIFVubGlrZSBtb3N0CisgICBvdGhlciBwYWNr YWdlcywgQy1LZXJtaXQgdHJpZXMgdmVyeSBoYXJkIHRvIGJlIHBvcnRhYmxlIHRvIGV2ZXJ5IFVu aXgKKyAgIHZhcmlldHkgKGFuZCBldmVyeSByZWxlYXNlIG9mIGVhY2ggb25lKSBrbm93biB0byBl eGlzdCwgaW5jbHVkaW5nIG1hbnkKKyAgIHRoYXQgYXJlIHF1aXRlIG9sZCwgYXMgd2VsbCBhcyB0 byBvdGhlciBwbGF0Zm9ybXMgbGlrZSBWTVMsIEFPUy9WUywKKyAgIFZPUywgT1MtOSwgdGhlIEJl Qm94LCB0aGUgQW1pZ2EsIGV0Yy4KKworICAgU2luY2UgQy1LZXJtaXQgZ2V0cyBzbyBkZWVwbHkg aW50byB0aGUgZmlsZSBzeXN0ZW0sIGkvbyBzeXN0ZW0sIGFuZAorICAgb3RoZXIgYXJlYXMgdGhh dCBkaWZmZXIgcmFkaWNhbGx5IGZyb20gb25lIFVuaXggcGxhdGZvcm0gdG8gdGhlIG5leHQsCisg ICB0aGlzIG1lYW5zIHRoYXQgYSBsb3QgY2FuIGdvIHdyb25nIHdoZW4geW91IHRyeSB0byBpbnN0 YWxsIEMtS2VybWl0IG9uCisgICAoZm9yIGV4YW1wbGUpIGEgbmV3IHJlbGVhc2Ugb2YgYSBwYXJ0 aWN1bGFyIHZhcmlldHkgb2YgVW5peCwgaW4gd2hpY2gKKyAgIGNlcnRhaW4gdGhpbmdzIG1pZ2h0 IGhhdmUgY2hhbmdlZCB0aGF0IEMtS2VybWl0IGRlcGVuZGVkIHVwb24uCisKKyAgIFRoaXMgZmls ZSBjb25jZW50cmF0ZXMgb24gaW5zdGFsbGF0aW9uLiBGb3IgYSBkZXNjcmlwdGlvbiBvZiBnZW5l cmFsCisgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEMtS2VybWl0LCBwbGVhc2UgcmVhZCB0 aGUgWzM2XUNvbmZpZ3VyYXRpb25zCisgICBPcHRpb25zIGRvY3VtZW50LiBGb3IgdHJvdWJsZXNo b290aW5nIGFmdGVyIGluc3RhbGxhdGlvbiwgc2VlIHRoZQorICAgWzM3XUdlbmVyYWwgSGludHMg YW5kIFRpcHMgYW5kIFszOF1Vbml4LVNwZWNpZmljIEhpbnRzIGFuZCBUaXBzCisgICBkb2N1bWVu dHMuIFRoZSBsYXR0ZXIsIGluIHBhcnRpY3VsYXIsIGNvbnRhaW5zIGxvdHMgb2YgaW5mb3JtYXRp b24gb24KKyAgIGxvdHMgb2Ygc3BlY2lmaWMgVW5peCBwbGF0Zm9ybXMuIElmIHlvdSB3YW50IHRv IHdvcmsgb24gdGhlIHNvdXJjZQorICAgY29kZSwgc2VlIHRoZSBbMzldQy1LZXJtaXQgUHJvZ3Jh bSBMb2dpYyBNYW51YWwKKworICAgWW91IG1heSBpbnN0YWxsIEMtS2VybWl0OgorCisgICAgICog RnJvbSBhbiAiWzQwXWluc3RhbGwgcGFja2FnZSIsIGlmIG9uZSBpcyBhdmFpbGFibGUuCisgICAg ICogQXMgYSBbNDFdcHJlYnVpbHQgYmluYXJ5LCBpZiBhdmFpbGFibGUsIHBsdXMgYWNjb21wYW55 aW5nIHRleHQKKyAgICAgICBmaWxlcy4KKyAgICAgKiBCeSBidWlsZGluZyBmcm9tIFs0Ml1zb3Vy Y2UgY29kZS4KKworMS4gSU5URVJORVQgUVVJQ0sgU1RBUlQKKworICAgWyBbNDNdVG9wIF0gWyBb NDRdQ29udGVudHMgXSBbIFs0NV1OZXh0IF0gWyBbNDZdUHJldmlvdXMgXQorCisgICBJZiB5b3Vy IFVuaXggY29tcHV0ZXIgaXMgb24gdGhlIEludGVybmV0IGFuZCBpdCBoYXMgYSBDIGNvbXBpbGVy LAorICAgaGVyZSdzIGhvdyB0byBkb3dubG9hZCwgYnVpbGQsIGFuZCBpbnN0YWxsIEMtS2VybWl0 IGRpcmVjdGx5IGZyb20gdGhlCisgICAidGFyYmFsbHMiIG9yIFppcCBhcmNoaXZlczoKKworICAg IDEuIE1ha2UgYSBmcmVzaCBkaXJlY3RvcnkgYW5kIGNkIHRvIGl0LgorICAgIDIuIERvd25sb2Fk IHRoZSBDLUtlcm1pdCBzb3VyY2UgY29kZToKKyAgICAgICBbNDddZnRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvYXJjaGl2ZXMvY2t1MjExLnRhci5aIChjb21wcmVzcworICAgICAgIGZvcm1h dCkgb3IgWzQ4XWZ0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2FyY2hpdmVzL2NrdTIxMS50 YXIuZ3oKKyAgICAgICAoZ3VuemlwIGZvcm1hdCkuIElmIHRob3NlIGxpbmtzIGRvbid0IHdvcmss IEZUUCB0cmFuc2ZlcnMgYXJlIGJlaW5nCisgICAgICAgYmxvY2tlZDsgdHJ5IHRoZXNlIEhUVFAg bGlua3MgaW5zdGVhZDoKKyAgICAgICBbNDldaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvZnRw L2FyY2hpdmVzL2NrdTIxMS50YXIuWiAoY29tcHJlc3MKKyAgICAgICBmb3JtYXQpIG9yCisgICAg ICAgWzUwXWh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2Z0cC9hcmNoaXZlcy9ja3UyMTEudGFy Lmd6IChndW56aXAKKyAgICAgICBmb3JtYXQpLgorICAgIDMuIFVuY29tcHJlc3MgdGhlIGNvbXBy ZXNzZWQgdGFyIGZpbGUgd2l0aCAidW5jb21wcmVzcyIgb3IgImd1bnppcCIsCisgICAgICAgYWNj b3JkaW5nIHRvIHdoaWNoIHR5cGUgb2YgY29tcHJlc3NlZCBmaWxlIHlvdSBkb3dubG9hZGVkLiAo SWYgeW91CisgICAgICAgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzLCB5b3UgY291bGQgZG93bmxvYWQg YSAobXVjaCBsYXJnZXIpCisgICAgICAgdW5jb21wcmVzc2VkIHRhciBhcmNoaXZlIGRpcmVjdGx5 OgorICAgICAgIFs1MV1mdHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9hcmNoaXZlcy9ja3Uy MTEudGFyIG9yCisgICAgICAgWzUyXWh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2Z0cC9hcmNo aXZlcy9ja3UyMTEudGFyCisgICAgNC4gTm93IHR5cGUgInRhciB4dmYgY2t1MjExLnRhciIgdG8g dW5wYWNrIHRoZSBpbmRpdmlkdWFsIGZpbGVzIGZyb20KKyAgICAgICB0aGUgdGFyIGFyY2hpdmUu CisgICAgNS4gVHlwZSAicm0gY2t1MjExLnRhciIgdG8gZ2V0IHJpZCBvZiB0aGUgdGFyIGFyY2hp dmUsIHdoaWNoIGlzIG5vCisgICAgICAgbG9uZ2VyIG5lZWRlZC4KKyAgICA2LiBSZWFkIHRoZSBj b21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBtYWtlZmlsZSB0byBmaW5kIG91dCB3aGljaAorICAg ICAgIHRhcmdldCB0byB1c2UgYW5kIHRoZW4gdHlwZSB0aGUgYXBwcm9wcmlhdGUgIm1ha2UiIGNv bW1hbmQsIHN1Y2ggYXMKKyAgICAgICAibWFrZSBsaW51eCIsICJtYWtlIHNvbGFyaXM4IiwgZXRj LgorICAgIDcuIFRoaXMgcHJvZHVjZXMgYSBiaW5hcnkgaW4geW91ciBjdXJyZW50IGRpcmVjdG9y eSBjYWxsZWQgIndlcm1pdCIuCisgICAgICAgU3RhcnQgaXQgYnkgdHlwaW5nICIuL3dlcm1pdCIg YW5kIFs1M110cnkgaXQgb3V0IHRvIG1ha2Ugc3VyZSBpdAorICAgICAgIHdvcmtzLiBUaGVuIHJl YWQgWzU0XVNlY3Rpb24gNSBmb3IgaG93IHRvIGluc3RhbGwgaXQsIG9yIHNpbXBseQorICAgICAg IGNvcHkgdGhlIHdlcm1pdCBiaW5hcnkgdG8gdGhlIGRlc2lyZWQgcHVibGljIGRpcmVjdG9yeSwg cmVuYW1lIGl0CisgICAgICAgdG8ga2VybWl0LCBhbmQgZ2l2ZSBpdCB0aGUgbmVlZGVkIHBlcm1p c3Npb25zIChhbmQsIGlmIGl0IGlzIGdvaW5nCisgICAgICAgdG8gYmUgdXNlZCB0byBkaWFsIG91 dCwgZ2l2ZSBpdCB0aGUgc2FtZSBncm91cCBhbmQgb3duZXIgYW5kCisgICAgICAgcGVybWlzc2lv bnMgYXMgdGhlIGN1LCB0aXAsIG9yIG1pbmljb20gcHJvZ3JhbSkuCisKKyAgIEZvciBzZWN1cmUg aW5zdGFsbGF0aW9ucywgc2VlIFs1NV1TZWN0aW9ucyA1IGFuZCBbNTZdMTYuCisKKzIuIElOU1RB TExJTkcgRlJPTSBQQUNLQUdFUworCisgICBbIFs1N11Ub3AgXSBbIFs1OF1Db250ZW50cyBdIFsg WzU5XU5leHQgXSBbIFs2MF1QcmV2aW91cyBdCisKKyAgIFZhcmlvdXMgVW5peCB2YXJpZXRpZXMg LS0gTGludXgsIFNvbGFyaXMsIEFJWCwgZXRjIC0tIG5vdyBpbmNvcnBvcmF0ZQorICAgdGhlIGlk ZWEgb2YgImluc3RhbGwgcGFja2FnZXMiLCBhbmQgbWFueSB1c2VycyBleHBlY3QgdG8gZmluZCBh bGwgbmV3CisgICBhcHBsaWNhdGlvbnMgaW4gdGhpcyBmb3JtYXQuIEEgc2VsZWN0aW9uIG9mIGlu c3RhbGwgcGFja2FnZXMgbWlnaHQgYmUKKyAgIGF2YWlsYWJsZSBmb3IgYW55IGdpdmVuIHJlbGVh c2Ugb2YgQy1LZXJtaXQsIGJ1dCB0aGVyZSBpcyBhIHRyYWRlb2ZmCisgICBiZXR3ZWVuIGNvbnZl bmllbmNlIGFuZCBzYWZldHkuIFVuaXggcHJlc2VudHMgc2V2ZXJhbCBub3RhYmxlIHByb2JsZW1z CisgICB0byB0aGUgYnVpbGRlciBvZiBpbnN0YWxsIHBhY2thZ2VzOgorCisgICAgYS4gU2luY2Ug Qy1LZXJtaXQgaXMgcG9ydGFibGUgdG8gbWFueSBub24tVW5peCBwbGF0Zm9ybXMgKFZNUywgVk9T LAorICAgICAgIEFPUy9WUywgZXRjKSwgc29tZSBvZiB0aGUgZmlsZXMgaW4gdGhlIEMtS2VybWl0 IGRpc3RyaWJ1dGlvbiBkbyBub3QKKyAgICAgICBmaXQgaW50byB0aGUgVW5peCBhcHBsaWNhdGlv biBtb2RlbC4gSW4gcGFydGljdWxhciwgQy1LZXJtaXQKKyAgICAgICBpbmNsdWRlcyBzb21lIHBs YWluIHRleHQgZmlsZXMgKGRlc2NyaWJlZCBpbiBbNjFdU2VjdGlvbiA1KSBhbmQKKyAgICAgICBV bml4IGhhcyBubyBzdGFuZGFyZCBwbGFjZSB0byBwdXQgc3VjaCBmaWxlcy4gVHlwaWNhbCBVbml4 IHBhY2thZ2UKKyAgICAgICBtYW5hZ2VycyBkbyBub3QgYWxsb3cgZm9yIHRoZW0uIFdoZXJlIHNo b3VsZCB0aGV5IGdvLCBhbmQgaG93IHdpbGwKKyAgICAgICB0aGUgdXNlciBrbm93IHdoZXJlIHRv IGZpbmQgdGhlbT8KKyAgICBiLiBJbnN0YWxsYXRpb24gb2YgYW55IHByb2dyYW0gdGhhdCB3aWxs IGJlIHVzZWQgdG8gbWFrZSBtb2RlbSBjYWxscworICAgICAgIHJlcXVpcmVzIHNvbWUgaW1wb3J0 YW50IGRlY2lzaW9ucyBmcm9tIHRoZSBpbnN0YWxsZXIgcmVnYXJkaW5nCisgICAgICAgc2VjdXJp dHkgYW5kIHByaXZpbGVnZS4KKworICAgSXRlbSAoYikgaXMgZGlzY3Vzc2VkIGF0IGxlbmd0aCBp biBbNjJdU2VjdGlvbnMgMTAgYW5kIFs2M10xMSBvZiB0aGlzCisgICBkb2N1bWVudCwgYnV0IHRo ZSBwYWNrYWdlLXJlbGF0ZWQgYXNwZWN0cyBhcmUgYWxzbyBnaXZlbiBoZXJlLiBUaGUKKyAgIGJh c2ljIHByb2JsZW0gaXMgdGhhdCBVbml4IGRpYWxvdXQgZGV2aWNlcyBhbmQgdGhlIFVVQ1AgImxv Y2sgZmlsZXMiCisgICB0aGF0IHJlZ3VsYXRlIGNvbnRlbnRpb24gZm9yIHRoZW0gKGRlc2NyaWJl ZCBpbiBbNjRdU2VjdGlvbiAxMCkgYXJlCisgICB1c3VhbGx5IHByb3RlY3RlZCBhZ2FpbnN0ICJ3 b3JsZCIuIFRoZXJlZm9yZSwgdGhlIGluc3RhbGwgcHJvY2VkdXJlCisgICBtdXN0IGVpdGhlciBy dW4gYXMgcm9vdCBpbiBvcmRlciB0byBnaXZlIHRoZSBLZXJtaXQgYmluYXJ5IHRoZSByZXF1aXJl ZAorICAgcGVybWlzc2lvbnMsIGdyb3VwLCBhbmQvb3Igb3duZXIsIG9yIGVsc2UgdGhlIGRpYWxv dXQgZGV2aWNlcyBhbmQKKyAgIGFzc29jaWF0ZWQgZGlyZWN0b3JpZXMgbXVzdCBiZSBvcGVuIGZv ciBncm91cCBvciB3b3JsZCByZWFkaW5nIGFuZAorICAgd3JpdGluZy4gT3RoZXJ3aXNlLCB0aGUg S2VybWl0IHByb2dyYW0ganVzdCBpbnN0YWxsZWQgV0lMTCBOT1QgV09SSyBmb3IKKyAgIGRpYWxp bmcgb3V0LgorCisgICBUaHVzLCBhIHdlbGwtY3JhZnRlZCBpbnN0YWxsYXRpb24gcHJvY2VkdXJl IHNob3VsZCBwcmVzZW50IHRoZSBvcHRpb25zCisgICBhbmQgYWxsb3cgdGhlIGluc3RhbGxlciB0 byBjaG9vc2UgdGhlIG1ldGhvZCwgaWYgYW55LCBmb3IgcmVndWxhdGluZworICAgYWNjZXNzIHRv IHRoZSBkaWFsb3V0IGRldmljZXM6CisKKyAgICBhLiBDaGVjayB0aGUgcGVybWlzc2lvbnMgb2Yg dGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBhbmQgdGhlIGRpYWxvdXQKKyAgICAgICBkZXZpY2VzLiBJ ZiB0aGV5IGRvIG5vdCBhbGxvdyBncm91cCBvciB3b3JsZCBSL1cgYWNjZXNzLCB0aGVuOgorICAg IGIuICJZb3VyIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5IGFuZC9vciBkaWFsb3V0IGRldmljZXMg cmVxdWlyZQorICAgICAgIHByaXZpbGVnZSB0byBhY2Nlc3MuIFlvdSBtdXN0IGVpdGhlciBjaGFu Z2UgdGhlaXIgcGVybWlzc2lvbnMgb3IKKyAgICAgICBpbnN0YWxsIEtlcm1pdCB3aXRoIHByaXZp bGVnZXMuIgorICAgIGMuICJJZiB5b3Ugd2lzaCB0byBpbnN0YWxsIEtlcm1pdCB3aXRoIHByaXZp bGVnZXMsIGl0IHdpbGwgYmUgZ2l2ZW4KKyAgICAgICB0aGUgc2FtZSBvd25lciwgZ3JvdXAsIGFu ZCBwZXJtaXNzaW9ucyBhcyB0aGUgY3UgcHJvZ3JhbSBzbyBpdCBjYW4KKyAgICAgICB1c2UgdGhl IGRpYWxvdXQgZGV2aWNlcy4iIChUaGlzIGlzIGluY3JlYXNpbmdseSBwcm9ibGVtYXRpYyBhcyBz b21lCisgICAgICAgbmV3ZXIgVW5peCBzeXN0ZW1zIGxpa2UgTWFjIE9TIFggZG9uJ3QgaGF2ZSBh IGN1IHByb2dyYW0sIG9yIGV2ZW4gYQorICAgICAgIHNlcmlhbCBwb3J0ISkKKyAgICBkLiBJZiB0 aGV5IGNob29zZSAoYykgYnV0IHRoZSB1c2VyIGlzIG5vdCByb290LCBnaXZlIGEgbWVzc2FnZSB0 aGF0CisgICAgICAgdGhlIGluc3RhbGwgcHJvY2VkdXJlIGNhbiBiZSBydW4gb25seSBieSByb290 IGFuZCB0aGVuIHF1aXQuCisKKyAgIEl0IHNob3VsZCBnbyB3aXRob3V0IHNheWluZywgb2YgY291 cnNlLCB0aGF0IGFueSBiaW5hcmllcyB0aGF0IGFyZSB0bworICAgYmUgaW5jbHVkZWQgaW4gYW4g aW5zdGFsbCBwYWNrYWdlIHNob3VsZCBiZSBidWlsdCBmcmVzaCBvbiB0aGUgZXhhY3QKKyAgIHBs YXRmb3JtIChlLmcuIFJlZCBIYXQgOC4wIG9uIEludGVsKSBmb3Igd2hpY2ggdGhlIHBhY2thZ2Ug aXMgdGFyZ2V0ZWQ7CisgICBwcmVidWlsdCBiaW5hcmllcyAoWzY1XW5leHQgc2VjdGlvbikgZnJv bSBvdGhlciBzaXRlcyBhcmUgbGlrZWx5IHRvCisgICBoYXZlIGxpYnJhcnkgbWlzbWF0Y2hlcy4g WzY2XUNMSUNLIEhFUkUgZm9yIG1vcmUgYWJvdXQgYnVpbGRpbmcKKyAgIEMtS2VybWl0IGluc3Rh bGwgcGFja2FnZXMuCisKKyAgIFRoZSBLZXJtaXQgUHJvamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBy ZXNvdXJjZXMgb3IgdGhlIGV4cGVydGlzZSB0byBtYWtlCisgICBpbnN0YWxsIHBhY2thZ2VzIGZv ciBldmVyeSBwbGF0Zm9ybS4gTW9zdCBpbnN0YWxsIHBhY2thZ2VzLCB0aGVyZWZvcmUsCisgICBh cmUgY29udHJpYnV0ZWQgYnkgb3RoZXJzLCBhbmQgdGhleSBkbyBub3QgbmVjZXNzYXJpbHkgZm9s bG93IHRoZQorICAgZ3VpZGVsaW5lcyBnaXZlbiBhYm92ZS4gUGF5IGF0dGVudGlvbiB0byB3aGF0 IHRoZXkgZG8uCisKKyAgIElmIHlvdSBhcmUgYW4gZW5kIHVzZXIgd2hvIGhhcyBvYnRhaW5lZCBh IEMtS2VybWl0IGluc3RhbGwgcGFja2FnZSBmb3IKKyAgIGEgcGFydGljdWxhciBwbGF0Zm9ybSwg eW91IHNob3VsZCBiZSBhd2FyZSB0aGF0IHNvbWUgYWRkaXRpb25hbCBzdGVwcworICAgbWlnaHQg bmVlZGVkIGlmIHlvdSB3YW50IHRvIHVzZSBLZXJtaXQgdG8gZGlhbCBvdXQuIFJlYWQgWzY3XVNl Y3Rpb24gMTAKKyAgIGZvciBkZXRhaWxzLgorCiszLiBJTlNUQUxMSU5HIFBSRUJVSUxUIEJJTkFS SUVTCisKKyAgIFsgWzY4XVRvcCBdIFsgWzY5XUNvbnRlbnRzIF0gWyBbNzBdTmV4dCBdIFsgWzcx XVByZXZpb3VzIF0KKworICAgSHVuZHJlZHMgb2YgcHJlYnVpbHQgQy1LZXJtaXQgYmluYXJpZXMg YXJlIGF2YWlsYWJsZSBvbiB0aGUgQ0RST00gaW4KKyAgIHRoZSBCSU5BUlkgdHJlZSBbTk9URTog VGhlIEMtS2VybWl0IENEUk9NIGlzIHN0aWxsIGZvciB2ZXJzaW9uIDcuMF0sCisgICBhbmQgYXQg b3VyIGZ0cCBzaXRlIGluIHRoZSBbNzJda2VybWl0L2JpbiBhcmVhICh3aXRoIG5hbWVzIHN0YXJ0 aW5nCisgICB3aXRoICJjayIpLCBhbHNvIGFjY2Vzc2libGUgb24gdGhlIFs3M11DLUtlcm1pdCB3 ZWJzaXRlLiBUbyBpbnN0YWxsIGEKKyAgIHByZWJ1aWx0IGJpbmFyeToKKworICAgIGEuIFJlbmFt ZSB0aGUgYmluYXJ5IHRvICJ3ZXJtaXQiLgorICAgIGIuIE1ha2Ugc3VyZSBpdCB3b3Jrczsgc29t ZSB0ZXN0cyBhcmUgc3VnZ2VzdGVkIGluIFs3NF1TZWN0aW9uIDcuCisgICAgYy4gRm9sbG93IHN0 ZXBzIChiKSB0aHJvdWdoIChlKSBpbiBbNzVdU2VjdGlvbiA0LgorICAgIGQuIEluc3RhbGwgcmVs YXRlZCBmaWxlcyBhcyBkZXNjcmliZWQgaW4gWzc2XVNlY3Rpb24gNS4KKworICAgQnV0IGZpcnN0 Li4uIFBsZWFzZSBoZWVkIHRoZSBmb2xsb3dpbmcgY2F1dGlvbnM6CisKKyAgICBhLiBJZiB5b3Ug cGljayB0aGUgd3JvbmcgYmluYXJ5LCBpdCB3b24ndCB3b3JrIChvciB3b3JzZSkuCisgICAgYi4g RXZlbiB3aGVuIHlvdSBwaWNrIHRoZSBhcHByb3ByaWF0ZSBiaW5hcnksIGl0IHN0aWxsIG1pZ2h0 IG5vdCB3b3JrCisgICAgICAgZHVlIHRvIHNoYXJlZC1saWJyYXJ5IG1pc21hdGNoZXMsIGV0Yy4g KHNlZSBbNzddU2VjdGlvbiA0LjApLgorICAgIGMuIERvbid0IGV4cGVjdCBhIGJpbmFyeSBidWls dCBvbiBvciBmb3IgdmVyc2lvbiBuIG9mIHlvdXIgT1MgdG8gd29yaworICAgICAgIG9uIHZlcnNp b24gbiAtIHggKHdoZXJlIHggPiAwKS4gSG93ZXZlciwgaXQgaXMgc3VwcG9zZWQgdG8gYmUgc2Fm ZQorICAgICAgIHRvIHJ1biBhIGJpbmFyeSBidWlsdCBvbiAob3IgZm9yKSBhbiBvbGRlciBPUyBy ZWxlYXNlIG9uIGEgbmV3ZXIKKyAgICAgICBvbmUgKGJ1dCBpcyBbNzhdaW5jcmVhc2luZ2x5IGxl c3Mgc28gYXMgdGltZS1ob25vcmVkIHByaW5jaXBsZXMgb2YKKyAgICAgICBzdGFiaWxpdHkgYW5k IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGdvIGZhZGluZyBpbnRvIG9ic2N1cml0eSkuCisKKyAg IFRoZXJlZm9yZSwgaXQgaXMgYWx3YXlzIGJldHRlciB0byBidWlsZCB5b3VyIG93biBiaW5hcnkg ZnJvbSBzb3VyY2UKKyAgIGNvZGUgKFs3OV1uZXh0IHNlY3Rpb24pIGlmIHlvdSBjYW4uIEJ1dCBz aW5jZSBpdCBpcyBpbmNyZWFzaW5nbHkgY29tbW9uCisgICBmb3IgVW5peCBzeXN0ZW1zIChub3Qg dG8gbWVudGlvbiBWTVMgYW5kIG90aGVyIE9TJ3MpIHRvIGJlIGRlbGl2ZXJlZAorICAgd2l0aG91 dCBDIGNvbXBpbGVycywgaXQgaXMgc29tZXRpbWVzIG5vdCBwb3NzaWJsZS4gSW4gc3VjaCBjYXNl cywgdHJ5CisgICB0aGUgbW9zdCBhcHByb3ByaWF0ZSBwcmVidWlsdCBiaW5hcnkgb3IgYmluYXJp ZXMsIGFuZCBpZiBub25lIG9mIHRoZW0KKyAgIHdvcmssIFs4MF1jb250YWN0IHVzIGFuZCB3ZSds bCBzZWUgd2hhdCB3ZSBjYW4gZG8gdG8gaGVscC4KKworNC4gQlVJTERJTkcgRlJPTSBTT1VSQ0Ug Q09ERQorCisgICBbIFs4MV1Ub3AgXSBbIFs4Ml1Db250ZW50cyBdIFsgWzgzXU5leHQgXSBbIFs4 NF1QcmV2aW91cyBdCisKKyAgIEFsc28gc2VlOiBbODVdU2VjdGlvbiA4IGFuZCBbODZdU2VjdGlv biA5LgorCisgICBDLUtlcm1pdCBpcyBkZXNpZ25lZCB0byBiZSBidWlsdCBhbmQgdXNlZCBvbiBh cyBtYW55IHBsYXRmb3JtcyBhcworICAgcG9zc2libGU6IFVuaXggYW5kIG5vbi1Vbml4LCBvbGQg YW5kIG5ldyAoYW5kIGFuY2llbnQpLCBBTlNJIEMgYW5kIEsmUi4KKyAgIFRoZSBVbml4IHZlcnNp b24gZG9lcyBub3QgdXNlIG9yIGRlcGVuZCBvbiBhbnkgZXh0ZXJuYWwgdG9vbHMgZm9yCisgICBi dWlsZGluZyBleGNlcHQgdGhlICJtYWtlIiB1dGlsaXR5LCB0aGUgQyBjb21waWxlciwgdGhlIGxp bmtlciwgYW5kIHRoZQorICAgc2hlbGwuIEl0IGRvZXMgbm90IHVzZSBhbnkgZXh0ZXJuYWwgYXV0 b21hdGVkIGNvbmZpZ3VyYXRpb24gdG9vbHMgc3VjaAorICAgYXMgY29uZmlndXJlLCBhdXRvY29u ZiwgYXV0b21ha2UsIGxpYnRvb2wsIGV0Yy4gRXZlcnl0aGluZyBpbiBDLUtlcm1pdAorICAgaGFz IGJlZW4gYnVpbHQgYnkgaGFuZCBiYXNlZCBvbiBkaXJlY3QgZXhwZXJpZW5jZSBvciByZXBvcnRz IG9yCisgICBjb250cmlidXRpb25zIGZyb20gdXNlcnMgb2YgZWFjaCBwbGF0Zm9ybS4KKworICAg VGhlIFs4N11DLUtlcm1pdCBtYWtlZmlsZSBjb250YWlucyB0aGUgcnVsZXMgZm9yIGJ1aWxkaW5n IHRoZSBwcm9ncmFtCisgICBmb3IgZWFjaCBvZiB0aGUgaHVuZHJlZHMgb2YgZGlmZmVyZW50IGtp bmRzIG9mIFVuaXggc3lzdGVtcyB0aGF0CisgICBDLUtlcm1pdCBhdHRlbXB0cyB0byBzdXBwb3J0 LiBJdCBjb3ZlcnMgYWxsIFVuaXggdmFyaWF0aW9ucyBzaW5jZSBhYm91dAorICAgMTk4MCAtLSBw cmV0dHkgbXVjaCBldmVyeXRoaW5nIGFmdGVyIFVuaXggVjYuIFNlcGFyYXRlIG1ha2VmaWxlcyBh cmUKKyAgIHVzZWQgZm9yIFs4OF1QbGFuIDkgYW5kIFs4OV0yLnggQlNELgorCisgICBQcmVyZXF1 aXNpdGVzOgorCisgICAgICogVGhlIEMgY29tcGlsZXIsIGxpbmtlciwgYW5kIG1ha2UgcHJvZ3Jh bSBtdXN0IGJlIGluc3RhbGxlZC4KKyAgICAgKiBUaGUgQyBsaWJyYXJpZXMgYW5kIGhlYWRlciBm aWxlcyBtdXN0IGJlIGluc3RhbGxlZCAoKikuCisgICAgICogVGhlIEMtS2VybWl0IHNvdXJjZSBj b2RlIGFuZCBtYWtlZmlsZSBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAqIFRoZSBD LUtlcm1pdCB0ZXh0IGZpbGVzIChbOTBdU2VjdGlvbiA1KSBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0 b3J5LgorCisgICAgICogVGhpcyBpcyBiZWNvbWluZyBwcm9ibGVtYXRpYyBpbiB0aGlzIG5ldyBh Z2Ugb2YgInNlbGVjdGl2ZQorICAgICAgIGluc3RhbGxzIiBlLmcuIG9mIExpbnV4IHBhY2thZ2Vz LiBDLUtlcm1pdCBidWlsZHMgd2lsbCBvZnRlbiBmYWlsCisgICAgICAgYmVjYXVzZSByZXBseWlu ZyAibm8iIHRvIHNvbWUgb2JzY3VyZSBMaW51eCBpbnN0YWxsYXRpb24gb3B0aW9uCisgICAgICAg d2lsbCByZXN1bHQgaW4gbWlzc2luZyBsaWJyYXJpZXMgb3IgaGVhZGVyIGZpbGVzLiBEaXR0byBv bgorICAgICAgIHBsYXRmb3JtcyBsaWtlIEFJWCBhbmQgU29sYXJpcyB0aGF0IGRvbid0IGNvbWUg d2l0aCBDIGNvbXBpbGVycywKKyAgICAgICBhbmQgdGhlbiBsYXRlciBoYXZlIGdjYyBpbnN0YWxs ZWQsIGJ1dCBhcmUgc3RpbGwgbWlzc2luZyBjcnVjaWFsCisgICAgICAgbGlicmFyaWVzLCBsaWtl IGxpYm0gKG1hdGgpLgorCisgICBQbHVzOgorCisgICAgICogRm9yIFRDUC9JUCBuZXR3b3JraW5n IHN1cHBvcnQsIHRoZSBzb2NrZXRzIGxpYnJhcnkgYW5kIHJlbGF0ZWQKKyAgICAgICBoZWFkZXIg ZmlsZXMgbXVzdCBiZSBpbnN0YWxsZWQuCisgICAgICogVGhlIG1hdGggbGlicmFyeSBmb3IgZmxv YXRpbmctcG9pbnQgYXJpdGhtZXRpYyBzdXBwb3J0IChjYW4gYmUKKyAgICAgICBkZXNlbGVjdGVk IGJ5IGFkZGluZyAtRE5PRkxPQVQgdG8gQ0ZMQUdTIGFuZCByZW1vdmluZyAtbG0gZnJvbQorICAg ICAgIExJQlMpLgorICAgICAqIE1hbnkgYW5kIHZhcmllZCBzZWN1cml0eSBsaWJyYXJpZXMgZm9y IGJ1aWxkaW5nIGEgc2VjdXJlIHZlcnNpb24KKyAgICAgICAoS2VyYmVyb3MsIFNTTC9UTFMsIFNS UCwgWmxpYiwuLi4pIFRoZXNlIGFyZSByZXF1aXJlZCBvbmx5IGlmIHlvdQorICAgICAgIHNlbGVj dCBhIHNlY3VyZSB0YXJnZXQuCisgICAgICogRm9yIHRoZSBjdXJzZXMtYmFzZWQgZnVsbHNjcmVl biBmaWxlLXRyYW5zZmVyIGRpc3BsYXksIHRoZSBjdXJzZXMKKyAgICAgICBvciBuY3Vyc2VzIGhl YWRlciBmaWxlKHMpIGFuZCBsaWJyYXJ5LCBhbmQgcHJvYmFibHkgYWxzbyB0aGUKKyAgICAgICB0 ZXJtY2FwIGFuZC9vciB0ZXJtbGliIGxpYnJhcnkuIE5vdGUgdGhhdCB0aGUgbmFtZXMgYW5kIGxv Y2F0aW9ucworICAgICAgIG9mIHRoZXNlIGZpbGVzIGFuZCBsaWJyYXJpZXMgYXJlIGxpa2VseSB0 byBjaGFuZ2UgY2FwcmljaW91c2x5IHdpdGgKKyAgICAgICBldmVyeSBuZXcgcmVsZWFzZSBvZiB5 b3VyIFVuaXggcHJvZHVjdC4gSWYgeW91IGRpc2NvdmVyIHRoYXQgdGhlCisgICAgICAgQy1LZXJt aXQgYnVpbGQgcHJvY2VkdXJlIGZhaWxzIGJlY2F1c2UgeW91ciBjdXJzZXMgYW5kL29yIHRlcm14 eHgKKyAgICAgICBoZWFkZXJzIG9yIGxpYnJhcmllcyBhcmUgbm90IG5hbWVkIG9yIGxvY2F0ZWQg YXMgZXhwZWN0ZWQsIHBsZWFzZQorICAgICAgIFs5MV1sZXQgdXMga25vdy4gSW4gdGhlIG1lYW50 aW1lLCB3b3JrIGFyb3VuZCBieSBpbnN0YWxsaW5nCisgICAgICAgc3ltbGlua3MuCisgICAgICog SU1QT1JUQU5UOiBNb2Rlcm4gTGludXggZGlzdHJpYnV0aW9ucyBtaWdodCBnaXZlIHlvdSB0aGUg Y2hvaWNlCisgICAgICAgZHVyaW5nIGluc3RhbGxhdGlvbiBvZiB3aGV0aGVyIHRvIGluc3RhbGwg dGhlICJuY3Vyc2VzIGRldmVsb3BtZW50CisgICAgICAgcGFja2FnZSIgKHBlcmhhcHMgY2FsbGVk ICJuY3Vyc2VzLWRldmVsIikuIElmIHlvdSBkaWQgbm90IGluc3RhbGwKKyAgICAgICBpdCwgeW91 IHdvbid0IGJlIGFibGUgdG8gYnVpbGQgQy1LZXJtaXQgd2l0aCBjdXJzZXMgc3VwcG9ydAorICAg ICAgIGluY2x1ZGVkLiBJbiB0aGlzIGNhc2UsIGVpdGhlciBnbyBiYWNrIGFuZCBpbnN0YWxsIG5j dXJzZXMsIG9yIGVsc2UKKyAgICAgICBjaG9vc2UgKG9yIGNyZWF0ZSkgYSBub24tY3Vyc2VzIG1h a2VmaWxlIHRhcmdldCBmb3IgeW91ciBwbGF0Zm9ybS4KKyAgICAgICBUbyBpbnN0YWxsIHRoZSBu Y3Vyc2VzIGRldmVsb3BlcnMgdG9vbHMgaW4gUmVkIEhhdCBMaW51eCwgZG8KKyAgICAgICAiYXB0 LWdldCBpbnN0YWxsIG5jdXJzZXMtZGV2ZWxvcGVyIiBvciBpZiB5b3UgaGF2ZSB0aGUgQ0Q6CisK K21vdW50IHJlZGhhdCBjZHJvbQorZ290byBSZWRIYXQvUlBNUworcnBtIC1pdmggbmN1cnNlcy1k ZXZlbCoucnBtCitvciB0byBoYXZlIHRoZSBleGFjdCBuYW1lIGxzIG5jdXJzZSogYW5kIGxvYWQg YXMKK3JwbSAtaXZoIGZpbGVuYW1lCit0aGVuIGxlYXZlIHRoZSBjZHJvbSBhbmQgdW5tb3VudCBp dC4KKworICAgICAqIEluIEFJWCB5b3UgbWlnaHQgaGF2ZSB0byBnbyBiYWNrIGFuZCBpbnN0YWxs IGFueSBvciBhbGwgb2Y6CisKK2Jvcy5hZHQuYmFzZQorYm9zLmFkdC5pbmNsdWRlCitib3MuYWR0 LmxpYgorYm9zLmFkdC5saWJtCitib3MuYWR0LnV0aWxzCisKKyAgICAgICBmcm9tIHRoZSBmaXJz dCBpbnN0YWxsYXRpb24gQ0QuCisKKyAgIERlcGVuZGluZyBvbiB3aGVyZSB5b3UgZ290IGl0LCB0 aGUgbWFrZWZpbGUgbWlnaHQgbmVlZCB0byBiZSByZW5hbWVkCisgICBmcm9tIGNrdWtlci5tYWsg dG8gbWFrZWZpbGUuIERpcmVjdGlvbnM6CisKKyAgICBhLiBUeXBlICJtYWtlIHh4eCIgd2hlcmUg eHh4IGlzIHRoZSBuYW1lIG9mIHRoZSBtYWtlZmlsZSB0YXJnZXQgbW9zdAorICAgICAgIGFwcHJv cHJpYXRlIHRvIHlvdXIgcGxhdGZvcm0sIGUuZy4gIm1ha2UgbGludXgiLCAibWFrZSBhaXg0MyIs IGV0Yy4KKyAgICAgICBSZWFkIHRoZSBbOTJdY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgbWFr ZWZpbGUgZm9yIGEgY29tcGxldGUKKyAgICAgICBsaXN0IG9mIGF2YWlsYWJsZSB0YXJnZXRzIChp dCdzIGEgbG9uZyBsaXN0KS4KKyAgICBiLiBUZXN0IHRoZSByZXN1bHRpbmcgJ3dlcm1pdCcgZmls ZSAoc2VlIFs5M11TZWN0aW9uIDcgZm9yCisgICAgICAgc3VnZ2VzdGlvbnMpLiBJZiBpdCdzIE9L LCBwcm9jZWVkOyBvdGhlcndpc2UgWzk0XW5vdGlmeSB1cy4KKworICAgICBOT1RFOiBzdGVwcyAo YykgdGhyb3VnaCAoZSkgY2FuIGJlIGFjY29tcGxpc2hlZCB1c2luZyB0aGUKKyAgICAgWzk1XW1h a2VmaWxlICdpbnN0YWxsJyB0YXJnZXQgYXMgZGVzY3JpYmVkIGluIFs5Nl1TZWN0aW9uIDUuNC4K KyAgICBjLiBSZW5hbWUgdGhlICd3ZXJtaXQnIGZpbGUgdG8gJ2tlcm1pdCcsIGNvcHkgaXQgdG8g dGhlIGRlc2lyZWQgYmluYXJ5CisgICAgICAgZGlyZWN0b3J5IChzdWNoIGFzIC91c3IvbG9jYWwv YmluIG9yIC9vcHQvc29tZXRoaW5nKSwgYW5kIGlmIGl0IGlzCisgICAgICAgdG8gYmUgdXNlZCBm b3IgZGlhbGluZyBvdXQsIGdpdmUgaXQgdGhlIHNhbWUgb3duZXIsIGdyb3VwLCBhbmQKKyAgICAg ICBwZXJtaXNzaW9ucyBhcyB0aGUgJ2N1JyBwcm9ncmFtIChJTVBPUlRBTlQ6IHJlYWQgWzk3XVNl Y3Rpb25zIDEwCisgICAgICAgYW5kIFs5OF0xMSBmb3IgZGV0YWlscykuCisgICAgZC4gSW5zdGFs bCB0aGUgbWFuIHBhZ2UsIGNrdWtlci5uciwgd2l0aCB5b3VyIG90aGVyIG1hbiBwYWdlcy4KKyAg ICBlLiBJbnN0YWxsIHRoZSBhY2NvbXBhbnlpbmcgdGV4dCBmaWxlcyAoc2VlIFs5OV1TZWN0aW9u IDUpLgorICAgIGYuIElmIHlvdSB3YW50IEMtS2VybWl0IHRvIGFsc28gb2ZmZXIgYSBUZWxuZXQg Y29tbWFuZC1saW5lCisgICAgICAgcGVyc29uYWxpdHksIG1ha2UgYSBzeW1ib2xpYyBsaW5rIGFz IGZvbGxvd3M6CisKK2NkIGRpcmVjdG9yeS13aGVyZS1rZXJtaXQtYmluYXJ5LWlzCitsbiAtcyBr ZXJtaXQgdGVsbmV0CisKKyAgICAgICBJZiB5b3Ugd2FudCBDLUtlcm1pdCB0byBiZSB0aGUgZGVm YXVsdCBUZWxuZXQgY2xpZW50LCBtYWtlIHN1cmUgdGhlCisgICAgICAgZGlyZWN0b3J5IGluIHdo aWNoIHlvdSBjcmVhdGVkIHRoZSBzeW1saW5rIGlzIGluIHRoZSBQQVRIIGFoZWFkIG9mCisgICAg ICAgdGhlIHdoZXJlIHRoZSByZWd1bGFyIFRlbG5ldCBjbGllbnQgaXMuCisgICAgZy4gSWYgeW91 IHdhbnQgQy1LZXJtaXQgdG8gYWxzbyBvZmZlciBhbiBGVFAgY29tbWFuZC1saW5lIHBlcnNvbmFs aXR5LAorICAgICAgIG1ha2UgYSBzeW1saW5rIGNhbGxlZCAiZnRwIiBhcyBpbiAoZikuCisgICAg aC4gSWYgeW91IHdhbnQgQy1LZXJtaXQgdG8gYWxzbyBvZmZlciBhbiBGVFRQIGNvbW1hbmQtbGlu ZQorICAgICAgIHBlcnNvbmFsaXR5LCBtYWtlIGEgc3ltbGluayBjYWxsZWQgImh0dHAiIGFzIGlu IChmKS4KKyAgICBpLiBJZiB5b3Ugd2FudCB0byBvZmZlciBhbiBJbnRlcm5ldCBLZXJtaXQgU2Vy dmljZSwgZm9sbG93IHRoZQorICAgICAgIGRpcmVjdGlvbnMgaW4gdGhlIFsxMDBdSUtTRCBBZG1p bmlzdHJhdG9yJ3MgR3VpZGUuCisKKzQuMC4gU3BlY2lhbCBDb25zaWRlcmF0aW9ucyBmb3IgQy1L ZXJtaXQgOC4wLTkuMAorCisgICBbIFsxMDFdVG9wIF0gWyBbMTAyXUNvbnRlbnRzIF0gWyBbMTAz XU5leHQgXQorCisgICBBbHNvIHNlZTogWzEwNF1DLUtlcm1pdCBDb25maWd1cmF0aW9uIE9wdGlv bnMKKworICAgU0VDVElPTiBDT05URU5UUworCis0LjEuIFsxMDVdVGhlIFVuaXggTWFrZWZpbGUK KzQuMi4gWzEwNl1UaGUgQy1LZXJtaXQgSW5pdGlhbGl6YXRpb24gRmlsZQorNC4zLiBbMTA3XVRo ZSAyLnggQlNEIE1ha2VmaWxlCis0LjQuIFsxMDhdVGhlIFBsYW4gOSBNYWtlZmlsZQorNC41LiBb MTA5XU1ha2VmaWxlIEZhaWx1cmVzCisKKyAgIChBbHNvIHNlZSB0aGUgWzExMF1Db25maWd1cmF0 aW9ucyBPcHRpb25zIGRvY3VtZW50LCBbMTExXVNlY3Rpb24gOCkuCisKKyAgIExvdHMgb2YgbmV3 IGZlYXR1cmVzIGhhdmUgYmVlbiBhZGRlZCBpbiB2ZXJzaW9ucyA3LjAgYW5kIDguMCB0aGF0Cisg ICByZXF1aXJlIGFjY2VzcyB0byBuZXcgc3ltYm9scywgQVBJcywgbGlicmFyaWVzLCBldGMsIGFu ZCB0aGlzIHdpbGwgbm8KKyAgIGRvdWJ0IGNhdXNlIHByb2JsZW1zIGluIGNvbXBpbGluZywgbGlu a2luZywgb3IgZXhlY3V0aW9uIG9uIHBsYXRmb3JtcworICAgd2hlcmUgNi4wIGFuZCBlYXJsaWVy IGJ1aWx0IHdpdGhvdXQgaW5jaWRlbnQuIFRoaXMgc2VjdGlvbiBjb250YWlucworICAgd2hhdCB3 ZSBrbm93IGFzIG9mIHRoZSBkYXRlIG9mIHRoaXMgZmlsZS4KKworICAgVGhlIGZpcnN0IGNhdGVn b3J5IGNvbmNlcm5zIHRoZSBuZXcgS2VybWl0IFNlcnZpY2UgRGFlbW9uIChJS1NEOyBzZWUKKyAg IHRoZSBbMTEyXUlLU0QgQWRtaW5pc3RyYXRvcidzIEd1aWRlIGZvciBkZXRhaWxzKToKKworICAg VGhlIHd0bXAgRmlsZQorICAgICAgICAgIFdoZW4gQy1LZXJtaXQgaXMgc3RhcnRlZCBhcyBhbiBJ S1NEICh1bmRlciBpbmV0ZCksIGl0IG1ha2VzCisgICAgICAgICAgc3lzbG9nIGFuZCB3dG1wIGVu dHJpZXMsIGFuZCBhbHNvIGtlZXBzIGl0cyBvd24gZnRwZC1saWtlIGxvZy4KKyAgICAgICAgICBU aGUgY29kZSBhc3N1bWVzIHRoZSB3dG1wIGxvZyBpcyAvdmFyL2xvZy93dG1wIG9uIExpbnV4IGFu ZAorICAgICAgICAgIC91c3IvYWRtL3d0bXAgZWxzZXdoZXJlLiBObyBkb3VidCB0aGlzIGFzc3Vt cHRpb24gd2lsbCBuZWVkCisgICAgICAgICAgYWRqdXN0bWVudC4gVXNlIC1EV1RNUEZJTEU9cGF0 aCB0byBvdmVycmlkZSBhdCBjb21waWxlIHRpbWUKKyAgICAgICAgICAodGhlcmUgaXMgYWxzbyBh IHJ1bnRpbWUgb3ZlcnJpZGUpLiBTZWUgWzExM11pa3NkLmh0bWwgZm9yCisgICAgICAgICAgZGV0 YWlscy4KKworICAgVVRNUCwgdXRzbmFtZSgpLCBldGMKKyAgICAgICAgICBDLUtlcm1pdCA3LjAg Z2V0cyBhcyBtdWNoIGluZm8gYXMgaXQgY2FuIGFib3V0IGl0cyBqb2IgLS0gbWFpbmx5CisgICAg ICAgICAgZm9yIElLU0QgbG9nZ2luZyAtLSBmcm9tIHV0bXAuIEJ1dCBvZiBjb3Vyc2UgdXRtcCBm b3JtYXRzIGFuZAorICAgICAgICAgIGZpZWxkcyBkaWZmZXIsIGFuZCBmb3IgdGhhdCBtYXR0ZXIs IHRoZXJlIGNhbiBiZSB0d28gZGlmZmVyZW50CisgICAgICAgICAgaGVhZGVyIGZpbGVzLCA8dXRt cC5oPiBhbmQgPHV0bXB4Lmg+LiBMb29rIGZvciBIQVZFVVRNUFggYW5kCisgICAgICAgICAgSEFW RVVUSE9TVCBpbiBbMTE0XWNrdWZpby5jIGFuZCBsZXQgbWUga25vdyBvZiBhbnkgbmVlZGVkCisg ICAgICAgICAgYWRqdXN0bWVudHMuCisKKyAgIFBhc3N3b3JkIGxvb2t1cAorICAgICAgICAgIElL U0QgbmVlZHMgdG8gYXV0aGVudGljYXRlIGluY29taW5nIHVzZXJzIGFnYWluc3QgdGhlIHBhc3N3 b3JkCisgICAgICAgICAgbGlzdC4gSW4gc29tZSBjYXNlcywgdGhpcyByZXF1aXJlcyB0aGUgYWRk aXRpb24gb2YgLWxjcnlwdCAoZS5nLgorICAgICAgICAgIGluIFVuaXh3YXJlIDIueCkuIEluIG1v c3Qgb3RoZXJzLCB0aGUgY3J5cHQgZnVuY3Rpb25zIGFyZSBpbiB0aGUKKyAgICAgICAgICByZWd1 bGFyIEMgbGlicmFyeS4gSWYgeW91IGdldCAiY3J5cHQiIGFzIGFuIHVucmVzb2x2ZWQgc3ltYm9s IGF0CisgICAgICAgICAgbGluayB0aW1lLCBhZGQgLWxjcnlwdCB0byBMSUJTLiBJZiB5b3VyIHNp dGUgaGFzIGxvY2FsCisgICAgICAgICAgcmVwbGFjZW1lbnQgbGlicmFyaWVzIGZvciBhdXRoZW50 aWNhdGlvbiwgeW91IG1pZ2h0IG5lZWQgYQorICAgICAgICAgIHNwZWNpYWwgTElCUyBjbGF1c2Ug c3VjaCBhcyAiTElCUz0tTC91c3IvbG9jYWwvbGliIC1scHdlbnQiLgorCisgICAgICAgICAgVGhl c2UgZGF5cyBtb3N0IFVuaXggc3lzdGVtcyB0YWtlIGFkdmFudGFnZSBvZiBzaGFkb3cgcGFzc3dv cmQKKyAgICAgICAgICBmaWxlcyBvciBQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcyAo UEFNKS4gSWYgeW91ciBzeXN0ZW0KKyAgICAgICAgICB1c2VzIHNoYWRvdyBwYXNzd29yZHMgeW91 IG11c3QgYWRkIC1EQ0tfU0hBRE9XIHRvIHRoZSBDRkxBR1MKKyAgICAgICAgICBsaXN0LiBJZiB5 b3VyIHN5c3RlbSByZXF1aXJlcyBQQU0geW91IG11c3QgYWRkIC1EQ0tfUEFNIHRvIHRoZQorICAg ICAgICAgIENGTEFHUyBhbmQgLWxwYW0gLWxkbCB0byBMSUJTLgorCisgICBnZXR1c2Vyc2hlbGwo KQorICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBJS1NEIGF0IGxvZ2luIHRpbWUgdG8g c2VlIGlmIGEgdXNlciBoYXMKKyAgICAgICAgICBiZWVuICJ0dXJuZWQgb2ZmIi4gQnV0IG1hbnkg VW5peCBwbGF0Zm9ybXMgbGFjayB0aGlzIGZ1bmN0aW9uLgorICAgICAgICAgIEluIHRoYXQgY2Fz ZSwgeW91IHdpbGwgZ2V0IHVucmVzb2x2ZWQgc3ltYm9sIHJlcG9ydHMgYXQgbGluaworICAgICAg ICAgIHRpbWUgZm9yIF9nZXR1c2Vyc2hlbGwsIF9lbmR1c2Vyc2hlbGw7IHRvIHdvcmsgYXJvdW5k LCBhZGQKKyAgICAgICAgICAtRE5PR0VUVVNFUlNIRUxMLgorCisgICBpbml0Z3JvdXBzKCkKKyAg ICAgICAgICBUaGlzIGlzIGNhbGxlZCBieSBJS1NEIGFmdGVyIHN1Y2Nlc3NmdWwgYXV0aGVudGlj YXRpb24uIEJ1dCBzb21lCisgICAgICAgICAgcGxhdGZvcm1zIGRvIG5vdCBoYXZlIHRoaXMgZnVu Y3Rpb24sIHNvIG9idmlvdXNseSBpdCBjYW4ndCBiZQorICAgICAgICAgIGNhbGxlZCB0aGVyZSwg aW4gd2hpY2ggY2FzZSBhZGQgLUROT0lOSVRHUk9VUFMuCisKKyAgIHNldHJldWlkKCksIHNldHJl dWlkKCksIHNldHJlZ2lkKCkgbm90IGZvdW5kIG9yICJkZXByZWNhdGVkIgorICAgICAgICAgIEZp bmQgb3V0IHdoYXQgeW91ciBVbml4IHZhcmlldHkgd2FudHMgeW91IHRvIHVzZSBpbnN0ZWFkLCBh bmQKKyAgICAgICAgICBtYWtlIGFwcHJvcHJpYXRlIHN1YnN0aXR1dGlvbnMgaW4gcm91dGluZSB6 dnBhc3MoKSwgbW9kdWxlCisgICAgICAgICAgWzExNV1ja3VmaW8uYywgYW5kIFsxMTZdbGV0IHVz IGtub3cuCisKKyAgIHByaW50ZigpCisgICAgICAgICAgSUtTRCBpbnN0YWxscyBhIHByaW50Zigp IHN1YnN0aXR1dGUgdG8gYWxsb3cgcmVkaXJlY3Rpb24gb2YKKyAgICAgICAgICBwcmludGYtbGlr ZSBvdXRwdXQgdG8gdGhlIGNvbm5lY3Rpb24uIEhvd2V2ZXIsIHRoaXMgY2FuIGNvbmZsaWN0Cisg ICAgICAgICAgd2l0aCBzb21lIGN1cnNlcyBsaWJyYXJpZXMuIEluIHRoaXMgY2FzZSwgc2VwYXJh dGUgYmluYXJpZXMgbXVzdAorICAgICAgICAgIGJlIGJ1aWx0IGZvciBJS1NEIGFuZCBub24tSUtT RCB1c2UuCisKKyAgIElmIHlvdSBlbmNvdW50ZXIgZGlmZmljdWx0aWVzIHdpdGggYW55IG9mIHRo ZSBhYm92ZSwgYW5kIHlvdSBhcmUgbm90CisgICBpbnRlcmVzdGVkIGluIHJ1bm5pbmcgQy1LZXJt aXQgYXMgYW4gSUtTRCwgdGhlbiBzaW1wbHkgYWRkIE5PSUtTRCB0bworICAgQ0ZMQUdTIGFuZCBy ZWJ1aWxkLiBFeGFtcGxlOgorCittYWtlIHNjbzI4NgorKGdldCBsb3RzIG9mIGVycm9ycykKK21h a2UgY2xlYW4KK21ha2Ugc2NvMjg2ICJLRkxBR1M9LUROT0lLU0QiCisKKyAgIFNvbWUgbm9uLUlL U0QgdGhpbmdzIHRvIHdhdGNoIG91dCBmb3I6CisKKyAgIFJldHVybiB0eXBlIG9mIG1haW4oKQor ICAgICAgICAgIFRoZSBtYWluKCkgcm91dGluZSBpcyBpbiBbMTE3XWNrY21haS5jLiBJZiB5b3Ug Z2V0IGNvbXBsYWludHMKKyAgICAgICAgICBhYm91dCAibWFpbjogcmV0dXJuIHR5cGUgaXMgbm90 IGJsYWgiLCBkZWZpbmUgTUFJTlRZUEUgb24gdGhlIENDCisgICAgICAgICAgY29tbWFuZCBsaW5l LCBlLmcuOgorCittYWtlIHh4eCAiS0ZMQUdTPS1ETUFJTlRZUEU9YmxhaAorCisgICAgICAgICAg KHdoZXJlIGJsYWggaXMgaW50LCBsb25nLCBvciB3aGF0ZXZlcikuIElmIHRoZSBjb21wbGFpbnQg aXMKKyAgICAgICAgICAiQXR0ZW1wdCB0byByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgZnVuY3Rpb24g b2YgdHlwZSB2b2lkIiB0aGVuCisgICAgICAgICAgYWRkIC1ETUFJTklTVk9JRDoKKworbWFrZSB4 eHggIktGTEFHUz0tRE1BSU5JU1ZPSUQ9YmxhaAorCisgICBETlMgU2VydmljZSBSZWNvcmRzCisg ICAgICAgICAgVGhpcyBmZWF0dXJlIGFsbG93cyBhIHJlbW90ZSBob3N0IHRvIHJlZGlyZWN0IEMt S2VybWl0IHRvIHRoZQorICAgICAgICAgIGFwcHJvcHJpYXRlIHNvY2tldCBmb3IgdGhlIHJlcXVl c3RlZCBzZXJ2aWNlOyBlLmcuIGlmIEMtS2VybWl0CisgICAgICAgICAgcmVxdWVzdHMgc2Vydmlj ZSAidGVsbmV0IiBhbmQgdGhlIGhvc3Qgb2ZmZXJzIFRlbG5ldCBzZXJ2aWNlIG9uCisgICAgICAg ICAgcG9ydCA5OTkgcmF0aGVyIHRoYW4gdGhlIGN1c3RvbWFyeSBwb3J0IDIzLiBJZiB5b3UgZ2V0 CisgICAgICAgICAgY29tcGlsZS10aW1lIGNvbXBsYWludHMgYWJvdXQgbm90IGJlaW5nIGFibGUg dG8gZmluZCA8cmVzb2x2Lmg+LAorICAgICAgICAgIDxuZXRkYi5oPiwgb3IgPGFycGEvbmFtZXNl ci5oPiwgYWRkIC1ETk9fRE5TX1NSViB0byBDRkxBR1MuIElmCisgICAgICAgICAgeW91IGdldCBs aW5rLXRpbWUgY29tcGxhaW50cyBhYm91dCB1bnJlc29sdmVkIHN5bWJvbHMgcmVzX3NlYXJjaAor ICAgICAgICAgIG9yIGRuX2V4cGFuZCwgdHJ5IGFkZGluZyAtbHJlc29sdmUgdG8gTElCUy4KKwor ICAgXHYoaXBhZGRyZXNzKQorICAgICAgICAgIElmICJlY2hvIFx2KGlwYWRkcmVzcykiIHNob3dz IGFuIGVtcHR5IHN0cmluZyByYXRoZXIgdGhhbiB5b3VyCisgICAgICAgICAgbG9jYWwgSVAgYWRk cmVzcywgYWRkIC1EQ0tHSE5MSE9TVCB0byBDRkxBR1MgYW5kIHJlYnVpbGQuCisKKyAgIDxzeXMv d2FpdC5oPgorICAgICAgICAgIElmIHRoaXMgZmlsZSBjYW4ndCBiZSBmb3VuZCBhdCBjb21waWxl IHRpbWUsIGFkZCAtRE5PUkVESVJFQ1QgdG8KKyAgICAgICAgICBDRkxBR1MuIFRoaXMgZGlzYWJs ZXMgdGhlIFJFRElSRUNUIGFuZCBQSVBFIGNvbW1hbmRzIGFuZAorICAgICAgICAgIGFueXRoaW5n IGVsc2UgdGhhdCBuZWVkcyB0aGUgd2FpdCgpIHN5c3RlbSBzZXJ2aWNlLgorCisgICBzeXNsb2co KQorICAgICAgICAgIEMtS2VybWl0IGNhbiBub3cgd3JpdGUgc3lzbG9nIHJlY29yZHMuIFNvbWUg b2xkZXIgcGxhdGZvcm1zCisgICAgICAgICAgbWlnaHQgbm90IGhhdmUgdGhlIHN5c2xvZyBmYWNp bGl0eS4gSW4gdGhhdCBjYXNlLCBhZGQKKyAgICAgICAgICAtRE5PU1lTTE9HLiBPdGhlcnMgbWln aHQgaGF2ZSBpdCwgYnV0IHJlcXVpcmUgYWRkaXRpb24gb2YKKyAgICAgICAgICAtbHNvY2tldCB0 byBMSUJTIChTQ08gT1NSNSBpcyBhbiBleGFtcGxlKS4gU2VlIFsxMThdU2VjdGlvbiAxNS4KKwor ICAgcHV0ZW52KCkKKyAgICAgICAgICBJZiAiX3B1dGVudiIgY29tZXMgdXAgYXMgYW4gdW5kZWZp bmVkIHN5bWJvbCwgYWRkIC1ETk9QVVRFTlYgdG8KKyAgICAgICAgICBDRkxBR1MgYW5kIHJlYnVp bGQuCisKKyAgICJQYXNzaW5nIGFyZzEgb2YgJ3RpbWUnIGZyb20gaW5jb21wYXRpYmxlIHBvaW50 ZXIiCisgICAgICAgICAgVGhpcyBpcyBhIG1lc3MuIFNlZSB0aGUgbWFzcyBvZiAjaWZkZWZzIGlu IHRoZSBhcHByb3ByaWF0ZQorICAgICAgICAgIG1vZHVsZSwgWzExOV1ja3V0aW8uYyBvciBbMTIw XWNrdWZpby5jLgorCisgICBnZXR0aW1lb2ZkYXkoKQorICAgICAgICAgIFdyb25nIG51bWJlciBv ZiBhcmd1bWVudHMuIE9uIG1vc3QgcGxhdGZvcm1zLCBnZXR0aW1lb2ZkYXkoKQorICAgICAgICAg IHRha2VzIHR3byBhcmd1bWVudHMsIGJ1dCBvbiBhIGhhbmRmdWwgb2Ygb3RoZXJzIChlLmcuIE1v dG9yb2xhCisgICAgICAgICAgU3lzdGVtIFYvODggVjQsIFNOSSBSZWxpYW50IFVOSVggNS40Mywg ZXRjKSBpdCB0YWtlcyBvbmUuIElmCisgICAgICAgICAgeW91ciB2ZXJzaW9uIG9mIGdldHRpbWVv ZmRheSgpIGlzIGJlaW5nIGNhbGxlZCB3aXRoIHR3byBhcmdzIGJ1dAorICAgICAgICAgIHdhbnRz IG9uZSwgYWRkIC1ER1RPRE9ORUFSRy4KKworICAgIkFzc2lnbm1lbnQgbWFrZXMgcG9pbnRlciBm cm9tIGludGVnZXIgd2l0aG91dCBhIGNhc3QiCisgICAgICAgICAgVGhpcyB3YXJuaW5nIG1pZ2h0 IGFwcGVhciBpbiBbMTIxXWNrdXRpby5jIG9yIFsxMjJdY2t1ZmlvLmMuIChvcgorICAgICAgICAg IGVsc2V3aGVyZSksIGFuZCB1c3VhbGx5IGNhbiBiZSB0cmFjZWQgdG8gdGhlIHVzZSBvZiBhIHN5 c3RlbSBvcgorICAgICAgICAgIGxpYnJhcnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcG9pbnRl ciBidXQgdGhhdCBpcyBub3QgZGVjbGFyZWQKKyAgICAgICAgICBpbiB0aGUgc3lzdGVtIGhlYWRl ciBmaWxlcyBldmVuIHRob3VnaCBpdCBzaG91bGQgYmUuIFNldmVyYWwKKyAgICAgICAgICBmdW5j dGlvbnMgYXJlIGNvbW1vbmx5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVycm9yOgorCisgICAgICAg ICAgKyBnZXRjd2QoKTogQWRkIC1ERENMR0VUQ1dEIHRvIENGTEFHUyBhbmQgcmVidWlsZC4KKyAg ICAgICAgICArIHBvcGVuKCkgOiBBZGQgLUREQ0xQT1BFTiB0byBDRkxBR1MgYW5kIHJlYnVpbGQu CisgICAgICAgICAgKyBmZG9wZW4oKTogQWRkIC1ERENMRkRPUEVOIHRvIENGTEFHUyBhbmQgcmVi dWlsZC4KKworICAgIk9wZXJhbmRzIG9mID0gaGF2ZSBpbmNvbXBhdGlibGUgdHlwZXMiCisgICAi SW5jb21wYXRpYmxlIHR5cGVzIGluIGFzc2lnbm1lbnQiCisgICAgICAgICAgSWYgdGhpcyBjb21l cyBmcm9tIFsxMjNdY2tjbmV0LmMgYW5kIGNvbWVzIGZyb20gYSBzdGF0ZW1lbnQKKyAgICAgICAg ICBpbnZvbHZpbmcgaW5ldF9hZGRyKCksIHRyeSBhZGRpbmcgLURJTkFERFJYIHRvIENGTEFHUy4g SWYgdGhhdAorICAgICAgICAgIGRvZXNuJ3QgaGVscCwgdGhlbiB0cnkgYWRkaW5nIC1ETk9NSEhP U1QuCisKKyAgIENvbXBsYWludHMgYWJvdXQgYXJncyB0byBnZXQvc2V0c29ja29wdCgpLCBnZXRw ZWVybmFtZSgpLCBnZXRzb2NrbmFtZSgpCisgICAgICAgICAgVGhlc2UgYXJlIGFsbCBpbiBbMTI0 XWNrY25ldC5jLiBEaWZmZXJlbnQgcGxhdGZvcm1zIGFuZCBPUydzIGFuZAorICAgICAgICAgIHZl cnNpb25zIG9mIHRoZSBzYW1lIE9TIGNoYW5nZSB0aGlzIGFsbCB0aGUgdGltZTogaW50LCBzaXpl X3QsCisgICAgICAgICAgdW5zaWduZWQgbG9uZywgZXRjLiBBbGwgdGhlIGFmZmVjdGVkIHZhcmlh YmxlcyBhcmUgZGVjbGFyZWQKKyAgICAgICAgICBhY2NvcmRpbmcgdG8gI2lmZGVmcyB3aXRoaW4g Y2tjbmV0LmMsIHNvIGZpbmQgdGhlIGRlY2xhcmF0aW9ucworICAgICAgICAgIGFuZCBhZGp1c3Qg dGhlICNpZmRlZnMgYWNjb3JkaW5nbHkuCisKKyAgIHNpemVfdAorICAgICAgICAgIEluIGNhc2Ug b2YgY29tcGxhaW50cyBhYm91dCAidW5rbm93biB0eXBlIHNpemVfdCIsIGFkZAorICAgICAgICAg IC1EU0laRV9UPWludCAob3Igb3RoZXIgYXBwcm9wcmlhdGUgdHlwZSkgdG8gQ0ZMQUdTLgorCisg ICAndHonIHVuZGVmaW5lZAorICAgVXNlIG9mIHVuZGVmaW5lZCBlbnVtL3N0cnVjdC91bmlvbiAn dGltZXpvbmUnCisgICAgICAgICAgTGVmdCBvZiAndHZfc2VjJyBzcGVjaWZpZXMgdW5kZWZpbmVk IHN0cnVjdC91bmlvbiAndGltZXZhbCcgQW5kCisgICAgICAgICAgc2ltaWxhciBjb21wbGFpbnRz IGluIFsxMjVdY2t1dGlvLmM6IEFkZCAtRE5PR0ZUSU1FUiBhbmQvb3IKKyAgICAgICAgICAtRE5P VElNRVZBTC4KKworICAgU3ltbGlua3MKKyAgICAgICAgICBUaGUgbmV3IGJ1aWx0LWluIERJUkVD VE9SWSBjb21tYW5kIHNob3VsZCBzaG93IHN5bWxpbmtzIGxpa2UgImxzCisgICAgICAgICAgLWwi IGRvZXMuIElmIGl0IGRvZXMgbm90LCBjaGVjayB0byBzZWUgaWYgeW91ciBwbGF0Zm9ybSBoYXMg dGhlCisgICAgICAgICAgbHN0YXQoKSBhbmQgcmVhZGxpbmsoKSBmdW5jdGlvbnMuIElmIHNvLCBh ZGQgLURVU0VfTFNUQVQgYW5kCisgICAgICAgICAgLURDS1NZTUxJTksgdG8gQ0ZMQUdTIGFuZCBy ZWJ1aWxkLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgbHN0YXQoKQorICAgICAgICAgIGlzIHVucmVz b2x2ZWQgYXQgbGluayB0aW1lLCBhZGQgLUROT0xTVEFUIHRvIENGTEFHUy4gSWYKKyAgICAgICAg ICByZWFkbGluaygpIGlzIGFsc28gdW5yZXNvbHZlZCwgYWRkIC1ETk9TWU1MSU5LLgorCisgICBy ZWFscGF0aCgpCisgICAgICAgICAgTGluay10aW1lIGNvbXBsYWlucyBhYm91dCByZWFscGF0aCgp IC0tIGZpbmQgdGhlIGxpYnJhcnkgaW4KKyAgICAgICAgICB3aGljaCBpdCByZXNpZGVzIGFuZCBh ZGQgaXQgdG8gTElCUyAoZXhhbXBsZSBmb3IgVW5peHdhcmUgNy4xOgorICAgICAgICAgICItbGN1 ZGs3MCIpIG9yIGFkZCAtRE5PUkVBTFBBVEggdG8gQ0ZMQUdTIGFuZCByZWJ1aWxkLiBJZiBidWls dAorICAgICAgICAgIHdpdGggcmVhbHBhdGgoKSBidXQgZGVidWcgbG9nIGZpbGUgaXMgdHJ1bmNh dGVkIG9yIG1hbmdsZWQsCisgICAgICAgICAgZGl0dG8gKHNvbWUgcmVhbHBhdGgoKSBpbXBsZW1l bnRhdGlvbnMgYmVoYXZlIGRpZmZlcmVudGx5IGZyb20KKyAgICAgICAgICBvdGhlcnMpLiBJZiBi dWlsdCB3aXRoIHJlYWxwYXRoKCkgYW5kIHNlZW1pbmdseSByYW5kb20gY29yZQorICAgICAgICAg IGR1bXBzIG9jY3VyIGR1cmluZyBmaWxlIHBhdGggcmVzb2x1dGlvbiwgZGl0dG8uCisKKyAgIEZh aWx1cmUgdG8gbG9jYXRlIGhlYWRlciBmaWxlIDx0ZXJtLmg+CisgICAgICAgICAgVXN1YWxseSBo YXBwZW5zIG9uIExpbnV4IHN5c3RlbXMgdGhhdCBoYXZlIHRoZSBDIGNvbXBpbGVyCisgICAgICAg ICAgaW5zdGFsbGVkLCBidXQgbm90IHRoZSBuY3Vyc2VzIHBhY2thZ2UgKHNlZSBjb21tZW50cyBh Ym91dAorICAgICAgICAgIHNlbGVjdGl2ZSBpbnN0YWxscyBhYm92ZSkuIEdvIGJhY2sgYW5kIGlu c3RhbGwgbmN1cnNlcywgb3IgdXNlCisgICAgICAgICAgIm1ha2UgbGludXhuYyIgKExpbnV4IE5v IEN1cnNlcykuCisKKyAgICJDYW4ndCBmaW5kIHNoYXJlZCBsaWJyYXJ5IGxpYmMuc28uMi4xIgor ICAgIkNhbid0IGZpbmQgc2hhcmVkIGxpYnJhcnkgbGlibmN1cnNlcy5zby4zLjAiLCBldGMuLi4K KyAgICAgICAgICBZb3UgYXJlIHRyeWluZyB0byBydW4gYSBiaW5hcnkgdGhhdCB3YXMgYnVpbHQg b24gYSBjb21wdXRlciB0aGF0CisgICAgICAgICAgaGFzIGRpZmZlcmVudCBsaWJyYXJ5IHZlcnNp b25zIHRoYW4geW91ciBjb21wdXRlciwgYW5kIHlvdXIKKyAgICAgICAgICBjb21wdXRlcidzIGxv YWRlciBpcyBwaWNreSBhYm91dCBsaWJyYXJ5IHZlcnNpb24gbnVtYmVycy4KKyAgICAgICAgICBS ZWJ1aWxkIGZyb20gc291cmNlIG9uIHlvdXIgY29tcHV0ZXIuCisKKyAgIFRpbWUgKHN0cnVjdCB0 bSkgcmVsYXRlZCBkaWZmaWN1bHRpZXM6CisgICAgICAgICAgRXJyb3JzIGxpa2UgdGhlIGZvbGxv d2luZzoKKworImNrdXRpby5jIiwgbGluZSAxMTk5NDogaW5jb21wbGV0ZSBzdHJ1Y3QvdW5pb24v ZW51bSB0bTogX3RtCisiY2t1dGlvLmMiLCBsaW5lIDExOTk1OiBlcnJvcjogY2Fubm90IGRlcmVm ZXJlbmNlIG5vbi1wb2ludGVyIHR5cGUKKyJja3V0aW8uYyIsIGxpbmUgMTE5OTU6IGVycm9yOiBh c3NpZ25tZW50IHR5cGUgbWlzbWF0Y2gKKyJja3V0aW8uYyIsIGxpbmUgMTE5OTc6IHdhcm5pbmc6 IHVzaW5nIG91dCBvZiBzY29wZSBkZWNsYXJhdGlvbjogbG9jYWx0aW1lCisiY2t1dGlvLmMiLCBs aW5lIDExOTk3OiBlcnJvcjogdW5rbm93biBvcGVyYW5kIHNpemU6IG9wICI9IgorImNrdXRpby5j IiwgbGluZSAxMTk5NzogZXJyb3I6IGFzc2lnbm1lbnQgdHlwZSBtaXNtYXRjaAorImNrdXRpby5j IiwgbGluZSAxMTk5ODogZXJyb3I6IHVuZGVmaW5lZCBzdHJ1Y3QvdW5pb24gbWVtYmVyOiB0bV95 ZWFyCisiY2t1dGlvLmMiLCBsaW5lIDEyMDAwOiBlcnJvcjogdW5kZWZpbmVkIHN0cnVjdC91bmlv biBtZW1iZXI6IHRtX21vbgorImNrdXRpby5jIiwgbGluZSAxMjAwMTogZXJyb3I6IHVuZGVmaW5l ZCBzdHJ1Y3QvdW5pb24gbWVtYmVyOiB0bV9tZGF5CisiY2t1dGlvLmMiLCBsaW5lIDEyMDAyOiBl cnJvcjogdW5kZWZpbmVkIHN0cnVjdC91bmlvbiBtZW1iZXI6IHRtX2hvdXIKKyJja3V0aW8uYyIs IGxpbmUgMTIwMDM6IGVycm9yOiB1bmRlZmluZWQgc3RydWN0L3VuaW9uIG1lbWJlcjogdG1fbWlu CisiY2t1dGlvLmMiLCBsaW5lIDEyMDA0OiBlcnJvcjogdW5kZWZpbmVkIHN0cnVjdC91bmlvbiBt ZW1iZXI6IHRtX3NlYworCisgICAgICAgICAgYXJlIGR1ZSB0byBmYWlsdXJlIHRvIGluY2x1ZGUg dGhlIGFwcHJvcHJpYXRlIHRpbWUuaCBoZWFkZXIKKyAgICAgICAgICBmaWxlcy4gVW5peCBwbGF0 Zm9ybXMgZ2VuZXJhbGx5IGhhdmUgb25lIG9yIG1vcmUgb2YgdGhlCisgICAgICAgICAgZm9sbG93 aW5nOiA8dGltZS5oPiwgPHN5cy90aW1lLmg+LCBhbmQgPHN5cy90aW1lYi5oPi4gQW55CisgICAg ICAgICAgY29tYmluYXRpb24gb2YgdGhlc2UgbWlnaHQgYmUgcmVxdWlyZWQuIERlZmF1bHRzIGFy ZSBzZXQgdXAgZm9yCisgICAgICAgICAgZWFjaCBtYWtlZmlsZSB0YXJnZXQuIFRoZSBkZWZhdWx0 cyBjYW4gYmUgY29ycmVjdGVkIG9uIHRoZSBDQworICAgICAgICAgIGNvbW1hbmQgbGluZSBieSBh ZGRpbmcgdGhlIGFwcHJvcHJpYXRlIGRlZmluaXRpb24gZnJvbSB0aGUKKyAgICAgICAgICBmb2xs b3dpbmcgbGlzdCB0byBDRkxBR1M6CisKKy1EVElNRUggICAgICAgICBJbmNsdWRlIDx0aW1lLmg+ CistRE5PVElNRUggICAgICAgRG9uJ3QgaW5jbHVkZSA8dGltZS5oPgorLURTWVNUSU1FSCAgICAg IEluY2x1ZGUgPHN5cy90aW1lLmg+CistRE5PU1lTVElNRUggICAgRG9uJ3QgaW5jbHVkZSA8c3lz L3RpbWUuaD4KKy1EU1lTVElNRUJIICAgICBJbmNsdWRlIDxzeXMvdGltZWIuaD4KKy1ETk9TWVNU SU1FQkggICBEb24ndCBpbmNsdWRlIDxzeXMvdGltZWIuaD4KKworICAgICAgICAgIE5vdGUgdGhh dCA8c3lzL3RpbWViLmg+IGlzIHJlbGF0aXZlbHkgc2NhcmNlIGluIHRoZSBTeXN0ZW0gViBhbmQK KyAgICAgICAgICBQT1NJWCBlbnZpcm9ubWVudHM7IHRoZSBvbmx5IHBsYXRmb3JtIG9mIHJlY2Vu dCB2aW50YWdlIHdoZXJlIGl0CisgICAgICAgICAgd2FzL2lzIHVzZWQgaXMgT1NGLzEgYW5kIGl0 cyBkZXJpdmF0aXZlcyAoRGlnaXRhbCBVbml4IGFuZCBUcnU2NAorICAgICAgICAgIFVuaXgpLgor CisgICBTdHJ1Y3QgdGltZXZhbCBhbmQvb3IgdGltZXpvbmUgbm90IGRlY2xhcmVkOgorICAgICAg ICAgIEluIHNvbWUgY2FzZXMsIG1lcmVseSBpbmNsdWRpbmcgdGhlIGFwcHJvcHJpYXRlIHRpbWUu aCBoZWFkZXIKKyAgICAgICAgICBmaWxlcyBpcyBzdGlsbCBub3QgZW5vdWdoLiBQT1NJWC4xIGRv ZXMgbm90IGRlZmluZSB0aGUgdGltZXZhbAorICAgICAgICAgIHN0cnVjdCwgYW5kIHNvIHRoZSBp dGVtcyB3ZSBuZWVkIGZyb20gdGhlIGhlYWRlciBhcmUgcHJvdGVjdGVkCisgICAgICAgICAgYWdh aW5zdCB1cyBieSAjaWZuZGVmIF9QT1NJWF9TT1VSQ0Ugb3Igc29tZXN1Y2guIEluIHRoaXMgY2Fz ZSwKKyAgICAgICAgICB3ZSBoYXZlIHRvIGRlY2xhcmUgdGhlIHRpbWV2YWwgKGFuZCB0aW1lem9u ZSkgc3RydWN0cyBvdXJzZWx2ZXMuCisgICAgICAgICAgVG8gZm9yY2UgdGhpcywgaW5jbHVkZSAt RERDTFRJTUVWQUwgaW4gQ0ZMQUdTLgorCisgICBXYXJuaW5ncyBhYm91dCBkbl9leHBhbmQoKSBB cmd1bWVudCAjNAorICAgICAgICAgIFdBUk5JTkc6IGFyZ3VtZW50IGlzIGluY29tcGF0aWJsZSB3 aXRoIHByb3RvdHlwLiBJdCdzIHRoZSBvbGQKKyAgICAgICAgICBjaGFyIHZlcnN1cyB1bnNpZ25l ZCBjaGFyIHN0dXBpZGl0eSBhZ2Fpbi4gVHJ5IHRvIGZpbmQgYQorICAgICAgICAgIGNvbXBpbGVy IHN3aXRjaCBsaWtlIEdDQydzICItZnVuc2lnbmVkLWNoYXIiLiBGYWlsaW5nIHRoYXQsIGFkZAor ICAgICAgICAgIC1EQ0tRVUVSWVRZUEU9eHh4IHRvIENGTEFHUywgd2hlcmUgeHh4IGlzIHdoYXRl dmVyICdtYW4KKyAgICAgICAgICBkbl9leHBhbmQnIHRlbGxzIHlvdSB0aGUgdHlwZSBvZiB0aGUg NHRoIGFyZ3VtZW50IHNob3VsZCBiZQorICAgICAgICAgIChwcmVzdW1hYmx5IGVpdGhlciBjaGFy IG9yIHVuc2lnbmVkIGNoYXI7IGluIHRoZSBsYXR0ZXIgY2FzZSB1c2UKKyAgICAgICAgICBDSEFS IHRvIGF2b2lkIGNvbmZ1c2lvbiBjYXVzZWQgYnkgbXVsdGlwbGUgd29yZHMuCisKKyAgIFN3aXRj aCBUYWJsZSBPdmVyZmxvdyAoaW4gWzEyNl1ja2N1bmkuYykKKyAgICAgICAgICBBZGQgLUROT1VO SUNPREUgdG8gQ0ZMQUdTLgorCisgICBDb21waWxlLXRpbWUgd2FybmluZ3MgYWJvdXQgY2tfb3V0 KCkgb3IgdGdldHN0cigpIG9yIHRwdXRzKCk6CisgICAgICAgICAgRWFzeSBzb2x1dGlvbjogQWRk IC1ETk9URVJNQ0FQIHRvIENGTEFHUy4gQnV0IHRoZW4geW91IGxvc2UgdGhlCisgICAgICAgICAg U0NSRUVOIGZ1bmN0aW9uLiBSZWFsIHNvbHV0aW9uOiBUcnkgYWxsIGRpZmZlcmVudCBjb21iaW5h dGlvbnMKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIENGTEFHUzoKKworLURUUFVUU0FSR1RZ UEU9Y2hhciAgICAtRFRQVVRTRk5UWVBFPWludAorLURUUFVUU0FSR1RZUEU9aW50ICAgICAtRFRQ VVRTRk5UWVBFPXZvaWQKKworICAgICAgICAgIFVudGlsIHRoZSB3YXJuaW5ncyBnbyBhd2F5LCBl eGNlcHQgbWF5YmUgImNrX291dGM6IHJldHVybiB3aXRoIGEKKyAgICAgICAgICB2YWx1ZSBpbiBh IGZ1bmN0aW9uIHJldHVybmluZyB2b2lkIiwgYW5kIGluIHRoYXQgY2FzZSBhbHNvIGFkZAorICAg ICAgICAgIC1EVFBVVFNJU1ZPSUQuCisKKyAgICJQYXNzaW5nIGFyZyAxIG9mIHRvIHRwdXRzKCkg bWFrZXMgcG9pbnRlciBmcm9tIGludGVnZXIgd2l0aG91dCBhCisgICAgICAgICAgY2FzdCI6Cisg ICAgICAgICAgQWRkIC1EVFBVVFNBUkcxQ09OU1QgdG8gQ0ZMQUdTLgorCisgICAiVW5kZWZpbmVk IHN5bWJvbDogZHVwMiIKKyAgICAgICAgICBBZGQgLUROT1pFWEVDIHRvIENGTEFHUy4KKworICAg ImhlYWRlciBmaWxlICd0ZXJtY2FwLmgnIG5vdCBmb3VuZCIKKyAgICAgICAgICBBZGQgLUROT0hU RVJNQ0FQIHRvIENGTEFHUy4KKworICAgT3RoZXIgZGlmZmljdWx0aWVzIGFyZSBnZW5lcmFsbHkg b2YgdGhlICJ3aGVyZSBpcyBjdXJzZXMuaCBhbmQgd2hhdCBpcworICAgaXQgY2FsbGVkIHRoaXMg d2Vlaz8iIHZhcmlldHkgKG1vc3QgZWFzaWx5IHNvbHZlZCBieSBtYWtpbmcgc3ltbGlua3MgaW4K KyAgIHRoZSBpbmNsdWRlIGFuZCBsaWIgZGlyZWN0b3JpZXMpLCBvciBvdmVyemVhbG91cyBjb21w bGFpbnRzIHJlZ2FyZGluZworICAgdHlwZSBtaXNtYXRjaGVzIGluIGZ1bmN0aW9uIGNhbGxzIGJl Y2F1c2Ugb2YgdGhlIHRvdGFsbHkgbmVlZGxlc3MgYW5kCisgICBzaWxseSBzaWduZWQgdmVyc3Vz IHVuc2lnbmVkIGNoYXIgY29uZmxpY3QgKCopLCBldGMuIEluIGFueSBjYXNlLAorICAgcGxlYXNl IHNlbmQgYW55IGNvbXBpbGF0aW9uIG9yIGxpbmtpbmcgd2FybmluZ3Mgb3IgZXJyb3JzIHRvIHRo ZQorICAgYXV0aG9yLCBwcmVmZXJhYmx5IGFsb25nIHdpdGggZml4ZXMuCisKKyAgICAgKiBDLUtl cm1pdCBkb2VzIG5vdCB1c2UgdGhlIHNpZ25lZCBwcm9wZXJ0eSBvZiBjaGFycyBhdCBhbGwgYW55 d2hlcmUsCisgICAgICAgZXZlci4gU28gaWYgYWxsIGNoYXJzIGFuZCBjaGFyIConcyBjYW4gYmUg bWFkZSB1bnNpZ25lZCBhdCBjb21waWxlCisgICAgICAgdGltZSwgYXMgdGhleSBjYW4gaW4gZ2Nj IHdpdGggIi1mdW5zaWduZWQtY2hhciIsIHRoZXkgc2hvdWxkIGJlLgorCisgICBJTVBPUlRBTlQ6 IElmIHlvdSBmaW5kIGFueSBvZiB0aGVzZSBoaW50cyBuZWNlc3NhcnkgZm9yIGEgcGFydGljdWxh cgorICAgbWFrZSB0YXJnZXQgKG9yIHlvdSBoaXQgdXBvbiBvdGhlcnMgbm90IGxpc3RlZCBoZXJl KSwgUExFQVNFIFNFTkQgQQorICAgUkVQT1JUIFRPOgorCitbMTI3XWtlcm1pdC1zdXBwb3J0QGNv bHVtYmlhLmVkdQorCis0LjEuIFRoZSBVbml4IE1ha2VmaWxlCisKKyAgIFsgWzEyOF1Ub3AgXSBb IFsxMjldQ29udGVudHMgXSBbIFsxMzBdU2VjdGlvbiBDb250ZW50cyBdIFsgWzEzMV1OZXh0IF0K KyAgIFsgWzEzMl1QcmV2aW91cyBdCisKKyAgIElmIHlvdXIgZGlzdHJpYnV0aW9uIGRvZXMgbm90 IGNvbnRhaW4gYSBmaWxlIHdpdGggdGhlIG5hbWUgIm1ha2VmaWxlIgorICAgb3IgIk1ha2VmaWxl IiwgdGhlbiByZW5hbWUgdGhlIGZpbGUgY2FsbGVkIGNrdWtlci5tYWsgdG8gbWFrZWZpbGU6CisK K212IGNrdWtlci5tYWsgbWFrZWZpbGUKKworICAgVGhlbiB0eXBlICJtYWtlIHh4eCIsIHdoZXJl IHh4eCBpcyB0aGUgcGxhdGZvcm0geW91IHdhbnQgdG8gYnVpbGQKKyAgIEMtS2VybWl0IGZvci4g VGhlc2UgYXJlIGxpc3RlZCBpbiB0aGUgWzEzM11jb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZQor ICAgbWFrZWZpbGUuIEZvciBleGFtcGxlLCB0byBidWlsZCBDLUtlcm1pdCBmb3IgTGludXgsIHR5 cGU6CisKK21ha2UgbGludXgKKworICAgSGVyZSBhcmUgc29tZSB0eXBpY2FsIGV4YW1wbGVzOgor CisgICAgIFRhcmdldCAgICBEZXNjcmlwdGlvbgorICAgICBsaW51eCAgICAgTGludXgsIGFueSB2 ZXJzaW9uIG9uIGFueSBoYXJkd2FyZSBwbGF0Zm9ybQorICAgICBvcGVuYnNkICAgT3BlbkJTRCwg YW55IHZlcnNpb24gb24gYW55IGhhcmR3YXJlIHBsYXRmb3JtCisgICAgIGFpeDQzICAgICBBSVgg NC4zCisgICAgIGFpeDQzZyAgICBBSVggNC4zLCBidWlsdCB3aXRoIGdjYworICAgICBzb2xhcmlz OSAgU29sYXJpcyA5CisgICAgIHNvbGFyaXM5ZyBTb2xhcmlzIDkgYnVpbHQgd2l0aCBnY2MKKyAg ICAgaHB1eDExMDAgIEhQLVVYIDExLXBvaW50LWFueXRoaW5nCisKKyAgIFRoZSBtYWtlZmlsZSBp cyBxdWl0ZSBsb25nLCBhbmQgYXQgbGVhc3QgdHdvIHZlcnNpb25zIG9mIFVuaXgsIFNDTworICAg WGVuaXgvMjg2IGFuZCAyLnggQlNELCBjYW5ub3QgY29wZSB3aXRoIGl0cyBsZW5ndGguIEFuIGF0 dGVtcHQgdG8gIm1ha2UKKyAgIHNjbzI4NiIgZ2l2ZXMgdGhlIG1lc3NhZ2UgIk1ha2U6IENhbm5v dCBhbGxvYyBtZW0gZm9yIGVudi4uIFN0b3AiLgorICAgU29sdXRpb246IGVkaXQgYXdheSBzb21l IG9yIGFsbCBvZiB0aGUgbm9ucmVsZXZhbnQgbWF0ZXJpYWwgZnJvbSB0aGUKKyAgIG1ha2VmaWxl LiAoQSBzZXBhcmF0ZSB2ZXJzaW9uIG9mIHRoZSBtYWtlZmlsZSBpcyBwcm92aWRlZCBmb3IgQlNE IDIueDoKKyAgIGNrdWJzMi5tYWsgYnV0IEMtS2VybWl0IDguMCBjYW4ndCBiZSBidWlsdCBmb3Ig QlNEIDIueCAtLSBpdCBoYXMgc2ltcGx5CisgICBncm93biB0b28gbGFyZ2UuKQorCisgICBTb21l IG1ha2UgcHJvZ3JhbXMgcmVwb3J0ZWRseSBjYW5ub3QgaGFuZGxlIGNvbnRpbnVlZCBsaW5lcyAo bGluZXMKKyAgIGVuZGluZyBpbiBiYWNrc2xhc2ggKFwpKS4gSWYgeW91IGhhdmUgYSBwcm9ibGVt IHdpdGggdGhlIG1ha2VmaWxlLCB0cnkKKyAgIGVkaXRpbmcgdGhlIG1ha2VmaWxlIHRvIGpvaW4g dGhlIGNvbnRpbnVlZCBsaW5lcyAocmVtb3ZlIHRoZQorICAgYmFja3NsYXNoZXMgYW5kIHRoZSBm b2xsb3dpbmcgbGluZWZlZWQpLgorCisgICBPdGhlciBtYWtlZmlsZSB0cm91YmxlcyBtYXkgb2Nj dXIgYmVjYXVzZSB0YWJzIGluIHRoZSBtYWtlZmlsZSBoYXZlCisgICBzb21laG93IGJlZW4gY29u dmVydGVkIHRvIHNwYWNlcy4gU3BhY2VzIGFuZCB0YWJzIGFyZSBkaXN0aW5jdCBpbiBVbml4Cisg ICBtYWtlZmlsZXMuCisKKyAgIFNpbWlsYXJseSwgY2FycmlhZ2UgcmV0dXJucyBtaWdodCBoYXZl IGJlZW4gYWRkZWQgdG8gdGhlIGVuZCBvZiBlYWNoCisgICBsaW5lLCB3aGljaCBhbHNvIHByb3Zl cyBjb25mdXNpbmcgdG8gbW9zdCBVbml4IHZlcnNpb25zIG9mIG1ha2UuCisKKyAgIENoZWNrIHRv IHNlZSBpZiB0aGVyZSBhcmUgY29tbWVudHMgYWJvdXQgeW91ciBwYXJ0aWN1bGFyIHZlcnNpb24g aW4gaXRzCisgICBtYWtlZmlsZSB0YXJnZXQgaXRzZWxmLiBJbiBhIHRleHQgZWRpdG9yIHN1Y2gg YXMgRU1BQ1Mgb3IgVkksIHNlYXJjaAorICAgZm9yIHRoZSBtYWtlIGVudHJ5IG5hbWUgZm9sbG93 ZWQgYnkgYSBjb2xvbiwgZS5nLiAibGludXg6IiAoaWYgeW91CisgICByZWFsbHkgYXJlIGJ1aWxk aW5nIEMtS2VybWl0IGZvciBMaW51eCwgZG8gdGhpcyBub3cpLgorCisgICBDaGVjayB0byBzZWUg aWYgdGhlcmUgYXJlIGNvbW1lbnRzIGFib3V0IHlvdXIgcGFydGljdWxhciB2ZXJzaW9uIGluIHRo ZQorICAgWzEzNF1ja3Vid3IudHh0IGZpbGUgKFsxMzVdQ0xJQ0sgSEVSRSBmb3IgdGhlIFdlYiB2 ZXJzaW9uKS4KKworICAgSWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIGJ1aWxkaW5nIFsxMzZdY2t3 YXJ0LmMsIG9yIHJ1bm5pbmcgdGhlCisgICByZXN1bHRpbmcgd2FydCBwcmVwcm9jZXNzb3IgcHJv Z3JhbSBvbiBbMTM3XWNrY3Byby53OgorCisgICAgMS4gSnVzdCAidG91Y2giIHRoZSBbMTM4XWNr Y3Byby5jIGZpbGUgdGhhdCBjb21lcyBpbiB0aGUgZGlzdHJpYnV0aW9uCisgICAgICAgYW5kIHRo ZW4gZ2l2ZSB0aGUgIm1ha2UiIGNvbW1hbmQgYWdhaW4sIG9yOgorICAgIDIuIENvbXBpbGUgY2t3 YXJ0LmMgImJ5IGhhbmQiOiBjYyAtbyB3YXJ0IGNrd2FydC5jLCBvcjoKKyAgICAzLiBUcnkgdmFy aW91cyBvdGhlciB0cmlja3MuIEUuZy4gb25lIExpbnV4IHVzZXIgcmVwb3J0ZWQgdGhhdCB0aGF0 CisgICAgICAgYWRkaW5nIHRoZSAic3RhdGljIiBzd2l0Y2ggdG8gdGhlIHJ1bGUgZm9yIGJ1aWxk aW5nIHdhcnQgZml4ZWQKKyAgICAgICBldmVyeXRoaW5nOgorCit3YXJ0OiBja3dhcnQuJChFWFQp CisgICAgICAgICQoQ0MpIC1zdGF0aWMgLW8gd2FydCBja3dhcnQuJChFWFQpICQoTElCUykKKwor ICAgSWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBhIGNvbXBpbGUtdGltZSBvcHRpb24gdG8gdHJl YXQgQUxMIGNoYXJzIChhbmQKKyAgIGNoYXIgKidzLCBldGMpIGFzIHVuc2lnbmVkLCBieSBhbGwg bWVhbnMgdXNlIGl0IC0tIGFuZCBzZW5kIG1lIGVtYWlsIHRvCisgICBsZXQgbWUga25vdyB3aGF0 IGl0IGlzIChJIGFscmVhZHkga25vdyBhYm91dCBnY2MgLWZ1bnNpZ25lZC1jaGFyKS4KKworICAg VG8gYWRkIGNvbXBpbGF0aW9uIG9wdGlvbnMgKHdoaWNoIGFyZSBleHBsYWluZWQgbGF0ZXIgaW4g dGhpcyBkb2N1bWVudCkKKyAgIHRvIHlvdXIgbWFrZWZpbGUgdGFyZ2V0IHdpdGhvdXQgZWRpdGlu ZyB0aGUgbWFrZWZpbGUsIGluY2x1ZGUKKyAgICJLRkxBR1M9Li4uIiBvbiB0aGUgbWFrZSBjb21t YW5kIGxpbmUsIGZvciBleGFtcGxlOgorCittYWtlIGxpbnV4IEtGTEFHUz0tRE5PREVCVUcKK21h a2UgYnNkICJLRkxBR1M9LURLQU5KSSAtRE5PREVCVUcgLUROT1RMT0cgLUREWU5BTUlDIC1VVENQ U09DS0VUIgorCisgICBNdWx0aXBsZSBvcHRpb25zIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHNwYWNl cy4gUXVvdGVzIGFyZSBuZWNlc3NhcnkgaWYKKyAgIHRoZSBLRkxBR1M9IGNsYXVzZSBpbmNsdWRl cyBzcGFjZXMuIFRoZSBLRkxBR1MgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YKKyAgIHRoZSBDRkxB R1MgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc2VsZWN0ZWQgbWFrZWZpbGUgdGFyZ2V0LiBGb3IK KyAgIGV4YW1wbGUsIHRoZSAiYnNkIiBlbnRyeSBpbmNsdWRlcyAtREJTRDQgLURUQ1BTT0NLRVQs IHNvIHRoZSBzZWNvbmQKKyAgIGV4YW1wbGUgYWJvdmUgY29tcGlsZXMgS2VybWl0IHdpdGggdGhl IGZvbGxvd2luZyBvcHRpb25zOgorCistREJTRDQgLURUQ1BTT0NLRVQgLURLQU5KSSAtRE5PREVC VUcgLUROT1RMT0cgLUREWU5BTUlDIC1VVENQU09DS0VUCisKKyAgIChOb3RpY2UgaG93ICItVVRD UFNPQ0tFVCIgaXMgdXNlZCB0byBuZWdhdGUgdGhlIGVmZmVjdCBvZiB0aGUKKyAgICItRFRDUFNP Q0tFVCIgb3B0aW9uIHRoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIG1ha2VmaWxlIHRhcmdldC4pCisK KyAgIFdBUk5JTkc6IEJlIGNhcmVmdWwgd2l0aCBLRkxBR1MuIElmIHlvdSBidWlsZCBDLUtlcm1p dCwgY2hhbmdlIHNvbWUKKyAgIGZpbGVzLCBhbmQgdGhlbiBydW4gbWFrZSBhZ2FpbiB1c2luZyB0 aGUgc2FtZSBtYWtlIGVudHJ5IGJ1dCBzcGVjaWZ5aW5nCisgICBkaWZmZXJlbnQgS0ZMQUdTIHRo YW4gbGFzdCB0aW1lLCBtYWtlIHdvbid0IGRldGVjdCBpdCBhbmQgeW91IGNvdWxkCisgICBlYXNp bHkgd2luZCB1cCB3aXRoIGluY29uc2lzdGVudCBvYmplY3QgbW9kdWxlcywgZS5nLiBzb21lIG9m IHRoZW0KKyAgIGJ1aWx0IHdpdGggYSBjZXJ0YWluIG9wdGlvbiwgb3RoZXJzIG5vdC4gV2hlbiBp biBkb3VidCwgIm1ha2UgY2xlYW4iCisgICBmaXJzdCB0byBtYWtlIHN1cmUgYWxsIHlvdXIgb2Jq ZWN0IGZpbGVzIGFyZSBjb25zaXN0ZW50LiBTaW1pbGFybHksIGlmCisgICB5b3UgY2hhbmdlIENG TEFHUywgTElCUywgb3IgYW55IG90aGVyIGl0ZW1zIGluIHRoZSBtYWtlZmlsZSwgb3IgeW91Cisg ICByZWJ1aWxkIHVzaW5nIGEgZGlmZmVyZW50IG1ha2VmaWxlIHRhcmdldCwgIm1ha2UgY2xlYW4i IGZpcnN0LgorCisgICBJZiB5b3UgY3JlYXRlIGEgbmV3IG1ha2VmaWxlIHRhcmdldCwgdXNlIHN0 YXRpYyBsaW5raW5nIGlmIHBvc3NpYmxlLgorICAgRXZlbiB0aG91Z2ggdGhpcyBtYWtlcyB5b3Vy IEMtS2VybWl0IGJpbmFyeSBiaWdnZXIsIHRoZSByZXN1bHRpbmcKKyAgIGJpbmFyeSB3aWxsIGJl IG1vcmUgcG9ydGFibGUuIER5bmFtaWNhbGx5IGxpbmtlZCBiaW5hcmllcyB0ZW5kIHRvIHJ1bgor ICAgb25seSBvbiB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBhbmQgdmVyc2lvbiB3aGVyZSB0aGV5 IHdlcmUgYnVpbHQ7IG9uCisgICBvdGhlcnMsIGludm9jYXRpb24gdGVuZHMgdG8gZmFpbCB3aXRo IGEgbWVzc2FnZSBsaWtlOgorCitDYW4ndCBmaW5kIHNoYXJlZCBsaWJyYXJ5ICJsaWJjLnNvLjIu MSIKKworNC4yLiBUaGUgQy1LZXJtaXQgSW5pdGlhbGl6YXRpb24gRmlsZQorCisgICBbIFsxMzld VG9wIF0gWyBbMTQwXUNvbnRlbnRzIF0gWyBbMTQxXVNlY3Rpb24gQ29udGVudHMgXSBbIFsxNDJd TmV4dCBdCisgICBbIFsxNDNdUHJldmlvdXMgXQorCisgICAoVGhpcyBzZWN0aW9uIGlzIG9ic29s ZXRlLikgUmVhZCBbMTQ0XVNlY3Rpb24gNSBhYm91dCB0aGUKKyAgIGluaXRpYWxpemF0aW9uIGZp bGUuCisKKzQuMy4gVGhlIDIueCBCU0QgTWFrZWZpbGUKKworICAgWyBbMTQ1XVRvcCBdIFsgWzE0 Nl1Db250ZW50cyBdIFsgWzE0N11TZWN0aW9uIENvbnRlbnRzIF0gWyBbMTQ4XU5leHQgXQorICAg WyBbMTQ5XVByZXZpb3VzIF0KKworICAgICBUaGlzIHNlY3Rpb24gaXMgb2Jzb2xldGUuIEMtS2Vy bWl0IDYuMCB3YXMgdGhlIGxhc3QgcmVsZWFzZSB0aGF0CisgICAgIGNvdWxkIGJlIGJ1aWx0IG9u IFBEUC0xMSBiYXNlZCBCU0QgdmVyc2lvbnMuCisKKzQuNC4gVGhlIFBsYW4gOSBNYWtlZmlsZQor CisgICBbIFsxNTBdVG9wIF0gWyBbMTUxXUNvbnRlbnRzIF0gWyBbMTUyXVNlY3Rpb24gQ29udGVu dHMgXSBbIFsxNTNdTmV4dCBdCisgICBbIFsxNTRdUHJldmlvdXMgXQorCisgICBVc2UgdGhlIHNl cGFyYXRlIG1ha2VmaWxlIFsxNTVdY2twa2VyLm1rLiBOT1RFOiBUaGUgUGxhbiA5IHZlcnNpb24g b2YKKyAgIEMtS2VybWl0IDguMCBoYXMgbm90IHlldCBiZWVuIGJ1aWx0LiBUaGVyZSBzaG91bGQg YmUgbm8gaW1wZWRpbWVudCB0bworICAgYnVpbGRpbmcgaXQuIEhvd2V2ZXIsIGV2ZW4gd2hlbiBi dWlsdCBzdWNjZXNzZnVsbHksIGNlcnRhaW4ga2V5CisgICBmZWF0dXJlcyBhcmUgbWlzc2luZywg bm90YWJseSBUQ1AvSVAgbmV0d29ya2luZy4KKworNC41LiBNYWtlZmlsZSBGYWlsdXJlcworCisg ICBbIFsxNTZdVG9wIF0gWyBbMTU3XUNvbnRlbnRzIF0gWyBbMTU4XVNlY3Rpb24gQ29udGVudHMg XSBbCisgICBbMTU5XVByZXZpb3VzIF0KKworICAgRmlyc3QsIGJlIHN1cmUgdGhlIHNvdXJjZSBm aWxlcyBhcmUgc3RvcmVkIG9uIHlvdXIgY3VycmVudCBkaXNrIGFuZAorICAgZGlyZWN0b3J5IHdp dGggdGhlIHJpZ2h0IG5hbWVzIChpbiBsb3dlcmNhc2UpLiBTZWNvbmQsIG1ha2Ugc3VyZSB0aGF0 CisgICB0aGUgbWFrZWZpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYW55IGxpbmVzIHdpdGgg bGVhZGluZyBzcGFjZXM6CisgICBpbmRlbnRlZCBsaW5lcyBtdXN0IGFsbCBzdGFydCB3aXRoIGhv cml6b250YWwgVEFCLCBhbmQgbm8gc3BhY2VzLgorCisgICBUaGVuIG1ha2Ugc3VyZSB0aGF0IHlv dXIgVW5peCBQQVRIIGlzIGRlZmluZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUKKyAgIGNvbXBp bGVyIGZvciB5b3VyIG1ha2VmaWxlIHRhcmdldC4gRm9yIGV4YW1wbGUsIG9uIFN1bk9TIHN5c3Rl bXMsICJtYWtlCisgICBzdW5vczQxIiBidWlsZHMgQy1LZXJtaXQgZm9yIHRoZSBCU0QgZW52aXJv bm1lbnQsIGFuZCBhc3N1bWVzIHRoYXQKKyAgIC91c3IvdWNiL2NjIHdpbGwgYmUgdXNlZCBmb3Ig Y29tcGlsYXRpb24gYW5kIGxpbmtpbmcuIElmIHlvdXIgUEFUSCBoYXMKKyAgIC91c3IvNWJpbiBh aGVhZCBvZiAvdXNyL3VjYiwgeW91IGNhbiBoYXZlIHByb2JsZW1zIGF0IGNvbXBpbGUgb3IgbGlu aworICAgdGltZSAoYSBjb21tb25seSByZXBvcnRlZCBzeW1wdG9tIGlzIHRoZSBpbmFiaWxpdHkg dG8gZmluZCAiZnRpbWUiCisgICBkdXJpbmcgbGlua2luZykuIEZpeCBzdWNoIHByb2JsZW1zIGJ5 IHJlZGVmaW5pbmcgeW91ciBVbml4IFBBVEgsIG9yIGJ5CisgICBzcGVjaWZ5aW5nIHRoZSBhcHBy b3ByaWF0ZSAiY2MiIGluIENDPSBhbmQgQ0MyPSBzdGF0ZW1lbnRzIGluIHlvdXIKKyAgIG1ha2Vm aWxlIHRhcmdldC4KKworICAgRHVyaW5nIGVkaXRzIDE2Ni0xNjcsIGNvbnNpZGVyYWJsZSBlZmZv cnQgd2VudCBpbnRvIG1ha2luZyBDLUtlcm1pdAorICAgY29tcGlsYWJsZSBieSBBTlNJIEMgY29t cGlsZXJzLiBUaGlzIGluY2x1ZGVzIHByb3RvdHlwaW5nIGFsbCBvZgorICAgQy1LZXJtaXQncyBm dW5jdGlvbnMsIGFuZCBpbmNsdWRpbmcgdGhlIEFOU0ktZGVmaW5lZCBzeXN0ZW0gaGVhZGVyCisg ICBmaWxlcyBmb3Igc3lzdGVtIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucywgYXMgZGVmaW5lZCBpbiBL JlIsIHNlY29uZAorICAgZWRpdGlvbjogPHN0cmluZy5oPiwgPHN0ZGxpYi5oPiwgPHVuaXN0ZC5o PiAoZXhjZXB0IGluIE5lWFRTVEVQIHRoaXMgaXMKKyAgIDxsaWJjLmg+KSwgYW5kIDxzeXMvc3Rk dHlwZXMuaD4uIElmIHlvdSBnZXQgd2FybmluZ3MgYWJvdXQgYW55IG9mIHRoZXNlCisgICBoZWFk ZXIgZmlsZXMgbm90IGJlaW5nIGZvdW5kLCBvciBhYm91dCBhcmd1bWVudCBtaXNtYXRjaGVzIGlu dm9sdmluZworICAgcGlkX3QsIHVpZF90LCBvciBnaWRfdCwgbG9vayBpbiBja2NkZWIuaCBhbmQg bWFrZSBhbWVuZG1lbnRzLiBDLUtlcm1pdAorICAgYXNzdW1lcyBpdCBpcyBiZWluZyBjb21waWxl ZCBieSBhbiBBTlNJLWNvbXBsaWFudCBDIGNvbXBpbGVyIGlmCisgICBfX1NURENfXyBpcyBkZWZp bmVkLCBub3JtYWxseSBkZWZpbmVkIGJ5IHRoZSBjb21waWxlciBpdHNlbGYuIFlvdSBjYW4KKyAg IGZvcmNlIEFOU0kgY29tcGlsYXRpb24gd2l0aG91dCBkZWZpbmluZyBfX1NURENfXyAod2hpY2gg c29tZSBjb21waWxlcnMKKyAgIHdvbid0IGxldCB5b3UgZGVmaW5lKSBieSBpbmNsdWRpbmcgLURD S19BTlNJQyBvbiB0aGUgY2MgY29tbWFuZCBsaW5lLgorCisgICBPbiB0aGUgb3RoZXIgaGFuZCwg aWYgeW91ciBjb21waWxlciBkZWZpbmVzIF9fU1REQ19fIGJ1dCBzdGlsbAorICAgY29tcGxhaW5z IGFib3V0IHRoZSBzeW50YXggb2YgS2VybWl0J3MgZnVuY3Rpb24gcHJvdG90eXBlcywgeW91IGNh bgorICAgZGlzYWJsZSB0aGUgQU5TSS1zdHlsZSBmdW5jdGlvbiBwcm90b3R5cGluZyBieSBpbmNs dWRpbmcgLUROT0FOU0kgb24KKyAgIHRoZSBjb21tYW5kIGxpbmUuCisKKyAgIEZvciBTQ08gT3Bl blNlcnZlciwgVU5JWCwgT0RULCBhbmQgWEVOSVggY29tcGlsYXRpb25zLCBiZSBzdXJlIHRvIHBp Y2sKKyAgIHRoZSBtb3N0IGFwcHJvcHJpYXRlIFsxNjBdbWFrZWZpbGUgdGFyZ2V0LCBhbmQgYmUg c3VyZSB5b3UgaGF2ZQorICAgaW5zdGFsbGVkIGFuIFNDTyBkZXZlbG9wbWVudCBzeXN0ZW0gdGhh dCBpcyBrZXllZCB0byB5b3VyIGV4YWN0IFNDTworICAgb3BlcmF0aW5nIHN5c3RlbSByZWxlYXNl LCBkb3duIHRvIHRoZSBtaW5vciB2ZXJzaW9uIChsaWtlIDIuMy4xKS4KKworICAgQWxzbyBub3Rl IHRoYXQgU0NPIGRpc3RyaWJ1dGVzIHNvbWUgb2YgaXRzIGxpYnJhcmllcyBpbiBlbmNyeXB0ZWQg Zm9ybSwKKyAgIGFuZCB0aGV5IG11c3QgYmUgZGVjcnlwdGVkIGJlZm9yZSBDLUtlcm1pdCBjYW4g YmUgbGlua2VkIHdpdGggdGhlbS4gSWYKKyAgIG5vdCwgeW91IG1pZ2h0IHNlZSBhIG1lc3NhZ2Ug bGlrZToKKworbGQ6IGZpbGUgL3Vzci9saWIvbGlic29ja2V0LmEgaXMgb2YgdW5rbm93biB0eXBl OiBtYWdpYyBudW1iZXIgPSA2MzY1CisKKyAgIFRvIGRlY3J5cHQsIHlvdSBtdXN0IHN1cHBseSBh IGtleSAocGFzc3dvcmQpIHRoYXQgY2FtZSB3aXRoIHlvdXIKKyAgIGxpY2Vuc2UuIENhbGwgU0NP IGZvciBmdXJ0aGVyIGluZm8uCisKKyAgIElmIHlvdXIgY29tcGlsZXIgdXNlcyBzb21ldGhpbmcg b3RoZXIgdGhhbiBpbnQgZm9yIHRoZSBwaWQgKHByb2Nlc3MgaWQpCisgICBkYXRhIHR5cGUsIHB1 dCAtRFBJRF9UPXBpZF90IG9yIHdoYXRldmVyIGluIHlvdXIgQ0ZMQUdTLgorCisgICBJZiB5b3Ug Z2V0IGNvbXBsYWludHMgYWJvdXQgdW5rbm93biBkYXRhIHR5cGVzIHVpZF90IGFuZCBnaWRfdCwg cHV0CisgICAtRFVJRF9UPXh4eCAtREdJRF9UPXl5eSBpbiB5b3VyIENGTEFHUywgd2hlcmUgeHh4 IGFuZCB5eXkgYXJlIHRoZQorICAgYXBwcm9wcmlhdGUgdHlwZXMuCisKKyAgIElmIHlvdXIgY29t cGlsYXRpb24gZmFpbHMgYmVjYXVzZSBvZiBjb25mbGljdGluZyBvciBkdXBsaWNhdGUKKyAgIGRl Y2xhcmF0aW9ucyBmb3Igc3lzX2Vycmxpc3QsIGFkZCAtRFVTRV9TVFJFUlJPUiBvciAtRE5EU1lT RVJSTElTVCB0bworICAgQ0ZMQUdTLgorCisgICBJZiB5b3VyIGNvbXBpbGF0aW9uIGRpZXMgYmVj YXVzZSBnZXRwd25hbSgpIGlzIGJlaW5nIHJlZGVjbGFyZWQgKG9yCisgICBiZWNhdXNlIG9mICJj b25mbGljdGluZyB0eXBlcyBmb3IgZ2V0d3BuYW0iKSwgYWRkIC1ETkRHUFdOQU0gdG8geW91cgor ICAgQ0ZMQUdTLiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdGhlbiBhZGQgLUREQ0dQV05BTSB0byB5 b3VyIENGTEFHUyAoc2VlCisgICBja3VmaW8uYyBhcm91bmQgbGluZSA0NDApLgorCisgICBJZiB0 aGUgY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IHRoZSBkZWNsYXJhdGlvbiBvZiBnZXRwd25hbSgp IGR1cmluZyBhbgorICAgQU5TSSBDIGNvbXBpbGF0aW9uLCByZW1vdmUgdGhlIGRlY2xhcmF0aW9u IGZyb20gY2t1ZmlvLmMgb3IgY2hhbmdlIHRoZQorICAgYXJndW1lbnQgaW4gdGhlIHByb3RvdHlw ZSBmcm9tIChjaGFyICopIHRvIChjb25zdCBjaGFyICopLgorCisgICBJZiB5b3UgZ2V0IGNvbXBs YWludHMgdGhhdCBnZXRwd3VpZCgpIGlzIGJlaW5nIGNhbGxlZCB3aXRoIGFuIGltcHJvcGVyCisg ICB0eXBlLCBwdXQgLURQV0lEX1Q9eHggaW4geW91ciBDRkxBR1MuCisKKyAgIElmIHlvdSBnZXQg Y29tcGlsZS10aW1lIHdhcm5pbmdzIHRoYXQgdF9icmtjIG9yIHRfZW9mYyAodGNoYXJzCisgICBz dHJ1Y3R1cmUgbWVtYmVycywgdXNlZCBpbiBCU0QtYmFzZWQgdmVyc2lvbnMpIGFyZSB1bmRlZmlu ZWQsIG9yCisgICBzdHJ1Y3R1cmUtbWVtYmVyLSByZWxhdGVkIHdhcm5pbmdzIHRoYXQgbWlnaHQg YmUgdHJhY2VkIHRvIHRoaXMgZmFjdCwKKyAgIGFkZCAtRE5PQlJLQyB0byBDRkxBR1MuCisKKyAg IElmIHlvdSBnZXQgYSBsaW5rZXIgbWVzc2FnZSB0byB0aGUgZWZmZWN0IHRoYXQgX3NldHJldWlk IG9yIF9zZXRyZWdpZAorICAgaXMgbm90IGRlZmluZWQsIGFkZCAtRE5PU0VUUkVVIHRvIENGTEFH Uywgb3IgYWRkIC1EQ0tUWVBfSD1ibGFoIHRvCisgICBDRkxBR1MgdG8gbWFrZSBDLUtlcm1pdCBy ZWFkIHRoZSByaWdodCA8dHlwZXMuaD4ta2luZC1vZi1maWxlIHRvIHBpY2sKKyAgIHVwIHRoZXNl IGRlZmluaXRpb25zLgorCisgICBJZiB5b3UgZ2V0IGEgbWVzc2FnZSB0aGF0IF9wb3BlbiBpcyB1 bmRlZmluZWQsIGFkZCAtRE5PUE9QRU4gdG8gQ0ZMQUdTLgorCisgICBJZiB5b3UgZ2V0IGEgY29t cGxhaW50IGF0IGNvbXBpbGUgdGltZSBhYm91dCBhbiBpbGxlZ2FsIHBvaW50ZXItaW50ZWdlcgor ICAgY29tYmluYXRpb24gaW4gY2t1ZmlvLmMgaW52b2x2aW5nIHBvcGVuKCksIG9yIGF0IGxpbmsg dGltZSB0aGF0IF9wb3BlbgorICAgaXMgYW4gdW5kZWZpbmVkIHN5bWJvbCwgYWRkIHRoZSBkZWNs YXJhdGlvbiAiRklMRSAqcG9wZW4oKTsiIHRvIHRoZQorICAgZnVuY3Rpb24genhjbWQoKSBpbiBj a3VmaW8uYyAodGhpcyBkZWNsYXJhdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBpbgorICAgPHN0ZGlv Lmg+KS4gSWYgbWFraW5nIHRoaXMgY2hhbmdlIGRvZXMgbm90IGhlbHAsIHRoZW4gYXBwYXJlbnRs eSB5b3VyCisgICBVbml4IGRvZXMgbm90IGhhdmUgdGhlIHBvcGVuKCkgZnVuY3Rpb24sIHNvIHlv dSBzaG91bGQgYWRkIC1ETk9QT1BFTiB0bworICAgeW91ciBtYWtlIGVudHJ5LCBpbiB3aGljaCBj YXNlIGNlcnRhaW4gZnVuY3Rpb25zIGludm9sdmluZyAiZmlsZSIgaS9vCisgICB0byB0aGUgc3Rh bmRhcmQgaW5wdXQgYW5kIG91dHB1dCBvZiBzdWJwcm9jZXNzZXMgd2lsbCBub3QgYmUgYXZhaWxh YmxlLgorCisgICBJZiB5b3VyIGxpbmtlciBjb21wbGFpbnMgdGhhdCBfZ2V0Y3dkIGlzIHVuZGVm aW5lZCwgeW91IGNhbiBhZGQgYQorICAgZ2V0Y3dkKCkgZnVuY3Rpb24gdG8gY2t1ZmlvLmMsIG9y IGFkZCBpdCB0byB5b3VyIGxpYmMuYSBsaWJyYXJ5IHVzaW5nCisgICBhcjoKKworI2luY2x1ZGUg PHN0ZGlvLmg+CisKK2NoYXIgKgorZ2V0Y3dkKGJ1ZixzaXplKSBjaGFyICpidWY7IGludCBzaXpl OyB7CisjaWZuZGVmIE5PUE9QRU4KKyNpZmRlZiBEQ0xQT1BFTgorICAgIEZJTEUgKnBvcGVuKCk7 CisjZW5kaWYKKyAgICBGSUxFICpwZnA7CisKKyAgICBpZiAoIWJ1ZikgcmV0dXJuKE5VTEwpOwor ICAgIGlmICghKHBmcCA9IHBvcGVuKCJwd2QiLCJyIikpKSByZXR1cm4oTlVMTCk7CisgICAgZmdl dHMoYnVmLHNpemUtMixwZnApOworICAgIHBjbG9zZShwZnApOworICAgIGJ1ZltzdHJsZW4oYnVm KS0xXSA9ICdcMCc7CisgICAgcmV0dXJuKChjaGFyICopYnVmKTsKKyNlbHNlCisgICAgYnVmWzBd ID0gJ1wwJzsKKyAgICByZXR1cm4oTlVMTCk7CisjZW5kaWYgLyogTk9QT1BFTiAqLworfQorCisj aWZkZWYgTk9QT1BFTgorRklMRSAqcG9wZW4ocyx0KSBjaGFyICpzLCp0OyB7CisgICAgcmV0dXJu KE5VTEwpOworfQorI2VuZGlmIC8qIE5PUE9QRU4gKi8KKworICAgSWYgeW91IGdldCBjb21wbGFp bnRzIGFib3V0IE5QUk9DIGhhdmluZyBhbiBpbnZhbGlkIHZhbHVlLCBhZGQgYSB2YWxpZAorICAg ZGVmaW5pdGlvbiBmb3IgaXQgKGRlcGVuZHMgb24geW91ciBzeXN0ZW0pLCBhcyBpbiB0aGUgY3Jh eSBlbnRyeS4KKworICAgSWYgeW91IGdldCBzb21lIHN5bWJvbCB0aGF0J3MgbXVsdGlwbHkgZGVm aW5lZCwgaXQgcHJvYmFibHkgbWVhbnMgdGhhdAorICAgYSB2YXJpYWJsZSBuYW1lIHVzZWQgYnkg S2VybWl0IGlzIGFsc28gdXNlZCBpbiBvbmUgb2YgeW91ciBzeXN0ZW0KKyAgIGxpYnJhcmllcyB0 aGF0IEtlcm1pdCBpcyBsaW5rZWQgd2l0aC4gRm9yIGV4YW1wbGUsIHVuZGVyIFBDL0lYIHNvbWUK KyAgIGxpYnJhcnkgaGFzIGEgdmFyaWFibGUgb3IgZnVuY3Rpb24gY2FsbGVkICJkYXRhIiwgYW5k IHRoZSB2YXJpYWJsZQorICAgImRhdGEiIGlzIGFsc28gdXNlZCBleHRlbnNpdmVseSBieSBLZXJt aXQuIFJhdGhlciB0aGFuIGVkaXQgdGhlIEtlcm1pdAorICAgc291cmNlIGZpbGVzLCBqdXN0IHB1 dCBhIC1EIGluIHRoZSBtYWtlIGVudHJ5IENGTEFHUyB0byBjaGFuZ2UgdGhlCisgICBLZXJtaXQg c3ltYm9sIGF0IGNvbXBpbGUgdGltZS4gSW4gdGhpcyBleGFtcGxlLCBpdCBtaWdodCBiZQorICAg LURkYXRhPXhkYXRhLgorCisgICBTb21lIHN5bWJvbCBpcyBkZWZpbmVkIGluIHlvdXIgc3lzdGVt J3MgaGVhZGVyIGZpbGVzLCBidXQgaXQgcHJvZHVjZXMKKyAgIGNvbmZsaWN0cyB3aXRoLCBvciB1 bmRlc2lyZWQgcmVzdWx0cyBmcm9tLCBLZXJtaXQuIFRyeSB1bmRlZmluaW5nIHRoZQorICAgc3lt Ym9sIGluIHRoZSBtYWtlZmlsZSB0YXJnZXQncyBDRkxBR1MsIGZvciBleGFtcGxlIC1VRklPTlJF QUQuCisKKyAgIFNvbWUgd2VsbC1rbm93biBzeW1ib2wgaXMgbWlzc2luZyBmcm9tIHlvdXIgc3lz dGVtIGhlYWRlciBmaWxlcy4gVHJ5CisgICBkZWZpbmluZyBpbiB0aGUgbWFrZWZpbGUgdGFyZ2V0 J3MgQ0ZMQUdTLCBmb3IgZXhhbXBsZSAtREZSRUFEPTEuCisKKyAgIFlvdSBnZXQgbWFueSB3YXJu aW5ncyBhYm91dCBwb2ludGVyIG1pc21hdGNoZXMuIFRoaXMgcHJvYmFibHkgbWVhbnMKKyAgIHRo YXQgS2VybWl0IGlzIGFzc3VtaW5nIGFuIGludCB0eXBlIGZvciBzaWduYWwoKSB3aGVuIGl0IHNo b3VsZCBiZQorICAgdm9pZCwgb3IgdmljZS12ZXJzYS4gVHJ5IGFkZGluZyAtRFNJR19JIChmb3Ig aW50ZWdlciBzaWduYWwoKSkgb3IKKyAgIC1EU0lHX1YgKGZvciB2b2lkKSB0byBDRkxBR1MuIE9y IGp1c3QgaW5jbHVkZSBLRkxBR1M9LURTSUdfViAob3IKKyAgIHdoYXRldmVyKSBpbiB5b3VyICJt YWtlIiBjb21tYW5kLCBmb3IgZXhhbXBsZToKKworbWFrZSBic2QgS0ZMQUdTPS1EU0lHX1YKKwor ICAgWW91IGdldCBtYW55IG1lc3NhZ2VzIGFib3V0IHZhcmlhYmxlcyB0aGF0IGFyZSBkZWNsYXJl ZCBhbmQvb3Igc2V0IGJ1dAorICAgbmV2ZXIgdXNlZC4gSXQgaXMgZGlmZmljdWx0IHRvIGF2b2lk IHRoZXNlIGJlY2F1c2Ugb2YgYWxsIHRoZQorICAgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW4g dGhlIHByb2dyYW0uIElnbm9yZSB0aGVzZSBtZXNzYWdlcy4KKworICAgU29tZSBvZiBDLUtlcm1p dCdzIG1vZHVsZXMgYXJlIHNvIGxhcmdlLCBvciBjb250YWluIHNvIG1hbnkgY2hhcmFjdGVyCisg ICBzdHJpbmcgY29uc3RhbnRzLCBvciBhcmUgc28gb2ZmZW5zaXZlIGluIHNvbWUgb3RoZXIgd2F5 LCB0aGF0IHNvbWUgQworICAgY29tcGlsZXJzIGdpdmUgdXAgYW5kIHJlZnVzZSB0byBjb21waWxl IHRoZW0uIFRoaXMgaXMgdXN1YWxseSBiZWNhdXNlCisgICB0aGUgLU8gKG9wdGltaXplKSBvcHRp b24gaXMgaW5jbHVkZWQgaW4gdGhlIG1ha2UgZW50cnkuIElmIHRoaXMgaGFwcGVucworICAgdG8g eW91LCB5b3UgY2FuIChhKSByZW1vdmUgdGhlIC1PIG9wdGlvbiBmcm9tIHRoZSBtYWtlIGVudHJ5 LCB3aGljaAorICAgd2lsbCB0dXJuIG9mZiB0aGUgb3B0aW1pemVyIGZvciBBTEwgbW9kdWxlczsg b3IgKGIpIGNvbXBpbGUgdGhlCisgICBvZmZlbmRpbmcgbW9kdWxlKHMpIGJ5IGhhbmQsIGluY2x1 ZGluZyBhbGwgdGhlIHN3aXRjaGVzIGZyb20gbWFrZSBlbnRyeQorICAgZXhjZXB0IGZvciAtTywg YW5kIHRoZW4gZ2l2ZSB0aGUgYXBwcm9wcmlhdGUgIm1ha2UiIGNvbW1hbmQgYWdhaW47IG9yCisg ICAoYykgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHRoZSAtT2xpbWl0IG9wdGlvbiwgaWYgeW91ciBj b21waWxlciBzdXBwb3J0cworICAgdGhpcyBvcHRpb247IG9yIChkKSBjaGFuZ2UgdGhlIFsxNjFd bWFrZWZpbGUgdGFyZ2V0IHRvIGZpcnN0IGNvbXBpbGUKKyAgIGVhY2ggb2ZmZW5kaW5nIG1vZHVs ZSBleHBsaWNpdGx5IHdpdGhvdXQgb3B0aW1pemF0aW9uLCB0aGVuIGNvbXBpbGUgdGhlCisgICBv dGhlcnMgbm9ybWFsbHkgKHdpdGggb3B0aW1pemF0aW9uKSwgZm9yIGV4YW1wbGU6CisKKyNGb3J0 dW5lIDMyOjE2LCBGb3I6UHJvIDIuMSAobW9zdGx5IGxpa2UgNC4xYnNkKQorZnQyMToKKyAgICAg ICAgQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRm9ydHVuZSAzMjoxNiBGb3I6 UHJvIDIuMS4uLicKKyAgICAgICAgJChNQUtFKSBja3V1c3guJChFWFQpICJDRkxBR1M9IC1ETk9E RUJVRyAtREJTRDQgLURGVDIxIC1ETk9GSUxFSCBcCisgICAgICAgIC1TWU0gODAwIFwgLUREWU5B TUlDIC1ETk9TRVRCVUYgLURDS19DVVJTRVMgJChLRkxBR1MpIC1EUElEX1Q9c2hvcnQiCisgICAg ICAgICQoTUFLRSkgY2t1eGxhLiQoRVhUKSAiQ0ZMQUdTPSAtRE5PREVCVUcgLURCU0Q0IC1ERlQy MSAtRE5PRklMRUggXAorICAgICAgICAtU1lNIDgwMCBcIC1ERFlOQU1JQyAtRE5PU0VUQlVGIC1E Q0tfQ1VSU0VTICQoS0ZMQUdTKSAtRFBJRF9UPXNob3J0IgorICAgICAgICAkKE1BS0UpIGNrdWRp YS4kKEVYVCkgIkNGTEFHUz0gLUROT0RFQlVHIC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIFwKKyAg ICAgICAgLVNZTSA4MDAgXCAtRERZTkFNSUMgLUROT1NFVEJVRiAtRENLX0NVUlNFUyAkKEtGTEFH UykgLURQSURfVD1zaG9ydCIKKyAgICAgICAgJChNQUtFKSB3ZXJtaXQgIkNGTEFHUz0gLU8gLURO T0RFQlVHIC1EQlNENCAtREZUMjEgLUROT0ZJTEVIIC1TWU0gODAwIFwKKyAgICAgICAgLUREWU5B TUlDIC1ETk9TRVRCVUYgLURDS19DVVJTRVMgJChLRkxBR1MpIC1EUElEX1Q9c2hvcnQiIFwKKyAg ICAgICAgIkxOS0ZMQUdTPSAtbiAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbHYgLWxu ZXQiCisKKyAgIEFzIGFuIGV4dHJlbWUgZXhhbXBsZSwgc29tZSBjb21waWxlcnMgKGUuZy4gZ2Nj IG9uIHRoZSBERyBBVmlpT04pIGhhdmUKKyAgIGJlZW4ga25vd24gdG8gZHVtcCBjb3JlIHdoZW4g dHJ5aW5nIHRvIGNvbXBpbGUgY2t3YXJ0LmMgd2l0aAorICAgb3B0aW1pemF0aW9uLiBTbyBqdXN0 IGRvIHRoaXMgb25lICJieSBoYW5kIjoKKworY2MgLW8gd2FydCBja3dhcnQuYworCisgICBvcjoK KwordG91Y2ggY2tjcHJvLmMKKworICAgYW5kIHRoZW4gZ2l2ZSB0aGUgIm1ha2UiIGNvbW1hbmQg YWdhaW4uCisKKyAgIFNwZWFraW5nIG9mIHdhcnQsIGl0IGlzIHVuYXZvaWRhYmxlIHRoYXQgc29t ZSBwaWNreSBjb21waWxlcnMgbWlnaHQKKyAgIGdlbmVyYXRlICJzdGF0ZW1lbnQgdW5yZWFjaGFi bGUiIG1lc3NhZ2VzIHdoZW4gY29tcGlsaW5nIGNrY3Byby5jLgorICAgVW5yZWFjaGFibGUgc3Rh dGVtZW50cyBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHRoZSB3YXJ0IHByb2dyYW0sIHdoaWNoCisgICBn ZW5lcmF0ZXMgY2tjcHJvLmMgYXV0b21hdGljYWxseSBmcm9tIFsxNjJdY2tjcHJvLncsIHdoaWNo IHRyYW5zbGF0ZXMKKyAgIGxleC1saWtlIHN0YXRlL2lucHV0IGNvbnN0cnVjdGlvbnMgaW50byBh IGJpZyBzd2l0Y2gvY2FzZSBjb25zdHJ1Y3Rpb24uCisKKyAgIFNvbWUgZnVuY3Rpb24gaW4gS2Vy bWl0IHdyZWFrcyBoYXZvYyB3aGVuIGl0IGlzIGNhbGxlZC4gQ2hhbmdlIGFsbAorICAgaW52b2Nh dGlvbnMgb2YgdGhlIGZ1bmN0aW9uIGludG8gYSBtYWNybyB0aGF0IGV2YWx1YXRlcyB0byB0aGUK KyAgIGFwcHJvcHJpYXRlIHJldHVybiBjb2RlIHRoYXQgd291bGQgaGF2ZSBiZWVuIHJldHVybmVk IGJ5IHRoZSBmdW5jdGlvbgorICAgaGFkIGl0IGJlZW4gY2FsbGVkIGFuZCBmYWlsZWQsIGZvciBl eGFtcGxlOiAtRHprc2VsZigpPTAuIE9idmlvdXNseSBub3QKKyAgIGEgZ29vZCBpZGVhIGlmIHRo ZSBmdW5jdGlvbiBpcyByZWFsbHkgbmVlZGVkLgorCisgICBJZiB5b3UgaGF2ZSBqdXN0IGluc3Rh bGxlZCBTdW5PUyA0LjEuMiBvciA0LjEuMywgeW91IG1pZ2h0IGZpbmQgdGhhdAorICAgQy1LZXJt aXQgKGFuZCBhbnkgb3RoZXIgQyBwcm9ncmFtKSBmYWlscyB0byBsaW5rIGJlY2F1c2Ugb2YgdW5y ZXNvbHZlZAorICAgcmVmZXJlbmNlcyBmcm9tIHdpdGhpbiBsaWJjLiBUaGlzIGlzIGJlY2F1c2Ug b2YgYSBtaXN0YWtlIGluIFN1bidzCisgICAvdXNyL2xpYi9zaGxpYi5ldGMgZmlsZXMgZm9yIGJ1 aWxkaW5nIHRoZSBuZXcgbGliYy4gQ2hhbmdlIHRoZSBsaWJjCisgICBNYWtlZmlsZSBzbyB0aGF0 IHRoZSAibGQiIGxpbmVzIGhhdmUgIi1sZGwiIGF0IHRoZSBlbmQuIENoYW5nZSB0aGUKKyAgIFJF QURNRSBmaWxlIHRvIHNheSAibXYgeGNjcy5tdWx0aWJ5dGUuIHhjY3MubXVsdGlieXRlLm8iIGFu ZCBmb2xsb3cKKyAgIHRoYXQgaW5zdHJ1Y3Rpb24uCisKKzUuIElOU1RBTExJTkcgVEhFIEtFUk1J VCBGSUxFUworCisgICBbIFsxNjNdVG9wIF0gWyBbMTY0XUNvbnRlbnRzIF0gWyBbMTY1XU5leHQg XSBbIFsxNjZdUHJldmlvdXMgXQorCisgICBTRUNUSU9OIENPTlRFTlRTCisKKzUuMS4gWzE2N11U aGUgQy1LZXJtaXQgSW5pdGlhbGl6YXRpb24gRmlsZQorNS4yLiBbMTY4XVRleHQgRmlsZXMKKzUu My4gWzE2OV1JbnN0YWxsaW5nIHRoZSBLZXJtaXQgRmlsZXMKKzUuNC4gWzE3MF1UaGUgTWFrZWZp bGUgSW5zdGFsbCBUYXJnZXQKKworICAgVGhlIEMtS2VybWl0IGV4ZWN1dGFibGUgZG9lcyBub3Qg bmVlZCBhbnkgZXh0ZXJuYWwgZmlsZXMgdG8gcnVuLgorICAgVW5saWtlLCBzYXksIHRoZSBjdSBw cm9ncmFtLCB3aGljaCBvbiBtb3N0IHBsYXRmb3JtcyBpcyB1c2VsZXNzIHVubGVzcworICAgeW91 IChhcyByb290KSBlZGl0IHRoZSAvdXNyL3Nwb29sL3V1Y3AvU3lzdGVtcyBhbmQKKyAgIC91c3Iv c3Bvb2wvdXVjcC9EZXZpY2VzIGZpbGVzIHRvIHN1cHBseSB3aGF0ZXZlciBvYnNjdXJlIGFuZAor ICAgdW5kb2N1bWVudGVkIHN5bnRheCBpcyByZXF1aXJlZCB0byBtYXRjaCBzb21lIHN1cHBvc2Vk bHkgdXNlci1mcmllbmRseQorICAgbW5lbW9uaWMgdG8gdGhlIHJlYWwgcGF0aG5hbWUgb2Ygd2hh dGV2ZXIgZGV2aWNlIHlvdSB3YW50IHRvIHVzZSwKKyAgIEtlcm1pdCBydW5zIG9uIGl0cyBvd24g d2l0aG91dCBuZWVkaW5nIGFueSBleHRlcm5hbCBjb25maWd1cmF0aW9uCisgICBmaWxlcywgYW5k IGxldHMgeW91IHJlZmVyIHRvIGRldmljZSAoYW5kIG5ldHdvcmsgaG9zdHMgYW5kIHNlcnZpY2Vz KSBieQorICAgdGhlaXIgb3duIG5hdHVyYWwgdW5kaXNndWlzZWQgbmFtZXMuCisKKyAgIE5ldmVy dGhlbGVzcywgYSBudW1iZXIgb2YgZXh0ZXJuYWwgZmlsZXMgY2FuIGJlIGluc3RhbGxlZCBhbG9u ZyB3aXRoCisgICB0aGUgQy1LZXJtaXQgZXhlY3V0YWJsZSBpZiB5b3Ugd2lzaC4gVGhlc2UgaW5j bHVkZSBjb25maWd1cmF0aW9uIGFuZAorICAgY3VzdG9taXphdGlvbiBmaWxlcyB0aGF0IGFyZSBy ZWFkIGJ5IEtlcm1pdCBhcyB3ZWxsIGFzIGRvY3VtZW50YXRpb24KKyAgIGZpbGVzIHRvIGJlIHJl YWQgYnkgcGVvcGxlLiBBbGwgb2YgdGhpcyBtYXRlcmlhbCBpcyAoYSkgb3B0aW9uYWwsIGFuZAor ICAgKGIpIGF2YWlsYWJsZSBvbiB0aGUgS2VybWl0IHdlYnNpdGU6CisKK1sxNzFdaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0LworCisgICBhbmQgdXN1YWxseSBpbiBhIG1vcmUgcGxlYXNh bnQgZm9ybSwgcGVyaGFwcyBhbHNvIHdpdGggdXBkYXRlZCBjb250ZW50LgorICAgU28gaWYgeW91 ciBjb21wdXRlciBpcyBvbiB0aGUgSW50ZXJuZXQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW5zdGFs bAorICAgYW55dGhpbmcgYnV0IHRoZSBLZXJtaXQgZXhlY3V0YWJsZSBpZiB1c2VycyBrbm93IGhv dyB0byBmaW5kIHRoZSBLZXJtaXQKKyAgIHdlYnNpdGUgKGFuZCBpZiB0aGV5IGRvbid0LCBLZXJt aXQncyAiaGVscCIgY29tbWFuZCB0ZWxscyB0aGVtKS4KKworNS4xLiBUaGUgQy1LZXJtaXQgSW5p dGlhbGl6YXRpb24gRmlsZQorCisgICBJbiBDLUtlcm1pdCA3LjAgYW5kIGVhcmxpZXIsIHRoZSBz dGFuZGFyZCBpbml0aWFsaXphdGlvbiBmaWxlIHdhcyBhIGtleQorICAgQy1LZXJtaXQgY29tcG9u ZW50IGJlY2F1c2U6CisKKyAgICBhLiBJdCAibG9hZGVkIiB0aGUgZGlhbGluZyBhbmQgbmV0d29y ayBkaXJlY3Rvcmllcy4KKyAgICBiLiBJdCBkZWZpbmVkIGFsbCB0aGUgbWFjcm9zIGFuZCB2YXJp YWJsZXMgZm9yIHRoZSBzZXJ2aWNlcyBkaXJlY3RvcnkuCisgICAgYy4gSXQgZGVmaW5lZCBtYWNy b3MgZm9yIHF1aWNrbHkgY2hhbmdpbmcgS2VybWl0J3MgZmlsZS10cmFuc2ZlcgorICAgICAgIHBl cmZvcm1hbmNlIHR1bmluZy4KKworICAgVGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZpbGUg aXMgcXVpdGUgbG9uZyAobW9yZSB0aGFuIDYwMCBsaW5lcykKKyAgIGFuZCByZXF1aXJlcyBub3Rp Y2VhYmxlIHByb2Nlc3NpbmcgdGltZSAodGhlIHNsb3dlciB0aGUgY29tcHV0ZXIsIHRoZQorICAg bW9yZSBub3RpY2VhYmxlKSwgeWV0IGZldyBwZW9wbGUgYWN0dWFsbHkgdXNlIHRoZSBzZXJ2aWNl cyBkaXJlY3RvcnksCisgICB3aG9zZSBkZWZpbml0aW9uIHRha2VzIHVwIG1vc3Qgb2YgaXRzIGJ1 bGsuIE1lYW53aGlsZSwgaW4gQy1LZXJtaXQgOC4wLAorICAgbWFueSBvZiB0aGUgcmVtYWluaW5n IGZ1bmN0aW9ucyBvZiB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gZmlsZSBhcmUKKyAgIG5v dyBidWlsdCBpbjsgZm9yIGV4YW1wbGUsIHRoZSBGQVNULCBDQVVUSU9VUywgYW5kIFJPQlVTVCBj b21tYW5kcy4KKworICAgTW9yZSB0byB0aGUgcG9pbnQsIG1hbnkgb2YgdGhlIHNldHRpbmdzIHRo YXQgY291bGQgYmUgbWFkZSBvbmx5IGluIHRoZQorICAgaW5pdGlhbGl6YXRpb24gYW5kIGN1c3Rv bWl6YXRpb24gZmlsZXMgY2FuIG5vdyBiZSBwaWNrZWQgdXAgZnJvbQorICAgZW52aXJvbm1lbnQg dmFyaWFibGVzLiBUaGUgZmlyc3QgZ3JvdXAgaWRlbnRpZmllcyBpbml0aWFsaXphdGlvbiBhbmQK KyAgIGRpcmVjdG9yeSBmaWxlczoKKworICAgQ0tFUk1JVF9JTkkKKyAgICAgICAgICBUaGUgcGF0 aCBvZiB5b3VyIEtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLCBpZiBhbnkuIFRoaXMKKyAgICAg ICAgICBvdmVycmlkZXMgdGhlIGJ1aWx0LWluIHNlYXJjaCBmb3IgJEhPTUUvLmtlcm1yYy4KKwor ICAgS19DSEFSU0VUCisgICAgICAgICAgVGhlIGNoYXJhY3RlciBzZXQgdXNlZCBmb3IgZW5jb2Rp bmcgbG9jYWwgdGV4dCBmaWxlcy4gRXF1aXZhbGVudAorICAgICAgICAgIHRvIFNFVCBGSUxFIENI QVJBQ1RFUi1TRVQuCisKKyAgIEtfRElBTF9ESVJFQ1RPUlkKKyAgICAgICAgICBUaGUgZnVsbCBw YXRobmFtZSBvZiBvbmUgb3IgbW9yZSBLZXJtaXQgZGlhbGluZyBkaXJlY3RvcnkgZmlsZXMuCisg ICAgICAgICAgRXF1aXZhbGVudCB0byBTRVQgRElBTCBESVJFQ1RPUlkuCisKKyAgIEtfTkVUX0RJ UkVDVE9SWQorICAgICAgICAgIFRoZSBmdWxsIHBhdGhuYW1lIG9mIG9uZSBvciBtb3JlIEtlcm1p dCBuZXR3b3JrIGRpcmVjdG9yeSBmaWxlcy4KKyAgICAgICAgICBFcXVpdmFsZW50IHRvIFNFVCBO RVRXT1JLIERJUkVDVE9SWS4KKworICAgS19JTkZPX0RJUkVDVE9SWQorICAgS19JTkZPX0RJUgor ICAgICAgICAgIFRoZSBmdWxsIHBhdGhuYW1lIG9mIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgS2Vy bWl0IChpZiBhbnkpCisgICAgICAgICAgY29udGFpbmluZyBja3Vid3IudHh0IGFuZCBvdGhlciBL ZXJtaXQgdGV4dCBmaWxlcy4gT3ZlcnJpZGVzCisgICAgICAgICAgS2VybWl0J3MgYnVpbHQtaW4g c2VhcmNoIGZvciB0aGlzIGRpcmVjdG9yeS4KKworICAgVGhlIG5leHQgZ3JvdXAgaXMgcmVsYXRl ZCB0byBkaWFsaW5nIG1vZGVtczoKKworICAgS19DT1VOVFJZQ09ERQorICAgICAgICAgIFRoZSB0 ZWxlcGhvbmljIG51bWVyaWMgY291bnRyeSBjb2RlIGZvciB0aGlzIGxvY2F0aW9uLCBlLmcuIDEK KyAgICAgICAgICBmb3IgTm9ydGggQW1lcmljYSBvciAzOSBmb3IgSXRhbHkuIEl0IGlzIHJlY29t bWVuZGVkIHRoYXQgdGhpcworICAgICAgICAgIG9uZSBiZSBzZXQgZm9yIGFsbCB1c2Vycywgc3lz dGVtLXdpZGUuIE5vdCBvbmx5IGlzIGl0IHVzZWQgdG8KKyAgICAgICAgICBwcm9jZXNzIHBvcnRh YmxlLWZvcm1hdCBkaWFsaW5nIGRpcmVjdG9yeSBlbnRyaWVzLCBidXQgaXQgaXMKKyAgICAgICAg ICBhbHNvIGNvbXBhcmVkIGFnYWluc3QgS2VybWl0J3MgYnVpbHQtaW4gbGlzdCBvZiAidG9uZSBj b3VudHJpZXMiCisgICAgICAgICAgdG8gc2VlIGlmIHRvbmUgZGlhbGluZyBjYW4gYmUgdXNlZC4g RXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQKKyAgICAgICAgICBESUFMIENPVU5UUlktQ09ERSBj b21tYW5kLgorCisgICBLX0FSRUFDT0RFCisgICAgICAgICAgVGhlIHRlbGVwaG9uaWMgbnVtZXJp YyBhcmVhIGNvZGUgZm9yIHRoaXMgbG9jYXRpb24sIGUuZy4gMjEyIGZvcgorICAgICAgICAgIE1h bmhhdHRhbiwgTmV3IFlvcmssIFVTQS4gUmVjb21tZW5kIHRoaXMgb25lIGFsc28gYmUgc2V0Cisg ICAgICAgICAgc3lzdGVtLXdpZGUsIHNvIHNoYXJlZCBwb3J0YWJsZS1mb3JtYXQgZGlhbGluZyBk aXJlY3RvcmllcyB3aWxsCisgICAgICAgICAgd29yayBhdXRvbWF0aWNhbGx5IGZvciBldmVyeWJv ZHkuIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VUCisgICAgICAgICAgRElBTCBBUkVBLUNPREUg Y29tbWFuZC4KKworICAgS19ESUFMX01FVEhPRAorICAgICAgICAgIFRPTkUgb3IgUFVMU0UuIEVx dWl2YWxlbnQgdG8gS2VybWl0J3MgU0VUIERJQUwgTUVUSE9EIGNvbW1hbmQuCisgICAgICAgICAg SWYgYSBkaWFsIG1ldGhvZCBpcyBub3Qgc2V0IGV4cGxpY2l0bHkgKG9yIGltcGxpY2l0bHkgZnJv bSB0aGUKKyAgICAgICAgICBjb3VudHJ5IGNvZGUpLCBLZXJtaXQgZG9lcyBub3Qgc3BlY2lmeSBh IGRpYWxpbmcgbWV0aG9kLCBhbmQKKyAgICAgICAgICB1c2VzIHRoZSBtb2RlbSdzIGRlZmF1bHQg bWV0aG9kLCB3aGljaCB0ZW5kcyB0byBiZSBwdWxzZS4KKworICAgS19JTlRMX1BSRUZJWAorICAg ICAgICAgIFRoZSB0ZWxlcGhvbmljIG51bWVyaWMgaW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZp eCBmb3IgdGhpcworICAgICAgICAgIGxvY2F0aW9uLiBFcXVpdmFsZW50IHRvIEtlcm1pdCdzIFNF VCBESUFMIElOVEwtUFJFRklYIGNvbW1hbmQuCisKKyAgIEtfTERfUFJFRklYCisgICAgICAgICAg VGhlIHRlbGVwaG9uaWMgbnVtZXJpYyBsb25nLWRpc3RhbmNlIGRpYWxpbmcgcHJlZml4IGZvciB0 aGlzCisgICAgICAgICAgbG9jYXRpb24uIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VUIERJQUwg TEQtUFJFRklYIGNvbW1hbmQuCisKKyAgIEtfUEJYX0lDUAorICAgICAgICAgIFRoZSB0ZWxlcGhv bmljIG51bWVyaWMgUEJYIGludGVybmFsIGNhbGwgcHJlZml4IGZvciB0aGlzCisgICAgICAgICAg bG9jYXRpb24uIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VUIERJQUwgUEJYLUlOU0lERS1QUkVG SVgKKyAgICAgICAgICBjb21tYW5kLgorCisgICBLX1BCWF9PQ1AKKyAgICAgICAgICBUaGUgdGVs ZXBob25pYyBudW1lcmljIFBCWCBleHRlcm5hbCBjYWxsIHByZWZpeCBmb3IgdGhpcworICAgICAg ICAgIGxvY2F0aW9uLiBFcXVpdmFsZW50IHRvIEtlcm1pdCdzIFNFVCBESUFMIFBCWC1PVVRTSURF LVBSRUZJWAorICAgICAgICAgIGNvbW1hbmQuCisKKyAgIEtfUEJYX1hDSAorICAgICAgICAgIFRo ZSB0ZWxlcGhvbmljIG51bWVyaWMgUEJYIGV4Y2hhbmdlIChmaXJzdCBwYXJ0IG9mIHRoZQorICAg ICAgICAgIHN1YnNjcmliZXIgbnVtYmVyKS4gRXF1aXZhbGVudCB0byBLZXJtaXQncyBTRVQgRElB TCBQQlgtRVhDSEFOR0UKKyAgICAgICAgICBjb21tYW5kLgorCisgICBLX1RGX0FSRUFDT0RFCisg ICAgICAgICAgQSBsaXN0IG9mIG9uZSBvciBtb3JlIHRlbGVwaG9uaWMgbnVtZXJpYyB0b2xsLWZy ZWUgYXJlYSBjb2Rlcy4KKworICAgS19URl9QUkVGSVgKKyAgICAgICAgICBUaGUgdGVsZXBob25p YyBudW1lcmljIHRvbGwtZnJlZSBkaWFsaW5nIHByZWZpeCwgaW4gY2FzZSBpdCBpcworICAgICAg ICAgIGRpZmZlcmVudCBmcm9tIHRoZSBsb25nLWRpc3RhbmNlIHByZWZpeC4gRXF1aXZhbGVudCB0 byBLZXJtaXQncworICAgICAgICAgIFNFVCBESUFMIFRGLVBSRUZJWCBjb21tYW5kLgorCisgICBU aGUgZmluYWwgZ3JvdXAgaW5jbHVkZXMgd2VsbC1rbm93biBlbnZpcm9ubWVudCB2YXJpYWJsZXMg dGhhdCBhcmUgYWxzbworICAgdXNlZCBieSBLZXJtaXQ6CisKKyAgIENEUEFUSAorICAgICAgICAg IFdoZXJlIHRoZSBDRCBjb21tYW5kIHNob3VsZCBsb29rIGZvciByZWxhdGl2ZSBkaXJlY3Rvcnkg bmFtZXMuCisKKyAgIFNIRUxMCisgICAgICAgICAgVGhlIHBhdGggb2YgeW91ciBVbml4IHNoZWxs LiBVc2VkIGJ5IHRoZSBSVU4gKCEpIGNvbW1hbmQgdG8KKyAgICAgICAgICBjaG9vc2UgdGhlIHNo ZWxsIHRvIGV4ZWN1dGUgaXRzIGFyZ3VtZW50cy4KKworICAgVVNFUgorICAgICAgICAgIFlvdXIg VW5peCB1c2VybmFtZS4KKworICAgRURJVE9SCisgICAgICAgICAgVGhlIG5hbWUgb3IgcGF0aCBv ZiB5b3VyIHByZWZlcnJlZCBlZGl0b3IgKHVzZWQgYnkgdGhlIEVESVQKKyAgICAgICAgICBjb21t YW5kKS4gRXF1aXZhbGVudCB0byBTRVQgRURJVE9SLgorCisgICBCUk9XU0VSCisgICAgICAgICAg VGhlIG5hbWUgb3IgcGF0aCBvZiB5b3VyIHByZWZlcnJlZCB3ZWIgYnJvd3NlciAodXNlZCBieSB0 aGUKKyAgICAgICAgICBCUk9XU0UgY29tbWFuZCkuIEVxdWl2YWxlbnQgdG8gS2VybWl0J3MgU0VU IEJST1dTRVIgY29tbWFuZC4KKworICAgRG9lcyB0aGlzIG1lYW4gdGhlIGluaXRpYWxpemF0aW9u IGZpbGUgY2FuIGJlIGFib2xpc2hlZD8gSSB0aGluayBzby4KKyAgIEhlcmUncyB3aHk6CisKKyAg ICAgKiBLZXJtaXQgYWxyZWFkeSBkb2VzIGV2ZXJ5dGhpbmcgbW9zdCBwZW9wbGUgd2FudCBpdCB0 byBkbyB3aXRob3V0CisgICAgICAgb25lLgorICAgICAqIEltcG9ydGFudCBzaXRlLXNwZWNpZmlj IGN1c3RvbWl6YXRpb25zIGNhbiBiZSBkb25lIHdpdGggZ2xvYmFsCisgICAgICAgZW52aXJvbm1l bnQgdmFyaWFibGVzLgorICAgICAqIFRoZXJlIGlzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgZXZl cnlib2R5IHRvIGhhdmUgdG8gdXNlIHRoZQorICAgICAgIHN0YW5kYXJkIGluaXRpYWxpemF0aW9u IGZpbGUuCisgICAgICogVGhpcyBtZWFucyB0aGF0IHlvdXIgaW5pdGlhbGl6YXRpb24gZmlsZSwg aWYgeW91IHdhbnQgb25lLCBjYW4KKyAgICAgICBjb250YWluIHlvdXIgb3duIHBlcnNvbmFsIHNl dHRpbmdzLCBkZWZpbml0aW9ucywgYW5kIHByZWZlcmVuY2VzLAorICAgICAgIHJhdGhlciB0aGFu IDYwMCBsaW5lcyBvZiAic3RhbmRhcmQiIHNldHVwcy4KKyAgICAgKiBJZiB5b3Ugc3RpbGwgd2Fu dCB0aGUgc2VydmljZXMgZGlyZWN0b3J5LCB5b3UgY2FuIGVpdGhlciBUQUtFIHRoZQorICAgICAg IHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZpbGUgKHdoaWNoIG11c3QgYmUgbmFtZWQgYW55dGhp bmcgb3RoZXIKKyAgICAgICB0aGFuICRIT01FLy5rZXJtcmMgdG8gYXZvaWQgYmVpbmcgZXhlY3V0 ZWQgYXV0b21hdGljYWxseSBldmVyeSB0aW1lCisgICAgICAgeW91IHN0YXJ0IEtlcm1pdCksIG9y IHlvdSBjYW4gbWFrZSBpdCBhIGtlcmJhbmcgc2NyaXB0IGFuZCBleGVjdXRlCisgICAgICAgaXQg ImRpcmVjdGx5IiAodGhlIFsxNzJdbWFrZWZpbGUgaW5zdGFsbCB0YXJnZXQgZG9lcyB0aGlzIGZv ciB5b3UKKyAgICAgICBieSBwdXR0aW5nIGNrZXJtaXQuaW5pIGluIHRoZSBzYW1lIGRpcmVjdG9y eSBhcyB0aGUgS2VybWl0IGJpbmFyeSwKKyAgICAgICBhZGRpbmcgdGhlIGFwcHJvcHJpYXRlIEtl cmJhbmcgbGluZSB0byB0aGUgdG9wLCBhbmQgZ2l2aW5nIGl0CisgICAgICAgZXhlY3V0ZSBwZXJt aXNzaW9uKS4KKworICAgSW4gZmFjdCwgeW91IGNhbiBwdXQgYW55IG51bWJlciBvZiBrZXJiYW5n IHNjcmlwdHMgaW4geW91ciBQQVRIIHRvCisgICBzdGFydCB1cCBDLUtlcm1pdCBpbiBkaWZmZXJl bnQgd2F5cywgdG8gaGF2ZSBpdCBhZG9wdCBjZXJ0YWluIHNldHRpbmdzLAorICAgbWFrZSBwYXJ0 aWN1bGFyIGNvbm5lY3Rpb25zLCBleGVjdXRlIGNvbXBsaWNhdGVkIHNjcmlwdHMsIHdoYXRldmVy IHlvdQorICAgd2FudC4KKworICAgQW5kIGluIEMtS2VybWl0IDkuMCB0aGUgaW5pdGlhbGl6YXRp b24gaGFzIGluZGVlZCBiZWVuICJyZXRpcmVkIiBieQorICAgcmVuYW1pbmcgaXQgdG8gb2tlcm1p dC5pbmksIGFuZCByZXBsYWNlZCBieSBhIHN0dWIgY2tlcm1pdC5pbmkgdGhhdAorICAgZG9lc24n dCBkbyBhbnl0aGluZyBidXQgcHJpbnQgYSBtZXNzYWdlLiBEaXR0byBmb3IgY2tlcm1vZC5pbmku CisKKzUuMi4gVGV4dCBGaWxlcworCisgICBUaGVzZSBhcmUgZW50aXJlbHkgb3B0aW9uYWwuIE1h bnkgb2YgdGhlbSBhcmUgdG8gYmUgZm91bmQgYXQgdGhlIEtlcm1pdAorICAgd2Vic2l0ZSBpbiBI VE1MIGZvcm0gKGkuZS4gYXMgV2ViIHBhZ2VzIHdpdGggY2xpY2thYmxlIGxpbmtzLCBldGMpLCBh bmQKKyAgIHZlcnkgbGlrZWx5IGFsc28gbW9yZSB1cCB0byBkYXRlLiBQbGFpbi10ZXh0IGZpbGVz IHRoYXQgY29ycmVzcG9uZCB0bworICAgV2ViIHBhZ2VzIHdlcmUgc2ltcGx5ICJkdW1wZWQiIGJ5 IEx5bnggZnJvbSB0aGUgd2Vic2l0ZSB0byBwbGFpbiBBU0NJSQorICAgdGV4dC4gVGhlIGZvcm1h dCBpcyB3aGF0ZXZlciBMeW54IHVzZXMgZm9yIHRoaXMgcHVycG9zZS4gSWYgeW91IHdpc2gsCisg ICB5b3UgY2FuIGluc3RhbGwgdGhlbSBvbiB5b3VyIGNvbXB1dGVyIGFzIGRlc2NyaWJlZCBpbiB0 aGUgWzE3M11uZXh0CisgICBzZWN0aW9uLgorCisgICBbMTc0XUNPUFlJTkcuVFhUCisgICAgICAg ICAgQ29weXJpZ2h0IG5vdGljZSwgcGVybWlzc2lvbnMsIGFuZCBkaXNjbGFpbWVyLgorCisgICBb MTc1XWNrZXJtaXQuaW5pCisgICAgICAgICAgVGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIGZp bGUsIGludGVuZGVkIG1vcmUgZm9yIHJlZmVyZW5jZQorICAgICAgICAgIChpbiBtb3N0IGNhc2Vz KSB0aGFuIGFjdHVhbCB1c2U7IHNlZSBbMTc2XVNlY3Rpb24gNS4xLgorCisgICBbMTc3XWNrZXJt b2QuaW5pCisgICAgICAgICAgQSBzYW1wbGUgY3VzdG9taXphdGlvbiBmaWxlLgorCisgICBbMTc4 XWNrZXJtaXQ3MC50eHQKKyAgICAgICAgICBTdXBwbGVtZW50IHRvIFsxNzldVXNpbmcgQy1LZXJt aXQgZm9yIHZlcnNpb24gNy4wLiBBdmFpbGFibGUgb24KKyAgICAgICAgICB0aGUgS2VybWl0IHdl YnNpdGUgYXM6CisgICAgICAgICAgWzE4MF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdDcwLmh0bWwKKworICAgWzE4MV1ja2VybWl0ODAudHh0CisgICAgICAgICAgU3VwcGxl bWVudCB0byBbMTgyXVVzaW5nIEMtS2VybWl0IGZvciB2ZXJzaW9uIDguMC4gQXZhaWxhYmxlIG9u CisgICAgICAgICAgdGhlIEtlcm1pdCB3ZWJzaXRlIGFzOgorICAgICAgICAgIFsxODNdaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisKKyAgIFsxODRdY2tlcm1p dDkwLnR4dAorICAgICAgICAgIFN1cHBsZW1lbnQgdG8gWzE4NV1Vc2luZyBDLUtlcm1pdCBmb3Ig dmVyc2lvbiA5LjAuIEF2YWlsYWJsZSBvbgorICAgICAgICAgIHRoZSBLZXJtaXQgd2Vic2l0ZSBh czoKKyAgICAgICAgICBbMTg2XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 OTAuaHRtbAorCisgICBbMTg3XWNrY2J3ci50eHQKKyAgICAgICAgICBUaGUgZ2VuZXJhbCBDLUtl cm1pdCBoaW50cyBhbmQgdGlwcyAoImJld2FyZSIpIGZpbGUuIEF2YWlsYWJsZQorICAgICAgICAg IG9uIHRoZSBLZXJtaXQgd2Vic2l0ZSBhczoKKyAgICAgICAgICBbMTg4XWh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2Nid3IuaHRtbAorCisgICBbMTg5XWNrdWJ3ci50eHQKKyAgICAg ICAgICBUaGUgVW5peC1zcGVjaWZpYyBDLUtlcm1pdCBoaW50cyBhbmQgdGlwcyBmaWxlLiBBdmFp bGFibGUgb24gdGhlCisgICAgICAgICAgS2VybWl0IHdlYnNpdGUgYXM6CisgICAgICAgICAgWzE5 MF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwKKworICAgWzE5MV1j a3VpbnMudHh0CisgICAgICAgICAgVW5peCBDLUtlcm1pdCBJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rp b25zICh0aGlzIGZpbGUpLiBBdmFpbGFibGUKKyAgICAgICAgICBvbiB0aGUgS2VybWl0IHdlYnNp dGUgYXM6CisgICAgICAgICAgWzE5Ml1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwKKworICAgWzE5M11ja2NjZmcudHh0CisgICAgICAgICAgQy1LZXJtaXQgY29tcGls ZS10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQXZhaWxhYmxlIG9uIHRoZQorICAgICAgICAg IEtlcm1pdCB3ZWJzaXRlIGFzOgorICAgICAgICAgIFsxOTRdaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrY2NmZy5odG1sCisKKyAgIFsxOTVdY2tjcGxtLnR4dAorICAgICAgICAgIFRo ZSBDLUtlcm1pdCBwcm9ncmFtIGxvZ2ljIG1hbnVhbC4gQXZhaWxhYmxlIG9uIHRoZSBLZXJtaXQK KyAgICAgICAgICB3ZWJzaXRlIGFzOgorICAgICAgICAgIFsxOTZdaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrY3BsbS5odG1sCisKKyAgIFsxOTddY2FfY2VydHMucGVtCisgICAgICAg ICAgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlcyBmb3Igc2VjdXJlIGNvbm5lY3Rp b25zIChzZWUKKyAgICAgICAgICBbMTk4XVNlY3Rpb24gMTYpLgorCis1LjMuIEluc3RhbGxpbmcg dGhlIEtlcm1pdCBGaWxlcworCisgICBUaGVyZSBpcyBhbiAiaW5zdGFsbCIgdGFyZ2V0IGluIHRo ZSBbMTk5XW1ha2VmaWxlIHRoYXQgeW91IGNhbiB1c2UgaWYKKyAgIHlvdSB3aXNoLiBIb3dldmVy LCBzaW5jZSBldmVyeSBzaXRlIGhhcyBpdHMgb3duIGxheW91dCBhbmQKKyAgIHJlcXVpcmVtZW50 cywgaXQgaXMgb2Z0ZW4gYmV0dGVyIHRvIGluc3RhbGwgdGhlIEtlcm1pdCBmaWxlcyBieSBoYW5k LgorICAgWW91IGRvbid0IGhhdmUgdG8gdXNlIHRoZSBtYWtlZmlsZSBpbnN0YWxsIHRhcmdldCB0 byBpbnN0YWxsIEMtS2VybWl0LgorICAgVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgc2luY2Ugbm90 IGFsbCBzaXRlcyBidWlsZCBDLUtlcm1pdCBmcm9tIHNvdXJjZSwKKyAgIGFuZCB0aGVyZWZvcmUg bWlnaHQgbm90IGV2ZW4gaGF2ZSB0aGUgbWFrZWZpbGUuIEJ1dCB5b3Ugc2hvdWxkIHJlYWQKKyAg IHRoaXMgc2VjdGlvbiBpbiBhbnkgY2FzZS4KKworICAgICBJZiB5b3VyIGNvbXB1dGVyIGFscmVh ZHkgaGFzIGFuIG9sZGVyIHZlcnNpb24gb2YgQy1LZXJtaXQgaW5zdGFsbGVkLAorICAgICB5b3Ug c2hvdWxkIHJlbmFtZSBpdCAoZS5nLiB0byAia2VybWl0NiIgb3IgImtlcm1pdDciKSBzbyBpbiBj YXNlIHlvdQorICAgICBoYXZlIGFueSB0cm91YmxlIHdpdGggdGhlIG5ldyB2ZXJzaW9uLCB0aGUg b2xkIG9uZSBpcyBzdGlsbAorICAgICBhdmFpbGFibGUuCisKKyAgIEluIG1vc3QgY2FzZXMsIHlv dSBuZWVkIHRvIGJlIHJvb3QgdG8gaW5zdGFsbCBDLUtlcm1pdCwgaWYgb25seSB0byBnYWluCisg ICB3cml0ZSBhY2Nlc3MgdG8gZGlyZWN0b3JpZXMgaW4gd2hpY2ggdGhlIGJpbmFyeSBhbmQgbWFu dWFsIHBhZ2UgYXJlIHRvCisgICBiZSBjb3BpZWQuIFRoZSBDLUtlcm1pdCBiaW5hcnkgc2hvdWxk IGJlIGluc3RhbGxlZCBpbiBhIGRpcmVjdG9yeSB0aGF0CisgICBpcyBpbiB0aGUgdXNlcnMnIFBB VEgsIGJ1dCB0aGF0IGlzIG5vdCBsaWtlbHkgdG8gYmUgb3ZlcndyaXR0ZW4gd2hlbgorICAgeW91 IGluc3RhbGwgYSBuZXcgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gQSBnb29kIGNh bmRpZGF0ZQorICAgd291bGQgYmUgdGhlIC91c3IvbG9jYWwvYmluLyBkaXJlY3RvcnksIGJ1dCB0 aGUgc3BlY2lmaWMgY2hvaWNlIGlzIHNpdGUKKyAgIGRlcGVuZGVudC4gRXhhbXBsZSAoYXNzdW1p bmcgdGhlIGFwcHJvcHJpYXRlIEtlcm1pdCBiaW5hcnkgaXMgc3RvcmVkIGluCisgICB5b3VyIGN1 cnJlbnQgZGlyZWN0b3J5IGFzICJ3ZXJtaXQiLCBlLmcuIGJlY2F1c2UgeW91IGp1c3QgYnVpbHQg aXQgZnJvbQorICAgc291cmNlIGFuZCB0aGF0J3MgdGhlIG5hbWUgdGhlIG1ha2VmaWxlIGdhdmUg aXQpOgorCittdiB3ZXJtaXQgL3Vzci9sb2NhbC9iaW4va2VybWl0CitjaG1vZCA3NTUgL3Vzci9s b2NhbC9iaW4va2VybWl0CisKKyAgIG9yIChvbmx5IGFmdGVyIHlvdSBmaW5pc2ggcmVhZGluZyB0 aGlzIHNlY3Rpb24hKSBzaW1wbHk6CisKK21ha2UgaW5zdGFsbAorCisgICBJTVBPUlRBTlQ6IElG IEMtS0VSTUlUIElTIFRPIEJFIFVTRUQgRk9SIERJQUxJTkcgT1VULCB5b3UgbXVzdCBhbHNvIGRv CisgICBzb21ldGhpbmcgdG8gZ2l2ZSBpdCBhY2Nlc3MgdG8gdGhlIGRpYWxvdXQgZGV2aWNlcyBh bmQgbG9ja2ZpbGUKKyAgIGRpcmVjdG9yaWVzLiBUaGUgJ2luc3RhbGwnIHRhcmdldCBkb2VzIG5v dCBhdHRlbXB0IHRvIHNldCBLZXJtaXQncworICAgb3duZXIsIGdyb3VwLCBhbmQgcGVybWlzc2lv bnMgdG8gYWxsb3cgZGlhbGluZyBvdXQuIFRoaXMgcmVxdWlyZXMKKyAgIHByaXZpbGVnZXMsIG9w ZW4gZXllcywgYW5kIGh1bWFuIGRlY2lzaW9uLW1ha2luZy4gUGxlYXNlIHJlYWQKKyAgIFsyMDBd U2VjdGlvbnMgMTAgYW5kIFsyMDFdMTEgYmVsb3csIG1ha2UgdGhlIG5lY2Vzc2FyeSBkZWNpc2lv bnMsIGFuZAorICAgdGhlbiBpbXBsZW1lbnQgdGhlbSBieSBoYW5kIGFzIGRlc2NyaWJlZCBpbiB0 aG9zZSBzZWN0aW9ucy4KKworICAgWW91IHNob3VsZCBhbHNvIGluc3RhbGwgdGhlIG1hbiBwYWdl LCB3aGljaCBpcyBjYWxsZWQgY2t1a2VyLm5yLCBpbiB0aGUKKyAgIG1hbiBwYWdlIGRpcmVjdG9y eSBmb3IgbG9jYWwgY29tbWFuZHMsIHN1Y2ggYXMgL3Vzci9tYW4vbWFuMS8sIHJlbmFtZWQKKyAg IGFwcHJvcHJpYXRlbHksIGUuZy4gdG8ga2VybWl0LjEuIFRoaXMgaXMgYWxzbyB0YWtlbiBjYXJl IG9mIGJ5ICJtYWtlCisgICBpbnN0YWxsIi4KKworICAgT3B0aW9uYWxseSwgdGhlIHRleHQgZmls ZXMgbGlzdGVkIGluIHRoZSBbMjAyXXByZXZpb3VzIHNlY3Rpb24gY2FuIGJlCisgICBwbGFjZWQg aW4gYSBwdWJsaWNseSByZWFkYWJsZSBkaXJlY3RvcnkuIFN1Z2dlc3RlZCBkaXJlY3RvcnkgbmFt ZXMgYXJlOgorCisvdXNyL2xvY2FsL2RvYy9rZXJtaXQvCisvdXNyL2xvY2FsL2xpYi9rZXJtaXQv CisvdXNyL3NoYXJlL2xpYi9rZXJtaXQvCisvb3B0L2tlcm1pdC9kb2MvCisKKyAgIChvciBhbnkg b2YgdGhlc2Ugd2l0aG91dCB0aGUgIi9rZXJtaXQiKS4gVXBvbiBzdGFydHVwLCBDLUtlcm1pdCBj aGVja3MKKyAgIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdob3NlIHB1cnBv c2UgaXMgdG8gc3BlY2lmeSB0aGUKKyAgIGRpcmVjdG9yeSB3aGVyZSB0aGUgQy1LZXJtaXQgdGV4 dCBmaWxlcyBhcmUsIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisKK0tfSU5GT19ESVJFQ1RPUlkK K0tfSU5GT19ESVIKKworICAgSWYgZWl0aGVyIG9mIHRoZXNlIGlzIGRlZmluZWQsIEMtS2VybWl0 IGNoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUKKyAgIGNrdWJ3ci50eHQgZmlsZSAoVW5p eCBDLUtlcm1pdCBIaW50cyBhbmQgVGlwcykuIElmIG5vdCBmb3VuZCwgaXQgY2hlY2tzCisgICB0 aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGFib3ZlIChib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlICIv a2VybWl0IikgcGx1cworICAgc2V2ZXJhbCBvdGhlcnMgdG8gc2VlIGlmIHRoZXkgY29udGFpbiB0 aGUgY2t1YndyLnR4dCBmaWxlLiBJZiBmb3VuZCwKKyAgIHZhcmlvdXMgQy1LZXJtaXQgbWVzc2Fn ZXMgY2FuIHJlZmVyIHRoZSB1c2VyIHRvIHRoaXMgZGlyZWN0b3J5LgorCisgICBGaW5hbGx5LCBp ZiB5b3Ugd2FudCB0byBwdXQgdGhlIHNvdXJjZSBjb2RlIGZpbGVzIHNvbWV3aGVyZSBmb3IgcGVv cGxlCisgICB0byBsb29rIGF0LCB5b3UgY2FuIGRvIHRoYXQgdG9vLgorCis1LjQuIFRoZSBNYWtl ZmlsZSBJbnN0YWxsIFRhcmdldAorCisgICBUaGUgbWFrZWZpbGUgImluc3RhbGwiIHRhcmdldCBk b2VzIGFsbW9zdCBldmVyeXRoaW5nIGZvciB5b3UgaWYgeW91CisgICBnaXZlIGl0IHRoZSBpbmZv cm1hdGlvbiBpdCBuZWVkcyBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZXMgZGVzY3JpYmVkCisgICBi ZWxvdy4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgaWY6CisKKyAgICAgKiBZb3UgZG93bmxvYWRl ZCB0aGUgWzIwM11jb21wbGV0ZSBDLUtlcm1pdCBhcmNoaXZlIGFuZCBidWlsdAorICAgICAgIEMt S2VybWl0IGZyb20gc291cmNlOyBvcjoKKyAgICAgKiBZb3UgZG93bmxvYWRlZCBhbiBbMjA0XWlu ZGl2aWR1YWwgQy1LZXJtaXQgYmluYXJ5IGFuZCB0aGUKKyAgICAgICBbMjA1XUMtS2VybWl0IHRl eHQtZmlsZSBhcmNoaXZlLCBhbmQgeW91ciBjb21wdXRlciBoYXMgYSAibWFrZSIKKyAgICAgICBj b21tYW5kLgorCisgICBIZXJlIGFyZSB0aGUgcGFyYW1ldGVycyB5b3UgbmVlZCB0byBrbm93Ogor CisgICBCSU5BUlkKKyAgICAgICAgICBOYW1lIG9mIHRoZSBiaW5hcnkgeW91IHdhbnQgdG8gaW5z dGFsbCBhcyAia2VybWl0Ii4gRGVmYXVsdDoKKyAgICAgICAgICAid2VybWl0Ii4KKworICAgcHJl Zml4CisgICAgICAgICAgKGxvd2VyIGNhc2UpIElmIHlvdSBkZWZpbmUgdGhpcyB2YXJpYWJsZSwg aXRzIHZhbHVlIGlzIHByZXBlbmRlZAorICAgICAgICAgIHRvIGFsbCB0aGUgZm9sbG93aW5nIHh4 eERJUiB2YXJpYWJsZXMgKDguMC4yMTEgYW5kIGxhdGVyKS4KKworICAgREVTVERJUgorICAgICAg ICAgIElmIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlIEtlcm1pdCBmaWxlcyBpbiBhIGRpcmVjdG9y eSBzdHJ1Y3R1cmUKKyAgICAgICAgICBsaWtlIC9vcHQva2VybWl0L2Jpbi8sIC9vcHQva2VybWl0 L2RvYy8sIC9vcHQva2VybWl0L3NyYy8sIHRoZW4KKyAgICAgICAgICBkZWZpbmUgREVTVElSIGFz IHRoZSByb290IG9mIHRoaXMgc3RydWN0dXJlOyBmb3IgZXhhbXBsZSwKKyAgICAgICAgICAvb3B0 L2tlcm1pdC4gVGhlIERFU1RESVIgc3RyaW5nIHNob3VsZCBub3QgZW5kIHdpdGggYSBzbGFzaC4g QnkKKyAgICAgICAgICBkZWZhdWx0LCBERVNURElSIGlzIG5vdCBkZWZpbmVkLiBJZiBpdCBpcyBk ZWZpbmVkLCBidXQgdGhlCisgICAgICAgICAgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCB0aGUg bWFrZWZpbGUgYXR0ZW1wdHMgdG8gY3JlYXRlIGl0LAorICAgICAgICAgIHdoaWNoIG1pZ2h0IHJl cXVpcmUgeW91IHRvIGJlIHJvb3QuIEV2ZW4gc28sIHRoaXMgY2FuIGZhaWwgaWYKKyAgICAgICAg ICBhbnkgc2VnbWVudHMgaW4gdGhlIHBhdGggZXhjZXB0IHRoZSBsYXN0IG9uZSBkbyBub3QgYWxy ZWFkeQorICAgICAgICAgIGV4aXN0LiBXQVJOSU5HOiBJZiB0aGUgbWFrZWZpbGUgY3JlYXRlcyBh bnkgZGlyZWN0b3JpZXMsIGl0CisgICAgICAgICAgZ2l2ZXMgdGhlbSBhIG1vZGUgb2YgNzU1LCBh bmQgdGhlIGRlZmF1bHQgb3duZXIgYW5kIGdyb3VwLgorICAgICAgICAgIE1vZGlmeSB0aGVzZSBi eSBoYW5kIGlmIG5lY2Vzc2FyeS4KKworICAgQklORElSCisgICAgICAgICAgRGlyZWN0b3J5IGlu IHdoaWNoIHRvIGluc3RhbGwgdGhlIEtlcm1pdCBiaW5hcnkgKGFuZCB0aGUKKyAgICAgICAgICBz dGFuZGFyZCBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlLCBpZiBpdCBpcyBmb3VuZCwgYXMg YQorICAgICAgICAgIEtlcmJhbmcgc2NyaXB0KS4gSWYgREVTVERJUiBpcyBkZWZpbmVkLCBCSU5E SVIgbXVzdCBzdGFydCB3aXRoIGEKKyAgICAgICAgICBzbGFzaC4gQklORElSIG11c3Qgbm90IGVu ZCB3aXRoIGEgc2xhc2guIElmIERFU1RESVIgaXMgZGVmaW5lZCwKKyAgICAgICAgICBCSU5ESVIg aXMgYSBzdWJkaXJlY3Rvcnkgb2YgREVTVERJUi4gSWYgQklORElSIGRvZXMgbm90IGV4aXN0LAor ICAgICAgICAgIHRoZSBtYWtlZmlsZSBhdHRlbXB0cyB0byBjcmVhdGUgaXQgYXMgd2l0aCBERVNU RElSLiBEZWZhdWx0OgorICAgICAgICAgIC91c3IvbG9jYWwvYmluLgorCisgICBNQU5ESVIKKyAg ICAgICAgICBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5zdGFsbCB0aGUgQy1LZXJtaXQgbWFudWFs IHBhZ2UgYXMKKyAgICAgICAgICAia2VybWl0IiBmb2xsb3dlZCBieSB0aGUgbWFudWFsLWNoYXB0 ZXIgZXh0ZW5zaW9uIChuZXh0IGl0ZW0pLgorICAgICAgICAgIERlZmF1bHQ6IC91c3IvbWFuL21h bjEuIElmIE1BTkRJUiBpcyBkZWZpbmVkLCB0aGUgZGlyZWN0b3J5IG11c3QKKyAgICAgICAgICBh bHJlYWR5IGV4aXN0LgorCisgICBNQU5FWFQKKyAgICAgICAgICBFeHRlbnNpb24gZm9yIHRoZSBt YW51YWwgcGFnZS4gRGVmYXVsdDogMSAoZGlnaXQgb25lKS4KKworICAgU1JDRElSCisgICAgICAg ICAgRGlyZWN0b3J5IGluIHdoaWNoIHRvIGluc3RhbGwgdGhlIEMtS2VybWl0IHNvdXJjZSBjb2Rl LiBJZgorICAgICAgICAgIERFU1RESVIgaXMgZGVmaW5lZCwgdGhpcyBpcyBhIHN1YmRpcmVjdG9y eSBvZiBERVNURElSLiBEZWZhdWx0OgorICAgICAgICAgIE5vbmUuCisKKyAgIENFUlRESVIKKyAg ICAgICAgICBGb3Igc2VjdXJlIGJ1aWxkcyBvbmx5OiBEaXJlY3RvcnkgaW4gd2hpY2ggdG8gaW5z dGFsbCB0aGUKKyAgICAgICAgICBjYV9jZXJ0cy5wZW0gZmlsZS4gVGhpcyBtdXN0IGJlIHRoZSB2 ZXJpZmljYXRpb24gZGlyZWN0b3J5IHVzZWQKKyAgICAgICAgICBieSBwcm9ncmFtcyB0aGF0IHVz ZSB0aGUgU1NMIGxpYnJhcmllcyBhdCB5b3VyIHNpdGUuIERlZmF1bHQ6CisgICAgICAgICAgbm9u ZS4gUG9zc2liaWxpdGllcyBpbmNsdWRlOiAvdXNyL2xvY2FsL3NzbCwgL29wdC9zc2wsCisgICAg ICAgICAgL3Vzci9saWIvc3NsLCAuIC4gLiAgICAgSWYgQ0VSVERJUiBpcyBkZWZpbmVkLCB0aGUg ZGlyZWN0b3J5CisgICAgICAgICAgbXVzdCBhbHJlYWR5IGV4aXN0LgorCisgICBJTkZPRElSCisg ICAgICAgICAgRGlyZWN0b3J5IGluIHdoaWNoIHRvIGluc3RhbGwgdGhlIEMtS2VybWl0IHRleHQg ZmlsZXMuIElmCisgICAgICAgICAgREVTVERJUiBpcyBkZWZpbmVkLCB0aGlzIGlzIGEgc3ViZGly ZWN0b3J5IG9mIERFU1RESVIuIERlZmF1bHQ6CisgICAgICAgICAgTm9uZS4gSWYgSU5GT0RJUiBp cyBkZWZpbmVkIGJ1dCBkb2VzIG5vdCBleGlzdCwgdGhlIG1ha2VmaWxlCisgICAgICAgICAgYXR0 ZW1wdHMgdG8gY3JlYXRlIGl0LCBhcyB3aXRoIERFU1RESVIuCisKKyAgIEV4YW1wbGVzOgorCisg ICBtYWtlIGluc3RhbGwKKyAgICAgICAgICBJbnN0YWxscyAid2VybWl0IiBhcyAvdXNyL2xvY2Fs L2Jpbi9rZXJtaXQgd2l0aCBwZXJtaXNzaW9ucyA3NTUsCisgICAgICAgICAgdGhlIGRlZmF1bHQg b3duZXIgYW5kIGdyb3VwLCBhbmQgbm8gc3BlY2lhbCBwcml2aWxlZ2VzLiBUaGUKKyAgICAgICAg ICBtYW51YWwgcGFnZSBpcyBpbnN0YWxsZWQgYXMgL3Vzci9tYW4vbWFuMS9rZXJtaXQuMS4gVGV4 dCBmaWxlcworICAgICAgICAgIGFyZSBub3QgY29waWVkIGFueXdoZXJlLCBub3IgYXJlIHRoZSBz b3VyY2VzLgorCisgICBtYWtlIE1BTkRJUj0gaW5zdGFsbAorICAgICAgICAgIEp1c3QgbGlrZSAi bWFrZSBpbnN0YWxsIiBidXQgZG9lcyBub3QgYXR0ZW1wdCB0byBpbnN0YWxsIHRoZQorICAgICAg ICAgIG1hbnVhbCBwYWdlLgorCisgICBtYWtlIERFU1RESVI9L29wdC9rZXJtaXQgQklORElSPS9i aW4gU1JDRElSPS9zcmMgSU5GT0RJUj0vZG9jIGluc3RhbGwKKyAgICAgICAgICBJbnN0YWxscyB0 aGUgS2VybWl0IGJpbmFyeSAid2VybWl0IiBhcyAvb3B0L2tlcm1pdC9iaW4va2VybWl0LAorICAg ICAgICAgIHB1dHMgdGhlIHNvdXJjZSBjb2RlIGluIC9vcHQva2VybWl0L3NyYywgYW5kIHB1dHMg dGhlIHRleHQgZmlsZXMKKyAgICAgICAgICBpbiAvb3B0L2tlcm1pdC9kb2MsIGNyZWF0aW5nIHRo ZSBkaXJlY3RvcmllcyBpZiB0aGV5IGRvbid0CisgICAgICAgICAgYWxyZWFkeSBleGlzdCwgYW5k IHB1dHMgdGhlIG1hbiBwYWdlIGluIHRoZSBkZWZhdWx0IGxvY2F0aW9uLgorCisgICBtYWtlIEJJ TkRJUj0vdXNyL2xvY2FsL2JpbiBDRVJURElSPS91c3IvbG9jYWwvc3NsIGluc3RhbGwKKyAgICAg ICAgICBJbnN0YWxscyB0aGUgS2VyYmVyaXplZCBLZXJtaXQgYmluYXJ5ICJ3ZXJtaXQiIGFzCisg ICAgICAgICAgL3Vzci9sb2NhbC9iaW4va2VybWl0LCBwdXRzIHRoZSBDQSBDZXJ0aWZpY2F0ZXMg ZmlsZSBpbgorICAgICAgICAgIC91c3IvbG9jYWwvc3NsLywgYW5kIHRoZSBtYW4gcGFnZSBpbiB0 aGUgbm9ybWFsIHBsYWNlLgorCisgICBGb3IgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiwgc2VlIHRo ZSBtYWtlZmlsZS4gVGhlIGZvbGxvd2luZyBpcworICAgZXhjZXJwdGVkIGZyb20gdGhlIDguMC4y MTEgbWFrZWZpbGU6CisKKyMgVGhlIGZvbGxvd2luZyBzeW1ib2xzIGFyZSB1c2VkIHRvIHNwZWNp ZnkgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGUgbG9jYXRpb25zCisjIFJlZGVmaW5lIHRoZW0gdG8g dGhlIHZhbHVlcyB1c2VkIG9uIHlvdXIgc3lzdGVtIGJ5OgorIyAuIGVkaXRpbmcgdGhpcyBmaWxl CisjIC4gZGVmaW5pbmcgdGhlIHZhbHVlcyBvbiB0aGUgY29tbWFuZCBsaW5lCisjIC4gZGVmaW5p bmcgdGhlIHZhbHVlcyBpbiB0aGUgZW52aXJvbm1lbnQgYW5kIHVzZSB0aGUgLWUgb3B0aW9uCisj CitwcmVmaXggID0gL3Vzci9sb2NhbAorc3Jwcm9vdCA9ICQocHJlZml4KQorc3Nscm9vdCA9ICQo cHJlZml4KQorbWFucm9vdCA9ICQocHJlZml4KQorCitLNExJQj0tTC91c3Iva2VyYmVyb3MvbGli CitLNElOQz0tSS91c3Iva2VyYmVyb3MvaW5jbHVkZQorSzVMSUI9LUwvdXNyL2tlcmJlcm9zL2xp YgorSzVJTkM9LUkvdXNyL2tlcmJlcm9zL2luY2x1ZGUKK1NSUExJQj0tTCQoc3Jwcm9vdCkvbGli CitTUlBJTkM9LUkkKHNycHJvb3QpL2luY2x1ZGUKK1NTTExJQj0tTCQoc3Nscm9vdCkvc3NsL2xp YgorU1NMSU5DPS1JJChzc2xyb290KS9zc2wvaW5jbHVkZQorLi4uCitXRVJNSVQgPSBtYWtld2hh dAorQklOQVJZID0gd2VybWl0CitERVNURElSID0KK0JJTkRJUiA9ICQocHJlZml4KS9iaW4KK01B TkRJUiA9ICQobWFucm9vdCkvbWFuL21hbjEKK01BTkVYVCA9IDEKK1NSQ0RJUiA9CitJTkZPRElS ID0KK0NFUlRESVIgPQorCis2LiBJTlNUQUxMSU5HIFVOSVggQy1LRVJNSVQgRlJPTSBET1MtRk9S TUFUIERJU0tFVFRFUworCisgICBbIFsyMDZdVG9wIF0gWyBbMjA3XUNvbnRlbnRzIF0gWyBbMjA4 XU5leHQgXSBbIFsyMDldUHJldmlvdXMgXQorCisgICAgIFRoaXMgc2VjdGlvbiBpcyBvYnNvbGV0 ZS4gV2UgZG9uJ3QgZGlzdHJpYnV0ZSBDLUtlcm1pdCBvbiBkaXNrZXR0ZXMKKyAgICAgYW55IG1v cmUgYmVjYXVzZSAoYSl0aGVyZSBpcyBubyBkZW1hbmQsIGFuZCAoYikgaXQgbm8gbG9uZ2VyIGZp dHMuCisKKyAgIElmIHlvdSByZWNlaXZlZCBhIERPUy1mb3JtYXQgZGlza2V0dGUgY29udGFpbmlu ZyBhIGJpbmFyeSBleGVjdXRhYmxlCisgICBDLUtlcm1pdCBwcm9ncmFtIHBsdXMgc3VwcG9ydGlu ZyB0ZXh0IGZpbGVzLCBiZSBzdXJlIHRvIGNobW9kICt4IHRoZQorICAgZXhlY3V0YWJsZSBiZWZv cmUgYXR0ZW1wdGluZyB0byBydW4gaXQuCisKKyAgIEluIHZlcnNpb24gNUEoMTkwKSBhbmQgbGF0 ZXIsIGFsbCB0aGUgdGV4dCBmaWxlcyBvbiB0aGUgQy1LZXJtaXQKKyAgIERPUy1mb3JtYXQgZGlz a2V0dGVzIGFyZSBpbiBVbml4IGZvcm1hdDogTEYgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUKKyAg IHJhdGhlciB0aGFuIENSTEYuIFRoaXMgbWVhbnMgdGhhdCBubyBjb252ZXJzaW9ucyBhcmUgbmVj ZXNzYXJ5IHdoZW4KKyAgIGNvcHlpbmcgdG8geW91ciBVbml4IGZpbGUgc3lzdGVtLCBhbmQgdGhh dCBhbGwgdGhlIGZpbGVzIG9uIHRoZQorICAgZGlza2V0dGUsIHRleHQgYW5kIGJpbmFyeSwgY2Fu IGJlIGNvcGllZCB0b2dldGhlci4gVGhlIGZvbGxvd2luZworICAgY29tbWVudHMgYXBwbHkgdG8g dGhlIERPUy1mb3JtYXQgZGlza2V0dGVzIGZ1cm5pc2hlZCB3aXRoIHZlcnNpb24KKyAgIDVBKDE4 OSkgYW5kIGVhcmxpZXIgb3IgdG8gb3RoZXIgRE9TLWZvcm1hdCBkaXNrZXR0ZXMgeW91IG1pZ2h0 IGhhdmUKKyAgIG9idGFpbmVkIGZyb20gb3RoZXIgc291cmNlcy4KKworICAgSWYgeW91IGhhdmUg cmVjZWl2ZWQgQy1LZXJtaXQgb24gTVMtRE9TIGZvcm1hdCBkaXNrZXR0ZXMgKHN1Y2ggYXMgdGhv c2UKKyAgIGRpc3RyaWJ1dGVkIGJ5IENvbHVtYmlhIFVuaXZlcnNpdHkpLCB5b3Ugc2hvdWxkIG1h a2Ugc3VyZSB0aGF0IHlvdXIKKyAgIERPUy10by1Vbml4IGNvbnZlcnNpb24gdXRpbGl0eSAoc3Vj aCBhcyAiZG9zcmVhZCIpIGJvdGg6ICgxKSBjaGFuZ2VzCisgICBsaW5lIHRlcm1pbmF0b3JzIGlu IGFsbCBmaWxlcyBmcm9tIGNhcnJpYWdlLXJldHVybiBsaW5lZmVlZCAoQ1JMRikgdG8KKyAgIGp1 c3QgbGluZWZlZWQgKExGKSAoc3VjaCBhcyAiZG9zcmVhZCAtYSIpIGFuZCByZW1vdmUgYW55IEN0 cmwtWidzLCBhbmQKKyAgICgyKSB0aGF0IGFsbCBmaWxlbmFtZXMgYXJlIGNvbnZlcnRlZCBmcm9t IHVwcGVyY2FzZSB0byBsb3dlcmNhc2UuIElmCisgICB0aGVzZSBjb252ZXJzaW9ucyB3ZXJlIG5v dCBkb25lLCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHNoZWxsIHNjcmlwdAorICAgb24geW91 ciBVbml4IHN5c3RlbSB0byBkbyB0aGVtOgorCistLS0oY3V0IGhlcmUpLS0tCisjIS9iaW4vc2gK KyMKKyMgU2hlbGwgc2NyaXB0IHRvIGNvbnZlcnQgQy1LZXJtaXQgRE9TLWZvcm1hdCBmaWxlcyBp bnRvIFVuaXggZm9ybWF0LgorIyBMb3dlcmNhc2VzIHRoZSBmaWxlbmFtZXMsIHN0cmlwcyBvdXQg Y2FycmlhZ2UgcmV0dXJucyBhbmQgQ3RybC1aJ3MuCisjCit4PSQxICMgdGhlIG5hbWUgb2YgdGhl IHNvdXJjZSBkaXJlY3RvcnkKK3k9JDIgIyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGRpcmVjdG9y eSBpZiBbICQjIC1sdCAyIF07IHRoZW4KKyAgZWNobyAidXNhZ2U6ICQwIHNvdXJjZS1kaXJlY3Rv cnkgdGFyZ2V0LWRpcmVjdG9yeSIKKyAgZXhpdCAxCitmaQoraWYgY2QgJDEgOyB0aGVuCisgIGVj aG8gIkNvbnZlcnRpbmcgZmlsZXMgZnJvbSAkMSB0byAkMiIKK2Vsc2UKKyAgZWNobyAiJDA6IGNh bm5vdCBjZCB0byAkMSIKKyAgZXhpdCAxCitmaQorZm9yIGkgaW4gKjsgZG8KKyAgaj1gZWNobyAk aSB8IHRyICdBLVonICdhLXonYAorICBlY2hvICR4LyRpID1cPiAkeS8kagorICB0ciAtZCAnXDAx NVwwMzInIDwgJGkgPiAkeS8kagorZG9uZQorLS0tKGN1dCBoZXJlKS0tLQorCisgICBDdXQgb3V0 IHRoaXMgc2hlbGwgc2NyaXB0LCBzYXZlIGl0IGFzICJjb252ZXJ0LnNoIiAob3IgYW55IG90aGVy IG5hbWUKKyAgIHlvdSBwcmVmZXIpLCB0aGVuICJjaG1vZCAreCBjb252ZXJ0LnNoIi4gVGhlbiwg Y3JlYXRlIGEgbmV3LCBlbXB0eQorICAgZGlyZWN0b3J5IHRvIHB1dCB0aGUgY29udmVydGVkIGZp bGVzIGluLCBhbmQgdGhlbiAiY29udmVydC5zaCAveHh4CisgICAveXl5IiB3aGVyZSAveHh4IGlz IHRoZSBuYW1lIG9mIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIFBDLWZvcm1hdCBmaWxlcworICAg YXJlLCBhbmQgL3l5eSBpcyB0aGUgbmFtZSBvZiB0aGUgbmV3LCBlbXB0eSBkaXJlY3RvcnkuIFRo ZSBjb252ZXJ0ZWQKKyAgIGZpbGVzIHdpbGwgYXBwZWFyIGluIHRoZSBuZXcgZGlyZWN0b3J5Lgor Cis3LiBDSEVDS0lORyBUSEUgUkVTVUxUUworCisgICBbIFsyMTBdVG9wIF0gWyBbMjExXUNvbnRl bnRzIF0gWyBbMjEyXU5leHQgXSBbIFsyMTNdUHJldmlvdXMgXQorCisgICBGaXJzdCBzb21lIHF1 aWNrIGNoZWNrcyBmb3IgcHJvYmxlbXMgdGhhdCBjYW4gYmUgZWFzaWx5IGNvcnJlY3RlZCBieQor ICAgcmVjb21waWxpbmcgd2l0aCBkaWZmZXJlbnQgb3B0aW9uczoKKworICAgRElSRUNUT1JZIGxp c3RpbmcgaXMgZ2FyYmFnZQorICAgICAgICAgIFBlcm1pc3Npb25zLCBzaXplLCBhbmQgZGF0ZSBh cmUgcmFuZG9tIGdhcmJhZ2UgKGJ1dCB0aGUKKyAgICAgICAgICBmaWxlbmFtZXMgYXJlIGNvcnJl Y3QpIGluIGEgQy1LZXJtaXQgRElSRUNUT1JZIGxpc3RpbmcuIE9uIHNvbWUKKyAgICAgICAgICBw bGF0Zm9ybXMsIHRoZSBsc3RhdCgpIGZ1bmN0aW9uIGlzIHByZXNlbnQgYnV0IHNpbXBseSBkb2Vz bid0CisgICAgICAgICAgd29yazsgdHJ5IGFkZGluZyAtRE5PTFNUQVQgdG8gQ0ZMQUdTIGFuZCBy ZWJ1aWxkLiBJZiB0aGF0CisgICAgICAgICAgZG9lc24ndCBmaXggaXQsIGFsc28gYWRkIC1ETk9M SU5LQklUUy4gSWYgaXQncyBzdGlsbCBub3QgZml4ZWQsCisgICAgICAgICAgcmVtb3ZlIC1ETk9M U1RBVCBhbmQgLUROT0xJTktCSVRTIGFuZCBhZGQgLUROT1NZTUxJTksuCisKKyAgIGN1cnNlcwor ICAgICAgICAgIFdoZW4geW91IG1ha2UgYSBjb25uZWN0aW9uIHdpdGggQy1LZXJtaXQgYW5kIHRy YW5zZmVyIGZpbGVzCisgICAgICAgICAgdXNpbmcgdGhlIGZ1bGxzY3JlZW4gKGN1cnNlcykgZmls ZS10cmFuc2ZlciBkaXNwbGF5LCBhbmQgdGhlbgorICAgICAgICAgIGdldCB0aGUgQy1LZXJtaXQ+ IHByb21wdCBiYWNrIGFmdGVyd2FyZHMsIGRvIGNoYXJhY3RlcnMgZWNobworICAgICAgICAgIHdo ZW4geW91IHR5cGUgdGhlbT8gSWYgbm90LCB0aGUgY3Vyc2VzIGxpYnJhcnkgaGFzIGFsdGVyZWQg dGhlCisgICAgICAgICAgYnVmZmVyaW5nIG9mIC9kZXYvdHR5LiBUcnkgcmVidWlsZGluZyB3aXRo IEtGTEFHUz0tRENLX05FV1RFUk0uCisgICAgICAgICAgSWYgaXQgYWxyZWFkeSBoYXMgLURDS19O RVdURVJNIGluIENGTEFHUywgdHJ5IHJlbW92aW5nIGl0LiBJZgorICAgICAgICAgIHRoYXQgZG9l c24ndCBoZWxwLCB0aGVuIHJlYnVpbGQgd2l0aCAtRE5PTk9TRVRCVUYgKHllcywgdHdvCisgICAg ICAgICAgTk8ncykuIElmIG5vbmUgb2YgdGhpcyB3b3JrcyAoYW5kIHlvdSBjYW4ndCBmaXggdGhl IGNvZGUpLCB0aGVuCisgICAgICAgICAgZWl0aGVyIGRvbid0IHVzZSB0aGUgZnVsbHNjcmVlbiBk aXNwbGF5LCBvciByZWJ1aWxkIHdpdGgKKyAgICAgICAgICAtRE5PQ1VSU0VTLgorCisgICBDdHJs LUwgb3IgYW55IFNDUkVFTiBjb21tYW5kIGNyYXNoZXMgQy1LZXJtaXQ6CisgICAgICAgICAgUmVi dWlsZCB3aXRoIC1ETk9URVJNQ0FQLgorCisgICBObyBwcm9tcHQgYWZ0ZXIgQ09OTkVDVDoKKyAg ICAgICAgICBBZnRlciBlc2NhcGluZyBiYWNrIGZyb20gQ09OTkVDVCBtb2RlLCBkb2VzIHlvdXIg Qy1LZXJtaXQ+CisgICAgICAgICAgcHJvbXB0IGRpc2FwcGVhcj8gKFlldCwgdHlwaW5nICI/IiBz dGlsbCBwcm9kdWNlcyBhIGNvbW1hbmQKKyAgICAgICAgICBsaXN0LCBldGMpIEluIHRoYXQgY2Fz ZSwgYWRkIC1EQ0tDT05JTlRCNENCIHRvIENGTEFHUyBhbmQKKyAgICAgICAgICByZWJ1aWxkLgor CisgICBIZXJlIGlzIGEgbW9yZSB0aG9yb3VnaCBjaGVja2xpc3QgY2FuIHVzZSB0byB0ZWxsIHdo ZXRoZXIgeW91ciB2ZXJzaW9uCisgICBvZiBDLUtlcm1pdCB3YXMgYnVpbHQgY29ycmVjdGx5IGZv ciB5b3VyIFVuaXggc3lzdGVtLCB3aXRoIGhpbnRzIG9uIGhvdworICAgdG8gZml4IG9yIHdvcmsg YXJvdW5kIHByb2JsZW1zOgorCisgICAgYS4gU3RhcnQgQy1LZXJtaXQgKHVzdWFsbHkgYnkgdHlw aW5nICIuL3dlcm1pdCIgaW4gdGhlIGRpcmVjdG9yeSB3aGVyZQorICAgICAgIHlvdSByYW4gdGhl IG1ha2VmaWxlKS4gRG8geW91IHNlZSB0aGUgQy1LZXJtaXQ+IHByb21wdD8gSWYgbm90LAorICAg ICAgIEMtS2VybWl0IGluY29ycmVjdGx5IGRlZHVjZWQgdGhhdCBpdCB3YXMgcnVubmluZyBpbiB0 aGUgYmFja2dyb3VuZC4KKyAgICAgICBUaGUgdGVzdCBpcyBpbiBjb25iZ3QoKSBpbiBbMjE0XWNr dXRpby5jLiBJZiB5b3UgY2FuIGZpeCBpdCBmb3IKKyAgICAgICB5b3VyIHN5c3RlbSwgcGxlYXNl IHNlbmQgaW4gdGhlIGZpeCAoSGludDogcmVhZCBhYm91dCAiUElEX1QiCisgICAgICAgYmVsb3cp LiBPdGhlcndpc2UsIHlvdSBjYW4gZm9yY2UgQy1LZXJtaXQgdG8gZm9yZWdyb3VuZCBtb2RlIGJ5 CisgICAgICAgc3RhcnRpbmcgaXQgd2l0aCB0aGUgLXogY29tbWFuZCBsaW5lIG9wdGlvbiwgYXMg aW4gImtlcm1pdCAteiIsIG9yCisgICAgICAgZ2l2aW5nIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5k IFNFVCBCQUNLR1JPVU5EIE9GRi4KKyAgICBiLiBXaGVuIHlvdSB0eXBlIGNoYXJhY3RlcnMgYXQg dGhlIEMtS2VybWl0IHByb21wdCwgZG8gdGhleSBlY2hvCisgICAgICAgaW1tZWRpYXRlbHk/IElm IG5vdCwgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggY29uY2IoKSBhbmQgcHJvYmFibHkKKyAgICAg ICB0aGUgb3RoZXIgdGVybWluYWwgbW9kZSBzZXR0aW5ncyByb3V0aW5lcyBpbiBbMjE1XWNrdXRp by5jLiBCZSBzdXJlCisgICAgICAgeW91IGhhdmUgdXNlZCB0aGUgbW9zdCBhcHByb3ByaWF0ZSBt YWtlIGVudHJ5LgorICAgIGMuIEF0IHRoZSBDLUtlcm1pdD4gcHJvbXB0LCB0eXBlICJzZW5kIC4v PyIuIEMtS2VybWl0IHNob3VsZCBsaXN0IGFsbAorICAgICAgIHRoZSBmaWxlcyBpbiB0aGUgY3Vy cmVudCBkaXJlY3RvcnkuIElmIG5vdCwgaXQgd2FzIGJ1aWx0IGZvciB0aGUKKyAgICAgICB3cm9u ZyB0eXBlIG9mIFVuaXggZmlsZSBzeXN0ZW0uIERldGFpbHMgYmVsb3cuIEluIHRoZSBtZWFudGlt ZSwgdHJ5CisgICAgICAgU0VUIFdJTERDQVJELUVYUEFOU0lPTiBTSEVMTCBhcyBhIHdvcmthcm91 bmQuCisgICAgZC4gQ0QgdG8gYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhIHZhcmlldHkgb2Yg ZmlsZXMsIHN5bWxpbmtzLCBhbmQKKyAgICAgICBzdWJkaXJlY3RvcmllcyBhbmQgZ2l2ZSBhIERJ UkVDVE9SWSBjb21tYW5kIGF0IHRoZSBDLUtlcm1pdD4KKyAgICAgICBwcm9tcHQuIERvIHRoZSBw ZXJtaXNzaW9ucywgc2l6ZSwgYW5kIGRhdGUgYXBwZWFyIGNvcnJlY3Q/IElmIG5vdAorICAgICAg IHNlZSBbMjE2XVNlY3Rpb24gNC4wLgorICAgIGUuIEFzc3VtaW5nIHlvdXIgcGxhdGZvcm0gc3Vw cG9ydHMgbG9uZyBmaWxlIG5hbWVzLCBjcmVhdGUgYSBmaWxlIHdpdGgKKyAgICAgICBhIGxvbmcg bmFtZSBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LCBlLmcuOgorCiskIHRvdWNoIHRoaXNpc2Fm aWxld2l0aGF2ZXJ5dmVyeXZlcnl2ZXJ5dmVyeXZlcnl2ZXJ5dmVyeWxvb29vb29vb29uZ25hbWUK KworICAgICAgICh5b3UgbWlnaHQgbmVlZCB0byBtYWtlIGl0IGxvbmdlciB0aGFuIHRoaXMsIHBl cmhhcHMgYXMgbG9uZyBhcyAyNTcKKyAgICAgICBvciBldmVuIDEwMjUgY2hhcmFjdGVycykuCisg ICAgICAgQ2hlY2sgd2l0aCBscyB0byBzZWUgaWYgeW91ciB2ZXJzaW9uIG9mIFVuaXggdHJ1bmNh dGVkIHRoZSBuYW1lLgorICAgICAgIE5vdyBzdGFydCBDLUtlcm1pdCBhbmQgdHlwZSAic2VuZCB0 aGlzaXM8RVNDPiIuIERvZXMgS2VybWl0CisgICAgICAgY29tcGxldGUgdGhlIG5hbWUsIHNob3dp bmcgdGhlIHNhbWUgbmFtZSBhcyBscyBkaWQ/IElmIG5vdCwgd3JvbmcKKyAgICAgICBmaWxlc3lz dGVtLiBSZWFkIG9uLgorICAgIGYuIE1ha2Ugc3VyZSB0aGF0IEtlcm1pdCBoYXMgdGhlIG1heGlt dW0gcGF0aCBsZW5ndGggcmlnaHQuIEp1c3QgdHlwZQorICAgICAgIFNIT1cgRklMRSBhbmQgc2Vl IHdoYXQgaXQgc2F5cyBhYm91dCB0aGlzLiBJZiBpdCBpcyB0b28gc2hvcnQsCisgICAgICAgdGhl cmUgY291bGQgYmUgc29tZSBwcm9ibGVtcyBhdCBydW50aW1lLiBUbyBjb3JyZWN0LCBsb29rIGlu CisgICAgICAgWzIxN11ja2NkZWIuaCB0byBzZWUgaG93IHRoZSBzeW1ib2wgQ0tNQVhQQVRIIGlz IHNldCBhbmQgbWFrZSBhbnkKKyAgICAgICBuZWVkZWQgYWRqdXN0bWVudHMuCisgICAgZy4gU2Vu ZCBhIGZpbGUgdG8geW91ciBuZXcgS2VybWl0IHByb2dyYW0gZnJvbSBhIGRpZmZlcmVudCBLZXJt aXQKKyAgICAgICBwcm9ncmFtIHRoYXQgaXMga25vd24gdG8gd29yay4gSXMgdGhlIGRhdGUvdGlt ZXN0YW1wIG9mIHRoZSBuZXcKKyAgICAgICBmaWxlIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWw/ IElmIG5vdCwgYWRqdXN0bWVudHMgYXJlIG5lZWRlZCBpbgorICAgICAgIHpzdHJkdCgpIGluIFsy MThdY2t1ZmlvLmMuCisgICAgaC4gR28gdG8gYW5vdGhlciBjb21wdXRlciAoQ29tcHV0ZXIgQikg ZnJvbSB3aGljaCB5b3UgY2FuIHNlbmQgZmlsZXMKKyAgICAgICB0byBDLUtlcm1pdC4gQ29ubmVj dCBDb21wdXRlciBCIHRvIHRoZSBjb21wdXRlciAoQSkgd2hlcmUgeW91IGFyZQorICAgICAgIHRl c3RpbmcgQy1LZXJtaXQuIFRoZW46CisgICAgaS4gU2VuZCBhIGZpbGUgZnJvbSBCIHRvIEEuIE1h a2Ugc3VyZSBpdCB0cmFuc2ZlcnJlZCBPSyBhbmQgd2FzCisgICAgICAgY3JlYXRlZCB3aXRoIHRo ZSByaWdodCBuYW1lLgorICAgIGouIFNlbmQgYSBmaWxlIGZyb20gQiB0byBBLCBzcGVjaWZ5aW5n IGFuICJhcy1uYW1lIiB0aGF0IGlzIHZlcnksIHZlcnkKKyAgICAgICBsb25nIChsb25nZXIgdGhh biB0aGUgbWF4aW11bSBuYW1lIGxlbmd0aCBvbiBjb21wdXRlciBBKS4gQ2hlY2sgdG8KKyAgICAg ICBtYWtlIHN1cmUgdGhhdCB0aGUgZmlsZSB3YXMgcmVjZWl2ZWQgT0sgYW5kIHRoYXQgaXRzIG5h bWUgd2FzCisgICAgICAgdHJ1bmNhdGVkIHRvIENvbXB1dGVyIEEncyBtYXhpbXVtIGxlbmd0aC4g SWYgbm90LCBjaGVjayB0aGUKKyAgICAgICBNQVhOQU1MRU4gZGVmaW5pdGlvbiBpbiBbMjE5XWNr dWZpby5jLgorICAgIGsuIFRlbGwgQy1LZXJtaXQgb24gQ29tcHV0ZXIgQSB0byAic2V0IHJlY2Vp dmUgcGF0aG5hbWVzIHJlbGF0aXZlIiBhbmQKKyAgICAgICB0aGVuIHNlbmQgaXQgYSBmaWxlIGZy b20gQ29tcHV0ZXIgQiBzcGVjaWZ5aW5nIGFuIGFzLW5hbWUgdGhhdAorICAgICAgIGNvbnRhaW5z IHNldmVyYWwgZGlyZWN0b3J5IHNlZ21lbnRzOgorCitzZW5kIGZvbyBkaXIxL2RpcjIvZGlyMy9m b28KKworICAgICAgIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IGRpcjEvZGlyMi9kaXIzL2ZvbyB3 YXMgY3JlYXRlZCBpbiBDb21wdXRlcgorICAgICAgIEEncyBjdXJyZW50IGRpcmVjdG9yeSAoaS5l LiB0aGF0IHRocmVlIGxldmVscyBvZiBkaXJlY3RvcmllcyB3ZXJlCisgICAgICAgY3JlYXRlZCku CisgICAgbC4gUmVwZWF0IHN0ZXAgaywgYnV0IG1ha2UgZWFjaCBwYXRoIHNlZ21lbnQgaW4gdGhl IHBhdGhuYW1lIGxvbmdlcgorICAgICAgIHRoYW4gQ29tcHV0ZXIgQSdzIG1heGltdW0gbmFtZSBs ZW5ndGguIE1ha2Ugc3VyZSBlYWNoIGRpcmVjdG9yeQorICAgICAgIG5hbWUsIGFuZCB0aGUgZmlu YWwgZmlsZW5hbWUsIHdlcmUgdHJ1bmNhdGVkIHByb3Blcmx5LgorICAgIG0uIFR5cGUgQ3RybC1D IChvciB3aGF0ZXZlciB5b3VyIFVuaXggaW50ZXJydXB0IGNoYXJhY3RlciBpcykgYXQgdGhlCisg ICAgICAgcHJvbXB0LiBEbyB5b3UgZ2V0ICJeQy4uLiIgYW5kIGEgbmV3IHByb21wdD8gSWYgaW5z dGVhZCwgeW91IGdldCBhCisgICAgICAgY29yZSBkdW1wICh0aGlzIHNob3VsZG4ndCBoYXBwZW4g YW55IG1vcmUpICJybSBjb3JlIiBhbmQgdGhlbgorICAgICAgIHJlYnVpbGQgd2l0aCAtRE5PQ0NU UkFQIGFkZGVkIHRvIHlvdXIgQ0ZMQUdTLiBJZiBpdCBkaWQgd29yaywgdGhlbgorICAgICAgIHR5 cGUgYW5vdGhlciBDdHJsLUMuIElmIHRoaXMgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUgZmly c3Qgb25lLAorICAgICAgIHRoZW4gQ3RybC1DIGhhbmRsaW5nIGlzIE9LLiBPdGhlcndpc2UsIHRo ZSBTSUdJTlQgc2lnbmFsIGlzIGVpdGhlcgorICAgICAgIG5vdCBnZXR0aW5nIHJlLWFybWVkIChz aG91bGRuJ3QgaGFwcGVuKSBvciBpcyBiZWluZyBtYXNrZWQgb2ZmCisgICAgICAgYWZ0ZXIgdGhl IGZpcnN0IHRpbWUgaXQgaXMgY2F1Z2h0LCBpbiB3aGljaCBjYXNlLCBpZiB5b3VyIFVuaXggaXMK KyAgICAgICBQT1NJWC1iYXNlZCwgdHJ5IHJlYnVpbGRpbmcgQy1LZXJtaXQgd2l0aCAtRENLX1BP U0lYX1NJRy4KKyAgICBuLiBUeXBlIEN0cmwtWiAob3Igd2hhdGV2ZXIgeW91ciBVbml4IHN1c3Bl bmQgY2hhcmFjdGVyIGlzKSB0byBwdXQKKyAgICAgICBDLUtlcm1pdCBpbiB0aGUgYmFja2dyb3Vu ZC4gRGlkIGl0IHdvcms/IElmIG5vdGhpbmcgaGFwcGVuZWQsIHRoZW4KKyAgICAgICAoYSl5b3Vy IHZlcnNpb24gb2YgVW5peCBkb2VzIG5vdCBzdXBwb3J0IGpvYiBjb250cm9sLCBvciAoYikgeW91 cgorICAgICAgIHZlcnNpb24gb2YgQy1LZXJtaXQgd2FzIHByb2JhYmx5IGJ1aWx0IHdpdGggLURO T0pDLiBJZiB5b3VyIHNlc3Npb24KKyAgICAgICBiZWNhbWUgdG90YWxseSBmcm96ZW4sIHRoZW4g eW91IGFyZSBwcm9iYWJseSBydW5uaW5nIEMtS2VybWl0IG9uIGEKKyAgICAgICBVbml4IHZlcnNp b24gdGhhdCBzdXBwb3J0cyBqb2IgY29udHJvbCwgYnV0IHVuZGVyIGEgc2hlbGwgdGhhdAorICAg ICAgIGRvZXNuJ3QuIElmIHRoYXQncyBub3QgdGhlIGNhc2UsIGxvb2sgaW4gdGhlIGNvbmdtKCkg YW5kIHBzdXNwZW5kKCkKKyAgICAgICByb3V0aW5lcyBpbiBbMjIwXWNrdXRpby5jIGFuZCBzZWUg aWYgeW91IGNhbiBmaWd1cmUgb3V0IHdoYXQncworICAgICAgIHdyb25nLiBJZiB5b3UgY2FuJ3Qs IHJlYnVpbGQgd2l0aCAtRE5PSkMuCisgICAgby4gR2l2ZSBhIFNFVCBMSU5FIGNvbW1hbmQgZm9y IGEgZGlhbG91dCBkZXZpY2UsIGUuZy4gInNldCBsaW5lCisgICAgICAgL2Rldi90dHkwMCIuIElm IHlvdSBnb3Qgc29tZSBraW5kIG9mIHBlcm1pc3Npb24gb3IgYWNjZXNzIGRlbmllZAorICAgICAg IG1lc3NhZ2UsIGdvIHJlYWQgWzIyMV1TZWN0aW9uIDEwIGFuZCB0aGVuIGNvbWUgYmFjayBoZXJl LgorICAgIHAuIEFmdGVyIGdpdmluZyBhIHN1Y2Nlc3NmdWwgU0VUIExJTkUgY29tbWFuZCwgdHlw ZSAic2hvdyBjb21tIiB0byBzZWUKKyAgICAgICB0aGUgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJz LiBEbyB0aGV5IG1ha2Ugc2Vuc2U/CisgICAgcS4gVHlwZSAic2V0IHNwZWVkID8iIGFuZCBvYnNl cnZlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBzcGVlZHMuIElzIGl0CisgICAgICAgd2hhdCB5b3Ug ZXhwZWN0ZWQ/IElmIG5vdCwgc2VlIFsyMjJdU2VjdGlvbiAyKSBvZiB0aGUKKyAgICAgICBbMjIz XUNvbmZpZ3VyYXRpb25zIE9wdGlvbnMgZG9jdW1lbnQuCisgICAgci4gR2l2ZSBhIFNFVCBTUEVF RCBjb21tYW5kIHRvIGNoYW5nZSB0aGUgZGV2aWNlJ3Mgc3BlZWQuIERpZCBpdCB3b3JrPworICAg ICAgIChUeXBlICJzaG93IGNvbW0iIGFnYWluIHRvIGNoZWNrLikKKyAgICBzLiBUcnkgZGlhbGlu ZyBvdXQ6IFNFVCBNT0RFTSBUWVBFICwgU0VUIExJTkUgLCBTRVQgU1BFRUQgLCBESUFMIC4gSWYK KyAgICAgICBpdCBkb2Vzbid0IHdvcmssIGtlZXAgcmVhZGluZy4gQWZ0ZXIgZGlhbGluZywgY2Fu IHlvdSBSRURJQUw/CisgICAgdC4gSWYgeW91ciB2ZXJzaW9uIHdhcyBidWlsdCB3aXRoIFRDUC9J UCBuZXR3b3JrIHN1cHBvcnQsIHRyeSB0aGUKKyAgICAgICBURUxORVQgY29tbWFuZC4KKyAgICB1 LiBUcmFuc2ZlciBzb21lIGZpbGVzIGluIHJlbW90ZSBtb2RlIG9uIGluY29taW5nIGFzeW5jaHJv bm91cyBzZXJpYWwKKyAgICAgICAoZGlyZWN0IG9yIG1vZGVtKSBjb25uZWN0aW9ucywgYW5kIG9u IGluY29taW5nIG5ldHdvcmsgKHRlbG5ldCwKKyAgICAgICBybG9naW4sIHRlcm1pbmFsIHNlcnZl cikgY29ubmVjdGlvbnMuIElmIHlvdSBnZXQgbG90cyBvZiBlcnJvcnMsCisgICAgICAgdHJ5IGRp ZmZlcmVudCBTRVQgRkxPVyBzZXR0aW5ncyBvbiB0aGUgcmVtb3RlIEtlcm1pdCBwcm9ncmFtLgor ICAgIHYuIEVzdGFibGlzaCBhIHNlcmlhbCBjb25uZWN0aW9uIGZyb20gQy1LZXJtaXQgdG8gYW5v dGhlciBjb21wdXRlcgorICAgICAgIChkaXJlY3Qgb3IgZGlhbGVkKSBhbmQgdHJhbnNmZXIgc29t ZSBmaWxlcy4gSWYgeW91IGhhdmUgbmV0d29yaworICAgICAgIHN1cHBvcnQsIGRvIHRoZSBzYW1l IHdpdGggYSBuZXR3b3JrIGNvbm5lY3Rpb24uCisgICAgdy4gSWYgeW91ciB2ZXJzaW9uIHdhcyBi dWlsdCB3aXRoIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5CisgICAgICAgc3VwcG9y dCwgY2hlY2sgdGhhdCBpdCB3b3JrcyBkdXJpbmcgbG9jYWwtbW9kZSBmaWxlIHRyYW5zZmVyLiBB bHNvLAorICAgICAgIGNoZWNrIEMtS2VybWl0J3Mgb3BlcmF0aW9uIGFmdGVyd2FyZHM6IGlzIHRo ZSBlY2hvaW5nIGZ1bm55PyBldGMKKyAgICAgICBldGMuIElmIHRoZXJlIGFyZSBwcm9ibGVtcywg c2VlIFsyMjRdU2VjdGlvbiA0LgorICAgIHguIElmIHlvdXIgdmVyc2lvbiB3YXMgYnVpbHQgd2l0 aCBzY3JpcHQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugc3VwcG9ydCwKKyAgICAgICBUQUtFIHRoZSBj a2VkZW1vLmtzYyBmaWxlIHRvIGdpdmUgaXQgYSB3b3Jrb3V0LgorICAgIHkuIERvZXMgQy1LZXJt aXQgaW50ZXJsb2NrIGNvcnJlY3RseSB3aXRoIFVVQ1AtZmFtaWx5IHByb2dyYW1zIChjdSwKKyAg ICAgICB0aXAsIHV1Y3AsIGV0Yyk/IElmIG5vdCwgcmVhZCB0aGUgc2VjdGlvbiBbMjI1XURJQUxJ TkcgT1VUIEFORAorICAgICAgIENPT1JESU5BVElORyBXSVRIIFVVQ1AgYmVsb3cuCisgICAgei4g TW9kZW0gc2lnbmFscy4uLiBHaXZlIGEgU0VUIExJTkUgY29tbWFuZCB0byBhIHNlcmlhbCBkZXZp Y2UgYW5kCisgICAgICAgdGhlbiB0eXBlIHRoZSBTSE9XIE1PREVNIGNvbW1hbmQuIElmIGl0IHNh eXMgIk1vZGVtIHNpZ25hbHMKKyAgICAgICB1bmF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24gb2Yg S2VybWl0IiwgdGhlbiB5b3UgbWlnaHQgd2FudCB0byBsb29rCisgICAgICAgYXQgdGhlIHR0Z21k bSgpIHJvdXRpbmUgaW4gWzIyNl1ja3V0aW8uYyBhbmQgYWRkIHRoZSBuZWVkZWQgY29kZSAtLQor ICAgICAgIGlmIGluZGVlZCB5b3VyIHZlcnNpb24gb2YgVW5peCBwcm92aWRlcyBhIHdheSB0byBn ZXQgbW9kZW0gc2lnbmFscworICAgICAgIChzb21lIGRvbid0OyBlLmcuIG1vZGVtIHNpZ25hbHMg YXJlIGEgZm9yZWlnbiBjb25jZXB0IHRvIFBPU0lYLAorICAgICAgIHJlcXVpcmluZyBwb2xpdGlj YWxseSBpbmNvcnJlY3Qgd29ya2Fyb3VuZHMpLgorICAgYWEuIElmIGl0IHNheXMgIk1vZGVtIHNp Z25hbHMgdW5hdmFpbGFibGUiLCB0aGVuIGl0IGlzIGxpa2VseSB0aGF0IHRoZQorICAgICAgIEFQ SSBmb3IgZ2V0dGluZyBtb2RlbSBzaWduYWxzIGlzIHByb3ZpZGVkLCBidXQgaXQgZG9lc24ndCBh Y3R1YWxseQorICAgICAgIGRvIGFueXRoaW5nIChlLmcuIGlvY3RsKHR0eWZkLFRJT0NNR0VULCZ4 KSByZXR1cm5zIEVJTlZBTCkuCisgICBhYi4gSW4gYW55IGNhc2UsIGl0IHN0aWxsIHNob3VsZCBi ZSBhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIERUUiBzaWduYWwuCisgICAgICAgVG8gdGVzdCwgU0VU IExJTkUgLCBTRVQgTU9ERU0gTk9ORSwgYW5kIEhBTkdVUC4gVGhlIERUUiBsaWdodAorICAgICAg IHNob3VsZCBnbyBvdXQgbW9tZW50YXJpbHkuIElmIGl0IGRvZXNuJ3QsIHNlZSBpZiB5b3UgY2Fu IGFkZCB0aGUKKyAgICAgICBuZWVkZWQgY29kZSBmb3IgeW91ciBzeXN0ZW0gdG8gdGhlIHR0aGFu ZygpIHJvdXRpbmUgaW4KKyAgICAgICBbMjI3XWNrdXRpby5jLgorICAgYWMuIElmIHlvdXIgdmVy c2lvbiBvZiBLZXJtaXQgaGFzIHRoZSBTRVQgRkxPVyBSVFMvQ1RTIGNvbW1hbmQsIGNoZWNrCisg ICAgICAgdG8gc2VlIGlmIGl0IHdvcmtzOiBnaXZlIEtlcm1pdCB0aGlzIGNvbW1hbmQsIHNldCB5 b3VyIG1vZGVtIGZvcgorICAgICAgIFJUUy9DVFMsIHRyYW5zZmVyIHNvbWUgZmlsZXMgKHVzaW5n IGJpZyBwYWNrZXQgYW5kIHdpbmRvdyBzaXplcykKKyAgICAgICBhbmQgd2F0Y2ggdGhlIFJUUyBh bmQgQ1RTIGxpZ2h0cyBvbiB0aGUgbW9kZW0uIElmIHRoZXkgZ28gb24gYW5kCisgICAgICAgb2Zm IChhbmQgS2VybWl0IGRvZXMgbm90IGdldCBwYWNrZXQgZXJyb3JzKSwgdGhlbiBpdCB3b3Jrcy4g SWYgeW91cgorICAgICAgIHZlcnNpb24gb2YgS2VybWl0IGRvZXMgbm90IGhhdmUgdGhpcyBjb21t YW5kLCBidXQgeW91ciB2ZXJzaW9uIG9mCisgICAgICAgVW5peCBkb2VzIHN1cHBvcnQgaGFyZHdh cmUgZmxvdyBjb250cm9sLCB0YWtlIGEgbG9vayBhdCB0aGUKKyAgICAgICB0dGhmbG93KCkgY29t bWFuZCBpbiBbMjI4XWNrdXRpby5jIGFuZCBzZWUgaWYgeW91IGNhbiBhZGQgdGhlCisgICAgICAg bmVlZGVkIGNvZGUgKHNlZSB0aGUgc2VjdGlvbiBvbiBbMjI5XUhBUkRXQVJFIEZMT1cgQ09OVFJP TCBiZWxvdykuCisgICAgICAgKEFuZCBwbGVhc2UgWzIzMF1zZW5kIGJhY2sgYW55IGFkZGVkIGNv ZGUsIHNvIHRoYXQgb3RoZXJzIGNhbgorICAgICAgIGJlbmVmaXQgZnJvbSBpdCBhbmQgaXQgY2Fu IGJlIGNhcnJpZWQgZm9yd2FyZCBpbnRvIGZ1dHVyZQorICAgICAgIHJlbGVhc2VzLikKKyAgIGFk LiBJZiBDLUtlcm1pdCBzdGFydHMgbm9ybWFsbHkgYW5kIGlzc3VlcyBpdHMgcHJvbXB0LCBlY2hv aW5nIGlzCisgICAgICAgbm9ybWFsLCBldGMsIGJ1dCB0aGVuIGFmdGVyIHJldHVybmluZyBmcm9t IGEgQ09OTkVDVCBzZXNzaW9uLCB0aGUKKyAgICAgICBwcm9tcHQgbm8gbG9uZ2VyIGFwcGVhcnMs IHRyeSByZWJ1aWxkaW5nIHdpdGggLURDS0NPTklOVEI0Q0IuCisgICBhZS4gKDguMC4yMDYgb3Ig bGF0ZXIpIFR5cGUgc29tZSBjb21tYW5kcyBhdCB0aGUgQy1LZXJtaXQgcHJvbXB0LiBDYW4KKyAg ICAgICB5b3UgdXNlIHRoZSBVcC1hcnJvdyBhbmQgRG93bi1hcnJvdyBrZXlzIG9uIHlvdXIga2V5 Ym9hcmQgdG8gYWNjZXNzCisgICAgICAgS2VybWl0J3MgY29tbWFuZCBoaXN0b3J5PyBJZiBub3Qs IGFuZCB5b3UncmUgYSBwcm9ncmFtbWVyLCB0YWtlIGEKKyAgICAgICBsb29rIGF0IHRoZSBVU0Vf QVJST1dLRVlTIHNlY3Rpb25zIG9mIGNrdWNtZC5jLgorCis4LiBSRURVQ0lORyBUSEUgU0laRSBP RiBUSEUgRVhFQ1VUQUJMRSBQUk9HUkFNIElNQUdFCisKKyAgIFsgWzIzMV1Ub3AgXSBbIFsyMzJd Q29udGVudHMgXSBbIFsyMzNdTmV4dCBdIFsgWzIzNF1QcmV2aW91cyBdCisKKyAgIEFsc28gc2Vl OiBbMjM1XUMtS2VybWl0IENvbmZpZ3VyYXRpb24gT3B0aW9ucworCisgICAgYS4gTWFueSBvZiBD LUtlcm1pdCdzIG9wdGlvbnMgYW5kIGZlYXR1cmVzIGNhbiBiZSBkZXNlbGVjdGVkIGF0CisgICAg ICAgY29tcGlsZSB0aW1lLiBUaGUgZ3JlYXRlc3Qgc2F2aW5ncyBhdCB0aGUgbGVhc3Qgc2Fjcmlm aWNlIGluCisgICAgICAgZnVuY3Rpb25hbGl0eSBpcyB0byBkaXNhYmxlIHRoZSBsb2dnaW5nIG9m IGRlYnVnIGluZm9ybWF0aW9uIGJ5CisgICAgICAgZGVmaW5pbmcgTk9ERUJVRyBkdXJpbmcgY29t cGlsYXRpb24uIFNlZSB0aGUgWzIzNl1Db25maWd1cmF0aW9ucworICAgICAgIE9wdGlvbnMgZG9j dW1lbnQgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgICAgYi4gVXNlIHNoYXJlZCBsaWJyYXJp ZXMgcmF0aGVyIHRoYW4gc3RhdGljIGxpbmtpbmcuIFRoaXMgaXMgdGhlCisgICAgICAgZGVmYXVs dCBvbiBtYW55IFVuaXggc3lzdGVtcyBhbnl3YXkuIEhvd2V2ZXIsIGV4ZWN1dGFibGVzIGJ1aWx0 IGZvcgorICAgICAgIGR5bmFtaWMgbGlua2luZyB3aXRoIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGdl bmVyYWxseSBub3QgcG9ydGFibGUKKyAgICAgICBhd2F5IGZyb20gdGhlIG1hY2hpbmUgdGhleSB3 ZXJlIGJ1aWx0IG9uLCBzbyB0aGlzIGlzIHJlY29tbWVuZGVkIGlmCisgICAgICAgdGhlIGJpbmFy eSBpcyBmb3IgeW91ciB1c2Ugb25seS4KKyAgICBjLiBNb3N0IFVuaXggc3lzdGVtcyBoYXZlIGEg InN0cmlwIiBjb21tYW5kIHRvIHJlbW92ZSBzeW1ib2wgdGFibGUKKyAgICAgICBpbmZvcm1hdGlv biBmcm9tIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpbWFnZS4gIm1hbiBzdHJpcCIgZm9yCisgICAg ICAgZnVydGhlciBpbmZvcm1hdGlvbi4gVGhlIHNhbWUgZWZmZWN0IGNhbiBiZSBhY2hpZXZlZCBi eSBpbmNsdWRpbmcKKyAgICAgICAiLXMiIGFtb25nIHRoZSBsaW5rIGZsYWdzIHdoZW4gYnVpbGRp bmcgQy1LZXJtaXQuCisgICAgZC4gU0NPLCBJbnRlcmFjdGl2ZSwgYW5kIHNvbWUgb3RoZXIgVW5p eCB2ZXJzaW9ucyBoYXZlIGFuICJtY3MiCisgICAgICAgY29tbWFuZC4gIm1jcyAtZCB3ZXJtaXQi IGNhbiBiZSB1c2VkIHRvIGRlbGV0ZSB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgIi5jb21t ZW50IiBzZWN0aW9uIGZyb20gdGhlIGV4ZWN1dGFibGUgcHJvZ3JhbSBpbWFnZS4KKyAgICBlLiBN YW55IG1vZGVybiBvcHRpbWl6ZXJzIGNhbiBiZSBpbnN0cnVjdGVkIHRvIG9wdGltaXplIGZvciBz cGFjZQorICAgICAgIHJhdGhlciB0aGFuIGV4ZWN1dGlvbiBlZmZpY2llbmN5LiBDaGVjayB0aGUg Q0ZMQUdTIGluIHRoZSBtYWtlZmlsZQorICAgICAgIHRhcmdldCwgYWRqdXN0IGFzIGRlc2lyZWQu CisKKzkuIFVOSVggVkVSU0lPTlMKKworICAgWyBbMjM3XVRvcCBdIFsgWzIzOF1Db250ZW50cyBd IFsgWzIzOV1OZXh0IF0gWyBbMjQwXVByZXZpb3VzIF0KKworICAgU0VDVElPTiBDT05URU5UUwor Cis5LjEgWzI0MV1TdGFuZGFyZHMKKyAgICAgOS4xLjEuIFsyNDJdUE9TSVgKKyAgICAgOS4xLjIu IFsyNDNdQU5TSSBDCisgICAgIDkuMS4zLiBbMjQ0XU90aGVyIFN0YW5kYXJkcworOS4yLiBbMjQ1 XUxpYnJhcnkgSXNzdWVzCis5LjMuIFsyNDZdVW5peCBGaWxlIFN5c3RlbSBQZWN1bGlhcml0aWVz Cis5LjQuIFsyNDddSGFyZHdhcmUgRmxvdyBDb250cm9sCis5LjUuIFsyNDhdVGVybWluYWwgU3Bl ZWRzCis5LjYuIFsyNDldTWlsbGlzZWNvbmQgU2xlZXBzCis5LjcuIFsyNTBdTm9uZGVzdHJ1Y3Rp dmUgSW5wdXQgQnVmZmVyIFBlZWtpbmcKKzkuOC4gWzI1MV1PdGhlciBTeXN0ZW0tRGVwZW5kZW50 IEZlYXR1cmVzCis5LjkuIFsyNTJdVGVybWluYWwgSW50ZXJydXB0aW9uCisKKyAgIFRoZXJlIGFy ZSBzZXZlcmFsIG1ham9yIHZhcmlldGllcyBvZiBVbml4OiBCZWxsIExhYm9yYXRvcmllcyBTZXZl bnRoCisgICBFZGl0aW9uLCBBVCZUIFN5c3RlbSBWLCBCZXJrZWxleSBTdGFuZGFyZCBEaXN0cmli dXRpb24gKEJTRCksIGFuZAorICAgUE9TSVguIEVhY2ggaGFzIG1hbnksIG1hbnkgc3VidmFyaWV0 aWVzIGFuZCBkZXNjZW5kZW50cywgYW5kIHRoZXJlIGFyZQorICAgYWxzbyBoeWJyaWRzIHRoYXQg ZXhoaWJpdCBzeW1wdG9tcyBvZiB0d28gb3IgbW9yZSB2YXJpZXRpZXMsIHBsdXMKKyAgIHNwZWNp YWwgcXVpcmtzIG9mIHRoZWlyIG93bi4KKworICAgU2V2ZW50aCBlZGl0aW9uIHZlcnNpb25zIG9m IEMtS2VybWl0IGluY2x1ZGUgdGhlIGNvbXBpbGUtdGltZSBvcHRpb24KKyAgIC1EVjcgaW4gdGhl IENGTEFHUyBzdHJpbmcgaW4gdGhlIG1ha2VmaWxlIHRhcmdldC4gVmFyaW91cyBWNy1iYXNlZAor ICAgaW1wbGVtZW50YXRpb25zIGFyZSBhbHNvIHN1cHBvcnRlZDogLURDT0hFUkVOVCwgLURNSU5J WCwgZXRjLgorCisgICBBVCZULWJhc2VkIHZlcnNpb25zIG9mIFVuaXggS2VybWl0IGluY2x1ZGUg dGhlIGNvbXBpbGUtdGltZSBvcHRpb24KKyAgIC1EQVRUU1YgKHN0YW5kaW5nIGZvciBBVCZtcDtU IFVuaXggU3lzdGVtIFYpLiBUaGlzIGFwcGxpZXMgdG8gU3lzdGVtCisgICBJSUkgYW5kIHRvIFN5 c3RlbSBWIHVwIHRvIGFuZCBpbmNsdWRpbmcgUmVsZWFzZSAyLiBGb3IgU3lzdGVtIFYgUmVsZWFz ZQorICAgMywgdGhlIGZsYWcgLURTVlIzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgKHdoaWNoIGFs c28gaW1wbGllcyAtREFUVFNWKS4KKyAgIFRoaXMgaXMgYmVjYXVzZSB0aGUgZGF0YSB0eXBlIG9m IHNpZ25hbCgpIGFuZCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucworICAgd2FzIGNoYW5nZWQgYmV0 d2VlbiBTVlIyIGFuZCBTVlIzLiBGb3IgU3lzdGVtIFYgUmVsZWFzZSA0LCBpbmNsdWRlCisgICAt RFNWUjQgYmVjYXVzZSBvZiBjaGFuZ2VzIGluIFVVQ1AgbG9ja2ZpbGUgY29udmVudGlvbnM7IHRo aXMgYWxzbworICAgaW1wbGllcyAtRFNWUjMgYW5kIC1EQVRUU1YuCisKKyAgIEZvciBCU0QsIHRo ZSBmbGFnIC1CU0R4eCBtdXN0IGJlIGluY2x1ZGVkLCB3aGVyZSB4eCBpcyB0aGUgQlNEIHZlcnNp b24KKyAgIG51bWJlciwgZm9yIGV4YW1wbGUgQlNENCAoZm9yIHZlcnNpb24gNC4yIG9yIGxhdGVy LCB1c2luZyBvbmx5IDQuMgorICAgZmVhdHVyZXMpLCAtREJTRDQxIChmb3IgQlNEIDQuMSBvbmx5 KSwgLURCU0Q0MyAoZm9yIDQuMyksIC1EQlNEMjkgKEJTRAorICAgMi45IGZvciBERUMgUERQLTEx cykuIC1EQlNENDQgaXMgZm9yIDQuNEJTRCwgd2hpY2ggaXMgdGhlIGJhc2lzIG9mCisgICBGcmVl QlNELCBOZXRCU0QsIE9wZW5CU0QsIEJTREksIGFuZCBNYWMgT1MgWCwgYW5kIHdoaWNoIGNvbnRh aW5zIG1hbnkKKyAgIFBPU0lYIGZlYXR1cmVzLCBhbmQgaGFzIGxpdHRsZSByZWxhdGlvbiB0byA0 LjNCU0QgYW5kIGVhcmxpZXIuCisKKyAgIEZvciBQT1NJWCwgaW5jbHVkZSB0aGUgZmxhZyAtRFBP U0lYLiBQT1NJWCBkZWZpbmVzIGEgd2hvbGUgbmV3IHNldCBvZgorICAgdGVybWluYWwgaS9vIGZ1 bmN0aW9ucyB0aGF0IGFyZSBub3QgZm91bmQgaW4gdHJhZGl0aW9uYWwgQVQmVCBvcgorICAgQmVy a2VsZXkgaW1wbGVtZW50YXRpb25zLCBhbmQgYWxzbyBkZWZpbmVzIHRoZSBzeW1ib2wgX1BPU0lY X1NPVVJDRSwKKyAgIHdoaWNoIGlzIHVzZWQgaW4gbWFueSBzeXN0ZW0gYW5kIGxpYnJhcnkgaGVh ZGVyIGZpbGVzLCBtYWlubHkgdG8KKyAgIGRpc2FibGUgbm9uLVBPU0lYIChpLmUuIHVzZWZ1bCkg ZmVhdHVyZXMuCisKKyAgIE5vdGUgKGNpcmNhIDE5OTcpOiBJbiBvcmRlciB0byBlbmFibGUgc2Vy aWFsIHNwZWVkcyBoaWdoZXIgdGhhbiAzODQwMAorICAgYnBzLCBpdCBpcyBnZW5lcmFsbHkgbmVj ZXNzYXJ5IHRvIGFkZCAtRFBPU0lYIChhbW9uZyBvdGhlciB0aGluZ3MpLAorICAgc2luY2UgdGhl IG9sZGVyIHRlcm1pbmFsIEFQSXMgY2FuIG5vdCBhY2NvbW1vZGF0ZSB0aGUgbmV3IHNwZWVkcyAt LSBvdXQKKyAgIG8nIGJpdHMuIEJ1dCB0aGlzIG9mdGVuIGFsc28gbWVhbnMgd2hvbGVzYWxlIGNv bnZlcnNpb24gdG8gUE9TSVggQVBJcy4KKyAgIEluIGdlbmVyYWwsIGp1c3QgdHJ5IGFkZGluZyAt RFBPU0lYIGFuZCB0aGVuIHNlZSB3aGF0IGdvZXMgd3JvbmcuIEJlCisgICB3YXJ5IG9mIGZlYXR1 cmVzIGRpc2FwcGVhcmluZzogd2hlbiBfUE9TSVhfU09VUkNFIGlzIGRlZmluZWQsIGFsbCBzb3J0 cworICAgb2YgdGhpbmdzIHRoYXQgd2VyZSBwZXJmZWN0bHkgT0sgYmVmb3JlIHN1ZGRlbmx5IGJl Y29tZSBwb2xpdGljYWxseQorICAgaW5jb3JyZWN0IC0tIGxpa2UgcmVhZGluZyBtb2RlbSBzaWdu YWxzLCBkb2luZyBoYXJkd2FyZSBmbG93IGNvbnRyb2wsCisgICBldGMuIFBPU0lYIHdhcyBldmlk ZW50bHkgbm90IGRlc2lnbmVkIHdpdGggc2VyaWFsIGNvbW11bmljYXRpb24gaW4KKyAgIG1pbmQh CisKKyAgIENhc2UgaW4gcG9pbnQ6IEluIFVuaXhXYXJlIDcuMCwgI2RlZmluZSdpbmcgUE9TSVgg Y2F1c2VzIHN0cmljdG5lc3MKKyAgIGNsYXVzZXMgaW4gdGhlIGhlYWRlciBmaWxlcyB0byB0YWtl IGVmZmVjdC4gVGhlc2UgcHJldmVudCA8c3lzL3RpbWUuaD4KKyAgIGZyb20gZGVmaW5pbmcgdGhl IHRpbWV2YWwgYW5kIHRpbWV6b25lIHN0cnVjdHMsIHdoaWNoIGFyZSBuZWVkZWQgZm9yCisgICBh bGwgc29ydHMgb2YgdGhpbmdzIChsaWtlIHNlbGVjdCgpKS4gVGh1cywgaWYgd2Ugd2FudCB0aGUg aGlnaCBzZXJpYWwKKyAgIHNwZWVkcywgd2UgaGF2ZSB0byBjaXJjdW12ZW50IHRoZSBQT1NJWCBj bGF1c2VzLgorCisgICBTaW1pbGFybHkgaW4gU0NPIE9wZW5TZXJ2ZXIgUjUuMC40IHdoZXJlLCBh Z2Fpbiwgd2UgbXVzdCB1c2UgdGhlIFBPU0lYCisgICBBUElzIHRvIGdldCBhdCBzZXJpYWwgc3Bl ZWRzIGhpZ2hlciB0aGFuIDM4NDAwLCBidXQgdGhlbiBkb2luZyBzbworICAgcmVtb3ZlcyBoYXJk d2FyZSBmbG93IGNvbnRyb2wgLS0ganVzdCB3aGVuIHdlIG5lZWQgaXQgbW9zdCEgSW4gY2FzZXMK KyAgIGxpa2UgdGhpcywgZGlydHkgdHJpY2tzIGFyZSB0aGUgb25seSByZWNvdXJzZSAoc2VhcmNo IGZvciBTQ09fT1NSNTA0IGluCisgICBbMjUzXWNrdXRpby5jIGZvciBleGFtcGxlcykuCisKKyAg IEZvciByZWFzb25zIGxpa2UgdGhpcywgVW5peCBpbXBsZW1lbnRhdGlvbnMgdGVuZCB0byBiZSBu ZWl0aGVyIHB1cmUKKyAgIEFUJlQgbm9yIHB1cmUgQlNEIG5vciBwdXJlIFBPU0lYLCBidXQgYSBt aXh0dXJlIG9mIHR3byBvciBtb3JlIG9mCisgICB0aGVzZSwgd2l0aCAiY29tcGF0aWJpbGl0eSBm ZWF0dXJlcyIgYWxsb3dpbmcgZGlmZmVyZW50IHZhcmlldGllcyBvZgorICAgcHJvZ3JhbXMgdG8g YmUgYnVpbHQgb24gdGhlIHNhbWUgY29tcHV0ZXIuIEluIGdlbmVyYWwsIEtlcm1pdCB0cmllcyBu b3QKKyAgIHRvIG1peCBhbmQgbWF0Y2ggYnV0IHRvIGtlZXAgYSBjb25zaXN0ZW50IHJlcGVydG9p cmUgdGhyb3VnaG91dC4KKyAgIEhvd2V2ZXIsIHRoZXJlIGFyZSBjZXJ0YWluIFVuaXggaW1wbGVt ZW50YXRpb25zIHRoYXQgb25seSB3b3JrIHdoZW4geW91CisgICBtaXggYW5kIG1hdGNoLiBGb3Ig ZXhhbXBsZSwgdGhlIFNpbGljb24gR3JhcGhpY3MgSVJJWCBvcGVyYXRpbmcgc3lzdGVtCisgICAo cHJpb3IgdG8gdmVyc2lvbiAzLjMpIGlzIGFuIEFUJlQgVW5peCBidXQgd2l0aCBhIEJTRCBmaWxl IHN5c3RlbS4gVGhlCisgICBvbmx5IHdheSB5b3UgY2FuIGJ1aWxkIEtlcm1pdCBzdWNjZXNzZnVs bHkgZm9yIHRoaXMgY29uZmlndXJhdGlvbiBpcyB0bworICAgaW5jbHVkZSAtRFNWUjMgcGx1cyB0 aGUgc3BlY2lhbCBvcHRpb24gLURMT05HRk4sIG1lYW5pbmcgInByZXRlbmQgSSB3YXMKKyAgIGJ1 aWx0IHdpdGggLURCU0R4eCB3aGVuIGl0J3MgdGltZSB0byBjb21waWxlIGZpbGUtcmVsYXRlZCBj b2RlIi4gU2VlCisgICB0aGUgImlyaXMiIG1ha2VmaWxlIHRhcmdldC4KKworOS4xLiBTdGFuZGFy ZHMKKworICAgWyBbMjU0XVRvcCBdIFsgWzI1NV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjU2XUNv bnRlbnRzIF0gWyBbMjU3XU5leHQgXQorCisgICBTVUJTRUNUSU9OIENPTlRFTlRTCisKKzkuMS4x LiBbMjU4XVBPU0lYCis5LjEuMi4gWzI1OV1BTlNJIEMKKzkuMS4zLiBbMjYwXU90aGVyIFN0YW5k YXJkcworCisgICBJbiBlZGl0cyAxNjYtMTY3ICgxOTg4LTg5KSwgQy1LZXJtaXQgd2FzIGhlYXZp bHkgbW9kaWZpZWQgdG8gdHJ5IHRvCisgICBrZWVwIGFicmVhc3Qgb2YgbmV3IHN0YW5kYXJkcyB3 aGlsZSBzdGlsbCByZW1haW5pbmcgY29tcGF0aWJsZSB3aXRoIG9sZAorICAgdmVyc2lvbnMgb2Yg QyBhbmQgVW5peC4gVGhlcmUgYXJlIHR3byBuZXcgc3RhbmRhcmRzIG9mIGludGVyZXN0OiBBTlNJ IEMKKyAgIChhcyBkZXNjcmliZWQgaW4gS2VybmlnaGFuIGFuZCBSaXRjaGllLCAiVGhlIEMgUHJv Z3JhbW1pbmcgTGFuZ3VhZ2UiLAorICAgU2Vjb25kIEVkaXRpb24sIFByZW50aWNlIEhhbGwsIDE5 ODgpIGFuZCBQT1NJWC4xIChJRUVFIFN0YW5kYXJkIDEwMDMuMQorICAgYW5kIElTTy9JRUMgOTk0 NS0xLCAxOTkwLCAiUG9ydGFibGUgT3BlcmF0aW5nIFN5c3RlbSBJbnRlcmZhY2UiKS4gVGhlc2UK KyAgIHR3byBzdGFuZGFyZHMgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggZWFjaCBvdGhlcjogeW91 IGNhbiBidWlsZAorICAgQy1LZXJtaXQgd2l0aCBhIG5vbi1BTlNJIGNvbXBpbGVyIGZvciBhIFBP U0lYIHN5c3RlbSwgb3IgZm9yIGEKKyAgIG5vbi1QT1NJWCBzeXN0ZW0gd2l0aCB3aXRoIGFuIEFO U0kgY29tcGlsZXIuCisKKzkuMS4xLiBQT1NJWAorCisgICBQT1NJWC4xIGRlZmluZXMgYSByZXBl cnRvaXJlIG9mIHN5c3RlbSBmdW5jdGlvbnMgYW5kIGhlYWRlciBmaWxlcyBmb3IKKyAgIHVzZSBi eSBDIGxhbmd1YWdlIHByb2dyYW1zLiBNb3N0IG5vdGFibHksIHRoZSBpb2N0bCgpIGZ1bmN0aW9u IGlzIG5vdAorICAgYWxsb3dlZCBpbiBQT1NJWDsgYWxsIGlvY3RsKCkgZnVuY3Rpb25zIGhhdmUg YmVlbiByZXBsYWNlZCBieQorICAgZGV2aWNlLXNwZWNpZmljIGZ1bmN0aW9ucyBsaWtlIHRjc2V0 YXR0cigpLCB0Y3NlbmRicmVhaygpLCBldGMuCisKKyAgIENvbXB1dGVyIHN5c3RlbXMgdGhhdCBj bGFpbSBzb21lIGRlZ3JlZSBvZiBQT1NJWCBjb21wbGlhbmNlIGhhdmUgbWFkZQorICAgc29tZSBh dHRlbXB0IHRvIHB1dCB0aGVpciBoZWFkZXIgZmlsZXMgaW4gdGhlIHJpZ2h0IHBsYWNlcyBhbmQg Z2l2ZQorICAgdGhlbSB0aGUgcmlnaHQgbmFtZXMsIGFuZCB0byBwcm92aWRlIHN5c3RlbSBsaWJy YXJ5IGZ1bmN0aW9ucyB3aXRoIHRoZQorICAgcmlnaHQgbmFtZXMgYW5kIGNhbGxpbmcgY29udmVu dGlvbnMuIFdpdGhpbiB0aGUgaGVhZGVyIGZpbGVzLAorICAgUE9TSVgtY29tcGxpYW50IGZ1bmN0 aW9ucyBhcmUgc3VwcG9zZWQgdG8gYmUgd2l0aGluICNpZmRlZgorICAgX1BPU0lYX1NPVVJDRS4u I2VuZGlmIGNvbmRpdGlvbmFscywgYW5kIG5vbi1QT1NJWCBpdGVtcyBhcmUgbm90IHdpdGhpbgor ICAgdGhlc2UgY29uZGl0aW9uYWxzLgorCisgICBJZiBLZXJtaXQgaXMgYnVpbHQgd2l0aCBuZWl0 aGVyIC1EX1BPU0lYX1NPVVJDRSBub3IgLURQT1NJWCwgdGhlCisgICBmdW5jdGlvbnMgYW5kIGhl YWRlciBmaWxlcyBvZiB0aGUgc2VsZWN0ZWQgdmVyc2lvbiBvZiBVbml4IChvciBWTVMsCisgICBl dGMpIGFyZSB1c2VkIGFjY29yZGluZyB0byB0aGUgQ0ZMQUdTIEtlcm1pdCB3YXMgYnVpbHQgd2l0 aC4KKworICAgSWYgS2VybWl0IGlzIGJ1aWx0IHdpdGggLURfUE9TSVhfU09VUkNFIGJ1dCBub3Qg LURQT1NJWCwgdGhlbiBvbmUgb2YKKyAgIHRoZSAtREJTRCBvciAtREFUVFNWIGZsYWdzIChvciBv bmUgdGhhdCBpbXBsaWVzIHRoZW0pIG11c3QgYWxzbyBiZQorICAgZGVmaW5lZCwgYnV0IGl0IHN0 aWxsIHVzZXMgb25seSB0aGUgUE9TSVggZmVhdHVyZXMgaW4gdGhlIHN5c3RlbSBoZWFkZXIKKyAg IGZpbGVzLiBUaGlzIGFsbG93cyBDLUtlcm1pdCB0byBiZSBidWlsdCBvbiBCU0Qgb3IgQVQmVCBz eXN0ZW1zIHRoYXQKKyAgIGhhdmUgc29tZSBkZWdyZWUgb2YgUE9TSVggY29tcGxpYW5jZSwgYnV0 IHN0aWxsIHVzZSBCU0Qgb3IgQVQmVAorICAgc3BlY2lmaWMgZmVhdHVyZXMuCisKKyAgIFRoZSBk aWxlbW1hIGlzIHRoaXM6IGl0IGlzIG9mdGVuIG5lY2Vzc2FyeSB0byBkZWZpbmUgX1BPU0lYX1NP VVJDRSB0bworICAgZ2V0IGF0IG5ldyBvciBtb2Rlcm4gZmVhdHVyZXMsIHN1Y2ggYXMgaGlnaCBz ZXJpYWwgc3BlZWRzIGFuZCB0aGUgQVBJcworICAgdG8gZGVhbCB3aXRoIHRoZW0uIEJ1dCBkZWZp bmluZyBfUE9TSVhfU09VUkNFIGFsc28gaGlkZXMgb3RoZXIgQVBJcworICAgdGhhdCBLZXJtaXQg bmVlZHMsIGZvciBleGFtcGxlIHRoZSBvbmVzIGRlYWxpbmcgd2l0aCBtb2RlbSBzaWduYWxzCisg ICAob3RoZXJzIGFyZSBsaXN0ZWQganVzdCBiZWxvdykuIFRodXMgYWxsIHNvcnRzIG9mIGhpZGVv dXMgY29udG9ydGlvbnMKKyAgIGFyZSBvZnRlbiByZXF1aXJlZCB0byBnZXQgYSBmdWxsIHNldCBv ZiBmZWF0dXJlcy4KKworICAgVGhlIFBPU0lYIHN0YW5kYXJkIGRvZXMgbm90IGRlZmluZSBhbnl0 aGluZyBhYm91dCB1dWNwIGxvY2tmaWxlcy4gIm1ha2UKKyAgIHBvc2l4IiB1c2VzIE5PIChyZXBl YXQsIE5PKSBsb2NrZmlsZSBjb252ZW50aW9ucy4gSWYgeW91cgorICAgUE9TSVgtY29tcGxpYW50 IFVuaXggdmVyc2lvbiB1c2VzIGEgbG9ja2ZpbGUgY29udmVudGlvbiBzdWNoIGFzIEhEQlVVQ1AK KyAgIChzZWUgYmVsb3cpLCB1c2UgdGhlICJwb3NpeCIgZW50cnksIGJ1dCBpbmNsdWRlIHRoZSBh cHByb3ByaWF0ZQorICAgbG9ja2ZpbGUgb3B0aW9uIGluIHlvdXIgS0ZMQUdTIG9uIHRoZSAibWFr ZSIgY29tbWFuZCBsaW5lLCBmb3IgZXhhbXBsZToKKworbWFrZSBwb3NpeCAiS0ZMQUdTPS1ESERC VVVDUCIKKworICAgUE9TSVguMSBhbHNvIGxhY2tzIGNlcnRhaW4gb3RoZXIgZmVhdHVyZXMgdGhh dCBLZXJtaXQgbmVlZHMuIEZvcgorICAgZXhhbXBsZToKKworICAgICAqIFRoZXJlIGlzIG5vIGRl ZmluZWQgd2F5IGZvciBhbiBhcHBsaWNhdGlvbiB0byBkbyB3aWxkY2FyZCBtYXRjaGluZworICAg ICAgIG9mIGZpbGVuYW1lcy4gS2VybWl0IHVzZXMgdGhlIGlub2RlIGluIHRoZSBkaXJlY3Rvcnkg c3RydWN0dXJlLCBidXQKKyAgICAgICBQT1NJWC4xIGRvZXMgbm90IGluY2x1ZGUgdGhpcyBjb25j ZXB0LiAoTGF0ZXIgUE9TSVggcmV2aXNpb25zCisgICAgICAgaW5jbHVkZSBmdW5jdGlvbnMgbmFt ZWQgKEkgdGhpbmspIGdsb2IoKSBhbmQgZm5tYXRjaCgpLCBidXQgdGhlc2UKKyAgICAgICBmdW5j dGlvbnMgYXJlIG5vdCB5ZXQgaW4gS2VybWl0LCBhbmQgbWlnaHQgbm90IGJlIGFwcHJvcHJpYXRl IGluCisgICAgICAgYW55IGNhc2UuKQorICAgICAqIFRoZXJlIGlzIG5vIFBPU0lYIG1lY2hhbmlz bSBmb3Igc2Vuc2luZyBvciBjb250cm9sbGluZyBtb2RlbQorICAgICAgIHNpZ25hbHMsIG5vciB0 byBlbmFibGUgUlRTL0NUUyBvciBvdGhlciBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCisgICAgICog VGhlcmUgaXMgbm8gc2VsZWN0KCkgZm9yIG11bHRpcGxleGluZyBpL28sIGFuZCB0aGVyZWZvcmUg bm8gVENQL0lQLgorICAgICAqIFRoZXJlIGlzIG5vIHdheSB0byBjaGVjayBpZiBjaGFyYWN0ZXJz IGFyZSB3YWl0aW5nIGluIGEKKyAgICAgICBjb21tdW5pY2F0aW9ucyBkZXZpY2UgKG9yIGNvbnNv bGUpIGlucHV0IGJ1ZmZlciwgc2hvcnQgb2YgdHJ5aW5nIHRvCisgICAgICAgcmVhZCB0aGVtIC0t IG5vIHNlbGVjdCgpLCBpb2N0bChmZCxGSU9OUkVBRCxibGFoKSwgcmRjaGsoKSwgZXRjLgorICAg ICAgIFRoaXMgaXMgYmFkIGZvciBDT05ORUNUIG1vZGUgYW5kIGJhZCBmb3Igc2xpZGluZyB3aW5k b3dzLgorICAgICAqIE5vIHdheSB0byBkbyBhIG1pbGxpc2Vjb25kIHNsZWVwIChubyBuYXAoKSwg dXNsZWVwKCksIHNlbGVjdCgpLAorICAgICAgIGV0YykuCisgICAgICogVGhlcmUgaXMgbm8gcG9w ZW4oKS4KKworICAgU28gYXQgdGhpcyBwb2ludCwgdGhlcmUgY2Fubm90IGJlIG9uZSBzaW5nbGUg ZnVsbHkgZnVuY3Rpb25hbCBQT1NJWAorICAgZm9ybSBvZiBDLUtlcm1pdCB1bmxlc3MgaXQgYWxz byBoYXMgImV4dGVuc2lvbnMiLCBhcyBkbyBMaW51eCwgUU5YLAorICAgZXRjLgorCisgICBNb3Jl IG9uIFBPU0lYIChxdW90aW5nIGZyb20gYSBuZXdzZ3JvdXAgcG9zdGluZyBieSBEYXZlIEJ1dGVu aG9mKToKKworICAgICBTdGFuZGFyZHMgdGVuZCB0byBsb29rIGF0IHRoZW1zZWx2ZXMgYXMgImVu YWJsaW5nIi4gU28gUE9TSVgKKyAgICAgc3RhbmRhcmRzIHNheSB0aGF0LCBpbiBvcmRlciB0byB1 c2UgUE9TSVggZnVuY3Rpb25zLCBhIHByb2dyYW0gbXVzdAorICAgICBkZWZpbmUgc29tZSBtYWNy byB0aGF0IHdpbGwgcHV0IHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBpbgorICAgICAiUE9T SVggbW9kZSIuIEZvciB0aGUgYW5jaWVudCBQT1NJWCAxMDAzLjEtMTk5MCwgdGhlIHN5bWJvbCBp cworICAgICBfUE9TSVhfU09VUkNFLiBGb3IgcmVjZW50IHJldmlzaW9ucywgaXQncyBfUE9TSVhf Q19TT1VSQ0Ugd2l0aCBhbgorICAgICBhcHByb3ByaWF0ZSB2YWx1ZS4gUE9TSVggMTAwMy4xLTE5 OTYgc2F5cyB0aGF0LCB0byB1c2UgaXRzIGZlYXR1cmVzCisgICAgIGluIGEgcG9ydGFibGUgbWFu bmVyLCB5b3UgbXVzdCBkZWZpbmUgX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwgYmVmb3JlCisgICAg IGluY2x1ZGluZyBhbnkgaGVhZGVyIGZpbGVzLgorCisgICAgIEJ1dCBmb3IgU29sYXJpcywgb3Ig RGlnaXRhbCBVbml4LCB0aGUgcGljdHVyZSBpcyBkaWZmZXJlbnQuIFBPU0lYIGlzCisgICAgIG9u ZSBpbXBvcnRhbnQgYnV0IHNtYWxsIHBhcnQgb2YgdGhlIHVuaXZlcnNlLiBZZXQgUE9TSVgKKyAg ICAgdW5jb25kaXRpb25hbGx5IGFuZCB1bmFtYmlndW91c2x5IFJFUVVJUkVTIHRoYXQsIHdoZW4K KyAgICAgX1BPU0lYX0NfU09VUkNFPTE5OTUwNkwsIEFMTCBvZiB0aGUgZnVuY3Rpb25zIGFuZCBk ZWZpbml0aW9ucworICAgICByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQsIGFuZCBOTyBvdGhlcnMg KGV4Y2VwdCBpbiBzcGVjaWZpYworICAgICByZXN0cmljdGVkIG5hbWVzcGFjZXMsIHNwZWNpZmlj YWxseSAiXyIgZm9sbG93ZWQgYnkgYW4gdXBwZXJjYXNlCisgICAgIGxldHRlciBvciAiX18iIGZv bGxvd2VkIGJ5IGEgbG93ZXJjYXNlIGxldHRlcikgc2hhbGwgYmUgdmlzaWJsZS4KKyAgICAgVGhh dCBraW5kYSBwdXRzIGEgY3JhbXAgb24gQlNEIGFuZCBTVklEIHN1cHBvcnQsIGJlY2F1c2UgdGhv c2UKKyAgICAgcmVxdWlyZSBuYW1lcyB0aGF0IGFyZSBub3QgaW4gdGhlICJwcm90ZWN0ZWQiIFBP U0lYIG5hbWVzcGFjZXMuIEl0J3MKKyAgICAgSUxMRUdBTCB0byBtYWtlIHRob3NlIHN5bWJvbHMg dmlzaWJsZSwgdW5sZXNzIHlvdSd2ZSBkb25lIHNvbWV0aGluZworICAgICBlbHNlIHRoYXQncyBi ZXlvbmQgdGhlIHNjb3BlIG9mIFBPU0lYIHRvIGFsbG93IHRoZSBzeXN0ZW0gdG8gaW5mZXIKKyAg ICAgdGhhdCB5b3UgZGlkbid0IHJlYWxseSBtZWFuIGl0LgorCisgICAgIEluIG1vc3QgY2FzZXMs IHlvdSBzaG91bGQganVzdCBjb21waWxlLCB3aXRoIG5vIHN0YW5kYXJkcy1yZWxhdGVkCisgICAg IG1hY3JvcyBkZWZpbmVkLiBUaGUgc3lzdGVtIHdpbGwgbWFrZSBhdmFpbGFibGUgZXZlcnkgaW50 ZXJmYWNlIGFuZAorICAgICBkZWZpbml0aW9uIHRoYXQgaXNuJ3QgaW5jb21wYXRpYmxlIHdpdGgg dGhlICJtYWluIHN0cmVhbSIuIFRoZXJlIG1heQorICAgICBpbmRlZWQgYmUgY2FzZXMgd2hlcmUg dHdvIHN0YW5kYXJkcyBjcm9zcywgYW5kIHlvdSByZWFsbHkgY2FuJ3QgdXNlCisgICAgIGJvdGgg dG9nZXRoZXIuIEJ1dCwgaW4gZ2VuZXJhbCwgdGhleSBwbGF5IG5pY2VseSB0b2dldGhlciBhcyBs b25nIGFzCisgICAgIHlvdSBkb24ndCBkbyBhbnl0aGluZyByYXNoIC0tIGxpa2UgdGVsbGluZyB0 aGUgc3lzdGVtIHRoYXQgaXQncyBub3QKKyAgICAgYWxsb3dlZCB0byBsZXQgdGhlbS4KKworICAg ICBJbiB0aGUgYXJlYSBvZiB0aHJlYWRzLCBib3RoIFNvbGFyaXMgYW5kIERpZ2l0YWwgVW5peCBz dXBwb3J0CisgICAgIGluY29tcGF0aWJsZSB0aHJlYWQgQVBJcy4gV2UgaGF2ZSBQT1NJWCBhbmQg RENFLCB0aGV5IGhhdmUgUE9TSVggYW5kCisgICAgIFVJLiBUaGUgbmFzdHkgYXJlYXMgYXJlIGlu IHRoZSBfciByb3V0aW5lcyBhbmQgaW4gc29tZSBhc3BlY3RzIG9mCisgICAgIHNpZ25hbCBiZWhh dmlvci4gWW91IGNhbm5vdCBjb21waWxlIGEgc2luZ2xlIHNvdXJjZSBmaWxlIHRoYXQgdXNlcwor ICAgICBib3RoIHNlbWFudGljcy4gVGhhdCdzIGxpZmUuIEl0IHNvdW5kcyBhcyBpZiBTb2xhcmlz IGRlZmF1bHRzIHRvIHRoZQorICAgICBVSSB2YXJpYW50cywgYnV0IGFsbG93cyB5b3UgdG8gZGVm aW5lIHRoaXMgX1BPU0lYX1RIUkVBRF9TRU1BTlRJQ1MKKyAgICAgdG8gZ2V0IGFyb3VuZCBpdC4g V2UgZGVmYXVsdCB0byBQT1NJWCwgYW5kIGFsbG93IHlvdSB0byBkZWZpbmUKKyAgICAgX1BUSFJF QURfVVNFX0Q0IChhdXRvbWF0aWNhbGx5IGRlZmluZWQgYnkgdGhlIGNjICItdGhyZWFkcyIgc3dp dGNoKQorICAgICB0byBzZWxlY3QgdGhlIERDRSB0aHJlYWQgdmFyaWFudHMuIFRoYXQgZGVmYXVs dCwgYmVjYXVzZSB5b3UncmUKKyAgICAgb3BlcmF0aW5nIG91dHNpZGUgb2YgYW55IGluZGl2aWR1 YWwgc3RhbmRhcmQsIGlzIHJlYWxseSBqdXN0IGEKKyAgICAgbWFya2V0aW5nIGRlY2lzaW9uLgor Cis5LjEuMi4gQU5TSSBDCisKKyAgIFsgWzI2MV1Ub3AgXSBbIFsyNjJdQ29udGVudHMgXSBbIFsy NjNdU2VjdGlvbiBDb250ZW50cyBdIFsKKyAgIFsyNjRdU3Vic2VjdGlvbiBDb250ZW50cyBdIFsg WzI2NV1OZXh0IF0gWyBbMjY2XVByZXZpb3VzIF0KKworICAgVGhlIG1ham9yIGRpZmZlcmVuY2Ug YmV0d2VlbiBBTlNJIEMgYW5kIGVhcmxpZXIgQyBjb21waWxlcnMgaXMgZnVuY3Rpb24KKyAgIHBy b3RvdHlwaW5nLiBBTlNJIEMgYWxsb3dzIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBiZSBjaGVja2Vk IGZvciB0eXBlCisgICBhZ3JlZW1lbnQsIGFuZCAod2hlbiBwb3NzaWJsZSkgdHlwZSBjb2VyY2lv biBpbiB0aGUgZXZlbnQgb2YgYQorICAgbWlzbWF0Y2guIEZvciB0aGlzIHRvIHdvcmssIGZ1bmN0 aW9ucyBhbmQgdGhlaXIgYXJndW1lbnRzIG11c3QgYmUKKyAgIGRlY2xhcmVkIGJlZm9yZSB0aGV5 IGFyZSBjYWxsZWQuIFRoZSBmb3JtIGZvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaXMKKyAgIGRp ZmZlcmVudCBpbiBBTlNJIEMgYW5kIG5vbi1BTlNJIEMgKEFOU0kgQyBhbHNvIGFjY2VwdHMgdGhl IGVhcmxpZXIKKyAgIGZvcm0sIGJ1dCB0aGVuIGRvZXMgbm90IGRvIHR5cGUgY2hlY2tpbmcpLgor CisgICBBcyBvZiBlZGl0IDE2NywgQy1LZXJtaXQgdHJpZXMgdG8gdGFrZSBmdWxsIGFkdmFudGFn ZSBvZiBBTlNJIEMKKyAgIGZlYXR1cmVzLCBlc3BlY2lhbGx5IGZ1bmN0aW9uIHByb3RvdHlwaW5n LiBUaGlzIHJlbW92ZXMgbWFueSBidWdzCisgICBpbnRyb2R1Y2VkIGJ5IGRpZmZlcmluZyBkYXRh IHR5cGVzIHVzZWQgb3IgcmV0dXJuZWQgYnkgdGhlIHNhbWUKKyAgIGZ1bmN0aW9ucyBvbiBkaWZm ZXJlbnQgY29tcHV0ZXJzLiBBTlNJIEMgZmVhdHVyZXMgYXJlIGF1dG9tYXRpY2FsbHkKKyAgIGVu YWJsZWQgd2hlbiB0aGUgc3ltYm9sIF9fU1REQ19fIGlzIGRlZmluZWQuIE1vc3QgQU5TSSBDIGNv bXBpbGVycywKKyAgIHN1Y2ggYXMgR05VIENDIGFuZCB0aGUgbmV3IERFQyBDIGNvbXBpbGVyIGRl ZmluZSB0aGlzIHN5bWJvbAorICAgaW50ZXJuYWxseS4KKworICAgT24gdGhlIGRvd25zaWRlLCBB TlNJIEMgY29tcGlsYXRpb24gaW5jcmVhc2VzIHRoZQorICAgYWRtaW5pc3RyYXRpdmUvYnVyZWF1 Y3JhdGljIGJ1cmRlbiwgc3Bld2luZyBvdXQgY291bnRsZXNzIHVubmVlZGVkCisgICB3YXJuaW5n cyBhYm91dCBtaXNtYXRjaGVkIHR5cGVzLCBlc3BlY2lhbGx5IHdoZW4gd2UgYXJlIGRlYWxpbmcg d2l0aAorICAgc2lnbmVkIGFuZCB1bnNpZ25lZCBjaGFyYWN0ZXJzLCByZXF1aXJpbmcgY2FzdHMg ZXZlcnl3aGVyZSB0byBzaHV0IHVwCisgICB0aGUgbWluZGxlc3MgY29tcGxhaW50cyAtLSB0aGVy ZSBpcyBubyB1c2UgZm9yIHNpZ25lZCBjaGFycyBpbiBLZXJtaXQKKyAgIChvciBwcm9iYWJseSBh bnl3aGVyZSBlbHNlKS4gU29tZSBjb21waWxlcnMsIG1lcmNpZnVsbHksIGluY2x1ZGUgYQorICAg InRyZWF0IGFsbCBjaGFycyBhcyB1bnNpZ25lZCIgb3B0aW9uLCBhbmQgd2hlbiBhdmFpbGFibGUg aXQgc2hvdWxkIGJlCisgICB1c2VkIC0tIG5vdCBvbmx5IHRvIHN0b3AgdGhlIHdhcm5pbmdzLCBi dXQgYWxzbyB0byBhdm9pZCB1bmhlbHBmdWwgc2lnbgorICAgZXh0ZW5zaW9uIG9uIGhpZ2gtYml0 IGNoYXJhY3RlcnMuCisKKyAgIFRvIGZvcmNlIHVzZSBvZiBBTlNJIEMgcHJvdG90eXBlcywgaW5j bHVkZSAtRENLX0FOU0lDIG9uIHRoZSBjYyBjb21tYW5kCisgICBsaW5lLiBUbyBkaXNhYmxlIHRo ZSB1c2Ugb2YgQU5TSSBwcm90b3R5cGVzLCBpbmNsdWRlIC1ETk9BTlNJLgorCis5LjEuMy4gT3Ro ZXIgU3RhbmRhcmRzCisKKyAgIFsgWzI2N11Ub3AgXSBbIFsyNjhdQ29udGVudHMgXSBbIFsyNjld U2VjdGlvbiBDb250ZW50cyBdIFsKKyAgIFsyNzBdU3Vic2VjdGlvbiBDb250ZW50cyBdIFsgWzI3 MV1OZXh0IF0gWyBbMjcyXVByZXZpb3VzIF0KKworICAgQXMgdGhlIHllYXJzIGdvIGJ5LCBzdGFu ZGFyZHMgd2l0aC13aGljaC1hbGwtbXVzdC1jb21wbHkgY29udGludWUgdG8KKyAgIHBpbGUgdXA6 IEFFUywgWFBHMiwgWFBHMywgWFBHNCwgRklQUyAxNTEtMiwgc3VjY2Vzc2l2ZSBnZW5lcmF0aW9u cyBvZgorICAgUE9TSVgsIE9TRi8xLCBYL09wZW4sIFNwZWMgMTE3MCwgVU5JWDk1LCBPcGVuIEdy b3VwIFVOSVg5OCwgSVNPL0lFQworICAgOTk0NSBwYXJ0cyAxLTQsIElTTyA5ODk5LCA4OE9wZW4s IE9TIDk5LCBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uCisgICAoU1VTLCBbMjczXUlFRUUgMTAw My4xLTIwMDEsIG5vdCB0byBtZW50aW9uICJtYXR1cmUgc3RhbmRhcmRzIiBsaWtlIFY3LAorICAg NC4yLzQuM0JTRCwgU3lzdGVtIFYgUjMgYW5kIFI0IChTVklEMiBhbmQgU1ZJRDMpLCA0LjRCU0Qg KHRoZSBiYXNpcyBmb3IKKyAgIEJTREksIE9wZW5CU0QsIE5ldEJTRCwgRnJlZUJTRCwgTWFjIE9T IFggZXRjKSwgL3Vzci9ncm91cCwgcGx1cworICAgYXNzb3J0ZWQgc2Vpc21pYyBwcm9ub3VuY2Vt ZW50cyBvZiB0aGUgbmV2ZXJlbmRpbmcgc2VyaWVzIG9mIGVwaGVtZXJhbAorICAgY29ycG9yYXRl IGNvbnNvcnRpYSwgbm90IHRvIG1lbnRpb24gdGhlIGxpYmMtdnMtZ2xpYmMgdHVybW9pbCBpbiB0 aGUKKyAgIExpbnV4IGFyZW5hIGFuZCB3aG8ga25vd3Mgd2hhdCBlbHNlLgorCisgICBOb25lIG9m IHRoZXNlIHN0YW5kYXJkcyBzaW1wbGlmaWVzIGxpZmUgZm9yIHBvcnRhYmxlIGFwcGxpY2F0aW9u cyBsaWtlCisgICBDLUtlcm1pdCAtLSBlYWNoIG9uZSBpcyBzaW1wbHkgb25lIG1vcmUgZW52aXJv bm1lbnQgdG8gc3VwcG9ydCAob3IKKyAgIGNpcmN1bXZlbnQsIGFzIGluIG1hbnkgY2FzZXMgdGhl c2Ugc3RhbmRhcmRzIGRvIG1vcmUgaGFybSB0aGFuIGdvb2QgYnkKKyAgIGRlbnlpbmcgYWNjZXNz IHRvIGZhY2lsaXRpZXMgd2UgbmVlZCwgZS5nLiBhcyBub3RlZCBpbiBhYm92ZSBpbgorICAgWzI3 NF05LjEuMSkuCisKKzkuMi4gTGlicmFyeSBJc3N1ZXMKKworICAgWyBbMjc1XVRvcCBdIFsgWzI3 Nl1Db250ZW50cyBdIFsgWzI3N11TZWN0aW9uIENvbnRlbnRzIF0gWworICAgWzI3OF1TdWJzZWN0 aW9uIENvbnRlbnRzIF0gWyBbMjc5XU5leHQgXSBbIFsyODBdUHJldmlvdXMgXQorCisgICBPbiBt b3N0IG1vZGVybiBwbGF0Zm9ybXMsIGFwcGxpY2F0aW9ucyBhcmUgLS0gYW5kIG9mdGVuIG11c3Qg YmUgLS0KKyAgIGR5bmFtaWNhbGx5IGxpbmtlZC4gVGhpcyBoYXMgbnVtZXJvdXMgYWR2YW50YWdl cyAoc21hbGxlciBleGVjdXRhYmxlcywKKyAgIGFiaWxpdHkgdG8gcGF0Y2ggYSBsaWJyYXJ5IGFu ZCB0aGVyZWJ5IHBhdGNoIGFsbCBhcHBsaWNhdGlvbnMgdGhhdCB1c2UKKyAgIGl0LCBldGMpLCBi dXQgYWxzbyBjYXVzZXMgc29tZSBoZWFkYWNoZXM6IG1vc3QgY29tbW9ubHksIHRoZSBsaWJyYXJ5 IElECisgICBidWlsdCBpbnRvIHRoZSBleGVjdXRhYmxlIGF0IGxpbmsgdGltZSBkb2VzIG5vdCBt YXRjaCB0aGUgSUQgb2YgdGhlCisgICBjb3JyZXNwb25kaW5nIGxpYnJhcnkgb24gdGhlIHRhcmdl dCBzeXN0ZW0sIGFuZCBzbyB0aGUgbG9hZGVyIHJlZnVzZXMKKyAgIHRvIGxldCB0aGUgYXBwbGlj YXRpb24gcnVuLgorCisgICBUaGlzIHByb2JsZW0gb25seSBnZXRzIHdvcnNlIG92ZXIgdGltZS4g SW4gdGhlIExpbnV4IGFuZCAqQlNEIHdvcmxkLCB3ZQorICAgYWxzbyBoYXZlIHRvdGFsbHkgZGlm ZmVyZW50IGxpYnJhcmllcyAoZWFjaCB3aXRoIHRoZWlyIG93biBuYW1lcyBhbmQKKyAgIG51bWJl cmluZyBzeXN0ZW1zKSB0aGF0IGNvdmVyIHRoZSBzYW1lIHRlcnJpdG9yeTsgZm9yIGV4YW1wbGUs IGN1cnNlcworICAgdnMgbmN1cnNlcywgbGliYyB2ZXJzdXMgZ2xpYmMuIENvbWJpbmF0aW9ucyBw cm9saWZlcmF0ZSBhbmQgYW55IGdpdmVuCisgICBVbml4IGNvbXB1dGVyIG1pZ2h0IGhhdmUgYW55 IGNvbWJpbmF0aW9uLiBGb3IgdGhpcyByZWFzb24gaXQgaXMKKyAgIGJlY29taW5nIGluY3JlYXNp bmdseSBkaWZmaWN1bHQgdG8gcHJvZHVjZSBhICJMaW51eCBiaW5hcnkiIGZvciBhIGdpdmVuCisg ICBhcmNoaXRlY3R1cmUgKGUuZy4gUEMgb3IgQWxwaGEpLiBUaGVyZSBoYXMgdG8gYmUgYSBzZXBh cmF0ZSBiaW5hcnkgZm9yCisgICAoYXQgbGVhc3QpIGV2ZXJ5IGNvbWJpbmF0aW9uIG9mIGN1cnNl cyB2cyBuY3Vyc2VzIGFuZCBsaWJjIHZzIGdsaWJjLgorCisgICBJbiBzdWNoIGNhc2VzLCB0aGUg YmVzdCBhZHZpY2UgaXMgZm9yIGV2ZXJ5IHVzZXIgdG8gYnVpbGQgQy1LZXJtaXQgZnJvbQorICAg c291cmNlIGNvZGUgb24gdGhlIHN5c3RlbSB3aGVyZSBpdCB3aWxsIHJ1bi4gVG9vIGJhZCBtb3N0 IGNvbW1lcmNpYWwKKyAgIFVuaXggdmVuZG9ycyBoYXZlIHN0b3BwZWQgaW5jbHVkaW5nIEMgY29t cGlsZXJzIHdpdGggdGhlIG9wZXJhdGluZworICAgc3lzdGVtIQorCis5LjMuIFVuaXggRmlsZSBT eXN0ZW0gUGVjdWxpYXJpdGllcworCisgICBbIFsyODFdVG9wIF0gWyBbMjgyXUNvbnRlbnRzIF0g WyBbMjgzXVNlY3Rpb24gQ29udGVudHMgXSBbIFsyODRdTmV4dCBdCisgICBbIFsyODVdUHJldmlv dXMgXQorCisgICBOb3JtYWxseSwgaW5jbHVkaW5nIGEgQlNELCBTeXN0ZW0tViwgUE9TSVgsIG9y IERJUkVOVCBmbGFnIGluIHRoZSBtYWtlCisgICBlbnRyeSBzZWxlY3RzIHRoZSByaWdodCBmaWxl IHN5c3RlbSBjb2RlLiBCdXQgc29tZSB2ZXJzaW9ucyBvZiBVbml4IGFyZQorICAgaW5jb25zaXN0 ZW50IGluIHRoaXMgcmVnYXJkLCBhbmQgYnVpbGRpbmcgaW4gdGhlIG5vcm1hbCB3YXkgZWl0aGVy CisgICBnaXZlcyBjb21waWxlciBvciBsaW5rZXIgZXJyb3JzLCBvciByZXN1bHRzIGluIHByb2Js ZW1zIGF0IHJ1bnRpbWUsCisgICB0eXBpY2FsbHkgZmFpbHVyZSB0byBwcm9wZXJseSBleHBhbmQg d2lsZGNhcmQgZmlsZSBzcGVjaWZpY2F0aW9ucyB3aGVuCisgICB5b3UgZG8gc29tZXRoaW5nIGxp a2UgInNlbmQgKi4qIiwgb3IgZmFpbHVyZSB0byByZWNvZ25pemUgbG9uZworICAgZmlsZW5hbWVz LCBhcyBpbiAic2VuZCBmaWxld2l0aGF2ZXJ5dmVyeXZlcnl2ZXJ5dmVyeWxvbmduYW1lIi4KKwor ICAgQy1LZXJtaXQgaXMgc3VwcG9zZWQgdG8ga25vdyBhYm91dCBhbGwgdGhlIHZhcmlvdXMgc3R5 bGVzIG9mIFVuaXggZmlsZQorICAgc3lzdGVtcywgYnV0IGl0IGhhcyB0byBiZSB0b2xkIHdoaWNo IG9uZSB0byB1c2Ugd2hlbiB5b3UgYnVpbGQgaXQsCisgICB1c3VhbGx5IGluIHRoZSBtYWtlZmls ZSB0YXJnZXQgQ0ZMQUdTIGFzIHNob3duIGJlbG93LCBidXQgeW91IG1pZ2h0CisgICBhbHNvIGhh dmUgdG8gYWRkIHNvbWV0aGluZyBsaWtlIC1JL3Vzci9pbmNsdWRlL2JzZCB0byBDRkxBR1MsIG9y CisgICBzb21ldGhpbmcgbGlrZSAtbGJzZCB0byBMSUJTLgorCisgICBDLUtlcm1pdCBnaXZlcyB5 b3UgdGhlIGZvbGxvd2luZyBDRkxBR1Mgc3dpdGNoZXMgdG8gYWRhcHQgdG8geW91ciBmaWxlCisg ICBzeXN0ZW0ncyBwZWN1bGlhcml0aWVzOgorCistRERJUkVOVCAgIC0gI2luY2x1ZGUgPGRpcmVu dC5oPgorLURTRElSRU5UICAtICNpbmNsdWRlIDxzeXMvZGlyZW50Lmg+CistRE5ESVIgICAgIC0g I2luY2x1ZGUgPG5kaXIuaD4KKy1EWE5ESVIgICAgLSAjaW5jbHVkZSA8c3lzL25kaXIuaD4KKy1E UlRVICAgICAgLSAjaW5jbHVkZSAiL3Vzci9saWIvbmRpci5oIiwgb25seSBpZiBORElSIGFuZCBY TkRJUiBub3QgZGVmaW5lZC4KKy1EU1lTVVRJTUggLSAjaW5jbHVkZSA8c3lzL3V0aW1lLmg+IGZv ciBzZXR0aW5nIGZpbGUgY3JlYXRpb24gZGF0ZXMuCistRFVUSU1FSCAgIC0gI2luY2x1ZGUgPHV0 aW1lLmg+IGZvciBzZXR0aW5nIGZpbGUgY3JlYXRpb24gZGF0ZXMuCisKKyAgIChOb3RlLCBSVFUg c2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgTWFzc2NvbXAgUlRVIHN5c3RlbXMsIGJlY2F1c2UgaXQK KyAgIGFsc28gc2VsZWN0cyBjZXJ0YWluIG90aGVyIFJUVS1zcGVjaWZpYyBmZWF0dXJlcy4pCisK KyAgIElmIG5vbmUgb2YgdGhlc2UgaXMgZGVmaW5lZCwgdGhlbiA8c3lzL2Rpci5oPiBpcyB1c2Vk LiBJTVBPUlRBTlQ6IElmCisgICB5b3VyIHN5c3RlbSBoYXMgdGhlIGZpbGUgL3Vzci9pbmNsdWRl L2RpcmVudC5oIHRoZW4gYmUgc3VyZSB0byBhZGQKKyAgIC1ERElSRU5UIHRvIHlvdXIgbWFrZWZp bGUgdGFyZ2V0J3MgQ0ZMQUdTLiAiZGlyZW50IiBzaG91bGQgYmUgdXNlZCBpbgorICAgcHJlZmVy ZW5jZSB0byBhbnkgb2YgdGhlIG90aGVycywgYmVjYXVzZSBpdCBzdXBwb3J0cyBhbGwgdGhlIGZl YXR1cmVzCisgICBvZiB5b3VyIGZpbGUgc3lzdGVtLCBhbmQgdGhlIG90aGVycyBwcm9iYWJseSBk b24ndC4KKworICAgSGF2aW5nIHNlbGVjdGVkIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgaGVh ZGVyIGZpbGUsIHlvdSBtaWdodCBhbHNvCisgICBuZWVkIHRvIHRlbGwgS2VybWl0IGhvdyB0byBk ZWNsYXJlIHRoZSByb3V0aW5lcyBhbmQgdmFyaWFibGVzIGl0IG5lZWRzCisgICB0byByZWFkIHRo ZSBkaXJlY3RvcnkuIFRoaXMgaGFwcGVucyBtb3N0IGNvbW1vbmx5IG9uIEFUJlQgU3lzdGVtLVYK KyAgIGJhc2VkIFVOSVhlcywgcGFydGljdWxhcmx5IFN5c3RlbSBWIFIzIGFuZCBlYXJsaWVyLCB0 aGF0IHByb3ZpZGUgbG9uZworICAgZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWVzIChsb25nZXIgdGhh biAxNCBjaGFyYWN0ZXJzKS4gRXhhbXBsZXMgaW5jbHVkZQorICAgY2VydGFpbiByZWxlYXNlcyBv ZiBIUC1VWCwgRElBQiBETklYLCBvbGRlciB2ZXJzaW9ucyBvZiBTaWxpY29uCisgICBHcmFwaGlj cyBJUklYLCBhbmQgcGVyaGFwcyBhbHNvIE1JUFMuIEluIHRoaXMgY2FzZSwgdHJ5IGFkZGluZyAt RExPTkdGTgorICAgdG8geW91ciBtYWtlZmlsZSB0YXJnZXQuCisKKyAgIEFub3RoZXIgcHJvYmxl bSBjaGlsZCBpcyA8c3lzL2ZpbGUuaD4uIE1vc3QgVW5peCBDLUtlcm1pdCB2ZXJzaW9ucyBuZWVk CisgICB0byAjaW5jbHVkZSB0aGlzIGZpbGUgZnJvbSB3aXRoaW4gWzI4Nl1ja3VmaW8uYyBhbmQg WzI4N11ja3V0aW8uYywgYnV0CisgICBzb21lIG5vdCBvbmx5IGRvIG5vdCBuZWVkIHRvIGluY2x1 ZGUgaXQsIGJ1dCBNVVNUIG5vdCBpbmNsdWRlIGl0CisgICBiZWNhdXNlIChhKSBpdCBkb2Vzbid0 IGV4aXN0LCBvciAoYikgaXQgaGFzIGFscmVhZHkgYmVlbiBpbmNsdWRlZCBieQorICAgc29tZSBv dGhlciBoZWFkZXIgZmlsZSBhbmQgaXQgZG9lc24ndCBwcm90ZWN0IGl0c2VsZiBhZ2FpbnN0IG11 bHRpcGxlCisgICBpbmNsdXNpb24sIG9yIChjKSBzb21lIG90aGVyIHJlYXNvbiB0aGF0IHByZXZl bnRzIHN1Y2Nlc3NmdWwKKyAgIGNvbXBpbGF0aW9uLiBJZiB5b3UgaGF2ZSBjb21waWxhdGlvbiBw cm9ibGVtcyB0aGF0IHNlZW0gdG8gc3RlbSBmcm9tCisgICBpbmNsdWRpbmcgdGhpcyBmaWxlLCB0 aGVuIGFkZCB0aGUgZm9sbG93aW5nIHN3aXRjaCB0byBDRkxBR1MgaW4geW91cgorICAgbWFrZWZp bGUgdGFyZ2V0OgorCistRE5PRklMRUgKKworICAgVGhlcmUgYXJlIGEgZmV3IG9kZCBjYXNlcyB3 aGVyZSA8c3lzL2ZpbGUuaD4gbXVzdCBiZSBpbmNsdWRlZCBpbiBvbmUgb2YKKyAgIHRoZSBja3Vb ZnRdaW8uYyBmaWxlcywgYnV0IG5vdCB0aGUgb3RoZXIuIEluIHRoYXQgY2FzZSwgYWRkIHRoZQor ICAgYWZvcmVtZW50aW9uZWQgc3dpdGNoLCBidXQgZ28gaW50byB0aGUgZmlsZSB0aGF0IG5lZWRz IDxzeXMvZmlsZS5oPiBhbmQKKyAgIGFkZCBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisjaWZkZWYg WFhYICAgICAgIC8qICh3aGVyZSBYWFggaXMgYSBzeW1ib2wgdW5pcXVlIHRvIHlvdXIgc3lzdGVt KSAqLworI3VuZGVmIE5PRklMRUgKKyNlbmRpZiAvKiBYWFggKi8KKworICAgYmVmb3JlIHRoZSBz ZWN0aW9uIHRoYXQgaW5jbHVkZXMgPHN5cy9maWxlLmg+LgorCisgICBLZXJtaXQncyBTRU5EIGNv bW1hbmQgZXhwYW5kcyB3aWxkY2FyZCBjaGFyYWN0ZXJzICI/IiBhbmQgIioiIGl0c2VsZi4KKyAg IEJlZm9yZSB2ZXJzaW9uIDVBLCBjb21tYW5kcyBsaWtlICJzZW5kICoiIHdvdWxkIHNlbmQgYWxs IHJlZ3VsYXIKKyAgIChub24tZGlyZWN0b3J5KSBmaWxlcywgaW5jbHVkaW5nICJoaWRkZW4gZmls ZXMiICh3aG9zZSBuYW1lcyBzdGFydCB3aXRoCisgICAiLiIpLiBJbiB2ZXJzaW9uIDVBLCB0aGUg ZGVmYXVsdCBiZWhhdmlvciBpcyB0byBtYXRjaCBsaWtlIHRoZSBCb3VybmUKKyAgIHNoZWxsIG9y IHRoZSBscyBjb21tYW5kLCBhbmQgbm90IGluY2x1ZGUgZmlsZXMgd2hvc2UgbmFtZXMgc3RhcnQg d2l0aAorICAgZG90LiBTdWNoIGZpbGVzIGNhbiBzdGlsbCBiZSBzZW50IGlmIHRoZSBkb3QgaXMg aW5jbHVkZWQgZXhwbGljaXRseSBpbgorICAgdGhlIFNFTkQgY29tbWFuZDogInNlbmQgLm9vZmEs IHNlbmQgLioiLiBUbyBjaGFuZ2UgYmFjayB0byB0aGUgb2xkIHdheQorICAgYW5kIGxldCBsZWFk aW5nIHdpbGRjYXJkIGNoYXJhY3RlcnMgbWF0Y2ggZG90IGZpbGVzLCBpbmNsdWRlIHRoZQorICAg Zm9sbG93aW5nIGluIHlvdXIgQ0ZMQUdTOgorCistRE1BVENIRE9UCisKKyAgIChJbiBDLUtlcm1p dCA2LjAsIHRoZXJlIGlzIGFsc28gYSBjb21tYW5kIHRvIGNvbnRyb2wgdGhpcyBhdCBydW50aW1l LikKKworICAgQ29tcGxhaW50cyBhYm91dCBkYXRhLXR5cGUgbWlzbWF0Y2hlczoKKworICAgICAq IElmIHlvdSBnZXQgY29tcGlsZS10aW1lIGNvbXBsYWludHMgYWJvdXQgZGF0YSB0eXBlIG1pc21h dGNoZXMgZm9yCisgICAgICAgcHJvY2Vzcy1JRCByZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGdldHBp ZCgpLCBhZGQgLURQSURfVD1waWRfdC4KKyAgICAgKiBJZiB5b3UgZ2V0IGNvbXBpbGUtdGltZSBj b21wbGFpbnRzIGFib3V0IGRhdGEgdHlwZSBtaXNtYXRjaGVzIGZvcgorICAgICAgIHVzZXIgSUQg cmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBnZXR1aWQoKSwgYWRkIC1EVUlEX1Q9dWlkX3QuCisgICAg ICogSWYgeW91IGdldCBjb21waWxlLXRpbWUgY29tcGxhaW50cyBhYm91dCBkYXRhIHR5cGUgbWlz bWF0Y2hlcyBmb3IKKyAgICAgICB1c2VyLUlEIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgZ2V0Z2lk KCksIGFkZCAtREdJRF9UPWdpZF90LgorICAgICAqIElmIHlvdSBnZXQgY29tcGlsZS10aW1lIGNv bXBsYWludHMgYWJvdXQgZGF0YSB0eXBlIG1pc21hdGNoZXMgZm9yCisgICAgICAgZ2V0cHd1aWQo KSwgYWRkIC1EUFdJRF9UPXVpZF90IChvciB3aGF0ZXZlciBpdCBzaG91bGQgYmUpLgorCisgICBG aWxlIGNyZWF0aW9uIGRhdGVzOiBDLUtlcm1pdCBhdHRlbXB0cyB0byBzZXQgdGhlIGNyZWF0aW9u IGRhdGUvdGltZSBvZgorICAgYW4gaW5jb21pbmcgZmlsZSBhY2NvcmRpbmcgdG8gdGhlIGRhdGUv dGltZSBnaXZlbiBpbiB0aGUgZmlsZSdzCisgICBhdHRyaWJ1dGUgcGFja2V0LCBpZiBhbnkuIElm IHlvdSBmaW5kIHRoYXQgdGhlIGRhdGVzIGFyZSBzZXQKKyAgIGluY29ycmVjdGx5LCB5b3UgbWln aHQgbmVlZCB0byBidWlsZCBLZXJtaXQgd2l0aCB0aGUgLURTWVNVVElNRUggZmxhZywKKyAgIHRv IHRlbGwgaXQgdG8gaW5jbHVkZSA8c3lzL3V0aW1lLmg+LiBJZiB0aGF0IGRvZXNuJ3QgaGVscCwg bG9vayBhdCB0aGUKKyAgIGNvZGUgaW4genN0cmR0KCkgaW4gWzI4OF1ja3VmaW8uYy4KKworOS40 LiBIYXJkd2FyZSBGbG93IENvbnRyb2wKKworICAgWyBbMjg5XVRvcCBdIFsgWzI5MF1Db250ZW50 cyBdIFsgWzI5MV1TZWN0aW9uIENvbnRlbnRzIF0gWyBbMjkyXU5leHQgXQorICAgWyBbMjkzXVBy ZXZpb3VzIF0KKworICAgSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIGEgcHJvYmxlbWF0aWMgY29u Y2VwdCBpbiBtYW55IHBvcHVsYXIgVW5peAorICAgaW1wbGVtZW50YXRpb25zLiBPZnRlbiBpdCBp cyBsYWNraW5nIGFsdG9nZXRoZXIsIGFuZCB3aGVuIGF2YWlsYWJsZSwKKyAgIHRoZSBhcHBsaWNh dGlvbiBwcm9ncmFtIGludGVyZmFjZSAoQVBJKSB0byBpdCBpcyBpbmNvbnNpc3RlbnQgZnJvbQor ICAgc3lzdGVtIHRvIHN5c3RlbS4gSGVyZSBhcmUgc29tZSBleGFtcGxlczoKKworICAgIGEuIFBP U0lYIGRvZXMgbm90IHN1cHBvcnQgaGFyZHdhcmUgZmxvdyBjb250cm9sLgorICAgIGIuIFJUUy9D VFMgZmxvdyBjb250cm9sIHN1cHBvcnQgTUlHSFQgYmUgYXZhaWxhYmxlIGZvciBTeXN0ZW0gViBS MyBhbmQKKyAgICAgICBsYXRlciBpZiAvdXNyL2luY2x1ZGUvdGVybWlveC5oIGV4aXN0cyAoaXRz IHN1Y2Nlc3NmdWwgb3BlcmF0aW9uCisgICAgICAgYWxzbyBkZXBlbmRzIG9uIHRoZSBkZXZpY2Ug ZHJpdmVyLCBhbmQgdGhlIGRldmljZSBpdHNlbGYsIG5vdCB0bworICAgICAgIG1lbnRpb24gdGhl IFsyOTRdY2FibGUsIGV0YywgYWN0dWFsbHkgc3VwcG9ydGluZyBpdCkuIElmIHlvdXIKKyAgICAg ICBTVlIzLW9yLWxhdGVyIFVuaXggc3lzdGVtIGRvZXMgaGF2ZSB0aGlzIGZpbGUsIGFkZDoKKwor LURURVJNSU9YCisKKyAgICAgICB0byB5b3VyIENGTEFHUy4gSWYgdGhlIGZpbGUgaXMgaW4gL3Vz ci9pbmNsdWRlL3N5cyBpbnN0ZWFkLCBhZGQ6CisKKy1EU1RFUk1JT1gKKworICAgICAgIE5vdGUg dGhhdCB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmaWxlIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IFJU Uy9DVFMKKyAgICAgICB3aWxsIGFjdHVhbGx5IHdvcmsgLS0gdGhhdCBkZXBlbmRzIG9uIHRoZSBk ZXZpY2UtZHJpdmVyCisgICAgICAgaW1wbGVtZW50YXRpb24gKHJlcG9ydGVkbHksIG1hbnkgVW5p eCB2ZXJzaW9ucyB0cmVhdAorICAgICAgIGhhcmR3YXJlLWZsb3ctY29udHJvbCByZWxhdGVkIGlv Y3RsJ3MgYXMgbm8tb3BzKS4KKyAgICBjLiBTZWFyY2ggKCJncmVwIC1pIikgdGhyb3VnaCAvdXNy L2luY2x1ZGUvKi5oIGFuZAorICAgICAgIC91c3IvaW5jbHVkZS9zeXMvKi5oIGZvciBSVFMgb3Ig Q1RTIGFuZCBzZWUgd2hhdCB0dXJucyB1cC4gRm9yCisgICAgICAgZXhhbXBsZSwgaW4gU3VuT1Mg NC54IHdlIGZpbmQgIkNSVFNDVFMiLiBGaWd1cmluZyBvdXQgaG93IHRvIHVzZSBpdAorICAgICAg IGlzIGFub3RoZXIgcXVlc3Rpb24gZW50aXJlbHkhIEluIElCTSBBSVggUlMvNjAwMCAzLngsIHdl IGhhdmUgdG8KKyAgICAgICAiYWRkIiBhIG5ldyAibGluZSBkaXNjaXBsaW5lIiAoYW5kIHlvdSB3 b24ndCBmaW5kIHVwcGVyY2FzZSBSVFMgb3IKKyAgICAgICBDVFMgc3ltYm9scyBpbiB0aGUgaGVh ZGVyIGZpbGVzKS4KKyAgICBkLiBOZVhUU1RFUCBhbmQgSVJJWCwgYW5kIHBvc3NpYmx5IG90aGVy cywgc3VwcG9ydCBoYXJkd2FyZSBmbG93CisgICAgICAgY29udHJvbCwgYnV0IGRvIG5vdCBmdXJu aXNoIGFuIEFQSSB0byBjb250cm9sIGl0LCBhbmQgdGh1cyBvbiB0aGVzZQorICAgICAgIHN5c3Rl bXMgS2VybWl0IGhhcyBubyBjb21tYW5kIHRvIHNlbGVjdCBpdCAtLSBpbnN0ZWFkLCBhIHNwZWNp YWwKKyAgICAgICBkZXZpY2UgbmFtZSBtdXN0IGJlIHVzZWQuIChOZVhUU1RFUDogL2Rldi9jdWZh IGluc3RlYWQgb2YgL2Rldi9jdWE7CisgICAgICAgSVJJWDogL2Rldi90dHlmMDApCisKKyAgIFNl ZSB0aGUgcm91dGluZSB0dGhmbG93KCkgaW4gWzI5NV1ja3V0aW8uYyBmb3IgZGV0YWlscy4gSWYg eW91IGZpbmQKKyAgIHRoYXQgeW91ciBzeXN0ZW0gb2ZmZXJzIGhhcmR3YXJlIGZsb3cgY29udHJv bCBzZWxlY3Rpb24gdW5kZXIgcHJvZ3JhbQorICAgY29udHJvbCwgeW91IGNhbiBhZGQgdGhpcyBj YXBhYmlsaXR5IHRvIEMtS2VybWl0IGFzIGZvbGxvd3M6CisKKyAgICBhLiBTZWUgaWYgaXQgYWdy ZWVzIHdpdGggb25lIG9mIHRoZSBtZXRob2RzIGFscmVhZHkgdXNlZCBpbiB0dGhmbG93KCkuCisg ICAgICAgaWYgbm90LCBhZGQgbmV3IGNvZGUsIGFwcHJvcHJpYXRlbHkgI2lmZGVmJ2QuCisgICAg Yi4gQWRkIC1EQ0tfUlRTQ1RTIHRvIHRoZSBjb21waWxlciBDRkxBR1MgaW4geW91ciBtYWtlZmls ZSB0YXJnZXQgb3IKKyAgICAgICBkZWZpbmUgdGhpcyBzeW1ib2wgd2l0aGluIHRoZSBhcHByb3By aWF0ZSAjaWZkZWZzIGluIFsyOTZdY2tjZGViLmguCisKKyAgIFRvIGlsbHVzdHJhdGUgdGhlIGRp ZmZpY3VsdGllcyB3aXRoIFJUUy9DVFMsIGhlcmUgaXMgYSB0YWxlIGZyb20gSmFtaWUKKyAgIFdh dHNvbiA8andAYWRhc29mdC5jaD4sIHdobyBhZGRlZCB0aGUgUlRTL0NUUyBjb2RlIGZvciB0aGUg UlMvNjAwMCwKKyAgIGFib3V0IGhpcyBhdHRlbXB0cyB0byBkbyB0aGUgc2FtZSBmb3IgREVDIFVM VFJJWDoKKworICAgICAiVGhlIG51bWJlciBhbmQgdHlwZSBvZiBoYXJkd2FyZSBzaWduYWxzIGF2 YWlsYWJsZSB0by9mcm9tIGEgc2VyaWFsCisgICAgIHBvcnQgdmFyeSBiZXR3ZWVuIGRpZmZlcmVu dCBtYWNoaW5lcyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlcmlhbAorICAgICBpbnRlcmZhY2Vz IG9uIGVhY2ggbWFjaGluZS4gVGhpcyBtZWFucyB0aGF0LCBmb3IgZXhhbXBsZSwgdGhlcmUgYXJl CisgICAgIHZpcnR1YWxseSBubyBoYXJkd2FyZSBzaWduYWxzIGluIG9yIG91dCBhdmFpbGFibGUg b24gdGhlIERFQ3N5c3RlbQorICAgICAzMDAwLzMxMDAgc2VyaWVzOyBvbiB0aGUgREVDc3lzdGVt IDUwMDAvMnh4IHNlcmllcyBhbGwgbW9kZW0gc2lnbmFscworICAgICBpbi9vdXQgYXJlIHByZXNl bnQgb24gYm90aCBidWlsdC1pbiBzZXJpYWwgcG9ydHM7IG9uIHRoZSBERUNzeXN0ZW0KKyAgICAg NTEwMCBzb21lIHBvcnRzIGhhdmUgYWxsIHNpZ25hbHMgYW5kIHNvbWUgb25seSBoYXZlIHNvbWU7 IGFuZCBzbworICAgICBvbi4uLiBJdCBsb29rcyB0byBtZSBhcyBpZiB0aGlzIHByZXR0eSB3ZWxs IHJ1bGVzIG91dCBhbnkgYXR0ZW1wdCB0bworICAgICB1c2UgaGFyZHdhcmUgZmxvdyBjb250cm9s IG9uIHRoZXNlIHBsYXRmb3JtcywgZXZlbiBpZiB3ZSBjb3VsZAorICAgICBmaWd1cmUgb3V0IGhv dyB0byBkbyBpdC4gVGhlIGNvbmZ1c2lvbiBvbiB0aGUgdXNlciBsZXZlbCBhYm91dAorICAgICB3 aGV0aGVyIG9yIG5vdCBpdCBzaG91bGQgd29yayBmb3IgYW55IGdpdmVuIHBsYXRmb3JtIG9yIHBv cnQgd291bGQKKyAgICAgYmUgdHJlbWVuZG91cy4gQW5kIHRoZW4gaXQgaXNuJ3QgY2xlYXIgaG93 IHRvIHVzZSB0aGUgaGFyZHdhcmUKKyAgICAgc2lnbmFscyBldmVuIGluIHRoZSBjYXNlcyB3aGVy ZSB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZW0uIgorCisgIDkuNS4gVGVybWluYWwgU3BlZWRzCisK KyAgIFsgWzI5N11Ub3AgXSBbIFsyOThdQ29udGVudHMgXSBbIFsyOTldU2VjdGlvbiBDb250ZW50 cyBdIFsgWzMwMF1OZXh0IF0KKyAgIFsgWzMwMV1QcmV2aW91cyBdCisKKyAgIFRoZSBhbGxvd2Fi bGUgc3BlZWRzIGZvciB0aGUgU0VUIFNQRUVEIGNvbW1hbmQgYXJlIGRlZmluZWQgaW4KKyAgIFsz MDJdY2tjZGViLmguIElmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIHNwZWVkcyB0aGF0IGFyZSBub3Qg bGlzdGVkIGluCisgICAic2V0IHNwZWVkID8iLCB5b3UgY2FuIGFkZCBkZWZpbml0aW9ucyBmb3Ig dGhlbSB0byBja2NkZWIuaC4KKworICAgVGhlbiBpZiB0aGUgc3BlZWQgeW91IGFyZSBhZGRpbmcg aXMgb25lIHRoYXQgd2FzIG5ldmVyIHVzZWQgYmVmb3JlIGluCisgICBLZXJtaXQsIHN1Y2ggYXMg OTIxNjAwLCB5b3UnbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUgYXBwcm9wcmlhdGUKKyAgIGtleXdv cmRzIHRvIHNwZHRhYltdIGluIFszMDNdY2t1dXMzLmMsIGFuZCB0aGUgY29ycmVzcG9uZGluZyBj YXNlIHRvCisgICB0dHNzcGQoKSBpbiBbMzA0XWNrdXRpby5jLgorCisgIDkuNi4gTWlsbGlzZWNv bmQgU2xlZXBzCisKKyAgIFsgWzMwNV1Ub3AgXSBbIFszMDZdQ29udGVudHMgXSBbIFszMDddU2Vj dGlvbiBDb250ZW50cyBdIFsgWzMwOF1OZXh0IF0KKyAgIFsgWzMwOV1QcmV2aW91cyBdCisKKyAg IFRoZXJlIGlzIG5vIHN0YW5kYXJkIGZvciBtaWxsaXNlY29uZCBzbGVlcHMsIGJ1dCBhdCBsZWFz dCBmaXZlCisgICBkaWZmZXJlbnQgZnVuY3Rpb25zIGhhdmUgYXBwZWFyZWQgaW4gdmFyaW91cyBV bml4IHZlcnNpb25zIHRoYXQgY2FuIGJlCisgICB1c2VkIGZvciB0aGlzIHB1cnBvc2U6IG5hcCgp IChtb3N0bHkgaW4gU3lzdGVtIFYpLCB1c2xlZXAoKSAoZm91bmQgYXQKKyAgIGxlYXN0IGluIFN1 bk9TIGFuZCBOZVhUIE9TKSwgc2VsZWN0KCkgKGZvdW5kIGluIDQuMkJTRCBhbmQgbGF0ZXIsIGFu ZAorICAgcGFydCBvZiBhbnkgVENQL0lQIHNvY2tldHMgbGlicmFyeSksIG5hbm9zbGVlcCgpLCBh bmQgc2dpbmFwKCkuIElmIHlvdQorICAgaGF2ZSBhbnkgb2YgdGhlc2UgYXZhaWxhYmxlLCBwaWNr IG9uZSAoaW4gdGhpcyBvcmRlciBvZiBwcmVmZXJlbmNlLCBpZgorICAgeW91IGhhdmUgbW9yZSB0 aGFuIG9uZSk6CisKKy1EU0VMRUNUOiBJbmNsdWRlIHRoaXMgaW4gQ0ZMQUdTIGlmIHlvdXIgc3lz dGVtIGhhcyB0aGUgc2VsZWN0KCkgZnVuY3Rpb24uCistRE5BUDogICAgSW5jbHVkZSB0aGlzIGlu IENGTEFHUyBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIG5hcCgpIGZ1bmN0aW9uLgorLVVTTEVFUDog IEluY2x1ZGUgdGhpcyBpbiBDRkxBR1MgaWYgeW91ciBzeXN0ZW0gaGFzIHRoZSB1c2xlZXAoKSBm dW5jdGlvbi4KKworICAgTk9URTogVGhlIG5hcCgpIGZ1bmN0aW9uIGlzIGFzc3VtZWQgdG8gYmUg YSBmdW5jdGlvbiB0aGF0IHB1dHMgdGhlCisgICBwcm9jZXNzIHRvIHNsZWVwIGZvciB0aGUgZ2l2 ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gSWYgeW91ciBzeXN0ZW0ncworICAgbmFwKCkgZnVu Y3Rpb24gZG9lcyBzb21ldGhpbmcgZWxzZSBvciB1c2VzIHNvbWUgb3RoZXIgdW5pdHMgb2YgdGlt ZQorICAgKGxpa2UgdGhlIE5DUiBUb3dlciAzMiwgd2hpY2ggdXNlcyBjbG9jay10aWNrcyksIGRv IG5vdCBpbmNsdWRlIC1ETkFQLgorCisgICBSZXBvcnRlZGx5LCBhbGwgdmVyc2lvbnMgb2YgU3lz dGVtIFYgUjQgZm9yIEludGVsLWJhc2VkIGNvbXB1dGVycywgYW5kCisgICBwb3NzaWJseSBhbHNv IFNWUjMuMiwgaW5jbHVkZSBuYXAoKSBhcyBhIGtlcm5lbCBjYWxsLCBidXQgaXQncyBub3QgaW4K KyAgIHRoZSBsaWJyYXJ5LiBUbyBpbmNsdWRlIGNvZGUgdG8gdXNlIGl0IHZpYSBzeXNjYWxsKDMx MTIseCksIHdpdGhvdXQKKyAgIGhhdmluZyB0byBpbmNsdWRlIFhlbml4IGNvbXBhdGliaWxpdHkg ZmVhdHVyZXMsIGluY2x1ZGUgdGhlIGZvbGxvd2luZworICAgY29tcGlsZS10aW1lIG9wdGlvbjoK KworLUROQVBIQUNLCisKKyAgOS43LiBOb25kZXN0cnVjdGl2ZSBJbnB1dCBCdWZmZXIgUGVla2lu ZworCisgICBbIFszMTBdVG9wIF0gWyBbMzExXUNvbnRlbnRzIF0gWyBbMzEyXVNlY3Rpb24gQ29u dGVudHMgXSBbIFszMTNdTmV4dCBdCisgICBbIFszMTRdUHJldmlvdXMgXQorCisgICBTb21lIEFU JlQgVW5peCB2ZXJzaW9ucyBoYXZlIG5vIHdheSB0byBjaGVjayBpZiBpbnB1dCBpcyB3YWl0aW5n IG9uIGEKKyAgIHR0eSBkZXZpY2UsIGJ1dCB0aGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgZmVhdHVy ZSBmb3IgS2VybWl0LiBXaXRob3V0CisgICBpdCwgc2xpZGluZyB3aW5kb3dzIG1pZ2h0IG5vdCB3 b3JrIHZlcnkgd2VsbCAob3IgYXQgYWxsKSwgYW5kIHlvdSBhbHNvCisgICBoYXZlIHRvIHR5cGUg eW91ciBlc2NhcGUgY2hhcmFjdGVyIHRvIGdldCBLZXJtaXQncyBhdHRlbnRpb24gaW4gb3JkZXIK KyAgIHRvIGludGVycnVwdCBhIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2Zlci4gSWYgeW91ciBzeXN0 ZW0gb2ZmZXJzIGFuCisgICBGSU9OUkVBRCBpb2N0bCwgdGhlIGJ1aWxkIHByb2NlZHVyZSBzaG91 bGQgcGljayB0aGF0IHVwIGF1dG9tYXRpY2FsbHkKKyAgIGFuZCB1c2UgaXQsIHdoaWNoIGlzIGlk ZWFsLgorCisgICBJZiB5b3VyIHN5c3RlbSBsYWNrcyBGSU9OUkVBRCBidXQgaGFzIGEgc2VsZWN0 KCkgZnVuY3Rpb24sIHRoaXMgY2FuIGJlCisgICB1c2VkIGluc3RlYWQuIElmIHRoZSBidWlsZCBw cm9jZWR1cmUgZmFpbHMgdG8gaW5jbHVkZSBpdCAoU0hPVyBGRUFUVVJFUworICAgd2lsbCBsaXN0 IFNFTEVDVCksIHRoZW4geW91IGNhbiBhZGQgaXQgdG8geW91ciBDRkxBR1M6CisKKy1EU0VMRUNU CisKKyAgIENvbnZlcnNlbHksIGlmIHRoZSBidWlsZCBwcm9jZWR1cmUgdHJpZXMgdG8gdXNlIHNl bGVjdCgpIHdoZW4gaXQgcmVhbGx5CisgICBpcyBub3QgdGhlcmUsIGFkZDoKKworLUROT1NFTEVD VAorCisgICBOb3RlOiBzZWxlY3QoKSBpcyBub3QgcGFydCBvZiBTeXN0ZW0gViBub3Igb2YgUE9T SVgsIGJ1dCBpdCBoYXMgYmVlbgorICAgYWRkZWQgdG8gdmFyaW91cyBTeXN0ZW0tVi0gYW5kIFBP U0lYLWJhc2VkIHN5c3RlbXMgYXMgYW4gZXh0ZW5zaW9uLgorCisgICBTb21lIFN5c3RlbS1WIHZh cmlhdGlvbnMgKFNDTyBYZW5peC9VTklYL09EVCBhbmQgRElBQiBETklYKSBpbmNsdWRlIGEKKyAg IHJkY2hrKCkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgYnVmZmVyIHBlZWtpbmcuIEl0 IHJldHVybnMgMCBpZgorICAgbm8gY2hhcmFjdGVycyBhcmUgd2FpdGluZyBhbmQgMSBpZiBjaGFy YWN0ZXJzIGFyZSB3YWl0aW5nIChidXQgdW5saWtlCisgICBGSU9OUkVBRCwgaXQgZG9lcyBub3Qg dGVsbCB0aGUgYWN0dWFsIG51bWJlcikuIElmIHlvdXIgc3lzdGVtIGhhcworICAgcmRjaGsoKSwg YWRkOgorCistRFJEQ0hLOiAgSW5jbHVkZSB0aGlzIGluIENGTEFHUyBpZiB5b3VyIHN5c3RlbSBo YXMgdGhlIHJkY2hrKCkgZnVuY3Rpb24uCisKKyAgIE90aGVyd2lzZSwgaWYgeW91ciB2ZXJzaW9u IG9mIFVuaXggaGFzIHRoZSBwb2xsKCkgZnVuY3Rpb24gKGFuZCB0aGUKKyAgIC91c3IvaW5jbHVk ZS9wb2xsLmggZmlsZSkgLS0gd2hpY2ggYXBwZWFycyB0byBiZSBhIHN0YW5kYXJkIHBhcnQgb2YK KyAgIFN5c3RlbSBWIGdvaW5nIGJhY2sgdG8gYXQgbGVhc3QgU1ZSMywgaW5jbHVkZToKKworLURD S19QT0xMCisKKyAgOS44LiBPdGhlciBTeXN0ZW0tRGVwZW5kZW50IEZlYXR1cmVzCisKKyAgIFsg WzMxNV1Ub3AgXSBbIFszMTZdQ29udGVudHMgXSBbIFszMTddU2VjdGlvbiBDb250ZW50cyBdIFsg WzMxOF1OZXh0IF0KKyAgIFsgWzMxOV1QcmV2aW91cyBdCisKKyAgIFN5c3RlbXMgd2l0aCA8dGVy bWlvcy5oPiBtaWdodCBoYXZlIHRoZSBzeW1ib2wgSUVYVEVOIGRlZmluZWQuIFRoaXMgaXMKKyAg IHVzZWQgdG8gdHVybiAiZXh0ZW5kZWQgZmVhdHVyZXMiIGluIHRoZSB0dHkgZGV2aWNlIGRyaXZl ciBvbiBhbmQgb2ZmLAorICAgc3VjaCBhcyBDdHJsLU8gdG8gdG9nZ2xlIG91dHB1dCBmbHVzaGlu ZywgQ3RybC1WIHRvIHF1b3RlIGlucHV0CisgICBjaGFyYWN0ZXJzLCBldGMuCisKKyAgIEluIG1v c3QgVW5peCBpbXBsZW1lbnRhdGlvbnMsIGl0IHNob3VsZCBiZSB0dXJuZWQgb2ZmIGR1cmluZyBL ZXJtaXQKKyAgIG9wZXJhdGlvbiwgc28gaWYgWzMyMF1ja3V0aW8uYyBmaW5kcyB0aGlzIHN5bWJv bCwgaXQgdXNlcyBpdC4gVGhpcyBpcworICAgbmVjZXNzYXJ5LCBhdCBsZWFzdCwgb24gQlNESS4g T24gc29tZSBzeXN0ZW1zLCBob3dldmVyLCBJRVhURU4gaXMKKyAgIGVpdGhlciBtaXNkZWZpbmVk IG9yIG1pc2ltcGxlbWVudGVkLiBUaGUgc3ltcHRvbSBpcyB0aGF0IENSLCB3aGVuIHR5cGVkCisg ICB0byB0aGUgY29tbWFuZCBwcm9jZXNzb3IsIGlzIGVjaG9lZCBhcyBMRiwgcmF0aGVyIHRoYW4g Q1JMRi4gVGhpcworICAgaGFwcGVucyAoYXQgbGVhc3QpIG9uIENvbnZleC9PUyA5LjEuIFRoZSBz b2x1dGlvbiBpcyB0byBhZGQgdGhlCisgICBmb2xsb3dpbmcgc3ltYm9sIHRvIHRoZSBtYWtlZmls ZSB0YXJnZXQncyBDRkxBQ1M6CisKKy1ETk9JRVhURU4KKworICAgSG93ZXZlciwgaW4gYXQgbGVh c3Qgb25lIFVuaXggaW1wbGVtZW50YXRpb24sIFFOWCA0LjIxLCBJRVhURU4gbXVzdCBiZQorICAg c2V0IGJlZm9yZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgY2FuIGJlIHVzZWQuCisKKyAgIEluIGVk aXRzIDE3NyBhbmQgZWFybGllciwgd29ya3N0YXRpb24gdXNlcnMgbm90aWNlZCBhICJzbG93IHNj cmVlbgorICAgd3JpdGluZyIgcGhlbm9tZW5vbiBkdXJpbmcgaW50ZXJhY3RpdmUgY29tbWFuZCBw YXJzaW5nLiBUaGlzIHdhcyB0cmFjZWQKKyAgIHRvIGEgc2V0YnVmKCkgY2FsbCBpbiBbMzIxXWNr dXRpby5jIHRoYXQgbWFkZSBjb25zb2xlIChzdGRvdXQpIHdyaXRlcworICAgdW5idWZmZXJlZC4g VGhpcyBzZXRidWYoKSBjYWxsIGhhcyBiZWVuIHRoZXJlIGZvcmV2ZXIsIGFuZCBjb3VsZCBub3Qg YmUKKyAgIHJlbW92ZWQgd2l0aG91dCBzb21lIHJpc2suIEtlcm1pdCdzIG9wZXJhdGlvbiB3YXMg dGVzdGVkIG9uIHRoZSBOZVhUIGluCisgICBlZGl0IDE3OCB3aXRoIHRoZSBzZXRidWYoKSBjYWxs IHJlbW92ZWQsIGFuZCB0aGUgc2xvdy13cml0aW5nIHN5bXB0b20KKyAgIHdhcyBjdXJlZCwgYW5k IGV2ZXJ5dGhpbmcgZWxzZSAoY29tbWFuZCBwYXJzaW5nLCBwcm9wZXIgd2FrZXVwIG9uID8sCisg ICBFU0MsIEN0cmwtVSwgYW5kIG90aGVyIGVkaXRpbmcgY2hhcmFjdGVycywgdGVybWluYWwgZW11 bGF0aW9uLAorICAgcmVtb3RlLW1vZGUgYW5kIGxvY2FsLW1vZGUgZmlsZSB0cmFuc2ZlciwgZXRj KSBzZWVtZWQgdG8gd29yayBhcyB3ZWxsCisgICBhcyBvciBiZXR0ZXIgdGhhbiBiZWZvcmUuIElu IHN1YnNlcXVlbnQgZWRpdHMsIHRoaXMgY2hhbmdlIHdhcyBtYWRlIHRvCisgICBtYW55IG90aGVy IHZlcnNpb25zIHRvbywgd2l0aCBubyBhcHBhcmVudCBpbGwgZWZmZWN0cy4gVG8gcmVtb3ZlIHRo ZQorICAgc2V0YnVmKCkgY2FsbCBmb3IgeW91ciB2ZXJzaW9uIG9mIEtlcm1pdCwgYWRkOgorCist RE5PU0VUQlVGCisKKyAgIExhdGVyIHJlcG9ydHMgaW5kaWNhdGUgdGhhdCBhZGRpbmcgLUROT1NF VEJVRiBoYXMgb3RoZXIgYmVuZWZpY2lhbAorICAgZWZmZWN0cywgbGlrZSBjdXR0aW5nIGRvd24g b24gc3dhcHBpbmcgd2hlbiBLZXJtaXQgaXMgcnVuIG9uCisgICB3b3Jrc3RhdGlvbnMgd2l0aCBz bWFsbCBtZW1vcmllcy4gQnV0IEJFV0FSRTogb24gY2VydGFpbiBzbWFsbCBVbml4CisgICBzeXN0 ZW1zLCBub3RhYmx5IHRoZSBBVCZUIDYzMDAgYW5kIDNCMSAodGhlIHZlcnkgc2FtZSBvbmVzIHRo YXQgYmVuZWZpdAorICAgZnJvbSBOT1NFVEJVRiksIE5PU0VUQlVGIHNlZW1zIHRvIGNvbmZsaWN0 IHdpdGggQ0tfQ1VSU0VTLiBUaGUgcHJvZ3JhbQorICAgYnVpbGRzIGFuZCBydW5zIE9LLCBidXQg YWZ0ZXIgb25jZSB1c2luZyB0aGUgY3Vyc2VzIGRpc3BsYXksIGVjaG9pbmcgaXMKKyAgIG1lc3Nl ZCB1cC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2UgYSBTeXN0ZW0tViBzcGVjaWZpYyB2YXJpYXRpb24g aW4gdGhlCisgICBjdXJzZXMgY29kZSwgdXNpbmcgbmV3dGVybSgpIHRvIHByZXZlbnQgU3lzdGVt IFYgZnJvbSBhbHRlcmluZyB0aGUKKyAgIGJ1ZmZlcmluZy4gU2VlIG1ha2VmaWxlIGVudHJpZXMg Zm9yIEFUJlQgNjMwMCBhbmQgM0IxLgorCisgICBUaGUgVW5peCB2ZXJzaW9uIG9mIEMtS2VybWl0 IGluY2x1ZGVzIGNvZGUgdG8gc3dpdGNoIHRvIGZpbGUgZGVzY3JpcHRvcgorICAgemVybyAoc3Rk aW4pIGZvciByZW1vdGUtbW9kZSBmaWxlIHRyYW5zZmVyLiBUaGlzIGNvZGUgaXMgbmVjZXNzYXJ5 IHRvCisgICBwcmV2ZW50IEtlcm1pdCBmcm9tIGdpdmluZyB0aGUgaW1wcmVzc2lvbiB0aGF0IGl0 IGlzICJpZGxlIiBkdXJpbmcgZmlsZQorICAgdHJhbnNmZXJzLCB3aGljaCwgYXQgc29tZSBzaXRl cywgY2FuIHJlc3VsdCBpbiB0aGUgam9iIGJlaW5nIGxvZ2dlZCBvdXQKKyAgIGluIHRoZSBtaWRk bGUgb2YgYW4gYWN0aXZlIGZpbGUgdHJhbnNmZXIgYnkgaWRsZS1qb2IgbW9uaXRvcnMuCisKKyAg IEhvd2V2ZXIsIHRoaXMgZmVhdHVyZSBjYW4gaW50ZXJmZXJlIHdpdGggY2VydGFpbiBzZXR1cHM7 IGZvciBleGFtcGxlLAorICAgdGhlcmUgaXMgYSBwYWNrYWdlIHdoaWNoIHN1YnN0aXR1dGVzIGEg cHR5L3R0eSBwYWlyIGZvciAvZGV2L3R0eSBhbmQKKyAgIHNldHMgZmlsZSBkZXNjcmlwdG9yIDAg dG8gYmUgcmVhZC1vbmx5LCBwcmV2ZW50aW5nIEtlcm1pdCBmcm9tIHNlbmRpbmcKKyAgIHBhY2tl dHMuIE9yLi4uIFdoZW4gYSBVbml4IHNoZWxsIGlzIGludm9rZWQgdW5kZXIgdGhlIFBJQ0sgZW52 aXJvbm1lbnQsCisgICBmaWxlIGRlc2NyaXB0b3IgMCBpcyBpbm9wZXJhdGl2ZS4KKworICAgVG8g cmVtb3ZlIHRoaXMgZmVhdHVyZSBhbmQgYWxsb3cgS2VybWl0IHRvIHdvcmsgaW4gc3VjaCBlbnZp cm9ubWVudHMsCisgICBhZGQgdGhlIGNvbXBpbGUtdGltZSBvcHRpb246CisKKy1ETk9GRFpFUk8K KworICAgT24gc29tZSB2ZXJzaW9ucyBvZiBVbml4LCBlYXJsaWVyIHJlbGVhc2VzIG9mIEMtS2Vy bWl0IHdlcmUgcmVwb3J0ZWQgdG8KKyAgIHJlbmRlciBhIHR0eSBkZXZpY2UgdW51c2FibGUgYWZ0 ZXIgYSBoYW5ndXAgb3BlcmF0aW9uLiBFeGFtcGxlcyBpbmNsdWRlCisgICBJQk0gQUlYIG9uIHRo ZSBSVCBQQyBhbmQgUlMvNjAwMC4gQSB0eXBpY2FsIHN5bXB0b20gb2YgdGhpcyBwaGVub21lbm9u CisgICBpcyB0aGF0IHRoZSBESUFMIGNvbW1hbmQgZG9lc24ndCB3b3JrLCBidXQgQ09OTkVDVGlu ZyB0byB0aGUgZGV2aWNlIGFuZAorICAgZGlhbGluZyBtYW51YWxseSBkbyB3b3JrLiBBIGZ1cnRo ZXIgdGVzdCBpcyB0byBTRVQgRElBTCBIQU5HVVAgT0ZGLAorICAgd2hpY2ggc2hvdWxkIG1ha2Ug ZGlhbGluZyB3b3JrIG9uY2UgYnkgc2tpcHBpbmcgdGhlIHByZS1kaWFsIGhhbmd1cC4KKyAgIEhv d2V2ZXIsIGFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGJyb2tlbiwgaXQgY2FuJ3QgYmUgdXNlZCBh bnkgbW9yZToKKyAgIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gRElBTCB0aGUgc2FtZSBkZXZpY2Ug ZG9uJ3Qgd29yay4gVGhlIGN1cmUgaXMKKyAgIHVzdWFsbHkgdG8gY2xvc2UgYW5kIHJlb3BlbiB0 aGUgZGV2aWNlIGFzIHBhcnQgb2YgdGhlIGhhbmd1cCBvcGVyYXRpb24uCisgICBUbyBkbyB0aGlz LCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgY29tcGlsZS10aW1lIG9wdGlvbjoKKworLURDTFNPUE4K KworICAgU2ltaWxhcmx5LCB0aGVyZSBpcyBhIHNlY3Rpb24gb2YgY29kZSBpbiB0dG9wZW4oKSwg d2hpY2ggZG9lcyBhbm90aGVyCisgICBjbG9zZShvcGVuKCkpIHRvIGZvcmNlIHRoZSBPX05ERUxB WSBtb2RlIGNoYW5nZS4gT24gc29tZSBzeXN0ZW1zLCB0aGUKKyAgIGNsb3NlKG9wZW4oKSkgaXMg cmVxdWlyZWQgdG8gbWFrZSB0aGUgbW9kZSBjaGFuZ2UgdGFrZSBlZmZlY3QsIGFuZAorICAgYXBw YXJlbnRseSBvbiBtb3N0IG90aGVycyBpdCBkb2VzIG5vIGhhcm0uIEJ1dCByZXBvcnRlZGx5IG9u IGF0IGxlYXN0CisgICBvbmUgU3lzdGVtIFYgUjQgaW1wbGVtZW50YXRpb24sIGFuZCBvbiBTQ08g WGVuaXggMy4yLCB0aGUgY2xvc2Uob3BlbigpKQorICAgb3BlcmF0aW9uIGhhbmdzIGlmIHRoZSBk ZXZpY2UgbGFja3MgY2FycmllciwgRVZFTiBUSE9VR0ggdGhlIENMT0NBTAorICAgY2hhcmFjdGVy aXN0aWMgaGFzIGp1c3QgYmVlbiBzZXQgdG8gYXZvaWQgdGhpcyB2ZXJ5IHByb2JsZW0uIElmIHRo aXMKKyAgIGhhcHBlbnMgdG8geW91LCBhZGQgdGhpcyB0byB5b3VyIENGTEFHUzoKKworLUROT0NP VEZNQworCisgICBvciwgZXF1aXZhbGVudGx5LCBpbiB5b3VyIEtGTEFHUyBvbiB0aGUgbWFrZSBj b21tYW5kIGxpbmUuIEl0IHN0YW5kcworICAgZm9yIE5PIENsb3NlKE9wZW4oKSkgVG8gRm9yY2Ug TW9kZSBDaGFuZ2UuCisKKyAgIEMtS2VybWl0IHJlbmFtZXMgZmlsZXMgd2hlbiB5b3UgZ2l2ZSBh IFJFTkFNRSBjb21tYW5kIGFuZCBhbHNvCisgICBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgU0VU IEZJTEUgQ09MTElTSU9OIG9wdGlvbiB3aGVuIHJlY2VpdmluZworICAgZmlsZXMuIFRoZSBub3Jt YWwgVW5peCB3YXkgdG8gcmVuYW1lIGEgZmlsZSBpcyB2aWEgdHdvIHN5c3RlbSBjYWxsczoKKyAg IGxpbmsoKSBhbmQgdW5saW5rKCkuIEJ1dCB0aGlzIGxlYXZlcyBvcGVuIGEgd2luZG93IG9mIHZ1 bG5lcmFiaWxpdHkuCisgICBTb21lIFVuaXggc3lzdGVtcyBhbHNvIG9mZmVyIGFuIGF0b21pYyBy ZW5hbWUob2xkbmFtZSxuZXduYW1lKQorICAgZnVuY3Rpb24uIElmIHlvdXIgdmVyc2lvbiBvZiBV bml4IGhhcyB0aGlzIGZ1bmN0aW9uLCBhZGQgdGhlIGZvbGxvd2luZworICAgdG8geW91ciBDRkxB R1M6CisKKy1EUkVOQU1FCisKKyAgIEMtS2VybWl0IHByZWRlZmluZXMgdGhlIFJFTkFNRSBmb3Ig c2V2ZXJhbCBVbml4IHZlcnNpb25zIGluCisgICBbMzIyXWNrY2RlYi5oIChTVlI0LCBTVU5PUzQx LCBCU0Q0NCwgQUlYUlMsIGV0YykuIFlvdSBjYW4gdGVsbCBpZgorICAgcmVuYW1lKCkgaXMgYmVp bmcgdXNlZCBpZiB0aGUgU0hPVyBGRUFUVVJFUyBjb21tYW5kIGluY2x1ZGVzIFJFTkFNRSBpbgor ICAgdGhlIGNvbXBpbGVyIG9wdGlvbnMgbGlzdC4gSWYgdGhlIHByZWRlZmluZWQgUkVOQU1FIHN5 bWJvbCBjYXVzZXMKKyAgIHRyb3VibGUsIHRoZW4gYWRkIE5PUkVOQU1FIHRvIHlvdXIgQ0ZMQUdT LiBUcm91YmxlIGluY2x1ZGVzOgorCisgICAgYS4gTGlua2VyIGNvbXBsYWlucyB0aGF0IF9yZW5h bWUgaXMgYW4gdW5yZXNvbHZlZCBzeW1ib2wuCisgICAgYi4gTGlua2luZyB3b3JrcywgYnV0IEtl cm1pdCdzIFJFTkFNRSBjb21tYW5kIGRvZXNuJ3Qgd29yayAod2hpY2gKKyAgICAgICBoYXBwZW5z IGJlY2F1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgcmVuYW1lKCkgbWlnaHQgaGF2ZSB0aGVpcgorICAg ICAgIGFyZ3VtZW50cyByZXZlcnNlZCkuCisKKyAgIElmIHJlbmFtZSgpIGlzIG5vdCB1c2VkLCB0 aGVuIEtlcm1pdCB1c2VzIGxpbmsoKS91bmxpbmsoKSwgd2hpY2ggaXMKKyAgIGVxdWl2YWxlbnQg ZXhjZXB0IGl0IGlzIG5vdCBhdG9taWM6IHRoZXJlIGlzIGEgdGlueSBpbnRlcnZhbCBpbiB3aGlj aAorICAgc29tZSBvdGhlciBwcm9jZXNzIG1pZ2h0ICJkbyBzb21ldGhpbmciIHRvIG9uZSBvZiB0 aGUgZmlsZXMgb3IgbGlua3MuCisKKyAgIFNvbWUgVW5peCBzeXN0ZW1zIChPbGl2ZXR0aSBYL09T LCBBbWRhaGwgVVRTL1YsIElDTCBTVlIzLCBldGMpIGRlZmluZQorICAgdGhlIFNfSVNSRUcgYW5k IFNfSVNESVIgbWFjcm9zIGluY29ycmVjdGx5LiBUaGlzIGlzIGNvbXBlbnNhdGVkIGZvcgorICAg YXV0b21hdGljYWxseSBpbiBbMzIzXWNrdWZpby5jLiBPdGhlciBzeXN0ZW1zIG1pZ2h0IGhhdmUg dGhpcyBzYW1lCisgICBwcm9ibGVtLiBJZiB5b3UgZ2V0IGEgY29tcGlsZS10aW1lIGVycm9yIG1l c3NhZ2UgcmVnYXJkaW5nIFNfSVNSRUcKKyAgIGFuZC9vciBTX0lTRElSLCBhZGQgdGhlIGZvbGxv d2luZyB0byB5b3VyIENGTEFHUzoKKworLURJU0RJUkJVRworCisgICBGaW5hbGx5LCBoZXJlJ3Mg YSBzeW1ib2wgeW91IHNob3VsZCBORVZFUiBkZWZpbmU6CisKKy1EQ09NTUVOVAorCisgICBJdCdz IHVzZWQgZm9yIGNvbW1lbnRpbmcgb3V0IGJsb2NrcyBvZiBjb2RlLiBJZiBmb3Igc29tZSByZWFz b24geW91CisgICBmaW5kIHRoYXQgeW91ciBjb21waWxlciBoYXMgQ09NTUVOVCBkZWZpbmVkLCB0 aGVuIGFkZCAtVUNPTU1FTlQgdG8KKyAgIENGTEFHUyBvciBLRkxBR1MhIFNpbWlsYXJseSwgc29t ZSBoZWFkZXIgZmlsZXMgaGF2ZSBiZWVuIGtub3duIHRvCisgICBkZWZpbmUgQ09NTUVOVCwgaW4g d2hpY2ggY2FzZSB5b3UgbXVzdCBhZGQgIiN1bmRlZiBDT01NRU5UIiB0byBlYWNoCisgICBDLUtl cm1pdCBzb3VyY2UgbW9kdWxlLCBhZnRlciBhbGwgdGhlICNpbmNsdWRlcy4KKworICA5LjkuIFRl cm1pbmFsIEludGVycnVwdGlvbgorCisgICBbIFszMjRdVG9wIF0gWyBbMzI1XUNvbnRlbnRzIF0g WyBbMzI2XVNlY3Rpb24gQ29udGVudHMgXSBbIFszMjddTmV4dCBdCisgICBbIFszMjhdUHJldmlv dXMgXQorCisgICBXaGVuIEMtS2VybWl0IGVudGVycyBpbnRlcmFjdGl2ZSBjb21tYW5kIG1vZGUs IGl0IHNldHMgYSBDb250cm9sLUMKKyAgICh0ZXJtaW5hbCBrZXlib2FyZCBpbnRlcnJ1cHQgPSBT SUdJTlQpIHRyYXAgdG8gYWxsb3cgaXQgdG8gcmV0dXJuIHRvCisgICB0aGUgY29tbWFuZCBwcm9t cHQgd2hlbmV2ZXIgdGhlIHVzZXIgdHlwZXMgQ29udHJvbC1DIChvciB3aGF0ZXZlciBpcworICAg YXNzaWduZWQgdG8gYmUgdGhlIGludGVycnVwdCBjaGFyYWN0ZXIpLiBUaGlzIGlzIGltcGxlbWVu dGVkIHVzaW5nCisgICBzZXRqbXAoKSBhbmQgbG9uZ2ptcCgpLiBPbiBzb21lIHN5c3RlbXMsIGRl cGVuZGluZyBvbiB0aGUgbWFjaGluZQorICAgYXJjaGl0ZWN0dXJlIGFuZCBDIGNvbXBpbGVyIGFu ZCB3aG8ga25vd3Mgd2hhdCBlbHNlLCB5b3UgbWlnaHQgZ2V0CisgICAiTWVtb3J5IGZhdWx0IChj b3JlZHVtcCkiIG9yICJsb25nam1wIGJvdGNoIiBpbnN0ZWFkIG9mIHRoZSBkZXNpcmVkCisgICBl ZmZlY3QgKHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gaW4gNUEoMTkwKSBhbmQgbGF0ZXIpLiBJbiB0 aGF0IGNhc2UsIGFkZAorICAgLUROT0NDVFJBUCB0byB5b3VyIENGTEFHUyBhbmQgcmVidWlsZCB0 aGUgcHJvZ3JhbS4KKworICAgSm9iIGNvbnRyb2wgLS0gdGhlIGFiaWxpdHkgdG8gInN1c3BlbmQi IEMtS2VybWl0IG9uIGEgVW5peCBzeXN0ZW0gYnkKKyAgIHR5cGluZyB0aGUgInN1c3AiIGNoYXJh Y3RlciAobm9ybWFsbHkgQ3RybC1aKSBhbmQgdGhlbiByZXN1bWUgZXhlY3V0aW9uCisgICBsYXRl ciAod2l0aCB0aGUgImZnIiBjb21tYW5kKSAtLSBpcyBhIHRyaWNreSBidXNpbmVzcy4gQy1LZXJt aXQgbXVzdAorICAgdHJhcCBzdXNwZW5kIHNpZ25hbHMgc28gaXQgY2FuIHB1dCB0aGUgdGVybWlu YWwgYmFjayBpbnRvIG5vcm1hbCBtb2RlCisgICB3aGVuIHlvdSBzdXNwZW5kIGl0IChLZXJtaXQg cHV0cyB0aGUgdGVybWluYWwgaW50byB2YXJpb3VzIHN0cmFuZ2UKKyAgIG1vZGVzIGR1cmluZyBp bnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNpbmcsIENPTk5FQ1QsIGFuZCBmaWxlIHRyYW5zZmVyKS4K KyAgIFN1cHBvcnRpbmcgY29kZSBpcyBjb21waWxlZCBpbnRvIEMtS2VybWl0IGF1dG9tYXRpY2Fs bHkgaWYgPHNpZ25hbC5oPgorICAgaW5jbHVkZXMgYSBkZWZpbml0aW9uIGZvciB0aGUgU0lHVFNU UCBzaWduYWwuIEhPV0VWRVIuLi4gc29tZSBzeXN0ZW1zCisgICBkZWZpbmUgdGhpcyBzaWduYWwg d2l0aG91dCBzdXBwb3J0aW5nIGpvYiBjb250cm9sIGNvcnJlY3RseS4gWW91IGNhbgorICAgYnVp bGQgS2VybWl0IHRvIGlnbm9yZSBTSUdUU1RQIHNpZ25hbHMgYnkgaW5jbHVkaW5nIHRoZSAtRE5P SkMgb3B0aW9uCisgICBpbiBDRkxBR1MuIChZb3UgY2FuIGFsc28gZG8gdGhpcyBhdCBydW50aW1l IGJ5IGdpdmluZyB0aGUgY29tbWFuZCBTRVQKKyAgIFNVU1BFTkQgT0ZGLikKKworICAgICBOT1RF OiBBcyBvZiB2ZXJzaW9uIDVBKDE5MCksIEMtS2VybWl0IG1ha2VzIGFub3RoZXIgc2FmZXR5IGNo ZWNrLgorICAgICBFdmVuIGlmIGpvYiBjb250cm9sIGlzIGF2YWlsYWJsZSBpbiB0aGUgb3BlcmF0 aW5nIHN5c3RlbSAoYWNjb3JkaW5nCisgICAgIHRvIHRoZSBudW1lcm91cyBjaGVja3MgbWFkZSBp biBjb25nbSgpKSwgaXQgd2lsbCBzdGlsbCBkaXNhYmxlIHRoZQorICAgICBjYXRjaGluZyBvZiBT SUdUU1RQIHNpZ25hbHMgaWYgU0lHVFNUUCB3YXMgc2V0IHRvIFNJR19JR04gYXQgdGhlCisgICAg IHRpbWUgQy1LZXJtaXQgd2FzIHN0YXJ0ZWQuCisKKyAgIFN5c3RlbSBWIFIzIGFuZCBlYXJsaWVy IHN5c3RlbXMgbm9ybWFsbHkgZG8gbm90IHN1cHBvcnQgam9iIGNvbnRyb2wuIElmCisgICB5b3Ug aGF2ZSBhbiBTVlIzIHN5c3RlbSB0aGF0IGRvZXMsIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvcHRp b24gaW4geW91cgorICAgQ0ZMQUdTOgorCistRFNWUjNKQworCisgICBPbiBzeXN0ZW1zIHRoYXQg Y29ycmVjdGx5IGltcGxlbWVudCBQT1NJWCBzaWduYWwgaGFuZGxpbmcsIHNpZ25hbHMgY2FuCisg ICBiZSBoYW5kbGVkIG1vcmUgcmVsaWFibHkgdGhhbiBpbiBCZWxsLCBCZXJrZWxleSwgb3IgQVQm VCBVbml4ZXMuIE9uCisgICBzeXN0ZW1zIChzdWNoIGFzIFFOWCkgdGhhdCBhcmUgInN0cmljdGx5 IFBPU0lYIiwgUE9TSVggc2lnbmFsIGhhbmRsaW5nCisgICAqbXVzdCogYmUgdXNlZCwgb3RoZXJ3 aXNlIG5vIHNpZ25hbCB3aWxsIHdvcmsgbW9yZSB0aGFuIG9uY2UuIElmIHlvdQorICAgaGF2ZSBQ T1NJWC1iYXNlZCBzeXN0ZW0gYW5kIHlvdSBmaW5kIHRoYXQgeW91ciB2ZXJzaW9uIG9mIEtlcm1p dAorICAgcmVzcG9uZHMgdG8gQ3RybC1DIChTSUdJTlQpIG9yIEN0cmwtWiAoU0lHVFNUUCkgb25s eSBvbmNlLCB0aGVuIHlvdQorICAgc2hvdWxkIGFkZCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB5 b3VyIENGTEFHUzoKKworLURDS19QT1NJWF9TSUcKKworICAgQnV0IGJlIGNhcmVmdWw7IHNvbWUg UE9TSVggaW1wbGVtZW50YXRpb25zLCBub3RhYmx5IDQuNEJTRCwgaW5jbHVkZQorICAgUE9TSVgg c2lnbmFsIGhhbmRsaW5nIHN5bWJvbHMgYW5kIGZ1bmN0aW9ucyBhcyAic3R1YnMiIG9ubHksIHdo aWNoIGRvCisgICBub3RoaW5nLiBMb29rIGluIDxzaWduYWwuaD4gZm9yIHNpZ3NldGptcCBhbmQg c2lnbG9uZ2ptcCBhbmQgcmVhZCB0aGUKKyAgIGNvbW1lbnRzLgorCisxMC4gRElBTElORyBPVVQg QU5EIENPT1JESU5BVElORyBXSVRIIFVVQ1AKKworICAgWyBbMzI5XVRvcCBdIFsgWzMzMF1Db250 ZW50cyBdIFsgWzMzMV1OZXh0IF0gWyBbMzMyXVByZXZpb3VzIF0KKworICAgVGhlIHNob3J0IHZl cnNpb24gKGdlbmVyYWwpOgorCisgICAgIEluIG9yZGVyIGZvciBDLUtlcm1pdCB0byBiZSBhYmxl IHRvIGRpYWwgb3V0IGZyb20geW91ciBVbml4CisgICAgIGNvbXB1dGVyLCB5b3UgbmVlZCB0byBn aXZlIGl0IHRoZSBzYW1lIG93bmVyLCBncm91cCwgYW5kIHBlcm1pc3Npb25zCisgICAgIGFzIHlv dXIgb3RoZXIgZGlhbG91dCBwcm9ncmFtcywgc3VjaCBhcyBjdSwgdGlwLCBtaW5pY29tLCB1dWNw LAorICAgICBzZXlvbiwgZXRjLgorCisgICBUaGUgc2hvcnQgdmVyc2lvbiBmb3IgTGludXggb25s eToKKworICAgICBTaW5jZSBSZWQgSGF0IDcuMiwgYWJvdXQgMjAwMiwgTGludXggZG9lcyBub3Qg bGVhdmUgdGhlIGxvY2tmaWxlCisgICAgIGhhbmRsaW5nIHRvIGVhY2ggYXBwbGljYXRpb24sIGJ1 dCBpbnN0ZWFkIHByb3ZpZGVzIGFuIGV4dGVybmFsCisgICAgIGFwcGxpY2F0aW9uLCAvdXNyL3Ni aW4vbG9ja2RldiwgdGhhdCBhbGwgYXBwbGljYXRpb25zIHNob3VsZCBpbnZva2UKKyAgICAgd2hl biB0aGV5IG5lZWQgdG8gYWNjZXNzIGEgc2VyaWFsIHBvcnQ7IGxvY2tkZXYgbG9ja3MgYW5kIHVu bG9ja3MKKyAgICAgdGhlIHBvcnQgd2l0aG91dCByZXF1aXJpbmcgdGhlIGFwcGxpY2F0aW9uIHRv IGhhdmUgcHJpdmlsZWdlcywgc2luY2UKKyAgICAgdGhlIHByaXZpbGVnZXMgb24gdGhlIGxvY2tm aWxlIGRpcmVjdG9yeSBhcmUgYXNzaWduZWQgdG8gbG9ja2Rldi4KKyAgICAgQy1LZXJtaXQgOC4w LjIxMSBhbmQgbGF0ZXIgc3VwcG9ydCB0aGlzIG1ldGhvZC4gQnV0IEMtS2VybWl0IHN0aWxsCisg ICAgIG5lZWRzIHRvIGJlIGFibGUgdG8gb3BlbiB0aGUgcG9ydCBpdHNlbGYsIGFuZCB0aGVyZWZv cmUgaWYgdGhlCisgICAgIHBvcnQncyBwZXJtaXNzaW9ucyBkbyBub3QgYWxsb3cgcmVhZC93cml0 ZSBhY2Nlc3MgdG8gdGhlIGdlbmVyYWwKKyAgICAgcHVibGljLCB0aGUgZ2VuZXJhbCBydWxlIG11 c3Qgc3RpbGwgYmUgZm9sbG93ZWQ6IGluIHRoZSBtb3N0IGNvbW1vbgorICAgICBjYXNlLCBpdCBt dXN0IGJlIFNFVEdJRCB0byB0aGUgZ3JvdXAgdXVjcCAoZXhwbGFpbmVkIGJlbG93KS4gSWYgYQor ICAgICBwcmUtOC4wLjIxMSB2ZXJzaW9uIG9mIEMtS2VybWl0IGlzIHRvIGJlIGluc3RhbGxlZCBm b3IgdXNlIHdpdGgKKyAgICAgc2VyaWFsIHBvcnRzIG9uIGFueSB2ZXJzaW9uIG9mIExpbnV4LCBp dCBtdXN0IHN0aWxsIGJlIGluc3RhbGxlZCBhcworICAgICBkZXNjcmliZWQgaW4gdGhlIGZvbGxv d2luZyBzZWN0aW9ucy4KKworICAgVGhlIGxvbmcgdmVyc2lvbjoKKworICAgTWFrZSBzdXJlIHlv dXIgZGlhbG91dCBsaW5lIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIGZvciBkaWFsaW5nIG91dCAo YXMKKyAgIG9wcG9zZWQgdG8gbG9naW4pLiBUaGUgbWV0aG9kIGZvciBkb2luZyB0aGlzIGlzIGRp ZmZlcmVudCBmb3IgZWFjaCBraW5kCisgICBvZiBVbml4LiBDb25zdWx0IHlvdXIgc3lzdGVtIGRv Y3VtZW50YXRpb24gZm9yIGNvbmZpZ3VyaW5nIGxpbmVzIGZvcgorICAgZGlhbGluZyBvdXQgKGZv ciBleGFtcGxlLCBTdW4gU1BBUkNzdGF0aW9uIElQQyB1c2VycyBzaG91bGQgcmVhZCB0aGUKKyAg IHNlY3Rpb24gIlNldHRpbmcgdXAgTW9kZW0gU29mdHdhcmUiIGluIHRoZSBEZXNrdG9wIFNQQVJD IFN1biBTeXN0ZW0gYW5kCisgICBOZXR3b3JrIE1hbmFnZXIncyBHdWlkZSwgb3IgdGhlIFRlcm1p bmFscyBhbmQgTW9kZW1zIHNlY3Rpb24gb2YgdGhlIEhQCisgICBtYW51YWwsICJDb25maWd1cmlu ZyBIUC1VWCBmb3IgUGVyaXBoZXJhbHMiIChlLmcuIC91c3Ivc2Jpbi9zYW0gPT4KKyAgIFBlcmlw aGVyYWwgRGV2aWNlcyA9PiBUZXJtaW5hbHMgYW5kIE1vZGVtcyA9PiBBZGQgTW9kZW0pLgorCisg ICBVbmxpa2UgbW9zdCBvdGhlciBtdWx0aXVzZXIsIG11bHRpdGFza2luZyBvcGVyYXRpbmcgc3lz dGVtcywgVW5peAorICAgYWxsb3dzIG11bHRpcGxlIHVzZXJzIHRvIGFjY2VzcyB0aGUgc2FtZSBz ZXJpYWwgZGV2aWNlIGF0IHRoZSBzYW1lCisgICB0aW1lLCBldmVuIHRob3VnaCB0aGVyZSBpcyBu byBlYXJ0aGx5IHJlYXNvbiB3aHkgdHdvIHVzZXJzIHNob3VsZCBkbworICAgdGhpcy4gV2hlbiB0 aGV5IGRvLCB1c2VyIEEgd2lsbCByZWFkIHNvbWUgb2YgdGhlIGluY29taW5nIGNoYXJhY3RlcnMs CisgICBhbmQgdXNlciBCIHdpbGwgcmVhZCB0aGUgb3RoZXJzLiBJbiBhbGwgbGlrZWxpaG9vZCwg bmVpdGhlciB1c2VyIHdpbGwKKyAgIHNlZSB0aGVtIGFsbC4gRnVydGhlcm1vcmUsIFVzZXIgQiBj YW4gaGFuZyB1cCBVc2VyIEEncyBjYWxsLCBhbmQgc28KKyAgIG9uZS4KKworICAgUmF0aGVyIHRo YW4gY2hhbmdlIFVuaXggdG8gZW5mb3JjZSBleGNsdXNpdmUgYWNjZXNzIHRvIHNlcmlhbCBkZXZp Y2VzCisgICBzdWNoIGFzIHR0eXMsIHdoZW4gaXQgbWlnaHQgc3RpbGwgaGF2ZSBiZWVuIHBvc3Np YmxlLCBVbml4IGRldmVsb3BlcnMKKyAgIG9wdGVkIGZvciBhICJsb2NrIGZpbGUiIG1lY2hhbmlz bS4gQW55IHByb2Nlc3MgdGhhdCB3YW50cyB0byBvcGVuIGEgdHR5CisgICBkZXZpY2Ugc2hvdWxk IGZpcnN0IGNoZWNrIHRvIHNlZSBpZiBhIGZpbGUgb2YgYSBjZXJ0YWluIG5hbWUgZXhpc3RzLAor ICAgYW5kIGlmIHNvLCBub3QgdG8gb3BlbiB0aGUgZGV2aWNlLiBJZiB0aGUgZmlsZSBkb2VzIG5v dCBleGlzdCwgdGhlCisgICBwcm9jZXNzIGNyZWF0ZXMgdGhlIGZpbGUgYW5kIHRoZW4gb3BlbnMg dGhlIGRldmljZS4gV2hlbiB0aGUgcHJvY2VzcworICAgY2xvc2VzIHRoZSBkZXZpY2UsIGl0IGRl c3Ryb3lzIHRoZSBsb2NrZmlsZS4gVGhpcyBwcm9jZWR1cmUgd2FzCisgICBvcmlnaW5hdGVkIGZv ciB1c2Ugd2l0aCBVbml4J3MgVVVDUCwgQ1UsIGFuZCBUSVAgcHJvZ3JhbXMsIGFuZCBzbyB0aGVz ZQorICAgbG9ja2ZpbGVzIGFyZSBjb21tb25seSBjYWxsZWQgIlVVQ1AgbG9ja2ZpbGVzIiAoVVVD UCA9IFVuaXgtdG8tVW5peAorICAgQ29weSBQcm9ncmFtKS4KKworICAgQXMgeW91IGNhbiBpbWFn aW5lLCB0aGlzIG1ldGhvZCBpcyByaWRkbGVkIHdpdGggcGl0ZmFsbHM6CisKKyAgICAgKiBJZiBh IHByb2Nlc3MgZG9lcyBub3Qgb2JzZXJ2ZSB0aGUgcHJldmFpbGluZyBsb2NrZmlsZSBjb252ZW50 aW9uLAorICAgICAgIHRoZW4gaXQgY2FuIGludGVyZmVyZSB3aXRoIG90aGVyICJwb2xpdGUiIHBy b2Nlc3Nlcy4gQW5kIGluIGZhY3QsCisgICAgICAgdmVyeSBmZXcgVW5peCBhcHBsaWNhdGlvbnMg b3IgY29tbWFuZHMgaGFuZGxlIGxvY2tmaWxlcyBhdCBhbGw7IGFuCisgICAgICAgb3JpZ2luYWwg ZGVzaWduIGdvYWwgb2YgVW5peCB3YXMgdGhhdCAiZXZlcnl0aGluZyBpcyBhIGZpbGUiLCBhbmQK KyAgICAgICBjb3VudGxlc3MgdXRpbGl0aWVzIG9wZXJhdGUgb24gZmlsZXMgZGlyZWN0bHkgKGJ5 IG9wZW5pbmcgdGhlbSkgb3IKKyAgICAgICBpbmRpcmVjdGx5IHRocm91Z2ggcmVkaXJlY3Rpb24g b2Ygc3RhbmRhcmQgaS9vLCB3aXRob3V0IGNyZWF0aW5nIG9yCisgICAgICAgbG9va2luZyBmb3Ig bG9ja2ZpbGVzLgorICAgICAqIElmIGEgcHJvY2VzcyBjcmFzaGVzIHdoaWxlIGl0IGhhcyB0aGUg ZGV2aWNlIG9wZW4sIHRoZSBsb2NrZmlsZSBpcworICAgICAgIGxlZnQgYmVoaW5kLCBwcmV2ZW50 aW5nIGZ1cnRoZXIgcHJvY2Vzc2VzIGZyb20gdXNpbmcgdGhlIGRldmljZS4KKyAgICAgKiBWYXJp b3VzIHZlcnNpb25zIG9mIFVuaXggdXNlIGRpZmZlcmVudCBuYW1lcyBmb3IgdGhlIGxvY2tmaWxl cywgcHV0CisgICAgICAgdGhlbSBpbiBkaWZmZXJlbnQgZGlyZWN0b3JpZXMsIHdpdGggZGlmZmVy ZW50IG93bmVycyBhbmQgZ3JvdXBzIGFuZAorICAgICAgIHBlcm1pc3Npb25zLCBhbmQgc3BlY2lm eSB0aGVpciBjb250ZW50cyBkaWZmZXJlbnRseS4KKyAgICAgKiBPbiBhIGdpdmVuIHBsYXRmb3Jt LCB0aGUgbG9ja2ZpbGUgY29udmVudGlvbnMgbWF5IGNoYW5nZSBmcm9tIG9uZQorICAgICAgIFVu aXggcmVsZWFzZSB0byB0aGUgbmV4dCAoZm9yIGV4YW1wbGUsIFN1bk9TIDQuMCB0byA0LjEpIG9y LCBpbiB0aGUKKyAgICAgICBjYXNlIG9mIExpbnV4LCBhY3Jvc3MgZGlmZmVyZW50IGRpc3RyaWJ1 dGlvbnMuCisgICAgICogVGhlIHNhbWUgdHR5IGRldmljZSBtaWdodCBoYXZlIG1vcmUgdGhhbiBv bmUgbmFtZSwgYW5kIG1vc3QKKyAgICAgICBsb2NrZmlsZSBjb252ZW50aW9ucyBkb24ndCBhbGxv dyBmb3IgdGhpcy4gU2ltaWxhcmx5IGZvciBzeW1ib2xpYworICAgICAgIGxpbmtzLgorCisgICBJ biBhbiBhdHRlbXB0IHRvIGFkZHJlc3MgdGhlIHByb2JsZW0gb2YgInN0YWxlIiBsb2NrZmlsZXMs IG1vc3QgVVVDUAorICAgaW1wbGVtZW50YXRpb25zIHB1dCB0aGUgUElEIChQcm9jZXNzIElEKSBv ZiB0aGUgY3JlYXRpbmcgcHJvY2VzcyBpbiB0aGUKKyAgIGxvY2tmaWxlLiBUaHVzLCBhbm90aGVy IHByb2Nlc3MgdGhhdCB3YW50cyB0byBvcGVuIHRoZSBjb3JyZXNwb25kaW5nCisgICBkZXZpY2Ug Y2FuIGNoZWNrIG5vdCBvbmx5IGZvciB0aGUgbG9ja2ZpbGUgaXRzZWxmLCBidXQgYWxzbyBjYW4g Y2hlY2sKKyAgIHRoZSBQSUQgZm9yIHZhbGlkaXR5LiBCdXQgdGhpcyBkb2Vzbid0IHdvcmsgd2Vs bCBlaXRoZXI6CisKKyAgICAgKiBQSURzIGFyZSBzdG9yZWQgaW4gZGl2ZXJzZSBmb3JtYXRzIHRo YXQgY2hhbmdlIHdpdGggZXZlcnkgbmV3CisgICAgICAgcmVsZWFzZSAoc2hvcnQsIGludGVnZXIs IGxvbmcsIG9yIHN0cmluZyBpbiBhbnkgb2YgdmFyaW91cworICAgICAgIGZvcm1hdHMpLiBJZiB0 aGUgcmVhZGluZyBwcm9ncmFtIGRvZXMgbm90IGZvbGxvdyB0aGUgc2FtZQorICAgICAgIGNvbnZl bnRpb24gYXMgdGhlIHdyaXRpbmcgcHJvZ3JhbSwgaXQgY2FuIGRpYWdub3NlIGEgdmFsaWQgUElE IHRvCisgICAgICAgYmUgaW52YWxpZCwgYW5kIHRoZXJlZm9yZSBub3QgaG9ub3IgdGhlIGxvY2su CisgICAgICogUElEcyByZWN5Y2xlLiBJZiB0aGUgbG9ja2ZpbGUgd2FzIGNyZWF0ZWQgYnkgUElE IDEyMzQsIHdoaWNoIGxhdGVyCisgICAgICAgY3Jhc2hlZCB3aXRob3V0IHJlbW92aW5nIHRoZSBs b2NrZmlsZSwgYW5kIHRoZW4gYSBuZXcgcHJvY2VzcyAxMjM0CisgICAgICAgZXhpc3RzIGEgdGhl IHRpbWUgdGhlIGxvY2tmaWxlIGlzIGNoZWNrZWQsIHRoZSBsb2NrZmlsZSB3aWxsIGJlCisgICAg ICAgaW1wcm9wZXJseSB0YWtlbiBhcyB2YWxpZCwgYW5kIGFjY2VzcyB0byB0aGUgZGV2aWNlIGRl bmllZAorICAgICAgIHVubmVjZXNzYXJpbHkuCisKKyAgIFNldmVyYWwgdGVjaG5pcXVlcyBhZGRy ZXNzIHRoZSBwcm9ibGVtIG9mIG11bHRpcGxlIG5hbWVzIGZvciB0aGUgc2FtZQorICAgZGV2aWNl OgorCisgICAgICogTXVsdGlwbGUgbG9ja2ZpbGVzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHVzZXIg b3BlbnMgYSBkZXZpY2UgdGhyb3VnaAorICAgICAgIGEgc3ltbGluaywgYSBsb2NrZmlsZSBpcyBj cmVhdGVkIGZvciBib3RoIHRoZSBzeW1saW5rIG5hbWUgYW5kIHRoZQorICAgICAgIHRydWUgbmFt ZSAob2J0YWluZWQgZnJvbSByZWFkbGluaygpKS4gSG93ZXZlciwgd2hlbiBtdWx0aXBsZQorICAg ICAgIGRyaXZlcnMgYXJlIGluc3RhbGxlZCBmb3IgdGhlIHNhbWUgZGV2aWNlIChlLmcuIC9kZXYv Y3VhLAorICAgICAgIC9kZXYvY3VmYSwgZXRjKSwgdGhpcyBhcHByb2FjaCB3b24ndCB3b3JrIHVu bGVzcyBhbGwgYXBwbGljYXRpb25zCisgICAgICAgKmtub3cqIGFsbCB0aGUgZGlmZmVyZW50IG5h bWVzIGZvciB0aGUgc2FtZSBkZXZpY2UgYW5kIG1ha2UKKyAgICAgICBsb2NrZmlsZXMgZm9yIGFs bCBvZiB0aGVtLCB3aGljaCBpcyBvYnZpb3VzbHkgbm90IHByYWN0aWNhbC4KKyAgICAgKiBMb2Nr ZmlsZXMgd2hvc2UgbmFtZXMgYXJlIG5vdCBiYXNlZCBvbiB0aGUgZGV2aWNlIG5hbWUuIFRoZXNl CisgICAgICAgbG9ja2ZpbGVzIGdlbmVyYWxseSBoYXZlIG5hbWVzIGxpa2UgTEsuaW5vZGUvbWFq b3IvbWlub3IsIHdoZXJlCisgICAgICAgaW5vZGUsIG1ham9yLCBhbmQgbWlub3IgYXJlIG51bWJl cnMsIHdoaWNoIHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lCisgICAgICAgZm9yIGFueSBwaHlzaWNh bCBkZXZpY2UsIG5vIG1hdHRlciB3aGF0IGl0cyBuYW1lLiBUaGlzIGZvcm0gb2YKKyAgICAgICBs b2NrZmlsZSBpcyB1c2VkIGluIFN5c3RlbSBWIFI0IGFuZCBpdHMgZGVyaXZhdGl2ZXMsIHN1Y2gg YXMKKyAgICAgICBTb2xhcmlzLCBVbml4V2FyZSwgZXRjLiBJZiBsb2NrZmlsZXMgbXVzdCBiZSB1 c2VkIChhcyBvcHBvc2VkIHRvLAorICAgICAgIHNheSwga2VybmVsLWJhc2VkIGxvY2tzKSwgdGhp cyB3b3VsZCBzZWVtIHRvIGJlIHRoZSBtb3N0IGVmZmVjdGl2ZQorICAgICAgIGZvcm0uCisKKyAg IE1vc3QgdmVyc2lvbnMgb2YgVW5peCB3ZXJlIG5vdCBkZXNpZ25lZCB0byBhY2NvbW1vZGF0ZSB0 aGlyZC1wYXJ0eQorICAgY29tbXVuaWNhdGlvbnMgc29mdHdhcmU7IHRodXMgdmVuZG9ycyBvZiB0 aGVzZSBVbml4IHByb2R1Y3RzIGZlZWwgbm8KKyAgIGNvbXB1bmN0aW9uIGFib3V0IGNoYW5naW5n IGxvY2tmaWxlIGNvbnZlbnRpb25zIGZyb20gcmVsZWFzZSB0bworICAgcmVsZWFzZSwgc2luY2Ug dGhleSBhbHNvIGNoYW5nZSB0aGVpciB2ZXJzaW9ucyBvZiB0aGUgY3UsIHV1Y3AsIHRpcCwKKyAg IGV0YywgcHJvZ3JhbXMgYXQgdGhlIHNhbWUgdGltZSB0byBtYXRjaC4gQW5kIHNpbmNlIHRoZSBz b3VyY2UgY29kZSB0bworICAgdGhlc2UgcHJvZ3JhbXMgbWlnaHQgbm90IGJlIHB1Ymxpc2hlZCwg aXQgaXMgZGlmZmljdWx0IGZvciBtYWtlcnMgb2YKKyAgIHRoaXJkLXBhcnR5IHByb2R1Y3RzIGxp a2UgQy1LZXJtaXQgdG8gZmluZCBvdXQgd2hhdCB0aGUgbmV3IGNvbnZlbnRpb25zCisgICBhcmUu IEl0IGFsc28gZm9yY2VzIHJlbGVhc2Ugb2YgbmV3IHZlcnNpb25zIG9mIEMtS2VybWl0IHdoZW5l dmVyIHRoZSBPUworICAgdmVuZG9yIG1ha2VzIGEgY2hhbmdlIGxpa2UgdGhpcy4KKworICAgU29t ZSBVbml4IHZlbmRvcnMgaGF2ZSB0YWtlbiBhIHNtYWxsIHN0ZXAgdG8gc2ltcGxpZnkgY29tbXVu aWNhdGlvbnMKKyAgIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGZvciB0aGVpciBwcm9kdWN0czog dGhlIGluY2x1c2lvbiBvZiBsb2NrZmlsZQorICAgcm91dGluZXMgaW4gdGhlIHN0YW5kYXJkIHN5 c3RlbSBDIHJ1bnRpbWUgbGlicmFyaWVzIHRvIHNoaWVsZCB0aGUKKyAgIGFwcGxpY2F0aW9uIGZy b20gdGhlIGRldGFpbHMgb2YgbG9ja2ZpbGUgbWFuYWdlbWVudCAoSUJNIEFJWCBpcyBhbgorICAg ZXhhbXBsZSkuIFdoZW4gc3VjaCByb3V0aW5lcyBhcmUgdXNlZCwgY29tbXVuaWNhdGlvbnMgYXBw bGljYXRpb25zIGRvCisgICBub3QgbmVlZCBtb2RpZmljYXRpb24gd2hlbiBsb2NrZmlsZSBjb252 ZW50aW9ucyBjaGFuZ2UgKGFsdGhvdWdoIHRoZXkKKyAgIHdpbGwgbmVlZCByZWNvbXBpbGluZyBp ZiB0aGUgcm91dGluZXMgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlCisgICBhcHBsaWNh dGlvbikuIEluIHRoZSBBSVggZXhhbXBsZSwgdGhlIHNpbXBsZSBmdW5jdGlvbiBjYWxscyB0dHls b2NrKCksCisgICB0dHl1bmxvY2soKSwgYW5kIHR0eWxvY2tlZCgpIHJlcGxhY2UgaHVuZHJlZHMg b2YgbGluZXMgb2YgdWdseSBjb2RlIGluCisgICBDLUtlcm1pdCB0aGF0IGF0dGVtcHRzIHRvIGtl ZXAgcGFjZSB3aXRoIGV2ZXJ5IHJlbGVhc2Ugb2YgZXZlcnkgVW5peAorICAgcHJvZHVjdCBvdmVy IHRoZSBsYXN0IDIwIHllYXJzLiBJbmNsdXNpb24gb2YgdHR5bG9jaygpIGNvZGUgb2NjdXJzCisg ICB3aGVuOgorCistRFVTRVRUWUxPQ0sKKworICAgaXMgaW5jbHVkZWQgaW4gdGhlIENGTEFHUy4K KworICAgSWYgc3VjaCByb3V0aW5lcyBhcmUgYXZhaWxhYmxlLCB0aGV5IHNob3VsZCBiZSB1c2Vk LiBUaGUgcmVzdCBvZiB0aGlzCisgICBzZWN0aW9uIGFwcGxpZXMgd2hlbiB0aGV5IGFyZSBub3Qu CisKKyAgIFRvIGZpdCBpbiB3aXRoIFVVQ1AgYW5kIG90aGVyIFVuaXgtYmFzZWQgc2VyaWFsLXBv cnQgY29tbXVuaWNhdGlvbgorICAgc29mdHdhcmUsIEMtS2VybWl0IG11c3QgaGF2ZSB0aGUgc2Ft ZSBpZGVhIGFzIHlvdXIgc3lzdGVtJ3MgdXVjcCwgY3UsCisgICBhbmQgdGlwIHByb2dyYW1zIGFi b3V0IHdoYXQgdGhlIFVVQ1AgbG9jayBkaXJlY3RvcnkgaXMgY2FsbGVkLCB3aGF0IHRoZQorICAg bG9ja2ZpbGUgaXRzZWxmIGlzIGNhbGxlZCwgYW5kIHdoYXQgaXRzIGNvbnRlbnRzIHNob3VsZCBi ZS4gSW4gbW9zdAorICAgY2FzZXMsIEMtS2VybWl0IHByZXByb2Nlc3NvciBmbGFncyBjcmVhdGUg dGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb24KKyAgIGF0IGNvbXBpbGUgdGltZSBpZiB0aGUg YXBwcm9wcmlhdGUgbWFrZWZpbGUgdGFyZ2V0IHdhcyB1c2VkIChzZWUKKyAgIFszMzNdY2t1dGlv LmMpLiBUaGUgZm9sbG93aW5nIENGTEFHUyBvcHRpb25zIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRl CisgICB0aGUgYnVpbHQtaW4gY29uZmlndXJhdGlvbjoKKworICAgLURMQ0tESVIKKyAgICAgICAg ICBUZWxscyBLZXJtaXQgdGhhdCB0aGUgVVVDUCBsb2NrIGRpcmVjdG9yeSBpcworICAgICAgICAg IC91c3Ivc3Bvb2wvdXVjcC9MQ0suCisKKyAgIC1EQUNVQ05UUkwKKyAgICAgICAgICBUZWxscyBL ZXJtaXQgdG8gdXNlIHRoZSBCU0QgNC4zIGFjdWNudHJsKCkgcHJvZ3JhbSB0byB0dXJuIG9mZgor ICAgICAgICAgIGdldHR5IChsb2dpbikgb24gdGhlIGxpbmUgYmVmb3JlIHVzaW5nIGl0LCBhbmQg cmVzdG9yZSBnZXR0eQorICAgICAgICAgIHdoZW4gZG9uZS4KKworICAgLURIREJVVUNQCisgICAg ICAgICAgSW5jbHVkZSB0aGlzIGlmIHlvdXIgc3lzdGVtIHVzZXMgSG9uZXkgRGFuQmVyIFVVQ1As IGluIHdoaWNoIHRoZQorICAgICAgICAgIGxvY2tmaWxlIGRpcmVjdG9yeSBhbmQgZm9ybWF0IGFy ZSByZWxhdGl2ZWx5IHN0YW5kYXJkaXplZC4KKworICAgLURMT0NLX0RJUj1cXFwiL3h4eC95eXlc XFwiCisgICAgICAgICAgR2l2ZXMgdGhlIGxvY2sgZGlyZWN0b3J5IG5hbWUgZXhwbGljaXRseS4g VGhlIHRyaXBsZSBxdW90aW5nIGlzCisgICAgICAgICAgbmVjZXNzYXJ5LiBGb3IgZXhhbXBsZToK KworQ0ZMQUdTPSAtREJTRDQgLURMT0NLX0RJUj1cXFwiL3Vzci9sb2NhbC9sb2Nrc1xcXCIgLURO T0RFQlVHCisKKyAgICAgICAgICAoTk9URTogVGhlIHRyaXBsZSBxdW90aW5nIGFzc3VtZXMgdGhp cyBpcyBhICJ0b3AtbGV2ZWwiIG1ha2UKKyAgICAgICAgICBlbnRyeSwgYW5kIG5vdCBhIG1ha2Ug ZW50cnkgdGhhdCBjYWxscyBhbm90aGVyIG9uZS4pCisKKyAgIC1ETEZERVZOTyBUaGUgbG9ja2Zp bGUgbmFtZSB1c2VzIHRoZSB0dHkgZGV2aWNlIGlub2RlIGFuZCBtYWpvciBhbmQKKyAgICAgICAg ICBtaW5vcgorICAgICAgICAgIG51bWJlcnM6IExLLmRldi5tYWoubWluLCBhcyBpbiBTeXMgViBS NCwgZS5nLiBMSy4wMzUuMDQ0LjAwOC4KKworICAgV2hlbiB0aGUgTEsuaW5vZGUubWFqb3IubWlu b3IgZm9ybSBpcyB1c2VkLCBhIHNpbmdsZSBsb2NrZmlsZSBpcworICAgZW5vdWdoLiBPdGhlcndp c2UsIGEgc2luZ2xlIGxvY2tmaWxlIHJhcmVseSBzdWZmaWNlcy4gRm9yIGV4YW1wbGUsIGluCisg ICBMaW51eCwgaXQgaXMgY29tbW9uIHRvIGhhdmUgYSAvZGV2L21vZGVtIHN5bWJvbGljIGxpbmsg dG8gYW4gYWN0dWFsCisgICBkaWFsb3V0IGRldmljZSwgbGlrZSAvZGV2L2N1YTAgb3IgL2Rldi90 dHlTMCwgd2hvc2UgcHVycG9zZSBpcyB0byBoaWRlCisgICB0aGUgZGV0YWlscyBvZiB0aGUgYWN0 dWFsIGRyaXZlciBmcm9tIHRoZSB1c2VyLiBTbyBpZiBvbmUgdXNlciBvcGVucworICAgL2Rldi9t b2RlbSwgYSBsb2NrZmlsZSBjYWxsZWQgTENLLi5tb2RlbSBpcyBjcmVhdGVkLCB3aGljaCBkb2Vz IG5vdAorICAgcHJldmVudCBhbm90aGVyIHVzZXIgZnJvbSBzaW11bHRhbmVvdXNseSBvcGVuaW5n IHRoZSBzYW1lIGRldmljZSBieSBpdHMKKyAgIHJlYWwgbmFtZS4KKworICAgT24gU0NPIFVuaXgg cGxhdGZvcm1zLCB3ZSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHByb2JsZW06IHRoZSBzYW1l CisgICBkZXZpY2UgaXMsIGJ5IGNvbnZlbnRpb24sIGtub3duIGJ5ICJsb3dlcmNhc2UiIGFuZCAi dXBwZXJjYXNlIiBuYW1lcywKKyAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGhhcyBtb2RlbSBj b250cm9sLiBTbyBieSBjb252ZW50aW9uLAorICAgY29tbXVuaWNhdGlvbnMgcHJvZ3JhbXMgYXJl IHN1cHBvc2VkIHRvIGNyZWF0ZSB0aGUgbG9ja2ZpbGVzIGJhc2VkIG9uCisgICB0aGUgbG93ZXJj YXNlIG5hbWUuIEJ1dCBzb21lIHByb2dyYW1zIGRvbid0IGZvbGxvdyB0aGlzIGNvbnZlbnRpb24u IEluCisgICBIUC1VWCwgd2UgaGF2ZSBzZXZlcmFsIGRpZmZlcmVudCBuYW1lcyBmb3IgZWFjaCBz ZXJpYWwgZGV2aWNlLiBBbmQgc28KKyAgIG9uLgorCisgICBGb3IgdGhpcyByZWFzb24sIG9uIHBs YXRmb3JtcyB3aGVyZSB0aGUgTEsuaW5vZGUubWFqb3IubWlub3IgZm9ybSBpcworICAgbm90IHVz ZWQsIEMtS2VybWl0IGFsc28gY3JlYXRlcyBhIHNlY29uZGFyeSBsb2NrZmlsZSAod2hpY2ggaXMg c2ltcGx5IGEKKyAgIGxpbmsgdG8gdGhlIGZpcnN0KSBpZjoKKworICAgIGEuIFRoZSBnaXZlbiBk ZXZpY2UgbmFtZSBpcyBhIHN5bWJvbGljIGxpbmsuIFRoZSBzZWNvbmRhcnkgbGluayBpcworICAg ICAgIGJhc2VkIG9uIHRoZSBkZXZpY2UncyByZWFsIG5hbWUuCisgICAgYi4gT24gU0NPOiBUaGUg ZGV2aWNlIG5hbWUgaXMgbm90IGEgc3ltYm9saWMgbGluaywgYnV0IGl0IGNvbnRhaW5zCisgICAg ICAgdXBwZXJjYXNlIGxldHRlcnMuIFRoZSBwcmltYXJ5IGxpbmsgaXMgYmFzZWQgb24gdGhlIGxv d2VyY2FzZSBuYW1lOworICAgICAgIHRoZSBzZWNvbmRhcnkgbGluayBpcyBiYXNlZCBvbiB0aGUg bmFtZSB0aGF0IHdhcyBnaXZlbi4KKyAgICBjLiBPbiBIUC1VWDogVGhlIGRldmljZSBuYW1lIHN0 YXJ0cyB3aXRoICJjdSIuIFRoZSBwcmltYXJ5IGxpbmsgaXMKKyAgICAgICBiYXNlZCBvbiB0aGUg bmFtZSB0aGF0IHdhcyBnaXZlbjsgdGhlIHNlY29uZGFyeSBsaW5rIGlzIGJhc2VkIG9uCisgICAg ICAgdGhlIGNvcnJlc3BvbmRpbmcgInR0eWQiIGRldmljZSwgZS5nLiAiTENLLi5jdWEwcDAiIGFu ZAorICAgICAgICJMQ0suLnR0eWQwcDAiLgorCisgICBOT1RFOiBzeW1saW5rcyBhcmUgbm90IGhh bmRsZWQgaW4gSFAtVVguCisKKyAgIEhvbmV5IERhbkJlciAoSERCKSBVVUNQLCB0aGUgYmFzaXMg b2YgbWFueSBVVUNQIGltcGxlbWVudGF0aW9ucywgaGFzCisgICB0d28gY2hhcmFjdGVyaXN0aWNz OgorCisgICAgYS4gTG9ja2ZpbGVzIGFyZSBrZXB0IGluIC91c3Ivc3Bvb2wvbG9ja3MvICh1c3Vh bGx5KS4KKyAgICBiLiBBIGxvY2tmaWxlIGNvbnRhaW5zIHRoZSBwcm9jZXNzIGlkIChwaWQpIGlu IEFTQ0lJLCByYXRoZXIgdGhhbiBhcworICAgICAgIGFuIGludC4KKworICAgTm9uLUhEQiBzZWxl Y3Rpb25zIGFzc3VtZSB0aGUgbG9ja2ZpbGUgY29udGFpbnMgdGhlIHBpZCBpbiBpbnQgZm9ybQor ICAgKG9yLCBtb3JlIHByZWNpc2VseSwgaW4gUElEX1QgZm9ybSwgd2hlcmUgUElEX1QgaXMgZWl0 aGVyIGludCBvciBwaWRfdCwKKyAgIGRlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSdzIEMgbGlicmFy eSBhbmQgaGVhZGVyIGZpbGVzKS4gKGIpLCBieSB0aGUKKyAgIHdheSwgaXMgc3ViamVjdCB0byBp bnRlcnByZXRhdGlvbjogdGhlIG51bWVyaWMgQVNDSUkgc3RyaW5nIG1heSBvciBtYXkKKyAgIG5v dCBiZSB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSwgaXQgbWF5IG9yIG1heSBub3QgaGF2ZSBsZWFk aW5nIHNwYWNlcworICAgKG9yIHplcm9zKSwgYW5kIHRoZSBudW1iZXIgb2YgbGVhZGluZyBzcGFj ZXMgb3IgemVyb3MgY2FuIGRpZmZlciwgYW5kCisgICB0aGUgZGlmZmVyZW5jZXMgY2FuIGJlIHNp Z25pZmljYW50LgorCisgICBFdmVuIGlmIHlvdSBidWlsZCB0aGUgcHJvZ3JhbSB3aXRoIHRoZSBy aWdodCBsb2NrZmlsZSBvcHRpb24sIHlvdSBjYW4KKyAgIHN0aWxsIGhhdmUgcHJvYmxlbXMgd2hl biB5b3UgdHJ5IHRvIG9wZW4gdGhlIGRldmljZS4gSGVyZSBhcmUgdGhlIGVycm9yCisgICBtZXNz YWdlcyB5b3UgY2FuIGdldCBmcm9tIFNFVCBMSU5FLCBhbmQgd2hhdCB0aGV5IG1lYW46CisKKyAg ICBhLiAiVGltZWQgb3V0LCBubyBjYXJyaWVyLiIgVGhpcyBvbmUgaXMgbm90IHJlbGF0ZWQgdG8g bG9ja2ZpbGVzLiBJdAorICAgICAgIG1lYW5zIHRoYXQgeW91IGhhdmUgU0VUIENBUlJJRVIgT04g eHgsIHdoZXJlIHh4IGlzIHRoZSBudW1iZXIgb2YKKyAgICAgICBzZWNvbmRzIHRvIHdhaXQgZm9y IGNhcnJpZXIsIGFuZCBjYXJyaWVyIGRpZCBub3QgYXBwZWFyIHdpdGhpbiB4eAorICAgICAgIHNl Y29uZHMuIFNvbHV0aW9uOiBTRVQgQ0FSUklFUiBBVVRPIG9yIE9GRi4KKyAgICBiLiAiU29ycnks IGFjY2VzcyB0byBsb2NrIGRlbmllZC4iIEtlcm1pdCBoYXMgYmVlbiBjb25maWd1cmVkIHRvIHVz ZQorICAgICAgIGxvY2tmaWxlcywgYnV0IChhKXRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgaXMgd3Jp dGUtcHJvdGVjdGVkIGFnYWluc3QKKyAgICAgICB5b3UsIG9yIChiKSBpdCBkb2VzIG5vdCBleGlz dC4gVGhlICJhY2Nlc3MgdG8gbG9jayBkZW5pZWQiIG1lc3NhZ2UKKyAgICAgICB3aWxsIHRlbGwg eW91IHRoZSByZWFzb24uIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsIGNoZWNrIHRv CisgICAgICAgbWFrZSBzdXJlIEtlcm1pdCBpcyB1c2luZyB0aGUgcmlnaHQgbmFtZS4gSnVzdCBi ZWNhdXNlIHZlcnNpb24gbiBvZgorICAgICAgIHlvdXIgVW5peCB1c2VkIGEgY2VydGFpbiBsb2Nr ZmlsZSBkaXJlY3RvcnkgaXMgbm8gZ3VhcmFudGVlIHRoYXQKKyAgICAgICB2ZXJzaW9uIG4uMSBk b2VzIG5vdCB1c2UgYSBkaWZmZXJlbnQgb25lLiBXb3JrYXJvdW5kOiBhc2sgdGhlCisgICAgICAg c3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gaW5zdGFsbCBhIHN5bWJvbGljIGxpbmsgZnJvbSB0aGUg b2xkIG5hbWUKKyAgICAgICB0byB0aGUgbmV3IG5hbWUuIE90aGVyIHNvbHV0aW9uczogKHNlZSBi ZWxvdykKKyAgICBjLiAiU29ycnksIGFjY2VzcyB0byB0dHkgZGV2aWNlIGRlbmllZC4iIFRoZSB0 dHkgZGV2aWNlIHRoYXQgeW91CisgICAgICAgc3BlY2lmaWVkIGluIHlvdXIgU0VUIExJTkUgY29t bWFuZCBpcyByZWFkL3dyaXRlIHByb3RlY3RlZCBhZ2FpbnN0CisgICAgICAgeW91LiBTb2x1dGlv bjogKHNlZSBiZWxvdykKKyAgICBkLiAiU29ycnksIGRldmljZSBpcyBpbiB1c2UuIiBUaGUgdHR5 IGRldmljZSB5b3UgaGF2ZSBzcGVjaWZpZWQgaXMKKyAgICAgICBjdXJyZW50bHkgYmVpbmcgdXNl ZCBieSBhbm90aGVyIHVzZXIuIEEgcHJlZmF0b3J5IG1lc3NhZ2UgZ2l2ZXMgeW91CisgICAgICAg YW4gImxzIC1sIiBsaXN0aW5nIG9mIHRoZSBsb2NrZmlsZSwgd2hpY2ggc2hvdWxkIHNob3cgdGhl IHVzZXJuYW1lCisgICAgICAgb2YgdGhlIHBlcnNvbiB3aG8gY3JlYXRlZCBpdCwgcGx1cyBhIG1l c3NhZ2UgInBpZCA9IG5ubiIgdG8gc2hvdworICAgICAgIHlvdSB0aGUgcHJvY2VzcyBpZCBvZiB0 aGUgdXNlcidzIHByb2dyYW0uIFNvbHV0aW9uczogdHJ5IGFub3RoZXIKKyAgICAgICBkZXZpY2Us IHdhaXQgdW50aWwgdGhlIG90aGVyIHVzZXIgaXMgZmluaXNoZWQsIGFzayB0aGUgb3RoZXIgdXNl cgorICAgICAgIHRvIGh1cnJ5IHVwLCBvciBhc2sgdGhlIHN5c3RlbSBtYW5hZ2VyIGZvciBoZWxw LgorICAgIGUuICJTb3JyeSwgY2FuJ3Qgb3BlbiBjb25uZWN0aW9uOiByZWFzb24iLiBUaGUgZGV2 aWNlIGNhbm5vdCBiZSBvcGVuZWQKKyAgICAgICBmb3Igc29tZSBvdGhlciByZWFzb24sIHdoaWNo IGlzIGxpc3RlZC4KKyAgICBmLiAic2g6IC91c3IvbGliL3V1Y3AvYWN1Y250cmw6IG5vdCBmb3Vu ZCIuIFRoaXMgbWVhbnMgeW91ciBLZXJtaXQKKyAgICAgICBwcm9ncmFtIHdhcyBidWlsdCB3aXRo IHRoZSAtREFDVUNOVFJMIHN3aXRjaCwgYnV0IHlvdXIgY29tcHV0ZXIKKyAgICAgICBzeXN0ZW0g ZG9lcyBub3QgaGF2ZSB0aGUgQlNEIDQuMyBhY3VjbnRybCBwcm9ncmFtLiBTb2x1dGlvbjoKKyAg ICAgICBpbnN0YWxsIHRoZSBhY3VjbnRybCBwcm9ncmFtIGlmIHlvdSBoYXZlIGl0LCBvciByZWJ1 aWxkIEtlcm1pdAorICAgICAgIHdpdGhvdXQgdGhlIC1EQUNVQ05UUkwgc3dpdGNoLgorCisgICBU aGVyZSBhcmUgdHdvIHNvbHV0aW9ucyBmb3IgcHJvYmxlbXMgKGIpIGFuZCAoYyksIGJvdGggb2Yg d2hpY2ggaW52b2x2ZQorICAgaW50ZXJ2ZW50aW9uIGJ5IHlvdXIgVW5peCBzeXN0ZW0gYWRtaW5p c3RyYXRvciAoc3VwZXJ1c2VyKToKKworICAgIGEuIEhhdmUgdGhlIHN1cGVydXNlciBjaGFuZ2Ug dGhlIHBlcm1pc3Npb24gb2YgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeQorICAgICAgIGFuZCB0byB0 aGUgdHR5IGRldmljZXMgc28gdGhhdCBldmVyeW9uZSBvbiB0aGUgc3lzdGVtIGhhcworICAgICAg IHJlYWQvd3JpdGUgcGVybWlzc2lvbi4KKworc3UlIGNobW9kIDc3NyAvdXNyL3Nwb29sL2xvY2tz IChvciB3aGF0ZXZlciB0aGUgcGF0aCBpcykKK3N1JSBjaG1vZCA2NjYgL2Rldi90dHlYWAorCisg ICAgICAgT25lIHJpc2sgaGVyZSBpcyB0aGF0IHBlb3BsZSBjYW4gd3JpdGUgbG90cyBvZiBqdW5r IGludG8gdGhlCisgICAgICAgbG9ja2ZpbGUgZGlyZWN0b3J5LCBkZWxldGUgb3RoZXIgcGVvcGxl J3MgZmlsZXMgaW4gdGhlIGxvY2tmaWxlCisgICAgICAgZGlyZWN0b3J5LCBhbmQgaW50ZXJjZXB0 IG90aGVyIHBlb3BsZSdzIGRhdGEgYXMgaXQgZ29lcyBpbiBhbmQgb3V0CisgICAgICAgb2YgdGhl IHR0eSBkZXZpY2UuIFRoZSBtYWpvciBkYW5nZXIgaGVyZSB3b3VsZCBiZSBpbnRlcmNlcHRpbmcg YQorICAgICAgIHByaXZpbGVnZWQgcGFzc3dvcmQuIE9mIGNvdXJzZSwgYW55IHVzZXIgY291bGQg d3JpdGUgYSBzaG9ydCwKKyAgICAgICBvcmRpbmFyeSwgdW5wcml2aWxlZ2VkIHByb2dyYW0gdG8g ZG8gZXhhY3RseSB0aGUgc2FtZSB0aGluZyBpZiB0aGUKKyAgICAgICB0dHkgZGV2aWNlIHdhcyB3 b3JsZCByZWFkL3dyaXRlYWJsZS4gVGhlIG90aGVyIHJpc2sgYXMgdGhhdAorICAgICAgIHRlbGVw aG9uZSBjYWxscyBhcmUgbm90IGNvbnRyb2xsZWQgLS0gYW55Ym9keSBvbiB5b3VyIHN5c3RlbSBj YW4KKyAgICAgICBtYWtlIHRoZW0sIHdpdGhvdXQgaGF2aW5nIHRvIGJlbG9uZyB0byBhbnkgcGFy dGljdWxhciBncm91cCwgYW5kCisgICAgICAgdGhpcyBjb3VsZCBydW4gdXAgeW91ciBwaG9uZSBi aWxsLgorICAgIGIuIFVzZSBncm91cHMgdG8gcmVndWxhdGUgYWNjZXNzLiBOb3JtYWxseSB0aGUg bG9ja2ZpbGUgZGlyZWN0b3J5IGFuZAorICAgICAgIGFuZCB0aGUgZGlhbG91dCBkZXZpY2VzIHdp bGwgaGF2ZSB0aGUgc2FtZSBncm91cCAoc3VjaCBhcyB1dWNwKS4gSWYKKyAgICAgICBzbywgdGhl biBwdXQgZXZlcnlib2R5IHdobydzIGFsbG93ZWQgdG8gZGlhbCBvdXQgaW50byB0aGF0IGdyb3Vw LAorICAgICAgIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGFuZCB0 aGUgdHR5IGRldmljZXMgaGF2ZQorICAgICAgIGdyb3VwIHJlYWQgQU5EIHdyaXRlIHBlcm1pc3Np b24uIEV4YW1wbGU6CisKK3N1JSBjaG1vZCA3NzAgL3Vzci9zcG9vbC9sb2NrcyAob3Igd2hhdGV2 ZXIgdGhlIHBhdGggaXMpCitzdSUgY2htb2QgNjYwIC9kZXYvdHR5WFgKKworICAgICAgIFVzZXIg d2hhdGV2ZXIgdG9vbCBpcyBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybSB0byBhZGQgdXNlcnMg dG8KKyAgICAgICB0aGUgYXBwcm9wcmlhdGUgZ3JvdXAgKGUuZy4gZWRpdCB0aGUgL2V0Yy9ncm91 cCBmaWxlKS4KKyAgICBjLiBIYXZlIHRoZSBzdXBlcnVzZXIgY2hhbmdlIEtlcm1pdCB0byBydW4g c2V0dWlkIGFuZC9vciBzZXRnaWQgdG8gdGhlCisgICAgICAgb3duZXIgYW5kL29yIGdyb3VwIG9m IHRoZSBsb2NrZmlsZSBkaXJlY3RvcnkgYW5kIHRoZSB0dHkgZGV2aWNlcyBpZgorICAgICAgIG5l Y2Vzc2FyeSksIHR5cGljYWxseSB1dWNwIChzZWUgWzMzNF1uZXh0IHNlY3Rpb24pLCBidXQgTk9U IHJvb3QuCisgICAgICAgRXhhbXBsZToKKworc3UlIGNob3duIHV1Y3Aga2VybWl0ICAgICAgICAg IC0gb3IgLSAgY2hncnAgdXVjcCBrZXJtaXQKK3N1JSBjaG1vZCB1K3Mga2VybWl0IChzZXR1aWQp ICAtIG9yIC0gIGNobW9kIGcrcyBrZXJtaXQgKHNldGdpZCkKKworICAgICAgIGFuZCB0aGVuIG1h a2Ugc3VyZSB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5LCBhbmQgdGhlIHR0eSBkZXZpY2VzLAorICAg ICAgIGhhdmUgb3duZXIgKHNldHVpZCkgYW5kL29yIGdyb3VwIChzZXRnaWQpIHdyaXRlIHBlcm1p c3Npb24uIEZvcgorICAgICAgIGV4YW1wbGU6CisKK3N1JSBjaG1vZCBvK3J3eCAvdXNyL3Nwb29s L3V1Y3AKK3N1JSBjaG93biB1dWNwIC9kZXYvdHR5WFggOyBjaG1vZCA2MDAgL2Rldi90dHlYWAor CisgICAgICAgSW4gc29tZSBjYXNlcywgdGhlIG93bmVyIGFuZCBncm91cCBtdXN0IGJlIGRpc3Rp bmN0OyB0aGUga2V5IHBvaW50CisgICAgICAgaXMgdGhhdCByZWFkL3dyaXRlIGFjY2VzcyBpcyBy ZXF1aXJlZCB0byBib3RoIHRoZSBVVUNQIGxvY2tmaWxlCisgICAgICAgZGlyZWN0b3J5IGFuZCB0 aGUgdHR5IGl0c2VsZi4KKworICAgSWYgeW91IG1ha2UgQy1LZXJtaXQgc2V0dWlkIG9yIHNldGdp ZCB0byByb290LCBpdCByZWZ1c2VzIHRvIHJ1bjoKKworRmF0YWw6IEMtS2VybWl0IHNldHVpZCB0 byByb290IQorCisgICBFeGFtcGxlOgorCitjcnctci0tLS0tICAgMSB1dWNwICAgICB1dWNwICAg ICAgIDUsICA2NyBGZWIgMTEgMDY6MjMgL2Rldi9jdWEzCitkcnd4cnd4ci14ICAgMyByb290ICAg ICB1dWNwICAgICAgICAgMTAyNCBGZWIgMTEgMDY6MjIgL3Zhci9sb2NrCisKKyAgIHJlcXVpcmVz IHN1aWQgdXVjcCB0byBnZXQgcmVhZC93cml0ZSBhY2Nlc3Mgb24gL2Rldi9jdWEzIGFuZCBzZ2lk IHRvCisgICBnZXQgcmVhZC93cml0ZSBhY2Nlc3Mgb24gL3Zhci9sb2NrIChzaW5jZSB5b3UgY2Fu J3Qgc2V0IEtlcm1pdCdzIHVpZCBvcgorICAgZ2lkIHRvIHJvb3QpLgorCisgICAgIFRoZSByZWFz b24gS2VybWl0IGNhbid0IGJlIHNldHVpZCBvciBzZXRnaWQgdG8gcm9vdCBoYXMgdG8gZG8gd2l0 aAorICAgICB0aGUgZmFjdCB0aGF0IHNvbWUgVW5peCBPUydzIGNhbid0IHN3aXRjaCB1c2VyIG9y IGdyb3VwIElEcyBpbiB0aGF0CisgICAgIGNhc2UuIFVuZm9ydHVuYXRlbHksIHRoZSBwcm9oaWJp dGlvbiBhZ2FpbnN0IG1ha2luZyBLZXJtaXQgc2V0dWlkIG9yCisgICAgIHNldGdpZCB0byByb290 IG1lYW5zIHRoYXQgVW5peCBDLUtlcm1pdCBjYW4ndCBiZSB1c2VkIHRvIG1ha2UgcmxvZ2luCisg ICAgIGNvbm5lY3Rpb25zIGJ5IG5vbi1yb290IHVzZXJzLiAoVGhlIHJsb2dpbiBwb3J0IGlzIHBy aXZpbGVnZWQsIHdoaWNoCisgICAgIGlzIHdoeSB0aGUgcmVndWxhciBybG9naW4gY29tbWFuZCBp cyBzZXR1aWQgcm9vdCAtLSB3aGljaCBpcyBzYWZlCisgICAgIGJlY2F1c2UgdGhlIHJsb2dpbiBw cm9ncmFtIG5ldmVyIGhhcyB0byBjcmVhdGUgb3IgYWNjZXNzIGZpbGVzIGxpa2UKKyAgICAgS2Vy bWl0IGRvZXMuKQorCisgICBGb3IgdGhlIGxvY2tmaWxlIG1lY2hhbmlzbSB0byBhY2hpZXZlIGl0 cyBkZXNpcmVkIHB1cnBvc2UgLS0gcHJldmVudGlvbgorICAgb2YgYWNjZXNzIHRvIHRoZSBzYW1l IHR0eSBkZXZpY2UgYnkgbW9yZSB0aGFuIG9uZSBwcm9jZXNzIGF0IGEgdGltZSAtLQorICAgQUxM IHByb2dyYW1zIG9uIGEgZ2l2ZW4gY29tcHV0ZXIgdGhhdCBvcGVuLCByZWFkIG9yIHdyaXRlLCBh bmQgY2xvc2UKKyAgIHR0eSBkZXZpY2VzIG11c3QgdXNlIHRoZSBTQU1FIGxvY2tmaWxlIGNvbnZl bnRpb25zLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICBpcyBvZnRlbiBub3QgdGhlIGNhc2UuIEhl cmUgaXMgYSB0eXBpY2FsIGV4YW1wbGUgb2YgaG93IHRoaXMgY2FuIGdvCisgICB3cm9uZzogSW4g U3VuT1MgNC4wIGFuZCBlYXJsZXIsIHRoZSBsb2NrZmlsZSBkaXJlY3Rvcnkgd2FzCisgICAvdXNy L3Nwb29sL3V1Y3A7IGluIDQuMSBpdCB3YXMgY2hhbmdlZCB0byAvdmFyL3Nwb29sL2xvY2tzIGlu IHRoZSBxdWVzdAorICAgZm9yIHBvbGl0aWNhbCBjb3JyZWN0bmVzcy4gQ29uc2VxdWVudGx5LCBh bnkgdGhpcmQtcGFydHkgcHJvZ3JhbXMgKHN1Y2gKKyAgIGFzIEMtS2VybWl0KSB0aGF0IHdlcmUg bm90IG1vZGlmaWVkIHRvIGFjY291bnQgZm9yIHRoaXMgY2hhbmdlLAorICAgcmVjb21waWxlZCwg YW5kIHJlaW5zdGFsbGVkLCBkaWQgbm90IHVzZSB0aGUgc2FtZSBsb2NrZmlsZXMgYXMgdXVjcCwK KyAgIHRpcCwgZXRjLCBhbmQgc28gdGhlIGVudGlyZSBwdXJwb3NlIG9mIHRoZSBsb2NrZmlsZSBp cyBkZWZlYXRlZC4KKworICAgV2hhdCBpZiB5b3VyIFVuaXggc3lzdGVtIGRvZXMgbm90IGhhdmUg VVVDUCBpbnN0YWxsZWQ/IEZvciBleGFtcGxlLCB5b3UKKyAgIGhhdmUgYSBVbml4IHdvcmtzdGF0 aW9uLCBhbmQgeW91IGRvIG5vdCB1c2UgdXVjcCwgY3UsIG9yIHRpcCwgb3IgVVVDUAorICAgd2Fz IG5vdCBldmVuIHN1cHBsaWVkIHdpdGggeW91ciB2ZXJzaW9uIG9mIFVuaXggKFFOWCBpcyBhbiBl eGFtcGxlKS4gSW4KKyAgIHRoaXMgY2FzZSwgeW91IGhhdmUgdHdvIGNob2ljZXM6CisKKyAgICBh LiBJZiB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBwZXJzb24gcnVubmluZyBLZXJtaXQgYXQg dGhlIHNhbWUKKyAgICAgICB0aW1lLCBjb21wZXRpbmcgZm9yIHRoZSBzYW1lIHR0eSBkZXZpY2Us IHRoZW4gY3JlYXRlIGEgc3BlY2lhbAorICAgICAgIGxvY2tmaWxlIGRpcmVjdG9yeSBqdXN0IGZv ciBLZXJtaXQsIGZvciBleGFtcGxlLCAvdXNyL3Nwb29sL2tlcm1pdCwKKyAgICAgICBhbmQgbWFr ZSBzdXJlIHlvdSBoYXZlIHJlYWQvd3JpdGUgYWNjZXNzIHRvIGl0LiBUaGVuIGFkZCB0aGUKKyAg ICAgICBmb2xsb3dpbmcgdG8geW91ciBtYWtlZmlsZSB0YXJnZXQgQ0ZMQUdTLCBhcyBzaG93biBl YXJsaWVyOgorCistRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL2tlcm1pdFxcXCIKKworICAgIGIu IElmIHlvdSBhcmUgdGhlIG9ubHkgdXNlciBvbiB5b3VyIHdvcmtzdGF0aW9uLCBhbmQgbm8gb3Ro ZXIKKyAgICAgICBwcm9jZXNzZXMgd2lsbCBldmVyIGJlIGNvbXBldGluZyB3aXRoIEtlcm1pdCBm b3IgdGhlIGRpYWxvdXQgdHR5CisgICAgICAgZGV2aWNlLCB0aGVuIGFkZCAtRE5PVVVDUCB0byB5 b3VyIG1ha2VmaWxlIHRhcmdldCdzIENGTEFHUyBhbmQKKyAgICAgICByZWJ1aWxkIEtlcm1pdC4K KworMTEuIFJVTk5JTkcgVU5JWCBDLUtFUk1JVCBTRVRVSUQgT1IgU0VUR0lECisKKyAgIFsgWzMz NV1Ub3AgXSBbIFszMzZdQ29udGVudHMgXSBbIFszMzddTmV4dCBdIFsgWzMzOF1QcmV2aW91cyBd CisKKyAgIEV2ZW4gaWYgeW91IGRvbid0IGludGVuZCB0byBydW4gQy1LZXJtaXQgc2V0dWlkLCBz b21lYm9keSBlbHNlIG1pZ2h0CisgICBjb21lIGFsb25nIGFuZCBjaG93biBhbmQgY2htb2QgaXQg YWZ0ZXIgaXQgaGFzIGJlZW4gYnVpbHQuIFlvdSBzaG91bGQKKyAgIGJlIHN1cmUgdGhhdCBpdCBp cyBidWlsdCBjb3JyZWN0bHkgdG8gcnVuIHNldHVpZCBvbiB5b3VyIHN5c3RlbS4gRm9yCisgICBQ T1NJWCBhbmQgQVQmVCBVbml4IGJhc2VkIHZlcnNpb25zLCB5b3UgZG9uJ3QgaGF2ZSB0byBkbyBh bnl0aGluZworICAgc3BlY2lhbC4KKworICAgRm9yIDQuMiBhbmQgNC4zIEJTRC1iYXNlZCBVbml4 IHZlcnNpb25zLCB5b3Ugbm9ybWFsbHkgbmVlZCBub3QgYWRkCisgICBhbnl0aGluZyBzcGVjaWFs IHRvIHRoZSBtYWtlZmlsZS4gVGhlIHByb2dyYW0gYXNzdW1lcyB0aGF0IHRoZQorICAgc2V0cmV1 aWQoKSBhbmQgc2V0cmVnaWQoKSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSwgd2l0aG91dCB3aGlj aCB3ZQorICAgY2Fubm90IHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHJlYWwgYW5kIGVm ZmVjdGl2ZSB1aWRzLiBJZiAibWFrZSIKKyAgIGNvbXBsYWlucyB0aGF0IF9zZXRyZXVpZCBvciBf c2V0cmVnaWQgaXMvYXJlIG5vdCBkZWZpbmVkLCBhZGQKKyAgIC1ETk9TRVRSRVUgdG8gQ0ZMQUdT LiBJbiB0aGlzIGNhc2UgaXQgaXMgdmVyeSBsaWtlbHkgKGJ1dCBub3QgY2VydGFpbikKKyAgIHRo YXQgeW91IGNhbm5vdCBwcm90ZWN0IHR0eXMgYW5kIGxvY2tmaWxlcyBhZ2FpbnN0IHBlb3BsZSBh bmQgaGF2ZSB0aGVtCisgICBydW4gS2VybWl0IHNldHVpZC4KKworICAgSWYgbWFrZSBkb2VzIG5v dCBjb21wbGFpbiBhYm91dCB0aGlzLCB5b3Ugc2hvdWxkIGZpbmQgb3V0IHdoZXRoZXIgeW91cgor ICAgQlNEIHZlcnNpb24gKDQuMyBvciBvdGhlciBzeXN0ZW1zIGxpa2UgU3VuT1MgNC54IHRoYXQg Y2xhaW0gdG8gaW5jbHVkZQorICAgQlNEIDQuMyBjb21wYXRpYmlsaXR5KSBpbmNsdWRlcyB0aGUg c2F2ZWQtc2V0dWlkIGZlYXR1cmUgKHNlZSBsb25nCisgICBub3RlcyB1bmRlciBlZGl0IDE0NiBp biBja2MxNzgudXBkKS4gSWYgaXQgZG9lcywgdGhlbiBhZGQgLURTQVZFRFVJRCB0bworICAgQ0ZM QUdTLgorCisgICAgIElNUE9SVEFOVCBOT1RFOiBNb3N0IFVuaXggc3lzdGVtIGRvY3VtZW50YXRp b24gd2lsbCBub3QgZ2l2ZSB5b3UgdGhlCisgICAgIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBUbyBk ZXRlcm1pbmUgd2hldGhlciB5b3VyIFVuaXggc3lzdGVtIHN1cHBsaWVzCisgICAgIHRoZSBzYXZl ZC1vcmlnaW5hbC1lZmZlY3RpdmUtdXNlci9ncm91cC1pZCBmZWF0dXJlLCB1c2UgdGhlIGNrdXVp ZC5jCisgICAgIHByb2dyYW0uIFJlYWQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRo ZSBjb21tZW50cyBhdCB0aGUKKyAgICAgYmVnaW5uaW5nLgorCisgICBDLUtlcm1pdCBmb3IgNC40 QlNELWJhc2VkIHN5c3RlbXMgYXV0b21hdGljYWxseSB1c2Ugc2V0ZVt1Z11pZCgpLiBTZWUKKyAg IFszMzldY2t1dGlvLmMuCisKKyAgIElmIHlvdSBoYXZlIGEgdmVyc2lvbiBvZiBVbml4IHRoYXQg aXMgbm90IEJTRC1iYXNlZCwgYnV0IHdoaWNoIHN1cHBsaWVzCisgICB0aGUgc2V0cmV1aWQoKSBh bmQgc2V0cmVnaWQoKSBmdW5jdGlvbnMsIGFuZCB0aGVzZSBhcmUgdGhlIG9ubHkgd2F5IHRvCisg ICBzd2l0Y2ggYmV0d2VlbiByZWFsIGFuZCBlZmZlY3RpdmUgdWlkLCBhZGQgLURTRVRSRVVJRCB0 byB5b3VyIG1ha2VmaWxlCisgICB0YXJnZXQuCisKKyAgICAgV0FSTklORzogVGhlcmUgYXJlIHR3 byBjYWxscyB0byBhY2Nlc3MoKSBpbiBbMzQwXWNrdWZpby5jLCBieSB3aGljaAorICAgICBLZXJt aXQgY2hlY2tzIHRvIHNlZSBpZiBpdCBjYW4gY3JlYXRlIGFuIG91dHB1dCBmaWxlLiBUaGVzZSBj YWxscworICAgICB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIChhKXlvdSBoYXZlIGluc3Rh bGxlZCBDLUtlcm1pdCBzZXR1aWQKKyAgICAgb3Igc2V0Z2lkIG9uIGEgQlNELWJhc2VkIFVuaXgg c3lzdGVtLCBhbmQgKGIpIHRoZQorICAgICBzYXZlZC1vcmlnaW5hbC1lZmZlY3RpdmUtdWlkL2dp ZCBmZWF0dXJlIGlzIG5vdCBwcmVzZW50LCBhbmQgKGMpIHRoZQorICAgICBhY2Nlc3MoKSBmdW5j dGlvbiBhbHdheXMgY2hlY2tzIHdoYXQgaXQgYmVsaWV2ZXMgdG8gYmUgdGhlIHJlYWwgSUQKKyAg ICAgcmF0aGVyIHRoYW4gdGhlIGVmZmVjdGl2ZSBJRC4gVGhpcyBpcyB0aGUgY2FzZSwgZm9yIGV4 YW1wbGUsIGluCisgICAgIE9saXZldHRpIFgvT1MgYW5kIGluIE5lWFRTVEVQLiBJbiBzdWNoIGNh c2VzLCB5b3UgY2FuIGZvcmNlIGNvcnJlY3QKKyAgICAgb3BlcmF0aW9uIG9mIGFjY2VzcygpIGNh bGxzIGJ5IGRlZmluaW5nIHRoZSBzeW1ib2wgU1dfQUNDX0lEIGF0CisgICAgIGNvbXBpbGUgdGlt ZSBpbiBDRkxBR1MuCisKKyAgIElmIHlvdSBoYXZlIGEgdmVyc2lvbiBvZiBVbml4IHRoYXQgZG9l cyBub3QgYWxsb3cgYSBwcm9jZXNzIHRvIHN3aXRjaAorICAgYmFjayBhbmQgZm9ydGggYmV0d2Vl biBpdHMgZWZmZWN0aXZlIGFuZCByZWFsIHVzZXIgYW5kIGdyb3VwIGlkcworICAgbXVsdGlwbGUg dGltZXMsIHlvdSBwcm9iYWJseSBzaG91bGQgbm90IGF0dGVtcHQgdG8gcnVuIEtlcm1pdCBzZXR1 aWQsCisgICBiZWNhdXNlIG9uY2UgaGF2aW5nIGdpdmVuIHVwIGl0cyBlZmZlY3RpdmUgdWlkIG9y IGdpZCAod2hpY2ggaXQgbXVzdCBkbworICAgaW4gb3JkZXIgdG8gdHJhbnNmZXIgZmlsZXMsIGZv cmsgYSBzaGVsbCwgZXRjKSBpdCBjYW4gbmV2ZXIgZ2V0IGl0CisgICBiYWNrLCBhbmQgc28gaXQg Y2FuIG5vdCB1c2UgdGhlIG9yaWdpbmFsIGVmZmVjdGl2ZSB1aWQgb3IgZ2lkIHRvIGNyZWF0ZQor ICAgb3IgZGVsZXRlIHV1Y3AgbG9ja2ZpbGVzLiBJbiB0aGlzIGNhc2UsIHlvdSdsbCBlaXRoZXIg aGF2ZSB0byBzZXQgdGhlCisgICBwZXJtaXNzaW9ucyBvbiB5b3VyIGxvY2tmaWxlIGRpcmVjdG9y eSB0byBtYWtlIHRoZW0gcHVibGljbHkKKyAgIHJlYWQvd3JpdGFibGUsIG9yIGRpc3BlbnNlIHdp dGggbG9ja2luZyBhbHRvZ2V0aGVyLgorCisgICBNT1JBTDogQXJlIHlvdSB0aG9yb3VnaGx5IHNp Y2tlbmVkIGFuZC9vciBmcmlnaHRlbmVkIGJ5IGFsbCB0aGF0IHlvdQorICAgaGF2ZSBqdXN0IHJl YWQ/IFlvdSBzaG91bGQgYmUuIFdoYXQgaXMgdGhlIHJlYWwgYW5zd2VyPyBTaW1wbGUuIFNlcmlh bAorICAgZGV2aWNlcyAtLSBzdWNoIGFzIHR0eXMgYW5kIG1hZ25ldGljIHRhcGVzIC0tIGluIFVu aXggc2hvdWxkIGJlIG9wZW5lZAorICAgd2l0aCBleGNsdXNpdmUgYWNjZXNzIG9ubHksIGVuZm9y Y2VkIGJ5IHRoZSBVbml4IGtlcm5lbC4gU2hhcmVkIGFjY2VzcworICAgaGFzIG5vIGNvbmNlaXZh YmxlIHB1cnBvc2UsIGxlZ2l0aW1hdGUgb3Igb3RoZXJ3aXNlLCBleGNlcHQgYnkKKyAgIHByaXZp bGVnZWQgc3lzdGVtIHByb2dyYW1zIHN1Y2ggYXMgZ2V0dHkuIFRoZSBvcmlnaW5hbCBkZXNpZ24g ZGF0ZXMKKyAgIGZyb20gdGhlIGxhdGUgMTk2MHMsIHdoZW4gVW5peCB3YXMgZGV2ZWxvcGVkIGZv ciBsYWJvcmF0b3J5IHVzZSB1bmRlciBhCisgICBwaGlsb3NvcGh5IG9mIHRydXN0IGJ5IHBlb3Bs ZSB3aXRoaW4gc2hvdXRpbmcgZGlzdGFuY2Ugb2YgZWFjaCBvdGhlciAtLQorICAgYnV0IGV2ZW4g dGhlbiwgbm8gdXNlZnVsIHB1cnBvc2Ugd2FzIHNlcnZlZCBieSB0aGlzIHBhcnRpY3VsYXIgZm9y bSBvZgorICAgb3Blbm5lc3M7IGl0IHdhcyBwcm9iYWJseSBtb3JlIG9mIGEgcG9saXRpY2FsIHN0 YXRlbWVudC4gU2luY2UgdGhlCisgICBlbWVyZ2VuY2Ugb2YgVW5peCBmcm9tIHRoZSBsYWJvcmF0 b3J5IGludG8gdGhlIGNvbW1lcmNpYWwgbWFya2V0LCB3ZQorICAgaGF2ZSBzZWVuIGV2ZXJ5IHZl c3RpZ2Ugb2Ygb3Blbm5lc3MgLS0gYnV0IHRoaXMgb25lIC0tIHN0cmlwcGVkIGF3YXkuCisgICBJ J2QgbGlrZSB0byBzZWUgc29tZSBpbmZsdWVudGlhbCBVbml4IG1ha2VyIHRha2UgdGhlIGJvbGQg c3RlcCBvZgorICAgbWFraW5nIHRoZSBzaW1wbGUga2VybmVsIGNoYW5nZSByZXF1aXJlZCB0byBl bmZvcmNlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8KKyAgIHNlcmlhbCBkZXZpY2VzLiAoV2VsbCwgcGVy aGFwcyBub3Qgc28gc2ltcGxlIHdoZW4gYmlkaXJlY3Rpb25hbGl0eSBtdXN0CisgICBhbHNvIGJl IGEgZ29hbCAtLSBidXQgdGhlbiBvdGhlciBPUydzIGxpa2UgVk1TIHNvbHZlZCB0aGlzIHByb2Js ZW0KKyAgIGRlY2FkZXMgYWdvLikKKworMTIuIENPTkZJR1VSSU5HIFVOSVggV09SS1NUQVRJT05T CisKKyAgIFsgWzM0MV1Ub3AgXSBbIFszNDJdQ29udGVudHMgXSBbIFszNDNdTmV4dCBdIFsgWzM0 NF1QcmV2aW91cyBdCisKKyAgIE9uIGRlc2t0b3Agd29ya3N0YXRpb25zIHRoYXQgYXJlIHVzZWQg Ynkgb25seSB0aGUgdXNlciBhdCB0aGUgY29uc29sZQorICAga2V5Ym9hcmQsIEMtS2VybWl0IGlz IGFsd2F5cyB1c2VkIGluIGxvY2FsIG1vZGUuIEJ1dCBhcyBkZWxpdmVyZWQsCisgICBDLUtlcm1p dCBydW5zIGluIHJlbW90ZSBtb2RlIGJ5IGRlZmF1bHQuIFRvIHB1dCBpdCBpbiBsb2NhbCBtb2Rl IGF0CisgICBzdGFydHVwLCB5b3UgY2FuIHB1dCBhIFNFVCBMSU5FIGNvbW1hbmQgaW4geW91ciAu bXlrZXJtcmMuCisKKyAgIFlvdSBjYW4gYWxzbyBidWlsZCBDLUtlcm1pdCB0byBzdGFydCB1cCBp biBsb2NhbCBtb2RlIGJ5IGRlZmF1bHQuIFRvIGRvCisgICB0aGlzLCBpbmNsdWRlIHRoZSBmb2xs b3dpbmcgaW4gdGhlIENGTEFHUyBpbiB5b3VyIG1ha2VmaWxlIHRhcmdldDoKKworLURERlRUWT1c XFwiL2Rldi90dHl4eFxcXCIKKworICAgd2hlcmUgdHR5eHggaXMgdGhlIG5hbWUgb2YgdGhlIGRl dmljZSB5b3Ugd2lsbCBiZSB1c2luZyBmb3IKKyAgIGNvbW11bmljYXRpb25zLiBQcmVzZW50bHkg dGhlcmUgaXMgbm8gd2F5IG9mIHNldHRpbmcgdGhlIGRlZmF1bHQgbW9kZW0KKyAgIHR5cGUgYXQg Y29tcGlsZSB0aW1lLCBzbyB1c2UgdGhpcyBvcHRpb24gb25seSBmb3IgZGlyZWN0IGxpbmVzLgor CisgICBDLUtlcm1pdCBkb2VzIG5vdCB3b3JrIHdlbGwgb24gY2VydGFpbiB3b3Jrc3RhdGlvbnMg aWYgaXQgaXMgbm90IHJ1bgorICAgZnJvbSB3aXRoaW4gYSB0ZXJtaW5hbCB3aW5kb3cuIEZvciBl eGFtcGxlLCB5b3UgY2Fubm90IHN0YXJ0IEMtS2VybWl0CisgICBvbiBhIE5lWFQgYnkgbGF1bmNo aW5nIGl0IGRpcmVjdGx5IGZyb20gTmVYVHN0ZXAuIFNpbWlsYXJseSBmb3IgU3VuCisgICB3b3Jr c3RhdGlvbnMgaW4gdGhlIE9wZW4gV2luZG93cyBlbnZpcm9ubWVudC4gUnVuIEtlcm1pdCBpbiBh IHRlcm1pbmFsCisgICB3aW5kb3cuCisKKzEzLiBCSVpBUlJFIEJFSEFWSU9SIEFUIFJVTlRJTUUK KworICAgWyBbMzQ1XVRvcCBdIFsgWzM0Nl1Db250ZW50cyBdIFsgWzM0N11OZXh0IF0gWyBbMzQ4 XVByZXZpb3VzIF0KKworICAgU2VlIHRoZSAiYmV3YXJlIGZpbGUiLAorCisgICBbMzQ5XWNrdWJ3 ci50eHQsIGZvciBoaW50cyBhYm91dCBydW50aW1lIG1pc2JlaGF2aW9yLiBUaGlzIHNlY3Rpb24K KyAgIGxpc3RzIHNvbWUgcnVudGltZSBwcm9ibGVtcyB0aGF0IGNhbiBiZSBjdXJlZCBieSByZWJ1 aWxkaW5nIEMtS2VybWl0LgorCisgICBUaGUgcHJvZ3JhbSBzdGFydHMsIGJ1dCB0aGVyZSBpcyBu byBwcm9tcHQsIGFuZCBjZXJ0YWluIG9wZXJhdGlvbnMKKyAgIGRvbid0IHdvcmsgKHlvdSBzZWUg ZXJyb3IgbWVzc2FnZXMgbGlrZSAiS2VybWl0IGNvbW1hbmQgZXJyb3IgaW4KKyAgIGJhY2tncm91 bmQgZXhlY3V0aW9uIikuIFRoaXMgaXMgYmVjYXVzZSBLZXJtaXQgdGhpbmtzIGl0IGlzIHJ1bm5p bmcgaW4KKyAgIHRoZSBiYWNrZ3JvdW5kLiBTZWUgY29uYmd0KCkgaW4gWzM1MF1ja3V0aW8uYy4g VHJ5IHJlYnVpbGRpbmcgS2VybWl0CisgICB3aXRoOgorCisgLURQSURfVD1waWRfdAorCisgICBh ZGRlZCB0byB5b3VyIENGTEFHUy4gSWYgdGhhdCBkb2Vzbid0IGhlbHAsIGZpbmQgb3V0IHRoZSBh Y3R1YWwgZGF0YQorICAgdHlwZSBmb3IgcGlkcyAobG9vayBpbiB0eXBlcy5oIG9yIHNpbWlsYXIg ZmlsZSkgYW5kIHVzZSBpdCBpbiBwbGFjZSBvZgorICAgInBpZF90IiwgZm9yIGV4YW1wbGU6CisK KyAtRFBJRF9UPXNob3J0CisKKyAgIFVuZXhwbGFpbmFibGUgYW5kIGluYXBwcm9wcmlhdGUgZXJy b3IgbWVzc2FnZXMgKCJTb2NrZXRzIG5vdCBzdXBwb3J0ZWQKKyAgIG9uIHRoaXMgZGV2aWNlIiwg ZXRjKSBoYXZlIGJlZW4gdHJhY2VkIGluIGF0IGxlYXN0IG9uZSBjYXNlIHRvIGEgbGFjaworICAg b2YgYWdyZWVtZW50IGJldHdlZW4gdGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMgYW5kIHRoZSBhY3R1 YWwga2VybmVsLgorICAgVGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSBHTlUgQyBjb21waWxlciAo Z2NjKSB3YXMgYmVpbmcgdXNlZC4gZ2NjCisgICB3YW50cyB0byBoYXZlIEFOU0ktQy1jb21wbGlh bnQgaGVhZGVyIGZpbGVzLCBhbmQgc28gcGFydCBvZiB0aGUKKyAgIGluc3RhbGxhdGlvbiBwcm9j ZWR1cmUgZm9yIGdjYyBpcyAob3Igd2FzKSB0byBydW4gYSBzaGVsbCBzY3JpcHQgY2FsbGVkCisg ICAiZml4aW5jbHVkZXMiLCB3aGljaCB0cmFuc2xhdGVzIHRoZSBzeXN0ZW0ncyBoZWFkZXIgZmls ZXMgaW50byBhCisgICBzZXBhcmF0ZSBzZXQgb2YgaGVhZGVycyB0aGF0IGdjYyBsaWtlcy4gU28g ZmFyIHNvIGdvb2QuIExhdGVyLCBhIG5ldworICAgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5 c3RlbSBpcyBpbnN0YWxsZWQgYW5kIG5vYm9keSByZW1lbWJlcnMgdG8KKyAgIHJ1biBmaXhpbmNs dWRlcyBhZ2Fpbi4gRnJvbSB0aGF0IHBvaW50LCBhbnkgcHJvZ3JhbSBjb21waWxlZCB3aXRoIGdj YworICAgdGhhdCBtYWtlcyB1c2Ugb2YgaGVhZGVyIGZpbGVzIChwYXJ0aWN1bGFybHkgaW9jdGwu aCkgaXMgdmVyeSBsaWtlbHkgdG8KKyAgIG1pc2JlaGF2ZS4gU29sdXRpb246IHJ1biBmaXhpbmNs dWRlcyBhZ2Fpbiwgb3IgdXNlIHlvdXIgc3lzdGVtJ3MKKyAgIHJlZ3VsYXIgQyBjb21waWxlciwg bGlicmFyaWVzLCBhbmQgaGVhZGVyIGZpbGVzIGluc3RlYWQgb2YgZ2NjLgorCisxNC4gQ1JBU0hF UyBBTkQgQ09SRSBEVU1QUworCisgICBbIFszNTFdVG9wIF0gWyBbMzUyXUNvbnRlbnRzIF0gWyBb MzUzXU5leHQgXSBbIFszNTRdUHJldmlvdXMgXQorCisgICBJZiBDLUtlcm1pdCBjb25zaXN0ZW50 bHkgZHVtcHMgY29yZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgZmlsZQorICAgdHJhbnNmZXIsIGxv b2sgaW4gU0hPVyBGRUFUVVJFUyBmb3IgQ0tSRUFMUEFUSC4gSWYgZm91bmQsIHJlYnVpbGQgd2l0 aAorICAgLUROT1JFQUxQQVRIIGFuZCBzZWUgaWYgdGhhdCBmaXhlcyB0aGUgcHJvYmxlbSAoc29t ZSBVTklYZXMgaGF2ZQorICAgcmVhbHBhdGgoKSBidXQgaXQgZG9lc24ndCB3b3JrKS4KKworICAg VG90YWwgZmFpbHVyZSBvZiB0aGUgS2VybWl0IHByb2dyYW0gY2FuIG9jY3VyIGJlY2F1c2Ugb2Yg YmFkIG1lbW9yeQorICAgcmVmZXJlbmNlcywgYmFkIHN5c3RlbSBjYWxscywgb3IgcHJvYmxlbXMg d2l0aCBkeW5hbWljIG1lbW9yeQorICAgYWxsb2NhdGlvbi4gRmlyc3QsIHRyeSB0byByZXByb2R1 Y2UgdGhlIHByb2JsZW0gd2l0aCBkZWJ1Z2dpbmcgdHVybmVkCisgICBvbjogcnVuIEtlcm1pdCB3 aXRoIHRoZSAtZCBjb21tYW5kLWxpbmUgb3B0aW9uIChmb3IgZXhhbXBsZSwgIndlcm1pdAorICAg LWQiKSBhbmQgdGhlbiBleGFtaW5lIHRoZSByZXN1bHRpbmcgZGVidWcubG9nIGZpbGUuIFRoZSBs YXN0IGVudHJ5CisgICBzaG91bGQgYmUgaW4gdGhlIHZpY2luaXR5IG9mIHRoZSBjcmFzaC4gSW4g Vk1TLCBhIGNyYXNoIGF1dG9tYXRpY2FsbHkKKyAgIHByb2R1Y2VzIGEgInN0YWNrIGR1bXAiIHdo aWNoIHNob3dzIHRoZSByb3V0aW5lIHdoZXJlIHRoZSBjcmFzaCBvY2N1cnMuCisgICBJbiBzb21l IHZlcnNpb25zIG9mIFVuaXgsIHlvdSBjYW4gZ2V0IGEgc3RhY2sgZHVtcCB3aXRoICJhZGIiIC0t IGp1c3QKKyAgIHR5cGUgImFkYiB3ZXJtaXQgY29yZSIgYW5kIHRoZW4gZ2l2ZSB0aGUgY29tbWFu ZCAiJGMiLCB0aGVuIEN0cmwtRCB0bworICAgcXVpdCAobm90ZTogcmVwbGFjZSAid2VybWl0IiBi eSAia2VybWl0IiBvciBieSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUKKyAgIGV4ZWN1dGFibGUg dGhhdCBjcmFzaGVkIGlmIGl0IGlzIG5vdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkpLiBPciB1 c2UKKyAgIGdkYiB0byBnZXQgYSBiYWNrdHJhY2UsIGV0Yy4KKworICAgSW4gZWRpdCAxODYsIG9u ZSBpbXBsZW1lbnRhdGlvbiwgVU5JU1lTIDUwMDAvOTUgYnVpbHQgd2l0aCAibWFrZQorICAgc3lz NXIzIiwgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gcnVuIG91dCBvZiBtZW1vcnkgdmVyeSBxdWlja2x5 IChlLmcuCisgICB3aGlsZSBleGVjdXRpbmcgYSBzaG9ydCBpbml0aWFsaXphdGlvbiBmaWxlIHRo YXQgY29udGFpbnMgYSBTRVQgRElBTAorICAgRElSRUNUT1JZIGNvbW1hbmQpLiBEZWJ1ZyBsb2dz IHNob3cgdGhhdCBtYWxsb2MgY2FsbHMgYXJlIGZhaWxpbmcsCisgICByZWFzb24gdW5rbm93bi4g Rm9yIHRoaXMgYW5kIGFueSBvdGhlciBpbXBsZW1lbnRhdGlvbiB0aGF0IGdpdmVzIGVycm9yCisg ICBtZXNzYWdlcyBhYm91dCAibWFsbG9jIGZhaWx1cmUiIG9yICJtZW1vcnkgYWxsb2NhdGlvbiBm YWlsdXJlIiwgcmVidWlsZAorICAgdGhlIHByb2dyYW0gKndpdGhvdXQqIHRoZSAtRERZTkFNSUMg Q0ZMQUdTIGRlZmluaXRpb24sIGZvciBleGFtcGxlOgorCittYWtlIHN5czVyMyBLRkxBR1M9LVVE WU5BTUlDCisKKyAgIEFzIG9mIGVkaXQgMTY5LCBDLUtlcm1pdCBpbmNsdWRlcyBhIG1hbGxvYygp IGRlYnVnZ2luZyBwYWNrYWdlIHdoaWNoCisgICB5b3UgbWF5IGxpbmsgd2l0aCB0aGUgS2VybWl0 IHByb2dyYW0gdG8gY2F0Y2ggcnVudGltZSBtYWxsb2MgZXJyb3JzLgorICAgU2VlIHRoZSBtYWtl ZmlsZSBlbnRyaWVzIGZvciBzdW5vczQxbWQgYW5kIG5leHRtZCBmb3IgZXhhbXBsZXMgb2YgaG93 CisgICB0byBzZWxlY3QgbWFsbG9jIGRlYnVnZ2luZy4gT25jZSB5b3UgaGF2ZSBsaW5rZWQgS2Vy bWl0IHdpdGggdGhlIG1hbGxvYworICAgZGVidWdnZXIsIGl0IHdpbGwgaGFsdCB3aXRoIGFuIGlu Zm9ybWF0aXZlIG1lc3NhZ2UgaWYgYSBtYWxsb2MtcmVsYXRlZAorICAgZXJyb3Igb2NjdXJzIGFu ZCwgaWYgcG9zc2libGUsIGR1bXAgY29yZS4gRm9yIHRoaXMgcmVhc29uLAorICAgbWFsbG9jLWRl YnVnZ2luZyB2ZXJzaW9ucyBvZiBLZXJtaXQgc2hvdWxkIGJlIGJ1aWx0IHdpdGhvdXQgdGhlICIt cyIKKyAgIGxpbmsgb3B0aW9uICh3aGljaCByZW1vdmVzIHN5bWJvbHMsIHByZXZlbnRpbmcgYW5h bHlzaXMgb2YgdGhlIGNvcmUKKyAgIGR1bXApLiBZb3UgaGF2ZSBzZXZlcmFsIHdheXMgdG8gdHJh Y2sgZG93biB0aGUgbWFsbG9jIGVycm9yOiBBbmFseXplCisgICB0aGUgY29yZSBkdW1wIHdpdGgg YWRiLiBPciByZXByb2R1Y2UgdGhlIHByb2JsZW0gd2l0aCAibG9nIGRlYnVnIiBhbmQKKyAgIHRo ZW4gbG9vayBhdCB0aGUgY29kZSBhcm91bmQgdGhlIGxhc3QgZGVidWcubG9nIGVudHJ5LiBJZiB5 b3UgaGF2ZSBnY2MsCisgICBidWlsZCB0aGUgcHJvZ3JhbSB3aXRoICItZyIgYWRkZWQgdG8gQ0ZM QUdTIGFuZCB0aGVuIGRlYnVnIGl0IHdpdGggZ2RiLAorICAgZS5nLgorCitnZGIgd2VybWl0Citi cmVhayBtYWluCitydW4KKy4uIHNldCBvdGhlciBicmVha3BvaW50cyBvciB3YXRjaHBvaW50cwor Y29udGludWUKKworICAgV2F0Y2hwb2ludHMgYXJlIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBmaW5k aW5nIG1lbW9yeSBsZWFrcywgYnV0IHRoZXkKKyAgIG1ha2UgdGhlIHByb2dyYW0gcnVuIGFib3V0 IGEgdGhvdXNhbmQgdGltZXMgc2xvd2VyIHRoYW4gdXN1YWwsIHNvIGRvbid0CisgICBzZXQgdGhl bSB1bnRpbCB0aGUgbGFzdCBwb3NzaWJsZSBtb21lbnQuIFdoZW4gYSB3YXRjaHBvaW50IGlzIGhp dCwgeW91CisgICBjYW4gdXNlIHRoZSAid2hlcmUiIGNvbW1hbmQgdG8gZmluZCBvdXQgd2hpY2gg Qy1LZXJtaXQgc291cmNlIHN0YXRlbWVudAorICAgdHJpZ2dlcmVkIGl0LgorCisgICBJZiB5b3Ug aGF2ZSB0aGUgUHVyZSBTb2Z0d2FyZSBJbmMgIlB1cmlmeSIgcHJvZHVjdCwgc2VlIHRoZSBzdW5v czQxY3AKKyAgIG1ha2VmaWxlIGVudHJ5IGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UgaXQg dG8gZGVidWcgQy1LZXJtaXQuCisKKzE1LiBTWVNMT0dHSU5HCisKKyAgIFsgWzM1NV1Ub3AgXSBb IFszNTZdQ29udGVudHMgXSBbIFszNTddTmV4dCBdIFsgWzM1OF1QcmV2aW91cyBdCisKKyAgICJT eXNsb2dnaW5nIiBtZWFucyByZWNvcmRpbmcgc2VsZWN0ZWQgaW5mb3JtYXRpb24gaW4gdGhlIHN5 c3RlbSBsb2cgdmlhCisgICB0aGUgVW5peCBzeXNsb2coKSBmYWNpbGl0eSwgd2hpY2ggaXMgYXZh aWxhYmxlIGluIG1vc3QgVW5peCB2ZXJzaW9ucy4KKyAgIFN5c2xvZ2dpbmcgaXMgbm90IGRvbmUg dW5sZXNzIEMtS2VybWl0IGlzIHN0YXJ0ZWQgd2l0aDoKKworLS1zeXNsb2c6bgorCisgICBvbiB0 aGUgY29tbWFuZC1saW5lLCB3aGVyZSBuIGlzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIHRvIGlu ZGljYXRlIHRoZQorICAgbGV2ZWwgb2Ygc3lzbG9nZ2luZy4gU2VlIFszNTldU2VjdGlvbiA0LjIg b2YgdGhlIFszNjBdSUtTRAorICAgQWRtaW5pc3RyYXRvcidzIEd1aWRlIGZvciBkZXRhaWxzLgor CisgICBPYnZpb3VzbHkgeW91IGNhbid0IGRlcGVuZCBvbiB1c2VycyB0byBpbmNsdWRlIC0tc3lz bG9nOjMgKG9yIHdoYXRldmVyKQorICAgb24gdGhlIGNvbW1hbmQgbGluZSBldmVyeSB0aW1lIHRo ZXkgc3RhcnQgQy1LZXJtaXQsIHNvIGlmIHlvdSB3YW50CisgICBjZXJ0YWluIGtpbmRzIG9mIHJl Y29yZHMgdG8gYmUgcmVjb3JkZWQgaW4gdGhlIHN5c3RlbSBsb2csIHlvdSBjYW4KKyAgIGJ1aWxk IEMtS2VybWl0IHdpdGggZm9yY2VkIHN5c2xvZ2dpbmcgYXQgdGhlIGRlc2lyZWQgbGV2ZWw7IGZv cgorICAgZXhhbXBsZSwgdG8gcmVjb3JkIGxvZ2lucyBhbmQgZGlhbG91dHM6CisKK21ha2UgbGlu dXggS0ZMQUdTPS1EU1lTTE9HTEVWRUw9MgorCisgICBMZXZlbHMgMiBhbmQgMyBhcmUgdGhlIG1v c3QgbGlrZWx5IGNhbmRpZGF0ZXMgZm9yIHRoaXMgdHJlYXRtZW50LiBMZXZlbAorICAgMiBmb3Jj ZXMgbG9nZ2luZyBvZiBhbGwgc3VjY2Vzc2Z1bCBkaWFsb3V0IGNhbGxzIChlLmcuIGZvciBjaGVj a2luZworICAgYWdhaW5zdCBvciBwaG9uZSBiaWxscyksIGFuZCBsZXZlbCAzIHJlY29yZHMgYWxs IGNvbm5lY3Rpb25zIChTRVQgTElORQorICAgb3IgU0VUIEhPU1QgLyBURUxORVQgLyBSTE9HSU4s IGV0Yykgc28geW91IGNhbiBzZWUgd2hvIGlzIGNvbm5lY3RpbmcKKyAgIG91dCBmcm9tIHlvdXIg c3lzdGVtLCBhbmQgdG8gd2hlcmUsIGUuZy4gZm9yIHNlY3VyaXR5IGF1ZGl0aW5nLgorCisgICBM ZXZlbCAyIGFuZCAzIHJlY29yZHMgYXJlIGVxdWl2YWxlbnQgdG8gdGhvc2UgaW4gdGhlIGNvbm5l Y3Rpb24gbG9nOworICAgc2VlIHRoZSBbMzYxXUMtS2VybWl0IDcuMCBTdXBwbGVtZW50KSBmb3Ig YSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUKKyAgIGNvbm5lY3Rpb24gbG9nLgorCisxNi4g QlVJTERJTkcgU0VDVVJFIFZFUlNJT05TIE9GIEMtS0VSTUlUIDguMAorCisgICBbIFszNjJdVG9w IF0gWyBbMzYzXUNvbnRlbnRzIF0gWyBbMzY0XU5leHQgXSBbIFszNjVdUHJldmlvdXMgXQorCisg ICBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyIG1heSBiZSBidWlsdCB3aXRoIEtlcmJlcm9zKFRNKSBh bmQvb3IgU1JQKFRNKQorICAgKFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQpIGFuZC9vciBTU0wvVExT IHNlY3VyaXR5IGZvciBzdHJvbmcKKyAgIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIG9m IEludGVybmV0IGNvbm5lY3Rpb25zLiBUaGVzZSBzZWN1cml0eQorICAgbWV0aG9kcyByZXF1aXJl IGV4dGVybmFsIGxpYnJhcmllcyB0aGF0LCBpbiB0aGVpciBiaW5hcnkgZm9ybXMsIGFyZQorICAg cmVzdHJpY3RlZCBmcm9tIGV4cG9ydCBieSBVU0EgbGF3LiBTZWUgdGhlIFszNjZdS2VybWl0IFNl Y3VyaXR5CisgICBSZWZlcmVuY2UpIGZvciBkZXRhaWxzLiBDLUtlcm1pdCBiaW5hcmllcyB0aGVt c2VsdmVzIGFyZSBsaWtld2lzZQorICAgcmVzdHJpY3RlZDsgdGhlIEMtS2VybWl0IGJpbmFyaWVz IHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgcHVibGljCisgICBkb3dubG9hZCBvbiB0aGUgSW50ZXJu ZXQgYXJlIG5vdCBhbGxvd2VkIHRvIGNvbnRhaW4gdGhlIHNlY3VyaXR5CisgICBvcHRpb25zLgor CisgICBTYW1wbGUgbWFrZWZpbGUgZW50cmllcyBhcmUgcHJvdmlkZWQgZm9yIExpbnV4IGFuZCBt YW55IG90aGVyIG9wZXJhdGluZworICAgc3lzdGVtcy4gQSBsaXN0IG9mIHNlY3VyZSBtYWtlZmls ZSBlbnRyaWVzIGlzIGluY2x1ZGVkIGluIHRoZSBNYWtlZmlsZS4KKyAgIENvbXBsZXRlIGluc3Ry dWN0aW9ucyBvbiBidWlsZGluZyBDLUtlcm1pdCA4LjAgd2l0aCBNSVQgS2VyYmVyb3M7CisgICBT ZWN1cmUgUmVtb3RlIFBhc3N3b3JkOyBhbmQvb3IgT3BlblNTTCBjYW4gYmUgZm91bmQgaW4gdGhl IFszNjddS2VybWl0CisgICBTZWN1cml0eSBSZWZlcmVuY2UuCisKKyAgIFNTTC9UTFMgYW5kIEtl cmJlcm9zIGJ1aWxkcyBhcmUgaW5jcmVhc2luZ2x5IHByb2JsZW1hdGljIHdpdGggdGhlCisgICAi ZGVwcmVjYXRpb24iIG9mIERFUy4gVGhlcmUgaXMgY29kZSB0byBkZXRlY3QgdGhlIHByZXNlbmNl IG9yIGFic2VuY2UKKyAgIG9mIERFUyBpbiB0aGUgT3BlblNTTCBidWlsZHMsIGJ1dCBpdCBkb2Vz bid0IGFsd2F5cyB3b3JrIGJlY2F1c2UKKyAgIHNvbWV0aW1lcyB0aGUgU1NMIGxpYnJhcmllcyBh cmUgcHJlc2VudCBidXQgcm91dGluZXMgYXJlIG1pc3NpbmcgZnJvbQorICAgdGhlbS4KKworICAg ICAqIEZpcnN0IG9mIGFsbCByZW1lbWJlciB0aGF0IGlmIHlvdXIgU1NMIGFuZC9vciBLZXJiZXJv cyBoZWFkZXIgZmlsZXMKKyAgICAgICBhbmQgbGlicmFyaWVzIGFyZSBub3QgaW4gdGhlIGRlZmF1 bHQgcGxhY2UsIHlvdSdsbCBuZWVkIHRvIG92ZXJyaWRlCisgICAgICAgdGhlIGFzc3VtZWQgcGF0 aHMuIFRvIGZpbmQgb3V0IHdoYXQgdGhlIGRlZmF1bHQgcGxhY2VzIGFyZSB0eXBlCisgICAgICAg Im1ha2Ugc2hvdyIsIGUuZy46CisKK1t+L2tlcm1pdF0gbWFrZSBzaG93CitwcmVmaXg9L3Vzci9s b2NhbAorc3Jwcm9vdD0vdXNyL2xvY2FsCitzc2xyb290PS91c3IvbG9jYWwKK21hbnJvb3Q9L3Vz ci9sb2NhbAorSzRMSUI9LUwvdXNyL2tlcmJlcm9zL2xpYgorSzRJTkM9LUkvdXNyL2tlcmJlcm9z L2luY2x1ZGUKK0s1TElCPS1ML3Vzci9rZXJiZXJvcy9saWIKK0s1SU5DPS1JL3Vzci9rZXJiZXJv cy9pbmNsdWRlCitTUlBMSUI9LUwvdXNyL2xvY2FsL2xpYgorU1JQSU5DPS1JL3Vzci9sb2NhbC9p bmNsdWRlCitTU0xMSUI9LUwvdXNyL2xvY2FsL3NzbC9saWIKK1NTTElOQz0tSS91c3IvbG9jYWwv c3NsL2luY2x1ZGUKK1t+L2tlcm1pdF0KKworICAgICAqIFlvdSBjYW4gb3ZlcnJpZGUgYW55IG9y IGFsbCBvZiB0aGVzZSBieSBwdXR0aW5nIGFzc2lnbm1lbnRzIG9uIHRoZQorICAgICAgICdtYWtl JyBjb21tYW5kIGxpbmU7IGV4YW1wbGVzOgorCittYWtlIGxpbnV4K2tyYjUgXAorICJLNUlOQz0t SS91c3IvaW5jbHVkZS8iIFwKKyAiSzVMSUI9LUwvdXNyL2xpYjY0LyIKKworbWFrZSBzb2xhcmlz OWcrc3NsIFwKKyAgIlNTTExJQj0tTC9vcHQvb3BlbnNzbC0wLjkuOHEvbGliIiBcCisgICJTU0xJ TkM9LUkvb3B0L29wZW5zc2wtMC45LjhxL2luY2x1ZGUiCisKKyAgICAgICBPciBieSBzZXR0aW5n IGFuZCBleHBvcnRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHByaW9yIHRvIGdpdmluZworICAg ICAgIHRoZSAnbWFrZScgY29tbWFuZCwgYXMgaW4gdGhpcyBleGFtcGxlIGluIHdoaWNoIChhZnRl ciBCZXRhLjAxIHdhcworICAgICAgIHVwbG9hZGVkKSBDLUtlcm1pdCB3YXMgc3VjY2Vzc2Z1bGx5 IGxpbmtlZCB3aXRoIE9wZW5TU0wgMS4wLjBkLAorICAgICAgIHdoaWNoIHdhcyBpbnN0YWxsZWQg YWxvbmdzaWRlIE9wZW5TU0wgMC45LjhyIG9uIHRoZSBzYW1lIGNvbXB1dGVyLgorICAgICAgIE5v dGUgdGhlIHVzZSBvZiB0aGUgJy1pJyBvcHRpb24gaW5zdGVhZCBvZiAnLUknIHRvIGZvcmNlIGdj YyB0bworICAgICAgIGluY2x1ZGUgdGhlIHJpZ2h0IGhlYWRlciBmaWxlcyAodGhhbmtzIHRvIE5l bHNvbiBCZWViZSBmb3IgdGhpcyk6CisKK2V4cG9ydCBQQVRIPS91c3IvYmluOiRQQVRICitleHBv cnQgU1NMSU5DPS1pc3lzdGVtL3Vzci9pbmNsdWRlCitleHBvcnQgIlNTTExJQj0tTC91c3IvbGli IC1XbCwtcnBhdGgsL3Vzci9saWIiCittYWtlIGxpbnV4K3NzbAorCisgICAgICAgLWkgaXMgZXhw bGFpbmVkIGluICdtYW4gZ2NjJzsgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gd2hhdCAtSSBkb2VzCisg ICAgICAgdGhhdCBjb3VsZCBoYXZlIHJhbWlmaWNhdGlvbnMgZm9yIG1hbnkgbWFrZWZpbGUgdGFy Z2V0cywgbm90IGp1c3QKKyAgICAgICBLZXJtaXQuIEFuZCAtV2wgYW5kIC1ycGF0aCBhcmUgZXhw bGFpbmVkIGluICdtYW4gbGQnOyB0aGUgaWRlYSBpcworICAgICAgIGJ1aWxkIGEgYmluYXJ5IGZy b20gd2hpY2ggdXNlZnVsIHJlcG9ydHMgY2FuIGJlIG9idGFpbmVkIHdpdGggbGRkLgorICAgICAq IEJ1aWxkaW5nIHdpdGggT3BlblNTTCB2ZXJzaW9ucyBwcmlvciB0byAwLjkuNyBkb2Vzbid0IHdv cmssIGV2ZW4KKyAgICAgICB0aG91Z2ggQy1LZXJtaXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRo IGJvdGggdGhlIG9sZCBhbmQgbmV3CisgICAgICAgdmVyc2lvbnMuIFRoaXMgY291bGQgcHJvYmFi bHkgYmUgZml4ZWQgaWYgYW55Ym9keSBjYXJlcy4KKyAgICAgKiBJZiBhIEtlcmJlcm9zIG9yIFNT TCBidWlsZCBmYWlscyBhdCBsaW5rIHRpbWUgYmVjYXVzZQorICAgICAgIGRlc19lY2IzX2VuY3J5 cHQsIGRlc19yYW5kb21fc2VlZCwgYW5kL29yIGRlc19zZXRfb2RkX3Bhcml0eSBjb21lCisgICAg ICAgdXAgbWlzc2luZywgcmVkbyB0aGUgYnVpbGQgd2l0aCAtVUNLX0RFUzoKKworbWFrZSBuZXRi c2Qra3JiNStzc2wgXAorICJLNUlOQz0tSS91c3IvbG9jYWwvaW5jbHVkZSIgXAorICJLNUxJQj0t TC91c3IvbG9jYWwva2VyYmxpYiIgS0ZMQUdTPS1VQ0tfREVTCisKKyAgICAgICBJIHN1cHBvc2Ug YWxsIHRoZSBTU0wgYW5kIEtlcmJlcm9zIHRhcmdldHMgY291bGQgYmUgcmVjb2RlZCB0bworICAg ICAgIGZpZ3VyZSB0aGlzIG91dCBhdXRvbWF0aWNhbGx5IChpLmUuIHRoYXQgREVTIGlzIGluc3Rh bGxlZCBidXQgd2l0aAorICAgICAgIHNvbWUgZW50cnkgcG9pbnRzIG1pc3NpbmcpLCBidXQgaXQg d291bGRuJ3QgYmUgcHJldHR5LgorICAgICAqIERpZmZlcmVudCBLZXJiZXJvcyBhbmQgT3BlblNT TCBkaXN0cmlidXRpb25zIGNhbiBiZSBpbnN0YWxsZWQgd2l0aAorICAgICAgIGRpZmZlcmVudCBv cHRpb25zOyBjZXJ0YWluIGxpYnJhcmllcyBtaWdodCBiZSBtaXNzaW5nIG9yIG5hbWVkCisgICAg ICAgZGlmZmVyZW50bHkgKGZvciBleGFtcGxlLCBsaWJnc3NhcGkgdnMgbGliZ3NzYXBpX2tyYjUp LiBTb21lLCBidXQKKyAgICAgICBub3QgYWxsLCBvZiB0aGUgQy1LZXJtaXQgbWFrZWZpbGUgdGFy Z2V0cyBoYXZlIGJlZW4gZml4ZWQgdG8gdGFrZQorICAgICAgIHNvbWUgb2YgdGhlc2UgdmFyaWF0 aW9ucyBpbnRvIGFjY291bnQgYnkgdGVzdGluZyBmb3IgdGhlbSwgbW9zdAorICAgICAgIG5vdGFi bHkgdGhlIGxpbnV4IG9uZXMsIGxpbnV4K3NzbCwgbGludXgra3JiNSwgYW5kIGxpbnV4K2tyYjUr c3NsLgorICAgICAgIFByb2JhYmx5IGV2ZXJ5IHRhcmdldCB0aGF0IGJ1aWxkcyB3aXRoIE9wZW5T U0wgb3IgS2VyYmVyb3MgbmVlZHMKKyAgICAgICB0aGUgc2FtZSB0cmVhdG1lbnQgYnV0IEkgd29u J3QgaGF2ZSB0aW1lLgorICAgICAqIFdoeSBkb2Vzbid0IEMtS2VybWl0IGp1c3QgdXNlIEF1dG9j b25mPyBNYWlubHkgYmVjYXVzZSB0aGUgbWFrZWZpbGUKKyAgICAgICBpcyBmdWxsIG9mIHRhcmdl dHMgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgQXV0b2NvbmYgb3IgYW55CisgICAgICAg b3RoZXIgdG9vbCBsaWtlIGl0LiAoQW5vdGhlciByZWFzb24gaXMgdGhhdCBJJ3ZlIGFsd2F5cyBw cmVmZXJyZWQKKyAgICAgICB0aGF0IEtlcm1pdCBoYXZlIHRoZSBsZWFzdCBkZXBlbmRlbmNpZXMg cG9zc2libGUgb24gZXh0ZXJuYWwKKyAgICAgICB0b29sc2V0cy4pIFBlcmhhcHMgY2VydGFpbiB0 YXJnZXRzIGNvdWxkIGJlIGNvbnZlcnRlZCB0byB1c2UgdGhlbSwKKyAgICAgICBlc3BlY2lhbGx5 IExpbnV4IGJlY2F1c2UgdGhlcmUgYXJlIHNvIG1hbnkgdmFyaWF0aW9ucyBhbW9uZworICAgICAg IGRpc3RyaWJ1dGlvbnMgYW5kIHZlcnNpb25zLiBBbnlib2R5IHdobyB3YW50cyB0byBtYWtlLCBz YXksIGFuCisgICAgICAgQXV0b2NvbmYtYmFzZWQgTGludXggdGFyZ2V0LCBiZSBteSBndWVzdCwg YnV0IGJlYXIgaW4gbWluZCB0aGF0IG9uZQorICAgICAgIExpbnV4IHRhcmdldCBpcyBzdXBwb3Nl ZCB0byB3b3JrIGZvciBhbGwgdmVyc2lvbnMgYW5kIGRpc3RyaWJ1dGlvbnMKKyAgICAgICBvZiBM aW51eCBvbiBhbGwgcGxhdGZvcm1zLiBXZWxsLCBvbmUgdGFyZ2V0IGZvciBMaW51eCBieSBpdHNl bGYsCisgICAgICAgYW5vdGhlciBmb3IgTGludXggd2l0aCBPcGVuU1NMLCBhbm90aGVyIGZvciBM aW51eCB3aXRoIEtlcmJlcm9zIDUsCisgICAgICAgYW5kIGFub3RoZXIgZm9yIExpbnV4IHdpdGgg S2VyYmVyb3MgNSBhbmQgT3BlblNTTC4gRWFjaCBvZiB0aGVzZSBpcworICAgICAgIHN1cHBvc2Vk IHRvIHdvcmsgb24gYW55IExpbnV4IHZlcnNpb24gd2l0aCBhbnkgdmVyc2lvbiBvZgorICAgICAg IEtlcmJlcm9zIDUgb3IgT3BlblNTTC4KKworICAgQWxzbyBub3RlIHRoYXQgS2VyYmVyb3Mgc3Vw cG9ydCBpcyBmb3IgdGhlIE1JVCB2ZXJzaW9uIG9ubHksIEhlaW1kYWwKKyAgIGFuZCBvdGhlcnMg YXJlIG5vdCBzdXBwb3J0ZWQgKG5ldmVyIGhhdmUgYmVlbikuIE9mIGNvdXJzZSBhbnlib2R5IGNh bgorICAgcGl0Y2ggaW4gYW5kIGFkZCBvciBpbXByb3ZlIHN1cHBvcnQgZm9yIHdoYXRldmVyIHRo ZXkgd2FudC4KKworMTcuIElOU1RBTExJTkcgQy1LRVJNSVQgQVMgQU4gU1NIIFNFUlZFUiBTVUJT WVNURU0KKworICAgWyBbMzY4XVRvcCBdIFsgWzM2OV1Db250ZW50cyBdIFsgWzM3MF1QcmV2aW91 cyBdCisKKyAgIFRoaXMgcmVxdWlyZXMgQy1LZXJtaXQgOC4wLjIwNiBvciBsYXRlciBhbmQgYW4g U1NIIHYyIHNlcnZlci4gSWYgeW91CisgICBsaXN0IEMtS2VybWl0IGFzIGEgU3Vic3lzdGVtIGlu IHRoZSBTU0ggdjIgc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgKGFzLCBmb3IgZXhhbXBs ZSwgU0ZUUCBpcyBsaXN0ZWQpLCB1c2VycyBjYW4gbWFrZSBTU0ggY29ubmVjdGlvbnMKKyAgIGRp cmVjdCB0byBhIEtlcm1pdCBzZXJ2ZXIgYXMgZXhwbGFpbmVkIGhlcmU6CisKK1szNzFdaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NrZXJtaXQuaHRtbAorCisgICBUaGUgbmFtZSBhbmQg bG9jYXRpb24gb2YgdGhlIFNTSCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlIGRlcGVuZHMgb24K KyAgIHlvdXIgcGxhdGZvcm0sIHdoaWNoIFNTSCBwcm9kdWN0KHMpIHlvdSBoYXZlLCBldGMuIEMt S2VybWl0IGl0c2VsZiBtdXN0CisgICBiZSByZWZlcnJlZCB0byBpbiB0aGlzIGZpbGUgYXMgImtl cm1pdC1zc2hzdWIiLiBPbiB0aGUgaG9zdCwgaW5zdGFsbAorICAgdGhlIEMtS2VybWl0IDguMC4y MTEgYmluYXJ5IGluIHRoZSBub3JtYWwgd2F5LiBUaGVuLCBpbiB0aGUgc2FtZQorICAgZGlyZWN0 b3J5IGFzIHRoZSBDLUtlcm1pdCBiaW5hcnksIG1ha2UgYSBzeW1ib2xpYyBsaW5rOgorCitsbiAt cyBrZXJtaXQga2VybWl0LXNzaHN1YgorCisgICAoTm90ZTogdGhlICJtYWtlIGluc3RhbGwiIG1h a2VmaWxlIHRhcmdldCBkb2VzIHRoaXMgZm9yIHlvdS4pIFRoZW4gaW4KKyAgIHRoZSBzc2hkIGNv bmZpZ3VyYXRpb24gZmlsZSwgYWRkIGEgbGluZToKKworU3Vic3lzdGVtICBrZXJtaXQgICAvc29t ZS9wYXRoL2tlcm1pdC1zc2hzdWIKKworICAgKHdoZXJlIC9zb21lL3BhdGggaXMgdGhlIGZ1bGx5 IHNwZWNpZmllZCBkaXJlY3Rvcnkgd2hlcmUgdGhlIHN5bWxpbmsKKyAgIGlzLikgVGhpcyBpcyBz aW1pbGFyIHRvIHRoZSBsaW5lIHRoYXQgc2V0cyB1cCB0aGUgU0ZUUCBzdWJzeXN0ZW0uCisgICBF eGFtcGxlOgorCitTdWJzeXN0ZW0gICBzZnRwICAgIC91c3IvbG9jYWwvbGliZXhlYy9zZnRwLXNl cnZlcgorU3Vic3lzdGVtICAga2VybWl0ICAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQtc3Noc3ViCisK KyAgIFRoZSBtZWNoYW5pY3MgbWlnaHQgdmFyeSBmb3Igb3RoZXIgU1NIIHNlcnZlcnM7ICJtYW4g c3NoZCIgZm9yIGRldGFpbHMuCisgICBUaGUgbWV0aG9kIHNob3duIGhlcmUgaXMgdXNlZCBiZWNh dXNlIHRoZSBPcGVuU1NIIHNlcnZlciBkb2VzIG5vdAorICAgcGVybWl0IHRoZSBzdWJzeXN0ZW0g aW52b2NhdGlvbiB0byBpbmNsdWRlIGNvbW1hbmQtbGluZSBvcHRpb25zLgorICAgQy1LZXJtaXQg d291bGQgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB0aGF0IGl0IHNob3VsZCBlbnRlciBTZXJ2ZXIg bW9kZQorICAgaWYgaXQgd2VyZSBub3QgY2FsbGVkIGJ5IGEgc3BlY2lhbCBuYW1lLgorCisgICBb IFszNzJdVG9wIF0gWyBbMzczXUNvbnRlbnRzIF0gWyBbMzc0XUMtS2VybWl0IEhvbWUgXSBbIFsz NzVdQy1LZXJtaXQKKyAgIDkuMCBPdmVydmlldyBdIFsgWzM3Nl1LZXJtaXQgSG9tZSBdCisgICAg IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXworCisKKyAgICBDLUtlcm1pdCA5LjAgVW5peCBJbnN0YWxsYXRpb24gSW5zdHJ1 Y3Rpb25zIC8gVGhlIEtlcm1pdCBQcm9qZWN0IC8KKyAgICBDb2x1bWJpYSBVbml2ZXJzaXR5IC8g MzAgSnVuZSAyMDExCisKK1JlZmVyZW5jZXMKKworICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUvCisgICAyLiBtYWlsdG86a2VybWl0QGNvbHVtYmlhLmVkdQorICAgMy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2luZGV4Lmh0bWwKKyAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9rOTUuaHRtbAorICAgNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQuaHRtbAorICAgNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2Ny aXB0cy5odG1sCisgICA3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5o dG1sCisgICA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAor ICAgOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2ZhcS5odG1sCisgIDEwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCisgIDExLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAgMTIuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAgMTMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCisgIDE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwKKyAgMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4MAorICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3gxCisgIDE3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDIKKyAgMTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4MworICAxOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0 CisgIDIwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUKKyAg MjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NgorICAyMi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g3CisgIDIzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDgKKyAgMjQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQorICAyNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAorICAyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQorICAyNy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMgorICAyOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3gxMworICAyOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3gxNAorICAzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3gxNQorICAzMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI3gxNgorICAzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3gxNworICAzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3RvcAorICAzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI2NvbnRlbnRzCisgIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDEKKyAgMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRt bAorICAzNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCisgIDM4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwKKyAgMzkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAorICA0MC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gyCisgIDQxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDMKKyAgNDIuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAorICA0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3RvcAorICA0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgIDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDIKKyAgNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4MAorICA0Ny4gZnRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvYXJj aGl2ZXMvY2t1MjExLnRhci5aCisgIDQ4LiBmdHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9h cmNoaXZlcy9ja3UyMTEudGFyLmd6CisgIDQ5LiBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9m dHAvYXJjaGl2ZXMvY2t1MjExLnRhci5aCisgIDUwLiBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9mdHAvYXJjaGl2ZXMvY2t1MjExLnRhci5negorICA1MS4gZnRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvYXJjaGl2ZXMvY2t1MjExLnRhcgorICA1Mi4gaHR0cDovL2tlcm1pdC5jb2x1bWJp YS5lZHUvZnRwL2FyY2hpdmVzL2NrdTIxMS50YXIKKyAgNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NworICA1NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g1CisgIDU1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDUKKyAgNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN4MTYKKyAgNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN0b3AKKyAgNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCNjb250ZW50cworICA1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3gzCisgIDYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0 bWwjeDEKKyAgNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 NQorICA2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI1gxMAor ICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQorICA2 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAorICA2NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gzCisgIDY2LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s4MHBhY2thZ2VzLmh0bWwKKyAgNjcuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTAKKyAgNjguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAgNjkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworICA3MC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0CisgIDcxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDIKKyAgNzIuIGZ0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2Jpbi8KKyAgNzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j azgwYmluYXJpZXMuaHRtbAorICA3NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g3CisgIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjYnVpbGQKKyAgNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4NQorICA3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g0CisgIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbCN2ZXJz aW9uCisgIDc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQK KyAgODAuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1CisgIDgxLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgIDgyLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAgODMuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQorICA4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3gzCisgIDg1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDgKKyAgODYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4OQorICA4Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvbWFrZWZpbGUKKyAgODguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrcGtlci5taworICA4OS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2t1YnNkLm1haworICA5MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g1CisgIDkxLiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEu ZWR1CisgIDkyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9tYWtl ZmlsZQorICA5My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g3 CisgIDk0LiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1CisgIDk1LiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9tYWtlZmlsZQorICA5Ni4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1LjQKKyAgOTcuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTAKKyAgOTguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTEKKyAgOTkuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQorIDEwMC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2lrc2QuaHRtbAorIDEwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3RvcAorIDEwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMTAzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDQuMQorIDEwNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrY2NmZy5odG1sCisgMTA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDQuMQorIDEwNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g0LjIKKyAxMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4NC4zCisgMTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj eDQuNAorIDEwOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0 LjUKKyAxMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAorIDEx MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2NmZy5odG1sI3g4CisgMTEyLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCisgMTEzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvaWtzZC5odG1sCisgMTE0LiBmdHA6Ly9rZXJtaXQuY29sdW1i aWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYworIDExNS4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1ZmlvLmMKKyAxMTYuIG1haWx0bzprZXJtaXQtc3Vw cG9ydEBjb2x1bWJpYS5lZHUKKyAxMTcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrY21haS5jCisgMTE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDE1CisgMTE5LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9j LWtlcm1pdC9ja3V0aW8uYworIDEyMC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2t1ZmlvLmMKKyAxMjEuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0 L2Mta2VybWl0L2NrdXRpby5jCisgMTIyLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1p dC9jLWtlcm1pdC9ja3VmaW8uYworIDEyMy4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJt aXQvYy1rZXJtaXQvY2tjbmV0LmMKKyAxMjQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrY25ldC5jCisgMTI1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDEyNi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjdW5pLmMKKyAxMjcuIG1haWx0bzprZXJtaXQtc3VwcG9ydEBjb2x1 bWJpYS5lZHUKKyAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN0b3AKKyAxMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNj b250ZW50cworIDEzMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g0CisgMTMxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQu MgorIDEzMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0LjAK KyAxMzMuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L21ha2VmaWxl CisgMTM0LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3Vid3Iu dHh0CisgMTM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1YndyLmh0bWwKKyAx MzYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2Nrd2FydC5jCisg MTM3LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2Nwcm8udwor IDEzOC4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tjcHJvLmMK KyAxMzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAx NDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cwor IDE0MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0CisgMTQy LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMworIDE0My4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0LjEKKyAxNDQuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NQorIDE0NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDE0Ni4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMTQ3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKKyAxNDguIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC40CisgMTQ5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMgorIDE1MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDE1MS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMTUyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQKKyAxNTMuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NC41CisgMTU0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDQuMworIDE1NS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9rZXJtaXQvYy1rZXJtaXQvY2twa2VyLm1rCisgMTU2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMTU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAxNTguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4NAorIDE1OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g0LjQKKyAxNjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L21ha2VmaWxlCisgMTYxLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tl cm1pdC9jLWtlcm1pdC9tYWtlZmlsZQorIDE2Mi4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9r ZXJtaXQvYy1rZXJtaXQvY2tjcHJvLncKKyAxNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAxNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCNjb250ZW50cworIDE2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g2CisgMTY2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjeDQKKyAxNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCN4NS4xCisgMTY4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDUuMgorIDE2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g1LjMKKyAxNzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4NS40CisgMTcxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgMTcyLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDUuNAorIDE3My4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1LjMKKyAxNzQuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L0NPUFlJTkcuVFhUCisgMTc1LiBmdHA6 Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2VybWl0LmluaQorIDE3Ni4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g1LjEKKyAxNzcuIGZ0 cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrZXJtb2QuaW5pCisgMTc4 LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2VybWl0NzAudHh0 CisgMTc5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2s2MG1hbnVhbC5odG1sCisg MTgwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwKKyAxODEu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrZXJtaXQ4MC50eHQK KyAxODIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jazYwbWFudWFsLmh0bWwKKyAx ODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0ODAuaHRtbAorIDE4NC4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2tlcm1pdDkwLnR4dAor IDE4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrNjBtYW51YWwuaHRtbAorIDE4 Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sCisgMTg3LiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2Nid3IudHh0CisgMTg4 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwKKyAxODkuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWJ3ci50eHQKKyAxOTAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAorIDE5MS4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1aW5zLnR4dAorIDE5Mi4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCisgMTkzLiBmdHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NjZmcudHh0CisgMTk0LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKKyAxOTUuIGZ0cDovL2tlcm1pdC5jb2x1 bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY3BsbS50eHQKKyAxOTYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2NwbG0uaHRtbAorIDE5Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvYy1rZXJtaXQvY2FfY2VydHMucGVtCisgMTk4LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE2IgorIDE5OS4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvbWFrZWZpbGUKKyAyMDAuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4PworIDIwMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3gxMQorIDIwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g1LjIKKyAyMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwjZG93bmxvYWQKKyAyMDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2JpbmFyaWVzLmh0bWwKKyAyMDUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwjZG93bmxvYWQKKyAyMDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAyMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDIwOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI3g3CisgMjA5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1aW5zLmh0bWwjeDUKKyAyMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN0b3AKKyAyMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCNjb250ZW50cworIDIxMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g4CisgMjEzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDYKKyAyMTQuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrdXRpby5jCisgMjE1LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja3V0aW8uYworIDIxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g0LjAKKyAyMTcuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0 L2NrY2RlYi5oCisgMjE4LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja3VmaW8uYworIDIxOS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2t1ZmlvLmMKKyAyMjAuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrdXRpby5jCisgMjIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDEwCisgMjIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0 bWwjeDIKKyAyMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAor IDIyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g0CisgMjI1 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDEwCisgMjI2LiBm dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDIyNy4g ZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAyMjgu IGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgMjI5 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNAorIDIzMC4g bWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdQorIDIzMS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDIzMi4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMjMzLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkKKyAyMzQuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4NworIDIzNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrY2NmZy5odG1sCisgMjM2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tjY2ZnLmh0bWwKKyAyMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN0b3AKKyAyMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCNjb250ZW50cworIDIzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3gxMAorIDI0MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1s I3g4CisgMjQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDku MQorIDI0Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEu MQorIDI0My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEu MgorIDI0NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEu MworIDI0NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjIK KyAyNDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4zCisg MjQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNAorIDI0 OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjUKKyAyNDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS42CisgMjUwLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuNworIDI1MS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjgKKyAyNTIuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS45CisgMjUzLiBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3V0aW8uYworIDI1NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDI1NS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5CisgMjU2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAyNTcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4yCisgMjU4LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMS4xCisgMjU5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMS4yCisgMjYwLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjeDkuMS4zCisgMjYxLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMjYyLiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAyNjMuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQorIDI2NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjEKKyAyNjUuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjMKKyAyNjYuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4xLjEKKyAyNjcuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAyNjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDI2OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3g5CisgMjcwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDkuMQorIDI3MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g5LjIKKyAyNzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4OS4xLjIKKyAyNzMuIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxp bmVwdWJzLzAwNzkwNDk3NS8KKyAyNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN4OS4xLjEKKyAyNzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN0b3AKKyAyNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vp bnMuaHRtbCNjb250ZW50cworIDI3Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dWlucy5odG1sI3g5CisgMjc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDkuMQorIDI3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI3g5LjMKKyAyODAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4OS4xCisgMjgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwj dG9wCisgMjgyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29u dGVudHMKKyAyODMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 OQorIDI4NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjQK KyAyODUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4yCisg Mjg2LiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja3VmaW8uYwor IDI4Ny4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMK KyAyODguIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5j CisgMjg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisg MjkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMK KyAyOTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQorIDI5 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjUKKyAyOTMu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS4zCisgMjk0LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2FibGUuaHRtbAorIDI5NS4gZnRwOi8va2Vy bWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAyOTYuIGZ0cDovL2tl cm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrY2RlYi5oCisgMjk3LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMjk4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAyOTkuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQorIDMwMC4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjYKKyAzMDEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS40CisgMzAyLiBmdHA6Ly9rZXJtaXQuY29s dW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1pdC9ja2NkZWIuaAorIDMwMy4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dXMzLmMKKyAzMDQuIGZ0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdXRpby5jCisgMzA1LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMzA2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAzMDcuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQorIDMwOC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3g5LjcKKyAzMDkuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OS41CisgMzEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMzExLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAzMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQorIDMxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdWlucy5odG1sI3g5LjgKKyAzMTQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3VpbnMuaHRtbCN4OS42CisgMzE1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1aW5zLmh0bWwjdG9wCisgMzE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwjY29udGVudHMKKyAzMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a3VpbnMuaHRtbCN4OQorIDMxOC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3g5LjkKKyAzMTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMu aHRtbCN4OS43CisgMzIwLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtlcm1p dC9ja3V0aW8uYworIDMyMS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJt aXQvY2t1dGlvLmMKKyAzMjIuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2Vy bWl0L2NrY2RlYi5oCisgMzIzLiBmdHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jLWtl cm1pdC9ja3VmaW8uYworIDMyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlu cy5odG1sI3RvcAorIDMyNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5o dG1sI2NvbnRlbnRzCisgMzI2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5z Lmh0bWwjeDkKKyAzMjcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRt bCN4MTAKKyAzMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4 OS44CisgMzI5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9w CisgMzMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVu dHMKKyAzMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTEK KyAzMzIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4OQorIDMz My4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAz MzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTEKKyAzMzUu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAzMzYuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDMzNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMgorIDMzOC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMAorIDMzOS4gZnRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAzNDAuIGZ0cDov L2tlcm1pdC5jb2x1bWJpYS5lZHUva2VybWl0L2Mta2VybWl0L2NrdWZpby5jCisgMzQxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjdG9wCisgMzQyLiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwjY29udGVudHMKKyAzNDMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTMKKyAzNDQuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN4MTEKKyAzNDUuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAzNDYuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDM0Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNAorIDM0OC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMgorIDM0OS4gZnRwOi8va2VybWl0LmNvbHVt YmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1YndyLnR4dAorIDM1MC4gZnRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rZXJtaXQvYy1rZXJtaXQvY2t1dGlvLmMKKyAzNTEuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAzNTIuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDM1My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNQorIDM1NC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxMworIDM1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDM1Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMzU3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1aW5zLmh0bWwjeDE2CisgMzU4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwjeDE0CisgMzU5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvdWlrc2QuaHRtbCN4NC4yCisgMzYwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv dWlrc2QuaHRtbAorIDM2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQy Lmh0bWwKKyAzNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0 b3AKKyAzNjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250 ZW50cworIDM2NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gx NworIDM2NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNQor IDM2Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKKyAzNjcu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zZWN1cml0eTgwLmh0bWwKKyAzNjguIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCN0b3AKKyAzNjkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3VpbnMuaHRtbCNjb250ZW50cworIDM3MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3gxNgorIDM3MS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NrZXJtaXQuaHRtbAorIDM3Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI3RvcAorIDM3My4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sI2NvbnRlbnRzCisgMzc0LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMzc1LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2s5MHVwZGF0ZXMuaHRtbAorIDM3Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2luZGV4Lmh0bWwKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrdWtlci5uciBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0 LTkuMC4zMDIvY2t1a2VyLm5yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAz YjMwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdWtlci5ucgpAQCAtMCwwICsxLDE4MzEgQEAKKy5cIiBAKCMpIGtlcm1pdC4xIDku MC4zMDIgMjAxMS8wOC8yMCBDb2x1bWJpYSBVbml2ZXJzaXR5CisuVEggS0VSTUlUIDEgIkpVTFkg MjAxMSIgIlVzZXIgTWFudWFscyIKKy5uYQorLlNIIE5BTUUKK2tlcm1pdCBcLQorLkIgQ1woaHlL ZXJtaXQgOS4wOgordHJhbnNwb3J0XChoeSBhbmQgcGxhdGZvcm1cKGh5aW5kZXBlbmRlbnQKK2lu dGVyYWN0aXZlIGFuZCBzY3JpcHRhYmxlIGNvbW11bmljYXRpb25zIHNvZnR3YXJlLgorLklQCisK K1RoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gZ2l2ZSB0aGUgYmVnaW5uZXIgc3VmZmljaWVu dCBpbmZvcm1hdGlvbiB0bworbWFrZSBiYXNpYyAoaWYgbm90IGFkdmFuY2VkKSB1c2Ugb2YgQ1wo aHlLZXJtaXQgOS4wLiAgQWx0aG91Z2ggaXQgbWlnaHQgYmUKK3JhdGhlciBsb25nIGZvciBhIFVu aXggbWFudWFsIHBhZ2UsIGl0J3Mgc3RpbGwgZmFyIHNob3J0ZXIgdGhhbiB0aGUKK0NcKGh5S2Vy bWl0IG1hbnVhbCwgd2hpY2ggc2hvdWxkIGJlIGNvbnN1bHRlZCBmb3IgYWR2YW5jZWQgdG9waWNz IHN1Y2ggYXMKK2N1c3RvbWl6YXRpb24sIGNoYXJhY3RlclwoaHlzZXRzLCBzY3JpcHRpbmcsIGV0 Yy4gV2UgYWxzbyBhdHRlbXB0IHRvIHByb3ZpZGUKK2EgY2xlYXIgc3RydWN0dXJhbCBvdmVydmll dyBvZiBDXChoeUtlcm1pdCdzIG1hbnkgY2FwYWJpbGl0aWVzLCBmdW5jdGlvbmFsCithcmVhcywg c3RhdGVzLCBhbmQgbW9kZXMgYW5kIHRoZWlyIGludGVycmVsYXRpb24sIHRoYXQgc2hvdWxkIGJl IGhlbHBmdWwgdG8KK2JlZ2lubmVycyBhbmQgdmV0ZXJhbnMgYWxpa2UsIGFzIHdlbGwgYXMgdG8g dGhvc2UgdXBncmFkaW5nIHRvIHZlcnNpb24gOS4wCitmcm9tIGVhcmxpZXIgcmVsZWFzZXMuCisu UFAKK1RoaXMgZG9jdW1lbnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBXZWIgcGFnZSBhdDoKKy5J UAoraHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwKKy5TSCBERVND UklQVElPTgorQ1woaHlLZXJtaXQgaXMgYW4gYWxsXChoeXB1cnBvc2UgY29tbXVuaWNhdGlvbnMg c29mdHdhcmUgcGFja2FnZSBmcm9tIHRoZSBLZXJtaXQKK1Byb2plY3QgYXQgQ29sdW1iaWEgVW5p dmVyc2l0eSB0aGF0OgorLlBQCisubmYKK1woYnUJSXMgcG9ydGFibGUgdG8gbWFueSBwbGF0Zm9y bXMsIFVuaXggYW5kIG5vblwoaHlVbml4IGFsaWtlLgorLmJyCitcKGJ1CUNhbiBtYWtlIGJvdGgg c2VyaWFsIGFuZCBuZXR3b3JrIGNvbm5lY3Rpb25zLgorLmJyCitcKGJ1CUNhbiBjb25kdWN0IGlu dGVyYWN0aXZlIHRlcm1pbmFsIHNlc3Npb25zIG92ZXIgaXRzIGNvbm5lY3Rpb24uCisuYnIKK1wo YnUJQ2FuIHRyYW5zZmVyIHRleHQgb3IgYmluYXJ5IGZpbGVzIG92ZXIgdGhlIHNhbWUgY29ubmVj dGlvbi4KKy5icgorXChidQlDYW4gY29udmVydCBjaGFyYWN0ZXIgc2V0cyBpbiB0aGUgdGVybWlu YWwgc2Vzc2lvbi4KKy5icgorXChidQlDYW4gY29udmVydCBjaGFyYWN0ZXIgc2V0cyBkdXJpbmcg dGV4dFwoaHlmaWxlIGZpbGUgdHJhbnNmZXIuCisuYnIKK1woYnUJSXMgY3VzdG9taXphYmxlIGlu IGV2ZXJ5IGFzcGVjdCBvZiBpdHMgb3BlcmF0aW9uLgorLmZpCisuUFAKK0NcKGh5S2VybWl0IGlz IGEgbW9kZW0gcHJvZ3JhbSwgYSBUZWxuZXQgY2xpZW50LCBhbiBSbG9naW4gY2xpZW50LCBhbiBG VFAKK2NsaWVudCwgYW4gSFRUUCBjbGllbnQsIGFuZCBvbiBzZWxlY3RlZCBwbGF0Zm9ybXMsIGFs c28gYW4gWC4yNSBjbGllbnQuIEl0CitjYW4gbWFrZSBpdHMgb3duIHNlY3VyZSBJbnRlcm5ldCBj b25uZWN0aW9ucyB1c2luZyBJRVRGXChoeWFwcHJvdmVkIHNlY3VyaXR5CittZXRob2RzIGluY2x1 ZGluZyBLZXJiZXJvcyBJViwgS2VyYmVyb3MgViwgU1NML1RMUywgYW5kIFNSUCBhbmQgaXQgY2Fu IGFsc28KK21ha2UgU1NIIGNvbm5lY3Rpb25zIHRocm91Z2ggeW91ciBleHRlcm5hbCBTU0ggY2xp ZW50IGFwcGxpY2F0aW9uLiBJdCBjYW4KK2JlIHRoZSBmYXJcKGh5ZW5kIGZpbGVcKGh5dHJhbnNm ZXIgb3IgY2xpZW50L3NlcnZlciBwYXJ0bmVyIG9mIHlvdXIgZGVza3RvcAorS2VybWl0IGNsaWVu dC4gSXQgY2FuIGFsc28gYWNjZXB0IGluY29taW5nIGRpYWxlZCBhbmQgbmV0d29yayBjb25uZWN0 aW9ucy4KK0l0IGNhbiBldmVuIGJlIGluc3RhbGxlZCBhcyBhbiBJbnRlcm5ldCBzZXJ2aWNlIG9u IGl0cyBvd24gc3RhbmRhcmQgVENQCitzb2NrZXQsIDE2NDkgW1JGQzI4MzksIFJGQzI4NDBdLgor LlBQCitBbmQgcGVyaGFwcyBtb3N0IGltcG9ydGFudCwgZXZlcnl0aGluZyB5b3UgY2FuIGRvICJi eSBoYW5kIiAoaW50ZXJhY3RpdmVseSkKK3dpdGggQ1woaHlLZXJtaXQsIGNhbiBiZSAic2NyaXB0 ZWQiIChhdXRvbWF0ZWQpIHVzaW5nIGl0cyBidWlsdFwoaHlpbgorY3Jvc3NcKGh5cGxhdGZvcm0g dHJhbnNwb3J0XChoeWluZGVwZW5kZW50IHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZSwgd2hp Y2gKK2hhcHBlbnMgdG8gYmUgaWRlbnRpY2FsIHRvIGl0cyBpbnRlcmFjdGl2ZSBjb21tYW5kIGxh bmd1YWdlLgorLlBQCitUaGlzIG1hbnVhbCBwYWdlIG9mZmVycyBhbiBvdmVydmlldyBvZiBDXCho eUtlcm1pdCA5LjAgZm9yIFVuaXggKCJVbml4IiBpcyBhbgorb3BlcmF0aW5nIHN5c3RlbSBmYW1p bHkgdGhhdCBpbmNsdWRlcyBBSVgsIERHL1VYLCBGcmVlQlNELCBIUFwoaHlVWCwgSVJJWCwKK0xp bnV4LCBNYWMgT1MgWCwgTmV0QlNELCBPcGVuQlNELCBPcGVuIFNlcnZlciwgT3BlbiBVbml4LCBR TlgsIFNvbGFyaXMsCitTdW5PUywgU3lzdGVtIFYgUjMsIFN5c3RlbSBWIFI0LCBUcnU2NCBVbml4 LCBVbml4d2FyZSwgWGVuaXgsIGFuZCBtYW55CitvdGhlcnMpLiBGb3IgdGhvcm91Z2ggY292ZXJh Z2UsIHBsZWFzZSBjb25zdWx0IHRoZSBwdWJsaXNoZWQgQ1woaHlLZXJtaXQKK21hbnVhbCBhbmQg c3VwcGxlbWVudHMgKHNlZSBET0NVTUVOVEFUSU9OIGJlbG93KS4gRm9yIGZ1cnRoZXIgaW5mb3Jt YXRpb24KK2Fib3V0IENcKGh5S2VybWl0LCBLZXJtaXQgc29mdHdhcmUgZm9yIG90aGVyIHBsYXRm b3JtcywgYW5kIEtlcm1pdCBtYW51YWxzLAordmlzaXQgdGhlIEtlcm1pdCBQcm9qZWN0IHdlYnNp dGU6CisuUFAKKyAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworLlBQCitUaGlzIGlz IGEgbG9uZ2VyXChoeXRoYW5cKGh5YXZlcmFnZSBtYW51YWwgcGFnZSwgYW5kIHlldCBpdCBiYXJl bHkgc2NyYXRjaGVzIHRoZQorc3VyZmFjZS4gRG9uJ3QgYmUgZGF1bnRlZC4gQ1woaHlLZXJtaXQg aXMgYSBsYXJnZSBhbmQgY29tcGxleCBwYWNrYWdlLAorZXZvbHZpbmcgb3ZlciBkZWNhZGVzIG9m IHByYWN0aWNlIGFuZCBleHBlcmllbmNlLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4KK2l0J3MgaGFy ZCB0byBsZWFybiBvciB1c2UuIEl0cyBtb3N0IGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25zIGFyZSBl eHBsYWluZWQKK2hlcmUgd2l0aCBwb2ludGVycyB0byBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGVs c2V3aGVyZS4KKy5TSCBTWU5PUFNJUworLkIga2VybWl0IFsKKy5JIGZpbGVuYW1lCisuQiBdIFsK Ky5JIG9wdGlvbnMKKy5CIF0gWyB7PSxcLVwtLCt9CisuSSB0ZXh0CisuQiBdIF0KKy5QUAorb3I6 CisuUFAKKy5CIGtlcm1pdCAKKy5JIFVSTAorLlBQCitJZiB0aGUgZmlyc3QgY29tbWFuZFwoaHls aW5lIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIGEgZmlsZSwgaW50ZXJhY3RpdmVcKGh5bW9kZQor Y29tbWFuZHMgYXJlIGV4ZWN1dGVkIGZyb20gdGhlIGZpbGUuIFRoZSAnPScgKG9yICJcLVwtIikg YXJndW1lbnQgdGVsbHMKK0tlcm1pdCBub3QgdG8gcGFyc2UgdGhlIHJlbWFpbmRlciBvZiB0aGUg Y29tbWFuZCBsaW5lLCBidXQgdG8gbWFrZSB0aGUKK3dvcmRzIGZvbGxvd2luZyAnPScgYXZhaWxh YmxlIGFzIFxlJTEsIFxlJTIsIC4uLiBcZSU5LiBUaGUgIisiIGFyZ3VtZW50IGlzCitsaWtlICI9 IiBidXQgZm9yIHVzZSBpbiAia2VyYmFuZyBzY3JpcHRzIiAoZXhwbGFpbmVkIGJlbG93KS4gQSBz ZWNvbmQKK2NvbW1hbmRcKGh5bGluZSBmb3JtYXQgYWxsb3dzIHRoZSBvbmUgYW5kIG9ubHkgYXJn dW1lbnQgdG8gYmUgYSBUZWxuZXQsIEZUUCwKK0hUVFAsIG9yIElLU0QgVVJMLgorLlBQCitPcmRl ciBvZiBleGVjdXRpb246CisuVFAKKyAxLgorVGhlIGNvbW1hbmQgZmlsZSAoaWYgYW55KS4KKy5U UAorLm5mCisgMi4KK1RoZSBpbml0aWFsaXphdGlvbiBmaWxlLCBpZiBhbnksIHVubGVzcyBzdXBw cmVzc2VkIHdpdGggXC1ZLgorLmZpCisuVFAKKyAzLgorVGhlIGN1c3RvbWl6YXRpb24gZmlsZSAo aWYgaXQgaXMgZXhlY3V0ZWQgYnkgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUpLgorLlRQCisgNC4K K1RoZSBjb21tYW5kXChoeWxpbmUgVVJMIChpZiBhbnksIGFuZCBpZiBzbywgZXhlY3V0aW9uIHN0 b3BzIGhlcmUpLgorLlRQCisgNS4KK0NvbW1hbmRcKGh5bGluZSBvcHRpb25zIChpZiBhbnkpLgor LlRQCisgNi4KK0ludGVyYWN0aXZlIGNvbW1hbmRzLgorLlBQCitTb21lIGNvbW1hbmRcKGh5bGlu ZSBvcHRpb25zIGNhbiBjYXVzZSBhY3Rpb25zIChzdWNoIGFzIFwtcyB0byBzZW5kIGEgZmlsZSk7 CitvdGhlcnMganVzdCBzZXQgcGFyYW1ldGVycy4gSWYgYW55IGFjdGlvbiBvcHRpb25zIGFyZSBp bmNsdWRlZCBvbiB0aGUKK2NvbW1hbmQgbGluZSwgS2VybWl0IGV4aXRzIHdoZW4gZmluaXNoZWQg dW5sZXNzIGFsc28gZ2l2ZW4gdGhlIFwtUyAoInN0YXkiKQorb3B0aW9uLiBJZiBubyBhY3Rpb24g b3B0aW9ucyBhcmUgZ2l2ZW4sIG5vIGluaXRpYWxpemF0aW9uIG9yIGNvbW1hbmQgZmlsZXMKK2Nv bnRhaW5lZCBhbiBFWElUIG9yIFFVSVQgY29tbWFuZCwgYW5kIG5vIGZhdGFsIGVycm9ycyBvY2N1 cnJlZCwgS2VybWl0Citpc3N1ZXMgaXRzIHByb21wdCBhbmQgd2FpdHMgZm9yIHlvdSB0byB0eXBl IGNvbW1hbmRzLgorLklQCitCZWFyIGluIG1pbmQgdGhhdCBDXChoeUtlcm1pdCBjYW4gYmUgYnVp bHQgd2l0aCBzZWxlY3RlZCBmZWF0dXJlcworZGlzYWJsZWQsIGFuZCBhbHNvIHRoYXQgY2VydGFp biBmZWF0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwKK3BsYXRmb3Jtcy4gRm9yIGV4YW1w bGUsIENcKGh5S2VybWl0IGNhbid0IGJlIGJ1aWx0IHdpdGggVENQL0lQCitzdXBwb3J0IG9uIGEg cGxhdGZvcm0gdGhhdCBkb2VzIG5vdCBoYXZlIFRDUC9JUCBoZWFkZXIgZmlsZXMgYW5kCitsaWJy YXJpZXMgKGFuZCBldmVuIGlmIEtlcm1pdCBkb2VzIGluY2x1ZGUgVENQL0lQIHN1cHBvcnQsIGl0 CitjYW4ndCBiZSB1c2VkIHRvIG1ha2UgVENQL0lQIGNvbm5lY3Rpb25zIG9uIGEgY29tcHV0ZXIg dGhhdCBkb2VzCitub3QgaGF2ZSBhIFRDUC9JUCBzdGFjayBpbnN0YWxsZWQpLiBJZiB5b3VyIHZl cnNpb24gb2YgCitDXChoeUtlcm1pdCBsYWNrcyBhIGZlYXR1cmUgbWVudGlvbmVkIGhlcmUsIHVz ZSBpdHMgU0hPVyBGRUFUVVJFUyBjb21tYW5kIHRvCitzZWUgd2hhdCBtaWdodCBoYXZlIGJlZW4g ZXhjbHVkZWQuCisuUFAKK0NcKGh5S2VybWl0IGhhcyB0aHJlZSBraW5kcyBvZiBjb21tYW5kczog cmVndWxhciBzaW5nbGVcKGh5bGV0dGVyIGNvbW1hbmRcKGh5bGluZQorb3B0aW9ucywgZXh0ZW5k ZWRcKGh5Zm9ybWF0IGNvbW1hbmRcKGh5bGluZSBvcHRpb25zLCBhbmQgaW50ZXJhY3RpdmUgY29t bWFuZHMuCisuUFAKK0xpa2UgbW9zdCBVbml4IGNvbW1hbmRzLCBDXChoeUtlcm1pdCBjYW4gYmUg YmUgZ2l2ZW4gb3B0aW9ucyBvbiB0aGUgY29tbWFuZAorbGluZS4gQnV0IENcKGh5S2VybWl0IGFs c28gY2FuIGJlIHVzZWQgaW50ZXJhY3RpdmVseSBieSBnaXZpbmcgaXQgY29tbWFuZHMKK2NvbXBv c2VkIG9mIHdvcmRzLCB3aGljaCBhcmUgbW9yZSBpbnR1aXRpdmUgdGhhbiBjcnlwdGljIGNvbW1h bmRcKGh5bGluZQorb3B0aW9ucywgYW5kIG1vcmUgZmxleGlibGUgdG9vLiBJbiBvdGhlciB3b3Jk cywgeW91IGRvbid0IGhhdmUgdG8gdXNlCitDXChoeUtlcm1pdCdzIGNvbW1hbmRcKGh5bGluZSBv cHRpb25zLCBidXQgdGhleSBhcmUgYXZhaWxhYmxlIGlmIHlvdSB3YW50IHRvLiAoQnkKK3RoZSBz YW1lIHRva2VuLCB5b3UgZG9uJ3QgaGF2ZSB0byB1c2UgaXRzIGludGVyYWN0aXZlIGNvbW1hbmRz IGVpdGhlciBcKGh5XChoeQoreW91IGNhbiB1c2UgZWl0aGVyIG9yIGJvdGggaW4gYW55IGNvbWJp bmF0aW9uLikKKy5QUAorQ1woaHlLZXJtaXQgaXMgZ2VuZXJhbGx5IGluc3RhbGxlZCBpbiB0aGUg UEFUSCBhcyAia2VybWl0IiwgYW5kIHRoZXJlZm9yZSBpcworaW52b2tlZCBieSB0eXBpbmcgdGhl IHdvcmQgImtlcm1pdCIgKGxvd2VyY2FzZSkgYXQgdGhlIHNoZWxsIHByb21wdCwgYW5kCit0aGVu IHByZXNzaW5nIHRoZSBSZXR1cm4gb3IgRW50ZXIga2V5LiBJZiB5b3Ugd2lzaCB0byBpbmNsdWRl IGNvbW1hbmRcKGh5bGluZQorb3B0aW9ucywgcHV0IHRoZW0gYWZ0ZXIgdGhlIHdvcmQgImtlcm1p dCIgYnV0IGJlZm9yZSBwcmVzc2luZyBSZXR1cm4gb3IKK0VudGVyLCBzZXBhcmF0ZWQgYnkgc3Bh Y2VzLCBmb3IgZXhhbXBsZToKKy5QUAorICAkIGtlcm1pdCBcLXMgY2tlcm1pdC50YXIuZ3oKKy5Q UAorKCckJyBpcyB0aGUgc2hlbGwgcHJvbXB0OyAia2VybWl0IFwtcyBja2VybWl0LnRhci5neiIg aXMgd2hhdCB5b3UgdHlwZSwKK2ZvbGxvd2VkIGJ5IFJldHVybiBvciBFbnRlci4pCisuU0ggT1BU SU9OUworSGVyZSBpcyBhIGxpc3Qgb2YgQ1woaHlLZXJtaXQncyBzaW5nbGVcKGh5bGV0dGVyIGNv bW1hbmRcKGh5bGluZSBvcHRpb25zLCB3aGljaAorc3RhcnQgd2l0aCBhIHNpbmdsZSBkYXNoIChc LSksIGluIEFTQ0lJICgiYWxwaGFiZXRpY2FsIikgb3JkZXIuIEFscGhhYmV0aWMKK2Nhc2UgaXMg c2lnbmlmaWNhbnQgKFwtQSBpcyBub3QgdGhlIHNhbWUgYXMgXC1hKS4gIEFjdGlvbiBvcHRpb25z IGFyZSAKK3RhZ2dlZCAiQUNUSU9OIi4KKy5UUAorXC0wCisoZGlnaXQgemVybykgIDEwMCUgdHJh bnNwYXJlbnQgQ29ubmVjdCBzdGF0ZSBmb3IKKyJpblwoaHl0aGVcKGh5bWlkZGxlIiBvcGVyYXRp b246IDggYml0cywgbm8gcGFyaXR5LCBubworZXNjYXBlIGNoYXJhY3RlciwgZXZlcnl0aGluZyBw YXNzZXMgdGhyb3VnaC4KKy5UUAorXC04CisoZGlnaXQgZWlnaHQpICBDb25uZWN0aW9uIGlzIDhc KGh5Yml0IGNsZWFuICh0aGlzIGlzIHRoZQorZGVmYXVsdCBpbiBDXChoeUtlcm1pdCA4LjAgYW5k IGxhdGVyKS4gRXF1aXZhbGVudCB0byB0aGUgRUlHSFRCSVQKK2NvbW1hbmQsIHdoaWNoIGluIHR1 cm4gaXMgYSBzaG9ydGN1dCBmb3IgU0VUIFRFUk1JTkFMCitCWVRFU0laRSA4LCBTRVQgQ09NTUFO RCBCWVRFU0laRSA4LCBTRVQgUEFSSVRZIE5PTkUuCisuVFAKK1wtOSBhcmcKKyhkaWdpdCBuaW5l KSAgTWFrZSBhIGNvbm5lY3Rpb24gdG8gYW4gRlRQIHNlcnZlci4KK0VxdWl2YWxlbnQgdG8gdGhl IEZUUCBPUEVOIGNvbW1hbmQuCitBcmd1bWVudDogSVBcKGh5YWRkcmVzc1woaHlvclwoaHlob3N0 bmFtZVs6b3B0aW9uYWxcKGh5VENQXChoeXBvcnRdLgorTk9URTogQ1woaHlLZXJtaXQgYWxzbyBo YXMgYSBzZXBhcmF0ZSBGVFAgY29tbWFuZFwoaHlsaW5lCitwZXJzb25hbGl0eSwgd2l0aCByZWd1 bGFyIEZUUFwoaHlsaWtlIGNvbW1hbmRcKGh5bGluZQorc3ludGF4LiBNb3JlIGFib3V0IHRoaXMg YmVsb3cuCisuVFAKK1wtQQorS2VybWl0IGlzIHRvIGJlIHN0YXJ0ZWQgYXMgYW4gSW50ZXJuZXQg c2VydmljZSAoSUtTRCkKKyhvbmx5IGZyb20gaW5ldGQuY29uZikuCisuVFAKK1wtQgorS2VybWl0 IGlzIHJ1bm5pbmcgaW4gQmF0Y2ggb3IgQmFja2dyb3VuZCAobm8KK2NvbnRyb2xsaW5nIHRlcm1p bmFsKS4gVG8gYmUgdXNlZCBpbiBjYXNlIEtlcm1pdAorZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNl bnNlIGl0cyBiYWNrZ3JvdW5kIHN0YXR1cy4KK0VxdWl2YWxlbnQgdG8gdGhlIFNFVCBCQUNLR1JP VU5EIE9OIGNvbW1hbmQuCisuVFAKK1wtQyBhcmcKK0ludGVyYWN0aXZlXChoeW1vZGUgQ29tbWFu ZHMgdG8gYmUgZXhlY3V0ZWQuCitBcmd1bWVudDogQ29tbWFuZHMgc2VwYXJhdGVkIGJ5IGNvbW1h cywgbGlzdCBpbgorZG91YmxlcXVvdGVzLgorLlRQCitcLUQgYXJnCitEZWxheSBiZWZvcmUgc3Rh cnRpbmcgdG8gc2VuZCBpbiBSZW1vdGUgbW9kZS4KK0VxdWl2YWxlbnQgdG8gdGhlIFNFVCBERUxB WSBjb21tYW5kLgorQXJndW1lbnQ6IE51bWJlciBvZiBzZWNvbmRzLgorLlRQCitcLUUKK0V4aXQg YXV0b21hdGljYWxseSB3aGVuIGNvbm5lY3Rpb24gY2xvc2VzLiBFcXVpdmFsZW50Cit0byBTRVQg RVhJVCBPTlwtRElTQ09OTkVDVCBPTi4KKy5UUAorXC1GIGFyZworVXNlIGFuIG9wZW4gVENQIGNv bm5lY3Rpb24uCitBcmd1bWVudDogTnVtZXJpYyBmaWxlIGRlc2NyaXB0b3Igb2Ygb3BlbiBUQ1AK K2Nvbm5lY3Rpb24uCitBbHNvIHNlZTogXC1qLCBcLUouCisuVFAKK1wtRyBhcmcKKyhBQ1RJT04p IEdldCBmaWxlKHMpIGZyb20gc2VydmVyLCBzZW5kIGNvbnRlbnRzIHRvIHN0YW5kYXJkCitvdXRw dXQsIHdoaWNoIG5vcm1hbGx5IHdvdWxkIGJlIHBpcGVkIHRvIGFub3RoZXIKK3Byb2Nlc3MuCitB cmd1bWVudDogUmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbiwgaW4gcXVvdGVzIGlmIGl0Citjb250 YWlucyBtZXRhY2hhcmFjdGVycy4KK0Fsc28gc2VlOiBcLWcsIFwtay4KKy5UUAorXC1ICitTdXBw cmVzcyBwcm9ncmFtIHN0YXJ0dXAgSGVyYWxkIGFuZCBncmVldGluZy4KKy5UUAorXC1JCitUZWxs IEtlcm1pdCBpdCBoYXMgYSByZWxpYWJsZSBjb25uZWN0aW9uLCB0byBmb3JjZSBzdHJlYW1pbmcg dG8gYmUgdXNlZCB3aGVyZQoraXQgbm9ybWFsbHkgd291bGQgbm90IGJlLiAgRXF1aXZhbGVudCB0 byB0aGUgU0VUIFJFTElBQkxFIE9OIGNvbW1hbmQuCisuVFAKK1wtSiBhcmcKKyhBQ1RJT04pICJC ZSBsaWtlIFRlbG5ldC4iIExpa2UgXC1qIGJ1dCBpbXBsaWVzIFwtRS4gIEFyZ3VtZW50OiBJUAor aG9zdG5hbWUvYWRkcmVzcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IHNlcnZpY2UuICBOT1RFOiBD XChoeUtlcm1pdCBhbHNvIGhhcyBhCitzZXBhcmF0ZSBUZWxuZXQgY29tbWFuZFwoaHlsaW5lIHBl cnNvbmFsaXR5LCB3aXRoIHJlZ3VsYXIgVGVsbmV0XChoeWxpa2UKK2NvbW1hbmRcKGh5bGluZSBz eW50YXguIE1vcmUgYWJvdXQgdGhpcyBiZWxvdy4KKy5UUAorXC1MCitSZWN1cnNpdmUgZGlyZWN0 b3J5IGRlc2NlbnQgZm9yIGZpbGVzIGluIFwtcyBvcHRpb24uCisuVFAKK1wtTSBhcmcKK015IHVz ZXIgbmFtZSAoZm9yIHVzZSB3aXRoIFRlbG5ldCwgUmxvZ2luLCBGVFAsIGV0YykuCitFcXVpdmFs ZW50IHRvIHRoZSBTRVQgTE9HSU4gVVNFUiBjb21tYW5kLgorQXJndW1lbnQ6IFVzZXJuYW1lIHN0 cmluZy4KKy5UUAorXC1PCisoQUNUSU9OKSAoVXBwZXJjYXNlIGxldHRlciBPKSBCZSBhIHNlcnZl ciBmb3IgT25lIGNvbW1hbmQgb25seS4KK0Fsc28gc2VlOiBcLXguCisuVFAKK1wtUAorRG9uJ3Qg Y29udmVydCBmaWxlIChQYXRoKSBuYW1lcyBvZiB0cmFuc2ZlcnJlZCBmaWxlcy4KK0VxdWl2YWxl bnQgdG8gU0VUIEZJTEUgTkFNRVMgTElURVJBTC4KKy5UUAorXC1RCitRdWljayBLZXJtaXQgcHJv dG9jb2wgc2V0dGluZ3MuIEVxdWl2YWxlbnQgdG8gdGhlIEZBU1QKK2NvbW1hbmQuIFRoaXMgaXMg dGhlIGRlZmF1bHQgaW4gQ1woaHlLZXJtaXQgNy4wIGFuZCBsYXRlci4KKy5UUAorXC1SCitSZW1v dGVcKGh5b25seSAodGhpcyBqdXN0IG1ha2VzIElGIFJFTU9URSB0cnVlKS4KKy5UUAorXC1TCitT dGF5IChlbnRlciBjb21tYW5kIHBhcnNlciBhZnRlciBhY3Rpb24gb3B0aW9ucykuCisuVFAKK1wt VAorRm9yY2UgVGV4dCBtb2RlIGZvciBmaWxlIHRyYW5zZmVyOyBpbXBsaWVzIFwtVi4KK0VxdWl2 YWxlbnQgdG8gU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMLCBTRVQgRklMRSBUWVBFIFRFWFQuCisu VFAKK1wtVgorRGlzYWJsZSBhdXRvbWF0aWMgcGVyXChoeWZpbGUgdGV4dC9iaW5hcnkgc3dpdGNo aW5nLgorRXF1aXZhbGVudCB0byBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwuCisuVFAKK1wtWQor U2tpcCAoZG9uJ3QgZXhlY3V0ZSkgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUuCisuVFAKK1wtYSBh cmcKK0FzXChoeW5hbWUgZm9yIGZpbGUocykgaW4gXC1zLCBcLXIsIG9yIFwtZy4KK0FyZ3VtZW50 OiBBc1woaHluYW1lIHN0cmluZyAoYWx0ZXJuYXRpdmUgZmlsZW5hbWUpLiBXaGVuCityZWNlaXZp bmcgZmlsZXMsIHRoaXMgY2FuIGJlIGEgZGlyZWN0b3J5IG5hbWUuCisuVFAKK1wtYiBhcmcKK1Nw ZWVkIGZvciBzZXJpYWwgZGV2aWNlLiBFcXVpdmFsZW50IHRvIFNFVCBTUEVFRC4KK0FyZ3VtZW50 OiBOdW1lcmljIEJpdHMgcGVyIHNlY29uZCBmb3Igc2VyaWFsCitjb25uZWN0aW9ucy4KKy5UUAor XC1jCisoQUNUSU9OKSBFbnRlciBDb25uZWN0IHN0YXRlIGJlZm9yZSB0cmFuc2ZlcnJpbmcgZmls ZXMuCisuVFAKK1wtZAorQ3JlYXRlIGEgZGVidWcubG9nIGZpbGUgd2l0aCBkZXRhaWxlZCBkZWJ1 Z2dpbmcKK2luZm9ybWF0aW9uIChhIHNlY29uZCBcLWQgYWRkcyB0aW1lc3RhbXBzKS4gRXF1aXZh bGVudAordG8gTE9HIERFQlVHIGJ1dCB0YWtlcyBlZmZlY3Qgc29vbmVyLgorLlRQCitcLWUgYXJn CitNYXhpbXVtIGxlbmd0aCBmb3IgaW5jb21pbmcgS2VybWl0IGZpbGVcKGh5dHJhbnNmZXIKK3Bh Y2tldHMuIEVxdWl2YWxlbnQgdG8gU0VUIFJFQ0VJVkUgUEFDS0VUXC1MRU5HVEguCitBcmd1bWVu dDogTGVuZ3RoIGluIGJ5dGVzLgorLlRQCitcLWYKKyhBQ1RJT04pIFNlbmQgYSBGSU5JU0ggY29t bWFuZCB0byBhIEtlcm1pdCBzZXJ2ZXIuCisuVFAKK1wtZyBhcmcKK0dldCBmaWxlKHMpIGZyb20g YSBLZXJtaXQgc2VydmVyLgorQXJndW1lbnQ6IEZpbGUgc3BlY2lmaWNhdGlvbiBvbiBvdGhlciBj b21wdXRlciwgaW4KK3F1b3RlcyBpZiBpdCBjb250YWlucyBtZXRhY2hhcmFjdGVycy4gRXF1aXZh bGVudCB0bworR0VULiBBbHNvIHNlZTogXC1hLCBcLUcsIFwtci4KKy5UUAorXC1oCisoQUNUSU9O KSBQcmludCBIZWxwIHRleHQgZm9yIHNpbmdsZVwoaHlsZXR0ZXIgY29tbWFuZFwoaHlsaW5lIG9w dGlvbnMKKyhwaXBlIHRocnUgJ21vcmUnIHRvIHByZXZlbnQgc2Nyb2xsaW5nKS4KKy5UUAorXC1p CitGb3JjZSBiaW5hcnkgKEltYWdlKSBtb2RlIGZvciBmaWxlIHRyYW5zZmVyOyBpbXBsaWVzCitc LVYuIEVxdWl2YWxlbnQgdG8gU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFMLCBTRVQgRklMRQorVFlQ RSBCSU5BUlkuCisuVFAKK1wtaiBhcmcKK01ha2UgYSBUQ1AvSVAgY29ubmVjdGlvbi4KK0FyZ3Vt ZW50OiBJUCBob3N0IG5hbWUvYWRkcmVzcyBhbmQgb3B0aW9uYWwgc2VydmljZQorbmFtZSBvciBu dW1iZXIuIEVxdWl2YWxlbnQgdG8gdGhlIFRFTE5FVCBjb21tYW5kLgorQWxzbyBzZWU6IFwtSiwg XC1GLgorLlRQCitcLWsKKyhBQ1RJT04pIFJlY2VpdmUgZmlsZShzKSB0byBzdGFuZGFyZCBvdXRw dXQsIHdoaWNoIG5vcm1hbGx5IAord291bGQgYmUgcGlwZWQgdG8gYW5vdGhlciBwcm9jZXNzLgor QWxzbyBzZWU6IFwtciwgXC1HLgorLlRQCitcLWwgYXJnCisoTG93ZXJjYXNlIGxldHRlciBMKSBN YWtlIGEgY29ubmVjdGlvbiBvbiB0aGUgZ2l2ZW4KK3NlcmlhbCBjb21tdW5pY2F0aW9ucyBkZXZp Y2UuIEVxdWl2YWxlbnQgdG8gdGhlIFNFVAorTElORSAoU0VUIFBPUlQpIGNvbW1hbmQuCitBcmd1 bWVudDogU2VyaWFsIGRldmljZSBuYW1lLCBlLmcuIC9kZXYvdHR5UzAuCisuVFAKK1wtbSBhcmcK K01vZGVtIHR5cGUgZm9yIHVzZSB3aXRoIHRoZSBcLWwgZGV2aWNlLiBFcXVpdmFsZW50IHRvCit0 aGUgU0VUIE1PREVNIFRZUEUgY29tbWFuZC4KK0FyZ3VtZW50OiBNb2RlbSBuYW1lIGFzIGluIFNF VCBNT0RFTSBUWVBFIGNvbW1hbmQsCitlLmcuICJ1c3JvYm90aWNzIi4KKy5UUAorXC1uCisoQUNU SU9OKSBFbnRlciBDb25uZWN0IHN0YXRlIGFmdGVyIHRyYW5zZmVycmluZyBmaWxlcyAoaGlzdG9y aWNhbCkuCisuVFAKK1wtcCBhcmcKK1Bhcml0eS4gRXF1aXZhbGVudCB0byB0aGUgU0VUIFBBUklU WSBjb21tYW5kLgorQXJndW1lbnQ6IE9uZSBvZiB0aGUgZm9sbG93aW5nOiBlKHZlbiksIG8oZGQp LCBtKGFyayksCituKG9uZSksIHMocGFjZSkuCisuVFAKK1wtcQorUXVpZXQgKHN1cHByZXNzIG1v c3QgbWVzc2FnZXMpLiBFcXVpdmFsZW50IHRvIFNFVCBRVUlFVCBPTi4KKy5UUAorXC1yCisoQUNU SU9OKSBSZWNlaXZlIGZpbGUocykuIEVxdWl2YWxlbnQgdG8gdGhlIFJFQ0VJVkUgY29tbWFuZC4K K0FyZ3VtZW50OiAobm9uZSwgYnV0IHNlZSBcLWEpCisuVFAKK1wtcyBhcmcKK1NlbmQgZmlsZShz KS4KK0FyZ3VtZW50OiBPbmUgb3IgbW9yZSBsb2NhbCBmaWxlIHNwZWNpZmljYXRpb25zLgorRXF1 aXZhbGVudCB0byB0aGUgU0VORCBjb21tYW5kLgorQWxzbyBzZWU6IFwtYS4KKy5UUAorXC10Ciso SGlzdG9yaWNhbCkgWG9uIChDdHJsXC1RKSBUdXJuYXJvdW5kIGNoYXJhY3RlciBmb3IKK2hhbGZc KGh5ZHVwbGV4IGNvbm5lY3Rpb25zICh1c2VkIG9uIHNlcmlhbCBsaW5lbW9kZQorY29ubmVjdGlv bnMgdG8gb2xkIG1haW5mcmFtZXMpLiBFcXVpdmFsZW50IHRvIFNFVAorRFVQTEVYIEhBTEYsIFNF VCBIQU5EU0hBS0UgWE9OLgorLlRQCitcLXYgYXJnCitXaW5kb3cgc2l6ZSBmb3IgS2VybWl0IHBy b3RvY29sIChpZ25vcmVkIHdoZW4KK3N0cmVhbWluZykuIEVxdWl2YWxhbmV0IHRvIFNFVCBXSU5E T1dcLVNJWkUuCitBcmd1bWVudDogTnVtYmVyLCAxIHRvIDMyLgorLlRQCitcLXcKK0luY29taW5n IGZpbGVzIFdyaXRlIG92ZXIgZXhpc3RpbmcgZmlsZXMuIEVxdWl2YWxlbnQKK3RvIFNFVCBGSUxF IENPTExJU0lPTiBPVkVSV1JJVEUuCisuVFAKK1wteAorKEFDVElPTikgRW50ZXIgc2VydmVyIG1v ZGUuIEVxdWl2YWxlbnQgdG8gdGhlIFNFUlZFUiBjb21tYW5kLgorQWxzbyBzZWU6IFwtTy4KKy5U UAorXC15IGFyZworQWx0ZXJuYXRpdmUgaW5pdGlhbGl6YXRpb24gZmlsZS4KK0FyZ3VtZW50OiBG aWxlbmFtZS4KKy5UUAorXC16CitGb3JjZSBmb3JlZ3JvdW5kIGJlaGF2aW9yLiBUbyBiZSB1c2Vk IGluIGNhc2UgS2VybWl0Citkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2Vuc2UgaXRzIGZvcmVncm91 bmQgc3RhdHVzLgorRXF1aXZhbGVudCB0byB0aGUgU0VUIEJBQ0tHUk9VTkQgT0ZGIGNvbW1hbmQu CisuUFAKK0V4dGVuZGVkIGNvbW1hbmRcKGh5bGluZSBvcHRpb25zIChuZWNlc3NhcnkgYmVjYXVz ZSBzaW5nbGVcKGh5bGV0dGVyIG9uZXMgYXJlCithYm91dCB1c2VkIHVwKSBzdGFydCB3aXRoIHR3 byBkYXNoZXMgKFwtXC0pLCB3aXRoIHdvcmRzIHJhdGhlciB0aGFuIHNpbmdsZQorbGV0dGVycyBh cyBvcHRpb24gbmFtZXMuIElmIGFuIGV4dGVuZGVkIG9wdGlvbiB0YWtlcyBhbiBhcmd1bWVudCwg aXQgaXMKK3NlcGFyYXRlZCBmcm9tIHRoZSBvcHRpb24gd29yZCBieSBhIGNvbG9uICg6KS4gRXh0 ZW5kZWQgb3B0aW9ucyBpbmNsdWRlOgorCisuVFAKKyBcLVwtYmFubmVyZmlsZTpmaWxlbmFtZQor RmlsZSB0byBkaXNwbGF5IHVwb24gc3RhcnR1cCBvciBJS1NEIGxvZ2luLgorLlRQCisgXC1cLWNk ZmlsZTpmaWxlbmFtZQorRmlsZSB0byBiZSBzZW50IGZvciBkaXNwbGF5IHRvIHRoZSBjbGllbnQg d2hlbgorc2VydmVyIGNoYW5nZXMgZGlyZWN0b3J5IChmaWxlbmFtZSBpcyByZWxhdGl2ZSB0bwor dGhlIGNoYW5nZWRcKGh5dG8gZGlyZWN0b3J5KS4KKy5UUAorIFwtXC1jZG1lc3NhZ2U6e29uLG9m Zn0KK0VuYWJsZS9kaXNhYmxlIHRoZSBzZXJ2ZXIgQ0QgbWVzc2FnZSBmZWF0dXJlLgorLlRQCisg XC1cLWhlbHAKK1ByaW50cyB1c2FnZSBtZXNzYWdlIGZvciBleHRlbmRlZCBvcHRpb25zLgorLlRQ CisgXC1cLWhlbHBmaWxlOmZpbGVuYW1lCitEZXNpZ25hdGVzIGEgZmlsZSBjb250YWluaW5nIGN1 c3RvbSB0ZXh0IHRvCityZXBsYWNlIHRoZSB0b3BcKGh5bGV2ZWwgSEVMUCBjb21tYW5kLgorLlRQ CisgXC1cLW5vaW50ZXJydXB0cworRGlzYWJsZXMga2V5Ym9hcmQgaW50ZXJydXB0cy4KKy5UUAor IFwtXC1ub3Blcm1zCitEaXNhYmxlcyB0aGUgS2VybWl0IHByb3RvY29sIGZpbGUgUGVybWlzc2lv bnMKK2F0dHJpYnV0ZSwgdG8gcHJldmVudCB0cmFuc21pc3Npb24gb2YgZmlsZQorcGVybWlzc2lv bnMgKHByb3RlY3Rpb24pIGZyb20gc2VuZGVyIHRvIHJlY2VpdmVyLgorLlRQCisgXC1cLXZlcnNp b24KKyhBQ1RJT04pIENcKGh5S2VybWl0IHByaW50cyBpdHMgdmVyc2lvbiBudW1iZXIuCisuUFAK K1BsdXMgc2V2ZXJhbCBvdGhlciBJS1NEXChoeU9ubHkgb3B0aW9ucyBkZXNjcmliZWQgYXQ6Cisu UFAKKyAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lrc2QuaHRtbAorLlBQCitTZWUg dGhlIGZpbGVcKGh5dHJhbnNmZXIgc2VjdGlvbiBmb3IgZXhhbXBsZXMgb2YgY29tbWFuZFwoaHls aW5lIGludm9jYXRpb24uCisuU0ggQ09NTUFORCBMQU5HVUFHRQorQ1woaHlLZXJtaXQncyBpbnRl cmFjdGl2ZSBjb21tYW5kIGxhbmd1YWdlIGlzIHRoZSBzdWJqZWN0IG9mIGEgNjIyXChoeXBhZ2Ug Ym9vaworYW5kIGFub3RoZXIgc2V2ZXJhbCBodW5kcmVkIHBhZ2VzIG9mIHVwZGF0ZXMsIGZhciB0 b28gbXVjaCBmb3IgYSBtYW51YWwKK3BhZ2UuIEJ1dCBpdCdzIG5vdCBoYXJkIHRvIGdldCBzdGFy dGVkLiBBdCB0aGUgc2hlbGwgcHJvbXB0LCBqdXN0IHR5cGUKKyJrZXJtaXQiIHRvIGdldCBDXCho eUtlcm1pdCdzIGludGVyYWN0aXZlIGNvbW1hbmQgcHJvbXB0OgorLlBQCisubmYKKyAgJCBrZXJt aXQKKyAgKC9jdXJyZW50L2RpcmVjdG9yeSkgQ1wtS2VybWl0PgorLmZpCisuUFAKK0JlZ2luIGJ5 IHR5cGluZyAiaGVscCIgKGFuZCB0aGVuIHByZXNzIHRoZSBSZXR1cm4gb3IgRW50ZXIga2V5KSBm b3IgYQordG9wXChoeWxldmVsIG92ZXJ2aWV3LCByZWFkIGl0LCBhbmQgZ28gZnJvbSB0aGVyZS4g WW91ciBzZWNvbmQgY29tbWFuZCBzaG91bGQKK3Byb2JhYmx5IGJlICJpbnRybyIgKGludHJvZHVj dGlvbikuIE5vdGUgdGhlIHByb21wdCBzaG93cyB5b3VyIGN1cnJlbnQKK2RpcmVjdG9yeSAodW5s ZXNzIHlvdSB0ZWxsIEtlcm1pdCB0byBwcm9tcHQgeW91IHdpdGggc29tZXRoaW5nIGVsc2UpLgor LlBQCitJbnRlcmFjdGl2ZSBjb21tYW5kcyBhcmUgY29tcG9zZWQgbWFpbmx5IG9mIHJlZ3VsYXIg RW5nbGlzaCB3b3JkcywgdXN1YWxseQoraW4gdGhlIGZvcm0gb2YgaW1wZXJhdGl2ZSBzZW50ZW5j ZXMsIHN1Y2ggYXM6CisuUFAKKyAgc2VuZCBvb2ZhLnR4dAorLlBQCit3aGljaCB0ZWxscyBLZXJt aXQgdG8gc2VuZCAodHJhbnNmZXIpIHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgb29mYS50eHQsIG9y OgorLlBQCisgIHNldCB0cmFuc2ZlciBtb2RlIGF1dG9tYXRpYworLlBQCit3aGljaCBzZXRzIEtl cm1pdCdzICJ0cmFuc2ZlciBtb2RlIiB0byAiYXV0b21hdGljIiAod2hhdGV2ZXIgdGhhdCBtZWFu cykuCisuUFAKK1doaWxlIHR5cGluZyBjb21tYW5kcywgeW91IGNhbiBhYmJyZXZpYXRlLCBhc2sg Zm9yIGhlbHAgKGJ5IHByZXNzaW5nIHRoZQorIj8iIGtleSBhbnl3aGVyZSBpbiBhIGNvbW1hbmQp LCBjb21wbGV0ZSBrZXl3b3JkcyBvciBmaWxlbmFtZXMgKHdpdGggdGhlCitUYWIgb3IgRXNjIGtl eSksIGFuZCBlZGl0IHlvdXIgdHlwaW5nIHdpdGggQmFja3NwYWNlIG9yIERlbGV0ZSwgQ3RybFwt VywKK0N0cmxcLVUsIGV0Yy4gWW91IGNhbiBhbHNvIHJlY2FsbCBwcmV2aW91cyBjb21tYW5kcywg c2F2ZSB5b3VyIGNvbW1hbmQKK2hpc3RvcnksIGFuZCB3aG8ga25vd3Mgd2hhdCBlbHNlLiBHaXZl IHRoZSBJTlRSTyBjb21tYW5kIGZvciBkZXRhaWxzLgorLlBQCitDXChoeUtlcm1pdCBoYXMgaHVu ZHJlZHMgb2YgY29tbWFuZHMsIGFuZCB0aGV5IGNhbiBiZSBpc3N1ZWQgaW4gaW5maW5pdGUKK3Zh cmlldHkgYW5kIGNvbWJpbmF0aW9ucywgaW5jbHVkaW5nIGNvbW1hbmRzIGZvcjoKKy5uZgorLlBQ CitcKGJ1CU1ha2luZyBjb25uZWN0aW9ucyAoU0VUIExJTkUsIERJQUwsIFRFTE5FVCwgU1NILCBG VFAsIC4uLikKKy5icgorXChidQlCcmVha2luZyBjb25uZWN0aW9ucyAoSEFOR1VQLCBDTE9TRSkK Ky5icgorXChidQlUcmFuc2ZlcnJpbmcgZmlsZXMgKFNFTkQsIEdFVCwgUkVDRUlWRSwgTU9WRSwg UkVTRU5ELCAuLi4pCisuYnIKK1woYnUJRXN0YWJsaXNoaW5nIHByZWZlcmVuY2VzIChTRVQpCisu YnIKK1woYnUJRGlzcGxheWluZyBwcmVmZXJlbmNlcyAoU0hPVykKKy5icgorXChidQlNYW5hZ2lu ZyBsb2NhbCBmaWxlcyAoQ0QsIERFTEVURSwgTUtESVIsIERJUiwgUkVOQU1FLCBUWVBFLCAuLi4p CisuYnIKK1woYnUJTWFuYWdpbmcgcmVtb3RlIGZpbGVzIChSQ0QsIFJERUwsIFJNS0RJUiwgUkRJ UiwgLi4uKQorLmJyCitcKGJ1CVVzaW5nIGxvY2FsIGZpbGVzIChGT1BFTiwgRkNMT1NFLCBGUkVB RCwgRldSSVRFKQorLmJyCitcKGJ1CVByb2dyYW1taW5nIChUQUtFLCBERUZJTkUsIElGLCBGT1Is IFdISUxFLCBTV0lUQ0gsIERFQ0xBUkUsIC4uLikKKy5icgorXChidQlJbnRlcmFjdGluZyB3aXRo IHRoZSB1c2VyIChFQ0hPLCBBU0ssIC4uLikKKy5icgorXChidQlJbnRlcmFjdGluZyB3aXRoIGEg cmVtb3RlIGNvbXB1dGVyIChJTlBVVCwgT1VUUFVULCAuLi4pCisuYnIKK1woYnUJSW50ZXJhY3Rp bmcgd2l0aCBsb2NhbCBwcm9ncmFtcyAoUlVOLCBFWEVDLCBQVFksIC4uLikKKy5icgorXChidQlM b2dnaW5nIHRoaW5ncyAoTE9HIFNFU1NJT04sIExPRyBQQUNLRVRTLCBMT0cgREVCVUcsIC4uLikK Ky5QUAorLmZpCitBbmQgb2YgY291cnNlIFFVSVQgb3IgRVhJVCB0byBnZXQgb3V0IGFuZCBIRUxQ IHRvIGdldCBoZWxwLCBhbmQgZm9yCitwcm9ncmFtbWVyczogbG9vcHMsIGRlY2lzaW9uIG1ha2lu ZywgdmFyaWFibGVzLCBhcnJheXMsIGFzc29jaWF0aXZlIGFycmF5cywKK2ludGVnZXIgYW5kIGZs b2F0aW5nIHBvaW50IGFyaXRobWV0aWMsIG1hY3JvcywgYnVpbHRcKGh5aW4gYW5kIHVzZXJcKGh5 ZGVmaW5lZAorZnVuY3Rpb25zLCBzdHJpbmcgbWFuaXB1bGF0aW9uLCBwYXR0ZXJuIG1hdGNoaW5n LCBibG9jayBzdHJ1Y3R1cmUsIHNjb3BpbmcsCityZWN1cnNpb24sIGFuZCBhbGwgdGhlIHJlc3Qu IFRvIGdldCBhIGxpc3Qgb2YgYWxsIENcKGh5S2VybWl0J3MgY29tbWFuZHMsIHR5cGUKK2EgcXVl c3Rpb24gbWFyayAoPykgYXQgdGhlIHByb21wdC4gVG8gZ2V0IGEgZGVzY3JpcHRpb24gb2YgYW55 IGNvbW1hbmQsCit0eXBlIEhFTFAgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQs IGZvciBleGFtcGxlOgorLlBQCisgIGhlbHAgc2VuZAorLlBQCitUaGUgY29tbWFuZCBpbnRlcnJ1 cHRpb24gY2hhcmFjdGVyIGlzIEN0cmxcLUMgKGhvbGQgZG93biB0aGUgQ3RybCBrZXkgYW5kCitw cmVzcyB0aGUgQyBrZXkpLgorLlBQCitUaGUgY29tbWFuZCBsYW5ndWFnZSAiZXNjYXBlIGNoYXJh Y3RlciIsIHVzZWQgdG8gaW50cm9kdWNlIHZhcmlhYmxlIG5hbWVzLAorZnVuY3Rpb24gaW52b2Nh dGlvbnMsIGFuZCBzbyBvbiwgaXMgYmFja3NsYXNoIChcKS4gSWYgeW91IG5lZWQgdG8gaW5jbHVk ZSBhCitsaXRlcmFsIGJhY2tzbGFzaCBpbiBhIGNvbW1hbmQsIHR5cGUgdHdvIG9mIHRoZW0sIGUu Zy46CisuUFAKKyAgZ2V0IGM6XGVrOTVcZWs5NWN1c3RvbS5pbmkKKy5TUyBDb21tYW5kIEZpbGVz LCBNYWNyb3MsIGFuZCBTY3JpcHRzCitBIGZpbGUgY29udGFpbmluZyBLZXJtaXQgY29tbWFuZHMg aXMgY2FsbGVkIGEgS2VybWl0IGNvbW1hbmQgZmlsZSBvciBLZXJtaXQKK3NjcmlwdC4gSXQgY2Fu IGJlIGV4ZWN1dGVkIHdpdGggS2VybWl0J3MgVEFLRSBjb21tYW5kOgorLlBQCisgICgvY3VycmVu dC9kaXIpIENcLUtlcm1pdD4gdGFrZSBjb21tYW5kZmlsZQorLlBQCisod2hlcmUgImNvbW1hbmRm aWxlIiBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmaWxlKS4gUGxlYXNlIGRvbid0IHBpcGUg YQorY29tbWFuZCBmaWxlIGludG8gS2VybWl0J3Mgc3RhbmRhcmQgaW5wdXQgKHdoaWNoIG1pZ2h0 IG9yIG1pZ2h0IG5vdCB3b3JrKTsKK2lmIHlvdSBoYXZlIEtlcm1pdCBjb21tYW5kcyBpbiBhIGZp bGUsIHRlbGwgS2VybWl0IHRvIFRBS0UgdGhlIGZpbGUuCisuUFAKK0luIFVuaXggb25seSwgYSBL ZXJtaXQgY29tbWFuZCBmaWxlIGNhbiBhbHNvIGJlIGV4ZWN1dGVkIGRpcmVjdGx5IGJ5CitpbmNs dWRpbmcgYSAia2VyYmFuZyIgbGluZSBhcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZToKKy5Q UAorICAjIS91c3IvbG9jYWwvYmluL2tlcm1pdCArCisuUFAKK1RoYXQgaXMsIGEgdG9wIGxpbmUg dGhhdCBzdGFydHMgd2l0aCAiIyEiLCBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0aGUgZnVsbAor cGF0aCBvZiB0aGUgS2VybWl0IGV4ZWN1dGFibGUsIGFuZCB0aGVuLCBpZiB0aGUgS2VybWl0IHNj cmlwdCBpcyB0byBiZQorZ2l2ZW4gYXJndW1lbnRzIG9uIHRoZSBjb21tYW5kIGxpbmUsIGEgc3Bh Y2UgYW5kIGEgcGx1cyBzaWduLiBUaGUgc2NyaXB0CitmaWxlIG11c3QgYWxzbyBoYXZlIGV4ZWN1 dGUgcGVybWlzc2lvbjoKKy5QUAorICBjaG1vZCAreCBjb21tYW5kZmlsZQorLlBQCitFeGNlcHQg Zm9yIHRoZSAiICsiIHBhcnQsIHRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB5b3Ugd291bGQg ZG8gZm9yIGEKK3NoZWxsIHNjcmlwdCwgYSBQZXJsIHNjcmlwdCwgZXRjLiBIZXJlJ3MgYSBzaW1w bGUgYnV0IHVzZWxlc3MgZXhhbXBsZQorc2NyaXB0IHRoYXQgcmVndXJnaXRhdGVzIGl0cyBhcmd1 bWVudHMgKHVwIHRvIHRocmVlIG9mIHRoZW0pOgorLlBQCisgICMhL3Vzci9sb2NhbC9iaW4va2Vy bWl0ICsKKyAgaWYgZGVmaW5lZCBcZSUxIGVjaG8gIkFyZ3VtZW50IDE6IFxlJTEiCisgIGlmIGRl ZmluZWQgXGUlMiBlY2hvICJBcmd1bWVudCAyOiBcZSUyIgorICBpZiBkZWZpbmVkIFxlJTMgZWNo byAiQXJndW1lbnQgMzogXGUlMyIKKyAgaWYgZGVmaW5lZCBcZSU0IGVjaG8gImV0Yy4uLiIKKyAg ZXhpdAorLlBQCitJZiB0aGlzIGZpbGUgaXMgc3RvcmVkIGluIHlvdXIgY3VycmVudCBkaXJlY3Rv cnkgYXMgImNvbW1hbmRmaWxlIiwgdGhlbjoKKy5QUAorICAuL2NvbW1hbmRmaWxlIG9uZSB0d28g dGhyZWUgZm91ciBmaXZlCisuUFAKK3ByaW50czoKKy5QUAorICBBcmd1bWVudCAxOiBvbmUKKyAg QXJndW1lbnQgMjogdHdvCisgIEFyZ3VtZW50IDM6IHRocmVlCisgIGV0Yy4uLgorLlBQCitUaGlz IGlsbHVzdHJhdGVzIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2YgYSBzdGFuZGFsb25lIEtlcm1pdCBz Y3JpcHQ6IHRoZQorImtlcmJhbmcgbGluZSIsIHRoZW4gc29tZSBjb21tYW5kcy4gSXQgc2hvdWxk IGVuZCB3aXRoICJleGl0IiB1bmxlc3MgeW91Cit3YW50IHRoZSBLZXJtaXQgcHJvbXB0IHRvIGFw cGVhciB3aGVuIGl0IGlzIGZpbmlzaGVkLiBcZSUxIGlzIHRoZSBmaXJzdAorYXJndW1lbnQsIFxl JTIgdGhlIHNlY29uZCwgYW5kIHNvIG9uLgorLlBQCitZb3UgY2FuIGFsc28gY3JlYXRlIHlvdXIg b3duIGNvbW1hbmRzIGJ5IGRlZmluaW5nIG5hbWVkIG1hY3JvcyBjb21wb3NlZCBvZgorb3RoZXIg S2VybWl0IGNvbW1hbmRzIChvciBtYWNyb3MpLiBGb3IgZXhhbXBsZToKKy5QUAorLm5mCisgIGRl ZmluZSBteWRlbGV0ZSB7CisgICAgICBsb2NhbCB0cmFzaAorICAgICAgYXNzaWduIHRyYXNoIFxl dihob21lKXRyYXNoY2FuLworICAgICAgaWYgbm90IGRlZmluZWQgXGUlMSBlbmQgMSAiRGVsZXRl IHdoYXQ/IgorICAgICAgaWYgd2lsZCBcZSUxIHsKKyAgICAgICAgICBlbmQgMSAiRGVsZXRpbmcg bXVsdGlwbGUgZmlsZXMgaXMgdG9vIHNjYXJ5IgorICAgICAgfQorICAgICAgaWYgbm90IGV4aXN0 IFxlJTEgZW5kIDEgIkkgY2FuJ3QgZmluZCBcZSUxIgorICAgICAgaWYgbm90IGRpcmVjdG9yeSBc ZW0odHJhc2gpIHsKKyAgICAgICAgICBta2RpciBcZW0odHJhc2gpCisgICAgICAgICAgaWYgZmFp bCBlbmQgMSAiTm8gdHJhc2ggY2FuIgorICAgICAgfQorICAgICAgcmVuYW1lIC9saXN0IFxlJTEg XGVtKHRyYXNoKQorICB9CisgIGRlZmluZSBteXVuZGVsZXRlIHsKKyAgICAgIGxvY2FsIHRyYXNo CisgICAgICBhc3NpZ24gdHJhc2ggXGV2KGhvbWUpdHJhc2hjYW4vCisgICAgICBpZiBub3QgZGVm aW5lZCBcZSUxIGVuZCAxICJVbmRlbGV0ZSB3aGF0PyIKKyAgICAgIGlmIHdpbGQgXGUlMSB7Cisg ICAgICAgICAgZW5kIDEgIlVuZGVsZXRpbmcgbXVsdGlwbGUgZmlsZXMgaXMgdG9vIGhhcmQiCisg ICAgICB9CisgICAgICBpZiBub3QgZGlyZWN0b3J5IFxlbSh0cmFzaCkgZW5kIDEgIk5vIHRyYXNo IGNhbiIKKyAgICAgIGlmIG5vdCBleGlzdCBcZW0odHJhc2gpXGUlMSB7CisgICAgICAgICAgZW5k IDEgIkkgY2FuJ3QgZmluZCBcZSUxIGluIHRyYXNoIGNhbiIKKyAgICAgIH0KKyAgICAgIHJlbmFt ZSAvbGlzdCBcZW0odHJhc2gpXGUlMSAuCisgIH0KKy5QUAorLmZpCitUaGVzZSBzYW1wbGUgbWFj cm9zIGFyZSBub3QgZXhhY3RseSBwcm9kdWN0aW9uIHF1YWxpdHkgKHRoZXkgZG9uJ3QgaGFuZGxl CitmaWxlbmFtZXMgdGhhdCBpbmNsdWRlIHBhdGggc2VnbWVudHMsIHRoZXkgZG9uJ3QgaGFuZGxl IG11bHRpcGxlIGZpbGVzLAorZXRjKSwgYnV0IHlvdSBnZXQgdGhlIGlkZWE6IHlvdSBjYW4gcGFz cyBhcmd1bWVudHMgdG8gbWFjcm9zLCBhbmQgdGhleSBjYW4KK2NoZWNrIHRoZW0gYW5kIG1ha2Ug b3RoZXIga2luZHMgb2YgZGVjaXNpb25zLiBJZiB5b3UgcHV0IHRoZSBhYm92ZSBsaW5lcworaW50 byB5b3VyIGluaXRpYWxpemF0aW9uIG9yIGN1c3RvbWl6YXRpb24gZmlsZSAoZXhwbGFpbmVkIGJl bG93KSwgeW91J2xsCitoYXZlIE1ZREVMRVRFIGFuZCBNWVVOREVMRVRFIGNvbW1hbmRzIGF2YWls YWJsZSBldmVyeSB0aW1lIHlvdSBzdGFydAorS2VybWl0LCBhdCBsZWFzdCBhcyBsb25nIGFzIHlv dSBkb24ndCBzdXBwcmVzcyBleGVjdXRpb24gb2YgdGhlCitpbml0aWFsaXphdGlvbiBmaWxlLiAo RXhlcmNpc2UgZm9yIHRoZSByZWFkZXI6IE1ha2UgdGhlc2UgbWFjcm9zIGdlbmVyYWxseQordXNl ZnVsOiByZW1vdmUgbGltaXRhdGlvbnMsIGFkZCB0cmFzaGNhbiBkaXNwbGF5LCBicm93c2luZywg ZW1wdHlpbmcsIGV0Yy4pCisuUFAKK0tlcmJhbmcgc2NyaXB0cyBleGVjdXRlIHdpdGhvdXQgdGhl IGluaXRpYWxpemF0aW9uIGZpbGUuIFRoaXMgdG8ga2VlcCB0aGVtCitwb3J0YWJsZSBhbmQgYWxz byB0byBtYWtlIHRoZW0gc3RhcnQgZmFzdGVyLiBJZiB5b3Ugd2FudCB0byB3cml0ZSBLZXJiYW5n CitzY3JpcHRzIHRoYXQgZGVwZW5kIG9uIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlLCBpbmNsdWRl IHRoZSBjb21tYW5kCisuUFAKKyAgdGFrZSBcZXYoaG9tZSkua2VybXJjCisuUFAKK2F0IHRoZSBk ZXNpcmVkIHNwb3QgaW4gdGhlIHNjcmlwdC4gQnkgdGhlIHdheSwgXGV2KHh4eCkgaXMgYSBidWls dFwoaHlpbgordmFyaWFibGUgKHh4eCBpcyB0aGUgdmFyaWFibGUgbmFtZSwgImhvbWUiIGluIHRo aXMgY2FzZSkuIFRvIHNlZSB3aGF0CitidWlsdFwoaHlpbiB2YXJpYWJsZXMgYXJlIGF2YWlsYWJs ZSwgdHlwZSAic2hvdyB2YXJpYWJsZXMiIGF0IHRoZSBDXChoeUtlcm1pdAorcHJvbXB0LiBUbyBz ZWUgd2hhdCBlbHNlIHlvdSBjYW4gc2hvdywgdHlwZSAic2hvdyA/Ii4gXGVtKHh4eCkgaXMgYSB1 c2VyCitkZWZpbmVkIHZhcmlhYmxlIChzdHJpY3RseSBzcGVha2luZywgaXQgaXMgYSBtYWNybyB1 c2VkIGFzIGEgdmFyaWFibGUpLgorLlNTIENvbW1hbmQgTGlzdAorQ1woaHlLZXJtaXQgaGFzIG1v cmUgdGhhbiAyMDAgdG9wXChoeWxldmVsIGNvbW1hbmRzLCBhbmQgc29tZSBvZiB0aGVzZSwgc3Vj aCBhcworU0VULCBicmFuY2ggb2ZmIGludG8gaHVuZHJlZHMgb2Ygc3ViY29tbWFuZHMgb2YgdGhl aXIgb3duLCBzbyBpdCdzIG5vdAorcHJhY3RpY2FsIHRvIGRlc2NyaWJlIHRoZW0gYWxsIGhlcmUu IEluc3RlYWQsIGhlcmUncyBhIGNvbmNpc2UgbGlzdCBvZiB0aGUKK21vc3QgY29tbW9ubHkgdXNl ZCB0b3BcKGh5bGV2ZWwgY29tbWFuZHMsIGdyb3VwZWQgYnkgY2F0ZWdvcnkuIFRvIGxlYXJuIGFi b3V0CitlYWNoIGNvbW1hbmQsIHR5cGUgImhlbHAiIGZvbGxvd2VkIGJ5IHRoZSBjb21tYW5kIG5h bWUsIGUuZy4gImhlbHAgc2V0Ii4KK1Rlcm1zIHN1Y2ggYXMgQ29tbWFuZCBzdGF0ZSBhbmQgQ29u bmVjdCBzdGF0ZSBhcmUgZXhwbGFpbmVkIGluIHN1YnNlcXVlbnQKK3NlY3Rpb25zLgorLlBQCitP cHRpb25hbCBmaWVsZHMgYXJlIHNob3duIGluIFsgYnJhY2tldHMgXS4gICJmaWxlbmFtZSIgbWVh bnMgdGhlCituYW1lIG9mIGEgc2luZ2xlIGZpbGUuIGZpbGVzcGVjIG1lYW5zIGEgZmlsZSBzcGVj aWZpY2F0aW9uIHRoYXQgaXMgYWxsb3dlZAordG8gY29udGFpbiB3aWxkY2FyZCBjaGFyYWN0ZXJz IGxpa2UgJyonIHRvIG1hdGNoIGdyb3VwcyBvZiBmaWxlcy4gb3B0aW9ucworYXJlIChvcHRpb25h bCkgc3dpdGNoZXMgbGlrZSAvUEFHRSwgL05PUEFHRSwgL1FVSUVULCBldGMsIGxpc3RlZCBpbiB0 aGUKK0hFTFAgdGV4dCBmb3IgZWFjaCBjb21tYW5kLiBFeGFtcGxlOgorLlBQCisubmYKKyAgc2Vu ZCAvcmVjdXJzaXZlIC9sYXJnZXI6MTAwMDAgL2FmdGVyOlwtMXdlZWsgL2V4Y2VwdDoqLnR4dCAq CisuZmkKKy5QUAord2hpY2ggY2FuIGJlIHJlYWQgYXMgInNlbmQgYWxsIHRoZSBmaWxlcyBpbiB0 aGlzIGRpcmVjdG9yeSBhbmQgYWxsIHRoZSBvbmVzCit1bmRlcm5lYXRoIGl0IHRoYXQgYXJlIGxh cmdlciB0aGFuIDEwMDAwIGJ5dGVzLCBubyBtb3JlIHRoYW4gb25lIHdlZWsgb2xkLAorYW5kIHdo b3NlIG5hbWVzIGRvbid0IGVuZCB3aXRoICIudHh0Ii4KKy5TUworQmFzaWMgQ29tbWFuZHMKKy5S UworLlRQCitIRUxQCitSZXF1ZXN0cyB0b3BcKGh5bGV2ZWwgaGVscC4KKy5UUAorSEVMUCBjb21t YW5kCitSZXF1ZXN0cyBoZWxwIGFib3V0IHRoZSBnaXZlbiBjb21tYW5kLgorLlRQCitJTlRST0RV Q1RJT04KK1JlcXVlc3RzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIENcKGh5S2VybWl0LgorLlRQ CitMSUNFTlNFCitEaXNwbGF5cyB0aGUgQ1woaHlLZXJtaXQgc29mdHdhcmUgY29weXJpZ2h0IGFu ZCBsaWNlbnNlLgorLlRQCitWRVJTSU9OCitEaXNwbGF5cyBDXChoeUtlcm1pdCdzIHZlcnNpb24g bnVtYmVyLgorLlRQCitFWElUIFsgbnVtYmVyIF0KK0V4aXRzIGZyb20gS2VybWl0IHdpdGggdGhl IGdpdmVuCitzdGF0dXMgY29kZS4gU3lub255bXM6IFFVSVQsIEUsIFEuCisuVFAKK1RBS0UgZmls ZW5hbWUgWyBwYXJhbWV0ZXJzLi4uIF0KK0V4ZWN1dGVzIGNvbW1hbmRzIGZyb20gdGhlIGdpdmVu CisuVFAKK0xPRyBpdGVtIFsgZmlsZW5hbWUgXQorS2VlcHMgYSBsb2cgb2YgdGhlIGdpdmVuIGl0 ZW0gaW4gdGhlIGdpdmVuIGZpbGUuCisuVFAKK1sgRE8gXSBtYWNybyBbIHBhcmFtZXRlcnMuLi4g XQorRXhlY3V0ZXMgY29tbWFuZHMgZnJvbSB0aGUgZ2l2ZW4gbWFjcm8uCisuVFAKK1NFVCBwYXJh bWV0ZXIgdmFsdWUKK1NldHMgdGhlIGdpdmVuIHBhcmFtZXRlciB0byB0aGUgZ2l2ZW4gdmFsdWUu CisuVFAKK1NIT1cgY2F0ZWdvcnkKK1Nob3dzIHNldHRpbmdzIGluIGEgZ2l2ZW4gY2F0ZWdvcnku CisuVFAKK1NUQVRVUworVGVsbHMgd2hldGhlciBwcmV2aW91cyBjb21tYW5kIHN1Y2NlZWRlZCBv ciBmYWlsZWQuCisuVFAKK0RBVEUgWyBkYXRlXChoeWFuZC9vclwoaHl0aW1lIF0KK1Nob3dzIGN1 cnJlbnQgZGF0ZVwoaHl0aW1lIG9yIGludGVycHJldHMgZ2l2ZW4gZGF0ZVwoaHl0aW1lLgorLlRQ CitSVU4gWyBleHRlcm5cKGh5Y29tbWFuZCBbIHBhcmFtZXRlcnMuLi4gXSAgICAgICAgICAgICAg ICAgCitSdW5zIHRoZSBnaXZlbiBleHRlcm5hbCBjb21tYW5kLiBTeW5vbnltOiAhLgorLlRQCitF WEVDIFsgZXh0ZXJuXChoeWNvbW1hbmQgWyBwYXJhbXMuLi4gXQorS2VybWl0IG92ZXJsYXlzIGl0 c2VsZiB3aXRoIHRoZSBnaXZlbiBjb21tYW5kLgorLlRQCitTVVNQRU5ECitTdG9wcyBLZXJtaXQg YW5kIHB1dHMgaXQgaW4gdGhlIGJhY2tncm91bmQuIFN5bm9ueW06IFouCisuUkUKKy5TUworTG9j YWwgRmlsZSBNYW5hZ2VtZW50CisuUlMKKy5UUAorVFlQRSBbIG9wdGlvbnMgXSBmaWxlbmFtZQor RGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBmaWxlLgorLlRQCitNT1JFIFsgb3B0 aW9ucyBdIGZpbGVuYW1lICAgICAKK0VxdWl2YWxlbnQgdG8gVFlQRSAvUEFHRSAocGF1c2UgYWZ0 ZXIgZWFjaCBzY3JlZW5mdWwpLgorLlRQCitDQVQgWyBvcHRpb25zIF0gZmlsZW5hbWUgICAgICAK K0VxdWl2YWxlbnQgdG8gVFlQRSAvTk9QQUdFLgorLlRQCitIRUFEIFsgb3B0aW9ucyBdIGZpbGVu YW1lICAgICAKK0Rpc3BsYXlzIHRoZSBmaXJzdCBmZXcgbGluZXMgb2YgYSBnaXZlbiBmaWxlLgor LlRQCitUQUlMIFsgb3B0aW9ucyBdIGZpbGVuYW1lICAgICAKK0Rpc3BsYXlzIHRoZSBsYXN0IGZl dyBsaW5lcyBvZiBhIGdpdmVuIGZpbGUuCisuVFAKK0dSRVAgWyBvcHRpb25zIF0gcGF0dGVybiBm aWxlc3BlYworRGlzcGxheXMgbGluZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoCit0aGUgcGF0dGVy bi4gU3lub255bTogRklORC4KKy5UUAorRElSRUNUT1JZIFsgb3B0aW9ucyBdIFtmaWxlc3BlYyBd CitMaXN0cyBmaWxlcyAoYnVpbHRcKGh5aW4sIG1hbnkgb3B0aW9ucykuCisuVFAKK0xTIFsgb3B0 aW9ucyBdIFsgZmlsZXNwZWMgXSAgIAorTGlzdHMgZmlsZXMgKHJ1bnMgZXh0ZXJuYWwgImxzIiBj b21tYW5kKS4KKy5UUAorREVMRVRFIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWMgXQorRGVsZXRlcyBm aWxlcy4gU3lub255bTogUk0uCisuVFAKK1BVUkdFIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWMgXQor UmVtb3ZlcyBiYWNrdXAgKCoufm5+KSBmaWxlcy4KKy5UUAorQ09QWSBbIG9wdGlvbnMgXSBbIGZp bGVzcGVjcy4uLiBdCitDb3BpZXMgZmlsZXMuIFN5bm9ueW06IENQLgorLlRQCitSRU5BTUUgWyBv cHRpb25zIF0gWyBmaWxlc3BlY3MuLi4gXQorUmVuYW1lcyBmaWxlcy4gU3lub255bTogTVYuCisu VFAKK0NITU9EIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWNzLi4uIF0KK0NoYW5nZXMgcGVybWlzc2lv bnMgb2YgZmlsZXMuCisuVFAKK1RSQU5TTEFURSBmaWxlbmFtZSBjaGFyc2V0cyBbIGZpbGVuYW1l IF0KK0NvbnZlcnRzIGZpbGUncyBjaGFyYWN0ZXIgc2V0LiBTeW5vbnltOiBYTEFURS4KKy5UUAor Q0QKK0NoYW5nZXMgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0byB5b3VyIGhvbWUgZGlyZWN0b3J5 LgorLlRQCitDRCBkaXJlY3RvcnkKK0NoYW5nZXMgeW91ciB3b3JraW5nIGRpcmVjdG9yeSB0byB0 aGUgb25lIGdpdmVuLgorLlRQCitDRFVQCitDaGFuZ2VzIHlvdXIgd29ya2luZyBkaXJlY3Rvcnkg b25lIGxldmVsIHVwLgorLlRQCitQV0QKK0Rpc3BsYXlzIHlvdXIgd29ya2luZyBkaXJlY3Rvcnku CisuVFAKK0JBQ0sKK1JldHVybnMgdG8geW91ciBwcmV2aW91cyB3b3JraW5nIGRpcmVjdG9yeS4K Ky5UUAorTUtESVIgWyBkaXJlY3RvcnkgXQorQ3JlYXRlcyBhIGRpcmVjdG9yeS4KKy5UUAorUk1E SVIgWyBkaXJlY3RvcnkgXQorUmVtb3ZlcyBhIGRpcmVjdG9yeS4KKy5SRQorLlNTCitNYWtpbmcg Q29ubmVjdGlvbnMKKy5SUworLlRQCitTRVQgTElORSBbIG9wdGlvbnMgXSBkZXZpY2VuYW1lICAg ICAgICAgICAgICAgICAgICAgIAorT3BlbnMgdGhlIG5hbWVkIHNlcmlhbCBwb3J0LiBTeW5vbnlt OiBTRVQgUE9SVC4KKy5UUAorT1BFTiBMSU5FIFsgb3B0aW9ucyBdIGRldmljZW5hbWUKK1NhbWUg YXMgU0VUIExJTkUuIFN5bm9ueW06IE9QRU4gUE9SVC4KKy5UUAorU0VUIE1PREVNIFRZUEUgWyBu YW1lIF0KK1RlbGxzIEtlcm1pdCB3aGF0IGtpbmQgb2YgbW9kZW0gaXMgb24gdGhlIHBvcnQuCisu VFAKK0RJQUwgWyBudW1iZXIgXQorVGVsbHMgS2VybWl0IHRvIGRpYWwgdGhlIGdpdmVuIHBob25l IG51bWJlciB3aXRoIHRoZSBtb2RlbS4KKy5UUAorUkVESUFMCitSZWRpYWxzIHRoZSBtb3N0IHJl Y2VudGx5IGRpYWxlZCBwaG9uZSBudW1iZXIuCisuVFAKK0FOU1dFUgorV2FpdHMgZm9yIGFuZCBh bnN3ZXJzIGFuIGluY29taW5nIGNhbGwgb24gdGhlIG1vZGVtLgorLlRQCitBVVRIRU5USUNBVEUg WyBwYXJhbWV0ZXJzLi4uIF0KK1BlcmZvcm1zIHNlY3VyZSBhdXRoZW50aWNhdGlvbiBvbiBhIFRD UC9JUCBjb25uZWN0aW9uLgorLlRQCitTRVQgTkVUV09SSyBUWVBFIHsgVENQL0lQLCBYLjI1LCAu Li4gfQorU2VsZWN0cyBuZXR3b3JrIHR5cGUgZm9yIHN1YnNlcXVlbnQgU0VUIEhPU1QgY29tbWFu ZHMuCisuVFAKK1NFVCBIT1NUIFsgb3B0aW9ucyBdIGhvc3QgWyBwb3J0IF0gICAgICAgICAgICAg ICAgICAgICAgICAgIAorT3BlbnMgYSBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gdGhlIGdpdmVuIGhv c3QgYW5kIHBvcnQuCisuVFAKK1NFVCBIT1NUICogcG9ydAorV2FpdHMgZm9yIGFuIGluY29taW5n IFRDUC9JUCBjb25uZWN0aW9uIG9uIHRoZSBnaXZlbiBwb3J0LgorLlRQCitURUxORVQgWyBvcHRp b25zIF0gaG9zdAorT3BlbnMgYSBUZWxuZXQgY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQgZW50 ZXJzIENvbm5lY3Qgc3RhdGUuCisuVFAKK1JMT0dJTiBbIG9wdGlvbnMgXSBob3N0CitPcGVucyBh biBSbG9naW4gY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQgZW50ZXJzIENvbm5lY3Qgc3RhdGUu CisuVFAKK0lLU0QgWyBvcHRpb25zIF0gaG9zdAorT3BlbnMgYSBjb25uZWN0aW9uIHRvIGFuIElu dGVybmV0IEtlcm1pdCBTZXJ2aWNlLgorLlRQCitTU0ggWyBvcHRpb25zIF0gaG9zdAorT3BlbnMg YW4gU1NIIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIGVudGVycyBDb25uZWN0IHN0YXRlLgor LlRQCitGVFAgT1BFTiBob3N0IFsgb3B0aW9ucyBdCitPcGVucyBhbiBGVFAgY29ubmVjdGlvbiB0 byB0aGUgaG9zdC4KKy5UUAorSFRUUCBbIG9wdGlvbnMgXSBPUEVOIGhvc3QKK09wZW5zIGFuIEhU VFAgY29ubmVjdGlvbiB0byB0aGUgaG9zdC4KKy5UUAorUFRZIGV4dGVybmFsXChoeWNvbW1hbmQK K1J1bnMgdGhlIGNvbW1hbmQgb24gYSBwc2V1ZG90ZXJtaW5hbCBhcyBpZiBpdCB3ZXJlIGEgY29u bmVjdGlvbi4KKy5UUAorUElQRSBleHRlcm5hbFwoaHljb21tYW5kCitSdW5zIHRoZSBjb21tYW5k IHRocm91Z2ggYSBwaXBlIGFzIGlmIGl0IHdlcmUgYSBjb25uZWN0aW9uLgorLlJFCisuU1MKK1Vz aW5nIENvbm5lY3Rpb25zCisuUlMKKy5UUAorQ09OTkVDVCBbIG9wdGlvbnMgXQorRW50ZXJzIENv bm5lY3QgKHRlcm1pbmFsKSBzdGF0ZS4gIFN5bm9ueW06IEMuCisuVFAKK1JFRElSRUNUIGNvbW1h bmQKK1JlZGlyZWN0cyB0aGUgZ2l2ZW4gZXh0ZXJuYWwgY29tbWFuZCBvdmVyIHRoZSBjb25uZWN0 aW9uLgorLlRQCitURUxPUFQgY29tbWFuZAorU2VuZHMgYSBUZWxuZXQgcHJvdG9jb2wgY29tbWFu ZCAoVGVsbmV0IGNvbm5lY3Rpb25zIG9ubHkpLgorLlRQCitDdHJsXC1cZUMKKyJFc2NhcGVzIGJh Y2siIGZyb20gQ29ubmVjdCBzdGF0ZSB0byBDb21tYW5kIHN0YXRlLgorLlRQCitDdHJsXC1cZUIK KyhJbiBDb25uZWN0IHN0YXRlKSBTZW5kcyBhIEJSRUFLIHNpZ25hbCAoc2VyaWFsIG9yIFRlbG5l dCkuCisuVFAKK0N0cmxcLVxlIQorKEluIENvbm5lY3Qgc3RhdGUpIEVudGVycyBpbmZlcmlvciBz aGVsbDsgImV4aXQiIHRvIHJldHVybi4KKy5UUAorQ3RybFwtXGU/CisoSW4gQ29ubmVjdCBzdGF0 ZSkgU2hvd3MgYSBtZW51IG9mIG90aGVyIGVzY2FwZVwoaHlsZXZlbCBvcHRpb25zLgorLlRQCitD dHJsXC1cZUN0cmxcLVxlCisoSW4gQ29ubmVjdCBzdGF0ZSkgVHlwZSB0d28KK0N0cmxcLUJhY2tz bGFzaGVzIHRvIHNlbmQgb25lIG9mIHRoZW0uCisuVFAKK1NFVCBFU0NBUEUgWyBjaGFyYWN0ZXIg XQorQ2hhbmdlcyBLZXJtaXQncyBDb25uZWN0XChoeXN0YXRlIGVzY2FwZSBjaGFyYWN0ZXIuCisu UkUKKy5TUworQ2xvc2luZyBDb25uZWN0aW9ucworLlJTCisuVFAKK0hBTkdVUAorSGFuZ3MgdXAg dGhlIGN1cnJlbnRseSBvcGVuCitzZXJpYWxcKGh5cG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpb24u CisuVFAKK0NMT1NFCitDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuCitzZXJpYWxcKGh5cG9ydCBv ciBuZXR3b3JrIGNvbm5lY3Rpb24uCisuVFAKK1NFVCBMSU5FICh3aXRoIG5vIGRldmljZW5hbWUp CitDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuCitzZXJpYWxcKGh5cG9ydCBvciBuZXR3b3JrIGNv bm5lY3Rpb24uCisuVFAKK1NFVCBIT1NUICh3aXRoIG5vIGhvc3RuYW1lKQorQ2xvc2VzIHRoZSBj dXJyZW50bHkgb3BlbiBzZXJpYWxcKGh5cG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpb24uCisuVFAK K0ZUUCBDTE9TRQorQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBGVFAgY29ubmVjdGlvbi4KKy5U UAorSFRUUCBDTE9TRQorQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBIVFRQIGNvbm5lY3Rpb24u CisuVFAKK0VYSVQgCitBbHNvIGNsb3NlcyBhbGwgY29ubmVjdGlvbnMuIFN5bm9ueW06IFFVSVQu CisuVFAKK1NFVCBFWElUIFdBUk5JTkcgT0ZGCitTdXBwcmVzc2VzIHdhcm5pbmcgYWJvdXQgb3Bl biBjb25uZWN0aW9ucyBvbiBleGl0IG9yIGNsb3NlLgorLlJFCisuU1MKK0ZpbGUgVHJhbnNmZXIK Ky5SUworLlRQCitTRU5EIFsgb3B0aW9ucyBdIGZpbGVuYW1lIFsgYXNcKGh5bmFtZSBdCitTZW5k cyB0aGUgZ2l2ZW4gZmlsZS4gU3lub255bTogUy4KKy5UUAorU0VORCBbIG9wdGlvbnMgXSBmaWxl c3BlYworU2VuZHMgYWxsIGZpbGVzIHRoYXQgbWF0Y2guCisuVFAKK1JFU0VORCBbIG9wdGlvbnMg XSBmaWxlc3BlYworUmVzdW1lcyBhbiBpbnRlcnJ1cHRlZCBTRU5EIGZyb20gdGhlIHBvaW50IG9m IGZhaWx1cmUuCisuVFAKK1JFQ0VJVkUgWyBvcHRpb25zIF0gWyBhc1woaHluYW1lIF0gICAgICAg ICAgICAgICAgICAgIAorV2FpdHMgcGFzc2l2ZWx5IGZvciBmaWxlcyB0byBhcnJpdmUuIFN5bm9u eW06IFIuCisuVFAKK0xPRyBUUkFOU0FDVElPTlMgWyBmaWxlbmFtZSBdCitLZWVwcyBhIHJlY29y ZCBvZiBmaWxlIHRyYW5zZmVycy4KKy5UUAorRkFTVAorVXNlIGZhc3QgZmlsZVwoaHl0cmFuc2Zl ciBzZXR0aW5ncyAoZGVmYXVsdCkuCisuVFAKK0NBVVRJT1VTCitVc2UgY2F1dGlvdXMgYW5kIGxl c3MgZmFzdCBmaWxlXChoeXRyYW5zZmVyIHNldHRpbmdzLgorLlRQCitST0JVU1QKK1VzZSB1bHRy YVwoaHljb25zZXJ2YXRpdmUgYW5kIHNsb3cgZmlsZVwoaHl0cmFuc2ZlciBzZXR0aW5ncy4KKy5U UAorU1RBVElTVElDUyBbIG9wdGlvbnMgXSAKK0dpdmVzIHN0YXRpc3RpY3MgYWJvdXQgdGhlIG1v c3QgcmVjZW50IGZpbGUgdHJhbnNmZXIuCisuVFAKK1dIRVJFCitBZnRlciB0cmFuc2ZlcjogIldo ZXJlIGRpZCBteSBmaWxlcyBnbz8iLgorLlRQCitUUkFOU01JVCBbIG9wdGlvbnMgXSBbb2ZpbGVu YW1lIF0KK1NlbmRzIGZpbGUgd2l0aG91dCBwcm90b2NvbC4gU3lub255bTogWE1JVC4KKy5UUAor TE9HIFNFU1NJT04gWyBmaWxlbmFtZSBdCitDYXB0dXJlcyByZW1vdGUgdGV4dCBvciBmaWxlcyB3 aXRob3V0IHByb3RvY29sLgorLlRQCitTRVQgUFJPVE9DT0wgWyBuYW1lLi4uIF0KK1RlbGxzIEtl cm1pdCB0byB1c2UgYW4gZXh0ZXJuYWwgZmlsZVwoaHl0cmFuc2ZlciBwcm90b2NvbC4KKy5UUAor RlRQIHsgUFVULCBNUFVULCBHRVQsIE1HRVQsIC4uLiB9CitGVFAgY2xpZW50IGNvbW1hbmRzLgor LlRQCitIVFRQIHsgUFVULCBHRVQsIEhFQUQsIFBPU1QsIC4uLiB9CitIVFRQIGNsaWVudCBjb21t YW5kcy4KKy5SRQorLlNTCitLZXJtaXQgU2VydmVyCisuUlMKKy5UUAorRU5BQkxFLCBESVNBQkxF CitDb250cm9scyB3aGljaCBzZXJ2ZXIgZmVhdHVyZXMgY2FuIGJlIHVzZWQgYnkgY2xpZW50cy4K Ky5UUAorU0VUIFNFUlZFUgorU2V0cyBwYXJhbWV0ZXJzIHByaW9yIHRvIGVudGVyaW5nIFNlcnZl ciBzdGF0ZS4KKy5UUAorU0VSVkVSCitFbnRlcnMgU2VydmVyIHN0YXRlLgorLlJFCisuU1MKK0Ns aWVudCBvZiBLZXJtaXQgb3IgRlRQIFNlcnZlcgorLlJTCisuVFAKK1sgUkVNT1RFIF0gTE9HSU4g WyB1c2VyIHBhc3N3b3JkIF0gICAgICAgICAKK0xvZ3MgaW4gdG8gYSBLZXJtaXQgc2VydmVyIG9y IElLU0QgdGhhdCByZXF1aXJlcyBpdC4KKy5UUAorWyBSRU1PVEUgXSBMT0dPVVQKK0xvZ3Mgb3V0 IGZyb20gYSBLZXJtaXQgc2VydmVyIG9yIElLU0QuCisuVFAKK1NFTkQgWyBvcHRpb25zIF0gZmls ZW5hbWUgWyBhc1woaHluYW1lIF0gICAgICAgICAgICAgICAgICAgCitTZW5kcyB0aGUgZ2l2ZW4g ZmlsZSB0byB0aGUgc2VydmVyLiBTeW5vbnltczogUywgUFVULgorLlRQCitTRU5EIFsgb3B0aW9u cyBdIGZpbGVzcGVjCitTZW5kcyBhbGwgZmlsZXMgdGhhdCBtYXRjaC4KKy5UUAorUkVTRU5EIFsg b3B0aW9ucyBdIGZpbGVzcGVjCitSZXN1bWVzIGFuIGludGVycnVwdGVkIFNFTkQgZnJvbSB0aGUg cG9pbnQgb2YgZmFpbHVyZS4KKy5UUAorR0VUIFsgb3B0aW9ucyBdIHJlbW90ZVwoaHlmaWxlc3Bl YworQXNrcyB0aGUgc2VydmVyIHRvIHNlbmQgdGhlIGdpdmVuIGZpbGVzLiBTeW5vbnltOiBHLgor LlRQCitSRUdFVCBbIG9wdGlvbnMgXSByZW1vdGVcKGh5ZmlsZXNwZWMKK1Jlc3VtZXMgYW4gaW50 ZXJydXB0ZWQgR0VUIGZyb20gdGhlIHBvaW50IG9mIGZhaWx1cmUuCisuVFAKK1JFTU9URSBDRCBb IGRpcmVjdG9yeSBdCitBc2tzIHNlcnZlciB0byBjaGFuZ2UgaXRzIHdvcmtpbmcKK2RpcmVjdG9y eS4gU3lub255bTogUkNELgorLlRQCitSRU1PVEUgUFdEIFsgZGlyZWN0b3J5IF0KK0Fza3Mgc2Vy dmVyIHRvIGRpc3BsYXkgaXRzIHdvcmtpbmcgZGlyZWN0b3J5LiBTeW5vbnltOiBSUFdELgorLlRQ CitSRU1PVEUgRElSRUNUT1JZIFsgZmlsZXNwZWMuLi4gXQorQXNrcyBzZXJ2ZXIgdG8gc2VuZCBh IGRpcmVjdG9yeSBsaXN0aW5nLiBTeW5vbnltOiBSRElSLgorLlRQCitSRU1PVEUgREVMRVRFIFsg ZmlsZXNwZWMuLi4gXQorQXNrcyBzZXJ2ZXIgdG8gZGVsZXRlIGZpbGVzLiBTeW5vbnltOiBSREVM LgorLlRQCitSRU1PVEUgWyBjb21tYW5kLi4uIF0KKyhNYW55IG90aGVyIGNvbW1hbmRzOiAicmVt b3RlID8iIGZvciBhIGxpc3QpLgorLlRQCitNQUlMIFsgb3B0aW9ucyBdIGZpbGVzcGVjCitTZW5k cyBmaWxlKHMpIHRvIGJlIGRlbGl2ZXJlZCBhcyBlXChoeW1haWwgKEtlcm1pdCBvbmx5KS4KKy5U UAorRklOSVNICitBc2tzIHRoZSBzZXJ2ZXIgdG8gZXhpdCBzZXJ2ZXIgc3RhdGUgKEtlcm1pdCBv bmx5KS4KKy5UUAorQllFCitBc2tzIHRoZSBzZXJ2ZXIgdG8gbG9nIG91dCBhbmQgY2xvc2UgdGhl IGNvbm5lY3Rpb24uCisuUkUKKy5TUworU2NyaXB0IFByb2dyYW1taW5nCisuUFAKKy5SUworREVG SU5FLCBERUNMQVJFLCBVTkRFRklORSwgVU5ERUNMQVJFLCBBU1NJR04sIEVWQUxVQVRFLCBTRVhQ UkVTU0lPTiwKK0FSUkFZLCBTT1JULCBJTlBVVCwgT1VUUFVULCBJRiwgRk9SLCBXSElMRSwgU1dJ VENILCBHT1RPLCBFQ0hPLCBBU0ssCitHRVRDLCBHRVRPSywgQVNTRVJULCBXQUlULCBTTEVFUCwg Rk9QRU4sIEZSRUFELCBGV1JJVEUsIEZDTE9TRSwgU1RPUCwKK0VORCwgUkVUVVJOLCBMRUFSTiwg U0hJRlQsIFRSQUNFLCBWT0lELCBJTkNSRU1FTlQsIERFQ1JFTUVOVCwgLi4uIEZvcgordGhlc2Ug YW5kIG1hbnkgbW9yZSB5b3UnbGwgbmVlZCB0byBjb25zdWx0IHRoZSBtYW51YWwgYW5kIHN1cHBs ZW1lbnRzLAorYW5kL29yIHZpc2l0IHRoZSBLZXJtaXQgU2NyaXB0IExpYnJhcnksIHdoaWNoIGFs c28gaW5jbHVkZXMgYSBicmllZgordHV0b3JpYWwuIEhpbnQ6IEhFTFAgTEVBUk4gdG8gZmluZCBv dXQgaG93IHRvIGdldCBLZXJtaXQgdG8gd3JpdGUKK3NpbXBsZSBzY3JpcHRzIGZvciB5b3UuCisu UkUKKy5QUAorTWFueSBvZiBLZXJtaXQncyBjb21tYW5kcyBoYXZlIHN5bm9ueW1zLCB2YXJpYW50 cywgcmVsYXRpdmVzLCBhbmQgc28gb24uCitGb3IgZXhhbXBsZSwgTVNFTkQgaXMgYSB2ZXJzaW9u IG9mIFNFTkQgdGhhdCBhY2NlcHRzIGEgbGlzdCBvZiBmaWxlCitzcGVjaWZpY2F0aW9ucyB0byBi ZSBzZW50LCByYXRoZXIgdGhhbiBqdXN0IG9uZSBmaWxlIHNwZWNpZmljYXRpb24sIGFuZAorTVBV VCBpcyBhIHN5bm9ueW0gb2YgTVNFTkQuIE1PVkUgbWVhbnMgdG8gU0VORCBhbmQgdGhlbiBERUxF VEUgdGhlIHNvdXJjZQorZmlsZSBpZiBzdWNjZXNzZnVsLiBNTU9WRSBpcyBsaWtlIE1PVkUsIGJ1 dCBhY2NlcHRzIGEgbGlzdCBvZiBmaWxlc3BlY3MsCithbmQgc28gb24uIFRoZXNlIGFyZSBkZXNj cmliZWQgaW4gdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbi4KKy5QUAorVXNlIHF1ZXN0aW9uIG1hcmsg dG8gZmVlbCB5b3VyIHdheSB0aHJvdWdoIGFuIHVuZmFtaWxpYXIgY29tbWFuZCwgYXMgaW4KK3Ro aXMgZXhhbXBsZToKKy5QUAorLm5mCisgIENcLUtlcm1pdD4gcmVtb3RlID8gT25lIG9mIHRoZSBm b2xsb3dpbmc6CisgICBhc3NpZ24gICAgIGRpcmVjdG9yeSAga2VybWl0ICAgICBwcmludCAgICAg IHJtZGlyCisgICBjZCAgICAgICAgIGV4aXQgICAgICAgbG9naW4gICAgICBwd2QgICAgICAgIHNl dAorICAgY29weSAgICAgICBoZWxwICAgICAgIGxvZ291dCAgICAgcXVlcnkgICAgICBzcGFjZQor ICAgZGVsZXRlICAgICBob3N0ICAgICAgIG1rZGlyICAgICAgcmVuYW1lICAgICB0eXBlCisgIENc LUtlcm1pdD4gcmVtb3RlIHNldCA/IE9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgYXR0cmlidXRl cyAgIGZpbGUgICAgICAgICByZXRyeSAgICAgICAgdHJhbnNmZXIKKyAgIGJsb2NrXC1jaGVjayAg cmVjZWl2ZSAgICAgIHNlcnZlciAgICAgICB3aW5kb3cKKyAgQ1wtS2VybWl0PiByZW1vdGUgc2V0 IGZpbGUgPyBPbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgIGNoYXJhY3Rlclwtc2V0ICBpbmNvbXBs ZXRlICAgICByZWNvcmRcLWxlbmd0aAorICAgY29sbGlzaW9uICAgICAgbmFtZXMgICAgICAgICAg dHlwZQorICBDXC1LZXJtaXQ+IHJlbW90ZSBzZXQgZmlsZSBuYW1lcyA/IE9uZSBvZiB0aGUgZm9s bG93aW5nOgorICAgY29udmVydGVkICBsaXRlcmFsCisgIENcLUtlcm1pdD4gcmVtb3RlIHNldCBm aWxlIG5hbWVzIGxpdGVyYWwKKyAgQ1wtS2VybWl0PgorLlBQCisuZmkKK1RoaXMgaXMgY2FsbGVk IG1lbnUgb24gZGVtYW5kOiB5b3UgZ2V0IGEgbWVudSB3aGVuIHlvdSB3YW50IG9uZSwgYnV0IG1l bnVzCithcmUgbm90IGZvcmNlZCBvbiB5b3UgZXZlbiB3aGVuIGtub3cgd2hhdCB5b3UncmUgZG9p bmcuIE5vdGUgdGhhdCB5b3UgY2FuCithbHNvIGFiYnJldmlhdGUgbW9zdCBrZXl3b3JkcywgYW5k IHlvdSBjYW4gY29tcGxldGUgdGhlbSB3aXRoIHRoZSBUYWIgb3IKK0VzYyBrZXkuIEFsc28gbm90 ZSB0aGF0ID8gd29ya3MgZm9yIGZpbGVuYW1lcyB0b28sIGFuZCB0aGF0IHlvdSBjYW4gdXNlIGl0 CitpbiB0aGUgbWlkZGxlIG9mIGEga2V5d29yZCBvciBmaWxlbmFtZSwgbm90IGp1c3QgYXQgdGhl IGJlZ2lubmluZy4gRm9yCitleGFtcGxlLCAic2VuZCB4PyIgbGlzdHMgYWxsIHRoZSBmaWxlcyBp biB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hvc2UgbmFtZXMKK3N0YXJ0IHdpdGggJ3gnLgorLlNI IElOSVRJQUxJWkFUSU9OIEZJTEUKK0luIGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIENcKGh5 S2VybWl0IGV4ZWN1dGVzIGNvbW1hbmRzIGZyb20gYSBmaWxlIAorY2FsbGVkIC5rZXJtcmMgaW4g eW91ciBob21lIGRpcmVjdG9yeSB3aGVuIGl0IHN0YXJ0cywgdW5sZXNzIGl0IGlzIGdpdmVuIHRo ZQorXC1ZIG9yIFwteSBjb21tYW5kXChoeWxpbmUgb3B0aW9uLiBDdXN0b20gY29uZmlndXJhdGlv bnMgbWlnaHQgc3Vic3RpdHV0ZSBhIHNoYXJlZAorc3lzdGVtXChoeXdpZGUgaW5pdGlhbGl6YXRp b24gZmlsZS4gVGhlIFNIT1cgRklMRSBjb21tYW5kIHRlbGxzIHdoYXQKK2luaXRpYWxpemF0aW9u IGZpbGUsIGlmIGFueSwgd2FzIHVzZWQuIFRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBmaWxl CisiY2hhaW5zIiB0byBhbiBpbmRpdmlkdWFsIGN1c3RvbWl6YXRpb24gZmlsZSwgLm15a2VybWMs IGluIHRoZSBob21lIGRpcmVjdG9yeSwKK2luIHdoaWNoIGVhY2ggdXNlciBjYW4gZXN0YWJsaXNo IGhlci9oaXMgb3duIHByZWZlcmVuY2VzLCBkZWZpbmUgbWFjcm9zLCBhbmQKK3NvIG9uLgorLlBQ CitTaW5jZSBleGVjdXRpb24gb2YgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKGF0IGxlYXN0IHRo ZSBzdGFuZGFyZCBvbmUpCittYWtlcyBDXChoeUtlcm1pdCB0YWtlIGxvbmdlciB0byBzdGFydCwg aXQgbWlnaHQgYmUgYmV0dGVyIG5vdCB0byBoYXZlIGFuCitpbml0aWFsaXphdGlvbiBmaWxlLCBl c3BlY2lhbGx5IG5vdyB0aGF0IEtlcm1pdCdzIGRlZmF1bHQgc3RhcnR1cAorY29uZmlndXJhdGlv biBpcyB3ZWxsIGF0dHVuZWQgdG8gbW9kZXJuIGNvbXB1dGluZyBhbmQgbmV0d29ya2luZyBcKGh5 XChoeSBpbgorb3RoZXIgd29yZHMsIHlvdSBubyBsb25nZXIgaGF2ZSBkbyBhbnl0aGluZyBzcGVj aWFsIHRvIG1ha2UgS2VybWl0Cit0cmFuc2ZlcnMgZ28gZmFzdC4gU28gaW5zdGVhZCBvZiBoYXZp bmcgYW4gaW5pdGlhbGl6YXRpb24gZmlsZSB0aGF0IGlzCitleGVjdXRlZCBldmVyeSB0aW1lIEtl cm1pdCBzdGFydHMsIHlvdSBtaWdodCBjb25zaWRlciBtYWtpbmcgb25lIG9yIG1vcmUKK2tlcmJh bmcgc2NyaXB0cyAod2l0aCBuYW1lcyBvdGhlciB0aGF0IC5rZXJtcmMpIHRoYXQgZG8gTk9UIGlu Y2x1ZGUgYW4KKyJleGl0IiBjb21tYW5kLCBhbmQgaW52b2tlIHRob3NlIHdoZW4geW91IG5lZWQg dGhlIHNldHRpbmdzLCBtYWNybworZGVmaW5pdGlvbnMsIGFuZC9vciBzY3JpcHRlZCBhY3Rpb25z IHRoZXkgY29udGFpbiwgYW5kIGludm9rZSBDXChoeUtlcm1pdAorZGlyZWN0bHkgd2hlbiB5b3Ug ZG9uJ3QuCisuUFAKK1RvIHB1dCBpdCBhbm90aGVyIHdheS4uLiBXZSBzdGlsbCBkaXN0cmlidXRl IHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbgorZmlsZSBzaW5jZSBpdCdzIGZlYXR1cmVkIGlu IHRoZSBtYW51YWwgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzCitpbXBvcnRhbnQgdG8g dXMuIEJ1dCB0aGVyZSdzIG5vIGhhcm0gaW4gbm90IHVzaW5nIGl0IGlmIHlvdSBkb24ndCBuZWVk IHRoZQorc3R1ZmYgdGhhdCdzIGluIGl0IChzZXJ2aWNlcyBkaXJlY3RvcnksIGRpYWxpbmcgZGly ZWN0b3J5LCBuZXR3b3JrCitkaXJlY3RvcnksIGFuZCBhc3NvY2lhdGVkIG1hY3JvIGRlZmluaXRp b25zKS4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZXJlCithcmUgc2V0dGluZ3Mgb3IgbWFjcm9z IHlvdSB3YW50IGluIGVmZmVjdCBFVkVSWSB0aW1lIHlvdSB1c2UgS2VybWl0LCB0aGUKK2luaXRp YWxpemF0aW9uIGZpbGUgKG9yIHRoZSBjdXN0b21pemF0aW9uIGZpbGUgaXQgY2hhaW5zIHRvKSBp cyB0aGUgcGxhY2UKK3RvIHB1dCB0aGVtLCBiZWNhdXNlIHRoYXQncyB0aGUgb25seSBwbGFjZSBL ZXJtaXQgbG9va3MgZm9yIHRoZW0KK2F1dG9tYXRpY2FsbHkgZWFjaCB0aW1lIHlvdSBzdGFydCBp dC4KKy5TSCBNT0RFUyBPRiBPUEVSQVRJT04KK0tlcm1pdCBpcyBzYWlkIHRvIGJlIGluIExvY2Fs IG1vZGUgaWYgaXQgaGFzIG1hZGUgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIKK2NvbXB1dGVyLCBl LmcuIGJ5IGRpYWxpbmcgaXQgb3IgZXN0YWJsaXNoaW5nIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8g aXQuIFRoZQorb3RoZXIgY29tcHV0ZXIgaXMgcmVtb3RlLCBzbyBpZiB5b3Ugc3RhcnQgYW5vdGhl ciBjb3B5IG9mIEtlcm1pdCBvbiB0aGUKK3JlbW90ZSBjb21wdXRlciwgaXQgaXMgc2FpZCB0byBi ZSBpbiBSZW1vdGUgbW9kZSAoYXMgbG9uZyBhcyBpdCBoYXMgbm90CittYWRlIGFueSBjb25uZWN0 aW9ucyBvZiBpdHMgb3duKS4gVGhlIGxvY2FsIEtlcm1pdCBjb21tdW5pY2F0ZXMgb3ZlciB0aGUK K2NvbW11bmljYXRpb25zIGRldmljZSBvciBuZXR3b3JrIGNvbm5lY3Rpb24sIGFjdGluZyBhcyBh IGNvbmR1aXQgYmV0d2VlbgordGhlIHRoZSByZW1vdGUgY29tcHV0ZXIgYW5kIHlvdXIga2V5Ym9h cmQgYW5kIHNjcmVlbi4gVGhlIHJlbW90ZSBLZXJtaXQgaXMKK3RoZSBmaWxlXChoeXRyYW5zZmVy IHBhcnRuZXIgdG8gdGhlIGxvY2FsIEtlcm1pdCBhbmQgY29tbXVuaWNhdGVzIG9ubHkgdGhyb3Vn aAoraXRzIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQuCisuUFAKK0F0IGFueSBtb21lbnQsIGEg S2VybWl0IHByb2dyYW0gY2FuIGJlIGluIGFueSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlcy4gSXQn cworaW1wb3J0YW50IHRvIGtub3cgd2hhdCB0aGV5IGFyZSBhbmQgaG93IHRvIGNoYW5nZSBmcm9t IG9uZSB0byB0aGUgb3RoZXIuCisuVFAKK0NvbW1hbmQgc3RhdGUKK0luIHRoaXMgc3RhdGUsIEtl cm1pdCByZWFkcyBjb21tYW5kcyBmcm9tOgorLnNwCitcKGJ1CVlvdXIga2V5Ym9hcmQ7IG9yOgor LmJyCitcKGJ1CUEgZmlsZSwgb3I6CisuYnIKK1woYnUJQSBtYWNybyBkZWZpbml0aW9uLgorLnNw CitZb3UgY2FuIGV4aXQgZnJvbSBDb21tYW5kIHN0YXRlIGJhY2sgdG8gVW5peCB3aXRoIHRoZSBF WElUIG9yIFFVSVQKK2NvbW1hbmQgKHNhbWUgdGhpbmcpLiBZb3UgY2FuIGVudGVyIENvbm5lY3Qg c3RhdGUgd2l0aCBhbnkgb2YgdmFyaW91cworY29tbWFuZHMgKENPTk5FQ1QsIERJQUwsIFRFTE5F VCwgZXRjKS4gWW91IGNhbiBlbnRlciBmaWxlIHRyYW5zZmVyCitzdGF0ZSB3aXRoIGNvbW1hbmRz IGxpa2UgU0VORCwgUkVDRUlWRSwgYW5kIEdFVC4gWW91IGNhbiBlbnRlciBTZXJ2ZXIKK3N0YXRl IHdpdGggdGhlIFNFUlZFUiBjb21tYW5kLiBUaGUgVEFLRSBjb21tYW5kIHRlbGxzIEtlcm1pdCB0 byByZWFkCithbmQgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGEgZmlsZS4gVGhlIChwZXJoYXBzIGlt cGxpZWQpIERPIGNvbW1hbmQKK3RlbGxzIEtlcm1pdCB0byByZWFkIGFuZCBleGVjdXRlIGNvbW1h bmRzIGZyb20gYSBtYWNybyBkZWZpbml0aW9uLgorV2hpbGUgaW4gQ29tbWFuZCBzdGF0ZSwgeW91 IGNhbiBpbnRlcnJ1cHQgYW55IGNvbW1hbmQsIG1hY3JvLCBvcgorY29tbWFuZCBmaWxlIGJ5IHR5 cGluZyBDdHJsXC1DIChob2xkIGRvd24gdGhlIEN0cmwga2V5IGFuZCBwcmVzcyB0aGUgQwora2V5 KTsgdGhpcyBub3JtYWxseSBicmluZ3MgeW91IGJhY2sgdG8gdGhlIHByb21wdC4KKy5UUAorU2hl bGwgc3RhdGUKK1lvdSBjYW4gaW52b2tlIGFuIGluZmVyaW9yIHNoZWxsIG9yIGV4dGVybmFsIGNv bW1hbmQgZnJvbSB0aGUgS2VybWl0Citjb21tYW5kIHByb21wdCBieSB1c2luZyB0aGUgUFVTSCwg UlVOICghKSwgRURJVCwgb3IgQlJPV1NFIGNvbW1hbmQuCitXaGlsZSB0aGUgaW5mZXJpb3Igc2hl bGwgb3IgY29tbWFuZCBpcyBhY3RpdmUsIEtlcm1pdCBpcyBzdXNwZW5kZWQgYW5kCitkb2VzIG5v dGhpbmcuIFJldHVybiB0byBLZXJtaXQgQ29tbWFuZCBzdGF0ZSBieSBleGl0aW5nIGZyb20gdGhl CitpbmZlcmlvciBzaGVsbCBvciBhcHBsaWNhdGlvbi4KKy5UUAorQ29ubmVjdCBzdGF0ZQorSW4g dGhpcyBzdGF0ZSwgd2hpY2ggY2FuIGJlIGVudGVyZWQgb25seSB3aGVuIGluIExvY2FsIG1vZGUg KGkuZS4gd2hlbgorS2VybWl0IGhhcyBtYWRlIGEgY29ubmVjdGlvbiB0byBhbm90aGVyIGNvbXB1 dGVyKSwgS2VybWl0IGlzIGFjdGluZyBhcworYSB0ZXJtaW5hbCB0byB0aGUgcmVtb3RlIGNvbXB1 dGVyLiBZb3VyIGtleXN0cm9rZXMgYXJlIHNlbnQgdG8gdGhlCityZW1vdGUgY29tcHV0ZXIgYW5k IGNoYXJhY3RlcnMgdGhhdCBhcnJpdmUgb3ZlciB0aGUgY29tbXVuaWNhdGlvbgorY29ubmVjdGlv biBhcmUgZGlzcGxheWVkIG9uIHlvdXIgc2NyZWVuLiBUaGlzIHN0YXRlIGlzIGVudGVyZWQgd2hl bgoreW91IGdpdmUgYSBDT05ORUNULCBESUFMLCBURUxORVQsIFJMT0dJTiwgb3IgSUtTRCBjb21t YW5kLiBZb3UgY2FuCityZXR1cm4gdG8gY29tbWFuZCBzdGF0ZSBieSBsb2dnaW5nIG91dCBvZiB0 aGUgcmVtb3RlIGNvbXB1dGVyLCBvciBieQordHlwaW5nOgorLnNwCisgIEN0cmxcLVxlYworLnNw CitUaGF0IGlzOiBIb2xkIGRvd24gdGhlIEN0cmwga2V5IGFuZCBwcmVzcyB0aGUgYmFja3NsYXNo IGtleSwgdGhlbiBsZXQKK2dvIG9mIHRoZSBDdHJsIGtleSBhbmQgcHJlc3MgdGhlIEMga2V5LiBU aGlzIGlzIGNhbGxlZCBlc2NhcGluZyBiYWNrLgorQ2VydGFpbiBvdGhlciBlc2NhcGVcKGh5bGV2 ZWwgY29tbWFuZHMgYXJlIGFsc28gcHJvdmlkZWQ7IHR5cGUgQ3RybFwtXGU/Citmb3IgYSBsaXN0 LiBGb3IgZXhhbXBsZSwgeW91IGNhbiBlbnRlciBTaGVsbCBzdGF0ZSB3aXRoOgorLnNwCisgIEN0 cmxcLVxlIQorLnNwCitUbyBzZW5kIGEgQ3RybFwtXGUgdG8gdGhlIGhvc3Qgd2hpbGUgaW4gQ29u bmVjdCBzdGF0ZSwgdHlwZSB0d28gb2YgdGhlbQoraW4gYSByb3cuIFNlZSBIRUxQIENPTk5FQ1Qg YW5kIEhFTFAgU0VUIEVTQ0FQRSBmb3IgbW9yZSBpbmZvLgorLlRQCitMb2NhbCBmaWxlXChoeXRy YW5zZmVyIHN0YXRlCitJbiB0aGlzIHN0YXRlLCBLZXJtaXQgaXMgc2VuZGluZyBwYWNrZXRzIGJh Y2sgYW5kIGZvcnRoIHdpdGggdGhlIG90aGVyCitjb21wdXRlciBpbiBvcmRlciB0byB0cmFuc2Zl ciBhIGZpbGUgb3IgYWNjb21wbGlzaCBzb21lIG90aGVyCitmaWxlXChoeXJlbGF0ZWQgdGFzay4g QW5kIGF0IHRoZSBzYW1lIHRpbWUsIGl0IGlzIGRpc3BsYXlpbmcgaXRzIHByb2dyZXNzCitvbiB5 b3VyIHNjcmVlbiBhbmQgd2F0Y2hpbmcgeW91ciBrZXlib2FyZCBmb3IgaW50ZXJydXB0aW9ucy4g SW4gdGhpcworc3RhdGUsIHRoZSBmb2xsb3dpbmcgc2luZ2xlXChoeWtleXN0cm9rZSBjb21tYW5k cyBhcmUgYWNjZXB0ZWQ6Cisuc3AKKy5SUworLlRQCitYCitJbnRlcnJ1cHQgdGhlIGN1cnJlbnQg ZmlsZSBhbmQgZ28gb24gdG8gdGhlIG5leHQgKGlmIGFueSkuCisuVFAKK1oKK0ludGVycnVwdCB0 aGUgY3VycmVudCBmaWxlIGFuZCBza2lwIGFsbCB0aGUgcmVzdC4KKy5UUAorRQorTGlrZSBaIGJ1 dCB1c2VzIGEgInN0cm9uZ2VyIiBwcm90b2NvbCAodXNlIGlmIFggb3IgWiBkb24ndCB3b3JrKS4K Ky5UUAorQ3RybFwtQworSW50ZXJydXB0IGZpbGVcKGh5dHJhbnNmZXIgbW9kZSAodXNlIGlmIFog b3IgRSBkb24ndCB3b3JrKS4KKy5zcAorLlJFCitLZXJtaXQgcmV0dXJucyB0byBpdHMgcHJldmlv dXMgc3RhdGUgKENvbW1hbmQgb3IgQ29ubmVjdCkgd2hlbiB0aGUKK3RyYW5zZmVyIGlzIGNvbXBs ZXRlIG9yIHdoZW4gaW50ZXJydXB0ZWQgc3VjY2Vzc2Z1bGx5IGJ5IFgsIFosIEUsIG9yCitDdHJs XC1DIChob2xkIGRvd24gdGhlIEN0cmwga2V5IGFuZCBwcmVzcyB0aGUgQyBrZXkpLgorLlRQCitS ZW1vdGUgZmlsZVwoaHl0cmFuc2ZlciBzdGF0ZQorSW4gdGhpcyBzdGF0ZSwgS2VybWl0IGlzIGV4 Y2hhbmdpbmcgZmlsZVwoaHl0cmFuc2ZlciBwYWNrZXRzIHdpdGggaXRzCitsb2NhbCBwYXJ0bmVy IG92ZXIgaXRzIHN0YW5kYXJkIGkvby4gSXQgbGVhdmVzIHRoaXMgc3RhdGUKK2F1dG9tYXRpY2Fs bHkgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUuIEluIGNhc2UgeW91IGZpbmQgeW91cgor bG9jYWwgS2VybWl0IGluIENvbm5lY3Qgc3RhdGUgYW5kIHRoZSByZW1vdGUgb25lIGluIEZpbGVc KGh5dHJhbnNmZXIKK3N0YXRlIChpbiB3aGljaCBpdCBzZWVtcyB0byBpZ25vcmUgeW91ciBrZXlz dHJva2VzKSwgeW91IGNhbiB1c3VhbGx5CityZXR1cm4gaXQgdG8gY29tbWFuZCBzdGF0ZSBieSB0 eXBpbmcgdGhyZWUgQ3RybFwtQydzIGluIGEgcm93LiBJZiB0aGF0Citkb2Vzbid0IHdvcmssIHJl dHVybiB5b3VyIGxvY2FsIEtlcm1pdCB0byBDb21tYW5kIHN0YXRlIChDdHJsXC1cZSBDKSBhbmQK K3R5cGUgImVcKGh5cGFja2V0IiBhbmQgdGhlbiBwcmVzcyB0aGUgUmV0dXJuIG9yIEVudGVyIGtl eTsgdGhpcyBmb3JjZXMgYQorZmF0YWwgS2VybWl0IHByb3RvY29sIGVycm9yLgorLlRQCitSZW1v dGUgU2VydmVyIHN0YXRlCitUaGlzIGlzIGxpa2UgUmVtb3RlIEZpbGVcKGh5dHJhbnNmZXIgc3Rh dGUsIGV4Y2VwdCBpdCBuZXZlciByZXR1cm5zCithdXRvbWF0aWNhbGx5IHRvIENvbW1hbmQgc3Rh dGUuIFJhdGhlciwgaXQgYXdhaXRzIGZ1cnRoZXIgaW5zdHJ1Y3Rpb25zCitmcm9tIHRoZSBjbGll bnQgcHJvZ3JhbTsgdGhhdCBpcywgZnJvbSB5b3VyIExvY2FsIEtlcm1pdCBwcm9ncmFtLiBZb3UK K2NhbiByZXR1cm4gdGhlIFJlbW90ZSBTZXJ2ZXIgdG8gaXRzIHByZXZpb3VzIHN0YXRlIGJ5IGlz c3VpbmcgYQorImZpbmlzaCIgY29tbWFuZCB0byB0aGUgY2xpZW50LCBvciBpZiB5b3UgYXJlIGlu IENvbm5lY3Qgc3RhdGUsIGJ5Cit0eXBpbmcgdGhyZWUgQ3RybFwtQydzIGluIGEgcm93LiBZb3Ug Y2FuIHRlbGwgdGhlIHNlcnZlciBqb2IgdG8gbG9nIG91dAorYW5kIGJyZWFrIHRoZSBjb25uZWN0 aW9uIGJ5IGlzc3VpbmcgYSAiYnllIiBjb21tYW5kIHRvIHRoZSBjbGllbnQuCisuVFAKK0xvY2Fs IFNlcnZlciBzdGF0ZQorTGlrZSBSZW1vdGVcKGh5U2VydmVyIHN0YXRlLCBidXQgaW4gbG9jYWwg bW9kZSwgYW5kIHRoZXJlZm9yZSB3aXRoIGl0cworZmlsZVwoaHl0cmFuc2ZlciBkaXNwbGF5IHNo b3dpbmcsIGFuZCBsaXN0ZW5pbmcgZm9yIHNpbmdsZVwoaHlrZXkgY29tbWFuZHMsCithcyBpbiBM b2NhbCBGaWxlXChoeXRyYW5zZmVyIHN0YXRlLiBVc3VhbGx5IHRoaXMgc3RhdGUgaXMgZW50ZXJl ZAorYXV0b21hdGljYWxseSB3aGVuIGEgcmVtb3RlIEtlcm1pdCBwcm9ncmFtIGdpdmVzIGEgR0VU IGNvbW1hbmQuCisuc3AKK0NcKGh5S2VybWl0LCBLZXJtaXQgOTUsIGFuZCBNU1woaHlET1MgS2Vy bWl0IGFsbCBjYW4gc3dpdGNoIGF1dG9tYXRpY2FsbHkgZnJvbQorQ29ubmVjdCBzdGF0ZSB0byBM b2NhbCBGaWxlXChoeXRyYW5zZmVyIHN0YXRlIHdoZW4geW91IGluaXRpYXRlIGEgZmlsZQordHJh bnNmZXIgZnJvbSB0aGUgcmVtb3RlIGNvbXB1dGVyIGJ5IHN0YXJ0aW5nIEtlcm1pdCBhbmQgdGVs bGluZyBpdCB0byBzZW5kCitvciBnZXQgYSBmaWxlLCBpbiB3aGljaCBjYXNlLCBDb25uZWN0IHN0 YXRlIGlzIGF1dG9tYXRpY2FsbHkgcmVzdW1lZCBhZnRlcgordGhlIGZpbGUgdHJhbnNmZXIgaXMg ZmluaXNoZWQuCisuc3AKK05vdGUgdGhhdCBDXChoeUtlcm1pdCBpcyBub3QgYSB0ZXJtaW5hbCBl bXVsYXRvci4gSXQgaXMgYSBjb21tdW5pY2F0aW9ucworYXBwbGljYXRpb24gdGhhdCB5b3UgcnVu IGluIGEgdGVybWluYWwgd2luZG93IChlLmcuIGNvbnNvbGUgb3IgWHRlcm0pLiBUaGUKK3NwZWNp ZmljIGVtdWxhdGlvbiwgc3VjaCBhcyBWVDEwMCwgVlQyMjAsIExpbnV4IENvbnNvbGUsIG9yIFh0 ZXJtLCBpcworcHJvdmlkZWQgYnkgdGhlIHRlcm1pbmFsIHdpbmRvdyBpbiB3aGljaCB5b3UgYXJl IHJ1bm5pbmcgQ1woaHlLZXJtaXQuIEtlcm1pdAorOTUgYW5kIE1TXChoeURPUyBLZXJtaXQsIG9u IHRoZSBvdGhlciBoYW5kLCBhcmUgdHJ1ZSB0ZXJtaW5hbCBlbXVsYXRvcnMuIFdoeQoraXMgQ1wo aHlLZXJtaXQgbm90IGEgdGVybWluYWwgZW11bGF0b3I/IENMSUNLIEhFUkUgdG8gcmVhZCBhYm91 dCBpdC4KKy5TSCBNQUtJTkcgQ09OTkVDVElPTlMKK0hlcmUgaXMgaG93IHRvIG1ha2UgZGlmZmVy ZW50IGtpbmRzIG9mIGNvbm5lY3Rpb25zIHVzaW5nIGludGVyYWN0aXZlIEtlcm1pdAorY29tbWFu ZHMgKGFzIG5vdGVkIGFib3ZlLCB5b3UgY2FuIGFsc28gbWFrZSBjb25uZWN0aW9ucyB3aXRoIGNv bW1hbmRcKGh5bGluZQorb3B0aW9ucykuIE5vdGUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBtYWtl IGNvbm5lY3Rpb25zIHdpdGggS2VybWl0LiBJdCBjYW4KK2Fsc28gYmUgdXNlZCBvbiB0aGUgZmFy IGVuZCBvZiBhIGNvbm5lY3Rpb24gYXMgdGhlIHJlbW90ZSBmaWxlIHRyYW5zZmVyIGFuZAorbWFu YWdlbWVudCBwYXJ0bmVyIG9mIHlvdXIgbG9jYWwgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUuCisu VFAKK01ha2luZyBhIFRlbG5ldCBDb25uZWN0aW9uCitBdCB0aGUgQ1woaHlLZXJtaXQgY29tbWFu ZCBwcm9tcHQsIHNpbXBseSB0eXBlOgorLnNwCisubmYKKyAgdGVsbmV0IGZvby5iYXIuY29tCisu ZmkKKy5zcAorKHN1YnN0aXR1dGluZyBkZXNpcmVkIGhvc3RuYW1lIG9yIGFkZHJlc3MpLiAgCitZ b3UgY2FuIGFsc28gaW5jbHVkZSBhIHBvcnQgbnVtYmVyOgorLnNwCisubmYKKyAgdGVsbmV0IHh5 emNvcnAuY29tIDMwMDAgOyAKKy5maQorLnNwCitJZiB0aGUgY29ubmVjdGlvbiBpcyBzdWNjZXNz ZnVsLCBLZXJtaXQgYXV0b21pY2FsbHkgZW50ZXJzIENvbm5lY3QKK3N0YXRlLiBXaGVuIHlvdSBs b2dvdXQgZnJvbSB0aGUgcmVtb3RlIGhvc3QsIEtlcm1pdCBhdXRvbWF0aWNhbGx5CityZXR1cm5z IHRvIGl0cyBwcm9tcHQuIE1vcmUgaW5mbzogSEVMUCBURUxORVQsIEhFTFAgU0VUIFRFTE5FVCwg SEVMUAorU0VUIFRFTE9QVC4gQWxzbyBzZWUgdGhlIElLU0Qgc2VjdGlvbiBiZWxvdy4KKy5UUAor TWFraW5nIGFuIFJsb2dpbiBjb25uZWN0aW9uCitUaGlzIGlzIGp1c3QgbGlrZSBUZWxuZXQsIGV4 Y2VwdCB5b3UgaGF2ZSB0byBiZSByb290IHRvIGRvIGl0IGJlY2F1c2UKK1Jsb2dpbiB1c2VzIGEg cHJpdmlsZWdlZCBUQ1AgcG9ydDoKKy5zcAorLm5mCisgIHJsb2dpbiBmb28uYmFyLmNvbQorLmZp Cisuc3AKK01vcmUgaW5mbzogSEVMUCBSTE9HSU4uCisuVFAKK01ha2luZyBhbiBTU0ggQ29ubmVj dGlvbgorVW5saWtlIFRlbG5ldCBhbmQgUmxvZ2luLCBTU0ggY29ubmVjdGlvbnMgYXJlIG5vdCBi dWlsdFwoaHlpbiwgYnV0CitoYW5kbGVkIGJ5IHJ1bm5pbmcgeW91ciBleHRlcm5hbCBTU0ggY2xp ZW50IHRocm91Z2ggYSBwc2V1ZG90ZXJtaW5hbC4KK1VzaW5nIENcKGh5S2VybWl0IHRvIGNvbnRy b2wgdGhlIFNTSCBjbGllbnQgZ2l2ZXMgeW91IGFsbCBvZiBLZXJtaXQncworZmVhdHVyZXMgKGZp bGUgdHJhbnNmZXIsIGNoYXJhY3RlclwoaHlzZXQgY29udmVyc2lvbiwgc2NyaXB0aW5nLCBldGMp CitvdmVyIFNTSC4KKy5zcAorICBzc2ggZm9vLmJhci5jb20KKy5zcAorTW9yZSBpbmZvOiBIRUxQ IFNTSCwgSEVMUCBTRVQgU1NILgorLlRQCitEaWFsaW5nIHdpdGggYSBNb2RlbQorSWYgaXQncyBh biBleHRlcm5hbCBtb2RlbSwgbWFrZSBzdXJlIGl0IGlzIGNvbm5lY3RlZCB0byBhIHVzYWJsZQor c2VyaWFsIHBvcnQgb24geW91ciBjb21wdXRlciB3aXRoIGEgcmVndWxhciAoc3RyYWlnaHRcKGh5 dGhyb3VnaCkgbW9kZW0KK2NhYmxlLCBhbmQgdG8gdGhlIHRlbGVwaG9uZSBqYWNrIHdpdGggYSB0 ZWxlcGhvbmUgY2FibGUsIGFuZCB0aGF0IGl0J3MKK3R1cm5lZCBvbi4gVGhlbiB1c2UgdGhlc2Ug Y29tbWFuZHM6Cisuc3AKKy5uZgorICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzICA7IE9yIG90 aGVyIHN1cHBvcnRlZCB0eXBlCisgIHNldCBsaW5lIC9kZXYvdHR5UzAgICAgICAgIDsgU3BlY2lm eSBkZXZpY2UgbmFtZQorICBzZXQgc3BlZWQgNTc2MDAgICAgICAgICAgICA7IE9yIG90aGVyIGRl c2lyZWQgc3BlZWQKKyAgc2V0IGZsb3cgcnRzL2N0cyAgICAgICAgICAgOyBNb3N0IG1vZGVybiBt b2RlbXMgc3VwcG9ydCB0aGlzCisgIHNldCBkaWFsIG1ldGhvZCB0b25lICAgICAgIDsgKG9yIHB1 bHNlKQorICBkaWFsIDc2NTQzMjEgICAgICAgICAgICAgICA7IERpYWwgdGhlIGRlc2lyZWQgbnVt YmVyCisuZmkKKy5zcAorVHlwZSAic2V0IG1vZGVtIHR5cGUgPyIgZm9yIGEgbGlzdCBvZiBzdXBw b3J0ZWQgbW9kZW0gdHlwZXMuIElmIHlvdQorb21pdCB0aGUgU0VUIE1PREVNIFRZUEUgY29tbWFu ZCwgdGhlIGRlZmF1bHQgdHlwZSBpcworImdlbmVyaWNcKGh5aGlnaFwoaHlzcGVlZCIsIHdoaWNo IHNob3VsZCB3b3JrIGZvciBtb3N0IG1vZGVybiBBVFwoaHljb21tYW5kXChoeXNldAorbW9kZW1z LiBJZiB0aGUgbGluZSBpcyBidXN5LCBLZXJtaXQgcmVkaWFscyBhdXRvbWF0aWNhbGx5LiBJZiB0 aGUgY2FsbAorZG9lcyBub3Qgc3VjY2VlZCwgdXNlICJzZXQgZGlhbCBkaXNwbGF5IG9uIiBhbmQg dHJ5IGl0IGFnYWluIHRvIHdhdGNoCit3aGF0IGhhcHBlbnMuIElmIHRoZSBjYWxsIHN1Y2NlZWRz LCBLZXJtaXQgZW50ZXJzIENvbm5lY3Qgc3RhdGUKK2F1dG9tYXRpY2FsbHkgYW5kIHJldHVybnMg dG8gaXRzIHByb21wdCBhdXRvbWF0aWNhbGx5IHdoZW4geW91IGxvZyBvdXQKK2Zyb20gdGhlIHJl bW90ZSBjb21wdXRlciBvciB0aGUgY29ubmVjdGlvbiBpcyBvdGhlcndpc2UgbG9zdC4KKy5zcAor WW91IGNhbiBhbHNvIGRpYWwgZnJvbSBhIG1vZGVtIHRoYXQgaXMgYWNjZXNzaWJsZSBieSBUZWxu ZXQsIGUuZy4gdG8gYQorcmV2ZXJzZSB0ZXJtaW5hbCBzZXJ2ZXIuIEluIHRoaXMgY2FzZSB0aGUg Y29tbWFuZCBzZXF1ZW5jZSBpczoKKy5zcAorLm5mCisgIHNldCBob3N0IHRzLnh4eC5jb20gMjAw MCAgIDsgVGVybWluYWxcKGh5c2VydmVyIGFuZCBwb3J0CisgIHNldCBtb2RlbSB0eXBlIHVzcm9i b3RpY3MgIDsgT3Igb3RoZXIgc3VwcG9ydGVkIHR5cGUKKyAgc2V0IGRpYWwgbWV0aG9kIHRvbmUg ICAgICAgOyAob3IgcHVsc2UpCisgIGRpYWwgNzY1NDMyMSAgICAgICAgICAgICAgIDsgRGlhbCB0 aGUgZGVzaXJlZCBudW1iZXIKKy5maQorLnNwCitJZiB0aGUgdGVybWluYWwgc2VydmVyIHN1cHBv cnRzIHRoZSBUZWxuZXQgQ29tIFBvcnQgT3B0aW9uLCBSRkMgMjIxNywKK3lvdSBjYW4gYWxzbyBn aXZlIHNlcmlhbFwoaHlwb3J0IHJlbGF0ZWQgY29tbWFuZHMgc3VjaCBhcyBTRVQgU1BFRUQsIFNF VAorUEFSSVRZLCBhbmQgc28gb24sIGFuZCBLZXJtaXQgcmVsYXlzIHRoZW0gdG8gdGhlIHRlcm1p bmFsIHNlcnZlciB1c2luZwordGhlIHByb3RvY29sIHNwZWNpZmllZCBpbiB0aGUgUkZDLgorLnNw CitNb3JlIGluZm86IEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVCBMSU5FLCBIRUxQIFNFVCBTUEVF RCwgSEVMUCBTRVQKK0ZMT1csIEhFTFAgRElBTCwgSEVMUCBTRVQgRElBTCwgSEVMUCBTRVQgTU9E RU0sIEhFTFAgU0VUIAorQ0FSUklFUlwtV0FUQ0gsIFNIT1cgQ09NTVVOSUNBVElPTlMsIFNIT1cg TU9ERU0sIFNIT1cgRElBTC4KKy5UUAorRGlyZWN0IFNlcmlhbCBQb3J0CitDb25uZWN0IHRoZSB0 d28gY29tcHV0ZXJzLCBBIGFuZCBCLCB3aXRoIGEgbnVsbCBtb2RlbSBjYWJsZSAob3IgdHdvCitt b2RlbSBjYWJsZXMgaW50ZXJjb25uZWN0ZWQgd2l0aCBhIG51bGxcKGh5bW9kZW0gYWRhcHRlciBv ciBtb2RlbQorZWxpbWluYXRvcikuIEZyb20gQ29tcHV0ZXIgQToKKy5zcAorLm5mCisgIHNldCBt b2RlbSB0eXBlIG5vbmUgICA7IFRoZXJlIGlzIG5vIG1vZGVtCisgIHNldCBsaW5lIC9kZXYvdHR5 UzAgICA7IFNwZWNpZnkgZGV2aWNlIG5hbWUKKyAgc2V0IGNhcnJpZXJcLXdhdGNoIG9mZiA7IElm IERUUiBDRCBhcmUgbm90IGNyb3NzXChoeWNvbm5lY3RlZAorICBzZXQgc3BlZWQgNTc2MDAgICAg ICAgOyBPciBvdGhlciBkZXNpcmVkIHNwZWVkCisgIHNldCBmbG93IHJ0cy9jdHMgICAgICA7IElm IFJUUyBhbmQgQ1RTIGFyZSBjcm9zc1woaHljb25uZWN0ZWQKKyAgc2V0IHBhcml0eSBldmVuICAg ICAgIDsgKG9yICJtYXJrIiBvciAic3BhY2UiLCBpZiBuZWNlc3NhcnkpCisgIHNldCBzdG9wXC1i aXRzIDIgICAgICAgOyAocmFyZWx5IG5lY2Vzc2FyeSkKKyAgc2V0IGZsb3cgeG9uL3hvZmYgICAg IDsgSWYgeW91IGNhbid0IHVzZSBSVFMvQ1RTCisgIGNvbm5lY3QgICAgICAgICAgICAgICA7IEVu dGVyIENvbm5lY3QgKHRlcm1pbmFsKSBzdGF0ZQorLmZpCisuc3AKK1RoaXMgYXNzdW1lcyBDb21w dXRlciBCIGlzIHNldCB1cCB0byBsZXQgeW91IGxvZyBpbi4gSWYgaXQgaXNuJ3QsIHlvdSAKK2Nh biBydW4gYSBjb3B5IG9mIEtlcm1pdCBvbiBDb21wdXRlciBCIGFuZCBmb2xsb3cgYXBwcm94aW1h dGVseSB0aGUKK3NhbWUgZGlyZWN0aW9ucy4gTW9yZSBpbmZvOiBBcyBhYm92ZSBwbHVzIEhFTFAg Q09OTkVDVC4KKy5QUAorV2l0aCBtb2RlbXMgb3IgZGlyZWN0IHNlcmlhbCBjb25uZWN0aW9ucywg eW91IG1pZ2h0IGFsc28gaGF2ZSB0byAic2V0CitwYXJpdHkgZXZlbiIgKG9yICJtYXJrIiBvciAi c3BhY2UiKSBpZiBpdCdzIGEgN1woaHliaXQgY29ubmVjdGlvbi4KKy5QUAorT2YgdGhlIGNvbm5l Y3Rpb24gdHlwZXMgbGlzdGVkIGFib3ZlLCBvbmx5IG9uZSBjYW4gYmUgb3BlbiBhdCBhIHRpbWUu CitIb3dldmVyLCBhbnkgb25lIG9mIHRoZXNlIGNhbiBiZSBvcGVuIGNvbmN1cnJlbnRseSB3aXRo IGFuIEZUUCBvciBIVFRQCitzZXNzaW9uLiBFYWNoIGNvbm5lY3Rpb24gdHlwZSBjYW4gYmUgY3Vz dG9taXplZCB0byBhbnkgZGVzaXJlZCBkZWdyZWUsCitzY3JpcHRlZCwgbG9nZ2VkLCB5b3UgbmFt ZSBpdC4gU2VlIHRoZSBtYW51YWwuCisuUFAKK05PVEU6IE9uIHNlbGVjdGVkIHBsYXRmb3Jtcywg Q1woaHlLZXJtaXQgYWxzbyBjYW4gbWFrZSBYLjI1IGNvbm5lY3Rpb25zLiBTZWUKK3RoZSBtYW51 YWwgZm9yIGRldGFpbHMuCisuU0ggVFJBTlNGRVJSSU5HIEZJTEVTIFdJVEggS0VSTUlUCitUaGVy ZSBpcyBhIHdpZGVzcHJlYWQgYW5kIHBlcnNpc3RlbnQgYmVsaWVmIHRoYXQgS2VybWl0IGlzIGEg c2xvdyBwcm90b2NvbC4KK1RoaXMgaXMgYmVjYXVzZSwgdW50aWwgcmVjZW50bHksIGl0IHVzZWQg Y29uc2VydmF0aXZlIHR1bmluZyBieSBkZWZhdWx0IHRvCittYWtlIHN1cmUgZmlsZSB0cmFuc2Zl cnMgc3VjY2VlZGVkLCByYXRoZXIgdGhhbiBmYWlsaW5nIGJlY2F1c2UgdGhleQorb3ZlcmxvYWRl ZCB0aGUgY29ubmVjdGlvbi4gU29tZSBleHRyYSBjb21tYW5kcyAob3IgY29tbWFuZFwoaHlsaW5l IG9wdGlvbnMsCitsaWtlIFwtUSkgd2VyZSBuZWVkZWQgdG8gbWFrZSBpdCBnbyBmYXN0LCBidXQg bm9ib2R5IGJvdGhlcmVkIHRvIGZpbmQgb3V0CithYm91dCB0aGVtLiBBbHNvLCBpdCB0YWtlcyB0 d28gdG8gdGFuZ286IG1vc3Qgbm9uXChoeUtlcm1pdFwoaHlQcm9qZWN0IEtlcm1pdAorcHJvdG9j b2wgaW1wbGVtZW50YXRpb25zIHJlYWxseSBBUkUgc2xvdy4gVGhlIGJlc3QgZmlsZVwoaHl0cmFu c2ZlciBwYXJ0bmVycworZm9yIENcKGh5S2VybWl0IGFyZTogYW5vdGhlciBjb3B5IG9mIENcKGh5 S2VybWl0ICg3LjAgb3IgbGF0ZXIpIGFuZCBLZXJtaXQgOTUuCitUaGVzZSBjb21iaW5hdGlvbnMg d29yayB3ZWxsIGFuZCB0aGV5IHdvcmsgZmFzdCBieSBkZWZhdWx0LiBNU1woaHlET1MgS2VybWl0 CitpcyBnb29kIHRvbywgYnV0IHlvdSBoYXZlIHRvIHRlbGwgaXQgdG8gZ28gZmFzdCAoYnkgZ2l2 aW5nIGl0IHRoZSBGQVNUCitjb21tYW5kKS4KKy5QUAorRnVydGhlcm1vcmUsIGFsbCB0aHJlZSBv ZiB0aGVzZSBLZXJtaXQgcHJvZ3JhbXMgc3VwcG9ydCAiYXV0b2Rvd25sb2FkIiBhbmQKKyJhdXRv dXBsb2FkIiwgbWVhbmluZyB0aGF0IHdoZW4gdGhleSBhcmUgaW4gQ29ubmVjdCBzdGF0ZSBhbmQg YSBLZXJtaXQKK3BhY2tldCBjb21lcyBpbiBmcm9tIHRoZSByZW1vdGUsIHRoZXkgYXV0b21hdGlj YWxseSBzd2l0Y2ggaW50byBmaWxlCit0cmFuc2ZlciBtb2RlLgorLlBQCitBbmQgcGx1cywgQ1wo aHlLZXJtaXQgYW5kIEs5NSBhbHNvIHN3aXRjaCBhdXRvbWF0aWNhbGx5IGJldHdlZW4gdGV4dCBh bmQKK2JpbmFyeSBtb2RlIGZvciBlYWNoIGZpbGUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gInNl dCBmaWxlIHR5cGUgYmluYXJ5IiBvcgorInNldCBmaWxlIHR5cGUgdGV4dCIsIG9yIHRvIHdvcnJ5 IGFib3V0IGZpbGVzIGJlaW5nIGNvcnJ1cHRlZCBiZWNhdXNlIHRoZXkKK3dlcmUgdHJhbnNmZXJy ZWQgaW4gdGhlIHdyb25nIG1vZGUuCisuUFAKK1doYXQgYWxsIG9mIHRoZXNlIHdvcmRzIGFkZCB1 cCB0byBpcyB0aGF0IG5vdywgd2hlbiB5b3UgdXNlIHVwXChoeXRvXChoeWRhdGUKK0tlcm1pdCBz b2Z0d2FyZSBmcm9tIHRoZSBLZXJtaXQgUHJvamVjdCwgZmlsZSB0cmFuc2ZlciBpcyBub3Qgb25s eSBmYXN0LAoraXQncyByaWRpY3Vsb3VzbHkgZWFzeS4gWW91IGJhcmVseSBoYXZlIHRvIGdpdmUg YW55IGNvbW1hbmRzIGF0IGFsbC4KKy5UUAorRG93bmxvYWRpbmcgRmlsZXMKK0xldCdzIHNheSB5 b3UgaGF2ZSBLZXJtaXQgOTUsIENcKGh5S2VybWl0LCBvciBNU1woaHlET1MgS2VybWl0IG9uIHlv dXIKK2Rlc2t0b3AgY29tcHV0ZXIsIHdpdGggYSBjb25uZWN0aW9uIHRvIGEgVW5peCBjb21wdXRl ciB0aGF0IGhhcworQ1woaHlLZXJtaXQgaW5zdGFsbGVkIGFzICJrZXJtaXQiLiBUbyBkb3dubG9h ZCBhIGZpbGUgKHNlbmQgaXQgZnJvbSBVbml4Cit0byB5b3VyIGRlc2t0b3AgY29tcHV0ZXIpLCBq dXN0IHR5cGUgdGhlIGZvbGxvd2luZyBjb21tYW5kIGF0IHlvdXIKK1VuaXggc2hlbGwgcHJvbXB0 OgorLnNwCisgIGtlcm1pdCBcLXMgb29mYS50eHQKKy5zcAorKHdoZXJlIG9vZmEudHh0IGlzIHRo ZSBmaWxlbmFtZSkuIElmIHlvdSB3YW50IHRvIHNlbmQgbW9yZSB0aGFuIG9uZQorZmlsZSwgeW91 IGNhbiBwdXQgYXMgbWFueSBmaWxlbmFtZXMgYXMgeW91IHdhbnQgb24gdGhlIGNvbW1hbmQgbGlu ZSwKK2FuZCB0aGV5IGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGV4dCBhbmQgYmluYXJ5Ogor LnNwCisgIGtlcm1pdCBcLXMgb29mYS50eHQgb29mYS56aXAgb29mYS5odG1sIG9vZmEudGFyLmd6 Cisuc3AKK2FuZC9vciB5b3UgY2FuIHVzZSB3aWxkY2FyZHMgdG8gc2VuZCBncm91cHMgb2YgZmls ZXM6Cisuc3AKKyAga2VybWl0IFwtcyBvb2ZhLioKKy5zcAorSWYgeW91IHdhbnQgdG8gc2VuZCBh IGZpbGUgdW5kZXIgYW4gYXNzdW1lZCBuYW1lLCB1c2U6Cisuc3AKKyAga2VybWl0IFwtcyBmcmlk YXkudHh0IFwtYSB0b2RheS50eHQKKy5zcAorVGhpcyBzZW5kcyB0aGUgZmlsZSBmcmlkYXkudHh0 IGJ1dCB0ZWxscyB0aGUgcmVjZWl2aW5nIEtlcm1pdCB0aGF0IGl0cworbmFtZSBpcyB0b2RheS50 eHQuIEluIGFsbCBjYXNlcywgYXMgbm90ZWQsIHdoZW4gdGhlIGZpbGUgdHJhbnNmZXIgaXMKK2Zp bmlzaGVkLCB5b3VyIGRlc2t0b3AgS2VybWl0IHJldHVybnMgYXV0b21hdGljYWxseSB0byBDb25u ZWN0IHN0YXRlLgorTm8gd29ycmllcyBhYm91dCBlc2NhcGluZyBiYWNrLCByZVwoaHljb25uZWN0 aW5nLCB0ZXh0L2JpbmFyeSBtb2RlCitzd2l0Y2hpbmcuIEFsbW9zdCB0b28gZWFzeSwgcmlnaHQ/ CisuVFAKK1VwbG9hZGluZyBGaWxlcworVG8gdXBsb2FkIGZpbGVzIChzZW5kIHRoZW0gZnJvbSB5 b3VyIGRlc2t0b3AgY29tcHV0ZXIgdG8gdGhlIHJlbW90ZQorVW5peCBjb21wdXRlcikgZG8gdGhl IHNhbWUgdGhpbmcsIGJ1dCB1c2UgdGhlIFwtZyAoR0VUKSBvcHRpb24gaW5zdGVhZAorb2YgXC1z OgorLnNwCisgIGtlcm1pdCBcLWcgb29mYS50eHQKKy5zcAorVGhpcyBjYXVzZXMgeW91ciBsb2Nh bCBLZXJtaXQgdG8gZW50ZXIgc2VydmVyIG1vZGU7IHRoZW4gdGhlIHJlbW90ZQorS2VybWl0IHBy b2dyYW0gcmVxdWVzdHMgdGhlIG5hbWVkIGZpbGUgYW5kIHRoZSBsb2NhbCBLZXJtaXQgc2VuZHMg aXQKK2FuZCByZXR1cm5zIGF1dG9tYXRpY2FsbHkgdG8gQ29ubmVjdCBzdGF0ZSB3aGVuIGRvbmUu Cisuc3AKK0lmIHlvdSB3YW50IHRvIHVwbG9hZCBtdWx0aXBsZSBmaWxlcywgeW91IGhhdmUgaGF2 ZSB1c2Ugc2hlbGwgcXVvdGluZworcnVsZXMsIHNpbmNlIHRoZXNlIGFyZW4ndCBsb2NhbCBmaWxl czoKKy5zcAorLm5mCisgIGtlcm1pdCBcLWcgIm9vZmEudHh0IG9vZmEuemlwIG9vZmEuaHRtbCBv b2ZhLnRhci5neiIKKyAga2VybWl0IFwtZyAib29mYS4qIgorLmZpCisuc3AKK0lmIHlvdSB3YW50 IHRvIHVwbG9hZCBhIGZpbGUgYnV0IHN0b3JlIGl0IHVuZGVyIGEgZGlmZmVyZW50IG5hbWUsIHVz ZToKKy5zcAorICBrZXJtaXQgXC1nIGZyaWRheS50eHQgXC1hIHRvZGF5LnR4dAorLlRQCitLZXJt aXQgVHJhbnNmZXJzIHRoZSBPbGRcKGh5RmFzaGlvbmVkIFdheQorSWYgeW91ciBkZXNrdG9wIGNv bW11bmljYXRpb25zIHNvZnR3YXJlIGRvZXMgbm90IHN1cHBvcnQgYXV0b3VwbG9hZCBvcgorYXV0 b2Rvd25sb2FkLCBvciBpdCBkb2VzIG5vdCBpbmNsdWRlIEtlcm1pdCBzZXJ2ZXIgbW9kZSwgdGhl IHByb2NlZHVyZQorcmVxdWlyZXMgbW9yZSBzdGVwcy4KKy5zcAorVG8gZG93bmxvYWQgYSBmaWxl LCB0eXBlOgorLnNwCisgIGtlcm1pdCBcLXMgZmlsZW5hbWUKKy5zcAorb24gdGhlIGhvc3QgYXMg YmVmb3JlLCBidXQgaWYgbm90aGluZyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkgaW4KK3Jlc3BvbnNl IHRvIHRoaXMgY29tbWFuZCwgeW91IGhhdmUgdG8gc3dpdGNoIHlvdXIgZGVza3RvcAorY29tbXVu aWNhdGlvbnMgc29mdHdhcmUgaW50byBLZXJtaXQgUmVjZWl2ZSBzdGF0ZS4gVGhpcyBtaWdodCBi ZSBkb25lCitieSBlc2NhcGluZyBiYWNrIHVzaW5nIGtleWJvYXJkIGNoYXJhY3RlcnMgb3IgaG90 IGtleXMgKEFsdFwteCBpcwordHlwaWNhbCkgYW5kL29yIHdpdGggYSBjb21tYW5kIChsaWtlIFJF Q0VJVkUpIG9yIGEgbWVudS4gV2hlbiB0aGUgZmlsZQordHJhbnNmZXIgaXMgY29tcGxldGUsIHlv dSBoYXZlIHRvIGdvIGJhY2sgdG8gQ29ubmVjdCBzdGF0ZSwgVGVybWluYWwKK2VtdWxhdGlvbiwg b3Igd2hhdGV2ZXIgdGVybWlub2xvZ3kgYXBwbGllcyB0byB5b3VyIGRlc2t0b3AKK2NvbW11bmlj YXRpb25zIHNvZnR3YXJlLgorLnNwCitUbyB1cGxvYWQgYSBmaWxlLCB0eXBlOgorLnNwCisgIGtl cm1pdCBcLXIKKy5zcAorb24gdGhlIGhvc3QgKHJhdGhlciB0aGFuICJrZXJtaXQgXC1nIikuIFRo aXMgdGVsbHMgQ1woaHlLZXJtaXQgdG8gd2FpdAorcGFzc2l2ZWx5IGZvciBhIGZpbGUgdG8gc3Rh cnQgYXJyaXZpbmcuIFRoZW4gcmVnYWluIHRoZSBhdHRlbnRpb24gb2YKK3lvdXIgZGVza3RvcCBz b2Z0d2FyZSAoQWx0XC14IG9yIHdoYXRldmVyKSBhbmQgaW5zdHJ1Y3QgaXQgdG8gc2VuZCB0aGUK K2Rlc2lyZWQgZmlsZShzKSB3aXRoIEtlcm1pdCBwcm90b2NvbC4gV2hlbiB0aGUgdHJhbnNmZXIg aXMgZmluaXNoZWQsCityZXR1cm4gdG8gdGhlIENvbm5lY3Qgb3IgVGVybWluYWwgc2NyZWVuLgor LlRQCitJZiBGaWxlIFRyYW5zZmVyIEZhaWxzCitBbHRob3VnaCBldmVyeSBhc3BlY3Qgb2YgS2Vy bWl0J3Mgb3BlcmF0aW9uIGNhbiBiZSBmaW5lbHkgdHVuZWQsIHRoZXJlCithcmUgYWxzbyB0aHJl ZSBzaG9ydCBhbmQgc2ltcGxlICJvbW5pYnVzIHR1bmluZyIgY29tbWFuZHMgeW91IGNhbiB1c2UK K2ZvciB0cm91Ymxlc2hvb3Rpbmc6CisuUlMKKy5UUAorRkFTVAorVXNlIGZhc3QgZmlsZVwoaHl0 cmFuc2ZlciBzZXR0aW5ncy4gVGhpcyBoYXMgYmVlbiB0aGUgZGVmYXVsdCBzaW5jZQorQ1woaHlL ZXJtaXQgNy4wIG5vdyB0aGF0IG1vc3QgbW9kZXJuIGNvbXB1dGVycyBhbmQgY29ubmVjdGlvbnMK K3N1cHBvcnQgaXQuIElmIHRyYW5zZmVycyBmYWlsIHdpdGggZmFzdCBzZXR0aW5ncywgdHJ5IC4g LiAuCisuVFAKK0NBVVRJT1VTCitVc2UgY2F1dGlvdXMgYnV0IG5vdCBwYXJhbm9pZCBzZXR0aW5n cy4gRmlsZSB0cmFuc2ZlcnMsIGlmIHRoZXkKK3dvcmssIHdpbGwgZ28gYXQgbWVkaXVtIHNwZWVk LiBJZiBub3QsIHRyeSAuIC4gLgorLlRQCitST0JVU1QKK1VzZSB0aGUgbW9zdCByb2J1c3QsIHJl c2lsaWVudCwgY29uc2VydmF0aXZlLCBzYWZlLCBhbmQgcmVsaWFibGUKK3NldHRpbmdzLiBGaWxl IHRyYW5zZmVycyB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgd29yaywgYnV0IHRoZXkKK3dpbGwgYmUg cXVpdGUgc2xvdyAob2YgY291cnNlIHRoaXMgaXMgYSBjbGFzc2ljIHRyYWRlb2ZmOyBST0JVU1QK K3dhcyBDXChoeUtlcm1pdCdzIGRlZmF1bHQgdHVuaW5nIGluIHZlcnNpb25zIDYuMCBhbmQgZWFy bGllciwgd2hpY2gKK21hZGUgZXZlcnlib2R5IHRoaW5rIEtlcm1pdCBwcm90b2NvbCB3YXMgc2xv dykuIElmIFJPQlVTVCBkb2Vzbid0CitkbyB0aGUgdHJpY2ssIHRyeSBhZ2FpbiB3aXRoIFNFVCBQ QVJJVFkgU1BBQ0UgZmlyc3QgaW4gY2FzZSBpdCdzCitub3QgYW4gOFwoaHliaXQgY29ubmVjdGlv bi4KKy5SRQorLnNwCitPYnZpb3VzbHkgdGhlIHN1Y2Nlc3MgYW5kIHBlcmZvcm1hbmNlIG9mIGEg ZmlsZSB0cmFuc2ZlciBhbHNvIGRlcGVuZHMKK29uIENcKGh5S2VybWl0J3MgZmlsZSB0cmFuc2Zl ciBwYXJ0bmVyLiBVcFwoaHl0b1woaHlkYXRlLCByZWFsIEtlcm1pdCBQcm9qZWN0CitwYXJ0bmVy cyBhcmUgcmVjb21tZW5kZWQgYmVjYXVzZSB0aGV5IGNvbnRhaW4gdGhlIGJlc3QgS2VybWl0IHBy b3RvY29sCitpbXBsZW1lbnRhdGlvbnMgYW5kIGJlY2F1c2Ugd2UgY2FuIHN1cHBvcnQgdGhlbSBp biBjYXNlIG9mIHRyb3VibGUuCisuc3AKK0lmIHlvdSBzdGlsbCBoYXZlIHRyb3VibGUsIGNvbnN1 bHQgQ2hhcHRlciAxMCBvZiBVc2luZyBDXChoeUtlcm1pdCwgb3IKK3NlbmQgZW1haWwgdG8ga2Vy bWl0XChoeXN1cHBvcnRAY29sdW1iaWEuZWR1LgorLlRQCitBZHZhbmNlZCBLZXJtaXQgRmlsZVwo aHlUcmFuc2ZlciBGZWF0dXJlcworT2J2aW91c2x5IHRoZXJlIGlzIGEgbG90IG1vcmUgdG8gS2Vy bWl0IGZpbGUgdHJhbnNmZXIsIGluY2x1ZGluZyBhbGwKK3NvcnRzIG9mIGludGVyYWN0aXZlIGNv bW1hbmRzLCBwcmVmZXJlbmNlcywgb3B0aW9ucywgbG9nZ2luZywKK2RlYnVnZ2luZywgdHJvdWJs ZXNob290aW5nLCBhbmQgYW55dGhpbmcgZWxzZSB5b3UgY2FuIGltYWdpbmUgYnV0Cit0aGF0J3Mg d2hhdCB0aGUgbWFudWFsIGFuZCB1cGRhdGVzIGFyZSBmb3IuIEhlcmUgYXJlIGEgZmV3IHRvcGlj cyB5b3UKK2NhbiBleHBsb3JlIGlmIHlvdSdyZSBpbnRlcmVzdGVkIGJ5IFR5cGluZyBIRUxQIGZv ciB0aGUgbGlzdGVkCitjb21tYW5kczoKKy5SUworLlRQCitMb2dnaW5nIHRyYW5zZmVyczoKK0xP RyBUUkFOU0FDVElPTlMgKEhFTFAgTE9HKQorLlRQCitBdXRvbWF0aWMgcGVyXChoeWZpbGUgdGV4 dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmc6CitTRVQgVFJBTlNGRVIgTU9ERSB7IEFVVE9NQVRJQywg TUFOVUFMIH0gKEhFTFAgU0VUIFRSQU5TRkVSKS4KKy5UUAorQ3Jvc3NcKGh5cGxhdGZvcm0gcmVj dXJzaXZlIGRpcmVjdG9yeSB0cmVlIHRyYW5zZmVyOgorU0VORCAvUkVDVVJTSVZFLCBHRVQgL1JF Q1VSU0lWRSAoSEVMUCBTRU5ELCBIRUxQIEdFVCkuCisuVFAKK0ZpbGUgY29sbGlzaW9uIG9wdGlv bnM6CitTRVQgRklMRSBDT0xMSVNJT04geyBPVkVSV1JJVEUsIEJBQ0tVUCwgRElTQ0FSRCwgLi4u IH0gKEhFTFAgU0VUIEZJTEUpLgorLlRQCitVcGRhdGU6IFRyYW5zZmVyIG9ubHkgZmlsZXMgdGhh dCBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZToKK1NFVCBGSUxFIENPTExJU0lPTiBVUERBVEUgKEhF TFAgU0VUIEZJTEUpLgorLlRQCitGaWxlbmFtZSBzZWxlY3Rpb24gcGF0dGVybnM6CisoSEVMUCBX SUxEQ0FSRCkuCisuVFAKK0ZsZXhpYmxlIGZpbGUgc2VsZWN0aW9uOgorU0VORCAob3IgR0VUKSAv QkVGT1JFIC9BRlRFUiAvTEFSR0VSIC9TTUFMTEVSIC9UWVBFIC9FWENFUFQsIC4uLgorLlRQCitD aGFyYWN0ZXJcKGh5c2V0IGNvbnZlcnNpb246CitTRVQgeyBGSUxFLCBUUkFOU0ZFUiB9IENIQVJB Q1RFUlwtU0VULCBBU1NPQ0lBVEUsIC4uLgorLlRQCitGaWxlL1BhdGhuYW1lIGNvbnRyb2w6CitT RVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTLCBTRVQgRklMRSBOQU1FUy4KKy5UUAorQXRv bWljIGZpbGUgbW92ZW1lbnQ6CitTRU5EIChvciBHRVQpIC9ERUxFVEUgL1JFTkFNRSAvTU9WRVwt VE8KKy5UUAorVHJhbnNmZXJyaW5nIHRvL2Zyb20gc3RhbmRhcmQgaS9vIG9mIG90aGVyIGNvbW1h bmRzOgorU0VORCAob3IgR0VUKSAvQ09NTUFORAorLlRQCitSZWNvdmVyeSBvZiBpbnRlcnJ1cHRl ZCB0cmFuc2ZlciBmcm9tIHBvaW50IG9mIGZhaWx1cmU6CitSRVNFTkQsIFJFR0VUIChIRUxQIFJF U0VORCwgSEVMUCBSRUdFVCkuCisuUkUKKy5UUAorTm9uXChoeUtlcm1pdCBGaWxlIFRyYW5zZmVy CitZb3UgY2FuIGFsc28gdXNlIENcKGh5S2VybWl0IHRvIHRyYW5zZmVyIGZpbGVzIHdpdGggRlRQ IG9yIEhUVFAgSW50ZXJuZXQKK3Byb3RvY29sczsgc2VlIGJlbG93LgorLnNwCitPbiBhIHJlZ3Vs YXIgc2VyaWFsIG9yIFRlbG5ldCBjb25uZWN0aW9uIHdoZXJlIHRoZSBvdGhlciBjb21wdXRlcgor ZG9lc24ndCBzdXBwb3J0IEtlcm1pdCBwcm90b2NvbCBhdCBhbGwsIHlvdSBoYXZlIHNldmVyYWwg b3B0aW9ucy4gRm9yCitleGFtcGxlLCBpZiB5b3VyIGRlc2t0b3AgY29tbXVuaWNhdGlvbnMgc29m dHdhcmUgc3VwcG9ydHMgWm1vZGVtLCB1c2UKKyJyeiIgYW5kICJzeiIgb24gdGhlIGhvc3QgcmF0 aGVyIHRoYW4gS2VybWl0LiBCdXQgaWYgS2VybWl0IGlzIHlvdXIKK2Rlc2t0b3Agc29mdHdhcmUs IGFuZCB5b3UgYXJlIHVzaW5nIGl0IHRvIG1ha2UgY2FsbHMgb3IgbmV0d29yaworY29ubmVjdGlv bnMgdG8gb3RoZXIgY29tcHV0ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBLZXJtaXQgcHJvdG9jb2wg KG9yCit0aGF0IGRvbid0IGhhdmUgYSBnb29kIGltcGxlbWVudGF0aW9uIG9mIGl0KSwgdGhlbiBp ZiB5b3VyIGNvbXB1dGVyCithbHNvIGhhcyBleHRlcm5hbCBYLCBZLCBvciBabW9kZW0gcHJvZ3Jh bXMgdGhhdCBhcmUgcmVkaXJlY3RhYmxlLAorS2VybWl0IGNhbiB1c2UgdGhlbSBhcyBleHRlcm5h bCBwcm90b2NvbHMuIEhFTFAgU0VUIFBST1RPQ09MIGZvcgorZGV0YWlscy4KKy5zcAorWW91IGNh biBhbHNvIGNhcHR1cmUgInJhdyIgZGF0YSBzdHJlYW1zIGZyb20gdGhlIG90aGVyIGNvbXB1dGVy IHdpdGgKK0xPRyBTRVNTSU9OIChIRUxQIExPRyBhbmQgSEVMUCBTRVQgU0VTU0lPTlwtTE9HIGZv ciBkZXRhaWxzKSwgYW5kIHlvdQorY2FuIHVwbG9hZCBmaWxlcyB3aXRob3V0IGFueSBwcm90b2Nv bCBhdCBhbGwgd2l0aCBUUkFOU01JVCAoSEVMUAorVFJBTlNNSVQsIEhFTFAgU0VUIFRSQU5TTUlU KS4KKy5TSCBLRVJNSVQnUyBCVUlMVFwoaHlJTiBGVFAgQU5EIEhUVFAgQ0xJRU5UUworS2VybWl0 J3MgRlRQIGNsaWVudCBpcyBsaWtlIHRoZSByZWd1bGFyIFVuaXggRlRQIGNsaWVudCB0aGF0IHlv dSdyZSB1c2VkCit0bywgYnV0IHdpdGggc29tZSBkaWZmZXJlbmNlczoKKy5UUAorXChidQorSXQg aGFzIGxvdHMgbW9yZSBjb21tYW5kcyBhbmQgZmVhdHVyZXMuCisuVFAKK1woYnUKK0VhY2ggRlRQ IGNvbW1hbmQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoICJmdHAiLCBmb3IgZXhhbXBsZSAiZnRwIG9w ZW4iLAorImZ0cCBnZXQiLCAiZnRwIGJ5ZSIsIGV0YyAodGhpcyBpcyBub3Qgc3RyaWN0bHkgdHJ1 ZSwgYnV0IHVudGlsIHlvdSdyZQorbW9yZSBmYW1pbGlhciB3aXRoIGl0LCBpdCdzIGJlc3QgdG8g Zm9sbG93IHRoaXMgcnVsZSkuCisuVFAKK1woYnUKK0NvbW1hbmRzIGxpa2UgImNkIiwgImRpcmVj dG9yeSIsIGV0YywgZXhlY3V0ZSBsb2NhbGx5LCBub3Qgb24gdGhlCitzZXJ2ZXIuIFVzZSAiZnRw IGNkIiwgImZ0cCBkaXIiLCBldGMsIHRvIGhhdmUgdGhlbSBhY3Qgb24gdGhlIHNlcnZlci4KKy5U UAorXChidQorWW91IGNhbiBoYXZlIGFuIEZUUCBzZXNzaW9uIGFuZCBhIHJlZ3VsYXIgS2VybWl0 IHNlcmlhbCBvciBUZWxuZXQKK3Nlc3Npb24gb3BlbiBhdCB0aGUgc2FtZSB0aW1lLgorLlRQCitc KGJ1CitGVFAgc2Vzc2lvbnMgY2FuIGJlIGZ1bGx5IGF1dG9tYXRlZC4KKy5QUAorUGVuZGluZyBw dWJsaWNhdGlvbiBvZiB0aGUgbmV4dCBlZGl0aW9uIG9mIHRoZSBtYW51YWwsIHRoZSBLZXJtaXQg RlRQCitjbGllbnQgaXMgdGhvcm91Z2hseSBkb2N1bWVudGVkIGF0IHRoZSBLZXJtaXQgUHJvamVj dCB3ZWJzaXRlOgorLnNwCisgIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9mdHBjbGll bnQuaHRtbAorLnNwCitZb3UgYWxzbyBjYW4gdXNlIEhFTFAgRlRQIGFuZCBIRUxQIFNFVCBGVFAg dG8gZ2V0IGRlc2NyaXB0aW9ucyBvZiBLZXJtaXQncworRlRQXChoeXJlbGF0ZWQgY29tbWFuZHMu CisuUFAKK1RoZSBIVFRQIGNsaWVudCBpcyBzaW1pbGFyIHRvIHRoZSBGVFAgb25lLCBleGNlcHQg eW91IHByZWZpeCBlYWNoIGNvbW1hbmQKK3dpdGggSFRUUCBpbnN0ZWFkIG9mIEZUUDogSFRUUCBP UEVOLCBIVFRQIEdFVCwgSFRUUCBQVVQsIEhUVFAgQ0xPU0UsIGV0Yy4KK1R5cGUgSEVMUCBIVFRQ IGZvciBkZXRhaWxzLCBvciB2aXNpdCB0aGUgdG8gdmlldyB0aGUgbWFudWFsIHN1cHBsZW1lbnRz LgorSFRUUCBjb25uZWN0aW9ucyBjYW4gYmUgb3BlbiBhdCB0aGUgc2FtZSB0aW1lIGFzIHJlZ3Vs YXIgc2VyaWFsIG9yIFRlbG5ldAorY29ubmVjdGlvbnMgYW5kIEZUUCBjb25uZWN0aW9ucy4gU28g S2VybWl0IGNhbiBtYW5hZ2UgdXAgdG8gdGhyZWUgdHlwZXMKK2Nvbm5lY3Rpb25zIHNpbXVsdGFu ZW91c2x5LgorLlNIIElOVEVSTkVUIEtFUk1JVCBTRVJWSUNFCitDXChoeUtlcm1pdCBjYW4gYmUg Y29uZmlndXJlZCBhbmQgcnVuIGFzIGFuIEludGVybmV0IHNlcnZpY2UgKGNhbGxlZCBJS1NEKSwK K3NpbWlsYXIgdG8gYW4gRlRQIHNlcnZlciAoRlRQRCkgZXhjZXB0IHlvdSBjYW4gKGJ1dCBuZWVk IG5vdCkgaW50ZXJhY3Qgd2l0aAoraXQgZGlyZWN0bHksIHBsdXMgaXQgZG9lcyBhIGxvdCBtb3Jl IHRoYW4gYW4gRlRQIHNlcnZlciBjYW4gZG8uIFRoZSBUQ1AKK3BvcnQgZm9yIElLU0QgaXMgMTY0 OS4gSXQgdXNlcyBUZWxuZXQgcHJvdG9jb2wuIENcKGh5S2VybWl0IGNhbiBiZSBhbiBJbnRlcm5l dAorS2VybWl0IFNlcnZlciwgb3IgaXQgY2FuIGJlIGEgY2xpZW50IG9mIGFuIElLU0QuIFlvdSBj YW4gbWFrZSBjb25uZWN0aW9ucworZnJvbSBDXChoeUtlcm1pdCB0byBhbiBJS1NEIHdpdGggYW55 IG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6Cisuc3AKKy5uZgorICB0ZWxuZXQgZm9vLmJhci5l ZHUgMTY0OQorICB0ZWxuZXQgZm9vLmJhci5lZHUga2VybWl0ICAgOyBpZiAia2VybWl0IiBpcyBs aXN0ZWQgaW4gL2V0Yy9zZXJ2aWNlcworICBpa3NkIGZvby5iYXIuZWR1CisuZmkKKy5zcAorVGhl IElLU0QgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIGEgVEVMTkVUIGNvbW1hbmQgc3BlY2lmeWlu ZyBwb3J0IDE2NDkuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBtYWtpbmcgYW5kIHVzaW5n IGNvbm5lY3Rpb25zIHRvIGFuIElLU0QsIHNlZToKKy5zcAorICBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY3Vpa3NkLmh0bWwKKy5zcAorWW91IGNhbiBydW4gYW4gSW50ZXJuZXQgS2Vy bWl0IFNlcnZpY2Ugb24geW91ciBvd24gY29tcHV0ZXIgdG9vIChpZiB5b3UgYXJlCit0aGUgc3lz dGVtIGFkbWluaXN0cmF0b3IpLiBGb3IgaW5zdHJ1Y3Rpb25zLCBzZWU6Cisuc3AKKyAgaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lrc2QuaHRtbAorLlNIIFNFQ1VSSVRZCitBbGwgb2Yg Q1woaHlLZXJtaXQncyBidWlsdFwoaHlpbiBUQ1AvSVAgbmV0d29ya2luZyBtZXRob2RzIChUZWxu ZXQsIFJsb2dpbiwgSUtTRCwKK0ZUUCwgYW5kIEhUVFApIGNhbiBiZSBzZWN1cmVkIGJ5IG9uZSBv ciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgSUVURlwoaHlhcHByb3ZlZAorbWV0aG9kczoKKy5QUAor XChidQlNSVQgS2VyYmVyb3MgSVYKKy5icgorXChidQlNSVQgS2VyYmVyb3MgVgorLmJyCitcKGJ1 CVNTTC9UTFMKKy5icgorXChidQlTdGFuZm9yZCBTUlAKKy5QUAorRm9yIGNvbXBsZXRlIGluc3Ry dWN0aW9ucyBzZWU6CisuUFAKKyAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3Vy aXR5Lmh0bWwKKy5QUAorQW5kIGFzIG5vdGVkIHByZXZpb3VzbHksIHlvdSBjYW4gYWxzbyBtYWtl IFNTSCBjb25uZWN0aW9ucyB3aXRoIENcKGh5S2VybWl0IGlmCit5b3UgYWxyZWFkeSBoYXZlIGFu IFNTSCBjbGllbnQgaW5zdGFsbGVkLgorLlNIIEFMVEVSTkFUSVZFIENPTU1BTkRcKGh5TElORSBQ RVJTT05BTElUSUVTCitXaGVuIGludm9rZWQgYXMgImtlcm1pdCIgb3IgYW55IG90aGVyIG5hbWUg YmVzaWRlcyAiZnRwIiBvciAidGVsbmV0IiwKK0NcKGh5S2VybWl0IGhhcyB0aGUgY29tbWFuZFwo aHlsaW5lIG9wdGlvbnMgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBPUFRJT05TCitzZWN0aW9uLiBI b3dldmVyLCBpZiB5b3UgaW52b2tlIENcKGh5S2VybWl0IGFzICJ0ZWxuZXQiIG9yICJmdHAiLCBp dCBjaGFuZ2VzCitpdHMgY29tbWFuZFwoaHlsaW5lIHBlcnNvbmFsaXR5IHRvIG1hdGNoLiBUaGlz IGNhbiBiZSBkb25lIChhbW9uZyBvdGhlciB3YXlzKQord2l0aCBzeW1ib2xpYyBsaW5rcyAoc3lt bGlua3MpLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgQ1woaHlLZXJtaXQgdG8gYmUKK3lvdXIg cmVndWxhciBUZWxuZXQgY2xpZW50LCBvciB0aGUgVGVsbmV0IGhlbHBlciBvZiB5b3VyIFdlYiBi cm93c2VyLCB5b3UKK2NhbiBjcmVhdGUgYSBsaW5rIGxpa2UgdGhlIGZvbGxvd2luZyBpbiBhIGRp cmVjdG9yeSB0aGF0IGxpZXMgaW4geW91ciBQQVRICithaGVhZCBvZiB0aGUgcmVndWxhciB0ZWxu ZXQgcHJvZ3JhbToKKy5zcAorICBsbiBcLXMgL3Vzci9sb2NhbC9iaW4va2VybWl0IHRlbG5ldAor LnNwCitOb3cgd2hlbiB5b3UgZ2l2ZSBhICJ0ZWxuZXQiIGNvbW1hbmQsIHlvdSBhcmUgaW52b2tp bmcgS2VybWl0IGluc3RlYWQsIGJ1dAord2l0aCBpdHMgVGVsbmV0IGNvbW1hbmRcKGh5bGluZSBw ZXJzb25hbGl0eSBzbywgZm9yIGV4YW1wbGU6Cisuc3AKKyAgdGVsbmV0IHh5emNvcnAuY29tCisu c3AKK01ha2VzIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8geHl6Y29ycC5jb20sIGFuZCBLZXJtaXQg ZXhpdHMgYXV0b21hdGljYWxseQord2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgKGp1c3Qg bGlrZSB0aGUgcmVndWxhciBUZWxuZXQgY2xpZW50KS4gVHlwZQorInRlbG5ldCBcLWgiIHRvIGdl dCBhIGxpc3Qgb2YgS2VybWl0J3MgVGVsbmV0XChoeXBlcnNvbmFsaXR5IGNvbW1hbmRcKGh5bGlu ZQorb3B0aW9ucywgd2hpY2ggYXJlIGludGVuZGVkIHRvIGJlIGFzIGNvbXBhdGlibGUgYXMgcG9z c2libGUgd2l0aCB0aGUKK3JlZ3VsYXIgVGVsbmV0IGNsaWVudC4KKy5QUAorU2ltaWxhcmx5IGZv ciBGVFA6Cisuc3AKKyAgbG4gXC1zIC91c3IvbG9jYWwvYmluL2tlcm1pdCBmdHAKKy5zcAorQW5k IG5vdyB0eXBlICJmdHAgXC1oIiB0byBzZWUgaXRzIGNvbW1hbmRcKGh5bGluZSBvcHRpb25zLCBh bmQgY29tbWFuZCBsaW5lcworanVzdCBsaWtlIHlvdSB3b3VsZCBnaXZlIHlvdXIgcmVndWxhciBG VFAgY2xpZW50OgorLnNwCisgIGZ0cCB4eXpjb3JwLmNvbQorLnNwCitidXQgd2l0aCBhZGRpdGlv bmFsIG9wdGlvbnMgYWxsb3dpbmcgYW4gZW50aXJlIHNlc3Npb24gdG8gYmUgc3BlY2lmaWVkIG9u Cit0aGUgY29tbWFuZCBsaW5lLiBGaW5hbGx5LCBpZiBLZXJtaXQncworZmlyc3QgY29tbWFuZFwo aHlsaW5lIG9wdGlvbiBpcyBhIFRlbG5ldCwgRlRQLCBJS1NELCBvciBIVFRQIFVSTCwgS2VybWl0 CithdXRvbWF0aWNhbGx5IG1ha2VzIHRoZSBhcHByb3ByaWF0ZSBraW5kIG9mIGNvbm5lY3Rpb24g YW5kLCBpZiBpbmRpY2F0ZWQgYnkKK3RoZSBVUkwsIHRha2VzIHRoZSBkZXNpcmVkIGFjdGlvbjoK Ky5UUAora2VybWl0IHRlbG5ldDp4eXpjb3JwLmNvbQorT3BlbnMgYSBUZWxuZXQgc2Vzc2lvbgor LlRQCitrZXJtaXQgdGVsbmV0Oi8vb2xnYUB4eXpjb3JwLmNvbQorRGl0dG8gZm9yIHVzZXIgb2xn YQorLlRQCitrZXJtaXQgZnRwOi8vb2xnYUB4eXpjb3JwLmNvbS9wdWJsaWMvb29mYS56aXAKK0Rv d25sb2FkcyBhIGZpbGUKKy5UUAora2VybWl0IGtlcm1pdDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv a2VybWl0L2YvUkVBRC5NRQorRGl0dG8gZm9yIElLU0QKKy5UUAora2VybWl0IGlrc2Q6Ly9rZXJt aXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL1JFQUQuTUUKKyhUaGlzIHdvcmtzIHRvbykKKy5UUAor a2VybWl0IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9pbmRleC5odG1sCitHcmFicyBh IHdlYiBwYWdlCisuZmkKKy5TSCBMSUNFTlNFCitDXChoeUtlcm1pdCBoYXMgYW4gdW51c3VhbCBs aWNlbnNlLCBidXQgYSBmYWlyIGFuZCBzZW5zaWJsZSBvbmUgc2luY2UgdGhlCitLZXJtaXQgUHJv amVjdCBtdXN0IHN1cHBvcnQgaXRzZWxmIG91dCBvZiByZXZlbnVlOiBpdCdzIG5vdCBhIEJTRCBs aWNlbnNlLAorbm90IEdQTCwgbm90IEFydGlzdGljLCBub3QgY29tbWVyY2lhbCwgbm90IHNoYXJl d2FyZSwgbm90IGZyZWV3YXJlLiBJdCBjYW4KK2JlIHN1bW1lZCB1cCBsaWtlIHRoaXM6IGlmIHlv dSB3YW50IENcKGh5S2VybWl0IGZvciB5b3VyIG93biB1c2UsIHlvdSBjYW4KK2Rvd25sb2FkIGFu ZCB1c2UgaXQgd2l0aG91dCBjb3N0IG9yIGxpY2Vuc2UgKGJ1dCB3ZSdkIGFwcHJlY2lhdGUgaXQg aWYgeW91Cit3b3VsZCBwdXJjaGFzZSB0aGUgbWFudWFsKS4gQnV0IGlmIHlvdSB3YW50IHRvIHNl bGwgQ1woaHlLZXJtaXQgb3IgYnVuZGxlIGl0Cit3aXRoIGEgcHJvZHVjdCBvciBvdGhlcndpc2Ug ZGlzdHJpYnV0ZSBpdCBpbiBhIGNvbW1lcmNpYWwgc2V0dGluZyBFWENFUFQKK1dJVEggQU4gT1BF TlwoaHlTT1VSQ0UgT1BFUkFUSU5HIFNZU1RFTSBESVNUUklCVVRJT04gc3VjaCBhcyBMaW51eCwg RnJlZUJTRCwKK05ldEJTRCwgb3IgT3BlbkJTRCwgeW91IG11c3QgbGljZW5zZSBpdC4gVG8gc2Vl IHRoZSBjb21wbGV0ZSBsaWNlbnNlLCBnaXZlCit0aGUgTElDRU5TRSBjb21tYW5kIGF0IHRoZSBw cm9tcHQsIG9yIHNlZSB0aGUgQ09QWUlORy5UWFQgZmlsZSBkaXN0cmlidXRlZAord2l0aCBDXCho eUtlcm1pdCA3LjAgb3IgbGF0ZXIsIG9yIGRvd25sb2FkIGl0IGZyb20KKy5zcAorICBmdHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9jXC1rZXJtaXQvQ09QWUlORy5UWFQKKy5zcAorU2Vu ZCBsaWNlbnNpbmcgaW5xdWlyaWVzIHRvIGtlcm1pdEBjb2x1bWJpYS5lZHUuCisuU0ggQlVHUwor U2VlIHRoZSBmb2xsb3dpbmcgZmlsZXMgZm9yIGxpc3RpbmdzIG9mIGtub3duIGJ1Z3MsIGxpbWl0 YXRpb25zLAord29ya2Fyb3VuZHMsIGhpbnRzIGFuZCB0aXBzOgorLlRQCitja2Nid3IudHh0CitH ZW5lcmFsIENcKGh5S2VybWl0IGJ1Z3MsIGhpbnRzLCB0aXBzLgorLlRQCitja3Vid3IudHh0CitV bml4XChoeXNwZWNpZmljIENcKGh5S2VybWl0IGJ1Z3MsIGhpbnRzLCB0aXBzLgorLlBQCitSZXBv cnQgYnVncyBhbmQgcHJvYmxlbXMgYnkgZW1haWwgdG86Cisuc3AKKyAgIGtlcm1pdFwtc3VwcG9y dEBjb2x1bWJpYS5lZHUuCisuc3AKK0JlZm9yZSByZXF1ZXN0aW5nIHRlY2huaWNhbCBzdXBwb3J0 LCBwbGVhc2UgcmVhZCB0aGUgaGludHMgaGVyZToKKy5zcAorICBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvc3VwcG9ydC5odG1sCisuc3AKK2FuZCBhbHNvIHJlYWQgdGhlIENcKGh5S2Vy bWl0IEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zOgorLnNwCisgIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCisuU0ggT1RIRVIgVE9QSUNTCitUaGVyZSdzIHdheSBt b3JlIHRvIENcKGh5S2VybWl0IHRoYW4gd2UndmUgdG91Y2hlZCBvbiBoZXJlIFwoaHlcKGh5IHRy b3VibGVzaG9vdGluZywKK2N1c3RvbWl6YXRpb24sIGNoYXJhY3RlciBzZXRzLCBkaWFsaW5nIGRp cmVjdG9yaWVzLCBzZW5kaW5nIHBhZ2VzLCBzY3JpcHQKK3dyaXRpbmcsIGFuZCBvbiBhbmQgb24s IGFsbCBvZiB3aGljaCBhcmUgY292ZXJlZCBpbiB0aGUgbWFudWFsIGFuZCB1cGRhdGVzCithbmQg c3VwcGxlbWVudHMuIEZvciB0aGUgbW9zdCB1cFwoaHl0b1woaHlkYXRlIGluZm9ybWF0aW9uIG9u IGRvY3VtZW50YXRpb24gKG9yCit1cGRhdGVkIGRvY3VtZW50YXRpb24gaXRzZWxmKSB2aXNpdCB0 aGUgS2VybWl0IFByb2plY3Qgd2Vic2l0ZToKKy5zcAorICBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvCisuUFAKK1RoZXJlIHlvdSB3aWxsIGFsc28gZmluZCBLZXJtaXQgc29mdHdhcmUg cGFja2FnZXMgZm9yIG90aGVyIHBsYXRmb3JtczoKK2RpZmZlcmVudCBVbml4IHZhcmlldGllcywg V2luZG93cywgRE9TLCBWTVMsIElCTSBtYWluZnJhbWVzLCBhbmQgbWFueQorb3RoZXJzOiAyMCsg eWVhcnMnIHdvcnRoLgorLlNIIERPQ1VNRU5UQVRJT04gQU5EIFVQREFURVMKK1RoZSBtYW51YWwg Zm9yIENcKGh5S2VybWl0IGlzOgorLlRQCisuSQorVXNpbmcgQ1woaHlLZXJtaXQKK0ZyYW5rIGRh IENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLAorU2Vjb25kIEVkaXRpb24sIERpZ2l0YWwg UHJlc3MgLyBCdXR0ZXJ3b3J0aFwoaHlIZWluZW1hbm4sIFdvYnVybiwgTUEsIDE5OTcsIDYyMgor cGFnZXMsIElTQk4gMVwtNTU1NThcLTE2NFwtMS4gVGhpcyBpcyBhIHByaW50ZWQgYm9vay4gSXQg Y292ZXJzIENcKGh5S2VybWl0IDYuMC4KKy5UUAorVGhlIENcKGh5S2VybWl0IDcuMCBTdXBwbGVt ZW50CitodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDcwLmh0bWwKKy5UUAor VGhlIENcKGh5S2VybWl0IDguMCBTdXBwbGVtZW50CitodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tlcm1pdDgwLmh0bWwKKy5UUAorVGhlIENcKGh5S2VybWl0IDkuMCBTdXBwbGVtZW50 CitodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwKKy5QUAorVmlz aXQgQ1woaHlLZXJtaXQgaG9tZSBwYWdlOgorLnNwCisgIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKy5zcAordG8gbGVhcm4gYWJvdXQgbmV3IHZlcnNpb25zLCBC ZXRhIHRlc3RzLCBhbmQgb3RoZXIgbmV3czsgdG8KK3JlYWQgY2FzZSBzdHVkaWVzIGFuZCB0dXRv cmlhbHM7IHRvIGRvd25sb2FkIHNvdXJjZSBjb2RlLCBpbnN0YWxsIHBhY2thZ2VzLAorYW5kIHBy ZWJ1aWx0IGJpbmFyaWVzIGZvciBtYW55IHBsYXRmb3Jtcy4gQWxzbyB2aXNpdDoKKy5UUAoraHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NjcmlwdGxpYi5odG1sCitUaGUgS2VybWl0IHNj cmlwdCBsaWJyYXJ5IGFuZCB0dXRvcmlhbAorLlRQCitodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvbmV3ZmFxLmh0bWwKK1RoZSBLZXJtaXQgRkFRIChGcmVxdWVudGx5IEFza2VkIFF1ZXN0 aW9ucyBhYm91dCBLZXJtaXQpCisuVFAKK2h0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2ZhcS5odG1sCitUaGUgQ1woaHlLZXJtaXQgRkFRIChGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9u cyBhYm91dCBDXChoeUtlcm1pdCkKKy5UUAoraHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L3RlbG5ldC5odG1sCitDXChoeUtlcm1pdCBUZWxuZXQgY2xpZW50IGRvY3VtZW50YXRpb24KKy5U UAoraHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKK0NcKGh5S2Vy bWl0IHNlY3VyaXR5IGRvY3VtZW50YXRpb24gKEtlcmJlcm9zLCBTU0wvVExTLCBldGMpCisuVFAK K2h0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jdWlrc2QuaHRtbAorSW50ZXJuZXQgS2Vy bWl0IFNlcnZpY2UgdXNlciBkb2N1bWVudGF0aW9uCisuVFAKK2h0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9pa3NkLmh0bWwKK0ludGVybmV0IEtlcm1pdCBTZXJ2aWNlIGFkbWluaXN0cmF0 b3IgZG9jdW1lbnRhdGlvbgorLlRQCitodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3R1 ZGllcy5odG1sCitDYXNlIHN0dWRpZXMuCisuVFAKK2h0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9zdXBwb3J0Lmh0bWwKK1RlY2huaWNhbCBzdXBwb3J0LgorLlRQCitodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvazk1dHV0b3JpYWwuaHRtbAorS2VybWl0IDk1IHR1dG9yaWFsLgor LlRQCitjb21wLnByb3RvY29scy5rZXJtaXQubWlzYworVGhlIEtlcm1pdCBuZXdzZ3JvdXAgKHVu bW9kZXJhdGVkKS4KKy5TSCBGSUxFUworLlRQCitDT1BZSU5HLlRYVAorQ1woaHlLZXJtaXQgbGlj ZW5zZS4KKy5UUAorfi8ua2VybXJjCitJbml0aWFsaXphdGlvbiBmaWxlLgorLlRQCit+Ly5teWtl cm1yYworQ3VzdG9taXphdGlvbiBmaWxlLgorLlRQCit+Ly5rZGQKK0tlcm1pdCBkaWFsaW5nIGRp cmVjdG9yeSAoc2VlIG1hbnVhbCkuCisuVFAKK34vLmtuZAorS2VybWl0IG5ldHdvcmsgZGlyZWN0 b3J5IChzZWUgbWFudWFsKS4KKy5UUAorfi8ua3NkCitLZXJtaXQgc2VydmljZXMgZGlyZWN0b3J5 IChzZWUgbWFudWFsKS4KKy5UUAorY2FfY2VydHMucGVtCitDZXJ0aWZpY2F0ZSBBdXRob3JpdHkg Y2VydGlmY2F0ZXMgdXNlZCBmb3IgU1NMIGNvbm5lY3Rpb25zLgorLlRQCitja3VpbnMudHh0CitJ bnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBVbml4LiAgQWxzbyBhdAoraHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sLgorLlRQCitja2Nid3IudHh0CitHZW5lcmFs IENcKGh5S2VybWl0IGJ1Z3MsIGhpbnRzLCB0aXBzLgorLlRQCitja3Vid3IudHh0CitVbml4XCho eXNwZWNpZmljIENcKGh5S2VybWl0IGJ1Z3MsIGhpbnRzLCB0aXBzLgorLlRQCitja2NwbG0udHh0 CitDXChoeUtlcm1pdCBwcm9ncmFtIGxvZ2ljIG1hbnVhbC4KKy5UUAorY2tjY2ZnLnR4dAorQ1wo aHlLZXJtaXQgY29tcGlsZVwoaHl0aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKy5UUAorc3No CisoaW4geW91ciBQQVRIKSBTU0ggY29ubmVjdGlvbiBoZWxwZXIuCisuVFAKK3J6LCBzeiwgZXRj LgorKGluIHlvdXIgUEFUSCkgZXh0ZXJuYWwgcHJvdG9jb2xzIGZvciBYWVptb2RlbS4KKy5UUAor L3Zhci9zcG9vbC9sb2NrcyAob3Igd2hhdGV2ZXIpCitVVUNQIGxvY2tmaWxlIGZvciBkaWFsaW5n IG91dCAoc2VlIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMpLgorLlNIIEFVVEhPUlMKKy5UUAor U29mdHdhcmUKK0ZyYW5rIGRhIENydXogYW5kIEplZmZyZXkgRSBBbHRtYW4sCisuYnIKKzE5ODVc KGh5cHJlc2VudCwgd2l0aCBjb250cmlidXRpb25zIGZyb20gaHVuZHJlZHMgb2Ygb3RoZXJzIGFs bCBvdmVyIHRoZQord29ybGQuCisuVFAKK0RvY3VtZW50YXRpb24KK0ZyYW5rIGRhIENydXoKKy5U UAorQWRkcmVzcworLm5mCitUaGUgS2VybWl0IFByb2plY3QgXChoeSBDb2x1bWJpYSBVbml2ZXJp dHkKKzYxMiBXZXN0IDExNXRoIFN0cmVldAorTmV3IFlvcmsgTlkgMTAwMjVcLTc3OTkKK1VTQQor LmZpCisuVFAKK0VcKGh5TWFpbAora2VybWl0QGNvbHVtYmlhLmVkdQorLlRQCitXZWIKK2h0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKy5maQorLmJyCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VwdHkuYyBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1cHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uOGUwNDc2YgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1cHR5LmMKQEAgLTAsMCArMSwxOTgzIEBACitjaGFyICpj a3B0eXYgPSAiUHNldWRvdGVybWluYWwgc3VwcG9ydCwgOS4wLjEwMSwgMTMgSnVuIDIwMTEiOwor CisvKiAgQyBLIFUgUCBUIFkgIC0tICBDLUtlcm1pdCBwc2V1ZG90ZXJtaW5hbCBjb250cm9sIGZ1 bmN0aW9ucyBmb3IgVU5JWCAgKi8KKworLyogTGFzdCB1cGRhdGU6IE1vbiBKdW4gMTMgMTE6MzI6 NTIgMjAxMSAqLworCisvKgorICBDb3B5cmlnaHQgMTk5NSBieSB0aGUgTWFzc2FjaHVzZXR0cyBJ bnN0aXR1dGUgb2YgVGVjaG5vbG9neS4KKworICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyAgZG9jdW1lbnRhdGlv biBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92 aWRlZAorICB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29w aWVzIGFuZCB0aGF0IGJvdGggdGhhdAorICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisgIGRvY3VtZW50YXRpb24sIGFuZCB0 aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICBw dWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhv dXQgc3BlY2lmaWMsCisgIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIEZ1cnRoZXJtb3JlIGlm IHlvdSBtb2RpZnkgdGhpcyBzb2Z0d2FyZSB5b3UgbXVzdAorICBsYWJlbCB5b3VyIHNvZnR3YXJl IGFzIG1vZGlmaWVkIHNvZnR3YXJlIGFuZCBub3QgZGlzdHJpYnV0ZSBpdCBpbiBzdWNoIGEKKyAg ZmFzaGlvbiB0aGF0IGl0IG1pZ2h0IGJlIGNvbmZ1c2VkIHdpdGggdGhlIG9yaWdpbmFsIE0uSS5U LiBzb2Z0d2FyZS4KKyAgTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUg c3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IKKyAgYW55IHB1cnBvc2UuICBJdCBpcyBw cm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCisg IE1vZGlmaWVkIGZvciB1c2UgaW4gQy1LZXJtaXQsIGFuZCBuZXcgbWF0ZXJpYWwgYWRkZWQsIGJ5 OgorCisgIEplZmZyZXkgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICBT ZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKyAgTm92ZW1iZXIgMTk5OQorCisg IFBhcmFtZXRlcml6ZWQgZm9yIHB0eSBmaWxlIGRlc2NyaXB0b3IgYW5kIGZ1bmN0aW9uIGNvZGUs CisgIEZyYW5rIGRhIENydXosIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAg RGVjIDIwMDYgLSBTZXAgMjAwOQorKi8KKworLyoKKyAgQnVpbHQgYW5kIHRlc3RlZCBzdWNjZXNz dWxseSBvbjoKKyAgIC4gNC40QlNELCBpbmNsdWRpbmcgQlNESS9PUywgTmV0QlNELCBGcmVlQlNE LCBPcGVuQlNELCBNYWMgT1MgWAorICAgLiBBSVggNC4xIGFuZCBsYXRlcgorICAgLiBERy9VWCA1 LjRSNC4xMQorICAgLiBEaWdpdGFsIFVOSVggMy4yIGFuZCA0LjAKKyAgIC4gSFAtVVggOS4wMCBh bmQgbGF0ZXIKKyAgIC4gSVJJWCA2LjAgYW5kIGxhdGVyCisgICAuIExpbnV4CisgICAuIE1hYyBP UyBYIDEwLjQKKyAgIC4gTmVYVFNURVAgMy54CisgICAuIE9wZW5CU0QKKyAgIC4gUU5YIDQuMjUg KGV4Y2VwdCBQVFkgcHJvY2VzcyB0ZXJtaW5hdGlvbiBub3QgZGV0ZWN0ZWQpCisgICAuIFNDTyBP U1I1LjAuNQorICAgLiBTQ08gVW5peHdhcmUgNworICAgLiBTSU5JWCA1LjQyCisgICAuIFNvbGFy aXMgMi54IGFuZCA3CisgICAuIFN1bk9TIDQuMS4zCisKKyAgRmFpbHVyZXMgaW5jbHVkZToKKyAg IC4gU0NPIFVOSVggMy4ydjQuMiAoY29tcGlsZSBmYWlscyB3aXRoIHN5bnRheCBlcnJvciBpbiA8 bWVtb3J5Lmg+KQorICAgLiBIUC1VWCA4LjAwIGFuZCBlYXJsaWVyIChubyB2aGFuZ3VwIG9yIHB0 c25hbWUgcm91dGluZXMpCisqLworCisjaW5jbHVkZSAiY2tjc3ltLmgiCisjaW5jbHVkZSAiY2tj ZGViLmgiCQkJLyogVG8gcGljayB1cCBORVRQVFkgZGVmaW5pdGlvbiAqLworCisjaWZuZGVmIE5F VFBUWQkJCQkvKiBTZWxlY3RvciBmb3IgUFRZIHN1cHBvcnQgKi8KKworY2hhciAqIHB0eXZlciA9 ICJObyBQVFkgc3VwcG9ydCI7CisKKyNlbHNlICAvKiAocmVzdCBvZiB0aGlzIG1vZHVsZS4uLikg Ki8KKworY2hhciAqIHB0eXZlciA9ICJQVFkgc3VwcG9ydCA4LjAuMDE2LCAyMiBBdWcgMjAwNyI7 CisKKy8qIFRoZXNlIHdpbGwgbm8gZG91YnQgbmVlZCBhZGp1c3RtZW50Li4uICovCisKKyNpZm5k ZWYgTkVYVAorI2RlZmluZSBIQVZFX1NFVFNJRAorI2VuZGlmIC8qIE5FWFQgKi8KKyNkZWZpbmUg SEFWRV9LSUxMUEcKKyNkZWZpbmUgSEFWRV9UVFlOQU1FCisjZGVmaW5lIEhBVkVfV0FJVFBJRAor CisjaWZkZWYgU1VOT1M0MQorI2RlZmluZSBCU0Q0NE9SUE9TSVgKKyNlbmRpZgkvKiBTVU5PUzQx ICovCisKKyNpZm5kZWYgVVNFX1RFUk1JTworI2lmZGVmIExJTlVYCisjZGVmaW5lIFVTRV9URVJN SU8KKyNlbHNlCisjaWZkZWYgQVRUU1YKKyNkZWZpbmUgVVNFX1RFUk1JTworI2Vsc2UKKyNpZmRl ZiBIUFVYCisjZGVmaW5lIFVTRV9URVJNSU8KKyNlbHNlCisjaWZkZWYgQUlYCisjZGVmaW5lIFVT RV9URVJNSU8KKyNlbHNlCisjaWZkZWYgQlNENDRPUlBPU0lYCisjZGVmaW5lIFVTRV9URVJNSU8K KyNlbHNlCisjaWZkZWYgSVJJWDYwCisjZGVmaW5lIFVTRV9URVJNSU8KKyNlbHNlCisjaWZkZWYg UU5YCisjZGVmaW5lIFVTRV9URVJNSU8KKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBJUklY NjAgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyNlbmRpZiAvKiBBSVggKi8KKyNlbmRp ZiAvKiBIUFVYICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBMSU5VWCAqLworI2Vu ZGlmIC8qIFVTRV9URVJNSU8gKi8KKworI2lmZGVmIFFOWAorI2luY2x1ZGUgPGZjbnRsLmg+Cisj ZW5kaWYgLyogUU5YICovCisKKyNpZmRlZiBVU0VfVEVSTUlPCisjZGVmaW5lIFBPU0lYX1RFUk1J T1MJCQkvKiBTZWVtcyB0byBiZSBhIG1pc25vbWVyICovCisjZW5kaWYgLyogVVNFX1RFUk1JTyAq LworCisjaWZkZWYgTkVYVAorI2lmbmRlZiBHRVRQR1JQX09ORUFSRworI2RlZmluZSBHRVRQR1JQ X09ORUFSRworI2VuZGlmIC8qIEdFVFBHUlBfT05FQVJHICovCisjZW5kaWYgLyogTkVYVCAqLwor CisjaWZkZWYgV0FOVF9VVE1QCQkJLyogU2VlIGNrdXB0eS5oICovCisvKgorICBXQU5UX1VUTVAg aXMgbm90IGRlZmluZWQgYmVjYXVzZSAoYSkgdGhlIHV0bXAvd3RtcCBqdW5rIGlzIHRoZSBtb3N0 CisgIG5vbnBvcnRhYmxlIHBhcnQgb2YgdGhpcyBtb2R1bGUsIGFuZCAoYikgd2UncmUgbm90IGxv Z2dpbmcgYW55Ym9keQorICBpbiwgd2UncmUganVzdCBydW5uaW5nIGEgcHJvY2VzcywgYW5kIGRv bid0IG5lZWQgdG8gd3JpdGUgdXRtcC93dG1wIHJlY29yZHMuCisqLworI2lmbmRlZiBIQVZFX1NF VFVUWEVOVAkJCS8qIFdobyBoYXMgPHV0bXB4Lmg+ICovCisjaWZkZWYgU09MQVJJUworI2RlZmlu ZSBIQVZFX1NFVFVUWEVOVAorI2Vsc2UKKyNpZmRlZiBJUklYNjAKKyNkZWZpbmUgSEFWRV9TRVRV VFhFTlQKKyNlbHNlCisjaWZkZWYgQ0tfU0NPVjUKKyNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKKyNl bHNlCisjaWZkZWYgSFBVWDEwCisjZGVmaW5lIEhBVkVfU0VUVVRYRU5UCisjZWxzZQorI2lmZGVm IFVOSVhXQVJFCisjZGVmaW5lIEhBVkVfU0VUVVRYRU5UCisjZWxzZQorI2lmZGVmIElSSVg2MAor I2RlZmluZSBIQVZFX1NFVFVUWEVOVAorI2VuZGlmIC8qIElSSVg2MCAqLworI2VuZGlmIC8qIFVO SVhXQVJFICovCisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNl bmRpZiAvKiBJUklYNjAgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5kaWYgLyogSEFWRV9T RVRVVFhFTlQgKi8KKworI2lmbmRlZiBIQVZFX1VUSE9TVAkJCS8qIERvZXMgdXRtcCBpbmNsdWRl IHV0X2hvc3RbXT8gKi8KKyNpZmRlZiBIQVZFX1NFVFVUWEVOVAkJCS8qIHV0bXB4IGFsd2F5cyBk b2VzICovCisjZGVmaW5lIEhBVkVfVVRIT1NUCisjZWxzZQorI2lmZGVmIExJTlVYCQkJCS8qIExp bnV4IGRvZXMgKi8KKyNkZWZpbmUgSEFWRV9VVEhPU1QKKyNlbHNlCisjaWZkZWYgU1VOT1M0CQkJ CS8qIFN1bk9TIGRvZXMgKi8KKyNkZWZpbmUgSEFWRV9VVEhPU1QKKyNlbHNlCisjaWZkZWYgQUlY NDEJCQkJLyogQUlYIDQuMSBhbmQgbGF0ZXIgZG8gKi8KKyNkZWZpbmUgSEFWRV9VVEhPU1QKKyNl bmRpZiAvKiBBSVg0MSAqLworI2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIExJTlVYICov CisjZW5kaWYgLyogSEFWRV9TRVRVVFhFTlQgKi8KKyNlbmRpZiAvKiBIQVZFX1VUSE9TVCAqLwor CisjaWZuZGVmIEhBVkVfVVRfSE9TVAorI2lmbmRlZiBOT19VVF9IT1NUCisjZGVmaW5lIE5PX1VU X0hPU1QKKyNlbmRpZiAvKiBOT19VVF9IT1NUICovCisjZW5kaWYgLyogSEFWRV9VVF9IT1NUICov CisKKyNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KKworI2lmZGVmIExJTlVYCisjZGVmaW5lIENLX1ZI QU5HVVAKKyNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0gKKyNkZWZpbmUgSEFWRV9HRVRVVEVOVAor I2RlZmluZSBIQVZFX1NFVFVURU5UCisjZGVmaW5lIEhBVkVfVVBEV1RNUAorI2VuZGlmIC8qIExJ TlVYICovCisKKyNpZmRlZiBIUFVYMTAKKyNkZWZpbmUgQ0tfVkhBTkdVUAorI2RlZmluZSBWSEFO R19GSVJTVAorI2RlZmluZSBIQVZFX1BUU05BTUUKKyNpZm5kZWYgSEFWRV9QVFlUUkFQCisjZGVm aW5lIEhBVkVfUFRZVFJBUAorI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworI2Vsc2UKKyNpZmRl ZiBIUFVYOQorI2RlZmluZSBDS19WSEFOR1VQCisjZGVmaW5lIFZIQU5HX0ZJUlNUCisjZGVmaW5l IEhBVkVfUFRTTkFNRQorI2lmbmRlZiBIQVZFX1BUWVRSQVAKKyNkZWZpbmUgSEFWRV9QVFlUUkFQ CisjZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCisjZW5kaWYgLyogSFBVWDkgKi8KKyNlbmRpZiAv KiBIUFVYMTAgKi8KKworI2lmZGVmIFNVTk9TNAorI2RlZmluZSBDS19WSEFOR1VQCisjZGVmaW5l IE5PX1VUX1BJRAorI2RlZmluZSBWSEFOR19GSVJTVAorI2VuZGlmIC8qIFNVTk9TNCAqLworCisj aWZkZWYgSVJJWDYwCisjZGVmaW5lIENLX1ZIQU5HVVAKKyNkZWZpbmUgSEFWRV9fR0VUUFRZCisj ZW5kaWYgLyogSVJJWDYwICovCisKKyNpZmRlZiBTSU5JWAorI2RlZmluZSBIQVZFX1NUUkVBTVMK KyNkZWZpbmUgSEFWRV9HUkFOVFBUCisjZGVmaW5lIEhBVkVfUFRTTkFNRQorI2RlZmluZSBQVVNI X1BURU0KKyNkZWZpbmUgUFVTSF9MRFRFUk0KKyNkZWZpbmUgUFVTSF9UVENPTVBBVAorI2VuZGlm IC8qIFNJTklYICovCisKKyNpZmRlZiB1bHRyaXgKKyNkZWZpbmUgTVVTVF9TRVRQR1JQCisjZW5k aWYgLyogdWx0cml4ICovCisKKyNpZmRlZiBRTlgKKyNkZWZpbmUgTVVTVF9TRVRQR1JQCisjZGVm aW5lIE5PX0RFVlRUWQorI2RlZmluZSBJTklUX1NQVFkKKyNlbmRpZiAvKiBRTlggKi8KKworI2lm ZGVmIExJTlVYCisjaWZkZWYgSEFWRV9QVE1YCisjZGVmaW5lIEhBVkVfR1JBTlRQVAorI2RlZmlu ZSBIQVZFX1BUU05BTUUKKyNlbmRpZiAvKiBIQVZFX1BUTVggKi8KKyNlbHNlCisjaWZkZWYgSEFW RV9TVFJFQU1TCisjZGVmaW5lIEhBVkVfUFRNWAorI2VuZGlmIC8qIEhBVkVfU1RSRUFNUyAqLwor I2VuZGlmIC8qIExJTlVYICovCisKKyNpbmNsdWRlICJja3VwdHkuaCIKKworI2lmZGVmIFBUWU5P QkxPQ0sKKyNpZm5kZWYgT19OREVMQVkKKyNpZmRlZiBPX05PTkJMT0NLCisjZGVmaW5lIE9fTkRF TEFZIE9fTk9OQkxPQ0sKKyNlbmRpZiAvKiBPX05PTkJMT0NLICovCisjZW5kaWYgLyogT19OREVM QVkgKi8KKyNlbHNlIC8qIFBUWU5PQkxPQ0sgKi8KKyNpZmRlZiBPX05ERUxBWQorI3VuZGVmIE9f TkRFTEFZCisjZW5kaWYgLyogT19OREVMQVkgKi8KKyNkZWZpbmUgT19OREVMQVkgMAorI2VuZGlm IC8qIFBUWU5PQkxPQ0sgKi8KKworI2lmbmRlZiBPTkxDUgorI2RlZmluZSBPTkxDUiAwCisjZW5k aWYgLyogT05MQ1IgKi8KKworI2lmZGVmIENLX1dBSVRfSAorI2luY2x1ZGUgPHN5cy93YWl0Lmg+ CisjZW5kaWYgLyogQ0tfV0FJVF9IICovCisKKyNpZmRlZiBTVFJFQU1TUFRZCisjaWZuZGVmIElO SVRfU1BUWQorI2RlZmluZSBJTklUX1NQVFkKKyNlbmRpZiAvKiBJTklUX1NQVFkgKi8KKworI2lu Y2x1ZGUgPHN5cy9zdHJlYW0uaD4KKyNpbmNsdWRlIDxzdHJvcHRzLmg+CisjaW5jbHVkZSA8dGVy bWlvLmg+CisKKy8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgdGhlIEJTRCB2ZXJzaW9uICovCisK KyNpZmRlZiBIQVZFX1NZU19UVFlfSAorI2luY2x1ZGUgIi91c3IvaW5jbHVkZS9zeXMvdHR5Lmgi CisjZW5kaWYgLyogSEFWRV9TWVNfVFRZX0ggKi8KKworI2lmZGVmIEhBU19QVFlWQVIJCQkvKiBX aGVyZSBpcyB0aGlzIHNldD8gKi8KKworI2luY2x1ZGUgPHN5cy9wdHl2YXIuaD4KKworI2Vsc2Ug LyogSEFTX1BUWVZBUiAqLworCisjaWZuZGVmIFRJT0NQS1RfRkxVU0hXUklURQorI2RlZmluZSBU SU9DUEtUX0ZMVVNIV1JJVEUgMHgwMgorI2RlZmluZSBUSU9DUEtUX05PU1RPUCAgICAgMHgxMAor I2RlZmluZSBUSU9DUEtUX0RPU1RPUCAgICAgMHgyMAorI2RlZmluZSBUSU9DUEtUX0lPQ1RMICAg ICAgMHg0MAorI2VuZGlmIC8qIFRJT0NQS1RfRkxVU0hXUklURSAqLworCisjZW5kaWYgLyogSEFT X1BUWVZBUiAqLworCisjaWZkZWYgSEFWRV9UVFlfSAorI2luY2x1ZGUgPHR0eS5oPgorI2VuZGlm IC8qIEhBVkVfVFRZX0ggKi8KKworLyoKKyAgQmVjYXVzZSBvZiB0aGUgd2F5IHB0eWlidWYgaXMg dXNlZCB3aXRoIHN0cmVhbXMgbWVzc2FnZXMsIHdlIG5lZWQKKyAgcHR5aWJ1ZisxIHRvIGJlIG9u IGEgZnVsbC13b3JkIGJvdW5kYXJ5LiAgVGhlIGZvbGxvd2luZyB3ZWlyZG5lc3MKKyAgaXMgc2lt cGx5IHRvIG1ha2UgdGhhdCBoYXBwZW4uCisqLworbG9uZyBwdHlpYnVmYnVmW0JVRlNJWi9zaXpl b2YobG9uZykrMV07CitjaGFyICpwdHlpYnVmID0gKChjaGFyICopJnB0eWlidWZidWZbMV0pLTE7 CitjaGFyICpwdHlpcCA9ICgoY2hhciAqKSZwdHlpYnVmYnVmWzFdKS0xOworY2hhciBwdHlpYnVm MltCVUZTSVpdOwordW5zaWduZWQgY2hhciBjdGxidWZbQlVGU0laXTsKK3N0cnVjdCBzdHJidWYg c3RyYnVmYywgc3RyYnVmZDsKKworaW50IHJlYWRzdHJlYW0oKTsKKworI2Vsc2UgIC8qICEgU1RS RUFNU1BUWSAqLworCisvKiBJL08gZGF0YSBidWZmZXJzLCBwb2ludGVycywgYW5kIGNvdW50ZXJz LiAqLworCitjaGFyIHB0eWlidWZbQlVGU0laXSwgKnB0eWlwID0gcHR5aWJ1ZjsKK2NoYXIgcHR5 aWJ1ZjJbQlVGU0laXTsKKworI2VuZGlmIC8qICEgU1RSRUFNU1BUWSAqLworCisjaWZuZGVmIFVT RV9URVJNSU8KK3N0cnVjdCB0ZXJtYnVmIHsKKyAgICBzdHJ1Y3Qgc2d0dHliIHNnOworICAgIHN0 cnVjdCB0Y2hhcnMgdGM7CisgICAgc3RydWN0IGx0Y2hhcnMgbHRjOworICAgIGludCBzdGF0ZTsK KyAgICBpbnQgbGZsYWdzOworfSB0ZXJtYnVmLCB0ZXJtYnVmMjsKKworI2RlZmluZSBjZnNldG9z cGVlZCh0cCx2YWwpICh0cCktPnNnLnNnX29zcGVlZCA9ICh2YWwpCisjZGVmaW5lIGNmc2V0aXNw ZWVkKHRwLHZhbCkgKHRwKS0+c2cuc2dfaXNwZWVkID0gKHZhbCkKKyNkZWZpbmUgY2ZnZXRvc3Bl ZWQodHApICAgICAodHApLT5zZy5zZ19vc3BlZWQKKyNkZWZpbmUgY2ZnZXRpc3BlZWQodHApICAg ICAodHApLT5zZy5zZ19pc3BlZWQKKworI2Vsc2UgIC8qIFVTRV9URVJNSU8gKi8KKworI2lmZGVm IFNZU1ZfVEVSTUlPCisjZGVmaW5lIHRlcm1pb3MgdGVybWlvCisjZW5kaWYgLyogU1lTVl9URVJN SU8gKi8KKworI2lmbmRlZiBUQ1NBTk9XCisKKyNpZmRlZiBUQ1NFVFMKKworI2RlZmluZSBUQ1NB Tk9XIFRDU0VUUworI2RlZmluZSBUQ1NBRFJBSU4gVENTRVRTVworI2RlZmluZSB0Y2dldGF0dHIo ZiwgdCkgaW9jdGwoZiwgVENHRVRTLCAoY2hhciAqKXQpCisKKyNlbHNlIC8qIFRDU0VUUyAqLwor CisjaWZkZWYgVENTRVRBCisjZGVmaW5lIFRDU0FOT1cgVENTRVRBCisjZGVmaW5lIFRDU0FEUkFJ TiBUQ1NFVEFXCisjZGVmaW5lIHRjZ2V0YXR0cihmLHQpIGlvY3RsKGYsVENHRVRBLChjaGFyICop dCkKKyNlbHNlIC8qIFRDU0VUQSAqLworI2RlZmluZSBUQ1NBTk9XIFRJT0NTRVRBCisjZGVmaW5l IFRDU0FEUkFJTiBUSU9DU0VUQVcKKyNkZWZpbmUgdGNnZXRhdHRyKGYsdCkgaW9jdGwoZixUSU9D R0VUQSwoY2hhciAqKXQpCisjZW5kaWYgLyogVENTRVRBICovCisKKyNlbmRpZiAvKiBUQ1NFVFMg Ki8KKworI2RlZmluZSB0Y3NldGF0dHIoZixhLHQpIGlvY3RsKGYsYSx0KQorI2RlZmluZSBjZnNl dG9zcGVlZCh0cCx2YWwpICh0cCktPmNfY2ZsYWcgJj0gfkNCQVVEOyh0cCktPmNfY2ZsYWd8PSh2 YWwpCisjZGVmaW5lIGNmZ2V0b3NwZWVkKHRwKSAoKHRwKS0+Y19jZmxhZyAmIENCQVVEKQorCisj aWZkZWYgQ0lCQVVECisjZGVmaW5lIGNmc2V0aXNwZWVkKHRwLHZhbCkgXAorICh0cCktPmNfY2Zs YWcgJj0gfkNJQkFVRDsgKHRwKS0+Y19jZmxhZyB8PSAoKHZhbCk8PElCU0hJRlQpCisjZGVmaW5l IGNmZ2V0aXNwZWVkKHRwKSAoKCh0cCktPmNfY2ZsYWcgJiBDSUJBVUQpPj5JQlNISUZUKQorI2Vs c2UgLyogQ0lCQVVEICovCisjZGVmaW5lIGNmc2V0aXNwZWVkKHRwLHZhbCkgKHRwKS0+Y19jZmxh ZyAmPSB+Q0JBVUQ7ICh0cCktPmNfY2ZsYWd8PSh2YWwpCisjZGVmaW5lIGNmZ2V0aXNwZWVkKHRw KSAoKHRwKS0+Y19jZmxhZyAmIENCQVVEKQorI2VuZGlmIC8qIENJQkFVRCAqLworCisjZW5kaWYg LyogVENTQU5PVyAqLworCisjaWZkZWYgSEFWRV9PUEVOUFRZCisjaW5jbHVkZSA8cHR5Lmg+Cisj ZW5kaWYKKworc3RydWN0IHRlcm1pb3MgdGVybWJ1ZiwgdGVybWJ1ZjI7ICAgICAgIC8qIHB0eSBj b250cm9sIHN0cnVjdHVyZSAqLworCisjaWZkZWYgSU5JVF9TUFRZCitzdGF0aWMgaW50IHNwdHkg PSAtMTsKKyNlbmRpZiAvKiBJTklUX1NQVFkgKi8KKworI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8K KworI2lmZGVmIFFOWAkJCQkvKiAyOTkgKi8KKyNpZm5kZWYgSVhBTlkKKyNkZWZpbmUgSVhBTlkg MAorI2VuZGlmCS8qIElYQU5ZICovCisjZW5kaWYJLyogUU5YICovCisKK3N0YXRpYyBpbnQgbXNn ID0gMDsKKworLyogVmFyaWFibGVzIGF2YWlsYWJsZSB0byBvdGhlciBtb2R1bGVzICovCisKK2lu dCBwdHlfZm9ya19hY3RpdmUgPSAwOwkJLyogcHR5IGZvcmsgaXMgYWN0aXZlICovCitQSURfVCBw dHlfZm9ya19waWQgPSAtMTsJCS8qIHB0eSBmb3JrIHBpZCAqLworaW50IHB0eV9zbGF2ZV9mZCA9 IC0xOwkJCS8qIHB0eSBzbGF2ZSBmaWxlIGRlc2NyaXB0b3IgKi8KK2ludCBwdHlfbWFzdGVyX2Zk ID0gLTE7CQkJLyogcHR5IG1hc3RlciBmaWxlIGRlc2NyaXB0b3IgKi8KKworLyogdGVybWJ1ZiBy b3V0aW5lcyAoYmVnaW4pICovCisvKgorICBpbml0X3Rlcm1idWYoKQorICBjb3B5X3Rlcm1idWYo Y3ApCisgIHNldF90ZXJtYnVmKCkKKworICBUaGVzZSB0aHJlZSByb3V0aW5lcyBhcmUgdXNlZCB0 byBnZXQgYW5kIHNldCB0aGUgInRlcm1idWYiIHN0cnVjdHVyZQorICB0byBhbmQgZnJvbSB0aGUg a2VybmVsLiAgaW5pdF90ZXJtYnVmKCkgZ2V0cyB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAgY29w eV90ZXJtYnVmKCkgaGFuZHMgaW4gYSBuZXcgInRlcm1idWYiIHRvIHdyaXRlIHRvIHRoZSBrZXJu ZWwsIGFuZAorICBzZXRfdGVybWJ1ZigpIHdyaXRlcyB0aGUgc3RydWN0dXJlIGludG8gdGhlIGtl cm5lbC4KKyovCitWT0lECitpbml0X3Rlcm1idWYoZmQpIGludCBmZDsgeworICAgIGludCB0dHlm ZDsKKyAgICBpbnQgcmMgPSAwOworCisgICAgdHR5ZmQgPSBmZDsKKworI2lmZGVmIEhBVkVfU1RS RUFNUworICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBIQVZFX1NUUkVBTVMiLCIiLDApOwor I2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgSEFWRV9TVFJFQU1TIE5PVCBERUZJ TkVEIiwiIiwwKTsKKyNlbmRpZgkvKiBIQVZFX1NUUkVBTVMgKi8KKyNpZmRlZiBTVFJFQU1TUFRZ CisgICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIFNUUkVBTVNQVFkiLCIiLDApOworI2Vsc2UK KyAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgU1RSRUFNU1BUWSBOT1QgREVGSU5FRCIsIiIs MCk7CisjZW5kaWYJLyogU1RSRUFNU1BUWSAqLworI2lmZGVmIElOSVRfU1BUWQorICAgIGRlYnVn KEYxMDAsImluaXRfdGVybWJ1ZiBJTklUX1NQVFkiLCIiLDApOworI2Vsc2UKKyAgICBkZWJ1ZyhG MTAwLCJpbml0X3Rlcm1idWYgSU5JVF9TUFRZIE5PVCBERUZJTkVEIiwiIiwwKTsKKyNlbmRpZgkv KiBJTklUX1NQVFkgKi8KKworICAgIGRlYnVnKEYxMDEsImluaXRfdGVybWJ1ZiB0dHlmZCIsIiIs dHR5ZmQpOworI2lmZGVmIElOSVRfU1BUWQorICAgIGRlYnVnKEYxMDEsImluaXRfdGVybWJ1ZiBz cHR5IiwiIixzcHR5KTsKKyNlbmRpZgkvKiBJTklUX1NQVFkgKi8KKworICAgIG1lbXNldCgmdGVy bWJ1ZiwwLHNpemVvZih0ZXJtYnVmKSk7CisgICAgbWVtc2V0KCZ0ZXJtYnVmMiwwLHNpemVvZih0 ZXJtYnVmMikpOworI2lmbmRlZglVU0VfVEVSTUlPCisgICAgcmMgPSBpb2N0bCh0dHlmZCwgVElP Q0dFVFAsIChjaGFyICopJnRlcm1idWYuc2cpOworICAgIHJjIHw9IGlvY3RsKHR0eWZkLCBUSU9D R0VUQywgKGNoYXIgKikmdGVybWJ1Zi50Yyk7CisgICAgcmMgfD0gaW9jdGwodHR5ZmQsIFRJT0NH TFRDLCAoY2hhciAqKSZ0ZXJtYnVmLmx0Yyk7CisjaWZkZWYgVElPQ0dTVEFURQorICAgIHJjIHw9 IGlvY3RsKHR0eWZkLCBUSU9DR1NUQVRFLCAoY2hhciAqKSZ0ZXJtYnVmLnN0YXRlKTsKKyNlbmRp ZiAvKiBUSU9DR1NUQVRFICovCisjZWxzZSAvKiBVU0VfVEVSTUlPICovCisgICAgZXJybm8gPSAw OworI2lmZGVmIElOSVRfU1BUWQorICAgIHJjID0gdGNnZXRhdHRyKHNwdHksICZ0ZXJtYnVmKTsK KyAgICBkZWJ1ZyhGMTExLCJpbml0X3Rlcm1idWYoKSB0Y2dldGF0dHIoc3B0eSkiLGNraXRvYShy YyksZXJybm8pOworI2Vsc2UKKyAgICByYyA9IHRjZ2V0YXR0cih0dHlmZCwgJnRlcm1idWYpOwor ICAgIGRlYnVnKEYxMTEsImluaXRfdGVybWJ1ZigpIHRjZ2V0YXR0cih0dHlmZCkiLGNraXRvYShy YyksZXJybm8pOworI2VuZGlmIC8qIElOSVRfU1BUWSAqLworI2VuZGlmIC8qIFVTRV9URVJNSU8g Ki8KKyAgICBpZiAoIXJjKQorICAgICAgdGVybWJ1ZjIgPSB0ZXJtYnVmOworfQorCisjaWZkZWYg VElPQ1BLVF9JT0NUTAorVk9JRAorY29weV90ZXJtYnVmKGNwLCBsZW4pIGNoYXIgKmNwOyBpbnQg bGVuOyB7CisgICAgaWYgKGxlbiA+IHNpemVvZih0ZXJtYnVmKSkKKyAgICAgIGxlbiA9IHNpemVv Zih0ZXJtYnVmKTsKKyAgICBtZW1jcHkoKGNoYXIgKikmdGVybWJ1ZiwgY3AsIGxlbik7CisgICAg dGVybWJ1ZjIgPSB0ZXJtYnVmOworfQorI2VuZGlmIC8qIFRJT0NQS1RfSU9DVEwgKi8KKworVk9J RAorc2V0X3Rlcm1idWYoZmQpIGludCBmZDsgewkJLyogT25seSBtYWtlIHRoZSBuZWNlc3Nhcnkg Y2hhbmdlcy4gKi8KKyAgICBpbnQgeDsKKyAgICBpbnQgdHR5ZmQ7CisgICAgdHR5ZmQgPSBmZDsK KworICAgIGRlYnVnKEYxMDEsInNldF90ZXJtYnVmIHR0eWZkIiwiIix0dHlmZCk7CisjaWZkZWYg SU5JVF9TUFRZCisgICAgZGVidWcoRjEwMSwic2V0X3Rlcm1idWYgc3B0eSIsIiIsc3B0eSk7Cisj ZW5kaWYJLyogSU5JVF9TUFRZICovCisKKyNpZm5kZWYJVVNFX1RFUk1JTworICAgIGRlYnVnKEYx MDAsInNldF90ZXJtYnVmIFVTRV9URVJNSU8iLCIiLDApOworICAgIGlmIChtZW1jbXAoKGNoYXIg KikmdGVybWJ1Zi5zZywgKGNoYXIgKikmdGVybWJ1ZjIuc2csIHNpemVvZih0ZXJtYnVmLnNnKSkp CisgICAgICBpb2N0bCh0dHlmZCwgVElPQ1NFVE4sIChjaGFyICopJnRlcm1idWYuc2cpOworICAg IGlmIChtZW1jbXAoKGNoYXIgKikmdGVybWJ1Zi50YywgKGNoYXIgKikmdGVybWJ1ZjIudGMsIHNp emVvZih0ZXJtYnVmLnRjKSkpCisgICAgICBpb2N0bCh0dHlmZCwgVElPQ1NFVEMsIChjaGFyICop JnRlcm1idWYudGMpOworICAgIGlmIChtZW1jbXAoKGNoYXIgKikmdGVybWJ1Zi5sdGMsIChjaGFy ICopJnRlcm1idWYyLmx0YywKKwkgICAgICAgc2l6ZW9mKHRlcm1idWYubHRjKSkpCisgICAgICBp b2N0bCh0dHlmZCwgVElPQ1NMVEMsIChjaGFyICopJnRlcm1idWYubHRjKTsKKyAgICBpZiAodGVy bWJ1Zi5sZmxhZ3MgIT0gdGVybWJ1ZjIubGZsYWdzKQorICAgICAgaW9jdGwodHR5ZmQsIFRJT0NM U0VULCAoY2hhciAqKSZ0ZXJtYnVmLmxmbGFncyk7CisjZWxzZSAgLyogVVNFX1RFUk1JTyAqLwor ICAgIHggPSBtZW1jbXAoKGNoYXIgKikmdGVybWJ1ZiwgKGNoYXIgKikmdGVybWJ1ZjIsIHNpemVv Zih0ZXJtYnVmKSk7CisgICAgZGVidWcoRjEwMSwic2V0X3Rlcm1idWYgIVVTRV9URVJNSU8gbWVt Y21wIiwiIix4KTsKKyAgICB4ID0gMTsJCQkJLyogRm9yY2UgdGhpcyAqLworICAgIGlmICh4KSB7 CisJaW50IHg7CisJZXJybm8gPSAwOworI2lmZGVmIElOSVRfU1BUWQorCWRlYnVnKEYxMDAsInNl dF90ZXJtYnVmIElOSVRfU1BUWSIsIiIsMCk7CisJeCA9IHRjc2V0YXR0cihzcHR5LCBUQ1NBTk9X LCAmdGVybWJ1Zik7CisJZGVidWcoRjExMSwic2V0X3Rlcm1idWYgdGNzZXRhdHRyKHNwdHkpIixj a2l0b2EoeCksZXJybm8pOworI2Vsc2UKKwlkZWJ1ZyhGMTAwLCJzZXRfdGVybWJ1ZiAhSU5JVF9T UFRZIiwiIiwwKTsKKwl4ID0gdGNzZXRhdHRyKHR0eWZkLCBUQ1NBTk9XLCAmdGVybWJ1Zik7CisJ ZGVidWcoRjExMSwic2V0X3Rlcm1idWYgdGNzZXRhdHRyKHR0eWZkKSIsY2tpdG9hKHgpLGVycm5v KTsKKyNlbmRpZiAvKiBJTklUX1NQVFkgKi8KKyAgICB9CisjZW5kaWYgLyogVVNFX1RFUk1JTyAq LworfQorLyogdGVybWJ1ZiByb3V0aW5lcyAoZW5kKSAqLworCitWT0lECitwdHlpbnRfdmhhbmd1 cCgpIHsKKyNpZmRlZiBDS19WSEFOR1VQCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgc3RydWN0 IHNpZ2FjdGlvbiBzYTsKKyAgICAvKiBJbml0aWFsaXplICJzYSIgc3RydWN0dXJlLiAqLworICAg IHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKyAgICBzYS5zYV9mbGFncyA9IDA7CisgICAgc2Eu c2FfaGFuZGxlciA9IFNJR19JR047CisgICAgc2lnYWN0aW9uKFNJR0hVUCwgJnNhLCAoc3RydWN0 IHNpZ2FjdGlvbiAqKTApOworICAgIHZoYW5ndXAoKTsKKyAgICBzYS5zYV9oYW5kbGVyID0gU0lH X0RGTDsKKyAgICBzaWdhY3Rpb24oU0lHSFVQLCAmc2EsIChzdHJ1Y3Qgc2lnYWN0aW9uICopMCk7 CisjZWxzZSAvKiBDS19QT1NJWF9TSUcgKi8KKyAgICBzaWduYWwoU0lHSFVQLFNJR19JR04pOwor ICAgIHZoYW5ndXAoKTsKKyAgICBzaWduYWwoU0lHSFVQLFNJR19ERkwpOworI2VuZGlmIC8qIENL X1BPU0lYX1NJRyAqLworI2VuZGlmIC8qIENLX1ZIQU5HVVAgKi8KK30KKworLyoKKyAgVGhpcyBy b3V0aW5lIGlzIGNhbGxlZCB0d2ljZS4gIEl0J3Mgbm90IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQg dGhhdCB0aGUKKyAgc2V0c2lkKCkgb3IgVElPQ1NDVFRZIGlvY3RscyBzdWNjZWVkICh0aGV5IG1h eSBub3QgdGhlIHNlY29uZCB0aW1lKSwgYnV0CisgIHJhdGhlciB0aGF0IHdlIGhhdmUgYSBjb250 cm9sbGluZyB0ZXJtaW5hbCBhdCB0aGUgZW5kLiAgSXQgaXMgYXNzdW1lZCB0aGF0CisgIHZoYW5n dXAgZG9lc24ndCBleGlzdCBhbmQgY29uZnVzZSB0aGUgcHJvY2VzcydzIG5vdGlvbiBvZiBjb250 cm9sbGluZworICB0ZXJtaW5hbCBvbiBhbnkgc3lzdGVtIHdpdGhvdXQgVElPQ05PVFRZLiAgVGhh dCBpcywgZWl0aGVyIHZoYW5ndXAoKSBsZWF2ZXMKKyAgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFs IGluIHRhY3QsIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24gY29tcGxldGVseSwgb3IgdGhlCisgIHN5 c3RlbSBwcm92aWRlcyBUSU9DTk9UVFkgdG8gZ2V0IHRoaW5ncyBiYWNrIGludG8gYSByZWFzb25h YmxlIHN0YXRlLiAgSW4KKyAgcHJhY3RpY2UsIHZoYW5ndXAoKSBlaXRoZXIgYnJlYWtzIHRoZSBh c3NvY2lhdGlvbiBjb21wbGV0ZWx5IG9yIGRvZXNuJ3QKKyAgZWZmZWN0IGNvbnRyb2xsaW5nIHRl cm1pbmFscywgc28gdGhpcyBjb25kaXRpb24gaXMgbWV0LgorKi8KK2xvbmcKK3B0eWludF92b2lk X2Fzc29jaWF0aW9uKCkgeworICAgIGludCBjb25fZmQ7CisjaWZkZWYgSEFWRV9TRVRTSUQKKyAg ICBkZWJ1ZyhGMTEwLAorCSAgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkiLAorCSAgInNldHNp ZCgpIiwKKwkgIDAKKwkgICk7CisgICAgc2V0c2lkKCk7CisjZW5kaWYgLyogSEFWRV9TRVRTSUQg Ki8KKworI2lmbmRlZiBOT19ERVZUVFkKKyAgICAvKiBWb2lkIHR0eSBhc3NvY2lhdGlvbiBmaXJz dCAqLworI2lmZGVmIFRJT0NOT1RUWQorICAgIGNvbl9mZCA9IG9wZW4oIi9kZXYvdHR5IiwgT19S RFdSKTsKKyAgICBkZWJ1ZyhGMTExLAorCSAgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgb3Bl bigvZGV2L3R0eSxPX1JEV1IpIiwKKwkgICIvZGV2L3R0eSIsCisJICBjb25fZmQpOworICAgIGlm IChjb25fZmQgPj0gMCkgeworICAgICAgICBpb2N0bChjb25fZmQsIFRJT0NOT1RUWSwgMCk7Cisg ICAgICAgIGNsb3NlKGNvbl9mZCk7CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgZWxzZSBkZWJ1 ZyhGMTAxLCAicHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSBvcGVuKCkgZXJybm8iLCIiLGVycm5v KTsKKyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIFRJT0NOT1RUWSAqLworI2VuZGlmIC8q IE5PX0RFVlRUWSAqLworICAgIHJldHVybigwKTsKK30KKworLyogUElEIG1heSBiZSB6ZXJvIGZv ciB1bmtub3duLiovCisKK2xvbmcKK3B0eV9jbGVhbnVwKHNsYXZlLCBwaWQsIHVwZGF0ZV91dG1w KSBjaGFyICpzbGF2ZTsgaW50IHBpZDsgaW50IHVwZGF0ZV91dG1wOyB7CisjaWZkZWYgVkhBTkdf TEFTVAorICAgIGludCByZXR2YWwsIGZkOworI2VuZGlmIC8qIFZIQU5HX0xBU1QgKi8KKworICAg IGRlYnVnKEYxMTEsInB0eV9jbGVhbnVwKCkiLHNsYXZlLHBpZCk7CisjaWZkZWYgV0FOVF9VVE1Q CisgICAgaWYgKHVwZGF0ZV91dG1wKQorICAgICAgcHR5X3VwZGF0ZV91dG1wKFBUWV9ERUFEX1BS T0NFU1MsCisJCSAgICAgIDAsCisJCSAgICAgICIiLAorCQkgICAgICBzbGF2ZSwKKwkJICAgICAg KGNoYXIgKikwLAorCQkgICAgICBQVFlfVVRNUF9VU0VSTkFNRV9WQUxJRAorCQkgICAgICApOwor I2VuZGlmIC8qIFdBTlRfVVRNUCAqLworCisjaWZkZWYgU0VUVUlECisgICAgY2htb2Qoc2xhdmUs IDA2NjYpOworICAgIGNob3duKHNsYXZlLCAwLCAwKTsKKyNlbmRpZiAvKiBTRVRVSUQgKi8KKwor I2lmZGVmIEhBVkVfUkVWT0tFCisgICAgcmV2b2tlKHNsYXZlKTsKKyAgICAvKgorICAgICAgIFJl dm9rZSBpc24ndCBndWFyYW50ZWVkIHRvIHNlbmQgYSBTSUdIVVAgdG8gdGhlIHByb2Nlc3NlcyBp dAorICAgICAgIGRpc3NvY2lhdGVzIGZyb20gdGhlIHRlcm1pbmFsLiAgVGhlIGJlc3Qgc29sdXRp b24gd2l0aG91dCBhIFBvc2l4CisgICAgICAgbWVjaGFuaXNtIGZvciBmb3JjaW5nIGEgaGFuZ3Vw IGlzIHRvIGtpbGxwZygpIHRoZSBwcm9jZXNzIGdyb3VwIG9mIHRoZQorICAgICAgIHB0eS4gIFRo aXMgd2lsbCBhdCBsZWFzdCBraWxsIHRoZSBzaGVsbCBhbmQgaG9wZWZ1bGx5LCB0aGUgY2hpbGQK KyAgICAgICBwcm9jZXNzZXMuICBUaGlzIGlzIG5vdCBhbHdheXMgdGhlIGNhc2UsIGhvd2V2ZXIu ICBJZiB0aGUgc2hlbGwgcHV0cworICAgICAgIGVhY2ggam9iIGluIGEgcHJvY2VzcyBncm91cCBh bmQgZG9lc24ndCBwYXNzIGFsb25nIFNJR0hVUCwgYWxsCisgICAgICAgcHJvY2Vzc2VzIG1heSBu b3QgZGllLgorICAgICovCisgICAgaWYgKHBpZCA+IDApIHsKKyNpZmRlZiBIQVZFX0tJTExQRwor CWtpbGxwZyhwaWQsIFNJR0hVUCk7CisjZWxzZQorCWtpbGwoLShwaWQpLCBTSUdIVVApOworI2Vu ZGlmIC8qSEFWRV9LSUxMUEcqLworICAgIH0KKyNlbHNlIC8qIEhBVkVfUkVWT0tFKi8KKyNpZmRl ZiBWSEFOR19MQVNUCisgICAgeworICAgICAgICBpbnQgc3RhdHVzOworI2lmZGVmIENLX1BPU0lY X1NJRworICAgICAgICBzaWdzZXRfdCBvbGQsIG5ldzsKKyAgICAgICAgc2lnZW1wdHlzZXQoJm5l dyk7CisgICAgICAgIHNpZ2FkZHNldCgmbmV3LCBTSUdDSExEKTsKKyAgICAgICAgc2lncHJvY21h c2soU0lHX0JMT0NLLCAmbmV3LCAmb2xkKTsKKyNlbHNlIC8qQ0tfUE9TSVhfU0lHKi8KKyAgICAg ICAgaW50IG1hc2sgPSBzaWdibG9jayhzaWdtYXNrKFNJR0NITEQpKTsKKyNlbmRpZiAvKkNLX1BP U0lYX1NJRyovCisgICAgICAgIHN3aXRjaCAocmV0dmFsID0gZm9yaygpKSB7CisJICBjYXNlIC0x OgorI2lmZGVmIENLX1BPU0lYX1NJRworICAgICAgICAgICAgc2lncHJvY21hc2soU0lHX1NFVE1B U0ssICZvbGQsIDApOworI2Vsc2UgLypDS19QT1NJWF9TSUcqLworICAgICAgICAgICAgc2lnc2V0 bWFzayhtYXNrKTsKKyNlbmRpZiAvKkNLX1BPU0lYX1NJRyovCisgICAgICAgICAgICByZXR1cm4g ZXJybm87CisJICBjYXNlIDA6CisgICAgICAgICAgICBwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigp OworICAgICAgICAgICAgaWYgKHJldHZhbCA9IChwdHlfb3Blbl9jdHR5KHNsYXZlLCAmZmQsIC0x KSkpCisJICAgICAgZXhpdChyZXR2YWwpOworICAgICAgICAgICAgcHR5aW50X3ZoYW5ndXAoKTsK KyAgICAgICAgICAgIGV4aXQoMCk7CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKyNpZmRlZiBI QVZFX1dBSVRQSUQKKyAgICAgICAgICAgIHdhaXRwaWQocmV0dmFsLCAmc3RhdHVzLCAwKTsKKyNl bHNlIC8qSEFWRV9XQUlUUElEKi8KKyAgICAgICAgICAgIHdhaXQoJnN0YXR1cyk7CisjZW5kaWYg LyogSEFWRV9XQUlUUElEICovCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgICAgICAgICBzaWdw cm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZCwgMCk7CisjZWxzZSAvKkNLX1BPU0lYX1NJRyovCisg ICAgICAgICAgICBzaWdzZXRtYXNrKG1hc2spOworI2VuZGlmIC8qQ0tfUE9TSVhfU0lHKi8KKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qVkhBTkdfTEFTVCov CisjZW5kaWYgLyogSEFWRV9SRVZPS0UqLworI2lmbmRlZiBIQVZFX1NUUkVBTVMKKyAgICBzbGF2 ZVtzdHJsZW4oIi9kZXYvIildID0gJ3AnOworI2lmZGVmIFNFVFVJRAorICAgIGNobW9kKHNsYXZl LCAwNjY2KTsKKyAgICBjaG93bihzbGF2ZSwgMCwgMCk7CisjZW5kaWYgLyogU0VUVUlEICovCisj ZW5kaWYgLyogSEFWRV9TVFJFQU1TICovCisgICAgcmV0dXJuKDApOworfQorCitsb25nCitwdHlf Z2V0cHR5KGZkLCBzbGF2ZSwgc2xhdmVsZW5ndGgpIGludCBzbGF2ZWxlbmd0aDsgaW50ICpmZDsg Y2hhciAqc2xhdmU7IHsKKyAgICBjaGFyICpjcDsKKyAgICBjaGFyICpwOworICAgIGludCBpLCBw dHludW07CisgICAgc3RydWN0IHN0YXQgc3RiOworI2lmbmRlZiBIQVZFX09QRU5QVFkKKyNpZm5k ZWYgSEFWRV9fR0VUUFRZCisgICAgY2hhciBzbGF2ZWJ1ZlsxMDI0XTsKKyNlbmRpZiAvKiBIQVZF X19HRVRQVFkgKi8KKyNlbmRpZiAvKiBIQVZFX09QRU5QVFkgKi8KKyNpZmRlZiBIQVZFX19HRVRQ VFkKKyAgICBjaGFyICpzbGF2ZXJldDsJCQkvKiBUZW1wIHRvIGhvbGQgcG9pbnRlciB0byBzbGF2 ZSAqLworI2VuZGlmIC8qSEFWRV9fR0VUUFRZKi8KKworI2lmZGVmIEhBVkVfT1BFTlBUWQorICAg IGludCBzbGF2ZWZkOworCisgICAgcHR5X21hc3Rlcl9mZCA9IC0xOworICAgIGRlYnVnKEYxMDAs IkhBVkVfT1BFTlBUWSIsIiIsMCk7CisgICAgaWYgKG9wZW5wdHkoZmQsCisJCSZzbGF2ZWZkLAor CQlzbGF2ZSwKKwkJKHN0cnVjdCB0ZXJtaW9zICopMCwKKwkJKHN0cnVjdCB3aW5zaXplICopMAor CQkpCisJKSB7CisJcHR5X21hc3Rlcl9mZCA9ICpmZDsKKwlyZXR1cm4oMSk7CisgICAgfQorICAg IGNsb3NlKHNsYXZlZmQpOworICAgIHJldHVybigwKTsKKworI2Vsc2UgLyogSEFWRV9PUEVOUFRZ ICovCisKKyNpZmRlZiBIQVZFX19HRVRQVFkKKy8qCisgIFRoaXMgY29kZSBpcyBpbmNsdWRlZCBm b3IgSXJpeDsgYXMgb2YgdmVyc2lvbiA1LjMsIElyaXggaGFzIC9kZXYvcHRteCwgYnV0CisgIGl0 IGZhaWxzIHRvIHdvcmsgcHJvcGVybHk7IGV2ZW4gYWZ0ZXIgY2FsbGluZyB1bmxvY2twdCwgcm9v dCBnZXRzIHBlcm1pc3Npb24KKyAgZGVuaWVkIG9wZW5pbmcgdGhlIHB0eS4gIFRoZSBjb2RlIHRv IHN1cHBvcnQgX2dldHB0eSBzaG91bGQgYmUgcmVtb3ZlZCBpZgorICBJcml4IGdldHMgd29ya2lu ZyBzdHJlYW1zIHB0eXMgaW4gZmF2b3Igb2YgbWFpbnRhaW5pbmcgdGhlIGxlYXN0IG5lZWRlZCBj b2RlCisgIHBhdGhzLgorKi8KKyAgICBkZWJ1ZyhGMTAwLCJIQVZFX19HRVRQVFkiLCIiLDApOwor ICAgIGlmICgoc2xhdmVyZXQgPSBfZ2V0cHR5KGZkLCBPX1JEV1IgfCBPX05ERUxBWSwgMDYwMCwg MCkpID09IDApIHsKKwkqZmQgPSAtMTsKKwlyZXR1cm4oUFRZX0dFVFBUWV9OT1BUWSk7CisgICAg fQorICAgIGlmIChzdHJsZW4oc2xhdmVyZXQpID4gc2xhdmVsZW5ndGggLSAxKSB7CisJY2xvc2Uo KmZkKTsKKwkqZmQgPSAtMTsKKwlyZXR1cm4oUFRZX0dFVFBUWV9TTEFWRV9UT09MT05HKTsKKyAg ICB9IGVsc2UgeworCWNrc3RybmNweShzbGF2ZSwgc2xhdmVyZXQsIHNsYXZlbGVuZ3RoKTsKKyAg ICB9CisgICAgcmV0dXJuKDApOworCisjZWxzZSAvKiBIQVZFX19HRVRQVFkgKi8KKworICAgICpm ZCA9IG9wZW4oIi9kZXYvcHR5bS9jbG9uZSIsIE9fUkRXUnxPX05ERUxBWSk7IC8qIEhQVVggKi8K KyAgICBpZiAoKmZkID49IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X2dldHB0eSgpIiwi b3BlbigvZGV2L3B0eW0vY2xvbmUpIHN1Y2Nlc3MiLDApOworICAgICAgICBnb3RvIGhhdmVfZmQ7 CisgICAgfQorCisjaWZkZWYgSEFWRV9QVE1YCisgICAgZGVidWcoRjEwMCwiSEFWRV9QVE1YIiwi IiwwKTsKKyAgICAqZmQgPSBvcGVuKCIvZGV2L3B0bXgiLE9fUkRXUnxPX05ERUxBWSk7CisgICAg aWYgKCpmZCA+PSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4o L2Rldi9wdG14KSBzdWNjZXNzIiwwKTsKKyAgICAgICAgZ290byBoYXZlX2ZkOworICAgIH0KKyNl bmRpZiAvKiBIQVZFX1BUTVggKi8KKworICAgICpmZCA9IG9wZW4oIi9kZXYvcHRjIiwgT19SRFdS fE9fTkRFTEFZKTsgLyogQUlYICovCisgICAgaWYgKCpmZCA+PSAwKSB7CisgICAgICAgIGRlYnVn KEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rldi9wdGMpIHN1Y2Nlc3MiLDApOworICAgICAg ICBnb3RvIGhhdmVfZmQ7CisgICAgfQorICAgICpmZCA9IG9wZW4oIi9kZXYvcHR5IiwgT19SRFdS fE9fTkRFTEFZKTsgLyogc3lzdmltcCAqLworICAgIGlmICgqZmQgPj0gMCkKKyAgICAgICAgZGVi dWcoRjExMCwicHR5X2dldHB0eSgpIiwib3BlbigvZGV2L3B0eSkgc3VjY2VzcyIsMCk7CisKKyAg aGF2ZV9mZDoKKyAgICAvKiBUaGlzIHdvdWxkIGJlIHRoZSBwdHkgbWFzdGVyICovCisgICAgZGVi dWcoRjEwMSwicHR5X2dldHB0eSBmZChBKSIsIiIsKmZkKTsKKyAgICBpZiAoKmZkID49IDApIHsK KwlwdHlfbWFzdGVyX2ZkID0gKmZkOworCisjaWZkZWYgSEFWRV9HUkFOVFBUCisjaWZkZWYgSEFW RV9QVE1YCisgICAgICAgIGRlYnVnKEYxMDAsIkhBVkVfR1JBTlRQVCIsIiIsMCk7CisJaWYgKGdy YW50cHQoKmZkKSB8fCB1bmxvY2twdCgqZmQpKQorCSAgcmV0dXJuKFBUWV9HRVRQVFlfU1RSRUFN Uyk7CisjZW5kaWYgLyogSEFWRV9QVE1YICovCisjZW5kaWYgLyogSEFWRV9HUkFOVFBUICovCisK KyNpZmRlZiBIQVZFX1BUU05BTUUKKyAgICAgICAgZGVidWcoRjEwMCwiSEFWRV9QVFNOQU1FIiwi IiwwKTsKKwlwID0gKGNoYXIgKilwdHNuYW1lKCpmZCk7CisgICAgICAgIGRlYnVnKEYxMTAsInB0 eV9nZXRwdHkoKSBwdHNuYW1lKCkiLHAsMCk7CisjZWxzZQorI2lmZGVmIEhBVkVfVFRZTkFNRQor ICAgICAgICBkZWJ1ZyhGMTAwLCJIQVZFX1RUWU5BTUUiLCIiLDApOworCXAgPSB0dHluYW1lKCpm ZCk7CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSB0dHluYW1lKCkiLHAsMCk7Cisj ZWxzZQorCS8qIElmIHdlIGRvbid0IGhhdmUgZWl0aGVyIHdoYXQgZG8gd2UgZG8/ICovCisgIAly ZXR1cm4oUFRZX0dFVFBUWV9OT1BUWSk7CS8qIHB1bnQgKi8KKyNlbmRpZiAvKiBIQVZFX1RUWU5B TUUgKi8KKyNlbmRpZiAvKiBIQVZFX1BUU05BTUUgKi8KKwlpZiAocCkgeworCSAgICBpZiAoc3Ry bGVuKHApID4gc2xhdmVsZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgY2xvc2UgKCpmZCk7 CisgICAgICAgICAgICAgICAgKmZkID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuKFBUWV9H RVRQVFlfU0xBVkVfVE9PTE9ORyk7CisJICAgIH0KKwkgICAgY2tzdHJuY3B5KHNsYXZlLCBwLCBz bGF2ZWxlbmd0aCk7CisJICAgIHJldHVybigwKTsKKwl9CisJaWYgKGZzdGF0KCpmZCwgJnN0Yikg PCAwKSB7CisJICAgIGNsb3NlKCpmZCk7CisJICAgIHJldHVybihQVFlfR0VUUFRZX0ZTVEFUKTsK Kwl9CisJcHR5bnVtID0gKGludCkoc3RiLnN0X3JkZXYmMHhGRik7CisJc3ByaW50ZihzbGF2ZWJ1 ZiwgIi9kZXYvdHR5cCV4IiwgcHR5bnVtKTsgLyogc2FmZSAqLworCWlmIChzdHJsZW4oc2xhdmVi dWYpID4gc2xhdmVsZW5ndGggLSAxKSB7CisJICAgIGNsb3NlKCpmZCk7CisJICAgICpmZCA9IC0x OworCSAgICByZXR1cm4oUFRZX0dFVFBUWV9TTEFWRV9UT09MT05HKTsKKwl9CisgICAgICAgIGRl YnVnKEYxMTAsInB0eV9nZXRwdHkoKSBzbGF2ZWJ1ZiIsc2xhdmVidWYsMCk7CisJY2tzdHJuY3B5 KHNsYXZlLCBzbGF2ZWJ1Ziwgc2xhdmVsZW5ndGgpOworCXJldHVybigwKTsKKyAgICB9IGVsc2Ug eworICAgIAlmb3IgKGNwID0gInBxcnN0dXZ3eHl6UFFSU1QiOypjcDsgY3ArKykgeworCSAgICBz cHJpbnRmKHNsYXZlYnVmLCIvZGV2L3B0eVhYIik7IC8qIHNhZmUgKi8KKwkgICAgc2xhdmVidWZb c2l6ZW9mKCIvZGV2L3B0eSIpIC0gMV0gPSAqY3A7CisJICAgIHNsYXZlYnVmW3NpemVvZigiL2Rl di9wdHlwIikgLSAxXSA9ICcwJzsKKwkgICAgaWYgKHN0YXQoc2xhdmVidWYsICZzdGIpIDwgMCkK KwkgICAgICBicmVhazsKKwkgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJc2xhdmVi dWZbc2l6ZW9mKCIvZGV2L3B0eXAiKSAtIDFdID0gIjAxMjM0NTY3ODlhYmNkZWYiW2ldOworCQll cnJubyA9IDA7CisJCSpmZCA9IG9wZW4oc2xhdmVidWYsIE9fUkRXUnxPX05ERUxBWSk7CisJCWlm ICgqZmQgPCAwKSB7CisJCSAgICBkZWJ1ZyhGMTExLCJwdHlfZ2V0cHR5KCkgcHR5IG1hc3RlciBv cGVuIGVycm9yIiwKKwkJCSAgc2xhdmVidWYsZXJybm8pOworCQkgICAgY29udGludWU7CisJCX0K KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJwdHlfZ2V0cHR5KCkgZm91bmQgcHR5IG1hc3Rl ciIsc2xhdmVidWYsKmZkKTsKKwkJc2xhdmVidWZbc2l6ZW9mKCIvZGV2LyIpIC0gMV0gPSAndCc7 IC8qIGdvdCBwdHkgKi8KKwkJaWYgKHN0cmxlbihzbGF2ZWJ1ZikgPiBzbGF2ZWxlbmd0aCAtMSkg eworCQkgICAgY2xvc2UoKmZkKTsKKwkJICAgICpmZCA9IC0xOworCQkgICAgcmV0dXJuKFBUWV9H RVRQVFlfU0xBVkVfVE9PTE9ORyk7CisJCX0KKwkJY2tzdHJuY3B5KHNsYXZlLCBzbGF2ZWJ1Ziwg c2xhdmVsZW5ndGgpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkgc2xh dmUgbmFtZSIsc2xhdmUsMCk7CisJCXB0eV9tYXN0ZXJfZmQgPSAqZmQ7CisJCXJldHVybigwKTsK KwkgICAgfQorCX0KKwlyZXR1cm4oUFRZX0dFVFBUWV9OT1BUWSk7CisgICAgfQorI2VuZGlmIC8q SEFWRV9fR0VUUFRZKi8KKyNlbmRpZiAvKiBIQVZFX09QRU5QVFkgKi8KK30KKworbG9uZworcHR5 X2luaXQoKSB7CisjaWZkZWYgSEFWRV9QVFlNCisgICAgc3RhdGljIGNoYXIgZHVtbXk7CisgICAg ZGVidWcoRjEwMCwiSEFWRV9QVFlNIiwiIiwwKTsKKyAgICB0dHlfYmFuayA9ICAmbWFzdGVyX25h bWVbc3RybGVuKCIvZGV2L3B0eW0vcHR5IildOworICAgIHR0eV9udW0gID0gICZtYXN0ZXJfbmFt ZVtzdHJsZW4oIi9kZXYvcHR5bS9wdHlYIildOworICAgIHNsYXZlX2JhbmsgPSAmc2xhdmVfbmFt ZVtzdHJsZW4oIi9kZXYvcHR5L3R0eSIpXTsKKyAgICBzbGF2ZV9udW0gID0gJnNsYXZlX25hbWVb c3RybGVuKCIvZGV2L3B0eS90dHlYIildOworI2VuZGlmCisgICAgcmV0dXJuKDBMKTsKK30KKwor LyoKKyAgVGhlIGZvbGxvd2luZyBpcyBhbiBhcnJheSBvZiBtb2R1bGVzIHRoYXQgc2hvdWxkIGJl IHB1c2hlZCBvbiB0aGUgc3RyZWFtLgorICBTZWUgY29uZmlndXJlLmluIGZvciBjYXZpYXRzIGFu ZCBub3RlcyBhYm91dCB3aGVuIHRoaXMgYXJyYXkgaXMgdXNlZCBhbmQgbm90CisgIHVzZWQuCisq LworI2lmZGVmIEhBVkVfU1RSRUFNUworI2lmbmRlZiBIQVZFX0xJTkVfUFVTSAorc3RhdGljIGNo YXIgKnB1c2hfbGlzdFtdID0geworI2lmZGVmIFBVU0hfUFRFTQorICAgICJwdGVtIiwKKyNlbmRp ZgorI2lmZGVmIFBVU0hfTERURVJNCisgICAgImxkdGVybSIsCisjZW5kaWYKKyNpZmRlZiBQVVNI X1RUQ09NUEFUCisgICAgInR0Y29tcGF0IiwKKyNlbmRpZgorICAgIDAKK307CisjZW5kaWYgLyog SEFWRV9MSU5FX1BVU0ggKi8KKyNlbmRpZiAvKiBIQVZFX1NUUkVBTVMgKi8KKworbG9uZworcHR5 X2luaXRpYWxpemVfc2xhdmUgKGZkKSBpbnQgZmQ7IHsKKyNpZmRlZiBQT1NJWF9URVJNSU9TCisj aWZuZGVmIHVsdHJpeAorICAgIHN0cnVjdCB0ZXJtaW9zIG5ld190ZXJtaW87CisjZWxzZQorICAg IHN0cnVjdCBzZ3R0eWIgYjsKKyNlbmRpZiAvKiB1bHRyaXggKi8KKyNlbHNlCisgICAgc3RydWN0 IHNndHR5YiBiOworI2VuZGlmIC8qIFBPU0lYX1RFUk1JT1MgKi8KKyAgICBpbnQgcGlkOworI2lm ZGVmIFBPU0lYX1RFUk1JT1MKKyNpZm5kZWYgdWx0cml4CisgICAgaW50IHJjOworI2VuZGlmIC8q IHVsdHJpeCAqLworI2VuZGlmIC8qIFBPU0lYX1RFUk1JT1MgKi8KKworICAgIGRlYnVnKEYxMTEs InB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJmZCIsZmQpOworCisjaWZkZWYgSEFWRV9TVFJFQU1T CisjaWZkZWYgSEFWRV9MSU5FX1BVU0gKKyAgICB3aGlsZSAoaW9jdGwoZmQsSV9QT1AsMCkgPT0g MCkgOwkvKiBDbGVhciBvdXQgYW55IG9sZCBsaW5lZCdzICovCisKKyAgICBpZiAobGluZV9wdXNo KGZkKSA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X2luaXRpYWxpemVfc2xhdmUoKSIs ImxpbmVfcHVzaCgpIGZhaWxlZCIsMCk7CisJY2xvc2UoZmQpOworICAgICAgICBmZCA9IC0xOwor ICAgICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVfTElORV9QVVNIRkFJTCk7CisgICAgfQorI2Vs c2UgLypObyBsaW5lX3B1c2ggKi8KKyAgICB7CisgICAgICAgIGNoYXIgKiptb2R1bGUgPSAmcHVz aF9saXN0WzBdOworICAgICAgICB3aGlsZSAoKm1vZHVsZSkgeworCSAgICBpZiAoaW9jdGwoZmQs IElfUFVTSCwgKihtb2R1bGUrKykpIDwgMCkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs InB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJpb2N0bChJX1BVU0gpIGZhaWxlZCIsMCk7CisJCXJl dHVybihQVFlfT1BFTl9TTEFWRV9QVVNIX0ZBSUwpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRp ZiAvKkxJTkVfUFVTSCovCisjZW5kaWYgLypIQVZFX1NUUkVBTVMqLworLyoKKyAgVW5kZXIgVWx0 cml4IDMuMCwgdGhlIHBncnAgb2YgdGhlIHNsYXZlIHB0eSB0ZXJtaW5hbCBuZWVkcyB0byBiZSBz ZXQKKyAgZXhwbGljaXRseS4gIFdoeSBybG9naW5kIHdvcmtzIGF0IGFsbCB3aXRob3V0IHRoaXMg b24gNC4zQlNEIGlzIGEgbXlzdGVyeS4KKyovCisjaWZkZWYgR0VUUEdSUF9PTkVBUkcKKyAgICBw aWQgPSBnZXRwZ3JwKGdldHBpZCgpKTsKKyNlbHNlCisgICAgcGlkID0gZ2V0cGdycCgpOworI2Vu ZGlmIC8qIEdFVFBHUlBfT05FQVJHICovCisKKyAgICBkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6 ZV9zbGF2ZSgpIiwicGlkIixwaWQpOworCisjaWZkZWYgVElPQ1NQR1JQCisgICAgaW9jdGwoZmQs IFRJT0NTUEdSUCwgJnBpZCk7CisjZW5kaWYgLyogVElPQ1NQR1JQICovCisKKyNpZmRlZiBQT1NJ WF9URVJNSU9TCisjaWZuZGVmIHVsdHJpeAorICAgIHRjc2V0cGdycChmZCwgcGlkKTsKKyAgICBl cnJubyA9IDA7CisgICAgcmMgPSB0Y2dldGF0dHIoZmQsJm5ld190ZXJtaW8pOworICAgIGRlYnVn KEYxMTEsInB0eV9pbml0aWFsaXplX3NsYXZlIHRjZ2V0YXR0cihmZCkiLGNraXRvYShyYyksZXJy bm8pOworICAgIGlmIChyYyA9PSAwKSB7CisJbmV3X3Rlcm1pby5jX2NjW1ZNSU5dID0gMTsKKwlu ZXdfdGVybWlvLmNfY2NbVlRJTUVdID0gMDsKKwlyYyA9IHRjc2V0YXR0cihmZCxUQ1NBTk9XLCZu ZXdfdGVybWlvKTsKKwlkZWJ1ZyhGMTExLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSB0Y3NldGF0dHIo ZmQpIixja2l0b2EocmMpLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogdWx0cml4ICovCisjZW5k aWYgLyogUE9TSVhfVEVSTUlPUyAqLworICAgIHJldHVybigwTCk7Cit9CisKKyNpZmRlZiBXQU5U X1VUTVAKK2xvbmcKK3B0eV9sb2d3dG1wICh0dHksIHVzZXIsIGhvc3QpIGNoYXIgKnVzZXIsICp0 dHksICpob3N0OyB7CisjaWZkZWYgSEFWRV9MT0dXVE1QCisgICAgbG9nd3RtcCh0dHksdXNlcixo b3N0KTsKKyAgICByZXR1cm4oMCk7CisjZWxzZQorICAgIHN0cnVjdCB1dG1wIHV0OworICAgIGNo YXIgKnRtcHg7CisgICAgY2hhciB1dG1wX2lkWzVdOworICAgIGludCBsb2dnaW5naW4gPSB1c2Vy WzBdOwkJLyogV2lsbCBiZSBlbXB0eSBmb3IgbG9nb3V0ICovCisKKyNpZm5kZWYgTk9fVVRfSE9T VAorICAgIHN0cm5jcHkodXQudXRfaG9zdCwgaG9zdCwgc2l6ZW9mKHV0LnV0X2hvc3QpKTsKKyNl bmRpZiAvKiBOT19VVF9IT1NUICovCisKKyAgICBzdHJuY3B5KHV0LnV0X2xpbmUsIHR0eSwgc2l6 ZW9mKHV0LnV0X2xpbmUpKTsKKyAgICB1dC51dF90aW1lID0gdGltZSgwKTsKKworI2lmbmRlZiBO T19VVF9QSUQKKyAgICB1dC51dF9waWQgPSBnZXRwaWQoKTsKKyAgICBzdHJuY3B5KHV0LnV0X3Vz ZXIsIHVzZXIsIHNpemVvZih1dC51dF91c2VyKSk7CisKKyAgICB0bXB4ID0gdHR5ICsgc3RybGVu KHR0eSkgLSAyOworICAgIGNrbWFrbXNnKHV0bXBfaWQsNSwia3IiLHRtcHgsTlVMTCxOVUxMKTsK KyAgICBzdHJuY3B5KHV0LnV0X2lkLCB1dG1wX2lkLCBzaXplb2YodXQudXRfaWQpKTsKKyAgICB1 dC51dF9waWQgPSAobG9nZ2luZ2luID8gZ2V0cGlkKCkgOiAwKTsKKyAgICB1dC51dF90eXBlID0g KGxvZ2dpbmdpbiA/IFVTRVJfUFJPQ0VTUyA6IERFQURfUFJPQ0VTUyk7CisjZWxzZQorICAgIHN0 cm5jcHkodXQudXRfbmFtZSwgdXNlciwgc2l6ZW9mKHV0LnV0X25hbWUpKTsKKyNlbmRpZiAvKiBO T19VVF9QSUQgKi8KKworICAgIHJldHVybihwdHlpbnRfdXBkYXRlX3d0bXAoJnV0LCBob3N0LCB1 c2VyKSk7CisKKyNlbmRpZiAvKiBIQVZFX0xPR1dUTVAgKi8KK30KKyNlbmRpZiAvKiBXQU5UX1VU TVAgKi8KKworLyoKKyAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0d2ljZS4gIEl0J3Mgbm90IHBh cnRpY3VsYXJseSBpbXBvcnRhbnQgdGhhdCB0aGUKKyAgc2V0c2lkKCkgb3IgVElPQ1NDVFRZIGlv Y3RscyBzdWNjZWVkICh0aGV5IG1heSBub3QgdGhlIHNlY29uZCB0aW1lKSwgYnV0CisgIHJhdGhl ciB0aGF0IHdlIGhhdmUgYSBjb250cm9sbGluZyB0ZXJtaW5hbCBhdCB0aGUgZW5kLiAgSXQgaXMg YXNzdW1lZCB0aGF0CisgIHZoYW5ndXAgZG9lc24ndCBleGlzdCBhbmQgY29uZnVzZSB0aGUgcHJv Y2VzcydzIG5vdGlvbiBvZiBjb250cm9sbGluZworICB0ZXJtaW5hbCBvbiBhbnkgc3lzdGVtIHdp dGhvdXQgVElPQ05PVFRZLiAgVGhhdCBpcywgZWl0aGVyIHZoYW5ndXAoKSBsZWF2ZXMKKyAgdGhl IGNvbnRyb2xsaW5nIHRlcm1pbmFsIGluIHRhY3QsIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24gY29t cGxldGVseSwgb3IgdGhlCisgIHN5c3RlbSBwcm92aWRlcyBUSU9DTk9UVFkgdG8gZ2V0IHRoaW5n cyBiYWNrIGludG8gYSByZWFzb25hYmxlIHN0YXRlLiAgSW4KKyAgcHJhY3RpY2UsIHZoYW5ndXAo KSBlaXRoZXIgYnJlYWtzIHRoZSBhc3NvY2lhdGlvbiBjb21wbGV0ZWx5IG9yIGRvZXNuJ3QKKyAg ZWZmZWN0IGNvbnRyb2xsaW5nIHRlcm1pbmFscywgc28gdGhpcyBjb25kaXRpb24gaXMgbWV0Lgor Ki8KK2xvbmcKK3B0eV9vcGVuX2N0dHkoc2xhdmUsIGZkLCBmYykgY2hhciAqIHNsYXZlOyBpbnQg KmZkOyBpbnQgZmM7IHsKKyAgICBpbnQgcmV0dmFsOworCisgICAgZGVidWcoRjExMCwicHR5X29w ZW5fY3R0eSgpIHNsYXZlIixzbGF2ZSwwKTsKKworLyogRmlyc3QsIGRpc3NvY2lhdGUgZnJvbSBw cmV2aW91cyB0ZXJtaW5hbCAqLworCisgICAgaWYgKChyZXR2YWwgPSBwdHlpbnRfdm9pZF9hc3Nv Y2lhdGlvbigpKSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsCisJICAgICAgInB0eV9vcGVu X2N0dHkoKSIsCisJICAgICAgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgZmFpbGVkIiwKKwkg ICAgICByZXR2YWwKKwkgICAgICApOworCXJldHVybihyZXR2YWwpOworICAgIH0KKyNpZmRlZiBN VVNUX1NFVFBHUlAKKy8qCisgIFRoZSBVbHRyaXggKGFuZCBvdGhlciBCU0QgdHR5IGRyaXZlcnMp IHJlcXVpcmUgdGhlIHByb2Nlc3MgZ3JvdXAKKyAgdG8gYmUgemVybyBpbiBvcmRlciB0byBhY3F1 aXJlIHRoZSBuZXcgdHR5IGFzIGEgY29udHJvbGxpbmcgdHR5LgorKi8KKyAgICBzZXRwZ3JwKDAs MCk7CisgICAgZGVidWcoRjEwMSwicHR5X29wZW5fY3R0eSBNVVNUX1NFVFBHUlAgc2V0cGdycCgw LDApIiwiIixlcnJubyk7CisjZW5kaWYgLyogTVVTVF9TRVRQR1JQICovCisKKyAgICBlcnJubyA9 IDA7CisgICAgKmZkID0gb3BlbihzbGF2ZSwgT19SRFdSKTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlf b3Blbl9jdHR5IG9wZW4oc2xhdmUpIGZkIixzbGF2ZSwqZmQpOworICAgIGlmICgqZmQgPCAwKSB7 CisJZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSgpIG9wZW4gZmFpbHVyZSIsIHNsYXZlLCBlcnJu byk7CisJcmV0dXJuKFBUWV9PUEVOX1NMQVZFX09QRU5GQUlMKTsKKyAgICB9CisjaWZkZWYgU09M QVJJUworICAgIC8qIFRoaXMgZm9yY2VzIHRoZSBqb2IgdG8gaGF2ZSBhIGNvbnRyb2xsaW5nIHRl cm1pbmFsLiAqLworICAgIGNsb3NlKCpmZCk7CisgICAgKmZkID0gb3BlbihzbGF2ZSwgT19SRFdS KTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5IGNsb3NlL29wZW4oc2xhdmUpIGZkIixz bGF2ZSwqZmQpOworI2lmZGVmIERFQlVHCisgICAgLyogVGhpcyBzaG93cyB0aGF0IC9kZXYvdHR5 IGV4aXN0cyAqLworaWYgKGRlYmxvZykgeworCWludCB4OworCXggPSBvcGVuKCIvZGV2L3R0eSIs IE9fUkRXUik7CisJZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSBvcGVuKC9kZXYvdHR5KSBmZCIs c2xhdmUseCk7CisJaWYgKHggPCAwKSBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5IG9wZW4oL2Rl di90dHkpIGVycm5vIiwiIixlcnJubyk7CisJZGVidWcoRjExMCwicHR5X29wZW5fY3R0eSB0dHlu YW1lKC9kZXYvdHR5KSIsdHR5bmFtZSh4KSwwKTsKKwlpZiAoeCA+IC0xKSBjbG9zZSh4KTsKKyAg ICB9CisjZW5kaWYJLyogREVCVUcgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisKKyNpZmRlZiBN VVNUX1NFVFBHUlAKKyAgICBzZXRwZ3JwKDAsIGdldHBpZCgpKTsKKyNlbmRpZiAvKiBNVVNUX1NF VFBHUlAgKi8KKworI2lmZGVmIFRJT0NTQ1RUWQorICAgIGlmICgKKyNpZmRlZiBDT01NRU5UCisJ ZmMgPT0gMAorI2Vsc2UKKwkxCisjZW5kaWYJLyogQ09NTUVOVCAqLworCSkgeworCS8qIFRJT0NT Q1RUWSA9IE1ha2UgdGhpcyB0aGUgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwgKi8KKwllcnJu byA9IDA7CisJcmV0dmFsID0gaW9jdGwoKmZkLCBUSU9DU0NUVFksIDApOyAvKiBEb24ndCBjaGVj ayByZXR1cm4uKi8KKwlkZWJ1ZyhGMTExLCJwdHlfb3Blbl9jdHR5KCkgaW9jdGwgVElPQ1NDVFRZ Iixja2l0b2EocmV0dmFsKSxlcnJubyk7CisgICAgfQorI2VuZGlmIC8qIFRJT0NTQ1RUWSAqLwor ICAgIHJldHVybigwTCk7Cit9CisKK2xvbmcKK3B0eV9vcGVuX3NsYXZlKHNsYXZlLCBmZCwgZmMp IGNoYXIgKnNsYXZlOyBpbnQgKmZkOyBpbnQgZmM7IHsKKyAgICBpbnQgdmZkLCB0ZXN0ZmQ7Cisg ICAgbG9uZyByZXR2YWw7CisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgc3RydWN0IHNpZ2FjdGlv biBzYTsKKworICAgIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsJCS8qIEluaXRpYWxpemUgInNh IiBzdHJ1Y3R1cmUuICovCisgICAgc2Euc2FfZmxhZ3MgPSAwOworI2VuZGlmIC8qIENLX1BPU0lY X1NJRyAqLworCisvKgorICBGaXJzdCwgY2htb2QgYW5kIGNob3duIHRoZSBzbGF2ZS4gIElmIHdl IGhhdmUgdmhhbmd1cCB0aGVuIHdlIHJlYWxseSBuZWVkCisgIHB0eV9vcGVuX2N0dHkgdG8gbWFr ZSBzdXJlIG91ciBjb250cm9sbGluZyB0ZXJtaW5hbCBpcyB0aGUgcHR5IHdlJ3JlCisgIG9wZW5p bmcuICBIb3dldmVyLCBpZiB3ZSBhcmUgdXNpbmcgcmV2b2tlIG9yIG5vdGhpbmcgdGhlbiB3ZSBq dXN0IG5lZWQgYQorICBmaWxlIGRlc2NyaWlwdG9yIGZvciB0aGUgcHR5LiAgQ29uc2lkZXJpbmcg c29tZSBPU2VzIGluIHRoaXMgY2F0ZWdvcnkgYnJlYWsKKyAgb24gdGhlIHNlY29uZCBjYWxsIHRv IG9wZW5fY3R0eSAoY3VycmVudGx5IE9TRiBidXQgb3RoZXJzIG1heSksIHdlIHNpbXBseQorICB1 c2UgYSBkZXNjcmlwdG9yIGlmIHdlIGNhbi4KKyovCisjaWZkZWYgVkhBTkdfRklSU1QKKyAgICBp ZiAoKHJldHZhbCA9IHB0eV9vcGVuX2N0dHkoc2xhdmUsICZ2ZmQsIGZjKSkgIT0gMCkgeworICAg ICAgICBkZWJ1ZyhGMTExLAorCSAgICAgICJwdHlfb3Blbl9zbGF2ZSgpIFZIQU5HX0ZJUlNUIiwK KwkgICAgICAicHR5X29wZW5fY3R0eSgpIGZhaWxlZCIsCisJICAgICAgcmV0dmFsCisJICAgICAg KTsKKyAgICAgICAgcmV0dXJuKHJldHZhbCk7CisgICAgfQorICAgIGlmICh2ZmQgPCAwKSB7Cisg ICAgICAgIGRlYnVnKEYxMTEsCisJICAgICAgInB0eV9vcGVuX3NsYXZlKCkgVkhBTkdfRklSU1Qi LAorCSAgICAgICJQVFlfT1BFTl9TTEFWRV9PUEVORkFJTCIsCisJICAgICAgdmZkCisJICAgICAg KTsKKwlyZXR1cm4oUFRZX09QRU5fU0xBVkVfT1BFTkZBSUwpOworICAgIH0KKyNlbmRpZiAvKiBW SEFOR19GSVJTVCAqLworCisgICAgaWYgKHNsYXZlID09IE5VTEwgfHwgKnNsYXZlID09ICdcMCcp IHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X29wZW5fc2xhdmUoKSIsIlBUWV9PUEVOX1NMQVZF X1RPT1NIT1JUIiwwKTsKKyAgICAgICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX1RPT1NIT1JUKTsK KyAgICB9CisKKyNpZmRlZiBTRVRVSUQKKyAgICBpZiAoY2htb2Qoc2xhdmUsIDApKSB7CisgICAg ICAgIGRlYnVnKEYxMTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9DSE1PREZB SUwiLDApOworICAgICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVfQ0hNT0RGQUlMKTsKKyAgICB9 CisgICAgaWYgKGNob3duKHNsYXZlLCAwLCAwICkgPT0gLTEgKSB7CisgICAgICAgIGRlYnVnKEYx MTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9DSE9XTkZBSUwiLDApOworICAg ICAgICByZXR1cm4oUFRZX09QRU5fU0xBVkVfQ0hPV05GQUlMKTsKKyAgICB9CisjZW5kaWYgLyog U0VUVUlEICovCisjaWZkZWYgVkhBTkdfRklSU1QKKyAgICBwdHlpbnRfdmhhbmd1cCgpOworICAg IGNsb3NlKHZmZCk7CisjZW5kaWYgLyogVkhBTkdfRklSU1QgKi8KKworICAgIGlmICgocmV0dmFs ID0gcHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKSkgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTEx LAorCSAgICAgICJwdHlfb3Blbl9zbGF2ZSgpIiwKKwkgICAgICAicHR5aW50X3ZvaWRfYXNzb2Np YXRpb24oKSBmYWlsZWQiLAorCSAgICAgIHJldHZhbAorCSAgICAgICk7CisgICAgICAgIHJldHVy bihyZXR2YWwpOworICAgIH0KKworI2lmZGVmIEhBVkVfUkVWT0tFCisgICAgaWYgKHJldm9rZSAo c2xhdmUpIDwgMCApIHsKKyAgICAgICAgZGVidWcoRjExMCwicHR5X29wZW5fc2xhdmUoKSIsIlBU WV9PUEVOX1NMQVZFX1JFVk9LRUZBSUwiLDApOworCXJldHVybihQVFlfT1BFTl9TTEFWRV9SRVZP S0VGQUlMKTsKKyAgICB9CisjZW5kaWYgLyogSEFWRV9SRVZPS0UgKi8KKworLyogT3BlbiB0aGUg cHR5IGZvciByZWFsLiAqLworCisgICAgcmV0dmFsID0gcHR5X29wZW5fY3R0eShzbGF2ZSwgZmQs IGZjKTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSByZXR2YWwiLHNsYXZlLHJldHZh bCk7CisgICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUgZmQiLHNsYXZlLCpmZCk7CisgICAg aWYgKHJldHZhbCAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlKCki LCJwdHlfb3Blbl9jdHR5KCkgZmFpbGVkIixyZXR2YWwpOworCXJldHVybihQVFlfT1BFTl9TTEFW RV9PUEVORkFJTCk7CisgICAgfQorICAgIHB0eV9zbGF2ZV9mZCA9ICpmZDsJCSAgIC8qIFRoaXMg aXMgbm90IHZpc2libGUgdG8gdGhlIHVwcGVyIGZvcmsgKi8KKyAgICBkZWJ1ZyhGMTExLCJwdHlf b3Blbl9zbGF2ZSBmZCBjdHR5J2QiLHNsYXZlLHB0eV9zbGF2ZV9mZCk7CisgICAgcmV0dmFsID0g cHR5X2luaXRpYWxpemVfc2xhdmUoKmZkKTsKKyAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2 ZSBmZCBpbml0J2QiLHNsYXZlLHB0eV9zbGF2ZV9mZCk7CisgICAgaWYgKHJldHZhbCkgeworICAg ICAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSgpIiwicHR5X2luaXRpYWxpemVfc2xhdmUo KSBmYWlsZWQiLHJldHZhbCk7CisgICAgICAgIHJldHVybihyZXR2YWwpOworICAgIH0KKyAgICAv KiAoVk9JRClwdHlfbWFrZV9yYXcoKmZkKTsgKi8KKworICAgIGRlYnVnKEYxMDAsInB0eV9vcGVu X3NsYXZlIE9LIiwiIiwqZmQpOworICAgIHJldHVybigwTCk7Cit9CisKKyNpZmRlZiBXQU5UX1VU TVAKKworI2lmbmRlZiBVVE1QX0ZJTEUKKyNpZmRlZiBfUEFUSF9VVE1QCisjZGVmaW5lIFVUTVBf RklMRSBfUEFUSF9VVE1QCisjZW5kaWYgLyogX1BBVEhfVVRNUCAqLworI2VuZGlmIC8qICBVVE1Q X0ZJTEUgKi8KKworLyogSWYgaXQgaXMgKnN0aWxsKiBtaXNzaW5nLCBhc3N1bWUgL2V0Yy91dG1w ICovCisKKyNpZm5kZWYgVVRNUF9GSUxFCisjZGVmaW5lCVVUTVBfRklMRSAiL2V0Yy91dG1wIgor I2VuZGlmIC8qIFVUTVBfRklMRSAqLworCisjaWZuZGVmIE5PX1VUX1BJRAorI2RlZmluZSBXVE1Q X1JFUVVJUkVTX1VTRVJOQU1FCisjZW5kaWYgLyogTk9fVVRfUElEICovCisKK2xvbmcKK3B0eV91 cGRhdGVfdXRtcChwcm9jZXNzX3R5cGUsIHBpZCwgdXNlcm5hbWUsIGxpbmUsIGhvc3QsIGZsYWdz KQorICAgIGludCBwcm9jZXNzX3R5cGU7CisgICAgaW50IHBpZDsKKyAgICBjaGFyICp1c2VybmFt ZSwgKmxpbmUsICpob3N0OworICAgIGludCBmbGFnczsKKy8qIHB0eV91cGRhdGVfdXRtcCAqLyB7 CisgICAgc3RydWN0IHV0bXAgZW50LCB1dDsKKyNpZm5kZWYgSEFWRV9TRVRVVEVOVAorICAgIHN0 cnVjdCBzdGF0IHN0YXRiOworICAgIGludCB0dHk7CisjZW5kaWYgLyogSEFWRV9TRVRVVEVOVCAq LworI2lmZGVmIEhBVkVfU0VUVVRYRU5UCisgICAgc3RydWN0IHV0bXB4IHV0eDsKKyNlbmRpZiAv KiBIQVZFX1NFVFVUWEVOVCAqLworI2lmbmRlZiBOT19VVF9QSUQKKyAgICBjaGFyICp0bXB4Owor ICAgIGNoYXIgdXRtcF9pZFs1XTsKKyNlbmRpZiAvKiBOT19VVF9QSUQgKi8KKyAgICBjaGFyIHVz ZXJidWZbMzJdOworICAgIGludCBmZDsKKworICAgIGRlYnVnKEYxMDAsInB0eV91cGRhdGVfdXRt cCgpIiwiIiwwKTsKKyAgICBzdHJuY3B5KGVudC51dF9saW5lLCBsaW5lK3NpemVvZigiL2Rldi8i KS0xLCBzaXplb2YoZW50LnV0X2xpbmUpKTsKKyAgICBlbnQudXRfdGltZSA9IHRpbWUoMCk7CisK KyNpZmRlZiBOT19VVF9QSUQKKyAgICBpZiAocHJvY2Vzc190eXBlID09IFBUWV9MT0dJTl9QUk9D RVNTKQorICAgICAgcmV0dXJuKDBMKTsKKyNlbHNlIC8qIE5PX1VUX1BJRCAqLworCisgICAgZW50 LnV0X3BpZCA9IHBpZDsKKworICAgIHN3aXRjaCAocHJvY2Vzc190eXBlKSB7CisgICAgICBjYXNl IFBUWV9MT0dJTl9QUk9DRVNTOgorCWVudC51dF90eXBlID0gTE9HSU5fUFJPQ0VTUzsKKwlicmVh azsKKyAgICAgIGNhc2UgUFRZX1VTRVJfUFJPQ0VTUzoKKwllbnQudXRfdHlwZSA9IFVTRVJfUFJP Q0VTUzsKKwlicmVhazsKKyAgICAgIGNhc2UgUFRZX0RFQURfUFJPQ0VTUzoKKwllbnQudXRfdHlw ZSA9IERFQURfUFJPQ0VTUzsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJuKFBUWV9V UERBVEVfVVRNUF9QUk9DVFlQRV9JTlZBTElEKTsKKyAgICB9CisjZW5kaWYgLypOT19VVF9QSUQq LworCisjaWZuZGVmIE5PX1VUX0hPU1QKKyAgICBpZiAoaG9zdCkKKyAgICAgIHN0cm5jcHkoZW50 LnV0X2hvc3QsIGhvc3QsIHNpemVvZihlbnQudXRfaG9zdCkpOworICAgIGVsc2UKKyAgICAgIGVu dC51dF9ob3N0WzBdID0gJ1wwJzsKKyNlbmRpZiAvKiBOT19VVF9IT1NUICovCisKKyNpZm5kZWYg Tk9fVVRfUElECisgICAgaWYgKCFzdHJjbXAgKGxpbmUsICIvZGV2L2NvbnNvbGUiKSkgeworCWNo YXIgKiBzID0gTlVMTDsKKworI2lmZGVmIHN1bgorI2lmZGVmIF9fU1ZSNAorCXMgPSAiY28iOwor I2Vsc2UKKwlzID0gImNvbnMiOworI2VuZGlmIC8qIF9fU1ZSNCAqLworI2Vsc2UKKwlzID0gImNv bnMiOworI2VuZGlmIC8qIHN1biAqLworCisJc3RybmNweShlbnQudXRfaWQsIHMsIDQpOworCisg ICAgfSBlbHNlIHsKKworCXRtcHggPSBsaW5lICsgc3RybGVuKGxpbmUpLTE7CisJaWYgKCoodG1w eC0xKSAhPSAnLycpIHRtcHgtLTsJLyogbGFzdCAyIGNoYXJzIHVubGVzcyBpdCdzIGEgJy8nICov CisjaWZkZWYgX19ocHV4CisJY2tzdHJuY3B5KHV0bXBfaWQsIHRtcHgsIDUpOworI2Vsc2UKKwlj a21ha21zZyh1dG1wX2lkLDUsImtsIix0bXB4LE5VTEwsTlVMTCk7CisjZW5kaWYgLyogX19ocHV4 ICovCisJc3RybmNweShlbnQudXRfaWQsIHV0bXBfaWQsIHNpemVvZihlbnQudXRfaWQpKTsKKyAg ICB9CisgICAgc3RybmNweShlbnQudXRfdXNlciwgdXNlcm5hbWUsIHNpemVvZihlbnQudXRfdXNl cikpOworCisjZWxzZQorCisgICAgc3RybmNweShlbnQudXRfbmFtZSwgdXNlcm5hbWUsIHNpemVv ZihlbnQudXRfbmFtZSkpOworCisjZW5kaWYgLyogTk9fVVRfUElEICovCisKKyAgICBpZiAodXNl cm5hbWVbMF0pCisgICAgICBzdHJuY3B5KHVzZXJidWYsIHVzZXJuYW1lLCBzaXplb2YodXNlcmJ1 ZikpOworICAgIGVsc2UKKyAgICAgIHVzZXJidWZbMF0gPSAnXDAnOworCisjaWZkZWYgSEFWRV9T RVRVVEVOVAorCisgICAgdXRtcG5hbWUoVVRNUF9GSUxFKTsKKyAgICBzZXR1dGVudCgpOworLyoK KyAgSWYgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgdXNlciBuYW1lIGluIHRoZSB3dG1wIHN0cnVj dHVyZSBhbmQgT3VyIGZsYWdzCisgIHRlbGwgdXMgd2UgY2FuIG9idGFpbiBpdCBmcm9tIHRoZSB1 dG1wIGFuZCB3ZSBzdWNjZWVkIGluIG9idGFpbmluZyBpdCwgd2UKKyAgdGhlbiBzYXZlIHRoZSB1 dG1wIHN0cnVjdHVyZSB3ZSBvYnRhaW4sIHdyaXRlIG91dCB0aGUgdXRtcCBzdHJ1Y3R1cmUgYW5k CisgIGNoYW5nZSB0aGUgdXNlcm5hbWUgcG9pbnRlciBzbyBpdCBpcyB1c2VkIGJ5IHVwZGF0ZV93 dG1wLgorKi8KKworI2lmZGVmIFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUKKyAgICBpZiAoKCF1c2Vy bmFtZVswXSkgJiYgKGZsYWdzJlBUWV9VVE1QX1VTRVJOQU1FX1ZBTElEKSAmJmxpbmUpIHsKKwlz dHJ1Y3QgdXRtcCAqdXRwdHI7CisJc3RybmNweSh1dC51dF9saW5lLCBsaW5lLCBzaXplb2YodXQu dXRfbGluZSkpOworCXV0cHRyID0gZ2V0dXRsaW5lKCZ1dCk7CisJaWYgKHV0cHRyKQorCSAgc3Ry bmNweSh1c2VyYnVmLHV0cHRyLT51dF91c2VyLHNpemVvZih1dC51dF91c2VyKSk7CisgICAgfQor I2VuZGlmIC8qIFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUgKi8KKworICAgIHB1dHV0bGluZSgmZW50 KTsKKyAgICBlbmR1dGVudCgpOworCisjaWZkZWYgSEFWRV9TRVRVVFhFTlQKKyAgICBzZXR1dHhl bnQoKTsKKyNpZmRlZiBIQVZFX0dFVFVUTVBYCisgICAgZ2V0dXRtcHgoJmVudCwgJnV0eCk7Cisj ZWxzZSAvKiBIQVZFX0dFVFVUTVBYICovCisgICAgLyogRm9yIHBsYXRmb3JtcyBsaWtlIEhQVVgg YW5kIERlYyBVbml4IHdoaWNoIGRvbid0IGhhdmUgZ2V0dXRtcHggKi8KKyAgICBzdHJuY3B5KHV0 eC51dF91c2VyLCBlbnQudXRfdXNlciwgc2l6ZW9mKGVudC51dF91c2VyKSk7CisgICAgc3RybmNw eSh1dHgudXRfaWQsIGVudC51dF9pZCwgc2l6ZW9mKGVudC51dF9pZCkpOworICAgIHN0cm5jcHko dXR4LnV0X2xpbmUsIGVudC51dF9saW5lLCBzaXplb2YoZW50LnV0X2xpbmUpKTsKKyAgICB1dHgu dXRfcGlkID0gcGlkOwkJLyoga2x1ZGdlIGZvciBJcml4LCBldGMuIHRvIGF2b2lkIHRydW5jLiAq LworICAgIHV0eC51dF90eXBlID0gZW50LnV0X3R5cGU7CisjaWZkZWYgVVRfRVhJVF9TVFJVQ1RV UkVfRElGRkVSCisgICAgdXR4LnV0X2V4aXQudXRfZXhpdCA9IGVudC51dF9leGl0LmVfZXhpdDsK KyNlbHNlIC8qIFVUX0VYSVRfU1RSVUNUVVJFX0RJRkZFUiAqLworLyogS0xVREdFIGZvciBub3c7 IGV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlIGEgZmVhdHVyZSB0ZXN0Li4uIFNlZSBQUiNbNDBdICov CisjaWZkZWYgX19ocHV4CisgICAgdXR4LnV0X2V4aXQuX19lX3Rlcm1pbmF0aW9uID0gZW50LnV0 X2V4aXQuZV90ZXJtaW5hdGlvbjsKKyAgICB1dHgudXRfZXhpdC5fX2VfZXhpdCA9IGVudC51dF9l eGl0LmVfZXhpdDsKKyNlbHNlIC8qIF9faHB1eCAqLworICAgIC8qIFhYWCBkbyBub3RoaW5nIGZv ciBub3c7IHdlIGRvbid0IGV2ZW4ga25vdyB0aGUgc3RydWN0IG1lbWJlciBleGlzdHMgKi8KKyNl bmRpZiAvKiBfX2hwdXggKi8KKyNlbmRpZiAvKiBVVF9FWElUX1NUUlVDVFVSRV9ESUZGRVIgKi8K KyAgICB1dHgudXRfdHYudHZfc2VjID0gZW50LnV0X3RpbWU7CisgICAgdXR4LnV0X3R2LnR2X3Vz ZWMgPSAwOworI2VuZGlmIC8qIEhBVkVfR0VUVVRNUFggKi8KKyAgICBpZiAoaG9zdCkKKyAgICAg IHN0cm5jcHkodXR4LnV0X2hvc3QsIGhvc3QsIHNpemVvZih1dHgudXRfaG9zdCkpOworICAgIGVs c2UKKyAgICAgIHV0eC51dF9ob3N0WzBdID0gMDsKKyAgICBwdXR1dHhsaW5lKCZ1dHgpOworICAg IGVuZHV0eGVudCgpOworI2VuZGlmIC8qIEhBVkVfU0VUVVRYRU5UICovCisKKyNlbHNlIC8qIEhB VkVfU0VUVVRFTlQgKi8KKyAgICBpZiAoZmxhZ3MmUFRZX1RUWVNMT1RfVVNBQkxFKSB7CisJdHR5 ID0gdHR5c2xvdCgpOworICAgIH0gZWxzZSB7CisJaW50IGxjOworCXR0eSA9IC0xOworCWlmICgo ZmQgPSBvcGVuKFVUTVBfRklMRSwgT19SRFdSKSkgPCAwKQorCSAgcmV0dXJuKGVycm5vKTsKKwlm b3IgKGxjID0gMDsKKwkgICAgIGxzZWVrKGZkLCAob2ZmX3QpKGxjICogc2l6ZW9mKHN0cnVjdCB1 dG1wKSksIFNFRUtfU0VUKSAhPSAtMTsKKwkgICAgIGxjKysKKwkgICAgICkgeworCSAgICBpZiAo cmVhZChmZCwKKwkJICAgICAoY2hhciAqKSZ1dCwKKwkJICAgICBzaXplb2Yoc3RydWN0IHV0bXAp CisJCSAgICAgKSAhPSBzaXplb2Yoc3RydWN0IHV0bXApCisJCSkKKwkgICAgICBicmVhazsKKwkg ICAgaWYgKHN0cm5jbXAodXQudXRfbGluZSwgZW50LnV0X2xpbmUsIHNpemVvZih1dC51dF9saW5l KSkgPT0gMCkgeworCQl0dHkgPSBsYzsKKyNpZmRlZiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1FCisJ CWlmICghdXNlcm5hbWUmJihmbGFncyZQVFlfVVRNUF9VU0VSTkFNRV9WQUxJRCkpCisJCSAgc3Ry bmNweSh1c2VyYnVmLCB1dC51dF91c2VyLCBzaXplb2YodXQudXRfdXNlcikpOworI2VuZGlmIC8q IFdUTVBfUkVRVUlSRVNfVVNFUk5BTUUgKi8KKwkJYnJlYWs7CisJICAgIH0KKwl9CisJY2xvc2Uo ZmQpOworICAgIH0KKyAgICBpZiAodHR5ID4gMCAmJiAoZmQgPSBvcGVuKFVUTVBfRklMRSwgT19X Uk9OTFksIDApKSA+PSAwKSB7CisJbHNlZWsoZmQsIChvZmZfdCkodHR5ICogc2l6ZW9mKHN0cnVj dCB1dG1wKSksIFNFRUtfU0VUKTsKKwl3cml0ZShmZCwgKGNoYXIgKikmZW50LCBzaXplb2Yoc3Ry dWN0IHV0bXApKTsKKwljbG9zZShmZCk7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfU0VUVVRFTlQg Ki8KKworICAgIC8qIERvbid0IHJlY29yZCBMT0dJTl9QUk9DRVNTIGVudHJpZXMuICovCisgICAg aWYgKHByb2Nlc3NfdHlwZSA9PSBQVFlfTE9HSU5fUFJPQ0VTUykKKyAgICAgIHJldHVybigwKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4ocHR5aW50X3VwZGF0ZV93dG1wKCZlbnQsIGhvc3QsIHVz ZXJidWYpKTsKK30KKyNpZm5kZWYgV1RNUF9GSUxFCisjaWZkZWYgX1BBVEhfV1RNUAorI2RlZmlu ZSBXVE1QX0ZJTEUgX1BBVEhfV1RNUAorI2VuZGlmIC8qIF9QQVRIX1dUTVAgKi8KKyNlbmRpZiAv KiBXVE1QX0ZJTEUgKi8KKworI2lmbmRlZiBXVE1QWF9GSUxFCisjaWZkZWYgX1BBVEhfV1RNUFgK KyNpZmRlZiBIQVZFX1VQRFdUTVBYCisjZGVmaW5lIFdUTVBYX0ZJTEUgX1BBVEhfV1RNUFgKKyNl bmRpZiAvKiBIQVZFX1VQRFdUTVBYICovCisjZW5kaWYgLyogX1BBVEhfV1RNUFggKi8KKyNlbmRp ZiAvKiBXVE1QWF9GSUxFICovCisKKy8qIElmIGl0IGlzICpzdGlsbCogbWlzc2luZywgYXNzdW1l IC91c3IvYWRtL3d0bXAgKi8KKworI2lmbmRlZiBXVE1QX0ZJTEUKKyNkZWZpbmUJV1RNUF9GSUxF ICIvdXNyL2FkbS93dG1wIgorI2VuZGlmIC8qIFdUTVBfRklMRSAqLworCisjaWZkZWYgQ09NTUVO VAorLyogVGhlIGZvbGxvd2luZyB0ZXN0IGNhbiBub3QgYmUgbWFkZSBwb3J0YWJseSAqLworCisv KiAjaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIChfX0dMSUJDX18gPj0gMikgJiYgKF9fR0xJQkNf TUlOT1JfXyA+PSAxKSAqLworLyoKKyAgVGhpcyBpcyB1Z2x5LCBidXQgdGhlIGxhY2sgb2Ygc3Rh bmRhcmRpemF0aW9uIGluIHRoZSB1dG1wL3V0bXB4IHNwYWNlLCBhbmQKKyAgd2hhdCBnbGliYyBp bXBsZW1lbnRzIGFuZCBkb2Vzbid0IG1ha2UgYXZhaWxhYmxlLCBpcyBldmVuIHdvcnNlLgorKi8K Ky8qICN1bmRlZiBIQVZFX1VQRFdUTVBYICovCS8qIERvbid0IHVzZSB1cGR3dG1weCBmb3IgZ2xp YmMgMi4xICovCisvKiAjZW5kaWYgKi8gLyogX19HTElCQ19fIGV0YyAqLworCisjZWxzZSAgLyog Q09NTUVOVCAqLworCisjaWZkZWYgX19HTElCQ19fCisjdW5kZWYgSEFWRV9VUERXVE1QWAkJLyog RG9uJ3QgdXNlIHVwZHd0bXB4IGZvciBnbGliYyBwZXJpb2QgKi8KKyNlbmRpZiAvKiBfX0dMSUJD X18gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKK2xvbmcKK3B0eWludF91cGRhdGVfd3RtcChl bnQsaG9zdCx1c2VyKSBzdHJ1Y3QgdXRtcCAqZW50OyBjaGFyICpob3N0OyBjaGFyICp1c2VyOyB7 CisgICAgc3RydWN0IHV0bXAgdXQ7CisgICAgc3RydWN0IHN0YXQgc3RhdGI7CisgICAgaW50IGZk OworICAgIHRpbWVfdCB1dHRpbWU7CisjaWZkZWYgSEFWRV9VUERXVE1QWAorICAgIHN0cnVjdCB1 dG1weCB1dHg7CisKKyAgICBnZXR1dG1weChlbnQsICZ1dHgpOworICAgIGlmIChob3N0KQorICAg ICAgc3RybmNweSh1dHgudXRfaG9zdCwgaG9zdCwgc2l6ZW9mKHV0eC51dF9ob3N0KSApOworICAg IGVsc2UKKyAgICAgIHV0eC51dF9ob3N0WzBdID0gMDsKKyAgICBpZiAodXNlcikKKyAgICAgIHN0 cm5jcHkodXR4LnV0X3VzZXIsIHVzZXIsIHNpemVvZih1dHgudXRfdXNlcikpOworICAgIHVwZHd0 bXB4KFdUTVBYX0ZJTEUsICZ1dHgpOworI2VuZGlmIC8qIEhBVkVfVVBEV1RNUFggKi8KKworI2lm ZGVmIEhBVkVfVVBEV1RNUAorI2lmbmRlZiBIQVZFX1VQRFdUTVBYCisgICAgLyogVGhpcyBpcyBh bHJlYWR5IHBlcmZvcm1lZCBieXVwZHd0bXB4IGlmIHByZXNlbnQuKi8KKyAgICB1cGR3dG1wKFdU TVBfRklMRSwgZW50KTsKKyNlbmRpZiAvKiBIQVZFX1VQRFdUTVBYKi8KKyNlbHNlIC8qIEhBVkVf VVBEV1RNUCAqLworCisgICAgaWYgKChmZCA9IG9wZW4oV1RNUF9GSUxFLCBPX1dST05MWXxPX0FQ UEVORCwgMCkpID49IDApIHsKKwlpZiAoIWZzdGF0KGZkLCAmc3RhdGIpKSB7CisJICAgIG1lbXNl dCgoY2hhciAqKSZ1dCwgMCwgc2l6ZW9mKHV0KSk7CisjaWZkZWYgX19ocHV4CisJICAgIHN0cm5j cHkodXQudXRfaWQsIGVudC0+dXRfaWQsIHNpemVvZiAodXQudXRfaWQpKTsKKyNlbmRpZiAvKiBf X2hwdXggKi8KKwkgICAgc3RybmNweSh1dC51dF9saW5lLCBlbnQtPnV0X2xpbmUsIHNpemVvZih1 dC51dF9saW5lKSk7CisJICAgIHN0cm5jcHkodXQudXRfbmFtZSwgZW50LT51dF9uYW1lLCBzaXpl b2YodXQudXRfbmFtZSkpOworI2lmbmRlZiBOT19VVF9IT1NUCisJICAgIHN0cm5jcHkodXQudXRf aG9zdCwgZW50LT51dF9ob3N0LCBzaXplb2YodXQudXRfaG9zdCkpOworI2VuZGlmIC8qIE5PX1VU X0hPU1QgKi8KKworCSAgICB0aW1lKCZ1dHRpbWUpOworCSAgICB1dC51dF90aW1lID0gdXR0aW1l OworCisjaWZkZWYgSEFWRV9HRVRVVEVOVAorI2lmZGVmIFVTRVJfUFJPQ0VTUworCSAgICBpZiAo ZW50LT51dF9uYW1lKSB7CisJCWlmICghdXQudXRfcGlkKQorCQkgIHV0LnV0X3BpZCA9IGdldHBp ZCgpOworI2lmbmRlZiBfX2hwdXgKKwkJdXQudXRfdHlwZSA9IFVTRVJfUFJPQ0VTUzsKKyNlbHNl ICAvKiBfX2hwdXggKi8KKwkJdXQudXRfdHlwZSA9IGVudC0+dXRfdHlwZTsKKyNlbmRpZiAvKiBf X2hwdXggKi8KKworCSAgICB9IGVsc2UgeworCisjaWZkZWYgRU1QVFkKKwkJdXQudXRfdHlwZSA9 IEVNUFRZOworI2Vsc2UKKwkJdXQudXRfdHlwZSA9IERFQURfUFJPQ0VTUzsgLyogRm9yIExpbnV4 IGJyb2tlbm5lc3MqLworI2VuZGlmIC8qIEVNUFRZICovCisKKwkgICAgfQorI2VuZGlmIC8qIFVT RVJfUFJPQ0VTUyAqLworI2VuZGlmIC8qIEhBVkVfR0VUVVRFTlQgKi8KKworCSAgICBpZiAod3Jp dGUoZmQsIChjaGFyICopJnV0LCBzaXplb2Yoc3RydWN0IHV0bXApKSAhPQorCQlzaXplb2Yoc3Ry dWN0IHV0bXApKQorI2lmbmRlZiBDT0hFUkVOVAorCSAgICAgIGZ0cnVuY2F0ZShmZCwgc3RhdGIu c3Rfc2l6ZSk7CisjZWxzZQorCSAgICAgIGNoc2l6ZShmZCwgc3RhdGIuc3Rfc2l6ZSk7CisjZW5k aWYgLyogQ09IRVJFTlQgKi8KKwl9CisJY2xvc2UoZmQpOworICAgIH0KKyNlbmRpZiAvKiBIQVZF X1VQRFdUTVAgKi8KKyAgICByZXR1cm4oMCk7IC8qIG5vIGN1cnJlbnQgZmFpbHVyZSBjYXNlczsg ZmlsZSBub3QgZm91bmQgaXMgbm90IGZhaWx1cmUhICovCit9CisjZW5kaWYgLyogV0FOVF9VVE1Q ICovCisKKy8qIFRoaXMgaXMgZm9yIGFuY2llbnQgVW5peGVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGVz ZSB0dHkgc3ltYm9scyBkZWZpbmVkLiAqLworCisjaWZuZGVmIFBFTkRJTgorI2RlZmluZSBQRU5E SU4gSUNBTk9OCisjZW5kaWYgLyogUEVORElOICovCisjaWZuZGVmIEZMVVNITworI2RlZmluZSBG TFVTSE8gSUNBTk9OCisjZW5kaWYgLyogRkxVU0hPICovCisjaWZuZGVmIElNQVhCRUwKKyNkZWZp bmUgSU1BWEJFTCBJQ0FOT04KKyNlbmRpZiAvKiBJTUFYQkVMICovCisjaWZuZGVmIEVYVFBST0MK KyNkZWZpbmUgRVhUUFJPQyBJQ0FOT04KKyNlbmRpZiAvKiBFWFRQUk9DICovCisKK3N0YXRpYyBj aGFyIFhsaW5lWzE3XSA9IHsgMCwgMCB9OworLyoKKyAgZ2V0cHR5c2xhdmUoKQorICBPcGVuIHRo ZSBzbGF2ZSBzaWRlIG9mIHRoZSBwdHksIGFuZCBkbyBhbnkgaW5pdGlhbGl6YXRpb24gdGhhdCBp cyBuZWNlc3NhcnkuCisgIFRoZSByZXR1cm4gdmFsdWUgZmQgaXMgYSBmaWxlIGRlc2NyaXB0b3Ig Zm9yIHRoZSBzbGF2ZSBzaWRlLgorICBmYyA9IGZ1bmN0aW9uIGNvZGUgZnJvbSBkb19wdHkoKSAo cS52LikKKyovCitpbnQKK2dldHB0eXNsYXZlKGZkLCBmYykgaW50ICogZmQsIGZjOyB7CisgICAg aW50IHR0eWZkOworICAgIGludCB0ID0gLTE7CisgICAgbG9uZyByZXR2YWw7CisjaWZkZWYgVElP Q0dXSU5TWgorICAgIHN0cnVjdCB3aW5zaXplIHdzOworICAgIGV4dGVybiBpbnQgY21kX3Jvd3Ms IGNtZF9jb2xzOworI2VuZGlmIC8qIFRJT0NHV0lOU1ogKi8KKworICAgIHR0eWZkID0gKmZkOwor ICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlKCkiLCJ0dHlmZCIsdHR5ZmQpOworICAgIC8qCisg ICAgICogT3BlbmluZyB0aGUgc2xhdmUgc2lkZSBtYXkgY2F1c2UgaW5pdGlsaXphdGlvbiBvZiB0 aGUKKyAgICAgKiBrZXJuZWwgdHR5IHN0cnVjdHVyZS4gIFdlIG5lZWQgcmVtZW1iZXIgdGhlIHN0 YXRlIG9mOgorICAgICAqICAgICAgaWYgbGluZW1vZGUgd2FzIHR1cm5lZCBvbgorICAgICAqICAg ICAgdGVybWluYWwgd2luZG93IHNpemUKKyAgICAgKiAgICAgIHRlcm1pbmFsIHNwZWVkCisgICAg ICogc28gdGhhdCB3ZSBjYW4gcmVzZXQgdGhlbSBpZiB3ZSBuZWVkIHRvLgorICAgICAqLworICAg IGlmICgocmV0dmFsID0gcHR5X29wZW5fc2xhdmUoWGxpbmUsICZ0LCBmYykpICE9IDApIHsKKwlw ZXJyb3IoWGxpbmUpOworCW1zZysrOworICAgICAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSgp IiwiVW5hYmxlIHRvIG9wZW4gc2xhdmUiLHJldHZhbCk7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlIiwidCIsdCk7CisjaWZkZWYgSU5JVF9T UFRZCisgICAgc3B0eSA9IHQ7CisgICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUiLCJzcHR5Iixz cHR5KTsKKyNlbmRpZiAvKiBJTklUX1NQVFkgKi8KKyNpZmRlZiBTVFJFQU1TUFRZCisgICAgaWYg KGlvY3RsKHQsSV9QVVNILCJwY2t0IikgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImdldHB0 eXNsYXZlKCkiLCJpb2N0bChJX1BVU0gpIGZhaWxlZCIsZXJybm8pOworI2lmbmRlZiBfQUlYCisg ICAgICAgIGZhdGFsKCJJX1BVU0ggcGNrdCIpOworI2VuZGlmIC8qIF9BSVggKi8KKyAgICB9Cisj ZW5kaWYgLyogU1RSRUFNU1BUWSAqLworCisgICAgLyogU2V0IHVwIHRoZSB0dHkgbW9kZXMgYXMg d2UgbGlrZSB0aGVtIHRvIGJlLiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBPcmlnaW5hbGx5 IGxpa2UgdGhpcy4uLiBCdXQgdGhpcyBpcyB0aGUgbWFzdGVyIC0gd2Ugd2FudCB0aGUgc2xhdmUg Ki8KKyAgICAvKiBBbnl3YXksIHRoaXMgZmFpbHMgb24gU29sYXJpcyBhbmQgcHJvYmFibHkgb3Ro ZXIgU3lzdGVtIFYgT1MncyAqLworICAgIGluaXRfdGVybWJ1Zih0dHlmZCk7CisjZWxzZQorICAg IGluaXRfdGVybWJ1Zih0KTsKKyNlbmRpZgkvKiBDT01NRU5UICovCisjaWZkZWYgVElPQ0dXSU5T WgorICAgIGlmIChjbWRfcm93cyB8fCBjbWRfY29scykgeworICAgICAgICBtZW1zZXQoKGNoYXIg Kikmd3MsIDAsIHNpemVvZih3cykpOworICAgICAgICB3cy53c19jb2wgPSBjbWRfY29sczsKKyAg ICAgICAgd3Mud3Nfcm93ID0gY21kX3Jvd3M7CisJZGVidWcoRjEwMSwiZ2V0cHR5c2xhdmUoKSBk b2luZyBUSU9DU1dJTlNaLi4uIiwiIix0KTsKKyAgICAgICAgaW9jdGwodCwgVElPQ1NXSU5TWiwg KGNoYXIgKikmd3MpOworICAgIH0KKyNlbmRpZiAvKiBUSU9DR1dJTlNaICovCisKKyAgICAvKiBG b3IgZXh0ZXJuYWwgcHJvdG9jb2xzLCBwdXQgdGhlIHB0eSBpbiBuby1lY2hvIG1vZGUgKi8KKyAg ICBpZiAoZmMgPT0gMSkgeworCWRlYnVnKEYxMDAsImdldHB0eXNsYXZlKCkgc2V0dGluZyByYXdt b2RlIiwiIiwwKTsKKwkvKiBpZmxhZ3MgKi8KKwl0ZXJtYnVmLmNfaWZsYWcgJj0gfihQQVJNUkt8 SVNUUklQfEJSS0lOVHxJTkxDUnxJR05DUnxJQ1JOTCk7CisJdGVybWJ1Zi5jX2lmbGFnICY9IH4o SU5QQ0t8SUdOUEFSfElNQVhCRUx8SVhBTll8SVhPTnxJWE9GRik7CisJdGVybWJ1Zi5jX2lmbGFn IHw9IElHTkJSSzsKKyNpZmRlZiBJVUNMQworCXRlcm1idWYuY19pZmxhZyAmPSB+SVVDTEM7Cisj ZW5kaWYgLyogSVVDTEMgKi8KKworCS8qIG9mbGFncyAqLworCXRlcm1idWYuY19vZmxhZyAmPSB+ T1BPU1Q7CisjaWZkZWYgT1hUQUJTCisJdGVybWJ1Zi5jX29mbGFnICY9IH5PWFRBQlM7CisjZW5k aWYgLyogT1hUQUJTICovCisjaWZkZWYgT05PQ1IKKwl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9OT0NS OworI2VuZGlmIC8qIE9OT0NSICovCisjaWZkZWYgT05MUkVUCisJdGVybWJ1Zi5jX29mbGFnICY9 IH5PTkxSRVQ7CisjZW5kaWYgLyogT05MUkVUICovCisjaWZkZWYgT05MQ1IKKwl0ZXJtYnVmLmNf b2ZsYWcgJj0gfk9OTENSOworI2VuZGlmIC8qIE9OTENSICovCisKKwkvKiBsZmxhZ3MgKi8KKwl0 ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE87CisjaWZkZWYgRUNIT0UKKwl0ZXJtYnVmLmNfbGZsYWcg Jj0gfkVDSE9FOworI2VuZGlmIC8qIEVDSE9FICovCisjaWZkZWYgRUNIT05MCisJdGVybWJ1Zi5j X2xmbGFnICY9IH5FQ0hPTkw7CisjZW5kaWYgLyogRUNIT05MICovCisjaWZkZWYgRUNIT1BSVAor CXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT1BSVDsKKyNlbmRpZiAvKiBFQ0hPUFJUICovCisjaWZk ZWYgRUNIT0tFCisJdGVybWJ1Zi5jX2xmbGFnICY9IH5FQ0hPS0U7CisjZW5kaWYgLyogRUNIT0tF ICovCisjaWZkZWYgRUNIT0NUTAorCXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT0NUTDsKKyNlbmRp ZiAvKiBFQ0hPQ1RMICovCisjaWZkZWYgQUxUV0VSQVNFCisJdGVybWJ1Zi5jX2xmbGFnICY9IH5B TFRXRVJBU0U7CisjZW5kaWYgLyogQUxUV0VSQVNFICovCisjaWZkZWYgRVhUUFJPQworCXRlcm1i dWYuY19sZmxhZyAmPSB+RVhUUFJPQzsKKyNlbmRpZiAvKiBFWFRQUk9DICovCisJdGVybWJ1Zi5j X2xmbGFnICY9IH4oSUNBTk9OfElTSUd8SUVYVEVOfFRPU1RPUHxGTFVTSE98UEVORElOKTsKKwor I2lmZGVmIE5PS0VSTklORk8KKwl0ZXJtYnVmLmNfbGZsYWcgfD0gTk9LRVJOSU5GTzsKKyNlbmRp ZgkvKiBOT0tFUk5JTkZPICovCisJLyogdGVybWJ1Zi5jX2xmbGFnIHw9IE5PRkxTSDsgKi8KKwl0 ZXJtYnVmLmNfbGZsYWcgJj0gfk5PRkxTSDsKKworCS8qIGNmbGFncyAqLworCXRlcm1idWYuY19j ZmxhZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOworCXRlcm1idWYuY19jZmxhZyB8PSBDUzh8 Q1JFQUQ7CisjaWZkZWYgVk1JTgorCXRlcm1idWYuY19jY1tWTUlOXSA9IDE7CisjZW5kaWYJLyog Vk1JTiAqLworICAgIH0gZWxzZSB7CQkJCS8qIFJlZ3VsYXIgaW50ZXJhY3RpdmUgdXNlICovCisJ ZGVidWcoRjEwMCwiZ2V0cHR5c2xhdmUoKSBzZXR0aW5nIGNvb2tlZCBtb2RlIiwiIiwwKTsKKwor CS8qIFNldHRpbmdzIGZvciBzZ3R0eSBiYXNlZCBzeXN0ZW1zICovCisKKyNpZm5kZWYgVVNFX1RF Uk1JTworCXRlcm1idWYuc2cuc2dfZmxhZ3MgfD0gQ1JNT0R8QU5ZUHxFQ0hPfFhUQUJTOworI2Vu ZGlmIC8qIFVTRV9URVJNSU8gKi8KKworI2lmbmRlZiBPWFRBQlMKKyNkZWZpbmUgT1hUQUJTIDAK KyNlbmRpZiAvKiBPWFRBQlMgKi8KKworCS8qIFNldHRpbmdzIGZvciBVTklDT1MgYW5kIEhQVVgg Ki8KKworI2lmZGVmIENSQVkKKwl0ZXJtYnVmLmNfb2ZsYWcgPSBPUE9TVHxPTkxDUnxUQUIzOwor CXRlcm1idWYuY19pZmxhZyA9IElHTlBBUnxJU1RSSVB8SUNSTkx8SVhPTjsKKwl0ZXJtYnVmLmNf bGZsYWcgPSBJU0lHfElDQU5PTnxFQ0hPfEVDSE9FfEVDSE9LOworCXRlcm1idWYuY19jZmxhZyA9 IEVYVEJ8SFVQQ0x8Q1M4OworI2Vsc2UgLyogQ1JBWSAqLworI2lmZGVmIEhQVVgKKwl0ZXJtYnVm LmNfb2ZsYWcgPSBPUE9TVHxPTkxDUnxUQUIzOworCXRlcm1idWYuY19pZmxhZyA9IElHTlBBUnxJ U1RSSVB8SUNSTkx8SVhPTjsKKwl0ZXJtYnVmLmNfbGZsYWcgPSBJU0lHfElDQU5PTnxFQ0hPfEVD SE9FfEVDSE9LOworCXRlcm1idWYuY19jZmxhZyA9IEVYVEJ8SFVQQ0x8Q1M4OworI2Vsc2UgLyog SFBVWCAqLworI2lmZGVmIFVTRV9URVJNSU8KKwkvKgorCSAgU2V0dGluZ3MgZm9yIGFsbCBvdGhl ciB0ZXJtaW9zL3Rlcm1pbyBiYXNlZCBzeXN0ZW1zLCBvdGhlciB0aGFuIAorCSAgNC40QlNELiAg SW4gNC40QlNEIHRoZSBrZXJuZWwgZG9lcyB0aGUgaW5pdGlhbCB0ZXJtaW5hbCBzZXR1cC4KKwkq LworI2lmZGVmIEJTRDQyCisjaWZuZGVmIEJTRDQ0CisJdGVybWJ1Zi5jX2xmbGFnIHw9IEVDSE98 SUNBTk9OfElFWFRFTnxJU0lHOworCXRlcm1idWYuY19vZmxhZyB8PSBPTkxDUnxPWFRBQlN8T1BP U1Q7CisJdGVybWJ1Zi5jX2lmbGFnIHw9IElDUk5MfElHTlBBUjsKKwl0ZXJtYnVmLmNfY2ZsYWcg fD0gSFVQQ0w7CisJdGVybWJ1Zi5jX2lmbGFnICY9IH5JWE9GRjsKKyNlbmRpZiAvKiBCU0Q0NCAq LworI2Vsc2UgLyogQlNENDIgKi8KKwl0ZXJtYnVmLmNfbGZsYWcgfD0gRUNIT3xJQ0FOT058SUVY VEVOfElTSUc7CisJdGVybWJ1Zi5jX29mbGFnIHw9IE9OTENSfE9YVEFCU3xPUE9TVDsKKwl0ZXJt YnVmLmNfaWZsYWcgfD0gSUNSTkx8SUdOUEFSOworCXRlcm1idWYuY19jZmxhZyB8PSBIVVBDTDsK Kwl0ZXJtYnVmLmNfaWZsYWcgJj0gfklYT0ZGOworI2VuZGlmIC8qIEJTRDQyICovCisjZW5kaWYg LyogVVNFX1RFUk1JTyAqLworI2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBDUkFZICovCisg ICAgfQorCisgICAgLyogU2V0IHRoZSB0dHkgbW9kZXMsIGFuZCBtYWtlIHRoaXMgb3VyIGNvbnRy b2xsaW5nIHR0eS4gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgLyogQnV0IHRoaXMgaXMgdGhlIG1h c3RlciAtIHdlIHdhbnQgdGhlIHNsYXZlICovCisgICAgc2V0X3Rlcm1idWYodHR5ZmQpOworI2Vs c2UKKyAgICBzZXRfdGVybWJ1Zih0KTsKKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICBpZiAo dCAhPSAwKQorICAgICAgZHVwMih0LCAwKTsKKyAgICBpZiAodCAhPSAxKQorICAgICAgZHVwMih0 LCAxKTsKKyAgICBpZiAodCAhPSAyKSB7CisJaWYgKGZjID09IDApIHsKKwkgICAgZHVwMih0LCAy KTsKKwl9IGVsc2UgaWYgKGZjID09IDEpIHsKKwkgICAgLyogRm9yIGV4dGVybmFsIHByb3RvY29s cywgc2VuZCBzdGRlcnIgdG8gL2Rldi9udWxsICovCisjaWZkZWYgQ09NTUVOVAorCSAgICBpbnQg eHg7CisjaWZuZGVmIENPTU1FTlQKKwkgICAgY2hhciAqIHMgPSAiL2Rldi9udWxsIjsKKwkgICAg ZXJybm8gPSAwOworCSAgICB4eCA9IG9wZW4ocywgT19XUk9OTFkpOworI2Vsc2UKKwkgICAgY2hh ciAqIHMgPSAicHR5LmxvZyI7CisJICAgIGVycm5vID0gMDsKKwkgICAgeHggPSBvcGVuKHMsIE9f Q1JFQVQsIDA2NDQpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgZGVidWcoRjExMSwiZ2V0 cHR5c2xhdmUgcmVkaXJlY3Qgc3RkZXJyIixzLGVycm5vKTsKKwkgICAgZHVwMih4eCwyKTsKKyNl bmRpZgkvKiBDT01NRU5UICovCisJfQorICAgIH0KKyAgICBpZiAodCA+IDIpCisgICAgICBjbG9z ZSh0KTsKKworICAgIGlmICh0dHlmZCA+IDIpIHsKKwljbG9zZSh0dHlmZCk7CisgICAgICAgIHR0 eWZkID0gLTE7CisJKmZkID0gdHR5ZmQ7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworI2lm ZGVmIEhBVkVfUFRZVFJBUAorLyoKKyAgVG8gYmUgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHRy YXAgaXMgcGVuZGluZyBvbiBhIHB0eQorICBpZiBhbmQgb25seSBpZiBzZWxlY3QoKSBjYW5ub3Qg YmUgdXNlZC4KKyovCitpbnQKK3B0eV90cmFwX3BlbmRpbmcoZmQpIGludCBmZDsgeworICAgIGlu dCBwZW5kaW5nOworICAgIGludCByYzsKKworICAgIHJjID0gaW9jdGwoZmQsIFRJT0NUUkFQU1RB VFVTLCAoY2hhciAqKSZwZW5kaW5nLCBzaXplb2YocGVuZGluZykpOworICAgIGlmIChyYyA9PSAw KSB7CisgICAgICAgIGRlYnVnKEYxMDEsInB0eV90cmFwX3BlbmRpbmcoKSIsIiIscGVuZGluZyk7 CisgICAgICAgIHJldHVybihwZW5kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyhG MTExLCJwdHlfdHJhcF9wZW5kaW5nKCkiLCJpb2N0bCgpIGZhaWxlZCIscmMpOworICAgICAgICBy ZXR1cm4oLTEpOworICAgIH0KK30KKworLyoKKyAgVG8gYmUgY2FsbGVkIGFmdGVyIHNlbGVjdCgp IGhhcyByZXR1cm5lZCBpbmRpY2F0aW5nIHRoYXQgYW4gZXhjZXB0aW9uIGlzCisgIHdhaXRpbmcg b24gYSBwdHkuICBJdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBv ZiB0aGUgcHR5LgorICBSZXR1cm5zIC0xIG9uIGVycm9yOyAwIGlmIHB0eSBpcyBzdGlsbCBvcGVu OyAxIGlmIHB0eSBoYXMgY2xvc2VkLgorKi8KK2ludAorcHR5X3RyYXBfaGFuZGxlcihmZCkgaW50 IGZkOyB7CisgICAgc3RydWN0IHJlcXVlc3RfaW5mbyByaTsKKworICAgIG1lbXNldCgmcmksMCxz aXplb2YocmkpKTsKKyAgICBpZiAoaW9jdGwoZmQsVElPQ1JFUUNIRUNLLChjaGFyICopJnJpLCBz aXplb2YocmkpKSAhPSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsInB0eV90cmFwX2hhbmRsZXIo KSIsImlvY3RsKFRJT0NSRVFDSEVDSykgZmFpbGVkIixlcnJubyk7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorICAgIHN3aXRjaCAocmkucmVxdWVzdCkgeworICAgICAgY2FzZSBUSU9DT1BF TjoKKyAgICAgICAgZGVidWcoRjExMCwicHR5X3RyYXBfaGFuZGxlcigpIiwiYW4gb3BlbigpIGNh bGwiLDApOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVElPQ0NMT1NFOgorICAgICAgICBk ZWJ1ZyhGMTEwLCJwdHlfdHJhcF9oYW5kbGVyKCkiLCJhIGNsb3NlKCkgY2FsbCIsMCk7CisgICAg ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZGVidWcoRjExMCwicHR5X3RyYXBf aGFuZGxlcigpIiwiYW4gaW9jdGwoKSBjYWxsIiwwKTsKKyAgICAgICAgcmkuZXJybm9fZXJyb3Ig PSBFSU5WQUw7CisgICAgfQorICAgIGlmIChpb2N0bChmZCwgVElPQ1JFUVNFVCwgKGNoYXIgKikm cmksc2l6ZW9mKHJpKSkgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJwdHlfdHJhcF9oYW5k bGVyKCkiLCJpb2N0bChUSU9DUkVRU0VUKSBmYWlsZWQiLGVycm5vKTsKKyAgICAgICAgcmV0dXJu KC0xKTsKKyAgICB9CisgICAgaWYgKHJpLnJlcXVlc3QgPT0gVElPQ0NMT1NFKQorICAgICAgcmV0 dXJuKDEpOworICAgIGVsc2UKKyAgICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBIQVZFX1BU WVRSQVAgKi8KKworVk9JRAorZXhlY19jbWQocykgY2hhciAqIHM7IHsKKyAgICBzdHJ1Y3Qgc3Ry aW5nYXJyYXkgKiBxOworICAgIGNoYXIgKiogYXJncyA9IE5VTEw7CisKKyAgICBpZiAoIXMpIHJl dHVybjsKKyAgICBpZiAoISpzKSByZXR1cm47CisKKyAgICBxID0gY2tzcGxpdCgxLDAscyxOVUxM LCJcXCVbXSYkKy0vPSpeX0Ahe30vPD58LiN+J2A6Oz8iLDcsMCwwKTsKKyAgICBpZiAoIXEpIHJl dHVybjsKKworICAgIGFyZ3MgPSBxLT5hX2hlYWQgKyAxOworCisjaWZkZWYgREVCVUcgICAgCisg ICAgeworCWludCBpLCBuOworCW4gPSBxLT5hX3NpemU7CisJZm9yIChpID0gMDsgaSA8PSBuOyBp KyspIHsKKwkgICAgaWYgKCFhcmdzW2ldKSB7CisJCWRlYnVnKEYxMTEsImV4ZWNfY21kIGFyZyIs Ik5VTEwiLGkpOworCQlicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjExMSwiZXhlY19j bWQgYXJnIixhcmdzW2ldLGkpOworCQlpZiAoaSA9PSBuICYmIGFyZ3NbaV0pIHsKKwkJICAgIGRl YnVnKEYxMDEsImV4ZWNfY21kIFNVQlNUSVRVVElORyBOVUxMIiwiIixpKTsKKwkJICAgIGlmIChz dHJsZW4oYXJnc1tpXSkgPT0gMCkKKwkJICAgICAgbWFrZXN0cigmKGFyZ3NbaV0pLE5VTEwpOwor CQl9CisKKwkgICAgfQorCX0JICAgIAorICAgIH0KKyNlbmRpZgkvKiBERUJVRyAqLworCisgICAg ZXhlY3ZwKGFyZ3NbMF0sYXJncyk7Cit9CisKKy8qIEdldCBhIHB0eSwgc2NhbiBpbnB1dCBsaW5l cy4gKi8KKy8qIGZjID0gMCBmb3IgaW50ZXJhY3RpdmUgYWNjZXNzOyBmYyA9IDEgZm9yIHJ1bm5p bmcgZXh0ZXJuYWwgcHJvdG9jb2xzICovCisKK3N0YXRpYyBpbnQgcHR5X2ZjID0gLTE7CQkJLyog R2xvYmFsIGNvcHkgb2YgZmMgKi8KKworaW50Citkb19wdHkoZmQsIGNtZCwgZmMpIGludCAqIGZk OyBjaGFyICogY21kOyBpbnQgZmM7IHsKKyAgICBsb25nIHJldHZhbDsKKyAgICBpbnQgc3luY3Bp cGVbMl07CisgICAgaW50IGksIHR0eWZkOworI2lmZGVmIEhBVkVfUFRZVFJBUAorICAgIGludCB4 OworI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworCisgICAgZGVidWcoRjEwMSwiQ0tVUFRZLkMg ZG9fcHR5IGZjIiwiIixmYyk7CisKKyAgICB0dHlmZCA9ICpmZDsKKworICAgIHB0eV9tYXN0ZXJf ZmQgPSAtMjsKKyAgICBwdHlfc2xhdmVfZmQgPSAtMjsKKyAgICBwdHlfZm9ya19waWQgPSAtMjsK KworICAgIG1zZyA9IDA7CQkJCS8qIE1lc3NhZ2UgY291bnRlciAqLworICAgIHB0eV9pbml0KCk7 CQkJCS8qIEZpbmQgYW4gYXZhaWxhYmxlIHB0eSB0byB1c2UuICovCisgICAgZXJybm8gPSAwOwor CisgICAgaWYgKChyZXR2YWwgPSBwdHlfZ2V0cHR5KCZ0dHlmZCwgWGxpbmUsIDIwKSkgIT0gMCkg eworCWlmIChtc2crKyA9PSAwKQorCSAgcGVycm9yKFhsaW5lKTsKKyAgICAgICAgZGVidWcoRjEx MSwiZG9fcHR5KCkiLCJwdHlfZ2V0cHR5KCkgZmFpbHMiLHJldHZhbCk7CisJKmZkID0gdHR5ZmQ7 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgICpmZCA9IHR0eWZkOworICAgIGRlYnVn KEYxMTEsImRvX3B0eSgpIFhsaW5lIixYbGluZSx0dHlmZCk7CisKKyNpZmRlZiBTSUdUVE9VCisv KgorICBJZ25vcmluZyBTSUdUVE9VIGtlZXBzIHRoZSBrZXJuZWwgZnJvbSBibG9ja2luZyB1cy4g IHdlIHR3ZWFrIHRoZSB0dHkgd2l0aAorICBhbiBpb2N0bCgpIChpbiB0dGlvY3QoKSBpbiAvc3lz L3R0eS5jIGluIGEgQlNEIGtlcm5lbCkKKyovCisgICAgIHNpZ25hbChTSUdUVE9VLCBTSUdfSUdO KTsKKyNlbmRpZiAvKiBTSUdUVE9VICovCisKKy8qIFN0YXJ0IHVwIHRoZSBjb21tYW5kIG9uIHRo ZSBzbGF2ZSBzaWRlIG9mIHRoZSB0ZXJtaW5hbCAqLworCisgICAgaWYgKHBpcGUoc3luY3BpcGUp IDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHkoKSIsInBpcGUoKSBmYWlscyIsMCk7 CisJcGVycm9yKCJwaXBlKCkgZmFpbGVkIik7CisJbXNnKys7CisgICAgICAgIGRlYnVnKEYxMTEs ImRvX3B0eSgpIiwicGlwZSBmYWlscyIsZXJybm8pOworICAgICAgICByZXR1cm4oLTEpOworICAg IH0KKyAgICBpZiAoKGkgPSBmb3JrKCkpIDwgMCkgeworICAgICAgICAvKiBYWFggLSBuZWVkIHRv IGNsZWFuIHVwIHRoZSBhbGxvY2F0ZWQgcHR5ICovCisgICAgICAgIHBlcnJvcigiZm9yaygpIGZh aWxlZCIpOworCW1zZysrOworICAgICAgICBkZWJ1ZyhGMTExLCJkb19wdHkoKSIsImZvcmsgZmFp bHMiLGVycm5vKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYgKGkpIHsgIC8q IFdhaXQgZm9yIGNoaWxkIGJlZm9yZSB3cml0aW5nIHRvIHBhcmVudCBzaWRlIG9mIHB0eS4gKi8K KyAgICAgICAgY2hhciBjOworI2lmZGVmIEhBVkVfUFRZVFJBUAorICAgICAgICBpbnQgb24gPSAx OworI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworCWNsb3NlKHN5bmNwaXBlWzFdKTsKKwllcnJu byA9IDA7CisgICAgICAgIGlmIChyZWFkKHN5bmNwaXBlWzBdLCAmYywgMSkgPT0gMCkgeyAvKiBT bGF2ZSBzaWRlIGRpZWQgKi8KKwkgICAgcGVycm9yKCJQaXBlIHJlYWQoKSBmYWlsZWQiKTsKKwkg ICAgbXNnKys7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHkoKSIsIlNsYXZlIGZhaWxz IHRvIGluaXRpYWxpemUiLDApOworICAgICAgICAgICAgY2xvc2Uoc3luY3BpcGVbMF0pOworICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBwdHlfZm9ya19waWQgPSBp OwkJLyogU28gd2UgY2FuIGNsZWFuIGl0IHVwIGxhdGVyICovCisJcHR5X2ZvcmtfYWN0aXZlID0g MTsKKwlkZWJ1ZyhGMTAxLCJkb19wdHkgcHR5X2ZvcmtfcGlkIiwiIixwdHlfZm9ya19waWQpOwor I2lmZGVmIEhBVkVfUFRZVFJBUAorICAgICAgICAvKiBIUFVYIGRvZXMgbm90IGFsbG93IHRoZSBt YXN0ZXIgdG8gcmVhZCBlbmQgb2YgZmlsZS4gICovCisgICAgICAgIC8qIFRoZXJlZm9yZSwgd2Ug bXVzdCBkZXRlcm1pbmUgdGhhdCB0aGUgc2xhdmUgaGFzIGJlZW4gKi8KKyAgICAgICAgLyogY2xv c2VkIGJ5IHRyYXBwaW5nIHRoZSBjYWxsIHRvIGNsb3NlKCkuICAgICAgICAgICAgICAqLworCWVy cm5vID0gMDsKKwl4ID0gaW9jdGwodHR5ZmQsIFRJT0NUUkFQLCAoY2hhciAqKSZvbik7CisJZGVi dWcoRjExMSwiZG9fcHR5IGlvY3RsKFRJT0NUUkFQKSIsY2tpdG9hKHgpLGVycm5vKTsKKyNlbmRp ZiAvKiBIQVZFX1BUWVRSQVAgKi8KKyAgICAgICAgZGVidWcoRjExMSwiZG9fcHR5KCkiLCJzeW5j aHJvbml6ZWQgLSBwdHlfZm9ya19waWQiLHB0eV9mb3JrX3BpZCk7CisgICAgICAgIGNsb3NlKHN5 bmNwaXBlWzBdKTsKKyAgICB9IGVsc2UgeworCWludCB4OworCWRlYnVnKEYxMDEsImRvX3B0eSBn ZXRwdHlzbGF2ZSB0dHlmZCBBIiwiIix0dHlmZCk7CisgICAgICAgIGRlYnVnKEYxMTAsImRvX3B0 eSgpIiwiU2xhdmUgc3RhcnRzIiwwKTsKKwl4ID0gZ2V0cHR5c2xhdmUoJnR0eWZkLGZjKTsKKwlk ZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0cHR5c2xhdmUiLCIiLHgpOworICAgICAgICBpZiAoeCA9PSAw KSB7CisJICAgIGRlYnVnKEYxMDEsImRvX3B0eSBnZXRwdHlzbGF2ZSB0dHlmZCBCIiwiIix0dHlm ZCk7CisjaWZkZWYgV0FOVF9VVE1QCisgICAgICAgICAgICBwdHlfdXBkYXRlX3V0bXAoUFRZX1VT RVJfUFJPQ0VTUywKKwkJCSAgICBnZXRwaWQoKSwKKwkJCSAgICAiS0VSTUlUIiwKKwkJCSAgICBY bGluZSwKKwkJCSAgICBjbWQsCisJCQkgICAgUFRZX1RUWVNMT1RfVVNBQkxFCisJCQkgICAgKTsK KyNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KKyAgICAgICAgICAgIC8qIE5vdGlmeSBvdXIgcGFyZW50 IHdlJ3JlIHJlYWR5IHRvIGNvbnRpbnVlLiovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb19w dHkoKSIsInNsYXZlIHN5bmNocm9uaXppbmciLDApOworICAgICAgICAgICAgd3JpdGUoc3luY3Bp cGVbMV0sInkiLDEpOworICAgICAgICAgICAgY2xvc2Uoc3luY3BpcGVbMF0pOworICAgICAgICAg ICAgY2xvc2Uoc3luY3BpcGVbMV0pOworCisJICAgIGRlYnVnKEYxMTAsImRvX3B0eSBjbWQiLGNt ZCwiIik7CisgICAgICAgICAgICBleGVjX2NtZChjbWQpOworICAgICAgICAgICAgZGVidWcoRjEx MSwiZG9fcHR5KCkiLCJleGVjX2NtZCgpIHJldHVybnMgLSB3aHk/IixlcnJubyk7CisgICAgICAg IH0KKwkqZmQgPSB0dHlmZDsKKyAgICAgICAgZGVidWcoRjExMCwiZG9fcHR5KCkiLCJnZXRwdHlz bGF2ZSgpIGZhaWxzIC0gZXhpdGluZyIsMCk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAg ICpmZCA9IHR0eWZkOworICAgIHB0eV9mYyA9IGZjOworICAgIHJldHVybihnZXRwaWQoKSk7Cit9 IC8qIGVuZCBvZiBkb19wdHkoKSAqLworCisKK1ZPSUQKK2VuZF9wdHkoKSB7CisgICAgbXNnID0g MDsJCQkJLyogTWVzc2FnZSBjb3VudGVyICovCisgICAgZGVidWcoRjEwMSwiZW5kX3B0eSBwdHlf Zm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7CisgICAgaWYgKFhsaW5lWzBdICYmIHB0eV9mb3Jr X3BpZCA+PSAwKSB7CisgICAgICAgIHB0eV9jbGVhbnVwKFhsaW5lLHB0eV9mb3JrX3BpZCwxKTsK KyAgICAgICAgWGxpbmVbMF0gPSAnXDAnOworICAgICAgICBwdHlfZm9ya19waWQgPSAtMTsKKwlw dHlfZm9ya19hY3RpdmUgPSAwOworCWRlYnVnKEYxMDEsImVuZF9wdHkgcHR5X2ZvcmtfYWN0aXZl IiwiIixwdHlfZm9ya19hY3RpdmUpOworICAgIH0KKyAgICBwdHlfZmMgPSAtMTsKK30KKyNlbmRp ZiAvKiBORVRQVFkgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrdXB0eS5jLmM5OSBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1cHR5LmMuYzk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5 MDY1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdXB0eS5jLmM5OQpAQCAtMCwwICsxLDE5NzkgQEAKK2NoYXIgKmNrcHR5diA9ICJQ c2V1ZG90ZXJtaW5hbCBzdXBwb3J0LCA5LjAuMTAxLCAxMyBKdW4gMjAxMSI7CisKKy8qICBDIEsg VSBQIFQgWSAgLS0gIEMtS2VybWl0IHBzZXVkb3Rlcm1pbmFsIGNvbnRyb2wgZnVuY3Rpb25zIGZv ciBVTklYICAqLworCisvKiBMYXN0IHVwZGF0ZTogTW9uIEp1biAxMyAxMTozMjo1MiAyMDExICov CisKKy8qCisgIENvcHlyaWdodCAxOTk1IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBv ZiBUZWNobm9sb2d5LgorCisgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBk aXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICBkb2N1bWVudGF0aW9uIGZvciBhbnkg cHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkCisgIHRo YXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRo YXQgYm90aCB0aGF0CisgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3Rp Y2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKKyAgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5h bWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgIHB1YmxpY2l0eSBw ZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp YywKKyAgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgRnVydGhlcm1vcmUgaWYgeW91IG1vZGlm eSB0aGlzIHNvZnR3YXJlIHlvdSBtdXN0CisgIGxhYmVsIHlvdXIgc29mdHdhcmUgYXMgbW9kaWZp ZWQgc29mdHdhcmUgYW5kIG5vdCBkaXN0cmlidXRlIGl0IGluIHN1Y2ggYQorICBmYXNoaW9uIHRo YXQgaXQgbWlnaHQgYmUgY29uZnVzZWQgd2l0aCB0aGUgb3JpZ2luYWwgTS5JLlQuIHNvZnR3YXJl LgorICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0 eSBvZiB0aGlzIHNvZnR3YXJlIGZvcgorICBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJh cyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKKyAgTW9kaWZpZWQg Zm9yIHVzZSBpbiBDLUtlcm1pdCwgYW5kIG5ldyBtYXRlcmlhbCBhZGRlZCwgYnk6CisKKyAgSmVm ZnJleSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgIFNlY3VyZSBFbmRw b2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorICBOb3ZlbWJlciAxOTk5CisKKyAgUGFyYW1ldGVy aXplZCBmb3IgcHR5IGZpbGUgZGVzY3JpcHRvciBhbmQgZnVuY3Rpb24gY29kZSwKKyAgRnJhbmsg ZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQorICBEZWMgMjAwNiAt IFNlcCAyMDA5CisqLworCisvKgorICBCdWlsdCBhbmQgdGVzdGVkIHN1Y2Nlc3N1bGx5IG9uOgor ICAgLiA0LjRCU0QsIGluY2x1ZGluZyBCU0RJL09TLCBOZXRCU0QsIEZyZWVCU0QsIE9wZW5CU0Qs IE1hYyBPUyBYCisgICAuIEFJWCA0LjEgYW5kIGxhdGVyCisgICAuIERHL1VYIDUuNFI0LjExCisg ICAuIERpZ2l0YWwgVU5JWCAzLjIgYW5kIDQuMAorICAgLiBIUC1VWCA5LjAwIGFuZCBsYXRlcgor ICAgLiBJUklYIDYuMCBhbmQgbGF0ZXIKKyAgIC4gTGludXgKKyAgIC4gTWFjIE9TIFggMTAuNAor ICAgLiBOZVhUU1RFUCAzLngKKyAgIC4gT3BlbkJTRAorICAgLiBRTlggNC4yNSAoZXhjZXB0IFBU WSBwcm9jZXNzIHRlcm1pbmF0aW9uIG5vdCBkZXRlY3RlZCkKKyAgIC4gU0NPIE9TUjUuMC41Cisg ICAuIFNDTyBVbml4d2FyZSA3CisgICAuIFNJTklYIDUuNDIKKyAgIC4gU29sYXJpcyAyLnggYW5k IDcKKyAgIC4gU3VuT1MgNC4xLjMKKworICBGYWlsdXJlcyBpbmNsdWRlOgorICAgLiBTQ08gVU5J WCAzLjJ2NC4yIChjb21waWxlIGZhaWxzIHdpdGggc3ludGF4IGVycm9yIGluIDxtZW1vcnkuaD4p CisgICAuIEhQLVVYIDguMDAgYW5kIGVhcmxpZXIgKG5vIHZoYW5ndXAgb3IgcHRzbmFtZSByb3V0 aW5lcykKKyovCisKKyNpbmNsdWRlICJja2NzeW0uaCIKKyNpbmNsdWRlICJja2NkZWIuaCIJCQkv KiBUbyBwaWNrIHVwIE5FVFBUWSBkZWZpbml0aW9uICovCisKKyNpZm5kZWYgTkVUUFRZCQkJCS8q IFNlbGVjdG9yIGZvciBQVFkgc3VwcG9ydCAqLworCitjaGFyICogcHR5dmVyID0gIk5vIFBUWSBz dXBwb3J0IjsKKworI2Vsc2UgIC8qIChyZXN0IG9mIHRoaXMgbW9kdWxlLi4uKSAqLworCitjaGFy ICogcHR5dmVyID0gIlBUWSBzdXBwb3J0IDguMC4wMTYsIDIyIEF1ZyAyMDA3IjsKKworLyogVGhl c2Ugd2lsbCBubyBkb3VidCBuZWVkIGFkanVzdG1lbnQuLi4gKi8KKworI2lmbmRlZiBORVhUCisj ZGVmaW5lIEhBVkVfU0VUU0lECisjZW5kaWYgLyogTkVYVCAqLworI2RlZmluZSBIQVZFX0tJTExQ RworI2RlZmluZSBIQVZFX1RUWU5BTUUKKyNkZWZpbmUgSEFWRV9XQUlUUElECisKKyNpZmRlZiBT VU5PUzQxCisjZGVmaW5lIEJTRDQ0T1JQT1NJWAorI2VuZGlmCS8qIFNVTk9TNDEgKi8KKworI2lm bmRlZiBVU0VfVEVSTUlPCisjaWZkZWYgTElOVVgKKyNkZWZpbmUgVVNFX1RFUk1JTworI2Vsc2UK KyNpZmRlZiBBVFRTVgorI2RlZmluZSBVU0VfVEVSTUlPCisjZWxzZQorI2lmZGVmIEhQVVgKKyNk ZWZpbmUgVVNFX1RFUk1JTworI2Vsc2UKKyNpZmRlZiBBSVgKKyNkZWZpbmUgVVNFX1RFUk1JTwor I2Vsc2UKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyNkZWZpbmUgVVNFX1RFUk1JTworI2Vsc2UKKyNp ZmRlZiBJUklYNjAKKyNkZWZpbmUgVVNFX1RFUk1JTworI2Vsc2UKKyNpZmRlZiBRTlgKKyNkZWZp bmUgVVNFX1RFUk1JTworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIElSSVg2MCAqLworI2Vu ZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIEFJWCAqLworI2VuZGlmIC8qIEhQVVgg Ki8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIExJTlVYICovCisjZW5kaWYgLyogVVNF X1RFUk1JTyAqLworCisjaWZkZWYgUU5YCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZiAvKiBR TlggKi8KKworI2lmZGVmIFVTRV9URVJNSU8KKyNkZWZpbmUgUE9TSVhfVEVSTUlPUwkJCS8qIFNl ZW1zIHRvIGJlIGEgbWlzbm9tZXIgKi8KKyNlbmRpZiAvKiBVU0VfVEVSTUlPICovCisKKyNpZmRl ZiBORVhUCisjaWZuZGVmIEdFVFBHUlBfT05FQVJHCisjZGVmaW5lIEdFVFBHUlBfT05FQVJHCisj ZW5kaWYgLyogR0VUUEdSUF9PTkVBUkcgKi8KKyNlbmRpZiAvKiBORVhUICovCisKKyNpZmRlZiBX QU5UX1VUTVAJCQkvKiBTZWUgY2t1cHR5LmggKi8KKy8qCisgIFdBTlRfVVRNUCBpcyBub3QgZGVm aW5lZCBiZWNhdXNlIChhKSB0aGUgdXRtcC93dG1wIGp1bmsgaXMgdGhlIG1vc3QKKyAgbm9ucG9y dGFibGUgcGFydCBvZiB0aGlzIG1vZHVsZSwgYW5kIChiKSB3ZSdyZSBub3QgbG9nZ2luZyBhbnli b2R5CisgIGluLCB3ZSdyZSBqdXN0IHJ1bm5pbmcgYSBwcm9jZXNzLCBhbmQgZG9uJ3QgbmVlZCB0 byB3cml0ZSB1dG1wL3d0bXAgcmVjb3Jkcy4KKyovCisjaWZuZGVmIEhBVkVfU0VUVVRYRU5UCQkJ LyogV2hvIGhhcyA8dXRtcHguaD4gKi8KKyNpZmRlZiBTT0xBUklTCisjZGVmaW5lIEhBVkVfU0VU VVRYRU5UCisjZWxzZQorI2lmZGVmIElSSVg2MAorI2RlZmluZSBIQVZFX1NFVFVUWEVOVAorI2Vs c2UKKyNpZmRlZiBDS19TQ09WNQorI2RlZmluZSBIQVZFX1NFVFVUWEVOVAorI2Vsc2UKKyNpZmRl ZiBIUFVYMTAKKyNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKKyNlbHNlCisjaWZkZWYgVU5JWFdBUkUK KyNkZWZpbmUgSEFWRV9TRVRVVFhFTlQKKyNlbHNlCisjaWZkZWYgSVJJWDYwCisjZGVmaW5lIEhB VkVfU0VUVVRYRU5UCisjZW5kaWYgLyogSVJJWDYwICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8K KyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIElS SVg2MCAqLworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBIQVZFX1NFVFVUWEVOVCAq LworCisjaWZuZGVmIEhBVkVfVVRIT1NUCQkJLyogRG9lcyB1dG1wIGluY2x1ZGUgdXRfaG9zdFtd PyAqLworI2lmZGVmIEhBVkVfU0VUVVRYRU5UCQkJLyogdXRtcHggYWx3YXlzIGRvZXMgKi8KKyNk ZWZpbmUgSEFWRV9VVEhPU1QKKyNlbHNlCisjaWZkZWYgTElOVVgJCQkJLyogTGludXggZG9lcyAq LworI2RlZmluZSBIQVZFX1VUSE9TVAorI2Vsc2UKKyNpZmRlZiBTVU5PUzQJCQkJLyogU3VuT1Mg ZG9lcyAqLworI2RlZmluZSBIQVZFX1VUSE9TVAorI2Vsc2UKKyNpZmRlZiBBSVg0MQkJCQkvKiBB SVggNC4xIGFuZCBsYXRlciBkbyAqLworI2RlZmluZSBIQVZFX1VUSE9TVAorI2VuZGlmIC8qIEFJ WDQxICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogTElOVVggKi8KKyNlbmRpZiAv KiBIQVZFX1NFVFVUWEVOVCAqLworI2VuZGlmIC8qIEhBVkVfVVRIT1NUICovCisKKyNpZm5kZWYg SEFWRV9VVF9IT1NUCisjaWZuZGVmIE5PX1VUX0hPU1QKKyNkZWZpbmUgTk9fVVRfSE9TVAorI2Vu ZGlmIC8qIE5PX1VUX0hPU1QgKi8KKyNlbmRpZiAvKiBIQVZFX1VUX0hPU1QgKi8KKworI2VuZGlm IC8qIFdBTlRfVVRNUCAqLworCisjaWZkZWYgTElOVVgKKyNkZWZpbmUgQ0tfVkhBTkdVUAorI2Rl ZmluZSBIQVZFX1NZU19TRUxFQ1RfSAorI2RlZmluZSBIQVZFX0dFVFVURU5UCisjZGVmaW5lIEhB VkVfU0VUVVRFTlQKKyNkZWZpbmUgSEFWRV9VUERXVE1QCisjZW5kaWYgLyogTElOVVggKi8KKwor I2lmZGVmIEhQVVgxMAorI2RlZmluZSBDS19WSEFOR1VQCisjZGVmaW5lIFZIQU5HX0ZJUlNUCisj ZGVmaW5lIEhBVkVfUFRTTkFNRQorI2lmbmRlZiBIQVZFX1BUWVRSQVAKKyNkZWZpbmUgSEFWRV9Q VFlUUkFQCisjZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCisjZWxzZQorI2lmZGVmIEhQVVg5Cisj ZGVmaW5lIENLX1ZIQU5HVVAKKyNkZWZpbmUgVkhBTkdfRklSU1QKKyNkZWZpbmUgSEFWRV9QVFNO QU1FCisjaWZuZGVmIEhBVkVfUFRZVFJBUAorI2RlZmluZSBIQVZFX1BUWVRSQVAKKyNlbmRpZiAv KiBIQVZFX1BUWVRSQVAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlmIC8qIEhQVVgxMCAq LworCisjaWZkZWYgU1VOT1M0CisjZGVmaW5lIENLX1ZIQU5HVVAKKyNkZWZpbmUgTk9fVVRfUElE CisjZGVmaW5lIFZIQU5HX0ZJUlNUCisjZW5kaWYgLyogU1VOT1M0ICovCisKKyNpZmRlZiBJUklY NjAKKyNkZWZpbmUgQ0tfVkhBTkdVUAorI2RlZmluZSBIQVZFX19HRVRQVFkKKyNlbmRpZiAvKiBJ UklYNjAgKi8KKworI2lmZGVmIFNJTklYCisjZGVmaW5lIEhBVkVfU1RSRUFNUworI2RlZmluZSBI QVZFX0dSQU5UUFQKKyNkZWZpbmUgSEFWRV9QVFNOQU1FCisjZGVmaW5lIFBVU0hfUFRFTQorI2Rl ZmluZSBQVVNIX0xEVEVSTQorI2RlZmluZSBQVVNIX1RUQ09NUEFUCisjZW5kaWYgLyogU0lOSVgg Ki8KKworI2lmZGVmIHVsdHJpeAorI2RlZmluZSBNVVNUX1NFVFBHUlAKKyNlbmRpZiAvKiB1bHRy aXggKi8KKworI2lmZGVmIFFOWAorI2RlZmluZSBNVVNUX1NFVFBHUlAKKyNkZWZpbmUgTk9fREVW VFRZCisjZGVmaW5lIElOSVRfU1BUWQorI2VuZGlmIC8qIFFOWCAqLworCisjaWZkZWYgTElOVVgK KyNpZmRlZiBIQVZFX1BUTVgKKyNkZWZpbmUgSEFWRV9HUkFOVFBUCisjZGVmaW5lIEhBVkVfUFRT TkFNRQorI2VuZGlmIC8qIEhBVkVfUFRNWCAqLworI2Vsc2UKKyNpZmRlZiBIQVZFX1NUUkVBTVMK KyNkZWZpbmUgSEFWRV9QVE1YCisjZW5kaWYgLyogSEFWRV9TVFJFQU1TICovCisjZW5kaWYgLyog TElOVVggKi8KKworI2luY2x1ZGUgImNrdXB0eS5oIgorCisjaWZkZWYgUFRZTk9CTE9DSworI2lm bmRlZiBPX05ERUxBWQorI2lmZGVmIE9fTk9OQkxPQ0sKKyNkZWZpbmUgT19OREVMQVkgT19OT05C TE9DSworI2VuZGlmIC8qIE9fTk9OQkxPQ0sgKi8KKyNlbmRpZiAvKiBPX05ERUxBWSAqLworI2Vs c2UgLyogUFRZTk9CTE9DSyAqLworI2lmZGVmIE9fTkRFTEFZCisjdW5kZWYgT19OREVMQVkKKyNl bmRpZiAvKiBPX05ERUxBWSAqLworI2RlZmluZSBPX05ERUxBWSAwCisjZW5kaWYgLyogUFRZTk9C TE9DSyAqLworCisjaWZuZGVmIE9OTENSCisjZGVmaW5lIE9OTENSIDAKKyNlbmRpZiAvKiBPTkxD UiAqLworCisjaWZkZWYgQ0tfV0FJVF9ICisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNlbmRpZiAv KiBDS19XQUlUX0ggKi8KKworI2lmZGVmIFNUUkVBTVNQVFkKKyNpZm5kZWYgSU5JVF9TUFRZCisj ZGVmaW5lIElOSVRfU1BUWQorI2VuZGlmIC8qIElOSVRfU1BUWSAqLworCisjaW5jbHVkZSA8c3lz L3N0cmVhbS5oPgorI2luY2x1ZGUgPHN0cm9wdHMuaD4KKyNpbmNsdWRlIDx0ZXJtaW8uaD4KKwor LyogTWFrZSBzdXJlIHdlIGRvbid0IGdldCB0aGUgQlNEIHZlcnNpb24gKi8KKworI2lmZGVmIEhB VkVfU1lTX1RUWV9ICisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL3N5cy90dHkuaCIKKyNlbmRpZiAv KiBIQVZFX1NZU19UVFlfSCAqLworCisjaWZkZWYgSEFTX1BUWVZBUgkJCS8qIFdoZXJlIGlzIHRo aXMgc2V0PyAqLworCisjaW5jbHVkZSA8c3lzL3B0eXZhci5oPgorCisjZWxzZSAvKiBIQVNfUFRZ VkFSICovCisKKyNpZm5kZWYgVElPQ1BLVF9GTFVTSFdSSVRFCisjZGVmaW5lIFRJT0NQS1RfRkxV U0hXUklURSAweDAyCisjZGVmaW5lIFRJT0NQS1RfTk9TVE9QICAgICAweDEwCisjZGVmaW5lIFRJ T0NQS1RfRE9TVE9QICAgICAweDIwCisjZGVmaW5lIFRJT0NQS1RfSU9DVEwgICAgICAweDQwCisj ZW5kaWYgLyogVElPQ1BLVF9GTFVTSFdSSVRFICovCisKKyNlbmRpZiAvKiBIQVNfUFRZVkFSICov CisKKyNpZmRlZiBIQVZFX1RUWV9ICisjaW5jbHVkZSA8dHR5Lmg+CisjZW5kaWYgLyogSEFWRV9U VFlfSCAqLworCisvKgorICBCZWNhdXNlIG9mIHRoZSB3YXkgcHR5aWJ1ZiBpcyB1c2VkIHdpdGgg c3RyZWFtcyBtZXNzYWdlcywgd2UgbmVlZAorICBwdHlpYnVmKzEgdG8gYmUgb24gYSBmdWxsLXdv cmQgYm91bmRhcnkuICBUaGUgZm9sbG93aW5nIHdlaXJkbmVzcworICBpcyBzaW1wbHkgdG8gbWFr ZSB0aGF0IGhhcHBlbi4KKyovCitsb25nIHB0eWlidWZidWZbQlVGU0laL3NpemVvZihsb25nKSsx XTsKK2NoYXIgKnB0eWlidWYgPSAoKGNoYXIgKikmcHR5aWJ1ZmJ1ZlsxXSktMTsKK2NoYXIgKnB0 eWlwID0gKChjaGFyICopJnB0eWlidWZidWZbMV0pLTE7CitjaGFyIHB0eWlidWYyW0JVRlNJWl07 Cit1bnNpZ25lZCBjaGFyIGN0bGJ1ZltCVUZTSVpdOworc3RydWN0IHN0cmJ1ZiBzdHJidWZjLCBz dHJidWZkOworCitpbnQgcmVhZHN0cmVhbSgpOworCisjZWxzZSAgLyogISBTVFJFQU1TUFRZICov CisKKy8qIEkvTyBkYXRhIGJ1ZmZlcnMsIHBvaW50ZXJzLCBhbmQgY291bnRlcnMuICovCisKK2No YXIgcHR5aWJ1ZltCVUZTSVpdLCAqcHR5aXAgPSBwdHlpYnVmOworY2hhciBwdHlpYnVmMltCVUZT SVpdOworCisjZW5kaWYgLyogISBTVFJFQU1TUFRZICovCisKKyNpZm5kZWYgVVNFX1RFUk1JTwor c3RydWN0IHRlcm1idWYgeworICAgIHN0cnVjdCBzZ3R0eWIgc2c7CisgICAgc3RydWN0IHRjaGFy cyB0YzsKKyAgICBzdHJ1Y3QgbHRjaGFycyBsdGM7CisgICAgaW50IHN0YXRlOworICAgIGludCBs ZmxhZ3M7Cit9IHRlcm1idWYsIHRlcm1idWYyOworCisjZGVmaW5lIGNmc2V0b3NwZWVkKHRwLHZh bCkgKHRwKS0+c2cuc2dfb3NwZWVkID0gKHZhbCkKKyNkZWZpbmUgY2ZzZXRpc3BlZWQodHAsdmFs KSAodHApLT5zZy5zZ19pc3BlZWQgPSAodmFsKQorI2RlZmluZSBjZmdldG9zcGVlZCh0cCkgICAg ICh0cCktPnNnLnNnX29zcGVlZAorI2RlZmluZSBjZmdldGlzcGVlZCh0cCkgICAgICh0cCktPnNn LnNnX2lzcGVlZAorCisjZWxzZSAgLyogVVNFX1RFUk1JTyAqLworCisjaWZkZWYgU1lTVl9URVJN SU8KKyNkZWZpbmUgdGVybWlvcyB0ZXJtaW8KKyNlbmRpZiAvKiBTWVNWX1RFUk1JTyAqLworCisj aWZuZGVmIFRDU0FOT1cKKworI2lmZGVmIFRDU0VUUworCisjZGVmaW5lIFRDU0FOT1cgVENTRVRT CisjZGVmaW5lIFRDU0FEUkFJTiBUQ1NFVFNXCisjZGVmaW5lIHRjZ2V0YXR0cihmLCB0KSBpb2N0 bChmLCBUQ0dFVFMsIChjaGFyICopdCkKKworI2Vsc2UgLyogVENTRVRTICovCisKKyNpZmRlZiBU Q1NFVEEKKyNkZWZpbmUgVENTQU5PVyBUQ1NFVEEKKyNkZWZpbmUgVENTQURSQUlOIFRDU0VUQVcK KyNkZWZpbmUgdGNnZXRhdHRyKGYsdCkgaW9jdGwoZixUQ0dFVEEsKGNoYXIgKil0KQorI2Vsc2Ug LyogVENTRVRBICovCisjZGVmaW5lIFRDU0FOT1cgVElPQ1NFVEEKKyNkZWZpbmUgVENTQURSQUlO IFRJT0NTRVRBVworI2RlZmluZSB0Y2dldGF0dHIoZix0KSBpb2N0bChmLFRJT0NHRVRBLChjaGFy ICopdCkKKyNlbmRpZiAvKiBUQ1NFVEEgKi8KKworI2VuZGlmIC8qIFRDU0VUUyAqLworCisjZGVm aW5lIHRjc2V0YXR0cihmLGEsdCkgaW9jdGwoZixhLHQpCisjZGVmaW5lIGNmc2V0b3NwZWVkKHRw LHZhbCkgKHRwKS0+Y19jZmxhZyAmPSB+Q0JBVUQ7KHRwKS0+Y19jZmxhZ3w9KHZhbCkKKyNkZWZp bmUgY2ZnZXRvc3BlZWQodHApICgodHApLT5jX2NmbGFnICYgQ0JBVUQpCisKKyNpZmRlZiBDSUJB VUQKKyNkZWZpbmUgY2ZzZXRpc3BlZWQodHAsdmFsKSBcCisgKHRwKS0+Y19jZmxhZyAmPSB+Q0lC QVVEOyAodHApLT5jX2NmbGFnIHw9ICgodmFsKTw8SUJTSElGVCkKKyNkZWZpbmUgY2ZnZXRpc3Bl ZWQodHApICgoKHRwKS0+Y19jZmxhZyAmIENJQkFVRCk+PklCU0hJRlQpCisjZWxzZSAvKiBDSUJB VUQgKi8KKyNkZWZpbmUgY2ZzZXRpc3BlZWQodHAsdmFsKSAodHApLT5jX2NmbGFnICY9IH5DQkFV RDsgKHRwKS0+Y19jZmxhZ3w9KHZhbCkKKyNkZWZpbmUgY2ZnZXRpc3BlZWQodHApICgodHApLT5j X2NmbGFnICYgQ0JBVUQpCisjZW5kaWYgLyogQ0lCQVVEICovCisKKyNlbmRpZiAvKiBUQ1NBTk9X ICovCisKK3N0cnVjdCB0ZXJtaW9zIHRlcm1idWYsIHRlcm1idWYyOyAgICAgICAvKiBwdHkgY29u dHJvbCBzdHJ1Y3R1cmUgKi8KKworI2lmZGVmIElOSVRfU1BUWQorc3RhdGljIGludCBzcHR5ID0g LTE7CisjZW5kaWYgLyogSU5JVF9TUFRZICovCisKKyNlbmRpZiAvKiBVU0VfVEVSTUlPICovCisK KyNpZmRlZiBRTlgJCQkJLyogMjk5ICovCisjaWZuZGVmIElYQU5ZCisjZGVmaW5lIElYQU5ZIDAK KyNlbmRpZgkvKiBJWEFOWSAqLworI2VuZGlmCS8qIFFOWCAqLworCitzdGF0aWMgaW50IG1zZyA9 IDA7CisKKy8qIFZhcmlhYmxlcyBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcyAqLworCitpbnQg cHR5X2ZvcmtfYWN0aXZlID0gMDsJCS8qIHB0eSBmb3JrIGlzIGFjdGl2ZSAqLworUElEX1QgcHR5 X2ZvcmtfcGlkID0gLTE7CQkvKiBwdHkgZm9yayBwaWQgKi8KK2ludCBwdHlfc2xhdmVfZmQgPSAt MTsJCQkvKiBwdHkgc2xhdmUgZmlsZSBkZXNjcmlwdG9yICovCitpbnQgcHR5X21hc3Rlcl9mZCA9 IC0xOwkJCS8qIHB0eSBtYXN0ZXIgZmlsZSBkZXNjcmlwdG9yICovCisKKy8qIHRlcm1idWYgcm91 dGluZXMgKGJlZ2luKSAqLworLyoKKyAgaW5pdF90ZXJtYnVmKCkKKyAgY29weV90ZXJtYnVmKGNw KQorICBzZXRfdGVybWJ1ZigpCisKKyAgVGhlc2UgdGhyZWUgcm91dGluZXMgYXJlIHVzZWQgdG8g Z2V0IGFuZCBzZXQgdGhlICJ0ZXJtYnVmIiBzdHJ1Y3R1cmUKKyAgdG8gYW5kIGZyb20gdGhlIGtl cm5lbC4gIGluaXRfdGVybWJ1ZigpIGdldHMgdGhlIGN1cnJlbnQgc2V0dGluZ3MuCisgIGNvcHlf dGVybWJ1ZigpIGhhbmRzIGluIGEgbmV3ICJ0ZXJtYnVmIiB0byB3cml0ZSB0byB0aGUga2VybmVs LCBhbmQKKyAgc2V0X3Rlcm1idWYoKSB3cml0ZXMgdGhlIHN0cnVjdHVyZSBpbnRvIHRoZSBrZXJu ZWwuCisqLworVk9JRAoraW5pdF90ZXJtYnVmKGZkKSBpbnQgZmQ7IHsKKyAgICBpbnQgdHR5ZmQ7 CisgICAgaW50IHJjID0gMDsKKworICAgIHR0eWZkID0gZmQ7CisKKyNpZmRlZiBIQVZFX1NUUkVB TVMKKyAgICBkZWJ1ZyhGMTAwLCJpbml0X3Rlcm1idWYgSEFWRV9TVFJFQU1TIiwiIiwwKTsKKyNl bHNlCisgICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIEhBVkVfU1RSRUFNUyBOT1QgREVGSU5F RCIsIiIsMCk7CisjZW5kaWYJLyogSEFWRV9TVFJFQU1TICovCisjaWZkZWYgU1RSRUFNU1BUWQor ICAgIGRlYnVnKEYxMDAsImluaXRfdGVybWJ1ZiBTVFJFQU1TUFRZIiwiIiwwKTsKKyNlbHNlCisg ICAgZGVidWcoRjEwMCwiaW5pdF90ZXJtYnVmIFNUUkVBTVNQVFkgTk9UIERFRklORUQiLCIiLDAp OworI2VuZGlmCS8qIFNUUkVBTVNQVFkgKi8KKyNpZmRlZiBJTklUX1NQVFkKKyAgICBkZWJ1ZyhG MTAwLCJpbml0X3Rlcm1idWYgSU5JVF9TUFRZIiwiIiwwKTsKKyNlbHNlCisgICAgZGVidWcoRjEw MCwiaW5pdF90ZXJtYnVmIElOSVRfU1BUWSBOT1QgREVGSU5FRCIsIiIsMCk7CisjZW5kaWYJLyog SU5JVF9TUFRZICovCisKKyAgICBkZWJ1ZyhGMTAxLCJpbml0X3Rlcm1idWYgdHR5ZmQiLCIiLHR0 eWZkKTsKKyNpZmRlZiBJTklUX1NQVFkKKyAgICBkZWJ1ZyhGMTAxLCJpbml0X3Rlcm1idWYgc3B0 eSIsIiIsc3B0eSk7CisjZW5kaWYJLyogSU5JVF9TUFRZICovCisKKyAgICBtZW1zZXQoJnRlcm1i dWYsMCxzaXplb2YodGVybWJ1ZikpOworICAgIG1lbXNldCgmdGVybWJ1ZjIsMCxzaXplb2YodGVy bWJ1ZjIpKTsKKyNpZm5kZWYJVVNFX1RFUk1JTworICAgIHJjID0gaW9jdGwodHR5ZmQsIFRJT0NH RVRQLCAoY2hhciAqKSZ0ZXJtYnVmLnNnKTsKKyAgICByYyB8PSBpb2N0bCh0dHlmZCwgVElPQ0dF VEMsIChjaGFyICopJnRlcm1idWYudGMpOworICAgIHJjIHw9IGlvY3RsKHR0eWZkLCBUSU9DR0xU QywgKGNoYXIgKikmdGVybWJ1Zi5sdGMpOworI2lmZGVmIFRJT0NHU1RBVEUKKyAgICByYyB8PSBp b2N0bCh0dHlmZCwgVElPQ0dTVEFURSwgKGNoYXIgKikmdGVybWJ1Zi5zdGF0ZSk7CisjZW5kaWYg LyogVElPQ0dTVEFURSAqLworI2Vsc2UgLyogVVNFX1RFUk1JTyAqLworICAgIGVycm5vID0gMDsK KyNpZmRlZiBJTklUX1NQVFkKKyAgICByYyA9IHRjZ2V0YXR0cihzcHR5LCAmdGVybWJ1Zik7Cisg ICAgZGVidWcoRjExMSwiaW5pdF90ZXJtYnVmKCkgdGNnZXRhdHRyKHNwdHkpIixja2l0b2EocmMp LGVycm5vKTsKKyNlbHNlCisgICAgcmMgPSB0Y2dldGF0dHIodHR5ZmQsICZ0ZXJtYnVmKTsKKyAg ICBkZWJ1ZyhGMTExLCJpbml0X3Rlcm1idWYoKSB0Y2dldGF0dHIodHR5ZmQpIixja2l0b2EocmMp LGVycm5vKTsKKyNlbmRpZiAvKiBJTklUX1NQVFkgKi8KKyNlbmRpZiAvKiBVU0VfVEVSTUlPICov CisgICAgaWYgKCFyYykKKyAgICAgIHRlcm1idWYyID0gdGVybWJ1ZjsKK30KKworI2lmZGVmIFRJ T0NQS1RfSU9DVEwKK1ZPSUQKK2NvcHlfdGVybWJ1ZihjcCwgbGVuKSBjaGFyICpjcDsgaW50IGxl bjsgeworICAgIGlmIChsZW4gPiBzaXplb2YodGVybWJ1ZikpCisgICAgICBsZW4gPSBzaXplb2Yo dGVybWJ1Zik7CisgICAgbWVtY3B5KChjaGFyICopJnRlcm1idWYsIGNwLCBsZW4pOworICAgIHRl cm1idWYyID0gdGVybWJ1ZjsKK30KKyNlbmRpZiAvKiBUSU9DUEtUX0lPQ1RMICovCisKK1ZPSUQK K3NldF90ZXJtYnVmKGZkKSBpbnQgZmQ7IHsJCS8qIE9ubHkgbWFrZSB0aGUgbmVjZXNzYXJ5IGNo YW5nZXMuICovCisgICAgaW50IHg7CisgICAgaW50IHR0eWZkOworICAgIHR0eWZkID0gZmQ7CisK KyAgICBkZWJ1ZyhGMTAxLCJzZXRfdGVybWJ1ZiB0dHlmZCIsIiIsdHR5ZmQpOworI2lmZGVmIElO SVRfU1BUWQorICAgIGRlYnVnKEYxMDEsInNldF90ZXJtYnVmIHNwdHkiLCIiLHNwdHkpOworI2Vu ZGlmCS8qIElOSVRfU1BUWSAqLworCisjaWZuZGVmCVVTRV9URVJNSU8KKyAgICBkZWJ1ZyhGMTAw LCJzZXRfdGVybWJ1ZiBVU0VfVEVSTUlPIiwiIiwwKTsKKyAgICBpZiAobWVtY21wKChjaGFyICop JnRlcm1idWYuc2csIChjaGFyICopJnRlcm1idWYyLnNnLCBzaXplb2YodGVybWJ1Zi5zZykpKQor ICAgICAgaW9jdGwodHR5ZmQsIFRJT0NTRVROLCAoY2hhciAqKSZ0ZXJtYnVmLnNnKTsKKyAgICBp ZiAobWVtY21wKChjaGFyICopJnRlcm1idWYudGMsIChjaGFyICopJnRlcm1idWYyLnRjLCBzaXpl b2YodGVybWJ1Zi50YykpKQorICAgICAgaW9jdGwodHR5ZmQsIFRJT0NTRVRDLCAoY2hhciAqKSZ0 ZXJtYnVmLnRjKTsKKyAgICBpZiAobWVtY21wKChjaGFyICopJnRlcm1idWYubHRjLCAoY2hhciAq KSZ0ZXJtYnVmMi5sdGMsCisJICAgICAgIHNpemVvZih0ZXJtYnVmLmx0YykpKQorICAgICAgaW9j dGwodHR5ZmQsIFRJT0NTTFRDLCAoY2hhciAqKSZ0ZXJtYnVmLmx0Yyk7CisgICAgaWYgKHRlcm1i dWYubGZsYWdzICE9IHRlcm1idWYyLmxmbGFncykKKyAgICAgIGlvY3RsKHR0eWZkLCBUSU9DTFNF VCwgKGNoYXIgKikmdGVybWJ1Zi5sZmxhZ3MpOworI2Vsc2UgIC8qIFVTRV9URVJNSU8gKi8KKyAg ICB4ID0gbWVtY21wKChjaGFyICopJnRlcm1idWYsIChjaGFyICopJnRlcm1idWYyLCBzaXplb2Yo dGVybWJ1ZikpOworICAgIGRlYnVnKEYxMDEsInNldF90ZXJtYnVmICFVU0VfVEVSTUlPIG1lbWNt cCIsIiIseCk7CisgICAgeCA9IDE7CQkJCS8qIEZvcmNlIHRoaXMgKi8KKyAgICBpZiAoeCkgewor CWludCB4OworCWVycm5vID0gMDsKKyNpZmRlZiBJTklUX1NQVFkKKwlkZWJ1ZyhGMTAwLCJzZXRf dGVybWJ1ZiBJTklUX1NQVFkiLCIiLDApOworCXggPSB0Y3NldGF0dHIoc3B0eSwgVENTQU5PVywg JnRlcm1idWYpOworCWRlYnVnKEYxMTEsInNldF90ZXJtYnVmIHRjc2V0YXR0cihzcHR5KSIsY2tp dG9hKHgpLGVycm5vKTsKKyNlbHNlCisJZGVidWcoRjEwMCwic2V0X3Rlcm1idWYgIUlOSVRfU1BU WSIsIiIsMCk7CisJeCA9IHRjc2V0YXR0cih0dHlmZCwgVENTQU5PVywgJnRlcm1idWYpOworCWRl YnVnKEYxMTEsInNldF90ZXJtYnVmIHRjc2V0YXR0cih0dHlmZCkiLGNraXRvYSh4KSxlcnJubyk7 CisjZW5kaWYgLyogSU5JVF9TUFRZICovCisgICAgfQorI2VuZGlmIC8qIFVTRV9URVJNSU8gKi8K K30KKy8qIHRlcm1idWYgcm91dGluZXMgKGVuZCkgKi8KKworVk9JRAorcHR5aW50X3ZoYW5ndXAo KSB7CisjaWZkZWYgQ0tfVkhBTkdVUAorI2lmZGVmIENLX1BPU0lYX1NJRworICAgIHN0cnVjdCBz aWdhY3Rpb24gc2E7CisgICAgLyogSW5pdGlhbGl6ZSAic2EiIHN0cnVjdHVyZS4gKi8KKyAgICBz aWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisgICAgc2Euc2FfZmxhZ3MgPSAwOworICAgIHNhLnNh X2hhbmRsZXIgPSBTSUdfSUdOOworICAgIHNpZ2FjdGlvbihTSUdIVVAsICZzYSwgKHN0cnVjdCBz aWdhY3Rpb24gKikwKTsKKyAgICB2aGFuZ3VwKCk7CisgICAgc2Euc2FfaGFuZGxlciA9IFNJR19E Rkw7CisgICAgc2lnYWN0aW9uKFNJR0hVUCwgJnNhLCAoc3RydWN0IHNpZ2FjdGlvbiAqKTApOwor I2Vsc2UgLyogQ0tfUE9TSVhfU0lHICovCisgICAgc2lnbmFsKFNJR0hVUCxTSUdfSUdOKTsKKyAg ICB2aGFuZ3VwKCk7CisgICAgc2lnbmFsKFNJR0hVUCxTSUdfREZMKTsKKyNlbmRpZiAvKiBDS19Q T1NJWF9TSUcgKi8KKyNlbmRpZiAvKiBDS19WSEFOR1VQICovCit9CisKKy8qCisgIFRoaXMgcm91 dGluZSBpcyBjYWxsZWQgdHdpY2UuICBJdCdzIG5vdCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHRo YXQgdGhlCisgIHNldHNpZCgpIG9yIFRJT0NTQ1RUWSBpb2N0bHMgc3VjY2VlZCAodGhleSBtYXkg bm90IHRoZSBzZWNvbmQgdGltZSksIGJ1dAorICByYXRoZXIgdGhhdCB3ZSBoYXZlIGEgY29udHJv bGxpbmcgdGVybWluYWwgYXQgdGhlIGVuZC4gIEl0IGlzIGFzc3VtZWQgdGhhdAorICB2aGFuZ3Vw IGRvZXNuJ3QgZXhpc3QgYW5kIGNvbmZ1c2UgdGhlIHByb2Nlc3MncyBub3Rpb24gb2YgY29udHJv bGxpbmcKKyAgdGVybWluYWwgb24gYW55IHN5c3RlbSB3aXRob3V0IFRJT0NOT1RUWS4gIFRoYXQg aXMsIGVpdGhlciB2aGFuZ3VwKCkgbGVhdmVzCisgIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBp biB0YWN0LCBicmVha3MgdGhlIGFzc29jaWF0aW9uIGNvbXBsZXRlbHksIG9yIHRoZQorICBzeXN0 ZW0gcHJvdmlkZXMgVElPQ05PVFRZIHRvIGdldCB0aGluZ3MgYmFjayBpbnRvIGEgcmVhc29uYWJs ZSBzdGF0ZS4gIEluCisgIHByYWN0aWNlLCB2aGFuZ3VwKCkgZWl0aGVyIGJyZWFrcyB0aGUgYXNz b2NpYXRpb24gY29tcGxldGVseSBvciBkb2Vzbid0CisgIGVmZmVjdCBjb250cm9sbGluZyB0ZXJt aW5hbHMsIHNvIHRoaXMgY29uZGl0aW9uIGlzIG1ldC4KKyovCitsb25nCitwdHlpbnRfdm9pZF9h c3NvY2lhdGlvbigpIHsKKyAgICBpbnQgY29uX2ZkOworI2lmZGVmIEhBVkVfU0VUU0lECisgICAg ZGVidWcoRjExMCwKKwkgICJwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpIiwKKwkgICJzZXRzaWQo KSIsCisJICAwCisJICApOworICAgIHNldHNpZCgpOworI2VuZGlmIC8qIEhBVkVfU0VUU0lEICov CisKKyNpZm5kZWYgTk9fREVWVFRZCisgICAgLyogVm9pZCB0dHkgYXNzb2NpYXRpb24gZmlyc3Qg Ki8KKyNpZmRlZiBUSU9DTk9UVFkKKyAgICBjb25fZmQgPSBvcGVuKCIvZGV2L3R0eSIsIE9fUkRX Uik7CisgICAgZGVidWcoRjExMSwKKwkgICJwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpIG9wZW4o L2Rldi90dHksT19SRFdSKSIsCisJICAiL2Rldi90dHkiLAorCSAgY29uX2ZkKTsKKyAgICBpZiAo Y29uX2ZkID49IDApIHsKKyAgICAgICAgaW9jdGwoY29uX2ZkLCBUSU9DTk9UVFksIDApOworICAg ICAgICBjbG9zZShjb25fZmQpOworICAgIH0KKyNpZmRlZiBERUJVRworICAgIGVsc2UgZGVidWco RjEwMSwgInB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkgb3BlbigpIGVycm5vIiwiIixlcnJubyk7 CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBUSU9DTk9UVFkgKi8KKyNlbmRpZiAvKiBO T19ERVZUVFkgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qIFBJRCBtYXkgYmUgemVybyBmb3Ig dW5rbm93bi4qLworCitsb25nCitwdHlfY2xlYW51cChzbGF2ZSwgcGlkLCB1cGRhdGVfdXRtcCkg Y2hhciAqc2xhdmU7IGludCBwaWQ7IGludCB1cGRhdGVfdXRtcDsgeworI2lmZGVmIFZIQU5HX0xB U1QKKyAgICBpbnQgcmV0dmFsLCBmZDsKKyNlbmRpZiAvKiBWSEFOR19MQVNUICovCisKKyAgICBk ZWJ1ZyhGMTExLCJwdHlfY2xlYW51cCgpIixzbGF2ZSxwaWQpOworI2lmZGVmIFdBTlRfVVRNUAor ICAgIGlmICh1cGRhdGVfdXRtcCkKKyAgICAgIHB0eV91cGRhdGVfdXRtcChQVFlfREVBRF9QUk9D RVNTLAorCQkgICAgICAwLAorCQkgICAgICAiIiwKKwkJICAgICAgc2xhdmUsCisJCSAgICAgIChj aGFyICopMCwKKwkJICAgICAgUFRZX1VUTVBfVVNFUk5BTUVfVkFMSUQKKwkJICAgICAgKTsKKyNl bmRpZiAvKiBXQU5UX1VUTVAgKi8KKworI2lmZGVmIFNFVFVJRAorICAgIGNobW9kKHNsYXZlLCAw NjY2KTsKKyAgICBjaG93bihzbGF2ZSwgMCwgMCk7CisjZW5kaWYgLyogU0VUVUlEICovCisKKyNp ZmRlZiBIQVZFX1JFVk9LRQorICAgIHJldm9rZShzbGF2ZSk7CisgICAgLyoKKyAgICAgICBSZXZv a2UgaXNuJ3QgZ3VhcmFudGVlZCB0byBzZW5kIGEgU0lHSFVQIHRvIHRoZSBwcm9jZXNzZXMgaXQK KyAgICAgICBkaXNzb2NpYXRlcyBmcm9tIHRoZSB0ZXJtaW5hbC4gIFRoZSBiZXN0IHNvbHV0aW9u IHdpdGhvdXQgYSBQb3NpeAorICAgICAgIG1lY2hhbmlzbSBmb3IgZm9yY2luZyBhIGhhbmd1cCBp cyB0byBraWxscGcoKSB0aGUgcHJvY2VzcyBncm91cCBvZiB0aGUKKyAgICAgICBwdHkuICBUaGlz IHdpbGwgYXQgbGVhc3Qga2lsbCB0aGUgc2hlbGwgYW5kIGhvcGVmdWxseSwgdGhlIGNoaWxkCisg ICAgICAgcHJvY2Vzc2VzLiAgVGhpcyBpcyBub3QgYWx3YXlzIHRoZSBjYXNlLCBob3dldmVyLiAg SWYgdGhlIHNoZWxsIHB1dHMKKyAgICAgICBlYWNoIGpvYiBpbiBhIHByb2Nlc3MgZ3JvdXAgYW5k IGRvZXNuJ3QgcGFzcyBhbG9uZyBTSUdIVVAsIGFsbAorICAgICAgIHByb2Nlc3NlcyBtYXkgbm90 IGRpZS4KKyAgICAqLworICAgIGlmIChwaWQgPiAwKSB7CisjaWZkZWYgSEFWRV9LSUxMUEcKKwlr aWxscGcocGlkLCBTSUdIVVApOworI2Vsc2UKKwlraWxsKC0ocGlkKSwgU0lHSFVQKTsKKyNlbmRp ZiAvKkhBVkVfS0lMTFBHKi8KKyAgICB9CisjZWxzZSAvKiBIQVZFX1JFVk9LRSovCisjaWZkZWYg VkhBTkdfTEFTVAorICAgIHsKKyAgICAgICAgaW50IHN0YXR1czsKKyNpZmRlZiBDS19QT1NJWF9T SUcKKyAgICAgICAgc2lnc2V0X3Qgb2xkLCBuZXc7CisgICAgICAgIHNpZ2VtcHR5c2V0KCZuZXcp OworICAgICAgICBzaWdhZGRzZXQoJm5ldywgU0lHQ0hMRCk7CisgICAgICAgIHNpZ3Byb2NtYXNr KFNJR19CTE9DSywgJm5ldywgJm9sZCk7CisjZWxzZSAvKkNLX1BPU0lYX1NJRyovCisgICAgICAg IGludCBtYXNrID0gc2lnYmxvY2soc2lnbWFzayhTSUdDSExEKSk7CisjZW5kaWYgLypDS19QT1NJ WF9TSUcqLworICAgICAgICBzd2l0Y2ggKHJldHZhbCA9IGZvcmsoKSkgeworCSAgY2FzZSAtMToK KyNpZmRlZiBDS19QT1NJWF9TSUcKKyAgICAgICAgICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNL LCAmb2xkLCAwKTsKKyNlbHNlIC8qQ0tfUE9TSVhfU0lHKi8KKyAgICAgICAgICAgIHNpZ3NldG1h c2sobWFzayk7CisjZW5kaWYgLypDS19QT1NJWF9TSUcqLworICAgICAgICAgICAgcmV0dXJuIGVy cm5vOworCSAgY2FzZSAwOgorICAgICAgICAgICAgcHR5aW50X3ZvaWRfYXNzb2NpYXRpb24oKTsK KyAgICAgICAgICAgIGlmIChyZXR2YWwgPSAocHR5X29wZW5fY3R0eShzbGF2ZSwgJmZkLCAtMSkp KQorCSAgICAgIGV4aXQocmV0dmFsKTsKKyAgICAgICAgICAgIHB0eWludF92aGFuZ3VwKCk7Cisg ICAgICAgICAgICBleGl0KDApOworCSAgICBicmVhazsKKwkgIGRlZmF1bHQ6CisjaWZkZWYgSEFW RV9XQUlUUElECisgICAgICAgICAgICB3YWl0cGlkKHJldHZhbCwgJnN0YXR1cywgMCk7CisjZWxz ZSAvKkhBVkVfV0FJVFBJRCovCisgICAgICAgICAgICB3YWl0KCZzdGF0dXMpOworI2VuZGlmIC8q IEhBVkVfV0FJVFBJRCAqLworI2lmZGVmIENLX1BPU0lYX1NJRworICAgICAgICAgICAgc2lncHJv Y21hc2soU0lHX1NFVE1BU0ssICZvbGQsIDApOworI2Vsc2UgLypDS19QT1NJWF9TSUcqLworICAg ICAgICAgICAgc2lnc2V0bWFzayhtYXNrKTsKKyNlbmRpZiAvKkNLX1BPU0lYX1NJRyovCisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKlZIQU5HX0xBU1QqLwor I2VuZGlmIC8qIEhBVkVfUkVWT0tFKi8KKyNpZm5kZWYgSEFWRV9TVFJFQU1TCisgICAgc2xhdmVb c3RybGVuKCIvZGV2LyIpXSA9ICdwJzsKKyNpZmRlZiBTRVRVSUQKKyAgICBjaG1vZChzbGF2ZSwg MDY2Nik7CisgICAgY2hvd24oc2xhdmUsIDAsIDApOworI2VuZGlmIC8qIFNFVFVJRCAqLworI2Vu ZGlmIC8qIEhBVkVfU1RSRUFNUyAqLworICAgIHJldHVybigwKTsKK30KKworbG9uZworcHR5X2dl dHB0eShmZCwgc2xhdmUsIHNsYXZlbGVuZ3RoKSBpbnQgc2xhdmVsZW5ndGg7IGludCAqZmQ7IGNo YXIgKnNsYXZlOyB7CisgICAgY2hhciAqY3A7CisgICAgY2hhciAqcDsKKyAgICBpbnQgaSwgcHR5 bnVtOworICAgIHN0cnVjdCBzdGF0IHN0YjsKKyNpZm5kZWYgSEFWRV9PUEVOUFRZCisjaWZuZGVm IEhBVkVfX0dFVFBUWQorICAgIGNoYXIgc2xhdmVidWZbMTAyNF07CisjZW5kaWYgLyogSEFWRV9f R0VUUFRZICovCisjZW5kaWYgLyogSEFWRV9PUEVOUFRZICovCisjaWZkZWYgSEFWRV9fR0VUUFRZ CisgICAgY2hhciAqc2xhdmVyZXQ7CQkJLyogVGVtcCB0byBob2xkIHBvaW50ZXIgdG8gc2xhdmUg Ki8KKyNlbmRpZiAvKkhBVkVfX0dFVFBUWSovCisKKyNpZmRlZiBIQVZFX09QRU5QVFkKKyAgICBp bnQgc2xhdmVmZDsKKworICAgIHB0eV9tYXN0ZXJfZmQgPSAtMTsKKyAgICBkZWJ1ZyhGMTAwLCJI QVZFX09QRU5QVFkiLCIiLDApOworICAgIGlmIChvcGVucHR5KGZkLAorCQkmc2xhdmVmZCwKKwkJ c2xhdmUsCisJCShzdHJ1Y3QgdGVybWlvcyAqKTAsCisJCShzdHJ1Y3Qgd2luc2l6ZSAqKTAKKwkJ KQorCSkgeworCXB0eV9tYXN0ZXJfZmQgPSAqZmQ7CisJcmV0dXJuKDEpOworICAgIH0KKyAgICBj bG9zZShzbGF2ZWZkKTsKKyAgICByZXR1cm4oMCk7CisKKyNlbHNlIC8qIEhBVkVfT1BFTlBUWSAq LworCisjaWZkZWYgSEFWRV9fR0VUUFRZCisvKgorICBUaGlzIGNvZGUgaXMgaW5jbHVkZWQgZm9y IElyaXg7IGFzIG9mIHZlcnNpb24gNS4zLCBJcml4IGhhcyAvZGV2L3B0bXgsIGJ1dAorICBpdCBm YWlscyB0byB3b3JrIHByb3Blcmx5OyBldmVuIGFmdGVyIGNhbGxpbmcgdW5sb2NrcHQsIHJvb3Qg Z2V0cyBwZXJtaXNzaW9uCisgIGRlbmllZCBvcGVuaW5nIHRoZSBwdHkuICBUaGUgY29kZSB0byBz dXBwb3J0IF9nZXRwdHkgc2hvdWxkIGJlIHJlbW92ZWQgaWYKKyAgSXJpeCBnZXRzIHdvcmtpbmcg c3RyZWFtcyBwdHlzIGluIGZhdm9yIG9mIG1haW50YWluaW5nIHRoZSBsZWFzdCBuZWVkZWQgY29k ZQorICBwYXRocy4KKyovCisgICAgZGVidWcoRjEwMCwiSEFWRV9fR0VUUFRZIiwiIiwwKTsKKyAg ICBpZiAoKHNsYXZlcmV0ID0gX2dldHB0eShmZCwgT19SRFdSIHwgT19OREVMQVksIDA2MDAsIDAp KSA9PSAwKSB7CisJKmZkID0gLTE7CisJcmV0dXJuKFBUWV9HRVRQVFlfTk9QVFkpOworICAgIH0K KyAgICBpZiAoc3RybGVuKHNsYXZlcmV0KSA+IHNsYXZlbGVuZ3RoIC0gMSkgeworCWNsb3NlKCpm ZCk7CisJKmZkID0gLTE7CisJcmV0dXJuKFBUWV9HRVRQVFlfU0xBVkVfVE9PTE9ORyk7CisgICAg fSBlbHNlIHsKKwlja3N0cm5jcHkoc2xhdmUsIHNsYXZlcmV0LCBzbGF2ZWxlbmd0aCk7CisgICAg fQorICAgIHJldHVybigwKTsKKworI2Vsc2UgLyogSEFWRV9fR0VUUFRZICovCisKKyAgICAqZmQg PSBvcGVuKCIvZGV2L3B0eW0vY2xvbmUiLCBPX1JEV1J8T19OREVMQVkpOyAvKiBIUFVYICovCisg ICAgaWYgKCpmZCA+PSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV9nZXRwdHkoKSIsIm9w ZW4oL2Rldi9wdHltL2Nsb25lKSBzdWNjZXNzIiwwKTsKKyAgICAgICAgZ290byBoYXZlX2ZkOwor ICAgIH0KKworI2lmZGVmIEhBVkVfUFRNWAorICAgIGRlYnVnKEYxMDAsIkhBVkVfUFRNWCIsIiIs MCk7CisgICAgKmZkID0gb3BlbigiL2Rldi9wdG14IixPX1JEV1J8T19OREVMQVkpOworICAgIGlm ICgqZmQgPj0gMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9k ZXYvcHRteCkgc3VjY2VzcyIsMCk7CisgICAgICAgIGdvdG8gaGF2ZV9mZDsKKyAgICB9CisjZW5k aWYgLyogSEFWRV9QVE1YICovCisKKyAgICAqZmQgPSBvcGVuKCIvZGV2L3B0YyIsIE9fUkRXUnxP X05ERUxBWSk7IC8qIEFJWCAqLworICAgIGlmICgqZmQgPj0gMCkgeworICAgICAgICBkZWJ1ZyhG MTEwLCJwdHlfZ2V0cHR5KCkiLCJvcGVuKC9kZXYvcHRjKSBzdWNjZXNzIiwwKTsKKyAgICAgICAg Z290byBoYXZlX2ZkOworICAgIH0KKyAgICAqZmQgPSBvcGVuKCIvZGV2L3B0eSIsIE9fUkRXUnxP X05ERUxBWSk7IC8qIHN5c3ZpbXAgKi8KKyAgICBpZiAoKmZkID49IDApCisgICAgICAgIGRlYnVn KEYxMTAsInB0eV9nZXRwdHkoKSIsIm9wZW4oL2Rldi9wdHkpIHN1Y2Nlc3MiLDApOworCisgIGhh dmVfZmQ6CisgICAgLyogVGhpcyB3b3VsZCBiZSB0aGUgcHR5IG1hc3RlciAqLworICAgIGRlYnVn KEYxMDEsInB0eV9nZXRwdHkgZmQoQSkiLCIiLCpmZCk7CisgICAgaWYgKCpmZCA+PSAwKSB7CisJ cHR5X21hc3Rlcl9mZCA9ICpmZDsKKworI2lmZGVmIEhBVkVfR1JBTlRQVAorI2lmZGVmIEhBVkVf UFRNWAorICAgICAgICBkZWJ1ZyhGMTAwLCJIQVZFX0dSQU5UUFQiLCIiLDApOworCWlmIChncmFu dHB0KCpmZCkgfHwgdW5sb2NrcHQoKmZkKSkKKwkgIHJldHVybihQVFlfR0VUUFRZX1NUUkVBTVMp OworI2VuZGlmIC8qIEhBVkVfUFRNWCAqLworI2VuZGlmIC8qIEhBVkVfR1JBTlRQVCAqLworCisj aWZkZWYgSEFWRV9QVFNOQU1FCisgICAgICAgIGRlYnVnKEYxMDAsIkhBVkVfUFRTTkFNRSIsIiIs MCk7CisJcCA9IChjaGFyICopcHRzbmFtZSgqZmQpOworICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlf Z2V0cHR5KCkgcHRzbmFtZSgpIixwLDApOworI2Vsc2UKKyNpZmRlZiBIQVZFX1RUWU5BTUUKKyAg ICAgICAgZGVidWcoRjEwMCwiSEFWRV9UVFlOQU1FIiwiIiwwKTsKKwlwID0gdHR5bmFtZSgqZmQp OworICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5KCkgdHR5bmFtZSgpIixwLDApOworI2Vs c2UKKwkvKiBJZiB3ZSBkb24ndCBoYXZlIGVpdGhlciB3aGF0IGRvIHdlIGRvPyAqLworICAJcmV0 dXJuKFBUWV9HRVRQVFlfTk9QVFkpOwkvKiBwdW50ICovCisjZW5kaWYgLyogSEFWRV9UVFlOQU1F ICovCisjZW5kaWYgLyogSEFWRV9QVFNOQU1FICovCisJaWYgKHApIHsKKwkgICAgaWYgKHN0cmxl bihwKSA+IHNsYXZlbGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIGNsb3NlICgqZmQpOwor ICAgICAgICAgICAgICAgICpmZCA9IC0xOworICAgICAgICAgICAgICAgIHJldHVybihQVFlfR0VU UFRZX1NMQVZFX1RPT0xPTkcpOworCSAgICB9CisJICAgIGNrc3RybmNweShzbGF2ZSwgcCwgc2xh dmVsZW5ndGgpOworCSAgICByZXR1cm4oMCk7CisJfQorCWlmIChmc3RhdCgqZmQsICZzdGIpIDwg MCkgeworCSAgICBjbG9zZSgqZmQpOworCSAgICByZXR1cm4oUFRZX0dFVFBUWV9GU1RBVCk7CisJ fQorCXB0eW51bSA9IChpbnQpKHN0Yi5zdF9yZGV2JjB4RkYpOworCXNwcmludGYoc2xhdmVidWYs ICIvZGV2L3R0eXAleCIsIHB0eW51bSk7IC8qIHNhZmUgKi8KKwlpZiAoc3RybGVuKHNsYXZlYnVm KSA+IHNsYXZlbGVuZ3RoIC0gMSkgeworCSAgICBjbG9zZSgqZmQpOworCSAgICAqZmQgPSAtMTsK KwkgICAgcmV0dXJuKFBUWV9HRVRQVFlfU0xBVkVfVE9PTE9ORyk7CisJfQorICAgICAgICBkZWJ1 ZyhGMTEwLCJwdHlfZ2V0cHR5KCkgc2xhdmVidWYiLHNsYXZlYnVmLDApOworCWNrc3RybmNweShz bGF2ZSwgc2xhdmVidWYsIHNsYXZlbGVuZ3RoKTsKKwlyZXR1cm4oMCk7CisgICAgfSBlbHNlIHsK KyAgICAJZm9yIChjcCA9ICJwcXJzdHV2d3h5elBRUlNUIjsqY3A7IGNwKyspIHsKKwkgICAgc3By aW50ZihzbGF2ZWJ1ZiwiL2Rldi9wdHlYWCIpOyAvKiBzYWZlICovCisJICAgIHNsYXZlYnVmW3Np emVvZigiL2Rldi9wdHkiKSAtIDFdID0gKmNwOworCSAgICBzbGF2ZWJ1ZltzaXplb2YoIi9kZXYv cHR5cCIpIC0gMV0gPSAnMCc7CisJICAgIGlmIChzdGF0KHNsYXZlYnVmLCAmc3RiKSA8IDApCisJ ICAgICAgYnJlYWs7CisJICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXNsYXZlYnVm W3NpemVvZigiL2Rldi9wdHlwIikgLSAxXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIltpXTsKKwkJZXJy bm8gPSAwOworCQkqZmQgPSBvcGVuKHNsYXZlYnVmLCBPX1JEV1J8T19OREVMQVkpOworCQlpZiAo KmZkIDwgMCkgeworCQkgICAgZGVidWcoRjExMSwicHR5X2dldHB0eSgpIHB0eSBtYXN0ZXIgb3Bl biBlcnJvciIsCisJCQkgIHNsYXZlYnVmLGVycm5vKTsKKwkJICAgIGNvbnRpbnVlOworCQl9Cisg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwicHR5X2dldHB0eSgpIGZvdW5kIHB0eSBtYXN0ZXIi LHNsYXZlYnVmLCpmZCk7CisJCXNsYXZlYnVmW3NpemVvZigiL2Rldi8iKSAtIDFdID0gJ3QnOyAv KiBnb3QgcHR5ICovCisJCWlmIChzdHJsZW4oc2xhdmVidWYpID4gc2xhdmVsZW5ndGggLTEpIHsK KwkJICAgIGNsb3NlKCpmZCk7CisJCSAgICAqZmQgPSAtMTsKKwkJICAgIHJldHVybihQVFlfR0VU UFRZX1NMQVZFX1RPT0xPTkcpOworCQl9CisJCWNrc3RybmNweShzbGF2ZSwgc2xhdmVidWYsIHNs YXZlbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJwdHlfZ2V0cHR5IHNsYXZl IG5hbWUiLHNsYXZlLDApOworCQlwdHlfbWFzdGVyX2ZkID0gKmZkOworCQlyZXR1cm4oMCk7CisJ ICAgIH0KKwl9CisJcmV0dXJuKFBUWV9HRVRQVFlfTk9QVFkpOworICAgIH0KKyNlbmRpZiAvKkhB VkVfX0dFVFBUWSovCisjZW5kaWYgLyogSEFWRV9PUEVOUFRZICovCit9CisKK2xvbmcKK3B0eV9p bml0KCkgeworI2lmZGVmIEhBVkVfUFRZTQorICAgIHN0YXRpYyBjaGFyIGR1bW15OworICAgIGRl YnVnKEYxMDAsIkhBVkVfUFRZTSIsIiIsMCk7CisgICAgdHR5X2JhbmsgPSAgJm1hc3Rlcl9uYW1l W3N0cmxlbigiL2Rldi9wdHltL3B0eSIpXTsKKyAgICB0dHlfbnVtICA9ICAmbWFzdGVyX25hbWVb c3RybGVuKCIvZGV2L3B0eW0vcHR5WCIpXTsKKyAgICBzbGF2ZV9iYW5rID0gJnNsYXZlX25hbWVb c3RybGVuKCIvZGV2L3B0eS90dHkiKV07CisgICAgc2xhdmVfbnVtICA9ICZzbGF2ZV9uYW1lW3N0 cmxlbigiL2Rldi9wdHkvdHR5WCIpXTsKKyNlbmRpZgorICAgIHJldHVybigwTCk7Cit9CisKKy8q CisgIFRoZSBmb2xsb3dpbmcgaXMgYW4gYXJyYXkgb2YgbW9kdWxlcyB0aGF0IHNob3VsZCBiZSBw dXNoZWQgb24gdGhlIHN0cmVhbS4KKyAgU2VlIGNvbmZpZ3VyZS5pbiBmb3IgY2F2aWF0cyBhbmQg bm90ZXMgYWJvdXQgd2hlbiB0aGlzIGFycmF5IGlzIHVzZWQgYW5kIG5vdAorICB1c2VkLgorKi8K KyNpZmRlZiBIQVZFX1NUUkVBTVMKKyNpZm5kZWYgSEFWRV9MSU5FX1BVU0gKK3N0YXRpYyBjaGFy ICpwdXNoX2xpc3RbXSA9IHsKKyNpZmRlZiBQVVNIX1BURU0KKyAgICAicHRlbSIsCisjZW5kaWYK KyNpZmRlZiBQVVNIX0xEVEVSTQorICAgICJsZHRlcm0iLAorI2VuZGlmCisjaWZkZWYgUFVTSF9U VENPTVBBVAorICAgICJ0dGNvbXBhdCIsCisjZW5kaWYKKyAgICAwCit9OworI2VuZGlmIC8qIEhB VkVfTElORV9QVVNIICovCisjZW5kaWYgLyogSEFWRV9TVFJFQU1TICovCisKK2xvbmcKK3B0eV9p bml0aWFsaXplX3NsYXZlIChmZCkgaW50IGZkOyB7CisjaWZkZWYgUE9TSVhfVEVSTUlPUworI2lm bmRlZiB1bHRyaXgKKyAgICBzdHJ1Y3QgdGVybWlvcyBuZXdfdGVybWlvOworI2Vsc2UKKyAgICBz dHJ1Y3Qgc2d0dHliIGI7CisjZW5kaWYgLyogdWx0cml4ICovCisjZWxzZQorICAgIHN0cnVjdCBz Z3R0eWIgYjsKKyNlbmRpZiAvKiBQT1NJWF9URVJNSU9TICovCisgICAgaW50IHBpZDsKKyNpZmRl ZiBQT1NJWF9URVJNSU9TCisjaWZuZGVmIHVsdHJpeAorICAgIGludCByYzsKKyNlbmRpZiAvKiB1 bHRyaXggKi8KKyNlbmRpZiAvKiBQT1NJWF9URVJNSU9TICovCisKKyAgICBkZWJ1ZyhGMTExLCJw dHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIiwiZmQiLGZkKTsKKworI2lmZGVmIEhBVkVfU1RSRUFNUwor I2lmZGVmIEhBVkVfTElORV9QVVNICisgICAgd2hpbGUgKGlvY3RsKGZkLElfUE9QLDApID09IDAp IDsJLyogQ2xlYXIgb3V0IGFueSBvbGQgbGluZWQncyAqLworCisgICAgaWYgKGxpbmVfcHVzaChm ZCkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV9pbml0aWFsaXplX3NsYXZlKCkiLCJs aW5lX3B1c2goKSBmYWlsZWQiLDApOworCWNsb3NlKGZkKTsKKyAgICAgICAgZmQgPSAtMTsKKyAg ICAgICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX0xJTkVfUFVTSEZBSUwpOworICAgIH0KKyNlbHNl IC8qTm8gbGluZV9wdXNoICovCisgICAgeworICAgICAgICBjaGFyICoqbW9kdWxlID0gJnB1c2hf bGlzdFswXTsKKyAgICAgICAgd2hpbGUgKCptb2R1bGUpIHsKKwkgICAgaWYgKGlvY3RsKGZkLCBJ X1BVU0gsICoobW9kdWxlKyspKSA8IDApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJw dHlfaW5pdGlhbGl6ZV9zbGF2ZSgpIiwiaW9jdGwoSV9QVVNIKSBmYWlsZWQiLDApOworCQlyZXR1 cm4oUFRZX09QRU5fU0xBVkVfUFVTSF9GQUlMKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYg LypMSU5FX1BVU0gqLworI2VuZGlmIC8qSEFWRV9TVFJFQU1TKi8KKy8qCisgIFVuZGVyIFVsdHJp eCAzLjAsIHRoZSBwZ3JwIG9mIHRoZSBzbGF2ZSBwdHkgdGVybWluYWwgbmVlZHMgdG8gYmUgc2V0 CisgIGV4cGxpY2l0bHkuICBXaHkgcmxvZ2luZCB3b3JrcyBhdCBhbGwgd2l0aG91dCB0aGlzIG9u IDQuM0JTRCBpcyBhIG15c3RlcnkuCisqLworI2lmZGVmIEdFVFBHUlBfT05FQVJHCisgICAgcGlk ID0gZ2V0cGdycChnZXRwaWQoKSk7CisjZWxzZQorICAgIHBpZCA9IGdldHBncnAoKTsKKyNlbmRp ZiAvKiBHRVRQR1JQX09ORUFSRyAqLworCisgICAgZGVidWcoRjExMSwicHR5X2luaXRpYWxpemVf c2xhdmUoKSIsInBpZCIscGlkKTsKKworI2lmZGVmIFRJT0NTUEdSUAorICAgIGlvY3RsKGZkLCBU SU9DU1BHUlAsICZwaWQpOworI2VuZGlmIC8qIFRJT0NTUEdSUCAqLworCisjaWZkZWYgUE9TSVhf VEVSTUlPUworI2lmbmRlZiB1bHRyaXgKKyAgICB0Y3NldHBncnAoZmQsIHBpZCk7CisgICAgZXJy bm8gPSAwOworICAgIHJjID0gdGNnZXRhdHRyKGZkLCZuZXdfdGVybWlvKTsKKyAgICBkZWJ1ZyhG MTExLCJwdHlfaW5pdGlhbGl6ZV9zbGF2ZSB0Y2dldGF0dHIoZmQpIixja2l0b2EocmMpLGVycm5v KTsKKyAgICBpZiAocmMgPT0gMCkgeworCW5ld190ZXJtaW8uY19jY1tWTUlOXSA9IDE7CisJbmV3 X3Rlcm1pby5jX2NjW1ZUSU1FXSA9IDA7CisJcmMgPSB0Y3NldGF0dHIoZmQsVENTQU5PVywmbmV3 X3Rlcm1pbyk7CisJZGVidWcoRjExMSwicHR5X2luaXRpYWxpemVfc2xhdmUgdGNzZXRhdHRyKGZk KSIsY2tpdG9hKHJjKSxlcnJubyk7CisgICAgfQorI2VuZGlmIC8qIHVsdHJpeCAqLworI2VuZGlm IC8qIFBPU0lYX1RFUk1JT1MgKi8KKyAgICByZXR1cm4oMEwpOworfQorCisjaWZkZWYgV0FOVF9V VE1QCitsb25nCitwdHlfbG9nd3RtcCAodHR5LCB1c2VyLCBob3N0KSBjaGFyICp1c2VyLCAqdHR5 LCAqaG9zdDsgeworI2lmZGVmIEhBVkVfTE9HV1RNUAorICAgIGxvZ3d0bXAodHR5LHVzZXIsaG9z dCk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAgICBzdHJ1Y3QgdXRtcCB1dDsKKyAgICBjaGFy ICp0bXB4OworICAgIGNoYXIgdXRtcF9pZFs1XTsKKyAgICBpbnQgbG9nZ2luZ2luID0gdXNlclsw XTsJCS8qIFdpbGwgYmUgZW1wdHkgZm9yIGxvZ291dCAqLworCisjaWZuZGVmIE5PX1VUX0hPU1QK KyAgICBzdHJuY3B5KHV0LnV0X2hvc3QsIGhvc3QsIHNpemVvZih1dC51dF9ob3N0KSk7CisjZW5k aWYgLyogTk9fVVRfSE9TVCAqLworCisgICAgc3RybmNweSh1dC51dF9saW5lLCB0dHksIHNpemVv Zih1dC51dF9saW5lKSk7CisgICAgdXQudXRfdGltZSA9IHRpbWUoMCk7CisKKyNpZm5kZWYgTk9f VVRfUElECisgICAgdXQudXRfcGlkID0gZ2V0cGlkKCk7CisgICAgc3RybmNweSh1dC51dF91c2Vy LCB1c2VyLCBzaXplb2YodXQudXRfdXNlcikpOworCisgICAgdG1weCA9IHR0eSArIHN0cmxlbih0 dHkpIC0gMjsKKyAgICBja21ha21zZyh1dG1wX2lkLDUsImtyIix0bXB4LE5VTEwsTlVMTCk7Cisg ICAgc3RybmNweSh1dC51dF9pZCwgdXRtcF9pZCwgc2l6ZW9mKHV0LnV0X2lkKSk7CisgICAgdXQu dXRfcGlkID0gKGxvZ2dpbmdpbiA/IGdldHBpZCgpIDogMCk7CisgICAgdXQudXRfdHlwZSA9IChs b2dnaW5naW4gPyBVU0VSX1BST0NFU1MgOiBERUFEX1BST0NFU1MpOworI2Vsc2UKKyAgICBzdHJu Y3B5KHV0LnV0X25hbWUsIHVzZXIsIHNpemVvZih1dC51dF9uYW1lKSk7CisjZW5kaWYgLyogTk9f VVRfUElEICovCisKKyAgICByZXR1cm4ocHR5aW50X3VwZGF0ZV93dG1wKCZ1dCwgaG9zdCwgdXNl cikpOworCisjZW5kaWYgLyogSEFWRV9MT0dXVE1QICovCit9CisjZW5kaWYgLyogV0FOVF9VVE1Q ICovCisKKy8qCisgIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdHdpY2UuICBJdCdzIG5vdCBwYXJ0 aWN1bGFybHkgaW1wb3J0YW50IHRoYXQgdGhlCisgIHNldHNpZCgpIG9yIFRJT0NTQ1RUWSBpb2N0 bHMgc3VjY2VlZCAodGhleSBtYXkgbm90IHRoZSBzZWNvbmQgdGltZSksIGJ1dAorICByYXRoZXIg dGhhdCB3ZSBoYXZlIGEgY29udHJvbGxpbmcgdGVybWluYWwgYXQgdGhlIGVuZC4gIEl0IGlzIGFz c3VtZWQgdGhhdAorICB2aGFuZ3VwIGRvZXNuJ3QgZXhpc3QgYW5kIGNvbmZ1c2UgdGhlIHByb2Nl c3MncyBub3Rpb24gb2YgY29udHJvbGxpbmcKKyAgdGVybWluYWwgb24gYW55IHN5c3RlbSB3aXRo b3V0IFRJT0NOT1RUWS4gIFRoYXQgaXMsIGVpdGhlciB2aGFuZ3VwKCkgbGVhdmVzCisgIHRoZSBj b250cm9sbGluZyB0ZXJtaW5hbCBpbiB0YWN0LCBicmVha3MgdGhlIGFzc29jaWF0aW9uIGNvbXBs ZXRlbHksIG9yIHRoZQorICBzeXN0ZW0gcHJvdmlkZXMgVElPQ05PVFRZIHRvIGdldCB0aGluZ3Mg YmFjayBpbnRvIGEgcmVhc29uYWJsZSBzdGF0ZS4gIEluCisgIHByYWN0aWNlLCB2aGFuZ3VwKCkg ZWl0aGVyIGJyZWFrcyB0aGUgYXNzb2NpYXRpb24gY29tcGxldGVseSBvciBkb2Vzbid0CisgIGVm ZmVjdCBjb250cm9sbGluZyB0ZXJtaW5hbHMsIHNvIHRoaXMgY29uZGl0aW9uIGlzIG1ldC4KKyov Citsb25nCitwdHlfb3Blbl9jdHR5KHNsYXZlLCBmZCwgZmMpIGNoYXIgKiBzbGF2ZTsgaW50ICpm ZDsgaW50IGZjOyB7CisgICAgaW50IHJldHZhbDsKKworICAgIGRlYnVnKEYxMTAsInB0eV9vcGVu X2N0dHkoKSBzbGF2ZSIsc2xhdmUsMCk7CisKKy8qIEZpcnN0LCBkaXNzb2NpYXRlIGZyb20gcHJl dmlvdXMgdGVybWluYWwgKi8KKworICAgIGlmICgocmV0dmFsID0gcHR5aW50X3ZvaWRfYXNzb2Np YXRpb24oKSkgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTExLAorCSAgICAgICJwdHlfb3Blbl9j dHR5KCkiLAorCSAgICAgICJwdHlpbnRfdm9pZF9hc3NvY2lhdGlvbigpIGZhaWxlZCIsCisJICAg ICAgcmV0dmFsCisJICAgICAgKTsKKwlyZXR1cm4ocmV0dmFsKTsKKyAgICB9CisjaWZkZWYgTVVT VF9TRVRQR1JQCisvKgorICBUaGUgVWx0cml4IChhbmQgb3RoZXIgQlNEIHR0eSBkcml2ZXJzKSBy ZXF1aXJlIHRoZSBwcm9jZXNzIGdyb3VwCisgIHRvIGJlIHplcm8gaW4gb3JkZXIgdG8gYWNxdWly ZSB0aGUgbmV3IHR0eSBhcyBhIGNvbnRyb2xsaW5nIHR0eS4KKyovCisgICAgc2V0cGdycCgwLDAp OworICAgIGRlYnVnKEYxMDEsInB0eV9vcGVuX2N0dHkgTVVTVF9TRVRQR1JQIHNldHBncnAoMCww KSIsIiIsZXJybm8pOworI2VuZGlmIC8qIE1VU1RfU0VUUEdSUCAqLworCisgICAgZXJybm8gPSAw OworICAgICpmZCA9IG9wZW4oc2xhdmUsIE9fUkRXUik7CisgICAgZGVidWcoRjExMSwicHR5X29w ZW5fY3R0eSBvcGVuKHNsYXZlKSBmZCIsc2xhdmUsKmZkKTsKKyAgICBpZiAoKmZkIDwgMCkgewor CWRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkoKSBvcGVuIGZhaWx1cmUiLCBzbGF2ZSwgZXJybm8p OworCXJldHVybihQVFlfT1BFTl9TTEFWRV9PUEVORkFJTCk7CisgICAgfQorI2lmZGVmIFNPTEFS SVMKKyAgICAvKiBUaGlzIGZvcmNlcyB0aGUgam9iIHRvIGhhdmUgYSBjb250cm9sbGluZyB0ZXJt aW5hbC4gKi8KKyAgICBjbG9zZSgqZmQpOworICAgICpmZCA9IG9wZW4oc2xhdmUsIE9fUkRXUik7 CisgICAgZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSBjbG9zZS9vcGVuKHNsYXZlKSBmZCIsc2xh dmUsKmZkKTsKKyNpZmRlZiBERUJVRworICAgIC8qIFRoaXMgc2hvd3MgdGhhdCAvZGV2L3R0eSBl eGlzdHMgKi8KK2lmIChkZWJsb2cpIHsKKwlpbnQgeDsKKwl4ID0gb3BlbigiL2Rldi90dHkiLCBP X1JEV1IpOworCWRlYnVnKEYxMTEsInB0eV9vcGVuX2N0dHkgb3BlbigvZGV2L3R0eSkgZmQiLHNs YXZlLHgpOworCWlmICh4IDwgMCkgZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSBvcGVuKC9kZXYv dHR5KSBlcnJubyIsIiIsZXJybm8pOworCWRlYnVnKEYxMTAsInB0eV9vcGVuX2N0dHkgdHR5bmFt ZSgvZGV2L3R0eSkiLHR0eW5hbWUoeCksMCk7CisJaWYgKHggPiAtMSkgY2xvc2UoeCk7CisgICAg fQorI2VuZGlmCS8qIERFQlVHICovCisjZW5kaWYgLyogU09MQVJJUyAqLworCisjaWZkZWYgTVVT VF9TRVRQR1JQCisgICAgc2V0cGdycCgwLCBnZXRwaWQoKSk7CisjZW5kaWYgLyogTVVTVF9TRVRQ R1JQICovCisKKyNpZmRlZiBUSU9DU0NUVFkKKyAgICBpZiAoCisjaWZkZWYgQ09NTUVOVAorCWZj ID09IDAKKyNlbHNlCisJMQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKwkpIHsKKwkvKiBUSU9DU0NU VFkgPSBNYWtlIHRoaXMgdGhlIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCisJZXJybm8g PSAwOworCXJldHZhbCA9IGlvY3RsKCpmZCwgVElPQ1NDVFRZLCAwKTsgLyogRG9uJ3QgY2hlY2sg cmV0dXJuLiovCisJZGVidWcoRjExMSwicHR5X29wZW5fY3R0eSgpIGlvY3RsIFRJT0NTQ1RUWSIs Y2tpdG9hKHJldHZhbCksZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBUSU9DU0NUVFkgKi8KKyAg ICByZXR1cm4oMEwpOworfQorCitsb25nCitwdHlfb3Blbl9zbGF2ZShzbGF2ZSwgZmQsIGZjKSBj aGFyICpzbGF2ZTsgaW50ICpmZDsgaW50IGZjOyB7CisgICAgaW50IHZmZCwgdGVzdGZkOworICAg IGxvbmcgcmV0dmFsOworI2lmZGVmIENLX1BPU0lYX1NJRworICAgIHN0cnVjdCBzaWdhY3Rpb24g c2E7CisKKyAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CQkvKiBJbml0aWFsaXplICJzYSIg c3RydWN0dXJlLiAqLworICAgIHNhLnNhX2ZsYWdzID0gMDsKKyNlbmRpZiAvKiBDS19QT1NJWF9T SUcgKi8KKworLyoKKyAgRmlyc3QsIGNobW9kIGFuZCBjaG93biB0aGUgc2xhdmUuICBJZiB3ZSBo YXZlIHZoYW5ndXAgdGhlbiB3ZSByZWFsbHkgbmVlZAorICBwdHlfb3Blbl9jdHR5IHRvIG1ha2Ug c3VyZSBvdXIgY29udHJvbGxpbmcgdGVybWluYWwgaXMgdGhlIHB0eSB3ZSdyZQorICBvcGVuaW5n LiAgSG93ZXZlciwgaWYgd2UgYXJlIHVzaW5nIHJldm9rZSBvciBub3RoaW5nIHRoZW4gd2UganVz dCBuZWVkIGEKKyAgZmlsZSBkZXNjcmlpcHRvciBmb3IgdGhlIHB0eS4gIENvbnNpZGVyaW5nIHNv bWUgT1NlcyBpbiB0aGlzIGNhdGVnb3J5IGJyZWFrCisgIG9uIHRoZSBzZWNvbmQgY2FsbCB0byBv cGVuX2N0dHkgKGN1cnJlbnRseSBPU0YgYnV0IG90aGVycyBtYXkpLCB3ZSBzaW1wbHkKKyAgdXNl IGEgZGVzY3JpcHRvciBpZiB3ZSBjYW4uCisqLworI2lmZGVmIFZIQU5HX0ZJUlNUCisgICAgaWYg KChyZXR2YWwgPSBwdHlfb3Blbl9jdHR5KHNsYXZlLCAmdmZkLCBmYykpICE9IDApIHsKKyAgICAg ICAgZGVidWcoRjExMSwKKwkgICAgICAicHR5X29wZW5fc2xhdmUoKSBWSEFOR19GSVJTVCIsCisJ ICAgICAgInB0eV9vcGVuX2N0dHkoKSBmYWlsZWQiLAorCSAgICAgIHJldHZhbAorCSAgICAgICk7 CisgICAgICAgIHJldHVybihyZXR2YWwpOworICAgIH0KKyAgICBpZiAodmZkIDwgMCkgeworICAg ICAgICBkZWJ1ZyhGMTExLAorCSAgICAgICJwdHlfb3Blbl9zbGF2ZSgpIFZIQU5HX0ZJUlNUIiwK KwkgICAgICAiUFRZX09QRU5fU0xBVkVfT1BFTkZBSUwiLAorCSAgICAgIHZmZAorCSAgICAgICk7 CisJcmV0dXJuKFBUWV9PUEVOX1NMQVZFX09QRU5GQUlMKTsKKyAgICB9CisjZW5kaWYgLyogVkhB TkdfRklSU1QgKi8KKworICAgIGlmIChzbGF2ZSA9PSBOVUxMIHx8ICpzbGF2ZSA9PSAnXDAnKSB7 CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlfT1BFTl9TTEFWRV9U T09TSE9SVCIsMCk7CisgICAgICAgIHJldHVybihQVFlfT1BFTl9TTEFWRV9UT09TSE9SVCk7Cisg ICAgfQorCisjaWZkZWYgU0VUVUlECisgICAgaWYgKGNobW9kKHNsYXZlLCAwKSkgeworICAgICAg ICBkZWJ1ZyhGMTEwLCJwdHlfb3Blbl9zbGF2ZSgpIiwiUFRZX09QRU5fU0xBVkVfQ0hNT0RGQUlM IiwwKTsKKyAgICAgICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX0NITU9ERkFJTCk7CisgICAgfQor ICAgIGlmIChjaG93bihzbGF2ZSwgMCwgMCApID09IC0xICkgeworICAgICAgICBkZWJ1ZyhGMTEw LCJwdHlfb3Blbl9zbGF2ZSgpIiwiUFRZX09QRU5fU0xBVkVfQ0hPV05GQUlMIiwwKTsKKyAgICAg ICAgcmV0dXJuKFBUWV9PUEVOX1NMQVZFX0NIT1dORkFJTCk7CisgICAgfQorI2VuZGlmIC8qIFNF VFVJRCAqLworI2lmZGVmIFZIQU5HX0ZJUlNUCisgICAgcHR5aW50X3ZoYW5ndXAoKTsKKyAgICBj bG9zZSh2ZmQpOworI2VuZGlmIC8qIFZIQU5HX0ZJUlNUICovCisKKyAgICBpZiAoKHJldHZhbCA9 IHB0eWludF92b2lkX2Fzc29jaWF0aW9uKCkpICE9IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwK KwkgICAgICAicHR5X29wZW5fc2xhdmUoKSIsCisJICAgICAgInB0eWludF92b2lkX2Fzc29jaWF0 aW9uKCkgZmFpbGVkIiwKKwkgICAgICByZXR2YWwKKwkgICAgICApOworICAgICAgICByZXR1cm4o cmV0dmFsKTsKKyAgICB9CisKKyNpZmRlZiBIQVZFX1JFVk9LRQorICAgIGlmIChyZXZva2UgKHNs YXZlKSA8IDAgKSB7CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV9vcGVuX3NsYXZlKCkiLCJQVFlf T1BFTl9TTEFWRV9SRVZPS0VGQUlMIiwwKTsKKwlyZXR1cm4oUFRZX09QRU5fU0xBVkVfUkVWT0tF RkFJTCk7CisgICAgfQorI2VuZGlmIC8qIEhBVkVfUkVWT0tFICovCisKKy8qIE9wZW4gdGhlIHB0 eSBmb3IgcmVhbC4gKi8KKworICAgIHJldHZhbCA9IHB0eV9vcGVuX2N0dHkoc2xhdmUsIGZkLCBm Yyk7CisgICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUgcmV0dmFsIixzbGF2ZSxyZXR2YWwp OworICAgIGRlYnVnKEYxMTEsInB0eV9vcGVuX3NsYXZlIGZkIixzbGF2ZSwqZmQpOworICAgIGlm IChyZXR2YWwgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJwdHlfb3Blbl9zbGF2ZSgpIiwi cHR5X29wZW5fY3R0eSgpIGZhaWxlZCIscmV0dmFsKTsKKwlyZXR1cm4oUFRZX09QRU5fU0xBVkVf T1BFTkZBSUwpOworICAgIH0KKyAgICBwdHlfc2xhdmVfZmQgPSAqZmQ7CQkgICAvKiBUaGlzIGlz IG5vdCB2aXNpYmxlIHRvIHRoZSB1cHBlciBmb3JrICovCisgICAgZGVidWcoRjExMSwicHR5X29w ZW5fc2xhdmUgZmQgY3R0eSdkIixzbGF2ZSxwdHlfc2xhdmVfZmQpOworICAgIHJldHZhbCA9IHB0 eV9pbml0aWFsaXplX3NsYXZlKCpmZCk7CisgICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUg ZmQgaW5pdCdkIixzbGF2ZSxwdHlfc2xhdmVfZmQpOworICAgIGlmIChyZXR2YWwpIHsKKyAgICAg ICAgZGVidWcoRjExMSwicHR5X29wZW5fc2xhdmUoKSIsInB0eV9pbml0aWFsaXplX3NsYXZlKCkg ZmFpbGVkIixyZXR2YWwpOworICAgICAgICByZXR1cm4ocmV0dmFsKTsKKyAgICB9CisgICAgLyog KFZPSUQpcHR5X21ha2VfcmF3KCpmZCk7ICovCisKKyAgICBkZWJ1ZyhGMTAwLCJwdHlfb3Blbl9z bGF2ZSBPSyIsIiIsKmZkKTsKKyAgICByZXR1cm4oMEwpOworfQorCisjaWZkZWYgV0FOVF9VVE1Q CisKKyNpZm5kZWYgVVRNUF9GSUxFCisjaWZkZWYgX1BBVEhfVVRNUAorI2RlZmluZSBVVE1QX0ZJ TEUgX1BBVEhfVVRNUAorI2VuZGlmIC8qIF9QQVRIX1VUTVAgKi8KKyNlbmRpZiAvKiAgVVRNUF9G SUxFICovCisKKy8qIElmIGl0IGlzICpzdGlsbCogbWlzc2luZywgYXNzdW1lIC9ldGMvdXRtcCAq LworCisjaWZuZGVmIFVUTVBfRklMRQorI2RlZmluZQlVVE1QX0ZJTEUgIi9ldGMvdXRtcCIKKyNl bmRpZiAvKiBVVE1QX0ZJTEUgKi8KKworI2lmbmRlZiBOT19VVF9QSUQKKyNkZWZpbmUgV1RNUF9S RVFVSVJFU19VU0VSTkFNRQorI2VuZGlmIC8qIE5PX1VUX1BJRCAqLworCitsb25nCitwdHlfdXBk YXRlX3V0bXAocHJvY2Vzc190eXBlLCBwaWQsIHVzZXJuYW1lLCBsaW5lLCBob3N0LCBmbGFncykK KyAgICBpbnQgcHJvY2Vzc190eXBlOworICAgIGludCBwaWQ7CisgICAgY2hhciAqdXNlcm5hbWUs ICpsaW5lLCAqaG9zdDsKKyAgICBpbnQgZmxhZ3M7CisvKiBwdHlfdXBkYXRlX3V0bXAgKi8gewor ICAgIHN0cnVjdCB1dG1wIGVudCwgdXQ7CisjaWZuZGVmIEhBVkVfU0VUVVRFTlQKKyAgICBzdHJ1 Y3Qgc3RhdCBzdGF0YjsKKyAgICBpbnQgdHR5OworI2VuZGlmIC8qIEhBVkVfU0VUVVRFTlQgKi8K KyNpZmRlZiBIQVZFX1NFVFVUWEVOVAorICAgIHN0cnVjdCB1dG1weCB1dHg7CisjZW5kaWYgLyog SEFWRV9TRVRVVFhFTlQgKi8KKyNpZm5kZWYgTk9fVVRfUElECisgICAgY2hhciAqdG1weDsKKyAg ICBjaGFyIHV0bXBfaWRbNV07CisjZW5kaWYgLyogTk9fVVRfUElEICovCisgICAgY2hhciB1c2Vy YnVmWzMyXTsKKyAgICBpbnQgZmQ7CisKKyAgICBkZWJ1ZyhGMTAwLCJwdHlfdXBkYXRlX3V0bXAo KSIsIiIsMCk7CisgICAgc3RybmNweShlbnQudXRfbGluZSwgbGluZStzaXplb2YoIi9kZXYvIikt MSwgc2l6ZW9mKGVudC51dF9saW5lKSk7CisgICAgZW50LnV0X3RpbWUgPSB0aW1lKDApOworCisj aWZkZWYgTk9fVVRfUElECisgICAgaWYgKHByb2Nlc3NfdHlwZSA9PSBQVFlfTE9HSU5fUFJPQ0VT UykKKyAgICAgIHJldHVybigwTCk7CisjZWxzZSAvKiBOT19VVF9QSUQgKi8KKworICAgIGVudC51 dF9waWQgPSBwaWQ7CisKKyAgICBzd2l0Y2ggKHByb2Nlc3NfdHlwZSkgeworICAgICAgY2FzZSBQ VFlfTE9HSU5fUFJPQ0VTUzoKKwllbnQudXRfdHlwZSA9IExPR0lOX1BST0NFU1M7CisJYnJlYWs7 CisgICAgICBjYXNlIFBUWV9VU0VSX1BST0NFU1M6CisJZW50LnV0X3R5cGUgPSBVU0VSX1BST0NF U1M7CisJYnJlYWs7CisgICAgICBjYXNlIFBUWV9ERUFEX1BST0NFU1M6CisJZW50LnV0X3R5cGUg PSBERUFEX1BST0NFU1M7CisJYnJlYWs7CisgICAgICBkZWZhdWx0OgorCXJldHVybihQVFlfVVBE QVRFX1VUTVBfUFJPQ1RZUEVfSU5WQUxJRCk7CisgICAgfQorI2VuZGlmIC8qTk9fVVRfUElEKi8K KworI2lmbmRlZiBOT19VVF9IT1NUCisgICAgaWYgKGhvc3QpCisgICAgICBzdHJuY3B5KGVudC51 dF9ob3N0LCBob3N0LCBzaXplb2YoZW50LnV0X2hvc3QpKTsKKyAgICBlbHNlCisgICAgICBlbnQu dXRfaG9zdFswXSA9ICdcMCc7CisjZW5kaWYgLyogTk9fVVRfSE9TVCAqLworCisjaWZuZGVmIE5P X1VUX1BJRAorICAgIGlmICghc3RyY21wIChsaW5lLCAiL2Rldi9jb25zb2xlIikpIHsKKwljaGFy ICogcyA9IE5VTEw7CisKKyNpZmRlZiBzdW4KKyNpZmRlZiBfX1NWUjQKKwlzID0gImNvIjsKKyNl bHNlCisJcyA9ICJjb25zIjsKKyNlbmRpZiAvKiBfX1NWUjQgKi8KKyNlbHNlCisJcyA9ICJjb25z IjsKKyNlbmRpZiAvKiBzdW4gKi8KKworCXN0cm5jcHkoZW50LnV0X2lkLCBzLCA0KTsKKworICAg IH0gZWxzZSB7CisKKwl0bXB4ID0gbGluZSArIHN0cmxlbihsaW5lKS0xOworCWlmICgqKHRtcHgt MSkgIT0gJy8nKSB0bXB4LS07CS8qIGxhc3QgMiBjaGFycyB1bmxlc3MgaXQncyBhICcvJyAqLwor I2lmZGVmIF9faHB1eAorCWNrc3RybmNweSh1dG1wX2lkLCB0bXB4LCA1KTsKKyNlbHNlCisJY2tt YWttc2codXRtcF9pZCw1LCJrbCIsdG1weCxOVUxMLE5VTEwpOworI2VuZGlmIC8qIF9faHB1eCAq LworCXN0cm5jcHkoZW50LnV0X2lkLCB1dG1wX2lkLCBzaXplb2YoZW50LnV0X2lkKSk7CisgICAg fQorICAgIHN0cm5jcHkoZW50LnV0X3VzZXIsIHVzZXJuYW1lLCBzaXplb2YoZW50LnV0X3VzZXIp KTsKKworI2Vsc2UKKworICAgIHN0cm5jcHkoZW50LnV0X25hbWUsIHVzZXJuYW1lLCBzaXplb2Yo ZW50LnV0X25hbWUpKTsKKworI2VuZGlmIC8qIE5PX1VUX1BJRCAqLworCisgICAgaWYgKHVzZXJu YW1lWzBdKQorICAgICAgc3RybmNweSh1c2VyYnVmLCB1c2VybmFtZSwgc2l6ZW9mKHVzZXJidWYp KTsKKyAgICBlbHNlCisgICAgICB1c2VyYnVmWzBdID0gJ1wwJzsKKworI2lmZGVmIEhBVkVfU0VU VVRFTlQKKworICAgIHV0bXBuYW1lKFVUTVBfRklMRSk7CisgICAgc2V0dXRlbnQoKTsKKy8qCisg IElmIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHVzZXIgbmFtZSBpbiB0aGUgd3RtcCBzdHJ1Y3R1 cmUgYW5kIE91ciBmbGFncworICB0ZWxsIHVzIHdlIGNhbiBvYnRhaW4gaXQgZnJvbSB0aGUgdXRt cCBhbmQgd2Ugc3VjY2VlZCBpbiBvYnRhaW5pbmcgaXQsIHdlCisgIHRoZW4gc2F2ZSB0aGUgdXRt cCBzdHJ1Y3R1cmUgd2Ugb2J0YWluLCB3cml0ZSBvdXQgdGhlIHV0bXAgc3RydWN0dXJlIGFuZAor ICBjaGFuZ2UgdGhlIHVzZXJuYW1lIHBvaW50ZXIgc28gaXQgaXMgdXNlZCBieSB1cGRhdGVfd3Rt cC4KKyovCisKKyNpZmRlZiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1FCisgICAgaWYgKCghdXNlcm5h bWVbMF0pICYmIChmbGFncyZQVFlfVVRNUF9VU0VSTkFNRV9WQUxJRCkgJiZsaW5lKSB7CisJc3Ry dWN0IHV0bXAgKnV0cHRyOworCXN0cm5jcHkodXQudXRfbGluZSwgbGluZSwgc2l6ZW9mKHV0LnV0 X2xpbmUpKTsKKwl1dHB0ciA9IGdldHV0bGluZSgmdXQpOworCWlmICh1dHB0cikKKwkgIHN0cm5j cHkodXNlcmJ1Zix1dHB0ci0+dXRfdXNlcixzaXplb2YodXQudXRfdXNlcikpOworICAgIH0KKyNl bmRpZiAvKiBXVE1QX1JFUVVJUkVTX1VTRVJOQU1FICovCisKKyAgICBwdXR1dGxpbmUoJmVudCk7 CisgICAgZW5kdXRlbnQoKTsKKworI2lmZGVmIEhBVkVfU0VUVVRYRU5UCisgICAgc2V0dXR4ZW50 KCk7CisjaWZkZWYgSEFWRV9HRVRVVE1QWAorICAgIGdldHV0bXB4KCZlbnQsICZ1dHgpOworI2Vs c2UgLyogSEFWRV9HRVRVVE1QWCAqLworICAgIC8qIEZvciBwbGF0Zm9ybXMgbGlrZSBIUFVYIGFu ZCBEZWMgVW5peCB3aGljaCBkb24ndCBoYXZlIGdldHV0bXB4ICovCisgICAgc3RybmNweSh1dHgu dXRfdXNlciwgZW50LnV0X3VzZXIsIHNpemVvZihlbnQudXRfdXNlcikpOworICAgIHN0cm5jcHko dXR4LnV0X2lkLCBlbnQudXRfaWQsIHNpemVvZihlbnQudXRfaWQpKTsKKyAgICBzdHJuY3B5KHV0 eC51dF9saW5lLCBlbnQudXRfbGluZSwgc2l6ZW9mKGVudC51dF9saW5lKSk7CisgICAgdXR4LnV0 X3BpZCA9IHBpZDsJCS8qIGtsdWRnZSBmb3IgSXJpeCwgZXRjLiB0byBhdm9pZCB0cnVuYy4gKi8K KyAgICB1dHgudXRfdHlwZSA9IGVudC51dF90eXBlOworI2lmZGVmIFVUX0VYSVRfU1RSVUNUVVJF X0RJRkZFUgorICAgIHV0eC51dF9leGl0LnV0X2V4aXQgPSBlbnQudXRfZXhpdC5lX2V4aXQ7Cisj ZWxzZSAvKiBVVF9FWElUX1NUUlVDVFVSRV9ESUZGRVIgKi8KKy8qIEtMVURHRSBmb3Igbm93OyBl dmVudHVhbGx5IHRoaXMgd2lsbCBiZSBhIGZlYXR1cmUgdGVzdC4uLiBTZWUgUFIjWzQwXSAqLwor I2lmZGVmIF9faHB1eAorICAgIHV0eC51dF9leGl0Ll9fZV90ZXJtaW5hdGlvbiA9IGVudC51dF9l eGl0LmVfdGVybWluYXRpb247CisgICAgdXR4LnV0X2V4aXQuX19lX2V4aXQgPSBlbnQudXRfZXhp dC5lX2V4aXQ7CisjZWxzZSAvKiBfX2hwdXggKi8KKyAgICAvKiBYWFggZG8gbm90aGluZyBmb3Ig bm93OyB3ZSBkb24ndCBldmVuIGtub3cgdGhlIHN0cnVjdCBtZW1iZXIgZXhpc3RzICovCisjZW5k aWYgLyogX19ocHV4ICovCisjZW5kaWYgLyogVVRfRVhJVF9TVFJVQ1RVUkVfRElGRkVSICovCisg ICAgdXR4LnV0X3R2LnR2X3NlYyA9IGVudC51dF90aW1lOworICAgIHV0eC51dF90di50dl91c2Vj ID0gMDsKKyNlbmRpZiAvKiBIQVZFX0dFVFVUTVBYICovCisgICAgaWYgKGhvc3QpCisgICAgICBz dHJuY3B5KHV0eC51dF9ob3N0LCBob3N0LCBzaXplb2YodXR4LnV0X2hvc3QpKTsKKyAgICBlbHNl CisgICAgICB1dHgudXRfaG9zdFswXSA9IDA7CisgICAgcHV0dXR4bGluZSgmdXR4KTsKKyAgICBl bmR1dHhlbnQoKTsKKyNlbmRpZiAvKiBIQVZFX1NFVFVUWEVOVCAqLworCisjZWxzZSAvKiBIQVZF X1NFVFVURU5UICovCisgICAgaWYgKGZsYWdzJlBUWV9UVFlTTE9UX1VTQUJMRSkgeworCXR0eSA9 IHR0eXNsb3QoKTsKKyAgICB9IGVsc2UgeworCWludCBsYzsKKwl0dHkgPSAtMTsKKwlpZiAoKGZk ID0gb3BlbihVVE1QX0ZJTEUsIE9fUkRXUikpIDwgMCkKKwkgIHJldHVybihlcnJubyk7CisJZm9y IChsYyA9IDA7CisJICAgICBsc2VlayhmZCwgKG9mZl90KShsYyAqIHNpemVvZihzdHJ1Y3QgdXRt cCkpLCBTRUVLX1NFVCkgIT0gLTE7CisJICAgICBsYysrCisJICAgICApIHsKKwkgICAgaWYgKHJl YWQoZmQsCisJCSAgICAgKGNoYXIgKikmdXQsCisJCSAgICAgc2l6ZW9mKHN0cnVjdCB1dG1wKQor CQkgICAgICkgIT0gc2l6ZW9mKHN0cnVjdCB1dG1wKQorCQkpCisJICAgICAgYnJlYWs7CisJICAg IGlmIChzdHJuY21wKHV0LnV0X2xpbmUsIGVudC51dF9saW5lLCBzaXplb2YodXQudXRfbGluZSkp ID09IDApIHsKKwkJdHR5ID0gbGM7CisjaWZkZWYgV1RNUF9SRVFVSVJFU19VU0VSTkFNRQorCQlp ZiAoIXVzZXJuYW1lJiYoZmxhZ3MmUFRZX1VUTVBfVVNFUk5BTUVfVkFMSUQpKQorCQkgIHN0cm5j cHkodXNlcmJ1ZiwgdXQudXRfdXNlciwgc2l6ZW9mKHV0LnV0X3VzZXIpKTsKKyNlbmRpZiAvKiBX VE1QX1JFUVVJUkVTX1VTRVJOQU1FICovCisJCWJyZWFrOworCSAgICB9CisJfQorCWNsb3NlKGZk KTsKKyAgICB9CisgICAgaWYgKHR0eSA+IDAgJiYgKGZkID0gb3BlbihVVE1QX0ZJTEUsIE9fV1JP TkxZLCAwKSkgPj0gMCkgeworCWxzZWVrKGZkLCAob2ZmX3QpKHR0eSAqIHNpemVvZihzdHJ1Y3Qg dXRtcCkpLCBTRUVLX1NFVCk7CisJd3JpdGUoZmQsIChjaGFyICopJmVudCwgc2l6ZW9mKHN0cnVj dCB1dG1wKSk7CisJY2xvc2UoZmQpOworICAgIH0KKyNlbmRpZiAvKiBIQVZFX1NFVFVURU5UICov CisKKyAgICAvKiBEb24ndCByZWNvcmQgTE9HSU5fUFJPQ0VTUyBlbnRyaWVzLiAqLworICAgIGlm IChwcm9jZXNzX3R5cGUgPT0gUFRZX0xPR0lOX1BST0NFU1MpCisgICAgICByZXR1cm4oMCk7Cisg ICAgZWxzZQorICAgICAgcmV0dXJuKHB0eWludF91cGRhdGVfd3RtcCgmZW50LCBob3N0LCB1c2Vy YnVmKSk7Cit9CisjaWZuZGVmIFdUTVBfRklMRQorI2lmZGVmIF9QQVRIX1dUTVAKKyNkZWZpbmUg V1RNUF9GSUxFIF9QQVRIX1dUTVAKKyNlbmRpZiAvKiBfUEFUSF9XVE1QICovCisjZW5kaWYgLyog V1RNUF9GSUxFICovCisKKyNpZm5kZWYgV1RNUFhfRklMRQorI2lmZGVmIF9QQVRIX1dUTVBYCisj aWZkZWYgSEFWRV9VUERXVE1QWAorI2RlZmluZSBXVE1QWF9GSUxFIF9QQVRIX1dUTVBYCisjZW5k aWYgLyogSEFWRV9VUERXVE1QWCAqLworI2VuZGlmIC8qIF9QQVRIX1dUTVBYICovCisjZW5kaWYg LyogV1RNUFhfRklMRSAqLworCisvKiBJZiBpdCBpcyAqc3RpbGwqIG1pc3NpbmcsIGFzc3VtZSAv dXNyL2FkbS93dG1wICovCisKKyNpZm5kZWYgV1RNUF9GSUxFCisjZGVmaW5lCVdUTVBfRklMRSAi L3Vzci9hZG0vd3RtcCIKKyNlbmRpZiAvKiBXVE1QX0ZJTEUgKi8KKworI2lmZGVmIENPTU1FTlQK Ky8qIFRoZSBmb2xsb3dpbmcgdGVzdCBjYW4gbm90IGJlIG1hZGUgcG9ydGFibHkgKi8KKworLyog I2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAoX19HTElCQ19fID49IDIpICYmIChfX0dMSUJDX01J Tk9SX18gPj0gMSkgKi8KKy8qCisgIFRoaXMgaXMgdWdseSwgYnV0IHRoZSBsYWNrIG9mIHN0YW5k YXJkaXphdGlvbiBpbiB0aGUgdXRtcC91dG1weCBzcGFjZSwgYW5kCisgIHdoYXQgZ2xpYmMgaW1w bGVtZW50cyBhbmQgZG9lc24ndCBtYWtlIGF2YWlsYWJsZSwgaXMgZXZlbiB3b3JzZS4KKyovCisv KiAjdW5kZWYgSEFWRV9VUERXVE1QWCAqLwkvKiBEb24ndCB1c2UgdXBkd3RtcHggZm9yIGdsaWJj IDIuMSAqLworLyogI2VuZGlmICovIC8qIF9fR0xJQkNfXyBldGMgKi8KKworI2Vsc2UgIC8qIENP TU1FTlQgKi8KKworI2lmZGVmIF9fR0xJQkNfXworI3VuZGVmIEhBVkVfVVBEV1RNUFgJCS8qIERv bid0IHVzZSB1cGR3dG1weCBmb3IgZ2xpYmMgcGVyaW9kICovCisjZW5kaWYgLyogX19HTElCQ19f ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCitsb25nCitwdHlpbnRfdXBkYXRlX3d0bXAoZW50 LGhvc3QsdXNlcikgc3RydWN0IHV0bXAgKmVudDsgY2hhciAqaG9zdDsgY2hhciAqdXNlcjsgewor ICAgIHN0cnVjdCB1dG1wIHV0OworICAgIHN0cnVjdCBzdGF0IHN0YXRiOworICAgIGludCBmZDsK KyAgICB0aW1lX3QgdXR0aW1lOworI2lmZGVmIEhBVkVfVVBEV1RNUFgKKyAgICBzdHJ1Y3QgdXRt cHggdXR4OworCisgICAgZ2V0dXRtcHgoZW50LCAmdXR4KTsKKyAgICBpZiAoaG9zdCkKKyAgICAg IHN0cm5jcHkodXR4LnV0X2hvc3QsIGhvc3QsIHNpemVvZih1dHgudXRfaG9zdCkgKTsKKyAgICBl bHNlCisgICAgICB1dHgudXRfaG9zdFswXSA9IDA7CisgICAgaWYgKHVzZXIpCisgICAgICBzdHJu Y3B5KHV0eC51dF91c2VyLCB1c2VyLCBzaXplb2YodXR4LnV0X3VzZXIpKTsKKyAgICB1cGR3dG1w eChXVE1QWF9GSUxFLCAmdXR4KTsKKyNlbmRpZiAvKiBIQVZFX1VQRFdUTVBYICovCisKKyNpZmRl ZiBIQVZFX1VQRFdUTVAKKyNpZm5kZWYgSEFWRV9VUERXVE1QWAorICAgIC8qIFRoaXMgaXMgYWxy ZWFkeSBwZXJmb3JtZWQgYnl1cGR3dG1weCBpZiBwcmVzZW50LiovCisgICAgdXBkd3RtcChXVE1Q X0ZJTEUsIGVudCk7CisjZW5kaWYgLyogSEFWRV9VUERXVE1QWCovCisjZWxzZSAvKiBIQVZFX1VQ RFdUTVAgKi8KKworICAgIGlmICgoZmQgPSBvcGVuKFdUTVBfRklMRSwgT19XUk9OTFl8T19BUFBF TkQsIDApKSA+PSAwKSB7CisJaWYgKCFmc3RhdChmZCwgJnN0YXRiKSkgeworCSAgICBtZW1zZXQo KGNoYXIgKikmdXQsIDAsIHNpemVvZih1dCkpOworI2lmZGVmIF9faHB1eAorCSAgICBzdHJuY3B5 KHV0LnV0X2lkLCBlbnQtPnV0X2lkLCBzaXplb2YgKHV0LnV0X2lkKSk7CisjZW5kaWYgLyogX19o cHV4ICovCisJICAgIHN0cm5jcHkodXQudXRfbGluZSwgZW50LT51dF9saW5lLCBzaXplb2YodXQu dXRfbGluZSkpOworCSAgICBzdHJuY3B5KHV0LnV0X25hbWUsIGVudC0+dXRfbmFtZSwgc2l6ZW9m KHV0LnV0X25hbWUpKTsKKyNpZm5kZWYgTk9fVVRfSE9TVAorCSAgICBzdHJuY3B5KHV0LnV0X2hv c3QsIGVudC0+dXRfaG9zdCwgc2l6ZW9mKHV0LnV0X2hvc3QpKTsKKyNlbmRpZiAvKiBOT19VVF9I T1NUICovCisKKwkgICAgdGltZSgmdXR0aW1lKTsKKwkgICAgdXQudXRfdGltZSA9IHV0dGltZTsK KworI2lmZGVmIEhBVkVfR0VUVVRFTlQKKyNpZmRlZiBVU0VSX1BST0NFU1MKKwkgICAgaWYgKGVu dC0+dXRfbmFtZSkgeworCQlpZiAoIXV0LnV0X3BpZCkKKwkJICB1dC51dF9waWQgPSBnZXRwaWQo KTsKKyNpZm5kZWYgX19ocHV4CisJCXV0LnV0X3R5cGUgPSBVU0VSX1BST0NFU1M7CisjZWxzZSAg LyogX19ocHV4ICovCisJCXV0LnV0X3R5cGUgPSBlbnQtPnV0X3R5cGU7CisjZW5kaWYgLyogX19o cHV4ICovCisKKwkgICAgfSBlbHNlIHsKKworI2lmZGVmIEVNUFRZCisJCXV0LnV0X3R5cGUgPSBF TVBUWTsKKyNlbHNlCisJCXV0LnV0X3R5cGUgPSBERUFEX1BST0NFU1M7IC8qIEZvciBMaW51eCBi cm9rZW5uZXNzKi8KKyNlbmRpZiAvKiBFTVBUWSAqLworCisJICAgIH0KKyNlbmRpZiAvKiBVU0VS X1BST0NFU1MgKi8KKyNlbmRpZiAvKiBIQVZFX0dFVFVURU5UICovCisKKwkgICAgaWYgKHdyaXRl KGZkLCAoY2hhciAqKSZ1dCwgc2l6ZW9mKHN0cnVjdCB1dG1wKSkgIT0KKwkJc2l6ZW9mKHN0cnVj dCB1dG1wKSkKKyNpZm5kZWYgQ09IRVJFTlQKKwkgICAgICBmdHJ1bmNhdGUoZmQsIHN0YXRiLnN0 X3NpemUpOworI2Vsc2UKKwkgICAgICBjaHNpemUoZmQsIHN0YXRiLnN0X3NpemUpOworI2VuZGlm IC8qIENPSEVSRU5UICovCisJfQorCWNsb3NlKGZkKTsKKyAgICB9CisjZW5kaWYgLyogSEFWRV9V UERXVE1QICovCisgICAgcmV0dXJuKDApOyAvKiBubyBjdXJyZW50IGZhaWx1cmUgY2FzZXM7IGZp bGUgbm90IGZvdW5kIGlzIG5vdCBmYWlsdXJlISAqLworfQorI2VuZGlmIC8qIFdBTlRfVVRNUCAq LworCisvKiBUaGlzIGlzIGZvciBhbmNpZW50IFVuaXhlcyB0aGF0IGRvbid0IGhhdmUgdGhlc2Ug dHR5IHN5bWJvbHMgZGVmaW5lZC4gKi8KKworI2lmbmRlZiBQRU5ESU4KKyNkZWZpbmUgUEVORElO IElDQU5PTgorI2VuZGlmIC8qIFBFTkRJTiAqLworI2lmbmRlZiBGTFVTSE8KKyNkZWZpbmUgRkxV U0hPIElDQU5PTgorI2VuZGlmIC8qIEZMVVNITyAqLworI2lmbmRlZiBJTUFYQkVMCisjZGVmaW5l IElNQVhCRUwgSUNBTk9OCisjZW5kaWYgLyogSU1BWEJFTCAqLworI2lmbmRlZiBFWFRQUk9DCisj ZGVmaW5lIEVYVFBST0MgSUNBTk9OCisjZW5kaWYgLyogRVhUUFJPQyAqLworCitzdGF0aWMgY2hh ciBYbGluZVsxN10gPSB7IDAsIDAgfTsKKy8qCisgIGdldHB0eXNsYXZlKCkKKyAgT3BlbiB0aGUg c2xhdmUgc2lkZSBvZiB0aGUgcHR5LCBhbmQgZG8gYW55IGluaXRpYWxpemF0aW9uIHRoYXQgaXMg bmVjZXNzYXJ5LgorICBUaGUgcmV0dXJuIHZhbHVlIGZkIGlzIGEgZmlsZSBkZXNjcmlwdG9yIGZv ciB0aGUgc2xhdmUgc2lkZS4KKyAgZmMgPSBmdW5jdGlvbiBjb2RlIGZyb20gZG9fcHR5KCkgKHEu di4pCisqLworaW50CitnZXRwdHlzbGF2ZShmZCwgZmMpIGludCAqIGZkLCBmYzsgeworICAgIGlu dCB0dHlmZDsKKyAgICBpbnQgdCA9IC0xOworICAgIGxvbmcgcmV0dmFsOworI2lmZGVmIFRJT0NH V0lOU1oKKyAgICBzdHJ1Y3Qgd2luc2l6ZSB3czsKKyAgICBleHRlcm4gaW50IGNtZF9yb3dzLCBj bWRfY29sczsKKyNlbmRpZiAvKiBUSU9DR1dJTlNaICovCisKKyAgICB0dHlmZCA9ICpmZDsKKyAg ICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSgpIiwidHR5ZmQiLHR0eWZkKTsKKyAgICAvKgorICAg ICAqIE9wZW5pbmcgdGhlIHNsYXZlIHNpZGUgbWF5IGNhdXNlIGluaXRpbGl6YXRpb24gb2YgdGhl CisgICAgICoga2VybmVsIHR0eSBzdHJ1Y3R1cmUuICBXZSBuZWVkIHJlbWVtYmVyIHRoZSBzdGF0 ZSBvZjoKKyAgICAgKiAgICAgIGlmIGxpbmVtb2RlIHdhcyB0dXJuZWQgb24KKyAgICAgKiAgICAg IHRlcm1pbmFsIHdpbmRvdyBzaXplCisgICAgICogICAgICB0ZXJtaW5hbCBzcGVlZAorICAgICAq IHNvIHRoYXQgd2UgY2FuIHJlc2V0IHRoZW0gaWYgd2UgbmVlZCB0by4KKyAgICAgKi8KKyAgICBp ZiAoKHJldHZhbCA9IHB0eV9vcGVuX3NsYXZlKFhsaW5lLCAmdCwgZmMpKSAhPSAwKSB7CisJcGVy cm9yKFhsaW5lKTsKKwltc2crKzsKKyAgICAgICAgZGVidWcoRjExMSwiZ2V0cHR5c2xhdmUoKSIs IlVuYWJsZSB0byBvcGVuIHNsYXZlIixyZXR2YWwpOworICAgICAgICByZXR1cm4oLTEpOworICAg IH0KKyAgICBkZWJ1ZyhGMTExLCJnZXRwdHlzbGF2ZSIsInQiLHQpOworI2lmZGVmIElOSVRfU1BU WQorICAgIHNwdHkgPSB0OworICAgIGRlYnVnKEYxMTEsImdldHB0eXNsYXZlIiwic3B0eSIsc3B0 eSk7CisjZW5kaWYgLyogSU5JVF9TUFRZICovCisjaWZkZWYgU1RSRUFNU1BUWQorICAgIGlmIChp b2N0bCh0LElfUFVTSCwicGNrdCIpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJnZXRwdHlz bGF2ZSgpIiwiaW9jdGwoSV9QVVNIKSBmYWlsZWQiLGVycm5vKTsKKyNpZm5kZWYgX0FJWAorICAg ICAgICBmYXRhbCgiSV9QVVNIIHBja3QiKTsKKyNlbmRpZiAvKiBfQUlYICovCisgICAgfQorI2Vu ZGlmIC8qIFNUUkVBTVNQVFkgKi8KKworICAgIC8qIFNldCB1cCB0aGUgdHR5IG1vZGVzIGFzIHdl IGxpa2UgdGhlbSB0byBiZS4gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgLyogT3JpZ2luYWxseSBs aWtlIHRoaXMuLi4gQnV0IHRoaXMgaXMgdGhlIG1hc3RlciAtIHdlIHdhbnQgdGhlIHNsYXZlICov CisgICAgLyogQW55d2F5LCB0aGlzIGZhaWxzIG9uIFNvbGFyaXMgYW5kIHByb2JhYmx5IG90aGVy IFN5c3RlbSBWIE9TJ3MgKi8KKyAgICBpbml0X3Rlcm1idWYodHR5ZmQpOworI2Vsc2UKKyAgICBp bml0X3Rlcm1idWYodCk7CisjZW5kaWYJLyogQ09NTUVOVCAqLworI2lmZGVmIFRJT0NHV0lOU1oK KyAgICBpZiAoY21kX3Jvd3MgfHwgY21kX2NvbHMpIHsKKyAgICAgICAgbWVtc2V0KChjaGFyICop JndzLCAwLCBzaXplb2Yod3MpKTsKKyAgICAgICAgd3Mud3NfY29sID0gY21kX2NvbHM7CisgICAg ICAgIHdzLndzX3JvdyA9IGNtZF9yb3dzOworCWRlYnVnKEYxMDEsImdldHB0eXNsYXZlKCkgZG9p bmcgVElPQ1NXSU5TWi4uLiIsIiIsdCk7CisgICAgICAgIGlvY3RsKHQsIFRJT0NTV0lOU1osIChj aGFyICopJndzKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ0dXSU5TWiAqLworCisgICAgLyogRm9y IGV4dGVybmFsIHByb3RvY29scywgcHV0IHRoZSBwdHkgaW4gbm8tZWNobyBtb2RlICovCisgICAg aWYgKGZjID09IDEpIHsKKwlkZWJ1ZyhGMTAwLCJnZXRwdHlzbGF2ZSgpIHNldHRpbmcgcmF3bW9k ZSIsIiIsMCk7CisJLyogaWZsYWdzICovCisJdGVybWJ1Zi5jX2lmbGFnICY9IH4oUEFSTVJLfElT VFJJUHxCUktJTlR8SU5MQ1J8SUdOQ1J8SUNSTkwpOworCXRlcm1idWYuY19pZmxhZyAmPSB+KElO UENLfElHTlBBUnxJTUFYQkVMfElYQU5ZfElYT058SVhPRkYpOworCXRlcm1idWYuY19pZmxhZyB8 PSBJR05CUks7CisjaWZkZWYgSVVDTEMKKwl0ZXJtYnVmLmNfaWZsYWcgJj0gfklVQ0xDOworI2Vu ZGlmIC8qIElVQ0xDICovCisKKwkvKiBvZmxhZ3MgKi8KKwl0ZXJtYnVmLmNfb2ZsYWcgJj0gfk9Q T1NUOworI2lmZGVmIE9YVEFCUworCXRlcm1idWYuY19vZmxhZyAmPSB+T1hUQUJTOworI2VuZGlm IC8qIE9YVEFCUyAqLworI2lmZGVmIE9OT0NSCisJdGVybWJ1Zi5jX29mbGFnICY9IH5PTk9DUjsK KyNlbmRpZiAvKiBPTk9DUiAqLworI2lmZGVmIE9OTFJFVAorCXRlcm1idWYuY19vZmxhZyAmPSB+ T05MUkVUOworI2VuZGlmIC8qIE9OTFJFVCAqLworI2lmZGVmIE9OTENSCisJdGVybWJ1Zi5jX29m bGFnICY9IH5PTkxDUjsKKyNlbmRpZiAvKiBPTkxDUiAqLworCisJLyogbGZsYWdzICovCisJdGVy bWJ1Zi5jX2xmbGFnICY9IH5FQ0hPOworI2lmZGVmIEVDSE9FCisJdGVybWJ1Zi5jX2xmbGFnICY9 IH5FQ0hPRTsKKyNlbmRpZiAvKiBFQ0hPRSAqLworI2lmZGVmIEVDSE9OTAorCXRlcm1idWYuY19s ZmxhZyAmPSB+RUNIT05MOworI2VuZGlmIC8qIEVDSE9OTCAqLworI2lmZGVmIEVDSE9QUlQKKwl0 ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE9QUlQ7CisjZW5kaWYgLyogRUNIT1BSVCAqLworI2lmZGVm IEVDSE9LRQorCXRlcm1idWYuY19sZmxhZyAmPSB+RUNIT0tFOworI2VuZGlmIC8qIEVDSE9LRSAq LworI2lmZGVmIEVDSE9DVEwKKwl0ZXJtYnVmLmNfbGZsYWcgJj0gfkVDSE9DVEw7CisjZW5kaWYg LyogRUNIT0NUTCAqLworI2lmZGVmIEFMVFdFUkFTRQorCXRlcm1idWYuY19sZmxhZyAmPSB+QUxU V0VSQVNFOworI2VuZGlmIC8qIEFMVFdFUkFTRSAqLworI2lmZGVmIEVYVFBST0MKKwl0ZXJtYnVm LmNfbGZsYWcgJj0gfkVYVFBST0M7CisjZW5kaWYgLyogRVhUUFJPQyAqLworCXRlcm1idWYuY19s ZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxUT1NUT1B8RkxVU0hPfFBFTkRJTik7CisKKyNp ZmRlZiBOT0tFUk5JTkZPCisJdGVybWJ1Zi5jX2xmbGFnIHw9IE5PS0VSTklORk87CisjZW5kaWYJ LyogTk9LRVJOSU5GTyAqLworCS8qIHRlcm1idWYuY19sZmxhZyB8PSBOT0ZMU0g7ICovCisJdGVy bWJ1Zi5jX2xmbGFnICY9IH5OT0ZMU0g7CisKKwkvKiBjZmxhZ3MgKi8KKwl0ZXJtYnVmLmNfY2Zs YWcgJj0gfihDU0laRXxQQVJFTkJ8UEFST0REKTsKKwl0ZXJtYnVmLmNfY2ZsYWcgfD0gQ1M4fENS RUFEOworI2lmZGVmIFZNSU4KKwl0ZXJtYnVmLmNfY2NbVk1JTl0gPSAxOworI2VuZGlmCS8qIFZN SU4gKi8KKyAgICB9IGVsc2UgewkJCQkvKiBSZWd1bGFyIGludGVyYWN0aXZlIHVzZSAqLworCWRl YnVnKEYxMDAsImdldHB0eXNsYXZlKCkgc2V0dGluZyBjb29rZWQgbW9kZSIsIiIsMCk7CisKKwkv KiBTZXR0aW5ncyBmb3Igc2d0dHkgYmFzZWQgc3lzdGVtcyAqLworCisjaWZuZGVmIFVTRV9URVJN SU8KKwl0ZXJtYnVmLnNnLnNnX2ZsYWdzIHw9IENSTU9EfEFOWVB8RUNIT3xYVEFCUzsKKyNlbmRp ZiAvKiBVU0VfVEVSTUlPICovCisKKyNpZm5kZWYgT1hUQUJTCisjZGVmaW5lIE9YVEFCUyAwCisj ZW5kaWYgLyogT1hUQUJTICovCisKKwkvKiBTZXR0aW5ncyBmb3IgVU5JQ09TIGFuZCBIUFVYICov CisKKyNpZmRlZiBDUkFZCisJdGVybWJ1Zi5jX29mbGFnID0gT1BPU1R8T05MQ1J8VEFCMzsKKwl0 ZXJtYnVmLmNfaWZsYWcgPSBJR05QQVJ8SVNUUklQfElDUk5MfElYT047CisJdGVybWJ1Zi5jX2xm bGFnID0gSVNJR3xJQ0FOT058RUNIT3xFQ0hPRXxFQ0hPSzsKKwl0ZXJtYnVmLmNfY2ZsYWcgPSBF WFRCfEhVUENMfENTODsKKyNlbHNlIC8qIENSQVkgKi8KKyNpZmRlZiBIUFVYCisJdGVybWJ1Zi5j X29mbGFnID0gT1BPU1R8T05MQ1J8VEFCMzsKKwl0ZXJtYnVmLmNfaWZsYWcgPSBJR05QQVJ8SVNU UklQfElDUk5MfElYT047CisJdGVybWJ1Zi5jX2xmbGFnID0gSVNJR3xJQ0FOT058RUNIT3xFQ0hP RXxFQ0hPSzsKKwl0ZXJtYnVmLmNfY2ZsYWcgPSBFWFRCfEhVUENMfENTODsKKyNlbHNlIC8qIEhQ VVggKi8KKyNpZmRlZiBVU0VfVEVSTUlPCisJLyoKKwkgIFNldHRpbmdzIGZvciBhbGwgb3RoZXIg dGVybWlvcy90ZXJtaW8gYmFzZWQgc3lzdGVtcywgb3RoZXIgdGhhbiAKKwkgIDQuNEJTRC4gIElu IDQuNEJTRCB0aGUga2VybmVsIGRvZXMgdGhlIGluaXRpYWwgdGVybWluYWwgc2V0dXAuCisJKi8K KyNpZmRlZiBCU0Q0MgorI2lmbmRlZiBCU0Q0NAorCXRlcm1idWYuY19sZmxhZyB8PSBFQ0hPfElD QU5PTnxJRVhURU58SVNJRzsKKwl0ZXJtYnVmLmNfb2ZsYWcgfD0gT05MQ1J8T1hUQUJTfE9QT1NU OworCXRlcm1idWYuY19pZmxhZyB8PSBJQ1JOTHxJR05QQVI7CisJdGVybWJ1Zi5jX2NmbGFnIHw9 IEhVUENMOworCXRlcm1idWYuY19pZmxhZyAmPSB+SVhPRkY7CisjZW5kaWYgLyogQlNENDQgKi8K KyNlbHNlIC8qIEJTRDQyICovCisJdGVybWJ1Zi5jX2xmbGFnIHw9IEVDSE98SUNBTk9OfElFWFRF TnxJU0lHOworCXRlcm1idWYuY19vZmxhZyB8PSBPTkxDUnxPWFRBQlN8T1BPU1Q7CisJdGVybWJ1 Zi5jX2lmbGFnIHw9IElDUk5MfElHTlBBUjsKKwl0ZXJtYnVmLmNfY2ZsYWcgfD0gSFVQQ0w7CisJ dGVybWJ1Zi5jX2lmbGFnICY9IH5JWE9GRjsKKyNlbmRpZiAvKiBCU0Q0MiAqLworI2VuZGlmIC8q IFVTRV9URVJNSU8gKi8KKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogQ1JBWSAqLworICAg IH0KKworICAgIC8qIFNldCB0aGUgdHR5IG1vZGVzLCBhbmQgbWFrZSB0aGlzIG91ciBjb250cm9s bGluZyB0dHkuICovCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIEJ1dCB0aGlzIGlzIHRoZSBtYXN0 ZXIgLSB3ZSB3YW50IHRoZSBzbGF2ZSAqLworICAgIHNldF90ZXJtYnVmKHR0eWZkKTsKKyNlbHNl CisgICAgc2V0X3Rlcm1idWYodCk7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgaWYgKHQg IT0gMCkKKyAgICAgIGR1cDIodCwgMCk7CisgICAgaWYgKHQgIT0gMSkKKyAgICAgIGR1cDIodCwg MSk7CisgICAgaWYgKHQgIT0gMikgeworCWlmIChmYyA9PSAwKSB7CisJICAgIGR1cDIodCwgMik7 CisJfSBlbHNlIGlmIChmYyA9PSAxKSB7CisJICAgIC8qIEZvciBleHRlcm5hbCBwcm90b2NvbHMs IHNlbmQgc3RkZXJyIHRvIC9kZXYvbnVsbCAqLworI2lmZGVmIENPTU1FTlQKKwkgICAgaW50IHh4 OworI2lmbmRlZiBDT01NRU5UCisJICAgIGNoYXIgKiBzID0gIi9kZXYvbnVsbCI7CisJICAgIGVy cm5vID0gMDsKKwkgICAgeHggPSBvcGVuKHMsIE9fV1JPTkxZKTsKKyNlbHNlCisJICAgIGNoYXIg KiBzID0gInB0eS5sb2ciOworCSAgICBlcnJubyA9IDA7CisJICAgIHh4ID0gb3BlbihzLCBPX0NS RUFULCAwNjQ0KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIGRlYnVnKEYxMTEsImdldHB0 eXNsYXZlIHJlZGlyZWN0IHN0ZGVyciIscyxlcnJubyk7CisJICAgIGR1cDIoeHgsMik7CisjZW5k aWYJLyogQ09NTUVOVCAqLworCX0KKyAgICB9CisgICAgaWYgKHQgPiAyKQorICAgICAgY2xvc2Uo dCk7CisKKyAgICBpZiAodHR5ZmQgPiAyKSB7CisJY2xvc2UodHR5ZmQpOworICAgICAgICB0dHlm ZCA9IC0xOworCSpmZCA9IHR0eWZkOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRl ZiBIQVZFX1BUWVRSQVAKKy8qCisgIFRvIGJlIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSB0cmFw IGlzIHBlbmRpbmcgb24gYSBwdHkKKyAgaWYgYW5kIG9ubHkgaWYgc2VsZWN0KCkgY2Fubm90IGJl IHVzZWQuCisqLworaW50CitwdHlfdHJhcF9wZW5kaW5nKGZkKSBpbnQgZmQ7IHsKKyAgICBpbnQg cGVuZGluZzsKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IGlvY3RsKGZkLCBUSU9DVFJBUFNUQVRV UywgKGNoYXIgKikmcGVuZGluZywgc2l6ZW9mKHBlbmRpbmcpKTsKKyAgICBpZiAocmMgPT0gMCkg eworICAgICAgICBkZWJ1ZyhGMTAxLCJwdHlfdHJhcF9wZW5kaW5nKCkiLCIiLHBlbmRpbmcpOwor ICAgICAgICByZXR1cm4ocGVuZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjEx MSwicHR5X3RyYXBfcGVuZGluZygpIiwiaW9jdGwoKSBmYWlsZWQiLHJjKTsKKyAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICB9Cit9CisKKy8qCisgIFRvIGJlIGNhbGxlZCBhZnRlciBzZWxlY3QoKSBo YXMgcmV0dXJuZWQgaW5kaWNhdGluZyB0aGF0IGFuIGV4Y2VwdGlvbiBpcworICB3YWl0aW5nIG9u IGEgcHR5LiAgSXQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2Yg dGhlIHB0eS4KKyAgUmV0dXJucyAtMSBvbiBlcnJvcjsgMCBpZiBwdHkgaXMgc3RpbGwgb3Blbjsg MSBpZiBwdHkgaGFzIGNsb3NlZC4KKyovCitpbnQKK3B0eV90cmFwX2hhbmRsZXIoZmQpIGludCBm ZDsgeworICAgIHN0cnVjdCByZXF1ZXN0X2luZm8gcmk7CisKKyAgICBtZW1zZXQoJnJpLDAsc2l6 ZW9mKHJpKSk7CisgICAgaWYgKGlvY3RsKGZkLFRJT0NSRVFDSEVDSywoY2hhciAqKSZyaSwgc2l6 ZW9mKHJpKSkgIT0gMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJwdHlfdHJhcF9oYW5kbGVyKCki LCJpb2N0bChUSU9DUkVRQ0hFQ0spIGZhaWxlZCIsZXJybm8pOworICAgICAgICByZXR1cm4oLTEp OworICAgIH0KKyAgICBzd2l0Y2ggKHJpLnJlcXVlc3QpIHsKKyAgICAgIGNhc2UgVElPQ09QRU46 CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV90cmFwX2hhbmRsZXIoKSIsImFuIG9wZW4oKSBjYWxs IiwwKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFRJT0NDTE9TRToKKyAgICAgICAgZGVi dWcoRjExMCwicHR5X3RyYXBfaGFuZGxlcigpIiwiYSBjbG9zZSgpIGNhbGwiLDApOworICAgICAg ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGRlYnVnKEYxMTAsInB0eV90cmFwX2hh bmRsZXIoKSIsImFuIGlvY3RsKCkgY2FsbCIsMCk7CisgICAgICAgIHJpLmVycm5vX2Vycm9yID0g RUlOVkFMOworICAgIH0KKyAgICBpZiAoaW9jdGwoZmQsIFRJT0NSRVFTRVQsIChjaGFyICopJnJp LHNpemVvZihyaSkpICE9IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwicHR5X3RyYXBfaGFuZGxl cigpIiwiaW9jdGwoVElPQ1JFUVNFVCkgZmFpbGVkIixlcnJubyk7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorICAgIGlmIChyaS5yZXF1ZXN0ID09IFRJT0NDTE9TRSkKKyAgICAgIHJldHVy bigxKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogSEFWRV9QVFlU UkFQICovCisKK1ZPSUQKK2V4ZWNfY21kKHMpIGNoYXIgKiBzOyB7CisgICAgc3RydWN0IHN0cmlu Z2FycmF5ICogcTsKKyAgICBjaGFyICoqIGFyZ3MgPSBOVUxMOworCisgICAgaWYgKCFzKSByZXR1 cm47CisgICAgaWYgKCEqcykgcmV0dXJuOworCisgICAgcSA9IGNrc3BsaXQoMSwwLHMsTlVMTCwi XFwlW10mJCstLz0qXl9AIXt9Lzw+fC4jfidgOjs/Iiw3LDAsMCk7CisgICAgaWYgKCFxKSByZXR1 cm47CisKKyAgICBhcmdzID0gcS0+YV9oZWFkICsgMTsKKworI2lmZGVmIERFQlVHICAgIAorICAg IHsKKwlpbnQgaSwgbjsKKwluID0gcS0+YV9zaXplOworCWZvciAoaSA9IDA7IGkgPD0gbjsgaSsr KSB7CisJICAgIGlmICghYXJnc1tpXSkgeworCQlkZWJ1ZyhGMTExLCJleGVjX2NtZCBhcmciLCJO VUxMIixpKTsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMTEsImV4ZWNfY21k IGFyZyIsYXJnc1tpXSxpKTsKKwkJaWYgKGkgPT0gbiAmJiBhcmdzW2ldKSB7CisJCSAgICBkZWJ1 ZyhGMTAxLCJleGVjX2NtZCBTVUJTVElUVVRJTkcgTlVMTCIsIiIsaSk7CisJCSAgICBpZiAoc3Ry bGVuKGFyZ3NbaV0pID09IDApCisJCSAgICAgIG1ha2VzdHIoJihhcmdzW2ldKSxOVUxMKTsKKwkJ fQorCisJICAgIH0KKwl9CSAgICAKKyAgICB9CisjZW5kaWYJLyogREVCVUcgKi8KKworICAgIGV4 ZWN2cChhcmdzWzBdLGFyZ3MpOworfQorCisvKiBHZXQgYSBwdHksIHNjYW4gaW5wdXQgbGluZXMu ICovCisvKiBmYyA9IDAgZm9yIGludGVyYWN0aXZlIGFjY2VzczsgZmMgPSAxIGZvciBydW5uaW5n IGV4dGVybmFsIHByb3RvY29scyAqLworCitzdGF0aWMgaW50IHB0eV9mYyA9IC0xOwkJCS8qIEds b2JhbCBjb3B5IG9mIGZjICovCisKK2ludAorZG9fcHR5KGZkLCBjbWQsIGZjKSBpbnQgKiBmZDsg Y2hhciAqIGNtZDsgaW50IGZjOyB7CisgICAgbG9uZyByZXR2YWw7CisgICAgaW50IHN5bmNwaXBl WzJdOworICAgIGludCBpLCB0dHlmZDsKKyNpZmRlZiBIQVZFX1BUWVRSQVAKKyAgICBpbnQgeDsK KyNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KKworICAgIGRlYnVnKEYxMDEsIkNLVVBUWS5DIGRv X3B0eSBmYyIsIiIsZmMpOworCisgICAgdHR5ZmQgPSAqZmQ7CisKKyAgICBwdHlfbWFzdGVyX2Zk ID0gLTI7CisgICAgcHR5X3NsYXZlX2ZkID0gLTI7CisgICAgcHR5X2ZvcmtfcGlkID0gLTI7CisK KyAgICBtc2cgPSAwOwkJCQkvKiBNZXNzYWdlIGNvdW50ZXIgKi8KKyAgICBwdHlfaW5pdCgpOwkJ CQkvKiBGaW5kIGFuIGF2YWlsYWJsZSBwdHkgdG8gdXNlLiAqLworICAgIGVycm5vID0gMDsKKwor ICAgIGlmICgocmV0dmFsID0gcHR5X2dldHB0eSgmdHR5ZmQsIFhsaW5lLCAyMCkpICE9IDApIHsK KwlpZiAobXNnKysgPT0gMCkKKwkgIHBlcnJvcihYbGluZSk7CisgICAgICAgIGRlYnVnKEYxMTEs ImRvX3B0eSgpIiwicHR5X2dldHB0eSgpIGZhaWxzIixyZXR2YWwpOworCSpmZCA9IHR0eWZkOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAqZmQgPSB0dHlmZDsKKyAgICBkZWJ1ZyhG MTExLCJkb19wdHkoKSBYbGluZSIsWGxpbmUsdHR5ZmQpOworCisjaWZkZWYgU0lHVFRPVQorLyoK KyAgSWdub3JpbmcgU0lHVFRPVSBrZWVwcyB0aGUga2VybmVsIGZyb20gYmxvY2tpbmcgdXMuICB3 ZSB0d2VhayB0aGUgdHR5IHdpdGgKKyAgYW4gaW9jdGwoKSAoaW4gdHRpb2N0KCkgaW4gL3N5cy90 dHkuYyBpbiBhIEJTRCBrZXJuZWwpCisqLworICAgICBzaWduYWwoU0lHVFRPVSwgU0lHX0lHTik7 CisjZW5kaWYgLyogU0lHVFRPVSAqLworCisvKiBTdGFydCB1cCB0aGUgY29tbWFuZCBvbiB0aGUg c2xhdmUgc2lkZSBvZiB0aGUgdGVybWluYWwgKi8KKworICAgIGlmIChwaXBlKHN5bmNwaXBlKSA8 IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwiZG9fcHR5KCkiLCJwaXBlKCkgZmFpbHMiLDApOwor CXBlcnJvcigicGlwZSgpIGZhaWxlZCIpOworCW1zZysrOworICAgICAgICBkZWJ1ZyhGMTExLCJk b19wdHkoKSIsInBpcGUgZmFpbHMiLGVycm5vKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9 CisgICAgaWYgKChpID0gZm9yaygpKSA8IDApIHsKKyAgICAgICAgLyogWFhYIC0gbmVlZCB0byBj bGVhbiB1cCB0aGUgYWxsb2NhdGVkIHB0eSAqLworICAgICAgICBwZXJyb3IoImZvcmsoKSBmYWls ZWQiKTsKKwltc2crKzsKKyAgICAgICAgZGVidWcoRjExMSwiZG9fcHR5KCkiLCJmb3JrIGZhaWxz IixlcnJubyk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIGlmIChpKSB7ICAvKiBX YWl0IGZvciBjaGlsZCBiZWZvcmUgd3JpdGluZyB0byBwYXJlbnQgc2lkZSBvZiBwdHkuICovCisg ICAgICAgIGNoYXIgYzsKKyNpZmRlZiBIQVZFX1BUWVRSQVAKKyAgICAgICAgaW50IG9uID0gMTsK KyNlbmRpZiAvKiBIQVZFX1BUWVRSQVAgKi8KKwljbG9zZShzeW5jcGlwZVsxXSk7CisJZXJybm8g PSAwOworICAgICAgICBpZiAocmVhZChzeW5jcGlwZVswXSwgJmMsIDEpID09IDApIHsgLyogU2xh dmUgc2lkZSBkaWVkICovCisJICAgIHBlcnJvcigiUGlwZSByZWFkKCkgZmFpbGVkIik7CisJICAg IG1zZysrOworICAgICAgICAgICAgZGVidWcoRjExMCwiZG9fcHR5KCkiLCJTbGF2ZSBmYWlscyB0 byBpbml0aWFsaXplIiwwKTsKKyAgICAgICAgICAgIGNsb3NlKHN5bmNwaXBlWzBdKTsKKyAgICAg ICAgICAgIHJldHVybigtMSk7CisgICAgICAgIH0KKyAgICAgICAgcHR5X2ZvcmtfcGlkID0gaTsJ CS8qIFNvIHdlIGNhbiBjbGVhbiBpdCB1cCBsYXRlciAqLworCXB0eV9mb3JrX2FjdGl2ZSA9IDE7 CisJZGVidWcoRjEwMSwiZG9fcHR5IHB0eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKKyNp ZmRlZiBIQVZFX1BUWVRSQVAKKyAgICAgICAgLyogSFBVWCBkb2VzIG5vdCBhbGxvdyB0aGUgbWFz dGVyIHRvIHJlYWQgZW5kIG9mIGZpbGUuICAqLworICAgICAgICAvKiBUaGVyZWZvcmUsIHdlIG11 c3QgZGV0ZXJtaW5lIHRoYXQgdGhlIHNsYXZlIGhhcyBiZWVuICovCisgICAgICAgIC8qIGNsb3Nl ZCBieSB0cmFwcGluZyB0aGUgY2FsbCB0byBjbG9zZSgpLiAgICAgICAgICAgICAgKi8KKwllcnJu byA9IDA7CisJeCA9IGlvY3RsKHR0eWZkLCBUSU9DVFJBUCwgKGNoYXIgKikmb24pOworCWRlYnVn KEYxMTEsImRvX3B0eSBpb2N0bChUSU9DVFJBUCkiLGNraXRvYSh4KSxlcnJubyk7CisjZW5kaWYg LyogSEFWRV9QVFlUUkFQICovCisgICAgICAgIGRlYnVnKEYxMTEsImRvX3B0eSgpIiwic3luY2hy b25pemVkIC0gcHR5X2ZvcmtfcGlkIixwdHlfZm9ya19waWQpOworICAgICAgICBjbG9zZShzeW5j cGlwZVswXSk7CisgICAgfSBlbHNlIHsKKwlpbnQgeDsKKwlkZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0 cHR5c2xhdmUgdHR5ZmQgQSIsIiIsdHR5ZmQpOworICAgICAgICBkZWJ1ZyhGMTEwLCJkb19wdHko KSIsIlNsYXZlIHN0YXJ0cyIsMCk7CisJeCA9IGdldHB0eXNsYXZlKCZ0dHlmZCxmYyk7CisJZGVi dWcoRjEwMSwiZG9fcHR5IGdldHB0eXNsYXZlIiwiIix4KTsKKyAgICAgICAgaWYgKHggPT0gMCkg eworCSAgICBkZWJ1ZyhGMTAxLCJkb19wdHkgZ2V0cHR5c2xhdmUgdHR5ZmQgQiIsIiIsdHR5ZmQp OworI2lmZGVmIFdBTlRfVVRNUAorICAgICAgICAgICAgcHR5X3VwZGF0ZV91dG1wKFBUWV9VU0VS X1BST0NFU1MsCisJCQkgICAgZ2V0cGlkKCksCisJCQkgICAgIktFUk1JVCIsCisJCQkgICAgWGxp bmUsCisJCQkgICAgY21kLAorCQkJICAgIFBUWV9UVFlTTE9UX1VTQUJMRQorCQkJICAgICk7Cisj ZW5kaWYgLyogV0FOVF9VVE1QICovCisgICAgICAgICAgICAvKiBOb3RpZnkgb3VyIHBhcmVudCB3 ZSdyZSByZWFkeSB0byBjb250aW51ZS4qLworICAgICAgICAgICAgZGVidWcoRjExMCwiZG9fcHR5 KCkiLCJzbGF2ZSBzeW5jaHJvbml6aW5nIiwwKTsKKyAgICAgICAgICAgIHdyaXRlKHN5bmNwaXBl WzFdLCJ5IiwxKTsKKyAgICAgICAgICAgIGNsb3NlKHN5bmNwaXBlWzBdKTsKKyAgICAgICAgICAg IGNsb3NlKHN5bmNwaXBlWzFdKTsKKworCSAgICBkZWJ1ZyhGMTEwLCJkb19wdHkgY21kIixjbWQs IiIpOworICAgICAgICAgICAgZXhlY19jbWQoY21kKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEs ImRvX3B0eSgpIiwiZXhlY19jbWQoKSByZXR1cm5zIC0gd2h5PyIsZXJybm8pOworICAgICAgICB9 CisJKmZkID0gdHR5ZmQ7CisgICAgICAgIGRlYnVnKEYxMTAsImRvX3B0eSgpIiwiZ2V0cHR5c2xh dmUoKSBmYWlscyAtIGV4aXRpbmciLDApOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICAq ZmQgPSB0dHlmZDsKKyAgICBwdHlfZmMgPSBmYzsKKyAgICByZXR1cm4oZ2V0cGlkKCkpOworfSAv KiBlbmQgb2YgZG9fcHR5KCkgKi8KKworCitWT0lECitlbmRfcHR5KCkgeworICAgIG1zZyA9IDA7 CQkJCS8qIE1lc3NhZ2UgY291bnRlciAqLworICAgIGRlYnVnKEYxMDEsImVuZF9wdHkgcHR5X2Zv cmtfcGlkIiwiIixwdHlfZm9ya19waWQpOworICAgIGlmIChYbGluZVswXSAmJiBwdHlfZm9ya19w aWQgPj0gMCkgeworICAgICAgICBwdHlfY2xlYW51cChYbGluZSxwdHlfZm9ya19waWQsMSk7Cisg ICAgICAgIFhsaW5lWzBdID0gJ1wwJzsKKyAgICAgICAgcHR5X2ZvcmtfcGlkID0gLTE7CisJcHR5 X2ZvcmtfYWN0aXZlID0gMDsKKwlkZWJ1ZyhGMTAxLCJlbmRfcHR5IHB0eV9mb3JrX2FjdGl2ZSIs IiIscHR5X2ZvcmtfYWN0aXZlKTsKKyAgICB9CisgICAgcHR5X2ZjID0gLTE7Cit9CisjZW5kaWYg LyogTkVUUFRZICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9ja3VwdHkuaCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv Y2t1cHR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0YzUwOAotLS0g L2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1 cHR5LmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qIEMgSyBVIFAgVCBZIC4gSCAgLS0gIEluY2x1ZGVz IGFuZCBkZWZpbml0aW9ucyBmb3IgY2t1cHR5LmMgICovCisKKy8qCisgIENvcHlyaWdodCAxOTk1 IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LgorCisgIE1vZGlm aWVkIGZvciB1c2UgaW4gQy1LZXJtaXQgYnk6CisKKyAgSmVmZnJleSBFIEFsdG1hbiA8amFsdG1h bkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgICBTZWN1cmUgRW5kcG9pbnRzIEluYy4sIE5ldyBZ b3JrIENpdHkKKyAgTm92ZW1iZXIgMTk5OQorKi8KKyNpZm5kZWYgX19QVFlfSU5UX0hfXworI2lu Y2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiAjZGVmaW5lIFdBTlRfVVRNUCAqLworLyogV2UgZG9u J3Qgd2FudCBhbGwgdGhlIHV0bXAvd3RtcCBzdHVmZiAqLworCisjaWZkZWYgV0FOVF9VVE1QCisj aWZkZWYgSEFWRV9VVE1QX0gKKyNpbmNsdWRlIDx1dG1wLmg+CisjZW5kaWYgLyogSEFWRV9VVE1Q X0ggKi8KKyNpZmRlZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmIC8q IEhBVkVfVVRNUFhfSCAqLworI2VuZGlmIC8qIFdBTlRfVVRNUCAqLworCisjaWZkZWYgSEFWRV9V TklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8K KyNpZmRlZiBfX1NDT19fCisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorI2VuZGlmIC8qIF9fU0NP X18gKi8KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYg LyogSEFWRV9TVERMSUJfSCAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+CisjaWZuZGVmIFNVTk9TNDEKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRp ZgkvKiBTVU5PUzQxICovCisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNpbmNsdWRlIDxzeXMvdGlt ZS5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxu ZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwd2QuaD4KKworI2lm ZGVmIEhBVkVfU1lTX0xBQkVMX0gKKy8qIG9ubHkgU3VuT1MgND8gKi8KKyNpbmNsdWRlIDxzeXMv bGFiZWwuaD4KKyNpbmNsdWRlIDxzeXMvYXVkaXQuaD4KKyNpbmNsdWRlIDxwd2RhZGouaD4KKyNl bmRpZiAvKiBIQVZFX1NZU19MQUJFTF9IICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lm ZGVmIEhQVVgKKyNpbmNsdWRlIDxzeXMvcHR5aW8uaD4KKyNlbmRpZiAvKiBIUFVYICovCisjaWZk ZWYgc3lzdmltcAorI2luY2x1ZGUgPGNvbXBhdC5oPgorI2VuZGlmIC8qIHN5c3ZpbXAgKi8KKwor I2lmZGVmIENPTU1FTlQKKy8qIEkgZG9uJ3QgdGhpbmsgd2UgYWN0dWFsbHkgdXNlIHRoaXMgZm9y IGFueXRoaW5nICovCisvKiBhbmQgaXQga2lsbHMgU2xhY2t3YXJlIGJ1aWxkcywgd2hlcmUgdGhl cmUgaXMgbm8gc2VsZWN0LmguICovCisjaWZuZGVmIE5PX1NZU19TRUxFQ1RfSAorI2lmZGVmIEhB VkVfU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmIC8qIEhBVkVf U1lTX1NFTEVDVF9IICovCisjZW5kaWYgLyogTk9fU1lTX1NFTEVDVF9IICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworCisjaWZkZWYgSEFWRV9TVFJFQU1TCisjaW5jbHVkZSA8c3lzL3N0cmVhbS5o PgorI2luY2x1ZGUgPHN5cy9zdHJvcHRzLmg+CisjZW5kaWYgLyogSEFWRV9TVFJFQU1TICovCisK KyNpZmRlZiBQT1NJWF9URVJNSU9TCisjaWZuZGVmIHVsdHJpeAorI2luY2x1ZGUgPHRlcm1pb3Mu aD4KKyNlbHNlCisjaW5jbHVkZSA8c2d0dHkuaD4KKyNlbmRpZiAvKiB1bHRyaXggKi8KKyNlbHNl IC8qIFBPU0lYX1RFUk1JT1MgKi8KKyNpbmNsdWRlIDxzZ3R0eS5oPgorI2VuZGlmIC8qIFBPU0lY X1RFUk1JT1MgKi8KKworI2luY2x1ZGUgPG5ldGRiLmg+CisvKiAjaW5jbHVkZSA8c3lzbG9nLmg+ ICovCisjaWZuZGVmIHVsdHJpeAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmIC8qIHVsdHJp eCAqLworLyogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiAqLwkJLyogKG5vdyBkb25lIGluIGNrY2Rl Yi5oKSAqLworCisjaWZkZWYgSEFWRV9TVFJFQU1TCisvKiBrcmxvZ2luIGRvZXNuJ3QgdGVzdCBz eXMvdHR5Li4uICovCisjaWZkZWYgSEFWRV9TWVNfVFRZX0gKKyNpbmNsdWRlIDxzeXMvdHR5Lmg+ CisjZW5kaWYgLyogSEFWRV9TWVNfVFRZX0ggKi8KKworI2lmZGVmIEhBVkVfU1lTX1BUWVZBUl9I CisvKiBTb2xhcmlzIGFjdHVhbGx5IHVzZXMgcGFja2V0IG1vZGUsIHNvIHRoZSByZWFsIG1hY3Jv cyBhcmUgbmVlZGVkIHRvbyAqLworI2luY2x1ZGUgPHN5cy9wdHl2YXIuaD4KKyNlbmRpZiAvKiBI QVZFX1NZU19QVFlWQVJfSCAqLworI2VuZGlmIC8qIEhBVkVfU1RSRUFNUyAqLworCisjaWZkZWYg Q09NTUVOVAorLyogVGhpcyBibG9jayBtb3ZlZCB0byBja2NkZWIuaCAqLworI2lmbmRlZiBOT19P UEVOUFRZCisvKiBGb3IgTmV0QlNELCBzZWUgbWFrZWZpbGUgKi8KKyNpZm5kZWYgSEFWRV9PUEVO UFRZCisjaWZkZWYgX19GcmVlQlNEX18KKyNkZWZpbmUgSEFWRV9PUEVOUFRZCisjZWxzZQorI2lm ZGVmIE1BQ09TWDEwCisjZGVmaW5lIEhBVkVfT1BFTlBUWQorI2VuZGlmCS8qIE1BQ09TWDEwICov CisjZW5kaWYJLyogX19GcmVlQlNEX18gKi8KKyNlbmRpZgkvKiBIQVZFX09QRU5QVFkgKi8KKyNl bmRpZgkvKiBOT19PUEVOUFRZICovCisjZW5kaWYJLyogQ09NTUVOVCAqLworCisjaWZkZWYgSEFW RV9WSEFOR1VQCisjaWZuZGVmIE9QRU5fQ1RUWV9PTkxZX09OQ0UKKy8qCisgIEJyZWFrcyB1bmRl ciBVbHRyaXggYW5kIG90aGVycyB3aGVyZSB5b3UgY2Fubm90IGdldCBjb250cm9sbGluZworICB0 ZXJtaW5hbCB0d2ljZS4KKyovCisjZGVmaW5lIFZIQU5HX2ZpcnN0CisjZGVmaW5lIFZIQU5HX0xB U1QKKyNlbmRpZiAvKiBPUEVOX0NUVFlfT05MWV9PTkNFICovCisjZW5kaWYgLyogSEFWRV9WSEFO R1VQICovCisKKy8qIEludGVybmFsIGZ1bmN0aW9ucyAqLworX1BST1RPVFlQKGxvbmcgcHR5aW50 X3ZvaWRfYXNzb2NpYXRpb24sKHZvaWQpKTsKK19QUk9UT1RZUChsb25nIHB0eWludF9vcGVuX2N0 dHkgLChjaGFyICosIGludCAqKSk7CitfUFJPVE9UWVAoVk9JRCBwdHlpbnRfdmhhbmd1cCwgKHZv aWQpKTsKKworI2lmZGVmIFdBTlRfVVRNUAorX1BST1RPVFlQKGxvbmcgcHR5aW50X3VwZGF0ZV93 dG1wLCAoc3RydWN0IHV0bXAgKiwgY2hhciAqLCBjaGFyICopKTsKKyNlbmRpZiAvKiBXQU5UX1VU TVAgKi8KKworI2RlZmluZSBfX1BUWV9JTlRfSF9fCisjZW5kaWYgLyogX19QVFlfSU5UX0hfXyAq LworCisjaWZuZGVmIF9fTElCUFRZX0hfXworCisjaWZkZWYgV0FOVF9VVE1QCisvKiBDb25zdGFu dHMgZm9yIHB0eV91cGRhdGVfdXRtcCAqLworI2RlZmluZSBQVFlfTE9HSU5fUFJPQ0VTUyAwCisj ZGVmaW5lIFBUWV9VU0VSX1BST0NFU1MgMQorI2RlZmluZSBQVFlfREVBRF9QUk9DRVNTIDIKKyNk ZWZpbmUgUFRZX1RUWVNMT1RfVVNBQkxFICgweDEpCS8qIGZsYWdzIHRvIHVwZGF0ZV91dG1wKi8K KyNkZWZpbmUgUFRZX1VUTVBfVVNFUk5BTUVfVkFMSUQgKDB4MikKKyNlbmRpZiAvKiBXQU5UX1VU TVAgKi8KKworX1BST1RPVFlQKGxvbmcgcHR5X2luaXQsKHZvaWQpKTsKK19QUk9UT1RZUChsb25n IHB0eV9nZXRwdHksICggaW50ICosIGNoYXIgKiwgaW50KSk7CitfUFJPVE9UWVAobG9uZyBwdHlf b3Blbl9zbGF2ZSwgKGNoYXIgKiwgaW50ICosIGludCkpOworX1BST1RPVFlQKGxvbmcgcHR5X29w ZW5fY3R0eSwgKGNoYXIgKiwgaW50ICosIGludCkpOworX1BST1RPVFlQKGxvbmcgcHR5X2luaXRp YWxpemVfc2xhdmUsIChpbnQpKTsKKyNpZmRlZiBXQU5UX1VUTVAKK19QUk9UT1RZUChsb25nIHB0 eV91cGRhdGVfdXRtcCwgKGludCwgaW50LCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBpbnQpKTsK K19QUk9UT1RZUChsb25nIHB0eV9sb2d3dG1wLCAoY2hhciAqLCBjaGFyICosIGNoYXIgKikpOwor I2VuZGlmIC8qIFdBTlRfVVRNUCAqLworX1BST1RPVFlQKGxvbmcgcHR5X2NsZWFudXAsIChjaGFy ICosIGludCwgaW50KSk7CisKKyNkZWZpbmUgUFRZX0dFVFBUWV9TVFJFQU1TICAgICAgICAgICAg ICAgKDQ0ODA2OTEyTCkKKyNkZWZpbmUgUFRZX0dFVFBUWV9GU1RBVCAgICAgICAgICAgICAgICAg KDQ0ODA2OTEzTCkKKyNkZWZpbmUgUFRZX0dFVFBUWV9OT1BUWSAgICAgICAgICAgICAgICAgKDQ0 ODA2OTE0TCkKKyNkZWZpbmUgUFRZX0dFVFBUWV9TTEFWRV9UT09MT05HICAgICAgICAgKDQ0ODA2 OTE1TCkKKyNkZWZpbmUgUFRZX09QRU5fU0xBVkVfT1BFTkZBSUwgICAgICAgICAgKDQ0ODA2OTE2 TCkKKyNkZWZpbmUgUFRZX09QRU5fU0xBVkVfQ0hNT0RGQUlMICAgICAgICAgKDQ0ODA2OTE3TCkK KyNkZWZpbmUgUFRZX09QRU5fU0xBVkVfTk9DVFRZICAgICAgICAgICAgKDQ0ODA2OTE4TCkKKyNk ZWZpbmUgUFRZX09QRU5fU0xBVkVfQ0hPV05GQUlMICAgICAgICAgKDQ0ODA2OTE5TCkKKyNkZWZp bmUgUFRZX09QRU5fU0xBVkVfTElORV9QVVNIRkFJTCAgICAgKDQ0ODA2OTIwTCkKKyNkZWZpbmUg UFRZX09QRU5fU0xBVkVfUFVTSF9GQUlMICAgICAgICAgKDQ0ODA2OTIxTCkKKyNkZWZpbmUgUFRZ X09QRU5fU0xBVkVfUkVWT0tFRkFJTCAgICAgICAgKDQ0ODA2OTIyTCkKKyNpZmRlZiBXQU5UX1VU TVAKKyNkZWZpbmUgUFRZX1VQREFURV9VVE1QX1BST0NUWVBFX0lOVkFMSUQgKDQ0ODA2OTIzTCkK KyNlbmRpZiAvKiBXQU5UX1VUTVAgKi8KKyNkZWZpbmUgUFRZX09QRU5fU0xBVkVfVE9PU0hPUlQg ICAgICAgICAgKDQ0ODA2OTI0TCkKKyNkZWZpbmUgRVJST1JfVEFCTEVfQkFTRV9wdHkgICAgICAg ICAgICAgKDQ0ODA2OTEyTCkKKworZXh0ZXJuIHN0cnVjdCBlcnJvcl90YWJsZSBldF9wdHlfZXJy b3JfdGFibGU7CisKKyNkZWZpbmUgX19MSUJQVFlfSF9fCisjZW5kaWYgLyogX19MSUJQVFlfSF9f ICovCisKCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAy L2NrdXNjci5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzY3Iu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTJkOWI3Ci0tLSAvZGV2L251 bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzY3IuYwpA QCAtMCwwICsxLDY4OCBAQAorI2luY2x1ZGUgImNrY3N5bS5oIgorCisjaWZuZGVmIE5PSUNQCisj aWZuZGVmIE5PU0NSSVBUCitjaGFyICpsb2dpbnYgPSAiU2NyaXB0IENvbW1hbmQsIDkuMC4wMzIs IDE2IE9jdCAyMDA5IjsKKworLyogIEMgSyBVIFMgQyBSICAtLSAgZXhwZWN0LXNlbmQgc2NyaXB0 IGltcGxlbWVudGF0aW9uICAqLworCisvKgorICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisg ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorCisgIE9yaWdpbmFsICh2ZXJzaW9uIDEs IDE5ODUpIGF1dGhvcjogSGVybSBGaXNjaGVyLCBFbmNpbm8sIENBLgorICBDb250cmlidXRlZCB0 byBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIDE5ODUgZm9yIGluY2x1c2lvbiBpbiBDLUtlcm1pdCA0 LjAuCisgIE1haW50YWluZWQgc2luY2UgMTk4NSBieSBGcmFuayBkYSBDcnV6LCBDb2x1bWJpYSBV bml2ZXJzaXR5LAorICBmZGNAY29sdW1iaWEuZWR1LgorCisgIFRoZSBtb2R1bGUgdGFrZXMgYSBV VUNQLXN0eWxlIHNjcmlwdCBvZiB0aGUgImV4cGVjdCBzZW5kIFtleHBlY3Qgc2VuZF0gLi4uIgor ICBmb3JtYXQuICBJdCBpcyBpbnRlbmRlZCB0byBvcGVyYXRlIHNpbWlsYXJseSB0byB0aGUgd2F5 IHRoZSBjb21tb24KKyAgVVVDUCBMLnN5cyBsb2dpbiBlbnRyaWVzIHdvcmsuICBDb25kaXRpb25h bCByZXNwb25zZXMgYXJlIHN1cHBvcnRlZDoKKyAgZXhwZWN0Wy1zZW5kLWV4cGVjdFsuLi5dXSwg YXMgd2l0aCBVVUNQLiAgVGhlIHNlbmQga2V5d29yZCBFT1Qgc2VuZHMgYQorICBDb250cm9sLWQs IGFuZCB0aGUga2V5d29yZCBCUkVBSyBzZW5kcyBhIGJyZWFrLiAgTGV0dGVycyBwcmVmaXhlZAor ICBieSAnficgYXJlICd+YicgYmFja3NwYWNlLCAnfnMnIHNwYWNlLCAnfm4nIGxpbmVmZWVkLCAn fnInIHJldHVybiwgJ354JyB4b24sCisgICd+dCcgdGFiLCAnfnEnID8gKG5vdCBhbGxvd2VkIG9u IGtlcm1pdCBjb21tYW5kIGxpbmVzKSwgJ34nIH4sICd+JycsCisgICd+IicsICd+YycgZG9uJ3Qg YXBwZW5kIHJldHVybiwgJ35vW29bb11dJyBvY3RhbCBjaGFyYWN0ZXIuICBBcyB3aXRoCisgIHNv bWUgdXVjcCBzeXN0ZW1zLCBzZW50IHN0cmluZ3MgYXJlIGZvbGxvd2VkIGJ5IH5yIChub3Qgfm4p IHVubGVzcyB0aGV5CisgIGVuZCB3aXRoIH5jLiBOdWxsIGV4cGVjdCBzdHJpbmdzIChlLmcuLCB+ MCBvciAtLSkgY2F1c2UgYSBzaG9ydAorICBkZWxheSwgYW5kIGFyZSB1c2VmdWwgZm9yIHNlbmRp bmcgc2VxdWVuY2VzIHJlcXVpcmluZyBzbGlnaHQgcGF1c2VzLgorCisgIFRoaXMgbW9kdWxlIGNh bGxzIGV4dGVybmFsbHkgZGVmaW5lZCBzeXN0ZW0tZGVwZW5kZW50IGZ1bmN0aW9ucyBmb3IKKyAg Y29tbXVuaWNhdGlvbnMgaS9vLCBhcyBkZWZpbmVkIGluIGNrY3BsbS50eHQsIHRoZSBDLUtlcm1p dCBQcm9ncmFtIExvZ2ljCisgIE1hbnVhbCwgYW5kIHRodXMgc2hvdWxkIGJlIHBvcnRhYmxlIHRv IGFsbCBzeXN0ZW1zIHRoYXQgaW1wbGVtZW50IHRob3NlCisgIGZ1bmN0aW9ucywgYW5kIHdoZXJl IGFsYXJtKCkgYW5kIHNpZ25hbCgpIHdvcmsgYXMgdGhleSBkbyBpbiBVTklYLgorKi8KKyNpbmNs dWRlICJja2NkZWIuaCIKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZmRlZiBOVAorI2luY2x1ZGUg PHNldGptcGV4Lmg+CisjZWxzZSAvKiBOVCAqLworI2luY2x1ZGUgPHNldGptcC5oPgorI2VuZGlm IC8qIE5UICovCisjaW5jbHVkZSAiY2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5j bHVkZSAiY2t1dXNyLmgiCisjaW5jbHVkZSAiY2tjbmV0LmgiCisjaW5jbHVkZSAiY2tjc2lnLmgi CisKK19QUk9UT1RZUCggVk9JRCBmbHVzaGksICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMg Vk9JRCBteWZsc2gsICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IHNlcXVlbmMsICh2 b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCByZWN2c2VxLCAodm9pZCkgKTsKK19QUk9U T1RZUCggc3RhdGljIGludCBvdXRzZXEsICh2b2lkKSApOworCisjaWZkZWYgTUFDCisjZGVmaW5l IHNpZ25hbCBtc2lnbmFsCisjZGVmaW5lIFNJR1RZUCBsb25nCisjZGVmaW5lIGFsYXJtIG1hbGFy bQorI2RlZmluZSBTSUdfSUdOIDAKKyNkZWZpbmUgU0lHQUxSTSAxCisjZGVmaW5lIFNJR0lOVCAg MgorU0lHVFlQICgqbXNpZ25hbChpbnQgdHlwZSwgU0lHVFlQICgqZnVuYykoaW50KSkpKGludCk7 CisjZW5kaWYgLyogTUFDICovCisKKyNpZmRlZiBBTUlHQQorI2RlZmluZSBzaWduYWwgYXNpZ25h bAorI2RlZmluZSBhbGFybSBhYWxhcm0KKyNkZWZpbmUgU0lHQUxSTSAoX05VTVNJRysxKQorI2Rl ZmluZSBTSUdUWVAgdm9pZAorU0lHVFlQICgqYXNpZ25hbChpbnQgdHlwZSwgU0lHVFlQICgqZnVu YykoaW50KSkpKGludCk7Cit1bnNpZ25lZCBhYWxhcm0odW5zaWduZWQpOworI2VuZGlmIC8qIEFN SUdBICovCisKKyNpZmRlZiBTVFJBVFVTCisvKiBWT1MgZG9lc24ndCBoYXZlIGFsYXJtKCksIGJ1 dCBpdCBkb2VzIGhhdmUgc29tZSB0aGluZ3Mgd2UgY2FuIHdvcmsgd2l0aC4gKi8KKy8qIGhvd2V2 ZXIsIHdlIGhhdmUgdG8gY2F0Y2ggYWxsIHRoZSBzaWduYWxzIGluIG9uZSBwbGFjZSB0byBkbyB0 aGlzLCBzbyAgICAqLworLyogd2UgaW50ZXJjZXB0IHRoZSBzaWduYWwoKSByb3V0aW5lIGFuZCBj YWxsIGl0IGZyb20gb3VyIG93biByZXBsYWNlbWVudC4gICovCisjZGVmaW5lIHNpZ25hbCB2c2ln bmFsCisjZGVmaW5lIGFsYXJtIHZhbGFybQorU0lHVFlQICgqdnNpZ25hbChpbnQgdHlwZSwgU0lH VFlQICgqZnVuYykoaW50KSkpKGludCk7CitpbnQgdmFsYXJtKGludCBpbnRlcnZhbCk7CisjZW5k aWYgLyogU1RSQVRVUyAqLworCitleHRlcm4gaW50IHNlc3NmdDsKK2V4dGVybiBpbnQgbG9jYWws IGZsb3csIHNlc2xvZywgbWRtdHlwLCBtc2dmbGcsIGR1cGxleCwgYmFja2dyZCwgc2VjaG8sIHF1 aWV0OworZXh0ZXJuIGludCBuZXR3b3JrLCBuZXR0eXBlLCB0dG5wcm90bzsKK2V4dGVybiBsb25n IHNwZWVkOworZXh0ZXJuIGNoYXIgdHRuYW1lW107CisKKyNpZmRlZiBOVFNJRworZXh0ZXJuIGlu dCBUbHNJbmRleDsKKyNlbmRpZiAvKiBOVFNJRyAqLworI2lmZGVmIElLU0QKK2V4dGVybiBpbnQg aW5zZXJ2ZXI7CisjZW5kaWYgLyogSUtTRCAqLworCitzdGF0aWMgaW50IGlzX3RuID0gMDsJCQkv KiBEbyBUZWxuZXQgbmVnb3RpYXRpb25zICovCisKKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBEQ01E QlVGCitleHRlcm4gc3RydWN0IGNtZHB0ciAqY21kc3RrOworI2Vsc2UKK2V4dGVybiBzdHJ1Y3Qg Y21kcHRyIGNtZHN0a1tdOworI2VuZGlmIC8qIERDTURCVUYgKi8KK2V4dGVybiBpbnQgdGVjaG8s IGNtZGx2bDsKK2V4dGVybiBpbnQgbWVjaG87CisjZW5kaWYgLyogTk9TUEwgKi8KKworc3RhdGlj IGludCBzY3JfZWNobzsJCQkvKiBXaGV0aGVyIHRvIGVjaG8gc2NyaXB0IGNvbW1hbmRzICovCisK K3N0YXRpYyBpbnQgZXhwX2Fscm0gPSAxNTsJCS8qIFRpbWUgdG8gd2FpdCBmb3IgZXhwZWN0IHN0 cmluZyAqLworI2RlZmluZSBTTkRfQUxSTSAxNQkJCS8qIFRpbWUgdG8gYWxsb3cgZm9yIHNlbmRp bmcgc3RyaW5nICovCisjZGVmaW5lIE5VTExfRVhQIDIJCQkvKiBUaW1lIHRvIHBhdXNlIG9uIG51 bGwgZXhwZWN0IHN0cmcqLworI2RlZmluZSBERUxfTVNFQyAzMDAJCQkvKiBNaWxsaXNlY29uZHMg dG8gcGF1c2Ugb24gfmQgKi8KKworI2RlZmluZSBTQlVGTCA1MTIKK3N0YXRpYyBjaGFyIHNlcV9i dWZbU0JVRkwrMl0sICpzOwkvKiBleHBlY3Qtc2VuZCBzZXF1ZW5jZSBidWZmZXIgKi8KK3N0YXRp YyBpbnQgZ290X2l0LCBub19jcjsKKworLyogIENvbm5lY3Qgc3RhdGUgcGFyZW50L2NoaWxkIGNv bW11bmljYXRpb24gc2lnbmFsIGhhbmRsZXJzICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYg Q0tfUE9TSVhfU0lHCitzdGF0aWMgc2lnam1wX2J1ZiBhbHJtcm5nOworI2Vsc2UKK3N0YXRpYyBq bXBfYnVmIGFscm1ybmc7CisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisjZWxzZQorc3RhdGlj IGNram1wYnVmIGFscm1ybmc7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCitzdGF0aWMgU0lHVFlQ CisjaWZkZWYgQ0tfQU5TSUMKK3NjcnRpbWUoaW50IGZvbykJCQkvKiBtb2RlbSByZWFkIGZhaWx1 cmUgaGFuZGxlciwgKi8KKyNlbHNlCitzY3J0aW1lKGZvbykgaW50IGZvbzsJCQkvKiBBbGFybSBo YW5kbGVyICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNjcnRpbWUgKi8geworCisjaWZk ZWYgQkVCT1gKKyNpZmRlZiBCRV9EUl83CisgICAgYWxhcm1fZXhwaXJlZCgpOworI2VuZGlmIC8q IEJFX0RSXzcgKi8KKyNlbmRpZiAvKiBCRUJPWCAqLworI2lmZGVmIE5UU0lHCisgICAgaWYgKGZv byA9PSBTSUdBTFJNKQorICAgICAgUG9zdEFsYXJtU2lnU2VtKCk7CisgICAgZWxzZQorICAgICAg UG9zdEN0cmxDU2VtKCk7CisjZWxzZSAvKiBOVFNJRyAqLworI2lmZGVmIE5UCisgICAgY2tsb25n am1wKGNramFkZHIoYWxybXJuZyksMSk7CisjZWxzZSAvKiBOVCAqLworICAgIGNrbG9uZ2ptcChh bHJtcm5nLDEpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICBTSUdS RVRVUk47Cit9CisKKy8qCisgU2VxdWVuY2UgaW50ZXJwcmV0ZXIgLS0gcGljayB1cCBuZXh0IHNl cXVlbmNlIGZyb20gY29tbWFuZCBzdHJpbmcsCisgZGVjb2RlIGVzY2FwZXMgYW5kIHBsYWNlIGlu dG8gc2VxX2J1Zi4KKworIElmIHN0cmluZyBjb250YWlucyBhIH5kIChkZWxheSkgdGhlbiBzZXF1 ZW5jKCkgcmV0dXJucyBhIDEgZXhwZWN0aW5nCisgdG8gYmUgY2FsbGVkIGFnYWluIGFmdGVyIHRo ZSB+ZCBleGVjdXRlcy4KKyovCitzdGF0aWMgaW50CitzZXF1ZW5jKCkgeworICAgIGludCBpOwor ICAgIGNoYXIgYywgb2N0X2NoYXI7CisKKyAgICBub19jciA9IDA7CQkJCS8qIG91dHB1dCBuZWVk cyBjciBhcHBlbmRlZCAqLworICAgIGZvciAoaSA9IDA7IGkgPCBTQlVGTDsgKSB7CisJaWYgKCpz ID09ICdcMCcgfHwgKnMgPT0gJy0nIHx8IGlzc3BhY2UoKnMpICkgeyAvKiBkb25lICovCisJICAg IHNlcV9idWZbaV0gPSAnXDAnOworCSAgICByZXR1cm4oMCkgOworCX0KKwlpZiAoKnMgPT0gJ34n KSB7CQkvKiBlc2NhcGUgY2hhcmFjdGVyICovCisJICAgIHMrKzsKKwkgICAgc3dpdGNoIChjID0g KnMpIHsKKwkJY2FzZSAnbic6ICBzZXFfYnVmW2krK10gPSBMRjsgYnJlYWs7CisJCWNhc2UgJ3In OiAgc2VxX2J1ZltpKytdID0gQ1I7IGJyZWFrOworCQljYXNlICd0JzogIHNlcV9idWZbaSsrXSA9 ICdcdCc7IGJyZWFrOworCQljYXNlICdiJzogIHNlcV9idWZbaSsrXSA9ICdcYic7IGJyZWFrOwor CQljYXNlICdxJzogIHNlcV9idWZbaSsrXSA9ICc/JzsgIGJyZWFrOworI2lmZGVmIENPTU1FTlQK Ky8qIFRoZSBkZWZhdWx0IGNhc2Ugc2hvdWxkIGNhdGNoIHRoZXNlIG5vdy4uLiAqLworCQljYXNl ICd+JzogIHNlcV9idWZbaSsrXSA9ICd+JzsgIGJyZWFrOworCQljYXNlICctJzogIHNlcV9idWZb aSsrXSA9ICctJzsgIGJyZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJY2FzZSAnXCcnOiBz ZXFfYnVmW2krK10gPSAnXCcnOyBicmVhazsKKwkJY2FzZSAnXCInOiBzZXFfYnVmW2krK10gPSAn XCInOyBicmVhazsKKwkJY2FzZSAncyc6ICBzZXFfYnVmW2krK10gPSAnICc7ICBicmVhazsKKwkJ Y2FzZSAneCc6ICBzZXFfYnVmW2krK10gPSAnXDAyMSc7IGJyZWFrOworCQljYXNlICdjJzogIG5v X2NyID0gMTsgYnJlYWs7CisJCWNhc2UgJ2QnOiB7CQkJLyogc2VuZCB3aGF0IHdlIGhhdmUgJiB0 aGVuICovCisJCSAgICBzZXFfYnVmW2ldID0gJ1wwJzsJCS8qIGV4cGVjdCB0byBzZW5kIHJlc3Qg YWZ0ZXIgKi8KKwkJICAgIG5vX2NyID0gMTsJCQkvKiBzZW5kZXIgZGVsYXlzIGEgbGl0dGxlICov CisJCSAgICBzKys7CisJCSAgICByZXR1cm4oMSk7CisJCX0KKwkJY2FzZSAndyc6IHsJCQkvKiB3 YWl0IGNvdW50ICovCisJCSAgICBleHBfYWxybSA9IDE1OwkJLyogZGVmYXVsdCB0byAxNSBzZWMg Ki8KKwkJICAgIGlmIChpc2RpZ2l0KCoocysxKSkpIHsKKwkJCXMrKzsKKwkJCWV4cF9hbHJtID0g KnMgJiAxNTsKKwkJCWlmIChpc2RpZ2l0KCoocysxKSkgKSB7CisJCQkgICAgcysrOworCQkJICAg IGV4cF9hbHJtID0gZXhwX2Fscm0gKiAxMCArICgqcyAmIDE1KTsKKwkJCX0KKwkJICAgIH0KKwkJ ICAgIGJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCSAgICBpZiAoIGlzZGlnaXQoYykgKSB7CSAg ICAJLyogb2N0YWwgY2hhcmFjdGVyICovCisJCSAgICAJb2N0X2NoYXIgPSAoY2hhcikgKGMgJiA3 KTsgLyogbW9zdCBzaWduaWZpY2FudCBkaWdpdCAqLworCQkJaWYgKGlzZGlnaXQoICoocysxKSAp ICkgeworCQkJICAgIHMrKzsKKwkJCSAgICBvY3RfY2hhciA9IChjaGFyKSAoKG9jdF9jaGFyPDwz KSB8ICggKnMgJiA3ICkpOworCQkJICAgIGlmIChpc2RpZ2l0KCAqKHMrMSkgKSApIHsKKwkJCQlz Kys7CisJCQkgICAgCW9jdF9jaGFyID0gKGNoYXIpICgob2N0X2NoYXI8PDMpIHwgKCAqcyAmIDcg KSk7CisJCQkgICAgfQorCQkJfQorCQkJc2VxX2J1ZltpKytdID0gb2N0X2NoYXI7CisJCQlicmVh azsKKwkJICAgIH0gZWxzZSBzZXFfYnVmW2krK10gPSAqczsgLyogVHJlYXQgfiBhcyBxdW90ZSAq LworCSAgICAgIH0KKwl9IGVsc2Ugc2VxX2J1ZltpKytdID0gKnM7CS8qIFBsYWluIG9sZCBjaGFy YWN0ZXIgKi8KKwlzKys7CisgICAgfQorICAgIHNlcV9idWZbaV0gPSAnXDAnOworICAgIHJldHVy bigwKTsJCQkJLyogZW5kIG9mIHNwYWNlLCByZXR1cm4gYW55d2F5ICovCit9CisKKworLyogT3V0 cHV0IGJ1ZmZlcmluZyBmb3IgInJlY3ZzZXEiIGFuZCAiZmx1c2hpIiAqLworCisjZGVmaW5lCU1B WEJVUlNUIDI1NgkJLyogbWF4aW11bSBzaXplIG9mIGlucHV0IGJ1cnN0ICovCitzdGF0aWMgQ0hB UiBjb25idWZbTUFYQlVSU1RdOwkvKiBidWZmZXIgdG8gaG9sZCBvdXRwdXQgZm9yIGNvbnNvbGUg Ki8KK3N0YXRpYyBpbnQgY29uY250ID0gMDsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJ1ZmZl cmVkICovCitzdGF0aWMgQ0hBUiBzZXNidWZbTUFYQlVSU1RdOwkvKiBidWZmZXIgdG8gaG9sZCBv dXRwdXQgZm9yIHNlc3Npb24gbG9nICovCitzdGF0aWMgaW50IHNlc2NudCA9IDA7CQkvKiBudW1i ZXIgb2YgY2hhcmFjdGVycyBidWZmZXJlZCAqLworCitzdGF0aWMgVk9JRAorbXlmbHNoKCkgewor ICAgIGlmIChjb25jbnQgPiAwKSB7CisJY29ueG8oY29uY250LCAoY2hhciAqKSBjb25idWYpOwor CWNvbmNudCA9IDA7CisgICAgfQorICAgIGlmIChzZXNjbnQgPiAwKSB7CisgICAgICAgIGxvZ3N0 cigoY2hhciAqKSBzZXNidWYsIHNlc2NudCk7CisJc2VzY250ID0gMDsKKyAgICB9Cit9CisKKy8q IHRoZXNlIHZhcmlhYmxlcyBhcmUgdXNlZCB0byBwYXNzIGRhdGEgYmV0d2VlbiB0aGUgcmVjdnNl cSgpICovCisvKiBhbmQgdGhlIGRvcnNlcSgpLiAgVGhleSBhcmUgbmVjZXNzYXJ5IGJlY2F1c2Ug aW4gc29tZSB2ZXJzaW9ucyAqLworLyogZG9yc2VxKCkgaXMgZXhlY3V0ZWQgaW4gYSBzZXBhcmF0 ZSB0aHJlYWQgYW5kIGRhdGEgY2Fubm90IGJlICovCisvKiBwYXNzZWQgYnkgcGFyYW1ldGVyLiAq LworCitzdGF0aWMgY2hhciAqcnNlcWUsICogcnNlcWdvdCwgKiByc2VxdHJhY2UgOworc3RhdGlj IGludCByc2VxbDsKKworc3RhdGljIFNJR1RZUAorI2lmZGVmIENLX0FOU0lDCitkb3JzZXEodm9p ZCAqIHRocmVhZGluZm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZG9yc2VxKHRocmVhZGluZm8p IFZPSUQgKiB0aHJlYWRpbmZvOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb3JzZXEgKi8g eworICAgIGludCBpLCB4OworICAgIGludCBidXJzdCA9IDA7CQkJLyogY2hhcnMgcmVtYWluaW5n IGluIGlucHV0IGJ1cnN0ICovCisKKyNpZmRlZiBOVFNJRworICAgIHNldGludCgpOworICAgIGlm ICh0aHJlYWRpbmZvKSB7CQkJLyogVGhyZWFkIGxvY2FsIHN0b3JhZ2UuLi4gKi8KKwlUbHNTZXRW YWx1ZShUbHNJbmRleCx0aHJlYWRpbmZvKTsKKyAgICB9CisjZW5kaWYgLyogTlRTSUcgKi8KKyNp ZmRlZiBDS19MT0dJTgorI2lmZGVmIE5UCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikK KyAgICAgIHNldG50Y3JlZHMoKTsKKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogTlQgKi8K KyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisgICAgd2hpbGUgKCFnb3RfaXQpIHsKKwlmb3IgKGkg PSAwOyBpIDwgcnNlcWwtMTsgaSsrKSByc2VxZ290W2ldID0gcnNlcWdvdFtpKzFdOworCXggPSB0 dGluYygwKTsJCQkvKiBSZWFkIGEgY2hhcmFjdGVyICovCisJZGVidWcoRjEwMSwicmVjdnNlcSIs IiIseCk7CisJaWYgKHggPCAwKSB7CisjaWZkZWYgTlRTSUcKKwkgICAgY2tUaHJlYWRFbmQodGhy ZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKwkgICAgU0lHUkVUVVJOOwkJCS8qIENoZWNr IGZvciBlcnJvciAqLworCX0KKyNpZmRlZiBORVRDT05OCisjaWZkZWYgVE5DT0RFCisvKiBDaGVj ayBmb3IgdGVsbmV0IHByb3RvY29sIG5lZ290aWF0aW9uICovCisJaWYgKCgoeCAmIDB4ZmYpID09 IElBQykgJiYgaXNfdG4pIHsgLyogVGVsbmV0IG5lZ290aWF0aW9uICovCisJICAgIG15ZmxzaCgp OworCSAgICBidXJzdCA9IDA7CisJICAgIHN3aXRjaCAodG5fZG9vcCgoQ0hBUikoeCAmIDB4ZmYp LGR1cGxleCx0dGluYykpIHsKKwkgICAgICBjYXNlIDI6IGR1cGxleCA9IDA7IGNvbnRpbnVlOwor CSAgICAgIGNhc2UgMTogZHVwbGV4ID0gMTsKKwkgICAgICBkZWZhdWx0OiBjb250aW51ZTsKKwkg ICAgfQorCX0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisJcnNl cWdvdFtyc2VxbC0xXSA9IChjaGFyKSAoeCAmIDB4N2YpOyAvKiBHb3QgYSBjaGFyYWN0ZXIgKi8K KwlidXJzdC0tOwkJCS8qIE9uZSBsZXNzIHdhaXRpbmcgKi8KKwlpZiAoc2NyX2VjaG8pIGNvbmJ1 Zltjb25jbnQrK10gPSByc2VxZ290W3JzZXFsLTFdOyAvKiBCdWZmZXIgaXQgKi8KKwlpZiAoc2Vz bG9nKQkJCS8qIExvZyBpdCBpbiBzZXNzaW9uIGxvZyAqLworI2lmZGVmIFVOSVgKKwkgIGlmIChz ZXNzZnQgIT0gMCB8fCByc2VxZ290W3JzZXFsLTFdICE9ICdccicpCisjZWxzZQorI2lmZGVmIE9T SworCSAgICBpZiAoc2Vzc2Z0ICE9IDAgfHwgcnNlcWdvdFtyc2VxbC0xXSAhPSAnXDAxMicpCisj ZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogVU5JWCAqLworCSAgICAgIGlmIChyc2VxZ290W3Jz ZXFsLTFdKQkvKiBGaWx0ZXIgb3V0IE5VTHMgKi8KKwkJc2VzYnVmW3Nlc2NudCsrXSA9IHJzZXFn b3RbcnNlcWwtMV07CisJaWYgKChpbnQpc3RybGVuKHJzZXF0cmFjZSkgPCBTQlVGTC0yICkKKwkg IHN0cmNhdChyc2VxdHJhY2UsZGJjaHIocnNlcWdvdFtyc2VxbC0xXSkpOworCWdvdF9pdCA9ICgh c3RybmNtcChyc2VxZSwgcnNlcWdvdCwgcnNlcWwpKTsKKwlpZiAoYnVyc3QgPD0gMCkgewkJLyog Rmx1c2ggYnVmZmVyZWQgb3V0cHV0ICovCisJICAgIG15ZmxzaCgpOworCSAgICBpZiAoKGJ1cnN0 ID0gdHRjaGsoKSkgPCAwKSB7IC8qIEdldCBzaXplIG9mIG5leHQgaW5wdXQgYnVyc3QgKi8KKyNp ZmRlZiBOVFNJRworCQlja1RocmVhZEVuZCh0aHJlYWRpbmZvKTsKKyNlbmRpZiAvKiBOVFNJRyAq LworCQlTSUdSRVRVUk47CisJICAgIH0KKwkgICAgLyogcHJldmVudCBvdmVyZmxvdyBvZiAiY29u YnVmIiBhbmQgInNlc2J1ZiIgKi8KKwkgICAgaWYgKGJ1cnN0ID4gTUFYQlVSU1QpCisJICAgICAg YnVyc3QgPSBNQVhCVVJTVDsKKwl9CisgICAgfQorI2lmZGVmIE5UU0lHCisgICAgY2tUaHJlYWRF bmQodGhyZWFkaW5mbyk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyAgICBTSUdSRVRVUk47Cit9CisK K3N0YXRpYyBTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworZmFpbHJzZXEodm9pZCAqIHRocmVhZGlu Zm8pCisjZWxzZSAvKiBDS19BTlNJQyAqLworZmFpbHJzZXEodGhyZWFkaW5mbykgVk9JRCAqIHRo cmVhZGluZm87CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZhaWxyc2VxICovIHsKKyAgICAg Z290X2l0ID0gMDsJCQkvKiBUaW1lZCBvdXQgaGVyZSAqLworICAgICBTSUdSRVRVUk47Cit9CisK Ky8qCisgIFJlY2VpdmUgc2VxdWVuY2UgLS0gc2VlIGlmIGV4cGVjdGVkIHJlc3BvbnNlIGNvbWVz LAorICByZXR1cm4gc3VjY2VzcyAob3IgZmFpbHVyZSkgaW4gZ290X2l0LgorKi8KK3N0YXRpYyBW T0lECityZWN2c2VxKCkgeworICAgIGNoYXIgKmUsIGdvdFs3XSwgdHJhY2VbU0JVRkxdOworICAg IGludCBpLCBsOworCisgICAgc2VxdWVuYygpOworICAgIGwgPSAoaW50KXN0cmxlbihlPXNlcV9i dWYpOwkJLyogbm8gbW9yZSB0aGFuIDcgY2hhcnMgYWxsb3dlZCAqLworICAgIGlmIChsID4gNykg eworCWUgKz0gbC03OworCWwgPSA3OworICAgIH0KKyAgICB0bG9nKEYxMTEsImV4cGVjdGluZyBz ZXF1ZW5jZSIsZSwobG9uZykgbCk7CisgICAgaWYgKGwgPT0gMCkgewkJCS8qIG51bGwgc2VxdWVu Y2UsIGRlbGF5IGEgbGl0dGxlICovCisJc2xlZXAgKE5VTExfRVhQKTsKKwlnb3RfaXQgPSAxOwor CXRsb2coRjEwMCwiZ290IGl0IChudWxsIHNlcXVlbmNlKSIsIiIsMEwpOworCXJldHVybjsKKyAg ICB9CisgICAgKnRyYWNlID0gJ1wwJzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSBnb3Rb aV09J1wwJzsKKworICAgIHJzZXF0cmFjZSA9IHRyYWNlOworICAgIHJzZXFlID0gZTsKKyAgICBy c2VxZ290ID0gZ290OworICAgIHJzZXFsID0gbDsKKworICAgIGFscm1fZXhlY3V0ZShja2phZGRy KGFscm1ybmcpLCBleHBfYWxybSwgc2NydGltZSwgZG9yc2VxLCBmYWlscnNlcSk7CisKKyAgICB0 bG9nKEYxMTAsInJlY2VpdmVkIHNlcXVlbmNlOiAiLHRyYWNlLDBMKTsKKyAgICB0bG9nKEYxMDEs InJldHVybmluZyB3aXRoIGdvdC1pdCBjb2RlIiwiIiwobG9uZykgZ290X2l0KTsKKyAgICBteWZs c2goKTsJCQkJLyogRmx1c2ggYnVmZmVyZWQgb3V0cHV0ICovCisgICAgcmV0dXJuOworfQorCisv KgorIE91dHB1dCBBIFNlcXVlbmNlIHN0YXJ0aW5nIGF0IHBvaW50ZXIgcywKKyByZXR1cm4gMCBp ZiBva2F5LAorIDEgaWYgZmFpbGVkIHRvIHJlYWQgKG1vZGVtIGhhbmd1cCBvciB3aGF0ZXZlcikK KyovCitzdGF0aWMgaW50IG9zZXFyZXQgPSAwOwkJCS8qIFJldHVybiBjb2RlIGZvciBvdXRzZXEg Ki8KKwkJCQkJLyogT3V0IGhlcmUgdG8gcHJldmVudCBjbG9iYmVyaW5nICovCisJCQkJCS8qIGJ5 IGxvbmdqbXAuICovCisKK3N0YXRpYyBTSUdUWVAKKyNpZmRlZiBDS19BTlNJQworZG9vc2VxKHZv aWQgKiB0aHJlYWRpbmZvKQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2Rvb3NlcSh0aHJlYWRpbmZv KSBWT0lEICogdGhyZWFkaW5mbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCBs OworICAgIGNoYXIgKnNiOworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGV4dGVybiBpbnQgdG5fbmxt LCB0bl9iX25sbTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIE5UU0lHCisgICAg c2V0aW50KCk7CisgICAgaWYgKHRocmVhZGluZm8pIHsJCQkvKiBUaHJlYWQgbG9jYWwgc3RvcmFn ZS4uLiAqLworCVRsc1NldFZhbHVlKFRsc0luZGV4LHRocmVhZGluZm8pOworICAgIH0KKyNlbmRp ZiAvKiBOVFNJRyAqLworI2lmZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyNpZmRlZiBJS1NECisg ICAgaWYgKGluc2VydmVyKQorICAgICAgc2V0bnRjcmVkcygpOworI2VuZGlmIC8qIElLU0QgKi8K KyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAgICBsID0gKGludClz dHJsZW4oc2VxX2J1Zik7CisgICAgdGxvZyhGMTExLCJzZW5kaW5nIHNlcXVlbmNlICIsc2VxX2J1 ZiwobG9uZykgbCk7CisKKyAgICBpZiAoIXN0cmNtcChzZXFfYnVmLCJFT1QiKSkgeworCXR0b2Mo ZG9wYXIoJ1wwMDQnKSk7CisJaWYgKHNjcl9lY2hvKSBjb25vbCgiPEVPVD4iKTsKKwlpZiAoc2Vz bG9nICYmIGR1cGxleCkKKyAgICAgICAgICAgIGxvZ3N0cigiPEVPVD4iLDUpOworICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChzZXFfYnVmLCJCUkVBSyIpIHx8CisJICAgICAgICFzdHJjbXAoc2VxX2J1 ZiwiXFxiIikgfHwKKwkgICAgICAgIXN0cmNtcChzZXFfYnVmLCJcXEIiKSkgeworCXR0c25kYigp OworCWlmIChzY3JfZWNobykgY29ub2woIjxCUkVBSz4iKTsKKwlpZiAoc2VzbG9nKQorCSAgbG9n c3RyKCJ7QlJFQUt9Iiw3KTsKKyAgICB9IGVsc2UgeworCWlmIChsID4gMCkgeworCSAgICBmb3Ig KCBzYiA9IHNlcV9idWY7ICpzYjsgc2IrKykKKwkgICAgICAqc2IgPSBkb3Bhcigqc2IpOwkvKiBh ZGQgcGFyaXR5ICovCisJICAgIHR0b2woKENIQVIgKilzZXFfYnVmLGwpOyAvKiBzZW5kIGl0ICov CisJICAgIGlmIChzY3JfZWNobyAmJiBkdXBsZXgpIHsKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVm IE9TMgorCQl7CQkJLyogRWNobyB0byBlbXVsYXRvciAqLworCQkgICAgY2hhciAqcyA9IHNlcV9i dWY7CisJCSAgICB3aGlsZSAoKnMpIHsKKwkJCXNjcmlwdHdydGJ1ZigoVVNIT1JUKSpzKTsKKwkJ ICAgIH0KKwkJfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKwkJY29u eG8obCxzZXFfYnVmKTsKKwkgICAgfQorCSAgICBpZiAoc2VzbG9nICYmIGR1cGxleCkgLyogbG9n IGl0ICovCisJICAgICAgbG9nc3RyKHNlcV9idWYsc3RybGVuKHNlcV9idWYpKTsKKwl9CisJaWYg KCFub19jcikgeworCSAgICB0dG9jKCBkb3BhcihDUikgKTsKKyNpZmRlZiBUQ1BTT0NLRVQKKwkg ICAgaWYgKGlzX3RuKSB7CisJCWlmICghVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpICYmIHRuX25s bSAhPSBUTkxfQ1IpCisJCSAgdHRvYygoY2hhcikoKHRuX25sbSA9PSBUTkxfQ1JMRikgPworCQkJ ICAgICAgZG9wYXIoTEYpIDogZG9wYXIoTlVMKSkpOworCQllbHNlIGlmIChURUxPUFRfTUUoVEVM T1BUX0JJTkFSWSkgJiYKKwkJCSAodG5fYl9ubG0gPT0gVE5MX0NSTEYgfHwgdG5fYl9ubG0gPT0g VE5MX0NSTlVMKSkKKwkJICB0dG9jKChjaGFyKSgodG5fYl9ubG0gPT0gVE5MX0NSTEYpID8KKwkJ CSAgICAgIGRvcGFyKExGKSA6IGRvcGFyKE5VTCkpKTsKKwkgICAgfQorI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworCSAgICBpZiAoc2VzbG9nICYmIGR1cGxleCkKKwkgICAgICBsb2djaGFyKGRvcGFy KENSKSk7CisJfQorICAgIH0KKyNpZmRlZiBOVFNJRworICAgIGNrVGhyZWFkRW5kKHRocmVhZGlu Zm8pOworI2VuZGlmIC8qIE5UU0lHICovCisgICAgU0lHUkVUVVJOOworfQorCitTSUdUWVAKKyNp ZmRlZiBDS19BTlNJQworZmFpbG9zZXEodm9pZCAqIHRocmVhZGluZm8pCisjZWxzZSAvKiBDS19B TlNJQyAqLworZmFpbG9zZXEodGhyZWFkaW5mbykgVk9JRCAqIHRocmVhZGluZm87CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KKy8qIGZhaWxvc2VxICovIHsKKyAgICAgb3NlcXJldCA9IC0xOwkJLyog ZWxzZSAtLSBhbGFybSByYW5nICovCisgICAgIFNJR1JFVFVSTjsKK30KKworc3RhdGljIGludAor b3V0c2VxKCkgeworICAgIGludCBkZWxheTsKKworICAgIG9zZXFyZXQgPSAwOwkJCS8qIEluaXRp YWxpemUgcmV0dXJuIGNvZGUgKi8KKyAgICB3aGlsZSgxKSB7CisJZGVsYXkgPSBzZXF1ZW5jKCk7 CisJYWxybV9leGVjdXRlKCBja2phZGRyKGFscm1ybmcpLCBTTkRfQUxSTSwgc2NydGltZSwgZG9v c2VxLCBmYWlsb3NlcSApIDsKKworCWlmICghZGVsYXkpCisJICByZXR1cm4ob3NlcXJldCk7Cisj aWZuZGVmIE1BQworCW1zbGVlcChERUxfTVNFQyk7CQkvKiBkZWxheSwgbG9vcCB0byBuZXh0IHNl bmQgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICB9Cit9CisKKworLyogIEwgTyBHIEkgTiAgLS0g IChoaXN0b3JpY2FsIG1pc25vbWVyKSBFeGVjdXRlIHRoZSBTQ1JJUFQgY29tbWFuZCAqLworCitp bnQKK2RvbG9naW4oY21kc3RyKSBjaGFyICpjbWRzdHI7IHsKKworI2lmZGVmIE9TMgorI2lmZGVm IE5UCisgICAgU0lHVFlQICgqIHNhdmVhbG0pKGludCk7CQkvKiBTYXZlIGluY29taW5nIGFsYXJt IGZ1bmN0aW9uICovCisjZWxzZSAvKiBOVCAqLworICAgIFNJR1RZUCAoKiB2b2xhdGlsZSBzYXZl YWxtKShpbnQpOwkvKiBTYXZlIGluY29taW5nIGFsYXJtIGZ1bmN0aW9uICovCisjZW5kaWYgLyog TlQgKi8KKyNlbHNlIC8qIE9TMiAqLworICAgIFNJR1RZUCAoKnNhdmVhbG0pKCk7CQkvKiBTYXZl IGluY29taW5nIGFsYXJtIGZ1bmN0aW9uICovCisjZW5kaWYgLyogT1MyICovCisgICAgY2hhciAq ZTsKKworICAgIHMgPSBjbWRzdHI7CQkJCS8qIE1ha2UgZ2xvYmFsIHRvIHRoaXMgbW9kdWxlICov CisKKyAgICB0bG9nKEYxMDAsbG9naW52LCIiLDBMKTsKKworICAgIGlmIChzcGVlZCA8IDBMKSBz cGVlZCA9IHR0Z3NwZCgpOworICAgIGlmICh0dG9wZW4odHRuYW1lLCZsb2NhbCxtZG10eXAsMCkg PCAwKSB7CisJY2ttYWttc2coc2VxX2J1ZixTQlVGTCwiU29ycnksIGNhbid0IG9wZW4gIix0dG5h bWUsTlVMTCxOVUxMKTsKKwlwZXJyb3Ioc2VxX2J1Zik7CisJcmV0dXJuKDApOworICAgIH0KKyAg ICAvKiBXaGV0aGVyIHRvIGVjaG8gc2NyaXB0IGNvbW1hbmRzIC4uLiAqLworICAgIHNjcl9lY2hv ID0gKCFxdWlldCAmJiAhYmFja2dyZCAmJiBzZWNobyk7CisjaWZuZGVmIE5PU1BMCisgICAgaWYg KHNjcl9lY2hvICYmIGNtZGx2bCA+IDEpIHsKKwlpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENN RF9URikKKwkgIHNjcl9lY2hvID0gdGVjaG87CisJaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBD TURfTUQpCisJICBzY3JfZWNobyA9IG1lY2hvOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLwor ICAgIGlmIChzY3JfZWNobykgeworI2lmZGVmIE5FVENPTk4KKwlpZiAobmV0d29yaykKKwkgIHBy aW50ZigiRXhlY3V0aW5nIFNDUklQVCB0byBob3N0ICVzLlxuIix0dG5hbWUpOworCWVsc2UKKyNl bmRpZiAvKiBORVRDT05OICovCisJICBwcmludGYoIkV4ZWN1dGluZyBTQ1JJUFQgdGhyb3VnaCAl cywgc3BlZWQgJWxkLlxuIix0dG5hbWUsc3BlZWQpOworICAgIH0KKyNpZmRlZiBUTkNPREUKKyAg ICAvKiBURUxORVQgaW5wdXQgbXVzdCBiZSBzY2FubmVkIGZvciBJQUMgKi8KKyAgICBpc190biA9 IChsb2NhbCAmJiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB8fAorCSAgICAoIWxvY2FsICYmIHNz dGVsbmV0KTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworICAgICpzZXFfYnVmID0gMDsKKyAgICBm b3IgKGUgPSBzOyAqZTsgZSsrKSBja3N0cm5jYXQoc2VxX2J1ZixkYmNocigqZSksU0JVRkwpOwor I2lmZGVmIENPTU1FTlQKKy8qIFNraXAgdGhpcyBiZWNhdXNlIGl0IHRlbmRzIHRvIGNvbnRhaW4g YSBwYXNzd29yZC4uLiAqLworICAgIGlmIChzY3JfZWNobykgcHJpbnRmKCJTQ1JJUFQgc3RyaW5n OiAlc1xuIixzZXFfYnVmKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgdGxvZyhGMTEwLCJT Q1JJUFQgc3RyaW5nOiAiLHNlcV9idWYsIDBMKTsKKworLyogQ29uZGl0aW9uIGNvbnNvbGUgdGVy bWluYWwgYW5kIGNvbW11bmljYXRpb24gbGluZS4uLiAqLworCisgICAgaWYgKHR0dnQoc3BlZWQs ZmxvdykgPCAwKSB7CisJcHJpbnRmKCJTb3JyeSwgQ2FuJ3QgY29uZGl0aW9uIGNvbW11bmljYXRp b24gbGluZVxuIik7CisJcmV0dXJuKDApOworICAgIH0KKyAgICAvKiBTYXZlIGluaXRpYWwgdGlt ZXIgaW50ZXJydXB0IHZhbHVlICovCisgICAgc2F2ZWFsbSA9IHNpZ25hbChTSUdBTFJNLFNJR19J R04pOworCisgICAgZmx1c2hpKCk7CQkJCS8qIEZsdXNoIHN0YWxlIGlucHV0ICovCisKKy8qIHN0 YXJ0IGV4cGVjdCAtIHNlbmQgc2VxdWVuY2UgKi8KKworICAgIHdoaWxlICgqcykgewkJCS8qIFdo aWxlIG5vdCBkb25lIHdpdGggYnVmZmVyICovCisKKwl3aGlsZSAoKnMgJiYgaXNzcGFjZSgqcykp IHMrKzsJLyogU2tpcCBvdmVyIHNlcGFyYXRpbmcgd2hpdGVzcGFjZXMgKi8KKwkJCQkJLyogR2F0 aGVyIHVwIGV4cGVjdCBzZXF1ZW5jZSAqLworCWdvdF9pdCA9IDA7CisJcmVjdnNlcSgpOworCisJ d2hpbGUgKCFnb3RfaXQpIHsJCS8qIEhhdmUgaXQgeWV0PyAqLworCSAgICBpZiAoKnMrKyAhPSAn LScpCQkvKiBObywgaXMgdGhlcmUgYSBjb25kaXRpb25hbCBzZW5kPyAqLworCSAgICAgIGdvdG8g ZmFpbHJldDsJCS8qIE5vLCByZXR1cm4gZmFpbHVyZSAqLworCSAgICBmbHVzaGkoKTsJCQkvKiBZ ZXMsIGZsdXNoIG91dCBpbnB1dCBidWZmZXIgKi8KKwkgICAgaWYgKG91dHNlcSgpKQkJLyogSWYg dW5hYmxlIHRvIHNlbmQsICovCisJICAgICAgZ290byBmYWlscmV0OwkJLyogcmV0dXJuIGZhaWx1 cmUuICovCisJICAgIGlmICgqcysrICE9ICctJykJCS8qIElmIG5vIGNvbmRpdGlvbmFsIHJlc3Bv bnNlIGhlcmUsICovCisJICAgICAgZ290byBmYWlscmV0OwkJLyogcmV0dXJuIGZhaWx1cmUuICov CisJICAgIHJlY3ZzZXEoKTsJCQkvKiBBbGwgT0ssIHJlYWQgcmVzcG9uc2UgZnJvbSBob3N0LiAq LworCX0JCQkJLyogTG9vcCBiYWNrIGFuZCBjaGVjayBnb3RfaXQgKi8KKworCXdoaWxlICgqcyAm JiAhaXNzcGFjZSgqcysrKSApIDsJLyogU2tpcCBvdmVyIGNvbmRpdGlvbmFscyAqLworCXdoaWxl ICgqcyAmJiBpc3NwYWNlKCpzKSkgcysrOwkvKiBTa2lwIG92ZXIgc2VwYXJhdGluZyB3aGl0ZXNw YWNlcyAqLworCWZsdXNoaSgpOwkJCS8qIEZsdXNoICovCisJaWYgKCpzKSBpZiAob3V0c2VxKCkp IGdvdG8gZmFpbHJldDsgLyogSWYgYW55ICovCisgICAgfQorICAgIHNpZ25hbChTSUdBTFJNLHNh dmVhbG0pOworICAgIGlmIChzY3JfZWNobykgcHJpbnRmKCJTY3JpcHQgc3VjY2Vzc2Z1bC5cbiIp OworICAgIHRsb2coRjEwMCwiU2NyaXB0IHN1Y2Nlc3NmdWwuIiwiIiwwTCk7CisgICAgcmV0dXJu KDEpOworCitmYWlscmV0OgorICAgIHNpZ25hbChTSUdBTFJNLHNhdmVhbG0pOworICAgIGlmIChz Y3JfZWNobykgcHJpbnRmKCJTb3JyeSwgc2NyaXB0IGZhaWxlZFxuIik7CisgICAgdGxvZyhGMTAw LCJTY3JpcHQgZmFpbGVkIiwiIiwwTCk7CisgICAgcmV0dXJuKDApOworfQorCisvKiAgRiBMIFUg UyBIIEkgIC0tICBGbHVzaCwgYnV0IGxvZywgU0NSSVBUIGlucHV0IGJ1ZmZlciAgKi8KKworVk9J RAorZmx1c2hpKCkgeworICAgIGludCBuLCB4OworICAgIGlmICgKKwlzZXNsb2cJCQkJLyogTG9n Z2luZyBzZXNzaW9uPyAqLworCXx8IHNjcl9lY2hvCQkJLyogT3IgY29uc29sZSBlY2hvaW5nPyAq LworI2lmZGVmIE5FVENPTk4KKyNpZmRlZiBUTkNPREUKKwkvKiBURUxORVQgaW5wdXQgbXVzdCBi ZSBzY2FubmVkIGZvciBJQUMgKi8KKwl8fCBpc190bgorI2VuZGlmIC8qIFROQ09ERSAqLworI2Vu ZGlmIC8qIE5FVENPTk4gKi8KKwkpIHsKKyAgICAgICAgaWYgKChuID0gdHRjaGsoKSkgPCAwKQkJ LyogWWVzLCBhbnl0aGluZyBpbiBidWZmZXI/ICovCisJICByZXR1cm47CisJaWYgKG4gPiBNQVhC VVJTVCkgbiA9IE1BWEJVUlNUOwkvKiBNYWtlIHN1cmUgbm90IHRvbyBtdWNoLCAqLworCW15Zmxz aCgpOwkJCS8qIGFuZCB0aGF0IGJ1ZmZlcnMgYXJlIGVtcHR5LiAqLworCXdoaWxlIChuLS0gPiAw KSB7CisgIAkgICAgeCA9IHR0aW5jKDApOwkJLyogQ29sbGVjdCBhIGNoYXJhY3RlciAqLworI2lm ZGVmIE5FVENPTk4KKyNpZmRlZiBUTkNPREUKKy8qIENoZWNrIGZvciB0ZWxuZXQgcHJvdG9jb2wg bmVnb3RpYXRpb24gKi8KKyAgCSAgICBpZiAoaXNfdG4gJiYgKCh4ICYgMHhmZikgPT0gSUFDKSAp IHsKKwkJbXlmbHNoKCk7CQkvKiBTeW5jIG91dHB1dCAqLworICAJCXN3aXRjaCAodG5fZG9vcCgo Q0hBUikoeCAmIDB4ZmYpLGR1cGxleCx0dGluYykpIHsKKyAgCQkgIGNhc2UgMjogZHVwbGV4ID0g MDsgYnJlYWs7CisgIAkJICBjYXNlIDE6IGR1cGxleCA9IDE7CisJCSAgZGVmYXVsdDogYnJlYWs7 CisJCX0KKworCQkvKiBSZWNhbGN1bGF0ZSBmbHVzaCBjb3VudCAqLworCQlpZiAoKG4gPSB0dGNo aygpKSA8IDApCisJCSAgcmV0dXJuOworCQlpZiAobiA+IE1BWEJVUlNUKSBuID0gTUFYQlVSU1Q7 CisgIAkJY29udGludWU7CisgIAkgICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworI2VuZGlmIC8q IE5FVENPTk4gKi8KKwkgICAgaWYgKHNjcl9lY2hvKSBjb25idWZbY29uY250KytdID0gKENIQVIp IHg7IC8qIGJ1ZmZlciBmb3IgY29uc29sZSAqLworCSAgICBpZiAoc2VzbG9nKQorI2lmZGVmIFVO SVgKKwkgICAgICBpZiAoc2Vzc2Z0ICE9IDAgfHwgeCAhPSAnXHInKQorI2Vsc2UKKyNpZmRlZiBP U0sKKwkgICAgICBpZiAoc2Vzc2Z0ICE9IDAgfHwgeCAhPSAnXDAxMicpCisjZW5kaWYgLyogT1NL ICovCisjZW5kaWYgLyogVU5JWCAqLworCQlzZXNidWZbc2VzY250KytdID0gKENIQVIpIHg7IC8q IGJ1ZmZlciBmb3Igc2Vzc2lvbiBsb2cgKi8KKyAgCX0KKwlteWZsc2goKTsKKyAgICB9IGVsc2Ug dHRmbHVpKCk7CQkJLyogT3RoZXJ3aXNlIGp1c3QgZmx1c2guICovCit9CisKKyNlbHNlIC8qIE5P U0NSSVBUICovCitjaGFyICpsb2dpbnYgPSAiU2NyaXB0IENvbW1hbmQgRGlzYWJsZWQiOworI2Vu ZGlmIC8qIE5PU0NSSVBUICovCisjZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYgLS1naXQgYS9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXNpZy5jIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzaWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5lNDU1NmU1Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAy LWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3VzaWcuYwpAQCAtMCwwICsxLDM1NCBAQAorY2hhciAq Y2t1c2lndiA9ICJTaWduYWwgc3VwcG9ydCwgOS4wLjEwMCwgMTYgT2N0IDIwMDkiOworCisvKiBD IEsgVSBTIEkgRyAgLS0gIEtlcm1pdCBzaWduYWwgaGFuZGxpbmcgZm9yIFVuaXggYW5kIE9TLzIg c3lzdGVtcyAqLworCisvKgorICBBdXRob3I6IEplZmZyZXkgQWx0bWFuIChqYWx0bWFuQHNlY3Vy ZS1lbmRwb2ludHMuY29tKSwKKyAgICAgICAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwgTmV3 IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDksCisgICAgVHJ1c3RlZXMg b2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwg cmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRo ZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWlt ZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKyNpbmNsdWRlICJja2NzeW0uaCIKKyNpbmNsdWRlICJj a2Nhc2MuaCIJCQkvKiBBU0NJSSBjaGFyYWN0ZXIgc3ltYm9scyAqLworI2luY2x1ZGUgImNrY2Rl Yi5oIgkJCS8qIERlYnVnICYgb3RoZXIgc3ltYm9scyAqLworI2luY2x1ZGUgImNrY2tlci5oIgkJ CS8qIEtlcm1pdCBzeW1ib2xzICovCisjaW5jbHVkZSAiY2tjbmV0LmgiCQkJLyogTmV0d29yayBz eW1ib2xzICovCisjaWZuZGVmIE5PU1BMCisjaW5jbHVkZSAiY2t1dXNyLmgiCisjZW5kaWYgLyog Tk9TUEwgKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmZGVmIE5UCisjaW5jbHVkZSA8c2V0 am1wZXguaD4KKyNpbmNsdWRlIDxleGNwdC5oPgorI2Vsc2UgLyogTlQgKi8KKyNpbmNsdWRlIDxz ZXRqbXAuaD4KKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImNrY3NpZy5oIgorCisjaWZkZWYg Tk9DQ1RSQVAKK2V4dGVybiBja2ptcGJ1ZiBjbWpidWY7CisjZW5kaWYgLyogTk9DQ1RSQVAgKi8K KworI2lmZGVmIE1BQworI2RlZmluZSBzaWduYWwgbXNpZ25hbAorI2RlZmluZSBTSUdUWVAgbG9u ZworI2RlZmluZSBhbGFybSBtYWxhcm0KKyNkZWZpbmUgU0lHX0lHTiAwCisjZGVmaW5lIFNJR0FM Uk0gMQorI2RlZmluZSBTSUdJTlQgIDIKK1NJR1RZUCAoKm1zaWduYWwoaW50IHR5cGUsIFNJR1RZ UCAoKmZ1bmMpKGludCkpKShpbnQpOworI2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgU1RSQVRV UworLyogV2Uga25vdyB0aGVzZSBhcmUgc2V0IGhlcmUuICBNVVNUIHVuc2V0IHRoZW0gYmVmb3Jl IHRoZSBkZWZpbml0aW9ucy4gKi8KKyNkZWZpbmUgc2lnbmFsIHZzaWduYWwKKyNkZWZpbmUgYWxh cm0gdmFsYXJtCitTSUdUWVAgKCp2c2lnbmFsKGludCB0eXBlLCBTSUdUWVAgKCpmdW5jKShpbnQp KSkoaW50KTsKK2ludCB2YWxhcm0oaW50IGludGVydmFsKTsKKyNlbmRpZiAvKiBTVFJBVFVTICov CisKKyNpZmRlZiBBTUlHQQorI2RlZmluZSBzaWduYWwgYXNpZ25hbAorI2RlZmluZSBhbGFybSBh YWxhcm0KKyNkZWZpbmUgU0lHQUxSTSAoX05VTVNJRysxKQorI2RlZmluZSBTSUdUWVAgdm9pZAor U0lHVFlQICgqYXNpZ25hbChpbnQgdHlwZSwgU0lHVFlQICgqZnVuYykoaW50KSkpKGludCk7Cit1 bnNpZ25lZCBhYWxhcm0odW5zaWduZWQpOworI2VuZGlmIC8qIEFNSUdBICovCisKKyNpZmRlZiBO VEFTTQorRFdPUkQKK2NrZ2V0SVAodm9pZCkKK3sKKyAgIF9fYXNtCisgICB7CisgICAgICBtb3Yg ZWF4LCBkd29yZCBwdHIgW2VzcCsweDEwXQorICAgICAgam1wIGNrZ2V0SVAgKyAweDE4CisgICB9 CisgICByZXR1cm4gMTsKKworfQorI2VuZGlmIC8qIE5UQVNNICovCisKKyNpZmRlZiBOVAorRFdP UkQKK2V4Y2VwdGlvbl9maWx0ZXIoIHZvaWQgKQoreworICAgR2V0RXhjZXB0aW9uSW5mb3JtYXRp b24gOworICAgcmV0dXJuKCBFWENFUFRJT05fRVhFQ1VURV9IQU5ETEVSICkgOworfQordm9pZAor Y3Jhc2goIHZvaWQgKQoreworICAgaW50IHggPSAwLCB5ID0gMCA7CisgICAgeCAvIHkgOworfQor I2VuZGlmIC8qIE5UICovCisKKyNpZm5kZWYgTk9DQ1RSQVAKK2ludAorI2lmZGVmIENLX0FOU0lD CitjY19leGVjdXRlKCBja2pwdHIoc2pfYnVmKSwgY2tfc2lnZnVuYyBkb2Z1bmMsIGNrX3NpZ2Z1 bmMgZmFpbGZ1bmMgKQorI2Vsc2UKK2NjX2V4ZWN1dGUoIHNqX2J1ZiwgZG9mdW5jLCBmYWlsZnVu YykKKyAgICBja2pwdHIoc2pfYnVmKTsKKyAgICBja19zaWdmdW5jIGRvZnVuYzsKKyAgICBja19z aWdmdW5jIGZhaWxmdW5jOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBjY19leGVjdXRlICov IHsKKyAgICBpbnQgcmMgPSAwIDsKKyNpZmRlZiBOVEFTTQorICAgRFdPUkQgRWlwLCBFc3AgOwor ICAgIGlzaW50ZXJydXB0ZWQgPSAwOworICAgIHNqX2J1Zi0+cmV0Y29kZSA9IDAgOworICAgIHNq X2J1Zi0+SWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKSA7CisgICAgbWVtc2V0KCAmc2pfYnVmLT5j b250ZXh0LCAwLCBzaXplb2YoQ09OVEVYVCkgKTsKKyAgICBzal9idWYtPmNvbnRleHQuQ29udGV4 dEZsYWdzID0gQ09OVEVYVF9GVUxMIDsKKyNpZm5kZWYgQ09NTUVOVAorICAgIEdldFRocmVhZENv bnRleHQoR2V0Q3VycmVudFRocmVhZCgpLCAmKHNqX2J1Zi0+Y29udGV4dCkgKSA7CisgICAgX19h c20KKyAgICB7CisgICAgICAgICAgbW92ICAgICAgIGVjeCxkd29yZCBwdHIgW3NqX2J1Zl0KKyAg ICAgICAgICBtb3YgICAgICAgZHdvcmQgcHRyIFtlY3grMHhjNF0sZXNwCisgICAgfQorICAgc2pf YnVmLT5jb250ZXh0LkVGbGFncyA9IDUzMCA7CisgICBzal9idWYtPmNvbnRleHQuRWlwID0gY2tn ZXRJUCgpKzB4MEMgOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAgX19hc20KKyAgIHsKKyAgICAg IG1vdiBlYXgsIGR3b3JkIHB0ciBbc2pfYnVmXQorICAgICAgcHVzaCBlYXgKKyAgICAgIG1vdiBl YXgsIDB4ZmZmZmZmZmUKKyAgICAgIHB1c2ggZWF4CisgICAgICBtb3YgZWF4LCAweDAwMDAwMDM5 CisgICAgICBtb3YgZWR4LGVzcAorICAgICAgaW50IDB4MmUKKyAgICAgIHBvcCBlYXgKKyAgICAg IHBvcCBlYXgKKyAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogTlRBU00gKi8K KyAgICBpZiAoCisjaWZkZWYgTlRBU00KKyAgICAgICAgIGlzaW50ZXJydXB0ZWQKKyNlbHNlCisJ CSBja3NldGptcChja2pkcmVmKHNqX2J1ZikpCisjZW5kaWYgLyogTlRBU00gKi8KKwkJICkgewor I2lmZGVmIE5UQVNNCisgICAgICAgICAgX19hc20KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBtb3YgZXNwLCBFU1BUb1Jlc3RvcmUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlz aW50ZXJydXB0ZWQgPSAwIDsKKyNlbmRpZiAvKiBOVEFTTSAqLworICAgICAgICAgICAgKCpmYWls ZnVuYykoTlVMTCkgOworI2lmZGVmIE5UQVNNCisgICAgICAgICAgICAgcmMgPSBzal9idWYtPnJl dGNvZGUgOworI2Vsc2UgLyogTlRBU00gKi8KKyAgICAgICAgICAgICByYyA9IC0xIDsKKyNlbmRp ZiAgLyogTlRBU00gKi8KKyAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgTlQKKyAgICAgICAgICAg IF9fdHJ5IHsKKyAgICAgICAgICAgICAgICgqZG9mdW5jKShOVUxMKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIF9fZXhjZXB0KGV4Y2VwdGlvbl9maWx0ZXIoKSkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImNjX2V4ZWN1dGUgX19leGNlcHQiLCIiLDApOwor ICAgICAgICAgICAgICAgZGVidWcoRjExMSwKKwkJICAgICAiZXhjZXB0aW9uX2ZpbHRlciIsCisJ CSAgICAgIl9leGNlcHRpb25fY29kZSIsCisJCSAgICAgZXRFeGNlcHRpb25Db2RlKCkKKwkJICAg ICApOworICAgICAgICAgICAgICAgbG9uZ2ptcChja2pkcmVmKHNqX2J1ZiksU0lHSU5UKTsKKyAg ICAgICAgICAgIH0KKyNlbHNlIC8qIE5UICovCisgICAgICAgICAgICAoKmRvZnVuYykoTlVMTCk7 CisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgIH0KKyAgIHJldHVybiByYyA7Cit9CisjZW5kaWYg LyogTk9DQ1RSQVAgKi8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMJCQkJLyogQU5TSUMgQyBkZWNs YXJhdGlvbi4uLiAqLworYWxybV9leGVjdXRlKGNranB0cihzal9idWYpLAorCSAgICAgaW50IHRp bW8sCisJICAgICBja19zaWdoYW5kIGhhbmRsZXIsCisJICAgICBja19zaWdmdW5jIGRvZnVuYywK KwkgICAgIGNrX3NpZ2Z1bmMgZmFpbGZ1bmMKKwkgICAgICkKKworI2Vsc2UgLyogTm90IEFOU0lD IEMgLi4uICovCisKK2Fscm1fZXhlY3V0ZShzal9idWYsCisJICAgICB0aW1vLAorCSAgICAgaGFu ZGxlciwKKwkgICAgIGRvZnVuYywKKwkgICAgIGZhaWxmdW5jCisJICAgICApCisgICAgY2tqcHRy KHNqX2J1Zik7CisgICAgaW50IHRpbW87CisgICAgY2tfc2lnaGFuZCBoYW5kbGVyOworICAgIGNr X3NpZ2Z1bmMgZG9mdW5jOworICAgIGNrX3NpZ2Z1bmMgZmFpbGZ1bmM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKworLyogYWxybV9leGVjdXRlICovIHsKKworICAgIGludCByYyA9IDA7CisgICAg aW50IHNhdmFscm0gPSAwOworX1BST1RPVFlQKFNJR1RZUCAoKnNhdmhhbmRsZXIpLCAoaW50KSk7 CisKKyAgICBzYXZhbHJtID0gYWxhcm0odGltbyk7CisgICAgc2F2aGFuZGxlciA9IHNpZ25hbChT SUdBTFJNLCBoYW5kbGVyKTsKKworI2lmZGVmIE5UQVNNCisgICAgc2pfYnVmLT5yZXRjb2RlID0g MCA7CisgICAgc2pfYnVmLT5JZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOworICAgIG1lbXNldCgm c2pfYnVmLT5jb250ZXh0LCAwLCBzaXplb2YoQ09OVEVYVCkpOworICAgIHNqX2J1Zi0+Y29udGV4 dC5Db250ZXh0RmxhZ3MgPSBDT05URVhUX0ZVTEw7CisjaWZuZGVmIENPTU1FTlQKKyAgICBHZXRU aHJlYWRDb250ZXh0KEdldEN1cnJlbnRUaHJlYWQoKSwgJihzal9idWYtPmNvbnRleHQpKTsKKyNl bHNlCisgICBfX2FzbQorICAgeworICAgICAgbW92IGVheCwgZHdvcmQgcHRyIFtzal9idWZdCisg ICAgICBwdXNoIGVheAorICAgICAgbW92IGVheCwgMHhmZmZmZmZmZQorICAgICAgcHVzaCBlYXgK KyAgICAgIG1vdiBlYXgsIDB4MDAwMDAwMzkKKyAgICAgIG1vdiBlZHgsZXNwCisgICAgICBpbnQg MHgyZQorICAgICAgcG9wIGVheAorICAgICAgcG9wIGVheAorICAgfQorI2VuZGlmCisgICAgaXNp bnRlcnJ1cHRlZCA9IDA7CisjZW5kaWYgLyogTlRBU00gKi8KKyAgICBpZiAoCisjaWZkZWYgTlRB U00KKwkJIHNqX2J1Zi0+cmV0Y29kZQorI2Vsc2UKKwkJIGNrc2V0am1wKGNramRyZWYoc2pfYnVm KSkKKyNlbmRpZiAvKiBOVEFTTSAqLworCQkpIHsKKwkoKmZhaWxmdW5jKShOVUxMKSA7CisJcmMg PSAtMSA7CisgICAgfSBlbHNlIHsKKyNpZmRlZiBOVAorICAgICAgIF9fdHJ5IHsKKyAgICAgICAg ICAoKmRvZnVuYykoTlVMTCkgOworICAgICAgIH0KKyAgICAgICBfX2V4Y2VwdCggZXhjZXB0aW9u X2ZpbHRlcigpICkKKyAgICAgICB7CisgICAgICAgICAgZGVidWcoRjEwMCwiYWxybV9leGVjdXRl IF9fZXhjZXB0IiwiIiwwKTsKKyAgICAgICAgICBkZWJ1ZyhGMTExLCJleGNlcHRpb25fZmlsdGVy IiwKKwkJIl9leGNlcHRpb25fY29kZSIsCisJCUdldEV4Y2VwdGlvbkNvZGUoKQorCQkpOworICAg ICAgICAgIGxvbmdqbXAoY2tqZHJlZihzal9idWYpLFNJR0lOVCk7CisgICAgICAgfQorI2Vsc2Ug LyogTlQgKi8KKyAgICAgICAoKmRvZnVuYykoTlVMTCkgOworI2VuZGlmIC8qIE5UICovCisgICAg fQorICAgIGFsYXJtKHNhdmFscm0pIDsKKyAgICBpZiAoIHNhdmhhbmRsZXIgKQorICAgICAgICBz aWduYWwoIFNJR0FMUk0sIHNhdmhhbmRsZXIgKSA7CisgICAgcmV0dXJuIHJjIDsKK30KKworaW50 CisjaWZkZWYgQ0tfQU5TSUMJCQkJLyogQU5TSUMgQyBkZWNsYXJhdGlvbi4uLiAqLworY2NfYWxy bV9leGVjdXRlKGNranB0cihzal9idWYpLAorCQlpbnQgdGltbywKKwkJY2tfc2lnaGFuZCBoYW5k bGVyLAorCQlja19zaWdmdW5jIGRvZnVuYywKKwkJY2tfc2lnZnVuYyBmYWlsZnVuYworCQkpCisK KyNlbHNlIC8qIE5vdCBBTlNJQyBDIC4uLiAqLworCitjY19hbHJtX2V4ZWN1dGUoc2pfYnVmLAor CSAgICAgdGltbywKKwkgICAgIGhhbmRsZXIsCisJICAgICBkb2Z1bmMsCisJICAgICBmYWlsZnVu YworCSAgICAgKQorICAgIGNranB0cihzal9idWYpOworICAgIGludCB0aW1vOworICAgIGNrX3Np Z2hhbmQgaGFuZGxlcjsKKyAgICBja19zaWdmdW5jIGRvZnVuYzsKKyAgICBja19zaWdmdW5jIGZh aWxmdW5jOworI2VuZGlmIC8qIENLX0FOU0lDICovCisKKy8qIGNjX2Fscm1fZXhlY3V0ZSAqLyB7 CisKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBzYXZhbHJtID0gMDsKK19QUk9UT1RZUChTSUdU WVAgKCpzYXZoYW5kbGVyKSwgKGludCkpOworICAgIHNhdmFscm0gPSBhbGFybSh0aW1vKTsKKyAg ICBzYXZoYW5kbGVyID0gc2lnbmFsKCBTSUdBTFJNLCBoYW5kbGVyICk7CisKKyNpZmRlZiBOVEFT TQorICAgIHNqX2J1Zi0+cmV0Y29kZSA9IDAgOworICAgIHNqX2J1Zi0+SWQgPSBHZXRDdXJyZW50 VGhyZWFkSWQoKSA7CisgICAgbWVtc2V0KCAmc2pfYnVmLT5jb250ZXh0LCAwLCBzaXplb2YoQ09O VEVYVCkgKTsKKyAgICBzal9idWYtPmNvbnRleHQuQ29udGV4dEZsYWdzID0gQ09OVEVYVF9GVUxM IDsKKyNpZm5kZWYgQ09NTUVOVAorICAgIEdldFRocmVhZENvbnRleHQoIEdldEN1cnJlbnRUaHJl YWQoKSwgJihzal9idWYtPmNvbnRleHQpICkgOworI2Vsc2UKKyAgIF9fYXNtCisgICB7CisgICAg ICBtb3YgZWF4LCBkd29yZCBwdHIgW3NqX2J1Zl0KKyAgICAgIHB1c2ggZWF4CisgICAgICBtb3Yg ZWF4LCAweGZmZmZmZmZlCisgICAgICBwdXNoIGVheAorICAgICAgbW92IGVheCwgMHgwMDAwMDAz OQorICAgICAgbW92IGVkeCxlc3AKKyAgICAgIGludCAweDJlCisgICAgICBwb3AgZWF4CisgICAg ICBwb3AgZWF4CisgICB9CisjZW5kaWYKKyAgICBpc2ludGVycnVwdGVkID0gMDsKKyNlbmRpZiAv KiBOVEFTTSAqLworICAgIGlmICgKKyNpZmRlZiBOVEFTTQorCQkgc2pfYnVmLT5yZXRjb2RlCisj ZWxzZQorCQkgY2tzZXRqbXAoY2tqZHJlZihzal9idWYpKQorI2VuZGlmIC8qIE5UQVNNICovCisJ CSkgeworCSgqZmFpbGZ1bmMpKE5VTEwpIDsKKwlyYyA9IC0xIDsKKyAgICB9IGVsc2UgeworI2lm ZGVmIE5UCisgICAgICAgX190cnkgeworICAgICAgICAgICgqZG9mdW5jKShOVUxMKSA7CisgICAg ICAgfQorICAgICAgIF9fZXhjZXB0KCBleGNlcHRpb25fZmlsdGVyKCkgKQorICAgICAgIHsKKwkg ICBkZWJ1ZyhGMTAwLCJjY19hbHJtX2V4ZWN1dGUgX19leGNlcHQiLCIiLDApOworCSAgIGRlYnVn KEYxMTEsCisJCSAiZXhjZXB0aW9uX2ZpbHRlciIsCisJCSAiX2V4Y2VwdGlvbl9jb2RlIiwKKwkJ IEdldEV4Y2VwdGlvbkNvZGUoKQorCQkgKTsKKwkgICBsb25nam1wKGNramRyZWYoc2pfYnVmKSxT SUdJTlQpIDsKKyAgICAgICB9CisjZWxzZSAvKiBOVCAqLworICAgICAgICgqZG9mdW5jKShOVUxM KSA7CisjZW5kaWYgLyogTlQgKi8KKyAgICB9CisgICAgYWxhcm0oc2F2YWxybSk7CisgICAgaWYg KHNhdmhhbmRsZXIpCisgICAgICBzaWduYWwoU0lHQUxSTSxzYXZoYW5kbGVyKTsKKyAgICByZXR1 cm4ocmMpOworfQoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1c2lnLmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nr dXNpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODI5MDAKLS0tIC9k ZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXNp Zy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qICBDIEsgVSBTIEkgRyAuIEggICovCisKKy8qICBEZWZp bml0aW9ucyBhbmQgcHJvdG90eXBlcyBmb3Igc2lnbmFsIGhhbmRsaW5nICAqLworCisvKgorICBB dXRob3I6IEplZmZyZXkgRSBBbHRtYW4gKGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20pLAor ICAgICAgICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5LgorCisgIENv cHlyaWdodCAoQykgMTk4NSwgMjAwOSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJz aXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBT ZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRl eHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMu CisqLworCisjaWZkZWYgQ0tfQU5TSUMKK3R5cGVkZWYgdm9pZCAoKmNrX3NpZ2Z1bmMpKHZvaWQg Kik7Cit0eXBlZGVmIHZvaWQgKCpja19zaWdoYW5kKShpbnQpOworI2Vsc2UKK3R5cGVkZWYgVk9J RCAoKmNrX3NpZ2Z1bmMpKCk7Cit0eXBlZGVmIFZPSUQgKCpja19zaWdoYW5kKSgpOworI2VuZGlm IC8qIENLX0FOU0lDICovCisKKy8qIE1hY3JvcyBmb3IgUE9TSVggdnMgb2xkLXN0eWxlIHNpZ25h bCBoYW5kbGluZy4gKi8KKworI2lmZGVmIENLX1BPU0lYX1NJRwordHlwZWRlZiBzaWdqbXBfYnVm IGNram1wYnVmOworI2Vsc2UKK3R5cGVkZWYgam1wX2J1ZiBja2ptcGJ1ZjsKKyNlbmRpZiAvKiBD S19QT1NJWF9TSUcgKi8KKy8qCisgIFN1cHBvc2UgeW91IHdhbnQgdG8gcGFzcyB0aGUgYWRkcmVz cyBvZiBhIGptcF9idWYgYmFyIHRvIGEgZnVuY3Rpb24gZm9vLgorICBTaW5jZSBqbXBfYnVmIGlz IG5vcm1hbGx5IGRlZmluZWQgKHR5cGVkZWYnZCkgYXMgYW4gYXJyYXksIHlvdSB3b3VsZCBkbwor ICBpdCBsaWtlIHRoaXM6ICBmb28oYmFyKSwgd2hlcmUgZm9vID0gZm9vKGptcF9idWYgYmFyKS4g IEJ1dCBzdXBwb3NlIGEKKyAgam1wX2J1ZiBpcyAoc2F5KSBhIHN0cnVjdCByYXRoZXIgdGhhbiBh biBhcnJheS4gIFRoZW4geW91IG11c3QgZG8KKyAgZm9vKCZiYXIpIHdoZXJlIGZvbyBpcyBmb28o am1wX2J1ZiAqIGJhcikuICBUaGlzIGlzIGNvbnRyb2xsZWQgaGVyZSBpbgorICB0aGUgdHJhZGl0 aW9uYWwgZmFzaGlvbiwgYnkgaWZkZWZzLiAgQnkgZGVmYXVsdCwgd2UgYXNzdW1lIHRoYXQgam1w X2J1ZgorICBpcyBhbiBhcnJheS4gIERlZmluZSB0aGUgc3ltYm9sIEpCTk9UQVJSQVkgaWYgam1w X2J1ZiBpcyBub3QgYW4gYXJyYXkuCisqLworI2lmbmRlZiBKQk5PVEFSUkFZCisjaWZkZWYgTlQK KyNkZWZpbmUgSkJOT1RBUlJBWQorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogSkJOT1RBUlJB WSAqLworCisjaWZkZWYgSkJOT1RBUlJBWQordHlwZWRlZiBja2ptcGJ1ZiAqIGNranB0cjsKKyNk ZWZpbmUgY2tqYWRkcih4KSAmIHgKKyNkZWZpbmUgY2tqZHJlZih4KSAqIHgKKyNpZmRlZiBDS19Q T1NJWF9TSUcKKyNkZWZpbmUgY2tzZXRqbXAoeCkgc2lnc2V0am1wKHgsMSkKKyNlbHNlCisjZGVm aW5lIGNrc2V0am1wKHgpIHNldGptcCh4LDEpCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisj ZWxzZSAgLyogam1wX2J1ZiBpcyBhbiBhcnJheSAqLwordHlwZWRlZiBja2ptcGJ1ZiBja2pwdHI7 CisjZGVmaW5lIGNramFkZHIoeCkgeAorI2RlZmluZSBja2pkcmVmKHgpIHgKKyNpZmRlZiBDS19Q T1NJWF9TSUcKKyNkZWZpbmUgY2tzZXRqbXAgc2lnc2V0am1wCisjZWxzZQorI2RlZmluZSBja3Nl dGptcCBzZXRqbXAKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKyNlbmRpZiAvKiBKQk5PVEFS UkFZICovCisKK19QUk9UT1RZUCggaW50IGNjX2V4ZWN1dGUsIChja2pwdHIsIGNrX3NpZ2Z1bmMs IGNrX3NpZ2Z1bmMpICk7CitfUFJPVE9UWVAoIGludCBhbHJtX2V4ZWN1dGUsCisJICAoY2tqcHRy LAorCSAgIGludCB0aW1vLAorCSAgIGNrX3NpZ2hhbmQgaGFuZGxlciwKKwkgICBja19zaWdmdW5j LCBja19zaWdmdW5jKSApOworX1BST1RPVFlQKCBpbnQgY2NfYWxybV9leGVjdXRlLAorCSAgKGNr anB0ciwKKwkgICBpbnQgdGltbywKKwkgICBja19zaWdoYW5kIGhhbmRsZXIsCisJICAgY2tfc2ln ZnVuYywKKwkgICBja19zaWdmdW5jKSApOworCisvKiBFbmQgb2YgY2t1c2lnLmggKi8KKwoKZGlm ZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dGlvLmMg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXRpby5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNzllMGMKLS0tIC9kZXYvbnVsbAorKysgYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXRpby5jCkBAIC0wLDAgKzEs MTYwNTQgQEAKKyNkZWZpbmUgQ0tVVElPX0MKKworI2lmZGVmIGFlZ2lzCitjaGFyICpja3h2ID0g IkFlZ2lzIENvbW11bmljYXRpb25zIHN1cHBvcnQsIDkuMC4zMjYsIDIwIEF1Z3VzdCAyMDExIjsK KyNlbHNlCisjaWZkZWYgUGxhbjkKK2NoYXIgKmNreHYgPSAiUGxhbiA5IENvbW11bmljYXRpb25z IHN1cHBvcnQsIDkuMC4zMjYsIDIwIEF1Z3VzdCAyMDExIjsKKyNlbHNlCitjaGFyICpja3h2ID0g IlVOSVggQ29tbXVuaWNhdGlvbnMgc3VwcG9ydCwgOS4wLjMyNiwgMjAgQXVndXN0IDIwMTEiOwor I2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogYWVnaXMgKi8KKworLyogIEMgSyBVIFQgSSBP ICAqLworCisvKiBDLUtlcm1pdCBpbnRlcnJ1cHQsIGNvbW11bmljYXRpb25zIGNvbnRyb2wgYW5k IEkvTyBmdW5jdGlvbnMgZm9yIFVOSVggKi8KKworLyoKKyAgQXV0aG9yOiBGcmFuayBkYSBDcnV6 IChmZGNAY29sdW1iaWEuZWR1KSwKKyAgQ29sdW1iaWEgVW5pdmVyc2l0eSBBY2FkZW1pYyBJbmZv cm1hdGlvbiBTeXN0ZW1zLCBOZXcgWW9yayBDaXR5LgorCisgIENvcHlyaWdodCAoQykgMTk4NSwg MjAxMSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9m IE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENP UFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5j IG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBOT1RF IFRPIENPTlRSSUJVVE9SUzogVGhpcyBmaWxlLCBhbmQgYWxsIHRoZSBvdGhlciBDLUtlcm1pdCBm aWxlcywgbXVzdCBiZQorICBjb21wYXRpYmxlIHdpdGggQyBwcmVwcm9jZXNzb3JzIHRoYXQgc3Vw cG9ydCBvbmx5ICNpZmRlZiwgI2Vsc2UsICNlbmRpZiwKKyAgI2RlZmluZSwgYW5kICN1bmRlZi4g IFBsZWFzZSBkbyBub3QgdXNlICNpZiwgbG9naWNhbCBvcGVyYXRvcnMsIG9yIG90aGVyCisgIHBy ZXByb2Nlc3NvciBmZWF0dXJlcyBpbiBhbnkgb2YgdGhlIHBvcnRhYmxlIEMtS2VybWl0IG1vZHVs ZXMuICBZb3UgY2FuLAorICBvZiBjb3Vyc2UsIHVzZSB0aGVzZSBjb25zdHJ1Y3Rpb25zIGluIHBs YXRmb3JtLXNwZWNpZmljIG1vZHVsZXMgd2hlbiB0aGV5CisgIGFyZSBzdXBwb3J0ZWQgYnkgYWxs IGNvbXBpbGVycy9wcmVwcm9jZXNzb3JzIHRoYXQgY291bGQgYmUgdXNlZCBvbiB0aGF0CisgIHBs YXRmb3JtLgorKi8KKworZXh0ZXJuIGludCBuZXR0eXBlOwkJCS8qIERlZmluZWQgaW4gY2tjbWFp LmMgKi8KK2V4dGVybiBpbnQgZHVwbGV4OworCisvKiBJbmNsdWRlcyAqLworCisjaW5jbHVkZSAi Y2tjc3ltLmgiCQkJLyogVGhpcyBtdXN0IGdvIGZpcnN0ICAgKi8KKyNpbmNsdWRlICJja2NkZWIu aCIJCQkvKiBUaGlzIG11c3QgZ28gc2Vjb25kICAqLworCisjaWZkZWYgT1NGMTMKKyNpZmRlZiBD S19BTlNJQworI2lmZGVmIF9OT19QUk9UTworI3VuZGVmIF9OT19QUk9UTworI2VuZGlmIC8qIF9O T19QUk9UTyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1NGMTMgKi8KKwor I2lmbmRlZiBIUFVYUFJFNjUKKyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51bWJlciBz eW1ib2xzICovCisjZWxzZQorI2lmbmRlZiBFUlJOT19JTkNMVURFRAorI2luY2x1ZGUgPGVycm5v Lmg+CQkJLyogRXJyb3IgbnVtYmVyIHN5bWJvbHMgKi8KKyNlbmRpZgkvKiBFUlJOT19JTkNMVURF RCAqLworI2VuZGlmCS8qIEhQVVhQUkU2NSAqLworCisjaWZkZWYgX18zODZCU0RfXworI2RlZmlu ZSBFTk9UQ09OTiA1NworI2Vsc2UKKyNpZmRlZiBfX2JzZGlfXworI2RlZmluZSBFTk9UQ09OTiA1 NworI2Vsc2UKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2RlZmluZSBFTk9UQ09OTiA1NworI2VuZGlm IC8qIF9fRnJlZUJTRF9fICovCisjZW5kaWYgLyogX19ic2RpX18gKi8KKyNlbmRpZiAvKiBfXzM4 NkJTRF9fICovCisKKyNpZmRlZiBTQ09fT1NSNTA0CisjZGVmaW5lIE5CQlkgOAorI2VuZGlmIC8q IFNDT19PU1I1MDQgKi8KKworI2lmZGVmIFBsYW45CisjZGVmaW5lIFNFTEVDVAorI2luY2x1ZGUg PHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c2VsZWN0Lmg+CisjZGVmaW5lIEZEX1NFVFNJWkUgKDMg KiBzaXplb2YobG9uZykgKiA4KQorc3RhdGljIHN0cnVjdCB0aW1ldmFsIHR2OworI2VuZGlmIC8q IFBsYW45ICovCisKKyNpZmRlZiBDTElYCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAv KiBDTElYICovCisKKyNpbmNsdWRlICJja2NuZXQuaCIJCQkvKiBTeW1ib2xzIGZvciBuZXR3b3Jr IHR5cGVzLiAqLworI2lmZGVmIENLX1NTTAorI2luY2x1ZGUgImNrX3NzbC5oIgorI2VuZGlmIC8q IENLX1NTTCAqLworCisvKgorICBUaGUgZGlyZWN0b3J5LXJlbGF0ZWQgaW5jbHVkZXMgYXJlIGhl cmUgYmVjYXVzZSB3ZSBuZWVkIHRvIHRlc3Qgc29tZQorICBmaWxlLXN5c3RlbS1yZWxhdGVkIHN5 bWJvbHMgdG8gZmluZCBvdXQgd2hpY2ggc3lzdGVtIHdlJ3JlIGJlaW5nIGNvbXBpbGVkCisgIHVu ZGVyLiAgRm9yIGV4YW1wbGUsIE1BWE5BTUxFTiBpcyBkZWZpbmVkIGluIEJTRDQuMiBidXQgbm90 IDQuMS4KKyovCisjaWZkZWYgU0RJUkVOVAkJCQkvKiBEaXJlY3RvcnkgYml0cy4uLiAqLworI2Rl ZmluZSBESVJFTlQKKyNlbmRpZiAvKiBTRElSRU5UICovCisKKyNpZmRlZiBYTkRJUgorI2luY2x1 ZGUgPHN5cy9uZGlyLmg+CisjZWxzZSAvKiAhWE5ESVIgKi8KKyNpZmRlZiBORElSCisjaW5jbHVk ZSA8bmRpci5oPgorI2Vsc2UgLyogIU5ESVIsICFYTkRJUiAqLworI2lmZGVmIFJUVQorI2luY2x1 ZGUgIi91c3IvbGliL25kaXIuaCIKKyNlbHNlIC8qICFSVFUsICFORElSLCAhWE5ESVIgKi8KKyNp ZmRlZiBESVJFTlQKKyNpZmRlZiBTRElSRU5UCisjaW5jbHVkZSA8c3lzL2RpcmVudC5oPgorI2Vs c2UKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZiAvKiBTRElSRU5UICovCisjZWxzZSAvKiAh UlRVLCAhTkRJUiwgIVhORElSLCAhRElSRU5ULCBpLmUuIGFsbCBvdGhlcnMgKi8KKyNpbmNsdWRl IDxzeXMvZGlyLmg+CisjZW5kaWYgLyogRElSRU5UICovCisjZW5kaWYgLyogUlRVICovCisjZW5k aWYgLyogTkRJUiAqLworI2VuZGlmIC8qIFhORElSICovCisKKyNpZmRlZiBRTlgKKyNpbmNsdWRl IDxzeXMvZGV2Lmg+CisjZW5kaWYgLyogUU5YICovCisKKyNpZmRlZiBIUFVYNQorI2lmbmRlZiBU Q1BTT0NLRVQKKy8qIEkgZG9uJ3Qga25vdyB3aHkgdGhpcyBpcyBuZWVkZWQgaGVyZSBzaW5jZSB3 ZSBuZXZlciByZWZlcmVuY2UgYnplcm8oKS4gKi8KKy8qIEJ1dCB3aXRob3V0IGl0IEMtS2VybWl0 IHdvbid0IGxpbmsgaW4gYW4gSFAtVVggNS54eCBub24tVENQIGJ1aWxkLiAqLwordm9pZAorYnpl cm8ocyxuKSBjaGFyICpzOyBpbnQgbjsgeworICAgIGV4dGVybiBjaGFyICogbWVtc2V0KCk7Cisg ICAgbWVtc2V0KHMsMCxuKTsKK30KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBI UFVYNSAqLworCisvKiBEZWZpbml0aW9uIG9mIEhaLCB1c2VkIGluIG1zbGVlcCgpICovCisKKyNp ZmRlZiBNSVBTCisjZGVmaW5lIEhaICggMTAwMCAvIENMT0NLX1RJQ0sgKQorI2Vsc2UgIC8qIE1J UFMgKi8KKyNpZmRlZiBBVFRTVgorI2lmbmRlZiBOQVAKKyNpZmRlZiBUUlMxNgorI2RlZmluZSBI WiAoIDEwMDAgLyBDTE9DS19USUNLICkKKyNlbmRpZiAvKiBUUlMxNiAqLworI2lmZGVmIE5BUEhB Q0sKKyNkZWZpbmUgbmFwKHgpICh2b2lkKXN5c2NhbGwoMzExMiwgKHgpKQorI2RlZmluZSBOQVAK KyNlbmRpZiAvKiBOQVBIQUNLICovCisjZW5kaWYgLyogTkFQICovCisjZW5kaWYgLyogQVRUU1Yg Ki8KKyNlbmRpZiAvKiBNSVBTICovCisKKyNpZmRlZiBNX1VOSVgKKyN1bmRlZiBOR1JPVVBTX01B WAkJLyogUHJldmVudCBtdWx0aXBsZSBkZWZpbml0aW9uIHdhcm5pbmdzICovCisjZW5kaWYgLyog TV9VTklYICovCisKKy8qCisgIE5PVEU6IEhQLVVYIDguMCBoYXMgYSA8c3lzL3BvbGwuaD4sIGJ1 dCB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nCisgIGxpYnJhcnkgcm91dGluZSwgc28gX3BvbGwg Y29tZXMgdXAgdW5kZWZpbmVkIGF0IGxpbmsgdGltZS4KKyovCisjaWZkZWYgQ0tfUE9MTAorI2lm bmRlZiBBSVhSUwkJCS8qIElCTSBBSVggbmVlZHMgc3BlY2lhbCBoYW5kbGluZyAqLworI2luY2x1 ZGUgPHBvbGwuaD4JCS8qICJzdGFuZGFyZCIgKFNWSUQpIGkvbyBtdWx0aXBsZXhpbmcsIGV0YyAq LworI2Vsc2UgLyogQUlYUlMgKi8KKyNpZmRlZiBTVlI0CQkJLyogQUlYIDMuMiBpcyBsaWtlIFNW SUQuLi4gKi8KKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxzZQkJCQkvKiBCdXQgQUlYIDMuMSBpcyBu b3QgLi4uICovCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4JCS8qIFRoZSBpbmNsdWRlIGZpbGUgaXMg aW4gaW5jbHVkZS9zeXMgKi8KKyNkZWZpbmUgZXZlbnRzIHJlcWV2ZW50cwkvKiBBbmQgaXQgZG9l cyBub3QgbWFwIElCTS1zcGVjaWZpYyBtZW1iZXIgKi8KKyNkZWZpbmUgcmV2ZW50cyBydG5ldmVu dHMJLyogbmFtZXMgdG8gdGhlIFN5c3RlbSBWIGVxdWl2YWxlbnRzICovCisjZW5kaWYgLyogU1ZS NCAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYgLyogQ0tfUE9MTCAqLworCisjaW5jbHVk ZSA8c2lnbmFsLmg+ICAgICAgICAgICAgICAgICAgICAgLyogU2lnbmFscyAqLworCisvKiBGb3Ig c2V0am1wIGFuZCBsb25nam1wICovCisKKyNpZm5kZWYgWklMT0cKKyNpbmNsdWRlIDxzZXRqbXAu aD4KKyNlbHNlCisjaW5jbHVkZSA8c2V0cmV0Lmg+CisjZW5kaWYgLyogWklMT0cgKi8KKworLyoK KyAgVGhlIGZvbGxvd2luZyB0ZXN0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gNC4xIEJTRCBhbmQg NC4yICYgbGF0ZXIuCisgIElmIHlvdSBoYXZlIGEgNC4xQlNEIHN5c3RlbSB3aXRoIHRoZSBESVJF TlQgbGlicmFyeSwgdGhpcyB0ZXN0IGNvdWxkCisgIG1pc3Rha2VubHkgZGlhZ25vc2UgNC4yQlNE IGFuZCB0aGVuIGxhdGVyIGVuYWJsZSB0aGUgdXNlIG9mIHN5c3RlbSBjYWxscworICB0aGF0IGFy ZW4ndCBkZWZpbmVkLiAgSWYgaW5kZWVkIHRoZXJlIGFyZSBzdWNoIHN5c3RlbXMsIHdlIGNhbiB1 c2Ugc29tZQorICBvdGhlciB3YXkgb2YgdGVzdGluZyBmb3IgNC4xQlNELCBvciBhZGQgeWV0IGFu b3RoZXIgY29tcGlsZS10aW1lIHN3aXRjaC4KKyovCisjaWZkZWYgQlNENAorI2lmZGVmIE1BWE5B TUxFTgorI2lmbmRlZiBGVDIxCQkJCS8qIEV4Y2VwdCBmb3IgRm9ydHVuZS4gKi8KKyNpZm5kZWYg RlQxOAorI2lmbmRlZiBCRUxMVjEwCQkJCS8qIEFuZCBCZWxsIExhYnMgUmVzZWFyY2ggVU5JWCBW MTAgKi8KKyNkZWZpbmUgQlNENDIKKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogRlQx OCAqLworI2VuZGlmIC8qIEZUMjEgKi8KKyNlbmRpZiAvKiBNQVhOQU1MRU4gKi8KKyNlbmRpZiAv KiBCU0Q0ICovCisKKyNpZmRlZiBTVU5PUzQxCQkJCS8qIEZyb20gQ2hyaXN0aWFuIENvcnRpICov CisjZGVmaW5lIEJTRDQ0T1JQT1NJWAkJCS8qIFVuaSBTdHV0dGdhcnQgKi8KKyNkZWZpbmUgU1ZP UlBPU0lYCQkJLyogRmVicnVhcnkgMjAxMCAqLworI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNs dWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW1pdHMu aD4KKyNlbmRpZgkvKiBTVU5PUzQxICovCisKKyNpZmRlZiBTTkk1NDIKKyNpbmNsdWRlIDxzeXMv ZmlsaW8uaD4JCQkvKiAyOTkgZm9yIEZJT05SRUFEICovCisjZW5kaWYJLyogU05JNTQyICovCisK Ky8qCisgIE1pbml4IDIuMCBzdXBwb3J0IGFkZGVkIGJ5IFRlcnJ5IE1jQ29ubmVsbCwKKyAgU3ly YWN1c2UgVW5pdmVyc2l0eSA8dG1jQGJhcm55YXJkLnN5ci5lZHU+CisgIE5vIG1vcmUgc2d0dHkg aW50ZXJmYWNlLCBwb3NpeCBjb21wbGlhbnQuCisqLworI2lmZGVmIE1JTklYMgorI2RlZmluZSBf TUlOSVggICAvKiBOZWVkZWQgZm9yIHNvbWUgTWluaXggaGVhZGVyIGZpbGVzICovCisjZGVmaW5l IEJTRDQ0T1JQT1NJWAorI2RlZmluZSBTVk9SUE9TSVgKKyNpZm5kZWYgTUlOSVgzCisjZGVmaW5l IERDTFRJTUVWQUwKKyNlbmRpZgkvKiBNSU5JWDMgKi8KKyNkZWZpbmUgTk9GSUxFSAorI2luY2x1 ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHRlcm1p b3MuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyN1bmRlZiBUSU9DR0VUQyAgICAvKiBkZWZpbmVk IGluIHN5cy9pb2N0bC5oLCBidXQgbm90IHJlYWxseSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgVEFO REVNIDAKKyNlbmRpZiAvKiBNSU5JWDIgKi8KKworLyoKKyBNSU5JWCAxLjAgc3VwcG9ydCBhZGRl ZCBieSBDaGFybGVzIEhlZHJpY2ssCisgUnV0Z2VycyBVbml2ZXJzaXR5IDxoZWRyaWNrQGFyYW1p cy5ydXRnZXJzLmVkdT4uCisgTUlOSVggYWxzbyBoYXMgVjcgZW5hYmxlZC4KKyovCisjaWZkZWYg TUlOSVgKKyNkZWZpbmUgVEFOREVNIDAKKyNkZWZpbmUgTVlSRUFECisjZGVmaW5lIE5PU1lTSU9D VExICisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYgLyogTUlOSVggKi8KKworI2lmZGVmIENL X1JFRElSCQkvKiA8c3lzL3dhaXQuaD4gbmVlZGVkIG9ubHkgZm9yIFJFRElSRUNUIGNvbW1hbmQu ICovCisvKgorICBJZiBhbnlib2R5IGNhbiBmaWd1cmUgb3V0IGhvdyB0byBtYWtlIHRoaXMgd29y ayB3aXRoIE5lWFRTVEVQLCBiZQorICBteSBndWVzdCEgIChOZVhUQmxhaC9OZVhUQmxhaC9ic2Qv c3lzL3dhaXQuaCBkb2VzIG5vdCBkZWZpbmUgV0VYSVRTVEFUVVMpCisqLworI2lmbmRlZiBDS19X QUlUX0gJCQkvKiBJZiB3YWl0Lmggbm90IGFscmVhZHkgaW5jbHVkZWQuLi4gKi8KKyNpZmRlZiBP U0YJCQkJLyogZm9yY2UgT1NGIHRvIHNlbGVjdCBQT1NJWCB3YWl0ICovCisjaWZkZWYgX0JTRAkJ CQkvKiBpbnN0ZWFkIG9mIEJTRCAoc2VlIGNrY2RlYi5oKSAqLworI2RlZmluZSBDS19PU0ZfQlNE CisjdW5kZWYgX0JTRAorI2VuZGlmIC8qIF9CU0QgKi8KKyNlbmRpZiAvKiBPU0YgKi8KKyNpbmNs dWRlIDxzeXMvd2FpdC5oPgkJCS8qIEluY2x1ZGUgaXQgKi8KKyNpZmRlZiBPU0YKKyNpZmRlZiBD S19PU0ZfQlNECisjZGVmaW5lIF9CU0QJCQkJLyogUmVzdG9yZSBpdCAqLworI3VuZGVmIENLX09T Rl9CU0QKKyNlbmRpZiAvKiBDS19PU0ZfQlNEICovCisjZW5kaWYgLyogT1NGICovCisjZW5kaWYg LyogQ0tfV0FJVF9IICovCisjZW5kaWYgLyogQ0tfUkVESVIgKi8KKworI2luY2x1ZGUgImNrdXZl ci5oIgkJCS8qIFZlcnNpb24gaGVyYWxkICovCitjaGFyICpja3hzeXMgPSBIRVJBTEQ7CisKKyNp ZmRlZiBDS19VVFNOQU1FCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKworI2lmZGVmIFRSVTY0 CQkJCS8qIFRydTY0IFVOSVggNC4wIGFuZCBsYXRlciAqLworLyogVmVyaWZpZWQgb24gVHJ1NjQg NC4wRiAtIG1pZ2h0IGJyZWFrIG9uIDQuMEUgb3IgZWFybGllciAqLworI2luY2x1ZGUgPHN5cy9z eXNpbmZvLmg+CQkvKiAoZG9uJ3Qga25vdyBhYm91dCBPU0YvMSBvciBEVSkgKi8KKyNpbmNsdWRl IDxtYWNoaW5lL2hhbF9zeXNpbmZvLmg+CisjZW5kaWYgLyogVFJVNjQgKi8KKworI2lmZGVmIFNP TEFSSVMyNQkJCS8qIFNvbGFyaXMgMi41IGFuZCBsYXRlciAqLworI2luY2x1ZGUgPHN5cy9zeXN0 ZW1pbmZvLmg+CQkvKiAoZG9uJ3Qga25vdyBhYm91dCBlYXJsaWVyIG9uZXMpICovCisjZW5kaWYg LyogU09MQVJJUzI1ICovCisKKyNpZmRlZiBVVzcKKyNpZm5kZWYgU1lTX05NTE4KKyNkZWZpbmUg U1lTX05NTE4gMjU3CisjZW5kaWYgLyogTk1MTiAqLworI2VuZGlmIC8qIFVXNyAqLworI2lmZGVm IEhQVVg5UExVUworc3RhdGljIGludCBocGlzODAwID0gMDsKKyNlbmRpZiAvKiBIUFVYOVBMVVMg Ki8KKyNpZmRlZiBTWVNfTk1MTgorI2RlZmluZSBDS19TWVNOTUxOIFNZU19OTUxOCisjZWxzZQor I2lmZGVmIF9TWVNfTk1MTgorI2RlZmluZSBDS19TWVNOTUxOIF9TWVNfTk1MTgorI2Vsc2UKKyNp ZmRlZiBVVFNMRU4KKyNkZWZpbmUgQ0tfU1lTTk1MTiBVVFNMRU4KKyNlbHNlCisjZGVmaW5lIENL X1NZU05NTE4gMzEKKyNlbmRpZiAvKiBVVFNMRU4gKi8KKyNlbmRpZiAvKiBfU1lTX05NTE4gKi8K KyNlbmRpZiAvKiBTWVNfTk1MTiAqLworY2hhciB1bm1fbWNoW0NLX1NZU05NTE4rMV0gPSB7ICdc MCcsICdcMCcgfTsKK2NoYXIgdW5tX21vZFtDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAnIH07 CitjaGFyIHVubV9uYW1bQ0tfU1lTTk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9OworY2hhciB1bm1f cmVsW0NLX1NZU05NTE4rMV0gPSB7ICdcMCcsICdcMCcgfTsKK2NoYXIgdW5tX3ZlcltDS19TWVNO TUxOKzFdID0geyAnXDAnLCAnXDAnIH07CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworCisjaWZk ZWYgQ0lFCisjaW5jbHVkZSA8c3RhdC5oPgkJCS8qIEZvciBjaGFzaW5nIHN5bWxpbmtzLCBldGMu ICovCisjZWxzZQorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYgLyogQ0lFICovCisKKyNp ZmRlZiBRTlgJCQkJLyogMjk5ICovCisjaWZuZGVmIElYQU5ZCisjZGVmaW5lIElYQU5ZIDAKKyNl bmRpZgkvKiBJWEFOWSAqLworI2VuZGlmCS8qIFFOWCAqLworCisvKiBVVUNQIGxvY2tmaWxlIG1h dGVyaWFsLi4uICovCisKKyNpZm5kZWYgTk9VVUNQCisjaWZkZWYgVVNFVFRZTE9DSworI2lmZGVm IEhBVkVfTE9DS0RFVgkJCS8qIFJlZCBIYXQgYmF1ZGJveS9sb2NrZGV2ICovCisvKgorICBXYXRj aCBvdXQ6IGJhdWRib3kuaCByZWZlcmVuY2VzIG9wZW4oKSB3aXRob3V0IG1ha2luZyBzdXJlIGl0 IGhhcyBiZWVuCisgIGRlY2xhcmVkLCByZXN1bHRpbmcgaW4gd2FybmluZ3Mgb24gYXQgbGVhc3Qg UmVkIEhhdCA3LjMuICBJdCdzIGRlY2xhcmVkIGluCisgIGZjbnRsLmgsIGJ1dCB3ZSBkb24ndCBp bmNsdWRlIHRoYXQgdW50aWwgbGF0ZXIuICBJbiB0aGlzIGNhc2Ugb25seSwgd2UKKyAgaW5jbHVk ZSBpdCBoZXJlLCBhbmQgdGhlbiB0aGUgc2Vjb25kIGluY2x1ZGUgaXMgaGFybWxlc3MgYmVjYXVz ZSBpbiBSZWQgSGF0CisgIExpbnV4ICh0aGUgb25seSBwbGFjZSB3aGVyZSB5b3UgZmluZCBiYXVk Ym95LmgpIGZjbnRsLmggaXMgcHJvdGVjdGVkIGZyb20KKyAgbXVsdGlwbGUgaW5jbHVzaW9uIGJ5 IF9GQ05UTF9ILiAgIC0gZmRjLCAxMCBNYXkgMjAwNC4KKworICBOT1RFOiBBbHRob3VnaCBMaW51 eCAvdXNyL3NiaW4vbG9ja2RldiBvYnZpYXRlcyB0aGUgbmVlZCBmb3Igc2V0dWlkIG9yCisgIHNl dGdpZCBiaXRzIHRvIGFjY2VzcyB0aGUgbG9ja2ZpbGUsIEMtS2VybWl0IHdpbGwgc3RpbGwgbmVl ZCB0aGVtIHRvIGFjY2VzcworICB0aGUgc2VyaWFsIHBvcnQgaXRzZWxmIHVubGVzcyB0aGUgcG9y dCBpcyBvcGVuIGZvciB3b3JsZCByZWFkL3dyaXRlLgorICBOb3JtYWxseSBzZXRnaWQgdXVjcCBk b2VzIHRoZSB0cmljay4KKworICBFeHRyYTogSEFWRV9MT0NLREVWIGhhcyBiZWVuIGFkZGVkIGFs cyBvcGVuU3VTRSA+PSAxMS4zIGRvZXNuJ3QgdXNlIGJhdWRib3kKKyAgYnV0IHR0eWxvY2suICAt IGpiLCAyNiBKdWwgMjAxMAorKi8KKyNpbmNsdWRlIDxmY250bC5oPgkJCS8qIFRoaXMgaGFzIHRv IGNvbWUgYmVmb3JlIGJhdWRib3kgKi8KKyNpZmRlZiBIQVZFX0JBVURCT1kJCQkvKiBSZWQgSGF0 IGJhdWRib3kvbG9ja2RldiAqLworI2luY2x1ZGUgPGJhdWRib3kuaD4KKyNlbHNlICAvKiAhSEFW RV9CQVVEQk9ZICovCQkvKiBvcGVuU3VTRSBsb2NrIHZpYSB0dHlsb2NrICovCisjaW5jbHVkZSA8 dHR5bG9jay5oPgorI2VuZGlmICAvKiBIQVZFX0JBVURCT1kgKi8KKyNkZWZpbmUgTE9DS19ESVIg Ii92YXIvbG9jayIJCS8qIChldmVuIHRob3VnaCB3ZSBkb24ndCBjYXJlKSAqLworCisjZWxzZSAg LyogIUhBVkVfTE9DS0RFViAqLworCisjaWZkZWYgVVNFX1VVX0xPQ0sKKyNpZmRlZiBfX0ZyZWVC U0RfXworI2luY2x1ZGUgPGxpYnV0aWwuaD4JCQkvKiBGcmVlQlNEICovCisjZWxzZQorI2luY2x1 ZGUgPHV0aWwuaD4JCQkvKiBPcGVuQlNEICovCisjZW5kaWYgLyogSEFWRV9MT0NLREVWICovCisj ZW5kaWYgLyogX19GcmVlQlNEICovCisjZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KKyNlbHNlICAv KiBVU0VUVFlMT0NLICovCisKKy8qIE5hbWUgb2YgVVVDUCB0dHkgZGV2aWNlIGxvY2tmaWxlICov CisKKyNpZmRlZiBMSU5VWEZTU1RORAorI2lmbmRlZiBIREJVVUNQCisjZGVmaW5lIEhEQlVVQ1AK KyNlbmRpZiAvKiBIREJVVUNQICovCisjZW5kaWYgLyogTElOVVhGU1NUTkQgKi8KKworI2lmZGVm IEFDVUNOVFJMCisjZGVmaW5lIExDS0RJUgorI2VuZGlmIC8qIEFDVUNOVFJMICovCisKKy8qCisg IFBJRFNUUklORyBtZWFucyB1c2UgQVNDSUkgc3RyaW5nIHRvIHJlcHJlc2VudCBwaWQgaW4gbG9j a2ZpbGUuCisqLworI2lmbmRlZiBQSURTVFJJTkcKKyNpZmRlZiBIREJVVUNQCisjZGVmaW5lIFBJ RFNUUklORworI2Vsc2UKKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBQSURTVFJJTkcKKyNlbHNlCisj aWZkZWYgUlRBSVgKKyNkZWZpbmUgUElEU1RSSU5HCisjZWxzZQorI2lmZGVmIEFJWFJTCisjZGVm aW5lIFBJRFNUUklORworI2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBQSURTVFJJTkcK KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYgLyogUlRB SVggKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIEhEQlVVQ1AgKi8KKyNlbmRpZiAv KiBQSURTVFJJTkcgKi8KKworLyogTm93IHRoZSBQSURTVFJJTkcgZXhjZXB0aW9ucy4uLiAqLwor CisjaWZkZWYgUElEU1RSSU5HCisjaWZkZWYgSFBVWAorI3VuZGVmIFBJRFNUUklORworI2VuZGlm IC8qIEhQVVggKi8KKyNlbmRpZiAvKiBQSURTVFJJTkcgKi8KKworI2lmZGVmIF9fYnNkaV9fCQkJ CS8qIEJTREkgKGF0IGxlYXN0IHRocnUgMS4xKSAqLworI2lmZGVmIFBJRFNUUklORworI3VuZGVm IFBJRFNUUklORworI2VuZGlmIC8qIFBJRFNUUklORyAqLworI2VuZGlmIC8qIF9fYnNkaV9fICov CisKKyNpZmRlZiBPU0YzMgkJCQkvKiBEaWdpdGFsIFVOSVggKE9TRi8xKSAzLjIgKi8KKyNpZmRl ZiBQSURTVFJJTkcKKyN1bmRlZiBQSURTVFJJTkcKKyNlbmRpZiAvKiBQSURTVFJJTkcgKi8KKyNl bmRpZiAvKiBPU0YzMiAqLworCisvKgorICBMT0NLX0RJUiBpcyB0aGUgbmFtZSBvZiB0aGUgbG9j a2ZpbGUgZGlyZWN0b3J5LgorICBJZiBMT0NLX0RJUiBpcyBhbHJlYWR5IGRlZmluZWQgKGUuZy4g b24gY29tbWFuZCBsaW5lKSwgd2UgZG9uJ3QgY2hhbmdlIGl0LgorKi8KKworI2lmbmRlZiBMT0NL X0RJUgorI2lmZGVmIE1BQ09TWAorI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrIgor I2VuZGlmIC8qIE1BQ09TWCAqLworI2VuZGlmLyogTE9DS19ESVIgKi8KKworI2lmbmRlZiBMT0NL X0RJUgorI2lmZGVmIEJTRDQ0CisjaWZkZWYgX18zODZCU0RfXworI2RlZmluZSBMT0NLX0RJUiAi L3Zhci9zcG9vbC9sb2NrIgorI2Vsc2UKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2RlZmluZSBMT0NL X0RJUiAiL3Zhci9zcG9vbC9sb2NrIgorI2Vsc2UKKyNpZmRlZiBfX05ldEJTRF9fCisjZGVmaW5l IExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2siCisjZWxzZQorI2lmZGVmIF9fT3BlbkJTRF9fCisj ZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2siCisjZWxzZQorLyogU28gd2hpY2ggb25l cyBpcyB0aGlzIGZvcj8gKi8KKy8qIFByb2JhYmx5IG9yaWdpbmFsIDQuNEJTRCBvbiBWYW5nb2do ICovCisvKiBQbHVzIHdobyBrbm93cyBhYm91dCBNYWMgT1MgWC4uLiBJdCBkb2Vzbid0IGV2ZW4g aGF2ZSBhIGN1IHByb2dyYW0gKi8KKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvdXVjcCIK KyNlbmRpZiAvKiBfX09wZW5CU0RfXyAqLworI2VuZGlmIC8qIF9fTmV0QlNEX18gKi8KKyNlbmRp ZiAvKiBfX0ZyZWVCU0RfXyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNlbHNlCisjaWZk ZWYgREdVWDQzMAorI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKKyNlbHNlCisj aWZkZWYgSFBVWDEwCisjZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tzIgorI2Vsc2UK KyNpZmRlZiBSVEFJWAkJCQkvKiBJQk0gUlQgUEMgQUlYIDIuMi4xICovCisjZGVmaW5lIExPQ0tf RElSICIvZXRjL2xvY2tzIgorI2Vsc2UKKyNpZmRlZiBBSVhSUworI2RlZmluZSBMT0NLX0RJUiAi L2V0Yy9sb2NrcyIKKyNlbHNlCisjaWZkZWYgSVNJSUkKKyNkZWZpbmUgTE9DS19ESVIgIi9ldGMv bG9ja3MiCisjZWxzZQorI2lmZGVmIEhEQlVVQ1AKKyNpZmRlZiBNX1NZUzUKKyNkZWZpbmUgTE9D S19ESVIgIi91c3Ivc3Bvb2wvdXVjcCIKKyNlbHNlCisjaWZkZWYgTV9VTklYCisjZGVmaW5lIExP Q0tfRElSICIvdXNyL3Nwb29sL3V1Y3AiCisjZWxzZQorI2lmZGVmIFNWUjQKKyNkZWZpbmUgTE9D S19ESVIgIi92YXIvc3Bvb2wvbG9ja3MiCisjZWxzZQorI2lmZGVmIFNVTk9TNAorI2RlZmluZSBM T0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKKyNlbHNlCisjaWZkZWYgTElOVVhGU1NUTkQKKyNk ZWZpbmUgTE9DS19ESVIgIi92YXIvbG9jayI7CisjZWxzZQorI2RlZmluZSBMT0NLX0RJUiAiL3Vz ci9zcG9vbC9sb2NrcyIKKyNlbmRpZiAvKiBMSU5VWEZTU1RORCAqLworI2VuZGlmIC8qIFNVTk9T NCAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBNX1VOSVggKi8KKyNlbmRpZiAvKiBN X1NZUzUgKi8KKyNlbHNlCisjaWZkZWYgTENLRElSCisjZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nw b29sL3V1Y3AvTENLIgorI2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBMT0NLX0RJUiAi L3Vzci9zcG9vbC91dWNwIgorI2Vsc2UKKyNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvdXVj cCIKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIExDS0RJUiAqLworI2VuZGlmIC8q IEhEQlVVQ1AgKi8KKyNlbmRpZiAvKiBJU0lJSSAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5k aWYgLyogUlRBSVggKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBER1VYNDMwICov CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiAhTE9DS19ESVIgKG91dHNpZGUgaWZuZGVm KSAqLworCisjaWZkZWYgT1NGMgkJCQkvKiBPU0YvMSAyLjAgb3IgbGF0ZXIgKi8KKyNpZmRlZiBM T0NLX0RJUgkJCQkvKiAobWF5YmUgMS54IHRvbywgd2hvIGtub3dzLi4uKSAqLworI3VuZGVmIExP Q0tfRElSCisjZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL2xvY2tzIgorI2VuZGlmIC8qIExP Q0tfRElSICovCisjZW5kaWYgLyogT1NGMiAqLworCisjaWZkZWYgQ09NTUVOVAorLyogU29ycnkg bm8gbW9yZSBsb2NrZigpIC0tIHdlIGxvY2sgZmlyc3QgYW5kIFRIRU4gb3BlbiB0aGUgZGV2aWNl LiAqLworI2lmZGVmIFNWUjQKKyNpZm5kZWYgQlNENDQKKyNpZm5kZWYgTE9DS0YKKyNkZWZpbmUg TE9DS0YJCQkJLyogVXNlIGxvY2tmKCkgb24gdHR5IGRldmljZSBpbiBTVlI0ICovCisjZW5kaWYg LyogTE9DS0YgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBOT0xPQ0tGCQkJCS8qIEJ1dCBOT0xPQ0tGIGNhbmNl bHMgTE9DS0YgKi8KKyNpZmRlZiBMT0NLRgorI3VuZGVmIExPQ0tGCisjZW5kaWYgLyogTE9DS0Yg Ki8KKyNlbmRpZiAvKiBOT0xPQ0tGICovCisKKy8qIE1vcmUgYWJvdXQgdGhpcyBiZWxvdy4uLiAq LworCisjZW5kaWYgLyogVVNFVFRZTE9DSyAqLworI2VuZGlmIC8qIE5PVVVDUCAqLworCisvKgor ICBNWVJFQUQgbWVhbnMgdXNlIG91ciBpbnRlcm5hbGx5IGRlZmluZWQgbm9uYmxvY2tpbmcgYnVm ZmVyZWQgcmVhZCByb3V0aW5lLgorKi8KKyNpZmRlZiBBVFRTVgorI2RlZmluZSBNWVJFQUQKKyNl bmRpZiAvKiBBVFRTViAqLworCisjaWZkZWYgQVRUNzMwMAorI2lmbmRlZiBNWVJFQUQKKyNkZWZp bmUgTVlSRUFECisjZW5kaWYgLyogTVlSRUFEICovCisvKiBiaXRzIGZvciBhdHRtb2RlbTogaW50 ZXJuYWwgbW9kZW0gaW4gdXNlLCByZXN0YXJ0IGdldHR5ICovCisjZGVmaW5lIElTTU9ERU0gMQor I2RlZmluZSBET0dFVFkgNTEyCisjZW5kaWYgIC8qIEFUVDczMDAgKi8KKworI2lmZGVmIEJTRDQy CisjZGVmaW5lIE1ZUkVBRAorI2VuZGlmIC8qIEJTRDQyICovCisKKyNpZmRlZiBQT1NJWAorI2Rl ZmluZSBNWVJFQUQKKyNlbmRpZiAvKiBQT1NJWCAqLworI2lmZGVmIF9fYnNkaV9fCisjaWZuZGVm IE9fTkRFTEFZCisjZGVmaW5lIE9fTkRFTEFZIE9fTk9OQkxPQ0sKKyNlbmRpZiAvKiBPX05ERUxB WSAqLworI2VuZGlmIC8qIF9fYnNkaV9fICovCisKKy8qCisgVmFyaWFibGVzIGF2YWlsYWJsZSB0 byBvdXRzaWRlIHdvcmxkOgorCisgICBkZnR0eSAgLS0gUG9pbnRlciB0byBkZWZhdWx0IHR0eSBu YW1lIHN0cmluZywgbGlrZSAiL2Rldi90dHkiLgorICAgZGZsb2MgIC0tIDAgaWYgZGZ0dHkgaXMg Y29uc29sZSwgMSBpZiBleHRlcm5hbCBsaW5lLgorICAgZGZwcnR5IC0tIERlZmF1bHQgcGFyaXR5 CisgICBkZmZsb3cgLS0gRGVmYXVsdCBmbG93IGNvbnRyb2wKKyAgIGNreGVjaCAtLSBGbGFnIGZv ciB3aG8gZWNob2VzIGNvbnNvbGUgdHlwZWluOgorICAgICAxIC0gVGhlIHByb2dyYW0gKHN5c3Rl bSBlY2hvIGlzIHR1cm5lZCBvZmYpCisgICAgIDAgLSBUaGUgc3lzdGVtIChvciBmcm9udCBlbmQs IG9yIHRlcm1pbmFsKS4KKyAgIGZ1bmN0aW9ucyB0aGF0IHdhbnQgdG8gZG8gdGhlaXIgb3duIGVj aG9pbmcgc2hvdWxkIGNoZWNrIHRoaXMgZmxhZworICAgYmVmb3JlIGRvaW5nIHNvLgorCisgICBm bGZuYW0gIC0tIE5hbWUgb2YgbG9jayBmaWxlLCBpbmNsdWRpbmcgaXRzIHBhdGgsIGUuZy4sCisg ICAgICAgICAgICAgICAgIi91c3Ivc3Bvb2wvdXVjcC9MQ0suLmN1bDAiIG9yICIvZXRjL2xvY2tz L3R0eTc3IgorICAgbGtmbGZuICAtLSBOYW1lIG9mIGxpbmsgdG8gbG9jayBmaWxlLCBpbmNsdWRp bmcgaXRzIHBhdGhzCisgICBoYXNsb2NrIC0tIEZsYWcgc2V0IGlmIHRoaXMga2VybWl0IGVzdGFi bGlzaGVkIGEgdXVjcCBsb2NrLgorICAgbG9ja3BpZCAtLSBQSUQgb2Ygb3RoZXIgcHJvY2VzcyB0 aGF0IGhhcyBkZXNpcmVkIGxpbmUgb3BlbiwgYXMgc3RyaW5nLgorICAgYmFja2dyZCAtLSBGbGFn IGluZGljYXRpbmcgcHJvZ3JhbSBleGVjdXRpbmcgaW4gYmFja2dyb3VuZCAoICYgb24KKyAgICAg ICAgICAgICAgICBlbmQgb2Ygc2hlbGwgY29tbWFuZCkuIFVzZWQgdG8gaWdub3JlIElOVCBhbmQg UVVJVCBzaWduYWxzLgorICAgcnR1X2J1ZyAtLSBTZXQgYnkgc3RwdHJhcCgpLiAgUlRVIHRyZWF0 cyBeWiBhcyBFT0YgKGJ1dCBvbmx5IHdoZW4gd2UgaGFuZGxlCisgICAgICAgICAgICAgICAgU0lH VFNUUCkKKworIEZ1bmN0aW9ucyBmb3IgYXNzaWduZWQgY29tbXVuaWNhdGlvbiBsaW5lIChlaXRo ZXIgZXh0ZXJuYWwgb3IgY29uc29sZSB0dHkpOgorCisgICBzeXNpbml0KCkgICAgICAgICAgICAg ICAtLSBTeXN0ZW0gZGVwZW5kZW50IHByb2dyYW0gaW5pdGlhbGl6YXRpb24KKyAgIHN5c2NsZWFu dXAoKSAgICAgICAgICAgIC0tIFN5c3RlbSBkZXBlbmRlbnQgcHJvZ3JhbSBzaHV0ZG93bgorICAg dHRvcGVuKHR0bmFtZSxsb2NhbCxtZG10eXAsdGltbykgLS0gT3BlbiB0aGUgbmFtZWQgdHR5IGZv ciBleGNsdXNpdmUgYWNjZXNzLgorICAgdHRjbG9zKCkgICAgICAgICAgICAgICAgLS0gQ2xvc2Ug JiByZXNldCB0aGUgdHR5LCByZWxlYXNpbmcgYW55IGFjY2VzcyBsb2NrLgorICAgdHRzc3BkKGNw cykgICAgICAgICAgICAgLS0gU2V0IHRoZSB0cmFuc21pc3Npb24gc3BlZWQgb2YgdGhlIHR0eS4K KyAgIHR0Z3NwZCgpICAgICAgICAgICAgICAgIC0tIEdldCAocmVhZCkgdGhlIHRoZSB0cmFuc21p c3Npb24gc3BlZWQgb2YgdGhlIHR0eS4KKyAgIHR0cGt0KHNwZWVkLGZsb3cscGFyaXR5KSAtLSBQ dXQgdGhlIHR0eSBpbiBwYWNrZXQgbW9kZSBhbmQgc2V0IHRoZSBzcGVlZC4KKyAgIHR0dnQoc3Bl ZWQsZmxvdykgICAgICAgIC0tIFB1dCB0aGUgdHR5IGluIHZpcnR1YWwgdGVybWluYWwgbW9kZS4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgaW4gRElBTElORyBvciBDT05ORUNU RUQgbW9kZW0gY29udHJvbCBzdGF0ZS4KKyAgIHR0cmVzKCkgICAgICAgICAgICAgICAgIC0tIFJl c3RvcmUgb3JpZ2luYWwgdHR5IG1vZGVzLgorICAgdHRzY2FycihjYXJyaWVyKSAgICAgICAgLS0g U2V0IGNhcnJpZXIgY29udHJvbCBtb2RlLCBvbi9vZmYvYXV0by4KKyAgIHR0aW5sKGRlc3QsbWF4 LHRpbW8pICAgIC0tIFRpbWVkIHJlYWQgbGluZSBmcm9tIHRoZSB0dHkuCisgICB0dGluYyh0aW1v KSAgICAgICAgICAgICAtLSBUaW1lZCByZWFkIGNoYXJhY3RlciBmcm9tIHR0eS4KKyAgIG15cmVh ZCgpICAgICAgICAgICAgICAgIC0tIFJhdyBtb2RlIGJ1bGsgYnVmZmVyIHJlYWQsIGdpdmVzIHN1 YnNlcXVlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnMgb25lIGF0IGEg dGltZSBhbmQgc2ltdWxhdGVzIEZJT05SRUFELgorICAgbXl1bnJkKGMpICAgICAgICAgICAgICAg LS0gUGxhY2VzIGMgYmFjayBpbiBidWZmZXIgdG8gYmUgcmVhZCAob25lIG9ubHkpCisgICB0dGNo aygpICAgICAgICAgICAgICAgICAtLSBTZWUgaG93IG1hbnkgY2hhcmFjdGVycyBpbiB0dHkgaW5w dXQgYnVmZmVyLgorICAgdHR4aW4obixidWYpICAgICAgICAgICAgLS0gUmVhZCBuIGNoYXJhY3Rl cnMgZnJvbSB0dHkgKHVudGltZWQpLgorICAgdHRvbChzdHJpbmcsbGVuZ3RoKSAgICAgLS0gV3Jp dGUgYSBzdHJpbmcgdG8gdGhlIHR0eS4KKyAgIHR0b2MoYykgICAgICAgICAgICAgICAgIC0tIFdy aXRlIGEgY2hhcmFjdGVyIHRvIHRoZSB0dHkuCisgICB0dGZsdWkoKSAgICAgICAgICAgICAgICAt LSBGbHVzaCB0dHkgaW5wdXQgYnVmZmVyLgorICAgdHRzbmRiKCkgICAgICAgICAgICAgICAgLS0g U2VuZCBCUkVBSyBzaWduYWwuCisgICB0dHNuZGxiKCkgICAgICAgICAgICAgICAtLSBTZW5kIExv bmcgQlJFQUsgc2lnbmFsLgorCisgICB0dGxvY2sodHRuYW1lKSAgICAgICAgICAtLSAiTG9jayIg dHR5IGRldmljZSBhZ2FpbnN0IHV1Y3AgY29sbGlzaW9ucy4KKyAgIHR0dW5sY2soKSAgICAgICAg ICAgICAgIC0tIFVubG9jayB0dHkgZGV2aWNlLgorCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGb3IgQVRUNzMwMC9Vbml4IFBDLCBTeXN0ZW0gVjoKKyAgIGF0dGRpYWwodHRuYW1lLHNw ZWVkLHRlbG5icikgLS0gZGlhbHMgQVRUNzMwMC9Vbml4IFBDIGludGVybmFsIG1vZGVtCisgICBv ZmZnZXR0eSh0dG5hbWUpICAgICAgICAtLSBUdXJucyBvZmYgZ2V0dHkoMW0pIGZvciBjb21tcyBs aW5lCisgICBvbmdldHR5KHR0bmFtZSkgICAgICAgICAtLSBSZXN0b3JlcyBnZXR0eSgpIHRvIGNv bW1zIGxpbmUKKyovCisKKy8qCitGdW5jdGlvbnMgZm9yIGNvbnNvbGUgdGVybWluYWw6CisKKyAg IGNvbmdtKCkgICAtLSBHZXQgY29uc29sZSB0ZXJtaW5hbCBtb2Rlcy4KKyAgIGNvbmNiKGVzYykg LS0gUHV0IHRoZSBjb25zb2xlIGluIHNpbmdsZS1jaGFyYWN0ZXIgd2FrZXVwIG1vZGUgd2l0aCBu byBlY2hvLgorICAgY29uYmluKGVzYykgLS0gUHV0IHRoZSBjb25zb2xlIGluIGJpbmFyeSAocmF3 KSBtb2RlLgorICAgY29ucmVzKCkgIC0tIFJlc3RvcmUgdGhlIGNvbnNvbGUgdG8gbW9kZSBvYnRh aW5lZCBieSBjb25nbSgpLgorICAgY29ub2MoYykgIC0tIFVuYnVmZmVyZWQgb3V0cHV0LCBvbmUg Y2hhcmFjdGVyIHRvIGNvbnNvbGUuCisgICBjb25vbChzKSAgLS0gVW5idWZmZXJlZCBvdXRwdXQs IG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGNvbnNvbGUuCisgICBjb25vbGEocykgLS0g VW5idWZmZXJlZCBvdXRwdXQsIGFycmF5IG9mIHN0cmluZ3MgdG8gdGhlIGNvbnNvbGUuCisgICBj b254byhuLHMpIC0tIFVuYnVmZmVyZWQgb3V0cHV0LCBuIGNoYXJhY3RlcnMgdG8gdGhlIGNvbnNv bGUuCisgICBjb25jaGsoKSAgLS0gQ2hlY2sgaWYgY2hhcmFjdGVycyBhdmFpbGFibGUgYXQgY29u c29sZSAoYnNkIDQuMikuCisgICAgICAgICAgICAgICAgQ2hlY2sgaWYgZXNjYXBlIGNoYXIgKF5c KSB0eXBlZCBhdCBjb25zb2xlIChTeXN0ZW0gSUlJL1YpLgorICAgY29uaW5jKHRpbW8pICAtLSBU aW1lZCBnZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29sZS4KKyAgIGNvbmdrcyh0aW1vKSAg LS0gVGltZWQgZ2V0IGtleWJvYXJkIHNjYW4gY29kZS4KKyAgIGNvbmludCgpICAtLSBFbmFibGUg dGVybWluYWwgaW50ZXJydXB0cyBvbiB0aGUgY29uc29sZSBpZiBub3QgYmFja2dyb3VuZC4KKyAg IGNvbm5vaSgpICAtLSBEaXNhYmxlIHRlcm1pbmFsIGludGVycnVwdHMgb24gdGhlIGNvbnNvbGUg aWYgbm90IGJhY2tncm91bmQuCisKK1RpbWUgZnVuY3Rpb25zCisKKyAgIG1zbGVlcChtKSAtLSBN aWxsaXNlY29uZCBzbGVlcAorICAgenRpbWUoJnMpIC0tIFJldHVybiBwb2ludGVyIHRvIGRhdGUv dGltZSBzdHJpbmcKKyAgIHJ0aW1lcigpIC0tICBSZXNldCB0aW1lcgorICAgZ3RpbWVyKCkgIC0t IEdldCBlbGFwc2VkIHRpbWUgc2luY2UgbGFzdCBjYWxsIHRvIHJ0aW1lcigpCisqLworCisvKiBD b25kaXRpb25hbCBJbmNsdWRlcyAqLworCisvKiBXaGV0aGVyIHRvIGluY2x1ZGUgPHN5cy9maWxl Lmg+ICovCisKKyNpZmRlZiBSVFUJCQkJLyogUlRVIGRvZXNuJ3QgKi8KKyNkZWZpbmUgTk9GSUxF SAorI2VuZGlmIC8qIFJUVSAqLworCisjaWZkZWYgQ0lFCQkJCS8qIENJRSBkb2VzLiAqLworI3Vu ZGVmIE5PRklMRUgKKyNlbmRpZiAvKiBDSUUgKi8KKworI2lmZGVmIEJTRDQxCQkJCS8qIDQuMSBC U0QgZG9lc24ndCAqLworI2RlZmluZSBOT0ZJTEVICisjZW5kaWYgLyogQlNENDEgKi8KKworI2lm ZGVmIGlzNjhrCQkJCS8qIEludGVncmF0ZWQgU29sdXRpb25zIDY4MDAwIFVOSVggICovCisjZGVm aW5lIE5PRklMRUgJCQkJLyogZS5nLiBvbiBQbGV4dXggUDYwIGFuZCBTdW4tMSAqLworI2VuZGlm IC8qIGlzNjhrICovCisKKyNpZmRlZiBNSU5JWAkJCQkvKiBNSU5JWCAqLworI2RlZmluZSBOT0ZJ TEVICisjZW5kaWYgLyogTUlOSVggKi8KKworI2lmZGVmIENPSEVSRU5UCQkJCS8qIENvaGVyZW50 ICovCisjZGVmaW5lIE5PRklMRUgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZuZGVmIE5P RklMRUgJCQkJLyogTm93IGluY2x1ZGUgaWYgc2VsZWN0ZWQuICovCisjaW5jbHVkZSA8c3lzL2Zp bGUuaD4KKyNlbmRpZiAvKiBOT0ZJTEVIICovCisKKy8qIFBPU0lYICovCisKKyNpZmRlZiBCU0Q0 NE9SUE9TSVgJCQkvKiBQT1NJWCB1c2VzIHRlcm1pb3MuaCAqLworI2RlZmluZSBURVJNSU9TCisj aWZkZWYgX19ic2RpX18KKyNpZmRlZiBQT1NJWAorI3VuZGVmIF9QT1NJWF9TT1VSQ0UJCQkvKiBH ZXQgZXh0cmEgc3R1ZmYgZnJvbSB0ZXJtaW9zLmggKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2Vu ZGlmIC8qIF9fYnNkaV9fICovCisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2lmZGVmIExJTlVYCisj aW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYgLyogTElOVVggKi8KKyNpZmRlZiBRTlgxNgor I2luY2x1ZGUgPGlvY3RsLmg+CisjZWxzZQorI2lmZGVmIFFOWDYKKyNpbmNsdWRlIDxpb2N0bC5o PgorI2VuZGlmIC8qIFFOWDYgKi8KKyNlbmRpZiAvKiBRTlgxNiAqLworI2lmZGVmIF9fYnNkaV9f CisjaWZkZWYgUE9TSVgKKyNkZWZpbmUgX1BPU0lYX1NPVVJDRQorI2VuZGlmIC8qIFBPU0lYICov CisjZW5kaWYgLyogX19ic2RpX18gKi8KKyNpZm5kZWYgQlNENDQJCQkJLyogUmVhbGx5IFBPU0lY ICovCisjaWZuZGVmIENLX1FOWDMyCQkJLyogd2FzIENLX1FOWDMyICovCisjZGVmaW5lIE5PU1lT SU9DVExICQkJLyogTm8gaW9jdGwncyBhbGxvd2VkLiAqLworI3VuZGVmIHVsdHJpeAkJCQkvKiBU dXJuIG9mZiBhbnkgdWx0cml4IGZlYXR1cmVzLiAqLworI2VuZGlmIC8qIENLX1FOWDMyICovCisj ZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworCisvKiBTeXN0ZW0gSUlJLCBT eXN0ZW0gViAqLworCisjaWZkZWYgQVRUU1YKKyNpZm5kZWYgQlNENDQKKyNpZm5kZWYgUE9TSVgK KyNpbmNsdWRlIDx0ZXJtaW8uaD4KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIEJTRDQ0 ICovCisjaWZkZWYgVEVSTUlPWAorLyogTmVlZCB0aGlzIGZvciB0ZXJtaW94IHN0cnVjdHVyZSwg UlRTL0NUUyBhbmQgRFRSL0NEIGZsb3cgY29udHJvbCAqLworI2luY2x1ZGUgPHRlcm1pb3guaD4K KyAgc3RydWN0IHRlcm1pb3ggcmN0c3g7CisjZWxzZQorI2lmZGVmIFNURVJNSU9YCisjaWZkZWYg U0NPX09TUjUwNAorLyogU29ycnksIHRoaXMgaXMgdHJ1bHkgZGlzZ3VzdGluZyBidXQgaXQncyBT Q08ncyBmYXVsdC4gKi8KKyNpZm5kZWYgX1NWSUQzCisjZGVmaW5lIF9DS19TVklEM19YCisjZGVm aW5lIF9TVklEMworI2VuZGlmIC8qIF9TVklEMyAqLworI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8K KyNpbmNsdWRlIDxzeXMvdGVybWlveC5oPgorICBzdHJ1Y3QgdGVybWlveCByY3RzeDsKKyNpZmRl ZiBDS19TVklEM19YCisjdW5kZWYgX1NWSUQzCisjdW5kZWYgQ0tfU1ZJRDNfWAorI2VuZGlmIC8q IENLX1NWSUQzX1ggKi8KKyNlbmRpZiAvKiBTVEVSTUlPWCAqLworI2VuZGlmIC8qIFRFUk1JT1gg Ki8KKyNlbmRpZiAvKiBBVFRTViAqLworCisjaWZkZWYgQ09IRVJFTlQJCQkvKiBVc2UgdGVybWlv LmgsIG5vdCBzZ3R0eS5oIGZvciBDb2hlcmVudCAqLworI2luY2x1ZGUgPHRlcm1pby5oPgorI2Vu ZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBNSU5JWAkJCQkvKiBNSU5JWCB1c2VzIGlvY3Rs J3MgKi8KKyNkZWZpbmUgTk9TWVNJT0NUTEgJCQkvKiBidXQgaGFzIG5vIDxzeXMvaW9jdGwuaD4g Ki8KKyNlbmRpZiAvKiBNSU5JWCAqLworCisvKiBPdGhlcnMgKi8KKworI2lmbmRlZiBOT1NZU0lP Q1RMSAkJCS8qIE90aGVycyB1c2UgaW9jdGwoKSAqLworI2lmZGVmIFNVTjRTNQorLyoKKyAgVGhp cyBpcyB0byBnZXQgcmlkIG9mIGNwcCB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgb2NjdXIgYmVjYXVz ZSBhbGwgb2YKKyAgdGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCBieSBib3RoIHRlcm1pb3MuaCBh bmQgaW9jdGwuaCBvbiB0aGUgU1VOLgorKi8KKyN1bmRlZiBFQ0hPCisjdW5kZWYgTkwwCisjdW5k ZWYgTkwxCisjdW5kZWYgVEFCMAorI3VuZGVmIFRBQjEKKyN1bmRlZiBUQUIyCisjdW5kZWYgWFRB QlMKKyN1bmRlZiBDUjAKKyN1bmRlZiBDUjEKKyN1bmRlZiBDUjIKKyN1bmRlZiBDUjMKKyN1bmRl ZiBGRjAKKyN1bmRlZiBGRjEKKyN1bmRlZiBCUzAKKyN1bmRlZiBCUzEKKyN1bmRlZiBUT1NUT1AK KyN1bmRlZiBGTFVTSE8KKyN1bmRlZiBQRU5ESU4KKyN1bmRlZiBOT0ZMU0gKKyNlbmRpZiAvKiBT VU40UzUgKi8KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZiAvKiBOT1NZU0lPQ1RMSCAq LworLyoKKyAgV2UgcmVhbGx5LCByZWFsbHksIFJFQUxMWSB3YW50IEZJT05SRUFELCBiZWNhdXNl IGl0IGlzIHRoZSBvbmx5IHdheSB0byBmaW5kCisgIG91dCBub3QganVzdCAqaWYqIHN0dWZmIGlz IHdhaXRpbmcgdG8gYmUgcmVhZCwgYnV0IGhvdyBtdWNoLCB3aGljaCBpcworICBjcml0aWNhbCB0 byBvdXIgc2xpZGluZy13aW5kb3cgYW5kIHN0cmVhbWluZyBwcm9jZWR1cmVzLCBub3QgdG8gbWVu dGlvbgorICBlZmZpY2llbmN5IG9mIENPTk5FQ1QsIGV0Yy4KKyovCisjaWZkZWYgQkVMTFYxMAor I2luY2x1ZGUgPHN5cy9maWxpby5oPgkJCS8qIEZvciBGSU9OUkVBRCAqLworI2lmZGVmIEZJT05S RUFECisjZGVmaW5lIE1ZUkVBRAorI2VuZGlmIC8qIE1ZUkVBRCAqLworI2VuZGlmIC8qIEJFTExW MTAgKi8KKworI2lmbmRlZiBGSU9OUkVBRAorLyogSXQgd2Fzbid0IGZvdW5kIGluIGlvY3RsLmgg b3IgdGVybSouaCAtIHRyeSB0aGVzZSBwbGFjZXM6ICovCisjaWZkZWYgVU5JWFdBUkUKKyNpbmNs dWRlIDxzeXMvZmlsaW8uaD4KKyNlbHNlCisjaWZkZWYgU09MQVJJUworI2luY2x1ZGUgPHN5cy9m aWxpby5oPgorI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAqLworI2Vu ZGlmIC8qIEZJT05SRUFEICovCisKKyNpZmRlZiBYRU5JWCAvKiBXYXMgTV9VTklYIGJ1dCBYRU5J WCBpbXBsaWVzIE1fVU5JWCBhbmQgYXBwbGllcyB0byBYRU5JWCB0b28gKi8KKy8qCisgIDxzeXMv c29ja2V0Lmg+IGluY2x1ZGVkIGFib3ZlIHZpYSAiY2tjbmV0LmgiIGRlZmluZXMgRklPTlJFQUQg YXMKKyAgc29tZXRoaW5nLiAgRHVlIHRvIHRoaXMsIGluX2NoaygpIHVzZXMgdGhlIEZJT05SRUFE IGluc3RlYWQgb2YgUkRDSEsKKyAgYW5kIHRoZSBob3Qga2V5cyBkdXJpbmcgZmlsZSB0cmFuc2Zl ciAoWCB0byBjYW5jZWwgZmlsZSBldGMpIGRvIG5vdAorICB3b3JrIGJlY2F1c2UgRklPTlJFQUQg ZG9lc24ndCB3b3JrIGV2ZW4gdGhvdWdoIGl0IGlzIGRlZmluZWQuCisKKyAgTk9URTogVGhpcyBt aWdodCBhbHNvIGJlIHRydWUgZWxzZXdoZXJlLgorKi8KKyNpZmRlZiBGSU9OUkVBRAorI3VuZGVm IEZJT05SRUFECisjZW5kaWYgLyogRklPTlJFQUQgKi8KKyNlbmRpZiAvKiBYRU5JWCAqLworCisj aWZkZWYgQ0tfU0NPVjUJCQkJLyogRGl0dG8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAqLworI2lm bmRlZiBTQ09fT1NSNTA3CQkJLyogMjk5ICovCisjaWZkZWYgRklPTlJFQUQKKyN1bmRlZiBGSU9O UkVBRAorI2VuZGlmIC8qIEZJT05SRUFEICovCisjZW5kaWYJLyogU0NPX09TUjUwNyAqLworI2Vu ZGlmIC8qIENLX1NDT1Y1ICovCisKKyNpZmRlZiBTQ09fT1NSNTA3CQkJLyogMjk5ICovCisjaWZk ZWYgUkRDSEsKKyN1bmRlZiBSRENISworI2VuZGlmCS8qIFJEQ0hLICovCisjZW5kaWYJLyogU0NP X09TUjUwNyAqLworCisvKiBXaGV0aGVyIHRvIGluY2x1ZGUgPGZjbnRsLmg+ICovCisKKyNpZm5k ZWYgaXM2OGsJCQkJLyogT25seSBhIGZldyBkb24ndCBoYXZlIHRoaXMgb25lLiAqLworI2lmbmRl ZiBCU0Q0MQorI2lmbmRlZiBGVDIxCisjaWZuZGVmIEZUMTgKKyNpZm5kZWYgQ09IRVJFTlQKKyNp bmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogRlQxOCAq LworI2VuZGlmIC8qIEZUMjEgKi8KKyNlbmRpZiAvKiBCU0Q0MSAqLworI2VuZGlmIC8qIG5vdCBp czY4ayAqLworCisjaWZkZWYgQ09IRVJFTlQKKyNpZmRlZiBfSTM4NgorI2luY2x1ZGUgPGZjbnRs Lmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9mY250bC5oPgorI2VuZGlmIC8qIF9JMzg2ICovCisj ZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIEFUVDczMDAJCQkJLyogVW5peCBQQywgaW50 ZXJuYWwgbW9kZW0gZGlhbGVyICovCisjaW5jbHVkZSA8c3lzL3Bob25lLmg+CisjZW5kaWYgLyog QVRUNzMwMCAqLworCisjaWZkZWYgSFBVWAkJCQkvKiBIUC1VWCB2YXJpYXRpb25zLiAqLworI2Rl ZmluZSBIUFVYSk9CQ1RMCisjaW5jbHVkZSA8c3lzL21vZGVtLmg+CQkJLyogSFAtVVggbW9kZW0g c2lnbmFscyAqLworI2lmZGVmIGhwOTAwMHM1MDAJCQkvKiBNb2RlbCA1MDAgKi8KKyN1bmRlZiBI UFVYSk9CQ1RMCisjZW5kaWYgLyogaHA5MDAwczUwMCAqLworI2lmZGVmIEhQVVhQUkU2NQorI3Vu ZGVmIEhQVVhKT0JDVEwKK3R5cGVkZWYgbG9uZyBtZmxhZzsKKyNlbmRpZiAvKiBIUFVYUFJFNjUg Ki8KKyNpZmRlZiBIUFVYSk9CQ1RMCisjaW5jbHVkZSA8c3lzL2JzZHR0eS5oPgkJCS8qIEhQLVVY IEJlcmtlbGV5IHR0eSBzdXBwb3J0ICovCisjZW5kaWYgLyogSFBVWEpPQkNUTCAqLworI2VuZGlm IC8qIEhQVVggKi8KKworLyoKKyAgV2hpY2ggdGltZS5oIGZpbGVzIHRvIGluY2x1ZGUuLi4gU2Vl IGNrY2RlYi5oIGZvciBkZWZhdWx0cy4KKyAgTm90ZSB0aGF0IDAsIDEsIDIsIG9yIGFsbCAzIG9m IHRoZXNlIGNhbiBiZSBpbmNsdWRlZCBhY2NvcmRpbmcgdG8KKyAgdGhlIHN5bWJvbCBkZWZpbml0 aW9ucy4KKyovCisjaWZuZGVmIE5PVElNRUgKKyNpZmRlZiBUSU1FSAorI2luY2x1ZGUgPHRpbWUu aD4KKyNlbmRpZiAvKiBUSU1FSCAqLworI2VuZGlmIC8qIE5PVElNRUggKi8KKworI2lmbmRlZiBO T1NZU1RJTUVICisjaWZkZWYgU1lTVElNRUgKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlm IC8qIFNZU1RJTUVIICovCisjZW5kaWYgLyogTk9TWVNUSU1FSCAqLworCisjaWZuZGVmIE5PU1lT VElNRUJICisjaWZkZWYgU1lTVElNRUJICisjaW5jbHVkZSA8c3lzL3RpbWViLmg+CisjZW5kaWYg LyogU1lTVElNRUJIICovCisjZW5kaWYgLyogTk9TWVNUSU1FQkggKi8KKworI2lmbmRlZiBOT0RD TFRJTUVWQUwKKyNpZmRlZiBEQ0xUSU1FVkFMCisvKgorICBJbiBjZXJ0YWluIFBPU0lYIGJ1aWxk cyAobGlrZSBVbml4d2FyZSA3KSwgPFtzeXMvXXRpbWUuaD4gcmVmdXNlcyB0bworICBkZWZpbmUg dGhlIHN0cnVjdHMgd2UgbmVlZCB0byBhY2Nlc3MgdGhlIGhpZ2hlciBzcGVlZHMsIHNvIHdlIGhh dmUgdG8KKyAgZG8gaXQgb3Vyc2VsdmVzLgorKi8KK3N0cnVjdCB0aW1ldmFsIHsKKyAgICBsb25n IHR2X3NlYzsKKyAgICBsb25nIHR2X3VzZWM7Cit9Oworc3RydWN0IHRpbWV6b25lIHsKKyAgICBp bnQgdHpfbWludXRlc3dlc3Q7CisgICAgaW50IHR6X2RzdHRpbWU7Cit9OworI2VuZGlmIC8qIERD TFRJTUVWQUwgKi8KKyNlbmRpZiAvKiBOT0RDTFRJTUVWQUwgKi8KKworI2lmZGVmIF9fbGludXhf XworLyogVEhJUyBJUyBPQlNPTEVURSBzaW5jZSBhYm91dCBMaW51eCAwLjkyICovCisjaWZkZWYg T0xJTlVYSElTUEVFRAorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2VuZGlmIC8qIE9MSU5V WEhJU1BFRUQgKi8KKyNpZmRlZiBfX2FscGhhX18JCQkvKiBMaW51eCBvbiBERUMgQWxwaGEgKi8K KyNpZm5kZWYgX19HTElCQ19fCQkJLyogQnV0IG5vdCB3aXRoIGdsaWJjICovCisjaW5jbHVkZSA8 YXNtL3Rlcm1pb3MuaD4KKyNlbmRpZiAvKiBfX0dMSUJDX18gKi8KKyNlbmRpZiAvKiBfX2FscGhh X18gKi8KKyNlbmRpZiAvKiBfX2xpbnV4X18gKi8KKworI2lmZGVmIE5PSUVYVEVOCQkJCS8qIFRo aXMgaXMgYnJva2VuIG9uIHNvbWUgc3lzdGVtcyAqLworI3VuZGVmIElFWFRFTgkJCQkvKiBsaWtl IENvbnZleC9PUyA5LjEgKi8KKyNlbmRpZiAvKiBOT0lFWFRFTiAqLworI2lmbmRlZiBJRVhURU4J CQkJLyogVHVybiBvZmYgXk8vXlYgcHJvY2Vzc2luZy4gKi8KKyNkZWZpbmUgSUVYVEVOIDAJCQkv KiBOZWVkZWQsIGF0IGxlYXN0LCBvbiBCU0RJLiAqLworI2VuZGlmIC8qIElFWFRFTiAqLworLyoK KyAgUGljayB1cCBkZWZpbml0aW9ucyBuZWVkZWQgZm9yIHNlbGVjdCgpIGlmIHdlIGRvbid0IGhh dmUgdGhlbSBhbHJlYWR5LgorICBOb3JtYWxseSB0aGV5IGNvbWUgZnJvbSA8c3lzL3R5cGVzLmg+ IGJ1dCBzb21lIHN5c3RlbXMgZ2V0IHRoZW0gZnJvbQorICA8c3lzL3NlbGVjdC5oPi4uLiAgUmF0 aGVyIHRoYW4gaGFyZHdpcmUgYWxsIG9mIHRoZW0gaW50byB0aGUgc291cmNlLCB3ZQorICBpbmNs dWRlIGl0IGlmIFNFTEVDVF9IIGlzIGRlZmluZWQgaW4gY29tcGlsZS10aW1lIENGTEFHUy4KKyov CisjaWZuZGVmIFNDT19PU1I1MDQKKyNpZmRlZiBTRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxl Y3QuaD4KKyNlbmRpZiAvKiBTRUxFQ1RfSCAqLworI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KKwor I2lmZGVmIGFlZ2lzCisjaW5jbHVkZSAiL3N5cy9pbnMvYmFzZS5pbnMuYyIKKyNpbmNsdWRlICIv c3lzL2lucy9lcnJvci5pbnMuYyIKKyNpbmNsdWRlICIvc3lzL2lucy9pb3MuaW5zLmMiCisjaW5j bHVkZSAiL3N5cy9pbnMvc2lvLmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL3BhZC5pbnMuYyIK KyNpbmNsdWRlICIvc3lzL2lucy90aW1lLmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL3BmbS5p bnMuYyIKKyNpbmNsdWRlICIvc3lzL2lucy9wZ20uaW5zLmMiCisjaW5jbHVkZSAiL3N5cy9pbnMv ZWMyLmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL3R5cGVfdWlkcy5pbnMuYyIKKyNpbmNsdWRl IDxkZWZhdWx0X2FjbC5oPgorI3VuZGVmIFRJT0NFWENMCisjdW5kZWYgRklPTlJFQUQKKyNlbmRp ZiAvKiBhZWdpcyAqLworCisjaWZkZWYgc3hhRTUwCQkJCS8qIFBGVSBDb21wYWN0IEEgU1gvQSBU SVNQIFYxMC9MNTAgKi8KKyN1bmRlZiBGSU9OUkVBRAorI2VuZGlmIC8qIHN4YUU1MCAqLworCisv KiBUaGUgZm9sbG93aW5nICNkZWZpbmVzIGFyZSBjYXRjaC1hbGxzIGZvciB0aG9zZSBzeXN0ZW1z ICovCisvKiB0aGF0IGRpZG4ndCBoYXZlIG9yIGNvdWxkbid0IGZpbmQgPGZpbGUuaD4uLi4gKi8K KworI2lmbmRlZiBGUkVBRAorI2RlZmluZSBGUkVBRCAweDAxCisjZW5kaWYgLyogRlJFQUQgKi8K KworI2lmbmRlZiBGV1JJVEUKKyNkZWZpbmUgRldSSVRFIDB4MTAKKyNlbmRpZiAvKiBGV1JJVEUg Ki8KKworI2lmbmRlZiBPX1JET05MWQorI2RlZmluZSBPX1JET05MWSAwMDAKKyNlbmRpZiAvKiBP X1JET05MWSAqLworCisvKiBUaGlzIGlzIGZvciBhbmNpZW50IFVuaXhlcyB0aGF0IGRvbid0IGhh dmUgdGhlc2UgdHR5IHN5bWJvbHMgZGVmaW5lZC4gKi8KKworI2lmbmRlZiBQRU5ESU4KKyNkZWZp bmUgUEVORElOIElDQU5PTgorI2VuZGlmIC8qIFBFTkRJTiAqLworI2lmbmRlZiBGTFVTSE8KKyNk ZWZpbmUgRkxVU0hPIElDQU5PTgorI2VuZGlmIC8qIEZMVVNITyAqLworI2lmbmRlZiBFWFRQUk9D CisjZGVmaW5lIEVYVFBST0MgSUNBTk9OCisjZW5kaWYgLyogRVhUUFJPQyAqLworCisjaWZkZWYg U1ZPUlBPU0lYCisvKgorICBNb2RlbSBzaWduYWxzIGFyZSBhbHNvIGZvcmJpZGRlbiBpbiB0aGUg UE9TSVggd29ybGQuICBCdXQgc29tZSBQT1NJWC1iYXNlZAorICBwbGF0Zm9ybXMgbGV0IHVzIGF0 IHRoZW0gYW55d2F5IGlmIHdlIGtub3cgd2hlcmUgdG8gbG9vay4KKyovCisjaWZuZGVmIE5FRURN RE1ERUZTCisvKiBEb2Vzbid0IHdvcmsgZm9yIExpbnV4ICovCisjaWZkZWYgVU5JWFdBUkU3Cisj ZGVmaW5lIE5FRURNRE1ERUZTCisjZW5kaWYgLyogVU5JWFdBUkU3ICovCisjZW5kaWYgLyogTkVF RE1ETURFRlMgKi8KKworI2lmZGVmIE5FRURNRE1ERUZTCisjaWZuZGVmIFRJT0NNR0VUCisjZGVm aW5lIFRJT0NNR0VUICgoJ3QnPDw4KXwyOSkKKyNlbmRpZiAvKiBUSU9DTUdFVCAqLworCisjaWZu ZGVmIFRJT0NNX0RUUgorI2RlZmluZSBUSU9DTV9EVFIgMHgwMDAyCisjZW5kaWYgLyogVElPQ01f RFRSICovCisjaWZuZGVmIFRJT0NNX1JUUworI2RlZmluZSBUSU9DTV9SVFMgMHgwMDA0CisjZW5k aWYgLyogVElPQ01fUlRTICovCisjaWZuZGVmIFRJT0NNX0NUUworI2RlZmluZSBUSU9DTV9DVFMg MHgwMDIwCisjZW5kaWYgLyogVElPQ01fQ1RTICovCisjaWZuZGVmIFRJT0NNX0NBUgorI2RlZmlu ZSBUSU9DTV9DQVIgMHgwMDQwCisjZW5kaWYgLyogVElPQ01fQ0FSICovCisjaWZuZGVmIFRJT0NN X1JORworI2RlZmluZSBUSU9DTV9STkcgMHgwMDgwCisjZW5kaWYgLyogVElPQ01fUk5HICovCisj aWZuZGVmIFRJT0NNX0RTUgorI2RlZmluZSBUSU9DTV9EU1IgMHgwMTAwCisjZW5kaWYgLyogVElP Q01fRFNSICovCisjZW5kaWYgLyogTkVFRE1ETURFRlMgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVgg Ki8KKworLyogRGVjbGFyYXRpb25zICovCisKKyNpZmRlZiBPWE9TCisjdW5kZWYgVENHRVRBCisj dW5kZWYgVENTRVRBCisjdW5kZWYgVENTRVRBVworI3VuZGVmIFRDU0VUQUYKKyNkZWZpbmUgVENH RVRBIFRDR0VUUworI2RlZmluZSBUQ1NFVEEgVENTRVRTCisjZGVmaW5lIFRDU0VUQVcgVENTRVRT VworI2RlZmluZSBUQ1NFVEFGIFRDU0VUU0YKKyNkZWZpbmUgdGVybWlvIHRlcm1pb3MKKyNlbmRp ZiAvKiBPWE9TICovCisKKyNpZmRlZiBTVk9SUE9TSVgJCQkvKiBBVCZUIFN5cyBWIG9yIFBPU0lY ICovCisjaWZkZWYgVU5JWFdBUkVQT1NJWAkJCS8qIFVuaXhXYXJlIDcgUE9TSVggYnVpbGQgKi8K Ky8qCisgIEluIFVuaXh3YXJlIFBPU0lYIGJ1aWxkcywgPFtzeXMvXXRpbWUuaD4gcmVmdXNlcyB0 byBkZWZpbmUgdGhlCisgIHN0cnVjdHMgd2UgbmVlZCB0byBhY2Nlc3MgdGhlIGhpZ2hlciBzcGVl ZHMsIHNvIHdlIGhhdmUgdG8gZG8gaXQKKyAgb3Vyc2VsdmVzLgorKi8KK3N0cnVjdCB0aW1ldmFs IHsKKyAgICBsb25nIHR2X3NlYzsKKyAgICBsb25nIHR2X3VzZWM7Cit9Oworc3RydWN0IHRpbWV6 b25lIHsKKyAgICBpbnQgdHpfbWludXRlc3dlc3Q7CisgICAgaW50IHR6X2RzdHRpbWU7Cit9Owor I2VuZGlmIC8qIFVOSVhXQVJFUE9TSVggKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKworI2lm ZGVmIF9fR05VQ19fCisjaWZkZWYgWEVOSVgKKy8qCisgIEJlY2F1c2UgWGVuaXggPHRpbWUuaD4g ZG9lc24ndCBkZWNsYXJlIHRpbWUoKSBpZiB3ZSdyZSB1c2luZyBnY2MuCisqLwordGltZV90IHRp bWUoKTsKKyNlbmRpZiAvKiBYRU5JWCAqLworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKy8qIFNw ZWNpYWwgc3R1ZmYgZm9yIFY3IGlucHV0IGJ1ZmZlciBwZWVraW5nICovCisKKyNpZmRlZiAgVjcK K2ludCBrbWVtWzJdID0geyAtMSwgLTF9OworY2hhciAqaW5pdHJhd3EoKSwgKnFhZGRyWzJdPXsw LDB9OworI2RlZmluZSBDT04gMAorI2RlZmluZSBUVFkgMQorI2VuZGlmIC8qIFY3ICovCisKKy8q IGRmdHR5IGlzIHRoZSBkZXZpY2UgbmFtZSBvZiB0aGUgZGVmYXVsdCBkZXZpY2UgZm9yIGZpbGUg dHJhbnNmZXIgKi8KKy8qIGRmbG9jIGlzIDAgaWYgZGZ0dHkgaXMgdGhlIHVzZXIncyBjb25zb2xl IHRlcm1pbmFsLCAxIGlmIGFuIGV4dGVybmFsIGxpbmUgKi8KKworI2lmZGVmIEJFT1MKKyAgICBj aGFyICogZGZ0dHkgPSBOVUxMOworICAgIGNoYXIgKiBkZm1kbSA9ICJub25lIjsKKyAgICBpbnQg ZGZsb2MgPSAwOyAgICAgICAgICAgICAgICAgIC8qIHRoYXQgZ29lcyBpbiBsb2NhbCBtb2RlIGJ5 IGRlZmF1bHQgKi8KKyNlbHNlCisjaWZuZGVmIERGVFRZCisjaWZkZWYgUFJPVlgxCisgICAgY2hh ciAqZGZ0dHkgPSAiL2Rldi9jb20xLmRvdXQiOyAvKiBPbmx5IGV4YW1wbGUgc28gZmFyIG9mIGEg c3lzdGVtICovCisgICAgY2hhciAqZGZtZG0gPSAibm9uZSI7CisgICAgaW50IGRmbG9jID0gMTsg ICAgICAgICAgICAgICAgICAvKiB0aGF0IGdvZXMgaW4gbG9jYWwgbW9kZSBieSBkZWZhdWx0ICov CisjZWxzZQorICAgIGNoYXIgKmRmdHR5ID0gQ1RUTkFNOyAgICAgICAgICAgICAgIC8qIFJlbW90 ZSBieSBkZWZhdWx0LCB1c2Ugbm9ybWFsICovCisgICAgY2hhciAqZGZtZG0gPSAibm9uZSI7Cisg ICAgaW50IGRmbG9jID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxpbmcgdGVy bWluYWwgbmFtZS4gKi8KKyNlbmRpZiAvKiBQUk9WWDEgKi8KKyNlbHNlCisgICAgY2hhciAqZGZ0 dHkgPSBERlRUWTsJCS8qIERlZmF1bHQgbG9jYXRpb24gc3BlY2lmaWVkIG9uICovCisgICAgY2hh ciAqZGZtZG0gPSAibm9uZSI7CQkvKiBjb21tYW5kIGxpbmUuICovCisgICAgaW50IGRmbG9jID0g MTsgICAgICAgICAgICAgICAgICAgICAgLyogY29udHJvbGxpbmcgdGVybWluYWwgbmFtZS4gKi8K KyNlbmRpZiAvKiBERlRUWSAqLworI2VuZGlmIC8qIEJFT1MgKi8KKworI2RlZmluZSBDT05fUkVT IDAJCQkvKiBDb25zb2xlIHN0YXRlIGlzICJyZXNldCIgKi8KKyNkZWZpbmUgQ09OX0NCICAxCQkJ LyogQ29uc29sZSBzdGF0ZSBpcyBDQlJFQUsgKi8KKyNkZWZpbmUgQ09OX0JJTiAyCQkJLyogQ29u c29sZSBzdGF0ZSBpcyBiaW5hcnkgKi8KKyAgICBzdGF0aWMgaW50IGNvbnN0YXRlID0gQ09OX1JF UzsKKworI2RlZmluZSBDT05JX1JFUyAwCQkJLyogQ29uc29sZSBpbnRlcnJ1cHRzIGFyZSAicmVz ZXQiICovCisjZGVmaW5lIENPTklfSU5UIDEJCQkvKiBDb25zb2xlIGludHRlcnVwdHMgYXJlIHNl dCAqLworI2RlZmluZSBDT05JX05PSSAyCQkJLyogQ29uc29sZSBpbnR0ZXJ1cHRzIGFyZSBkaXNh YmxlZCAqLworICAgIHN0YXRpYyBpbnQgY29uaXN0YXRlID0gQ09OSV9SRVM7CisKKyNpZmRlZiBD S19TTUFMTAorI2RlZmluZSBDT05CVUZTSVogMTUKKyNlbHNlCisjZGVmaW5lIENPTkJVRlNJWiAy NTUKKyNlbmRpZiAvKiBDS19TTUFMTCAqLworICAgIHN0YXRpYyBjaGFyIGNvbmJ1ZltDT05CVUZT SVpdOwkvKiBDb25zb2xlIHJlYWRhaGVhZCBidWZmZXIgKi8KKyAgICBzdGF0aWMgaW50ICBjb25i dWZuID0gMDsJCS8qIENoYXJzIGluIHJlYWRhaGVhZCBidWZmZXIgKi8KKyAgICBzdGF0aWMgY2hh ciAqY29uYnVmcCA9IGNvbmJ1ZjsJLyogTmV4dCBjaGFyIGluIHJlYWRhaGVhZCBidWZmZXIgKi8K KworICAgIGNoYXIgY3R0bmFtW0RFVk5BTUxFTisxXSA9IHsgJ1wwJywgJ1wwJyB9OyAvKiBEZXRl cm1pbmVkIGF0IHJ1bnRpbWUgKi8KKworI2lmZGVmIFJUVQorICAgIGludCBydHVfYnVnID0gMDsJ CSAgICAvKiBzZXQgdG8gMSB3aGVuIHJldHVybmluZyBmcm9tIFNJR1RTVFAgKi8KKyNlbmRpZiAv KiBSVFUgKi8KKworICAgIGludCBkZnBydHkgPSBERUZQQVI7ICAgICAgICAgICAgICAgIC8qIERl ZmF1bHQgcGFyaXR5ICgwID0gbm9uZSkgKi8KKyAgICBpbnQgdHRwcnR5ID0gMDsgICAgICAgICAg ICAgICAgICAgICAvKiBUaGUgcGFyaXR5IHRoYXQgaXMgaW4gdXNlLiAqLworICAgIHN0YXRpYyBp bnQgdHRwbXNrID0gMHhmZjsJCS8qIFBhcml0eSBzdHJpcHBpbmcgbWFzay4gKi8KKyAgICBpbnQg dHRtZG0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBpbiB1c2UuICovCisgICAg aW50IHR0Y2FyciA9IENBUl9BVVQ7CQkvKiBDYXJyaWVyIGhhbmRsaW5nIG1vZGUuICovCisgICAg aW50IGRmZmxvdyA9IEZMT19OT05FOwkJLyogRGVmYXVsdCBmbG93IGNvbnRyb2wgaXMgTk9ORSAq LworICAgIGludCBiYWNrZ3JkID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBpbiBm b3JlZ3JvdW5kIChubyAnJicgKSAqLworI2lmZGVmIEZfU0VURkwKKyAgICBpbnQgaW5pZmxhZ3Mg PSAtMTsJCQkvKiBmY250bCBmbGFncyBmb3IgdHR5ZmQgKi8KKyNlbmRpZiAvKiBGX1NFVEZMICov CisgICAgaW50IGZkZmxhZyA9IDA7CQkJLyogRmxhZyBmb3IgcmVkaXJlY3RlZCBzdGRpbyAqLwor ICAgIGludCB0dGZkZmxnID0gMDsJCQkvKiBPcGVuIEZpbGUgZGVzY3JpcHRvciB3YXMgZ2l2ZW4g Ki8KKyAgICBpbnQgdHZ0ZmxnID0gMDsJCQkvKiBGbGFnIHRoYXQgdHR2dCBoYXMgYmVlbiBjYWxs ZWQgKi8KKyAgICBsb25nIHR0c3BlZWQgPSAtMUw7CQkJLyogRm9yIHNhdmluZyBzcGVlZCAqLwor ICAgIGludCB0dGZsb3cgPSAtOTsJCQkvKiBGb3Igc2F2aW5nIGZsb3cgKi8KKyAgICBpbnQgdHRs ZCA9IC0xOwkJCS8qIExpbmUgZGlzY2lwbGluZSAqLworCisjaWZkZWYgc29ueV9uZXdzCisgICAg c3RhdGljIGludCBrbV9jb24gPSAtMTsJCS8qIEthbmppIG1vZGUgZm9yIGNvbnNvbGUgdHR5ICov CisgICAgc3RhdGljIGludCBrbV9leHQgPSAtMTsJCS8qIEthbmppIG1vZGUgZm9yIGV4dGVybmFs IGRldmljZSAqLworI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworCisjaWZkZWYgUEFSU0VOU0UKKyAg ICBzdGF0aWMgaW50IG5lZWRwY2hrID0gMTsJCS8qIE5lZWQgcGFyaXR5IGNoZWNrICovCisjZWxz ZQorICAgIHN0YXRpYyBpbnQgbmVlZHBjaGsgPSAwOworI2VuZGlmIC8qIFBBUlNFTlNFICovCisK KyAgICBleHRlcm4gaW50IHN0b3BiaXRzOwkJLyogU3RvcCBiaXRzICovCisjaWZkZWYgSFdQQVJJ VFkKKy8qCisgIFVuZm9ydHVuYXRlbHkgd2UgbXVzdCBkbyB0aGlzIHdpdGggZ2xvYmFsIHZhcmlh YmxlcyByYXRoZXIgdGhhbiB0aHJvdWdoIHRoZQorICB0dC4uLigpIEFQSXMgdG8gYXZvaWQgY2hh bmdpbmcgdGhlIEFQSXMgYW5kIHRoZSBtYW55IG1vZHVsZXMgdGhhdCB1c2UgdGhlbS4KKyAgSWYg aHdwYXJpdHkgIT0gMCwgdGhpcyBpbmRpY2F0ZXMgOCBkYXRhIGJpdHMgKyBwYXJpdHksIHJhdGhl ciB0aGFuIDcgZGF0YQorICBiaXRzICsgcGFyaXR5IG9yIDggZGF0YSBiaXRzIGFuZCBubyBwYXJp dHksIGFuZCBvdmVycmlkZXMgdGhlIHJlZ3VsYXIgcGFyaXR5CisgIHZhcmlhYmxlLCB3aGljaCBp cyBjb21tdW5pY2F0ZWQgdG8gdGhpcyBtb2R1bGUgdGhydSB0dHBrdCgpLCBhbmQgcmVwcmVzZW50 ZWQKKyAgbG9jYWxseSBieSB0aGUgdHRwcnR5IHZhcmlhYmxlLgorKi8KKyAgICBleHRlcm4gaW50 IGh3cGFyaXR5OwkJLyogSGFyZHdhcmUgcGFyaXR5ICovCisjZW5kaWYgLyogSFdQQVJJVFkgKi8K KworI2lmZGVmIFRDUFNPQ0tFVAorI2lmZGVmIFRDUF9OT0RFTEFZCitzdGF0aWMgaW50IG5vZGVs YXlfc2F2ID0gLTE7CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KKworc3RhdGljIGludCBzaWdpbnRfaWduID0gMDsJCS8qIFNJR0lOVCBpcyBpZ25vcmVk ICovCisKKy8qCisgIEhhdmluZyB0aGlzIG1vZHVsZSByZWx5IG9uIGV4dGVybmFsIGdsb2JhbHMg aXMgYmFkLCBidXQgZml4aW5nIHRoaXMKKyAgcmVxdWlyZXMgb3ZlcmhhdWwgb2YgdGhlIGNrKnRp by5jIG1vZHVsZXMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IG9wZXJhdGluZworICBzeXN0ZW1zIHN1 cHBvcnRlZCBieSBDLUtlcm1pdC4gIExlZnQgZm9yIGEgZnV0dXJlIHJlbGVhc2UuCisqLworZXh0 ZXJuIGludCB0dG5wcm90bzsJCQkvKiBEZWZpbmVkIGluIGNrY25ldC5jICovCitleHRlcm4gaW50 IHR0bmV0OwkJCS8qIERlZmluZWQgaW4gY2tjbmV0LmMgKi8KK2V4dGVybiBpbnQgbm9wdXNoLCB4 ZnJjYW4sIHhmcmNociwgeGZybnVtOyAvKiBEZWZpbmVkIGluIGNrY21haS5jICovCitleHRlcm4g aW50IHhzdXNwZW5kLCB3YXNjbG9zZWQ7CitleHRlcm4gaW50IGluc2VydmVyLCBsb2NhbDsKKwor aW50IGNreGVjaCA9IDA7IC8qIDAgaWYgc3lzdGVtIG5vcm1hbGx5IGVjaG9lcyBjb25zb2xlIGNo YXJhY3RlcnMsIGVsc2UgMSAqLworCitpbnQgY2ttYXhmaWxlcyA9IDA7CQkJLyogTWF4IG51bWJl ciBvZiBvcGVuIGZpbGVzICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCQkJLyogS2VyYmVyb3Mg Ki8KKyNpbmNsdWRlICJja3VhdGguaCIKK2V4dGVybiBpbnQgbWVfZW5jcnlwdCwgdV9lbmNyeXB0 OworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworLyogRGVjbGFyYXRpb25zIG9mIHZhcmlh YmxlcyBnbG9iYWwgd2l0aGluIHRoaXMgbW9kdWxlICovCisKKyNpZmRlZiBUVExFQlVGCQkJCS8q IFNlZSBja2NuZXQuaCAqLworaW50IHR0cHVzaCA9IC0xOworI2RlZmluZSBMRUJVRlNJWiA0MDk2 CitzdGF0aWMgQ0hBUiBsZV9idWZbTEVCVUZTSVpdOworc3RhdGljIGludCBsZV9zdGFydCA9IDAs IGxlX2VuZCA9IDAsIGxlX2RhdGEgPSAwOworI2VuZGlmIC8qIFRUTEVCVUYgKi8KKworI2RlZmlu ZSBNU0dCVUZfU0laRSAxMDI0CQkvKiBGb3IgZGVidWdnaW5nICovCitzdGF0aWMgY2hhciBtc2di dWZbTVNHQlVGX1NJWkVdOworCitzdGF0aWMgaW50IGdvdHNpZ3MgPSAwOworCitzdGF0aWMgdGlt ZV90IHRjb3VudCA9ICh0aW1lX3QpMDsJLyogRWxhcHNlZCB0aW1lIGNvdW50ZXIgKi8KKworc3Rh dGljIFNJR1RZUCAoKnNhdmFsKSgpICAgICA9IE5VTEw7CS8qIEZvciBzYXZpbmcgYWxhcm0oKSBo YW5kbGVyICovCitzdGF0aWMgU0lHVFlQICgqc2F2cXVpdCkoKSAgID0gTlVMTDsJLyogYW5kIG90 aGVyIHNpZ25hbCBoYW5kbGVycyAqLworI2lmZGVmIFNJR1VTUjEKK3N0YXRpYyBTSUdUWVAgKCpz YXZ1c3IxKSgpICAgPSBOVUxMOworI2VuZGlmIC8qIFNJR1VTUjEgKi8KKyNpZmRlZiBTSUdVU1Iy CitzdGF0aWMgU0lHVFlQICgqc2F2dXNyMikoKSAgID0gTlVMTDsKKyNlbmRpZiAvKiBTSUdVU1Iy ICovCisjaWZkZWYgU0lHUElQRQorc3RhdGljIFNJR1RZUCAoKnNhdnBpcGUpKCkgICA9IE5VTEw7 CisjZW5kaWYgLyogU0lHUElQRSAqLworI2lmZGVmIFNJR0RBTkdFUgorc3RhdGljIFNJR1RZUCAo KnNhdmRhbmdlcikoKSA9IE5VTEw7CisjZW5kaWYgLyogU0lHREFOR0VSICovCisKKyNpZm5kZWYg Tk9KQworc3RhdGljIFNJR1RZUCAoKmpjaGRscikoKSAgICA9IE5VTEw7CS8qIEZvciBjaGVja2lu ZyBzdXNwZW5kIGhhbmRsZXIgKi8KKyNlbmRpZiAvKiBOT0pDICovCitzdGF0aWMgaW50IGpjc2hl bGwgPSAtMTsJCS8qIEFuZCBmbGFnIGZvciByZXN1bHQgKi8KKworLyoKKyAgQlJFQUtOVUxTIGlz IGRlZmluZWQgZm9yIHN5c3RlbXMgdGhhdCBzaW11bGF0ZSBzZW5kaW5nIGEgQlJFQUsgc2lnbmFs CisgIGJ5IHNlbmRpbmcgYSBidW5jaCBvZiBOVUwgY2hhcmFjdGVycyBhdCBsb3cgc3BlZWQuCisq LworI2lmZGVmIFBST1ZYMQorI2lmbmRlZiBCUkVBS05VTFMKKyNkZWZpbmUgQlJFQUtOVUxTCisj ZW5kaWYgLyogQlJFQUtOVUxTICovCisjZW5kaWYgLyogUFJPVlgxICovCisKKyNpZmRlZiBWNwor I2lmbmRlZiBCUkVBS05VTFMKKyNkZWZpbmUgQlJFQUtOVUxTCisjZW5kaWYgLyogQlJFQUtOVUxT ICovCisjZW5kaWYgLyogVjcgKi8KKworI2lmZGVmIEJSRUFLTlVMUworc3RhdGljIGNoYXIJCQkJ LyogQSBzdHJpbmcgb2YgbnVsbHMgKi8KKypicm51bHMgPSAiXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCI7CisjZW5kaWYgLyogQlJFQUtOVUxTICov CisKKyNpZmRlZiBDS19QT1NJWF9TSUcJCQkvKiBMb25nanVtcCBidWZmZXJzICovCitzdGF0aWMg c2lnam1wX2J1ZiBzamJ1ZjsJCS8qIFBPU0lYIHNpZ25hbCBoYW5kbGluZyAqLworI2Vsc2UKK3N0 YXRpYyBqbXBfYnVmIHNqYnVmOworI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCisjaWZkZWYg VjcKK3N0YXRpYyBqbXBfYnVmIGpqYnVmOworI2VuZGlmIC8qIFY3ICovCisKKy8qIHN0YXRpYyAq LwkJCQkvKiAoTm90IHN0YXRpYyBhbnkgbW9yZSkgKi8KK2ludCB0dHlmZCA9IC0xOwkJCQkvKiBU VFkgZmlsZSBkZXNjcmlwdG9yICovCisKK2ludCB0dHBpcGUgPSAwOwkJCQkvKiBORVRDTUQ6IFVz ZSBwaXBlIGluc3RlYWQgb2YgdHR5ZmQgKi8KK2ludCB0dHB0eSAgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBORVRQVFk6IFVzZSBwdHkgaW5zdGVhZCBvZiB0dGZ5ZCAqLworCisjaWZk ZWYgTkVUUFRZCQkJCS8qIFRoZXNlIGFyZSBpbiBja3VwdHkuYyAqLworZXh0ZXJuIFBJRF9UIHB0 eV9mb3JrX3BpZDsKK2V4dGVybiBpbnQgcHR5X21hc3Rlcl9mZCwgcHR5X3NsYXZlX2ZkOworI2Vu ZGlmCS8qIE5FVFBUWSAqLworCisjaWZkZWYgTkVUQ01ECisjaWZkZWYgTkVUQ09OTgorc3RhdGlj IGludCBwaXBlMFsyXSwgcGlwZTFbMl07CQkvKiBQaXBlcyBmb3IgbmV0IGkvbyAqLworI2VuZGlm IC8qIE5FVENPTk4gKi8KK3N0YXRpYyBQSURfVCB0dHBpZCA9IDA7CQkJLyogUHJvY2VzcyBJRCBm b3IgZm9yayAqLworc3RhdGljIGludCBmZGluLCBmZG91dDsJCQkvKiBGaWxlIGRlc2NyaXB0b3Jz IGZvciBwaXBlICovCitzdGF0aWMgRklMRSAqIHR0b3V0ID0gTlVMTDsJCS8qIEZpbGUgcG9pbnRl ciBmb3Igb3V0cHV0IHBpcGUgKi8KKyNpZmRlZiBEQ0xGRE9QRU4KKy8qIGZkb3BlbigpIG5lZWRz IGRlY2xhcmluZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLworX1BS T1RPVFlQKCBGSUxFICogZmRvcGVuLCAoaW50LCBjaGFyICopICk7CisjZW5kaWYgLyogRENMRkRP UEVOICovCisjZW5kaWYgLyogTkVUQ01EICovCisKK2V4dGVybiBpbnQgcGV4aXRzdGF0LCBxdWll dDsKKworI2lmZGVmIFBsYW45CitpbnQgdHR5Y3RsZmQgID0gLTE7ICAgLyogVFRZIGNvbnRyb2wg Y2hhbm5lbCAtIFdoYXQ/IFVOSVggZG9lc24ndCBoYXZlIG9uZT8gKi8KK2ludCBjb25zY3RsZmQg PSAtMTsJCQkvKiBDb25zb2xlIGNvbnRyb2wgY2hhbm5lbCAqLworaW50IG5vaXNlZmQgPSAtMTsJ CQkvKiB0b25lIGNoYW5uZWwgKi8KK3N0YXRpYyBpbnQgdHR5bGFzdHNwZWVkID0gLTE7CQkvKiBT byB3ZSBjYW4gbGllIGFib3V0IHRoZSBzcGVlZCAqLworI2VuZGlmIC8qIFBsYW45ICovCisKK2lu dCB0ZWxuZXRmZCA9IDA7CQkJLyogRmlsZSBkZXNjcmlwdG9yIGlzIGZvciB0ZWxuZXQgKi8KKyNp ZmRlZiBORVRDT05OCitpbnQgeDI1ZmQgPSAwOwkJCQkvKiBGaWxlIGRlc2NyaXB0b3IgaXMgZm9y IFguMjUgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisKK2NoYXIgbG9ja3BpZFsxNl0gPSB7ICdc MCcsICdcMCcgfTsJLyogUElEIHN0b3JlZCBpbiBsb2NrZmlsZSwgYXMgc3RyaW5nICovCisKK3N0 YXRpYyBpbnQgbGtmID0gMCwgICAgICAgICAgICAgICAgICAgICAvKiBMaW5lIGxvY2sgZmxhZyAq LworICAgIGNnbWYgPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgdGhhdCBj b25zb2xlIG1vZGVzIHNhdmVkICovCisgICAgeGxvY2FsID0gMCwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmxhZyBmb3IgdHR5IGxvY2FsIG9yIHJlbW90ZSAqLworICAgIGN1cmNhcnIgPSAw OwkJCS8qIENhcnJpZXIgbW9kZTogcmVxdWlyZS9pZ25vcmUuICovCisKK3N0YXRpYyBpbnQgbmV0 Y29ubiA9IDA7CQkJLyogMSBpZiBuZXR3b3JrIGNvbm5lY3Rpb24gYWN0aXZlICovCisKK3N0YXRp YyBjaGFyIGVzY2NocjsgICAgICAgICAgICAgICAgICAgICAvKiBFc2NhcGUgb3IgYXR0biBjaGFy YWN0ZXIgKi8KKworI2lmZGVmIENLX1NDTzMyVjQKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2Vu ZGlmIC8qIENLX1NDTzMyVjQgKi8KKworI2lmZGVmIEhBVkVfVFYKKyAgICBzdGF0aWMgc3RydWN0 IHRpbWV2YWwgdHY7CQkvKiBGb3IgZ2V0dGluZyB0aW1lLCBmcm9tIHN5cy90aW1lLmggKi8KKyNl bmRpZiAvKiBIQVZFX1RWICovCisjaWZkZWYgSEFWRV9UWgorICAgIHN0YXRpYyBzdHJ1Y3QgdGlt ZXpvbmUgdHo7CisjZW5kaWYgLyogSEFWRV9UWiAqLworCisjaWZkZWYgT1NGCisgICAgc3RhdGlj IHN0cnVjdCB0aW1lYiBmdHA7ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8K KyNlbmRpZiAvKiBPU0YgKi8KKworI2lmZGVmIEJTRDI5CisgICAgc3RhdGljIGxvbmcgeGNsb2Nr OwkJCS8qIEZvciBnZXR0aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0 cnVjdCB0aW1lYiBmdHA7ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNl bmRpZiAvKiBCU0QyOSAqLworCisjaWZkZWYgQlNENDEKKyAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7 CQkJLyogRm9yIGdldHRpbmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KKyAgICBzdGF0aWMgc3Ry dWN0IHRpbWViIGZ0cDsgICAgICAgICAgICAvKiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLworI2Vu ZGlmIC8qIEJTRDQxICovCisKKyNpZmRlZiBCRUxMVjEwCisgICAgc3RhdGljIGxvbmcgeGNsb2Nr OwkJCS8qIEZvciBnZXR0aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0 cnVjdCB0aW1lYiBmdHA7ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNl bmRpZiAvKiBCRUxMVjEwICovCisKKyNpZmRlZiBGVDIxCisgICAgc3RhdGljIGxvbmcgeGNsb2Nr OwkJCS8qIEZvciBnZXR0aW5nIHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0 cnVjdCB0aW1lYiBmdHA7ICAgICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNl bmRpZiAvKiBGVDIxICovCisKKyNpZmRlZiBUT1dFUjEKKyAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7 CQkJLyogRm9yIGdldHRpbmcgdGltZSBmcm9tIHN5cy90aW1lLmggKi8KKyAgICBzdGF0aWMgc3Ry dWN0IHRpbWViIGZ0cDsJCS8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCisjZW5kaWYgLyogVE9X RVIxICovCisKKyNpZmRlZiBDT0hFUkVOVAorICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBG b3IgZ2V0dGluZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLworICAgIHN0YXRpYyBzdHJ1Y3QgdGlt ZWIgZnRwOwkJLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAq LworCisjaWZkZWYgVjcKKyAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CisjZW5kaWYgLyogVjcgKi8K KworLyogc2d0dHkvdGVybWlvIGluZm9ybWF0aW9uLi4uICovCisKKyNpZmRlZiBCU0Q0NE9SUE9T SVgJCQkvKiBQT1NJWCBvciBCU0Q0NCAqLworICBzdGF0aWMgc3RydWN0IHRlcm1pb3MKKyAgICB0 dG9sZCwgdHRyYXcsIHR0dHZ0LCB0dGN1ciwKKyAgICBjY29sZCwgY2NyYXcsIGNjY2JyazsKKyNl bHNlCQkJCQkvKiBCU0QsIFY3LCBldGMgKi8KKworI2lmZGVmIENPSEVSRU5UCQkJCS8qIEhhY2sg YWxlcnQuLi4gKi8KKyNkZWZpbmUgQVRUU1YKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZk ZWYgQVRUU1YKKyAgc3RhdGljIHN0cnVjdCB0ZXJtaW8gdHRvbGQgPSB7MH07CS8qIEluaXQnZCBm b3Igd29yZCBhbGlnbm1lbnQsICovCisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0cmF3ID0gezB9 OwkvKiB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHNvbWUgKi8KKyAgc3RhdGljIHN0cnVjdCB0ZXJt aW8gdHR0dnQgPSB7MH07CS8qIHN5c3RlbXMsIGxpa2UgWmlsb2cuLi4gKi8KKyAgc3RhdGljIHN0 cnVjdCB0ZXJtaW8gdHRjdXIgPSB7MH07CisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIGNjb2xkID0g ezB9OworICBzdGF0aWMgc3RydWN0IHRlcm1pbyBjY3JhdyA9IHswfTsKKyAgc3RhdGljIHN0cnVj dCB0ZXJtaW8gY2NjYnJrID0gezB9OworI2Vsc2UKKyAgc3RhdGljIHN0cnVjdCBzZ3R0eWIgICAg ICAgICAgICAgICAgICAvKiBzZ3R0eSBpbmZvLi4uICovCisgICAgdHRvbGQsIHR0cmF3LCB0dHR2 dCwgdHRjdXIsIAkvKiBmb3IgY29tbXVuaWNhdGlvbiBsaW5lICovCisgICAgY2NvbGQsIGNjcmF3 LCBjY2Nicms7CQkvKiBhbmQgZm9yIGNvbnNvbGUgKi8KKyNpZmRlZiBCRUxMVjEwCisgIHN0YXRp YyBzdHJ1Y3QgdHR5ZGV2YgkJCS8qIERldmljZSBpbmZvLi4uICovCisgICAgdGRvbGQsIHRkY3Vy OwkJCS8qIGZvciBjb21tdW5pY2F0aW9uIGRldmljZSAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8K KyNpZmRlZiBUSU9DR0VUQworICBzdGF0aWMgc3RydWN0IHRjaGFycyB0Y2hvbGQsIHRjaG5vaTsK KworICBzdGF0aWMgaW50IHRjaGFyZjsKKyNlbmRpZiAvKiBUSU9DR0VUQyAqLworI2lmZGVmIFRJ T0NHTFRDCisgIHN0YXRpYyBzdHJ1Y3QgbHRjaGFycyBsdGNob2xkLCBsdGNobm9pOworICBzdGF0 aWMgaW50IGx0Y2hhcmY7CisjZW5kaWYgLyogVElPQ0dMVEMgKi8KKyAgaW50IGxtb2RlZiA9IDA7 CQkJLyogTG9jYWwgbW9kZXMgKi8KKyAgaW50IGxtb2RlID0gMDsKKyNlbmRpZiAvKiBBVFRTViAq LworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworCisjaWZkZWYgQ09NTUVOVAorLyogSXQgcGlj a3MgdXAgdGhlIHNwZWVkcyBidXQgdGhleSBkb24ndCB3b3JrICovCisjaWZkZWYgVU5JWFdBUkUJ CQkJLyogRm9yIGhpZ2hlciBzZXJpYWwgc3BlZWRzICovCisjaWZkZWYgVVc3CQkJCS8qIGluIFVu aXh3YXJlIDcuMCAqLworI2luY2x1ZGUgPHN5cy9hc3ljLmg+CQkJLyogVGhpcyBwaWNrcyB1cCA1 NzYwMCBhbmQgMTE1MjAwICovCisjZW5kaWYgLyogVVc3ICovCisjZW5kaWYgLyogVU5JWFdBUkUg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBQUk9WWDEKKyAgc3RhdGljIHN0cnVj dCBzZ3R0eWIgdHRidWY7CisjZW5kaWYgLyogUFJPVlgxICovCisKKyNpZmRlZiB1bHRyaXgKKy8q IGRvIHdlIHJlYWxseSBuZWVkIHRoaXM/ICovCisgIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliIHZhbmls bGE7CisjZW5kaWYgLyogdWx0cml4ICovCisKKyNpZmRlZiBBVFQ3MzAwCitzdGF0aWMgaW50IGF0 dG1vZGVtID0gMDsgICAgICAgICAgICAgICAgLyogQVRUNzMwMCBpbnRlcm5hbC1tb2RlbSBzdGF0 dXMgKi8KK3N0cnVjdCB1cGRhdGEgZGlhbGVyID0gezB9OwkJLyogQ29uZGl0aW9uIGRpYWxlciBm b3IgZGF0YSBjYWxsICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworCisjaWZuZGVmIE5PVVVDUAor I2RlZmluZSBGTEZOQU1MIDEyOAorI2lmbmRlZiBVU0VUVFlMT0NLCisjaWZkZWYgUlRBSVgKK2No YXIgbGtmbGZuW0ZMRk5BTUxdID0geyAnXDAnLCAnXDAnIH07CS8qIGFuZCBwb3NzaWJsZSBsaW5r IHRvIGl0ICovCisjZW5kaWYgLyogUlRBSVggKi8KK2NoYXIgbG9jazJbRkxGTkFNTF0gPSAgeyAn XDAnLCAnXDAnIH07CS8qIE5hbWUgb2Ygc2Vjb25kIGxvY2tmaWxlICovCisjZW5kaWYgLyogVVNF VFRZTE9DSyAqLworI2Vsc2UKKyNkZWZpbmUgRkxGTkFNTCA3CisjZW5kaWYgLyogTk9VVUNQICov CitjaGFyIGZsZm5hbVtGTEZOQU1MKzFdID0geyAnXDAnLCAnXDAnIH07IC8qIFVVQ1AgbG9jayBm aWxlIHBhdGggbmFtZSAqLworCitpbnQgaGFzbG9jayA9IDA7CQkJLyogPTEgaWYgdGhpcyBrZXJt aXQgbG9ja2VkIHV1Y3AgKi8KKworI2lmbmRlZiBPWE9TCisjaWZkZWYgU1ZPUlBPU0lYCitzdGF0 aWMgaW50IGNvbmVzYyA9IDA7ICAgICAgICAgICAgICAgICAgLyogc2V0IHRvIDEgaWYgZXNjIGNo YXIgKF5cKSB0eXBlZCAqLworI2Vsc2UKKyNpZmRlZiBWNworc3RhdGljIGludCBjb25lc2MgPSAw OworI2Vsc2UKKyNpZmRlZiBDNzAKK3N0YXRpYyBpbnQgY29uZXNjID0gMDsKKyNlbmRpZiAvKiBD NzAgKi8KKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8q IE9YT1MgKi8KKworLyogTG9jYWwgY29weSBvZiBjb21tIGRldmljZSBuYW1lIG9yIG5ldHdvcmsg aG9zdCAqLworc3RhdGljIGNoYXIgdHRubXN2W0RFVk5BTUxFTisxXSA9IHsgJ1wwJywgJ1wwJyB9 OworI2lmZGVmIFVTRVRUWUxPQ0sKK3N0YXRpYyBjaGFyIGxvY2tuYW1lW0RFVk5BTUxFTisxXTsJ LyogRGl0dG8sIHRoZSBwYXJ0IGFmdGVyICIvZGV2LyIuICovCisjZW5kaWYgLyogVVNFVFRZTE9D SyAqLworCisjaWZkZWYgYWVnaXMKK3N0YXRpYyBzdGF0dXNfJHQgc3Q7ICAgICAgICAgICAgICAg ICAgICAvKiBlcnJvciBzdGF0dXMgcmV0dXJuIHZhbHVlICovCitzdGF0aWMgc2hvcnQgY29uY3Jw ID0gMDsgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBjb25zb2xlIGlzIENSUCBwYWQgKi8KK3N0 YXRpYyB1aWRfJHQgdHR5dWlkOyAgICAgICAgICAgICAgICAgICAvKiB0dHkgdHlwZSB1aWQgKi8K K3N0YXRpYyB1aWRfJHQgY29udWlkOyAgICAgICAgICAgICAgICAgICAvKiBzdGRvdXQgdHlwZSB1 aWQgKi8KKworLyogQVBPTExPIEFlZ2lzIG1haW4oKQorICogZXN0YWJsaXNoIGFjbCB1c2FnZSBh bmQgY2xlYW51cCBoYW5kbGluZworICogICAgdGhpcyBtYWtlcyBzdXJlIHRoYXQgQ1JQIHBhZHMK KyAqICAgIGdldCByZXN0b3JlZCB0byBhIHVzYWJsZSBtb2RlCisgKi8KK21haW4oYXJnYyxhcmd2 KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7IHsKKyAgICAgICAgc3RhdHVzXyR0IHN0YXR1czsKKyAg ICAgICAgcGZtXyRjbGVhbnVwX3JlYyBkaXJ0eTsKKworICAgICAgICBQSURfVCBwaWQgPSBnZXRw aWQoKTsKKworICAgICAgICAvKiBhY2wgdXNhZ2UgYWNjb3JkaW5nIHRvIGludm9raW5nIGVudmly b25tZW50ICovCisgICAgICAgIGRlZmF1bHRfYWNsKFVTRV9ERUZFTlYpOworCisgICAgICAgIC8q IGVzdGFibGlzaCBhIGNsZWFudXAgY29udGludWF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHBm bV8kY2xlYW51cChkaXJ0eSk7CisgICAgICAgIGlmIChzdGF0dXMuYWxsICE9IHBmbV8kY2xlYW51 cF9zZXQpIHsKKyAgICAgICAgICAgICAgICAvKiBvbmx5IGhhbmRsZSBmYXVsdHMgZm9yIHRoZSBv cmlnaW5hbCBwcm9jZXNzICovCisgICAgICAgICAgICAgICAgaWYgKHBpZCA9PSBnZXRwaWQoKSAm JiBzdGF0dXMuYWxsID4gcGdtXyRtYXhfc2V2ZXJpdHkpIHsKKwkJICAgIC8qIGJsZXcgdXAgaW4g bWFpbiBwcm9jZXNzICovCisJCSAgICBzdGF0dXNfJHQgcXVvOworCQkgICAgcGZtXyRjbGVhbnVw X3JlYyBjbGVhbjsKKworCQkgICAgLyogcmVzdG9yZSB0aGUgY29uc29sZSBpbiBhbnkgY2FzZSAq LworCQkgICAgY29ucmVzKCk7CisKKwkJICAgIC8qIGF0dGVtcHQgYSBjbGVhbiBleGl0ICovCisJ CSAgICBkZWJ1ZyhGMTAxLCAiY2xlYW51cCBmYXVsdCBzdGF0dXMiLCAiIiwgc3RhdHVzLmFsbCk7 CisKKwkJICAgIC8qIGRvZXhpdCgpLCB0aGVuIHNlbmQgc3RhdHVzIHRvIGNvbnRpbnVhdGlvbiAq LworCQkgICAgcXVvID0gcGZtXyRjbGVhbnVwKGNsZWFuKTsKKwkJICAgIGlmIChxdW8uYWxsID09 IHBmbV8kY2xlYW51cF9zZXQpCisJCSAgICAgIGRvZXhpdChwZ21fJHByb2dyYW1fZmF1bHRlZCwt MSk7CisJCSAgICBlbHNlIGlmIChxdW8uYWxsID4gcGdtXyRtYXhfc2V2ZXJpdHkpCisJCSAgICAg IHBmbV8kc2lnbmFsKHF1byk7IC8qIGJsZXcgdXAgaW4gZG9leGl0KCkgKi8KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgLyogc2VuZCB0byB0aGUgb3JpZ2luYWwgY29udGludWF0 aW9uICovCisgICAgICAgICAgICAgICAgcGZtXyRzaWduYWwoc3RhdHVzKTsKKyAgICAgICAgICAg ICAgICAvKk5PVFJFQUNIRUQqLworCSAgICB9CisgICAgICAgIHJldHVybihja2NtYWkoYXJnYywg YXJndikpOworfQorI2VuZGlmIC8qIGFlZ2lzICovCisKKy8qIEFOU0ktc3R5bGUgcHJvdG90eXBl cyBmb3IgaW50ZXJuYWwgZnVuY3Rpb25zLiAqLworLyogRnVuY3Rpb25zIHVzZWQgb3V0c2lkZSB0 aGlzIG1vZHVsZSBhcmUgcHJvdG90eXBlZCBpbiBja2NrZXIuaC4gKi8KKworI2lmZGVmIGFwb2xs bworX1BST1RPVFlQKCBTSUdUWVAgdGltZXJoLCAoKSApOworX1BST1RPVFlQKCBTSUdUWVAgY2N0 cmFwLCAoKSApOworX1BST1RPVFlQKCBTSUdUWVAgZXNjdHJwLCAoKSApOworX1BST1RPVFlQKCBT SUdUWVAgc2lnX2lnbiwgKCkgKTsKKyNlbHNlCitfUFJPVE9UWVAoIFNJR1RZUCB0aW1lcmgsIChp bnQpICk7CitfUFJPVE9UWVAoIFNJR1RZUCBjY3RyYXAsIChpbnQpICk7CitfUFJPVE9UWVAoIFNJ R1RZUCBlc2N0cnAsIChpbnQpICk7CisjZW5kaWYgLyogYXBvbGxvICovCitfUFJPVE9UWVAoIGlu dCBkb19vcGVuLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IGluX2NoaywgKGlu dCwgaW50KSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IHR0cnBpZCwgKGNoYXIgKikgKTsKK19Q Uk9UT1RZUCggc3RhdGljIGludCB0dGNoa3BpZCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggc3Rh dGljIGludCB0dGxvY2ssIChjaGFyICopICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgdHR1bmxj aywgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIHNpZ2NobGRfaGFuZGxlciwgKGlu dCkgKTsKK19QUk9UT1RZUCggaW50IG15Z2V0YnVmLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50 IG15ZmlsbGJ1ZiwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgY29uYmd0LCAoaW50KSApOwor I2lmZGVmIEFDVUNOVFJMCitfUFJPVE9UWVAoIFZPSUQgYWN1Y250cmwsIChjaGFyICosIGNoYXIg KikgKTsKKyNlbmRpZiAvKiBBQ1VDTlRSTCAqLworCisjaWZkZWYgQlNENDRPUlBPU0lYCitfUFJP VE9UWVAoIGludCBjYXJyY3RsLCAoc3RydWN0IHRlcm1pb3MgKiwgaW50KSApOworI2Vsc2UKKyNp ZmRlZiBBVFRTVgorX1BST1RPVFlQKCBpbnQgY2FycmN0bCwgKHN0cnVjdCB0ZXJtaW8gKiwgaW50 KSApOworI2Vsc2UKK19QUk9UT1RZUCggaW50IGNhcnJjdGwsIChzdHJ1Y3Qgc2d0dHliICosIGlu dCkgKTsKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworCisj aWZkZWYgQVRUNzMwMAorX1BST1RPVFlQKCBpbnQgYXR0ZGlhbCwgKGNoYXIgKiwgbG9uZywgY2hh ciAqKSApOworX1BST1RPVFlQKCBpbnQgb2ZmZ2V0dHksIChjaGFyICopICk7CitfUFJPVE9UWVAo IGludCBvbmdldHR5LCAoY2hhciAqKSApOworI2VuZGlmIC8qIEFUVDczMDAgKi8KKworI2lmZGVm IEJFT1NPUkJFQk9YCisjaWZkZWYgU0VMRUNUCisgICAgLyogQmVPUyBpcyBub3QgY2FwYWJsZSBv ZiB1c2luZyBTRUxFQ1Qgb24gYW55dGhpbmcgYnV0IHNvY2tldHMgKi8KKyN1bmRlZiBTRUxFQ1QK KyNlbmRpZiAvKiBTRUxFQ1QgKi8KKyNpbmNsdWRlIDxrZXJuZWwvT1MuaD4KKy8qICNpZmRlZiBC RV9EUl83ICovCitzdGF0aWMgZG91YmxlIHRpbWVfc3RhcnRlZCA9IDAuMDsKK3N0cnVjdCBBTEFS TV9TVFJVQ1QgeworICAgIHRocmVhZF9pZCB0aHJlYWQ7CisgICAgaW50IHRpbWU7Cit9Oworc3Rh dGljIHRocmVhZF9pZCBhbGFybV90aHJlYWQgPSAtMTsKK3N0YXRpYyBzdHJ1Y3QgQUxBUk1fU1RS VUNUIGFsYXJtX3N0cnVjdDsKK19QUk9UT1RZUCggbG9uZyBkb19hbGFybSwgKHZvaWQgKikgKTsK K19QUk9UT1RZUCggdW5zaWduZWQgaW50IGFsYXJtLCAodW5zaWduZWQgaW50KSApOworX1BST1RP VFlQKCB2b2lkIGFsYXJtX2V4cGlyZWQsICh2b2lkKSApOworLyogI2VuZGlmICovIC8qIEJFX0RS XzcgKi8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworCisjaWZuZGVmIHh1bmNoYXIKKyNkZWZp bmUgeHVuY2hhcihjaCkgKCgoY2gpIC0gMzIgKSAmIDB4RkYgKQkvKiBDaGFyYWN0ZXIgdG8gbnVt YmVyICovCisjZW5kaWYgLyogeHVuY2hhciAqLworCisjaWZkZWYgQ0tfQU5TSUMKK3N0YXRpYyBj aGFyICoKK3h4bGFzdChjaGFyICpzLCBjaGFyIGMpCisjZWxzZQorc3RhdGljIGNoYXIgKgoreHhs YXN0KHMsYykgY2hhciAqczsgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB4eGxh c3QgKi8gewkJLyogIExhc3Qgb2NjdXJyZW5jZSBvZiBjaGFyYWN0ZXIgYyBpbiBzdHJpbmcgcy4g Ki8KKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAoaW50KXN0cmxlbihzKTsgaSA+IDA7IGktLSkK KyAgICAgIGlmIChzW2ktMV0gPT0gYyApIHJldHVybihzICsgKGkgLSAxKSk7CisgICAgcmV0dXJu KE5VTEwpOworfQorCisvKiBUaW1lb3V0IGhhbmRsZXIgZm9yIGNvbW11bmljYXRpb24gbGluZSBp bnB1dCBmdW5jdGlvbnMgKi8KKworLypBUkdTVVNFRCovCitTSUdUWVAKK3RpbWVyaChmb28pIGlu dCBmb287IHsKKyAgICB0dGltb2ZmKCk7CisjaWZkZWYgQkVPU09SQkVCT1gKKy8qICNpZmRlZiBC RV9EUl83ICovCisgICAgYWxhcm1fZXhwaXJlZCgpOworLyogI2VuZGlmICovIC8qIEJFX0RSXzcg Ki8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworI2lmZGVmIENLX1BPU0lYX1NJRworICAgIHNp Z2xvbmdqbXAoc2pidWYsMSk7CisjZWxzZQorICAgIGxvbmdqbXAoc2pidWYsMSk7CisjZW5kaWYg LyogQ0tfUE9TSVhfU0lHICovCit9CisKKy8qQVJHU1VTRUQqLworU0lHVFlQCit4dGltZXJoKGZv bykgaW50IGZvbzsgewkJCS8qIExpa2UgdGltZXJoKCkgYnV0IGRvZXMgKi8KKyNpZmRlZiBCRU9T T1JCRUJPWAkJCS8qIG5vdCByZXNldCB0aGUgdGltZXIgaXRzZWxmICovCisvKiAjaWZkZWYgQkVf RFJfNyAqLworICAgIGFsYXJtX2V4cGlyZWQoKTsKKy8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICov CisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKyNpZmRlZiBDS19QT1NJWF9TSUcKKyAgICBzaWds b25nam1wKHNqYnVmLDEpOworI2Vsc2UKKyAgICBsb25nam1wKHNqYnVmLDEpOworI2VuZGlmIC8q IENLX1BPU0lYX1NJRyAqLworfQorCisKKy8qIENvbnRyb2wtQyB0cmFwIGZvciBjb21tdW5pY2F0 aW9uIGxpbmUgaW5wdXQgZnVuY3Rpb25zICovCisKK2ludCBjY19pbnQ7CQkJCS8qIEZsYWcgKi8K K1NJR1RZUCAoKiBvY2N0KSgpOwkJCS8qIEZvciBzYXZpbmcgb2xkIFNJR0lOVCBoYW5kbGVyICov CisKKy8qQVJHU1VTRUQqLworU0lHVFlQCitjY3RyYXAoZm9vKSBpbnQgZm9vOyB7CQkJLyogTmVl ZHMgYXJnIGZvciBBTlNJIEMgKi8KKyAgY2NfaW50ID0gMTsJCQkJLyogc2lnbmFsKCkgcHJvdG90 eXBlLiAqLworICByZXR1cm47Cit9CisKKy8qICBTIFkgUyBJIE4gSSBUICAtLSAgU3lzdGVtLWRl cGVuZGVudCBwcm9ncmFtIGluaXRpYWxpemF0aW9uLiAgKi8KKworLyoKKyAqIHR0Z3dzaXooKSBy ZXR1cm5zOgorICoJMSAgICB0dF9yb3dzIGFuZCB0dF9jb2xzIGFyZSBrbm93biwgYm90aCBhbHRl cmVkLCBib3RoID4gMAorICoJMCAgICB0dF9yb3dzIGFuZC9vciB0dF9jb2xzIGFyZSBrbm93biwg Ym90aCBhbHRlcmVkLCBvbmUgb3IgYm90aCA8PSAwCisgKgktMSAgIHR0X3Jvd3MgYW5kIHR0X2Nv bHMgYXJlIHVua25vd24gYW5kIHVuYWx0ZXJlZAorICovCisKK2V4dGVybiBpbnQgdHRfcm93cywg dHRfY29sczsKKworc3RhdGljIGludAoreHR0Z3dzaXooKSB7CisgICAgY2hhciAqcDsKKyAgICBp bnQgcm93cyA9IDAsIGNvbHMgPSAwOworICAgIHAgPSBnZXRlbnYoIkxJTkVTIik7CisgICAgZGVi dWcoRjExMCwieHR0Z3dzaXogTElORVMiLHAsMCk7CisgICAgaWYgKHApIHsKKwlyb3dzID0gYXRv bChwKTsKKwlpZiAocm93cyA+IDApIHsKKwkgICAgcCA9IGdldGVudigiQ09MVU1OUyIpOworCSAg ICBkZWJ1ZyhGMTEwLCJ4dHRnd3NpeiBDT0xVTU5TIixwLDApOworCSAgICBpZiAocCkgeworCQlj b2xzID0gYXRvbChwKTsKKwkJaWYgKGNvbHMgPiAwKSB7CisJCSAgICB0dF9yb3dzID0gcm93czsK KwkJICAgIHR0X2NvbHMgPSBjb2xzOworCQkgICAgcmV0dXJuKDEpOworCQl9CisJCXJldHVybigw KTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuKC0xKTsKK30KKworI2lmZGVmIFRUTEVC VUYKK1ZPSUQKK2xlX2luaXQoKSB7CQkJCS8qIExvY2FsRWNob0luaXQoKSAqLworICAgIGludCBp OworICAgIGZvciAoaSA9IDA7IGkgPCBMRUJVRlNJWjsgaSsrKQorICAgICAgbGVfYnVmW2ldID0g J1wwJzsKKyAgICBsZV9zdGFydCA9IDA7CisgICAgbGVfZW5kID0gMDsKKyAgICBsZV9kYXRhID0g MDsKK30KKworVk9JRAorbGVfY2xlYW4oKSB7CQkJCS8qIExvY2FsRWNob0NsZWFudXAoKSAqLwor ICAgIGxlX2luaXQoKTsKKyAgICByZXR1cm47Cit9CisKK2ludAorbGVfaW5idWYoKSB7CisgICAg aW50IHJjID0gMDsKKyAgICBpZiAobGVfc3RhcnQgIT0gbGVfZW5kKSB7CisJcmMgPSAobGVfZW5k IC0KKwkgICAgICBsZV9zdGFydCArCisJICAgICAgTEVCVUZTSVopICUgTEVCVUZTSVo7CisgICAg fQorICAgIGRlYnVnKEYxMTEsImxlX2luYnVmIiwiY2hhcnMgd2FpdGluZyIscmMpOworICAgIHJl dHVybihyYyk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitsZV9wdXRjaGFyKENIQVIgY2gp CisjZWxzZQorbGVfcHV0Y2hhcihjaCkgQ0hBUiBjaDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor LyogbGVfcHV0Y2hhciAqLyB7CisjaWZkZWYgQ09NTUVOVAorICAgIC8qIEluIFVOSVggd2UgZG8g bm90IGhhdmUgYW5vdGhlciB0aHJlYWQgdGFraW5nIGNoYXJzIG91dCBvZiB0aGUgYnVmZmVyICov CisgICAgd2hpbGUgKChsZV9zdGFydCAtIGxlX2VuZCA9PSAxKSB8fAorICAgICAgICAgICAgKGxl X3N0YXJ0ID09IDAgJiYgbGVfZW5kID09IExFQlVGU0laIC0gMSkpIHsKKwkvKiBCdWZmZXIgaXMg ZnVsbCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJsZV9wdXRjaGFyIiwiQnVmZmVyIGlzIEZ1bGwi LGNoKTsKKyAgICAgICAgUmVsZWFzZUxvY2FsRWNob011dGV4KCkgOworICAgICAgICBtc2xlZXAo MjUwKTsKKyAgICAgICAgUmVxdWVzdExvY2FsRWNob011dGV4KCBTRU1fSU5ERUZJTklURV9XQUlU ICkgOworICAgIH0KKyNlbHNlCisgICAgaWYgKChsZV9zdGFydCAtIGxlX2VuZCArIExFQlVGU0la KSVMRUJVRlNJWiA9PSAxKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImxlX3B1dGNoYXIiLCJidWZm ZXIgaXMgZnVsbCIsMCk7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICBsZV9idWZbbGVfZW5kKytdID0gY2g7CisgICAgaWYgKGxlX2VuZCA9PSBM RUJVRlNJWikKKyAgICAgIGxlX2VuZCA9IDA7CisgICAgbGVfZGF0YSA9IDE7CisgICAgcmV0dXJu KDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworbGVfcHV0cyhDSEFSICogcywgaW50IG4p CisjZWxzZQorbGVfcHV0cyhzLG4pIENIQVIgKiBzOyBpbnQgbjsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogbGVfcHV0cyAqLyB7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgaSA9IDA7Cisg ICAgQ0hBUiAqIHAgPSAoQ0hBUiAqKSJsZV9wdXRzIjsKKyAgICBja2hleGR1bXAocCxzLG4pOwor ICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICByYyA9IGxlX3B1dGNoYXIoKGNoYXIp c1tpXSk7CisgICAgZGVidWcoRjEwMSwibGVfcHV0cyIsIiIscmMpOworICAgIHJldHVybihyYyk7 Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitsZV9wdXRzdHIoQ0hBUiAqIHMpCisjZWxzZQor bGVfcHV0c3RyKHMpIENIQVIgKiBzOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBsZV9wdXRz ICovIHsKKyAgICBDSEFSICogcDsKKyAgICBpbnQgcmMgPSAwOworICAgIHAgPSAoQ0hBUiAqKSJs ZV9wdXRzdHIiOworICAgIGNraGV4ZHVtcChwLHMsKGludClzdHJsZW4oKGNoYXIgKilzKSk7Cisg ICAgZm9yIChwID0gczsgKnAgJiYgIXJjOyBwKyspCisgICAgICByYyA9IGxlX3B1dGNoYXIoKnAp OworICAgIHJldHVybihyYyk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCitsZV9nZXRjaGFy KENIQVIgKiBwY2gpCisjZWxzZSAvKiBDS19BTlNJQyAqLworbGVfZ2V0Y2hhcihwY2gpIENIQVIg KiBwY2g7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGxlX2dhdGNoYXIgKi8geworICAgIGlu dCByYyA9IDA7CisgICAgaWYgKGxlX3N0YXJ0ICE9IGxlX2VuZCkgeworICAgICAgICAqcGNoID0g bGVfYnVmW2xlX3N0YXJ0XTsKKyAgICAgICAgbGVfYnVmW2xlX3N0YXJ0XSA9IDA7CisgICAgICAg IGxlX3N0YXJ0Kys7CisKKyAgICAgICAgaWYgKGxlX3N0YXJ0ID09IExFQlVGU0laKQorICAgICAg ICAgIGxlX3N0YXJ0ID0gMDsKKworICAgICAgICBpZiAobGVfc3RhcnQgPT0gbGVfZW5kKSB7Cisg ICAgICAgICAgICBsZV9kYXRhID0gMDsKKyAgICAgICAgfQorICAgICAgICByYysrOworICAgIH0g ZWxzZSB7CisgICAgICAgICpwY2ggPSAwOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorI2Vu ZGlmIC8qIFRUTEVCVUYgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qCisgIFNvbWUgc3lzdGVtcyBs aWtlIE9TRi8xIHVzZSBUSU9DR1NJWkUgaW5zdGVhZCBvZiBUSU9DR1dJTlNaLgorICBCdXQgYXMg ZmFyIGFzIEkga25vdywgd2hlbmV2ZXIgVElPQ0dTSVpFIGlzIGRlZmluZWQsIGl0IGlzCisgIGVx dWF0ZWQgdG8gVElPQ0dXSU5TWi4gIEZvciBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCBkb25lLCB0 cnkgdGhpczoKKyovCisjaWZuZGVmIFRJT0NHV0lOU1oKKyNpZmRlZiBUSU9DR1NJWkUKKyNkZWZp bmUgVElPQ0dXSU5TWiBUSU9DR1NJWkUKKyNlbmRpZiAvKiBUSU9DR1NJWkUgKi8KKyNlbmRpZiAv KiBUSU9DR1dJTlNaICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCitzdGF0aWMgaW50IHR0X3hw aXhlbCA9IDAsIHR0X3lwaXhlbCA9IDA7CisKK2ludAordHRnd3NpeigpIHsKKyAgICBpbnQgeCA9 IDA7CisjaWZuZGVmIE5PTkFXUworI2lmZGVmIFFOWAorLyoKKyAgTk9URTogVElPQ0dXU0laIHdv cmtzIGhlcmUgdG9vLCBidXQgb25seSBpbiB0aGUgMzItYml0IHZlcnNpb24uCisgIFRoaXMgY29k ZSB3b3JrcyBmb3IgYm90aCB0aGUgMTYtIGFuZCAzMi1iaXQgdmVyc2lvbnMuCisqLworICAgIGV4 dGVybiBpbnQgZGV2X3NpemUoaW50LCBpbnQsIGludCwgaW50ICosIGludCAqKTsKKyAgICBpbnQg ciwgYzsKKworICAgIGlmIChkZXZfc2l6ZSgwLCAtMSwgLTEsICZyLCAmYykgPT0gMCkgeworCWRl YnVnKEYxMDEsInR0Z3dzaXogUU5YIHIiLCIiLHIpOworCWRlYnVnKEYxMDEsInR0Z3dzaXogUU5Y IGMiLCIiLGMpOworCXR0X3Jvd3MgPSByOworCXR0X2NvbHMgPSBjOworCXJldHVybiAoKHIgPiAw ICYmIGMgPiAwKSA/IDEgOiAwKTsKKyAgICB9IGVsc2UgcmV0dXJuKHh0dGd3c2l6KCkpOworI2Vs c2UgLyogUU5YICovCisjaWZkZWYgVElPQ0dXSU5TWgorCisvKiBOb3RlLCB0aGlzIHdhcyBNX1VO SVgsIGNoYW5nZWQgdG8gWEVOSVggdG8gYWxsb3cgY3Jvc3MgY29tcGlsYXRpb24uLi4gKi8KKyNp ZmRlZiBYRU5JWAkJCQkvKiBTQ08gVU5JWCAzLjJ2NC4wICovCisjaW5jbHVkZSA8c3lzL3N0cmVh bS5oPgkJCS8qIHR5cGVkZWYgbWJsa190IG5lZWRlZCBieSBwdGVtLmggKi8KKyNpbmNsdWRlIDxz eXMvcHRlbS5oPgkJCS8qIGZvciB0dGd3c2l6KCkgKi8KKyNlbmRpZiAvKiBYRU5JWCAqLworCisj aWZkZWYgSTM4NklYCQkJCS8qIERpdHRvIGZvciBJbnRlcmFjdGl2ZSAqLworI2luY2x1ZGUgPHN5 cy9zdHJlYW0uaD4KKyNpbmNsdWRlIDxzeXMvcHRlbS5oPgorI2VuZGlmIC8qIEkzODZJWCAqLwor CisvKiBOb3RlLCB0aGUgYWJvdmUgbWlnaHQgYmUgbmVlZGVkIGZvciBzb21lIG90aGVyIG9sZGVy IFNWUjMgSW50ZWwgbWFrZXMuLi4gKi8KKworICAgIHN0cnVjdCB3aW5zaXplIHc7CisgICAgdHRf eHBpeGVsID0gMDsKKyAgICB0dF95cGl4ZWwgPSAwOworCisjaWZkZWYgSUtTRAorICAgIGlmIChp bnNlcnZlcikKKyAgICAgIHJldHVybih4dHRnd3NpeigpKTsKKyNlbmRpZiAvKiBJS1NEICovCisg ICAgeCA9IGlvY3RsKDAsIChpbnQpVElPQ0dXSU5TWiwgKGNoYXIgKikmdyk7CisgICAgZGVidWco RjEwMSwidHRnd3NpeiBUSU9DR1dJTlNaIiwiIix4KTsKKyAgICBpZiAoeCA8IDApIHsKKwlyZXR1 cm4oeHR0Z3dzaXooKSk7CisgICAgfSBlbHNlIGlmICh3LndzX3JvdyA+IDAgJiYgdy53c19jb2wg PiAwKSB7CisJdHRfcm93cyA9IHcud3Nfcm93OworCXR0X2NvbHMgPSB3LndzX2NvbDsKKwl0dF94 cGl4ZWwgPSB3LndzX3hwaXhlbDsKKwl0dF95cGl4ZWwgPSB3LndzX3lwaXhlbDsKKwlkZWJ1ZyhG MTAxLCJ0dGd3c2l6IHR0X3Jvd3MiLCIiLHR0X3Jvd3MpOworCWRlYnVnKEYxMDEsInR0Z3dzaXog dHRfY29scyIsIiIsdHRfY29scyk7CisJcmV0dXJuKDEpOworICAgIH0gZWxzZSB7CisJZGVidWco RjEwMCwidHRnd3NpeiBUSU9DR1dJTlNaIDAwIiwiIiwwKTsKKwlyZXR1cm4oeHR0Z3dzaXooKSk7 CisgICAgfQorI2Vsc2UKKyAgICByZXR1cm4oeHR0Z3dzaXooKSk7CisjZW5kaWYgLyogVElPQ0dX SU5TWiAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIE5PTkFXUyAqLworfQorCisKKyNp ZmRlZiBSTE9HQ09ERQorX1BST1RPVFlQKCBpbnQgcmxvZ19uYXdzLCAodm9pZCkgKTsKKyNlbmRp ZgkvKiBSTE9HQ09ERSAqLworCisjaWZuZGVmIE5PU0lHV0lOQ0gKKyNpZmRlZiBTSUdXSU5DSAor U0lHVFlQCit3aW5jaGgoZm9vKSBpbnQgZm9vOyB7CQkJLyogU0lHV0lOQ0ggaGFuZGxlciAqLwor ICAgIGludCB4ID0gMDsKKyNpZmRlZiBDS19UVFlGRAorI2lmbmRlZiBWTVMKKyAgICBleHRlcm4g aW50IHR0eWZkOworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLX1RUWUZEICovCisgICAg ZXh0ZXJuIGludCB0dF9yb3dzLCB0dF9jb2xzLCBjbWRfcm93cywgY21kX2NvbHM7CisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEwMCwiKioqKioqKioqKioqKioqIiwi IiwwKTsKKwlkZWJ1ZyhGMTAwLCJTSUdXSU5DSCBjYXVnaHQiLCIiLDApOworCWRlYnVnKEYxMDAs IioqKioqKioqKioqKioqKiIsIiIsMCk7CisjaWZkZWYgTkVUUFRZCisJZGVidWcoRjEwMSwiU0lH V0lOQ0ggcHR5X2ZvcmtfcGlkIiwiIixwdHlfZm9ya19waWQpOworI2VuZGlmIC8qIE5FVFBUWSAq LworICAgIH0KKyNlbmRpZiAvKiBERVVCICovCisgICAgc2lnbmFsKFNJR1dJTkNILHdpbmNoaCk7 ICAgICAgICAgICAgLyogUmUtYXJtIHRoZSBzaWduYWwgKi8KKyAgICB4ID0gdHRnd3NpeigpOyAg ICAgICAgICAgICAgICAgICAgICAvKiBHZXQgbmV3IHdpbmRvdyBzaXplICovCisgICAgY21kX3Jv d3MgPSB0dF9yb3dzOwkJCS8qIEFkanVzdCBjb21tYW5kIHNjcmVlbiB0b28gKi8KKyAgICBjbWRf Y29scyA9IHR0X2NvbHM7CisKKyNpZmRlZiBDS19UVFlGRAorICAgIGlmCQkJCQkvKiBJZiB3ZSBk b24ndCBoYXZlIGEgY29ubmVjdGlvbiAqLworI2lmZGVmIFZNUwkJCQkvKiB3ZSdyZSBkb25lLiAq LworICAgICAgKHZtc3R0eWZkKCkgPT0gLTEpCisjZWxzZQorICAgICAgKHR0eWZkID09IC0xKQor I2VuZGlmIC8qIFZNUyAqLworI2Vsc2UKKyAgICAgICghbG9jYWwpCisjZW5kaWYgLyogQ0tfVFRZ RkQgKi8KKyAgICAgICAgcmV0dXJuOworCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHB0eV9mb3Jr X3BpZCA+IC0xKSB7CQkvKiAic2V0IGhvc3QiIHRvIGEgUFRZPyAqLworCWludCB4OworCisjaWZk ZWYgVElPQ1NXSU5TWgorCXN0cnVjdCB3aW5zaXplIHc7CQkvKiBSZXNpemUgdGhlIFBUWSAqLwor CWVycm5vID0gMDsKKwl3LndzX2NvbCA9IHR0X2NvbHM7CisJdy53c19yb3cgPSB0dF9yb3dzOwor CXcud3NfeHBpeGVsID0gdHRfeHBpeGVsOworCXcud3NfeXBpeGVsID0gdHRfeXBpeGVsOworCXgg PSBpb2N0bCh0dHlmZCxUSU9DU1dJTlNaLCZ3KTsKKwlkZWJ1ZyhGMTAxLCJ3aW5jaGggVElPQ1NX SU5TWiIsIiIseCk7CisJZGVidWcoRjEwMSwid2luY2hoIFRJT0NTV0lOU1ogZXJybm8iLCIiLGVy cm5vKTsKKyNlbmRpZiAvKiBUSU9DU1dJTlNaICovCisKKwllcnJubyA9IDA7CisJeCA9IGtpbGwo cHR5X2ZvcmtfcGlkLFNJR1dJTkNIKTsKKwlkZWJ1ZyhGMTAxLCJ3aW5jaGgga2lsbCIsIiIseCk7 CisJZGVidWcoRjEwMSwid2luY2hoIGtpbGwgZXJybm8iLCIiLGVycm5vKTsKKyAgICB9CisjZW5k aWYgLyogTkVUUFRZICovCisKKy8qCisgIFRoaXMgc2hvdWxkIGJlIE9LLiAgSXQgbWlnaHQgc2Vl bSB0aGF0IHNlbmRpbmcgdGhpcyBmcm9tCisgIGludGVycnVwdCBsZXZlbCBjb3VsZCBpbnRlcmZl cmUgd2l0aCBhbm90aGVyIFRFTE5FVCBJQUMgc3RyaW5nCisgIHRoYXQgd2FzIGluIHRoZSBwcm9j ZXNzIG9mIGJlaW5nIHNlbnQuICBCdXQgd2UgYWx3YXlzIHNlbmQKKyAgVEVMTkVUIHN0cmluZ3Mg d2l0aCBhIHNpbmdsZSB3cml0ZSgpLCB3aGljaCBzaG91bGQgcHJldmVudCBtaXh1cHMuCisgIGJs YWhfc25hd3MoKSBzaG91bGQgcHJvdGVjdCB0aGVtc2VsdmVzIGZyb20gYmVpbmcgY2FsbGVkIG9u IHRoZQorICB3cm9uZyBraW5kIG9mIGNvbm5lY3Rpb24uCisqLworI2lmZGVmIFRDUFNPQ0tFVAor I2lmbmRlZiBOT1RUR1dTSVoKKyAgICBpZiAoeCA+IDAgJiYgdHRfcm93cyA+IDAgJiYgdHRfY29s cyA+IDApIHsKKyAgICAgICAgdG5fc25hd3MoKTsKKyNpZmRlZiBSTE9HQ09ERQorICAgICAgICBy bG9nX25hd3MoKTsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAgIH0KKyNlbmRpZiAvKiBOT1RU R1dTSVogKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICBTSUdSRVRVUk47Cit9CisjZW5k aWYgLyogU0lHV0lOQ0ggKi8KKyNlbmRpZiAvKiBOT1NJR1dJTkNIICovCisKK1NJR1RZUAorc2ln aHVwKGZvbykgaW50IGZvbzsgewkJCS8qIFNJR0hVUCBoYW5kbGVyICovCisgICAgYmFja2dyZCA9 IDE7CisgICAgZGVidWcoRjEwMCwiKioqKioqKioqKioqKioqIiwiIiwwKTsKKyAgICBkZWJ1ZyhG MTAwLCJTSUdIVVAgcmVjZWl2ZWQiLCIiLDApOworICAgIGRlYnVnKEYxMDAsIioqKioqKioqKioq KioqKiIsIiIsMCk7CisgICAgZG9leGl0KEJBRF9FWElULC0xKTsKKyAgICAvKk5PVFJFQUNIRUQq LworICAgIFNJR1JFVFVSTjsJCQkJLyogU2h1dCBwaWNreSBjb21waWxlcnMgdXAuLi4gKi8KK30K KworI2lmZGVmIENLX1NDTzMyVjQKKy8qIEV4aXN0cyBidXQgdGhlcmUgaXMgbm8gcHJvdG90eXBl IGluIHRoZSBoZWFkZXIgZmlsZXMgKi8KK19QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQp ICk7CisjZWxzZQorI2lmZGVmIFNWNjhSM1Y2CitfUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAo aW50KSApOworI2Vsc2UKKyNpZmRlZiB1bHRyaXgKK19QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUs IChpbnQpICk7CisjZWxzZQorI2lmZGVmIEhQVVg2CitfUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1l LCAoaW50KSApOworI2Vsc2UKKyNpZmRlZiBIUFVYNQorX1BST1RPVFlQKCBjaGFyICogdHR5bmFt ZSwgKGludCkgKTsKKyNlbHNlCisjaWZkZWYgUFMyQUlYMTAKK19QUk9UT1RZUCggY2hhciAqIHR0 eW5hbWUsIChpbnQpICk7CisjZWxzZQorI2lmZGVmIEJTRDQyCitfUFJPVE9UWVAoIGNoYXIgKiB0 dHluYW1lLCAoaW50KSApOworI2VuZGlmIC8qIEJTRDQyICovCisjZW5kaWYgLyogUFMyQUlYMTAg Ki8KKyNlbmRpZiAvKiBIUFVYNSAqLworI2VuZGlmIC8qIEhQVVg2ICovCisjZW5kaWYgLyogdWx0 cml4ICovCisjZW5kaWYgLyogU1Y2OFIzVjYgKi8KKyNlbmRpZiAvKiBDS19TQ08zMlY0ICovCisK KyNpZm5kZWYgU0lHVVNSMQkJCQkvKiBVc2VyLWRlZmluZWQgc2lnbmFscyAqLworI2RlZmluZSBT SUdVU1IxIDMwCisjZW5kaWYgLyogU0lHVVNSMSAqLworCisjaWZuZGVmIFNJR1VTUjIKKyNkZWZp bmUgU0lHVVNSMiAzMQorI2VuZGlmIC8qIFNJR1VTUjIgKi8KKworLyoKKyAgaWdub3JzaWdzKCkg c2V0cyBjZXJ0YWluIHNpZ25hbHMgdG8gU0lHX0lHTi4gIEJ1dCB3aGVuIGEgc2lnbmFsIGlzCisg IGlnbm9yZWQsIGl0IHJlbWFpbnMgaWdub3JlZCBhY3Jvc3MgZXhlYygpLCBzbyB3ZSBoYXZlIHRv IHJlc3RvcmUgdGhlc2UKKyAgc2lnbmFscyBiZWZvcmUgZXhlYygpLCB3aGljaCBpcyB0aGUgcHVy cG9zZSBvZiByZXN0b3JzaWdzKCkuCisqLworc3RhdGljIFZPSUQKK2lnbm9yc2lncygpIHsJCQkJ LyogSWdub3JlIHRoZXNlIHNpZ25hbHMgKi8KKyAgICBzYXZxdWl0ID0gc2lnbmFsKFNJR1FVSVQs U0lHX0lHTik7CS8qIElnbm9yZSBRdWl0IHNpZ25hbCAqLworCisjaWZkZWYgU0lHREFOR0VSCQkJ LyogSWdub3JlIGRhbmdlciBzaWduYWxzICovCisvKgorICBUaGlzIHNpZ25hbCBpcyBzZW50IHdo ZW4gdGhlIHN5c3RlbSBpcyBsb3cgb24gc3dhcCBzcGFjZS4gIFByb2Nlc3NlcworICB0aGF0IGRv bid0IGhhbmRsZSBpdCBhcmUgY2FuZGlkYXRlcyBmb3IgdGVybWluYXRpb24uICBJZiBzd2FwIHNw YWNlIGRvZXNuJ3QKKyAgY2xlYXIgb3V0IGVub3VnaCwgd2Ugc3RpbGwgbWlnaHQgYmUgdGVybWlu YXRlZCB2aWEga2lsbCgpIC0tIG5vdGhpbmcgd2UgY2FuCisgIGRvIGFib3V0IHRoYXQhICBDb25j ZWl2YWJseSwgdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBieSBpbnN0YWxsaW5nIGEgcmVhbAorICBz aWduYWwgaGFuZGxlciB0aGF0IHdhcm5zIHRoZSB1c2VyLCBidXQgdGhhdCB3b3VsZCBiZSBwcmV0 dHkgY29tcGxpY2F0ZWQsCisgIHNpbmNlIHdlIGFyZSBub3QgYWx3YXlzIGluIGNvbnRyb2wgb2Yg dGhlIHNjcmVlbiAtLSBlLmcuIGR1cmluZyByZW1vdGUtbW9kZQorICBmaWxlIHRyYW5zZmVyLgor Ki8KKyAgICBzYXZkYW5nZXIgPSBzaWduYWwoU0lHREFOR0VSLFNJR19JR04pOyAvKiBlLmcuIGlu IEFJWCAqLworI2VuZGlmIC8qIFNJR0RBTkdFUiAqLworI2lmZGVmIFNJR1BJUEUKKy8qCisgIFRo aXMgb25lIGNvbWVzIHdoZW4gYSBUQ1AvSVAgY29ubmVjdGlvbiBpcyBicm9rZW4gYnkgdGhlIHJl bW90ZS4KKyAgV2UgcHJlZmVyIHRvIGNhdGNoIHRoaXMgc2l0dWF0aW9uIGJ5IGV4YW1pbmluZyBl cnJvciBjb2RlcyBmcm9tIHdyaXRlKCkuCisqLworICAgIHNhdnBpcGUgPSBzaWduYWwoU0lHUElQ RSxTSUdfSUdOKTsKKyNlbmRpZiAvKiBTSUdQSVBFICovCisgICAgc2F2dXNyMSA9IHNpZ25hbChT SUdVU1IxLFNJR19JR04pOwkvKiBJZ25vcmUgdXNlci1kZWZpbmVkIHNpZ25hbHMgKi8KKyAgICBz YXZ1c3IyID0gc2lnbmFsKFNJR1VTUjIsU0lHX0lHTik7Cit9CisKK1ZPSUQKK3Jlc3RvcnNpZ3Mo KSB7CQkJCS8qIFJlc3RvcmUgdGhlc2Ugc2lnbmFscyAqLworICAgIChWT0lEKSBzaWduYWwoU0lH UVVJVCxzYXZxdWl0KTsJLyogKHVzZWQgaW4gY2t1ZmlvLmMpICovCisjaWZkZWYgU0lHREFOR0VS CisgICAgKFZPSUQpIHNpZ25hbChTSUdEQU5HRVIsc2F2ZGFuZ2VyKTsKKyNlbmRpZiAvKiBTSUdE QU5HRVIgKi8KKyNpZmRlZiBTSUdQSVBFCisgICAgKFZPSUQpIHNpZ25hbChTSUdQSVBFLHNhdnBp cGUpOworI2VuZGlmIC8qIFNJR1BJUEUgKi8KKyAgICAoVk9JRCkgc2lnbmFsKFNJR1VTUjEsc2F2 dXNyMSk7CisgICAgKFZPSUQpIHNpZ25hbChTSUdVU1IyLHNhdnVzcjIpOworfQorCitpbnQKK3N5 c2luaXQoKSB7CisgICAgaW50IHg7CisgICAgY2hhciAqIHM7CisjaWZkZWYgQ0tfVVRTTkFNRQor ICAgIHN0cnVjdCB1dHNuYW1lIG5hbWU7CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworCisgICAg ZXh0ZXJuIGNoYXIgc3RhcnR1cGRpcltdOworLyoKKyAgQkVGT1JFIEFOWVRISU5HIEVMU0U6IElu aXRpYWxpemUgdGhlIHNldHVpZCBwYWNrYWdlLgorICBDaGFuZ2UgdG8gdGhlIHVzZXIncyByZWFs IHVzZXIgYW5kIGdyb3VwIElELgorICBJZiB0aGlzIGNhbid0IGJlIGRvbmUsIGRvbid0IHJ1biBh dCBhbGwuCisqLworICAgIHggPSBwcml2X2luaSgpOworI2lmZGVmIFNVSURERUJVRworICAgIGZw cmludGYoc3RkZXJyLCJQUklWX0lOST0lZFxuIix4KTsKKyNlbmRpZiAvKiBTVUlEREVCVUcgKi8K KyAgICBpZiAoeCkgeworCWlmICh4ICYgMSkgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBzZXR1aWQg ZmFpbHVyZS5cbiIpOworCWlmICh4ICYgMikgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBzZXRnaWQg ZmFpbHVyZS5cbiIpOworCWlmICh4ICYgNCkgZnByaW50ZihzdGRlcnIsIkZhdGFsOiBDLUtlcm1p dCBzZXR1aWQgdG8gcm9vdCFcbiIpOworCWV4aXQoMSk7CisgICAgfQorICAgIHNpZ25hbChTSUdJ TlQsU0lHX0lHTik7CQkvKiBJZ25vcmUgaW50ZXJydXB0cyBhdCBmaXJzdCAqLworICAgIHNpZ25h bChTSUdGUEUsU0lHX0lHTik7CQkvKiBJZ25vcmUgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucyAq LworICAgIHNpZ25hbChTSUdIVVAsc2lnaHVwKTsJCS8qIENhdGNoIFNJR0hVUCAqLworI2lmbmRl ZiBOT1NJR1dJTkNICisjaWZkZWYgU0lHV0lOQ0gKKyAgICBzaWduYWwoU0lHV0lOQ0gsd2luY2ho KTsJCS8qIENhdGNoIHdpbmRvdy1zaXplIGNoYW5nZSAqLworI2VuZGlmIC8qIFNJR1dJTkNIICov CisjZW5kaWYgLyogTk9TSUdXSU5DSCAqLworCisjaWZkZWYgU0lHWEZTWgorICAgIHNpZ25hbChT SUdYRlNaLFNJR19JR04pOwkJLyogSWdub3JlIHdyaXRpbmcgcGFzdCBmaWxlIGxpbWl0ICovIAor I2VuZGlmCS8qIFNJR1hGU1ogKi8KKworI2lmbmRlZiBOT0pDCisvKgorICBHZXQgdGhlIGluaXRp YWwgam9iIGNvbnRyb2wgc3RhdGUuCisgIElmIGl0IGlzIFNJR19JR04sIHRoYXQgbWVhbnMgdGhl IHNoZWxsIGRvZXMgbm90IHN1cHBvcnQgam9iIGNvbnRyb2wsCisgIGFuZCBzbyB3ZSdkIGJldHRl ciBub3Qgc3VzcGVuZCBvdXJzZWx2ZXMuCisqLworI2lmZGVmIFNJR1RTVFAKKyAgICBqY2hkbHIg PSBzaWduYWwoU0lHVFNUUCxTSUdfSUdOKTsKKyAgICBpZiAoamNoZGxyID09IFNJR19JR04pIHsK KwlqY3NoZWxsID0gMDsKKwlkZWJ1ZyhGMTAwLCJzeXNpbml0IGpjaGRscjogU0lHX0lHTiIsIiIs MCk7CisgICAgfSBlbHNlIGlmIChqY2hkbHIgPT0gU0lHX0RGTCkgeworCWRlYnVnKEYxMDAsInN5 c2luaXQgamNoZGxyOiBTSUdfREZMIiwiIiwwKTsKKwlqY3NoZWxsID0gMTsKKyAgICB9IGVsc2Ug eworCWRlYnVnKEYxMDAsInN5c2luaXQgamNoZGxyOiBvdGhlciIsIiIsMCk7CisJamNzaGVsbCA9 IDM7CisgICAgfQorICAgIChWT0lEKSBzaWduYWwoU0lHVFNUUCxqY2hkbHIpOwkvKiBQdXQgaXQg YmFjay4uLiAqLworI2VuZGlmIC8qIFNJR1RTVFAgKi8KKyNlbmRpZiAvKiBOT0pDICovCisKKyAg ICBjb25iZ3QoMCk7CQkJCS8qIFNlZSBpZiB3ZSdyZSBpbiB0aGUgYmFja2dyb3VuZCAqLworICAg IGNvbmdtKCk7CQkJCS8qIEdldCBjb25zb2xlIG1vZGVzICovCisKKyAgICAoVk9JRCkgc2lnbmFs KFNJR0FMUk0sU0lHX0lHTik7CS8qIElnbm9yZSBhbGFybXMgKi8KKworICAgIGlnbm9yc2lncygp OwkJCS8qIElnbm9yZSBzb21lIG90aGVyIHNpZ25hbHMgKi8KKworI2lmZGVmIEZfU0VURkwKKyAg ICBpbmlmbGFncyA9IGZjbnRsKDAsRl9HRVRGTCwwKTsJLyogR2V0IHN0ZGluIGZsYWdzICovCisj ZW5kaWYgLyogRl9TRVRGTCAqLworCisjaWZkZWYgdWx0cml4CisgICAgZ3R0eSgwLCZ2YW5pbGxh KTsJCQkvKiBHZXQgc2d0dHkgaW5mbyAqLworI2Vsc2UKKyNpZmRlZiBBVVgKKyAgICBzZXQ0MnNp ZygpOwkJCQkvKiBEb24ndCBhc2shIChoYWthbnNvbkBjcy5vcnN0LmVkdSkgKi8KKyNlbmRpZiAv KiBBVVggKi8KKyNlbmRpZiAvKiB1bHRyaXggKi8KKy8qCisgIFdhcm5pbmc6IG9uIHNvbWUgVU5J WCBzeXN0ZW1zIChTVlI0PyksIHR0eW5hbWUoKSByZXBvcnRlZGx5IG9wZW5zIC9kZXYgYnV0Cisg IG5ldmVyIGNsb3NlcyBpdC4gIElmIGl0IGlzIGNhbGxlZCBvZnRlbiBlbm91Z2gsIHdlIHJ1biBv dXQgb2YgZmlsZQorICBkZXNjcmlwdG9ycyBhbmQgc3Vic2VxdWVudCBvcGVuKCkncyBvZiBvdGhl ciBkZXZpY2VzIG9yIGZpbGVzIGNhbiBmYWlsLgorKi8KKyAgICBzID0gTlVMTDsKKyNpZm5kZWYg TUlOSVgKKyAgICBpZiAoaXNhdHR5KDApKQkJCS8qIE5hbWUgb2YgY29udHJvbGxpbmcgdGVybWlu YWwgKi8KKyAgICAgIHMgPSB0dHluYW1lKDApOworICAgIGVsc2UgaWYgKGlzYXR0eSgxKSkKKyAg ICAgIHMgPSB0dHluYW1lKDEpOworICAgIGVsc2UgaWYgKGlzYXR0eSgyKSkKKyAgICAgIHMgPSB0 dHluYW1lKDIpOworICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdHR5bmFtZSgwKSIscywwKTsKKyNl bmRpZiAvKiBNSU5JWCAqLworCisjaWZkZWYgQkVPUworICAgIGlmICghZGZ0dHkpCisgICAgICBt YWtlc3RyKCZkZnR0eSxzKTsKKyNlbmRpZiAvKiBCRU9TICovCisKKyAgICBpZiAocykKKyAgICAg IGNrc3RybmNweSgoY2hhciAqKWN0dG5hbSxzLERFVk5BTUxFTisxKTsKKyNpZmRlZiBTVk9SUE9T SVgKKyAgICBpZiAoIWN0dG5hbVswXSkKKyAgICAgIGN0ZXJtaWQoY3R0bmFtKTsKKyNlbmRpZiAv KiBTVk9SUE9TSVggKi8KKyAgICBpZiAoIWN0dG5hbVswXSkKKyAgICAgIGNrc3RybmNweSgoY2hh ciAqKWN0dG5hbSxkZnR0eSxERVZOQU1MRU4rMSk7CisgICAgZGVidWcoRjExMCwic3lzaW5pdCBD VFROQU0iLENUVE5BTSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IGN0dG5hbSIsY3R0bmFt LDApOworCisgICAgdHRnd3NpeigpOwkJCQkvKiBHZXQgd2luZG93IChzY3JlZW4pIGRpbWVuc2lv bnMuICovCisKKyNpZm5kZWYgTk9TWVNDT05GCisjaWZkZWYgX1NDX09QRU5fTUFYCisgICAgY2tt YXhmaWxlcyA9IHN5c2NvbmYoX1NDX09QRU5fTUFYKTsKKyNlbmRpZiAvKiBfU0NfT1BFTl9NQVgg Ki8KKyNlbmRpZiAvKiBOT1NZU0NPTkYgKi8KKworI2lmZGVmIFBsYW45CisgICAgaWYgKCFiYWNr Z3JkKSB7CisgICAgCWNvbnNjdGxmZCA9IG9wZW4oIi9kZXYvY29uc2N0bCIsIE9fV1JPTkxZKTsK KyAgICAJLypub2lzZWZkID0gb3BlbigiL2Rldi9ub2lzZSIsIE9fV1JPTkxZKSovCisgICAgfQor ICAgIGNreGVjaCA9IDE7CisjZW5kaWYgLyogUGxhbjkgKi8KKworI2lmZGVmIENLX1VUU05BTUUK KyAgICBpZiAodW5hbWUoJm5hbWUpID4gLTEpIHsKKwlja3N0cm5jcHkodW5tX21jaCxuYW1lLm1h Y2hpbmUsQ0tfU1lTTk1MTik7CisJY2tzdHJuY3B5KHVubV9uYW0sbmFtZS5zeXNuYW1lLENLX1NZ U05NTE4pOworCWNrc3RybmNweSh1bm1fcmVsLG5hbWUucmVsZWFzZSxDS19TWVNOTUxOKTsKKwlj a3N0cm5jcHkodW5tX3ZlcixuYW1lLnZlcnNpb24sQ0tfU1lTTk1MTik7CisjaWZkZWYgREVCVUcK KwlpZiAoZGVibG9nKSB7CisJICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdW5hbWUgbWFjaGluZSIs dW5tX21jaCwwKTsKKwkgICAgZGVidWcoRjExMCwic3lzaW5pdCB1bmFtZSBzeXNuYW1lIix1bm1f bmFtLDApOworCSAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVuYW1lIHJlbGVhc2UiLHVubV9yZWws MCk7CisJICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdW5hbWUgdmVyc2lvbiIsdW5tX3ZlciwwKTsK Kwl9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIEhQVVg5UExVUworCWlmIChuYW1lLm1h Y2hpbmVbNV0gPT0gJzgnKQorCSAgaHBpczgwMCA9IDE7CisJZWxzZQorCSAgaHBpczgwMCA9IDA7 CisJZGVidWcoRjEwMSwic3lzaW5pdCBocGlzODAwIiwiIixocGlzODAwKTsKKyNlbmRpZiAvKiBI UFVYOVBMVVMgKi8KKyNpZmRlZiBUUlU2NAorICAgICAgICBnZXRzeXNpbmZvKEdTSV9QTEFURk9S TV9OQU1FLCB1bm1fbW9kLCBDS19TWVNOTUxOLCAwLCAwKTsKKyAgICAgICAgZGVidWcoRjExMCwi c3lzaW5pdCBnZXRzeXNpbmZvIG1vZGVsIix1bm1fbW9kLDApOworI2VuZGlmIC8qIFRSVTY0ICov CisjaWZkZWYgU09MQVJJUzI1CisgICAgICAgIHN5c2luZm8oU0lfUExBVEZPUk0sIHVubV9tb2Qs IENLX1NZU05NTE4pOworICAgICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHN5c2luZm8gbW9kZWwi LHVubV9tb2QsMCk7CisjZW5kaWYgLyogU09MQVJJUzI1ICovCisgICAgfQorI2VuZGlmIC8qIENL X1VUU05BTUUgKi8KKworI2lmZGVmIENLX0VOVklST05NRU5UCisgICAgeworI2lmZGVmIFROQ09E RQorCWV4dGVybiBjaGFyIHRuX2Vudl9hY2N0W10sIHRuX2Vudl9kaXNwW10sIHRuX2Vudl9qb2Jb XSwKKwl0bl9lbnZfcHJudFtdLCB0bl9lbnZfc3lzW107CisjZW5kaWYgLyogVE5DT0RFICovCisJ ZXh0ZXJuIGNoYXIgdWlkYnVmW107CisgICAgICAgIGV4dGVybiBjaGFyICogd2hvYW1pKCk7CisJ Y2hhciAqcDsKKyNpZmRlZiBDS1NFTkRVSUQKKyAgICAgICAgdWlkYnVmWzBdID0gJ1wwJzsKKyNp ZmRlZiBJS1NECisgICAgICAgIGlmICghaW5zZXJ2ZXIpIHsKKyNlbmRpZiAvKiBJS1NEICovCisg ICAgICAgICAgICBwID0gZ2V0ZW52KCJVU0VSIik7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJz eXNpbml0IHVpZGJ1ZiBmcm9tIFVTRVIiLHVpZGJ1ZiwwKTsKKwkgICAgaWYgKCFwKSBwID0gIiI7 CisgICAgICAgICAgICBpZiAoISpwKSB7CisgICAgICAgICAgICAgICAgcCA9IGdldGVudigiTE9H TkFNRSIpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQgdWlkYnVmIGZyb20g TE9HTkFNRSIsdWlkYnVmLDApOworICAgICAgICAgICAgfQorCSAgICBpZiAoIXApIHAgPSAiIjsK KyAgICAgICAgICAgIGlmICghKnApIHsKKyAgICAgICAgICAgICAgICBwID0gd2hvYW1pKCk7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCB1aWRidWYgZnJvbSB3aG9hbWkoKSIs dWlkYnVmLDApOworICAgICAgICAgICAgfQorCSAgICBpZiAoIXApIHAgPSAiIjsKKwkgICAgY2tz dHJuY3B5KHVpZGJ1ZiwgKnAgPyBwIDogIlVOS05PV04iLCBVSURCVUZMRU4pOworI2lmZGVmIElL U0QKKyAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKwlkZWJ1ZyhGMTEwLCJzeXNpbml0IGZp bmFsIHVpZGJ1ZiIsdWlkYnVmLDApOworI2VuZGlmIC8qIENLU0VORFVJRCAqLworCisjaWZkZWYg VE5DT0RFCisJaWYgKChwID0gZ2V0ZW52KCJKT0IiKSkpIGNrc3RybmNweSh0bl9lbnZfam9iLHAs NjMpOworCWlmICgocCA9IGdldGVudigiQUNDVCIpKSkgY2tzdHJuY3B5KHRuX2Vudl9hY2N0LHAs NjMpOworCWlmICgocCA9IGdldGVudigiUFJJTlRFUiIpKSkgY2tzdHJuY3B5KHRuX2Vudl9wcm50 LHAsNjMpOworCWlmICgocCA9IGdldGVudigiRElTUExBWSIpKSkgY2tzdHJuY3B5KHRuX2Vudl9k aXNwLHAsNjMpOworI2lmZGVmIGFlZ2lzCisJY2tzdHJuY3B5KHRuX2Vudl9zeXMsIkFlZ2lzIiw2 NCk7CisjZWxzZQorI2lmZGVmIFBsYW45CisJY2tzdHJuY3B5KHRuX2Vudl9zeXMsIlBsYW45Iiw2 NCk7CisjZWxzZQorCWNrc3RybmNweSh0bl9lbnZfc3lzLCJVTklYIiw2NCk7CisjZW5kaWYgLyog UGxhbjkgKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworI2VuZGlmIC8qIFROQ09ERSAqLworICAgIH0K KyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworI2lmZGVmIENLX1NORExPQworICAgIHsKKwll eHRlcm4gY2hhciAqIHRuX2xvYzsKKwljaGFyICpwOworCWlmIChwID0gZ2V0ZW52KCJMT0NBVElP TiIpKQorCSAgaWYgKHRuX2xvYyA9IChjaGFyICopbWFsbG9jKChpbnQpc3RybGVuKHApKzEpKQor CSAgICBzdHJjcHkodG5fbG9jLHApOwkJLyogc2FmZSAqLworICAgIH0KKyNlbmRpZiAvKiBDS19T TkRMT0MgKi8KKworICAgIGNrc3RybmNweShzdGFydHVwZGlyLCB6Z3RkaXIoKSwgQ0tNQVhQQVRI KTsKKyAgICBzdGFydHVwZGlyW0NLTUFYUEFUSF0gPSAnXDAnOworICAgIHggPSBzdHJsZW4oc3Rh cnR1cGRpcik7CisgICAgaWYgKHggPD0gMCkgeworCXN0YXJ0dXBkaXJbMF0gPSAnLyc7CisJc3Rh cnR1cGRpclsxXSA9ICdcMCc7CisgICAgfSBlbHNlIGlmIChzdGFydHVwZGlyW3gtMV0gIT0gJy8n KSB7CisJc3RhcnR1cGRpclt4XSA9ICcvJzsKKwlzdGFydHVwZGlyW3grMV0gPSAnXDAnOworICAg IH0KKyAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHN0YXJ0dXBkaXIiLHN0YXJ0dXBkaXIsMCk7Cisj aWZkZWYgVFRMRUJVRgorICAgIGxlX2luaXQoKTsKKyNlbmRpZiAvKiBUVExFQlVGICovCisjaWZk ZWYgQlNENDRPUlBPU0lYCisgICAgLyogVGhpcyBzaG91bGQgY2F0Y2ggdGhlIG5jdXJzZXMgcGxh dGZvcm1zICovCisgICAgLyogU29tZSBwbGF0Zm9ybXMgZG9uJ3QgaGF2ZSBwdXRlbnYoKSwgbGlr ZSBOZVhUU1RFUCAqLworICAgIHB1dGVudigiTkNVUlNFU19OT19TRVRCVUY9MSIpOworI2VuZGlm IC8qIEJTRDQ0T1JQT1NJWCAqLworICAgIHJldHVybigwKTsKK30KKworLyogIFMgWSBTIEMgTCBF IEEgTiBVIFAgIC0tICBTeXN0ZW0tZGVwZW5kZW50IHByb2dyYW0gY2xlYW51cC4gICovCisKK2lu dAorc3lzY2xlYW51cCgpIHsKKyNpZmRlZiBGX1NFVEZMCisgICAgaWYgKGluaWZsYWdzID4gLTEp CisgICAgICBmY250bCgwLEZfU0VURkwsaW5pZmxhZ3MpOwkvKiBSZXN0b3JlIHN0ZGluIGZsYWdz ICovCisjZW5kaWYgLyogRl9TRVRGTCAqLworI2lmZGVmIHVsdHJpeAorICAgIHN0dHkoMCwmdmFu aWxsYSk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBzZ3R0eSBpbmZvICovCisjZW5kaWYgLyog dWx0cml4ICovCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlkKSBraWxsKHR0cGlkLDkpOwor I2VuZGlmIC8qIE5FVENNRCAqLworICAgIHJldHVybigwKTsKK30KKworLyogIFQgVCBPIFAgRSBO ICAtLSAgT3BlbiBhIHR0eSBmb3IgZXhjbHVzaXZlIGFjY2Vzcy4gICovCisKKy8qCisgIENhbGwg d2l0aDoKKyAgICB0dG5hbWU6IGNoYXJhY3RlciBzdHJpbmcgLSBkZXZpY2UgbmFtZSBvciBuZXR3 b3JrIGhvc3QgbmFtZS4KKyAgICBsY2w6CisgIElmIGNhbGxlZCB3aXRoIGxjbCA8IDAsIHNldHMg dmFsdWUgb2YgbGNsIGFzIGZvbGxvd3M6CisgIDA6IHRoZSB0ZXJtaW5hbCBuYW1lZCBieSB0dG5h bWUgaXMgdGhlIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorICAxOiB0aGUgdGVybWluYWwg bmFtZWQgYnkgdHRuYW1lIGlzIG5vdCB0aGUgam9iJ3MgY29udHJvbGxpbmcgdGVybWluYWwuCisg IEJ1dCB3YXRjaCBvdXQ6IGlmIGEgbGluZSBpcyBhbHJlYWR5IG9wZW4sIG9yIGlmIHJlcXVlc3Rl ZCBsaW5lIGNhbid0CisgIGJlIG9wZW5lZCwgdGhlbiBsY2wgcmVtYWlucyAoYW5kIGlzIHJldHVy bmVkIGFzKSAtMS4KKyAgICBtb2RlbToKKyAgTGVzcyB0aGFuIHplcm86IHR0bmFtZSBpcyBhIG5l dHdvcmsgaG9zdCBuYW1lLgorICBaZXJvIG9yIGdyZWF0ZXI6IHR0bmFtZSBpcyBhIHRlcm1pbmFs IGRldmljZSBuYW1lLgorICBaZXJvIG1lYW5zIGEgbG9jYWwgY29ubmVjdGlvbiAoZG9uJ3QgdXNl IG1vZGVtIHNpZ25hbHMpLgorICBQb3NpdGl2ZSBtZWFucyB1c2UgbW9kZW0gc2lnbmFscy4KKyAg IHRpbW86CisgIDAgPSBubyB0aW1lci4KKyAgbm9uemVybyA9IG51bWJlciBvZiBzZWNvbmRzIHRv IHdhaXQgZm9yIG9wZW4oKSB0byByZXR1cm4gYmVmb3JlIHRpbWluZyBvdXQuCisKKyAgUmV0dXJu czoKKyAgICAwIG9uIHN1Y2Nlc3MKKyAgIC01IGlmIGRldmljZSBpcyBpbiB1c2UKKyAgIC00IGlm IGFjY2VzcyB0byBkZXZpY2UgaXMgZGVuaWVkCisgICAtMyBpZiBhY2Nlc3MgdG8gbG9jayBkaXJl Y3RvcnkgZGVuaWVkCisgICAtMiB1cG9uIHRpbWVvdXQgd2FpdGluZyBmb3IgZGV2aWNlIHRvIG9w ZW4KKyAgIC0xIG9uIG90aGVyIGVycm9yCisqLworc3RhdGljIGludCB0dG90bW8gPSAwOwkJCS8q IFRpbWVvdXQgZmxhZyAqLworLyogRmxhZyBrZXB0IGhlcmUgdG8gYXZvaWQgYmVpbmcgY2xvYmJl cmVkIGJ5IGxvbmdqbXAuICAqLworCitpbnQKK3R0b3Blbih0dG5hbWUsbGNsLG1vZGVtLHRpbW8p IGNoYXIgKnR0bmFtZTsgaW50ICpsY2wsIG1vZGVtLCB0aW1vOyB7CisKKyNpZmRlZiBCU0Q0NAor I2RlZmluZSBjdGVybWlkKHgpIHN0cmNweSh4LCIiKQorI2Vsc2UKKyNpZmRlZiBTVk9SUE9TSVgK KyNpZm5kZWYgQ0lFCisgICAgZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoKTsJCS8qIFdpc2ggdGhleSBh bGwgaGFkIHRoaXMhICovCisjZWxzZQkJCQkJLyogQ0lFIFJlZ3VsdXMgKi8KKyNkZWZpbmUgY3Rl cm1pZCh4KSBzdHJjcHkoeCwiIikKKyNlbmRpZiAvKiBDSUUgKi8KKyNlbmRpZiAvKiBTVk9SUE9T SVggKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworCisjaWZkZWYgdWx0cml4CisgICAgaW50IHRlbXAg PSAwOworI2VuZGlmIC8qIHVsdHJpeCAqLworCisjaWZuZGVmIE9QRU5GSVJTVAorICAgIGNoYXIg ZnVsbG5hbWVbREVWTkFNTEVOKzFdOworI2VuZGlmIC8qIE9QRU5GSVJTVCAqLworCisgICAgY2hh ciAqIGZuYW07CQkJLyogRnVsbCBuYW1lIGFmdGVyIGV4cGFuc2lvbiAqLworCisgICAgaW50IHk7 CisKKyNpZm5kZWYgcGRwMTEKKyNkZWZpbmUgTkFNRUZECSAvKiBGZWF0dXJlIHRvIGFsbG93IG5h bWUgdG8gYmUgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgKi8KKyNlbmRpZiAvKiBwZHAxMSAqLwor CisjaWZkZWYgTkFNRUZECisgICAgY2hhciAqcDsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGVs bmV0ZmQiLCIiLHRlbG5ldGZkKTsKKyNlbmRpZiAvKiBOQU1FRkQgKi8KKworICAgIGRlYnVnKEYx MTAsInR0b3BlbiB0dG5hbWUiLHR0bmFtZSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gdHRu bXN2Iix0dG5tc3YsMCk7CisgICAgZGVidWcoRjEwMSwidHRvcGVuIG1vZGVtIiwiIixtb2RlbSk7 CisgICAgZGVidWcoRjEwMSwidHRvcGVuIG5ldGNvbm4iLCIiLG5ldGNvbm4pOworICAgIGRlYnVn KEYxMDEsInR0b3BlbiB0dHlmZCIsIiIsdHR5ZmQpOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiAq bGNsIiwiIiwqbGNsKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRtZG0iLCIiLHR0bWRtKTsK KyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRuZXQiLCIiLHR0bmV0KTsKKworICAgIHR0cG1zayA9 IDB4ZmY7CisgICAgbG9ja3BpZFswXSA9ICdcMCc7CisKKyAgICBpZiAodHR5ZmQgPiAtMSkgewkJ CS8qIElmIGRldmljZSBhbHJlYWR5IG9wZW5lZCAqLworICAgICAgICBpZiAoIXN0cm5jbXAodHRu YW1lLHR0bm1zdixERVZOQU1MRU4pKSAvKiBhcmUgbmV3ICYgb2xkIG5hbWVzIGVxdWFsPyAqLwor CSAgcmV0dXJuKDApOwkJCS8qIFllcywgbm90aGluZyB0byBkbyAtIGp1c3QgcmV0dXJuICovCisJ dHRubXN2WzBdID0gJ1wwJzsJCS8qIE5vLCBjbGVhciBvdXQgb2xkIG5hbWUgKi8KKwl0dGNsb3Mo dHR5ZmQpOwkJCS8qIGNsb3NlIG9sZCBjb25uZWN0aW9uLiAgKi8KKyAgICB9CisgICAgd2FzY2xv c2VkID0gMDsJCQkvKiBOZXcgY29ubmVjdGlvbiwgbm90IGNsb3NlZCB5ZXQuICovCisgICAgdHRw aXBlID0gMDsJCQkJLyogQXNzdW1lIGl0J3Mgbm90IGEgcGlwZSAqLworICAgIHR0cHR5ID0gMDsJ CQkJLyogb3IgYSBwdHkuLi4gKi8KKworI2lmZGVmIE5FVENPTk4KKy8qCisgIFRoaXMgaXMgYSBi aXQgdHJpY2t5Li4uICBTdXBwb3NlIHRoYXQgcHJldmlvdXNseSBLZXJtaXQgaGFkIGRpYWxlZCBh IHRlbG5ldAorICBtb2RlbSBzZXJ2ZXIgKCJzZXQgaG9zdCB4eHg6MjAwMSwgc2V0IG1vZGVtIHR5 cGUgdXNyLCBkaWFsIC4uLiIpLiAgVGhlbiB0aGUKKyAgY29ubmVjdGlvbiB3YXMgY2xvc2VkICh0 dHlmZCA9IC0xKSwgYW5kIHRoZW4gYSBSRURJQUwgY29tbWFuZCB3YXMgZ2l2ZW4uICBBdAorICB0 aGlzIHBvaW50IHdlJ3ZlIG9ibGl0ZXJhdGVkIHRoZSBuZWdhdGl2ZSBtb2RlbSB0eXBlIGhhY2ss IGFuZCBzbyB3b3VsZAorICB0cmVhdCB0aGUgSVAgaG9zdG5hbWUgYXMgYSBkZXZpY2UgbmFtZSwg YW5kIHdvdWxkIHRoZW4gZmFpbCBiZWNhdXNlIG9mICJObworICBzdWNoIGRldmljZSBvciBkaXJl Y3RvcnkiLiAgQnV0IHRoZSBwcmV2aW91cyBjb25uZWN0aW9uIGhhcyBsZWZ0IGJlaGluZCBzb21l CisgIGNsdWVzLCBzbyBsZXQncyB1c2UgdGhlbS4uLgorKi8KKyAgICBpZiAodHR5ZmQgPCAwKSB7 CQkJLyogQ29ubmVjdGlvbiBpcyBub3Qgb3BlbiAqLworCWlmICghc3RyY21wKHR0bmFtZSx0dG5t c3YpKSB7CS8qIE9sZCBhbmQgbmV3IG5hbWVzIHRoZSBzYW1lPyAqLworCSAgICBpZiAoKChuZXRj b25uID4gMCkgJiYgKHR0bWRtIDwgMCkpIHx8CisJCSgodHRuZXQgPiAwKSAmJgorCQkgKCFja3N0 cmNocih0dG5hbWUsJy8nKSkgJiYgKGNrc3RyY2hyKHR0bmFtZSwnOicpKSkKKwkJKSB7CisJCWlu dCB4LCByYzsKKwkJeCA9ICh0dG1kbSA8IDApID8gLXR0bWRtIDogdHRuZXQ7CisJCXJjID0gbmV0 b3Blbih0dG5hbWUsIGxjbCwgeCk7CisJCWRlYnVnKEYxMTEsInR0b3BlbiBSRU9QRU4gbmV0b3Bl biIsdHRuYW1lLHJjKTsKKwkJaWYgKHJjID4gLTEpIHsKKwkJICAgIG5ldGNvbm4gPSAxOworCQkg ICAgeGxvY2FsID0gKmxjbCA9IDE7CisJCX0gZWxzZSB7CisJCSAgICBuZXRjb25uID0gMDsKKwkJ fQorCQlnb3RzaWdzID0gMDsKKwkJcmV0dXJuKHJjKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5k aWYgLyogTkVUQ09OTiAqLworCisjaWZkZWYgTUFYTkFNTEVOCisgICAgZGVidWcoRjEwMCwidHRv cGVuIE1BWE5BTUxFTiBkZWZpbmVkIiwiIiwwKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRv cGVuIE1BWE5BTUxFTiAqTk9UKiBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZgorCisjaWZkZWYgQlNE NAorICAgIGRlYnVnKEYxMDAsInR0b3BlbiBCU0Q0IGRlZmluZWQiLCIiLDApOworI2Vsc2UKKyAg ICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gQlNENCAqTk9UKiBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAv KiBCU0Q0ICovCisKKyNpZmRlZiBCU0Q0MgorICAgIGRlYnVnKEYxMDAsInR0b3BlbiBCU0Q0MiBk ZWZpbmVkIiwiIiwwKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRvcGVuIEJTRDQyICpOT1Qq IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIEJTRDQyICovCisKKyNpZmRlZiBNWVJFQUQKKyAg ICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gTVlSRUFEIGRlZmluZWQiLCIiLDApOworI2Vsc2UKKyAgICBk ZWJ1ZyhGMTAwLCJ0dG9wZW4gTVlSRUFEICpOT1QqIGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8q IE1ZUkVBRCAqLworCisjaWZkZWYJTkVUQ09OTgorICAgIGlmIChtb2RlbSA8IDApIHsJCQkvKiBt b2RlbSA8IDAgPSBjb2RlIGZvciBuZXR3b3JrICovCisJaW50IHg7CisJdHRtZG0gPSBtb2RlbTsK Kwltb2RlbSA9IC1tb2RlbTsJCQkvKiBQb3NpdGl2ZSBuZXR3b3JrIHR5cGUgbnVtYmVyICovCisJ ZmRmbGFnID0gMDsJCQkvKiBTdGRpbyBub3QgcmVkaXJlY3RlZC4gKi8KKwluZXRjb25uID0gMTsJ CQkvKiBBbmQgaXQncyBhIG5ldHdvcmsgY29ubmVjdGlvbiAqLworCWRlYnVnKEYxMTEsInR0b3Bl biBuZXQiLHR0bmFtZSxtb2RlbSk7CisjaWZkZWYgTkFNRUZECisJZm9yIChwID0gdHRuYW1lOyBp c2RpZ2l0KCpwKTsgcCsrKSA7IC8qIENoZWNrIGZvciBhbGwgZGlnaXRzICovCisgCWlmICgqcCA9 PSAnXDAnICYmICh0ZWxuZXRmZCB8fCB4MjVmZCkpIHsgLyogQXZvaWQgWC4xMjEgYWRkcmVzc2Vz ICovCisJICAgIHR0eWZkID0gYXRvaSh0dG5hbWUpOwkvKiBJcyB0aGVyZSBhIHdheSB0byB0ZXN0 IGl0J3Mgb3Blbj8gKi8KKwkgICAgdHRmZGZsZyA9IDE7CQkvKiBXZSBnb3QgYW4gb3BlbiBmaWxl IGRlc2NyaXB0b3IgKi8KKwkgICAgZGVidWcoRjExMSwidHRvcGVuIG5ldCB0dGZkZmxnIix0dG5h bWUsdHRmZGZsZyk7CisJICAgIGRlYnVnKEYxMDEsInR0b3BlbiBuZXQgdHR5ZmQiLCIiLHR0eWZk KTsKKwkgICAgY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVWTkFNTEVOKTsgLyogUmVtZW1iZXIg dGhlICJuYW1lIi4gKi8KKwkgICAgeCA9IDE7CQkJLyogUmV0dXJuIGNvZGUgaXMgImdvb2QiLiAq LworCSAgICBpZiAodGVsbmV0ZmQpIHsKKwkJdHRuZXQgPSBORVRfVENQQjsKKwkJaWYgKHR0bnBy b3RvICE9IE5QX1RDUFJBVykKKwkJICB0dG5wcm90byA9IE5QX1RFTE5FVDsKKyNpZmRlZiBTVU5Y MjUKKwkgICAgfSBlbHNlIGlmICh4MjVmZCkgeworCQl0dG5ldCA9IE5FVF9TWDI1OworCQl0dG5w cm90byA9IE5QX05PTkU7CisjZW5kaWYgLyogU1VOWDI1ICovCisJICAgIH0KKwl9IGVsc2UgewkJ CS8qIEhvc3QgbmFtZSBvciBhZGRyZXNzIGdpdmVuICovCisjaWZkZWYgTkVUUFRZCisJICAgIGlm IChtb2RlbSA9PSBORVRfUFRZKSB7CisJCWludCB4OworCQlpZiAobm9wdXNoKSB7CisJCSAgICBk ZWJ1ZyhGMTAwLCJ0dG9wZW4gUFRZOiBub3B1c2giLCIiLDApOworCQkgICAgcmV0dXJuKC0xKTsK KwkJfQorICAgICAgICAgICAgICAgIHR0bmV0ID0gTkVUX1BUWTsKKwkJdHRucHJvdG8gPSBOUF9O T05FOworICAgICAgICAgICAgICAgIG5ldGNvbm4gPSAxOyAgICAgICAgICAgIC8qIGJ1dCB3ZSBk b24ndCB1c2UgbmV0d29yayBpL28gKi8KKyAgICAgICAgICAgICAgICB0dHB0eSA9IDE7CisgICAg ICAgICAgICAgICAgZGVidWcoRjExMCwidHRvcGVuIFBUWSIsdHRuYW1lLDApOworCQl4ID0gZG9f cHR5KCZ0dHlmZCx0dG5hbWUsMCk7CisJCWlmICh4ID4gLTEpIHsKKwkJICAgIGNrc3RybmNweSh0 dG5tc3YsdHRuYW1lLERFVk5BTUxFTik7CisJCSAgICB4bG9jYWwgPSAqbGNsID0gMTsJLyogSXQn cyBsb2NhbCAqLworCQl9IGVsc2UgeworCQkgICAgdHRwdHkgPSAwOworCQkgICAgbmV0Y29ubiA9 IDA7CisJCX0KKwkJZ290c2lncyA9IDA7CisJCXJldHVybih4KTsKKwkgICAgfQorI2VuZGlmIC8q IE5FVFBUWSAqLworI2lmZGVmIE5FVENNRAorLyoKKyAgZHVwMigpIGlzIG5vdCBhdmFpbGFibGUg b24gb2xkZXIgU3lzdGVtIFYgcGxhdGZvcm1zIGxpa2UgQVQmVCAzQnguICBGb3IKKyAgdGhvc2Ug c3lzdGVtcyB3ZSBwdW50IGJ5IG5vdCBkZWZpbmluZyBORVRDTUQsIGJ1dCB3ZSBtaWdodCBiZSBh YmxlIHRvIGRvCisgIGJldHRlciAtLSBzZWUgd29ya2Fyb3VuZHMgZm9yIHRoaXMgcHJvYmxlbSBp biBja3VmaW8uYyAoc2VhcmNoIGZvciBkdXAyKS4KKyovCisJICAgIGlmIChtb2RlbSA9PSBORVRf Q01EKSB7CisJCWlmIChub3B1c2gpIHsKKwkJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBwaXBlOiBu b3B1c2giLCIiLDApOworCQkgICAgcmV0dXJuKC0xKTsKKwkJfQorCQlpZiAocGlwZShwaXBlMCkg fHwgcGlwZShwaXBlMSkpIHsKKwkJICAgIHBlcnJvcigiUGlwZSBlcnJvciIpOworCQkgICAgcmV0 dXJuKC0xKTsKKwkJfQorCQl0dHBpZCA9IGZvcmsoKTsJCS8qIE1ha2UgYSBmb3JrICovCisKKwkJ c3dpdGNoICh0dHBpZCkgeworCQkgIGNhc2UgLTE6CQkvKiBFcnJvciBtYWtpbmcgZm9yayAqLwor CQkgICAgY2xvc2UocGlwZTBbMF0pOworCQkgICAgY2xvc2UocGlwZTBbMV0pOworCQkgICAgY2xv c2UocGlwZTFbMF0pOworCQkgICAgY2xvc2UocGlwZTFbMV0pOworCQkgICAgcGVycm9yKCJGb3Jr IGVycm9yIik7CisJCSAgICByZXR1cm4oLTEpOworCQkgIGNhc2UgMDoJCS8qIENoaWxkLiAqLwor CQkgICAgY2xvc2UocGlwZTBbMF0pOworCQkgICAgY2xvc2UocGlwZTFbMV0pOworCQkgICAgZHVw MihwaXBlMFsxXSwgMSk7CisJCSAgICBjbG9zZShwaXBlMFsxXSk7CisJCSAgICBkdXAyKHBpcGUx WzBdLCAwKTsKKwkJICAgIGNsb3NlKHBpcGUxWzBdKTsKKwkJICAgIHN5c3RlbSh0dG5hbWUpOwor CQkgICAgX2V4aXQoMCk7CisJCSAgZGVmYXVsdDoJCS8qIFBhcmVudCAqLworCQkgICAgY2xvc2Uo cGlwZTBbMV0pOworCQkgICAgY2xvc2UocGlwZTFbMF0pOworCQkgICAgZmRpbiA9IHBpcGUwWzBd OwkvKiBSZWFkIGZyb20gcGlwZSAqLworCQkgICAgZmRvdXQgPSBwaXBlMVsxXTsJLyogV3JpdGUg dG8gcGlwZSAqLworCQkgICAgdHRvdXQgPSBmZG9wZW4oZmRvdXQsInciKTsgLyogR2V0IHN0cmVh bSBzbyB3ZSBjYW4gKi8KKwkJICAgIGlmICghdHRvdXQpIHsJLyogbWFrZSBpdCB1bmJ1ZmZlcmVk LiAqLworCQkJcGVycm9yKCJmZG9wZW4gZmFpbHVyZSIpOworCQkJcmV0dXJuKC0xKTsKKwkJICAg IH0KKwkJICAgIHNldGJ1Zih0dG91dCxOVUxMKTsKKwkJICAgIGNrc3RybmNweSh0dG5tc3YsdHRu YW1lLERFVk5BTUxFTik7CisJCSAgICB4bG9jYWwgPSAqbGNsID0gMTsJLyogSXQncyBsb2NhbCAq LworCQkgICAgbmV0Y29ubiA9IDE7CS8qIENhbGwgaXQgYSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8K KwkJICAgIHR0bWRtID0gbW9kZW07CS8qIFJlbWVtYmVyIG5ldHdvcmsgdHlwZSAqLworCQkgICAg dHR5ZmQgPSBmZGluOworCQkgICAgdHRwaXBlID0gMTsKKwkJICAgIGdvdHNpZ3MgPSAwOworCQkg ICAgcmV0dXJuKDApOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNlbmRpZiAv KiBOQU1FRkQgKi8KKwkgICAgeCA9IG5ldG9wZW4odHRuYW1lLCBsY2wsIG1vZGVtKTsgLyogKHNl ZSBja2NuZXQuaCkgKi8KKwkgICAgaWYgKHggPiAtMSkgeworCQlja3N0cm5jcHkodHRubXN2LHR0 bmFtZSxERVZOQU1MRU4pOworCSAgICB9IGVsc2UgbmV0Y29ubiA9IDA7CisjaWZkZWYgTkFNRUZE CisJfQorI2VuZGlmIC8qIE5BTUVGRCAqLworCisjaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBO RVdTICovCisJaWYgKGlvY3RsKHR0eWZkLFRJT0NLR0VULCZrbV9leHQpIDwgMCkgeyAvKiBHZXQg S2FuamkgbW9kZSAqLworCSAgICBwZXJyb3IoInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1v ZGUgKG5ldHdvcmspIik7CisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiBlcnJvciBnZXR0aW5nIEth bmppIG1vZGUiLCJuZXR3b3JrIiwwKTsKKwkgICAga21fZXh0ID0gLTE7CQkvKiBNYWtlIHN1cmUg dGhpcyBzdGF5cyB1bmRlZmluZWQuICovCisJfQorI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworCisJ eGxvY2FsID0gKmxjbCA9IDE7CQkvKiBOZXR3b3JrIGNvbm5lY3Rpb25zIGFyZSBsb2NhbC4gKi8K KwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gbmV0IHgiLCIiLHgpOworI2lmZGVmIENPTU1FTlQKKy8qIExl dCBuZXRvcGVuKCkgZG8gdGhpcyAqLworCWlmICh4ID4gLTEgJiYgIXgyNWZkKQorCSAgeCA9IHRu X2luaSgpOwkJCS8qIEluaXRpYWxpemUgVEVMTkVUIHByb3RvY29sICovCisjZW5kaWYgLyogQ09N TUVOVCAqLworCWdvdHNpZ3MgPSAwOworCXJldHVybih4KTsKKyAgICB9IGVsc2UgewkJCQkvKiBU ZXJtaW5hbCBkZXZpY2UgKi8KKyNlbmRpZgkvKiBORVRDT05OICovCisKKyNpZmRlZiBOQU1FRkQK Ky8qCisgIFRoaXMgY29kZSBsZXRzIHlvdSBnaXZlIEtlcm1pdCBhbiBvcGVuIGZpbGUgZGVzY3Jp cHRvciBmb3IgYSBzZXJpYWwKKyAgY29tbXVuaWNhdGlvbiBkZXZpY2UsIHJhdGhlciB0aGFuIGEg ZGV2aWNlIG5hbWUuICBLZXJtaXQgYXNzdW1lcyB0aGF0IHRoZQorICBsaW5lIGlzIGFscmVhZHkg b3BlbiwgbG9ja2VkLCBjb25kaXRpb25lZCB3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXJzLCBldGMu CisqLworCWZvciAocCA9IHR0bmFtZTsgaXNkaWdpdCgqcCk7IHArKykgOyAvKiBDaGVjayBmb3Ig YWxsLWRpZ2l0cyAqLworCWlmICgqcCA9PSAnXDAnKSB7CisJICAgIHR0eWZkID0gYXRvaSh0dG5h bWUpOwkvKiBJcyB0aGVyZSBhIHdheSB0byB0ZXN0IGl0J3Mgb3Blbj8gKi8KKwkgICAgZGVidWco RjExMSwidHRvcGVuIGdvdCBvcGVuIGZkIix0dG5hbWUsdHR5ZmQpOworCSAgICBja3N0cm5jcHko dHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOyAvKiBSZW1lbWJlciB0aGUgIm5hbWUiLiAqLworCSAg ICBpZiAodHR5ZmQgPj0gMCAmJiB0dHlmZCA8IDMpIC8qIElmIGl0J3Mgc3RkaW8uLi4gKi8KKwkg ICAgICB4bG9jYWwgPSAqbGNsID0gMDsJLyogd2UncmUgaW4gcmVtb3RlIG1vZGUgKi8KKwkgICAg ZWxzZQkJCS8qIG90aGVyd2lzZSAqLworCSAgICAgIHhsb2NhbCA9ICpsY2wgPSAxOwkvKiBsb2Nh bCBtb2RlLiAqLworCSAgICBuZXRjb25uID0gMDsJCS8qIEFzc3VtZSBpdCdzIG5vdCBhIG5ldHdv cmsuICovCisJICAgIHR2dGZsZyA9IDA7CQkJLyogTWlnaHQgbmVlZCB0byBpbml0aWFsaXplIG1v ZGVzLiAqLworCSAgICB0dG1kbSA9IG1vZGVtOwkJLyogUmVtZW1iZXIgbW9kZW0gdHlwZS4gKi8K KwkgICAgZmRmbGFnID0gMDsJCQkvKiBTdGRpbyBub3QgcmVkaXJlY3RlZC4gKi8KKwkgICAgdHRm ZGZsZyA9IDE7CQkvKiBGbGFnIHdlIHdlcmUgb3BlbmVkIHRoaXMgd2F5LiAqLworCSAgICBkZWJ1 ZyhGMTExLCJ0dG9wZW4gbm9uLW5ldCB0dGZkZmxnIix0dG5hbWUsdHRmZGZsZyk7CisJICAgIGRl YnVnKEYxMDEsInR0b3BlbiBub24tbmV0IHR0eWZkIiwiIix0dHlmZCk7CisKKyNpZmRlZiBzb255 X25ld3MJCQkvKiBTb255IE5FV1MgKi8KKwkgICAgLyogR2V0IGRldmljZSBLYW5qaSBtb2RlICov CisJICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsKKwkJcGVycm9y KCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIik7CisJCWRlYnVnKEYxMDEsInR0b3Bl biBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUiLCIiLDApOworCQlrbV9leHQgPSAtMTsJCS8qIE1h a2Ugc3VyZSB0aGlzIHN0YXlzIHVuZGVmaW5lZC4gKi8KKwkgICAgfQorI2VuZGlmIC8qIHNvbnlf bmV3cyAqLworCSAgICBnb3RzaWdzID0gMDsKKwkgICAgcmV0dXJuKDApOwkJCS8qIFJldHVybiBz dWNjZXNzICovCisJfQorI2VuZGlmIC8qIE5BTUVGRCAqLworI2lmZGVmIE5FVENPTk4KKyAgICB9 CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisvKiBIZXJlIHdlIGhhdmUgdG8gb3BlbiBhIHNlcmlh bCBkZXZpY2Ugb2YgdGhlIGdpdmVuIG5hbWUuICovCisKKyAgICBuZXRjb25uID0gMDsJCQkvKiBT byBpdCdzIG5vdCBhIG5ldHdvcmsgY29ubmVjdGlvbiAqLworICAgIG9jY3QgPSBzaWduYWwoU0lH SU5ULCBjY3RyYXApOwkvKiBTZXQgQ29udHJvbC1DIHRyYXAsIHNhdmUgb2xkIG9uZSAqLworICAg IHNpZ2ludF9pZ24gPSAwOworCisgICAgdHZ0ZmxnID0gMDsJCQkvKiBGbGFnIGZvciB1c2UgYnkg dHR2dCgpLiAqLworCQkJCS8qIDAgPSB0dHZ0IG5vdCBjYWxsZWQgeWV0IGZvciB0aGlzIGRldmlj ZSAqLworCisgICAgZmRmbGFnID0gKCFpc2F0dHkoMCkgfHwgIWlzYXR0eSgxKSk7IC8qIEZsYWcg Zm9yIHN0ZGlvIHJlZGlyZWN0ZWQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gZmRmbGFnIiwi IixmZGZsYWcpOworCisgICAgdHRtZG0gPSBtb2RlbTsgICAgICAgICAgICAgICAgICAgICAgLyog TWFrZSB0aGlzIGF2YWlsYWJsZSB0byBvdGhlciBmbnMgKi8KKyAgICB4bG9jYWwgPSAqbGNsOyAg ICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRvIG90aGVyIGZucyAq LworCisvKiBDb2RlIGZvciBoYW5kbGluZyBiaWRpcmVjdGlvbmFsIHR0eSBsaW5lcyBnb2VzIGhl cmUuICovCisvKiBVc2Ugc3BlY2lmaWVkIG1ldGhvZCBmb3IgdHVybmluZyBvZmYgbG9naW5zIGFu ZCBzdXBwcmVzc2luZyBnZXR0eS4gKi8KKworI2lmZGVmIEFDVUNOVFJMCisgICAgLyogU2hvdWxk IHB1dCBjYWxsIHRvIHByaXZfb24oKSBoZXJlLCBidXQgdGhhdCB3b3VsZCBiZSB2ZXJ5IHJpc2t5 ISAqLworICAgIGFjdWNudHJsKCJkaXNhYmxlIix0dG5hbWUpOyAgICAgICAgIC8qIGFjdWNudHJs KCkgcHJvZ3JhbS4gKi8KKyAgICAvKiBhbmQgcHJpdl9vZmYoKSBoZXJlLi4uICovCisjZWxzZQor I2lmZGVmIEFUVDczMDAKKyAgICBpZiAoKGF0dG1vZGVtICYgRE9HRVRZKSA9PSAwKSAgICAgICAv KiBvZmZnZXR0eSgpIHByb2dyYW0uICovCisgICAgICBhdHRtb2RlbSB8PSBvZmZnZXR0eSh0dG5h bWUpOwkvKiBSZW1lbWJlciByZXNwb25zZS4gICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworI2Vu ZGlmIC8qIEFDVUNOVFJMICovCisKKyNpZmRlZiBPUEVORklSU1QKKy8qCisgMTk4NS0yMDAxOiBv cGVucyBkZXZpY2UgZmlyc3QgdGhlbiBnZXRzIGxvY2s7IHJlYXNvbjoKKyBLZXJtaXQgdXN1YWxs eSBoYXMgdG8gcnVuIHNldHVpZCBvciBzZXRnaWQgaW4gb3JkZXIgdG8gY3JlYXRlIGEgbG9ja2Zp bGUuCisgSWYgeW91IGdpdmUgYSBTRVQgTElORSBjb21tYW5kIGZvciBhIGRldmljZSB0aGF0IGhh cHBlbnMgdG8gYmUgeW91ciBqb2IncworIGNvbnRyb2xsaW5nIHRlcm1pbmFsLCBLZXJtaXQgZG9l c24ndCBoYXZlIHRvIGNyZWF0ZSBhIGxvY2tmaWxlLCBhbmQgaW4gZmFjdAorIHNob3VsZCBub3Qg Y3JlYXRlIG9uZSwgYW5kIHdvdWxkIGZhaWwgaWYgaXQgdHJpZWQgdG8gaWYgaXQgZGlkIG5vdCBo YXZlIHRoZQorIHJlcXVpcmVkIHByaXZpbGVnZXMuICBCdXQgeW91IGNhbid0IGZpbmQgb3V0IGlm IHR3byB0dHkgZGV2aWNlIG5hbWVzIGFyZQorIGVxdWl2YWxlbnQgdW50aWwgeW91IGhhdmUgYSBm aWxlIGRlc2NyaXB0b3IgdGhhdCB5b3UgY2FuIGdpdmUgdG8gdHR5bmFtZSgpLgorIEJ1dCB0aGlz IGNhbiBjYXVzZSBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gS2VybWl0IGFuZCBbbV1nZXR0eS4g IFNvIHNlZQorIHRoZSBbI11lbHNlIHBhcnQuLi4KKyovIAorCisvKgorIEluIHRoZSBmb2xsb3dp bmcgc2VjdGlvbiwgd2Ugb3BlbiB0aGUgdHR5IGRldmljZSBmb3IgcmVhZC93cml0ZS4KKyBJZiBh IG1vZGVtIGhhcyBiZWVuIHNwZWNpZmllZCB2aWEgInNldCBtb2RlbSIgcHJpb3IgdG8gInNldCBs aW5lIgorIHRoZW4gdGhlIE9fTkRFTEFZIHBhcmFtZXRlciBpcyB1c2VkIGluIHRoZSBvcGVuLCBw cm92aWRlZCB0aGlzIHN5bWJvbAorIGlzIGRlZmluZWQgKGUuZy4gaW4gZmNudGwuaCksIHNvIHRo YXQgdGhlIHByb2dyYW0gZG9lcyBub3QgaGFuZyB3YWl0aW5nCisgZm9yIGNhcnJpZXIgKHdoaWNo IGluIG1vc3QgY2FzZXMgd29uJ3QgYmUgcHJlc2VudCBiZWNhdXNlIGEgY29ubmVjdGlvbgorIGhh cyBub3QgYmVlbiBkaWFsZWQgeWV0KS4gIE9fTkRFTEFZIGlzIHJlbW92ZWQgbGF0ZXIgb24gaW4g dHRvcGVuKCkuICBJdAorIHdvdWxkIG1ha2UgbW9yZSBzZW5zZSB0byBmaXJzdCBkZXRlcm1pbmUg aWYgdGhlIGxpbmUgaXMgbG9jYWwgYmVmb3JlCisgZG9pbmcgdGhpcywgYnV0IGJlY2F1c2UgdHR5 bmFtZSgpIHJlcXVpcmVzIGEgZmlsZSBkZXNjcmlwdG9yLCB3ZSBoYXZlCisgdG8gb3BlbiBpdCBm aXJzdC4gIFNlZSBkb19vcGVuKCkuCisKKyBOb3cgb3BlbiB0aGUgZGV2aWNlIHVzaW5nIHRoZSBk ZXNpcmVkIHRyZWF0bWVudCBvZiBjYXJyaWVyLgorIElmIGNhcnJpZXIgaXMgUkVRVUlSRUQsIHRo ZW4gb3BlbiBjb3VsZCBoYW5nIGZvcmV2ZXIsIHNvIGFuIG9wdGlvbmFsCisgdGltZXIgaXMgcHJv dmlkZWQuICBJZiBjYXJyaWVyIGlzIG5vdCByZXF1aXJlZCwgdGhlIHRpbWVyIHNob3VsZCBuZXZl cgorIGdvIG9mZiwgYW5kIHNob3VsZCBkbyBubyBoYXJtLi4uCisqLworICAgIHR0b3RtbyA9IDA7 CQkJCS8qIEZsYWcgbm8gdGltZW91dCAqLworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0aW1vIiwi Iix0aW1vKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4geGxvY2FsIiwiIix4bG9jYWwpOworICAg IGlmICh0aW1vID4gMCkgeworCWludCB4eDsKKwlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVy aCk7CS8qIFRpbWVkLCBzZXQgdXAgdGltZXIuICovCisJeHggPSBhbGFybSh0aW1vKTsJCS8qIFRp bWVkIG9wZW4oKSAqLworCWRlYnVnKEYxMDEsInR0b3BlbiBhbGFybSIsIiIseHgpOworCWlmICgK KyNpZmRlZiBDS19QT1NJWF9TSUcKKwkgICAgc2lnc2V0am1wKHNqYnVmLDEpCisjZWxzZQorCSAg ICBzZXRqbXAoc2pidWYpCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJICAgICkgeworCSAg ICB0dG90bW8gPSAxOwkJCS8qIEZsYWcgdGltZW91dC4gKi8KKwl9IGVsc2UgdHR5ZmQgPSBkb19v cGVuKHR0bmFtZSk7CisJdHRpbW9mZigpOworCWRlYnVnKEYxMTEsInR0b3BlbiIsIm1vZGVtIixt b2RlbSk7CisJZGVidWcoRjEwMSwidHRvcGVuIHR0eWZkIiwiIix0dHlmZCk7CisJZGVidWcoRjEw MSwidHRvcGVuIGFsYXJtIHJldHVybiIsIiIsdHRvdG1vKTsKKyAgICB9IGVsc2UgeworCWVycm5v ID0gMDsKKwl0dHlmZCA9IGRvX29wZW4odHRuYW1lKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwi dHRvcGVuIHR0eWZkIix0dG5hbWUsdHR5ZmQpOworICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBJ ZiBjb3VsZG4ndCBvcGVuLCBmYWlsLiAqLworCWRlYnVnKEYxMDEsInR0b3BlbiBlcnJubyIsIiIs ZXJybm8pOworCWlmIChlcnJubyA+IDAgJiYgIXF1aWV0KQorCSAgcGVycm9yKHR0bmFtZSk7CQkv KiBQcmludCBtZXNzYWdlICovCisKKyNpZmRlZiBBVFQ3MzAwCisJaWYgKGF0dG1vZGVtICYgRE9H RVRZKQkJLyogd2FzIGdldHR5KDFtKSBydW5uaW5nIGJlZm9yZSB1cz8gKi8KKwkgIG9uZ2V0dHko dHRubXN2KTsJCS8qIHllcywgcmVzdGFydCBvbiB0dHkgbGluZSAqLworCWF0dG1vZGVtICY9IH5E T0dFVFk7CQkvKiBubyBwaG9uZSBpbiB1c2UsIGdldHR5IHJlc3RvcmVkICovCisjZWxzZQorI2lm ZGVmIEFDVUNOVFJMCisgICAgICAgIC8qIFNob3VsZCBwdXQgY2FsbCB0byBwcml2X29uKCkgaGVy ZSwgYnV0IHRoYXQgd291bGQgYmUgcmlza3khICovCisJYWN1Y250cmwoImVuYWJsZSIsdHRuYW1l KTsJLyogYWN1Y250cmwoKSBwcm9ncmFtLiAqLworCS8qIGFuZCBwcml2X29mZigpIGhlcmUuLi4g Ki8KKyNlbmRpZiAvKiBBQ1VOVFJMICovCisjZW5kaWYgLyogQVRUNzMwMCAqLworCisJc2lnbmFs KFNJR0lOVCxvY2N0KTsJCS8qIFB1dCBvbGQgQ3RybC1DIHRyYXAgYmFjay4gKi8KKwlpZiAoZXJy bm8gPT0gRUFDQ0VTKSB7CQkvKiBEZXZpY2UgaXMgcHJvdGVjdGVkIGFnYWluc3QgdXNlciAqLwor CSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gRUFDQ0VTUyIsdHRuYW1lLDApOyAvKiBSZXR1cm4gLTQg Ki8KKwkgICAgcmV0dXJuKC00KTsKKwl9IGVsc2UgcmV0dXJuKHR0b3RtbyA/IC0yIDogLTEpOyAv KiBPdGhlcndpc2UgLTIgaWYgdGltZW91dCwgb3IgLTEgKi8KKyAgICB9CisKKyNpZmRlZiBRTlgK KyAgICB7CisJZXh0ZXJuIGludCBxbnhwb3J0bG9jazsKKwl4ID0gcW54b3BlbmNvdW50KCk7CisJ ZGVidWcoRjEwMSwidHRvcGVuIHFueG9wZW5jb3VudCIsIiIseCk7CisJZGVidWcoRjEwMSwidHRv cGVuIHFueHBvcnRsb2NrIiwiIixxbnhwb3J0bG9jayk7CisJaWYgKHggPCAwICYmIHFueHBvcnRs b2NrKSB7CisJICAgIHR0Y2xvcygwKTsKKwkgICAgcHJpbnRmKCI/Q2FuJ3QgZ2V0IHBvcnQgb3Bl biBjb3VudFxuIik7CisJICAgIHByaW50ZigiKFRyeSBhZ2FpbiB3aXRoIFNFVCBRTlgtUE9SVC1M T0NLIE9GRilcbiIpOworCSAgICByZXR1cm4oLTEpOwkJCS8qIEluZGljYXRlIGRldmljZSBpcyBp biB1c2UgKi8KKwl9CisJaWYgKHggPiAxKSB7CQkJLyogMSA9PSBtZSAqLworCSAgICBpZiAocW54 cG9ydGxvY2spCisJICAgICAgdHRjbG9zKDApOworCSAgICAgIHJldHVybigtMik7CQkvKiBJbmRp Y2F0ZSBkZXZpY2UgaXMgaW4gdXNlICovCisJICAgIGVsc2UgaWYgKCFxdWlldCkKKwkgICAgICBw cmludGYoIldBUk5JTkc6IFwiJXNcIiBsb29rcyBidXN5Li4uXG4iLHR0ZGV2KTsKKwl9CisgICAg fQorI2VuZGlmIC8qIFFOWCAqLworCisjaWZkZWYgUGxhbjkKKyAgICAvKiB0YWtlIHRoaXMgb3Bw b3J0dW5pdHkgdG8gb3BlbiB0aGUgY29udHJvbCBjaGFubmVsICovCisgICAgaWYgKHA5b3BlbnR0 eWN0bCh0dG5hbWUpIDwgMCkKKyNlbHNlCisgICAgLyogTWFrZSBzdXJlIGl0J3MgYSByZWFsIHR0 eS4gKi8KKyAgICBpZiAoIXR0ZmRmbGcgJiYgIWlzYXR0eSh0dHlmZCkgJiYgc3RyY21wKHR0bmFt ZSwiL2Rldi9udWxsIikpCisjZW5kaWYgLyogUGxhbjkgKi8KKyAgICAgIHsKKwlmcHJpbnRmKHN0 ZGVyciwiJXMgaXMgbm90IGEgdGVybWluYWwgZGV2aWNlXG4iLHR0bmFtZSk7CisJZGVidWcoRjEx MSwidHRvcGVuIG5vdCBhIHR0eSIsdHRuYW1lLGVycm5vKTsKKwljbG9zZSh0dHlmZCk7CisJdHR5 ZmQgPSAtMTsKKwl3YXNjbG9zZWQgPSAxOworCXNpZ25hbChTSUdJTlQsb2NjdCk7CisJcmV0dXJu KC0xKTsKKyAgICB9CisKKyNpZmRlZiBhZWdpcworCS8qIEFwb2xsbyBDIHJ1bnRpbWUgY2xhaW1z IHRoYXQgY29uc29sZSBwYWRzIGFyZSB0dHkgZGV2aWNlcywgd2hpY2gKKwkgKiBpcyByZWFzb25h YmxlLCBidXQgdGhleSBhcmVuJ3QgYW55IGdvb2QgZm9yIHBhY2tldCB0cmFuc2Zlci4gKi8KKwlp b3NfJGlucV90eXBlX3VpZCgoc2hvcnQpdHR5ZmQsIHR0eXVpZCwgc3QpOworCWlmIChzdC5hbGwg IT0gc3RhdHVzXyRvaykgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgInByb2JsZW0gZ2V0dGluZyB0 dHkgb2JqZWN0IHR5cGU6ICIpOworCSAgICBlcnJvcl8kcHJpbnQoc3QpOworCX0gZWxzZSBpZiAo dHR5dWlkICE9IHNpb18kdWlkKSB7IC8qIHJlamVjdCBub24tU0lPIGxpbmVzICovCisJICAgIGNs b3NlKHR0eWZkKTsgdHR5ZmQgPSAtMTsKKwkgICAgd2FzY2xvc2VkID0gMTsKKwkgICAgZXJybm8g PSBFTk9UVFk7IHBlcnJvcih0dG5hbWUpOworCSAgICBzaWduYWwoU0lHSU5ULG9jY3QpOworCSAg ICByZXR1cm4oLTEpOworCX0KKyNlbmRpZiAvKiBhZWdpcyAqLworCisgICAgc2lnaW50X2lnbiA9 IChvY2N0ID09IFNJR19JR04pID8gMSA6IDA7CisKKyAgICBja3N0cm5jcHkodHRubXN2LHR0bmFt ZSxERVZOQU1MRU4pOwkvKiBLZWVwIGNvcHkgb2YgbmFtZSBsb2NhbGx5LiAqLworCisvKiBDYWxs ZXIgd2FudHMgdXMgdG8gZmlndXJlIG91dCBpZiBsaW5lIGlzIGNvbnRyb2xsaW5nIHR0eSAqLwor CisgICAgaWYgKCpsY2wgPCAwKSB7CisgICAgICAgIGlmIChzdHJjbXAodHRuYW1lLENUVE5BTSkg PT0gMCkgeyAvKiAiL2Rldi90dHkiIGFsd2F5cyByZW1vdGUgKi8KKyAgICAgICAgICAgIHhsb2Nh bCA9IDA7CisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dG5hbWU9Q1RUTkFNIix0dG5hbWUseGxv Y2FsKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAodHRuYW1lLGN0dG5hbSkgPT0gMCkgewor ICAgICAgICAgICAgeGxvY2FsID0gMDsKKwkgICAgZGVidWcoRjExMSwidHRvcGVuIHR0bmFtZT1j dHRuYW0iLHR0bmFtZSx4bG9jYWwpOworCX0gZWxzZSBpZiAoY3R0bmFtWzBdKSB7CisjaWZkZWYg QkVCT1hfRFI3CisgICAgICAgICAgICB4ID0gdHRubXN2OwkJCS8qIHR0eW5hbWUoKSBpcyBicm9r ZW4gKi8KKyNlbHNlCisgICAgICAgICAgICB4ID0gdHR5bmFtZSh0dHlmZCk7ICAgICAgICAgLyog R2V0IHJlYWwgbmFtZSBvZiB0dG5hbWUuICovCisjZW5kaWYgLyogQkVCT1hfRFI3ICovCisJICAg IGlmICgheCkgeCA9ICIiOworCSAgICBpZiAoKngpCisJICAgICAgeGxvY2FsID0gKChzdHJuY21w KHgsY3R0bmFtLERFVk5BTUxFTikgPT0gMCkgPyAwIDogMSk7CisJICAgIGVsc2UKKwkgICAgICB4 bG9jYWwgPSAxOworICAgICAgICAgICAgZGVidWcoRjExMSwidHRvcGVuIHR0eW5hbWUodHR5ZmQp IHhsb2NhbCIseCx4bG9jYWwpOworICAgICAgICB9CisgICAgfQorCisjaWZuZGVmIE5PRkRaRVJP CisvKiBOb3RlLCB0aGUgZm9sbG93aW5nIGNvZGUgd2FzIGFkZGVkIHNvIHRoYXQgVW5peCAiaWRs ZS1saW5lIiBzbm9vcGVycyAqLworLyogd291bGQgbm90IHRoaW5rIEtlcm1pdCB3YXMgaWRsZSB3 aGVuIGl0IHdhcyB0cmFuc2ZlcnJpbmcgZmlsZXMsIGFuZCAqLworLyogbWF5YmUgbG9nIHBlb3Bs ZSBvdXQuICovCisgICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogUmVtb3RlIG1vZGUgKi8KKwlp ZiAoZmRmbGFnID09IDApIHsJCS8qIFN0YW5kYXJkIGkvbyBpcyBub3QgcmVkaXJlY3RlZCAqLwor CSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gc2V0dGluZyB0dHlmZCA9IDAiLCIiLDApOworI2lmZGVm IExZTlhPUworCSAgICAvKiBPbiBMeW54IE9TLCBmZCAwIGlzIG9wZW4gZm9yIHJlYWQgb25seS4g Ki8KKwkgICAgZHVwMih0dHlmZCwwKTsKKyNlbmRpZiAvKiBMWU5YT1MgKi8KKwkgICAgY2xvc2Uo dHR5ZmQpOwkJLyogVXNlIGZpbGUgZGVzY3JpcHRvciAwICovCisJICAgIHR0eWZkID0gMDsKKwl9 IGVsc2UgewkJCS8qIFN0YW5kYXJkIGkvbyBpcyByZWRpcmVjdGVkICovCisJICAgIGRlYnVnKEYx MDEsInR0b3BlbiBzdGRpbyByZWRpcmVjdGVkIiwiIix0dHlmZCk7CisJfQorICAgIH0KKyNlbmRp ZiAvKiBOT0ZEWkVSTyAqLworCisvKiBOb3cgY2hlY2sgaWYgbGluZSBpcyBsb2NrZWQgLS0gaWYg c28gZmFpbCwgZWxzZSBsb2NrIGZvciBvdXJzZWx2ZXMgKi8KKy8qIE5vdGU6IEFmdGVyIGhhdmlu ZyBkb25lIHRoaXMsIGRvbid0IGZvcmdldCB0byBkZWxldGUgdGhlIGxvY2sgaWYgeW91ICovCisv KiBsZWF2ZSB0dG9wZW4oKSB3aXRoIGFuIGVycm9yIGNvbmRpdGlvbi4gKi8KKworICAgIGxrZiA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGxvY2sgKi8KKyAgICBpZiAo eGxvY2FsID4gMCkgeworCWludCB4eDsgaW50IHhwaWQ7CisgICAgICAgIGlmICgoeHggPSB0dGxv Y2sodHRuYW1lKSkgPCAwKSB7IC8qIENhbid0IGxvY2sgaXQuICovCisgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJ0dG9wZW4gdHRsb2NrIGZhaWxzIix0dG5hbWUseHgpOworCSAgICAvKiBXQVJOSU5H IC0gVGhpcyBjbG9zZSgpIGNhbiBoYW5nIGlmIHR0eSBpcyBhbiBlbXB0eSBzb2NrZXQuLi4gKi8K KyAgICAgICAgICAgIGNsb3NlKHR0eWZkKTsJCS8qIENsb3NlIHRoZSBkZXZpY2UuICovCisJICAg IHR0eWZkID0gLTE7CQkJLyogRXJhc2UgaXRzIGZpbGUgZGVzY3JpcHRvci4gKi8KKwkgICAgd2Fz Y2xvc2VkID0gMTsKKwkgICAgc2lnbmFsKFNJR0lOVCxvY2N0KTsJLyogUHV0IG9sZCBTSUdJTlQg YmFjay4gKi8KKwkgICAgc2lnaW50X2lnbiA9IChvY2N0ID09IFNJR19JR04pID8gMSA6IDA7CisJ ICAgIGlmICh4eCA9PSAtMikgewkJLyogSWYgbG9ja2ZpbGUgc2F5cyBkZXZpY2UgaW4gdXNlLCAq LworI2lmbmRlZiBOT1VVQ1AKKwkJZGVidWcoRjExMSwidHRvcGVuIHJlYWRpbmcgbG9ja2ZpbGUg cGlkIixmbGZuYW0seHgpOworCQl4cGlkID0gdHRycGlkKGZsZm5hbSk7CS8qIFRyeSB0byByZWFk IHBpZCBmcm9tIGxvY2tmaWxlICovCisJCWlmICh4cGlkID4gLTEpIHsJLyogSWYgd2UgZ290IGEg cGlkICovCisgICAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCisJCSAgICAgIHByaW50Zigi TG9ja2VkIGJ5IHByb2Nlc3MgJWRcbiIseHBpZCk7IC8qIHRlbGwgdGhlbS4gKi8KKwkJICAgIHNw cmludGYobG9ja3BpZCwiJWQiLHhwaWQpOwkvKiBSZWNvcmQgaXQgdG9vICovCisJCSAgICBkZWJ1 ZyhGMTEwLCJ0dG9wZW4gbG9ja3BpZCIsbG9ja3BpZCwwKTsKKwkJfSBlbHNlIGlmICgqZmxmbmFt KSB7CisJCSAgICBleHRlcm4gY2hhciAqRElSQ01EOworCQkgICAgY2hhciAqcCA9IE5VTEw7CisJ CSAgICBpbnQgeDsKKwkJICAgIHggPSAoaW50KXN0cmxlbihmbGZuYW0pICsgKGludClzdHJsZW4o RElSQ01EKSArIDI7CisJCSAgICBwID0gbWFsbG9jKHgpOwkvKiBQcmludCBhIGRpcmVjdG9yeSBs aXN0aW5nLiAqLworLyoKKyAgTm90ZTogcHJpdl9vbigpIHdvbid0IGhlbHAgaGVyZSwgYmVjYXVz ZSB3ZSBkbyBub3QgcGFzcyBwcml2cyBhbG9uZyB0bworICB0byBpbmZlcmlvciBwcm9jZXNzZXMs IGluIHRoaXMgY2FzZSBscy4gIFNvIGlmIHRoZSByZWFsIHVzZXIgZG9lcyBub3QgaGF2ZQorICBk aXJlY3RvcnktbGlzdGluZyBhY2Nlc3MgdG8gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSwgdGhpcyB3 aWxsIHJlc3VsdCBpbgorICBzb21ldGhpbmcgbGlrZSAibm90IGZvdW5kIi4gIFRoYXQncyB3aHkg d2UgdHJ5IHRoaXMgb25seSBhcyBhIGxhc3QgcmVzb3J0LgorKi8KKwkJICAgIGlmIChwKSB7CQkv KiBJZiB3ZSBnb3QgdGhlIHNwYWNlLi4uICovCisJCQlja21ha21zZyhwLHgsRElSQ01ELCIgIixm bGZuYW0sTlVMTCk7CisJCQl6c3lzY21kKHApOwkvKiBHZXQgbGlzdGluZy4gKi8KKwkJCWlmIChw KSB7CS8qIGZyZWUgdGhlIHNwYWNlICovCisJCQkgICAgZnJlZShwKTsKKwkJCSAgICBwID0gTlVM TDsKKwkJCX0KKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIE5PVVVDUCAqLworCQlyZXR1cm4oLTUp OwkJLyogQ29kZSBmb3IgZGV2aWNlIGluIHVzZSAqLworCSAgICB9IGVsc2UgcmV0dXJuKC0zKTsJ CS8qIEFjY2VzcyBkZW5pZWQgKi8KKyAgICAgICAgfSBlbHNlIGxrZiA9IDE7CisgICAgfQorI2Vs c2UgIC8qIE9QRU5GSVJTVCAqLworCisvKgorICAyNyBPY3QgMjAwMTogTmV3IHNpbXBsZXIgY29k ZSB0aGF0IGdldHMgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZW4gb3BlbnMgdGhlCisgIGRldmljZSwg d2hpY2ggZWxpbWluYXRlcyB0aGUgcmFjZSBjb25kaXRpb24uICBUaGUgZG93bnNpZGUgaXMgeW91 IGNhbiBubworICBsb25nZXIgc2F5ICJzZXQgbGluZSAvZGV2L3R0eXAwIiBvciB3aGF0ZXZlciwg d2hlcmUgL2Rldi90dHlwMCBpcyB5b3VyIGxvZ2luCisgIHRlcm1pbmFsLCB3aXRob3V0IHRyeWlu ZyB0byBjcmVhdGUgYSBsb2NrZmlsZSwgd2hpY2ggZmFpbHMgaWYgQy1LZXJtaXQgbGFja3MKKyAg cHJpdnMsIGFuZCBpZiBpdCBzdWNjZWVkcywgaXQgaGFzIGNyZWF0ZWQgYSBsb2NrZmlsZSB3aGVy ZSBpdCBkaWRuJ3QgY3JlYXRlCisgIG9uZSBiZWZvcmUuCisqLworICAgIHhsb2NhbCA9ICpsY2w7 CQkJLyogSXMgdGhlIGRldmljZSBteSBsb2dpbiB0ZXJtaW5hbD8gKi8KKyAgICBkZWJ1ZyhGMTEx LCJ0dG9wZW4geGxvY2FsIiwiQSIseGxvY2FsKTsKKyAgICBmbmFtID0gdHRuYW1lOworICAgIGlm IChzdHJjbXAodHRuYW1lLENUVE5BTSkgJiYgbmV0Y29ubiA9PSAwKSB7CisJaWYgKHpmbnFmcCh0 dG5hbWUsREVWTkFNTEVOKzEsZnVsbG5hbWUpKSB7CisJICAgIGlmICgoaW50KXN0cmxlbihmdWxs bmFtZSkgPiAwKQorCSAgICAgIGZuYW0gPSBmdWxsbmFtZTsKKwl9CisgICAgfQorICAgIGRlYnVn KEYxMTAsInR0b3BlbiBmbmFtIixmbmFtLDApOworICAgIGlmICh4bG9jYWwgPCAwKSB7CisJeGxv Y2FsID0gKHN0cmNtcChmbmFtLENUVE5BTSkgIT0gMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTEs InR0b3BlbiB4bG9jYWwiLCJCIix4bG9jYWwpOworCisgICAgbGtmID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTm8gbG9jayB5ZXQgKi8KKyAgICBpZiAoeGxvY2FsID4gMCkgewkJ CS8qIElmIG5vdC4uLiAqLworCWludCB4eDsgaW50IHhwaWQ7CisJeHggPSB0dGxvY2soZm5hbSk7 CQkvKiBUcnkgdG8gbG9jayBpdC4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRsb2NrIiwiIix4 eCk7CisgICAgICAgIGlmICh4eCA8IDApIHsJCQkvKiBDYW4ndCBsb2NrIGl0LiAqLworICAgICAg ICAgICAgZGVidWcoRjExMSwidHRvcGVuIHR0bG9jayBmYWlscyIsZm5hbSx4eCk7CisJICAgIGlm ICh4eCA9PSAtMikgewkJLyogSWYgbG9ja2ZpbGUgc2F5cyBkZXZpY2UgaW4gdXNlLCAqLworI2lm bmRlZiBOT1VVQ1AKKwkJZGVidWcoRjExMSwidHRvcGVuIHJlYWRpbmcgbG9ja2ZpbGUgcGlkIixm bGZuYW0seHgpOworCQl4cGlkID0gdHRycGlkKGZsZm5hbSk7CS8qIFRyeSB0byByZWFkIHBpZCBm cm9tIGxvY2tmaWxlICovCisJCWlmICh4cGlkID4gLTEpIHsJLyogSWYgd2UgZ290IGEgcGlkICov CisgICAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCisJCSAgICAgIHByaW50ZigiTG9ja2Vk IGJ5IHByb2Nlc3MgJWRcbiIseHBpZCk7IC8qIHRlbGwgdGhlbS4gKi8KKwkJICAgIGNrc3RybmNw eShsb2NrcGlkLGNraXRvYSh4cGlkKSwxNik7CisJCSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gbG9j a3BpZCIsbG9ja3BpZCwwKTsKKyNpZm5kZWYgTk9QVVNICisJCX0gZWxzZSBpZiAoZmxmbmFtWzBd ICYmICFub3B1c2gpIHsKKwkJICAgIGV4dGVybiBjaGFyICpESVJDTUQ7CisJCSAgICBjaGFyICpw ID0gTlVMTDsKKwkJICAgIGludCB4OworCQkgICAgeCA9IChpbnQpc3RybGVuKGZsZm5hbSkgKyAo aW50KXN0cmxlbihESVJDTUQpICsgMjsKKwkJICAgIHAgPSBtYWxsb2MoeCk7CS8qIFByaW50IGEg ZGlyZWN0b3J5IGxpc3RpbmcuICovCisvKgorICBOb3RlOiBwcml2X29uKCkgd29uJ3QgaGVscCBo ZXJlLCBiZWNhdXNlIHdlIGRvIG5vdCBwYXNzIHByaXZzIGFsb25nIHRvCisgIHRvIGluZmVyaW9y IHByb2Nlc3NlcywgaW4gdGhpcyBjYXNlIGxzLiAgU28gaWYgdGhlIHJlYWwgdXNlciBkb2VzIG5v dCBoYXZlCisgIGRpcmVjdG9yeS1saXN0aW5nIGFjY2VzcyB0byB0aGUgbG9ja2ZpbGUgZGlyZWN0 b3J5LCB0aGlzIHdpbGwgcmVzdWx0IGluCisgIHNvbWV0aGluZyBsaWtlICJub3QgZm91bmQiLiAg VGhhdCdzIHdoeSB3ZSB0cnkgdGhpcyBvbmx5IGFzIGEgbGFzdCByZXNvcnQuCisqLworCQkgICAg aWYgKHApIHsJCS8qIElmIHdlIGdvdCB0aGUgc3BhY2UuLi4gKi8KKwkJCWNrbWFrbXNnKHAseCxE SVJDTUQsIiAiLGZsZm5hbSxOVUxMKTsKKwkJCXpzeXNjbWQocCk7CS8qIEdldCBsaXN0aW5nLiAq LworCQkJaWYgKHApIHsJLyogZnJlZSB0aGUgc3BhY2UgKi8KKwkJCSAgICBmcmVlKHApOworCQkJ ICAgIHAgPSBOVUxMOworCQkJfQorCQkgICAgfQorI2VuZGlmIC8qIE5PUFVTSCAqLworCQl9Cisj ZW5kaWYgLyogTk9VVUNQICovCisJCXJldHVybigtNSk7CQkvKiBDb2RlIGZvciBkZXZpY2UgaW4g dXNlICovCisJICAgIH0gZWxzZSByZXR1cm4oLTMpOwkJLyogQWNjZXNzIGRlbmllZCAqLworICAg ICAgICB9IGVsc2UgbGtmID0gMTsKKyAgICB9CisgICAgLyogSGF2ZSBsb2NrIC0tIG5vdyBpdCdz IHNhZmUgdG8gb3BlbiB0aGUgZGV2aWNlICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbGtm IiwiIixsa2YpOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0aW1vIiwiIix0aW1vKTsKKworICAg IHR0b3RtbyA9IDA7CQkJCS8qIEZsYWcgbm8gdGltZW91dCAqLworICAgIGlmICh0aW1vID4gMCkg eworCWludCB4eDsKKwlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVyaCk7CS8qIFRpbWVkLCBz ZXQgdXAgdGltZXIuICovCisJeHggPSBhbGFybSh0aW1vKTsJCS8qIFRpbWVkIG9wZW4oKSAqLwor CWRlYnVnKEYxMDEsInR0b3BlbiBhbGFybSIsIiIseHgpOworCWlmICgKKyNpZmRlZiBDS19QT1NJ WF9TSUcKKwkgICAgc2lnc2V0am1wKHNqYnVmLDEpCisjZWxzZQorCSAgICBzZXRqbXAoc2pidWYp CisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJICAgICkgeworCSAgICB0dG90bW8gPSAxOwkJ CS8qIEZsYWcgdGltZW91dC4gKi8KKwl9IGVsc2UgeworCSAgICB0dHlmZCA9IGRvX29wZW4oZm5h bSk7CisJfQorCXR0aW1vZmYoKTsKKwlkZWJ1ZyhGMTExLCJ0dG9wZW4gdGltZWQgdHR5ZmQiLGZu YW0sdHR5ZmQpOworICAgIH0gZWxzZSB7CisJZXJybm8gPSAwOworCXR0eWZkID0gZG9fb3Blbihm bmFtKTsKKwlkZWJ1ZyhGMTExLCJ0dG9wZW4gdW50aW1lZCB0dHlmZCIsZm5hbSx0dHlmZCk7Cisg ICAgfQorICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBJZiBjb3VsZG4ndCBvcGVuLCBmYWlsLiAq LworCWRlYnVnKEYxMTEsInR0b3BlbiBlcnJubyIsZm5hbSxlcnJubyk7CisJZGVidWcoRjExMSwi dHRvcGVuIHhsb2NhbCIsIkMiLHhsb2NhbCk7CisJaWYgKHhsb2NhbCA9PSAwKSB7CisJICAgIGRl YnVnKEYxMDAsInR0b3BlbiBzdWJzdGl0dXRpbmcgMCIsIiIsMCk7CisJICAgIHR0eWZkID0gMDsK Kwl9IGVsc2UgeworCSAgICBpZiAoZXJybm8gPiAwICYmICFxdWlldCkgeworCSAgICAgICAgZGVi dWcoRjExMSwidHRvcGVuIHBlcnJvciIsZm5hbSxlcnJubyk7CisJCXBlcnJvcihmbmFtKTsJCS8q IFByaW50IG1lc3NhZ2UgKi8KKwkgICAgfQorCSAgICBpZiAodHR1bmxjaygpKSAgICAgICAgICAg ICAgICAgIC8qIFJlbGVhc2UgdGhlIGxvY2sgZmlsZSAqLworCSAgICAgIGZwcmludGYoc3RkZXJy LCJXYXJuaW5nLCBwcm9ibGVtIHJlbGVhc2luZyBsb2NrXHJcbiIpOworCX0KKyAgICB9CisKKyAg ICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogdHR5ZmQgaXMgc3RpbGwgPCAwPyAqLworI2lmZGVmIEFU VDczMDAKKwlpZiAoYXR0bW9kZW0gJiBET0dFVFkpCQkvKiB3YXMgZ2V0dHkoMW0pIHJ1bm5pbmcg YmVmb3JlIHVzPyAqLworCSAgb25nZXR0eSh0dG5tc3YpOwkJLyogeWVzLCByZXN0YXJ0IG9uIHR0 eSBsaW5lICovCisJYXR0bW9kZW0gJj0gfkRPR0VUWTsJCS8qIG5vIHBob25lIGluIHVzZSwgZ2V0 dHkgcmVzdG9yZWQgKi8KKyNlbHNlCisjaWZkZWYgQUNVQ05UUkwKKyAgICAgICAgLyogU2hvdWxk IHB1dCBjYWxsIHRvIHByaXZfb24oKSBoZXJlLCBidXQgdGhhdCB3b3VsZCBiZSByaXNreSEgKi8K KwlhY3VjbnRybCgiZW5hYmxlIixmbmFtKTsJLyogYWN1Y250cmwoKSBwcm9ncmFtLiAqLworCS8q IGFuZCBwcml2X29mZigpIGhlcmUuLi4gKi8KKyNlbmRpZiAvKiBBQ1VOVFJMICovCisjZW5kaWYg LyogQVRUNzMwMCAqLworCisJc2lnbmFsKFNJR0lOVCxvY2N0KTsJCS8qIFB1dCBvbGQgQ3RybC1D IHRyYXAgYmFjay4gKi8KKwlpZiAoZXJybm8gPT0gRUFDQ0VTKSB7CQkvKiBEZXZpY2UgaXMgcHJv dGVjdGVkIGFnYWluc3QgdXNlciAqLworCSAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gRUFDQ0VTUyIs Zm5hbSwwKTsgLyogUmV0dXJuIC00ICovCisJICAgIHJldHVybigtNCk7CisJfSBlbHNlIHJldHVy bih0dG90bW8gPyAtMiA6IC0xKTsgLyogT3RoZXJ3aXNlIC0yIGlmIHRpbWVvdXQsIG9yIC0xICov CisgICAgfQorCisvKiBNYWtlIHN1cmUgaXQncyBhIHJlYWwgdHR5LiAqLworCisjaWZkZWYgUGxh bjkKKyAgICAvKiB0YWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gb3BlbiB0aGUgY29udHJvbCBjaGFu bmVsICovCisgICAgaWYgKHA5b3BlbnR0eWN0bChmbmFtKSA8IDApICAgICAgIAorI2Vsc2UKKyAg ICAgIGlmICghdHRmZGZsZyAmJiAhaXNhdHR5KHR0eWZkKSAmJiBzdHJjbXAoZm5hbSwiL2Rldi9u dWxsIikpCisjZW5kaWYgLyogUGxhbjkgKi8KKwl7CisJICAgIGZwcmludGYoc3RkZXJyLCIlcyBp cyBub3QgYSB0ZXJtaW5hbCBkZXZpY2VcbiIsZm5hbSk7CisJICAgIGRlYnVnKEYxMTEsInR0b3Bl biBub3QgYSB0dHkiLGZuYW0sZXJybm8pOworCSAgICBpZiAodHR1bmxjaygpKQkJLyogUmVsZWFz ZSB0aGUgbG9jayBmaWxlICovCisJICAgICAgZnByaW50ZihzdGRlcnIsIldhcm5pbmcsIHByb2Js ZW0gcmVsZWFzaW5nIGxvY2tcclxuIik7CisJICAgIGNsb3NlKHR0eWZkKTsKKwkgICAgdHR5ZmQg PSAtMTsKKwkgICAgd2FzY2xvc2VkID0gMTsKKwkgICAgc2lnbmFsKFNJR0lOVCxvY2N0KTsKKwkg ICAgcmV0dXJuKC0xKTsKKwl9CisKKyNpZmRlZiBhZWdpcworICAgIC8qCisgICAgICBBcG9sbG8g QyBydW50aW1lIGNsYWltcyB0aGF0IGNvbnNvbGUgcGFkcyBhcmUgdHR5IGRldmljZXMsIHdoaWNo CisgICAgICBpcyByZWFzb25hYmxlLCBidXQgdGhleSBhcmVuJ3QgYW55IGdvb2QgZm9yIHBhY2tl dCB0cmFuc2Zlci4KKyAgICAqLworICAgIGlvc18kaW5xX3R5cGVfdWlkKChzaG9ydCl0dHlmZCwg dHR5dWlkLCBzdCk7CisgICAgaWYgKHN0LmFsbCAhPSBzdGF0dXNfJG9rKSB7CisJZnByaW50Zihz dGRlcnIsICJwcm9ibGVtIGdldHRpbmcgdHR5IG9iamVjdCB0eXBlOiAiKTsKKwllcnJvcl8kcHJp bnQoc3QpOworICAgIH0gZWxzZSBpZiAodHR5dWlkICE9IHNpb18kdWlkKSB7CS8qIFJlamVjdCBu b24tU0lPIGxpbmVzICovCisJY2xvc2UodHR5ZmQpOyB0dHlmZCA9IC0xOworCXdhc2Nsb3NlZCA9 IDE7CisJZXJybm8gPSBFTk9UVFk7IHBlcnJvcihmbmFtKTsKKwlzaWduYWwoU0lHSU5ULG9jY3Qp OworCXJldHVybigtMSk7CisgICAgfQorI2VuZGlmIC8qIGFlZ2lzICovCisKKyAgICBzaWdpbnRf aWduID0gKG9jY3QgPT0gU0lHX0lHTikgPyAxIDogMDsKKworICAgIGNrc3RybmNweSh0dG5tc3Ys dHRuYW1lLERFVk5BTUxFTik7CS8qIEtlZXAgY29weSBvZiBuYW1lIGxvY2FsbHkuICovCisKKy8q IENhbGxlciB3YW50cyB1cyB0byBmaWd1cmUgb3V0IGlmIGxpbmUgaXMgY29udHJvbGxpbmcgdHR5 ICovCisKKyAgICBpZiAoKmxjbCA8IDApIHsKKwljaGFyICogczsKKyAgICAgICAgaWYgKHN0cmNt cChmbmFtLENUVE5BTSkgPT0gMCkgeyAvKiAiL2Rldi90dHkiIGFsd2F5cyByZW1vdGUgKi8KKyAg ICAgICAgICAgIHhsb2NhbCA9IDA7CisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiBmbmFtPUNUVE5B TSIsZm5hbSx4bG9jYWwpOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChmbmFtLGN0dG5hbSkg PT0gMCkgeworICAgICAgICAgICAgeGxvY2FsID0gMDsKKwkgICAgZGVidWcoRjExMSwidHRvcGVu IGZuYW09Y3R0bmFtIixmbmFtLHhsb2NhbCk7CisJfSBlbHNlIGlmIChjdHRuYW1bMF0pIHsKKyNp ZmRlZiBCRUJPWF9EUjcKKyAgICAgICAgICAgIHMgPSB0dG5tc3Y7CQkJLyogdHR5bmFtZSgpIGlz IGJyb2tlbiAqLworI2Vsc2UKKyAgICAgICAgICAgIHMgPSB0dHluYW1lKHR0eWZkKTsgICAgICAg ICAvKiBHZXQgcmVhbCBuYW1lIG9mIHR0bmFtZS4gKi8KKyNlbmRpZiAvKiBCRUJPWF9EUjcgKi8K KwkgICAgaWYgKCFzKSBzID0gIiI7CisJICAgIGlmICgqcykKKwkgICAgICB4bG9jYWwgPSAoKHN0 cm5jbXAocyxjdHRuYW0sREVWTkFNTEVOKSA9PSAwKSA/IDAgOiAxKTsKKwkgICAgZWxzZQorCSAg ICAgIHhsb2NhbCA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gdHR5bmFtZSh0 dHlmZCkgeGxvY2FsIixzLHhsb2NhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZm5kZWYgTk9G RFpFUk8KKy8qIE5vdGUsIHRoZSBmb2xsb3dpbmcgY29kZSB3YXMgYWRkZWQgc28gdGhhdCBVbml4 ICJpZGxlLWxpbmUiIHNub29wZXJzICovCisvKiB3b3VsZCBub3QgdGhpbmsgS2VybWl0IHdhcyBp ZGxlIHdoZW4gaXQgd2FzIHRyYW5zZmVycmluZyBmaWxlcywgYW5kICovCisvKiBtYXliZSBsb2cg cGVvcGxlIG91dC4gKi8KKyAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBSZW1vdGUgbW9kZSAq LworCWlmIChmZGZsYWcgPT0gMCkgewkJLyogU3RhbmRhcmQgaS9vIGlzIG5vdCByZWRpcmVjdGVk ICovCisJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBzZXR0aW5nIHR0eWZkID0gMCIsIiIsMCk7Cisj aWZkZWYgTFlOWE9TCisJICAgIC8qIE9uIEx5bnggT1MsIGZkIDAgaXMgb3BlbiBmb3IgcmVhZCBv bmx5LiAqLworCSAgICBkdXAyKHR0eWZkLDApOworI2VuZGlmIC8qIExZTlhPUyAqLworCSAgICBj bG9zZSh0dHlmZCk7CQkvKiBVc2UgZmlsZSBkZXNjcmlwdG9yIDAgKi8KKwkgICAgdHR5ZmQgPSAw OworCX0gZWxzZSB7CQkJLyogU3RhbmRhcmQgaS9vIGlzIHJlZGlyZWN0ZWQgKi8KKwkgICAgZGVi dWcoRjEwMSwidHRvcGVuIHN0ZGlvIHJlZGlyZWN0ZWQiLCIiLHR0eWZkKTsKKwl9CisgICAgfQor I2VuZGlmIC8qIE5PRkRaRVJPICovCisjZW5kaWYgLyogT1BFTkZJUlNUICovCisKKy8qIEdvdCB0 aGUgbGluZSwgbm93IHNldCB0aGUgZGVzaXJlZCB2YWx1ZSBmb3IgbG9jYWwuICovCisKKyAgICBp ZiAoKmxjbCAhPSAwKSAqbGNsID0geGxvY2FsOworCisvKiBTb21lIHNwZWNpYWwgc3R1ZmYgZm9y IHY3Li4uICovCisKKyNpZmRlZiAgVjcKKyNpZm5kZWYgTUlOSVgKKyAgICBpZiAoa21lbVtUVFld IDwgMCkgewkJLyogIElmIG9wZW4sIHRoZW4gc2tpcCB0aGlzLiAgKi8KKwlxYWRkcltUVFldID0g aW5pdHJhd3EodHR5ZmQpOyAgIC8qIEluaXQgdGhlIHF1ZXVlLiAqLworCWlmICgoa21lbVtUVFld ID0gb3BlbigiL2Rldi9rbWVtIiwgMCkpIDwgMCkgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgIkNh bid0IHJlYWQgL2Rldi9rbWVtIGluIHR0b3Blbi5cbiIpOworCSAgICBwZXJyb3IoIi9kZXYva21l bSIpOworCSAgICBleGl0KDEpOworCX0KKyAgICB9CisjZW5kaWYgLyogIU1JTklYICovCisjZW5k aWYgLyogVjcgKi8KKworLyogTm8gZmFpbHVyZSByZXR1cm5zIGFmdGVyIHRoaXMgcG9pbnQgKi8K KworI2lmZGVmIHVsdHJpeAorICAgIGlvY3RsKHR0eWZkLCBUSU9DTU9ERU0sICZ0ZW1wKTsKKyNp ZmRlZiBUSU9DU0lOVVNFCisgICAgaWYgKHhsb2NhbCAmJiBpb2N0bCh0dHlmZCwgVElPQ1NJTlVT RSwgTlVMTCkgPCAwKSB7CisJaWYgKCFxdWlldCkKKwkgIHBlcnJvcihmbmFtKTsKKyAgICB9Cisj ZW5kaWYgLyogVElPQ1NJTlVTRSAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworCisvKiBHZXQgdHR5 IGRldmljZSBzZXR0aW5ncyAgKi8KKworI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYICov CisgICAgdGNnZXRhdHRyKHR0eWZkLCZ0dG9sZCk7CisgICAgZGVidWcoRjEwMSwidHRvcGVuIHRj Z2V0YXR0ciB0dG9sZC5jX2xmbGFnIiwiIix0dG9sZC5jX2xmbGFnKTsKKyAgICB0Y2dldGF0dHIo dHR5ZmQsJnR0cmF3KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGNnZXRhdHRyIHR0cmF3LmNf bGZsYWciLCIiLHR0cmF3LmNfbGZsYWcpOworICAgIHRjZ2V0YXR0cih0dHlmZCwmdHR0dnQpOwor ICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0Y2dldGF0dHIgdHR0dnQuY19sZmxhZyIsIiIsdHR0dnQu Y19sZmxhZyk7CisjZWxzZQkJCQkJLyogQlNELCBWNywgYW5kIGFsbCBvdGhlcnMgKi8KKyNpZmRl ZiBBVFRTVgkJCQkvKiBBVCZUIFVOSVggKi8KKyAgICBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0b2xk KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gaW9jdGwgVENHRVRBIHR0b2xkLmNfbGZsYWciLCIi LHR0b2xkLmNfbGZsYWcpOworICAgIGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRyYXcpOworICAgIGlv Y3RsKHR0eWZkLFRDR0VUQSwmdHR0dnQpOworI2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisgICAgaW9j dGwodHR5ZmQsVElPQ0dFVFAsJnR0b2xkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gQkVMTFYx MCB0dG9sZC5zZ19mbGFncyIsIiIsdHRvbGQuc2dfZmxhZ3MpOworICAgIGlvY3RsKHR0eWZkLFRJ T0NHREVWLCZ0ZG9sZCk7CisgICAgZGVidWcoRjEwMSwidHRvcGVuIEJFTExWMTAgdGRvbGQuZmxh Z3MiLCIiLHRkb2xkLmZsYWdzKTsKKyNlbHNlCisgICAgZ3R0eSh0dHlmZCwmdHRvbGQpOworICAg IGRlYnVnKEYxMDEsInR0b3BlbiBndHR5IHR0b2xkLnNnX2ZsYWdzIiwiIix0dG9sZC5zZ19mbGFn cyk7CisjZW5kaWYgLyogQkVMTFYxMCAqLworCisjaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBO RVdTICovCisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NLR0VULCZrbV9leHQpIDwgMCkgeyAvKiBH ZXQgY29uc29sZSBLYW5qaSBtb2RlICovCisJcGVycm9yKCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBL YW5qaSBtb2RlIik7CisJZGVidWcoRjEwMSwidHRvcGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9k ZSIsIiIsMCk7CisJa21fZXh0ID0gLTE7CQkJLyogTWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZp bmVkLiAqLworICAgIH0KKyNlbmRpZiAvKiBzb255X25ld3MgKi8KKworI2lmZGVmIFRJT0NHRVRD CisgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHRVRDIiwiIiwwKTsKKyAgICB0Y2hhcmYgPSAw OwkJCQkvKiBJbiByZW1vdGUgbW9kZSwgYWxzbyBnZXQgKi8KKyAgICBpZiAoeGxvY2FsID09IDAp IHsJCQkvKiBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKwlpZiAoaW9jdGwodHR5ZmQsVElPQ0dFVEMs JnRjaG9sZCkgPCAwKSB7CisJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0VUQyBmYWlsZWQi LCIiLDApOworCX0gZWxzZSB7CisJICAgIHRjaGFyZiA9IDE7CQkJLyogSXQgd29ya2VkLiAqLwor CSAgICBpb2N0bCh0dHlmZCxUSU9DR0VUQywmdGNobm9pKTsgLyogR2V0IGFub3RoZXIgY29weSAq LworCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dFVEMgb2siLCIiLDApOworCX0KKyAgICB9 CisjZWxzZQorICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0VUQyBub3QgZGVmaW5lZCIsIiIs MCk7CisjZW5kaWYgLyogVElPQ0dFVEMgKi8KKworI2lmZGVmIFRJT0NHTFRDCisgICAgZGVidWco RjEwMCwidHRvcGVuIFRJT0NHTFRDIiwiIiwwKTsKKyAgICBsdGNoYXJmID0gMDsJCQkvKiBJbiBy ZW1vdGUgbW9kZSwgYWxzbyBnZXQgKi8KKyAgICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBsb2Nh bCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKwlpZiAoaW9jdGwodHR5ZmQsVElPQ0dMVEMsJmx0Y2hv bGQpIDwgMCkgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dMVEMgZmFpbGVkIiwiIiww KTsKKwl9IGVsc2UgeworCSAgICBsdGNoYXJmID0gMTsJCS8qIEl0IHdvcmtlZC4gKi8KKwkgICAg aW9jdGwodHR5ZmQsVElPQ0dMVEMsJmx0Y2hub2kpOyAvKiBHZXQgYW5vdGhlciBjb3B5ICovCisJ ICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9DR0xUQyBvayIsIiIsMCk7CisJfQorICAgIH0KKyNl bHNlCisgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHTFRDIG5vdCBkZWZpbmVkIiwiIiwwKTsK KyNlbmRpZiAvKiBUSU9DR0xUQyAqLworCisjaWZkZWYgVElPQ0xHRVQKKyAgICBkZWJ1ZyhGMTAw LCJ0dG9wZW4gVElPQ0xHRVQiLCIiLDApOworICAgIGxtb2RlZiA9IDA7CisgICAgaWYgKGlvY3Rs KHR0eWZkLFRJT0NMR0VULCZsbW9kZSkgPCAwKSB7CisJZGVidWcoRjEwMCwidHRvcGVuIFRJT0NM R0VUIGZhaWxlZCIsIiIsMCk7CisgICAgfSBlbHNlIHsKKwlsbW9kZWYgPSAxOworCWRlYnVnKEYx MDAsInR0b3BlbiBUSU9DTEdFVCBvayIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8qIFRJT0NMR0VU ICovCisKKyNpZmRlZiBCRUxMVjEwCisgICAgaW9jdGwodHR5ZmQsVElPQ0dFVFAsJnR0cmF3KTsK KyAgICBpb2N0bCh0dHlmZCxUSU9DR0VUUCwmdHR0dnQpOworI2Vsc2UKKyAgICBndHR5KHR0eWZk LCZ0dHJhdyk7ICAgICAgICAgICAgICAgICAvKiBBbmQgYSBjb3B5IG9mIGl0IGZvciBwYWNrZXRz Ki8KKyAgICBndHR5KHR0eWZkLCZ0dHR2dCk7ICAgICAgICAgICAgICAgICAvKiBBbmQgb25lIGZv ciB2aXJ0dWFsIHR0eSBzZXJ2aWNlICovCisjZW5kaWYgLyogQkVMTFYxMCAqLworCisjZW5kaWYg LyogQVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKworLyogU2VjdGlvbiBmb3Ig Y2hhbmdpbmcgbGluZSBkaXNjaXBsaW5lLiAgSXQncyByZXN0b3JlZCBpbiB0dHJlcygpLiAqLwor CisjaWZkZWYgQUlYUlMKKyNpZm5kZWYgQUlYNDEKKyAgICB7IHVuaW9uIHR4bmFtZSBsZF9uYW1l OyBpbnQgbGRfaWR4ID0gMDsKKyAgICAgIHR0bGQgPSAwOworICAgICAgICBkbyB7CisgIAkgIGxk X25hbWUudHhfd2hpY2ggPSBsZF9pZHgrKzsKKyAgCSAgaW9jdGwodHR5ZmQsIFRYR0VUQ0QsICZs ZF9uYW1lKTsKKwkgIGlmICghc3RybmNtcChsZF9uYW1lLnR4X25hbWUsICJydHMiLCAzKSkKKyAg CSAgICB0dGxkIHw9IDE7CisgICAgICAgIH0gd2hpbGUgKCpsZF9uYW1lLnR4X25hbWUpOworICAg ICAgICBkZWJ1ZyhGMTAxLCJBSVggbGluZSBkaXNjaXBsaW5lIiwiIix0dGxkKTsKKyAgICAgIH0K KyNlbmRpZiAvKiBBSVg0MSAqLworI2VuZGlmIC8qIEFJWFJTICovCisKKyNpZmRlZiBCU0Q0MQor LyogRm9yIDQuMUJTRCBvbmx5LCBmb3JjZSAib2xkIiB0dHkgZHJpdmVyLCBuZXcgb25lIGJvdGNo ZXMgVEFOREVNLiAqLworICAgIHsgaW50IGs7CisgICAgICBpb2N0bCh0dHlmZCwgVElPQ0dFVEQs ICZ0dGxkKTsJLyogR2V0IGFuZCBzYXZlIGxpbmUgZGlzY2lwbGluZSAqLworICAgICAgZGVidWco RjEwMSwiNC4xYnNkIGxpbmUgZGlzY2lwbGluZSIsIiIsdHRsZCk7CisgICAgICBrID0gT1RUWURJ U0M7CQkJLyogU3dpdGNoIHRvICJvbGQiIGRpc2NpcGxpbmUgKi8KKyAgICAgIGsgPSBpb2N0bCh0 dHlmZCwgVElPQ1NFVEQsICZrKTsKKyAgICAgIGRlYnVnKEYxMDEsIjQuMWJzZCB0aW9jc2V0ZCIs IiIsayk7CisgICAgfQorI2VuZGlmIC8qIEJTRDQxICovCisKKyNpZmRlZiBhZWdpcworICAgIC8q IFRoaXMgd2FzIHByZXZpb3VzbHkgZG9uZSBiZWZvcmUgdGhlIGxhc3QgdHdvIFRDR0VUQSBvciBn dHR5IGFib3ZlLAorICAgICAqIGluIGJvdGggdGhlIEFUVFNWIGFuZCBub3QtQVRUU1YgY2FzZS4g IElmIGl0IGlzIG5vdCBva2F5IHRvIGhhdmUgb25seQorICAgICAqIG9uZSBjb3B5IGlmIGl0IGhl cmUgaW5zdGVhZCwgZ2l2ZSB1cyBhIHNob3V0IQorICAgICAqLworICAgIHNpb18kY29udHJvbCgo c2hvcnQpdHR5ZmQsIHNpb18kcmF3X25sLCBmYWxzZSwgc3QpOworICAgIGlmICh4bG9jYWwpIHsg ICAgICAgLyogaWdub3JlIGJyZWFrcyBmcm9tIGxvY2FsIGxpbmUgKi8KKyAgICAgICAgc2lvXyRj b250cm9sKChzaG9ydCl0dHlmZCwgc2lvXyRpbnRfZW5hYmxlLCBmYWxzZSwgc3QpOworICAgICAg ICBzaW9fJGNvbnRyb2woKHNob3J0KXR0eWZkLCBzaW9fJHF1aXRfZW5hYmxlLCBmYWxzZSwgc3Qp OworICAgIH0KKyNlbmRpZiAvKiBhZWdpcyAqLworCisjaWZkZWYgVlhWRQorICAgIHR0cmF3LmNf bGluZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFNUVFkgbGluZSAwIGZvciBWWC9WRSAqLwor ICAgIHR0dHZ0LmNfbGluZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFNUVFkgbGluZSAwIGZv ciBWWC9WRSAqLworICAgIGlvY3RsKHR0eWZkLFRDU0VUQSwmdHRyYXcpOworI2VuZGlmIC8qIHZ4 dmUgKi8KKworLyogSWYgT19OREVMQVkgd2FzIHVzZWQgZHVyaW5nIG9wZW4oKSwgdGhlbiByZW1v dmUgaXQgbm93LiAqLworCisjaWZkZWYgT19OREVMQVkKKyAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4g T19OREVMQVkiLCIiLDApOworICAgIGlmICh4bG9jYWwgPiAwKSB7CisgICAgICBpZiAoZmNudGwo dHR5ZmQsIEZfR0VURkwsIDApICYgT19OREVMQVkpIHsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gZmNu dGwgT19OREVMQVkiLCIiLDApOworI2lmbmRlZiBhZWdpcworCWlmIChmY250bCh0dHlmZCxGX1NF VEZMLCBmY250bCh0dHlmZCwgRl9HRVRGTCwgMCkgJiB+T19OREVMQVkpIDwgMCkgeworCSAgICBk ZWJ1ZyhGMTAwLCJ0dG9wZW4gZmNudGwgZmFpbHVyZSB0byB1bnNldCBPX05ERUxBWSIsIiIsMCk7 CisJICAgIHBlcnJvcigiQ2FuJ3QgdW5zZXQgT19OREVMQVkiKTsKKwl9CisjZW5kaWYgLyogYWVn aXMgKi8KKwkvKiBTb21lIHN5c3RlbXMsIG5vdGFibHkgWGVuaXggKGRvbid0IGtub3cgaG93IGNv bW1vbiB0aGlzIGlzIGluCisJICogb3RoZXIgc3lzdGVtcyksIG5lZWQgc3BlY2lhbCB0cmVhdG1l bnQgdG8gZ2V0IHJpZCBvZiB0aGUgT19OREVMQVkKKwkgKiBiZWhhdmlvdXIgb24gcmVhZCgpIHdp dGggcmVzcGVjdCB0byBjYXJyaWVyIHByZXNlbmNlIChpLmUuIHJlYWQoKQorCSAqIHJldHVybmlu ZyAwIHdoZW4gY2FycmllciBhYnNlbnQpLCBldmVuIHRob3VnaCB0aGUgYWJvdmUgZmNudGwoKQor CSAqIGlzIGVub3VnaCB0byBtYWtlIHJlYWQoKSB3YWl0IGZvciBpbnB1dCB3aGVuIGNhcnJpZXIg aXMgcHJlc2VudC4KKwkgKiBUaGlzIG1hZ2ljLCBpbiB0dXJuLCByZXF1aXJlcyBDTE9DQUwgZm9y IHdvcmtpbmcgd2hlbiB0aGUgY2FycmllcgorCSAqIGlzIGFic2VudC4gQnV0IGlmIHhsb2NhbCA9 PSAwLCBwcmVzdW1hYmx5IHlvdSBhbHJlYWR5IGhhdmUgQ0xPQ0FMCisJICogb3IgeW91IGhhdmUg YSBjYXJyaWVyLCBvdGhlcndpc2UgeW91IHdvdWxkbid0IGJlIHJ1bm5pbmcgdGhpcy4KKwkgKi8K KwlkZWJ1ZyhGMTAxLCJ0dG9wZW4geGxvY2FsIiwiIix4bG9jYWwpOworI2lmZGVmIEFUVFNWCisj aWZkZWYgQlNENDRPUlBPU0lYCisjaWZkZWYgQ09NTUVOVAkJCQkvKiAxMiBBdWcgMTk5NyAqLwor I2lmZGVmIF9fYnNkaV9fCisJaWYgKHhsb2NhbCkKKwkgIHR0cmF3LmNfY2ZsYWcgfD0gQ0xPQ0FM OworI2Vsc2UKKyNpZmRlZiBfX0ZyZWVCU0RfXworCWlmICh4bG9jYWwpCisJICB0dHJhdy5jX2Nm bGFnIHw9IENMT0NBTDsKKyNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLworI2VuZGlmIC8qIF9fYnNk aV9fICovCisjZWxzZSAvKiBOb3QgQ09NTUVOVCAqLworI2lmZGVmIENMT0NBTAorCWlmICh4bG9j YWwpCQkJLyogVW5zZXQgdGhpcyBpZiBpdCdzIGRlZmluZWQuICovCisJICB0dHJhdy5jX2NmbGFn IHw9IENMT0NBTDsKKyNlbmRpZiAvKiBDTE9DQUwgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJ ZGVidWcoRjEwMSwidHRvcGVuIEJTRDQ0T1JQT1NJWCBjYWxsaW5nIHRjc2V0YXR0ciIsIiIsVENT QURSQUlOKTsKKwlpZiAodGNzZXRhdHRyKHR0eWZkLCBUQ1NBRFJBSU4sICZ0dHJhdykgPCAwKSB7 CisJICAgIGRlYnVnKEYxMDAsInR0b3BlbiBQT1NJWCB0Y3NlYXR0ciBmYWlscyIsIiIsMCk7CisJ ICAgIHBlcnJvcigidGNzZXRhdHRyIik7CisJfQorI2Vsc2UgLyogIUJTRDQ0T1JQT1NJWCAqLwor CWlmICh4bG9jYWwpIHsKKwkgICAgdHRyYXcuY19jZmxhZyB8PSBDTE9DQUw7CisJICAgIGRlYnVn KEYxMDAsInR0b3BlbiBjYWxsaW5nIGlvY3RsKFRDU0VUQSkiLCIiLDApOworCSAgICBlcnJubyA9 IDA7CisJICAgIGlmIChpb2N0bCh0dHlmZCwgVENTRVRBLCAmdHRyYXcpIDwgMCkgeworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsInR0b3BlbiBpb2N0bChUQ1NFVEEpIGZhaWxzIiwiIixlcnJu byk7CisgICAgICAgICAgICAgICAgcGVycm9yKCJpb2N0bChUQ1NFVEEpIik7CisgICAgICAgICAg ICB9CisJfQorI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIEFUVFNWICovCisj aWZuZGVmIE5PQ09URk1DIC8qID0gTk8gQ2xvc2UoT3BlbigpKSBUbyBGb3JjZSBNb2RlIENoYW5n ZSAqLworLyogUmVwb3J0ZWRseSBsZXRzIHV1Z2V0dHkgZ3JhYiB0aGUgZGV2aWNlIGluIFNDTyBV TklYIDMuMiAvIFhFTklYIDIuMyAqLworCWRlYnVnKEYxMDAsInR0b3BlbiBleGVjdXRpbmcgY2xv c2Uvb3BlbiIsIiIsMCk7CisJY2xvc2UoIHByaXZfb3BuKGZuYW0sIE9fUkRXUikgKTsgLyogTWFn aWMgdG8gZm9yY2UgY2hhbmdlLiAqLworI2VuZGlmIC8qIE5PQ09URk1DICovCisgICAgICB9Cisg ICAgfQorI2VuZGlmIC8qIE9fTkRFTEFZICovCisKKy8qIEluc3RydWN0IHRoZSBzeXN0ZW0gaG93 IHRvIHRyZWF0IHRoZSBjYXJyaWVyLCBhbmQgc2V0IGEgZmV3IG90aGVyIHR0eQorICogcGFyYW1l dGVycy4KKyAqCisgKiBUaGlzIGFsc28gdW5kb2VzIHRoZSB0ZW1wb3Jhcnkgc2V0dGluZyBvZiBD TE9DQUwgdGhhdCBtYXkgaGF2ZSBiZWVuIGRvbmUKKyAqIGZvciB0aGUgY2xvc2Uob3BlbigpKSBh Ym92ZSAoZXhjZXB0IGluIFhlbml4KS4gIEFsc28gdGhyb3cgaW4gfkVDSE8sIHRvCisgKiBwcmV2 ZW50IHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmUgZnJvbSBzaXR0aW5nIHRoZXJlIHRhbGtpbmcg dG8gaXRzZWxmLAorICogcHJvZHVjaW5nIGdhcmJhZ2Ugd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBh IGNvbm5lY3QuCisgKgorICogU0NPIFhlbml4IHVuZm9ydHVuYXRlbHkgc2VlbXMgdG8gaWdub3Jl IHRoZSBhY3R1YWwgc3RhdGUgb2YgQ0xPQ0FMLgorICogTm93IGl0IHRoaW5rcyBDTE9DQUwgaXMg YWx3YXlzIG9uLiBJdCBzZWVtcyB0aGUgb25seSByZWFsIHNvbHV0aW9uIGZvcgorICogWGVuaXgg aXMgdG8gc3dpdGNoIGJldHdlZW4gdGhlIGxvd2VyIGFuZCB1cHBlciBjYXNlIGRldmljZSBuYW1l cy4KKyAqCisgKiBUaGlzIHNlY3Rpb24gbWF5IGF0IHNvbWUgZnV0dXJlIHRpbWUgZXhwYW5kIGlu dG8gc2V0dGluZyBhIGNvbXBsZXRlCisgKiBjb2xsZWN0aW9uIG9mIHR0eSBwYXJhbWV0ZXJzLCBv ciBjYWxsIGEgZnVuY3Rpb24gc2hhcmVkIHdpdGggdHRwa3QoKS8KKyAqIHR0dnQoKSB0aGF0IGRv ZXMgc28uICBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGluaXRpYWwgcGFyYW1ldGVycyBhcmUgbm90 CisgKiB0aGF0IGltcG9ydGFudCwgc2luY2UgdHRwa3QoKSBvciB0dHZ0KCkgc2hvdWxkIGFsd2F5 cyBmaXggdGhhdCBiZWZvcmUKKyAqIGFueSBjb21tdW5pY2F0aW9uIGlzIGRvbmUuICBXZWxsLCB3 ZSdsbCBzZWUuLi4KKyAqLworICAgIGlmICh4bG9jYWwpIHsKKyAgICAJY3VyY2FyciA9IC0yOwor CWRlYnVnKEYxMDAsInR0b3BlbiBjYWxsaW5nIGNhcnJjdGwiLCIiLDApOworCWNhcnJjdGwoJnR0 cmF3LCB0dGNhcnIgPT0gQ0FSX09OKTsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gY2FycmN0bCBvayIs IiIsMCk7CisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRpZiAvKiBD T0hFUkVOVCAqLworCisjaWZkZWYgU1ZPUlBPU0lYCisJdHRyYXcuY19sZmxhZyAmPSB+RUNITzsK Kwl0dG9sZC5jX2xmbGFnICY9IH5FQ0hPOworI2lmZGVmIEJTRDQ0T1JQT1NJWAorCXkgPSB0Y3Nl dGF0dHIodHR5ZmQsIFRDU0FEUkFJTiwgJnR0cmF3KTsKKwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGNz ZXRhdHRyIiwiIix5KTsKKyNlbHNlCisJeSA9IGlvY3RsKHR0eWZkLCBUQ1NFVEEsICZ0dHJhdyk7 CisJZGVidWcoRjEwMCwidHRvcGVuIGlvY3RsIiwiIix5KTsKKyNlbmRpZiAvKiBCU0Q0NE9SUE9T SVggKi8KKworI2Vsc2UgLyogQlNELCBldGMgKi8KKwl0dHJhdy5zZ19mbGFncyAmPSB+RUNITzsK Kwl0dG9sZC5zZ19mbGFncyAmPSB+RUNITzsKKyNpZmRlZiBCRUxMVjEwCisJeSA9IGlvY3RsKHR0 eWZkLFRJT0NTRVRQLCZ0dHJhdyk7CisJZGVidWcoRjEwMCwidHRvcGVuIGlvY3RsIiwiIix5KTsK KyNlbHNlCisJeSA9IHN0dHkodHR5ZmQsJnR0cmF3KTsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gc3R0 eSIsIiIseSk7CisjZW5kaWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwor CisjaWZkZWYgQ09IRVJFTlQKKyN1bmRlZiBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAq LworCisJLyogdHRmbHVpKCk7ICovICAvKiAgVGhpcyBmYWlscyBmb3Igc29tZSByZWFzb24uICAq LworICAgIH0KKworICAgIC8qIEdldCBjdXJyZW50IHNwZWVkICovCisKKyNpZm5kZWYgQkVCT1gK KyAgICB0dHNwZWVkID0gdHRnc3BkKCk7CisjZWxzZQorICAgIHR0c3BlZWQgPSAxOTIwMDsKKyNl bmRpZiAvKiAhQkVCT1ggKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHRzcGVlZCIsIiIsdHRz cGVlZCk7CisKKyAgICAvKiBEb25lLCBtYWtlIGVudHJpZXMgaW4gZGVidWcgbG9nLCByZXN0b3Jl IEN0cmwtQyB0cmFwLCBhbmQgcmV0dXJuLiAqLworCisgICAgZGVidWcoRjEwMSwidHRvcGVuIHR0 eWZkIiwiIix0dHlmZCk7CisgICAgZGVidWcoRjEwMSwidHRvcGVuICpsY2wiLCIiLCpsY2wpOwor ICAgIGRlYnVnKEYxMTEsInR0b3BlbiBsb2NrIGZpbGUiLGZsZm5hbSxsa2YpOworICAgIHNpZ25h bChTSUdJTlQsb2NjdCk7CisgICAgc2lnaW50X2lnbiA9IChvY2N0ID09IFNJR19JR04pID8gMSA6 IDA7CisgICAgZ290c2lncyA9IDA7CisgICAgcmV0dXJuKDApOworfQorCisKKy8qICBEIE8gXyBP IFAgRSBOICAtLSAgRG8gdGhlIHJpZ2h0IGtpbmQgb2Ygb3BlbigpIGNhbGwgZm9yIHRoZSB0dHku ICovCisKK2ludAorZG9fb3Blbih0dG5hbWUpIGNoYXIgKnR0bmFtZTsgeworICAgIGludCBmbGFn czsKKworI2lmZGVmIFFOWDYKKyAgICAvKiBPX05PTkJMT0NLIG9uIC9kZXYvdHR5IG1ha2VzIG9w ZW4oKSBmYWlsICovCisgICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwgT19SRFdSIHwKKwkJICAg ICgKKwkJICAgICAoKGludClzdHJjbXAodHRuYW1lLCIvZGV2L3R0eSIpID09IDApID8KKwkJICAg ICAwIDoKKwkJICAgICAodHRjYXJyICE9IENBUl9PTikgPyBPX05PTkJMT0NLIDogMCkKKwkJICAg ICkKKwkgICApOyAKKyNlbHNlICAvKiAhUU5YNiAqLworCisjaWZuZGVmCU9fTkRFTEFZCQkJLyog T19OREVMQVkgbm90IGRlZmluZWQgKi8KKyAgICByZXR1cm4ocHJpdl9vcG4odHRuYW1lLDIpKTsK KyNlbHNlCQkJCQkvKiBPX05ERUxBWSBkZWZpbmVkICovCisKKyNpZmRlZiBBVFQ3MzAwCisvKgor IE9wZW4gY29tbXMgbGluZSB3aXRob3V0IHdhaXRpbmcgZm9yIGNhcnJpZXIgc28gaW5pdGlhbCBj YWxsIGRvZXMgbm90IGhhbmcKKyBiZWNhdXNlIHN0YXRlIG9mICJtb2RlbSIgaXMgbGlrZWx5IHVu a25vd24gYXQgdGhlIGluaXRpYWwgY2FsbCAgLWpyZC4KKyBJZiB0aGlzIGlzIG5lZWRlZCBmb3Ig dGhlIGdldHR5IHN0dWZmIHRvIHdvcmssIGFuZCB0aGUgb3BlbiB3b3VsZCBub3Qgd29yaworIHdp dGhvdXQgT19OREVMQVkgd2hlbiBnZXR0eSBpcyBzdGlsbCBvbiwgdGhlbiB0aGlzIHNwZWNpYWwg Y2FzZSBpcyBvay4KKyBPdGhlcndpc2UsIGdldCByaWQgb2YgaXQuIC1za2UKKyovCisgICAgcmV0 dXJuKHByaXZfb3BuKHR0bmFtZSwgT19SRFdSIHwgT19OREVMQVkpKTsKKworI2Vsc2UJLyogIUFU VDczMDAgKi8KKworICAgIC8qIE5vcm1hbCBjYXNlLiBVc2UgT19OREVMQVkgYWNjb3JkaW5nIHRv IFNFVCBDQVJSSUVSLiBTZWUgdHRzY2FycigpLiAqLworICAgIGZsYWdzID0gT19SRFdSOworICAg IGRlYnVnKEYxMDEsImRvX29wZW4geGxvY2FsIiwiIix4bG9jYWwpOworICAgIGRlYnVnKEYxMTEs ImRvX29wZW4gZmxhZ3MgQSIsdHRuYW1lLGZsYWdzKTsKKyAgICBpZiAoeGxvY2FsICYmICh0dGNh cnIgIT0gQ0FSX09OKSkKKyAgICAgIGZsYWdzIHw9IE9fTkRFTEFZOworICAgIGRlYnVnKEYxMTEs ImRvX29wZW4gZmxhZ3MgQiIsdHRuYW1lLGZsYWdzKTsKKyAgICByZXR1cm4ocHJpdl9vcG4odHRu YW1lLCBmbGFncykpOworI2VuZGlmIC8qICFBVFQ3MzAwICovCisjZW5kaWYgLyogT19OREVMQVkg Ki8KKyNlbmRpZiAvKiBRTlg2ICovCit9CisKKy8qICBUIFQgQyBMIE8gUyAgLS0gIENsb3NlIHRo ZSBUVFksIHJlbGVhc2luZyBhbnkgbG9jay4gICovCisKK3N0YXRpYyBpbnQgdHRjX3N0YXRlID0g MDsJCS8qIHR0Y2xvc2UoKSBzdGF0ZSAqLworc3RhdGljIGNoYXIgKiB0dGNfbmFtW10gPSB7ICJz ZXR1cCIsICJoYW5ndXAiLCAicmVzZXQiLCAiY2xvc2UiIH07CisKK2ludAordHRjbG9zKGZvbykg aW50IGZvbzsgewkJCS8qIEFyZyByZXEnZCBmb3Igc2lnbmFsKCkgcHJvdG90eXBlICovCisgICAg aW50IHh4LCB4ID0gMDsKKyAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7CisKKyAgICBkZWJ1ZyhG MTAxLCJ0dGNsb3MgdHR5ZmQiLCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgbmV0 Y29ubiIsIiIsbmV0Y29ubik7CisgICAgZGVidWcoRjEwMSwidHRjbG9zIHhsb2NhbCIsIiIseGxv Y2FsKTsKKyNpZmRlZiBOT0ZEWkVSTworICAgIGRlYnVnKEYxMDAsInR0Y2xvcyBOT0ZEWkVSTyIs IiIsMCk7CisjZW5kaWYgLyogTk9GRFpFUk8gKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBU VExFQlVGCisgICAgbGVfaW5pdCgpOwkJCQkvKiBObyBuZWVkIGZvciBhbnkgb2YgdGhpcyAqLwor I2VuZGlmIC8qIFRUTEVCVUYgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBpZiAodHR5 ZmQgPCAwKQkJCS8qIFdhc24ndCBvcGVuLiAqLworICAgICAgcmV0dXJuKDApOworCisgICAgaWYg KHR0ZmRmbGcpCQkJLyogSWYgd2UgaW5oZXJpdGVkIHR0eWZkIGZyb20gKi8KKyAgICAgIHJldHVy bigwKTsJCQkvKiBhbm90aGVyIHByb2Nlc3MsIGRvbid0IGNsb3NlIGl0LiAqLworCisgICAgdHZ0 ZmxnID0gMDsJCQkJLyogKHNvbWUgZGF5IGdldCByaWQgb2YgdGhpcy4uLikgKi8KKyAgICBnb3Rz aWdzID0gMDsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsKKyNpZmRlZiBUTkNP REUKKyAgICAgICAgICB0bl9wdXNoKCk7ICAgICAgICAgICAgICAgICAgICAvKiBQbGFjZSBhbnkg d2FpdGluZyBkYXRhIGludG8gaW5wdXQqLworICAgICAgICAgIHRuX3NvcHQoRE8sVEVMT1BUX0xP R09VVCk7ICAgIC8qIFNlbmQgTE9HT1VUIG9wdGlvbiBiZWZvcmUgY2xvc2UgKi8KKyAgICAgICAg ICBURUxPUFRfVU5BTlNXRVJFRF9ETyhURUxPUFRfTE9HT1VUKSA9IDE7CisgICAgICAgICAgdG5f cmVzZXQoKTsgICAgICAgICAgICAgICAgICAgLyogVGhlIFJlc2V0IFRlbG5ldCBPcHRpb24gdGFi bGUuICAqLworI2VuZGlmIC8qIFROQ09ERSAqLworI2lmZGVmIENLX1NTTAorCSAgaWYgKHNzbF9h Y3RpdmVfZmxhZykgeworCSAgICAgIGlmIChzc2xfZGVidWdfZmxhZykKKwkJQklPX3ByaW50Zihi aW9fZXJyLCJjYWxsaW5nIFNTTF9zaHV0ZG93bihzc2wpXG4iKTsKKwkgICAgICBTU0xfc2h1dGRv d24oc3NsX2Nvbik7CisJICAgICAgU1NMX2ZyZWUoc3NsX2Nvbik7CisJICAgICAgc3NsX2NvbiA9 IE5VTEw7CisJICAgICAgc3NsX2FjdGl2ZV9mbGFnID0gMDsKKwkgIH0KKwkgIGlmICh0bHNfYWN0 aXZlX2ZsYWcpIHsKKwkgICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisJCUJJT19wcmludGYoYmlv X2VyciwiY2FsbGluZyBTU0xfc2h1dGRvd24odGxzKVxuIik7CisJICAgICAgU1NMX3NodXRkb3du KHRsc19jb24pOworCSAgICAgIFNTTF9mcmVlKHRsc19jb24pOworCSAgICAgIHRsc19jb24gPSBO VUxMOworCSAgICAgIHRsc19hY3RpdmVfZmxhZyA9IDA7CisJICB9CisjZW5kaWYgLyogQ0tfU1NM ICovCisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRw aXBlKSB7CQkJLyogV2UndmUgYmVlbiB1c2luZyBhIHBpcGUgKi8KKwkvKiB0dHBpcGUgPSAwOyAq LworCWlmICh0dHBpZCA+IDApIHsKKwkgICAgaW50IHdzdGF0OworCSAgICBpbnQgc3RhdHVzcDsK KwkgICAgY2xvc2UoZmRpbik7CQkvKiBDbG9zZSB0aGVzZS4gKi8KKwkgICAgY2xvc2UoZmRvdXQp OworCSAgICBmZGluID0gZmRvdXQgPSAtMTsKKwkgICAga2lsbCh0dHBpZCwxKTsJCS8qIEtpbGwg Zm9yayB3aXRoIFNJR0hVUCAqLworCSAgICB3aGlsZSAoMSkgeworCQl3c3RhdCA9IHdhaXQoJnN0 YXR1c3ApOworCQlpZiAod3N0YXQgPT0gdHRwaWQgfHwgd3N0YXQgPT0gLTEpCisJCSAgYnJlYWs7 CisJCXBleGl0c3RhdCA9IChzdGF0dXNwICYgMHhmZikgPyBzdGF0dXNwIDogc3RhdHVzcCA+PiA4 OworCSAgICB9CisJICAgIHR0cGlkID0gMDsKKwl9CisJbmV0Y29ubiA9IDA7CisJd2FzY2xvc2Vk ID0gMTsKKwl0dHlmZCA9IC0xOworCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogTkVUQ01E ICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSB7CisjaWZuZGVmIE5PRE9QVFkKKyAg ICAgICAgZW5kX3B0eSgpOworI2VuZGlmIC8qIE5PRE9QVFkgKi8KKyAgICAgICAgY2xvc2UodHR5 ZmQpOworCW5ldGNvbm4gPSAwOworCXdhc2Nsb3NlZCA9IDE7CisgICAgICAgIHR0cHR5ID0gMDsK KyAgICAgICAgdHR5ZmQgPSAtMTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNlbmRpZiAv KiBORVRQVFkgKi8KKworI2lmZGVmCU5FVENPTk4KKyAgICBpZiAobmV0Y29ubikgewkJCS8qIElm IGl0J3MgYSBuZXR3b3JrIGNvbm5lY3Rpb24uICovCisJZGVidWcoRjEwMCwidHRjbG9zIGNsb3Np bmcgbmV0IiwiIiwwKTsKKwluZXRjbG9zKCk7CQkJLyogTGV0IHRoZSBuZXR3b3JrIG1vZHVsZSBj bG9zZSBpdC4gKi8KKwluZXRjb25uID0gMDsJCQkvKiBObyBtb3JlIG5ldHdvcmsgY29ubmVjdGlv bi4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dGNsb3MgdHR5ZmQgYWZ0ZXIgbmV0Y2xvcyIsIiIsdHR5ZmQp OyAvKiBTaG91bGQgYmUgLTEgKi8KKwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlmCS8qIE5FVENP Tk4gKi8KKworICAgIGlmICh4bG9jYWwpIHsJCQkvKiBXZSdyZSBjbG9zaW5nIGEgU0VUIExJTkUg ZGV2aWNlICovCisjaWZkZWYgRlQyMQkJCQkvKiBGb3J0dW5lIDIuMS1zcGVjaWZpYyBpdGVtcyAu Li4gKi8KKwlpb2N0bCh0dHlmZCxUSU9DSFBDTCwgTlVMTCk7CisjZW5kaWYgLyogRlQyMSAqLwor I2lmZGVmIHVsdHJpeAkJCQkvKiBVbHRyaXgtc3BlY2lmaWMgaXRlbXMgLi4uICovCisjaWZkZWYg VElPQ1NJTlVTRQorCS8qIFVuc2V0IHRoZSBJTlVTRSBmbGFnIHRoYXQgd2Ugc2V0IGluIHR0b3Bl bigpICovCisJaW9jdGwodHR5ZmQsIFRJT0NTSU5VU0UsIE5VTEwpOworI2VuZGlmIC8qIFRJT0NT SU5VU0UgKi8KKwlpb2N0bCh0dHlmZCwgVElPQ05NT0RFTSwgJngpOworI2lmZGVmIENPTU1FTlQK KwkvKiBXaGF0IHdhcyB0aGlzPyAqLworCWlvY3RsKHR0eWZkLCBUSU9DTkNBUiwgTlVMTCk7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworICAgIH0KKworICAgIC8q IFRoaXMgaXMgdG8gcHJldmVudCB1cyBmcm9tIHN0aWNraW5nIGluIHR0aGFuZygpIG9yIGNsb3Nl KCkuICovCisKKyNpZmRlZiBPX05ERUxBWQorI2lmbmRlZiBhZWdpcworICAgIGlmICh0dHlmZCA+ IDApIHsJCQkvKiBCdXQgc2tpcCBpdCBvbiBzdGRpbi4gKi8KKwlkZWJ1ZyhGMTAwLCJ0dGNsb3Mg c2V0dGluZyBPX05ERUxBWSIsIiIsMCk7CisJeCA9IGZjbnRsKHR0eWZkLEZfU0VURkwsZmNudGwo dHR5ZmQsRl9HRVRGTCwgMCl8T19OREVMQVkpOworI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZyAm JiB4ID09IC0xKSB7CisJICAgIHBlcnJvcigiV2FybmluZyAtIENhbid0IHNldCBPX05ERUxBWSIp OworCSAgICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgZmNudGwgZmFpbHVyZSB0byBzZXQgT19OREVMQVki LCIiLHgpOworCX0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIH0KKyNlbmRpZiAvKiBhZWdpcyAq LworI2VuZGlmIC8qIE9fTkRFTEFZICovCisKKyAgICB4ID0gMDsKKyAgICB0dGNfc3RhdGUgPSAw OworICAgIGlmICh4bG9jYWwKKyNpZmRlZiBOT0ZEWkVSTworCXx8IHR0eWZkID4gMAorI2VuZGlm IC8qIE5PRkRaRVJPICovCisJKSB7CisJc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsg LyogRW5hYmxlIHRpbWVyIGludGVycnVwdC4gKi8KKwl4eCA9IGFsYXJtKDgpOwkJCS8qIEFsbG93 IDggc2Vjb25kcy4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dGNsb3MgYWxhcm0iLCIiLHh4KTsKKwlpZiAo CisjaWZkZWYgQ0tfUE9TSVhfU0lHCisJICAgIHNpZ3NldGptcChzamJ1ZiwxKQorI2Vsc2UKKwkg ICAgc2V0am1wKHNqYnVmKQorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCSAgICApIHsJCQkJ LyogVGltZXIgd2VudCBvZmY/ICovCisJICAgIHggPSAtMTsKKyNpZmRlZiBERUJVRworCSAgICBk ZWJ1ZyhGMTExLCJ0dGNsb3MgQUxBUk0gVFJBUCBlcnJubyIsY2tpdG9hKHR0Y19zdGF0ZSksZXJy bm8pOworCSAgICBwcmludGYoInR0Y2xvcygpIHRpbWVvdXQ6ICVzXG4iLCB0dGNfbmFtW3R0Y19z dGF0ZV0pOworI2VuZGlmIC8qIERFQlVHICovCisJfQorCS8qIEhhbmcgdXAgdGhlIGRldmljZSAo ZHJvcCBEVFIpICovCisKKwllcnJubyA9IDA7CisJZGVidWcoRjExMSwidHRjbG9zIEEiLGNraXRv YSh4KSx0dGNfc3RhdGUpOworCWlmICh0dGNfc3RhdGUgPCAxKSB7CisJICAgIHR0Y19zdGF0ZSA9 IDE7CisJICAgIGRlYnVnKEYxMDEsInR0Y2xvcyBleGl0aGFuZ3VwIiwiIixleGl0aGFuZ3VwKTsK KwkgICAgaWYgKGV4aXRoYW5ndXApIHsKKwkJYWxhcm0oOCk7CQkvKiBSZS1hcm0gdGhlIHRpbWVy ICovCisJCWRlYnVnKEYxMDEsInR0Y2xvcyBjYWxsaW5nIHR0aGFuZygpIiwiIix4KTsKKwkJeCA9 IHR0aGFuZygpOwkJLyogSGFuZyB1cCBmaXJzdCwgdGhlbi4uLiAqLworCQlkZWJ1ZyhGMTAxLCJ0 dGNsb3MgdHRoYW5nKCkiLCIiLHgpOworCSAgICB9CisjaWZuZGVmIENLX05PSFVQQ0wKKy8qCisg IE9jdCAyMDA2IC0gTGVhdmUgRFRSIG9uIGlmIFNFVCBFWElUIEhBTkdVUCBPRkYuCisgIFN1Z2dl c3RlZCBieSBTb2V3b25vIEVmZmVuZGkuCisqLworI2lmZGVmIEhVUENMCisJICAgIGVsc2Ugewor CQl0dG9sZC5jX2NmbGFnICY9IH5IVVBDTDsgLyogTGV0J3Mgc2VlIGhvdyB0aGlzIHRyYXZlbHMg Ki8KKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKwkJdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnR0b2xk KTsKKyNlbHNlIC8qICFCU0Q0NE9SUE9TSVggKi8KKyNpZmRlZiBBVFRTVgorCQlpb2N0bCh0dHlm ZCxUQ1NFVEFXLCZ0dG9sZCk7CQkKKyNlbHNlICAvKiAhQVRUU1YgKi8KKwkJc3R0eSh0dHlmZCwm dHRvbGQpOworI2VuZGlmCS8qIEFUVFNWICovCisjZW5kaWYJLyogQlNENDRPUlBPU0lYICovCisJ ICAgIH0KKyNlbmRpZgkvKiBIVVBDTCAqLworI2VuZGlmCS8qIENLX05PSFVQQ0wgKi8KKwl9CisJ LyogUHV0IGJhY2sgZGV2aWNlIG1vZGVzIGFzIHdlIGZvdW5kIHRoZW0gKi8KKworCWVycm5vID0g MDsKKwlkZWJ1ZyhGMTExLCJ0dGNsb3MgQiIsY2tpdG9hKHgpLHR0Y19zdGF0ZSk7CisJaWYgKHR0 Y19zdGF0ZSA8IDIpIHsKKwkgICAgdHRjX3N0YXRlID0gMjsKKwkgICAgLyogRG9uJ3QgdHJ5IHRv IG1lc3Mgd2l0aCB0dHkgbW9kZXMgaWYgdHRoYW5nIGZhaWxlZCgpICovCisJICAgIC8qIHNpbmNl IGl0IHByb2JhYmx5IHdvbid0IHdvcmsuICovCisJICAgIGlmICh4ID4gLTEpIHsKKwkJZGVidWco RjEwMSwidHRjbG9zIGNhbGxpbmcgdHRyZXMoKSIsIiIseCk7CisJCXNpZ25hbChTSUdBTFJNLHh0 aW1lcmgpOyAvKiBSZS1lbmFibGUgdGhlIGFsYXJtLiAqLworCQlhbGFybSg4KTsJCS8qIFJlLWFy bSB0aGUgdGltZXIgKi8KKwkJeCA9IHR0cmVzKCk7CQkvKiBSZXNldCBkZXZpY2UgbW9kZXMuICov CisJCWRlYnVnKEYxMDEsInR0Y2xvcyB0dHJlcygpIiwiIix4KTsKKwkJYWxhcm0oMCk7CisJICAg IH0KKwl9CisJLyogQ2xvc2UgdGhlIGRldmljZSAqLworCisJZXJybm8gPSAwOworCWRlYnVnKEYx MDEsInR0Y2xvcyBDIiwiIix0dGNfc3RhdGUpOworCWlmICh0dGNfc3RhdGUgPCAzKSB7CisJICAg IHR0Y19zdGF0ZSA9IDM7CisJICAgIGVycm5vID0gMDsKKwkgICAgZGVidWcoRjEwMSwidHRjbG9z IGNhbGxpbmcgY2xvc2UiLCIiLHgpOworCSAgICBzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsJLyog UmUtZW5hYmxlIGFsYXJtLiAqLworCSAgICBhbGFybSg4KTsJCQkvKiBSZS1hcm0gdGhlIHRpbWVy ICovCisJICAgIHggPSBjbG9zZSh0dHlmZCk7CQkvKiBDbG9zZSB0aGUgZGV2aWNlLiAqLworCSAg ICBkZWJ1ZyhGMTAxLCJ0dGNsb3MgY2xvc2UoKSIsIiIseCk7CisJICAgIGlmICh4ID4gLTEpCisJ ICAgICAgdHRjX3N0YXRlID0gMzsKKwl9CisJZGVidWcoRjEwMSwidHRjbG9zIEQiLCIiLHR0Y19z dGF0ZSk7CisJdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyLiAqLworCWlmICh4IDwgMCkg eworCSAgICBwcmludGYoIj9XQVJOSU5HIC0gY2xvc2UgZmFpbGVkOiAlc1xuIix0dG5tc3YpOwor I2lmZGVmIERFQlVHCisJICAgIGlmIChkZWJsb2cpIHsKKwkJcHJpbnRmKCJlcnJubyA9ICVkXG4i LCBlcnJubyk7CisJCWRlYnVnKEYxMDEsInR0Y2xvcyBmYWlsZWQiLCIiLGVycm5vKTsKKwkgICAg fQorI2VuZGlmIC8qIERFQlVHICovCisJfQorCS8qIFVubG9jayBhZnRlciBjbG9zaW5nIGJ1dCBi ZWZvcmUgYW55IGdldHR5IG11bWJvIGp1bWJvICovCisKKwlkZWJ1ZyhGMTAwLCJ0dGNsb3MgYWJv dXQgdG8gY2FsbCB0dHVubGNrIiwiIiwwKTsKKyAgICAgICAgaWYgKHR0dW5sY2soKSkgICAgICAg ICAgICAgICAgICAvKiBSZWxlYXNlIHV1Y3Atc3R5bGUgbG9jayAqLworCSAgZnByaW50ZihzdGRl cnIsIldhcm5pbmcsIHByb2JsZW0gcmVsZWFzaW5nIGxvY2tcclxuIik7CisgICAgfQorCisvKiBG b3IgYmlkaXJlY3Rpb25hbCBsaW5lcywgcmVzdG9yZSBnZXR0eSBpZiBpdCB3YXMgdGhlcmUgYmVm b3JlLiAqLworCisjaWZkZWYgQUNVQ05UUkwJCQkJLyogNC4zQlNEIGFjdWNudHJsKCkgbWV0aG9k LiAqLworICAgIGlmICh4bG9jYWwpIHsKKwlkZWJ1ZyhGMTAwLCJ0dGNsb3MgQUNVQ05UUkwiLCIi LDApOworCWFjdWNudHJsKCJlbmFibGUiLHR0bm1zdik7CS8qIEVuYWJsZSBnZXR0eSBvbiB0aGUg ZGV2aWNlLiAqLworICAgIH0KKyNlbHNlCisjaWZkZWYgQVRUNzMwMAkJCQkvKiBBVFQgVU5JWCBQ QyAoM0IxLCA3MzAwKSBtZXRob2QuICovCisgICAgaWYgKHhsb2NhbCkgeworCWRlYnVnKEYxMDAs InR0Y2xvcyBBVFQ3MzAwIG9uZ2V0dHkiLCIiLDApOworCWlmIChhdHRtb2RlbSAmIERPR0VUWSkJ CS8qIFdhcyBnZXR0eSgxbSkgcnVubmluZyBiZWZvcmUgdXM/ICovCisJICBvbmdldHR5KHR0bm1z dik7CQkvKiBZZXMsIHJlc3RhcnQgZ2V0dHkgb24gdHR5IGxpbmUgKi8KKwlhdHRtb2RlbSAmPSB+ RE9HRVRZOwkJLyogTm8gcGhvbmUgaW4gdXNlLCBnZXR0eSByZXN0b3JlZCAqLworICAgIH0KKyNl bmRpZiAvKiBBVFQ3MzAwICovCisjZW5kaWYgLyogU3lzdGVtLWRlcGVuZGVudCBnZXR0eS1yZXN0 b3JpbmcgbWV0aG9kcyAqLworCisjaWZkZWYgc29ueV9uZXdzCisgICAga21fZXh0ID0gLTE7CQkJ LyogSW52YWxpZGF0ZSBkZXZpY2UncyBLYW5qaS1tb2RlICovCisjZW5kaWYgLyogc29ueV9uZXdz ICovCisKKyAgICB0dHlmZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnZhbGlk YXRlIHRoZSBmaWxlIGRlc2NyaXB0b3IuICovCisgICAgd2FzY2xvc2VkID0gMTsKKyAgICBkZWJ1 ZyhGMTAwLCJ0dGNsb3MgZG9uZSIsIiIsMCk7CisgICAgcmV0dXJuKDApOworfQorCisvKiAgVCBU IEggQSBOIEcgIC0tICBIYW5ndXAgcGhvbmUgbGluZSBvciBuZXR3b3JrIGNvbm5lY3Rpb24uICAq LworLyoKKyAgUmV0dXJuczoKKyAgMCBpZiBpdCBkb2VzIG5vdGhpbmcuCisgIDEgaWYgaXQgYmVs aWV2ZXMgdGhhdCBpdCBodW5nIHVwIHN1Y2Nlc3NmdWxseS4KKyAtMSBpZiBpdCBiZWxpZXZlcyB0 aGF0IHRoZSBoYW5ndXAgYXR0ZW1wdCBmYWlsZWQuCisqLworCisjZGVmaW5lIEhVUFRJTUUgNTAw CQkJLyogTWlsbGlzZWNvbmRzIGZvciBoYW5ndXAgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIFRo ZSBmb2xsb3dpbmcgZGlkbid0IHdvcmsgYnV0IFRJT0NTRFRSIGRvZXMgd29yayAqLworI2lmZGVm IFVOSVhXQVJFCisvKiBEZWZpbmUgSFVQX1BPU0lYIHRvIGZvcmNlIG5vbi1QT1NJWCBidWlsZHMg dG8gdXNlIHRoZSBQT1NJWCBoYW5ndXAgbWV0aG9kICovCisjaWZuZGVmIFBPU0lYCQkJCS8qIFN1 Y2ggYXMgVW5peHdhcmUgMS54LCAyLnggKi8KKyNpZm5kZWYgSFVQX1BPU0lYCisjZGVmaW5lIEhV UF9QT1NJWAorI2VuZGlmIC8qIEhVUF9QT1NJWCAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5k aWYgLyogVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgVVNFX1RJ T0NTRFRSCisjaWZkZWYgX19OZXRCU0RfXworLyogQmVjYXVzZSB0aGUgUE9TSVggbWV0aG9kIChz ZXQgb3V0cHV0IHNwZWVkIHRvIDApIGRvZXNuJ3Qgd29yayBpbiBOZXRCU0QgKi8KKyNpZmRlZiBU SU9DU0RUUgorI2lmZGVmIFRJT0NDRFRSCisjZGVmaW5lIFVTRV9USU9DU0RUUgorI2VuZGlmIC8q IFRJT0NDRFRSICovCisjZW5kaWYgLyogVElPQ1NEVFIgKi8KKyNlbmRpZiAvKiBfX05ldEJTRF9f ICovCisjZW5kaWYgLyogVVNFX1RJT0NTRFRSICovCisKKyNpZm5kZWYgSFVQX0NMT1NFX1BPU0lY CisjaWZkZWYgT1U4CisjZGVmaW5lIEhVUF9DTE9TRV9QT1NJWAorI2Vsc2UKKyNpZmRlZiBDS19T Q09WNQorI2RlZmluZSBIVVBfQ0xPU0VfUE9TSVgKKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2Vu ZGlmIC8qIE9VOCAqLworI2VuZGlmIC8qIEhVUF9DTE9TRV9QT1NJWCAqLworCisjaWZkZWYgTk9f SFVQX0NMT1NFX1BPU0lYCisjaWZkZWYgSFVQX0NMT1NFX1BPU0lYCisjdW5kZWYgSFVQX0NMT1NF X1BPU0lYCisjZW5kaWYgLyogSFVQX0NMT1NFX1BPU0lYICovCisjZW5kaWYgLyogTk9fSFVQX0NM T1NFX1BPU0lYICovCisKK2ludAordHRoYW5nKCkgeworI2lmZGVmIE5PTE9DQUwKKyAgICByZXR1 cm4oMCk7CisjZWxzZQorICAgIGludCB4ID0gMDsJCQkJLyogU29tZXRpbWVzIHVzZWQgYXMgcmV0 dXJuIGNvZGUuICovCisjaWZuZGVmIFBPU0lYCisgICAgaW50IHo7CQkJCS8qIHdvcmtlciAqLwor I2VuZGlmIC8qIFBPU0lYICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgK KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYgU1ZPUlBPU0lYCQkJLyogQVQmVCwgUE9T SVgsIEhQVVggZGVjbGFyYXRpb25zLiAqLworICAgIGludCBzcGRzYXY7CQkJCS8qIGZvciBzYXZp bmcgc3BlZWQgKi8KKyNpZmRlZiBIVVBfUE9TSVgKKyAgICBpbnQgc3Bkc2F2aTsKKyNlbHNlCisj aWZkZWYgQlNENDRPUlBPU0lYCisgICAgaW50IHNwZHNhdmk7CisjZW5kaWYgLyogQlNENDRPUlBP U0lYICovCisjZW5kaWYgLyogSFVQX1BPU0lYICovCisjaWZkZWYgSFBVWAorLyoKKyAgRWFybHkg dmVyc2lvbnMgb2YgSFAtVVggb21pdHRlZCB0aGUgbWZsYWcgdHlwZWRlZi4gIElmIHlvdSBnZXQg Y29tcGxhaW50cworICBhYm91dCBpdCwganVzdCBjaGFuZ2UgaXQgdG8gbG9uZyAob3IgYmV0dGVy IHN0aWxsLCB1bnNpZ25lZCBsb25nKS4KKyovCisgICAgbWZsYWcKKyAgICAgIGR0cl9kb3duID0g MDAwMDAwMDAwMDAsCisgICAgICBtb2RlbV9ydG4sCisgICAgICBtb2RlbV9zYXY7CisgICAgY2hh ciBtb2RlbV9zdGF0ZVs2NF07CisjZW5kaWYgLyogSFBVWCAqLworICAgIGludCBmbGFnczsJCQkJ LyogZmNudGwgZmxhZ3MgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCB0dGNfc2F2ZTsKKyNlbmRpZiAv KiBTVk9SUE9TSVggKi8KKworICAgIGlmICh0dHlmZCA8IDApIHJldHVybigwKTsgICAgICAgICAg IC8qIERvbid0IGRvIHRoaXMgaWYgbm90IG9wZW4gICovCisgICAgaWYgKHhsb2NhbCA8IDEpIHJl dHVybigwKTsJCS8qIERvbid0IGRvIHRoaXMgaWYgbm90IGxvY2FsICovCisKKyNpZmRlZiBORVRD TUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgcmV0dXJuKCh0dGNsb3MoMCkgPCAwKSA/IC0xIDog MSk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KQor ICAgICAgcmV0dXJuKCh0dGNsb3MoMCkgPCAwKSA/IC0xIDogMSk7CisjZW5kaWYgLyogTkVUUFRZ ICovCisjaWZkZWYgTkVUQ09OTgorICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0d29yayBjb25u ZWN0aW9uLiAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkp IHsKKyAgICAgICAgICAgIGludCByYyA9IHRuY19zZXRfZHRyX3N0YXRlKDApOworICAgICAgICAg ICAgaWYgKHJjID49IDApIHsKKyAgICAgICAgICAgICAgICBtc2xlZXAoSFVQVElNRSk7CisgICAg ICAgICAgICAgICAgcmMgPSB0bmNfc2V0X2R0cl9zdGF0ZSgxKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHJldHVybihyYyA+PSAwID8gMSA6IC0xKTsKKyAgICAgICAgfSBlbHNlCisjZW5k aWYgLyogVE5fQ09NUE9SVCAqLworCSAgcmV0dXJuKChuZXRjbG9zKCkgPCAwKSA/IC0xIDogMSk7 IC8qIEp1c3QgY2xvc2UgaXQuICovCisgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKy8qIEZy b20gaGVyZSBkb3duLCB3ZSBoYW5kbGUgcmVhbCB0dHkgZGV2aWNlcy4gKi8KKyNpZmRlZiBIVVBf UE9TSVgKKy8qCisgIGUuZy4gZm9yIFVuaXh3YXJlIDIsIHdoZXJlIHdlIGRvbid0IGhhdmUgYSBm dWxsIFBPU0lYIGJ1aWxkLCB3ZQorICBzdGlsbCBoYXZlIHRvIHVzZSBQT1NJWC1zdHlsZSBoYW5n dXAuICBUaHVzIHRoZSBkdXBsaWNhdGlvbiBvZiB0aGlzCisgIGFuZCB0aGUgbmV4dCBjYXNlLCB0 aGUgb25seSBkaWZmZXJlbmNlIGJlaW5nIHdlIHVzZSBhIGxvY2FsIHRlcm1pb3MKKyAgc3RydWN0 IGhlcmUsIHNpbmNlIGEgZGlmZmVyZW50IG1vZGVsIGlzIHVzZWQgZWxzZXdoZXJlLgorCisgIE5P IExPTkdFUiBVU0VEIGFzIG9mIEMtS2VybWl0IDguMCAtLSBpdCB0dXJucyBvdXQgdGhhdCB0aGlz IG1ldGhvZCwKKyAgZXZlbiB0aG91Z2ggaXQgY29tcGlsZXMgYW5kIGV4ZWN1dGVzIHdpdGhvdXQg ZXJyb3IsIGRvZXNuJ3QgYWN0dWFsbHkKKyAgd29yayAoaS5lLiBEVFIgZG9lcyBub3QgZHJvcCks IHdoZXJlYXMgdGhlIFRJT0NTRFRSIG1ldGhvZCB3b3JrcyBqdXN0IGZpbmUsCisqLworICAgIHsK KwlzdHJ1Y3QgdGVybWlvcyB0dGN1cjsKKwlpbnQgeDsKKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFVQ X1BPU0lYIHN0eWxlIiwiIiwwKTsKKwl4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBH ZXQgY3VycmVudCBhdHRyaWJ1dGVzICovCisJZGVidWcoRjExMSwidHRoYW5nIHRjZ2V0YXR0ciIs Y2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJc3Bkc2F2ID0gY2Zn ZXRvc3BlZWQoJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKwlkZWJ1ZyhGMTExLCJ0 dGhhbmcgY2ZnZXRvc3BlZWQiLGNraXRvYShlcnJubyksc3Bkc2F2KTsKKwlzcGRzYXZpID0gY2Zn ZXRpc3BlZWQoJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKwlkZWJ1ZyhGMTExLCJ0 dGhhbmcgY2ZnZXRpc3BlZWQiLGNraXRvYShlcnJubyksc3Bkc2F2aSk7CisJeCA9IGNmc2V0b3Nw ZWVkKCZ0dGN1cixCMCk7CS8qIFJlcGxhY2UgYnkgMCAqLworCWRlYnVnKEYxMTEsInR0aGFuZyBj ZnNldG9zcGVlZCIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJ eCA9IGNmc2V0aXNwZWVkKCZ0dGN1cixCMCk7CisJZGVidWcoRjExMSwidHRoYW5nIGNmc2V0aXNw ZWVkIixja2l0b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwl4ID0gdGNz ZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVnKEYxMTEsInR0aGFuZyB0Y3Nl dGF0dHIgQjAiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCW1z bGVlcChIVVBUSU1FKTsJCS8qIFNsZWVwIDAuNSBzZWMgKi8KKwl4ID0gY2ZzZXRvc3BlZWQoJnR0 Y3VyLHNwZHNhdik7IC8qIFJlc3RvcmUgcHJldiBzcGVlZCAqLworCWlmICh4IDwgMCkgcmV0dXJu KC0xKTsKKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZzZXRvc3BlZWQgcHJldiIsY2tpdG9hKGVycm5v KSx4KTsKKwl4ID0gY2ZzZXRpc3BlZWQoJnR0Y3VyLHNwZHNhdmkpOworCWRlYnVnKEYxMTEsInR0 aGFuZyBjZnNldGlzcGVlZCBwcmV2Iixja2l0b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0 dXJuKC0xKTsKKwl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVn KEYxMTEsInR0aGFuZyB0Y3NldGF0dHIgcmVzdG9yZSIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAo eCA8IDApIHJldHVybigtMSk7CisJcmV0dXJuKDEpOworICAgIH0KKyNlbHNlCisjaWZkZWYgQlNE NDRPUlBPU0lYCisjaWZkZWYgUU5YCisgICAgeworCWludCB4OworCXggPSB0Y2Ryb3BsaW5lKHR0 eWZkLDUwMCk7CisJZGVidWcoRjEwMSwidHRoYW5nIFFOWCB0Y2Ryb3BsaW5lIiwiIix4KTsKKwl0 dGN1ci5jX2NmbGFnIHw9IENMT0NBTDsKKwl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwm dHRjdXIpOworCWRlYnVnKEYxMDEsInR0aGFuZyBRTlggdGNzZXRhdHRyIHJlc3RvcmUiLCIiLHgp OworCWlmICh4IDwgMCkgeworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5YIHRjc2V0YXR0ciBy ZXN0b3JlIGVycm5vIiwiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7CisJfQorCS8qIEZpeCBm bGFncyAtIGVuc3VyZSBPX05PTkJMT0NLIGlzIG9mZiAqLworCisJZXJybm8gPSAwOworCWRlYnVn KEYxMDEsInR0aGFuZyBRTlggaW5pZmxhZ3MiLCIiLGluaWZsYWdzKTsKKwlpZiAoZmNudGwodHR5 ZmQsIEZfU0VURkwsIGluaWZsYWdzKSA9PSAtMSkgeworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcg UU5YIEZfU0VURkwgZXJybm8iLCIiLGVycm5vKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJcmV0 dXJuKHgpOworICAgIH0KKyNlbHNlICAvKiBRTlggKi8KKyAgICB7CisJaW50IHg7CisjaWZkZWYg VVNFX1RJT0NTRFRSCisJZGVidWcoRjEwMCwidHRoYW5nIEJTRDQ0T1JQT1NJWCBVU0VfVElPQ1NE VFIiLCIiLDApOworCWVycm5vID0gMDsKKwl4ID0gaW9jdGwodHR5ZmQsIFRJT0NDRFRSLCBOVUxM KTsKKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGlvY3RsIFRJT0NDRFRSIixja2l0 b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwltc2xlZXAoSFVQVElNRSk7 CQkvKiBTbGVlcCAwLjUgc2VjICovCisJZXJybm8gPSAwOworCXggPSBpb2N0bCh0dHlmZCwgVElP Q1NEVFIsIE5VTEwpOworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggaW9jdGwgVElP Q1NEVFIiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworI2Vsc2Ug IC8qIFVTRV9USU9DU0RUUiAqLworCisjaWZkZWYgSFVQX0NMT1NFX1BPU0lYCisvKgorICBJbiBP U1I1IHZlcnNpb25zIHdoZXJlIFRJT0NTRFRSIGlzIG5vdCBkZWZpbmVkICh1cCB0byBhbmQgaW5j bHVkaW5nIGF0CisgIGxlYXN0IDUuMC42YSkgdGhlIFBPU0lYIEFQSXMgaW4gdGhlICIjZWxzZSIg cGFydCBiZWxvdyBhcmUgYXZhaWxhYmxlIGJ1dAorICBkb24ndCB3b3JrLCBhbmQgbm8gb3RoZXIg QVBJcyBhcmUgYXZhaWxhYmxlIHRoYXQgZG8gd29yay4gIEluIHRoaXMgY2FzZQorICB3ZSBoYXZl IHRvIGRyb3AgRFRSIGJ5IGJydXRlIGZvcmNlOiBjbG9zZSBhbmQgcmVvcGVuIHRoZSBwb3J0LiAg VGhpcworICBjb2RlIGFjdHVhbGx5IHdvcmtzLCBidXQgYWxsIHRoZSBzdGVwcyBhcmUgY3J1Y2lh bDogc2V0dGluZyBDTE9DQUwsIHRoZQorICBPX05ERUxBWSBtYW5pcHVsYXRpb25zLCBldGMuCisq LworCWRlYnVnKEYxMDAsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggY2xvc2Uvb3BlbiIsIiIsMCk7 CisJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBPX05PTkJMT0NLIiwiIixPX05P TkJMT0NLKTsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIE9fTkRFTEFZIiwi IixPX05ERUxBWSk7CisJZXJybm8gPSAwOworCXggPSB0Y2dldGF0dHIodHR5ZmQsICZ0dGN1cik7 CS8qIEdldCBjdXJyZW50IGF0dHJpYnV0ZXMgKi8KKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NM T1NFX1BPU0lYIHRjZ2V0YXR0ciIsIiIseCk7CisJaWYgKHggPCAwKSB7CisJICAgIGRlYnVnKEYx MDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggdGNnZXRhdHRyIGVycm5vIiwiIixlcnJubyk7CisJ ICAgIHJldHVybigtMSk7CisJfQorCWVycm5vID0gMDsKKworCXggPSBjbG9zZSh0dHlmZCk7CQkv KiBDbG9zZSB3aXRob3V0IHJlbGVhc2luZyBsb2NrICovCisJaWYgKHggPCAwKSB7CisJICAgIGRl YnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggY2xvc2UgZXJybm8iLCIiLGVycm5vKTsK KwkgICAgcmV0dXJuKC0xKTsKKwl9CisJZXJybm8gPSAwOworCXggPSBtc2xlZXAoNTAwKTsJCS8q IFBhdXNlIGhhbGYgYSBzZWNvbmQgKi8KKwlpZiAoeCA8IDApIHsJCQkvKiBPciBpZiB0aGF0IGRv ZXNuJ3Qgd29yaywgMSBzZWMgKi8KKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9Q T1NJWCBtc2xlZXAgZXJybm8iLCIiLGVycm5vKTsKKwkgICAgc2xlZXAoMSk7CisJfQorCWVycm5v ID0gMDsKKwl0dHlmZCA9IHByaXZfb3BuKHR0bm1zdiwgKE9fUkRXUnxPX05ERUxBWSkpOyAvKiBS ZW9wZW4gdGhlIGRldmljZSAqLworCWRlYnVnKEYxMTEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVgg cmVvcGVuIix0dG5tc3YsdHR5ZmQpOworCWlmICh0dHlmZCA8IDApIHsKKwkgICAgZGVidWcoRjEw MSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCByZW9wZW4gZXJybm8iLCIiLGVycm5vKTsKKwkgICAg cmV0dXJuKC0xKTsKKwl9CisJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCByZS10 dG9wZW4gdHR5ZmQiLCIiLHR0eWZkKTsKKworCS8qIFJlc3RvcmUgcHJldmlvdXMgYXR0cmlidXRl cyAqLworCisJZXJybm8gPSAwOworCXR2dGZsZyA9IDA7CisJdHRjdXIuY19jZmxhZyB8PSBDTE9D QUw7CisJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKKwlkZWJ1ZyhGMTAx LCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHRjc2V0YXR0ciByZXN0b3JlIiwiIix4KTsKKwlpZiAo eCA8IDApIHsKKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCB0Y3NldGF0 dHIgcmVzdG9yZSBlcnJubyIsCisJCSAgIiIsZXJybm8pOworCSAgICByZXR1cm4oLTEpOworCX0K KwkvKiBGaXggZmxhZ3MgLSBlbnN1cmUgT19OREVMQVkgYW5kIE9fTk9OQkxPQ0sgYXJlIG9mZiAq LworCisJZXJybm8gPSAwOworICAgICAgICBpZiAoKHggPSBmY250bCh0dHlmZCwgRl9HRVRGTCwg MCkpID09IC0xKSB7CisJICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggRl9H RVRGTCBlcnJubyIsIiIsZXJybm8pOworCSAgICByZXR1cm4oLTEpOworCX0KKwlkZWJ1ZyhGMTAx LCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGZsYWdzIiwiIix4KTsKKwllcnJubyA9IDA7CisgICAg ICAgIHggJj0gfihPX05PTkJMT0NLfE9fTkRFTEFZKTsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQ X0NMT1NFX1BPU0lYIGZsYWdzIHRvIHNldCIsIiIseCk7CisJZGVidWcoRjEwMSwidHRoYW5nIEhV UF9DTE9TRV9QT1NJWCBpbmlmbGFncyIsIiIsaW5pZmxhZ3MpOworCWlmIChmY250bCh0dHlmZCwg Rl9TRVRGTCwgeCkgPT0gLTEpIHsKKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9Q T1NJWCBGX1NFVEZMIGVycm5vIiwiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7CisJfQorI2lm ZGVmIERFQlVHCisJaWYgKGRlYmxvZykgeworCSAgICBpZiAoKHggPSBmY250bCh0dHlmZCwgRl9H RVRGTCwgMCkpID4gLTEpIHsKKwkJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBm bGFncyIsIiIseCk7CisJCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggZmxhZ3Mg JiBPX05PTkJMT0NLIiwKKwkJICAgICAgIiIseCZPX05PTkJMT0NLKTsKKwkJZGVidWcoRjEwMSwi dHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBmbGFncyAmIE9fTkRFTEFZIiwKKwkJICAgICAgIiIseCZP X05ERUxBWSk7CisJICAgIH0KKwl9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2Vsc2UgIC8qIEhV UF9DTE9TRV9QT1NJWCAqLworCQorCS8qIEdlbmVyYWwgQlNENDRPUlBPU0lYIGNhc2UgKExpbnV4 LCBCU0RJLCBGcmVlQlNELCBldGMpICovCisKKwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgQlNENDRPUlBP U0lYIEIwIiwiIiwwKTsKKwl4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBHZXQgY3Vy cmVudCBhdHRyaWJ1dGVzICovCisJZGVidWcoRjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCB0Y2dl dGF0dHIiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXNwZHNh diA9IGNmZ2V0b3NwZWVkKCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCisJZGVidWco RjExMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCBjZmdldG9zcGVlZCIsY2tpdG9hKGVycm5vKSxzcGRz YXYpOworCXNwZHNhdmkgPSBjZmdldGlzcGVlZCgmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVl ZCAqLworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZnZXRpc3BlZWQiLGNraXRv YShlcnJubyksc3Bkc2F2aSk7CisJeCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixCMCk7CS8qIFJlcGxh Y2UgYnkgMCAqLworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRvc3BlZWQi LGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXggPSBjZnNldGlz cGVlZCgmdHRjdXIsQjApOworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRp c3BlZWQiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCS8qIFRo aXMgZ2V0cyBFSU5WQUwgb24gTmV0QlNEIDEuNC4xIGJlY2F1c2Ugb2YgQjAuLi4gKi8KKwl4ID0g dGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVnKEYxMTEsInR0aGFuZyBC U0Q0NE9SUE9TSVggdGNzZXRhdHRyIEIwIixja2l0b2EoZXJybm8pLHgpOworCWlmICh4IDwgMCkg cmV0dXJuKC0xKTsKKwltc2xlZXAoSFVQVElNRSk7CQkvKiBTbGVlcCAwLjUgc2VjICovCisJZGVi dWcoRjEwMSwidHRoYW5nIEJTRDQ0T1JQT1NJWCByZXN0b3JlIG91dHB1dCBzcGVlZCIsIiIsc3Bk c2F2KTsKKwl4ID0gY2ZzZXRvc3BlZWQoJnR0Y3VyLHNwZHNhdik7IC8qIFJlc3RvcmUgcHJldiBz cGVlZCAqLworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggY2ZzZXRvc3BlZWQgcHJl diIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJZGVidWcoRjEw MSwidHRoYW5nIEJTRDQ0T1JQT1NJWCByZXN0b3JlIGlucHV0IHNwZWVkIiwiIixzcGRzYXZpKTsK Kwl4ID0gY2ZzZXRpc3BlZWQoJnR0Y3VyLHNwZHNhdmkpOworCWRlYnVnKEYxMTEsInR0aGFuZyBC U0Q0NE9SUE9TSVggY2ZzZXRpc3BlZWQgcHJldiIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8 IDApIHJldHVybigtMSk7CisJdHRjdXIuY19jZmxhZyB8PSBDTE9DQUw7CS8qIERvbid0IGV4cGVj dCBDRCBhZnRlciBoYW5ndXAgKi8KKwl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRj dXIpOworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIHJlc3RvcmUi LGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCisjZW5kaWYgLyog SFVQX0NMT1NFX1BPU0lYICovCisjZW5kaWYgLyogVVNFX1RJT0NTRFRSICovCisKKwlyZXR1cm4o MSk7CisgICAgfQorCisjZW5kaWYgLyogUU5YICovCisjZWxzZSAvKiBCU0Q0NE9SUE9TSVggKi8K KworI2lmZGVmIGFlZ2lzCQkJCS8qIEFwb2xsbyBBZWdpcyAqLworICAgIHNpb18kY29udHJvbCgo c2hvcnQpdHR5ZmQsIHNpb18kZHRyLCBmYWxzZSwgc3QpOyAgICAvKiBEVFIgZG93biAqLworICAg IG1zbGVlcChIVVBUSU1FKTsJCQkJCS8qIHBhdXNlICovCisgICAgc2lvXyRjb250cm9sKChzaG9y dCl0dHlmZCwgc2lvXyRkdHIsIHRydWUsICBzdCk7ICAgIC8qIERUUiB1cCAqLworICAgIHJldHVy bigxKTsKKyNlbmRpZiAvKiBhZWdpcyAqLworCisjaWZkZWYgQU5ZQlNECQkJCS8qIEFueSBCU0Qg dmVyc2lvbi4gKi8KKyNpZmRlZiBUSU9DQ0RUUgkJCQkvKiBFeGNlcHQgdGhvc2UgdGhhdCBkb24n dCBoYXZlIHRoaXMgKi8KKyAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgQlNEIHN0eWxlIiwiIiwwKTsK KyAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ0NEVFIsMCkgPCAwKSB7CS8qIENsZWFyIERUUi4gKi8K KwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ0NEVFIgZmFpbHMiLCIiLGVycm5vKTsKKwlyZXR1cm4o LTEpOworICAgIH0KKyAgICBtc2xlZXAoSFVQVElNRSk7CQkJLyogRm9yIGFib3V0IDEvMiBzZWMg Ki8KKyAgICBlcnJubyA9IDA7CisgICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NTRFRSLDApOwkvKiBS ZXN0b3JlIERUUiAqLworICAgIGlmICh4IDwgMCkgeworCS8qCisJICBGb3Igc29tZSByZWFzb24s IHRoaXMgdGVuZHMgdG8gZmFpbCB3aXRoICJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzIgorCSAg YnV0IHRoZSBvcGVyYXRpb24gc3RpbGwgd29ya3MsIHByb2JhYmx5IGJlY2F1c2Ugb2YgdGhlIGNs b3NlL29wZW4KKwkgIGxhdGVyIG9uLiAgU28gbGV0J3Mgbm90IHNjYXJlIHRoZSB1c2VyIHVubmVj ZXNzYXJpbHkgaGVyZS4KKwkqLworCWRlYnVnKEYxMDEsInR0aGFuZyBUSU9DU0RUUiBlcnJubyIs IiIsZXJybm8pOyAvKiBMb2cgdGhlIGVycm9yICovCisJeCA9IDE7CQkJCS8qIFByZXRlbmQgd2Ug c3VjY2VlZGVkICovCisgICAgfSBlbHNlIGlmICh4ID09IDApIHggPSAxOwkJLyogU3VjY2VzcyAq LworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBGVDIxCisgICAgaW9jdGwodHR5ZmQsIFRJT0NTQVZF TU9ERVMsIDApOworICAgIGlvY3RsKHR0eWZkLCBUSU9DSFBDTCwgMCk7CisgICAgY2xvc2UodHR5 ZmQpOwkJCS8qIFllcywgbXVzdCBkbyB0aGlzIHR3aWNlICovCisgICAgaWYgKCh0dHlmZCA9IG9w ZW4odHRubXN2LDIpKSA8IDApCS8qIG9uIEZvcnR1bmUgY29tcHV0ZXJzLi4uICovCisgICAgICBy ZXR1cm4oLTEpOwkJCS8qIChidXQgd2h5PykgKi8KKyAgICBlbHNlIHggPSAxOworI2VuZGlmIC8q IEZUMjEgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogVElPQ0NEVFIgKi8KKyAg ICBjbG9zZShkb19vcGVuKHR0bm1zdikpOwkJLyogQ2xlYXIgaS9vIGVycm9yIGNvbmRpdGlvbiAq LworICAgIGVycm5vID0gMDsKKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIGlzIGRlZmluaXRlbHkg ZGFuZ2Vyb3VzLiAgV2h5IHdhcyBpdCBoZXJlPyAqLworICAgIHogPSB0dHZ0KHR0c3BlZWQsdHRm bG93KTsJCS8qIFJlc3RvcmUgbW9kZXMuICovCisgICAgZGVidWcoRjEwMSwidHRoYW5nIHR0dnQg cmV0dXJucyIsIiIseik7CisgICAgcmV0dXJuKHogPCAwID8gLTEgOiAxKTsKKyNlbHNlCisgICAg cmV0dXJuKHgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBBTllCU0QgKi8KKwor I2lmZGVmIEFUVFNWCisvKiBBVCZUIFVOSVggc2VjdGlvbiwgaW5jbHVkZXMgSFAtVVggYW5kIGdl bmVyaWMgQVQmVCBTeXN0ZW0gSUlJL1YuLi4gKi8KKworI2lmZGVmIEhQVVgKKy8qIEhld2xldHQg UGFja2FyZCBhbGxvd3MgZXhwbGljaXQgbWFuaXB1bGF0aW9uIG9mIG1vZGVtIHNpZ25hbHMuICov CisKKyNpZmRlZiBDT01NRU5UCisvKiBPbGQgd2F5Li4uICovCisgICAgZGVidWcoRjEwMCwidHRo YW5nIEhQLVVYIHN0eWxlIiwiIiwwKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmZHRy X2Rvd24pIDwgMCkgICAgICAgIC8qIGxvd2VyIERUUiAqLworICAgICAgcmV0dXJuKC0xKTsJCSAg ICAJICAgICAgICAgICAvKiBvb3BzLCBjYW4ndC4gKi8KKyAgICBtc2xlZXAoSFVQVElNRSk7CQkJ ICAgICAgICAgICAvKiBQYXVzZSBoYWxmIGEgc2Vjb25kLiAqLworICAgIHggPSAxOwkJCQkgICAg ICAgICAgIC8qIFNldCByZXR1cm4gY29kZSAqLworICAgIGlmIChpb2N0bCh0dHlmZCxNQ0dFVEEs Jm1vZGVtX3J0bikgPiAtMSkgeyAgICAgLyogR2V0IGxpbmUgc3RhdHVzLiAqLworCWlmICgobW9k ZW1fcnRuICYgTURDRCkgIT0gMCkgICAgICAJICAgLyogQ2hlY2sgaWYgQ0QgaXMgbG93LiAqLwor CSAgeCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDRCBkaWRuJ3Qg ZHJvcCwgZmFpbC4gKi8KKyAgICB9IGVsc2UgeCA9IC0xOworCisgICAgLyogRXZlbiBpZiBhYm92 ZSBjYWxscyBmYWlsLCBSVFMgJiBEVFIgc2hvdWxkIGJlIHR1cm5lZCBiYWNrIG9uLiAqLworICAg IG1vZGVtX3J0biA9IE1SVFMgfCBNRFRSOworICAgIGlmIChpb2N0bCh0dHlmZCxNQ1NFVEFGLCZt b2RlbV9ydG4pIDwgMCkgeCA9IC0xOworICAgIHJldHVybih4KTsKKyNlbHNlCisvKiBOZXcgd2F5 LCBmcm9tIEhlbGxtdXRoIE1pY2hhZWxpcyAqLworICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1V WCBzdHlsZSwgSFBVWERFQlVHIiwiIiwwKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNHRVRBLCZt b2RlbV9ydG4pID09IC0xKSB7IC8qIEdldCBjdXJyZW50IHN0YXR1cy4gKi8KKwlkZWJ1ZyhGMTAw LCJ0dGhhbmcgSFAtVVg6IGNhbid0IGdldCBtb2RlbSBsaW5lcywgTk8gSEFOR1VQISIsIiIsMCk7 CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9k ZW1fcnRuKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAtVVg6IG1vZGVtIGxpbmVzID0gIixt b2RlbV9zdGF0ZSwwKTsKKyAgICBtb2RlbV9zYXYgPSBtb2RlbV9ydG47CQkvKiBTYXZlIGN1cnJl bnQgbW9kZW0gc2lnbmFscyAqLworICAgIG1vZGVtX3J0biAmPSB+TURUUjsJCQkvKiBUdXJuIERU UiBiaXQgb2ZmICovCisgICAgc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9kZW1fcnRuKTsK KyAgICBkZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAtVVg6IERUUiBkb3duID0gIixtb2RlbV9zdGF0ZSww KTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmbW9kZW1fcnRuKSA8IDApIHsgLyogbG93 ZXIgRFRSICovCisJZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBjYW4ndCBsb3dlciBEVFIhIiwi IiwwKTsKKwlyZXR1cm4oLTEpOwkJCS8qIG9vcHMsIGNhbid0LiAqLworICAgIH0KKyAgICBtc2xl ZXAoSFVQVElNRSk7CQkJLyogUGF1c2UgaGFsZiBhIHNlY29uZC4gKi8KKyAgICB4ID0gMTsJCQkJ LyogU2V0IHJldHVybiBjb2RlICovCisgICAgaWYgKGlvY3RsKHR0eWZkLE1DR0VUQSwmbW9kZW1f cnRuKSA+IC0xKSB7IC8qIEdldCBsaW5lIHN0YXR1cy4gKi8KKwlzcHJpbnRmKG1vZGVtX3N0YXRl LCIlI2x4Iixtb2RlbV9ydG4pOworCWRlYnVnKEYxMTAsInR0aGFuZyBIUC1VWDogbW9kZW0gbGlu ZXMgZ290ID0gIixtb2RlbV9zdGF0ZSwwKTsKKwlpZiAoKG1vZGVtX3J0biAmIE1EQ0QpICE9IDAp IHsJLyogQ2hlY2sgaWYgQ0QgaXMgbG93LiAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAt VVg6IERDRCBub3QgZG93biIsIiIsMCk7CisJICAgIHggPSAtMTsJCQkvKiBDRCBkaWRuJ3QgZHJv cCwgZmFpbC4gKi8KKwl9IGVsc2UgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVg6IERD RCBkb3duIiwiIiwwKTsKKwl9CisgICAgfSBlbHNlIHsKKwl4ID0gLTE7CisJZGVidWcoRjEwMCwi dHRoYW5nIEhQLVVYOiBjYW4ndCBnZXQgRENEIHN0YXR1cyAhIiwiIiwwKTsKKyAgICB9CisKKyAg ICAvKiBFdmVuIGlmIGFib3ZlIGNhbGxzIGZhaWwsIERUUiBzaG91bGQgYmUgdHVybmVkIGJhY2sg b24uICovCisKKyAgICBtb2RlbV9zYXYgfD0gTURUUjsKKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNT RVRBRiwmbW9kZW1fc2F2KSA8IDApIHsKKwl4ID0gLTE7CisJZGVidWcoRjEwMCwidHRoYW5nIEhQ LVVYOiBjYW4ndCBzZXQgc2F2ZWQgc3RhdGUiLCIiLDApOworICAgIH0gZWxzZSB7CisJc3ByaW50 Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9kZW1fc2F2KTsKKwlkZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAt VVg6IGZpbmFsIG1vZGVtIGxpbmVzID0gIixtb2RlbV9zdGF0ZSwwKTsKKyAgICB9CisgICAgcmV0 dXJuKHgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2Vsc2UgLyogQVQmVCBidXQgbm90IEhQ LVVYICovCisKKy8qIFNWSUQgZm9yIEFUJlQgU3lzdGVtIFYgUjMgZGVmaW5lcyBpb2N0bCdzIGZv ciBoYW5kbGluZyBtb2RlbSBzaWduYWxzLiAqLworLyogSXQgaXMgbm90IGtub3duIGhvdyBtYW55 LCBpZiBhbnksIHN5c3RlbXMgYWN0dWFsbHkgaW1wbGVtZW50IHRoZW0sICovCisvKiBzbyB3ZSBp bmNsdWRlIHRoZW0gaGVyZSBpbiBpZmRlZidzLiAqLworCisvKgorICBVbml4d2FyZSBoYXMgdGhl IFRJT0NNeHh4IHN5bWJvbHMgZGVmaW5lZCwgYnV0IGNhbGxpbmcgaW9jdGwoKSB3aXRoIHRoZW0K KyAgZ2l2ZXMgZXJyb3IgMjIgKGludmFsaWQgYXJndW1lbnQpLgorKi8KKyNpZm5kZWYgX0lCTVIy CisvKgorICBObyBtb2RlbS1zaWduYWwgdHdpZGRsaW5nIGZvciBJQk0gUlQgUEMgb3IgUlMvNjAw MC4KKyAgSW4gQUlYIDMuMSBhbmQgZWFybGllciwgdGhlIGlvY3RsKCkgY2FsbCBpcyBicm9rZW4u CisgIFRoaXMgY29kZSBjb3VsZCBiZSBhY3RpdmF0ZWQgZm9yIEFJWCAzLjEgd2l0aCBQVEYgMjAw NiBvciBsYXRlcgorICAoZS5nLiBBSVggMy4yKSwgYnV0IGNsb3NlL29wZW4gZG9lcyB0aGUgam9i IHRvbywgc28gd2h5IGJvdGhlci4KKyovCisjaWZkZWYgVElPQ01CSVMJCQkJLyogQml0IFNldCAq LworI2lmZGVmIFRJT0NNQklDCQkJCS8qIEJpdCBDbGVhciAqLworI2lmZGVmIFRJT0NNX0RUUgkJ CS8qIERUUiAqLworCisvKiBDbGVhciBEVFIsIHNsZWVwIDMwMCBtc2VjLCB0dXJuIGl0IGJhY2sg b24uICovCisvKiBJZiBhbnkgb2YgdGhlIGlvY3RsJ3MgcmV0dXJuIGZhaWx1cmUsIGdvIG9uIHRv IHRoZSBuZXh0IHNlY3Rpb24uICovCisKKyAgICB6ID0gVElPQ01fRFRSOwkJCS8qIENvZGUgZm9y IERUUi4gKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIHdhcyB0aGUgY2F1c2Ugb2YgdGhl IHRyb3VibGVzIHdpdGggdGhlIFNvbGFyaXMgUG9ydCBNb25pdG9yLgorICBUaGUgcHJvYmxlbSBp czogUlRTIG5ldmVyIGNvbWVzIGJhY2sgb24uICBNb3JhbDogRG9uJ3QgZG8gaXQhCisgIChCdXQg d2h5IGRvZXNuJ3QgaXQgY29tZSBiYWNrIG9uPyAgU2VlIHRoZSBUSU9DTUJJUyBjYWxsLi4uKQor Ki8KKyNpZmRlZiBUSU9DTV9SVFMJCQkvKiBMb3dlciBSVFMgdG9vIGlmIHN5bWJvbCBpcyBrbm93 bi4gKi8KKyAgICB6IHw9IFRJT0NNX1JUUzsKKyNlbmRpZiAvKiBUSU9DTV9SVFMgKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ00gc2lnbmFsIG1h c2siLCIiLHopOworICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DTUJJQywmeikgPiAtMSkgeyAgIC8q IFRyeSB0byBsb3dlciBEVFIuICovCisJZGVidWcoRjEwMCwidHRoYW5nIFRJT0NNQklDIG9rIiwi IiwwKTsKKwltc2xlZXAoSFVQVElNRSk7CQkgICAvKiBQYXVzZSBoYWxmIGEgc2Vjb25kLiAqLwor CWlmIChpb2N0bCh0dHlmZCxUSU9DTUJJUywmeikgPiAtMSkgeyAvKiBUcnkgdG8gdHVybiBpdCBi YWNrIG9uLiAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgVElPQ01CSVMgb2siLCIiLDApOwor I2lmbmRlZiBDTFNPUE4KKwkgICAgcmV0dXJuKDEpOwkJCS8qIFN1Y2Nlc3MsIGRvbmUuICovCisj ZW5kaWYgLyogQ0xTT1BOICovCisJfSBlbHNlIHsJCQkvKiBDb3VsZG4ndCByYWlzZSwgY29udGlu dWUuICovCisJICAgIGRlYnVnKEYxMDEsInR0aGFuZyBUSU9DTUJJUyBlcnJubyIsIiIsZXJybm8p OworCX0KKyAgICB9IGVsc2UgewkJCQkvKiBDb3VsZG4ndCBsb3dlciwgY29udGludWUuICovCisg CWRlYnVnKEYxMDEsInR0aGFuZyBUSU9DTUJJQyBlcnJubyIsIiIsZXJybm8pOworICAgIH0KKyNl bmRpZiAvKiBUSU9DTV9EVFIgKi8KKyNlbmRpZiAvKiBUSU9DTUJJQyAqLworI2VuZGlmIC8qIFRJ T0NNQklTICovCisjZW5kaWYgLyogX0lCTVIyICovCisKKy8qCisgIEdlbmVyYWwgQVQmVCBVTklY IGNhc2UsIG5vdCBIUFVYLiAgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGhpZ2hseSBzdXNwZWN0LiAg Tm8KKyAgdHdvIEFUJlQtYmFzZWQgc3lzdGVtcyBzZWVtIHRvIGRvIHRoaXMgdGhlIHNhbWUgd2F5 LiAgVGhlIG9iamVjdCBpcyBzaW1wbHkKKyAgdG8gdHVybiBvZmYgRFRSIGFuZCB0aGVuIHR1cm4g aXQgYmFjayBvbi4gIFNWSUQgc2F5cyB0aGUgdW5pdmVyc2FsIG1ldGhvZAorICBmb3IgdHVybmlu ZyBvZmYgRFRSIGlzIHRvIHNldCB0aGUgc3BlZWQgdG8gemVybywgYW5kIHRoaXMgZG9lcyBzZWVt IHRvIGRvCisgIHRoZSB0cmljayBpbiBhbGwgY2FzZXMuICBCdXQgbmVpdGhlciBTVklEIG5vciBh bnkga25vd24gbWFuIHBhZ2VzIHNheSBob3cgdG8KKyAgdHVybiBEVFIgYmFjayBvbiBhZ2Fpbi4g IFNvbWUgdmFyaWFudHMsIGxpa2UgbW9zdCBYZW5peCBpbXBsZW1lbnRhdGlvbnMsCisgIHJhaXNl IERUUiBhZ2FpbiB3aGVuIHRoZSBzcGVlZCBpcyByZXN0b3JlZCB0byBhIG5vbnplcm8gdmFsdWUu ICBPdGhlcnMKKyAgcmVxdWlyZSB0aGUgZGV2aWNlIHRvIGJlIGNsb3NlZCBhbmQgb3BlbmVkIGFn YWluLCBidXQgdGhpcyBpcyByaXNreSBiZWNhdXNlCisgIGdldHR5IGNvdWxkIHNlaXplIHRoZSBk ZXZpY2UgZHVyaW5nIHRoZSBpbnN0YW50IGl0IGlzIGNsb3NlZC4KKyovCisKKy8qIFJldHVybiBj b2RlIGZvciBpb2N0bCBmYWlsdXJlcy4uLiAqLworI2lmZGVmIEFUVDYzMDAKKyAgICB4ID0gMTsJ CQkJLyogQVRUNjMwMCBkb2Vzbid0IHdhbnQgdG8gZmFpbC4uLiAqLworI2Vsc2UKKyAgICB4ID0g LTE7CisjZW5kaWYgLyogQVRUNjMwMCAqLworCisgICAgZGVidWcoRjEwMCwidHRoYW5nIGdldCBz ZXR0aW5ncyIsIiIsMCk7CisgICAgaWYgKGlvY3RsKHR0eWZkLFRDR0VUQSwmdHRjdXIpIDwgMCkg LyogR2V0IGN1cnJlbnQgc2V0dGluZ3MuICovCisgICAgICByZXR1cm4oeCk7CQkJLyogRmFpbCBp ZiB0aGlzIGRvZXNuJ3Qgd29yay4gKi8KKyAgICBpZiAoKGZsYWdzID0gZmNudGwodHR5ZmQsRl9H RVRGTCwwKSkgPCAwKSAvKiBHZXQgZGV2aWNlIGZsYWdzLiAqLworICAgICAgcmV0dXJuKHgpOwor ICAgIHR0Y19zYXZlID0gdHRjdXIuY19jZmxhZzsJCS8qIFJlbWVtYmVyIGN1cnJlbnQgc3BlZWQu ICovCisgICAgc3Bkc2F2ID0gdHRjX3NhdmUgJiBDQkFVRDsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhh bmcgc3BlZWQiLCIiLHNwZHNhdik7CisKKyNpZmRlZiBPX05ERUxBWQorICAgIGRlYnVnKEYxMDAs InR0aGFuZyB0dXJuaW5nIE9fTkRFTEFZIG9uIiwiIiwwKTsKKyAgICBmY250bCh0dHlmZCwgRl9T RVRGTCwgZmxhZ3MgfCBPX05ERUxBWSk7IC8qIEFjdGl2YXRlIE9fTkRFTEFZICovCisjZW5kaWYg LyogT19OREVMQVkgKi8KKworI2lmZGVmIEFUVDczMDAgLyogVGhpcyBpcyB0aGUgd2F5IGl0IGlz IFNVUFBPU0VEIHRvIHdvcmsgKi8KKyAgICB0dGN1ci5jX2NmbGFnICY9IH5DQkFVRDsJCS8qIENo YW5nZSB0aGUgc3BlZWQgdG8gemVyby4gICovCisjZWxzZQorI2lmZGVmIFJUQUlYCisgICAgdHRj dXIuY19jZmxhZyAmPSB+Q0JBVUQ7CQkvKiBDaGFuZ2UgdGhlIHNwZWVkIHRvIHplcm8uICAqLwor I2Vsc2UgICAgICAgICAgLyogVGhpcyB3YXkgcmVhbGx5IHdvcmtzIGJ1dCBtYXkgYmUgZGFuZ2Vy b3VzICovCisjaWZkZWYgdTNiMgorICAgIHR0Y3VyLmNfY2ZsYWcgPSB+KENCQVVEfENMT0NBTCk7 CS8qIFNwZWNpYWwgZm9yIEFUJlQgM0IycyAqLworCQkJCQkvKiAoQ0xPQ0FMIG11c3QgYmUgT0ZG KSAqLworI2Vsc2UKKyNpZmRlZiBTQ08zUjIJCQkJLyogU0NPIFVOSVggMy4yICovCisvKgorICBU aGlzIGlzIGNvbXBsZXRlIG5vbnNlbnNlLCBidXQgYW4gU0NPIHVzZXIgY2xhaW1lZCB0aGlzIGNo YW5nZSBtYWRlCisgIGhhbmdpbmcgdXAgd29yay4gIENvbW1lbnRzIGZyb20gb3RoZXIgU0NPIFVO SVggMy4yIHVzZXJzIHdvdWxkIGJlCisgIGFwcHJlY2lhdGVkLgorKi8KKyAgICB0dGN1ci5jX2Nm bGFnID0gQ0JBVUR8QjA7CisjZWxzZQorI2lmZGVmIEFJWFJTCQkJCS8qIEFJWCBvbiBSUy82MDAw ICovCisvKgorICBDYW4ndCBzZXQgc3BlZWQgdG8gemVybyBvbiBBSVggMy4xIG9uIFJTLzYwMDAg NjQtcG9ydCBhZGFwdGVyLAorICBldmVuIHRob3VnaCB5b3UgY2FuIGRvIGl0IG9uIHRoZSBidWls dC1pbiBwb3J0IGFuZCB0aGUgOC0gYW5kIDE2LXBvcnQKKyAgYWRhcHRlcnMuICAoVW50ZXN0ZWQg b24gMTI4LXBvcnQgYWRhcHRlci4pCisqLworICAgIHR0Y3VyLmNfY2ZsYWcgPSBDTE9DQUx8SFVQ Q0x8c3Bkc2F2OyAvKiBTcGVlZCAwIGNhdXNlcyBFSU5WQUwgKi8KKyNlbHNlCQkJCQkvKiBOb25l IG9mIHRoZSBhYm92ZSAqLworLyoKKyAgU2V0IGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyB0aGUgc3Bl ZWQsIHRvIHplcm8sIGV4Y2VwdCBmb3IgdGhlIENMT0NBTAorICBhbmQgSFVQQ0wgYml0cy4KKyov CisgICAgdHRjdXIuY19jZmxhZyA9IENMT0NBTHxIVVBDTDsKKyNlbmRpZiAvKiBBSVhSUyAqLwor I2VuZGlmIC8qIFNDTzNSMiAqLworI2VuZGlmIC8qIHUzYjIgKi8KKyNlbmRpZiAvKiBSVEFJWCAq LworI2VuZGlmIC8qIEFUVDczMDAgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBhbmQgaWYg bm9uZSBvZiB0aG9zZSB3b3JrLCB0cnkgb25lIG9mIHRoZXNlLi4uICovCisgICAgdHRjdXIuY19j ZmxhZyA9IDA7CisgICAgdHRjdXIuY19jZmxhZyA9IENMT0NBTDsKKyAgICB0dGN1ci5jX2NmbGFn ICY9IH4oQ0JBVUR8SFVQQ0wpOworICAgIHR0Y3VyLmNfY2ZsYWcgJj0gfihDQkFVRHxDUkVBRCk7 CisgICAgdHRjdXIuY19jZmxhZyAmPSB+KENCQVVEfENSRUFEfEhVUENMKTsKKyAgICAvKiBvciBv dGhlciBjb21iaW5hdGlvbnMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBUQ1hP TkMKKyAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgVENYT05DIiwiIiwwKTsKKyAgICBpZiAoaW9jdGwo dHR5ZmQsIFRDWE9OQywgMSkgPCAwKSB7CisJZGVidWcoRjEwMSwidHRoYW5nIFRDWE9OQyBmYWls ZWQiLCIiLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogVENYT05DICovCisKKyNpZmRlZiBUSU9D U1RBUlQKKyAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgVElPQ1NUQVJUIiwiIiwwKTsKKyAgICBpZiAo aW9jdGwodHR5ZmQsIFRJT0NTVEFSVCwgMCkgPCAwKSB7CisJZGVidWcoRjEwMSwidHRoYW5nIFRJ T0NTVEFSVCBmYWlsZWQiLCIiLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ1NUQVJUICov CisKKyAgICBpZiAoaW9jdGwodHR5ZmQsVENTRVRBRiwmdHRjdXIpIDwgMCkgeyAvKiBGYWlsIGlm IHdlIGNhbid0LiAqLworCWRlYnVnKEYxMDEsInR0aGFuZyBUQ1NFVEFGIGZhaWxlZCIsIiIsZXJy bm8pOworCWZjbnRsKHR0eWZkLCBGX1NFVEZMLCBmbGFncyk7CS8qIFJlc3RvcmUgZmxhZ3MgKi8K KwlyZXR1cm4oLTEpOwkJCS8qIGJlZm9yZSByZXR1cm5pbmcuICovCisgICAgfQorICAgIG1zbGVl cCgzMDApOwkJCS8qIEdpdmUgbW9kZW0gdGltZSB0byBub3RpY2UuICovCisKKyNpZm5kZWYgTk9D T1RGTUMKKworLyogTm93LCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHNheSB0aGlzIGluIFNWSUQg b3IgYW55IG1hbiBwYWdlLCB3ZSBoYXZlICovCisvKiB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBk ZXZpY2UuICBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGFsbCBzeXN0ZW1zLCAqLworLyogYnV0 IGl0J3MgaW1wb3NzaWJsZSB0byBwcmVkaWN0IHdoaWNoIG9uZXMgbmVlZCBpdCBhbmQgd2hpY2gg b25lcyBkb24ndC4gKi8KKworI2lmZGVmIEFUVDczMDAKKy8qCisgIFNwZWNpYWwgaGFuZGxpbmcg Zm9yIEFUVCA3MzAwIFVOSVggUEMgYW5kIDNCMSwgd2hpY2ggaGF2ZSAicGhvbmUiCisgIHJlbGF0 ZWQgaW9jdGwncyBmb3IgdGhlaXIgaW50ZXJuYWwgbW9kZW1zLiAgYXR0bW9kZW0gaGFzIGdldHR5 IHN0YXR1cyBhbmQKKyAgbW9kZW0taW4tdXNlIGJpdC4gIFJlcG9ydGVkbHkgdGhlIEFUVDczMDAv M0IxIFBJT0NESVNDIGNhbGwgaXMgbmVjZXNzYXJ5LAorICBidXQgYWxzbyBydWlucyB0aGUgZmls ZSBkZXNjcmlwdG9yLCBhbmQgbm8gb3RoZXIgcGhvbmUoNykgaW9jdGwgY2FsbCBjYW4gZml4Cisg IGl0LiAgV2hhdGV2ZXIgaXQgZG9lcywgaXQgc2VlbXMgdG8gZXNjYXBlIGRldGVjdGlvbiB3aXRo IFBJT0NHRVRBIGFuZCBUQ0dFVEEuCisgIFRoZSBvbmx5IHdheSB0byB1bmRvIHRoZSBkYW1hZ2Ug aXMgdG8gY2xvc2UgdGhlIGZkIGFuZCB0aGVuIHJlb3BlbiBpdC4KKyovCisgICAgaWYgKGF0dG1v ZGVtICYgSVNNT0RFTSkgeworCWRlYnVnKEYxMDAsInR0aGFuZyBhdHRtb2RlbSBjbG9zZS9vcGVu IiwiIiwwKTsKKwlpb2N0bCh0dHlmZCxQSU9DVU5IT0xELCZkaWFsZXIpOyAvKiBSZXR1cm4gY2Fs bCB0byBoYW5kc2V0LiAqLworCWlvY3RsKHR0eWZkLFBJT0NESVNDLCZkaWFsZXIpOwkvKiBEaXNj b25uZWN0IHBob25lLiAqLworCWNsb3NlKHR0eWZkKTsJCQkvKiBDbG9zZSBhbmQgcmVvcGVuIHRo ZSBmZC4gKi8KKwl0dHlmZCA9IHByaXZfb3BuKHR0bm1zdiwgT19SRFdSIHwgT19OREVMQVkpOwor CWF0dG1vZGVtICY9IH5JU01PREVNOwkJLyogUGhvbmUgbm8gbG9uZ2VyIGluIHVzZS4gKi8KKyAg ICB9CisjZWxzZSAvKiAhQVRUNzMwMCAqLworLyogSXQgc2VlbXMgd2UgaGF2ZSB0byBjbG9zZSBh bmQgb3BlbiB0aGUgZGV2aWNlIGZvciBvdGhlciBBVCZUIHN5c3RlbXMgKi8KKy8qIHRvbywgYW5k IHRoaXMgaXMgdGhlIHBsYWNlIHRvIGRvIGl0LiAgVGhlIGZvbGxvd2luZyBjb2RlIGRvZXMgdGhl ICovCisvKiBmYW1vdXMgY2xvc2Uob3BlbiguLi4pKSBtYWdpYyBieSBkZWZhdWx0LiAgSWYgdGhh dCBkb2Vzbid0IHdvcmsgZm9yIHlvdSwgKi8KKy8qIHRoZW4gdHJ5IHVuY29tbWVudGluZyB0aGUg Zm9sbG93aW5nIHN0YXRlbWVudCBvciBwdXR0aW5nIC1EQ0xTT1BOIGluICovCisvKiB0aGUgbWFr ZWZpbGUgQ0ZMQUdTLiAqLworCisvKiAjZGVmaW5lIENMU09QTiAqLworCisjaWZuZGVmIFNDTzMy IC8qIE5vdCBuZWVkZWQgYnksIGFuZCBoYXJtZnVsIHRvLCBTQ08gVU5JWCAzLjIgLyBYZW5peCAy LjMgKi8KKworI2lmZGVmIE9fTkRFTEFZCisjZGVmaW5lIE9QRU5GTEdTIE9fUkRXUiB8IE9fTkRF TEFZCisjZWxzZQorI2RlZmluZSBPUEVORkxHUyBPX1JEV1IKKyNlbmRpZgorCisjaWZuZGVmIENM U09QTgorLyogVGhpcyBtZXRob2QgaXMgdXNlZCBieSBkZWZhdWx0LCBpLmUuIHVubGVzcyBDTFNP UE4gaXMgZGVmaW5lZC4gKi8KKy8qIEl0IGlzIHRob3VnaHQgdG8gYmUgc2FmZXIgYmVjYXVzZSB0 aGVyZSBpcyBubyB3aW5kb3cgd2hlcmUgZ2V0dHkgKi8KKy8qIGNhbiBzZWl6ZSBjb250cm9sIG9m IHRoZSBkZXZpY2UuICBUaGUgZHJhd2JhY2sgaXMgdGhhdCBpdCBtaWdodCBub3Qgd29yay4gKi8K KworICAgIGRlYnVnKEYxMDEsInR0aGFuZyBjbG9zZShvcGVuKCkpLCBPUEVORkxHUyIsIiIsT1BF TkZMR1MpOworICAgIGNsb3NlKHByaXZfb3BuKHR0bm1zdiwgT1BFTkZMR1MpKTsKKworI2Vsc2UK Ky8qIFRoaXMgbWV0aG9kIGlzIHVzZWQgaWYgeW91ICNkZWZpbmUgQ0xTT1BOLiAgSXQgaXMgbW9y ZSBsaWtlbHkgdG8gd29yayAqLworLyogdGhhbiB0aGUgcHJldmlvdXMgbWV0aG9kLCBidXQgaXQn cyBhbHNvIG1vcmUgZGFuZ2Vyb3VzLiAqLworCisgICAgZGVidWcoRjEwMSwidHRoYW5nIGNsb3Nl L29wZW4sIE9QRU5GTEdTIiwiIixPUEVORkxHUyk7CisgICAgY2xvc2UodHR5ZmQpOworICAgIG1z bGVlcCgxMCk7CisgICAgdHR5ZmQgPSBwcml2X29wbih0dG5tc3YsIE9QRU5GTEdTKTsJLyogT3Bl biBpdCBhZ2FpbiAqLworI2VuZGlmIC8qIENMU09QTiAqLworI3VuZGVmIE9QRU5GTEdTCisKKyNl bmRpZiAvKiBTQ08zMiAqLworI2VuZGlmIC8qIEFUVDczMDAgKi8KKworI2VuZGlmIC8qIE5PQ09U Rk1DICovCisKKy8qIE5vdyBwdXQgYWxsIGZsYWdzICYgbW9kZXMgYmFjayB0aGUgd2F5IHdlIGZv dW5kIHRoZW0uICovCisvKiAoRG9lcyB0aGUgb3JkZXIgb2YgaW9jdGwgJiBmY250bCBtYXR0ZXIg PyApICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgcmVzdG9yZSBzZXR0aW5ncyIsIiIsMCk7 CisgICAgdHRjdXIuY19jZmxhZyA9IHR0Y19zYXZlOwkJLyogR2V0IG9sZCBzcGVlZCBiYWNrLiAq LworICAgIGlmIChpb2N0bCh0dHlmZCxUQ1NFVEFGLCZ0dGN1cikgPCAwKSAvKiBpb2N0bCBwYXJh bWV0ZXJzLiAqLworICAgICAgcmV0dXJuKC0xKTsKKyNpZmRlZiBPX05ERUxBWQorLyoKKyAgVGhp cyBpcyByZXF1aXJlZCBmb3IgSUJNIFJUIGFuZCBSUy82MDAwLCBwcm9iYWJseSBoZWxwcyBlbHNl d2hlcmUgdG9vICg/KS4KKyAgQWZ0ZXIgY2xvc2luZyBhIG1vZGVtIGxpbmUsIHRoZSBtb2RlbSB3 aWxsIHByb2JhYmx5IG5vdCBiZSBhc3NlcnRpbmcKKyAgY2FycmllciBhbnkgbW9yZSwgc28gd2Ug c2hvdWxkIG5vdCByZXF1aXJlIGNhcnJpZXIgYW55IG1vcmUuICBJZiB0aGlzCisgIGNhdXNlcyB0 cm91YmxlIG9uIG5vbi1JQk0gVU5JWGVzLCBjaGFuZ2UgdGhlICNpZmRlZiB0byB1c2UgX0lCTVIy IHJhdGhlcgorICB0aGFuIE9fTkRFTEFZLgorKi8KKyAgICBmbGFncyAmPSB+T19OREVMQVk7CQkJ LyogRG9uJ3QgcmVxdWlyZSBjYXJyaWVyIG9uIHJlb3BlbiAqLworI2VuZGlmIC8qIE9fTkRFTEFZ ICovCisgICAgaWYgKGZjbnRsKHR0eWZkLEZfU0VURkwsZmxhZ3MpIDwgMCkJLyogZmNudGwgcGFy YW1ldGVycyAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIHJldHVybigxKTsKKyNlbmRpZiAv KiBub3QgSFBVWCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lY ICovCisjZW5kaWYgLyogSFVQX1BPU0lYICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworfQorCisv KgorICBNYWpvciBjaGFuZ2UgaW4gNUEoMTc0KS4gIFdlIHVzZWQgdG8gdXNlIExQQVNTOCwgaWYg aXQgd2FzIGRlZmluZWQsIHRvCisgIGFsbG93IDgtYml0IGRhdGEgYW5kIFhvbi9Yb2ZmIGZsb3cg Y29udHJvbCBhdCB0aGUgc2FtZSB0aW1lLiAgQnV0IHRoaXMKKyAgTFBBU1M4IGJ1c2luZXNzIHNl ZW1zIHRvIGhhdmUgYmVlbiBjYXVzaW5nIHRyb3VibGUgZm9yIGV2ZXJ5Ym9keSBidXQgbWUhCisg IEZvciBleGFtcGxlLCBBbm5leCB0ZXJtaW5hbCBzZXJ2ZXJzLCBjb21tb25seSB1c2VkIHdpdGgg RW5jb3JlIGNvbXB1dGVycywKKyAgZG8gbm90IHN1cHBvcnQgTFBBU1M4IGV2ZW4gdGhvdWdoIHRo ZSBFbmNvcmUgaXRzZWxmIGRvZXMuICBEaXR0byBmb3IgbWFueQorICBvdGhlciB0ZXJtaW5hbCBz ZXJ2ZXJzLCBURUxORVQgY29ubmVjdGlvbnMsIHJsb2dpbiBjb25uZWN0aW9ucywgZXRjIGV0Yy4K KyAgTm93LCByZXBvcnRlZGx5LCBldmVuIHZhbmlsbGEgNC4zIEJTRCBzeXN0ZW1zIGNhbid0IGRv IHRoaXMgcmlnaHQgb24gdGhlaXIKKyAgc2VyaWFsIGxpbmVzLCBldmVuIHRob3VnaCBMUEFTUzgg aXMgYSBmZWF0dXJlIG9mIDQuM0JTRC4gIFNvIGxldCdzIHR1cm4gaXQKKyAgb2ZmIGZvciBldmVy eWJvZHkuICBUaGF0IG1lYW5zIHdlIGdvZXMgYmFjayB0byB1c2luZyByYXcgbW9kZSwgd2l0aCBu bworICBmbG93IGNvbnRyb2wuICBQaG9vZXkuCisKKyAgTk9URTogVGhpcyBtdXN0IGJlIGRvbmUg YmVmb3JlIHRoZSBmaXJzdCByZWZlcmVuY2UgdG8gTFBBU1M4IGluIHRoaXMgZmlsZSwKKyAgYW5k IGFmdGVyIHRoZSBsYXN0ICNpbmNsdWRlIHN0YXRtZW50LgorKi8KKyNpZmRlZiBMUEFTUzgKKyN1 bmRlZiBMUEFTUzgKKyNlbmRpZiAvKiBMUEFTUzggKi8KKworLyogIFQgVCBSIEUgUyAgLS0gIFJl c3RvcmUgdGVybWluYWwgdG8gIm5vcm1hbCIgbW9kZS4gICovCisKKy8qIHNrZUBwa21hYi5zZTog VGhlcmUgYXJlIHR3byBjaG9pY2VzIGZvciB3aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGRvLgor ICogKDEpIFJlc3RvcmUgdGhlIHR0eSB0byBjdXJyZW50ICJub3JtYWwiIG1vZGUsIHdpdGggY2Fy cmllciB0cmVhdG1lbnQKKyAqIGFjY29yZGluZyB0byB0dGNhcnIsIHRvIGJlIHVzZWQgYWZ0ZXIg ZXZlcnkga2VybWl0IGNvbW1hbmQuICgyKSBSZXN0b3JlCisgKiB0aGUgdHR5IHRvIHRoZSBzdGF0 ZSBpdCB3YXMgaW4gYmVmb3JlIGtlcm1pdCBvcGVuZWQgaXQuIFRoZXNlIGNob2ljZXMKKyAqIGNv bmZsaWN0LCBzaW5jZSB0dG9sZCBjYW4ndCBob2xkIGJvdGggY2hvaWNlcyBvZiB0dHkgcGFyYW1l dGVycy4gIHR0cmVzKCkKKyAqIGlzIGN1cnJlbnRseSBiZWluZyBjYWxsZWQgYXMgaW4gY2hvaWNl ICgxKSwgYnV0IHR0b2xkIGJhc2ljYWxseSBob2xkcworICogdGhlIGluaXRpYWwgcGFyYW1ldGVy cywgYXMgaW4gKDIpLCBhbmQgdGhlIGRlc2NyaXB0aW9uIGF0IHRoZSBiZWdpbm5pbmcKKyAqIG9m IHRoaXMgZmlsZSBzYXlzICgyKS4KKyAqCisgKiBJIGRvbid0IHRoaW5rIHJlc3RvcmluZyB0dHkg cGFyYW1ldGVycyBhZnRlciBhbGwga2VybWl0IGNvbW1hbmRzIG1ha2VzCisgKiBtdWNoIG9mIGEg ZGlmZmVyZW5jZS4gIFJlc3RvcmluZyB0aGVtIHVwb24gZXhpdCBmcm9tIGtlcm1pdCBtYXkgYmUg b2YKKyAqIHNvbWUgdXNlIGluIHNvbWUgY2FzZXMgKHdoZW4gdGhlIGxpbmUgaXMgbm90IHJlc3Rv cmVkIGF1dG9tYXRpY2FsbHkgb24KKyAqIGNsb3NlLCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSku CisgKgorICogSSBjYW4ndCBjaG9vc2Ugd2hpY2ggb25lIGl0IHNob3VsZCBiZSwgc28gSSBoYXZl bid0IGNoYW5nZWQgaXQuIEl0CisgKiBwcm9iYWJseSB3b3JrcyBhcyBpdCBpcywgdG9vLiBJdCB3 b3VsZCBwcm9iYWJseSBldmVuIHdvcmsgZXZlbiB3aXRoCisgKiB0dHJlcygpIGVudGlyZWx5IGRl bGV0ZWQuLi4KKyAqCisgKiAoZnJvbSBmZGM6IEFjdHVhbGx5LCB0aGlzIGZ1bmN0aW9uIG9wZXJh dGVzIGluIHJlbW90ZSBtb2RlIHRvbywgc28KKyAqIGl0IHJlc3RvcmVzIHRoZSBjb25zb2xlIChj b21tYW5kKSB0ZXJtaW5hbCB0byB3aGF0ZXZlciBtb2RlIGl0IHdhcworICogaW4gYmVmb3JlIHBh Y2tldCBvcGVyYXRpb25zIGJlZ2FuLCBzbyB0aGF0IGNvbW1hbmRzIHdvcmsgcmlnaHQgYWdhaW4u KQorICovCitpbnQKK3R0cmVzKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXN0b3JlIHRoZSB0dHkgdG8gbm9ybWFsLiAqLworICAgIGludCB4OworCisgICAgaWYgKHR0eWZk IDwgMCkgcmV0dXJuKC0xKTsgICAgICAgICAgLyogTm90IG9wZW4uICovCisKKyAgICBpZiAodHRm ZGZsZykgcmV0dXJuKDApOwkJLyogRG9uJ3QgbWVzcyB3aXRoIHRlcm1pbmFsIG1vZGVzIGlmICov CisJCQkJCS8qIHdlIGdvdCB0dHlmZCBmcm9tIGFub3RoZXIgcHJvY2VzcyAqLworI2lmZGVmCU5F VENPTk4KKyAgICBpZiAobmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLworICAg ICAgICB0dnRmbGcgPSAwOworI2lmZGVmIFRDUFNPQ0tFVAorI2lmZGVmIFRDUF9OT0RFTEFZCisg ICAgICAgIHsKKwkgICAgZXh0ZXJuIGludCB0Y3Bfbm9kZWxheTsJLyogSnVzdCBwdXQgdGhpcyBi YWNrIGlmIG5lY2Vzc2FyeSAqLworCSAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKKwkJaWYg KG5vZGVsYXlfc2F2ID4gLTEpIHsKKwkJICAgIG5vX2RlbGF5KHR0eWZkLG5vZGVsYXlfc2F2KTsK KwkJICAgIG5vZGVsYXlfc2F2ID0gLTE7CisJCX0KKwkgICAgfQorICAgICAgICB9CisjZW5kaWYg LyogVENQX05PREVMQVkgKi8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChpc3RuY29t cG9ydCgpKSB7CisgICAgICAgICAgICBpbnQgcmMgPSAtMTsKKyAgICAgICAgICAgIGlmICgocmMg PSB0bnNldGZsb3codHRmbG93KSkgPCAwKQorCSAgICAgIHJldHVybihyYyk7CisgICAgICAgICAg ICBpZiAodHRzcGVlZCA8PSAwKSAKKwkgICAgICB0dHNwZWVkID0gdG5jX2dldF9iYXVkKCk7Cisg ICAgICAgICAgICBlbHNlIGlmICgocmMgPSB0bmNfc2V0X2JhdWQodHRzcGVlZCkpIDwgMCkKKwkg ICAgICByZXR1cm4ocmMpOworICAgICAgICAgICAgdG5jX3NldF9kYXRhc2l6ZSg4KTsKKwkgICAg dG5jX3NldF9zdG9wc2l6ZShzdG9wYml0cyk7CisKKyNpZmRlZiBIV1BBUklUWQorICAgICAgICAg ICAgaWYgKGh3cGFyaXR5KSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChod3Bhcml0eSkgewor CQkgIGNhc2UgJ2UnOgkJCS8qIEV2ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwidHRyZXMgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOworICAgICAgICAgICAgICAgICAg ICB0bmNfc2V0X3Bhcml0eSgzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2Fz ZSAnbyc6CQkJLyogT2RkICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVz IDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0 X3Bhcml0eSgyKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAnbSc6CQkJ LyogTWFyayAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMg KyBpbnZhbGlkIHBhcml0eTogbWFyayIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAgIHRuY19z ZXRfcGFyaXR5KDQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJICBjYXNlICdzJzoJ CQkvKiBTcGFjZSAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJp dHMgKyBpbnZhbGlkIHBhcml0eTogc3BhY2UiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0 bmNfc2V0X3Bhcml0eSg1KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKwkgICAg eworICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDEpOyAgICAgICAgICAgICAgLyogTm9u ZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHZ0ZmxnID0gMDsKKyAgICAgICAgICAg IHJldHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlmCS8qIE5FVENPTk4gKi8K KyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVU Q01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYg LyogTkVUUFRZICovCisKKy8qIFJlYWwgdGVybWluYWwgZGV2aWNlLCBzbyByZXN0b3JlIGl0cyBv cmlnaW5hbCBtb2RlcyAqLworCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogRm9yIFBPU0lYIGxp a2UgdGhpcyAqLworICAgIGRlYnVnKEYxMDAsInR0cmVzIEJTRDQ0T1JQT1NJWCIsIiIsMCk7Cisg ICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0b2xkKTsKKyNlbHNlCQkJCQkvKiBG b3IgYWxsIG90aGVycy4uLiAqLworI2lmZGVmIEFUVFNWICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZvciBBVCZUIHZlcnNpb25zLi4uICovCisgICAgZGVidWcoRjEwMCwidHRyZXMgQVRU U1YiLCIiLDApOworICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dG9sZCk7CS8qIFJlc3Rv cmUgdHR5IG1vZGVzIHRoaXMgd2F5LiAqLworI2Vsc2UKKy8qIEhlcmUgd2UgcmVzdG9yZSB0aGUg bW9kZXMgZm9yIEJTRCAqLworCisjaWZkZWYgTFBBU1M4CQkJCS8qIFVuZG8gInBhc3M4IiBpZiBp dCB3ZXJlIGRvbmUgKi8KKyAgICBpZiAobG1vZGVmKSB7CisJaWYgKGlvY3RsKHR0eWZkLFRJT0NM U0VULCZsbW9kZSkgPCAwKQorCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ0xTRVQgZmFpbGVkIiwi IiwwKTsKKwllbHNlCisJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DTFNFVCBvayIsIiIsMCk7Cisg ICAgfQorI2VuZGlmIC8qIExQQVNTOCAqLworCisjaWZkZWYgQ0tfRFRSQ1RTCQkgICAvKiBVbmRv IGhhcmR3YXJlIGZsb3cgaWYgaXQgd2VyZSBkb25lICovCisgICAgaWYgKGxtb2RlZikgeworIAlp ZiAoaW9jdGwodHR5ZmQsVElPQ0xTRVQsJmxtb2RlKSA8IDApCisgCSAgZGVidWcoRjEwMCwidHRy ZXMgVElPQ0xTRVQgZmFpbGVkIiwiIiwwKTsKKyAJZWxzZQorIAkgIGRlYnVnKEYxMDAsInR0cmVz IFRJT0NMU0VUIG9rIiwiIiwwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfRFRSQ1RTICovCisKKyNp ZmRlZiBUSU9DR0VUQwkJCQkvKiBQdXQgYmFjayBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKyAgICBp ZiAodGNoYXJmICYmICh4bG9jYWwgPT0gMCkpIHsKKwlpZiAoaW9jdGwodHR5ZmQsVElPQ1NFVEMs JnRjaG9sZCkgPCAwKQorCSAgZGVidWcoRjEwMCwidHRyZXMgVElPQ1NFVEMgZmFpbGVkIiwiIiww KTsKKwllbHNlCisJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DU0VUQyBvayIsIiIsMCk7CisgICAg fQorI2VuZGlmIC8qIFRJT0NHRVRDICovCisKKyNpZmRlZiBUSU9DR0xUQwkJCQkvKiBQdXQgYmFj ayBsb2NhbCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKyAgICBpZiAobHRjaGFyZiAmJiAoeGxvY2Fs ID09IDApKSB7CisJaWYgKGlvY3RsKHR0eWZkLFRJT0NTTFRDLCZsdGNob2xkKSA8IDApCisJICBk ZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DU0xUQyBmYWlsZWQiLCIiLDApOworCWVsc2UKKwkgIGRlYnVn KEYxMDAsInR0cmVzIFRJT0NTTFRDIG9rIiwiIiwwKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ0dM VEMgKi8KKworI2lmZGVmIEJFTExWMTAKKyAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBCRUxMVjEwIiwi IiwwKTsKKyAgICB4ID0gaW9jdGwodHR5ZmQsVElPQ1NFVFAsJnR0b2xkKTsJLyogUmVzdG9yZSBi b3RoIHN0cnVjdHMgKi8KKyAgICB4ID0gaW9jdGwodHR5ZmQsVElPQ1NERVYsJnRkb2xkKTsKKyNl bHNlCisgICAgZGVidWcoRjEwMCwidHRyZXMgc3R0eSIsIiIsMCk7CisgICAgeCA9IHN0dHkodHR5 ZmQsJnR0b2xkKTsgICAgICAgICAgICAgLyogUmVzdG9yZSB0dHkgbW9kZXMgdGhlIG9sZCB3YXku ICovCisjZW5kaWYgLyogQkVMTFYxMCAqLworCisgICAgaWYgKCF4bG9jYWwpCisgICAgICBtc2xl ZXAoMTAwKTsJCQkvKiBUaGlzIHJlcGxhY2VzIHNsZWVwKDEpLi4uICovCisJCQkJCS8qIFB1dCBi YWNrIHNsZWVwKDEpIGlmIHR0eSBpcyAqLworCQkJCQkvKiBtZXNzZWQgdXAgYWZ0ZXIgY2xvc2Uu ICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKworICAg IGRlYnVnKEYxMDEsInR0cmVzIHJlc3VsdCIsIiIseCk7CisjaWZuZGVmIFFOWAorICAgIGlmICh4 IDwgMCkgZGVidWcoRjEwMSwidHRyZXMgZXJybm8iLCIiLGVycm5vKTsKKyNlbmRpZiAvKiBRTlgg Ki8KKworI2lmZGVmIEFJWFJTCisjaWZuZGVmIEFJWDQxCisgICAgeCA9IGlvY3RsKHR0eWZkLCB0 dGxkICYgMSA/IFRYQUREQ0QgOiBUWERFTENELCAicnRzIik7CisgICAgZGVidWcoRjEwMSwidHRy ZXMgQUlYIGxpbmUgZGlzY2lwbGluZSBydHMgcmVzdG9yZSIsIiIseCk7CisjZW5kaWYgLyogQUlY NDEgKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworCisjaWZkZWYgQlNENDEKKyAgICBpZiAodHRsZCA+ IC0xKSB7CQkJLyogUHV0IGJhY2sgbGluZSBkaXNjaXBsaW5lICovCisJeCA9IGlvY3RsKHR0eWZk LCBUSU9DU0VURCwgJnR0bGQpOworCWRlYnVnKEYxMDEsInR0cmVzIEJTRDQxIGxpbmUgZGlzY2lw bGluZSByZXN0b3JlIiwiIix4KTsKKwlpZiAoeCA8IDApIGRlYnVnKEYxMDEsIi4uLmlvY3RsIGVy cm5vIiwiIixlcnJubyk7CisJdHRsZCA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBCU0Q0MSAqLwor CisjaWZkZWYgc29ueV9uZXdzCisgICAgeCA9IHhsb2NhbCA/IGttX2V4dCA6IGttX2NvbjsJLyog UmVzdG9yZSBLYW5qaSBtb2RlLiAqLworICAgIGlmICh4ICE9IC0xKSB7CQkJLyogTWFrZSBzdXJl IHdlIGtub3cgb3JpZ2luYWwgbW9kZXMuICovCisJaWYgKGlvY3RsKHR0eWZkLFRJT0NLU0VULCAm eCkgPCAwKSB7CisJICAgIHBlcnJvcigidHRyZXMgY2FuJ3Qgc2V0IEthbmppIG1vZGUiKTsKKwkg ICAgZGVidWcoRjEwMSwidHRyZXMgZXJyb3Igc2V0dGluZyBLYW5qaSBtb2RlIiwiIix4KTsKKwkg ICAgcmV0dXJuKC0xKTsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDAsInR0cmVzIHNldCBLYW5q aSBtb2RlIG9rIiwiIiwwKTsKKyNlbmRpZiAvKiBzb255X25ld3MgKi8KKworICAgIHR2dGZsZyA9 IDA7CQkJCS8qIEludmFsaWRhdGUgdGVybWluYWwgbW9kZSBzZXR0aW5ncyAqLworICAgIGRlYnVn KEYxMDEsInR0cmVzIHJldHVybiBjb2RlIiwiIix4KTsKKyAgICByZXR1cm4oeCk7Cit9CisKKyNp Zm5kZWYgTk9VVUNQCisKKy8qICBUIFQgQyBIIEsgUCBJIEQgIC0tICBDaGVjayBsb2NrZmlsZSBw aWQgICovCisvKgorICBSZWFkIHBpZCBmcm9tIGxvY2tmaWxlIG5hbWVkIGYsIGNoZWNrIHRoYXQg aXQncyBzdGlsbCB2YWxpZC4KKyAgSWYgc28sIHJldHVybiAxLgorICBPbiBmYWlsdXJlIHRvIHJl YWQgcGlkLCByZXR1cm4gMS4KKyAgT3RoZXJ3aXNlLCB0cnkgdG8gZGVsZXRlIGxvY2tmaWxlIGYg YW5kIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgMS4KKyovCitzdGF0aWMgaW50Cit0dGNo a3BpZChmKSBjaGFyICpmOyB7CisgICAgaW50IHBpZCwgbXlwaWQsIHg7CisgICAgcGlkID0gdHRy cGlkKGYpOwkJCS8qIFJlYWQgcGlkIGZyb20gZmlsZS4gKi8KKyAgICBpZiAocGlkID4gLTEpIHsJ CQkvKiBJZiB3ZSB3ZXJlIGFibGUgdG8gcmVhZCB0aGUgcGlkLi4gKi8KKwlkZWJ1ZyhGMTAxLCJ0 dGNoa3BpZCBsb2NrIHBpZCIsIiIscGlkKTsKKwllcnJubyA9IDA7CQkJLyogU2VlIGlmIHByb2Nl c3Mgc3RpbGwgZXhpc3RzLiAqLworCW15cGlkID0gKGludClnZXRwaWQoKTsJCS8qIEdldCBteSBv d24gcGlkLiAqLworCWRlYnVnKEYxMDEsInR0Y2hrcGlkIG15IHBpZCIsIiIsbXlwaWQpOworCWlm IChwaWQgPT0gbXlwaWQpIHsJCS8qIEl0J3MgbWUhICovCisJICAgIHggPSAtMTsJCQkvKiBTbyBJ IGNhbiBkZWxldGUgaXQgKi8KKwkgICAgZXJybm8gPSBFU1JDSDsJCS8qIHByZXRlbmQgaXQncyBp bnZhbGlkICovCisJfSBlbHNlIHsJCQkvKiBJdCdzIG5vdCBtZSAqLworCSAgICB4ID0ga2lsbCgo UElEX1QpcGlkLCAwKTsJLyogU2VlIGlmIGl0J3MgYSBsaXZlIHByb2Nlc3MgKi8KKwkgICAgZGVi dWcoRjEwMSwidHRjaGtwaWQga2lsbCBlcnJubyIsIiIsZXJybm8pOworCX0KKwlkZWJ1ZyhGMTAx LCJ0dGNoa3BpZCBwaWQgdGVzdCIsIiIseCk7CisJaWYgKHggPCAwICYmIGVycm5vID09IEVTUkNI KSB7IC8qIHBpZCBpcyBpbnZhbGlkICovCisJICAgIGRlYnVnKEYxMTEsInJlbW92aW5nIHN0YWxl IGxvY2siLGYscGlkKTsKKwkgICAgaWYgKCFiYWNrZ3JkKQorCSAgICAgIHByaW50ZigiUmVtb3Zp bmcgc3RhbGUgbG9jayAlcyAocGlkICVkIHRlcm1pbmF0ZWQpXG4iLCBmLCBwaWQpOworCSAgICBw cml2X29uKCk7CisJICAgIHggPSB1bmxpbmsoZik7CQkvKiBSZW1vdmUgdGhlIGxvY2tmaWxlLiAq LworCSAgICBwcml2X29mZigpOworCSAgICBkZWJ1ZyhGMTExLCJ0dGNoa3BpZCB1bmxpbmsiLGYs eCk7CisJICAgIGlmICh4ID4gLTEpCisJICAgICAgcmV0dXJuKDApOwkJLyogRGV2aWNlIGlzIG5v dCBsb2NrZWQgYWZ0ZXIgYWxsICovCisJICAgIGVsc2UgaWYgKCFiYWNrZ3JkKQorCSAgICAgIHBl cnJvcihmKTsKKwl9CisJcmV0dXJuKDEpOworICAgIH0KKyAgICByZXR1cm4oMSk7CQkJCS8qIEZh aWx1cmUgdG8gcmVhZCBwaWQgKi8KK30KKworI2lmZGVmIEhQVVgKKworLyogQWxpYXNlcyAoZGlm ZmVyZW50IGRyaXZlcnMpIGZvciBIUC1VWCBkaWFsb3V0IGRldmljZXM6ICovCisKK3N0YXRpYyBj aGFyICpkZXZwcmVmaXhbXSA9IHsgInR0eSIsICJ0dHlkIiwgImN1bCIsICJjdWEiLCAiY3VhZCIs ICJjdWxkIiwgIiIgfTsKK3N0YXRpYyBpbnQgdHR5ZGV4aXN0cyA9IDA7CisKKyNlbmRpZiAvKiBI UFVYICovCisKKy8qICBUIFQgUiBQIEkgRCAgLS0gIFJlYWQgcGlkIGZyb20gbG9ja2ZpbGUgIm5h bWUiICovCisKK3N0YXRpYyBpbnQKK3R0cnBpZChuYW1lKSBjaGFyICpuYW1lOyB7CisgICAgbG9u ZyBsZW47CisgICAgaW50IHgsIGZkLCBwaWQ7CisgICAgc2hvcnQgc3BpZDsKKyAgICBjaGFyIGJ1 ZlszMl07CisKKyAgICBkZWJ1ZyhGMTEwLCJ0dHJwaWQiLG5hbWUsMCk7CisgICAgaWYgKCFuYW1l KSByZXR1cm4oLTEpOworICAgIGlmICghKm5hbWUpIHJldHVybigtMSk7CisgICAgcHJpdl9vbigp OworICAgIGxlbiA9IHpjaGtpKG5hbWUpOwkJCS8qIEdldCBmaWxlIGxlbmd0aCAqLworICAgIHBy aXZfb2ZmKCk7CisgICAgZGVidWcoRjEwMSwidHRycGlkIHpjaGtpIiwiIixsZW4pOworICAgIGlm IChsZW4gPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBpZiAobGVuID4gMzEpCisgICAgICBy ZXR1cm4oLTEpOworICAgIHByaXZfb24oKTsKKyAgICBmZCA9IG9wZW4obmFtZSxPX1JET05MWSk7 CQkvKiBUcnkgdG8gb3BlbiBsb2NrZmlsZS4gKi8KKyAgICBwcml2X29mZigpOworICAgIGRlYnVn KEYxMDEsInR0cnBpZCBmZCIsIiIsZmQpOworICAgIGlmIChmZCA8PSAwKQorICAgICAgcmV0dXJu KC0xKTsKKy8qCisgIEhlcmUgd2UgdHJ5IHRvIGJlIGZsZXhpYmxlIGFuZCBhbGxvdyBmb3IgYWxs IGRpZmZlcmVudCBiaW5hcnkgYW5kIHN0cmluZworICBmb3JtYXRzIGF0IHJ1bnRpbWUsIHJhdGhl ciB0aGFuIGEgc3BlY2lmaWMgZm9ybWF0IGZvciBlYWNoIGNvbmZpZ3VyYXRpb24KKyAgaGFyZHdp cmVkIGF0IGNvbXBpbGUgdGltZS4KKyovCisgICAgcGlkID0gLTE7CisjaWZuZGVmIENPSEVSRU5U CisvKgorICBDT0hFUkVOVCB1c2VzIGEgc3RyaW5nIFBJRCBidXQgd2l0aG91dCBsZWFkaW5nIHNw YWNlcyBvciAwJ3MsIHNvIHRoZXJlIGlzCisgIG5vIHdheSB0byB0ZWxsIGZyb20gdGhlIGZpbGUn cyBsZW5ndGggd2hldGhlciBpdCBjb250YWlucyBhIHN0cmluZyBvciBiaW5hcnkKKyAgcGlkLiAg U28gZm9yIENPSEVSRU5UIG9ubHksIHdlIG9ubHkgYWxsb3cgc3RyaW5nIHBpZHMuICBGb3IgYWxs IG90aGVycywgd2UKKyAgZGVjaWRlIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBsb2NrZmlsZS4K KyovCisgICAgaWYgKGxlbiA+IDQpIHsJCQkvKiBJZiBmaWxlID4gNCBieXRlcyBpdCdzIGEgc3Ry aW5nICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKwl4ID0gcmVhZChmZCxidWYsKGludClsZW4p OworCWRlYnVnKEYxMTEsInR0cnBpZCBzdHJpbmcgcmVhZCIsYnVmLHgpOworCWlmICh4IDwgMCkg eworCSAgICBwaWQgPSAtMTsKKwl9IGVsc2UgeworCSAgICBidWZbMzFdID0gJ1wwJzsKKwkgICAg eCA9IHNzY2FuZihidWYsIiVkIiwmcGlkKTsJLyogR2V0IHRoZSBpbnRlZ2VyIHBpZCBmcm9tIGl0 LiAqLworCX0KKyNpZm5kZWYgQ09IRVJFTlQKKyAgICB9IGVsc2UgaWYgKGxlbiA9PSA0KSB7CQkv KiA0IGJ5dGVzIHNvIGJpbmFyeSAqLworCXggPSByZWFkKGZkLCAoY2hhciAqKSZwaWQsIDQpOwkv KiBSZWFkIHRoZSBieXRlcyBpbnRvIGFuIGludCAqLworCWRlYnVnKEYxMDEsInR0cnBpZCBpbnRl Z2VyIHJlYWQiLCIiLHgpOworCWlmICh4IDwgNCkKKwkgIHBpZCA9IC0xOworICAgIH0gZWxzZSBp ZiAobGVuID09IDIpIHsJCS8qIDIgYnl0ZXMgYmluYXJ5ICovCisJeCA9IHJlYWQoZmQsIChjaGFy ICopJnNwaWQsIDIpOwkvKiBSZWFkIHRoZSBieXRlcyBpbnRvIGEgc2hvcnQgKi8KKwlkZWJ1ZyhG MTAxLCJ0dHJwaWQgc2hvcnQgcmVhZCIsIiIseCk7CisJaWYgKHggPCAyKQorCSAgcGlkID0gLTE7 CisJZWxzZQorCSAgcGlkID0gc3BpZDsKKyAgICB9IGVsc2UKKyAgICAgIHBpZCA9IC0xOworI2Vu ZGlmIC8qIENPSEVSRU5UICovCisgICAgY2xvc2UoZmQpOwkJCQkvKiBDbG9zZSB0aGUgbG9ja2Zp bGUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dHJwaWQgcGlkIiwiIixwaWQpOworICAgIHJldHVybihw aWQpOworfQorI2VuZGlmIC8qIE5PVVVDUCAqLworCisvKiAgVCBUIEwgTyBDIEsgICovCisKKy8q CisgIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gY29vcmRpbmF0ZSB1c2Ugb2YgdGhlIGNvbW11 bmljYXRpb24gZGV2aWNlIHdpdGgKKyAgb3RoZXIgY29waWVzIG9mIEtlcm1pdCBhbmQgYW55IG90 aGVyIHByb2dyYW0gdGhhdCBmb2xsb3dzIHRoZSBVVUNQCisgIGRldmljZS1sb2NraW5nIGNvbnZl bnRpb25zLCB3aGljaCwgdW5mb3J0dW5hdGVseSwgdmFyeSBhbW9uZyBkaWZmZXJlbnQgVU5JWAor ICBpbXBsZW1lbnRhdGlvbnMuICBUaGUgaWRlYSBpcyB0byBsb29rIGZvciBhIGZpbGUgb2YgYSBj ZXJ0YWluIG5hbWUsIHRoZQorICAibG9ja2ZpbGUiLCBpbiBhIGNlcnRhaW4gZGlyZWN0b3J5LiAg SWYgc3VjaCBhIGZpbGUgaXMgZm91bmQsIHRoZW4gdGhlIGxpbmUKKyAgaXMgcHJlc3VtZWQgdG8g YmUgaW4gdXNlLCBhbmQgS2VybWl0IHNob3VsZCBub3QgdXNlIGl0LiAgSWYgbm8gc3VjaCBmaWxl IGlzCisgIGZvdW5kLCBLZXJtaXQgYXR0ZW1wdHMgdG8gY3JlYXRlIG9uZSBzbyB0aGF0IG90aGVy IHByb2dyYW1zIHdpbGwgbm90IHVzZSB0aGUKKyAgc2FtZSBsaW5lIGF0IHRoZSBzYW1lIHRpbWUu ICBCZWNhdXNlIHRoZSBsb2NrZmlsZSBhbmQvb3IgdGhlIGRpcmVjdG9yeSBpdCdzCisgIGluIG1p Z2h0IGxhY2sgd3JpdGUgcGVybWlzc2lvbiBmb3IgdGhlIHBlcnNvbiBydW5uaW5nIEtlcm1pdCwg S2VybWl0IGNvdWxkCisgIGZpbmQgaXRzZWxmIHJ1bm5pbmcgc2V0dWlkIHRvIHV1Y3Agb3Igb3Ro ZXIgdXNlciB0aGF0IGRvZXMgaGF2ZSB0aGUKKyAgbmVjZXNzYXJ5IHBlcm1pc3Npb25zLiAgQXQg c3RhcnR1cCwgS2VybWl0IGhhcyBjaGFuZ2VkIGl0cyBlZmZlY3RpdmUgdWlkIHRvCisgIHRoZSB1 c2VyJ3MgcmVhbCB1aWQsIGFuZCBzbyB0dGxvY2soKSBtdXN0IHN3aXRjaCBiYWNrIHRvIHRoZSBv cmlnaW5hbAorICBlZmZlY3RpdmUgdWlkIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUgbG9ja2ZpbGUs IGFuZCB0aGVuIGJhY2sgYWdhaW4gdG8gdGhlCisgIHJlYWwgdWlkIHRvIHByZXZlbnQgdW5hdXRo b3JpemVkIGFjY2VzcyB0byBvdGhlciBkaXJlY3RvcmllcyBvciBmaWxlcyBvd25lZAorICBieSB0 aGUgdXNlciB0aGUgcHJvZ3JhbSBpcyBzZXR1aWQgdG8uCisKKyAgVG90YWxseSByZXdyaXR0ZW4g Zm9yIEMtS2VybWl0IDVBIHRvIGVsaW1pbmF0ZSB3aW5kb3dzIG9mIHZ1bG5lcmFiaWxpdHksCisg IGJhc2VkIG9uIHN1Z2dlc3Rpb25zIGZyb20gV2FycmVuIFR1Y2tlci4gIENhbGwgd2l0aCBwb2lu dGVyIHRvIG5hbWUgb2YKKyAgdHR5IGRldmljZS4gIFJldHVybnM6CisKKyAgIDAgb24gc3VjY2Vz cworICAtMSBvbiBmYWlsdXJlCisKKyAgTm90ZTogT25jZSBwcml2aWxlZ2VzIGFyZSB0dXJuZWQg b24gdXNpbmcgcHJpdl9vbigpLCBpdCBpcyBlc3NlbnRpYWwgdGhhdAorICB0aGV5IGFyZSB0dXJu ZWQgb2ZmIGFnYWluIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisqLworI2lmZGVmIFNW UjQJCQkJLyogTG9ja2ZpbGUgdXNlcyBkZXZpY2UgbnVtYmVycy4gKi8KKy8qCisgIEFsdGhvdWdo IEkgY2FuJ3QgZmluZCB0aGlzIGluIHdyaXRpbmcgYW55d2hlcmUgKGUuZy4gaW4gU1ZJRCBmb3Ig U1ZSNCksCisgIGl0IGlzIHRoZSBiZWhhdmlvciBvZiB0aGUgInJlZmVyZW5jZSB2ZXJzaW9uIiBv ZiBTVlI0LCBpLmUuIHRoZSBJbnRlbAorICBwb3J0IGZyb20gVU5JWCBTeXN0ZW1zIExhYm9yYXRv cmllcywgdGhlbiBjYWxsZWQgVW5pdmVsIFVuaXhXYXJlLAorICB0aGVuIGNhbGxlZCBOb3ZlbGwg VW5peFdhcmUsIHRoZW4gY2FsbGVkIFNDTyBVbml4d2FyZSwgdGhlbiBjYWxsZWQgQ2FsZGVyYQor ICBPcGVuIFVOSVguLi4gIEl0IGFsc28gbWFrZXMgbXVjaCBtb3JlIHNlbnNlIHRoYW4gZGV2aWNl LW5hbWUtYmFzZWQgbG9ja2ZpbGVzCisgIHNpbmNlIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBuYW1l cyBmb3IgdGhlIHNhbWUgZGV2aWNlLCBzeW1saW5rcywgZXRjLgorKi8KKyNpZm5kZWYgTk9MRkRF Vk5PCisjaWZuZGVmIExGREVWTk8JCQkJLyogRGVmaW5lIHRoaXMgZm9yIFNWUjQgKi8KKyNpZm5k ZWYgQUlYUlMJCQkJLyogQnV0IG5vdCBmb3IgUlMvNjAwMCBBSVggMy4yLCBldGMuICovCisjaWZu ZGVmIEJTRDQ0CQkJCS8qIElmIGFueWJvZHkgZWxzZSBuZWVkcyBpdC4uLiAqLworI2lmbmRlZiBf XzM4NkJTRF9fCisjaWZuZGVmIF9fRnJlZUJTRF9fCisjaWZuZGVmIEhQVVgxMAorI2lmbmRlZiBJ UklYNTEJCQkJLyogU0dJIElSSVggNS4xIG9yIGxhdGVyICovCisjaWZuZGVmIENLX1NDT1Y1CQkJ LyogU0NPIE9wZW4gU2VydmVyIDUuMCAqLworI2RlZmluZSBMRkRFVk5PCisjZW5kaWYgLyogQ0tf U0NPVjUgKi8KKyNlbmRpZiAvKiBJUklYNTEgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRp ZiAvKiBfX0ZyZWVCU0RfXyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNlbmRpZiAvKiBC U0Q0NCAqLworI2VuZGlmIC8qIEFJWFJTICovCisjZW5kaWYgLyogTEZERVZOTyAqLwkJCS8qIC4u LiBkZWZpbmUgaXQgaGVyZSBvciBvbiBDQyAqLworI2VuZGlmIC8qIE5PTEZERVZOTyAqLworI2Vu ZGlmIC8qIFNWUjQgKi8JCQkvKiBjb21tYW5kIGxpbmUuICovCisKKyNpZmRlZiBDT0hFUkVOVAor I2RlZmluZSBMRkRFVk5PCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworLyoKKyAgRm9yIHBsYXRm b3JtcyB3aGVyZSB0aGUgbG9ja2ZpbGUgbmFtZSBpcyBtYWRlIGZyb20gZGV2aWNlL21ham9yL21p bm9yCisgIGRldmljZSBudW1iZXIsIGFzIGluIFNWUjQuICBXaGljaCwgaWYgd2UgbXVzdCBoYXZl IGxvY2tmaWxlcyBhdCBhbGwsIGlzCisgIGJ5IGZhciB0aGUgYmVzdCBmb3JtYXQsIHNpbmNlIGl0 IGVsaW1pbmF0ZXMgYWxsIHRoZSBjb25mdXNpb24gdGhhdCBzdGVtcworICBmcm9tIG11bHRpcGxl IG5hbWVzIChvciBkcml2ZXJzKSBmb3IgdGhlIHNhbWUgcG9ydCwgbm90IHRvIG1lbnRpb24KKyAg c3ltbGlua3MuICBJdCBtaWdodCBldmVuIGJlIGEgZ29vZCBpZGVhIHRvIHN0YXJ0IHVzaW5nIHRo aXMgZm9ybSBldmVuCisgIG9uIHBsYXRmb3JtcyB3aGVyZSBpdCdzIG5vdCBzdXBwb3J0ZWQsIGFs b25nc2lkZSB0aGUgbm9ybWFsIGZvcm1zIGZvciB0aG9zZQorICBwbGF0Zm9ybXMsIGluIG9yZGVy IHRvIGdldCBwZW9wbGUgdXNlZCB0byBpdC4uLgorKi8KKyNpZmRlZiBMRkRFVk5PCisjaWZuZGVm IG1ham9yCQkJCS8qIElmIHdlIGRpZG4ndCBmaW5kIGl0ICovCisjaWZkZWYgU1ZSNAkJCQkvKiB0 aGVuIGZvciBTeXMgViBSNCAqLworI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgkJCS8qIGxvb2sgaGVy ZSAqLworI2Vsc2UJCQkJCS8qIG9yIGZvciBTdW5PUyB2ZXJzaW9ucyAqLworI2lmZGVmIFNVTk9T NAkJCQkvKiAuLi4gKi8KKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CQkvKiBsb29rIGhlcmUg Ki8KKyNlbHNlCQkJCQkvKiBPdGhlcndpc2UgdGFrZSBhIGNoYW5jZTogKi8KKyNkZWZpbmUJbWFq b3IoZGV2KSAoIChpbnQpICggKCh1bnNpZ25lZCkoZGV2KSA+PiA4KSAmIDB4ZmYpKQorI2RlZmlu ZQltaW5vcihkZXYpICggKGludCkgKCAoZGV2KSAmIDB4ZmYpKQorI2VuZGlmIC8qIFNVTk9TNCAq LworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBtYWpvciAqLworI2VuZGlmIC8qIExGREVW Tk8gKi8KKworLyogTm8gYWR2aXNvcnkgbG9ja3MgaWYgRl9UTE9DSyBhbmQgRl9VTE9DSyBhcmUg bm90IGRlZmluZWQgYXQgdGhpcyBwb2ludCAqLworCisjaWZkZWYgTE9DS0YKKyNpZm5kZWYgRl9U TE9DSworI3VuZGVmIExPQ0tGCisjaWZuZGVmIE5PTE9DS0YKKyNkZWZpbmUgTk9MT0NLRgorI2Vu ZGlmIC8qIE5PTE9DS0YgKi8KKyNlbmRpZiAvKiBGX1RMT0NLICovCisjZW5kaWYgLyogTE9DS0Yg Ki8KKworI2lmZGVmIExPQ0tGCisjaWZuZGVmIEZfVUxPQ0sKKyN1bmRlZiBMT0NLRgorI2lmbmRl ZiBOT0xPQ0tGCisjZGVmaW5lIE5PTE9DS0YKKyNlbmRpZiAvKiBOT0xPQ0tGICovCisjZW5kaWYg LyogRl9VTE9DSyAqLworI2VuZGlmIC8qIExPQ0tGICovCisKK3N0YXRpYyBjaGFyIGxpbmt0b1tE RVZOQU1MRU4rMV07CitzdGF0aWMgY2hhciAqIGxpbmtkZXYgPSBOVUxMOworCisjaWZuZGVmIE5P VVVDUAorI2lmZGVmIFVTRVRUWUxPQ0sKKyNpZmRlZiBMT0NLX0RJUgorY2hhciAqIHV1Y3Bsb2Nr ZGlyID0gTE9DS19ESVI7CisjZWxzZQorY2hhciAqIHV1Y3Bsb2NrZGlyID0gIiI7CisjZW5kaWYg LyogTE9DS19ESVIgKi8KKyNlbHNlCisjaWZkZWYgTE9DS19ESVIKK2NoYXIgKiB1dWNwbG9ja2Rp ciA9IExPQ0tfRElSOworI2Vsc2UKK2NoYXIgKiB1dWNwbG9ja2RpciA9ICIiOworI2VuZGlmIC8q IExPQ0tfRElSICovCisjZW5kaWYgLyogVVNFVFRZTE9DSyAqLworI2Vsc2UKK2NoYXIgKiB1dWNw bG9ja2RpciA9ICIiOworI2VuZGlmIC8qIE5PVVVDUCAqLworCisjaWZkZWYgUU5YCQkJCS8qIE9u bHkgZm9yIFFOWDQgKi8KK2ludAkJCQkJLyogVmlzaWJsZSB0byBvdXRzaWRlIHdvcmxkICovCitx bnhvcGVuY291bnQoKSB7CQkJLyogR2V0IFFOWCBkZXZpY2Ugb3BlbiBjb3VudCAqLworICAgIHN0 cnVjdCBfZGV2X2luZm9fZW50cnkgaW5mbzsKKyAgICBpbnQgeDsKKworICAgIHggPSAtMTsJCQkJ LyogVW5rbm93biAqLworICAgIGlmICh0dHlmZCA+IC0xKSB7CisJaWYgKCFkZXZfaW5mbyh0dHlm ZCwgJmluZm8pKSB7CisJICAgIGRlYnVnKEYxMDEsInR0bG9jayBRTlggb3Blbl9jb3VudCIsIiIs aW5mby5vcGVuX2NvdW50KTsKKwkgICAgeCA9IGluZm8ub3Blbl9jb3VudDsKKwl9CisgICAgfQor ICAgIHJldHVybih4KTsKK30KKyNlbmRpZiAvKiBRTlggKi8KKworY2hhciAqCit0dGdsY2tkaXIo KSB7CQkJCS8qIEdldCBMb2NrZmlsZSBkaXJlY3RvcnkgbmFtZSAqLworI2lmZGVmIF9fT3BlbkJT RF9fCisgICAgcmV0dXJuKCIvdmFyL3Nwb29sL2xvY2siKTsKKyNlbHNlIC8qIF9fT3BlbkJTRF9f ICovCisjaWZkZWYgX19GcmVlQlNEX18KKyAgICByZXR1cm4oIi92YXIvc3Bvb2wvbG9jayIpOwor I2Vsc2UgIC8qIF9fRnJlZUJTRF9fICovCisjaWZkZWYgTE9DS19ESVIKKyAgICBjaGFyICogcyA9 IExPQ0tfRElSOworI2VuZGlmIC8qIExPQ0tfRElSICovCisjaWZkZWYgTk9VVUNQCisgICAgcmV0 dXJuKCIiKTsKKyNlbHNlICAvKiBOT1VVQ1AgKi8KKyNpZmRlZiBMT0NLX0RJUgorICAgIHJldHVy bihzKTsKKyNlbHNlICAvKiBMT0NLX0RJUiAqLworICAgIHJldHVybigiIik7CisjZW5kaWYgLyog TE9DS19ESVIgKi8KKyNlbmRpZiAvKiBOT1VVQ1AgKi8KKyNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAq LworI2VuZGlmIC8qIF9fT3BlbkJTRF9fICovCit9CisKK3N0YXRpYyBpbnQKK3R0bG9jayh0dGRl dikgY2hhciAqdHRkZXY7IHsKKworICAgIGludCB4LCBuOworICAgIGludCBpc2xpbmsgPSAwOwor I2lmZGVmIF9fRnJlZUJTRF9fCisgICAgY2hhciAqZGV2bmFtZTsKKyNlbmRpZgkvKiBfX0ZyZWVC U0RfXyAqLworCisjaWZkZWYgTk9VVUNQCisgICAgZGVidWcoRjEwMCwidHRsb2NrIE5PVVVDUCIs IiIsMCk7CisgICAgY2tzdHJuY3B5KGZsZm5hbSwiTk9MT0NLIixGTEZOQU1MKTsKKyAgICBoYXNs b2NrID0gMTsKKyAgICByZXR1cm4oMCk7CisjZWxzZSAvKiAhTk9VVUNQICovCisKKyNpZmRlZiBV U0VUVFlMT0NLCisgICAgaGFzbG9jayA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90 IGxvY2tlZCB5ZXQuICovCisgICAgKmZsZm5hbSA9ICdcMCc7CQkJLyogTG9ja2ZpbGUgbmFtZSBp cyBlbXB0eS4gKi8KKyNpZmRlZiBfX0ZyZWVCU0RfXworICAgIGlmICgoZGV2bmFtZSA9IHh4bGFz dCh0dGRldiwnLycpKSAhPSBOVUxMKQorI2lmZGVmIEZSRUVCU0Q4CisgICAgICBja3N0cm5jYXQo bG9ja25hbWUsZGV2bmFtZSsxLERFVk5BTUxFTi1ja3N0cm5jcHkobG9ja25hbWUsInB0cyIsNCkp OworI2Vsc2UKKyAgICAgIGNrc3RybmNweShsb2NrbmFtZSxkZXZuYW1lKzEsREVWTkFNTEVOKTsK KyNlbmRpZgkvKiBGUkVFQlNEOCAqLworI2Vsc2UKKyAgICBpZiAoIXN0cm5jbXAodHRkZXYsIi9k ZXYvIiw1KSAmJiB0dGRldls1XSkKKyAgICAgIGNrc3RybmNweShsb2NrbmFtZSx0dGRldis1LERF Vk5BTUxFTik7CisjZW5kaWYJLyogX19GcmVlQlNEX18gKi8KKyAgICBlbHNlCisgICAgICBja3N0 cm5jcHkobG9ja25hbWUsdHRkZXYsREVWTkFNTEVOKTsKKy8qCisgIFRoaXMgbWlnaHQgYmUgb3Zl cmtpbGwsIGJ1dCBpdCdzIG5vdCBjbGVhciBmcm9tIHRoZSBtYW4gcGFnZXMgd2hldGhlcgorICB0 dHlsb2NrKCkgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGNhbGxpbmcgdHR5bG9ja2VkKCkgZmlyc3Qs IHNpbmNlIHRoZSBkb2MKKyAgc2F5cyB0aGF0IHR0eWxvY2tlZCgpIHJlbW92ZXMgYW55IHN0YWxl IGxvY2tmaWxlcywgYnV0IGl0IGRvZXMgbm90IHNheSB0aGlzCisgIGFib3V0IHR0eWxvY2soKS4g IEFsc28gdGhlIGRvY3MgZG9uJ3Qgc2F5IHdoYXQgdHR5bG9ja2VkKCkgcmV0dXJucyBpbiB0aGUK KyAgY2FzZSB3aGVuIGl0IGZpbmRzIGFuZCByZW1vdmVzIGEgc3RhbGUgbG9ja2ZpbGUuICBTbyBv bmUgb3IgYm90aCBjYWxscyB0bworICB0byB0dHlsb2NrZWQoKSBtaWdodCBiZSBzdXBlcmZsdW91 cywgYnV0IHRoZXkgc2hvdWxkIGRvIG5vIGhhcm0uICBBbHNvIEknbQorICBhc3N1bWluZyB0aGF0 IHdlIGhhdmUgdG8gZG8gYWxsIHRoZSBzYW1lIElEIHN3YXBwaW5nLCBldGMsIHdpdGggdGhlc2UK KyAgcm91dGluZXMgYXMgd2UgZG8gd2l0aG91dCB0aGVtLiAgVGh1cyB0aGUgcHJpdl9vbi9vZmYo KSBzYW5kd2ljaC4KKyovCisjaWZkZWYgVVNFX1VVX0xPQ0sKKyAgICBwcml2X29uKCk7CQkJCS8q IFR1cm4gb24gcHJpdnMgKi8KKyAgICB4ID0gdXVfbG9jayhsb2NrbmFtZSk7CQkvKiBUcnkgdG8g c2V0IHRoZSBsb2NrICovCisgICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBwcml2cyBvZmYgKi8K KyAgICBkZWJ1ZyhGMTExLCJ0dGxvY2sgdXVfbG9jayIsbG9ja25hbWUseCk7CisgICAgc3dpdGNo ICh4KSB7CisgICAgICBjYXNlIFVVX0xPQ0tfSU5VU0U6CisJcmV0dXJuKC0yKTsKKyAgICAgIGNh c2UgVVVfTE9DS19PSzoKKyNpZmRlZiBCU0Q0NAorCWNrbWFrbXNnKGZsZm5hbSxGTEZOQU1MLCIv dmFyL3Nwb29sL2xvY2svTENLLi4iLGxvY2tuYW1lLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogQlNE NDQgKi8KKwloYXNsb2NrID0gMTsKKwlyZXR1cm4oMCk7CisgICAgICBkZWZhdWx0OgorCXJldHVy bigtMSk7CisgICAgfQorI2Vsc2UgIC8qIFVTRV9VVV9MT0NLICovCisgICAgcHJpdl9vbigpOwkJ CQkvKiBUdXJuIG9uIHByaXZzICovCisgICAgaWYgKHR0eWxvY2tlZChsb2NrbmFtZSkpIHsJCS8q IFRoaXMgc2hvdWxkIHJlbW92ZSBhbnkgc3RhbGUgbG9jayAqLworCWlmICh0dHlsb2NrZWQobG9j a25hbWUpKSB7CS8qIHNvIGNoZWNrIGFnYWluLiAqLworCSAgICBwcml2X29mZigpOworCSAgICBy ZXR1cm4oLTUpOwkJCS8qIFN0aWxsIGxvY2tlZCwgZmFpbC4gKi8KKwl9CisgICAgfQorICAgIHgg PSB0dHlsb2NrKGxvY2tuYW1lKTsJCS8qIExvY2sgaXQuICovCisgICAgcHJpdl9vZmYoKTsJCQkJ LyogVHVybiBvZmYgcHJpdnMgKi8KKworICAgIGRlYnVnKEYxMTEsInR0bG9jayBsb2NrbmFtZSIs bG9ja25hbWUseCk7CisgICAgaWYgKHggPiAtMSkgeworCS8qCisJICBXZSBkb24ndCByZWFsbHkg a25vdyB0aGUgbmFtZSBvZiB0aGUgbG9ja2ZpbGUsIGJ1dAorCSAgdGhpcyBpcyB3aGF0IHRoZSBt YW4gcGFnZSBzYXlzIGl0IGlzLiAgSW4gVVNFVFRZTE9DSworICAgICAgICAgIGJ1aWxkcywgaXQg aXMgdXNlZCBvbmx5IGZvciBkaXNwbGF5IGJ5IFNIT1cgQ09NTS4KKwkqLworCWNrbWFrbXNnKGZs Zm5hbSxGTEZOQU1MLCIvZXRjL2xvY2tzL0xDSy4uIixsb2NrbmFtZSxOVUxMLE5VTEwpOworCWhh c2xvY2sgPSAxOworICAgIH0KKyAgICByZXR1cm4oeCk7CisjZW5kaWYgLyogVVNFX1VVX0xPQ0sg Ki8KKyNlbHNlICAvKiBTeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSB0dHlsb2NrKCkuLi4gKi8KKwor I2lmbmRlZiBIUFVYCisKKyAgICBpbnQgbG9ja2ZkOwkJCQkvKiBGaWxlIGRlc2NyaXB0b3IgZm9y IGxvY2sgZmlsZS4gKi8KKyAgICBQSURfVCBwaWQ7CQkJCS8qIFByb2Nlc3MgaWQgb2YgdGhpcyBw cm9jZXNzLiAqLworICAgIGludCB0cmllczsJCQkJLyogSG93IG1hbnkgdGltZXMgd2UndmUgdHJp ZWQuLi4gKi8KKyAgICBzdHJ1Y3Qgc3RhdCBkZXZidWY7CQkJLyogRm9yIGRldmljZSBudW1iZXJz IChTVlI0KS4gKi8KKworI2lmZGVmIFBJRFNUUklORworICAgIGNoYXIgcGlkX3N0clszMl07CQkJ LyogTXkgcGlkIGluIHN0cmluZyBmb3JtYXQuICovCisjZW5kaWYgLyogUElEU1RSSU5HICovCisK KyAgICBjaGFyICpkZXZpY2UsICpkZXZuYW1lOworCisjZGVmaW5lIExGTkFNTCAyNTYJCQkvKiBN YXggbGVuZ3RoIGZvciBsb2NrIGZpbGUgbmFtZS4gKi8KKyAgICBjaGFyIGxvY2tmaWxbTEZOQU1M XTsJCS8qIExvY2sgZmlsZSBuYW1lICovCisjaWZkZWYgUlRBSVgKKyAgICBjaGFyIGxrbG9ja2Zb TEZOQU1MXTsJCS8qIE5hbWUgZm9yIGxpbmsgdG8gbG9jayBmaWxlICAqLworI2VuZGlmIC8qIFJU QUlYICovCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgY2hhciBzeW1sb2NrW0xGTkFNTF07CQkvKiBO YW1lIGZvciBzeW1saW5rIGxvY2tmaWxlIG5hbWUgKi8KKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8K KyAgICBjaGFyIHRtcG5hbVtMRk5BTUwrMzBdOwkJLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUu ICovCisgICAgY2hhciAqbG9ja2RpciA9IExPQ0tfRElSOwkJLyogRGVmaW5lZCBuZWFyIHRvcCBv ZiB0aGlzIGZpbGUsICovCisJCQkJCS8qIG9yIG9uIGNjIGNvbW1hbmQgbGluZS4gKi8KKyAgICBo YXNsb2NrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgbG9ja2VkIHlldC4gKi8K KyAgICAqZmxmbmFtID0gJ1wwJzsJCQkvKiBMb2NrZmlsZSBuYW1lIGlzIGVtcHR5LiAqLworICAg IGxvY2syWzBdID0gJ1wwJzsJCQkvKiBDbGVhciBzZWNvbmRhcnkgbG9ja2ZpbGUgbmFtZS4gKi8K KyAgICBwaWQgPSBnZXRwaWQoKTsJCQkvKiBHZXQgaWQgb2YgdGhpcyBwcm9jZXNzLiAqLworCisv KiAgQ29uc3RydWN0IG5hbWUgb2YgbG9ja2ZpbGUgYW5kIHRlbXBvcmFyeSBmaWxlICovCisKKy8q ICBkZXZpY2UgID0gbmFtZSBvZiB0dHkgZGV2aWNlIHdpdGhvdXQgdGhlIHBhdGgsIGUuZy4gInR0 eWg4IiAqLworLyogIGxvY2tmaWwgPSBuYW1lIG9mIGxvY2sgZmlsZSwgd2l0aG91dCBwYXRoLCBl LmcuICJMQ0suLnR0eWg4IiAqLworCisgICAgZGV2aWNlID0gKChkZXZuYW1lID0geHhsYXN0KHR0 ZGV2LCcvJykpICE9IE5VTEwgPyBkZXZuYW1lKzEgOiB0dGRldik7CisKKyAgICBpZiAoc3RhdCh0 dGRldiwmZGV2YnVmKSA8IDApCisgICAgICByZXR1cm4oLTEpOworCisjaWZkZWYgQ0tTWU1MSU5L CisgICAgaXNsaW5rID0gMTsJCQkJLyogQXNzdW1lIGl0J3MgYSBzeW1saW5rICovCisgICAgbGlu a3RvWzBdID0gJ1wwJzsJCQkvKiBCdXQgd2UgZG9uJ3Qga25vdyB0byB3aGF0ICovCisjaWZkZWYg Q09NTUVOVAorLyoKKyAgVGhpcyBpcyB1bmRlcGVuZGFibGUuICBJZiBpdCB3b3JrZWQgaXQgd291 bGQgc2F2ZSB0aGUgcmVhZGxpbmsgY2FsbCBpZgorICB3ZSBrbmV3IHRoZSBkZXZpY2UgbmFtZSB3 YXMgbm90IGEgbGluay4KKyovCisjaWZkZWYgU19JU0xOSworICAgIGlzbGluayA9IFNfSVNMTkso ZGV2YnVmLnN0X21vZGUpOworICAgIGRlYnVnKEYxMDEsInR0bG9jayBzdGF0IFNfSVNMTksiLCIi LGlzbGluayk7CisjZW5kaWYgLyogU19JU0xOSyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICBpZiAoaXNsaW5rKSB7CisJbiA9IHJlYWRsaW5rKHR0ZGV2LGxpbmt0byxERVZOQU1MRU4pOyAv KiBTZWUgaWYgaXQncyBhIGxpbmsgKi8KKwlkZWJ1ZyhGMTExLCJ0dGxvY2sgcmVhZGxpbmsiLHR0 ZGV2LG4pOworCWlmIChuID4gLTEpCQkJLyogSXQgaXMgKi8KKwkgIGxpbmt0b1tuXSA9ICdcMCc7 CisJZWxzZQkJCQkvKiBJdCdzIG5vdCAqLworCSAgaXNsaW5rID0gMDsKKwlkZWJ1ZyhGMTExLCJ0 dGxvY2sgbGluayIsbGlua3RvLGlzbGluayk7CisgICAgfQorICAgIGlmIChpc2xpbmspIHsKKwls aW5rZGV2ID0gKGRldm5hbWUgPSB4eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFtZSArIDEgOiBs aW5rdG87CisJZGVidWcoRjExMCwidHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7CisgICAgfQor I2VuZGlmIC8qIENLU1lNTElOSyAqLworCisvKgorICBPbiBTQ08gcGxhdGZvcm1zLCBpZiB3ZSBk b24ndCBoYXZlIGEgc3ltbGluaywgdGhlbiBsZXQncyBwcmV0ZW5kIHRoZQorICBuYW1lIGdpdmVu IGZvciB0aGUgZGV2aWNlIGlzIGEgc3ltbGluaywgYmVjYXVzZSBsYXRlciB3ZSB3aWxsIGNoYW5n ZQorICB0aGUgbmFtZSBpZiBpdCBjb250YWlucyBhbnkgdXBwZXJjYXNlIGNoYXJhY3RlcnMuCisq LworI2lmZGVmIENLX1NDT1Y1CQkJCS8qIFNDTyBPcGVuIFNlcnZlciA1LjAgKi8KKyAgICBpZiAo IWlzbGluaykgeworCWlzbGluayA9IDE7CisJY2tzdHJuY3B5KGxpbmt0byx0dGRldixERVZOQU1M RU4pOworCWxpbmtkZXYgPSAoZGV2bmFtZSA9IHh4bGFzdChsaW5rdG8sJy8nKSkgPyBkZXZuYW1l ICsgMSA6IGxpbmt0bzsKKwlkZWJ1ZyhGMTEwLCJ0dGxvY2sgbGlua2RldiIsbGlua2RldiwwKTsK KyAgICB9CisjZWxzZQorI2lmZGVmIE1fWEVOSVgJCQkJLyogU0NPIFhlbml4IG9yIFVOSVggKi8K KyAgICBpZiAoIWlzbGluaykgeworCWlzbGluayA9IDE7CisJY2tzdHJuY3B5KGxpbmt0byx0dGRl dixERVZOQU1MRU4pOworCWxpbmtkZXYgPSAoZGV2bmFtZSA9IHh4bGFzdChsaW5rdG8sJy8nKSkg PyBkZXZuYW1lICsgMSA6IGxpbmt0bzsKKwlkZWJ1ZyhGMTEwLCJ0dGxvY2sgbGlua2RldiIsbGlu a2RldiwwKTsKKyAgICB9CisjZW5kaWYgLyogTV9YRU5JWCAqLworI2VuZGlmIC8qIENLX1NDT1Y1 ICovCisKKyNpZmRlZiBJU0lJSQkJCQkvKiBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJLCBQQy9JWCAq LworICAgIGNrc3RybmNweShsb2NrZmlsLCBkZXZpY2UsIERFVk5BTUxFTik7CisjZWxzZSAgLyog bm90IElTSUlJICovCisjaWZkZWYgTEZERVZOTwkJCQkvKiBMb2NrZmlsZW5hbWUgaGFzIGRldmlj ZSBudW1iZXJzLiAqLworI2lmZGVmIENPSEVSRU5UCisgICAgc3ByaW50Zihsb2NrZmlsLCJMQ0su LiVkLiVkIiwJLyogU0FGRSAqLworCSAgICBtYWpvcihkZXZidWYuc3RfcmRldiksCSAgIC8qIG1h am9yIGRldmljZSBudW1iZXIgKi8KKwkgICAgMHgxZiAmIG1pbm9yKGRldmJ1Zi5zdF9yZGV2KSk7 IC8qIG1pbm9yIGRldmljZSBudW1iZXIgKi8KKyNlbHNlCisgICAgLyogTm90ZTogJWQgY2hhbmdl ZCB0byAldSBpbiA4LjAgLS0gJXUgaXMgcGFydCBvZiBTVklEIGZvciBTVlI0ICovCisgICAgLyog TG9ja2ZpbGUgbmFtZSBmb3JtYXQgdmVyaWZpZWQgdG8gYWdyZWUgd2l0aCBTb2xhcmlzIGN1LCBE ZWMgMjAwMSAqLworICAgIHNwcmludGYobG9ja2ZpbCwiTEsuJTAzdS4lMDN1LiUwM3UiLCAvKiBT QUZFICovCisJICAgIG1ham9yKGRldmJ1Zi5zdF9kZXYpLAkvKiBkZXZpY2UgKi8KKwkgICAgbWFq b3IoZGV2YnVmLnN0X3JkZXYpLAkvKiBtYWpvciBkZXZpY2UgbnVtYmVyICovCisJICAgIG1pbm9y KGRldmJ1Zi5zdF9yZGV2KSk7CS8qIG1pbm9yIGRldmljZSBudW1iZXIgKi8KKyNlbmRpZiAvKiBD T0hFUkVOVCAqLworI2Vsc2UgIC8qIE5vdCBMRkRFVk5PICovCisjaWZkZWYgUFRYCQkJCS8qIER5 bml4IFBUWCAqLworICAgIGlmICgoZGV2aWNlICE9ICZ0dGRldls1XSkgJiYgKHN0cm5jbXAodHRk ZXYsIi9kZXYvIiw1KSA9PSAwKSkgeworCWlmICgoaW50KXN0cmxlbihkZXZpY2UpICsgOCA8IExG TkFNTCkKKwkgIHNwcmludGYobG9ja2ZpbCwiTENLLi4lLjNzJXMiLCAmdHRkZXZbNV0sIGRldmlj ZSk7CisJZWxzZQorCSAgY2tzdHJuY3B5KGxvY2tmaWwsIkxPQ0tGSUxFX05BTUVfVE9PX0xPTkci LExGTkFNTCk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogUFRYICovCisgICAgICBpZiAoKGludClz dHJsZW4oZGV2aWNlKSArIDUgPCBMRk5BTUwpCisJc3ByaW50Zihsb2NrZmlsLCJMQ0suLiVzIiwg ZGV2aWNlKTsKKyAgICAgIGVsc2UKKwlja3N0cm5jcHkobG9ja2ZpbCwiTE9DS0ZJTEVfTkFNRV9U T09fTE9ORyIsTEZOQU1MKTsKKyNpZmRlZiBSVEFJWAorICAgIGNrc3RybmNweShsa2xvY2tmLGRl dmljZSxERVZOQU1MRU4pOworI2VuZGlmIC8qIFJUQUlYICovCisjaWZkZWYgQ0tTWU1MSU5LCisg ICAgc3ltbG9ja1swXSA9ICdcMCc7CisgICAgaWYgKGlzbGluaykKKyAgICAgIGNrbWFrbXNnKHN5 bWxvY2ssTEZOQU1MLCAiTENLLi4iLCBsaW5rZGV2LCBOVUxMLCBOVUxMKTsKKyNlbmRpZiAvKiBD S1NZTUxJTksgKi8KKyNlbmRpZiAvKiBMRkRFVk5PICovCisjZW5kaWYgLyogSVNJSUkgKi8KKwor I2lmZGVmIENLX1NDT1Y1CQkJCS8qIFNDTyBPcGVuIFNlcnZlciA1LjAgKi8KKyAgICB7CisJLyog TG93ZXJjYXNlIHRoZSBlbnRpcmUgZmlsZW5hbWUuICovCisgICAgICAgIC8qIFNDTyBzYXlzIHdl IG11c3QgZG8gdGhpcyBpbiBWNS4wIGFuZCBsYXRlci4gKi8KKwkvKiBCVVQuLi4gd2F0Y2ggb3V0 IGZvciBkZXZpY2VzIC0tIGxpa2UgRGlnaWJvYXJkIFBvcnRzZXJ2ZXIgKi8KKwkvKiBUaGF0IGNh biBoYXZlIGh1bmRyZWRzIG9mIHBvcnRzLi4uICovCisJY2hhciAqcCA9IChjaGFyICopKGxvY2tm aWwgKyA1KTsKKwl3aGlsZSAoKnApIHsgaWYgKGlzdXBwZXIoKnApKSAqcCA9IChjaGFyKSB0b2xv d2VyKCpwKTsgcCsrOyB9CisgICAgfQorI2lmZGVmIENLU1lNTElOSworICAgIGlmIChpc2xpbmsp IHsJCQkvKiBJZiBubyBjaGFuZ2UgKi8KKwlpZiAoIXN0cmNtcChsb2NrZmlsLHN5bWxvY2spKSB7 CS8qIHRoZW4gbm8gc2Vjb25kIGxvY2tmaWxlIG5lZWRlZCAqLworCSAgICBpc2xpbmsgPSAwOwor CSAgICBzeW1sb2NrWzBdID0gJ1wwJzsKKwl9CisgICAgfQorI2VuZGlmIC8qIENLU1lNTElOSyAq LworI2Vsc2UKKyNpZmRlZiBNX1hFTklYCQkJCS8qIFNDTyBYZW5peCBvciBVTklYICovCisgICAg eworCWludCB4OyBjaGFyIGM7CisJeCA9IChpbnQpc3RybGVuKGxvY2tmaWwpIC0gMTsJLyogR2V0 IGxhc3QgbGV0dGVyIG9mIGRldmljZSBuYW1lLiAqLworCWlmICh4ID4gMCkgewkJCS8qIElmIGl0 J3MgdXBwZXJjYXNlLCBsb3dlciBpdC4gKi8KKwkgICAgYyA9IGxvY2tmaWxbeF07CisJICAgIGlm IChjID49ICdBJyAmJiBjIDw9ICdaJykgbG9ja2ZpbFt4XSArPSAoJ2EnIC0gJ0EnKTsKKwl9Cisg ICAgfQorI2lmZGVmIENLU1lNTElOSworICAgIGlmIChpc2xpbmspIHsKKwlpZiAoIXN0cmNtcChs b2NrZmlsLHN5bWxvY2spKSB7CS8qIE5vIGNoYW5nZSAqLworCSAgICBpc2xpbmsgPSAwOwkJCS8q IHNvIG5vIHNlY29uZCBsb2NrZmlsZSAqLworCSAgICBzeW1sb2NrWzBdID0gJ1wwJzsKKwl9Cisg ICAgfQorI2VuZGlmIC8qIENLU1lNTElOSyAqLworI2VuZGlmIC8qIE1fWEVOSVggKi8KKyNlbmRp ZiAvKiBDS19TQ09WNSAqLworCisvKiAgZmxmbmFtID0gZnVsbCBsb2NrZmlsZSBwYXRobmFtZSwg ZS5nLiAiL3Vzci9zcG9vbC91dWNwL0xDSy4udHR5aDgiICovCisvKiAgdG1wbmFtID0gdGVtcG9y YXJ5IHVuaXF1ZSwgZS5nLiAiL3Vzci9zcG9vbC91dWNwL0xUTVAuLnBpZCIgKi8KKworICAgIGNr bWFrbXNnKGZsZm5hbSxMRk5BTUwsbG9ja2RpciwiLyIsbG9ja2ZpbCxOVUxMKTsKKworI2lmZGVm IFJUQUlYCisgICAgY2ttYWttc2cobGtmbGZuLEZMRk5BTUwsbG9ja2RpciwiLyIsbGtsb2NrZixO VUxMKTsKKyNlbmRpZiAvKiBSVEFJWCAqLworCisjaWZuZGVmIExGREVWTk8KKyNpZmRlZiBDS1NZ TUxJTksKKyAgICAvKiBJZiBpdCdzIGEgbGluayB0aGVuIGFsc28gbWFrZSBhIGxvY2tmaWxlIGZv ciB0aGUgcmVhbCBuYW1lICovCisgICAgZGVidWcoRjExMSwidHRsb2NrIGxpbmsgc3ltbG9jayIs c3ltbG9jayxpc2xpbmspOworICAgIGlmIChpc2xpbmsgJiYgc3ltbG9ja1swXSkgeworCS8qIEJ1 dCBvbmx5IGlmIHRoZSBsb2NrZmlsZSBuYW1lcyB3b3VsZCBiZSBkaWZmZXJlbnQuICovCisJLyog V0FSTklORzogVGhleSB3b24ndCBiZSwgZS5nLiBmb3IgL2Rldi90dHlkMiA9PiAvaHcvdHR5cy90 dHlkMiAqLworCWNrbWFrbXNnKGxvY2syLEZMRk5BTUwsbG9ja2RpciwiLyIsc3ltbG9jayxOVUxM KTsKKwlkZWJ1ZyhGMTEwLCJ0dGxvY2sgbG9jazIiLGxvY2syLDApOworCWlmICghc3RyY21wKGxv Y2syLGZsZm5hbSkpIHsJLyogQXJlIGxvY2tmaWxlIG5hbWVzIHRoZSBzYW1lPyAqLworCSAgICBk ZWJ1ZyhGMTAwLCJ0dGxvY2sgbG9jazIgY2xlYXJlZCIsIiIsMCk7CisJICAgIGxvY2syWzBdID0g J1wwJzsJCS8qIENsZWFyIHNlY29uZGFyeSBsb2NrZmlsZSBuYW1lLiAqLworCX0KKyAgICB9Cisj ZW5kaWYgLyogQ0tTWU1MSU5LICovCisjZW5kaWYgLyogTEZERVZOTyAqLworCisgICAgc3ByaW50 Zih0bXBuYW0sIiVzL0xUTVAuJTA1ZCIsbG9ja2RpciwoaW50KSBwaWQpOyAvKiBzYWZlICovCisg ICAgZGVidWcoRjExMCwidHRsb2NrIGZsZm5hbSIsZmxmbmFtLDApOworICAgIGRlYnVnKEYxMTAs InR0bG9jayB0bXBuYW0iLHRtcG5hbSwwKTsKKworICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBv biBwcml2aWxlZ2VzIGlmIHBvc3NpYmxlLiAqLworICAgIGxvY2tmZCA9IGNyZWF0KHRtcG5hbSwg MDQ0NCk7CS8qIFRyeSB0byBjcmVhdGUgdGVtcCBsb2NrIGZpbGUuICovCisgICAgaWYgKGxvY2tm ZCA8IDApIHsJCQkvKiBDcmVhdGUgZmFpbGVkLiAqLworCWRlYnVnKEYxMTEsInR0bG9jayBjcmVh dCBmYWlsZWQiLHRtcG5hbSxlcnJubyk7CisJaWYgKGVycm5vID09IEVOT0VOVCkgeworCSAgICBw ZXJyb3IobG9ja2Rpcik7CisJICAgIHByaW50ZigiVVVDUCBub3QgaW5zdGFsbGVkIG9yIEtlcm1p dCBtaXNjb25maWd1cmVkXG4iKTsKKwl9IGVsc2UgeworCSAgICBpZiAoIXF1aWV0KQorCSAgICAg IHBlcnJvcihsb2NrZGlyKTsKKwkgICAgdW5saW5rKHRtcG5hbSk7CQkvKiBHZXQgcmlkIG9mIHRo ZSB0ZW1wb3JhcnkgZmlsZS4gKi8KKwl9CisJcHJpdl9vZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2 aWxlZ2VzISEhICovCisJcmV0dXJuKC0xKTsJCQkvKiBSZXR1cm4gZmFpbHVyZSBjb2RlLiAqLwor ICAgIH0KKy8qIE5vdyB3cml0ZSB0aGUgcGlkIGludG8gdGhlIHRlbXAgbG9ja2ZpbGUgaW4gdGhl IGFwcHJvcHJpYXRlIGZvcm1hdCAqLworCisjaWZkZWYgUElEU1RSSU5HCQkJLyogRm9yIEhvbmV5 IERhbkJlciBVVUNQLCAqLworICAgIHNwcmludGYoCQkJCS8qIHdyaXRlIFBJRCBhcyBkZWNpbWFs IHN0cmluZyAqLworCSAgICBwaWRfc3RyLAorI2lmZGVmIExJTlVYRlNTVE5ECQkJLyogVGhlICJM aW51eCBGaWxlIFN5c3RlbSBTdGFuZGFyZCIgKi8KKyNpZmRlZiBGU1NUTkQxMAkJCQkvKiBWZXJz aW9uIDEuMCBjYWxscyBmb3IgKi8KKwkgICAgIiUwMTBkXG4iLAkJCS8qIGxlYWRpbmcgemVyb3Mg Ki8KKyNlbHNlCQkJCQkvKiB3aGlsZSB2ZXJzaW9uIDEuMiBjYWxscyBmb3IgKi8KKwkgICAgIiUx MGRcbiIsCQkJLyogbGVhZGluZyBzcGFjZXMgKi8KKyNlbmRpZiAvKiBGU1NUTkQxMCAqLworI2Vs c2UKKyNpZmRlZiBDT0hFUkVOVAorCSAgICAiJWRcbiIsCQkJLyogd2l0aCBsZWFkaW5nIG5vdGhp bmcgKi8KKyNlbHNlCisJICAgICIlMTBkXG4iLAkJCS8qIHdpdGggbGVhZGluZyBibGFua3MgKi8K KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIExJTlVYRlNTVE5EICovCisJICAgIChp bnQpIHBpZAorCSAgICApOwkJCQkvKiBzYWZlICovCisgICAgd3JpdGUobG9ja2ZkLCBwaWRfc3Ry LCAxMSk7CisgICAgZGVidWcoRjExMSwidHRsb2NrIGhkYiBwaWQgc3RyaW5nIixwaWRfc3RyLChp bnQpIHBpZCk7CisKKyNlbHNlIC8qIE5vdCBQSURTVFJJTkcsIHVzZSBpbnRlZ2VyIFBJRCAqLwor CisgICAgd3JpdGUobG9ja2ZkLCAoY2hhciAqKSZwaWQsIHNpemVvZihwaWQpICk7CisgICAgZGVi dWcoRjEwMSwidHRsb2NrIHBpZCIsIiIsKGludCkgcGlkKTsKKworI2VuZGlmIC8qIFBJRFNUUklO RyAqLworCisvKiBOb3cgdHJ5IHRvIHJlbmFtZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSByZWFsIGxv Y2sgZmlsZSBuYW1lLiAqLworLyogVGhpcyB3aWxsIGZhaWwgaWYgYSBsb2NrIGZpbGUgb2YgdGhh dCBuYW1lIGFscmVhZHkgZXhpc3RzLiAgKi8KKworICAgIGNsb3NlKGxvY2tmZCk7CQkJLyogQ2xv c2UgdGhlIHRlbXAgbG9ja2ZpbGUuICovCisgICAgY2htb2QodG1wbmFtLDA0NDQpOwkJCS8qIFBl cm1pc3Npb24gZm9yIGEgdmFsaWQgbG9jay4gKi8KKyAgICB0cmllcyA9IDA7CisgICAgd2hpbGUg KCFoYXNsb2NrICYmIHRyaWVzKysgPCAyKSB7CisJaGFzbG9jayA9IChsaW5rKHRtcG5hbSxmbGZu YW0pID09IDApOyAvKiBDcmVhdGUgYSBsaW5rIHRvIGl0LiAqLworCWlmIChoYXNsb2NrKSB7CQkJ ICAgICAgLyogSWYgd2UgZ290IHRoZSBsb2NrZmlsZSAqLworI2lmZGVmIFJUQUlYCisJICAgIGxp bmsoZmxmbmFtLGxrZmxmbik7CisjZW5kaWYgLyogUlRBSVggKi8KKyNpZmRlZiBDS1NZTUxJTksK KyNpZm5kZWYgTEZERVZOTworCSAgICBpZiAoaXNsaW5rICYmIGxvY2syWzBdKQorCSAgICAgIGxp bmsoZmxmbmFtLGxvY2syKTsKKyNlbmRpZiAvKiBMRkRFVk5PICovCisjZW5kaWYgLyogQ0tTWU1M SU5LICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBDYW4ndCBkbyB0aGlzIGFueSBtb3JlIGJlY2F1 c2UgZGV2aWNlIGlzIG5vdCBvcGVuIHlldCBzbyBubyB0dHlmZC4gKi8KKyNpZmRlZiBMT0NLRgor LyoKKyAgQWR2aXNvcnkgZmlsZSBsb2NraW5nIHdvcmtzIG9uIFNWUjQsIHNvIHdlIHVzZSBpdC4g IEluIGZhY3QsIGl0IGlzCisgIG5lY2Vzc2FyeSBpbiBzb21lIGNhc2VzLCBlLmcuIHdoZW4gU0xJ UCBpcyBpbnZvbHZlZC4gIEJ1dCBpdCBzdGlsbCBkb2Vzbid0CisgIHNlZW0gdG8gcHJldmVudCBt dWx0aXBsZSB1c2VycyBhY2Nlc3NpbmcgdGhlIHNhbWUgZGV2aWNlIGJ5IGRpZmZlcmVudCBuYW1l cy4KKyovCisgICAgICAgICAgICB3aGlsZSAobG9ja2YodHR5ZmQsIEZfVExPQ0ssIDBMKSAhPSAw KSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwgInR0bG9jayBsb2NrZiByZXR1cm5zIGVy cm5vIiwgIiIsIGVycm5vKTsKKyAgICAgICAgICAgICAgICBpZiAoKCsrdHJpZXMgPj0gMykgfHwg KGVycm5vICE9IEVBR0FJTikpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHVubGluayhmbGZu YW0pOyAvKiByZW1vdmUgdGhlIGxvY2tmaWxlICovCisjaWZkZWYgUlRBSVgKKwkJICAgIHVubGlu ayhsa2ZsZm4pOwkvKiBBbmQgYW55IGxpbmtzIHRvIGl0Li4uICovCisjZW5kaWYgLyogUlRBSVgg Ki8KKyNpZmRlZiBDS1NZTUxJTksKKyNpZm5kZWYgTEZERVZOTworCQkgICAgaWYgKGlzbGluayAm JiBsb2NrMlswXSkKKwkJICAgICAgdW5saW5rKGxvY2syKTsJLyogZGl0dG8uLi4gKi8KKyNlbmRp ZiAvKiBMRkRFVk5PICovCisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsInR0bG9jayB1bmxpbmsiLGZsZm5hbSx4KTsKKyAgICAgICAgICAgICAg ICAgICAgaGFzbG9jayA9IDA7CisJCSAgICBicmVhazsKKwkJfQorICAgICAgICAgICAgICAgIHNs ZWVwKDIpOworCSAgICB9CisJICAgIGlmIChoYXNsb2NrKQkJLyogSWYgd2UgZ290IGFuIGFkdmlz b3J5IGxvY2sgKi8KKyNlbmRpZiAvKiBMT0NLRiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkg ICAgICBicmVhazsJCQkvKiBXZSdyZSBkb25lLiAqLworCisJfSBlbHNlIHsJCQkvKiBXZSBkaWRu J3QgY3JlYXRlIGEgbmV3IGxvY2tmaWxlLiAqLworCSAgICBwcml2X29mZigpOworCSAgICBpZiAo dHRjaGtwaWQoZmxmbmFtKSkgewkvKiBDaGVjayBleGlzdGluZyBsb2NrZmlsZSAqLworCQlwcml2 X29uKCk7CQkvKiBjYXVzZSB0dGNoa3BpZCB0dXJucyBwcml2X29mZi4uLiAqLworCQl1bmxpbmso dG1wbmFtKTsJCS8qIERlbGV0ZSB0aGUgdGVtcGZpbGUgKi8KKwkJZGVidWcoRjEwMCwidHRsb2Nr IGZvdW5kIHR0eSBsb2NrZWQiLCIiLDApOworCQlwcml2X29mZigpOwkJLyogVHVybiBvZmYgcHJp dnMgKi8KKwkJcmV0dXJuKC0yKTsJCS8qIENvZGUgZm9yIGRldmljZSBpcyBpbiB1c2UuICovCisJ ICAgIH0KKwkgICAgcHJpdl9vbigpOworCX0KKyAgICB9CisgICAgdW5saW5rKHRtcG5hbSk7CQkJ LyogVW5saW5rIChyZW1vdmUpIHRoZSB0ZW1wIGZpbGUuICovCisgICAgcHJpdl9vZmYoKTsJCQkJ LyogVHVybiBvZmYgcHJpdnMgKi8KKyAgICByZXR1cm4oaGFzbG9jayA/IDAgOiAtMSk7CQkvKiBS ZXR1cm4gbGluaydzIHJldHVybiBjb2RlLiAqLworCisjZWxzZSAvKiBIUFVYICovCisKKy8qCisg IEhQLVVYIGdldHMgaXRzIG93biBjb3B5IG9mIHRoaXMgcm91dGluZSwgbW9kZWxlZCBhZnRlciB0 aGUgb2JzZXJ2ZWQgYmVoYXZpb3IKKyAgb2YgdGhlIEhQLVVYICdjdScgcHJvZ3JhbS4gIEhQLVVY IHNlcmlhbCBkZXZpY2UgbmFtZXMgY29uc2lzdCBvZiBhIGJhc2UgbmFtZQorICBzdWNoIGFzICJ0 dHkiLCAidHR5ZCIsICJjdWEiLCAiY3VsIiwgImN1YWQiLCBvciAiY3VsZCIsIGZvbGxvd2VkIGJ5 IGEgdW5pdAorICBkZXNpZ25hdG9yIHdoaWNoIGlzIGEgc3RyaW5nIG9mIGRpZ2l0cywgcG9zc2li bHkgY29udGFpbmluZyBhbiBpbWJlZGRlZAorICBsZXR0ZXIgInAiLiAgRXhhbXBsZXMgKGZvciBi YXNlIG5hbWUgInR0eSIpOgorCisgICAgIC9kZXYvdHR5MCwgL2Rldi90dHkwMCwgZGV2L3R0eWQw MCwgL2Rldi90dHkwcDAKKworICBBY2NvcmRpbmcgdG8gdGhlIEhQLVVYIFVVQ1AgbWFudWFsIG9m IDE5ODgsIHRoZSAiMHAwIiBub3RhdGlvbiBoYXMgYmVlbgorICB1c2VkIG9uIFNlcmllcyA4MDAg c2luY2UgSFAtVVggMi4wMCwgYW5kIHRoZSAibm9uLXAiIG5vdGF0aW9uIHdhcyB1c2VkCisgIG9u IG90aGVyIG1vZGVscy4gIEluIEhQLVVYIDEwLjAwLCAiMHAwIiBub3RhdGlvbiB3YXMgYWRvcHRl ZCBmb3IgYWxsIG1vZGVscy4KKyAgSG93ZXZlciwgd2UgbWFrZSBhbmQgZW5mb3JjZSBubyBzdWNo IGRpc3RpbmN0aW9uczsgZWl0aGVyIG5vdGF0aW9uIGlzCisgIGFjY2VwdGVkIG9uIGFueSBtb2Rl bCBvciBIUC1VWCB2ZXJzaW9uIGFzIGEgdmFsaWQgdW5pdCBkZXNpZ25hdG9yLgorCisgIElmIGEg dmFsaWQgdW5pdCBpcyBzcGVjaWZpZWQgKGFzIG9wcG9zZWQgdG8gYSBkZXNpZ25lciBuYW1lIG9y IHN5bWxpbmspLCB3ZQorICBjaGVjayBmb3IgYWxsIGFsaWFzZXMgb2YgdGhlIGdpdmVuIHVuaXQg YWNjb3JkaW5nIHRvIHRoZSBkZXZwcmVmaXhbXSBhcnJheS4KKyAgSWYgbm8gbG9ja2ZpbGVzIGFy ZSBmb3VuZCBmb3IgdGhlIGdpdmVuIHVuaXQsIHdlIGNhbiBoYXZlIHRoZSBkZXZpY2U7IHdlCisg IGNyZWF0ZSBhIGxvY2tmaWxlIExDSy4ubmFtZSBpbiB0aGUgbG9ja2ZpbGUgZGlyZWN0b3J5IGFw cHJvcHJpYXRlIGZvciB0aGUKKyAgSFAtVVggdmVyc2lvbiAoL3Zhci9zcG9vbC9sb2NrcyBmb3Ig MTAuMDAgYW5kIGxhdGVyLCAvdXNyL3Nwb29sL3V1Y3AgZm9yCisgIDkueHggYW5kIGVhcmxpZXIp LiAgSWYgaXQgaXMgYSAiY3VhIiBvciAiY3VsIiBkZXZpY2UsIGEgc2Vjb25kIGxvY2tmaWxlIGlz CisgIGNyZWF0ZWQgd2l0aCB0aGUgInR0eWQiIHByZWZpeC4gIFRoaXMgaXMgZXhhY3RseSB3aGF0 IGN1IGRvZXMuCisKKyAgSWYgdGhlICJzZXQgbGluZSIgZGV2aWNlIGRvZXMgbm90IGhhdmUgYSB2 YWxpZCB1bml0IGRlc2lnbmF0b3IsIHRoZW4gaXQgaXMKKyAgdXNlZCBsaXRlcmFsbHkgYW5kIG5v IHN5bm9teW1zIGFyZSBzZWFyY2hlZCBmb3IgYW5kIG9ubHkgb25lIGxvY2tmaWxlIGlzCisgIGNy ZWF0ZWQuCisKKyAgLWZkYywgTWFyY2ggMTk5OC4KKyovCisjZGVmaW5lIExGTkFNTCA4MAkJCS8q IE1heCBsZW5ndGggZm9yIGxvY2sgZmlsZSBuYW1lLiAqLworCisgICAgaW50IGxvY2tmZDsJCQkJ LyogRmlsZSBkZXNjcmlwdG9yIGZvciBsb2NrIGZpbGUuICovCisgICAgUElEX1QgcGlkOwkJCQkv KiBQcm9jZXNzIElEIG9mIHRoaXMgcHJvY2Vzcy4gKi8KKyAgICBpbnQgZnBpZDsJCQkJLyogcGlk IGZvdW5kIGluIGV4aXN0aW5nIGxvY2tmaWxlLiAqLworICAgIGludCB0cmllczsJCQkJLyogSG93 IG1hbnkgdGltZXMgd2UndmUgdHJpZWQuLi4gKi8KKyAgICBpbnQgaSwgazsJCQkJLyogV29ya2Vy cyAqLworCisgICAgY2hhciAqZGV2aWNlLCAqZGV2bmFtZTsJCS8qICIvZGV2L3h4eCIsICJ4eHgi ICovCisgICAgY2hhciAqdW5pdCwgKnA7CQkJLyogPGluc3RhbmNlPnA8cG9ydD4gcGFydCBvZiB4 eHggKi8KKworICAgIGNoYXIgbG9ja2ZpbFtMRk5BTUxdOwkJLyogTG9ja2ZpbGUgbmFtZSAobm8g cGF0aCkgKi8KKyAgICBjaGFyIHRtcG5hbVtMRk5BTUxdOwkJLyogVGVtcG9yYXJ5IGxvY2tmaWxl IG5hbWUuICovCisKKyNpZmRlZiBIUFVYMTAJCQkJLyogTG9ja2ZpbGUgZGlyZWN0b3J5ICovCisg ICAgY2hhciAqbG9ja2RpciA9ICIvdmFyL3Nwb29sL2xvY2tzIjsJLyogQWx3YXlzIHRoaXMgZm9y IDEwLjAwIGFuZCBoaWdoZXIgKi8KKyNlbHNlICAvKiBIUC1VWCA5Lnh4IGFuZCBiZWxvdyAqLwor I2lmZGVmIExPQ0tfRElSCisgICAgY2hhciAqbG9ja2RpciA9IExPQ0tfRElSOwkJLyogRGVmaW5l ZCBuZWFyIHRvcCBvZiB0aGlzIGZpbGUgKi8KKyNlbHNlCisgICAgY2hhciAqbG9ja2RpciA9ICIv dXNyL3Nwb29sL3V1Y3AiOwkvKiBvciBub3QuLi4gKi8KKyNlbmRpZiAvKiBMT0NLX0RJUiAqLwor I2VuZGlmIC8qIEhQVVgxMCAqLworCisgICAgaGFzbG9jayA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogTm90IGxvY2tlZCB5ZXQuICovCisgICAgKmZsZm5hbSA9ICdcMCc7CQkJLyogTG9j a2ZpbGUgbmFtZSBpcyBlbXB0eS4gKi8KKyAgICBsb2NrMlswXSA9ICdcMCc7CQkJLyogU2Vjb25k IG9uZSB0b28uICovCisgICAgcGlkID0gZ2V0cGlkKCk7CQkJLyogR2V0IG15IHByb2Nlc3MgSUQg Ki8KKy8qCisgIENvbnN0cnVjdCBuYW1lIG9mIGxvY2tmaWxlIGFuZCB0ZW1wb3JhcnkgZmlsZS4u LgorICBkZXZpY2UgID0gbmFtZSBvZiB0dHkgZGV2aWNlIHdpdGhvdXQgdGhlIHBhdGgsIGUuZy4g InR0eTBwMCIKKyAgbG9ja2ZpbCA9IG5hbWUgb2YgbG9jayBmaWxlLCB3aXRob3V0IHBhdGgsIGUu Zy4gIkxDSy4udHR5MHAwIgorKi8KKyAgICBkZXZpY2UgPSAoKGRldm5hbWUgPSB4eGxhc3QodHRk ZXYsJy8nKSkgIT0gTlVMTCA/IGRldm5hbWUrMSA6IHR0ZGV2KTsKKyAgICBkZWJ1ZyhGMTEwLCJU VExPQ0sgZGV2aWNlIixkZXZpY2UsMCk7CisgICAgY2ttYWttc2cobG9ja2ZpbCxMRk5BTUwsIkxD Sy4uIixkZXZpY2UsTlVMTCxOVUxMKTsKKworICAgIGsgPSAwOwkJCQkvKiBBc3N1bWUgZGV2aWNl IGlzIG5vdCBsb2NrZWQgKi8KKyAgICBuID0gMDsJCQkJLyogRGlnaXQgY291bnRlciAqLworICAg IHVuaXQgPSBkZXZpY2U7CQkJLyogVW5pdCA9IDxpbnN0YW5jZT5wPHBvcnQ+ICovCisgICAgd2hp bGUgKCp1bml0ICYmICFpc2RpZ2l0KCp1bml0KSkJLyogU2VhcmNoIGZvciBkaWdpdC4uLiAqLwor ICAgICAgdW5pdCsrOworICAgIHAgPSB1bml0OwkJCQkvKiBWZXJpZnkgPG51bT5wPG51bT4gZm9y bWF0Li4uICovCisgICAgZGVidWcoRjExMCwiVFRMT0NLIHVuaXQgMSIsdW5pdCwwKTsKKy8qCisg IFRoZSB1bml0IG51bWJlciBpcyByZWNvZ25pemVkIGFzOgorICAoYSkgYW55IHNlcXVlbmNlIG9m IGRpZ2l0cyB0aGF0IHJ1bnMgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorICAoYikgYW55IChh KSB0aGF0IGluY2x1ZGVzIG9uZSBhbmQgb25seSBvbmUgbGV0dGVyICJwIiwgd2l0aCBhdCBsZWFz dAorICAgICAgb25lIGRpZ2l0IGJlZm9yZSBhbmQgYWZ0ZXIgaXQuCisqLworICAgIHdoaWxlIChp c2RpZ2l0KCpwKSkgcCsrLCBuKys7CS8qIEdldCBhIHJ1biBvZiBkaWdpdHMgKi8KKyAgICBpZiAo KnAgJiYgbiA+IDApIHsJCQkvKiBIYXZlIGEgInAiPyAqLworCWlmICgqcCA9PSAncCcgJiYgaXNk aWdpdCgqKHArMSkpKSB7CisJICAgIHArKzsKKwkgICAgbiA9IDA7CisJICAgIHdoaWxlIChpc2Rp Z2l0KCpwKSkgcCsrLCBuKys7CisJfQorICAgIH0KKyAgICBpZiAobiA9PSAwIHx8ICpwKSB1bml0 ID0gIiI7CisgICAgZGVidWcoRjExMCwiVFRMT0NLIHVuaXQgMiIsdW5pdCwwKTsKKworICAgIGlm ICgqdW5pdCkgewkJCS8qIERldmljZSBuYW1lIGhhcyB1bml0IG51bWJlci4gKi8KKwkvKiBUaGUg Zm9sbG93aW5nIGxvb3Agbm90IG9ubHkgc2VhcmNoZXMgZm9yIHRoZSB2YXJpb3VzIGxvY2tmaWxl ICAgICovCisJLyogc3lub255bXMsIGJ1dCBhbHNvIHJlbW92ZXMgYWxsIC0tIG5vdCBqdXN0IG9u ZSAtLSBzdGFsZSBsb2NrZmlsZSAqLworCS8qIGZvciB0aGUgZGV2aWNlLCBzaG91bGQgdGhlcmUg YmUgbW9yZSB0aGFuIG9uZS4gIFNlZSB0dGNoa3BpZCgpLiAgKi8KKwl0dHlkZXhpc3RzID0gMDsK Kwlmb3IgKGkgPSAwOyAqZGV2cHJlZml4W2ldOyBpKyspIHsgLyogRm9yIGVhY2ggZHJpdmVyLi4u ICovCisJICAgIC8qIE1ha2UgZGV2aWNlIG5hbWUgKi8KKwkgICAgY2ttYWttc2cobG9jazIsRkxG TkFNTCwiL2Rldi8iLGRldnByZWZpeFtpXSx1bml0LE5VTEwpOworCSAgICBwcml2X29uKCk7CQkJ LyogUHJpdnMgb24gKi8KKwkgICAgayA9IHpjaGtpKGxvY2syKSAhPSAtMTsJLyogU2VlIGlmIGRl dmljZSBleGlzdHMgKi8KKwkgICAgcHJpdl9vZmYoKTsJCQkvKiBQcml2cyBvZmYgKi8KKwkgICAg ZGVidWcoRjExMSwiVFRMT0NLIGV4aXN0Iixsb2NrMixrKTsKKyAgICAgICAgICAgIGlmIChrKSB7 CisJCWlmICghc3RyY21wKGRldnByZWZpeFtpXSwidHR5ZCIpKSAvKiB0dHlkIGRldmljZSBleGlz dHMgKi8KKwkJICB0dHlkZXhpc3RzID0gMTsKKwkJLyogTWFrZSBsb2NrZmlsZSBuYW1lICovCisJ CWNrbWFrbXNnKGxvY2syLEZMRk5BTUwsbG9ja2RpciwiL0xDSy4uIixkZXZwcmVmaXhbaV0sdW5p dCk7CisJCWRlYnVnKEYxMTAsIlRUTE9DSyBjaGVja2luZyIsbG9jazIsMCk7CisJCXByaXZfb24o KTsJCS8qIFByaXZzIG9uICovCisJCWsgPSB6Y2hraShsb2NrMikgIT0gLTE7CS8qIFNlZSBpZiBs b2NrZmlsZSBleGlzdHMgKi8KKwkJcHJpdl9vZmYoKTsJCS8qIFByaXZzIG9mZiAqLworCQlkZWJ1 ZyhGMTExLCJUVExPQ0sgY2hlY2sgZm9yIGxvY2sgQSIsbG9jazIsayk7CisJCWlmIChrKSBpZiAo dHRjaGtwaWQobG9jazIpKSB7IC8qIElmIHBpZCBzdGlsbCBhY3RpdmUsIGZhaWwuICovCisJCSAg ICBja3N0cm5jcHkoZmxmbmFtLGxvY2syLEZMRk5BTUwpOworCQkgICAgcmV0dXJuKC0yKTsKKwkJ fQorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIFNvbWUgb3RoZXIgZGV2aWNlLW5hbWUg Zm9ybWF0ICovCisJLyogVGhpcyB0YWtlcyBjYXJlIG9mIHN5bWJvbGljIGxpbmtzLCBldGMuLi4g Ki8KKwkvKiBCdXQgZG9lcyBub3QgY2hhc2UgdGhlbSBkb3duISAqLworCWNrbWFrbXNnKGxvY2sy LEZMRk5BTUwsbG9ja2RpciwiL0xDSy4uIixkZXZpY2UsTlVMTCk7CisJcHJpdl9vbigpOworCWsg PSB6Y2hraShsb2NrMikgIT0gLTE7CQkvKiBDaGVjayBmb3IgZXhpc3RpbmcgbG9ja2ZpbGUgKi8K Kwlwcml2X29mZigpOworCWRlYnVnKEYxMTEsIlRUTE9DSyBjaGVjayBmb3IgbG9jayBCIixsb2Nr MixrKTsKKwlpZiAoaykgaWYgKHR0Y2hrcGlkKGxvY2syKSkgewkvKiBDaGVjayBwaWQgZnJvbSBs b2NrZmlsZSAqLworCSAgICBja3N0cm5jcHkoZmxmbmFtLGxvY2syLEZMRk5BTUwpOworCSAgICBk ZWJ1ZyhGMTEwLCJUVExPQ0sgaW4gdXNlIixkZXZpY2UsMCk7CisJICAgIGRlYnVnKEYxMDEsIlRU TE9DSyByZXR1cm5zIiwiIiwtMik7CisJICAgIHJldHVybigtMik7CisJfQorICAgIH0KKy8qCisg IEdldCBoZXJlIG9ubHkgaWYgdGhlcmUgaXMgbm8gKG1vcmUpIGxvY2tmaWxlLCBzbyBub3cgd2Ug bWFrZSBvbmUgKG9yIHR3bykuLi4KKyAgZmxmbmFtID0gZnVsbCBsb2NrZmlsZSBwYXRobmFtZSwg ZS5nLiAiL3Vzci9zcG9vbC91dWNwL0xDSy4uY3VsMHAwIi4KKyAgdG1wbmFtID0gdW5pcXVlIHRl bXBvcmFyeSBmaWxuYW1lLCBlLmcuICIvdXNyL3Nwb29sL3V1Y3AvTFRNUC4ucGlkIi4KKyovCisg ICAgY2ttYWttc2coZmxmbmFtLEZMRk5BTUwsbG9ja2RpciwiLyIsbG9ja2ZpbCxOVUxMKTsgLyog U0VUIExJTkUgZGV2aWNlICovCisKKyAgICAvKiBJZiBkaWFsb3V0IGRldmljZSwgYWxzbyBtYWtl IG9uZSBmb3IgY29ycmVzcG9uZGluZyBkaWFsaW4gZGV2aWNlICovCisgICAgbG9jazJbMF0gPSAn XDAnOworICAgIGlmICghc3RybmNtcChkZXZpY2UsImN1IiwyKSAmJiAqdW5pdCAmJiB0dHlkZXhp c3RzKQorICAgICAgY2ttYWttc2cobG9jazIsRkxGTkFNTCxsb2NrZGlyLCIvTENLLi50dHlkIix1 bml0LE5VTEwpOworCisgICAgaWYgKChpbnQpc3RybGVuKGxvY2tkaXIpKzEyIDwgTEZOQU1MKQor ICAgICAgc3ByaW50Zih0bXBuYW0sIiVzL0xUTVAuJTA1ZCIsbG9ja2RpciwoaW50KSBwaWQpOyAv KiBNYWtlIHRlbXAgbmFtZSAqLworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRl YnVnKEYxMTAsIlRUTE9DSyBmbGZuYW0iLGZsZm5hbSwwKTsKKwlkZWJ1ZyhGMTEwLCJUVExPQ0sg bG9jazIiLGxvY2syLDApOworCWRlYnVnKEYxMTAsIlRUTE9DSyB0bXBuYW0iLHRtcG5hbSwwKTsK KyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKy8qCisgICBMb2NrZmlsZSBwZXJtaXNzaW9ucy4u LgorICAgNDQ0IGlzIHN0YW5kYXJkLCBIUC1VWCAxMC4wMCB1c2VzIDY2NC4gIEl0IGRvZXNuJ3Qg bWF0dGVyLgorICAgS2VybWl0IHVzZXMgNDQ0OyB0aGUgZGlmZmVyZW5jZSBsZXRzIHVzIHRlbGwg d2hldGhlciBLZXJtaXQgY3JlYXRlZAorICAgdGhlIGxvY2sgZmlsZS4KKyovCisgICAgcHJpdl9v bigpOwkJCQkvKiBUdXJuIG9uIHByaXZpbGVnZXMuICovCisgICAgbG9ja2ZkID0gY3JlYXQodG1w bmFtLCAwNDQ0KTsJLyogVHJ5IHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZS4gKi8KKyAgICBpZiAo bG9ja2ZkIDwgMCkgewkJCS8qIENyZWF0ZSBmYWlsZWQuICovCisJZGVidWcoRjExMSwiVFRMT0NL IGNyZWF0IGZhaWxlZCIsdG1wbmFtLGVycm5vKTsKKwlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJ ICAgIHBlcnJvcihsb2NrZGlyKTsKKwkgICAgcHJpbnRmKCJVVUNQIG5vdCBpbnN0YWxsZWQgb3Ig S2VybWl0IG1pc2NvbmZpZ3VyZWRcbiIpOworCX0gZWxzZSB7CisJICAgIGlmICghcXVpZXQpCisJ ICAgICAgcGVycm9yKGxvY2tkaXIpOworCSAgICB1bmxpbmsodG1wbmFtKTsJCS8qIEdldCByaWQg b2YgdGhlIHRlbXBvcmFyeSBmaWxlLiAqLworCX0KKwlwcml2X29mZigpOwkJCS8qIFR1cm4gb2Zm IHByaXZpbGVnZXMhISEgKi8KKwlkZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0dXJucyIsIiIsLTEpOwor CXJldHVybigtMSk7CQkJLyogUmV0dXJuIGZhaWx1cmUgY29kZS4gKi8KKyAgICB9CisgICAgZGVi dWcoRjExMCwiVFRMT0NLIHRlbXAgb2siLHRtcG5hbSwwKTsKKworLyogTm93IHdyaXRlIG91ciBw aWQgaW50byB0aGUgdGVtcCBsb2NrZmlsZSBpbiBpbnRlZ2VyIGZvcm1hdC4gKi8KKworICAgIGkg PSB3cml0ZShsb2NrZmQsIChjaGFyICopJnBpZCwgc2l6ZW9mKHBpZCkpOworCisjaWZkZWYgREVC VUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEwMSwiVFRMT0NLIHBpZCIsIiIscGlkKTsK KwlkZWJ1ZyhGMTAxLCJUVExPQ0sgc2l6ZW9mIHBpZCIsIiIsc2l6ZW9mKHBpZCkpOworCWRlYnVn KEYxMDEsIlRUTE9DSyB3cml0ZSBwaWQgcmV0dXJucyIsIiIsaSk7CisgICAgfQorI2VuZGlmIC8q IERFQlVHICovCisKKy8qCisgIE5vdyB0cnkgdG8gcmVuYW1lIHRoZSB0ZW1wb3JhcnkgZmlsZSB0 byB0aGUgcmVhbCBsb2NrZmlsZSBuYW1lLgorICBUaGlzIHdpbGwgZmFpbCBpZiBhIGxvY2sgZmls ZSBvZiB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMsIHdoaWNoCisgIHdpbGwgY2F0Y2ggcmFjZSBj b25kaXRpb25zIHdpdGggb3RoZXIgdXNlcnMuCisqLworICAgIGNsb3NlKGxvY2tmZCk7CQkJLyog Q2xvc2UgdGhlIHRlbXAgbG9ja2ZpbGUuICovCisgICAgY2htb2QodG1wbmFtLDA0NDQpOworCisg ICAgdHJpZXMgPSAwOworICAgIHdoaWxlICghaGFzbG9jayAmJiB0cmllcysrIDwgMikgeworCWhh c2xvY2sgPSAobGluayh0bXBuYW0sZmxmbmFtKSA9PSAwKTsgLyogQ3JlYXRlIGEgbGluayB0byBp dC4gKi8KKwlkZWJ1ZyhGMTAxLCJUVExPQ0sgbGluayIsIiIsaGFzbG9jayk7CisJaWYgKGhhc2xv Y2spIHsJCQkvKiBJZiB3ZSBtYWRlIHRoZSBsb2NrZmlsZS4uLiAqLworCisjaWZkZWYgQ09NTUVO VAorLyogV2UgY2FuJ3QgZG8gdGhpcyBhbnkgbW9yZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBm aWxlIGRlc2NyaXB0b3IgeWV0LiAqLworI2lmZGVmIExPQ0tGCQkJCS8qIENhbiBiZSBjYW5jZWxl ZCB3aXRoIC1ETk9MT0NLRiAqLworLyoKKyAgQ3JlYXRlIGFuIGFkdmlzb3J5IGxvY2sgb24gdGhl IGRldmljZSB0aHJvdWdoIGl0cyBmaWxlIGRlc2NyaXB0b3IuCisgIFRoaXMgY29kZSBhY3R1YWxs eSBzZWVtcyB0byB3b3JrLiAgSWYgaXQgaXMgZXhlY3V0ZWQsIGFuZCB0aGVuIGFub3RoZXIKKyAg cHJvY2VzcyB0cmllcyB0byBvcGVuIHRoZSBzYW1lIGRldmljZSB1bmRlciBhIGRpZmZlcmVudCBu YW1lIHRvIGNpcmN1bXZlbnQKKyAgdGhlIGxvY2tmaWxlLCB0aGV5IGdldCBhICJkZXZpY2UgYnVz eSIgZXJyb3IuCisqLworCSAgICBkZWJ1ZyhGMTAwLCJUVExPQ0sgTE9DS0YgY29kZS4uLiIsIiIs MCk7CisgICAgICAgICAgICB3aGlsZSAoIGxvY2tmKHR0eWZkLCBGX1RMT0NLLCAwTCkgIT0gMCAp IHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCAiVFRMT0NLIGxvY2tmIGVycm9yIiwgIiIs IGVycm5vKTsKKyAgICAgICAgICAgICAgICBpZiAoKCsrdHJpZXMgPj0gMykgfHwgKGVycm5vICE9 IEVBR0FJTikpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHVubGluayhmbGZuYW0pOyAvKiBS ZW1vdmUgdGhlIGxvY2tmaWxlICovCisJCSAgICBpZiAoZXJybm8gPT0gRUFDQ0VTICYmICFxdWll dCkKKwkJICAgICAgcHJpbnRmKCJEZXZpY2UgYWxyZWFkeSBsb2NrZWQgYnkgYW5vdGhlciBwcm9j ZXNzXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgaGFzbG9jayA9IDA7CisJCSAgICBicmVhazsK KwkJfQorICAgICAgICAgICAgICAgIHNsZWVwKDIpOworCSAgICB9CisjZW5kaWYgLyogTE9DS0Yg Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKwkgICAgaWYgKGhhc2xvY2spIHsJCS8qIElmIHdl IG1hZGUgdGhlIGxvY2tmaWxlIC4uLiAqLworCQlpZiAobG9jazJbMF0pIHsJCS8qIGlmIHRoZXJl IGlzIHRvIGJlIGEgMm5kIGxvY2tmaWxlICovCisJCSAgICBsb2NrZmQgPSBjcmVhdChsb2NrMiwg MDQ0NCk7IC8qIENyZWF0ZSBpdCAqLworCQkgICAgZGVidWcoRjExMSwiVFRMT0NLIGxvY2syIGNy ZWF0IiwgbG9jazIsIGxvY2tmZCk7CisJCSAgICBpZiAobG9ja2ZkID4gLTEpIHsJLyogQ3JlYXRl ZCBPSywgd3JpdGUgcGlkLiAqLworCQkJd3JpdGUobG9ja2ZkLCAoY2hhciAqKSZwaWQsIHNpemVv ZihwaWQpICk7CisJCQljbG9zZShsb2NrZmQpOwkvKiBDbG9zZSBhbmQgKi8KKwkJCWNobW9kKGxv Y2syLCAwNDQ0KTsgLyogc2V0IHBlcm1pc3Npb25zLiAqLworCQkgICAgfSBlbHNlIHsJCSAvKiBO b3QgT0ssIGJ1dCBkb24ndCBmYWlsLiAqLworCQkJbG9jazJbMF0gPSAnXDAnOyAvKiBKdXN0IHJl bWVtYmVyIGl0J3Mgbm90IHRoZXJlLiAqLworCQkgICAgfQorCQl9CisJCWJyZWFrOwkJCS8qIGFu ZCB3ZSdyZSBkb25lLiAqLworCSAgICB9CisJfQorICAgIH0KKyAgICB1bmxpbmsodG1wbmFtKTsJ CQkvKiBVbmxpbmsgKHJlbW92ZSkgdGhlIHRlbXAgZmlsZS4gKi8KKyAgICBwcml2X29mZigpOwkJ CQkvKiBUdXJuIG9mZiBwcml2cyAqLworICAgIGkgPSBoYXNsb2NrID8gMCA6IC0xOwkJLyogT3Vy IHJldHVybiB2YWx1ZSAqLworICAgIGRlYnVnKEYxMDEsIlRUTE9DSyByZXR1cm5zIiwiIixpKTsK KyAgICByZXR1cm4oaSk7CisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIFVTRVRUWUxPQ0sg Ki8KKyNlbmRpZiAvKiAhTk9VVUNQICovCit9CisKKy8qICBUIFQgVSBOIEwgTyBDIEsgICovCisK K3N0YXRpYyBpbnQKK3R0dW5sY2soKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZW1vdmUgVVVDUCBsb2NrZmlsZShzKS4gKi8KKyNpZm5kZWYgTk9VVUNQCisgICAgaW50IHg7CisK KyAgICBkZWJ1ZyhGMTExLCJ0dHVubGNrIixmbGZuYW0saGFzbG9jayk7CisKKyNpZmRlZiBVU0VU VFlMT0NLCisKKyAgICBpZiAoaGFzbG9jayAmJiAqZmxmbmFtKSB7CisJaW50IHg7CisJcHJpdl9v bigpOwkJCS8qIFR1cm4gb24gcHJpdnMgKi8KKyNpZmRlZiBVU0VfVVVfTE9DSworCXggPSB1dV91 bmxvY2sobG9ja25hbWUpOworI2Vsc2UgIC8qIFVTRV9VVV9MT0NLICovCisJeCA9IHR0eXVubG9j ayhsb2NrbmFtZSk7CS8qIFRyeSB0byB1bmxvY2sgKi8KKyNlbmRpZiAvKiBVU0VfVVVfTE9DSyAq LworCXByaXZfb2ZmKCk7CQkJLyogVHVybiBvZmYgcHJpdnMgKi8KKwlpZiAoeCA8IDAgJiYgIXF1 aWV0KQorCSAgcHJpbnRmKCJXYXJuaW5nIC0gQ2FuJ3QgcmVtb3ZlIGxvY2tmaWxlOiAlc1xuIiwg ZmxmbmFtKTsKKworCSpmbGZuYW0gPSAnXDAnOwkJCS8qIEVyYXNlIHRoZSBuYW1lLiAqLworCWhh c2xvY2sgPSAwOworCXJldHVybigwKTsKKyAgICB9CisKKyNlbHNlICAvKiBObyB0dHlsb2NrKCku Li4gKi8KKworICAgIGlmIChoYXNsb2NrICYmICpmbGZuYW0pIHsKKwkvKiBEb24ndCByZW1vdmUg bG9ja2ZpbGUgaWYgd2UgZGlkbid0IG1ha2UgaXQgb3Vyc2VsdmVzICovCisJaWYgKCh4ID0gdHRy cGlkKGZsZm5hbSkpICE9IChpbnQpZ2V0cGlkKCkpIHsKKwkgICAgZGVidWcoRjExMSwidHR1bmxj ayBsb2NrZmlsZSBzZWl6ZWQiLGZsZm5hbSx4KTsKKwkgICAgcHJpbnRmKCJXYXJuaW5nIC0gTG9j a2ZpbGUgJXMgc2VpemVkIGJ5IHBpZCAlZFxuIiwKKwkJICAgZmxmbmFtLAorCQkgICB4CisJCSAg ICk7CisJICAgIHJldHVybigwKTsKKwl9CisJcHJpdl9vbigpOwkJCS8qIFR1cm4gcHJpdmlsZWdl cyBvbi4gICovCisJZXJybm8gPSAwOworCXggPSB1bmxpbmsoZmxmbmFtKTsJCS8qIFJlbW92ZSB0 aGUgbG9ja2ZpbGUuICovCisJZGVidWcoRjExMSwidHR1bmxjayB1bmxpbmsiLGZsZm5hbSx4KTsK KwlpZiAoeCA8IDApIHsKKwkgICAgaWYgKGVycm5vICYmICFxdWlldCkKKwkgICAgICBwZXJyb3Io dHRubXN2KTsKKwkgICAgcHJpbnRmKCJXYXJuaW5nIC0gQ2FuJ3QgcmVtb3ZlIGxvY2tmaWxlOiAl c1xuIiwgZmxmbmFtKTsKKwl9CisJaGFzbG9jayA9IDA7CisJKmZsZm5hbSA9ICdcMCc7CQkJLyog RXJhc2UgdGhlIG5hbWUuICovCisKKyNpZmRlZiBSVEFJWAorCWVycm5vID0gMDsKKwl4ID0gdW5s aW5rKGxrZmxmbik7CQkvKiBSZW1vdmUgbGluayB0byBsb2NrZmlsZSAqLworCWRlYnVnKEYxMTEs InR0dW5sY2sgQUlYIGxpbmsgdW5saW5rIixsa2ZsZm4seCk7CisJaWYgKHggPCAwKSB7CisJICAg IGlmIChlcnJubyAmJiAhcXVpZXQpCisJICAgICAgcGVycm9yKHR0bm1zdik7CisJICAgIHByaW50 ZigiV2FybmluZyAtIENhbid0IHJlbW92ZSBsaW5rIHRvIGxvY2tmaWxlOiAlc1xuIiwgbGtmbGZu KTsKKwl9CisJKmxrZmxmbiA9ICdcMCc7CisjZWxzZQorCWlmIChsb2NrMlswXSkgewkJCS8qIElm IHRoZXJlIGlzIGEgc2Vjb25kIGxvY2tmaWxlLCAqLworCSAgICBlcnJubyA9IDA7CisJICAgIHgg PSB1bmxpbmsobG9jazIpOwkJLyogIHJlbW92ZSBpdCB0b28uICovCisJICAgIGRlYnVnKEYxMTEs InR0dW5sY2sgbG9jazIgdW5saW5rIixsb2NrMix4KTsKKwkgICAgaWYgKHggPCAwKSB7CisJCWlm IChlcnJubyAmJiAhcXVpZXQpCisJCSAgcGVycm9yKHR0bm1zdik7CisJCXByaW50ZigiV2Fybmlu ZyAtIENhbid0IHJlbW92ZSBzZWNvbmRhcnkgbG9ja2ZpbGU6ICVzXG4iLAorCQkgICAgICAgbG9j azIKKwkJICAgICAgICk7CisJICAgIH0KKwkgICAgbG9jazJbMF0gPSAnXDAnOwkJLyogRm9yZ2V0 IGl0cyBuYW1lLiAqLworCX0KKyNlbmRpZiAvKiBSVEFJWCAqLworCisjaWZkZWYgQ09NTUVOVAor I2lmZGVmIExPQ0tGCisgICAgICAgIChWT0lEKSBsb2NrZih0dHlmZCwgRl9VTE9DSywgMEwpOyAv KiBSZW1vdmUgYWR2aXNvcnkgbG9jayAqLworI2VuZGlmIC8qIExPQ0tGICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworCisJcHJpdl9vZmYoKTsJCQkvKiBUdXJuIHByaXZpbGVnZXMgb2ZmLiAqLwor ICAgIH0KKyNlbmRpZiAvKiBVU0VUVFlMT0NLICovCisjZW5kaWYgLyogIU5PVVVDUCAqLworICAg IHJldHVybigwKTsKK30KKworLyoKKyAgNC4zQlNELXN0eWxlIFVVQ1AgbGluZSBkaXJlY3Rpb24g Y29udHJvbC4KKyAgKFN0YW4gQmFyYmVyLCBSaWNlIFUsIDE5ODAtc29tZXRoaW5nLi4uKQorKi8K KyNpZm5kZWYgTk9VVUNQCisjaWZkZWYgQUNVQ05UUkwKK1ZPSUQKK2FjdWNudHJsKGZsYWcsdHRu YW1lKSBjaGFyICpmbGFnLCAqdHRuYW1lOyB7CisgICAgY2hhciB4W0RFVk5BTUxFTiszMl0sICpk ZXZpY2UsICpkZXZuYW1lOworCisgICAgaWYgKHN0cmNtcCh0dG5hbWUsQ1RUTkFNKSA9PSAwIHx8 IHhsb2NhbCA9PSAwKSAvKiBJZiBub3QgbG9jYWwsICovCisgICAgICByZXR1cm47CQkJCS8qIGp1 c3QgcmV0dXJuLiAqLworICAgIGRldmljZSA9ICgoZGV2bmFtZSA9IHh4bGFzdCh0dG5hbWUsJy8n KSkgIT0gTlVMTCA/IGRldm5hbWUrMSA6IHR0bmFtZSk7CisgICAgaWYgKHN0cm5jbXAoZGV2aWNl LCJMQ0suLiIsNCkgPT0gMCkgZGV2aWNlICs9IDU7CisgICAgY2ttYWttc2coeCxERVZOQU1MRU4r MzIsIi91c3IvbGliL3V1Y3AvYWN1Y250cmwgIixmbGFnLCIgIixkZXZpY2UpOworICAgIGRlYnVn KEYxMTAsImNhbGxlZCAiLHgsMCk7CisgICAgenN5c2NtZCh4KTsKK30KKyNlbmRpZiAvKiBBQ1VD TlRSTCAqLworI2VuZGlmIC8qIE5PVVVDUCAqLworCisvKgorICBUIFQgSCBGIEwgTyBXICAtLSAg U2V0IG9yIFJlc2V0IGhhcmR3YXJlIGZsb3cgY29udHJvbC4KKworICBUaGlzIGlzIGFuIGF0dGVt cHQgdG8gY29sbGVjdCBhbGwgaGFyZHdhcmUtZmxvdy1jb250cm9sIHJlbGF0ZWQgY29kZQorICBp bnRvIGEgc2luZ2xlIG1vZHVsZS4gIFRoYW5rcyB0byBSaWNrIFNsYWRrZXkgYW5kIEpvaG4gS29o bCBmb3IgbG90cyBvZgorICBoZWxwIGhlcmUuICBPdmVydmlldzoKKworICBIYXJkd2FyZSBmbG93 IGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCBpbiBtYW55IFVOSVggaW1wbGVtZW50aW9ucy4gIEV2 ZW4KKyAgd2hlbiBpdCBpcyBzdXBwb3J0ZWQsIHRoZXJlIGlzIG5vIChoYSBoYSkgInN0YW5kYXJk IiBmb3IgdGhlIHByb2dyYW1taW5nCisgIGludGVyZmFjZS4gIEluIGdlbmVyYWwsIDQuM0JTRCBh bmQgZWFybGllciAoc29tZXRpbWVzKSwgNC40QlNELCBTeXN0ZW0gViwKKyAgU3VuT1MsIEFJWCwg ZXRjLCBoYXZlIHRvdGFsbHkgZGlmZmVyZW50IG1ldGhvZHMuICAoQW5kLCBub3Qgc3RyaWN0bHkK KyAgcmVsZXZhbnQgaGVyZSwgdGhlIHByb2dyYW1taW5nIGludGVyZmFjZSBvZnRlbiBicmluZ3Mg b25lIG9ubHkgdG8gYSBuby1vcAorICBpbiB0aGUgZGV2aWNlIGRyaXZlciEpCisKKyAgQW1vbmcg YWxsIHRoZXNlLCB3ZSBoYXZlIHR3byBtYWpvciB0eXBlcyBvZiBBUElzOiB0aG9zZSBpbiB3aGlj aCBoYXJkd2FyZQorICBmbG93IGNvbnRyb2wgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIGluIHRoZSBz YW1lIHRlcm1pby90ZXJtaW9zL3NndHR5IG1vZGUKKyAgd29yZChzKSB0aGF0IGFyZSB1c2VkIGZv ciBjb250cm9sbGluZyBzdWNoIGl0ZW1zIGFzIENCUkVBSyB2cyBSQVcgbW9kZSwgYW5kCisgIHdo aWNoIGFyZSBhbHNvIHVzZWQgYnkgdGhlIHR0dnQoKSwgdHRwa3QoKSwgY29uYmluKCksIGFuZCBj b25jYigpIHJvdXRpbmVzCisgIGZvciBjaGFuZ2luZyB0ZXJtaW5hbCBtb2Rlcy4gIEFuZCB0aG9z ZSB0aGF0IHVzZSBlbnRpcmVseSBkaWZmZXJlbnQKKyAgbWVjaGFuaXNtcy4KKworICBJbiB0aGUg Zmlyc3QgY2F0ZWdvcnksIGl0IGlzIGltcG9ydGFudCB0aGF0IGFueSBjaGFuZ2UgaW4gdGhlIG1v ZGUgYml0cyBiZQorICByZWZsZWN0ZWQgaW4gdGhlIHJlbGV2YW50IHRlcm1pbyhzKS9zZ3R0eSBz dHJ1Y3R1cmUsIHNvIHRoYXQgc3Vic2VxdWVudAorICBjaGFuZ2VzIHRvIHRoYXQgc3RydWN0dXJl IGRvIG5vdCB3aXBlIG91dCB0aGUgZWZmZWN0cyBvZiB0aGlzIHJvdXRpbmUuICBUaGF0CisgIGlz IHdoeSBhIHBvaW50ZXIsIGF0dHJzLCB0byB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGlzIHBh c3NlZCBhcyBhCisgIHBhcmFtZXRlciB0byB0aGlzIHJvdXRpbmUuCisKKyAgVGhlIHNlY29uZCBj YXRlZ29yeSBzaG91bGQgZ2l2ZSB1cyBubyB3b3JyaWVzLCBzaW5jZSBhbnkgY2hhbmdlcyB0byBo YXJkd2FyZQorICBmbG93IGNvbnRyb2wgYWNjb21wbGlzaGVkIGJ5IHRoaXMgcm91dGluZSBzaG91 bGQgbm90IGFmZmVjdCB0aGUgdGVybWlvKHMpLworICBzZ3R0eSBzdHJ1Y3R1cmVzLCBhbmQgdGhl cmVmb3JlIHdpbGwgbm90IGJlIHVuZG9uZSBieSBsYXRlciBjaGFuZ2VzIHRvIHRoZW0uCisKKyAg VGhlIHNlY29uZCBhcmd1bWVudCwgc3RhdHVzLCBtZWFucyB0byB0dXJuIG9uIGhhcmR3YXJlIGZs b3cgY29udHJvbCBpZgorICBub256ZXJvLCBhbmQgdG8gdHVybiBpdCBvZmYgaWYgemVyby4KKwor ICBSZXR1cm5zOiAwIG9uIGFwcGFyZW50IHN1Y2Nlc3MsIC0xIG9uIHByb2JhYmxlIGZhaWx1cmUu CisqLworCisvKgorICBUaGUgZm9sbG93aW5nIGJ1c2luZXNzIGlzIGZvciBCU0RJLCB3aGVyZSBp dCB3YXMgZGlzY292ZXJlZCB0aGF0IHR3bworICBzZXBhcmF0ZSBiaXRzLCBDQ1RTX09GTE9XIGFu ZCBDUlRTX0lGTE9XLCBhcmUgdXNlZCBpbiBoYXJkd2FyZSBmbG93IGNvbnRyb2wsCisgIGJ1dCBD VFJTQ1RTIGlzIGRlZmluZWQgKGluIDx0ZXJtaW9zLmg+KSB0byBiZSBqdXN0IENDVFNfT0ZMT1cg cmF0aGVyIGJvdGgKKyAgYml0cywgc28gaHdmYyBvbmx5IHdvcmtzIGluIG9uZSBkaXJlY3Rpb24g aWYgeW91IHVzZSBDUlRTQ1RTIHRvIGNvbnRyb2wgaXQuCisgIE90aGVyIDQuNEJTRC1iYXNlZCBV bml4ZXMgc3VjaCBhcyBGcmVlQlNEIDQuMSwgd2hpY2ggdXNlIHRoZXNlIHR3byBiaXRzLAorICBk ZWZpbmUgQ1JUU0NUUyBjb3JyZWN0bHkuCisqLworI2lmZGVmIEZJWENSVFNDVFMKKyNpZmRlZiBD UlRTQ1RTCisjaWZkZWYgQ0NUU19PRkxPVworI2lmZGVmIENSVFNfSUZMT1cKKyN1bmRlZiBDUlRT Q1RTCisjZGVmaW5lIENSVFNDVFMgKENSVFNfSUZMT1d8Q0NUU19PRkxPVykKKyNlbmRpZiAvKiBD UlRTX0lGTE9XICovCisjZW5kaWYgLyogQ0NUU19PRkxPVyAqLworI2VuZGlmIC8qIENSVFNDVFMg Ki8KKyNlbmRpZiAvKiBGSVhDUlRTQ1RTICovCisKK3N0YXRpYyBpbnQKK3R0aGZsb3coZmxvdywg c3RhdHVzLCBhdHRycykKKyAgICBpbnQgZmxvdywJCQkJLyogVHlwZSBvZiBmbG93IGNvbnRyb2wg KGNrY2RlYi5oKSAqLworICAgIHN0YXR1czsJCQkJLyogTm9uemVybyA9IHR1cm4gaXQgb24gKi8K KwkJCQkJLyogWmVybyA9IHR1cm4gaXQgb2ZmICovCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyog UE9TSVggb3IgQlNENDQgKi8KKyAgICBzdHJ1Y3QgdGVybWlvcyAqYXR0cnM7CisjZWxzZQkJCQkJ LyogU3lzdGVtIFYgKi8KKyNpZmRlZiBBVFRTVgorI2lmZGVmIEFUVDczMDAKKyNpZmRlZiBVTklY MzUxTQorLyogQVQmVCBVTklYIDMuNTFtIGNhbiBzZXQgYnV0IG5vdCB0ZXN0IGZvciBoYXJkd2Fy ZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgUlRTRkxPVyBDVFNDRAorI2RlZmluZSBDVFNGTE9X IENUU0NECisjZW5kaWYgLyogQVRUNzMwMCAqLworI2VuZGlmIC8qIFVOSVgzNTFNICovCisgICAg c3RydWN0IHRlcm1pbyAqYXR0cnM7CisjZWxzZQkJCQkJLyogQlNELCBWNywgZXRjICovCisgICAg c3RydWN0IHNndHR5YiAqYXR0cnM7CQkvKiBzZ3R0eSBpbmZvLi4uICovCisjZW5kaWYgLyogQVRU U1YgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKy8qIHR0aGZsb3cgKi8geworCisgICAg aW50IHggPSAwOwkJCQkvKiB0dGhmbG93KCkgcmV0dXJuIGNvZGUgKi8KKworI2lmZGVmIFBsYW45 CisgICAgcmV0dXJuIHA5dHRoZmxvdyhmbG93LCBzdGF0dXMpOworI2Vsc2UKKworI2lmbmRlZiBP WE9TCQkJCS8qIE5PVCBPbGl2ZXR0aSBYL09TLi4uICovCisvKgorICBGb3IgU3VuT1MgNC4wIGFu ZCBsYXRlciBpbiB0aGUgQlNEIGVudmlyb25tZW50IC4uLgorCisgIFRoZSBkZWNsYXJhdGlvbnMg YXJlIGNvcGllZCBhbmQgaW50ZXJwcmV0ZWQgZnJvbSB0aGUgU3lzdGVtIFYgaGVhZGVyIGZpbGVz LAorICBzbyB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIHRvIHB1bGwgaW4gYWxsIHRoZSBTeXN0ZW0g ViBqdW5rIHdoZW4gYnVpbGRpbmcKKyAgQy1LZXJtaXQgZm9yIFN1bk9TIGluIHRoZSBCU0QgZW52 aXJvbm1lbnQsIHdoaWNoIHdvdWxkIGJlIGRhbmdlcm91cyBiZWNhdXNlCisgIGhhdmluZyB0aG9z ZSBzeW1ib2xzIGRlZmluZWQgd291bGQgY2F1c2UgdXMgdG8gdGFrZSB0aGUgd3JvbmcgcGF0aHMg dGhyb3VnaAorICB0aGUgY29kZS4gIFRoZSBjb2RlIGluIHRoaXMgc2VjdGlvbiBpcyB1c2VkIGlu IGJvdGggdGhlIEJTRCBhbmQgU3lzIFYgU3VuT1MKKyAgdmVyc2lvbnMuCisqLworI2lmZGVmIFNV Tk9TNDEKKy8qCisgIEluIFN1bk9TIDQuMSBhbmQgbGF0ZXIsIHdlIHVzZSB0aGUgUE9TSVggY2Fs bHMgcmF0aGVyIHRoYW4gaW9jdGwgY2FsbHMKKyAgYmVjYXVzZSBHTlUgQ0MgdXNlcyBkaWZmZXJl bnQgZm9ybWF0cyBmb3IgdGhlIF9JT3h4eCBtYWNyb3MgdGhhbiByZWd1bGFyIENDOworICB0aGUg UE9TSVggZm9ybXMgd29yayBmb3IgYm90aC4gIEJ1dCB0aGUgUE9TSVggY2FsbHMgYXJlIG5vdCBh dmFpbGFibGUgaW4KKyAgU3VuT1MgNC4wLgorKi8KKyNkZWZpbmUgQ1JUU0NUUyAweDgwMDAwMDAw CQkvKiBSVFMvQ1RTIGZsb3cgY29udHJvbCAqLworI2RlZmluZSBUQ1NBTk9XIDAJCQkvKiBEbyBp dCBub3cgKi8KKworICAgIHN0cnVjdCB0ZXJtaW9zIHsKKwl1bnNpZ25lZCBsb25nIGNfaWZsYWc7 CQkvKiBJbnB1dCBtb2RlcyAqLworCXVuc2lnbmVkIGxvbmcgY19vZmxhZzsJCS8qIE91dHB1dCBt b2RlcyAqLworCXVuc2lnbmVkIGxvbmcgY19jZmxhZzsJCS8qIENvbnRyb2wgbW9kZXMgKi8KKwl1 bnNpZ25lZCBsb25nIGNfbGZsYWc7CQkvKiBMaW5lIGRpc2NpcGxpbmUgbW9kZXMgKi8KKwljaGFy IGNfbGluZTsKKwlDSEFSIGNfY2NbMTddOworICAgIH07CisgICAgc3RydWN0IHRlcm1pb3MgdGVt cDsKKworX1BST1RPVFlQKCBpbnQgdGNnZXRhdHRyLCAoaW50LCBzdHJ1Y3QgdGVybWlvcyAqKSAp OworX1BST1RPVFlQKCBpbnQgdGNzZXRhdHRyLCAoaW50LCBpbnQsIHN0cnVjdCB0ZXJtaW9zICop ICk7CisvKgorICBXaGVuIENSVFNDVFMgaXMgc2V0LCBTdW5PUyB3b24ndCBkbyBvdXRwdXQgdW5s ZXNzIGJvdGggQ1RTIGFuZCBDRCBhcmUKKyAgYXNzZXJ0ZWQuICBTbyB3ZSBkb24ndCBzZXQgQ1JU U0NUUyB1bmxlc3MgQ0QgaXMgdXAuICBUaGlzIHNob3VsZCBiZSBPSywKKyAgc2luY2Ugd2UgZG9u J3QgbmVlZCBSVFMvQ1RTIGR1cmluZyBkaWFsaW5nLCBhbmQgYWZ0ZXIgZGlhbGluZyBpcyBjb21w bGV0ZSwKKyAgd2Ugc2hvdWxkIGhhdmUgQ0QuICBJZiBub3QsIHdlIHN0aWxsIGNvbW11bmljYXRl LCBidXQgd2l0aG91dCBSVFMvQ1RTLgorKi8KKyAgICBpbnQgbWZsYWdzOwkJCQkvKiBNb2RlbSBz aWduYWwgZmxhZ3MgKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigw KTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJl dHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKworICAgIGRlYnVnKEYxMDEsInR0aGZsb3cg U1VOT1M0MSBlbnRyeSBzdGF0dXMiLCIiLHN0YXR1cyk7CisgICAgaWYgKCFzdGF0dXMpIHsJCQkv KiBUdXJuIGhhcmQgZmxvdyBvZmYgKi8KKwlpZiAodGNnZXRhdHRyKHR0eWZkLCAmdGVtcCkgPiAt MSAmJiAvKiBHZXQgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KKwkgICAgKHRlbXAuY19jZmxhZyAmIENS VFNDVFMpKSB7IC8qIENoZWNrIGZvciBSVFMvQ1RTICovCisJICAgIHRlbXAuY19jZmxhZyAmPSB+ Q1JUU0NUUzsJLyogSXQncyB0aGVyZSwgcmVtb3ZlIGl0ICovCisJICAgIHggPSB0Y3NldGF0dHIo dHR5ZmQsVENTQU5PVywmdGVtcCk7CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIFR1cm4gaGFyZCBm bG93IG9uICovCisJaWYgKGlvY3RsKHR0eWZkLFRJT0NNR0VULCZtZmxhZ3MpID4gLTEgJiYgLyog R2V0IG1vZGVtIHNpZ25hbHMgKi8KKwkgICAgKG1mbGFncyAmIFRJT0NNX0NBUikpIHsJCS8qIENo ZWNrIGZvciBDRCAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFN1bk9TIGhhcyBDRCIsIiIs MCk7CisJICAgIGlmICh0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKSA+IC0xICYmIC8qIEdldCBkZXZp Y2UgYXR0cmlidXRlcyAqLworCQkhKHRlbXAuY19jZmxhZyAmIENSVFNDVFMpKSB7IC8qIENoZWNr IGZvciBSVFMvQ1RTICovCisJCXRlbXAuY19jZmxhZyB8PSBDUlRTQ1RTOwkvKiBOb3QgdGhlcmUs IGFkZCBpdCAqLworCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOworCSAgICB9 CisJfSBlbHNlIHsKKwkgICAgeCA9IC0xOworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFN1bk9T IG5vIENEIiwiIiwwKTsKKwl9CisgICAgfQorI2Vsc2UKKyNpZmRlZiBRTlgKKyAgICBzdHJ1Y3Qg dGVybWlvcyB0ZW1wOworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsK KyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVy bigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFFOWCBl bnRyeSBzdGF0dXMiLCIiLHN0YXR1cyk7CisgICAgaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlbXAp ID4gLTEpIHsJLyogR2V0IGRldmljZSBhdHRyaWJ1dGVzICovCisJaWYgKCFzdGF0dXMpIHsJCQkv KiBUdXJuIGhhcmQgZmxvdyBvZmYgKi8KKwkgICAgaWYgKCh0ZW1wLmNfY2ZsYWcgJiAoSUhGTE9X fE9IRkxPVykpID09IChJSEZMT1d8T0hGTE9XKSkgeworCQl0ZW1wLmNfY2ZsYWcgJj0gfihJSEZM T1d8T0hGTE9XKTsgLyogSXQncyB0aGVyZSwgcmVtb3ZlIGl0ICovCisJCWF0dHJzLT5jX2NmbGFn ICY9IH4oSUhGTE9XfE9IRkxPVyk7CisJCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5PVywmdGVt cCk7CisJICAgIH0KKwl9IGVsc2UgewkJCS8qIFR1cm4gaGFyZCBmbG93IG9uICovCisJICAgIGlm ICgodGVtcC5jX2NmbGFnICYgKElIRkxPV3xPSEZMT1cpKSAhPSAoSUhGTE9XfE9IRkxPVykpIHsK KwkJdGVtcC5jX2NmbGFnIHw9IChJSEZMT1d8T0hGTE9XKTsgLyogTm90IHRoZXJlLCBhZGQgaXQg Ki8KKwkJdGVtcC5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7ICAgLyogQnllIHRvIElYT04vSVhP RkYgKi8KKwkJdHRyYXcuY19sZmxhZyB8PSBJRVhURU47ICAgICAgICAgLyogTXVzdCBiZSBvbiAq LworCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOworCQlhdHRycy0+Y19jZmxh ZyB8PSAoSUhGTE9XfE9IRkxPVyk7CisJCWF0dHJzLT5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7 CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwl4ID0gLTE7CisJZGVidWcoRjEwMCwgInR0aGZs b3cgUU5YIGdldGF0dHIgZmFpbHMiLCAiIiwgMCk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBQT1NJ WF9DUlRTQ1RTCisvKgorICBQT1NJWF9DUlRTQ1RTIGlzIGRlZmluZWQgaW4gY2tjZGViLmggb3Ig b24gQ0MgY29tbWFuZCBsaW5lLgorICBOb3RlOiBEbyBub3QgYXNzdW1lIENSVFNDVFMgaXMgYSBv bmUtYml0IGZpZWxkIQorKi8KKyAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOworI2lmZGVmIE5FVENN RAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRl ZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8K KyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgZW50cnkgc3RhdHVzIiwiIixz dGF0dXMpOworICAgIGVycm5vID0gMDsKKyAgICB4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdGVtcCk7 CisgICAgZGVidWcoRjExMSwidHRoZmxvdyBQT1NJWF9DUlRTQ1RTIHRjZ2V0YXR0ciIsY2tpdG9h KHgpLGVycm5vKTsKKyAgICBlcnJubyA9IDA7CisgICAgaWYgKHggPCAwKSB7CisJeCA9IC0xOwor ICAgIH0gZWxzZSB7CisJaWYgKCFzdGF0dXMpIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvZmYgKi8K KwkgICAgaWYgKAorI2lmZGVmIENPTU1FTlQKKwkJLyogVGhpcyBjYW4gZmFpbCBiZWNhdXNlIG9m IHNpZ24gZXh0ZW5zaW9uICovCisJCS8qIGUuZy4gaW4gTGludXggd2hlcmUgaXQncyBCaXQgMzEg Ki8KKwkJKHRlbXAuY19jZmxhZyAmIENSVFNDVFMpID09IENSVFNDVFMKKyNlbHNlCisJCSh0ZW1w LmNfY2ZsYWcgJiBDUlRTQ1RTKSAhPSAwCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkpIHsKKwkJ dGVtcC5jX2NmbGFnICY9IH5DUlRTQ1RTOyAvKiBJdCdzIHRoZXJlLCByZW1vdmUgaXQgKi8KKwkJ YXR0cnMtPmNfY2ZsYWcgJj0gfkNSVFNDVFM7CisJCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQU5P VywmdGVtcCk7CisJCWRlYnVnKEYxMTEsInR0aGZsb3cgUE9TSVhfQ1JUU0NUUyBPRkYgdGNzZXRh dHRyIiwKKwkJICAgICAgY2tpdG9hKHgpLGVycm5vKTsKKwkgICAgfSBlbHNlIHsJCQkvKiBKb2hu IER1bmxhcCAyMDEwLTAxLTI2ICovCisJCWRlYnVnKEYwMDEsCisJCSAgICAgICJ0dGhmbG93IGJl Zm9yZSBmb3JjaW5nIG9mZiBhdHRycyBDUlRTQ1RTIiwKKwkJICAgICAgIiIsCisJCSAgICAgIGF0 dHJzLT5jX2NmbGFnJkNSVFNDVFMKKwkJICAgICAgKTsKKwkJYXR0cnMtPmNfY2ZsYWcgJj0gfkNS VFNDVFM7IC8qIGZvcmNlIGl0IG9mZiBpZiAhc3RhdHVzICovCisJCWRlYnVnKEYwMDEsCisJCSAg ICAgICJ0dGhmbG93IGFmdGVyIGZvcmNpbmcgb2ZmIGF0dHJzIENSVFNDVFMiLAorCQkgICAgICAi IiwKKwkJICAgICAgYXR0cnMtPmNfY2ZsYWcmQ1JUU0NUUworCQkgICAgICApOworCQl9CisJfSBl bHNlIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvbiAqLworCSAgICBpZiAoCisjaWZkZWYgQ09NTUVO VAorCQkvKiBUaGlzIGNhbiBmYWlsIGJlY2F1c2Ugb2Ygc2lnbiBleHRlbnNpb24gKi8KKwkJKHRl bXAuY19jZmxhZyAmIENSVFNDVFMpICE9IENSVFNDVFMKKyNlbHNlCisJCSh0ZW1wLmNfY2ZsYWcg JiBDUlRTQ1RTKSA9PSAwCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkpIHsKKwkJdGVtcC5jX2Nm bGFnIHw9IENSVFNDVFM7IC8qIE5vdCB0aGVyZSwgYWRkIGl0ICovCisJCXRlbXAuY19pZmxhZyAm PSB+KElYT058SVhPRkZ8SVhBTlkpOyAvKiBCeWUgdG8gSVhPTi9JWE9GRiAqLworCQl4ID0gdGNz ZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOworCQlkZWJ1ZyhGMTExLCJ0dGhmbG93IFBPU0lY X0NSVFNDVFMgT04gdGNzZXRhdHRyIiwKKwkJICAgICAgY2tpdG9hKHgpLGVycm5vKTsKKwkJYXR0 cnMtPmNfY2ZsYWcgfD0gQ1JUU0NUUzsKKwkJYXR0cnMtPmNfaWZsYWcgJj0gfihJWE9OfElYT0ZG fElYQU5ZKTsKKwkgICAgfQorCX0KKyAgICB9CisjZWxzZQorI2lmZGVmIFNVTk9TNAorLyoKKyAg U3VuT1MgNC4wIChhbmQgbWF5YmUgZWFybGllcj8pLiAgVGhpcyBjb2RlIGlzIGRhbmdlcm91cyBi ZWNhdXNlIGl0CisgIHByZXZlbnRzIGNvbXBpbGF0aW9uIHdpdGggR05VIGdjYywgd2hpY2ggdXNl cyBkaWZmZXJlbnQgZm9ybWF0cyBmb3IgdGhlCisgIF9JT1J4eHggbWFjcm9zIHRoYW4gcmVndWxh ciBjYy4gIFN1bk9TIDQuMSBhbmQgbGF0ZXIgY2FuIHVzZSB0aGUgUE9TSVgKKyAgcm91dGluZXMg YWJvdmUsIHdoaWNoIHdvcmsgZm9yIGJvdGggY2MgYW5kIGdjYy4KKyovCisjZGVmaW5lIFRDR0VU UyBfSU9SKFQsIDgsIHN0cnVjdCB0ZXJtaW9zKSAvKiBHZXQgbW9kZXMgaW50byB0ZXJtaW9zIHN0 cnVjdCAqLworI2RlZmluZSBUQ1NFVFMgX0lPVyhULCA5LCBzdHJ1Y3QgdGVybWlvcykgLyogU2V0 IG1vZGVzIGZyb20gdGVybWlvcyBzdHJ1Y3QgKi8KKyNkZWZpbmUgQ1JUU0NUUyAweDgwMDAwMDAw CQkgIC8qIFJUUy9DVFMgZmxvdyBjb250cm9sICovCisKKyAgICBzdHJ1Y3QgdGVybWlvcyB7CisJ dW5zaWduZWQgbG9uZyBjX2lmbGFnOwkJLyogSW5wdXQgbW9kZXMgKi8KKwl1bnNpZ25lZCBsb25n IGNfb2ZsYWc7CQkvKiBPdXRwdXQgbW9kZXMgKi8KKwl1bnNpZ25lZCBsb25nIGNfY2ZsYWc7CQkv KiBDb250cm9sIG1vZGVzICovCisJdW5zaWduZWQgbG9uZyBjX2xmbGFnOwkJLyogTGluZSBkaXNj aXBsaW5lIG1vZGVzICovCisJY2hhciBjX2xpbmU7CisJQ0hBUiBjX2NjWzE3XTsKKyAgICB9Owor ICAgIHN0cnVjdCB0ZXJtaW9zIHRlbXA7CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkg cmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0 dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgIGRlYnVnKEYxMDEsInR0 aGZsb3cgZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOworICAgIGlmIChpb2N0bCh0dHlmZCxUQ0dF VFMsJnRlbXApID4gLTEpIHsgLyogR2V0IHRlcm1pbmFsIG1vZGVzLiAqLworCWlmIChzdGF0dXMp IHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvbiAqLworCSAgICB0ZW1wLmNfY2ZsYWcgfD0gQ1JUU0NU UzsJLyogQWRkIFJUUy9DVFMgdG8gdGhlbS4gKi8KKwkgICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VU UywmdGVtcCk7IC8qIFNldCB0aGVtIGFnYWluLiAqLworCSAgICBhdHRycy0+Y19jZmxhZyB8PSBD UlRTQ1RTOwkvKiBBZGQgdG8gZ2xvYmFsIGluZm8uICovCisJfSBlbHNlIHsJCQkvKiBUdXJuIGhh cmQgZmxvdyBvZmYgKi8KKwkgICAgdGVtcC5jX2NmbGFnICY9IH5DUlRTQ1RTOworCSAgICB4ID0g aW9jdGwodHR5ZmQsVENTRVRTLCZ0ZW1wKTsKKwkgICAgYXR0cnMtPmNfY2ZsYWcgJj0gfkNSVFND VFM7CisJfQorICAgIH0KKyNlbHNlCQkJCQkvKiBOb3QgU3VuT1MgNC4wIG9yIGxhdGVyICovCisj aWZkZWYgQUlYUlMJCQkJLyogSUJNIEFJWCBSUy82MDAwICovCisjaWZuZGVmIEFJWDQxCQkJCS8q IEJ1dCBvbmx5IHByZS00LnggPT0gU1ZSNCAqLworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBp cGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBp ZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBpZiAoc3RhdHVz KSB7CisJaWYgKCh4ID0gaW9jdGwodHR5ZmQsIFRYQUREQ0QsICJydHMiKSkgPCAwICYmIGVycm5v ICE9IEVCVVNZKQorCSAgZGVidWcoRjEwMCwiaGFyZGZsb3cgVFhBRERDRCAocnRzKSBlcnJvciIs ICIiLCAwKTsKKyAgICB9IGVsc2UgeworCWlmICgoeCA9IGlvY3RsKHR0eWZkLCBUWERFTENELCAi cnRzIikpIDwgMCAmJiBlcnJubyAhPSBFSU5WQUwpCisJICBkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBU WERFTENEIChydHMpIGVycm9yIiwgIiIsIDApOworICAgIH0KKyNlbmRpZiAvKiBBSVg0MSAqLwor I2Vsc2UJCQkJCS8qIE5vdCBBSVggUlMvNjAwMCAqLworCisjaWZkZWYgQVRUU1YJCQkJLyogU3lz dGVtIFYuLi4gKi8KKworI2lmZGVmIENLX1NDT1Y1CQkJCS8qIFNDTyBPcGVuIFNlcnZlciA1LjAg Ki8KKyNkZWZpbmUgQ0tfU0NPVU5JWAorI2Vsc2UKKyNpZmRlZiBNX1VOSVgJCQkJLyogU0NPIFVO SVggMy4ydjQueCBvciBlYXJsaWVyICovCisjZGVmaW5lIENLX1NDT1VOSVgKKyNlbmRpZiAvKiBN X1VOSVggKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworCisjaWZkZWYgU0NPX0ZPUkNFX1JUU1hP RkYKKyNpZmRlZiBDS19TQ09VTklYCQkJLyogQnV0IG5vdCBTQ08gT3BlblNlcnZlciA1LjAuNCAq LworI2lmZGVmIFNDT19PU1I1MDQJCQkvKiBvciBsYXRlci4uLiAqLworI3VuZGVmIENLX1NDT1VO SVgKKyNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCisjZW5kaWYgLyogQ0tfU0NPVU5JWCAqLworI2Vu ZGlmIC8qIFNDT19GT1JDRV9SVFNYT0ZGICovCisKKyNpZmRlZiBDS19TQ09VTklYCisjaWZkZWYg UE9TSVgKKyAgICBzdHJ1Y3QgdGVybWlvcyB0ZW1wOworI2lmZGVmIE5FVENNRAorICAgIGlmICh0 dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAg ICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBkZWJ1ZyhG MTAxLCJ0dGhmbG93IFNDT1VOSVggUE9TSVggZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOworICAg IGVycm5vID0gMDsKKyAgICB4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdGVtcCk7CisgICAgZGVidWco RjExMSwidHRoZmxvdyBTQ08gVU5JWCBQT1NJWCB0Y2dldGF0dHIiLGNraXRvYSh4KSxlcnJubyk7 CisjZWxzZSAvKiBQT1NJWCAqLworICAgIHN0cnVjdCB0ZXJtaW8gdGVtcDsKKyNpZmRlZiBORVRD TUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZk ZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICov CisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ09VTklYIG5vbi1QT1NJWCBlbnRyeSBzdGF0dXMi LCIiLHN0YXR1cyk7CisgICAgeCA9IGlvY3RsKHR0eWZkLCBUQ0dFVEEsICZ0ZW1wKTsKKyAgICBk ZWJ1ZyhGMTExLCJ0dGhmbG93IFNDTyBVTklYIG5vbi1QT1NJWCBUQ0dFVEEiLGNraXRvYSh4KSxl cnJubyk7CisjZW5kaWYgLyogUE9TSVggKi8KKy8qCisgIFRoaXMgaXMgbm90IHJlYWxseSBQT1NJ WCwgc2luY2UgUE9TSVggZG9lcyBub3QgZGVhbCB3aXRoIGhhcmR3YXJlIGZsb3cKKyAgY29udHJv bCwgYnV0IHdlIGFyZSB1c2luZyB0aGUgUE9TSVggQVBJcy4gIEluIGZhY3QsIFJUU0ZMT1cgYW5k IENUU0ZMT1cKKyAgYXJlIGRlZmluZWQgaW4gdGVybWlvLmgsIGJ1dCB3aXRoaW4gI2lmbmRlZiBf UE9TSVhfU09VUkNFLi4jZW5kaWYuICBTbworICBsZXQncyB0cnkgZm9yY2luZyB0aGVpciBkZWZp bml0aW9ucyBoZXJlLgorKi8KKyNpZm5kZWYgQ1RTRkxPVworI2RlZmluZSBDVFNGTE9XIDAwMjAw MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBkZWZpbmluZyBDVFNGTE9XIiwiIixDVFNG TE9XKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gQ1RTRkxPVyIsIiIsQ1RT RkxPVyk7CisjZW5kaWYgLyogQ1RTRkxPVyAqLworI2lmbmRlZiBSVFNGTE9XCisjZGVmaW5lIFJU U0ZMT1cgMDA0MDAwMAorICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIGRlZmluaW5nIFJUU0ZM T1ciLCIiLFJUU0ZMT1cpOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBSVFNG TE9XIiwiIixSVFNGTE9XKTsKKyNlbmRpZiAvKiBSVFNGTE9XICovCisjaWZuZGVmIE9SVFNGTAor I2RlZmluZSBPUlRTRkwgMDEwMDAwMAorICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIGRlZmlu aW5nIE9SVFNGTCIsIiIsT1JUU0ZMKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBT Q08gT1JUU0ZMIiwiIixPUlRTRkwpOworI2VuZGlmIC8qIE9SVFNGTCAqLworCisgICAgaWYgKHgg IT0gLTEpIHsKKwlpZiAoc3RhdHVzKSB7CQkJLyogVHVybiBpdCBPTiAqLworCSAgICB0ZW1wLmNf Y2ZsYWcgfD0gUlRTRkxPV3xDVFNGTE9XOworCSAgICBhdHRycy0+Y19jZmxhZyB8PSBSVFNGTE9X fENUU0ZMT1c7CisjaWZkZWYgT1JUU0ZMCisJICAgIHRlbXAuY19jZmxhZyAmPSB+T1JUU0ZMOwor CSAgICBhdHRycy0+Y19jZmxhZyAmPSB+T1JUU0ZMOworI2VuZGlmIC8qIE9SVFNGTCAqLworCSAg ICB0ZW1wLmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGfElYQU5ZKTsKKwkgICAgYXR0cnMtPmNfaWZs YWcgJj0gfihJWE9OfElYT0ZGfElYQU5ZKTsKKwl9IGVsc2UgewkJCS8qIFR1cm4gaXQgT0ZGICov CisjaWZkZWYgT1JUU0ZMCisJICAgIHRlbXAuY19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPV3xP UlRTRkwpOworCSAgICBhdHRycy0+Y19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPV3xPUlRTRkwp OworI2Vsc2UgIC8qIE9SVFNGTCAqLworCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfihSVFNGTE9XfENU U0ZMT1cpOworCSAgICBhdHRycy0+Y19jZmxhZyAmPSB+KFJUU0ZMT1d8Q1RTRkxPVyk7CisjZW5k aWYgLyogT1JUU0ZMICovCisJfQorI2lmZGVmIFBPU0lYCisJeCA9IHRjc2V0YXR0cih0dHlmZCwg VENTQURSQUlOLCAmdGVtcCk7CisjZWxzZQorCXggPSBpb2N0bCh0dHlmZCwgVENTRVRBLCAmdGVt cCk7CisjZW5kaWYgLyogUE9TSVggKi8KKwlkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBzZXQgbW9k ZXMiLCIiLHgpOworICAgIH0KKyNlbHNlIC8qIE5vdCBTQ08gVU5JWCAqLworI2lmZGVmIE5FVENN RAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRl ZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8K KyAgICBpZiAoIXN0YXR1cykgewkJCS8qIFR1cm4gaXQgT0ZGICovCisjaWZkZWYgUlRTWE9GRgor CWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgUlRTL0NUUyBPRkYiLCIiLDApOworCXJjdHN4Lnhf aGZsYWcgJj0gfihSVFNYT0ZGfENUU1hPTik7CisjaWZkZWYgVENTRVRYCisJeCA9IGlvY3RsKHR0 eWZkLFRDU0VUWCwmcmN0c3gpOworCWRlYnVnKEYxMDEsInR0aGZsb3cgQVRUU1YgVENTRVRYIE9G RiIsIiIseCk7CisjZWxzZQorCXggPSAtMQorCWRlYnVnKEYxMDAsInR0aGZsb3cgVENTRVRYIG5v dCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBUQ1NFVFggKi8KKyNlbHNlCisJZGVidWcoRjEw MCwidHRoZmxvdyBBVFRTViBSVFNYT0ZGIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBS VFNYT0ZGICovCisjaWZkZWYgRFRSWE9GRgorCWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRS L0NEIE9GRiIsIiIsMCk7CisJcmN0c3gueF9oZmxhZyAmPSB+KERUUlhPRkZ8Q0RYT04pOworCXgg PSBpb2N0bCh0dHlmZCxUQ1NFVFgsJnJjdHN4KTsKKwlkZWJ1ZyhGMTAxLCJ0dGhmbG93IEFUVFNW IERUUlhPRkYgT0ZGIiwiIix4KTsKKyNlbHNlCisJZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBE VFJYT0ZGIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBEVFJYT0ZGICovCisgICAgfSBl bHNlIHsJCQkJLyogVHVybiBpdCBPTi4gKi8KKwlpZiAoZmxvdyA9PSBGTE9fUlRTQykgewkvKiBS VFMvQ1RTIEZsb3cgY29udHJvbC4uLiAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNW IFJUUy9DVFMgT04iLCIiLDApOworI2lmZGVmIFJUU1hPRkYKKwkgICAgLyogVGhpcyBpcyB0aGUg cHJlZmVycmVkIHdheSwgYWNjb3JkaW5nIHRvIFNWSUQzICovCisjaWZkZWYgVENHRVRYCisJICAg IHggPSBpb2N0bCh0dHlmZCxUQ0dFVFgsJnJjdHN4KTsKKwkgICAgZGVidWcoRjEwMSwidHRoZmxv dyBUQ0dFVFgiLCIiLHgpOworCSAgICBpZiAoeCA+IC0xKSB7CisJCXJjdHN4LnhfaGZsYWcgfD0g UlRTWE9GRiB8IENUU1hPTjsKKwkJeCA9IGlvY3RsKHR0eWZkLFRDU0VUWCwmcmN0c3gpOworCQlk ZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIGlvY3RsIiwiIix4KTsKKwkgICAgfQorI2Vsc2UKKwkg ICAgZGVidWcoRjEwMCwidHRoZmxvdyBUQ0dFVFggbm90IGRlZmluZWQiLCIiLDApOworCSAgICB4 ID0gLTEKKyNlbmRpZiAvKiBUQ0dFVFggKi8KKyNlbHNlCisJICAgIGRlYnVnKEYxMDAsInR0aGZs b3cgUlRTWE9GRiBub3QgZGVmaW5lZCIsIiIsMCk7CisJICAgIHggPSAtMTsKKyNlbmRpZiAvKiBS VFNYT0ZGICovCisJfSBlbHNlIGlmIChmbG93ID09IEZMT19EVFJDKSB7CS8qIERUUi9DRCBGbG93 IGNvbnRyb2wuLi4gKi8KKwkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBEVFIvQ0QgT04i LCIiLDApOworI2lmZGVmIERUUlhPRkYKKwkgICAgLyogVGhpcyBpcyBzdHJhaWdodCBvdXQgb2Yg U1ZJRCBSNCAqLworCSAgICBpZiAoaW9jdGwodHR5ZmQsVENHRVRYLCZyY3RzeCkgPiAtMSkgewor CQlyY3RzeC54X2hmbGFnICY9IH4oRFRSWE9GRnxDRFhPTik7CisJCXggPSBpb2N0bCh0dHlmZCxU Q1NFVFgsJnJjdHN4KTsKKwkgICAgfQorI2Vsc2UKKwkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBB VFRTViBEVFJYT0ZGIG5vdCBkZWZpbmVkIiwiIiwwKTsKKwkgICAgeCA9IC0xOworI2VuZGlmIC8q IERUUlhPRkYgKi8KKwl9CisgICAgfQorI2VuZGlmIC8qIENLX1NDT1VOSVggKi8KKworI2Vsc2Ug Lyogbm90IFN5c3RlbSBWLi4uICovCisKKyNpZmRlZiBDS19EVFJDVFMKKyNpZmRlZiBMRE9EVFIK KyNpZmRlZiBMRE9DVFMKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7 CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1 cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgeCA9IExET0RUUiB8IExET0NUUzsJCS8q IEZvdW5kIG9ubHkgb24gVVRFSz8gKi8KKyAgICBpZiAoZmxvdyA9PSBGTE9fRFRSVCAmJiBzdGF0 dXMpIHsJLyogVXNlIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworCWlmIChsbW9kZWYpIHsKKwkg ICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NMQklTLCZ4KTsKKwkgICAgaWYgKHggPCAwKSB7CisJICAg ICAgICBkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUSU9DTEJJUyBlcnJvciIsIiIsMCk7CisJICAgIH0g ZWxzZSB7CisJCWxtb2RlZisrOworCQlkZWJ1ZyhGMTAwLCJoYXJkZmxvdyBUSU9DTEJJUyBvayIs IiIsMCk7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwlpZiAobG1vZGVmKSB7CisJICAgIHgg PSBpb2N0bCh0dHlmZCxUSU9DTEJJQywmeCk7CisJICAgIGlmICh4IDwgMCkgeworCSAgICAgICAg ZGVidWcoRjEwMCwiaGFyZGZsb3cgVElPQ0xCSUMgZXJyb3IiLCIiLDApOworCSAgICB9IGVsc2Ug eworCQlsbW9kZWYrKzsKKwkJZGVidWcoRjEwMCwiaGFyZGZsb3cgVElPQ0xCSUMgb2siLCIiLDAp OworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAvKiBMRE9EVFIgKi8KKyNlbmRpZiAvKiBMRE9D VFMgKi8KKyNlbmRpZiAvKiBDS19EVFJDVFMgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlm IC8qIEFJWFJTICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyogUU5YICovCisjZW5k aWYgLyogUE9TSVhfQ1JUU0NUUyAqLworI2VuZGlmIC8qIFNVTk9TNDEgKi8KKworI2Vsc2UgLyog T1hPUyAqLworCisgICAgc3RydWN0IHRlcm1pb3MgdGVtcDsJCS8qIE9saXZldHRpIFgvT1MgLi4u ICovCisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYg LyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7Cisj ZW5kaWYgLyogTkVUUFRZICovCisgICAgeCA9IGlvY3RsKHR0eWZkLFRDR0VUUywmdGVtcCk7Cisg ICAgaWYgKHggPT0gMCkgeworCXRlbXAuY19jZmxhZyAmPSB+KENSVFNDVFN8Q0RUUkNUU3xDQlJL RkxPV3xDRFRSRFNSfENSVFNEU1IpOworCWlmIChzdGF0dXMpIHsKKwkgICAgc3dpdGNoIChmbG93 KSB7CisJICAgICAgY2FzZSBGTE9fUlRTQzogdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7IC8qIFJU Uy9DVFMgKGhhcmQpICovCisJCWJyZWFrOworCSAgICAgIGNhc2UgRkxPX0RUUlQ6IHRlbXAuY19j ZmxhZyB8PSBDRFRSQ1RTOyAvKiBEVFIvQ1RTIChoYXJkKSAqLworCQlicmVhazsKKwkgICAgfQor CX0KKwl4ID0gaW9jdGwodHR5ZmQsVENTRVRTLCZ0ZW1wKTsKKyAgICB9CisjZW5kaWYgLyogT1hP UyAqLworICAgIHJldHVybih4KTsKKworI2VuZGlmIC8qIFBsYW45ICovCit9CisKKy8qICBUIFQg UCBLIFQgIC0tICBDb25kaXRpb24gdGhlIGNvbW11bmljYXRpb24gbGluZSBmb3IgcGFja2V0cyAq LworLyogICAgICAgICAgICAgICAgIG9yIGZvciBtb2RlbSBkaWFsaW5nICovCisKKy8qCisgIElm IGNhbGxlZCB3aXRoIHNwZWVkID4gLTEsIGFsc28gc2V0IHRoZSBzcGVlZC4KKyAgUmV0dXJucyAw IG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisKKyAgTk9URTogdGhlICJ4ZmxvdyIgcGFyYW1l dGVyIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKyAgdHlwZSBvZiBm bG93IGNvbnRyb2wsIGJ1dCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCB0aGlzIHBhcmFtZXRlciBp cyBhbHNvCisgIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgZGlhbGluZy4gIFRoZXJlZm9y ZSwgd2hlbiB0aGUgdHJ1ZSBmbG93CisgIGNvbnRyb2wgc2V0dGluZyBpcyBuZWVkZWQsIHdlIGFj Y2VzcyB0aGUgZXh0ZXJuYWwgdmFyaWFibGUgImZsb3ciLCByYXRoZXIKKyAgdGhhbiB0cnVzdGlu ZyBvdXIgInhmbG93IiBhcmd1bWVudC4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQwordHRwa3Qo bG9uZyBzcGVlZCwgaW50IHhmbG93LCBpbnQgcGFyaXR5KQorI2Vsc2UKK3R0cGt0KHNwZWVkLHhm bG93LHBhcml0eSkgbG9uZyBzcGVlZDsgaW50IHhmbG93LCBwYXJpdHk7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKy8qIHR0cGt0ICovIHsKKyNpZm5kZWYgTk9MT0NBTAorICAgIGludCBzMjsKKyAg ICBpbnQgcyA9IC0xOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICBpbnQgeDsKKyAgICBleHRl cm4gaW50IGZsb3c7CQkJLyogUkVBTCBmbG93LWNvbnRyb2wgc2V0dGluZyAqLworCisgICAgaWYg KHR0eWZkIDwgMCkgcmV0dXJuKC0xKTsgICAgICAgICAgLyogTm90IG9wZW4uICovCisKKyAgICBk ZWJ1ZyhGMTAxLCJ0dHBrdCBwYXJpdHkiLCIiLHBhcml0eSk7CisgICAgZGVidWcoRjEwMSwidHRw a3QgeGZsb3ciLCIiLHhmbG93KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBzcGVlZCIsIiIsKGlu dCkgc3BlZWQpOworCisgICAgdHRwcnR5ID0gcGFyaXR5OyAgICAgICAgICAgICAgICAgICAgLyog TGV0IG90aGVyIHR0IGZ1bmN0aW9ucyBzZWUgdGhlc2UuICovCisgICAgdHRzcGVlZCA9IHNwZWVk OwkJCS8qIE1ha2UgZ2xvYmFsIGNvcHkgZm9yIHRoaXMgbW9kdWxlICovCisgICAgdHRwbXNrID0g dHRwcnR5ID8gMDE3NyA6IDAzNzc7CS8qIFBhcml0eSBzdHJpcHBpbmcgbWFzayAqLworI2lmZGVm IFBBUlNFTlNFCisgICAgbmVlZHBjaGsgPSB0dHBydHkgPyAwIDogMTsJCS8qIFBhcml0eSBjaGVj ayBuZWVkZWQ/ICovCisjZWxzZQorICAgIG5lZWRwY2hrID0gMDsKKyNlbmRpZiAvKiBQQVJTRU5T RSAqLworCisgICAgZGVidWcoRjEwMSwidHRwa3QgdHRwbXNrIiwiIix0dHBtc2spOworICAgIGRl YnVnKEYxMDEsInR0cGt0IG5ldGNvbm4iLCIiLG5ldGNvbm4pOworCisjaWZkZWYgTkVUQ09OTgkJ CQkvKiBObyBtb2RlLWNoYW5naW5nIGZvciB0ZWxuZXQgKi8KKyAgICBpZiAobmV0Y29ubikgewor I2lmZGVmIFRDUFNPQ0tFVAorI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgICAgIGlmICh0dG5ldCA9 PSBORVRfVENQQikgewkvKiBCdXQgdHVybiBvZmYgTmFnbGUgKi8KKyAgICAgICAgICAgIGV4dGVy biBpbnQgdGNwX25vZGVsYXk7CisgICAgICAgICAgICBub2RlbGF5X3NhdiA9IHRjcF9ub2RlbGF5 OworICAgICAgICAgICAgbm9fZGVsYXkodHR5ZmQsMSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBU Q1BfTk9ERUxBWSAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5jb21wb3J0 KCkpIHsKKyAgICAgICAgICAgIGludCByYyA9IC0xOworICAgICAgICAgICAgaWYgKHR2dGZsZyA9 PSAwICYmIHNwZWVkID09IHR0c3BlZWQgJiYgZmxvdyA9PSB0dGZsb3cKKyAgICAgICAgICAgICAg ICAgLyogJiYgdHRjYXJyID09IGN1cmNhcnIgKi8gKSB7CisgICAgICAgICAgICAgICAgZGVidWco RjEwMCwidHRwa3QgbW9kZXMgYWxyZWFkeSBzZXQsIHNraXBwaW5nLi4uIiwiIiwwKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4oMCk7CQkvKiBBbHJlYWR5IGJlZW4gY2FsbGVkLiAqLworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKGZsb3cgIT0gdHRmbG93KSB7CisgICAgICAgICAgICAg ICAgaWYgKChyYyA9IHRuc2V0ZmxvdyhmbG93KSkgPCAwKQorCQkgIHJldHVybihyYyk7CisgICAg ICAgICAgICAgICAgdHRmbG93ID0gZmxvdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChzcGVlZCAhPSB0dHNwZWVkKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWVkIDw9IDApIAor CQkgIHNwZWVkID0gdG5jX2dldF9iYXVkKCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJj ID0gdG5jX3NldF9iYXVkKHNwZWVkKSkgPCAwKQorCQkgIHJldHVybihyYyk7CisgICAgICAgICAg ICAgICAgdHRzcGVlZCA9IHNwZWVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG5jX3Nl dF9kYXRhc2l6ZSg4KTsKKwkgICAgdG5jX3NldF9zdG9wc2l6ZShzdG9wYml0cyk7CisKKyNpZmRl ZiBIV1BBUklUWQorICAgICAgICAgICAgaWYgKGh3cGFyaXR5KSB7CisgICAgICAgICAgICAgICAg c3dpdGNoIChod3Bhcml0eSkgeworCQkgIGNhc2UgJ2UnOgkJCS8qIEV2ZW4gKi8KKyAgICAgICAg ICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDAp OworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgzKTsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisJCSAgY2FzZSAnbyc6CQkJLyogT2RkICovCisgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOworICAgICAg ICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgyKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisJCSAgY2FzZSAnbSc6CQkJLyogTWFyayAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eTogbWFyayIsIiIsMCk7CisgICAg ICAgICAgICAgICAgICAgIHRuY19zZXRfcGFyaXR5KDQpOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKwkJICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLworICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eTogc3BhY2UiLCIiLDApOwor ICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSg1KTsKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIAorI2VuZGlm IC8qIEhXUEFSSVRZICovCisJICAgIHsKKyAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgx KTsgICAgICAgICAgICAgIC8qIE5vbmUgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR2 dGZsZyA9IDA7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBU Tl9DT01QT1JUICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgICAgIHR2dGZsZyA9IDA7 CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lmZGVm IE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8K KyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQ VFkgKi8KKworI2lmbmRlZiBQbGFuOQorICAgIGlmICh0dGZkZmxnICYmICFpc2F0dHkodHR5ZmQp KSByZXR1cm4oMCk7CisjZW5kaWYgLyogUGxhbjkgKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVm aW5lIFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZm5kZWYgU1ZPUlBPU0lY CQkJLyogQmVya2VsZXksIFY3LCBldGMuICovCisjaWZkZWYgTFBBU1M4CisvKgorIEZvciBzb21l IHJlYXNvbiwgd2l0aCBCU0QgdGVybWluYWwgZHJpdmVycywgeW91IGNhbid0IHNldCBGTE9XIHRv IFhPTi9YT0ZGCisgYWZ0ZXIgaGF2aW5nIHByZXZpb3VzbHkgc2V0IGl0IHRvIE5PTkUgd2l0aG91 dCBjbG9zaW5nIGFuZCByZW9wZW5pbmcgdGhlCisgZGV2aWNlLiAgVW5sZXNzIHRoZXJlJ3Mgc29t ZXRoaW5nIEkgb3Zlcmxvb2tlZCBiZWxvdy4uLgorKi8KKyAgICBpZiAodHRmbG93ID09IEZMT19O T05FICYmIGZsb3cgPT0gRkxPX1hPTlggJiYgeGxvY2FsID09IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0 dHBrdCBleGVjdXRpbmcgaG9ycmlibGUgZmxvdyBrbHVkZ2UiLCIiLDApOworCXR0Y2xvcygwKTsJ CQkvKiBDbG9zZSBpdCAqLworCXggPSAwOworCXR0b3Blbih0dG5tc3YsJngsdHRtZG0sMCk7CS8q IE9wZW4gaXQgYWdhaW4gKi8KKyAgICB9CisjZW5kaWYgLyogTFBBU1M4ICovCisjZW5kaWYgLyog U1ZPUlBPU0lYICovCisKKyNpZmRlZiBDT0hFUkVOVAkJCQkvKiBUaGlzIG11c3QgYmUgdmVzdGln aWFsIHNpbmNlIHdlICovCisjdW5kZWYgU1ZPUlBPU0lYCQkJLyogcmV2ZXJzZSBpdCBhIGZldyBs aW5lcyBiZWxvdy4uLiAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyAgICBpZiAoeGZsb3cg IT0gRkxPX0RJQUwgJiYgeGZsb3cgIT0gRkxPX0RJQVgpCisgICAgICB0dGZsb3cgPSB4ZmxvdzsJ CQkvKiBOb3cgbWFrZSB0aGlzIGF2YWlsYWJsZSB0b28uICovCisKKyNpZm5kZWYgTk9MT0NBTAor ICAgIGlmICh4bG9jYWwpIHsKKwlzMiA9IChpbnQpIChzcGVlZCAvIDEwTCk7CS8qIENvbnZlcnQg YnBzIHRvIGNwcyAqLworCWRlYnVnKEYxMDEsInR0cGt0IGNhbGxpbmcgdHRzc3BkIiwiIixzMik7 CisJcyA9IHR0c3NwZChzMik7CQkJLyogQ2hlY2sgYW5kIHNldCB0aGUgc3BlZWQgKi8KKwlkZWJ1 ZyhGMTAxLCJ0dHBrdCB0dHNzcGQgcmVzdWx0IiwiIixzKTsKKyAJY2FycmN0bCgmdHRyYXcsIHhm bG93ICE9IEZMT19ESUFMIC8qIENhcnJpZXIgY29udHJvbCAqLworCQkmJiAodHRjYXJyID09IENB Ul9PTiB8fCAodHRjYXJyID09IENBUl9BVVQgJiYgdHRtZG0gIT0gMCkpKTsKKwl0dnRmbGcgPSAw OwkJCS8qIFNvIHR0dnQoKSB3aWxsIHdvcmsgbmV4dCB0aW1lICovCisgICAgfQorI2VuZGlmIC8q IE5PTE9DQUwgKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlm IC8qIENPSEVSRU5UICovCisKKyNpZm5kZWYgU1ZPUlBPU0lYCQkJLyogQlNEIHNlY3Rpb24gKi8K KyAgICBpZiAoZmxvdyA9PSBGTE9fUlRTQyB8fAkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9sICov CisJZmxvdyA9PSBGTE9fRFRSQyB8fAorCWZsb3cgPT0gRkxPX0RUUlQpIHsKKwl0dGhmbG93KGZs b3csIDEsICZ0dHJhdyk7CisJZGVidWcoRjEwMCwidHRwa3QgaGFyZCBmbG93LCBUQU5ERU0gb2Zm LCBSQVcgb24iLCIiLDApOworCXR0cmF3LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2Zm IHNvZnR3YXJlIGZsb3cgY29udHJvbCAqLworCXR0cmF3LnNnX2ZsYWdzIHw9IFJBVzsJCS8qIEVu dGVyIHJhdyBtb2RlICovCisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7CS8qIE5v IGZsb3cgY29udHJvbCAqLworCWRlYnVnKEYxMDAsInR0cGt0IG5vIGZsb3csIFRBTkRFTSBvZmYs IFJBVyBvbiIsIiIsMCk7CisJdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYg c29mdHdhcmUgZmxvdyBjb250cm9sICovCisJdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOwkvKiBU dXJuIG9mZiBhbnkgaGFyZHdhcmUgZi9jIHRvbyAqLworCXR0cmF3LnNnX2ZsYWdzIHw9IFJBVzsJ CS8qIEVudGVyIHJhdyBtb2RlICovCisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19LRUVQKSB7 CS8qIEtlZXAgZGV2aWNlJ3Mgb3JpZ2luYWwgc2V0dGluZyAqLworCWRlYnVnKEYxMDAsInR0cGt0 IGtlZXBpbmcgb3JpZ2luYWwgVEFOREVNIiwiIiwwKTsKKwl0dHJhdy5zZ19mbGFncyAmPSB+VEFO REVNOworCXR0cmF3LnNnX2ZsYWdzIHw9ICh0dG9sZC5zZ19mbGFncyAmIFRBTkRFTSk7CisJLyog Tk9URTogV2Ugc2hvdWxkIGFsc28gaGFuZGxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBoZXJlISAq LworICAgIH0KKworLyogU0VUIEZMT1cgWE9OL1hPRkYgaXMgaW4gZWZmZWN0LCBvciBTRVQgRkxP VyBLRUVQIHJlc3VsdGVkIGluIFhvbi9Yb2ZmICovCisKKyAgICBpZiAoKGZsb3cgPT0gRkxPX1hP TlgpIHx8ICh0dHJhdy5zZ19mbGFncyAmIFRBTkRFTSkpIHsKKwlkZWJ1ZyhGMTAwLCJ0dHBrdCB0 dXJuaW5nIG9uIFRBTkRFTSIsIiIsMCk7CisJdHRyYXcuc2dfZmxhZ3MgfD0gVEFOREVNOwkvKiBT byBhc2sgZm9yIGl0LiAqLworCisjaWZkZWYgTFBBU1M4CQkJCS8qIENhbiBwYXNzIDgtYml0IGRh dGEgdGhyb3VnaD8gKi8KKy8qIElmIHRoZSBMUEFTUzggbG9jYWwgbW9kZSBpcyBhdmFpbGFibGUs IHRoZW4gZmxvdyBjb250cm9sIGNhbiBhbHdheXMgICovCisvKiBiZSB1c2VkLCBldmVuIGlmIHBh cml0eSBpcyBub25lIGFuZCB3ZSBhcmUgdHJhbnNmZXJyaW5nIDgtYml0IGRhdGEuICAqLworLyog QnV0IHdlIG9ubHkgbmVlZCB0byBkbyBhbGwgdGhpcyBpZiBYb24vWG9mZiBpcyByZXF1ZXN0ZWQu ICovCisvKiBCVVQuLi4gdGhpcyB0ZW5kcyBub3QgdG8gd29yayB0aHJvdWdoIElQIG9yIExBVCBj b25uZWN0aW9ucywgdGVybWluYWwgKi8KKy8qIHNlcnZlcnMsIHRlbG5ldCwgcmxvZ2luLCBldGMs IHNvIGl0IGlzIGN1cnJlbnRseSBkaXNhYmxlZC4gKi8KKwl4ID0gTFBBU1M4OwkJCS8qIElmIExQ QVNTOCBkZWZpbmVkLCB0aGVuICovCisJZGVidWcoRjEwMCwidHRwa3QgZXhlY3V0aW5nIExQQVNT OCBjb2RlIiwiIiwwKTsKKwlpZiAobG1vZGVmKSB7CQkJLyogVElPQ0xCSVMgbXVzdCBiZSB0b28u ICovCisJICAgIHggPSBpb2N0bCh0dHlmZCxUSU9DTEJJUywmeCk7IC8qIFRyeSB0byBzZXQgTFBB U1M4LiAqLworCSAgICBpZiAoeCA8IDApIHsKKwkJZGVidWcoRjEwMCwidHRwa3QgVElPQ0xCSVMg ZXJyb3IiLCIiLDApOworCSAgICB9IGVsc2UgeworCQlsbW9kZWYrKzsKKwkJZGVidWcoRjEwMCwi dHRwa3QgVElPQ0xCSVMgb2siLCIiLDApOworCSAgICB9CisJfQorLyoKKyBCdXQgaWYgd2UgdXNl IExQQVNTOCBtb2RlLCB3ZSBtdXN0IGV4cGxpY2l0bHkgdHVybiBvZmYKKyB0ZXJtaW5hbCBpbnRl cnJ1cHRzIG9mIGFsbCBraW5kcy4KKyovCisjaWZkZWYgVElPQ0dFVEMJCQkJLyogTm90IHJhd21v ZGUsICovCisJaWYgKHRjaGFyZiAmJiAoeGxvY2FsID09IDApKSB7CS8qIG11c3QgdHVybiBvZmYg Ki8KKwkgICAgdGNobm9pLnRfaW50cmMgPSAtMTsJLyogaW50ZXJydXB0IGNoYXJhY3RlciAqLwor CSAgICB0Y2hub2kudF9xdWl0YyA9IC0xOwkvKiBhbmQgcXVpdCBjaGFyYWN0ZXIuICovCisJICAg IHRjaG5vaS50X3N0YXJ0YyA9IDE3OwkvKiBNYWtlIHN1cmUgeG9uICovCisJICAgIHRjaG5vaS50 X3N0b3BjID0gMTk7CS8qIGFuZCB4b2ZmIG5vdCBpZ25vcmVkLiAqLworI2lmbmRlZiBOT0JSS0MK KwkgICAgdGNobm9pLnRfZW9mYyA9IC0xOwkJLyogZW9mIGNoYXJhY3Rlci4gKi8KKwkgICAgdGNo bm9pLnRfYnJrYyA9IC0xOwkJLyogYnJrIGNoYXJhY3Rlci4gKi8KKyNlbmRpZiAvKiBOT0JSS0Mg Ki8KKwkgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRDLCZ0Y2hub2kpIDwgMCkgeworCQlkZWJ1 ZyhGMTAwLCJ0dHBrdCBUSU9DU0VUQyBmYWlsZWQiLCIiLDApOworCSAgICB9IGVsc2UgeworCQl0 Y2hhcmYgPSAxOworCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0VUQyBvayIsIiIsMCk7CisJICAg IH0KKyNpZmRlZiBDT01NRU5UCisvKiBvbmx5IGZvciBwYXJhbm9pZCBkZWJ1Z2dpbmcgKi8KKwkg ICAgaWYgKHRjaGFyZikgeworCQlzdHJ1Y3QgdGNoYXJzIGZvbzsKKwkJY2hhciB0Y2hidWZbMTAw XTsKKwkJaW9jdGwoMCxUSU9DR0VUQywmZm9vKTsKKwkJc3ByaW50Zih0Y2hidWYsCisJCSAgICAi aW50cj0lZCxxdWl0PSVkLCBzdGFydD0lZCwgc3RvcD0lZCwgZW9mPSVkLCBicms9JWQiLAorCQkg ICAgZm9vLnRfaW50cmMsIGZvby50X3F1aXRjLCBmb28udF9zdGFydGMsCisJCSAgICBmb28udF9z dG9wYywgZm9vLnRfZW9mYywgIGZvby50X2Jya2MpOworCQlkZWJ1ZyhGMTEwLCJ0dHBrdCBjaGFy cyIsdGNoYnVmLDApOworCSAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCX0KKwl0dHJhdy5z Z19mbGFncyB8PSBDQlJFQUs7CS8qIE5lZWRlZCBmb3IgdW5rbm93biByZWFzb24gKi8KKyNlbmRp ZiAvKiBUSU9DR0VUQyAqLworCisvKiBQcmV2ZW50IHN1c3BlbmQgZHVyaW5nIHBhY2tldCBtb2Rl ICovCisjaWZkZWYgVElPQ0dMVEMJCQkJLyogTm90IHJhd21vZGUsICovCisJaWYgKGx0Y2hhcmYg JiYgKHhsb2NhbCA9PSAwKSkgewkvKiBtdXN0IHR1cm4gb2ZmICovCisJICAgIGx0Y2hub2kudF9z dXNwYyA9IC0xOwkvKiBzdXNwZW5kIGNoYXJhY3RlciAqLworCSAgICBsdGNobm9pLnRfZHN1c3Bj ID0gLTE7CS8qIGFuZCBkZWxheWVkIHN1c3BlbmQgY2hhcmFjdGVyICovCisJICAgIGlmIChpb2N0 bCh0dHlmZCxUSU9DU0xUQywmdGNobm9pKSA8IDApIHsKKwkJZGVidWcoRjEwMCwidHRwa3QgVElP Q1NMVEMgZmFpbGVkIiwiIiwwKTsKKwkgICAgfSBlbHNlIHsKKwkJbHRjaGFyZiA9IDE7CisJCWRl YnVnKEYxMDAsInR0cGt0IFRJT0NTTFRDIG9rIiwiIiwwKTsKKwkgICAgfQorCX0KKyNlbmRpZiAv KiBUSU9DR0xUQyAqLworCisjZWxzZSAvKiBMUEFTUzggbm90IGRlZmluZWQgKi8KKworLyogUHJl dmlvdXNseSwgQlNELWJhc2VkIGltcGxlbWVudGF0aW9ucyBhbHdheXMgKi8KKy8qIHVzZWQgcmF3 bW9kZSBmb3IgcGFja2V0cy4gIE5vdywgd2UgdXNlIHJhd21vZGUgb25seSBpZiBwYXJpdHkgaXMg Tk9ORS4gKi8KKy8qIFRoaXMgYWxsb3dzIHRoZSBmbG93IGNvbnRyb2wgcmVxdWVzdGVkIGFib3Zl IHRvIGFjdHVhbGx5IHdvcmssIGJ1dCBvbmx5ICovCisvKiBpZiB0aGUgdXNlciBhc2tzIGZvciBw YXJpdHkgKHdoaWNoIGFsc28gbWVhbnMgdGhleSBnZXQgOHRoLWJpdCBxdW90aW5nKS4gKi8KKwor CWlmIChwYXJpdHkpIHsJCQkvKiBJZiBwYXJpdHksICovCisJICAgIHR0cmF3LnNnX2ZsYWdzICY9 IH5SQVc7CS8qIHVzZSBjb29rZWQgbW9kZSAqLworI2lmZGVmIENPTU1FTlQKKy8qIFdIWT8/PyAq LworCSAgICBpZiAoeGxvY2FsKQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgICB0dHJhdy5z Z19mbGFncyB8PSBDQlJFQUs7CisJICAgIGRlYnVnKEYxMDEsInR0cGt0IGNvb2tlZCwgY2JyZWFr LCBwYXJpdHkiLCIiLHBhcml0eSk7CisjaWZkZWYgVElPQ0dFVEMJCQkJLyogTm90IHJhd21vZGUs ICovCisJICAgIGlmICh0Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkgeyAvKiBtdXN0IHR1cm4gb2Zm ICovCisJCXRjaG5vaS50X2ludHJjID0gLTE7CS8qIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KKwkJ dGNobm9pLnRfcXVpdGMgPSAtMTsJLyogYW5kIHF1aXQgY2hhcmFjdGVyLiAqLworCQl0Y2hub2ku dF9zdGFydGMgPSAxNzsJLyogTWFrZSBzdXJlIHhvbiAqLworCQl0Y2hub2kudF9zdG9wYyA9IDE5 OwkvKiBhbmQgeG9mZiBub3QgaWdub3JlZC4gKi8KKyNpZm5kZWYgTk9CUktDCisJCXRjaG5vaS50 X2VvZmMgPSAtMTsJLyogZW9mIGNoYXJhY3Rlci4gKi8KKwkJdGNobm9pLnRfYnJrYyA9IC0xOwkv KiBicmsgY2hhcmFjdGVyLiAqLworI2VuZGlmIC8qIE5PQlJLQyAqLworCQlpZiAoaW9jdGwodHR5 ZmQsVElPQ1NFVEMsJnRjaG5vaSkgPCAwKSB7CisJCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9D U0VUQyBmYWlsZWQiLCIiLDApOworCQl9IGVsc2UgeworCQkgICAgdGNoYXJmID0gMTsKKwkJICAg IGRlYnVnKEYxMDAsInR0cGt0IFRJT0NTRVRDIG9rIiwiIiwwKTsKKwkJfQorCSAgICB9CisjZW5k aWYgLyogVElPQ0dFVEMgKi8KKyNpZmRlZiBUSU9DR0xUQwkJCQkvKiBOb3QgcmF3bW9kZSwgKi8K Ky8qIFByZXZlbnQgc3VzcGVuZCBkdXJpbmcgcGFja2V0IG1vZGUgKi8KKwkgICAgaWYgKGx0Y2hh cmYgJiYgKHhsb2NhbCA9PSAwKSkgeyAvKiBtdXN0IHR1cm4gb2ZmICovCisJCWx0Y2hub2kudF9z dXNwYyA9IC0xOwkvKiBzdXNwZW5kIGNoYXJhY3RlciAqLworCQlsdGNobm9pLnRfZHN1c3BjID0g LTE7CS8qIGFuZCBkZWxheWVkIHN1c3BlbmQgY2hhcmFjdGVyICovCisJCWlmIChpb2N0bCh0dHlm ZCxUSU9DU0xUQywmdGNobm9pKSA8IDApIHsKKwkJICAgIGRlYnVnKEYxMDAsInR0cGt0IFRJT0NT TFRDIGZhaWxlZCIsIiIsMCk7CisJCX0gZWxzZSB7CisJCSAgICBsdGNoYXJmID0gMTsKKwkJICAg IGRlYnVnKEYxMDAsInR0cGt0IFRJT0NTTFRDIG9rIiwiIiwwKTsKKwkJfQorCSAgICB9CisjZW5k aWYgLyogVElPQ0dMVEMgKi8KKwl9IGVsc2UgewkJCS8qIElmIG5vIHBhcml0eSwgKi8KKwkgICAg dHRyYXcuc2dfZmxhZ3MgfD0gUkFXOwkvKiBtdXN0IHVzZSA4LWJpdCByYXcgbW9kZS4gKi8KKwkg ICAgZGVidWcoRjEwMSwidHRwa3Qgc2V0dGluZyByYXdtb2RlLCBwYXJpdHkiLCIiLHBhcml0eSk7 CisJfQorI2VuZGlmIC8qIExQQVNTOCAqLworICAgIH0gLyogRW5kIG9mIFhvbi9Yb2ZmIHNlY3Rp b24gKi8KKworICAgIC8qIERvbid0IGVjaG8sIGRvbid0IG1hcCBDUiB0byBDUkxGIG9uIG91dHB1 dCwgZG9uJ3QgZm9vbCB3aXRoIGNhc2UgKi8KKyNpZmRlZiBMQ0FTRQorICAgIHR0cmF3LnNnX2Zs YWdzICY9IH4oRUNIT3xDUk1PRHxMQ0FTRSk7CisjZWxzZQorICAgIHR0cmF3LnNnX2ZsYWdzICY9 IH4oRUNIT3xDUk1PRCk7CisjZW5kaWYgLyogTENBU0UgKi8KKworI2lmZGVmIFRPV0VSMQorICAg IHR0cmF3LnNnX2ZsYWdzICY9IH5BTllQOyAgICAgICAgICAgIC8qIE11c3Qgc2V0IHRoaXMgb24g b2xkIFRvd2VycyAqLworI2VuZGlmIC8qIFRPV0VSMSAqLworCisjaWZkZWYgQkVMTFYxMAorICAg IGlmIChpb2N0bCh0dHlmZCxUSU9DU0VUUCwmdHRyYXcpIDwgMCkgLyogU2V0IHRoZSBuZXcgbW9k ZXMuICovCisgICAgICByZXR1cm4oLTEpOworI2Vsc2UKKyAgICBlcnJubyA9IDA7CisgICAgaWYg KHN0dHkodHR5ZmQsJnR0cmF3KSA8IDApIHsgICAgICAgLyogU2V0IHRoZSBuZXcgbW9kZXMuICov CisgICAgICAgIGRlYnVnKEYxMDEsInR0cGt0IHN0dHkgZmFpbGVkIiwiIixlcnJubyk7CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfQorI2VuZGlmIC8qIEJFTExWMTAgKi8KKyAgICBkZWJ1ZyhG MTAwLCJ0dHBrdCBzdHR5IG9rIiwiIiwwKTsKKworI2lmZGVmIHNvbnlfbmV3cworICAgIHggPSB4 bG9jYWwgPyBrbV9leHQgOiBrbV9jb247CS8qIFB1dCBsaW5lIGluIEFTQ0lJIG1vZGUuICovCisg ICAgaWYgKHggIT0gLTEpIHsJCQkvKiBNYWtlIHN1cmUgd2Uga25vdyBvcmlnaW5hbCBtb2Rlcy4g Ki8KKwl4ICY9IH5LTV9UVFlQRTsKKwl4IHw9IEtNX0FTQ0lJOworCWlmIChpb2N0bCh0dHlmZCxU SU9DS1NFVCwgJngpIDwgMCkgeworCSAgICBwZXJyb3IoInR0cGt0IGNhbid0IHNldCBBU0NJSSBt b2RlIik7CisJICAgIGRlYnVnKEYxMDEsInR0cGt0IGVycm9yIHNldHRpbmcgQVNDSUkgbW9kZSIs IiIseCk7CisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAwLCJ0dHBr dCBzZXQgQVNDSUkgbW9kZSBvayIsIiIsMCk7CisjZW5kaWYgLyogc29ueV9uZXdzICovCisKKyAg ICBpZiAoeGxvY2FsID09IDApIHsJCQkvKiBUdXJuIHRoaXMgb2ZmIHNvIHdlIGNhbiByZWFkICov CisJc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsJCS8qIEN0cmwtQyBjaGFycyB0eXBlZCBhdCBjb25z b2xlICovCisJc2lnaW50X2lnbiA9IDE7CisgICAgfQorICAgIHR2dGZsZyA9IDA7CQkJCS8qIFNv IHR0dnQoKSB3aWxsIHdvcmsgbmV4dCB0aW1lICovCisgICAgZGVidWcoRjEwMCwidHRwa3Qgc3Vj Y2VzcyIsIiIsMCk7CisgICAgcmV0dXJuKDApOworCisjZW5kaWYgLyogTm90IEFUVFNWIG9yIFBP U0lYICovCisKKy8qIEFUJlQgVU5JWCBhbmQgUE9TSVggKi8KKworI2lmZGVmIENPSEVSRU5UCisj ZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBTVk9SUE9T SVgKKyAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkJLyogWG9uL1hvZmYgKi8KKwl0dHJhdy5j X2lmbGFnIHw9IChJWE9OfElYT0ZGKTsKKwl0dGhmbG93KGZsb3csIDAsICZ0dHJhdyk7CisgICAg fSBlbHNlIGlmIChmbG93ID09IEZMT19OT05FKSB7CS8qIE5vbmUgKi8KKwkvKiBOT1RFOiBXZSBz aG91bGQgYWxzbyB0dXJuIG9mZiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KKwl0dHJh dy5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CisJdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOwor ICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgewkvKiBLZWVwICovCisJdHRyYXcuY19p ZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiBUdXJuIG9mZiBYb24vWG9mZiBmbGFncyAqLworCXR0 cmF3LmNfaWZsYWcgfD0gKHR0b2xkLmNfaWZsYWcgJiAoSVhPTnxJWE9GRikpOyAvKiBPUiBpbiBv bGQgb25lcyAqLworCS8qIE5PVEU6IFdlIHNob3VsZCBhbHNvIGhhbmRsZSBoYXJkd2FyZSBmbG93 IGNvbnRyb2wgaGVyZSEgKi8KKyNpZmRlZiBQT1NJWF9DUlRTQ1RTCisvKiBJbiBMaW51eCBjYXNl LCB3ZSBkbyB0aGlzLCB3aGljaCBpcyB1bmxpa2VseSB0byBiZSBwb3J0YWJsZSAqLworICAgICAg ICB0dHJhdy5jX2NmbGFnICY9IH5DUlRTQ1RTOwkvKiBUdXJuIG9mZiBSVFMvQ1RTIGZsYWcgKi8K KyAgICAgICAgdHRyYXcuY19jZmxhZyB8PSAodHRvbGQuY19jZmxhZyAmIENSVFNDVFMpOyAvKiBP UiBpbiBvbGQgb25lICovCisjZW5kaWYgLyogUE9TSVhfQ1JUU0NUUyAqLworICAgIH0gZWxzZSBp ZiAoZmxvdyA9PSBGTE9fUlRTQyB8fAkvKiBIYXJkd2FyZSAqLworCSAgICAgICBmbG93ID09IEZM T19EVFJDIHx8CisJICAgICAgIGZsb3cgPT0gRkxPX0RUUlQpIHsKKwl0dHJhdy5jX2lmbGFnICY9 IH4oSVhPTnxJWE9GRik7CS8qICgxOTApICovCisJdHRoZmxvdyhmbG93LCAxLCAmdHRyYXcpOwor ICAgIH0KKyAgICB0dHJhdy5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE8pOworICAgIHR0cmF3LmNf bGZsYWcgJj0gfklTSUc7CQkvKiBEbyBOT1QgY2hlY2sgZm9yIGludGVycnVwdCBjaGFycyAqLwor CisjaWZuZGVmIE9YT1MKKyNpZmRlZiBRTlgKKyAgICBpZiAoZmxvdyAhPSBGTE9fUlRTQyAmJiBm bG93ICE9IEZMT19EVFJDICYmIGZsb3cgIT0gRkxPX0RUUlQpCisjZW5kaWYgLyogUU5YICovCisj aWZuZGVmIENPSEVSRU5UCisgICAgICB0dHJhdy5jX2xmbGFnICY9IH5JRVhURU47CQkvKiBUdXJu IG9mZiBeTy9eViBwcm9jZXNzaW5nICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbHNlIC8q IE9YT1MgKi8KKyAgICB0dHJhdy5jX2NjW1ZESVNDQVJEXSA9IHR0cmF3LmNfY2NbVkxORVhUXSA9 IENESVNBQkxFOworI2VuZGlmIC8qIE9YT1MgKi8KKyAgICB0dHJhdy5jX2xmbGFnIHw9IE5PRkxT SDsJCS8qIERvbid0IGZsdXNoICovCisgICAgdHRyYXcuY19pZmxhZyB8PSBJR05QQVI7CQkvKiBJ Z25vcmUgcGFyaXR5IGVycm9ycyAqLworI2lmZGVmIEFUVFNWCisjaWZkZWYgQlNENDQKKyAgICB0 dHJhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUHxJ WEFOWSk7CisjZWxzZQorICAgIHR0cmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5MQ1J8SUdOQ1J8 SUNSTkx8SVVDTEN8SU5QQ0t8SVNUUklQfElYQU5ZKTsKKyNlbmRpZiAvKiBCU0Q0NCAqLworI2Vs c2UgLyogUE9TSVggKi8KKyAgICB0dHJhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNS fElDUk5MfElOUENLfElTVFJJUCk7CisjZW5kaWYgLyogQVRUU1YgKi8KKyAgICB0dHJhdy5jX29m bGFnICY9IH5PUE9TVDsKKyAgICB0dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUpOworICAgIHR0cmF3 LmNfY2ZsYWcgfD0gKENTOHxDUkVBRHxIVVBDTCk7CisKKyNpZmRlZiBDU1RPUEIKKyAgICBpZiAo eGxvY2FsKSB7CisJaWYgKHN0b3BiaXRzID09IDIpIHsKKwkgICAgdHRyYXcuY19jZmxhZyB8PSBD U1RPUEI7CS8qIDIgc3RvcCBiaXRzICovCisJICAgIGRlYnVnKEYxMDAsInR0cGt0IDIgc3RvcGJp dHMiLCIiLDApOworCX0gZWxzZSBpZiAoc3RvcGJpdHMgPT0gMSkgeworCSAgICB0dHJhdy5jX2Nm bGFnICY9IH4oQ1NUT1BCKTsJLyogMSBzdG9wIGJpdCAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dHBr dCAxIHN0b3BiaXQiLCIiLDApOworCX0KKyAgICB9CisjZW5kaWYgLyogQ1NUT1BCICovCisKKyNp ZmRlZiBIV1BBUklUWQorICAgIGlmIChod3Bhcml0eSAmJiB4bG9jYWwpIHsJCS8qIEhhcmR3YXJl IHBhcml0eSAqLworCXR0cmF3LmNfY2ZsYWcgfD0gUEFSRU5COwkvKiBFbmFibGUgcGFyaXR5ICov CisjaWZkZWYgQ09NTUVOVAorLyogVW5jb21tZW50IHRoaXMgb25seSBpZiBuZWVkZWQgLS0gSSBk b24ndCB0aGluayBpdCBpcyAqLworCXR0cmF3LmNfY2ZsYWcgJj0gfihDU0laRSk7CS8qIENsZWFy IG91dCBjaGFyYWN0ZXItc2l6ZSBtYXNrICovCisJdHRyYXcuY19jZmxhZyB8PSBDUzg7CQkvKiBB bmQgc2V0IGl0IHRvIDggKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgSUdOUEFSCisJ dHRyYXcuY19pZmxhZyB8PSBJR05QQVI7CS8qIERvbid0IGRpc2NhcmQgaW5jb21pbmcgYnl0ZXMg Ki8KKwlkZWJ1ZyhGMTAwLCJ0dHBrdCBJR05QQVIiLCIiLDApOyAvKiB0aGF0IGhhdmUgcGFyaXR5 IGVycm9ycyAqLworI2VuZGlmIC8qIElHTlBBUiAqLworCXN3aXRjaCAoaHdwYXJpdHkpIHsKKwkg IGNhc2UgJ2UnOgkJCS8qIEV2ZW4gKi8KKwkgICAgdHRyYXcuY19jZmxhZyAmPSB+KFBBUk9ERCk7 CisJICAgIGRlYnVnKEYxMDAsInR0cGt0IDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKKwkg ICAgYnJlYWs7CisJICBjYXNlICdvJzoJCQkvKiBPZGQgKi8KKwkgICAgdHRyYXcuY19jZmxhZyB8 PSBQQVJPREQ7CisJICAgIGRlYnVnKEYxMDAsInR0cGt0IDggYml0cyArIG9kZCBwYXJpdHkiLCIi LDApOworCSAgICBicmVhazsKKwkgIGNhc2UgJ20nOgkJCS8qIE1hcmsgKi8KKwkgIGNhc2UgJ3Mn OgkJCS8qIFNwYWNlICovCisJICAgIC8qIFBBUkVYVCBpcyBtZW50aW9uZWQgaW4gU1ZJRCBidXQg dGhlIGRldGFpbHMgYXJlIG5vdCBnaXZlbi4gKi8KKwkgICAgLyogUEFSRVhUIGlzIG5vdCBpbmNs dWRlZCBpbiBQT1NJWCBJU08vSUVDIDk5NDUtMS4gKi8KKwkgICAgZGVidWcoRjEwMCwidHRwa3Qg OCBiaXRzICsgaW52YWxpZCBwYXJpdHkiLCIiLDApOworCSAgICBicmVhazsKKwl9CisgICAgfSBl bHNlIHsJCQkJLyogV2UgaGFuZGxlIHBhcml0eSBvdXJzZWx2ZXMgKi8KKyNlbmRpZiAvKiBIV1BB UklUWSAqLworCXR0cmF3LmNfY2ZsYWcgJj0gfihQQVJFTkIpOwkvKiBEb24ndCBlbmFibGUgcGFy aXR5ICovCisjaWZkZWYgSFdQQVJJVFkKKyAgICB9CisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKwor I2lmZGVmIElYMzcwCisgICAgdHRyYXcuY19jY1s0XSA9IDQ4OyAgLyogU28gU2VyaWVzLzEgZG9l c24ndCBpbnRlcnJ1cHQgb24gZXZlcnkgY2hhciAqLworICAgIHR0cmF3LmNfY2NbNV0gPSAxOwor I2Vsc2UKKyNpZm5kZWYgVkVPRgkJCQkvKiBmb3IgREdVWCB0aGlzIGlzIFZFT0YsIG5vdCBWTUlO ICovCisgICAgdHRyYXcuY19jY1s0XSA9IDE7ICAgLyogW1ZNSU5dICByZXR1cm4gbWF4IG9mIHRo aXMgbWFueSBjaGFyYWN0ZXJzIG9yICovCisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVk1J TgorICAgIHR0cmF3LmNfY2NbVk1JTl0gPSAxOworI2VuZGlmIC8qIFZNSU4gKi8KKyNlbHNlIC8q IE9YT1MgKi8KKyAgICB0dHJhdy5jX21pbiA9IDE7CisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlm IC8qIFZFT0YgKi8KKyNpZm5kZWYgVkVPTAkJCQkvKiBmb3IgREdVWCB0aGlzIGlzIFZFT0wsIG5v dCBWVElNRSAqLworICAgIHR0cmF3LmNfY2NbNV0gPSAwOwkgLyogW1ZUSU1FXSB3aGVuIHRoaXMg bWFueSBzZWNzLzEwIGV4cGlyZSB3L25vIGlucHV0ICovCisjZWxzZQorI2lmbmRlZiBPWE9TCisj aWZkZWYgVlRJTUUKKyAgICB0dHJhdy5jX2NjW1ZUSU1FXSA9IDA7CisjZW5kaWYgLyogVlRJTUUg Ki8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICB0dHJhdy5jX3RpbWUgPSAwOworI2VuZGlmIC8qIE9Y T1MgKi8KKyNlbmRpZiAvKiBWRU9MICovCisjZW5kaWYgLyogSVgzNzAgKi8KKworI2lmZGVmIFZJ TlRSCQkJCS8qIFR1cm4gb2ZmIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KKyAgICBpZiAoeGxvY2Fs ID09IDApCQkJLyogc28gXkNeQyBjYW4gYnJlYWsgdXMgb3V0IG9mICovCisgICAgICB0dHJhdy5j X2NjW1ZJTlRSXSA9IDA7CQkvKiBwYWNrZXQgbW9kZS4gKi8KKyNlbmRpZiAvKiBWSU5UUiAqLwor CisjaWZkZWYgUGxhbjkKKyAgICBpZiAocDl0dHlwYXJpdHkoJ24nKSA8IDApCisJcmV0dXJuIC0x OworI2Vsc2UKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICBlcnJubyA9IDA7CisjaWZkZWYgQkVP U09SQkVCT1gKKyAgICB0dHJhdy5jX2NjW1ZNSU5dID0gMDsJCS8qIERSNyBjYW4gb25seSBwb2xs LiAqLworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisKKyNkZWZpbmUgVEVTVElORzIzNAorI2lm ZGVmIFRFU1RJTkcyMzQKKyAgICBpZiAoMSkgeworCWRlYnVnKEYxMDAsInR0cGt0IFRFU1RJTkcy MzQgcmF3bW9kZSIsIiIsMCk7CisKKwkvKiBpZmxhZ3MgKi8KKwl0dHJhdy5jX2lmbGFnICY9IH4o UEFSTVJLfElTVFJJUHxCUktJTlR8SU5MQ1J8SUdOQ1J8SUNSTkwpOworCXR0cmF3LmNfaWZsYWcg Jj0gfihJTlBDS3xJR05QQVJ8SVhPTnxJWE9GRik7CisJdHRyYXcuY19pZmxhZyB8PSBJR05CUks7 CisjaWZkZWYgSU1BWEJFTAorCXR0cmF3LmNfaWZsYWcgJj0gfklNQVhCRUw7CisjZW5kaWYJLyog SU1BWEJFTCAqLworI2lmZGVmIElYQU5ZCisJdHRyYXcuY19pZmxhZyAmPSB+SVhBTlk7CisjZW5k aWYJLyogSVhBTlkgKi8KKyNpZmRlZiBJVUNMQworCXR0cmF3LmNfaWZsYWcgJj0gfklVQ0xDOwor I2VuZGlmIC8qIElVQ0xDICovCisKKwkvKiBvZmxhZ3MgKi8KKwl0dHJhdy5jX29mbGFnICY9IH5P UE9TVDsKKyNpZmRlZiBPWFRBQlMKKwl0dHJhdy5jX29mbGFnICY9IH5PWFRBQlM7CisjZW5kaWYg LyogT1hUQUJTICovCisjaWZkZWYgT05PQ1IKKwl0dHJhdy5jX29mbGFnICY9IH5PTk9DUjsKKyNl bmRpZiAvKiBPTk9DUiAqLworI2lmZGVmIE9OTFJFVAorCXR0cmF3LmNfb2ZsYWcgJj0gfk9OTFJF VDsKKyNlbmRpZiAvKiBPTkxSRVQgKi8KKyNpZmRlZiBPTkxDUgorCXR0cmF3LmNfb2ZsYWcgJj0g fk9OTENSOworI2VuZGlmIC8qIE9OTENSICovCisKKwkvKiBsZmxhZ3MgKi8KKwl0dHJhdy5jX2xm bGFnICY9IH5FQ0hPOworI2lmZGVmIEVDSE9FCisJdHRyYXcuY19sZmxhZyAmPSB+RUNIT0U7Cisj ZW5kaWYgLyogRUNIT0UgKi8KKyNpZmRlZiBFQ0hPTkwKKwl0dHJhdy5jX2xmbGFnICY9IH5FQ0hP Tkw7CisjZW5kaWYgLyogRUNIT05MICovCisjaWZkZWYgRUNIT1BSVAorCXR0cmF3LmNfbGZsYWcg Jj0gfkVDSE9QUlQ7CisjZW5kaWYgLyogRUNIT1BSVCAqLworI2lmZGVmIEVDSE9LRQorCXR0cmF3 LmNfbGZsYWcgJj0gfkVDSE9LRTsKKyNlbmRpZiAvKiBFQ0hPS0UgKi8KKyNpZmRlZiBFQ0hPQ1RM CisJdHRyYXcuY19sZmxhZyAmPSB+RUNIT0NUTDsKKyNlbmRpZiAvKiBFQ0hPQ1RMICovCisjaWZk ZWYgQUxUV0VSQVNFCisJdHRyYXcuY19sZmxhZyAmPSB+QUxUV0VSQVNFOworI2VuZGlmIC8qIEFM VFdFUkFTRSAqLworI2lmZGVmIEVYVFBST0MKKwl0dHJhdy5jX2xmbGFnICY9IH5FWFRQUk9DOwor I2VuZGlmIC8qIEVYVFBST0MgKi8KKwl0dHJhdy5jX2xmbGFnICY9IH4oSUNBTk9OfElTSUd8SUVY VEVOfFRPU1RPUHxGTFVTSE98UEVORElOKTsKKyNpZmRlZiBOT0tFUk5JTkZPCisJdHRyYXcuY19s ZmxhZyB8PSBOT0tFUk5JTkZPOworI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KKwkvKiB0dHJhdy5j X2xmbGFnIHw9IE5PRkxTSDsgKi8KKwl0dHJhdy5jX2xmbGFnICY9IH5OT0ZMU0g7CisKKwkvKiBj ZmxhZ3MgKi8KKwl0dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkV8UEFSRU5CfFBBUk9ERCk7CisJdHRy YXcuY19jZmxhZyB8PSBDUzh8Q1JFQUQ7CisjaWZkZWYgVk1JTgorCXR0cmF3LmNfY2NbVk1JTl0g PSAxOwkJLyogU3VwcG9zZWRseSBuZWVkZWQgZm9yIEFJWCAqLworI2VuZGlmCS8qIFZNSU4gKi8K KworICAgIH0KKyNlbmRpZiAvKiBURVNUSU5HMjM0ICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ0dHBr dCBjYWxsaW5nIHRjc2V0YXR0cihUQ1NFVEFXKSIsIiIsMCk7CisgICAgeCA9IHRjc2V0YXR0cih0 dHlmZCxUQ1NBRFJBSU4sJnR0cmF3KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBCU0Q0NE9SUE9T SVggdGNzZXRhdHRyIiwiIix4KTsKKyAgICBpZiAoeCA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dHBr dCBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgIHJldHVy bigtMSk7CisgICAgfQorI2Vsc2UgLyogQlNENDRPUlBPU0lYICovCisgICAgeCA9IGlvY3RsKHR0 eWZkLFRDU0VUQVcsJnR0cmF3KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBBVFRTViBpb2N0bCBU Q1NFVEFXIiwiIix4KTsKKyAgICBpZiAoeCA8IDApIHsgIC8qIHNldCBuZXcgbW9kZXMgLiAqLwor CWRlYnVnKEYxMDEsInR0cGt0IEFUVFNWIGlvY3RsIFRDU0VUQVcgZXJybm8iLCIiLGVycm5vKTsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisj ZW5kaWYgLyogUGxhbjkgKi8KKyAgICB0dnRmbGcgPSAwOworICAgIGRlYnVnKEYxMDAsInR0cGt0 IG9rIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQVRUU1YgKi8KKworI2lmZGVm IENPSEVSRU5UCisjdW5kZWYgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworfQor CisvKiAgVCBUIFMgRSBUIEYgTCBPIFcgIC0tICBTZXQgZmxvdyBjb250cm9sIGltbWVkaWF0ZWx5 LiAgKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlmIC8qIENP SEVSRU5UICovCisKK2ludAordHRzZXRmbG93KGZsb3cpIGludCBmbG93OyB7CisgICAgaWYgKHR0 eWZkIDwgMCkJCQkvKiBBIGNoYW5uZWwgbXVzdCBiZSBvcGVuICovCisgICAgICByZXR1cm4oLTEp OworCisgICAgZGVidWcoRjEwMSwidHRzZXRmbG93IGZsb3ciLCIiLGZsb3cpOworCisjaWZkZWYg VE5fQ09NUE9SVAorICAgIGlmIChuZXRjb25uICYmIGlzdG5jb21wb3J0KCkpIHsKKwlkZWJ1ZyhG MTAxLCJ0dHNldGZsb3cgbmV0IG1vZGVtIiwiIix0dG1kbSk7CisJcmV0dXJuKHRuc2V0Zmxvdyhm bG93KSk7CisgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNpZmRlZiBORVRDTUQKKyAg ICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVU UFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisKKyNp ZmRlZiBDT01NRU5UCisgICAgLyogVGhpcyBzZWVtcyB0byBodXJ0Li4uICovCisgICAgaWYgKGZs b3cgPT0gRkxPX0tFRVApCisgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor CisgICAgaWYgKGZsb3cgPT0gRkxPX1JUU0MgfHwJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbC4u LiAqLworCWZsb3cgPT0gRkxPX0RUUkMgfHwKKwlmbG93ID09IEZMT19EVFJUKSB7CisJdHRoZmxv dyhmbG93LCAxLCAmdHRyYXcpOworI2lmbmRlZiBTVk9SUE9TSVgKKwl0dHJhdy5zZ19mbGFncyAm PSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKyNlbHNlCisJ dHRyYXcuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwor CisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19YT05YKSB7CS8qIFhvbi9Yb2ZmLi4uICovCisK KyNpZm5kZWYgU1ZPUlBPU0lYCisJdHRyYXcuc2dfZmxhZ3MgfD0gVEFOREVNOworI2Vsc2UKKwl0 dHJhdy5jX2lmbGFnIHw9IChJWE9OfElYT0ZGKTsKKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKwl0 dGhmbG93KEZMT19SVFNDLCAwLCAmdHRyYXcpOwkvKiBUdXJuIG9mZiBoYXJkd2FyZSBmbG93IGNv bnRyb2wgKi8KKworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBObyBmbG93 IGNvbnRyb2wgKi8KKworI2lmbmRlZiBTVk9SUE9TSVgKKwl0dHJhdy5zZ19mbGFncyAmPSB+VEFO REVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKyNlbHNlCisJdHRyYXcu Y19pZmxhZyAmPSB+KElYT058SVhPRkYpOworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworCXR0aGZs b3coRkxPX1JUU0MsIDAsICZ0dHJhdyk7CS8qIFR1cm4gb2ZmIGFueSBoYXJkd2FyZSBmL2MgdG9v ICovCisgICAgfQorCisvKiBTZXQgdGhlIG5ldyBtb2Rlcy4uLiAqLworCisjaWZuZGVmIFNWT1JQ T1NJWAkJCS8qIEJTRCBhbmQgZnJpZW5kcyAqLworI2lmZGVmIEJFTExWMTAKKyAgICBpZiAoaW9j dGwodHR5ZmQsVElPQ1NFVFAsJnR0cmF3KSA8IDApCisgICAgICByZXR1cm4oLTEpOworI2Vsc2UK KyNpZm5kZWYgTUlOSVgyCisgICAgaWYgKHN0dHkodHR5ZmQsJnR0cmF3KSA8IDApCisgICAgICBy ZXR1cm4oLTEpOworI2VuZGlmIC8qIE1JTklYMiAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNl bHNlCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KKyAgICBpZiAodGNzZXRhdHRy KHR0eWZkLFRDU0FEUkFJTiwmdHRyYXcpIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisjZWxzZQkJ CQkJLyogU3lzdGVtIFYgKi8KKyAgICBpZiAoaW9jdGwodHR5ZmQsVENTRVRBVywmdHRyYXcpIDwg MCkKKyAgICAgIHJldHVybigtMSk7CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZW5kaWYg LyogU1ZPUlBPU0lYICovCisgICAgcmV0dXJuKDApOworfQorI2lmZGVmIENPSEVSRU5UCisjdW5k ZWYgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworLyogIFQgVCBWIFQgLS0gQ29u ZGl0aW9uIGNvbW11bmljYXRpb24gZGV2aWNlIGZvciB1c2UgYXMgdmlydHVhbCB0ZXJtaW5hbC4g Ki8KKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3R0dnQobG9uZyBzcGVlZCwgaW50IGZsb3cpCisj ZWxzZQordHR2dChzcGVlZCxmbG93KSBsb25nIHNwZWVkOyBpbnQgZmxvdzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogdHR2dCAqLyB7CisgICAgaW50IHMsIHMyLCB4OworCisgICAgZGVidWco RjEwMSwidHR2dCB0dHlmZCIsIiIsdHR5ZmQpOworICAgIGRlYnVnKEYxMDEsInR0dnQgdHZ0Zmxn IiwiIix0dnRmbGcpOworICAgIGRlYnVnKEYxMTEsInR0dnQgc3BlZWQiLGNraXRvYSh0dHNwZWVk KSxzcGVlZCk7CisgICAgZGVidWcoRjExMSwidHR2dCBmbG93Iixja2l0b2EodHRmbG93KSxmbG93 KTsKKyAgICBkZWJ1ZyhGMTExLCJ0dHZ0IGN1cmNhcnIiLGNraXRvYSh0dGNhcnIpLGN1cmNhcnIp OworCisvKiBOb3RlOiBOZXRCU0QgYW5kIG1heWJlIG90aGVyIEJTRDQ0cyBoYXZlIGNmbWFrZXJh dygpICovCisvKiBNYXliZSBpdCB3b3VsZCBiZSBzaW1wbGVyIHRvIHVzZSBpdC4uLiAqLworCisg ICAgdHRwbXNrID0gMHhmZjsKKyNpZmRlZiBOT0xPQ0FMCisgICAgcmV0dXJuKGNvbmJpbigoY2hh cillc2NjaHIpKTsKKyNlbHNlCisgICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIE5vdCBvcGVuLiAq LworCWlmICh0dGNoaygpIDwgMCkKKwkgIHJldHVybigtMSk7CisJZWxzZQkJCQkvKiBCdXQgbWF5 YmUgc29tZXRoaW5nIGJ1ZmZlcmVkLiAqLworCSAgcmV0dXJuKDApOworICAgIH0KKyNpZmRlZiBO RVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisj aWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZ ICovCisjaWZkZWYgTkVUQ09OTgorICAgIGlmIChuZXRjb25uKSB7CisjaWZkZWYgVENQU09DS0VU CisjaWZkZWYgVENQX05PREVMQVkKKyAgICAgICAgeworCSAgICBleHRlcm4gaW50IHRjcF9ub2Rl bGF5OworCSAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsKKwkJaWYgKG5vZGVsYXlfc2F2ID4g LTEpIHsKKwkJICAgIG5vX2RlbGF5KHR0eWZkLG5vZGVsYXlfc2F2KTsKKwkJICAgIG5vZGVsYXlf c2F2ID0gLTE7CisJCX0KKwkgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogVENQX05PREVMQVkg Ki8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7CisgICAg ICAgICAgICBpbnQgcmMgPSAtMTsKKyAgICAgICAgICAgIGlmICh0dnRmbGcgIT0gMCAmJiBzcGVl ZCA9PSB0dHNwZWVkICYmIGZsb3cgPT0gdHRmbG93CisgICAgICAgICAgICAgICAgIC8qICYmIHR0 Y2FyciA9PSBjdXJjYXJyICovICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0dnQg bW9kZXMgYWxyZWFkeSBzZXQsIHNraXBwaW5nLi4uIiwiIiwwKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oMCk7CQkJLyogQWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmIChmbG93ICE9IHR0ZmxvdykgeworICAgICAgICAgICAgICAgIGlmICgocmMg PSB0bnNldGZsb3coZmxvdykpIDwgMCkKKwkJICByZXR1cm4ocmMpOworICAgICAgICAgICAgICAg IHR0ZmxvdyA9IGZsb3c7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BlZWQgIT0g dHRzcGVlZCkgeworICAgICAgICAgICAgICAgIGlmIChzcGVlZCA8PSAwKSAKKwkJICBzcGVlZCA9 IHRuY19nZXRfYmF1ZCgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyYyA9IHRuY19zZXRf YmF1ZChzcGVlZCkpIDwgMCkKKwkJICByZXR1cm4ocmMpOworICAgICAgICAgICAgICAgIHR0c3Bl ZWQgPSBzcGVlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRuY19zZXRfZGF0YXNpemUo OCk7CisJICAgIHRuY19zZXRfc3RvcHNpemUoc3RvcGJpdHMpOworCisjaWZkZWYgSFdQQVJJVFkK KyAgICAgICAgICAgIGlmIChod3Bhcml0eSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoaHdw YXJpdHkpIHsKKwkJICBjYXNlICdlJzoJCS8qIEV2ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOworICAgICAgICAg ICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisJCSAgY2FzZSAnbyc6CQkvKiBPZGQgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwidHRyZXMgOCBiaXRzICsgb2RkIHBhcml0eSIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAg IHRuY19zZXRfcGFyaXR5KDIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJICBjYXNl ICdtJzoJCS8qIE1hcmsgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMg OCBiaXRzICsgaW52YWxpZCBwYXJpdHk6IG1hcmsiLCIiLDApOworICAgICAgICAgICAgICAgICAg ICB0bmNfc2V0X3Bhcml0eSg0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2Fz ZSAncyc6CQkvKiBTcGFjZSAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJl cyA4IGJpdHMgKyBpbnZhbGlkIHBhcml0eTogc3BhY2UiLCIiLDApOworICAgICAgICAgICAgICAg ICAgICB0bmNfc2V0X3Bhcml0eSg1KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogSFdQQVJJVFkgKi8K KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgxKTsJLyogTm9u ZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHZ0ZmxnID0gMTsKKyAgICAgICAgICAg IHJldHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKwl0dnRmbGcgPSAxOwkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbnMuLi4g Ki8KKwlkZWJ1ZyhGMTAwLCJ0dHZ0IG5ldHdvcmsgY29ubmVjdGlvbiwgc2tpcHBpbmcuLi4iLCIi LDApOworCXJldHVybigwKTsJCQkvKiAuLi4gcmVxdWlyZSBubyBzcGVjaWFsIHNldHVwICovCisg ICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworICAgIGlmICh0dnRmbGcgIT0gMCAmJiBzcGVl ZCA9PSB0dHNwZWVkICYmIGZsb3cgPT0gdHRmbG93CisJLyogJiYgdHRjYXJyID09IGN1cmNhcnIg Ki8gKQorICAgICAgeworCSAgZGVidWcoRjEwMCwidHR2dCBtb2RlcyBhbHJlYWR5IHNldCwgc2tp cHBpbmcuLi4iLCIiLDApOworCSAgcmV0dXJuKDApOwkJCS8qIEFscmVhZHkgYmVlbiBjYWxsZWQu ICovCisgICAgICB9CisKKyAgICBpZiAodHRmZGZsZworI2lmbmRlZiBQbGFuOQorCSYmICFpc2F0 dHkodHR5ZmQpCisjZW5kaWYgLyogUGxhbjkgKi8KKwkpIHsKKwlkZWJ1ZyhGMTAwLCJ0dHZ0IHVz aW5nIGV4dGVybmFsIGZkLCBza2lwcGluZy4uLiIsIiIsMCk7CisJcmV0dXJuKDApOworICAgIH0K KworICAgIGRlYnVnKEYxMDAsInR0dnQgc2V0dGluZyBtb2Rlcy4uLiIsIiIsMCk7CisKKyAgICBp ZiAoeGxvY2FsKSB7CQkJLyogRm9yIGV4dGVybmFsIGxpbmVzLi4uICovCisJczIgPSAoaW50KSAo c3BlZWQgLyAxMEwpOworCXMgPSB0dHNzcGQoczIpOwkJCS8qIENoZWNrL3NldCB0aGUgc3BlZWQg Ki8KKwljYXJyY3RsKCZ0dHR2dCwgZmxvdyAhPSBGTE9fRElBTCAvKiBEbyBjYXJyaWVyIGNvbnRy b2wgKi8KKwkJJiYgKHR0Y2FyciA9PSBDQVJfT04gfHwgKHR0Y2FyciA9PSBDQVJfQVVUICYmIHR0 bWRtICE9IDApKSk7CisgICAgfSBlbHNlCisgICAgICBzID0gczIgPSAtMTsKKworI2lmZGVmIENP SEVSRU5UCisjZGVmaW5lIFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZm5k ZWYgU1ZPUlBPU0lYCisgICAgLyogQmVya2VsZXksIFY3LCBldGMgKi8KKyAgICBpZiAoZmxvdyA9 PSBGTE9fUlRTQyB8fAkJLyogSGFyZHdhcmUgZmxvdyBjb250cm9sICovCisJZmxvdyA9PSBGTE9f RFRSQyB8fAorCWZsb3cgPT0gRkxPX0RUUlQpIHsKKwl0dGhmbG93KGZsb3csIDEsICZ0dHR2dCk7 CisJZGVidWcoRjEwMCwidHR2dCBoYXJkIGZsb3csIFRBTkRFTSBvZmYiLCIiLDApOworCXR0dHZ0 LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29udHJvbCAq LworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkvKiBYb24vWG9mZiBmbG93IGNv bnRyb2wgKi8KKwlkZWJ1ZyhGMTAwLCJ0dHZ0IFRBTkRFTSBvbiIsIiIsMCk7CisJdHR0dnQuc2df ZmxhZ3MgfD0gVEFOREVNOwkvKiBBc2sgZm9yIGl0LiAqLworCXR0aGZsb3coZmxvdywgMCwgJnR0 dHZ0KTsJLyogVHVybiBvZmYgaGFyZHdhcmUgZi9jICovCisgICAgfSBlbHNlIGlmIChmbG93ID09 IEZMT19OT05FKSB7CisJZGVidWcoRjEwMCwidHR2dCBubyBmbG93LCBUQU5ERU0gb2ZmLCBSQVcg b24iLCIiLDApOworCXR0dHZ0LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3 YXJlIGZsb3cgY29udHJvbCAqLworCXR0aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBv ZmYgYW55IGhhcmR3YXJlIGYvYyB0b28gKi8KKwl0dHR2dC5zZ19mbGFncyB8PSBSQVc7CQkvKiBF bnRlciByYXcgbW9kZSAqLworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgewkvKiBL ZWVwIGRldmljZSdzIG9yaWdpbmFsIHNldHRpbmcgKi8KKwlkZWJ1ZyhGMTAwLCJ0dHZ0IGtlZXBp bmcgb3JpZ2luYWwgVEFOREVNIiwiIiwwKTsKKwl0dHR2dC5zZ19mbGFncyAmPSB+VEFOREVNOwor CXR0dHZ0LnNnX2ZsYWdzIHw9ICh0dG9sZC5zZ19mbGFncyAmIFRBTkRFTSk7CisJLyogTk9URTog V2Ugc2hvdWxkIGFsc28gaGFuZGxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBoZXJlISAqLworICAg IH0KKyAgICB0dHR2dC5zZ19mbGFncyB8PSBSQVc7ICAgICAgICAgICAgICAvKiBSYXcgbW9kZSBp biBhbGwgY2FzZXMgKi8KKyNpZmRlZiBUT1dFUjEKKyAgICB0dHR2dC5zZ19mbGFncyAmPSB+KEVD SE98QU5ZUCk7ICAgICAvKiBObyBlY2hvIG9yIHBhcml0eSAqLworI2Vsc2UKKyAgICB0dHR2dC5z Z19mbGFncyAmPSB+RUNITzsgICAgICAgICAgICAvKiBObyBlY2hvICovCisjZW5kaWYgLyogVE9X RVIxICovCisKKyNpZmRlZiBCRUxMVjEwCisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRQLCZ0 dHR2dCkgPCAwKSAvKiBTZXQgdGhlIG5ldyBtb2RlcyAqLworICAgICAgcmV0dXJuKC0xKTsKKyNl bHNlCisgICAgaWYgKHN0dHkodHR5ZmQsJnR0dHZ0KSA8IDApCQkvKiBTZXQgdGhlIG5ldyBtb2Rl cyAqLworICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisKKyNlbHNlIC8q IEl0IGlzIEFUVFNWIG9yIFBPU0lYICovCisKKyAgICBpZiAoZmxvdyA9PSBGTE9fWE9OWCkgewkJ LyogU29mdHdhcmUgZmxvdyBjb250cm9sICovCisJdHR0dnQuY19pZmxhZyB8PSAoSVhPTnxJWE9G Rik7CS8qIE9uIGlmIHJlcXVlc3RlZC4gKi8KKwl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8q IFR1cm4gb2ZmIGhhcmR3YXJlIGYvYyAqLworCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZs b3cgWE9OL1hPRkYiLCIiLDApOworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkv KiBOT05FICovCisJdHR0dnQuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiBUdXJuIG9mZiBY b24vWG9mZiAqLworCXR0aGZsb3coZmxvdywgMCwgJnR0dHZ0KTsJLyogVHVybiBvZmYgaGFyZHdh cmUgZi9jICovCisJZGVidWcoRjEwMCwidHR2dCBTVk9SUE9TSVggZmxvdyBOT05FIiwiIiwwKTsK KyAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX0tFRVApIHsKKwl0dHR2dC5jX2lmbGFnICY9IH4o SVhPTnxJWE9GRik7CS8qIFR1cm4gb2ZmIFhvbi9Yb2ZmIGZsYWdzICovCisJdHR0dnQuY19pZmxh ZyB8PSAodHRvbGQuY19pZmxhZyAmIChJWE9OfElYT0ZGKSk7IC8qIE9SIGluIG9sZCBvbmVzICov CisjaWZkZWYgUE9TSVhfQ1JUU0NUUworICAgICAgICB0dHR2dC5jX2NmbGFnICY9IH5DUlRTQ1RT OwkvKiBUdXJuIG9mZiBSVFMvQ1RTIGZsYWcgKi8KKyAgICAgICAgdHR0dnQuY19jZmxhZyB8PSAo dHRvbGQuY19jZmxhZyAmIENSVFNDVFMpOyAvKiBPUiBpbiBvbGQgb25lICovCisjZW5kaWYgLyog UE9TSVhfQ1JUU0NUUyAqLworCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgS0VFUCIs IiIsMCk7CisgICAgfSBlbHNlIGlmIChmbG93ID09IEZMT19SVFNDIHx8CS8qIEhhcmR3YXJlIGZs b3cgY29udHJvbCAqLworCSAgICAgICBmbG93ID09IEZMT19EVFJDIHx8CisJICAgICAgIGZsb3cg PT0gRkxPX0RUUlQpIHsKKwl0dHR2dC5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRik7CS8qICgxOTYp ICovCisJdHRoZmxvdyhmbG93LCAxLCAmdHR0dnQpOworCWRlYnVnKEYxMDAsInR0dnQgU1ZPUlBP U0lYIGZsb3cgSEFSRCIsIiIsMCk7CisgICAgfQorI2lmbmRlZiBPWE9TCisjaWZkZWYgQ09IRVJF TlQKKyAgICB0dHR2dC5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7CisjZWxzZQorICAg IHR0dHZ0LmNfbGZsYWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPfElFWFRFTik7CisjZW5kaWYgLyog Q09IRVJFTlQgKi8KKyNpZmRlZiBRTlgKKyAgICAvKiBOZWVkZWQgZm9yIGh3ZmMgKi8KKyAgICBp ZiAoZmxvdyA9PSBGTE9fUlRTQyB8fCBmbG93ID09IEZMT19EVFJDIHx8IGZsb3cgPT0gRkxPX0RU UlQpCisgICAgICB0dHR2dC5jX2xmbGFnIHw9IElFWFRFTjsKKyNlbmRpZiAvKiBRTlggKi8KKyNl bHNlIC8qIE9YT1MgKi8KKyAgICB0dHR2dC5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7 CisgICAgdHR0dnQuY19jY1tWRElTQ0FSRF0gPSB0dHR2dC5jX2NjW1ZMTkVYVF0gPSBDRElTQUJM RTsKKyNlbmRpZiAvKiBPWE9TICovCisKKyAgICB0dHR2dC5jX2lmbGFnIHw9IChJR05CUkt8SUdO UEFSKTsKKworLyogU3RvcCBiaXRzICovCisKKyNpZmRlZiBDU1RPUEIKKyAgICBpZiAoeGxvY2Fs KSB7CisJaWYgKHN0b3BiaXRzID09IDIpIHsKKwkgICAgdHR0dnQuY19jZmxhZyB8PSBDU1RPUEI7 CS8qIDIgc3RvcCBiaXRzICovCisJICAgIGRlYnVnKEYxMDAsInR0dnQgMiBzdG9wYml0cyIsIiIs MCk7CisJfSBlbHNlIGlmIChzdG9wYml0cyA9PSAxKSB7CisJICAgIHR0dHZ0LmNfY2ZsYWcgJj0g fihDU1RPUEIpOwkvKiAxIHN0b3AgYml0ICovCisJICAgIGRlYnVnKEYxMDAsInR0dnQgMSBzdG9w Yml0IiwiIiwwKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIENTVE9QQiAqLworCisvKiBQYXJpdHkg Ki8KKworI2lmZGVmIEhXUEFSSVRZCisgICAgaWYgKGh3cGFyaXR5ICYmIHhsb2NhbCkgewkJLyog SGFyZHdhcmUgcGFyaXR5ICovCisjaWZkZWYgQ09NTUVOVAorLyogVW5jb21tZW50IHRoaXMgb25s eSBpZiBuZWVkZWQgLS0gSSBkb24ndCB0aGluayBpdCBpcyAqLworCXR0cmF3LmNfY2ZsYWcgJj0g fihDU0laRSk7CS8qIENsZWFyIG91dCBjaGFyYWN0ZXItc2l6ZSBtYXNrICovCisJdHRyYXcuY19j ZmxhZyB8PSBDUzg7CQkvKiBBbmQgc2V0IGl0IHRvIDggKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisjaWZkZWYgSUdOUEFSCisJZGVidWcoRjEwMSwidHR2dCBod3Bhcml0eSBJR05QQVIiLCIiLElH TlBBUik7CisJdHR0dnQuY19pZmxhZyB8PSBJR05QQVI7CS8qIERvbid0IGRpc2NhcmQgaW5jb21p bmcgYnl0ZXMgKi8KKyNlbmRpZiAvKiBJR05QQVIgKi8KKwl0dHR2dC5jX2NmbGFnIHw9IFBBUkVO QjsJLyogRW5hYmxlIHBhcml0eSAqLworCisJc3dpdGNoIChod3Bhcml0eSkgeworCSAgY2FzZSAn ZSc6CQkJLyogRXZlbiAqLworCSAgICB0dHR2dC5jX2NmbGFnICY9IH4oUEFST0REKTsKKwkgICAg ZGVidWcoRjEwMCwidHR2dCA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7CisJICAgIGJyZWFr OworCSAgY2FzZSAnbyc6CQkJLyogT2RkICovCisJICAgIHR0dHZ0LmNfY2ZsYWcgfD0gUEFST0RE OworCSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IDggYml0cyArIG9kZCBwYXJpdHkiLCIiLDApOworCSAg ICBicmVhazsKKwkgIGNhc2UgJ20nOgkJCS8qIE1hcmsgKi8KKwkgIGNhc2UgJ3MnOgkJCS8qIFNw YWNlICovCisJICAgIC8qIFBBUkVYVCBpcyBtZW50aW9uZWQgaW4gU1ZJRCBidXQgdGhlIGRldGFp bHMgYXJlIG5vdCBnaXZlbi4gKi8KKwkgICAgLyogUEFSRVhUIGlzIG5vdCBpbmNsdWRlZCBpbiBQ T1NJWCBJU08vSUVDIDk5NDUtMS4gKi8KKwkgICAgZGVidWcoRjEwMCwidHR2dCA4IGJpdHMgKyBp bnZhbGlkIHBhcml0eSIsIiIsMCk7CisJICAgIGJyZWFrOworCX0KKyAgICB9IGVsc2UgewkJCQkv KiBXZSBoYW5kbGUgcGFyaXR5IG91cnNlbHZlcyAqLworI2VuZGlmIC8qIEhXUEFSSVRZICovCisJ dHR0dnQuY19jZmxhZyAmPSB+KFBBUkVOQik7CS8qIERvbid0IGVuYWJsZSBwYXJpdHkgKi8KKyNp ZmRlZiBIV1BBUklUWQorICAgIH0KKyNlbmRpZiAvKiBIV1BBUklUWSAqLworCisjaWZkZWYgQVRU U1YKKyNpZmRlZiBCU0Q0NAorICAgIC8qIFRoaW5ncyBub3QgdG8gZG8uLi4gKi8KKyAgICB0dHR2 dC5jX2lmbGFnICY9IH4oSU5MQ1J8SUdOQ1J8SUNSTkx8SU5QQ0t8SVNUUklQfElYQU5ZKTsKKyNl bHNlCisgICAgdHR0dnQuY19pZmxhZyAmPSB+KElOTENSfElHTkNSfElDUk5MfElVQ0xDfElOUENL fElTVFJJUHxJWEFOWSk7CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbHNlIC8qIFBPU0lYICovCisg ICAgdHR0dnQuY19pZmxhZyAmPSB+KElOTENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUCk7Cisj ZW5kaWYgLyogQVRUU1YgKi8KKyAgICB0dHR2dC5jX2NmbGFnICY9IH4oQ1NJWkUpOwkJLyogWmVy byBvdXQgdGhlIGNoYXIgc2l6ZSBmaWVsZCAqLworICAgIHR0dHZ0LmNfY2ZsYWcgfD0gKENTOHxD UkVBRHxIVVBDTCk7CS8qIENoYXIgc2l6ZSA4LCBlbmFibGUgcmVjZWl2ZXIsIGh1cCAqLworICAg IHR0dHZ0LmNfb2ZsYWcgJj0gfk9QT1NUOwkJLyogRG9uJ3QgcG9zdHByb2Nlc3Mgb3V0cHV0ICov CisjaWZuZGVmIFZFT0YgLyogREdVWCB0ZXJtaW8gaGFzIFZFT0YgYXQgZW50cnkgNCwgc2VlIGNv bW1lbnQgYWJvdmUgKi8KKyAgICB0dHR2dC5jX2NjWzRdID0gMTsKKyNlbHNlCisjaWZuZGVmIE9Y T1MKKyNpZmRlZiBWTUlOCisgICAgdHR0dnQuY19jY1tWTUlOXSA9IDE7CisjZW5kaWYgLyogVk1J TiAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIHR0dHZ0LmNfbWluID0gMTsKKyNlbmRpZiAvKiBP WE9TICovCisjZW5kaWYgLyogVkVPRiAqLworI2lmbmRlZiBWRU9MCS8qIERHVVggdGVybWlvIGhh cyBWRU9MIGF0IGVudHJ5IDUsIHNlZSBjb21tZW50IGFib3ZlICovCisgICAgdHR0dnQuY19jY1s1 XSA9IDA7CisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVlRJTUUKKyAgICB0dHR2dC5jX2Nj W1ZUSU1FXSA9IDA7CisjZW5kaWYgLyogVlRJTUUgKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICB0 dHR2dC5jX3RpbWUgPSAwOworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9MICovCisK KyNpZmRlZiBQbGFuOQorICAgIGlmIChwOXR0eXBhcml0eSgnbicpIDwgMCkKKyAgICAgIHJldHVy biAtMTsKKyNlbHNlCisjaWZkZWYgQlNENDRPUlBPU0lYCisgICAgZXJybm8gPSAwOworI2lmZGVm IEJFT1NPUkJFQk9YCisgICAgdHR0dnQuY19jY1tWTUlOXSA9IDA7CQkvKiBEUjcgY2FuIG9ubHkg cG9sbC4gKi8KKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworCisgICAgeCA9IHRjc2V0YXR0cih0 dHlmZCxUQ1NBRFJBSU4sJnR0dHZ0KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHZ0IEJTRDQ0T1JQT1NJ WCB0Y3NldGF0dHIiLCIiLHgpOworICAgIGlmICh4IDwgMCkgeworCWRlYnVnKEYxMDEsInR0dnQg QlNENDRPUlBPU0lYIHRjc2V0YXR0ciBlcnJubyIsIiIsZXJybm8pOworCXJldHVybigtMSk7Cisg ICAgfQorI2Vsc2UgLyogQVRUU1YgKi8KKyAgICB4ID0gaW9jdGwodHR5ZmQsVENTRVRBVywmdHR0 dnQpOworICAgIGRlYnVnKEYxMDEsInR0dnQgQVRUU1YgaW9jdGwgVENTRVRBVyIsIiIseCk7Cisg ICAgaWYgKHggPCAwKSB7CQkJLyogc2V0IG5ldyBtb2RlcyAuICovCisJZGVidWcoRjEwMSwidHR2 dCBBVFRTViBpb2N0bCBUQ1NFVEFXIGVycm5vIiwiIixlcnJubyk7CisJcmV0dXJuKC0xKTsJCisg ICAgfQorI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIFBsYW45ICovCisjZW5k aWYgLyogQVRUU1YgKi8KKworICAgIHR0c3BlZWQgPSBzcGVlZDsJCQkvKiBEb25lLCByZW1lbWJl ciBob3cgd2Ugd2VyZSAqLworICAgIHR0ZmxvdyA9IGZsb3c7CQkJLyogY2FsbGVkLCBzbyB3ZSBj YW4gZGVjaWRlIGhvdyB0byAqLworICAgIHR2dGZsZyA9IDE7CQkJCS8qIHJlc3BvbmQgbmV4dCB0 aW1lLiAqLworICAgIGRlYnVnKEYxMDAsInR0dnQgb2siLCIiLDApOworICAgIHJldHVybigwKTsK KworI2lmZGVmIENPSEVSRU5UCisjdW5kZWYgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQg Ki8KKworI2VuZGlmIC8qIE5PTE9DQUwgKi8KK30KKworI2lmbmRlZiBOT0xPQ0FMCisKKy8qIFNl cmlhbCBzcGVlZCBkZXBhcnRtZW50IC4gLiAuICovCisKKy8qCisgIFNDTyBPU1I1LjAueCBtaWdo dCBvciBtaWdodCBub3Qgc3VwcG9ydCBoaWdoIHNwZWVkcy4gIFNvbWV0aW1lcyB0aGV5IGFyZSBu b3QKKyAgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGVzIGJ1dCB0aGV5IGFyZSBzdXBwb3J0ZWQg KGUuZy4gd2hlbiBidWlsZGluZyB3aXRoCisgIFVESyBjb21waWxlciByYXRoZXIgdGhhbiAvYmlu L2NjKSwgc29tZXRpbWVzIHZpY2UgdmVyc2EuICBFdmVuIHRob3VnaCA1LjAuNAorICB3YXMgdGhl IGZpcnN0IHJlbGVhc2UgdGhhdCBjYW1lIHdpdGggaGlnaCBzZXJpYWwgc3BlZWRzIHN0YW5kYXJk LCByZWxlYXNlcworICBiYWNrIHRvIDUuMC4wIGNvdWxkIHVzZSB0aGVtIGlmIGNlcnRhaW4gcGF0 Y2hlcyAob3IgInN1cHBsZW1lbnRzIikgd2VyZQorICBhcHBsaWVkIHRvIHRoZSBTSU8gZHJpdmVy LiAgUGx1cyBhIGxvdCBvZiBTQ08gaW5zdGFsbGF0aW9ucyBydW4gdGhpcmQtcGFydHkKKyAgZHJp dmVycy4KKyovCisjaWZkZWYgQ0tfU0NPVjUKKyNpZm5kZWYgQjM4NDAwCisjZGVmaW5lCUIzODQw MAkwMDAwMDE3CisjZW5kaWYgLyogQjM4NDAwICovCisjaWZuZGVmIEI1NzYwMAorI2RlZmluZQlC NTc2MDAJMDAwMDAyMQorI2VuZGlmIC8qIEI1NzYwMCAqLworI2lmbmRlZiBCNzY4MDAKKyNkZWZp bmUJQjc2ODAwCTAwMDAwMjIKKyNlbmRpZiAvKiBCNzY4MDAgKi8KKyNpZm5kZWYgQjExNTIwMAor I2RlZmluZQlCMTE1MjAwCTAwMDAwMjMKKyNlbmRpZiAvKiBCMTE1MjAwICovCisjaWZuZGVmIEIy MzA0MDAKKyNkZWZpbmUJQjIzMDQwMAkwMDAwMDI0CisjZW5kaWYgLyogQjIzMDQwMCAqLworI2lm bmRlZiBCNDYwODAwCisjZGVmaW5lCUI0NjA4MDAJMDAwMDAyNQorI2VuZGlmIC8qIEI0NjA4MDAg Ki8KKyNpZm5kZWYgQjkyMTYwMAorI2RlZmluZQlCOTIxNjAwCTAwMDAwMjYKKyNlbmRpZiAvKiBC OTIxNjAwICovCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKy8qCisgIFBsYW4gOSdzIG5hdGl2ZSBz cGVlZCBzZXR0aW5nIGludGVyZmFjZSBsZXRzIHlvdSBzZXQgYW55dGhpbmcgeW91IGxpa2UsCisg IGJ1dCB3aWxsIGZhaWwgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3QgbGlrZSBpdCwgc28gd2UgYWxs b3cgYWxsIHRoZSBjb21tb24KKyAgc3BlZWRzLgorKi8KKyNpZmRlZiBQbGFuOQorI2lmbmRlZiBC NTAKKyNkZWZpbmUgQjUwIDUwCisjZW5kaWYgLyogQjUwICovCisjaWZuZGVmIEI3NQorI2RlZmlu ZSBCNzUgNzUKKyNlbmRpZiAvKiBCNzUgKi8KKyNpZm5kZWYgQjExMAorI2RlZmluZSBCMTEwIDEx MAorI2VuZGlmIC8qIEIxMTAgKi8KKyNpZm5kZWYgQjEzNAorI2RlZmluZSBCMTM0IDEzNAorI2Vu ZGlmIC8qIEIxMzQgKi8KKyNpZm5kZWYgQjIwMAorI2RlZmluZSBCMjAwIDIwMAorI2VuZGlmIC8q IEIyMDAgKi8KKyNpZm5kZWYgQjMwMAorI2RlZmluZSBCMzAwIDMwMAorI2VuZGlmIC8qIEIzMDAg Ki8KKyNpZm5kZWYgQjEyMDAKKyNkZWZpbmUgQjEyMDAgMTIwMAorI2VuZGlmIC8qIEIxMjAwICov CisjaWZuZGVmIEIxODAwCisjZGVmaW5lIEIxODAwIDE4MDAKKyNlbmRpZiAvKiBCMTgwMCAqLwor I2lmbmRlZiBCMjQwMAorI2RlZmluZSBCMjQwMCAyNDAwCisjZW5kaWYgLyogQjI0MDAgKi8KKyNp Zm5kZWYgQjQ4MDAKKyNkZWZpbmUgQjQ4MDAgNDgwMAorI2VuZGlmIC8qIEI0ODAwICovCisjaWZu ZGVmIEI5NjAwCisjZGVmaW5lIEI5NjAwIDk2MDAKKyNlbmRpZiAvKiBCOTYwMCAqLworI2lmbmRl ZiBCMTQ0MDAKKyNkZWZpbmUgQjE0NDAwIDE0NDAwCisjZW5kaWYgLyogQjE0NDAwICovCisjaWZu ZGVmIEIxOTIwMAorI2RlZmluZSBCMTkyMDAgMTkyMDAKKyNlbmRpZiAvKiBCMTkyMDAgKi8KKyNp Zm5kZWYgQjI4ODAwCisjZGVmaW5lIEIyODgwMCAyODgwMAorI2VuZGlmIC8qIEIyODgwMCAqLwor I2lmbmRlZiBCMzg0MDAKKyNkZWZpbmUgQjM4NDAwIDM4NDAwCisjZW5kaWYgLyogQjM4NDAwICov CisjaWZuZGVmIEI1NzYwMAorI2RlZmluZSBCNTc2MDAgNTc2MDAKKyNlbmRpZiAvKiBCNTc2MDAg Ki8KKyNpZm5kZWYgQjc2ODAwCisjZGVmaW5lIEI3NjgwMCA3NjgwMAorI2VuZGlmIC8qIEI3Njgw MCAqLworI2lmbmRlZiBCMTE1MjAwCisjZGVmaW5lIEIxMTUyMDAgMTE1MjAwCisjZW5kaWYgLyog QjExNTIwMCAqLworI2lmbmRlZiBCMjMwNDAwCisjZGVmaW5lIEIyMzA0MDAgMjMwNDAwCisjZW5k aWYgLyogQjIzMDQwMCAqLworI2lmbmRlZiBCNDYwODAwCisjZGVmaW5lIEI0NjA4MDAgNDYwODAw CisjZW5kaWYgLyogQjQ2MDgwMCAqLworI2lmbmRlZiBCOTIxNjAwCisjZGVmaW5lIEI5MjE2MDAg OTIxNjAwCisjZW5kaWYgLyogQjkyMTYwMCAqLworI2VuZGlmIC8qIFBsYW45ICovCisKKy8qICBU IFQgUyBTIFAgRCAgLS0gIENoZWNrcyBhbmQgc2V0cyB0cmFuc21pc3Npb24gcmF0ZS4gICovCisK Ky8qICBDYWxsIHdpdGggc3BlZWQgaW4gY2hhcmFjdGVycyAobm90IGJpdHMhKSBwZXIgc2Vjb25k LiAqLworLyogIFJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBpZiBpdCBkaWQgbm90aGluZywgMSBp ZiBpdCBjaGFuZ2VkIHRoZSBzcGVlZC4gKi8KKworI2lmZGVmIFVTRVRDU0VUU1BFRUQKKy8qCisg IFRoZSB0Y3NldHNwZWVkKCkgLyB0Y2dldHNwZWVkKCkgaW50ZXJmYWNlIGxldHMgeW91IHBhc3Mg YW55IG51bWJlciBhdCBhbGwKKyAgdG8gYmUgdXNlZCBhcyBhIHNwZWVkIHRvIGJlIHNldCwgcmF0 aGVyIHRoYW4gZm9yY2luZyBhIGNob2ljZSBmcm9tIGEKKyAgcHJlZGVmaW5lZCBsaXN0LiAgSXQg c2VlbXMgdG8gYmUgcGVjdWxpYXIgdG8gVW5peFdhcmUgNy4KKworICBUaGVzZSBhcmUgdGhlIGZ1 bmN0aW9uIGNvZGVzIHRvIGJlIHBhc3NlZCB0byB0Y1tnc11ldHNwZWVkKCksCisgIGJ1dCBmb3Ig c29tZSByZWFzb24gdGhleSBkb24ndCBzZWVtIHRvIGJlIHBpY2tlZCB1cCBmcm9tIHRlcm1pb3Mu aC4KKyovCisjaWZuZGVmIFRDU19BTEwKKyNkZWZpbmUgVENTX0FMTCAwCisjZW5kaWYgLyogVENT X0FMTCAqLworI2lmbmRlZiBUQ1NfSU4KKyNkZWZpbmUgVENTX0lOIDEKKyNlbmRpZiAvKiBUQ1Nf SU4gKi8KKyNpZm5kZWYgVENTX09VVAorI2RlZmluZSBUQ1NfT1VUIDIKKyNlbmRpZiAvKiBUQ1Nf T1VUICovCisjZW5kaWYgLyogVVNFVENTRVRTUEVFRCAqLworCitpbnQKK3R0c3NwZChjcHMpIGlu dCBjcHM7IHsKKyAgICBpbnQgeDsKKyNpZmRlZiBQT1NJWAorLyogV2F0Y2ggb3V0LCBzcGVlZF90 IHNob3VsZCBiZSB1bnNpZ25lZCwgc28gZG9uJ3QgY29tcGFyZSB3aXRoIC0xLCBldGMuLi4gKi8K KyAgICBzcGVlZF90CisjZWxzZQorICAgIGludAorI2VuZGlmIC8qIFBPU0lYICovCisgICAgICBz LCBzMjsKKyAgICBpbnQgb2sgPSAxOwkJCQkvKiBTcGVlZCBjaGVjayByZXN1bHQsIGFzc3VtZSBv ayAqLworCisjaWZkZWYgT0xJTlVYSElTUEVFRAorICAgIHVuc2lnbmVkIGludCBzcGRfZmxhZ3Mg PSAwOworICAgIHN0cnVjdCBzZXJpYWxfc3RydWN0IHNlcmluZm87CisjZW5kaWYgLyogT0xJTlVY SElTUEVFRCAqLworCisgICAgZGVidWcoRjEwMSwidHRzc3BkIGNwcyIsIiIsY3BzKTsKKyAgICBk ZWJ1ZyhGMTAxLCJ0dHNzcGQgdHR5ZmQiLCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNz cGQgeGxvY2FsIiwiIix4bG9jYWwpOworCisgICAgaWYgKHR0eWZkIDwgMCB8fCB4bG9jYWwgPT0g MCkJLyogRG9uJ3Qgc2V0IHNwZWVkIG9uIGNvbnNvbGUgKi8KKyAgICAgIHJldHVybigwKTsKKwor I2lmZGVmCU5FVENPTk4KKyAgICBpZiAobmV0Y29ubikgeworI2lmZGVmIFROX0NPTVBPUlQKKyAg ICAgICAgaWYgKGlzdG5jb21wb3J0KCkpCisJICByZXR1cm4odG5jX3NldF9iYXVkKGNwcyAqIDEw KSk7CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisJcmV0dXJuKDApOwor ICB9CisjZW5kaWYJLyogTkVUQ09OTiAqLworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUp IHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAo dHRwdHkpIHJldHVybigwKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKworICAgIGlmIChjcHMgPCAw KSByZXR1cm4oLTEpOworICAgIHMgPSBzMiA9IDA7CQkJCS8qIE5COiBzIGFuZCBzMiBtaWdodCBi ZSB1bnNpZ25lZCAqLworCisjaWZkZWYgVVNFVENTRVRTUEVFRAorCisgICAgcyA9IGNwcyAqIDEw TDsKKworICAgIHggPSB0Y2dldGF0dHIodHR5ZmQsJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3Bl ZWQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgdGNnZXRhdHRyIiwiIix4KTsKKyAgICBpZiAo eCA8IDApCisgICAgICByZXR1cm4oLTEpOworICAgIGRlYnVnKEYxMDEsInR0c3NwZCBUQ1NFVFNQ RUVEIHNwZWVkIiwiIixzKTsKKworICAgIGVycm5vID0gMDsKKyAgICBpZiAocyA9PSA4ODgwTCkg ewkJCS8qIDc1LzEyMDAgc3BsaXQgc3BlZWQgcmVxdWVzdGVkICovCisJdGNzZXRzcGVlZChUQ1Nf SU4sICZ0dGN1ciwgMTIwMEwpOworCXRjc2V0c3BlZWQoVENTX09VVCwgJnR0Y3VyLCA3NUwpOwor ICAgIH0gZWxzZQorICAgICAgdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHRjdXIsIHMpOwkvKiBQdXQg bmV3IHNwZWVkIGluIHN0cnVjdHMgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChlcnJubyAmIGRl YmxvZykgeworCWRlYnVnKEYxMDEsInR0c3NwZCBUQ1NFVFNQRUVEIGVycm5vIiwiIixlcnJubyk7 CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgdGNzZXRz cGVlZChUQ1NfQUxMLCAmdHRyYXcsIHMpOworICAgIHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0dHZ0 LCBzKTsKKyAgICB0Y3NldHNwZWVkKFRDU19BTEwsICZ0dG9sZCwgcyk7CisjZWxzZQorICAgIGlm IChzID09IDg4ODBMKSB7CQkJLyogNzUvMTIwMCBzcGxpdCBzcGVlZCByZXF1ZXN0ZWQgKi8KKwl0 Y3NldHNwZWVkKFRDU19JTiwgJnR0cmF3LCAxMjAwTCk7CisJdGNzZXRzcGVlZChUQ1NfT1VULCAm dHRyYXcsIDc1TCk7CisJdGNzZXRzcGVlZChUQ1NfSU4sICZ0dHR2dCwgMTIwMEwpOworCXRjc2V0 c3BlZWQoVENTX09VVCwgJnR0dHZ0LCA3NUwpOworCXRjc2V0c3BlZWQoVENTX0lOLCAmdHRvbGQs IDEyMDBMKTsKKwl0Y3NldHNwZWVkKFRDU19PVVQsICZ0dG9sZCwgNzVMKTsKKyAgICB9IGVsc2Ug eworCXRjc2V0c3BlZWQoVENTX0FMTCwgJnR0cmF3LCBzKTsKKwl0Y3NldHNwZWVkKFRDU19BTEws ICZ0dHR2dCwgcyk7CisJdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHRvbGQsIHMpOworICAgIH0KKyNl bmRpZiAvKiBDT01NRU5UICovCisKKyAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FEUkFJTiwm dHRjdXIpOyAvKiBTZXQgdGhlIHNwZWVkICovCisgICAgZGVidWcoRjEwMSwidHRzc3BkIHRjc2V0 YXR0ciIsIiIseCk7CisgICAgaWYgKHggPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKworI2Vsc2Ug IC8qIE5vdCBVU0VUQ1NFVFNQRUVEICovCisKKyAgICAvKiBGaXJzdCBjaGVjayB0aGF0IHRoZSBn aXZlbiBzcGVlZCBpcyB2YWxpZC4gKi8KKworICAgIHN3aXRjaCAoY3BzKSB7CisjaWZuZGVmIE1J TklYCisgICAgICBjYXNlIDA6ICAgcyA9IEIwOyAgICBicmVhazsKKyAgICAgIGNhc2UgNTogICBz ID0gQjUwOyAgIGJyZWFrOworICAgICAgY2FzZSA3OiAgIHMgPSBCNzU7ICAgYnJlYWs7CisjZW5k aWYgLyogTUlOSVggKi8KKyAgICAgIGNhc2UgMTE6ICBzID0gQjExMDsgIGJyZWFrOworI2lmbmRl ZiBNSU5JWAorICAgICAgY2FzZSAxMzogIHMgPSBCMTM0OyAgYnJlYWs7CisgICAgICBjYXNlIDE1 OiAgcyA9IEIxNTA7ICBicmVhazsKKyAgICAgIGNhc2UgMjA6ICBzID0gQjIwMDsgIGJyZWFrOwor I2VuZGlmIC8qIE1JTklYICovCisgICAgICBjYXNlIDMwOiAgcyA9IEIzMDA7ICBicmVhazsKKyNp Zm5kZWYgTUlOSVgKKyAgICAgIGNhc2UgNjA6ICBzID0gQjYwMDsgIGJyZWFrOworI2VuZGlmIC8q IE1JTklYICovCisgICAgICBjYXNlIDEyMDogcyA9IEIxMjAwOyBicmVhazsKKyNpZm5kZWYgTUlO SVgKKyAgICAgIGNhc2UgMTgwOiBzID0gQjE4MDA7IGJyZWFrOworI2VuZGlmIC8qIE1JTklYICov CisgICAgICBjYXNlIDI0MDogcyA9IEIyNDAwOyBicmVhazsKKyAgICAgIGNhc2UgNDgwOiBzID0g QjQ4MDA7IGJyZWFrOworI2lmbmRlZiBNSU5JWAorICAgICAgY2FzZSA4ODg6IHMgPSBCNzU7IHMy ID0gQjEyMDA7IGJyZWFrOyAvKiA4ODggPSA3NS8xMjAwIHNwbGl0IHNwZWVkICovCisjZW5kaWYg LyogTUlOSVggKi8KKyNpZmRlZiBCNzIwMAorICAgICAgY2FzZSA3MjA6IHMgPSBCNzIwMDsgYnJl YWs7CisjZW5kaWYgLyogQjcyMDAgKi8KKyAgICAgIGNhc2UgOTYwOiBzID0gQjk2MDA7IGJyZWFr OworI2lmZGVmIEIxNDQwMAorICAgICAgY2FzZSAxNDQwOiBzID0gQjE0NDAwOyBicmVhazsKKyNl bmRpZiAvKiBCMTQ0MDAgKi8KKyNpZmRlZiBCMTkyMDAKKyAgICAgIGNhc2UgMTkyMDogcyA9IEIx OTIwMDsgYnJlYWs7CisjZWxzZQorI2lmZGVmIEVYVEEKKyAgICAgIGNhc2UgMTkyMDogcyA9IEVY VEE7IGJyZWFrOworI2VuZGlmIC8qIEVYVEEgKi8KKyNlbmRpZiAvKiBCMTkyMDAgKi8KKyNpZmRl ZiBCMjg4MDAKKyAgICAgIGNhc2UgMjg4MDogcyA9IEIyODgwMDsgYnJlYWs7CisjZW5kaWYgLyog QjI4ODAwICovCisjaWZkZWYgQjM4NDAwCisgICAgICBjYXNlIDM4NDA6IHMgPSBCMzg0MDA7Cisj aWZkZWYgT0xJTlVYSElTUEVFRAorICAgICAgICBzcGRfZmxhZ3MgPSB+QVNZTkNfU1BEX01BU0s7 CS8qIE5vbnplcm8sIGJ1dCB6ZXJvIGZsYWdzICovCisjZW5kaWYgLyogT0xJTlVYSElTUEVFRCAq LworCWJyZWFrOworI2Vsc2UgLyogQjM4NDAwIG5vdCBkZWZpbmVkLi4uICovCisjaWZkZWYgRVhU QgorICAgICAgY2FzZSAzODQwOiBzID0gRVhUQjsgYnJlYWs7CisjZW5kaWYgLyogRVhUQiAqLwor I2VuZGlmIC8qIEIzODQwMCAqLworCisjaWZkZWYgSFBVWAorI2lmZGVmIF9CNTc2MDAKKyAgICAg IGNhc2UgNTc2MDogcyA9IF9CNTc2MDA7IGJyZWFrOworI2VuZGlmIC8qIF9CNTc2MDAgKi8KKyNp ZmRlZiBfQjExNTIwMAorICAgICAgY2FzZSAxMTUyMDogcyA9IF9CMTE1MjAwOyBicmVhazsKKyNl bmRpZiAvKiBfQjExNTIwMCAqLworI2Vsc2UKKyNpZmRlZiBPTElOVVhISVNQRUVECisvKgorICBU aGlzIGJpdCBmcm9tIDxjYXJsb0BzZy50bi50dWRlbGZ0Lm5sPjoKKyAgIk9ubHkgbm90ZSB0byBt YWtlIGlzIG1heWJlIHRoaXM6IFdoZW4gdGhlIEFTWU5DX1NQRF9DVVNUIGZsYWdzIGFyZSBzZXQg dGhlbgorICBzZXR0aW5nIHRoZSBzcGVlZCB0byAzODQwMCB3aWxsIHNldCB0aGUgY3VzdG9tIHNw ZWVkIChhbmQgdHRnc3BkIHJldHVybnMKKyAgMzg0MDApLCBidXQgc3BlZWRzIDU3NjAwIGFuZCAx MTUyMDAgd29uJ3Qgd29yayBhbnkgbW9yZSBiZWNhdXNlIEkgZGlkbid0CisgIHdhbnQgdG8gbWVz cyB1cCB0aGUgc3BlZWQgZmxhZ3Mgd2hlbiBzb21lb25lIGlzIGRvaW5nIHNvcGhpc3RpY2F0ZWQg c3R1ZmYKKyAgbGlrZSBjdXN0b20gc3BlZWRzLi4uIgorKi8KKyAgICAgIGNhc2UgNTc2MDogcyA9 IEIzODQwMDsgc3BkX2ZsYWdzID0gQVNZTkNfU1BEX0hJOyBicmVhazsKKyAgICAgIGNhc2UgMTE1 MjA6IHMgPSBCMzg0MDA7IHNwZF9mbGFncyA9IEFTWU5DX1NQRF9WSEk7IGJyZWFrOworI2Vsc2UK KyNpZmRlZiBCNTc2MDAKKyAgICAgIGNhc2UgNTc2MDogcyA9IEI1NzYwMDsgYnJlYWs7CisjZW5k aWYgLyogQjU3NjAwICovCisjaWZkZWYgQjc2ODAwCisgICAgICBjYXNlIDc2ODA6IHMgPSBCNzY4 MDA7IGJyZWFrOworI2VuZGlmIC8qIEI3NjgwMCAqLworI2lmZGVmIEIxMTUyMDAKKyAgICAgIGNh c2UgMTE1MjA6IHMgPSBCMTE1MjAwOyBicmVhazsKKyNlbmRpZiAvKiBCMTE1MjAwICovCisjZW5k aWYgLyogT0xJTlVYSElTUEVFRCAqLworI2lmZGVmIEIxNTM2MDAKKyAgICAgIGNhc2UgMTUzNjA6 IHMgPSBCMTUzNjAwOyBicmVhazsKKyNlbmRpZiAvKiBCMTUzNjAwICovCisjaWZkZWYgQjIzMDQw MAorICAgICAgY2FzZSAyMzA0MDogcyA9IEIyMzA0MDA7IGJyZWFrOworI2VuZGlmIC8qIEIyMzA0 MDAgKi8KKyNpZmRlZiBCMzA3MjAwCisgICAgICBjYXNlIDMwNzIwOiBzID0gQjMwNzIwMDsgYnJl YWs7CisjZW5kaWYgLyogQjMwNzIwMCAqLworI2lmZGVmIEI0NjA4MDAKKyAgICAgIGNhc2UgNDYw ODA6IHMgPSBCNDYwODAwOyBicmVhazsKKyNlbmRpZiAvKiA0NjA4MDAgKi8KKyNpZmRlZiBCOTIx NjAwCisgICAgICBjYXNlIDkyMTYwOiBzID0gQjkyMTYwMDsgYnJlYWs7CisjZW5kaWYgLyogQjky MTYwMCAqLworI2VuZGlmIC8qIEhQVVggKi8KKyAgICAgIGRlZmF1bHQ6CisJb2sgPSAwOwkJCQkv KiBHb29kIHNwZWVkIG5vdCBmb3VuZCwgc28gbm90IG9rICovCisJYnJlYWs7CisgICAgfQorICAg IGRlYnVnKEYxMDEsInR0c3NwZCBvayIsIiIsb2spOworICAgIGRlYnVnKEYxMDEsInR0c3NwZCBz IiwiIixzKTsKKworICAgIGlmICghb2spIHsKKwlkZWJ1ZyhGMTAwLCJ0dHNzcGQgZmFpbHMiLCIi LDApOworCXJldHVybigtMSk7CisgICAgfSBlbHNlIHsKKwlpZiAoIXMyKSBzMiA9IHM7CQkvKiBT ZXQgaW5wdXQgc3BlZWQgKi8KKyNpZmRlZiBQbGFuOQorCWlmIChwOXR0c3NwZChjcHMpIDwgMCkK KwkgIHJldHVybigtMSk7CisjZWxzZQorI2lmZGVmIEJTRDQ0T1JQT1NJWAorCXggPSB0Y2dldGF0 dHIodHR5ZmQsJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKwlkZWJ1ZyhGMTAxLCJ0 dHNzcGQgdGNnZXRhdHRyIiwiIix4KTsKKwlpZiAoeCA8IDApCisJICByZXR1cm4oLTEpOworI2lm ZGVmIE9MSU5VWEhJU1BFRUQKKwlkZWJ1ZyhGMTAxLCJ0dHNzcGQgc3BkX2ZsYWdzIiwiIixzcGRf ZmxhZ3MpOworCWlmIChzcGRfZmxhZ3MgJiYgc3BkX2ZsYWdzICE9IEFTWU5DX1NQRF9DVVNUKSB7 CisJICAgIGlmIChpb2N0bCh0dHlmZCwgVElPQ0dTRVJJQUwsICZzZXJpbmZvKSA8IDApIHsKKwkJ ZGVidWcoRjEwMCwidHRzc3BkOiBUSU9DR1NFUklBTCBmYWlsZWQiLCIiLDApOworCQlyZXR1cm4o LTEpOworCSAgICB9IGVsc2UgZGVidWcoRjEwMCwidHRzc3BkOiBUSU9DR1NFUklBTCBvayIsIiIs MCk7CisJICAgIHNlcmluZm8uZmxhZ3MgJj0gfkFTWU5DX1NQRF9NQVNLOworCSAgICBzZXJpbmZv LmZsYWdzIHw9IChzcGRfZmxhZ3MgJiBBU1lOQ19TUERfTUFTSyk7CisJICAgIGlmIChpb2N0bCh0 dHlmZCwgVElPQ1NTRVJJQUwsICZzZXJpbmZvKSA8IDApCisJICAgICAgcmV0dXJuKC0xKTsKKwl9 CisjZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLworCWNmc2V0b3NwZWVkKCZ0dGN1cixzKTsKKwlj ZnNldGlzcGVlZCgmdHRjdXIsczIpOworCWNmc2V0b3NwZWVkKCZ0dHJhdyxzKTsKKwljZnNldGlz cGVlZCgmdHRyYXcsczIpOworCWNmc2V0b3NwZWVkKCZ0dHR2dCxzKTsKKwljZnNldGlzcGVlZCgm dHR0dnQsczIpOworCWNmc2V0b3NwZWVkKCZ0dG9sZCxzKTsKKwljZnNldGlzcGVlZCgmdHRvbGQs czIpOworCXggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7CisJZGVidWcoRjEw MSwidHRzc3BkIHRjc2V0YXR0ciIsIiIseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworI2Vs c2UKKyNpZmRlZiBBVFRTVgorCWlmIChjcHMgPT0gODg4KSByZXR1cm4oLTEpOwkvKiBObyBzcGxp dCBzcGVlZHMsIHNvcnJ5LiAqLworCXggPSBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0Y3VyKTsKKwlk ZWJ1ZyhGMTAxLCJ0dHNzcGQgVENHRVRBIGlvY3RsIiwiIix4KTsKKwlpZiAoeCA8IDApIHJldHVy bigtMSk7CisJdHRjdXIuY19jZmxhZyAmPSB+Q0JBVUQ7CisJdHRjdXIuY19jZmxhZyB8PSBzOwor CXR0dHZ0LmNfY2ZsYWcgJj0gfkNCQVVEOworCXR0dHZ0LmNfY2ZsYWcgfD0gczsKKwl0dHJhdy5j X2NmbGFnICY9IH5DQkFVRDsKKwl0dHJhdy5jX2NmbGFnIHw9IHM7CisJdHRvbGQuY19jZmxhZyAm PSB+Q0JBVUQ7CisJdHRvbGQuY19jZmxhZyB8PSBzOworCXggPSBpb2N0bCh0dHlmZCxUQ1NFVEFX LCZ0dGN1cik7CisJZGVidWcoRjEwMSwidHRzc3BkIFRDU0VUQVcgaW9jdGwiLCIiLHgpOworCWlm ICh4IDwgMCkgcmV0dXJuKC0xKTsKKyNlbHNlCisjaWZkZWYgQkVMTFYxMAorCXggPSBpb2N0bCh0 dHlmZCxUSU9DR0RFViwmdGRjdXIpOworCWRlYnVnKEYxMDEsInR0c3NwZCBUSU9DR0RFViBpb2N0 bCIsIiIseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXRkY3VyLmlzcGVlZCA9IHMyOwor CXRkY3VyLm9zcGVlZCA9IHM7CisJZXJybm8gPSAwOworCW9rID0gaW9jdGwodHR5ZmQsVElPQ1NE RVYsJnRkY3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHNzcGQgQkVMTFYxMCBpb2N0bCIsIiIsb2spOwor CWlmIChvayA8IDApIHsKKwkgICAgcGVycm9yKHR0bm1zdik7CisJICAgIGRlYnVnKEYxMDEsInR0 c3NwZCBCRUxMVjEwIGVycm5vIiwiIixvayk7CisJICAgIHJldHVybigtMSk7CisJfQorI2Vsc2UK Kwl4ID0gZ3R0eSh0dHlmZCwmdHRjdXIpOworCWRlYnVnKEYxMDEsInR0c3NwZCBndHR5IiwiIix4 KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJdHRjdXIuc2dfb3NwZWVkID0gczsgdHRjdXIu c2dfaXNwZWVkID0gczI7CisJdHR0dnQuc2dfb3NwZWVkID0gczsgdHR0dnQuc2dfaXNwZWVkID0g czI7CisJdHRyYXcuc2dfb3NwZWVkID0gczsgdHRyYXcuc2dfaXNwZWVkID0gczI7CisJdHRvbGQu c2dfb3NwZWVkID0gczsgdHRvbGQuc2dfaXNwZWVkID0gczI7CisJeCA9IHN0dHkodHR5ZmQsJnR0 Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHNzcGQgc3R0eSIsIiIseCk7CisJaWYgKHggPCAwKSByZXR1 cm4oLTEpOworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlm IC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIFBsYW45ICovCisgICAgfQorICAgIHJldHVy bigxKTsJCQkJLyogUmV0dXJuIDEgPSBzdWNjZXNzLiAqLworI2VuZGlmIC8qIFVTRVRDU0VUU1BF RUQgKi8KK30KKworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworLyogQyBPIE4gRyBTIFAgRCAgLSAg R2V0IHNwZWVkIG9mIGNvbnNvbGUgdGVybWluYWwgICovCisKK2xvbmcKK2NvbmdzcGQoKSB7Cisv KgorICBUaGlzIGlzIGEgZGlzZ3VzdGluZyBoYWNrLiAgVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlz IHdvdWxkIGJlIHRvIHBhc3MgYW4KKyAgYXJndW1lbnQgdG8gdHRnc3BkKCksIGJ1dCB0aGVuIHdl J2QgbmVlZCB0byBjaGFuZ2UgdGhlIEtlcm1pdCBBUEkgYW5kCisgIGFsbCBvZiB0aGUgY2s/dGlv LmMgbW9kdWxlcy4gIChDdXJyZW50bHkgdXNlZCBvbmx5IGZvciBybG9naW4uKQorKi8KKyAgICBp bnQgdDE7CisgICAgbG9uZyBzcGQ7CisjaWZkZWYgTkVUQ09OTgorICAgIGludCB0MiA9IG5ldGNv bm47CisgICAgbmV0Y29ubiA9IDA7CisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgIHQxID0gdHR5 ZmQ7CisgICAgdHR5ZmQgPSAtMTsKKyAgICBzcGQgPSB0dGdzcGQoKTsKKyAgICBkZWJ1ZyhGMTAx LCJjb25nc3BkIiwiIixzcGQpOworI2lmZGVmIE5FVENPTk4KKyAgICBuZXRjb25uID0gdDI7Cisj ZW5kaWYgLyogTkVUQ09OTiAqLworICAgIHR0eWZkID0gdDE7CisgICAgcmV0dXJuKHNwZCk7Cit9 CisKKy8qICBUIFQgUyBQIEQgTCBJIFMgVCAgLS0gR2V0IGxpc3Qgb2Ygc2VyaWFsIHNwZWVkcyBh bGxvd2VkIG9uIHRoaXMgcGxhdGZvcm0gKi8KKworI2RlZmluZSBOU1BETElTVCA2NAorc3RhdGlj IGxvbmcgc3BkbGlzdFtOU1BETElTVF07CisvKgorICBBcyB3cml0dGVuLCB0aGlzIHBpY2tzIHVw IHRoZSBzcGVlZHMga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgdGh1cworICBhcHBseSB0byB0 aGUgc3lzdGVtIHdoZXJlIEMtS2VybWl0IHdhcyBidWlsdCwgcmF0aGVyIHRoYW4gdG8gdGhlIG9u ZSB3aGVyZQorICBpdCBpcyBydW5uaW5nLiAgU3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50IGFy ZSBhbHdheXMgd2VsY29tZS4KKyovCitsb25nICoKK3R0c3BkbGlzdCgpIHsKKyAgICBpbnQgaTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgTlNQRExJU1Q7IGkrKykJLyogSW5pdGlhbGl6ZSB0aGUgbGlz dCAqLworICAgICAgc3BkbGlzdFtpXSA9IC0xTDsKKyAgICBpID0gMTsKKworI2lmZGVmIFVTRVRD U0VUU1BFRUQJCQkvKiBObyB3YXkgdG8gZmluZCBvdXQgd2hhdCdzIGxlZ2FsICovCisgICAgZGVi dWcoRjEwMCwidHRzcGRsaXN0IFVTRVRDU0VUU1BFRUQiLCIiLDApOworICAgIHNwZGxpc3RbaSsr XSA9IDUwTDsKKyNpZm5kZWYgVVc3CisgICAgc3BkbGlzdFtpKytdID0gNzVMOworI2VuZGlmIC8q IFVXNyAqLworICAgIHNwZGxpc3RbaSsrXSA9IDExMEw7CisjaWZuZGVmIFVXNworICAgIHNwZGxp c3RbaSsrXSA9IDEzNEw7CisjZW5kaWYgLyogVVc3ICovCisgICAgc3BkbGlzdFtpKytdID0gMTUw TDsKKyAgICBzcGRsaXN0W2krK10gPSAyMDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDMwMEw7Cisg ICAgc3BkbGlzdFtpKytdID0gNjAwTDsKKyAgICBzcGRsaXN0W2krK10gPSAxMjAwTDsKKyAgICBz cGRsaXN0W2krK10gPSAxODAwTDsKKyAgICBzcGRsaXN0W2krK10gPSAyNDAwTDsKKyAgICBzcGRs aXN0W2krK10gPSA0ODAwTDsKKyAgICBzcGRsaXN0W2krK10gPSA4ODgwTDsKKyAgICBzcGRsaXN0 W2krK10gPSA5NjAwTDsKKyAgICBzcGRsaXN0W2krK10gPSAxNDQwMEw7CisgICAgc3BkbGlzdFtp KytdID0gMTkyMDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDI4ODAwTDsKKyNpZm5kZWYgVVc3Cisg ICAgc3BkbGlzdFtpKytdID0gMzM2MDBMOworI2VuZGlmIC8qIFVXNyAqLworICAgIHNwZGxpc3Rb aSsrXSA9IDM4NDAwTDsKKyAgICBzcGRsaXN0W2krK10gPSA1NzYwMEw7CisgICAgc3BkbGlzdFtp KytdID0gNzY4MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDExNTIwMEw7CisjaWZuZGVmIFVXNwor ICAgIHNwZGxpc3RbaSsrXSA9IDE1MzYwMEw7CisgICAgc3BkbGlzdFtpKytdID0gMjMwNDAwTDsK KyAgICBzcGRsaXN0W2krK10gPSAzMDcyMDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDQ2MDgwMEw7 CisgICAgc3BkbGlzdFtpKytdID0gOTIxNjAwTDsKKyNlbmRpZiAvKiBVVzcgKi8KKworI2Vsc2Ug IC8qIFVTRVRDU0VUU1BFRUQgKi8KKworICAgIGRlYnVnKEYxMDAsInR0c3BkbGlzdCBubyBVU0VU Q1NFVFNQRUVEIiwiIiwwKTsKKworI2lmZGVmIEI1MAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBCNTAiLCIiLEI1MCk7CisgICAgc3BkbGlzdFtpKytdID0gNTBMOworI2VuZGlmIC8qIEI1MCAq LworI2lmZGVmIEI3NQorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNzUiLCIiLEI3NSk7Cisg ICAgc3BkbGlzdFtpKytdID0gNzVMOworI2VuZGlmIC8qIEI3NSAqLworI2lmZGVmIEIxMTAKKyAg ICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjExMCIsIiIsQjExMCk7CisgICAgc3BkbGlzdFtpKytd ID0gMTEwTDsKKyNlbmRpZiAvKiBCMTEwICovCisjaWZkZWYgQjEzNAorICAgIGRlYnVnKEYxMDEs InR0c3BkbGlzdCBCMTM0IiwiIixCMTM0KTsKKyAgICBzcGRsaXN0W2krK10gPSAxMzRMOworI2Vu ZGlmIC8qIEIxMzQgKi8KKyNpZmRlZiBCMTUwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIx NTAiLCIiLEIxNTApOworICAgIHNwZGxpc3RbaSsrXSA9IDE1MEw7CisjZW5kaWYgLyogQjE1MCAq LworI2lmZGVmIEIyMDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjIwMCIsIiIsQjIwMCk7 CisgICAgc3BkbGlzdFtpKytdID0gMjAwTDsKKyNlbmRpZiAvKiBCMjAwICovCisjaWZkZWYgQjMw MAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMzAwIiwiIixCMzAwKTsKKyAgICBzcGRsaXN0 W2krK10gPSAzMDBMOworI2VuZGlmIC8qIEIzMDAgKi8KKyNpZmRlZiBCNjAwCisgICAgZGVidWco RjEwMSwidHRzcGRsaXN0IEI2MDAiLCIiLEI2MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDYwMEw7 CisjZW5kaWYgLyogQjYwMCAqLworI2lmZGVmIEIxMjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRs aXN0IEIxMjAwIiwiIixCMTIwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTIwMEw7CisjZW5kaWYg LyogQjEyMDAgKi8KKyNpZmRlZiBCMTgwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTgw MCIsIiIsQjE4MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDE4MDBMOworI2VuZGlmIC8qIEIxODAw ICovCisjaWZkZWYgQjI0MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjI0MDAiLCIiLEIy NDAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAyNDAwTDsKKyNlbmRpZiAvKiBCMjQwMCAqLworI2lm ZGVmIEI0ODAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI0ODAwIiwiIixCNDgwMCk7Cisg ICAgc3BkbGlzdFtpKytdID0gNDgwMEw7CisjZW5kaWYgLyogQjQ4MDAgKi8KKyNpZmRlZiBCOTYw MAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCOTYwMCIsIiIsQjk2MDApOworICAgIHNwZGxp c3RbaSsrXSA9IDk2MDBMOworI2VuZGlmIC8qIEI5NjAwICovCisjaWZkZWYgQjE0NDAwCisgICAg ZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxNDQwMCIsIiIsQjE0NDAwKTsKKyAgICBzcGRsaXN0W2kr K10gPSAxNDQwMEw7CisjZW5kaWYgLyogQjE0NDAwICovCisjaWZkZWYgQjE5MjAwCisgICAgZGVi dWcoRjEwMSwidHRzcGRsaXN0IEIxOTIwMCIsIiIsQjE5MjAwKTsKKyAgICBzcGRsaXN0W2krK10g PSAxOTIwMEw7CisjZWxzZQorI2lmZGVmIEVYVEEKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3Qg RVhUQSIsIiIsRVhUQSk7CisgICAgc3BkbGlzdFtpKytdID0gMTkyMDBMOworI2VuZGlmIC8qIEVY VEEgKi8KKyNlbmRpZiAvKiBCMTkyMDAgKi8KKyNpZmRlZiBCMjg4MDAKKyAgICBkZWJ1ZyhGMTAx LCJ0dHNwZGxpc3QgQjI4ODAwIiwiIixCMjg4MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDI4ODAw TDsKKyNlbmRpZiAvKiBCMjg4MDAgKi8KKyNpZmRlZiBCMzM2MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0 dHNwZGxpc3QgQjMzNjAwIiwiIixCMzM2MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDMzNjAwTDsK KyNlbmRpZiAvKiBCMzM2MDAgKi8KKyNpZmRlZiBCMzg0MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNw ZGxpc3QgQjM4NDAwIiwiIixCMzg0MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDM4NDAwTDsKKyNl bHNlCisjaWZkZWYgRVhUQgorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBFWFRCIiwiIixFWFRC KTsKKyAgICBzcGRsaXN0W2krK10gPSAzODQwMEw7CisjZW5kaWYgLyogRVhUQiAqLworI2VuZGlm IC8qIEIzODQwMCAqLworI2lmZGVmIF9CNTc2MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3Qg X0I1NzYwMCIsIiIsX0I1NzYwMCk7CisgICAgc3BkbGlzdFtpKytdID0gNTc2MDBMOworI2Vsc2UK KyNpZmRlZiBCNTc2MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjU3NjAwIiwiIixCNTc2 MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDU3NjAwTDsKKyNlbmRpZiAvKiBCNTc2MDAgKi8KKyNl bmRpZiAvKiBfQjU3NjAwICovCisjaWZkZWYgQjc2ODAwCisgICAgZGVidWcoRjEwMSwidHRzcGRs aXN0IEI3NjgwMCIsIiIsQjc2ODAwKTsKKyAgICBzcGRsaXN0W2krK10gPSA3NjgwMEw7CisjZW5k aWYgLyogQjc2ODAwICovCisjaWZkZWYgX0IxMTUyMDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxp c3QgX0IxMTUyMDAiLCIiLF9CMTE1MjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAxMTUyMDBMOwor I2Vsc2UKKyNpZmRlZiBCMTE1MjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIxMTUyMDAi LCIiLEIxMTUyMDApOworICAgIHNwZGxpc3RbaSsrXSA9IDExNTIwMEw7CisjZW5kaWYgLyogQjEx NTIwMCAqLworI2VuZGlmIC8qIF9CMTE1MjAwICovCisjaWZkZWYgQjE1MzYwMAorICAgIGRlYnVn KEYxMDEsInR0c3BkbGlzdCBCMTUzNjAwIiwiIixCMTUzNjAwKTsKKyAgICBzcGRsaXN0W2krK10g PSAxNTM2MDBMOworI2VuZGlmIC8qIEIxNTM2MDAgKi8KKyNpZmRlZiBCMjMwNDAwCisgICAgZGVi dWcoRjEwMSwidHRzcGRsaXN0IEIyMzA0MDAiLCIiLEIyMzA0MDApOworICAgIHNwZGxpc3RbaSsr XSA9IDIzMDQwMEw7CisjZW5kaWYgLyogQjIzMDQwMCAqLworI2lmZGVmIEIzMDcyMDAKKyAgICBk ZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjMwNzIwMCIsIiIsQjMwNzIwMCk7CisgICAgc3BkbGlzdFtp KytdID0gMzA3MjAwTDsKKyNlbmRpZiAvKiBCMzA3MjAwICovCisjaWZkZWYgQjQ2MDgwMAorICAg IGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNDYwODAwIiwiIixCNDYwODAwKTsKKyAgICBzcGRsaXN0 W2krK10gPSA0NjA4MDBMOworI2VuZGlmIC8qIEI0NjA4MDAgKi8KKyNpZmRlZiBCOTIxNjAwCisg ICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI5MjE2MDAiLCIiLEI5MjE2MDApOworICAgIHNwZGxp c3RbaSsrXSA9IDkyMTYwMEw7CisjZW5kaWYgLyogQjkyMTYwMCAqLworI2VuZGlmIC8qIFVTRVRD U0VUU1BFRUQgKi8KKyAgICBzcGRsaXN0WzBdID0gaSAtIDE7CQkJLyogUmV0dXJuIGNvdW50IGlu IDB0aCBlbGVtZW50ICovCisgICAgZGVidWcoRjExMSwidHRzcGRsaXN0IHNwZGxpc3QiLCIwIixz cGRsaXN0WzBdKTsKKyAgICByZXR1cm4oKGxvbmcgKilzcGRsaXN0KTsKK30KKworLyogVCBUIEcg UyBQIEQgIC0gIEdldCBzcGVlZCBvZiBjdXJyZW50bHkgc2VsZWN0ZWQgdHR5IGxpbmUgICovCisK Ky8qCisgIFVucmVsaWFibGUuICBBZnRlciBTRVQgTElORSwgaXQgcmV0dXJucyBhbiBhY3R1YWwg c3BlZWQsIGJ1dCBub3QgbmVjZXNzYXJpbHkKKyAgdGhlIHJlYWwgc3BlZWQuICBPbiBzb21lIHN5 c3RlbXMsIGl0IHJldHVybnMgdGhlIGxpbmUncyBub21pbmFsIHNwZWVkLCBmcm9tCisgIC9ldGMv dHR5dGFiLiAgRXZlbiBpZiB5b3UgU0VUIFNQRUVEIHRvIHNvbWV0aGluZyBlbHNlLCB0aGlzIGZ1 bmN0aW9uIG1pZ2h0CisgIG5vdCBub3RpY2UuCisqLworbG9uZwordHRnc3BkKCkgewkJCQkvKiBH ZXQgY3VycmVudCBzZXJpYWwgZGV2aWNlIHNwZWVkICovCisjaWZkZWYgTk9MT0NBTAorICAgIHJl dHVybigtMUwpOworI2Vsc2UKKyNpZmRlZiBQT1NJWAorICAgIHNwZWVkX3QJCQkJLyogU2hvdWxk IGJlIHVuc2lnbmVkICovCisjZWxzZQorICAgIGludAkJCQkJLyogSXNuJ3QgdW5zaWduZWQgKi8K KyNlbmRpZiAvKiBQT1NJWCAqLworICAgICAgczsKKyAgICBpbnQgeDsKKyAgICBsb25nIHNzOwor I2lmZGVmIE9MSU5VWEhJU1BFRUQKKyAgICB1bnNpZ25lZCBpbnQgc3BkX2ZsYWdzID0gMDsKKyAg ICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXJpbmZvOworI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQg Ki8KKworI2lmZGVmIE5FVENPTk4KKyAgICBpZiAobmV0Y29ubikgeworI2lmZGVmIFROX0NPTVBP UlQKKwlpZiAoaXN0bmNvbXBvcnQoKSkKKwkgIHJldHVybih0bmNfZ2V0X2JhdWQoKSk7CisJZWxz ZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKwkgIHJldHVybigtMSk7CQkJLyogLTEgaWYgbmV0 d29yayBjb25uZWN0aW9uICovCisgICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZmRlZiBO RVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oLTEpOworI2VuZGlmIC8qIE5FVENNRCAqLwor I2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBORVRQ VFkgKi8KKworICAgIGRlYnVnKEYxMDEsInR0Z3NwZCB0dHlmZCIsIiIsdHR5ZmQpOworCisjaWZk ZWYgVVNFVENTRVRTUEVFRAorCisgICAgeCA9IHRjZ2V0YXR0cih0dHlmZCwmdHRjdXIpOwkvKiBH ZXQgY3VycmVudCBzcGVlZCAqLworICAgIGRlYnVnKEYxMDEsInR0Z3NwZCB0Y2dldGF0dHIiLCIi LHgpOworICAgIGlmICh4IDwgMCkKKyAgICAgIHJldHVybigtMSk7CisgICAgZXJybm8gPSAwOwor ICAgIHMgPSB0Y2dldHNwZWVkKFRDU19BTEwsICZ0dGN1cik7CisgICAgZGVidWcoRjEwMSwidHRz c3BkIFRDR0VUU1BFRUQgc3BlZWQiLCIiLHMpOworICAgIGlmIChzID09IDApIHsKKwlsb25nIHMx LCBzMjsKKwlzMSA9IHRjZ2V0c3BlZWQoVENTX0lOLCAmdHRjdXIpOworCXMyID0gdGNnZXRzcGVl ZChUQ1NfT1VULCAmdHRjdXIpOworCWlmIChzMSA9PSAxMjAwTCAmJiBzMiA9PSA3NUwpCisJICBy ZXR1cm4oODg4MEwpOworICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmIChlcnJubyAmIGRlYmxv ZykgeworCWRlYnVnKEYxMDEsInR0c3NwZCBUQ0dFVFNQRUVEIGVycm5vIiwiIixlcnJubyk7Cisg ICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgcmV0dXJuKHMpOworCisjZWxzZSAgLyogTm90 IFVTRVRDU0VUU1BFRUQgKi8KKworI2lmZGVmIFBsYW45CisgICAgaWYgKHR0eWZkIDwgMCkKKyAg ICAgIHNzID0gLTE7CisgICAgZWxzZQorICAgICAgc3MgPSB0dHlsYXN0c3BlZWQ7CisjZWxzZQor I2lmZGVmIE9MSU5VWEhJU1BFRUQKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdzcGQgTGludXggT0xJTlVY SElTUEVFRCIsIiIsMCk7CisjZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLworCisgICAgaWYgKHR0 eWZkIDwgMCkgeworI2lmZGVmIEJTRDQ0T1JQT1NJWAorCXMgPSBjZmdldG9zcGVlZCgmY2NvbGQp OworCWRlYnVnKEYxMDEsInR0Z3NwZCBjZmdldG9zcGVlZCAxIFBPU0lYIiwiIixzKTsKKyNlbHNl CisjaWZkZWYgQVRUU1YKKwlzID0gY2NvbGQuY19jZmxhZyAmIENCQVVEOworCWRlYnVnKEYxMDEs InR0Z3NwZCBjX2NmbGFnIENCQVVEIDEgQVRUU1YiLCIiLHMpOworI2Vsc2UKKwlzID0gY2NvbGQu c2dfb3NwZWVkOwkJLyogKG9idGFpbmVkIGJ5IGNvbmdtKCkpICovCisJZGVidWcoRjEwMSwidHRn c3BkIHNnX29zcGVlZCAxIiwiIixzKTsKKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJT RDQ0UE9TSVggKi8KKworICAgIH0gZWxzZSB7CisjaWZkZWYgQlNENDRPUlBPU0lYCisJaWYgKHRj Z2V0YXR0cih0dHlmZCwmdHRjdXIpIDwgMCkgcmV0dXJuKC0xKTsKKwlzID0gY2ZnZXRvc3BlZWQo JnR0Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQgY2ZnZXRvc3BlZWQgMiBCU0RPUlBPU0lYIiwi IixzKTsKKyNpZmRlZiBPTElOVVhISVNQRUVECisJaWYgKGlvY3RsKHR0eWZkLFRJT0NHU0VSSUFM LCZzZXJpbmZvKSA+IC0xKQorCSAgc3BkX2ZsYWdzID0gc2VyaW5mby5mbGFncyAmIEFTWU5DX1NQ RF9NQVNLOworCWRlYnVnKEYxMDEsInR0Z3NwZCBzcGRfZmxhZ3MiLCIiLHNwZF9mbGFncyk7Cisj ZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLworI2Vsc2UKKyNpZmRlZiBBVFRTVgorCXggPSBpb2N0 bCh0dHlmZCxUQ0dFVEEsJnR0Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQgaW9jdGwgMiBBVFRT ViB4IiwiIix4KTsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQgaW9jdGwgMiBBVFRTViBlcnJubyIsIiIs ZXJybm8pOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlzID0gdHRjdXIuY19jZmxhZyAmIENC QVVEOworCWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEFUVFNWIHNwZWVkIiwiIixzKTsKKyNl bHNlCisjaWZkZWYgQkVMTFYxMAorCXggPSBpb2N0bCh0dHlmZCxUSU9DR0RFViwmdGRjdXIpOwor CWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEJFTExWMTAgeCIsIiIseCk7CisJaWYgKHggPCAw KSByZXR1cm4oLTEpOworCXMgPSB0ZGN1ci5vc3BlZWQ7CisJZGVidWcoRjEwMSwidHRnc3BkIGlv Y3RsIDIgQkVMTFYxMCBzcGVlZCIsIiIscyk7CisjZWxzZQorCXggPSBndHR5KHR0eWZkLCZ0dGN1 cik7CisJZGVidWcoRjEwMSwidHRnc3BkIGd0dHkgMiB4IiwiIix4KTsKKwlkZWJ1ZyhGMTAxLCJ0 dGdzcGQgZ3R0eSAyIGVycm5vIiwiIixlcnJubyk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOwor CXMgPSB0dGN1ci5zZ19vc3BlZWQ7CisJZGVidWcoRjEwMSwidHRnc3BkIGd0dHkgMiBzcGVlZCIs IiIscyk7CisjZW5kaWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYg LyogQlNENDRPUlBPU0lYICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsInR0Z3NwZCBjb2RlIiwi IixzKTsKKyNpZmRlZiBPTElOVVhISVNQRUVECisgICAgZGVidWcoRjEwMSwidHRnc3BkIHNwZF9m bGFncyIsIiIsc3BkX2ZsYWdzKTsKKyNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCisgICAgc3dp dGNoIChzKSB7CisjaWZkZWYgQjAKKyAgICAgIGNhc2UgQjA6ICAgIHNzID0gMEw7IGJyZWFrOwor I2VuZGlmIC8qIEIwICovCisKKyNpZm5kZWYgTUlOSVgKKy8qCisgTUlOSVggZGVmaW5lcyB0aGUg Qnh4IHN5bWJvbHMgdG8gYmUgYnBzLzEwMCwgc28gQjUwPT1CNzUsIEIxMTA9PUIxMzQ9PUIxNTAs CisgZXRjLCBtYWtpbmcgZm9yIG1hbnkgImR1cGxpY2F0ZSBjYXNlIGluIHN3aXRjaCIgZXJyb3Jz LCB3aGljaCBhcmUgZmF0YWwuCisqLworI2lmZGVmIEI1MAorICAgICAgY2FzZSBCNTA6ICAgc3Mg PSA1MEw7IGJyZWFrOworI2VuZGlmIC8qIEI1MCAqLworI2lmZGVmIEI3NQorICAgICAgY2FzZSBC NzU6ICAgc3MgPSA3NUw7IGJyZWFrOworI2VuZGlmIC8qIEI3NSAqLworI2VuZGlmIC8qIE1JTklY ICovCisKKyNpZmRlZiBCMTEwCisgICAgICBjYXNlIEIxMTA6ICBzcyA9IDExMEw7IGJyZWFrOwor I2VuZGlmIC8qIEIxMTAgKi8KKworI2lmbmRlZiBNSU5JWAorI2lmZGVmIEIxMzQKKyAgICAgIGNh c2UgQjEzNDogIHNzID0gMTM0TDsgYnJlYWs7CisjZW5kaWYgLyogQjEzNCAqLworI2lmZGVmIEIx NTAKKyAgICAgIGNhc2UgQjE1MDogIHNzID0gMTUwTDsgYnJlYWs7CisjZW5kaWYgLyogQjE1MCAq LworI2VuZGlmIC8qIE1JTklYICovCisKKyNpZmRlZiBCMjAwCisgICAgICBjYXNlIEIyMDA6ICBz cyA9IDIwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIyMDAgKi8KKworI2lmZGVmIEIzMDAKKyAgICAg IGNhc2UgQjMwMDogIHNzID0gMzAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjMwMCAqLworCisjaWZk ZWYgQjYwMAorICAgICAgY2FzZSBCNjAwOiAgc3MgPSA2MDBMOyBicmVhazsKKyNlbmRpZiAvKiBC NjAwICovCisKKyNpZmRlZiBCMTIwMAorICAgICAgY2FzZSBCMTIwMDogc3MgPSAxMjAwTDsgYnJl YWs7CisjZW5kaWYgLyogQjEyMDAgKi8KKworI2lmZGVmIEIxODAwCisgICAgICBjYXNlIEIxODAw OiBzcyA9IDE4MDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMTgwMCAqLworCisjaWZkZWYgQjI0MDAK KyAgICAgIGNhc2UgQjI0MDA6IHNzID0gMjQwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIyNDAwICov CisKKyNpZmRlZiBCNDgwMAorICAgICAgY2FzZSBCNDgwMDogc3MgPSA0ODAwTDsgYnJlYWs7Cisj ZW5kaWYgLyogQjQ4MDAgKi8KKworI2lmZGVmIEI3MjAwCisgICAgICBjYXNlIEI3MjAwOiBzcyA9 IDcyMDBMOyBicmVhazsKKyNlbmRpZiAvKiBCNzIwMCAqLworCisjaWZkZWYgQjk2MDAKKyAgICAg IGNhc2UgQjk2MDA6IHNzID0gOTYwMEw7IGJyZWFrOworI2VuZGlmIC8qIEI5NjAwICovCisKKyNp ZmRlZiBCMTkyMDAKKyAgICAgIGNhc2UgQjE5MjAwOiBzcyA9IDE5MjAwTDsgYnJlYWs7CisjZWxz ZQorI2lmZGVmIEVYVEEKKyAgICAgIGNhc2UgRVhUQTogc3MgPSAxOTIwMEw7IGJyZWFrOworI2Vu ZGlmIC8qIEVYVEEgKi8KKyNlbmRpZiAvKiBCMTkyMDAgKi8KKworI2lmbmRlZiBNSU5JWAorI2lm ZGVmIEIzODQwMAorICAgICAgY2FzZSBCMzg0MDA6CisgICAgICAgIHNzID0gMzg0MDBMOworI2lm ZGVmIE9MSU5VWEhJU1BFRUQKKyAgICAgICAgc3dpdGNoKHNwZF9mbGFncykgeworICAgICAgICAg IGNhc2UgQVNZTkNfU1BEX0hJOiAgc3MgPSAgNTc2MDBMOyBicmVhazsKKyAgICAgICAgICBjYXNl IEFTWU5DX1NQRF9WSEk6IHNzID0gMTE1MjAwTDsgYnJlYWs7CisJfQorI2VuZGlmIC8qIE9MSU5V WEhJU1BFRUQgKi8KKyAgICAgICAgYnJlYWs7CisjZWxzZQorI2lmZGVmIEVYVEIKKyAgICAgIGNh c2UgRVhUQjogc3MgPSAzODQwMEw7IGJyZWFrOworI2VuZGlmIC8qIEVYVEIgKi8KKyNlbmRpZiAv KiBCMzg0MDAgKi8KKyNlbmRpZiAvKiBNSU5JWCAqLworCisjaWZkZWYgSFBVWAorI2lmZGVmIF9C NTc2MDAKKyAgICAgIGNhc2UgX0I1NzYwMDogc3MgPSA1NzYwMEw7IGJyZWFrOworI2VuZGlmIC8q IF9CNTc2MDAgKi8KKyNpZmRlZiBfQjExNTIwMAorICAgICAgY2FzZSBfQjExNTIwMDogc3MgPSAx MTUyMDBMOyBicmVhazsKKyNlbmRpZiAvKiBfQjExNTIwMCAqLworI2Vsc2UKKyNpZmRlZiBCNTc2 MDAKKyAgICAgIGNhc2UgQjU3NjAwOiBzcyA9IDU3NjAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjU3 NjAwICovCisjaWZkZWYgQjc2ODAwCisgICAgICBjYXNlIEI3NjgwMDogc3MgPSA3NjgwMEw7IGJy ZWFrOworI2VuZGlmIC8qIEI3NjgwMCAqLworI2lmZGVmIEIxMTUyMDAKKyAgICAgIGNhc2UgQjEx NTIwMDogc3MgPSAxMTUyMDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMTE1MjAwICovCisjaWZkZWYg QjE1MzYwMAorICAgICAgY2FzZSBCMTUzNjAwOiBzcyA9IDE1MzYwMEw7IGJyZWFrOworI2VuZGlm IC8qIEIxNTM2MDAgKi8KKyNpZmRlZiBCMjMwNDAwCisgICAgICBjYXNlIEIyMzA0MDA6IHNzID0g MjMwNDAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjIzMDQwMCAqLworI2lmZGVmIEIzMDcyMDAKKyAg ICAgIGNhc2UgQjMwNzIwMDogc3MgPSAzMDcyMDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMzA3MjAw ICovCisjaWZkZWYgQjQ2MDgwMAorICAgICAgY2FzZSBCNDYwODAwOiBzcyA9IDQ2MDgwMEw7IGJy ZWFrOworI2VuZGlmIC8qIEI0NjA4MDAgKi8KKyNlbmRpZiAvKiBIUFVYICovCisjaWZkZWYgQjky MTYwMAorICAgICAgY2FzZSBCOTIxNjAwOiBzcyA9IDkyMTYwMEw7IGJyZWFrOworI2VuZGlmIC8q IEI5MjE2MDAgKi8KKyAgICAgIGRlZmF1bHQ6CisJc3MgPSAtMTsgYnJlYWs7CisgICAgfQorI2Vu ZGlmIC8qIFBsYW45ICovCisgICAgZGVidWcoRjEwMSwidHRnc3BkIHNwZWVkIiwiIixzcyk7Cisg ICAgcmV0dXJuKHNzKTsKKworI2VuZGlmIC8qIFVTRVRDU0VUU1BFRUQgKi8KKyNlbmRpZiAvKiBO T0xPQ0FMICovCit9CisjaWZkZWYgTUlOSVgyCQkJCS8qIEFub3RoZXIgaGFjayBhbGVydCAqLwor I2RlZmluZSBNSU5JWAorI2VuZGlmIC8qIE1JTklYMiAqLworCisvKgorICBGSU9OUkVBRCBkYXRh IHR5cGUuLi4gIFRoaXMgaGFzIGJlZW4gZGVmaW5lZCBhcyAibG9uZyIgZm9yIG1hbnksIG1hbnkK KyAgeWVhcnMsIGFuZCBpdCB3b3JrZWQgT0sgdW50aWwgNjQtYml0IHBsYXRmb3JtcyBhcHBlYXJl ZC4gIFRodXMgd2UgdXNlCisgIGludCBmb3IgNjQtYml0IHBsYXRmb3JtcywgYnV0IGtlZXAgbG9u ZyBmb3IgdGhlIG90aGVycy4gIElmIHdlIGNoYW5nZWQKKyAgdGhlIGRlZmF1bHQgUEVFS1RZUEUg dG8gaW50LCB0aGlzIHdvdWxkIHByb2JhYmx5IGJyZWFrIDE2LWJpdCBidWlsZHMKKyAgKG5vdGUg dGhhdCBzaXplb2YobG9uZykgPT0gc2l6ZW9mKGludCkgb24gbW9zdCAzMi1iaXQgcGxhdGZvcm1z KSwgbWFueQorICBvZiB3aGljaCB3ZSBoYXZlIG5vIHdheSBvZiB0ZXN0aW5nIGFueSBtb3JlLiAg VGhlcmVmb3JlLCBkbyBub3QgY2hhbmdlCisgIHRoZSBkZWZhdWx0IGRlZmluaXRpb24gb2YgUEVF S1RZUEUgLS0gb25seSBhZGQgZXhjZXB0aW9ucyB0byBpdCBhcyBuZWVkZWQuCisqLworI2lmZGVm IENPSEVSRU5UCisjaWZkZWYgRklPTlJFQUQKKyN1bmRlZiBGSU9OUkVBRAorI2VuZGlmIC8qIEZJ T05SRUFEICovCisvKiAjZGVmaW5lIEZJT05SRUFEIFRJT0NRVUVSWSAqLworLyogI2RlZmluZSBQ RUVLVFlQRSBpbnQgKi8KKyNlbHNlICAvKiBOb3QgQ09IRVJFTlQuLi4gKi8KKworI2lmZGVmIE9T RjMyCQkJCS8qIERpZ2l0YWwgVU5JWCAzLjIgb3IgaGlnaGVyICovCisjZGVmaW5lIFBFRUtUWVBF IGludAorI2Vsc2UKKyNkZWZpbmUgUEVFS1RZUEUgbG9uZwkJCS8qIEVsc2V3aGVyZSAoc2VlIG5v dGVzIGFib3ZlKSAqLworI2VuZGlmIC8qIE9TRjMyICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8K KworLyogY2t1bXlyLmMgYnkgS3Jpc3RvZmZlciBFcmlrc3Nvbiwgc2tlQHBrbWFiLnNlLCAxNSBN YXIgMTk5MC4gKi8KKworI2lmZGVmIE1ZUkVBRAorCisvKiBQcml2YXRlIGJ1ZmZlciBmb3IgbXly ZWFkKCkgYW5kIGl0cyBjb21wYW5pb25zLiAgTm90IGZvciB1c2UgYnkgYW55dGhpbmcKKyAqIGVs c2UuICB0dGZsdWkoKSBpcyBhbGxvd2VkIHRvIHJlc2V0IHRoZW0gdG8gaW5pdGlhbCB2YWx1ZXMu ICB0dGNoaygpIGlzCisgKiBhbGxvd2VkIHRvIHJlYWQgbXlfY291bnQuCisgKgorICogbXlfaXRl bSBpcyBhbiBpbmRleCBpbnRvIG15YnVmW10uICBJbmNyZW1lbnQgaXQgKmJlZm9yZSogcmVhZGlu ZyBteWJ1ZltdLgorICoKKyAqIEEgZ2xvYmFsIHBhcml0eSBtYXNrIHZhcmlhYmxlIGNvdWxkIGJl IHVzZWZ1bCB0b28uICBXZSBjb3VsZCB1c2UgaXQgdG8KKyAqIGxldCBteXJlYWQoKSBzdHJpcCB0 aGUgcGFyaXR5IG9uIGl0cyBvd24sIGluc3RlYWQgb2Ygc3RyaXBwaW5nIHNpZ24KKyAqIGJpdHMg YXMgaXQgZG9lcyBub3cuCisgKi8KKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBNWUJVRkxFTiAz Mjc2OAorI2Vsc2UKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBNWUJVRkxFTiAyNTYKKyNlbHNlCisj ZGVmaW5lIE1ZQlVGTEVOIDEwMjQKKyNlbmRpZiAvKiBwZHAxMSAqLworI2VuZGlmIC8qIEJJR0JV Rk9LICovCisKKyNpZmRlZiBBTllYMjUKKyN1bmRlZiBNWUJVRkxFTgorI2RlZmluZSBNWUJVRkxF TiAyNTYKKy8qCisgIE9uIFguMjUgY29ubmVjdGlvbnMsIHRoZXJlIGlzIGFuIGV4dHJhIGNvbnRy b2wgYnl0ZSBhdCB0aGUgYmVnaW5uaW5nLgorKi8KK3N0YXRpYyBDSEFSIHgyNWJ1ZltNWUJVRkxF TisxXTsJCS8qIENvbW11bmljYXRpb24gZGV2aWNlIGlucHV0IGJ1ZmZlciAqLworc3RhdGljIENI QVIgICpteWJ1ZiA9IHgyNWJ1ZisxOworI2Vsc2UKK3N0YXRpYyBDSEFSIG15YnVmW01ZQlVGTEVO XTsKKyNlbmRpZiAvKiBBTllYMjUgKi8KKworc3RhdGljIGludCBteV9jb3VudCA9IDA7CQkvKiBO dW1iZXIgb2YgY2hhcnMgc3RpbGwgaW4gbXlidWYgKi8KK3N0YXRpYyBpbnQgbXlfaXRlbSA9IC0x OwkJLyogTGFzdCBpbmRleCByZWFkIGZyb20gbXlidWZbXSAgICovCisKKy8qICBUIFQgUCBFIEUg SyAgLS0gIFBlZWsgaW50byBvdXIgaW50ZXJuYWwgY29tbXVuaWNhdGlvbnMgaW5wdXQgYnVmZmVy cy4gKi8KKworLyoKKyAgTk9URTogVGhpcyByb3V0aW5lIGlzIHBlY3VsaWFyIHRvIFVOSVgsIGFu ZCBpcyB1c2VkIG9ubHkgYnkgdGhlCisgIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QgbW9kdWxlLCBj a3VjbnMuYy4gIEl0IG5lZWQgbm90IGJlIHJlcGxpY2F0ZWQgaW4KKyAgdGhlIGNrP3Rpby5jIG9m IG90aGVyIHBsYXRmb3Jtcy4KKyovCitpbnQKK3R0cGVlaygpIHsKKyNpZmRlZiBUVExFQlVGCisg ICAgaW50IHJjID0gMDsKKyAgICBpZiAodHRwdXNoID49IDApCisgICAgICByYysrOworICAgIHJj ICs9IGxlX2luYnVmKCk7CisgICAgaWYgKHJjID4gMCkKKyAgICAgIHJldHVybihyYyk7CisgICAg ZWxzZQorI2VuZGlmIC8qIFRUTEVCVUYgKi8KKworI2lmZGVmIE1ZUkVBRAorICAgIHJldHVybiht eV9jb3VudCk7CisjZWxzZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBNWVJFQUQgKi8KK30K KworLyogbXlyZWFkKCkgLS0gRWZmaWNpZW50IHJlYWQgb2Ygb25lIGNoYXJhY3RlciBmcm9tIGNv bW11bmljYXRpb25zIGxpbmUuCisgKgorICogTk9URTogbXlyZWFkKCkgYW5kIGl0cyBoZWxwZXJz IG15Z2V0YnVmKCkgYW5kIG15ZmlsbGJ1ZigpIHJldHVybiByYXcKKyAqIGJ5dGVzIGZyb20gY29u bmVjdGlvbiwgc28gd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBlbmNyeXB0ZWQsIHRoZXNlIGJ5dGVz CisgKiBtdXN0IGJlIGRlY3J5cHRlZC4KKyAqCisgKiBVc2VzIGEgcHJpdmF0ZSBidWZmZXIgdG8g bWluaW1pemUgdGhlIG51bWJlciBvZiBleHBlbnNpdmUgcmVhZCgpIHN5c3RlbQorICogY2FsbHMu ICBFc3NlbnRpYWxseSBwZXJmb3JtcyB0aGUgZXF1aXZhbGVudCBvZiByZWFkKCkgb2YgMSBjaGFy YWN0ZXIsIHdoaWNoCisgKiBpcyB0aGVuIHJldHVybmVkLiAgQnkgcmVhZGluZyBhbGwgYXZhaWxh YmxlIGlucHV0IGZyb20gdGhlIHN5c3RlbSBidWZmZXJzCisgKiB0byB0aGUgcHJpdmF0ZSBidWZm ZXIgaW4gb25lIGNodW5rLCBhbmQgdGhlbiB3b3JraW5nIGZyb20gdGhpcyBidWZmZXIsIHRoZQor ICogbnVtYmVyIG9mIHN5c3RlbSBjYWxscyBpcyByZWR1Y2VkIGluIGFueSBjYXNlIHdoZXJlIG1v cmUgdGhhbiBvbmUgY2hhcmFjdGVyCisgKiBhcnJpdmVzIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBv ZiB0aGUgcHJldmlvdXMgY2h1bmssIGZvciBpbnN0YW5jZSBoaWdoCisgKiBiYXVkIHJhdGVzIG9y IG5ldHdvcmsgdHlwZSBjb25uZWN0aW9ucyB3aGVyZSBpbnB1dCBhcnJpdmVzIGluIHBhY2tldHMu CisgKiBJZiB0aGUgdGltZSBuZWVkZWQgZm9yIGEgcmVhZCgpIHN5c3RlbSBjYWxsIGFwcHJvYWNo ZXMgdGhlIHRpbWUgZm9yIG1vcmUKKyAqIHRoYW4gb25lIGNoYXJhY3RlciB0byBhcnJpdmUsIHRo ZW4gdGhpcyBtZWNoYW5pc20gYXV0b21hdGljYWxseSBjb21wZW5zYXRlcworICogZm9yIHRoYXQg YnkgcGVyZm9ybWluZyBiaWdnZXIgcmVhZCgpcyBsZXNzIGZyZXF1ZW50bHkuICBJZiB0aGUgc3lz dGVtIGxvYWQKKyAqIGlzIGhpZ2gsIHRoZSBzYW1lIG1lY2hhbmlzbSBjb21wZW5zYXRlcyBmb3Ig dGhhdCB0b28uCisgKgorICogbXlyZWFkKCkgaXMgYSBtYWNybyB0aGF0IHJldHVybnMgdGhlIG5l eHQgY2hhcmFjdGVyIGZyb20gdGhlIGJ1ZmZlci4gIElmIHRoZQorICogYnVmZmVyIGlzIGVtcHR5 LCBteWdldGJ1ZigpIGlzIGNhbGxlZC4gIFNlZSBteWdldGJ1ZigpIGZvciBwb3NzaWJsZSBlcnJv cgorICogcmV0dXJucy4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBlZmZpY2llbnQgZW5vdWdoIGZv ciBhbnkgb25lLWNoYXJhY3Rlci1hdC1hLXRpbWUgbG9vcHMuCisgKiBGb3IgZXZlbiBiZXR0ZXIg ZWZmaWNpZW5jeSB5b3UgbWlnaHQgdXNlIG1lbWNweSgpL2Jjb3B5KCkgb3Igc3VjaCBiZXR3ZWVu CisgKiBidWZmZXJzIChzaW5jZSB0aGV5IGFyZSBvZnRlbiBiZXR0ZXIgb3B0aW1pemVkIGZvciBj b3B5aW5nKSwgYnV0IGl0IG1heSBub3QKKyAqIGJlIHdvcnRoIGl0IGlmIHlvdSBoYXZlIHRvIHRh a2UgYW4gZXh0cmEgcGFzcyBvdmVyIHRoZSBidWZmZXIgdG8gc3RyaXAKKyAqIHBhcml0eSBhbmQg Y2hlY2sgZm9yIENUUkwtQyBhbnl3YXkuCisgKgorICogTm90ZSB0aGF0IGlmIHlvdSBoYXZlIGJl ZW4gdXNpbmcgbXlyZWFkKCkgZnJvbSBhbm90aGVyIHByb2dyYW0gbW9kdWxlLCB5b3UKKyAqIG1h eSBoYXZlIHNvbWUgdHJvdWJsZSBhY2Nlc3NpbmcgdGhpcyBtYWNybyB2ZXJzaW9uIGFuZCB0aGUg cHJpdmF0ZSB2YXJpYWJsZXMKKyAqIGl0IHVzZXMuICBJbiB0aGF0IGNhc2UsIGp1c3QgYWRkIGEg ZnVuY3Rpb24gaW4gdGhpcyBtb2R1bGUsIHRoYXQgaW52b2tlcyB0aGUKKyAqIG1hY3JvLgorICov CisjZGVmaW5lIG15cmVhZCgpICgtLW15X2NvdW50IDwgMCA/IG15Z2V0YnVmKCkgOiAyNTUgJiAo aW50KW15YnVmWysrbXlfaXRlbV0pCisKKy8qIFNwZWNpZmljYXRpb246IFB1c2ggYmFjayB1cCB0 byBvbmUgY2hhcmFjdGVyIG9udG8gbXlyZWFkKCkncyBxdWV1ZS4KKyAqCisgKiBUaGlzIGltcGxl bWVudGF0aW9uOiBQdXNoIGJhY2sgY2hhcmFjdGVycyBpbnRvIG15YnVmLiBBdCBsZWFzdCBvbmUg Y2hhcmFjdGVyCisgKiBtdXN0IGhhdmUgYmVlbiByZWFkIHRocm91Z2ggbXlyZWFkKCkgYmVmb3Jl IG15dW5yZCgpIG1heSBiZSB1c2VkLiAgQWZ0ZXIKKyAqIEVPRiBvciByZWFkIGVycm9yLCBhZ2Fp biwgbXl1bnJkKCkgY2FuIG5vdCBiZSB1c2VkLiAgU29tZXRpbWVzIG1vcmUgdGhhbgorICogb25l IGNoYXJhY3RlciBjYW4gYmUgcHVzaGVkIGJhY2ssIGJ1dCBvbmx5IG9uZSBjaGFyYWN0ZXIgaXMg Z3VhcmFudGVlZC4KKyAqIFNpbmNlIGEgcHJldmlvdXMgbXlyZWFkKCkgbXVzdCBoYXZlIHJlYWQg aXRzIGNoYXJhY3RlciBvdXQgb2YgbXlidWZbXSwKKyAqIHRoYXQgZ3VhcmFudGVlcyB0aGF0IHRo ZXJlIGlzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLiAgSWYgcHVzaAorICogYmFj ayB3YXMgcmVhbGx5IG5lZWRlZCBhZnRlciBFT0YsIGEgc21hbGwgYWRkaXRpb24gY291bGQgcHJv dmlkZSB0aGF0LgorICoKKyAqIEFzIG9mIDAyLzIwMDcgbXl1bnJkKCkgaXMgdXNlZCBieSB0dGlu bCgpLgorICovCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK215dW5yZChDSEFSIGNoKQorI2Vsc2UK K215dW5yZChjaCkgQ0hBUiBjaDsKKyNlbmRpZgkvKiBDS19BTlNJQyAqLworeworICAgIGlmICht eV9pdGVtID49IDApIHsKKwlteWJ1ZltteV9pdGVtLS1dID0gY2g7CisJKytteV9jb3VudDsKKyAg ICB9Cit9CisKKy8qICBUIFQgUCBVIFMgSCBCIEEgQyBLICAtLSAgUHV0IG4gYnl0ZXMgYmFjayBp bnRvIHRoZSBteXJlYWQgYnVmZmVyICovCisKK3N0YXRpYyBDSEFSICogcHVzaGJ1ZiA9IE5VTEw7 CisvKiBzdGF0aWMgaW50IHB1c2hlZCA9IDA7ICovCisKK2ludAordHRwdXNoYmFjayhzLG4pIENI QVIgKiBzOyBpbnQgbjsgeworICAgIGRlYnVnKEYxMDEsInR0cHVzaGJhY2sgbiIsIiIsbik7Cisg ICAgaWYgKHB1c2hidWYgfHwgbiA+IE1ZQlVGTEVOIHx8IG4gPCAxKQorICAgICAgcmV0dXJuKC0x KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB1c2hiYWNrIG15X2NvdW50IiwiIixteV9jb3VudCk7Cisg ICAgaWYgKG15X2NvdW50ID4gMCkgeworCWlmICghKHB1c2hidWYgPSAoQ0hBUiAqKW1hbGxvYyhu KzEpKSkKKwkgIHJldHVybigtMSk7CisJbWVtY3B5KHB1c2hidWYsbXlidWYsbXlfY291bnQpOwor CS8qIHB1c2hlZCA9IG15X2NvdW50OyAqLyAvKiAoc2V0IGJ1dCBuZXZlciB1c2VkKSAqLworICAg IH0KKyAgICBtZW1jcHkobXlidWYscyxuKTsKKyAgICBteV9jb3VudCA9IG47CisgICAgbXlfaXRl bSA9IC0xOworICAgIHJldHVybigwKTsKK30KKworLyogbXlnZXRidWYoKSAtLSBGaWxsIGJ1ZmZl ciBmb3IgbXlyZWFkKCkgYW5kIHJldHVybiBmaXJzdCBjaGFyYWN0ZXIuCisgKgorICogVGhpcyBm dW5jdGlvbiBpcyB3aGF0IG15cmVhZCgpIHVzZXMgd2hlbiBpdCBjYW4ndCBnZXQgdGhlIG5leHQg Y2hhcmFjdGVyCisgKiBkaXJlY3RseSBmcm9tIGl0cyBidWZmZXIuICBGaXJzdCwgaXQgY2FsbHMg YSBzeXN0ZW0gZGVwZW5kZW50IG15ZmlsbGJ1ZigpCisgKiB0byByZWFkIGF0IGxlYXN0IG9uZSBu ZXcgY2hhcmFjdGVyIGludG8gdGhlIGJ1ZmZlciwgYW5kIHRoZW4gaXQgcmV0dXJucworICogdGhl IGZpcnN0IGNoYXJhY3RlciBqdXN0IGFzIG15cmVhZCgpIHdvdWxkIGhhdmUgZG9uZS4gIFRoaXMg ZnVuY3Rpb24gYWxzbworICogaXMgcmVzcG9uc2libGUgZm9yIGFsbCBlcnJvciBjb25kaXRpb25z IHRoYXQgbXlyZWFkKCkgY2FuIGluZGljYXRlLgorICoKKyAqIFJldHVybnM6IFdoZW4gT0sJPT4g YSBwb3NpdGl2ZSBjaGFyYWN0ZXIsIDAgb3IgZ3JlYXRlci4KKyAqCSAgICBXaGVuIEVPRgk9PiAt Mi4KKyAqCSAgICBXaGVuIGVycm9yCT0+IC0zLCBlcnJvciBjb2RlIGluIGVycm5vLgorICoKKyAq IE9sZGVyIG15cmVhZCgpcyBhZGRpdGlvbmFsbHkgcmV0dXJuZWQgLTEgdG8gaW5kaWNhdGUgdGhh dCB0aGVyZSB3YXMgbm90aGluZworICogdG8gcmVhZCwgdXBvbiB3aGljaCB0aGUgY2FsbGVyIHdv dWxkIGNhbGwgbXlyZWFkKCkgYWdhaW4gdW50aWwgaXQgZ290CisgKiBzb21ldGhpbmcuICBUaGUg bmV3IG15cmVhZCgpL215Z2V0YnVmKCkgYWx3YXlzIGdldHMgc29tZXRoaW5nLiAgSWYgaXQKKyAq IGRvZXNuJ3QsIHRoZW4gbWFrZSBpdCBkbyBzbyEgIEFueSBwcm9ncmFtIHRoYXQgYWN0dWFsbHkg ZGVwZW5kcyBvbiB0aGUgb2xkCisgKiBiZWhhdmlvdXIgd2lsbCBicmVhay4KKyAqCisgKiBUaGUg b2xkZXIgdmVyc2lvbiBhbHNvIHVzZWQgdG8gcmV0dXJuIC0yIGJvdGggZm9yIEVPRiBhbmQgb3Ro ZXIgZXJyb3JzLAorICogYW5kIHVzZWQgdG8gc2V0IGVycm5vIHRvIDk5OTkgb24gRU9GLiAgVGhl IGVycm5vIHN0dWZmIGlzIGdvbmUsIEVPRiBhbmQKKyAqIG90aGVyIGVycm9ycyBub3cgcmV0dXJu IGRpZmZlcmVudCByZXN1bHRzLCBhbHRob3VnaCBLZXJtaXQgY3VycmVudGx5IG5ldmVyCisgKiBj aGVja3MgdG8gc2VlIHdoaWNoIGl0IHdhcy4gIEl0IGp1c3QgZGlzY29ubmVjdHMgaW4gYm90aCBj YXNlcy4KKyAqCisgKiBLZXJtaXQgbGV0cyB0aGUgdXNlciB1c2UgdGhlIHF1aXQga2V5IHRvIHBl cmZvcm0gc29tZSBzcGVjaWFsIGNvbW1hbmRzCisgKiBkdXJpbmcgZmlsZSB0cmFuc2Zlci4gIFRo aXMgY2F1c2VzIHJlYWQoKSwgYW5kIHRodXMgYWxzbyBteWdldGJ1ZigpLCB0bworICogZmluaXNo IHdpdGhvdXQgcmVhZGluZyBhbnl0aGluZyBhbmQgcmV0dXJuIHRoZSBFSU5UUiBlcnJvci4gIFRo aXMgc2hvdWxkCisgKiBiZSBjaGVja2VkIGJ5IHRoZSBjYWxsZXIuICBNeWdldGJ1ZigpIGNvdWxk IHJldHJ5IHRoZSByZWFkKCkgb24gRUlOVFIsCisgKiBidXQgaWYgdGhlcmUgaXMgbm90aGluZyB0 byByZWFkLCB0aGlzIGNvdWxkIGRlbGF5IEtlcm1pdCdzIHJlYWN0aW9uIHRvCisgKiB0aGUgY29t bWFuZCwgYW5kIG1ha2UgS2VybWl0IGFwcGVhciB1bnJlc3BvbnNpdmUuCisgKgorICogVGhlIGRl YnVnKCkgY2FsbCBzaG91bGQgYmUgcmVtb3ZlZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4KKyAq LworaW50CitteWdldGJ1ZigpIHsKKyAgICBpbnQgeDsKKyAgICBlcnJubyA9IDA7CisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nICYmIG15X2NvdW50ID4gMCkKKyAgICAgIGRlYnVnKEYxMDEs Im15Z2V0YnVmIElNUFJPUEVSTFkgQ0FMTEVEIHdpdGggbXlfY291bnQiLCIiLG15X2NvdW50KTsK KyNlbmRpZiAvKiBERUJVRyAqLworICAgIGlmIChteV9jb3VudCA8PSAwKQorICAgICAgbXlfY291 bnQgPSBteWZpbGxidWYoKTsKKworI2lmZGVmIERFQlVHCisjaWZkZWYgQ09NTUVOVAorICAgIGlm IChkZWJsb2cpIGRlYnVnKEYxMDEsICJteWdldGJ1ZiByZWFkIiwgIiIsIG15X2NvdW50KTsKKyNl bHNlIC8qIENPTU1FTlQgKi8KKyAgICBja2hleGR1bXAoIm15Z2V0YnVmIHJlYWQiLCBteWJ1Ziwg bXlfY291bnQpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBERUJVRyAqLworICAg IHggPSBteV9jb3VudDsKKyAgICBpZiAobXlfY291bnQgPD0gMCkgeworCW15X2NvdW50ID0gMDsK KwlteV9pdGVtID0gLTE7CisJZGVidWcoRjEwMSwibXlnZXRidWYgZXJybm8iLCIiLGVycm5vKTsK KyNpZmRlZiBUQ1BTT0NLRVQKKwlpZiAobmV0Y29ubiAmJiB0dG5ldCA9PSBORVRfVENQQiAmJiBl cnJubyAhPSAwKSB7CisJICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworCQlkZWJ1ZyhGMTAxLCJt eWdldGJ1ZiBUQ1AgZXJyb3IiLCIiLGVycm5vKTsKKwkJdHRjbG9zKDApOwkJLyogQ2xvc2UgdGhl IGNvbm5lY3Rpb24uICovCisJICAgIH0KKwkgICAgcmV0dXJuKC0zKTsKKwl9CisjZW5kaWYgLyog VENQU09DS0VUICovCisJaWYgKCFuZXRjb25uICYmIHhsb2NhbCAmJiBlcnJubykgeworCSAgICBp ZiAoZXJybm8gIT0gRUlOVFIpIHsKKwkJZGVidWcoRjEwMSwibXlnZXRidWYgU0VSSUFMIGVycm9y IiwiIixlcnJubyk7CisJCXggPSAtMzsKKwkJdHRjbG9zKDApOwkJLyogQ2xvc2UgdGhlIGNvbm5l Y3Rpb24uICovCisJICAgIH0KKwl9CisJcmV0dXJuKCh4IDwgMCkgPyAtMyA6IC0yKTsKKyAgICB9 CisgICAgLS1teV9jb3VudDsKKyAgICByZXR1cm4oKHVuc2lnbmVkKSgweGZmICYgbXlidWZbbXlf aXRlbSA9IDBdKSk7Cit9CisKKy8qIG15ZmlsbGJ1ZigpOgorICogU3lzdGVtLWRlcGVuZGVudCBy ZWFkKCkgaW50byBteWJ1ZltdLCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuCisgKgor ICogUmV0dXJuczogT0sgPT4gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgYWx3YXlzIG1vcmUg dGhhbiB6ZXJvLgorICogICAgICAgICAgRU9GID0+IDAKKyAqICAgICAgICAgIEVycm9yID0+IC0x LCBlcnJvciBjb2RlIGluIGVycm5vLgorICoKKyAqIElmIHRoZXJlIGlzIGlucHV0IGF2YWlsYWJs ZSBpbiB0aGUgc3lzdGVtJ3MgYnVmZmVycywgYWxsIG9mIGl0IHNob3VsZCBiZQorICogcmVhZCBp bnRvIG15YnVmW10gYW5kIHRoZSBmdW5jdGlvbiByZXR1cm4gaW1tZWRpYXRlbHkuICBJZiBubyBp bnB1dCBpcworICogYXZhaWxhYmxlLCBpdCBzaG91bGQgd2FpdCBmb3IgYSBjaGFyYWN0ZXIgdG8g YXJyaXZlLCBhbmQgcmV0dXJuIHdpdGggdGhhdAorICogb25lIGluIG15YnVmW10gYXMgc29vbiBh cyBwb3NzaWJsZS4gIEl0IG1heSB3YWl0IHNvbWV3aGF0IHBhc3QgdGhlIGZpcnN0CisgKiBjaGFy YWN0ZXIsIGJ1dCBiZSBhd2FyZSB0aGF0IGFueSBzdWNoIGRlbGF5IGxlbmd0aGVucyB0aGUgcGFj a2V0IHR1cm5hcm91bmQKKyAqIHRpbWUgZHVyaW5nIGtlcm1pdCBmaWxlIHRyYW5zZmVycy4gIFNo b3VsZCBuZXZlciByZXR1cm4gd2l0aCB6ZXJvIGNoYXJhY3RlcnMKKyAqIHVubGVzcyBFT0Ygb3Ig aXJyZWNvdmVyYWJsZSByZWFkIGVycm9yLgorICoKKyAqIENvcnJlY3QgZnVuY3Rpb25pbmcgZGVw ZW5kcyBvbiB0aGUgY29ycmVjdCB0dHkgcGFyYW1ldGVycyBiZWluZyB1c2VkLgorICogQmV0dGVy IGNvbnRyb2wgb2YgY3VycmVudCBwYXJhbWV0ZXJzIGlzIHJlcXVpcmVkIHRoYW4gbWF5IGhhdmUg YmVlbiB0aGUKKyAqIGNhc2UgaW4gb2xkZXIgS2VybWl0IHJlbGVhc2VzLiAgRm9yIGluc3RhbmNl LCBPX05ERUxBWSAob3IgZXF1aXZhbGVudCkgY2FuCisgKiBubyBsb25nZXIgYmUgc29tZXRpbWVz IG9mZiBhbmQgc29tZXRpbWVzIG9uIGxpa2UgaXQgdXNlZCB0bywgdW5sZXNzIGEKKyAqIHNwZWNp YWwgbXlmaWxsYnVmKCkgaXMgd3JpdHRlbiB0byBoYW5kbGUgdGhhdC4gIE90aGVyd2lzZSB0aGUg b3JkaW5hcnkKKyAqIG15ZmlsbGJ1ZigpcyBtYXkgdGhpbmsgdGhleSBoYXZlIGNvbWUgdG8gRU9G LgorICoKKyAqIElmIHlvdXIgc3lzdGVtIGhhcyBhIGZhY2lsaXR5IHRvIGRpcmVjdGx5IHBlcmZv cm0gdGhlIGZ1bmN0aW9uaW5nIG9mCisgKiBteWZpbGxidWYoKSwgdGhlbiB1c2UgaXQuICBJZiB0 aGUgc3lzdGVtIGNhbiB0ZWxsIHlvdSBob3cgbWFueSBjaGFyYWN0ZXJzCisgKiBhcmUgYXZhaWxh YmxlIGluIGl0cyBidWZmZXJzLCB0aGVuIHJlYWQgdGhhdCBhbW91bnQgKGJ1dCBub3QgbGVzcyB0 aGFuIDEpLgorICogSWYgdGhlIHN5c3RlbSBjYW4gcmV0dXJuIGEgc3BlY2lhbCBpbmRpY2F0aW9u IHdoZW4geW91IHRyeSB0byByZWFkIHdpdGhvdXQKKyAqIGFueXRoaW5nIHRvIHJlYWQsIHdoaWxl IGFsbG93aW5nIHlvdSB0byByZWFkIGFsbCB0aGVyZSBpcyB3aGVuIHRoZXJlIGlzCisgKiBzb21l dGhpbmcsIHlvdSBtYXkgbG9vcCB1bnRpbCB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZCwgYnV0 IHByb2JhYmx5IHRoYXQKKyAqIGlzIG5vdCBnb29kIGZvciB0aGUgc3lzdGVtIGxvYWQuCisgKi8K KworI2lmZGVmIFNWT1JQT1NJWAorCS8qIFRoaXMgaXMgZm9yIFN5c3RlbSBJSUkvViB3aXRoIFZN SU4+MCwgVlRJTUU9MCBhbmQgT19OREVMQVkgb2ZmLAorCSAqIGFuZCBDTE9DQUwgc2V0IGFueSB3 YXkgeW91IGxpa2UuICBUaGlzIHdheSwgcmVhZCgpIHdpbGwgZG8gZXhhY3RseQorCSAqIHdoYXQg aXMgcmVxdWlyZWQgYnkgbXlmaWxsYnVmKCk6IElmIHRoZXJlIGlzIGRhdGEgaW4gdGhlIGJ1ZmZl cnMKKwkgKiBvZiB0aGUgTy5TLiwgYWxsIGF2YWlsYWJsZSBkYXRhIGlzIHJlYWQgaW50byBteWJ1 ZiwgdXAgdG8gdGhlIHNpemUKKwkgKiBvZiBteWJ1Zi4gIElmIHRoZXJlIGlzIG5vbmUsIHRoZSBm aXJzdCBjaGFyYWN0ZXIgdG8gYXJyaXZlIGlzCisJICogYXdhaXRlZCBhbmQgcmV0dXJuZWQuCisJ ICovCitpbnQKK215ZmlsbGJ1ZigpIHsKKyAgICBpbnQgZmQsIG47CisjaWZkZWYgTkVUQ01ECisg ICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsKKyAgICBlbHNlCisjZW5kaWYgLyogTkVU Q01EICovCisgICAgICBmZCA9IHR0eWZkOworCisjaWZkZWYgc3hhRTUwCisgICAgLyogRnJvbSBT LiBEZXphd2EgYXQgRnVqaWZpbG0gaW4gSmFwYW4uICBJIGRvbid0IGtub3cgd2h5IHRoaXMgaXMg Ki8KKyAgICAvKiBuZWNlc3NhcnkgZm9yIHRoZSBzeGEgRTUwLCBidXQgaXQgaXMuICovCisgICAg cmV0dXJuIHJlYWQoZmQsIG15YnVmLCAyNTUpOworI2Vsc2UKKyNpZmRlZiBCRU9TT1JCRUJPWAor ICAgIHdoaWxlICgxKSB7CisjaWZkZWYgTkVUQ09OTgorICAgICAgICBpZiAobmV0Y29ubikgewor ICAgICAgICAgICAgbiA9IG5ldHhpbihzaXplb2YobXlidWYpLCAoY2hhciAqKW15YnVmKTsKKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsIkJFQk9YIFNWT1JQT1NJWCBuZXR3b3JrIG15ZmlsbGJ1ZiIs IiIsbik7CisJfQorICAgICAgICBlbHNlCisjZW5kaWYgLyogTkVUQ09OTiAqLworCSAgbiA9IHJl YWQoZmQsIG15YnVmLCBzaXplb2YobXlidWYpKTsKKwlkZWJ1ZyhGMTAxLCJCRUJPWCBTVk9SUE9T SVggbm90bmV0IG15ZmlsbGJ1ZiIsIiIsbik7CisgICAgICAgIGlmIChuID4gMCkKKwkgIHJldHVy bihuKTsKKyAgICAgICAgc25vb3plKDEwMDAuMCk7CisgICAgfQorI2Vsc2UgLyogQkVPU09SQkVC T1ggKi8KKyAgICBlcnJubyA9IDA7CisgICAgLyogZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15Zmls bGJ1ZiBjYWxsaW5nIHJlYWQoKSBmZCIsIiIsZmQpOyAqLworI2lmZGVmIElCTVgyNQorICAgIGlm IChuZXRjb25uICYmIChuZXR0eXBlID09IE5FVF9JWDI1KSkgeworCS8qIGNhbid0IHVzZSBzaXpl b2YgYmVjYXVzZSBteWJ1ZiBpcyBhIHBvaW50ZXIsIGFuZCBub3QgYW4gYXJyYXkhICovCisJbiA9 IHgyNXhpbiggTVlCVUZMRU4sIG15YnVmICk7CisgICAgfSBlbHNlCisjZW5kaWYgLyogSUJNWDI1 ICovCisKKyNpZmRlZiBDS19TU0wKKyAgICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2Fj dGl2ZV9mbGFnKSB7CisJICBpbnQgZXJyb3IsIG4gPSAwOworCSAgZGVidWcoRjEwMCwibXlmaWxs YnVmIGNhbGxpbmcgU1NMX3JlYWQoKSBmZCIsIiIsMCk7CisJICB3aGlsZSAobiA9PSAwKSB7CisJ ICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykKKyAgICAgICAgICAgICAgICBuID0gU1NMX3JlYWQo c3NsX2NvbiwgKGNoYXIgKilteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisJICAgICAgZWxzZSBpZiAo dGxzX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgICAgIG4gPSBTU0xfcmVhZCh0bHNfY29uLCAo Y2hhciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsKKyAgICAgICAgICAgICAgZWxzZQorCQlicmVh azsKKwkgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246 dGxzX2NvbixuKSkgeworCQljYXNlIFNTTF9FUlJPUl9OT05FOgorCQkgIGlmIChuID4gMCkKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKG4pOworCQkgIGlmIChuIDwgMCkKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKC0yKTsKKwkJICBtc2xlZXAoNTApOworCQkgIGJyZWFrOworCQljYXNl IFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorCQljYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisJCSAg cmV0dXJuKC0xKTsKKwkJY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKwkJICBpZiAobiAhPSAwKQor CQkgICAgcmV0dXJuKC0xKTsKKwkJY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKwkJ Y2FzZSBTU0xfRVJST1JfU1NMOgorCQljYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKwkJZGVm YXVsdDoKKwkJICB0dGNsb3MoMCk7CisJCSAgcmV0dXJuKC0zKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBDS19LRVJCRVJPUwor I2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRM T0dJTikgeworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIGtyYjRfZGVzX3JlYWQoKSBm ZCIsIiIsdHR5ZmQpOworICAgICAgICBpZiAoKG4gPSBrcmI0X2Rlc19yZWFkKHR0eWZkLChjaGFy ICopbXlidWYsc2l6ZW9mKG15YnVmKSkpIDwgMCkKKwkgIHJldHVybigtMyk7CisgICAgICAgIGVs c2UKKwkgIHJldHVybihuKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAv KiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3Rv ID09IE5QX0VLNUxPR0lOKSB7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcga3JiNV9k ZXNfcmVhZCgpIGZkIiwiIix0dHlmZCk7CisgICAgICAgIGlmICgobiA9IGtyYjVfZGVzX3JlYWQo dHR5ZmQsKGNoYXIgKilteWJ1ZixzaXplb2YobXlidWYpLDApKSA8IDApCisJICByZXR1cm4oLTMp OworICAgICAgICBlbHNlCisJICByZXR1cm4obik7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RF ICovCisjaWZkZWYgS1JCNV9VMlUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKKwlk ZWJ1ZyhGMTAxLCJteWZpbGxidWYgY2FsbGluZyBrcmI1X3UydV9yZWFkKCkgZmQiLCIiLHR0eWZk KTsKKyAgICAgICAgaWYgKChuID0ga3JiNV91MnVfcmVhZCh0dHlmZCwoY2hhciAqKW15YnVmLHNp emVvZihteWJ1ZikpKSA8IDApCisJICByZXR1cm4oLTMpOworICAgICAgICBlbHNlCisJICByZXR1 cm4obik7CisgICAgfQorI2VuZGlmIC8qIEtSQjVfVTJVICovCisjZW5kaWYgLyogS1JCNSAqLwor I2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBORVRQVFkKKyNpZmRlZiBIQVZFX1BU WVRSQVAKKyAgICAvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBIUC1VWCBwdHkgaS9vICovCisgIHB0 eXJlYWQ6CisgICAgaWYgKHR0cHR5ICYmIHB0eV90cmFwX3BlbmRpbmcodHR5ZmQpID4gMCkgewor CWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIHB0eV90cmFwX2hhbmRsZXIoKSBmZCIsIiIs dHR5ZmQpOworICAgICAgICBpZiAocHR5X3RyYXBfaGFuZGxlcih0dHlmZCkgPiAwKSB7CisgICAg ICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICByZXR1cm4oLTMpOworICAgICAgICB9Cisg ICAgfQorI2VuZGlmIC8qIEhBVkVfUFRZVFJBUCAqLworI2VuZGlmIC8qIE5FVFBUWSAqLworICAg IGRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIHJlYWQoKSBmZCIsIiIsdHR5ZmQpOworICAg IG4gPSByZWFkKGZkLCBteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisgICAgZGVidWcoRjEwMSwiU1ZP UlBPU0lYIG15ZmlsbGJ1ZiByZWFkIiwiIixuKTsKKyAgICBkZWJ1ZyhGMTAxLCJTVk9SUE9TSVgg bXlmaWxsYnVmIGVycm5vIiwiIixlcnJubyk7CisgICAgZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15 ZmlsbGJ1ZiB0dGNhcnIiLCIiLHR0Y2Fycik7CisgICAgaWYgKG4gPCAxKSB7CisjaWZkZWYgTkVU UFRZCisjaWZkZWYgSEFWRV9QVFlUUkFQCisgICAgICAgIC8qIFdoZW4gd2UgaGF2ZSBhIFBUWSB0 cmFwIGluIHBsYWNlIHRoZSBjb25uZWN0aW9uIGNhbm5vdCAqLworICAgICAgICAvKiBiZSBjbG9z ZWQgdW50aWwgdGhlIHRyYXAgcmVjZWl2ZXMgYSBjbG9zZSBpbmRpY2F0aW9uLiAgKi8KKyAgICAg ICAgaWYgKG4gPT0gMCAmJiB0dHB0eSkKKyAgICAgICAgICAgIGdvdG8gcHR5cmVhZDsKKyNlbmRp ZiAvKiBIQVZFX1BUWVRSQVAgKi8KKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICAgICAgcmV0dXJu KC0zKTsKKyAgICB9CisgICAgcmV0dXJuKG4pOworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisj ZW5kaWYgLyogc3hhRTUwICovCit9CisKKyNlbHNlIC8qIG5vdCBBVCZUIG9yIFBPU0lYICovCisK KyNpZmRlZiBhZWdpcworCS8qIFRoaXMgaXMgcXVvdGVkIGZyb20gdGhlIG9sZCBteXJlYWQoKS4g IFRoZSBzZW1hbnRpY3Mgc2VlbSB0byBiZQorCSAqIGFscmlnaHQsIGJ1dCBtYXliZSBlcnJubyB3 b3VsZCBub3QgbmVlZCB0byBiZSBzZXQgZXZlbiB3aGVuCisJICogdGhlcmUgaXMgbm8gZXJyb3I/ ICBJIGRvbid0IGtub3cgYWVnaXMuCisJICovCitpbnQKK215ZmlsbGJ1ZigpIHsKKyAgICBpbnQg Y291bnQ7CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsK KyAgICBlbHNlCisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisgICAg Y291bnQgPSBpb3NfJGdldCgoc2hvcnQpZmQsIGlvc18kY29uZF9vcHQsIG15YnVmLCAyNTZMLCBz dCk7CisgICAgZXJybm8gPSBFSU87CisgICAgaWYgKHN0LmFsbCA9PSBpb3NfJGdldF9jb25kaXRp b25hbF9mYWlsZWQpIC8qIGdldCBhdCBsZWFzdCBvbmUgKi8KKyAgICAgIGNvdW50ID0gaW9zXyRn ZXQoKHNob3J0KWZkLCAwLCBteWJ1ZiwgMUwsIHN0KTsKKyAgICBpZiAoc3QuYWxsID09IGlvc18k ZW5kX29mX2ZpbGUpCisgICAgICByZXR1cm4oLTMpOworICAgIGVsc2UgaWYgKHN0LmFsbCAhPSBz dGF0dXNfJG9rKSB7CisJZXJybm8gPSBFSU87CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcmV0 dXJuKGNvdW50ID4gMCA/IGNvdW50IDogLTMpOworfQorI2Vsc2UgLyogIWFlZ2lzICovCisKKyNp ZmRlZiBGSU9OUkVBRAorCS8qIFRoaXMgaXMgZm9yIHN5c3RlbXMgd2l0aCBGSU9OUkVBRC4gIEZJ T05SRUFEIHJldHVybnMgdGhlIG51bWJlcgorCSAqIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGZv ciByZWFkaW5nLiBJZiBub25lIGFyZSBhdmFpbGFibGUsIHdhaXQKKwkgKiB1bnRpbCBzb21ldGhp bmcgYXJyaXZlcywgb3RoZXJ3aXNlIHJldHVybiBhbGwgdGhlcmUgaXMuCisJICovCitpbnQKK215 ZmlsbGJ1ZigpIHsKKyAgICBQRUVLVFlQRSBhdmFpbCA9IDA7CisgICAgaW50IHgsIGZkOworI2lm ZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZkaW47CisgICAgZWxzZQor I2VuZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0dHlmZDsKKworI2lmZGVmIFNVTlgyNQor LyoKKyAgU3VuTGluayBYLjI1IHN1cHBvcnQgaW4gdGhpcyByb3V0aW5lIGZyb20gU3RlZmFhbiBB LiBFZWNrZWxzLCBFdXJvc3RhdCAoQ0VDKS4KKyAgRGVwZW5kcyBvbiBTdW5PUyBoYXZpbmcgRklP TlJFQUQsIG5vdCBiZWNhdXNlIHdlIHVzZSBpdCwgYnV0IGp1c3Qgc28gdGhpcworICBjb2RlIGlz IGdyb3VwZWQgY29ycmVjdGx5IHdpdGhpbiB0aGUgI2lmZGVmcy4gIExldCdzIGhvcGUgU29sYXJp cyBrZWVwcyBpdC4KKworICBXZSBjYWxsIHgyNXhpbigpIGluc3RlYWQgb2YgcmVhZCgpIHNvIHRo YXQgUS1CaXQgcGFja2V0cywgd2hpY2ggY29udGFpbgorICBYLjI1IHNlcnZpY2UtbGV2ZWwgaW5m b3JtYXRpb24gKGUuZy4gUEFEIHBhcmFtZXRlciBjaGFuZ2VzKSwgY2FuIGJlIHByb2Nlc3NlZAor ICB0cmFuc3BhcmVudGx5IHRvIHRoZSB1cHBlci1sZXZlbCBjb2RlLiAgVGhpcyBpcyBhIGJsb2Nr aW5nIHJlYWQsIGFuZCBzbworICB3ZSBkZXBlbmQgb24gaGlnaGVyLWxldmVsIGNvZGUgKHN1Y2gg YXMgdHRpbmMoKSkgdG8gc2V0IGFueSBuZWNlc3NhcnkgYWxhcm1zLgorKi8KKyAgICBleHRlcm4g aW50IG5ldHR5cGU7CisgICAgaWYgKG5ldGNvbm4gJiYgbmV0dHlwZSA9PSBORVRfU1gyNSkgewor CXdoaWxlICgoeCA9IHgyNXhpbihzaXplb2YoeDI1YnVmKSwgeDI1YnVmKSkgPCAxKSA7CisJcmV0 dXJuKHggLSAxKTsJICAgICAgICAvKiAiLTEiIGNvbXBlbnNhdGVzIGZvciBleHRyYSBzdGF0dXMg Ynl0ZSAqLworICAgIH0KKyNlbmRpZiAvKiBTVU5YMjUgKi8KKworI2lmZGVmIENLX1NTTAorICAg IGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIGludCBl cnJvciwgbiA9IDA7CisgICAgICAgIHdoaWxlIChuID09IDApIHsKKyAgICAgICAgICAgIGlmIChz c2xfYWN0aXZlX2ZsYWcpCisJICAgICAgbiA9IFNTTF9yZWFkKHNzbF9jb24sIChjaGFyICopbXli dWYsIHNpemVvZihteWJ1ZikpOworICAgICAgICAgICAgZWxzZQorCSAgICAgIG4gPSBTU0xfcmVh ZCh0bHNfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2YobXlidWYpKTsKKyAgICAgICAgICAgIHN3 aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLG4pKSB7 CisJICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgICAgICBpZiAobiA+IDAp CisJCSAgcmV0dXJuKG4pOworICAgICAgICAgICAgICAgIGlmIChuIDwgMCkKKwkJICByZXR1cm4o LTIpOworICAgICAgICAgICAgICAgIG1zbGVlcCg1MCk7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisJICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKwkgICAgICBjYXNlIFNTTF9FUlJP Ul9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKwkgICAgICBjYXNlIFNT TF9FUlJPUl9TWVNDQUxMOgorCQlpZiAobiAhPSAwKQorCQkgIHJldHVybigtMSk7CisJICAgICAg Y2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9T U0w6CisJICAgICAgY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisJICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNp ZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0 dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworICAgICAgICBpZiAoKHggPSBrcmI0X2Rlc19yZWFk KHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCisJICByZXR1cm4oLTEpOworICAgICAg ICBlbHNlCisJICByZXR1cm4oeCk7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5k aWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5w cm90byA9PSBOUF9FSzVMT0dJTikgeworICAgICAgICBpZiAoKHggPSBrcmI1X2Rlc19yZWFkKHR0 eWZkLG15YnVmLHNpemVvZihteWJ1ZiksMCkpIDwgMCkKKwkgIHJldHVybigtMSk7CisgICAgICAg IGVsc2UKKwkgIHJldHVybih4KTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRl ZiBLUkI1X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAgICBpZiAo KHggPSBrcmI1X3UydV9yZWFkKHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCisJICBy ZXR1cm4oLTEpOworICAgICAgICBlbHNlCisJICByZXR1cm4oeCk7CisgICAgfQorI2VuZGlmIC8q IEtSQjVfVTJVICovCisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICov CisKKyAgICBlcnJubyA9IDA7CisgICAgZGVidWcoRjEwMSwibXlmaWxsYnVmIGNhbGxpbmcgRklP TlJFQUQgaW9jdGwiLCIiLHhsb2NhbCk7CisgICAgeCA9IGlvY3RsKGZkLCBGSU9OUkVBRCwgJmF2 YWlsKTsKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAxLCJteWZp bGxidWYgRklPTlJFQUQiLCIiLHgpOworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBGSU9OUkVBRCBh dmFpbCIsIiIsYXZhaWwpOworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBGSU9OUkVBRCBlcnJubyIs IiIsZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIGlmICh4IDwgMCB8fCBh dmFpbCA9PSAwKQorICAgICAgYXZhaWwgPSAxOworCisgICAgaWYgKGF2YWlsID4gTVlCVUZMRU4p CisgICAgICBhdmFpbCA9IE1ZQlVGTEVOOworCisgICAgZXJybm8gPSAwOworCisgICAgeCA9IHJl YWQoZmQsIG15YnVmLCAoaW50KSBhdmFpbCk7CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9n KSB7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIGF2YWlsIiwiIixhdmFpbCk7CisJZGVidWcoRjEw MSwibXlmaWxsYnVmIHJlYWQiLCIiLHgpOworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiByZWFkIGVy cm5vIiwiIixlcnJubyk7CisgICAgICAgIGlmICh4ID4gMCkKKwkgIGNraGV4ZHVtcCgibXlmaWxs YnVmIG15YnVmIixteWJ1Zix4KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBpZiAo eCA8IDEpIHggPSAtMzsJCQkvKiByZWFkIDAgPT0gY29ubmVjdGlvbiBsb3NzICovCisgICAgcmV0 dXJuKHgpOworfQorCisjZWxzZSAvKiAhRklPTlJFQUQgKi8KKy8qIEFkZCBvdGhlciBzeXN0ZW1z IGhlcmUsIGJldHdlZW4gI2lmZGVmIGFuZCAjZWxzZSwgZS5nLiBORVRDT05OLiAqLworLyogV2hl biB0aGVyZSBpcyBubyBvdGhlciBwb3NzaWJpbGl0eSwgcmVhZCAxIGNoYXJhY3RlciBhdCBhIHRp bWUuICovCitpbnQKK215ZmlsbGJ1ZigpIHsKKyAgICBpbnQgeDsKKworI2lmZGVmIENLX1NTTAor ICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIGlu dCBlcnJvciwgbiA9IDA7CisgICAgICAgIHdoaWxlIChuID09IDApIHsKKyAgICAgICAgICAgIGlm IChzc2xfYWN0aXZlX2ZsYWcpCisJICAgICAgbiA9IFNTTF9yZWFkKHNzbF9jb24sIChjaGFyICop bXlidWYsIHNpemVvZihteWJ1ZikpOworICAgICAgICAgICAgZWxzZQorCSAgICAgIGNvdW50ID0g U1NMX3JlYWQodGxzX2NvbiwgKGNoYXIgKilteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisgICAgICAg ICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2Nv bixuKSkgeworCSAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgaWYg KG4gPiAwKQorCQkgIHJldHVybihuKTsKKyAgICAgICAgICAgICAgICBpZiAobiA8IDApCisJCSAg cmV0dXJuKC0yKTsKKyAgICAgICAgICAgICAgICBtc2xlZXAoNTApOworICAgICAgICAgICAgICAg IGJyZWFrOworCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisJICAgICAgY2FzZSBT U0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisJICAgICAg Y2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKwkJaWYgKG4gIT0gMCkKKwkJICByZXR1cm4oLTEpOwor CSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisJICAgICAgY2FzZSBTU0xf RVJST1JfU1NMOgorCSAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorCSAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgICAgIHJldHVy bigtMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfU1NM ICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI0CisjaWZkZWYgUkxPR0NPREUKKyAg ICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKKyAgICAgICAgaWYgKChsZW4gPSBrcmI0 X2Rlc19yZWFkKHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCisJICByZXR1cm4oLTEp OworICAgICAgICBlbHNlCisJICByZXR1cm4obGVuKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NP REUgKi8KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisg ICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgIGlmICgobGVuID0ga3Ji NV9kZXNfcmVhZCh0dHlmZCxteWJ1ZixzaXplb2YobXlidWYpLDApKSA8IDApCisJICByZXR1cm4o LTEpOworICAgICAgICBlbHNlCisJICByZXR1cm4obGVuKTsKKyAgICB9CisjZW5kaWYgLyogUkxP R0NPREUgKi8KKyNpZmRlZiBLUkI1X1UyVQorICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkg eworICAgICAgICBpZiAoKGxlbiA9IGtyYjVfdTJ1X3JlYWQodHR5ZmQsbXlidWYsc2l6ZW9mKG15 YnVmKSkpIDwgMCkKKwkgIHJldHVybigtMSk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybihsZW4p OworICAgIH0KKyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAg ICAgIGZkID0gZmRpbjsKKyAgICBlbHNlCisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9 IHR0eWZkOworICAgIHggPSByZWFkKGZkLCBteWJ1ZiwgMSk7CisgICAgcmV0dXJuKHggPiAwID8g eCA6IC0zKTsKK30KKworI2VuZGlmIC8qICFGSU9OUkVBRCAqLworI2VuZGlmIC8qICFhZWdpcyAq LworI2VuZGlmIC8qICFBVFRTViAqLworCisjZW5kaWYgLyogTVlSRUFEICovCisKKy8qICBUIFQg XyBUIE4gTyBQIFQgIC0tICBIYW5kbGUgVGVsbmV0IG5lZ290aW9ucyBpbiBpbmNvbWluZyBkYXRh ICovCisvKgorICBDYWxsIHdpdGggdGhlIElBQyB0aGF0IHdhcyBlbmNvdW50ZXJlZC4KKyAgUmV0 dXJuczoKKyAgIC0zOiBJZiBjb25uZWN0aW9uIGhhcyBkcm9wcGVkIG9yIGdvbmUgYmFkLgorICAg LTI6IE9uIFRlbG5ldCBwcm90b2NvbCBlcnJvciByZXN1bHRpbmcgaW4gaW5jb25zaXN0ZW50IHN0 YXRlcy4KKyAgICAwOiBJZiBuZWdvdGlhdGlvbiBPSyBhbmQgY2FsbGVyIGhhcyBub3RoaW5nIHRv IGRvLgorICAgIDE6IElmIHBhY2tldCBzdGFydCBjaGFyYWN0ZXIgaGFzIGNoYW5nZWQgKG5ldyB2 YWx1ZSBpcyBpbiBnbG9iYWwgc3RjaHIpLgorICAyNTU6IElmIHRoZXJlIHdhcyBhIHF1b3RlZCBJ QUMgYXMgZGF0YS4KKyAgIG9yOiBOb3QgYXQgYWxsIGlmIHdlIGdvdCBhIGxlZ2l0aW1hdGUgVGVs bmV0IExvZ291dCByZXF1ZXN0LgorKi8KKyNpZmRlZiBUQ1BTT0NLRVQKK3N0YXRpYyBpbnQKK3R0 X3Rub3B0KG4pIGludCBuOyB7CQkJLyogSGFuZGxlIFRlbG5ldCBvcHRpb25zICovCisgICAgLyog SW4gY2FzZSBjYWxsZXIgZGlkIG5vdCBhbHJlYWR5IGNoZWNrIHRoZXNlIGNvbmRpdGlvbnMuLi4g ICovCisgICAgaWYgKG4gPT0gSUFDICYmCisJKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxO RVQoKSkgfHwKKwkgKCF4bG9jYWwgJiYgc3N0ZWxuZXQpKSkgeworCWV4dGVybiBpbnQgc2VydmVy OworCWludCB0eCA9IDA7CisJZGVidWcoRjEwMCwidHRpbmwgY2FsbGluZyB0bl9kb29wKCkiLCIi LDApOworCXR4ID0gdG5fZG9vcCgoQ0hBUikobiAmIDB4ZmYpLGR1cGxleCx0dGluYyk7CisJZGVi dWcoRjExMSwidHRpbmwgdG5fZG9vcCgpIHJldHVybmVkIiwidHgiLHR4KTsKKwlzd2l0Y2ggKHR4 KSB7CisJICBjYXNlIDA6CisJICAgIHJldHVybigwKTsKKwkgIGNhc2UgLTE6CQkJLyogSS9PIGVy cm9yICovCisJICAgIHR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aW1lciAqLworCSAgICByZXR1 cm4oLTMpOworICAgICAgICAgIGNhc2UgLTI6CQkJLyogQ29ubmVjdGlvbiBmYWlsZWQuICovCisg ICAgICAgICAgY2FzZSAtMzoKKwkgICAgdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyICov CisJICAgIHR0Y2xvcygwKTsKKwkgICAgcmV0dXJuKC0zKTsKKwkgIGNhc2UgMToJCQkvKiBFQ0hP IGNoYW5nZSAqLworCSAgICBkdXBsZXggPSAxOworCSAgICByZXR1cm4oMCk7CisJICBjYXNlIDI6 CQkJLyogRUNITyBjaGFuZ2UgKi8KKwkgICAgZHVwbGV4ID0gMDsKKwkgICAgcmV0dXJuKDApOwor CSAgY2FzZSAzOgkJCS8qIFF1b3RlZCBJQUMgKi8KKwkgICAgbiA9IDI1NTsKKwkgICAgcmV0dXJu KCh1bnNpZ25lZCkyNTUpOworI2lmZGVmIElLU19PUFRJT04KKwkgIGNhc2UgNDogeworCSAgICAg IGlmIChURUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgJiYgc2VydmVyCisj aWZkZWYgSUtTRAorCQkgICYmICFpbnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8KKwkJICApIHsJ CQkvKiBSZW1vdGUgaW4gU2VydmVyIG1vZGUgKi8KKwkJICB0dGltb2ZmKCk7CQkvKiBUdXJuIG9m ZiB0aW1lciAqLworCQkgIGRlYnVnKEYxMDAsInVfc3RhcnQgYW5kICFpbnNlcnZlciIsIiIsMCk7 CisJCSAgcmV0dXJuKC0yKTsJCS8qIEVuZCBzZXJ2ZXIgbW9kZSAqLworCSAgICAgIH0gZWxzZSBp ZiAoIVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQgJiYKKwkJCSBzZXJ2 ZXIKKwkJCSApIHsJCS8qIEknbSBubyBsb25nZXIgaW4gU2VydmVyIE1vZGUgKi8KKwkJICBkZWJ1 ZyhGMTAwLCJtZV9zdGFydCBhbmQgc2VydmVyIiwiIiwwKTsKKwkJICB0dGltb2ZmKCk7CisJCSAg cmV0dXJuKC0yKTsKKwkgICAgICB9CisJICAgICAgcmV0dXJuKDApOworCSAgfQorCSAgY2FzZSA1 OiB7CQkJLyogU3RhcnQgY2hhcmFjdGVyIGNoYW5nZSAqLworCSAgICAgIC8qIGV4dGVybiBDSEFS IHN0Y2hyOyAqLworCSAgICAgIC8qIHN0YXJ0ID0gc3RjaHI7ICovCisJICAgICAgcmV0dXJuKDEp OworCSAgfQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKwkgIGNhc2UgNjoJCQkvKiBSZW1vdGUg TG9nb3V0ICovCisJICAgIHR0aW1vZmYoKTsKKwkgICAgdHRjbG9zKDApOworI2lmZGVmIElLU0QK KwkgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKKwkgICAgICBkb2V4aXQoR09PRF9FWElULDAp OworCSAgICBlbHNlCisjZW5kaWYgLyogSUtTRCAqLworCSAgICAgIHJldHVybigtMik7CisJICBk ZWZhdWx0OgorCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0gZWxzZQorICAgICAgcmV0dXJuKDAp OworfQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisvKiAgVCBUIEYgTCBVIEkgIC0tICBGbHVz aCB0dHkgaW5wdXQgYnVmZmVyICovCisKK3ZvaWQKK3R0Zmx1eCgpIHsJCQkJLyogQnV0IGZpcnN0 Li4uICovCisjaWZkZWYgTVlSRUFECisvKgorICBGbHVzaCBpbnRlcm5hbCBNWVJFQUQgYnVmZmVy LgorKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpbnQgZG90bm9wdHMsIHg7CisgICAgZG90bm9w dHMgPSAoKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkgfHwKKwkJICgheGxvY2Fs ICYmIHNzdGVsbmV0KSkpOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgIGRlYnVnKEYxMDEs InR0Zmx1eCBteV9jb3VudCIsIiIsbXlfY291bnQpOworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGlm IChkb3Rub3B0cykgeworCUNIQVIgY2ggPSAnXDAnOworICAgICAgICB3aGlsZSAobXlfY291bnQg PiAwKSB7CisJICAgIGNoID0gbXlyZWFkKCk7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAg ICAgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSkKKwkgICAgICBja190bl9kZWNy eXB0KChjaGFyICopJmNoLDEpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAg ICAgIGlmIChjaCA9PSBJQUMpCisJICAgICAgeCA9IHR0X3Rub3B0KGNoKTsKKyAgICAgICAgfQor ICAgIH0gZWxzZQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiBt eV9jb3VudCA+IDApCisgICAgICBja190bl9kZWNyeXB0KCZteWJ1ZltteV9pdGVtKzFdLG15X2Nv dW50KTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIG15X2NvdW50ID0gMDsJCQkvKiBSZXNldCBjb3VudCB0byB6ZXJvICovCisgICAgbXlfaXRl bSA9IC0xOwkJCS8qIEFuZCBidWZmZXIgaW5kZXggdG8gLTEgKi8KKyNlbmRpZiAvKiBNWVJFQUQg Ki8KK30KKworaW50Cit0dGZsdWkoKSB7CisgICAgaW50IG4sIGZkOworI2lmZGVmIFRDUFNPQ0tF VAorICAgIGludCBkb3Rub3B0czsKKyAgICBkb3Rub3B0cyA9ICgoKHhsb2NhbCAmJiBuZXRjb25u ICYmIElTX1RFTE5FVCgpKSB8fAorCQkgKCF4bG9jYWwgJiYgc3N0ZWxuZXQpKSk7CisjZW5kaWYg LyogVENQU09DS0VUICovCisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAg ZmQgPSBmZGluOworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5 ZmQ7CisKKyNpZmRlZiBUVExFQlVGCisgICAgdHRwdXNoID0gLTE7CQkJLyogQ2xlYXIgdGhlIHBl ZWstYWhlYWQgY2hhciAqLworICAgIHdoaWxlIChsZV9kYXRhICYmIChsZV9pbmJ1ZigpID4gMCkp IHsKKyAgICAgICAgQ0hBUiBjaCA9ICdcMCc7CisgICAgICAgIGlmIChsZV9nZXRjaGFyKCZjaCkg PiAwKSB7CS8qIENsZWFyIGFueSBtb3JlLi4uICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0 dGZsdWkgbGVfaW5idWYgY2giLCIiLGNoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBU VExFQlVGICovCisgICAgZGVidWcoRjEwMSwidHRmbHVpIHR0cGlwZSIsIiIsdHRwaXBlKTsKKwor I2lmZGVmIE1ZUkVBRAorLyoKKyAgRmx1c2ggaW50ZXJuYWwgTVlSRUFEIGJ1ZmZlciAqTkVYVCos IGluIGFsbCBjYXNlcy4KKyovCisgICAgdHRmbHV4KCk7CisjZW5kaWYgLyogTVlSRUFEICovCisK KyNpZmRlZiBORVRDT05OCisvKiBOZXR3b3JrIGZsdXNoIGlzIGRvbmUgc3BlY2lhbGx5LCBpbiB0 aGUgbmV0d29yayBzdXBwb3J0IG1vZHVsZS4gKi8KKyAgICBpZiAoKG5ldGNvbm4gfHwgc3N0ZWxu ZXQpICYmICF0dHBpcGUgJiYgIXR0cHR5KSB7CisJZGVidWcoRjEwMCwidHRmbHVpIG5ldGZsdWki LCIiLDApOworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBUTl9DT01QT1JUCisJaWYgKGlzdG5jb21w b3J0KCkpCisgICAgICAgICAgICB0bmNfc2VuZF9wdXJnZV9kYXRhKFROQ19QVVJHRV9SRUNFSVZF KTsKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCXJldHVy bihuZXRmbHVpKCkpOworICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyAgICBkZWJ1ZyhG MTAxLCJ0dGZsdWkgdHR5ZmQiLCIiLHR0eWZkKTsgLyogTm90IG5ldHdvcmsgKi8KKyAgICBpZiAo dHR5ZmQgPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKworI2lmZGVmIGFlZ2lzCisgICAgc2lvXyRj b250cm9sKChzaG9ydCl5ZmQsIHNpb18kZmx1c2hfaW4sIHRydWUsIHN0KTsKKyAgICBpZiAoc3Qu YWxsICE9IHN0YXR1c18kb2spIHsKKwlmcHJpbnRmKHN0ZGVyciwgImZsdXNoIGZhaWxlZDogIik7 IGVycm9yXyRwcmludChzdCk7CisgICAgfSBlbHNlIHsgICAgICAvKiBzb21ldGltZXMgdGhlIGZs dXNoIGRvZXNuJ3Qgd29yayAqLworICAgICAgICBmb3IgKDs7KSB7CisJICAgIGNoYXIgYnVmWzI1 Nl07CisgICAgICAgICAgICAvKiBlYXQgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkbid0 IGJlIGF2YWlsYWJsZSAqLworICAgICAgICAgICAgaW9zXyRnZXQoKHNob3J0KWZkLCBpb3NfJGNv bmRfb3B0LCBidWYsIDI1NkwsIHN0KTsgLyogKHZvaWQpICovCisgICAgICAgICAgICBpZiAoc3Qu YWxsID09IGlvc18kZ2V0X2NvbmRpdGlvbmFsX2ZhaWxlZCkgYnJlYWs7CisgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgImZsdXNoIGZhaWxlZCgyKTogIik7IGVycm9yXyRwcmludChzdCk7Cisg ICAgICAgIH0KKyAgICB9CisjZWxzZQorI2lmZGVmIEJTRDQ0CQkJCS8qIDQuNCBCU0QgKi8KKyAg ICBuID0gRlJFQUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGVjaWZ5IHJlYWQgcXVl dWUgKi8KKyAgICBkZWJ1ZyhGMTAwLCJ0dGZsdWkgQlNENDQiLCIiLDApOworICAgIGlvY3RsKGZk LFRJT0NGTFVTSCwmbik7CisjZWxzZQorI2lmZGVmIFBsYW45CisjdW5kZWYgUE9TSVgJCQkJLyog VWggb2guLi4gKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworI2lmZGVmIFBPU0lYCQkJCS8qIFBPU0lY ICovCisgICAgZGVidWcoRjEwMCwidHRmbHVpIFBPU0lYIiwiIiwwKTsKKyAgICB0Y2ZsdXNoKGZk LFRDSUZMVVNIKTsKKyNlbHNlCisjaWZkZWYgQVRUU1YJCQkJLyogU3lzdGVtIFYgKi8KKyNpZm5k ZWYgVlhWRQorICAgIGRlYnVnKEYxMDAsInR0Zmx1aSBBVFRTViIsIiIsMCk7CisgICAgaW9jdGwo ZmQsVENGTFNILDApOworI2VuZGlmIC8qIFZYVkUgKi8KKyNlbHNlCQkJCQkvKiBOb3QgQlNENDQs IFBPU0lYLCBvciBTeXMgViAqLworI2lmZGVmIFRJT0NGTFVTSAkJCS8qIFRob3NlIHdpdGggVElP Q0ZMVVNIIGRlZmluZWQgKi8KKyNpZmRlZiBBTllCU0QJCQkJLyogQmVya2VsZXkgKi8KKyAgICBu ID0gRlJFQUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGVjaWZ5IHJlYWQgcXVldWUg Ki8KKyAgICBkZWJ1ZyhGMTAwLCJ0dGZsdWkgVElPQ0ZMVVNIIEFOWUJTRCIsIiIsMCk7CisgICAg aW9jdGwoZmQsVElPQ0ZMVVNILCZuKTsKKyNlbHNlCQkJCQkvKiBPdGhlcnMgKFY3LCBldGMpICov CisgICAgZGVidWcoRjEwMCwidHRmbHVpIFRJT0NGTFVTSCIsIiIsMCk7CisgICAgaW9jdGwoZmQs VElPQ0ZMVVNILDApOworI2VuZGlmIC8qIEFOWUJTRCAqLworI2Vsc2UJCQkJCS8qIEFsbCBvdGhl cnMuLi4gKi8KKy8qCisgIE5vIHN5c3RlbSBjYWxsICh0aGF0IHdlIGtub3cgYWJvdXQpIGZvciBp bnB1dCBidWZmZXIgZmx1c2hpbmcuCisgIFNvIHNlZSBob3cgbWFueSB0aGVyZSBhcmUgYW5kIHJl YWQgdGhlbSBpbiBhIGxvb3AsIHVzaW5nIHR0aW5jKCkuCisgIHR0aW5jKCkgaXMgYnVmZmVyZWQs IHNvIHdlJ3JlIG5vdCBnZXR0aW5nIGNoYXJnZWQgd2l0aCBhIHN5c3RlbSBjYWxsCisgIHBlciBj aGFyYWN0ZXIsIGp1c3QgYSBmdW5jdGlvbiBjYWxsLgorKi8KKyAgICBpZiAoKG4gPSB0dGNoaygp KSA+IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dGZsdWkgcmVhZCBsb29wIiwiIixuKTsKKwl3aGlsZSAo KG4tLSkgJiYgdHRpbmMoMCkgPiAwKSA7CisgICAgfQorI2VuZGlmIC8qIFRJT0NGTFVTSCAqLwor I2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNpZmRlZiBQbGFuOQorI2Rl ZmluZSBQT1NJWAorI2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRp ZiAvKiBhZWdpcyAqLworICAgIHJldHVybigwKTsKK30KKworaW50Cit0dGZsdW8oKSB7CQkJCS8q IEZsdXNoIG91dHB1dCBidWZmZXIgKi8KKyAgICBpbnQgZmQ7CisjaWZkZWYgTkVUQ01ECisgICAg aWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRvdXQ7CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENN RCAqLworICAgICAgZmQgPSB0dHlmZDsKKworI2lmZGVmIFBsYW45CisgICAgcmV0dXJuIDA7Cisj ZWxzZQorI2lmZGVmIFBPU0lYCisgICAgcmV0dXJuKHRjZmx1c2goZmQsVENPRkxVU0gpKTsKKyNl bHNlCisjaWZkZWYgT1hPUworICAgIHJldHVybihpb2N0bChmZCxUQ0ZMU0gsMSkpOworI2Vsc2UK KyAgICByZXR1cm4oMCk7CQkJCS8qIEFsbCBvdGhlcnMsIG5vdGhpbmcgKi8KKyNlbmRpZiAvKiBP WE9TICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiBJ bnRlcnJ1cHQgRnVuY3Rpb25zICovCisKKy8qIFNldCB1cCB0ZXJtaW5hbCBpbnRlcnJ1cHRzIG9u IGNvbnNvbGUgdGVybWluYWwgKi8KKworI2lmbmRlZiBGSU9OUkVBRAkJCS8qIFdlIGRvbid0IG5l ZWQgZXNjdHJwKCkgKi8KKyNpZm5kZWYgU0VMRUNUCQkJCS8qIGlmIHdlIGhhdmUgYW55IG9mIHRo ZXNlLi4uICovCisjaWZuZGVmIENLX1BPTEwKKyNpZm5kZWYgUkRDSEsKKworI2lmbmRlZiBPWE9T CisjaWZkZWYgU1ZPUlBPU0lYCitTSUdUWVAKK2VzY3RycChmb28pIGludCBmb287IHsJCQkvKiB0 cmFwIGNvbnNvbGUgZXNjYXBlcyAoXlwpICovCisgICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7 ICAgICAgICAgICAgLyogaWdub3JlIHVudGlsIHRyYXBwZWQgKi8KKyAgICBjb25lc2MgPSAxOwor ICAgIGRlYnVnKEYxMDEsImVzY3RycCBjYXVnaHQgU0lHUVVJVCIsIiIsY29uZXNjKTsKK30KKyNl bmRpZiAvKiBTVk9SUE9TSVggKi8KKyNlbmRpZiAvKiBPWE9TICovCisKKyNpZmRlZiBWNworI2lm bmRlZiBNSU5JWDIKK1NJR1RZUAorZXNjdHJwKGZvbykgaW50IGZvbzsgewkJCS8qIHRyYXAgY29u c29sZSBlc2NhcGVzICheXCkgKi8KKyAgICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAg ICAgICAvKiBpZ25vcmUgdW50aWwgdHJhcHBlZCAqLworICAgIGNvbmVzYyA9IDE7CisgICAgZGVi dWcoRjEwMSwiZXNjdHJwIGNhdWdodCBTSUdRVUlUIiwiIixjb25lc2MpOworfQorI2VuZGlmIC8q IE1JTklYMiAqLworI2VuZGlmIC8qIFY3ICovCisKKyNpZmRlZiBDNzAKK1NJR1RZUAorZXNjdHJw KGZvbykgaW50IGZvbzsgewkJCS8qIHRyYXAgY29uc29sZSBlc2NhcGVzICheXCkgKi8KKyAgICBj b25lc2MgPSAxOworICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAgICAgICAgIC8qIGln bm9yZSB1bnRpbCB0cmFwcGVkICovCit9CisjZW5kaWYgLyogQzcwICovCisKKyNlbmRpZiAvKiBS RENISyAqLworI2VuZGlmIC8qIENLX1BPTEwgKi8KKyNlbmRpZiAvKiBTRUxFQ1QgKi8KKyNlbmRp ZiAvKiBGSU9OUkVBRCAqLworCisvKiAgQyBPIE4gQiBHIFQgIC0tICBCYWNrZ3JvdW5kIFRlc3Qg ICovCisKK3N0YXRpYyBpbnQgamMgPSAwOwkJCS8qIDAgPSBubyBqb2IgY29udHJvbCAqLworCisv KgorICBDYWxsIHdpdGggZmxhZyA9PSAxIHRvIHByZXZlbnQgc2lnbmFsIHRlc3QsIHdoaWNoIGNh biBub3QgYmUgZXhwZWN0ZWQKKyAgdG8gd29yayBkdXJpbmcgZmlsZSB0cmFuc2Zlciwgd2hlbiBT SUdJTlQgcHJvYmFibHkgKmlzKiBzZXQgdG8gU0lHX0lHTi4KKworICBDYWxsIHdpdGggZmxhZyA9 PSAwIHRvIHVzZSB0aGUgc2lnbmFsIHRlc3QsIGJ1dCBvbmx5IGlmIHRoZSBwcm9jZXNzLWdyb3Vw CisgIHRlc3QgZmFpbHMsIGFzIGl0IGRvZXMgb24gc29tZSBVTklYIHN5c3RlbXMsIHdoZXJlIGdl dHBncnAoKSBpcyBidWdneSwKKyAgcmVxdWlyZXMgYW4gYXJndW1lbnQgd2hlbiB0aGUgbWFuIHBh Z2Ugc2F5cyBpdCBkb2Vzbid0LCBvciB2aWNlIHZlcnNhLgorCisgIElmIGZsYWcgPT0gMCBhbmQg dGhlIHByb2Nlc3MtZ3JvdXAgdGVzdCBmYWlscywgdGhlbiB3ZSBkZXRlcm1pbmUgYmFja2dyb3Vu ZAorICBzdGF0dXMgc2ltcGx5IChidXQgbm90IG5lY2Vzc2FyaWx5IHJlbGlhYmx5KSBmcm9tIGlz YXR0eSgpLgorCisgIGNvbmJndCgpIHNldHMgdGhlIGdsb2JhbCBiYWNrZ3JkID0gMSBpZiB3ZSBh cHBlYXIgdG8gYmUgaW4gdGhlIGJhY2tncm91bmQsCisgIGFuZCB0byAwIGlmIHdlIHNlZW0gdG8g YmUgaW4gdGhlIGZvcmVncm91bmQuICBjb25iZ3QoKSBpcyBoaWdobHkgcHJvbmUgdG8KKyAgbWlz YmVoYXZpb3IuCisqLworVk9JRAorY29uYmd0KGZsYWcpIGludCBmbGFnOyB7CisgICAgaW50IHgg PSAtMSwJCQkJLyogcHJvY2VzcyBncm91cCBvciBTSUdJTlQgdGVzdCAqLworICAgICAgICB5ID0g MDsJCQkJLyogaXNhdHR5KCkgdGVzdCAqLworLyoKKyAgQ2hlY2sgZm9yIGJhY2tncm91bmQgb3Bl cmF0aW9uLCBldmVuIGlmIG5vdCBydW5uaW5nIG9uIHJlYWwgdHR5LCBzbyB0aGF0CisgIGJhY2tn cm91bmQgZmxhZyBjYW4gYmUgc2V0IGNvcnJlY3RseS4gIElmIGJhY2tncm91bmQgc3RhdHVzIGlz IGRldGVjdGVkLAorICB0aGVuIEtlcm1pdCB3aWxsIG5vdCBpc3N1ZSBpdHMgaW50ZXJhY3RpdmUg cHJvbXB0IG9yIG1vc3QgbWVzc2FnZXMuCisgIElmIHlvdXIgcHJvbXB0IGdvZXMgYXdheSwgeW91 IGNhbiBibGFtZSAoYW5kIGZpeD8pIHRoaXMgZnVuY3Rpb24uCisqLworCisvKiBVc2UgcHJvY2Vz cy1ncm91cCB0ZXN0IGlmIHBvc3NpYmxlLiAqLworCisjaWZkZWYgUE9TSVgJCQkJLyogV2UgY2Fu IGRvIGl0IGluIFBPU0lYICovCisjZGVmaW5lIFBHUk9VUF9UCisjZWxzZQorI2lmZGVmIEJTRDQJ CQkJLyogYW5kIGluIEJTRCA0LnguICovCisjZGVmaW5lIFBHUk9VUF9UCisjZWxzZQorI2lmZGVm IEhQVVhKT0JDVEwJCQkvKiBhbmQgaW4gbW9zdCBIUC1VWCdzICovCisjZGVmaW5lIFBHUk9VUF9U CisjZWxzZQorI2lmZGVmIFRJT0NHUEdSUAkJCS8qIGFuZCBhbnlwbGFjZSB0aGF0IGhhcyB0aGlz IGlvY3RsLiAqLworI2RlZmluZSBQR1JPVVBfVAorI2VuZGlmIC8qIFRJT0NHUEdSUCAqLworI2Vu ZGlmIC8qIEhQVVhKT0JDVEwgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogUE9TSVgg Ki8KKworI2lmZGVmIE1JUFMJCQkJLyogRXhjZXB0IGlmIGl0IGRvZXNuJ3Qgd29yay4uLiAqLwor I3VuZGVmIFBHUk9VUF9UCisjZW5kaWYgLyogTUlQUyAqLworCisjaWZkZWYgTUlOSVgKKyN1bmRl ZiBQR1JPVVBfVAorI2VuZGlmCS8qIE1JTklYICovCisKKyNpZmRlZiBQR1JPVVBfVAorLyoKKyAg U2VtaS1yZWxpYWJsZSBwcm9jZXNzLWdyb3VwIHRlc3QuICBDaGVjayB3aGV0aGVyIHRoaXMgcHJv Y2VzcydzIGdyb3VwIGlzCisgIHRoZSBzYW1lIGFzIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCdz IHByb2Nlc3MgZ3JvdXAuICBUaGlzIHdvcmtzIGlmIHRoZQorICBnZXRwZ3JwKCkgY2FsbCBkb2Vz bid0IGxpZSAoYXMgaXQgZG9lcyBpbiB0aGUgU1VOT1MgU3lzdGVtIFYgZW52aXJvbm1lbnQpLgor Ki8KKyAgICBQSURfVCBteXBncnAgPSAoUElEX1QpMDsJCS8qIEtlcm1pdCdzIHByb2Nlc3MgZ3Jv dXAgKi8KKyAgICBQSURfVCBjdHBncnAgPSAoUElEX1QpMDsJCS8qIFRoZSB0ZXJtaW5hbCdzIHBy b2Nlc3MgZ3JvdXAgKi8KKyNpZm5kZWYgX1BPU0lYX1NPVVJDRQorLyoKKyAgVGhlIGdldHBncnAo KSBwcm90b3R5cGUgaXMgb2J0YWluZWQgZnJvbSBzeXN0ZW0gaGVhZGVyIGZpbGVzIGZvciBQT1NJ WAorICBhbmQgU3lzIFYgUjQgY29tcGlsYXRpb25zLiAgT3RoZXIgc3lzdGVtcywgd2hvIGtub3dz LiAgU29tZSBjb21wbGFpbiBhYm91dAorICBhIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbiBoZXJlLCBv dGhlcnMgZG9uJ3QsIHNvIGl0J3Mgc2FmZXIgdG8gbGVhdmUgaXQgaW4KKyAgaWYgd2UgZG9uJ3Qg a25vdyBmb3IgY2VydGFpbi4KKyovCisjaWZuZGVmIFNWUjQKKyNpZm5kZWYgUFMyQUlYMTAKKyNp Zm5kZWYgSFBVWDkKKyAgICBleHRlcm4gUElEX1QgZ2V0cGdycCgpOworI2VuZGlmIC8qIEhQVVg5 ICovCisjZW5kaWYgLyogUFMyQUlYMTAgKi8KKyNlbmRpZiAvKiBTVlI0ICovCisjZW5kaWYgLyog X1BPU0lYX1NPVVJDRSAqLworCisvKiBHZXQgbXkgcHJvY2VzcyBncm91cC4gKi8KKworI2lmZGVm IFNWUjMgLyogTWF5YmUgdGhpcyBzaG91bGQgYmUgQVRUU1Y/ICovCisvKiBUaGlzIGZ1bmN0aW9u IGlzIG5vdCBkZXNjcmliZWQgaW4gU1ZJRCBSMiAqLworICAgIG15cGdycCA9IGdldHBncnAoKTsK KyAgICAvKiBkZWJ1ZyhGMTAxLCJBVFRTViBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkg bXlwZ3JwKTsgKi8KKyNlbHNlCisjaWZkZWYgUE9TSVgKKyAgICBteXBncnAgPSBnZXRwZ3JwKCk7 CisgICAgLyogZGVidWcoRjEwMSwiUE9TSVggY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQp IG15cGdycCk7ICovCisjZWxzZQorI2lmZGVmIE9TRlBDCisgICAgbXlwZ3JwID0gZ2V0cGdycCgp OworICAgIC8qIGRlYnVnKEYxMDEsIk9TRiBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkg bXlwZ3JwKTsgKi8KKyNlbHNlCisjaWZkZWYgUU5YCisgICAgbXlwZ3JwID0gZ2V0cGdycCgpOwor ICAgIC8qIGRlYnVnKEYxMDEsIlFOWCBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlw Z3JwKTsgKi8KKyNlbHNlCisjaWZkZWYgT1NGMzIJCQkJLyogKHdhcyBPU0Y0MCkgKi8KKyAgICBt eXBncnAgPSBnZXRwZ3JwKCk7CisgICAgLyogZGVidWcoRjEwMSwiRGlnaXRhbCBVTklYIGNvbmJn dCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnApOyAqLworI2Vsc2UgLyogQlNELCBWNywg ZXRjICovCisjaWZkZWYgTUlOSVgyCisgICAgbXlwZ3JwID0gZ2V0cGdycCgpOworI2Vsc2UKKyAg ICBteXBncnAgPSBnZXRwZ3JwKDApOworI2VuZGlmIC8qIE1JTklYMiAqLworICAgIC8qIGRlYnVn KEYxMDEsIkJTRCBjb25iZ3QgcHJvY2VzcyBncm91cCIsIiIsKGludCkgbXlwZ3JwKTsgKi8KKyNl bmRpZiAvKiBPU0YzMiAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIE9TRlBDICovCisj ZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBTVlIzICovCisKKyNpZmRlZiBNSU5JWAorICAg IC8qIE1JTklYIGRvZXMgbm90IHN1cHBvcnQgam9iIGNvbnRyb2wgc28gS2VybWl0IGlzIGFsd2F5 cyBpbiBmb3JlZ3JvdW5kICovCisgICAgeCA9IDA7CisKKyNlbHNlICAvKiBOb3QgTUlOSVggKi8K KworLyogTm93IGdldCBjb250cm9sbGluZyB0dHkncyBwcm9jZXNzIGdyb3VwICovCisjaWZkZWYg QlNENDRPUlBPU0lYCisgICAgY3RwZ3JwID0gdGNnZXRwZ3JwKDEpOwkJLyogVGhlIFBPU0lYIHdh eSAqLworICAgIC8qIGRlYnVnKEYxMDEsIlBPU0lYIGNvbmJndCB0ZXJtaW5hbCBwcm9jZXNzIGdy b3VwIiwiIiwoaW50KSBjdHBncnApOyAqLworI2Vsc2UKKyAgICBpb2N0bCgxLCBUSU9DR1BHUlAs ICZjdHBncnApOwkvKiBPciB0aGUgQlNEIHdheSAqLworICAgLyogZGVidWcoRjEwMSwibm9uLVBP U0lYIGNvbmJndCB0ZXJtaW5hbCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBjdHBncnApOyAqLwor I2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworCisgICAgaWYgKChteXBncnAgPiAoUElEX1QpIDAp ICYmIChjdHBncnAgPiAoUElEX1QpIDApKQorICAgICAgeCA9IChteXBncnAgPT0gY3RwZ3JwKSA/ IDAgOiAxOwkvKiBJZiB0aGV5IGRpZmZlciwgdGhlbiBiYWNrZ3JvdW5kLiAqLworICAgIGVsc2Ug eCA9IC0xOwkJCS8qIElmIGVycm9yLCByZW1lbWJlci4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25i Z3QgcHJvY2VzcyBncm91cCB0ZXN0IiwiIix4KTsKKyNlbmRpZiAvKiBQR1JPVVBfVCAqLworI2Vu ZGlmCS8qIE1JTklYICovCisKKy8qIFRyeSB0byBzZWUgaWYgam9iIGNvbnRyb2wgaXMgYXZhaWxh YmxlICovCisKKyNpZmRlZiBOT0pDCQkJCS8qIFVzZXIgb3ZlcnJpZGUgKi8KKyAgICBqYyA9IDA7 CQkJCS8qIE5vIGpvYiBjb250cm9sIGFsbG93ZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCJOT0pDIiwi amMiLGpjKTsKKyNlbHNlCisjaWZkZWYgQlNENDQKKyAgICBqYyA9IDE7CisjZWxzZQorI2lmZGVm IFNWUjRPUlBPU0lYCQkJLyogUE9TSVggYWN0dWFsbHkgdGVsbHMgdXMgKi8KKyAgICBkZWJ1ZyhG MTAwLCJTVlI0T1JQT1NJWCBqYyB0ZXN0Li4uIiwiIiwwKTsKKyNpZmRlZiBfU0NfSk9CX0NPTlRS T0wKKyNpZmRlZiBfX2JzZGlfXworICAgIGpjID0gMTsKKyNlbHNlCisjaWZkZWYgX18zODZCU0Rf XworICAgIGpjID0gMTsKKyNlbHNlCisgICAgamMgPSBzeXNjb25mKF9TQ19KT0JfQ09OVFJPTCk7 CS8qIFdoYXRldmVyIHN5c3RlbSBzYXlzICovCisgICAgaWYgKGpjIDwgMCkgeworCWRlYnVnKEYx MDEsInN5c2NvbmYgZmFpbHMsIGpjc2hlbGwiLCIiLGpjc2hlbGwpOworCWpjID0gKGpjaGRsciA9 PSBTSUdfREZMKSA/IDEgOiAwOworICAgIH0gZWxzZQorICAgICAgZGVidWcoRjExMSwic3lzY29u ZihfU0NfSk9CX0NPTlRST0wpIiwiamMiLGpjKTsKKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisj ZW5kaWYgLyogX19ic2RpX18gKi8KKyNlbHNlCisjaWZkZWYgX1BPU0lYX0pPQl9DT05UUk9MCisg ICAgamMgPSAxOwkJCQkvKiBCeSBkZWZpbml0aW9uICovCisgICAgZGVidWcoRjExMSwiX1BPU0lY X0pPQl9DT05UUk9MIGlzIGRlZmluZWQiLCJqYyIsamMpOworI2Vsc2UKKyAgICBqYyA9IDA7CQkJ CS8qIEFzc3VtZSBqb2IgY29udHJvbCBub3QgYWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsIlNW UjRPUlBPU0lYIF9TQy9QT1NJWF9KT0JfQ09OVFJPTCBub3QgZGVmaW5lZCIsImpjIixqYyk7Cisj ZW5kaWYgLyogX1BPU0lYX0pPQl9DT05UUk9MICovCisjZW5kaWYgLyogX1NDX0pPQl9DT05UUk9M ICovCisjZWxzZQorI2lmZGVmIEJTRDQKKyAgICBqYyA9IDE7CQkJCS8qIEpvYiBjb250cm9sIGFs bG93ZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCJCU0Qgam9iIGNvbnRyb2wiLCJqYyIsamMpOworI2Vs c2UKKyNpZmRlZiBTVlIzSkMKKyAgICBqYyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQgKi8KKyAgICBk ZWJ1ZyhGMTExLCJTVlIzIGpvYiBjb250cm9sIiwiamMiLGpjKTsKKyNlbHNlCisjaWZkZWYgT1hP UworICAgIGpjID0gMTsJCQkJLyogSkMgYWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsIlgvT1Mg am9iIGNvbnRyb2wiLCJqYyIsamMpOworI2Vsc2UKKyNpZmRlZiBIUFVYOQorICAgIGpjID0gMTsJ CQkJLyogSkMgYWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsIkhQLVVYIDkuMCBqb2IgY29udHJv bCIsImpjIixqYyk7CisjZWxzZQorI2lmZGVmIEhQVVgxMAorICAgIGpjID0gMTsJCQkJLyogSkMg YWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsIkhQLVVYIDEwLjAgam9iIGNvbnRyb2wiLCJqYyIs amMpOworI2Vsc2UKKyAgICBqYyA9IDA7CQkJCS8qIEpDIG5vdCBhbGxvd2VkICovCisgICAgZGVi dWcoRjExMSwiam9iIGNvbnRyb2wgY2F0Y2gtYWxsIiwiamMiLGpjKTsKKyNlbmRpZiAvKiBIUFVY MTAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBT VlIzSkMgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogU1ZSNE9SUE9TSVggKi8KKyNl bmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIE5PSkMgKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25i Z3QgamMiLCIiLGpjKTsKKyNpZm5kZWYgTk9KQworICAgIGRlYnVnKEYxMDEsImNvbmJndCBqY3No ZWxsIiwiIixqY3NoZWxsKTsKKy8qCisgIEF0IHRoaXMgcG9pbnQsIGlmIGpjID09IDEgYnV0IGpj c2hlbGwgPT0gMCwgaXQgbWVhbnMgdGhhdCB0aGUgT1Mgc3VwcG9ydHMKKyAgam9iIGNvbnRyb2ws IGJ1dCB0aGUgc2hlbGwgb3Igb3RoZXIgcHJvY2VzcyB3ZSBhcmUgcnVubmluZyB1bmRlciBkb2Vz IG5vdAorICAoamNzaGVsbCBpcyBzZXQgaW4gc3lzaW5pdCgpKSBhbmQgc28gaWYgd2Ugc3VzcGVu ZCBvdXJzZWx2ZXMsIG5vdGhpbmcgZ29vZAorICB3aWxsIGNvbWUgb2YgaXQuICBTby4uLgorKi8K KyAgICBpZiAoamMgPCAwKSBqYyA9IDA7CisgICAgaWYgKGpjID4gMCAmJiBqY3NoZWxsID09IDAp IGpjID0gMDsKKyNlbmRpZiAvKiBOT0pDICovCisKKy8qCisgIEFub3RoZXIgYmFja2dyb3VuZCB0 ZXN0LgorICBUZXN0IGlmIFNJR0lOVCAodGVybWluYWwgaW50ZXJydXB0KSBpcyBzZXQgdG8gU0lH X0lHTiAoaWdub3JlKSwKKyAgd2hpY2ggaXMgZG9uZSBieSB0aGUgc2hlbGwgKHNoKSBpZiB0aGUg cHJvZ3JhbSBpcyBzdGFydGVkIHdpdGggJyYnLgorICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIE5P VCBkb25lIGJ5IGNzaCBvciBrc2ggc28gd2F0Y2ggb3V0IQorICBOb3RlLCBpdCdzIHNhZmUgdG8g c2V0IFNJR0lOVCB0byBTSUdfSUdOIGhlcmUsIGJlY2F1c2UgZnVydGhlciBkb3duCisgIHdlIGFs d2F5cyBzZXQgaXQgdG8gc29tZXRoaW5nIGVsc2UuCisgIE5vdGU6IGFzIG9mIDE2IEp1bCAxOTk5 LCB3ZSBhbHNvIHNraXAgdGhpcyB0ZXN0IGlmIHdlIHNldCBTSUdJTlQgdG8KKyAgU0lHX0lHTiBv dXJzZWx2ZXMuCisqLworICAgIGlmICh4IDwgMCAmJiAhZmxhZyAmJiAhc2lnaW50X2lnbikgeyAv KiBEaWRuJ3QgZ2V0IGdvb2QgcmVzdWx0cyBhYm92ZS4uLiAqLworCisJU0lHVFlQICgqb3NpZ2lu dCkoKTsKKworCW9zaWdpbnQgPSBzaWduYWwoU0lHSU5ULFNJR19JR04pOwkvKiBXaGF0IGlzIFNJ R0lOVCBzZXQgdG8/ICovCisJc2lnaW50X2lnbiA9IDE7CisJeCA9IChvc2lnaW50ID09IFNJR19J R04pID8gMSA6IDA7CS8qIFNJR19JR04/ICovCisJLyogZGVidWcoRjEwMSwiY29uYmd0IG9zaWdp bnQiLCIiLG9zaWdpbnQpOyAqLworCS8qIGRlYnVnKEYxMDEsImNvbmJndCBzaWduYWwgdGVzdCIs IiIseCk7ICovCisgICAgfQorCisvKiBBbHNvIGNoZWNrIHRvIHNlZSBpZiB3ZSdyZSBydW5uaW5n IHdpdGggcmVkaXJlY3RlZCBzdGRpby4gKi8KKy8qIFRoaXMgaXMgbm90IHJlYWxseSBiYWNrZ3Jv dW5kIG9wZXJhdGlvbiwgYnV0IHdlIHdhbnQgdG8gYWN0IGFzIHRob3VnaCAqLworLyogaXQgd2Vy ZS4gKi8KKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpIHsJCQkvKiBJbnRlcm5ldCBL ZXJtaXQgU2VydmVyICovCisJYmFja2dyZCA9IDA7CQkJLyogaXMgbm90IGluIHRoZSBiYWNrZ3Jv dW5kICovCisJcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICB5ID0gKGlz YXR0eSgwKSAmJiBpc2F0dHkoMSkpID8gMSA6IDA7CisgICAgZGVidWcoRjEwMSwiY29uYmd0IGlz YXR0eSB0ZXN0IiwiIix5KTsKKworI2lmZGVmIEJTRDI5CisvKiBUaGUgcHJvY2VzcyBncm91cCBh bmQvb3Igc2lnbmFsIHRlc3QgZG9lc24ndCB3b3JrIHVuZGVyIHRoZXNlLi4uICovCisgICAgYmFj a2dyZCA9ICF5OworI2Vsc2UKKyNpZmRlZiBzeGFFNTAKKyAgICBiYWNrZ3JkID0gIXk7CisjZWxz ZQorI2lmZGVmIE1JTklYCisgICAgYmFja2dyZCA9ICF5OworI2Vsc2UKKyNpZmRlZiBNSU5JWDIK KyAgICBiYWNrZ3JkID0gIXk7CisjZWxzZQorICAgIGlmICh4ID4gLTEpCisgICAgICBiYWNrZ3Jk ID0gKHggfHwgIXkpID8gMSA6IDA7CisgICAgZWxzZSBiYWNrZ3JkID0gIXk7CisjZW5kaWYgLyog QlNEMjkgKi8KKyNlbmRpZiAvKiBzeGFFNTAgKi8KKyNlbmRpZiAvKiBNSU5JWCAqLworI2VuZGlm IC8qIE1JTklYMiAqLworICAgIGRlYnVnKEYxMDEsImNvbmJndCBiYWNrZ3JkIiwiIixiYWNrZ3Jk KTsKK30KKworLyogIEMgTyBOIEkgTiBUICAtLSAgQ29uc29sZSBJbnRlcnJ1cHQgc2V0dGVyICAq LworCisvKgorICBGaXJzdCBhcmcgaXMgcG9pbnRlciB0byBmdW5jdGlvbiB0byBoYW5kbGUgU0lH VEVSTSAmIFNJR0lOVCAobGlrZSBDdHJsLUMpLgorICBTZWNvbmQgYXJnIGlzIHBvaW50ZXIgdG8g ZnVuY3Rpb24gdG8gaGFuZGxlIFNJR1RTVFAgKHN1c3BlbmQpLgorKi8KKworVk9JRAkJCQkJLyog U2V0IHRlcm1pbmFsIGludGVycnVwdCB0cmFwcy4gKi8KKyNpZmRlZiBDS19BTlNJQworI2lmZGVm IGFwb2xsbworY29uaW50KGYscykgU0lHVFlQICgqZikoKSwgKCpzKSgpOworI2Vsc2UKK2Nvbmlu dChTSUdUWVAgKCpmKShpbnQpLCBTSUdUWVAgKCpzKShpbnQpKQorI2VuZGlmIC8qIGFwb2xsbyAq LworI2Vsc2UKK2NvbmludChmLHMpIFNJR1RZUCAoKmYpKCksICgqcykoKTsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogY29uaW50ICovIHsKKworICAgIGRlYnVnKEYxMDEsImNvbmludCBjb25p c3RhdGUiLCIiLGNvbmlzdGF0ZSk7CisKKyAgICBjb25iZ3QoMCk7CQkJCS8qIERvIGJhY2tncm91 bmQgdGVzdC4gKi8KKworLyogU2V0IHRoZSBkZXNpcmVkIGhhbmRsZXJzIGZvciBoYW5ndXAgYW5k IHNvZnR3YXJlIHRlcm1pbmF0aW9uLiAqLworCisjaWZkZWYgU0lHVEVSTQorICAgIHNpZ25hbChT SUdURVJNLGYpOyAgICAgICAgICAgICAgICAgIC8qIFNvZnR3YXJlIHRlcm1pbmF0aW9uICovCisj ZW5kaWYgLyogU0lHVEVSTSAqLworCisvKgorICBQcmlvciB0byBKdWx5IDE5OTkgd2UgdXNlZCB0 byBjYWxsIHNpZ2h1cCgpIGhlcmUgYnV0IG5vdyBpdCdzIGNhbGxlZCBpbgorICBzeXNpbml0KCkg c28gU0lHSFVQIGNhbiBiZSBjYXVnaHQgZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgaW5pdCBmaWxl IG9yCisgIGEga2VyYmFuZyBzY3JpcHQuCisqLworCisvKiBOb3cgaGFuZGxlIGtleWJvYXJkIHN0 b3AsIHF1aXQsIGFuZCBpbnRlcnJ1cHQgc2lnbmFscy4gKi8KKy8qIENoZWNrIGlmIGludm9rZWQg aW4gYmFja2dyb3VuZCAtLSBpZiBzbyBzaWduYWxzIHNldCB0byBiZSBpZ25vcmVkLiAqLworLyog SG93ZXZlciwgaWYgcnVubmluZyB1bmRlciBhIGpvYiBjb250cm9sIHNoZWxsLCBkb24ndCBpZ25v cmUgdGhlbS4gKi8KKy8qIFdlIHdvbid0IGJlIGdldHRpbmcgYW55LCBhcyB3ZSBhcmVuJ3QgaW4g dGhlIHRlcm1pbmFsJ3MgcHJvY2VzcyBncm91cC4gKi8KKworICAgIGRlYnVnKEYxMDEsImNvbmlu dCBiYWNrZ3JkIiwiIixiYWNrZ3JkKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgamMiLCIiLGpj KTsKKworICAgIGlmIChiYWNrZ3JkICYmICFqYykgewkJLyogSW4gYmFja2dyb3VuZCwgaWdub3Jl IHNpZ25hbHMgKi8KKwlkZWJ1ZyhGMTAxLCJjb25pbnQgYmFja2dyb3VuZCBpZ25vcmluZyBzaWdu YWxzLCBqYyIsIiIsamMpOworI2lmZGVmIFNJR1RTVFAKKyAgICAgICAgc2lnbmFsKFNJR1RTVFAs U0lHX0lHTik7ICAgICAgICAvKiBLZXlib2FyZCBzdG9wICovCisjZW5kaWYgLyogU0lHVFNUUCAq LworICAgICAgICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAgIC8qIEtleWJvYXJkIHF1 aXQgKi8KKyAgICAgICAgc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsgICAgICAgICAvKiBLZXlib2Fy ZCBpbnRlcnJ1cHQgKi8KKwlzaWdpbnRfaWduID0gMTsKKwljb25pc3RhdGUgPSBDT05JX05PSTsK KyAgICB9IGVsc2UgewkJCQkvKiBFbHNlIGluIGZvcmVncm91bmQgb3Igc3VzcGVuZGVkICovCisJ ZGVidWcoRjEwMSwiY29uaW50IGZvcmVncm91bmQgY2F0Y2hpbmcgc2lnbmFscywgamMiLCIiLGpj KTsKKyAgICAgICAgc2lnbmFsKFNJR0lOVCxmKTsgICAgICAgICAgICAgICAvKiBDYXRjaCB0ZXJt aW5hbCBpbnRlcnJ1cHQgKi8KKwlzaWdpbnRfaWduID0gKGYgPT0gU0lHX0lHTikgPyAxIDogMDsK KworI2lmZGVmIFNJR1RTVFAJCQkJLyogS2V5Ym9hcmQgc3RvcCAoc3VzcGVuZCkgKi8KKwkvKiBk ZWJ1ZyhGMTAxLCJjb25pbnQgU0lHU1RTVFAiLCIiLHMpOyAqLworCWlmIChzID09IE5VTEwpIHMg PSBTSUdfREZMOworI2lmZGVmIE5PSkMJCQkJLyogTm8gam9iIGNvbnRyb2wgYWxsb3dlZC4gKi8K KwlzaWduYWwoU0lHVFNUUCxTSUdfSUdOKTsKKyNlbHNlCQkJCQkvKiBKb2IgY29udHJvbCBhbGxv d2VkICovCisJaWYgKGpjKQkJCQkvKiBpZiBhdmFpbGFibGUuICovCisJICBzaWduYWwoU0lHVFNU UCxzKTsKKwllbHNlCisJICBzaWduYWwoU0lHVFNUUCxTSUdfSUdOKTsKKyNlbmRpZiAvKiBOT0pD ICovCisjZW5kaWYgLyogU0lHVFNUUCAqLworCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBTVk9SUE9T SVgKKyNpZm5kZWYgRklPTlJFQUQJCQkvKiBXYXRjaCBvdXQsIHdlIGRvbid0IGtub3cgdGhpcy4u LiAqLworI2lmbmRlZiBTRUxFQ1QKKyNpZm5kZWYgQ0tfUE9MTAorI2lmbmRlZiBSRENISworICAg ICAgICBzaWduYWwoU0lHUVVJVCxlc2N0cnApOyAgICAgICAgIC8qIFF1aXQgc2lnbmFsLCBTeXMg SUlJL1YuICovCisjZW5kaWYgLyogUkRDSEsgKi8KKyNlbmRpZiAvKiBDS19QT0xMICovCisjZW5k aWYgLyogU0VMRUNUICovCisjZW5kaWYgLyogRklPTlJFQUQgKi8KKyAgICAgICAgaWYgKGNvbmVz YykgY29uZXNjID0gMDsgICAgICAgICAvKiBDbGVhciBvdXQgcGVuZGluZyBlc2NhcGVzICovCisj ZWxzZQorI2lmZGVmIFY3CisgICAgICAgIHNpZ25hbChTSUdRVUlULGVzY3RycCk7ICAgICAgICAg LyogVjcgbGlrZSBTeXMgSUlJL1YgKi8KKyAgICAgICAgaWYgKGNvbmVzYykgY29uZXNjID0gMDsK KyNlbHNlCisjaWZkZWYgYWVnaXMKKyAgICAgICAgc2lnbmFsKFNJR1FVSVQsZik7ICAgICAgICAg ICAgICAvKiBBcG9sbG8sIGNhdGNoIGl0IGxpa2Ugb3RoZXJzLiAqLworI2Vsc2UKKyAgICAgICAg c2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAvKiBPdGhlcnMsIGlnbm9yZSBsaWtlIDRE ICYgZWFybGllci4gKi8KKyNlbmRpZiAvKiBhZWdpcyAqLworI2VuZGlmIC8qIFY3ICovCisjZW5k aWYgLyogU1ZPUlBPU0lYICovCisjZW5kaWYgLyogT1hPUyAqLworCWNvbmlzdGF0ZSA9IENPTklf SU5UOworICAgIH0KK30KKworCisvKiAgQyBPIE4gTiBPIEkgIC0tICBSZXNldCBjb25zb2xlIHRl cm1pbmFsIGludGVycnVwdHMgKi8KKworVk9JRAorY29ubm9pKCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbnNvbGUtbm8taW50ZXJydXB0cyAqLworCisgICAgZGVidWcoRjEw MSwiY29ubm9pIGNvbmlzdGF0ZSIsIiIsY29uaXN0YXRlKTsKKyNpZmRlZiBTSUdUU1RQCisgICAg c2lnbmFsKFNJR1RTVFAsU0lHX0lHTik7CQkvKiBTdXNwZW5kICovCisjZW5kaWYgLyogU0lHVFNU UCAqLworICAgIGNvbmludChTSUdfSUdOLFNJR19JR04pOwkJLyogSW50ZXJydXB0ICovCisgICAg c2lnaW50X2lnbiA9IDE7CQkJLyogUmVtZW1iZXIgd2UgZGlkIHRoaXMgb3Vyc2VsdmVzICovCisj aWZkZWYgU0lHUVVJVAorICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOwkJLyogUXVpdCAqLwor I2VuZGlmIC8qIFNJR1FVSVQgKi8KKyNpZmRlZiBTSUdURVJNCisgICAgc2lnbmFsKFNJR1RFUk0s U0lHX0lHTik7CQkvKiBUZXJtICovCisjZW5kaWYgLyogU0lHVEVSTSAqLworICAgIGNvbmlzdGF0 ZSA9IENPTklfTk9JOworfQorCisvKiAgSSBOIEkgVCBSIEEgVyBRICAtLSAgU2V0IHVwIHRvIHJl YWQgL2Rldi9rbWVtIGZvciBjaGFyYWN0ZXIgY291bnQuICAqLworCisjaWZkZWYgIFY3CisvKgor IFVzZWQgaW4gVmVyc2lvbiA3IHRvIHNpbXVsYXRlIEJlcmtlbGV5J3MgRklPTlJFQUQgaW9jdGwg Y2FsbC4gIFRoaXMKKyBlbGltaW5hdGVzIGJsb2NraW5nIG9uIGEgcmVhZCwgYmVjYXVzZSB3ZSBj YW4gcmVhZCAvZGV2L2ttZW0gdG8gZ2V0IHRoZQorIG51bWJlciBvZiBjaGFyYWN0ZXJzIGF2YWls YWJsZSBmb3IgcmF3IGlucHV0LiAgSWYgeW91ciBzeXN0ZW0gY2FuJ3QKKyBvciB5b3Ugd29uJ3Qg bGV0IHRoZSB3b3JsZCByZWFkIC9kZXYva21lbSB0aGVuIHlvdSBtdXN0IGZpZ3VyZSBvdXQgYQor IGRpZmZlcmVudCB3YXkgdG8gZG8gdGhlIGNvdW50aW5nIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxl LCBvciBlbHNlIHJlcGxhY2UKKyB0aGlzIGJ5IGEgZHVtbXkgZnVuY3Rpb24gdGhhdCBhbHdheXMg cmV0dXJucyAwLgorKi8KKy8qCisgKiBDYWxsIHRoaXMgcm91dGluZSBhczogaW5pdHJhd3EodHR5 KQorICogd2hlcmUgdHR5IGlzIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSB0ZXJtaW5hbC4gIEl0 IHdpbGwgcmV0dXJuCisgKiAoYXMgYSBjaGFyICopIHRoZSBrZXJuZWwtbW9kZSBtZW1vcnkgYWRk cmVzcyBvZiB0aGUgcmF3cSBjaGFyYWN0ZXIKKyAqIGNvdW50LCB3aGljaCBtYXkgdGhlbiBiZSBy ZWFkLiAgSXQgaGFzIHRoZSBzaWRlLWVmZmVjdCBvZiBmbHVzaGluZworICogaW5wdXQgb24gdGhl IHRlcm1pbmFsLgorICovCisvKgorICogSm9obiBNYWNraW4sIFBoeXNpb2xvZ3kgRGVwdC4sIFVu aXZlcnNpdHkgb2YgU3lkbmV5IChBdXN0cmFsaWEpCisgKiAuLi4hZGVjdmF4IW11bGdhIXBoeXNp b2wuc3Uub3oham9obgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gZG8g YW55dGhpbmcgd2l0aCB0aGlzIGNvZGUsIGFzCisgKiBsb25nIGFzIHRoaXMgY29tbWVudCBpcyBy ZXRhaW5lZCB1bm1vZGlmaWVkIGFuZCBubyBjb21tZXJjaWFsCisgKiBhZHZhbnRhZ2UgaXMgZ2Fp bmVkLgorICovCisjaWZuZGVmIE1JTklYCisjaWZuZGVmIE1JTklYMgorI2lmbmRlZiBDT0hFUkVO VAorI2luY2x1ZGUgPGEub3V0Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZiAvKiBD T0hFUkVOVCAqLworI2VuZGlmIC8qIE1JTklYMiAqLworI2VuZGlmIC8qIE1JTklYICovCisKKyNp ZmRlZiBDT0hFUkVOVAorI2luY2x1ZGUgPGwub3V0Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4K KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCitjaGFyICoKK2luaXRyYXdxKHR0eSkgaW50IHR0eTsg eworI2lmZGVmIE1JTklYCisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBNSU5JWDIKKyAg ICByZXR1cm4oMCk7CisjZWxzZQorI2lmZGVmIFVUUzI0CisgICAgcmV0dXJuKDApOworI2Vsc2UK KyNpZmRlZiBCU0QyOQorICAgIHJldHVybigwKTsKKyNlbHNlCisgICAgbG9uZyBsc2VlaygpOwor ICAgIHN0YXRpYyBzdHJ1Y3Qgbmxpc3QgbmxbXSA9IHsKKyAgICAgICAge1BST0NOQU1FfSwKKyAg ICAgICAge05QUk9DTkFNRX0sCisgICAgICAgIHsiIn0KKyAgICB9OworICAgIHN0YXRpYyBzdHJ1 Y3QgcHJvYyAqcHA7CisgICAgY2hhciAqcWFkZHIsICpwLCBjOworICAgIGludCBtOworICAgIFBJ RF9UIHBpZCwgbWU7CisgICAgTlBUWVBFIHhwcm9jOyAgICAgICAgICAgICAgICAgICAgICAgLyog SXRzIHR5cGUgaXMgZGVmaW5lZCBpbiBtYWtlZmlsZS4gKi8KKyAgICBpbnQgY2F0Y2goKTsKKwor ICAgIG1lID0gZ2V0cGlkKCk7CisgICAgaWYgKChtID0gb3BlbigiL2Rldi9rbWVtIiwgMCkpIDwg MCkgZXJyKCJrbWVtIik7CisgICAgbmxpc3QoQk9PVE5BTUUsIG5sKTsKKyAgICBpZiAobmxbMF0u bl90eXBlID09IDApIGVycigicHJvYyBhcnJheSIpOworCisgICAgaWYgKG5sWzFdLm5fdHlwZSA9 PSAwKSBlcnIoIm5wcm9jIik7CisKKyAgICBsc2VlayhtLCAobG9uZykobmxbMV0ubl92YWx1ZSks IDApOworICAgIHJlYWQgKG0sICZ4cHJvYywgc2l6ZW9mKHhwcm9jKSk7CisgICAgc2F2YWwgPSBz aWduYWwoU0lHQUxSTSwgY2F0Y2gpOworICAgIGlmICgocGlkID0gZm9yaygpKSA9PSAwKSB7Cisg ICAgICAgIHdoaWxlKDEpCisgICAgICAgICAgICByZWFkKHR0eSwgJmMsIDEpOworICAgIH0KKyAg ICBhbGFybSgyKTsKKworICAgIGlmKHNldGptcChqamJ1ZikgPT0gMCkgeworICAgICAgICB3aGls ZSgxKQorCSAgcmVhZCh0dHksICZjLCAxKTsKKyAgICB9CisgICAgc2lnbmFsKFNJR0FMUk0sIFNJ R19ERkwpOworCisjaWZkZWYgRElSRUNUCisgICAgcHAgPSAoc3RydWN0IHByb2MgKikgbmxbMF0u bl92YWx1ZTsKKyNlbHNlCisgICAgaWYgKGxzZWVrKG0sIChsb25nKShubFswXS5uX3ZhbHVlKSwg MCkgPCAwTCkgZXJyKCJzZWVrIik7CisgICAgaWYgKHJlYWQobSwgJnBwLCBzaXplb2YocHApKSAh PSBzaXplb2YocHApKSAgZXJyKCJubyByZWFkIG9mIHByb2MgcHRyIik7CisjZW5kaWYKKyAgICBs c2VlayhtLCAobG9uZykobmxbMV0ubl92YWx1ZSksIDApOworICAgIHJlYWQobSwgJnhwcm9jLCBz aXplb2YoeHByb2MpKTsKKworICAgIGlmIChsc2VlayhtLCAobG9uZylwcCwgMCkgPCAwTCkgZXJy KCJDYW4ndCBzZWVrIHRvIHByb2MiKTsKKyAgICBpZiAoKHAgPSBtYWxsb2MoeHByb2MgKiBzaXpl b2Yoc3RydWN0IHByb2MpKSkgPT0gTlVMTCkgZXJyKCJtYWxsb2MiKTsKKyAgICBpZiAocmVhZCht LHAseHByb2MgKiBzaXplb2Yoc3RydWN0IHByb2MpKSAhPSB4cHJvYypzaXplb2Yoc3RydWN0IHBy b2MpKQorICAgICAgICBlcnIoInJlYWQgcHJvYyB0YWJsZSIpOworICAgIGZvciAocHAgPSAoc3Ry dWN0IHByb2MgKilwOyB4cHJvYyA+IDA7IC0teHByb2MsICsrcHApIHsKKyAgICAgICAgaWYgKHBw IC0+IHBfcGlkID09IChzaG9ydCkgcGlkKSBnb3RvIGlvdXQ7CisgICAgfQorICAgIGVycigibm8g c3VjaCBwcm9jIik7CisKK2lvdXQ6CisgICAgY2xvc2UobSk7CisgICAgcWFkZHIgPSAoY2hhciAq KShwcCAtPiBwX3djaGFuKTsKKyAgICBmcmVlIChwKTsKKyAgICBraWxsKHBpZCwgU0lHS0lMTCk7 CisgICAgd2FpdCgoV0FJVF9UICopMCk7CisgICAgcmV0dXJuIChxYWRkcik7CisjZW5kaWYKKyNl bmRpZgorI2VuZGlmCisjZW5kaWYKK30KKworLyogIE1vcmUgVjctc3VwcG9ydCBmdW5jdGlvbnMu Li4gICovCisKK3N0YXRpYyBWT0lECitlcnIocykgY2hhciAqczsgeworICAgIGNoYXIgYnVmWzIw MF07CisKKyAgICBja21ha21zZyhidWYsMjAwLCJmYXRhbCBlcnJvciBpbiBpbml0cmF3cTogIiwg cywgTlVMTCwgTlVMTCk7CisgICAgcGVycm9yKGJ1Zik7CisgICAgZG9leGl0KDEsLTEpOworfQor CitzdGF0aWMgVk9JRAorY2F0Y2goZm9vKSBpbnQgZm9vOyB7CisgICAgbG9uZ2ptcChqamJ1Ziwg LTEpOworfQorCisKKy8qICBHIEUgTiBCIFIgSyAgLS0gIFNpbXVsYXRlIGEgbW9kZW0gYnJlYWsu ICAqLworCisjaWZkZWYgTUlOSVgKKyNkZWZpbmUgQlNQRUVEIEIxMTAKKyNlbHNlCisjaWZkZWYg TUlOSVgyCisjZGVmaW5lIEJTUEVFRCBCMTEwCisjZWxzZQorI2RlZmluZSBCU1BFRUQgQjE1MAor I2VuZGlmIC8qIE1JTklYMiAqLworI2VuZGlmIC8qIE1JTklYICovCisKKyNpZm5kZWYgTUlOSVgy CitWT0lECitnZW5icmsoZm4sbXNlYykgaW50IGZuLCBtc2VjOyB7CisgICAgc3RydWN0IHNndHR5 YiB0dGJ1ZjsKKyAgICBpbnQgcmV0LCBzb3NwZWVkLCB4LCB5OworCisgICAgcmV0ID0gaW9jdGwo Zm4sIFRJT0NHRVRQLCAmdHRidWYpOworICAgIHNvc3BlZWQgPSB0dGJ1Zi5zZ19vc3BlZWQ7Cisg ICAgdHRidWYuc2dfb3NwZWVkID0gQlNQRUVEOworICAgIHJldCA9IGlvY3RsKGZuLCBUSU9DU0VU UCwgJnR0YnVmKTsKKyAgICB5ID0gKGludClzdHJsZW4oYnJudWxzKTsKKyAgICB4ID0gKCBCU1BF RUQgKiAxMDAgKSAvIG1zZWM7CisgICAgaWYgKHggPiB5KSB4ID0geTsKKyAgICByZXQgPSB3cml0 ZShmbiwgYnJudWxzLCAoKCBCU1BFRUQgKiAxMDAgKSAvIG1zZWMgKSk7CisgICAgdHRidWYuc2df b3NwZWVkID0gc29zcGVlZDsKKyAgICByZXQgPSBpb2N0bChmbiwgVElPQ1NFVFAsICZ0dGJ1Zik7 CisgICAgcmV0ID0gd3JpdGUoZm4sICJAIiwgMSk7CisgICAgcmV0dXJuOworfQorI2VuZGlmIC8q IE1JTklYMiAqLworCisjaWZkZWYgTUlOSVgyCitpbnQKK2dlbmJyayhmbixtc2VjKSBpbnQgZm4s IG1zZWM7IHsKKyAgICBzdHJ1Y3QgdGVybWlvcyB0dGJ1ZjsKKyAgICBpbnQgcmV0LCB4LCB5Owor ICAgIHNwZWVkX3Qgc29zcGVlZDsKKworICAgIHJldCA9IHRjZ2V0YXR0cihmbiwgJnR0YnVmKTsK KyAgICBzb3NwZWVkID0gdHRidWYuY19vc3BlZWQ7CisgICAgdHRidWYuY19vc3BlZWQgPSBCU1BF RUQ7CisgICAgcmV0ID0gdGNzZXRhdHRyKGZuLFRDU0FEUkFJTiwgJnR0YnVmKTsKKyAgICB5ID0g KGludClzdHJsZW4oYnJudWxzKTsKKyAgICB4ID0gKCBCU1BFRUQgKiAxMDAgKSAvIG1zZWM7Cisg ICAgaWYgKHggPiB5KSB4ID0geTsKKyAgICByZXQgPSB3cml0ZShmbiwgYnJudWxzLCAoKCBCU1BF RUQgKiAxMDAgKSAvIG1zZWMgKSk7CisgICAgdHRidWYuY19vc3BlZWQgPSBzb3NwZWVkOworICAg IHJldCA9IHRjc2V0YXR0cihmbiwgVENTQURSQUlOLCAmdHRidWYpOworICAgIHJldCA9IHdyaXRl KGZuLCAiQCIsIDEpOworICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogTUlOSVgyICovCisj ZW5kaWYgLyogVjcgKi8KKworLyoKKyAgSSBOIEMgSCBLICAtLSAgQ2hlY2sgaWYgY2hhcnMgd2Fp dGluZyB0byBiZSByZWFkIG9uIGdpdmVuIGZpbGUgZGVzY3JpcHRvci4KKworICBUaGlzIHJvdXRp bmUgaXMgYSBtZXJnZXIgb2YgdHRjaGsoKSBhbmQgY29uY2hrKCkuCisgIENhbGwgd2l0aDoKKyAg ICBjaGFubmVsID09IDAgdG8gY2hlY2sgY29uc29sZS4KKyAgICBjaGFubmVsID09IDEgdG8gY2hl Y2sgY29tbXVuaWNhdGlvbnMgY29ubmVjdGlvbi4KKyAgYW5kOgorICAgIGZkID0gZmlsZSBkZXNj cmlwdG9yLgorICBSZXR1cm5zOgorICAgPj0gMDogbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2FpdGlu ZywgMCBvciBncmVhdGVyLAorICAgICAtMTogb24gYW55IGtpbmQgb2YgZXJyb3IsCisgICAgIC0y OiBpZiB0aGVyZSBpcyAoZGVmaW5pdGVseSkgbm8gY29ubmVjdGlvbi4KKyAgTm90ZTogSW4gVU5J WCB3ZSBkb24ndCBoYXZlIHRvIGNhbGwgbmV0dGNoaygpIGJlY2F1c2UgYSBzb2NrZXQKKyAgZmls ZSBkZXNjcmlwdG9yIHdvcmtzIGp1c3QgbGlrZSBpbiBzZXJpYWwgaS9vLCBpb2N0bHMgYW5kIGFs bC4KKyAgKEJ1dCB0aGlzIHdpbGwgY2hhbmdlIGlmIHdlIGFkZCBub24tZmlsZS1kZXNjcmlwdG9y IGNoYW5uZWxzLAorICBzdWNoIGFzIElCTSBYLjI1IGZvciBBSVguLi4pCisqLworc3RhdGljIGlu dAoraW5fY2hrKGNoYW5uZWwsIGZkKSBpbnQgY2hhbm5lbCwgZmQ7IHsKKyAgICBpbnQgeCwgbiA9 IDA7CQkJLyogV29ya2VycywgbiA9IHJldHVybiB2YWx1ZSAqLworICAgIGV4dGVybiBpbnQgY2xz b25kaXNjOwkJLyogQ2xvc2Ugb24gZGlzY29ubmVjdCAqLworLyoKKyAgVGhlIGZpcnN0IHNlY3Rp b24gY2hlY2tzIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY29ubmVjdGlvbiwKKyAgYnV0IG9ubHkg aWYgd2UncmUgaW4gbG9jYWwgbW9kZS4KKyovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9n KSB7CisJZGVidWcoRjExMSwiaW5fY2hrIGVudHJ5Iixja2l0b2EoZmQpLGNoYW5uZWwpOworCWRl YnVnKEYxMDEsImluX2NoayB0dHlmZCIsIiIsdHR5ZmQpOworCWRlYnVnKEYxMDEsImluX2NoayB0 dHB0eSIsIiIsdHRwdHkpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworLyoKKyAgQnV0IGRv bid0IHNheSBjb25uZWN0aW9uIGlzIGdvbmUgaWYgd2UgaGF2ZSBhbnkgYnVmZmVyZWQtc3R1ZmYu CisqLworI2lmZGVmIFRUTEVCVUYKKyAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRwdXNoIiwiIix0 dHB1c2gpOworICAgIGlmIChjaGFubmVsID09IDEpIHsKKwlpZiAodHRwdXNoID49IDApCisJICBu Kys7CisJbiArPSBsZV9pbmJ1ZigpOworCWlmIChuID4gMCkKKwkgIHJldHVybihuKTsKKyAgICB9 CisjZW5kaWYgLyogVFRMRUJVRiAqLworCisjaWZkZWYgTkVUUFRZCisjaWZkZWYgSEFWRV9QVFlU UkFQCisgICAgLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgSFAtVVggcHR5IGkvbyAqLworICAgIGlm ICh0dHB0eSAmJiBwdHlfdHJhcF9wZW5kaW5nKHR0eWZkKSA+IDApIHsKKyAgICAgICAgaWYgKHB0 eV90cmFwX2hhbmRsZXIodHR5ZmQpID4gMCkgeworICAgICAgICAgICAgdHRjbG9zKDApOworICAg ICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBIQVZFX1BU WVRSQVAgKi8KKyNlbmRpZiAvKiBORVRQVFkgKi8KKworICAgIGlmIChjaGFubmVsKSB7CQkJLyog Q2hlY2tpbmcgY29tbXVuaWNhdGlvbnMgY2hhbm5lbCAqLworCWlmICh0dHlmZCA8IDApIHsJCS8q IE5vIGNvbm5lY3Rpb24gKi8KKwkgIHJldHVybigtMik7CQkJLyogVGhhdCdzIHdoYXQgdGhpcyBt ZWFucyAqLworCX0gZWxzZSBpZiAoeGxvY2FsICYmCQkvKiBJbiBsb2NhbCBtb2RlICovCisJCSAg ICghbmV0Y29ubgkJLyogU2VyaWFsIGNvbm5lY3Rpb24gb3IgKi8KKyNpZmRlZiBUTl9DT01QT1JU CisJCSAgICB8fCBpc3RuY29tcG9ydCgpICAgIC8qIFRlbG5ldCBDb20gUG9ydCAqLworI2VuZGlm IC8qIFROX0NPTVBPUlQgKi8KKwkJICAgKSAmJiB0dGNhcnIgIT0gQ0FSX09GRiAvKiB3aXRoIENB UlJJRVIgV0FUQ0ggT04gKG9yIEFVVE8pICovCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIE1ZUkVB RAorLyoKKyAgU2VlbXMgbGlrZSB0aGlzIHdvdWxkIGJlIGEgZ29vZCBpZGVhIGJ1dCBpdCBwcmV2 ZW50cyBDLUtlcm1pdCBmcm9tCisgIHBvcHBpbmcgYmFjayB0byB0aGUgcHJvbXB0IGF1dG9tYXRp Y2FsbHkgd2hlbiBjYXJyaWVyIGRyb3BzLiAgSG93ZXZlciwKKyAgY29tbWVudGluZyB0aGlzIG91 dCBwcmV2ZW50cyB1cyBmcm9tIHNlZWluZyB0aGUgTk8gQ0FSUklFUiBtZXNzYWdlLgorICBOZWVk cyBtb3JlIHdvcmsuLi4KKyovCisJCSAgICYmIG15X2NvdW50IDwgMQkvKiBOb3RoaW5nIGluIG91 ciBpbnRlcm5hbCBidWZmZXIgKi8KKyNlbmRpZiAvKiBNWVJFQUQgKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisJCSAgICkgeworCSAgICBpbnQgeDsKKwkgICAgeCA9IHR0Z21kbSgpOwkJLyogU28g Z2V0IG1vZGVtIHNpZ25hbHMgKi8KKwkgICAgZGVidWcoRjEwMSwiaW5fY2hrIGNsb3NlLW9uLWRp c2Nvbm5lY3QiLCIiLGNsc29uZGlzYyk7CisJICAgIGlmICh4ID4gLTEpIHsJCS8qIENoZWNrIGZv ciBjYXJyaWVyICovCisJCWlmICghKHggJiBCTV9EQ0QpKSB7CS8qIE5vIGNhcnJpZXIgKi8KKwkJ ICAgIGRlYnVnKEYxMDEsImluX2NoayBjYXJyaWVyIGxvc3QiLCIiLHgpOworCQkgICAgaWYgKGNs c29uZGlzYykJLyogSWYgImNsb3NlLW9uLWRpc2Nvbm5lY3QiICovCisJCSAgICAgIHR0Y2xvcygw KTsJLyogY2xvc2UgZGV2aWNlICYgcmVsZWFzZSBsb2NrLiAqLworCQkgICAgcmV0dXJuKC0yKTsJ CS8qIFRoaXMgbWVhbnMgImRpc2Nvbm5lY3RlZCIgKi8KKwkJfQorCSAgICAvKiBJbiBjYXNlIEkv TyB0byBkZXZpY2UgYWZ0ZXIgQ0QgZHJvcHBlZCBhbHdheXMgZmFpbHMgKi8KKwkgICAgLyogYXMg aW4gRGViaWFuIExpbnV4IDIuMSBhbmQgVW5peHdhcmUgMi4xLi4uICovCisJICAgIH0gZWxzZSB7 CisJICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRnbWRtIEkvTyBlcnJvciIsIiIsZXJybm8p OworCSAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIHR0Z21kbSBnb3RzaWdzIiwiIixnb3RzaWdz KTsKKwkgICAgICAgIGlmIChnb3RzaWdzKSB7CQkvKiBJZiB3ZSBnb3Qgc2lnbmFscyBiZWZvcmUu Li4gKi8KKwkJICAgIGlmIChlcnJubyA9PSA1IHx8IGVycm5vID09IDYpIHsgLyogSS9PIGVycm9y IGV0YyAqLworCQkgICAgICAgIGlmIChjbHNvbmRpc2MpCS8qIGxpa2Ugd2hlbiBtb2RlbSBoYW5n cyB1cCAqLworCQkJICB0dGNsb3MoMCk7CisJCQlyZXR1cm4oLTIpOworCQkgICAgfQorCQl9CisJ CS8qIElmIHdlIG5ldmVyIGdvdCBtb2RlbSBzaWduYWxzIHN1Y2Nlc3NmdWxseSBvbiB0aGlzICov CisJCS8qIGNvbm5lY3Rpb24gYmVmb3JlLCB3ZSBjYW4ndCBjb25jbHVkZSB0aGF0IFRISVMgZmFp bHVyZSAqLworCQkvKiBtZWFucyB0aGUgY29ubmVjdGlvbiB3YXMgbG9zdC4gKi8KKwkJcmV0dXJu KDApOworCSAgICB9CisJfQorICAgIH0KKworLyogV2Ugc2VlbSB0byBoYXZlIGEgY29ubmVjdGlv biBzbyBub3cgc2VlIGlmIGFueSBieXRlcyBhcmUgd2FpdGluZyBvbiBpdCAqLworCisjaWZkZWYg Q0tfU1NMCisgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKKyAg ICAgICAgbiArPSBTU0xfcGVuZGluZyhzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uKTsK KyAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIFNTTF9wZW5kaW5nIiwiIixuKTsKKyAgICAgICAg aWYgKG4gPCAwKSB7CisgICAgICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgICAgICByZXR1cm4o LTEpOworICAgICAgICB9IGVsc2UgaWYgKG4gPiAwKSB7CisgICAgICAgICAgICByZXR1cm4obik7 CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NPREUK KyNpZmRlZiBDS19LRVJCRVJPUworICAgIC8qIEl0IGlzIG5vdCBzYWZlIHRvIHJlYWQgYW55IGRh dGEgd2hlbiB1c2luZyBlbmNyeXB0ZWQgS2xvZ2luICovCisgICAgaWYgKHR0bnByb3RvID09IE5Q X0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisjaWZkZWYgS1JCNAorICAg ICAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKKyAgICAgICAgICAgIG4gKz0ga3Ji NF9kZXNfYXZhaWwodHR5ZmQpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIGtyYjRf ZGVzX2F2YWlsIiwiIixuKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBL UkI1CisgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikgeworICAgICAgICAgICAg biArPSBrcmI1X2Rlc19hdmFpbCh0dHlmZCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9j aGsga3JiNV9kZXNfYXZhaWwiLCIiLG4pOworICAgICAgICB9CisjaWZkZWYgS1JCNV9VMlUKKyAg ICAgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7CisgICAgICAgICAgICBuICs9IGtyYjVf dTJ1X2F2YWlsKHR0eWZkKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImluX2NoayBrcmI1X2Rl c19hdmFpbCIsIiIsbik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlm IC8qIEtSQjUgKi8KKyAgICAgICAgaWYgKG4gPCAwKQkJCS8qIElzIHRoaXMgcmlnaHQ/ICovCisJ ICByZXR1cm4oLTEpOworICAgICAgICBlbHNlCisJICByZXR1cm4obik7CisgICAgfQorI2VuZGlm IC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKworICAgIGVycm5vID0g MDsJCQkJLyogUmVzZXQgdGhpcyBzbyB3ZSBsb2cgZ29vZCBpbmZvICovCisjaWZkZWYgRklPTlJF QUQKKyAgICB4ID0gaW9jdGwoZmQsIEZJT05SRUFELCAmbik7CS8qIEJTRCBhbmQgbG90cyBvZiBv dGhlcnMgKi8KKyNpZmRlZiBERUJVRwkJCQkvKiAodGhlIG1vcmUgdGhlIGJldHRlcikgKi8KKyAg ICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEwMSwiaW5fY2hrIEZJT05SRUFEIHJldHVybiBjb2Rl IiwiIix4KTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgRklPTlJFQUQgY291bnQiLCIiLG4pOworCWRl YnVnKEYxMDEsImluX2NoayBGSU9OUkVBRCBlcnJubyIsIiIsZXJybm8pOworICAgIH0KKyNlbmRp ZiAvKiBERUJVRyAqLworI2Vsc2UgLyogRklPTlJFQUQgbm90IGRlZmluZWQgKi8KKy8qCisgIEhl cmUsIGlmIChuZXRjb25uICYmIHR0bmV0ID09IE5FVF9UQ1BCKSwgd2UgbWlnaHQgdHJ5IGNhbGxp bmcgcmVjdm1zZygpCisgIHdpdGggZmxhZ3MgTVNHX1BFRUt8TVNHX0RPTlRXQUlUIG9uIHRoZSBz b2NrZXQgKHR0eWZkKSwgZXhjZXB0IHRoaXMgaXMgbm90CisgIHBvcnRhYmxlIChNU0dfRE9OVFdB SVQgaXNuJ3QgZGVmaW5lZCBpbiBhbnkgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IGZpbGVzCisgIHRo YXQgSSBsb29rZWQgYXQsIGJ1dCBpdCBpcyBuZWVkZWQgdG8gcHJldmVudCB0aGUgY2FsbCBmcm9t IGJsb2NraW5nKSwgYW5kCisgIHRoZSBtc2doZHIgc3RydWN0IGRpZmZlcnMgZnJvbSBwbGFjZSB0 byBwbGFjZSwgc28gd2Ugd291bGQgbmVlZCBhbm90aGVyCisgIGF2YWxhbmNoZSBvZiBpZmRlZnMu ICBTdGlsbCwgd2hlbiBGSU9OUkVBRCBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGlzIHRoZQorICBv bmx5IG90aGVyIGtub3duIG1ldGhvZCBvZiBhc2tpbmcgdGhlIE9TIGZvciB0aGUgKm51bWJlciog b2YgY2hhcmFjdGVycworICBhdmFpbGFibGUgZm9yIHJlYWRpbmcuCisqLworI2lmZGVmIFY3CQkJ CS8qIFVOSVggVjc6IGxvb2sgaW4ga2VybmVsIG1lbW9yeSAqLworI2lmZGVmIE1JTklYCisgICAg biA9IDA7CQkJCS8qIEJ1dCBub3QgaW4gTUlOSVggKi8KKyNlbHNlCisjaWZkZWYgTUlOSVgyCisg ICAgbiA9IDA7CisjZWxzZQorICAgIGxzZWVrKGttZW1bVFRZXSwgKGxvbmcpIHFhZGRyW1RUWV0s IDApOyAvKiA3dGggRWRpdGlvbiBVbml4ICovCisgICAgeCA9IHJlYWQoa21lbVtUVFldLCAmbiwg c2l6ZW9mKGludCkpOworICAgIGlmICh4ICE9IHNpemVvZihpbnQpKQorICAgICAgbiA9IDA7Cisj ZW5kaWYgLyogTUlOSVgyICovCisjZW5kaWYgLyogTUlOSVggKi8KKyNlbHNlIC8qIE5vdCBWNyAq LworI2lmZGVmIFBST1ZYMQorICAgIHggPSBpb2N0bChmZCwgVElPQ1FDTlQsICZ0dGJ1Zik7CS8q IERFQyBQcm8vM3h4IFZlbml4IFYuMSAqLworICAgIG4gPSB0dGJ1Zi5zZ19pc3BlZWQgJiAwMzc3 OwkJLyogQ2lyY2EgMTk4NCAqLworICAgIGlmICh4IDwgMCkgbiA9IDA7CisjZWxzZQorI2lmZGVm IE1ZUkVBRAorLyoKKyAgSGVyZSB3ZSBza2lwIGFsbCB0aGUgdW5kZXBlbmRhYmxlIGFuZCBleHBl bnNpdmUgY2FsbHMgYmVsb3cgaWYgd2UKKyAgYWxyZWFkeSBoYXZlIHNvbWV0aGluZyBpbiBvdXIg aW50ZXJuYWwgYnVmZmVyLiAgVGhpcyB0ZW5kcyB0byB3b3JrIHF1aXRlCisgIG5pY2VseSwgc28g dGhlIG9ubHkgcmVhbGx5IGJhZCBjYXNlIHJlbWFpbmluZyBpcyB0aGUgb25lIGluIHdoaWNoIG5l aXRoZXIKKyAgRklPTlJFQUQgb3IgTVlSRUFEIGFyZSBkZWZpbmVkLCB3aGljaCBpcyBpbmNyZWFz aW5nbHkgcmFyZSB0aGVzZSBkYXlzLgorKi8KKyAgICBpZiAoY2hhbm5lbCAhPSAwICYmIG15X2Nv dW50ID4gMCkgeworCWRlYnVnKEYxMDEsImluX2NoayBidWYgbXlfY291bnQiLCIiLG15X2NvdW50 KTsKKwluID0gbXlfY291bnQ7CQkJLyogbiB3YXMgMCBiZWZvcmUgd2UgZ290IGhlcmUgKi8KKwly ZXR1cm4obik7CisgICAgfQorI2VuZGlmIC8qIE1ZUkVBRCAqLworLyoKKyAgcmRjaGsoKSwgc2Vs ZWN0KCksIGFuZCBwb2xsKCkgdGVsbCB1cyAqaWYqIGRhdGEgaXMgYXZhaWxhYmxlIHRvIGJlIHJl YWQsIGJ1dAorICBub3QgaG93IG11Y2gsIHNvIHRoZXNlIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMg YSBmaW5hbCByZXNvcnQuICBFc3BlY2lhbGx5CisgIHNpbmNlIHRoZXNlIGNhbGxzIHRlbmQgdG8g YWRkIGEgbG90IG92ZXJoZWFkLgorKi8KKyNpZmRlZiBSRENISwkJCQkvKiBUaGlzIG1vc3RseSBT Q08tc3BlY2lmaWMgKi8KKyAgICBuID0gcmRjaGsoZmQpOworICAgIGRlYnVnKEYxMDEsImluX2No ayByZGNoayIsIiIsbik7CisjZWxzZSAvKiBObyBSRENISyAqLworI2lmZGVmIFNFTEVDVAorI2lm ZGVmIFBsYW45CisgICAgLyogT25seSBhbGxvd3Mgc2VsZWN0IG9uIHRoZSBjb25zb2xlIC4uLiBk b24ndCBhc2sgKi8KKyAgICBpZiAoY2hhbm5lbCA9PSAwKQorI2VuZGlmIC8qIFBsYW45ICovCisg ICAgICB7CisJZmRfc2V0IHJmZHM7CQkJLyogUmVhZCBmaWxlIGRlc2NyaXB0b3JzICovCisjaWZk ZWYgQkVMTFYxMAorCUZEX1pFUk8ocmZkcyk7CQkJLyogSW5pdGlhbGl6ZSB0aGVtICovCisJRkRf U0VUKGZkLHJmZHMpOwkJLyogV2Ugd2FudCB0byBsb29rIGF0IHRoaXMgZmQgKi8KKyNlbHNlCisJ RkRfWkVSTygmcmZkcyk7CQkJLyogSW5pdGlhbGl6ZSB0aGVtICovCisJRkRfU0VUKGZkLCZyZmRz KTsJCS8qIFdlIHdhbnQgdG8gbG9vayBhdCB0aGlzIGZkICovCisJdHYudHZfc2VjID0gdHYudHZf dXNlYyA9IDBMOwkvKiBBIDAtdmFsdWVkIHRpbWV2YWwgc3RydWN0dXJlICovCisjZW5kaWYgLyog QkVMTFYxMCAqLworI2lmZGVmIFBsYW45CisJbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMs IChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIFBs YW4gOSBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNpZmRlZiBCRUxMVjEwCisJbiA9IHNlbGVjdCgg MTI4LCByZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIDAgKTsKKwlkZWJ1ZyhGMTAxLCJp bl9jaGsgQkVMTFYxMCBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNpZmRlZiBCU0Q0NAorCW4gPSBz ZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diAp OworCWRlYnVnKEYxMDEsImluX2NoayBCU0Q0NCBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNpZmRl ZiBCU0Q0MworCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZk X3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImluX2NoayBCU0Q0MyBzZWxlY3QiLCIiLG4p OworI2Vsc2UKKyNpZmRlZiBTT0xBUklTCisJbiA9IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMs IChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIFNP TEFSSVMgc2VsZWN0IiwiIixuKTsKKyNlbHNlCisjaWZkZWYgUU5YNgorCW4gPSBzZWxlY3QoIEZE X1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVn KEYxMDEsImluX2NoayBRTlg2IHNlbGVjdCIsIiIsbik7CisjZWxzZQorI2lmZGVmIFFOWAorCW4g PSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0 diApOworCWRlYnVnKEYxMDEsImluX2NoayBRTlggc2VsZWN0IiwiIixuKTsKKyNlbHNlCisjaWZk ZWYgQ09IRVJFTlQKKwluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAs IChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgQ09IRVJFTlQgc2VsZWN0 IiwiIixuKTsKKyNlbHNlCisjaWZkZWYgU1ZSNAorCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZy ZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImluX2No ayBTVlI0IHNlbGVjdCIsIiIsbik7CisjZWxzZQorI2lmZGVmIF9fbGludXhfXworCW4gPSBzZWxl Y3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOwor CWRlYnVnKEYxMDEsImluX2NoayBMSU5VWCBzZWxlY3QiLCIiLG4pOworI2lmZGVmIE9TRgorCW4g PSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0 diApOworCWRlYnVnKEYxMDEsImluX2NoayBPU0Ygc2VsZWN0IiwiIixuKTsKKyNlbHNlCisJbiA9 IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChpbnQgKikwLCAoaW50ICopMCwgJnR2ICk7CisJ ZGVidWcoRjEwMSwiaW5fY2hrIGNhdGNoYWxsIHNlbGVjdCIsIiIsbik7CisjZW5kaWYgLyogT1NG ICovCisjZW5kaWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8q IENPSEVSRU5UICovCisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogUU5YNiAqLworI2VuZGlm IC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBCU0Q0MyAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisj ZW5kaWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIFBsYW45ICovCisgICAgfQorI2Vsc2UgIC8q IE5vdCBTRUxFQ1QgKi8KKyNpZmRlZiBDS19QT0xMCisgICAgeworICAgICAgc3RydWN0IHBvbGxm ZCBwZmQ7CisKKyAgICAgIHBmZC5mZCA9IGZkOworICAgICAgcGZkLmV2ZW50cyA9IFBPTExJTjsK KyAgICAgIHBmZC5yZXZlbnRzID0gMDsKKyAgICAgIG4gPSBwb2xsKCZwZmQsIDEsIDApOworICAg ICAgZGVidWcoRjEwMSwiaW5fY2hrIHBvbGwiLCIiLG4pOworICAgICAgaWYgKChuID4gMCkgJiYg KHBmZC5yZXZlbnRzICYgUE9MTElOKSkKKwluID0gMTsKKyAgICB9CisjZW5kaWYgLyogQ0tfUE9M TCAqLworI2VuZGlmIC8qIFNFTEVDVCAqLworI2VuZGlmIC8qIFJEQ0hLICovCisjZW5kaWYgLyog UFJPVlgxICovCisjZW5kaWYgLyogVjcgKi8KKyNlbmRpZiAvKiBGSU9OUkVBRCAqLworCisvKiBG cm9tIGhlcmUgZG93biwgdHJlYXQgY29uc29sZSBhbmQgY29tbXVuaWNhdGlvbiBkZXZpY2UgZGlm ZmVyZW50bHkuLi4gKi8KKworICAgIGlmIChjaGFubmVsID09IDApIHsJCQkvKiBDb25zb2xlICov CisKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZm5kZWYgRklPTlJFQUQKKyNpZm5kZWYgU0VMRUNUCisj aWZuZGVmIENLX1BPTEwKKyNpZm5kZWYgUkRDSEsKKy8qCisgIFRoaXMgaXMgdGhlIGhpZGVvdXMg aGFjayB1c2VkIGluIFN5c3RlbSBWIGFuZCBQT1NJWCBzeXN0ZW1zIHRoYXQgZG9uJ3QKKyAgc3Vw cG9ydCBGSU9OUkVBRCwgcmRjaGsoKSwgc2VsZWN0KCksIHBvbGwoKSwgZXRjLCBpbiB3aGljaCB0 aGUgdXNlcidzCisgIENPTk5FQ1QtbW9kZSBlc2NhcGUgY2hhcmFjdGVyIGlzIGF0dGFjaGVkIHRv IFNJR1FVSVQuICBVc2VkLCBvYnZpb3VzbHksCisgIG9ubHkgb24gdGhlIGNvbnNvbGUuCisqLwor CWlmIChjb25lc2MpIHsJCQkvKiBFc2NhcGUgY2hhcmFjdGVyIHR5cGVkID09IFNJR1FVSVQgKi8K KwkgICAgZGVidWcoRjEwMCwiaW5fY2hrIGNvbmVzYyIsIiIsY29uZXNjKTsKKwkgICAgY29uZXNj ID0gMDsKKwkgICAgc2lnbmFsKFNJR1FVSVQsZXNjdHJwKTsJLyogUmVzdG9yZSBzaWduYWwgKi8K KwkgICAgbiArPSAxOworCX0KKyNlbmRpZiAvKiBSRENISyAqLworI2VuZGlmIC8qIENLX1BPTEwg Ki8KKyNlbmRpZiAvKiBTRUxFQ1QgKi8KKyNlbmRpZiAvKiBGSU9OUkVBRCAqLworI2VuZGlmIC8q IFNWT1JQT1NJWCAqLworCisJcmV0dXJuKG4pOwkJCS8qIERvbmUgd2l0aCBjb25zb2xlICovCisg ICAgfQorCisgICAgaWYgKGNoYW5uZWwgIT0gMCkgewkJCS8qIENvbW11bmljYXRpb25zIGNvbm5l Y3Rpb24gKi8KKworI2lmZGVmIE1ZUkVBRAorI2lmbmRlZiBGSU9OUkVBRAorLyoKKyAgc2VsZWN0 KCkgb3IgcmRjaGsoKSwgZXRjLCBoYXMgdG9sZCB1cyB0aGF0IHNvbWV0aGluZyBpcyB3YWl0aW5n LCBidXQgd2UKKyAgZG9uJ3Qga25vdyBob3cgbXVjaC4gIFNvIHdlIGRvIGEgcmVhZCB0byBnZXQg aXQgYW5kIHRoZW4gd2Uga25vdy4gIE5vdGU6CisgIFRoaXMgcmVhZCBpcyBOT1Qgbm9uYmxvY2tp bmcgaWYgbm90aGluZyBpcyB0aGVyZSAoYmVjYXVzZSBvZiBWTUlOPTEpLCBidXQKKyAgaXQgc2hv dWxkIGJlIHNhZmUgaW4gdGhpcyBjYXNlIHNpbmNlIHRoZSBPUyB0ZWxscyB1cyBhdCBsZWFzdCBv bmUgYnl0ZSBpcworICB3YWl0aW5nIHRvIGJlIHJlYWQsIGFuZCBNWVJFQUQgcmVhZHMgcmV0dXJu IGFzIG11Y2ggYXMgaXMgdGhlcmUgd2l0aG91dAorICB3YWl0aW5nIGZvciBhbnkgbW9yZS4gIENv bnRyb2xsZWQgdGVzdHMgb24gU29sYXJpcyBhbmQgVW5peHdhcmUgKHdpdGgKKyAgRklPTlJFQUQg ZGVsaWJlcmF0ZWx5IHVuZGVmaW5lZCkgc2hvdyB0aGlzIHRvIGJlIHRydWUuCisqLworCWRlYnVn KEYxMDEsImluX2NoayByZWFkIG15X2NvdW50IiwiIixteV9jb3VudCk7CisJZGVidWcoRjEwMSwi aW5fY2hrIHJlYWQgbiIsIiIsbik7CisJaWYgKG4gPiAwICYmIG15X2NvdW50ID09IDApIHsKKwkg ICAgLyogVGhpcyBhbHNvIGNhdGNoZXMgZGlzY29ubmVjdHMgZXRjICovCisJICAgIC8qIERvIHdo YXQgbXlnZXRidWYgZG9lcyBleGNlcHQgZG9uJ3QgZ3JhYiBhIGNoYXJhY3RlciAqLworCSAgICBt eV9jb3VudCA9IG15ZmlsbGJ1ZigpOworCSAgICBteV9pdGVtID0gLTE7CQkvKiBeXl4gKi8KKwkg ICAgZGVidWcoRjEwMSwiaW5fY2hrIG15ZmlsbGJ1ZiBteV9jb3VudCIsIiIsbXlfY291bnQpOwor CSAgICBpZiAobXlfY291bnQgPCAwKQorCSAgICAgIHJldHVybigtMSk7CisJICAgIGVsc2UKKwkg ICAgICBuID0gMDsJCQkvKiBOQjogbiBpcyByZXBsYWNlZCBieSBteV9jb3VudCAqLworCX0KKyNl bmRpZiAvKiBGSU9OUkVBRCAqLworLyoKKyAgSGVyZSB3ZSBhZGQgd2hhdGV2ZXIgd2UgdGhpbmsg aXMgdW5yZWFkIHRvIHdoYXQgaXMgc3RpbGwgaW4gb3VyCisgIG91ciBpbnRlcm5hbCBidWZmZXIu ICBUaHVzIHRoZSBpbXBvcnRhbmNlIG9mIHNldHRpbmcgbiB0byAwIGp1c3QgYWJvdmUuCisqLwor CWRlYnVnKEYxMDEsImluX2NoayBteV9jb3VudCIsIiIsbXlfY291bnQpOworCWRlYnVnKEYxMDEs ImluX2NoayBuIiwiIixuKTsKKwlpZiAobXlfY291bnQgPiAwKQorCSAgbiArPSBteV9jb3VudDsK KyNlbmRpZiAvKiBNWVJFQUQgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwiaW5fY2hrIHJlc3Vs dCIsIiIsbik7CisKKyAgICAvKiBFcnJvcnMgaGVyZSBkb24ndCBwcm92ZSB0aGUgY29ubmVjdGlv biBoYXMgZHJvcHBlZCBzbyBqdXN0IHNheSAwICovCisKKyAgICByZXR1cm4obiA8IDAgPyAwIDog bik7Cit9CisKKworLyogIFQgVCBDIEggSyAgLS0gIFRlbGwgaG93IG1hbnkgY2hhcmFjdGVycyBh cmUgd2FpdGluZyBpbiB0dHkgaW5wdXQgYnVmZmVyICAqLworCitpbnQKK3R0Y2hrKCkgeworICAg IGludCBmZDsKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZGlu OworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisgICAg cmV0dXJuKGluX2NoaygxLGZkKSk7Cit9CisKKy8qICBUIFQgWCBJIE4gIC0tICBHZXQgbiBjaGFy YWN0ZXJzIGZyb20gdHR5IGlucHV0IGJ1ZmZlciAgKi8KKworLyogIFJldHVybnMgbnVtYmVyIG9m IGNoYXJhY3RlcnMgYWN0dWFsbHkgZ290dGVuLCBvciAtMSBvbiBmYWlsdXJlICAqLworCisvKiAg SW50ZW5kZWQgZm9yIHVzZSBvbmx5IHdoZW4gaXQgaXMga25vd24gdGhhdCBuIGNoYXJhY3RlcnMg YXJlIGFjdHVhbGx5ICovCisvKiAgQXZhaWxhYmxlIGluIHRoZSBpbnB1dCBidWZmZXIuICAqLwor CitpbnQKK3R0eGluKG4sYnVmKSBpbnQgbjsgQ0hBUiAqYnVmOyB7CisgICAgcmVnaXN0ZXIgaW50 IHggPSAwLCBjID0gLTI7CisjaWZkZWYgVFRMRUJVRgorICAgIHJlZ2lzdGVyIGludCBpID0gMDsK KyNlbmRpZiAvKiBUVExFQlVGICovCisgICAgaW50IGZkOworCisgICAgaWYgKG4gPCAxKQkJCQkv KiBOb3RoaW5nIHRvIGRvICovCisgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBUVExFQlVGCisg ICAgaWYgKHR0cHVzaCA+PSAwKSB7CisgICAgICAgIGJ1ZlswXSA9IHR0cHVzaDsJCS8qIFB1dCBw dXNoZWQgY2hhciBpbiBidWZmZXIqLworICAgICAgICB0dHB1c2ggPSAtMTsJCQkvKiBDbGVhciB0 aGUgcHVzaCBidWZmZXIgKi8KKyAgICAgICAgaWYgKHR0Y2hrKCkgPiAwKQorCSAgcmV0dXJuKHR0 eGluKG4tMSwgJmJ1ZlsxXSkgKyAxKTsKKyAgICAgICAgZWxzZQorCSAgcmV0dXJuKDEpOworICAg IH0KKyAgICBpZiAobGVfZGF0YSkgeworICAgICAgICB3aGlsZSAobGVfaW5idWYoKSA+IDApIHsK KwkgICAgaWYgKGxlX2dldGNoYXIoJmJ1ZltpXSkpIHsKKyAgICAgICAgICAgICAgICBpKys7Cisg ICAgICAgICAgICAgICAgbi0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm ICh0dGNoaygpID4gMCkKKwkgIHJldHVybih0dHhpbihuLCZidWZbaV0pK2kpOworICAgICAgICBl bHNlCisJICByZXR1cm4oaSk7CisgICAgfQorI2VuZGlmIC8qIFRUTEVCVUYgKi8KKworI2lmZGVm IE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZkaW47CisgICAgZWxzZQorI2Vu ZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0dHlmZDsKKworI2lmZGVmIFNVTlgyNQorICAg IGlmIChuZXRjb25uICYmICh0dG5ldCA9PSBORVRfU1gyNSkpCS8qIFguMjUgY29ubmVjdGlvbiAq LworICAgICAgcmV0dXJuKHgyNXhpbihuLGJ1ZikpOworI2VuZGlmIC8qIFNVTlgyNSAqLworCisj aWZkZWYgSUJNWDI1CisgICAgLyogcmllaG06IHBvc3NpYmx5IG5vdCBuZWVkZWQuIFRlc3Qgd29y a2VkIHdpdGggbm9ybWFsIHJlYWRzIGFuZCB3cml0ZXMgKi8KKyAgICBpZiAobmV0Y29ubiAmJiAo dHRuZXQgPT0gTkVUX0lYMjUpKQl7IC8qIFguMjUgY29ubmVjdGlvbiAqLworCXggPSB4MjV4aW4o bixidWYpOworCWlmICh4ID4gMCkgYnVmW3hdID0gJ1wwJzsKKwlyZXR1cm4oeCk7CisgICAgfQor I2VuZGlmIC8qIElCTVgyNSAqLworCisjaWZkZWYgTVlSRUFECisgICAgZGVidWcoRjEwMSwidHR4 aW4gTVlSRUFEIiwiIixuKTsKKyAgICB3aGlsZSAoeCA8IG4pIHsKKwljID0gbXlyZWFkKCk7CisJ aWYgKGMgPCAwKSB7CisJICAgIGRlYnVnKEYxMDEsInR0eGluIG15cmVhZCByZXR1cm5zIiwiIixj KTsKKwkgICAgaWYgKGMgPT0gLTMpIHggPSAtMTsKKwkgICAgYnJlYWs7CisgICAgICAgIH0KKwli dWZbeCsrXSA9IGMgJiB0dHBtc2s7CisjaWZkZWYgUkxPR0NPREUKKyNpZmRlZiBDS19LRVJCRVJP UworICAgICAgICAvKiBJdCBpcyBpbXBvc3NpYmxlIHRvIGtub3cgaG93IG1hbnkgY2hhcmFjdGVy cyBhcmUgd2FpdGluZyAqLworICAgICAgICAvKiB0byBiZSByZWFkIHdoZW4geW91IGFyZSB1c2lu ZyBFbmNyeXB0ZWQgUmxvZ2luIG9yIFNTTCAgICAqLworICAgICAgICAvKiBhcyB0aGUgdHJhbnNw b3J0IHNpbmNlIHRoZSBudW1iZXIgb2YgcmVhbCBkYXRhIGJ5dGVzICAgICAqLworICAgICAgICAv KiBjYW4gYmUgZ3JlYXRlciBvciBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyBvbiB0aGUg ICAqLworICAgICAgICAvKiB3aXJlIHdoaWNoIGlzIHdoYXQgdHRjaGsoKSByZXR1cm5zLiAgICAg ICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAobmV0Y29ubiAmJiAodHRucHJvdG8gPT0g TlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pKQorCSAgaWYgKHR0Y2hrKCkg PD0gMCkKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAvKiBS TE9HQ09ERSAqLworI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8 IHRsc19hY3RpdmVfZmxhZykKKwkgIGlmICh0dGNoaygpIDw9IDApCisJICAgIGJyZWFrOworI2Vu ZGlmIC8qIENLX1NTTCAqLworICAgIH0KKyNlbHNlCisgICAgZGVidWcoRjEwMSwidHR4aW4gUkVB RCIsIiIsbik7CisgICAgeCA9IHJlYWQoZmQsYnVmLG4pOworICAgIGZvciAoYyA9IDA7IGMgPCBu OyBjKyspCQkvKiBTdHJpcCBhbnkgcGFyaXR5ICovCisgICAgICBidWZbY10gJj0gdHRwbXNrOwor I2VuZGlmIC8qIE1ZUkVBRCAqLworCisgICAgZGVidWcoRjEwMSwidHR4aW4geCIsIiIseCk7CQkv KiBEb25lICovCisgICAgaWYgKHggPiAwKSBidWZbeF0gPSAnXDAnOworICAgIGlmICh4IDwgMCkg eCA9IC0xOworICAgIHJldHVybih4KTsKK30KKworLyogIFQgVCBPIEwgIC0tICBXcml0ZSBzdHJp bmcgcywgbGVuZ3RoIG4sIHRvIGNvbW11bmljYXRpb24gZGV2aWNlLiAgKi8KKy8qCisgIFJldHVy bnM6CisgICA+PSAwIG9uIHN1Y2Nlc3MsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IHdy aXR0ZW4uCisgICAtMSBvbiBmYWlsdXJlLgorKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCitDSEFS ICogeHBhY2tldCA9IE5VTEw7CitpbnQgbnhwYWNrZXQgPSAwOworI2VuZGlmIC8qIENLX0VOQ1JZ UFRJT04gKi8KKworI2RlZmluZSBUVE9MTUFYVCA1CitpbnQKK3R0b2wocyxuKSBpbnQgbjsgQ0hB UiAqczsgeworICAgIGludCB4LCBsZW4sIHRyaWVzLCBmZDsKKyNpZmRlZiBDS1hYQ0hBUgorICAg IGV4dGVybiBpbnQgZGJsZmxhZzsJCQkvKiBGb3IgU0VUIFNFTkQgRE9VQkxFLUNIQVJBQ1RFUiAq LworICAgIGV4dGVybiBzaG9ydCBkYmx0W107CisgICAgQ0hBUiAqcCA9IE5VTEwsICpwMiwgKnMy LCBjOworICAgIGludCBuMiA9IDA7CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKworICAgIGlmICh0 dHlmZCA8IDApCQkJLyogTm90IG9wZW4/ICovCisgICAgICByZXR1cm4oLTMpOworI2lmZGVmIERF QlVHCisgICAgaWYgKGRlYmxvZykgeworCS8qIGRlYnVnKEYxMDEsInR0b2wgdHR5ZmQiLCIiLHR0 eWZkKTsgKi8KKwlja2hleGR1bXAoInR0b2wgcyIscyxuKTsKKyAgICB9CisjZW5kaWYgLyogREVC VUcgKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZkb3V0 OworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0gdHR5ZmQ7CisKKyNp ZmRlZiBDS1hYQ0hBUgorLyogIERvdWJsZSBhbnkgY2hhcmFjdGVycyB0aGF0IG11c3QgYmUgZG91 YmxlZC4gICovCisgICAgZGVidWcoRjEwMSwidHRvbCBkYmxmbGFnIiwiIixkYmxmbGFnKTsKKyAg ICBpZiAoZGJsZmxhZykgeworCXAgPSAoQ0hBUiAqKSBtYWxsb2MobiArIG4gKyAxKTsKKwlpZiAo cCkgeworCSAgICBzMiA9IHM7CisJICAgIHAyID0gcDsKKwkgICAgbjIgPSAwOworCSAgICB3aGls ZSAoKnMyKSB7CisJCWMgPSAqczIrKzsKKwkJKnAyKysgPSBjOworCQluMisrOworCQlpZiAoZGJs dFsodW5zaWduZWQpIGNdICYgMikgeworCQkgICAgKnAyKysgPSBjOworCQkgICAgbjIrKzsKKwkJ fQorCSAgICB9CisJICAgIHMgPSBwOworCSAgICBuID0gbjI7CisJICAgIHNbbl0gPSAnXDAnOwor CX0KKyNpZmRlZiBERUJVRworICAgICAgICBja2hleGR1bXAoInR0b2wgZG91YmxlZCBzIixzLG4p OworI2VuZGlmIC8qIERFQlVHICovCisgICAgfQorI2VuZGlmIC8qIENLWFhDSEFSICovCisKKyAg ICB0cmllcyA9IFRUT0xNQVhUOwkJCS8qIEFsbG93IHVwIHRvIHRoaXMgbWFueSB0cmllcyAqLwor ICAgIGxlbiA9IG47CQkJCS8qIFJlbWVtYmVyIG9yaWdpbmFsIGxlbmd0aCAqLworCisjaWZkZWYg Q0tfRU5DUllQVElPTgorLyoKKyAgVGhpcyBpcyB0byBhdm9pZCBlbmNyeXB0aW5nIGEgcGFja2V0 IHRoYXQgaXMgYWxyZWFkeSBlbmNyeXB0ZWQsIGUuZy4KKyAgd2hlbiB3ZSByZXNlbmQgYSBwYWNr ZXQgZGlyZWN0bHkgb3V0IG9mIHRoZSBwYWNrZXQgYnVmZmVyLCBhbmQgYWxzbyB0bworICBhdm9p ZCBlbmNyeXB0aW5nIGEgY29uc3RhbnQgKGxpdGVyYWwpIHN0cmluZywgd2hpY2ggY2FuIGNhdXNl IGEgbWVtb3J5CisgIGZhdWx0LgorKi8KKyAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBU SU9OKSkgeworCWludCB4OworCWlmIChueHBhY2tldCA8IG4pIHsKKwkgICAgaWYgKHhwYWNrZXQp IHsKKwkJZnJlZSh4cGFja2V0KTsKKwkJeHBhY2tldCA9IE5VTEw7CisJCW54cGFja2V0ID0gMDsK KwkgICAgfQorCSAgICB4ID0gbiA+IDEwMjQwID8gbiA6IDEwMjQwOworCSAgICB4cGFja2V0ID0g KENIQVIgKiltYWxsb2MoeCk7CisJICAgIGlmICgheHBhY2tldCkgeworCQlmcHJpbnRmKHN0ZGVy ciwidHRvbCBtYWxsb2MgZmFpbHVyZVxuIik7CisJCXJldHVybigtMSk7CisJICAgIH0gZWxzZQor CSAgICAgIG54cGFja2V0ID0geDsKKwl9CisJbWVtY3B5KChjaGFyICopeHBhY2tldCwoY2hhciAq KXMsbik7CisJcyA9IHhwYWNrZXQ7CisJY2tfdG5fZW5jcnlwdCgoY2hhciAqKXMsbik7CisgICAg fQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworICAgIHdoaWxlIChuID4gMCAmJgorCSAg ICh0cmllcy0tID4gMAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKwkgICAgLyoga2VlcCB0cnlpbmcg aWYgd2UgYXJlIGVuY3J5cHRpbmcgKi8KKwkgICAgfHwgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBU SU9OKQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICkpIHsJCQkvKiBC ZSBwZXJzaXN0ZW50ICovCisJZGVidWcoRjEwMSwidHRvbCB0cnkiLCIiLFRUT0xNQVhUIC0gdHJp ZXMpOworI2lmZGVmIEJFT1NPUkJFQk9YCisgICAgICAgIGlmIChuZXRjb25uICYmICF0dHBpcGUg JiYgIXR0cHR5KQorCSAgeCA9IG5ldHRvbCgoY2hhciAqKXMsbik7CS8qIFdyaXRlIHN0cmluZyB0 byBkZXZpY2UgKi8KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisjaWZk ZWYgSUJNWDI1CisJICBpZiAodHRuZXQgPT0gTkVUX0lYMjUpCisJICAgIC8qCisJICAgICAqIHRo aXMgaXMgYSBtb3JlIGNvbnRyb2xsZWQgd2F5IG9mIHdyaXRpbmcgdG8gWDI1CisJICAgICAqIFNU UkVBTVMsIGhvd2V2ZXIgd3JpdGUgc2hvdWxkIGFsc28gd29yayEKKwkgICAgICovCisJICAgIHgg PSB4MjV3cml0ZSh0dHlmZCwgcywgbik7CisJICBlbHNlCisjZW5kaWYgLyogSUJNWDI1ICovCisj aWZkZWYgQ0tfU1NMCisJICAgIGlmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFn KSB7CisJCWludCBlcnJvcjsKKwkJLyogV3JpdGUgdXNpbmcgU1NMICovCisgICAgICAgICAgICAg ICAgc3NsX3JldHJ5OgorCQlpZiAoc3NsX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgICAgICAg eCA9IFNTTF93cml0ZShzc2xfY29uLCBzLCBuKTsKKwkJZWxzZQorICAgICAgICAgICAgICAgICAg eCA9IFNTTF93cml0ZSh0bHNfY29uLCBzLCBuKTsKKwkJc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNz bF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24seCkpIHsKKyAgICAgICAgICAgICAgICBjYXNl IFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBuKQorCQkgICAg ICByZXR1cm4obGVuKTsKKyAgICAgICAgICAgICAgICAgICAgcyArPSB4OworICAgICAgICAgICAg ICAgICAgICBuIC09IHg7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OworCQkg IGNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisJCSAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFE OgorCQkgICAgeCA9IDA7CisJCSAgICBicmVhazsKKwkJICBjYXNlIFNTTF9FUlJPUl9TWVNDQUxM OgorICAgICAgICAgICAgICAgICAgICBpZiAoeCAhPSAwKQorCQkgICAgICByZXR1cm4oLTEpOwor CQkgIGNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisJCSAgY2FzZSBTU0xfRVJST1Jf U1NMOgorCQkgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorCQkgIGRlZmF1bHQ6CisJCSAg ICB0dGNsb3MoMCk7CisJCSAgICByZXR1cm4oLTMpOworCQl9CisJICAgIH0gZWxzZQorI2VuZGlm IC8qIENLX1NTTCAqLworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNAorI2lmZGVmIFJM T0dDT0RFCisJICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworCQlyZXR1cm4oa3Ji NF9kZXNfd3JpdGUodHR5ZmQscyxuKSk7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIFJMT0dDT0RF ICovCisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAg ICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgICAgICAgICAg cmV0dXJuKGtyYjVfZGVzX3dyaXRlKHR0eWZkLChjaGFyICopcyxuLDApKTsKKyAgICAgICAgICAg IH0gZWxzZQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgS1JCNV9VMlUKKyAgICAgICAg ICAgIGlmICh0dG5wcm90byA9PSBOUF9LNVUyVSkgeworICAgICAgICAgICAgICAgIHJldHVybihr cmI1X3UydV93cml0ZSh0dHlmZCwoY2hhciAqKXMsbikpOworICAgICAgICAgICAgfSBlbHNlCisj ZW5kaWYgLyogS1JCNV9VMlUgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VS QkVST1MgKi8KKwkgICAgICB4ID0gd3JpdGUoZmQscyxuKTsJLyogV3JpdGUgc3RyaW5nIHRvIGRl dmljZSAqLworCisJaWYgKHggPT0gbikgewkJCS8qIFdvcmtlZD8gKi8KKwkgICAgZGVidWcoRjEw MSwidHRvbCBvayIsIiIseCk7CS8qIE9LICovCisjaWZkZWYgQ0tYWENIQVIKKwkgICAgaWYgKHAp IGZyZWUocCk7CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKwkgICAgcmV0dXJuKGxlbik7CQkvKiBE b25lICovCisJfSBlbHNlIGlmICh4IDwgMCkgewkJLyogTm8sIGdvdCBlcnJvcj8gKi8KKwkgICAg ZGVidWcoRjEwMSwidHRvbCB3cml0ZSBlcnJvciIsIiIsZXJybm8pOworI2lmZGVmIEVXT1VMREJM T0NLCisJICAgIGlmIChlcnJubyA9PSBFV09VTERCTE9DSykgeworCQltc2xlZXAoMTApOworCQlj b250aW51ZTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogRVdPVUxEQkxPQ0sgKi8KKyNpZmRlZiBU Q1BTT0NLRVQKKwkgICAgaWYgKG5ldGNvbm4gJiYgdHRuZXQgPT0gTkVUX1RDUEIpIHsKKwkJZGVi dWcoRjEwMSwidHRvbCBUQ1AgZXJyb3IiLCIiLGVycm5vKTsKKwkJdHRjbG9zKDApOwkJLyogQ2xv c2UgdGhlIGNvbm5lY3Rpb24uICovCisJCXggPSAtMzsKKwkgICAgfQorI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworI2lmZGVmIENLWFhDSEFSCisJICAgIGlmIChwKSBmcmVlKHApOworI2VuZGlmIC8q IENLWFhDSEFSICovCisJICAgIHJldHVybih4KTsKKwl9IGVsc2UgewkJCS8qIE5vIGVycm9yLCBz byBwYXJ0aWFsIHN1Y2Nlc3MgKi8KKwkgICAgZGVidWcoRjEwMSwidHRvbCBwYXJ0aWFsIiwiIix4 KTsgLyogVGhpcyBuZXZlciBoYXBwZW5zICovCisJICAgIHMgKz0geDsJCQkvKiBQb2ludCB0byBw YXJ0IG5vdCB3cml0dGVuIHlldCAqLworCSAgICBuIC09IHg7CQkJLyogQWRqdXN0IGxlbmd0aCAq LworCSAgICBpZiAoeCA+IDApIG1zbGVlcCgxMCk7CS8qIFdhaXQgMTAgbXNlYyAqLworCX0JCQkJ LyogR28gYmFjayBhbmQgdHJ5IGFnYWluICovCisgICAgfQorI2lmZGVmIENLWFhDSEFSCisgICAg aWYgKHApIGZyZWUocCk7CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKyAgICByZXR1cm4obiA8IDEg PyBsZW4gOiAtMSk7CQkvKiBSZXR1cm4gdGhlIHJlc3VsdHMgKi8KK30KKworLyogIFQgVCBPIEMg IC0tICBPdXRwdXQgYSBjaGFyYWN0ZXIgdG8gdGhlIGNvbW11bmljYXRpb24gbGluZSAgKi8KKwor LyoKKyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGludGVyYWN0aXZlLCBj aGFyYWN0ZXItbW9kZSBvcGVyYXRpb25zLAorIGxpa2UgdGVybWluYWwgY29ubmVjdGlvbiwgc2Ny aXB0IGV4ZWN1dGlvbiwgZGlhbGVyIGkvbywgd2hlcmUgdGhlIG92ZXJoZWFkCisgb2YgdGhlIHNp Z25hbHMgYW5kIGFsYXJtcyBkb2VzIG5vdCBjcmVhdGUgYSBib3R0bGVuZWNrLgorKi8KK2ludAor I2lmZGVmIENLX0FOU0lDCit0dG9jKGNoYXIgYykKKyNlbHNlCit0dG9jKGMpIGNoYXIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogdHRvYyAqLyB7CisjZGVmaW5lIFRUT0NfVE1PIDE1CQkJ LyogVGltZW91dCBpbiBjYXNlIHdlIGdldCBzdHVjayAqLworICAgIGludCB4eCwgZmQ7CisKKyAg ICBpZiAodHR5ZmQgPCAwKQkJCS8qIENoZWNrIGZvciBub3Qgb3Blbi4gKi8KKyAgICAgIHJldHVy bigtMSk7CisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZG91 dDsKKyAgICBlbHNlCisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisg ICAgYyAmPSAweGZmOworICAgIC8qIGRlYnVnKEYxMDEsInR0b2MiLCIiLChDSEFSKSBjKTsgKi8K KyAgICBzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRpbWVyaCk7CS8qIEVuYWJsZSB0aW1lciBpbnRl cnJ1cHQgKi8KKyAgICB4eCA9IGFsYXJtKFRUT0NfVE1PKTsJCS8qIGZvciB0aGlzIG1hbnkgc2Vj b25kcy4gKi8KKyAgICBpZiAoeHggPCAwKSB4eCA9IDA7CQkJLyogU2F2ZSBvbGQgYWxhcm0gdmFs dWUuICovCisgICAgLyogZGVidWcoRjEwMSwidHRvYyBhbGFybSIsIiIseHgpOyAqLworICAgIGlm ICgKKyNpZmRlZiBDS19QT1NJWF9TSUcKKwlzaWdzZXRqbXAoc2pidWYsMSkKKyNlbHNlCisJc2V0 am1wKHNqYnVmKQorI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCSkgewkJLyogVGltZXIgd2Vu dCBvZmY/ICovCisJdHRpbW9mZigpOwkJCS8qIFllcywgY2FuY2VsIHRoaXMgYWxhcm0uICovCisJ aWYgKHh4IC0gVFRPQ19UTU8gPiAwKSBhbGFybSh4eCAtIFRUT0NfVE1PKTsgLyogUmVzdG9yZSBw cmV2aW91cyBvbmUgKi8KKyAgICAgICAgLyogZGVidWcoRjEwMCwidHRvYyB0aW1lb3V0IiwiIiww KTsgKi8KKyNpZmRlZiBORVRDT05OCisJaWYgKCFuZXRjb25uKSB7CisjZW5kaWYgLyogTkVUQ09O TiAqLworCSAgICBkZWJ1ZyhGMTAxLCJ0dG9jIHRpbWVvdXQiLCIiLGMpOworCSAgICBpZiAodHRm bG93ID09IEZMT19YT05YKSB7CisJCWRlYnVnKEYxMDEsInR0b2MgZmxvdyIsIiIsdHRmbG93KTsg LyogTWF5YmUgd2UncmUgeG9mZidkICovCisjaWZuZGVmIFBsYW45CisjaWZkZWYgUE9TSVgKKwkJ LyogUE9TSVggd2F5IHRvIHVuc3RpY2suICovCisJCWRlYnVnKEYxMDAsInR0b2MgdGNmbG93Iiwi Iix0Y2Zsb3codHR5ZmQsVENPT04pKTsKKyNlbHNlCisjaWZkZWYgQlNENAkJCQkvKiBCZXJrZWxl eSB3YXkgdG8gZG8gaXQuICovCisjaWZkZWYgVElPQ1NUQVJUCisvKiAuLi4uIFVzZWQgdG8gYmUg ImlvY3RsKHR0eWZkLCBUSU9DU1RBUlQsIDApOyIuICBXaG8ga25vd3M/ICovCisJCXsKKwkJICBp bnQgeCA9IDA7CisJCSAgZGVidWcoRjEwMSwidHRvYyBUSU9DU1RBUlQiLCIiLGlvY3RsKHR0eWZk LCBUSU9DU1RBUlQsICZ4KSk7CisJCX0KKyNlbmRpZiAvKiBUSU9DU1RBUlQgKi8KKyNlbmRpZiAv KiBCU0Q0ICovCisJCQkJCS8qIElzIHRoZXJlIGEgU3lzIFYgd2F5IHRvIGRvIHRoaXM/ICovCisj ZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworCSAgICB9CisjaWZkZWYgTkVU Q09OTgorICAgICAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCXJldHVybigtMSk7CQkJLyog UmV0dXJuIGZhaWx1cmUgY29kZS4gKi8KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgcmM7Cisj aWZkZWYgQkVPU09SQkVCT1gKKyNpZmRlZiBORVRDT05OCisgICAgICAgIGlmIChuZXRjb25uICYm ICF0dHBpcGUgJiYgIXR0cHR5KQorCSAgcmMgPSBuZXR0b2MoYyk7CisgICAgICAgIGVsc2UKKyNl bmRpZiAvKiAgQkVPU09SQkVCT1ggKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisjaWZkZWYgQ0tf RU5DUllQVElPTgorCSAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCisJICAgIGNr X3RuX2VuY3J5cHQoJmMsMSk7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIElC TVgyNQorCS8qIHJpZWhtOiBtYXliZSB0aGlzIGlzbid0IG5lY2Vzc2FyeSBhZnRlciBhbGwuIFRl c3QgcHJvZ3JhbQorCSAqIHdvcmtlZCBmaW5lIHdpdGggZGF0YSBiZWluZyBzZW50IGFuZCByZXRy aWV2ZWQgd2l0aCBub3JtYWwKKwkgKiByZWFkJ3MgYW5kIHdyaXRlcyEKKwkgKi8KKwlpZiAodHRu ZXQgPT0gTkVUX0lYMjUpCisJICByYyA9IHgyNXdyaXRlKHR0eWZkLCZjLDEpOyAvKiBhcyBhYm92 ZSBmb3IgWDI1IHN0cmVhbXMgKi8KKwllbHNlCisjZW5kaWYgLyogSUJNWDI1ICovCisjaWZkZWYg Q0tfU1NMCisJICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgeworCSAg ICAgIGludCBlcnJvcjsKKwkgICAgICAvKiBXcml0ZSB1c2luZyBTU0wgKi8KKwkgICAgICBpZiAo c3NsX2FjdGl2ZV9mbGFnKQorICAgICAgICAgICAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24s ICZjLCAxKTsKKwkgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmMgPSBTU0xfd3JpdGUodGxz X2NvbiwgJmMsIDEpOworCSAgICAgIHN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2Zs YWc/c3NsX2Nvbjp0bHNfY29uLHJjKSl7CisJCWNhc2UgU1NMX0VSUk9SX05PTkU6CisJCSAgYnJl YWs7CisJCWNhc2UgU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisJCWNhc2UgU1NMX0VSUk9SX1dBTlRf UkVBRDoKKwkJICByYyA9IDA7CisJCSAgYnJlYWs7CisJCWNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6 CisJCSAgaWYgKHJjICE9IDApCisJCSAgICByZXR1cm4oLTEpOworCQljYXNlIFNTTF9FUlJPUl9X QU5UX1g1MDlfTE9PS1VQOgorCQljYXNlIFNTTF9FUlJPUl9TU0w6CisJCWNhc2UgU1NMX0VSUk9S X1pFUk9fUkVUVVJOOgorCQlkZWZhdWx0OgorCQkgIHR0Y2xvcygwKTsKKwkJICByZXR1cm4oLTEp OworCSAgICAgIH0KKwkgIH0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIENLX0tF UkJFUk9TCisjaWZkZWYgS1JCNAorI2lmZGVmIFJMT0dDT0RFCisJICBpZiAodHRucHJvdG8gPT0g TlBfRUs0TE9HSU4pIHsKKwkgICAgICByYyA9IChrcmI0X2Rlc193cml0ZSh0dHlmZCwoY2hhciAq KSZjLDEpID09IDEpOworCSAgfSBlbHNlCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAv KiBLUkI0ICovCisjaWZkZWYgS1JCNQorI2lmZGVmIFJMT0dDT0RFCisgICAgICAgICAgaWYgKHR0 bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgICAgICAgIHJjID0gKGtyYjVfZGVzX3dy aXRlKHR0eWZkLCZjLDEsMCkgPT0gMSk7CisgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogUkxP R0NPREUgKi8KKyNpZmRlZiBLUkI1X1UyVQorICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9L NVUyVSkgeworICAgICAgICAgICAgICByYyA9IChrcmI1X3UydV93cml0ZSh0dHlmZCwmYywxKSA9 PSAxKTsKKyAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8q IEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCSAgICByYyA9IHdyaXRlKGZkLCZj LDEpOwkvKiBUcnkgdG8gd3JpdGUgdGhlIGNoYXJhY3Rlci4gKi8KKwlpZiAocmMgPCAxKSB7CQkJ LyogRmFpbGVkICovCisJICAgIHR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aGUgYWxhcm0uICov CisJICAgIGFsYXJtKHh4KTsJCQkvKiBSZXN0b3JlIHByZXZpb3VzIGFsYXJtLiAqLworCSAgICBk ZWJ1ZyhGMTAxLCJ0dG9jIGVycm5vIiwiIixlcnJubyk7IC8qIExvZyB0aGUgZXJyb3IsICovCisJ ICAgIHJldHVybigtMSk7CQkJLyogYW5kIHJldHVybiB0aGUgZXJyb3IgY29kZS4gKi8KKwl9Cisg ICAgfQorICAgIHR0aW1vZmYoKTsJCQkJLyogU3VjY2VzcywgdHVybiBvZmYgdGhlIGFsYXJtLiAq LworICAgIGFsYXJtKHh4KTsJCQkJLyogUmVzdG9yZSBwcmV2aW91cyBhbGFybS4gKi8KKyAgICBy ZXR1cm4oMCk7CQkJCS8qIFJldHVybiBnb29kIGNvZGUuICovCit9CisKKy8qICBUIFQgSSBOIEwg IC0tICBSZWFkIGEgcmVjb3JkICh1cCB0byBicmVhayBjaGFyYWN0ZXIpIGZyb20gY29tbSBsaW5l LiAgKi8KKy8qCisgIFJlYWRzIHVwIHRvICJtYXgiIGNoYXJhY3RlcnMgZnJvbSB0aGUgY29ubmVj dGlvbiwgdGVybWluYXRpbmcgb246CisgICAgKGEpIHRoZSBwYWNrZXQgbGVuZ3RoIGZpZWxkIGlm IHRoZSAidHVybiIgYXJndW1lbnQgaXMgemVybywgb3IKKyAgICAoYikgb24gdGhlIHBhY2tldC1l bmQgY2hhcmFjdGVyIChlb2wpIGlmIHRoZSAidHVybiIgYXJndW1lbnQgaXMgbm9uemVybworICAg IChjKSBhIGNlcnRhaW4gbnVtYmVyIG9mIEN0cmwtQydzIGluIGEgcm93CisKKyAgUmV0dXJuczoK KyAgICA+PSAwLCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCB1cG9uIHN1Y2Nlc3M7Cisg ICAgLTEgaWYgIm1heCIgZXhjZWVkZWQsIHRpbWVvdXQsIG9yIG90aGVyIGNvcnJlY3RhYmxlIGVy cm9yOworICAgIC0yIG9uIHVzZXIgaW50ZXJydXB0aW9uIChjKTsKKyAgICAtMyBvbiBmYXRhbCBl cnJvciBsaWtlIGNvbm5lY3Rpb24gbG9zdC4KKworICBUaGUgbmFtZSBvZiB0aGlzIHJvdXRpbmUg ZGF0ZXMgZnJvbSB0aGUgZWFybHkgZGF5cyB3aGVuIEtlcm1pdCBwYWNrZXRzCisgIHdlcmUsIGlu ZGVlZCwgYWx3YXlzIGxpbmVzIG9mIHRleHQuICBUaGF0IHdhcyBiZWZvcmUgY29udHJvbC1jaGFy YWN0ZXIKKyAgdW5wcmVmaXhpbmcgYW5kIGxlbmd0aC1kcml2ZW4gcGFja2V0IGZyYW1pbmcgd2Vy ZSBpbnRyb2R1Y2VkLCB3aGljaCB0aGlzCisgIHZlcnNpb24gaGFuZGxlLiAgTkI6IHRoaXMgcm91 dGluZSBpcyBPTkxZIGZvciByZWFkaW5nIGluY29taW5nIEtlcm1pdAorICBwYWNrZXRzLCBub3Ro aW5nIGVsc2UuICBUbyByZWFkIG90aGVyIGtpbmRzIG9mIGluY29taW5nIG1hdGVyaWFsLCB1c2UK KyAgdHRpbmMoKSBvciB0dHhpbigpLgorCisgIFRoZSBieXRlcyB0aGF0IHdlcmUgaW5wdXQgYXJl IGNvcGllZCBpbnRvICJkZXN0IiB3aXRoIHRoZWlyIHBhcml0eSBiaXRzCisgIHN0cmlwcGVkIGlm IHBhcml0eSB3YXMgc2VsZWN0ZWQuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4K KyAgQnl0ZXMgYWZ0ZXIgdGhlIGVvbCBhcmUgYXZhaWxhYmxlIHVwb24gdGhlIG5leHQgY2FsbCB0 byB0aGlzIGZ1bmN0aW9uLgorCisgIFRoZSBpZGVhIGlzIHRvIG1pbmltaXplIHRoZSBudW1iZXIg b2Ygc3lzdGVtIGNhbGxzIHBlciBwYWNrZXQsIGFuZCBhbHNvIHRvCisgIG1pbmltaXplIHRpbWVv dXRzLiAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgaW5uZXIgbG9vcCBvZiB0aGUgcHJvdG9jb2wgYW5k IG11c3QKKyAgYmUgYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlLiAgVGhlIGN1cnJlbnQgc3RyYXRl Z3kgaXMgdG8gdXNlIG15cmVhZCgpLCBhCisgIG1hY3JvIHRvIG1hbmFnZSBidWZmZXJlZCAoYW5k IGdlbmVyYWxseSBub25ibG9ja2luZykgcmVhZHMuCisKKyAgV0FSTklORzogVGhpcyBmdW5jdGlv biBjYWxscyBwYXJjaGsoKSwgd2hpY2ggaXMgZGVmaW5lZCBpbiBhbm90aGVyIG1vZHVsZS4KKyAg Tm9ybWFsbHksIGNrdXRpby5jIGRvZXMgbm90IGRlcGVuZCBvbiBjb2RlIGZyb20gYW55IG90aGVy IG1vZHVsZSwgYnV0IHRoZXJlCisgIGlzIGFuIGV4Y2VwdGlvbiBpbiB0aGlzIGNhc2UgYmVjYXVz ZSBhbGwgdGhlIG90aGVyIGNrP3Rpby5jIG1vZHVsZXMgYWxzbworICBuZWVkIHRvIGNhbGwgcGFy Y2hrKCksIHNvIGl0J3MgYmV0dGVyIHRvIGhhdmUgaXQgZGVmaW5lZCBpbiBhIGNvbW1vbiBwbGFj ZS4KKyovCisjaWZkZWYgQ1RSTEMKKyN1bmRlZiBDVFJMQworI2VuZGlmIC8qIENUUkxDICovCisj ZGVmaW5lIENUUkxDICdcMDMnCisvKgorICBXZSBoYXZlIGZvdXIgZGlmZmVyZW50IGRlY2xhcmF0 aW9ucyBoZXJlIGJlY2F1c2U6CisgIChhKSB0byBhbGxvdyBLZXJtaXQgdG8gYmUgYnVpbHQgd2l0 aG91dCB0aGUgYXV0b21hdGljIHBhcml0eSBzZW5zaW5nIGZlYXR1cmUKKyAgKGIpIG9uZSBvZiBl YWNoIHR5cGUgZm9yIEFOU0kgQywgb25lIGZvciBub24tQU5TSS4KKyovCisjaWZuZGVmIE5PWEZF UgorCitzdGF0aWMgaW50IHB1c2hlZGJhY2sgPSAwOworCitpbnQKKyNpZmRlZiBQQVJTRU5TRQor I2lmZGVmIENLX0FOU0lDCit0dGlubChDSEFSICpkZXN0LCBpbnQgbWF4LGludCB0aW1vLCBDSEFS IGVvbCwgQ0hBUiBzdGFydCwgaW50IHR1cm4pCisjZWxzZQordHRpbmwoZGVzdCxtYXgsdGltbyxl b2wsc3RhcnQsdHVybikgaW50IG1heCx0aW1vLHR1cm47IENIQVIgKmRlc3QsIGVvbCwgc3RhcnQ7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbHNlIC8qIG5vdCBQQVJTRU5TRSAqLworI2lmZGVm IENLX0FOU0lDCit0dGlubChDSEFSICpkZXN0LCBpbnQgbWF4LGludCB0aW1vLCBDSEFSIGVvbCkK KyNlbHNlCit0dGlubChkZXN0LG1heCx0aW1vLGVvbCkgaW50IG1heCx0aW1vOyBDSEFSICpkZXN0 LCBlb2w7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworLyog dHRpbmwgKi8geworCisjaWZuZGVmIE1ZUkVBRAorICAgIENIQVIgY2gsIGR1bTsKKyNlbmRpZiAv KiBNWVJFQUQgKi8KKyNpZmRlZiBQQVJTRU5TRQorICAgIGludCBwa3RsZW4gPSAtMTsKKyAgICBp bnQgbHBsZW4gPSAwOworICAgIGludCBoYXZlbGVuID0gMDsKKyNlbmRpZiAvKiBQQVJTRU5TRSAq LworICAgIGludCBmZDsKKyAgICBpbnQgc29wbWFzayA9IDB4ZmY7CQkJLyogU3RhcnQtT2YtUGFj a2V0IG1hc2sgKi8KKyNpZmRlZiBDS1hYQ0hBUgorICAgIGV4dGVybiBzaG9ydCBkYmx0W107CQkv KiBJZ25vcmUtY2hhcmFjdGVyIHRhYmxlICovCisgICAgZXh0ZXJuIGludCBpZ25mbGFnOworI2Vu ZGlmIC8qIENLWFhDSEFSICovCisjaWZkZWYgVENQU09DS0VUCisgICAgZXh0ZXJuIENIQVIgc3Rj aHI7CisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgaW50IHg7CisjaWZkZWYgU1RSRUFNSU5H CisgICAgZXh0ZXJuIGludCBzdHJlYW1pbmc7CisgICAgZXh0ZXJuIGludCBzbmR0eXA7CisjZW5k aWYgLyogU1RSRUFNSU5HICovCisKKyAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oLTMpOyAgICAg ICAgICAvKiBOb3Qgb3Blbi4gKi8KKy8qCisgIEluIEZlYnJ1YXJ5IDIwMDcgSSBmaXhlZCB0dGlu bCgpIHRvIHdvcmsgYmV0dGVyIHVuZGVyIHRoZSB0cnVseSBhd2Z1bAorICBjb25kaXRpb25zIGVu Y291bnRlcmVkIGJ5IHRoZSBBTS1BUEVYIG9jZWFub2dyYXBoaWMgZmxvYXRzIHRoYXQgZ2F0aGVy CisgIGh1cnJpY2FuZSBkYXRhIGFuZCBwaG9uZSBob21lIHVzaW5nIElyaWRpdW0gc2F0ZWxsaXRl IG1vZGVtcywgd2hpY2ggdW5kZXIKKyAgY2VydGFpbiBjb25kaXRpb25zLCBjYW4gc2VuZCB0d28g cGFja2V0cyBiYWNrIHRvIGJhY2sgYWZ0ZXIgYSBsb25nIHBhdXNlLgorICBJbiB0aGlzIGNhc2Ug dGhlIHNlY29uZCBwYWNrZXQgd291bGQgYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBTT0ggd2FzIHNr aXBwZWQKKyAgZHVlIHRvIHRoZSB0dGZsdWkoKSBjYWxsLiAgQnV0IHRoZSByZXdvcmtlZCBsb29r YWhlYWQvcHVzaGJhY2sgbG9naWMgYnJva2UKKyAgS2VybWl0IHRyYW5zZmVycyBvbiBlbmNyeXB0 ZWQgY29ubmVjdGlvbnMuICBUaGlzIHdhcyBmaXhlZCAxMi0xMyBBdWd1c3QKKyAgMjAwNy4gIEFs bCBvZiB0aGlzIGhhcHBlbmVkIGFmdGVyIDguMC4yMTIgRGV2LjI3IHdhcyByZWxlYXNlZCBhbmQg YmVmb3JlCisgIERldi4yOCwgc28gbm8gaGFybSBkb25lIG90aGVyIHRoYW4gdGhlIGRlbGF5Lgor Ki8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGlubCBtYXgiLCIiLG1heCk7CisgICAgZGVidWcoRjEwMSwi dHRpbmwgdGltbyIsIiIsdGltbyk7CisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKQor ICAgICAgZmQgPSBmZGluOworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZk ID0gdHR5ZmQ7CisKKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKHhsb2NhbCAmJiBjb25jaGsoKSA+ IDApCQkvKiBBbGxvdyBmb3IgY29uc29sZSBpbnRlcnJ1cHRpb25zICovCisgICAgICByZXR1cm4o LTEpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICpkZXN0ID0gJ1wwJzsgICAgICAgICAg ICAgICAgICAgICAgIC8qIENsZWFyIGRlc3RpbmF0aW9uIGJ1ZmZlciAqLworICAgIGlmICh0aW1v IDwgMCkgdGltbyA9IDA7CQkvKiBTYWZldHkgKi8KKyAgICBpZiAodGltbykgewkJCQkvKiBEb24n dCB0aW1lIG91dCBpZiB0aW1vID09IDAgKi8KKwlpbnQgeHg7CisJc2F2YWwgPSBzaWduYWwoU0lH QUxSTSx0aW1lcmgpOwkvKiBFbmFibGUgdGltZXIgaW50ZXJydXB0ICovCisJeHggPSBhbGFybSh0 aW1vKTsJCS8qIFNldCBpdC4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dGlubCBhbGFybSIsIiIseHgpOwor ICAgIH0KKyAgICBpZiAoCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisJc2lnc2V0am1wKHNqYnVmLDEp CisjZWxzZQorCXNldGptcChzamJ1ZikKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkpIHsJ CQkJLyogVGltZXIgd2VudCBvZmY/ICovCisJZGVidWcoRjEwMCwidHRpbmwgdGltb3V0IiwiIiww KTsgLyogR2V0IGhlcmUgb24gdGltZW91dC4gKi8KKwkvKiBkZWJ1ZyhGMTEwLCIgd2l0aCIsKGNo YXIgKikgZGVzdCwwKTsgKi8KKwl0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIgKi8KKwly ZXR1cm4oLTEpOwkJCS8qIGFuZCByZXR1cm4gZXJyb3IgY29kZS4gKi8KKyAgICB9IGVsc2Ugewor CXJlZ2lzdGVyIGludCBpLCBuID0gLTE7CQkvKiBsb2NhbCB2YXJpYWJsZXMgKi8KKwlpbnQgY2Nu ID0gMDsKKyNpZmRlZiBQQVJTRU5TRQorCXJlZ2lzdGVyIGludCBmbGFnID0gMDsKKwlkZWJ1ZyhG MDAwLCJ0dGlubCBzdGFydCIsIiIsc3RhcnQpOworI2VuZGlmIC8qIFBBUlNFTlNFICovCisKKwl0 dHBtc2sgPSB0dHBydHkgPyAwMTc3IDogMDM3NzsJLyogU2V0IHBhcml0eSBzdHJpcHBpbmcgbWFz ay4gKi8KKwlzb3BtYXNrID0gbmVlZHBjaGsgPyAwMTc3IDogdHRwbXNrOyAvKiBBbmQgU09QIG1h dGNoaW5nIG1hc2suICovCisKKy8qIE5vdyByZWFkIGludG8gZGVzdGluYXRpb24sIHN0cmlwcGlu ZyBwYXJpdHkgYW5kIGxvb2tpbmcgZm9yIHRoZSAqLworLyogdGhlIHBhY2tldCB0ZXJtaW5hdG9y LCBhbmQgYWxzbyBmb3Igc2V2ZXJhbCBDdHJsLUMncyB0eXBlZCBpbiBhIHJvdy4gKi8KKworCWkg PSAwOwkJCQkvKiBEZXN0aW5hdGlvbiBpbmRleCAqLworCWRlYnVnKEYxMDEsInR0aW5sIGVvbCIs IiIsZW9sKTsKKworCXdoaWxlIChpIDwgbWF4LTEpIHsKKyNpZmRlZiBNWVJFQUQKKwkgICAgZXJy bm8gPSAwOworCSAgICAvKiBPbiBlbmNyeXB0ZWQgY29ubmVjdGlvbnMgbXlyZWFkIHJldHVybnMg ZW5jcnlwdGVkIGJ5dGVzICovCisJICAgIG4gPSBteXJlYWQoKTsKKwkgICAgZGVidWcoRjAwMCwi VFRJTkwgbXlyZWFkIGNoYXIiLCIiLG4pOworCSAgICBpZiAobiA8IDApIHsJLyogVGltZW91dCBv ciBpL28gZXJyb3I/ICovCisjaWZkZWYgREVCVUcKKwkJaWYgKGRlYmxvZykgeworCQkgICAgZGVi dWcoRjEwMSwidHRpbmwgbXlyZWFkIGZhaWx1cmUsIG4iLCIiLG4pOworCQkgICAgZGVidWcoRjEw MSwidHRpbmwgbXlyZWFkIGVycm5vIiwiIixlcnJubyk7CisJCX0KKyNlbmRpZiAvKiBERUJVRyAq LworCQkvKiBEb24ndCBsZXQgRUlOVFIgYnJlYWsgcGFja2V0cy4gKi8KKwkJaWYgKG4gPT0gLTMp IHsKKwkJICAgIGlmIChlcnJubyA9PSBFSU5UUiAmJiBpID4gMCkgeworCQkJZGVidWcoRjExMSwi dHRpbmwgRUlOVFIgbXlyZWFkIGkiLCJjb250aW51aW5nIixpKTsKKwkJCWNvbnRpbnVlOworCQkg ICAgfSBlbHNlIHsKKwkJCWRlYnVnKEYxMTAsInR0aW5sIG5vbi1FSU5UUiAtMyIsImNsb3Npbmci LDApOworCQkJd2FzY2xvc2VkID0gMTsKKwkJCXR0aW1vZmYoKTsJLyogVHVybiBvZmYgdGltZXIg Ki8KKwkJCXR0Y2xvcygwKTsKKwkJCXJldHVybihuKTsKKwkJICAgIH0KKwkJfSBlbHNlIGlmIChu ID09IC0yICYmIG5ldGNvbm4gLyogJiYgdGltbyA9PSAwICovICkgeworCQkgICAgLyogSGVyZSB3 ZSB0cnkgdG8gY2F0Y2ggYnJva2VuIG5ldHdvcmsgY29ubmVjdGlvbnMgKi8KKwkJICAgIC8qIGV2 ZW4gd2hlbiBpb2N0bCgpIGFuZCByZWFkKCkgZG8gbm90IGNhdGNoIHRoZW0gKi8KKwkJICAgIGRl YnVnKEYxMTEsInR0aW5sIG5ldHdvcmsgbXlyZWFkIGZhaWx1cmUiLCJjbG9zaW5nIixuKTsKKwkJ ICAgIHdhc2Nsb3NlZCA9IDE7CisJCSAgICB0dGltb2ZmKCk7CisJCSAgICB0dGNsb3MoMCk7CisJ CSAgICByZXR1cm4oLTMpOworCQl9CisjaWZkZWYgU1RSRUFNSU5HCisJCS8qIFN0cmVhbWluZyBh bmQgbm8gZGF0YSB0byByZWFkICovCisJCWVsc2UgaWYgKG4gPT0gMCAmJiBzdHJlYW1pbmcgJiYg c25kdHlwID09ICdEJykKKwkJICByZXR1cm4oMCk7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisJ CWJyZWFrOwkJCS8qIEJyZWFrIG91dCBvZiB3aGlsZSBsb29wICovCisJICAgIH0KKworI2Vsc2Ug Lyogbm90IE1ZUkVBRCAoaXMgdGhpcyBjb2RlIHVzZWQgYW55d2hlcmUgYW55IG1vcmU/KSAqLwor LyoKKyAgVGhlIG5vbi1NWVJFQUQgY29kZSBkYXRlcyBmcm9tIHRoZSAxOTgwcyBhbmQgd2FzIG5l ZWRlZCBvbiBjZXJ0YWluIHBsYXRmb3JtcworICB3aGVyZSB0aGVyZSB3ZXJlIG5vIG5vbmJsb2Nr aW5nIHJlYWRzLiAgLWZkYywgMjAwNy8wMi8yMi4KKyovCisJICAgIGlmICgobiA9IHJlYWQoZmQs ICZuLCAxKSkgPCAxKQorCSAgICAgIGJyZWFrOwkJCS8qIEVycm9yIC0gYnJlYWsgb3V0IG9mIHdo aWxlIGxvb3AgKi8KKworI2VuZGlmIC8qIE1ZUkVBRCAqLworCisJICAgIC8qIEdldCBoZXJlIHdp dGggY2hhciBpbiBuICovCisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisJICAgIGlmIChURUxPUFRf VShURUxPUFRfRU5DUllQVElPTikgJiYgIXB1c2hlZGJhY2spIHsKKwkJQ0hBUiBjaCA9IG47CisJ CWNrX3RuX2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7CisJCW4gPSBjaDsKKwkJZGVidWcoRjAwMCwi VFRJTkwgZGVjcnlwIGNoYXIiLCIiLG4pOworCSAgICB9CisJICAgIHB1c2hlZGJhY2sgPSAwOwor I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorCSAgICBpZiAo biA9PSBJQUMgJiYJCS8qIEhhbmRsZSBUZWxuZXQgb3B0aW9ucyAqLworCQkoKHhsb2NhbCAmJiBu ZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fAorCQkoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKSB7CisJ CW4gPSB0dF90bm9wdChuKTsKKwkJaWYgKG4gPCAwKQorCQkgIHJldHVybihuKTsKKyNpZm5kZWYg Tk9QQVJTRU4KKwkJZWxzZSBpZiAobiA9PSAxKQorCQkgIHN0YXJ0ID0gc3RjaHI7CisjZW5kaWYg LyogTk9QQVJTRU4gKi8KKwkJaWYgKG4gIT0gMjU1KQkJLyogTm8gZGF0YSAtIGdvIGJhY2sgZm9y IG5leHQgY2hhciAqLworCQkgIGNvbnRpbnVlOworCSAgICB9CQkJCS8qIFF1b3RlZCBJQUMgLSBr ZWVwIGdvaW5nICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZmRlZiBDS1hYQ0hBUgor CSAgICBpZiAoaWduZmxhZykKKwkgICAgICBpZiAoZGJsdFsodW5zaWduZWQpIG5dICYgMSkgLyog Q2hhcmFjdGVyIHRvIGlnbm9yZT8gKi8KKwkJY29udGludWU7CisjZW5kaWYgLyogQ0tYWENIQVIg Ki8KKy8qCisgIFVzZSBwYXJpdHkgbWFzaywgcmF0aGVyIHRoYW4gYWx3YXlzIHN0cmlwcGluZyBw YXJpdHksIHRvIGNoZWNrIGZvcgorICBjYW5jZWxsYXRpb24uICBPdGhlcndpc2UsIHJ1bnMgbGlr ZSBceDAzXHg4M1x4MDMgaW4gYSBwYWNrZXQgY291bGQgY2FuY2VsCisgIHRoZSB0cmFuc2ZlciB3 aGVuIHBhcml0eSBpcyBOT05FLiAgKE5vdGUgdGhhdCBceDAzXHgwM1x4MDMgaXMgZXh0cmVtZWx5 CisgIHVubGlrZWx5IGR1ZSB0byBydW4tbGVuZ3RoIGVuY29kaW5nLikKKyovCisJICAgIC8qIENo ZWNrIGNhbmNlbGxhdGlvbiAqLworCSAgICBpZiAoIXhsb2NhbCAmJiB4ZnJjYW4gJiYgKChuICYg dHRwbXNrKSA9PSB4ZnJjaHIpKSB7CisJCWlmICgrK2NjbiA+PSB4ZnJudW0pIHsJLyogSWYgeGZy bnVtIGluIGEgcm93LCBiYWlsIG91dC4gKi8KKwkJICAgIGlmICh0aW1vKSB7CQkvKiBDbGVhciB0 aW1lci4gKi8KKwkJCXR0aW1vZmYoKTsKKwkJICAgIH0KKwkJICAgIGlmICh4ZnJjaHIgPCAzMikK KwkJICAgICAgcHJpbnRmKCJeJWMuLi5cclxuIiwoY2hhcikoeGZyY2hyKzY0KSk7CisJCSAgICBl bHNlCisJCSAgICAgIHByaW50ZigiQ2FuY2VsZWQuLi5cclxuIik7CisJCSAgICByZXR1cm4oLTIp OworCQl9CisJICAgIH0gZWxzZSBjY24gPSAwOwkJLyogTm8gY2FuY2VsbGF0aW9uLCByZXNldCBj b3VudGVyLCAqLworCisjaWZkZWYgUEFSU0VOU0UKKy8qCisgIFJlc3RydWN0dXJlZCBjb2RlIGFs bG93cyBmb3IgYSBuZXcgcGFja2V0IHRvIGFwcGVhciBzb21ld2hlcmUgaW4gdGhlCisgIG1pZGRs ZSBvZiBhIHByZXZpb3VzIG9uZS4gIC1mZGMsIDI0IEZlYiAyMDA3LgorKi8KKwkgICAgaWYgKChu ICYgc29wbWFzaykgPT0gc3RhcnQpIHsgLyogU3RhcnQgb2YgUGFja2V0ICovCisJCWRlYnVnKEYx MDEsInR0aW5sIFNPUCBpIiwiIixpKTsKKwkJZmxhZyA9IDE7CQkvKiBGbGFnIHRoYXQgd2UgYXJl IGluIGEgcGFja2V0ICovCisJCWhhdmVsZW4gPSAwOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBs ZW5ndGggKi8KKwkJcGt0bGVuID0gLTE7CQkvKiAoaWYgYW55KSBpbiBjYXNlIHdlIHdlcmUgKi8K KwkJbHBsZW4gPSAwOwkJLyogYWxyZWFkIHByb2Nlc3NhbmQgYSBwYWNrZXQgKi8KKwkJaSA9IDA7 CQkJLyogYW5kIHJlc2V0IHRoZSBkZXN0IGJ1ZmZlciBwb2ludGVyICovCisJICAgIH0KKwkgICAg aWYgKGZsYWcgPT0gMCkgewkJLyogTm8gU09QIHlldC4uLiAqLworCQlkZWJ1ZyhGMDAwLCJ0dGlu bCBza2lwcGluZyIsIiIsbik7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGRlc3RbaSsrXSA9 IG4gJiB0dHBtc2s7CisvKgorICBJZiB3ZSBoYXZlIG5vdCBiZWVuIGluc3RydWN0ZWQgdG8gd2Fp dCBmb3IgYSB0dXJuYXJvdW5kIGNoYXJhY3Rlciwgd2UgY2FuIGdvCisgIGJ5IHRoZSBwYWNrZXQg bGVuZ3RoIGZpZWxkLiAgSWYgdHVybiAhPSAwLCB3ZSBtdXN0IHdhaXQgZm9yIHRoZSBlbmQgb2Yg bGluZQorICAoZW9sKSBjaGFyYWN0ZXIgYmVmb3JlIHJldHVybmluZy4gIFRoaXMgaXMgYW4gZWdy ZWdpb3VzIHZpb2xhdGlvbiBvZiBhbGwKKyAgcHJpbmNpcGxlcyBvZiBsYXllcmluZy4uLiAgKExl c3MgZWdyZWdpb3VzIGluIEMtS2VybWl0IDkuMCwgaW4gd2hpY2ggd2UgZ28KKyAgYnkgdGhlIGxl bmd0aCBmaWVsZCBidXQgYWxzbyBsb29rIGZvciB0aGUgZW9sIGluIGNhc2UgaXQgYXJyaXZlcyBl YXJseSwKKyAgZS5nLiBpZiB0aGUgbGVuZ3RoIGZpZWxkIHdhcyBjb3JydXB0ZWQgdXB3YXJkcy4p CisqLworCSAgICBpZiAoIWhhdmVsZW4pIHsKKwkJaWYgKGkgPT0gMikgeworCQkgICAgaWYgKChk ZXN0WzFdICYgMHg3ZikgPCAzMikgLyogR2FyYmFnZSBpbiBsZW5ndGggZmllbGQgKi8KKwkJICAg ICAgcmV0dXJuKC0xKTsJLyogZmRjIC0gMTMgQXByIDIwMTAgKi8KKwkJICAgIHBrdGxlbiA9IHh1 bmNoYXIoZGVzdFsxXSAmIDB4N2YpOworICAgICAgICAgICAgICAgICAgICBpZiAocGt0bGVuID4g OTQpCS8qIFJ1Ym91dCBpbiBsZW5ndGggZmllbGQgKi8KKwkJICAgICAgcmV0dXJuKC0xKTsJLyog ZmRjIC0gMTMgQXByIDIwMTAgKi8KKwkJICAgIGlmIChwa3RsZW4gPiAxKSB7CisJCQloYXZlbGVu ID0gMTsKKwkJCWRlYnVnKEYxMDEsInR0aW5sIHBrdGxlbiB2YWx1ZSIsIiIscGt0bGVuKTsKKwkJ ICAgIH0KKwkJfSBlbHNlIGlmIChpID09IDUgJiYgcGt0bGVuID09IDApIHsKKwkJICAgIGxwbGVu ID0geHVuY2hhcihkZXN0WzRdICYgMHg3Zik7CisJCX0gZWxzZSBpZiAoaSA9PSA2ICYmIHBrdGxl biA9PSAwKSB7CisJCSAgICBwa3RsZW4gPSBscGxlbiAqIDk1ICsgeHVuY2hhcihkZXN0WzVdICYg MHg3ZikgKyA1OworCQkgICAgaGF2ZWxlbiA9IDE7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dGlubCBl eHRlbmRlZCBsZW5ndGgiLCIiLHBrdGxlbik7CisJCX0KKwkgICAgfQorCisvKgorICBTdXBwb3Nl IHdlIGxvb2tlZCBhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIGhlcmUgYW5kIGZvdW5kIGl0IHdhcyBv dXQgb2YKKyAgcmFuZ2U/ICBUaGlzIHdvdWxkIG1lYW4gZWl0aGVyIChhKSBpbmNvbWluZyBwYWNr ZXRzIGhhZCBTT1AgdW5wcmVmaXhlZAorICBhbmQgd2UgYXJlIG91dCBvZiBzeW5jLCBvciAoYikg dGhlIHBhY2tldCBpcyBkYW1hZ2VkLiAgU2luY2UgKGEpIGlzIGJhZAorICBwcmFjdGljZSwgbGV0 J3MgaWdub3JlIGl0LiAgU28gd2hhdCBzaG91bGQgd2UgZG8gaGVyZSBpZiB3ZSBrbm93IHRoZQor ICBwYWNrZXQgaXMgZGFtYWdlZD8KKworICAgMS4gTm90aGluZyAtLSBrZWVwIHRyeWluZyB0byBy ZWFkIHRoZSBwYWNrZXQgdGlsbCB3ZSBmaW5kIHdoYXQgd2UgdGhpbmsKKyAgICAgIGlzIHRoZSBl bmQsIG9yIHdlIHRpbWUgb3V0LCBhbmQgbGV0IHRoZSB1cHBlciBsYXllciBkZWNpZGUgd2hhdCB0 bworICAgICAgZG8uICBCdXQgc2luY2UgZWl0aGVyIHRoZSBwYWNrZXQgaXMgY29ycnVwdCBvciB3 ZSBhcmUgb3V0IG9mIHN5bmMsCisgICAgICBvdXIgY3JpdGVyaW9uIGZvciBmaW5kaW5nIHRoZSBl bmQgZG9lcyBub3QgYXBwbHkgYW5kIHdlIGFyZSBsaWtlbHkKKyAgICAgIHRvIHRpbWUgb3V0IChv ciBzd2FsbG93IGEgcGllY2Ugb2YgdGhlIG5leHQgcGFja2V0KSBpZiBvdXIgYXNzdW1lZAorICAg ICAgbGVuZ3RoIGlzIHRvbyBsb25nLiAgKFRoaXMgd2FzIHRoZSBiZWhhdmlvciBwcmlvciB0byB2 ZXJzaW9uIDcuMC4pCisKKyAgIDIuIHNldCBmbGFnID0gMCBhbmQgY29udGludWU/ICBUaGlzIHdv dWxkIGZvcmNlIHVzIHRvIHdhaXQgZm9yIHRoZQorICAgICAgbmV4dCBwYWNrZXQgdG8gY29tZSBp biwgYW5kIHRoZXJlZm9yZSAoaW4gdGhlIG5vbndpbmRvd2luZyBjYXNlKSwKKyAgICAgIHdvdWxk IGZvcmNlIGEgdGltZW91dCBpbiB0aGUgb3RoZXIgS2VybWl0LgorCisgICAzLiBzZXQgZmxhZyA9 IDAgYW5kIGNvbnRpbnVlLCBidXQgb25seSBpZiB0aGUgd2luZG93IHNpemUgaXMgPiAxIGFuZAor ICAgICAgdGhlIHdpbmRvdyBpcyBub3QgYmxvY2tlZD8gIFRhbGsgYWJvdXQgY2hlYXRpbmchCisK KyAgIDQuIFJldHVybiBhIGZhaWx1cmUgY29kZSBhbmQgbGV0IHRoZSB1cHBlciBsYXllciBkZWNp ZGUgd2hhdCB0byBkby4KKyAgICAgIFRoaXMgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8gMywgYnV0 IHdpdGhvdXQgdGhlIGNoZWF0aW5nLiAgU28gbGV0J3MKKyAgICAgIGRvIGl0IHRoYXQgd2F5Li4u ICBCdXQgbm90ZSB0aGF0IHdlIG11c3QgaWdub3JlIHRoZSBwYXJpdHkgYml0CisgICAgICBpbiBj YXNlIHRoaXMgaXMgdGhlIGZpcnN0IHBhY2tldCBhbmQgd2UgaGF2ZSBub3QgeWV0IHJ1biBwYXJj aGsoKS4KKyovCisJICAgIGlmIChpID09IDMpIHsJCS8qIFBlZWsgYXQgc2VxdWVuY2UgbnVtYmVy ICovCisJCXggPSB4dW5jaGFyKChkZXN0W2ktMV0gJiAweDdmKSk7IC8qIElmIGl0J3Mgbm90IGlu IHJhbmdlLi4uICovCisJCWlmICh4IDwgMCB8fCB4ID4gNjMpIHsKKwkJICAgIGRlYnVnKEYxMTEs InR0aW5sIGJhZCBzZXEiLGRlc3QseCk7CisJCSAgICBpZiAodGltbykgdHRpbW9mZigpOworCQkg ICAgcmV0dXJuKC0xKTsJCS8qIHJldHVybiBhIG5vbmZhdGFsIGVycm9yICovCisJCX0KKwkgICAg fQorCisjZWxzZSAvKiBQQVJTRU5TRSAqLworCSAgICBkZXN0W2krK10gPSBuICYgdHRwbXNrOwor I2VuZGlmIC8qIFBBUlNFTlNFICovCisKKyAgICAvKiBDaGVjayBmb3IgZW5kIG9mIHBhY2tldCAq LworCisJICAgIGlmICgKKwkJKChuICYgdHRwbXNrKSA9PSBlb2wpCS8qIEFsd2F5cyBicmVhayBv biB0aGUgZW9sIGNoYXIgKi8KKyNpZmRlZiBQQVJTRU5TRQorCQkgfHwJCQkvKiBmZGMgLSBzZWUg bm90ZXMgb2YgMTMgQXByIDIwMTAgKi8KKy8qCisgIFB1cmVseSBsZW5ndGgtZHJpdmVuIGlmIFNF VCBIQU5EU0hBS0UgTk9ORSAoaS5lLiB0dXJuID09IDApLgorICBUaGlzIGFsbG93cyBwYWNrZXQg dGVybWluYXRvcnMgYW5kIGhhbmRzaGFrZSBjaGFyYWN0ZXJzIHRvIGFwcGVhcgorICBsaXRlcmFs bHkgaW5zaWRlIGEgcGFja2V0IGRhdGEgZmllbGQuCisqLworCQkoaGF2ZWxlbiAmJiAoaSA+IHBr dGxlbisxKSAmJgorCQkgKCF0dXJuIHx8ICh0dXJuICYmIChuICYgMHg3ZikgPT0gdHVybikpKSAv KiAodHVybiwgbm90IGVvbCkgKi8KKworI2VuZGlmIC8qIFBBUlNFTlNFICovCisJCSkgeworLyoK KyAgSGVyZSB3ZSBoYXZlIGVpdGhlciByZWFkIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIHBhY2tldCBi YXNlZCBvbiBpdHMgbGVuZ3RoCisgIGZpZWxkLCBvciBlbHNlIHdlIGhhdmUgcmVhZCB0aGUgcGFj a2V0IHRlcm1pbmF0b3IgKGVvbCkgb3IgdGhlIGhhbGYtZHVwbGV4CisgIGxpbmUtdHVybmFyb3Vu ZCBjaGFyICh0dXJuKS4KKyovCisjaWZuZGVmIFBBUlNFTlNFCisJCWRlYnVnKEYxMDEsInR0aW5s IGdvdCBlb2wiLCIiLGVvbCk7IC8qIChvciB0dXJuKSAqLworCQlkZXN0W2ldID0gJ1wwJzsJCS8q IFllcywgdGVybWluYXRlIHRoZSBzdHJpbmcsICovCisJCS8qIGRlYnVnKEYxMDEsInR0aW5sIGki LCIiLGkpOyAqLworCisjZWxzZSAgLyogUEFSU0VOU0UgKi8KKworI2lmZGVmIERFQlVHCisJCWlm IChkZWJsb2cpIHsKKwkJICAgIGlmICgobiAmIHR0cG1zaykgIT0gZW9sKSB7CisJCQlkZWJ1ZyhG MTAxLCJ0dGlubCBFT1AgbGVuZ3RoIiwiIixwa3RsZW4pOworCQkJZGVidWcoRjAwMCwidHRpbmwg RU9QIGN1cnJlbnQgY2hhciIsIiIsbik7CisJCQlkZWJ1ZyhGMTAxLCJ0dGlubCBFT1AgcGFja2V0 IGJ1ZiBpbmRleCIsIiIsaSk7CisJCSAgICB9IGVsc2UgZGVidWcoRjEwMSwidHRpbmwgZ290IGVv bCIsIiIsZW9sKTsKKwkJfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBNWVJFQUQKKy8q CisgIFRoZSBwYWNrZXQgd2FzIHJlYWQgYmFzZWQgb24gaXRzIGxlbmd0aC4gIFRoaXMgbGVhdmVz IHRoZSBwYWNrZXQgdGVybWluYXRvcgorICB1bnJlYWQsIGFuZCBzbyB0dGNoaygpIHdpbGwgYWx3 YXlzIHJldHVybiBhdCBsZWFzdCAxIGJlY2F1c2Ugb2YgdGhpcywKKyAgcG9zc2libHkgZ2l2aW5n IGEgZmFsc2UgcG9zaXRpdmUgdG8gdGhlICJpcyB0aGVyZSBhbm90aGVyIHBhY2tldCB3YWl0aW5n PyIKKyAgdGVzdC4gIEJ1dCBpZiB3ZSBrbm93IHRoZSB0ZXJtaW5hdG9yIChvciBhbnkgb3RoZXIg aW50ZXJwYWNrZXQganVuaykgaXMKKyAgdGhlcmUsIHdlIGNhbiBzYWZlbHkgZ2V0IHJpZCBvZiBp dC4KKworICBOT1RFOiBUaGlzIGNvZGUgcmV3b3JrZWQgdG8gKGEpIGV4ZWN1dGUgZXZlbiBpZiB0 aGUgZGVidWcgbG9nIGlzbid0IGFjdGl2ZTsKKyAgYW5kIChiKSBhY3R1YWxseSB3b3JrLiAgLWZk YywgMjAwNy8wMi8yMi4gIEFuZCBhZ2FpbiAyMDA3LzA4LzEyLTEzIHRvIGFsc28KKyAgd29yayBv biBlbmNyeXB0ZWQgY29ubmVjdGlvbnMuCisqLwkKKwkJZGVidWcoRjEwMSwiVFRJTkwgbXlfY291 bnQiLCIiLG15X2NvdW50KTsKKwkJaWYgKChuICYgdHRwbXNrKSAhPSBlb2wpIHsgLyogTm90IHRo ZSBwYWNrZXQgdGVybWluYXRvciAqLworCQkgICAgaW50IHg7CisJCSAgICB3aGlsZSAobXlfY291 bnQgPiAwKSB7CisJCQl4ID0gbXlyZWFkKCk7CSAgIC8qICh3YXMgdHRpbmMoMCkgKi8KKwkJCWRl YnVnKEYwMDAsIlRUSU5MIGxrcmVhZCBjaGFyIiwiIix4KTsKKyNpZmRlZiBDS19FTkNSWVBUSU9O CisJCQlpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7CisJCQkgICAgQ0hBUiBjaCA9 IHg7CisJCQkgICAgY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsKKwkJCSAgICB4ID0gY2g7 CisJCQkgICAgZGVidWcoRjAwMCwiVFRJTkwgbGtkZWNyIGNoYXIiLCIiLHgpOyAKKwkJCX0KKyNl bmRpZgkvKiBDS19FTkNSWVBUSU9OICovCisJCQkvKgorCQkJICBOb3RlOiB3aGlsZSBpdCBtaWdo dCBzZWVtIG1vcmUgZWxlZ2FudCB0byBzaW1wbHkKKwkJCSAgcHVzaCBiYWNrIHRoZSBlbmNyeXB0 ZWQgYnl0ZSwgdGhhdCBkZXN5bmNocm9uaXplcworCQkJICB0aGUgZGVjcnlwdGlvbiBzdHJlYW07 IHRoZSBmbGFnIGlzIG5lY2Vzc2FyeSBzbyB3ZQorCQkJICBkb24ndCB0cnkgdG8gZGVjcnlwdCB0 aGUgc2FtZSBieXRlIHR3aWNlLgorCQkJKi8KKwkJCWlmICgoeCAmIHR0cG1zaykgPT0gc3RhcnQp IHsgLyogU3RhcnQgb2YgbmV4dCBwYWNrZXQgKi8KKwkJCSAgICBteXVucmQoeCk7CS8qIFB1c2gg YmFjayB0aGUgZGVjcnlwdGVkIGJ5dGUgKi8KKwkJCSAgICBwdXNoZWRiYWNrID0gMTsgLyogQW5k IHNldCBmbGFnICovCisJCQkgICAgZGVidWcoRjAwMCwiVFRJTkwgbGtwdXNoIGNoYXIiLCIiLHgp OworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQorCQl9CisjZW5kaWYgLyogTVlSRUFEICov CisKKwkJZGVzdFtpXSA9ICdcMCc7CQkvKiBUZXJtaW5hdGUgdGhlIHN0cmluZywgKi8KKwkgICAg ICAgIGlmIChuZWVkcGNoaykgewkJLyogUGFyaXR5IGNoZWNrZWQgeWV0PyAqLworCQkgICAgaWYg KHR0cHJ0eSA9PSAwKSB7CS8qIE5vLCBjaGVjay4gKi8KKwkJCWlmICgodHRwcnR5ID0gcGFyY2hr KGRlc3Qsc3RhcnQsaSkpID4gMCkgeworCQkJICAgIGludCBqOworCQkJICAgIGRlYnVnKEYxMDEs InR0aW5sIHNlbnNlcyBwYXJpdHkiLCIiLHR0cHJ0eSk7CisJCQkgICAgZGVidWcoRjExMCwidHRp bmwgcGFja2V0IGJlZm9yZSIsZGVzdCwwKTsKKwkJCSAgICB0dHBtc2sgPSAweDdmOworCQkJICAg IGZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkgICAgICBkZXN0W2pdICY9IDB4N2Y7CS8qIFN0 cmlwIHBhcml0eSBmcm9tIHBhY2tldCAqLworCQkJICAgIGRlYnVnKEYxMTAsInR0aW5sIHBhY2tl dCBhZnRlciAiLGRlc3QsMCk7CisJCQl9IGVsc2UgdHRwcnR5ID0gMDsgLyogUmVzdG9yZSBpZiBw YXJjaGsgZXJyb3IgKi8KKwkJICAgIH0KKwkJICAgIHNvcG1hc2sgPSB0dHBtc2s7CisJCSAgICBu ZWVkcGNoayA9IDA7CisJCX0KKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworCisJCWlmICh0aW1vKQkJ LyogVHVybiBvZmYgdGltZXIgaWYgaXQgd2FzIG9uICovCisJCSAgdHRpbW9mZigpOworICAgICAg ICAgICAgICAgIGNraGV4ZHVtcCgidHRpbmwgZ290IixkZXN0LGkpOworCisjaWZkZWYgU1RSRUFN SU5HCisJCS8qIHR0aW5sKCkgd2FzIGNhbGxlZCBiZWNhdXNlIHRoZXJlIHdhcyBub24tcGFja2V0 ICovCisJCS8qIGRhdGEgc2l0dGluZyBpbiB0aGUgYmFjayBjaGFubmVsLiAgSWdub3JlIGl0LiAg ICovCisJCWlmIChzdHJlYW1pbmcgJiYgc25kdHlwID09ICdEJykKKwkJICByZXR1cm4oLTEpOwor I2VuZGlmIC8qIFNUUkVBTUlORyAqLworCQlyZXR1cm4oaSk7CisJICAgIH0KKwl9IC8qIEVuZCBv ZiB3aGlsZSgpICovCisJdHRpbW9mZigpOworCXJldHVybihuKTsKKyAgICB9Cit9CisjZW5kaWYg LyogTk9YRkVSICovCisKKy8qICBUIFQgSSBOIEMgLS0gIFJlYWQgYSBjaGFyYWN0ZXIgZnJvbSB0 aGUgY29tbXVuaWNhdGlvbiBsaW5lICAqLworLyoKKyBPbiBzdWNjZXNzLCByZXR1cm5zIHRoZSBj aGFyYWN0ZXIgdGhhdCB3YXMgcmVhZCwgPj0gMC4KKyBPbiBmYWlsdXJlLCByZXR1cm5zIC0xIG9y IG90aGVyIG5lZ2F0aXZlIG15cmVhZCBlcnJvciBjb2RlLAorICAgb3IgLTIgaWYgY29ubmVjdGlv biBpcyBicm9rZW4gb3IgdHR5ZmQgPCAwLgorICAgb3IgLTMgaWYgc2Vzc2lvbiBsaW1pdCBoYXMg ZXhwaXJlZCwKKyAgIG9yIC00IGlmIHNvbWV0aGluZyBvciBvdGhlci4uLgorIE5PVEU6IFRoZSBB UEkgZG9lcyBub3QgcHJvdmlkZSBmb3IgdHRpbmMoKSByZXR1cm5pbmcgYSBzcGVjaWFsIGNvZGUK KyB1cG9uIHRpbWVvdXQsIGJ1dCB3ZSBuZWVkIGl0LiAgU28gZm9yIHRoaXMgd2UgaGF2ZSBhIGds b2JhbCB2YXJpYWJsZSwKKyB0dGluY3RpbW8uCisqLworc3RhdGljIGludCB0dGluY3RpbW8gPSAw OwkJLyogWXVrICovCisKK2ludAordHRpbmModGltbykgaW50IHRpbW87IHsKKworICAgIGludCBu ID0gMCwgZmQ7CisgICAgaW50IGlzX3RuID0gMDsKKyAgICBDSEFSIGNoID0gMDsKKworICAgIHR0 aW5jdGltbyA9IDA7CisKKyAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oLTIpOyAgICAgICAgICAv KiBOb3Qgb3Blbi4gKi8KKworICAgIGlzX3RuID0gKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RF TE5FVCgpKSB8fAorCSAgICAoIXhsb2NhbCAmJiBzc3RlbG5ldCk7CisKKyNpZmRlZiBUVExFQlVG CisgICAgaWYgKHR0cHVzaCA+PSAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsInR0aW5jIiwidHRw dXNoIix0dHB1c2gpOworICAgICAgICBjaCA9IHR0cHVzaDsKKyAgICAgICAgdHRwdXNoID0gLTE7 CisgICAgICAgIHJldHVybihjaCk7CisgICAgfQorICAgIGlmIChsZV9kYXRhKSB7CisgICAgICAg IGlmIChsZV9nZXRjaGFyKCZjaCkgPiAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0dGlu YyBsZV9nZXRjaGFyIiwiY2giLGNoKTsKKyAgICAgICAgICAgIHJldHVybihjaCk7CisgICAgICAg IH0KKyAgICB9CisjZW5kaWYgLyogVFRMRUJVRiAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYg KHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsKKyAgICBlbHNlCisjZW5kaWYgLyogTkVUQ01EICov CisgICAgICBmZCA9IHR0eWZkOworCisgICAgaWYgKCh0aW1vIDw9IDApCQkJLyogVW50aW1lZC4g Ki8KKyNpZmRlZiBNWVJFQUQKKwl8fCAobXlfY291bnQgPiAwKQkJLyogQnVmZmVyZWQgY2hhciBh bHJlYWR5IHdhaXRpbmcuICovCisjZW5kaWYgLyogTVlSRUFEICovCisJKSB7CisjaWZkZWYgTVlS RUFECisgICAgICAgIC8qIENvbW0gbGluZSBmYWlsdXJlIHJldHVybnMgLTEgdGhydSBteXJlYWQs IHNvIG5vICY9IDAzNzcgKi8KKwluID0gbXlyZWFkKCk7CQkJLyogV2FpdCBmb3IgYSBjaGFyYWN0 ZXIuLi4gKi8KKwkvKiBkZWJ1ZyhGMDAwLCJ0dGluYyBNWVJFQUQgbiIsIiIsbik7ICovCisjaWZk ZWYgQ0tfRU5DUllQVElPTgorCS8qIGRlYnVnKEYxMDEsInR0aW5jIHVfZW5jcnlwdCIsIiIsVEVM T1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKTsgKi8KKwlpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZ UFRJT04pICYmIG4gPj0gMCkgeworCSAgICBjaCA9IG47CisJICAgIGNrX3RuX2RlY3J5cHQoKGNo YXIgKikmY2gsMSk7CisJICAgIG4gPSBjaDsKKwl9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LworCisjaWZkZWYgTkVUUFRZCisJaWYgKHR0cHR5ICYmIG4gPCAwKSB7CisJICAgIGRlYnVnKEYx MDEsInR0aW5jIGVycm9yIG9uIHB0eSIsIiIsbik7CisJICAgIHR0Y2xvcygwKTsKKwkgICAgcmV0 dXJuKG4pOworCX0KKyNlbmRpZiAvKiBORVRQVFkgKi8KKworI2lmZGVmIFROQ09ERQorCWlmICgo biA+IC0xKSAmJiBpc190bikKKwkgIHJldHVybigodW5zaWduZWQpKG4gJiAweGZmKSk7CisJZWxz ZQorI2VuZGlmIC8qIFROQ09ERSAqLworCSAgcmV0dXJuKG4gPCAwID8gbiA6ICh1bnNpZ25lZCko biAmIHR0cG1zaykpOworCisjZWxzZSAgLyogTVlSRUFEICovCisKKyAgICAgICAgd2hpbGUgKChu ID0gcmVhZChmZCwmY2gsMSkpID09IDApIC8qIFdhaXQgZm9yIGEgY2hhcmFjdGVyLiAqLworICAg ICAgICAvKiBTaG91bGRuJ3QgaGF2ZSB0byBsb29wIGluIHZlciA1QS4gKi8KKyNpZmRlZiBORVRD T05OCisJICBpZiAobmV0Y29ubikgewkJLyogU3BlY2lhbCBoYW5kbGluZyBmb3IgbmV0ICovCisJ ICAgICAgbmV0Y2xvcygpOwkJLyogSWYgcmVhZCgpIHJldHVybnMgMCBpdCBtZWFucyAqLworCSAg ICAgIG5ldGNvbm4gPSAwOwkJLyogdGhlIGNvbm5lY3Rpb24gaGFzIGRyb3BwZWQuICovCisJICAg ICAgZXJybm8gPSBFTk9UQ09OTjsKKwkgICAgICByZXR1cm4oLTIpOworCSAgfQorI2VuZGlmIC8q IE5FVENPTk4gKi8KKwkgIDsKKwkvKiBkZWJ1ZyhGMTAxLCJ0dGluYyIsIiIsY2gpOyAqLworI2lm ZGVmIFROQ09ERQorCWlmICgobiA+IDApICYmIGlzX3RuKSB7CisjaWZkZWYgQ0tfRU5DUllQVElP TgorCSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKSB7CisJCWNrX3RuX2RlY3J5 cHQoJmNoLDEpOworCQluID0gY2g7CisJICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov CisJICAgIHJldHVybigodW5zaWduZWQpKGNoICYgMHhmZikpOworCX0gZWxzZQorI2VuZGlmIC8q IFROQ09ERSAqLworICAgICAgICByZXR1cm4oKG4gPCAwKSA/IC00IDogKChuID09IDApID8gLTEg OiAodW5zaWduZWQpKGNoICYgdHRwbXNrKSkpOworI2VuZGlmIC8qIE1ZUkVBRCAqLworCisgICAg fSBlbHNlIHsJCQkJLyogVGltZWQgcmVhZCAqLworCisJaW50IG9sZGFsYXJtOworCXNhdmFsID0g c2lnbmFsKFNJR0FMUk0sdGltZXJoKTsJLyogU2V0IHVwIGhhbmRsZXIsIHNhdmUgb2xkIG9uZS4g Ki8KKwlvbGRhbGFybSA9IGFsYXJtKHRpbW8pOwkJLyogU2V0IGFsYXJtLCBzYXZlIG9sZCBvbmUu ICovCisJaWYgKAorI2lmZGVmIENLX1BPU0lYX1NJRworCSAgICBzaWdzZXRqbXAoc2pidWYsMSkK KyNlbHNlCisJICAgIHNldGptcChzamJ1ZikKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkg ICAgKSB7CQkJCS8qIFRpbWVyIGV4cGlyZWQgKi8KKwkgICAgdHRpbmN0aW1vID0gMTsKKwkgICAg biA9IC0xOwkJCS8qIHNldCBmbGFnICovCisJfSBlbHNlIHsKKyNpZmRlZiBNWVJFQUQKKwkgICAg biA9IG15cmVhZCgpOwkJLyogSWYgbWFuYWdpbmcgb3duIGJ1ZmZlci4uLiAqLworCSAgICBkZWJ1 ZyhGMTAxLCJ0dGluYyBteXJlYWQiLCIiLG4pOworCSAgICBjaCA9IG47CisjZWxzZQorCSAgICBu ID0gcmVhZChmZCwmY2gsMSk7CQkvKiBPdGhlcndpc2UgY2FsbCB0aGUgc3lzdGVtLiAqLworCSAg ICBpZiAobiA9PSAwKSBuID0gLTE7CisJICAgIGRlYnVnKEYxMDEsInR0aW5jIHJlYWQiLCIiLG4p OworI2VuZGlmIC8qIE1ZUkVBRCAqLworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorCSAgICBpZiAo VEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pICYmIG4gPj0gMCkgeworCQlja190bl9kZWNyeXB0 KChjaGFyICopJmNoLDEpOworCSAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCSAg ICBpZiAobiA+PSAwKQorCSAgICAgIG4gPSAodW5zaWduZWQpIChjaCAmIDB4ZmYpOworCSAgICBl bHNlCisJICAgICAgbiA9IChuIDwgMCkgPyAtNCA6IC0yOwkvKiBTcGVjaWFsIHJldHVybiBjb2Rl cy4gKi8KKwl9CisJdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRoZSB0aW1lciAqLworCWlmIChv bGRhbGFybSA+IDApIHsKKwkgICAgaWYgKG4gPT0gLTEpCQkvKiBhbmQgcmVzdG9yZSBhbnkgcHJl dmlvdXMgYWxhcm0gKi8KKwkgICAgICBvbGRhbGFybSAtPSB0aW1vOworCSAgICBpZiAob2xkYWxh cm0gPCAwKQkJLyogYWRqdXN0ZWQgYnkgb3VyIHRpbWVvdXQgaW50ZXJ2YWwgKi8KKwkgICAgICBv bGRhbGFybSA9IDA7CisJICAgIGlmIChvbGRhbGFybSkgeworCSAgICAgICAgZGVidWcoRjEwMSwi dHRpbmMgcmVzdG9yaW5nIG9sZGFsYXJtIiwiIixvbGRhbGFybSk7CisJCWFsYXJtKG9sZGFsYXJt KTsKKwkgICAgfQorCX0KKyNpZmRlZiBORVRDT05OCisJaWYgKG5ldGNvbm4pIHsKKwkgICAgaWYg KG4gPT0gLTIpIHsJCS8qIHJlYWQoKSByZXR1cm5zIDAgKi8KKwkJbmV0Y2xvcygpOwkJLyogb24g bmV0d29yayByZWFkIGZhaWx1cmUgKi8KKwkJbmV0Y29ubiA9IDA7CisJCWVycm5vID0gRU5PVENP Tk47CisJICAgIH0KKwl9CisjZW5kaWYJLyogTkVUQ09OTiAqLworI2lmZGVmIFROQ09ERQorCWlm ICgobiA+IC0xKSAmJiBpc190bikKKwkgIHJldHVybigodW5zaWduZWQpKG4gJiAweGZmKSk7CisJ ZWxzZQorI2VuZGlmIC8qIFROQ09ERSAqLworCSAgLyogUmV0dXJuIG1hc2tlZCBjaGFyIG9yIG5l Zy4gKi8KKwkgIHJldHVybiggKG4gPCAwKSA/IG4gOiAodW5zaWduZWQpKG4gJiB0dHBtc2spICk7 CisgICAgfQorfQorCisvKiAgUyBOIEQgQiBSIEsgIC0tICBTZW5kIGEgQlJFQUsgc2lnbmFsIG9m IHRoZSBnaXZlbiBkdXJhdGlvbiAgKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitz bmRicmsoaW50IG1zZWMpIHsJCQkvKiBBcmd1bWVudCBpcyBtaWxsaXNlY29uZHMgKi8KKyNlbHNl CitzbmRicmsobXNlYykgaW50IG1zZWM7IHsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2lmbmRl ZiBQT1NJWAorICAgIGludCB4LCBuOworI2VuZGlmIC8qIFBPU0lYICovCisKKyNpZmRlZiBPWE9T CisjZGVmaW5lIEJTREJSRUFLCisjZW5kaWYgLyogT1hPUyAqLworCisjaWZkZWYgQU5ZQlNECisj ZGVmaW5lIEJTREJSRUFLCisjZW5kaWYgLyogQU5ZQlNEICovCisKKyNpZmRlZiBCU0Q0NAorI2Rl ZmluZSBCU0RCUkVBSworI2VuZGlmIC8qIEJTRDQ0ICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2lm ZGVmIEJTREJSRUFLCisjdW5kZWYgQlNEQlJFQUsKKyNlbmRpZiAvKiBCU0RCUkVBSyAqLworI2Vu ZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBCRUxMVjEwCisjaWZkZWYgQlNEQlJFQUsKKyN1 bmRlZiBCU0RCUkVBSworI2VuZGlmIC8qIEJTREJSRUFLICovCisjZW5kaWYgLyogQkVMTFYxMCAq LworCisjaWZkZWYgUFJPVlgxCisgICAgY2hhciBzcGQ7CisjZW5kaWYgLyogUFJPVlgxICovCisK KyAgICBkZWJ1ZyhGMTAxLCJ0dHNuZGIgdHR5ZmQiLCIiLHR0eWZkKTsKKyAgICBpZiAodHR5ZmQg PCAwKSByZXR1cm4oLTEpOyAgICAgICAgICAvKiBOb3Qgb3Blbi4gKi8KKworI2lmZGVmIFBsYW45 CisgICAgcmV0dXJuIHA5c25kYnJrKG1zZWMpOworI2Vsc2UKKyNpZmRlZiBORVRDT05OCisjaWZk ZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkJCQkJLyogUGlwZSAqLworICAgICAgcmV0dXJuKHR0 b2MoJ1wwJykpOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0 dHB0eSkKKyAgICAgIHJldHVybih0dG9jKCdcMCcpKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAg ICBpZiAobmV0Y29ubikgCQkJLyogU2VuZCBuZXR3b3JrIEJSRUFLICovCisgICAgICByZXR1cm4o bmV0YnJlYWsoKSk7CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisgICAgaWYgKG1zZWMgPCAxIHx8 IG1zZWMgPiA1MDAwKSByZXR1cm4oLTEpOyAvKiBCYWQgYXJndW1lbnQgKi8KKworI2lmZGVmIFBP U0lYCQkJCS8qIEVhc3kgaW4gUE9TSVggKi8KKyAgICB7CisJaW50IHg7CisJZGVidWcoRjExMSwi c25kYnJrIFBPU0lYIixja2l0b2EobXNlYyksKG1zZWMvMzc1KSk7CisJZXJybm8gPSAwOworCXgg PSB0Y3NlbmRicmVhayh0dHlmZCxtc2VjIC8gMzc1KTsKKwlkZWJ1ZyhGMTExLCJzbmRicmsgdGNz ZW5kYnJlYWsiLGNraXRvYShlcnJubykseCk7CisJcmV0dXJuKHgpOworICAgIH0KKyNlbHNlCisj aWZkZWYgUFJPVlgxCisgICAgZ3R0eSh0dHlmZCwmdHRidWYpOyAgICAgICAgICAgICAgICAgLyog R2V0IGN1cnJlbnQgdHR5IGZsYWdzICovCisgICAgc3BkID0gdHRidWYuc2dfb3NwZWVkOyAgICAg ICAgICAgICAgLyogU2F2ZSBzcGVlZCAqLworICAgIHR0YnVmLnNnX29zcGVlZCA9IEI1MDsgICAg ICAgICAgICAgIC8qIENoYW5nZSB0byA1MCBiYXVkICovCisgICAgc3R0eSh0dHlmZCwmdHRidWYp OyAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAgIG4gPSAoaW50KXN0cmxlbihicm51bHMp OwkJLyogU2VuZCB0aGUgcmlnaHQgbnVtYmVyIG9mIG51bGxzICovCisgICAgeCA9IG1zZWMgLyA5 MTsKKyAgICBpZiAoeCA+IG4pIHggPSBuOworICAgIHdyaXRlKHR0eWZkLGJybnVscyxuKTsKKyAg ICB0dGJ1Zi5zZ19vc3BlZWQgPSBzcGQ7ICAgICAgICAgICAgICAvKiBSZXN0b3JlIHNwZWVkICov CisgICAgc3R0eSh0dHlmZCwmdHRidWYpOyAgICAgICAgICAgICAgICAgLyogIC4uLiAqLworICAg IHJldHVybigwKTsKKyNlbHNlCisjaWZkZWYgYWVnaXMKKyAgICBzaW9fJGNvbnRyb2woKHNob3J0 KXR0eWZkLCBzaW9fJHNlbmRfYnJlYWssIG1zZWMsIHN0KTsKKyAgICByZXR1cm4oMCk7CisjZWxz ZQorI2lmZGVmIEJTREJSRUFLCisgICAgbiA9IEZXUklURTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogRmx1c2ggb3V0cHV0IHF1ZXVlLiAqLworLyogV2F0Y2ggb3V0IGZvciBpbnQgdnMgbG9u ZyBwcm9ibGVtcyBpbiAmbiBhcmchICovCisgICAgZGVidWcoRjEwMSwic25kYnJrIEJTREJSRUFL IiwiIixtc2VjKTsKKyAgICBpb2N0bCh0dHlmZCxUSU9DRkxVU0gsJm4pOyAgICAgICAgICAvKiBJ Z25vcmUgYW55IGVycm9ycy4uICovCisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTQlJLLChjaGFy ICopMCkgPCAwKSB7ICAvKiBUdXJuIG9uIEJSRUFLICovCisgICAgICAgIHBlcnJvcigiQ2FuJ3Qg c2VuZCBCUkVBSyIpOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICB4ID0gbXNsZWVw KG1zZWMpOyAgICAgICAgICAgICAgICAgICAgLyogU2xlZXAgZm9yIHNvIG1hbnkgbWlsbGlzZWNv bmRzICovCisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NDQlJLLChjaGFyICopMCkgPCAwKSB7ICAv KiBUdXJuIG9mZiBCUkVBSyAqLworICAgICAgICBwZXJyb3IoIkJSRUFLIHN0dWNrISEhIik7Cisg ICAgICAgIGRvZXhpdChCQURfRVhJVCwtMSk7CQkvKiBHZXQgb3V0LCBjbG9zaW5nIHRoZSBsaW5l LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgd2l0aCBi YWQgZXhpdCBzdGF0dXMgKi8KKyAgICB9CisgICAgcmV0dXJuKHgpOworI2Vsc2UKKyNpZmRlZiBB VFRTVgorLyoKKyAgTm8gd2F5IHRvIHNlbmQgYSBsb25nIEJSRUFLIGluIFN5cyBWLCBzbyBzZW5k IGEgYnVuY2ggb2YgcmVndWxhciBvbmVzLgorICAoQWN0dWFsbHksIFN5cyBWIFI0IGlzICpzdXBw b3NlZCogdG8gaGF2ZSB0aGUgUE9TSVggdGNzZW5kYnJlYWsoKSBmdW5jdGlvbiwKKyAgYnV0IHRo ZXJlJ3Mgbm8gd2F5IGZvciB0aGlzIGNvZGUgdG8ga25vdyBmb3Igc3VyZS4pCisqLworICAgIGRl YnVnKEYxMDEsInNuZGJyayBBVFRTViIsIiIsbXNlYyk7CisgICAgeCA9IG1zZWMgLyAyNzU7Cisg ICAgZm9yIChuID0gMDsgbiA8IHg7IG4rKykgeworCS8qIFJlcG9ydGVkbHkgdGhlIGNhc3QgYnJl YWtzIHRoaXMgZnVuY3Rpb24gb24gc29tZSBzeXN0ZW1zICovCisJLyogQnV0IHRoZW4gd2h5IHdh cyBpdCBoZXJlIGluIHRoZSBmaXJzdCBwbGFjZT8gKi8KKwlpZiAoaW9jdGwodHR5ZmQsVENTQlJL LCAvKiAoY2hhciAqKSAqLyAwKSA8IDApIHsKKwkgICAgcGVycm9yKCJDYW4ndCBzZW5kIEJSRUFL Iik7CisJICAgIHJldHVybigtMSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oMCk7CisjZWxzZQor I2lmZGVmICBWNworICAgIGRlYnVnKEYxMDEsInNuZGJyayBWNyIsIiIsbXNlYyk7CisgICAgcmV0 dXJuKGdlbmJyayh0dHlmZCwyNTApKTsJCS8qIFNpbXVsYXRlIGEgQlJFQUsgKi8KKyNlbHNlCisg ICAgZGVidWcoRjEwMSwic25kYnJrIGNhdGNoYWxsIiwiIixtc2VjKTsKKyAgICB0dG9jKDApO3R0 b2MoMCk7dHRvYygwKTt0dG9jKDApOworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBWNyAqLwor I2VuZGlmIC8qIEJTREJSRUFLICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBhZWdp cyAqLworI2VuZGlmIC8qIFBST1ZYMSAqLworI2VuZGlmIC8qIFBPU0lYICovCisjZW5kaWYgLyog UGxhbjkgKi8KK30KKworLyogIFQgVCBTIE4gRCBCICAtLSAgU2VuZCBhIEJSRUFLIHNpZ25hbCAg Ki8KKworaW50Cit0dHNuZGIoKSB7CisjaWZkZWYgVE5fQ09NUE9SVAorICAgIGlmIChuZXRjb25u ICYmIGlzdG5jb21wb3J0KCkpCisgICAgICByZXR1cm4oKHRuc25kYigyNzVMKSA+PSAwKSA/IDAg OiAtMSk7CisgICAgZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAgIHJldHVybihz bmRicmsoMjc1KSk7Cit9CisKKy8qICBUIFQgUyBOIEQgTCBCICAtLSAgU2VuZCBhIExvbmcgQlJF QUsgc2lnbmFsICAqLworCitpbnQKK3R0c25kbGIoKSB7CisjaWZkZWYgVE5fQ09NUE9SVAorICAg IGlmIChuZXRjb25uICYmIGlzdG5jb21wb3J0KCkpCisgICAgICByZXR1cm4oKHRuc25kYigxODAw TCkgPj0gMCkgPyAwIDogLTEpOworICAgIGVsc2UKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisg ICAgcmV0dXJuKHNuZGJyaygxNTAwKSk7Cit9CisKKy8qICBNIFMgTCBFIEUgUCAgLS0gIE1pbGxp c2Vjb25kIHZlcnNpb24gb2Ygc2xlZXAoKS4gICovCisKKy8qCisgIENhbGwgd2l0aCBudW1iZXIg b2YgbWlsbGlzZWNvbmRzICh0aG91c2FuZHRocyBvZiBzZWNvbmRzKSB0byBzbGVlcC4KKyAgSW50 ZW5kZWQgb25seSBmb3Igc21hbGwgaW50ZXJ2YWxzLiAgRm9yIGJpZyBvbmVzLCBqdXN0IHVzZSBz bGVlcCgpLgorICBIaWdobHkgc3lzdGVtLWRlcGVuZGVudC4KKyAgUmV0dXJucyAwIGFsd2F5cywg ZXZlbiBpZiBpdCBkaWRuJ3Qgd29yay4KKyovCisKKy8qIERlZmluZSBNU0xGVElNRSBmb3Igc3lz dGVtcyB0aGF0IG11c3QgdXNlIGFuIGZ0aW1lKCkgbG9vcC4gKi8KKyNpZmRlZiBBTllCU0QJCQkJ LyogRm9yIHByZS00LjIgQlNEIHZlcnNpb25zICovCisjaWZuZGVmIEJTRDQKKyNkZWZpbmUgTVNM RlRJTUUKKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogQU5ZQlNEICovCisKKyNpZmRlZiBU T1dFUjEJCQkJLyogTkNSIFRvd2VyIE9TIDEuMCAqLworI2RlZmluZSBNU0xGVElNRQorI2VuZGlm IC8qIFRPV0VSMSAqLworCisjaWZkZWYgQ09IRVJFTlQgICAgICAgICAvKiBDb2hlcmVudC4uLiAq LworI2lmbmRlZiBfSTM4NiAgICAgICAgICAgLyogTWF5YmUgQ29oZXJlbnQvMzg2IHNob3VsZCBn ZXQgdGhpcywgdG9vICovCisjZGVmaW5lIE1TTEZUSU1FICAgICAgICAvKiBPcGluaW9ucyBhcmUg ZGl2aWRlZCAqLworI2VuZGlmIC8qIF9JMzg2ICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKwor I2lmZGVmIENPTU1FTlQKKyNpZmRlZiBHRVRNU0VDCisKKy8qIE1pbGxpc2Vjb25kIHRpbWVyICov CisKK3N0YXRpYyBsb25nIG1zZWNiYXNlID0gMEw7CQkvKiBVbnNpZ25lZCBsb25nIG5vdCBwb3J0 YWJsZSAqLworCitsb25nCitnZXRtc2VjKCkgewkJCQkvKiBNaWxsaXNlY29uZHMgc2luY2UgYmFz ZSB0aW1lICovCisgICAgc3RydWN0IHRpbWV2YWwgeHY7CisgICAgc3RydWN0IHRpbWV6b25lIHh6 OworICAgIGxvbmcgc2VjcywgbXNlY3M7CisgICAgaWYgKAorI2lmZGVmIEdUT0RPTkVBUkcKKwln ZXR0aW1lb2ZkYXkoJnR2KQorI2Vsc2UKKyNpZmRlZiBQVFgKKwlnZXR0aW1lb2ZkYXkoJnR2LCBO VUxMKQorI2Vsc2UKKwlnZXR0aW1lb2ZkYXkoJnR2LCAmdHopCisjZW5kaWYgLyogUFRYICovCisj ZW5kaWYgLyogR1RPRE9ORUFSRyAqLworCTwgMCkKKyAgICAgIHJldHVybigtMSk7CisgICAgaWYg KG1zZWNiYXNlID09IDBMKSB7CQkvKiBGaXJzdCBjYWxsLCBzZXQgYmFzZSB0aW1lLiAqLworCW1z ZWNiYXNlID0gdHYudHZfc2VjOworCWRlYnVnKEYxMDEsImdldG1zZWMgYmFzZSIsIiIsbXNlY2Jh c2UpOworICAgIH0KKyAgICByZXR1cm4oKCh0di50dl9zZWMgLSBtc2VjYmFzZSkgKiAxMDAwTCkg KyAodHYudHZfdXNlYyAvIDEwMDBMKSk7Cit9CisjZW5kaWYgLyogR0VUTVNFQyAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworI2lmZGVmIFNFTEVDVAoraW50Cit0dHdhaXQoZmQsIHNlY3MpIGlu dCBmZCwgc2VjczsgeworICAgIGludCB4OworICAgIGZkX3NldCByZmRzOworICAgIEZEX1pFUk8o JnJmZHMpOworICAgIEZEX1NFVChmZCwmcmZkcyk7CisgICAgdHYudHZfc2VjID0gc2VjczsKKyAg ICB0di50dl91c2VjID0gMEw7CisgICAgZXJybm8gPSAwOworICAgIGlmICgoeCA9IHNlbGVjdChG RF9TRVRTSVpFLAorI2lmZGVmIEhQVVg5CisJCSAgICAoaW50ICopCisjZWxzZQorI2lmZGVmIEhQ VVgxMDAwCisJCSAgICAoaW50ICopCisjZW5kaWYgLyogSFBVWDEwMDAgKi8KKyNlbmRpZiAvKiBI UFVYOSAqLworCQkgICAgJnJmZHMsCisJCSAgICAwLCAwLCAmdHYpKSA8IDApIHsKKwlkZWJ1ZyhG MTAxLCJ0dHdhaXQgc2VsZWN0IGVycm5vIiwiIixlcnJubyk7CisJcmV0dXJuKDApOworICAgIH0g ZWxzZSB7CisJZGVidWcoRjEwMSwidHR3YWl0IE9LIiwiIixlcnJubyk7CisJeCA9IEZEX0lTU0VU KGZkLCAmcmZkcyk7CisJZGVidWcoRjEwMSwidHR3YWl0IHNlbGVjdCB4IiwiIix4KTsKKwlyZXR1 cm4oeCA/IDEgOiAwKTsKKyAgICB9Cit9CisjZW5kaWYgLyogU0VMRUNUICovCisKK2ludAorbXNs ZWVwKG0pIGludCBtOyB7CisvKgorICBPdGhlciBwb3NzaWJpbGl0aWVzIGhlcmUgYXJlOgorICAg bmFub3NsZWVwKCksIHJlcG9ydGVkbHkgZGVmaW5lZCBpbiBQT1NJWC40LgorICAgc2dpbmFwKCks IElSSVggb25seSAoYmFjayB0byB3aGF0IElSSVggdmVyc2lvbiBJIGRvbid0IGtub3cpLgorKi8K KyNpZmRlZiBQbGFuOQorICAgIHJldHVybiBfU0xFRVAobSk7CisjZWxzZQorI2lmZGVmIEJFT1NP UkJFQk9YCisgICAgc25vb3plKG0qMTAwMCk7CisjZWxzZSAvKiBCRU9TT1JCRUJPWCAqLworI2lm ZGVmIFNFTEVDVAorICAgIGludCB0MSwgeDsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgU0VMRUNU IDEiLCIiLG0pOworICAgIGlmIChtIDw9IDApIHJldHVybigwKTsKKyAgICBpZiAobSA+PSAxMDAw KSB7CQkJLyogQ2F0Y2ggYmlnIGFyZ3VtZW50cy4gKi8KKwlzbGVlcChtLzEwMDApOworCW0gPSBt ICUgMTAwMDsKKwlpZiAobSA8IDEwKSByZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEs Im1zbGVlcCBTRUxFQ1QgMiIsIiIsbSk7CisjaWZkZWYgQkVMTFYxMAorICAgIHggPSBzZWxlY3Qo IDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIG0gKTsKKyAgICBkZWJ1 ZyhGMTAxLCJtc2xlZXAgQkVMTFYxMCBzZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogQkVMTFYxMCAq LworI2lmZGVmIEhQVVg5CisgICAgZ2V0dGltZW9mZGF5KCZ0diwgJnR6KTsKKyNlbHNlCisKKyNp Zm5kZWYgQ09IRVJFTlQKKyNpZmRlZiBHVE9ET05FQVJHCisgICAgaWYgKGdldHRpbWVvZmRheSgm dHYpIDwgMCkKKyNlbHNlCisjaWZkZWYgUFRYCisgICAgaWYgKGdldHRpbWVvZmRheSgmdHYsTlVM TCkgPCAwKQorI2Vsc2UKKyNpZmRlZiBOT1RJTUVaT05FCisgICAgaWYgKGdldHRpbWVvZmRheSgm dHYsIE5VTEwpIDwgMCkJLyogd29uZGVyIHdoYXQgdGhpcyBkb2VzLi4uICovCisjZWxzZQorICAg IGlmIChnZXR0aW1lb2ZkYXkoJnR2LCAmdHopIDwgMCkKKyNlbmRpZiAvKiBOT1RJTUVaT05FICov CisjZW5kaWYgLyogUFRYICovCisjZW5kaWYgLyogR1RPRE9ORUFSRyAqLworICAgICAgcmV0dXJu KC0xKTsKKyAgICB0MSA9IHR2LnR2X3NlYzsgICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmRz ICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworICAgIHR2LnR2 X3NlYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBzZWxlY3QoKSAqLworICAgIHR2 LnR2X3VzZWMgPSBtICogMTAwMEw7CisjaWZkZWYgQlNENDQKKyAgICB4ID0gc2VsZWN0KCAwLCAo ZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhG MTAxLCJtc2xlZXAgQlNENDQgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIEJTRDQ0ICovCisjaWZk ZWYgX19saW51eF9fCisgICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikw LCAoZmRfc2V0ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIF9fbGludXhfXyBz ZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogX19saW51eF9fICovCisjaWZkZWYgQlNENDMKKyAgICB4 ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYg KTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQlNENDMgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8q IEJTRDQzICovCisjaWZkZWYgUU5YNgorICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAo ZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBR Tlg2IHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBRTlg2ICovCisjaWZkZWYgUU5YCisgICAgeCA9 IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7 CisgICAgZGVidWcoRjEwMSwibXNsZWVwIFFOWCBzZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogUU5Y ICovCisjaWZkZWYgQ09IRVJFTlQKKyAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZk X3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQ09I RVJFTlQgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIENPSEVSRU5UICovCisjaWZkZWYgSFBVWDEw MDAJCQkJLyogMTAuMDAgb25seSwgbm90IDEwLjEwIG9yIGxhdGVyICovCisgICAgeCA9IHNlbGVj dCggMCwgKGludCAqKTAsIChpbnQgKikwLCAoaW50ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEw MSwibXNsZWVwIEhQLVVYIDEwLjAwIHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBIUFVYMTAwMCAq LworI2lmZGVmIFNWUjQKKyAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAq KTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgU1ZSNCBzZWxl Y3QiLCIiLHgpOworI2Vsc2UgLyogU1ZSNCAqLworI2lmZGVmIE9TRjQwCisgICAgeCA9IHNlbGVj dCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisgICAg ZGVidWcoRjEwMSwibXNsZWVwIE9TRjQwIHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBPU0Y0MCAq LworI2lmZGVmIFBUWAorICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICop MCwgKGZkX3NldCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBPU0Y0MCBzZWxl Y3QiLCIiLHgpOworI2Vsc2UKKyAgICB4ID0gc2VsZWN0KCAwLCAoaW50ICopMCwgKGludCAqKTAs IChpbnQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgY2F0Y2gtYWxsIHNlbGVj dCIsIiIseCk7CisjZW5kaWYgLyogUFRYICovCisjZW5kaWYgLyogT1NGNDAgKi8KKyNlbmRpZiAv KiBIUDEwMDAgKi8KKyNlbmRpZiAvKiBTVlI0ICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNl bmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBRTlg2ICovCisjZW5kaWYgLyogQlNENDMgKi8KKyNl bmRpZiAvKiBfX2xpbnV4X18gKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIEJFTExW MTAgKi8KKyAgICByZXR1cm4oMCk7CisKKyNlbHNlCQkJCQkvKiBOb3QgU0VMRUNUICovCisjaWZk ZWYgQ0tfUE9MTAkJCQkvKiBXZSBoYXZlIHBvbGwoKSAqLworICAgIHN0cnVjdCBwb2xsZmQgcGZk OwkJCS8qIFN1cHBseSBhIHZhbGlkIGFkZHJlc3MgZm9yIHBvbGwoKSAqLworCisjaWZkZWYgT0RU MzAJCQkJLyogQnV0IGluIFNDTyBPRFQgMy4wICovCisjaWZkZWYgTkFQCQkJCS8qIHdlIHNob3Vs ZCB1c2UgbmFwKCkgaW5zdGVhZCAqLworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBPRFQgMy4wIE5B UCIsIiIsbSk7IC8qIGJlY2F1c2UgdXNpbmcgcG9sbCgpIGhlcmUgKi8KKyAgICBuYXAoKGxvbmcp bSk7CQkJICAgLyogc2VlbXMgdG8gYnJlYWsgZGlhbGluZy4gKi8KKyAgICByZXR1cm4oMCk7Cisj ZWxzZQorICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBPRFQgMy4wIFBPTEwiLCIiLG0pOworICAgIHBv bGwoJnBmZCwgMCwgbSk7CisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIE5BUCAqLworI2Vsc2UK KyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgUE9MTCIsIiIsbSk7CisgICAgcG9sbCgmcGZkLCAwLCBt KTsKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogT0RUMzAgKi8KKworLyoKKyAgV2UgY291bGQg aGFuZGxlIHRoZSBhYm92ZSBtb3JlIGNsZWFubHkgYnkganVzdCBsZXR0aW5nIG5hcCgpIGFsd2F5 cworICB0YWtlIHByZWNlZGVuY2Ugb3ZlciBwb2xsKCkgaW4gdGhpcyByb3V0aW5lLCBidXQgdGhl cmUgaXMgbm8gd2F5IHRvIGtub3cKKyAgd2hldGhlciB0aGF0IHdvdWxkIGJyZWFrIHNvbWV0aGlu ZyBlbHNlLgorKi8KKworI2Vsc2UJCQkJCS8qIE5vdCBQT0xMICovCisjaWZkZWYgVVNMRUVQCisv KgorICAiVGhpcyByb3V0aW5lIGlzIGltcGxlbWVudGVkIHVzaW5nIHNldGl0aW1lcigyKTsgaXQg cmVxdWlyZXMgZWlnaHQKKyAgc3lzdGVtIGNhbGxzLi4uIi4gIEluIG90aGVyIHdvcmRzLCBpdCBt aWdodCB0YWtlIDUgbWludXRlcyB0byBzbGVlcAorICAxMCBtaWxsaXNlY29uZHMuLi4KKyovCisg ICAgZGVidWcoRjEwMSwibXNsZWVwIFVTTEVFUCIsIiIsbSk7CisgICAgaWYgKG0gPj0gMTAwMCkg ewkJCS8qIENhdGNoIGJpZyBhcmd1bWVudHMuICovCisJc2xlZXAobS8xMDAwKTsKKwltID0gbSAl IDEwMDA7CisJaWYgKG0gPCAxMCkgcmV0dXJuKDApOworICAgIH0KKyAgICB1c2xlZXAoKHVuc2ln bmVkIGludCkobSAqIDEwMDApKTsKKyAgICByZXR1cm4oMCk7CisjZWxzZQorI2lmZGVmIGFlZ2lz CisgICAgdGltZV8kY2xvY2tfdCBkdXI7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIGFlZ2lzIiwi IixtKTsKKyAgICBkdXIuYzIuaGlnaDE2ID0gMDsKKyAgICBkdXIuYzIubG93MzIgID0gMjUwICog bTsgLyogb25lIG1pbGxpc2Vjb25kID0gMjUwIGZvdXIgbWljcm9zZWNvbmQgdGlja3MgKi8KKyAg ICB0aW1lXyR3YWl0KHRpbWVfJHJlbGF0aXZlLCBkdXIsIHN0KTsKKyAgICByZXR1cm4oMCk7Cisj ZWxzZQorI2lmZGVmIFBST1ZYMQorICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBWZW5peCIsIiIsbSk7 CisgICAgaWYgKG0gPD0gMCkgcmV0dXJuKDApOworICAgIHNsZWVwKC0oKG0gKiA2MCArIDUwMCkg LyAxMDAwKSk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBOQVAKKyAgICBkZWJ1ZyhG MTAxLCJtc2xlZXAgTkFQIiwiIixtKTsKKyAgICBuYXAoKGxvbmcpbSk7CisgICAgcmV0dXJuKDAp OworI2Vsc2UKKyNpZmRlZiBBVFRTVgorI2lmbmRlZiBCU0Q0NAorICAgIGV4dGVybiBsb25nIHRp bWVzKCk7CQkvKiBPciAjaW5jbHVkZSA8dGltZXMuaD4gPyAqLworI2VuZGlmIC8qIEJTRDQ0ICov CisgICAgbG9uZyB0MSwgdDIsIHRhcnJheVs0XTsKKyAgICBpbnQgdDM7CisgICAgY2hhciAqY3Ag PSBnZXRlbnYoIkhaIik7CisgICAgaW50IENMT0NLX1RJQ0s7CisgICAgaW50IGhlcnR6OworCisg ICAgaWYgKGNwICYmIChoZXJ0eiA9IGF0b2koY3ApKSkgeworICAgICAgICBDTE9DS19USUNLICA9 IDEwMDAgLyBoZXJ0ejsKKyAgICB9IGVsc2UgewkJCQkvKiBwcm9iYWJseSBzaW5nbGUgdXNlciBt b2RlICovCisjaWZkZWYgSFoKKyAgICAgICAgQ0xPQ0tfVElDSyAgPSAxMDAwIC8gSFo7CisjZWxz ZQorCXN0YXRpYyB3YXJuZWQgPSAwOworCS8qIEhaIGFsd2F5cyBleGlzdHMgaW4sIGZvciBpbnN0 YW5jZSwgU0NPIFhlbml4LCBzbyB5b3UgZG9uJ3QgaGF2ZSB0bworCSAqIG1ha2Ugc3BlY2lhbCAj aWZkZWZzIGZvciBYRU5JWCBoZXJlLCBsaWtlIGluIHZlciA0Ri4gQWxzbywgaWYgeW91CisJICog aGF2ZSBYZW5peCwgeW91IGhhdmUgc2hvdWxkIGhhdmUgbmFwKCksIHNvIHRoZSBiZXN0IGlzIHRv IHVzZSAtRE5BUAorCSAqIGluIHRoZSBtYWtlZmlsZS4gTW9zdCBzeXN0ZW1zIGhhdmUgSFouCisJ ICovCisJQ0xPQ0tfVElDSyA9IDE3OwkJLyogMS82MCBzZWMgKi8KKwlpZiAoIXdhcm5lZCkgewor ICAgICAgICAgIHByaW50Zigid2FybmluZzogZW52aXJvbm1lbnQgdmFyaWFibGUgSFogYmFkLi4u IHVzaW5nIEhaPSVkXHJcbiIsCisJCSAxMDAwIC8gQ0xPQ0tfVElDSyk7CisgICAgICAgICAgd2Fy bmVkID0gMTsKKwl9CisjZW5kaWYgLyogIUhaICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsIm1z bGVlcCBBVFRTViIsIiIsbSk7CisgICAgaWYgKG0gPD0gMCkgcmV0dXJuKDApOworICAgIGlmICht ID49IDEwMDApIHsJCQkvKiBDYXRjaCBiaWcgYXJndW1lbnRzLiAqLworCXNsZWVwKG0vMTAwMCk7 CisJbSA9IG0gJSAxMDAwOworCWlmIChtIDwgMTApIHJldHVybigwKTsKKyAgICB9CisgICAgaWYg KCh0MSA9IHRpbWVzKHRhcnJheSkpIDwgMCkgcmV0dXJuKC0xKTsKKyAgICB3aGlsZSAoMSkgewor ICAgICAgICBpZiAoKHQyID0gdGltZXModGFycmF5KSkgPCAwKSByZXR1cm4oLTEpOworICAgICAg ICB0MyA9ICgoaW50KSh0MiAtIHQxKSkgKiBDTE9DS19USUNLOworICAgICAgICBpZiAodDMgPiBt KSByZXR1cm4odDMpOworICAgIH0KKyNlbHNlIC8qIE5vdCBBVFRTViAqLworI2lmZGVmIE1TTEZU SU1FCQkJCS8qIFVzZSBmdGltZSgpIGxvb3AuLi4gKi8KKyAgICBpbnQgdDEsIHQzID0gMDsKKyAg ICBkZWJ1ZyhGMTAxLCJtc2xlZXAgTVNMRlRJTUUiLCIiLG0pOworICAgIGlmIChtIDw9IDApIHJl dHVybigwKTsKKyAgICBpZiAobSA+PSAxMDAwKSB7CQkJLyogQ2F0Y2ggYmlnIGFyZ3VtZW50cy4g Ki8KKwlzbGVlcChtLzEwMDApOworCW0gPSBtICUgMTAwMDsKKwlpZiAobSA8IDEwKSByZXR1cm4o MCk7CisgICAgfQorI2lmZGVmIFFOWAorICAgIGZ0aW1lKCZmdHApOwkJCS8qIHZvaWQgZnRpbWUo KSBpbiBRTlggKi8KKyNlbHNlCisgICAgaWYgKGZ0aW1lKCZmdHApIDwgMCkgcmV0dXJuKC0xKTsJ LyogR2V0IGJhc2UgdGltZS4gKi8KKyNlbmRpZiAvKiBRTlggKi8KKyAgICB0MSA9ICgoZnRwLnRp bWUgJiAweGZmKSAqIDEwMDApICsgZnRwLm1pbGxpdG07CisgICAgd2hpbGUgKDEpIHsKKyAgICAg ICAgZnRpbWUoJmZ0cCk7CQkJLyogR2V0IGN1cnJlbnQgdGltZSBhbmQgY29tcGFyZS4gKi8KKyAg ICAgICAgdDMgPSAoKChmdHAudGltZSAmIDB4ZmYpICogMTAwMCkgKyBmdHAubWlsbGl0bSkgLSB0 MTsKKyAgICAgICAgaWYgKHQzID4gbSkgcmV0dXJuKDApOworICAgIH0KKyNlbHNlCisvKiBUaGlz IGluY2x1ZGVzIHRydWUgUE9TSVgsIHdoaWNoIGhhcyBubyB3YXkgdG8gZG8gdGhpcy4gKi8KKyAg ICBkZWJ1ZyhGMTAxLCJtc2xlZXAgYnVzeSBsb29wIiwiIixtKTsKKyAgICBpZiAobSA+PSAxMDAw KSB7CQkJLyogQ2F0Y2ggYmlnIGFyZ3VtZW50cy4gKi8KKwlzbGVlcChtLzEwMDApOworCW0gPSBt ICUgMTAwMDsKKwlpZiAobSA8IDEwKSByZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChtID4gMCkg d2hpbGUgKG0gPiAwKSBtLS07CS8qIEp1c3QgYSBkdW1iIGJ1c3kgbG9vcCAqLworICAgIHJldHVy bigwKTsKKyNlbmRpZiAvKiBNU0xGVElNRSAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYg LyogTkFQICovCisjZW5kaWYgLyogUFJPVlgxICovCisjZW5kaWYgLyogYWVnaXMgKi8KKyNlbmRp ZiAvKiBDS19QT0xMICovCisjZW5kaWYgLyogU0VMRUNUICovCisjZW5kaWYgLyogQkVPU09SQkVC T1ggKi8KKyNlbmRpZiAvKiBVU0xFRVAgKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiAg UiBUIEkgTSBFIFIgLS0gIFJlc2V0IGVsYXBzZWQgdGltZSBjb3VudGVyICAqLworCitWT0lECity dGltZXIoKSB7CisgICAgdGNvdW50ID0gdGltZSggKHRpbWVfdCAqKSAwICk7Cit9CisKKworLyog IEcgVCBJIE0gRSBSIC0tICBHZXQgY3VycmVudCB2YWx1ZSBvZiBlbGFwc2VkIHRpbWUgY291bnRl ciBpbiBzZWNvbmRzICAqLworCitpbnQKK2d0aW1lcigpIHsKKyAgICBpbnQgeDsKKyAgICB4ID0g KGludCkgKHRpbWUoICh0aW1lX3QgKikgMCApIC0gdGNvdW50KTsKKyAgICBkZWJ1ZyhGMTAxLCJn dGltZXIiLCIiLHgpOworICAgIHJldHVybiggKHggPCAwKSA/IDAgOiB4ICk7Cit9CisKKyNpZmRl ZiBHRlRJTUVSCisvKgorICBGbG9hdGluZy1wb2ludCB0aW1lcnMuICBSZXF1aXJlIG5vdCBvbmx5 IGZsb2F0aW5nIHBvaW50IHN1cHBvcnQsIGJ1dAorICBhbHNvIGdldHRpbWVvZmRheSgpLgorKi8K K3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0emVybzsKKworVk9JRAorcmZ0aW1lcigpIHsKKyNpZmRl ZiBHVE9ET05FQVJHCQkJLyogQWNjb3VudCBmb3IgTW90J3MgZGVmaW5pdGlvbiAqLworICAgIChW T0lEKSBnZXR0aW1lb2ZkYXkoJnR6ZXJvKTsKKyNlbHNlCisgICAgKFZPSUQpIGdldHRpbWVvZmRh eSgmdHplcm8sIChzdHJ1Y3QgdGltZXpvbmUgKikwKTsKKyNlbmRpZiAvKiBHVE9ET05FQVJHICov Cit9CisKK0NLRkxPQVQKK2dmdGltZXIoKSB7CisgICAgc3RydWN0IHRpbWV2YWwgdG5vdywgdGRl bHRhOworICAgIENLRkxPQVQgczsKKyNpZmRlZiBERUJVRworICAgIGNoYXIgZnBidWZbNjRdOwor I2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgR1RPRE9ORUFSRwkJCS8qIEFjY291bnQgZm9yIE1v dCdzIGRlZmluaXRpb24gKi8KKyAgICAoVk9JRCkgZ2V0dGltZW9mZGF5KCZ0bm93KTsKKyNlbHNl CisgICAgKFZPSUQpIGdldHRpbWVvZmRheSgmdG5vdywgKHN0cnVjdCB0aW1lem9uZSAqKTApOwor I2VuZGlmIC8qIEdUT0RPTkVBUkcgKi8KKworICAgIHRkZWx0YS50dl9zZWMgPSB0bm93LnR2X3Nl YyAtIHR6ZXJvLnR2X3NlYzsKKyAgICB0ZGVsdGEudHZfdXNlYyA9IHRub3cudHZfdXNlYyAtIHR6 ZXJvLnR2X3VzZWM7CisKKyAgICBpZiAodGRlbHRhLnR2X3VzZWMgPCAwKSB7CisJdGRlbHRhLnR2 X3NlYy0tOworCXRkZWx0YS50dl91c2VjICs9IDEwMDAwMDA7CisgICAgfQorICAgIHMgPSAoQ0tG TE9BVCkgdGRlbHRhLnR2X3NlYyArICgoQ0tGTE9BVCkgdGRlbHRhLnR2X3VzZWMgLyAxMDAwMDAw LjApOworICAgIGlmIChzIDwgR0ZNSU5USU1FKQorICAgICAgcyA9IEdGTUlOVElNRTsKKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlzcHJpbnRmKGZwYnVmLCIlZiIscyk7CisJZGVi dWcoRjExMCwiZ2Z0aW1lciIsZnBidWYsMCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisg ICAgcmV0dXJuKHMpOworfQorI2VuZGlmIC8qIEdGVElNRVIgKi8KKworLyogIFogVCBJIE0gRSAg LS0gIFJldHVybiBhc2N0aW1lKCktZm9ybWF0IGRhdGUvdGltZSBzdHJpbmcgICovCisvKgorICBO T1RFOiBhcyBhIHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgdGhpcyByb3V0aW5lLCB3ZSBjYW4gYWxz byBzZXQgdGhlCisgIGZvbGxvd2luZyB0d28gdmFyaWFibGVzLCBnaXZpbmcgdGhlIG1pY3JvLSBh bmQgbWlsbGlzZWNvbmRzIChmcmFjdGlvbnMgb2YKKyAgc2Vjb25kcykgb2YgdGhlIGNsb2NrIHRp bWUuICBDdXJyZW50bHkgdGhpcyBpcyBkb25lIG9ubHkgaW4gQlNELWJhc2VkIGJ1aWxkcworICB0 aGF0IHVzZSBnZXR0aW1lb2ZkYXkoKS4gIFdoZW4gdGhlc2UgdmFyaWFibGVzIGFyZSBub3QgZmls bGVkIGluLCB0aGV5IGFyZQorICBsZWZ0IHdpdGggYSB2YWx1ZSBvZiAtMUwuCisqLworc3RhdGlj IGNoYXIgYXNjdG1idWZbNjRdOworCitWT0lECit6dGltZShzKSBjaGFyICoqczsgeworCisjaWZk ZWYgR0ZUSU1FUgorLyoKKyAgVGhlIGdldHRpbWVvZmRheSgpIG1ldGhvZCwgd2hpY2ggYWxzbyBz ZXRzIHp0bXNlYyBhbmQgenR1c2VjLCB3b3JrcyBmb3IKKyAgYWxsIEdGVElNRVIgYnVpbGRzLiAg Tk9URTogenRtc2VjIGFuZCB6dHVzZWMgYXJlIGRlZmluZWQgaW4gY2tjbWFpLmMsCisgIGFuZCBl eHRlcm4gZGVjbGFyYXRpb25zIGZvciB0aGVtIGFyZSBpbiBja2NkZWIuaDsgdGh1cyB0aGV5IGFy ZQorICBkZWNsYXJlZCBpbiB0aGlzIGZpbGUgYnkgaW5jbHVzaW9uIG9mIGNrY2RlYi5oLgorKi8K KyAgICBjaGFyICphc2N0aW1lKCk7CisgICAgc3RydWN0IHRtICpsb2NhbHRpbWUoKTsKKyAgICBz dHJ1Y3QgdG0gKnRwOworICAgIHp0bXNlYyA9IC0xTDsKKyAgICB6dHVzZWMgPSAtMUw7CisKKyAg ICBpZiAoIXMpCisgICAgICBkZWJ1ZyhGMTAwLCJ6dGltZSBzPT1OVUxMIiwiIiwwKTsKKworI2lm ZGVmIEdUT0RPTkVBUkcKKyAgICAvKiBObyAybmQgYXJnIGluIE1vdG9yb2xhIFNWODggYW5kIHNv bWUgb3RoZXJzICovCisgICAgaWYgKGdldHRpbWVvZmRheSgmdHYpID4gLTEpCisjZWxzZQorI2lm bmRlZiBDT0hFUkVOVAorI2lmZGVmIFBUWAorICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LE5VTEwp ID4gLTEpCisjZWxzZQorI2lmZGVmIE5PVElNRVpPTkUKKyAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0 diwgTlVMTCkgPiAtMSkJLyogd29uZGVyIHdoYXQgdGhpcyBkb2VzLi4uICovCisjZWxzZQorICAg IGlmIChnZXR0aW1lb2ZkYXkoJnR2LCAmdHopID4gLTEpCisjZW5kaWYgLyogTk9USU1FWk9ORSAq LworI2VuZGlmIC8qIFBUWCAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogR1RP RE9ORUFSRyAqLworICAgICAgewkJCQkJLyogRmlsbCBpbiB0bSBzdHJ1Y3QgKi8KKwl6dHVzZWMg PSB0di50dl91c2VjOwkJLyogTWljcm9zZWNvbmRzICovCisJenRtc2VjID0genR1c2VjIC8gMTAw MEw7CS8qIE1pbGxpc2Vjb25kcyAqLworI2lmZGVmIEhQVVg5CisJeworCSAgICB0aW1lX3Qgeno7 CisJICAgIHp6ID0gdHYudHZfc2VjOworCSAgICB0cCA9IGxvY2FsdGltZSgmenopOwkvKiBDb252 ZXJ0IHRvIGxvY2FsIHRpbWUgKi8KKwl9CisjZWxzZQorI2lmZGVmIEhQVVgxMDAwCisJeworCSAg ICB0aW1lX3Qgeno7CisJICAgIHp6ID0gdHYudHZfc2VjOworCSAgICB0cCA9IGxvY2FsdGltZSgm enopOworCX0KKyNlbHNlCisjaWZkZWYgTElOVVgKKwl7ICAgLyogYXZvaWQgdW5hbGlnbmVkIGFj Y2VzcyB0cmFwIG9uIDY0LWJpdCBwbGF0Zm9ybXMgKi8KKwkgICAgdGltZV90IHp6OworCSAgICB6 eiA9IHR2LnR2X3NlYzsKKwkgICAgdHAgPSBsb2NhbHRpbWUoJnp6KTsKKwl9CisjZWxzZQorI2lm ZGVmIE1BQ09TWAorCXRwID0gbG9jYWx0aW1lKCh0aW1lX3QgKikmdHYudHZfc2VjKTsgLyogQ29u dmVydCB0byBsb2NhbCB0aW1lICovCisjZWxzZQorCXRwID0gbG9jYWx0aW1lKCZ0di50dl9zZWMp OworI2VuZGlmIC8qIE1BQ09TWCAqLworI2VuZGlmIC8qIExJTlVYICovCisjZW5kaWYgLyogSFBV WDEwMDAgKi8KKyNlbmRpZiAvKiBIUFVYOSAqLworCWlmIChzKSB7CisJICAgIGNoYXIgKiBzMjsK KwkgICAgczIgPSBhc2N0aW1lKHRwKTsJCS8qIENvbnZlcnQgcmVzdWx0IHRvIEFTQ0lJIHN0cmlu ZyAqLworCSAgICBhc2N0bWJ1ZlswXSA9ICdcMCc7CisJICAgIGlmIChzMikgY2tzdHJuY3B5KGFz Y3RtYnVmLHMyLDY0KTsKKwkgICAgKnMgPSBhc2N0bWJ1ZjsKKwkgICAgZGVidWcoRjExMSwienRp bWUgR0ZUSU1FUiBnZXR0aW1lb2ZkYXkiLCpzLHp0dXNlYyk7CisJfQorICAgIH0KKyNlbHNlICAv KiBOb3QgR0ZUSU1FUiAqLworCisjdW5kZWYgWlRJTUVWNwkJCQkvKiBXaGljaCBzeXN0ZW1zIG5l ZWQgdG8gdXNlICovCisjaWZkZWYgQ09IRVJFTlQJCQkJLyogb2xkIFVOSVggVmVyc2lvbiA3IHdh eS4uLiAqLworI2RlZmluZSBaVElNRVY3CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNpZmRlZiBU T1dFUjEKKyNkZWZpbmUgWlRJTUVWNworI2VuZGlmIC8qIFRPV0VSMSAqLworI2lmZGVmIEFOWUJT RAorI2lmbmRlZiBCU0Q0MgorI2RlZmluZSBaVElNRVY3CisjZW5kaWYgLyogQlNENDIgKi8KKyNl bmRpZiAvKiBBTllCU0QgKi8KKyNpZmRlZiBWNworI2lmbmRlZiBNSU5JWAorI2RlZmluZSBaVElN RVY3CisjZW5kaWYgLyogTUlOSVggKi8KKyNlbmRpZiAvKiBWNyAqLworI2lmZGVmIFBPU0lYCisj ZGVmaW5lIFpUSU1FVjcKKyNlbmRpZiAvKiBQT1NJWCAqLworCisjaWZkZWYgSFBVWDEwMjAKKy8q CisgIFByb3RvdHlwZXMgYXJlIGluIDx0aW1lLmg+LCBpbmNsdWRlZCBhYm92ZS4KKyovCisgICAg dGltZV90IGNsb2NrX3N0b3JhZ2U7CisgICAgY2xvY2tfc3RvcmFnZSA9IHRpbWUoKHZvaWQgKikg MCk7CisgICAgaWYgKHMpIHsKKwkqcyA9IGN0aW1lKCZjbG9ja19zdG9yYWdlKTsKKwlkZWJ1ZyhG MTEwLCJ6dGltZTogSFBVWCAxMC4yMCIsKnMsMCk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBBVFRT VgkJCQkvKiBBVCZUIHdheSAqLworLyogIGV4dGVybiBsb25nIHRpbWUoKTsgKi8JCS8qIFRoZW9y ZXRpY2FsbHkgdGhlc2Ugc2hvdWxkICovCisgICAgY2hhciAqY3RpbWUoKTsJCQkvKiBhbHJlYWR5 IGJlZW4gZGNsJ2QgaW4gPHRpbWUuaD4gKi8KKyAgICB0aW1lX3QgY2xvY2tfc3RvcmFnZTsKKyAg ICBjbG9ja19zdG9yYWdlID0gdGltZSgKKyNpZmRlZiBJUklYNjAKKwkJCSAodGltZV90ICopCisj ZWxzZQorI2lmZGVmIEJTRDQ0CisJCQkgKHRpbWVfdCAqKQorI2Vsc2UKKwkJCSAobG9uZyAqKQor I2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogSVJJWDYwICovCisJCQkgMCApOworICAgIGlm IChzKSB7CisJKnMgPSBjdGltZSggJmNsb2NrX3N0b3JhZ2UgKTsKKwlkZWJ1ZyhGMTEwLCJ6dGlt ZTogQVRUU1YiLCpzLDApOworICAgIH0KKyNlbHNlCisjaWZkZWYgUFJPVlgxCQkJCS8qIFZlbml4 IDEuMCB3YXkgKi8KKyAgICBpbnQgdXRpbWVbMl07CisgICAgdGltZSh1dGltZSk7CisgICAgaWYg KHMpIHsKKwkqcyA9IGN0aW1lKHV0aW1lKTsKKwlkZWJ1ZyhGMTEwLCJ6dGltZTogUFJPVlgxIiwq cywwKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIEJTRDQyCQkJCS8qIDQuMkJTRCB3YXkgKi8KKyAg ICBjaGFyICphc2N0aW1lKCk7CisgICAgc3RydWN0IHRtICpsb2NhbHRpbWUoKTsKKyAgICBzdHJ1 Y3QgdG0gKnRwOworICAgIGdldHRpbWVvZmRheSgmdHYsICZ0eik7CisgICAgenR1c2VjID0gdHYu dHZfdXNlYzsKKyAgICB6dG1zZWMgPSB0di50dl91c2VjIC8gMTAwMEw7CisgICAgdHAgPSBsb2Nh bHRpbWUoJnR2LnR2X3NlYyk7CisgICAgaWYgKHMpIHsKKwkqcyA9IGFzY3RpbWUodHApOworCWRl YnVnKEYxMTEsInp0aW1lOiBCU0Q0MiIsKnMsenR1c2VjKTsKKyAgICB9CisjZWxzZQorI2lmZGVm IE1JTklYCQkJCS8qIE1JTklYIHdheSAqLworI2lmZGVmIENPTU1FTlQKKyAgICBleHRlcm4gbG9u ZyB0aW1lKCk7CQkJLyogQWxyZWFkeSBnb3QgdGhlc2UgZnJvbSA8dGltZS5oPiAqLworICAgIGV4 dGVybiBjaGFyICpjdGltZSgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB0aW1lX3QgdXRp bWVbMl07CisgICAgdGltZSh1dGltZSk7CisgICAgaWYgKHMpIHsKKwkqcyA9IGN0aW1lKHV0aW1l KTsKKwlkZWJ1ZyhGMTEwLCJ6dGltZTogTUlOSVgiLCpzLDApOworICAgIH0KKyNlbHNlCisjaWZk ZWYgWlRJTUVWNwkJCQkvKiBUaGUgcmVndWxhciB3YXkgKi8KKyAgICBjaGFyICphc2N0aW1lKCk7 CisgICAgc3RydWN0IHRtICpsb2NhbHRpbWUoKTsKKyAgICBzdHJ1Y3QgdG0gKnRwOworICAgIGxv bmcgeGNsb2NrOwkJCS8qIG9yIHVuc2lnbmVkIGxvbmcgZm9yIEJlQm94PyAqLworICAgIHRpbWUo JnhjbG9jayk7CisgICAgdHAgPSBsb2NhbHRpbWUoJnhjbG9jayk7CisgICAgaWYgKHMpIHsKKwkq cyA9IGFzY3RpbWUodHApOworCWRlYnVnKEYxMTAsInp0aW1lOiBaVElNRVY3IiwqcywwKTsKKyAg ICB9CisjZWxzZQkJCQkJLyogQ2F0Y2gtYWxsIGZvciBvdGhlcnMuLi4gKi8KKyAgICBpZiAocykg eworCSpzID0gIkRheSBNb24gMDAgMDA6MDA6MDAgMDAwMFxuIjsgLyogRHVtbXkgaW4gYXNjdGlt ZSgpIGZvcm1hdCAqLworCWRlYnVnKEYxMTAsInp0aW1lOiBjYXRjaC1hbGwiLCpzLDApOworICAg IH0KKyNlbmRpZiAvKiBaVElNRVY3ICovCisjZW5kaWYgLyogTUlOSVggKi8KKyNlbmRpZiAvKiBC U0Q0MiAqLworI2VuZGlmIC8qIFBST1ZYMSAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYg LyogSFBVWDEwMjAgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCit9CisKKy8qICBDIE8gTiBHIE0g IC0tICBHZXQgY29uc29sZSB0ZXJtaW5hbCBtb2Rlcy4gICovCisKKy8qCisgIFNhdmVzIGluaXRp YWwgY29uc29sZSBtb2RlLCBhbmQgZXN0YWJsaXNoZXMgdmFyaWFibGVzIGZvciBzd2l0Y2hpbmcK KyAgYmV0d2VlbiBjdXJyZW50IChwcmVzdW1hYmx5IG5vcm1hbCkgbW9kZSBhbmQgb3RoZXIgbW9k ZXMuCisgIFNob3VsZCBiZSBjYWxsZWQgd2hlbiBwcm9ncmFtIHN0YXJ0cywgYnV0IG9ubHkgYWZ0 ZXIgZXN0YWJsaXNoaW5nCisgIHdoZXRoZXIgcHJvZ3JhbSBpcyBpbiB0aGUgZm9yZWdyb3VuZCBv ciBiYWNrZ3JvdW5kLgorICBSZXR1cm5zIDEgaWYgaXQgZ290IHRoZSBtb2RlcyBPSywgMCBpZiBp dCBkaWQgbm90aGluZywgLTEgb24gZXJyb3IuCisqLworaW50Citjb25nbSgpIHsKKyAgICBpbnQg ZmQ7CisgICAgaWYgKGJhY2tncmQgfHwgIWlzYXR0eSgwKSkgewkvKiBJZiBpbiBiYWNrZ3JvdW5k LiAqLworCWNnbWYgPSAtMTsJCQkvKiBEb24ndCBib3RoZXIsIG1vZGVzIGFyZSBnYXJiYWdlLiAq LworCXJldHVybigtMSk7CisgICAgfQorICAgIGlmIChjZ21mID4gMCkgcmV0dXJuKDApOwkJLyog QWxyZWFkeSBkaWQgdGhpcy4gKi8KKyAgICBkZWJ1ZyhGMTAwLCJjb25nbSBnZXR0aW5nIG1vZGVz IiwiIiwwKTsgLyogTmVlZCB0byBkbyBpdC4gKi8KKyNpZmRlZiBhZWdpcworICAgIGlvc18kaW5x X3R5cGVfdWlkKGlvc18kc3RkaW4sIGNvbnVpZCwgc3QpOworICAgIGlmIChzdC5hbGwgIT0gc3Rh dHVzXyRvaykgeworCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBnZXR0aW5nIHN0ZGluIG9ianR5 cGU6ICIpOworCWVycm9yXyRwcmludChzdCk7CisgICAgfQorICAgIGNvbmNycCA9IChjb251aWQg PT0gbWJ4XyR1aWQpOworICAgIGNvbmJ1Zm4gPSAwOworI2VuZGlmIC8qIGFlZ2lzICovCisKKyNp Zm5kZWYgQkVCT1gKKyAgICBpZiAoKGZkID0gb3BlbihDVFROQU0sMikpIDwgMCkgewkvKiBPcGVu IGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCisjaWZkZWYgQ09NTUVOVAorCWZwcmludGYoc3RkZXJy LCJFcnJvciBvcGVuaW5nICVzXG4iLCBDVFROQU0pOworCXBlcnJvcigiY29uZ20iKTsKKwlyZXR1 cm4oLTEpOworI2Vsc2UKKwlmZCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyNl bHNlCisgICAgZmQgPSAwOworI2VuZGlmIC8qICFCRUJPWCAqLworI2lmZGVmIEJTRDQ0T1JQT1NJ WAorICAgIGlmICh0Y2dldGF0dHIoZmQsJmNjb2xkKSA8IDApIHJldHVybigtMSk7CisgICAgaWYg KHRjZ2V0YXR0cihmZCwmY2NjYnJrKSA8IDApIHJldHVybigtMSk7CisgICAgaWYgKHRjZ2V0YXR0 cihmZCwmY2NyYXcpIDwgMCkgcmV0dXJuKC0xKTsKKyNlbHNlCisjaWZkZWYgQVRUU1YKKyAgICBp ZiAoaW9jdGwoZmQsVENHRVRBLCZjY29sZCkgIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoaW9j dGwoZmQsVENHRVRBLCZjY2NicmspIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoaW9jdGwoZmQs VENHRVRBLCZjY3JhdykgIDwgMCkgcmV0dXJuKC0xKTsKKyNpZmRlZiBWWFZFCisgICAgY2NjYnJr LmNfbGluZSA9IDA7CQkJLyogU1RUWSBsaW5lIDAgZm9yIENEQyBWWC9WRSAqLworICAgIGlmIChp b2N0bChmZCxUQ1NFVEEsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOworICAgIGNjcmF3LmNfbGlu ZSA9IDA7CQkJLyogU1RUWSBsaW5lIDAgZm9yIENEQyBWWC9WRSAqLworICAgIGlmIChpb2N0bChm ZCxUQ1NFVEEsJmNjcmF3KSA8IDApIHJldHVybigtMSk7CisjZW5kaWYgLyogVlhWRSAqLworI2Vs c2UKKyNpZmRlZiBCRUxMVjEwCisgICAgaWYgKGlvY3RsKGZkLFRJT0NHRVRQLCZjY29sZCkgPCAw KSByZXR1cm4oLTEpOworICAgIGlmIChpb2N0bChmZCxUSU9DR0VUUCwmY2NjYnJrKSA8IDApIHJl dHVybigtMSk7CisgICAgaWYgKGlvY3RsKGZkLFRJT0NHRVRQLCZjY3JhdykgPCAwKSByZXR1cm4o LTEpOworICAgIGRlYnVnKEYxMDEsImNjY2Jyay5zZ19mbGFncyBvcmlnIiwiIiwgY2NjYnJrLnNn X2ZsYWdzKTsKKyNlbHNlCisgICAgaWYgKGd0dHkoZmQsJmNjb2xkKSA8IDApIHJldHVybigtMSk7 CisgICAgaWYgKGd0dHkoZmQsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOworICAgIGlmIChndHR5 KGZkLCZjY3JhdykgPCAwKSByZXR1cm4oLTEpOworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNlbmRp ZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2lmZGVmIHNvbnlfbmV3 cwkJCS8qIFNvbnkgTkVXUyAqLworICAgIGlmIChpb2N0bChmZCxUSU9DS0dFVCwma21fY29uKSA8 IDApIHsgLyogR2V0IGNvbnNvbGUgS2FuamkgbW9kZSAqLworCXBlcnJvcigiY29uZ20gZXJyb3Ig Z2V0dGluZyBLYW5qaSBtb2RlIik7CisJZGVidWcoRjEwMSwiY29uZ20gZXJyb3IgZ2V0dGluZyBL YW5qaSBtb2RlIiwiIiwwKTsKKwlrbV9jb24gPSAtMTsJCQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5 cyB1bmRlZmluZWQuICovCisJcmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyogc29ueV9uZXdz ICovCisgICAgaWYgKGZkID4gMCkKKyAgICAgIGNsb3NlKGZkKTsKKyAgICBjZ21mID0gMTsJCQkJ LyogRmxhZyB0aGF0IHdlIGdvdCB0aGVtLiAqLworICAgIHJldHVybigxKTsKK30KKworCitzdGF0 aWMgVk9JRAorY29uZ2V0YnVmKHgpIGludCB4OyB7CisgICAgaW50IG47CisgICAgbiA9IENPTkJV RlNJWiAtIChjb25idWZwIC0gY29uYnVmKTsJLyogSG93IG11Y2ggcm9vbSBsZWZ0IGluIGJ1ZmZl cj8gKi8KKyAgICBpZiAoeCA+IG4pIHsKKwlkZWJ1ZyhGMTAxLCJjb25nZXRidWYgY2hhciBsb3Nz IiwiIix4LW4pOworCXggPSBuOworICAgIH0KKyAgICB4ID0gcmVhZCgwLGNvbmJ1ZnAseCk7Cisg ICAgY29uYnVmbiArPSB4OworICAgIGRlYnVnKEYxMTEsImNvbmdldGJ1ZiByZWFkYWhlYWQiLGNv bmJ1Zix4KTsKK30KKworCisvKiAgQyBPIE4gQyBCIC0tICBQdXQgY29uc29sZSBpbiBjYnJlYWsg bW9kZS4gICovCisKKy8qICBSZXR1cm5zIDAgaWYgb2ssIC0xIGlmIG5vdCAgKi8KKworaW50Cisj aWZkZWYgQ0tfQU5TSUMKK2NvbmNiKGNoYXIgZXNjKQorI2Vsc2UKK2NvbmNiKGVzYykgY2hhciBl c2M7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNvbmNiICovIHsKKyAgICBpbnQgeCwgeSA9 IDA7CisgICAgZGVidWcoRjEwMSwiY29uY2IgY29uc3RhdGUiLCIiLGNvbnN0YXRlKTsKKyAgICBk ZWJ1ZyhGMTAxLCJjb25jYiBjZ21mIiwiIixjZ21mKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBi YWNrZ3JkIiwiIixiYWNrZ3JkKTsKKworICAgIGlmIChjb25zdGF0ZSA9PSBDT05fQ0IpCisgICAg ICByZXR1cm4oMCk7CisKKyAgICBpZiAoY2dtZiA8IDEpCQkJLyogRGlkIHdlIGdldCBjb25zb2xl IG1vZGVzIHlldD8gKi8KKyAgICAgIGlmICghYmFja2dyZCkJCQkvKiBObywgaW4gYmFja2dyb3Vu ZD8gKi8KKwljb25nbSgpOwkJCS8qIE5vLCB0cnkgdG8gZ2V0IHRoZW0gbm93LiAqLworICAgIGlm IChjZ21mIDwgMSkJCQkvKiBTdGlsbCBkb24ndCBoYXZlIHRoZW0/ICovCisgICAgICByZXR1cm4o MCk7CQkJLyogR2l2ZSB1cC4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiB0dHlmZCIsIiIsdHR5 ZmQpOworICAgIGRlYnVnKEYxMDEsImNvbmNiIHR0ZmRmbGciLCIiLHR0ZmRmbGcpOworI2lmZGVm IENPTU1FTlQKKyAgICAvKiBUaGlzIGJyZWFrcyByZXR1cm5pbmcgdG8gcHJvbXB0IGFmdGVyIHBy b3RvY29sIHdpdGggIi1sIDAiICovCisgICAgLyogQ29tbWVudGVkIG91dCBKdWx5IDE5OTggKi8K KyAgICBpZiAodHRmZGZsZyAmJiB0dHlmZCA+PSAwICYmIHR0eWZkIDwgMykKKyAgICAgIHJldHVy bigwKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeCA9IGlzYXR0eSgwKTsKKyAgICBkZWJ1 ZyhGMTAxLCJjb25jYiBpc2F0dHkiLCIiLHgpOworICAgIGlmICgheCkgcmV0dXJuKDApOwkJCS8q IE9ubHkgd2hlbiBydW5uaW5nIG9uIHJlYWwgdHR5cyAqLworICAgIGRlYnVnKEYxMDEsImNvbmNi IHhzdXNwZW5kIiwiIix4c3VzcGVuZCk7CisgICAgaWYgKGJhY2tncmQpCQkJLyogRG8gbm90aGlu ZyBpZiBpbiBiYWNrZ3JvdW5kLiAqLworICAgICAgcmV0dXJuKDApOworICAgIGVzY2NociA9IGVz YzsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFibGUgdG8gb3RoZXIg Zm5zICovCisgICAgY2t4ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvZ3Jh bSBjYW4gZWNobyBjaGFyYWN0ZXJzICovCisjaWZkZWYgYWVnaXMKKyAgICBjb25idWZuID0gMDsK KyAgICBpZiAoY29uY3JwKSByZXR1cm4od3JpdGUoMSwgIlwwMzVcMDAyIiwgMikpOworICAgIGlm IChjb251aWQgPT0gaW5wdXRfcGFkXyR1aWQpIHtwYWRfJHJhdyhpb3NfJHN0ZGluLCBzdCk7IHJl dHVybigwKTt9CisjZW5kaWYgLyogYWVnaXMgKi8KKworI2lmZGVmIENPSEVSRU5UCisjZGVmaW5l IFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBQbGFuOQorICAgIHgg PSBwOWNvbmNiKCk7CisjZWxzZQorI2lmbmRlZiBTVk9SUE9TSVgJCQkvKiBCU0QsIFY3LCBldGMg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJjY2Nicmsuc2dfZmxhZ3MgY29uY2IgMSIsIiIsIGNjY2Jyay5z Z19mbGFncyk7CisgICAgZGVidWcoRjEwMSwiY29uY2Igc3R0eSBDQlJFQUsiLCIiLDApOworICAg IGNjY2Jyay5zZ19mbGFncyB8PSAoQ0JSRUFLfENSTU9EKTsJLyogU2V0IHRvIGNoYXJhY3RlciB3 YWtldXAsICovCisgICAgY2NjYnJrLnNnX2ZsYWdzICY9IH5FQ0hPOyAgICAgICAgICAgLyogbm8g ZWNoby4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJjY2Nicmsuc2dfZmxhZ3MgY29uY2IgMiIsIiIsIGNj Y2Jyay5zZ19mbGFncyk7CisgICAgZXJybm8gPSAwOworLyoKKyAgQlNEIHN0dHkoKSBjbGVhcnMg dGhlIGNvbnNvbGUgYnVmZmVyLiAgU28gaWYgYW55dGhpbmcgaXMgd2FpdGluZyBpbiBpdCwKKyAg d2UgaGF2ZSB0byByZWFkIGl0IG5vdyB0byBhdm9pZCBsb3NpbmcgaXQuCisqLworICAgIHggPSBj b25jaGsoKTsKKyAgICBpZiAoeCA+IDApCisgICAgICBjb25nZXRidWYoeCk7CisKKyNpZmRlZiBC RUxMVjEwCisgICAgeCA9IGlvY3RsKDAsVElPQ1NFVFAsJmNjY2Jyayk7CisjZWxzZQorICAgIHgg PSBzdHR5KDAsJmNjY2Jyayk7CisgICAgZGVidWcoRjEwMSwiY2NjYnJrLnNnX2ZsYWdzIGNvbmNi IHgiLCIiLCB4KTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZWxzZQkJCQkJLyogU3lzIFYgYW5k IFBPU0lYICovCisjaWZuZGVmIE9YT1MKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBjY2NicmsuY19m bGFnIiwiIixjY2NicmsuY19sZmxhZyk7CisjaWZkZWYgUU5YCisgICAgLyogRG9uJ3QgbWVzcyB3 aXRoIElFWFRFTiAqLworICAgIGNjY2Jyay5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE8pOworI2Vs c2UKKyNpZmRlZiBDT0hFUkVOVAorICAgIGNjY2Jyay5jX2xmbGFnICY9IH4oSUNBTk9OfEVDSE8p OworI2Vsc2UKKyAgICBjY2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPfElFWFRFTik7Cisj ZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRpZiAvKiBRTlggKi8KKyAgICBjY2NicmsuY19sZmxh ZyB8PSBJU0lHOwkJLyogQWxsb3cgc2lnbmFscyBpbiBjb21tYW5kIG1vZGUuICovCisgICAgY2Nj YnJrLmNfaWZsYWcgfD0gSUdOQlJLOwkJLyogQnV0IGlnbm9yZSBCUkVBSyBzaWduYWwgKi8KKyAg ICBjY2NicmsuY19pZmxhZyAmPSB+QlJLSU5UOworCisjZWxzZSAvKiBPWE9TICovCisgICAgZGVi dWcoRjEwMCwiY29uY2IgT1hPUyBpcyBkZWZpbmVkIiwiIiwwKTsKKyAgICBjY2NicmsuY19sZmxh ZyAmPSB+KElDQU5PTnxFQ0hPKTsKKyAgICBjY2NicmsuY19jY1tWRElTQ0FSRF0gPSBjY2Nicmsu Y19jY1tWTE5FWFRdID0gQ0RJU0FCTEU7CisjZW5kaWYgLyogT1hPUyAqLworI2lmZGVmIENPTU1F TlQKKy8qCisgIEJlbGlldmUgaXQgb3Igbm90LCBpbiBTQ08gVU5JWCwgVlNVU1AgaXMgZ3JlYXRl ciB0aGFuIE5DQywgYW5kIHNvIHRoaXMKKyAgYXJyYXkgcmVmZXJlbmNlIGlzIG91dCBvZiBib3Vu ZHMuICBJdCdzIG9ubHkgYSBkZWJ1ZygpIGNhbGwgc28gd2hvIG5lZWRzIGl0LgorKi8KKyNpZmRl ZiBWU1VTUAorICAgIGRlYnVnKEYxMDEsImNvbmNiIGNfY2NbVlNVU1BdIiwiIixjY2NicmsuY19j Y1tWU1VTUF0pOworI2VuZGlmIC8qIFZTVVNQICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lm bmRlZiBWSU5UUgorICAgIGRlYnVnKEYxMDEsImNvbmNiIGNfY2NbMF0iLCIiLGNjY2Jyay5jX2Nj WzBdKTsKKyAgICBjY2NicmsuY19jY1swXSA9IDAwMzsgICAgICAgICAgICAgICAvKiBJbnRlcnJ1 cHQgY2hhciBpcyBDb250cm9sLUMgKi8KKyNlbHNlCisgICAgZGVidWcoRjEwMSwiY29uY2IgY19j Y1tWSU5UUl0iLCIiLGNjY2Jyay5jX2NjWzBdKTsKKyAgICBjY2NicmsuY19jY1tWSU5UUl0gPSAw MDM7CisjZW5kaWYgLyogVklOVFIgKi8KKyNpZm5kZWYgVlFVSVQKKyAgICBjY2NicmsuY19jY1sx XSA9IGVzY2NocjsgICAgICAgICAgICAvKiBlc2NhcGUgZHVyaW5nIHBhY2tldCBtb2RlcyAqLwor I2Vsc2UKKyAgICBjY2NicmsuY19jY1tWUVVJVF0gPSBlc2NjaHI7CisjZW5kaWYgLyogVlFVSVQg Ki8KKyNpZm5kZWYgVkVPRgorICAgIGNjY2Jyay5jX2NjWzRdID0gMTsKKyNlbHNlCisjaWZuZGVm IE9YT1MKKyNpZmRlZiBWTUlOCisgICAgY2NjYnJrLmNfY2NbVk1JTl0gPSAxOworI2VuZGlmIC8q IFZNSU4gKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICBjY2NicmsuY19taW4gPSAxOworI2VuZGlm IC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9GICovCisjaWZkZWYgWklMT0cKKyAgICBjY2Nicmsu Y19jY1s1XSA9IDA7CisjZWxzZQorI2lmbmRlZiBWRU9MCisgICAgY2NjYnJrLmNfY2NbNV0gPSAx OworI2Vsc2UKKyNpZm5kZWYgT1hPUworI2lmZGVmIFZUSU1FCisgICAgY2NjYnJrLmNfY2NbVlRJ TUVdID0gMTsKKyNlbmRpZiAvKiBWVElNRSAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIGNjY2Jy ay5jX3RpbWUgPSAxOworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9MICovCisjZW5k aWYgLyogWklMT0cgKi8KKyAgICBlcnJubyA9IDA7CisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyog U2V0IG5ldyBtb2RlcyAqLworICAgIHggPSB0Y3NldGF0dHIoMCxUQ1NBRFJBSU4sJmNjY2Jyayk7 CisjZWxzZSAvKiBBVFRTViAqLyAgICAgIAkJCS8qIG9yIHRoZSBQT1NJWCB3YXkgKi8KKyAgICB4 ID0gaW9jdGwoMCxUQ1NFVEFXLCZjY2NicmspOwkvKiB0aGUgU3lzIFYgd2F5ICovCisjZW5kaWYg LyogQlNENDRPUlBPU0lYICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisKKyNpZmRlZiBDT0hF UkVOVAorI3VuZGVmIFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyAgICBkZWJ1 ZyhGMTAxLCJjb25jYiB4IiwiIix4KTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiBlcnJubyIsIiIs ZXJybm8pOworCisjaWZkZWYgIFY3CisjaWZuZGVmIE1JTklYCisgICAgaWYgKGttZW1bQ09OXSA8 IDApIHsKKyAgICAgICAgcWFkZHJbQ09OXSA9IGluaXRyYXdxKDApOworICAgICAgICBpZigoa21l bVtDT05dID0gb3BlbigiL2Rldi9rbWVtIiwgMCkpIDwgMCkgeworICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJDYW4ndCByZWFkIC9kZXYva21lbSBpbiBjb25jYi5cbiIpOworICAgICAgICAg ICAgcGVycm9yKCIvZGV2L2ttZW0iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0K KyAgICB9CisjZW5kaWYgLyogTUlOSVggKi8KKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIFBs YW45ICovCisKKyAgICBpZiAoeCA+IC0xKQorICAgICAgY29uc3RhdGUgPSBDT05fQ0I7CisKKyAg ICBkZWJ1ZyhGMTAxLCJjb25jYiByZXR1cm5zIiwiIix4KTsKKyAgICByZXR1cm4oeCk7Cit9CisK Ky8qICBDIE8gTiBCIEkgTiAgLS0gIFB1dCBjb25zb2xlIGluIGJpbmFyeSBtb2RlICAqLworCisv KiAgUmV0dXJucyAwIGlmIG9rLCAtMSBpZiBub3QgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lD Citjb25iaW4oY2hhciBlc2MpCisjZWxzZQorY29uYmluKGVzYykgY2hhciBlc2M7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KKy8qIGNvbmJpbiAqLyAgeworCisgICAgaW50IHg7CisKKyAgICBkZWJ1 ZyhGMTAxLCJjb25iaW4gY29uc3RhdGUiLCIiLGNvbnN0YXRlKTsKKworICAgIGlmIChjb25zdGF0 ZSA9PSBDT05fQklOKQorICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCFpc2F0dHkoMCkpIHJl dHVybigwKTsgICAgICAgICAgLyogb25seSBmb3IgcmVhbCB0dHlzICovCisgICAgY29uZ20oKTsJ CQkJLyogR2V0IG1vZGVzIGlmIG5lY2Vzc2FyeS4gKi8KKyAgICBkZWJ1ZyhGMTAwLCJjb25iaW4i LCIiLDApOworICAgIGVzY2NociA9IGVzYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ug dGhpcyBhdmFpbGFibGUgdG8gb3RoZXIgZm5zICovCisgICAgY2t4ZWNoID0gMTsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogUHJvZ3JhbSBjYW4gZWNobyBjaGFyYWN0ZXJzICovCisjaWZkZWYg YWVnaXMKKyAgICBjb25idWZuID0gMDsKKyAgICBpZiAoY29uY3JwKSByZXR1cm4od3JpdGUoMSwg IlwwMzVcMDAyIiwgMikpOworICAgIGlmIChjb251aWQgPT0gaW5wdXRfcGFkXyR1aWQpIHsKKwlw YWRfJHJhdyhpb3NfJHN0ZGluLCBzdCk7CisJcmV0dXJuKDApOworICAgICAgfQorI2VuZGlmIC8q IGFlZ2lzICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRpZiAv KiBDT0hFUkVOVCAqLworCisjaWZkZWYgUGxhbjkKKyAgICByZXR1cm4gcDljb25iaW4oKTsKKyNl bHNlCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBRTlgKKyAgICBjY3Jh dy5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNITyk7CisjZWxzZQorI2lmZGVmIENPSEVSRU5U CisgICAgY2NyYXcuY19sZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOworI2Vsc2UKKyAgICBj Y3Jhdy5jX2xmbGFnICY9IH4oSVNJR3xJQ0FOT058RUNIT3xJRVhURU4pOworI2VuZGlmIC8qIENP SEVSRU5UICovCisjZW5kaWYgLyogUU5YICovCisjZWxzZSAvKiBPWE9TICovCisgICAgY2NyYXcu Y19sZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOworICAgIGNjcmF3LmNfY2NbVkRJU0NBUkRd ID0gY2NyYXcuY19jY1tWTE5FWFRdID0gQ0RJU0FCTEU7CisjZW5kaWYgLyogT1hPUyAqLworICAg IGNjcmF3LmNfaWZsYWcgfD0gSUdOUEFSOworLyoKKyAgTm90ZSB0aGF0IGZvciB0ZXJtaW5hbCBz ZXNzaW9ucyB3ZSBkaXNhYmxlIFhvbi9Yb2ZmIGZsb3cgY29udHJvbCB0byBhbGxvdworICB0aGUg cGFzc2FnZSBeUSBhbmQgXlMgYXMgZGF0YSBjaGFyYWN0ZXJzIGZvciBFTUFDUywgYW5kIHRvIGFs bG93IFhNT0RFTQorICB0cmFuc2ZlcnMgdG8gd29yayB3aGVuIEMtS2VybWl0IGlzIGluIHRoZSBt aWRkbGUsIGV0Yy4gIEhhcmR3YXJlIGZsb3cKKyAgY29udHJvbCwgaWYgaW4gdXNlLCBpcyBub3Qg YWZmZWN0ZWQuCisqLworI2lmZGVmIEFUVFNWCisjaWZkZWYgQlNENDQKKyAgICBjY3Jhdy5jX2lm bGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElYT058SVhBTll8SVhPRkYKKyAgICAg ICAgICAgICAgICAgICAgICAgIHxJTlBDS3xJU1RSSVApOworI2Vsc2UKKyAgICBjY3Jhdy5jX2lm bGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElVQ0xDfElYT058SVhBTll8SVhPRkYK KyAgICAgICAgICAgICAgICAgICAgICAgIHxJTlBDS3xJU1RSSVApOworI2VuZGlmIC8qIEJTRDQ0 ICovCisjZWxzZSAvKiBQT1NJWCAqLworICAgIGNjcmF3LmNfaWZsYWcgJj0gfihJR05CUkt8SU5M Q1J8SUdOQ1J8SUNSTkx8SVhPTnxJWE9GRnxJTlBDS3xJU1RSSVApOworI2VuZGlmIC8qIEFUVFNW ICovCisgICAgY2NyYXcuY19vZmxhZyAmPSB+T1BPU1Q7CisjaWZkZWYgQ09NTUVOVAorLyoKKyAg V0hBVCBUSEUgSEVDSyBXQVMgVEhJUyBGT1I/CisgIFRoZSBCOTYwMCBzZXR0aW5nIChvYnZpb3Vz bHkpIHByZXZlbnRzIENPTk5FQ1QgZnJvbSB3b3JraW5nIGF0IGFueQorICBzcGVlZCBvdGhlciB0 aGFuIDk2MDAgd2hlbiB5b3UgYXJlIGxvZ2dlZCBpbiB0byB0aGUgNzMwMCBvbiBhIHNlcmlhbAor ICBsaW5lLiAgTWF5YmUgc29tZSBvZiB0aGUgb3RoZXIgZmxhZ3MgYXJlIG5lY2Vzc2FyeSAtLSBp ZiBzbywgcHV0IGJhY2sKKyAgdGhlIG9uZXMgdGhhdCBhcmUgbmVlZGVkLiAgVGhpcyBjb2RlIGlz IHN1cHBvc2VkIHRvIHdvcmsgdGhlIHNhbWUsIG5vCisgIG1hdHRlciB3aGV0aGVyIHlvdSBhcmUg bG9nZ2VkIGluIHRvIHRoZSA3MzAwIG9uIHRoZSByZWFsIGNvbnNvbGUgZGV2aWNlLAorICBvciB0 aHJvdWdoIGEgc2VyaWFsIHBvcnQuCisqLworI2lmZGVmIEFUVDczMDAKKyAgICBjY3Jhdy5jX2Nm bGFnID0gQ0xPQ0FMIHwgQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMOworI2VuZGlmIC8qIEFU VDczMDAgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKy8qKiogS2VybWl0IHVzZWQgdG8gcHV0 IHRoZSBjb25zb2xlIGluIDgtYml0IHJhdyBtb2RlLCBidXQgc29tZSB1c2VycyBoYXZlCisgKioq IHBvaW50ZWQgb3V0IHRoYXQgdGhpcyBzaG91bGQgbm90IGJlIGRvbmUsIHNpbmNlIHNvbWUgc2l0 ZXMgYWN0dWFsbHkKKyAqKiogdXNlIHRlcm1pbmFscyB3aXRoIHBhcml0eSBzZXR0aW5ncyBvbiB0 aGVpciBVbml4IHN5c3RlbXMsIGFuZCBpZiB3ZQorICoqKiBvdmVycmlkZSB0aGUgY3VycmVudCBz ZXR0aW5ncyBhbmQgc3RvcCBkb2luZyBwYXJpdHksIHRoZW4gdGhlaXIgdGVybWluYWxzCisgKioq IHdpbGwgZGlzcGxheSBibG90Y2hlcyBmb3IgY2hhcmFjdGVycyB3aG9zZSBwYXJpdHkgaXMgd3Jv bmcuICBUaGVyZWZvcmUsCisgKioqIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGFyZSBjb21tZW50 ZWQgb3V0IChMYXJyeSBBZnJpbiwgQ2xlbXNvbiBVKToKKyAqKioKKyAqKiogICBjY3Jhdy5jX2Nm bGFnICY9IH4oUEFSRU5CfENTSVpFKTsKKyAqKiogICBjY3Jhdy5jX2NmbGFnIHw9IChDUzh8Q1JF QUQpOworICoqKgorICoqKiBTeXMgSUlJL1Ygc2l0ZXMgdGhhdCBoYXZlIHRyb3VibGUgd2l0aCB0 aGlzIGNhbiByZXN0b3JlIHRoZXNlIGxpbmVzLgorICoqKi8KKyNpZm5kZWYgVklOVFIKKyAgICBj Y3Jhdy5jX2NjWzBdID0gMDAzOwkJLyogSW50ZXJydXB0IGNoYXIgaXMgQ3RybC1DICovCisjZWxz ZQorICAgIGNjcmF3LmNfY2NbVklOVFJdID0gMDAzOworI2VuZGlmIC8qIFZJTlRSICovCisjaWZu ZGVmIFZRVUlUCisgICAgY2NyYXcuY19jY1sxXSA9IGVzY2NocjsJCS8qIEVzY2FwZSBkdXJpbmcg cGFja2V0IG1vZGUgKi8KKyNlbHNlCisgICAgY2NyYXcuY19jY1tWUVVJVF0gPSBlc2NjaHI7Cisj ZW5kaWYgLyogVlFVSVQgKi8KKyNpZm5kZWYgVkVPRgorICAgIGNjcmF3LmNfY2NbNF0gPSAxOwor I2Vsc2UKKyNpZm5kZWYgT1hPUworI2lmZGVmIFZNSU4KKyAgICBjY3Jhdy5jX2NjW1ZNSU5dID0g MTsKKyNlbmRpZiAvKiBWTUlOICovCisjZWxzZSAvKiBPWE9TICovCisgICAgY2NyYXcuY19taW4g PSAxOworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9GICovCisKKyNpZmRlZiBaSUxP RworICAgIGNjcmF3LmNfY2NbNV0gPSAwOworI2Vsc2UKKyNpZm5kZWYgVkVPTAorICAgIGNjcmF3 LmNfY2NbNV0gPSAxOworI2Vsc2UKKyNpZm5kZWYgT1hPUworI2lmZGVmIFZUSU1FCisgICAgY2Ny YXcuY19jY1tWVElNRV0gPSAxOworI2VuZGlmIC8qIFZUSU1FICovCisjZWxzZSAvKiBPWE9TICov CisgICAgY2NyYXcuY190aW1lID0gMTsKKyNlbmRpZiAvKiBPWE9TICovCisjZW5kaWYgLyogVkVP TCAqLworI2VuZGlmIC8qIFpJTE9HICovCisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICB4ID0g dGNzZXRhdHRyKDAsVENTQURSQUlOLCZjY3Jhdyk7CS8qIFNldCBuZXcgbW9kZXMuICovCisjZWxz ZQorICAgIHggPSBpb2N0bCgwLFRDU0VUQVcsJmNjcmF3KTsKKyNlbmRpZiAvKiBCU0Q0NE9SUE9T SVggKi8KKyNlbHNlIC8qIEJlcmtlbGV5LCBldGMuICovCisgICAgeCA9IGNvbmNoaygpOwkJCS8q IEJlY2F1c2Ugc3R0eSgpIGlzIGRlc3RydWN0aXZlICovCisgICAgaWYgKHggPiAwKQorICAgICAg Y29uZ2V0YnVmKHgpOworICAgIGNjcmF3LnNnX2ZsYWdzIHw9IChSQVd8VEFOREVNKTsgICAgIC8q IFNldCByYXdtb2RlLCBYT04vWE9GRiAoaGEpICovCisgICAgY2NyYXcuc2dfZmxhZ3MgJj0gfihF Q0hPfENSTU9EKTsgICAgLyogU2V0IGNoYXIgd2FrZXVwLCBubyBlY2hvICovCisjaWZkZWYgQkVM TFYxMAorICAgIHggPSBpb2N0bCgwLFRJT0NTRVRQLCZjY3Jhdyk7CisjZWxzZQorICAgIHggPSBz dHR5KDAsJmNjcmF3KTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogU1ZPUlBPU0lY ICovCisjZW5kaWYgLyogUGxhbjkgKi8KKworICAgIGlmICh4ID4gLTEpCisgICAgICBjb25zdGF0 ZSA9IENPTl9CSU47CisKKyAgICBkZWJ1ZyhGMTAxLCJjb25iaW4gcmV0dXJucyIsIiIseCk7Cisg ICAgcmV0dXJuKHgpOworCisjaWZkZWYgQ09IRVJFTlQKKyN1bmRlZiBTVk9SUE9TSVgKKyNlbmRp ZiAvKiBDT0hFUkVOVCAqLworCit9CisKKworLyogIEMgTyBOIFIgRSBTICAtLSAgUmVzdG9yZSB0 aGUgY29uc29sZSB0ZXJtaW5hbCAgKi8KKworaW50Citjb25yZXMoKSB7CisgICAgaW50IHg7Cisg ICAgZGVidWcoRjEwMSwiY29ucmVzIGNnbWYiLCIiLGNnbWYpOworICAgIGRlYnVnKEYxMDEsImNv bnJlcyBjb25zdGF0ZSIsIiIsY29uc3RhdGUpOworCisgICAgaWYgKGNnbWYgPCAxKQkJCS8qIERv IG5vdGhpbmcgaWYgbW9kZXMgdW5jaGFuZ2VkICovCisgICAgICByZXR1cm4oMCk7CisgICAgaWYg KGNvbnN0YXRlID09IENPTl9SRVMpCisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoIWlzYXR0 eSgwKSkgcmV0dXJuKDApOyAgICAgICAgICAvKiBvbmx5IGZvciByZWFsIHR0eXMgKi8KKyAgICBk ZWJ1ZyhGMTAwLCJjb25yZXMgaXNhdHR5IG9rIiwiIiwwKTsKKyAgICBja3hlY2ggPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gc2hvdWxkIGVjaG8gY2hhcnMgKi8KKworI2lm ZGVmIGFlZ2lzCisgICAgY29uYnVmbiA9IDA7CisgICAgaWYgKGNvbmNycCkgcmV0dXJuKHdyaXRl KDEsICJcMDM1XDAwMSIsIDIpKTsKKyAgICBpZiAoY29udWlkID09IGlucHV0X3BhZF8kdWlkKSB7 CisJcGFkXyRjb29rZWQoaW9zXyRzdGRpbiwgc3QpOworCWNvbnN0YXRlID0gQ09OX1JFUzsKKwly ZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIGFlZ2lzICovCisKKyNpZmRlZiBQbGFuOQorICAg IHA5Y29ucmVzKCk7CisjZWxzZQorI2lmZGVmIEJTRDQ0T1JQT1NJWAorICAgIGRlYnVnKEYxMDAs ImNvbnJlcyByZXN0b3JpbmcgdGNzZXRhdHRyIiwiIiwwKTsKKyAgICB4ID0gdGNzZXRhdHRyKDAs VENTQURSQUlOLCZjY29sZCk7CisjZWxzZQorI2lmZGVmIEFUVFNWCisgICAgZGVidWcoRjEwMCwi Y29ucmVzIHJlc3RvcmluZyBpb2N0bCIsIiIsMCk7CisgICAgeCA9IGlvY3RsKDAsVENTRVRBVywm Y2NvbGQpOworI2Vsc2UgLyogQlNELCBWNywgYW5kIGZyaWVuZHMgKi8KKyNpZmRlZiBzb255X25l d3MJCQkvKiBTb255IE5FV1MgKi8KKyAgICBpZiAoa21fY29uICE9IC0xKQorICAgICAgaW9jdGwo MCxUSU9DS1NFVCwma21fY29uKTsJLyogUmVzdG9yZSBjb25zb2xlIEthbmppIG1vZGUgKi8KKyNl bmRpZiAvKiBzb255X25ld3MgKi8KKyAgICBtc2xlZXAoMTAwKTsKKyAgICBkZWJ1ZyhGMTAwLCJj b25yZXMgcmVzdG9yaW5nIHN0dHkiLCIiLDApOworICAgIHggPSBjb25jaGsoKTsJCQkvKiBCZWNh dXNlIHN0dHkoKSBpcyBkZXN0cnVjdGl2ZSAqLworICAgIGlmICh4ID4gMCkKKyAgICAgIGNvbmdl dGJ1Zih4KTsKKyNpZmRlZiBCRUxMVjEwCisgICAgeCA9IGlvY3RsKDAsVElPQ1NFVFAsJmNjb2xk KTsKKyNlbHNlCisgICAgeCA9IHN0dHkoMCwmY2NvbGQpOworI2VuZGlmIC8qIEJFTExWMTAgKi8K KyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8q IFBsYW45ICovCisgICAgaWYgKHggPiAtMSkKKyAgICAgIGNvbnN0YXRlID0gQ09OX1JFUzsKKwor ICAgIGRlYnVnKEYxMDEsImNvbnJlcyByZXR1cm5zIiwiIix4KTsKKyAgICByZXR1cm4oeCk7Cit9 CisKKy8qICBDIE8gTiBPIEMgIC0tICBPdXRwdXQgYSBjaGFyYWN0ZXIgdG8gdGhlIGNvbnNvbGUg dGVybWluYWwgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitjb25vYyhjaGFyIGMpCisjZWxz ZQorY29ub2MoYykgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBjb25vYyAqLyB7 CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKKyAgICAgIHJldHVy bih0dG9jKGMpKTsKKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoaW5zZXJ2ZXIgJiYg VEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKKyAgICAgICAgY2tfdG5fZW5jcnlwdCgmYywx KTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogSUtTRCAqLworCisjaWZk ZWYgUGxhbjkKKyAgICByZXR1cm4gY29ud3JpdGUoJmMsMSk7CisjZWxzZQorICAgIHJldHVybih3 cml0ZSgxLCZjLDEpKTsKKyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiAgQyBPIE4gWCBPICAt LSAgV3JpdGUgeCBjaGFyYWN0ZXJzIHRvIHRoZSBjb25zb2xlIHRlcm1pbmFsICAqLworCitpbnQK K2NvbnhvKHgscykgaW50IHg7IGNoYXIgKnM7IHsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5z ZXJ2ZXIgJiYgIWxvY2FsKQorICAgICAgcmV0dXJuKHR0b2woKENIQVIgKilzLHgpKTsKKworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICBpZiAoaW5zZXJ2ZXIgJiYgVEVMT1BUX01FKFRFTE9QVF9F TkNSWVBUSU9OKSkKKyAgICAgICAgY2tfdG5fZW5jcnlwdChzLHgpOworI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKyNpZmRlZiBQbGFuOQorICAgIHJldHVy bihjb253cml0ZShzLHgpKTsKKyNlbHNlCisgICAgcmV0dXJuKHdyaXRlKDEscyx4KSk7CisjZW5k aWYgLyogUGxhbjkgKi8KK30KKworLyogIEMgTyBOIE8gTCAgLS0gIFdyaXRlIGEgbGluZSB0byB0 aGUgY29uc29sZSB0ZXJtaW5hbCAgKi8KKworaW50Citjb25vbChzKSBjaGFyICpzOyB7CisgICAg aW50IGxlbjsKKyAgICBpZiAoIXMpIHMgPSAiIjsJCQkvKiBBbHdheXMgZG8gdGhpcyEgKi8KKyAg ICBsZW4gPSBzdHJsZW4ocyk7CisgICAgaWYgKGxlbiA9PSAwKQorICAgICAgcmV0dXJuKDApOwor CisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpCisgICAgICByZXR1cm4o dHRvbCgoQ0hBUiAqKXMsbGVuKSk7CisKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKGlu c2VydmVyICYmIFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpIHsKKwlpZiAobnhwYWNrZXQg PCBsZW4pIHsKKwkgICAgaWYgKHhwYWNrZXQpIHsKKwkJZnJlZSh4cGFja2V0KTsKKwkJeHBhY2tl dCA9IE5VTEw7CisJCW54cGFja2V0ID0gMDsKKwkgICAgfQorCSAgICBsZW4gPSBsZW4gPiAxMDI0 MCA/IGxlbiA6IDEwMjQwOworCSAgICB4cGFja2V0ID0gKENIQVIgKiltYWxsb2MobGVuKTsKKwkg ICAgaWYgKCF4cGFja2V0KSB7CisJCWZwcmludGYoc3RkZXJyLCJ0dG9sIG1hbGxvYyBmYWlsdXJl XG4iKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfSBlbHNlCisJICAgICAgbnhwYWNrZXQgPSBsZW47 CisJfQorCW1lbWNweSh4cGFja2V0LHMsbGVuKTsKKwlzID0gKGNoYXIgKil4cGFja2V0OworCWNr X3RuX2VuY3J5cHQocyxsZW4pOworICAgIH0KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisj ZW5kaWYgLyogSUtTRCAqLworCisjaWZkZWYgUGxhbjkKKyAgICByZXR1cm4oY29ud3JpdGUocyxs ZW4pKTsKKyNlbHNlCisgICAgcmV0dXJuKHdyaXRlKDEscyxsZW4pKTsKKyNlbmRpZiAvKiBQbGFu OSAqLworfQorCisvKiAgQyBPIE4gTyBMIEEgIC0tICBXcml0ZSBhbiBhcnJheSBvZiBsaW5lcyB0 byB0aGUgY29uc29sZSB0ZXJtaW5hbCAqLworCitpbnQKK2Nvbm9sYShzKSBjaGFyICpzW107IHsK KyAgICBjaGFyICogcDsKKyAgICBpbnQgaSwgeDsKKworCisgICAgaWYgKCFzKSByZXR1cm4oMCk7 CisgICAgZm9yIChpID0gMDsgOyBpKyspIHsKKwlwID0gc1tpXTsKKwlpZiAoIXApIHAgPSAiIjsJ CQkvKiBMZXQncyBub3QgZHVtcCBjb3JlIHNoYWxsIHdlPyAqLworCWlmICghKnApCisJICBicmVh azsKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICFsb2NhbCkKKwkgIHggPSB0dG9sKChD SEFSICopcCwoaW50KXN0cmxlbihwKSk7CisJZWxzZQorI2VuZGlmIC8qIElLU0QgKi8KKwkgIHgg PSBjb25vbChwKTsKKwlpZiAoeCA8IDApCisJICByZXR1cm4oLTEpOworICAgIH0KKyAgICByZXR1 cm4oMCk7Cit9CisKKy8qICBDIE8gTiBPIEwgTCAgLS0gIE91dHB1dCBhIHN0cmluZyBmb2xsb3dl ZCBieSBDUkxGICAqLworCitpbnQKK2Nvbm9sbChzKSBjaGFyICpzOyB7CisgICAgQ0hBUiBidWZb M107CisgICAgYnVmWzBdID0gJ1xyJzsKKyAgICBidWZbMV0gPSAnXG4nOworICAgIGJ1ZlsyXSA9 ICdcMCc7CisgICAgaWYgKCFzKSBzID0gIiI7CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2Vy dmVyICYmICFsb2NhbCkgeworCWlmICgqcykgdHRvbCgoQ0hBUiAqKXMsKGludClzdHJsZW4ocykp OworCXJldHVybih0dG9sKGJ1ZiwyKSk7CisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAg IGlmICgqcykgY29ub2wocyk7CisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAg ICBpZiAoaW5zZXJ2ZXIgJiYgVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKKyAgICAgIGNr X3RuX2VuY3J5cHQoKGNoYXIgKilidWYsMik7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLwor I2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIFBsYW45CisgICAgcmV0dXJuKGNvbndyaXRlKGJ1 ZiwgMikpOworI2Vsc2UKKyAgICByZXR1cm4od3JpdGUoMSxidWYsMikpOworI2VuZGlmIC8qIFBs YW45ICovCit9CisKKy8qICBDIE8gTiBDIEggSyAgLS0gIFJldHVybiBob3cgbWFueSBjaGFyYWN0 ZXJzIGF2YWlsYWJsZSBhdCBjb25zb2xlICAqLworLyoKKyAgV2UgY291bGQgYWxzbyB1c2Ugc2Vs ZWN0KCkgaGVyZSB0byBjb3ZlciBhIGZldyBtb3JlIHN5c3RlbXMgdGhhdCBhcmUgbm90CisgIGNv dmVyZWQgYnkgYW55IG9mIHRoZSBmb2xsb3dpbmcsIGUuZy4gSFAtVVggOS4weCBvbiB0aGUgbW9k ZWwgODAwLgorKi8KK2ludAorY29uY2hrKCkgeworICAgIHN0YXRpYyBpbnQgY29udHlwID0gMDsJ CS8qICsxIGZvciBpc2F0dHksIC0xIG90aGVyd2lzZSAqLworCisgICAgaWYgKGNvbnR5cCA9PSAw KQkJCS8qIFRoaXMgcHJldmVudHMgdW5uZWNlc3NhcnkgKi8KKyAgICAgIGNvbnR5cCA9IChpc2F0 dHkoMCkgPyAxIDogLTEpOwkvKiBkdXBsaWNhdGVkIGNhbGxzIHRvIGlzYXR0eSgpICovCisgICAg ZGVidWcoRjEwMSwiY29uY2hrIGNvbnR5cCIsIiIsY29udHlwKTsKKyAgICBpZiAoYmFja2dyZCB8 fCAoY29udHlwIDwgMCkpCisgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBhZWdpcworICAgIGlm IChjb25idWZuID4gMCkgcmV0dXJuKGNvbmJ1Zm4pOyAgIC8qIHVzZSBvbGQgY291bnQgaWYgbm9u emVybyAqLworCisgICAgLyogcmVhZCBpbiBtb3JlIGNoYXJhY3RlcnMgKi8KKyAgICBjb25idWZu ID0gaW9zXyRnZXQoaW9zXyRzdGRpbiwKKyAgICAgICAgICAgICAgaW9zXyRjb25kX29wdCwgY29u YnVmLCAobG9uZylzaXplb2YoY29uYnVmKSwgc3QpOworICAgIGlmIChzdC5hbGwgIT0gc3RhdHVz XyRvaykgY29uYnVmbiA9IDA7CisgICAgY29uYnVmcCA9IGNvbmJ1ZjsKKyAgICByZXR1cm4oY29u YnVmbik7CisjZWxzZQorI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQor ICAgICAgcmV0dXJuKGluX2NoaygxLHR0eWZkKSk7CisgICAgZWxzZQorI2VuZGlmIC8qIElLU0Qg Ki8KKyAgICAgIHJldHVybihpbl9jaGsoMCwwKSk7CisjZW5kaWYgLyogYWVnaXMgKi8KK30KKwor LyogIEMgTyBOIEkgTiBDICAtLSAgR2V0IGEgY2hhcmFjdGVyIGZyb20gdGhlIGNvbnNvbGUgICov CisvKgorICBDYWxsIHdpdGggdGltbyA+IDAgdG8gZG8gYSB0aW1lZCByZWFkLCB0aW1vID09IDAg dG8gZG8gYW4gdW50aW1lZCBibG9ja2luZworICByZWFkLiAgVXBvbiBzdWNjZXNzLCByZXR1cm5z IHRoZSBjaGFyYWN0ZXIuICBVcG9uIGZhaWx1cmUsIHJldHVybnMgLTEuCisgIEEgdGltZWQgcmVh ZCB0aGF0IGRvZXMgbm90IGNvbXBsZXRlIHdpdGhpbiB0aGUgdGltZW91dCBwZXJpb2QgcmV0dXJu cyAtMi4KKyovCitpbnQKK2NvbmluYyh0aW1vKSBpbnQgdGltbzsgeworICAgIGludCBuID0gMDsg Q0hBUiBjaDsKKyAgICBpbnQgeHg7CisKKyAgICBpZiAoY29uYnVmbiA+IDApIHsJCQkvKiBJZiBz b21ldGhpbmcgYWxyZWFkeSBidWZmZXJlZCAqLworCS0tY29uYnVmbjsKKwlyZXR1cm4oKHVuc2ln bmVkKSgqY29uYnVmcCsrICYgMHhmZikpOworICAgIH0KKworICAgIGVycm5vID0gMDsJCQkJLyog Q2xlYXIgdGhpcyAqLworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKSB7 CisJeHggPSB0dGluYyh0aW1vKTsKKwlpZiAoeHggPCAwKQorCSAgcmV0dXJuKHR0aW5jdGltbyA/ IC0yIDogLTEpOworCWVsc2UKKwkgIHJldHVybih4eCk7CisgICAgfQorI2VuZGlmIC8qIElLU0Qg Ki8KKworI2lmZGVmIGFlZ2lzCQkJCS8qIEFwb2xsbyBBZWdpcyBvbmx5Li4uICovCisgICAgZGVi dWcoRjEwMSwiY29uaW5jIHRpbW8iLCIiLHRpbW8pOworICAgIGZmbHVzaChzdGRvdXQpOworICAg IGlmIChjb25jaGsoKSA+IDApIHsKKwktLWNvbmJ1Zm47CisJcmV0dXJuKCh1bnNpZ25lZCkoKmNv bmJ1ZnArKyAmIDB4ZmYpKTsKKyAgICB9CisjZW5kaWYgLyogYWVnaXMgKi8KKworI2lmZGVmIFRU TEVCVUYKKyAgICBpZiAoCisjaWZkZWYgSUtTRAorCWluc2VydmVyICYmCisjZW5kaWYgLyogSUtT RCAqLworCSF4bG9jYWwKKwkpIHsKKwlpZiAodHRwdXNoID49IDApIHsKKwkgICAgZGVidWcoRjEx MSwidHRpbmMiLCJ0dHB1c2giLHR0cHVzaCk7CisJICAgIGNoID0gdHRwdXNoOworCSAgICB0dHB1 c2ggPSAtMTsKKwkgICAgcmV0dXJuKGNoKTsKKwl9CisJaWYgKGxlX2RhdGEpIHsKKwkgICAgaWYg KGxlX2dldGNoYXIoJmNoKSA+IDApIHsKKwkJZGVidWcoRjExMSwidHRpbmMgTG9jYWxFY2hvSW5C dWYiLCJjaCIsY2gpOworCQlyZXR1cm4oY2gpOworCSAgICB9CisJfQorICAgIH0KKyNlbmRpZiAv KiBUVExFQlVGICovCisKKyAgICBpZiAodGltbyA8PSAwKSB7CQkJLyogVW50aW1lZCwgYmxvY2tp bmcgcmVhZC4gKi8KKwl3aGlsZSAoMSkgewkJCS8qIEtlZXAgdHJ5aW5nIHRpbGwgd2UgZ2V0IG9u ZS4gKi8KKwkgICAgbiA9IHJlYWQoMCwgJmNoLCAxKTsJLyogUmVhZCBhIGNoYXJhY3Rlci4gKi8K KwkgICAgaWYgKG4gPT0gMCkgY29udGludWU7CS8qIFNob3VsZG4ndCBoYXBwZW4uICovCisJICAg IGlmIChuID4gMCkgewkJLyogSWYgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgKi8KKyNpZmRlZiBJS1NE CisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsImNvbmlu YyBkZWNyeXB0IDEiLCIiLDApOworICAgICAgICAgICAgICAgIGlmIChpbnNlcnZlciAmJiAhbG9j YWwgJiYgVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKQorCQkgIGNrX3RuX2RlY3J5cHQoKGNo YXIgKikmY2gsMSk7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIElLU0Qg Ki8KKwkJcmV0dXJuKCh1bnNpZ25lZCkoY2ggJiAweGZmKSk7IC8qIHJldHVybiB0aGUgY2hhcmFj dGVyLiAqLworICAgICAgICAgICAgfQorCisvKiBDb21lIGhlcmUgaWYgcmVhZCgpIHJldHVybmVk IGFuIGVycm9yLiAqLworCisJICAgIGRlYnVnKEYxMDEsICJjb25pbmMoMCkgZXJybm8iLCIiLGVy cm5vKTsgLyogTG9nIHRoZSBlcnJvci4gKi8KKyNpZm5kZWYgT1hPUworI2lmZGVmIFNWT1JQT1NJ WAorI2lmZGVmIENJRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0lFIFJlZ3VsdXMg aGFzIG5vIEVJTlRSIHN5bWJvbD8gKi8KKyNpZm5kZWYgRUlOVFIKKyNkZWZpbmUgRUlOVFIgNAor I2VuZGlmIC8qIEVJTlRSICovCisjZW5kaWYgLyogQ0lFICovCisvKgorICBUaGlzIHJvdXRpbmUg aXMgdXNlZCBmb3Igc2V2ZXJhbCBkaWZmZXJlbnQgcHVycG9zZXMuICBJbiBDT05ORUNUIG1vZGUs IGl0IGlzCisgIHVzZWQgdG8gZG8gYW4gdW50aW1lZCwgYmxvY2tpbmcgcmVhZCBmcm9tIHRoZSBr ZXlib2FyZCBpbiB0aGUgbG93ZXIgQ09OTkVDVAorICBmb3JrLiAgRHVyaW5nIGxvY2FsLW1vZGUg ZmlsZSB0cmFuc2ZlciwgaXQgcmVhZHMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUKKyAgY29uc29sZSB0 byBpbnRlcnJ1cHQgdGhlIGZpbGUgdHJhbnNmZXIgKGxpa2UgQSBmb3IgYSBzdGF0dXMgcmVwb3J0 LCBYIHRvCisgIGNhbmNlbCBhIGZpbGUsIGV0YykuICBPYnZpb3VzbHksIHdlIGRvbid0IHdhbnQg dGhlIHJlYWRzIGluIHRoZSBsYXR0ZXIgY2FzZQorICB0byBiZSBibG9ja2luZywgb3IgdGhlIGZp bGUgdHJhbnNmZXIgd291bGQgc3RvcCB1bnRpbCB0aGUgdXNlciB0eXBlZAorICBzb21ldGhpbmcu ICBVbmZvcnR1bmF0ZWx5LCBTeXN0ZW0gViBkb2VzIG5vdCBhbGxvdyB0aGUgY29uc29sZSBkZXZp Y2UgaW5wdXQKKyAgYnVmZmVyIHRvIGJlIHNhbXBsZWQgbm9uZGVzdHJ1Y3RpdmVseSAoZS5nLiBi eSBjb25jaGsoKSksIHNvIGEga2x1ZGdlIGlzCisgIHVzZWQgaW5zdGVhZC4gIER1cmluZyBsb2Nh bC1tb2RlIGZpbGUgdHJhbnNmZXIsIHRoZSBTSUdRVUlUIHNpZ25hbCBpcyBhcm1lZAorICBhbmQg dHJhcHBlZCBieSBlc2N0cnAoKSwgYW5kIHRoaXMgcm91dGluZSBwcmV0ZW5kcyB0byBoYXZlIHJl YWQgdGhlIHF1aXQKKyAgY2hhcmFjdGVyIGZyb20gdGhlIGtleWJvYXJkIG5vcm1hbGx5LiAgQnV0 LCBrbHVkZ2Ugb3Igbm8ga2x1ZGdlLCB0aGUgcmVhZCgpCisgIGlzc3VlZCBieSB0aGlzIGNvbW1h bmQsIHVuZGVyIFN5c3RlbSBWIG9ubHksIGNhbiBmYWlsIGlmIGEgc2lnbmFsIC0tIEFOWQorICBz aWduYWwgLS0gaXMgY2F1Z2h0IHdoaWxlIHRoZSByZWFkIGlzIHBlbmRpbmcuICBUaGlzIGNhbiBv Y2N1ciBub3Qgb25seSB3aGVuCisgIHRoZSB1c2VyIHR5cGVzIHRoZSBxdWl0IGNoYXJhY3Rlciwg YnV0IGFsc28gZHVyaW5nIHRlbG5ldCBuZWdvdGlhdGlvbnMsIHdoZW4KKyAgdGhlIGxvd2VyIENP Tk5FQ1QgZm9yayBzaWduYWxzIHRoZSB1cHBlciBvbmUgYWJvdXQgYW4gZWNob2luZyBtb2RlIGNo YW5nZS4KKyAgV2hlbiB0aGlzIGhhcHBlbnMsIHdlIGhhdmUgdG8gcG9zdCB0aGUgcmVhZCgpIGFn YWluLiAgVGhpcyBpcyBhcHBhcmVudGx5IG5vdAorICBhIHByb2JsZW0gaW4gQlNELWJhc2VkIFVO SVggdmVyc2lvbnMuCisqLworCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBSZWFkIGludGVy cnVwdGVkLiAqLworCSAgICAgIGlmIChjb25lc2MpICB7CQkvKiBJZiBieSBTSUdRVUlULCAqLwor IAkJIGNvbmVzYyA9IDA7CQkvKiB0aGUgY29uZXNjIHZhcmlhYmxlIGlzIHNldCwgKi8KKyAJCSBy ZXR1cm4oZXNjY2hyKTsJLyogc28gcmV0dXJuIHRoZSBlc2NhcGUgY2hhcmFjdGVyLiAqLworCSAg ICAgfSBlbHNlIGNvbnRpbnVlOwkJLyogQnkgb3RoZXIgc2lnbmFsLCB0cnkgYWdhaW4uICovCisj ZWxzZQorLyoKKyAgVGhpcyBtaWdodCBiZSBkYW5nZXJvdXMsIGJ1dCBsZXQncyBkbyB0aGlzIG9u IG5vbi1TeXN0ZW0gViB2ZXJzaW9ucyB0b28sCisgIHNpbmNlIGF0IGxlYXN0IG9uZSBTdW5PUyA0 LjEuMiB1c2VyIGNvbXBsYWlucyBvZiBpbW1lZGlhdGUgZGlzY29ubmVjdGlvbnMKKyAgdXBvbiBm aXJzdCBtYWtpbmcgYSBURUxORVQgY29ubmVjdGlvbi4KKyovCisJICAgIGlmIChlcnJubyA9PSBF SU5UUikJCS8qIFJlYWQgaW50ZXJydXB0ZWQuICovCisJICAgICAgY29udGludWU7CisjZW5kaWYg LyogU1ZPUlBPU0lYICovCisjZWxzZSAvKiBPWE9TICovCisJICAgIGlmIChlcnJubyA9PSBFSU5U UikJCS8qIFJlYWQgaW50ZXJydXB0ZWQuICovCisJICAgICAgY29udGludWU7CisjZW5kaWYgLyog T1hPUyAqLworCSAgICByZXR1cm4oLTEpOwkJCS8qIEVycm9yICovCisJfQorICAgIH0KKyNpZmRl ZiBERUJVRworICAgIGlmIChkZWJsb2cgJiYgdGltbyA8PSAwKSB7CisJZGVidWcoRjEwMCwiY29u aW5jIHRpbWVvdXQgbG9naWMgZXJyb3IiLCIiLDApOworCXRpbW8gPSAxOworICAgIH0KKyNlbmRp ZiAvKiBERUJVRyAqLworCisvKiBUaW1lZCByZWFkLi4uICovCisKKyAgICBzYXZhbCA9IHNpZ25h bChTSUdBTFJNLHRpbWVyaCk7CS8qIFNldCB1cCB0aW1lb3V0IGhhbmRsZXIuICovCisgICAgeHgg PSBhbGFybSh0aW1vKTsJCQkvKiBTZXQgdGhlIGFsYXJtLiAqLworICAgIGRlYnVnKEYxMDEsImNv bmluYyBhbGFybSBzZXQiLCIiLHRpbW8pOworICAgIGlmICgKKyNpZmRlZiBDS19QT1NJWF9TSUcK KwlzaWdzZXRqbXAoc2pidWYsMSkKKyNlbHNlCisJc2V0am1wKHNqYnVmKQorI2VuZGlmIC8qIENL X1BPU0lYX1NJRyAqLworCSkJCQkJLyogVGhlIHJlYWQoKSB0aW1lZCBvdXQuICovCisgICAgICBu ID0gLTI7CQkJCS8qIENvZGUgZm9yIHRpbWVvdXQuICovCisgICAgZWxzZQorICAgICAgbiA9IHJl YWQoMCwgJmNoLCAxKTsKKyAgICB0dGltb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCisg ICAgaWYgKG4gPiAwKSB7CQkJLyogR290IGNoYXJhY3RlciBPSy4gKi8KKyNpZmRlZiBJS1NECisj aWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICBkZWJ1ZyhGMTAwLCJjb25pbmMgZGVjcnlwdCAy IiwiIiwwKTsKKyAgICAgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCAmJiBURUxPUFRfVShURUxP UFRfRU5DUllQVElPTikpCisJICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOworI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBJS1NEICovCisJcmV0dXJuKCh1bnNpZ25l ZCkoY2ggJiAweGZmKSk7CS8qIFJldHVybiBpdC4gKi8KKyAgICB9CisvKgorICByZWFkKCkgcmV0 dXJuZWQgYW4gZXJyb3IuICBTYW1lIGRlYWwgYXMgYWJvdmUsIGJ1dCB3aXRob3V0IHRoZSBsb29w LgorKi8KKyAgICBkZWJ1ZyhGMTAxLCAiY29uaW5jKHRpbW8pIG4iLCIiLG4pOworICAgIGRlYnVn KEYxMDEsICJjb25pbmModGltbykgZXJybm8iLCIiLGVycm5vKTsKKyNpZm5kZWYgT1hPUworI2lm ZGVmIFNWT1JQT1NJWAorICAgIGlmIChuID09IC0xICYmIGVycm5vID09IEVJTlRSICYmIGNvbmVz YyAhPSAwKSB7CisJY29uZXNjID0gMDsKKwlyZXR1cm4oZXNjY2hyKTsJCQkvKiBVc2VyIGVudGVy ZWQgZXNjYXBlIGNoYXJhY3Rlci4gKi8KKyAgICB9CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisg ICAgaWYgKG4gPT0gMCAmJiBlcnJubyA+IDApIHsJCS8qIEl0J3MgYW4gZXJyb3IgKi8KKwlyZXR1 cm4oLTEpOworICAgIH0KKyNlbmRpZiAvKiAhIE9YT1MgKi8KKyAgICByZXR1cm4obik7Cit9CisK Ky8qICBDIE8gTiBHIEsgUyAgLS0gIENvbnNvbGUgR2V0IEtleWJvYXJkIFNjYW5jb2RlICAqLwor CisjaWZuZGVmIGNvbmdrcworLyoKKyAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBmaWxsZWQg aW4gd2l0aCB0aGUgdmFyaW91cyBzeXN0ZW0tZGVwZW5kZW50CisgIHN5c3RlbSBjYWxscyB1c2Vk IGJ5IFNVTk9TLCBOZVhUIE9TLCBYZW5peCwgQXZpaW9uLCBldGMsIHRvIHJlYWQgYSBmdWxsCisg IGtleWJvYXJkIHNjYW4gY29kZS4gIFVuZm9ydHVuYXRlbHkgdGhlcmUgYXJlbid0IGFueS4KKyov CitpbnQKK2Nvbmdrcyh0aW1vKSBpbnQgdGltbzsgeworCisjaWZkZWYgSUtTRAorICAgIGlmIChp bnNlcnZlciAmJiAhbG9jYWwpCisgICAgICByZXR1cm4odHRpbmModGltbykpOworI2VuZGlmIC8q IElLU0QgKi8KKworICAgIHJldHVybihjb25pbmModGltbykpOworfQorI2VuZGlmIC8qIGNvbmdr cyAqLworCisjaWZkZWYgQVRUNzMwMAorCisvKiAgQSBUIFQgRCBJIEEgTCAgLS0gIERpYWwgdXAg dGhlIHJlbW90ZSBzeXN0ZW0gdXNpbmcgaW50ZXJuYWwgbW9kZW0KKyAqIFB1cnBvc2U6IHRvIG9w ZW4gYW5kIGRpYWwgYSBudW1iZXIgb24gdGhlIGludGVybmFsIG1vZGVtIGF2YWlsYWJsZSBvbiB0 aGUKKyAqIEFUVDczMDAgVU5JWCBQQy4gIFdyaXR0ZW4gYnkgSm9lIERvdXBuaWsuIFN1cGVyY2Vl ZHMgdmVyc2lvbiB3cml0dGVuIGJ5CisgKiBSaWNoYXJkIEUuIEhpbGwsIERpY2tpbnNvbiwgVFgu IHdoaWNoIGVtcGxveWVkIGRpYWwoM2MpLgorICogVXNlcyBpbmZvcm1hdGlvbiBpbiA8c3lzL3Bo b25lLmg+IGFuZCBvdXIgc3RhdHVzIGludCBhdHRtb2RlbS4KKyAqLworYXR0ZGlhbCh0dG5hbWUs c3BlZWQsdGVsbmJyKSBjaGFyICp0dG5hbWUsKnRlbG5icjsgbG9uZyBzcGVlZDsgeworICAgIGNo YXIgKnRlbG51bTsKKworICAgIGF0dG1vZGVtICY9IH5JU01PREVNOyAgICAgICAgICAgICAgICAg ICAgICAgLyogbW9kZW0gbm90IGluIHVzZSB5ZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgLyog RW5zdXJlIE9fTkRFTEFZIGlzIHNldCwgZWxzZSBpL28gdHJhZmZpYyBoYW5ncyAqLworICAgICAg ICAgICAgICAgICAgICAvKiBXZSB0dXJuIHRoaXMgZmxhZyBvZmYgb25jZSB0aGUgZGlhbCBpcyBj b21wbGV0ZSAqLworICAgIGZjbnRsKHR0eWZkLCBGX1NFVEZMLCBmY250bCh0dHlmZCwgRl9HRVRG TCwgMCkgfCBPX05ERUxBWSk7CisKKyAgICAvKiBDb25kaXRpb24gbGluZSwgY2hlY2sgYXZhaWxh YmlsaXR5ICYgREFUQSBtb2RlLCB0dXJuIG9uIHNwZWFrZXIgKi8KKyAgICBpZiAoaW9jdGwodHR5 ZmQsUElPQ09GRkhPT0ssICZkaWFsZXIpID09IC0xKSB7CisgICAgICAgIHByaW50ZigiY2Fubm90 IGFjY2VzcyBwaG9uZVxuIik7CisgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgcmV0dXJuICgt Mik7CisgICAgfQorICAgIGlvY3RsKHR0eWZkLFBJT0NHRVRQLCZkaWFsZXIpOyAgICAgIC8qIGdl dCBwaG9uZSBkaWFsZXIgcGFyYW1ldGVycyAqLworCisgICAgaWYgKGRpYWxlci5jX2xpbmVwYXJh bSAmIFZPSUNFKSB7CS8qIHBob25lIG11c3QgYmUgaW4gREFUQSBtb2RlICovCisgICAgICAgIHBy aW50ZigiIFNob3VsZCBub3QgZGlhbCB3aXRoIG1vZGVtIGluIFZPSUNFIG1vZGUuXG4iKTsKKyAg ICAgICAgcHJpbnRmKCIgRXhpdCBLZXJtaXQsIHN3aXRjaCB0byBEQVRBIGFuZCByZXRyeSBjYWxs LlxuIik7CisgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgcmV0dXJuICgtMik7CisgICAgfQor I2lmZGVmIEFUVFRPTkVECQkJCS8qIE9sZCB3YXksIHRvbmUgZGlhbGluZyBvbmx5LiAqLworICAg IGRpYWxlci5jX2xpbmVwYXJhbSA9IERBVEEgfCBEVE1GOwkvKiBEaWFsIHdpdGggdG9uZXMsICov CisgICAgZGlhbGVyLmNfbGluZXBhcmFtICY9IH5QVUxTRTsJLyogbm90IHdpdGggcHVsc2VzLiAq LworI2Vsc2UKKyAgICAvKiBMZWF2ZSBjdXJyZW50IHB1bHNlL3RvbmUgc3RhdGUgYWxvbmUuICov CisgICAgLyogQnV0IHdoYXQgYWJvdXQgREFUQT8gIEFkZCBpdCBiYWNrIGlmIHlvdSBoYXZlIHRy b3VibGUuICovCisgICAgLyogc3lzL3Bob25lIHNheXMgeW91IGdldCBEQVRBIGF1dG9tYXRpY2Fs bHkgYnkgb3BlbmluZyBkZXZpY2UgUkRXUiAqLworI2VuZGlmCisgICAgZGlhbGVyLmNfd2FpdGRp YWx0b25lID0gNTsgICAgICAgICAgICAgICAgICAvKiB3YWl0IDUgc2VjIGZvciBkaWFsdG9uZSAq LworI2lmZGVmIENPTU1FTlQKKyAgICBkaWFsZXIuY19mZWVkYmFjayA9IFNQRUFLRVJPTnxOT1JN U1BLfFJJTkdPTjsgIC8qIGNvbnRyb2wgc3BlYWtlciAqLworI2Vsc2UKKyAgICAvKiBzeXMvcGhv bmUgc2F5cyBSSU5HT04gdXNlZCBvbmx5IGZvciBpbmNvbWluZyB2b2ljZSBjYWxscyAqLworICAg IGRpYWxlci5jX2ZlZWRiYWNrICY9IH4oU09GVFNQS3xMT1VEU1BLKTsKKyAgICBkaWFsZXIuY19m ZWVkYmFjayB8PSBTUEVBS0VST058Tk9STVNQSzsKKyNlbmRpZgorICAgIGRpYWxlci5jX3dhaXRm bGFzaCA9IDUwMDsgICAgICAgICAgICAgICAgICAgLyogMC41IHNlYyBmbGFzaCBob29rICovCisg ICAgaWYoaW9jdGwodHR5ZmQsUElPQ1NFVFAsJmRpYWxlcikgPT0gLTEpIHsgICAvKiBzZXQgcGhv bmUgcGFyYW1ldGVycyAqLworICAgICAgICBwcmludGYoIkNhbm5vdCBzZXQgbW9kZW0gY2hhcmFj dGVyaXN0aWNzXG4iKTsKKyAgICAgICAgdHRjbG9zKDApOworICAgICAgICByZXR1cm4gKC0yKTsK KyAgICB9CisgICAgaW9jdGwodHR5ZmQsUElPQ1JFQ09OTiwwKTsJCS8qIFR1cm5zIG9uIHNwZWFr ZXIgZm9yIHB1bHNlICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgZnByaW50ZihzdGRlcnIsIlBo b25lIGxpbmUgc3RhdHVzLiBsaW5lX3BhcjolbyBkaWFsdG9uZV93YWl0OiVvIFwKK2xpbmVfc3Rh dHVzOiVvIGZlZWRiYWNrOiVvXG4iLAorICAgIGRpYWxlci5jX2xpbmVwYXJhbSwgZGlhbGVyLmNf d2FpdGRpYWx0b25lLAorICAgIGRpYWxlci5jX2xpbmVzdGF0dXMsIGRpYWxlci5jX2ZlZWRiYWNr KTsKKyNlbmRpZgorCisgICAgYXR0bW9kZW0gfD0gSVNNT0RFTTsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBtb2RlbSBpcyBub3cgaW4tdXNlICovCisgICAgc2xlZXAoMSk7CisgICAgZm9yICh0 ZWxudW0gPSB0ZWxuYnI7ICp0ZWxudW0gIT0gJ1wwJzsgdGVsbnVtKyspICAgIC8qIGRpYWwgbnVt YmVyICovCisjaWZkZWYgQVRUVE9ORUQKKyAgICAgIC8qIFRvbmUgZGlhbGluZyBvbmx5ICovCisg ICAgICBpZiAoaW9jdGwodHR5ZmQsUElPQ0RJQUwsdGVsbnVtKSAhPSAwKSB7CisJICBwZXJyb3Io IkVycm9yIGluIGRpYWxpbmciKTsKKwkgIHR0Y2xvcygwKTsKKwkgIHJldHVybigtMik7CisgICAg ICB9CisjZWxzZSAvKiBBbGxvdyBQdWxzZSBvciBUb25lIGRpYWxpbmcgKi8KKyAgICBzd2l0Y2gg KCp0ZWxudW0pIHsKKyAgICAgIGNhc2UgJ3QnOiBjYXNlICdUJzogY2FzZSAnJSc6CS8qIFRvbmUg ZGlhbGluZyByZXF1ZXN0ZWQgKi8KKwlkaWFsZXIuY19saW5lcGFyYW0gfD0gRFRNRjsKKwlkaWFs ZXIuY19saW5lcGFyYW0gJj0gflBVTFNFOworCWlmIChpb2N0bCh0dHlmZCxQSU9DU0VUUCwmZGlh bGVyKSA9PSAtMSkgeworCSAgICBwcmludGYoIkNhbm5vdCBzZXQgbW9kZW0gdG8gdG9uZSBkaWFs aW5nXG4iKTsKKwkgICAgdHRjbG9zKDApOworCSAgICByZXR1cm4oLTIpOworCX0KKwlicmVhazsK KyAgICAgIGNhc2UgJ2QnOiBjYXNlICdEJzogY2FzZSAncCc6IGNhc2UgJ1AnOiBjYXNlICdeJzoK KwlkaWFsZXIuY19saW5lcGFyYW0gfD0gUFVMU0U7CisJZGlhbGVyLmNfbGluZXBhcmFtICY9IH5E VE1GOworCWlmIChpb2N0bCh0dHlmZCxQSU9DU0VUUCwmZGlhbGVyKSA9PSAtMSkgeworCSAgICBw cmludGYoIkNhbm5vdCBzZXQgbW9kZW0gdG8gcHVsc2UgZGlhbGluZ1xuIik7CisJICAgIHR0Y2xv cygwKTsKKwkgICAgcmV0dXJuKC0yKTsKKwl9CisJYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAg ICAgICBpZiAoaW9jdGwodHR5ZmQsUElPQ0RJQUwsdGVsbnVtKSAhPSAwKSB7CisJICAgIHBlcnJv cigiRGlhbGluZyBlcnJvciIpOworCSAgICB0dGNsb3MoMCk7CisJICAgIHJldHVybigtMik7CisJ fQorCWJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAgaW9jdGwodHR5ZmQsUElPQ0RJQUwsIkAi KTsJCS8qIHRlcm1pbmF0b3IgZm9yIGRhdGEgY2FsbCAqLworICAgIGRvIHsJCQkJLyogd2FpdCBm b3IgbW9kZW1zIHRvIENvbm5lY3QgKi8KKyAgICAgICAgaWYgKGlvY3RsKHR0eWZkLFBJT0NHRVRQ LCZkaWFsZXIpICE9IDApCXsgLyogZ2V0IHBhcmFtcyAqLworCSAgICBwZXJyb3IoIkNhbm5vdCBn ZXQgbW9kZW1zIHRvIGNvbm5lY3QiKTsKKwkgICAgdHRjbG9zKDApOworCSAgICByZXR1cm4oLTIp OworCX0KKyAgICB9IHdoaWxlICgoZGlhbGVyLmNfbGluZXN0YXR1cyAmIE1PREVNQ09OTkVDVEVE KSA9PSAwKTsKKyAgICAvKiBUdXJuIG9mZiBPX05ERUxBWSBmbGFnIG5vdy4gKi8KKyAgICBmY250 bCh0dHlmZCwgRl9TRVRGTCwgZmNudGwodHR5ZmQsIEZfR0VURkwsIDApICYgfk9fTkRFTEFZKTsK KyAgICBzaWduYWwoU0lHSFVQLCBzaWdodXApOyAgICAgICAgICAgICAvKiBoYW5ndXAgb24gbG9z cyBvZiBjYXJyaWVyICovCisgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAg LyogcmV0dXJuIHN1Y2Nlc3MgKi8KK30KKworLyoKKyAgT2ZmZ2V0dHksIG9uZ2V0dHkgZnVuY3Rp b25zLiBUaGVzZSBmdW5jdGlvbiBnZXQgdGhlICdnZXR0eSgxbSknIG9mZgorICBhbmQgcmVzdG9y ZSBpdCB0byB0aGUgaW5kaWNhdGVkIGxpbmUuICBTaGVsbCdzIHJldHVybiBjb2RlcyBhcmU6Cisg ICAgMDogQ2FuJ3QgZG8gaXQuICBQcm9iYWJseSBhIHVzZXIgbG9nZ2VkIG9uLgorICAgIDE6IE5v IG5lZWQuICBObyBnZXR0eSBvbiB0aGF0IGxpbmUuCisgICAgMjogRG9uZSwgeW91IHNob3VsZCBy ZXN0b3JlIHRoZSBnZXR0eSB3aGVuIHlvdSdyZSBkb25lLgorICBET0dFVFkgU3lzdGVtKDMpLCBo b3dldmVyLCByZXR1cm5zIHRoZW0gYXMgMCwgMjU2LCA1MTIsIHJlc3BlY3RpdmVseS4KKyAgVGhh bmtzIHRvIEtldmluIE8nR29ybWFuLCBBbmFybSBTb2Z0d2FyZSBTeXN0ZW1zLgorCisgICBnZXRv ZmYuc2ggbG9va3MgbGlrZTogICBnZXRvbi5zaCBsb29rcyBsaWtlOgorICAgICBzZXRnZXR0eSAk MSAwICAgICAgICAgICBzZXRnZXR0eSAkMSAxCisgICAgIGVycj0kPyAgICAgICAgICAgICAgICAg IGV4aXQgJD8KKyAgICAgc2xlZXAgMgorICAgICBleGl0ICRlcnIKKyovCisKKy8qICBPIEYgRiBH IEUgVCBUIFkgIC0tICBUdXJuIG9mZiBnZXR0eSgxbSkgZm9yIHRoZSBjb21tdW5pY2F0aW9ucyB0 dHkgbGluZQorICogYW5kIGdldCBzdGF0dXMgc28gaXQgY2FuIGJlIHJlc3RhcnRlZCBhZnRlciB0 aGUgbGluZSBpcyBodW5nIHVwLgorICovCitpbnQKK29mZmdldHR5KHR0bmFtZSkgY2hhciAqdHRu YW1lOyB7CisgICAgY2hhciB0ZW1wWzMwXTsKKyAgICB3aGlsZSAoKnR0bmFtZSAhPSAnXDAnKSB0 dG5hbWUrKzsgICAgICAgLyogc2VlayB0ZXJtaW5hdG9yIG9mIHBhdGggKi8KKyAgICB0dG5hbWUg LT0gMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGxhc3QgMyBjaGFycyBvZiBu YW1lICovCisgICAgc3ByaW50Zih0ZW1wLCIvdXNyL2Jpbi9nZXRvZmYuc2ggJXMiLHR0bmFtZSk7 CisgICAgcmV0dXJuKHpzeXNjbWQodGVtcCkpOworfQorCisvKiAgTyBOIEcgRSBUIFQgWSAgLS0g IFR1cm4gb24gZ2V0dHkoMW0pIGZvciB0aGUgY29tbXVuaWNhdGlvbnMgdHR5IGxpbmUgKi8KKwor aW50CitvbmdldHR5KHR0bmFtZSkgY2hhciAqdHRuYW1lOyB7CisgICAgY2hhciB0ZW1wWzMwXTsK KyAgICB3aGlsZSAoKnR0bmFtZSAhPSAnXDAnKSB0dG5hbWUrKzsgICAgICAgLyogY29tbXMgdHR5 IHBhdGggbmFtZSAqLworICAgIHR0bmFtZSAtPSAzOworICAgIHNwcmludGYodGVtcCwiL3Vzci9i aW4vZ2V0b24uc2ggJXMiLHR0bmFtZSk7CisgICAgcmV0dXJuKHpzeXNjbWQodGVtcCkpOworfQor I2VuZGlmIC8qIEFUVDczMDAgKi8KKworLyogIFQgVCBTIEMgQSBSIFIgIC0tICBTZXQgdHRjYXJy IHZhcmlhYmxlLCBjb250cm9sbGluZyBjYXJyaWVyIGhhbmRsaW5nLgorICoKKyAqICAwID0gT2Zm OiBBbHdheXMgaWdub3JlIGNhcnJpZXIuIEUuZy4geW91IGNhbiBjb25uZWN0IHdpdGhvdXQgY2Fy cmllci4KKyAqICAxID0gT246IEhlZWQgY2FycmllciwgZXhjZXB0IGR1cmluZyBkaWFsaW5nLiBD YXJyaWVyIGxvc3MgZ2l2ZXMgZGlzY29ubmVjdC4KKyAqICAyID0gQXV0bzogRm9yICJtb2RlbSBk aXJlY3QiOiBUaGUgc2FtZSBhcyAiT2ZmIi4KKyAqICAgICAgICAgICAgRm9yIHJlYWwgbW9kZW0g dHlwZXM6IEhlZWQgY2FycmllciBkdXJpbmcgY29ubmVjdCwgYnV0IGlnbm9yZQorICogICAgICAg ICAgICAgICAgaXQgYW55dGltZSBlbHNlLiAgQ29tcGF0aWJsZSB3aXRoIHByZS01QSBDLUtlcm1p dCB2ZXJzaW9ucy4KKyAqCisgKiBBcyB5b3UgY2FuIHNlZSwgdGhpcyBzZXR0aW5nIGRvZXMgbm90 IGFmZmVjdCBkaWFsaW5nLCB3aGljaCBhbHdheXMgaWdub3JlcworICogY2FycmllciAodW5sZXNz IHRoZXJlIGlzIHNvbWUgc3BlY2lhbCBleGNlcHRpb24gZm9yIHNvbWUgbW9kZW0gdHlwZSkuICBJ dAorICogZG9lcyBhZmZlY3QgdHRvcGVuKCkgaWYgaXQgaXMgc2V0IGJlZm9yZSB0dG9wZW4oKSBp cyB1c2VkLiAgVGhpcyBzZXR0aW5nCisgKiB0YWtlcyBlZmZlY3Qgb24gdGhlIG5leHQgY2FsbCB0 byB0dG9wZW4oKS90dHBrdCgpL3R0dnQoKS4gIEFuZCB0aGV5IGFyZQorICogKG9yIHNob3VsZCBi ZSkgYWx3YXlzIGNhbGxlZCBiZWZvcmUgYW55IGNvbW11bmljYXRpb25zIGlzIHRyaWVkLCB3aGlj aAorICogbWVhbnMgdGhhdCwgcHJhY3RpY2FsbHkgc3BlYWtpbmcsIHRoZSBlZmZlY3QgaXMgaW1t ZWRpYXRlLgorICoKKyAqIE9mIGNvdXJzZSwgbm90aGluZyBvZiB0aGlzIGFwcGxpZXMgdG8gcmVt b3RlIG1vZGUgKHhsb2NhbCA9IDApLgorICoKKyAqIFNvbWVvbmUgaGFzIHlldCB0byB1bmNvdmVy IGhvdyB0byBtYW5pcHVsYXRlIHRoZSBjYXJyaWVyIGluIHRoZSBCU0QKKyAqIGVudmlyb25tZW50 IChvciBhbnkgbm9uLXRlcm1pbyB1c2luZyBlbnZpcm9ubWVudCkuICBVbnRpbCB0aGF0IHRpbWUs IHRoaXMKKyAqIHdpbGwgc2ltcGx5IGJlIGEgbm8tb3AgZm9yIEJTRC4KKyAqCisgKiBOb3RlIHRo YXQgaW4gcHJldmlvdXMgdmVyc2lvbnMsIHRoZSBjYXJyaWVyIHdhcyBtb3N0IG9mdGVuIGxlZnQg dW5jaGFuZ2VkCisgKiBpbiB0dHBrdCgpL3R0dnQoKSB1bmxlc3MgdGhleSB3ZXJlIGNhbGxlZCB3 aXRoIEZMT19ESUFMIG9yIEZMT19ESUFYLiAgVGhpcworICogaGFzIGNoYW5nZWQuICBOb3cgaXQg aXMgY29udHJvbGxlZCBieSB0dGNhcnIgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVzZQorICogbW9k ZXMuCisgKi8KK2ludAordHRzY2FycihjYXJyaWVyKSBpbnQgY2FycmllcjsgeworICAgIHR0Y2Fy ciA9IGNhcnJpZXI7CisgICAgZGVidWcoRjEwMSwgInR0c2NhcnIiLCIiLHR0Y2Fycik7CisgICAg cmV0dXJuKHR0Y2Fycik7Cit9CisKKy8qIEMgQSBSIFIgQyBUIEwgIC0tICBTZXQgdHR5IG1vZGVz IGZvciBjYXJyaWVyIHRyZWF0bWVudC4KKyAqCisgKiBTZXRzIHRoZSBhcHByb3ByaWF0ZSBiaXRz IGluIGEgdGVybWlvIG9yIHNndHR5YiBzdHJ1Y3QgZm9yIGNhcnJpZXIgY29udHJvbAorICogKGFj dHVhbGx5LCB0aGVyZSBhcmUgbm8gYml0cyBpbiBzZ3R0eWIgZm9yIHRoYXQpLCBvciBwZXJmb3Jt cyBhbnkgb3RoZXIKKyAqIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGNvbnRyb2wgdGhpcyBvbiB0aGUg Y3VycmVudCBzeXN0ZW0uICBUaGUgZnVuY3Rpb24gZG9lcworICogbm90IGRvIHRoZSBhY3R1YWwg VENTRVRBIG9yIHN0dHksIHNpbmNlIG9mdGVuIHdlIHdhbnQgdG8gc2V0IG90aGVyIGJpdHMgdG9v CisgKiBmaXJzdC4gIERvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHhsb2NhbCBpcyAwLCBv ciB0aGUgdHR5IGlzIG5vdCBvcGVuZWQuCisgKgorICogV2UgZG9uJ3Qga25vdyBob3cgdG8gZG8g YW55dGhpbmcgbGlrZSBjYXJyaWVyIGNvbnRyb2wgb24gbm9uLUFUVFNWIHN5c3RlbXMsCisgKiBl eGNlcHQsIGFwcGFyZW50bHksIHVsdHJpeC4gIFNlZSBhYm92ZS4gIEl0IGlzIGFsc28ga25vd24g dGhhdCB0aGlzIGRvZXNuJ3QKKyAqIGhhdmUgbXVjaCBlZmZlY3Qgb24gYSBYZW5peCBzeXN0ZW0u ICBGb3IgWGVuaXgsIG9uZSBzaG91bGQgc3dpdGNoIGJhY2sgYW5kCisgKiBmb3J0aCBiZXR3ZWVu IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZSBkZXZpY2UgZmlsZXMuICBNYXliZSBsYXRlci4KKyAq IFByZXNlbnRseSwgWGVuaXggd2lsbCBzdGljayB0byB0aGUgbW9kZSBpdCB3YXMgb3BlbmVkIHdp dGguCisgKgorICogY2FycmllcjogMCA9IGlnbm9yZSBjYXJyaWVyLCAxID0gcmVxdWlyZSBjYXJy aWVyLgorICogVGhlIGN1cnJlbnQgc3RhdGUgaXMgc2F2ZWQgaW4gY3VyY2FyciwgYW5kIGNoZWNr ZWQgdG8gc2F2ZSBsYWJvdXIuCisgKi8KKyNpZmRlZiBTVk9SUE9TSVgKK2ludAorI2lmZGVmIEJT RDQ0T1JQT1NJWAorY2FycmN0bCh0dHBhciwgY2FycmllcikJc3RydWN0IHRlcm1pb3MgKnR0cGFy OyBpbnQgY2FycmllcjsKKyNlbHNlIC8qIEFUVFNWICovCitjYXJyY3RsKHR0cGFyLCBjYXJyaWVy KQlzdHJ1Y3QgdGVybWlvICp0dHBhcjsgaW50IGNhcnJpZXI7CisjZW5kaWYgLyogQlNENDRPUlBP U0lYICovCisvKiBjYXJyY3RsICovIHsKKyAgICBkZWJ1ZyhGMTAxLCAiY2FycmN0bCIsIiIsY2Fy cmllcik7CisgICAgaWYgKGNhcnJpZXIpCisgICAgICB0dHBhci0+Y19jZmxhZyAmPSB+Q0xPQ0FM OworICAgIGVsc2UKKyAgICAgIHR0cGFyLT5jX2NmbGFnIHw9IENMT0NBTDsKKyAgICByZXR1cm4o MCk7Cit9CisjZWxzZSAvKiBCZXJrZWxleSwgVjcsIGV0IGFsLi4uICovCitpbnQKK2NhcnJjdGwo dHRwYXIsIGNhcnJpZXIpIHN0cnVjdCBzZ3R0eWIgKnR0cGFyOyBpbnQgY2FycmllcjsgeworICAg IGRlYnVnKEYxMDEsICJjYXJyY3RsIiwiIixjYXJyaWVyKTsKKyAgICBpZiAoY2FycmllciA9PSBj dXJjYXJyKQorICAgICAgcmV0dXJuKDApOworICAgIGN1cmNhcnIgPSBjYXJyaWVyOworI2lmZGVm IHVsdHJpeAorI2lmZGVmIENPTU1FTlQKKy8qCisgIE9sZCBjb2RlIGZyb20gc29tZWJvZHkgYXQg REVDIHRoYXQgdGVuZHMgdG8gZ2V0IHN0dWNrLCB0aW1lIG91dCwgZXRjLgorKi8KKyAgICBpZiAo Y2FycmllcikgeworCWlvY3RsKHR0eWZkLCBUSU9DTU9ERU0sICZ0ZW1wKTsKKwlpb2N0bCh0dHlm ZCwgVElPQ0hQQ0wsIDApOworICAgIH0gZWxzZSB7CisJLyogKEFjY29yZGluZyB0byB0aGUgbWFu dWFscywgVElPQ05DQVIgc2hvdWxkIGJlIHByZWZlcnJlZCAqLworCS8qIG92ZXIgVElPQ05NT0RF TS4uLikgKi8KKwlpb2N0bCh0dHlmZCwgVElPQ05NT0RFTSwgJnRlbXApOworICAgIH0KKyNlbHNl CisvKgorICBOZXcgY29kZSBmcm9tIEphbWllIFdhdHNvbiB0aGF0LCBoZSBzYXlzLCBlbGltaW5h dGVzIHRoZSBwcm9ibGVtcy4KKyovCisgICAgaWYgKGNhcnJpZXIpIHsKKwlpb2N0bCh0dHlmZCwg VElPQ0NBUik7CisJaW9jdGwodHR5ZmQsIFRJT0NIUENMKTsKKyAgICB9IGVsc2UgeworCWlvY3Rs KHR0eWZkLCBUSU9DTkNBUik7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAv KiB1bHRyaXggKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisK KworLyogIFQgVCBHIE0gRCBNICAtLSAgR2V0IG1vZGVtIHNpZ25hbHMgICovCisvKgorIExvb2tz IGZvciBSUy0yMzIgbW9kZW0gc2lnbmFscywgYW5kIHJldHVybnMgdGhvc2UgdGhhdCBhcmUgb24g aW4gYXMgaXRzCisgcmV0dXJuIHZhbHVlLCBpbiBhIGJpdCBtYXNrIGNvbXBvc2VkIG9mIHRoZSBC TV94eHggdmFsdWVzIGRlZmluZWQgaW4gY2tjZGViLmguCisgUmV0dXJuczoKKyAtMyBOb3QgaW1w bGVtZW50ZWQKKyAtMiBpZiB0aGUgY29tbXVuaWNhdGlvbiBkZXZpY2UgZG9lcyBub3QgaGF2ZSBt b2RlbSBjb250cm9sIChlLmcuIHRlbG5ldCkKKyAtMSBvbiBlcnJvci4KKyA+PSAwIG9uIHN1Y2Nl c3MsIHdpdGggYSBiaXQgbWFzayBjb250YWluaW5nIHRoZSBtb2RlbSBzaWduYWxzIHRoYXQgYXJl IG9uLgorKi8KKworLyoKKyAgRGVmaW5lIHRoZSBzeW1ib2wgS19NRE1DVEwgaWYgd2UgaGF2ZSBT eXMgViBSMyAvIDQuMyBCU0Qgc3R5bGUKKyAgbW9kZW0gY29udHJvbCwgbmFtZWx5IHRoZSBUSU9D TUdFVCBpb2N0bC4KKyovCisKKyNpZmRlZiBCU0Q0MworI2RlZmluZSBLX01ETUNUTAorI2VuZGlm IC8qIEJTRDQzICovCisKKyNpZmRlZiBTVU5PUzQKKyNkZWZpbmUgS19NRE1DVEwKKyNlbmRpZiAv KiBTVU5PUzQgKi8KKworLyoKKyAgU0NPIE9wZW5TZXJ2ZXIgUjUuMC40LiAgVGhlIFRJT0NNR0VU IGRlZmluaXRpb24gaXMgaGFyZHdpcmVkIGluIGJlY2F1c2UgaXQKKyAgaXMgc2tpcHBlZCBpbiB0 ZXJtaW8uaCB3aGVuIF9QT1NJWF9TT1VSQ0UgaXMgZGVmaW5lZC4gIEJ1dCBfUE9TSVhfU09VUkNF CisgIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBnZXQgdGhlIGhpZ2ggc2VyaWFsIHNwZWVk cyB0aGF0IGFyZSBuZXcgdG8KKyAgNS4wLjQuICBIb3dldmVyLCB0aGUgcmVndWxhciBTQ08gZHJp dmVycyBkbyBub3QgaW1wbGVtZW50IFRJT0NNR0VULCBzbyB0aGUKKyAgaW9jdGwoKSByZXR1cm5z IC0xIHdpdGggZXJybm8gMjIgKGludmFsaWQgZnVuY3Rpb24pLiAgQnV0IHRoaXJkLXBhcnR5Cisg IGRyaXZlcnMsIGUuZy4gZm9yIERpZ2lib2FyZCwgZG8gaW1wbGVtZW50IGl0LCBhbmQgc28gaXQg c2hvdWxkIHdvcmsgb24gcG9ydHMKKyAgZHJpdmVuIGJ5IHRob3NlIGRyaXZlcnMuCisqLworI2lm ZGVmIFNDT19PU1I1MDQKKyNpZm5kZWYgVElPQ01HRVQKKyNkZWZpbmUgVElPQ01HRVQgKCgndCc8 PDgpfDI5KQorI2VuZGlmIC8qIFRJT0NNR0VUICovCisjZW5kaWYgLyogU0NPX09TUjUwNCAqLwor CisjaWZkZWYgQ0tfU0NPVjUKKy8qIEJlY2F1c2UgUE9TSVggc3RyaWN0bmVzcyBpbiA8c3lzL3Rl cm1pby5oPiB3b24ndCBsZXQgdXMgc2VlIHRoZXNlLiAqLworI2lmbmRlZiBUSU9DTV9EVFIKKyNk ZWZpbmUgVElPQ01fRFRSCTB4MDAwMgkJLyogZGF0YSB0ZXJtaW5hbCByZWFkeSAqLworI2RlZmlu ZSBUSU9DTV9SVFMJMHgwMDA0CQkvKiByZXF1ZXN0IHRvIHNlbmQgKi8KKyNkZWZpbmUgVElPQ01f Q1RTCTB4MDAyMAkJLyogY2xlYXIgdG8gc2VuZCAqLworI2RlZmluZSBUSU9DTV9DQVIJMHgwMDQw CQkvKiBjYXJyaWVyIGRldGVjdCAqLworI2RlZmluZSBUSU9DTV9STkcJMHgwMDgwCQkvKiByaW5n ICovCisjZGVmaW5lIFRJT0NNX0RTUgkweDAxMDAJCS8qIGRhdGEgc2V0IHJlYWR5ICovCisjZGVm aW5lIFRJT0NNX0NECVRJT0NNX0NBUgorI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKKyNlbmRp ZiAvKiBUSU9DTV9EVFIgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworCisjaWZkZWYgUU5YCisj ZGVmaW5lIEtfTURNQ1RMCisjZWxzZQorI2lmZGVmIFRJT0NNR0VUCisjZGVmaW5lIEtfTURNQ1RM CisjZW5kaWYgLyogVElPQ01HRVQgKi8KKyNlbmRpZiAvKiBRTlggKi8KKy8qCisgICJBIHNlcmlh bCBjb21tdW5pY2F0aW9uIHByb2dyYW0gdGhhdCBjYW4ndCByZWFkIG1vZGVtIHNpZ25hbHMKKyAg IGlzIGxpa2UgYSBjYXIgd2l0aG91dCB3aW5kb3dzLiIKKyovCitpbnQKK3R0Z21kbSgpIHsKKwor I2lmZGVmIFFOWAorI2luY2x1ZGUgPHN5cy9xaW9jdGwuaD4KKworICAgIHVuc2lnbmVkIGxvbmcg eSwgbWRtYml0c1syXTsKKyAgICBpbnQgeCwgeiA9IDA7CisKKyAgICBpZiAoeGxvY2FsICYmIHR0 eWZkIDwgMCkKKyAgICAgIHJldHVybigtMSk7CisKKyNpZmRlZiBORVRDT05OCisgICAgaWYgKG5l dGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KKyNpZmRlZiBUTl9DT01QT1JUCisg ICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7CisJICAgIGdvdHNpZ3MgPSAxOworCSAgICByZXR1 cm4odG5nbWRtKCkpOworCX0gZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKwkgIHJldHVy bigtMik7CQkJLyogTm8gbW9kZW0gc2lnbmFscyAqLworICAgIH0KKyNlbmRpZiAvKiBORVRDT05O ICovCisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOworI2VuZGlm IC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsK KyNlbmRpZiAvKiBORVRQVFkgKi8KKworICAgIG1kbWJpdHNbMF0gPSAwTDsKKyAgICBtZG1iaXRz WzFdID0gMEw7CisvKgorICogRnJvbSA8c3lzL3Fpb2N0bC5oPjoKKyAqCisgKiBTRVJJQUwgZGV2 aWNlcyAgIChhbGwgRGV2LnNlciB2ZXJzaW9ucykKKyAqIDAgOiBEVFIgICAgICAgICAgIDggPSBE YXRhIEJpdHMgMCAgMTYgLSByZXNlcnZlZCAgICAgMjQgLSByZXNlcnZlZAorICogMSA6IFJUUyAg ICAgICAgICAgOSA9IERhdGEgQml0cyAxICAxNyAtIHJlc2VydmVkICAgICAyNSAtIHJlc2VydmVk CisgKiAyID0gT3V0IDEgICAgICAgIDEwID0gU3RvcCBCaXRzICAgIDE4IC0gcmVzZXJ2ZWQgICAg IDI2IC0gcmVzZXJ2ZWQKKyAqIDMgPSBJbnQgRW5hYmxlICAgMTEgPSBQYXIgRW5hYmxlICAgMTkg LSByZXNlcnZlZCAgICAgMjcgLSByZXNlcnZlZAorICogNCA9IExvb3AgICAgICAgICAxMiA9IFBh ciBFdmVuICAgICAyMCA9IENUUyAgICAgICAgICAyOCAtIHJlc2VydmVkCisgKiA1IC0gcmVzZXJ2 ZWQgICAgIDEzID0gUGFyIFN0aWNrICAgIDIxID0gRFNSICAgICAgICAgIDI5IC0gcmVzZXJ2ZWQK KyAqIDYgLSByZXNlcnZlZCAgICAgMTQgOiBCcmVhayAgICAgICAgMjIgPSBSSSAgICAgICAgICAg MzAgLSByZXNlcnZlZAorICogNyAtIHJlc2VydmVkICAgICAxNSA9IDAgICAgICAgICAgICAyMyA9 IENEICAgICAgICAgICAzMSAtIHJlc2VydmVkCisgKi8KKyAgICBlcnJubyA9IDA7CisgICAgeCA9 IHFueF9pb2N0bCh0dHlmZCwgUUNUTF9ERVZfQ1RMLCAmbWRtYml0c1swXSwgOCwgJm1kbWJpdHNb MF0sIDQpOworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBxbnhfaW9jdGwiLCIiLHgpOworICAgIGRl YnVnKEYxMDEsInR0Z21kbSBxbnhfaW9jdGwgZXJybm8iLCIiLGVycm5vKTsKKyAgICBpZiAoIXgp IHsKKwlkZWJ1ZyhGMTAxLCJ0dGdtZG0gcW54X2lvY3RsIG1kbWJpdHNbMF0iLCIiLG1kbWJpdHNb MF0pOworCWRlYnVnKEYxMDEsInR0Z21kbSBxbnhfaW9jdGwgbWRtYml0c1sxXSIsIiIsbWRtYml0 c1sxXSk7CisJeSA9IG1kbWJpdHNbMF07CisJaWYgKHkgJiAweDAwMDAwMUwpIHogfD0gQk1fRFRS OwkvKiBCaXQgIDAgKi8KKwlpZiAoeSAmIDB4MDAwMDAyTCkgeiB8PSBCTV9SVFM7CS8qIEJpdCAg MSAqLworCWlmICh5ICYgMHgxMDAwMDBMKSB6IHw9IEJNX0NUUzsJLyogQml0IDIwICovCisJaWYg KHkgJiAweDIwMDAwMEwpIHogfD0gQk1fRFNSOwkvKiBCaXQgMjEgKi8KKwlpZiAoeSAmIDB4NDAw MDAwTCkgeiB8PSBCTV9STkc7CS8qIEJpdCAyMiAqLworCWlmICh5ICYgMHg4MDAwMDBMKSB6IHw9 IEJNX0RDRDsJLyogQml0IDIzICovCisJZGVidWcoRjEwMSwidHRnbWRtIHFueCByZXN1bHQiLCIi LHopOworCWRlYnVnKEYxMTAsInR0Z21kbSBxbnggQ0QgPSAiLCh6ICYgQk1fRENEKSA/ICJPbiIg OiAiT2ZmIiwgMCk7CisJZ290c2lncyA9IDE7CisJcmV0dXJuKHopOworICAgIH0gZWxzZSByZXR1 cm4oLTEpOworI2Vsc2UgLyogUU5YICovCisjaWZkZWYgSFBVWAkJCQkvKiBIUFVYIGhhcyBpdHMg b3duIHdheSAqLworICAgIGludCB4LCB6OworCisjaWZkZWYgSFBVWDEwCQkJCS8qIE1vZGVtIGZs YWcgd29yZCAqLworICAgIG1mbGFnIHk7CQkJCS8qIG1mbGFnIHR5cGVkZWYnZCBpbiA8c3lzL21v ZGVtLmg+ICovCisjZWxzZQorI2lmZGVmIEhQVVg5CisgICAgbWZsYWcgeTsKKyNlbHNlCisjaWZk ZWYgSFBVWDgKKyAgICBtZmxhZyB5OworI2Vsc2UKKyAgICB1bnNpZ25lZCBsb25nIHk7CQkJLyog Tm90IHN1cmUgYWJvdXQgcHJlLTguMC4uLiAqLworI2VuZGlmIC8qIEhQVVg4ICovCisjZW5kaWYg LyogSFBVWDkgKi8KKyNlbmRpZiAvKiBIUFVYMTAgKi8KKworICAgIGlmICh4bG9jYWwgJiYgdHR5 ZmQgPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKworI2lmZGVmIE5FVENPTk4KKyAgICBpZiAobmV0 Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLworI2lmZGVmIFROX0NPTVBPUlQKKyAg ICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKwkgICAgZ290c2lncyA9IDE7CisJICAgIHJldHVy bih0bmdtZG0oKSk7CisJfSBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCSAgcmV0dXJu KC0yKTsJCQkvKiBObyBtb2RlbSBzaWduYWxzICovCisgICAgfQorI2VuZGlmIC8qIE5FVENPTk4g Ki8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigtMik7CisjZW5kaWYg LyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oLTIpOwor I2VuZGlmIC8qIE5FVFBUWSAqLworCisgICAgaWYgKHhsb2NhbCkJCQkJLyogR2V0IG1vZGVtIHNp Z25hbHMgKi8KKyAgICAgIHggPSBpb2N0bCh0dHlmZCxNQ0dFVEEsJnkpOworICAgIGVsc2UKKyAg ICAgIHggPSBpb2N0bCgwLE1DR0VUQSwmeSk7CisgICAgaWYgKHggPCAwKSByZXR1cm4oLTEpOwor ICAgIGRlYnVnKEYxMDEsInR0Z21kbSIsIiIseSk7CisKKyAgICB6ID0gMDsJCQkJLyogSW5pdGlh bGl6ZSByZXR1cm4gdmFsdWUgKi8KKworLyogTm93IHNldCBiaXRzIGZvciBlYWNoIG1vZGVtIHNp Z25hbCB0aGF0IGlzIHJlcG9ydGVkIHRvIGJlIG9uLiAqLworCisjaWZkZWYgTUNUUworICAgIC8q IENsZWFyIFRvIFNlbmQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBDVFMiLCIiLHkg JiBNQ1RTKTsKKyAgICBpZiAoeSAmIE1DVFMpIHogfD0gQk1fQ1RTOworI2VuZGlmCisjaWZkZWYg TURTUgorICAgIC8qIERhdGEgU2V0IFJlYWR5ICovCisgICAgZGVidWcoRjEwMSwidHRnbWRtIEhQ VVggRFNSIiwiIix5ICYgTURTUik7CisgICAgaWYgKHkgJiBNRFNSKSB6IHw9IEJNX0RTUjsKKyNl bmRpZgorI2lmZGVmIE1EQ0QKKyAgICAvKiBDYXJyaWVyICovCisgICAgZGVidWcoRjEwMSwidHRn bWRtIEhQVVggRENEIiwiIix5ICYgTURDRCk7CisgICAgaWYgKHkgJiBNRENEKSB6IHw9IEJNX0RD RDsKKyNlbmRpZgorI2lmZGVmIE1SSQorICAgIC8qIFJpbmcgSW5kaWNhdGUgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJ0dGdtZG0gSFBVWCBSSSIsIiIseSAmIE1SSSk7CisgICAgaWYgKHkgJiBNUkkpIHog fD0gQk1fUk5HOworI2VuZGlmCisjaWZkZWYgTURUUgorICAgIC8qIERhdGEgVGVybWluYWwgUmVh ZHkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBEVFIiLCIiLHkgJiBNRFRSKTsKKyAg ICBpZiAoeSAmIE1EVFIpIHogfD0gQk1fRFRSOworI2VuZGlmCisjaWZkZWYgTVJUUworICAgIC8q IFJlcXVlc3QgVG8gU2VuZCAqLworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIFJUUyIsIiIs eSAmIE1SVFMpOworICAgIGlmICh5ICYgTVJUUykgeiB8PSBCTV9SVFM7CisjZW5kaWYKKyAgICBn b3RzaWdzID0gMTsKKyAgICByZXR1cm4oeik7CisKKyNlbHNlIC8qICEgSFBVWCAqLworCisjaWZk ZWYgS19NRE1DVEwKKy8qCisgIE5vdGUsIFRJT0NNR0VUIG1pZ2h0IGFscmVhZHkgaGF2ZSBiZWVu IGRlZmluZWQgaW4gPHN5cy9pb2N0bC5oPiBvciBlbHNld2hlcmUuCisgIElmIG5vdCwgd2UgdHJ5 IGluY2x1ZGluZyA8c3lzL3R0eWNvbS5oPiAtLSBpZiB0aGlzIGJsb3dzIHVwIHRoZW4gbW9yZSBp ZmRlZnMKKyAgYXJlIG5lZWRlZC4KKyovCisjaWZuZGVmIFRJT0NNR0VUCisjaW5jbHVkZSA8c3lz L3R0eWNvbS5oPgorI2VuZGlmIC8qIFRJT0NNR0VUICovCisKKyAgICBpbnQgeCwgeSwgejsKKwor ICAgIGRlYnVnKEYxMDAsInR0Z21kbSBLX01ETUNUTCBkZWZpbmVkIiwiIiwwKTsKKworI2lmZGVm IE5FVENPTk4KKyAgICBpZiAobmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLwor I2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKwkgICAgZ290 c2lncyA9IDE7CisJICAgIHJldHVybih0bmdtZG0oKSk7CisJfSBlbHNlCisjZW5kaWYgLyogVE5f Q09NUE9SVCAqLworCSAgcmV0dXJuKC0yKTsJCQkvKiBObyBtb2RlbSBzaWduYWxzICovCisgICAg fQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUp IHJldHVybigtMik7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYg KHR0cHR5KSByZXR1cm4oLTIpOworI2VuZGlmIC8qIE5FVFBUWSAqLworCisgICAgaWYgKHhsb2Nh bCAmJiB0dHlmZCA8IDApCisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYgKHhsb2NhbCkKKyAg ICAgIHggPSBpb2N0bCh0dHlmZCxUSU9DTUdFVCwmeSk7CS8qIEdldCBtb2RlbSBzaWduYWxzLiAq LworICAgIGVsc2UKKyAgICAgIHggPSBpb2N0bCgwLFRJT0NNR0VULCZ5KTsKKyAgICBkZWJ1ZyhG MTAxLCJ0dGdtZG0gVElPQ01HRVQgaW9jdGwiLCIiLHgpOworICAgIGlmICh4IDwgMCkgeworCWRl YnVnKEYxMDEsInR0Z21kbSBlcnJubyIsIiIsZXJybm8pOworCXJldHVybigtMSk7CisgICAgfQor ICAgIGRlYnVnKEYxMDEsInR0Z21kbSBiaXRzIiwiIix5KTsKKworICAgIHogPSAwOwkJCQkvKiBJ bml0aWFsaXplIHJldHVybiB2YWx1ZS4gKi8KKyNpZmRlZiBUSU9DTV9DVFMKKyAgICAvKiBDbGVh ciBUbyBTZW5kICovCisgICAgaWYgKHkgJiBUSU9DTV9DVFMpIHogfD0gQk1fQ1RTOworICAgIGRl YnVnKEYxMDEsInR0Z21kbSBUSU9DTV9DVFMgZGVmaW5lZCIsIiIsVElPQ01fQ1RTKTsgCisjZWxz ZQorICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9DVFMgbm90IGRlZmluZWQiLCIiLDApOwor I2VuZGlmCisjaWZkZWYgVElPQ01fRFNSCisgICAgLyogRGF0YSBTZXQgUmVhZHkgKi8KKyAgICBp ZiAoeSAmIFRJT0NNX0RTUikgeiB8PSBCTV9EU1I7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIFRJ T0NNX0RTUiBkZWZpbmVkIiwiIixUSU9DTV9EU1IpOyAKKyNlbHNlCisgICAgZGVidWcoRjEwMCwi dHRnbWRtIFRJT0NNX0RTUiBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYKKyNpZmRlZiBUSU9D TV9DQVIKKyAgICAvKiBDYXJyaWVyICovCisgICAgaWYgKHkgJiBUSU9DTV9DQVIpIHogfD0gQk1f RENEOworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9DTV9DQVIgZGVmaW5lZCIsIiIsVElPQ01f Q0FSKTsgCisjZWxzZQorICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9DQVIgbm90IGRlZmlu ZWQiLCIiLDApOworI2VuZGlmCisjaWZkZWYgVElPQ01fUk5HCisgICAgLyogUmluZyBJbmRpY2F0 ZSAqLworICAgIGlmICh5ICYgVElPQ01fUk5HKSB6IHw9IEJNX1JORzsKKyAgICBkZWJ1ZyhGMTAx LCJ0dGdtZG0gVElPQ01fUk5HIGRlZmluZWQiLCIiLFRJT0NNX1JORyk7IAorI2Vsc2UKKyAgICBk ZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01fUk5HIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZgor I2lmZGVmIFRJT0NNX0RUUgorICAgIC8qIERhdGEgVGVybWluYWwgUmVhZHkgKi8KKyAgICBpZiAo eSAmIFRJT0NNX0RUUikgeiB8PSBCTV9EVFI7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NN X0RUUiBkZWZpbmVkIiwiIixUSU9DTV9EVFIpOyAKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRn bWRtIFRJT0NNX0RUUiBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYKKyNpZmRlZiBUSU9DTV9S VFMKKyAgICAvKiBSZXF1ZXN0IFRvIFNlbmQgKi8KKyAgICBpZiAoeSAmIFRJT0NNX1JUUykgeiB8 PSBCTV9SVFM7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX1JUUyBkZWZpbmVkIiwiIixU SU9DTV9SVFMpOyAKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRnbWRtIFRJT0NNX1JUUyBub3Qg ZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYKKyAgICBnb3RzaWdzID0gMTsKKyAgICByZXR1cm4oeik7 CisKKyNlbHNlIC8qICFLX01ETUNUTCBjYXRjaC1BbGwgKi8KKworICAgIGRlYnVnKEYxMDAsInR0 Z21kbSBLX01ETUNUTCBub3QgZGVmaW5lZCIsIiIsMCk7CisjaWZkZWYgVElPQ01HRVQKKyAgICBk ZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01HRVQgZGVmaW5lZCIsIiIsMCk7CisjZWxzZQorICAgIGRl YnVnKEYxMDAsInR0Z21kbSBUSU9DTUdFVCBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyog VElPQ01HRVQgKi8KKyNpZmRlZiBfU1ZJRDMKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gX1NWSUQz IGRlZmluZWQiLCIiLDApOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gX1NWSUQzIG5v dCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBfU1ZJRDMgKi8KKworI2lmZGVmIE5FVENPTk4K KyAgICBpZiAobmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAqLworI2lmZGVmIFRO X0NPTVBPUlQKKyAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsKKwkgICAgZ290c2lncyA9IDE7 CisJICAgIHJldHVybih0bmdtZG0oKSk7CisJfSBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAq LworCSAgcmV0dXJuKC0yKTsJCQkvKiBObyBtb2RlbSBzaWduYWxzICovCisgICAgfQorI2VuZGlm IC8qIE5FVENPTk4gKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigt Mik7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSBy ZXR1cm4oLTIpOworI2VuZGlmIC8qIE5FVFBUWSAqLworCisgICAgcmV0dXJuKC0zKTsJCQkJLyog U29ycnksIEkgZG9uJ3Qga25vdyBob3cuLi4gKi8KKworI2VuZGlmIC8qIEtfTURNQ1RMICovCisj ZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIFFOWCAqLworfQorCisvKiAgUCBTIFUgUyBQIEUg TiBEICAtLSAgUHV0IHRoaXMgcHJvY2VzcyBpbiB0aGUgYmFja2dyb3VuZC4gICovCisKKy8qCisg IENhbGwgd2l0aCBmbGFnIG5vbnplcm8gaWYgc3VzcGVuZGluZyBpcyBhbGxvd2VkLCB6ZXJvIGlm IG5vdCBhbGxvd2VkLgorICBSZXR1cm5zIDAgb24gYXBwYXJlbnQgc3VjY2VzcywgLTEgb24gZmFp bHVyZSAoZmxhZyB3YXMgemVybywgb3IKKyAga2lsbCgpIHJldHVybmVkIGFuIGVycm9yIGNvZGUu CisqLworaW50Citwc3VzcGVuZChmbGFnKSBpbnQgZmxhZzsgeworCisjaWZkZWYgUlRVCisgICAg ZXh0ZXJuIGludCBydHVfYnVnOworI2VuZGlmIC8qIFJUVSAqLworCisgICAgaWYgKGZsYWcgPT0g MCkgcmV0dXJuKC0xKTsKKworI2lmZGVmIE5PSkMKKyAgICByZXR1cm4oLTEpOworI2Vsc2UKKyNp ZmRlZiBTSUdUU1RQCisvKgorICBUaGUgYmlnIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBqb2Ig Y29udHJvbCBpcyAqcmVhbGx5KiBzdXBwb3J0ZWQuCisgIFRoZXJlJ3Mgbm8gd2F5IEtlcm1pdCBj YW4ga25vdyBmb3Igc3VyZS4gIFRoZSBmYWN0IHRoYXQgU0lHVFNUUCBpcworICBkZWZpbmVkIGRv ZXMgbm90IGd1YXJhbnRlZSB0aGUgVW5peCBrZXJuZWwgc3VwcG9ydHMgaXQsIGFuZCB0aGUgZmFj dAorICB0aGF0IHRoZSBVbml4IGtlcm5lbCBzdXBwb3J0cyBpdCBkb2Vzbid0IGd1YXJhbnRlZSB0 aGF0IHRoZSB1c2VyJ3MKKyAgc2hlbGwgKG9yIG90aGVyIHByb2Nlc3MgdGhhdCBpbnZva2VkIEtl cm1pdCkgc3VwcG9ydHMgaXQuCisqLworI2lmZGVmIFJUVQorICAgIHJ0dV9idWcgPSAxOworI2Vu ZGlmIC8qIFJUVSAqLworICAgIGlmIChraWxsKDAsU0lHU1RPUCkgPCAwCisjaWZkZWYgTUlQUwor LyogTGV0J3MgdHJ5IHRoaXMgZm9yIE1JUFMgdG9vLiAqLworCSYmIGtpbGwoZ2V0cGlkKCksU0lH U1RPUCkgPCAwCisjZW5kaWYgLyogTUlQUyAqLworCSkgewkJCQkvKiBJZiBqb2IgY29udHJvbCwg c3VzcGVuZCB0aGUgam9iICovCisJcGVycm9yKCJzdXNwZW5kIik7CisJZGVidWcoRjEwMSwicHN1 c3BlbmQgZXJyb3IiLCIiLGVycm5vKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhG MTAwLCJwc3VzcGVuZCBvayIsIiIsMCk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAgICByZXR1 cm4oLTEpOworI2VuZGlmIC8qIFNJR1RTVFAgKi8KKyNlbmRpZiAvKiBOT0pDICovCit9CisKKy8q CisgIHNldHVpZCBwYWNrYWdlLCBieSBLcmlzdG9mZmVyIEVyaWtzc29uLCB3aXRoIGNvbnRyaWJ1 dGlvbnMgZnJvbSBEZWFuCisgIExvbmcgYW5kIGZkYy4KKyovCisKKy8qIFRoZSBmb2xsb3dpbmcg aXMgZm9yIFNDTyB3aGVuIENLX0FOU0lMSUJTIGlzIGRlZmluZWQuLi4gKi8KKyNpZmRlZiBNX1VO SVgKKyNpZmRlZiBDS19BTlNJTElCUworI2lmbmRlZiBOT0dFVElEX1BST1RPUworI2RlZmluZSBO T0dFVElEX1BST1RPUworI2VuZGlmIC8qIE5PR0VUSURfUFJPVE9TICovCisjZW5kaWYgLyogQ0tf QU5TSUxJQlMgKi8KKyNlbmRpZiAvKiBNX1VOSVggKi8KKworI2lmbmRlZiBfUE9TSVhfU09VUkNF CisjaWZuZGVmIFNVTk9TNAorI2lmbmRlZiBORVhUCisjaWZuZGVmIFBTMkFJWDEwCisjaWZuZGVm IHNlcXVlbnQKKyNpZm5kZWYgSFBVWDkKKyNpZm5kZWYgSFBVWDEwCisjaWZuZGVmIENPSEVSRU5U CisjaWZuZGVmIE5PR0VUSURfUFJPVE9TCitfUFJPVE9UWVAoIFVJRF9UIGdldHVpZCwgKHZvaWQp ICk7CitfUFJPVE9UWVAoIFVJRF9UIGdldGV1aWQsICh2b2lkKSApOworX1BST1RPVFlQKCBVSURf VCBnZXRyZXVpZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFVJRF9UIGdldGdpZCwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIFVJRF9UIGdldGVnaWQsICh2b2lkKSApOworX1BST1RPVFlQKCBVSURfVCBn ZXRyZWdpZCwgKHZvaWQpICk7CisjZW5kaWYgLyogTk9HRVRJRF9QUk9UT1MgKi8KKyNlbHNlCitf UFJPVE9UWVAoIFVJRF9UIGdldHJldWlkLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVUlEX1QgZ2V0 cmVnaWQsICh2b2lkKSApOworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogSFBVWDEw ICovCisjZW5kaWYgLyogSFBVWDkgKi8KKyNlbmRpZiAvKiBzZXF1ZW50ICovCisjZW5kaWYgLyog UFMyQUlYMTAgKi8KKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5k aWYgLyogX1BPU0lYX1NPVVJDRSAqLworCisvKgorU3ViamVjdDogU2V0LXVzZXItaWQKK1RvOiBm ZGNAd2F0c3VuLmNjLmNvbHVtYmlhLmVkdSAoRnJhbmsgZGEgQ3J1eikKK0RhdGU6IFNhdCwgMjEg QXByIDkwIDQ6NDg6MjUgTUVTCitGcm9tOiBLcmlzdG9mZmVyIEVyaWtzc29uIDxza2VAcGttYWIu c2U+CisKK1RoaXMgaXMgYSBzZXQgb2YgZnVuY3Rpb25zIHRvIGJlIHVzZWQgaW4gcHJvZ3JhbXMg dGhhdCBtYXkgYmUgcnVuIHNldC11c2VyLWlkCithbmQvb3Igc2V0LWdyb3VwLWlkLiBUaGV5IGhh bmRsZSBib3RoIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9ncmFtIGlzIG5vdCBydW4KK3dpdGggc3Vj aCBwcml2aWxlZ2VzIChub3RoaW5nIHNwZWNpYWwgaGFwcGVucyB0aGVuKSwgYW5kIHRoZSBjYXNl IHdoZXJlIG9uZQorb3IgYm90aCBvZiB0aGVzZSBzZXQtaWQgbW9kZXMgYXJlIHVzZWQuICBUaGUg cHJvZ3JhbSBpcyBtYWRlIHRvIHJ1biB3aXRoIHRoZQordXNlcidzIHJlYWwgdXNlciBhbmQgZ3Jv dXAgaWRzIG1vc3Qgb2YgdGhlIHRpbWUsIGV4Y2VwdCBmb3Igd2hlbiBtb3JlCitwcml2aWxlZ2Vz IGFyZSBuZWVkZWQuICBEb24ndCBzZXQtdXNlci1pZCB0byAicm9vdCIuCisKK1RoaXMgd29ya3Mg b24gU3lzdGVtIFYgYW5kIFBPU0lYLiAgSW4gQlNELCBpdCBkZXBlbmRzIG9uIHRoZQorInNhdmVk LXNldC11c2VyLWlkIiBmZWF0dXJlLgorKi8KKworI2RlZmluZSBVSURfUk9PVCAwCQkJLyogUm9v dCB1c2VyIGFuZCBncm91cCBpZHMgKi8KKyNkZWZpbmUgR0lEX1JPT1QgMAorCisvKgorICBUaGUg Zm9sbG93aW5nIGNvZGUgZGVmaW5lcyB0aGUgc3ltYm9sIFNFVEVVSUQgZm9yIFVOSVggc3lzdGVt cyBiYXNlZAorICBvbiBCU0Q0LjQgKGVpdGhlciAtRW5jdW1iZXJlZCBvciAtTGl0ZSkuICBUaGlz IHByb2dyYW0gd2lsbCB0aGVuIHVzZQorICBzZXRldWlkKCkgYW5kIHNldGVnaWQoKSBpbnN0ZWFk IG9mIHNldHVpZCgpIGFuZCBzZXRnaWQoKSwgd2hpY2ggc3RpbGwKKyAgZG9uJ3QgYWxsb3cgYXJi aXRyYXJ5IHN3aXRjaGluZy4gIEl0IGFsc28gYXZvaWRzIHNldHJldWlkKCkgYW5kCisgIHNldHJl Z2lkKCksIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiBCU0Q0LjQgZm9yIGNvbXBhdGliaWxpdHkgb25s eSwgYXJlCisgIGluc2VjdXJlLCBhbmQgcHJpbnQgd2FybmluZ3MgdG8gc3RkZXJyIHVuZGVyIGF0 IGxlYXN0IG9uZSBzeXN0ZW0gKE5ldEJTRAorICAxLjApLiAgTm90ZSB0aGF0IFBPU0lYIHN5c3Rl bXMgc2hvdWxkIHN0aWxsIHVzZSBzZXR1aWQoKSBhbmQgc2V0Z2lkKCk7CisgIHRoZSBzZXRldWlk KCkgYW5kIHNldGVnaWQoKSBmdW5jdGlvbnMgYXJlIEJTRDQuNCBleHRlbnNpb25zIHRvIHRoZQor ICBQT1NJWCBtb2RlbC4gIE1pa2UgTG9uZyA8bWlrZS5sb25nQGFuYWxvZy5jb20+LCA4Lzk0Lgor Ki8KKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBTRVRFVUlECisjZW5kaWYgLyogQlNENDQgKi8KKwor LyoKKyAgVGhlIGZvbGxvd2luZyBjb25zdHJ1Y3Rpb24gYXV0b21hdGljYWxseSBkZWZpbmVzIHRo ZSBzeW1ib2wgU0VUUkVVSUQgZm9yCisgIFVOSVggdmVyc2lvbnMgYmFzZWQgb24gQmVya2VsZXkg VW5peCA0LjIgYW5kIDQuMy4gIElmIHRoaXMgc3ltYm9sIGlzCisgIGRlZmluZWQsIHRoZW4gdGhp cyBwcm9ncmFtIHdpbGwgdXNlIGdldHJldWlkKCkgYW5kIGdldHJlZ2lkKCkgY2FsbHMgaW4KKyAg cHJlZmVyZW5jZSB0byBnZXR1aWQoKSBhbmQgZ2V0Z2lkKCksIHdoaWNoIGluIEJlcmtlbGV5LWJh c2VkIFVuaXhlcyBkbworICBub3QgYWxsb3cgYXJiaXRyYXJ5IHN3aXRjaGluZyBiYWNrIGFuZCBm b3J0aCBvZiByZWFsICYgZWZmZWN0aXZlIHVpZC4KKyAgVGhpcyBjb25zdHJ1Y3Rpb24gYWxzbyBh bGxvd3MgLURTRVRSRVVJRCB0byBiZSBwdXQgb24gdGhlIGNjIGNvbW1hbmQgbGluZQorICBmb3Ig YW55IHN5c3RlbSB0aGF0IGhhcyBhbmQgd2FudHMgdG8gdXNlIHNldHJlW3VnXWlkKCkuICBJdCBh bHNvIHByZXZlbnRzCisgIGF1dG9tYXRpYyBkZWZpbml0aW9uIG9mIFNFVFJFVUlEIGlmIC1ETk9T RVRSRVUgaXMgaW5jbHVkZWQgb24gdGhlIGNjCisgIGNvbW1hbmQgbGluZSAob3Igb3RoZXJ3aXNl IGRlZmluZWQpLgorKi8KKyNpZmRlZiBGVDE4CQkJCS8qIE5vbmUgb2YgdGhpcyBmb3IgRm9ydHVu ZS4gKi8KKyNkZWZpbmUgTk9TRVRSRVUKKyNlbmRpZiAvKiBGVDE4ICovCisKKyNpZmRlZiBBTllC U0QKKyNpZm5kZWYgQlNEMjkKKyNpZm5kZWYgQlNENDEKKyNpZm5kZWYgU0VUUkVVSUQKKyNpZm5k ZWYgTk9TRVRSRVUKKyNpZm5kZWYgU0VURVVJRAorI2RlZmluZSBTRVRSRVVJRAorI2VuZGlmIC8q IFNFVEVVSUQgKi8KKyNlbmRpZiAvKiBOT1NFVFJFVSAqLworI2VuZGlmIC8qIFNFVFJFVUlEICov CisjZW5kaWYgLyogIUJTRDQxICovCisjZW5kaWYgLyogIUJTRDI5ICovCisjZW5kaWYgLyogQU5Z QlNEICovCisKKy8qIFZhcmlhYmxlcyBmb3IgdXNlciBhbmQgZ3JvdXAgSURzLiAqLworCitzdGF0 aWMgVUlEX1QgcmVhbHVpZCA9IChVSURfVCkgLTEsIHByaXZ1aWQgPSAoVUlEX1QpIC0xOworc3Rh dGljIEdJRF9UIHJlYWxnaWQgPSAoR0lEX1QpIC0xLCBwcml2Z2lkID0gKEdJRF9UKSAtMTsKKwor CisvKiBQIFIgSSBWIF8gSSBOIEkgIC0tICBJbml0aWFsaXplIHByaXZpbGVnZXMgcGFja2FnZSAg Ki8KKworLyogQ2FsbGVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGluIGEgc2V0LXVpZCBvciBzZXQt Z2lkIHByb2dyYW0gdG8gc3RvcmUgdGhlCisgKiBzZXQtdG8gdWlkIGFuZC9vciBnaWQgYW5kIHN0 ZXAgZG93biB0byB0aGUgdXNlcnMgcmVhbCB1aWQgYW5kIGdpZC4gVGhlCisgKiBzdG9yZWQgaWQn cyBjYW4gYmUgdGVtcG9yYXJpbHkgcmVzdG9yZWQgKGFsbG93ZWQgaW4gU3lzdGVtIFYpIGR1cmlu ZworICogb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUgdGhlIHByaXZpbGVnZS4gIE1vc3Qgb2YgdGhl IHRpbWUsIHRoZSBwcm9ncmFtCisgKiBzaG91bGQgZXhlY3V0ZSBpbiB1bnByaXZpbGlnZWQgc3Rh dGUsIHRvIG5vdCBpbXBvc2UgYW55IHNlY3VyaXR5IHRocmVhdC4KKyAqCisgKiBOb3RlOiBEb24n dCBmb3JnZXQgdGhhdCBhY2Nlc3MoKSBhbHdheXMgdXNlcyB0aGUgcmVhbCBpZDpzIHRvIGRldGVy bWluZQorICogZmlsZSBhY2Nlc3MsIGV2ZW4gd2l0aCBwcml2aWxlZ2VzIHJlc3RvcmVkLgorICoK KyAqIFJldHVybnMgYW4gZXJyb3IgbWFzaywgd2l0aCBlcnJvciB2YWx1ZXMgb3I6ZWQgdG9nZXRo ZXI6CisgKiAgIDEgaWYgc2V0dWlkKCkgZmFpbHMsCisgKiAgIDIgaWYgc2V0Z2lkKCkgZmFpbHMs IGFuZAorICogICA0IGlmIHRoZSBwcm9ncmFtIGlzIHNldC11c2VyLWlkIHRvICJyb290Iiwgd2hp Y2ggY2FuJ3QgYmUgaGFuZGxlZC4KKyAqCisgKiBPbmx5IHRoZSByZXR1cm4gdmFsdWUgMCBpbmRp Y2F0ZXMgcmVhbCBzdWNjZXNzLiBJbiBjYXNlIG9mIGZhaWx1cmUsCisgKiB0aG9zZSBwcml2aWxl Z2VzIHRoYXQgY291bGQgYmUgcmVkdWNlZCBoYXZlIGJlZW4sIGF0IGxlYXN0LCBidXQgdGhlCisg KiBwcm9ncmFtIHNob3VsZCBiZSBhYm9ydGVkIG5vbmUtdGhlLWxlc3MuCisgKgorICogQWxzbyBu b3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvIG5vdCBleHBlY3QgdGhlIHVpZCBvciBnaWQgdG8g Y2hhbmdlCisgKiB3aXRob3V0IHRoZWlyIGtub3dpbmcuIEl0IG1heSB3b3JrIGlmIGl0IGlzIG9u bHkgZG9uZSB0ZW1wb3JhcmlseSwgYnV0CisgKiB5b3UncmUgb24geW91ciBvd24uCisgKi8KK2lu dAorcHJpdl9pbmkoKSB7CisgICAgaW50IGVyciA9IDA7CisKKyNpZm5kZWYgSEFWRV9MT0NLREVW CisKKyAgICAvKiBTYXZlIHJlYWwgSUQ6cy4gKi8KKyAgICByZWFsdWlkID0gZ2V0dWlkKCk7Cisg ICAgcmVhbGdpZCA9IGdldGdpZCgpOworCisgICAgLyogU2F2ZSBjdXJyZW50IGVmZmVjdGl2ZSBJ RDpzLCB0aG9zZSBzZXQgdG8gYXQgcHJvZ3JhbSBleGVjLiAqLworICAgIHByaXZ1aWQgPSBnZXRl dWlkKCk7CisgICAgcHJpdmdpZCA9IGdldGVnaWQoKTsKKworICAgIC8qIElmIHJ1bm5pbmcgc2V0 LXVpZCwgZ28gZG93biB0byByZWFsIHVpZCwgb3RoZXJ3aXNlIHJlbWVtYmVyIHRoYXQKKyAgICAg KiBubyBwcml2aWxlZ2VkIHVpZCBpcyBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKiBFeGNlcHRp b25zOgorICAgICAqCisgICAgICogMSkgSWYgdGhlIHJlYWwgdWlkIGlzIGFscmVhZHkgInJvb3Qi IGFuZCB0aGUgc2V0LXVpZCB1aWQgKHRoZQorICAgICAqIGluaXRpYWwgZWZmZWN0aXZlIHVpZCkg aXMgbm90ICJyb290IiwgdGhlbiB3ZSB3b3VsZCBoYXZlIHRyb3VibGUKKyAgICAgKiBpZiB3ZSB3 ZW50ICJkb3duIiB0byAicm9vdCIgaGVyZSwgYW5kIHRoZW4gdGVtcG9yYXJpbHkgYmFjayB0byB0 aGUKKyAgICAgKiBzZXQtdWlkIHVpZCAobm90ICJyb290IikgYW5kIHRoZW4gYWdhaW4gdHJpZWQg dG8gYmVjb21lICJyb290Ii4gSQorICAgICAqIHRoaW5rIHRoZSAic2F2ZWQgc2V0LXVpZCIgaXMg bG9zdCB3aGVuIGNoYW5naW5nIHVpZCBmcm9tIGVmZmVjdGl2ZQorICAgICAqIHVpZCAicm9vdCIs IHdoaWNoIGNoYW5nZXMgYWxsIHVpZCwgbm90IG9ubHkgdGhlIGVmZmVjdGl2ZSB1aWQuIEJ1dAor ICAgICAqIGluIHRoaXMgc2l0dWF0aW9uLCB3ZSBjYW4gc2ltcGx5IGdvIHRvICJyb290IiBhbmQg c3RheSB0aGVyZSBhbGwKKyAgICAgKiB0aGUgdGltZS4gVGhhdCBzaG91bGQgZ2l2ZSBzdWZmaWNp ZW50IHByaXZpbGVnZSAodW5kZXJzdGF0ZW1lbnQhKSwKKyAgICAgKiBhbmQgZ2l2ZSB0aGUgcmln aHQgdWlkcyBmb3Igc3VicHJvY2Vzc2VzLgorICAgICAqCisgICAgICogMikgSWYgdGhlIHNldC11 aWQgKHRoZSBpbml0aWFsIGVmZmVjdGl2ZSB1aWQpIGlzICJyb290IiwgYW5kIHdlCisgICAgICog Y2hhbmdlIHVpZCB0byB0aGUgcmVhbCB1aWQsIHdlIGNhbid0IGNoYW5nZSBpdCBiYWNrIHRvICJy b290IiB3aGVuCisgICAgICogd2UgbmVlZCB0aGUgcHJpdmlsZWdlLCBmb3IgdGhlIHNhbWUgcmVh c29uIGFzIGluIDEpLiBUaHVzLCB3ZSBjYW4ndAorICAgICAqIGhhbmRsZSBwcm9ncmFtcyB0aGF0 IGFyZSBzZXQtdXNlci1pZCB0byAicm9vdCIgYXQgYWxsLiBUaGUgcHJvZ3JhbQorICAgICAqIHNo b3VsZCBiZSBzdG9wcGVkLiAgVXNlIHNvbWUgb3RoZXIgdWlkLiAgInJvb3QiIGlzIHByb2JhYmx5 IHRvbworICAgICAqIHByaXZpbGVnZWQgZm9yIHN1Y2ggdGhpbmdzLCBhbnl3YXkuIChUaGUgdWlk IGlzIHJldmVydGVkIHRvIHRoZQorICAgICAqIHJlYWwgdWlkIHVudGlsIHRlcm1pbmF0aW9uLikK KyAgICAgKgorICAgICAqIFRoZXNlIHR3byBleGNlcHRpb25zIGhhdmUgdGhlIGVmZmVjdCB0aGF0 IHRoZSAicm9vdCIgdWlkIHdpbGwgbmV2ZXIKKyAgICAgKiBiZSBvbmUgb2YgdGhlIHR3byB1aWRz IHRoYXQgYXJlIGJlaW5nIHN3aXRjaGVkIGJldHdlZW4sIHdoaWNoIGFsc28KKyAgICAgKiBtZWFu cyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGZvciBzdWNoIGNhc2VzIGluIHRoZSBzd2l0Y2hpbmcK KyAgICAgKiBmdW5jdGlvbnMuCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgZXhjZXB0aW9uIDEp IGlzIGhhbmRsZWQgYnkgdGhlc2Ugcm91dGluZXMgKGJ5IGNvbnN0YW50bHkKKyAgICAgKiBydW5u aW5nIHdpdGggdWlkICJyb290Iiwgd2hpbGUgZXhjZXB0aW9uIDIpIGlzIGEgc2VyaW91cyBlcnJv ciwgYW5kCisgICAgICogaXMgbm90IHByb3ZpZGVkIGZvciBhdCBhbGwgaW4gdGhlIHN3aXRjaGlu ZyBmdW5jdGlvbnMuCisgICAgICovCisgICAgaWYgKHJlYWx1aWQgPT0gcHJpdnVpZCkKKwlwcml2 dWlkID0gKFVJRF9UKSAtMTsJCS8qIE5vdCBydW5uaW5nIHNldC11c2VyLWlkLiAqLworCisgICAg LyogSWYgcnVubmluZyBzZXQtZ2lkLCBnbyBkb3duIHRvIHJlYWwgZ2lkLCBvdGhlcndpc2UgcmVt ZW1iZXIgdGhhdAorICAgICAqIG5vIHByaXZpbGVnZWQgZ2lkIGlzIGF2YWlsYWJsZS4KKyAgICAg KgorICAgICAqIFRoZXJlIGFyZSBubyBleGNlcHRpb24gbGlrZSB0aGVyZSBpcyBmb3IgdGhlIHVz ZXIgaWQsIHNpbmNlIHRoZXJlCisgICAgICogaXMgbm8gZ3JvdXAgaWQgdGhhdCBpcyBwcml2aWxl Z2VkIGluIHRoZSBtYW5uZXIgb2YgdWlkICJyb290Ii4KKyAgICAgKiBUaGVyZSBjb3VsZCBiZSBl cXVpdmFsZW50IHByb2JsZW1zIGZvciBncm91cCBjaGFuZ2luZyBpZiB0aGUKKyAgICAgKiBwcm9n cmFtIHNvbWV0aW1lcyByYW4gd2l0aCB1aWQgInJvb3QiIGFuZCBzb21ldGltZXMgbm90LCBidXQK KyAgICAgKiB0aGF0IGlzIGFscmVhZHkgYXZvaWRlZCBhcyBleHBsYWluZWQgYWJvdmUuCisgICAg ICoKKyAgICAgKiBUaHVzIHdlIGNhbiBleHBlY3QgYWx3YXlzIHRvIGJlIGFibGUgdG8gc3dpdGNo IHRvIHRoZSAic2F2ZWQgc2V0LQorICAgICAqIGdpZCIgd2hlbiB3ZSB3YW50LCBhbmQgYmFjayB0 byB0aGUgcmVhbCBnaWQgYWdhaW4uIFlvdSBtYXkgYWxzbworICAgICAqIGRyYXcgdGhlIGNvbmNs dXNpb24gdGhhdCBzZXQtZ2lkIHByb3ZpZGVzIGZvciBmZXdlciBoYXNzbGVzIHRoYW4KKyAgICAg KiBzZXQtdWlkLgorICAgICAqLworCisjaWZkZWYgU1VJRERFQlVHCisgICAgZnByaW50ZihzdGRl cnIsIlVJRF9ST09UPSVkXG4iLFVJRF9ST09UKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwicmVhbHVp ZD0lZFxuIixyZWFsdWlkKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwicHJpdnVpZD0lZFxuIixwcml2 dWlkKTsKKyNlbmRpZiAvKiBTVUlEREVCVUcgKi8KKworICAgIGlmIChyZWFsZ2lkID09IHByaXZn aWQpCQkvKiBJZiBub3QgcnVubmluZyBzZXQtdXNlci1pZCwgKi8KKyAgICAgIHByaXZnaWQgPSAo R0lEX1QpIC0xOwkJLyogIHJlbWVtYmVyIGl0IHRoaXMgd2F5LiAqLworCisgICAgZXJyID0gcHJp dl9vZmYoKTsJCQkvKiBUdXJuIG9mZiBzZXR1aWQgcHJpdmlsZWdlLiAqLworCisgICAgaWYgKHBy aXZ1aWQgPT0gVUlEX1JPT1QpCQkvKiBJZiBzZXR1aWQgdG8gcm9vdCwgKi8KKyAgICAgIGVyciB8 PSA0OwkJCQkvKiByZXR1cm4gdGhpcyBlcnJvci4gKi8KKworICAgIGlmIChyZWFsdWlkID09IFVJ RF9ST09UKSB7CQkvKiBJZiByZWFsIGlkIGlzIHJvb3QsICovCisJcHJpdnVpZCA9IChVSURfVCkg LTE7CQkvKiBzdGF5IHJvb3QgYXQgYWxsIHRpbWVzLiAqLworI2lmZGVmIEFUVDczMDAKKwkvKiBJ ZiBLZXJtaXQgaW5zdGFsbGVkIFNVSUQgdXVjcCBhbmQgdXNlciBpcyBydW5uaW5nIGFzIHJvb3Qg Ki8KKwllcnIgJj0gfjE7CQkJLyogU3lzdGVtIFYgUjAgZG9lcyBub3Qgc2F2ZSBVSUQgKi8KKyNl bmRpZiAvKiBBVFQ3MzAwICovCisgICAgfQorI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLworICAg IHJldHVybihlcnIpOworfQorCisKKy8qIE1hY3JvcyBmb3IgaGlkaW5nIHRoZSBkaWZmZXJlbmNl cyBpbiBVSUQvR0lEIHNldHRpbmcgYmV0d2VlbiB2YXJpb3VzIFVuaXgKKyAqIHN5c3RlbXMuIFRo ZXNlIG1hY3JvcyBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIGJvdGggdGhlIHByaXZpbGVn ZWQgSUQKKyAqIGFuZCB0aGUgbm9uLXByaXZpbGVnZWQgSUQuIFRoZSBvbmUgaW4gdGhlIHNlY29u ZCBhcmd1bWVudCwgd2lsbCBiZWNvbWUgdGhlCisgKiBlZmZlY3RpdmUgSUQuIFRoZSBvbmUgaW4g dGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgcmV0YWluZWQgZm9yIGxhdGVyCisgKiByZXRyaWV2 YWwuCisgKi8KKyNpZmRlZiBTRVRSRVVJRAorI2lmZGVmIFNBVkVEVUlECisvKiBPbiBCU0Qgc3lz dGVtcyB3aXRoIHRoZSBzYXZlZC1VSUQgZmVhdHVyZSwgd2UganVzdCBqdWdnbGUgdGhlIGVmZmVj dGl2ZQorICogVUlEIGJhY2sgYW5kIGZvcnRoLCBhbmQgbGVhdmUgdGhlIHJlYWwgVUlEIGF0IGl0 cyB0cnVlIHZhbHVlLiAgVGhlIGtlcm5lbAorICogYWxsb3dzIHN3aXRjaGluZyB0byBib3RoIHRo ZSBjdXJyZW50IHJlYWwgVUlELCB0aGUgZWZmZWN0aXZlIFVJRCwgYW5kIHRoZQorICogVUlEIHdo aWNoIHRoZSBwcm9ncmFtIGlzIHNldC1VSUQgdG8uICBUaGUgc2F2ZWQgc2V0LVVJRCBhbHdheXMg aG9sZHMgdGhlCisgKiBwcml2aWxlZ2VkIFVJRCBmb3IgdXMsIGFuZCB0aGUgcmVhbCBVSUQgd2ls bCBhbHdheXMgYmUgdGhlIG5vbi1wcml2aWxlZ2VkLAorICogYW5kIHdlIGNhbiBmcmVlbHkgY2hv b3NlIG9uZSBvZiB0aGVtIGZvciB0aGUgZWZmZWN0aXZlIFVJRCBhdCBhbnkgdGltZS4KKyAqLwor I2RlZmluZSBzd2l0Y2h1aWQoaGlkZGVuLGFjdGl2ZSkgc2V0cmV1aWQoIChVSURfVCkgLTEsIGFj dGl2ZSkKKyNkZWZpbmUgc3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpIHNldHJlZ2lkKCAoR0lEX1Qp IC0xLCBhY3RpdmUpCisKKyNlbHNlICAgLyogU0VUUkVVSUQsIVNBVkVEVUlEICovCisKKy8qIE9u IHN5c3RlbXMgd2l0aCBzZXRyZVhpZCgpIGJ1dCB3aXRob3V0IHRoZSBzYXZlZC1VSUQgZmVhdHVy ZSwgbm90YWJseQorICogQlNEIDQuMiwgd2Ugc3dhcCB0aGUgcmVhbCBhbmQgZWZmZWN0aXZlIFVJ RHMgZWFjaCB0aW1lLiAgSXQncworICogdGhlIGVmZmVjdGl2ZSBVSUQgdGhhdCB3ZSBhcmUgaW50 ZXJlc3RlZCBpbiwgYnV0IHdlIGhhdmUgdG8gcmV0YWluIHRoZQorICogdW51c2VkIFVJRCBzb21l d2hlcmUgdG8gZW5hYmxlIHVzIHRvIHJlc3RvcmUgaXQgbGF0ZXIsIGFuZCB3ZSBkbyB0aGlzCisg KiBpbiB0aGUgcmVhbCBVSUQuICBUaGUga2VybmVsIG9ubHkgYWxsb3dzIHN3aXRjaGluZyB0byBl aXRoZXIgdGhlIGN1cnJlbnQKKyAqIHJlYWwgb3IgdGhlIGVmZmVjdGl2ZSBVSUQsIHVubGVzcyB5 b3UncmUgInJvb3QiLgorICovCisjZGVmaW5lIHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKQlzZXRy ZXVpZChoaWRkZW4sYWN0aXZlKQorI2RlZmluZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkJc2V0 cmVnaWQoaGlkZGVuLGFjdGl2ZSkKKyNlbmRpZgorCisjZWxzZSAvKiAhU0VUUkVVSUQsICFTQVZF RFVJRCAqLworCisjaWZkZWYgU0VURVVJRAorLyoKKyAgQlNEIDQuNCB3b3JrcyBzaW1pbGFybHkg dG8gU3lzdGVtIFYgYW5kIFBPU0lYIChzZWUgYmVsb3cpLCBidXQgdXNlcworICBzZXRlWGlkKCkg aW5zdGVhZCBvZiBzZXRYaWQoKSB0byBjaGFuZ2UgZWZmZWN0aXZlIElEcy4gIEluIGFkZGl0aW9u LCB0aGUKKyAgc2V0ZVhpZCgpIGZ1bmN0aW9ucyB3b3JrIHRoZSBzYW1lIGZvciAicm9vdCIgYXMg Zm9yIG90aGVyIHVzZXJzLgorKi8KKyNkZWZpbmUgc3dpdGNodWlkKGhpZGRlbixhY3RpdmUpCXNl dGV1aWQoYWN0aXZlKQorI2RlZmluZSBzd2l0Y2hnaWQoaGlkZGVuLGFjdGl2ZSkJc2V0ZWdpZChh Y3RpdmUpCisKKyNlbHNlIC8qICFTRVRFVUlEICovCisKKy8qIE9uIFN5c3RlbSBWIGFuZCBQT1NJ WCwgdGhlIG9ubHkgdGhpbmcgd2UgY2FuIGNoYW5nZSBpcyB0aGUgZWZmZWN0aXZlIFVJRAorICog KHVubGVzcyB0aGUgY3VycmVudCBlZmZlY3RpdmUgVUlEIGlzICJyb290IiwgYnV0IGluaXRzdWlk KCkgYXZvaWRzIHRoYXQgZm9yCisgKiB1cykuICBUaGUga2VybmVsIGFsbG93cyBzd2l0Y2hpbmcg dG8gdGhlIGN1cnJlbnQgcmVhbCBVSUQgb3IgdG8gdGhlIHNhdmVkCisgKiBzZXQtVUlELiAgVGhl c2UgYXJlIGFsd2F5cyBzZXQgdG8gdGhlIG5vbi1wcml2aWxlZ2VkIFVJRCBhbmQgdGhlIHByaXZp bGVnZWQKKyAqIFVJRCwgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBjaGFuZ2UgdGhlIGVmZmVj dGl2ZSBVSUQuICBUaGlzIGJyZWFrcyBpZgorICogdGhlIGN1cnJlbnQgZWZmZWN0aXZlIFVJRCBp cyAicm9vdCIsIHRob3VnaCwgYmVjYXVzZSBmb3IgInJvb3QiIHNldHVpZC9naWQKKyAqIGJlY29t ZXMgbW9yZSBwb3dlcmZ1bCwgd2hpY2ggaXMgd2h5IGluaXRzdWlkKCkgdHJlYXRzICJyb290IiBz cGVjaWFsbHkuCisgKiBOb3RlOiBUaGF0IHNwZWNpYWwgdHJlYXRtZW50IG1heWJlIGNvdWxkIGJl IGlnbm9yZWQgZm9yIEJTRD8gIE5vdGU6IEZvcgorICogc3lzdGVtcyB0aGF0IGRvbid0IGZpdCBh bnkgb2YgdGhlc2UgZm91ciBjYXNlcywgd2Ugc2ltcGx5IGNhbid0IHN1cHBvcnQKKyAqIHNldC1V SUQuCisgKi8KKyNkZWZpbmUgc3dpdGNodWlkKGhpZGRlbixhY3RpdmUpCXNldHVpZChhY3RpdmUp CisjZGVmaW5lIHN3aXRjaGdpZChoaWRkZW4sYWN0aXZlKQlzZXRnaWQoYWN0aXZlKQorCisjZW5k aWYgLyogU0VURVVJRCAqLworI2VuZGlmIC8qIFNFVFJFVUlEICovCisKKworLyogUCBSIEkgViBf IE8gTiAgLS0gIFR1cm4gb24gdGhlIHNldHVpZCBhbmQvb3Igc2V0Z2lkICovCisKKy8qIEdvIHRv IHRoZSBwcml2aWxlZ2VkIHVpZCAoZ2lkKSB0aGF0IHRoZSBwcm9ncmFtIGlzIHNldC11c2VyLWlk CisgKiAoc2V0LWdyb3VwLWlkKSB0bywgdW5sZXNzIHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgdW5w cml2aWxlZ2VkLgorICogSWYgc2V0dWlkKCkgZmFpbHMsIHJldHVybiB2YWx1ZSB3aWxsIGJlIDEu IElmIGdldHVpZCgpIGZhaWxzIGl0CisgKiB3aWxsIGJlIDIuICBSZXR1cm4gaW1tZWRpYXRlbHkg YWZ0ZXIgZmlyc3QgZmFpbHVyZSwgYW5kIHRoZSBmdW5jdGlvbgorICogdHJpZXMgdG8gcmVzdG9y ZSBhbnkgcGFydGlhbCB3b3JrIGRvbmUuICBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqIEdyb3Vw IGlkIGlzIGNoYW5nZWQgZmlyc3QsIHNpbmNlIGl0IGlzIGxlc3Mgc2VyaW91cyB0aGFuIHVzZXIg aWQuCisgKi8KK2ludAorcHJpdl9vbigpIHsKKyNpZm5kZWYgSEFWRV9MT0NLREVWCisgICAgaWYg KHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKKyAgICAgIGlmIChzd2l0Y2hnaWQocmVhbGdpZCxwcml2 Z2lkKSkKKyAgICAgICAgcmV0dXJuKDIpOworCisgICAgaWYgKHByaXZ1aWQgIT0gKFVJRF9UKSAt MSkKKyAgICAgIGlmIChzd2l0Y2h1aWQocmVhbHVpZCxwcml2dWlkKSkgeworCSAgaWYgKHByaXZn aWQgIT0gKEdJRF9UKSAtMSkKKwkgICAgc3dpdGNoZ2lkKHByaXZnaWQscmVhbGdpZCk7CisJICBy ZXR1cm4oMSk7CisgICAgICB9CisjZW5kaWYgLyogSEFWRV9MT0NLREVWICovCisgICAgcmV0dXJu KDApOworfQorCisvKiBQIFIgSSBWIF8gTyBGIEYgIC0tICBUdXJuIG9uIHRoZSByZWFsIHVpZCBh bmQgZ2lkICovCisKKy8qIFJldHVybiB0byB0aGUgdW5wcml2aWxlZ2VkIHVpZCAoZ2lkKSBhZnRl ciBhbiB0ZW1wb3JhcnkgdmlzaXQgdG8KKyAqIHByaXZpbGVnZWQgc3RhdHVzLCB1bmxlc3MgdGhl IHByb2dyYW0gaXMgcnVubmluZyB3aXRob3V0IHNldC11c2VyLWlkCisgKiAoc2V0LWdyb3VwLWlk KS4gUmV0dXJucyAxIGZvciBmYWlsdXJlIGluIHNldHVpZCgpIGFuZCAyIGZvciBmYWlsdXJlCisg KiBpbiBzZXRnaWQoKSBvcjplZCB0b2dldGhlci4gVGhlIGZ1bmN0aW9ucyB0cmllcyB0byByZXR1 cm4gYm90aCB1aWQKKyAqIGFuZCBnaWQgdG8gdW5wcml2aWxlZ2VkIHN0YXRlLCByZWdhcmRsZXNz IG9mIGVycm9ycy4gUmV0dXJucyAwIG9uCisgKiBzdWNjZXNzLgorICovCitpbnQKK3ByaXZfb2Zm KCkgeworICAgIGludCBlcnIgPSAwOworI2lmbmRlZiBIQVZFX0xPQ0tERVYKKyAgICBpZiAocHJp dnVpZCAhPSAoVUlEX1QpIC0xKQorICAgICAgIGlmIChzd2l0Y2h1aWQocHJpdnVpZCxyZWFsdWlk KSkKKwkgIGVyciB8PSAxOworCisgICAgaWYgKHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKKyAgICAg ICBpZiAoc3dpdGNoZ2lkKHByaXZnaWQscmVhbGdpZCkpCisJZXJyIHw9IDI7CisjZW5kaWYgLyog SEFWRV9MT0NLREVWICovCisgICAgcmV0dXJuKGVycik7Cit9CisKKy8qIFR1cm4gb2ZmIHByaXZp bGVnZSBwZXJtYW5lbnRseS4gIE5vIGdvaW5nIGJhY2suICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWZv cmUKKyAqIGEgZm9yaygpIG9uIEJTRDQzIG1hY2hpbmVzIHRoYXQgZG9uJ3Qgc2F2ZSB0aGUgc2V0 VUlEIG9yIHNldEdJRCwgYmVjYXVzZQorICogd2Ugc3dhcCB0aGUgcmVhbCBhbmQgZWZmZWN0aXZl IGlkcywgYW5kIHdlIGRvbid0IHdhbnQgdG8gbGV0IHRoZSBmb3JrZWQKKyAqIHByb2Nlc3Mgc3dh cCB0aGVtIGFnYWluIGFuZCBnZXQgdGhlIHByaXZpbGVnZSBiYWNrLiBJdCB3aWxsIHdvcmsgb24g b3RoZXIKKyAqIG1hY2hpbmVzIHRvbywgc3VjaCB0aGF0IHlvdSBjYW4gcmVseSBvbiBpdHMgZWZm ZWN0IGFsd2F5cyBiZWluZyB0aGUgc2FtZSwKKyAqIGZvciBpbnN0YW5jZSwgZXZlbiB3aGVuIHlv dSdyZSBpbiBwcml2X29uKCkgc3RhdGUgd2hlbiB0aGlzIGlzIGNhbGxlZC4KKyAqIChXZWxsLCB0 aGF0IHBhcnQgYWJvdXQgInBlcm1hbmVudCIgaXMgb24gU3lzdGVtIFYgb25seSB0cnVlIGlmIHlv dSBmb2xsb3cKKyAqIHRoaXMgd2l0aCBhIGNhbGwgdG8gZXhlYygpLCBidXQgdGhhdCdzIHdoYXQg d2Ugd2FudCBpdCBmb3IgYW55d2F5LikKKyAqIEFkZGVkIGJ5IERlYW4gTG9uZyAtLSBkbG9uZ0Bt aWRnYXJkLnVjc2MuZWR1CisgKi8KK2ludAorcHJpdl9jYW4oKSB7CisjaWZuZGVmIEhBVkVfTE9D S0RFVgorI2lmZGVmIFNFVFJFVUlECisgICAgaW50IGVyciA9IDA7CisgICAgaWYgKHByaXZ1aWQg IT0gKFVJRF9UKSAtMSkKKyAgICAgICBpZiAoc2V0cmV1aWQocmVhbHVpZCxyZWFsdWlkKSkKKwkg IGVyciB8PSAxOworCisgICAgaWYgKHByaXZnaWQgIT0gKEdJRF9UKSAtMSkKKyAgICAgICAgaWYg KHNldHJlZ2lkKHJlYWxnaWQscmVhbGdpZCkpCisgCSAgZXJyIHw9IDI7CisKKyAgICByZXR1cm4o ZXJyKTsKKworI2Vsc2UKKyNpZmRlZiBTRVRFVUlECisgICAgaW50IGVyciA9IDA7CisgICAgaWYg KHByaXZ1aWQgIT0gKFVJRF9UKSAtMSkKKwlpZiAoc2V0dWlkKHJlYWx1aWQpKSB7CisJICAgIGRl YnVnKEYxMDEsInNldHVpZCBmYWlsZWQiLCIiLGVycm5vKTsKKwkgICAgZXJyIHw9IDE7CisJICAg IGRlYnVnKEYxMDEsInJ1aWQiLCIiLGdldHVpZCgpKTsKKwkgICAgZGVidWcoRjEwMSwiZXVpZCIs IiIsZ2V0ZXVpZCgpKTsKKwl9CisgICAgZGVidWcoRjEwMSwic2V0dWlkIiwiIixyZWFsdWlkKTsK KyAgICBpZiAocHJpdmdpZCAhPSAoR0lEX1QpIC0xKQorICAgICAgICBpZiAoc2V0Z2lkKHJlYWxn aWQpKSB7CisJICAgIGRlYnVnKEYxMDEsInNldGdpZCBmYWlsZWQiLCIiLGVycm5vKTsKKwkgICAg ZXJyIHw9IDI7CisJICAgIGRlYnVnKEYxMDEsInJnaWQiLCIiLGdldGdpZCgpKTsKKwkgICAgZGVi dWcoRjEwMSwiZWdpZCIsIiIsZ2V0ZWdpZCgpKTsKKwl9CisgICAgZGVidWcoRjEwMSwic2V0Z2lk IiwiIixyZWFsZ2lkKTsKKyAgICByZXR1cm4oZXJyKTsKKyNlbHNlCisgICAgLyogRWFzeSB3YXkg b2YgdXNpbmcgc2V0dWlkKCkvc2V0Z2lkKCkgaW5zdGVhZCBvZiBzZXRyZXVpZCgpL3NldHJlZ2lk KCkuKi8KKyAgICByZXR1cm4ocHJpdl9vZmYoKSk7CisjZW5kaWYgLyogU0VURVVJRCAqLworI2Vu ZGlmIC8qIFNFVFJFVUlEICovCisjZWxzZQorICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBIQVZF X0xPQ0tERVYgKi8KK30KKworLyogUCBSIEkgViBfIE8gUCBOICAtLSAgRm9yIG9wZW5pbmcgcHJv dGVjdGVkIGZpbGVzIG9yIGRldmljZXMuICovCisKK2ludAorcHJpdl9vcG4obmFtZSwgbW9kZXMp IGNoYXIgKm5hbWU7IGludCBtb2RlczsgeworICAgIGludCB4OworICAgIHByaXZfb24oKTsJCQkJ LyogVHVybiBwcml2aWxlZ2VzIG9uICovCisgICAgZGVidWcoRjExMSwicHJpdl9vcG4iLG5hbWUs bW9kZXMpOworICAgIGVycm5vID0gMDsKKyAgICB4ID0gb3BlbihuYW1lLCBtb2Rlcyk7CQkvKiBU cnkgdG8gb3BlbiB0aGUgZGV2aWNlICovCisgICAgZGVidWcoRjEwMSwicHJpdl9vcG4gcmVzdWx0 IiwiIix4KTsKKyAgICBkZWJ1ZyhGMTAxLCJwcml2X29wbiBlcnJubyIsIiIsZXJybm8pOworICAg IHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4gcHJpdmlsZWdlcyBvZmYgKi8KKyAgICByZXR1cm4oeCk7 CQkJCS8qIFJldHVybiBvcGVuJ3MgcmV0dXJuIGNvZGUgKi8KK30KKworLyogIFAgUiBJIFYgXyBD IEggSyAgLS0gIENoZWNrIHByaXZpbGVnZXMuICAqLworCisvKiAgVHJ5IHRvIHR1cm4gdGhlbSBv ZmYuICBJZiB0dXJuaW5nIHRoZW0gb2ZmIGRpZCBub3Qgc3VjY2VlZCwgY2FuY2VsIHRoZW0gKi8K KworaW50Citwcml2X2NoaygpIHsKKyAgICBpbnQgeCwgeSA9IDA7CisgICAgeCA9IHByaXZfb2Zm KCk7CQkJLyogVHVybiBvZmYgcHJpdnMuICovCisgICAgaWYgKHggIT0gMCB8fCBnZXR1aWQoKSA9 PSBwcml2dWlkIHx8IGdldGV1aWQoKSA9PSBwcml2dWlkKQorICAgICAgeSA9IHByaXZfY2FuKCk7 CisgICAgaWYgKHggIT0gMCB8fCBnZXRnaWQoKSA9PSBwcml2Z2lkIHx8IGdldGVnaWQoKSA9PSBw cml2Z2lkKQorICAgICAgeSA9IHkgfCBwcml2X2NhbigpOworICAgIHJldHVybih5KTsKK30KKwor VUlEX1QKK3JlYWxfdWlkKCkgeworICAgIHJldHVybihyZWFsdWlkKTsKK30KKworVk9JRAordHRp bW9mZigpIHsJCQkJLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyAgICAvKiBp bnQgeHg7ICovCisvKgorICBBcyBvZiA1QSgxODMpLCB3ZSBzZXQgU0lHQUxSTSB0byBTSUdfSUdO ICh0byBpZ25vcmUgYWxhcm1zKSByYXRoZXIgdGhhbiB0bworICBTSUdfREZMICh0byBjYXRjaCBh bGFybXMsIG9yIGlmIHRoZXJlIGlzIG5vIGhhbmRsZXIsIHRvIGV4aXQpLiAgVGhpcyBpcyB0bwor ICBjdXJlIChtYXNrLCByZWFsbHkpIGEgZGVlcGVyIHByb2JsZW0gd2l0aCBzdHJheSBhbGFybXMg dGhhdCBvY2N1cnMgb24gc29tZQorICBzeXN0ZW1zLCBwb3NzaWJseSBoYXZpbmcgdG8gZG8gd2l0 aCBzbGVlcCgpLCB0aGF0IGNhdXNlZCBjb3JlIGR1bXBzLiAgSXQKKyAgc2hvdWxkIGJlIE9LIHRv IGRvIHRoaXMsIGJlY2F1c2Ugbm8gY29kZSBpbiB0aGlzIG1vZHVsZSB1c2VzIG5lc3RlZCBhbGFy bXMuCisgIChCdXQgd2Ugc3RpbGwgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIFNDUklQVCBhbmQgRElB TC4uLikKKyovCisgICAgLyogeHggPSAqLyBhbGFybSgwKTsKKyAgICAvKiBkZWJ1ZyhGMTAxLCJ0 dGltb2ZmIGFsYXJtIiwiIix4eCk7ICovCisgICAgaWYgKHNhdmFsKSB7CQkJLyogUmVzdG9yZSBh bnkgcHJldmlvdXMgKi8KKwlzaWduYWwoU0lHQUxSTSxzYXZhbCk7CQkvKiBhbGFybSBoYW5kbGVy LiAqLworCS8qIGRlYnVnKEYxMDEsInR0aW1vZmYgYWxhcm0gcmVzdG9yaW5nIHNhdmFsIiwiIixz YXZhbCk7ICovCisJc2F2YWwgPSBOVUxMOworICAgIH0gZWxzZSB7CisJc2lnbmFsKFNJR0FMUk0s U0lHX0lHTik7CS8qIFVzZWQgdG8gYmUgU0lHX0RGTCAqLworCS8qIGRlYnVnKEYxMDAsInR0aW1v ZmYgYWxhcm0gU0lHX0lHTiIsIiIsMCk7ICovCisgICAgfQorfQorCisKK2ludAordHRfaXNfc2Vj dXJlKCkgewkgIC8qIFRlbGxzIHdoZXRoZXIgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBpcyBzZWN1 cmUgKi8KKworICAgIGlmICh0dHlmZCA9PSAtMSkKKyAgICAgIHJldHVybigwKTsKKworICAgIGlm ICgwCisjaWZkZWYgU1NIQlVJTFRJTgorCXx8IElTX1NTSCgpCisjZW5kaWYgLyogU1NIQlVJTFRJ TiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKwl8fCBja190bl9lbmNyeXB0aW5nKCkgJiYgY2tf dG5fZGVjcnlwdGluZygpCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX1NT TAorCXx8IHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcKKyNlbmRpZiAvKiBDS19T U0wgKi8KKyNpZmRlZiBSTE9HQ09ERQorI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgQ0tfRU5D UllQVElPTgorCXx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VL NUxPR0lOCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9T ICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKwkpCisgICAgICByZXR1cm4oMSk7CisgICAgcmV0 dXJuKDApOworfQorCisjaWZkZWYgQ0tfUkVESVIKKyAgCisvKiBFeHRlcm5hbCBwcm90b2NvbCBo YW5kbGVyIHBhcmFtZXRlcnMgZnJvbSBja3V1czMuYyAqLworZXh0ZXJuIGludCBleHBfaGFuZGxl ciwgZXhwX3N0ZGVyciwgZXhwX3RpbW87CisKKyNpZmRlZiBTRUxFQ1QKKyNpZmRlZiBORVRQVFkK KworLyogVGhlIHJpZ2h0IHNpemUgaXMgMjQ1NzYgKi8KKworI2lmbmRlZiBQVFlfUEJVRl9TSVpF CQkJLyogU2l6ZSBvZiBidWZmZXIgdG8gcmVhZCBmcm9tIHB0eSAqLworI2RlZmluZSBQVFlfUEJV Rl9TSVpFIDI0NTc2CQkvKiBhbmQgd3JpdGUgdG8gbmV0LiAqLworI2VuZGlmCS8qIFBUWV9QQlVG X1NJWkUgKi8KKworI2lmbmRlZiBQVFlfVEJVRl9TSVpFCQkJLyogU2l6ZSBvZiBidWZmZXIgdG8g cmVhZCBmcm9tIG5ldCAqLworI2RlZmluZSBQVFlfVEJVRl9TSVpFIDI0NTc2CQkvKiBhbmQgd3Jp dGUgdG8gcHR5LiAqLworI2VuZGlmCS8qIFBUWV9UQlVGX1NJWkUgKi8KKworI2lmZGVmIE9fTkRF TEFZCQkJCS8qIFdoZXRoZXIgdG8gdXNlIG5vbmJsb2NraW5nICovCisjaWZuZGVmIFBUWV9OT19O REVMQVkJCQkvKiByZWFkcyBvbiB0aGUgcHNldWRvdGVybWluYWwgKi8KKyNpZm5kZWYgUFRZX1VT RV9OREVMQVkKKyNkZWZpbmUgUFRZX1VTRV9OREVMQVkKKyNlbmRpZgkvKiBQVFlfVVNFX05ERUxB WSAqLworI2VuZGlmCS8qIFBUWV9OT19OREVMQVkgKi8KKyNlbmRpZgkvKiBPX05ERUxBWSAqLwor CisjaWZuZGVmIEhBVkVfT1BFTlBUWQorI2lmbmRlZiBVU0VfQ0tVUFRZX0MKKyNkZWZpbmUgVVNF X0NLVVBUWV9DCisjZW5kaWYgLyogVVNFX0NLVVBUWV9DICovCisjZW5kaWYgLyogSEFWRV9PUEVO UFRZICovCisKKyNpZmRlZiBIQVZFX09QRU5QVFkKKyNpbmNsdWRlIDxwdHkuaD4KKyNlbmRpZgor CitWT0lECitwdHlfbWFrZV9yYXcoZmQpIGludCBmZDsgeworICAgIGludCB4ID0gLTIzLCBpOwor CisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KKyAgICBzdHJ1Y3QgdGVybWlvcyB0 cDsKKyNlbHNlCisjaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCisjaWZkZWYgQ0tfQU5T SUMKKyAgICBzdHJ1Y3QgdGVybWlvIHRwID0gezB9OworI2Vsc2UKKyAgICBzdHJ1Y3QgdGVybWlv IHRwOworI2VuZGlmCS8qIENLX0FOU0lDICovCisjZWxzZQorICAgIHN0cnVjdCBzZ3R0eWIgdHA7 CQkJLyogVHJhZGl0aW9uYWwgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0 T1JQT1NJWCAqLworCisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGZkIiwiIixmZCk7Cisg ICAgZXJybm8gPSAwOworCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KKyAgICB4 ID0gdGNnZXRhdHRyKGZkLCZ0cCk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IHRjZ2V0 YXR0ciIsIiIseCk7CisjZWxzZQorI2lmZGVmIEFUVFNWCQkJCS8qIEFUJlQgVU5JWCAqLworICAg IHggPSBpb2N0bChmZCxUQ0dFVEEsJnRwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcg VENHRVRBIGlvY3RsIiwiIix4KTsKKyNlbHNlCisgICAgeCA9IGd0dHkoZmQsJnRwKTsKKyAgICBk ZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgdHR0eSIsIiIseCk7CisjZW5kaWYgLyogQVRUU1YgKi8K KyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcg R0VUIGVycm5vIiwiIixlcnJubyk7CisKKyNpZmRlZiBVU0VfQ0ZNQUtFUkFXCisgICAgZXJybm8g PSAwOworICAgIGNmbWFrZXJhdygmdHApOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBj Zm1ha2VyYXcgZXJybm8iLCIiLGVycm5vKTsKKyNlbHNlICAvKiBVU0VfQ0ZNQUtFUkFXICovCisK KyNpZmRlZiBDT01NRU5UCisKKy8qIFRoaXMgdmVyeSBzaW1wbGUgdmVyc2lvbiByZWNvbW1lbmRl ZCBieSBTZXJnIElha29sZXYgZG9lc24ndCB3b3JrICovCisKKyAgICB0cC5jX2xmbGFnICY9IH4o RUNIT3xJQ0FOT058SUVYVEVOfElTSUcpOworICAgIHRwLmNfaWZsYWcgJj0gfihCUktJTlR8SUNS Tkx8SU5QQ0t8SVNUUklQfElYT04pOworICAgIHRwLmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkIp OworICAgIHRwLmNfY2ZsYWcgfD0gQ1M4OworICAgIHRwLmNfb2ZsYWcgJj0gfihPUE9TVCk7Cisg ICAgdHAuY19jY1tWTUlOXSA9IDE7CisgICAgdHAuY19jY1tWVElNRV0gPSAwOworCisgICAgZGVi dWcoRjEwMSwicHR5X21ha2VfcmF3IDEgY19jY1tdIE5DQ1MiLCIiLE5DQ1MpOworICAgIGRlYnVn KEYxMDEsInB0eV9tYWtlX3JhdyAxIGlmbGFncyIsIiIsdHAuY19pZmxhZyk7CisgICAgZGVidWco RjEwMSwicHR5X21ha2VfcmF3IDEgb2ZsYWdzIiwiIix0cC5jX29mbGFnKTsKKyAgICBkZWJ1ZyhG MTAxLCJwdHlfbWFrZV9yYXcgMSBsZmxhZ3MiLCIiLHRwLmNfbGZsYWcpOworICAgIGRlYnVnKEYx MDEsInB0eV9tYWtlX3JhdyAxIGNmbGFncyIsIiIsdHAuY19jZmxhZyk7CisKKyNlbHNlCisjaWZk ZWYgQ09NTUVOVAorLyoKKyAgSW4gdGhpcyB2ZXJzaW9uIHdlIHVuc2V0IGV2ZXJ5dGhpbmcgYW5k IHRoZW4gc2V0IG9ubHkgdGhlCisgIGJpdHMgd2Uga25vdyB3ZSBuZWVkLgorKi8KKyAgICAvKiBp ZmxhZ3MgKi8KKyAgICB0cC5jX2lmbGFnID0gMEw7CisgICAgdHAuY19pZmxhZyB8PSBJR05CUks7 CisjaWZkZWYgSU1BWEJFTAorICAgIHRwLmNfaWZsYWcgfD0gSU1BWEJFTDsKKyNlbmRpZiAvKiBJ TUFYQkVMICovCisKKyAgICAvKiBvZmxhZ3MgKi8KKyAgICB0cC5jX29mbGFnID0gMEw7CisKKyAg ICAvKiBsZmxhZ3MgKi8KKyAgICB0cC5jX2xmbGFnID0gMEw7CisjaWZkZWYgTk9LRVJOSU5GTwor ICAgIHRwLmNfbGZsYWcgfD0gTk9LRVJOSU5GTzsKKyNlbmRpZgkvKiBOT0tFUk5JTkZPICovCisK KyAgICAvKiBjZmxhZ3MgKi8KKyAgICB0cC5jX2NmbGFnID0gMEw7CisgICAgdHAuY19jZmxhZyB8 PSBDUzh8Q1JFQUQ7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTkNDUzsgaSsrKSB7CS8qIE5vIHNw ZWNpYWwgY2hhcmFjdGVycyAqLworCXRwLmNfY2NbaV0gPSAwOworICAgIH0KKyNpZmRlZiBWTUlO CisgICAgdHAuY19jY1tWTUlOXSA9IDE7CQkJLyogQnV0IGFsd2F5cyB3YWl0IGZvciBpbnB1dCAq LworI2VuZGlmCS8qIFZNSU4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBjX2Nj W10gTkNDUyIsIiIsTkNDUyk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgaWZsYWdz IiwiIix0cC5jX2lmbGFnKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBvZmxhZ3Mi LCIiLHRwLmNfb2ZsYWcpOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGxmbGFncyIs IiIsdHAuY19sZmxhZyk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgY2ZsYWdzIiwi Iix0cC5jX2NmbGFnKTsKKworI2Vsc2UgIC8qIENPTU1FTlQgKi8KKy8qCisgIEluIHRoaXMgdmVy c2lvbiB3ZSBzZXQgb3IgdW5zZXQgZXZlcnkgc2luZ2xlIGZsYWcgZXhwbGljaXRseS4gIEl0IHdv cmtzIGEKKyAgYml0IGJldHRlciB0aGFuIHRoZSBzaW1wbGUgdmVyc2lvbiBqdXN0IGFib3ZlLCBi dXQgaXQncyBzdGlsbCBmYXIgZnJvbQorICBhZGVxdWF0ZS4KKyovCisgICAgLyogaWZsYWdzICov CisgICAgdHAuY19pZmxhZyAmPSB+KFBBUk1SS3xJU1RSSVB8QlJLSU5UfElOTENSfElHTkNSfElD Uk5MKTsKKyAgICB0cC5jX2lmbGFnICY9IH4oSU5QQ0t8SUdOUEFSfElYQU5ZfElYT058SVhPRkYp OworICAgIHRwLmNfaWZsYWcgfD0gSUdOQlJLOworI2lmZGVmIElNQVhCRUwKKyNpZmRlZiBDT01N RU5UCisgICAgdHAuY19pZmxhZyB8PSBJTUFYQkVMOworI2Vsc2UKKyAgICB0cC5jX2lmbGFnICY9 IH5JTUFYQkVMOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBJTUFYQkVMICovCisj aWZkZWYgSVVDTEMKKyAgICB0cC5jX2lmbGFnICY9IH5JVUNMQzsKKyNlbmRpZiAvKiBJVUNMQyAq LworCisgICAgLyogb2ZsYWdzICovCisjaWZkZWYgQlNETFkKKyAgICB0cC5jX29mbGFnICY9IH5C U0RMWTsKKyNlbmRpZiAvKiBCU0RMWSAqLworI2lmZGVmIENSRExZCisgICAgdHAuY19vZmxhZyAm PSB+Q1JETFk7CisjZW5kaWYgLyogQ1JETFkgKi8KKyNpZmRlZiBGRkRMWQorICAgIHRwLmNfb2Zs YWcgJj0gfkZGRExZOworI2VuZGlmIC8qIEZGRExZICovCisjaWZkZWYgTkxETFkKKyAgICB0cC5j X29mbGFnICY9IH5OTERMWTsKKyNlbmRpZiAvKiBOTERMWSAqLworI2lmZGVmIFRBQkRMWQorICAg IHRwLmNfb2ZsYWcgJj0gflRBQkRMWTsKKyNlbmRpZiAvKiBUQUJETFkgKi8KKyNpZmRlZiBWVERM WQorICAgIHRwLmNfb2ZsYWcgJj0gflZURExZOworI2VuZGlmIC8qIFZURExZICovCisjaWZkZWYg T0ZERUwKKyAgICB0cC5jX29mbGFnICY9IH5PRkRFTDsKKyNlbmRpZiAvKiBPRkRFTCAqLworI2lm ZGVmIE9GSUxMCisgICAgdHAuY19vZmxhZyAmPSB+T0ZJTEw7CisjZW5kaWYgLyogT0ZJTEwgKi8K KyNpZmRlZiBPTENVQworICAgIHRwLmNfb2ZsYWcgJj0gfk9MQ1VDOworI2VuZGlmIC8qIE9MQ1VD ICovCisjaWZkZWYgQ01TUEFSCisgICAgdHAuY19vZmxhZyAmPSB+Q01TUEFSOworI2VuZGlmIC8q IENNU1BBUiAqLworICAgIHRwLmNfb2ZsYWcgJj0gfk9QT1NUOworI2lmZGVmIE9YVEFCUworICAg IHRwLmNfb2ZsYWcgJj0gfk9YVEFCUzsKKyNlbmRpZiAvKiBPWFRBQlMgKi8KKyNpZmRlZiBDT01N RU5UCisjaWZkZWYgT05PQ1IKKyAgICB0cC5jX29mbGFnICY9IH5PTk9DUjsJCS8qIE1heWJlIHNo b3VsZCBiZSB8PT8gKi8KKyAgICB0cC5jX29mbGFnIHw9IE9OT0NSOwkJLyogbWFrZXMgbm8gZGlm ZmVyZW5jZSBlaXRoZXIgd2F5ICovCisjZW5kaWYgLyogT05PQ1IgKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisjaWZkZWYgT05PRU9UCisgICAgdHAuY19vZmxhZyAmPSB+T05PRU9UOworI2VuZGlm IC8qIE9OT0VPVCAqLworI2lmZGVmIE9OTFJFVAorICAgIHRwLmNfb2ZsYWcgJj0gfk9OTFJFVDsK KyNlbmRpZiAvKiBPTkxSRVQgKi8KKyNpZmRlZiBPTkxDUgorICAgIHRwLmNfb2ZsYWcgJj0gfk9O TENSOworI2VuZGlmIC8qIE9OTENSICovCisjaWZkZWYgT0NSTkwKKyAgICB0cC5jX29mbGFnICY9 IH5PQ1JOTDsKKyNlbmRpZiAvKiBPQ1JOTCAqLworCisgICAgLyogbGZsYWdzICovCisgICAgdHAu Y19sZmxhZyAmPSB+RUNITzsKKyNpZmRlZiBFQ0hPRQorICAgIHRwLmNfbGZsYWcgJj0gfkVDSE9F OworI2VuZGlmIC8qIEVDSE9FICovCisjaWZkZWYgRUNIT05MCisgICAgdHAuY19sZmxhZyAmPSB+ RUNIT05MOworI2VuZGlmIC8qIEVDSE9OTCAqLworI2lmZGVmIEVDSE9QUlQKKyAgICB0cC5jX2xm bGFnICY9IH5FQ0hPUFJUOworI2VuZGlmIC8qIEVDSE9QUlQgKi8KKyNpZmRlZiBFQ0hPS0UKKyAg ICB0cC5jX2xmbGFnICY9IH5FQ0hPS0U7CisjZW5kaWYgLyogRUNIT0tFICovCisjaWZkZWYgRUNI T0NUTAorICAgIHRwLmNfbGZsYWcgJj0gfkVDSE9DVEw7CisjZW5kaWYgLyogRUNIT0NUTCAqLwor I2lmZGVmIFhDQVNFCisgICAgdHAuY19sZmxhZyAmPSB+WENBU0U7CisjZW5kaWYgLyogWENBU0Ug Ki8KKyNpZmRlZiBBTFRXRVJBU0UKKyAgICB0cC5jX2xmbGFnICY9IH5BTFRXRVJBU0U7CisjZW5k aWYgLyogQUxUV0VSQVNFICovCisjaWZkZWYgRVhUUFJPQworICAgIHRwLmNfbGZsYWcgJj0gfihJ Q0FOT058SVNJR3xJRVhURU58VE9TVE9QfEZMVVNIT3xQRU5ESU58RVhUUFJPQyk7CisjZWxzZQor ICAgIHRwLmNfbGZsYWcgJj0gfihJQ0FOT058SVNJR3xJRVhURU58VE9TVE9QfEZMVVNIT3xQRU5E SU4pOworI2VuZGlmCS8qIEVYVFBST0MgKi8KKyNpZmRlZiBOT0tFUk5JTkZPCisgICAgdHAuY19s ZmxhZyB8PSBOT0tFUk5JTkZPOworI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KKyNpZm5kZWYgQ09N TUVOVAorICAgIHRwLmNfbGZsYWcgJj0gfk5PRkxTSDsJCS8qIFRSWSBJVCBUSEUgT1RIRVIgV0FZ PyAqLworI2Vsc2UKKyAgICB0cC5jX2xmbGFnIHw9IE5PRkxTSDsJCS8qIE5vLCB0aGlzIHdheSBp cyB3b3JzZSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIC8qIGNmbGFncyAqLworICAg IHRwLmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkJ8UEFST0REKTsKKyAgICB0cC5jX2NmbGFnIHw9 IENTOHxDUkVBRDsKKworI2lmZGVmIE1ETUJVRgorICAgIHRwLmNfY2ZsYWcgJj0gfihNRE1CVUYp OworI2Vsc2UKKyNpZmRlZiBDQ0FSX09GTE9XCisgICAgdHAuY19jZmxhZyAmPSB+KENDQVJfT0ZM T1cpOwkvKiB0d28gbmFtZXMgZm9yIHRoZSBzYW1lIHRoaW5nICovCisjZW5kaWYgLyogQ0NBUl9P RkxPVyAqLworI2VuZGlmIC8qIE1ETUJVRiAqLworCisjaWZkZWYgQ0NUU19PRkxPVworICAgIHRw LmNfY2ZsYWcgJj0gfihDQ1RTX09GTE9XKTsKKyNlbmRpZiAvKiBDQ1RTX09GTE9XICovCisjaWZk ZWYgQ0RTUl9PRkxPVworICAgIHRwLmNfY2ZsYWcgJj0gfihDRFNSX09GTE9XKTsKKyNlbmRpZiAv KiBDRFNSX09GTE9XICovCisjaWZkZWYgQ0RUUl9JRkxPVworICAgIHRwLmNfY2ZsYWcgJj0gfihD RFRSX0lGTE9XKTsKKyNlbmRpZiAvKiBDRFRSX0lGTE9XICovCisjaWZkZWYgQ1JUU19JRkxPVwor ICAgIHRwLmNfY2ZsYWcgJj0gfihDUlRTX0lGTE9XKTsKKyNlbmRpZiAvKiBDUlRTX0lGTE9XICov CisjaWZkZWYgQ1JUU1hPRkYKKyAgICB0cC5jX2NmbGFnICY9IH4oQ1JUU1hPRkYpOworI2VuZGlm IC8qIENSVFNYT0ZGICovCisjaWZkZWYgQ1JUU0NUUworICAgIHRwLmNfY2ZsYWcgJj0gfihDUlRT Q1RTKTsKKyNlbmRpZiAvKiBDUlRTQ1RTICovCisjaWZkZWYgQ0xPQ0FMCisgICAgdHAuY19jZmxh ZyAmPSB+KENMT0NBTCk7CisjZW5kaWYgLyogQ0xPQ0FMICovCisjaWZkZWYgQ1NUT1BCCisgICAg dHAuY19jZmxhZyAmPSB+KENTVE9QQik7CisjZW5kaWYgLyogQ1NUT1BCICovCisjaWZkZWYgSFVQ Q0wKKyAgICB0cC5jX2NmbGFnICY9IH4oSFVQQ0wpOworI2VuZGlmIC8qIEhVUENMICovCisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgTkNDUzsgaSsrKSB7CS8qIE5vIHNwZWNpYWwgY2hhcmFjdGVycyAq LworCXRwLmNfY2NbaV0gPSAwOworICAgIH0KKyNpZmRlZiBWTUlOCisgICAgdHAuY19jY1tWTUlO XSA9IDE7CQkJLyogQnV0IGFsd2F5cyB3YWl0IGZvciBpbnB1dCAqLworI2VuZGlmCS8qIFZNSU4g Ki8KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBjX2NjW10gTkNDUyIsIiIsTkNDUyk7 CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDMgaWZsYWdzIiwiIix0cC5jX2lmbGFnKTsK KyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBvZmxhZ3MiLCIiLHRwLmNfb2ZsYWcpOwor ICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAzIGxmbGFncyIsIiIsdHAuY19sZmxhZyk7Cisg ICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDMgY2ZsYWdzIiwiIix0cC5jX2NmbGFnKTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgZXJybm8gPSAw OworI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYICovCisgICAgeCA9IHRjc2V0YXR0cihm ZCxUQ1NBTk9XLCZ0cCk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IHRjc2V0YXR0ciIs IiIseCk7CisjZWxzZQorI2lmZGVmIEFUVFNWCQkJCS8qIEFUJlQgVU5JWCAqLworICAgIHggPSBp b2N0bChmZCxUQ1NFVEEsJnRwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgaW9jdGwi LCIiLHgpOworI2Vsc2UKKyAgICB4ID0gc3R0eShmZCwmdHApOwkJCS8qIFRyYWRpdGlvbmFsICov CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IHN0dHkiLCIiLHgpOworI2VuZGlmIC8qIEFU VFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisgICAgZGVidWcoRjEwMSwicHR5X21h a2VfcmF3IGVycm5vIiwiIixlcnJubyk7CisKKyNlbmRpZiAvKiBfX05ldEJTRF9fICovCit9CisK K3N0YXRpYyBpbnQKK3B0eV9jaGsoZmQpIGludCBmZDsgeworICAgIGludCB4LCBuID0gMDsKKyAg ICBlcnJubyA9IDA7CisjaWZkZWYgRklPTlJFQUQKKyAgICB4ID0gaW9jdGwoZmQsIEZJT05SRUFE LCAmbik7CS8qIEJTRCBhbmQgbW9zdCBvdGhlcnMgKi8KKyAgICBja21ha21zZyhtc2didWYsNTAw LAorCSAgICAgInB0eV9jaGsgaW9jdGwgRklPTlJFQUQgZXJybm89IiwKKwkgICAgIGNraXRvYShl cnJubyksCisJICAgICAiIGNvdW50PSIsCisJICAgICBja2l0b2EobikpOworICAgIGRlYnVnKEYx MDAsbXNnYnVmLCIiLDApOworI2Vsc2UKKyNpZmRlZiBSRENISworICAgIG4gPSByZGNoayhmZCk7 CisgICAgZGVidWcoRjEwMSwicHR5X2NoayByZGNoayIsIiIsbik7CisjZWxzZQorICAgIG4gPSAx OworI2VuZGlmCS8qIFJEQ0hLICovCisjZW5kaWYJLyogRklPTlJFQUQgKi8KKyAgICByZXR1cm4o KG4gPiAtMSkgPyBuIDogMCk7Cit9CisKK3N0YXRpYyBpbnQKK3B0eV9nZXRfc3RhdHVzKGZkLHBp ZCkgaW50IGZkOyBQSURfVCBwaWQ7IHsKKyAgICBpbnQgeCwgc3RhdHVzID0gLTE7CisgICAgUElE X1QgdzsKKworICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGZkIiwiIixmZCk7CisgICAg ZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgcGlkIiwiIixwaWQpOworCisgICAgaWYgKHBleGl0 c3RhdCA+IC0xKQorICAgICAgcmV0dXJuKHBleGl0c3RhdCk7CisKKyNpZmRlZiBDT01NRU5UCisg ICAgLyogTm90IG9ubHkgdW5uZWNlc3NhcnkgYnV0IGhhcm1mdWwgKi8KKyAgICBlcnJubyA9IDA7 CisgICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLDApOworICAgIGRlYnVnKEYxMDEsInB0eV9nZXRf c3RhdHVzIGtpbGwgdmFsdWUiLCIiLHgpOworICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVz IGtpbGwgZXJybm8iLCIiLGVycm5vKTsKKyAgICBpZiAoeCA+IC0xICYmIGVycm5vICE9IEVTUkNI KQorICAgICAgcmV0dXJuKC0xKTsJCQkvKiBGb3JrIHN0aWxsIHRoZXJlICovCisgICAgLyogRm9y ayBzZWVtcyB0byBiZSBnb25lICovCisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgZXJybm8g PSAwOworICAgIHggPSB3YWl0cGlkKHB0eV9mb3JrX3BpZCwmc3RhdHVzLFdOT0hBTkcpOworICAg IGRlYnVnKEYxMTEsInB0eV9nZXRfc3RhdHVzIHdhaXRwaWQiLGNraXRvYShlcnJubykseCk7Cisg ICAgaWYgKHggPD0gMCAmJiBlcnJubyA9PSAwKSB7CisJZGVidWcoRjEwMSwicHR5X2dldF9zdGF0 dXMgd2FpdHBpZCByZXR1cm4iLCIiLC0xKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAo eCA+IDApIHsKKwlpZiAoeCAhPSBwdHlfZm9ya19waWQpCisJICBkZWJ1ZyhGMTAxLAorCQkicHR5 X2dldF9zdGF0dXMgd2FpdHBpZCBwaWQgZG9lc24ndCBtYXRjaCIsIiIscHR5X2ZvcmtfcGlkKTsg CisJZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCBzdGF0dXMiLCIiLHN0YXR1cyk7 CisJZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCBlcnJubyIsIiIsZXJybm8pOwor CWlmIChXSUZFWElURUQoc3RhdHVzKSkgeworCSAgICBkZWJ1ZyhGMTAwLCJwdHlfZ2V0X3N0YXR1 cyBXSUZFWElURUQiLCIiLDApOworCSAgICBzdGF0dXMgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOwor CSAgICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyBmb3JrIGV4aXQgc3RhdHVzIiwiIixzdGF0 dXMpOworI2lmZGVmIENPTU1FTlQKKwkgICAgZW5kX3B0eSgpOworI2VuZGlmCS8qIENPTU1FTlQg Ki8KKwkgICAgY2xvc2UoZmQpOworCSAgICBwZXhpdHN0YXQgPSBzdGF0dXM7CisJfSBlbHNlIHsK KwkgICAgZGVidWcoRjEwMCwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCB1bmV4cGVjdGVkIHN0YXR1 cyIsIiIsMCk7CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyByZXR1 cm4gc3RhdHVzIiwiIixzdGF0dXMpOworICAgIHJldHVybihzdGF0dXMpOworfQorCisvKiB0IHQg cCB0IHkgYyBtIGQgIC0tICBSdW4gY29tbWFuZCBvbiBwdHkgYW5kIGZvcndhcmQgdG8gbmV0ICov CisKKy8qCisgIE5lZWRlZCBmb3IgcnVubmluZyBleHRlcm5hbCBwcm90b2NvbHMgb24gc2VjdXJl IGNvbm5lY3Rpb25zLgorICBGb3IgZXhhbXBsZSwgaWYgQy1LZXJtaXQgaGFzIG1hZGUgYW4gU1NM L1RMUyBvciBLZXJiZXJvcyBUZWxuZXQKKyAgY29ubmVjdGlvbiwgYW5kIHRoZW4gbmVlZHMgdG8g dHJhbnNmZXIgYSBmaWxlIHdpdGggWm1vZGVtLCB3aGljaCBpcworICBhbiBleHRlcm5hbCBwcm9n cmFtLCB0aGlzIHJvdXRpbmUgcmVhZHMgWm1vZGVtJ3Mgb3V0cHV0LCBlbmNyeXB0cyBpdCwKKyAg YW5kIHRoZW4gZm9yd2FyZHMgaXQgb3V0IHRoZSBjb25uZWN0aW9uLCBhbmQgcmVhZHMgdGhlIGVu Y3J5cHRlZCBkYXRhCisgIHN0cmVhbSBjb21pbmcgaW4gZnJvbSB0aGUgY29ubmVjdGlvbiwgZGVj cnlwdHMgaXQsIGFuZCBmb3J3YXJkcyBpdCB0bworICBabW9kZW0uCisKKyAgV29ya3MgbGlrZSBh IFRDUC9JUCBwb3J0IGZvcndhcmRlciBleGNlcHQgb25lIGVuZCBpcyBhIHB0eSByYXRoZXIKKyAg dGhhbiBhIHNvY2tldCwgd2hpY2ggaW50cm9kdWNlcyBzb21lIGNvbXBsaWNhdGlvbnM6CisKKyAg IC4gT24gbW9zdCBwbGF0Zm9ybXMsIHNlbGVjdCgpIGFsd2F5cyBpbmRpY2F0ZXMgdGhlIG91dHB1 dCBzaWRlIG9mCisgICAgIHRoZSBwdHkgaGFzIGNoYXJhY3RlcnMgd2FpdGluZyB0byBiZSByZWFk LCBldmVuIHdoZW4gaXQgZG9lc24ndCwKKyAgICAgZXZlbiB3aGVuIHRoZSBwdHkgcHJvY2VzcyBo YXMgYWxyZWFkeSBleGl0ZWQuCisKKyAgIC4gTm9uYmxvY2tpbmcgcmVhZHMgbXVzdCBiZSB1c2Vk IG9uIHRoZSBwdHksIGJlY2F1c2UgdGhlcmUgaXMgbm8KKyAgICAgd2F5IG9uIGNlcnRhaW4gcGxh dGZvcm1zIChlLmcuIE5ldEJTRCkgdG8gZmluZCBvdXQgaG93IG1hbnkgY2hhcmFjdGVycworICAg ICBhcmUgYXZhaWxhYmxlIHRvIGJlIHJlYWQgKHRoZSBGSU9OUkVBRCBpb2N0bCBhbHdheXMgc2F5 cyAwKS4gIFRoZSBjb2RlCisgICAgIGFsc28gYWxsb3dzIGZvciBibG9ja2luZyByZWFkcyAoaWYg T19OREVMQVkgYW5kIE9fTk9OQkxPQ0sgYXJlIG5vdAorICAgICBkZWZpbmVkLCBvciBpZiBQVFlf Tk9fTkRFTEFZIGlzIGRlZmluZWQpLCBidXQgb24gc29tZSBwbGF0Zm9ybXMgdGhpcyBjYW4KKyAg ICAgcmVzdWx0IGluIHNpbmdsZS1ieXRlIHJlYWRzIGFuZCB3cml0ZXMgKE5ldEJTRCBhZ2Fpbiku CisKKyAgIC4gVGVzdGluZyBmb3IgIkVPRiIgb24gdGhlIHB0eSBpcyBwcm9ibGVtYXRpYy4gIHNl bGVjdCgpIG5ldmVyIGdpdmVzCisgICAgIGFueSBpbmRpY2F0aW9uLiAgQWZ0ZXIgdGhlIHB0eSBw cm9jZXNzIGhhcyBleGl0ZWQgYW5kIHRoZSBmb3JrIGhhcworICAgICBkaXNhcHBlYXJlZCwgcmVh ZCgpIGNhbiBzdGlsbCByZXR1cm4gd2l0aCAwIGJ5dGVzIHJlYWQgYnV0IHdpdGhvdXQgYW4KKyAg ICAgZXJyb3IgKE5ldEJTRCk7IG5vIGtub3duIHRlc3Qgb24gdGhlIHB0eSBmaWxlIGRlc2NyaXB0 b3Igd2lsbCBpbmRpY2F0ZQorICAgICB0aGF0IGl0IGlzIG5vIGxvbmdlciB2YWxpZC4gIFRoZSBw cm9jZXNzIElEIG9mIHRoZSBwdHkgZm9yayBjYW4gYmUKKyAgICAgdGVzdGVkIG9uIHNvbWUgcGxh dGZvcm1zIChOZXRCU0QsIGx1Y2tpbHkpIGJ1dCBub3Qgb3RoZXJzIChTb2xhcmlzLAorICAgICBM aW51eCkuCisKKyAgT24gdGhlIG5ldHdvcmsgc2lkZSwgd2UgdXNlIHR0aW5jKCkgYW5kIHR0b2Mo KSwgd2hpY2gsIGZvciBuZXR3b3JrIAorICBjb25uZWN0aW9ucywgaGFuZGxlIGFueSBhY3RpdmUg c2VjdXJpdHkgbWV0aG9kcy4KKworICBDYWxsIHdpdGggcyA9IGNvbW1hbmQuCisgIFJldHVybnMg MCBvbiBmYWlsdXJlLCAxIG9uIHN1Y2Nlc3MuCisgIGZkYyAtIERlY2VtYmVyIDIwMDYgLSBBdWd1 c3QgMjAwNy4KKworICBOT1RFOiBUaGlzIGNvZGUgZGVmYXVsdHMgdG8gbm9uYmxvY2tpbmcgcmVh ZHMgaWYgT19OREVMQVkgb3IgT19OT05CTE9DSyBhcmUKKyAgZGVmaW5lZCBpbiB0aGUgaGVhZGVy IGZpbGVzLCB3aGljaCBzaG91bGQgYmUgdHJ1ZSBvZiBldmVyeSByZWNlbnQgVW5peAorICBwbGF0 Zm9ybS4gIElmIHRoaXMgY2F1c2VzIHRyb3VibGUgc29tZXdoZXJlLCBkZWZpbmUgUFRZX05PX05E RUxBWSwgZS5nLiB3aGVuCisgIGJ1aWxkaW5nIEMtS2VybWl0OgorCisgICAgdG91Y2ggY2t1dGlv LmMKKyAgICBtYWtlIHBsYXRmb3JtbmFtZSBLRkxBR1M9LURQVFlfTk9fTk9ERUxBWQorKi8KK3N0 YXRpYyBpbnQgaGF2ZV9wdHkgPSAwOwkJLyogRG8gd2UgaGF2ZSBhIHB0eT8gKi8KKworc3RhdGlj IFNJR1RZUCAoKnNhdmVfc2lnY2hsZCkoKSA9IE5VTEw7CS8qIEZvciBjYXRjaGluZyBTSUdDSExE ICovCisKK3N0YXRpYyBWT0lECitzaWdjaGxkX2hhbmRsZXIoc2lnKSBpbnQgc2lnOyB7CisgICAg aGF2ZV9wdHkgPSAwOwkJCS8qIFdlIGRvbid0IGhhdmUgYSBwdHkgKi8KKyNpZmRlZiBERUJVRwor ICAgIGlmIChzYXZlX3NpZ2NobGQpIHsKKwkoVk9JRCkgc2lnbmFsKFNJR0NITEQsc2F2ZV9zaWdj aGxkKTsKKwlzYXZlX3NpZ2NobGQgPSBOVUxMOworICAgIH0KKyAgICBpZiAoZGVibG9nKSB7CisJ ZGVidWcoRjEwMCwiKioqKioqKioqKioqKioiLCIiLDApOworCWRlYnVnKEYxMDAsIlNJR0NITEQg Y2F1Z2h0IiwiIiwwKTsKKwlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKiIsIiIsMCk7CisgICAg fQorI2VuZGlmCS8qIERFQlVHICovCit9CisjZGVmaW5lIEhBVkVfSUFDIDEKKyNkZWZpbmUgSEFW RV9DUiAgMgorCitpbnQKK3R0cHR5Y21kKHMpIGNoYXIgKnM7IHsKKyAgICBDSEFSIHRidWZbUFRZ X1RCVUZfU0laRV07CQkvKiBSZWFkIGZyb20gbmV0LCB3cml0ZSB0byBwdHkgKi8KKyAgICBpbnQg dGJ1Zl9hdmFpbCA9IDA7CQkJLyogUG9pbnRlcnMgZm9yIHRidWYgKi8KKyAgICBpbnQgdGJ1Zl93 cml0dGVuID0gMDsKKyAgICBzdGF0aWMgaW50IGluX3N0YXRlID0gMDsJCS8qIEZvciBURUxORVQg SUFDIGFuZCBOVlQgaW4gKi8KKyAgICBzdGF0aWMgaW50IG91dF9wcmV2ID0gMDsJCS8qIFNpbXBs ZXIgc2NoZW1lIGZvciBvdXQgKi8KKworICAgIENIQVIgcGJ1ZltQVFlfUEJVRl9TSVpFXTsJCS8q IFJlYWQgZnJvbSBwdHksIHdyaXRlIHRvIG5ldCAqLworICAgIENIQVIgZGJ1ZltQVFlfUEJVRl9T SVpFICsgUFRZX1BCVUZfU0laRSArIDFdOyAvKiBEb3VibGUtc2l6ZSBidWZmZXIgKi8KKyAgICBp bnQgcGJ1Zl9hdmFpbCA9IDA7CQkJLyogUG9pbnRlcnMgZm9yIHBidWYgKi8KKyAgICBpbnQgcGJ1 Zl93cml0dGVuID0gMDsKKworICAgIGludCBwdHlmZCA9IC0xOwkJCS8qIFB0eSBmaWxlIGRlc2Ny aXB0b3IgKi8KKyAgICBpbnQgaGF2ZV9uZXQgPSAwOwkJCS8qIFdlIGhhdmUgYSBuZXR3b3JrIGNv bm5lY3Rpb24gKi8KKyAgICBpbnQgcHR5X2VyciA9IDA7CQkJLyogR290IGVycm9yIG9uIHB0eSAq LworICAgIGludCBuZXRfZXJyID0gMDsJCQkvKiBHb3QgZXJyb3Igb24gbmV0ICovCisgICAgaW50 IHN0YXR1cyA9IC0xOwkJCS8qIFB0eSBwcm9jZXNzIGV4aXQgc3RhdHVzICovCisgICAgaW50IHJj ID0gMDsJCQkJLyogT3VyIHJldHVybiBjb2RlICovCisKKyAgICBpbnQgeDEgPSAwLCB4MiA9IDA7 CQkJLyogV29ya2Vycy4uLiAqLworICAgIGludCBjLCBuLCBtLCB0LCB4OwkJCS8qIFdvcmtlcnMg Ki8KKworICAgIGxvbmcgc2Vjb25kc190b193YWl0ID0gMEw7CQkvKiBzZWxlY3QoKSB0aW1lb3V0 ICovCisgICAgc3RydWN0IHRpbWV2YWwgdHYsICp0djI7CQkvKiBGb3Igc2VsZWN0KCkgKi8KKyNp ZmRlZiBJTlRTRUxFQ1QKKyAgICBpbnQgaW4sIG91dCwgZXJyOwkJCS8qIEZvciBzZWxlY3QoKSAq LworI2Vsc2UKKyAgICBmZF9zZXQgaW4sIG91dCwgZXJyOworI2VuZGlmIC8qIElOVFNFTEVDVCAq LworICAgIGludCBuZmRzID0gMDsJCQkvKiBGb3Igc2VsZWN0KCkgKi8KKworICAgIGludCBwc2V0 ID0gMCwgdHNldCA9IDAsIHBub3RzZXQgPSAwLCB0bm90c2V0ID0gMDsgLyogc3RhdHMvZGVidWdn aW4gb25seSAqLworICAgIGludCByZWFkX25ldF9ieXRlcyA9IDA7CQkvKiBTdGF0cyAqLworICAg IGludCB3cml0ZV9uZXRfYnl0ZXMgPSAwOwkJLyogU3RhdHMgKi8KKyAgICBpbnQgcmVhZF9wdHlf Ynl0ZXMgPSAwOwkJLyogU3RhdHMgKi8KKyAgICBpbnQgd3JpdGVfcHR5X2J5dGVzID0gMDsJCS8q IFN0YXRzICovCisgICAgaW50IGlzX3RuID0gMDsJCQkvKiBURUxORVQgcHJvdG9jb2wgaXMgYWN0 aXZlICovCisKKyAgICBpbnQgbWFzdGVyZmQgPSAtMTsKKyAgICBpbnQgc2xhdmVmZCA9IC0xOwor I2lmbmRlZiBVU0VfQ0tVUFRZX0MKKyAgICBzdHJ1Y3QgdGVybWlvcyB0ZXJtOworICAgIHN0cnVj dCB3aW5zaXplIHR3aW47CisgICAgc3RydWN0IHN0cmluZ2FycmF5ICogcTsKKyAgICBjaGFyICoq IGFyZ3MgPSBOVUxMOworI2VuZGlmIC8qIFVTRV9DS1VQVFlfQyAqLworCisgICAgaW5fc3RhdGUg PSAwOwkJCS8qIE5vIHByZXZpb3VzIGNoYXJhY3RlciB5ZXQgKi8KKworICAgIGlmICh0dHlmZCA9 PSAtMSkgeworCXByaW50ZigiP1NvcnJ5LCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaXMgbm90IG9w ZW5cbiIpOworCXJldHVybigwKTsKKyAgICB9IGVsc2UgeworCWhhdmVfbmV0ID0gMTsKKyAgICB9 CisgICAgaWYgKG5vcHVzaCkgeworCWRlYnVnKEYxMDAsInR0cHR5Y21kIGZhaWw6IG5vcHVzaCIs IiIsMCk7CisJcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoIXMpIHMgPSAiIjsJCQkvKiBEZWZl bnNlIGRlIGJvZ3VzIGFyZ3VtZW50cyAqLworICAgIGlmICghKnMpIHJldHVybigwKTsKKyAgICBw ZXhpdHN0YXQgPSAtMTsJCQkvKiBGb3JrIHByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KKworI2lmZGVm IFROQ09ERQorICAgIGlzX3RuID0gKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8 fCAvKiBUZWxuZXQgcHJvdG9jb2wgYWN0aXZlICovCisJICAgICgheGxvY2FsICYmIHNzdGVsbmV0 KTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworICAgIGRlYnVnKEYxMTAsInR0cHR5Y21kIGNvbW1h bmQiLHMsMCk7CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgdHR5ZmQiLCIiLHR0eWZkKTsKKyAg ICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBpc190biIsIiIsaXNfdG4pOworICAgIGRlYnVnKEYxMDEs InR0cHR5Y21kIGNrZXJtaXQgcGlkIiwiIixnZXRwaWQoKSk7CisKKyNpZmRlZiBVU0VfQ0tVUFRZ X0MKKyAgICAvKiBDYWxsIGNrdXB0eS5jIG1vZHVsZSB0byBnZXQgYW5kIHNldCB1cCB0aGUgcHR5 IGZvcmsgKi8KKyAgICAvKiBmYyAxID09ICJydW4gYW4gZXh0ZXJuYWwgcHJvdG9jb2wiICovCisg ICAgZGVidWcoRjEwMCwidHRwdHljbWQgdXNpbmcgY2t1cHR5LmMiLCIiLDApOworICAgIGlmIChk b19wdHkoJnB0eWZkLHMsMSkgPCAwKSB7CS8qIFN0YXJ0IHRoZSBjb21tYW5kIG9uIGEgcHR5ICov CisJZGVidWcoRjEwMCwidHRwdHljbWQgZG9fcHR5IGZhaWxzIiwiIiwwKTsKKwlyZXR1cm4oMCk7 CisgICAgfQorICAgIG1hc3RlcmZkID0gcHR5ZmQ7CisgICAgcHR5X21hc3Rlcl9mZCA9IHB0eWZk OworI2lmZGVmIENPTU1FTlQKKyAgICBzbGF2ZWZkID0gcHR5X3NsYXZlX2ZkOwkJLyogVGhpcyBp cyBub3QgdmlzaWJsZSB0byB1cyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBkZWJ1ZyhG MTExLCJ0dHB0eWNtZCBwdHlmZCIsIlVTRV9DS1VQVFlfQyIscHR5ZmQpOworICAgIGRlYnVnKEYx MTEsInR0cHR5Y21kIG1hc3RlcmZkIiwiVVNFX0NLVVBUWV9DIixtYXN0ZXJmZCk7CisgICAgZGVi dWcoRjExMSwidHRwdHljbWQgZm9yayBwaWQiLCJVU0VfQ0tVUFRZX0MiLHB0eV9mb3JrX3BpZCk7 CisjaWZuZGVmIFNPTEFSSVMKKyAgICAvKiAiaW9jdGwgaW5hcHByb3ByaWF0ZSBvbiBkZXZpY2Ui IGZvciBwdHkgbWFzdGVyICovCisgICAgcHR5X21ha2VfcmF3KG1hc3RlcmZkKTsKKyNlbmRpZiAv KiBTT0xBUklTICovCisKKyNlbHNlIC8qIFVTRV9DS1VQVFlfQyAqLworCisgICAgZGVidWcoRjEw MCwidHRwdHljbWQgT1BFTlBUWSIsIiIsMCk7CisgICAgaWYgKHRjZ2V0YXR0cigwLCAmdGVybSkg PT0gLTEpIHsJLyogR2V0IGNvbnRyb2xsaW5nIHRlcm1pbmFsJ3MgbW9kZXMgKi8KKwlwZXJyb3Io InRjZ2V0YXR0ciIpOworCXJldHVybigwKTsKKyAgICB9CisgICAgaWYgKGlvY3RsKDAsIFRJT0NH V0lOU1osIChjaGFyICopICZ0d2luKSA9PSAtMSkgeyAvKiBhbmQgd2luZG93IHNpemUgKi8KKwlw ZXJyb3IoImlvY3RsIFRJT0NHV0lOU1oiKTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChv cGVucHR5KCZtYXN0ZXJmZCwgJnNsYXZlZmQsIE5VTEwsIE5VTEwsIE5VTEwpID09IC0xKSB7CisJ ZGVidWcoRjEwMSwidHRwdHljbWQgb3BlbnB0eSBmYWlsZWQgZXJybm8iLCIiLGVycm5vKTsKKwlw ZXJyb3IoIm9wZW50cHkiKTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInR0 cHR5Y21kIG9wZW5wdHkgbWFzdGVyZmQiLCIiLG1hc3RlcmZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0 dHB0eWNtZCBvcGVucHR5IHNsYXZlZmQiLCIiLHNsYXZlZmQpOworICAgIHB0eV9tYXN0ZXJfZmQg PSBtYXN0ZXJmZDsKKyAgICBwdHlfc2xhdmVfZmQgPSBzbGF2ZWZkOworICAgIGRlYnVnKEYxMDEs InR0cHR5Y21kIG9wZW5wdHkgcHR5X21hc3Rlcl9mZCIsIiIscHR5X21hc3Rlcl9mZCk7CisKKyAg ICAvKiBQdXQgcHR5IG1hc3RlciBpbiByYXcgbW9kZSBidXQgbGV0IGZvcmtlZCBhcHAgY29udHJv bCB0aGUgc2xhdmUgKi8KKyAgICBwdHlfbWFrZV9yYXcobWFzdGVyZmQpOworCisjaWZkZWYgQ09N TUVOVAorI2lmZGVmIFRJT0NSRU1PVEUKKyAgICAvKiBUSU9DUkVNT1RFLDAgPSBkaXNhYmxlIGFs bCB0ZXJtaW8gcHJvY2Vzc2luZyAqLworICAgIHggPSBpb2N0bChtYXN0ZXJmZCwgVElPQ1JFTU9U RSwgMSk7CisgICAgZGVidWcoRjExMSwidHRwdHljbWQgaW9jdGwgVElPQ1JFTU9URSIsY2tpdG9h KHgpLGVycm5vKTsKKyNlbmRpZgkvKiBUSU9DUkVNT1RFICovCisjaWZkZWYgVElPQ1RUWQorICAg IC8qIFRJT0NUVFksMCA9IGRpc2FibGUgYWxsIHRlcm1pbyBwcm9jZXNzaW5nICovCisgICAgeCA9 IGlvY3RsKG1hc3RlcmZkLCBUSU9DVFRZLCAwKTsKKyAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBp b2N0bCBUSU9DVFRZIixja2l0b2EoeCksZXJybm8pOworI2VuZGlmCS8qIFRJT0NUVFkgKi8KKyNl bmRpZiAvKiBDT01NRU5UICovCisKKyAgICBoYXZlX3B0eSA9IDE7CQkJLyogV2UgaGF2ZSBhbiBv cGVuIHB0eSAqLworICAgIHNhdmVfc2lnY2hsZCA9IHNpZ25hbChTSUdDSExELCBzaWdjaGxkX2hh bmRsZXIpOyAvKiBDYXRjaCBmb3JrIHF1aXQgKi8KKworICAgIHB0eV9mb3JrX3BpZCA9IGZvcmso KTsJCS8qIE1ha2UgZm9yayBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgKi8KKyAgICBkZWJ1ZyhGMTAx LCJ0dHB0eWNtZCBwdHlfZm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7CisgICAgaWYgKHB0eV9m b3JrX3BpZCA9PSAtMSkgeworCXBlcnJvcigiZm9yayIpOworCXJldHVybigwKTsKKyAgICB9IGVs c2UgaWYgKHB0eV9mb3JrX3BpZCA9PSAwKSB7CS8qIEluIG5ldyBmb3JrICovCisJaW50IHg7CisJ ZGVidWcoRjEwMSwidHRwdHljbWQgbmV3IGZvcmsgcGlkIiwiIixnZXRwaWQoKSk7CisJY2xvc2Uo bWFzdGVyZmQpOwkJLyogU2xhdmUgcXVhcnRlcnMgbm8gbWFzdGVycyBhbGxvd2VkICovCisJeCA9 IHNldHNpZCgpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldyBmb3JrIHNldHNpZCIsIiIseCk7 CisJaWYgKHggPT0gLTEpIHsKKwkgICAgcGVycm9yKCJ0dHB0eWNtZCBzZXRzaWQiKTsKKwkgICAg ZXhpdCgxKTsKKwl9CisJc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsJCS8qIExldCB1cHBlciBmb3Jr IGNhdGNoIHRoaXMgKi8KKwkKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgVElPQ1NDVFRZCisJLyog TWFrZSBwdHkgdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGZvciB0aGUgcHJvY2VzcyAqLworCS8q IFRISVMgQ0FVU0VTIEFOIElORklOSVRFIFNJR1dJTkNIIElOVEVSUlVQVCBMT09QICovCisJeCA9 IGlvY3RsKHNsYXZlZmQsIFRJT0NTQ1RUWSwgTlVMTCk7CisJZGVidWcoRjEwMSwidHRwdHljbWQg VElPQ1NDVFRZIiwiIix4KTsKKyNlbmRpZgkvKiBUSU9DU0NUVFkgKi8KKyNlbmRpZgkvKiBDT01N RU5UICovCisKKwkvKiBJbml0aWFsaXplIHNsYXZlIHB0eSBtb2RlcyBhbmQgc2l6ZSB0byB0aG9z ZSBvZiBvdXIgdGVybWluYWwgKi8KKwlpZiAodGNzZXRhdHRyKHNsYXZlZmQsIFRDU0FOT1csICZ0 ZXJtKSA9PSAtMSkgeworCSAgICBwZXJyb3IoInR0cHR5Y21kIHRjc2V0YXR0ciIpOworCSAgICBl eGl0KDEpOworCX0KKwlpZiAoaW9jdGwoc2xhdmVmZCwgVElPQ1NXSU5TWiwgJnR3aW4pID09IC0x KSB7CisJICAgIHBlcnJvcigidHRwdHljbWQgaW9jdGwiKTsKKwkgICAgZXhpdCgxKTsKKwl9Cisj aWZkZWYgQ09NTUVOVAorI2lmZGVmIFRJT0NOT1RUWQorCS8qIERpc2Fzc29jaWF0ZSB0aGlzIHBy b2Nlc3MgZnJvbSBpdHMgdGVybWluYWwgKi8KKwkvKiBUSElTIEhBUyBOTyBFRkZFQ1QgKi8KKwl4 ID0gaW9jdGwoc2xhdmVmZCwgVElPQ05PVFRZLCBOVUxMKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBUSU9DTk9UVFkiLCIiLHgpOworI2VuZGlmCS8qIFRJT0NOT1RUWSAqLworI2VuZGlmCS8qIENP TU1FTlQgKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBTSUdUVE9VCQorCS8qIElnbm9yZSB0 ZXJtaW5hbCBvdXRwdXQgaW50ZXJydXB0cyAqLworCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAqLwor CWRlYnVnKEYxMDAsInR0cHR5Y21kIGlnbm9yaW5nIFNJR1RUT1UiLCIiLDApOworCXNpZ25hbChT SUdUVE9VLCBTSUdfSUdOKTsKKyNlbmRpZgkvKiBTSUdUVE9VICovCisjaWZkZWYgU0lHVFNUUAkK KwkvKiBJZ25vcmUgdGVybWluYWwgb3V0cHV0IGludGVycnVwdHMgKi8KKwkvKiBUSElTIEhBUyBO TyBFRkZFQ1QgKi8KKwlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBpZ25vcmluZyBTSUdUU1RQIiwiIiww KTsKKwlzaWduYWwoU0lHVFNUUCwgU0lHX0lHTik7CisjZW5kaWYJLyogU0lHVFNUUCAqLworI2Vu ZGlmCS8qIENPTU1FTlQgKi8KKworCXB0eV9tYWtlX3JhdyhzbGF2ZWZkKTsJCS8qIFB1dCBpdCBp biByYXdtb2RlICovCisKKwllcnJubyA9IDA7CisJaWYgKGR1cDIoc2xhdmVmZCwgU1RESU5fRklM RU5PKSAhPSBTVERJTl9GSUxFTk8gfHwKKwkgICAgZHVwMihzbGF2ZWZkLCBTVERPVVRfRklMRU5P KSAhPSBTVERPVVRfRklMRU5PKSB7CisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldyBmb3Jr IGR1cDIgZXJyb3IiLCIiLGVycm5vKTsKKwkgICAgcGVycm9yKCJ0dHB0eWNtZCBkdXAyIik7CisJ ICAgIGV4aXQoMSk7CisJfQorCWRlYnVnKEYxMDAsInR0cHR5Y21kIG5ldyBmb3JrIGR1cDIgb2si LCIiLDApOworCisJLyogUGFyc2UgZXh0ZXJuYWwgcHJvdG9jb2wgY29tbWFuZCBsaW5lICovCisJ cSA9IGNrc3BsaXQoMSwwLHMsTlVMTCwiXFwlW10mJCstLz0qXl9AIXt9Lzw+fC4jfidgOjs/Iiw3 LDAsMCk7CisJaWYgKCFxKSB7CisJICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIGNrc3BsaXQgZmFp bGVkIiwiIiwwKTsKKwkgICAgZXhpdCgxKTsKKwl9IGVsc2UgeworCSAgICBpbnQgaSwgbjsKKwkg ICAgZGVidWcoRjEwMCwidHRwdHljbWQgY2tzcGxpdCBvayIsIiIsMCk7CisJICAgIG4gPSBxLT5h X3NpemU7CisJICAgIGFyZ3MgPSBxLT5hX2hlYWQgKyAxOworCSAgICBmb3IgKGkgPSAwOyBpIDw9 IG47IGkrKykgeworCQlpZiAoIWFyZ3NbaV0pIHsKKwkJICAgIGJyZWFrOworCQl9IGVsc2Ugewor CQkgICAgLyogc29tZXRpbWVzIGNrc3BsaXQoKSBkb2Vzbid0IHRlcm1pbmF0ZSB0aGUgbGlzdCAq LworCQkgICAgaWYgKChpID09IG4pICYmIGFyZ3NbaV0pIHsKKwkJCWlmICgoaW50KXN0cmxlbihh cmdzW2ldKSA9PSAwKQorCQkJICBtYWtlc3RyKCYoYXJnc1tpXSksTlVMTCk7CisJCSAgICB9CisJ CX0KKwkgICAgfQkgICAgCisJfQorI2lmZGVmIENPTU1FTlQKKy8qCisgIFB1dHRpbmcgdGhlIHNs YXZlIHB0eSBpbiByYXdtb2RlIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlCisg IGV4dGVybmFsIHByb3RvY29sIHByb2dyYW0gaXMgc3VwcG9zZWQgdG8gZG8gdGhhdCBpdHNlbGYu ICBZZXQgZG9pbmcgdGhpcworICBoZXJlIGN1dHMgZG93biBvbiBabW9kZW0gYmluYXJ5LWZpbGUg dHJhbnNtaXNzaW9uIGVycm9ycyBieSAzMC01MCUgYnV0CisgIHN0aWxsIGRvZXNuJ3QgZWxpbWlu YXRlIHRoZW0uCisqLworCXB0eV9tYWtlX3JhdyhTVERJTl9GSUxFTk8pOworCXB0eV9tYWtlX3Jh dyhTVERPVVRfRklMRU5PKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKwlkZWJ1ZyhGMTAwLCJ0 dHB0eWNtZCBleGVjdnAnaW5nIGV4dGVybmFsIHByb3RvY29sIiwiIiwwKTsKKwlleGVjdnAoYXJn c1swXSxhcmdzKTsKKwlwZXJyb3IoImV4ZWN2cCBmYWlsZWQiKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0 eWNtZCBleGVjdnAgZmFpbGVkIiwiIixlcnJubyk7CisJY2xvc2Uoc2xhdmVmZCk7CisJZXhpdCgx KTsKKyAgICB9IAorICAgIC8qICh0aGVyZSBhcmUgYmV0dGVyIHdheXMgdG8gZG8gdGhpcy4uLikg Ki8KKyAgICBtc2xlZXAoMTAwMCk7CQkgIC8qIE1ha2UgcGFyZW50IHdhaXQgZm9yIGNoaWxkIHRv IGJlIHJlYWR5ICovCisgICAgcHR5ZmQgPSBtYXN0ZXJmZDsJCQkvKiBXZSB0YWxrIHRvIHRoZSBt YXN0ZXIgKi8KKworI2VuZGlmIC8qIFVTRV9DS1VQVFlfQyAqLworCisgICAgZGVidWcoRjEwMSwi dHRwdHljbWQgcHR5ZmQiLCIiLHB0eWZkKTsKKyAgICBpZiAocHR5ZmQgPCAwKSB7CisJcHJpbnRm KCI/RmFpbHVyZSB0byBnZXQgcHR5XG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBoYXZl X3B0eSA9IDE7CSAgICAgIC8qIFdlIGhhdmUgYW4gb3BlbiBwdHkgb3Igd2Ugd291bGRuJ3QgaGUg aGVyZSAqLworCisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgUFRZX1BCVUZfU0laRSIsIiIsUFRZ X1BCVUZfU0laRSk7CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgUFRZX1RCVUZfU0laRSIsIiIs UFRZX1RCVUZfU0laRSk7CisKKyNpZmRlZiBQVFlfVVNFX05ERUxBWQorICAgIC8qIAorICAgICAg IE5PVEU6IElmIHNlbGVjdCgpIGFuZCBpb2N0bChwdHlmZCxGSU9OUkVBRCwmbikgcmV0dXJuIHRy dWUgaW5kaWNhdGlvbnMKKyAgICAgICBvbiB0aGUgcHR5LCB3ZSBkb24ndCBuZWVkIG5vbmJsb2Nr aW5nIHJlYWRzLiAgUGVyZm9ybWFuY2Ugb2YgZWl0aGVyCisgICAgICAgbWV0aG9kIHNlZW1zIHRv IGJlIGFib3V0IHRoZSBzYW1lLCBzbyB1c2Ugd2hhdGV2ZXIgd29ya3MuCisgICAgKi8KKyAgICBl cnJubyA9IDA7CisgICAgeCA9IGZjbnRsKHB0eWZkLEZfU0VURkwsZmNudGwocHR5ZmQsRl9HRVRG TCwgMCl8T19OREVMQVkpOworICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCisJICAgICAidHRwdHlj bWQgc2V0IE9fTkRFTEFZIGVycm5vPSIsCisJICAgICBja2l0b2EoZXJybm8pLAorCSAgICAgIiBm Y250bD0iLAorCSAgICAgY2tpdG9hKHgpKTsKKyAgICBkZWJ1ZyhGMTAwLG1zZ2J1ZiwiIiwwKTsK KyNlbmRpZiAvKiBQVFlfVVNFX05ERUxBWSAqLworCisjaWZkZWYgQ09NTUVOVAorLyogTm90IG5l Y2Vzc2FyeSwgdGhlIHByb3RvY29sIG1vZHVsZSBhbHJlYWR5IGRpZCB0aGlzICovCisKKyNpZmRl ZiBVU0VfQ0ZNQUtFUkFXCisgICAgaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlcm0pID4gLTEpIHsK KwljZm1ha2VyYXcoJnRlcm0pOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldCBjZm1ha2VyYXcg ZXJybm8iLCIiLGVycm5vKTsKKwl4IHRjc2V0YXR0cih0dHlmZCwgVENTQU5PVywgJnRlcm0pOwor CWRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldCB0Y3NldGF0dHIiLCIiLHgpOworCWRlYnVnKEYxMDEs InR0cHR5Y21kIG5ldCB0Y3NldGF0dHIiLCIiLGVycm5vKTsKKyAgICB9CisjZWxzZQorICAgIGlm IChsb2NhbCkJCQkJLyogUHV0IG5ldHdvcmsgY29ubmVjdGlvbiBpbiAqLworICAgICAgdHRwa3Qo dHRzcGVlZCx0dGZsb3csdHRwcnR5KTsJLyogInBhY2tldCBtb2RlIi4gKi8KKyAgICBlbHNlCisg ICAgICBjb25iaW4oKGNoYXIpZXNjY2hyKTsJCS8qIE9SLi4uIHB0eV9tYWtlX3JhdygwKSAqLwor I2VuZGlmIC8qIFVTRV9DRk1BS0VSQVcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRl ZiBUTkNPREUKKyAgICBpZiAoaXNfdG4pIHsKKyAgICAgIGRlYnVnKEYxMDEsIjw8PCB0dHB0eWNt ZCBURUxPUFRfTUVfQklOQVJZIiwiIixURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpOworICAgICAg ZGVidWcoRjEwMSwiPDw8IHR0cHR5Y21kIFRFTE9QVF9VX0JJTkFSWSIsIiIsVEVMT1BUX1UoVEVM T1BUX0JJTkFSWSkpOworICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworICAgIGRlYnVnKEYx MDEsInR0cHR5Y21kIGVudGVyaW5nIGxvb3AgLSBzZWNvbmRzX3RvX3dhaXQiLCIiLHNlY29uZHNf dG9fd2FpdCk7CisKKyAgICB3aGlsZSAoaGF2ZV9wdHkgfHwgaGF2ZV9uZXQpIHsKKwlGRF9aRVJP KCZpbik7CQkJLyogSW5pdGlhbGl6ZSBzZWxlY3QoKSBzdHJ1Y3RzICovCisJRkRfWkVSTygmb3V0 KTsKKwlGRF9aRVJPKCZlcnIpOwkJCS8qIChub3QgdXNlZCBiZWNhdXNlIHVzZWxlc3MpICovCisJ bmZkcyA9IC0xOworCisJZGVidWcoRjEwMSwidHRwdHljbWQgbG9vcCB0b3AgaGF2ZV9wdHkiLCIi LGhhdmVfcHR5KTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBsb29wIHRvcCBoYXZlX25ldCIsIiIs aGF2ZV9uZXQpOworCisJLyogUHR5IGlzIG9wZW4gYW5kIHdlIGhhdmUgcm9vbSB0byByZWFkIGZy b20gaXQ/ICovCisJaWYgKGhhdmVfcHR5ICYmIHBidWZfYXZhaWwgPCBQVFlfUEJVRl9TSVpFKSB7 CisJICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX1NFVCBwdHlmZCBpbiIsIiIsMCk7CisgICAg ICAgICAgICBGRF9TRVQocHR5ZmQsICZpbik7CisJICAgIG5mZHMgPSBwdHlmZDsKKyAgICAgICAg fQorCS8qIE5ldHdvcmsgaXMgb3BlbiBhbmQgd2UgaGF2ZSByb29tIHRvIHJlYWQgZnJvbSBpdD8g Ki8KKyAgICAgICAgaWYgKGhhdmVfbmV0ICYmIGhhdmVfcHR5ICYmIHRidWZfYXZhaWwgPCBQVFlf VEJVRl9TSVpFKSB7CisJICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX1NFVCB0dHlmZCBpbiIs IiIsMCk7CisgICAgICAgICAgICBGRF9TRVQodHR5ZmQsICZpbik7CisJICAgIGlmICh0dHlmZCA+ IG5mZHMpIG5mZHMgPSB0dHlmZDsKKyAgICAgICAgfQorCS8qIFB0eSBpcyBvcGVuIGFuZCB3ZSBo YXZlIHN0dWZmIHRvIHdyaXRlIHRvIGl0PyAqLworICAgICAgICBpZiAoaGF2ZV9wdHkgJiYgdGJ1 Zl9hdmFpbCAtIHRidWZfd3JpdHRlbiA+IDApIHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQg RkRfU0VUIHB0eWZkIG91dCIsIiIsMCk7CisgICAgICAgICAgICBGRF9TRVQgKHB0eWZkLCAmb3V0 KTsKKwkgICAgaWYgKHB0eWZkID4gbmZkcykgbmZkcyA9IHB0eWZkOworICAgICAgICB9CisJLyog TmV0IGlzIG9wZW4gYW5kIHdlIGhhdmUgc3R1ZmYgdG8gd3JpdGUgdG8gaXQ/ICovCisJZGVidWco RjEwMSwidHRwdHljbWQgcGJ1Zl9hdmFpbC1wYnVmX3dyaXR0ZW4iLCIiLAorCSAgICAgIHBidWZf YXZhaWwgLSBwYnVmX3dyaXR0ZW4pOworICAgICAgICBpZiAoaGF2ZV9uZXQgJiYgcGJ1Zl9hdmFp bCAtIHBidWZfd3JpdHRlbiA+IDApIHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VU IHR0eWZkIG91dCIsIiIsMCk7CisgICAgICAgICAgICBGRF9TRVQgKHR0eWZkLCAmb3V0KTsKKwkg ICAgaWYgKHR0eWZkID4gbmZkcykgbmZkcyA9IHR0eWZkOworICAgICAgICB9CisJLyogV2UgZG9u J3QgdXNlIGVyciBiZWNhdXNlIGl0J3Mgbm90IHJlYWxseSBmb3IgZXJyb3JzLCAqLworCS8qIGJ1 dCBmb3Igb3V0IG9mIGJhbmQgZGF0YSBvbiB0aGUgVENQIHNvY2tldCwgd2hpY2gsIGlmIGl0IGlz ICovCisJLyogdG8gYmUgaGFuZGxlZCBhdCBhbGwsIGlzIGhhbmRsZWQgaW4gdGhlIHR0KigpIHJv dXRpbmVzICovCisKKwluZmRzKys7CQkJCS8qIDAtYmFzZWQgdG8gMS1iYXNlZCAqLworCWRlYnVn KEYxMDEsInR0cHR5Y21kIG5mZHMiLCIiLG5mZHMpOworCWlmICghbmZkcykgeworCSAgICBkZWJ1 ZyhGMTAwLCJ0dHB0eWNtZCBOTyBGRHMgc2V0IGZvciBzZWxlY3QiLCIiLDApOworCSAgICBpZiAo aGF2ZV9wdHkpIHsKKwkJLyogVGhpcyBpcyBub3QgcmlnaHQgLS0gc2xlZXBpbmcgd29uJ3QgYWNj b21wbGlzaCBhbnl0aGluZyAqLworCQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBtc2xlZXAiLCIiLDEw MCk7CisJCW1zbGVlcCgxMDApOwkgICAgCisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMDAsInR0 cHR5Y21kIG5vIHB0eSAtIHF1aXR0aW5nIGxvb3AiLCIiLDApOworCQlicmVhazsKKwkgICAgfQor CX0KKwllcnJubyA9IDA7CisKKwlpZiAoc2Vjb25kc190b193YWl0ID4gMEwpIHsJLyogVGltZW91 dCBpbiBjYXNlIG5vdGhpbmcgaGFwcGVucyAqLworCSAgICB0di50dl9zZWMgPSBzZWNvbmRzX3Rv X3dhaXQ7IC8qIGZvciBhIGxvbmcgdGltZSAqLworCSAgICB0di50dl91c2VjID0gMEw7CQkKKwkg ICAgdHYyID0gJnR2OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHYyID0gTlVMTDsK Kwl9CisJeCA9IHNlbGVjdChuZmRzLCAmaW4sICZvdXQsIE5VTEwsIHR2Mik7CisJZGVidWcoRjEw MSwidHRwdHljbWQgc2VsZWN0IiwiIix4KTsKKwlpZiAoeCA8IDApIHsKKwkgICAgaWYgKGVycm5v ID09IEVJTlRSKQorCSAgICAgIGNvbnRpbnVlOworCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBz ZWxlY3QgZXJyb3IiLCIiLGVycm5vKTsKKwkgICAgYnJlYWs7CisJfQorCWlmICh4ID09IDApIHsK KwkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgKysrIHNlbGVjdCB0aW1lb3V0IiwiIixzZWNvbmRz X3RvX3dhaXQpOyAKKwkgICAgaWYgKGhhdmVfcHR5KSB7CisJCXN0YXR1cyA9IHB0eV9nZXRfc3Rh dHVzKHB0eWZkLHB0eV9mb3JrX3BpZCk7CisJCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRf c3RhdHVzIEEiLCIiLHN0YXR1cyk7CisJCWlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3Rh dHVzOworCQloYXZlX3B0eSA9IDA7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCS8qIFdlIHdh bnQgdG8gaGFuZGxlIGFueSBwZW5kaW5nIHdyaXRlcyBmaXJzdCB0byBtYWtlIHJvb20gKi8KKwkv KiBmb3IgbmV3IGluY29taW5nLiAqLworCisJaWYgKEZEX0lTU0VUKHR0eWZkLCAmb3V0KSkgewkv KiBDYW4gd3JpdGUgdG8gbmV0PyAqLworCSAgICBDSEFSICogczsKKwkgICAgcyA9IHBidWYgKyBw YnVmX3dyaXR0ZW47CS8qIEN1cnJlbnQgc3BvdCBmb3Igc2VuZGluZyAqLworI2lmZGVmIFROQ09E RQorCSAgICBpZiAoaXNfdG4pIHsJCS8qIHR0b2woKSBkb2Vzbid0IGRvdWJsZSBJQUNzICovCisJ CUNIQVIgYzsJCQkvKiBSZXdyaXRlIHN0cmluZyB3aXRoIElBQ3MgZG91YmxlZCAqLworCQlpbnQg aTsKKwkJcyA9IHBidWYgKyBwYnVmX3dyaXR0ZW47IC8qIFNvdXJjZSAqLworCQl4ID0gMDsJCSAJ IC8qIENvdW50ICovCisJCWZvciAoaSA9IDA7IGkgPCBwYnVmX2F2YWlsIC0gcGJ1Zl93cml0dGVu OyBpKyspIHsKKwkJICAgIGMgPSBzW2ldOwkJLyogTmV4dCBjaGFyYWN0ZXIgKi8KKwkJICAgIGlm IChjID09IElBQykgewkvKiBJZiBpdCdzIElBQyAqLworCQkJZGJ1Zlt4KytdID0gYzsJLyogcHV0 IGFub3RoZXIgb25lICovCisJCQlkZWJ1ZyhGMDAwLCI+Pj4gUVVPVEVEIElBQyIsIiIsYyk7CisJ CSAgICB9IGVsc2UgaWYgKGMgIT0gMHgwYSAmJiBvdXRfcHJldiA9PSAweDBkKSB7CS8qIEJhcmUg Q1IgKi8KKwkJCWlmICghVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKSB7IC8qIE5WVCBydWxlICov CisJCQkgICAgYyA9IDB4MDA7CisJCQkgICAgZGJ1Zlt4KytdID0gYzsKKwkJCSAgICBkZWJ1ZyhG MDAwLCI+Pj4gQ1ItTlVMIiwiIixjKTsKKwkJCX0JCQkKKwkJICAgIH0KKwkJICAgIGRidWZbeCsr XSA9IGM7CS8qIENvcHkgYW5kIGNvdW50IGl0ICovCisJCSAgICBkZWJ1ZyhGMDAwLCI+Pj4gY2hh ciIsY2tpdG9hKGluX3N0YXRlKSxjKTsKKwkJICAgIG91dF9wcmV2ID0gYzsKKwkJfQorCQlzID0g ZGJ1ZjsJCS8qIE5ldyBzb3VyY2UgKi8KKwkgICAgfSBlbHNlCisjZW5kaWYgLyogVE5DT0RFICov CisJICAgICAgeCA9IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IC8qIEhvdyBtdWNoIHRvIHNl bmQgKi8KKworCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBieXRlcyB0byBzZW5kIiwiIix4KTsK KwkgICAgeCA9IHR0b2wocywgeCk7CisJICAgIGRlYnVnKEYxMDEsIj4+PiB0dG9sIiwiIix4KTsK KwkgICAgaWYgKHggPCAwKSB7CisJCW5ldF9lcnIrKzsKKwkJZGVidWcoRjExMSwidHRwdHljbWQg dHRvbCBlcnJvciIsY2tpdG9hKHgpLGVycm5vKTsKKwkJeCA9IDA7CisJICAgIH0KKwkgICAgd3Jp dGVfbmV0X2J5dGVzICs9IHg7CisJICAgIHBidWZfd3JpdHRlbiArPSB4OworCX0KKwlpZiAoRkRf SVNTRVQocHR5ZmQsICZvdXQpKSB7CS8qIENhbiB3cml0ZSB0byBwdHk/ICovCisJICAgIGRlYnVn KEYxMDAsInR0cHR5Y21kIEZEX0lTU0VUIHB0eWZkIG91dCIsIiIsMCk7CisJICAgIGVycm5vID0g MDsKKyNpZm5kZWYgQ09NTUVOVAorCSAgICB4ID0gd3JpdGUocHR5ZmQsdGJ1ZiArIHRidWZfd3Jp dHRlbix0YnVmX2F2YWlsIC0gdGJ1Zl93cml0dGVuKTsKKyNlbHNlCisJICAgIC8qIEJ5dGUgbG9v cCB0byBydWxlIG91dCBkYXRhIG92ZXJydW5zIGluIHRoZSBwdHkgKi8KKwkgICAgLyogKGl0IG1h a2VzIG5vIGRpZmZlcmVuY2UpICovCisJICAgIHsKKwkJY2hhciAqcCA9IHRidWYrdGJ1Zl93cml0 dGVuOworCQlpbnQgbiA9IHRidWZfYXZhaWwgLSB0YnVmX3dyaXR0ZW47CisJCWZvciAoeCA9IDA7 IHggPCBuOyB4KyspIHsKKwkJICAgIG1zbGVlcCgxMCk7CisJCSAgICBpZiAod3JpdGUocHR5ZmQs JihwW3hdKSwxKSA8IDApCisJCSAgICAgIGJyZWFrOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisJICAgIGRlYnVnKEYxMTEsInR0cHR5Y21kIHB0eWZkIHdyaXRlIixja2l0b2Eo ZXJybm8pLHgpOworCSAgICBpZiAoeCA+IDApIHsKKwkJdGJ1Zl93cml0dGVuICs9IHg7CisJCXdy aXRlX3B0eV9ieXRlcyArPSB4OworCSAgICB9IGVsc2UgeworCQl4ID0gMDsKKwkJcHR5X2Vycisr OworCQlpZiAocGV4aXRzdGF0IDwgMCkgeworCQkgICAgc3RhdHVzID0gcHR5X2dldF9zdGF0dXMo cHR5ZmQscHR5X2ZvcmtfcGlkKTsKKwkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRf c3RhdHVzIEIiLCIiLHN0YXR1cyk7CisJCSAgICBpZiAoc3RhdHVzID4gLTEpIHBleGl0c3RhdCA9 IHN0YXR1czsKKwkJICAgIGhhdmVfcHR5ID0gMDsKKwkJfQorCQlkZWJ1ZyhGMTAwLCJ0dHB0eWNt ZCArKysgcHR5ZmQgd3JpdGUgZXJyb3IiLCIiLDApOworCSAgICB9CisJfQorCWlmIChGRF9JU1NF VCh0dHlmZCwgJmluKSkgewkvKiBDYW4gcmVhZCBmcm9tIG5ldD8gKi8KKwkgICAgdHNldCsrOwor CSAgICBkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBGRF9JU1NFVCB0dHlmZCBpbiIsIiIsMCk7CisJICAg IG4gPSBpbl9jaGsoMSx0dHlmZCk7CisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGluX2Noayh0 dHlmZCkiLCIiLG4pOyAKKwkgICAgaWYgKG4gPCAwIHx8IHR0eWZkID09IC0xKSB7CisJCWRlYnVn KEYxMDEsInR0cHR5Y21kICsrKyB0dHlmZCBlcnJubyIsIiIsZXJybm8pOworCQluZXRfZXJyKys7 CisJICAgIH0gZWxzZSBpZiAobiA+IDApIHsKKwkJaWYgKG4gPiBQVFlfVEJVRl9TSVpFIC0gdGJ1 Zl9hdmFpbCkKKwkJICBuID0gUFRZX1RCVUZfU0laRSAtIHRidWZfYXZhaWw7CisJCWRlYnVnKEYx MDEsInR0cHR5Y21kIG5ldCByZWFkIHNpemUgYWRqdXN0ZWQiLCIiLG4pOyAKKwkJaWYgKHhsb2Nh bCAmJiBuZXRjb25uKSB7CisJCSAgICAvKgorCQkgICAgICBXZSBoYXZlIHRvIHVzZSBhIGJ5dGUg bG9vcCBoZXJlIGJlY2F1c2UgdHR4aW4oKQorCQkgICAgICBkb2VzIG5vdCBkZWNyeXB0IG9yLCBm b3IgdGhhdCBtYXR0ZXIsIGhhbmRsZSBUZWxuZXQuCisJCSAgICAqLworCQkgICAgaW50IGM7CisJ CSAgICBDSEFSICogcDsKKwkJICAgIHAgPSB0YnVmICsgdGJ1Zl9hdmFpbDsKKwkJICAgIGZvciAo eCA9IDA7IHggPCBuOyB4KyspIHsKKwkJCWlmICgoYyA9IHR0aW5jKDApKSA8IDApCisJCQkgIGJy ZWFrOworCQkJaWYgKCFpc190bikgewkvKiBOb3QgVGVsbmV0IC0ga2VlcCBhbGwgYnl0ZXMgKi8K KwkJCSAgICAqcCsrID0gKENIQVIpYzsKKwkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgY2hhciIsIiIs Yyk7CisjaWZkZWYgVE5DT0RFCisJCQl9IGVsc2UgewkvKiBUZWxuZXQgLSBtdXN0IGhhbmRsZSBJ QUMgYW5kIE5WVCAqLworCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBjaGFyIixja2l0b2EoaW5fc3Rh dGUpLGMpOworCQkJICAgIHN3aXRjaCAoYykgeworCQkJICAgICAgY2FzZSAweDAwOiAvKiBOVUwg Ki8KKwkJCQlpZiAoaW5fc3RhdGUgPT0gSEFWRV9DUikgeworCQkJCSAgICBkZWJ1ZyhGMDAwLCI8 PDwgU0tJUCIsIiIsYyk7CisJCQkJfSBlbHNlIHsKKwkJCQkgICAgKnArKyA9IGM7CisJCQkJICAg IGRlYnVnKEYwMDAsIjw8PCBLZWVwIiwiIixjKTsKKwkJCQl9CisJCQkJaW5fc3RhdGUgPSAwOwor CQkJCWJyZWFrOworCQkJICAgICAgY2FzZSAweDBkOiAvKiBDUiAqLworCQkJCWlmICghVEVMT1BU X1UoVEVMT1BUX0JJTkFSWSkpCisJCQkJICBpbl9zdGF0ZSA9IEhBVkVfQ1I7CisJCQkJKnArKyA9 IGM7CisJCQkJZGVidWcoRjAwMCwiPDw8IEtlZXAiLCIiLGMpOworCQkJCWJyZWFrOworI2lmZGVm IENPTU1FTlQKKwkJCSAgICAgIGNhc2UgMHgwZjogLyogQ3RybC1PICovCisJCQkgICAgICBjYXNl IDB4MTY6IC8qIEN0cmwtViAqLworCQkJCSpwKysgPSAweDE2OworCQkJCSpwKysgPSBjOworCQkJ CWRlYnVnKEYwMDAsIjw8PCBRVU9UIiwiIixjKTsKKwkJCQlicmVhazsKKyNlbmRpZiAvKiBDT01N RU5UICovCisJCQkgICAgICBjYXNlIDB4ZmY6IC8qIElBQyAqLworCQkJCWlmIChpbl9zdGF0ZSA9 PSBIQVZFX0lBQykgeworCQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgS0VFUCIsIiIsYyk7CisJCQkJ ICAgICpwKysgPSBjOworCQkJCSAgICBpbl9zdGF0ZSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkg ICAgZGVidWcoRjAwMCwiPDw8IFNLSVAiLCIiLGMpOworCQkJCSAgICBpbl9zdGF0ZSA9IEhBVkVf SUFDOworCQkJCX0KKwkJCQlicmVhazsKKwkJCSAgICAgIGRlZmF1bHQ6CS8qIEFsbCBvdGhlcnMg Ki8KKwkJCQlpZiAoaW5fc3RhdGUgPT0gSEFWRV9JQUMpIHsKKyNpZmRlZiBDT01NRU5UCisvKgor ICB0bl9kb29wKCkgd2lsbCBjb25zdW1lIGFuIHVua25vd24gbnVtYmVyIG9mIGJ5dGVzIGFuZCB3 ZSdsbCBvdmVyc2hvb3QKKyAgdGhlIGZvci1sb29wLiAgVGhlIG9ubHkgVGVsbmV0IGNvbW1hbmQg SSd2ZSBldmVyIHNlZW4gYXJyaXZlIGhlcmUgaXMKKyAgYSBEYXRhIE1hcmssIHdoaWNoIGNvbWVz IHdoZW4gdGhlIHJlbW90ZSBwcm90b2NvbCBleGl0cyBhbmQgdGhlIHJlbW90ZQorICBqb2IgcmV0 dXJucyB0byBpdHMgc2hlbGwgcHJvbXB0LiAgT24gdGhlIGFzc3VtcHRpb24gaXQncyBhIDEtYnl0 ZSBjb21tYW5kLAorICB3ZSBkb24ndCB3cml0ZSBvdXQgdGhlIElBQyBvciB0aGUgY29tbWFuZCwg YW5kIHdlIGNsZWFyIHRoZSBzdGF0ZS4gIElmCisgIHdlIGNhbGxlZCB0bl9kb29wKCkgd2UnZCBo YXZlIG5vIHdheSBvZiBrbm93aW5nIGhvdyBtYW55IGJ5dGVzIGl0IHRvb2sKKyAgZnJvbSB0aGUg aW5wdXQgc3RyZWFtLgorKi8KKwkJCQkgICAgaW50IHh4OworCQkJCSAgICB4eCA9IHRuX2Rvb3Ao KENIQVIpYyxkdXBsZXgsdHRpbmMpOworCQkJCSAgICBkZWJ1ZyhGMTExLCI8PDwgRE9PUCIsY2tj dG9hKGMpLHh4KTsKKyNlbHNlCisJCQkJICAgIGRlYnVnKEYxMDEsIjw8PCBET09QIiwiIixjKTsK KyNlbmRpZgkvKiBDT01NRU5UICovCisJCQkJICAgIGluX3N0YXRlID0gMDsKKwkJCQl9IGVsc2Ug eworCQkJCSAgICAqcCsrID0gYzsKKwkJCQkgICAgZGVidWcoRjAwMCwiPDw8IGtlZXAiLCIiLGMp OworCQkJCSAgICBpbl9zdGF0ZSA9IDA7CisJCQkJfQorCQkJICAgIH0KKyNlbmRpZgkvKiBUTkNP REUgKi8KKwkJCX0KKwkJICAgIH0KKwkJICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCisJCQkgICAg ICJ0dHB0eWNtZCByZWFkIG5ldCBbdHRpbmMgbG9vcF0gZXJybm89IiwKKwkJCSAgICAgY2tpdG9h KGVycm5vKSwKKwkJCSAgICAgIiBjb3VudD0iLAorCQkJICAgICBja2l0b2EoeCkpOworCQkgICAg ZGVidWcoRjEwMCxtc2didWYsIiIsMCk7CisJCX0gZWxzZSB7CisJCSAgICB4ID0gdHR4aW4obix0 YnVmK3RidWZfYXZhaWwpOworCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgdHR4aW4geCIsIiIs eCk7IAorCQl9CisKKwkJaWYgKHggPCAwKSB7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBy ZWFkIG5ldCBlcnJvciIsIiIseCk7CisJCSAgICBuZXRfZXJyKys7CisJCX0KKwkJdGJ1Zl9hdmFp bCArPSB4OworCQlyZWFkX25ldF9ieXRlcyArPSB4OworCSAgICB9CisKKwl9IGVsc2UKKwkgIHRu b3RzZXQrKzsKKworCWlmIChGRF9JU1NFVChwdHlmZCwgJmluKSkgewkvKiBSZWFkIGZyb20gcHR5 PyAqLworCSAgICBwc2V0Kys7CisJICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX0lTU0VUIHB0 eWZkIGluIiwiIiwwKTsKKyNpZmRlZiBQVFlfVVNFX05ERUxBWQorCSAgICBuID0gUFRZX1BCVUZf U0laRTsKKyNlbHNlCisJICAgIC8qCisJICAgICAgVGhpcyBkb2VzIG5vdCB3b3JrIG9uIG5vbmJs b2NraW5nIGNoYW5uZWxzCisJICAgICAgb24gY2VydGFpbiBwbGF0Zm9ybXMgc3VjaCBhcyBOZXRC U0QuCisJICAgICovCisJICAgIG4gPSBwdHlfY2hrKHB0eWZkKTsKKyNlbmRpZiAvKiBQVFlfVVNF X05ERUxBWSAqLworCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfY2hrKCkgbiIsIiIsbik7 IAorCisJICAgIGlmIChuIDwgMCkKKwkgICAgICBuID0gMDsKKwkgICAgaWYgKG4gPiAwKSB7CisJ CWlmIChuID4gUFRZX1BCVUZfU0laRSAtIHBidWZfYXZhaWwpCisJCSAgbiA9IFBUWV9QQlVGX1NJ WkUgLSBwYnVmX2F2YWlsOworCQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHkgcmVhZCBzaXplIGFk anVzdGVkIiwiIixuKTsgCisJCWVycm5vID0gMDsKKwkJeCA9IHJlYWQocHR5ZmQscGJ1ZitwYnVm X2F2YWlsLG4pOworI2lmZGVmIERFQlVHCisJCWlmIChkZWJsb2cpIHsKKwkJICAgIGNrbWFrbXNn KG1zZ2J1Ziw1MDAsCisJCQkgICAgICJ0dHB0eWNtZCByZWFkIHB0eSBlcnJubz0iLAorCQkJICAg ICBja2l0b2EoZXJybm8pLAorCQkJICAgICAiIGNvdW50PSIsCisJCQkgICAgIGNraXRvYSh4KSk7 CisJCSAgICBkZWJ1ZyhGMTAwLG1zZ2J1ZiwiIiwwKTsKKwkJfQorI2VuZGlmCS8qIERFQlVHICov CisKKwkJaWYgKHggPCAwICYmIGVycm5vID09IEVBR0FJTikKKwkJICB4ID0gMDsKKworCQlpZiAo eCA8IDApIHsJCS8qIFRoaXMgd29ya3Mgb24gU29sYXJpcyBhbmQgTGludXggKi8KKwkJICAgIHB0 eV9lcnIrKzsJCS8qIGJ1dCBub3QgTmV0QlNEICovCisJCSAgICBkZWJ1ZyhGMTAwLCJURVJNSU5B VElPTiBURVNUIEEiLCIiLDApOworI2lmZGVmIENPTU1FTlQKKwkJICAgIGlmIChlcnJubyA9PSBF SU8pCisJCSAgICAgIHJjID0gMTsKKyNlbmRpZgkvKiBDT01NRU5UICovCisJCSAgICBpZiAocGV4 aXRzdGF0IDwgMCkgeworCQkJc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2Zvcmtf cGlkKTsKKwkJCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEMiLCIiLHN0YXR1 cyk7CisJCQlpZiAoc3RhdHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKKwkJICAgIH0KKwkJ ICAgIGhhdmVfcHR5ID0gMDsKKwkJICAgIHggPSAwOworCQl9CisJCWlmICh4ID09IDAgJiYgIXB0 eV9lcnIpIHsgLyogVGhpcyB3b3JrcyBvbiBOZXRCU0QgYnV0ICovCisJCSAgICBkZWJ1ZyhGMTAw LCJURVJNSU5BVElPTiBURVNUIEIiLCIiLDApOworCQkgICAgc3RhdHVzID0gcGV4aXRzdGF0ID4g LTEgPyBwZXhpdHN0YXQgOgorCQkJcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2ZvcmtfcGlkKTsK KwkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEQiLCIiLHN0YXR1cyk7 CisJCSAgICBpZiAoc3RhdHVzID4gLTEpIHsKKwkJCXBleGl0c3RhdCA9IHN0YXR1czsKKwkJCXB0 eV9lcnIrKzsKKwkJCWhhdmVfcHR5ID0gMDsKKwkJICAgIH0gZWxzZSB7CQkvKiBTZWxlY3QoKSBs aWVkICovCisJCQlwdHlfZXJyID0gMDsJLyogcHR5IHN0aWxsIHRoZXJlIGJ1dCBoYXMgbm90aGlu ZyAqLworCQkJbXNsZWVwKDEwMCk7CS8qIHNsZWVwIGEgYml0ICovCisJCSAgICB9CisJCSAgICB4 ID0gMDsKKwkJfSAKKwkJLyogSG9wZWZ1bGx5IHRoZSBuZXh0IHR3byBhcmUgbm8gbG9uZ2VyIG5l ZWRlZC4uLiAqLworCQlpZiAoIXB0eV9lcnIgJiYgKAorI2lmbmRlZiBQVFlfVVNFX05ERUxBWQor CQkgICAgeCA8IDEgfHwgZXJybm8KKyNlbHNlCisJCSAgICBlcnJubyAhPSAwICYmIGVycm5vICE9 IEVBR0FJTgorI2VuZGlmIC8qIFBUWV9VU0VfTkRFTEFZICovCisJCSAgICApKSB7CisJCSAgICBk ZWJ1ZyhGMTAwLCJURVJNSU5BVElPTiBURVNUIEMiLCIiLDApOworCQkgICAgcHR5X2VycisrOwor CQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgU0VUIHB0eV9lcnIiLCIiLHB0eV9lcnIpOworCQkg ICAgaWYgKGVycm5vID09IEVJTykJLyogZXJybm8gPT0gRUlPIGlzIGxpa2UgRU9GICovCisJCSAg ICAgIHJjID0gMTsKKwkJICAgIGlmICh4IDwgMCkKKwkJICAgICAgeCA9IDA7CisJCX0KKyNpZmRl ZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKwkJaWYgKGRlYmxvZykgeworCQkgICAgcGJ1ZltwYnVm X2F2YWlsICsgeF0gPSAnXDAnOworCQkgICAgZGVidWcoRjExMSwidHRwdHljbWQgYWRkZWQgdG8g cHR5IGJ1ZmZlciIsCisJCQkgIHBidWYrcGJ1Zl9hdmFpbCx4KTsKKwkJfQorI2VuZGlmCS8qIERF QlVHICovCisjZW5kaWYJLyogQ09NTUVOVCAqLworCQlwYnVmX2F2YWlsICs9IHg7CisJCXJlYWRf cHR5X2J5dGVzICs9IHg7CisJICAgIH0gZWxzZSB7CQkJLyogbiA9PSAwIHdpdGggYmxvY2tpbmcg cmVhZHMgKi8KKwkJZGVidWcoRjEwMCwKKwkJICAgICAgIlBUWSBSRUFEIFJFVFVSTkVEIFpFUk8g QllURVMgLSBTSE9VTEQgTk9UIEhBUFBFTiIsCisJCSAgICAgICIiLDApOworCSAgICB9CisJfSBl bHNlCisJICBwbm90c2V0Kys7CisKKwkvKiBJZiB3cml0ZXMgaGF2ZSBjYXVnaHQgdXAgdG8gcmVh ZHMsIHJlc2V0IHRoZSBidWZmZXJzICovCisKKwlpZiAocGJ1Zl93cml0dGVuID09IHBidWZfYXZh aWwpCisJICBwYnVmX3dyaXR0ZW4gPSBwYnVmX2F2YWlsID0gMDsKKwlpZiAodGJ1Zl93cml0dGVu ID09IHRidWZfYXZhaWwpCisJICB0YnVmX3dyaXR0ZW4gPSB0YnVmX2F2YWlsID0gMDsKKworCS8q IFNlZSBpZiB3ZSBjYW4gZXhpdCAqLworCisJeDEgPSBwYnVmX2F2YWlsIC0gcGJ1Zl93cml0dGVu OyAKKwl4MiA9IHRidWZfYXZhaWwgLSB0YnVmX3dyaXR0ZW47CisKKwlkZWJ1ZyhGMTAxLCJ0dHB0 eWNtZCBwdHlfZXJyIExPT1AgRVhJVCBURVNUIHB0eV9lcnIiLCIiLHB0eV9lcnIpOworCWRlYnVn KEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRFU1QgeDEgW3dyaXRlIHRvIG5ldF0i LCIiLHgxKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExPT1AgRVhJVCBURVNUIHgy IFt3cml0ZSB0byBwdHldIiwiIix4Mik7CisJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBM T09QIEVYSVQgVEVTVCByYyIsIiIscmMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIg TE9PUCBFWElUIFRFU1Qgc3RhdHVzIiwiIixzdGF0dXMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21k IHB0eV9lcnIgTE9PUCBFWElUIFRFU1QgcGV4aXRzdGF0IiwiIixwZXhpdHN0YXQpOworCisJaWYg KG5ldF9lcnIpIHsJCQkvKiBOZXQgZXJyb3I/ICovCisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k IG5ldF9lcnIgTE9PUCBFWElUIFRFU1QgbmV0X2VyciIsIiIsbmV0X2Vycik7CisJICAgIGlmICho YXZlX25ldCkgeworCQlpZiAobG9jYWwpIHsKKwkJICAgIHR0Y2xvcygwKTsKKwkJICAgIHByaW50 ZigiP0Nvbm5lY3Rpb24gY2xvc2VkXG4iKTsKKwkJfQorCQloYXZlX25ldCA9IDA7CisJICAgIH0K KwkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgbmV0X2VyciBMT09QIEVYSVQgVEVTVCB4MSIsIiIs eDEpOworCSAgICBpZiAoeDEgPT0gMCkKKwkgICAgICBicmVhazsKKwl9CisJaWYgKHB0eV9lcnIp IHsJCQkvKiBQdHkgZXJyb3I/ICovCisJICAgIGlmIChoYXZlX3B0eSkgeworCQlpZiAocGV4aXRz dGF0IDwgMCkgewkJCisJCSAgICBzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9y a19waWQpOworCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRSIsIiIs c3RhdHVzKTsKKwkJICAgIGlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOworCQl9 CisJCWhhdmVfcHR5ID0gMDsKKwkgICAgfQorCSAgICBpZiAoeDEgPT0gMCAmJiB4MiA9PSAwKSB7 CS8qIElmIGJ1ZmZlcnMgYXJlIGNhdWdodCB1cCAqLworCQlyYyA9IDE7CQkJLyogc2V0IHByZWxp bWluYXJ5IHJldHVybiB0byBzdWNjZXNzICovCisJCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9l cnIgTE9PUCBFWElUIFRFU1QgcmMgMiIsIiIscmMpOworCQlicmVhazsJCQkvKiBhbmQgZXhpdCB0 aGUgbG9vcCAqLworCSAgICB9CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCAr KysgaGF2ZV9wdHkiLCIiLGhhdmVfcHR5KTsKKyAgICBpZiAoaGF2ZV9wdHkpIHsJCQkvKiBJbiBj YXNlIHNlbGVjdCgpIGZhaWxlZCAqLworI2lmZGVmIFVTRV9DS1VQVFlfQworCWVuZF9wdHkoKTsK KwljbG9zZShwdHlmZCk7CisjZWxzZQorCWNsb3NlKHNsYXZlZmQpOworCWNsb3NlKG1hc3RlcmZk KTsKKyNlbmRpZiAvKiBVU0VfQ0tVUFRZX0MgKi8KKyAgICB9CisgICAgcHR5X21hc3Rlcl9mZCA9 IC0xOworICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBwZXhpdHN0YXQiLCIiLHBleGl0c3Rh dCk7CisgICAgaWYgKHBleGl0c3RhdCA8IDApIHsJCS8qIFRyeSBvbmUgbGFzdCB0aW1lIHRvIGdl dCBzdGF0dXMgKi8KKwlzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQp OworCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEYiLCIiLHN0YXR1cyk7CisJ aWYgKHN0YXR1cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7CisgICAgfQorICAgIGRlYnVnKEYx MDEsInR0cHR5Y21kICsrKyBmaW5hbCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7CisgICAgaWYg KGRlYmxvZykgewkJCS8qIFN0YXRzIGZvciBkZWJ1ZyBsb2cgKi8KKwlkZWJ1ZyhGMTAxLCJ0dHB0 eWNtZCArKysgcHNldAkiLCIiLHBzZXQpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBwbm90 c2V0IiwiIixwbm90c2V0KTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgdHNldAkiLCIiLHRz ZXQpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyB0bm90c2V0IiwiIix0bm90c2V0KTsKKwor CWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyAgcmVhZF9wdHlfYnl0ZXMiLCIiLHJlYWRfcHR5X2J5 dGVzKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgd3JpdGVfbmV0X2J5dGVzIiwiIix3cml0 ZV9uZXRfYnl0ZXMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyAgcmVhZF9uZXRfYnl0ZXMi LCIiLHJlYWRfbmV0X2J5dGVzKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgd3JpdGVfcHR5 X2J5dGVzIiwiIix3cml0ZV9wdHlfYnl0ZXMpOworICAgIH0KKy8qCisgIElmIHdlIGdvdCB0aGUg ZXh0ZXJuYWwgcHJvdG9jb2wncyBleGl0IHN0YXR1cyBmcm9tIHdhaXRwaWQoKSwgd2UgdXNlIHRo YXQKKyAgdG8gc2V0IG91ciByZXR1cm4gY29kZS4gIElmIG5vdCwgd2UgZmFsbCBiYWNrIG9uIHdo YXRldmVyIHJjIHdhcyBwcmV2aW91c2x5CisgIHNldCB0bywgbmFtZWx5IDEgKHN1Y2Nlc3MpIGlm IHRoZSBwdHkgZm9yayBzZWVtZWQgdG8gdGVybWluYXRlLCAwIG90aGVyd2lzZS4KKyovCisgICAg aWYgKHNhdmVfc2lnY2hsZCkgewkJCS8qIFJlc3RvcmUgdGhpcyBpZiB3ZSBjaGFuZ2VkIGl0ICov CisJKFZPSUQpIHNpZ25hbChTSUdDSExELHNhdmVfc2lnY2hsZCk7CisJc2F2ZV9zaWdjaGxkID0g TlVMTDsKKyAgICB9CisgICAgbXNsZWVwKDUwMCk7CisgICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlk LFNJR0hVUCk7CS8qIEluIGNhc2UgaXQncyBzdGlsbCB0aGVyZSAqLworICAgIHB0eV9mb3JrX3Bp ZCA9IC0xOworICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGZvcmsga2lsbCBTSUdIVVAiLCIiLHgp OworICAgIGlmIChwZXhpdHN0YXQgPiAtMSkKKyAgICAgIHJjID0gKHBleGl0c3RhdCA9PSAwID8g MSA6IDApOworICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyByYyIsIiIscmMpOworICAgIGlm ICghbG9jYWwpIHsJCQkvKiBJZiBpbiByZW1vdGUgbW9kZSAqLworCWNvbnJlcygpOwkJCS8qIHJl c3RvcmUgY29uc29sZSB0byBDQlJFQUsgbW9kZSAqLworCWNvbmNiKChjaGFyKWVzY2Nocik7Cisg ICAgfQorICAgIHJldHVybihyYyk7Cit9CisjZW5kaWYJLyogTkVUUFRZICovCisjZW5kaWYJLyog U0VMRUNUICovCisKKy8qIFQgVCBSIFUgTiBDIE0gRCAgLS0gIFJlZGlyZWN0IGFuIGV4dGVybmFs IGNvbW1hbmQgb3ZlciB0aGUgY29ubmVjdGlvbi4gKi8KKworLyoKKyAgVFRSVU5DTUQgaXMgdGhl IHJvdXRpbmUgdGhhdCB3YXMgb3JpZ2luYWxseSB1c2VkIGZvciBydW5uaW5nIGV4dGVybmFsCisg IHByb3RvY29scy4gIEl0IGlzIHZlcnkgc2ltcGxlIGFuZCB3b3JrcyBmaW5lIHByb3ZpZGVkIChh KSB0aGUgY29ubmVjdGlvbgorICBpcyBub3QgZW5jcnlwdGVkLCBhbmQgKGIpIHRoZSBleHRlcm5h bCBwcm90b2NvbCB1c2VzIHN0YW5kYXJkIGkvbworICAoZmlsZSBkZXNjcmlwdG9ycyAwIGFuZCAx KSBmb3IgZmlsZSB0cmFuc2Zlci4KKyovCisKK2ludAordHRydW5jbWQocykgY2hhciAqczsgewor ICAgIFBJRF9UIHBpZDsJCQkJLyogcGlkIG9mIGxvd2VyIGZvcmsgKi8KKyAgICBpbnQgd3N0YXQ7 CQkJCS8qIGZvciB3YWl0KCkgKi8KKyAgICBpbnQgeDsKKyAgICBpbnQgc3RhdHVzcDsKKworICAg IGlmICh0dHlmZCA9PSAtMSkgeworCXByaW50ZigiP1NvcnJ5LCBkZXZpY2UgaXMgbm90IG9wZW5c biIpOworCXJldHVybigwKTsKKyAgICB9CisgICAgaWYgKG5vcHVzaCkgeworCWRlYnVnKEYxMDAs InR0cnVuY21kIGZhaWw6IG5vcHVzaCIsIiIsMCk7CisJcmV0dXJuKDApOworICAgIH0KKworI2lm ZGVmIE5FVFBUWQorLyoqKioqKioqKioqKioqKgorICBJdCBtaWdodCBhbHNvIGJlIG5lY2Vzc2Fy eSB0byB1c2UgdGhlIHB0eSByb3V0aW5lIGZvciBvdGhlciByZWFzb25zLAorICBlLmcuIGJlY2F1 c2UgdGhlIGV4dGVybmFsIHByb2dyYW0gZG9lcyBub3QgdXNlIHN0ZGlvLgorKi8KKyNpZmRlZiBO RVRDT05OCisvKgorICBJZiB3ZSBoYXZlIGEgbmV0d29yayBjb25uZWN0aW9uIHdlIHVzZSBhIGRp ZmZlcmVudCByb3V0aW5lIGJlY2F1c2UKKyAgKGEpIGlmIHRoZSBjb25uZWN0aW9uIGlzIGVuY3J5 cHRlZCwgdGhlIG1lY2hhbmlzbSB1c2VkIGhlcmUgY2FuJ3QgZGVhbAorICB3aXRoIGl0OyBhbmQg KGIpIGl0IHdvbid0IGhhbmRsZSBhbnkgbmV0d29yayBwcm90b2NvbHMgZWl0aGVyLCBlLmcuCisg IFRlbG5ldCwgUmxvZ2luLCBLNSBVLXRvLVUsIGV0Yy4gIEhvd2V2ZXIsIHRoaXMgcm91dGluZSB3 b3JrcyBtdWNoCisgIGJldHRlciAoZmFzdGVyLCBtb3JlIHRyYW5zcGFyZW50KSBvbiBzZXJpYWwg Y29ubmVjdGlvbnMgYW5kIHdoZW4KKyAgQy1LZXJtaXQgaXMgaW4gcmVtb3RlIG1vZGUgKGkuZS4g aXMgb24gdGhlIGZhciBlbmQpLgorKi8KKyAgICAvKiBGb3IgdGVzdGluZyBhbHdheXMgdXNlIHRo aXMgKi8KKyAgICBpZiAobmV0Y29ubikKKyAgICAgIHJldHVybih0dHB0eWNtZChzKSk7CisjZW5k aWYgLyogTkVUQ09OTiAqLworCisvKioqKioqKioqKioqKioqLworI2Vsc2UgIC8qIE5FVFBUWSAq LworICAgIGlmICh0dF9pc19zZWN1cmUoKSkgeworCXByaW50ZigiP1NvcnJ5LCBcCitleHRlcm5h bCBwcm90b2NvbHMgb3ZlciBzZWN1cmUgY29ubmVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aGlz IE9TLlxuIgorICAgICAgICAgICAgICApOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2Vu ZGlmCS8qIE5FVFBUWSAqLworCisgICAgY29ucmVzKCk7CQkJCS8qIE1ha2UgY29uc29sZSBub3Jt YWwgICovCisgICAgcGV4aXRzdGF0ID0gLTQ7CisgICAgaWYgKChwaWQgPSBmb3JrKCkpID09IDAp IHsJCS8qIE1ha2UgYSBjaGlsZCBmb3JrICovCisJaWYgKHByaXZfY2FuKCkpCQkJLyogQ2hpbGQ6 IHR1cm4gb2ZmIHByaXZzLiAqLworCSAgZXhpdCgxKTsKKwlkdXAyKHR0eWZkLCAwKTsJCQkvKiBH aXZlIHN0ZGluL291dCB0byB0aGUgbGluZSAqLworCWR1cDIodHR5ZmQsIDEpOworCXggPSBzeXN0 ZW0ocyk7CisJZGVidWcoRjEwMSwidHRydW5jbWQgc3lzdGVtIixzLHgpOworCV9leGl0KHggPyBC QURfRVhJVCA6IDApOworICAgIH0gZWxzZSB7CisJU0lHVFlQICgqaXN0YXQpKCksICgqcXN0YXQp KCk7CisJaWYgKHBpZCA9PSAoUElEX1QpIC0xKQkJLyogZm9yaygpIGZhaWxlZD8gKi8KKwkgIHJl dHVybigwKTsKKwlpc3RhdCA9IHNpZ25hbChTSUdJTlQsU0lHX0lHTik7IC8qIExldCB0aGUgZm9y ayBoYW5kbGUga2V5Ym9hcmQgKi8KKwlxc3RhdCA9IHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAv KiBpbnRlcnJ1cHRzIGl0c2VsZi4uLiAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIAl3aGlsZSAo KCh3c3RhdCA9IHdhaXQoJnN0YXR1c3ApKSAhPSBwaWQpICYmICh3c3RhdCAhPSAtMSkpIDsKKyNl bHNlICAvKiBOb3QgQ09NTUVOVCAqLworICAgIAl3aGlsZSAoMSkgeworCSAgICB3c3RhdCA9IHdh aXQoJnN0YXR1c3ApOworCSAgICBkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCB3YWl0IiwiIix3c3RhdCk7 CisJICAgIGlmICh3c3RhdCA9PSBwaWQgfHwgd3N0YXQgPT0gLTEpCisJICAgICAgYnJlYWs7CisJ fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworCXBleGl0c3RhdCA9IChzdGF0dXNwICYgMHhmZikg PyBzdGF0dXNwIDogc3RhdHVzcCA+PiA4OworCWRlYnVnKEYxMDEsInR0cnVuY21kIHdhaXQgc3Rh dHVzcCIsIiIsc3RhdHVzcCk7CisJZGVidWcoRjEwMSwidHRydW5jbWQgd2FpdCBwZXhpdHN0YXQi LCIiLHBleGl0c3RhdCk7CisJc2lnbmFsKFNJR0lOVCxpc3RhdCk7CQkvKiBSZXN0b3JlIGludGVy cnVwdHMgKi8KKwlzaWduYWwoU0lHUVVJVCxxc3RhdCk7CisgICAgfQorICAgIGNvbmNiKChjaGFy KWVzY2Nocik7CQkvKiBSZXN0b3JlIGNvbnNvbGUgdG8gQ0JSRUFLIG1vZGUgKi8KKyAgICByZXR1 cm4oc3RhdHVzcCA9PSAwID8gMSA6IDApOworfQorI2VuZGlmCS8qIENLX1JFRElSICovCisKK3N0 cnVjdCB0bSAqCisjaWZkZWYgQ0tfQU5TSUMKK2NtZGF0ZTJ0bShjaGFyICogZGF0ZSwgaW50IGdt dCkgICAgICAgICAvKiBkYXRlIGFzICJ5eXl5bW1kZCBoaDptbTpzcyIgKi8KKyNlbHNlCitjbWRh dGUydG0oZGF0ZSxnbXQpIGNoYXIgKiBkYXRlOyBpbnQgZ210OworI2VuZGlmCit7CisgICAgLyog ZGF0ZSBhcyAieXl5eW1tZGQgaGg6bW06c3MiICovCisgICAgc3RhdGljIHN0cnVjdCB0bSBfdG07 CisgICAgdGltZV90IG5vdzsKKworICAgIGlmIChzdHJsZW4oZGF0ZSkgIT0gMTcgfHwKKwlkYXRl WzhdICE9ICcgJyB8fAorCWRhdGVbMTFdICE9ICc6JyB8fAorCWRhdGVbMTRdICE9ICc6JykKKyAg ICAgIHJldHVybihOVUxMKTsKKworICAgIHRpbWUoJm5vdyk7CisgICAgaWYgKGdtdCkKKyAgICAg IF90bSA9ICpnbXRpbWUoJm5vdyk7CisgICAgZWxzZQorICAgICAgX3RtID0gKmxvY2FsdGltZSgm bm93KTsKKyAgICBfdG0udG1feWVhciA9IChkYXRlWzBdLScwJykqMTAwMCArIChkYXRlWzFdLScw JykqMTAwICsKKyAgICAgICAgICAgICAgICAgIChkYXRlWzJdLScwJykqMTAgICArIChkYXRlWzNd LScwJyktMTkwMDsKKyAgICBfdG0udG1fbW9uICA9IChkYXRlWzRdLScwJykqMTAgICArIChkYXRl WzVdLScwJyktMTsKKyAgICBfdG0udG1fbWRheSA9IChkYXRlWzZdLScwJykqMTAgICArIChkYXRl WzddLScwJyk7CisgICAgX3RtLnRtX2hvdXIgPSAoZGF0ZVs5XS0nMCcpKjEwICAgKyAoZGF0ZVsx MF0tJzAnKTsKKyAgICBfdG0udG1fbWluICA9IChkYXRlWzEyXS0nMCcpKjEwICArIChkYXRlWzEz XS0nMCcpOworICAgIF90bS50bV9zZWMgID0gKGRhdGVbMTVdLScwJykqMTAgICsgKGRhdGVbMTZd LScwJyk7CisKKyAgICAvKiBTaG91bGQgd2Ugc2V0IF90bS50bV9pc2RzdCB0byAtMSBoZXJlPyAq LworCisgICAgX3RtLnRtX3dkYXkgPSAwOworICAgIF90bS50bV95ZGF5ID0gMDsKKworICAgIHJl dHVybigmX3RtKTsKK30KKworI2lmZGVmIE9YT1MKKyN1bmRlZiBraWxsCisjZW5kaWYgLyogT1hP UyAqLworCisjaWZkZWYgT1hPUworaW50Citwcml2X2tpbGwocGlkLCBzaWcpIGludCBwaWQsIHNp ZzsgeworICAgIGludAlpOworCisgICAgaWYgKHByaXZfb24oKSkKKwlkZWJ1ZyhGMTAwLCJwcml2 X2tpbGwgcHJpdl9vbiBmYWlsZWQiLCIiLDApOworICAgIGkgPSBraWxsKHBpZCwgc2lnKTsKKyAg ICBpZiAocHJpdl9vZmYoKSkKKwlkZWJ1ZyhGMTAwLCJwcml2X2tpbGwgcHJpdl9vZmYgZmFpbGVk IiwiIiwwKTsKKyAgICByZXR1cm4oaSk7Cit9CisjZW5kaWYgLyogT1hPUyAqLworCisjaWZkZWYg QkVPU09SQkVCT1gKKy8qICNpZmRlZiBCRV9EUl83ICovCisvKgorICBhbGFybSgpIGZ1bmN0aW9u IG5vdCBzdXBwbGllZCB3aXRoIEJlIE9TIERSNyAtIHRoaXMgb25lIGNvbnRyaWJ1dGVkIGJ5Cisg IE5lYWwgUC4gTXVycGh5LgorKi8KKworLyoKKyAgVGhpcyBzaG91bGQgbWltaWMgdGhlIFVOSVgv UE9TSVggYWxhcm0oKSBmdW5jdGlvbiB3ZWxsIGVub3VnaCwgd2l0aCB0aGUKKyAgY2F2ZWF0IHRo YXQgb25lJ3MgU0lHQUxSTSBoYW5kbGVyIG11c3QgY2FsbCBhbGFybV9leHBpcmVkKCkgdG8gY2xl YW4gdXAgdmFycworICBhbmQgd2FpdCBmb3IgdGhlIGFsYXJtIHRocmVhZCB0byBmaW5pc2guCisq LwordW5zaWduZWQgaW50CithbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcykgeworICAgIGxvbmcg dGltZV9sZWZ0ID0gMDsKKworLyogSWYgYW4gYWxhcm0gaXMgYWN0aXZlLCB0dXJuIGl0IG9mZiwg c2F2aW5nIHRoZSB1bnVzZWQgdGltZSAqLworICAgIGlmIChhbGFybV90aHJlYWQgIT0gLTEpIHsK KyAgICAgICAgLyogV2UnbGwgYmUgZ2VuZXJvdXMgYW5kIGNvdW50IHBhcnRpYWwgc2Vjb25kcyBh cyB3aG9sZSBzZWNvbmRzLiAqLworICAgICAgICB0aW1lX2xlZnQgPSBhbGFybV9zdHJ1Y3QudGlt ZSAtCisJICAoKHN5c3RlbV90aW1lKCkgLSB0aW1lX3N0YXJ0ZWQpIC8gMTAwMDAwMC4wKTsKKwor ICAgICAgICAvKiBLaWxsIHRoZSBhbGFybSB0aHJlYWQgKi8KKyAgICAgICAga2lsbF90aHJlYWQg KGFsYXJtX3RocmVhZCk7CisKKyAgICAgICAgLyogV2UgbmVlZCB0byBjbGVhbiB1cCBhcyB0aG91 Z2ggdGhlIGFsYXJtIG9jY3VyZWQuICovCisgICAgICAgIHRpbWVfc3RhcnRlZCA9IDA7CisgICAg ICAgIGFsYXJtX3N0cnVjdC50aHJlYWQgPSAtMTsKKyAgICAgICAgYWxhcm1fc3RydWN0LnRpbWUg PSAwOworICAgICAgICBhbGFybV9leHBpcmVkKCk7CisgICAgfQorCisvKiBTZXQgYSBuZXcgYWxh cm0gY2xvY2ssIGlmIHJlcXVlc3RlZC4gKi8KKyAgICBpZiAoc2Vjb25kcyA+IDApIHsKKyAgICAg ICAgYWxhcm1fc3RydWN0LnRocmVhZCA9IGZpbmRfdGhyZWFkKE5VTEwpOworICAgICAgICBhbGFy bV9zdHJ1Y3QudGltZSA9IHNlY29uZHM7CisgICAgICAgIHRpbWVfc3RhcnRlZCA9IHN5c3RlbV90 aW1lKCk7CisgICAgICAgIGFsYXJtX3RocmVhZCA9IHNwYXduX3RocmVhZCAoZG9fYWxhcm0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsYXJtX3RocmVhZCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQl9OT1JNQUxfUFJJT1JJVFksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJmFsYXJtX3N0cnVjdAor CQkJCSAgICAgKTsKKyAgICAgICAgcmVzdW1lX3RocmVhZCAoYWxhcm1fdGhyZWFkKTsKKyAgICB9 CisKKy8qIE5vdyByZXR1cm4gW3VudXNlZCB0aW1lIHwgMF0gKi8KKyAgICByZXR1cm4gKCh1bnNp Z25lZCBpbnQpIHRpbWVfbGVmdCk7Cit9CisKKy8qCisgIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGRl cGFydHVyZSBmcm9tIFVOSVgvUE9TSVggYWxhcm0gaGFuZGxpbmcuIEluIHRoZSBjYXNlCisgIG9m IEJlJ3MgbWlzc2luZyBhbGFybSgpIGZ1bmN0aW9uLCB0aGlzIHN0dWZmIG5lZWRzIHRvIGJlIGRv bmUgaW4gdGhlIFNJR0FMUk0KKyAgaGFuZGxlci4gV2hlbiBCZSBpbXBsZW1lbnRzIGFsYXJtKCks IHRoaXMgZnVuY3Rpb24gY2FsbCBjYW4gYmUgZWxpbWluYXRlZAorICBmcm9tIHVzZXIncyBTSUdB TFJNIHNpZ25hbCBoYW5kbGVycy4KKyovCisKK3ZvaWQKK2FsYXJtX2V4cGlyZWQodm9pZCkgewor ICAgIGxvbmcgcmV0X3ZhbDsKKworICAgIGlmIChhbGFybV90aHJlYWQgIT0gLTEpIHsKKyAgICAg ICAgd2FpdF9mb3JfdGhyZWFkIChhbGFybV90aHJlYWQsICZyZXRfdmFsKTsKKyAgICAgICAgYWxh cm1fdGhyZWFkID0gLTE7CisgICAgfQorfQorCisvKgorICBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0 aGF0IHNub296ZXMgdGhlIHJlcXVpc2l0ZSBudW1iZXIgb2Ygc2Vjb25kcyBhbmQgdGhlbgorICBT SUdBTFJNcyB0aGUgY2FsbGluZyB0aHJlYWQuIE5vdGUgdGhhdCBraWxsKCkgd2FudHMgYSBwaWRf dCBhcmcsIHdoaWxzdCBCZQorICB1c2VzIHRocmVhZF9pZDsgY3VycmVudGx5IHRoZXkgYXJlIGJv dGggdHlwZGVmJ2VkIGFzIGxvbmcsIGJ1dCBJJ2xsIGRvIHRoZQorICBjYXN0IGFueXdheS4gVGhp cyBmdW5jdGlvbiBpcyBydW4gaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisqLworCitsb25nCitkb19h bGFybSAodm9pZCAqYWxhcm1fc3RydWN0KSB7CisgICAgc25vb3plICgoZG91YmxlKSAoKHN0cnVj dCBBTEFSTV9TVFJVQ1QgKikgYWxhcm1fc3RydWN0KS0+dGltZSAqIDEwMDAwMDAuMCk7CisgICAg a2lsbCAoKHBpZF90KSgoc3RydWN0IEFMQVJNX1NUUlVDVCAqKSBhbGFybV9zdHJ1Y3QpLT50aHJl YWQsIFNJR0FMUk0pOworICAgIHRpbWVfc3RhcnRlZCA9IDA7CisgICAgKChzdHJ1Y3QgQUxBUk1f U1RSVUNUICopIGFsYXJtX3N0cnVjdCktPnRocmVhZCA9IC0xOworICAgICgoc3RydWN0IEFMQVJN X1NUUlVDVCAqKSBhbGFybV9zdHJ1Y3QpLT50aW1lID0gMDsKK30KKy8qICNlbmRpZiAqLyAvKiBC RV9EUl83ICovCisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKworI2lmZGVmIFBsYW45CisKK2lu dAorcDl0dHljdGwoY2hhciBsZXR0ZXIsIGludCBudW0sIGludCBwYXJhbSkgeworICAgIGNoYXIg Y21kWzIwXTsKKyAgICBpbnQgbGVuOworCisgICAgaWYgKHR0eWN0bGZkIDwgMCkKKyAgICAgIHJl dHVybiAtMTsKKworICAgIGNtZFswXSA9IGxldHRlcjsKKyAgICBpZiAobnVtKQorICAgICAgbGVu ID0gc3ByaW50ZihjbWQgKyAxLCAiJWQiLCBwYXJhbSkgKyAxOworICAgIGVsc2UgeworCWNtZFsx XSA9IHBhcmFtOworCWxlbiA9IDI7CisgICAgfQorICAgIGlmICh3cml0ZSh0dHljdGxmZCwgY21k LCBsZW4pID09IGxlbikgeworCWNtZFtsZW5dID0gMDsKKwkvKiBmcHJpbnRmKHN0ZG91dCwgIndy b3RlICclcydcbiIsIGNtZCk7ICovCisJcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAtMTsK K30KKworaW50CitwOXR0eXBhcml0eShjaGFyIGwpIHsKKyAgICByZXR1cm4gcDl0dHljdGwoJ3An LCAwLCBsKTsKK30KKworaW50CitwOXR0aGZsb3coaW50IGZsb3csIGludCBzdGF0dXMpIHsKKyAg ICByZXR1cm4gcDl0dHljdGwoJ20nLCAxLCBzdGF0dXMpOworfQorCitpbnQKK3A5dHRzc3BkKGlu dCBjcHMpIHsKKyAgICBpZiAocDl0dHljdGwoJ2InLCAxLCBjcHMgKiAxMCkgPCAwKQorICAgICAg cmV0dXJuIC0xOworICAgIHR0eWxhc3RzcGVlZCA9IGNwcyAqIDEwOworICAgIHJldHVybiAwOwor fQorCitpbnQKK3A5b3BlbnR0eWN0bChjaGFyICp0dG5hbWUpIHsKKyAgICBjaGFyIG5hbWVbMTAw XTsKKworICAgIGlmICh0dHljdGxmZCA+PSAwKSB7CisJY2xvc2UodHR5Y3RsZmQpOworCXR0eWN0 bGZkID0gLTE7CisJdHR5bGFzdHNwZWVkID0gLTE7CisgICAgfQorICAgIHNwcmludGYobmFtZSwg IiVzY3RsIiwgdHRuYW1lKTsKKyAgICB0dHljdGxmZCA9IG9wZW4obmFtZSwgMSk7CisgICAgcmV0 dXJuIHR0eWN0bGZkOworfQorCitpbnQKK3A5Y29uY2IoKSB7CisgICAgaWYgKGNvbnNjdGxmZCA+ PSAwKSB7CisJaWYgKHdyaXRlKGNvbnNjdGxmZCwgInJhd29uIiwgNSkgPT0gNSkKKwkgIHJldHVy biAwOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK2ludAorcDljb25iaW4oKSB7CisgICAg cmV0dXJuIHA5Y29uY2IoKTsKK30KKworaW50CitwOWNvbnJlcygpIHsKKyAgICBpZiAoY29uc2N0 bGZkID49IDApIHsKKwlpZiAod3JpdGUoY29uc2N0bGZkLCAicmF3b2ZmIiwgNikgPT0gNikKKwkg IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK2ludAorcDlzbmRicmsoaW50 IG1zZWMpIHsKKyAgICBpZiAodHR5Y3RsZmQgPj0gMCkgeworCWNoYXIgY21kWzIwXTsKKwlpbnQg aSA9IHNwcmludGYoY21kLCAiayVkIiwgbXNlYyk7CisJaWYgKHdyaXRlKHR0eWN0bGZkLCBjbWQs IGkpID09IGkpCisJICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCitpbnQK K2NvbndyaXRlKGNoYXIgKmJ1ZiwgaW50IG4pIHsKKyAgICBpbnQgeDsKKyAgICBzdGF0aWMgaW50 IGxlbmd0aCA9IDA7CisgICAgc3RhdGljIGludCBob2xkaW5nY3IgPSAwOworICAgIGludCBub3Jt YWwgPSAwOworICAgIGZvciAoeCA9IDA7IHggPCBuOyB4KyspIHsKKwljaGFyIGMgPSBidWZbeF07 CisJaWYgKGMgPT0gMDA3KSB7CisJICAgIGlmIChub3JtYWwpIHsKKwkJd3JpdGUoMSwgYnVmICsg KHggLSBub3JtYWwpLCBub3JtYWwpOworCQlsZW5ndGggKz0gbm9ybWFsOworCQlub3JtYWwgPSAw OworCSAgICB9CisJICAgIC8qIHdyaXRlKG5vaXNlZmQsICIxMDAwIDMwMCIsIDgpOyAqLworCSAg ICBob2xkaW5nY3IgPSAwOworCX0gZWxzZSBpZiAoYyA9PSAnXHInKSB7CisJICAgIGlmIChub3Jt YWwpIHsKKwkJd3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwpOworCQlsZW5ndGgg Kz0gbm9ybWFsOworCQlub3JtYWwgPSAwOworCSAgICB9CisJICAgIGhvbGRpbmdjciA9IDE7CisJ fSBlbHNlIGlmIChjID09ICdcbicpIHsKKwkgICAgd3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwp LCBub3JtYWwgKyAxKTsKKwkgICAgbm9ybWFsID0gMDsKKwkgICAgbGVuZ3RoID0gMDsKKwkgICAg aG9sZGluZ2NyID0gMDsKKwl9IGVsc2UgaWYgKGMgPT0gJ1xiJykgeworCSAgICBpZiAobm9ybWFs KSB7CisJCXdyaXRlKDEsIGJ1ZiArICh4IC0gbm9ybWFsKSwgbm9ybWFsKTsKKwkJbGVuZ3RoICs9 IG5vcm1hbDsKKwkJbm9ybWFsID0gMDsKKwkgICAgfQorCSAgICBpZiAobGVuZ3RoKSB7CisJCXdy aXRlKDEsICZjLCAxKTsKKwkJbGVuZ3RoLS07CisJICAgIH0KKwkgICAgaG9sZGluZ2NyID0gMDsK Kwl9IGVsc2UgeworCSAgICBpZiAoaG9sZGluZ2NyKSB7CisJCWNoYXIgYiA9ICdcYic7CisJCXdo aWxlIChsZW5ndGgtLSA+IDApCisJCSAgd3JpdGUoMSwgJmIsIDEpOworCQlsZW5ndGggPSAwOwkv KiBjb21waWxlciBidWcgKi8KKwkgICAgfQorCSAgICBob2xkaW5nY3IgPSAwOworCSAgICBub3Jt YWwrKzsKKwl9CisgICAgfQorICAgIGlmIChub3JtYWwpIHsKKwl3cml0ZSgxLCBidWYgKyAoeCAt IG5vcm1hbCksIG5vcm1hbCk7CisJbGVuZ3RoICs9IG5vcm1hbDsKKyAgICB9CisgICAgcmV0dXJu IG47Cit9CisKK3ZvaWQKK2NvbnByaW50KGNoYXIgKmZtdCwgLi4uKSB7CisgICAgc3RhdGljIGNo YXIgYnVmWzEwMDBdOwkJLyogbm90IHNhZmUgaWYgb24gdGhlIHN0YWNrICovCisKKyAgICB2YV9s aXN0IGFwOworICAgIGludCBpOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgaSA9IHZz cHJpbnRmKGJ1ZiwgZm10LCBhcCk7CisgICAgY29ud3JpdGUoYnVmLCBpKTsKK30KKyNlbmRpZiAv KiBQbGFuOSAqLworCisvKiBmcHJpbnRmLCBwcmludGYsIHBlcnJvciByZXBsYWNlbWVudHMuLi4g Ki8KKworLyogZiBwIHIgaSBuIHQgZiAqLworCisjaWZkZWYgVU5JWAorI2lmZGVmIENLX0FOU0lD CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjZWxzZSAvKiBDS19BTlNJQyAqLworI2lmZGVmIF9fR05V Q19fCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjZWxzZQorI2luY2x1ZGUgPHZhcmFyZ3MuaD4KKyNl bmRpZgkvKiBfX0dOVUNfXyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjaWZkZWYgZnByaW50 ZgorI3VuZGVmIGZwcmludGYKK3N0YXRpYyBjaGFyIHN0cjFbNDA5Nl07CitzdGF0aWMgY2hhciBz dHIyWzQwOTZdOworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NreGZwcmludGYoRklMRSAqIGZpbGUs IGNvbnN0IGNoYXIgKiBmb3JtYXQsIC4uLikKKyNlbHNlIC8qIENLX0FOU0lDICovCitja3hmcHJp bnRmKHZhX2FsaXN0KSB2YV9kY2wKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY2t4ZnByaW50 ZiAqLyB7CisgICAgaW50IGksIGosIGxlbiwgZ290X2NyOworICAgIHZhX2xpc3QgYXJnczsKKyAg ICBpbnQgcmMgPSAwOworCisjaWZkZWYgQ0tfQU5TSUMKKyAgICB2YV9zdGFydChhcmdzLCBmb3Jt YXQpOworI2Vsc2UgLyogQ0tfQU5TSUMgKi8KKyAgICBjaGFyICogZm9ybWF0OworICAgIEZJTEUg KiBmaWxlOworICAgIHZhX3N0YXJ0KGFyZ3MpOworICAgIGZpbGUgPSB2YV9hcmcoYXJncyxGSUxF ICopOworICAgIGZvcm1hdCA9IHZhX2FyZyhhcmdzLGNoYXIgKik7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KKworICAgIGlmICghaW5zZXJ2ZXIgfHwgKGZpbGUgIT0gc3Rkb3V0ICYmIGZpbGUgIT0g c3RkZXJyICYmIGZpbGUgIT0gc3RkaW4pKSB7CisJcmMgPSB2ZnByaW50ZihmaWxlLGZvcm1hdCxh cmdzKTsKKyAgICB9IGVsc2UgeworCXVuc2lnbmVkIGludCBjOworICAgICAgICByYyA9IHZzcHJp bnRmKHN0cjEsIGZvcm1hdCwgYXJncyk7CisgICAgICAgIGxlbiA9IHN0cmxlbihzdHIxKTsKKyAg ICAgICAgaWYgKGxlbiA+PSBzaXplb2Yoc3RyMSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs ImNreGZwcmludGYoKSBidWZmZXIgb3ZlcmZsb3ciLCIiLGxlbik7CisgICAgICAgICAgICBkb2V4 aXQoQkFEX0VYSVQsMSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMCwgaiA9IDAsIGdv dF9jciA9IDA7CisJICAgICBpIDwgbGVuICYmIGogPCBzaXplb2Yoc3RyMSktMjsKKwkgICAgIGkr KywgaisrICkgeworCSAgICAvKiBXZSBjYW4ndCB1c2UgMjU1IGFzIGEgY2FzZSBsYWJlbCBiZWNh dXNlIG9mIHNpZ25lZCBjaGFycyAqLworCSAgICBjID0gKHVuc2lnbmVkKShzdHIxW2ldICYgMHhm Zik7CisjaWZkZWYgVE5DT0RFCisJICAgIGlmIChjID09IDI1NSkgeworCQlpZiAoZ290X2NyICYm ICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpCisJCSAgc3RyMltqKytdID0gJ1wwJzsKKwkJc3Ry MltqKytdID0gSUFDOworCQlzdHIyW2pdID0gSUFDOworCQlnb3RfY3IgPSAwOworCSAgICB9IGVs c2UKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkgICAgc3dpdGNoIChjKSB7CisJICAgICAgY2FzZSAn XHInOgorICAgICAgICAgICAgICAgIGlmIChnb3RfY3IKKyNpZmRlZiBUTkNPREUKKwkJICAgICYm ICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkJICAgICkK KwkJICBzdHIyW2orK10gPSAnXDAnOworICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIxW2ld OworICAgICAgICAgICAgICAgIGdvdF9jciA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJ ICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgICAgICAgIGlmICghZ290X2NyKQorCQkgIHN0cjJb aisrXSA9ICdccic7CisgICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07CisgICAgICAg ICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgICAgIGlmIChnb3RfY3IKKyNpZmRlZiBUTkNPREUKKwkJICAgICYm ICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkJICAgICkK KwkJICBzdHIyW2orK10gPSAnXDAnOworICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIxW2ld OworICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgaWYgKGdvdF9jcgorI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgICYmICFURUxP UFRfTUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAgICAgICAgICAp CisgICAgICAgICAgICBzdHIyW2orK10gPSAnXDAnOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyNp ZmRlZiBUTkNPREUKKyAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCisJ ICBja190bl9lbmNyeXB0KHN0cjIsaik7CisjZW5kaWYgLyogVE5DT0RFICovCisjZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX1NTTAorCWlmIChpbnNlcnZlciAmJiAoc3NsX2Fj dGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykpIHsKKwkgICAgLyogV3JpdGUgdXNpbmcgU1NM ICovCisgICAgICAgICAgICBjaGFyICogcCA9IHN0cjI7CisgICAgICAgICAgc3NsX3JldHJ5Ogor ICAgICAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykKKwkgICAgICByYyA9IFNTTF93cml0ZShz c2xfY29uLCBwLCBqKTsKKyAgICAgICAgICAgIGVsc2UKKwkgICAgICByYyA9IFNTTF93cml0ZSh0 bHNfY29uLCBwLCBqKTsKKwkgICAgZGVidWcoRjExMSwiY2t4ZnByaW50ZiIsIlNTTF93cml0ZSIs cmMpOworICAgICAgICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9z c2xfY29uOnRsc19jb24scmMpKSB7CisJICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAg ICAgICAgICAgICBpZiAocmMgPT0gaikKKwkJICBicmVhazsKKyAgICAgICAgICAgICAgICBwICs9 IHJjOworICAgICAgICAgICAgICAgIGogLT0gcmM7CisgICAgICAgICAgICAgICAgZ290byBzc2xf cmV0cnk7CisJICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKwkgICAgICBjYXNlIFNT TF9FUlJPUl9XQU5UX1JFQUQ6CisJICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAg ICAgICAgICAgICBpZiAocmMgIT0gMCkKKwkJICByZXR1cm4oLTEpOworCSAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisJICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorCSAg ICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorCSAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgfQorCX0gZWxzZQorI2VuZGlmIC8qIENLX1NT TCAqLworICAgICAgICBmd3JpdGUoc3RyMixzaXplb2YoY2hhciksaixzdGRvdXQpOworICAgIH0K KyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAvKiBmcHJpbnRm ICovCisKKy8qIHAgciBpIG4gdCBmICovCisKKyNpZmRlZiBwcmludGYKKyN1bmRlZiBwcmludGYK K2ludAorI2lmZGVmIENLX0FOU0lDCitja3hwcmludGYoY29uc3QgY2hhciAqIGZvcm1hdCwgLi4u KQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK2NreHByaW50Zih2YV9hbGlzdCkgdmFfZGNsCisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNreHByaW50ZiAqLyB7CisgICAgaW50IGksIGosIGxlbiwg Z290X2NyOworICAgIHZhX2xpc3QgYXJnczsKKyAgICBpbnQgcmMgPSAwOworCisjaWZkZWYgQ0tf QU5TSUMKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworI2Vsc2UgLyogQ0tfQU5TSUMgKi8K KyAgICBjaGFyICogZm9ybWF0OworICAgIHZhX3N0YXJ0KGFyZ3MpOworICAgIGZvcm1hdCA9IHZh X2FyZyhhcmdzLGNoYXIgKik7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKworICAgIGlmICghaW5z ZXJ2ZXIpIHsKKwlyYyA9IHZwcmludGYoZm9ybWF0LCBhcmdzKTsKKyAgICB9IGVsc2UgeworCXVu c2lnbmVkIGludCBjOworICAgICAgICByYyA9IHZzcHJpbnRmKHN0cjEsIGZvcm1hdCwgYXJncyk7 CisgICAgICAgIGxlbiA9IHN0cmxlbihzdHIxKTsKKyAgICAgICAgaWYgKGxlbiA+PSBzaXplb2Yo c3RyMSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNreHByaW50ZigpIGJ1ZmZlciBvdmVy ZmxvdyIsIiIsbGVuKTsKKyAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAg fQorICAgICAgICBmb3IgKGkgPSAwLCBqID0gMCwgZ290X2NyPTA7CisJICAgICBpIDwgbGVuICYm IGogPCBzaXplb2Yoc3RyMSktMjsKKwkgICAgIGkrKywgaisrICkgeworCSAgICBjID0gKHVuc2ln bmVkKShzdHIxW2ldICYgMHhmZik7CisjaWZkZWYgVE5DT0RFCisJICAgIGlmIChjID09IDI1NSkg eworCQlpZiAoZ290X2NyICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpCisJCSAgc3RyMltq KytdID0gJ1wwJzsKKwkJc3RyMltqKytdID0gSUFDOworCQlzdHIyW2pdID0gSUFDOworCQlnb3Rf Y3IgPSAwOworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkgICAgc3dpdGNoIChj KSB7CisJICAgICAgY2FzZSAnXHInOgorICAgICAgICAgICAgICAgIGlmIChnb3RfY3IKKyNpZmRl ZiBUTkNPREUKKwkJICAgICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBU TkNPREUgKi8KKwkJICAgICkKKwkJICBzdHIyW2orK10gPSAnXDAnOworICAgICAgICAgICAgICAg IHN0cjJbal0gPSBzdHIxW2ldOworICAgICAgICAgICAgICAgIGdvdF9jciA9IDE7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisJICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgICAgICAgIGlmICgh Z290X2NyKQorCQkgIHN0cjJbaisrXSA9ICdccic7CisgICAgICAgICAgICAgICAgc3RyMltqXSA9 IHN0cjFbaV07CisgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAgICAgICAgICBi cmVhazsKKwkgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChnb3RfY3IKKyNpZmRl ZiBUTkNPREUKKwkJICAgICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBU TkNPREUgKi8KKwkJICAgICkKKwkJICBzdHIyW2orK10gPSAnXDAnOworICAgICAgICAgICAgICAg IHN0cjJbal0gPSBzdHIxW2ldOworICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisJICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZ290X2NyCisj aWZkZWYgVE5DT0RFCisgICAgICAgICAgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQor I2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHN0cjJbaisr XSA9ICdcMCc7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorI2lmZGVmIFROQ09ERQorICAgICAgICBp ZiAoVEVMT1BUX01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKKwkgIGNrX3RuX2VuY3J5cHQoc3RyMixq KTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZk ZWYgQ0tfU1NMCisJaWYgKGluc2VydmVyICYmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2 ZV9mbGFnKSkgeworICAgICAgICAgICAgY2hhciAqIHAgPSBzdHIyOworCSAgICAvKiBXcml0ZSB1 c2luZyBTU0wgKi8KKyAgICAgICAgICBzc2xfcmV0cnk6CisgICAgICAgICAgICBpZiAoc3NsX2Fj dGl2ZV9mbGFnKQorCSAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24sIHAsIGopOworICAgICAg ICAgICAgZWxzZQorCSAgICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24sIHAsIGopOworCSAgICBk ZWJ1ZyhGMTExLCJja3hwcmludGYiLCJTU0xfd3JpdGUiLHJjKTsKKyAgICAgICAgICAgIHN3aXRj aCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLHJjKSkgewor CSAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgaWYgKHJjID09IGop CisJCSAgYnJlYWs7CisgICAgICAgICAgICAgICAgcCArPSByYzsKKyAgICAgICAgICAgICAgICBq IC09IHJjOworICAgICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OworCSAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfV1JJVEU6CisJICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorCSAg ICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisgICAgICAgICAgICAgICAgaWYgKHJjICE9IDAp CisJCSAgcmV0dXJuKC0xKTsKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQ OgorCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJP X1JFVFVSTjoKKwkgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAg ICAgICAgIH0KKwl9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKwkgIHJjID0gZndyaXRlKHN0 cjIsc2l6ZW9mKGNoYXIpLGosc3Rkb3V0KTsKKyAgICB9CisgICAgdmFfZW5kKGFyZ3MpOworICAg IHJldHVybihyYyk7Cit9CisjZW5kaWYgLyogcHJpbnRmICovCisKKy8qICBwIGUgciByIG8gciAg Ki8KKworI2lmZGVmIHBlcnJvcgorI3VuZGVmIHBlcnJvcgorX1BST1RPVFlQKGNoYXIgKiBja19l cnJzdHIsKFZPSUQpKTsKKyNpZmRlZiBORVhUCit2b2lkCisjZWxzZQorI2lmZGVmIENLX1NDT1Y1 Cit2b2lkCisjZWxzZQoraW50CisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNlbmRpZiAvKiBORVhU ICovCisjaWZkZWYgQ0tfQU5TSUMKK2NreHBlcnJvcihjb25zdCBjaGFyICogc3RyKQorI2Vsc2Ug LyogQ0tfQU5TSUMgKi8KK2NreHBlcnJvcihzdHIpIGNoYXIgKiBzdHI7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKy8qIGNreHBlcnJvciAqLyB7CisgICAgY2hhciAqIGVycnN0ciA9IGNrX2VycnN0 cigpOworI2lmbmRlZiBORVhUCisjaWZuZGVmIENLX1NDT1Y1CisgICAgcmV0dXJuCisjZW5kaWYg LyogQ0tfU0NPVjUgKi8KKyNlbmRpZiAvKiBORVhUICovCisgICAgICBja3hwcmludGYoIiVzJXMg JXNcbiIsc3RyLCplcnJzdHI/IjoiOiIiLGVycnN0cik7Cit9CisjZW5kaWYgLyogcGVycm9yICov CisjZW5kaWYgLyogVU5JWCAqLworCisjaWZkZWYgTUlOSVgyCisKKy8qIE1pbml4IGRvZXNuJ3Qg aGF2ZSBhIGdldHRpbWVvZmRheSBjYWxsIChidXQgTUlOSVgzIGRvZXMpLgorICogV2UgZmFrZSBv bmUgaGVyZSB1c2luZyB0aW1lKDIpCisgKi8KKworI2lmbmRlZiBNSU5JWDMKK2ludAorZ2V0dGlt ZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0cCwgc3RydWN0IHRpbWV6b25lICp0enApIHsKKyAgICB0 cC0+dHZfdXNlYyA9IDBMOwkJCS8qIENsb3NlIGVub3VnaCBmb3IgaG9yc2VzaG9lcyAqLworICAg IGlmKHRpbWUoJih0cC0+dHZfc2VjKSk9PS0xKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICByZXR1 cm4oMCk7Cit9CisjZW5kaWYJLyogTUlOSVgzICovCisKKyNpZm5kZWYgTUlOSVgzCitpbnQKK3Jl YWRsaW5rKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpeikgeworICAg IGVycm5vID0gRU5PU1lTOworICAgIHJldHVybigtMSk7Cit9CisjZW5kaWYJLyogTUlOSVgzICov CisKKyNlbmRpZiAvKiBNSU5JWDIgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVp bGQvY2tlcm1pdC05LjAuMzAyL2NrdXRpby5jLmM5OSBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9j a2VybWl0LTkuMC4zMDIvY2t1dGlvLmMuYzk5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjA1NTY0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQv Y2tlcm1pdC05LjAuMzAyL2NrdXRpby5jLmM5OQpAQCAtMCwwICsxLDE2MDUwIEBACisjZGVmaW5l IENLVVRJT19DCisKKyNpZmRlZiBhZWdpcworY2hhciAqY2t4diA9ICJBZWdpcyBDb21tdW5pY2F0 aW9ucyBzdXBwb3J0LCA5LjAuMzI2LCAyMCBBdWd1c3QgMjAxMSI7CisjZWxzZQorI2lmZGVmIFBs YW45CitjaGFyICpja3h2ID0gIlBsYW4gOSBDb21tdW5pY2F0aW9ucyBzdXBwb3J0LCA5LjAuMzI2 LCAyMCBBdWd1c3QgMjAxMSI7CisjZWxzZQorY2hhciAqY2t4diA9ICJVTklYIENvbW11bmljYXRp b25zIHN1cHBvcnQsIDkuMC4zMjYsIDIwIEF1Z3VzdCAyMDExIjsKKyNlbmRpZiAvKiBQbGFuOSAq LworI2VuZGlmIC8qIGFlZ2lzICovCisKKy8qICBDIEsgVSBUIEkgTyAgKi8KKworLyogQy1LZXJt aXQgaW50ZXJydXB0LCBjb21tdW5pY2F0aW9ucyBjb250cm9sIGFuZCBJL08gZnVuY3Rpb25zIGZv ciBVTklYICovCisKKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiAoZmRjQGNvbHVtYmlhLmVk dSksCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywg TmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCisgICAgVHJ1c3Rl ZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBB bGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9y IHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2Ns YWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAgTk9URSBUTyBDT05UUklCVVRPUlM6 IFRoaXMgZmlsZSwgYW5kIGFsbCB0aGUgb3RoZXIgQy1LZXJtaXQgZmlsZXMsIG11c3QgYmUKKyAg Y29tcGF0aWJsZSB3aXRoIEMgcHJlcHJvY2Vzc29ycyB0aGF0IHN1cHBvcnQgb25seSAjaWZkZWYs ICNlbHNlLCAjZW5kaWYsCisgICNkZWZpbmUsIGFuZCAjdW5kZWYuICBQbGVhc2UgZG8gbm90IHVz ZSAjaWYsIGxvZ2ljYWwgb3BlcmF0b3JzLCBvciBvdGhlcgorICBwcmVwcm9jZXNzb3IgZmVhdHVy ZXMgaW4gYW55IG9mIHRoZSBwb3J0YWJsZSBDLUtlcm1pdCBtb2R1bGVzLiAgWW91IGNhbiwKKyAg b2YgY291cnNlLCB1c2UgdGhlc2UgY29uc3RydWN0aW9ucyBpbiBwbGF0Zm9ybS1zcGVjaWZpYyBt b2R1bGVzIHdoZW4gdGhleQorICBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBjb21waWxlcnMvcHJlcHJv Y2Vzc29ycyB0aGF0IGNvdWxkIGJlIHVzZWQgb24gdGhhdAorICBwbGF0Zm9ybS4KKyovCisKK2V4 dGVybiBpbnQgbmV0dHlwZTsJCQkvKiBEZWZpbmVkIGluIGNrY21haS5jICovCitleHRlcm4gaW50 IGR1cGxleDsKKworLyogSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgImNrY3N5bS5oIgkJCS8qIFRo aXMgbXVzdCBnbyBmaXJzdCAgICovCisjaW5jbHVkZSAiY2tjZGViLmgiCQkJLyogVGhpcyBtdXN0 IGdvIHNlY29uZCAgKi8KKworI2lmZGVmIE9TRjEzCisjaWZkZWYgQ0tfQU5TSUMKKyNpZmRlZiBf Tk9fUFJPVE8KKyN1bmRlZiBfTk9fUFJPVE8KKyNlbmRpZiAvKiBfTk9fUFJPVE8gKi8KKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIE9TRjEzICovCisKKyNpZm5kZWYgSFBVWFBSRTY1 CisjaW5jbHVkZSA8ZXJybm8uaD4JCQkvKiBFcnJvciBudW1iZXIgc3ltYm9scyAqLworI2Vsc2UK KyNpZm5kZWYgRVJSTk9fSU5DTFVERUQKKyNpbmNsdWRlIDxlcnJuby5oPgkJCS8qIEVycm9yIG51 bWJlciBzeW1ib2xzICovCisjZW5kaWYJLyogRVJSTk9fSU5DTFVERUQgKi8KKyNlbmRpZgkvKiBI UFVYUFJFNjUgKi8KKworI2lmZGVmIF9fMzg2QlNEX18KKyNkZWZpbmUgRU5PVENPTk4gNTcKKyNl bHNlCisjaWZkZWYgX19ic2RpX18KKyNkZWZpbmUgRU5PVENPTk4gNTcKKyNlbHNlCisjaWZkZWYg X19GcmVlQlNEX18KKyNkZWZpbmUgRU5PVENPTk4gNTcKKyNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAq LworI2VuZGlmIC8qIF9fYnNkaV9fICovCisjZW5kaWYgLyogX18zODZCU0RfXyAqLworCisjaWZk ZWYgU0NPX09TUjUwNAorI2RlZmluZSBOQkJZIDgKKyNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCisK KyNpZmRlZiBQbGFuOQorI2RlZmluZSBTRUxFQ1QKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2lu Y2x1ZGUgPHNlbGVjdC5oPgorI2RlZmluZSBGRF9TRVRTSVpFICgzICogc2l6ZW9mKGxvbmcpICog OCkKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0djsKKyNlbmRpZiAvKiBQbGFuOSAqLworCisjaWZk ZWYgQ0xJWAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYgLyogQ0xJWCAqLworCisjaW5j bHVkZSAiY2tjbmV0LmgiCQkJLyogU3ltYm9scyBmb3IgbmV0d29yayB0eXBlcy4gKi8KKyNpZmRl ZiBDS19TU0wKKyNpbmNsdWRlICJja19zc2wuaCIKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworLyoK KyAgVGhlIGRpcmVjdG9yeS1yZWxhdGVkIGluY2x1ZGVzIGFyZSBoZXJlIGJlY2F1c2Ugd2UgbmVl ZCB0byB0ZXN0IHNvbWUKKyAgZmlsZS1zeXN0ZW0tcmVsYXRlZCBzeW1ib2xzIHRvIGZpbmQgb3V0 IHdoaWNoIHN5c3RlbSB3ZSdyZSBiZWluZyBjb21waWxlZAorICB1bmRlci4gIEZvciBleGFtcGxl LCBNQVhOQU1MRU4gaXMgZGVmaW5lZCBpbiBCU0Q0LjIgYnV0IG5vdCA0LjEuCisqLworI2lmZGVm IFNESVJFTlQJCQkJLyogRGlyZWN0b3J5IGJpdHMuLi4gKi8KKyNkZWZpbmUgRElSRU5UCisjZW5k aWYgLyogU0RJUkVOVCAqLworCisjaWZkZWYgWE5ESVIKKyNpbmNsdWRlIDxzeXMvbmRpci5oPgor I2Vsc2UgLyogIVhORElSICovCisjaWZkZWYgTkRJUgorI2luY2x1ZGUgPG5kaXIuaD4KKyNlbHNl IC8qICFORElSLCAhWE5ESVIgKi8KKyNpZmRlZiBSVFUKKyNpbmNsdWRlICIvdXNyL2xpYi9uZGly LmgiCisjZWxzZSAvKiAhUlRVLCAhTkRJUiwgIVhORElSICovCisjaWZkZWYgRElSRU5UCisjaWZk ZWYgU0RJUkVOVAorI2luY2x1ZGUgPHN5cy9kaXJlbnQuaD4KKyNlbHNlCisjaW5jbHVkZSA8ZGly ZW50Lmg+CisjZW5kaWYgLyogU0RJUkVOVCAqLworI2Vsc2UgLyogIVJUVSwgIU5ESVIsICFYTkRJ UiwgIURJUkVOVCwgaS5lLiBhbGwgb3RoZXJzICovCisjaW5jbHVkZSA8c3lzL2Rpci5oPgorI2Vu ZGlmIC8qIERJUkVOVCAqLworI2VuZGlmIC8qIFJUVSAqLworI2VuZGlmIC8qIE5ESVIgKi8KKyNl bmRpZiAvKiBYTkRJUiAqLworCisjaWZkZWYgUU5YCisjaW5jbHVkZSA8c3lzL2Rldi5oPgorI2Vu ZGlmIC8qIFFOWCAqLworCisjaWZkZWYgSFBVWDUKKyNpZm5kZWYgVENQU09DS0VUCisvKiBJIGRv bid0IGtub3cgd2h5IHRoaXMgaXMgbmVlZGVkIGhlcmUgc2luY2Ugd2UgbmV2ZXIgcmVmZXJlbmNl IGJ6ZXJvKCkuICovCisvKiBCdXQgd2l0aG91dCBpdCBDLUtlcm1pdCB3b24ndCBsaW5rIGluIGFu IEhQLVVYIDUueHggbm9uLVRDUCBidWlsZC4gKi8KK3ZvaWQKK2J6ZXJvKHMsbikgY2hhciAqczsg aW50IG47IHsKKyAgICBleHRlcm4gY2hhciAqIG1lbXNldCgpOworICAgIG1lbXNldChzLDAsbik7 Cit9CisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogSFBVWDUgKi8KKworLyogRGVm aW5pdGlvbiBvZiBIWiwgdXNlZCBpbiBtc2xlZXAoKSAqLworCisjaWZkZWYgTUlQUworI2RlZmlu ZSBIWiAoIDEwMDAgLyBDTE9DS19USUNLICkKKyNlbHNlICAvKiBNSVBTICovCisjaWZkZWYgQVRU U1YKKyNpZm5kZWYgTkFQCisjaWZkZWYgVFJTMTYKKyNkZWZpbmUgSFogKCAxMDAwIC8gQ0xPQ0tf VElDSyApCisjZW5kaWYgLyogVFJTMTYgKi8KKyNpZmRlZiBOQVBIQUNLCisjZGVmaW5lIG5hcCh4 KSAodm9pZClzeXNjYWxsKDMxMTIsICh4KSkKKyNkZWZpbmUgTkFQCisjZW5kaWYgLyogTkFQSEFD SyAqLworI2VuZGlmIC8qIE5BUCAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogTUlQ UyAqLworCisjaWZkZWYgTV9VTklYCisjdW5kZWYgTkdST1VQU19NQVgJCS8qIFByZXZlbnQgbXVs dGlwbGUgZGVmaW5pdGlvbiB3YXJuaW5ncyAqLworI2VuZGlmIC8qIE1fVU5JWCAqLworCisvKgor ICBOT1RFOiBIUC1VWCA4LjAgaGFzIGEgPHN5cy9wb2xsLmg+LCBidXQgdGhlcmUgaXMgbm8gY29y cmVzcG9uZGluZworICBsaWJyYXJ5IHJvdXRpbmUsIHNvIF9wb2xsIGNvbWVzIHVwIHVuZGVmaW5l ZCBhdCBsaW5rIHRpbWUuCisqLworI2lmZGVmIENLX1BPTEwKKyNpZm5kZWYgQUlYUlMJCQkvKiBJ Qk0gQUlYIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgKi8KKyNpbmNsdWRlIDxwb2xsLmg+CQkvKiAi c3RhbmRhcmQiIChTVklEKSBpL28gbXVsdGlwbGV4aW5nLCBldGMgKi8KKyNlbHNlIC8qIEFJWFJT ICovCisjaWZkZWYgU1ZSNAkJCS8qIEFJWCAzLjIgaXMgbGlrZSBTVklELi4uICovCisjaW5jbHVk ZSA8cG9sbC5oPgorI2Vsc2UJCQkJLyogQnV0IEFJWCAzLjEgaXMgbm90IC4uLiAqLworI2luY2x1 ZGUgPHN5cy9wb2xsLmg+CQkvKiBUaGUgaW5jbHVkZSBmaWxlIGlzIGluIGluY2x1ZGUvc3lzICov CisjZGVmaW5lIGV2ZW50cyByZXFldmVudHMJLyogQW5kIGl0IGRvZXMgbm90IG1hcCBJQk0tc3Bl Y2lmaWMgbWVtYmVyICovCisjZGVmaW5lIHJldmVudHMgcnRuZXZlbnRzCS8qIG5hbWVzIHRvIHRo ZSBTeXN0ZW0gViBlcXVpdmFsZW50cyAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBB SVhSUyAqLworI2VuZGlmIC8qIENLX1BPTEwgKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPiAgICAg ICAgICAgICAgICAgICAgIC8qIFNpZ25hbHMgKi8KKworLyogRm9yIHNldGptcCBhbmQgbG9uZ2pt cCAqLworCisjaWZuZGVmIFpJTE9HCisjaW5jbHVkZSA8c2V0am1wLmg+CisjZWxzZQorI2luY2x1 ZGUgPHNldHJldC5oPgorI2VuZGlmIC8qIFpJTE9HICovCisKKy8qCisgIFRoZSBmb2xsb3dpbmcg dGVzdCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIDQuMSBCU0QgYW5kIDQuMiAmIGxhdGVyLgorICBJ ZiB5b3UgaGF2ZSBhIDQuMUJTRCBzeXN0ZW0gd2l0aCB0aGUgRElSRU5UIGxpYnJhcnksIHRoaXMg dGVzdCBjb3VsZAorICBtaXN0YWtlbmx5IGRpYWdub3NlIDQuMkJTRCBhbmQgdGhlbiBsYXRlciBl bmFibGUgdGhlIHVzZSBvZiBzeXN0ZW0gY2FsbHMKKyAgdGhhdCBhcmVuJ3QgZGVmaW5lZC4gIElm IGluZGVlZCB0aGVyZSBhcmUgc3VjaCBzeXN0ZW1zLCB3ZSBjYW4gdXNlIHNvbWUKKyAgb3RoZXIg d2F5IG9mIHRlc3RpbmcgZm9yIDQuMUJTRCwgb3IgYWRkIHlldCBhbm90aGVyIGNvbXBpbGUtdGlt ZSBzd2l0Y2guCisqLworI2lmZGVmIEJTRDQKKyNpZmRlZiBNQVhOQU1MRU4KKyNpZm5kZWYgRlQy MQkJCQkvKiBFeGNlcHQgZm9yIEZvcnR1bmUuICovCisjaWZuZGVmIEZUMTgKKyNpZm5kZWYgQkVM TFYxMAkJCQkvKiBBbmQgQmVsbCBMYWJzIFJlc2VhcmNoIFVOSVggVjEwICovCisjZGVmaW5lIEJT RDQyCisjZW5kaWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIEZUMTggKi8KKyNlbmRpZiAvKiBG VDIxICovCisjZW5kaWYgLyogTUFYTkFNTEVOICovCisjZW5kaWYgLyogQlNENCAqLworCisjaWZk ZWYgU1VOT1M0MQkJCQkvKiBGcm9tIENocmlzdGlhbiBDb3J0aSAqLworI2RlZmluZSBCU0Q0NE9S UE9TSVgJCQkvKiBVbmkgU3R1dHRnYXJ0ICovCisjZGVmaW5lIFNWT1JQT1NJWAkJCS8qIEZlYnJ1 YXJ5IDIwMTAgKi8KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+ CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYJLyogU1VO T1M0MSAqLworCisjaWZkZWYgU05JNTQyCisjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CQkJLyogMjk5 IGZvciBGSU9OUkVBRCAqLworI2VuZGlmCS8qIFNOSTU0MiAqLworCisvKgorICBNaW5peCAyLjAg c3VwcG9ydCBhZGRlZCBieSBUZXJyeSBNY0Nvbm5lbGwsCisgIFN5cmFjdXNlIFVuaXZlcnNpdHkg PHRtY0BiYXJueWFyZC5zeXIuZWR1PgorICBObyBtb3JlIHNndHR5IGludGVyZmFjZSwgcG9zaXgg Y29tcGxpYW50LgorKi8KKyNpZmRlZiBNSU5JWDIKKyNkZWZpbmUgX01JTklYICAgLyogTmVlZGVk IGZvciBzb21lIE1pbml4IGhlYWRlciBmaWxlcyAqLworI2RlZmluZSBCU0Q0NE9SUE9TSVgKKyNk ZWZpbmUgU1ZPUlBPU0lYCisjaWZuZGVmIE1JTklYMworI2RlZmluZSBEQ0xUSU1FVkFMCisjZW5k aWYJLyogTUlOSVgzICovCisjZGVmaW5lIE5PRklMRUgKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K KyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8 bGltaXRzLmg+CisjdW5kZWYgVElPQ0dFVEMgICAgLyogZGVmaW5lZCBpbiBzeXMvaW9jdGwuaCwg YnV0IG5vdCByZWFsbHkgc3VwcG9ydGVkICovCisjZGVmaW5lIFRBTkRFTSAwCisjZW5kaWYgLyog TUlOSVgyICovCisKKy8qCisgTUlOSVggMS4wIHN1cHBvcnQgYWRkZWQgYnkgQ2hhcmxlcyBIZWRy aWNrLAorIFJ1dGdlcnMgVW5pdmVyc2l0eSA8aGVkcmlja0BhcmFtaXMucnV0Z2Vycy5lZHU+Lgor IE1JTklYIGFsc28gaGFzIFY3IGVuYWJsZWQuCisqLworI2lmZGVmIE1JTklYCisjZGVmaW5lIFRB TkRFTSAwCisjZGVmaW5lIE1ZUkVBRAorI2RlZmluZSBOT1NZU0lPQ1RMSAorI2luY2x1ZGUgPGxp bWl0cy5oPgorI2VuZGlmIC8qIE1JTklYICovCisKKyNpZmRlZiBDS19SRURJUgkJLyogPHN5cy93 YWl0Lmg+IG5lZWRlZCBvbmx5IGZvciBSRURJUkVDVCBjb21tYW5kLiAqLworLyoKKyAgSWYgYW55 Ym9keSBjYW4gZmlndXJlIG91dCBob3cgdG8gbWFrZSB0aGlzIHdvcmsgd2l0aCBOZVhUU1RFUCwg YmUKKyAgbXkgZ3Vlc3QhICAoTmVYVEJsYWgvTmVYVEJsYWgvYnNkL3N5cy93YWl0LmggZG9lcyBu b3QgZGVmaW5lIFdFWElUU1RBVFVTKQorKi8KKyNpZm5kZWYgQ0tfV0FJVF9ICQkJLyogSWYgd2Fp dC5oIG5vdCBhbHJlYWR5IGluY2x1ZGVkLi4uICovCisjaWZkZWYgT1NGCQkJCS8qIGZvcmNlIE9T RiB0byBzZWxlY3QgUE9TSVggd2FpdCAqLworI2lmZGVmIF9CU0QJCQkJLyogaW5zdGVhZCBvZiBC U0QgKHNlZSBja2NkZWIuaCkgKi8KKyNkZWZpbmUgQ0tfT1NGX0JTRAorI3VuZGVmIF9CU0QKKyNl bmRpZiAvKiBfQlNEICovCisjZW5kaWYgLyogT1NGICovCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4J CQkvKiBJbmNsdWRlIGl0ICovCisjaWZkZWYgT1NGCisjaWZkZWYgQ0tfT1NGX0JTRAorI2RlZmlu ZSBfQlNECQkJCS8qIFJlc3RvcmUgaXQgKi8KKyN1bmRlZiBDS19PU0ZfQlNECisjZW5kaWYgLyog Q0tfT1NGX0JTRCAqLworI2VuZGlmIC8qIE9TRiAqLworI2VuZGlmIC8qIENLX1dBSVRfSCAqLwor I2VuZGlmIC8qIENLX1JFRElSICovCisKKyNpbmNsdWRlICJja3V2ZXIuaCIJCQkvKiBWZXJzaW9u IGhlcmFsZCAqLworY2hhciAqY2t4c3lzID0gSEVSQUxEOworCisjaWZkZWYgQ0tfVVRTTkFNRQor I2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisKKyNpZmRlZiBUUlU2NAkJCQkvKiBUcnU2NCBVTklY IDQuMCBhbmQgbGF0ZXIgKi8KKy8qIFZlcmlmaWVkIG9uIFRydTY0IDQuMEYgLSBtaWdodCBicmVh ayBvbiA0LjBFIG9yIGVhcmxpZXIgKi8KKyNpbmNsdWRlIDxzeXMvc3lzaW5mby5oPgkJLyogKGRv bid0IGtub3cgYWJvdXQgT1NGLzEgb3IgRFUpICovCisjaW5jbHVkZSA8bWFjaGluZS9oYWxfc3lz aW5mby5oPgorI2VuZGlmIC8qIFRSVTY0ICovCisKKyNpZmRlZiBTT0xBUklTMjUJCQkvKiBTb2xh cmlzIDIuNSBhbmQgbGF0ZXIgKi8KKyNpbmNsdWRlIDxzeXMvc3lzdGVtaW5mby5oPgkJLyogKGRv bid0IGtub3cgYWJvdXQgZWFybGllciBvbmVzKSAqLworI2VuZGlmIC8qIFNPTEFSSVMyNSAqLwor CisjaWZkZWYgVVc3CisjaWZuZGVmIFNZU19OTUxOCisjZGVmaW5lIFNZU19OTUxOIDI1NworI2Vu ZGlmIC8qIE5NTE4gKi8KKyNlbmRpZiAvKiBVVzcgKi8KKyNpZmRlZiBIUFVYOVBMVVMKK3N0YXRp YyBpbnQgaHBpczgwMCA9IDA7CisjZW5kaWYgLyogSFBVWDlQTFVTICovCisjaWZkZWYgU1lTX05N TE4KKyNkZWZpbmUgQ0tfU1lTTk1MTiBTWVNfTk1MTgorI2Vsc2UKKyNpZmRlZiBfU1lTX05NTE4K KyNkZWZpbmUgQ0tfU1lTTk1MTiBfU1lTX05NTE4KKyNlbHNlCisjaWZkZWYgVVRTTEVOCisjZGVm aW5lIENLX1NZU05NTE4gVVRTTEVOCisjZWxzZQorI2RlZmluZSBDS19TWVNOTUxOIDMxCisjZW5k aWYgLyogVVRTTEVOICovCisjZW5kaWYgLyogX1NZU19OTUxOICovCisjZW5kaWYgLyogU1lTX05N TE4gKi8KK2NoYXIgdW5tX21jaFtDS19TWVNOTUxOKzFdID0geyAnXDAnLCAnXDAnIH07CitjaGFy IHVubV9tb2RbQ0tfU1lTTk1MTisxXSA9IHsgJ1wwJywgJ1wwJyB9OworY2hhciB1bm1fbmFtW0NL X1NZU05NTE4rMV0gPSB7ICdcMCcsICdcMCcgfTsKK2NoYXIgdW5tX3JlbFtDS19TWVNOTUxOKzFd ID0geyAnXDAnLCAnXDAnIH07CitjaGFyIHVubV92ZXJbQ0tfU1lTTk1MTisxXSA9IHsgJ1wwJywg J1wwJyB9OworI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KKworI2lmZGVmIENJRQorI2luY2x1ZGUg PHN0YXQuaD4JCQkvKiBGb3IgY2hhc2luZyBzeW1saW5rcywgZXRjLiAqLworI2Vsc2UKKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmIC8qIENJRSAqLworCisjaWZkZWYgUU5YCQkJCS8qIDI5 OSAqLworI2lmbmRlZiBJWEFOWQorI2RlZmluZSBJWEFOWSAwCisjZW5kaWYJLyogSVhBTlkgKi8K KyNlbmRpZgkvKiBRTlggKi8KKworLyogVVVDUCBsb2NrZmlsZSBtYXRlcmlhbC4uLiAqLworCisj aWZuZGVmIE5PVVVDUAorI2lmZGVmIFVTRVRUWUxPQ0sKKyNpZmRlZiBIQVZFX0xPQ0tERVYJCQkv KiBSZWQgSGF0IGJhdWRib3kvbG9ja2RldiAqLworLyoKKyAgV2F0Y2ggb3V0OiBiYXVkYm95Lmgg cmVmZXJlbmNlcyBvcGVuKCkgd2l0aG91dCBtYWtpbmcgc3VyZSBpdCBoYXMgYmVlbgorICBkZWNs YXJlZCwgcmVzdWx0aW5nIGluIHdhcm5pbmdzIG9uIGF0IGxlYXN0IFJlZCBIYXQgNy4zLiAgSXQn cyBkZWNsYXJlZCBpbgorICBmY250bC5oLCBidXQgd2UgZG9uJ3QgaW5jbHVkZSB0aGF0IHVudGls IGxhdGVyLiAgSW4gdGhpcyBjYXNlIG9ubHksIHdlCisgIGluY2x1ZGUgaXQgaGVyZSwgYW5kIHRo ZW4gdGhlIHNlY29uZCBpbmNsdWRlIGlzIGhhcm1sZXNzIGJlY2F1c2UgaW4gUmVkIEhhdAorICBM aW51eCAodGhlIG9ubHkgcGxhY2Ugd2hlcmUgeW91IGZpbmQgYmF1ZGJveS5oKSBmY250bC5oIGlz IHByb3RlY3RlZCBmcm9tCisgIG11bHRpcGxlIGluY2x1c2lvbiBieSBfRkNOVExfSC4gICAtIGZk YywgMTAgTWF5IDIwMDQuCisKKyAgTk9URTogQWx0aG91Z2ggTGludXggL3Vzci9zYmluL2xvY2tk ZXYgb2J2aWF0ZXMgdGhlIG5lZWQgZm9yIHNldHVpZCBvcgorICBzZXRnaWQgYml0cyB0byBhY2Nl c3MgdGhlIGxvY2tmaWxlLCBDLUtlcm1pdCB3aWxsIHN0aWxsIG5lZWQgdGhlbSB0byBhY2Nlc3MK KyAgdGhlIHNlcmlhbCBwb3J0IGl0c2VsZiB1bmxlc3MgdGhlIHBvcnQgaXMgb3BlbiBmb3Igd29y bGQgcmVhZC93cml0ZS4KKyAgTm9ybWFsbHkgc2V0Z2lkIHV1Y3AgZG9lcyB0aGUgdHJpY2suCisK KyAgRXh0cmE6IEhBVkVfTE9DS0RFViBoYXMgYmVlbiBhZGRlZCBhbHMgb3BlblN1U0UgPj0gMTEu MyBkb2Vzbid0IHVzZSBiYXVkYm95CisgIGJ1dCB0dHlsb2NrLiAgLSBqYiwgMjYgSnVsIDIwMTAK KyovCisjaW5jbHVkZSA8ZmNudGwuaD4JCQkvKiBUaGlzIGhhcyB0byBjb21lIGJlZm9yZSBiYXVk Ym95ICovCisjaWZkZWYgSEFWRV9CQVVEQk9ZCQkJLyogUmVkIEhhdCBiYXVkYm95L2xvY2tkZXYg Ki8KKyNpbmNsdWRlIDxiYXVkYm95Lmg+CisjZWxzZSAgLyogIUhBVkVfQkFVREJPWSAqLwkJLyog b3BlblN1U0UgbG9jayB2aWEgdHR5bG9jayAqLworI2luY2x1ZGUgPHR0eWxvY2suaD4KKyNlbmRp ZiAgLyogSEFWRV9CQVVEQk9ZICovCisjZGVmaW5lIExPQ0tfRElSICIvdmFyL2xvY2siCQkvKiAo ZXZlbiB0aG91Z2ggd2UgZG9uJ3QgY2FyZSkgKi8KKworI2Vsc2UgIC8qICFIQVZFX0xPQ0tERVYg Ki8KKworI2lmZGVmIFVTRV9VVV9MT0NLCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxs aWJ1dGlsLmg+CQkJLyogRnJlZUJTRCAqLworI2Vsc2UKKyNpbmNsdWRlIDx1dGlsLmg+CQkJLyog T3BlbkJTRCAqLworI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLworI2VuZGlmIC8qIF9fRnJlZUJT RCAqLworI2VuZGlmIC8qIFVTRV9VVV9MT0NLICovCisjZWxzZSAgLyogVVNFVFRZTE9DSyAqLwor CisvKiBOYW1lIG9mIFVVQ1AgdHR5IGRldmljZSBsb2NrZmlsZSAqLworCisjaWZkZWYgTElOVVhG U1NUTkQKKyNpZm5kZWYgSERCVVVDUAorI2RlZmluZSBIREJVVUNQCisjZW5kaWYgLyogSERCVVVD UCAqLworI2VuZGlmIC8qIExJTlVYRlNTVE5EICovCisKKyNpZmRlZiBBQ1VDTlRSTAorI2RlZmlu ZSBMQ0tESVIKKyNlbmRpZiAvKiBBQ1VDTlRSTCAqLworCisvKgorICBQSURTVFJJTkcgbWVhbnMg dXNlIEFTQ0lJIHN0cmluZyB0byByZXByZXNlbnQgcGlkIGluIGxvY2tmaWxlLgorKi8KKyNpZm5k ZWYgUElEU1RSSU5HCisjaWZkZWYgSERCVVVDUAorI2RlZmluZSBQSURTVFJJTkcKKyNlbHNlCisj aWZkZWYgQlNENDQKKyNkZWZpbmUgUElEU1RSSU5HCisjZWxzZQorI2lmZGVmIFJUQUlYCisjZGVm aW5lIFBJRFNUUklORworI2Vsc2UKKyNpZmRlZiBBSVhSUworI2RlZmluZSBQSURTVFJJTkcKKyNl bHNlCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZpbmUgUElEU1RSSU5HCisjZW5kaWYgLyogQ09IRVJF TlQgKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8qIFJUQUlYICovCisjZW5kaWYgLyog QlNENDQgKi8KKyNlbmRpZiAvKiBIREJVVUNQICovCisjZW5kaWYgLyogUElEU1RSSU5HICovCisK Ky8qIE5vdyB0aGUgUElEU1RSSU5HIGV4Y2VwdGlvbnMuLi4gKi8KKworI2lmZGVmIFBJRFNUUklO RworI2lmZGVmIEhQVVgKKyN1bmRlZiBQSURTVFJJTkcKKyNlbmRpZiAvKiBIUFVYICovCisjZW5k aWYgLyogUElEU1RSSU5HICovCisKKyNpZmRlZiBfX2JzZGlfXwkJCQkvKiBCU0RJIChhdCBsZWFz dCB0aHJ1IDEuMSkgKi8KKyNpZmRlZiBQSURTVFJJTkcKKyN1bmRlZiBQSURTVFJJTkcKKyNlbmRp ZiAvKiBQSURTVFJJTkcgKi8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLworCisjaWZkZWYgT1NGMzIJ CQkJLyogRGlnaXRhbCBVTklYIChPU0YvMSkgMy4yICovCisjaWZkZWYgUElEU1RSSU5HCisjdW5k ZWYgUElEU1RSSU5HCisjZW5kaWYgLyogUElEU1RSSU5HICovCisjZW5kaWYgLyogT1NGMzIgKi8K KworLyoKKyAgTE9DS19ESVIgaXMgdGhlIG5hbWUgb2YgdGhlIGxvY2tmaWxlIGRpcmVjdG9yeS4K KyAgSWYgTE9DS19ESVIgaXMgYWxyZWFkeSBkZWZpbmVkIChlLmcuIG9uIGNvbW1hbmQgbGluZSks IHdlIGRvbid0IGNoYW5nZSBpdC4KKyovCisKKyNpZm5kZWYgTE9DS19ESVIKKyNpZmRlZiBNQUNP U1gKKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9jayIKKyNlbmRpZiAvKiBNQUNPU1gg Ki8KKyNlbmRpZi8qIExPQ0tfRElSICovCisKKyNpZm5kZWYgTE9DS19ESVIKKyNpZmRlZiBCU0Q0 NAorI2lmZGVmIF9fMzg2QlNEX18KKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9jayIK KyNlbHNlCisjaWZkZWYgX19GcmVlQlNEX18KKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bvb2wv bG9jayIKKyNlbHNlCisjaWZkZWYgX19OZXRCU0RfXworI2RlZmluZSBMT0NLX0RJUiAiL3Zhci9z cG9vbC9sb2NrIgorI2Vsc2UKKyNpZmRlZiBfX09wZW5CU0RfXworI2RlZmluZSBMT0NLX0RJUiAi L3Zhci9zcG9vbC9sb2NrIgorI2Vsc2UKKy8qIFNvIHdoaWNoIG9uZXMgaXMgdGhpcyBmb3I/ICov CisvKiBQcm9iYWJseSBvcmlnaW5hbCA0LjRCU0Qgb24gVmFuZ29naCAqLworLyogUGx1cyB3aG8g a25vd3MgYWJvdXQgTWFjIE9TIFguLi4gSXQgZG9lc24ndCBldmVuIGhhdmUgYSBjdSBwcm9ncmFt ICovCisjZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29sL3V1Y3AiCisjZW5kaWYgLyogX19PcGVu QlNEX18gKi8KKyNlbmRpZiAvKiBfX05ldEJTRF9fICovCisjZW5kaWYgLyogX19GcmVlQlNEX18g Ki8KKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisjZWxzZQorI2lmZGVmIERHVVg0MzAKKyNkZWZp bmUgTE9DS19ESVIgIi92YXIvc3Bvb2wvbG9ja3MiCisjZWxzZQorI2lmZGVmIEhQVVgxMAorI2Rl ZmluZSBMT0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKKyNlbHNlCisjaWZkZWYgUlRBSVgJCQkJ LyogSUJNIFJUIFBDIEFJWCAyLjIuMSAqLworI2RlZmluZSBMT0NLX0RJUiAiL2V0Yy9sb2NrcyIK KyNlbHNlCisjaWZkZWYgQUlYUlMKKyNkZWZpbmUgTE9DS19ESVIgIi9ldGMvbG9ja3MiCisjZWxz ZQorI2lmZGVmIElTSUlJCisjZGVmaW5lIExPQ0tfRElSICIvZXRjL2xvY2tzIgorI2Vsc2UKKyNp ZmRlZiBIREJVVUNQCisjaWZkZWYgTV9TWVM1CisjZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29s L3V1Y3AiCisjZWxzZQorI2lmZGVmIE1fVU5JWAorI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9v bC91dWNwIgorI2Vsc2UKKyNpZmRlZiBTVlI0CisjZGVmaW5lIExPQ0tfRElSICIvdmFyL3Nwb29s L2xvY2tzIgorI2Vsc2UKKyNpZmRlZiBTVU5PUzQKKyNkZWZpbmUgTE9DS19ESVIgIi92YXIvc3Bv b2wvbG9ja3MiCisjZWxzZQorI2lmZGVmIExJTlVYRlNTVE5ECisjZGVmaW5lIExPQ0tfRElSICIv dmFyL2xvY2siOworI2Vsc2UKKyNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvbG9ja3MiCisj ZW5kaWYgLyogTElOVVhGU1NUTkQgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBT VlI0ICovCisjZW5kaWYgLyogTV9VTklYICovCisjZW5kaWYgLyogTV9TWVM1ICovCisjZWxzZQor I2lmZGVmIExDS0RJUgorI2RlZmluZSBMT0NLX0RJUiAiL3Vzci9zcG9vbC91dWNwL0xDSyIKKyNl bHNlCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZpbmUgTE9DS19ESVIgIi91c3Ivc3Bvb2wvdXVjcCIK KyNlbHNlCisjZGVmaW5lIExPQ0tfRElSICIvdXNyL3Nwb29sL3V1Y3AiCisjZW5kaWYgLyogQ09I RVJFTlQgKi8KKyNlbmRpZiAvKiBMQ0tESVIgKi8KKyNlbmRpZiAvKiBIREJVVUNQICovCisjZW5k aWYgLyogSVNJSUkgKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworI2VuZGlmIC8qIFJUQUlYICovCisj ZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyogREdVWDQzMCAqLworI2VuZGlmIC8qIEJTRDQ0 ICovCisjZW5kaWYgLyogIUxPQ0tfRElSIChvdXRzaWRlIGlmbmRlZikgKi8KKworI2lmZGVmIE9T RjIJCQkJLyogT1NGLzEgMi4wIG9yIGxhdGVyICovCisjaWZkZWYgTE9DS19ESVIJCQkJLyogKG1h eWJlIDEueCB0b28sIHdobyBrbm93cy4uLikgKi8KKyN1bmRlZiBMT0NLX0RJUgorI2RlZmluZSBM T0NLX0RJUiAiL3Zhci9zcG9vbC9sb2NrcyIKKyNlbmRpZiAvKiBMT0NLX0RJUiAqLworI2VuZGlm IC8qIE9TRjIgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIFNvcnJ5IG5vIG1vcmUgbG9ja2YoKSAt LSB3ZSBsb2NrIGZpcnN0IGFuZCBUSEVOIG9wZW4gdGhlIGRldmljZS4gKi8KKyNpZmRlZiBTVlI0 CisjaWZuZGVmIEJTRDQ0CisjaWZuZGVmIExPQ0tGCisjZGVmaW5lIExPQ0tGCQkJCS8qIFVzZSBs b2NrZigpIG9uIHR0eSBkZXZpY2UgaW4gU1ZSNCAqLworI2VuZGlmIC8qIExPQ0tGICovCisjZW5k aWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBTVlI0ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor CisjaWZkZWYgTk9MT0NLRgkJCQkvKiBCdXQgTk9MT0NLRiBjYW5jZWxzIExPQ0tGICovCisjaWZk ZWYgTE9DS0YKKyN1bmRlZiBMT0NLRgorI2VuZGlmIC8qIExPQ0tGICovCisjZW5kaWYgLyogTk9M T0NLRiAqLworCisvKiBNb3JlIGFib3V0IHRoaXMgYmVsb3cuLi4gKi8KKworI2VuZGlmIC8qIFVT RVRUWUxPQ0sgKi8KKyNlbmRpZiAvKiBOT1VVQ1AgKi8KKworLyoKKyAgTVlSRUFEIG1lYW5zIHVz ZSBvdXIgaW50ZXJuYWxseSBkZWZpbmVkIG5vbmJsb2NraW5nIGJ1ZmZlcmVkIHJlYWQgcm91dGlu ZS4KKyovCisjaWZkZWYgQVRUU1YKKyNkZWZpbmUgTVlSRUFECisjZW5kaWYgLyogQVRUU1YgKi8K KworI2lmZGVmIEFUVDczMDAKKyNpZm5kZWYgTVlSRUFECisjZGVmaW5lIE1ZUkVBRAorI2VuZGlm IC8qIE1ZUkVBRCAqLworLyogYml0cyBmb3IgYXR0bW9kZW06IGludGVybmFsIG1vZGVtIGluIHVz ZSwgcmVzdGFydCBnZXR0eSAqLworI2RlZmluZSBJU01PREVNIDEKKyNkZWZpbmUgRE9HRVRZIDUx MgorI2VuZGlmICAvKiBBVFQ3MzAwICovCisKKyNpZmRlZiBCU0Q0MgorI2RlZmluZSBNWVJFQUQK KyNlbmRpZiAvKiBCU0Q0MiAqLworCisjaWZkZWYgUE9TSVgKKyNkZWZpbmUgTVlSRUFECisjZW5k aWYgLyogUE9TSVggKi8KKyNpZmRlZiBfX2JzZGlfXworI2lmbmRlZiBPX05ERUxBWQorI2RlZmlu ZSBPX05ERUxBWSBPX05PTkJMT0NLCisjZW5kaWYgLyogT19OREVMQVkgKi8KKyNlbmRpZiAvKiBf X2JzZGlfXyAqLworCisvKgorIFZhcmlhYmxlcyBhdmFpbGFibGUgdG8gb3V0c2lkZSB3b3JsZDoK KworICAgZGZ0dHkgIC0tIFBvaW50ZXIgdG8gZGVmYXVsdCB0dHkgbmFtZSBzdHJpbmcsIGxpa2Ug Ii9kZXYvdHR5Ii4KKyAgIGRmbG9jICAtLSAwIGlmIGRmdHR5IGlzIGNvbnNvbGUsIDEgaWYgZXh0 ZXJuYWwgbGluZS4KKyAgIGRmcHJ0eSAtLSBEZWZhdWx0IHBhcml0eQorICAgZGZmbG93IC0tIERl ZmF1bHQgZmxvdyBjb250cm9sCisgICBja3hlY2ggLS0gRmxhZyBmb3Igd2hvIGVjaG9lcyBjb25z b2xlIHR5cGVpbjoKKyAgICAgMSAtIFRoZSBwcm9ncmFtIChzeXN0ZW0gZWNobyBpcyB0dXJuZWQg b2ZmKQorICAgICAwIC0gVGhlIHN5c3RlbSAob3IgZnJvbnQgZW5kLCBvciB0ZXJtaW5hbCkuCisg ICBmdW5jdGlvbnMgdGhhdCB3YW50IHRvIGRvIHRoZWlyIG93biBlY2hvaW5nIHNob3VsZCBjaGVj ayB0aGlzIGZsYWcKKyAgIGJlZm9yZSBkb2luZyBzby4KKworICAgZmxmbmFtICAtLSBOYW1lIG9m IGxvY2sgZmlsZSwgaW5jbHVkaW5nIGl0cyBwYXRoLCBlLmcuLAorICAgICAgICAgICAgICAgICIv dXNyL3Nwb29sL3V1Y3AvTENLLi5jdWwwIiBvciAiL2V0Yy9sb2Nrcy90dHk3NyIKKyAgIGxrZmxm biAgLS0gTmFtZSBvZiBsaW5rIHRvIGxvY2sgZmlsZSwgaW5jbHVkaW5nIGl0cyBwYXRocworICAg aGFzbG9jayAtLSBGbGFnIHNldCBpZiB0aGlzIGtlcm1pdCBlc3RhYmxpc2hlZCBhIHV1Y3AgbG9j ay4KKyAgIGxvY2twaWQgLS0gUElEIG9mIG90aGVyIHByb2Nlc3MgdGhhdCBoYXMgZGVzaXJlZCBs aW5lIG9wZW4sIGFzIHN0cmluZy4KKyAgIGJhY2tncmQgLS0gRmxhZyBpbmRpY2F0aW5nIHByb2dy YW0gZXhlY3V0aW5nIGluIGJhY2tncm91bmQgKCAmIG9uCisgICAgICAgICAgICAgICAgZW5kIG9m IHNoZWxsIGNvbW1hbmQpLiBVc2VkIHRvIGlnbm9yZSBJTlQgYW5kIFFVSVQgc2lnbmFscy4KKyAg IHJ0dV9idWcgLS0gU2V0IGJ5IHN0cHRyYXAoKS4gIFJUVSB0cmVhdHMgXlogYXMgRU9GIChidXQg b25seSB3aGVuIHdlIGhhbmRsZQorICAgICAgICAgICAgICAgIFNJR1RTVFApCisKKyBGdW5jdGlv bnMgZm9yIGFzc2lnbmVkIGNvbW11bmljYXRpb24gbGluZSAoZWl0aGVyIGV4dGVybmFsIG9yIGNv bnNvbGUgdHR5KToKKworICAgc3lzaW5pdCgpICAgICAgICAgICAgICAgLS0gU3lzdGVtIGRlcGVu ZGVudCBwcm9ncmFtIGluaXRpYWxpemF0aW9uCisgICBzeXNjbGVhbnVwKCkgICAgICAgICAgICAt LSBTeXN0ZW0gZGVwZW5kZW50IHByb2dyYW0gc2h1dGRvd24KKyAgIHR0b3Blbih0dG5hbWUsbG9j YWwsbWRtdHlwLHRpbW8pIC0tIE9wZW4gdGhlIG5hbWVkIHR0eSBmb3IgZXhjbHVzaXZlIGFjY2Vz cy4KKyAgIHR0Y2xvcygpICAgICAgICAgICAgICAgIC0tIENsb3NlICYgcmVzZXQgdGhlIHR0eSwg cmVsZWFzaW5nIGFueSBhY2Nlc3MgbG9jay4KKyAgIHR0c3NwZChjcHMpICAgICAgICAgICAgIC0t IFNldCB0aGUgdHJhbnNtaXNzaW9uIHNwZWVkIG9mIHRoZSB0dHkuCisgICB0dGdzcGQoKSAgICAg ICAgICAgICAgICAtLSBHZXQgKHJlYWQpIHRoZSB0aGUgdHJhbnNtaXNzaW9uIHNwZWVkIG9mIHRo ZSB0dHkuCisgICB0dHBrdChzcGVlZCxmbG93LHBhcml0eSkgLS0gUHV0IHRoZSB0dHkgaW4gcGFj a2V0IG1vZGUgYW5kIHNldCB0aGUgc3BlZWQuCisgICB0dHZ0KHNwZWVkLGZsb3cpICAgICAgICAt LSBQdXQgdGhlIHR0eSBpbiB2aXJ0dWFsIHRlcm1pbmFsIG1vZGUuCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9yIGluIERJQUxJTkcgb3IgQ09OTkVDVEVEIG1vZGVtIGNvbnRyb2wg c3RhdGUuCisgICB0dHJlcygpICAgICAgICAgICAgICAgICAtLSBSZXN0b3JlIG9yaWdpbmFsIHR0 eSBtb2Rlcy4KKyAgIHR0c2NhcnIoY2FycmllcikgICAgICAgIC0tIFNldCBjYXJyaWVyIGNvbnRy b2wgbW9kZSwgb24vb2ZmL2F1dG8uCisgICB0dGlubChkZXN0LG1heCx0aW1vKSAgICAtLSBUaW1l ZCByZWFkIGxpbmUgZnJvbSB0aGUgdHR5LgorICAgdHRpbmModGltbykgICAgICAgICAgICAgLS0g VGltZWQgcmVhZCBjaGFyYWN0ZXIgZnJvbSB0dHkuCisgICBteXJlYWQoKSAgICAgICAgICAgICAg ICAtLSBSYXcgbW9kZSBidWxrIGJ1ZmZlciByZWFkLCBnaXZlcyBzdWJzZXF1ZW50CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzIG9uZSBhdCBhIHRpbWUgYW5kIHNpbXVsYXRl cyBGSU9OUkVBRC4KKyAgIG15dW5yZChjKSAgICAgICAgICAgICAgIC0tIFBsYWNlcyBjIGJhY2sg aW4gYnVmZmVyIHRvIGJlIHJlYWQgKG9uZSBvbmx5KQorICAgdHRjaGsoKSAgICAgICAgICAgICAg ICAgLS0gU2VlIGhvdyBtYW55IGNoYXJhY3RlcnMgaW4gdHR5IGlucHV0IGJ1ZmZlci4KKyAgIHR0 eGluKG4sYnVmKSAgICAgICAgICAgIC0tIFJlYWQgbiBjaGFyYWN0ZXJzIGZyb20gdHR5ICh1bnRp bWVkKS4KKyAgIHR0b2woc3RyaW5nLGxlbmd0aCkgICAgIC0tIFdyaXRlIGEgc3RyaW5nIHRvIHRo ZSB0dHkuCisgICB0dG9jKGMpICAgICAgICAgICAgICAgICAtLSBXcml0ZSBhIGNoYXJhY3RlciB0 byB0aGUgdHR5LgorICAgdHRmbHVpKCkgICAgICAgICAgICAgICAgLS0gRmx1c2ggdHR5IGlucHV0 IGJ1ZmZlci4KKyAgIHR0c25kYigpICAgICAgICAgICAgICAgIC0tIFNlbmQgQlJFQUsgc2lnbmFs LgorICAgdHRzbmRsYigpICAgICAgICAgICAgICAgLS0gU2VuZCBMb25nIEJSRUFLIHNpZ25hbC4K KworICAgdHRsb2NrKHR0bmFtZSkgICAgICAgICAgLS0gIkxvY2siIHR0eSBkZXZpY2UgYWdhaW5z dCB1dWNwIGNvbGxpc2lvbnMuCisgICB0dHVubGNrKCkgICAgICAgICAgICAgICAtLSBVbmxvY2sg dHR5IGRldmljZS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEFUVDczMDAv VW5peCBQQywgU3lzdGVtIFY6CisgICBhdHRkaWFsKHR0bmFtZSxzcGVlZCx0ZWxuYnIpIC0tIGRp YWxzIEFUVDczMDAvVW5peCBQQyBpbnRlcm5hbCBtb2RlbQorICAgb2ZmZ2V0dHkodHRuYW1lKSAg ICAgICAgLS0gVHVybnMgb2ZmIGdldHR5KDFtKSBmb3IgY29tbXMgbGluZQorICAgb25nZXR0eSh0 dG5hbWUpICAgICAgICAgLS0gUmVzdG9yZXMgZ2V0dHkoKSB0byBjb21tcyBsaW5lCisqLworCisv KgorRnVuY3Rpb25zIGZvciBjb25zb2xlIHRlcm1pbmFsOgorCisgICBjb25nbSgpICAgLS0gR2V0 IGNvbnNvbGUgdGVybWluYWwgbW9kZXMuCisgICBjb25jYihlc2MpIC0tIFB1dCB0aGUgY29uc29s ZSBpbiBzaW5nbGUtY2hhcmFjdGVyIHdha2V1cCBtb2RlIHdpdGggbm8gZWNoby4KKyAgIGNvbmJp bihlc2MpIC0tIFB1dCB0aGUgY29uc29sZSBpbiBiaW5hcnkgKHJhdykgbW9kZS4KKyAgIGNvbnJl cygpICAtLSBSZXN0b3JlIHRoZSBjb25zb2xlIHRvIG1vZGUgb2J0YWluZWQgYnkgY29uZ20oKS4K KyAgIGNvbm9jKGMpICAtLSBVbmJ1ZmZlcmVkIG91dHB1dCwgb25lIGNoYXJhY3RlciB0byBjb25z b2xlLgorICAgY29ub2wocykgIC0tIFVuYnVmZmVyZWQgb3V0cHV0LCBudWxsLXRlcm1pbmF0ZWQg c3RyaW5nIHRvIHRoZSBjb25zb2xlLgorICAgY29ub2xhKHMpIC0tIFVuYnVmZmVyZWQgb3V0cHV0 LCBhcnJheSBvZiBzdHJpbmdzIHRvIHRoZSBjb25zb2xlLgorICAgY29ueG8obixzKSAtLSBVbmJ1 ZmZlcmVkIG91dHB1dCwgbiBjaGFyYWN0ZXJzIHRvIHRoZSBjb25zb2xlLgorICAgY29uY2hrKCkg IC0tIENoZWNrIGlmIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGF0IGNvbnNvbGUgKGJzZCA0LjIpLgor ICAgICAgICAgICAgICAgIENoZWNrIGlmIGVzY2FwZSBjaGFyICheXCkgdHlwZWQgYXQgY29uc29s ZSAoU3lzdGVtIElJSS9WKS4KKyAgIGNvbmluYyh0aW1vKSAgLS0gVGltZWQgZ2V0IGEgY2hhcmFj dGVyIGZyb20gdGhlIGNvbnNvbGUuCisgICBjb25na3ModGltbykgIC0tIFRpbWVkIGdldCBrZXli b2FyZCBzY2FuIGNvZGUuCisgICBjb25pbnQoKSAgLS0gRW5hYmxlIHRlcm1pbmFsIGludGVycnVw dHMgb24gdGhlIGNvbnNvbGUgaWYgbm90IGJhY2tncm91bmQuCisgICBjb25ub2koKSAgLS0gRGlz YWJsZSB0ZXJtaW5hbCBpbnRlcnJ1cHRzIG9uIHRoZSBjb25zb2xlIGlmIG5vdCBiYWNrZ3JvdW5k LgorCitUaW1lIGZ1bmN0aW9ucworCisgICBtc2xlZXAobSkgLS0gTWlsbGlzZWNvbmQgc2xlZXAK KyAgIHp0aW1lKCZzKSAtLSBSZXR1cm4gcG9pbnRlciB0byBkYXRlL3RpbWUgc3RyaW5nCisgICBy dGltZXIoKSAtLSAgUmVzZXQgdGltZXIKKyAgIGd0aW1lcigpICAtLSBHZXQgZWxhcHNlZCB0aW1l IHNpbmNlIGxhc3QgY2FsbCB0byBydGltZXIoKQorKi8KKworLyogQ29uZGl0aW9uYWwgSW5jbHVk ZXMgKi8KKworLyogV2hldGhlciB0byBpbmNsdWRlIDxzeXMvZmlsZS5oPiAqLworCisjaWZkZWYg UlRVCQkJCS8qIFJUVSBkb2Vzbid0ICovCisjZGVmaW5lIE5PRklMRUgKKyNlbmRpZiAvKiBSVFUg Ki8KKworI2lmZGVmIENJRQkJCQkvKiBDSUUgZG9lcy4gKi8KKyN1bmRlZiBOT0ZJTEVICisjZW5k aWYgLyogQ0lFICovCisKKyNpZmRlZiBCU0Q0MQkJCQkvKiA0LjEgQlNEIGRvZXNuJ3QgKi8KKyNk ZWZpbmUgTk9GSUxFSAorI2VuZGlmIC8qIEJTRDQxICovCisKKyNpZmRlZiBpczY4awkJCQkvKiBJ bnRlZ3JhdGVkIFNvbHV0aW9ucyA2ODAwMCBVTklYICAqLworI2RlZmluZSBOT0ZJTEVICQkJCS8q IGUuZy4gb24gUGxleHV4IFA2MCBhbmQgU3VuLTEgKi8KKyNlbmRpZiAvKiBpczY4ayAqLworCisj aWZkZWYgTUlOSVgJCQkJLyogTUlOSVggKi8KKyNkZWZpbmUgTk9GSUxFSAorI2VuZGlmIC8qIE1J TklYICovCisKKyNpZmRlZiBDT0hFUkVOVAkJCQkvKiBDb2hlcmVudCAqLworI2RlZmluZSBOT0ZJ TEVICisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmbmRlZiBOT0ZJTEVICQkJCS8qIE5vdyBp bmNsdWRlIGlmIHNlbGVjdGVkLiAqLworI2luY2x1ZGUgPHN5cy9maWxlLmg+CisjZW5kaWYgLyog Tk9GSUxFSCAqLworCisvKiBQT1NJWCAqLworCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9T SVggdXNlcyB0ZXJtaW9zLmggKi8KKyNkZWZpbmUgVEVSTUlPUworI2lmZGVmIF9fYnNkaV9fCisj aWZkZWYgUE9TSVgKKyN1bmRlZiBfUE9TSVhfU09VUkNFCQkJLyogR2V0IGV4dHJhIHN0dWZmIGZy b20gdGVybWlvcy5oICovCisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBfX2JzZGlfXyAq LworI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpZmRlZiBMSU5VWAorI2luY2x1ZGUgPHN5cy9pb2N0 bC5oPgorI2VuZGlmIC8qIExJTlVYICovCisjaWZkZWYgUU5YMTYKKyNpbmNsdWRlIDxpb2N0bC5o PgorI2Vsc2UKKyNpZmRlZiBRTlg2CisjaW5jbHVkZSA8aW9jdGwuaD4KKyNlbmRpZiAvKiBRTlg2 ICovCisjZW5kaWYgLyogUU5YMTYgKi8KKyNpZmRlZiBfX2JzZGlfXworI2lmZGVmIFBPU0lYCisj ZGVmaW5lIF9QT1NJWF9TT1VSQ0UKKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIF9fYnNk aV9fICovCisjaWZuZGVmIEJTRDQ0CQkJCS8qIFJlYWxseSBQT1NJWCAqLworI2lmbmRlZiBDS19R TlgzMgkJCS8qIHdhcyBDS19RTlgzMiAqLworI2RlZmluZSBOT1NZU0lPQ1RMSAkJCS8qIE5vIGlv Y3RsJ3MgYWxsb3dlZC4gKi8KKyN1bmRlZiB1bHRyaXgJCQkJLyogVHVybiBvZmYgYW55IHVsdHJp eCBmZWF0dXJlcy4gKi8KKyNlbmRpZiAvKiBDS19RTlgzMiAqLworI2VuZGlmIC8qIEJTRDQ0ICov CisjZW5kaWYgLyogUE9TSVggKi8KKworLyogU3lzdGVtIElJSSwgU3lzdGVtIFYgKi8KKworI2lm ZGVmIEFUVFNWCisjaWZuZGVmIEJTRDQ0CisjaWZuZGVmIFBPU0lYCisjaW5jbHVkZSA8dGVybWlv Lmg+CisjZW5kaWYgLyogUE9TSVggKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2lmZGVmIFRFUk1J T1gKKy8qIE5lZWQgdGhpcyBmb3IgdGVybWlveCBzdHJ1Y3R1cmUsIFJUUy9DVFMgYW5kIERUUi9D RCBmbG93IGNvbnRyb2wgKi8KKyNpbmNsdWRlIDx0ZXJtaW94Lmg+CisgIHN0cnVjdCB0ZXJtaW94 IHJjdHN4OworI2Vsc2UKKyNpZmRlZiBTVEVSTUlPWAorI2lmZGVmIFNDT19PU1I1MDQKKy8qIFNv cnJ5LCB0aGlzIGlzIHRydWx5IGRpc2d1c3RpbmcgYnV0IGl0J3MgU0NPJ3MgZmF1bHQuICovCisj aWZuZGVmIF9TVklEMworI2RlZmluZSBfQ0tfU1ZJRDNfWAorI2RlZmluZSBfU1ZJRDMKKyNlbmRp ZiAvKiBfU1ZJRDMgKi8KKyNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCisjaW5jbHVkZSA8c3lzL3Rl cm1pb3guaD4KKyAgc3RydWN0IHRlcm1pb3ggcmN0c3g7CisjaWZkZWYgQ0tfU1ZJRDNfWAorI3Vu ZGVmIF9TVklEMworI3VuZGVmIENLX1NWSUQzX1gKKyNlbmRpZiAvKiBDS19TVklEM19YICovCisj ZW5kaWYgLyogU1RFUk1JT1ggKi8KKyNlbmRpZiAvKiBURVJNSU9YICovCisjZW5kaWYgLyogQVRU U1YgKi8KKworI2lmZGVmIENPSEVSRU5UCQkJLyogVXNlIHRlcm1pby5oLCBub3Qgc2d0dHkuaCBm b3IgQ29oZXJlbnQgKi8KKyNpbmNsdWRlIDx0ZXJtaW8uaD4KKyNlbmRpZiAvKiBDT0hFUkVOVCAq LworCisjaWZkZWYgTUlOSVgJCQkJLyogTUlOSVggdXNlcyBpb2N0bCdzICovCisjZGVmaW5lIE5P U1lTSU9DVExICQkJLyogYnV0IGhhcyBubyA8c3lzL2lvY3RsLmg+ICovCisjZW5kaWYgLyogTUlO SVggKi8KKworLyogT3RoZXJzICovCisKKyNpZm5kZWYgTk9TWVNJT0NUTEgJCQkvKiBPdGhlcnMg dXNlIGlvY3RsKCkgKi8KKyNpZmRlZiBTVU40UzUKKy8qCisgIFRoaXMgaXMgdG8gZ2V0IHJpZCBv ZiBjcHAgd2FybmluZyBtZXNzYWdlcyB0aGF0IG9jY3VyIGJlY2F1c2UgYWxsIG9mCisgIHRoZXNl IHN5bWJvbHMgYXJlIGRlZmluZWQgYnkgYm90aCB0ZXJtaW9zLmggYW5kIGlvY3RsLmggb24gdGhl IFNVTi4KKyovCisjdW5kZWYgRUNITworI3VuZGVmIE5MMAorI3VuZGVmIE5MMQorI3VuZGVmIFRB QjAKKyN1bmRlZiBUQUIxCisjdW5kZWYgVEFCMgorI3VuZGVmIFhUQUJTCisjdW5kZWYgQ1IwCisj dW5kZWYgQ1IxCisjdW5kZWYgQ1IyCisjdW5kZWYgQ1IzCisjdW5kZWYgRkYwCisjdW5kZWYgRkYx CisjdW5kZWYgQlMwCisjdW5kZWYgQlMxCisjdW5kZWYgVE9TVE9QCisjdW5kZWYgRkxVU0hPCisj dW5kZWYgUEVORElOCisjdW5kZWYgTk9GTFNICisjZW5kaWYgLyogU1VONFM1ICovCisjaW5jbHVk ZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYgLyogTk9TWVNJT0NUTEggKi8KKy8qCisgIFdlIHJlYWxs eSwgcmVhbGx5LCBSRUFMTFkgd2FudCBGSU9OUkVBRCwgYmVjYXVzZSBpdCBpcyB0aGUgb25seSB3 YXkgdG8gZmluZAorICBvdXQgbm90IGp1c3QgKmlmKiBzdHVmZiBpcyB3YWl0aW5nIHRvIGJlIHJl YWQsIGJ1dCBob3cgbXVjaCwgd2hpY2ggaXMKKyAgY3JpdGljYWwgdG8gb3VyIHNsaWRpbmctd2lu ZG93IGFuZCBzdHJlYW1pbmcgcHJvY2VkdXJlcywgbm90IHRvIG1lbnRpb24KKyAgZWZmaWNpZW5j eSBvZiBDT05ORUNULCBldGMuCisqLworI2lmZGVmIEJFTExWMTAKKyNpbmNsdWRlIDxzeXMvZmls aW8uaD4JCQkvKiBGb3IgRklPTlJFQUQgKi8KKyNpZmRlZiBGSU9OUkVBRAorI2RlZmluZSBNWVJF QUQKKyNlbmRpZiAvKiBNWVJFQUQgKi8KKyNlbmRpZiAvKiBCRUxMVjEwICovCisKKyNpZm5kZWYg RklPTlJFQUQKKy8qIEl0IHdhc24ndCBmb3VuZCBpbiBpb2N0bC5oIG9yIHRlcm0qLmggLSB0cnkg dGhlc2UgcGxhY2VzOiAqLworI2lmZGVmIFVOSVhXQVJFCisjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+ CisjZWxzZQorI2lmZGVmIFNPTEFSSVMKKyNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KKyNlbmRpZiAv KiBTT0xBUklTICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKyNlbmRpZiAvKiBGSU9OUkVBRCAq LworCisjaWZkZWYgWEVOSVggLyogV2FzIE1fVU5JWCBidXQgWEVOSVggaW1wbGllcyBNX1VOSVgg YW5kIGFwcGxpZXMgdG8gWEVOSVggdG9vICovCisvKgorICA8c3lzL3NvY2tldC5oPiBpbmNsdWRl ZCBhYm92ZSB2aWEgImNrY25ldC5oIiBkZWZpbmVzIEZJT05SRUFEIGFzCisgIHNvbWV0aGluZy4g IER1ZSB0byB0aGlzLCBpbl9jaGsoKSB1c2VzIHRoZSBGSU9OUkVBRCBpbnN0ZWFkIG9mIFJEQ0hL CisgIGFuZCB0aGUgaG90IGtleXMgZHVyaW5nIGZpbGUgdHJhbnNmZXIgKFggdG8gY2FuY2VsIGZp bGUgZXRjKSBkbyBub3QKKyAgd29yayBiZWNhdXNlIEZJT05SRUFEIGRvZXNuJ3Qgd29yayBldmVu IHRob3VnaCBpdCBpcyBkZWZpbmVkLgorCisgIE5PVEU6IFRoaXMgbWlnaHQgYWxzbyBiZSB0cnVl IGVsc2V3aGVyZS4KKyovCisjaWZkZWYgRklPTlJFQUQKKyN1bmRlZiBGSU9OUkVBRAorI2VuZGlm IC8qIEZJT05SRUFEICovCisjZW5kaWYgLyogWEVOSVggKi8KKworI2lmZGVmIENLX1NDT1Y1CQkJ CS8qIERpdHRvIGZvciBTQ08gT3BlblNlcnZlciA1LjAgKi8KKyNpZm5kZWYgU0NPX09TUjUwNwkJ CS8qIDI5OSAqLworI2lmZGVmIEZJT05SRUFECisjdW5kZWYgRklPTlJFQUQKKyNlbmRpZiAvKiBG SU9OUkVBRCAqLworI2VuZGlmCS8qIFNDT19PU1I1MDcgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAq LworCisjaWZkZWYgU0NPX09TUjUwNwkJCS8qIDI5OSAqLworI2lmZGVmIFJEQ0hLCisjdW5kZWYg UkRDSEsKKyNlbmRpZgkvKiBSRENISyAqLworI2VuZGlmCS8qIFNDT19PU1I1MDcgKi8KKworLyog V2hldGhlciB0byBpbmNsdWRlIDxmY250bC5oPiAqLworCisjaWZuZGVmIGlzNjhrCQkJCS8qIE9u bHkgYSBmZXcgZG9uJ3QgaGF2ZSB0aGlzIG9uZS4gKi8KKyNpZm5kZWYgQlNENDEKKyNpZm5kZWYg RlQyMQorI2lmbmRlZiBGVDE4CisjaWZuZGVmIENPSEVSRU5UCisjaW5jbHVkZSA8ZmNudGwuaD4K KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIEZUMTggKi8KKyNlbmRpZiAvKiBGVDIx ICovCisjZW5kaWYgLyogQlNENDEgKi8KKyNlbmRpZiAvKiBub3QgaXM2OGsgKi8KKworI2lmZGVm IENPSEVSRU5UCisjaWZkZWYgX0kzODYKKyNpbmNsdWRlIDxmY250bC5oPgorI2Vsc2UKKyNpbmNs dWRlIDxzeXMvZmNudGwuaD4KKyNlbmRpZiAvKiBfSTM4NiAqLworI2VuZGlmIC8qIENPSEVSRU5U ICovCisKKyNpZmRlZiBBVFQ3MzAwCQkJCS8qIFVuaXggUEMsIGludGVybmFsIG1vZGVtIGRpYWxl ciAqLworI2luY2x1ZGUgPHN5cy9waG9uZS5oPgorI2VuZGlmIC8qIEFUVDczMDAgKi8KKworI2lm ZGVmIEhQVVgJCQkJLyogSFAtVVggdmFyaWF0aW9ucy4gKi8KKyNkZWZpbmUgSFBVWEpPQkNUTAor I2luY2x1ZGUgPHN5cy9tb2RlbS5oPgkJCS8qIEhQLVVYIG1vZGVtIHNpZ25hbHMgKi8KKyNpZmRl ZiBocDkwMDBzNTAwCQkJLyogTW9kZWwgNTAwICovCisjdW5kZWYgSFBVWEpPQkNUTAorI2VuZGlm IC8qIGhwOTAwMHM1MDAgKi8KKyNpZmRlZiBIUFVYUFJFNjUKKyN1bmRlZiBIUFVYSk9CQ1RMCit0 eXBlZGVmIGxvbmcgbWZsYWc7CisjZW5kaWYgLyogSFBVWFBSRTY1ICovCisjaWZkZWYgSFBVWEpP QkNUTAorI2luY2x1ZGUgPHN5cy9ic2R0dHkuaD4JCQkvKiBIUC1VWCBCZXJrZWxleSB0dHkgc3Vw cG9ydCAqLworI2VuZGlmIC8qIEhQVVhKT0JDVEwgKi8KKyNlbmRpZiAvKiBIUFVYICovCisKKy8q CisgIFdoaWNoIHRpbWUuaCBmaWxlcyB0byBpbmNsdWRlLi4uIFNlZSBja2NkZWIuaCBmb3IgZGVm YXVsdHMuCisgIE5vdGUgdGhhdCAwLCAxLCAyLCBvciBhbGwgMyBvZiB0aGVzZSBjYW4gYmUgaW5j bHVkZWQgYWNjb3JkaW5nIHRvCisgIHRoZSBzeW1ib2wgZGVmaW5pdGlvbnMuCisqLworI2lmbmRl ZiBOT1RJTUVICisjaWZkZWYgVElNRUgKKyNpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYgLyogVElN RUggKi8KKyNlbmRpZiAvKiBOT1RJTUVIICovCisKKyNpZm5kZWYgTk9TWVNUSU1FSAorI2lmZGVm IFNZU1RJTUVICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBTWVNUSU1FSCAqLwor I2VuZGlmIC8qIE5PU1lTVElNRUggKi8KKworI2lmbmRlZiBOT1NZU1RJTUVCSAorI2lmZGVmIFNZ U1RJTUVCSAorI2luY2x1ZGUgPHN5cy90aW1lYi5oPgorI2VuZGlmIC8qIFNZU1RJTUVCSCAqLwor I2VuZGlmIC8qIE5PU1lTVElNRUJIICovCisKKyNpZm5kZWYgTk9EQ0xUSU1FVkFMCisjaWZkZWYg RENMVElNRVZBTAorLyoKKyAgSW4gY2VydGFpbiBQT1NJWCBidWlsZHMgKGxpa2UgVW5peHdhcmUg NyksIDxbc3lzL110aW1lLmg+IHJlZnVzZXMgdG8KKyAgZGVmaW5lIHRoZSBzdHJ1Y3RzIHdlIG5l ZWQgdG8gYWNjZXNzIHRoZSBoaWdoZXIgc3BlZWRzLCBzbyB3ZSBoYXZlIHRvCisgIGRvIGl0IG91 cnNlbHZlcy4KKyovCitzdHJ1Y3QgdGltZXZhbCB7CisgICAgbG9uZyB0dl9zZWM7CisgICAgbG9u ZyB0dl91c2VjOworfTsKK3N0cnVjdCB0aW1lem9uZSB7CisgICAgaW50IHR6X21pbnV0ZXN3ZXN0 OworICAgIGludCB0el9kc3R0aW1lOworfTsKKyNlbmRpZiAvKiBEQ0xUSU1FVkFMICovCisjZW5k aWYgLyogTk9EQ0xUSU1FVkFMICovCisKKyNpZmRlZiBfX2xpbnV4X18KKy8qIFRISVMgSVMgT0JT T0xFVEUgc2luY2UgYWJvdXQgTGludXggMC45MiAqLworI2lmZGVmIE9MSU5VWEhJU1BFRUQKKyNp bmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCisjaWZk ZWYgX19hbHBoYV9fCQkJLyogTGludXggb24gREVDIEFscGhhICovCisjaWZuZGVmIF9fR0xJQkNf XwkJCS8qIEJ1dCBub3Qgd2l0aCBnbGliYyAqLworI2luY2x1ZGUgPGFzbS90ZXJtaW9zLmg+Cisj ZW5kaWYgLyogX19HTElCQ19fICovCisjZW5kaWYgLyogX19hbHBoYV9fICovCisjZW5kaWYgLyog X19saW51eF9fICovCisKKyNpZmRlZiBOT0lFWFRFTgkJCQkvKiBUaGlzIGlzIGJyb2tlbiBvbiBz b21lIHN5c3RlbXMgKi8KKyN1bmRlZiBJRVhURU4JCQkJLyogbGlrZSBDb252ZXgvT1MgOS4xICov CisjZW5kaWYgLyogTk9JRVhURU4gKi8KKyNpZm5kZWYgSUVYVEVOCQkJCS8qIFR1cm4gb2ZmIF5P L15WIHByb2Nlc3NpbmcuICovCisjZGVmaW5lIElFWFRFTiAwCQkJLyogTmVlZGVkLCBhdCBsZWFz dCwgb24gQlNESS4gKi8KKyNlbmRpZiAvKiBJRVhURU4gKi8KKy8qCisgIFBpY2sgdXAgZGVmaW5p dGlvbnMgbmVlZGVkIGZvciBzZWxlY3QoKSBpZiB3ZSBkb24ndCBoYXZlIHRoZW0gYWxyZWFkeS4K KyAgTm9ybWFsbHkgdGhleSBjb21lIGZyb20gPHN5cy90eXBlcy5oPiBidXQgc29tZSBzeXN0ZW1z IGdldCB0aGVtIGZyb20KKyAgPHN5cy9zZWxlY3QuaD4uLi4gIFJhdGhlciB0aGFuIGhhcmR3aXJl IGFsbCBvZiB0aGVtIGludG8gdGhlIHNvdXJjZSwgd2UKKyAgaW5jbHVkZSBpdCBpZiBTRUxFQ1Rf SCBpcyBkZWZpbmVkIGluIGNvbXBpbGUtdGltZSBDRkxBR1MuCisqLworI2lmbmRlZiBTQ09fT1NS NTA0CisjaWZkZWYgU0VMRUNUX0gKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYgLyog U0VMRUNUX0ggKi8KKyNlbmRpZiAvKiBTQ09fT1NSNTA0ICovCisKKyNpZmRlZiBhZWdpcworI2lu Y2x1ZGUgIi9zeXMvaW5zL2Jhc2UuaW5zLmMiCisjaW5jbHVkZSAiL3N5cy9pbnMvZXJyb3IuaW5z LmMiCisjaW5jbHVkZSAiL3N5cy9pbnMvaW9zLmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL3Np by5pbnMuYyIKKyNpbmNsdWRlICIvc3lzL2lucy9wYWQuaW5zLmMiCisjaW5jbHVkZSAiL3N5cy9p bnMvdGltZS5pbnMuYyIKKyNpbmNsdWRlICIvc3lzL2lucy9wZm0uaW5zLmMiCisjaW5jbHVkZSAi L3N5cy9pbnMvcGdtLmlucy5jIgorI2luY2x1ZGUgIi9zeXMvaW5zL2VjMi5pbnMuYyIKKyNpbmNs dWRlICIvc3lzL2lucy90eXBlX3VpZHMuaW5zLmMiCisjaW5jbHVkZSA8ZGVmYXVsdF9hY2wuaD4K KyN1bmRlZiBUSU9DRVhDTAorI3VuZGVmIEZJT05SRUFECisjZW5kaWYgLyogYWVnaXMgKi8KKwor I2lmZGVmIHN4YUU1MAkJCQkvKiBQRlUgQ29tcGFjdCBBIFNYL0EgVElTUCBWMTAvTDUwICovCisj dW5kZWYgRklPTlJFQUQKKyNlbmRpZiAvKiBzeGFFNTAgKi8KKworLyogVGhlIGZvbGxvd2luZyAj ZGVmaW5lcyBhcmUgY2F0Y2gtYWxscyBmb3IgdGhvc2Ugc3lzdGVtcyAqLworLyogdGhhdCBkaWRu J3QgaGF2ZSBvciBjb3VsZG4ndCBmaW5kIDxmaWxlLmg+Li4uICovCisKKyNpZm5kZWYgRlJFQUQK KyNkZWZpbmUgRlJFQUQgMHgwMQorI2VuZGlmIC8qIEZSRUFEICovCisKKyNpZm5kZWYgRldSSVRF CisjZGVmaW5lIEZXUklURSAweDEwCisjZW5kaWYgLyogRldSSVRFICovCisKKyNpZm5kZWYgT19S RE9OTFkKKyNkZWZpbmUgT19SRE9OTFkgMDAwCisjZW5kaWYgLyogT19SRE9OTFkgKi8KKworLyog VGhpcyBpcyBmb3IgYW5jaWVudCBVbml4ZXMgdGhhdCBkb24ndCBoYXZlIHRoZXNlIHR0eSBzeW1i b2xzIGRlZmluZWQuICovCisKKyNpZm5kZWYgUEVORElOCisjZGVmaW5lIFBFTkRJTiBJQ0FOT04K KyNlbmRpZiAvKiBQRU5ESU4gKi8KKyNpZm5kZWYgRkxVU0hPCisjZGVmaW5lIEZMVVNITyBJQ0FO T04KKyNlbmRpZiAvKiBGTFVTSE8gKi8KKyNpZm5kZWYgRVhUUFJPQworI2RlZmluZSBFWFRQUk9D IElDQU5PTgorI2VuZGlmIC8qIEVYVFBST0MgKi8KKworI2lmZGVmIFNWT1JQT1NJWAorLyoKKyAg TW9kZW0gc2lnbmFscyBhcmUgYWxzbyBmb3JiaWRkZW4gaW4gdGhlIFBPU0lYIHdvcmxkLiAgQnV0 IHNvbWUgUE9TSVgtYmFzZWQKKyAgcGxhdGZvcm1zIGxldCB1cyBhdCB0aGVtIGFueXdheSBpZiB3 ZSBrbm93IHdoZXJlIHRvIGxvb2suCisqLworI2lmbmRlZiBORUVETURNREVGUworLyogRG9lc24n dCB3b3JrIGZvciBMaW51eCAqLworI2lmZGVmIFVOSVhXQVJFNworI2RlZmluZSBORUVETURNREVG UworI2VuZGlmIC8qIFVOSVhXQVJFNyAqLworI2VuZGlmIC8qIE5FRURNRE1ERUZTICovCisKKyNp ZmRlZiBORUVETURNREVGUworI2lmbmRlZiBUSU9DTUdFVAorI2RlZmluZSBUSU9DTUdFVCAoKCd0 Jzw8OCl8MjkpCisjZW5kaWYgLyogVElPQ01HRVQgKi8KKworI2lmbmRlZiBUSU9DTV9EVFIKKyNk ZWZpbmUgVElPQ01fRFRSIDB4MDAwMgorI2VuZGlmIC8qIFRJT0NNX0RUUiAqLworI2lmbmRlZiBU SU9DTV9SVFMKKyNkZWZpbmUgVElPQ01fUlRTIDB4MDAwNAorI2VuZGlmIC8qIFRJT0NNX1JUUyAq LworI2lmbmRlZiBUSU9DTV9DVFMKKyNkZWZpbmUgVElPQ01fQ1RTIDB4MDAyMAorI2VuZGlmIC8q IFRJT0NNX0NUUyAqLworI2lmbmRlZiBUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fQ0FSIDB4MDA0 MAorI2VuZGlmIC8qIFRJT0NNX0NBUiAqLworI2lmbmRlZiBUSU9DTV9STkcKKyNkZWZpbmUgVElP Q01fUk5HIDB4MDA4MAorI2VuZGlmIC8qIFRJT0NNX1JORyAqLworI2lmbmRlZiBUSU9DTV9EU1IK KyNkZWZpbmUgVElPQ01fRFNSIDB4MDEwMAorI2VuZGlmIC8qIFRJT0NNX0RTUiAqLworI2VuZGlm IC8qIE5FRURNRE1ERUZTICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisKKy8qIERlY2xhcmF0 aW9ucyAqLworCisjaWZkZWYgT1hPUworI3VuZGVmIFRDR0VUQQorI3VuZGVmIFRDU0VUQQorI3Vu ZGVmIFRDU0VUQVcKKyN1bmRlZiBUQ1NFVEFGCisjZGVmaW5lIFRDR0VUQSBUQ0dFVFMKKyNkZWZp bmUgVENTRVRBIFRDU0VUUworI2RlZmluZSBUQ1NFVEFXIFRDU0VUU1cKKyNkZWZpbmUgVENTRVRB RiBUQ1NFVFNGCisjZGVmaW5lIHRlcm1pbyB0ZXJtaW9zCisjZW5kaWYgLyogT1hPUyAqLworCisj aWZkZWYgU1ZPUlBPU0lYCQkJLyogQVQmVCBTeXMgViBvciBQT1NJWCAqLworI2lmZGVmIFVOSVhX QVJFUE9TSVgJCQkvKiBVbml4V2FyZSA3IFBPU0lYIGJ1aWxkICovCisvKgorICBJbiBVbml4d2Fy ZSBQT1NJWCBidWlsZHMsIDxbc3lzL110aW1lLmg+IHJlZnVzZXMgdG8gZGVmaW5lIHRoZQorICBz dHJ1Y3RzIHdlIG5lZWQgdG8gYWNjZXNzIHRoZSBoaWdoZXIgc3BlZWRzLCBzbyB3ZSBoYXZlIHRv IGRvIGl0CisgIG91cnNlbHZlcy4KKyovCitzdHJ1Y3QgdGltZXZhbCB7CisgICAgbG9uZyB0dl9z ZWM7CisgICAgbG9uZyB0dl91c2VjOworfTsKK3N0cnVjdCB0aW1lem9uZSB7CisgICAgaW50IHR6 X21pbnV0ZXN3ZXN0OworICAgIGludCB0el9kc3R0aW1lOworfTsKKyNlbmRpZiAvKiBVTklYV0FS RVBPU0lYICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisKKyNpZmRlZiBfX0dOVUNfXworI2lm ZGVmIFhFTklYCisvKgorICBCZWNhdXNlIFhlbml4IDx0aW1lLmg+IGRvZXNuJ3QgZGVjbGFyZSB0 aW1lKCkgaWYgd2UncmUgdXNpbmcgZ2NjLgorKi8KK3RpbWVfdCB0aW1lKCk7CisjZW5kaWYgLyog WEVOSVggKi8KKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisvKiBTcGVjaWFsIHN0dWZmIGZvciBW NyBpbnB1dCBidWZmZXIgcGVla2luZyAqLworCisjaWZkZWYgIFY3CitpbnQga21lbVsyXSA9IHsg LTEsIC0xfTsKK2NoYXIgKmluaXRyYXdxKCksICpxYWRkclsyXT17MCwwfTsKKyNkZWZpbmUgQ09O IDAKKyNkZWZpbmUgVFRZIDEKKyNlbmRpZiAvKiBWNyAqLworCisvKiBkZnR0eSBpcyB0aGUgZGV2 aWNlIG5hbWUgb2YgdGhlIGRlZmF1bHQgZGV2aWNlIGZvciBmaWxlIHRyYW5zZmVyICovCisvKiBk ZmxvYyBpcyAwIGlmIGRmdHR5IGlzIHRoZSB1c2VyJ3MgY29uc29sZSB0ZXJtaW5hbCwgMSBpZiBh biBleHRlcm5hbCBsaW5lICovCisKKyNpZmRlZiBCRU9TCisgICAgY2hhciAqIGRmdHR5ID0gTlVM TDsKKyAgICBjaGFyICogZGZtZG0gPSAibm9uZSI7CisgICAgaW50IGRmbG9jID0gMDsgICAgICAg ICAgICAgICAgICAvKiB0aGF0IGdvZXMgaW4gbG9jYWwgbW9kZSBieSBkZWZhdWx0ICovCisjZWxz ZQorI2lmbmRlZiBERlRUWQorI2lmZGVmIFBST1ZYMQorICAgIGNoYXIgKmRmdHR5ID0gIi9kZXYv Y29tMS5kb3V0IjsgLyogT25seSBleGFtcGxlIHNvIGZhciBvZiBhIHN5c3RlbSAqLworICAgIGNo YXIgKmRmbWRtID0gIm5vbmUiOworICAgIGludCBkZmxvYyA9IDE7ICAgICAgICAgICAgICAgICAg LyogdGhhdCBnb2VzIGluIGxvY2FsIG1vZGUgYnkgZGVmYXVsdCAqLworI2Vsc2UKKyAgICBjaGFy ICpkZnR0eSA9IENUVE5BTTsgICAgICAgICAgICAgICAvKiBSZW1vdGUgYnkgZGVmYXVsdCwgdXNl IG5vcm1hbCAqLworICAgIGNoYXIgKmRmbWRtID0gIm5vbmUiOworICAgIGludCBkZmxvYyA9IDA7 ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG5hbWUuICovCisj ZW5kaWYgLyogUFJPVlgxICovCisjZWxzZQorICAgIGNoYXIgKmRmdHR5ID0gREZUVFk7CQkvKiBE ZWZhdWx0IGxvY2F0aW9uIHNwZWNpZmllZCBvbiAqLworICAgIGNoYXIgKmRmbWRtID0gIm5vbmUi OwkJLyogY29tbWFuZCBsaW5lLiAqLworICAgIGludCBkZmxvYyA9IDE7ICAgICAgICAgICAgICAg ICAgICAgIC8qIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG5hbWUuICovCisjZW5kaWYgLyogREZUVFkg Ki8KKyNlbmRpZiAvKiBCRU9TICovCisKKyNkZWZpbmUgQ09OX1JFUyAwCQkJLyogQ29uc29sZSBz dGF0ZSBpcyAicmVzZXQiICovCisjZGVmaW5lIENPTl9DQiAgMQkJCS8qIENvbnNvbGUgc3RhdGUg aXMgQ0JSRUFLICovCisjZGVmaW5lIENPTl9CSU4gMgkJCS8qIENvbnNvbGUgc3RhdGUgaXMgYmlu YXJ5ICovCisgICAgc3RhdGljIGludCBjb25zdGF0ZSA9IENPTl9SRVM7CisKKyNkZWZpbmUgQ09O SV9SRVMgMAkJCS8qIENvbnNvbGUgaW50ZXJydXB0cyBhcmUgInJlc2V0IiAqLworI2RlZmluZSBD T05JX0lOVCAxCQkJLyogQ29uc29sZSBpbnR0ZXJ1cHRzIGFyZSBzZXQgKi8KKyNkZWZpbmUgQ09O SV9OT0kgMgkJCS8qIENvbnNvbGUgaW50dGVydXB0cyBhcmUgZGlzYWJsZWQgKi8KKyAgICBzdGF0 aWMgaW50IGNvbmlzdGF0ZSA9IENPTklfUkVTOworCisjaWZkZWYgQ0tfU01BTEwKKyNkZWZpbmUg Q09OQlVGU0laIDE1CisjZWxzZQorI2RlZmluZSBDT05CVUZTSVogMjU1CisjZW5kaWYgLyogQ0tf U01BTEwgKi8KKyAgICBzdGF0aWMgY2hhciBjb25idWZbQ09OQlVGU0laXTsJLyogQ29uc29sZSBy ZWFkYWhlYWQgYnVmZmVyICovCisgICAgc3RhdGljIGludCAgY29uYnVmbiA9IDA7CQkvKiBDaGFy cyBpbiByZWFkYWhlYWQgYnVmZmVyICovCisgICAgc3RhdGljIGNoYXIgKmNvbmJ1ZnAgPSBjb25i dWY7CS8qIE5leHQgY2hhciBpbiByZWFkYWhlYWQgYnVmZmVyICovCisKKyAgICBjaGFyIGN0dG5h bVtERVZOQU1MRU4rMV0gPSB7ICdcMCcsICdcMCcgfTsgLyogRGV0ZXJtaW5lZCBhdCBydW50aW1l ICovCisKKyNpZmRlZiBSVFUKKyAgICBpbnQgcnR1X2J1ZyA9IDA7CQkgICAgLyogc2V0IHRvIDEg d2hlbiByZXR1cm5pbmcgZnJvbSBTSUdUU1RQICovCisjZW5kaWYgLyogUlRVICovCisKKyAgICBp bnQgZGZwcnR5ID0gREVGUEFSOyAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHBhcml0eSAoMCA9 IG5vbmUpICovCisgICAgaW50IHR0cHJ0eSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogVGhl IHBhcml0eSB0aGF0IGlzIGluIHVzZS4gKi8KKyAgICBzdGF0aWMgaW50IHR0cG1zayA9IDB4ZmY7 CQkvKiBQYXJpdHkgc3RyaXBwaW5nIG1hc2suICovCisgICAgaW50IHR0bWRtID0gMDsgICAgICAg ICAgICAgICAgICAgICAgLyogTW9kZW0gaW4gdXNlLiAqLworICAgIGludCB0dGNhcnIgPSBDQVJf QVVUOwkJLyogQ2FycmllciBoYW5kbGluZyBtb2RlLiAqLworICAgIGludCBkZmZsb3cgPSBGTE9f Tk9ORTsJCS8qIERlZmF1bHQgZmxvdyBjb250cm9sIGlzIE5PTkUgKi8KKyAgICBpbnQgYmFja2dy ZCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgaW4gZm9yZWdyb3VuZCAobm8gJyYn ICkgKi8KKyNpZmRlZiBGX1NFVEZMCisgICAgaW50IGluaWZsYWdzID0gLTE7CQkJLyogZmNudGwg ZmxhZ3MgZm9yIHR0eWZkICovCisjZW5kaWYgLyogRl9TRVRGTCAqLworICAgIGludCBmZGZsYWcg PSAwOwkJCS8qIEZsYWcgZm9yIHJlZGlyZWN0ZWQgc3RkaW8gKi8KKyAgICBpbnQgdHRmZGZsZyA9 IDA7CQkJLyogT3BlbiBGaWxlIGRlc2NyaXB0b3Igd2FzIGdpdmVuICovCisgICAgaW50IHR2dGZs ZyA9IDA7CQkJLyogRmxhZyB0aGF0IHR0dnQgaGFzIGJlZW4gY2FsbGVkICovCisgICAgbG9uZyB0 dHNwZWVkID0gLTFMOwkJCS8qIEZvciBzYXZpbmcgc3BlZWQgKi8KKyAgICBpbnQgdHRmbG93ID0g LTk7CQkJLyogRm9yIHNhdmluZyBmbG93ICovCisgICAgaW50IHR0bGQgPSAtMTsJCQkvKiBMaW5l IGRpc2NpcGxpbmUgKi8KKworI2lmZGVmIHNvbnlfbmV3cworICAgIHN0YXRpYyBpbnQga21fY29u ID0gLTE7CQkvKiBLYW5qaSBtb2RlIGZvciBjb25zb2xlIHR0eSAqLworICAgIHN0YXRpYyBpbnQg a21fZXh0ID0gLTE7CQkvKiBLYW5qaSBtb2RlIGZvciBleHRlcm5hbCBkZXZpY2UgKi8KKyNlbmRp ZiAvKiBzb255X25ld3MgKi8KKworI2lmZGVmIFBBUlNFTlNFCisgICAgc3RhdGljIGludCBuZWVk cGNoayA9IDE7CQkvKiBOZWVkIHBhcml0eSBjaGVjayAqLworI2Vsc2UKKyAgICBzdGF0aWMgaW50 IG5lZWRwY2hrID0gMDsKKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworCisgICAgZXh0ZXJuIGludCBz dG9wYml0czsJCS8qIFN0b3AgYml0cyAqLworI2lmZGVmIEhXUEFSSVRZCisvKgorICBVbmZvcnR1 bmF0ZWx5IHdlIG11c3QgZG8gdGhpcyB3aXRoIGdsb2JhbCB2YXJpYWJsZXMgcmF0aGVyIHRoYW4g dGhyb3VnaCB0aGUKKyAgdHQuLi4oKSBBUElzIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBBUElzIGFu ZCB0aGUgbWFueSBtb2R1bGVzIHRoYXQgdXNlIHRoZW0uCisgIElmIGh3cGFyaXR5ICE9IDAsIHRo aXMgaW5kaWNhdGVzIDggZGF0YSBiaXRzICsgcGFyaXR5LCByYXRoZXIgdGhhbiA3IGRhdGEKKyAg Yml0cyArIHBhcml0eSBvciA4IGRhdGEgYml0cyBhbmQgbm8gcGFyaXR5LCBhbmQgb3ZlcnJpZGVz IHRoZSByZWd1bGFyIHBhcml0eQorICB2YXJpYWJsZSwgd2hpY2ggaXMgY29tbXVuaWNhdGVkIHRv IHRoaXMgbW9kdWxlIHRocnUgdHRwa3QoKSwgYW5kIHJlcHJlc2VudGVkCisgIGxvY2FsbHkgYnkg dGhlIHR0cHJ0eSB2YXJpYWJsZS4KKyovCisgICAgZXh0ZXJuIGludCBod3Bhcml0eTsJCS8qIEhh cmR3YXJlIHBhcml0eSAqLworI2VuZGlmIC8qIEhXUEFSSVRZICovCisKKyNpZmRlZiBUQ1BTT0NL RVQKKyNpZmRlZiBUQ1BfTk9ERUxBWQorc3RhdGljIGludCBub2RlbGF5X3NhdiA9IC0xOworI2Vu ZGlmIC8qIFRDUF9OT0RFTEFZICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKK3N0YXRpYyBp bnQgc2lnaW50X2lnbiA9IDA7CQkvKiBTSUdJTlQgaXMgaWdub3JlZCAqLworCisvKgorICBIYXZp bmcgdGhpcyBtb2R1bGUgcmVseSBvbiBleHRlcm5hbCBnbG9iYWxzIGlzIGJhZCwgYnV0IGZpeGlu ZyB0aGlzCisgIHJlcXVpcmVzIG92ZXJoYXVsIG9mIHRoZSBjayp0aW8uYyBtb2R1bGVzIGZvciBh bGwgdGhlIGRpZmZlcmVudCBvcGVyYXRpbmcKKyAgc3lzdGVtcyBzdXBwb3J0ZWQgYnkgQy1LZXJt aXQuICBMZWZ0IGZvciBhIGZ1dHVyZSByZWxlYXNlLgorKi8KK2V4dGVybiBpbnQgdHRucHJvdG87 CQkJLyogRGVmaW5lZCBpbiBja2NuZXQuYyAqLworZXh0ZXJuIGludCB0dG5ldDsJCQkvKiBEZWZp bmVkIGluIGNrY25ldC5jICovCitleHRlcm4gaW50IG5vcHVzaCwgeGZyY2FuLCB4ZnJjaHIsIHhm cm51bTsgLyogRGVmaW5lZCBpbiBja2NtYWkuYyAqLworZXh0ZXJuIGludCB4c3VzcGVuZCwgd2Fz Y2xvc2VkOworZXh0ZXJuIGludCBpbnNlcnZlciwgbG9jYWw7CisKK2ludCBja3hlY2ggPSAwOyAv KiAwIGlmIHN5c3RlbSBub3JtYWxseSBlY2hvZXMgY29uc29sZSBjaGFyYWN0ZXJzLCBlbHNlIDEg Ki8KKworaW50IGNrbWF4ZmlsZXMgPSAwOwkJCS8qIE1heCBudW1iZXIgb2Ygb3BlbiBmaWxlcyAq LworCisjaWZkZWYgQ0tfRU5DUllQVElPTgkJCS8qIEtlcmJlcm9zICovCisjaW5jbHVkZSAiY2t1 YXRoLmgiCitleHRlcm4gaW50IG1lX2VuY3J5cHQsIHVfZW5jcnlwdDsKKyNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCisKKy8qIERlY2xhcmF0aW9ucyBvZiB2YXJpYWJsZXMgZ2xvYmFsIHdpdGhp biB0aGlzIG1vZHVsZSAqLworCisjaWZkZWYgVFRMRUJVRgkJCQkvKiBTZWUgY2tjbmV0LmggKi8K K2ludCB0dHB1c2ggPSAtMTsKKyNkZWZpbmUgTEVCVUZTSVogNDA5Ngorc3RhdGljIENIQVIgbGVf YnVmW0xFQlVGU0laXTsKK3N0YXRpYyBpbnQgbGVfc3RhcnQgPSAwLCBsZV9lbmQgPSAwLCBsZV9k YXRhID0gMDsKKyNlbmRpZiAvKiBUVExFQlVGICovCisKKyNkZWZpbmUgTVNHQlVGX1NJWkUgMTAy NAkJLyogRm9yIGRlYnVnZ2luZyAqLworc3RhdGljIGNoYXIgbXNnYnVmW01TR0JVRl9TSVpFXTsK Kworc3RhdGljIGludCBnb3RzaWdzID0gMDsKKworc3RhdGljIHRpbWVfdCB0Y291bnQgPSAodGlt ZV90KTA7CS8qIEVsYXBzZWQgdGltZSBjb3VudGVyICovCisKK3N0YXRpYyBTSUdUWVAgKCpzYXZh bCkoKSAgICAgPSBOVUxMOwkvKiBGb3Igc2F2aW5nIGFsYXJtKCkgaGFuZGxlciAqLworc3RhdGlj IFNJR1RZUCAoKnNhdnF1aXQpKCkgICA9IE5VTEw7CS8qIGFuZCBvdGhlciBzaWduYWwgaGFuZGxl cnMgKi8KKyNpZmRlZiBTSUdVU1IxCitzdGF0aWMgU0lHVFlQICgqc2F2dXNyMSkoKSAgID0gTlVM TDsKKyNlbmRpZiAvKiBTSUdVU1IxICovCisjaWZkZWYgU0lHVVNSMgorc3RhdGljIFNJR1RZUCAo KnNhdnVzcjIpKCkgICA9IE5VTEw7CisjZW5kaWYgLyogU0lHVVNSMiAqLworI2lmZGVmIFNJR1BJ UEUKK3N0YXRpYyBTSUdUWVAgKCpzYXZwaXBlKSgpICAgPSBOVUxMOworI2VuZGlmIC8qIFNJR1BJ UEUgKi8KKyNpZmRlZiBTSUdEQU5HRVIKK3N0YXRpYyBTSUdUWVAgKCpzYXZkYW5nZXIpKCkgPSBO VUxMOworI2VuZGlmIC8qIFNJR0RBTkdFUiAqLworCisjaWZuZGVmIE5PSkMKK3N0YXRpYyBTSUdU WVAgKCpqY2hkbHIpKCkgICAgPSBOVUxMOwkvKiBGb3IgY2hlY2tpbmcgc3VzcGVuZCBoYW5kbGVy ICovCisjZW5kaWYgLyogTk9KQyAqLworc3RhdGljIGludCBqY3NoZWxsID0gLTE7CQkvKiBBbmQg ZmxhZyBmb3IgcmVzdWx0ICovCisKKy8qCisgIEJSRUFLTlVMUyBpcyBkZWZpbmVkIGZvciBzeXN0 ZW1zIHRoYXQgc2ltdWxhdGUgc2VuZGluZyBhIEJSRUFLIHNpZ25hbAorICBieSBzZW5kaW5nIGEg YnVuY2ggb2YgTlVMIGNoYXJhY3RlcnMgYXQgbG93IHNwZWVkLgorKi8KKyNpZmRlZiBQUk9WWDEK KyNpZm5kZWYgQlJFQUtOVUxTCisjZGVmaW5lIEJSRUFLTlVMUworI2VuZGlmIC8qIEJSRUFLTlVM UyAqLworI2VuZGlmIC8qIFBST1ZYMSAqLworCisjaWZkZWYgVjcKKyNpZm5kZWYgQlJFQUtOVUxT CisjZGVmaW5lIEJSRUFLTlVMUworI2VuZGlmIC8qIEJSRUFLTlVMUyAqLworI2VuZGlmIC8qIFY3 ICovCisKKyNpZmRlZiBCUkVBS05VTFMKK3N0YXRpYyBjaGFyCQkJCS8qIEEgc3RyaW5nIG9mIG51 bGxzICovCisqYnJudWxzID0gIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFww XDBcMFwwXDBcMFwwXDAiOworI2VuZGlmIC8qIEJSRUFLTlVMUyAqLworCisjaWZkZWYgQ0tfUE9T SVhfU0lHCQkJLyogTG9uZ2p1bXAgYnVmZmVycyAqLworc3RhdGljIHNpZ2ptcF9idWYgc2pidWY7 CQkvKiBQT1NJWCBzaWduYWwgaGFuZGxpbmcgKi8KKyNlbHNlCitzdGF0aWMgam1wX2J1ZiBzamJ1 ZjsKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKworI2lmZGVmIFY3CitzdGF0aWMgam1wX2J1 ZiBqamJ1ZjsKKyNlbmRpZiAvKiBWNyAqLworCisvKiBzdGF0aWMgKi8JCQkJLyogKE5vdCBzdGF0 aWMgYW55IG1vcmUpICovCitpbnQgdHR5ZmQgPSAtMTsJCQkJLyogVFRZIGZpbGUgZGVzY3JpcHRv ciAqLworCitpbnQgdHRwaXBlID0gMDsJCQkJLyogTkVUQ01EOiBVc2UgcGlwZSBpbnN0ZWFkIG9m IHR0eWZkICovCitpbnQgdHRwdHkgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVU UFRZOiBVc2UgcHR5IGluc3RlYWQgb2YgdHRmeWQgKi8KKworI2lmZGVmIE5FVFBUWQkJCQkvKiBU aGVzZSBhcmUgaW4gY2t1cHR5LmMgKi8KK2V4dGVybiBQSURfVCBwdHlfZm9ya19waWQ7CitleHRl cm4gaW50IHB0eV9tYXN0ZXJfZmQsIHB0eV9zbGF2ZV9mZDsKKyNlbmRpZgkvKiBORVRQVFkgKi8K KworI2lmZGVmIE5FVENNRAorI2lmZGVmIE5FVENPTk4KK3N0YXRpYyBpbnQgcGlwZTBbMl0sIHBp cGUxWzJdOwkJLyogUGlwZXMgZm9yIG5ldCBpL28gKi8KKyNlbmRpZiAvKiBORVRDT05OICovCitz dGF0aWMgUElEX1QgdHRwaWQgPSAwOwkJCS8qIFByb2Nlc3MgSUQgZm9yIGZvcmsgKi8KK3N0YXRp YyBpbnQgZmRpbiwgZmRvdXQ7CQkJLyogRmlsZSBkZXNjcmlwdG9ycyBmb3IgcGlwZSAqLworc3Rh dGljIEZJTEUgKiB0dG91dCA9IE5VTEw7CQkvKiBGaWxlIHBvaW50ZXIgZm9yIG91dHB1dCBwaXBl ICovCisjaWZkZWYgRENMRkRPUEVOCisvKiBmZG9wZW4oKSBuZWVkcyBkZWNsYXJpbmcgYmVjYXVz ZSBpdCdzIG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KK19QUk9UT1RZUCggRklMRSAqIGZk b3BlbiwgKGludCwgY2hhciAqKSApOworI2VuZGlmIC8qIERDTEZET1BFTiAqLworI2VuZGlmIC8q IE5FVENNRCAqLworCitleHRlcm4gaW50IHBleGl0c3RhdCwgcXVpZXQ7CisKKyNpZmRlZiBQbGFu OQoraW50IHR0eWN0bGZkICA9IC0xOyAgIC8qIFRUWSBjb250cm9sIGNoYW5uZWwgLSBXaGF0PyBV TklYIGRvZXNuJ3QgaGF2ZSBvbmU/ICovCitpbnQgY29uc2N0bGZkID0gLTE7CQkJLyogQ29uc29s ZSBjb250cm9sIGNoYW5uZWwgKi8KK2ludCBub2lzZWZkID0gLTE7CQkJLyogdG9uZSBjaGFubmVs ICovCitzdGF0aWMgaW50IHR0eWxhc3RzcGVlZCA9IC0xOwkJLyogU28gd2UgY2FuIGxpZSBhYm91 dCB0aGUgc3BlZWQgKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworCitpbnQgdGVsbmV0ZmQgPSAwOwkJ CS8qIEZpbGUgZGVzY3JpcHRvciBpcyBmb3IgdGVsbmV0ICovCisjaWZkZWYgTkVUQ09OTgoraW50 IHgyNWZkID0gMDsJCQkJLyogRmlsZSBkZXNjcmlwdG9yIGlzIGZvciBYLjI1ICovCisjZW5kaWYg LyogTkVUQ09OTiAqLworCitjaGFyIGxvY2twaWRbMTZdID0geyAnXDAnLCAnXDAnIH07CS8qIFBJ RCBzdG9yZWQgaW4gbG9ja2ZpbGUsIGFzIHN0cmluZyAqLworCitzdGF0aWMgaW50IGxrZiA9IDAs ICAgICAgICAgICAgICAgICAgICAgLyogTGluZSBsb2NrIGZsYWcgKi8KKyAgICBjZ21mID0gMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgY29uc29sZSBtb2RlcyBzYXZl ZCAqLworICAgIHhsb2NhbCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9y IHR0eSBsb2NhbCBvciByZW1vdGUgKi8KKyAgICBjdXJjYXJyID0gMDsJCQkvKiBDYXJyaWVyIG1v ZGU6IHJlcXVpcmUvaWdub3JlLiAqLworCitzdGF0aWMgaW50IG5ldGNvbm4gPSAwOwkJCS8qIDEg aWYgbmV0d29yayBjb25uZWN0aW9uIGFjdGl2ZSAqLworCitzdGF0aWMgY2hhciBlc2NjaHI7ICAg ICAgICAgICAgICAgICAgICAgLyogRXNjYXBlIG9yIGF0dG4gY2hhcmFjdGVyICovCisKKyNpZmRl ZiBDS19TQ08zMlY0CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZiAvKiBDS19TQ08zMlY0 ICovCisKKyNpZmRlZiBIQVZFX1RWCisgICAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHR2OwkJLyog Rm9yIGdldHRpbmcgdGltZSwgZnJvbSBzeXMvdGltZS5oICovCisjZW5kaWYgLyogSEFWRV9UViAq LworI2lmZGVmIEhBVkVfVFoKKyAgICBzdGF0aWMgc3RydWN0IHRpbWV6b25lIHR6OworI2VuZGlm IC8qIEhBVkVfVFogKi8KKworI2lmZGVmIE9TRgorICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRw OyAgICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCisjZW5kaWYgLyogT1NGICov CisKKyNpZmRlZiBCU0QyOQorICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3IgZ2V0dGlu ZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLworICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOyAg ICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCisjZW5kaWYgLyogQlNEMjkgKi8K KworI2lmZGVmIEJTRDQxCisgICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0aW5n IHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7ICAg ICAgICAgICAgLyogQW5kIGZyb20gc3lzL3RpbWViLmggKi8KKyNlbmRpZiAvKiBCU0Q0MSAqLwor CisjaWZkZWYgQkVMTFYxMAorICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3IgZ2V0dGlu ZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLworICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOyAg ICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCisjZW5kaWYgLyogQkVMTFYxMCAq LworCisjaWZkZWYgRlQyMQorICAgIHN0YXRpYyBsb25nIHhjbG9jazsJCQkvKiBGb3IgZ2V0dGlu ZyB0aW1lIGZyb20gc3lzL3RpbWUuaCAqLworICAgIHN0YXRpYyBzdHJ1Y3QgdGltZWIgZnRwOyAg ICAgICAgICAgIC8qIEFuZCBmcm9tIHN5cy90aW1lYi5oICovCisjZW5kaWYgLyogRlQyMSAqLwor CisjaWZkZWYgVE9XRVIxCisgICAgc3RhdGljIGxvbmcgeGNsb2NrOwkJCS8qIEZvciBnZXR0aW5n IHRpbWUgZnJvbSBzeXMvdGltZS5oICovCisgICAgc3RhdGljIHN0cnVjdCB0aW1lYiBmdHA7CQkv KiBBbmQgZnJvbSBzeXMvdGltZWIuaCAqLworI2VuZGlmIC8qIFRPV0VSMSAqLworCisjaWZkZWYg Q09IRVJFTlQKKyAgICBzdGF0aWMgbG9uZyB4Y2xvY2s7CQkJLyogRm9yIGdldHRpbmcgdGltZSBm cm9tIHN5cy90aW1lLmggKi8KKyAgICBzdGF0aWMgc3RydWN0IHRpbWViIGZ0cDsJCS8qIEFuZCBm cm9tIHN5cy90aW1lYi5oICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIFY3Cisg ICAgc3RhdGljIGxvbmcgeGNsb2NrOworI2VuZGlmIC8qIFY3ICovCisKKy8qIHNndHR5L3Rlcm1p byBpbmZvcm1hdGlvbi4uLiAqLworCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggb3Ig QlNENDQgKi8KKyAgc3RhdGljIHN0cnVjdCB0ZXJtaW9zCisgICAgdHRvbGQsIHR0cmF3LCB0dHR2 dCwgdHRjdXIsCisgICAgY2NvbGQsIGNjcmF3LCBjY2Nicms7CisjZWxzZQkJCQkJLyogQlNELCBW NywgZXRjICovCisKKyNpZmRlZiBDT0hFUkVOVAkJCQkvKiBIYWNrIGFsZXJ0Li4uICovCisjZGVm aW5lIEFUVFNWCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lmZGVmIEFUVFNWCisgIHN0YXRp YyBzdHJ1Y3QgdGVybWlvIHR0b2xkID0gezB9OwkvKiBJbml0J2QgZm9yIHdvcmQgYWxpZ25tZW50 LCAqLworICBzdGF0aWMgc3RydWN0IHRlcm1pbyB0dHJhdyA9IHswfTsJLyogd2hpY2ggaXMgaW1w b3J0YW50IGZvciBzb21lICovCisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0dHZ0ID0gezB9Owkv KiBzeXN0ZW1zLCBsaWtlIFppbG9nLi4uICovCisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIHR0Y3Vy ID0gezB9OworICBzdGF0aWMgc3RydWN0IHRlcm1pbyBjY29sZCA9IHswfTsKKyAgc3RhdGljIHN0 cnVjdCB0ZXJtaW8gY2NyYXcgPSB7MH07CisgIHN0YXRpYyBzdHJ1Y3QgdGVybWlvIGNjY2JyayA9 IHswfTsKKyNlbHNlCisgIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliICAgICAgICAgICAgICAgICAgLyog c2d0dHkgaW5mby4uLiAqLworICAgIHR0b2xkLCB0dHJhdywgdHR0dnQsIHR0Y3VyLCAJLyogZm9y IGNvbW11bmljYXRpb24gbGluZSAqLworICAgIGNjb2xkLCBjY3JhdywgY2NjYnJrOwkJLyogYW5k IGZvciBjb25zb2xlICovCisjaWZkZWYgQkVMTFYxMAorICBzdGF0aWMgc3RydWN0IHR0eWRldmIJ CQkvKiBEZXZpY2UgaW5mby4uLiAqLworICAgIHRkb2xkLCB0ZGN1cjsJCQkvKiBmb3IgY29tbXVu aWNhdGlvbiBkZXZpY2UgKi8KKyNlbmRpZiAvKiBCRUxMVjEwICovCisjaWZkZWYgVElPQ0dFVEMK KyAgc3RhdGljIHN0cnVjdCB0Y2hhcnMgdGNob2xkLCB0Y2hub2k7CisKKyAgc3RhdGljIGludCB0 Y2hhcmY7CisjZW5kaWYgLyogVElPQ0dFVEMgKi8KKyNpZmRlZiBUSU9DR0xUQworICBzdGF0aWMg c3RydWN0IGx0Y2hhcnMgbHRjaG9sZCwgbHRjaG5vaTsKKyAgc3RhdGljIGludCBsdGNoYXJmOwor I2VuZGlmIC8qIFRJT0NHTFRDICovCisgIGludCBsbW9kZWYgPSAwOwkJCS8qIExvY2FsIG1vZGVz ICovCisgIGludCBsbW9kZSA9IDA7CisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0 NE9SUE9TSVggKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIEl0IHBpY2tzIHVwIHRoZSBzcGVlZHMg YnV0IHRoZXkgZG9uJ3Qgd29yayAqLworI2lmZGVmIFVOSVhXQVJFCQkJCS8qIEZvciBoaWdoZXIg c2VyaWFsIHNwZWVkcyAqLworI2lmZGVmIFVXNwkJCQkvKiBpbiBVbml4d2FyZSA3LjAgKi8KKyNp bmNsdWRlIDxzeXMvYXN5Yy5oPgkJCS8qIFRoaXMgcGlja3MgdXAgNTc2MDAgYW5kIDExNTIwMCAq LworI2VuZGlmIC8qIFVXNyAqLworI2VuZGlmIC8qIFVOSVhXQVJFICovCisjZW5kaWYgLyogQ09N TUVOVCAqLworCisjaWZkZWYgUFJPVlgxCisgIHN0YXRpYyBzdHJ1Y3Qgc2d0dHliIHR0YnVmOwor I2VuZGlmIC8qIFBST1ZYMSAqLworCisjaWZkZWYgdWx0cml4CisvKiBkbyB3ZSByZWFsbHkgbmVl ZCB0aGlzPyAqLworICBzdGF0aWMgc3RydWN0IHNndHR5YiB2YW5pbGxhOworI2VuZGlmIC8qIHVs dHJpeCAqLworCisjaWZkZWYgQVRUNzMwMAorc3RhdGljIGludCBhdHRtb2RlbSA9IDA7ICAgICAg ICAgICAgICAgIC8qIEFUVDczMDAgaW50ZXJuYWwtbW9kZW0gc3RhdHVzICovCitzdHJ1Y3QgdXBk YXRhIGRpYWxlciA9IHswfTsJCS8qIENvbmRpdGlvbiBkaWFsZXIgZm9yIGRhdGEgY2FsbCAqLwor I2VuZGlmIC8qIEFUVDczMDAgKi8KKworI2lmbmRlZiBOT1VVQ1AKKyNkZWZpbmUgRkxGTkFNTCAx MjgKKyNpZm5kZWYgVVNFVFRZTE9DSworI2lmZGVmIFJUQUlYCitjaGFyIGxrZmxmbltGTEZOQU1M XSA9IHsgJ1wwJywgJ1wwJyB9OwkvKiBhbmQgcG9zc2libGUgbGluayB0byBpdCAqLworI2VuZGlm IC8qIFJUQUlYICovCitjaGFyIGxvY2syW0ZMRk5BTUxdID0gIHsgJ1wwJywgJ1wwJyB9OwkvKiBO YW1lIG9mIHNlY29uZCBsb2NrZmlsZSAqLworI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KKyNlbHNl CisjZGVmaW5lIEZMRk5BTUwgNworI2VuZGlmIC8qIE5PVVVDUCAqLworY2hhciBmbGZuYW1bRkxG TkFNTCsxXSA9IHsgJ1wwJywgJ1wwJyB9OyAvKiBVVUNQIGxvY2sgZmlsZSBwYXRoIG5hbWUgKi8K KworaW50IGhhc2xvY2sgPSAwOwkJCS8qID0xIGlmIHRoaXMga2VybWl0IGxvY2tlZCB1dWNwICov CisKKyNpZm5kZWYgT1hPUworI2lmZGVmIFNWT1JQT1NJWAorc3RhdGljIGludCBjb25lc2MgPSAw OyAgICAgICAgICAgICAgICAgIC8qIHNldCB0byAxIGlmIGVzYyBjaGFyICheXCkgdHlwZWQgKi8K KyNlbHNlCisjaWZkZWYgVjcKK3N0YXRpYyBpbnQgY29uZXNjID0gMDsKKyNlbHNlCisjaWZkZWYg QzcwCitzdGF0aWMgaW50IGNvbmVzYyA9IDA7CisjZW5kaWYgLyogQzcwICovCisjZW5kaWYgLyog VjcgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKyNlbmRpZiAvKiBPWE9TICovCisKKy8qIExv Y2FsIGNvcHkgb2YgY29tbSBkZXZpY2UgbmFtZSBvciBuZXR3b3JrIGhvc3QgKi8KK3N0YXRpYyBj aGFyIHR0bm1zdltERVZOQU1MRU4rMV0gPSB7ICdcMCcsICdcMCcgfTsKKyNpZmRlZiBVU0VUVFlM T0NLCitzdGF0aWMgY2hhciBsb2NrbmFtZVtERVZOQU1MRU4rMV07CS8qIERpdHRvLCB0aGUgcGFy dCBhZnRlciAiL2Rldi8iLiAqLworI2VuZGlmIC8qIFVTRVRUWUxPQ0sgKi8KKworI2lmZGVmIGFl Z2lzCitzdGF0aWMgc3RhdHVzXyR0IHN0OyAgICAgICAgICAgICAgICAgICAgLyogZXJyb3Igc3Rh dHVzIHJldHVybiB2YWx1ZSAqLworc3RhdGljIHNob3J0IGNvbmNycCA9IDA7ICAgICAgICAgICAg ICAgIC8qIHRydWUgaWYgY29uc29sZSBpcyBDUlAgcGFkICovCitzdGF0aWMgdWlkXyR0IHR0eXVp ZDsgICAgICAgICAgICAgICAgICAgLyogdHR5IHR5cGUgdWlkICovCitzdGF0aWMgdWlkXyR0IGNv bnVpZDsgICAgICAgICAgICAgICAgICAgLyogc3Rkb3V0IHR5cGUgdWlkICovCisKKy8qIEFQT0xM TyBBZWdpcyBtYWluKCkKKyAqIGVzdGFibGlzaCBhY2wgdXNhZ2UgYW5kIGNsZWFudXAgaGFuZGxp bmcKKyAqICAgIHRoaXMgbWFrZXMgc3VyZSB0aGF0IENSUCBwYWRzCisgKiAgICBnZXQgcmVzdG9y ZWQgdG8gYSB1c2FibGUgbW9kZQorICovCittYWluKGFyZ2MsYXJndikgaW50IGFyZ2M7IGNoYXIg Kiphcmd2OyB7CisgICAgICAgIHN0YXR1c18kdCBzdGF0dXM7CisgICAgICAgIHBmbV8kY2xlYW51 cF9yZWMgZGlydHk7CisKKyAgICAgICAgUElEX1QgcGlkID0gZ2V0cGlkKCk7CisKKyAgICAgICAg LyogYWNsIHVzYWdlIGFjY29yZGluZyB0byBpbnZva2luZyBlbnZpcm9ubWVudCAqLworICAgICAg ICBkZWZhdWx0X2FjbChVU0VfREVGRU5WKTsKKworICAgICAgICAvKiBlc3RhYmxpc2ggYSBjbGVh bnVwIGNvbnRpbnVhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSBwZm1fJGNsZWFudXAoZGlydHkp OworICAgICAgICBpZiAoc3RhdHVzLmFsbCAhPSBwZm1fJGNsZWFudXBfc2V0KSB7CisgICAgICAg ICAgICAgICAgLyogb25seSBoYW5kbGUgZmF1bHRzIGZvciB0aGUgb3JpZ2luYWwgcHJvY2VzcyAq LworICAgICAgICAgICAgICAgIGlmIChwaWQgPT0gZ2V0cGlkKCkgJiYgc3RhdHVzLmFsbCA+IHBn bV8kbWF4X3NldmVyaXR5KSB7CisJCSAgICAvKiBibGV3IHVwIGluIG1haW4gcHJvY2VzcyAqLwor CQkgICAgc3RhdHVzXyR0IHF1bzsKKwkJICAgIHBmbV8kY2xlYW51cF9yZWMgY2xlYW47CisKKwkJ ICAgIC8qIHJlc3RvcmUgdGhlIGNvbnNvbGUgaW4gYW55IGNhc2UgKi8KKwkJICAgIGNvbnJlcygp OworCisJCSAgICAvKiBhdHRlbXB0IGEgY2xlYW4gZXhpdCAqLworCQkgICAgZGVidWcoRjEwMSwg ImNsZWFudXAgZmF1bHQgc3RhdHVzIiwgIiIsIHN0YXR1cy5hbGwpOworCisJCSAgICAvKiBkb2V4 aXQoKSwgdGhlbiBzZW5kIHN0YXR1cyB0byBjb250aW51YXRpb24gKi8KKwkJICAgIHF1byA9IHBm bV8kY2xlYW51cChjbGVhbik7CisJCSAgICBpZiAocXVvLmFsbCA9PSBwZm1fJGNsZWFudXBfc2V0 KQorCQkgICAgICBkb2V4aXQocGdtXyRwcm9ncmFtX2ZhdWx0ZWQsLTEpOworCQkgICAgZWxzZSBp ZiAocXVvLmFsbCA+IHBnbV8kbWF4X3NldmVyaXR5KQorCQkgICAgICBwZm1fJHNpZ25hbChxdW8p OyAvKiBibGV3IHVwIGluIGRvZXhpdCgpICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIC8qIHNlbmQgdG8gdGhlIG9yaWdpbmFsIGNvbnRpbnVhdGlvbiAqLworICAgICAgICAg ICAgICAgIHBmbV8kc2lnbmFsKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgLypOT1RSRUFDSEVE Ki8KKwkgICAgfQorICAgICAgICByZXR1cm4oY2tjbWFpKGFyZ2MsIGFyZ3YpKTsKK30KKyNlbmRp ZiAvKiBhZWdpcyAqLworCisvKiBBTlNJLXN0eWxlIHByb3RvdHlwZXMgZm9yIGludGVybmFsIGZ1 bmN0aW9ucy4gKi8KKy8qIEZ1bmN0aW9ucyB1c2VkIG91dHNpZGUgdGhpcyBtb2R1bGUgYXJlIHBy b3RvdHlwZWQgaW4gY2tja2VyLmguICovCisKKyNpZmRlZiBhcG9sbG8KK19QUk9UT1RZUCggU0lH VFlQIHRpbWVyaCwgKCkgKTsKK19QUk9UT1RZUCggU0lHVFlQIGNjdHJhcCwgKCkgKTsKK19QUk9U T1RZUCggU0lHVFlQIGVzY3RycCwgKCkgKTsKK19QUk9UT1RZUCggU0lHVFlQIHNpZ19pZ24sICgp ICk7CisjZWxzZQorX1BST1RPVFlQKCBTSUdUWVAgdGltZXJoLCAoaW50KSApOworX1BST1RPVFlQ KCBTSUdUWVAgY2N0cmFwLCAoaW50KSApOworX1BST1RPVFlQKCBTSUdUWVAgZXNjdHJwLCAoaW50 KSApOworI2VuZGlmIC8qIGFwb2xsbyAqLworX1BST1RPVFlQKCBpbnQgZG9fb3BlbiwgKGNoYXIg KikgKTsKK19QUk9UT1RZUCggc3RhdGljIGludCBpbl9jaGssIChpbnQsIGludCkgKTsKK19QUk9U T1RZUCggc3RhdGljIGludCB0dHJwaWQsIChjaGFyICopICk7CitfUFJPVE9UWVAoIHN0YXRpYyBp bnQgdHRjaGtwaWQsIChjaGFyICopICk7CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgdHRsb2NrLCAo Y2hhciAqKSApOworX1BST1RPVFlQKCBzdGF0aWMgaW50IHR0dW5sY2ssICh2b2lkKSApOworX1BS T1RPVFlQKCBzdGF0aWMgVk9JRCBzaWdjaGxkX2hhbmRsZXIsIChpbnQpICk7CitfUFJPVE9UWVAo IGludCBteWdldGJ1ZiwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBteWZpbGxidWYsICh2b2lk KSApOworX1BST1RPVFlQKCBWT0lEIGNvbmJndCwgKGludCkgKTsKKyNpZmRlZiBBQ1VDTlRSTAor X1BST1RPVFlQKCBWT0lEIGFjdWNudHJsLCAoY2hhciAqLCBjaGFyICopICk7CisjZW5kaWYgLyog QUNVQ05UUkwgKi8KKworI2lmZGVmIEJTRDQ0T1JQT1NJWAorX1BST1RPVFlQKCBpbnQgY2FycmN0 bCwgKHN0cnVjdCB0ZXJtaW9zICosIGludCkgKTsKKyNlbHNlCisjaWZkZWYgQVRUU1YKK19QUk9U T1RZUCggaW50IGNhcnJjdGwsIChzdHJ1Y3QgdGVybWlvICosIGludCkgKTsKKyNlbHNlCitfUFJP VE9UWVAoIGludCBjYXJyY3RsLCAoc3RydWN0IHNndHR5YiAqLCBpbnQpICk7CisjZW5kaWYgLyog QVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKworI2lmZGVmIEFUVDczMDAKK19Q Uk9UT1RZUCggaW50IGF0dGRpYWwsIChjaGFyICosIGxvbmcsIGNoYXIgKikgKTsKK19QUk9UT1RZ UCggaW50IG9mZmdldHR5LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgb25nZXR0eSwgKGNo YXIgKikgKTsKKyNlbmRpZiAvKiBBVFQ3MzAwICovCisKKyNpZmRlZiBCRU9TT1JCRUJPWAorI2lm ZGVmIFNFTEVDVAorICAgIC8qIEJlT1MgaXMgbm90IGNhcGFibGUgb2YgdXNpbmcgU0VMRUNUIG9u IGFueXRoaW5nIGJ1dCBzb2NrZXRzICovCisjdW5kZWYgU0VMRUNUCisjZW5kaWYgLyogU0VMRUNU ICovCisjaW5jbHVkZSA8a2VybmVsL09TLmg+CisvKiAjaWZkZWYgQkVfRFJfNyAqLworc3RhdGlj IGRvdWJsZSB0aW1lX3N0YXJ0ZWQgPSAwLjA7CitzdHJ1Y3QgQUxBUk1fU1RSVUNUIHsKKyAgICB0 aHJlYWRfaWQgdGhyZWFkOworICAgIGludCB0aW1lOworfTsKK3N0YXRpYyB0aHJlYWRfaWQgYWxh cm1fdGhyZWFkID0gLTE7CitzdGF0aWMgc3RydWN0IEFMQVJNX1NUUlVDVCBhbGFybV9zdHJ1Y3Q7 CitfUFJPVE9UWVAoIGxvbmcgZG9fYWxhcm0sICh2b2lkICopICk7CitfUFJPVE9UWVAoIHVuc2ln bmVkIGludCBhbGFybSwgKHVuc2lnbmVkIGludCkgKTsKK19QUk9UT1RZUCggdm9pZCBhbGFybV9l eHBpcmVkLCAodm9pZCkgKTsKKy8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCisjZW5kaWYgLyog QkVPU09SQkVCT1ggKi8KKworI2lmbmRlZiB4dW5jaGFyCisjZGVmaW5lIHh1bmNoYXIoY2gpICgo KGNoKSAtIDMyICkgJiAweEZGICkJLyogQ2hhcmFjdGVyIHRvIG51bWJlciAqLworI2VuZGlmIC8q IHh1bmNoYXIgKi8KKworI2lmZGVmIENLX0FOU0lDCitzdGF0aWMgY2hhciAqCit4eGxhc3QoY2hh ciAqcywgY2hhciBjKQorI2Vsc2UKK3N0YXRpYyBjaGFyICoKK3h4bGFzdChzLGMpIGNoYXIgKnM7 IGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogeHhsYXN0ICovIHsJCS8qICBMYXN0 IG9jY3VycmVuY2Ugb2YgY2hhcmFjdGVyIGMgaW4gc3RyaW5nIHMuICovCisgICAgaW50IGk7Cisg ICAgZm9yIChpID0gKGludClzdHJsZW4ocyk7IGkgPiAwOyBpLS0pCisgICAgICBpZiAoc1tpLTFd ID09IGMgKSByZXR1cm4ocyArIChpIC0gMSkpOworICAgIHJldHVybihOVUxMKTsKK30KKworLyog VGltZW91dCBoYW5kbGVyIGZvciBjb21tdW5pY2F0aW9uIGxpbmUgaW5wdXQgZnVuY3Rpb25zICov CisKKy8qQVJHU1VTRUQqLworU0lHVFlQCit0aW1lcmgoZm9vKSBpbnQgZm9vOyB7CisgICAgdHRp bW9mZigpOworI2lmZGVmIEJFT1NPUkJFQk9YCisvKiAjaWZkZWYgQkVfRFJfNyAqLworICAgIGFs YXJtX2V4cGlyZWQoKTsKKy8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICovCisjZW5kaWYgLyogQkVP U09SQkVCT1ggKi8KKyNpZmRlZiBDS19QT1NJWF9TSUcKKyAgICBzaWdsb25nam1wKHNqYnVmLDEp OworI2Vsc2UKKyAgICBsb25nam1wKHNqYnVmLDEpOworI2VuZGlmIC8qIENLX1BPU0lYX1NJRyAq LworfQorCisvKkFSR1NVU0VEKi8KK1NJR1RZUAoreHRpbWVyaChmb28pIGludCBmb287IHsJCQkv KiBMaWtlIHRpbWVyaCgpIGJ1dCBkb2VzICovCisjaWZkZWYgQkVPU09SQkVCT1gJCQkvKiBub3Qg cmVzZXQgdGhlIHRpbWVyIGl0c2VsZiAqLworLyogI2lmZGVmIEJFX0RSXzcgKi8KKyAgICBhbGFy bV9leHBpcmVkKCk7CisvKiAjZW5kaWYgKi8gLyogQkVfRFJfNyAqLworI2VuZGlmIC8qIEJFT1NP UkJFQk9YICovCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisgICAgc2lnbG9uZ2ptcChzamJ1ZiwxKTsK KyNlbHNlCisgICAgbG9uZ2ptcChzamJ1ZiwxKTsKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8K K30KKworCisvKiBDb250cm9sLUMgdHJhcCBmb3IgY29tbXVuaWNhdGlvbiBsaW5lIGlucHV0IGZ1 bmN0aW9ucyAqLworCitpbnQgY2NfaW50OwkJCQkvKiBGbGFnICovCitTSUdUWVAgKCogb2NjdCko KTsJCQkvKiBGb3Igc2F2aW5nIG9sZCBTSUdJTlQgaGFuZGxlciAqLworCisvKkFSR1NVU0VEKi8K K1NJR1RZUAorY2N0cmFwKGZvbykgaW50IGZvbzsgewkJCS8qIE5lZWRzIGFyZyBmb3IgQU5TSSBD ICovCisgIGNjX2ludCA9IDE7CQkJCS8qIHNpZ25hbCgpIHByb3RvdHlwZS4gKi8KKyAgcmV0dXJu OworfQorCisvKiAgUyBZIFMgSSBOIEkgVCAgLS0gIFN5c3RlbS1kZXBlbmRlbnQgcHJvZ3JhbSBp bml0aWFsaXphdGlvbi4gICovCisKKy8qCisgKiB0dGd3c2l6KCkgcmV0dXJuczoKKyAqCTEgICAg dHRfcm93cyBhbmQgdHRfY29scyBhcmUga25vd24sIGJvdGggYWx0ZXJlZCwgYm90aCA+IDAKKyAq CTAgICAgdHRfcm93cyBhbmQvb3IgdHRfY29scyBhcmUga25vd24sIGJvdGggYWx0ZXJlZCwgb25l IG9yIGJvdGggPD0gMAorICoJLTEgICB0dF9yb3dzIGFuZCB0dF9jb2xzIGFyZSB1bmtub3duIGFu ZCB1bmFsdGVyZWQKKyAqLworCitleHRlcm4gaW50IHR0X3Jvd3MsIHR0X2NvbHM7CisKK3N0YXRp YyBpbnQKK3h0dGd3c2l6KCkgeworICAgIGNoYXIgKnA7CisgICAgaW50IHJvd3MgPSAwLCBjb2xz ID0gMDsKKyAgICBwID0gZ2V0ZW52KCJMSU5FUyIpOworICAgIGRlYnVnKEYxMTAsInh0dGd3c2l6 IExJTkVTIixwLDApOworICAgIGlmIChwKSB7CisJcm93cyA9IGF0b2wocCk7CisJaWYgKHJvd3Mg PiAwKSB7CisJICAgIHAgPSBnZXRlbnYoIkNPTFVNTlMiKTsKKwkgICAgZGVidWcoRjExMCwieHR0 Z3dzaXogQ09MVU1OUyIscCwwKTsKKwkgICAgaWYgKHApIHsKKwkJY29scyA9IGF0b2wocCk7CisJ CWlmIChjb2xzID4gMCkgeworCQkgICAgdHRfcm93cyA9IHJvd3M7CisJCSAgICB0dF9jb2xzID0g Y29sczsKKwkJICAgIHJldHVybigxKTsKKwkJfQorCQlyZXR1cm4oMCk7CisJICAgIH0KKwl9Cisg ICAgfQorICAgIHJldHVybigtMSk7Cit9CisKKyNpZmRlZiBUVExFQlVGCitWT0lECitsZV9pbml0 KCkgewkJCQkvKiBMb2NhbEVjaG9Jbml0KCkgKi8KKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgTEVCVUZTSVo7IGkrKykKKyAgICAgIGxlX2J1ZltpXSA9ICdcMCc7CisgICAgbGVfc3Rh cnQgPSAwOworICAgIGxlX2VuZCA9IDA7CisgICAgbGVfZGF0YSA9IDA7Cit9CisKK1ZPSUQKK2xl X2NsZWFuKCkgewkJCQkvKiBMb2NhbEVjaG9DbGVhbnVwKCkgKi8KKyAgICBsZV9pbml0KCk7Cisg ICAgcmV0dXJuOworfQorCitpbnQKK2xlX2luYnVmKCkgeworICAgIGludCByYyA9IDA7CisgICAg aWYgKGxlX3N0YXJ0ICE9IGxlX2VuZCkgeworCXJjID0gKGxlX2VuZCAtCisJICAgICAgbGVfc3Rh cnQgKworCSAgICAgIExFQlVGU0laKSAlIExFQlVGU0laOworICAgIH0KKyAgICBkZWJ1ZyhGMTEx LCJsZV9pbmJ1ZiIsImNoYXJzIHdhaXRpbmciLHJjKTsKKyAgICByZXR1cm4ocmMpOworfQorCitp bnQKKyNpZmRlZiBDS19BTlNJQworbGVfcHV0Y2hhcihDSEFSIGNoKQorI2Vsc2UKK2xlX3B1dGNo YXIoY2gpIENIQVIgY2g7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGxlX3B1dGNoYXIgKi8g eworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBJbiBVTklYIHdlIGRvIG5vdCBoYXZlIGFub3RoZXIg dGhyZWFkIHRha2luZyBjaGFycyBvdXQgb2YgdGhlIGJ1ZmZlciAqLworICAgIHdoaWxlICgobGVf c3RhcnQgLSBsZV9lbmQgPT0gMSkgfHwKKyAgICAgICAgICAgIChsZV9zdGFydCA9PSAwICYmIGxl X2VuZCA9PSBMRUJVRlNJWiAtIDEpKSB7CisJLyogQnVmZmVyIGlzIGZ1bGwgKi8KKyAgICAgICAg ZGVidWcoRjExMSwibGVfcHV0Y2hhciIsIkJ1ZmZlciBpcyBGdWxsIixjaCk7CisgICAgICAgIFJl bGVhc2VMb2NhbEVjaG9NdXRleCgpIDsKKyAgICAgICAgbXNsZWVwKDI1MCk7CisgICAgICAgIFJl cXVlc3RMb2NhbEVjaG9NdXRleCggU0VNX0lOREVGSU5JVEVfV0FJVCApIDsKKyAgICB9CisjZWxz ZQorICAgIGlmICgobGVfc3RhcnQgLSBsZV9lbmQgKyBMRUJVRlNJWiklTEVCVUZTSVogPT0gMSkg eworICAgICAgICBkZWJ1ZyhGMTEwLCJsZV9wdXRjaGFyIiwiYnVmZmVyIGlzIGZ1bGwiLDApOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgbGVf YnVmW2xlX2VuZCsrXSA9IGNoOworICAgIGlmIChsZV9lbmQgPT0gTEVCVUZTSVopCisgICAgICBs ZV9lbmQgPSAwOworICAgIGxlX2RhdGEgPSAxOworICAgIHJldHVybigwKTsKK30KKworaW50Cisj aWZkZWYgQ0tfQU5TSUMKK2xlX3B1dHMoQ0hBUiAqIHMsIGludCBuKQorI2Vsc2UKK2xlX3B1dHMo cyxuKSBDSEFSICogczsgaW50IG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGxlX3B1dHMg Ki8geworICAgIGludCByYyA9IDA7CisgICAgaW50IGkgPSAwOworICAgIENIQVIgKiBwID0gKENI QVIgKikibGVfcHV0cyI7CisgICAgY2toZXhkdW1wKHAscyxuKTsKKyAgICBmb3IgKGkgPSAwOyBp IDwgbjsgaSsrKQorICAgICAgcmMgPSBsZV9wdXRjaGFyKChjaGFyKXNbaV0pOworICAgIGRlYnVn KEYxMDEsImxlX3B1dHMiLCIiLHJjKTsKKyAgICByZXR1cm4ocmMpOworfQorCitpbnQKKyNpZmRl ZiBDS19BTlNJQworbGVfcHV0c3RyKENIQVIgKiBzKQorI2Vsc2UKK2xlX3B1dHN0cihzKSBDSEFS ICogczsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogbGVfcHV0cyAqLyB7CisgICAgQ0hBUiAq IHA7CisgICAgaW50IHJjID0gMDsKKyAgICBwID0gKENIQVIgKikibGVfcHV0c3RyIjsKKyAgICBj a2hleGR1bXAocCxzLChpbnQpc3RybGVuKChjaGFyICopcykpOworICAgIGZvciAocCA9IHM7ICpw ICYmICFyYzsgcCsrKQorICAgICAgcmMgPSBsZV9wdXRjaGFyKCpwKTsKKyAgICByZXR1cm4ocmMp OworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworbGVfZ2V0Y2hhcihDSEFSICogcGNoKQorI2Vs c2UgLyogQ0tfQU5TSUMgKi8KK2xlX2dldGNoYXIocGNoKSBDSEFSICogcGNoOworI2VuZGlmIC8q IENLX0FOU0lDICovCisvKiBsZV9nYXRjaGFyICovIHsKKyAgICBpbnQgcmMgPSAwOworICAgIGlm IChsZV9zdGFydCAhPSBsZV9lbmQpIHsKKyAgICAgICAgKnBjaCA9IGxlX2J1ZltsZV9zdGFydF07 CisgICAgICAgIGxlX2J1ZltsZV9zdGFydF0gPSAwOworICAgICAgICBsZV9zdGFydCsrOworCisg ICAgICAgIGlmIChsZV9zdGFydCA9PSBMRUJVRlNJWikKKyAgICAgICAgICBsZV9zdGFydCA9IDA7 CisKKyAgICAgICAgaWYgKGxlX3N0YXJ0ID09IGxlX2VuZCkgeworICAgICAgICAgICAgbGVfZGF0 YSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmMrKzsKKyAgICB9IGVsc2UgeworICAgICAgICAq cGNoID0gMDsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAvKiBUVExFQlVGICov CisKKyNpZmRlZiBDT01NRU5UCisvKgorICBTb21lIHN5c3RlbXMgbGlrZSBPU0YvMSB1c2UgVElP Q0dTSVpFIGluc3RlYWQgb2YgVElPQ0dXSU5TWi4KKyAgQnV0IGFzIGZhciBhcyBJIGtub3csIHdo ZW5ldmVyIFRJT0NHU0laRSBpcyBkZWZpbmVkLCBpdCBpcworICBlcXVhdGVkIHRvIFRJT0NHV0lO U1ouICBGb3IgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgZG9uZSwgdHJ5IHRoaXM6CisqLworI2lm bmRlZiBUSU9DR1dJTlNaCisjaWZkZWYgVElPQ0dTSVpFCisjZGVmaW5lIFRJT0NHV0lOU1ogVElP Q0dTSVpFCisjZW5kaWYgLyogVElPQ0dTSVpFICovCisjZW5kaWYgLyogVElPQ0dXSU5TWiAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworc3RhdGljIGludCB0dF94cGl4ZWwgPSAwLCB0dF95cGl4 ZWwgPSAwOworCitpbnQKK3R0Z3dzaXooKSB7CisgICAgaW50IHggPSAwOworI2lmbmRlZiBOT05B V1MKKyNpZmRlZiBRTlgKKy8qCisgIE5PVEU6IFRJT0NHV1NJWiB3b3JrcyBoZXJlIHRvbywgYnV0 IG9ubHkgaW4gdGhlIDMyLWJpdCB2ZXJzaW9uLgorICBUaGlzIGNvZGUgd29ya3MgZm9yIGJvdGgg dGhlIDE2LSBhbmQgMzItYml0IHZlcnNpb25zLgorKi8KKyAgICBleHRlcm4gaW50IGRldl9zaXpl KGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKik7CisgICAgaW50IHIsIGM7CisKKyAgICBpZiAo ZGV2X3NpemUoMCwgLTEsIC0xLCAmciwgJmMpID09IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dGd3c2l6 IFFOWCByIiwiIixyKTsKKwlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IFFOWCBjIiwiIixjKTsKKwl0dF9y b3dzID0gcjsKKwl0dF9jb2xzID0gYzsKKwlyZXR1cm4gKChyID4gMCAmJiBjID4gMCkgPyAxIDog MCk7CisgICAgfSBlbHNlIHJldHVybih4dHRnd3NpeigpKTsKKyNlbHNlIC8qIFFOWCAqLworI2lm ZGVmIFRJT0NHV0lOU1oKKworLyogTm90ZSwgdGhpcyB3YXMgTV9VTklYLCBjaGFuZ2VkIHRvIFhF TklYIHRvIGFsbG93IGNyb3NzIGNvbXBpbGF0aW9uLi4uICovCisjaWZkZWYgWEVOSVgJCQkJLyog U0NPIFVOSVggMy4ydjQuMCAqLworI2luY2x1ZGUgPHN5cy9zdHJlYW0uaD4JCQkvKiB0eXBlZGVm IG1ibGtfdCBuZWVkZWQgYnkgcHRlbS5oICovCisjaW5jbHVkZSA8c3lzL3B0ZW0uaD4JCQkvKiBm b3IgdHRnd3NpeigpICovCisjZW5kaWYgLyogWEVOSVggKi8KKworI2lmZGVmIEkzODZJWAkJCQkv KiBEaXR0byBmb3IgSW50ZXJhY3RpdmUgKi8KKyNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+CisjaW5j bHVkZSA8c3lzL3B0ZW0uaD4KKyNlbmRpZiAvKiBJMzg2SVggKi8KKworLyogTm90ZSwgdGhlIGFi b3ZlIG1pZ2h0IGJlIG5lZWRlZCBmb3Igc29tZSBvdGhlciBvbGRlciBTVlIzIEludGVsIG1ha2Vz Li4uICovCisKKyAgICBzdHJ1Y3Qgd2luc2l6ZSB3OworICAgIHR0X3hwaXhlbCA9IDA7CisgICAg dHRfeXBpeGVsID0gMDsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBy ZXR1cm4oeHR0Z3dzaXooKSk7CisjZW5kaWYgLyogSUtTRCAqLworICAgIHggPSBpb2N0bCgwLCAo aW50KVRJT0NHV0lOU1osIChjaGFyICopJncpOworICAgIGRlYnVnKEYxMDEsInR0Z3dzaXogVElP Q0dXSU5TWiIsIiIseCk7CisgICAgaWYgKHggPCAwKSB7CisJcmV0dXJuKHh0dGd3c2l6KCkpOwor ICAgIH0gZWxzZSBpZiAody53c19yb3cgPiAwICYmIHcud3NfY29sID4gMCkgeworCXR0X3Jvd3Mg PSB3LndzX3JvdzsKKwl0dF9jb2xzID0gdy53c19jb2w7CisJdHRfeHBpeGVsID0gdy53c194cGl4 ZWw7CisJdHRfeXBpeGVsID0gdy53c195cGl4ZWw7CisJZGVidWcoRjEwMSwidHRnd3NpeiB0dF9y b3dzIiwiIix0dF9yb3dzKTsKKwlkZWJ1ZyhGMTAxLCJ0dGd3c2l6IHR0X2NvbHMiLCIiLHR0X2Nv bHMpOworCXJldHVybigxKTsKKyAgICB9IGVsc2UgeworCWRlYnVnKEYxMDAsInR0Z3dzaXogVElP Q0dXSU5TWiAwMCIsIiIsMCk7CisJcmV0dXJuKHh0dGd3c2l6KCkpOworICAgIH0KKyNlbHNlCisg ICAgcmV0dXJuKHh0dGd3c2l6KCkpOworI2VuZGlmIC8qIFRJT0NHV0lOU1ogKi8KKyNlbmRpZiAv KiBRTlggKi8KKyNlbmRpZiAvKiBOT05BV1MgKi8KK30KKworCisjaWZkZWYgUkxPR0NPREUKK19Q Uk9UT1RZUCggaW50IHJsb2dfbmF3cywgKHZvaWQpICk7CisjZW5kaWYJLyogUkxPR0NPREUgKi8K KworI2lmbmRlZiBOT1NJR1dJTkNICisjaWZkZWYgU0lHV0lOQ0gKK1NJR1RZUAord2luY2hoKGZv bykgaW50IGZvbzsgewkJCS8qIFNJR1dJTkNIIGhhbmRsZXIgKi8KKyAgICBpbnQgeCA9IDA7Cisj aWZkZWYgQ0tfVFRZRkQKKyNpZm5kZWYgVk1TCisgICAgZXh0ZXJuIGludCB0dHlmZDsKKyNlbmRp ZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDS19UVFlGRCAqLworICAgIGV4dGVybiBpbnQgdHRfcm93 cywgdHRfY29scywgY21kX3Jvd3MsIGNtZF9jb2xzOworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZykgeworCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKiIsIiIsMCk7CisJZGVidWcoRjEw MCwiU0lHV0lOQ0ggY2F1Z2h0IiwiIiwwKTsKKwlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioi LCIiLDApOworI2lmZGVmIE5FVFBUWQorCWRlYnVnKEYxMDEsIlNJR1dJTkNIIHB0eV9mb3JrX3Bp ZCIsIiIscHR5X2ZvcmtfcGlkKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICB9CisjZW5kaWYg LyogREVVQiAqLworICAgIHNpZ25hbChTSUdXSU5DSCx3aW5jaGgpOyAgICAgICAgICAgIC8qIFJl LWFybSB0aGUgc2lnbmFsICovCisgICAgeCA9IHR0Z3dzaXooKTsgICAgICAgICAgICAgICAgICAg ICAgLyogR2V0IG5ldyB3aW5kb3cgc2l6ZSAqLworICAgIGNtZF9yb3dzID0gdHRfcm93czsJCQkv KiBBZGp1c3QgY29tbWFuZCBzY3JlZW4gdG9vICovCisgICAgY21kX2NvbHMgPSB0dF9jb2xzOwor CisjaWZkZWYgQ0tfVFRZRkQKKyAgICBpZgkJCQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGNvbm5l Y3Rpb24gKi8KKyNpZmRlZiBWTVMJCQkJLyogd2UncmUgZG9uZS4gKi8KKyAgICAgICh2bXN0dHlm ZCgpID09IC0xKQorI2Vsc2UKKyAgICAgICh0dHlmZCA9PSAtMSkKKyNlbmRpZiAvKiBWTVMgKi8K KyNlbHNlCisgICAgICAoIWxvY2FsKQorI2VuZGlmIC8qIENLX1RUWUZEICovCisgICAgICAgIHJl dHVybjsKKworI2lmZGVmIE5FVFBUWQorICAgIGlmIChwdHlfZm9ya19waWQgPiAtMSkgewkJLyog InNldCBob3N0IiB0byBhIFBUWT8gKi8KKwlpbnQgeDsKKworI2lmZGVmIFRJT0NTV0lOU1oKKwlz dHJ1Y3Qgd2luc2l6ZSB3OwkJLyogUmVzaXplIHRoZSBQVFkgKi8KKwllcnJubyA9IDA7CisJdy53 c19jb2wgPSB0dF9jb2xzOworCXcud3Nfcm93ID0gdHRfcm93czsKKwl3LndzX3hwaXhlbCA9IHR0 X3hwaXhlbDsKKwl3LndzX3lwaXhlbCA9IHR0X3lwaXhlbDsKKwl4ID0gaW9jdGwodHR5ZmQsVElP Q1NXSU5TWiwmdyk7CisJZGVidWcoRjEwMSwid2luY2hoIFRJT0NTV0lOU1oiLCIiLHgpOworCWRl YnVnKEYxMDEsIndpbmNoaCBUSU9DU1dJTlNaIGVycm5vIiwiIixlcnJubyk7CisjZW5kaWYgLyog VElPQ1NXSU5TWiAqLworCisJZXJybm8gPSAwOworCXggPSBraWxsKHB0eV9mb3JrX3BpZCxTSUdX SU5DSCk7CisJZGVidWcoRjEwMSwid2luY2hoIGtpbGwiLCIiLHgpOworCWRlYnVnKEYxMDEsIndp bmNoaCBraWxsIGVycm5vIiwiIixlcnJubyk7CisgICAgfQorI2VuZGlmIC8qIE5FVFBUWSAqLwor CisvKgorICBUaGlzIHNob3VsZCBiZSBPSy4gIEl0IG1pZ2h0IHNlZW0gdGhhdCBzZW5kaW5nIHRo aXMgZnJvbQorICBpbnRlcnJ1cHQgbGV2ZWwgY291bGQgaW50ZXJmZXJlIHdpdGggYW5vdGhlciBU RUxORVQgSUFDIHN0cmluZworICB0aGF0IHdhcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzZW50 LiAgQnV0IHdlIGFsd2F5cyBzZW5kCisgIFRFTE5FVCBzdHJpbmdzIHdpdGggYSBzaW5nbGUgd3Jp dGUoKSwgd2hpY2ggc2hvdWxkIHByZXZlbnQgbWl4dXBzLgorICBibGFoX3NuYXdzKCkgc2hvdWxk IHByb3RlY3QgdGhlbXNlbHZlcyBmcm9tIGJlaW5nIGNhbGxlZCBvbiB0aGUKKyAgd3Jvbmcga2lu ZCBvZiBjb25uZWN0aW9uLgorKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9UVEdXU0la CisgICAgaWYgKHggPiAwICYmIHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMgPiAwKSB7CisgICAgICAg IHRuX3NuYXdzKCk7CisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgcmxvZ19uYXdzKCk7CisjZW5k aWYgLyogUkxPR0NPREUgKi8KKyAgICB9CisjZW5kaWYgLyogTk9UVEdXU0laICovCisjZW5kaWYg LyogVENQU09DS0VUICovCisgICAgU0lHUkVUVVJOOworfQorI2VuZGlmIC8qIFNJR1dJTkNIICov CisjZW5kaWYgLyogTk9TSUdXSU5DSCAqLworCitTSUdUWVAKK3NpZ2h1cChmb28pIGludCBmb287 IHsJCQkvKiBTSUdIVVAgaGFuZGxlciAqLworICAgIGJhY2tncmQgPSAxOworICAgIGRlYnVnKEYx MDAsIioqKioqKioqKioqKioqKiIsIiIsMCk7CisgICAgZGVidWcoRjEwMCwiU0lHSFVQIHJlY2Vp dmVkIiwiIiwwKTsKKyAgICBkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioiLCIiLDApOworICAg IGRvZXhpdChCQURfRVhJVCwtMSk7CisgICAgLypOT1RSRUFDSEVEKi8KKyAgICBTSUdSRVRVUk47 CQkJCS8qIFNodXQgcGlja3kgY29tcGlsZXJzIHVwLi4uICovCit9CisKKyNpZmRlZiBDS19TQ08z MlY0CisvKiBFeGlzdHMgYnV0IHRoZXJlIGlzIG5vIHByb3RvdHlwZSBpbiB0aGUgaGVhZGVyIGZp bGVzICovCitfUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOworI2Vsc2UKKyNpZmRl ZiBTVjY4UjNWNgorX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsKKyNlbHNlCisj aWZkZWYgdWx0cml4CitfUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOworI2Vsc2UK KyNpZmRlZiBIUFVYNgorX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsKKyNlbHNl CisjaWZkZWYgSFBVWDUKK19QUk9UT1RZUCggY2hhciAqIHR0eW5hbWUsIChpbnQpICk7CisjZWxz ZQorI2lmZGVmIFBTMkFJWDEwCitfUFJPVE9UWVAoIGNoYXIgKiB0dHluYW1lLCAoaW50KSApOwor I2Vsc2UKKyNpZmRlZiBCU0Q0MgorX1BST1RPVFlQKCBjaGFyICogdHR5bmFtZSwgKGludCkgKTsK KyNlbmRpZiAvKiBCU0Q0MiAqLworI2VuZGlmIC8qIFBTMkFJWDEwICovCisjZW5kaWYgLyogSFBV WDUgKi8KKyNlbmRpZiAvKiBIUFVYNiAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworI2VuZGlmIC8q IFNWNjhSM1Y2ICovCisjZW5kaWYgLyogQ0tfU0NPMzJWNCAqLworCisjaWZuZGVmIFNJR1VTUjEJ CQkJLyogVXNlci1kZWZpbmVkIHNpZ25hbHMgKi8KKyNkZWZpbmUgU0lHVVNSMSAzMAorI2VuZGlm IC8qIFNJR1VTUjEgKi8KKworI2lmbmRlZiBTSUdVU1IyCisjZGVmaW5lIFNJR1VTUjIgMzEKKyNl bmRpZiAvKiBTSUdVU1IyICovCisKKy8qCisgIGlnbm9yc2lncygpIHNldHMgY2VydGFpbiBzaWdu YWxzIHRvIFNJR19JR04uICBCdXQgd2hlbiBhIHNpZ25hbCBpcworICBpZ25vcmVkLCBpdCByZW1h aW5zIGlnbm9yZWQgYWNyb3NzIGV4ZWMoKSwgc28gd2UgaGF2ZSB0byByZXN0b3JlIHRoZXNlCisg IHNpZ25hbHMgYmVmb3JlIGV4ZWMoKSwgd2hpY2ggaXMgdGhlIHB1cnBvc2Ugb2YgcmVzdG9yc2ln cygpLgorKi8KK3N0YXRpYyBWT0lECitpZ25vcnNpZ3MoKSB7CQkJCS8qIElnbm9yZSB0aGVzZSBz aWduYWxzICovCisgICAgc2F2cXVpdCA9IHNpZ25hbChTSUdRVUlULFNJR19JR04pOwkvKiBJZ25v cmUgUXVpdCBzaWduYWwgKi8KKworI2lmZGVmIFNJR0RBTkdFUgkJCS8qIElnbm9yZSBkYW5nZXIg c2lnbmFscyAqLworLyoKKyAgVGhpcyBzaWduYWwgaXMgc2VudCB3aGVuIHRoZSBzeXN0ZW0gaXMg bG93IG9uIHN3YXAgc3BhY2UuICBQcm9jZXNzZXMKKyAgdGhhdCBkb24ndCBoYW5kbGUgaXQgYXJl IGNhbmRpZGF0ZXMgZm9yIHRlcm1pbmF0aW9uLiAgSWYgc3dhcCBzcGFjZSBkb2Vzbid0CisgIGNs ZWFyIG91dCBlbm91Z2gsIHdlIHN0aWxsIG1pZ2h0IGJlIHRlcm1pbmF0ZWQgdmlhIGtpbGwoKSAt LSBub3RoaW5nIHdlIGNhbgorICBkbyBhYm91dCB0aGF0ISAgQ29uY2VpdmFibHksIHRoaXMgY291 bGQgYmUgaW1wcm92ZWQgYnkgaW5zdGFsbGluZyBhIHJlYWwKKyAgc2lnbmFsIGhhbmRsZXIgdGhh dCB3YXJucyB0aGUgdXNlciwgYnV0IHRoYXQgd291bGQgYmUgcHJldHR5IGNvbXBsaWNhdGVkLAor ICBzaW5jZSB3ZSBhcmUgbm90IGFsd2F5cyBpbiBjb250cm9sIG9mIHRoZSBzY3JlZW4gLS0gZS5n LiBkdXJpbmcgcmVtb3RlLW1vZGUKKyAgZmlsZSB0cmFuc2Zlci4KKyovCisgICAgc2F2ZGFuZ2Vy ID0gc2lnbmFsKFNJR0RBTkdFUixTSUdfSUdOKTsgLyogZS5nLiBpbiBBSVggKi8KKyNlbmRpZiAv KiBTSUdEQU5HRVIgKi8KKyNpZmRlZiBTSUdQSVBFCisvKgorICBUaGlzIG9uZSBjb21lcyB3aGVu IGEgVENQL0lQIGNvbm5lY3Rpb24gaXMgYnJva2VuIGJ5IHRoZSByZW1vdGUuCisgIFdlIHByZWZl ciB0byBjYXRjaCB0aGlzIHNpdHVhdGlvbiBieSBleGFtaW5pbmcgZXJyb3IgY29kZXMgZnJvbSB3 cml0ZSgpLgorKi8KKyAgICBzYXZwaXBlID0gc2lnbmFsKFNJR1BJUEUsU0lHX0lHTik7CisjZW5k aWYgLyogU0lHUElQRSAqLworICAgIHNhdnVzcjEgPSBzaWduYWwoU0lHVVNSMSxTSUdfSUdOKTsJ LyogSWdub3JlIHVzZXItZGVmaW5lZCBzaWduYWxzICovCisgICAgc2F2dXNyMiA9IHNpZ25hbChT SUdVU1IyLFNJR19JR04pOworfQorCitWT0lECityZXN0b3JzaWdzKCkgewkJCQkvKiBSZXN0b3Jl IHRoZXNlIHNpZ25hbHMgKi8KKyAgICAoVk9JRCkgc2lnbmFsKFNJR1FVSVQsc2F2cXVpdCk7CS8q ICh1c2VkIGluIGNrdWZpby5jKSAqLworI2lmZGVmIFNJR0RBTkdFUgorICAgIChWT0lEKSBzaWdu YWwoU0lHREFOR0VSLHNhdmRhbmdlcik7CisjZW5kaWYgLyogU0lHREFOR0VSICovCisjaWZkZWYg U0lHUElQRQorICAgIChWT0lEKSBzaWduYWwoU0lHUElQRSxzYXZwaXBlKTsKKyNlbmRpZiAvKiBT SUdQSVBFICovCisgICAgKFZPSUQpIHNpZ25hbChTSUdVU1IxLHNhdnVzcjEpOworICAgIChWT0lE KSBzaWduYWwoU0lHVVNSMixzYXZ1c3IyKTsKK30KKworaW50CitzeXNpbml0KCkgeworICAgIGlu dCB4OworICAgIGNoYXIgKiBzOworI2lmZGVmIENLX1VUU05BTUUKKyAgICBzdHJ1Y3QgdXRzbmFt ZSBuYW1lOworI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KKworICAgIGV4dGVybiBjaGFyIHN0YXJ0 dXBkaXJbXTsKKy8qCisgIEJFRk9SRSBBTllUSElORyBFTFNFOiBJbml0aWFsaXplIHRoZSBzZXR1 aWQgcGFja2FnZS4KKyAgQ2hhbmdlIHRvIHRoZSB1c2VyJ3MgcmVhbCB1c2VyIGFuZCBncm91cCBJ RC4KKyAgSWYgdGhpcyBjYW4ndCBiZSBkb25lLCBkb24ndCBydW4gYXQgYWxsLgorKi8KKyAgICB4 ID0gcHJpdl9pbmkoKTsKKyNpZmRlZiBTVUlEREVCVUcKKyAgICBmcHJpbnRmKHN0ZGVyciwiUFJJ Vl9JTkk9JWRcbiIseCk7CisjZW5kaWYgLyogU1VJRERFQlVHICovCisgICAgaWYgKHgpIHsKKwlp ZiAoeCAmIDEpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogc2V0dWlkIGZhaWx1cmUuXG4iKTsKKwlp ZiAoeCAmIDIpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogc2V0Z2lkIGZhaWx1cmUuXG4iKTsKKwlp ZiAoeCAmIDQpIGZwcmludGYoc3RkZXJyLCJGYXRhbDogQy1LZXJtaXQgc2V0dWlkIHRvIHJvb3Qh XG4iKTsKKwlleGl0KDEpOworICAgIH0KKyAgICBzaWduYWwoU0lHSU5ULFNJR19JR04pOwkJLyog SWdub3JlIGludGVycnVwdHMgYXQgZmlyc3QgKi8KKyAgICBzaWduYWwoU0lHRlBFLFNJR19JR04p OwkJLyogSWdub3JlIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbnMgKi8KKyAgICBzaWduYWwoU0lH SFVQLHNpZ2h1cCk7CQkvKiBDYXRjaCBTSUdIVVAgKi8KKyNpZm5kZWYgTk9TSUdXSU5DSAorI2lm ZGVmIFNJR1dJTkNICisgICAgc2lnbmFsKFNJR1dJTkNILHdpbmNoaCk7CQkvKiBDYXRjaCB3aW5k b3ctc2l6ZSBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBTSUdXSU5DSCAqLworI2VuZGlmIC8qIE5PU0lH V0lOQ0ggKi8KKworI2lmZGVmIFNJR1hGU1oKKyAgICBzaWduYWwoU0lHWEZTWixTSUdfSUdOKTsJ CS8qIElnbm9yZSB3cml0aW5nIHBhc3QgZmlsZSBsaW1pdCAqLyAKKyNlbmRpZgkvKiBTSUdYRlNa ICovCisKKyNpZm5kZWYgTk9KQworLyoKKyAgR2V0IHRoZSBpbml0aWFsIGpvYiBjb250cm9sIHN0 YXRlLgorICBJZiBpdCBpcyBTSUdfSUdOLCB0aGF0IG1lYW5zIHRoZSBzaGVsbCBkb2VzIG5vdCBz dXBwb3J0IGpvYiBjb250cm9sLAorICBhbmQgc28gd2UnZCBiZXR0ZXIgbm90IHN1c3BlbmQgb3Vy c2VsdmVzLgorKi8KKyNpZmRlZiBTSUdUU1RQCisgICAgamNoZGxyID0gc2lnbmFsKFNJR1RTVFAs U0lHX0lHTik7CisgICAgaWYgKGpjaGRsciA9PSBTSUdfSUdOKSB7CisJamNzaGVsbCA9IDA7CisJ ZGVidWcoRjEwMCwic3lzaW5pdCBqY2hkbHI6IFNJR19JR04iLCIiLDApOworICAgIH0gZWxzZSBp ZiAoamNoZGxyID09IFNJR19ERkwpIHsKKwlkZWJ1ZyhGMTAwLCJzeXNpbml0IGpjaGRscjogU0lH X0RGTCIsIiIsMCk7CisJamNzaGVsbCA9IDE7CisgICAgfSBlbHNlIHsKKwlkZWJ1ZyhGMTAwLCJz eXNpbml0IGpjaGRscjogb3RoZXIiLCIiLDApOworCWpjc2hlbGwgPSAzOworICAgIH0KKyAgICAo Vk9JRCkgc2lnbmFsKFNJR1RTVFAsamNoZGxyKTsJLyogUHV0IGl0IGJhY2suLi4gKi8KKyNlbmRp ZiAvKiBTSUdUU1RQICovCisjZW5kaWYgLyogTk9KQyAqLworCisgICAgY29uYmd0KDApOwkJCQkv KiBTZWUgaWYgd2UncmUgaW4gdGhlIGJhY2tncm91bmQgKi8KKyAgICBjb25nbSgpOwkJCQkvKiBH ZXQgY29uc29sZSBtb2RlcyAqLworCisgICAgKFZPSUQpIHNpZ25hbChTSUdBTFJNLFNJR19JR04p OwkvKiBJZ25vcmUgYWxhcm1zICovCisKKyAgICBpZ25vcnNpZ3MoKTsJCQkvKiBJZ25vcmUgc29t ZSBvdGhlciBzaWduYWxzICovCisKKyNpZmRlZiBGX1NFVEZMCisgICAgaW5pZmxhZ3MgPSBmY250 bCgwLEZfR0VURkwsMCk7CS8qIEdldCBzdGRpbiBmbGFncyAqLworI2VuZGlmIC8qIEZfU0VURkwg Ki8KKworI2lmZGVmIHVsdHJpeAorICAgIGd0dHkoMCwmdmFuaWxsYSk7CQkJLyogR2V0IHNndHR5 IGluZm8gKi8KKyNlbHNlCisjaWZkZWYgQVVYCisgICAgc2V0NDJzaWcoKTsJCQkJLyogRG9uJ3Qg YXNrISAoaGFrYW5zb25AY3Mub3JzdC5lZHUpICovCisjZW5kaWYgLyogQVVYICovCisjZW5kaWYg LyogdWx0cml4ICovCisvKgorICBXYXJuaW5nOiBvbiBzb21lIFVOSVggc3lzdGVtcyAoU1ZSND8p LCB0dHluYW1lKCkgcmVwb3J0ZWRseSBvcGVucyAvZGV2IGJ1dAorICBuZXZlciBjbG9zZXMgaXQu ICBJZiBpdCBpcyBjYWxsZWQgb2Z0ZW4gZW5vdWdoLCB3ZSBydW4gb3V0IG9mIGZpbGUKKyAgZGVz Y3JpcHRvcnMgYW5kIHN1YnNlcXVlbnQgb3BlbigpJ3Mgb2Ygb3RoZXIgZGV2aWNlcyBvciBmaWxl cyBjYW4gZmFpbC4KKyovCisgICAgcyA9IE5VTEw7CisjaWZuZGVmIE1JTklYCisgICAgaWYgKGlz YXR0eSgwKSkJCQkvKiBOYW1lIG9mIGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCisgICAgICBzID0g dHR5bmFtZSgwKTsKKyAgICBlbHNlIGlmIChpc2F0dHkoMSkpCisgICAgICBzID0gdHR5bmFtZSgx KTsKKyAgICBlbHNlIGlmIChpc2F0dHkoMikpCisgICAgICBzID0gdHR5bmFtZSgyKTsKKyAgICBk ZWJ1ZyhGMTEwLCJzeXNpbml0IHR0eW5hbWUoMCkiLHMsMCk7CisjZW5kaWYgLyogTUlOSVggKi8K KworI2lmZGVmIEJFT1MKKyAgICBpZiAoIWRmdHR5KQorICAgICAgbWFrZXN0cigmZGZ0dHkscyk7 CisjZW5kaWYgLyogQkVPUyAqLworCisgICAgaWYgKHMpCisgICAgICBja3N0cm5jcHkoKGNoYXIg KiljdHRuYW0scyxERVZOQU1MRU4rMSk7CisjaWZkZWYgU1ZPUlBPU0lYCisgICAgaWYgKCFjdHRu YW1bMF0pCisgICAgICBjdGVybWlkKGN0dG5hbSk7CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisg ICAgaWYgKCFjdHRuYW1bMF0pCisgICAgICBja3N0cm5jcHkoKGNoYXIgKiljdHRuYW0sZGZ0dHks REVWTkFNTEVOKzEpOworICAgIGRlYnVnKEYxMTAsInN5c2luaXQgQ1RUTkFNIixDVFROQU0sMCk7 CisgICAgZGVidWcoRjExMCwic3lzaW5pdCBjdHRuYW0iLGN0dG5hbSwwKTsKKworICAgIHR0Z3dz aXooKTsJCQkJLyogR2V0IHdpbmRvdyAoc2NyZWVuKSBkaW1lbnNpb25zLiAqLworCisjaWZuZGVm IE5PU1lTQ09ORgorI2lmZGVmIF9TQ19PUEVOX01BWAorICAgIGNrbWF4ZmlsZXMgPSBzeXNjb25m KF9TQ19PUEVOX01BWCk7CisjZW5kaWYgLyogX1NDX09QRU5fTUFYICovCisjZW5kaWYgLyogTk9T WVNDT05GICovCisKKyNpZmRlZiBQbGFuOQorICAgIGlmICghYmFja2dyZCkgeworICAgIAljb25z Y3RsZmQgPSBvcGVuKCIvZGV2L2NvbnNjdGwiLCBPX1dST05MWSk7CisgICAgCS8qbm9pc2VmZCA9 IG9wZW4oIi9kZXYvbm9pc2UiLCBPX1dST05MWSkqLworICAgIH0KKyAgICBja3hlY2ggPSAxOwor I2VuZGlmIC8qIFBsYW45ICovCisKKyNpZmRlZiBDS19VVFNOQU1FCisgICAgaWYgKHVuYW1lKCZu YW1lKSA+IC0xKSB7CisJY2tzdHJuY3B5KHVubV9tY2gsbmFtZS5tYWNoaW5lLENLX1NZU05NTE4p OworCWNrc3RybmNweSh1bm1fbmFtLG5hbWUuc3lzbmFtZSxDS19TWVNOTUxOKTsKKwlja3N0cm5j cHkodW5tX3JlbCxuYW1lLnJlbGVhc2UsQ0tfU1lTTk1MTik7CisJY2tzdHJuY3B5KHVubV92ZXIs bmFtZS52ZXJzaW9uLENLX1NZU05NTE4pOworI2lmZGVmIERFQlVHCisJaWYgKGRlYmxvZykgewor CSAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVuYW1lIG1hY2hpbmUiLHVubV9tY2gsMCk7CisJICAg IGRlYnVnKEYxMTAsInN5c2luaXQgdW5hbWUgc3lzbmFtZSIsdW5tX25hbSwwKTsKKwkgICAgZGVi dWcoRjExMCwic3lzaW5pdCB1bmFtZSByZWxlYXNlIix1bm1fcmVsLDApOworCSAgICBkZWJ1ZyhG MTEwLCJzeXNpbml0IHVuYW1lIHZlcnNpb24iLHVubV92ZXIsMCk7CisJfQorI2VuZGlmIC8qIERF QlVHICovCisKKyNpZmRlZiBIUFVYOVBMVVMKKwlpZiAobmFtZS5tYWNoaW5lWzVdID09ICc4JykK KwkgIGhwaXM4MDAgPSAxOworCWVsc2UKKwkgIGhwaXM4MDAgPSAwOworCWRlYnVnKEYxMDEsInN5 c2luaXQgaHBpczgwMCIsIiIsaHBpczgwMCk7CisjZW5kaWYgLyogSFBVWDlQTFVTICovCisjaWZk ZWYgVFJVNjQKKyAgICAgICAgZ2V0c3lzaW5mbyhHU0lfUExBVEZPUk1fTkFNRSwgdW5tX21vZCwg Q0tfU1lTTk1MTiwgMCwgMCk7CisgICAgICAgIGRlYnVnKEYxMTAsInN5c2luaXQgZ2V0c3lzaW5m byBtb2RlbCIsdW5tX21vZCwwKTsKKyNlbmRpZiAvKiBUUlU2NCAqLworI2lmZGVmIFNPTEFSSVMy NQorICAgICAgICBzeXNpbmZvKFNJX1BMQVRGT1JNLCB1bm1fbW9kLCBDS19TWVNOTUxOKTsKKyAg ICAgICAgZGVidWcoRjExMCwic3lzaW5pdCBzeXNpbmZvIG1vZGVsIix1bm1fbW9kLDApOworI2Vu ZGlmIC8qIFNPTEFSSVMyNSAqLworICAgIH0KKyNlbmRpZiAvKiBDS19VVFNOQU1FICovCisKKyNp ZmRlZiBDS19FTlZJUk9OTUVOVAorICAgIHsKKyNpZmRlZiBUTkNPREUKKwlleHRlcm4gY2hhciB0 bl9lbnZfYWNjdFtdLCB0bl9lbnZfZGlzcFtdLCB0bl9lbnZfam9iW10sCisJdG5fZW52X3BybnRb XSwgdG5fZW52X3N5c1tdOworI2VuZGlmIC8qIFROQ09ERSAqLworCWV4dGVybiBjaGFyIHVpZGJ1 ZltdOworICAgICAgICBleHRlcm4gY2hhciAqIHdob2FtaSgpOworCWNoYXIgKnA7CisjaWZkZWYg Q0tTRU5EVUlECisgICAgICAgIHVpZGJ1ZlswXSA9ICdcMCc7CisjaWZkZWYgSUtTRAorICAgICAg ICBpZiAoIWluc2VydmVyKSB7CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgICAgcCA9IGdl dGVudigiVVNFUiIpOworICAgICAgICAgICAgZGVidWcoRjExMCwic3lzaW5pdCB1aWRidWYgZnJv bSBVU0VSIix1aWRidWYsMCk7CisJICAgIGlmICghcCkgcCA9ICIiOworICAgICAgICAgICAgaWYg KCEqcCkgeworICAgICAgICAgICAgICAgIHAgPSBnZXRlbnYoIkxPR05BTUUiKTsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJzeXNpbml0IHVpZGJ1ZiBmcm9tIExPR05BTUUiLHVpZGJ1Ziww KTsKKyAgICAgICAgICAgIH0KKwkgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgICAgICBpZiAo ISpwKSB7CisgICAgICAgICAgICAgICAgcCA9IHdob2FtaSgpOworICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsInN5c2luaXQgdWlkYnVmIGZyb20gd2hvYW1pKCkiLHVpZGJ1ZiwwKTsKKyAgICAg ICAgICAgIH0KKwkgICAgaWYgKCFwKSBwID0gIiI7CisJICAgIGNrc3RybmNweSh1aWRidWYsICpw ID8gcCA6ICJVTktOT1dOIiwgVUlEQlVGTEVOKTsKKyNpZmRlZiBJS1NECisgICAgICAgIH0KKyNl bmRpZiAvKiBJS1NEICovCisJZGVidWcoRjExMCwic3lzaW5pdCBmaW5hbCB1aWRidWYiLHVpZGJ1 ZiwwKTsKKyNlbmRpZiAvKiBDS1NFTkRVSUQgKi8KKworI2lmZGVmIFROQ09ERQorCWlmICgocCA9 IGdldGVudigiSk9CIikpKSBja3N0cm5jcHkodG5fZW52X2pvYixwLDYzKTsKKwlpZiAoKHAgPSBn ZXRlbnYoIkFDQ1QiKSkpIGNrc3RybmNweSh0bl9lbnZfYWNjdCxwLDYzKTsKKwlpZiAoKHAgPSBn ZXRlbnYoIlBSSU5URVIiKSkpIGNrc3RybmNweSh0bl9lbnZfcHJudCxwLDYzKTsKKwlpZiAoKHAg PSBnZXRlbnYoIkRJU1BMQVkiKSkpIGNrc3RybmNweSh0bl9lbnZfZGlzcCxwLDYzKTsKKyNpZmRl ZiBhZWdpcworCWNrc3RybmNweSh0bl9lbnZfc3lzLCJBZWdpcyIsNjQpOworI2Vsc2UKKyNpZmRl ZiBQbGFuOQorCWNrc3RybmNweSh0bl9lbnZfc3lzLCJQbGFuOSIsNjQpOworI2Vsc2UKKwlja3N0 cm5jcHkodG5fZW52X3N5cywiVU5JWCIsNjQpOworI2VuZGlmIC8qIFBsYW45ICovCisjZW5kaWYg LyogYWVnaXMgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICB9CisjZW5kaWYgLyogQ0tfRU5W SVJPTk1FTlQgKi8KKyNpZmRlZiBDS19TTkRMT0MKKyAgICB7CisJZXh0ZXJuIGNoYXIgKiB0bl9s b2M7CisJY2hhciAqcDsKKwlpZiAocCA9IGdldGVudigiTE9DQVRJT04iKSkKKwkgIGlmICh0bl9s b2MgPSAoY2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihwKSsxKSkKKwkgICAgc3RyY3B5KHRuX2xv YyxwKTsJCS8qIHNhZmUgKi8KKyAgICB9CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisKKyAgICBj a3N0cm5jcHkoc3RhcnR1cGRpciwgemd0ZGlyKCksIENLTUFYUEFUSCk7CisgICAgc3RhcnR1cGRp cltDS01BWFBBVEhdID0gJ1wwJzsKKyAgICB4ID0gc3RybGVuKHN0YXJ0dXBkaXIpOworICAgIGlm ICh4IDw9IDApIHsKKwlzdGFydHVwZGlyWzBdID0gJy8nOworCXN0YXJ0dXBkaXJbMV0gPSAnXDAn OworICAgIH0gZWxzZSBpZiAoc3RhcnR1cGRpclt4LTFdICE9ICcvJykgeworCXN0YXJ0dXBkaXJb eF0gPSAnLyc7CisJc3RhcnR1cGRpclt4KzFdID0gJ1wwJzsKKyAgICB9CisgICAgZGVidWcoRjEx MCwic3lzaW5pdCBzdGFydHVwZGlyIixzdGFydHVwZGlyLDApOworI2lmZGVmIFRUTEVCVUYKKyAg ICBsZV9pbml0KCk7CisjZW5kaWYgLyogVFRMRUJVRiAqLworI2lmZGVmIEJTRDQ0T1JQT1NJWAor ICAgIC8qIFRoaXMgc2hvdWxkIGNhdGNoIHRoZSBuY3Vyc2VzIHBsYXRmb3JtcyAqLworICAgIC8q IFNvbWUgcGxhdGZvcm1zIGRvbid0IGhhdmUgcHV0ZW52KCksIGxpa2UgTmVYVFNURVAgKi8KKyAg ICBwdXRlbnYoIk5DVVJTRVNfTk9fU0VUQlVGPTEiKTsKKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVgg Ki8KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBTIFkgUyBDIEwgRSBBIE4gVSBQICAtLSAgU3lz dGVtLWRlcGVuZGVudCBwcm9ncmFtIGNsZWFudXAuICAqLworCitpbnQKK3N5c2NsZWFudXAoKSB7 CisjaWZkZWYgRl9TRVRGTAorICAgIGlmIChpbmlmbGFncyA+IC0xKQorICAgICAgZmNudGwoMCxG X1NFVEZMLGluaWZsYWdzKTsJLyogUmVzdG9yZSBzdGRpbiBmbGFncyAqLworI2VuZGlmIC8qIEZf U0VURkwgKi8KKyNpZmRlZiB1bHRyaXgKKyAgICBzdHR5KDAsJnZhbmlsbGEpOyAgICAgICAgICAg ICAgICAgICAvKiBHZXQgc2d0dHkgaW5mbyAqLworI2VuZGlmIC8qIHVsdHJpeCAqLworI2lmZGVm IE5FVENNRAorICAgIGlmICh0dHBpZCkga2lsbCh0dHBpZCw5KTsKKyNlbmRpZiAvKiBORVRDTUQg Ki8KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBUIFQgTyBQIEUgTiAgLS0gIE9wZW4gYSB0dHkg Zm9yIGV4Y2x1c2l2ZSBhY2Nlc3MuICAqLworCisvKgorICBDYWxsIHdpdGg6CisgICAgdHRuYW1l OiBjaGFyYWN0ZXIgc3RyaW5nIC0gZGV2aWNlIG5hbWUgb3IgbmV0d29yayBob3N0IG5hbWUuCisg ICAgbGNsOgorICBJZiBjYWxsZWQgd2l0aCBsY2wgPCAwLCBzZXRzIHZhbHVlIG9mIGxjbCBhcyBm b2xsb3dzOgorICAwOiB0aGUgdGVybWluYWwgbmFtZWQgYnkgdHRuYW1lIGlzIHRoZSBqb2IncyBj b250cm9sbGluZyB0ZXJtaW5hbC4KKyAgMTogdGhlIHRlcm1pbmFsIG5hbWVkIGJ5IHR0bmFtZSBp cyBub3QgdGhlIGpvYidzIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgorICBCdXQgd2F0Y2ggb3V0OiBp ZiBhIGxpbmUgaXMgYWxyZWFkeSBvcGVuLCBvciBpZiByZXF1ZXN0ZWQgbGluZSBjYW4ndAorICBi ZSBvcGVuZWQsIHRoZW4gbGNsIHJlbWFpbnMgKGFuZCBpcyByZXR1cm5lZCBhcykgLTEuCisgICAg bW9kZW06CisgIExlc3MgdGhhbiB6ZXJvOiB0dG5hbWUgaXMgYSBuZXR3b3JrIGhvc3QgbmFtZS4K KyAgWmVybyBvciBncmVhdGVyOiB0dG5hbWUgaXMgYSB0ZXJtaW5hbCBkZXZpY2UgbmFtZS4KKyAg WmVybyBtZWFucyBhIGxvY2FsIGNvbm5lY3Rpb24gKGRvbid0IHVzZSBtb2RlbSBzaWduYWxzKS4K KyAgUG9zaXRpdmUgbWVhbnMgdXNlIG1vZGVtIHNpZ25hbHMuCisgICB0aW1vOgorICAwID0gbm8g dGltZXIuCisgIG5vbnplcm8gPSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGZvciBvcGVuKCkg dG8gcmV0dXJuIGJlZm9yZSB0aW1pbmcgb3V0LgorCisgIFJldHVybnM6CisgICAgMCBvbiBzdWNj ZXNzCisgICAtNSBpZiBkZXZpY2UgaXMgaW4gdXNlCisgICAtNCBpZiBhY2Nlc3MgdG8gZGV2aWNl IGlzIGRlbmllZAorICAgLTMgaWYgYWNjZXNzIHRvIGxvY2sgZGlyZWN0b3J5IGRlbmllZAorICAg LTIgdXBvbiB0aW1lb3V0IHdhaXRpbmcgZm9yIGRldmljZSB0byBvcGVuCisgICAtMSBvbiBvdGhl ciBlcnJvcgorKi8KK3N0YXRpYyBpbnQgdHRvdG1vID0gMDsJCQkvKiBUaW1lb3V0IGZsYWcgKi8K Ky8qIEZsYWcga2VwdCBoZXJlIHRvIGF2b2lkIGJlaW5nIGNsb2JiZXJlZCBieSBsb25nam1wLiAg Ki8KKworaW50Cit0dG9wZW4odHRuYW1lLGxjbCxtb2RlbSx0aW1vKSBjaGFyICp0dG5hbWU7IGlu dCAqbGNsLCBtb2RlbSwgdGltbzsgeworCisjaWZkZWYgQlNENDQKKyNkZWZpbmUgY3Rlcm1pZCh4 KSBzdHJjcHkoeCwiIikKKyNlbHNlCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZuZGVmIENJRQorICAg IGV4dGVybiBjaGFyICpjdGVybWlkKCk7CQkvKiBXaXNoIHRoZXkgYWxsIGhhZCB0aGlzISAqLwor I2Vsc2UJCQkJCS8qIENJRSBSZWd1bHVzICovCisjZGVmaW5lIGN0ZXJtaWQoeCkgc3RyY3B5KHgs IiIpCisjZW5kaWYgLyogQ0lFICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjZW5kaWYgLyog QlNENDQgKi8KKworI2lmZGVmIHVsdHJpeAorICAgIGludCB0ZW1wID0gMDsKKyNlbmRpZiAvKiB1 bHRyaXggKi8KKworI2lmbmRlZiBPUEVORklSU1QKKyAgICBjaGFyIGZ1bGxuYW1lW0RFVk5BTUxF TisxXTsKKyNlbmRpZiAvKiBPUEVORklSU1QgKi8KKworICAgIGNoYXIgKiBmbmFtOwkJCS8qIEZ1 bGwgbmFtZSBhZnRlciBleHBhbnNpb24gKi8KKworICAgIGludCB5OworCisjaWZuZGVmIHBkcDEx CisjZGVmaW5lIE5BTUVGRAkgLyogRmVhdHVyZSB0byBhbGxvdyBuYW1lIHRvIGJlIGFuIG9wZW4g ZmlsZSBkZXNjcmlwdG9yICovCisjZW5kaWYgLyogcGRwMTEgKi8KKworI2lmZGVmIE5BTUVGRAor ICAgIGNoYXIgKnA7CisgICAgZGVidWcoRjEwMSwidHRvcGVuIHRlbG5ldGZkIiwiIix0ZWxuZXRm ZCk7CisjZW5kaWYgLyogTkFNRUZEICovCisKKyAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gdHRuYW1l Iix0dG5hbWUsMCk7CisgICAgZGVidWcoRjExMCwidHRvcGVuIHR0bm1zdiIsdHRubXN2LDApOwor ICAgIGRlYnVnKEYxMDEsInR0b3BlbiBtb2RlbSIsIiIsbW9kZW0pOworICAgIGRlYnVnKEYxMDEs InR0b3BlbiBuZXRjb25uIiwiIixuZXRjb25uKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdHR5 ZmQiLCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gKmxjbCIsIiIsKmxjbCk7Cisg ICAgZGVidWcoRjEwMSwidHRvcGVuIHR0bWRtIiwiIix0dG1kbSk7CisgICAgZGVidWcoRjEwMSwi dHRvcGVuIHR0bmV0IiwiIix0dG5ldCk7CisKKyAgICB0dHBtc2sgPSAweGZmOworICAgIGxvY2tw aWRbMF0gPSAnXDAnOworCisgICAgaWYgKHR0eWZkID4gLTEpIHsJCQkvKiBJZiBkZXZpY2UgYWxy ZWFkeSBvcGVuZWQgKi8KKyAgICAgICAgaWYgKCFzdHJuY21wKHR0bmFtZSx0dG5tc3YsREVWTkFN TEVOKSkgLyogYXJlIG5ldyAmIG9sZCBuYW1lcyBlcXVhbD8gKi8KKwkgIHJldHVybigwKTsJCQkv KiBZZXMsIG5vdGhpbmcgdG8gZG8gLSBqdXN0IHJldHVybiAqLworCXR0bm1zdlswXSA9ICdcMCc7 CQkvKiBObywgY2xlYXIgb3V0IG9sZCBuYW1lICovCisJdHRjbG9zKHR0eWZkKTsJCQkvKiBjbG9z ZSBvbGQgY29ubmVjdGlvbi4gICovCisgICAgfQorICAgIHdhc2Nsb3NlZCA9IDA7CQkJLyogTmV3 IGNvbm5lY3Rpb24sIG5vdCBjbG9zZWQgeWV0LiAqLworICAgIHR0cGlwZSA9IDA7CQkJCS8qIEFz c3VtZSBpdCdzIG5vdCBhIHBpcGUgKi8KKyAgICB0dHB0eSA9IDA7CQkJCS8qIG9yIGEgcHR5Li4u ICovCisKKyNpZmRlZiBORVRDT05OCisvKgorICBUaGlzIGlzIGEgYml0IHRyaWNreS4uLiAgU3Vw cG9zZSB0aGF0IHByZXZpb3VzbHkgS2VybWl0IGhhZCBkaWFsZWQgYSB0ZWxuZXQKKyAgbW9kZW0g c2VydmVyICgic2V0IGhvc3QgeHh4OjIwMDEsIHNldCBtb2RlbSB0eXBlIHVzciwgZGlhbCAuLi4i KS4gIFRoZW4gdGhlCisgIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCAodHR5ZmQgPSAtMSksIGFuZCB0 aGVuIGEgUkVESUFMIGNvbW1hbmQgd2FzIGdpdmVuLiAgQXQKKyAgdGhpcyBwb2ludCB3ZSd2ZSBv YmxpdGVyYXRlZCB0aGUgbmVnYXRpdmUgbW9kZW0gdHlwZSBoYWNrLCBhbmQgc28gd291bGQKKyAg dHJlYXQgdGhlIElQIGhvc3RuYW1lIGFzIGEgZGV2aWNlIG5hbWUsIGFuZCB3b3VsZCB0aGVuIGZh aWwgYmVjYXVzZSBvZiAiTm8KKyAgc3VjaCBkZXZpY2Ugb3IgZGlyZWN0b3J5Ii4gIEJ1dCB0aGUg cHJldmlvdXMgY29ubmVjdGlvbiBoYXMgbGVmdCBiZWhpbmQgc29tZQorICBjbHVlcywgc28gbGV0 J3MgdXNlIHRoZW0uLi4KKyovCisgICAgaWYgKHR0eWZkIDwgMCkgewkJCS8qIENvbm5lY3Rpb24g aXMgbm90IG9wZW4gKi8KKwlpZiAoIXN0cmNtcCh0dG5hbWUsdHRubXN2KSkgewkvKiBPbGQgYW5k IG5ldyBuYW1lcyB0aGUgc2FtZT8gKi8KKwkgICAgaWYgKCgobmV0Y29ubiA+IDApICYmICh0dG1k bSA8IDApKSB8fAorCQkoKHR0bmV0ID4gMCkgJiYKKwkJICghY2tzdHJjaHIodHRuYW1lLCcvJykp ICYmIChja3N0cmNocih0dG5hbWUsJzonKSkpCisJCSkgeworCQlpbnQgeCwgcmM7CisJCXggPSAo dHRtZG0gPCAwKSA/IC10dG1kbSA6IHR0bmV0OworCQlyYyA9IG5ldG9wZW4odHRuYW1lLCBsY2ws IHgpOworCQlkZWJ1ZyhGMTExLCJ0dG9wZW4gUkVPUEVOIG5ldG9wZW4iLHR0bmFtZSxyYyk7CisJ CWlmIChyYyA+IC0xKSB7CisJCSAgICBuZXRjb25uID0gMTsKKwkJICAgIHhsb2NhbCA9ICpsY2wg PSAxOworCQl9IGVsc2UgeworCQkgICAgbmV0Y29ubiA9IDA7CisJCX0KKwkJZ290c2lncyA9IDA7 CisJCXJldHVybihyYyk7CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8K KworI2lmZGVmIE1BWE5BTUxFTgorICAgIGRlYnVnKEYxMDAsInR0b3BlbiBNQVhOQU1MRU4gZGVm aW5lZCIsIiIsMCk7CisjZWxzZQorICAgIGRlYnVnKEYxMDAsInR0b3BlbiBNQVhOQU1MRU4gKk5P VCogZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYKKworI2lmZGVmIEJTRDQKKyAgICBkZWJ1ZyhGMTAw LCJ0dG9wZW4gQlNENCBkZWZpbmVkIiwiIiwwKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRv cGVuIEJTRDQgKk5PVCogZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogQlNENCAqLworCisjaWZk ZWYgQlNENDIKKyAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gQlNENDIgZGVmaW5lZCIsIiIsMCk7Cisj ZWxzZQorICAgIGRlYnVnKEYxMDAsInR0b3BlbiBCU0Q0MiAqTk9UKiBkZWZpbmVkIiwiIiwwKTsK KyNlbmRpZiAvKiBCU0Q0MiAqLworCisjaWZkZWYgTVlSRUFECisgICAgZGVidWcoRjEwMCwidHRv cGVuIE1ZUkVBRCBkZWZpbmVkIiwiIiwwKTsKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRvcGVu IE1ZUkVBRCAqTk9UKiBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZiAvKiBNWVJFQUQgKi8KKworI2lm ZGVmCU5FVENPTk4KKyAgICBpZiAobW9kZW0gPCAwKSB7CQkJLyogbW9kZW0gPCAwID0gY29kZSBm b3IgbmV0d29yayAqLworCWludCB4OworCXR0bWRtID0gbW9kZW07CisJbW9kZW0gPSAtbW9kZW07 CQkJLyogUG9zaXRpdmUgbmV0d29yayB0eXBlIG51bWJlciAqLworCWZkZmxhZyA9IDA7CQkJLyog U3RkaW8gbm90IHJlZGlyZWN0ZWQuICovCisJbmV0Y29ubiA9IDE7CQkJLyogQW5kIGl0J3MgYSBu ZXR3b3JrIGNvbm5lY3Rpb24gKi8KKwlkZWJ1ZyhGMTExLCJ0dG9wZW4gbmV0Iix0dG5hbWUsbW9k ZW0pOworI2lmZGVmIE5BTUVGRAorCWZvciAocCA9IHR0bmFtZTsgaXNkaWdpdCgqcCk7IHArKykg OyAvKiBDaGVjayBmb3IgYWxsIGRpZ2l0cyAqLworIAlpZiAoKnAgPT0gJ1wwJyAmJiAodGVsbmV0 ZmQgfHwgeDI1ZmQpKSB7IC8qIEF2b2lkIFguMTIxIGFkZHJlc3NlcyAqLworCSAgICB0dHlmZCA9 IGF0b2kodHRuYW1lKTsJLyogSXMgdGhlcmUgYSB3YXkgdG8gdGVzdCBpdCdzIG9wZW4/ICovCisJ ICAgIHR0ZmRmbGcgPSAxOwkJLyogV2UgZ290IGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yICovCisJ ICAgIGRlYnVnKEYxMTEsInR0b3BlbiBuZXQgdHRmZGZsZyIsdHRuYW1lLHR0ZmRmbGcpOworCSAg ICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gbmV0IHR0eWZkIiwiIix0dHlmZCk7CisJICAgIGNrc3RybmNw eSh0dG5tc3YsdHRuYW1lLERFVk5BTUxFTik7IC8qIFJlbWVtYmVyIHRoZSAibmFtZSIuICovCisJ ICAgIHggPSAxOwkJCS8qIFJldHVybiBjb2RlIGlzICJnb29kIi4gKi8KKwkgICAgaWYgKHRlbG5l dGZkKSB7CisJCXR0bmV0ID0gTkVUX1RDUEI7CisJCWlmICh0dG5wcm90byAhPSBOUF9UQ1BSQVcp CisJCSAgdHRucHJvdG8gPSBOUF9URUxORVQ7CisjaWZkZWYgU1VOWDI1CisJICAgIH0gZWxzZSBp ZiAoeDI1ZmQpIHsKKwkJdHRuZXQgPSBORVRfU1gyNTsKKwkJdHRucHJvdG8gPSBOUF9OT05FOwor I2VuZGlmIC8qIFNVTlgyNSAqLworCSAgICB9CisJfSBlbHNlIHsJCQkvKiBIb3N0IG5hbWUgb3Ig YWRkcmVzcyBnaXZlbiAqLworI2lmZGVmIE5FVFBUWQorCSAgICBpZiAobW9kZW0gPT0gTkVUX1BU WSkgeworCQlpbnQgeDsKKwkJaWYgKG5vcHVzaCkgeworCQkgICAgZGVidWcoRjEwMCwidHRvcGVu IFBUWTogbm9wdXNoIiwiIiwwKTsKKwkJICAgIHJldHVybigtMSk7CisJCX0KKyAgICAgICAgICAg ICAgICB0dG5ldCA9IE5FVF9QVFk7CisJCXR0bnByb3RvID0gTlBfTk9ORTsKKyAgICAgICAgICAg ICAgICBuZXRjb25uID0gMTsgICAgICAgICAgICAvKiBidXQgd2UgZG9uJ3QgdXNlIG5ldHdvcmsg aS9vICovCisgICAgICAgICAgICAgICAgdHRwdHkgPSAxOworICAgICAgICAgICAgICAgIGRlYnVn KEYxMTAsInR0b3BlbiBQVFkiLHR0bmFtZSwwKTsKKwkJeCA9IGRvX3B0eSgmdHR5ZmQsdHRuYW1l LDApOworCQlpZiAoeCA+IC0xKSB7CisJCSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZO QU1MRU4pOworCQkgICAgeGxvY2FsID0gKmxjbCA9IDE7CS8qIEl0J3MgbG9jYWwgKi8KKwkJfSBl bHNlIHsKKwkJICAgIHR0cHR5ID0gMDsKKwkJICAgIG5ldGNvbm4gPSAwOworCQl9CisJCWdvdHNp Z3MgPSAwOworCQlyZXR1cm4oeCk7CisJICAgIH0KKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNpZmRl ZiBORVRDTUQKKy8qCisgIGR1cDIoKSBpcyBub3QgYXZhaWxhYmxlIG9uIG9sZGVyIFN5c3RlbSBW IHBsYXRmb3JtcyBsaWtlIEFUJlQgM0J4LiAgRm9yCisgIHRob3NlIHN5c3RlbXMgd2UgcHVudCBi eSBub3QgZGVmaW5pbmcgTkVUQ01ELCBidXQgd2UgbWlnaHQgYmUgYWJsZSB0byBkbworICBiZXR0 ZXIgLS0gc2VlIHdvcmthcm91bmRzIGZvciB0aGlzIHByb2JsZW0gaW4gY2t1ZmlvLmMgKHNlYXJj aCBmb3IgZHVwMikuCisqLworCSAgICBpZiAobW9kZW0gPT0gTkVUX0NNRCkgeworCQlpZiAobm9w dXNoKSB7CisJCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gcGlwZTogbm9wdXNoIiwiIiwwKTsKKwkJ ICAgIHJldHVybigtMSk7CisJCX0KKwkJaWYgKHBpcGUocGlwZTApIHx8IHBpcGUocGlwZTEpKSB7 CisJCSAgICBwZXJyb3IoIlBpcGUgZXJyb3IiKTsKKwkJICAgIHJldHVybigtMSk7CisJCX0KKwkJ dHRwaWQgPSBmb3JrKCk7CQkvKiBNYWtlIGEgZm9yayAqLworCisJCXN3aXRjaCAodHRwaWQpIHsK KwkJICBjYXNlIC0xOgkJLyogRXJyb3IgbWFraW5nIGZvcmsgKi8KKwkJICAgIGNsb3NlKHBpcGUw WzBdKTsKKwkJICAgIGNsb3NlKHBpcGUwWzFdKTsKKwkJICAgIGNsb3NlKHBpcGUxWzBdKTsKKwkJ ICAgIGNsb3NlKHBpcGUxWzFdKTsKKwkJICAgIHBlcnJvcigiRm9yayBlcnJvciIpOworCQkgICAg cmV0dXJuKC0xKTsKKwkJICBjYXNlIDA6CQkvKiBDaGlsZC4gKi8KKwkJICAgIGNsb3NlKHBpcGUw WzBdKTsKKwkJICAgIGNsb3NlKHBpcGUxWzFdKTsKKwkJICAgIGR1cDIocGlwZTBbMV0sIDEpOwor CQkgICAgY2xvc2UocGlwZTBbMV0pOworCQkgICAgZHVwMihwaXBlMVswXSwgMCk7CisJCSAgICBj bG9zZShwaXBlMVswXSk7CisJCSAgICBzeXN0ZW0odHRuYW1lKTsKKwkJICAgIF9leGl0KDApOwor CQkgIGRlZmF1bHQ6CQkvKiBQYXJlbnQgKi8KKwkJICAgIGNsb3NlKHBpcGUwWzFdKTsKKwkJICAg IGNsb3NlKHBpcGUxWzBdKTsKKwkJICAgIGZkaW4gPSBwaXBlMFswXTsJLyogUmVhZCBmcm9tIHBp cGUgKi8KKwkJICAgIGZkb3V0ID0gcGlwZTFbMV07CS8qIFdyaXRlIHRvIHBpcGUgKi8KKwkJICAg IHR0b3V0ID0gZmRvcGVuKGZkb3V0LCJ3Iik7IC8qIEdldCBzdHJlYW0gc28gd2UgY2FuICovCisJ CSAgICBpZiAoIXR0b3V0KSB7CS8qIG1ha2UgaXQgdW5idWZmZXJlZC4gKi8KKwkJCXBlcnJvcigi ZmRvcGVuIGZhaWx1cmUiKTsKKwkJCXJldHVybigtMSk7CisJCSAgICB9CisJCSAgICBzZXRidWYo dHRvdXQsTlVMTCk7CisJCSAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4pOwor CQkgICAgeGxvY2FsID0gKmxjbCA9IDE7CS8qIEl0J3MgbG9jYWwgKi8KKwkJICAgIG5ldGNvbm4g PSAxOwkvKiBDYWxsIGl0IGEgbmV0d29yayBjb25uZWN0aW9uICovCisJCSAgICB0dG1kbSA9IG1v ZGVtOwkvKiBSZW1lbWJlciBuZXR3b3JrIHR5cGUgKi8KKwkJICAgIHR0eWZkID0gZmRpbjsKKwkJ ICAgIHR0cGlwZSA9IDE7CisJCSAgICBnb3RzaWdzID0gMDsKKwkJICAgIHJldHVybigwKTsKKwkJ fQorCSAgICB9CisjZW5kaWYgLyogTkVUQ01EICovCisjZW5kaWYgLyogTkFNRUZEICovCisJICAg IHggPSBuZXRvcGVuKHR0bmFtZSwgbGNsLCBtb2RlbSk7IC8qIChzZWUgY2tjbmV0LmgpICovCisJ ICAgIGlmICh4ID4gLTEpIHsKKwkJY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVWTkFNTEVOKTsK KwkgICAgfSBlbHNlIG5ldGNvbm4gPSAwOworI2lmZGVmIE5BTUVGRAorCX0KKyNlbmRpZiAvKiBO QU1FRkQgKi8KKworI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNvbnkgTkVXUyAqLworCWlmIChpb2N0 bCh0dHlmZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsgLyogR2V0IEthbmppIG1vZGUgKi8KKwkg ICAgcGVycm9yKCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIChuZXR3b3JrKSIpOwor CSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBLYW5qaSBtb2RlIiwibmV0d29y ayIsMCk7CisJICAgIGttX2V4dCA9IC0xOwkJLyogTWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZp bmVkLiAqLworCX0KKyNlbmRpZiAvKiBzb255X25ld3MgKi8KKworCXhsb2NhbCA9ICpsY2wgPSAx OwkJLyogTmV0d29yayBjb25uZWN0aW9ucyBhcmUgbG9jYWwuICovCisJZGVidWcoRjEwMSwidHRv cGVuIG5ldCB4IiwiIix4KTsKKyNpZmRlZiBDT01NRU5UCisvKiBMZXQgbmV0b3BlbigpIGRvIHRo aXMgKi8KKwlpZiAoeCA+IC0xICYmICF4MjVmZCkKKwkgIHggPSB0bl9pbmkoKTsJCQkvKiBJbml0 aWFsaXplIFRFTE5FVCBwcm90b2NvbCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlnb3RzaWdz ID0gMDsKKwlyZXR1cm4oeCk7CisgICAgfSBlbHNlIHsJCQkJLyogVGVybWluYWwgZGV2aWNlICov CisjZW5kaWYJLyogTkVUQ09OTiAqLworCisjaWZkZWYgTkFNRUZECisvKgorICBUaGlzIGNvZGUg bGV0cyB5b3UgZ2l2ZSBLZXJtaXQgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgZm9yIGEgc2VyaWFs CisgIGNvbW11bmljYXRpb24gZGV2aWNlLCByYXRoZXIgdGhhbiBhIGRldmljZSBuYW1lLiAgS2Vy bWl0IGFzc3VtZXMgdGhhdCB0aGUKKyAgbGluZSBpcyBhbHJlYWR5IG9wZW4sIGxvY2tlZCwgY29u ZGl0aW9uZWQgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGVycywgZXRjLgorKi8KKwlmb3IgKHAgPSB0 dG5hbWU7IGlzZGlnaXQoKnApOyBwKyspIDsgLyogQ2hlY2sgZm9yIGFsbC1kaWdpdHMgKi8KKwlp ZiAoKnAgPT0gJ1wwJykgeworCSAgICB0dHlmZCA9IGF0b2kodHRuYW1lKTsJLyogSXMgdGhlcmUg YSB3YXkgdG8gdGVzdCBpdCdzIG9wZW4/ICovCisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiBnb3Qg b3BlbiBmZCIsdHRuYW1lLHR0eWZkKTsKKwkgICAgY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVW TkFNTEVOKTsgLyogUmVtZW1iZXIgdGhlICJuYW1lIi4gKi8KKwkgICAgaWYgKHR0eWZkID49IDAg JiYgdHR5ZmQgPCAzKSAvKiBJZiBpdCdzIHN0ZGlvLi4uICovCisJICAgICAgeGxvY2FsID0gKmxj bCA9IDA7CS8qIHdlJ3JlIGluIHJlbW90ZSBtb2RlICovCisJICAgIGVsc2UJCQkvKiBvdGhlcndp c2UgKi8KKwkgICAgICB4bG9jYWwgPSAqbGNsID0gMTsJLyogbG9jYWwgbW9kZS4gKi8KKwkgICAg bmV0Y29ubiA9IDA7CQkvKiBBc3N1bWUgaXQncyBub3QgYSBuZXR3b3JrLiAqLworCSAgICB0dnRm bGcgPSAwOwkJCS8qIE1pZ2h0IG5lZWQgdG8gaW5pdGlhbGl6ZSBtb2Rlcy4gKi8KKwkgICAgdHRt ZG0gPSBtb2RlbTsJCS8qIFJlbWVtYmVyIG1vZGVtIHR5cGUuICovCisJICAgIGZkZmxhZyA9IDA7 CQkJLyogU3RkaW8gbm90IHJlZGlyZWN0ZWQuICovCisJICAgIHR0ZmRmbGcgPSAxOwkJLyogRmxh ZyB3ZSB3ZXJlIG9wZW5lZCB0aGlzIHdheS4gKi8KKwkgICAgZGVidWcoRjExMSwidHRvcGVuIG5v bi1uZXQgdHRmZGZsZyIsdHRuYW1lLHR0ZmRmbGcpOworCSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4g bm9uLW5ldCB0dHlmZCIsIiIsdHR5ZmQpOworCisjaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBO RVdTICovCisJICAgIC8qIEdldCBkZXZpY2UgS2FuamkgbW9kZSAqLworCSAgICBpZiAoaW9jdGwo dHR5ZmQsVElPQ0tHRVQsJmttX2V4dCkgPCAwKSB7CisJCXBlcnJvcigidHRvcGVuIGVycm9yIGdl dHRpbmcgS2FuamkgbW9kZSIpOworCQlkZWJ1ZyhGMTAxLCJ0dG9wZW4gZXJyb3IgZ2V0dGluZyBL YW5qaSBtb2RlIiwiIiwwKTsKKwkJa21fZXh0ID0gLTE7CQkvKiBNYWtlIHN1cmUgdGhpcyBzdGF5 cyB1bmRlZmluZWQuICovCisJICAgIH0KKyNlbmRpZiAvKiBzb255X25ld3MgKi8KKwkgICAgZ290 c2lncyA9IDA7CisJICAgIHJldHVybigwKTsJCQkvKiBSZXR1cm4gc3VjY2VzcyAqLworCX0KKyNl bmRpZiAvKiBOQU1FRkQgKi8KKyNpZmRlZiBORVRDT05OCisgICAgfQorI2VuZGlmIC8qIE5FVENP Tk4gKi8KKworLyogSGVyZSB3ZSBoYXZlIHRvIG9wZW4gYSBzZXJpYWwgZGV2aWNlIG9mIHRoZSBn aXZlbiBuYW1lLiAqLworCisgICAgbmV0Y29ubiA9IDA7CQkJLyogU28gaXQncyBub3QgYSBuZXR3 b3JrIGNvbm5lY3Rpb24gKi8KKyAgICBvY2N0ID0gc2lnbmFsKFNJR0lOVCwgY2N0cmFwKTsJLyog U2V0IENvbnRyb2wtQyB0cmFwLCBzYXZlIG9sZCBvbmUgKi8KKyAgICBzaWdpbnRfaWduID0gMDsK KworICAgIHR2dGZsZyA9IDA7CQkJLyogRmxhZyBmb3IgdXNlIGJ5IHR0dnQoKS4gKi8KKwkJCQkv KiAwID0gdHR2dCBub3QgY2FsbGVkIHlldCBmb3IgdGhpcyBkZXZpY2UgKi8KKworICAgIGZkZmxh ZyA9ICghaXNhdHR5KDApIHx8ICFpc2F0dHkoMSkpOyAvKiBGbGFnIGZvciBzdGRpbyByZWRpcmVj dGVkICovCisgICAgZGVidWcoRjEwMSwidHRvcGVuIGZkZmxhZyIsIiIsZmRmbGFnKTsKKworICAg IHR0bWRtID0gbW9kZW07ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgdGhpcyBhdmFpbGFi bGUgdG8gb3RoZXIgZm5zICovCisgICAgeGxvY2FsID0gKmxjbDsgICAgICAgICAgICAgICAgICAg ICAgLyogTWFrZSB0aGlzIGF2YWlsYWJsZSB0byBvdGhlciBmbnMgKi8KKworLyogQ29kZSBmb3Ig aGFuZGxpbmcgYmlkaXJlY3Rpb25hbCB0dHkgbGluZXMgZ29lcyBoZXJlLiAqLworLyogVXNlIHNw ZWNpZmllZCBtZXRob2QgZm9yIHR1cm5pbmcgb2ZmIGxvZ2lucyBhbmQgc3VwcHJlc3NpbmcgZ2V0 dHkuICovCisKKyNpZmRlZiBBQ1VDTlRSTAorICAgIC8qIFNob3VsZCBwdXQgY2FsbCB0byBwcml2 X29uKCkgaGVyZSwgYnV0IHRoYXQgd291bGQgYmUgdmVyeSByaXNreSEgKi8KKyAgICBhY3VjbnRy bCgiZGlzYWJsZSIsdHRuYW1lKTsgICAgICAgICAvKiBhY3VjbnRybCgpIHByb2dyYW0uICovCisg ICAgLyogYW5kIHByaXZfb2ZmKCkgaGVyZS4uLiAqLworI2Vsc2UKKyNpZmRlZiBBVFQ3MzAwCisg ICAgaWYgKChhdHRtb2RlbSAmIERPR0VUWSkgPT0gMCkgICAgICAgLyogb2ZmZ2V0dHkoKSBwcm9n cmFtLiAqLworICAgICAgYXR0bW9kZW0gfD0gb2ZmZ2V0dHkodHRuYW1lKTsJLyogUmVtZW1iZXIg cmVzcG9uc2UuICAqLworI2VuZGlmIC8qIEFUVDczMDAgKi8KKyNlbmRpZiAvKiBBQ1VDTlRSTCAq LworCisjaWZkZWYgT1BFTkZJUlNUCisvKgorIDE5ODUtMjAwMTogb3BlbnMgZGV2aWNlIGZpcnN0 IHRoZW4gZ2V0cyBsb2NrOyByZWFzb246CisgS2VybWl0IHVzdWFsbHkgaGFzIHRvIHJ1biBzZXR1 aWQgb3Igc2V0Z2lkIGluIG9yZGVyIHRvIGNyZWF0ZSBhIGxvY2tmaWxlLgorIElmIHlvdSBnaXZl IGEgU0VUIExJTkUgY29tbWFuZCBmb3IgYSBkZXZpY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHlvdXIg am9iJ3MKKyBjb250cm9sbGluZyB0ZXJtaW5hbCwgS2VybWl0IGRvZXNuJ3QgaGF2ZSB0byBjcmVh dGUgYSBsb2NrZmlsZSwgYW5kIGluIGZhY3QKKyBzaG91bGQgbm90IGNyZWF0ZSBvbmUsIGFuZCB3 b3VsZCBmYWlsIGlmIGl0IHRyaWVkIHRvIGlmIGl0IGRpZCBub3QgaGF2ZSB0aGUKKyByZXF1aXJl ZCBwcml2aWxlZ2VzLiAgQnV0IHlvdSBjYW4ndCBmaW5kIG91dCBpZiB0d28gdHR5IGRldmljZSBu YW1lcyBhcmUKKyBlcXVpdmFsZW50IHVudGlsIHlvdSBoYXZlIGEgZmlsZSBkZXNjcmlwdG9yIHRo YXQgeW91IGNhbiBnaXZlIHRvIHR0eW5hbWUoKS4KKyBCdXQgdGhpcyBjYW4gY2F1c2UgYSByYWNl IGNvbmRpdGlvbiBiZXR3ZWVuIEtlcm1pdCBhbmQgW21dZ2V0dHkuICBTbyBzZWUKKyB0aGUgWyNd ZWxzZSBwYXJ0Li4uCisqLyAKKworLyoKKyBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24sIHdlIG9w ZW4gdGhlIHR0eSBkZXZpY2UgZm9yIHJlYWQvd3JpdGUuCisgSWYgYSBtb2RlbSBoYXMgYmVlbiBz cGVjaWZpZWQgdmlhICJzZXQgbW9kZW0iIHByaW9yIHRvICJzZXQgbGluZSIKKyB0aGVuIHRoZSBP X05ERUxBWSBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgb3BlbiwgcHJvdmlkZWQgdGhpcyBzeW1i b2wKKyBpcyBkZWZpbmVkIChlLmcuIGluIGZjbnRsLmgpLCBzbyB0aGF0IHRoZSBwcm9ncmFtIGRv ZXMgbm90IGhhbmcgd2FpdGluZworIGZvciBjYXJyaWVyICh3aGljaCBpbiBtb3N0IGNhc2VzIHdv bid0IGJlIHByZXNlbnQgYmVjYXVzZSBhIGNvbm5lY3Rpb24KKyBoYXMgbm90IGJlZW4gZGlhbGVk IHlldCkuICBPX05ERUxBWSBpcyByZW1vdmVkIGxhdGVyIG9uIGluIHR0b3BlbigpLiAgSXQKKyB3 b3VsZCBtYWtlIG1vcmUgc2Vuc2UgdG8gZmlyc3QgZGV0ZXJtaW5lIGlmIHRoZSBsaW5lIGlzIGxv Y2FsIGJlZm9yZQorIGRvaW5nIHRoaXMsIGJ1dCBiZWNhdXNlIHR0eW5hbWUoKSByZXF1aXJlcyBh IGZpbGUgZGVzY3JpcHRvciwgd2UgaGF2ZQorIHRvIG9wZW4gaXQgZmlyc3QuICBTZWUgZG9fb3Bl bigpLgorCisgTm93IG9wZW4gdGhlIGRldmljZSB1c2luZyB0aGUgZGVzaXJlZCB0cmVhdG1lbnQg b2YgY2Fycmllci4KKyBJZiBjYXJyaWVyIGlzIFJFUVVJUkVELCB0aGVuIG9wZW4gY291bGQgaGFu ZyBmb3JldmVyLCBzbyBhbiBvcHRpb25hbAorIHRpbWVyIGlzIHByb3ZpZGVkLiAgSWYgY2Fycmll ciBpcyBub3QgcmVxdWlyZWQsIHRoZSB0aW1lciBzaG91bGQgbmV2ZXIKKyBnbyBvZmYsIGFuZCBz aG91bGQgZG8gbm8gaGFybS4uLgorKi8KKyAgICB0dG90bW8gPSAwOwkJCQkvKiBGbGFnIG5vIHRp bWVvdXQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gdGltbyIsIiIsdGltbyk7CisgICAgZGVi dWcoRjEwMSwidHRvcGVuIHhsb2NhbCIsIiIseGxvY2FsKTsKKyAgICBpZiAodGltbyA+IDApIHsK KwlpbnQgeHg7CisJc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBUaW1lZCwgc2V0 IHVwIHRpbWVyLiAqLworCXh4ID0gYWxhcm0odGltbyk7CQkvKiBUaW1lZCBvcGVuKCkgKi8KKwlk ZWJ1ZyhGMTAxLCJ0dG9wZW4gYWxhcm0iLCIiLHh4KTsKKwlpZiAoCisjaWZkZWYgQ0tfUE9TSVhf U0lHCisJICAgIHNpZ3NldGptcChzamJ1ZiwxKQorI2Vsc2UKKwkgICAgc2V0am1wKHNqYnVmKQor I2VuZGlmIC8qIENLX1BPU0lYX1NJRyAqLworCSAgICApIHsKKwkgICAgdHRvdG1vID0gMTsJCQkv KiBGbGFnIHRpbWVvdXQuICovCisJfSBlbHNlIHR0eWZkID0gZG9fb3Blbih0dG5hbWUpOworCXR0 aW1vZmYoKTsKKwlkZWJ1ZyhGMTExLCJ0dG9wZW4iLCJtb2RlbSIsbW9kZW0pOworCWRlYnVnKEYx MDEsInR0b3BlbiB0dHlmZCIsIiIsdHR5ZmQpOworCWRlYnVnKEYxMDEsInR0b3BlbiBhbGFybSBy ZXR1cm4iLCIiLHR0b3Rtbyk7CisgICAgfSBlbHNlIHsKKwllcnJubyA9IDA7CisJdHR5ZmQgPSBk b19vcGVuKHR0bmFtZSk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dHlmZCIsdHRu YW1lLHR0eWZkKTsKKyAgICBpZiAodHR5ZmQgPCAwKSB7CQkJLyogSWYgY291bGRuJ3Qgb3Blbiwg ZmFpbC4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dG9wZW4gZXJybm8iLCIiLGVycm5vKTsKKwlpZiAoZXJy bm8gPiAwICYmICFxdWlldCkKKwkgIHBlcnJvcih0dG5hbWUpOwkJLyogUHJpbnQgbWVzc2FnZSAq LworCisjaWZkZWYgQVRUNzMwMAorCWlmIChhdHRtb2RlbSAmIERPR0VUWSkJCS8qIHdhcyBnZXR0 eSgxbSkgcnVubmluZyBiZWZvcmUgdXM/ICovCisJICBvbmdldHR5KHR0bm1zdik7CQkvKiB5ZXMs IHJlc3RhcnQgb24gdHR5IGxpbmUgKi8KKwlhdHRtb2RlbSAmPSB+RE9HRVRZOwkJLyogbm8gcGhv bmUgaW4gdXNlLCBnZXR0eSByZXN0b3JlZCAqLworI2Vsc2UKKyNpZmRlZiBBQ1VDTlRSTAorICAg ICAgICAvKiBTaG91bGQgcHV0IGNhbGwgdG8gcHJpdl9vbigpIGhlcmUsIGJ1dCB0aGF0IHdvdWxk IGJlIHJpc2t5ISAqLworCWFjdWNudHJsKCJlbmFibGUiLHR0bmFtZSk7CS8qIGFjdWNudHJsKCkg cHJvZ3JhbS4gKi8KKwkvKiBhbmQgcHJpdl9vZmYoKSBoZXJlLi4uICovCisjZW5kaWYgLyogQUNV TlRSTCAqLworI2VuZGlmIC8qIEFUVDczMDAgKi8KKworCXNpZ25hbChTSUdJTlQsb2NjdCk7CQkv KiBQdXQgb2xkIEN0cmwtQyB0cmFwIGJhY2suICovCisJaWYgKGVycm5vID09IEVBQ0NFUykgewkJ LyogRGV2aWNlIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHVzZXIgKi8KKwkgICAgZGVidWcoRjExMCwi dHRvcGVuIEVBQ0NFU1MiLHR0bmFtZSwwKTsgLyogUmV0dXJuIC00ICovCisJICAgIHJldHVybigt NCk7CisJfSBlbHNlIHJldHVybih0dG90bW8gPyAtMiA6IC0xKTsgLyogT3RoZXJ3aXNlIC0yIGlm IHRpbWVvdXQsIG9yIC0xICovCisgICAgfQorCisjaWZkZWYgUU5YCisgICAgeworCWV4dGVybiBp bnQgcW54cG9ydGxvY2s7CisJeCA9IHFueG9wZW5jb3VudCgpOworCWRlYnVnKEYxMDEsInR0b3Bl biBxbnhvcGVuY291bnQiLCIiLHgpOworCWRlYnVnKEYxMDEsInR0b3BlbiBxbnhwb3J0bG9jayIs IiIscW54cG9ydGxvY2spOworCWlmICh4IDwgMCAmJiBxbnhwb3J0bG9jaykgeworCSAgICB0dGNs b3MoMCk7CisJICAgIHByaW50ZigiP0Nhbid0IGdldCBwb3J0IG9wZW4gY291bnRcbiIpOworCSAg ICBwcmludGYoIihUcnkgYWdhaW4gd2l0aCBTRVQgUU5YLVBPUlQtTE9DSyBPRkYpXG4iKTsKKwkg ICAgcmV0dXJuKC0xKTsJCQkvKiBJbmRpY2F0ZSBkZXZpY2UgaXMgaW4gdXNlICovCisJfQorCWlm ICh4ID4gMSkgewkJCS8qIDEgPT0gbWUgKi8KKwkgICAgaWYgKHFueHBvcnRsb2NrKQorCSAgICAg IHR0Y2xvcygwKTsKKwkgICAgICByZXR1cm4oLTIpOwkJLyogSW5kaWNhdGUgZGV2aWNlIGlzIGlu IHVzZSAqLworCSAgICBlbHNlIGlmICghcXVpZXQpCisJICAgICAgcHJpbnRmKCJXQVJOSU5HOiBc IiVzXCIgbG9va3MgYnVzeS4uLlxuIix0dGRldik7CisJfQorICAgIH0KKyNlbmRpZiAvKiBRTlgg Ki8KKworI2lmZGVmIFBsYW45CisgICAgLyogdGFrZSB0aGlzIG9wcG9ydHVuaXR5IHRvIG9wZW4g dGhlIGNvbnRyb2wgY2hhbm5lbCAqLworICAgIGlmIChwOW9wZW50dHljdGwodHRuYW1lKSA8IDAp CisjZWxzZQorICAgIC8qIE1ha2Ugc3VyZSBpdCdzIGEgcmVhbCB0dHkuICovCisgICAgaWYgKCF0 dGZkZmxnICYmICFpc2F0dHkodHR5ZmQpICYmIHN0cmNtcCh0dG5hbWUsIi9kZXYvbnVsbCIpKQor I2VuZGlmIC8qIFBsYW45ICovCisgICAgICB7CisJZnByaW50ZihzdGRlcnIsIiVzIGlzIG5vdCBh IHRlcm1pbmFsIGRldmljZVxuIix0dG5hbWUpOworCWRlYnVnKEYxMTEsInR0b3BlbiBub3QgYSB0 dHkiLHR0bmFtZSxlcnJubyk7CisJY2xvc2UodHR5ZmQpOworCXR0eWZkID0gLTE7CisJd2FzY2xv c2VkID0gMTsKKwlzaWduYWwoU0lHSU5ULG9jY3QpOworCXJldHVybigtMSk7CisgICAgfQorCisj aWZkZWYgYWVnaXMKKwkvKiBBcG9sbG8gQyBydW50aW1lIGNsYWltcyB0aGF0IGNvbnNvbGUgcGFk cyBhcmUgdHR5IGRldmljZXMsIHdoaWNoCisJICogaXMgcmVhc29uYWJsZSwgYnV0IHRoZXkgYXJl bid0IGFueSBnb29kIGZvciBwYWNrZXQgdHJhbnNmZXIuICovCisJaW9zXyRpbnFfdHlwZV91aWQo KHNob3J0KXR0eWZkLCB0dHl1aWQsIHN0KTsKKwlpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIHsK KwkgICAgZnByaW50ZihzdGRlcnIsICJwcm9ibGVtIGdldHRpbmcgdHR5IG9iamVjdCB0eXBlOiAi KTsKKwkgICAgZXJyb3JfJHByaW50KHN0KTsKKwl9IGVsc2UgaWYgKHR0eXVpZCAhPSBzaW9fJHVp ZCkgeyAvKiByZWplY3Qgbm9uLVNJTyBsaW5lcyAqLworCSAgICBjbG9zZSh0dHlmZCk7IHR0eWZk ID0gLTE7CisJICAgIHdhc2Nsb3NlZCA9IDE7CisJICAgIGVycm5vID0gRU5PVFRZOyBwZXJyb3Io dHRuYW1lKTsKKwkgICAgc2lnbmFsKFNJR0lOVCxvY2N0KTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9 CisjZW5kaWYgLyogYWVnaXMgKi8KKworICAgIHNpZ2ludF9pZ24gPSAob2NjdCA9PSBTSUdfSUdO KSA/IDEgOiAwOworCisgICAgY2tzdHJuY3B5KHR0bm1zdix0dG5hbWUsREVWTkFNTEVOKTsJLyog S2VlcCBjb3B5IG9mIG5hbWUgbG9jYWxseS4gKi8KKworLyogQ2FsbGVyIHdhbnRzIHVzIHRvIGZp Z3VyZSBvdXQgaWYgbGluZSBpcyBjb250cm9sbGluZyB0dHkgKi8KKworICAgIGlmICgqbGNsIDwg MCkgeworICAgICAgICBpZiAoc3RyY21wKHR0bmFtZSxDVFROQU0pID09IDApIHsgLyogIi9kZXYv dHR5IiBhbHdheXMgcmVtb3RlICovCisgICAgICAgICAgICB4bG9jYWwgPSAwOworCSAgICBkZWJ1 ZyhGMTExLCJ0dG9wZW4gdHRuYW1lPUNUVE5BTSIsdHRuYW1lLHhsb2NhbCk7CisgICAgICAgIH0g ZWxzZSBpZiAoc3RyY21wKHR0bmFtZSxjdHRuYW0pID09IDApIHsKKyAgICAgICAgICAgIHhsb2Nh bCA9IDA7CisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dG5hbWU9Y3R0bmFtIix0dG5hbWUseGxv Y2FsKTsKKwl9IGVsc2UgaWYgKGN0dG5hbVswXSkgeworI2lmZGVmIEJFQk9YX0RSNworICAgICAg ICAgICAgeCA9IHR0bm1zdjsJCQkvKiB0dHluYW1lKCkgaXMgYnJva2VuICovCisjZWxzZQorICAg ICAgICAgICAgeCA9IHR0eW5hbWUodHR5ZmQpOyAgICAgICAgIC8qIEdldCByZWFsIG5hbWUgb2Yg dHRuYW1lLiAqLworI2VuZGlmIC8qIEJFQk9YX0RSNyAqLworCSAgICBpZiAoIXgpIHggPSAiIjsK KwkgICAgaWYgKCp4KQorCSAgICAgIHhsb2NhbCA9ICgoc3RybmNtcCh4LGN0dG5hbSxERVZOQU1M RU4pID09IDApID8gMCA6IDEpOworCSAgICBlbHNlCisJICAgICAgeGxvY2FsID0gMTsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTEsInR0b3BlbiB0dHluYW1lKHR0eWZkKSB4bG9jYWwiLHgseGxvY2Fs KTsKKyAgICAgICAgfQorICAgIH0KKworI2lmbmRlZiBOT0ZEWkVSTworLyogTm90ZSwgdGhlIGZv bGxvd2luZyBjb2RlIHdhcyBhZGRlZCBzbyB0aGF0IFVuaXggImlkbGUtbGluZSIgc25vb3BlcnMg Ki8KKy8qIHdvdWxkIG5vdCB0aGluayBLZXJtaXQgd2FzIGlkbGUgd2hlbiBpdCB3YXMgdHJhbnNm ZXJyaW5nIGZpbGVzLCBhbmQgKi8KKy8qIG1heWJlIGxvZyBwZW9wbGUgb3V0LiAqLworICAgIGlm ICh4bG9jYWwgPT0gMCkgewkJCS8qIFJlbW90ZSBtb2RlICovCisJaWYgKGZkZmxhZyA9PSAwKSB7 CQkvKiBTdGFuZGFyZCBpL28gaXMgbm90IHJlZGlyZWN0ZWQgKi8KKwkgICAgZGVidWcoRjEwMCwi dHRvcGVuIHNldHRpbmcgdHR5ZmQgPSAwIiwiIiwwKTsKKyNpZmRlZiBMWU5YT1MKKwkgICAgLyog T24gTHlueCBPUywgZmQgMCBpcyBvcGVuIGZvciByZWFkIG9ubHkuICovCisJICAgIGR1cDIodHR5 ZmQsMCk7CisjZW5kaWYgLyogTFlOWE9TICovCisJICAgIGNsb3NlKHR0eWZkKTsJCS8qIFVzZSBm aWxlIGRlc2NyaXB0b3IgMCAqLworCSAgICB0dHlmZCA9IDA7CisJfSBlbHNlIHsJCQkvKiBTdGFu ZGFyZCBpL28gaXMgcmVkaXJlY3RlZCAqLworCSAgICBkZWJ1ZyhGMTAxLCJ0dG9wZW4gc3RkaW8g cmVkaXJlY3RlZCIsIiIsdHR5ZmQpOworCX0KKyAgICB9CisjZW5kaWYgLyogTk9GRFpFUk8gKi8K KworLyogTm93IGNoZWNrIGlmIGxpbmUgaXMgbG9ja2VkIC0tIGlmIHNvIGZhaWwsIGVsc2UgbG9j ayBmb3Igb3Vyc2VsdmVzICovCisvKiBOb3RlOiBBZnRlciBoYXZpbmcgZG9uZSB0aGlzLCBkb24n dCBmb3JnZXQgdG8gZGVsZXRlIHRoZSBsb2NrIGlmIHlvdSAqLworLyogbGVhdmUgdHRvcGVuKCkg d2l0aCBhbiBlcnJvciBjb25kaXRpb24uICovCisKKyAgICBsa2YgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDaGVjayBsb2NrICovCisgICAgaWYgKHhsb2NhbCA+IDApIHsKKwlp bnQgeHg7IGludCB4cGlkOworICAgICAgICBpZiAoKHh4ID0gdHRsb2NrKHR0bmFtZSkpIDwgMCkg eyAvKiBDYW4ndCBsb2NrIGl0LiAqLworICAgICAgICAgICAgZGVidWcoRjExMSwidHRvcGVuIHR0 bG9jayBmYWlscyIsdHRuYW1lLHh4KTsKKwkgICAgLyogV0FSTklORyAtIFRoaXMgY2xvc2UoKSBj YW4gaGFuZyBpZiB0dHkgaXMgYW4gZW1wdHkgc29ja2V0Li4uICovCisgICAgICAgICAgICBjbG9z ZSh0dHlmZCk7CQkvKiBDbG9zZSB0aGUgZGV2aWNlLiAqLworCSAgICB0dHlmZCA9IC0xOwkJCS8q IEVyYXNlIGl0cyBmaWxlIGRlc2NyaXB0b3IuICovCisJICAgIHdhc2Nsb3NlZCA9IDE7CisJICAg IHNpZ25hbChTSUdJTlQsb2NjdCk7CS8qIFB1dCBvbGQgU0lHSU5UIGJhY2suICovCisJICAgIHNp Z2ludF9pZ24gPSAob2NjdCA9PSBTSUdfSUdOKSA/IDEgOiAwOworCSAgICBpZiAoeHggPT0gLTIp IHsJCS8qIElmIGxvY2tmaWxlIHNheXMgZGV2aWNlIGluIHVzZSwgKi8KKyNpZm5kZWYgTk9VVUNQ CisJCWRlYnVnKEYxMTEsInR0b3BlbiByZWFkaW5nIGxvY2tmaWxlIHBpZCIsZmxmbmFtLHh4KTsK KwkJeHBpZCA9IHR0cnBpZChmbGZuYW0pOwkvKiBUcnkgdG8gcmVhZCBwaWQgZnJvbSBsb2NrZmls ZSAqLworCQlpZiAoeHBpZCA+IC0xKSB7CS8qIElmIHdlIGdvdCBhIHBpZCAqLworICAgICAgICAg ICAgICAgICAgICBpZiAoIXF1aWV0KQorCQkgICAgICBwcmludGYoIkxvY2tlZCBieSBwcm9jZXNz ICVkXG4iLHhwaWQpOyAvKiB0ZWxsIHRoZW0uICovCisJCSAgICBzcHJpbnRmKGxvY2twaWQsIiVk Iix4cGlkKTsJLyogUmVjb3JkIGl0IHRvbyAqLworCQkgICAgZGVidWcoRjExMCwidHRvcGVuIGxv Y2twaWQiLGxvY2twaWQsMCk7CisJCX0gZWxzZSBpZiAoKmZsZm5hbSkgeworCQkgICAgZXh0ZXJu IGNoYXIgKkRJUkNNRDsKKwkJICAgIGNoYXIgKnAgPSBOVUxMOworCQkgICAgaW50IHg7CisJCSAg ICB4ID0gKGludClzdHJsZW4oZmxmbmFtKSArIChpbnQpc3RybGVuKERJUkNNRCkgKyAyOworCQkg ICAgcCA9IG1hbGxvYyh4KTsJLyogUHJpbnQgYSBkaXJlY3RvcnkgbGlzdGluZy4gKi8KKy8qCisg IE5vdGU6IHByaXZfb24oKSB3b24ndCBoZWxwIGhlcmUsIGJlY2F1c2Ugd2UgZG8gbm90IHBhc3Mg cHJpdnMgYWxvbmcgdG8KKyAgdG8gaW5mZXJpb3IgcHJvY2Vzc2VzLCBpbiB0aGlzIGNhc2UgbHMu ICBTbyBpZiB0aGUgcmVhbCB1c2VyIGRvZXMgbm90IGhhdmUKKyAgZGlyZWN0b3J5LWxpc3Rpbmcg YWNjZXNzIHRvIHRoZSBsb2NrZmlsZSBkaXJlY3RvcnksIHRoaXMgd2lsbCByZXN1bHQgaW4KKyAg c29tZXRoaW5nIGxpa2UgIm5vdCBmb3VuZCIuICBUaGF0J3Mgd2h5IHdlIHRyeSB0aGlzIG9ubHkg YXMgYSBsYXN0IHJlc29ydC4KKyovCisJCSAgICBpZiAocCkgewkJLyogSWYgd2UgZ290IHRoZSBz cGFjZS4uLiAqLworCQkJY2ttYWttc2cocCx4LERJUkNNRCwiICIsZmxmbmFtLE5VTEwpOworCQkJ enN5c2NtZChwKTsJLyogR2V0IGxpc3RpbmcuICovCisJCQlpZiAocCkgewkvKiBmcmVlIHRoZSBz cGFjZSAqLworCQkJICAgIGZyZWUocCk7CisJCQkgICAgcCA9IE5VTEw7CisJCQl9CisJCSAgICB9 CisJCX0KKyNlbmRpZiAvKiBOT1VVQ1AgKi8KKwkJcmV0dXJuKC01KTsJCS8qIENvZGUgZm9yIGRl dmljZSBpbiB1c2UgKi8KKwkgICAgfSBlbHNlIHJldHVybigtMyk7CQkvKiBBY2Nlc3MgZGVuaWVk ICovCisgICAgICAgIH0gZWxzZSBsa2YgPSAxOworICAgIH0KKyNlbHNlICAvKiBPUEVORklSU1Qg Ki8KKworLyoKKyAgMjcgT2N0IDIwMDE6IE5ldyBzaW1wbGVyIGNvZGUgdGhhdCBnZXRzIHRoZSBs b2NrIGZpcnN0IGFuZCB0aGVuIG9wZW5zIHRoZQorICBkZXZpY2UsIHdoaWNoIGVsaW1pbmF0ZXMg dGhlIHJhY2UgY29uZGl0aW9uLiAgVGhlIGRvd25zaWRlIGlzIHlvdSBjYW4gbm8KKyAgbG9uZ2Vy IHNheSAic2V0IGxpbmUgL2Rldi90dHlwMCIgb3Igd2hhdGV2ZXIsIHdoZXJlIC9kZXYvdHR5cDAg aXMgeW91ciBsb2dpbgorICB0ZXJtaW5hbCwgd2l0aG91dCB0cnlpbmcgdG8gY3JlYXRlIGEgbG9j a2ZpbGUsIHdoaWNoIGZhaWxzIGlmIEMtS2VybWl0IGxhY2tzCisgIHByaXZzLCBhbmQgaWYgaXQg c3VjY2VlZHMsIGl0IGhhcyBjcmVhdGVkIGEgbG9ja2ZpbGUgd2hlcmUgaXQgZGlkbid0IGNyZWF0 ZQorICBvbmUgYmVmb3JlLgorKi8KKyAgICB4bG9jYWwgPSAqbGNsOwkJCS8qIElzIHRoZSBkZXZp Y2UgbXkgbG9naW4gdGVybWluYWw/ICovCisgICAgZGVidWcoRjExMSwidHRvcGVuIHhsb2NhbCIs IkEiLHhsb2NhbCk7CisgICAgZm5hbSA9IHR0bmFtZTsKKyAgICBpZiAoc3RyY21wKHR0bmFtZSxD VFROQU0pICYmIG5ldGNvbm4gPT0gMCkgeworCWlmICh6Zm5xZnAodHRuYW1lLERFVk5BTUxFTisx LGZ1bGxuYW1lKSkgeworCSAgICBpZiAoKGludClzdHJsZW4oZnVsbG5hbWUpID4gMCkKKwkgICAg ICBmbmFtID0gZnVsbG5hbWU7CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJ0dG9wZW4gZm5h bSIsZm5hbSwwKTsKKyAgICBpZiAoeGxvY2FsIDwgMCkgeworCXhsb2NhbCA9IChzdHJjbXAoZm5h bSxDVFROQU0pICE9IDApOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4geGxvY2FsIiwi QiIseGxvY2FsKTsKKworICAgIGxrZiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE5vIGxvY2sgeWV0ICovCisgICAgaWYgKHhsb2NhbCA+IDApIHsJCQkvKiBJZiBub3QuLi4gKi8K KwlpbnQgeHg7IGludCB4cGlkOworCXh4ID0gdHRsb2NrKGZuYW0pOwkJLyogVHJ5IHRvIGxvY2sg aXQuICovCisJZGVidWcoRjEwMSwidHRvcGVuIHR0bG9jayIsIiIseHgpOworICAgICAgICBpZiAo eHggPCAwKSB7CQkJLyogQ2FuJ3QgbG9jayBpdC4gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEs InR0b3BlbiB0dGxvY2sgZmFpbHMiLGZuYW0seHgpOworCSAgICBpZiAoeHggPT0gLTIpIHsJCS8q IElmIGxvY2tmaWxlIHNheXMgZGV2aWNlIGluIHVzZSwgKi8KKyNpZm5kZWYgTk9VVUNQCisJCWRl YnVnKEYxMTEsInR0b3BlbiByZWFkaW5nIGxvY2tmaWxlIHBpZCIsZmxmbmFtLHh4KTsKKwkJeHBp ZCA9IHR0cnBpZChmbGZuYW0pOwkvKiBUcnkgdG8gcmVhZCBwaWQgZnJvbSBsb2NrZmlsZSAqLwor CQlpZiAoeHBpZCA+IC0xKSB7CS8qIElmIHdlIGdvdCBhIHBpZCAqLworICAgICAgICAgICAgICAg ICAgICBpZiAoIXF1aWV0KQorCQkgICAgICBwcmludGYoIkxvY2tlZCBieSBwcm9jZXNzICVkXG4i LHhwaWQpOyAvKiB0ZWxsIHRoZW0uICovCisJCSAgICBja3N0cm5jcHkobG9ja3BpZCxja2l0b2Eo eHBpZCksMTYpOworCQkgICAgZGVidWcoRjExMCwidHRvcGVuIGxvY2twaWQiLGxvY2twaWQsMCk7 CisjaWZuZGVmIE5PUFVTSAorCQl9IGVsc2UgaWYgKGZsZm5hbVswXSAmJiAhbm9wdXNoKSB7CisJ CSAgICBleHRlcm4gY2hhciAqRElSQ01EOworCQkgICAgY2hhciAqcCA9IE5VTEw7CisJCSAgICBp bnQgeDsKKwkJICAgIHggPSAoaW50KXN0cmxlbihmbGZuYW0pICsgKGludClzdHJsZW4oRElSQ01E KSArIDI7CisJCSAgICBwID0gbWFsbG9jKHgpOwkvKiBQcmludCBhIGRpcmVjdG9yeSBsaXN0aW5n LiAqLworLyoKKyAgTm90ZTogcHJpdl9vbigpIHdvbid0IGhlbHAgaGVyZSwgYmVjYXVzZSB3ZSBk byBub3QgcGFzcyBwcml2cyBhbG9uZyB0bworICB0byBpbmZlcmlvciBwcm9jZXNzZXMsIGluIHRo aXMgY2FzZSBscy4gIFNvIGlmIHRoZSByZWFsIHVzZXIgZG9lcyBub3QgaGF2ZQorICBkaXJlY3Rv cnktbGlzdGluZyBhY2Nlc3MgdG8gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSwgdGhpcyB3aWxsIHJl c3VsdCBpbgorICBzb21ldGhpbmcgbGlrZSAibm90IGZvdW5kIi4gIFRoYXQncyB3aHkgd2UgdHJ5 IHRoaXMgb25seSBhcyBhIGxhc3QgcmVzb3J0LgorKi8KKwkJICAgIGlmIChwKSB7CQkvKiBJZiB3 ZSBnb3QgdGhlIHNwYWNlLi4uICovCisJCQlja21ha21zZyhwLHgsRElSQ01ELCIgIixmbGZuYW0s TlVMTCk7CisJCQl6c3lzY21kKHApOwkvKiBHZXQgbGlzdGluZy4gKi8KKwkJCWlmIChwKSB7CS8q IGZyZWUgdGhlIHNwYWNlICovCisJCQkgICAgZnJlZShwKTsKKwkJCSAgICBwID0gTlVMTDsKKwkJ CX0KKwkJICAgIH0KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKwkJfQorI2VuZGlmIC8qIE5PVVVDUCAq LworCQlyZXR1cm4oLTUpOwkJLyogQ29kZSBmb3IgZGV2aWNlIGluIHVzZSAqLworCSAgICB9IGVs c2UgcmV0dXJuKC0zKTsJCS8qIEFjY2VzcyBkZW5pZWQgKi8KKyAgICAgICAgfSBlbHNlIGxrZiA9 IDE7CisgICAgfQorICAgIC8qIEhhdmUgbG9jayAtLSBub3cgaXQncyBzYWZlIHRvIG9wZW4gdGhl IGRldmljZSAqLworCisgICAgZGVidWcoRjEwMSwidHRvcGVuIGxrZiIsIiIsbGtmKTsKKyAgICBk ZWJ1ZyhGMTAxLCJ0dG9wZW4gdGltbyIsIiIsdGltbyk7CisKKyAgICB0dG90bW8gPSAwOwkJCQkv KiBGbGFnIG5vIHRpbWVvdXQgKi8KKyAgICBpZiAodGltbyA+IDApIHsKKwlpbnQgeHg7CisJc2F2 YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBUaW1lZCwgc2V0IHVwIHRpbWVyLiAqLwor CXh4ID0gYWxhcm0odGltbyk7CQkvKiBUaW1lZCBvcGVuKCkgKi8KKwlkZWJ1ZyhGMTAxLCJ0dG9w ZW4gYWxhcm0iLCIiLHh4KTsKKwlpZiAoCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisJICAgIHNpZ3Nl dGptcChzamJ1ZiwxKQorI2Vsc2UKKwkgICAgc2V0am1wKHNqYnVmKQorI2VuZGlmIC8qIENLX1BP U0lYX1NJRyAqLworCSAgICApIHsKKwkgICAgdHRvdG1vID0gMTsJCQkvKiBGbGFnIHRpbWVvdXQu ICovCisJfSBlbHNlIHsKKwkgICAgdHR5ZmQgPSBkb19vcGVuKGZuYW0pOworCX0KKwl0dGltb2Zm KCk7CisJZGVidWcoRjExMSwidHRvcGVuIHRpbWVkIHR0eWZkIixmbmFtLHR0eWZkKTsKKyAgICB9 IGVsc2UgeworCWVycm5vID0gMDsKKwl0dHlmZCA9IGRvX29wZW4oZm5hbSk7CisJZGVidWcoRjEx MSwidHRvcGVuIHVudGltZWQgdHR5ZmQiLGZuYW0sdHR5ZmQpOworICAgIH0KKyAgICBpZiAodHR5 ZmQgPCAwKSB7CQkJLyogSWYgY291bGRuJ3Qgb3BlbiwgZmFpbC4gKi8KKwlkZWJ1ZyhGMTExLCJ0 dG9wZW4gZXJybm8iLGZuYW0sZXJybm8pOworCWRlYnVnKEYxMTEsInR0b3BlbiB4bG9jYWwiLCJD Iix4bG9jYWwpOworCWlmICh4bG9jYWwgPT0gMCkgeworCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4g c3Vic3RpdHV0aW5nIDAiLCIiLDApOworCSAgICB0dHlmZCA9IDA7CisJfSBlbHNlIHsKKwkgICAg aWYgKGVycm5vID4gMCAmJiAhcXVpZXQpIHsKKwkgICAgICAgIGRlYnVnKEYxMTEsInR0b3BlbiBw ZXJyb3IiLGZuYW0sZXJybm8pOworCQlwZXJyb3IoZm5hbSk7CQkvKiBQcmludCBtZXNzYWdlICov CisJICAgIH0KKwkgICAgaWYgKHR0dW5sY2soKSkgICAgICAgICAgICAgICAgICAvKiBSZWxlYXNl IHRoZSBsb2NrIGZpbGUgKi8KKwkgICAgICBmcHJpbnRmKHN0ZGVyciwiV2FybmluZywgcHJvYmxl bSByZWxlYXNpbmcgbG9ja1xyXG4iKTsKKwl9CisgICAgfQorCisgICAgaWYgKHR0eWZkIDwgMCkg ewkJCS8qIHR0eWZkIGlzIHN0aWxsIDwgMD8gKi8KKyNpZmRlZiBBVFQ3MzAwCisJaWYgKGF0dG1v ZGVtICYgRE9HRVRZKQkJLyogd2FzIGdldHR5KDFtKSBydW5uaW5nIGJlZm9yZSB1cz8gKi8KKwkg IG9uZ2V0dHkodHRubXN2KTsJCS8qIHllcywgcmVzdGFydCBvbiB0dHkgbGluZSAqLworCWF0dG1v ZGVtICY9IH5ET0dFVFk7CQkvKiBubyBwaG9uZSBpbiB1c2UsIGdldHR5IHJlc3RvcmVkICovCisj ZWxzZQorI2lmZGVmIEFDVUNOVFJMCisgICAgICAgIC8qIFNob3VsZCBwdXQgY2FsbCB0byBwcml2 X29uKCkgaGVyZSwgYnV0IHRoYXQgd291bGQgYmUgcmlza3khICovCisJYWN1Y250cmwoImVuYWJs ZSIsZm5hbSk7CS8qIGFjdWNudHJsKCkgcHJvZ3JhbS4gKi8KKwkvKiBhbmQgcHJpdl9vZmYoKSBo ZXJlLi4uICovCisjZW5kaWYgLyogQUNVTlRSTCAqLworI2VuZGlmIC8qIEFUVDczMDAgKi8KKwor CXNpZ25hbChTSUdJTlQsb2NjdCk7CQkvKiBQdXQgb2xkIEN0cmwtQyB0cmFwIGJhY2suICovCisJ aWYgKGVycm5vID09IEVBQ0NFUykgewkJLyogRGV2aWNlIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHVz ZXIgKi8KKwkgICAgZGVidWcoRjExMCwidHRvcGVuIEVBQ0NFU1MiLGZuYW0sMCk7IC8qIFJldHVy biAtNCAqLworCSAgICByZXR1cm4oLTQpOworCX0gZWxzZSByZXR1cm4odHRvdG1vID8gLTIgOiAt MSk7IC8qIE90aGVyd2lzZSAtMiBpZiB0aW1lb3V0LCBvciAtMSAqLworICAgIH0KKworLyogTWFr ZSBzdXJlIGl0J3MgYSByZWFsIHR0eS4gKi8KKworI2lmZGVmIFBsYW45CisgICAgLyogdGFrZSB0 aGlzIG9wcG9ydHVuaXR5IHRvIG9wZW4gdGhlIGNvbnRyb2wgY2hhbm5lbCAqLworICAgIGlmIChw OW9wZW50dHljdGwoZm5hbSkgPCAwKSAgICAgICAKKyNlbHNlCisgICAgICBpZiAoIXR0ZmRmbGcg JiYgIWlzYXR0eSh0dHlmZCkgJiYgc3RyY21wKGZuYW0sIi9kZXYvbnVsbCIpKQorI2VuZGlmIC8q IFBsYW45ICovCisJeworCSAgICBmcHJpbnRmKHN0ZGVyciwiJXMgaXMgbm90IGEgdGVybWluYWwg ZGV2aWNlXG4iLGZuYW0pOworCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gbm90IGEgdHR5IixmbmFt LGVycm5vKTsKKwkgICAgaWYgKHR0dW5sY2soKSkJCS8qIFJlbGVhc2UgdGhlIGxvY2sgZmlsZSAq LworCSAgICAgIGZwcmludGYoc3RkZXJyLCJXYXJuaW5nLCBwcm9ibGVtIHJlbGVhc2luZyBsb2Nr XHJcbiIpOworCSAgICBjbG9zZSh0dHlmZCk7CisJICAgIHR0eWZkID0gLTE7CisJICAgIHdhc2Ns b3NlZCA9IDE7CisJICAgIHNpZ25hbChTSUdJTlQsb2NjdCk7CisJICAgIHJldHVybigtMSk7CisJ fQorCisjaWZkZWYgYWVnaXMKKyAgICAvKgorICAgICAgQXBvbGxvIEMgcnVudGltZSBjbGFpbXMg dGhhdCBjb25zb2xlIHBhZHMgYXJlIHR0eSBkZXZpY2VzLCB3aGljaAorICAgICAgaXMgcmVhc29u YWJsZSwgYnV0IHRoZXkgYXJlbid0IGFueSBnb29kIGZvciBwYWNrZXQgdHJhbnNmZXIuCisgICAg Ki8KKyAgICBpb3NfJGlucV90eXBlX3VpZCgoc2hvcnQpdHR5ZmQsIHR0eXVpZCwgc3QpOworICAg IGlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgeworCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBn ZXR0aW5nIHR0eSBvYmplY3QgdHlwZTogIik7CisJZXJyb3JfJHByaW50KHN0KTsKKyAgICB9IGVs c2UgaWYgKHR0eXVpZCAhPSBzaW9fJHVpZCkgewkvKiBSZWplY3Qgbm9uLVNJTyBsaW5lcyAqLwor CWNsb3NlKHR0eWZkKTsgdHR5ZmQgPSAtMTsKKwl3YXNjbG9zZWQgPSAxOworCWVycm5vID0gRU5P VFRZOyBwZXJyb3IoZm5hbSk7CisJc2lnbmFsKFNJR0lOVCxvY2N0KTsKKwlyZXR1cm4oLTEpOwor ICAgIH0KKyNlbmRpZiAvKiBhZWdpcyAqLworCisgICAgc2lnaW50X2lnbiA9IChvY2N0ID09IFNJ R19JR04pID8gMSA6IDA7CisKKyAgICBja3N0cm5jcHkodHRubXN2LHR0bmFtZSxERVZOQU1MRU4p OwkvKiBLZWVwIGNvcHkgb2YgbmFtZSBsb2NhbGx5LiAqLworCisvKiBDYWxsZXIgd2FudHMgdXMg dG8gZmlndXJlIG91dCBpZiBsaW5lIGlzIGNvbnRyb2xsaW5nIHR0eSAqLworCisgICAgaWYgKCps Y2wgPCAwKSB7CisJY2hhciAqIHM7CisgICAgICAgIGlmIChzdHJjbXAoZm5hbSxDVFROQU0pID09 IDApIHsgLyogIi9kZXYvdHR5IiBhbHdheXMgcmVtb3RlICovCisgICAgICAgICAgICB4bG9jYWwg PSAwOworCSAgICBkZWJ1ZyhGMTExLCJ0dG9wZW4gZm5hbT1DVFROQU0iLGZuYW0seGxvY2FsKTsK KyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZm5hbSxjdHRuYW0pID09IDApIHsKKyAgICAgICAg ICAgIHhsb2NhbCA9IDA7CisJICAgIGRlYnVnKEYxMTEsInR0b3BlbiBmbmFtPWN0dG5hbSIsZm5h bSx4bG9jYWwpOworCX0gZWxzZSBpZiAoY3R0bmFtWzBdKSB7CisjaWZkZWYgQkVCT1hfRFI3Cisg ICAgICAgICAgICBzID0gdHRubXN2OwkJCS8qIHR0eW5hbWUoKSBpcyBicm9rZW4gKi8KKyNlbHNl CisgICAgICAgICAgICBzID0gdHR5bmFtZSh0dHlmZCk7ICAgICAgICAgLyogR2V0IHJlYWwgbmFt ZSBvZiB0dG5hbWUuICovCisjZW5kaWYgLyogQkVCT1hfRFI3ICovCisJICAgIGlmICghcykgcyA9 ICIiOworCSAgICBpZiAoKnMpCisJICAgICAgeGxvY2FsID0gKChzdHJuY21wKHMsY3R0bmFtLERF Vk5BTUxFTikgPT0gMCkgPyAwIDogMSk7CisJICAgIGVsc2UKKwkgICAgICB4bG9jYWwgPSAxOwor ICAgICAgICAgICAgZGVidWcoRjExMSwidHRvcGVuIHR0eW5hbWUodHR5ZmQpIHhsb2NhbCIscyx4 bG9jYWwpOworICAgICAgICB9CisgICAgfQorCisjaWZuZGVmIE5PRkRaRVJPCisvKiBOb3RlLCB0 aGUgZm9sbG93aW5nIGNvZGUgd2FzIGFkZGVkIHNvIHRoYXQgVW5peCAiaWRsZS1saW5lIiBzbm9v cGVycyAqLworLyogd291bGQgbm90IHRoaW5rIEtlcm1pdCB3YXMgaWRsZSB3aGVuIGl0IHdhcyB0 cmFuc2ZlcnJpbmcgZmlsZXMsIGFuZCAqLworLyogbWF5YmUgbG9nIHBlb3BsZSBvdXQuICovCisg ICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogUmVtb3RlIG1vZGUgKi8KKwlpZiAoZmRmbGFnID09 IDApIHsJCS8qIFN0YW5kYXJkIGkvbyBpcyBub3QgcmVkaXJlY3RlZCAqLworCSAgICBkZWJ1ZyhG MTAwLCJ0dG9wZW4gc2V0dGluZyB0dHlmZCA9IDAiLCIiLDApOworI2lmZGVmIExZTlhPUworCSAg ICAvKiBPbiBMeW54IE9TLCBmZCAwIGlzIG9wZW4gZm9yIHJlYWQgb25seS4gKi8KKwkgICAgZHVw Mih0dHlmZCwwKTsKKyNlbmRpZiAvKiBMWU5YT1MgKi8KKwkgICAgY2xvc2UodHR5ZmQpOwkJLyog VXNlIGZpbGUgZGVzY3JpcHRvciAwICovCisJICAgIHR0eWZkID0gMDsKKwl9IGVsc2UgewkJCS8q IFN0YW5kYXJkIGkvbyBpcyByZWRpcmVjdGVkICovCisJICAgIGRlYnVnKEYxMDEsInR0b3BlbiBz dGRpbyByZWRpcmVjdGVkIiwiIix0dHlmZCk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBOT0ZEWkVS TyAqLworI2VuZGlmIC8qIE9QRU5GSVJTVCAqLworCisvKiBHb3QgdGhlIGxpbmUsIG5vdyBzZXQg dGhlIGRlc2lyZWQgdmFsdWUgZm9yIGxvY2FsLiAqLworCisgICAgaWYgKCpsY2wgIT0gMCkgKmxj bCA9IHhsb2NhbDsKKworLyogU29tZSBzcGVjaWFsIHN0dWZmIGZvciB2Ny4uLiAqLworCisjaWZk ZWYgIFY3CisjaWZuZGVmIE1JTklYCisgICAgaWYgKGttZW1bVFRZXSA8IDApIHsJCS8qICBJZiBv cGVuLCB0aGVuIHNraXAgdGhpcy4gICovCisJcWFkZHJbVFRZXSA9IGluaXRyYXdxKHR0eWZkKTsg ICAvKiBJbml0IHRoZSBxdWV1ZS4gKi8KKwlpZiAoKGttZW1bVFRZXSA9IG9wZW4oIi9kZXYva21l bSIsIDApKSA8IDApIHsKKwkgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCByZWFkIC9kZXYva21l bSBpbiB0dG9wZW4uXG4iKTsKKwkgICAgcGVycm9yKCIvZGV2L2ttZW0iKTsKKwkgICAgZXhpdCgx KTsKKwl9CisgICAgfQorI2VuZGlmIC8qICFNSU5JWCAqLworI2VuZGlmIC8qIFY3ICovCisKKy8q IE5vIGZhaWx1cmUgcmV0dXJucyBhZnRlciB0aGlzIHBvaW50ICovCisKKyNpZmRlZiB1bHRyaXgK KyAgICBpb2N0bCh0dHlmZCwgVElPQ01PREVNLCAmdGVtcCk7CisjaWZkZWYgVElPQ1NJTlVTRQor ICAgIGlmICh4bG9jYWwgJiYgaW9jdGwodHR5ZmQsIFRJT0NTSU5VU0UsIE5VTEwpIDwgMCkgewor CWlmICghcXVpZXQpCisJICBwZXJyb3IoZm5hbSk7CisgICAgfQorI2VuZGlmIC8qIFRJT0NTSU5V U0UgKi8KKyNlbmRpZiAvKiB1bHRyaXggKi8KKworLyogR2V0IHR0eSBkZXZpY2Ugc2V0dGluZ3Mg ICovCisKKyNpZmRlZiBCU0Q0NE9SUE9TSVgJCQkvKiBQT1NJWCAqLworICAgIHRjZ2V0YXR0cih0 dHlmZCwmdHRvbGQpOworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0Y2dldGF0dHIgdHRvbGQuY19s ZmxhZyIsIiIsdHRvbGQuY19sZmxhZyk7CisgICAgdGNnZXRhdHRyKHR0eWZkLCZ0dHJhdyk7Cisg ICAgZGVidWcoRjEwMSwidHRvcGVuIHRjZ2V0YXR0ciB0dHJhdy5jX2xmbGFnIiwiIix0dHJhdy5j X2xmbGFnKTsKKyAgICB0Y2dldGF0dHIodHR5ZmQsJnR0dHZ0KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0 dG9wZW4gdGNnZXRhdHRyIHR0dHZ0LmNfbGZsYWciLCIiLHR0dHZ0LmNfbGZsYWcpOworI2Vsc2UJ CQkJCS8qIEJTRCwgVjcsIGFuZCBhbGwgb3RoZXJzICovCisjaWZkZWYgQVRUU1YJCQkJLyogQVQm VCBVTklYICovCisgICAgaW9jdGwodHR5ZmQsVENHRVRBLCZ0dG9sZCk7CisgICAgZGVidWcoRjEw MSwidHRvcGVuIGlvY3RsIFRDR0VUQSB0dG9sZC5jX2xmbGFnIiwiIix0dG9sZC5jX2xmbGFnKTsK KyAgICBpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0cmF3KTsKKyAgICBpb2N0bCh0dHlmZCxUQ0dFVEEs JnR0dHZ0KTsKKyNlbHNlCisjaWZkZWYgQkVMTFYxMAorICAgIGlvY3RsKHR0eWZkLFRJT0NHRVRQ LCZ0dG9sZCk7CisgICAgZGVidWcoRjEwMSwidHRvcGVuIEJFTExWMTAgdHRvbGQuc2dfZmxhZ3Mi LCIiLHR0b2xkLnNnX2ZsYWdzKTsKKyAgICBpb2N0bCh0dHlmZCxUSU9DR0RFViwmdGRvbGQpOwor ICAgIGRlYnVnKEYxMDEsInR0b3BlbiBCRUxMVjEwIHRkb2xkLmZsYWdzIiwiIix0ZG9sZC5mbGFn cyk7CisjZWxzZQorICAgIGd0dHkodHR5ZmQsJnR0b2xkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dG9w ZW4gZ3R0eSB0dG9sZC5zZ19mbGFncyIsIiIsdHRvbGQuc2dfZmxhZ3MpOworI2VuZGlmIC8qIEJF TExWMTAgKi8KKworI2lmZGVmIHNvbnlfbmV3cwkJCS8qIFNvbnkgTkVXUyAqLworICAgIGlmIChp b2N0bCh0dHlmZCxUSU9DS0dFVCwma21fZXh0KSA8IDApIHsgLyogR2V0IGNvbnNvbGUgS2Fuamkg bW9kZSAqLworCXBlcnJvcigidHRvcGVuIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIpOworCWRl YnVnKEYxMDEsInR0b3BlbiBlcnJvciBnZXR0aW5nIEthbmppIG1vZGUiLCIiLDApOworCWttX2V4 dCA9IC0xOwkJCS8qIE1ha2Ugc3VyZSB0aGlzIHN0YXlzIHVuZGVmaW5lZC4gKi8KKyAgICB9Cisj ZW5kaWYgLyogc29ueV9uZXdzICovCisKKyNpZmRlZiBUSU9DR0VUQworICAgIGRlYnVnKEYxMDAs InR0b3BlbiBUSU9DR0VUQyIsIiIsMCk7CisgICAgdGNoYXJmID0gMDsJCQkJLyogSW4gcmVtb3Rl IG1vZGUsIGFsc28gZ2V0ICovCisgICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogc3BlY2lhbCBj aGFyYWN0ZXJzICovCisJaWYgKGlvY3RsKHR0eWZkLFRJT0NHRVRDLCZ0Y2hvbGQpIDwgMCkgewor CSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0dFVEMgZmFpbGVkIiwiIiwwKTsKKwl9IGVsc2Ug eworCSAgICB0Y2hhcmYgPSAxOwkJCS8qIEl0IHdvcmtlZC4gKi8KKwkgICAgaW9jdGwodHR5ZmQs VElPQ0dFVEMsJnRjaG5vaSk7IC8qIEdldCBhbm90aGVyIGNvcHkgKi8KKwkgICAgZGVidWcoRjEw MCwidHRvcGVuIFRJT0NHRVRDIG9rIiwiIiwwKTsKKwl9CisgICAgfQorI2Vsc2UKKyAgICBkZWJ1 ZyhGMTAwLCJ0dG9wZW4gVElPQ0dFVEMgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFRJ T0NHRVRDICovCisKKyNpZmRlZiBUSU9DR0xUQworICAgIGRlYnVnKEYxMDAsInR0b3BlbiBUSU9D R0xUQyIsIiIsMCk7CisgICAgbHRjaGFyZiA9IDA7CQkJLyogSW4gcmVtb3RlIG1vZGUsIGFsc28g Z2V0ICovCisgICAgaWYgKHhsb2NhbCA9PSAwKSB7CQkJLyogbG9jYWwgc3BlY2lhbCBjaGFyYWN0 ZXJzICovCisJaWYgKGlvY3RsKHR0eWZkLFRJT0NHTFRDLCZsdGNob2xkKSA8IDApIHsKKwkgICAg ZGVidWcoRjEwMCwidHRvcGVuIFRJT0NHTFRDIGZhaWxlZCIsIiIsMCk7CisJfSBlbHNlIHsKKwkg ICAgbHRjaGFyZiA9IDE7CQkvKiBJdCB3b3JrZWQuICovCisJICAgIGlvY3RsKHR0eWZkLFRJT0NH TFRDLCZsdGNobm9pKTsgLyogR2V0IGFub3RoZXIgY29weSAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0 dG9wZW4gVElPQ0dMVEMgb2siLCIiLDApOworCX0KKyAgICB9CisjZWxzZQorICAgIGRlYnVnKEYx MDAsInR0b3BlbiBUSU9DR0xUQyBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogVElPQ0dM VEMgKi8KKworI2lmZGVmIFRJT0NMR0VUCisgICAgZGVidWcoRjEwMCwidHRvcGVuIFRJT0NMR0VU IiwiIiwwKTsKKyAgICBsbW9kZWYgPSAwOworICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DTEdFVCwm bG1vZGUpIDwgMCkgeworCWRlYnVnKEYxMDAsInR0b3BlbiBUSU9DTEdFVCBmYWlsZWQiLCIiLDAp OworICAgIH0gZWxzZSB7CisJbG1vZGVmID0gMTsKKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gVElPQ0xH RVQgb2siLCIiLDApOworICAgIH0KKyNlbmRpZiAvKiBUSU9DTEdFVCAqLworCisjaWZkZWYgQkVM TFYxMAorICAgIGlvY3RsKHR0eWZkLFRJT0NHRVRQLCZ0dHJhdyk7CisgICAgaW9jdGwodHR5ZmQs VElPQ0dFVFAsJnR0dHZ0KTsKKyNlbHNlCisgICAgZ3R0eSh0dHlmZCwmdHRyYXcpOyAgICAgICAg ICAgICAgICAgLyogQW5kIGEgY29weSBvZiBpdCBmb3IgcGFja2V0cyovCisgICAgZ3R0eSh0dHlm ZCwmdHR0dnQpOyAgICAgICAgICAgICAgICAgLyogQW5kIG9uZSBmb3IgdmlydHVhbCB0dHkgc2Vy dmljZSAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKworI2VuZGlmIC8qIEFUVFNWICovCisjZW5k aWYgLyogQlNENDRPUlBPU0lYICovCisKKy8qIFNlY3Rpb24gZm9yIGNoYW5naW5nIGxpbmUgZGlz Y2lwbGluZS4gIEl0J3MgcmVzdG9yZWQgaW4gdHRyZXMoKS4gKi8KKworI2lmZGVmIEFJWFJTCisj aWZuZGVmIEFJWDQxCisgICAgeyB1bmlvbiB0eG5hbWUgbGRfbmFtZTsgaW50IGxkX2lkeCA9IDA7 CisgICAgICB0dGxkID0gMDsKKyAgICAgICAgZG8geworICAJICBsZF9uYW1lLnR4X3doaWNoID0g bGRfaWR4Kys7CisgIAkgIGlvY3RsKHR0eWZkLCBUWEdFVENELCAmbGRfbmFtZSk7CisJICBpZiAo IXN0cm5jbXAobGRfbmFtZS50eF9uYW1lLCAicnRzIiwgMykpCisgIAkgICAgdHRsZCB8PSAxOwor ICAgICAgICB9IHdoaWxlICgqbGRfbmFtZS50eF9uYW1lKTsKKyAgICAgICAgZGVidWcoRjEwMSwi QUlYIGxpbmUgZGlzY2lwbGluZSIsIiIsdHRsZCk7CisgICAgICB9CisjZW5kaWYgLyogQUlYNDEg Ki8KKyNlbmRpZiAvKiBBSVhSUyAqLworCisjaWZkZWYgQlNENDEKKy8qIEZvciA0LjFCU0Qgb25s eSwgZm9yY2UgIm9sZCIgdHR5IGRyaXZlciwgbmV3IG9uZSBib3RjaGVzIFRBTkRFTS4gKi8KKyAg ICB7IGludCBrOworICAgICAgaW9jdGwodHR5ZmQsIFRJT0NHRVRELCAmdHRsZCk7CS8qIEdldCBh bmQgc2F2ZSBsaW5lIGRpc2NpcGxpbmUgKi8KKyAgICAgIGRlYnVnKEYxMDEsIjQuMWJzZCBsaW5l IGRpc2NpcGxpbmUiLCIiLHR0bGQpOworICAgICAgayA9IE9UVFlESVNDOwkJCS8qIFN3aXRjaCB0 byAib2xkIiBkaXNjaXBsaW5lICovCisgICAgICBrID0gaW9jdGwodHR5ZmQsIFRJT0NTRVRELCAm ayk7CisgICAgICBkZWJ1ZyhGMTAxLCI0LjFic2QgdGlvY3NldGQiLCIiLGspOworICAgIH0KKyNl bmRpZiAvKiBCU0Q0MSAqLworCisjaWZkZWYgYWVnaXMKKyAgICAvKiBUaGlzIHdhcyBwcmV2aW91 c2x5IGRvbmUgYmVmb3JlIHRoZSBsYXN0IHR3byBUQ0dFVEEgb3IgZ3R0eSBhYm92ZSwKKyAgICAg KiBpbiBib3RoIHRoZSBBVFRTViBhbmQgbm90LUFUVFNWIGNhc2UuICBJZiBpdCBpcyBub3Qgb2th eSB0byBoYXZlIG9ubHkKKyAgICAgKiBvbmUgY29weSBpZiBpdCBoZXJlIGluc3RlYWQsIGdpdmUg dXMgYSBzaG91dCEKKyAgICAgKi8KKyAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0eWZkLCBzaW9f JHJhd19ubCwgZmFsc2UsIHN0KTsKKyAgICBpZiAoeGxvY2FsKSB7ICAgICAgIC8qIGlnbm9yZSBi cmVha3MgZnJvbSBsb2NhbCBsaW5lICovCisgICAgICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5 ZmQsIHNpb18kaW50X2VuYWJsZSwgZmFsc2UsIHN0KTsKKyAgICAgICAgc2lvXyRjb250cm9sKChz aG9ydCl0dHlmZCwgc2lvXyRxdWl0X2VuYWJsZSwgZmFsc2UsIHN0KTsKKyAgICB9CisjZW5kaWYg LyogYWVnaXMgKi8KKworI2lmZGVmIFZYVkUKKyAgICB0dHJhdy5jX2xpbmUgPSAwOyAgICAgICAg ICAgICAgICAgICAvKiBTVFRZIGxpbmUgMCBmb3IgVlgvVkUgKi8KKyAgICB0dHR2dC5jX2xpbmUg PSAwOyAgICAgICAgICAgICAgICAgICAvKiBTVFRZIGxpbmUgMCBmb3IgVlgvVkUgKi8KKyAgICBp b2N0bCh0dHlmZCxUQ1NFVEEsJnR0cmF3KTsKKyNlbmRpZiAvKiB2eHZlICovCisKKy8qIElmIE9f TkRFTEFZIHdhcyB1c2VkIGR1cmluZyBvcGVuKCksIHRoZW4gcmVtb3ZlIGl0IG5vdy4gKi8KKwor I2lmZGVmIE9fTkRFTEFZCisgICAgZGVidWcoRjEwMCwidHRvcGVuIE9fTkRFTEFZIiwiIiwwKTsK KyAgICBpZiAoeGxvY2FsID4gMCkgeworICAgICAgaWYgKGZjbnRsKHR0eWZkLCBGX0dFVEZMLCAw KSAmIE9fTkRFTEFZKSB7CisJZGVidWcoRjEwMCwidHRvcGVuIGZjbnRsIE9fTkRFTEFZIiwiIiww KTsKKyNpZm5kZWYgYWVnaXMKKwlpZiAoZmNudGwodHR5ZmQsRl9TRVRGTCwgZmNudGwodHR5ZmQs IEZfR0VURkwsIDApICYgfk9fTkRFTEFZKSA8IDApIHsKKwkgICAgZGVidWcoRjEwMCwidHRvcGVu IGZjbnRsIGZhaWx1cmUgdG8gdW5zZXQgT19OREVMQVkiLCIiLDApOworCSAgICBwZXJyb3IoIkNh bid0IHVuc2V0IE9fTkRFTEFZIik7CisJfQorI2VuZGlmIC8qIGFlZ2lzICovCisJLyogU29tZSBz eXN0ZW1zLCBub3RhYmx5IFhlbml4IChkb24ndCBrbm93IGhvdyBjb21tb24gdGhpcyBpcyBpbgor CSAqIG90aGVyIHN5c3RlbXMpLCBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IHRvIGdldCByaWQgb2Yg dGhlIE9fTkRFTEFZCisJICogYmVoYXZpb3VyIG9uIHJlYWQoKSB3aXRoIHJlc3BlY3QgdG8gY2Fy cmllciBwcmVzZW5jZSAoaS5lLiByZWFkKCkKKwkgKiByZXR1cm5pbmcgMCB3aGVuIGNhcnJpZXIg YWJzZW50KSwgZXZlbiB0aG91Z2ggdGhlIGFib3ZlIGZjbnRsKCkKKwkgKiBpcyBlbm91Z2ggdG8g bWFrZSByZWFkKCkgd2FpdCBmb3IgaW5wdXQgd2hlbiBjYXJyaWVyIGlzIHByZXNlbnQuCisJICog VGhpcyBtYWdpYywgaW4gdHVybiwgcmVxdWlyZXMgQ0xPQ0FMIGZvciB3b3JraW5nIHdoZW4gdGhl IGNhcnJpZXIKKwkgKiBpcyBhYnNlbnQuIEJ1dCBpZiB4bG9jYWwgPT0gMCwgcHJlc3VtYWJseSB5 b3UgYWxyZWFkeSBoYXZlIENMT0NBTAorCSAqIG9yIHlvdSBoYXZlIGEgY2Fycmllciwgb3RoZXJ3 aXNlIHlvdSB3b3VsZG4ndCBiZSBydW5uaW5nIHRoaXMuCisJICovCisJZGVidWcoRjEwMSwidHRv cGVuIHhsb2NhbCIsIiIseGxvY2FsKTsKKyNpZmRlZiBBVFRTVgorI2lmZGVmIEJTRDQ0T1JQT1NJ WAorI2lmZGVmIENPTU1FTlQJCQkJLyogMTIgQXVnIDE5OTcgKi8KKyNpZmRlZiBfX2JzZGlfXwor CWlmICh4bG9jYWwpCisJICB0dHJhdy5jX2NmbGFnIHw9IENMT0NBTDsKKyNlbHNlCisjaWZkZWYg X19GcmVlQlNEX18KKwlpZiAoeGxvY2FsKQorCSAgdHRyYXcuY19jZmxhZyB8PSBDTE9DQUw7Cisj ZW5kaWYgLyogX19GcmVlQlNEX18gKi8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLworI2Vsc2UgLyog Tm90IENPTU1FTlQgKi8KKyNpZmRlZiBDTE9DQUwKKwlpZiAoeGxvY2FsKQkJCS8qIFVuc2V0IHRo aXMgaWYgaXQncyBkZWZpbmVkLiAqLworCSAgdHRyYXcuY19jZmxhZyB8PSBDTE9DQUw7CisjZW5k aWYgLyogQ0xPQ0FMICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCWRlYnVnKEYxMDEsInR0b3Bl biBCU0Q0NE9SUE9TSVggY2FsbGluZyB0Y3NldGF0dHIiLCIiLFRDU0FEUkFJTik7CisJaWYgKHRj c2V0YXR0cih0dHlmZCwgVENTQURSQUlOLCAmdHRyYXcpIDwgMCkgeworCSAgICBkZWJ1ZyhGMTAw LCJ0dG9wZW4gUE9TSVggdGNzZWF0dHIgZmFpbHMiLCIiLDApOworCSAgICBwZXJyb3IoInRjc2V0 YXR0ciIpOworCX0KKyNlbHNlIC8qICFCU0Q0NE9SUE9TSVggKi8KKwlpZiAoeGxvY2FsKSB7CisJ ICAgIHR0cmF3LmNfY2ZsYWcgfD0gQ0xPQ0FMOworCSAgICBkZWJ1ZyhGMTAwLCJ0dG9wZW4gY2Fs bGluZyBpb2N0bChUQ1NFVEEpIiwiIiwwKTsKKwkgICAgZXJybm8gPSAwOworCSAgICBpZiAoaW9j dGwodHR5ZmQsIFRDU0VUQSwgJnR0cmF3KSA8IDApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJ0dG9wZW4gaW9jdGwoVENTRVRBKSBmYWlscyIsIiIsZXJybm8pOworICAgICAgICAgICAg ICAgIHBlcnJvcigiaW9jdGwoVENTRVRBKSIpOworICAgICAgICAgICAgfQorCX0KKyNlbmRpZiAv KiBCU0Q0NE9SUE9TSVggKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2lmbmRlZiBOT0NPVEZNQyAv KiA9IE5PIENsb3NlKE9wZW4oKSkgVG8gRm9yY2UgTW9kZSBDaGFuZ2UgKi8KKy8qIFJlcG9ydGVk bHkgbGV0cyB1dWdldHR5IGdyYWIgdGhlIGRldmljZSBpbiBTQ08gVU5JWCAzLjIgLyBYRU5JWCAy LjMgKi8KKwlkZWJ1ZyhGMTAwLCJ0dG9wZW4gZXhlY3V0aW5nIGNsb3NlL29wZW4iLCIiLDApOwor CWNsb3NlKCBwcml2X29wbihmbmFtLCBPX1JEV1IpICk7IC8qIE1hZ2ljIHRvIGZvcmNlIGNoYW5n ZS4gKi8KKyNlbmRpZiAvKiBOT0NPVEZNQyAqLworICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBP X05ERUxBWSAqLworCisvKiBJbnN0cnVjdCB0aGUgc3lzdGVtIGhvdyB0byB0cmVhdCB0aGUgY2Fy cmllciwgYW5kIHNldCBhIGZldyBvdGhlciB0dHkKKyAqIHBhcmFtZXRlcnMuCisgKgorICogVGhp cyBhbHNvIHVuZG9lcyB0aGUgdGVtcG9yYXJ5IHNldHRpbmcgb2YgQ0xPQ0FMIHRoYXQgbWF5IGhh dmUgYmVlbiBkb25lCisgKiBmb3IgdGhlIGNsb3NlKG9wZW4oKSkgYWJvdmUgKGV4Y2VwdCBpbiBY ZW5peCkuICBBbHNvIHRocm93IGluIH5FQ0hPLCB0bworICogcHJldmVudCB0aGUgb3RoZXIgZW5k IG9mIHRoZSBsaW5lIGZyb20gc2l0dGluZyB0aGVyZSB0YWxraW5nIHRvIGl0c2VsZiwKKyAqIHBy b2R1Y2luZyBnYXJiYWdlIHdoZW4gdGhlIHVzZXIgcGVyZm9ybXMgYSBjb25uZWN0LgorICoKKyAq IFNDTyBYZW5peCB1bmZvcnR1bmF0ZWx5IHNlZW1zIHRvIGlnbm9yZSB0aGUgYWN0dWFsIHN0YXRl IG9mIENMT0NBTC4KKyAqIE5vdyBpdCB0aGlua3MgQ0xPQ0FMIGlzIGFsd2F5cyBvbi4gSXQgc2Vl bXMgdGhlIG9ubHkgcmVhbCBzb2x1dGlvbiBmb3IKKyAqIFhlbml4IGlzIHRvIHN3aXRjaCBiZXR3 ZWVuIHRoZSBsb3dlciBhbmQgdXBwZXIgY2FzZSBkZXZpY2UgbmFtZXMuCisgKgorICogVGhpcyBz ZWN0aW9uIG1heSBhdCBzb21lIGZ1dHVyZSB0aW1lIGV4cGFuZCBpbnRvIHNldHRpbmcgYSBjb21w bGV0ZQorICogY29sbGVjdGlvbiBvZiB0dHkgcGFyYW1ldGVycywgb3IgY2FsbCBhIGZ1bmN0aW9u IHNoYXJlZCB3aXRoIHR0cGt0KCkvCisgKiB0dHZ0KCkgdGhhdCBkb2VzIHNvLiAgT24gdGhlIG90 aGVyIGhhbmQsIHRoZSBpbml0aWFsIHBhcmFtZXRlcnMgYXJlIG5vdAorICogdGhhdCBpbXBvcnRh bnQsIHNpbmNlIHR0cGt0KCkgb3IgdHR2dCgpIHNob3VsZCBhbHdheXMgZml4IHRoYXQgYmVmb3Jl CisgKiBhbnkgY29tbXVuaWNhdGlvbiBpcyBkb25lLiAgV2VsbCwgd2UnbGwgc2VlLi4uCisgKi8K KyAgICBpZiAoeGxvY2FsKSB7CisgICAgCWN1cmNhcnIgPSAtMjsKKwlkZWJ1ZyhGMTAwLCJ0dG9w ZW4gY2FsbGluZyBjYXJyY3RsIiwiIiwwKTsKKwljYXJyY3RsKCZ0dHJhdywgdHRjYXJyID09IENB Ul9PTik7CisJZGVidWcoRjEwMCwidHRvcGVuIGNhcnJjdGwgb2siLCIiLDApOworCisjaWZkZWYg Q09IRVJFTlQKKyNkZWZpbmUgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworI2lm ZGVmIFNWT1JQT1NJWAorCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE87CisJdHRvbGQuY19sZmxhZyAm PSB+RUNITzsKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKwl5ID0gdGNzZXRhdHRyKHR0eWZkLCBUQ1NB RFJBSU4sICZ0dHJhdyk7CisJZGVidWcoRjEwMSwidHRvcGVuIHRjc2V0YXR0ciIsIiIseSk7Cisj ZWxzZQorCXkgPSBpb2N0bCh0dHlmZCwgVENTRVRBLCAmdHRyYXcpOworCWRlYnVnKEYxMDAsInR0 b3BlbiBpb2N0bCIsIiIseSk7CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisKKyNlbHNlIC8q IEJTRCwgZXRjICovCisJdHRyYXcuc2dfZmxhZ3MgJj0gfkVDSE87CisJdHRvbGQuc2dfZmxhZ3Mg Jj0gfkVDSE87CisjaWZkZWYgQkVMTFYxMAorCXkgPSBpb2N0bCh0dHlmZCxUSU9DU0VUUCwmdHRy YXcpOworCWRlYnVnKEYxMDAsInR0b3BlbiBpb2N0bCIsIiIseSk7CisjZWxzZQorCXkgPSBzdHR5 KHR0eWZkLCZ0dHJhdyk7CisJZGVidWcoRjEwMCwidHRvcGVuIHN0dHkiLCIiLHkpOworI2VuZGlm IC8qIEJFTExWMTAgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKworI2lmZGVmIENPSEVSRU5U CisjdW5kZWYgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKworCS8qIHR0Zmx1aSgp OyAqLyAgLyogIFRoaXMgZmFpbHMgZm9yIHNvbWUgcmVhc29uLiAgKi8KKyAgICB9CisKKyAgICAv KiBHZXQgY3VycmVudCBzcGVlZCAqLworCisjaWZuZGVmIEJFQk9YCisgICAgdHRzcGVlZCA9IHR0 Z3NwZCgpOworI2Vsc2UKKyAgICB0dHNwZWVkID0gMTkyMDA7CisjZW5kaWYgLyogIUJFQk9YICov CisgICAgZGVidWcoRjEwMSwidHRvcGVuIHR0c3BlZWQiLCIiLHR0c3BlZWQpOworCisgICAgLyog RG9uZSwgbWFrZSBlbnRyaWVzIGluIGRlYnVnIGxvZywgcmVzdG9yZSBDdHJsLUMgdHJhcCwgYW5k IHJldHVybi4gKi8KKworICAgIGRlYnVnKEYxMDEsInR0b3BlbiB0dHlmZCIsIiIsdHR5ZmQpOwor ICAgIGRlYnVnKEYxMDEsInR0b3BlbiAqbGNsIiwiIiwqbGNsKTsKKyAgICBkZWJ1ZyhGMTExLCJ0 dG9wZW4gbG9jayBmaWxlIixmbGZuYW0sbGtmKTsKKyAgICBzaWduYWwoU0lHSU5ULG9jY3QpOwor ICAgIHNpZ2ludF9pZ24gPSAob2NjdCA9PSBTSUdfSUdOKSA/IDEgOiAwOworICAgIGdvdHNpZ3Mg PSAwOworICAgIHJldHVybigwKTsKK30KKworCisvKiAgRCBPIF8gTyBQIEUgTiAgLS0gIERvIHRo ZSByaWdodCBraW5kIG9mIG9wZW4oKSBjYWxsIGZvciB0aGUgdHR5LiAqLworCitpbnQKK2RvX29w ZW4odHRuYW1lKSBjaGFyICp0dG5hbWU7IHsKKyAgICBpbnQgZmxhZ3M7CisKKyNpZmRlZiBRTlg2 CisgICAgLyogT19OT05CTE9DSyBvbiAvZGV2L3R0eSBtYWtlcyBvcGVuKCkgZmFpbCAqLworICAg IHJldHVybihwcml2X29wbih0dG5hbWUsIE9fUkRXUiB8CisJCSAgICAoCisJCSAgICAgKChpbnQp c3RyY21wKHR0bmFtZSwiL2Rldi90dHkiKSA9PSAwKSA/CisJCSAgICAgMCA6CisJCSAgICAgKHR0 Y2FyciAhPSBDQVJfT04pID8gT19OT05CTE9DSyA6IDApCisJCSAgICApCisJICAgKTsgCisjZWxz ZSAgLyogIVFOWDYgKi8KKworI2lmbmRlZglPX05ERUxBWQkJCS8qIE9fTkRFTEFZIG5vdCBkZWZp bmVkICovCisgICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwyKSk7CisjZWxzZQkJCQkJLyogT19O REVMQVkgZGVmaW5lZCAqLworCisjaWZkZWYgQVRUNzMwMAorLyoKKyBPcGVuIGNvbW1zIGxpbmUg d2l0aG91dCB3YWl0aW5nIGZvciBjYXJyaWVyIHNvIGluaXRpYWwgY2FsbCBkb2VzIG5vdCBoYW5n CisgYmVjYXVzZSBzdGF0ZSBvZiAibW9kZW0iIGlzIGxpa2VseSB1bmtub3duIGF0IHRoZSBpbml0 aWFsIGNhbGwgIC1qcmQuCisgSWYgdGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBnZXR0eSBzdHVmZiB0 byB3b3JrLCBhbmQgdGhlIG9wZW4gd291bGQgbm90IHdvcmsKKyB3aXRob3V0IE9fTkRFTEFZIHdo ZW4gZ2V0dHkgaXMgc3RpbGwgb24sIHRoZW4gdGhpcyBzcGVjaWFsIGNhc2UgaXMgb2suCisgT3Ro ZXJ3aXNlLCBnZXQgcmlkIG9mIGl0LiAtc2tlCisqLworICAgIHJldHVybihwcml2X29wbih0dG5h bWUsIE9fUkRXUiB8IE9fTkRFTEFZKSk7CisKKyNlbHNlCS8qICFBVFQ3MzAwICovCisKKyAgICAv KiBOb3JtYWwgY2FzZS4gVXNlIE9fTkRFTEFZIGFjY29yZGluZyB0byBTRVQgQ0FSUklFUi4gU2Vl IHR0c2NhcnIoKS4gKi8KKyAgICBmbGFncyA9IE9fUkRXUjsKKyAgICBkZWJ1ZyhGMTAxLCJkb19v cGVuIHhsb2NhbCIsIiIseGxvY2FsKTsKKyAgICBkZWJ1ZyhGMTExLCJkb19vcGVuIGZsYWdzIEEi LHR0bmFtZSxmbGFncyk7CisgICAgaWYgKHhsb2NhbCAmJiAodHRjYXJyICE9IENBUl9PTikpCisg ICAgICBmbGFncyB8PSBPX05ERUxBWTsKKyAgICBkZWJ1ZyhGMTExLCJkb19vcGVuIGZsYWdzIEIi LHR0bmFtZSxmbGFncyk7CisgICAgcmV0dXJuKHByaXZfb3BuKHR0bmFtZSwgZmxhZ3MpKTsKKyNl bmRpZiAvKiAhQVRUNzMwMCAqLworI2VuZGlmIC8qIE9fTkRFTEFZICovCisjZW5kaWYgLyogUU5Y NiAqLworfQorCisvKiAgVCBUIEMgTCBPIFMgIC0tICBDbG9zZSB0aGUgVFRZLCByZWxlYXNpbmcg YW55IGxvY2suICAqLworCitzdGF0aWMgaW50IHR0Y19zdGF0ZSA9IDA7CQkvKiB0dGNsb3NlKCkg c3RhdGUgKi8KK3N0YXRpYyBjaGFyICogdHRjX25hbVtdID0geyAic2V0dXAiLCAiaGFuZ3VwIiwg InJlc2V0IiwgImNsb3NlIiB9OworCitpbnQKK3R0Y2xvcyhmb28pIGludCBmb287IHsJCQkvKiBB cmcgcmVxJ2QgZm9yIHNpZ25hbCgpIHByb3RvdHlwZSAqLworICAgIGludCB4eCwgeCA9IDA7Cisg ICAgZXh0ZXJuIGludCBleGl0aGFuZ3VwOworCisgICAgZGVidWcoRjEwMSwidHRjbG9zIHR0eWZk IiwiIix0dHlmZCk7CisgICAgZGVidWcoRjEwMSwidHRjbG9zIG5ldGNvbm4iLCIiLG5ldGNvbm4p OworICAgIGRlYnVnKEYxMDEsInR0Y2xvcyB4bG9jYWwiLCIiLHhsb2NhbCk7CisjaWZkZWYgTk9G RFpFUk8KKyAgICBkZWJ1ZyhGMTAwLCJ0dGNsb3MgTk9GRFpFUk8iLCIiLDApOworI2VuZGlmIC8q IE5PRkRaRVJPICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgVFRMRUJVRgorICAgIGxlX2lu aXQoKTsJCQkJLyogTm8gbmVlZCBmb3IgYW55IG9mIHRoaXMgKi8KKyNlbmRpZiAvKiBUVExFQlVG ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgaWYgKHR0eWZkIDwgMCkJCQkvKiBXYXNu J3Qgb3Blbi4gKi8KKyAgICAgIHJldHVybigwKTsKKworICAgIGlmICh0dGZkZmxnKQkJCS8qIElm IHdlIGluaGVyaXRlZCB0dHlmZCBmcm9tICovCisgICAgICByZXR1cm4oMCk7CQkJLyogYW5vdGhl ciBwcm9jZXNzLCBkb24ndCBjbG9zZSBpdC4gKi8KKworICAgIHR2dGZsZyA9IDA7CQkJCS8qIChz b21lIGRheSBnZXQgcmlkIG9mIHRoaXMuLi4pICovCisgICAgZ290c2lncyA9IDA7CisKKyNpZmRl ZiBJS1NECisgICAgaWYgKGluc2VydmVyKSB7CisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgdG5f cHVzaCgpOyAgICAgICAgICAgICAgICAgICAgLyogUGxhY2UgYW55IHdhaXRpbmcgZGF0YSBpbnRv IGlucHV0Ki8KKyAgICAgICAgICB0bl9zb3B0KERPLFRFTE9QVF9MT0dPVVQpOyAgICAvKiBTZW5k IExPR09VVCBvcHRpb24gYmVmb3JlIGNsb3NlICovCisgICAgICAgICAgVEVMT1BUX1VOQU5TV0VS RURfRE8oVEVMT1BUX0xPR09VVCkgPSAxOworICAgICAgICAgIHRuX3Jlc2V0KCk7ICAgICAgICAg ICAgICAgICAgIC8qIFRoZSBSZXNldCBUZWxuZXQgT3B0aW9uIHRhYmxlLiAgKi8KKyNlbmRpZiAv KiBUTkNPREUgKi8KKyNpZmRlZiBDS19TU0wKKwkgIGlmIChzc2xfYWN0aXZlX2ZsYWcpIHsKKwkg ICAgICBpZiAoc3NsX2RlYnVnX2ZsYWcpCisJCUJJT19wcmludGYoYmlvX2VyciwiY2FsbGluZyBT U0xfc2h1dGRvd24oc3NsKVxuIik7CisJICAgICAgU1NMX3NodXRkb3duKHNzbF9jb24pOworCSAg ICAgIFNTTF9mcmVlKHNzbF9jb24pOworCSAgICAgIHNzbF9jb24gPSBOVUxMOworCSAgICAgIHNz bF9hY3RpdmVfZmxhZyA9IDA7CisJICB9CisJICBpZiAodGxzX2FjdGl2ZV9mbGFnKSB7CisJICAg ICAgaWYgKHNzbF9kZWJ1Z19mbGFnKQorCQlCSU9fcHJpbnRmKGJpb19lcnIsImNhbGxpbmcgU1NM X3NodXRkb3duKHRscylcbiIpOworCSAgICAgIFNTTF9zaHV0ZG93bih0bHNfY29uKTsKKwkgICAg ICBTU0xfZnJlZSh0bHNfY29uKTsKKwkgICAgICB0bHNfY29uID0gTlVMTDsKKwkgICAgICB0bHNf YWN0aXZlX2ZsYWcgPSAwOworCSAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgIH0KKyNlbmRp ZiAvKiBJS1NEICovCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgewkJCS8qIFdlJ3Zl IGJlZW4gdXNpbmcgYSBwaXBlICovCisJLyogdHRwaXBlID0gMDsgKi8KKwlpZiAodHRwaWQgPiAw KSB7CisJICAgIGludCB3c3RhdDsKKwkgICAgaW50IHN0YXR1c3A7CisJICAgIGNsb3NlKGZkaW4p OwkJLyogQ2xvc2UgdGhlc2UuICovCisJICAgIGNsb3NlKGZkb3V0KTsKKwkgICAgZmRpbiA9IGZk b3V0ID0gLTE7CisJICAgIGtpbGwodHRwaWQsMSk7CQkvKiBLaWxsIGZvcmsgd2l0aCBTSUdIVVAg Ki8KKwkgICAgd2hpbGUgKDEpIHsKKwkJd3N0YXQgPSB3YWl0KCZzdGF0dXNwKTsKKwkJaWYgKHdz dGF0ID09IHR0cGlkIHx8IHdzdGF0ID09IC0xKQorCQkgIGJyZWFrOworCQlwZXhpdHN0YXQgPSAo c3RhdHVzcCAmIDB4ZmYpID8gc3RhdHVzcCA6IHN0YXR1c3AgPj4gODsKKwkgICAgfQorCSAgICB0 dHBpZCA9IDA7CisJfQorCW5ldGNvbm4gPSAwOworCXdhc2Nsb3NlZCA9IDE7CisJdHR5ZmQgPSAt MTsKKwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBU WQorICAgIGlmICh0dHB0eSkgeworI2lmbmRlZiBOT0RPUFRZCisgICAgICAgIGVuZF9wdHkoKTsK KyNlbmRpZiAvKiBOT0RPUFRZICovCisgICAgICAgIGNsb3NlKHR0eWZkKTsKKwluZXRjb25uID0g MDsKKwl3YXNjbG9zZWQgPSAxOworICAgICAgICB0dHB0eSA9IDA7CisgICAgICAgIHR0eWZkID0g LTE7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogTkVUUFRZICovCisKKyNp ZmRlZglORVRDT05OCisgICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBJZiBpdCdzIGEgbmV0d29yayBj b25uZWN0aW9uLiAqLworCWRlYnVnKEYxMDAsInR0Y2xvcyBjbG9zaW5nIG5ldCIsIiIsMCk7CisJ bmV0Y2xvcygpOwkJCS8qIExldCB0aGUgbmV0d29yayBtb2R1bGUgY2xvc2UgaXQuICovCisJbmV0 Y29ubiA9IDA7CQkJLyogTm8gbW9yZSBuZXR3b3JrIGNvbm5lY3Rpb24uICovCisJZGVidWcoRjEw MSwidHRjbG9zIHR0eWZkIGFmdGVyIG5ldGNsb3MiLCIiLHR0eWZkKTsgLyogU2hvdWxkIGJlIC0x ICovCisJcmV0dXJuKDApOworICAgIH0KKyNlbmRpZgkvKiBORVRDT05OICovCisKKyAgICBpZiAo eGxvY2FsKSB7CQkJLyogV2UncmUgY2xvc2luZyBhIFNFVCBMSU5FIGRldmljZSAqLworI2lmZGVm IEZUMjEJCQkJLyogRm9ydHVuZSAyLjEtc3BlY2lmaWMgaXRlbXMgLi4uICovCisJaW9jdGwodHR5 ZmQsVElPQ0hQQ0wsIE5VTEwpOworI2VuZGlmIC8qIEZUMjEgKi8KKyNpZmRlZiB1bHRyaXgJCQkJ LyogVWx0cml4LXNwZWNpZmljIGl0ZW1zIC4uLiAqLworI2lmZGVmIFRJT0NTSU5VU0UKKwkvKiBV bnNldCB0aGUgSU5VU0UgZmxhZyB0aGF0IHdlIHNldCBpbiB0dG9wZW4oKSAqLworCWlvY3RsKHR0 eWZkLCBUSU9DU0lOVVNFLCBOVUxMKTsKKyNlbmRpZiAvKiBUSU9DU0lOVVNFICovCisJaW9jdGwo dHR5ZmQsIFRJT0NOTU9ERU0sICZ4KTsKKyNpZmRlZiBDT01NRU5UCisJLyogV2hhdCB3YXMgdGhp cz8gKi8KKwlpb2N0bCh0dHlmZCwgVElPQ05DQVIsIE5VTEwpOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyNlbmRpZiAvKiB1bHRyaXggKi8KKyAgICB9CisKKyAgICAvKiBUaGlzIGlzIHRvIHByZXZl bnQgdXMgZnJvbSBzdGlja2luZyBpbiB0dGhhbmcoKSBvciBjbG9zZSgpLiAqLworCisjaWZkZWYg T19OREVMQVkKKyNpZm5kZWYgYWVnaXMKKyAgICBpZiAodHR5ZmQgPiAwKSB7CQkJLyogQnV0IHNr aXAgaXQgb24gc3RkaW4uICovCisJZGVidWcoRjEwMCwidHRjbG9zIHNldHRpbmcgT19OREVMQVki LCIiLDApOworCXggPSBmY250bCh0dHlmZCxGX1NFVEZMLGZjbnRsKHR0eWZkLEZfR0VURkwsIDAp fE9fTkRFTEFZKTsKKyNpZmRlZiBERUJVRworCWlmIChkZWJsb2cgJiYgeCA9PSAtMSkgeworCSAg ICBwZXJyb3IoIldhcm5pbmcgLSBDYW4ndCBzZXQgT19OREVMQVkiKTsKKwkgICAgZGVidWcoRjEw MSwidHRjbG9zIGZjbnRsIGZhaWx1cmUgdG8gc2V0IE9fTkRFTEFZIiwiIix4KTsKKwl9CisjZW5k aWYgLyogREVCVUcgKi8KKyAgICB9CisjZW5kaWYgLyogYWVnaXMgKi8KKyNlbmRpZiAvKiBPX05E RUxBWSAqLworCisgICAgeCA9IDA7CisgICAgdHRjX3N0YXRlID0gMDsKKyAgICBpZiAoeGxvY2Fs CisjaWZkZWYgTk9GRFpFUk8KKwl8fCB0dHlmZCA+IDAKKyNlbmRpZiAvKiBOT0ZEWkVSTyAqLwor CSkgeworCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0seHRpbWVyaCk7IC8qIEVuYWJsZSB0aW1lciBp bnRlcnJ1cHQuICovCisJeHggPSBhbGFybSg4KTsJCQkvKiBBbGxvdyA4IHNlY29uZHMuICovCisJ ZGVidWcoRjEwMSwidHRjbG9zIGFsYXJtIiwiIix4eCk7CisJaWYgKAorI2lmZGVmIENLX1BPU0lY X1NJRworCSAgICBzaWdzZXRqbXAoc2pidWYsMSkKKyNlbHNlCisJICAgIHNldGptcChzamJ1ZikK KyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkgICAgKSB7CQkJCS8qIFRpbWVyIHdlbnQgb2Zm PyAqLworCSAgICB4ID0gLTE7CisjaWZkZWYgREVCVUcKKwkgICAgZGVidWcoRjExMSwidHRjbG9z IEFMQVJNIFRSQVAgZXJybm8iLGNraXRvYSh0dGNfc3RhdGUpLGVycm5vKTsKKwkgICAgcHJpbnRm KCJ0dGNsb3MoKSB0aW1lb3V0OiAlc1xuIiwgdHRjX25hbVt0dGNfc3RhdGVdKTsKKyNlbmRpZiAv KiBERUJVRyAqLworCX0KKwkvKiBIYW5nIHVwIHRoZSBkZXZpY2UgKGRyb3AgRFRSKSAqLworCisJ ZXJybm8gPSAwOworCWRlYnVnKEYxMTEsInR0Y2xvcyBBIixja2l0b2EoeCksdHRjX3N0YXRlKTsK KwlpZiAodHRjX3N0YXRlIDwgMSkgeworCSAgICB0dGNfc3RhdGUgPSAxOworCSAgICBkZWJ1ZyhG MTAxLCJ0dGNsb3MgZXhpdGhhbmd1cCIsIiIsZXhpdGhhbmd1cCk7CisJICAgIGlmIChleGl0aGFu Z3VwKSB7CisJCWFsYXJtKDgpOwkJLyogUmUtYXJtIHRoZSB0aW1lciAqLworCQlkZWJ1ZyhGMTAx LCJ0dGNsb3MgY2FsbGluZyB0dGhhbmcoKSIsIiIseCk7CisJCXggPSB0dGhhbmcoKTsJCS8qIEhh bmcgdXAgZmlyc3QsIHRoZW4uLi4gKi8KKwkJZGVidWcoRjEwMSwidHRjbG9zIHR0aGFuZygpIiwi Iix4KTsKKwkgICAgfQorI2lmbmRlZiBDS19OT0hVUENMCisvKgorICBPY3QgMjAwNiAtIExlYXZl IERUUiBvbiBpZiBTRVQgRVhJVCBIQU5HVVAgT0ZGLgorICBTdWdnZXN0ZWQgYnkgU29ld29ubyBF ZmZlbmRpLgorKi8KKyNpZmRlZiBIVVBDTAorCSAgICBlbHNlIHsKKwkJdHRvbGQuY19jZmxhZyAm PSB+SFVQQ0w7IC8qIExldCdzIHNlZSBob3cgdGhpcyB0cmF2ZWxzICovCisjaWZkZWYgQlNENDRP UlBPU0lYCisJCXRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0dG9sZCk7CisjZWxzZSAvKiAhQlNE NDRPUlBPU0lYICovCisjaWZkZWYgQVRUU1YKKwkJaW9jdGwodHR5ZmQsVENTRVRBVywmdHRvbGQp OwkJCisjZWxzZSAgLyogIUFUVFNWICovCisJCXN0dHkodHR5ZmQsJnR0b2xkKTsKKyNlbmRpZgkv KiBBVFRTViAqLworI2VuZGlmCS8qIEJTRDQ0T1JQT1NJWCAqLworCSAgICB9CisjZW5kaWYJLyog SFVQQ0wgKi8KKyNlbmRpZgkvKiBDS19OT0hVUENMICovCisJfQorCS8qIFB1dCBiYWNrIGRldmlj ZSBtb2RlcyBhcyB3ZSBmb3VuZCB0aGVtICovCisKKwllcnJubyA9IDA7CisJZGVidWcoRjExMSwi dHRjbG9zIEIiLGNraXRvYSh4KSx0dGNfc3RhdGUpOworCWlmICh0dGNfc3RhdGUgPCAyKSB7CisJ ICAgIHR0Y19zdGF0ZSA9IDI7CisJICAgIC8qIERvbid0IHRyeSB0byBtZXNzIHdpdGggdHR5IG1v ZGVzIGlmIHR0aGFuZyBmYWlsZWQoKSAqLworCSAgICAvKiBzaW5jZSBpdCBwcm9iYWJseSB3b24n dCB3b3JrLiAqLworCSAgICBpZiAoeCA+IC0xKSB7CisJCWRlYnVnKEYxMDEsInR0Y2xvcyBjYWxs aW5nIHR0cmVzKCkiLCIiLHgpOworCQlzaWduYWwoU0lHQUxSTSx4dGltZXJoKTsgLyogUmUtZW5h YmxlIHRoZSBhbGFybS4gKi8KKwkJYWxhcm0oOCk7CQkvKiBSZS1hcm0gdGhlIHRpbWVyICovCisJ CXggPSB0dHJlcygpOwkJLyogUmVzZXQgZGV2aWNlIG1vZGVzLiAqLworCQlkZWJ1ZyhGMTAxLCJ0 dGNsb3MgdHRyZXMoKSIsIiIseCk7CisJCWFsYXJtKDApOworCSAgICB9CisJfQorCS8qIENsb3Nl IHRoZSBkZXZpY2UgKi8KKworCWVycm5vID0gMDsKKwlkZWJ1ZyhGMTAxLCJ0dGNsb3MgQyIsIiIs dHRjX3N0YXRlKTsKKwlpZiAodHRjX3N0YXRlIDwgMykgeworCSAgICB0dGNfc3RhdGUgPSAzOwor CSAgICBlcnJubyA9IDA7CisJICAgIGRlYnVnKEYxMDEsInR0Y2xvcyBjYWxsaW5nIGNsb3NlIiwi Iix4KTsKKwkgICAgc2lnbmFsKFNJR0FMUk0seHRpbWVyaCk7CS8qIFJlLWVuYWJsZSBhbGFybS4g Ki8KKwkgICAgYWxhcm0oOCk7CQkJLyogUmUtYXJtIHRoZSB0aW1lciAqLworCSAgICB4ID0gY2xv c2UodHR5ZmQpOwkJLyogQ2xvc2UgdGhlIGRldmljZS4gKi8KKwkgICAgZGVidWcoRjEwMSwidHRj bG9zIGNsb3NlKCkiLCIiLHgpOworCSAgICBpZiAoeCA+IC0xKQorCSAgICAgIHR0Y19zdGF0ZSA9 IDM7CisJfQorCWRlYnVnKEYxMDEsInR0Y2xvcyBEIiwiIix0dGNfc3RhdGUpOworCXR0aW1vZmYo KTsJCQkvKiBUdXJuIG9mZiB0aW1lci4gKi8KKwlpZiAoeCA8IDApIHsKKwkgICAgcHJpbnRmKCI/ V0FSTklORyAtIGNsb3NlIGZhaWxlZDogJXNcbiIsdHRubXN2KTsKKyNpZmRlZiBERUJVRworCSAg ICBpZiAoZGVibG9nKSB7CisJCXByaW50ZigiZXJybm8gPSAlZFxuIiwgZXJybm8pOworCQlkZWJ1 ZyhGMTAxLCJ0dGNsb3MgZmFpbGVkIiwiIixlcnJubyk7CisJICAgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworCX0KKwkvKiBVbmxvY2sgYWZ0ZXIgY2xvc2luZyBidXQgYmVmb3JlIGFueSBnZXR0eSBt dW1ibyBqdW1ibyAqLworCisJZGVidWcoRjEwMCwidHRjbG9zIGFib3V0IHRvIGNhbGwgdHR1bmxj ayIsIiIsMCk7CisgICAgICAgIGlmICh0dHVubGNrKCkpICAgICAgICAgICAgICAgICAgLyogUmVs ZWFzZSB1dWNwLXN0eWxlIGxvY2sgKi8KKwkgIGZwcmludGYoc3RkZXJyLCJXYXJuaW5nLCBwcm9i bGVtIHJlbGVhc2luZyBsb2NrXHJcbiIpOworICAgIH0KKworLyogRm9yIGJpZGlyZWN0aW9uYWwg bGluZXMsIHJlc3RvcmUgZ2V0dHkgaWYgaXQgd2FzIHRoZXJlIGJlZm9yZS4gKi8KKworI2lmZGVm IEFDVUNOVFJMCQkJCS8qIDQuM0JTRCBhY3VjbnRybCgpIG1ldGhvZC4gKi8KKyAgICBpZiAoeGxv Y2FsKSB7CisJZGVidWcoRjEwMCwidHRjbG9zIEFDVUNOVFJMIiwiIiwwKTsKKwlhY3VjbnRybCgi ZW5hYmxlIix0dG5tc3YpOwkvKiBFbmFibGUgZ2V0dHkgb24gdGhlIGRldmljZS4gKi8KKyAgICB9 CisjZWxzZQorI2lmZGVmIEFUVDczMDAJCQkJLyogQVRUIFVOSVggUEMgKDNCMSwgNzMwMCkgbWV0 aG9kLiAqLworICAgIGlmICh4bG9jYWwpIHsKKwlkZWJ1ZyhGMTAwLCJ0dGNsb3MgQVRUNzMwMCBv bmdldHR5IiwiIiwwKTsKKwlpZiAoYXR0bW9kZW0gJiBET0dFVFkpCQkvKiBXYXMgZ2V0dHkoMW0p IHJ1bm5pbmcgYmVmb3JlIHVzPyAqLworCSAgb25nZXR0eSh0dG5tc3YpOwkJLyogWWVzLCByZXN0 YXJ0IGdldHR5IG9uIHR0eSBsaW5lICovCisJYXR0bW9kZW0gJj0gfkRPR0VUWTsJCS8qIE5vIHBo b25lIGluIHVzZSwgZ2V0dHkgcmVzdG9yZWQgKi8KKyAgICB9CisjZW5kaWYgLyogQVRUNzMwMCAq LworI2VuZGlmIC8qIFN5c3RlbS1kZXBlbmRlbnQgZ2V0dHktcmVzdG9yaW5nIG1ldGhvZHMgKi8K KworI2lmZGVmIHNvbnlfbmV3cworICAgIGttX2V4dCA9IC0xOwkJCS8qIEludmFsaWRhdGUgZGV2 aWNlJ3MgS2FuamktbW9kZSAqLworI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworCisgICAgdHR5ZmQg PSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW52YWxpZGF0ZSB0aGUgZmlsZSBkZXNj cmlwdG9yLiAqLworICAgIHdhc2Nsb3NlZCA9IDE7CisgICAgZGVidWcoRjEwMCwidHRjbG9zIGRv bmUiLCIiLDApOworICAgIHJldHVybigwKTsKK30KKworLyogIFQgVCBIIEEgTiBHICAtLSAgSGFu Z3VwIHBob25lIGxpbmUgb3IgbmV0d29yayBjb25uZWN0aW9uLiAgKi8KKy8qCisgIFJldHVybnM6 CisgIDAgaWYgaXQgZG9lcyBub3RoaW5nLgorICAxIGlmIGl0IGJlbGlldmVzIHRoYXQgaXQgaHVu ZyB1cCBzdWNjZXNzZnVsbHkuCisgLTEgaWYgaXQgYmVsaWV2ZXMgdGhhdCB0aGUgaGFuZ3VwIGF0 dGVtcHQgZmFpbGVkLgorKi8KKworI2RlZmluZSBIVVBUSU1FIDUwMAkJCS8qIE1pbGxpc2Vjb25k cyBmb3IgaGFuZ3VwICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBUaGUgZm9sbG93aW5nIGRpZG4n dCB3b3JrIGJ1dCBUSU9DU0RUUiBkb2VzIHdvcmsgKi8KKyNpZmRlZiBVTklYV0FSRQorLyogRGVm aW5lIEhVUF9QT1NJWCB0byBmb3JjZSBub24tUE9TSVggYnVpbGRzIHRvIHVzZSB0aGUgUE9TSVgg aGFuZ3VwIG1ldGhvZCAqLworI2lmbmRlZiBQT1NJWAkJCQkvKiBTdWNoIGFzIFVuaXh3YXJlIDEu eCwgMi54ICovCisjaWZuZGVmIEhVUF9QT1NJWAorI2RlZmluZSBIVVBfUE9TSVgKKyNlbmRpZiAv KiBIVVBfUE9TSVggKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIFVOSVhXQVJFICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZuZGVmIFVTRV9USU9DU0RUUgorI2lmZGVmIF9f TmV0QlNEX18KKy8qIEJlY2F1c2UgdGhlIFBPU0lYIG1ldGhvZCAoc2V0IG91dHB1dCBzcGVlZCB0 byAwKSBkb2Vzbid0IHdvcmsgaW4gTmV0QlNEICovCisjaWZkZWYgVElPQ1NEVFIKKyNpZmRlZiBU SU9DQ0RUUgorI2RlZmluZSBVU0VfVElPQ1NEVFIKKyNlbmRpZiAvKiBUSU9DQ0RUUiAqLworI2Vu ZGlmIC8qIFRJT0NTRFRSICovCisjZW5kaWYgLyogX19OZXRCU0RfXyAqLworI2VuZGlmIC8qIFVT RV9USU9DU0RUUiAqLworCisjaWZuZGVmIEhVUF9DTE9TRV9QT1NJWAorI2lmZGVmIE9VOAorI2Rl ZmluZSBIVVBfQ0xPU0VfUE9TSVgKKyNlbHNlCisjaWZkZWYgQ0tfU0NPVjUKKyNkZWZpbmUgSFVQ X0NMT1NFX1BPU0lYCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNlbmRpZiAvKiBPVTggKi8KKyNl bmRpZiAvKiBIVVBfQ0xPU0VfUE9TSVggKi8KKworI2lmZGVmIE5PX0hVUF9DTE9TRV9QT1NJWAor I2lmZGVmIEhVUF9DTE9TRV9QT1NJWAorI3VuZGVmIEhVUF9DTE9TRV9QT1NJWAorI2VuZGlmIC8q IEhVUF9DTE9TRV9QT1NJWCAqLworI2VuZGlmIC8qIE5PX0hVUF9DTE9TRV9QT1NJWCAqLworCitp bnQKK3R0aGFuZygpIHsKKyNpZmRlZiBOT0xPQ0FMCisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAg ICBpbnQgeCA9IDA7CQkJCS8qIFNvbWV0aW1lcyB1c2VkIGFzIHJldHVybiBjb2RlLiAqLworI2lm bmRlZiBQT1NJWAorICAgIGludCB6OwkJCQkvKiB3b3JrZXIgKi8KKyNlbmRpZiAvKiBQT1NJWCAq LworCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZpbmUgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJF TlQgKi8KKworI2lmZGVmIFNWT1JQT1NJWAkJCS8qIEFUJlQsIFBPU0lYLCBIUFVYIGRlY2xhcmF0 aW9ucy4gKi8KKyAgICBpbnQgc3Bkc2F2OwkJCQkvKiBmb3Igc2F2aW5nIHNwZWVkICovCisjaWZk ZWYgSFVQX1BPU0lYCisgICAgaW50IHNwZHNhdmk7CisjZWxzZQorI2lmZGVmIEJTRDQ0T1JQT1NJ WAorICAgIGludCBzcGRzYXZpOworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8q IEhVUF9QT1NJWCAqLworI2lmZGVmIEhQVVgKKy8qCisgIEVhcmx5IHZlcnNpb25zIG9mIEhQLVVY IG9taXR0ZWQgdGhlIG1mbGFnIHR5cGVkZWYuICBJZiB5b3UgZ2V0IGNvbXBsYWludHMKKyAgYWJv dXQgaXQsIGp1c3QgY2hhbmdlIGl0IHRvIGxvbmcgKG9yIGJldHRlciBzdGlsbCwgdW5zaWduZWQg bG9uZykuCisqLworICAgIG1mbGFnCisgICAgICBkdHJfZG93biA9IDAwMDAwMDAwMDAwLAorICAg ICAgbW9kZW1fcnRuLAorICAgICAgbW9kZW1fc2F2OworICAgIGNoYXIgbW9kZW1fc3RhdGVbNjRd OworI2VuZGlmIC8qIEhQVVggKi8KKyAgICBpbnQgZmxhZ3M7CQkJCS8qIGZjbnRsIGZsYWdzICov CisgICAgdW5zaWduZWQgc2hvcnQgdHRjX3NhdmU7CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisK KyAgICBpZiAodHR5ZmQgPCAwKSByZXR1cm4oMCk7ICAgICAgICAgICAvKiBEb24ndCBkbyB0aGlz IGlmIG5vdCBvcGVuICAqLworICAgIGlmICh4bG9jYWwgPCAxKSByZXR1cm4oMCk7CQkvKiBEb24n dCBkbyB0aGlzIGlmIG5vdCBsb2NhbCAqLworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlw ZSkKKyAgICAgIHJldHVybigodHRjbG9zKDApIDwgMCkgPyAtMSA6IDEpOworI2VuZGlmIC8qIE5F VENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkKKyAgICAgIHJldHVybigodHRj bG9zKDApIDwgMCkgPyAtMSA6IDEpOworI2VuZGlmIC8qIE5FVFBUWSAqLworI2lmZGVmIE5FVENP Tk4KKyAgICBpZiAobmV0Y29ubikgewkJCS8qIE5ldHdvcmsgY29ubmVjdGlvbi4gKi8KKyNpZmRl ZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7CisgICAgICAgICAgICBp bnQgcmMgPSB0bmNfc2V0X2R0cl9zdGF0ZSgwKTsKKyAgICAgICAgICAgIGlmIChyYyA+PSAwKSB7 CisgICAgICAgICAgICAgICAgbXNsZWVwKEhVUFRJTUUpOworICAgICAgICAgICAgICAgIHJjID0g dG5jX3NldF9kdHJfc3RhdGUoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4o cmMgPj0gMCA/IDEgOiAtMSk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQg Ki8KKwkgIHJldHVybigobmV0Y2xvcygpIDwgMCkgPyAtMSA6IDEpOyAvKiBKdXN0IGNsb3NlIGl0 LiAqLworICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisvKiBGcm9tIGhlcmUgZG93biwgd2Ug aGFuZGxlIHJlYWwgdHR5IGRldmljZXMuICovCisjaWZkZWYgSFVQX1BPU0lYCisvKgorICBlLmcu IGZvciBVbml4d2FyZSAyLCB3aGVyZSB3ZSBkb24ndCBoYXZlIGEgZnVsbCBQT1NJWCBidWlsZCwg d2UKKyAgc3RpbGwgaGF2ZSB0byB1c2UgUE9TSVgtc3R5bGUgaGFuZ3VwLiAgVGh1cyB0aGUgZHVw bGljYXRpb24gb2YgdGhpcworICBhbmQgdGhlIG5leHQgY2FzZSwgdGhlIG9ubHkgZGlmZmVyZW5j ZSBiZWluZyB3ZSB1c2UgYSBsb2NhbCB0ZXJtaW9zCisgIHN0cnVjdCBoZXJlLCBzaW5jZSBhIGRp ZmZlcmVudCBtb2RlbCBpcyB1c2VkIGVsc2V3aGVyZS4KKworICBOTyBMT05HRVIgVVNFRCBhcyBv ZiBDLUtlcm1pdCA4LjAgLS0gaXQgdHVybnMgb3V0IHRoYXQgdGhpcyBtZXRob2QsCisgIGV2ZW4g dGhvdWdoIGl0IGNvbXBpbGVzIGFuZCBleGVjdXRlcyB3aXRob3V0IGVycm9yLCBkb2Vzbid0IGFj dHVhbGx5CisgIHdvcmsgKGkuZS4gRFRSIGRvZXMgbm90IGRyb3ApLCB3aGVyZWFzIHRoZSBUSU9D U0RUUiBtZXRob2Qgd29ya3MganVzdCBmaW5lLAorKi8KKyAgICB7CisJc3RydWN0IHRlcm1pb3Mg dHRjdXI7CisJaW50IHg7CisJZGVidWcoRjEwMCwidHRoYW5nIEhVUF9QT1NJWCBzdHlsZSIsIiIs MCk7CisJeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgYXR0cmli dXRlcyAqLworCWRlYnVnKEYxMTEsInR0aGFuZyB0Y2dldGF0dHIiLGNraXRvYShlcnJubykseCk7 CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXNwZHNhdiA9IGNmZ2V0b3NwZWVkKCZ0dGN1cik7 CS8qIEdldCBjdXJyZW50IHNwZWVkICovCisJZGVidWcoRjExMSwidHRoYW5nIGNmZ2V0b3NwZWVk Iixja2l0b2EoZXJybm8pLHNwZHNhdik7CisJc3Bkc2F2aSA9IGNmZ2V0aXNwZWVkKCZ0dGN1cik7 CS8qIEdldCBjdXJyZW50IHNwZWVkICovCisJZGVidWcoRjExMSwidHRoYW5nIGNmZ2V0aXNwZWVk Iixja2l0b2EoZXJybm8pLHNwZHNhdmkpOworCXggPSBjZnNldG9zcGVlZCgmdHRjdXIsQjApOwkv KiBSZXBsYWNlIGJ5IDAgKi8KKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZzZXRvc3BlZWQiLGNraXRv YShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXggPSBjZnNldGlzcGVlZCgm dHRjdXIsQjApOworCWRlYnVnKEYxMTEsInR0aGFuZyBjZnNldGlzcGVlZCIsY2tpdG9hKGVycm5v KSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NB RFJBSU4sJnR0Y3VyKTsKKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgdGNzZXRhdHRyIEIwIixja2l0b2Eo ZXJybm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwltc2xlZXAoSFVQVElNRSk7CQkv KiBTbGVlcCAwLjUgc2VjICovCisJeCA9IGNmc2V0b3NwZWVkKCZ0dGN1cixzcGRzYXYpOyAvKiBS ZXN0b3JlIHByZXYgc3BlZWQgKi8KKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJZGVidWcoRjEx MSwidHRoYW5nIGNmc2V0b3NwZWVkIHByZXYiLGNraXRvYShlcnJubykseCk7CisJeCA9IGNmc2V0 aXNwZWVkKCZ0dGN1cixzcGRzYXZpKTsKKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgY2ZzZXRpc3BlZWQg cHJldiIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJeCA9IHRj c2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgdGNz ZXRhdHRyIHJlc3RvcmUiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEp OworCXJldHVybigxKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIEJTRDQ0T1JQT1NJWAorI2lmZGVm IFFOWAorICAgIHsKKwlpbnQgeDsKKwl4ID0gdGNkcm9wbGluZSh0dHlmZCw1MDApOworCWRlYnVn KEYxMDEsInR0aGFuZyBRTlggdGNkcm9wbGluZSIsIiIseCk7CisJdHRjdXIuY19jZmxhZyB8PSBD TE9DQUw7CisJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKKwlkZWJ1ZyhG MTAxLCJ0dGhhbmcgUU5YIHRjc2V0YXR0ciByZXN0b3JlIiwiIix4KTsKKwlpZiAoeCA8IDApIHsK KwkgICAgZGVidWcoRjEwMSwidHRoYW5nIFFOWCB0Y3NldGF0dHIgcmVzdG9yZSBlcnJubyIsIiIs ZXJybm8pOworCSAgICByZXR1cm4oLTEpOworCX0KKwkvKiBGaXggZmxhZ3MgLSBlbnN1cmUgT19O T05CTE9DSyBpcyBvZmYgKi8KKworCWVycm5vID0gMDsKKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgUU5Y IGluaWZsYWdzIiwiIixpbmlmbGFncyk7CisJaWYgKGZjbnRsKHR0eWZkLCBGX1NFVEZMLCBpbmlm bGFncykgPT0gLTEpIHsKKwkgICAgZGVidWcoRjEwMSwidHRoYW5nIFFOWCBGX1NFVEZMIGVycm5v IiwiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7CisJfQorCXJldHVybih4KTsKKyAgICB9Cisj ZWxzZSAgLyogUU5YICovCisgICAgeworCWludCB4OworI2lmZGVmIFVTRV9USU9DU0RUUgorCWRl YnVnKEYxMDAsInR0aGFuZyBCU0Q0NE9SUE9TSVggVVNFX1RJT0NTRFRSIiwiIiwwKTsKKwllcnJu byA9IDA7CisJeCA9IGlvY3RsKHR0eWZkLCBUSU9DQ0RUUiwgTlVMTCk7CisJZGVidWcoRjExMSwi dHRoYW5nIEJTRDQ0T1JQT1NJWCBpb2N0bCBUSU9DQ0RUUiIsY2tpdG9hKGVycm5vKSx4KTsKKwlp ZiAoeCA8IDApIHJldHVybigtMSk7CisJbXNsZWVwKEhVUFRJTUUpOwkJLyogU2xlZXAgMC41IHNl YyAqLworCWVycm5vID0gMDsKKwl4ID0gaW9jdGwodHR5ZmQsIFRJT0NTRFRSLCBOVUxMKTsKKwlk ZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGlvY3RsIFRJT0NTRFRSIixja2l0b2EoZXJy bm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKyNlbHNlICAvKiBVU0VfVElPQ1NEVFIg Ki8KKworI2lmZGVmIEhVUF9DTE9TRV9QT1NJWAorLyoKKyAgSW4gT1NSNSB2ZXJzaW9ucyB3aGVy ZSBUSU9DU0RUUiBpcyBub3QgZGVmaW5lZCAodXAgdG8gYW5kIGluY2x1ZGluZyBhdAorICBsZWFz dCA1LjAuNmEpIHRoZSBQT1NJWCBBUElzIGluIHRoZSAiI2Vsc2UiIHBhcnQgYmVsb3cgYXJlIGF2 YWlsYWJsZSBidXQKKyAgZG9uJ3Qgd29yaywgYW5kIG5vIG90aGVyIEFQSXMgYXJlIGF2YWlsYWJs ZSB0aGF0IGRvIHdvcmsuICBJbiB0aGlzIGNhc2UKKyAgd2UgaGF2ZSB0byBkcm9wIERUUiBieSBi cnV0ZSBmb3JjZTogY2xvc2UgYW5kIHJlb3BlbiB0aGUgcG9ydC4gIFRoaXMKKyAgY29kZSBhY3R1 YWxseSB3b3JrcywgYnV0IGFsbCB0aGUgc3RlcHMgYXJlIGNydWNpYWw6IHNldHRpbmcgQ0xPQ0FM LCB0aGUKKyAgT19OREVMQVkgbWFuaXB1bGF0aW9ucywgZXRjLgorKi8KKwlkZWJ1ZyhGMTAwLCJ0 dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGNsb3NlL29wZW4iLCIiLDApOworCWRlYnVnKEYxMDEsInR0 aGFuZyBIVVBfQ0xPU0VfUE9TSVggT19OT05CTE9DSyIsIiIsT19OT05CTE9DSyk7CisJZGVidWco RjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBPX05ERUxBWSIsIiIsT19OREVMQVkpOworCWVy cm5vID0gMDsKKwl4ID0gdGNnZXRhdHRyKHR0eWZkLCAmdHRjdXIpOwkvKiBHZXQgY3VycmVudCBh dHRyaWJ1dGVzICovCisJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCB0Y2dldGF0 dHIiLCIiLHgpOworCWlmICh4IDwgMCkgeworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NM T1NFX1BPU0lYIHRjZ2V0YXR0ciBlcnJubyIsIiIsZXJybm8pOworCSAgICByZXR1cm4oLTEpOwor CX0KKwllcnJubyA9IDA7CisKKwl4ID0gY2xvc2UodHR5ZmQpOwkJLyogQ2xvc2Ugd2l0aG91dCBy ZWxlYXNpbmcgbG9jayAqLworCWlmICh4IDwgMCkgeworCSAgICBkZWJ1ZyhGMTAxLCJ0dGhhbmcg SFVQX0NMT1NFX1BPU0lYIGNsb3NlIGVycm5vIiwiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7 CisJfQorCWVycm5vID0gMDsKKwl4ID0gbXNsZWVwKDUwMCk7CQkvKiBQYXVzZSBoYWxmIGEgc2Vj b25kICovCisJaWYgKHggPCAwKSB7CQkJLyogT3IgaWYgdGhhdCBkb2Vzbid0IHdvcmssIDEgc2Vj ICovCisJICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggbXNsZWVwIGVycm5v IiwiIixlcnJubyk7CisJICAgIHNsZWVwKDEpOworCX0KKwllcnJubyA9IDA7CisJdHR5ZmQgPSBw cml2X29wbih0dG5tc3YsIChPX1JEV1J8T19OREVMQVkpKTsgLyogUmVvcGVuIHRoZSBkZXZpY2Ug Ki8KKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIHJlb3BlbiIsdHRubXN2LHR0 eWZkKTsKKwlpZiAodHR5ZmQgPCAwKSB7CisJICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xP U0VfUE9TSVggcmVvcGVuIGVycm5vIiwiIixlcnJubyk7CisJICAgIHJldHVybigtMSk7CisJfQor CWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggcmUtdHRvcGVuIHR0eWZkIiwiIix0 dHlmZCk7CisKKwkvKiBSZXN0b3JlIHByZXZpb3VzIGF0dHJpYnV0ZXMgKi8KKworCWVycm5vID0g MDsKKwl0dnRmbGcgPSAwOworCXR0Y3VyLmNfY2ZsYWcgfD0gQ0xPQ0FMOworCXggPSB0Y3NldGF0 dHIodHR5ZmQsVENTQURSQUlOLCZ0dGN1cik7CisJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9T RV9QT1NJWCB0Y3NldGF0dHIgcmVzdG9yZSIsIiIseCk7CisJaWYgKHggPCAwKSB7CisJICAgIGRl YnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggdGNzZXRhdHRyIHJlc3RvcmUgZXJybm8i LAorCQkgICIiLGVycm5vKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJLyogRml4IGZsYWdzIC0g ZW5zdXJlIE9fTkRFTEFZIGFuZCBPX05PTkJMT0NLIGFyZSBvZmYgKi8KKworCWVycm5vID0gMDsK KyAgICAgICAgaWYgKCh4ID0gZmNudGwodHR5ZmQsIEZfR0VURkwsIDApKSA9PSAtMSkgeworCSAg ICBkZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIEZfR0VURkwgZXJybm8iLCIiLGVy cm5vKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CisJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9T RV9QT1NJWCBmbGFncyIsIiIseCk7CisJZXJybm8gPSAwOworICAgICAgICB4ICY9IH4oT19OT05C TE9DS3xPX05ERUxBWSk7CisJZGVidWcoRjEwMSwidHRoYW5nIEhVUF9DTE9TRV9QT1NJWCBmbGFn cyB0byBzZXQiLCIiLHgpOworCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggaW5p ZmxhZ3MiLCIiLGluaWZsYWdzKTsKKwlpZiAoZmNudGwodHR5ZmQsIEZfU0VURkwsIHgpID09IC0x KSB7CisJICAgIGRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggRl9TRVRGTCBlcnJu byIsIiIsZXJybm8pOworCSAgICByZXR1cm4oLTEpOworCX0KKyNpZmRlZiBERUJVRworCWlmIChk ZWJsb2cpIHsKKwkgICAgaWYgKCh4ID0gZmNudGwodHR5ZmQsIEZfR0VURkwsIDApKSA+IC0xKSB7 CisJCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0VfUE9TSVggZmxhZ3MiLCIiLHgpOworCQlk ZWJ1ZyhGMTAxLCJ0dGhhbmcgSFVQX0NMT1NFX1BPU0lYIGZsYWdzICYgT19OT05CTE9DSyIsCisJ CSAgICAgICIiLHgmT19OT05CTE9DSyk7CisJCWRlYnVnKEYxMDEsInR0aGFuZyBIVVBfQ0xPU0Vf UE9TSVggZmxhZ3MgJiBPX05ERUxBWSIsCisJCSAgICAgICIiLHgmT19OREVMQVkpOworCSAgICB9 CisJfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNlbHNlICAvKiBIVVBfQ0xPU0VfUE9TSVggKi8K KwkKKwkvKiBHZW5lcmFsIEJTRDQ0T1JQT1NJWCBjYXNlIChMaW51eCwgQlNESSwgRnJlZUJTRCwg ZXRjKSAqLworCisJZGVidWcoRjEwMCwidHRoYW5nIEJTRDQ0T1JQT1NJWCBCMCIsIiIsMCk7CisJ eCA9IHRjZ2V0YXR0cih0dHlmZCwgJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgYXR0cmlidXRlcyAq LworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0NE9SUE9TSVggdGNnZXRhdHRyIixja2l0b2EoZXJy bm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlzcGRzYXYgPSBjZmdldG9zcGVlZCgm dHRjdXIpOwkvKiBHZXQgY3VycmVudCBzcGVlZCAqLworCWRlYnVnKEYxMTEsInR0aGFuZyBCU0Q0 NE9SUE9TSVggY2ZnZXRvc3BlZWQiLGNraXRvYShlcnJubyksc3Bkc2F2KTsKKwlzcGRzYXZpID0g Y2ZnZXRpc3BlZWQoJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQgKi8KKwlkZWJ1ZyhGMTEx LCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmZ2V0aXNwZWVkIixja2l0b2EoZXJybm8pLHNwZHNhdmkp OworCXggPSBjZnNldG9zcGVlZCgmdHRjdXIsQjApOwkvKiBSZXBsYWNlIGJ5IDAgKi8KKwlkZWJ1 ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0b3NwZWVkIixja2l0b2EoZXJybm8pLHgp OworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwl4ID0gY2ZzZXRpc3BlZWQoJnR0Y3VyLEIwKTsK KwlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0aXNwZWVkIixja2l0b2EoZXJy bm8pLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwkvKiBUaGlzIGdldHMgRUlOVkFMIG9u IE5ldEJTRCAxLjQuMSBiZWNhdXNlIG9mIEIwLi4uICovCisJeCA9IHRjc2V0YXR0cih0dHlmZCxU Q1NBRFJBSU4sJnR0Y3VyKTsKKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIHRjc2V0 YXR0ciBCMCIsY2tpdG9hKGVycm5vKSx4KTsKKwlpZiAoeCA8IDApIHJldHVybigtMSk7CisJbXNs ZWVwKEhVUFRJTUUpOwkJLyogU2xlZXAgMC41IHNlYyAqLworCWRlYnVnKEYxMDEsInR0aGFuZyBC U0Q0NE9SUE9TSVggcmVzdG9yZSBvdXRwdXQgc3BlZWQiLCIiLHNwZHNhdik7CisJeCA9IGNmc2V0 b3NwZWVkKCZ0dGN1cixzcGRzYXYpOyAvKiBSZXN0b3JlIHByZXYgc3BlZWQgKi8KKwlkZWJ1ZyhG MTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0b3NwZWVkIHByZXYiLGNraXRvYShlcnJubyks eCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCWRlYnVnKEYxMDEsInR0aGFuZyBCU0Q0NE9S UE9TSVggcmVzdG9yZSBpbnB1dCBzcGVlZCIsIiIsc3Bkc2F2aSk7CisJeCA9IGNmc2V0aXNwZWVk KCZ0dGN1cixzcGRzYXZpKTsKKwlkZWJ1ZyhGMTExLCJ0dGhhbmcgQlNENDRPUlBPU0lYIGNmc2V0 aXNwZWVkIHByZXYiLGNraXRvYShlcnJubykseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOwor CXR0Y3VyLmNfY2ZsYWcgfD0gQ0xPQ0FMOwkvKiBEb24ndCBleHBlY3QgQ0QgYWZ0ZXIgaGFuZ3Vw ICovCisJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsKKwlkZWJ1ZyhGMTEx LCJ0dGhhbmcgQlNENDRPUlBPU0lYIHRjc2V0YXR0ciByZXN0b3JlIixja2l0b2EoZXJybm8pLHgp OworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKworI2VuZGlmIC8qIEhVUF9DTE9TRV9QT1NJWCAq LworI2VuZGlmIC8qIFVTRV9USU9DU0RUUiAqLworCisJcmV0dXJuKDEpOworICAgIH0KKworI2Vu ZGlmIC8qIFFOWCAqLworI2Vsc2UgLyogQlNENDRPUlBPU0lYICovCisKKyNpZmRlZiBhZWdpcwkJ CQkvKiBBcG9sbG8gQWVnaXMgKi8KKyAgICBzaW9fJGNvbnRyb2woKHNob3J0KXR0eWZkLCBzaW9f JGR0ciwgZmFsc2UsIHN0KTsgICAgLyogRFRSIGRvd24gKi8KKyAgICBtc2xlZXAoSFVQVElNRSk7 CQkJCQkvKiBwYXVzZSAqLworICAgIHNpb18kY29udHJvbCgoc2hvcnQpdHR5ZmQsIHNpb18kZHRy LCB0cnVlLCAgc3QpOyAgICAvKiBEVFIgdXAgKi8KKyAgICByZXR1cm4oMSk7CisjZW5kaWYgLyog YWVnaXMgKi8KKworI2lmZGVmIEFOWUJTRAkJCQkvKiBBbnkgQlNEIHZlcnNpb24uICovCisjaWZk ZWYgVElPQ0NEVFIJCQkJLyogRXhjZXB0IHRob3NlIHRoYXQgZG9uJ3QgaGF2ZSB0aGlzICovCisg ICAgZGVidWcoRjEwMCwidHRoYW5nIEJTRCBzdHlsZSIsIiIsMCk7CisgICAgaWYgKGlvY3RsKHR0 eWZkLFRJT0NDRFRSLDApIDwgMCkgewkvKiBDbGVhciBEVFIuICovCisJZGVidWcoRjEwMSwidHRo YW5nIFRJT0NDRFRSIGZhaWxzIiwiIixlcnJubyk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAg bXNsZWVwKEhVUFRJTUUpOwkJCS8qIEZvciBhYm91dCAxLzIgc2VjICovCisgICAgZXJybm8gPSAw OworICAgIHggPSBpb2N0bCh0dHlmZCxUSU9DU0RUUiwwKTsJLyogUmVzdG9yZSBEVFIgKi8KKyAg ICBpZiAoeCA8IDApIHsKKwkvKgorCSAgRm9yIHNvbWUgcmVhc29uLCB0aGlzIHRlbmRzIHRvIGZh aWwgd2l0aCAibm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIKKwkgIGJ1dCB0aGUgb3BlcmF0aW9u IHN0aWxsIHdvcmtzLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRoZSBjbG9zZS9vcGVuCisJICBsYXRl ciBvbi4gIFNvIGxldCdzIG5vdCBzY2FyZSB0aGUgdXNlciB1bm5lY2Vzc2FyaWx5IGhlcmUuCisJ Ki8KKwlkZWJ1ZyhGMTAxLCJ0dGhhbmcgVElPQ1NEVFIgZXJybm8iLCIiLGVycm5vKTsgLyogTG9n IHRoZSBlcnJvciAqLworCXggPSAxOwkJCQkvKiBQcmV0ZW5kIHdlIHN1Y2NlZWRlZCAqLworICAg IH0gZWxzZSBpZiAoeCA9PSAwKSB4ID0gMTsJCS8qIFN1Y2Nlc3MgKi8KKyNpZmRlZiBDT01NRU5U CisjaWZkZWYgRlQyMQorICAgIGlvY3RsKHR0eWZkLCBUSU9DU0FWRU1PREVTLCAwKTsKKyAgICBp b2N0bCh0dHlmZCwgVElPQ0hQQ0wsIDApOworICAgIGNsb3NlKHR0eWZkKTsJCQkvKiBZZXMsIG11 c3QgZG8gdGhpcyB0d2ljZSAqLworICAgIGlmICgodHR5ZmQgPSBvcGVuKHR0bm1zdiwyKSkgPCAw KQkvKiBvbiBGb3J0dW5lIGNvbXB1dGVycy4uLiAqLworICAgICAgcmV0dXJuKC0xKTsJCQkvKiAo YnV0IHdoeT8pICovCisgICAgZWxzZSB4ID0gMTsKKyNlbmRpZiAvKiBGVDIxICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworI2VuZGlmIC8qIFRJT0NDRFRSICovCisgICAgY2xvc2UoZG9fb3Blbih0 dG5tc3YpKTsJCS8qIENsZWFyIGkvbyBlcnJvciBjb25kaXRpb24gKi8KKyAgICBlcnJubyA9IDA7 CisjaWZkZWYgQ09NTUVOVAorLyogVGhpcyBpcyBkZWZpbml0ZWx5IGRhbmdlcm91cy4gIFdoeSB3 YXMgaXQgaGVyZT8gKi8KKyAgICB6ID0gdHR2dCh0dHNwZWVkLHR0Zmxvdyk7CQkvKiBSZXN0b3Jl IG1vZGVzLiAqLworICAgIGRlYnVnKEYxMDEsInR0aGFuZyB0dHZ0IHJldHVybnMiLCIiLHopOwor ICAgIHJldHVybih6IDwgMCA/IC0xIDogMSk7CisjZWxzZQorICAgIHJldHVybih4KTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogQU5ZQlNEICovCisKKyNpZmRlZiBBVFRTVgorLyog QVQmVCBVTklYIHNlY3Rpb24sIGluY2x1ZGVzIEhQLVVYIGFuZCBnZW5lcmljIEFUJlQgU3lzdGVt IElJSS9WLi4uICovCisKKyNpZmRlZiBIUFVYCisvKiBIZXdsZXR0IFBhY2thcmQgYWxsb3dzIGV4 cGxpY2l0IG1hbmlwdWxhdGlvbiBvZiBtb2RlbSBzaWduYWxzLiAqLworCisjaWZkZWYgQ09NTUVO VAorLyogT2xkIHdheS4uLiAqLworICAgIGRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWCBzdHlsZSIs IiIsMCk7CisgICAgaWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYsJmR0cl9kb3duKSA8IDApICAgICAg ICAvKiBsb3dlciBEVFIgKi8KKyAgICAgIHJldHVybigtMSk7CQkgICAgCSAgICAgICAgICAgLyog b29wcywgY2FuJ3QuICovCisgICAgbXNsZWVwKEhVUFRJTUUpOwkJCSAgICAgICAgICAgLyogUGF1 c2UgaGFsZiBhIHNlY29uZC4gKi8KKyAgICB4ID0gMTsJCQkJICAgICAgICAgICAvKiBTZXQgcmV0 dXJuIGNvZGUgKi8KKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNHRVRBLCZtb2RlbV9ydG4pID4gLTEp IHsgICAgIC8qIEdldCBsaW5lIHN0YXR1cy4gKi8KKwlpZiAoKG1vZGVtX3J0biAmIE1EQ0QpICE9 IDApICAgICAgCSAgIC8qIENoZWNrIGlmIENEIGlzIGxvdy4gKi8KKwkgIHggPSAtMTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0QgZGlkbid0IGRyb3AsIGZhaWwuICovCisg ICAgfSBlbHNlIHggPSAtMTsKKworICAgIC8qIEV2ZW4gaWYgYWJvdmUgY2FsbHMgZmFpbCwgUlRT ICYgRFRSIHNob3VsZCBiZSB0dXJuZWQgYmFjayBvbi4gKi8KKyAgICBtb2RlbV9ydG4gPSBNUlRT IHwgTURUUjsKKyAgICBpZiAoaW9jdGwodHR5ZmQsTUNTRVRBRiwmbW9kZW1fcnRuKSA8IDApIHgg PSAtMTsKKyAgICByZXR1cm4oeCk7CisjZWxzZQorLyogTmV3IHdheSwgZnJvbSBIZWxsbXV0aCBN aWNoYWVsaXMgKi8KKyAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgSFAtVVggc3R5bGUsIEhQVVhERUJV RyIsIiIsMCk7CisgICAgaWYgKGlvY3RsKHR0eWZkLE1DR0VUQSwmbW9kZW1fcnRuKSA9PSAtMSkg eyAvKiBHZXQgY3VycmVudCBzdGF0dXMuICovCisJZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBj YW4ndCBnZXQgbW9kZW0gbGluZXMsIE5PIEhBTkdVUCEiLCIiLDApOworCXJldHVybigtMSk7Cisg ICAgfQorICAgIHNwcmludGYobW9kZW1fc3RhdGUsIiUjbHgiLG1vZGVtX3J0bik7CisgICAgZGVi dWcoRjExMCwidHRoYW5nIEhQLVVYOiBtb2RlbSBsaW5lcyA9ICIsbW9kZW1fc3RhdGUsMCk7Cisg ICAgbW9kZW1fc2F2ID0gbW9kZW1fcnRuOwkJLyogU2F2ZSBjdXJyZW50IG1vZGVtIHNpZ25hbHMg Ki8KKyAgICBtb2RlbV9ydG4gJj0gfk1EVFI7CQkJLyogVHVybiBEVFIgYml0IG9mZiAqLworICAg IHNwcmludGYobW9kZW1fc3RhdGUsIiUjbHgiLG1vZGVtX3J0bik7CisgICAgZGVidWcoRjExMCwi dHRoYW5nIEhQLVVYOiBEVFIgZG93biA9ICIsbW9kZW1fc3RhdGUsMCk7CisgICAgaWYgKGlvY3Rs KHR0eWZkLE1DU0VUQUYsJm1vZGVtX3J0bikgPCAwKSB7IC8qIGxvd2VyIERUUiAqLworCWRlYnVn KEYxMDAsInR0aGFuZyBIUC1VWDogY2FuJ3QgbG93ZXIgRFRSISIsIiIsMCk7CisJcmV0dXJuKC0x KTsJCQkvKiBvb3BzLCBjYW4ndC4gKi8KKyAgICB9CisgICAgbXNsZWVwKEhVUFRJTUUpOwkJCS8q IFBhdXNlIGhhbGYgYSBzZWNvbmQuICovCisgICAgeCA9IDE7CQkJCS8qIFNldCByZXR1cm4gY29k ZSAqLworICAgIGlmIChpb2N0bCh0dHlmZCxNQ0dFVEEsJm1vZGVtX3J0bikgPiAtMSkgeyAvKiBH ZXQgbGluZSBzdGF0dXMuICovCisJc3ByaW50Zihtb2RlbV9zdGF0ZSwiJSNseCIsbW9kZW1fcnRu KTsKKwlkZWJ1ZyhGMTEwLCJ0dGhhbmcgSFAtVVg6IG1vZGVtIGxpbmVzIGdvdCA9ICIsbW9kZW1f c3RhdGUsMCk7CisJaWYgKChtb2RlbV9ydG4gJiBNRENEKSAhPSAwKSB7CS8qIENoZWNrIGlmIENE IGlzIGxvdy4gKi8KKwkgICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBEQ0Qgbm90IGRvd24i LCIiLDApOworCSAgICB4ID0gLTE7CQkJLyogQ0QgZGlkbid0IGRyb3AsIGZhaWwuICovCisJfSBl bHNlIHsKKwkgICAgZGVidWcoRjEwMCwidHRoYW5nIEhQLVVYOiBEQ0QgZG93biIsIiIsMCk7CisJ fQorICAgIH0gZWxzZSB7CisJeCA9IC0xOworCWRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDogY2Fu J3QgZ2V0IERDRCBzdGF0dXMgISIsIiIsMCk7CisgICAgfQorCisgICAgLyogRXZlbiBpZiBhYm92 ZSBjYWxscyBmYWlsLCBEVFIgc2hvdWxkIGJlIHR1cm5lZCBiYWNrIG9uLiAqLworCisgICAgbW9k ZW1fc2F2IHw9IE1EVFI7CisgICAgaWYgKGlvY3RsKHR0eWZkLE1DU0VUQUYsJm1vZGVtX3Nhdikg PCAwKSB7CisJeCA9IC0xOworCWRlYnVnKEYxMDAsInR0aGFuZyBIUC1VWDogY2FuJ3Qgc2V0IHNh dmVkIHN0YXRlIiwiIiwwKTsKKyAgICB9IGVsc2UgeworCXNwcmludGYobW9kZW1fc3RhdGUsIiUj bHgiLG1vZGVtX3Nhdik7CisJZGVidWcoRjExMCwidHRoYW5nIEhQLVVYOiBmaW5hbCBtb2RlbSBs aW5lcyA9ICIsbW9kZW1fc3RhdGUsMCk7CisgICAgfQorICAgIHJldHVybih4KTsKKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyNlbHNlIC8qIEFUJlQgYnV0IG5vdCBIUC1VWCAqLworCisvKiBTVklE IGZvciBBVCZUIFN5c3RlbSBWIFIzIGRlZmluZXMgaW9jdGwncyBmb3IgaGFuZGxpbmcgbW9kZW0g c2lnbmFscy4gKi8KKy8qIEl0IGlzIG5vdCBrbm93biBob3cgbWFueSwgaWYgYW55LCBzeXN0ZW1z IGFjdHVhbGx5IGltcGxlbWVudCB0aGVtLCAqLworLyogc28gd2UgaW5jbHVkZSB0aGVtIGhlcmUg aW4gaWZkZWYncy4gKi8KKworLyoKKyAgVW5peHdhcmUgaGFzIHRoZSBUSU9DTXh4eCBzeW1ib2xz IGRlZmluZWQsIGJ1dCBjYWxsaW5nIGlvY3RsKCkgd2l0aCB0aGVtCisgIGdpdmVzIGVycm9yIDIy IChpbnZhbGlkIGFyZ3VtZW50KS4KKyovCisjaWZuZGVmIF9JQk1SMgorLyoKKyAgTm8gbW9kZW0t c2lnbmFsIHR3aWRkbGluZyBmb3IgSUJNIFJUIFBDIG9yIFJTLzYwMDAuCisgIEluIEFJWCAzLjEg YW5kIGVhcmxpZXIsIHRoZSBpb2N0bCgpIGNhbGwgaXMgYnJva2VuLgorICBUaGlzIGNvZGUgY291 bGQgYmUgYWN0aXZhdGVkIGZvciBBSVggMy4xIHdpdGggUFRGIDIwMDYgb3IgbGF0ZXIKKyAgKGUu Zy4gQUlYIDMuMiksIGJ1dCBjbG9zZS9vcGVuIGRvZXMgdGhlIGpvYiB0b28sIHNvIHdoeSBib3Ro ZXIuCisqLworI2lmZGVmIFRJT0NNQklTCQkJCS8qIEJpdCBTZXQgKi8KKyNpZmRlZiBUSU9DTUJJ QwkJCQkvKiBCaXQgQ2xlYXIgKi8KKyNpZmRlZiBUSU9DTV9EVFIJCQkvKiBEVFIgKi8KKworLyog Q2xlYXIgRFRSLCBzbGVlcCAzMDAgbXNlYywgdHVybiBpdCBiYWNrIG9uLiAqLworLyogSWYgYW55 IG9mIHRoZSBpb2N0bCdzIHJldHVybiBmYWlsdXJlLCBnbyBvbiB0byB0aGUgbmV4dCBzZWN0aW9u LiAqLworCisgICAgeiA9IFRJT0NNX0RUUjsJCQkvKiBDb2RlIGZvciBEVFIuICovCisjaWZkZWYg Q09NTUVOVAorLyoKKyAgVGhpcyB3YXMgdGhlIGNhdXNlIG9mIHRoZSB0cm91YmxlcyB3aXRoIHRo ZSBTb2xhcmlzIFBvcnQgTW9uaXRvci4KKyAgVGhlIHByb2JsZW0gaXM6IFJUUyBuZXZlciBjb21l cyBiYWNrIG9uLiAgTW9yYWw6IERvbid0IGRvIGl0IQorICAoQnV0IHdoeSBkb2Vzbid0IGl0IGNv bWUgYmFjayBvbj8gIFNlZSB0aGUgVElPQ01CSVMgY2FsbC4uLikKKyovCisjaWZkZWYgVElPQ01f UlRTCQkJLyogTG93ZXIgUlRTIHRvbyBpZiBzeW1ib2wgaXMga25vd24uICovCisgICAgeiB8PSBU SU9DTV9SVFM7CisjZW5kaWYgLyogVElPQ01fUlRTICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor CisgICAgZGVidWcoRjEwMSwidHRoYW5nIFRJT0NNIHNpZ25hbCBtYXNrIiwiIix6KTsKKyAgICBp ZiAoaW9jdGwodHR5ZmQsVElPQ01CSUMsJnopID4gLTEpIHsgICAvKiBUcnkgdG8gbG93ZXIgRFRS LiAqLworCWRlYnVnKEYxMDAsInR0aGFuZyBUSU9DTUJJQyBvayIsIiIsMCk7CisJbXNsZWVwKEhV UFRJTUUpOwkJICAgLyogUGF1c2UgaGFsZiBhIHNlY29uZC4gKi8KKwlpZiAoaW9jdGwodHR5ZmQs VElPQ01CSVMsJnopID4gLTEpIHsgLyogVHJ5IHRvIHR1cm4gaXQgYmFjayBvbi4gKi8KKwkgICAg ZGVidWcoRjEwMCwidHRoYW5nIFRJT0NNQklTIG9rIiwiIiwwKTsKKyNpZm5kZWYgQ0xTT1BOCisJ ICAgIHJldHVybigxKTsJCQkvKiBTdWNjZXNzLCBkb25lLiAqLworI2VuZGlmIC8qIENMU09QTiAq LworCX0gZWxzZSB7CQkJLyogQ291bGRuJ3QgcmFpc2UsIGNvbnRpbnVlLiAqLworCSAgICBkZWJ1 ZyhGMTAxLCJ0dGhhbmcgVElPQ01CSVMgZXJybm8iLCIiLGVycm5vKTsKKwl9CisgICAgfSBlbHNl IHsJCQkJLyogQ291bGRuJ3QgbG93ZXIsIGNvbnRpbnVlLiAqLworIAlkZWJ1ZyhGMTAxLCJ0dGhh bmcgVElPQ01CSUMgZXJybm8iLCIiLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogVElPQ01fRFRS ICovCisjZW5kaWYgLyogVElPQ01CSUMgKi8KKyNlbmRpZiAvKiBUSU9DTUJJUyAqLworI2VuZGlm IC8qIF9JQk1SMiAqLworCisvKgorICBHZW5lcmFsIEFUJlQgVU5JWCBjYXNlLCBub3QgSFBVWC4g IFRoZSBmb2xsb3dpbmcgY29kZSBpcyBoaWdobHkgc3VzcGVjdC4gIE5vCisgIHR3byBBVCZULWJh c2VkIHN5c3RlbXMgc2VlbSB0byBkbyB0aGlzIHRoZSBzYW1lIHdheS4gIFRoZSBvYmplY3QgaXMg c2ltcGx5CisgIHRvIHR1cm4gb2ZmIERUUiBhbmQgdGhlbiB0dXJuIGl0IGJhY2sgb24uICBTVklE IHNheXMgdGhlIHVuaXZlcnNhbCBtZXRob2QKKyAgZm9yIHR1cm5pbmcgb2ZmIERUUiBpcyB0byBz ZXQgdGhlIHNwZWVkIHRvIHplcm8sIGFuZCB0aGlzIGRvZXMgc2VlbSB0byBkbworICB0aGUgdHJp Y2sgaW4gYWxsIGNhc2VzLiAgQnV0IG5laXRoZXIgU1ZJRCBub3IgYW55IGtub3duIG1hbiBwYWdl cyBzYXkgaG93IHRvCisgIHR1cm4gRFRSIGJhY2sgb24gYWdhaW4uICBTb21lIHZhcmlhbnRzLCBs aWtlIG1vc3QgWGVuaXggaW1wbGVtZW50YXRpb25zLAorICByYWlzZSBEVFIgYWdhaW4gd2hlbiB0 aGUgc3BlZWQgaXMgcmVzdG9yZWQgdG8gYSBub256ZXJvIHZhbHVlLiAgT3RoZXJzCisgIHJlcXVp cmUgdGhlIGRldmljZSB0byBiZSBjbG9zZWQgYW5kIG9wZW5lZCBhZ2FpbiwgYnV0IHRoaXMgaXMg cmlza3kgYmVjYXVzZQorICBnZXR0eSBjb3VsZCBzZWl6ZSB0aGUgZGV2aWNlIGR1cmluZyB0aGUg aW5zdGFudCBpdCBpcyBjbG9zZWQuCisqLworCisvKiBSZXR1cm4gY29kZSBmb3IgaW9jdGwgZmFp bHVyZXMuLi4gKi8KKyNpZmRlZiBBVFQ2MzAwCisgICAgeCA9IDE7CQkJCS8qIEFUVDYzMDAgZG9l c24ndCB3YW50IHRvIGZhaWwuLi4gKi8KKyNlbHNlCisgICAgeCA9IC0xOworI2VuZGlmIC8qIEFU VDYzMDAgKi8KKworICAgIGRlYnVnKEYxMDAsInR0aGFuZyBnZXQgc2V0dGluZ3MiLCIiLDApOwor ICAgIGlmIChpb2N0bCh0dHlmZCxUQ0dFVEEsJnR0Y3VyKSA8IDApIC8qIEdldCBjdXJyZW50IHNl dHRpbmdzLiAqLworICAgICAgcmV0dXJuKHgpOwkJCS8qIEZhaWwgaWYgdGhpcyBkb2Vzbid0IHdv cmsuICovCisgICAgaWYgKChmbGFncyA9IGZjbnRsKHR0eWZkLEZfR0VURkwsMCkpIDwgMCkgLyog R2V0IGRldmljZSBmbGFncy4gKi8KKyAgICAgIHJldHVybih4KTsKKyAgICB0dGNfc2F2ZSA9IHR0 Y3VyLmNfY2ZsYWc7CQkvKiBSZW1lbWJlciBjdXJyZW50IHNwZWVkLiAqLworICAgIHNwZHNhdiA9 IHR0Y19zYXZlICYgQ0JBVUQ7CisgICAgZGVidWcoRjEwMSwidHRoYW5nIHNwZWVkIiwiIixzcGRz YXYpOworCisjaWZkZWYgT19OREVMQVkKKyAgICBkZWJ1ZyhGMTAwLCJ0dGhhbmcgdHVybmluZyBP X05ERUxBWSBvbiIsIiIsMCk7CisgICAgZmNudGwodHR5ZmQsIEZfU0VURkwsIGZsYWdzIHwgT19O REVMQVkpOyAvKiBBY3RpdmF0ZSBPX05ERUxBWSAqLworI2VuZGlmIC8qIE9fTkRFTEFZICovCisK KyNpZmRlZiBBVFQ3MzAwIC8qIFRoaXMgaXMgdGhlIHdheSBpdCBpcyBTVVBQT1NFRCB0byB3b3Jr ICovCisgICAgdHRjdXIuY19jZmxhZyAmPSB+Q0JBVUQ7CQkvKiBDaGFuZ2UgdGhlIHNwZWVkIHRv IHplcm8uICAqLworI2Vsc2UKKyNpZmRlZiBSVEFJWAorICAgIHR0Y3VyLmNfY2ZsYWcgJj0gfkNC QVVEOwkJLyogQ2hhbmdlIHRoZSBzcGVlZCB0byB6ZXJvLiAgKi8KKyNlbHNlICAgICAgICAgIC8q IFRoaXMgd2F5IHJlYWxseSB3b3JrcyBidXQgbWF5IGJlIGRhbmdlcm91cyAqLworI2lmZGVmIHUz YjIKKyAgICB0dGN1ci5jX2NmbGFnID0gfihDQkFVRHxDTE9DQUwpOwkvKiBTcGVjaWFsIGZvciBB VCZUIDNCMnMgKi8KKwkJCQkJLyogKENMT0NBTCBtdXN0IGJlIE9GRikgKi8KKyNlbHNlCisjaWZk ZWYgU0NPM1IyCQkJCS8qIFNDTyBVTklYIDMuMiAqLworLyoKKyAgVGhpcyBpcyBjb21wbGV0ZSBu b25zZW5zZSwgYnV0IGFuIFNDTyB1c2VyIGNsYWltZWQgdGhpcyBjaGFuZ2UgbWFkZQorICBoYW5n aW5nIHVwIHdvcmsuICBDb21tZW50cyBmcm9tIG90aGVyIFNDTyBVTklYIDMuMiB1c2VycyB3b3Vs ZCBiZQorICBhcHByZWNpYXRlZC4KKyovCisgICAgdHRjdXIuY19jZmxhZyA9IENCQVVEfEIwOwor I2Vsc2UKKyNpZmRlZiBBSVhSUwkJCQkvKiBBSVggb24gUlMvNjAwMCAqLworLyoKKyAgQ2FuJ3Qg c2V0IHNwZWVkIHRvIHplcm8gb24gQUlYIDMuMSBvbiBSUy82MDAwIDY0LXBvcnQgYWRhcHRlciwK KyAgZXZlbiB0aG91Z2ggeW91IGNhbiBkbyBpdCBvbiB0aGUgYnVpbHQtaW4gcG9ydCBhbmQgdGhl IDgtIGFuZCAxNi1wb3J0CisgIGFkYXB0ZXJzLiAgKFVudGVzdGVkIG9uIDEyOC1wb3J0IGFkYXB0 ZXIuKQorKi8KKyAgICB0dGN1ci5jX2NmbGFnID0gQ0xPQ0FMfEhVUENMfHNwZHNhdjsgLyogU3Bl ZWQgMCBjYXVzZXMgRUlOVkFMICovCisjZWxzZQkJCQkJLyogTm9uZSBvZiB0aGUgYWJvdmUgKi8K Ky8qCisgIFNldCBldmVyeXRoaW5nLCBpbmNsdWRpbmcgdGhlIHNwZWVkLCB0byB6ZXJvLCBleGNl cHQgZm9yIHRoZSBDTE9DQUwKKyAgYW5kIEhVUENMIGJpdHMuCisqLworICAgIHR0Y3VyLmNfY2Zs YWcgPSBDTE9DQUx8SFVQQ0w7CisjZW5kaWYgLyogQUlYUlMgKi8KKyNlbmRpZiAvKiBTQ08zUjIg Ki8KKyNlbmRpZiAvKiB1M2IyICovCisjZW5kaWYgLyogUlRBSVggKi8KKyNlbmRpZiAvKiBBVFQ3 MzAwICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogYW5kIGlmIG5vbmUgb2YgdGhvc2Ugd29y aywgdHJ5IG9uZSBvZiB0aGVzZS4uLiAqLworICAgIHR0Y3VyLmNfY2ZsYWcgPSAwOworICAgIHR0 Y3VyLmNfY2ZsYWcgPSBDTE9DQUw7CisgICAgdHRjdXIuY19jZmxhZyAmPSB+KENCQVVEfEhVUENM KTsKKyAgICB0dGN1ci5jX2NmbGFnICY9IH4oQ0JBVUR8Q1JFQUQpOworICAgIHR0Y3VyLmNfY2Zs YWcgJj0gfihDQkFVRHxDUkVBRHxIVVBDTCk7CisgICAgLyogb3Igb3RoZXIgY29tYmluYXRpb25z ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgVENYT05DCisgICAgZGVidWcoRjEw MCwidHRoYW5nIFRDWE9OQyIsIiIsMCk7CisgICAgaWYgKGlvY3RsKHR0eWZkLCBUQ1hPTkMsIDEp IDwgMCkgeworCWRlYnVnKEYxMDEsInR0aGFuZyBUQ1hPTkMgZmFpbGVkIiwiIixlcnJubyk7Cisg ICAgfQorI2VuZGlmIC8qIFRDWE9OQyAqLworCisjaWZkZWYgVElPQ1NUQVJUCisgICAgZGVidWco RjEwMCwidHRoYW5nIFRJT0NTVEFSVCIsIiIsMCk7CisgICAgaWYgKGlvY3RsKHR0eWZkLCBUSU9D U1RBUlQsIDApIDwgMCkgeworCWRlYnVnKEYxMDEsInR0aGFuZyBUSU9DU1RBUlQgZmFpbGVkIiwi IixlcnJubyk7CisgICAgfQorI2VuZGlmIC8qIFRJT0NTVEFSVCAqLworCisgICAgaWYgKGlvY3Rs KHR0eWZkLFRDU0VUQUYsJnR0Y3VyKSA8IDApIHsgLyogRmFpbCBpZiB3ZSBjYW4ndC4gKi8KKwlk ZWJ1ZyhGMTAxLCJ0dGhhbmcgVENTRVRBRiBmYWlsZWQiLCIiLGVycm5vKTsKKwlmY250bCh0dHlm ZCwgRl9TRVRGTCwgZmxhZ3MpOwkvKiBSZXN0b3JlIGZsYWdzICovCisJcmV0dXJuKC0xKTsJCQkv KiBiZWZvcmUgcmV0dXJuaW5nLiAqLworICAgIH0KKyAgICBtc2xlZXAoMzAwKTsJCQkvKiBHaXZl IG1vZGVtIHRpbWUgdG8gbm90aWNlLiAqLworCisjaWZuZGVmIE5PQ09URk1DCisKKy8qIE5vdywg ZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBzYXkgdGhpcyBpbiBTVklEIG9yIGFueSBtYW4gcGFnZSwg d2UgaGF2ZSAqLworLyogdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgZGV2aWNlLiAgVGhpcyBpcyBu b3QgbmVjZXNzYXJ5IGZvciBhbGwgc3lzdGVtcywgKi8KKy8qIGJ1dCBpdCdzIGltcG9zc2libGUg dG8gcHJlZGljdCB3aGljaCBvbmVzIG5lZWQgaXQgYW5kIHdoaWNoIG9uZXMgZG9uJ3QuICovCisK KyNpZmRlZiBBVFQ3MzAwCisvKgorICBTcGVjaWFsIGhhbmRsaW5nIGZvciBBVFQgNzMwMCBVTklY IFBDIGFuZCAzQjEsIHdoaWNoIGhhdmUgInBob25lIgorICByZWxhdGVkIGlvY3RsJ3MgZm9yIHRo ZWlyIGludGVybmFsIG1vZGVtcy4gIGF0dG1vZGVtIGhhcyBnZXR0eSBzdGF0dXMgYW5kCisgIG1v ZGVtLWluLXVzZSBiaXQuICBSZXBvcnRlZGx5IHRoZSBBVFQ3MzAwLzNCMSBQSU9DRElTQyBjYWxs IGlzIG5lY2Vzc2FyeSwKKyAgYnV0IGFsc28gcnVpbnMgdGhlIGZpbGUgZGVzY3JpcHRvciwgYW5k IG5vIG90aGVyIHBob25lKDcpIGlvY3RsIGNhbGwgY2FuIGZpeAorICBpdC4gIFdoYXRldmVyIGl0 IGRvZXMsIGl0IHNlZW1zIHRvIGVzY2FwZSBkZXRlY3Rpb24gd2l0aCBQSU9DR0VUQSBhbmQgVENH RVRBLgorICBUaGUgb25seSB3YXkgdG8gdW5kbyB0aGUgZGFtYWdlIGlzIHRvIGNsb3NlIHRoZSBm ZCBhbmQgdGhlbiByZW9wZW4gaXQuCisqLworICAgIGlmIChhdHRtb2RlbSAmIElTTU9ERU0pIHsK KwlkZWJ1ZyhGMTAwLCJ0dGhhbmcgYXR0bW9kZW0gY2xvc2Uvb3BlbiIsIiIsMCk7CisJaW9jdGwo dHR5ZmQsUElPQ1VOSE9MRCwmZGlhbGVyKTsgLyogUmV0dXJuIGNhbGwgdG8gaGFuZHNldC4gKi8K Kwlpb2N0bCh0dHlmZCxQSU9DRElTQywmZGlhbGVyKTsJLyogRGlzY29ubmVjdCBwaG9uZS4gKi8K KwljbG9zZSh0dHlmZCk7CQkJLyogQ2xvc2UgYW5kIHJlb3BlbiB0aGUgZmQuICovCisJdHR5ZmQg PSBwcml2X29wbih0dG5tc3YsIE9fUkRXUiB8IE9fTkRFTEFZKTsKKwlhdHRtb2RlbSAmPSB+SVNN T0RFTTsJCS8qIFBob25lIG5vIGxvbmdlciBpbiB1c2UuICovCisgICAgfQorI2Vsc2UgLyogIUFU VDczMDAgKi8KKy8qIEl0IHNlZW1zIHdlIGhhdmUgdG8gY2xvc2UgYW5kIG9wZW4gdGhlIGRldmlj ZSBmb3Igb3RoZXIgQVQmVCBzeXN0ZW1zICovCisvKiB0b28sIGFuZCB0aGlzIGlzIHRoZSBwbGFj ZSB0byBkbyBpdC4gIFRoZSBmb2xsb3dpbmcgY29kZSBkb2VzIHRoZSAqLworLyogZmFtb3VzIGNs b3NlKG9wZW4oLi4uKSkgbWFnaWMgYnkgZGVmYXVsdC4gIElmIHRoYXQgZG9lc24ndCB3b3JrIGZv ciB5b3UsICovCisvKiB0aGVuIHRyeSB1bmNvbW1lbnRpbmcgdGhlIGZvbGxvd2luZyBzdGF0ZW1l bnQgb3IgcHV0dGluZyAtRENMU09QTiBpbiAqLworLyogdGhlIG1ha2VmaWxlIENGTEFHUy4gKi8K KworLyogI2RlZmluZSBDTFNPUE4gKi8KKworI2lmbmRlZiBTQ08zMiAvKiBOb3QgbmVlZGVkIGJ5 LCBhbmQgaGFybWZ1bCB0bywgU0NPIFVOSVggMy4yIC8gWGVuaXggMi4zICovCisKKyNpZmRlZiBP X05ERUxBWQorI2RlZmluZSBPUEVORkxHUyBPX1JEV1IgfCBPX05ERUxBWQorI2Vsc2UKKyNkZWZp bmUgT1BFTkZMR1MgT19SRFdSCisjZW5kaWYKKworI2lmbmRlZiBDTFNPUE4KKy8qIFRoaXMgbWV0 aG9kIGlzIHVzZWQgYnkgZGVmYXVsdCwgaS5lLiB1bmxlc3MgQ0xTT1BOIGlzIGRlZmluZWQuICov CisvKiBJdCBpcyB0aG91Z2h0IHRvIGJlIHNhZmVyIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2luZG93 IHdoZXJlIGdldHR5ICovCisvKiBjYW4gc2VpemUgY29udHJvbCBvZiB0aGUgZGV2aWNlLiAgVGhl IGRyYXdiYWNrIGlzIHRoYXQgaXQgbWlnaHQgbm90IHdvcmsuICovCisKKyAgICBkZWJ1ZyhGMTAx LCJ0dGhhbmcgY2xvc2Uob3BlbigpKSwgT1BFTkZMR1MiLCIiLE9QRU5GTEdTKTsKKyAgICBjbG9z ZShwcml2X29wbih0dG5tc3YsIE9QRU5GTEdTKSk7CisKKyNlbHNlCisvKiBUaGlzIG1ldGhvZCBp cyB1c2VkIGlmIHlvdSAjZGVmaW5lIENMU09QTi4gIEl0IGlzIG1vcmUgbGlrZWx5IHRvIHdvcmsg Ki8KKy8qIHRoYW4gdGhlIHByZXZpb3VzIG1ldGhvZCwgYnV0IGl0J3MgYWxzbyBtb3JlIGRhbmdl cm91cy4gKi8KKworICAgIGRlYnVnKEYxMDEsInR0aGFuZyBjbG9zZS9vcGVuLCBPUEVORkxHUyIs IiIsT1BFTkZMR1MpOworICAgIGNsb3NlKHR0eWZkKTsKKyAgICBtc2xlZXAoMTApOworICAgIHR0 eWZkID0gcHJpdl9vcG4odHRubXN2LCBPUEVORkxHUyk7CS8qIE9wZW4gaXQgYWdhaW4gKi8KKyNl bmRpZiAvKiBDTFNPUE4gKi8KKyN1bmRlZiBPUEVORkxHUworCisjZW5kaWYgLyogU0NPMzIgKi8K KyNlbmRpZiAvKiBBVFQ3MzAwICovCisKKyNlbmRpZiAvKiBOT0NPVEZNQyAqLworCisvKiBOb3cg cHV0IGFsbCBmbGFncyAmIG1vZGVzIGJhY2sgdGhlIHdheSB3ZSBmb3VuZCB0aGVtLiAqLworLyog KERvZXMgdGhlIG9yZGVyIG9mIGlvY3RsICYgZmNudGwgbWF0dGVyID8gKSAqLworCisgICAgZGVi dWcoRjEwMCwidHRoYW5nIHJlc3RvcmUgc2V0dGluZ3MiLCIiLDApOworICAgIHR0Y3VyLmNfY2Zs YWcgPSB0dGNfc2F2ZTsJCS8qIEdldCBvbGQgc3BlZWQgYmFjay4gKi8KKyAgICBpZiAoaW9jdGwo dHR5ZmQsVENTRVRBRiwmdHRjdXIpIDwgMCkgLyogaW9jdGwgcGFyYW1ldGVycy4gKi8KKyAgICAg IHJldHVybigtMSk7CisjaWZkZWYgT19OREVMQVkKKy8qCisgIFRoaXMgaXMgcmVxdWlyZWQgZm9y IElCTSBSVCBhbmQgUlMvNjAwMCwgcHJvYmFibHkgaGVscHMgZWxzZXdoZXJlIHRvbyAoPykuCisg IEFmdGVyIGNsb3NpbmcgYSBtb2RlbSBsaW5lLCB0aGUgbW9kZW0gd2lsbCBwcm9iYWJseSBub3Qg YmUgYXNzZXJ0aW5nCisgIGNhcnJpZXIgYW55IG1vcmUsIHNvIHdlIHNob3VsZCBub3QgcmVxdWly ZSBjYXJyaWVyIGFueSBtb3JlLiAgSWYgdGhpcworICBjYXVzZXMgdHJvdWJsZSBvbiBub24tSUJN IFVOSVhlcywgY2hhbmdlIHRoZSAjaWZkZWYgdG8gdXNlIF9JQk1SMiByYXRoZXIKKyAgdGhhbiBP X05ERUxBWS4KKyovCisgICAgZmxhZ3MgJj0gfk9fTkRFTEFZOwkJCS8qIERvbid0IHJlcXVpcmUg Y2FycmllciBvbiByZW9wZW4gKi8KKyNlbmRpZiAvKiBPX05ERUxBWSAqLworICAgIGlmIChmY250 bCh0dHlmZCxGX1NFVEZMLGZsYWdzKSA8IDApCS8qIGZjbnRsIHBhcmFtZXRlcnMgKi8KKyAgICAg IHJldHVybigtMSk7CisKKyAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogbm90IEhQVVggKi8KKyNl bmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIEhV UF9QT1NJWCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KK30KKworLyoKKyAgTWFqb3IgY2hhbmdl IGluIDVBKDE3NCkuICBXZSB1c2VkIHRvIHVzZSBMUEFTUzgsIGlmIGl0IHdhcyBkZWZpbmVkLCB0 bworICBhbGxvdyA4LWJpdCBkYXRhIGFuZCBYb24vWG9mZiBmbG93IGNvbnRyb2wgYXQgdGhlIHNh bWUgdGltZS4gIEJ1dCB0aGlzCisgIExQQVNTOCBidXNpbmVzcyBzZWVtcyB0byBoYXZlIGJlZW4g Y2F1c2luZyB0cm91YmxlIGZvciBldmVyeWJvZHkgYnV0IG1lIQorICBGb3IgZXhhbXBsZSwgQW5u ZXggdGVybWluYWwgc2VydmVycywgY29tbW9ubHkgdXNlZCB3aXRoIEVuY29yZSBjb21wdXRlcnMs CisgIGRvIG5vdCBzdXBwb3J0IExQQVNTOCBldmVuIHRob3VnaCB0aGUgRW5jb3JlIGl0c2VsZiBk b2VzLiAgRGl0dG8gZm9yIG1hbnkKKyAgb3RoZXIgdGVybWluYWwgc2VydmVycywgVEVMTkVUIGNv bm5lY3Rpb25zLCBybG9naW4gY29ubmVjdGlvbnMsIGV0YyBldGMuCisgIE5vdywgcmVwb3J0ZWRs eSwgZXZlbiB2YW5pbGxhIDQuMyBCU0Qgc3lzdGVtcyBjYW4ndCBkbyB0aGlzIHJpZ2h0IG9uIHRo ZWlyCisgIHNlcmlhbCBsaW5lcywgZXZlbiB0aG91Z2ggTFBBU1M4IGlzIGEgZmVhdHVyZSBvZiA0 LjNCU0QuICBTbyBsZXQncyB0dXJuIGl0CisgIG9mZiBmb3IgZXZlcnlib2R5LiAgVGhhdCBtZWFu cyB3ZSBnb2VzIGJhY2sgdG8gdXNpbmcgcmF3IG1vZGUsIHdpdGggbm8KKyAgZmxvdyBjb250cm9s LiAgUGhvb2V5LgorCisgIE5PVEU6IFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgZmlyc3Qg cmVmZXJlbmNlIHRvIExQQVNTOCBpbiB0aGlzIGZpbGUsCisgIGFuZCBhZnRlciB0aGUgbGFzdCAj aW5jbHVkZSBzdGF0bWVudC4KKyovCisjaWZkZWYgTFBBU1M4CisjdW5kZWYgTFBBU1M4CisjZW5k aWYgLyogTFBBU1M4ICovCisKKy8qICBUIFQgUiBFIFMgIC0tICBSZXN0b3JlIHRlcm1pbmFsIHRv ICJub3JtYWwiIG1vZGUuICAqLworCisvKiBza2VAcGttYWIuc2U6IFRoZXJlIGFyZSB0d28gY2hv aWNlcyBmb3Igd2hhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBkby4KKyAqICgxKSBSZXN0b3JlIHRo ZSB0dHkgdG8gY3VycmVudCAibm9ybWFsIiBtb2RlLCB3aXRoIGNhcnJpZXIgdHJlYXRtZW50Cisg KiBhY2NvcmRpbmcgdG8gdHRjYXJyLCB0byBiZSB1c2VkIGFmdGVyIGV2ZXJ5IGtlcm1pdCBjb21t YW5kLiAoMikgUmVzdG9yZQorICogdGhlIHR0eSB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGJlZm9y ZSBrZXJtaXQgb3BlbmVkIGl0LiBUaGVzZSBjaG9pY2VzCisgKiBjb25mbGljdCwgc2luY2UgdHRv bGQgY2FuJ3QgaG9sZCBib3RoIGNob2ljZXMgb2YgdHR5IHBhcmFtZXRlcnMuICB0dHJlcygpCisg KiBpcyBjdXJyZW50bHkgYmVpbmcgY2FsbGVkIGFzIGluIGNob2ljZSAoMSksIGJ1dCB0dG9sZCBi YXNpY2FsbHkgaG9sZHMKKyAqIHRoZSBpbml0aWFsIHBhcmFtZXRlcnMsIGFzIGluICgyKSwgYW5k IHRoZSBkZXNjcmlwdGlvbiBhdCB0aGUgYmVnaW5uaW5nCisgKiBvZiB0aGlzIGZpbGUgc2F5cyAo MikuCisgKgorICogSSBkb24ndCB0aGluayByZXN0b3JpbmcgdHR5IHBhcmFtZXRlcnMgYWZ0ZXIg YWxsIGtlcm1pdCBjb21tYW5kcyBtYWtlcworICogbXVjaCBvZiBhIGRpZmZlcmVuY2UuICBSZXN0 b3JpbmcgdGhlbSB1cG9uIGV4aXQgZnJvbSBrZXJtaXQgbWF5IGJlIG9mCisgKiBzb21lIHVzZSBp biBzb21lIGNhc2VzICh3aGVuIHRoZSBsaW5lIGlzIG5vdCByZXN0b3JlZCBhdXRvbWF0aWNhbGx5 IG9uCisgKiBjbG9zZSwgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0pLgorICoKKyAqIEkgY2FuJ3Qg Y2hvb3NlIHdoaWNoIG9uZSBpdCBzaG91bGQgYmUsIHNvIEkgaGF2ZW4ndCBjaGFuZ2VkIGl0LiBJ dAorICogcHJvYmFibHkgd29ya3MgYXMgaXQgaXMsIHRvby4gSXQgd291bGQgcHJvYmFibHkgZXZl biB3b3JrIGV2ZW4gd2l0aAorICogdHRyZXMoKSBlbnRpcmVseSBkZWxldGVkLi4uCisgKgorICog KGZyb20gZmRjOiBBY3R1YWxseSwgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBpbiByZW1vdGUgbW9k ZSB0b28sIHNvCisgKiBpdCByZXN0b3JlcyB0aGUgY29uc29sZSAoY29tbWFuZCkgdGVybWluYWwg dG8gd2hhdGV2ZXIgbW9kZSBpdCB3YXMKKyAqIGluIGJlZm9yZSBwYWNrZXQgb3BlcmF0aW9ucyBi ZWdhbiwgc28gdGhhdCBjb21tYW5kcyB3b3JrIHJpZ2h0IGFnYWluLikKKyAqLworaW50Cit0dHJl cygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0aGUgdHR5IHRv IG5vcm1hbC4gKi8KKyAgICBpbnQgeDsKKworICAgIGlmICh0dHlmZCA8IDApIHJldHVybigtMSk7 ICAgICAgICAgIC8qIE5vdCBvcGVuLiAqLworCisgICAgaWYgKHR0ZmRmbGcpIHJldHVybigwKTsJ CS8qIERvbid0IG1lc3Mgd2l0aCB0ZXJtaW5hbCBtb2RlcyBpZiAqLworCQkJCQkvKiB3ZSBnb3Qg dHR5ZmQgZnJvbSBhbm90aGVyIHByb2Nlc3MgKi8KKyNpZmRlZglORVRDT05OCisgICAgaWYgKG5l dGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgdHZ0ZmxnID0gMDsK KyNpZmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgICAgICB7CisJICAgIGV4 dGVybiBpbnQgdGNwX25vZGVsYXk7CS8qIEp1c3QgcHV0IHRoaXMgYmFjayBpZiBuZWNlc3Nhcnkg Ki8KKwkgICAgaWYgKHR0bmV0ID09IE5FVF9UQ1BCKSB7CisJCWlmIChub2RlbGF5X3NhdiA+IC0x KSB7CisJCSAgICBub19kZWxheSh0dHlmZCxub2RlbGF5X3Nhdik7CisJCSAgICBub2RlbGF5X3Nh diA9IC0xOworCQl9CisJICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIFRDUF9OT0RFTEFZICov CisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgeworICAgICAg ICAgICAgaW50IHJjID0gLTE7CisgICAgICAgICAgICBpZiAoKHJjID0gdG5zZXRmbG93KHR0Zmxv dykpIDwgMCkKKwkgICAgICByZXR1cm4ocmMpOworICAgICAgICAgICAgaWYgKHR0c3BlZWQgPD0g MCkgCisJICAgICAgdHRzcGVlZCA9IHRuY19nZXRfYmF1ZCgpOworICAgICAgICAgICAgZWxzZSBp ZiAoKHJjID0gdG5jX3NldF9iYXVkKHR0c3BlZWQpKSA8IDApCisJICAgICAgcmV0dXJuKHJjKTsK KyAgICAgICAgICAgIHRuY19zZXRfZGF0YXNpemUoOCk7CisJICAgIHRuY19zZXRfc3RvcHNpemUo c3RvcGJpdHMpOworCisjaWZkZWYgSFdQQVJJVFkKKyAgICAgICAgICAgIGlmIChod3Bhcml0eSkg eworICAgICAgICAgICAgICAgIHN3aXRjaCAoaHdwYXJpdHkpIHsKKwkJICBjYXNlICdlJzoJCQkv KiBFdmVuICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyAr IGV2ZW4gcGFyaXR5IiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHko Myk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkgIGNhc2UgJ28nOgkJCS8qIE9kZCAq LworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyA4IGJpdHMgKyBvZGQgcGFy aXR5IiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMik7CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworCQkgIGNhc2UgJ20nOgkJCS8qIE1hcmsgKi8KKyAgICAg ICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxpZCBwYXJpdHk6 IG1hcmsiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSg0KTsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAncyc6CQkJLyogU3BhY2UgKi8KKyAg ICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxpZCBwYXJp dHk6IHNwYWNlIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoNSk7 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0gZWxzZQorI2VuZGlmIC8qIEhXUEFSSVRZICovCisJICAgIHsKKyAgICAgICAgICAgICAg ICB0bmNfc2V0X3Bhcml0eSgxKTsgICAgICAgICAgICAgIC8qIE5vbmUgKi8KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHR2dGZsZyA9IDA7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisJ cmV0dXJuKDApOworICAgIH0KKyNlbmRpZgkvKiBORVRDT05OICovCisjaWZkZWYgTkVUQ01ECisg ICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5F VFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworCisv KiBSZWFsIHRlcm1pbmFsIGRldmljZSwgc28gcmVzdG9yZSBpdHMgb3JpZ2luYWwgbW9kZXMgKi8K KworI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIEZvciBQT1NJWCBsaWtlIHRoaXMgKi8KKyAgICBk ZWJ1ZyhGMTAwLCJ0dHJlcyBCU0Q0NE9SUE9TSVgiLCIiLDApOworICAgIHggPSB0Y3NldGF0dHIo dHR5ZmQsVENTQURSQUlOLCZ0dG9sZCk7CisjZWxzZQkJCQkJLyogRm9yIGFsbCBvdGhlcnMuLi4g Ki8KKyNpZmRlZiBBVFRTViAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgQVQmVCB2 ZXJzaW9ucy4uLiAqLworICAgIGRlYnVnKEYxMDAsInR0cmVzIEFUVFNWIiwiIiwwKTsKKyAgICB4 ID0gaW9jdGwodHR5ZmQsVENTRVRBVywmdHRvbGQpOwkvKiBSZXN0b3JlIHR0eSBtb2RlcyB0aGlz IHdheS4gKi8KKyNlbHNlCisvKiBIZXJlIHdlIHJlc3RvcmUgdGhlIG1vZGVzIGZvciBCU0QgKi8K KworI2lmZGVmIExQQVNTOAkJCQkvKiBVbmRvICJwYXNzOCIgaWYgaXQgd2VyZSBkb25lICovCisg ICAgaWYgKGxtb2RlZikgeworCWlmIChpb2N0bCh0dHlmZCxUSU9DTFNFVCwmbG1vZGUpIDwgMCkK KwkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIGZhaWxlZCIsIiIsMCk7CisJZWxzZQorCSAg ZGVidWcoRjEwMCwidHRyZXMgVElPQ0xTRVQgb2siLCIiLDApOworICAgIH0KKyNlbmRpZiAvKiBM UEFTUzggKi8KKworI2lmZGVmIENLX0RUUkNUUwkJICAgLyogVW5kbyBoYXJkd2FyZSBmbG93IGlm IGl0IHdlcmUgZG9uZSAqLworICAgIGlmIChsbW9kZWYpIHsKKyAJaWYgKGlvY3RsKHR0eWZkLFRJ T0NMU0VULCZsbW9kZSkgPCAwKQorIAkgIGRlYnVnKEYxMDAsInR0cmVzIFRJT0NMU0VUIGZhaWxl ZCIsIiIsMCk7CisgCWVsc2UKKyAJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9DTFNFVCBvayIsIiIs MCk7CisgICAgfQorI2VuZGlmIC8qIENLX0RUUkNUUyAqLworCisjaWZkZWYgVElPQ0dFVEMJCQkJ LyogUHV0IGJhY2sgc3BlY2lhbCBjaGFyYWN0ZXJzICovCisgICAgaWYgKHRjaGFyZiAmJiAoeGxv Y2FsID09IDApKSB7CisJaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRDLCZ0Y2hvbGQpIDwgMCkKKwkg IGRlYnVnKEYxMDAsInR0cmVzIFRJT0NTRVRDIGZhaWxlZCIsIiIsMCk7CisJZWxzZQorCSAgZGVi dWcoRjEwMCwidHRyZXMgVElPQ1NFVEMgb2siLCIiLDApOworICAgIH0KKyNlbmRpZiAvKiBUSU9D R0VUQyAqLworCisjaWZkZWYgVElPQ0dMVEMJCQkJLyogUHV0IGJhY2sgbG9jYWwgc3BlY2lhbCBj aGFyYWN0ZXJzICovCisgICAgaWYgKGx0Y2hhcmYgJiYgKHhsb2NhbCA9PSAwKSkgeworCWlmIChp b2N0bCh0dHlmZCxUSU9DU0xUQywmbHRjaG9sZCkgPCAwKQorCSAgZGVidWcoRjEwMCwidHRyZXMg VElPQ1NMVEMgZmFpbGVkIiwiIiwwKTsKKwllbHNlCisJICBkZWJ1ZyhGMTAwLCJ0dHJlcyBUSU9D U0xUQyBvayIsIiIsMCk7CisgICAgfQorI2VuZGlmIC8qIFRJT0NHTFRDICovCisKKyNpZmRlZiBC RUxMVjEwCisgICAgZGVidWcoRjEwMCwidHRyZXMgQkVMTFYxMCIsIiIsMCk7CisgICAgeCA9IGlv Y3RsKHR0eWZkLFRJT0NTRVRQLCZ0dG9sZCk7CS8qIFJlc3RvcmUgYm90aCBzdHJ1Y3RzICovCisg ICAgeCA9IGlvY3RsKHR0eWZkLFRJT0NTREVWLCZ0ZG9sZCk7CisjZWxzZQorICAgIGRlYnVnKEYx MDAsInR0cmVzIHN0dHkiLCIiLDApOworICAgIHggPSBzdHR5KHR0eWZkLCZ0dG9sZCk7ICAgICAg ICAgICAgIC8qIFJlc3RvcmUgdHR5IG1vZGVzIHRoZSBvbGQgd2F5LiAqLworI2VuZGlmIC8qIEJF TExWMTAgKi8KKworICAgIGlmICgheGxvY2FsKQorICAgICAgbXNsZWVwKDEwMCk7CQkJLyogVGhp cyByZXBsYWNlcyBzbGVlcCgxKS4uLiAqLworCQkJCQkvKiBQdXQgYmFjayBzbGVlcCgxKSBpZiB0 dHkgaXMgKi8KKwkJCQkJLyogbWVzc2VkIHVwIGFmdGVyIGNsb3NlLiAqLworI2VuZGlmIC8qIEFU VFNWICovCisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dHJl cyByZXN1bHQiLCIiLHgpOworI2lmbmRlZiBRTlgKKyAgICBpZiAoeCA8IDApIGRlYnVnKEYxMDEs InR0cmVzIGVycm5vIiwiIixlcnJubyk7CisjZW5kaWYgLyogUU5YICovCisKKyNpZmRlZiBBSVhS UworI2lmbmRlZiBBSVg0MQorICAgIHggPSBpb2N0bCh0dHlmZCwgdHRsZCAmIDEgPyBUWEFERENE IDogVFhERUxDRCwgInJ0cyIpOworICAgIGRlYnVnKEYxMDEsInR0cmVzIEFJWCBsaW5lIGRpc2Np cGxpbmUgcnRzIHJlc3RvcmUiLCIiLHgpOworI2VuZGlmIC8qIEFJWDQxICovCisjZW5kaWYgLyog QUlYUlMgKi8KKworI2lmZGVmIEJTRDQxCisgICAgaWYgKHR0bGQgPiAtMSkgewkJCS8qIFB1dCBi YWNrIGxpbmUgZGlzY2lwbGluZSAqLworCXggPSBpb2N0bCh0dHlmZCwgVElPQ1NFVEQsICZ0dGxk KTsKKwlkZWJ1ZyhGMTAxLCJ0dHJlcyBCU0Q0MSBsaW5lIGRpc2NpcGxpbmUgcmVzdG9yZSIsIiIs eCk7CisJaWYgKHggPCAwKSBkZWJ1ZyhGMTAxLCIuLi5pb2N0bCBlcnJubyIsIiIsZXJybm8pOwor CXR0bGQgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogQlNENDEgKi8KKworI2lmZGVmIHNvbnlfbmV3 cworICAgIHggPSB4bG9jYWwgPyBrbV9leHQgOiBrbV9jb247CS8qIFJlc3RvcmUgS2FuamkgbW9k ZS4gKi8KKyAgICBpZiAoeCAhPSAtMSkgewkJCS8qIE1ha2Ugc3VyZSB3ZSBrbm93IG9yaWdpbmFs IG1vZGVzLiAqLworCWlmIChpb2N0bCh0dHlmZCxUSU9DS1NFVCwgJngpIDwgMCkgeworCSAgICBw ZXJyb3IoInR0cmVzIGNhbid0IHNldCBLYW5qaSBtb2RlIik7CisJICAgIGRlYnVnKEYxMDEsInR0 cmVzIGVycm9yIHNldHRpbmcgS2FuamkgbW9kZSIsIiIseCk7CisJICAgIHJldHVybigtMSk7CisJ fQorICAgIH0KKyAgICBkZWJ1ZyhGMTAwLCJ0dHJlcyBzZXQgS2FuamkgbW9kZSBvayIsIiIsMCk7 CisjZW5kaWYgLyogc29ueV9uZXdzICovCisKKyAgICB0dnRmbGcgPSAwOwkJCQkvKiBJbnZhbGlk YXRlIHRlcm1pbmFsIG1vZGUgc2V0dGluZ3MgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dHJlcyByZXR1 cm4gY29kZSIsIiIseCk7CisgICAgcmV0dXJuKHgpOworfQorCisjaWZuZGVmIE5PVVVDUAorCisv KiAgVCBUIEMgSCBLIFAgSSBEICAtLSAgQ2hlY2sgbG9ja2ZpbGUgcGlkICAqLworLyoKKyAgUmVh ZCBwaWQgZnJvbSBsb2NrZmlsZSBuYW1lZCBmLCBjaGVjayB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQu CisgIElmIHNvLCByZXR1cm4gMS4KKyAgT24gZmFpbHVyZSB0byByZWFkIHBpZCwgcmV0dXJuIDEu CisgIE90aGVyd2lzZSwgdHJ5IHRvIGRlbGV0ZSBsb2NrZmlsZSBmIGFuZCByZXR1cm4gMCBpZiBz dWNjZXNzZnVsLCBlbHNlIDEuCisqLworc3RhdGljIGludAordHRjaGtwaWQoZikgY2hhciAqZjsg eworICAgIGludCBwaWQsIG15cGlkLCB4OworICAgIHBpZCA9IHR0cnBpZChmKTsJCQkvKiBSZWFk IHBpZCBmcm9tIGZpbGUuICovCisgICAgaWYgKHBpZCA+IC0xKSB7CQkJLyogSWYgd2Ugd2VyZSBh YmxlIHRvIHJlYWQgdGhlIHBpZC4uICovCisJZGVidWcoRjEwMSwidHRjaGtwaWQgbG9jayBwaWQi LCIiLHBpZCk7CisJZXJybm8gPSAwOwkJCS8qIFNlZSBpZiBwcm9jZXNzIHN0aWxsIGV4aXN0cy4g Ki8KKwlteXBpZCA9IChpbnQpZ2V0cGlkKCk7CQkvKiBHZXQgbXkgb3duIHBpZC4gKi8KKwlkZWJ1 ZyhGMTAxLCJ0dGNoa3BpZCBteSBwaWQiLCIiLG15cGlkKTsKKwlpZiAocGlkID09IG15cGlkKSB7 CQkvKiBJdCdzIG1lISAqLworCSAgICB4ID0gLTE7CQkJLyogU28gSSBjYW4gZGVsZXRlIGl0ICov CisJICAgIGVycm5vID0gRVNSQ0g7CQkvKiBwcmV0ZW5kIGl0J3MgaW52YWxpZCAqLworCX0gZWxz ZSB7CQkJLyogSXQncyBub3QgbWUgKi8KKwkgICAgeCA9IGtpbGwoKFBJRF9UKXBpZCwgMCk7CS8q IFNlZSBpZiBpdCdzIGEgbGl2ZSBwcm9jZXNzICovCisJICAgIGRlYnVnKEYxMDEsInR0Y2hrcGlk IGtpbGwgZXJybm8iLCIiLGVycm5vKTsKKwl9CisJZGVidWcoRjEwMSwidHRjaGtwaWQgcGlkIHRl c3QiLCIiLHgpOworCWlmICh4IDwgMCAmJiBlcnJubyA9PSBFU1JDSCkgeyAvKiBwaWQgaXMgaW52 YWxpZCAqLworCSAgICBkZWJ1ZyhGMTExLCJyZW1vdmluZyBzdGFsZSBsb2NrIixmLHBpZCk7CisJ ICAgIGlmICghYmFja2dyZCkKKwkgICAgICBwcmludGYoIlJlbW92aW5nIHN0YWxlIGxvY2sgJXMg KHBpZCAlZCB0ZXJtaW5hdGVkKVxuIiwgZiwgcGlkKTsKKwkgICAgcHJpdl9vbigpOworCSAgICB4 ID0gdW5saW5rKGYpOwkJLyogUmVtb3ZlIHRoZSBsb2NrZmlsZS4gKi8KKwkgICAgcHJpdl9vZmYo KTsKKwkgICAgZGVidWcoRjExMSwidHRjaGtwaWQgdW5saW5rIixmLHgpOworCSAgICBpZiAoeCA+ IC0xKQorCSAgICAgIHJldHVybigwKTsJCS8qIERldmljZSBpcyBub3QgbG9ja2VkIGFmdGVyIGFs bCAqLworCSAgICBlbHNlIGlmICghYmFja2dyZCkKKwkgICAgICBwZXJyb3IoZik7CisJfQorCXJl dHVybigxKTsKKyAgICB9CisgICAgcmV0dXJuKDEpOwkJCQkvKiBGYWlsdXJlIHRvIHJlYWQgcGlk ICovCit9CisKKyNpZmRlZiBIUFVYCisKKy8qIEFsaWFzZXMgKGRpZmZlcmVudCBkcml2ZXJzKSBm b3IgSFAtVVggZGlhbG91dCBkZXZpY2VzOiAqLworCitzdGF0aWMgY2hhciAqZGV2cHJlZml4W10g PSB7ICJ0dHkiLCAidHR5ZCIsICJjdWwiLCAiY3VhIiwgImN1YWQiLCAiY3VsZCIsICIiIH07Citz dGF0aWMgaW50IHR0eWRleGlzdHMgPSAwOworCisjZW5kaWYgLyogSFBVWCAqLworCisvKiAgVCBU IFIgUCBJIEQgIC0tICBSZWFkIHBpZCBmcm9tIGxvY2tmaWxlICJuYW1lIiAqLworCitzdGF0aWMg aW50Cit0dHJwaWQobmFtZSkgY2hhciAqbmFtZTsgeworICAgIGxvbmcgbGVuOworICAgIGludCB4 LCBmZCwgcGlkOworICAgIHNob3J0IHNwaWQ7CisgICAgY2hhciBidWZbMzJdOworCisgICAgZGVi dWcoRjExMCwidHRycGlkIixuYW1lLDApOworICAgIGlmICghbmFtZSkgcmV0dXJuKC0xKTsKKyAg ICBpZiAoISpuYW1lKSByZXR1cm4oLTEpOworICAgIHByaXZfb24oKTsKKyAgICBsZW4gPSB6Y2hr aShuYW1lKTsJCQkvKiBHZXQgZmlsZSBsZW5ndGggKi8KKyAgICBwcml2X29mZigpOworICAgIGRl YnVnKEYxMDEsInR0cnBpZCB6Y2hraSIsIiIsbGVuKTsKKyAgICBpZiAobGVuIDwgMCkKKyAgICAg IHJldHVybigtMSk7CisgICAgaWYgKGxlbiA+IDMxKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBw cml2X29uKCk7CisgICAgZmQgPSBvcGVuKG5hbWUsT19SRE9OTFkpOwkJLyogVHJ5IHRvIG9wZW4g bG9ja2ZpbGUuICovCisgICAgcHJpdl9vZmYoKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHJwaWQgZmQi LCIiLGZkKTsKKyAgICBpZiAoZmQgPD0gMCkKKyAgICAgIHJldHVybigtMSk7CisvKgorICBIZXJl IHdlIHRyeSB0byBiZSBmbGV4aWJsZSBhbmQgYWxsb3cgZm9yIGFsbCBkaWZmZXJlbnQgYmluYXJ5 IGFuZCBzdHJpbmcKKyAgZm9ybWF0cyBhdCBydW50aW1lLCByYXRoZXIgdGhhbiBhIHNwZWNpZmlj IGZvcm1hdCBmb3IgZWFjaCBjb25maWd1cmF0aW9uCisgIGhhcmR3aXJlZCBhdCBjb21waWxlIHRp bWUuCisqLworICAgIHBpZCA9IC0xOworI2lmbmRlZiBDT0hFUkVOVAorLyoKKyAgQ09IRVJFTlQg dXNlcyBhIHN0cmluZyBQSUQgYnV0IHdpdGhvdXQgbGVhZGluZyBzcGFjZXMgb3IgMCdzLCBzbyB0 aGVyZSBpcworICBubyB3YXkgdG8gdGVsbCBmcm9tIHRoZSBmaWxlJ3MgbGVuZ3RoIHdoZXRoZXIg aXQgY29udGFpbnMgYSBzdHJpbmcgb3IgYmluYXJ5CisgIHBpZC4gIFNvIGZvciBDT0hFUkVOVCBv bmx5LCB3ZSBvbmx5IGFsbG93IHN0cmluZyBwaWRzLiAgRm9yIGFsbCBvdGhlcnMsIHdlCisgIGRl Y2lkZSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgbG9ja2ZpbGUuCisqLworICAgIGlmIChsZW4g PiA0KSB7CQkJLyogSWYgZmlsZSA+IDQgYnl0ZXMgaXQncyBhIHN0cmluZyAqLworI2VuZGlmIC8q IENPSEVSRU5UICovCisJeCA9IHJlYWQoZmQsYnVmLChpbnQpbGVuKTsKKwlkZWJ1ZyhGMTExLCJ0 dHJwaWQgc3RyaW5nIHJlYWQiLGJ1Zix4KTsKKwlpZiAoeCA8IDApIHsKKwkgICAgcGlkID0gLTE7 CisJfSBlbHNlIHsKKwkgICAgYnVmWzMxXSA9ICdcMCc7CisJICAgIHggPSBzc2NhbmYoYnVmLCIl ZCIsJnBpZCk7CS8qIEdldCB0aGUgaW50ZWdlciBwaWQgZnJvbSBpdC4gKi8KKwl9CisjaWZuZGVm IENPSEVSRU5UCisgICAgfSBlbHNlIGlmIChsZW4gPT0gNCkgewkJLyogNCBieXRlcyBzbyBiaW5h cnkgKi8KKwl4ID0gcmVhZChmZCwgKGNoYXIgKikmcGlkLCA0KTsJLyogUmVhZCB0aGUgYnl0ZXMg aW50byBhbiBpbnQgKi8KKwlkZWJ1ZyhGMTAxLCJ0dHJwaWQgaW50ZWdlciByZWFkIiwiIix4KTsK KwlpZiAoeCA8IDQpCisJICBwaWQgPSAtMTsKKyAgICB9IGVsc2UgaWYgKGxlbiA9PSAyKSB7CQkv KiAyIGJ5dGVzIGJpbmFyeSAqLworCXggPSByZWFkKGZkLCAoY2hhciAqKSZzcGlkLCAyKTsJLyog UmVhZCB0aGUgYnl0ZXMgaW50byBhIHNob3J0ICovCisJZGVidWcoRjEwMSwidHRycGlkIHNob3J0 IHJlYWQiLCIiLHgpOworCWlmICh4IDwgMikKKwkgIHBpZCA9IC0xOworCWVsc2UKKwkgIHBpZCA9 IHNwaWQ7CisgICAgfSBlbHNlCisgICAgICBwaWQgPSAtMTsKKyNlbmRpZiAvKiBDT0hFUkVOVCAq LworICAgIGNsb3NlKGZkKTsJCQkJLyogQ2xvc2UgdGhlIGxvY2tmaWxlICovCisgICAgZGVidWco RjEwMSwidHRycGlkIHBpZCIsIiIscGlkKTsKKyAgICByZXR1cm4ocGlkKTsKK30KKyNlbmRpZiAv KiBOT1VVQ1AgKi8KKworLyogIFQgVCBMIE8gQyBLICAqLworCisvKgorICBUaGlzIGZ1bmN0aW9u IGF0dGVtcHRzIHRvIGNvb3JkaW5hdGUgdXNlIG9mIHRoZSBjb21tdW5pY2F0aW9uIGRldmljZSB3 aXRoCisgIG90aGVyIGNvcGllcyBvZiBLZXJtaXQgYW5kIGFueSBvdGhlciBwcm9ncmFtIHRoYXQg Zm9sbG93cyB0aGUgVVVDUAorICBkZXZpY2UtbG9ja2luZyBjb252ZW50aW9ucywgd2hpY2gsIHVu Zm9ydHVuYXRlbHksIHZhcnkgYW1vbmcgZGlmZmVyZW50IFVOSVgKKyAgaW1wbGVtZW50YXRpb25z LiAgVGhlIGlkZWEgaXMgdG8gbG9vayBmb3IgYSBmaWxlIG9mIGEgY2VydGFpbiBuYW1lLCB0aGUK KyAgImxvY2tmaWxlIiwgaW4gYSBjZXJ0YWluIGRpcmVjdG9yeS4gIElmIHN1Y2ggYSBmaWxlIGlz IGZvdW5kLCB0aGVuIHRoZSBsaW5lCisgIGlzIHByZXN1bWVkIHRvIGJlIGluIHVzZSwgYW5kIEtl cm1pdCBzaG91bGQgbm90IHVzZSBpdC4gIElmIG5vIHN1Y2ggZmlsZSBpcworICBmb3VuZCwgS2Vy bWl0IGF0dGVtcHRzIHRvIGNyZWF0ZSBvbmUgc28gdGhhdCBvdGhlciBwcm9ncmFtcyB3aWxsIG5v dCB1c2UgdGhlCisgIHNhbWUgbGluZSBhdCB0aGUgc2FtZSB0aW1lLiAgQmVjYXVzZSB0aGUgbG9j a2ZpbGUgYW5kL29yIHRoZSBkaXJlY3RvcnkgaXQncworICBpbiBtaWdodCBsYWNrIHdyaXRlIHBl cm1pc3Npb24gZm9yIHRoZSBwZXJzb24gcnVubmluZyBLZXJtaXQsIEtlcm1pdCBjb3VsZAorICBm aW5kIGl0c2VsZiBydW5uaW5nIHNldHVpZCB0byB1dWNwIG9yIG90aGVyIHVzZXIgdGhhdCBkb2Vz IGhhdmUgdGhlCisgIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucy4gIEF0IHN0YXJ0dXAsIEtlcm1pdCBo YXMgY2hhbmdlZCBpdHMgZWZmZWN0aXZlIHVpZCB0bworICB0aGUgdXNlcidzIHJlYWwgdWlkLCBh bmQgc28gdHRsb2NrKCkgbXVzdCBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwKKyAgZWZmZWN0 aXZlIHVpZCBpbiBvcmRlciB0byBjcmVhdGUgdGhlIGxvY2tmaWxlLCBhbmQgdGhlbiBiYWNrIGFn YWluIHRvIHRoZQorICByZWFsIHVpZCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBhY2Nlc3MgdG8g b3RoZXIgZGlyZWN0b3JpZXMgb3IgZmlsZXMgb3duZWQKKyAgYnkgdGhlIHVzZXIgdGhlIHByb2dy YW0gaXMgc2V0dWlkIHRvLgorCisgIFRvdGFsbHkgcmV3cml0dGVuIGZvciBDLUtlcm1pdCA1QSB0 byBlbGltaW5hdGUgd2luZG93cyBvZiB2dWxuZXJhYmlsaXR5LAorICBiYXNlZCBvbiBzdWdnZXN0 aW9ucyBmcm9tIFdhcnJlbiBUdWNrZXIuICBDYWxsIHdpdGggcG9pbnRlciB0byBuYW1lIG9mCisg IHR0eSBkZXZpY2UuICBSZXR1cm5zOgorCisgICAwIG9uIHN1Y2Nlc3MKKyAgLTEgb24gZmFpbHVy ZQorCisgIE5vdGU6IE9uY2UgcHJpdmlsZWdlcyBhcmUgdHVybmVkIG9uIHVzaW5nIHByaXZfb24o KSwgaXQgaXMgZXNzZW50aWFsIHRoYXQKKyAgdGhleSBhcmUgdHVybmVkIG9mZiBhZ2FpbiBiZWZv cmUgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorKi8KKyNpZmRlZiBTVlI0CQkJCS8qIExvY2tmaWxl IHVzZXMgZGV2aWNlIG51bWJlcnMuICovCisvKgorICBBbHRob3VnaCBJIGNhbid0IGZpbmQgdGhp cyBpbiB3cml0aW5nIGFueXdoZXJlIChlLmcuIGluIFNWSUQgZm9yIFNWUjQpLAorICBpdCBpcyB0 aGUgYmVoYXZpb3Igb2YgdGhlICJyZWZlcmVuY2UgdmVyc2lvbiIgb2YgU1ZSNCwgaS5lLiB0aGUg SW50ZWwKKyAgcG9ydCBmcm9tIFVOSVggU3lzdGVtcyBMYWJvcmF0b3JpZXMsIHRoZW4gY2FsbGVk IFVuaXZlbCBVbml4V2FyZSwKKyAgdGhlbiBjYWxsZWQgTm92ZWxsIFVuaXhXYXJlLCB0aGVuIGNh bGxlZCBTQ08gVW5peHdhcmUsIHRoZW4gY2FsbGVkIENhbGRlcmEKKyAgT3BlbiBVTklYLi4uICBJ dCBhbHNvIG1ha2VzIG11Y2ggbW9yZSBzZW5zZSB0aGFuIGRldmljZS1uYW1lLWJhc2VkIGxvY2tm aWxlcworICBzaW5jZSB0aGVyZSBjYW4gYmUgbXVsdGlwbGUgbmFtZXMgZm9yIHRoZSBzYW1lIGRl dmljZSwgc3ltbGlua3MsIGV0Yy4KKyovCisjaWZuZGVmIE5PTEZERVZOTworI2lmbmRlZiBMRkRF Vk5PCQkJCS8qIERlZmluZSB0aGlzIGZvciBTVlI0ICovCisjaWZuZGVmIEFJWFJTCQkJCS8qIEJ1 dCBub3QgZm9yIFJTLzYwMDAgQUlYIDMuMiwgZXRjLiAqLworI2lmbmRlZiBCU0Q0NAkJCQkvKiBJ ZiBhbnlib2R5IGVsc2UgbmVlZHMgaXQuLi4gKi8KKyNpZm5kZWYgX18zODZCU0RfXworI2lmbmRl ZiBfX0ZyZWVCU0RfXworI2lmbmRlZiBIUFVYMTAKKyNpZm5kZWYgSVJJWDUxCQkJCS8qIFNHSSBJ UklYIDUuMSBvciBsYXRlciAqLworI2lmbmRlZiBDS19TQ09WNQkJCS8qIFNDTyBPcGVuIFNlcnZl ciA1LjAgKi8KKyNkZWZpbmUgTEZERVZOTworI2VuZGlmIC8qIENLX1NDT1Y1ICovCisjZW5kaWYg LyogSVJJWDUxICovCisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyogX19GcmVlQlNEX18g Ki8KKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAv KiBBSVhSUyAqLworI2VuZGlmIC8qIExGREVWTk8gKi8JCQkvKiAuLi4gZGVmaW5lIGl0IGhlcmUg b3Igb24gQ0MgKi8KKyNlbmRpZiAvKiBOT0xGREVWTk8gKi8KKyNlbmRpZiAvKiBTVlI0ICovCQkJ LyogY29tbWFuZCBsaW5lLiAqLworCisjaWZkZWYgQ09IRVJFTlQKKyNkZWZpbmUgTEZERVZOTwor I2VuZGlmIC8qIENPSEVSRU5UICovCisKKy8qCisgIEZvciBwbGF0Zm9ybXMgd2hlcmUgdGhlIGxv Y2tmaWxlIG5hbWUgaXMgbWFkZSBmcm9tIGRldmljZS9tYWpvci9taW5vcgorICBkZXZpY2UgbnVt YmVyLCBhcyBpbiBTVlI0LiAgV2hpY2gsIGlmIHdlIG11c3QgaGF2ZSBsb2NrZmlsZXMgYXQgYWxs LCBpcworICBieSBmYXIgdGhlIGJlc3QgZm9ybWF0LCBzaW5jZSBpdCBlbGltaW5hdGVzIGFsbCB0 aGUgY29uZnVzaW9uIHRoYXQgc3RlbXMKKyAgZnJvbSBtdWx0aXBsZSBuYW1lcyAob3IgZHJpdmVy cykgZm9yIHRoZSBzYW1lIHBvcnQsIG5vdCB0byBtZW50aW9uCisgIHN5bWxpbmtzLiAgSXQgbWln aHQgZXZlbiBiZSBhIGdvb2QgaWRlYSB0byBzdGFydCB1c2luZyB0aGlzIGZvcm0gZXZlbgorICBv biBwbGF0Zm9ybXMgd2hlcmUgaXQncyBub3Qgc3VwcG9ydGVkLCBhbG9uZ3NpZGUgdGhlIG5vcm1h bCBmb3JtcyBmb3IgdGhvc2UKKyAgcGxhdGZvcm1zLCBpbiBvcmRlciB0byBnZXQgcGVvcGxlIHVz ZWQgdG8gaXQuLi4KKyovCisjaWZkZWYgTEZERVZOTworI2lmbmRlZiBtYWpvcgkJCQkvKiBJZiB3 ZSBkaWRuJ3QgZmluZCBpdCAqLworI2lmZGVmIFNWUjQJCQkJLyogdGhlbiBmb3IgU3lzIFYgUjQg Ki8KKyNpbmNsdWRlIDxzeXMvbWtkZXYuaD4JCQkvKiBsb29rIGhlcmUgKi8KKyNlbHNlCQkJCQkv KiBvciBmb3IgU3VuT1MgdmVyc2lvbnMgKi8KKyNpZmRlZiBTVU5PUzQJCQkJLyogLi4uICovCisj aW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgkJLyogbG9vayBoZXJlICovCisjZWxzZQkJCQkJLyog T3RoZXJ3aXNlIHRha2UgYSBjaGFuY2U6ICovCisjZGVmaW5lCW1ham9yKGRldikgKCAoaW50KSAo ICgodW5zaWduZWQpKGRldikgPj4gOCkgJiAweGZmKSkKKyNkZWZpbmUJbWlub3IoZGV2KSAoIChp bnQpICggKGRldikgJiAweGZmKSkKKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBTVlI0 ICovCisjZW5kaWYgLyogbWFqb3IgKi8KKyNlbmRpZiAvKiBMRkRFVk5PICovCisKKy8qIE5vIGFk dmlzb3J5IGxvY2tzIGlmIEZfVExPQ0sgYW5kIEZfVUxPQ0sgYXJlIG5vdCBkZWZpbmVkIGF0IHRo aXMgcG9pbnQgKi8KKworI2lmZGVmIExPQ0tGCisjaWZuZGVmIEZfVExPQ0sKKyN1bmRlZiBMT0NL RgorI2lmbmRlZiBOT0xPQ0tGCisjZGVmaW5lIE5PTE9DS0YKKyNlbmRpZiAvKiBOT0xPQ0tGICov CisjZW5kaWYgLyogRl9UTE9DSyAqLworI2VuZGlmIC8qIExPQ0tGICovCisKKyNpZmRlZiBMT0NL RgorI2lmbmRlZiBGX1VMT0NLCisjdW5kZWYgTE9DS0YKKyNpZm5kZWYgTk9MT0NLRgorI2RlZmlu ZSBOT0xPQ0tGCisjZW5kaWYgLyogTk9MT0NLRiAqLworI2VuZGlmIC8qIEZfVUxPQ0sgKi8KKyNl bmRpZiAvKiBMT0NLRiAqLworCitzdGF0aWMgY2hhciBsaW5rdG9bREVWTkFNTEVOKzFdOworc3Rh dGljIGNoYXIgKiBsaW5rZGV2ID0gTlVMTDsKKworI2lmbmRlZiBOT1VVQ1AKKyNpZmRlZiBVU0VU VFlMT0NLCisjaWZkZWYgTE9DS19ESVIKK2NoYXIgKiB1dWNwbG9ja2RpciA9IExPQ0tfRElSOwor I2Vsc2UKK2NoYXIgKiB1dWNwbG9ja2RpciA9ICIiOworI2VuZGlmIC8qIExPQ0tfRElSICovCisj ZWxzZQorI2lmZGVmIExPQ0tfRElSCitjaGFyICogdXVjcGxvY2tkaXIgPSBMT0NLX0RJUjsKKyNl bHNlCitjaGFyICogdXVjcGxvY2tkaXIgPSAiIjsKKyNlbmRpZiAvKiBMT0NLX0RJUiAqLworI2Vu ZGlmIC8qIFVTRVRUWUxPQ0sgKi8KKyNlbHNlCitjaGFyICogdXVjcGxvY2tkaXIgPSAiIjsKKyNl bmRpZiAvKiBOT1VVQ1AgKi8KKworI2lmZGVmIFFOWAkJCQkvKiBPbmx5IGZvciBRTlg0ICovCitp bnQJCQkJCS8qIFZpc2libGUgdG8gb3V0c2lkZSB3b3JsZCAqLworcW54b3BlbmNvdW50KCkgewkJ CS8qIEdldCBRTlggZGV2aWNlIG9wZW4gY291bnQgKi8KKyAgICBzdHJ1Y3QgX2Rldl9pbmZvX2Vu dHJ5IGluZm87CisgICAgaW50IHg7CisKKyAgICB4ID0gLTE7CQkJCS8qIFVua25vd24gKi8KKyAg ICBpZiAodHR5ZmQgPiAtMSkgeworCWlmICghZGV2X2luZm8odHR5ZmQsICZpbmZvKSkgeworCSAg ICBkZWJ1ZyhGMTAxLCJ0dGxvY2sgUU5YIG9wZW5fY291bnQiLCIiLGluZm8ub3Blbl9jb3VudCk7 CisJICAgIHggPSBpbmZvLm9wZW5fY291bnQ7CisJfQorICAgIH0KKyAgICByZXR1cm4oeCk7Cit9 CisjZW5kaWYgLyogUU5YICovCisKK2NoYXIgKgordHRnbGNrZGlyKCkgewkJCQkvKiBHZXQgTG9j a2ZpbGUgZGlyZWN0b3J5IG5hbWUgKi8KKyNpZmRlZiBfX09wZW5CU0RfXworICAgIHJldHVybigi L3Zhci9zcG9vbC9sb2NrIik7CisjZWxzZSAvKiBfX09wZW5CU0RfXyAqLworI2lmZGVmIF9fRnJl ZUJTRF9fCisgICAgcmV0dXJuKCIvdmFyL3Nwb29sL2xvY2siKTsKKyNlbHNlICAvKiBfX0ZyZWVC U0RfXyAqLworI2lmZGVmIExPQ0tfRElSCisgICAgY2hhciAqIHMgPSBMT0NLX0RJUjsKKyNlbmRp ZiAvKiBMT0NLX0RJUiAqLworI2lmZGVmIE5PVVVDUAorICAgIHJldHVybigiIik7CisjZWxzZSAg LyogTk9VVUNQICovCisjaWZkZWYgTE9DS19ESVIKKyAgICByZXR1cm4ocyk7CisjZWxzZSAgLyog TE9DS19ESVIgKi8KKyAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIExPQ0tfRElSICovCisjZW5k aWYgLyogTk9VVUNQICovCisjZW5kaWYgLyogX19GcmVlQlNEX18gKi8KKyNlbmRpZiAvKiBfX09w ZW5CU0RfXyAqLworfQorCitzdGF0aWMgaW50Cit0dGxvY2sodHRkZXYpIGNoYXIgKnR0ZGV2OyB7 CisKKyAgICBpbnQgeCwgbjsKKyAgICBpbnQgaXNsaW5rID0gMDsKKyNpZmRlZiBfX0ZyZWVCU0Rf XworICAgIGNoYXIgKmRldm5hbWU7CisjZW5kaWYJLyogX19GcmVlQlNEX18gKi8KKworI2lmZGVm IE5PVVVDUAorICAgIGRlYnVnKEYxMDAsInR0bG9jayBOT1VVQ1AiLCIiLDApOworICAgIGNrc3Ry bmNweShmbGZuYW0sIk5PTE9DSyIsRkxGTkFNTCk7CisgICAgaGFzbG9jayA9IDE7CisgICAgcmV0 dXJuKDApOworI2Vsc2UgLyogIU5PVVVDUCAqLworCisjaWZkZWYgVVNFVFRZTE9DSworICAgIGhh c2xvY2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2NrZWQgeWV0LiAqLwor ICAgICpmbGZuYW0gPSAnXDAnOwkJCS8qIExvY2tmaWxlIG5hbWUgaXMgZW1wdHkuICovCisjaWZk ZWYgX19GcmVlQlNEX18KKyAgICBpZiAoKGRldm5hbWUgPSB4eGxhc3QodHRkZXYsJy8nKSkgIT0g TlVMTCkKKyNpZmRlZiBGUkVFQlNEOAorICAgICAgY2tzdHJuY2F0KGxvY2tuYW1lLGRldm5hbWUr MSxERVZOQU1MRU4tY2tzdHJuY3B5KGxvY2tuYW1lLCJwdHMiLDQpKTsKKyNlbHNlCisgICAgICBj a3N0cm5jcHkobG9ja25hbWUsZGV2bmFtZSsxLERFVk5BTUxFTik7CisjZW5kaWYJLyogRlJFRUJT RDggKi8KKyNlbHNlCisgICAgaWYgKCFzdHJuY21wKHR0ZGV2LCIvZGV2LyIsNSkgJiYgdHRkZXZb NV0pCisgICAgICBja3N0cm5jcHkobG9ja25hbWUsdHRkZXYrNSxERVZOQU1MRU4pOworI2VuZGlm CS8qIF9fRnJlZUJTRF9fICovCisgICAgZWxzZQorICAgICAgY2tzdHJuY3B5KGxvY2tuYW1lLHR0 ZGV2LERFVk5BTUxFTik7CisvKgorICBUaGlzIG1pZ2h0IGJlIG92ZXJraWxsLCBidXQgaXQncyBu b3QgY2xlYXIgZnJvbSB0aGUgbWFuIHBhZ2VzIHdoZXRoZXIKKyAgdHR5bG9jaygpIGNhbiBiZSBj YWxsZWQgd2l0aG91dCBjYWxsaW5nIHR0eWxvY2tlZCgpIGZpcnN0LCBzaW5jZSB0aGUgZG9jCisg IHNheXMgdGhhdCB0dHlsb2NrZWQoKSByZW1vdmVzIGFueSBzdGFsZSBsb2NrZmlsZXMsIGJ1dCBp dCBkb2VzIG5vdCBzYXkgdGhpcworICBhYm91dCB0dHlsb2NrKCkuICBBbHNvIHRoZSBkb2NzIGRv bid0IHNheSB3aGF0IHR0eWxvY2tlZCgpIHJldHVybnMgaW4gdGhlCisgIGNhc2Ugd2hlbiBpdCBm aW5kcyBhbmQgcmVtb3ZlcyBhIHN0YWxlIGxvY2tmaWxlLiAgU28gb25lIG9yIGJvdGggY2FsbHMg dG8KKyAgdG8gdHR5bG9ja2VkKCkgbWlnaHQgYmUgc3VwZXJmbHVvdXMsIGJ1dCB0aGV5IHNob3Vs ZCBkbyBubyBoYXJtLiAgQWxzbyBJJ20KKyAgYXNzdW1pbmcgdGhhdCB3ZSBoYXZlIHRvIGRvIGFs bCB0aGUgc2FtZSBJRCBzd2FwcGluZywgZXRjLCB3aXRoIHRoZXNlCisgIHJvdXRpbmVzIGFzIHdl IGRvIHdpdGhvdXQgdGhlbS4gIFRodXMgdGhlIHByaXZfb24vb2ZmKCkgc2FuZHdpY2guCisqLwor I2lmZGVmIFVTRV9VVV9MT0NLCisgICAgcHJpdl9vbigpOwkJCQkvKiBUdXJuIG9uIHByaXZzICov CisgICAgeCA9IHV1X2xvY2sobG9ja25hbWUpOwkJLyogVHJ5IHRvIHNldCB0aGUgbG9jayAqLwor ICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4gcHJpdnMgb2ZmICovCisgICAgZGVidWcoRjExMSwi dHRsb2NrIHV1X2xvY2siLGxvY2tuYW1lLHgpOworICAgIHN3aXRjaCAoeCkgeworICAgICAgY2Fz ZSBVVV9MT0NLX0lOVVNFOgorCXJldHVybigtMik7CisgICAgICBjYXNlIFVVX0xPQ0tfT0s6Cisj aWZkZWYgQlNENDQKKwlja21ha21zZyhmbGZuYW0sRkxGTkFNTCwiL3Zhci9zcG9vbC9sb2NrL0xD Sy4uIixsb2NrbmFtZSxOVUxMLE5VTEwpOworI2VuZGlmIC8qIEJTRDQ0ICovCisJaGFzbG9jayA9 IDE7CisJcmV0dXJuKDApOworICAgICAgZGVmYXVsdDoKKwlyZXR1cm4oLTEpOworICAgIH0KKyNl bHNlICAvKiBVU0VfVVVfTE9DSyAqLworICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBvbiBwcml2 cyAqLworICAgIGlmICh0dHlsb2NrZWQobG9ja25hbWUpKSB7CQkvKiBUaGlzIHNob3VsZCByZW1v dmUgYW55IHN0YWxlIGxvY2sgKi8KKwlpZiAodHR5bG9ja2VkKGxvY2tuYW1lKSkgewkvKiBzbyBj aGVjayBhZ2Fpbi4gKi8KKwkgICAgcHJpdl9vZmYoKTsKKwkgICAgcmV0dXJuKC01KTsJCQkvKiBT dGlsbCBsb2NrZWQsIGZhaWwuICovCisJfQorICAgIH0KKyAgICB4ID0gdHR5bG9jayhsb2NrbmFt ZSk7CQkvKiBMb2NrIGl0LiAqLworICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIHByaXZz ICovCisKKyAgICBkZWJ1ZyhGMTExLCJ0dGxvY2sgbG9ja25hbWUiLGxvY2tuYW1lLHgpOworICAg IGlmICh4ID4gLTEpIHsKKwkvKgorCSAgV2UgZG9uJ3QgcmVhbGx5IGtub3cgdGhlIG5hbWUgb2Yg dGhlIGxvY2tmaWxlLCBidXQKKwkgIHRoaXMgaXMgd2hhdCB0aGUgbWFuIHBhZ2Ugc2F5cyBpdCBp cy4gIEluIFVTRVRUWUxPQ0sKKyAgICAgICAgICBidWlsZHMsIGl0IGlzIHVzZWQgb25seSBmb3Ig ZGlzcGxheSBieSBTSE9XIENPTU0uCisJKi8KKwlja21ha21zZyhmbGZuYW0sRkxGTkFNTCwiL2V0 Yy9sb2Nrcy9MQ0suLiIsbG9ja25hbWUsTlVMTCxOVUxMKTsKKwloYXNsb2NrID0gMTsKKyAgICB9 CisgICAgcmV0dXJuKHgpOworI2VuZGlmIC8qIFVTRV9VVV9MT0NLICovCisjZWxzZSAgLyogU3lz dGVtcyB0aGF0IGRvbid0IGhhdmUgdHR5bG9jaygpLi4uICovCisKKyNpZm5kZWYgSFBVWAorCisg ICAgaW50IGxvY2tmZDsJCQkJLyogRmlsZSBkZXNjcmlwdG9yIGZvciBsb2NrIGZpbGUuICovCisg ICAgUElEX1QgcGlkOwkJCQkvKiBQcm9jZXNzIGlkIG9mIHRoaXMgcHJvY2Vzcy4gKi8KKyAgICBp bnQgdHJpZXM7CQkJCS8qIEhvdyBtYW55IHRpbWVzIHdlJ3ZlIHRyaWVkLi4uICovCisgICAgc3Ry dWN0IHN0YXQgZGV2YnVmOwkJCS8qIEZvciBkZXZpY2UgbnVtYmVycyAoU1ZSNCkuICovCisKKyNp ZmRlZiBQSURTVFJJTkcKKyAgICBjaGFyIHBpZF9zdHJbMzJdOwkJCS8qIE15IHBpZCBpbiBzdHJp bmcgZm9ybWF0LiAqLworI2VuZGlmIC8qIFBJRFNUUklORyAqLworCisgICAgY2hhciAqZGV2aWNl LCAqZGV2bmFtZTsKKworI2RlZmluZSBMRk5BTUwgMjU2CQkJLyogTWF4IGxlbmd0aCBmb3IgbG9j ayBmaWxlIG5hbWUuICovCisgICAgY2hhciBsb2NrZmlsW0xGTkFNTF07CQkvKiBMb2NrIGZpbGUg bmFtZSAqLworI2lmZGVmIFJUQUlYCisgICAgY2hhciBsa2xvY2tmW0xGTkFNTF07CQkvKiBOYW1l IGZvciBsaW5rIHRvIGxvY2sgZmlsZSAgKi8KKyNlbmRpZiAvKiBSVEFJWCAqLworI2lmZGVmIENL U1lNTElOSworICAgIGNoYXIgc3ltbG9ja1tMRk5BTUxdOwkJLyogTmFtZSBmb3Igc3ltbGluayBs b2NrZmlsZSBuYW1lICovCisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisgICAgY2hhciB0bXBuYW1b TEZOQU1MKzMwXTsJCS8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lLiAqLworICAgIGNoYXIgKmxv Y2tkaXIgPSBMT0NLX0RJUjsJCS8qIERlZmluZWQgbmVhciB0b3Agb2YgdGhpcyBmaWxlLCAqLwor CQkJCQkvKiBvciBvbiBjYyBjb21tYW5kIGxpbmUuICovCisgICAgaGFzbG9jayA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IGxvY2tlZCB5ZXQuICovCisgICAgKmZsZm5hbSA9ICdc MCc7CQkJLyogTG9ja2ZpbGUgbmFtZSBpcyBlbXB0eS4gKi8KKyAgICBsb2NrMlswXSA9ICdcMCc7 CQkJLyogQ2xlYXIgc2Vjb25kYXJ5IGxvY2tmaWxlIG5hbWUuICovCisgICAgcGlkID0gZ2V0cGlk KCk7CQkJLyogR2V0IGlkIG9mIHRoaXMgcHJvY2Vzcy4gKi8KKworLyogIENvbnN0cnVjdCBuYW1l IG9mIGxvY2tmaWxlIGFuZCB0ZW1wb3JhcnkgZmlsZSAqLworCisvKiAgZGV2aWNlICA9IG5hbWUg b2YgdHR5IGRldmljZSB3aXRob3V0IHRoZSBwYXRoLCBlLmcuICJ0dHloOCIgKi8KKy8qICBsb2Nr ZmlsID0gbmFtZSBvZiBsb2NrIGZpbGUsIHdpdGhvdXQgcGF0aCwgZS5nLiAiTENLLi50dHloOCIg Ki8KKworICAgIGRldmljZSA9ICgoZGV2bmFtZSA9IHh4bGFzdCh0dGRldiwnLycpKSAhPSBOVUxM ID8gZGV2bmFtZSsxIDogdHRkZXYpOworCisgICAgaWYgKHN0YXQodHRkZXYsJmRldmJ1ZikgPCAw KQorICAgICAgcmV0dXJuKC0xKTsKKworI2lmZGVmIENLU1lNTElOSworICAgIGlzbGluayA9IDE7 CQkJCS8qIEFzc3VtZSBpdCdzIGEgc3ltbGluayAqLworICAgIGxpbmt0b1swXSA9ICdcMCc7CQkJ LyogQnV0IHdlIGRvbid0IGtub3cgdG8gd2hhdCAqLworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRo aXMgaXMgdW5kZXBlbmRhYmxlLiAgSWYgaXQgd29ya2VkIGl0IHdvdWxkIHNhdmUgdGhlIHJlYWRs aW5rIGNhbGwgaWYKKyAgd2Uga25ldyB0aGUgZGV2aWNlIG5hbWUgd2FzIG5vdCBhIGxpbmsuCisq LworI2lmZGVmIFNfSVNMTksKKyAgICBpc2xpbmsgPSBTX0lTTE5LKGRldmJ1Zi5zdF9tb2RlKTsK KyAgICBkZWJ1ZyhGMTAxLCJ0dGxvY2sgc3RhdCBTX0lTTE5LIiwiIixpc2xpbmspOworI2VuZGlm IC8qIFNfSVNMTksgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKGlzbGluaykgewor CW4gPSByZWFkbGluayh0dGRldixsaW5rdG8sREVWTkFNTEVOKTsgLyogU2VlIGlmIGl0J3MgYSBs aW5rICovCisJZGVidWcoRjExMSwidHRsb2NrIHJlYWRsaW5rIix0dGRldixuKTsKKwlpZiAobiA+ IC0xKQkJCS8qIEl0IGlzICovCisJICBsaW5rdG9bbl0gPSAnXDAnOworCWVsc2UJCQkJLyogSXQn cyBub3QgKi8KKwkgIGlzbGluayA9IDA7CisJZGVidWcoRjExMSwidHRsb2NrIGxpbmsiLGxpbmt0 byxpc2xpbmspOworICAgIH0KKyAgICBpZiAoaXNsaW5rKSB7CisJbGlua2RldiA9IChkZXZuYW1l ID0geHhsYXN0KGxpbmt0bywnLycpKSA/IGRldm5hbWUgKyAxIDogbGlua3RvOworCWRlYnVnKEYx MTAsInR0bG9jayBsaW5rZGV2IixsaW5rZGV2LDApOworICAgIH0KKyNlbmRpZiAvKiBDS1NZTUxJ TksgKi8KKworLyoKKyAgT24gU0NPIHBsYXRmb3JtcywgaWYgd2UgZG9uJ3QgaGF2ZSBhIHN5bWxp bmssIHRoZW4gbGV0J3MgcHJldGVuZCB0aGUKKyAgbmFtZSBnaXZlbiBmb3IgdGhlIGRldmljZSBp cyBhIHN5bWxpbmssIGJlY2F1c2UgbGF0ZXIgd2Ugd2lsbCBjaGFuZ2UKKyAgdGhlIG5hbWUgaWYg aXQgY29udGFpbnMgYW55IHVwcGVyY2FzZSBjaGFyYWN0ZXJzLgorKi8KKyNpZmRlZiBDS19TQ09W NQkJCQkvKiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCisgICAgaWYgKCFpc2xpbmspIHsKKwlpc2xp bmsgPSAxOworCWNrc3RybmNweShsaW5rdG8sdHRkZXYsREVWTkFNTEVOKTsKKwlsaW5rZGV2ID0g KGRldm5hbWUgPSB4eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFtZSArIDEgOiBsaW5rdG87CisJ ZGVidWcoRjExMCwidHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7CisgICAgfQorI2Vsc2UKKyNp ZmRlZiBNX1hFTklYCQkJCS8qIFNDTyBYZW5peCBvciBVTklYICovCisgICAgaWYgKCFpc2xpbmsp IHsKKwlpc2xpbmsgPSAxOworCWNrc3RybmNweShsaW5rdG8sdHRkZXYsREVWTkFNTEVOKTsKKwls aW5rZGV2ID0gKGRldm5hbWUgPSB4eGxhc3QobGlua3RvLCcvJykpID8gZGV2bmFtZSArIDEgOiBs aW5rdG87CisJZGVidWcoRjExMCwidHRsb2NrIGxpbmtkZXYiLGxpbmtkZXYsMCk7CisgICAgfQor I2VuZGlmIC8qIE1fWEVOSVggKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworCisjaWZkZWYgSVNJ SUkJCQkJLyogSW50ZXJhY3RpdmUgU3lzdGVtIElJSSwgUEMvSVggKi8KKyAgICBja3N0cm5jcHko bG9ja2ZpbCwgZGV2aWNlLCBERVZOQU1MRU4pOworI2Vsc2UgIC8qIG5vdCBJU0lJSSAqLworI2lm ZGVmIExGREVWTk8JCQkJLyogTG9ja2ZpbGVuYW1lIGhhcyBkZXZpY2UgbnVtYmVycy4gKi8KKyNp ZmRlZiBDT0hFUkVOVAorICAgIHNwcmludGYobG9ja2ZpbCwiTENLLi4lZC4lZCIsCS8qIFNBRkUg Ki8KKwkgICAgbWFqb3IoZGV2YnVmLnN0X3JkZXYpLAkgICAvKiBtYWpvciBkZXZpY2UgbnVtYmVy ICovCisJICAgIDB4MWYgJiBtaW5vcihkZXZidWYuc3RfcmRldikpOyAvKiBtaW5vciBkZXZpY2Ug bnVtYmVyICovCisjZWxzZQorICAgIC8qIE5vdGU6ICVkIGNoYW5nZWQgdG8gJXUgaW4gOC4wIC0t ICV1IGlzIHBhcnQgb2YgU1ZJRCBmb3IgU1ZSNCAqLworICAgIC8qIExvY2tmaWxlIG5hbWUgZm9y bWF0IHZlcmlmaWVkIHRvIGFncmVlIHdpdGggU29sYXJpcyBjdSwgRGVjIDIwMDEgKi8KKyAgICBz cHJpbnRmKGxvY2tmaWwsIkxLLiUwM3UuJTAzdS4lMDN1IiwgLyogU0FGRSAqLworCSAgICBtYWpv cihkZXZidWYuc3RfZGV2KSwJLyogZGV2aWNlICovCisJICAgIG1ham9yKGRldmJ1Zi5zdF9yZGV2 KSwJLyogbWFqb3IgZGV2aWNlIG51bWJlciAqLworCSAgICBtaW5vcihkZXZidWYuc3RfcmRldikp OwkvKiBtaW5vciBkZXZpY2UgbnVtYmVyICovCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbHNl ICAvKiBOb3QgTEZERVZOTyAqLworI2lmZGVmIFBUWAkJCQkvKiBEeW5peCBQVFggKi8KKyAgICBp ZiAoKGRldmljZSAhPSAmdHRkZXZbNV0pICYmIChzdHJuY21wKHR0ZGV2LCIvZGV2LyIsNSkgPT0g MCkpIHsKKwlpZiAoKGludClzdHJsZW4oZGV2aWNlKSArIDggPCBMRk5BTUwpCisJICBzcHJpbnRm KGxvY2tmaWwsIkxDSy4uJS4zcyVzIiwgJnR0ZGV2WzVdLCBkZXZpY2UpOworCWVsc2UKKwkgIGNr c3RybmNweShsb2NrZmlsLCJMT0NLRklMRV9OQU1FX1RPT19MT05HIixMRk5BTUwpOworICAgIH0g ZWxzZQorI2VuZGlmIC8qIFBUWCAqLworICAgICAgaWYgKChpbnQpc3RybGVuKGRldmljZSkgKyA1 IDwgTEZOQU1MKQorCXNwcmludGYobG9ja2ZpbCwiTENLLi4lcyIsIGRldmljZSk7CisgICAgICBl bHNlCisJY2tzdHJuY3B5KGxvY2tmaWwsIkxPQ0tGSUxFX05BTUVfVE9PX0xPTkciLExGTkFNTCk7 CisjaWZkZWYgUlRBSVgKKyAgICBja3N0cm5jcHkobGtsb2NrZixkZXZpY2UsREVWTkFNTEVOKTsK KyNlbmRpZiAvKiBSVEFJWCAqLworI2lmZGVmIENLU1lNTElOSworICAgIHN5bWxvY2tbMF0gPSAn XDAnOworICAgIGlmIChpc2xpbmspCisgICAgICBja21ha21zZyhzeW1sb2NrLExGTkFNTCwgIkxD Sy4uIiwgbGlua2RldiwgTlVMTCwgTlVMTCk7CisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisjZW5k aWYgLyogTEZERVZOTyAqLworI2VuZGlmIC8qIElTSUlJICovCisKKyNpZmRlZiBDS19TQ09WNQkJ CQkvKiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCisgICAgeworCS8qIExvd2VyY2FzZSB0aGUgZW50 aXJlIGZpbGVuYW1lLiAqLworICAgICAgICAvKiBTQ08gc2F5cyB3ZSBtdXN0IGRvIHRoaXMgaW4g VjUuMCBhbmQgbGF0ZXIuICovCisJLyogQlVULi4uIHdhdGNoIG91dCBmb3IgZGV2aWNlcyAtLSBs aWtlIERpZ2lib2FyZCBQb3J0c2VydmVyICovCisJLyogVGhhdCBjYW4gaGF2ZSBodW5kcmVkcyBv ZiBwb3J0cy4uLiAqLworCWNoYXIgKnAgPSAoY2hhciAqKShsb2NrZmlsICsgNSk7CisJd2hpbGUg KCpwKSB7IGlmIChpc3VwcGVyKCpwKSkgKnAgPSAoY2hhcikgdG9sb3dlcigqcCk7IHArKzsgfQor ICAgIH0KKyNpZmRlZiBDS1NZTUxJTksKKyAgICBpZiAoaXNsaW5rKSB7CQkJLyogSWYgbm8gY2hh bmdlICovCisJaWYgKCFzdHJjbXAobG9ja2ZpbCxzeW1sb2NrKSkgewkvKiB0aGVuIG5vIHNlY29u ZCBsb2NrZmlsZSBuZWVkZWQgKi8KKwkgICAgaXNsaW5rID0gMDsKKwkgICAgc3ltbG9ja1swXSA9 ICdcMCc7CisJfQorICAgIH0KKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyNlbHNlCisjaWZkZWYg TV9YRU5JWAkJCQkvKiBTQ08gWGVuaXggb3IgVU5JWCAqLworICAgIHsKKwlpbnQgeDsgY2hhciBj OworCXggPSAoaW50KXN0cmxlbihsb2NrZmlsKSAtIDE7CS8qIEdldCBsYXN0IGxldHRlciBvZiBk ZXZpY2UgbmFtZS4gKi8KKwlpZiAoeCA+IDApIHsJCQkvKiBJZiBpdCdzIHVwcGVyY2FzZSwgbG93 ZXIgaXQuICovCisJICAgIGMgPSBsb2NrZmlsW3hdOworCSAgICBpZiAoYyA+PSAnQScgJiYgYyA8 PSAnWicpIGxvY2tmaWxbeF0gKz0gKCdhJyAtICdBJyk7CisJfQorICAgIH0KKyNpZmRlZiBDS1NZ TUxJTksKKyAgICBpZiAoaXNsaW5rKSB7CisJaWYgKCFzdHJjbXAobG9ja2ZpbCxzeW1sb2NrKSkg ewkvKiBObyBjaGFuZ2UgKi8KKwkgICAgaXNsaW5rID0gMDsJCQkvKiBzbyBubyBzZWNvbmQgbG9j a2ZpbGUgKi8KKwkgICAgc3ltbG9ja1swXSA9ICdcMCc7CisJfQorICAgIH0KKyNlbmRpZiAvKiBD S1NZTUxJTksgKi8KKyNlbmRpZiAvKiBNX1hFTklYICovCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8K KworLyogIGZsZm5hbSA9IGZ1bGwgbG9ja2ZpbGUgcGF0aG5hbWUsIGUuZy4gIi91c3Ivc3Bvb2wv dXVjcC9MQ0suLnR0eWg4IiAqLworLyogIHRtcG5hbSA9IHRlbXBvcmFyeSB1bmlxdWUsIGUuZy4g Ii91c3Ivc3Bvb2wvdXVjcC9MVE1QLi5waWQiICovCisKKyAgICBja21ha21zZyhmbGZuYW0sTEZO QU1MLGxvY2tkaXIsIi8iLGxvY2tmaWwsTlVMTCk7CisKKyNpZmRlZiBSVEFJWAorICAgIGNrbWFr bXNnKGxrZmxmbixGTEZOQU1MLGxvY2tkaXIsIi8iLGxrbG9ja2YsTlVMTCk7CisjZW5kaWYgLyog UlRBSVggKi8KKworI2lmbmRlZiBMRkRFVk5PCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgLyogSWYg aXQncyBhIGxpbmsgdGhlbiBhbHNvIG1ha2UgYSBsb2NrZmlsZSBmb3IgdGhlIHJlYWwgbmFtZSAq LworICAgIGRlYnVnKEYxMTEsInR0bG9jayBsaW5rIHN5bWxvY2siLHN5bWxvY2ssaXNsaW5rKTsK KyAgICBpZiAoaXNsaW5rICYmIHN5bWxvY2tbMF0pIHsKKwkvKiBCdXQgb25seSBpZiB0aGUgbG9j a2ZpbGUgbmFtZXMgd291bGQgYmUgZGlmZmVyZW50LiAqLworCS8qIFdBUk5JTkc6IFRoZXkgd29u J3QgYmUsIGUuZy4gZm9yIC9kZXYvdHR5ZDIgPT4gL2h3L3R0eXMvdHR5ZDIgKi8KKwlja21ha21z Zyhsb2NrMixGTEZOQU1MLGxvY2tkaXIsIi8iLHN5bWxvY2ssTlVMTCk7CisJZGVidWcoRjExMCwi dHRsb2NrIGxvY2syIixsb2NrMiwwKTsKKwlpZiAoIXN0cmNtcChsb2NrMixmbGZuYW0pKSB7CS8q IEFyZSBsb2NrZmlsZSBuYW1lcyB0aGUgc2FtZT8gKi8KKwkgICAgZGVidWcoRjEwMCwidHRsb2Nr IGxvY2syIGNsZWFyZWQiLCIiLDApOworCSAgICBsb2NrMlswXSA9ICdcMCc7CQkvKiBDbGVhciBz ZWNvbmRhcnkgbG9ja2ZpbGUgbmFtZS4gKi8KKwl9CisgICAgfQorI2VuZGlmIC8qIENLU1lNTElO SyAqLworI2VuZGlmIC8qIExGREVWTk8gKi8KKworICAgIHNwcmludGYodG1wbmFtLCIlcy9MVE1Q LiUwNWQiLGxvY2tkaXIsKGludCkgcGlkKTsgLyogc2FmZSAqLworICAgIGRlYnVnKEYxMTAsInR0 bG9jayBmbGZuYW0iLGZsZm5hbSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJ0dGxvY2sgdG1wbmFtIix0 bXBuYW0sMCk7CisKKyAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4gb24gcHJpdmlsZWdlcyBpZiBw b3NzaWJsZS4gKi8KKyAgICBsb2NrZmQgPSBjcmVhdCh0bXBuYW0sIDA0NDQpOwkvKiBUcnkgdG8g Y3JlYXRlIHRlbXAgbG9jayBmaWxlLiAqLworICAgIGlmIChsb2NrZmQgPCAwKSB7CQkJLyogQ3Jl YXRlIGZhaWxlZC4gKi8KKwlkZWJ1ZyhGMTExLCJ0dGxvY2sgY3JlYXQgZmFpbGVkIix0bXBuYW0s ZXJybm8pOworCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkgICAgcGVycm9yKGxvY2tkaXIpOwor CSAgICBwcmludGYoIlVVQ1Agbm90IGluc3RhbGxlZCBvciBLZXJtaXQgbWlzY29uZmlndXJlZFxu Iik7CisJfSBlbHNlIHsKKwkgICAgaWYgKCFxdWlldCkKKwkgICAgICBwZXJyb3IobG9ja2Rpcik7 CisJICAgIHVubGluayh0bXBuYW0pOwkJLyogR2V0IHJpZCBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUu ICovCisJfQorCXByaXZfb2ZmKCk7CQkJLyogVHVybiBvZmYgcHJpdmlsZWdlcyEhISAqLworCXJl dHVybigtMSk7CQkJLyogUmV0dXJuIGZhaWx1cmUgY29kZS4gKi8KKyAgICB9CisvKiBOb3cgd3Jp dGUgdGhlIHBpZCBpbnRvIHRoZSB0ZW1wIGxvY2tmaWxlIGluIHRoZSBhcHByb3ByaWF0ZSBmb3Jt YXQgKi8KKworI2lmZGVmIFBJRFNUUklORwkJCS8qIEZvciBIb25leSBEYW5CZXIgVVVDUCwgKi8K KyAgICBzcHJpbnRmKAkJCQkvKiB3cml0ZSBQSUQgYXMgZGVjaW1hbCBzdHJpbmcgKi8KKwkgICAg cGlkX3N0ciwKKyNpZmRlZiBMSU5VWEZTU1RORAkJCS8qIFRoZSAiTGludXggRmlsZSBTeXN0ZW0g U3RhbmRhcmQiICovCisjaWZkZWYgRlNTVE5EMTAJCQkJLyogVmVyc2lvbiAxLjAgY2FsbHMgZm9y ICovCisJICAgICIlMDEwZFxuIiwJCQkvKiBsZWFkaW5nIHplcm9zICovCisjZWxzZQkJCQkJLyog d2hpbGUgdmVyc2lvbiAxLjIgY2FsbHMgZm9yICovCisJICAgICIlMTBkXG4iLAkJCS8qIGxlYWRp bmcgc3BhY2VzICovCisjZW5kaWYgLyogRlNTVE5EMTAgKi8KKyNlbHNlCisjaWZkZWYgQ09IRVJF TlQKKwkgICAgIiVkXG4iLAkJCS8qIHdpdGggbGVhZGluZyBub3RoaW5nICovCisjZWxzZQorCSAg ICAiJTEwZFxuIiwJCQkvKiB3aXRoIGxlYWRpbmcgYmxhbmtzICovCisjZW5kaWYgLyogQ09IRVJF TlQgKi8KKyNlbmRpZiAvKiBMSU5VWEZTU1RORCAqLworCSAgICAoaW50KSBwaWQKKwkgICAgKTsJ CQkJLyogc2FmZSAqLworICAgIHdyaXRlKGxvY2tmZCwgcGlkX3N0ciwgMTEpOworICAgIGRlYnVn KEYxMTEsInR0bG9jayBoZGIgcGlkIHN0cmluZyIscGlkX3N0ciwoaW50KSBwaWQpOworCisjZWxz ZSAvKiBOb3QgUElEU1RSSU5HLCB1c2UgaW50ZWdlciBQSUQgKi8KKworICAgIHdyaXRlKGxvY2tm ZCwgKGNoYXIgKikmcGlkLCBzaXplb2YocGlkKSApOworICAgIGRlYnVnKEYxMDEsInR0bG9jayBw aWQiLCIiLChpbnQpIHBpZCk7CisKKyNlbmRpZiAvKiBQSURTVFJJTkcgKi8KKworLyogTm93IHRy eSB0byByZW5hbWUgdGhlIHRlbXAgZmlsZSB0byB0aGUgcmVhbCBsb2NrIGZpbGUgbmFtZS4gKi8K Ky8qIFRoaXMgd2lsbCBmYWlsIGlmIGEgbG9jayBmaWxlIG9mIHRoYXQgbmFtZSBhbHJlYWR5IGV4 aXN0cy4gICovCisKKyAgICBjbG9zZShsb2NrZmQpOwkJCS8qIENsb3NlIHRoZSB0ZW1wIGxvY2tm aWxlLiAqLworICAgIGNobW9kKHRtcG5hbSwwNDQ0KTsJCQkvKiBQZXJtaXNzaW9uIGZvciBhIHZh bGlkIGxvY2suICovCisgICAgdHJpZXMgPSAwOworICAgIHdoaWxlICghaGFzbG9jayAmJiB0cmll cysrIDwgMikgeworCWhhc2xvY2sgPSAobGluayh0bXBuYW0sZmxmbmFtKSA9PSAwKTsgLyogQ3Jl YXRlIGEgbGluayB0byBpdC4gKi8KKwlpZiAoaGFzbG9jaykgewkJCSAgICAgIC8qIElmIHdlIGdv dCB0aGUgbG9ja2ZpbGUgKi8KKyNpZmRlZiBSVEFJWAorCSAgICBsaW5rKGZsZm5hbSxsa2ZsZm4p OworI2VuZGlmIC8qIFJUQUlYICovCisjaWZkZWYgQ0tTWU1MSU5LCisjaWZuZGVmIExGREVWTk8K KwkgICAgaWYgKGlzbGluayAmJiBsb2NrMlswXSkKKwkgICAgICBsaW5rKGZsZm5hbSxsb2NrMik7 CisjZW5kaWYgLyogTEZERVZOTyAqLworI2VuZGlmIC8qIENLU1lNTElOSyAqLworCisjaWZkZWYg Q09NTUVOVAorLyogQ2FuJ3QgZG8gdGhpcyBhbnkgbW9yZSBiZWNhdXNlIGRldmljZSBpcyBub3Qg b3BlbiB5ZXQgc28gbm8gdHR5ZmQuICovCisjaWZkZWYgTE9DS0YKKy8qCisgIEFkdmlzb3J5IGZp bGUgbG9ja2luZyB3b3JrcyBvbiBTVlI0LCBzbyB3ZSB1c2UgaXQuICBJbiBmYWN0LCBpdCBpcwor ICBuZWNlc3NhcnkgaW4gc29tZSBjYXNlcywgZS5nLiB3aGVuIFNMSVAgaXMgaW52b2x2ZWQuICBC dXQgaXQgc3RpbGwgZG9lc24ndAorICBzZWVtIHRvIHByZXZlbnQgbXVsdGlwbGUgdXNlcnMgYWNj ZXNzaW5nIHRoZSBzYW1lIGRldmljZSBieSBkaWZmZXJlbnQgbmFtZXMuCisqLworICAgICAgICAg ICAgd2hpbGUgKGxvY2tmKHR0eWZkLCBGX1RMT0NLLCAwTCkgIT0gMCkgeworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsICJ0dGxvY2sgbG9ja2YgcmV0dXJucyBlcnJubyIsICIiLCBlcnJubyk7 CisgICAgICAgICAgICAgICAgaWYgKCgrK3RyaWVzID49IDMpIHx8IChlcnJubyAhPSBFQUdBSU4p KSB7CisgICAgICAgICAgICAgICAgICAgIHggPSB1bmxpbmsoZmxmbmFtKTsgLyogcmVtb3ZlIHRo ZSBsb2NrZmlsZSAqLworI2lmZGVmIFJUQUlYCisJCSAgICB1bmxpbmsobGtmbGZuKTsJLyogQW5k IGFueSBsaW5rcyB0byBpdC4uLiAqLworI2VuZGlmIC8qIFJUQUlYICovCisjaWZkZWYgQ0tTWU1M SU5LCisjaWZuZGVmIExGREVWTk8KKwkJICAgIGlmIChpc2xpbmsgJiYgbG9jazJbMF0pCisJCSAg ICAgIHVubGluayhsb2NrMik7CS8qIGRpdHRvLi4uICovCisjZW5kaWYgLyogTEZERVZOTyAqLwor I2VuZGlmIC8qIENLU1lNTElOSyAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ0 dGxvY2sgdW5saW5rIixmbGZuYW0seCk7CisgICAgICAgICAgICAgICAgICAgIGhhc2xvY2sgPSAw OworCQkgICAgYnJlYWs7CisJCX0KKyAgICAgICAgICAgICAgICBzbGVlcCgyKTsKKwkgICAgfQor CSAgICBpZiAoaGFzbG9jaykJCS8qIElmIHdlIGdvdCBhbiBhZHZpc29yeSBsb2NrICovCisjZW5k aWYgLyogTE9DS0YgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgICAgYnJlYWs7CQkJLyog V2UncmUgZG9uZS4gKi8KKworCX0gZWxzZSB7CQkJLyogV2UgZGlkbid0IGNyZWF0ZSBhIG5ldyBs b2NrZmlsZS4gKi8KKwkgICAgcHJpdl9vZmYoKTsKKwkgICAgaWYgKHR0Y2hrcGlkKGZsZm5hbSkp IHsJLyogQ2hlY2sgZXhpc3RpbmcgbG9ja2ZpbGUgKi8KKwkJcHJpdl9vbigpOwkJLyogY2F1c2Ug dHRjaGtwaWQgdHVybnMgcHJpdl9vZmYuLi4gKi8KKwkJdW5saW5rKHRtcG5hbSk7CQkvKiBEZWxl dGUgdGhlIHRlbXBmaWxlICovCisJCWRlYnVnKEYxMDAsInR0bG9jayBmb3VuZCB0dHkgbG9ja2Vk IiwiIiwwKTsKKwkJcHJpdl9vZmYoKTsJCS8qIFR1cm4gb2ZmIHByaXZzICovCisJCXJldHVybigt Mik7CQkvKiBDb2RlIGZvciBkZXZpY2UgaXMgaW4gdXNlLiAqLworCSAgICB9CisJICAgIHByaXZf b24oKTsKKwl9CisgICAgfQorICAgIHVubGluayh0bXBuYW0pOwkJCS8qIFVubGluayAocmVtb3Zl KSB0aGUgdGVtcCBmaWxlLiAqLworICAgIHByaXZfb2ZmKCk7CQkJCS8qIFR1cm4gb2ZmIHByaXZz ICovCisgICAgcmV0dXJuKGhhc2xvY2sgPyAwIDogLTEpOwkJLyogUmV0dXJuIGxpbmsncyByZXR1 cm4gY29kZS4gKi8KKworI2Vsc2UgLyogSFBVWCAqLworCisvKgorICBIUC1VWCBnZXRzIGl0cyBv d24gY29weSBvZiB0aGlzIHJvdXRpbmUsIG1vZGVsZWQgYWZ0ZXIgdGhlIG9ic2VydmVkIGJlaGF2 aW9yCisgIG9mIHRoZSBIUC1VWCAnY3UnIHByb2dyYW0uICBIUC1VWCBzZXJpYWwgZGV2aWNlIG5h bWVzIGNvbnNpc3Qgb2YgYSBiYXNlIG5hbWUKKyAgc3VjaCBhcyAidHR5IiwgInR0eWQiLCAiY3Vh IiwgImN1bCIsICJjdWFkIiwgb3IgImN1bGQiLCBmb2xsb3dlZCBieSBhIHVuaXQKKyAgZGVzaWdu YXRvciB3aGljaCBpcyBhIHN0cmluZyBvZiBkaWdpdHMsIHBvc3NpYmx5IGNvbnRhaW5pbmcgYW4g aW1iZWRkZWQKKyAgbGV0dGVyICJwIi4gIEV4YW1wbGVzIChmb3IgYmFzZSBuYW1lICJ0dHkiKToK KworICAgICAvZGV2L3R0eTAsIC9kZXYvdHR5MDAsIGRldi90dHlkMDAsIC9kZXYvdHR5MHAwCisK KyAgQWNjb3JkaW5nIHRvIHRoZSBIUC1VWCBVVUNQIG1hbnVhbCBvZiAxOTg4LCB0aGUgIjBwMCIg bm90YXRpb24gaGFzIGJlZW4KKyAgdXNlZCBvbiBTZXJpZXMgODAwIHNpbmNlIEhQLVVYIDIuMDAs IGFuZCB0aGUgIm5vbi1wIiBub3RhdGlvbiB3YXMgdXNlZAorICBvbiBvdGhlciBtb2RlbHMuICBJ biBIUC1VWCAxMC4wMCwgIjBwMCIgbm90YXRpb24gd2FzIGFkb3B0ZWQgZm9yIGFsbCBtb2RlbHMu CisgIEhvd2V2ZXIsIHdlIG1ha2UgYW5kIGVuZm9yY2Ugbm8gc3VjaCBkaXN0aW5jdGlvbnM7IGVp dGhlciBub3RhdGlvbiBpcworICBhY2NlcHRlZCBvbiBhbnkgbW9kZWwgb3IgSFAtVVggdmVyc2lv biBhcyBhIHZhbGlkIHVuaXQgZGVzaWduYXRvci4KKworICBJZiBhIHZhbGlkIHVuaXQgaXMgc3Bl Y2lmaWVkIChhcyBvcHBvc2VkIHRvIGEgZGVzaWduZXIgbmFtZSBvciBzeW1saW5rKSwgd2UKKyAg Y2hlY2sgZm9yIGFsbCBhbGlhc2VzIG9mIHRoZSBnaXZlbiB1bml0IGFjY29yZGluZyB0byB0aGUg ZGV2cHJlZml4W10gYXJyYXkuCisgIElmIG5vIGxvY2tmaWxlcyBhcmUgZm91bmQgZm9yIHRoZSBn aXZlbiB1bml0LCB3ZSBjYW4gaGF2ZSB0aGUgZGV2aWNlOyB3ZQorICBjcmVhdGUgYSBsb2NrZmls ZSBMQ0suLm5hbWUgaW4gdGhlIGxvY2tmaWxlIGRpcmVjdG9yeSBhcHByb3ByaWF0ZSBmb3IgdGhl CisgIEhQLVVYIHZlcnNpb24gKC92YXIvc3Bvb2wvbG9ja3MgZm9yIDEwLjAwIGFuZCBsYXRlciwg L3Vzci9zcG9vbC91dWNwIGZvcgorICA5Lnh4IGFuZCBlYXJsaWVyKS4gIElmIGl0IGlzIGEgImN1 YSIgb3IgImN1bCIgZGV2aWNlLCBhIHNlY29uZCBsb2NrZmlsZSBpcworICBjcmVhdGVkIHdpdGgg dGhlICJ0dHlkIiBwcmVmaXguICBUaGlzIGlzIGV4YWN0bHkgd2hhdCBjdSBkb2VzLgorCisgIElm IHRoZSAic2V0IGxpbmUiIGRldmljZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgdW5pdCBkZXNpZ25h dG9yLCB0aGVuIGl0IGlzCisgIHVzZWQgbGl0ZXJhbGx5IGFuZCBubyBzeW5vbXltcyBhcmUgc2Vh cmNoZWQgZm9yIGFuZCBvbmx5IG9uZSBsb2NrZmlsZSBpcworICBjcmVhdGVkLgorCisgIC1mZGMs IE1hcmNoIDE5OTguCisqLworI2RlZmluZSBMRk5BTUwgODAJCQkvKiBNYXggbGVuZ3RoIGZvciBs b2NrIGZpbGUgbmFtZS4gKi8KKworICAgIGludCBsb2NrZmQ7CQkJCS8qIEZpbGUgZGVzY3JpcHRv ciBmb3IgbG9jayBmaWxlLiAqLworICAgIFBJRF9UIHBpZDsJCQkJLyogUHJvY2VzcyBJRCBvZiB0 aGlzIHByb2Nlc3MuICovCisgICAgaW50IGZwaWQ7CQkJCS8qIHBpZCBmb3VuZCBpbiBleGlzdGlu ZyBsb2NrZmlsZS4gKi8KKyAgICBpbnQgdHJpZXM7CQkJCS8qIEhvdyBtYW55IHRpbWVzIHdlJ3Zl IHRyaWVkLi4uICovCisgICAgaW50IGksIGs7CQkJCS8qIFdvcmtlcnMgKi8KKworICAgIGNoYXIg KmRldmljZSwgKmRldm5hbWU7CQkvKiAiL2Rldi94eHgiLCAieHh4IiAqLworICAgIGNoYXIgKnVu aXQsICpwOwkJCS8qIDxpbnN0YW5jZT5wPHBvcnQ+IHBhcnQgb2YgeHh4ICovCisKKyAgICBjaGFy IGxvY2tmaWxbTEZOQU1MXTsJCS8qIExvY2tmaWxlIG5hbWUgKG5vIHBhdGgpICovCisgICAgY2hh ciB0bXBuYW1bTEZOQU1MXTsJCS8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lLiAqLworCisjaWZk ZWYgSFBVWDEwCQkJCS8qIExvY2tmaWxlIGRpcmVjdG9yeSAqLworICAgIGNoYXIgKmxvY2tkaXIg PSAiL3Zhci9zcG9vbC9sb2NrcyI7CS8qIEFsd2F5cyB0aGlzIGZvciAxMC4wMCBhbmQgaGlnaGVy ICovCisjZWxzZSAgLyogSFAtVVggOS54eCBhbmQgYmVsb3cgKi8KKyNpZmRlZiBMT0NLX0RJUgor ICAgIGNoYXIgKmxvY2tkaXIgPSBMT0NLX0RJUjsJCS8qIERlZmluZWQgbmVhciB0b3Agb2YgdGhp cyBmaWxlICovCisjZWxzZQorICAgIGNoYXIgKmxvY2tkaXIgPSAiL3Vzci9zcG9vbC91dWNwIjsJ Lyogb3Igbm90Li4uICovCisjZW5kaWYgLyogTE9DS19ESVIgKi8KKyNlbmRpZiAvKiBIUFVYMTAg Ki8KKworICAgIGhhc2xvY2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBsb2Nr ZWQgeWV0LiAqLworICAgICpmbGZuYW0gPSAnXDAnOwkJCS8qIExvY2tmaWxlIG5hbWUgaXMgZW1w dHkuICovCisgICAgbG9jazJbMF0gPSAnXDAnOwkJCS8qIFNlY29uZCBvbmUgdG9vLiAqLworICAg IHBpZCA9IGdldHBpZCgpOwkJCS8qIEdldCBteSBwcm9jZXNzIElEICovCisvKgorICBDb25zdHJ1 Y3QgbmFtZSBvZiBsb2NrZmlsZSBhbmQgdGVtcG9yYXJ5IGZpbGUuLi4KKyAgZGV2aWNlICA9IG5h bWUgb2YgdHR5IGRldmljZSB3aXRob3V0IHRoZSBwYXRoLCBlLmcuICJ0dHkwcDAiCisgIGxvY2tm aWwgPSBuYW1lIG9mIGxvY2sgZmlsZSwgd2l0aG91dCBwYXRoLCBlLmcuICJMQ0suLnR0eTBwMCIK KyovCisgICAgZGV2aWNlID0gKChkZXZuYW1lID0geHhsYXN0KHR0ZGV2LCcvJykpICE9IE5VTEwg PyBkZXZuYW1lKzEgOiB0dGRldik7CisgICAgZGVidWcoRjExMCwiVFRMT0NLIGRldmljZSIsZGV2 aWNlLDApOworICAgIGNrbWFrbXNnKGxvY2tmaWwsTEZOQU1MLCJMQ0suLiIsZGV2aWNlLE5VTEws TlVMTCk7CisKKyAgICBrID0gMDsJCQkJLyogQXNzdW1lIGRldmljZSBpcyBub3QgbG9ja2VkICov CisgICAgbiA9IDA7CQkJCS8qIERpZ2l0IGNvdW50ZXIgKi8KKyAgICB1bml0ID0gZGV2aWNlOwkJ CS8qIFVuaXQgPSA8aW5zdGFuY2U+cDxwb3J0PiAqLworICAgIHdoaWxlICgqdW5pdCAmJiAhaXNk aWdpdCgqdW5pdCkpCS8qIFNlYXJjaCBmb3IgZGlnaXQuLi4gKi8KKyAgICAgIHVuaXQrKzsKKyAg ICBwID0gdW5pdDsJCQkJLyogVmVyaWZ5IDxudW0+cDxudW0+IGZvcm1hdC4uLiAqLworICAgIGRl YnVnKEYxMTAsIlRUTE9DSyB1bml0IDEiLHVuaXQsMCk7CisvKgorICBUaGUgdW5pdCBudW1iZXIg aXMgcmVjb2duaXplZCBhczoKKyAgKGEpIGFueSBzZXF1ZW5jZSBvZiBkaWdpdHMgdGhhdCBydW5z IHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKyAgKGIpIGFueSAoYSkgdGhhdCBpbmNsdWRlcyBv bmUgYW5kIG9ubHkgb25lIGxldHRlciAicCIsIHdpdGggYXQgbGVhc3QKKyAgICAgIG9uZSBkaWdp dCBiZWZvcmUgYW5kIGFmdGVyIGl0LgorKi8KKyAgICB3aGlsZSAoaXNkaWdpdCgqcCkpIHArKywg bisrOwkvKiBHZXQgYSBydW4gb2YgZGlnaXRzICovCisgICAgaWYgKCpwICYmIG4gPiAwKSB7CQkJ LyogSGF2ZSBhICJwIj8gKi8KKwlpZiAoKnAgPT0gJ3AnICYmIGlzZGlnaXQoKihwKzEpKSkgewor CSAgICBwKys7CisJICAgIG4gPSAwOworCSAgICB3aGlsZSAoaXNkaWdpdCgqcCkpIHArKywgbisr OworCX0KKyAgICB9CisgICAgaWYgKG4gPT0gMCB8fCAqcCkgdW5pdCA9ICIiOworICAgIGRlYnVn KEYxMTAsIlRUTE9DSyB1bml0IDIiLHVuaXQsMCk7CisKKyAgICBpZiAoKnVuaXQpIHsJCQkvKiBE ZXZpY2UgbmFtZSBoYXMgdW5pdCBudW1iZXIuICovCisJLyogVGhlIGZvbGxvd2luZyBsb29wIG5v dCBvbmx5IHNlYXJjaGVzIGZvciB0aGUgdmFyaW91cyBsb2NrZmlsZSAgICAqLworCS8qIHN5bm9u eW1zLCBidXQgYWxzbyByZW1vdmVzIGFsbCAtLSBub3QganVzdCBvbmUgLS0gc3RhbGUgbG9ja2Zp bGUgKi8KKwkvKiBmb3IgdGhlIGRldmljZSwgc2hvdWxkIHRoZXJlIGJlIG1vcmUgdGhhbiBvbmUu ICBTZWUgdHRjaGtwaWQoKS4gICovCisJdHR5ZGV4aXN0cyA9IDA7CisJZm9yIChpID0gMDsgKmRl dnByZWZpeFtpXTsgaSsrKSB7IC8qIEZvciBlYWNoIGRyaXZlci4uLiAqLworCSAgICAvKiBNYWtl IGRldmljZSBuYW1lICovCisJICAgIGNrbWFrbXNnKGxvY2syLEZMRk5BTUwsIi9kZXYvIixkZXZw cmVmaXhbaV0sdW5pdCxOVUxMKTsKKwkgICAgcHJpdl9vbigpOwkJCS8qIFByaXZzIG9uICovCisJ ICAgIGsgPSB6Y2hraShsb2NrMikgIT0gLTE7CS8qIFNlZSBpZiBkZXZpY2UgZXhpc3RzICovCisJ ICAgIHByaXZfb2ZmKCk7CQkJLyogUHJpdnMgb2ZmICovCisJICAgIGRlYnVnKEYxMTEsIlRUTE9D SyBleGlzdCIsbG9jazIsayk7CisgICAgICAgICAgICBpZiAoaykgeworCQlpZiAoIXN0cmNtcChk ZXZwcmVmaXhbaV0sInR0eWQiKSkgLyogdHR5ZCBkZXZpY2UgZXhpc3RzICovCisJCSAgdHR5ZGV4 aXN0cyA9IDE7CisJCS8qIE1ha2UgbG9ja2ZpbGUgbmFtZSAqLworCQlja21ha21zZyhsb2NrMixG TEZOQU1MLGxvY2tkaXIsIi9MQ0suLiIsZGV2cHJlZml4W2ldLHVuaXQpOworCQlkZWJ1ZyhGMTEw LCJUVExPQ0sgY2hlY2tpbmciLGxvY2syLDApOworCQlwcml2X29uKCk7CQkvKiBQcml2cyBvbiAq LworCQlrID0gemNoa2kobG9jazIpICE9IC0xOwkvKiBTZWUgaWYgbG9ja2ZpbGUgZXhpc3RzICov CisJCXByaXZfb2ZmKCk7CQkvKiBQcml2cyBvZmYgKi8KKwkJZGVidWcoRjExMSwiVFRMT0NLIGNo ZWNrIGZvciBsb2NrIEEiLGxvY2syLGspOworCQlpZiAoaykgaWYgKHR0Y2hrcGlkKGxvY2syKSkg eyAvKiBJZiBwaWQgc3RpbGwgYWN0aXZlLCBmYWlsLiAqLworCQkgICAgY2tzdHJuY3B5KGZsZm5h bSxsb2NrMixGTEZOQU1MKTsKKwkJICAgIHJldHVybigtMik7CisJCX0KKwkgICAgfQorCX0KKyAg ICB9IGVsc2UgewkJCQkvKiBTb21lIG90aGVyIGRldmljZS1uYW1lIGZvcm1hdCAqLworCS8qIFRo aXMgdGFrZXMgY2FyZSBvZiBzeW1ib2xpYyBsaW5rcywgZXRjLi4uICovCisJLyogQnV0IGRvZXMg bm90IGNoYXNlIHRoZW0gZG93biEgKi8KKwlja21ha21zZyhsb2NrMixGTEZOQU1MLGxvY2tkaXIs Ii9MQ0suLiIsZGV2aWNlLE5VTEwpOworCXByaXZfb24oKTsKKwlrID0gemNoa2kobG9jazIpICE9 IC0xOwkJLyogQ2hlY2sgZm9yIGV4aXN0aW5nIGxvY2tmaWxlICovCisJcHJpdl9vZmYoKTsKKwlk ZWJ1ZyhGMTExLCJUVExPQ0sgY2hlY2sgZm9yIGxvY2sgQiIsbG9jazIsayk7CisJaWYgKGspIGlm ICh0dGNoa3BpZChsb2NrMikpIHsJLyogQ2hlY2sgcGlkIGZyb20gbG9ja2ZpbGUgKi8KKwkgICAg Y2tzdHJuY3B5KGZsZm5hbSxsb2NrMixGTEZOQU1MKTsKKwkgICAgZGVidWcoRjExMCwiVFRMT0NL IGluIHVzZSIsZGV2aWNlLDApOworCSAgICBkZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0dXJucyIsIiIs LTIpOworCSAgICByZXR1cm4oLTIpOworCX0KKyAgICB9CisvKgorICBHZXQgaGVyZSBvbmx5IGlm IHRoZXJlIGlzIG5vIChtb3JlKSBsb2NrZmlsZSwgc28gbm93IHdlIG1ha2Ugb25lIChvciB0d28p Li4uCisgIGZsZm5hbSA9IGZ1bGwgbG9ja2ZpbGUgcGF0aG5hbWUsIGUuZy4gIi91c3Ivc3Bvb2wv dXVjcC9MQ0suLmN1bDBwMCIuCisgIHRtcG5hbSA9IHVuaXF1ZSB0ZW1wb3JhcnkgZmlsbmFtZSwg ZS5nLiAiL3Vzci9zcG9vbC91dWNwL0xUTVAuLnBpZCIuCisqLworICAgIGNrbWFrbXNnKGZsZm5h bSxGTEZOQU1MLGxvY2tkaXIsIi8iLGxvY2tmaWwsTlVMTCk7IC8qIFNFVCBMSU5FIGRldmljZSAq LworCisgICAgLyogSWYgZGlhbG91dCBkZXZpY2UsIGFsc28gbWFrZSBvbmUgZm9yIGNvcnJlc3Bv bmRpbmcgZGlhbGluIGRldmljZSAqLworICAgIGxvY2syWzBdID0gJ1wwJzsKKyAgICBpZiAoIXN0 cm5jbXAoZGV2aWNlLCJjdSIsMikgJiYgKnVuaXQgJiYgdHR5ZGV4aXN0cykKKyAgICAgIGNrbWFr bXNnKGxvY2syLEZMRk5BTUwsbG9ja2RpciwiL0xDSy4udHR5ZCIsdW5pdCxOVUxMKTsKKworICAg IGlmICgoaW50KXN0cmxlbihsb2NrZGlyKSsxMiA8IExGTkFNTCkKKyAgICAgIHNwcmludGYodG1w bmFtLCIlcy9MVE1QLiUwNWQiLGxvY2tkaXIsKGludCkgcGlkKTsgLyogTWFrZSB0ZW1wIG5hbWUg Ki8KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTEwLCJUVExPQ0sg ZmxmbmFtIixmbGZuYW0sMCk7CisJZGVidWcoRjExMCwiVFRMT0NLIGxvY2syIixsb2NrMiwwKTsK KwlkZWJ1ZyhGMTEwLCJUVExPQ0sgdG1wbmFtIix0bXBuYW0sMCk7CisgICAgfQorI2VuZGlmIC8q IERFQlVHICovCisvKgorICAgTG9ja2ZpbGUgcGVybWlzc2lvbnMuLi4KKyAgIDQ0NCBpcyBzdGFu ZGFyZCwgSFAtVVggMTAuMDAgdXNlcyA2NjQuICBJdCBkb2Vzbid0IG1hdHRlci4KKyAgIEtlcm1p dCB1c2VzIDQ0NDsgdGhlIGRpZmZlcmVuY2UgbGV0cyB1cyB0ZWxsIHdoZXRoZXIgS2VybWl0IGNy ZWF0ZWQKKyAgIHRoZSBsb2NrIGZpbGUuCisqLworICAgIHByaXZfb24oKTsJCQkJLyogVHVybiBv biBwcml2aWxlZ2VzLiAqLworICAgIGxvY2tmZCA9IGNyZWF0KHRtcG5hbSwgMDQ0NCk7CS8qIFRy eSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUuICovCisgICAgaWYgKGxvY2tmZCA8IDApIHsJCQkv KiBDcmVhdGUgZmFpbGVkLiAqLworCWRlYnVnKEYxMTEsIlRUTE9DSyBjcmVhdCBmYWlsZWQiLHRt cG5hbSxlcnJubyk7CisJaWYgKGVycm5vID09IEVOT0VOVCkgeworCSAgICBwZXJyb3IobG9ja2Rp cik7CisJICAgIHByaW50ZigiVVVDUCBub3QgaW5zdGFsbGVkIG9yIEtlcm1pdCBtaXNjb25maWd1 cmVkXG4iKTsKKwl9IGVsc2UgeworCSAgICBpZiAoIXF1aWV0KQorCSAgICAgIHBlcnJvcihsb2Nr ZGlyKTsKKwkgICAgdW5saW5rKHRtcG5hbSk7CQkvKiBHZXQgcmlkIG9mIHRoZSB0ZW1wb3Jhcnkg ZmlsZS4gKi8KKwl9CisJcHJpdl9vZmYoKTsJCQkvKiBUdXJuIG9mZiBwcml2aWxlZ2VzISEhICov CisJZGVidWcoRjEwMSwiVFRMT0NLIHJldHVybnMiLCIiLC0xKTsKKwlyZXR1cm4oLTEpOwkJCS8q IFJldHVybiBmYWlsdXJlIGNvZGUuICovCisgICAgfQorICAgIGRlYnVnKEYxMTAsIlRUTE9DSyB0 ZW1wIG9rIix0bXBuYW0sMCk7CisKKy8qIE5vdyB3cml0ZSBvdXIgcGlkIGludG8gdGhlIHRlbXAg bG9ja2ZpbGUgaW4gaW50ZWdlciBmb3JtYXQuICovCisKKyAgICBpID0gd3JpdGUobG9ja2ZkLCAo Y2hhciAqKSZwaWQsIHNpemVvZihwaWQpKTsKKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxv ZykgeworCWRlYnVnKEYxMDEsIlRUTE9DSyBwaWQiLCIiLHBpZCk7CisJZGVidWcoRjEwMSwiVFRM T0NLIHNpemVvZiBwaWQiLCIiLHNpemVvZihwaWQpKTsKKwlkZWJ1ZyhGMTAxLCJUVExPQ0sgd3Jp dGUgcGlkIHJldHVybnMiLCIiLGkpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisvKgor ICBOb3cgdHJ5IHRvIHJlbmFtZSB0aGUgdGVtcG9yYXJ5IGZpbGUgdG8gdGhlIHJlYWwgbG9ja2Zp bGUgbmFtZS4KKyAgVGhpcyB3aWxsIGZhaWwgaWYgYSBsb2NrIGZpbGUgb2YgdGhhdCBuYW1lIGFs cmVhZHkgZXhpc3RzLCB3aGljaAorICB3aWxsIGNhdGNoIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90 aGVyIHVzZXJzLgorKi8KKyAgICBjbG9zZShsb2NrZmQpOwkJCS8qIENsb3NlIHRoZSB0ZW1wIGxv Y2tmaWxlLiAqLworICAgIGNobW9kKHRtcG5hbSwwNDQ0KTsKKworICAgIHRyaWVzID0gMDsKKyAg ICB3aGlsZSAoIWhhc2xvY2sgJiYgdHJpZXMrKyA8IDIpIHsKKwloYXNsb2NrID0gKGxpbmsodG1w bmFtLGZsZm5hbSkgPT0gMCk7IC8qIENyZWF0ZSBhIGxpbmsgdG8gaXQuICovCisJZGVidWcoRjEw MSwiVFRMT0NLIGxpbmsiLCIiLGhhc2xvY2spOworCWlmIChoYXNsb2NrKSB7CQkJLyogSWYgd2Ug bWFkZSB0aGUgbG9ja2ZpbGUuLi4gKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIFdlIGNhbid0IGRv IHRoaXMgYW55IG1vcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgZmlsZSBkZXNjcmlwdG9yIHll dC4gKi8KKyNpZmRlZiBMT0NLRgkJCQkvKiBDYW4gYmUgY2FuY2VsZWQgd2l0aCAtRE5PTE9DS0Yg Ki8KKy8qCisgIENyZWF0ZSBhbiBhZHZpc29yeSBsb2NrIG9uIHRoZSBkZXZpY2UgdGhyb3VnaCBp dHMgZmlsZSBkZXNjcmlwdG9yLgorICBUaGlzIGNvZGUgYWN0dWFsbHkgc2VlbXMgdG8gd29yay4g IElmIGl0IGlzIGV4ZWN1dGVkLCBhbmQgdGhlbiBhbm90aGVyCisgIHByb2Nlc3MgdHJpZXMgdG8g b3BlbiB0aGUgc2FtZSBkZXZpY2UgdW5kZXIgYSBkaWZmZXJlbnQgbmFtZSB0byBjaXJjdW12ZW50 CisgIHRoZSBsb2NrZmlsZSwgdGhleSBnZXQgYSAiZGV2aWNlIGJ1c3kiIGVycm9yLgorKi8KKwkg ICAgZGVidWcoRjEwMCwiVFRMT0NLIExPQ0tGIGNvZGUuLi4iLCIiLDApOworICAgICAgICAgICAg d2hpbGUgKCBsb2NrZih0dHlmZCwgRl9UTE9DSywgMEwpICE9IDAgKSB7CisgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwgIlRUTE9DSyBsb2NrZiBlcnJvciIsICIiLCBlcnJubyk7CisgICAgICAg ICAgICAgICAgaWYgKCgrK3RyaWVzID49IDMpIHx8IChlcnJubyAhPSBFQUdBSU4pKSB7CisgICAg ICAgICAgICAgICAgICAgIHggPSB1bmxpbmsoZmxmbmFtKTsgLyogUmVtb3ZlIHRoZSBsb2NrZmls ZSAqLworCQkgICAgaWYgKGVycm5vID09IEVBQ0NFUyAmJiAhcXVpZXQpCisJCSAgICAgIHByaW50 ZigiRGV2aWNlIGFscmVhZHkgbG9ja2VkIGJ5IGFub3RoZXIgcHJvY2Vzc1xuIik7CisgICAgICAg ICAgICAgICAgICAgIGhhc2xvY2sgPSAwOworCQkgICAgYnJlYWs7CisJCX0KKyAgICAgICAgICAg ICAgICBzbGVlcCgyKTsKKwkgICAgfQorI2VuZGlmIC8qIExPQ0tGICovCisjZW5kaWYgLyogQ09N TUVOVCAqLworCisJICAgIGlmIChoYXNsb2NrKSB7CQkvKiBJZiB3ZSBtYWRlIHRoZSBsb2NrZmls ZSAuLi4gKi8KKwkJaWYgKGxvY2syWzBdKSB7CQkvKiBpZiB0aGVyZSBpcyB0byBiZSBhIDJuZCBs b2NrZmlsZSAqLworCQkgICAgbG9ja2ZkID0gY3JlYXQobG9jazIsIDA0NDQpOyAvKiBDcmVhdGUg aXQgKi8KKwkJICAgIGRlYnVnKEYxMTEsIlRUTE9DSyBsb2NrMiBjcmVhdCIsIGxvY2syLCBsb2Nr ZmQpOworCQkgICAgaWYgKGxvY2tmZCA+IC0xKSB7CS8qIENyZWF0ZWQgT0ssIHdyaXRlIHBpZC4g Ki8KKwkJCXdyaXRlKGxvY2tmZCwgKGNoYXIgKikmcGlkLCBzaXplb2YocGlkKSApOworCQkJY2xv c2UobG9ja2ZkKTsJLyogQ2xvc2UgYW5kICovCisJCQljaG1vZChsb2NrMiwgMDQ0NCk7IC8qIHNl dCBwZXJtaXNzaW9ucy4gKi8KKwkJICAgIH0gZWxzZSB7CQkgLyogTm90IE9LLCBidXQgZG9uJ3Qg ZmFpbC4gKi8KKwkJCWxvY2syWzBdID0gJ1wwJzsgLyogSnVzdCByZW1lbWJlciBpdCdzIG5vdCB0 aGVyZS4gKi8KKwkJICAgIH0KKwkJfQorCQlicmVhazsJCQkvKiBhbmQgd2UncmUgZG9uZS4gKi8K KwkgICAgfQorCX0KKyAgICB9CisgICAgdW5saW5rKHRtcG5hbSk7CQkJLyogVW5saW5rIChyZW1v dmUpIHRoZSB0ZW1wIGZpbGUuICovCisgICAgcHJpdl9vZmYoKTsJCQkJLyogVHVybiBvZmYgcHJp dnMgKi8KKyAgICBpID0gaGFzbG9jayA/IDAgOiAtMTsJCS8qIE91ciByZXR1cm4gdmFsdWUgKi8K KyAgICBkZWJ1ZyhGMTAxLCJUVExPQ0sgcmV0dXJucyIsIiIsaSk7CisgICAgcmV0dXJuKGkpOwor I2VuZGlmIC8qIEhQVVggKi8KKyNlbmRpZiAvKiBVU0VUVFlMT0NLICovCisjZW5kaWYgLyogIU5P VVVDUCAqLworfQorCisvKiAgVCBUIFUgTiBMIE8gQyBLICAqLworCitzdGF0aWMgaW50Cit0dHVu bGNrKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtb3ZlIFVVQ1AgbG9ja2Zp bGUocykuICovCisjaWZuZGVmIE5PVVVDUAorICAgIGludCB4OworCisgICAgZGVidWcoRjExMSwi dHR1bmxjayIsZmxmbmFtLGhhc2xvY2spOworCisjaWZkZWYgVVNFVFRZTE9DSworCisgICAgaWYg KGhhc2xvY2sgJiYgKmZsZm5hbSkgeworCWludCB4OworCXByaXZfb24oKTsJCQkvKiBUdXJuIG9u IHByaXZzICovCisjaWZkZWYgVVNFX1VVX0xPQ0sKKwl4ID0gdXVfdW5sb2NrKGxvY2tuYW1lKTsK KyNlbHNlICAvKiBVU0VfVVVfTE9DSyAqLworCXggPSB0dHl1bmxvY2sobG9ja25hbWUpOwkvKiBU cnkgdG8gdW5sb2NrICovCisjZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KKwlwcml2X29mZigpOwkJ CS8qIFR1cm4gb2ZmIHByaXZzICovCisJaWYgKHggPCAwICYmICFxdWlldCkKKwkgIHByaW50Zigi V2FybmluZyAtIENhbid0IHJlbW92ZSBsb2NrZmlsZTogJXNcbiIsIGZsZm5hbSk7CisKKwkqZmxm bmFtID0gJ1wwJzsJCQkvKiBFcmFzZSB0aGUgbmFtZS4gKi8KKwloYXNsb2NrID0gMDsKKwlyZXR1 cm4oMCk7CisgICAgfQorCisjZWxzZSAgLyogTm8gdHR5bG9jaygpLi4uICovCisKKyAgICBpZiAo aGFzbG9jayAmJiAqZmxmbmFtKSB7CisJLyogRG9uJ3QgcmVtb3ZlIGxvY2tmaWxlIGlmIHdlIGRp ZG4ndCBtYWtlIGl0IG91cnNlbHZlcyAqLworCWlmICgoeCA9IHR0cnBpZChmbGZuYW0pKSAhPSAo aW50KWdldHBpZCgpKSB7CisJICAgIGRlYnVnKEYxMTEsInR0dW5sY2sgbG9ja2ZpbGUgc2VpemVk IixmbGZuYW0seCk7CisJICAgIHByaW50ZigiV2FybmluZyAtIExvY2tmaWxlICVzIHNlaXplZCBi eSBwaWQgJWRcbiIsCisJCSAgIGZsZm5hbSwKKwkJICAgeAorCQkgICApOworCSAgICByZXR1cm4o MCk7CisJfQorCXByaXZfb24oKTsJCQkvKiBUdXJuIHByaXZpbGVnZXMgb24uICAqLworCWVycm5v ID0gMDsKKwl4ID0gdW5saW5rKGZsZm5hbSk7CQkvKiBSZW1vdmUgdGhlIGxvY2tmaWxlLiAqLwor CWRlYnVnKEYxMTEsInR0dW5sY2sgdW5saW5rIixmbGZuYW0seCk7CisJaWYgKHggPCAwKSB7CisJ ICAgIGlmIChlcnJubyAmJiAhcXVpZXQpCisJICAgICAgcGVycm9yKHR0bm1zdik7CisJICAgIHBy aW50ZigiV2FybmluZyAtIENhbid0IHJlbW92ZSBsb2NrZmlsZTogJXNcbiIsIGZsZm5hbSk7CisJ fQorCWhhc2xvY2sgPSAwOworCSpmbGZuYW0gPSAnXDAnOwkJCS8qIEVyYXNlIHRoZSBuYW1lLiAq LworCisjaWZkZWYgUlRBSVgKKwllcnJubyA9IDA7CisJeCA9IHVubGluayhsa2ZsZm4pOwkJLyog UmVtb3ZlIGxpbmsgdG8gbG9ja2ZpbGUgKi8KKwlkZWJ1ZyhGMTExLCJ0dHVubGNrIEFJWCBsaW5r IHVubGluayIsbGtmbGZuLHgpOworCWlmICh4IDwgMCkgeworCSAgICBpZiAoZXJybm8gJiYgIXF1 aWV0KQorCSAgICAgIHBlcnJvcih0dG5tc3YpOworCSAgICBwcmludGYoIldhcm5pbmcgLSBDYW4n dCByZW1vdmUgbGluayB0byBsb2NrZmlsZTogJXNcbiIsIGxrZmxmbik7CisJfQorCSpsa2ZsZm4g PSAnXDAnOworI2Vsc2UKKwlpZiAobG9jazJbMF0pIHsJCQkvKiBJZiB0aGVyZSBpcyBhIHNlY29u ZCBsb2NrZmlsZSwgKi8KKwkgICAgZXJybm8gPSAwOworCSAgICB4ID0gdW5saW5rKGxvY2syKTsJ CS8qICByZW1vdmUgaXQgdG9vLiAqLworCSAgICBkZWJ1ZyhGMTExLCJ0dHVubGNrIGxvY2syIHVu bGluayIsbG9jazIseCk7CisJICAgIGlmICh4IDwgMCkgeworCQlpZiAoZXJybm8gJiYgIXF1aWV0 KQorCQkgIHBlcnJvcih0dG5tc3YpOworCQlwcmludGYoIldhcm5pbmcgLSBDYW4ndCByZW1vdmUg c2Vjb25kYXJ5IGxvY2tmaWxlOiAlc1xuIiwKKwkJICAgICAgIGxvY2syCisJCSAgICAgICApOwor CSAgICB9CisJICAgIGxvY2syWzBdID0gJ1wwJzsJCS8qIEZvcmdldCBpdHMgbmFtZS4gKi8KKwl9 CisjZW5kaWYgLyogUlRBSVggKi8KKworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBMT0NLRgorICAg ICAgICAoVk9JRCkgbG9ja2YodHR5ZmQsIEZfVUxPQ0ssIDBMKTsgLyogUmVtb3ZlIGFkdmlzb3J5 IGxvY2sgKi8KKyNlbmRpZiAvKiBMT0NLRiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworCXBy aXZfb2ZmKCk7CQkJLyogVHVybiBwcml2aWxlZ2VzIG9mZi4gKi8KKyAgICB9CisjZW5kaWYgLyog VVNFVFRZTE9DSyAqLworI2VuZGlmIC8qICFOT1VVQ1AgKi8KKyAgICByZXR1cm4oMCk7Cit9CisK Ky8qCisgIDQuM0JTRC1zdHlsZSBVVUNQIGxpbmUgZGlyZWN0aW9uIGNvbnRyb2wuCisgIChTdGFu IEJhcmJlciwgUmljZSBVLCAxOTgwLXNvbWV0aGluZy4uLikKKyovCisjaWZuZGVmIE5PVVVDUAor I2lmZGVmIEFDVUNOVFJMCitWT0lECithY3VjbnRybChmbGFnLHR0bmFtZSkgY2hhciAqZmxhZywg KnR0bmFtZTsgeworICAgIGNoYXIgeFtERVZOQU1MRU4rMzJdLCAqZGV2aWNlLCAqZGV2bmFtZTsK KworICAgIGlmIChzdHJjbXAodHRuYW1lLENUVE5BTSkgPT0gMCB8fCB4bG9jYWwgPT0gMCkgLyog SWYgbm90IGxvY2FsLCAqLworICAgICAgcmV0dXJuOwkJCQkvKiBqdXN0IHJldHVybi4gKi8KKyAg ICBkZXZpY2UgPSAoKGRldm5hbWUgPSB4eGxhc3QodHRuYW1lLCcvJykpICE9IE5VTEwgPyBkZXZu YW1lKzEgOiB0dG5hbWUpOworICAgIGlmIChzdHJuY21wKGRldmljZSwiTENLLi4iLDQpID09IDAp IGRldmljZSArPSA1OworICAgIGNrbWFrbXNnKHgsREVWTkFNTEVOKzMyLCIvdXNyL2xpYi91dWNw L2FjdWNudHJsICIsZmxhZywiICIsZGV2aWNlKTsKKyAgICBkZWJ1ZyhGMTEwLCJjYWxsZWQgIix4 LDApOworICAgIHpzeXNjbWQoeCk7Cit9CisjZW5kaWYgLyogQUNVQ05UUkwgKi8KKyNlbmRpZiAv KiBOT1VVQ1AgKi8KKworLyoKKyAgVCBUIEggRiBMIE8gVyAgLS0gIFNldCBvciBSZXNldCBoYXJk d2FyZSBmbG93IGNvbnRyb2wuCisKKyAgVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGNvbGxlY3QgYWxs IGhhcmR3YXJlLWZsb3ctY29udHJvbCByZWxhdGVkIGNvZGUKKyAgaW50byBhIHNpbmdsZSBtb2R1 bGUuICBUaGFua3MgdG8gUmljayBTbGFka2V5IGFuZCBKb2huIEtvaGwgZm9yIGxvdHMgb2YKKyAg aGVscCBoZXJlLiAgT3ZlcnZpZXc6CisKKyAgSGFyZHdhcmUgZmxvdyBjb250cm9sIGlzIG5vdCBz dXBwb3J0ZWQgaW4gbWFueSBVTklYIGltcGxlbWVudGlvbnMuICBFdmVuCisgIHdoZW4gaXQgaXMg c3VwcG9ydGVkLCB0aGVyZSBpcyBubyAoaGEgaGEpICJzdGFuZGFyZCIgZm9yIHRoZSBwcm9ncmFt bWluZworICBpbnRlcmZhY2UuICBJbiBnZW5lcmFsLCA0LjNCU0QgYW5kIGVhcmxpZXIgKHNvbWV0 aW1lcyksIDQuNEJTRCwgU3lzdGVtIFYsCisgIFN1bk9TLCBBSVgsIGV0YywgaGF2ZSB0b3RhbGx5 IGRpZmZlcmVudCBtZXRob2RzLiAgKEFuZCwgbm90IHN0cmljdGx5CisgIHJlbGV2YW50IGhlcmUs IHRoZSBwcm9ncmFtbWluZyBpbnRlcmZhY2Ugb2Z0ZW4gYnJpbmdzIG9uZSBvbmx5IHRvIGEgbm8t b3AKKyAgaW4gdGhlIGRldmljZSBkcml2ZXIhKQorCisgIEFtb25nIGFsbCB0aGVzZSwgd2UgaGF2 ZSB0d28gbWFqb3IgdHlwZXMgb2YgQVBJczogdGhvc2UgaW4gd2hpY2ggaGFyZHdhcmUKKyAgZmxv dyBjb250cm9sIGlzIGRldGVybWluZWQgYnkgYml0cyBpbiB0aGUgc2FtZSB0ZXJtaW8vdGVybWlv cy9zZ3R0eSBtb2RlCisgIHdvcmQocykgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbGxpbmcgc3Vj aCBpdGVtcyBhcyBDQlJFQUsgdnMgUkFXIG1vZGUsIGFuZAorICB3aGljaCBhcmUgYWxzbyB1c2Vk IGJ5IHRoZSB0dHZ0KCksIHR0cGt0KCksIGNvbmJpbigpLCBhbmQgY29uY2IoKSByb3V0aW5lcwor ICBmb3IgY2hhbmdpbmcgdGVybWluYWwgbW9kZXMuICBBbmQgdGhvc2UgdGhhdCB1c2UgZW50aXJl bHkgZGlmZmVyZW50CisgIG1lY2hhbmlzbXMuCisKKyAgSW4gdGhlIGZpcnN0IGNhdGVnb3J5LCBp dCBpcyBpbXBvcnRhbnQgdGhhdCBhbnkgY2hhbmdlIGluIHRoZSBtb2RlIGJpdHMgYmUKKyAgcmVm bGVjdGVkIGluIHRoZSByZWxldmFudCB0ZXJtaW8ocykvc2d0dHkgc3RydWN0dXJlLCBzbyB0aGF0 IHN1YnNlcXVlbnQKKyAgY2hhbmdlcyB0byB0aGF0IHN0cnVjdHVyZSBkbyBub3Qgd2lwZSBvdXQg dGhlIGVmZmVjdHMgb2YgdGhpcyByb3V0aW5lLiAgVGhhdAorICBpcyB3aHkgYSBwb2ludGVyLCBh dHRycywgdG8gdGhlIGFwcHJvcHJpYXRlIHN0cnVjdHVyZSBpcyBwYXNzZWQgYXMgYQorICBwYXJh bWV0ZXIgdG8gdGhpcyByb3V0aW5lLgorCisgIFRoZSBzZWNvbmQgY2F0ZWdvcnkgc2hvdWxkIGdp dmUgdXMgbm8gd29ycmllcywgc2luY2UgYW55IGNoYW5nZXMgdG8gaGFyZHdhcmUKKyAgZmxvdyBj b250cm9sIGFjY29tcGxpc2hlZCBieSB0aGlzIHJvdXRpbmUgc2hvdWxkIG5vdCBhZmZlY3QgdGhl IHRlcm1pbyhzKS8KKyAgc2d0dHkgc3RydWN0dXJlcywgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdCBi ZSB1bmRvbmUgYnkgbGF0ZXIgY2hhbmdlcyB0byB0aGVtLgorCisgIFRoZSBzZWNvbmQgYXJndW1l bnQsIHN0YXR1cywgbWVhbnMgdG8gdHVybiBvbiBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaWYKKyAg bm9uemVybywgYW5kIHRvIHR1cm4gaXQgb2ZmIGlmIHplcm8uCisKKyAgUmV0dXJuczogMCBvbiBh cHBhcmVudCBzdWNjZXNzLCAtMSBvbiBwcm9iYWJsZSBmYWlsdXJlLgorKi8KKworLyoKKyAgVGhl IGZvbGxvd2luZyBidXNpbmVzcyBpcyBmb3IgQlNESSwgd2hlcmUgaXQgd2FzIGRpc2NvdmVyZWQg dGhhdCB0d28KKyAgc2VwYXJhdGUgYml0cywgQ0NUU19PRkxPVyBhbmQgQ1JUU19JRkxPVywgYXJl IHVzZWQgaW4gaGFyZHdhcmUgZmxvdyBjb250cm9sLAorICBidXQgQ1RSU0NUUyBpcyBkZWZpbmVk IChpbiA8dGVybWlvcy5oPikgdG8gYmUganVzdCBDQ1RTX09GTE9XIHJhdGhlciBib3RoCisgIGJp dHMsIHNvIGh3ZmMgb25seSB3b3JrcyBpbiBvbmUgZGlyZWN0aW9uIGlmIHlvdSB1c2UgQ1JUU0NU UyB0byBjb250cm9sIGl0LgorICBPdGhlciA0LjRCU0QtYmFzZWQgVW5peGVzIHN1Y2ggYXMgRnJl ZUJTRCA0LjEsIHdoaWNoIHVzZSB0aGVzZSB0d28gYml0cywKKyAgZGVmaW5lIENSVFNDVFMgY29y cmVjdGx5LgorKi8KKyNpZmRlZiBGSVhDUlRTQ1RTCisjaWZkZWYgQ1JUU0NUUworI2lmZGVmIEND VFNfT0ZMT1cKKyNpZmRlZiBDUlRTX0lGTE9XCisjdW5kZWYgQ1JUU0NUUworI2RlZmluZSBDUlRT Q1RTIChDUlRTX0lGTE9XfENDVFNfT0ZMT1cpCisjZW5kaWYgLyogQ1JUU19JRkxPVyAqLworI2Vu ZGlmIC8qIENDVFNfT0ZMT1cgKi8KKyNlbmRpZiAvKiBDUlRTQ1RTICovCisjZW5kaWYgLyogRklY Q1JUU0NUUyAqLworCitzdGF0aWMgaW50Cit0dGhmbG93KGZsb3csIHN0YXR1cywgYXR0cnMpCisg ICAgaW50IGZsb3csCQkJCS8qIFR5cGUgb2YgZmxvdyBjb250cm9sIChja2NkZWIuaCkgKi8KKyAg ICBzdGF0dXM7CQkJCS8qIE5vbnplcm8gPSB0dXJuIGl0IG9uICovCisJCQkJCS8qIFplcm8gPSB0 dXJuIGl0IG9mZiAqLworI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYIG9yIEJTRDQ0ICov CisgICAgc3RydWN0IHRlcm1pb3MgKmF0dHJzOworI2Vsc2UJCQkJCS8qIFN5c3RlbSBWICovCisj aWZkZWYgQVRUU1YKKyNpZmRlZiBBVFQ3MzAwCisjaWZkZWYgVU5JWDM1MU0KKy8qIEFUJlQgVU5J WCAzLjUxbSBjYW4gc2V0IGJ1dCBub3QgdGVzdCBmb3IgaGFyZHdhcmUgZmxvdyBjb250cm9sICov CisjZGVmaW5lIFJUU0ZMT1cgQ1RTQ0QKKyNkZWZpbmUgQ1RTRkxPVyBDVFNDRAorI2VuZGlmIC8q IEFUVDczMDAgKi8KKyNlbmRpZiAvKiBVTklYMzUxTSAqLworICAgIHN0cnVjdCB0ZXJtaW8gKmF0 dHJzOworI2Vsc2UJCQkJCS8qIEJTRCwgVjcsIGV0YyAqLworICAgIHN0cnVjdCBzZ3R0eWIgKmF0 dHJzOwkJLyogc2d0dHkgaW5mby4uLiAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyog QlNENDRPUlBPU0lYICovCisvKiB0dGhmbG93ICovIHsKKworICAgIGludCB4ID0gMDsJCQkJLyog dHRoZmxvdygpIHJldHVybiBjb2RlICovCisKKyNpZmRlZiBQbGFuOQorICAgIHJldHVybiBwOXR0 aGZsb3coZmxvdywgc3RhdHVzKTsKKyNlbHNlCisKKyNpZm5kZWYgT1hPUwkJCQkvKiBOT1QgT2xp dmV0dGkgWC9PUy4uLiAqLworLyoKKyAgRm9yIFN1bk9TIDQuMCBhbmQgbGF0ZXIgaW4gdGhlIEJT RCBlbnZpcm9ubWVudCAuLi4KKworICBUaGUgZGVjbGFyYXRpb25zIGFyZSBjb3BpZWQgYW5kIGlu dGVycHJldGVkIGZyb20gdGhlIFN5c3RlbSBWIGhlYWRlciBmaWxlcywKKyAgc28gd2UgZG9uJ3Qg YWN0dWFsbHkgaGF2ZSB0byBwdWxsIGluIGFsbCB0aGUgU3lzdGVtIFYganVuayB3aGVuIGJ1aWxk aW5nCisgIEMtS2VybWl0IGZvciBTdW5PUyBpbiB0aGUgQlNEIGVudmlyb25tZW50LCB3aGljaCB3 b3VsZCBiZSBkYW5nZXJvdXMgYmVjYXVzZQorICBoYXZpbmcgdGhvc2Ugc3ltYm9scyBkZWZpbmVk IHdvdWxkIGNhdXNlIHVzIHRvIHRha2UgdGhlIHdyb25nIHBhdGhzIHRocm91Z2gKKyAgdGhlIGNv ZGUuICBUaGUgY29kZSBpbiB0aGlzIHNlY3Rpb24gaXMgdXNlZCBpbiBib3RoIHRoZSBCU0QgYW5k IFN5cyBWIFN1bk9TCisgIHZlcnNpb25zLgorKi8KKyNpZmRlZiBTVU5PUzQxCisvKgorICBJbiBT dW5PUyA0LjEgYW5kIGxhdGVyLCB3ZSB1c2UgdGhlIFBPU0lYIGNhbGxzIHJhdGhlciB0aGFuIGlv Y3RsIGNhbGxzCisgIGJlY2F1c2UgR05VIENDIHVzZXMgZGlmZmVyZW50IGZvcm1hdHMgZm9yIHRo ZSBfSU94eHggbWFjcm9zIHRoYW4gcmVndWxhciBDQzsKKyAgdGhlIFBPU0lYIGZvcm1zIHdvcmsg Zm9yIGJvdGguICBCdXQgdGhlIFBPU0lYIGNhbGxzIGFyZSBub3QgYXZhaWxhYmxlIGluCisgIFN1 bk9TIDQuMC4KKyovCisjZGVmaW5lIENSVFNDVFMgMHg4MDAwMDAwMAkJLyogUlRTL0NUUyBmbG93 IGNvbnRyb2wgKi8KKyNkZWZpbmUgVENTQU5PVyAwCQkJLyogRG8gaXQgbm93ICovCisKKyAgICBz dHJ1Y3QgdGVybWlvcyB7CisJdW5zaWduZWQgbG9uZyBjX2lmbGFnOwkJLyogSW5wdXQgbW9kZXMg Ki8KKwl1bnNpZ25lZCBsb25nIGNfb2ZsYWc7CQkvKiBPdXRwdXQgbW9kZXMgKi8KKwl1bnNpZ25l ZCBsb25nIGNfY2ZsYWc7CQkvKiBDb250cm9sIG1vZGVzICovCisJdW5zaWduZWQgbG9uZyBjX2xm bGFnOwkJLyogTGluZSBkaXNjaXBsaW5lIG1vZGVzICovCisJY2hhciBjX2xpbmU7CisJQ0hBUiBj X2NjWzE3XTsKKyAgICB9OworICAgIHN0cnVjdCB0ZXJtaW9zIHRlbXA7CisKK19QUk9UT1RZUCgg aW50IHRjZ2V0YXR0ciwgKGludCwgc3RydWN0IHRlcm1pb3MgKikgKTsKK19QUk9UT1RZUCggaW50 IHRjc2V0YXR0ciwgKGludCwgaW50LCBzdHJ1Y3QgdGVybWlvcyAqKSApOworLyoKKyAgV2hlbiBD UlRTQ1RTIGlzIHNldCwgU3VuT1Mgd29uJ3QgZG8gb3V0cHV0IHVubGVzcyBib3RoIENUUyBhbmQg Q0QgYXJlCisgIGFzc2VydGVkLiAgU28gd2UgZG9uJ3Qgc2V0IENSVFNDVFMgdW5sZXNzIENEIGlz IHVwLiAgVGhpcyBzaG91bGQgYmUgT0ssCisgIHNpbmNlIHdlIGRvbid0IG5lZWQgUlRTL0NUUyBk dXJpbmcgZGlhbGluZywgYW5kIGFmdGVyIGRpYWxpbmcgaXMgY29tcGxldGUsCisgIHdlIHNob3Vs ZCBoYXZlIENELiAgSWYgbm90LCB3ZSBzdGlsbCBjb21tdW5pY2F0ZSwgYnV0IHdpdGhvdXQgUlRT L0NUUy4KKyovCisgICAgaW50IG1mbGFnczsJCQkJLyogTW9kZW0gc2lnbmFsIGZsYWdzICovCisK KyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVU Q01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYg LyogTkVUUFRZICovCisKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNVTk9TNDEgZW50cnkgc3Rh dHVzIiwiIixzdGF0dXMpOworICAgIGlmICghc3RhdHVzKSB7CQkJLyogVHVybiBoYXJkIGZsb3cg b2ZmICovCisJaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApID4gLTEgJiYgLyogR2V0IGRldmlj ZSBhdHRyaWJ1dGVzICovCisJICAgICh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSkgeyAvKiBDaGVj ayBmb3IgUlRTL0NUUyAqLworCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfkNSVFNDVFM7CS8qIEl0J3Mg dGhlcmUsIHJlbW92ZSBpdCAqLworCSAgICB4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRl bXApOworCX0KKyAgICB9IGVsc2UgewkJCQkvKiBUdXJuIGhhcmQgZmxvdyBvbiAqLworCWlmIChp b2N0bCh0dHlmZCxUSU9DTUdFVCwmbWZsYWdzKSA+IC0xICYmIC8qIEdldCBtb2RlbSBzaWduYWxz ICovCisJICAgIChtZmxhZ3MgJiBUSU9DTV9DQVIpKSB7CQkvKiBDaGVjayBmb3IgQ0QgKi8KKwkg ICAgZGVidWcoRjEwMCwidHRoZmxvdyBTdW5PUyBoYXMgQ0QiLCIiLDApOworCSAgICBpZiAodGNn ZXRhdHRyKHR0eWZkLCAmdGVtcCkgPiAtMSAmJiAvKiBHZXQgZGV2aWNlIGF0dHJpYnV0ZXMgKi8K KwkJISh0ZW1wLmNfY2ZsYWcgJiBDUlRTQ1RTKSkgeyAvKiBDaGVjayBmb3IgUlRTL0NUUyAqLwor CQl0ZW1wLmNfY2ZsYWcgfD0gQ1JUU0NUUzsJLyogTm90IHRoZXJlLCBhZGQgaXQgKi8KKwkJeCA9 IHRjc2V0YXR0cih0dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAg IHggPSAtMTsKKwkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBTdW5PUyBubyBDRCIsIiIsMCk7CisJ fQorICAgIH0KKyNlbHNlCisjaWZkZWYgUU5YCisgICAgc3RydWN0IHRlcm1pb3MgdGVtcDsKKyNp ZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01E ICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyog TkVUUFRZICovCisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBRTlggZW50cnkgc3RhdHVzIiwiIixz dGF0dXMpOworICAgIGlmICh0Y2dldGF0dHIodHR5ZmQsICZ0ZW1wKSA+IC0xKSB7CS8qIEdldCBk ZXZpY2UgYXR0cmlidXRlcyAqLworCWlmICghc3RhdHVzKSB7CQkJLyogVHVybiBoYXJkIGZsb3cg b2ZmICovCisJICAgIGlmICgodGVtcC5jX2NmbGFnICYgKElIRkxPV3xPSEZMT1cpKSA9PSAoSUhG TE9XfE9IRkxPVykpIHsKKwkJdGVtcC5jX2NmbGFnICY9IH4oSUhGTE9XfE9IRkxPVyk7IC8qIEl0 J3MgdGhlcmUsIHJlbW92ZSBpdCAqLworCQlhdHRycy0+Y19jZmxhZyAmPSB+KElIRkxPV3xPSEZM T1cpOworCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOworCSAgICB9CisJfSBl bHNlIHsJCQkvKiBUdXJuIGhhcmQgZmxvdyBvbiAqLworCSAgICBpZiAoKHRlbXAuY19jZmxhZyAm IChJSEZMT1d8T0hGTE9XKSkgIT0gKElIRkxPV3xPSEZMT1cpKSB7CisJCXRlbXAuY19jZmxhZyB8 PSAoSUhGTE9XfE9IRkxPVyk7IC8qIE5vdCB0aGVyZSwgYWRkIGl0ICovCisJCXRlbXAuY19pZmxh ZyAmPSB+KElYT058SVhPRkYpOyAgIC8qIEJ5ZSB0byBJWE9OL0lYT0ZGICovCisJCXR0cmF3LmNf bGZsYWcgfD0gSUVYVEVOOyAgICAgICAgIC8qIE11c3QgYmUgb24gKi8KKwkJeCA9IHRjc2V0YXR0 cih0dHlmZCxUQ1NBTk9XLCZ0ZW1wKTsKKwkJYXR0cnMtPmNfY2ZsYWcgfD0gKElIRkxPV3xPSEZM T1cpOworCQlhdHRycy0+Y19pZmxhZyAmPSB+KElYT058SVhPRkYpOworCSAgICB9CisJfQorICAg IH0gZWxzZSB7CisJeCA9IC0xOworCWRlYnVnKEYxMDAsICJ0dGhmbG93IFFOWCBnZXRhdHRyIGZh aWxzIiwgIiIsIDApOworICAgIH0KKyNlbHNlCisjaWZkZWYgUE9TSVhfQ1JUU0NUUworLyoKKyAg UE9TSVhfQ1JUU0NUUyBpcyBkZWZpbmVkIGluIGNrY2RlYi5oIG9yIG9uIENDIGNvbW1hbmQgbGlu ZS4KKyAgTm90ZTogRG8gbm90IGFzc3VtZSBDUlRTQ1RTIGlzIGEgb25lLWJpdCBmaWVsZCEKKyov CisgICAgc3RydWN0IHRlcm1pb3MgdGVtcDsKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBl KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYg KHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgZGVidWcoRjEwMSwi dHRoZmxvdyBQT1NJWF9DUlRTQ1RTIGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKKyAgICBlcnJu byA9IDA7CisgICAgeCA9IHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApOworICAgIGRlYnVnKEYxMTEs InR0aGZsb3cgUE9TSVhfQ1JUU0NUUyB0Y2dldGF0dHIiLGNraXRvYSh4KSxlcnJubyk7CisgICAg ZXJybm8gPSAwOworICAgIGlmICh4IDwgMCkgeworCXggPSAtMTsKKyAgICB9IGVsc2UgeworCWlm ICghc3RhdHVzKSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb2ZmICovCisJICAgIGlmICgKKyNpZmRl ZiBDT01NRU5UCisJCS8qIFRoaXMgY2FuIGZhaWwgYmVjYXVzZSBvZiBzaWduIGV4dGVuc2lvbiAq LworCQkvKiBlLmcuIGluIExpbnV4IHdoZXJlIGl0J3MgQml0IDMxICovCisJCSh0ZW1wLmNfY2Zs YWcgJiBDUlRTQ1RTKSA9PSBDUlRTQ1RTCisjZWxzZQorCQkodGVtcC5jX2NmbGFnICYgQ1JUU0NU UykgIT0gMAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJKSB7CisJCXRlbXAuY19jZmxhZyAmPSB+ Q1JUU0NUUzsgLyogSXQncyB0aGVyZSwgcmVtb3ZlIGl0ICovCisJCWF0dHJzLT5jX2NmbGFnICY9 IH5DUlRTQ1RTOworCQl4ID0gdGNzZXRhdHRyKHR0eWZkLFRDU0FOT1csJnRlbXApOworCQlkZWJ1 ZyhGMTExLCJ0dGhmbG93IFBPU0lYX0NSVFNDVFMgT0ZGIHRjc2V0YXR0ciIsCisJCSAgICAgIGNr aXRvYSh4KSxlcnJubyk7CisJICAgIH0gZWxzZSB7CQkJLyogSm9obiBEdW5sYXAgMjAxMC0wMS0y NiAqLworCQlkZWJ1ZyhGMDAxLAorCQkgICAgICAidHRoZmxvdyBiZWZvcmUgZm9yY2luZyBvZmYg YXR0cnMgQ1JUU0NUUyIsCisJCSAgICAgICIiLAorCQkgICAgICBhdHRycy0+Y19jZmxhZyZDUlRT Q1RTCisJCSAgICAgICk7CisJCWF0dHJzLT5jX2NmbGFnICY9IH5DUlRTQ1RTOyAvKiBmb3JjZSBp dCBvZmYgaWYgIXN0YXR1cyAqLworCQlkZWJ1ZyhGMDAxLAorCQkgICAgICAidHRoZmxvdyBhZnRl ciBmb3JjaW5nIG9mZiBhdHRycyBDUlRTQ1RTIiwKKwkJICAgICAgIiIsCisJCSAgICAgIGF0dHJz LT5jX2NmbGFnJkNSVFNDVFMKKwkJICAgICAgKTsKKwkJfQorCX0gZWxzZSB7CQkJLyogVHVybiBo YXJkIGZsb3cgb24gKi8KKwkgICAgaWYgKAorI2lmZGVmIENPTU1FTlQKKwkJLyogVGhpcyBjYW4g ZmFpbCBiZWNhdXNlIG9mIHNpZ24gZXh0ZW5zaW9uICovCisJCSh0ZW1wLmNfY2ZsYWcgJiBDUlRT Q1RTKSAhPSBDUlRTQ1RTCisjZWxzZQorCQkodGVtcC5jX2NmbGFnICYgQ1JUU0NUUykgPT0gMAor I2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJKSB7CisJCXRlbXAuY19jZmxhZyB8PSBDUlRTQ1RTOyAv KiBOb3QgdGhlcmUsIGFkZCBpdCAqLworCQl0ZW1wLmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGfElY QU5ZKTsgLyogQnllIHRvIElYT04vSVhPRkYgKi8KKwkJeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NB Tk9XLCZ0ZW1wKTsKKwkJZGVidWcoRjExMSwidHRoZmxvdyBQT1NJWF9DUlRTQ1RTIE9OIHRjc2V0 YXR0ciIsCisJCSAgICAgIGNraXRvYSh4KSxlcnJubyk7CisJCWF0dHJzLT5jX2NmbGFnIHw9IENS VFNDVFM7CisJCWF0dHJzLT5jX2lmbGFnICY9IH4oSVhPTnxJWE9GRnxJWEFOWSk7CisJICAgIH0K Kwl9CisgICAgfQorI2Vsc2UKKyNpZmRlZiBTVU5PUzQKKy8qCisgIFN1bk9TIDQuMCAoYW5kIG1h eWJlIGVhcmxpZXI/KS4gIFRoaXMgY29kZSBpcyBkYW5nZXJvdXMgYmVjYXVzZSBpdAorICBwcmV2 ZW50cyBjb21waWxhdGlvbiB3aXRoIEdOVSBnY2MsIHdoaWNoIHVzZXMgZGlmZmVyZW50IGZvcm1h dHMgZm9yIHRoZQorICBfSU9SeHh4IG1hY3JvcyB0aGFuIHJlZ3VsYXIgY2MuICBTdW5PUyA0LjEg YW5kIGxhdGVyIGNhbiB1c2UgdGhlIFBPU0lYCisgIHJvdXRpbmVzIGFib3ZlLCB3aGljaCB3b3Jr IGZvciBib3RoIGNjIGFuZCBnY2MuCisqLworI2RlZmluZSBUQ0dFVFMgX0lPUihULCA4LCBzdHJ1 Y3QgdGVybWlvcykgLyogR2V0IG1vZGVzIGludG8gdGVybWlvcyBzdHJ1Y3QgKi8KKyNkZWZpbmUg VENTRVRTIF9JT1coVCwgOSwgc3RydWN0IHRlcm1pb3MpIC8qIFNldCBtb2RlcyBmcm9tIHRlcm1p b3Mgc3RydWN0ICovCisjZGVmaW5lIENSVFNDVFMgMHg4MDAwMDAwMAkJICAvKiBSVFMvQ1RTIGZs b3cgY29udHJvbCAqLworCisgICAgc3RydWN0IHRlcm1pb3MgeworCXVuc2lnbmVkIGxvbmcgY19p ZmxhZzsJCS8qIElucHV0IG1vZGVzICovCisJdW5zaWduZWQgbG9uZyBjX29mbGFnOwkJLyogT3V0 cHV0IG1vZGVzICovCisJdW5zaWduZWQgbG9uZyBjX2NmbGFnOwkJLyogQ29udHJvbCBtb2RlcyAq LworCXVuc2lnbmVkIGxvbmcgY19sZmxhZzsJCS8qIExpbmUgZGlzY2lwbGluZSBtb2RlcyAqLwor CWNoYXIgY19saW5lOworCUNIQVIgY19jY1sxN107CisgICAgfTsKKyAgICBzdHJ1Y3QgdGVybWlv cyB0ZW1wOworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpIHJldHVybigwKTsKKyNlbmRp ZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigwKTsK KyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IGVudHJ5IHN0YXR1 cyIsIiIsc3RhdHVzKTsKKyAgICBpZiAoaW9jdGwodHR5ZmQsVENHRVRTLCZ0ZW1wKSA+IC0xKSB7 IC8qIEdldCB0ZXJtaW5hbCBtb2Rlcy4gKi8KKwlpZiAoc3RhdHVzKSB7CQkJLyogVHVybiBoYXJk IGZsb3cgb24gKi8KKwkgICAgdGVtcC5jX2NmbGFnIHw9IENSVFNDVFM7CS8qIEFkZCBSVFMvQ1RT IHRvIHRoZW0uICovCisJICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NFVFMsJnRlbXApOyAvKiBTZXQg dGhlbSBhZ2Fpbi4gKi8KKwkgICAgYXR0cnMtPmNfY2ZsYWcgfD0gQ1JUU0NUUzsJLyogQWRkIHRv IGdsb2JhbCBpbmZvLiAqLworCX0gZWxzZSB7CQkJLyogVHVybiBoYXJkIGZsb3cgb2ZmICovCisJ ICAgIHRlbXAuY19jZmxhZyAmPSB+Q1JUU0NUUzsKKwkgICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VU UywmdGVtcCk7CisJICAgIGF0dHJzLT5jX2NmbGFnICY9IH5DUlRTQ1RTOworCX0KKyAgICB9Cisj ZWxzZQkJCQkJLyogTm90IFN1bk9TIDQuMCBvciBsYXRlciAqLworI2lmZGVmIEFJWFJTCQkJCS8q IElCTSBBSVggUlMvNjAwMCAqLworI2lmbmRlZiBBSVg0MQkJCQkvKiBCdXQgb25seSBwcmUtNC54 ID09IFNWUjQgKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7Cisj ZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4o MCk7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgaWYgKHN0YXR1cykgeworCWlmICgoeCA9IGlv Y3RsKHR0eWZkLCBUWEFERENELCAicnRzIikpIDwgMCAmJiBlcnJubyAhPSBFQlVTWSkKKwkgIGRl YnVnKEYxMDAsImhhcmRmbG93IFRYQUREQ0QgKHJ0cykgZXJyb3IiLCAiIiwgMCk7CisgICAgfSBl bHNlIHsKKwlpZiAoKHggPSBpb2N0bCh0dHlmZCwgVFhERUxDRCwgInJ0cyIpKSA8IDAgJiYgZXJy bm8gIT0gRUlOVkFMKQorCSAgZGVidWcoRjEwMCwiaGFyZGZsb3cgVFhERUxDRCAocnRzKSBlcnJv ciIsICIiLCAwKTsKKyAgICB9CisjZW5kaWYgLyogQUlYNDEgKi8KKyNlbHNlCQkJCQkvKiBOb3Qg QUlYIFJTLzYwMDAgKi8KKworI2lmZGVmIEFUVFNWCQkJCS8qIFN5c3RlbSBWLi4uICovCisKKyNp ZmRlZiBDS19TQ09WNQkJCQkvKiBTQ08gT3BlbiBTZXJ2ZXIgNS4wICovCisjZGVmaW5lIENLX1ND T1VOSVgKKyNlbHNlCisjaWZkZWYgTV9VTklYCQkJCS8qIFNDTyBVTklYIDMuMnY0Lnggb3IgZWFy bGllciAqLworI2RlZmluZSBDS19TQ09VTklYCisjZW5kaWYgLyogTV9VTklYICovCisjZW5kaWYg LyogQ0tfU0NPVjUgKi8KKworI2lmZGVmIFNDT19GT1JDRV9SVFNYT0ZGCisjaWZkZWYgQ0tfU0NP VU5JWAkJCS8qIEJ1dCBub3QgU0NPIE9wZW5TZXJ2ZXIgNS4wLjQgKi8KKyNpZmRlZiBTQ09fT1NS NTA0CQkJLyogb3IgbGF0ZXIuLi4gKi8KKyN1bmRlZiBDS19TQ09VTklYCisjZW5kaWYgLyogU0NP X09TUjUwNCAqLworI2VuZGlmIC8qIENLX1NDT1VOSVggKi8KKyNlbmRpZiAvKiBTQ09fRk9SQ0Vf UlRTWE9GRiAqLworCisjaWZkZWYgQ0tfU0NPVU5JWAorI2lmZGVmIFBPU0lYCisgICAgc3RydWN0 IHRlcm1pb3MgdGVtcDsKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7 CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1 cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ09V TklYIFBPU0lYIGVudHJ5IHN0YXR1cyIsIiIsc3RhdHVzKTsKKyAgICBlcnJubyA9IDA7CisgICAg eCA9IHRjZ2V0YXR0cih0dHlmZCwgJnRlbXApOworICAgIGRlYnVnKEYxMTEsInR0aGZsb3cgU0NP IFVOSVggUE9TSVggdGNnZXRhdHRyIixja2l0b2EoeCksZXJybm8pOworI2Vsc2UgLyogUE9TSVgg Ki8KKyAgICBzdHJ1Y3QgdGVybWlvIHRlbXA7CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlw ZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlm ICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgIGRlYnVnKEYxMDEs InR0aGZsb3cgU0NPVU5JWCBub24tUE9TSVggZW50cnkgc3RhdHVzIiwiIixzdGF0dXMpOworICAg IHggPSBpb2N0bCh0dHlmZCwgVENHRVRBLCAmdGVtcCk7CisgICAgZGVidWcoRjExMSwidHRoZmxv dyBTQ08gVU5JWCBub24tUE9TSVggVENHRVRBIixja2l0b2EoeCksZXJybm8pOworI2VuZGlmIC8q IFBPU0lYICovCisvKgorICBUaGlzIGlzIG5vdCByZWFsbHkgUE9TSVgsIHNpbmNlIFBPU0lYIGRv ZXMgbm90IGRlYWwgd2l0aCBoYXJkd2FyZSBmbG93CisgIGNvbnRyb2wsIGJ1dCB3ZSBhcmUgdXNp bmcgdGhlIFBPU0lYIEFQSXMuICBJbiBmYWN0LCBSVFNGTE9XIGFuZCBDVFNGTE9XCisgIGFyZSBk ZWZpbmVkIGluIHRlcm1pby5oLCBidXQgd2l0aGluICNpZm5kZWYgX1BPU0lYX1NPVVJDRS4uI2Vu ZGlmLiAgU28KKyAgbGV0J3MgdHJ5IGZvcmNpbmcgdGhlaXIgZGVmaW5pdGlvbnMgaGVyZS4KKyov CisjaWZuZGVmIENUU0ZMT1cKKyNkZWZpbmUgQ1RTRkxPVyAwMDIwMDAwCisgICAgZGVidWcoRjEw MSwidHRoZmxvdyBTQ08gZGVmaW5pbmcgQ1RTRkxPVyIsIiIsQ1RTRkxPVyk7CisjZWxzZQorICAg IGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIENUU0ZMT1ciLCIiLENUU0ZMT1cpOworI2VuZGlmIC8q IENUU0ZMT1cgKi8KKyNpZm5kZWYgUlRTRkxPVworI2RlZmluZSBSVFNGTE9XIDAwNDAwMDAKKyAg ICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBkZWZpbmluZyBSVFNGTE9XIiwiIixSVFNGTE9XKTsK KyNlbHNlCisgICAgZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gUlRTRkxPVyIsIiIsUlRTRkxPVyk7 CisjZW5kaWYgLyogUlRTRkxPVyAqLworI2lmbmRlZiBPUlRTRkwKKyNkZWZpbmUgT1JUU0ZMIDAx MDAwMDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dGhmbG93IFNDTyBkZWZpbmluZyBPUlRTRkwiLCIiLE9S VFNGTCk7CisjZWxzZQorICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgU0NPIE9SVFNGTCIsIiIsT1JU U0ZMKTsKKyNlbmRpZiAvKiBPUlRTRkwgKi8KKworICAgIGlmICh4ICE9IC0xKSB7CisJaWYgKHN0 YXR1cykgewkJCS8qIFR1cm4gaXQgT04gKi8KKwkgICAgdGVtcC5jX2NmbGFnIHw9IFJUU0ZMT1d8 Q1RTRkxPVzsKKwkgICAgYXR0cnMtPmNfY2ZsYWcgfD0gUlRTRkxPV3xDVFNGTE9XOworI2lmZGVm IE9SVFNGTAorCSAgICB0ZW1wLmNfY2ZsYWcgJj0gfk9SVFNGTDsKKwkgICAgYXR0cnMtPmNfY2Zs YWcgJj0gfk9SVFNGTDsKKyNlbmRpZiAvKiBPUlRTRkwgKi8KKwkgICAgdGVtcC5jX2lmbGFnICY9 IH4oSVhPTnxJWE9GRnxJWEFOWSk7CisJICAgIGF0dHJzLT5jX2lmbGFnICY9IH4oSVhPTnxJWE9G RnxJWEFOWSk7CisJfSBlbHNlIHsJCQkvKiBUdXJuIGl0IE9GRiAqLworI2lmZGVmIE9SVFNGTAor CSAgICB0ZW1wLmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1d8T1JUU0ZMKTsKKwkgICAgYXR0 cnMtPmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1d8T1JUU0ZMKTsKKyNlbHNlICAvKiBPUlRT RkwgKi8KKwkgICAgdGVtcC5jX2NmbGFnICY9IH4oUlRTRkxPV3xDVFNGTE9XKTsKKwkgICAgYXR0 cnMtPmNfY2ZsYWcgJj0gfihSVFNGTE9XfENUU0ZMT1cpOworI2VuZGlmIC8qIE9SVFNGTCAqLwor CX0KKyNpZmRlZiBQT1NJWAorCXggPSB0Y3NldGF0dHIodHR5ZmQsIFRDU0FEUkFJTiwgJnRlbXAp OworI2Vsc2UKKwl4ID0gaW9jdGwodHR5ZmQsIFRDU0VUQSwgJnRlbXApOworI2VuZGlmIC8qIFBP U0lYICovCisJZGVidWcoRjEwMSwidHRoZmxvdyBTQ08gc2V0IG1vZGVzIiwiIix4KTsKKyAgICB9 CisjZWxzZSAvKiBOb3QgU0NPIFVOSVggKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBl KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYg KHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgaWYgKCFzdGF0dXMp IHsJCQkvKiBUdXJuIGl0IE9GRiAqLworI2lmZGVmIFJUU1hPRkYKKwlkZWJ1ZyhGMTAwLCJ0dGhm bG93IEFUVFNWIFJUUy9DVFMgT0ZGIiwiIiwwKTsKKwlyY3RzeC54X2hmbGFnICY9IH4oUlRTWE9G RnxDVFNYT04pOworI2lmZGVmIFRDU0VUWAorCXggPSBpb2N0bCh0dHlmZCxUQ1NFVFgsJnJjdHN4 KTsKKwlkZWJ1ZyhGMTAxLCJ0dGhmbG93IEFUVFNWIFRDU0VUWCBPRkYiLCIiLHgpOworI2Vsc2UK Kwl4ID0gLTEKKwlkZWJ1ZyhGMTAwLCJ0dGhmbG93IFRDU0VUWCBub3QgZGVmaW5lZCIsIiIsMCk7 CisjZW5kaWYgLyogVENTRVRYICovCisjZWxzZQorCWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1Yg UlRTWE9GRiBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYgLyogUlRTWE9GRiAqLworI2lmZGVm IERUUlhPRkYKKwlkZWJ1ZyhGMTAwLCJ0dGhmbG93IEFUVFNWIERUUi9DRCBPRkYiLCIiLDApOwor CXJjdHN4LnhfaGZsYWcgJj0gfihEVFJYT0ZGfENEWE9OKTsKKwl4ID0gaW9jdGwodHR5ZmQsVENT RVRYLCZyY3RzeCk7CisJZGVidWcoRjEwMSwidHRoZmxvdyBBVFRTViBEVFJYT0ZGIE9GRiIsIiIs eCk7CisjZWxzZQorCWRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSWE9GRiBub3QgZGVmaW5l ZCIsIiIsMCk7CisjZW5kaWYgLyogRFRSWE9GRiAqLworICAgIH0gZWxzZSB7CQkJCS8qIFR1cm4g aXQgT04uICovCisJaWYgKGZsb3cgPT0gRkxPX1JUU0MpIHsJLyogUlRTL0NUUyBGbG93IGNvbnRy b2wuLi4gKi8KKwkgICAgZGVidWcoRjEwMCwidHRoZmxvdyBBVFRTViBSVFMvQ1RTIE9OIiwiIiww KTsKKyNpZmRlZiBSVFNYT0ZGCisJICAgIC8qIFRoaXMgaXMgdGhlIHByZWZlcnJlZCB3YXksIGFj Y29yZGluZyB0byBTVklEMyAqLworI2lmZGVmIFRDR0VUWAorCSAgICB4ID0gaW9jdGwodHR5ZmQs VENHRVRYLCZyY3RzeCk7CisJICAgIGRlYnVnKEYxMDEsInR0aGZsb3cgVENHRVRYIiwiIix4KTsK KwkgICAgaWYgKHggPiAtMSkgeworCQlyY3RzeC54X2hmbGFnIHw9IFJUU1hPRkYgfCBDVFNYT047 CisJCXggPSBpb2N0bCh0dHlmZCxUQ1NFVFgsJnJjdHN4KTsKKwkJZGVidWcoRjEwMCwidHRoZmxv dyBBVFRTViBpb2N0bCIsIiIseCk7CisJICAgIH0KKyNlbHNlCisJICAgIGRlYnVnKEYxMDAsInR0 aGZsb3cgVENHRVRYIG5vdCBkZWZpbmVkIiwiIiwwKTsKKwkgICAgeCA9IC0xCisjZW5kaWYgLyog VENHRVRYICovCisjZWxzZQorCSAgICBkZWJ1ZyhGMTAwLCJ0dGhmbG93IFJUU1hPRkYgbm90IGRl ZmluZWQiLCIiLDApOworCSAgICB4ID0gLTE7CisjZW5kaWYgLyogUlRTWE9GRiAqLworCX0gZWxz ZSBpZiAoZmxvdyA9PSBGTE9fRFRSQykgewkvKiBEVFIvQ0QgRmxvdyBjb250cm9sLi4uICovCisJ ICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSL0NEIE9OIiwiIiwwKTsKKyNpZmRlZiBE VFJYT0ZGCisJICAgIC8qIFRoaXMgaXMgc3RyYWlnaHQgb3V0IG9mIFNWSUQgUjQgKi8KKwkgICAg aWYgKGlvY3RsKHR0eWZkLFRDR0VUWCwmcmN0c3gpID4gLTEpIHsKKwkJcmN0c3gueF9oZmxhZyAm PSB+KERUUlhPRkZ8Q0RYT04pOworCQl4ID0gaW9jdGwodHR5ZmQsVENTRVRYLCZyY3RzeCk7CisJ ICAgIH0KKyNlbHNlCisJICAgIGRlYnVnKEYxMDAsInR0aGZsb3cgQVRUU1YgRFRSWE9GRiBub3Qg ZGVmaW5lZCIsIiIsMCk7CisJICAgIHggPSAtMTsKKyNlbmRpZiAvKiBEVFJYT0ZGICovCisJfQor ICAgIH0KKyNlbmRpZiAvKiBDS19TQ09VTklYICovCisKKyNlbHNlIC8qIG5vdCBTeXN0ZW0gVi4u LiAqLworCisjaWZkZWYgQ0tfRFRSQ1RTCisjaWZkZWYgTERPRFRSCisjaWZkZWYgTERPQ1RTCisj aWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENN RCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8q IE5FVFBUWSAqLworICAgIHggPSBMRE9EVFIgfCBMRE9DVFM7CQkvKiBGb3VuZCBvbmx5IG9uIFVU RUs/ICovCisgICAgaWYgKGZsb3cgPT0gRkxPX0RUUlQgJiYgc3RhdHVzKSB7CS8qIFVzZSBoYXJk d2FyZSBmbG93IGNvbnRyb2wgKi8KKwlpZiAobG1vZGVmKSB7CisJICAgIHggPSBpb2N0bCh0dHlm ZCxUSU9DTEJJUywmeCk7CisJICAgIGlmICh4IDwgMCkgeworCSAgICAgICAgZGVidWcoRjEwMCwi aGFyZGZsb3cgVElPQ0xCSVMgZXJyb3IiLCIiLDApOworCSAgICB9IGVsc2UgeworCQlsbW9kZWYr KzsKKwkJZGVidWcoRjEwMCwiaGFyZGZsb3cgVElPQ0xCSVMgb2siLCIiLDApOworCSAgICB9CisJ fQorICAgIH0gZWxzZSB7CisJaWYgKGxtb2RlZikgeworCSAgICB4ID0gaW9jdGwodHR5ZmQsVElP Q0xCSUMsJngpOworCSAgICBpZiAoeCA8IDApIHsKKwkgICAgICAgIGRlYnVnKEYxMDAsImhhcmRm bG93IFRJT0NMQklDIGVycm9yIiwiIiwwKTsKKwkgICAgfSBlbHNlIHsKKwkJbG1vZGVmKys7CisJ CWRlYnVnKEYxMDAsImhhcmRmbG93IFRJT0NMQklDIG9rIiwiIiwwKTsKKwkgICAgfQorCX0KKyAg ICB9CisjZW5kaWYgLyogTERPRFRSICovCisjZW5kaWYgLyogTERPQ1RTICovCisjZW5kaWYgLyog Q0tfRFRSQ1RTICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBBSVhSUyAqLworI2Vu ZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIFBPU0lYX0NSVFND VFMgKi8KKyNlbmRpZiAvKiBTVU5PUzQxICovCisKKyNlbHNlIC8qIE9YT1MgKi8KKworICAgIHN0 cnVjdCB0ZXJtaW9zIHRlbXA7CQkvKiBPbGl2ZXR0aSBYL09TIC4uLiAqLworCisjaWZkZWYgTkVU Q01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lm ZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAq LworICAgIHggPSBpb2N0bCh0dHlmZCxUQ0dFVFMsJnRlbXApOworICAgIGlmICh4ID09IDApIHsK Kwl0ZW1wLmNfY2ZsYWcgJj0gfihDUlRTQ1RTfENEVFJDVFN8Q0JSS0ZMT1d8Q0RUUkRTUnxDUlRT RFNSKTsKKwlpZiAoc3RhdHVzKSB7CisJICAgIHN3aXRjaCAoZmxvdykgeworCSAgICAgIGNhc2Ug RkxPX1JUU0M6IHRlbXAuY19jZmxhZyB8PSBDUlRTQ1RTOyAvKiBSVFMvQ1RTIChoYXJkKSAqLwor CQlicmVhazsKKwkgICAgICBjYXNlIEZMT19EVFJUOiB0ZW1wLmNfY2ZsYWcgfD0gQ0RUUkNUUzsg LyogRFRSL0NUUyAoaGFyZCkgKi8KKwkJYnJlYWs7CisJICAgIH0KKwl9CisJeCA9IGlvY3RsKHR0 eWZkLFRDU0VUUywmdGVtcCk7CisgICAgfQorI2VuZGlmIC8qIE9YT1MgKi8KKyAgICByZXR1cm4o eCk7CisKKyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiAgVCBUIFAgSyBUICAtLSAgQ29uZGl0 aW9uIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUgZm9yIHBhY2tldHMgKi8KKy8qICAgICAgICAgICAg ICAgICBvciBmb3IgbW9kZW0gZGlhbGluZyAqLworCisvKgorICBJZiBjYWxsZWQgd2l0aCBzcGVl ZCA+IC0xLCBhbHNvIHNldCB0aGUgc3BlZWQuCisgIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBv biBmYWlsdXJlLgorCisgIE5PVEU6IHRoZSAieGZsb3ciIHBhcmFtZXRlciBpcyBzdXBwb3NlZCB0 byBiZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkCisgIHR5cGUgb2YgZmxvdyBjb250cm9sLCBidXQg Zm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhpcyBwYXJhbWV0ZXIgaXMgYWxzbworICB1c2VkIHRv IGluZGljYXRlIHRoYXQgd2UgYXJlIGRpYWxpbmcuICBUaGVyZWZvcmUsIHdoZW4gdGhlIHRydWUg ZmxvdworICBjb250cm9sIHNldHRpbmcgaXMgbmVlZGVkLCB3ZSBhY2Nlc3MgdGhlIGV4dGVybmFs IHZhcmlhYmxlICJmbG93IiwgcmF0aGVyCisgIHRoYW4gdHJ1c3Rpbmcgb3VyICJ4ZmxvdyIgYXJn dW1lbnQuCisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3R0cGt0KGxvbmcgc3BlZWQsIGludCB4 ZmxvdywgaW50IHBhcml0eSkKKyNlbHNlCit0dHBrdChzcGVlZCx4ZmxvdyxwYXJpdHkpIGxvbmcg c3BlZWQ7IGludCB4ZmxvdywgcGFyaXR5OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0dHBr dCAqLyB7CisjaWZuZGVmIE5PTE9DQUwKKyAgICBpbnQgczI7CisgICAgaW50IHMgPSAtMTsKKyNl bmRpZiAvKiBOT0xPQ0FMICovCisgICAgaW50IHg7CisgICAgZXh0ZXJuIGludCBmbG93OwkJCS8q IFJFQUwgZmxvdy1jb250cm9sIHNldHRpbmcgKi8KKworICAgIGlmICh0dHlmZCA8IDApIHJldHVy bigtMSk7ICAgICAgICAgIC8qIE5vdCBvcGVuLiAqLworCisgICAgZGVidWcoRjEwMSwidHRwa3Qg cGFyaXR5IiwiIixwYXJpdHkpOworICAgIGRlYnVnKEYxMDEsInR0cGt0IHhmbG93IiwiIix4Zmxv dyk7CisgICAgZGVidWcoRjEwMSwidHRwa3Qgc3BlZWQiLCIiLChpbnQpIHNwZWVkKTsKKworICAg IHR0cHJ0eSA9IHBhcml0eTsgICAgICAgICAgICAgICAgICAgIC8qIExldCBvdGhlciB0dCBmdW5j dGlvbnMgc2VlIHRoZXNlLiAqLworICAgIHR0c3BlZWQgPSBzcGVlZDsJCQkvKiBNYWtlIGdsb2Jh bCBjb3B5IGZvciB0aGlzIG1vZHVsZSAqLworICAgIHR0cG1zayA9IHR0cHJ0eSA/IDAxNzcgOiAw Mzc3OwkvKiBQYXJpdHkgc3RyaXBwaW5nIG1hc2sgKi8KKyNpZmRlZiBQQVJTRU5TRQorICAgIG5l ZWRwY2hrID0gdHRwcnR5ID8gMCA6IDE7CQkvKiBQYXJpdHkgY2hlY2sgbmVlZGVkPyAqLworI2Vs c2UKKyAgICBuZWVkcGNoayA9IDA7CisjZW5kaWYgLyogUEFSU0VOU0UgKi8KKworICAgIGRlYnVn KEYxMDEsInR0cGt0IHR0cG1zayIsIiIsdHRwbXNrKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBu ZXRjb25uIiwiIixuZXRjb25uKTsKKworI2lmZGVmIE5FVENPTk4JCQkJLyogTm8gbW9kZS1jaGFu Z2luZyBmb3IgdGVsbmV0ICovCisgICAgaWYgKG5ldGNvbm4pIHsKKyNpZmRlZiBUQ1BTT0NLRVQK KyNpZmRlZiBUQ1BfTk9ERUxBWQorICAgICAgICBpZiAodHRuZXQgPT0gTkVUX1RDUEIpIHsJLyog QnV0IHR1cm4gb2ZmIE5hZ2xlICovCisgICAgICAgICAgICBleHRlcm4gaW50IHRjcF9ub2RlbGF5 OworICAgICAgICAgICAgbm9kZWxheV9zYXYgPSB0Y3Bfbm9kZWxheTsKKyAgICAgICAgICAgIG5v X2RlbGF5KHR0eWZkLDEpOworICAgICAgICB9CisjZW5kaWYgLyogVENQX05PREVMQVkgKi8KKyNp ZmRlZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7CisgICAgICAgICAg ICBpbnQgcmMgPSAtMTsKKyAgICAgICAgICAgIGlmICh0dnRmbGcgPT0gMCAmJiBzcGVlZCA9PSB0 dHNwZWVkICYmIGZsb3cgPT0gdHRmbG93CisgICAgICAgICAgICAgICAgIC8qICYmIHR0Y2FyciA9 PSBjdXJjYXJyICovICkgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cGt0IG1vZGVz IGFscmVhZHkgc2V0LCBza2lwcGluZy4uLiIsIiIsMCk7CisgICAgICAgICAgICAgICAgcmV0dXJu KDApOwkJLyogQWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChmbG93ICE9IHR0ZmxvdykgeworICAgICAgICAgICAgICAgIGlmICgocmMgPSB0bnNl dGZsb3coZmxvdykpIDwgMCkKKwkJICByZXR1cm4ocmMpOworICAgICAgICAgICAgICAgIHR0Zmxv dyA9IGZsb3c7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BlZWQgIT0gdHRzcGVl ZCkgeworICAgICAgICAgICAgICAgIGlmIChzcGVlZCA8PSAwKSAKKwkJICBzcGVlZCA9IHRuY19n ZXRfYmF1ZCgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKChyYyA9IHRuY19zZXRfYmF1ZChz cGVlZCkpIDwgMCkKKwkJICByZXR1cm4ocmMpOworICAgICAgICAgICAgICAgIHR0c3BlZWQgPSBz cGVlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRuY19zZXRfZGF0YXNpemUoOCk7CisJ ICAgIHRuY19zZXRfc3RvcHNpemUoc3RvcGJpdHMpOworCisjaWZkZWYgSFdQQVJJVFkKKyAgICAg ICAgICAgIGlmIChod3Bhcml0eSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoaHdwYXJpdHkp IHsKKwkJICBjYXNlICdlJzoJCQkvKiBFdmVuICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsInR0cmVzIDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKKyAgICAgICAgICAgICAg ICAgICAgdG5jX3NldF9wYXJpdHkoMyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkg IGNhc2UgJ28nOgkJCS8qIE9kZCAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0 dHJlcyA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5j X3NldF9wYXJpdHkoMik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkgIGNhc2UgJ20n OgkJCS8qIE1hcmsgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBi aXRzICsgaW52YWxpZCBwYXJpdHk6IG1hcmsiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0 bmNfc2V0X3Bhcml0eSg0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAn cyc6CQkJLyogU3BhY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMg OCBiaXRzICsgaW52YWxpZCBwYXJpdHk6IHNwYWNlIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAg ICAgdG5jX3NldF9wYXJpdHkoNSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSAKKyNlbmRpZiAvKiBIV1BBUklUWSAqLwor CSAgICB7CisgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMSk7ICAgICAgICAgICAgICAv KiBOb25lICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0dnRmbGcgPSAwOworICAgICAg ICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgICAgICB0dnRmbGcgPSAwOworICAgICAgICByZXR1cm4o MCk7CisgICAgfQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAo dHRwaXBlKSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisg ICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7CisjZW5kaWYgLyogTkVUUFRZICovCisKKyNpZm5kZWYg UGxhbjkKKyAgICBpZiAodHRmZGZsZyAmJiAhaXNhdHR5KHR0eWZkKSkgcmV0dXJuKDApOworI2Vu ZGlmIC8qIFBsYW45ICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNl bmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJlcmtlbGV5LCBW NywgZXRjLiAqLworI2lmZGVmIExQQVNTOAorLyoKKyBGb3Igc29tZSByZWFzb24sIHdpdGggQlNE IHRlcm1pbmFsIGRyaXZlcnMsIHlvdSBjYW4ndCBzZXQgRkxPVyB0byBYT04vWE9GRgorIGFmdGVy IGhhdmluZyBwcmV2aW91c2x5IHNldCBpdCB0byBOT05FIHdpdGhvdXQgY2xvc2luZyBhbmQgcmVv cGVuaW5nIHRoZQorIGRldmljZS4gIFVubGVzcyB0aGVyZSdzIHNvbWV0aGluZyBJIG92ZXJsb29r ZWQgYmVsb3cuLi4KKyovCisgICAgaWYgKHR0ZmxvdyA9PSBGTE9fTk9ORSAmJiBmbG93ID09IEZM T19YT05YICYmIHhsb2NhbCA9PSAwKSB7CisJZGVidWcoRjEwMSwidHRwa3QgZXhlY3V0aW5nIGhv cnJpYmxlIGZsb3cga2x1ZGdlIiwiIiwwKTsKKwl0dGNsb3MoMCk7CQkJLyogQ2xvc2UgaXQgKi8K Kwl4ID0gMDsKKwl0dG9wZW4odHRubXN2LCZ4LHR0bWRtLDApOwkvKiBPcGVuIGl0IGFnYWluICov CisgICAgfQorI2VuZGlmIC8qIExQQVNTOCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworCisj aWZkZWYgQ09IRVJFTlQJCQkJLyogVGhpcyBtdXN0IGJlIHZlc3RpZ2lhbCBzaW5jZSB3ZSAqLwor I3VuZGVmIFNWT1JQT1NJWAkJCS8qIHJldmVyc2UgaXQgYSBmZXcgbGluZXMgYmVsb3cuLi4gKi8K KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisgICAgaWYgKHhmbG93ICE9IEZMT19ESUFMICYmIHhm bG93ICE9IEZMT19ESUFYKQorICAgICAgdHRmbG93ID0geGZsb3c7CQkJLyogTm93IG1ha2UgdGhp cyBhdmFpbGFibGUgdG9vLiAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICBpZiAoeGxvY2FsKSB7 CisJczIgPSAoaW50KSAoc3BlZWQgLyAxMEwpOwkvKiBDb252ZXJ0IGJwcyB0byBjcHMgKi8KKwlk ZWJ1ZyhGMTAxLCJ0dHBrdCBjYWxsaW5nIHR0c3NwZCIsIiIsczIpOworCXMgPSB0dHNzcGQoczIp OwkJCS8qIENoZWNrIGFuZCBzZXQgdGhlIHNwZWVkICovCisJZGVidWcoRjEwMSwidHRwa3QgdHRz c3BkIHJlc3VsdCIsIiIscyk7CisgCWNhcnJjdGwoJnR0cmF3LCB4ZmxvdyAhPSBGTE9fRElBTCAv KiBDYXJyaWVyIGNvbnRyb2wgKi8KKwkJJiYgKHR0Y2FyciA9PSBDQVJfT04gfHwgKHR0Y2FyciA9 PSBDQVJfQVVUICYmIHR0bWRtICE9IDApKSk7CisJdHZ0ZmxnID0gMDsJCQkvKiBTbyB0dHZ0KCkg d2lsbCB3b3JrIG5leHQgdGltZSAqLworICAgIH0KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNp ZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLwor CisjaWZuZGVmIFNWT1JQT1NJWAkJCS8qIEJTRCBzZWN0aW9uICovCisgICAgaWYgKGZsb3cgPT0g RkxPX1JUU0MgfHwJCS8qIEhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworCWZsb3cgPT0gRkxPX0RU UkMgfHwKKwlmbG93ID09IEZMT19EVFJUKSB7CisJdHRoZmxvdyhmbG93LCAxLCAmdHRyYXcpOwor CWRlYnVnKEYxMDAsInR0cGt0IGhhcmQgZmxvdywgVEFOREVNIG9mZiwgUkFXIG9uIiwiIiwwKTsK Kwl0dHJhdy5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNv bnRyb2wgKi8KKwl0dHJhdy5zZ19mbGFncyB8PSBSQVc7CQkvKiBFbnRlciByYXcgbW9kZSAqLwor ICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgewkvKiBObyBmbG93IGNvbnRyb2wgKi8K KwlkZWJ1ZyhGMTAwLCJ0dHBrdCBubyBmbG93LCBUQU5ERU0gb2ZmLCBSQVcgb24iLCIiLDApOwor CXR0cmF3LnNnX2ZsYWdzICY9IH5UQU5ERU07CS8qIFR1cm4gb2ZmIHNvZnR3YXJlIGZsb3cgY29u dHJvbCAqLworCXR0aGZsb3coZmxvdywgMCwgJnR0cmF3KTsJLyogVHVybiBvZmYgYW55IGhhcmR3 YXJlIGYvYyB0b28gKi8KKwl0dHJhdy5zZ19mbGFncyB8PSBSQVc7CQkvKiBFbnRlciByYXcgbW9k ZSAqLworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fS0VFUCkgewkvKiBLZWVwIGRldmljZSdz IG9yaWdpbmFsIHNldHRpbmcgKi8KKwlkZWJ1ZyhGMTAwLCJ0dHBrdCBrZWVwaW5nIG9yaWdpbmFs IFRBTkRFTSIsIiIsMCk7CisJdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsKKwl0dHJhdy5zZ19m bGFncyB8PSAodHRvbGQuc2dfZmxhZ3MgJiBUQU5ERU0pOworCS8qIE5PVEU6IFdlIHNob3VsZCBh bHNvIGhhbmRsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KKyAgICB9CisKKy8qIFNF VCBGTE9XIFhPTi9YT0ZGIGlzIGluIGVmZmVjdCwgb3IgU0VUIEZMT1cgS0VFUCByZXN1bHRlZCBp biBYb24vWG9mZiAqLworCisgICAgaWYgKChmbG93ID09IEZMT19YT05YKSB8fCAodHRyYXcuc2df ZmxhZ3MgJiBUQU5ERU0pKSB7CisJZGVidWcoRjEwMCwidHRwa3QgdHVybmluZyBvbiBUQU5ERU0i LCIiLDApOworCXR0cmF3LnNnX2ZsYWdzIHw9IFRBTkRFTTsJLyogU28gYXNrIGZvciBpdC4gKi8K KworI2lmZGVmIExQQVNTOAkJCQkvKiBDYW4gcGFzcyA4LWJpdCBkYXRhIHRocm91Z2g/ICovCisv KiBJZiB0aGUgTFBBU1M4IGxvY2FsIG1vZGUgaXMgYXZhaWxhYmxlLCB0aGVuIGZsb3cgY29udHJv bCBjYW4gYWx3YXlzICAqLworLyogYmUgdXNlZCwgZXZlbiBpZiBwYXJpdHkgaXMgbm9uZSBhbmQg d2UgYXJlIHRyYW5zZmVycmluZyA4LWJpdCBkYXRhLiAgKi8KKy8qIEJ1dCB3ZSBvbmx5IG5lZWQg dG8gZG8gYWxsIHRoaXMgaWYgWG9uL1hvZmYgaXMgcmVxdWVzdGVkLiAqLworLyogQlVULi4uIHRo aXMgdGVuZHMgbm90IHRvIHdvcmsgdGhyb3VnaCBJUCBvciBMQVQgY29ubmVjdGlvbnMsIHRlcm1p bmFsICovCisvKiBzZXJ2ZXJzLCB0ZWxuZXQsIHJsb2dpbiwgZXRjLCBzbyBpdCBpcyBjdXJyZW50 bHkgZGlzYWJsZWQuICovCisJeCA9IExQQVNTODsJCQkvKiBJZiBMUEFTUzggZGVmaW5lZCwgdGhl biAqLworCWRlYnVnKEYxMDAsInR0cGt0IGV4ZWN1dGluZyBMUEFTUzggY29kZSIsIiIsMCk7CisJ aWYgKGxtb2RlZikgewkJCS8qIFRJT0NMQklTIG11c3QgYmUgdG9vLiAqLworCSAgICB4ID0gaW9j dGwodHR5ZmQsVElPQ0xCSVMsJngpOyAvKiBUcnkgdG8gc2V0IExQQVNTOC4gKi8KKwkgICAgaWYg KHggPCAwKSB7CisJCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NMQklTIGVycm9yIiwiIiwwKTsKKwkg ICAgfSBlbHNlIHsKKwkJbG1vZGVmKys7CisJCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NMQklTIG9r IiwiIiwwKTsKKwkgICAgfQorCX0KKy8qCisgQnV0IGlmIHdlIHVzZSBMUEFTUzggbW9kZSwgd2Ug bXVzdCBleHBsaWNpdGx5IHR1cm4gb2ZmCisgdGVybWluYWwgaW50ZXJydXB0cyBvZiBhbGwga2lu ZHMuCisqLworI2lmZGVmIFRJT0NHRVRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLworCWlmICh0Y2hh cmYgJiYgKHhsb2NhbCA9PSAwKSkgewkvKiBtdXN0IHR1cm4gb2ZmICovCisJICAgIHRjaG5vaS50 X2ludHJjID0gLTE7CS8qIGludGVycnVwdCBjaGFyYWN0ZXIgKi8KKwkgICAgdGNobm9pLnRfcXVp dGMgPSAtMTsJLyogYW5kIHF1aXQgY2hhcmFjdGVyLiAqLworCSAgICB0Y2hub2kudF9zdGFydGMg PSAxNzsJLyogTWFrZSBzdXJlIHhvbiAqLworCSAgICB0Y2hub2kudF9zdG9wYyA9IDE5OwkvKiBh bmQgeG9mZiBub3QgaWdub3JlZC4gKi8KKyNpZm5kZWYgTk9CUktDCisJICAgIHRjaG5vaS50X2Vv ZmMgPSAtMTsJCS8qIGVvZiBjaGFyYWN0ZXIuICovCisJICAgIHRjaG5vaS50X2Jya2MgPSAtMTsJ CS8qIGJyayBjaGFyYWN0ZXIuICovCisjZW5kaWYgLyogTk9CUktDICovCisJICAgIGlmIChpb2N0 bCh0dHlmZCxUSU9DU0VUQywmdGNobm9pKSA8IDApIHsKKwkJZGVidWcoRjEwMCwidHRwa3QgVElP Q1NFVEMgZmFpbGVkIiwiIiwwKTsKKwkgICAgfSBlbHNlIHsKKwkJdGNoYXJmID0gMTsKKwkJZGVi dWcoRjEwMCwidHRwa3QgVElPQ1NFVEMgb2siLCIiLDApOworCSAgICB9CisjaWZkZWYgQ09NTUVO VAorLyogb25seSBmb3IgcGFyYW5vaWQgZGVidWdnaW5nICovCisJICAgIGlmICh0Y2hhcmYpIHsK KwkJc3RydWN0IHRjaGFycyBmb287CisJCWNoYXIgdGNoYnVmWzEwMF07CisJCWlvY3RsKDAsVElP Q0dFVEMsJmZvbyk7CisJCXNwcmludGYodGNoYnVmLAorCQkgICAgImludHI9JWQscXVpdD0lZCwg c3RhcnQ9JWQsIHN0b3A9JWQsIGVvZj0lZCwgYnJrPSVkIiwKKwkJICAgIGZvby50X2ludHJjLCBm b28udF9xdWl0YywgZm9vLnRfc3RhcnRjLAorCQkgICAgZm9vLnRfc3RvcGMsIGZvby50X2VvZmMs ICBmb28udF9icmtjKTsKKwkJZGVidWcoRjExMCwidHRwa3QgY2hhcnMiLHRjaGJ1ZiwwKTsKKwkg ICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwl9CisJdHRyYXcuc2dfZmxhZ3MgfD0gQ0JSRUFL OwkvKiBOZWVkZWQgZm9yIHVua25vd24gcmVhc29uICovCisjZW5kaWYgLyogVElPQ0dFVEMgKi8K KworLyogUHJldmVudCBzdXNwZW5kIGR1cmluZyBwYWNrZXQgbW9kZSAqLworI2lmZGVmIFRJT0NH TFRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLworCWlmIChsdGNoYXJmICYmICh4bG9jYWwgPT0gMCkp IHsJLyogbXVzdCB0dXJuIG9mZiAqLworCSAgICBsdGNobm9pLnRfc3VzcGMgPSAtMTsJLyogc3Vz cGVuZCBjaGFyYWN0ZXIgKi8KKwkgICAgbHRjaG5vaS50X2RzdXNwYyA9IC0xOwkvKiBhbmQgZGVs YXllZCBzdXNwZW5kIGNoYXJhY3RlciAqLworCSAgICBpZiAoaW9jdGwodHR5ZmQsVElPQ1NMVEMs JnRjaG5vaSkgPCAwKSB7CisJCWRlYnVnKEYxMDAsInR0cGt0IFRJT0NTTFRDIGZhaWxlZCIsIiIs MCk7CisJICAgIH0gZWxzZSB7CisJCWx0Y2hhcmYgPSAxOworCQlkZWJ1ZyhGMTAwLCJ0dHBrdCBU SU9DU0xUQyBvayIsIiIsMCk7CisJICAgIH0KKwl9CisjZW5kaWYgLyogVElPQ0dMVEMgKi8KKwor I2Vsc2UgLyogTFBBU1M4IG5vdCBkZWZpbmVkICovCisKKy8qIFByZXZpb3VzbHksIEJTRC1iYXNl ZCBpbXBsZW1lbnRhdGlvbnMgYWx3YXlzICovCisvKiB1c2VkIHJhd21vZGUgZm9yIHBhY2tldHMu ICBOb3csIHdlIHVzZSByYXdtb2RlIG9ubHkgaWYgcGFyaXR5IGlzIE5PTkUuICovCisvKiBUaGlz IGFsbG93cyB0aGUgZmxvdyBjb250cm9sIHJlcXVlc3RlZCBhYm92ZSB0byBhY3R1YWxseSB3b3Jr LCBidXQgb25seSAqLworLyogaWYgdGhlIHVzZXIgYXNrcyBmb3IgcGFyaXR5ICh3aGljaCBhbHNv IG1lYW5zIHRoZXkgZ2V0IDh0aC1iaXQgcXVvdGluZykuICovCisKKwlpZiAocGFyaXR5KSB7CQkJ LyogSWYgcGFyaXR5LCAqLworCSAgICB0dHJhdy5zZ19mbGFncyAmPSB+UkFXOwkvKiB1c2UgY29v a2VkIG1vZGUgKi8KKyNpZmRlZiBDT01NRU5UCisvKiBXSFk/Pz8gKi8KKwkgICAgaWYgKHhsb2Nh bCkKKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgICAgdHRyYXcuc2dfZmxhZ3MgfD0gQ0JSRUFL OworCSAgICBkZWJ1ZyhGMTAxLCJ0dHBrdCBjb29rZWQsIGNicmVhaywgcGFyaXR5IiwiIixwYXJp dHkpOworI2lmZGVmIFRJT0NHRVRDCQkJCS8qIE5vdCByYXdtb2RlLCAqLworCSAgICBpZiAodGNo YXJmICYmICh4bG9jYWwgPT0gMCkpIHsgLyogbXVzdCB0dXJuIG9mZiAqLworCQl0Y2hub2kudF9p bnRyYyA9IC0xOwkvKiBpbnRlcnJ1cHQgY2hhcmFjdGVyICovCisJCXRjaG5vaS50X3F1aXRjID0g LTE7CS8qIGFuZCBxdWl0IGNoYXJhY3Rlci4gKi8KKwkJdGNobm9pLnRfc3RhcnRjID0gMTc7CS8q IE1ha2Ugc3VyZSB4b24gKi8KKwkJdGNobm9pLnRfc3RvcGMgPSAxOTsJLyogYW5kIHhvZmYgbm90 IGlnbm9yZWQuICovCisjaWZuZGVmIE5PQlJLQworCQl0Y2hub2kudF9lb2ZjID0gLTE7CS8qIGVv ZiBjaGFyYWN0ZXIuICovCisJCXRjaG5vaS50X2Jya2MgPSAtMTsJLyogYnJrIGNoYXJhY3Rlci4g Ki8KKyNlbmRpZiAvKiBOT0JSS0MgKi8KKwkJaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRDLCZ0Y2hu b2kpIDwgMCkgeworCQkgICAgZGVidWcoRjEwMCwidHRwa3QgVElPQ1NFVEMgZmFpbGVkIiwiIiww KTsKKwkJfSBlbHNlIHsKKwkJICAgIHRjaGFyZiA9IDE7CisJCSAgICBkZWJ1ZyhGMTAwLCJ0dHBr dCBUSU9DU0VUQyBvayIsIiIsMCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIFRJT0NHRVRDICov CisjaWZkZWYgVElPQ0dMVEMJCQkJLyogTm90IHJhd21vZGUsICovCisvKiBQcmV2ZW50IHN1c3Bl bmQgZHVyaW5nIHBhY2tldCBtb2RlICovCisJICAgIGlmIChsdGNoYXJmICYmICh4bG9jYWwgPT0g MCkpIHsgLyogbXVzdCB0dXJuIG9mZiAqLworCQlsdGNobm9pLnRfc3VzcGMgPSAtMTsJLyogc3Vz cGVuZCBjaGFyYWN0ZXIgKi8KKwkJbHRjaG5vaS50X2RzdXNwYyA9IC0xOwkvKiBhbmQgZGVsYXll ZCBzdXNwZW5kIGNoYXJhY3RlciAqLworCQlpZiAoaW9jdGwodHR5ZmQsVElPQ1NMVEMsJnRjaG5v aSkgPCAwKSB7CisJCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBUSU9DU0xUQyBmYWlsZWQiLCIiLDAp OworCQl9IGVsc2UgeworCQkgICAgbHRjaGFyZiA9IDE7CisJCSAgICBkZWJ1ZyhGMTAwLCJ0dHBr dCBUSU9DU0xUQyBvayIsIiIsMCk7CisJCX0KKwkgICAgfQorI2VuZGlmIC8qIFRJT0NHTFRDICov CisJfSBlbHNlIHsJCQkvKiBJZiBubyBwYXJpdHksICovCisJICAgIHR0cmF3LnNnX2ZsYWdzIHw9 IFJBVzsJLyogbXVzdCB1c2UgOC1iaXQgcmF3IG1vZGUuICovCisJICAgIGRlYnVnKEYxMDEsInR0 cGt0IHNldHRpbmcgcmF3bW9kZSwgcGFyaXR5IiwiIixwYXJpdHkpOworCX0KKyNlbmRpZiAvKiBM UEFTUzggKi8KKyAgICB9IC8qIEVuZCBvZiBYb24vWG9mZiBzZWN0aW9uICovCisKKyAgICAvKiBE b24ndCBlY2hvLCBkb24ndCBtYXAgQ1IgdG8gQ1JMRiBvbiBvdXRwdXQsIGRvbid0IGZvb2wgd2l0 aCBjYXNlICovCisjaWZkZWYgTENBU0UKKyAgICB0dHJhdy5zZ19mbGFncyAmPSB+KEVDSE98Q1JN T0R8TENBU0UpOworI2Vsc2UKKyAgICB0dHJhdy5zZ19mbGFncyAmPSB+KEVDSE98Q1JNT0QpOwor I2VuZGlmIC8qIExDQVNFICovCisKKyNpZmRlZiBUT1dFUjEKKyAgICB0dHJhdy5zZ19mbGFncyAm PSB+QU5ZUDsgICAgICAgICAgICAvKiBNdXN0IHNldCB0aGlzIG9uIG9sZCBUb3dlcnMgKi8KKyNl bmRpZiAvKiBUT1dFUjEgKi8KKworI2lmZGVmIEJFTExWMTAKKyAgICBpZiAoaW9jdGwodHR5ZmQs VElPQ1NFVFAsJnR0cmF3KSA8IDApIC8qIFNldCB0aGUgbmV3IG1vZGVzLiAqLworICAgICAgcmV0 dXJuKC0xKTsKKyNlbHNlCisgICAgZXJybm8gPSAwOworICAgIGlmIChzdHR5KHR0eWZkLCZ0dHJh dykgPCAwKSB7ICAgICAgIC8qIFNldCB0aGUgbmV3IG1vZGVzLiAqLworICAgICAgICBkZWJ1ZyhG MTAxLCJ0dHBrdCBzdHR5IGZhaWxlZCIsIiIsZXJybm8pOworICAgICAgICByZXR1cm4oLTEpOwor ICAgIH0KKyNlbmRpZiAvKiBCRUxMVjEwICovCisgICAgZGVidWcoRjEwMCwidHRwa3Qgc3R0eSBv ayIsIiIsMCk7CisKKyNpZmRlZiBzb255X25ld3MKKyAgICB4ID0geGxvY2FsID8ga21fZXh0IDog a21fY29uOwkvKiBQdXQgbGluZSBpbiBBU0NJSSBtb2RlLiAqLworICAgIGlmICh4ICE9IC0xKSB7 CQkJLyogTWFrZSBzdXJlIHdlIGtub3cgb3JpZ2luYWwgbW9kZXMuICovCisJeCAmPSB+S01fVFRZ UEU7CisJeCB8PSBLTV9BU0NJSTsKKwlpZiAoaW9jdGwodHR5ZmQsVElPQ0tTRVQsICZ4KSA8IDAp IHsKKwkgICAgcGVycm9yKCJ0dHBrdCBjYW4ndCBzZXQgQVNDSUkgbW9kZSIpOworCSAgICBkZWJ1 ZyhGMTAxLCJ0dHBrdCBlcnJvciBzZXR0aW5nIEFTQ0lJIG1vZGUiLCIiLHgpOworCSAgICByZXR1 cm4oLTEpOworCX0KKyAgICB9CisgICAgZGVidWcoRjEwMCwidHRwa3Qgc2V0IEFTQ0lJIG1vZGUg b2siLCIiLDApOworI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworCisgICAgaWYgKHhsb2NhbCA9PSAw KSB7CQkJLyogVHVybiB0aGlzIG9mZiBzbyB3ZSBjYW4gcmVhZCAqLworCXNpZ25hbChTSUdJTlQs U0lHX0lHTik7CQkvKiBDdHJsLUMgY2hhcnMgdHlwZWQgYXQgY29uc29sZSAqLworCXNpZ2ludF9p Z24gPSAxOworICAgIH0KKyAgICB0dnRmbGcgPSAwOwkJCQkvKiBTbyB0dHZ0KCkgd2lsbCB3b3Jr IG5leHQgdGltZSAqLworICAgIGRlYnVnKEYxMDAsInR0cGt0IHN1Y2Nlc3MiLCIiLDApOworICAg IHJldHVybigwKTsKKworI2VuZGlmIC8qIE5vdCBBVFRTViBvciBQT1NJWCAqLworCisvKiBBVCZU IFVOSVggYW5kIFBPU0lYICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgK KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYgU1ZPUlBPU0lYCisgICAgaWYgKGZsb3cg PT0gRkxPX1hPTlgpIHsJCS8qIFhvbi9Yb2ZmICovCisJdHRyYXcuY19pZmxhZyB8PSAoSVhPTnxJ WE9GRik7CisJdHRoZmxvdyhmbG93LCAwLCAmdHRyYXcpOworICAgIH0gZWxzZSBpZiAoZmxvdyA9 PSBGTE9fTk9ORSkgewkvKiBOb25lICovCisJLyogTk9URTogV2Ugc2hvdWxkIGFsc28gdHVybiBv ZmYgaGFyZHdhcmUgZmxvdyBjb250cm9sIGhlcmUhICovCisJdHRyYXcuY19pZmxhZyAmPSB+KElY T058SVhPRkYpOworCXR0aGZsb3coZmxvdywgMCwgJnR0cmF3KTsKKyAgICB9IGVsc2UgaWYgKGZs b3cgPT0gRkxPX0tFRVApIHsJLyogS2VlcCAqLworCXR0cmF3LmNfaWZsYWcgJj0gfihJWE9OfElY T0ZGKTsJLyogVHVybiBvZmYgWG9uL1hvZmYgZmxhZ3MgKi8KKwl0dHJhdy5jX2lmbGFnIHw9ICh0 dG9sZC5jX2lmbGFnICYgKElYT058SVhPRkYpKTsgLyogT1IgaW4gb2xkIG9uZXMgKi8KKwkvKiBO T1RFOiBXZSBzaG91bGQgYWxzbyBoYW5kbGUgaGFyZHdhcmUgZmxvdyBjb250cm9sIGhlcmUhICov CisjaWZkZWYgUE9TSVhfQ1JUU0NUUworLyogSW4gTGludXggY2FzZSwgd2UgZG8gdGhpcywgd2hp Y2ggaXMgdW5saWtlbHkgdG8gYmUgcG9ydGFibGUgKi8KKyAgICAgICAgdHRyYXcuY19jZmxhZyAm PSB+Q1JUU0NUUzsJLyogVHVybiBvZmYgUlRTL0NUUyBmbGFnICovCisgICAgICAgIHR0cmF3LmNf Y2ZsYWcgfD0gKHR0b2xkLmNfY2ZsYWcgJiBDUlRTQ1RTKTsgLyogT1IgaW4gb2xkIG9uZSAqLwor I2VuZGlmIC8qIFBPU0lYX0NSVFNDVFMgKi8KKyAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX1JU U0MgfHwJLyogSGFyZHdhcmUgKi8KKwkgICAgICAgZmxvdyA9PSBGTE9fRFRSQyB8fAorCSAgICAg ICBmbG93ID09IEZMT19EVFJUKSB7CisJdHRyYXcuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkv KiAoMTkwKSAqLworCXR0aGZsb3coZmxvdywgMSwgJnR0cmF3KTsKKyAgICB9CisgICAgdHRyYXcu Y19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKKyAgICB0dHJhdy5jX2xmbGFnICY9IH5JU0lHOwkJ LyogRG8gTk9UIGNoZWNrIGZvciBpbnRlcnJ1cHQgY2hhcnMgKi8KKworI2lmbmRlZiBPWE9TCisj aWZkZWYgUU5YCisgICAgaWYgKGZsb3cgIT0gRkxPX1JUU0MgJiYgZmxvdyAhPSBGTE9fRFRSQyAm JiBmbG93ICE9IEZMT19EVFJUKQorI2VuZGlmIC8qIFFOWCAqLworI2lmbmRlZiBDT0hFUkVOVAor ICAgICAgdHRyYXcuY19sZmxhZyAmPSB+SUVYVEVOOwkJLyogVHVybiBvZmYgXk8vXlYgcHJvY2Vz c2luZyAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZWxzZSAvKiBPWE9TICovCisgICAgdHRy YXcuY19jY1tWRElTQ0FSRF0gPSB0dHJhdy5jX2NjW1ZMTkVYVF0gPSBDRElTQUJMRTsKKyNlbmRp ZiAvKiBPWE9TICovCisgICAgdHRyYXcuY19sZmxhZyB8PSBOT0ZMU0g7CQkvKiBEb24ndCBmbHVz aCAqLworICAgIHR0cmF3LmNfaWZsYWcgfD0gSUdOUEFSOwkJLyogSWdub3JlIHBhcml0eSBlcnJv cnMgKi8KKyNpZmRlZiBBVFRTVgorI2lmZGVmIEJTRDQ0CisgICAgdHRyYXcuY19pZmxhZyAmPSB+ KElHTkJSS3xJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVB8SVhBTlkpOworI2Vsc2UKKyAg ICB0dHJhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElVQ0xDfElOUENL fElTVFJJUHxJWEFOWSk7CisjZW5kaWYgLyogQlNENDQgKi8KKyNlbHNlIC8qIFBPU0lYICovCisg ICAgdHRyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RS SVApOworI2VuZGlmIC8qIEFUVFNWICovCisgICAgdHRyYXcuY19vZmxhZyAmPSB+T1BPU1Q7Cisg ICAgdHRyYXcuY19jZmxhZyAmPSB+KENTSVpFKTsKKyAgICB0dHJhdy5jX2NmbGFnIHw9IChDUzh8 Q1JFQUR8SFVQQ0wpOworCisjaWZkZWYgQ1NUT1BCCisgICAgaWYgKHhsb2NhbCkgeworCWlmIChz dG9wYml0cyA9PSAyKSB7CisJICAgIHR0cmF3LmNfY2ZsYWcgfD0gQ1NUT1BCOwkvKiAyIHN0b3Ag Yml0cyAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCAyIHN0b3BiaXRzIiwiIiwwKTsKKwl9IGVs c2UgaWYgKHN0b3BiaXRzID09IDEpIHsKKwkgICAgdHRyYXcuY19jZmxhZyAmPSB+KENTVE9QQik7 CS8qIDEgc3RvcCBiaXQgKi8KKwkgICAgZGVidWcoRjEwMCwidHRwa3QgMSBzdG9wYml0IiwiIiww KTsKKwl9CisgICAgfQorI2VuZGlmIC8qIENTVE9QQiAqLworCisjaWZkZWYgSFdQQVJJVFkKKyAg ICBpZiAoaHdwYXJpdHkgJiYgeGxvY2FsKSB7CQkvKiBIYXJkd2FyZSBwYXJpdHkgKi8KKwl0dHJh dy5jX2NmbGFnIHw9IFBBUkVOQjsJLyogRW5hYmxlIHBhcml0eSAqLworI2lmZGVmIENPTU1FTlQK Ky8qIFVuY29tbWVudCB0aGlzIG9ubHkgaWYgbmVlZGVkIC0tIEkgZG9uJ3QgdGhpbmsgaXQgaXMg Ki8KKwl0dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUpOwkvKiBDbGVhciBvdXQgY2hhcmFjdGVyLXNp emUgbWFzayAqLworCXR0cmF3LmNfY2ZsYWcgfD0gQ1M4OwkJLyogQW5kIHNldCBpdCB0byA4ICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIElHTlBBUgorCXR0cmF3LmNfaWZsYWcgfD0g SUdOUEFSOwkvKiBEb24ndCBkaXNjYXJkIGluY29taW5nIGJ5dGVzICovCisJZGVidWcoRjEwMCwi dHRwa3QgSUdOUEFSIiwiIiwwKTsgLyogdGhhdCBoYXZlIHBhcml0eSBlcnJvcnMgKi8KKyNlbmRp ZiAvKiBJR05QQVIgKi8KKwlzd2l0Y2ggKGh3cGFyaXR5KSB7CisJICBjYXNlICdlJzoJCQkvKiBF dmVuICovCisJICAgIHR0cmF3LmNfY2ZsYWcgJj0gfihQQVJPREQpOworCSAgICBkZWJ1ZyhGMTAw LCJ0dHBrdCA4IGJpdHMgKyBldmVuIHBhcml0eSIsIiIsMCk7CisJICAgIGJyZWFrOworCSAgY2Fz ZSAnbyc6CQkJLyogT2RkICovCisJICAgIHR0cmF3LmNfY2ZsYWcgfD0gUEFST0REOworCSAgICBk ZWJ1ZyhGMTAwLCJ0dHBrdCA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKKwkgICAgYnJlYWs7 CisJICBjYXNlICdtJzoJCQkvKiBNYXJrICovCisJICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLwor CSAgICAvKiBQQVJFWFQgaXMgbWVudGlvbmVkIGluIFNWSUQgYnV0IHRoZSBkZXRhaWxzIGFyZSBu b3QgZ2l2ZW4uICovCisJICAgIC8qIFBBUkVYVCBpcyBub3QgaW5jbHVkZWQgaW4gUE9TSVggSVNP L0lFQyA5OTQ1LTEuICovCisJICAgIGRlYnVnKEYxMDAsInR0cGt0IDggYml0cyArIGludmFsaWQg cGFyaXR5IiwiIiwwKTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0gZWxzZSB7CQkJCS8qIFdlIGhh bmRsZSBwYXJpdHkgb3Vyc2VsdmVzICovCisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKwl0dHJhdy5j X2NmbGFnICY9IH4oUEFSRU5CKTsJLyogRG9uJ3QgZW5hYmxlIHBhcml0eSAqLworI2lmZGVmIEhX UEFSSVRZCisgICAgfQorI2VuZGlmIC8qIEhXUEFSSVRZICovCisKKyNpZmRlZiBJWDM3MAorICAg IHR0cmF3LmNfY2NbNF0gPSA0ODsgIC8qIFNvIFNlcmllcy8xIGRvZXNuJ3QgaW50ZXJydXB0IG9u IGV2ZXJ5IGNoYXIgKi8KKyAgICB0dHJhdy5jX2NjWzVdID0gMTsKKyNlbHNlCisjaWZuZGVmIFZF T0YJCQkJLyogZm9yIERHVVggdGhpcyBpcyBWRU9GLCBub3QgVk1JTiAqLworICAgIHR0cmF3LmNf Y2NbNF0gPSAxOyAgIC8qIFtWTUlOXSAgcmV0dXJuIG1heCBvZiB0aGlzIG1hbnkgY2hhcmFjdGVy cyBvciAqLworI2Vsc2UKKyNpZm5kZWYgT1hPUworI2lmZGVmIFZNSU4KKyAgICB0dHJhdy5jX2Nj W1ZNSU5dID0gMTsKKyNlbmRpZiAvKiBWTUlOICovCisjZWxzZSAvKiBPWE9TICovCisgICAgdHRy YXcuY19taW4gPSAxOworI2VuZGlmIC8qIE9YT1MgKi8KKyNlbmRpZiAvKiBWRU9GICovCisjaWZu ZGVmIFZFT0wJCQkJLyogZm9yIERHVVggdGhpcyBpcyBWRU9MLCBub3QgVlRJTUUgKi8KKyAgICB0 dHJhdy5jX2NjWzVdID0gMDsJIC8qIFtWVElNRV0gd2hlbiB0aGlzIG1hbnkgc2Vjcy8xMCBleHBp cmUgdy9ubyBpbnB1dCAqLworI2Vsc2UKKyNpZm5kZWYgT1hPUworI2lmZGVmIFZUSU1FCisgICAg dHRyYXcuY19jY1tWVElNRV0gPSAwOworI2VuZGlmIC8qIFZUSU1FICovCisjZWxzZSAvKiBPWE9T ICovCisgICAgdHRyYXcuY190aW1lID0gMDsKKyNlbmRpZiAvKiBPWE9TICovCisjZW5kaWYgLyog VkVPTCAqLworI2VuZGlmIC8qIElYMzcwICovCisKKyNpZmRlZiBWSU5UUgkJCQkvKiBUdXJuIG9m ZiBpbnRlcnJ1cHQgY2hhcmFjdGVyICovCisgICAgaWYgKHhsb2NhbCA9PSAwKQkJCS8qIHNvIF5D XkMgY2FuIGJyZWFrIHVzIG91dCBvZiAqLworICAgICAgdHRyYXcuY19jY1tWSU5UUl0gPSAwOwkJ LyogcGFja2V0IG1vZGUuICovCisjZW5kaWYgLyogVklOVFIgKi8KKworI2lmZGVmIFBsYW45Cisg ICAgaWYgKHA5dHR5cGFyaXR5KCduJykgPCAwKQorCXJldHVybiAtMTsKKyNlbHNlCisjaWZkZWYg QlNENDRPUlBPU0lYCisgICAgZXJybm8gPSAwOworI2lmZGVmIEJFT1NPUkJFQk9YCisgICAgdHRy YXcuY19jY1tWTUlOXSA9IDA7CQkvKiBEUjcgY2FuIG9ubHkgcG9sbC4gKi8KKyNlbmRpZiAvKiBC RU9TT1JCRUJPWCAqLworCisjZGVmaW5lIFRFU1RJTkcyMzQKKyNpZmRlZiBURVNUSU5HMjM0Cisg ICAgaWYgKDEpIHsKKwlkZWJ1ZyhGMTAwLCJ0dHBrdCBURVNUSU5HMjM0IHJhd21vZGUiLCIiLDAp OworCisJLyogaWZsYWdzICovCisJdHRyYXcuY19pZmxhZyAmPSB+KFBBUk1SS3xJU1RSSVB8QlJL SU5UfElOTENSfElHTkNSfElDUk5MKTsKKwl0dHJhdy5jX2lmbGFnICY9IH4oSU5QQ0t8SUdOUEFS fElYT058SVhPRkYpOworCXR0cmF3LmNfaWZsYWcgfD0gSUdOQlJLOworI2lmZGVmIElNQVhCRUwK Kwl0dHJhdy5jX2lmbGFnICY9IH5JTUFYQkVMOworI2VuZGlmCS8qIElNQVhCRUwgKi8KKyNpZmRl ZiBJWEFOWQorCXR0cmF3LmNfaWZsYWcgJj0gfklYQU5ZOworI2VuZGlmCS8qIElYQU5ZICovCisj aWZkZWYgSVVDTEMKKwl0dHJhdy5jX2lmbGFnICY9IH5JVUNMQzsKKyNlbmRpZiAvKiBJVUNMQyAq LworCisJLyogb2ZsYWdzICovCisJdHRyYXcuY19vZmxhZyAmPSB+T1BPU1Q7CisjaWZkZWYgT1hU QUJTCisJdHRyYXcuY19vZmxhZyAmPSB+T1hUQUJTOworI2VuZGlmIC8qIE9YVEFCUyAqLworI2lm ZGVmIE9OT0NSCisJdHRyYXcuY19vZmxhZyAmPSB+T05PQ1I7CisjZW5kaWYgLyogT05PQ1IgKi8K KyNpZmRlZiBPTkxSRVQKKwl0dHJhdy5jX29mbGFnICY9IH5PTkxSRVQ7CisjZW5kaWYgLyogT05M UkVUICovCisjaWZkZWYgT05MQ1IKKwl0dHJhdy5jX29mbGFnICY9IH5PTkxDUjsKKyNlbmRpZiAv KiBPTkxDUiAqLworCisJLyogbGZsYWdzICovCisJdHRyYXcuY19sZmxhZyAmPSB+RUNITzsKKyNp ZmRlZiBFQ0hPRQorCXR0cmF3LmNfbGZsYWcgJj0gfkVDSE9FOworI2VuZGlmIC8qIEVDSE9FICov CisjaWZkZWYgRUNIT05MCisJdHRyYXcuY19sZmxhZyAmPSB+RUNIT05MOworI2VuZGlmIC8qIEVD SE9OTCAqLworI2lmZGVmIEVDSE9QUlQKKwl0dHJhdy5jX2xmbGFnICY9IH5FQ0hPUFJUOworI2Vu ZGlmIC8qIEVDSE9QUlQgKi8KKyNpZmRlZiBFQ0hPS0UKKwl0dHJhdy5jX2xmbGFnICY9IH5FQ0hP S0U7CisjZW5kaWYgLyogRUNIT0tFICovCisjaWZkZWYgRUNIT0NUTAorCXR0cmF3LmNfbGZsYWcg Jj0gfkVDSE9DVEw7CisjZW5kaWYgLyogRUNIT0NUTCAqLworI2lmZGVmIEFMVFdFUkFTRQorCXR0 cmF3LmNfbGZsYWcgJj0gfkFMVFdFUkFTRTsKKyNlbmRpZiAvKiBBTFRXRVJBU0UgKi8KKyNpZmRl ZiBFWFRQUk9DCisJdHRyYXcuY19sZmxhZyAmPSB+RVhUUFJPQzsKKyNlbmRpZiAvKiBFWFRQUk9D ICovCisJdHRyYXcuY19sZmxhZyAmPSB+KElDQU5PTnxJU0lHfElFWFRFTnxUT1NUT1B8RkxVU0hP fFBFTkRJTik7CisjaWZkZWYgTk9LRVJOSU5GTworCXR0cmF3LmNfbGZsYWcgfD0gTk9LRVJOSU5G TzsKKyNlbmRpZgkvKiBOT0tFUk5JTkZPICovCisJLyogdHRyYXcuY19sZmxhZyB8PSBOT0ZMU0g7 ICovCisJdHRyYXcuY19sZmxhZyAmPSB+Tk9GTFNIOworCisJLyogY2ZsYWdzICovCisJdHRyYXcu Y19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQnxQQVJPREQpOworCXR0cmF3LmNfY2ZsYWcgfD0gQ1M4 fENSRUFEOworI2lmZGVmIFZNSU4KKwl0dHJhdy5jX2NjW1ZNSU5dID0gMTsJCS8qIFN1cHBvc2Vk bHkgbmVlZGVkIGZvciBBSVggKi8KKyNlbmRpZgkvKiBWTUlOICovCisKKyAgICB9CisjZW5kaWYg LyogVEVTVElORzIzNCAqLworCisgICAgZGVidWcoRjEwMCwidHRwa3QgY2FsbGluZyB0Y3NldGF0 dHIoVENTRVRBVykiLCIiLDApOworICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0 dHJhdyk7CisgICAgZGVidWcoRjEwMSwidHRwa3QgQlNENDRPUlBPU0lYIHRjc2V0YXR0ciIsIiIs eCk7CisgICAgaWYgKHggPCAwKSB7CisJZGVidWcoRjEwMSwidHRwa3QgQlNENDRPUlBPU0lYIHRj c2V0YXR0ciBlcnJubyIsIiIsZXJybm8pOworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyNl bHNlIC8qIEJTRDQ0T1JQT1NJWCAqLworICAgIHggPSBpb2N0bCh0dHlmZCxUQ1NFVEFXLCZ0dHJh dyk7CisgICAgZGVidWcoRjEwMSwidHRwa3QgQVRUU1YgaW9jdGwgVENTRVRBVyIsIiIseCk7Cisg ICAgaWYgKHggPCAwKSB7ICAvKiBzZXQgbmV3IG1vZGVzIC4gKi8KKwlkZWJ1ZyhGMTAxLCJ0dHBr dCBBVFRTViBpb2N0bCBUQ1NFVEFXIGVycm5vIiwiIixlcnJubyk7CisgICAgICAgIHJldHVybigt MSk7CisgICAgfQorI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIFBsYW45ICov CisgICAgdHZ0ZmxnID0gMDsKKyAgICBkZWJ1ZyhGMTAwLCJ0dHBrdCBvayIsIiIsMCk7CisgICAg cmV0dXJuKDApOworI2VuZGlmIC8qIEFUVFNWICovCisKKyNpZmRlZiBDT0hFUkVOVAorI3VuZGVm IFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKK30KKworLyogIFQgVCBTIEUgVCBG IEwgTyBXICAtLSAgU2V0IGZsb3cgY29udHJvbCBpbW1lZGlhdGVseS4gICovCisKKyNpZmRlZiBD T0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCitpbnQK K3R0c2V0ZmxvdyhmbG93KSBpbnQgZmxvdzsgeworICAgIGlmICh0dHlmZCA8IDApCQkJLyogQSBj aGFubmVsIG11c3QgYmUgb3BlbiAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIGRlYnVnKEYx MDEsInR0c2V0ZmxvdyBmbG93IiwiIixmbG93KTsKKworI2lmZGVmIFROX0NPTVBPUlQKKyAgICBp ZiAobmV0Y29ubiAmJiBpc3RuY29tcG9ydCgpKSB7CisJZGVidWcoRjEwMSwidHRzZXRmbG93IG5l dCBtb2RlbSIsIiIsdHRtZG0pOworCXJldHVybih0bnNldGZsb3coZmxvdykpOworICAgIH0KKyNl bmRpZiAvKiBUTl9DT01QT1JUICovCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkgcmV0 dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0 eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworCisjaWZkZWYgQ09NTUVOVAorICAg IC8qIFRoaXMgc2VlbXMgdG8gaHVydC4uLiAqLworICAgIGlmIChmbG93ID09IEZMT19LRUVQKQor ICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGlmIChmbG93ID09 IEZMT19SVFNDIHx8CQkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wuLi4gKi8KKwlmbG93ID09IEZM T19EVFJDIHx8CisJZmxvdyA9PSBGTE9fRFRSVCkgeworCXR0aGZsb3coZmxvdywgMSwgJnR0cmF3 KTsKKyNpZm5kZWYgU1ZPUlBPU0lYCisJdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVy biBvZmYgc29mdHdhcmUgZmxvdyBjb250cm9sICovCisjZWxzZQorCXR0cmF3LmNfaWZsYWcgJj0g fihJWE9OfElYT0ZGKTsKKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKworICAgIH0gZWxzZSBpZiAo ZmxvdyA9PSBGTE9fWE9OWCkgewkvKiBYb24vWG9mZi4uLiAqLworCisjaWZuZGVmIFNWT1JQT1NJ WAorCXR0cmF3LnNnX2ZsYWdzIHw9IFRBTkRFTTsKKyNlbHNlCisJdHRyYXcuY19pZmxhZyB8PSAo SVhPTnxJWE9GRik7CisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisJdHRoZmxvdyhGTE9fUlRTQywg MCwgJnR0cmF3KTsJLyogVHVybiBvZmYgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCisKKyAgICB9 IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTm8gZmxvdyBjb250cm9sICovCisKKyNp Zm5kZWYgU1ZPUlBPU0lYCisJdHRyYXcuc2dfZmxhZ3MgJj0gflRBTkRFTTsJLyogVHVybiBvZmYg c29mdHdhcmUgZmxvdyBjb250cm9sICovCisjZWxzZQorCXR0cmF3LmNfaWZsYWcgJj0gfihJWE9O fElYT0ZGKTsKKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKwl0dGhmbG93KEZMT19SVFNDLCAwLCAm dHRyYXcpOwkvKiBUdXJuIG9mZiBhbnkgaGFyZHdhcmUgZi9jIHRvbyAqLworICAgIH0KKworLyog U2V0IHRoZSBuZXcgbW9kZXMuLi4gKi8KKworI2lmbmRlZiBTVk9SUE9TSVgJCQkvKiBCU0QgYW5k IGZyaWVuZHMgKi8KKyNpZmRlZiBCRUxMVjEwCisgICAgaWYgKGlvY3RsKHR0eWZkLFRJT0NTRVRQ LCZ0dHJhdykgPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyNlbHNlCisjaWZuZGVmIE1JTklYMgor ICAgIGlmIChzdHR5KHR0eWZkLCZ0dHJhdykgPCAwKQorICAgICAgcmV0dXJuKC0xKTsKKyNlbmRp ZiAvKiBNSU5JWDIgKi8KKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZWxzZQorI2lmZGVmIEJTRDQ0 T1JQT1NJWAkJCS8qIFBPU0lYICovCisgICAgaWYgKHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4s JnR0cmF3KSA8IDApCisgICAgICByZXR1cm4oLTEpOworI2Vsc2UJCQkJCS8qIFN5c3RlbSBWICov CisgICAgaWYgKGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0cmF3KSA8IDApCisgICAgICByZXR1cm4o LTEpOworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwor ICAgIHJldHVybigwKTsKK30KKyNpZmRlZiBDT0hFUkVOVAorI3VuZGVmIFNWT1JQT1NJWAorI2Vu ZGlmIC8qIENPSEVSRU5UICovCisKKy8qICBUIFQgViBUIC0tIENvbmRpdGlvbiBjb21tdW5pY2F0 aW9uIGRldmljZSBmb3IgdXNlIGFzIHZpcnR1YWwgdGVybWluYWwuICovCisKK2ludAorI2lmZGVm IENLX0FOU0lDCit0dHZ0KGxvbmcgc3BlZWQsIGludCBmbG93KQorI2Vsc2UKK3R0dnQoc3BlZWQs ZmxvdykgbG9uZyBzcGVlZDsgaW50IGZsb3c7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHR0 dnQgKi8geworICAgIGludCBzLCBzMiwgeDsKKworICAgIGRlYnVnKEYxMDEsInR0dnQgdHR5ZmQi LCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHZ0IHR2dGZsZyIsIiIsdHZ0ZmxnKTsKKyAg ICBkZWJ1ZyhGMTExLCJ0dHZ0IHNwZWVkIixja2l0b2EodHRzcGVlZCksc3BlZWQpOworICAgIGRl YnVnKEYxMTEsInR0dnQgZmxvdyIsY2tpdG9hKHR0ZmxvdyksZmxvdyk7CisgICAgZGVidWcoRjEx MSwidHR2dCBjdXJjYXJyIixja2l0b2EodHRjYXJyKSxjdXJjYXJyKTsKKworLyogTm90ZTogTmV0 QlNEIGFuZCBtYXliZSBvdGhlciBCU0Q0NHMgaGF2ZSBjZm1ha2VyYXcoKSAqLworLyogTWF5YmUg aXQgd291bGQgYmUgc2ltcGxlciB0byB1c2UgaXQuLi4gKi8KKworICAgIHR0cG1zayA9IDB4ZmY7 CisjaWZkZWYgTk9MT0NBTAorICAgIHJldHVybihjb25iaW4oKGNoYXIpZXNjY2hyKSk7CisjZWxz ZQorICAgIGlmICh0dHlmZCA8IDApIHsJCQkvKiBOb3Qgb3Blbi4gKi8KKwlpZiAodHRjaGsoKSA8 IDApCisJICByZXR1cm4oLTEpOworCWVsc2UJCQkJLyogQnV0IG1heWJlIHNvbWV0aGluZyBidWZm ZXJlZC4gKi8KKwkgIHJldHVybigwKTsKKyAgICB9CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0 cGlwZSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAg IGlmICh0dHB0eSkgcmV0dXJuKDApOworI2VuZGlmIC8qIE5FVFBUWSAqLworI2lmZGVmIE5FVENP Tk4KKyAgICBpZiAobmV0Y29ubikgeworI2lmZGVmIFRDUFNPQ0tFVAorI2lmZGVmIFRDUF9OT0RF TEFZCisgICAgICAgIHsKKwkgICAgZXh0ZXJuIGludCB0Y3Bfbm9kZWxheTsKKwkgICAgaWYgKHR0 bmV0ID09IE5FVF9UQ1BCKSB7CisJCWlmIChub2RlbGF5X3NhdiA+IC0xKSB7CisJCSAgICBub19k ZWxheSh0dHlmZCxub2RlbGF5X3Nhdik7CisJCSAgICBub2RlbGF5X3NhdiA9IC0xOworCQl9CisJ ICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisjaWZkZWYgVE5fQ09N UE9SVAorICAgICAgICBpZiAoaXN0bmNvbXBvcnQoKSkgeworICAgICAgICAgICAgaW50IHJjID0g LTE7CisgICAgICAgICAgICBpZiAodHZ0ZmxnICE9IDAgJiYgc3BlZWQgPT0gdHRzcGVlZCAmJiBm bG93ID09IHR0ZmxvdworICAgICAgICAgICAgICAgICAvKiAmJiB0dGNhcnIgPT0gY3VyY2FyciAq LyApIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IG1vZGVzIGFscmVhZHkgc2V0 LCBza2lwcGluZy4uLiIsIiIsMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKDApOwkJCS8qIEFs cmVhZHkgYmVlbiBjYWxsZWQuICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmxv dyAhPSB0dGZsb3cpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJjID0gdG5zZXRmbG93KGZsb3cp KSA8IDApCisJCSAgcmV0dXJuKHJjKTsKKyAgICAgICAgICAgICAgICB0dGZsb3cgPSBmbG93Owor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNwZWVkICE9IHR0c3BlZWQpIHsKKyAgICAg ICAgICAgICAgICBpZiAoc3BlZWQgPD0gMCkgCisJCSAgc3BlZWQgPSB0bmNfZ2V0X2JhdWQoKTsK KyAgICAgICAgICAgICAgICBlbHNlIGlmICgocmMgPSB0bmNfc2V0X2JhdWQoc3BlZWQpKSA8IDAp CisJCSAgcmV0dXJuKHJjKTsKKyAgICAgICAgICAgICAgICB0dHNwZWVkID0gc3BlZWQ7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICB0bmNfc2V0X2RhdGFzaXplKDgpOworCSAgICB0bmNfc2V0 X3N0b3BzaXplKHN0b3BiaXRzKTsKKworI2lmZGVmIEhXUEFSSVRZCisgICAgICAgICAgICBpZiAo aHdwYXJpdHkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGh3cGFyaXR5KSB7CisJCSAgY2Fz ZSAnZSc6CQkvKiBFdmVuICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVz IDggYml0cyArIGV2ZW4gcGFyaXR5IiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5jX3Nl dF9wYXJpdHkoMyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkgIGNhc2UgJ28nOgkJ LyogT2RkICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyAr IG9kZCBwYXJpdHkiLCIiLDApOworICAgICAgICAgICAgICAgICAgICB0bmNfc2V0X3Bhcml0eSgy KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCSAgY2FzZSAnbSc6CQkvKiBNYXJrICov CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR0cmVzIDggYml0cyArIGludmFsaWQg cGFyaXR5OiBtYXJrIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHko NCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkgIGNhc2UgJ3MnOgkJLyogU3BhY2Ug Ki8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwidHRyZXMgOCBiaXRzICsgaW52YWxp ZCBwYXJpdHk6IHNwYWNlIiwiIiwwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5jX3NldF9wYXJp dHkoNSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIEhXUEFSSVRZICovCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgdG5jX3NldF9wYXJpdHkoMSk7CS8qIE5vbmUgKi8KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHR2dGZsZyA9IDE7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisJ dHZ0ZmxnID0gMTsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb25zLi4uICovCisJZGVidWcoRjEwMCwi dHR2dCBuZXR3b3JrIGNvbm5lY3Rpb24sIHNraXBwaW5nLi4uIiwiIiwwKTsKKwlyZXR1cm4oMCk7 CQkJLyogLi4uIHJlcXVpcmUgbm8gc3BlY2lhbCBzZXR1cCAqLworICAgIH0KKyNlbmRpZiAvKiBO RVRDT05OICovCisKKyAgICBpZiAodHZ0ZmxnICE9IDAgJiYgc3BlZWQgPT0gdHRzcGVlZCAmJiBm bG93ID09IHR0ZmxvdworCS8qICYmIHR0Y2FyciA9PSBjdXJjYXJyICovICkKKyAgICAgIHsKKwkg IGRlYnVnKEYxMDAsInR0dnQgbW9kZXMgYWxyZWFkeSBzZXQsIHNraXBwaW5nLi4uIiwiIiwwKTsK KwkgIHJldHVybigwKTsJCQkvKiBBbHJlYWR5IGJlZW4gY2FsbGVkLiAqLworICAgICAgfQorCisg ICAgaWYgKHR0ZmRmbGcKKyNpZm5kZWYgUGxhbjkKKwkmJiAhaXNhdHR5KHR0eWZkKQorI2VuZGlm IC8qIFBsYW45ICovCisJKSB7CisJZGVidWcoRjEwMCwidHR2dCB1c2luZyBleHRlcm5hbCBmZCwg c2tpcHBpbmcuLi4iLCIiLDApOworCXJldHVybigwKTsKKyAgICB9CisKKyAgICBkZWJ1ZyhGMTAw LCJ0dHZ0IHNldHRpbmcgbW9kZXMuLi4iLCIiLDApOworCisgICAgaWYgKHhsb2NhbCkgewkJCS8q IEZvciBleHRlcm5hbCBsaW5lcy4uLiAqLworCXMyID0gKGludCkgKHNwZWVkIC8gMTBMKTsKKwlz ID0gdHRzc3BkKHMyKTsJCQkvKiBDaGVjay9zZXQgdGhlIHNwZWVkICovCisJY2FycmN0bCgmdHR0 dnQsIGZsb3cgIT0gRkxPX0RJQUwgLyogRG8gY2FycmllciBjb250cm9sICovCisJCSYmICh0dGNh cnIgPT0gQ0FSX09OIHx8ICh0dGNhcnIgPT0gQ0FSX0FVVCAmJiB0dG1kbSAhPSAwKSkpOworICAg IH0gZWxzZQorICAgICAgcyA9IHMyID0gLTE7CisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBT Vk9SUE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZuZGVmIFNWT1JQT1NJWAorICAg IC8qIEJlcmtlbGV5LCBWNywgZXRjICovCisgICAgaWYgKGZsb3cgPT0gRkxPX1JUU0MgfHwJCS8q IEhhcmR3YXJlIGZsb3cgY29udHJvbCAqLworCWZsb3cgPT0gRkxPX0RUUkMgfHwKKwlmbG93ID09 IEZMT19EVFJUKSB7CisJdHRoZmxvdyhmbG93LCAxLCAmdHR0dnQpOworCWRlYnVnKEYxMDAsInR0 dnQgaGFyZCBmbG93LCBUQU5ERU0gb2ZmIiwiIiwwKTsKKwl0dHR2dC5zZ19mbGFncyAmPSB+VEFO REVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKyAgICB9IGVsc2UgaWYg KGZsb3cgPT0gRkxPX1hPTlgpIHsJLyogWG9uL1hvZmYgZmxvdyBjb250cm9sICovCisJZGVidWco RjEwMCwidHR2dCBUQU5ERU0gb24iLCIiLDApOworCXR0dHZ0LnNnX2ZsYWdzIHw9IFRBTkRFTTsJ LyogQXNrIGZvciBpdC4gKi8KKwl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2Zm IGhhcmR3YXJlIGYvYyAqLworICAgIH0gZWxzZSBpZiAoZmxvdyA9PSBGTE9fTk9ORSkgeworCWRl YnVnKEYxMDAsInR0dnQgbm8gZmxvdywgVEFOREVNIG9mZiwgUkFXIG9uIiwiIiwwKTsKKwl0dHR2 dC5zZ19mbGFncyAmPSB+VEFOREVNOwkvKiBUdXJuIG9mZiBzb2Z0d2FyZSBmbG93IGNvbnRyb2wg Ki8KKwl0dGhmbG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGFueSBoYXJkd2FyZSBm L2MgdG9vICovCisJdHR0dnQuc2dfZmxhZ3MgfD0gUkFXOwkJLyogRW50ZXIgcmF3IG1vZGUgKi8K KyAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX0tFRVApIHsJLyogS2VlcCBkZXZpY2UncyBvcmln aW5hbCBzZXR0aW5nICovCisJZGVidWcoRjEwMCwidHR2dCBrZWVwaW5nIG9yaWdpbmFsIFRBTkRF TSIsIiIsMCk7CisJdHR0dnQuc2dfZmxhZ3MgJj0gflRBTkRFTTsKKwl0dHR2dC5zZ19mbGFncyB8 PSAodHRvbGQuc2dfZmxhZ3MgJiBUQU5ERU0pOworCS8qIE5PVEU6IFdlIHNob3VsZCBhbHNvIGhh bmRsZSBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaGVyZSEgKi8KKyAgICB9CisgICAgdHR0dnQuc2df ZmxhZ3MgfD0gUkFXOyAgICAgICAgICAgICAgLyogUmF3IG1vZGUgaW4gYWxsIGNhc2VzICovCisj aWZkZWYgVE9XRVIxCisgICAgdHR0dnQuc2dfZmxhZ3MgJj0gfihFQ0hPfEFOWVApOyAgICAgLyog Tm8gZWNobyBvciBwYXJpdHkgKi8KKyNlbHNlCisgICAgdHR0dnQuc2dfZmxhZ3MgJj0gfkVDSE87 ICAgICAgICAgICAgLyogTm8gZWNobyAqLworI2VuZGlmIC8qIFRPV0VSMSAqLworCisjaWZkZWYg QkVMTFYxMAorICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DU0VUUCwmdHR0dnQpIDwgMCkgLyogU2V0 IHRoZSBuZXcgbW9kZXMgKi8KKyAgICAgIHJldHVybigtMSk7CisjZWxzZQorICAgIGlmIChzdHR5 KHR0eWZkLCZ0dHR2dCkgPCAwKQkJLyogU2V0IHRoZSBuZXcgbW9kZXMgKi8KKyAgICAgIHJldHVy bigtMSk7CisjZW5kaWYgLyogQkVMTFYxMCAqLworCisjZWxzZSAvKiBJdCBpcyBBVFRTViBvciBQ T1NJWCAqLworCisgICAgaWYgKGZsb3cgPT0gRkxPX1hPTlgpIHsJCS8qIFNvZnR3YXJlIGZsb3cg Y29udHJvbCAqLworCXR0dHZ0LmNfaWZsYWcgfD0gKElYT058SVhPRkYpOwkvKiBPbiBpZiByZXF1 ZXN0ZWQuICovCisJdHRoZmxvdyhmbG93LCAwLCAmdHR0dnQpOwkvKiBUdXJuIG9mZiBoYXJkd2Fy ZSBmL2MgKi8KKwlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IFhPTi9YT0ZGIiwiIiww KTsKKyAgICB9IGVsc2UgaWYgKGZsb3cgPT0gRkxPX05PTkUpIHsJLyogTk9ORSAqLworCXR0dHZ0 LmNfaWZsYWcgJj0gfihJWE9OfElYT0ZGKTsJLyogVHVybiBvZmYgWG9uL1hvZmYgKi8KKwl0dGhm bG93KGZsb3csIDAsICZ0dHR2dCk7CS8qIFR1cm4gb2ZmIGhhcmR3YXJlIGYvYyAqLworCWRlYnVn KEYxMDAsInR0dnQgU1ZPUlBPU0lYIGZsb3cgTk9ORSIsIiIsMCk7CisgICAgfSBlbHNlIGlmIChm bG93ID09IEZMT19LRUVQKSB7CisJdHR0dnQuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiBU dXJuIG9mZiBYb24vWG9mZiBmbGFncyAqLworCXR0dHZ0LmNfaWZsYWcgfD0gKHR0b2xkLmNfaWZs YWcgJiAoSVhPTnxJWE9GRikpOyAvKiBPUiBpbiBvbGQgb25lcyAqLworI2lmZGVmIFBPU0lYX0NS VFNDVFMKKyAgICAgICAgdHR0dnQuY19jZmxhZyAmPSB+Q1JUU0NUUzsJLyogVHVybiBvZmYgUlRT L0NUUyBmbGFnICovCisgICAgICAgIHR0dHZ0LmNfY2ZsYWcgfD0gKHR0b2xkLmNfY2ZsYWcgJiBD UlRTQ1RTKTsgLyogT1IgaW4gb2xkIG9uZSAqLworI2VuZGlmIC8qIFBPU0lYX0NSVFNDVFMgKi8K KwlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IEtFRVAiLCIiLDApOworICAgIH0gZWxz ZSBpZiAoZmxvdyA9PSBGTE9fUlRTQyB8fAkvKiBIYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKwkg ICAgICAgZmxvdyA9PSBGTE9fRFRSQyB8fAorCSAgICAgICBmbG93ID09IEZMT19EVFJUKSB7CisJ dHR0dnQuY19pZmxhZyAmPSB+KElYT058SVhPRkYpOwkvKiAoMTk2KSAqLworCXR0aGZsb3coZmxv dywgMSwgJnR0dHZ0KTsKKwlkZWJ1ZyhGMTAwLCJ0dHZ0IFNWT1JQT1NJWCBmbG93IEhBUkQiLCIi LDApOworICAgIH0KKyNpZm5kZWYgT1hPUworI2lmZGVmIENPSEVSRU5UCisgICAgdHR0dnQuY19s ZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOworI2Vsc2UKKyAgICB0dHR2dC5jX2xmbGFnICY9 IH4oSVNJR3xJQ0FOT058RUNIT3xJRVhURU4pOworI2VuZGlmIC8qIENPSEVSRU5UICovCisjaWZk ZWYgUU5YCisgICAgLyogTmVlZGVkIGZvciBod2ZjICovCisgICAgaWYgKGZsb3cgPT0gRkxPX1JU U0MgfHwgZmxvdyA9PSBGTE9fRFRSQyB8fCBmbG93ID09IEZMT19EVFJUKQorICAgICAgdHR0dnQu Y19sZmxhZyB8PSBJRVhURU47CisjZW5kaWYgLyogUU5YICovCisjZWxzZSAvKiBPWE9TICovCisg ICAgdHR0dnQuY19sZmxhZyAmPSB+KElTSUd8SUNBTk9OfEVDSE8pOworICAgIHR0dHZ0LmNfY2Nb VkRJU0NBUkRdID0gdHR0dnQuY19jY1tWTE5FWFRdID0gQ0RJU0FCTEU7CisjZW5kaWYgLyogT1hP UyAqLworCisgICAgdHR0dnQuY19pZmxhZyB8PSAoSUdOQlJLfElHTlBBUik7CisKKy8qIFN0b3Ag Yml0cyAqLworCisjaWZkZWYgQ1NUT1BCCisgICAgaWYgKHhsb2NhbCkgeworCWlmIChzdG9wYml0 cyA9PSAyKSB7CisJICAgIHR0dHZ0LmNfY2ZsYWcgfD0gQ1NUT1BCOwkvKiAyIHN0b3AgYml0cyAq LworCSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IDIgc3RvcGJpdHMiLCIiLDApOworCX0gZWxzZSBpZiAo c3RvcGJpdHMgPT0gMSkgeworCSAgICB0dHR2dC5jX2NmbGFnICY9IH4oQ1NUT1BCKTsJLyogMSBz dG9wIGJpdCAqLworCSAgICBkZWJ1ZyhGMTAwLCJ0dHZ0IDEgc3RvcGJpdCIsIiIsMCk7CisJfQor ICAgIH0KKyNlbmRpZiAvKiBDU1RPUEIgKi8KKworLyogUGFyaXR5ICovCisKKyNpZmRlZiBIV1BB UklUWQorICAgIGlmIChod3Bhcml0eSAmJiB4bG9jYWwpIHsJCS8qIEhhcmR3YXJlIHBhcml0eSAq LworI2lmZGVmIENPTU1FTlQKKy8qIFVuY29tbWVudCB0aGlzIG9ubHkgaWYgbmVlZGVkIC0tIEkg ZG9uJ3QgdGhpbmsgaXQgaXMgKi8KKwl0dHJhdy5jX2NmbGFnICY9IH4oQ1NJWkUpOwkvKiBDbGVh ciBvdXQgY2hhcmFjdGVyLXNpemUgbWFzayAqLworCXR0cmF3LmNfY2ZsYWcgfD0gQ1M4OwkJLyog QW5kIHNldCBpdCB0byA4ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIElHTlBBUgor CWRlYnVnKEYxMDEsInR0dnQgaHdwYXJpdHkgSUdOUEFSIiwiIixJR05QQVIpOworCXR0dHZ0LmNf aWZsYWcgfD0gSUdOUEFSOwkvKiBEb24ndCBkaXNjYXJkIGluY29taW5nIGJ5dGVzICovCisjZW5k aWYgLyogSUdOUEFSICovCisJdHR0dnQuY19jZmxhZyB8PSBQQVJFTkI7CS8qIEVuYWJsZSBwYXJp dHkgKi8KKworCXN3aXRjaCAoaHdwYXJpdHkpIHsKKwkgIGNhc2UgJ2UnOgkJCS8qIEV2ZW4gKi8K KwkgICAgdHR0dnQuY19jZmxhZyAmPSB+KFBBUk9ERCk7CisJICAgIGRlYnVnKEYxMDAsInR0dnQg OCBiaXRzICsgZXZlbiBwYXJpdHkiLCIiLDApOworCSAgICBicmVhazsKKwkgIGNhc2UgJ28nOgkJ CS8qIE9kZCAqLworCSAgICB0dHR2dC5jX2NmbGFnIHw9IFBBUk9ERDsKKwkgICAgZGVidWcoRjEw MCwidHR2dCA4IGJpdHMgKyBvZGQgcGFyaXR5IiwiIiwwKTsKKwkgICAgYnJlYWs7CisJICBjYXNl ICdtJzoJCQkvKiBNYXJrICovCisJICBjYXNlICdzJzoJCQkvKiBTcGFjZSAqLworCSAgICAvKiBQ QVJFWFQgaXMgbWVudGlvbmVkIGluIFNWSUQgYnV0IHRoZSBkZXRhaWxzIGFyZSBub3QgZ2l2ZW4u ICovCisJICAgIC8qIFBBUkVYVCBpcyBub3QgaW5jbHVkZWQgaW4gUE9TSVggSVNPL0lFQyA5OTQ1 LTEuICovCisJICAgIGRlYnVnKEYxMDAsInR0dnQgOCBiaXRzICsgaW52YWxpZCBwYXJpdHkiLCIi LDApOworCSAgICBicmVhazsKKwl9CisgICAgfSBlbHNlIHsJCQkJLyogV2UgaGFuZGxlIHBhcml0 eSBvdXJzZWx2ZXMgKi8KKyNlbmRpZiAvKiBIV1BBUklUWSAqLworCXR0dHZ0LmNfY2ZsYWcgJj0g fihQQVJFTkIpOwkvKiBEb24ndCBlbmFibGUgcGFyaXR5ICovCisjaWZkZWYgSFdQQVJJVFkKKyAg ICB9CisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKworI2lmZGVmIEFUVFNWCisjaWZkZWYgQlNENDQK KyAgICAvKiBUaGluZ3Mgbm90IHRvIGRvLi4uICovCisgICAgdHR0dnQuY19pZmxhZyAmPSB+KElO TENSfElHTkNSfElDUk5MfElOUENLfElTVFJJUHxJWEFOWSk7CisjZWxzZQorICAgIHR0dHZ0LmNf aWZsYWcgJj0gfihJTkxDUnxJR05DUnxJQ1JOTHxJVUNMQ3xJTlBDS3xJU1RSSVB8SVhBTlkpOwor I2VuZGlmIC8qIEJTRDQ0ICovCisjZWxzZSAvKiBQT1NJWCAqLworICAgIHR0dHZ0LmNfaWZsYWcg Jj0gfihJTkxDUnxJR05DUnxJQ1JOTHxJTlBDS3xJU1RSSVApOworI2VuZGlmIC8qIEFUVFNWICov CisgICAgdHR0dnQuY19jZmxhZyAmPSB+KENTSVpFKTsJCS8qIFplcm8gb3V0IHRoZSBjaGFyIHNp emUgZmllbGQgKi8KKyAgICB0dHR2dC5jX2NmbGFnIHw9IChDUzh8Q1JFQUR8SFVQQ0wpOwkvKiBD aGFyIHNpemUgOCwgZW5hYmxlIHJlY2VpdmVyLCBodXAgKi8KKyAgICB0dHR2dC5jX29mbGFnICY9 IH5PUE9TVDsJCS8qIERvbid0IHBvc3Rwcm9jZXNzIG91dHB1dCAqLworI2lmbmRlZiBWRU9GIC8q IERHVVggdGVybWlvIGhhcyBWRU9GIGF0IGVudHJ5IDQsIHNlZSBjb21tZW50IGFib3ZlICovCisg ICAgdHR0dnQuY19jY1s0XSA9IDE7CisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVk1JTgor ICAgIHR0dHZ0LmNfY2NbVk1JTl0gPSAxOworI2VuZGlmIC8qIFZNSU4gKi8KKyNlbHNlIC8qIE9Y T1MgKi8KKyAgICB0dHR2dC5jX21pbiA9IDE7CisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8q IFZFT0YgKi8KKyNpZm5kZWYgVkVPTAkvKiBER1VYIHRlcm1pbyBoYXMgVkVPTCBhdCBlbnRyeSA1 LCBzZWUgY29tbWVudCBhYm92ZSAqLworICAgIHR0dHZ0LmNfY2NbNV0gPSAwOworI2Vsc2UKKyNp Zm5kZWYgT1hPUworI2lmZGVmIFZUSU1FCisgICAgdHR0dnQuY19jY1tWVElNRV0gPSAwOworI2Vu ZGlmIC8qIFZUSU1FICovCisjZWxzZSAvKiBPWE9TICovCisgICAgdHR0dnQuY190aW1lID0gMDsK KyNlbmRpZiAvKiBPWE9TICovCisjZW5kaWYgLyogVkVPTCAqLworCisjaWZkZWYgUGxhbjkKKyAg ICBpZiAocDl0dHlwYXJpdHkoJ24nKSA8IDApCisgICAgICByZXR1cm4gLTE7CisjZWxzZQorI2lm ZGVmIEJTRDQ0T1JQT1NJWAorICAgIGVycm5vID0gMDsKKyNpZmRlZiBCRU9TT1JCRUJPWAorICAg IHR0dHZ0LmNfY2NbVk1JTl0gPSAwOwkJLyogRFI3IGNhbiBvbmx5IHBvbGwuICovCisjZW5kaWYg LyogQkVPU09SQkVCT1ggKi8KKworICAgIHggPSB0Y3NldGF0dHIodHR5ZmQsVENTQURSQUlOLCZ0 dHR2dCk7CisgICAgZGVidWcoRjEwMSwidHR2dCBCU0Q0NE9SUE9TSVggdGNzZXRhdHRyIiwiIix4 KTsKKyAgICBpZiAoeCA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dHZ0IEJTRDQ0T1JQT1NJWCB0Y3Nl dGF0dHIgZXJybm8iLCIiLGVycm5vKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyNlbHNlIC8qIEFU VFNWICovCisgICAgeCA9IGlvY3RsKHR0eWZkLFRDU0VUQVcsJnR0dHZ0KTsKKyAgICBkZWJ1ZyhG MTAxLCJ0dHZ0IEFUVFNWIGlvY3RsIFRDU0VUQVciLCIiLHgpOworICAgIGlmICh4IDwgMCkgewkJ CS8qIHNldCBuZXcgbW9kZXMgLiAqLworCWRlYnVnKEYxMDEsInR0dnQgQVRUU1YgaW9jdGwgVENT RVRBVyBlcnJubyIsIiIsZXJybm8pOworCXJldHVybigtMSk7CQorICAgIH0KKyNlbmRpZiAvKiBC U0Q0NE9SUE9TSVggKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworI2VuZGlmIC8qIEFUVFNWICovCisK KyAgICB0dHNwZWVkID0gc3BlZWQ7CQkJLyogRG9uZSwgcmVtZW1iZXIgaG93IHdlIHdlcmUgKi8K KyAgICB0dGZsb3cgPSBmbG93OwkJCS8qIGNhbGxlZCwgc28gd2UgY2FuIGRlY2lkZSBob3cgdG8g Ki8KKyAgICB0dnRmbGcgPSAxOwkJCQkvKiByZXNwb25kIG5leHQgdGltZS4gKi8KKyAgICBkZWJ1 ZyhGMTAwLCJ0dHZ0IG9rIiwiIiwwKTsKKyAgICByZXR1cm4oMCk7CisKKyNpZmRlZiBDT0hFUkVO VAorI3VuZGVmIFNWT1JQT1NJWAorI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNlbmRpZiAvKiBO T0xPQ0FMICovCit9CisKKyNpZm5kZWYgTk9MT0NBTAorCisvKiBTZXJpYWwgc3BlZWQgZGVwYXJ0 bWVudCAuIC4gLiAqLworCisvKgorICBTQ08gT1NSNS4wLnggbWlnaHQgb3IgbWlnaHQgbm90IHN1 cHBvcnQgaGlnaCBzcGVlZHMuICBTb21ldGltZXMgdGhleSBhcmUgbm90CisgIGRlZmluZWQgaW4g dGhlIGhlYWRlciBmaWxlcyBidXQgdGhleSBhcmUgc3VwcG9ydGVkIChlLmcuIHdoZW4gYnVpbGRp bmcgd2l0aAorICBVREsgY29tcGlsZXIgcmF0aGVyIHRoYW4gL2Jpbi9jYyksIHNvbWV0aW1lcyB2 aWNlIHZlcnNhLiAgRXZlbiB0aG91Z2ggNS4wLjQKKyAgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRo YXQgY2FtZSB3aXRoIGhpZ2ggc2VyaWFsIHNwZWVkcyBzdGFuZGFyZCwgcmVsZWFzZXMKKyAgYmFj ayB0byA1LjAuMCBjb3VsZCB1c2UgdGhlbSBpZiBjZXJ0YWluIHBhdGNoZXMgKG9yICJzdXBwbGVt ZW50cyIpIHdlcmUKKyAgYXBwbGllZCB0byB0aGUgU0lPIGRyaXZlci4gIFBsdXMgYSBsb3Qgb2Yg U0NPIGluc3RhbGxhdGlvbnMgcnVuIHRoaXJkLXBhcnR5CisgIGRyaXZlcnMuCisqLworI2lmZGVm IENLX1NDT1Y1CisjaWZuZGVmIEIzODQwMAorI2RlZmluZQlCMzg0MDAJMDAwMDAxNworI2VuZGlm IC8qIEIzODQwMCAqLworI2lmbmRlZiBCNTc2MDAKKyNkZWZpbmUJQjU3NjAwCTAwMDAwMjEKKyNl bmRpZiAvKiBCNTc2MDAgKi8KKyNpZm5kZWYgQjc2ODAwCisjZGVmaW5lCUI3NjgwMAkwMDAwMDIy CisjZW5kaWYgLyogQjc2ODAwICovCisjaWZuZGVmIEIxMTUyMDAKKyNkZWZpbmUJQjExNTIwMAkw MDAwMDIzCisjZW5kaWYgLyogQjExNTIwMCAqLworI2lmbmRlZiBCMjMwNDAwCisjZGVmaW5lCUIy MzA0MDAJMDAwMDAyNAorI2VuZGlmIC8qIEIyMzA0MDAgKi8KKyNpZm5kZWYgQjQ2MDgwMAorI2Rl ZmluZQlCNDYwODAwCTAwMDAwMjUKKyNlbmRpZiAvKiBCNDYwODAwICovCisjaWZuZGVmIEI5MjE2 MDAKKyNkZWZpbmUJQjkyMTYwMAkwMDAwMDI2CisjZW5kaWYgLyogQjkyMTYwMCAqLworI2VuZGlm IC8qIENLX1NDT1Y1ICovCisvKgorICBQbGFuIDkncyBuYXRpdmUgc3BlZWQgc2V0dGluZyBpbnRl cmZhY2UgbGV0cyB5b3Ugc2V0IGFueXRoaW5nIHlvdSBsaWtlLAorICBidXQgd2lsbCBmYWlsIGlm IHRoZSBoYXJkd2FyZSBkb2Vzbid0IGxpa2UgaXQsIHNvIHdlIGFsbG93IGFsbCB0aGUgY29tbW9u CisgIHNwZWVkcy4KKyovCisjaWZkZWYgUGxhbjkKKyNpZm5kZWYgQjUwCisjZGVmaW5lIEI1MCA1 MAorI2VuZGlmIC8qIEI1MCAqLworI2lmbmRlZiBCNzUKKyNkZWZpbmUgQjc1IDc1CisjZW5kaWYg LyogQjc1ICovCisjaWZuZGVmIEIxMTAKKyNkZWZpbmUgQjExMCAxMTAKKyNlbmRpZiAvKiBCMTEw ICovCisjaWZuZGVmIEIxMzQKKyNkZWZpbmUgQjEzNCAxMzQKKyNlbmRpZiAvKiBCMTM0ICovCisj aWZuZGVmIEIyMDAKKyNkZWZpbmUgQjIwMCAyMDAKKyNlbmRpZiAvKiBCMjAwICovCisjaWZuZGVm IEIzMDAKKyNkZWZpbmUgQjMwMCAzMDAKKyNlbmRpZiAvKiBCMzAwICovCisjaWZuZGVmIEIxMjAw CisjZGVmaW5lIEIxMjAwIDEyMDAKKyNlbmRpZiAvKiBCMTIwMCAqLworI2lmbmRlZiBCMTgwMAor I2RlZmluZSBCMTgwMCAxODAwCisjZW5kaWYgLyogQjE4MDAgKi8KKyNpZm5kZWYgQjI0MDAKKyNk ZWZpbmUgQjI0MDAgMjQwMAorI2VuZGlmIC8qIEIyNDAwICovCisjaWZuZGVmIEI0ODAwCisjZGVm aW5lIEI0ODAwIDQ4MDAKKyNlbmRpZiAvKiBCNDgwMCAqLworI2lmbmRlZiBCOTYwMAorI2RlZmlu ZSBCOTYwMCA5NjAwCisjZW5kaWYgLyogQjk2MDAgKi8KKyNpZm5kZWYgQjE0NDAwCisjZGVmaW5l IEIxNDQwMCAxNDQwMAorI2VuZGlmIC8qIEIxNDQwMCAqLworI2lmbmRlZiBCMTkyMDAKKyNkZWZp bmUgQjE5MjAwIDE5MjAwCisjZW5kaWYgLyogQjE5MjAwICovCisjaWZuZGVmIEIyODgwMAorI2Rl ZmluZSBCMjg4MDAgMjg4MDAKKyNlbmRpZiAvKiBCMjg4MDAgKi8KKyNpZm5kZWYgQjM4NDAwCisj ZGVmaW5lIEIzODQwMCAzODQwMAorI2VuZGlmIC8qIEIzODQwMCAqLworI2lmbmRlZiBCNTc2MDAK KyNkZWZpbmUgQjU3NjAwIDU3NjAwCisjZW5kaWYgLyogQjU3NjAwICovCisjaWZuZGVmIEI3Njgw MAorI2RlZmluZSBCNzY4MDAgNzY4MDAKKyNlbmRpZiAvKiBCNzY4MDAgKi8KKyNpZm5kZWYgQjEx NTIwMAorI2RlZmluZSBCMTE1MjAwIDExNTIwMAorI2VuZGlmIC8qIEIxMTUyMDAgKi8KKyNpZm5k ZWYgQjIzMDQwMAorI2RlZmluZSBCMjMwNDAwIDIzMDQwMAorI2VuZGlmIC8qIEIyMzA0MDAgKi8K KyNpZm5kZWYgQjQ2MDgwMAorI2RlZmluZSBCNDYwODAwIDQ2MDgwMAorI2VuZGlmIC8qIEI0NjA4 MDAgKi8KKyNpZm5kZWYgQjkyMTYwMAorI2RlZmluZSBCOTIxNjAwIDkyMTYwMAorI2VuZGlmIC8q IEI5MjE2MDAgKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworCisvKiAgVCBUIFMgUyBQIEQgIC0tICBD aGVja3MgYW5kIHNldHMgdHJhbnNtaXNzaW9uIHJhdGUuICAqLworCisvKiAgQ2FsbCB3aXRoIHNw ZWVkIGluIGNoYXJhY3RlcnMgKG5vdCBiaXRzISkgcGVyIHNlY29uZC4gKi8KKy8qICBSZXR1cm5z IC0xIG9uIGZhaWx1cmUsIDAgaWYgaXQgZGlkIG5vdGhpbmcsIDEgaWYgaXQgY2hhbmdlZCB0aGUg c3BlZWQuICovCisKKyNpZmRlZiBVU0VUQ1NFVFNQRUVECisvKgorICBUaGUgdGNzZXRzcGVlZCgp IC8gdGNnZXRzcGVlZCgpIGludGVyZmFjZSBsZXRzIHlvdSBwYXNzIGFueSBudW1iZXIgYXQgYWxs CisgIHRvIGJlIHVzZWQgYXMgYSBzcGVlZCB0byBiZSBzZXQsIHJhdGhlciB0aGFuIGZvcmNpbmcg YSBjaG9pY2UgZnJvbSBhCisgIHByZWRlZmluZWQgbGlzdC4gIEl0IHNlZW1zIHRvIGJlIHBlY3Vs aWFyIHRvIFVuaXhXYXJlIDcuCisKKyAgVGhlc2UgYXJlIHRoZSBmdW5jdGlvbiBjb2RlcyB0byBi ZSBwYXNzZWQgdG8gdGNbZ3NdZXRzcGVlZCgpLAorICBidXQgZm9yIHNvbWUgcmVhc29uIHRoZXkg ZG9uJ3Qgc2VlbSB0byBiZSBwaWNrZWQgdXAgZnJvbSB0ZXJtaW9zLmguCisqLworI2lmbmRlZiBU Q1NfQUxMCisjZGVmaW5lIFRDU19BTEwgMAorI2VuZGlmIC8qIFRDU19BTEwgKi8KKyNpZm5kZWYg VENTX0lOCisjZGVmaW5lIFRDU19JTiAxCisjZW5kaWYgLyogVENTX0lOICovCisjaWZuZGVmIFRD U19PVVQKKyNkZWZpbmUgVENTX09VVCAyCisjZW5kaWYgLyogVENTX09VVCAqLworI2VuZGlmIC8q IFVTRVRDU0VUU1BFRUQgKi8KKworaW50Cit0dHNzcGQoY3BzKSBpbnQgY3BzOyB7CisgICAgaW50 IHg7CisjaWZkZWYgUE9TSVgKKy8qIFdhdGNoIG91dCwgc3BlZWRfdCBzaG91bGQgYmUgdW5zaWdu ZWQsIHNvIGRvbid0IGNvbXBhcmUgd2l0aCAtMSwgZXRjLi4uICovCisgICAgc3BlZWRfdAorI2Vs c2UKKyAgICBpbnQKKyNlbmRpZiAvKiBQT1NJWCAqLworICAgICAgcywgczI7CisgICAgaW50IG9r ID0gMTsJCQkJLyogU3BlZWQgY2hlY2sgcmVzdWx0LCBhc3N1bWUgb2sgKi8KKworI2lmZGVmIE9M SU5VWEhJU1BFRUQKKyAgICB1bnNpZ25lZCBpbnQgc3BkX2ZsYWdzID0gMDsKKyAgICBzdHJ1Y3Qg c2VyaWFsX3N0cnVjdCBzZXJpbmZvOworI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KKworICAg IGRlYnVnKEYxMDEsInR0c3NwZCBjcHMiLCIiLGNwcyk7CisgICAgZGVidWcoRjEwMSwidHRzc3Bk IHR0eWZkIiwiIix0dHlmZCk7CisgICAgZGVidWcoRjEwMSwidHRzc3BkIHhsb2NhbCIsIiIseGxv Y2FsKTsKKworICAgIGlmICh0dHlmZCA8IDAgfHwgeGxvY2FsID09IDApCS8qIERvbid0IHNldCBz cGVlZCBvbiBjb25zb2xlICovCisgICAgICByZXR1cm4oMCk7CisKKyNpZmRlZglORVRDT05OCisg ICAgaWYgKG5ldGNvbm4pIHsKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChpc3RuY29t cG9ydCgpKQorCSAgcmV0dXJuKHRuY19zZXRfYmF1ZChjcHMgKiAxMCkpOworICAgICAgICBlbHNl CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCXJldHVybigwKTsKKyAgfQorI2VuZGlmCS8qIE5F VENPTk4gKi8KKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oMCk7CisjZW5k aWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgaWYgKHR0cHR5KSByZXR1cm4oMCk7 CisjZW5kaWYgLyogTkVUUFRZICovCisKKyAgICBpZiAoY3BzIDwgMCkgcmV0dXJuKC0xKTsKKyAg ICBzID0gczIgPSAwOwkJCQkvKiBOQjogcyBhbmQgczIgbWlnaHQgYmUgdW5zaWduZWQgKi8KKwor I2lmZGVmIFVTRVRDU0VUU1BFRUQKKworICAgIHMgPSBjcHMgKiAxMEw7CisKKyAgICB4ID0gdGNn ZXRhdHRyKHR0eWZkLCZ0dGN1cik7CS8qIEdldCBjdXJyZW50IHNwZWVkICovCisgICAgZGVidWco RjEwMSwidHRzc3BkIHRjZ2V0YXR0ciIsIiIseCk7CisgICAgaWYgKHggPCAwKQorICAgICAgcmV0 dXJuKC0xKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgVENTRVRTUEVFRCBzcGVlZCIsIiIscyk7 CisKKyAgICBlcnJubyA9IDA7CisgICAgaWYgKHMgPT0gODg4MEwpIHsJCQkvKiA3NS8xMjAwIHNw bGl0IHNwZWVkIHJlcXVlc3RlZCAqLworCXRjc2V0c3BlZWQoVENTX0lOLCAmdHRjdXIsIDEyMDBM KTsKKwl0Y3NldHNwZWVkKFRDU19PVVQsICZ0dGN1ciwgNzVMKTsKKyAgICB9IGVsc2UKKyAgICAg IHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0Y3VyLCBzKTsJLyogUHV0IG5ldyBzcGVlZCBpbiBzdHJ1 Y3RzICovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZXJybm8gJiBkZWJsb2cpIHsKKwlkZWJ1ZyhG MTAxLCJ0dHNzcGQgVENTRVRTUEVFRCBlcnJubyIsIiIsZXJybm8pOworICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIHRjc2V0c3BlZWQoVENTX0FMTCwgJnR0 cmF3LCBzKTsKKyAgICB0Y3NldHNwZWVkKFRDU19BTEwsICZ0dHR2dCwgcyk7CisgICAgdGNzZXRz cGVlZChUQ1NfQUxMLCAmdHRvbGQsIHMpOworI2Vsc2UKKyAgICBpZiAocyA9PSA4ODgwTCkgewkJ CS8qIDc1LzEyMDAgc3BsaXQgc3BlZWQgcmVxdWVzdGVkICovCisJdGNzZXRzcGVlZChUQ1NfSU4s ICZ0dHJhdywgMTIwMEwpOworCXRjc2V0c3BlZWQoVENTX09VVCwgJnR0cmF3LCA3NUwpOworCXRj c2V0c3BlZWQoVENTX0lOLCAmdHR0dnQsIDEyMDBMKTsKKwl0Y3NldHNwZWVkKFRDU19PVVQsICZ0 dHR2dCwgNzVMKTsKKwl0Y3NldHNwZWVkKFRDU19JTiwgJnR0b2xkLCAxMjAwTCk7CisJdGNzZXRz cGVlZChUQ1NfT1VULCAmdHRvbGQsIDc1TCk7CisgICAgfSBlbHNlIHsKKwl0Y3NldHNwZWVkKFRD U19BTEwsICZ0dHJhdywgcyk7CisJdGNzZXRzcGVlZChUQ1NfQUxMLCAmdHR0dnQsIHMpOworCXRj c2V0c3BlZWQoVENTX0FMTCwgJnR0b2xkLCBzKTsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAq LworCisgICAgeCA9IHRjc2V0YXR0cih0dHlmZCxUQ1NBRFJBSU4sJnR0Y3VyKTsgLyogU2V0IHRo ZSBzcGVlZCAqLworICAgIGRlYnVnKEYxMDEsInR0c3NwZCB0Y3NldGF0dHIiLCIiLHgpOworICAg IGlmICh4IDwgMCkKKyAgICAgIHJldHVybigtMSk7CisKKyNlbHNlICAvKiBOb3QgVVNFVENTRVRT UEVFRCAqLworCisgICAgLyogRmlyc3QgY2hlY2sgdGhhdCB0aGUgZ2l2ZW4gc3BlZWQgaXMgdmFs aWQuICovCisKKyAgICBzd2l0Y2ggKGNwcykgeworI2lmbmRlZiBNSU5JWAorICAgICAgY2FzZSAw OiAgIHMgPSBCMDsgICAgYnJlYWs7CisgICAgICBjYXNlIDU6ICAgcyA9IEI1MDsgICBicmVhazsK KyAgICAgIGNhc2UgNzogICBzID0gQjc1OyAgIGJyZWFrOworI2VuZGlmIC8qIE1JTklYICovCisg ICAgICBjYXNlIDExOiAgcyA9IEIxMTA7ICBicmVhazsKKyNpZm5kZWYgTUlOSVgKKyAgICAgIGNh c2UgMTM6ICBzID0gQjEzNDsgIGJyZWFrOworICAgICAgY2FzZSAxNTogIHMgPSBCMTUwOyAgYnJl YWs7CisgICAgICBjYXNlIDIwOiAgcyA9IEIyMDA7ICBicmVhazsKKyNlbmRpZiAvKiBNSU5JWCAq LworICAgICAgY2FzZSAzMDogIHMgPSBCMzAwOyAgYnJlYWs7CisjaWZuZGVmIE1JTklYCisgICAg ICBjYXNlIDYwOiAgcyA9IEI2MDA7ICBicmVhazsKKyNlbmRpZiAvKiBNSU5JWCAqLworICAgICAg Y2FzZSAxMjA6IHMgPSBCMTIwMDsgYnJlYWs7CisjaWZuZGVmIE1JTklYCisgICAgICBjYXNlIDE4 MDogcyA9IEIxODAwOyBicmVhazsKKyNlbmRpZiAvKiBNSU5JWCAqLworICAgICAgY2FzZSAyNDA6 IHMgPSBCMjQwMDsgYnJlYWs7CisgICAgICBjYXNlIDQ4MDogcyA9IEI0ODAwOyBicmVhazsKKyNp Zm5kZWYgTUlOSVgKKyAgICAgIGNhc2UgODg4OiBzID0gQjc1OyBzMiA9IEIxMjAwOyBicmVhazsg LyogODg4ID0gNzUvMTIwMCBzcGxpdCBzcGVlZCAqLworI2VuZGlmIC8qIE1JTklYICovCisjaWZk ZWYgQjcyMDAKKyAgICAgIGNhc2UgNzIwOiBzID0gQjcyMDA7IGJyZWFrOworI2VuZGlmIC8qIEI3 MjAwICovCisgICAgICBjYXNlIDk2MDogcyA9IEI5NjAwOyBicmVhazsKKyNpZmRlZiBCMTQ0MDAK KyAgICAgIGNhc2UgMTQ0MDogcyA9IEIxNDQwMDsgYnJlYWs7CisjZW5kaWYgLyogQjE0NDAwICov CisjaWZkZWYgQjE5MjAwCisgICAgICBjYXNlIDE5MjA6IHMgPSBCMTkyMDA7IGJyZWFrOworI2Vs c2UKKyNpZmRlZiBFWFRBCisgICAgICBjYXNlIDE5MjA6IHMgPSBFWFRBOyBicmVhazsKKyNlbmRp ZiAvKiBFWFRBICovCisjZW5kaWYgLyogQjE5MjAwICovCisjaWZkZWYgQjI4ODAwCisgICAgICBj YXNlIDI4ODA6IHMgPSBCMjg4MDA7IGJyZWFrOworI2VuZGlmIC8qIEIyODgwMCAqLworI2lmZGVm IEIzODQwMAorICAgICAgY2FzZSAzODQwOiBzID0gQjM4NDAwOworI2lmZGVmIE9MSU5VWEhJU1BF RUQKKyAgICAgICAgc3BkX2ZsYWdzID0gfkFTWU5DX1NQRF9NQVNLOwkvKiBOb256ZXJvLCBidXQg emVybyBmbGFncyAqLworI2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KKwlicmVhazsKKyNlbHNl IC8qIEIzODQwMCBub3QgZGVmaW5lZC4uLiAqLworI2lmZGVmIEVYVEIKKyAgICAgIGNhc2UgMzg0 MDogcyA9IEVYVEI7IGJyZWFrOworI2VuZGlmIC8qIEVYVEIgKi8KKyNlbmRpZiAvKiBCMzg0MDAg Ki8KKworI2lmZGVmIEhQVVgKKyNpZmRlZiBfQjU3NjAwCisgICAgICBjYXNlIDU3NjA6IHMgPSBf QjU3NjAwOyBicmVhazsKKyNlbmRpZiAvKiBfQjU3NjAwICovCisjaWZkZWYgX0IxMTUyMDAKKyAg ICAgIGNhc2UgMTE1MjA6IHMgPSBfQjExNTIwMDsgYnJlYWs7CisjZW5kaWYgLyogX0IxMTUyMDAg Ki8KKyNlbHNlCisjaWZkZWYgT0xJTlVYSElTUEVFRAorLyoKKyAgVGhpcyBiaXQgZnJvbSA8Y2Fy bG9Ac2cudG4udHVkZWxmdC5ubD46CisgICJPbmx5IG5vdGUgdG8gbWFrZSBpcyBtYXliZSB0aGlz OiBXaGVuIHRoZSBBU1lOQ19TUERfQ1VTVCBmbGFncyBhcmUgc2V0IHRoZW4KKyAgc2V0dGluZyB0 aGUgc3BlZWQgdG8gMzg0MDAgd2lsbCBzZXQgdGhlIGN1c3RvbSBzcGVlZCAoYW5kIHR0Z3NwZCBy ZXR1cm5zCisgIDM4NDAwKSwgYnV0IHNwZWVkcyA1NzYwMCBhbmQgMTE1MjAwIHdvbid0IHdvcmsg YW55IG1vcmUgYmVjYXVzZSBJIGRpZG4ndAorICB3YW50IHRvIG1lc3MgdXAgdGhlIHNwZWVkIGZs YWdzIHdoZW4gc29tZW9uZSBpcyBkb2luZyBzb3BoaXN0aWNhdGVkIHN0dWZmCisgIGxpa2UgY3Vz dG9tIHNwZWVkcy4uLiIKKyovCisgICAgICBjYXNlIDU3NjA6IHMgPSBCMzg0MDA7IHNwZF9mbGFn cyA9IEFTWU5DX1NQRF9ISTsgYnJlYWs7CisgICAgICBjYXNlIDExNTIwOiBzID0gQjM4NDAwOyBz cGRfZmxhZ3MgPSBBU1lOQ19TUERfVkhJOyBicmVhazsKKyNlbHNlCisjaWZkZWYgQjU3NjAwCisg ICAgICBjYXNlIDU3NjA6IHMgPSBCNTc2MDA7IGJyZWFrOworI2VuZGlmIC8qIEI1NzYwMCAqLwor I2lmZGVmIEI3NjgwMAorICAgICAgY2FzZSA3NjgwOiBzID0gQjc2ODAwOyBicmVhazsKKyNlbmRp ZiAvKiBCNzY4MDAgKi8KKyNpZmRlZiBCMTE1MjAwCisgICAgICBjYXNlIDExNTIwOiBzID0gQjEx NTIwMDsgYnJlYWs7CisjZW5kaWYgLyogQjExNTIwMCAqLworI2VuZGlmIC8qIE9MSU5VWEhJU1BF RUQgKi8KKyNpZmRlZiBCMTUzNjAwCisgICAgICBjYXNlIDE1MzYwOiBzID0gQjE1MzYwMDsgYnJl YWs7CisjZW5kaWYgLyogQjE1MzYwMCAqLworI2lmZGVmIEIyMzA0MDAKKyAgICAgIGNhc2UgMjMw NDA6IHMgPSBCMjMwNDAwOyBicmVhazsKKyNlbmRpZiAvKiBCMjMwNDAwICovCisjaWZkZWYgQjMw NzIwMAorICAgICAgY2FzZSAzMDcyMDogcyA9IEIzMDcyMDA7IGJyZWFrOworI2VuZGlmIC8qIEIz MDcyMDAgKi8KKyNpZmRlZiBCNDYwODAwCisgICAgICBjYXNlIDQ2MDgwOiBzID0gQjQ2MDgwMDsg YnJlYWs7CisjZW5kaWYgLyogNDYwODAwICovCisjaWZkZWYgQjkyMTYwMAorICAgICAgY2FzZSA5 MjE2MDogcyA9IEI5MjE2MDA7IGJyZWFrOworI2VuZGlmIC8qIEI5MjE2MDAgKi8KKyNlbmRpZiAv KiBIUFVYICovCisgICAgICBkZWZhdWx0OgorCW9rID0gMDsJCQkJLyogR29vZCBzcGVlZCBub3Qg Zm91bmQsIHNvIG5vdCBvayAqLworCWJyZWFrOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ0dHNz cGQgb2siLCIiLG9rKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgcyIsIiIscyk7CisKKyAgICBp ZiAoIW9rKSB7CisJZGVidWcoRjEwMCwidHRzc3BkIGZhaWxzIiwiIiwwKTsKKwlyZXR1cm4oLTEp OworICAgIH0gZWxzZSB7CisJaWYgKCFzMikgczIgPSBzOwkJLyogU2V0IGlucHV0IHNwZWVkICov CisjaWZkZWYgUGxhbjkKKwlpZiAocDl0dHNzcGQoY3BzKSA8IDApCisJICByZXR1cm4oLTEpOwor I2Vsc2UKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKwl4ID0gdGNnZXRhdHRyKHR0eWZkLCZ0dGN1cik7 CS8qIEdldCBjdXJyZW50IHNwZWVkICovCisJZGVidWcoRjEwMSwidHRzc3BkIHRjZ2V0YXR0ciIs IiIseCk7CisJaWYgKHggPCAwKQorCSAgcmV0dXJuKC0xKTsKKyNpZmRlZiBPTElOVVhISVNQRUVE CisJZGVidWcoRjEwMSwidHRzc3BkIHNwZF9mbGFncyIsIiIsc3BkX2ZsYWdzKTsKKwlpZiAoc3Bk X2ZsYWdzICYmIHNwZF9mbGFncyAhPSBBU1lOQ19TUERfQ1VTVCkgeworCSAgICBpZiAoaW9jdGwo dHR5ZmQsIFRJT0NHU0VSSUFMLCAmc2VyaW5mbykgPCAwKSB7CisJCWRlYnVnKEYxMDAsInR0c3Nw ZDogVElPQ0dTRVJJQUwgZmFpbGVkIiwiIiwwKTsKKwkJcmV0dXJuKC0xKTsKKwkgICAgfSBlbHNl IGRlYnVnKEYxMDAsInR0c3NwZDogVElPQ0dTRVJJQUwgb2siLCIiLDApOworCSAgICBzZXJpbmZv LmZsYWdzICY9IH5BU1lOQ19TUERfTUFTSzsKKwkgICAgc2VyaW5mby5mbGFncyB8PSAoc3BkX2Zs YWdzICYgQVNZTkNfU1BEX01BU0spOworCSAgICBpZiAoaW9jdGwodHR5ZmQsIFRJT0NTU0VSSUFM LCAmc2VyaW5mbykgPCAwKQorCSAgICAgIHJldHVybigtMSk7CisJfQorI2VuZGlmIC8qIE9MSU5V WEhJU1BFRUQgKi8KKwljZnNldG9zcGVlZCgmdHRjdXIscyk7CisJY2ZzZXRpc3BlZWQoJnR0Y3Vy LHMyKTsKKwljZnNldG9zcGVlZCgmdHRyYXcscyk7CisJY2ZzZXRpc3BlZWQoJnR0cmF3LHMyKTsK KwljZnNldG9zcGVlZCgmdHR0dnQscyk7CisJY2ZzZXRpc3BlZWQoJnR0dHZ0LHMyKTsKKwljZnNl dG9zcGVlZCgmdHRvbGQscyk7CisJY2ZzZXRpc3BlZWQoJnR0b2xkLHMyKTsKKwl4ID0gdGNzZXRh dHRyKHR0eWZkLFRDU0FEUkFJTiwmdHRjdXIpOworCWRlYnVnKEYxMDEsInR0c3NwZCB0Y3NldGF0 dHIiLCIiLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKyNlbHNlCisjaWZkZWYgQVRUU1YK KwlpZiAoY3BzID09IDg4OCkgcmV0dXJuKC0xKTsJLyogTm8gc3BsaXQgc3BlZWRzLCBzb3JyeS4g Ki8KKwl4ID0gaW9jdGwodHR5ZmQsVENHRVRBLCZ0dGN1cik7CisJZGVidWcoRjEwMSwidHRzc3Bk IFRDR0VUQSBpb2N0bCIsIiIseCk7CisJaWYgKHggPCAwKSByZXR1cm4oLTEpOworCXR0Y3VyLmNf Y2ZsYWcgJj0gfkNCQVVEOworCXR0Y3VyLmNfY2ZsYWcgfD0gczsKKwl0dHR2dC5jX2NmbGFnICY9 IH5DQkFVRDsKKwl0dHR2dC5jX2NmbGFnIHw9IHM7CisJdHRyYXcuY19jZmxhZyAmPSB+Q0JBVUQ7 CisJdHRyYXcuY19jZmxhZyB8PSBzOworCXR0b2xkLmNfY2ZsYWcgJj0gfkNCQVVEOworCXR0b2xk LmNfY2ZsYWcgfD0gczsKKwl4ID0gaW9jdGwodHR5ZmQsVENTRVRBVywmdHRjdXIpOworCWRlYnVn KEYxMDEsInR0c3NwZCBUQ1NFVEFXIGlvY3RsIiwiIix4KTsKKwlpZiAoeCA8IDApIHJldHVybigt MSk7CisjZWxzZQorI2lmZGVmIEJFTExWMTAKKwl4ID0gaW9jdGwodHR5ZmQsVElPQ0dERVYsJnRk Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHNzcGQgVElPQ0dERVYgaW9jdGwiLCIiLHgpOworCWlmICh4 IDwgMCkgcmV0dXJuKC0xKTsKKwl0ZGN1ci5pc3BlZWQgPSBzMjsKKwl0ZGN1ci5vc3BlZWQgPSBz OworCWVycm5vID0gMDsKKwlvayA9IGlvY3RsKHR0eWZkLFRJT0NTREVWLCZ0ZGN1cik7CisJZGVi dWcoRjEwMSwidHRzc3BkIEJFTExWMTAgaW9jdGwiLCIiLG9rKTsKKwlpZiAob2sgPCAwKSB7CisJ ICAgIHBlcnJvcih0dG5tc3YpOworCSAgICBkZWJ1ZyhGMTAxLCJ0dHNzcGQgQkVMTFYxMCBlcnJu byIsIiIsb2spOworCSAgICByZXR1cm4oLTEpOworCX0KKyNlbHNlCisJeCA9IGd0dHkodHR5ZmQs JnR0Y3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dHNzcGQgZ3R0eSIsIiIseCk7CisJaWYgKHggPCAwKSBy ZXR1cm4oLTEpOworCXR0Y3VyLnNnX29zcGVlZCA9IHM7IHR0Y3VyLnNnX2lzcGVlZCA9IHMyOwor CXR0dHZ0LnNnX29zcGVlZCA9IHM7IHR0dHZ0LnNnX2lzcGVlZCA9IHMyOworCXR0cmF3LnNnX29z cGVlZCA9IHM7IHR0cmF3LnNnX2lzcGVlZCA9IHMyOworCXR0b2xkLnNnX29zcGVlZCA9IHM7IHR0 b2xkLnNnX2lzcGVlZCA9IHMyOworCXggPSBzdHR5KHR0eWZkLCZ0dGN1cik7CisJZGVidWcoRjEw MSwidHRzc3BkIHN0dHkiLCIiLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKyNlbmRpZiAv KiBCRUxMVjEwICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVgg Ki8KKyNlbmRpZiAvKiBQbGFuOSAqLworICAgIH0KKyAgICByZXR1cm4oMSk7CQkJCS8qIFJldHVy biAxID0gc3VjY2Vzcy4gKi8KKyNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCit9CisKKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisKKy8qIEMgTyBOIEcgUyBQIEQgIC0gIEdldCBzcGVlZCBvZiBjb25z b2xlIHRlcm1pbmFsICAqLworCitsb25nCitjb25nc3BkKCkgeworLyoKKyAgVGhpcyBpcyBhIGRp c2d1c3RpbmcgaGFjay4gIFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byBwYXNz IGFuCisgIGFyZ3VtZW50IHRvIHR0Z3NwZCgpLCBidXQgdGhlbiB3ZSdkIG5lZWQgdG8gY2hhbmdl IHRoZSBLZXJtaXQgQVBJIGFuZAorICBhbGwgb2YgdGhlIGNrP3Rpby5jIG1vZHVsZXMuICAoQ3Vy cmVudGx5IHVzZWQgb25seSBmb3IgcmxvZ2luLikKKyovCisgICAgaW50IHQxOworICAgIGxvbmcg c3BkOworI2lmZGVmIE5FVENPTk4KKyAgICBpbnQgdDIgPSBuZXRjb25uOworICAgIG5ldGNvbm4g PSAwOworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyAgICB0MSA9IHR0eWZkOworICAgIHR0eWZkID0g LTE7CisgICAgc3BkID0gdHRnc3BkKCk7CisgICAgZGVidWcoRjEwMSwiY29uZ3NwZCIsIiIsc3Bk KTsKKyNpZmRlZiBORVRDT05OCisgICAgbmV0Y29ubiA9IHQyOworI2VuZGlmIC8qIE5FVENPTk4g Ki8KKyAgICB0dHlmZCA9IHQxOworICAgIHJldHVybihzcGQpOworfQorCisvKiAgVCBUIFMgUCBE IEwgSSBTIFQgIC0tIEdldCBsaXN0IG9mIHNlcmlhbCBzcGVlZHMgYWxsb3dlZCBvbiB0aGlzIHBs YXRmb3JtICovCisKKyNkZWZpbmUgTlNQRExJU1QgNjQKK3N0YXRpYyBsb25nIHNwZGxpc3RbTlNQ RExJU1RdOworLyoKKyAgQXMgd3JpdHRlbiwgdGhpcyBwaWNrcyB1cCB0aGUgc3BlZWRzIGtub3du IGF0IGNvbXBpbGUgdGltZSwgYW5kIHRodXMKKyAgYXBwbHkgdG8gdGhlIHN5c3RlbSB3aGVyZSBD LUtlcm1pdCB3YXMgYnVpbHQsIHJhdGhlciB0aGFuIHRvIHRoZSBvbmUgd2hlcmUKKyAgaXQgaXMg cnVubmluZy4gIFN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCBhcmUgYWx3YXlzIHdlbGNvbWUu CisqLworbG9uZyAqCit0dHNwZGxpc3QoKSB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsg aSA8IE5TUERMSVNUOyBpKyspCS8qIEluaXRpYWxpemUgdGhlIGxpc3QgKi8KKyAgICAgIHNwZGxp c3RbaV0gPSAtMUw7CisgICAgaSA9IDE7CisKKyNpZmRlZiBVU0VUQ1NFVFNQRUVECQkJLyogTm8g d2F5IHRvIGZpbmQgb3V0IHdoYXQncyBsZWdhbCAqLworICAgIGRlYnVnKEYxMDAsInR0c3BkbGlz dCBVU0VUQ1NFVFNQRUVEIiwiIiwwKTsKKyAgICBzcGRsaXN0W2krK10gPSA1MEw7CisjaWZuZGVm IFVXNworICAgIHNwZGxpc3RbaSsrXSA9IDc1TDsKKyNlbmRpZiAvKiBVVzcgKi8KKyAgICBzcGRs aXN0W2krK10gPSAxMTBMOworI2lmbmRlZiBVVzcKKyAgICBzcGRsaXN0W2krK10gPSAxMzRMOwor I2VuZGlmIC8qIFVXNyAqLworICAgIHNwZGxpc3RbaSsrXSA9IDE1MEw7CisgICAgc3BkbGlzdFtp KytdID0gMjAwTDsKKyAgICBzcGRsaXN0W2krK10gPSAzMDBMOworICAgIHNwZGxpc3RbaSsrXSA9 IDYwMEw7CisgICAgc3BkbGlzdFtpKytdID0gMTIwMEw7CisgICAgc3BkbGlzdFtpKytdID0gMTgw MEw7CisgICAgc3BkbGlzdFtpKytdID0gMjQwMEw7CisgICAgc3BkbGlzdFtpKytdID0gNDgwMEw7 CisgICAgc3BkbGlzdFtpKytdID0gODg4MEw7CisgICAgc3BkbGlzdFtpKytdID0gOTYwMEw7Cisg ICAgc3BkbGlzdFtpKytdID0gMTQ0MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDE5MjAwTDsKKyAg ICBzcGRsaXN0W2krK10gPSAyODgwMEw7CisjaWZuZGVmIFVXNworICAgIHNwZGxpc3RbaSsrXSA9 IDMzNjAwTDsKKyNlbmRpZiAvKiBVVzcgKi8KKyAgICBzcGRsaXN0W2krK10gPSAzODQwMEw7Cisg ICAgc3BkbGlzdFtpKytdID0gNTc2MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDc2ODAwTDsKKyAg ICBzcGRsaXN0W2krK10gPSAxMTUyMDBMOworI2lmbmRlZiBVVzcKKyAgICBzcGRsaXN0W2krK10g PSAxNTM2MDBMOworICAgIHNwZGxpc3RbaSsrXSA9IDIzMDQwMEw7CisgICAgc3BkbGlzdFtpKytd ID0gMzA3MjAwTDsKKyAgICBzcGRsaXN0W2krK10gPSA0NjA4MDBMOworICAgIHNwZGxpc3RbaSsr XSA9IDkyMTYwMEw7CisjZW5kaWYgLyogVVc3ICovCisKKyNlbHNlICAvKiBVU0VUQ1NFVFNQRUVE ICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ0dHNwZGxpc3Qgbm8gVVNFVENTRVRTUEVFRCIsIiIsMCk7 CisKKyNpZmRlZiBCNTAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjUwIiwiIixCNTApOwor ICAgIHNwZGxpc3RbaSsrXSA9IDUwTDsKKyNlbmRpZiAvKiBCNTAgKi8KKyNpZmRlZiBCNzUKKyAg ICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjc1IiwiIixCNzUpOworICAgIHNwZGxpc3RbaSsrXSA9 IDc1TDsKKyNlbmRpZiAvKiBCNzUgKi8KKyNpZmRlZiBCMTEwCisgICAgZGVidWcoRjEwMSwidHRz cGRsaXN0IEIxMTAiLCIiLEIxMTApOworICAgIHNwZGxpc3RbaSsrXSA9IDExMEw7CisjZW5kaWYg LyogQjExMCAqLworI2lmZGVmIEIxMzQKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjEzNCIs IiIsQjEzNCk7CisgICAgc3BkbGlzdFtpKytdID0gMTM0TDsKKyNlbmRpZiAvKiBCMTM0ICovCisj aWZkZWYgQjE1MAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTUwIiwiIixCMTUwKTsKKyAg ICBzcGRsaXN0W2krK10gPSAxNTBMOworI2VuZGlmIC8qIEIxNTAgKi8KKyNpZmRlZiBCMjAwCisg ICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIyMDAiLCIiLEIyMDApOworICAgIHNwZGxpc3RbaSsr XSA9IDIwMEw7CisjZW5kaWYgLyogQjIwMCAqLworI2lmZGVmIEIzMDAKKyAgICBkZWJ1ZyhGMTAx LCJ0dHNwZGxpc3QgQjMwMCIsIiIsQjMwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMzAwTDsKKyNl bmRpZiAvKiBCMzAwICovCisjaWZkZWYgQjYwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBC NjAwIiwiIixCNjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSA2MDBMOworI2VuZGlmIC8qIEI2MDAg Ki8KKyNpZmRlZiBCMTIwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTIwMCIsIiIsQjEy MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDEyMDBMOworI2VuZGlmIC8qIEIxMjAwICovCisjaWZk ZWYgQjE4MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgQjE4MDAiLCIiLEIxODAwKTsKKyAg ICBzcGRsaXN0W2krK10gPSAxODAwTDsKKyNlbmRpZiAvKiBCMTgwMCAqLworI2lmZGVmIEIyNDAw CisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIyNDAwIiwiIixCMjQwMCk7CisgICAgc3BkbGlz dFtpKytdID0gMjQwMEw7CisjZW5kaWYgLyogQjI0MDAgKi8KKyNpZmRlZiBCNDgwMAorICAgIGRl YnVnKEYxMDEsInR0c3BkbGlzdCBCNDgwMCIsIiIsQjQ4MDApOworICAgIHNwZGxpc3RbaSsrXSA9 IDQ4MDBMOworI2VuZGlmIC8qIEI0ODAwICovCisjaWZkZWYgQjk2MDAKKyAgICBkZWJ1ZyhGMTAx LCJ0dHNwZGxpc3QgQjk2MDAiLCIiLEI5NjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSA5NjAwTDsK KyNlbmRpZiAvKiBCOTYwMCAqLworI2lmZGVmIEIxNDQwMAorICAgIGRlYnVnKEYxMDEsInR0c3Bk bGlzdCBCMTQ0MDAiLCIiLEIxNDQwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTQ0MDBMOworI2Vu ZGlmIC8qIEIxNDQwMCAqLworI2lmZGVmIEIxOTIwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBCMTkyMDAiLCIiLEIxOTIwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTkyMDBMOworI2Vsc2UK KyNpZmRlZiBFWFRBCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEVYVEEiLCIiLEVYVEEpOwor ICAgIHNwZGxpc3RbaSsrXSA9IDE5MjAwTDsKKyNlbmRpZiAvKiBFWFRBICovCisjZW5kaWYgLyog QjE5MjAwICovCisjaWZkZWYgQjI4ODAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIyODgw MCIsIiIsQjI4ODAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAyODgwMEw7CisjZW5kaWYgLyogQjI4 ODAwICovCisjaWZkZWYgQjMzNjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIzMzYwMCIs IiIsQjMzNjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAzMzYwMEw7CisjZW5kaWYgLyogQjMzNjAw ICovCisjaWZkZWYgQjM4NDAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEIzODQwMCIsIiIs QjM4NDAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAzODQwMEw7CisjZWxzZQorI2lmZGVmIEVYVEIK KyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3QgRVhUQiIsIiIsRVhUQik7CisgICAgc3BkbGlzdFtp KytdID0gMzg0MDBMOworI2VuZGlmIC8qIEVYVEIgKi8KKyNlbmRpZiAvKiBCMzg0MDAgKi8KKyNp ZmRlZiBfQjU3NjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IF9CNTc2MDAiLCIiLF9CNTc2 MDApOworICAgIHNwZGxpc3RbaSsrXSA9IDU3NjAwTDsKKyNlbHNlCisjaWZkZWYgQjU3NjAwCisg ICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IEI1NzYwMCIsIiIsQjU3NjAwKTsKKyAgICBzcGRsaXN0 W2krK10gPSA1NzYwMEw7CisjZW5kaWYgLyogQjU3NjAwICovCisjZW5kaWYgLyogX0I1NzYwMCAq LworI2lmZGVmIEI3NjgwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCNzY4MDAiLCIiLEI3 NjgwMCk7CisgICAgc3BkbGlzdFtpKytdID0gNzY4MDBMOworI2VuZGlmIC8qIEI3NjgwMCAqLwor I2lmZGVmIF9CMTE1MjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRsaXN0IF9CMTE1MjAwIiwiIixf QjExNTIwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTE1MjAwTDsKKyNlbHNlCisjaWZkZWYgQjEx NTIwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlzdCBCMTE1MjAwIiwiIixCMTE1MjAwKTsKKyAg ICBzcGRsaXN0W2krK10gPSAxMTUyMDBMOworI2VuZGlmIC8qIEIxMTUyMDAgKi8KKyNlbmRpZiAv KiBfQjExNTIwMCAqLworI2lmZGVmIEIxNTM2MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNwZGxpc3Qg QjE1MzYwMCIsIiIsQjE1MzYwMCk7CisgICAgc3BkbGlzdFtpKytdID0gMTUzNjAwTDsKKyNlbmRp ZiAvKiBCMTUzNjAwICovCisjaWZkZWYgQjIzMDQwMAorICAgIGRlYnVnKEYxMDEsInR0c3BkbGlz dCBCMjMwNDAwIiwiIixCMjMwNDAwKTsKKyAgICBzcGRsaXN0W2krK10gPSAyMzA0MDBMOworI2Vu ZGlmIC8qIEIyMzA0MDAgKi8KKyNpZmRlZiBCMzA3MjAwCisgICAgZGVidWcoRjEwMSwidHRzcGRs aXN0IEIzMDcyMDAiLCIiLEIzMDcyMDApOworICAgIHNwZGxpc3RbaSsrXSA9IDMwNzIwMEw7Cisj ZW5kaWYgLyogQjMwNzIwMCAqLworI2lmZGVmIEI0NjA4MDAKKyAgICBkZWJ1ZyhGMTAxLCJ0dHNw ZGxpc3QgQjQ2MDgwMCIsIiIsQjQ2MDgwMCk7CisgICAgc3BkbGlzdFtpKytdID0gNDYwODAwTDsK KyNlbmRpZiAvKiBCNDYwODAwICovCisjaWZkZWYgQjkyMTYwMAorICAgIGRlYnVnKEYxMDEsInR0 c3BkbGlzdCBCOTIxNjAwIiwiIixCOTIxNjAwKTsKKyAgICBzcGRsaXN0W2krK10gPSA5MjE2MDBM OworI2VuZGlmIC8qIEI5MjE2MDAgKi8KKyNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCisgICAg c3BkbGlzdFswXSA9IGkgLSAxOwkJCS8qIFJldHVybiBjb3VudCBpbiAwdGggZWxlbWVudCAqLwor ICAgIGRlYnVnKEYxMTEsInR0c3BkbGlzdCBzcGRsaXN0IiwiMCIsc3BkbGlzdFswXSk7CisgICAg cmV0dXJuKChsb25nICopc3BkbGlzdCk7Cit9CisKKy8qIFQgVCBHIFMgUCBEICAtICBHZXQgc3Bl ZWQgb2YgY3VycmVudGx5IHNlbGVjdGVkIHR0eSBsaW5lICAqLworCisvKgorICBVbnJlbGlhYmxl LiAgQWZ0ZXIgU0VUIExJTkUsIGl0IHJldHVybnMgYW4gYWN0dWFsIHNwZWVkLCBidXQgbm90IG5l Y2Vzc2FyaWx5CisgIHRoZSByZWFsIHNwZWVkLiAgT24gc29tZSBzeXN0ZW1zLCBpdCByZXR1cm5z IHRoZSBsaW5lJ3Mgbm9taW5hbCBzcGVlZCwgZnJvbQorICAvZXRjL3R0eXRhYi4gIEV2ZW4gaWYg eW91IFNFVCBTUEVFRCB0byBzb21ldGhpbmcgZWxzZSwgdGhpcyBmdW5jdGlvbiBtaWdodAorICBu b3Qgbm90aWNlLgorKi8KK2xvbmcKK3R0Z3NwZCgpIHsJCQkJLyogR2V0IGN1cnJlbnQgc2VyaWFs IGRldmljZSBzcGVlZCAqLworI2lmZGVmIE5PTE9DQUwKKyAgICByZXR1cm4oLTFMKTsKKyNlbHNl CisjaWZkZWYgUE9TSVgKKyAgICBzcGVlZF90CQkJCS8qIFNob3VsZCBiZSB1bnNpZ25lZCAqLwor I2Vsc2UKKyAgICBpbnQJCQkJCS8qIElzbid0IHVuc2lnbmVkICovCisjZW5kaWYgLyogUE9TSVgg Ki8KKyAgICAgIHM7CisgICAgaW50IHg7CisgICAgbG9uZyBzczsKKyNpZmRlZiBPTElOVVhISVNQ RUVECisgICAgdW5zaWduZWQgaW50IHNwZF9mbGFncyA9IDA7CisgICAgc3RydWN0IHNlcmlhbF9z dHJ1Y3Qgc2VyaW5mbzsKKyNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCisKKyNpZmRlZiBORVRD T05OCisgICAgaWYgKG5ldGNvbm4pIHsKKyNpZmRlZiBUTl9DT01QT1JUCisJaWYgKGlzdG5jb21w b3J0KCkpCisJICByZXR1cm4odG5jX2dldF9iYXVkKCkpOworCWVsc2UKKyNlbmRpZiAvKiBUTl9D T01QT1JUICovCisJICByZXR1cm4oLTEpOwkJCS8qIC0xIGlmIG5ldHdvcmsgY29ubmVjdGlvbiAq LworICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0 cGlwZSkgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAg ICBpZiAodHRwdHkpIHJldHVybigtMSk7CisjZW5kaWYgLyogTkVUUFRZICovCisKKyAgICBkZWJ1 ZyhGMTAxLCJ0dGdzcGQgdHR5ZmQiLCIiLHR0eWZkKTsKKworI2lmZGVmIFVTRVRDU0VUU1BFRUQK KworICAgIHggPSB0Y2dldGF0dHIodHR5ZmQsJnR0Y3VyKTsJLyogR2V0IGN1cnJlbnQgc3BlZWQg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgdGNnZXRhdHRyIiwiIix4KTsKKyAgICBpZiAoeCA8 IDApCisgICAgICByZXR1cm4oLTEpOworICAgIGVycm5vID0gMDsKKyAgICBzID0gdGNnZXRzcGVl ZChUQ1NfQUxMLCAmdHRjdXIpOworICAgIGRlYnVnKEYxMDEsInR0c3NwZCBUQ0dFVFNQRUVEIHNw ZWVkIiwiIixzKTsKKyAgICBpZiAocyA9PSAwKSB7CisJbG9uZyBzMSwgczI7CisJczEgPSB0Y2dl dHNwZWVkKFRDU19JTiwgJnR0Y3VyKTsKKwlzMiA9IHRjZ2V0c3BlZWQoVENTX09VVCwgJnR0Y3Vy KTsKKwlpZiAoczEgPT0gMTIwMEwgJiYgczIgPT0gNzVMKQorCSAgcmV0dXJuKDg4ODBMKTsKKyAg ICB9CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZXJybm8gJiBkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAx LCJ0dHNzcGQgVENHRVRTUEVFRCBlcnJubyIsIiIsZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBE RUJVRyAqLworICAgIHJldHVybihzKTsKKworI2Vsc2UgIC8qIE5vdCBVU0VUQ1NFVFNQRUVEICov CisKKyNpZmRlZiBQbGFuOQorICAgIGlmICh0dHlmZCA8IDApCisgICAgICBzcyA9IC0xOworICAg IGVsc2UKKyAgICAgIHNzID0gdHR5bGFzdHNwZWVkOworI2Vsc2UKKyNpZmRlZiBPTElOVVhISVNQ RUVECisgICAgZGVidWcoRjEwMCwidHRnc3BkIExpbnV4IE9MSU5VWEhJU1BFRUQiLCIiLDApOwor I2VuZGlmIC8qIE9MSU5VWEhJU1BFRUQgKi8KKworICAgIGlmICh0dHlmZCA8IDApIHsKKyNpZmRl ZiBCU0Q0NE9SUE9TSVgKKwlzID0gY2ZnZXRvc3BlZWQoJmNjb2xkKTsKKwlkZWJ1ZyhGMTAxLCJ0 dGdzcGQgY2ZnZXRvc3BlZWQgMSBQT1NJWCIsIiIscyk7CisjZWxzZQorI2lmZGVmIEFUVFNWCisJ cyA9IGNjb2xkLmNfY2ZsYWcgJiBDQkFVRDsKKwlkZWJ1ZyhGMTAxLCJ0dGdzcGQgY19jZmxhZyBD QkFVRCAxIEFUVFNWIiwiIixzKTsKKyNlbHNlCisJcyA9IGNjb2xkLnNnX29zcGVlZDsJCS8qIChv YnRhaW5lZCBieSBjb25nbSgpKSAqLworCWRlYnVnKEYxMDEsInR0Z3NwZCBzZ19vc3BlZWQgMSIs IiIscyk7CisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAvKiBCU0Q0NFBPU0lYICovCisKKyAg ICB9IGVsc2UgeworI2lmZGVmIEJTRDQ0T1JQT1NJWAorCWlmICh0Y2dldGF0dHIodHR5ZmQsJnR0 Y3VyKSA8IDApIHJldHVybigtMSk7CisJcyA9IGNmZ2V0b3NwZWVkKCZ0dGN1cik7CisJZGVidWco RjEwMSwidHRnc3BkIGNmZ2V0b3NwZWVkIDIgQlNET1JQT1NJWCIsIiIscyk7CisjaWZkZWYgT0xJ TlVYSElTUEVFRAorCWlmIChpb2N0bCh0dHlmZCxUSU9DR1NFUklBTCwmc2VyaW5mbykgPiAtMSkK KwkgIHNwZF9mbGFncyA9IHNlcmluZm8uZmxhZ3MgJiBBU1lOQ19TUERfTUFTSzsKKwlkZWJ1ZyhG MTAxLCJ0dGdzcGQgc3BkX2ZsYWdzIiwiIixzcGRfZmxhZ3MpOworI2VuZGlmIC8qIE9MSU5VWEhJ U1BFRUQgKi8KKyNlbHNlCisjaWZkZWYgQVRUU1YKKwl4ID0gaW9jdGwodHR5ZmQsVENHRVRBLCZ0 dGN1cik7CisJZGVidWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQVRUU1YgeCIsIiIseCk7CisJZGVi dWcoRjEwMSwidHRnc3BkIGlvY3RsIDIgQVRUU1YgZXJybm8iLCIiLGVycm5vKTsKKwlpZiAoeCA8 IDApIHJldHVybigtMSk7CisJcyA9IHR0Y3VyLmNfY2ZsYWcgJiBDQkFVRDsKKwlkZWJ1ZyhGMTAx LCJ0dGdzcGQgaW9jdGwgMiBBVFRTViBzcGVlZCIsIiIscyk7CisjZWxzZQorI2lmZGVmIEJFTExW MTAKKwl4ID0gaW9jdGwodHR5ZmQsVElPQ0dERVYsJnRkY3VyKTsKKwlkZWJ1ZyhGMTAxLCJ0dGdz cGQgaW9jdGwgMiBCRUxMVjEwIHgiLCIiLHgpOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlz ID0gdGRjdXIub3NwZWVkOworCWRlYnVnKEYxMDEsInR0Z3NwZCBpb2N0bCAyIEJFTExWMTAgc3Bl ZWQiLCIiLHMpOworI2Vsc2UKKwl4ID0gZ3R0eSh0dHlmZCwmdHRjdXIpOworCWRlYnVnKEYxMDEs InR0Z3NwZCBndHR5IDIgeCIsIiIseCk7CisJZGVidWcoRjEwMSwidHRnc3BkIGd0dHkgMiBlcnJu byIsIiIsZXJybm8pOworCWlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKwlzID0gdHRjdXIuc2dfb3Nw ZWVkOworCWRlYnVnKEYxMDEsInR0Z3NwZCBndHR5IDIgc3BlZWQiLCIiLHMpOworI2VuZGlmIC8q IEJFTExWMTAgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAq LworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdzcGQgY29kZSIsIiIscyk7CisjaWZkZWYgT0xJ TlVYSElTUEVFRAorICAgIGRlYnVnKEYxMDEsInR0Z3NwZCBzcGRfZmxhZ3MiLCIiLHNwZF9mbGFn cyk7CisjZW5kaWYgLyogT0xJTlVYSElTUEVFRCAqLworICAgIHN3aXRjaCAocykgeworI2lmZGVm IEIwCisgICAgICBjYXNlIEIwOiAgICBzcyA9IDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMCAqLwor CisjaWZuZGVmIE1JTklYCisvKgorIE1JTklYIGRlZmluZXMgdGhlIEJ4eCBzeW1ib2xzIHRvIGJl IGJwcy8xMDAsIHNvIEI1MD09Qjc1LCBCMTEwPT1CMTM0PT1CMTUwLAorIGV0YywgbWFraW5nIGZv ciBtYW55ICJkdXBsaWNhdGUgY2FzZSBpbiBzd2l0Y2giIGVycm9ycywgd2hpY2ggYXJlIGZhdGFs LgorKi8KKyNpZmRlZiBCNTAKKyAgICAgIGNhc2UgQjUwOiAgIHNzID0gNTBMOyBicmVhazsKKyNl bmRpZiAvKiBCNTAgKi8KKyNpZmRlZiBCNzUKKyAgICAgIGNhc2UgQjc1OiAgIHNzID0gNzVMOyBi cmVhazsKKyNlbmRpZiAvKiBCNzUgKi8KKyNlbmRpZiAvKiBNSU5JWCAqLworCisjaWZkZWYgQjEx MAorICAgICAgY2FzZSBCMTEwOiAgc3MgPSAxMTBMOyBicmVhazsKKyNlbmRpZiAvKiBCMTEwICov CisKKyNpZm5kZWYgTUlOSVgKKyNpZmRlZiBCMTM0CisgICAgICBjYXNlIEIxMzQ6ICBzcyA9IDEz NEw7IGJyZWFrOworI2VuZGlmIC8qIEIxMzQgKi8KKyNpZmRlZiBCMTUwCisgICAgICBjYXNlIEIx NTA6ICBzcyA9IDE1MEw7IGJyZWFrOworI2VuZGlmIC8qIEIxNTAgKi8KKyNlbmRpZiAvKiBNSU5J WCAqLworCisjaWZkZWYgQjIwMAorICAgICAgY2FzZSBCMjAwOiAgc3MgPSAyMDBMOyBicmVhazsK KyNlbmRpZiAvKiBCMjAwICovCisKKyNpZmRlZiBCMzAwCisgICAgICBjYXNlIEIzMDA6ICBzcyA9 IDMwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIzMDAgKi8KKworI2lmZGVmIEI2MDAKKyAgICAgIGNh c2UgQjYwMDogIHNzID0gNjAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjYwMCAqLworCisjaWZkZWYg QjEyMDAKKyAgICAgIGNhc2UgQjEyMDA6IHNzID0gMTIwMEw7IGJyZWFrOworI2VuZGlmIC8qIEIx MjAwICovCisKKyNpZmRlZiBCMTgwMAorICAgICAgY2FzZSBCMTgwMDogc3MgPSAxODAwTDsgYnJl YWs7CisjZW5kaWYgLyogQjE4MDAgKi8KKworI2lmZGVmIEIyNDAwCisgICAgICBjYXNlIEIyNDAw OiBzcyA9IDI0MDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMjQwMCAqLworCisjaWZkZWYgQjQ4MDAK KyAgICAgIGNhc2UgQjQ4MDA6IHNzID0gNDgwMEw7IGJyZWFrOworI2VuZGlmIC8qIEI0ODAwICov CisKKyNpZmRlZiBCNzIwMAorICAgICAgY2FzZSBCNzIwMDogc3MgPSA3MjAwTDsgYnJlYWs7Cisj ZW5kaWYgLyogQjcyMDAgKi8KKworI2lmZGVmIEI5NjAwCisgICAgICBjYXNlIEI5NjAwOiBzcyA9 IDk2MDBMOyBicmVhazsKKyNlbmRpZiAvKiBCOTYwMCAqLworCisjaWZkZWYgQjE5MjAwCisgICAg ICBjYXNlIEIxOTIwMDogc3MgPSAxOTIwMEw7IGJyZWFrOworI2Vsc2UKKyNpZmRlZiBFWFRBCisg ICAgICBjYXNlIEVYVEE6IHNzID0gMTkyMDBMOyBicmVhazsKKyNlbmRpZiAvKiBFWFRBICovCisj ZW5kaWYgLyogQjE5MjAwICovCisKKyNpZm5kZWYgTUlOSVgKKyNpZmRlZiBCMzg0MDAKKyAgICAg IGNhc2UgQjM4NDAwOgorICAgICAgICBzcyA9IDM4NDAwTDsKKyNpZmRlZiBPTElOVVhISVNQRUVE CisgICAgICAgIHN3aXRjaChzcGRfZmxhZ3MpIHsKKyAgICAgICAgICBjYXNlIEFTWU5DX1NQRF9I STogIHNzID0gIDU3NjAwTDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBBU1lOQ19TUERfVkhJOiBz cyA9IDExNTIwMEw7IGJyZWFrOworCX0KKyNlbmRpZiAvKiBPTElOVVhISVNQRUVEICovCisgICAg ICAgIGJyZWFrOworI2Vsc2UKKyNpZmRlZiBFWFRCCisgICAgICBjYXNlIEVYVEI6IHNzID0gMzg0 MDBMOyBicmVhazsKKyNlbmRpZiAvKiBFWFRCICovCisjZW5kaWYgLyogQjM4NDAwICovCisjZW5k aWYgLyogTUlOSVggKi8KKworI2lmZGVmIEhQVVgKKyNpZmRlZiBfQjU3NjAwCisgICAgICBjYXNl IF9CNTc2MDA6IHNzID0gNTc2MDBMOyBicmVhazsKKyNlbmRpZiAvKiBfQjU3NjAwICovCisjaWZk ZWYgX0IxMTUyMDAKKyAgICAgIGNhc2UgX0IxMTUyMDA6IHNzID0gMTE1MjAwTDsgYnJlYWs7Cisj ZW5kaWYgLyogX0IxMTUyMDAgKi8KKyNlbHNlCisjaWZkZWYgQjU3NjAwCisgICAgICBjYXNlIEI1 NzYwMDogc3MgPSA1NzYwMEw7IGJyZWFrOworI2VuZGlmIC8qIEI1NzYwMCAqLworI2lmZGVmIEI3 NjgwMAorICAgICAgY2FzZSBCNzY4MDA6IHNzID0gNzY4MDBMOyBicmVhazsKKyNlbmRpZiAvKiBC NzY4MDAgKi8KKyNpZmRlZiBCMTE1MjAwCisgICAgICBjYXNlIEIxMTUyMDA6IHNzID0gMTE1MjAw TDsgYnJlYWs7CisjZW5kaWYgLyogQjExNTIwMCAqLworI2lmZGVmIEIxNTM2MDAKKyAgICAgIGNh c2UgQjE1MzYwMDogc3MgPSAxNTM2MDBMOyBicmVhazsKKyNlbmRpZiAvKiBCMTUzNjAwICovCisj aWZkZWYgQjIzMDQwMAorICAgICAgY2FzZSBCMjMwNDAwOiBzcyA9IDIzMDQwMEw7IGJyZWFrOwor I2VuZGlmIC8qIEIyMzA0MDAgKi8KKyNpZmRlZiBCMzA3MjAwCisgICAgICBjYXNlIEIzMDcyMDA6 IHNzID0gMzA3MjAwTDsgYnJlYWs7CisjZW5kaWYgLyogQjMwNzIwMCAqLworI2lmZGVmIEI0NjA4 MDAKKyAgICAgIGNhc2UgQjQ2MDgwMDogc3MgPSA0NjA4MDBMOyBicmVhazsKKyNlbmRpZiAvKiBC NDYwODAwICovCisjZW5kaWYgLyogSFBVWCAqLworI2lmZGVmIEI5MjE2MDAKKyAgICAgIGNhc2Ug QjkyMTYwMDogc3MgPSA5MjE2MDBMOyBicmVhazsKKyNlbmRpZiAvKiBCOTIxNjAwICovCisgICAg ICBkZWZhdWx0OgorCXNzID0gLTE7IGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBQbGFuOSAqLwor ICAgIGRlYnVnKEYxMDEsInR0Z3NwZCBzcGVlZCIsIiIsc3MpOworICAgIHJldHVybihzcyk7CisK KyNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworfQorI2lm ZGVmIE1JTklYMgkJCQkvKiBBbm90aGVyIGhhY2sgYWxlcnQgKi8KKyNkZWZpbmUgTUlOSVgKKyNl bmRpZiAvKiBNSU5JWDIgKi8KKworLyoKKyAgRklPTlJFQUQgZGF0YSB0eXBlLi4uICBUaGlzIGhh cyBiZWVuIGRlZmluZWQgYXMgImxvbmciIGZvciBtYW55LCBtYW55CisgIHllYXJzLCBhbmQgaXQg d29ya2VkIE9LIHVudGlsIDY0LWJpdCBwbGF0Zm9ybXMgYXBwZWFyZWQuICBUaHVzIHdlIHVzZQor ICBpbnQgZm9yIDY0LWJpdCBwbGF0Zm9ybXMsIGJ1dCBrZWVwIGxvbmcgZm9yIHRoZSBvdGhlcnMu ICBJZiB3ZSBjaGFuZ2VkCisgIHRoZSBkZWZhdWx0IFBFRUtUWVBFIHRvIGludCwgdGhpcyB3b3Vs ZCBwcm9iYWJseSBicmVhayAxNi1iaXQgYnVpbGRzCisgIChub3RlIHRoYXQgc2l6ZW9mKGxvbmcp ID09IHNpemVvZihpbnQpIG9uIG1vc3QgMzItYml0IHBsYXRmb3JtcyksIG1hbnkKKyAgb2Ygd2hp Y2ggd2UgaGF2ZSBubyB3YXkgb2YgdGVzdGluZyBhbnkgbW9yZS4gIFRoZXJlZm9yZSwgZG8gbm90 IGNoYW5nZQorICB0aGUgZGVmYXVsdCBkZWZpbml0aW9uIG9mIFBFRUtUWVBFIC0tIG9ubHkgYWRk IGV4Y2VwdGlvbnMgdG8gaXQgYXMgbmVlZGVkLgorKi8KKyNpZmRlZiBDT0hFUkVOVAorI2lmZGVm IEZJT05SRUFECisjdW5kZWYgRklPTlJFQUQKKyNlbmRpZiAvKiBGSU9OUkVBRCAqLworLyogI2Rl ZmluZSBGSU9OUkVBRCBUSU9DUVVFUlkgKi8KKy8qICNkZWZpbmUgUEVFS1RZUEUgaW50ICovCisj ZWxzZSAgLyogTm90IENPSEVSRU5ULi4uICovCisKKyNpZmRlZiBPU0YzMgkJCQkvKiBEaWdpdGFs IFVOSVggMy4yIG9yIGhpZ2hlciAqLworI2RlZmluZSBQRUVLVFlQRSBpbnQKKyNlbHNlCisjZGVm aW5lIFBFRUtUWVBFIGxvbmcJCQkvKiBFbHNld2hlcmUgKHNlZSBub3RlcyBhYm92ZSkgKi8KKyNl bmRpZiAvKiBPU0YzMiAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisKKy8qIGNrdW15ci5jIGJ5 IEtyaXN0b2ZmZXIgRXJpa3Nzb24sIHNrZUBwa21hYi5zZSwgMTUgTWFyIDE5OTAuICovCisKKyNp ZmRlZiBNWVJFQUQKKworLyogUHJpdmF0ZSBidWZmZXIgZm9yIG15cmVhZCgpIGFuZCBpdHMgY29t cGFuaW9ucy4gIE5vdCBmb3IgdXNlIGJ5IGFueXRoaW5nCisgKiBlbHNlLiAgdHRmbHVpKCkgaXMg YWxsb3dlZCB0byByZXNldCB0aGVtIHRvIGluaXRpYWwgdmFsdWVzLiAgdHRjaGsoKSBpcworICog YWxsb3dlZCB0byByZWFkIG15X2NvdW50LgorICoKKyAqIG15X2l0ZW0gaXMgYW4gaW5kZXggaW50 byBteWJ1ZltdLiAgSW5jcmVtZW50IGl0ICpiZWZvcmUqIHJlYWRpbmcgbXlidWZbXS4KKyAqCisg KiBBIGdsb2JhbCBwYXJpdHkgbWFzayB2YXJpYWJsZSBjb3VsZCBiZSB1c2VmdWwgdG9vLiAgV2Ug Y291bGQgdXNlIGl0IHRvCisgKiBsZXQgbXlyZWFkKCkgc3RyaXAgdGhlIHBhcml0eSBvbiBpdHMg b3duLCBpbnN0ZWFkIG9mIHN0cmlwcGluZyBzaWduCisgKiBiaXRzIGFzIGl0IGRvZXMgbm93Lgor ICovCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgTVlCVUZMRU4gMzI3NjgKKyNlbHNlCisjaWZk ZWYgcGRwMTEKKyNkZWZpbmUgTVlCVUZMRU4gMjU2CisjZWxzZQorI2RlZmluZSBNWUJVRkxFTiAx MDI0CisjZW5kaWYgLyogcGRwMTEgKi8KKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworCisjaWZkZWYg QU5ZWDI1CisjdW5kZWYgTVlCVUZMRU4KKyNkZWZpbmUgTVlCVUZMRU4gMjU2CisvKgorICBPbiBY LjI1IGNvbm5lY3Rpb25zLCB0aGVyZSBpcyBhbiBleHRyYSBjb250cm9sIGJ5dGUgYXQgdGhlIGJl Z2lubmluZy4KKyovCitzdGF0aWMgQ0hBUiB4MjVidWZbTVlCVUZMRU4rMV07CQkvKiBDb21tdW5p Y2F0aW9uIGRldmljZSBpbnB1dCBidWZmZXIgKi8KK3N0YXRpYyBDSEFSICAqbXlidWYgPSB4MjVi dWYrMTsKKyNlbHNlCitzdGF0aWMgQ0hBUiBteWJ1ZltNWUJVRkxFTl07CisjZW5kaWYgLyogQU5Z WDI1ICovCisKK3N0YXRpYyBpbnQgbXlfY291bnQgPSAwOwkJLyogTnVtYmVyIG9mIGNoYXJzIHN0 aWxsIGluIG15YnVmICovCitzdGF0aWMgaW50IG15X2l0ZW0gPSAtMTsJCS8qIExhc3QgaW5kZXgg cmVhZCBmcm9tIG15YnVmW10gICAqLworCisvKiAgVCBUIFAgRSBFIEsgIC0tICBQZWVrIGludG8g b3VyIGludGVybmFsIGNvbW11bmljYXRpb25zIGlucHV0IGJ1ZmZlcnMuICovCisKKy8qCisgIE5P VEU6IFRoaXMgcm91dGluZSBpcyBwZWN1bGlhciB0byBVTklYLCBhbmQgaXMgdXNlZCBvbmx5IGJ5 IHRoZQorICBzZWxlY3QoKS1iYXNlZCBDT05ORUNUIG1vZHVsZSwgY2t1Y25zLmMuICBJdCBuZWVk IG5vdCBiZSByZXBsaWNhdGVkIGluCisgIHRoZSBjaz90aW8uYyBvZiBvdGhlciBwbGF0Zm9ybXMu CisqLworaW50Cit0dHBlZWsoKSB7CisjaWZkZWYgVFRMRUJVRgorICAgIGludCByYyA9IDA7Cisg ICAgaWYgKHR0cHVzaCA+PSAwKQorICAgICAgcmMrKzsKKyAgICByYyArPSBsZV9pbmJ1ZigpOwor ICAgIGlmIChyYyA+IDApCisgICAgICByZXR1cm4ocmMpOworICAgIGVsc2UKKyNlbmRpZiAvKiBU VExFQlVGICovCisKKyNpZmRlZiBNWVJFQUQKKyAgICByZXR1cm4obXlfY291bnQpOworI2Vsc2UK KyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTVlSRUFEICovCit9CisKKy8qIG15cmVhZCgpIC0t IEVmZmljaWVudCByZWFkIG9mIG9uZSBjaGFyYWN0ZXIgZnJvbSBjb21tdW5pY2F0aW9ucyBsaW5l LgorICoKKyAqIE5PVEU6IG15cmVhZCgpIGFuZCBpdHMgaGVscGVycyBteWdldGJ1ZigpIGFuZCBt eWZpbGxidWYoKSByZXR1cm4gcmF3CisgKiBieXRlcyBmcm9tIGNvbm5lY3Rpb24sIHNvIHdoZW4g dGhlIGNvbm5lY3Rpb24gaXMgZW5jcnlwdGVkLCB0aGVzZSBieXRlcworICogbXVzdCBiZSBkZWNy eXB0ZWQuCisgKgorICogVXNlcyBhIHByaXZhdGUgYnVmZmVyIHRvIG1pbmltaXplIHRoZSBudW1i ZXIgb2YgZXhwZW5zaXZlIHJlYWQoKSBzeXN0ZW0KKyAqIGNhbGxzLiAgRXNzZW50aWFsbHkgcGVy Zm9ybXMgdGhlIGVxdWl2YWxlbnQgb2YgcmVhZCgpIG9mIDEgY2hhcmFjdGVyLCB3aGljaAorICog aXMgdGhlbiByZXR1cm5lZC4gIEJ5IHJlYWRpbmcgYWxsIGF2YWlsYWJsZSBpbnB1dCBmcm9tIHRo ZSBzeXN0ZW0gYnVmZmVycworICogdG8gdGhlIHByaXZhdGUgYnVmZmVyIGluIG9uZSBjaHVuaywg YW5kIHRoZW4gd29ya2luZyBmcm9tIHRoaXMgYnVmZmVyLCB0aGUKKyAqIG51bWJlciBvZiBzeXN0 ZW0gY2FsbHMgaXMgcmVkdWNlZCBpbiBhbnkgY2FzZSB3aGVyZSBtb3JlIHRoYW4gb25lIGNoYXJh Y3RlcgorICogYXJyaXZlcyBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIHByZXZpb3VzIGNo dW5rLCBmb3IgaW5zdGFuY2UgaGlnaAorICogYmF1ZCByYXRlcyBvciBuZXR3b3JrIHR5cGUgY29u bmVjdGlvbnMgd2hlcmUgaW5wdXQgYXJyaXZlcyBpbiBwYWNrZXRzLgorICogSWYgdGhlIHRpbWUg bmVlZGVkIGZvciBhIHJlYWQoKSBzeXN0ZW0gY2FsbCBhcHByb2FjaGVzIHRoZSB0aW1lIGZvciBt b3JlCisgKiB0aGFuIG9uZSBjaGFyYWN0ZXIgdG8gYXJyaXZlLCB0aGVuIHRoaXMgbWVjaGFuaXNt IGF1dG9tYXRpY2FsbHkgY29tcGVuc2F0ZXMKKyAqIGZvciB0aGF0IGJ5IHBlcmZvcm1pbmcgYmln Z2VyIHJlYWQoKXMgbGVzcyBmcmVxdWVudGx5LiAgSWYgdGhlIHN5c3RlbSBsb2FkCisgKiBpcyBo aWdoLCB0aGUgc2FtZSBtZWNoYW5pc20gY29tcGVuc2F0ZXMgZm9yIHRoYXQgdG9vLgorICoKKyAq IG15cmVhZCgpIGlzIGEgbWFjcm8gdGhhdCByZXR1cm5zIHRoZSBuZXh0IGNoYXJhY3RlciBmcm9t IHRoZSBidWZmZXIuICBJZiB0aGUKKyAqIGJ1ZmZlciBpcyBlbXB0eSwgbXlnZXRidWYoKSBpcyBj YWxsZWQuICBTZWUgbXlnZXRidWYoKSBmb3IgcG9zc2libGUgZXJyb3IKKyAqIHJldHVybnMuCisg KgorICogVGhpcyBzaG91bGQgYmUgZWZmaWNpZW50IGVub3VnaCBmb3IgYW55IG9uZS1jaGFyYWN0 ZXItYXQtYS10aW1lIGxvb3BzLgorICogRm9yIGV2ZW4gYmV0dGVyIGVmZmljaWVuY3kgeW91IG1p Z2h0IHVzZSBtZW1jcHkoKS9iY29weSgpIG9yIHN1Y2ggYmV0d2VlbgorICogYnVmZmVycyAoc2lu Y2UgdGhleSBhcmUgb2Z0ZW4gYmV0dGVyIG9wdGltaXplZCBmb3IgY29weWluZyksIGJ1dCBpdCBt YXkgbm90CisgKiBiZSB3b3J0aCBpdCBpZiB5b3UgaGF2ZSB0byB0YWtlIGFuIGV4dHJhIHBhc3Mg b3ZlciB0aGUgYnVmZmVyIHRvIHN0cmlwCisgKiBwYXJpdHkgYW5kIGNoZWNrIGZvciBDVFJMLUMg YW55d2F5LgorICoKKyAqIE5vdGUgdGhhdCBpZiB5b3UgaGF2ZSBiZWVuIHVzaW5nIG15cmVhZCgp IGZyb20gYW5vdGhlciBwcm9ncmFtIG1vZHVsZSwgeW91CisgKiBtYXkgaGF2ZSBzb21lIHRyb3Vi bGUgYWNjZXNzaW5nIHRoaXMgbWFjcm8gdmVyc2lvbiBhbmQgdGhlIHByaXZhdGUgdmFyaWFibGVz CisgKiBpdCB1c2VzLiAgSW4gdGhhdCBjYXNlLCBqdXN0IGFkZCBhIGZ1bmN0aW9uIGluIHRoaXMg bW9kdWxlLCB0aGF0IGludm9rZXMgdGhlCisgKiBtYWNyby4KKyAqLworI2RlZmluZSBteXJlYWQo KSAoLS1teV9jb3VudCA8IDAgPyBteWdldGJ1ZigpIDogMjU1ICYgKGludClteWJ1ZlsrK215X2l0 ZW1dKQorCisvKiBTcGVjaWZpY2F0aW9uOiBQdXNoIGJhY2sgdXAgdG8gb25lIGNoYXJhY3RlciBv bnRvIG15cmVhZCgpJ3MgcXVldWUuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbjogUHVzaCBi YWNrIGNoYXJhY3RlcnMgaW50byBteWJ1Zi4gQXQgbGVhc3Qgb25lIGNoYXJhY3RlcgorICogbXVz dCBoYXZlIGJlZW4gcmVhZCB0aHJvdWdoIG15cmVhZCgpIGJlZm9yZSBteXVucmQoKSBtYXkgYmUg dXNlZC4gIEFmdGVyCisgKiBFT0Ygb3IgcmVhZCBlcnJvciwgYWdhaW4sIG15dW5yZCgpIGNhbiBu b3QgYmUgdXNlZC4gIFNvbWV0aW1lcyBtb3JlIHRoYW4KKyAqIG9uZSBjaGFyYWN0ZXIgY2FuIGJl IHB1c2hlZCBiYWNrLCBidXQgb25seSBvbmUgY2hhcmFjdGVyIGlzIGd1YXJhbnRlZWQuCisgKiBT aW5jZSBhIHByZXZpb3VzIG15cmVhZCgpIG11c3QgaGF2ZSByZWFkIGl0cyBjaGFyYWN0ZXIgb3V0 IG9mIG15YnVmW10sCisgKiB0aGF0IGd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3Ig YXQgbGVhc3Qgb25lIGNoYXJhY3Rlci4gIElmIHB1c2gKKyAqIGJhY2sgd2FzIHJlYWxseSBuZWVk ZWQgYWZ0ZXIgRU9GLCBhIHNtYWxsIGFkZGl0aW9uIGNvdWxkIHByb3ZpZGUgdGhhdC4KKyAqCisg KiBBcyBvZiAwMi8yMDA3IG15dW5yZCgpIGlzIHVzZWQgYnkgdHRpbmwoKS4KKyAqLworVk9JRAor I2lmZGVmIENLX0FOU0lDCitteXVucmQoQ0hBUiBjaCkKKyNlbHNlCitteXVucmQoY2gpIENIQVIg Y2g7CisjZW5kaWYJLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAobXlfaXRlbSA+PSAwKSB7CisJ bXlidWZbbXlfaXRlbS0tXSA9IGNoOworCSsrbXlfY291bnQ7CisgICAgfQorfQorCisvKiAgVCBU IFAgVSBTIEggQiBBIEMgSyAgLS0gIFB1dCBuIGJ5dGVzIGJhY2sgaW50byB0aGUgbXlyZWFkIGJ1 ZmZlciAqLworCitzdGF0aWMgQ0hBUiAqIHB1c2hidWYgPSBOVUxMOworLyogc3RhdGljIGludCBw dXNoZWQgPSAwOyAqLworCitpbnQKK3R0cHVzaGJhY2socyxuKSBDSEFSICogczsgaW50IG47IHsK KyAgICBkZWJ1ZyhGMTAxLCJ0dHB1c2hiYWNrIG4iLCIiLG4pOworICAgIGlmIChwdXNoYnVmIHx8 IG4gPiBNWUJVRkxFTiB8fCBuIDwgMSkKKyAgICAgIHJldHVybigtMSk7CisgICAgZGVidWcoRjEw MSwidHRwdXNoYmFjayBteV9jb3VudCIsIiIsbXlfY291bnQpOworICAgIGlmIChteV9jb3VudCA+ IDApIHsKKwlpZiAoIShwdXNoYnVmID0gKENIQVIgKiltYWxsb2MobisxKSkpCisJICByZXR1cm4o LTEpOworCW1lbWNweShwdXNoYnVmLG15YnVmLG15X2NvdW50KTsKKwkvKiBwdXNoZWQgPSBteV9j b3VudDsgKi8gLyogKHNldCBidXQgbmV2ZXIgdXNlZCkgKi8KKyAgICB9CisgICAgbWVtY3B5KG15 YnVmLHMsbik7CisgICAgbXlfY291bnQgPSBuOworICAgIG15X2l0ZW0gPSAtMTsKKyAgICByZXR1 cm4oMCk7Cit9CisKKy8qIG15Z2V0YnVmKCkgLS0gRmlsbCBidWZmZXIgZm9yIG15cmVhZCgpIGFu ZCByZXR1cm4gZmlyc3QgY2hhcmFjdGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgd2hhdCBt eXJlYWQoKSB1c2VzIHdoZW4gaXQgY2FuJ3QgZ2V0IHRoZSBuZXh0IGNoYXJhY3RlcgorICogZGly ZWN0bHkgZnJvbSBpdHMgYnVmZmVyLiAgRmlyc3QsIGl0IGNhbGxzIGEgc3lzdGVtIGRlcGVuZGVu dCBteWZpbGxidWYoKQorICogdG8gcmVhZCBhdCBsZWFzdCBvbmUgbmV3IGNoYXJhY3RlciBpbnRv IHRoZSBidWZmZXIsIGFuZCB0aGVuIGl0IHJldHVybnMKKyAqIHRoZSBmaXJzdCBjaGFyYWN0ZXIg anVzdCBhcyBteXJlYWQoKSB3b3VsZCBoYXZlIGRvbmUuICBUaGlzIGZ1bmN0aW9uIGFsc28KKyAq IGlzIHJlc3BvbnNpYmxlIGZvciBhbGwgZXJyb3IgY29uZGl0aW9ucyB0aGF0IG15cmVhZCgpIGNh biBpbmRpY2F0ZS4KKyAqCisgKiBSZXR1cm5zOiBXaGVuIE9LCT0+IGEgcG9zaXRpdmUgY2hhcmFj dGVyLCAwIG9yIGdyZWF0ZXIuCisgKgkgICAgV2hlbiBFT0YJPT4gLTIuCisgKgkgICAgV2hlbiBl cnJvcgk9PiAtMywgZXJyb3IgY29kZSBpbiBlcnJuby4KKyAqCisgKiBPbGRlciBteXJlYWQoKXMg YWRkaXRpb25hbGx5IHJldHVybmVkIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlcmUgd2FzIG5vdGhp bmcKKyAqIHRvIHJlYWQsIHVwb24gd2hpY2ggdGhlIGNhbGxlciB3b3VsZCBjYWxsIG15cmVhZCgp IGFnYWluIHVudGlsIGl0IGdvdAorICogc29tZXRoaW5nLiAgVGhlIG5ldyBteXJlYWQoKS9teWdl dGJ1ZigpIGFsd2F5cyBnZXRzIHNvbWV0aGluZy4gIElmIGl0CisgKiBkb2Vzbid0LCB0aGVuIG1h a2UgaXQgZG8gc28hICBBbnkgcHJvZ3JhbSB0aGF0IGFjdHVhbGx5IGRlcGVuZHMgb24gdGhlIG9s ZAorICogYmVoYXZpb3VyIHdpbGwgYnJlYWsuCisgKgorICogVGhlIG9sZGVyIHZlcnNpb24gYWxz byB1c2VkIHRvIHJldHVybiAtMiBib3RoIGZvciBFT0YgYW5kIG90aGVyIGVycm9ycywKKyAqIGFu ZCB1c2VkIHRvIHNldCBlcnJubyB0byA5OTk5IG9uIEVPRi4gIFRoZSBlcnJubyBzdHVmZiBpcyBn b25lLCBFT0YgYW5kCisgKiBvdGhlciBlcnJvcnMgbm93IHJldHVybiBkaWZmZXJlbnQgcmVzdWx0 cywgYWx0aG91Z2ggS2VybWl0IGN1cnJlbnRseSBuZXZlcgorICogY2hlY2tzIHRvIHNlZSB3aGlj aCBpdCB3YXMuICBJdCBqdXN0IGRpc2Nvbm5lY3RzIGluIGJvdGggY2FzZXMuCisgKgorICogS2Vy bWl0IGxldHMgdGhlIHVzZXIgdXNlIHRoZSBxdWl0IGtleSB0byBwZXJmb3JtIHNvbWUgc3BlY2lh bCBjb21tYW5kcworICogZHVyaW5nIGZpbGUgdHJhbnNmZXIuICBUaGlzIGNhdXNlcyByZWFkKCks IGFuZCB0aHVzIGFsc28gbXlnZXRidWYoKSwgdG8KKyAqIGZpbmlzaCB3aXRob3V0IHJlYWRpbmcg YW55dGhpbmcgYW5kIHJldHVybiB0aGUgRUlOVFIgZXJyb3IuICBUaGlzIHNob3VsZAorICogYmUg Y2hlY2tlZCBieSB0aGUgY2FsbGVyLiAgTXlnZXRidWYoKSBjb3VsZCByZXRyeSB0aGUgcmVhZCgp IG9uIEVJTlRSLAorICogYnV0IGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVhZCwgdGhpcyBjb3Vs ZCBkZWxheSBLZXJtaXQncyByZWFjdGlvbiB0bworICogdGhlIGNvbW1hbmQsIGFuZCBtYWtlIEtl cm1pdCBhcHBlYXIgdW5yZXNwb25zaXZlLgorICoKKyAqIFRoZSBkZWJ1ZygpIGNhbGwgc2hvdWxk IGJlIHJlbW92ZWQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuCisgKi8KK2ludAorbXlnZXRidWYo KSB7CisgICAgaW50IHg7CisgICAgZXJybm8gPSAwOworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZyAmJiBteV9jb3VudCA+IDApCisgICAgICBkZWJ1ZyhGMTAxLCJteWdldGJ1ZiBJTVBST1BF UkxZIENBTExFRCB3aXRoIG15X2NvdW50IiwiIixteV9jb3VudCk7CisjZW5kaWYgLyogREVCVUcg Ki8KKyAgICBpZiAobXlfY291bnQgPD0gMCkKKyAgICAgIG15X2NvdW50ID0gbXlmaWxsYnVmKCk7 CisKKyNpZmRlZiBERUJVRworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoZGVibG9nKSBkZWJ1ZyhG MTAxLCAibXlnZXRidWYgcmVhZCIsICIiLCBteV9jb3VudCk7CisjZWxzZSAvKiBDT01NRU5UICov CisgICAgY2toZXhkdW1wKCJteWdldGJ1ZiByZWFkIiwgbXlidWYsIG15X2NvdW50KTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogREVCVUcgKi8KKyAgICB4ID0gbXlfY291bnQ7Cisg ICAgaWYgKG15X2NvdW50IDw9IDApIHsKKwlteV9jb3VudCA9IDA7CisJbXlfaXRlbSA9IC0xOwor CWRlYnVnKEYxMDEsIm15Z2V0YnVmIGVycm5vIiwiIixlcnJubyk7CisjaWZkZWYgVENQU09DS0VU CisJaWYgKG5ldGNvbm4gJiYgdHRuZXQgPT0gTkVUX1RDUEIgJiYgZXJybm8gIT0gMCkgeworCSAg ICBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKwkJZGVidWcoRjEwMSwibXlnZXRidWYgVENQIGVycm9y IiwiIixlcnJubyk7CisJCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBjb25uZWN0aW9uLiAqLwor CSAgICB9CisJICAgIHJldHVybigtMyk7CisJfQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCWlm ICghbmV0Y29ubiAmJiB4bG9jYWwgJiYgZXJybm8pIHsKKwkgICAgaWYgKGVycm5vICE9IEVJTlRS KSB7CisJCWRlYnVnKEYxMDEsIm15Z2V0YnVmIFNFUklBTCBlcnJvciIsIiIsZXJybm8pOworCQl4 ID0gLTM7CisJCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBjb25uZWN0aW9uLiAqLworCSAgICB9 CisJfQorCXJldHVybigoeCA8IDApID8gLTMgOiAtMik7CisgICAgfQorICAgIC0tbXlfY291bnQ7 CisgICAgcmV0dXJuKCh1bnNpZ25lZCkoMHhmZiAmIG15YnVmW215X2l0ZW0gPSAwXSkpOworfQor CisvKiBteWZpbGxidWYoKToKKyAqIFN5c3RlbS1kZXBlbmRlbnQgcmVhZCgpIGludG8gbXlidWZb XSwgYXMgbWFueSBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLgorICoKKyAqIFJldHVybnM6IE9LID0+ IG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIGFsd2F5cyBtb3JlIHRoYW4gemVyby4KKyAqICAg ICAgICAgIEVPRiA9PiAwCisgKiAgICAgICAgICBFcnJvciA9PiAtMSwgZXJyb3IgY29kZSBpbiBl cnJuby4KKyAqCisgKiBJZiB0aGVyZSBpcyBpbnB1dCBhdmFpbGFibGUgaW4gdGhlIHN5c3RlbSdz IGJ1ZmZlcnMsIGFsbCBvZiBpdCBzaG91bGQgYmUKKyAqIHJlYWQgaW50byBteWJ1ZltdIGFuZCB0 aGUgZnVuY3Rpb24gcmV0dXJuIGltbWVkaWF0ZWx5LiAgSWYgbm8gaW5wdXQgaXMKKyAqIGF2YWls YWJsZSwgaXQgc2hvdWxkIHdhaXQgZm9yIGEgY2hhcmFjdGVyIHRvIGFycml2ZSwgYW5kIHJldHVy biB3aXRoIHRoYXQKKyAqIG9uZSBpbiBteWJ1ZltdIGFzIHNvb24gYXMgcG9zc2libGUuICBJdCBt YXkgd2FpdCBzb21ld2hhdCBwYXN0IHRoZSBmaXJzdAorICogY2hhcmFjdGVyLCBidXQgYmUgYXdh cmUgdGhhdCBhbnkgc3VjaCBkZWxheSBsZW5ndGhlbnMgdGhlIHBhY2tldCB0dXJuYXJvdW5kCisg KiB0aW1lIGR1cmluZyBrZXJtaXQgZmlsZSB0cmFuc2ZlcnMuICBTaG91bGQgbmV2ZXIgcmV0dXJu IHdpdGggemVybyBjaGFyYWN0ZXJzCisgKiB1bmxlc3MgRU9GIG9yIGlycmVjb3ZlcmFibGUgcmVh ZCBlcnJvci4KKyAqCisgKiBDb3JyZWN0IGZ1bmN0aW9uaW5nIGRlcGVuZHMgb24gdGhlIGNvcnJl Y3QgdHR5IHBhcmFtZXRlcnMgYmVpbmcgdXNlZC4KKyAqIEJldHRlciBjb250cm9sIG9mIGN1cnJl bnQgcGFyYW1ldGVycyBpcyByZXF1aXJlZCB0aGFuIG1heSBoYXZlIGJlZW4gdGhlCisgKiBjYXNl IGluIG9sZGVyIEtlcm1pdCByZWxlYXNlcy4gIEZvciBpbnN0YW5jZSwgT19OREVMQVkgKG9yIGVx dWl2YWxlbnQpIGNhbgorICogbm8gbG9uZ2VyIGJlIHNvbWV0aW1lcyBvZmYgYW5kIHNvbWV0aW1l cyBvbiBsaWtlIGl0IHVzZWQgdG8sIHVubGVzcyBhCisgKiBzcGVjaWFsIG15ZmlsbGJ1ZigpIGlz IHdyaXR0ZW4gdG8gaGFuZGxlIHRoYXQuICBPdGhlcndpc2UgdGhlIG9yZGluYXJ5CisgKiBteWZp bGxidWYoKXMgbWF5IHRoaW5rIHRoZXkgaGF2ZSBjb21lIHRvIEVPRi4KKyAqCisgKiBJZiB5b3Vy IHN5c3RlbSBoYXMgYSBmYWNpbGl0eSB0byBkaXJlY3RseSBwZXJmb3JtIHRoZSBmdW5jdGlvbmlu ZyBvZgorICogbXlmaWxsYnVmKCksIHRoZW4gdXNlIGl0LiAgSWYgdGhlIHN5c3RlbSBjYW4gdGVs bCB5b3UgaG93IG1hbnkgY2hhcmFjdGVycworICogYXJlIGF2YWlsYWJsZSBpbiBpdHMgYnVmZmVy cywgdGhlbiByZWFkIHRoYXQgYW1vdW50IChidXQgbm90IGxlc3MgdGhhbiAxKS4KKyAqIElmIHRo ZSBzeXN0ZW0gY2FuIHJldHVybiBhIHNwZWNpYWwgaW5kaWNhdGlvbiB3aGVuIHlvdSB0cnkgdG8g cmVhZCB3aXRob3V0CisgKiBhbnl0aGluZyB0byByZWFkLCB3aGlsZSBhbGxvd2luZyB5b3UgdG8g cmVhZCBhbGwgdGhlcmUgaXMgd2hlbiB0aGVyZSBpcworICogc29tZXRoaW5nLCB5b3UgbWF5IGxv b3AgdW50aWwgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlYWQsIGJ1dCBwcm9iYWJseSB0aGF0Cisg KiBpcyBub3QgZ29vZCBmb3IgdGhlIHN5c3RlbSBsb2FkLgorICovCisKKyNpZmRlZiBTVk9SUE9T SVgKKwkvKiBUaGlzIGlzIGZvciBTeXN0ZW0gSUlJL1Ygd2l0aCBWTUlOPjAsIFZUSU1FPTAgYW5k IE9fTkRFTEFZIG9mZiwKKwkgKiBhbmQgQ0xPQ0FMIHNldCBhbnkgd2F5IHlvdSBsaWtlLiAgVGhp cyB3YXksIHJlYWQoKSB3aWxsIGRvIGV4YWN0bHkKKwkgKiB3aGF0IGlzIHJlcXVpcmVkIGJ5IG15 ZmlsbGJ1ZigpOiBJZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBidWZmZXJzCisJICogb2YgdGhlIE8u Uy4sIGFsbCBhdmFpbGFibGUgZGF0YSBpcyByZWFkIGludG8gbXlidWYsIHVwIHRvIHRoZSBzaXpl CisJICogb2YgbXlidWYuICBJZiB0aGVyZSBpcyBub25lLCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRv IGFycml2ZSBpcworCSAqIGF3YWl0ZWQgYW5kIHJldHVybmVkLgorCSAqLworaW50CitteWZpbGxi dWYoKSB7CisgICAgaW50IGZkLCBuOworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisg ICAgICBmZCA9IGZkaW47CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQg PSB0dHlmZDsKKworI2lmZGVmIHN4YUU1MAorICAgIC8qIEZyb20gUy4gRGV6YXdhIGF0IEZ1amlm aWxtIGluIEphcGFuLiAgSSBkb24ndCBrbm93IHdoeSB0aGlzIGlzICovCisgICAgLyogbmVjZXNz YXJ5IGZvciB0aGUgc3hhIEU1MCwgYnV0IGl0IGlzLiAqLworICAgIHJldHVybiByZWFkKGZkLCBt eWJ1ZiwgMjU1KTsKKyNlbHNlCisjaWZkZWYgQkVPU09SQkVCT1gKKyAgICB3aGlsZSAoMSkgewor I2lmZGVmIE5FVENPTk4KKyAgICAgICAgaWYgKG5ldGNvbm4pIHsKKyAgICAgICAgICAgIG4gPSBu ZXR4aW4oc2l6ZW9mKG15YnVmKSwgKGNoYXIgKilteWJ1Zik7CisgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJCRUJPWCBTVk9SUE9TSVggbmV0d29yayBteWZpbGxidWYiLCIiLG4pOworCX0KKyAgICAg ICAgZWxzZQorI2VuZGlmIC8qIE5FVENPTk4gKi8KKwkgIG4gPSByZWFkKGZkLCBteWJ1Ziwgc2l6 ZW9mKG15YnVmKSk7CisJZGVidWcoRjEwMSwiQkVCT1ggU1ZPUlBPU0lYIG5vdG5ldCBteWZpbGxi dWYiLCIiLG4pOworICAgICAgICBpZiAobiA+IDApCisJICByZXR1cm4obik7CisgICAgICAgIHNu b296ZSgxMDAwLjApOworICAgIH0KKyNlbHNlIC8qIEJFT1NPUkJFQk9YICovCisgICAgZXJybm8g PSAwOworICAgIC8qIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYgY2FsbGluZyByZWFk KCkgZmQiLCIiLGZkKTsgKi8KKyNpZmRlZiBJQk1YMjUKKyAgICBpZiAobmV0Y29ubiAmJiAobmV0 dHlwZSA9PSBORVRfSVgyNSkpIHsKKwkvKiBjYW4ndCB1c2Ugc2l6ZW9mIGJlY2F1c2UgbXlidWYg aXMgYSBwb2ludGVyLCBhbmQgbm90IGFuIGFycmF5ISAqLworCW4gPSB4MjV4aW4oIE1ZQlVGTEVO LCBteWJ1ZiApOworICAgIH0gZWxzZQorI2VuZGlmIC8qIElCTVgyNSAqLworCisjaWZkZWYgQ0tf U1NMCisgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgeworCSAg aW50IGVycm9yLCBuID0gMDsKKwkgIGRlYnVnKEYxMDAsIm15ZmlsbGJ1ZiBjYWxsaW5nIFNTTF9y ZWFkKCkgZmQiLCIiLDApOworCSAgd2hpbGUgKG4gPT0gMCkgeworCSAgICAgIGlmIChzc2xfYWN0 aXZlX2ZsYWcpCisgICAgICAgICAgICAgICAgbiA9IFNTTF9yZWFkKHNzbF9jb24sIChjaGFyICop bXlidWYsIHNpemVvZihteWJ1ZikpOworCSAgICAgIGVsc2UgaWYgKHRsc19hY3RpdmVfZmxhZykK KyAgICAgICAgICAgICAgICBuID0gU1NMX3JlYWQodGxzX2NvbiwgKGNoYXIgKilteWJ1Ziwgc2l6 ZW9mKG15YnVmKSk7CisgICAgICAgICAgICAgIGVsc2UKKwkJYnJlYWs7CisJICAgICAgc3dpdGNo IChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sbikpIHsKKwkJ Y2FzZSBTU0xfRVJST1JfTk9ORToKKwkJICBpZiAobiA+IDApCisgICAgICAgICAgICAgICAgICAg IHJldHVybihuKTsKKwkJICBpZiAobiA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybigt Mik7CisJCSAgbXNsZWVwKDUwKTsKKwkJICBicmVhazsKKwkJY2FzZSBTU0xfRVJST1JfV0FOVF9X UklURToKKwkJY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorCQkgIHJldHVybigtMSk7CisJCWNh c2UgU1NMX0VSUk9SX1NZU0NBTEw6CisJCSAgaWYgKG4gIT0gMCkKKwkJICAgIHJldHVybigtMSk7 CisJCWNhc2UgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVA6CisJCWNhc2UgU1NMX0VSUk9SX1NT TDoKKwkJY2FzZSBTU0xfRVJST1JfWkVST19SRVRVUk46CisJCWRlZmF1bHQ6CisJCSAgdHRjbG9z KDApOworCQkgIHJldHVybigtMyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisj ZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBLUkI0CisjaWZk ZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKKwlkZWJ1ZyhG MTAxLCJteWZpbGxidWYgY2FsbGluZyBrcmI0X2Rlc19yZWFkKCkgZmQiLCIiLHR0eWZkKTsKKyAg ICAgICAgaWYgKChuID0ga3JiNF9kZXNfcmVhZCh0dHlmZCwoY2hhciAqKW15YnVmLHNpemVvZiht eWJ1ZikpKSA8IDApCisJICByZXR1cm4oLTMpOworICAgICAgICBlbHNlCisJICByZXR1cm4obik7 CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVm IEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVMT0dJTikg eworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIGtyYjVfZGVzX3JlYWQoKSBmZCIsIiIs dHR5ZmQpOworICAgICAgICBpZiAoKG4gPSBrcmI1X2Rlc19yZWFkKHR0eWZkLChjaGFyICopbXli dWYsc2l6ZW9mKG15YnVmKSwwKSkgPCAwKQorCSAgcmV0dXJuKC0zKTsKKyAgICAgICAgZWxzZQor CSAgcmV0dXJuKG4pOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIEtSQjVf VTJVCisgICAgaWYgKHR0bnByb3RvID09IE5QX0s1VTJVKSB7CisJZGVidWcoRjEwMSwibXlmaWxs YnVmIGNhbGxpbmcga3JiNV91MnVfcmVhZCgpIGZkIiwiIix0dHlmZCk7CisgICAgICAgIGlmICgo biA9IGtyYjVfdTJ1X3JlYWQodHR5ZmQsKGNoYXIgKilteWJ1ZixzaXplb2YobXlidWYpKSkgPCAw KQorCSAgcmV0dXJuKC0zKTsKKyAgICAgICAgZWxzZQorCSAgcmV0dXJuKG4pOworICAgIH0KKyNl bmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJC RVJPUyAqLworCisjaWZkZWYgTkVUUFRZCisjaWZkZWYgSEFWRV9QVFlUUkFQCisgICAgLyogU3Bl Y2lhbCBoYW5kbGluZyBmb3IgSFAtVVggcHR5IGkvbyAqLworICBwdHlyZWFkOgorICAgIGlmICh0 dHB0eSAmJiBwdHlfdHJhcF9wZW5kaW5nKHR0eWZkKSA+IDApIHsKKwlkZWJ1ZyhGMTAxLCJteWZp bGxidWYgY2FsbGluZyBwdHlfdHJhcF9oYW5kbGVyKCkgZmQiLCIiLHR0eWZkKTsKKyAgICAgICAg aWYgKHB0eV90cmFwX2hhbmRsZXIodHR5ZmQpID4gMCkgeworICAgICAgICAgICAgdHRjbG9zKDAp OworICAgICAgICAgICAgcmV0dXJuKC0zKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBI QVZFX1BUWVRSQVAgKi8KKyNlbmRpZiAvKiBORVRQVFkgKi8KKyAgICBkZWJ1ZyhGMTAxLCJteWZp bGxidWYgY2FsbGluZyByZWFkKCkgZmQiLCIiLHR0eWZkKTsKKyAgICBuID0gcmVhZChmZCwgbXli dWYsIHNpemVvZihteWJ1ZikpOworICAgIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYg cmVhZCIsIiIsbik7CisgICAgZGVidWcoRjEwMSwiU1ZPUlBPU0lYIG15ZmlsbGJ1ZiBlcnJubyIs IiIsZXJybm8pOworICAgIGRlYnVnKEYxMDEsIlNWT1JQT1NJWCBteWZpbGxidWYgdHRjYXJyIiwi Iix0dGNhcnIpOworICAgIGlmIChuIDwgMSkgeworI2lmZGVmIE5FVFBUWQorI2lmZGVmIEhBVkVf UFRZVFJBUAorICAgICAgICAvKiBXaGVuIHdlIGhhdmUgYSBQVFkgdHJhcCBpbiBwbGFjZSB0aGUg Y29ubmVjdGlvbiBjYW5ub3QgKi8KKyAgICAgICAgLyogYmUgY2xvc2VkIHVudGlsIHRoZSB0cmFw IHJlY2VpdmVzIGEgY2xvc2UgaW5kaWNhdGlvbi4gICovCisgICAgICAgIGlmIChuID09IDAgJiYg dHRwdHkpCisgICAgICAgICAgICBnb3RvIHB0eXJlYWQ7CisjZW5kaWYgLyogSEFWRV9QVFlUUkFQ ICovCisjZW5kaWYgLyogTkVUUFRZICovCisgICAgICAgIHJldHVybigtMyk7CisgICAgfQorICAg IHJldHVybihuKTsKKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworI2VuZGlmIC8qIHN4YUU1MCAq LworfQorCisjZWxzZSAvKiBub3QgQVQmVCBvciBQT1NJWCAqLworCisjaWZkZWYgYWVnaXMKKwkv KiBUaGlzIGlzIHF1b3RlZCBmcm9tIHRoZSBvbGQgbXlyZWFkKCkuICBUaGUgc2VtYW50aWNzIHNl ZW0gdG8gYmUKKwkgKiBhbHJpZ2h0LCBidXQgbWF5YmUgZXJybm8gd291bGQgbm90IG5lZWQgdG8g YmUgc2V0IGV2ZW4gd2hlbgorCSAqIHRoZXJlIGlzIG5vIGVycm9yPyAgSSBkb24ndCBrbm93IGFl Z2lzLgorCSAqLworaW50CitteWZpbGxidWYoKSB7CisgICAgaW50IGNvdW50OworI2lmZGVmIE5F VENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZkaW47CisgICAgZWxzZQorI2VuZGlm IC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0dHlmZDsKKworICAgIGNvdW50ID0gaW9zXyRnZXQo KHNob3J0KWZkLCBpb3NfJGNvbmRfb3B0LCBteWJ1ZiwgMjU2TCwgc3QpOworICAgIGVycm5vID0g RUlPOworICAgIGlmIChzdC5hbGwgPT0gaW9zXyRnZXRfY29uZGl0aW9uYWxfZmFpbGVkKSAvKiBn ZXQgYXQgbGVhc3Qgb25lICovCisgICAgICBjb3VudCA9IGlvc18kZ2V0KChzaG9ydClmZCwgMCwg bXlidWYsIDFMLCBzdCk7CisgICAgaWYgKHN0LmFsbCA9PSBpb3NfJGVuZF9vZl9maWxlKQorICAg ICAgcmV0dXJuKC0zKTsKKyAgICBlbHNlIGlmIChzdC5hbGwgIT0gc3RhdHVzXyRvaykgeworCWVy cm5vID0gRUlPOworCXJldHVybigtMSk7CisgICAgfQorICAgIHJldHVybihjb3VudCA+IDAgPyBj b3VudCA6IC0zKTsKK30KKyNlbHNlIC8qICFhZWdpcyAqLworCisjaWZkZWYgRklPTlJFQUQKKwkv KiBUaGlzIGlzIGZvciBzeXN0ZW1zIHdpdGggRklPTlJFQUQuICBGSU9OUkVBRCByZXR1cm5zIHRo ZSBudW1iZXIKKwkgKiBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4gSWYgbm9u ZSBhcmUgYXZhaWxhYmxlLCB3YWl0CisJICogdW50aWwgc29tZXRoaW5nIGFycml2ZXMsIG90aGVy d2lzZSByZXR1cm4gYWxsIHRoZXJlIGlzLgorCSAqLworaW50CitteWZpbGxidWYoKSB7CisgICAg UEVFS1RZUEUgYXZhaWwgPSAwOworICAgIGludCB4LCBmZDsKKyNpZmRlZiBORVRDTUQKKyAgICBp ZiAodHRwaXBlKQorICAgICAgZmQgPSBmZGluOworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQg Ki8KKyAgICAgIGZkID0gdHR5ZmQ7CisKKyNpZmRlZiBTVU5YMjUKKy8qCisgIFN1bkxpbmsgWC4y NSBzdXBwb3J0IGluIHRoaXMgcm91dGluZSBmcm9tIFN0ZWZhYW4gQS4gRWVja2VscywgRXVyb3N0 YXQgKENFQykuCisgIERlcGVuZHMgb24gU3VuT1MgaGF2aW5nIEZJT05SRUFELCBub3QgYmVjYXVz ZSB3ZSB1c2UgaXQsIGJ1dCBqdXN0IHNvIHRoaXMKKyAgY29kZSBpcyBncm91cGVkIGNvcnJlY3Rs eSB3aXRoaW4gdGhlICNpZmRlZnMuICBMZXQncyBob3BlIFNvbGFyaXMga2VlcHMgaXQuCisKKyAg V2UgY2FsbCB4MjV4aW4oKSBpbnN0ZWFkIG9mIHJlYWQoKSBzbyB0aGF0IFEtQml0IHBhY2tldHMs IHdoaWNoIGNvbnRhaW4KKyAgWC4yNSBzZXJ2aWNlLWxldmVsIGluZm9ybWF0aW9uIChlLmcuIFBB RCBwYXJhbWV0ZXIgY2hhbmdlcyksIGNhbiBiZSBwcm9jZXNzZWQKKyAgdHJhbnNwYXJlbnRseSB0 byB0aGUgdXBwZXItbGV2ZWwgY29kZS4gIFRoaXMgaXMgYSBibG9ja2luZyByZWFkLCBhbmQgc28K KyAgd2UgZGVwZW5kIG9uIGhpZ2hlci1sZXZlbCBjb2RlIChzdWNoIGFzIHR0aW5jKCkpIHRvIHNl dCBhbnkgbmVjZXNzYXJ5IGFsYXJtcy4KKyovCisgICAgZXh0ZXJuIGludCBuZXR0eXBlOworICAg IGlmIChuZXRjb25uICYmIG5ldHR5cGUgPT0gTkVUX1NYMjUpIHsKKwl3aGlsZSAoKHggPSB4MjV4 aW4oc2l6ZW9mKHgyNWJ1ZiksIHgyNWJ1ZikpIDwgMSkgOworCXJldHVybih4IC0gMSk7CSAgICAg ICAgLyogIi0xIiBjb21wZW5zYXRlcyBmb3IgZXh0cmEgc3RhdHVzIGJ5dGUgKi8KKyAgICB9Cisj ZW5kaWYgLyogU1VOWDI1ICovCisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoc3NsX2FjdGl2ZV9m bGFnIHx8IHRsc19hY3RpdmVfZmxhZykgeworICAgICAgICBpbnQgZXJyb3IsIG4gPSAwOworICAg ICAgICB3aGlsZSAobiA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFnKQor CSAgICAgIG4gPSBTU0xfcmVhZChzc2xfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2YobXlidWYp KTsKKyAgICAgICAgICAgIGVsc2UKKwkgICAgICBuID0gU1NMX3JlYWQodGxzX2NvbiwgKGNoYXIg KilteWJ1Ziwgc2l6ZW9mKG15YnVmKSk7CisgICAgICAgICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJy b3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2NvbixuKSkgeworCSAgICAgIGNhc2UgU1NM X0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgaWYgKG4gPiAwKQorCQkgIHJldHVybihuKTsK KyAgICAgICAgICAgICAgICBpZiAobiA8IDApCisJCSAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAg ICAgICBtc2xlZXAoNTApOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgIGNhc2UgU1NM X0VSUk9SX1dBTlRfV1JJVEU6CisJICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAg ICAgICAgICAgICAgIHJldHVybigtMSk7CisJICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoK KwkJaWYgKG4gIT0gMCkKKwkJICByZXR1cm4oLTEpOworCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dB TlRfWDUwOV9MT09LVVA6CisJICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorCSAgICAgIGNhc2Ug U1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorCSAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg dHRjbG9zKDApOworICAgICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgQ0tfS0VSQkVST1MK KyNpZmRlZiBLUkI0CisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs0 TE9HSU4pIHsKKyAgICAgICAgaWYgKCh4ID0ga3JiNF9kZXNfcmVhZCh0dHlmZCxteWJ1ZixzaXpl b2YobXlidWYpKSkgPCAwKQorCSAgcmV0dXJuKC0xKTsKKyAgICAgICAgZWxzZQorCSAgcmV0dXJu KHgpOworICAgIH0KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8qIEtSQjQgKi8KKyNp ZmRlZiBLUkI1CisjaWZkZWYgUkxPR0NPREUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfRUs1TE9H SU4pIHsKKyAgICAgICAgaWYgKCh4ID0ga3JiNV9kZXNfcmVhZCh0dHlmZCxteWJ1ZixzaXplb2Yo bXlidWYpLDApKSA8IDApCisJICByZXR1cm4oLTEpOworICAgICAgICBlbHNlCisJICByZXR1cm4o eCk7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgS1JCNV9VMlUKKyAgICBp ZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKKyAgICAgICAgaWYgKCh4ID0ga3JiNV91MnVfcmVh ZCh0dHlmZCxteWJ1ZixzaXplb2YobXlidWYpKSkgPCAwKQorCSAgcmV0dXJuKC0xKTsKKyAgICAg ICAgZWxzZQorCSAgcmV0dXJuKHgpOworICAgIH0KKyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2Vu ZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisgICAgZXJybm8gPSAw OworICAgIGRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiBjYWxsaW5nIEZJT05SRUFEIGlvY3RsIiwiIix4 bG9jYWwpOworICAgIHggPSBpb2N0bChmZCwgRklPTlJFQUQsICZhdmFpbCk7CisjaWZkZWYgREVC VUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEwMSwibXlmaWxsYnVmIEZJT05SRUFEIiwi Iix4KTsKKwlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgRklPTlJFQUQgYXZhaWwiLCIiLGF2YWlsKTsK KwlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgRklPTlJFQUQgZXJybm8iLCIiLGVycm5vKTsKKyAgICB9 CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICBpZiAoeCA8IDAgfHwgYXZhaWwgPT0gMCkKKyAgICAg IGF2YWlsID0gMTsKKworICAgIGlmIChhdmFpbCA+IE1ZQlVGTEVOKQorICAgICAgYXZhaWwgPSBN WUJVRkxFTjsKKworICAgIGVycm5vID0gMDsKKworICAgIHggPSByZWFkKGZkLCBteWJ1ZiwgKGlu dCkgYXZhaWwpOworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDEs Im15ZmlsbGJ1ZiBhdmFpbCIsIiIsYXZhaWwpOworCWRlYnVnKEYxMDEsIm15ZmlsbGJ1ZiByZWFk IiwiIix4KTsKKwlkZWJ1ZyhGMTAxLCJteWZpbGxidWYgcmVhZCBlcnJubyIsIiIsZXJybm8pOwor ICAgICAgICBpZiAoeCA+IDApCisJICBja2hleGR1bXAoIm15ZmlsbGJ1ZiBteWJ1ZiIsbXlidWYs eCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgaWYgKHggPCAxKSB4ID0gLTM7CQkJ LyogcmVhZCAwID09IGNvbm5lY3Rpb24gbG9zcyAqLworICAgIHJldHVybih4KTsKK30KKworI2Vs c2UgLyogIUZJT05SRUFEICovCisvKiBBZGQgb3RoZXIgc3lzdGVtcyBoZXJlLCBiZXR3ZWVuICNp ZmRlZiBhbmQgI2Vsc2UsIGUuZy4gTkVUQ09OTi4gKi8KKy8qIFdoZW4gdGhlcmUgaXMgbm8gb3Ro ZXIgcG9zc2liaWxpdHksIHJlYWQgMSBjaGFyYWN0ZXIgYXQgYSB0aW1lLiAqLworaW50CitteWZp bGxidWYoKSB7CisgICAgaW50IHg7CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoc3NsX2FjdGl2 ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgeworICAgICAgICBpbnQgZXJyb3IsIG4gPSAwOwor ICAgICAgICB3aGlsZSAobiA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFn KQorCSAgICAgIG4gPSBTU0xfcmVhZChzc2xfY29uLCAoY2hhciAqKW15YnVmLCBzaXplb2YobXli dWYpKTsKKyAgICAgICAgICAgIGVsc2UKKwkgICAgICBjb3VudCA9IFNTTF9yZWFkKHRsc19jb24s IChjaGFyICopbXlidWYsIHNpemVvZihteWJ1ZikpOworICAgICAgICAgICAgc3dpdGNoIChTU0xf Z2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRsc19jb24sbikpIHsKKwkgICAgICBj YXNlIFNTTF9FUlJPUl9OT05FOgorICAgICAgICAgICAgICAgIGlmIChuID4gMCkKKwkJICByZXR1 cm4obik7CisgICAgICAgICAgICAgICAgaWYgKG4gPCAwKQorCQkgIHJldHVybigtMik7CisgICAg ICAgICAgICAgICAgbXNsZWVwKDUwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICBj YXNlIFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVB RDoKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NZ U0NBTEw6CisJCWlmIChuICE9IDApCisJCSAgcmV0dXJuKC0xKTsKKwkgICAgICBjYXNlIFNTTF9F UlJPUl9XQU5UX1g1MDlfTE9PS1VQOgorCSAgICAgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKwkgICAg ICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKwkgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIENLX0tF UkJFUk9TCisjaWZkZWYgS1JCNAorI2lmZGVmIFJMT0dDT0RFCisgICAgaWYgKHR0bnByb3RvID09 IE5QX0VLNExPR0lOKSB7CisgICAgICAgIGlmICgobGVuID0ga3JiNF9kZXNfcmVhZCh0dHlmZCxt eWJ1ZixzaXplb2YobXlidWYpKSkgPCAwKQorCSAgcmV0dXJuKC0xKTsKKyAgICAgICAgZWxzZQor CSAgcmV0dXJuKGxlbik7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyog S1JCNCAqLworI2lmZGVmIEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAgIGlmICh0dG5wcm90byA9 PSBOUF9FSzVMT0dJTikgeworICAgICAgICBpZiAoKGxlbiA9IGtyYjVfZGVzX3JlYWQodHR5ZmQs bXlidWYsc2l6ZW9mKG15YnVmKSwwKSkgPCAwKQorCSAgcmV0dXJuKC0xKTsKKyAgICAgICAgZWxz ZQorCSAgcmV0dXJuKGxlbik7CisgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYg S1JCNV9VMlUKKyAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKKyAgICAgICAgaWYgKChs ZW4gPSBrcmI1X3UydV9yZWFkKHR0eWZkLG15YnVmLHNpemVvZihteWJ1ZikpKSA8IDApCisJICBy ZXR1cm4oLTEpOworICAgICAgICBlbHNlCisJICByZXR1cm4obGVuKTsKKyAgICB9CisjZW5kaWYg LyogS1JCNV9VMlUgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBmZCA9IGZkaW47Cisg ICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0dHlmZDsKKyAgICB4ID0g cmVhZChmZCwgbXlidWYsIDEpOworICAgIHJldHVybih4ID4gMCA/IHggOiAtMyk7Cit9CisKKyNl bmRpZiAvKiAhRklPTlJFQUQgKi8KKyNlbmRpZiAvKiAhYWVnaXMgKi8KKyNlbmRpZiAvKiAhQVRU U1YgKi8KKworI2VuZGlmIC8qIE1ZUkVBRCAqLworCisvKiAgVCBUIF8gVCBOIE8gUCBUICAtLSAg SGFuZGxlIFRlbG5ldCBuZWdvdGlvbnMgaW4gaW5jb21pbmcgZGF0YSAqLworLyoKKyAgQ2FsbCB3 aXRoIHRoZSBJQUMgdGhhdCB3YXMgZW5jb3VudGVyZWQuCisgIFJldHVybnM6CisgICAtMzogSWYg Y29ubmVjdGlvbiBoYXMgZHJvcHBlZCBvciBnb25lIGJhZC4KKyAgIC0yOiBPbiBUZWxuZXQgcHJv dG9jb2wgZXJyb3IgcmVzdWx0aW5nIGluIGluY29uc2lzdGVudCBzdGF0ZXMuCisgICAgMDogSWYg bmVnb3RpYXRpb24gT0sgYW5kIGNhbGxlciBoYXMgbm90aGluZyB0byBkby4KKyAgICAxOiBJZiBw YWNrZXQgc3RhcnQgY2hhcmFjdGVyIGhhcyBjaGFuZ2VkIChuZXcgdmFsdWUgaXMgaW4gZ2xvYmFs IHN0Y2hyKS4KKyAgMjU1OiBJZiB0aGVyZSB3YXMgYSBxdW90ZWQgSUFDIGFzIGRhdGEuCisgICBv cjogTm90IGF0IGFsbCBpZiB3ZSBnb3QgYSBsZWdpdGltYXRlIFRlbG5ldCBMb2dvdXQgcmVxdWVz dC4KKyovCisjaWZkZWYgVENQU09DS0VUCitzdGF0aWMgaW50Cit0dF90bm9wdChuKSBpbnQgbjsg ewkJCS8qIEhhbmRsZSBUZWxuZXQgb3B0aW9ucyAqLworICAgIC8qIEluIGNhc2UgY2FsbGVyIGRp ZCBub3QgYWxyZWFkeSBjaGVjayB0aGVzZSBjb25kaXRpb25zLi4uICAqLworICAgIGlmIChuID09 IElBQyAmJgorCSgoeGxvY2FsICYmIG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8CisJICgheGxv Y2FsICYmIHNzdGVsbmV0KSkpIHsKKwlleHRlcm4gaW50IHNlcnZlcjsKKwlpbnQgdHggPSAwOwor CWRlYnVnKEYxMDAsInR0aW5sIGNhbGxpbmcgdG5fZG9vcCgpIiwiIiwwKTsKKwl0eCA9IHRuX2Rv b3AoKENIQVIpKG4gJiAweGZmKSxkdXBsZXgsdHRpbmMpOworCWRlYnVnKEYxMTEsInR0aW5sIHRu X2Rvb3AoKSByZXR1cm5lZCIsInR4Iix0eCk7CisJc3dpdGNoICh0eCkgeworCSAgY2FzZSAwOgor CSAgICByZXR1cm4oMCk7CisJICBjYXNlIC0xOgkJCS8qIEkvTyBlcnJvciAqLworCSAgICB0dGlt b2ZmKCk7CQkJLyogVHVybiBvZmYgdGltZXIgKi8KKwkgICAgcmV0dXJuKC0zKTsKKyAgICAgICAg ICBjYXNlIC0yOgkJCS8qIENvbm5lY3Rpb24gZmFpbGVkLiAqLworICAgICAgICAgIGNhc2UgLTM6 CisJICAgIHR0aW1vZmYoKTsJCQkvKiBUdXJuIG9mZiB0aW1lciAqLworCSAgICB0dGNsb3MoMCk7 CisJICAgIHJldHVybigtMyk7CisJICBjYXNlIDE6CQkJLyogRUNITyBjaGFuZ2UgKi8KKwkgICAg ZHVwbGV4ID0gMTsKKwkgICAgcmV0dXJuKDApOworCSAgY2FzZSAyOgkJCS8qIEVDSE8gY2hhbmdl ICovCisJICAgIGR1cGxleCA9IDA7CisJICAgIHJldHVybigwKTsKKwkgIGNhc2UgMzoJCQkvKiBR dW90ZWQgSUFDICovCisJICAgIG4gPSAyNTU7CisJICAgIHJldHVybigodW5zaWduZWQpMjU1KTsK KyNpZmRlZiBJS1NfT1BUSU9OCisJICBjYXNlIDQ6IHsKKwkgICAgICBpZiAoVEVMT1BUX1NCKFRF TE9QVF9LRVJNSVQpLmtlcm1pdC51X3N0YXJ0ICYmIHNlcnZlcgorI2lmZGVmIElLU0QKKwkJICAm JiAhaW5zZXJ2ZXIKKyNlbmRpZiAvKiBJS1NEICovCisJCSAgKSB7CQkJLyogUmVtb3RlIGluIFNl cnZlciBtb2RlICovCisJCSAgdHRpbW9mZigpOwkJLyogVHVybiBvZmYgdGltZXIgKi8KKwkJICBk ZWJ1ZyhGMTAwLCJ1X3N0YXJ0IGFuZCAhaW5zZXJ2ZXIiLCIiLDApOworCQkgIHJldHVybigtMik7 CQkvKiBFbmQgc2VydmVyIG1vZGUgKi8KKwkgICAgICB9IGVsc2UgaWYgKCFURUxPUFRfU0IoVEVM T1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0ICYmCisJCQkgc2VydmVyCisJCQkgKSB7CQkvKiBJ J20gbm8gbG9uZ2VyIGluIFNlcnZlciBNb2RlICovCisJCSAgZGVidWcoRjEwMCwibWVfc3RhcnQg YW5kIHNlcnZlciIsIiIsMCk7CisJCSAgdHRpbW9mZigpOworCQkgIHJldHVybigtMik7CisJICAg ICAgfQorCSAgICAgIHJldHVybigwKTsKKwkgIH0KKwkgIGNhc2UgNTogewkJCS8qIFN0YXJ0IGNo YXJhY3RlciBjaGFuZ2UgKi8KKwkgICAgICAvKiBleHRlcm4gQ0hBUiBzdGNocjsgKi8KKwkgICAg ICAvKiBzdGFydCA9IHN0Y2hyOyAqLworCSAgICAgIHJldHVybigxKTsKKwkgIH0KKyNlbmRpZiAv KiBJS1NfT1BUSU9OICovCisJICBjYXNlIDY6CQkJLyogUmVtb3RlIExvZ291dCAqLworCSAgICB0 dGltb2ZmKCk7CisJICAgIHR0Y2xvcygwKTsKKyNpZmRlZiBJS1NECisJICAgIGlmIChpbnNlcnZl ciAmJiAhbG9jYWwpCisJICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKKwkgICAgZWxzZQorI2Vu ZGlmIC8qIElLU0QgKi8KKwkgICAgICByZXR1cm4oLTIpOworCSAgZGVmYXVsdDoKKwkgICAgcmV0 dXJuKDApOworCX0KKyAgICB9IGVsc2UKKyAgICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKworLyogIFQgVCBGIEwgVSBJICAtLSAgRmx1c2ggdHR5IGlucHV0IGJ1ZmZl ciAqLworCit2b2lkCit0dGZsdXgoKSB7CQkJCS8qIEJ1dCBmaXJzdC4uLiAqLworI2lmZGVmIE1Z UkVBRAorLyoKKyAgRmx1c2ggaW50ZXJuYWwgTVlSRUFEIGJ1ZmZlci4KKyovCisjaWZkZWYgVENQ U09DS0VUCisgICAgaW50IGRvdG5vcHRzLCB4OworICAgIGRvdG5vcHRzID0gKCgoeGxvY2FsICYm IG5ldGNvbm4gJiYgSVNfVEVMTkVUKCkpIHx8CisJCSAoIXhsb2NhbCAmJiBzc3RlbG5ldCkpKTsK KyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGZsdXggbXlfY291bnQi LCIiLG15X2NvdW50KTsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpZiAoZG90bm9wdHMpIHsKKwlD SEFSIGNoID0gJ1wwJzsKKyAgICAgICAgd2hpbGUgKG15X2NvdW50ID4gMCkgeworCSAgICBjaCA9 IG15cmVhZCgpOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgIGlmIChURUxPUFRf VShURUxPUFRfRU5DUllQVElPTikpCisJICAgICAgY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwx KTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAgICAgICBpZiAoY2ggPT0gSUFD KQorCSAgICAgIHggPSB0dF90bm9wdChjaCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tfRU5DUllQVElPTgor ICAgIGlmIChURUxPUFRfVShURUxPUFRfRU5DUllQVElPTikgJiYgbXlfY291bnQgPiAwKQorICAg ICAgY2tfdG5fZGVjcnlwdCgmbXlidWZbbXlfaXRlbSsxXSxteV9jb3VudCk7CisjZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBteV9jb3VudCA9IDA7 CQkJLyogUmVzZXQgY291bnQgdG8gemVybyAqLworICAgIG15X2l0ZW0gPSAtMTsJCQkvKiBBbmQg YnVmZmVyIGluZGV4IHRvIC0xICovCisjZW5kaWYgLyogTVlSRUFEICovCit9CisKK2ludAordHRm bHVpKCkgeworICAgIGludCBuLCBmZDsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpbnQgZG90bm9w dHM7CisgICAgZG90bm9wdHMgPSAoKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkg fHwKKwkJICgheGxvY2FsICYmIHNzdGVsbmV0KSkpOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor CisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsKKyAgICBl bHNlCisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisjaWZkZWYgVFRM RUJVRgorICAgIHR0cHVzaCA9IC0xOwkJCS8qIENsZWFyIHRoZSBwZWVrLWFoZWFkIGNoYXIgKi8K KyAgICB3aGlsZSAobGVfZGF0YSAmJiAobGVfaW5idWYoKSA+IDApKSB7CisgICAgICAgIENIQVIg Y2ggPSAnXDAnOworICAgICAgICBpZiAobGVfZ2V0Y2hhcigmY2gpID4gMCkgewkvKiBDbGVhciBh bnkgbW9yZS4uLiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwidHRmbHVpIGxlX2luYnVmIGNo IiwiIixjaCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogVFRMRUJVRiAqLworICAgIGRl YnVnKEYxMDEsInR0Zmx1aSB0dHBpcGUiLCIiLHR0cGlwZSk7CisKKyNpZmRlZiBNWVJFQUQKKy8q CisgIEZsdXNoIGludGVybmFsIE1ZUkVBRCBidWZmZXIgKk5FWFQqLCBpbiBhbGwgY2FzZXMuCisq LworICAgIHR0Zmx1eCgpOworI2VuZGlmIC8qIE1ZUkVBRCAqLworCisjaWZkZWYgTkVUQ09OTgor LyogTmV0d29yayBmbHVzaCBpcyBkb25lIHNwZWNpYWxseSwgaW4gdGhlIG5ldHdvcmsgc3VwcG9y dCBtb2R1bGUuICovCisgICAgaWYgKChuZXRjb25uIHx8IHNzdGVsbmV0KSAmJiAhdHRwaXBlICYm ICF0dHB0eSkgeworCWRlYnVnKEYxMDAsInR0Zmx1aSBuZXRmbHVpIiwiIiwwKTsKKyNpZmRlZiBD T01NRU5UCisjaWZkZWYgVE5fQ09NUE9SVAorCWlmIChpc3RuY29tcG9ydCgpKQorICAgICAgICAg ICAgdG5jX3NlbmRfcHVyZ2VfZGF0YShUTkNfUFVSR0VfUkVDRUlWRSk7CisjZW5kaWYgLyogVE5f Q09NUE9SVCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlyZXR1cm4obmV0Zmx1aSgpKTsKKyAg ICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisgICAgZGVidWcoRjEwMSwidHRmbHVpIHR0eWZk IiwiIix0dHlmZCk7IC8qIE5vdCBuZXR3b3JrICovCisgICAgaWYgKHR0eWZkIDwgMCkKKyAgICAg IHJldHVybigtMSk7CisKKyNpZmRlZiBhZWdpcworICAgIHNpb18kY29udHJvbCgoc2hvcnQpeWZk LCBzaW9fJGZsdXNoX2luLCB0cnVlLCBzdCk7CisgICAgaWYgKHN0LmFsbCAhPSBzdGF0dXNfJG9r KSB7CisJZnByaW50ZihzdGRlcnIsICJmbHVzaCBmYWlsZWQ6ICIpOyBlcnJvcl8kcHJpbnQoc3Qp OworICAgIH0gZWxzZSB7ICAgICAgLyogc29tZXRpbWVzIHRoZSBmbHVzaCBkb2Vzbid0IHdvcmsg Ki8KKyAgICAgICAgZm9yICg7OykgeworCSAgICBjaGFyIGJ1ZlsyNTZdOworICAgICAgICAgICAg LyogZWF0IGFsbCB0aGUgY2hhcmFjdGVycyB0aGF0IHNob3VsZG4ndCBiZSBhdmFpbGFibGUgKi8K KyAgICAgICAgICAgIGlvc18kZ2V0KChzaG9ydClmZCwgaW9zXyRjb25kX29wdCwgYnVmLCAyNTZM LCBzdCk7IC8qICh2b2lkKSAqLworICAgICAgICAgICAgaWYgKHN0LmFsbCA9PSBpb3NfJGdldF9j b25kaXRpb25hbF9mYWlsZWQpIGJyZWFrOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJm bHVzaCBmYWlsZWQoMik6ICIpOyBlcnJvcl8kcHJpbnQoc3QpOworICAgICAgICB9CisgICAgfQor I2Vsc2UKKyNpZmRlZiBCU0Q0NAkJCQkvKiA0LjQgQlNEICovCisgICAgbiA9IEZSRUFEOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU3BlY2lmeSByZWFkIHF1ZXVlICovCisgICAgZGVidWco RjEwMCwidHRmbHVpIEJTRDQ0IiwiIiwwKTsKKyAgICBpb2N0bChmZCxUSU9DRkxVU0gsJm4pOwor I2Vsc2UKKyNpZmRlZiBQbGFuOQorI3VuZGVmIFBPU0lYCQkJCS8qIFVoIG9oLi4uICovCisjZW5k aWYgLyogUGxhbjkgKi8KKyNpZmRlZiBQT1NJWAkJCQkvKiBQT1NJWCAqLworICAgIGRlYnVnKEYx MDAsInR0Zmx1aSBQT1NJWCIsIiIsMCk7CisgICAgdGNmbHVzaChmZCxUQ0lGTFVTSCk7CisjZWxz ZQorI2lmZGVmIEFUVFNWCQkJCS8qIFN5c3RlbSBWICovCisjaWZuZGVmIFZYVkUKKyAgICBkZWJ1 ZyhGMTAwLCJ0dGZsdWkgQVRUU1YiLCIiLDApOworICAgIGlvY3RsKGZkLFRDRkxTSCwwKTsKKyNl bmRpZiAvKiBWWFZFICovCisjZWxzZQkJCQkJLyogTm90IEJTRDQ0LCBQT1NJWCwgb3IgU3lzIFYg Ki8KKyNpZmRlZiBUSU9DRkxVU0gJCQkvKiBUaG9zZSB3aXRoIFRJT0NGTFVTSCBkZWZpbmVkICov CisjaWZkZWYgQU5ZQlNECQkJCS8qIEJlcmtlbGV5ICovCisgICAgbiA9IEZSRUFEOyAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU3BlY2lmeSByZWFkIHF1ZXVlICovCisgICAgZGVidWcoRjEw MCwidHRmbHVpIFRJT0NGTFVTSCBBTllCU0QiLCIiLDApOworICAgIGlvY3RsKGZkLFRJT0NGTFVT SCwmbik7CisjZWxzZQkJCQkJLyogT3RoZXJzIChWNywgZXRjKSAqLworICAgIGRlYnVnKEYxMDAs InR0Zmx1aSBUSU9DRkxVU0giLCIiLDApOworICAgIGlvY3RsKGZkLFRJT0NGTFVTSCwwKTsKKyNl bmRpZiAvKiBBTllCU0QgKi8KKyNlbHNlCQkJCQkvKiBBbGwgb3RoZXJzLi4uICovCisvKgorICBO byBzeXN0ZW0gY2FsbCAodGhhdCB3ZSBrbm93IGFib3V0KSBmb3IgaW5wdXQgYnVmZmVyIGZsdXNo aW5nLgorICBTbyBzZWUgaG93IG1hbnkgdGhlcmUgYXJlIGFuZCByZWFkIHRoZW0gaW4gYSBsb29w LCB1c2luZyB0dGluYygpLgorICB0dGluYygpIGlzIGJ1ZmZlcmVkLCBzbyB3ZSdyZSBub3QgZ2V0 dGluZyBjaGFyZ2VkIHdpdGggYSBzeXN0ZW0gY2FsbAorICBwZXIgY2hhcmFjdGVyLCBqdXN0IGEg ZnVuY3Rpb24gY2FsbC4KKyovCisgICAgaWYgKChuID0gdHRjaGsoKSkgPiAwKSB7CisJZGVidWco RjEwMSwidHRmbHVpIHJlYWQgbG9vcCIsIiIsbik7CisJd2hpbGUgKChuLS0pICYmIHR0aW5jKDAp ID4gMCkgOworICAgIH0KKyNlbmRpZiAvKiBUSU9DRkxVU0ggKi8KKyNlbmRpZiAvKiBBVFRTViAq LworI2VuZGlmIC8qIFBPU0lYICovCisjaWZkZWYgUGxhbjkKKyNkZWZpbmUgUE9TSVgKKyNlbmRp ZiAvKiBQbGFuOSAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogYWVnaXMgKi8KKyAg ICByZXR1cm4oMCk7Cit9CisKK2ludAordHRmbHVvKCkgewkJCQkvKiBGbHVzaCBvdXRwdXQgYnVm ZmVyICovCisgICAgaW50IGZkOworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAg ICBmZCA9IGZkb3V0OworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyAgICAgIGZkID0g dHR5ZmQ7CisKKyNpZmRlZiBQbGFuOQorICAgIHJldHVybiAwOworI2Vsc2UKKyNpZmRlZiBQT1NJ WAorICAgIHJldHVybih0Y2ZsdXNoKGZkLFRDT0ZMVVNIKSk7CisjZWxzZQorI2lmZGVmIE9YT1MK KyAgICByZXR1cm4oaW9jdGwoZmQsVENGTFNILDEpKTsKKyNlbHNlCisgICAgcmV0dXJuKDApOwkJ CQkvKiBBbGwgb3RoZXJzLCBub3RoaW5nICovCisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8q IFBPU0lYICovCisjZW5kaWYgLyogUGxhbjkgKi8KK30KKworLyogSW50ZXJydXB0IEZ1bmN0aW9u cyAqLworCisvKiBTZXQgdXAgdGVybWluYWwgaW50ZXJydXB0cyBvbiBjb25zb2xlIHRlcm1pbmFs ICovCisKKyNpZm5kZWYgRklPTlJFQUQJCQkvKiBXZSBkb24ndCBuZWVkIGVzY3RycCgpICovCisj aWZuZGVmIFNFTEVDVAkJCQkvKiBpZiB3ZSBoYXZlIGFueSBvZiB0aGVzZS4uLiAqLworI2lmbmRl ZiBDS19QT0xMCisjaWZuZGVmIFJEQ0hLCisKKyNpZm5kZWYgT1hPUworI2lmZGVmIFNWT1JQT1NJ WAorU0lHVFlQCitlc2N0cnAoZm9vKSBpbnQgZm9vOyB7CQkJLyogdHJhcCBjb25zb2xlIGVzY2Fw ZXMgKF5cKSAqLworICAgIHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAgICAgICAgICAgIC8qIGln bm9yZSB1bnRpbCB0cmFwcGVkICovCisgICAgY29uZXNjID0gMTsKKyAgICBkZWJ1ZyhGMTAxLCJl c2N0cnAgY2F1Z2h0IFNJR1FVSVQiLCIiLGNvbmVzYyk7Cit9CisjZW5kaWYgLyogU1ZPUlBPU0lY ICovCisjZW5kaWYgLyogT1hPUyAqLworCisjaWZkZWYgVjcKKyNpZm5kZWYgTUlOSVgyCitTSUdU WVAKK2VzY3RycChmb28pIGludCBmb287IHsJCQkvKiB0cmFwIGNvbnNvbGUgZXNjYXBlcyAoXlwp ICovCisgICAgc2lnbmFsKFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAgICAgLyogaWdub3JlIHVu dGlsIHRyYXBwZWQgKi8KKyAgICBjb25lc2MgPSAxOworICAgIGRlYnVnKEYxMDEsImVzY3RycCBj YXVnaHQgU0lHUVVJVCIsIiIsY29uZXNjKTsKK30KKyNlbmRpZiAvKiBNSU5JWDIgKi8KKyNlbmRp ZiAvKiBWNyAqLworCisjaWZkZWYgQzcwCitTSUdUWVAKK2VzY3RycChmb28pIGludCBmb287IHsJ CQkvKiB0cmFwIGNvbnNvbGUgZXNjYXBlcyAoXlwpICovCisgICAgY29uZXNjID0gMTsKKyAgICBz aWduYWwoU0lHUVVJVCxTSUdfSUdOKTsgICAgICAgICAgICAvKiBpZ25vcmUgdW50aWwgdHJhcHBl ZCAqLworfQorI2VuZGlmIC8qIEM3MCAqLworCisjZW5kaWYgLyogUkRDSEsgKi8KKyNlbmRpZiAv KiBDS19QT0xMICovCisjZW5kaWYgLyogU0VMRUNUICovCisjZW5kaWYgLyogRklPTlJFQUQgKi8K KworLyogIEMgTyBOIEIgRyBUICAtLSAgQmFja2dyb3VuZCBUZXN0ICAqLworCitzdGF0aWMgaW50 IGpjID0gMDsJCQkvKiAwID0gbm8gam9iIGNvbnRyb2wgKi8KKworLyoKKyAgQ2FsbCB3aXRoIGZs YWcgPT0gMSB0byBwcmV2ZW50IHNpZ25hbCB0ZXN0LCB3aGljaCBjYW4gbm90IGJlIGV4cGVjdGVk CisgIHRvIHdvcmsgZHVyaW5nIGZpbGUgdHJhbnNmZXIsIHdoZW4gU0lHSU5UIHByb2JhYmx5ICpp cyogc2V0IHRvIFNJR19JR04uCisKKyAgQ2FsbCB3aXRoIGZsYWcgPT0gMCB0byB1c2UgdGhlIHNp Z25hbCB0ZXN0LCBidXQgb25seSBpZiB0aGUgcHJvY2Vzcy1ncm91cAorICB0ZXN0IGZhaWxzLCBh cyBpdCBkb2VzIG9uIHNvbWUgVU5JWCBzeXN0ZW1zLCB3aGVyZSBnZXRwZ3JwKCkgaXMgYnVnZ3ks CisgIHJlcXVpcmVzIGFuIGFyZ3VtZW50IHdoZW4gdGhlIG1hbiBwYWdlIHNheXMgaXQgZG9lc24n dCwgb3IgdmljZSB2ZXJzYS4KKworICBJZiBmbGFnID09IDAgYW5kIHRoZSBwcm9jZXNzLWdyb3Vw IHRlc3QgZmFpbHMsIHRoZW4gd2UgZGV0ZXJtaW5lIGJhY2tncm91bmQKKyAgc3RhdHVzIHNpbXBs eSAoYnV0IG5vdCBuZWNlc3NhcmlseSByZWxpYWJseSkgZnJvbSBpc2F0dHkoKS4KKworICBjb25i Z3QoKSBzZXRzIHRoZSBnbG9iYWwgYmFja2dyZCA9IDEgaWYgd2UgYXBwZWFyIHRvIGJlIGluIHRo ZSBiYWNrZ3JvdW5kLAorICBhbmQgdG8gMCBpZiB3ZSBzZWVtIHRvIGJlIGluIHRoZSBmb3JlZ3Jv dW5kLiAgY29uYmd0KCkgaXMgaGlnaGx5IHByb25lIHRvCisgIG1pc2JlaGF2aW9yLgorKi8KK1ZP SUQKK2NvbmJndChmbGFnKSBpbnQgZmxhZzsgeworICAgIGludCB4ID0gLTEsCQkJCS8qIHByb2Nl c3MgZ3JvdXAgb3IgU0lHSU5UIHRlc3QgKi8KKyAgICAgICAgeSA9IDA7CQkJCS8qIGlzYXR0eSgp IHRlc3QgKi8KKy8qCisgIENoZWNrIGZvciBiYWNrZ3JvdW5kIG9wZXJhdGlvbiwgZXZlbiBpZiBu b3QgcnVubmluZyBvbiByZWFsIHR0eSwgc28gdGhhdAorICBiYWNrZ3JvdW5kIGZsYWcgY2FuIGJl IHNldCBjb3JyZWN0bHkuICBJZiBiYWNrZ3JvdW5kIHN0YXR1cyBpcyBkZXRlY3RlZCwKKyAgdGhl biBLZXJtaXQgd2lsbCBub3QgaXNzdWUgaXRzIGludGVyYWN0aXZlIHByb21wdCBvciBtb3N0IG1l c3NhZ2VzLgorICBJZiB5b3VyIHByb21wdCBnb2VzIGF3YXksIHlvdSBjYW4gYmxhbWUgKGFuZCBm aXg/KSB0aGlzIGZ1bmN0aW9uLgorKi8KKworLyogVXNlIHByb2Nlc3MtZ3JvdXAgdGVzdCBpZiBw b3NzaWJsZS4gKi8KKworI2lmZGVmIFBPU0lYCQkJCS8qIFdlIGNhbiBkbyBpdCBpbiBQT1NJWCAq LworI2RlZmluZSBQR1JPVVBfVAorI2Vsc2UKKyNpZmRlZiBCU0Q0CQkJCS8qIGFuZCBpbiBCU0Qg NC54LiAqLworI2RlZmluZSBQR1JPVVBfVAorI2Vsc2UKKyNpZmRlZiBIUFVYSk9CQ1RMCQkJLyog YW5kIGluIG1vc3QgSFAtVVgncyAqLworI2RlZmluZSBQR1JPVVBfVAorI2Vsc2UKKyNpZmRlZiBU SU9DR1BHUlAJCQkvKiBhbmQgYW55cGxhY2UgdGhhdCBoYXMgdGhpcyBpb2N0bC4gKi8KKyNkZWZp bmUgUEdST1VQX1QKKyNlbmRpZiAvKiBUSU9DR1BHUlAgKi8KKyNlbmRpZiAvKiBIUFVYSk9CQ1RM ICovCisjZW5kaWYgLyogQlNENCAqLworI2VuZGlmIC8qIFBPU0lYICovCisKKyNpZmRlZiBNSVBT CQkJCS8qIEV4Y2VwdCBpZiBpdCBkb2Vzbid0IHdvcmsuLi4gKi8KKyN1bmRlZiBQR1JPVVBfVAor I2VuZGlmIC8qIE1JUFMgKi8KKworI2lmZGVmIE1JTklYCisjdW5kZWYgUEdST1VQX1QKKyNlbmRp ZgkvKiBNSU5JWCAqLworCisjaWZkZWYgUEdST1VQX1QKKy8qCisgIFNlbWktcmVsaWFibGUgcHJv Y2Vzcy1ncm91cCB0ZXN0LiAgQ2hlY2sgd2hldGhlciB0aGlzIHByb2Nlc3MncyBncm91cCBpcwor ICB0aGUgc2FtZSBhcyB0aGUgY29udHJvbGxpbmcgdGVybWluYWwncyBwcm9jZXNzIGdyb3VwLiAg VGhpcyB3b3JrcyBpZiB0aGUKKyAgZ2V0cGdycCgpIGNhbGwgZG9lc24ndCBsaWUgKGFzIGl0IGRv ZXMgaW4gdGhlIFNVTk9TIFN5c3RlbSBWIGVudmlyb25tZW50KS4KKyovCisgICAgUElEX1QgbXlw Z3JwID0gKFBJRF9UKTA7CQkvKiBLZXJtaXQncyBwcm9jZXNzIGdyb3VwICovCisgICAgUElEX1Qg Y3RwZ3JwID0gKFBJRF9UKTA7CQkvKiBUaGUgdGVybWluYWwncyBwcm9jZXNzIGdyb3VwICovCisj aWZuZGVmIF9QT1NJWF9TT1VSQ0UKKy8qCisgIFRoZSBnZXRwZ3JwKCkgcHJvdG90eXBlIGlzIG9i dGFpbmVkIGZyb20gc3lzdGVtIGhlYWRlciBmaWxlcyBmb3IgUE9TSVgKKyAgYW5kIFN5cyBWIFI0 IGNvbXBpbGF0aW9ucy4gIE90aGVyIHN5c3RlbXMsIHdobyBrbm93cy4gIFNvbWUgY29tcGxhaW4g YWJvdXQKKyAgYSBkdXBsaWNhdGUgZGVjbGFyYXRpb24gaGVyZSwgb3RoZXJzIGRvbid0LCBzbyBp dCdzIHNhZmVyIHRvIGxlYXZlIGl0IGluCisgIGlmIHdlIGRvbid0IGtub3cgZm9yIGNlcnRhaW4u CisqLworI2lmbmRlZiBTVlI0CisjaWZuZGVmIFBTMkFJWDEwCisjaWZuZGVmIEhQVVg5CisgICAg ZXh0ZXJuIFBJRF9UIGdldHBncnAoKTsKKyNlbmRpZiAvKiBIUFVYOSAqLworI2VuZGlmIC8qIFBT MkFJWDEwICovCisjZW5kaWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIF9QT1NJWF9TT1VSQ0UgKi8K KworLyogR2V0IG15IHByb2Nlc3MgZ3JvdXAuICovCisKKyNpZmRlZiBTVlIzIC8qIE1heWJlIHRo aXMgc2hvdWxkIGJlIEFUVFNWPyAqLworLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgZGVzY3JpYmVk IGluIFNWSUQgUjIgKi8KKyAgICBteXBncnAgPSBnZXRwZ3JwKCk7CisgICAgLyogZGVidWcoRjEw MSwiQVRUU1YgY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCisjZWxz ZQorI2lmZGVmIFBPU0lYCisgICAgbXlwZ3JwID0gZ2V0cGdycCgpOworICAgIC8qIGRlYnVnKEYx MDEsIlBPU0lYIGNvbmJndCBwcm9jZXNzIGdyb3VwIiwiIiwoaW50KSBteXBncnApOyAqLworI2Vs c2UKKyNpZmRlZiBPU0ZQQworICAgIG15cGdycCA9IGdldHBncnAoKTsKKyAgICAvKiBkZWJ1ZyhG MTAxLCJPU0YgY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCisjZWxz ZQorI2lmZGVmIFFOWAorICAgIG15cGdycCA9IGdldHBncnAoKTsKKyAgICAvKiBkZWJ1ZyhGMTAx LCJRTlggY29uYmd0IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCisjZWxzZQor I2lmZGVmIE9TRjMyCQkJCS8qICh3YXMgT1NGNDApICovCisgICAgbXlwZ3JwID0gZ2V0cGdycCgp OworICAgIC8qIGRlYnVnKEYxMDEsIkRpZ2l0YWwgVU5JWCBjb25iZ3QgcHJvY2VzcyBncm91cCIs IiIsKGludCkgbXlwZ3JwKTsgKi8KKyNlbHNlIC8qIEJTRCwgVjcsIGV0YyAqLworI2lmZGVmIE1J TklYMgorICAgIG15cGdycCA9IGdldHBncnAoKTsKKyNlbHNlCisgICAgbXlwZ3JwID0gZ2V0cGdy cCgwKTsKKyNlbmRpZiAvKiBNSU5JWDIgKi8KKyAgICAvKiBkZWJ1ZyhGMTAxLCJCU0QgY29uYmd0 IHByb2Nlc3MgZ3JvdXAiLCIiLChpbnQpIG15cGdycCk7ICovCisjZW5kaWYgLyogT1NGMzIgKi8K KyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBPU0ZQQyAqLworI2VuZGlmIC8qIFBPU0lYICov CisjZW5kaWYgLyogU1ZSMyAqLworCisjaWZkZWYgTUlOSVgKKyAgICAvKiBNSU5JWCBkb2VzIG5v dCBzdXBwb3J0IGpvYiBjb250cm9sIHNvIEtlcm1pdCBpcyBhbHdheXMgaW4gZm9yZWdyb3VuZCAq LworICAgIHggPSAwOworCisjZWxzZSAgLyogTm90IE1JTklYICovCisKKy8qIE5vdyBnZXQgY29u dHJvbGxpbmcgdHR5J3MgcHJvY2VzcyBncm91cCAqLworI2lmZGVmIEJTRDQ0T1JQT1NJWAorICAg IGN0cGdycCA9IHRjZ2V0cGdycCgxKTsJCS8qIFRoZSBQT1NJWCB3YXkgKi8KKyAgICAvKiBkZWJ1 ZyhGMTAxLCJQT1NJWCBjb25iZ3QgdGVybWluYWwgcHJvY2VzcyBncm91cCIsIiIsKGludCkgY3Rw Z3JwKTsgKi8KKyNlbHNlCisgICAgaW9jdGwoMSwgVElPQ0dQR1JQLCAmY3RwZ3JwKTsJLyogT3Ig dGhlIEJTRCB3YXkgKi8KKyAgIC8qIGRlYnVnKEYxMDEsIm5vbi1QT1NJWCBjb25iZ3QgdGVybWlu YWwgcHJvY2VzcyBncm91cCIsIiIsKGludCkgY3RwZ3JwKTsgKi8KKyNlbmRpZiAvKiBCU0Q0NE9S UE9TSVggKi8KKworICAgIGlmICgobXlwZ3JwID4gKFBJRF9UKSAwKSAmJiAoY3RwZ3JwID4gKFBJ RF9UKSAwKSkKKyAgICAgIHggPSAobXlwZ3JwID09IGN0cGdycCkgPyAwIDogMTsJLyogSWYgdGhl eSBkaWZmZXIsIHRoZW4gYmFja2dyb3VuZC4gKi8KKyAgICBlbHNlIHggPSAtMTsJCQkvKiBJZiBl cnJvciwgcmVtZW1iZXIuICovCisgICAgZGVidWcoRjEwMSwiY29uYmd0IHByb2Nlc3MgZ3JvdXAg dGVzdCIsIiIseCk7CisjZW5kaWYgLyogUEdST1VQX1QgKi8KKyNlbmRpZgkvKiBNSU5JWCAqLwor CisvKiBUcnkgdG8gc2VlIGlmIGpvYiBjb250cm9sIGlzIGF2YWlsYWJsZSAqLworCisjaWZkZWYg Tk9KQwkJCQkvKiBVc2VyIG92ZXJyaWRlICovCisgICAgamMgPSAwOwkJCQkvKiBObyBqb2IgY29u dHJvbCBhbGxvd2VkICovCisgICAgZGVidWcoRjExMSwiTk9KQyIsImpjIixqYyk7CisjZWxzZQor I2lmZGVmIEJTRDQ0CisgICAgamMgPSAxOworI2Vsc2UKKyNpZmRlZiBTVlI0T1JQT1NJWAkJCS8q IFBPU0lYIGFjdHVhbGx5IHRlbGxzIHVzICovCisgICAgZGVidWcoRjEwMCwiU1ZSNE9SUE9TSVgg amMgdGVzdC4uLiIsIiIsMCk7CisjaWZkZWYgX1NDX0pPQl9DT05UUk9MCisjaWZkZWYgX19ic2Rp X18KKyAgICBqYyA9IDE7CisjZWxzZQorI2lmZGVmIF9fMzg2QlNEX18KKyAgICBqYyA9IDE7Cisj ZWxzZQorICAgIGpjID0gc3lzY29uZihfU0NfSk9CX0NPTlRST0wpOwkvKiBXaGF0ZXZlciBzeXN0 ZW0gc2F5cyAqLworICAgIGlmIChqYyA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJzeXNjb25mIGZhaWxz LCBqY3NoZWxsIiwiIixqY3NoZWxsKTsKKwlqYyA9IChqY2hkbHIgPT0gU0lHX0RGTCkgPyAxIDog MDsKKyAgICB9IGVsc2UKKyAgICAgIGRlYnVnKEYxMTEsInN5c2NvbmYoX1NDX0pPQl9DT05UUk9M KSIsImpjIixqYyk7CisjZW5kaWYgLyogX18zODZCU0RfXyAqLworI2VuZGlmIC8qIF9fYnNkaV9f ICovCisjZWxzZQorI2lmZGVmIF9QT1NJWF9KT0JfQ09OVFJPTAorICAgIGpjID0gMTsJCQkJLyog QnkgZGVmaW5pdGlvbiAqLworICAgIGRlYnVnKEYxMTEsIl9QT1NJWF9KT0JfQ09OVFJPTCBpcyBk ZWZpbmVkIiwiamMiLGpjKTsKKyNlbHNlCisgICAgamMgPSAwOwkJCQkvKiBBc3N1bWUgam9iIGNv bnRyb2wgbm90IGFsbG93ZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCJTVlI0T1JQT1NJWCBfU0MvUE9T SVhfSk9CX0NPTlRST0wgbm90IGRlZmluZWQiLCJqYyIsamMpOworI2VuZGlmIC8qIF9QT1NJWF9K T0JfQ09OVFJPTCAqLworI2VuZGlmIC8qIF9TQ19KT0JfQ09OVFJPTCAqLworI2Vsc2UKKyNpZmRl ZiBCU0Q0CisgICAgamMgPSAxOwkJCQkvKiBKb2IgY29udHJvbCBhbGxvd2VkICovCisgICAgZGVi dWcoRjExMSwiQlNEIGpvYiBjb250cm9sIiwiamMiLGpjKTsKKyNlbHNlCisjaWZkZWYgU1ZSM0pD CisgICAgamMgPSAxOwkJCQkvKiBKQyBhbGxvd2VkICovCisgICAgZGVidWcoRjExMSwiU1ZSMyBq b2IgY29udHJvbCIsImpjIixqYyk7CisjZWxzZQorI2lmZGVmIE9YT1MKKyAgICBqYyA9IDE7CQkJ CS8qIEpDIGFsbG93ZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCJYL09TIGpvYiBjb250cm9sIiwiamMi LGpjKTsKKyNlbHNlCisjaWZkZWYgSFBVWDkKKyAgICBqYyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQg Ki8KKyAgICBkZWJ1ZyhGMTExLCJIUC1VWCA5LjAgam9iIGNvbnRyb2wiLCJqYyIsamMpOworI2Vs c2UKKyNpZmRlZiBIUFVYMTAKKyAgICBqYyA9IDE7CQkJCS8qIEpDIGFsbG93ZWQgKi8KKyAgICBk ZWJ1ZyhGMTExLCJIUC1VWCAxMC4wIGpvYiBjb250cm9sIiwiamMiLGpjKTsKKyNlbHNlCisgICAg amMgPSAwOwkJCQkvKiBKQyBub3QgYWxsb3dlZCAqLworICAgIGRlYnVnKEYxMTEsImpvYiBjb250 cm9sIGNhdGNoLWFsbCIsImpjIixqYyk7CisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyog SFBVWDkgKi8KKyNlbmRpZiAvKiBPWE9TICovCisjZW5kaWYgLyogU1ZSM0pDICovCisjZW5kaWYg LyogQlNENCAqLworI2VuZGlmIC8qIFNWUjRPUlBPU0lYICovCisjZW5kaWYgLyogQlNENDQgKi8K KyNlbmRpZiAvKiBOT0pDICovCisgICAgZGVidWcoRjEwMSwiY29uYmd0IGpjIiwiIixqYyk7Cisj aWZuZGVmIE5PSkMKKyAgICBkZWJ1ZyhGMTAxLCJjb25iZ3QgamNzaGVsbCIsIiIsamNzaGVsbCk7 CisvKgorICBBdCB0aGlzIHBvaW50LCBpZiBqYyA9PSAxIGJ1dCBqY3NoZWxsID09IDAsIGl0IG1l YW5zIHRoYXQgdGhlIE9TIHN1cHBvcnRzCisgIGpvYiBjb250cm9sLCBidXQgdGhlIHNoZWxsIG9y IG90aGVyIHByb2Nlc3Mgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgZG9lcyBub3QKKyAgKGpjc2hlbGwg aXMgc2V0IGluIHN5c2luaXQoKSkgYW5kIHNvIGlmIHdlIHN1c3BlbmQgb3Vyc2VsdmVzLCBub3Ro aW5nIGdvb2QKKyAgd2lsbCBjb21lIG9mIGl0LiAgU28uLi4KKyovCisgICAgaWYgKGpjIDwgMCkg amMgPSAwOworICAgIGlmIChqYyA+IDAgJiYgamNzaGVsbCA9PSAwKSBqYyA9IDA7CisjZW5kaWYg LyogTk9KQyAqLworCisvKgorICBBbm90aGVyIGJhY2tncm91bmQgdGVzdC4KKyAgVGVzdCBpZiBT SUdJTlQgKHRlcm1pbmFsIGludGVycnVwdCkgaXMgc2V0IHRvIFNJR19JR04gKGlnbm9yZSksCisg IHdoaWNoIGlzIGRvbmUgYnkgdGhlIHNoZWxsIChzaCkgaWYgdGhlIHByb2dyYW0gaXMgc3RhcnRl ZCB3aXRoICcmJy4KKyAgVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBOT1QgZG9uZSBieSBjc2ggb3Ig a3NoIHNvIHdhdGNoIG91dCEKKyAgTm90ZSwgaXQncyBzYWZlIHRvIHNldCBTSUdJTlQgdG8gU0lH X0lHTiBoZXJlLCBiZWNhdXNlIGZ1cnRoZXIgZG93bgorICB3ZSBhbHdheXMgc2V0IGl0IHRvIHNv bWV0aGluZyBlbHNlLgorICBOb3RlOiBhcyBvZiAxNiBKdWwgMTk5OSwgd2UgYWxzbyBza2lwIHRo aXMgdGVzdCBpZiB3ZSBzZXQgU0lHSU5UIHRvCisgIFNJR19JR04gb3Vyc2VsdmVzLgorKi8KKyAg ICBpZiAoeCA8IDAgJiYgIWZsYWcgJiYgIXNpZ2ludF9pZ24pIHsgLyogRGlkbid0IGdldCBnb29k IHJlc3VsdHMgYWJvdmUuLi4gKi8KKworCVNJR1RZUCAoKm9zaWdpbnQpKCk7CisKKwlvc2lnaW50 ID0gc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsJLyogV2hhdCBpcyBTSUdJTlQgc2V0IHRvPyAqLwor CXNpZ2ludF9pZ24gPSAxOworCXggPSAob3NpZ2ludCA9PSBTSUdfSUdOKSA/IDEgOiAwOwkvKiBT SUdfSUdOPyAqLworCS8qIGRlYnVnKEYxMDEsImNvbmJndCBvc2lnaW50IiwiIixvc2lnaW50KTsg Ki8KKwkvKiBkZWJ1ZyhGMTAxLCJjb25iZ3Qgc2lnbmFsIHRlc3QiLCIiLHgpOyAqLworICAgIH0K KworLyogQWxzbyBjaGVjayB0byBzZWUgaWYgd2UncmUgcnVubmluZyB3aXRoIHJlZGlyZWN0ZWQg c3RkaW8uICovCisvKiBUaGlzIGlzIG5vdCByZWFsbHkgYmFja2dyb3VuZCBvcGVyYXRpb24sIGJ1 dCB3ZSB3YW50IHRvIGFjdCBhcyB0aG91Z2ggKi8KKy8qIGl0IHdlcmUuICovCisKKyNpZmRlZiBJ S1NECisgICAgaWYgKGluc2VydmVyKSB7CQkJLyogSW50ZXJuZXQgS2VybWl0IFNlcnZlciAqLwor CWJhY2tncmQgPSAwOwkJCS8qIGlzIG5vdCBpbiB0aGUgYmFja2dyb3VuZCAqLworCXJldHVybjsK KyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgeSA9IChpc2F0dHkoMCkgJiYgaXNhdHR5 KDEpKSA/IDEgOiAwOworICAgIGRlYnVnKEYxMDEsImNvbmJndCBpc2F0dHkgdGVzdCIsIiIseSk7 CisKKyNpZmRlZiBCU0QyOQorLyogVGhlIHByb2Nlc3MgZ3JvdXAgYW5kL29yIHNpZ25hbCB0ZXN0 IGRvZXNuJ3Qgd29yayB1bmRlciB0aGVzZS4uLiAqLworICAgIGJhY2tncmQgPSAheTsKKyNlbHNl CisjaWZkZWYgc3hhRTUwCisgICAgYmFja2dyZCA9ICF5OworI2Vsc2UKKyNpZmRlZiBNSU5JWAor ICAgIGJhY2tncmQgPSAheTsKKyNlbHNlCisjaWZkZWYgTUlOSVgyCisgICAgYmFja2dyZCA9ICF5 OworI2Vsc2UKKyAgICBpZiAoeCA+IC0xKQorICAgICAgYmFja2dyZCA9ICh4IHx8ICF5KSA/IDEg OiAwOworICAgIGVsc2UgYmFja2dyZCA9ICF5OworI2VuZGlmIC8qIEJTRDI5ICovCisjZW5kaWYg Lyogc3hhRTUwICovCisjZW5kaWYgLyogTUlOSVggKi8KKyNlbmRpZiAvKiBNSU5JWDIgKi8KKyAg ICBkZWJ1ZyhGMTAxLCJjb25iZ3QgYmFja2dyZCIsIiIsYmFja2dyZCk7Cit9CisKKy8qICBDIE8g TiBJIE4gVCAgLS0gIENvbnNvbGUgSW50ZXJydXB0IHNldHRlciAgKi8KKworLyoKKyAgRmlyc3Qg YXJnIGlzIHBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gaGFuZGxlIFNJR1RFUk0gJiBTSUdJTlQgKGxp a2UgQ3RybC1DKS4KKyAgU2Vjb25kIGFyZyBpcyBwb2ludGVyIHRvIGZ1bmN0aW9uIHRvIGhhbmRs ZSBTSUdUU1RQIChzdXNwZW5kKS4KKyovCisKK1ZPSUQJCQkJCS8qIFNldCB0ZXJtaW5hbCBpbnRl cnJ1cHQgdHJhcHMuICovCisjaWZkZWYgQ0tfQU5TSUMKKyNpZmRlZiBhcG9sbG8KK2NvbmludChm LHMpIFNJR1RZUCAoKmYpKCksICgqcykoKTsKKyNlbHNlCitjb25pbnQoU0lHVFlQICgqZikoaW50 KSwgU0lHVFlQICgqcykoaW50KSkKKyNlbmRpZiAvKiBhcG9sbG8gKi8KKyNlbHNlCitjb25pbnQo ZixzKSBTSUdUWVAgKCpmKSgpLCAoKnMpKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNv bmludCAqLyB7CisKKyAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgY29uaXN0YXRlIiwiIixjb25pc3Rh dGUpOworCisgICAgY29uYmd0KDApOwkJCQkvKiBEbyBiYWNrZ3JvdW5kIHRlc3QuICovCisKKy8q IFNldCB0aGUgZGVzaXJlZCBoYW5kbGVycyBmb3IgaGFuZ3VwIGFuZCBzb2Z0d2FyZSB0ZXJtaW5h dGlvbi4gKi8KKworI2lmZGVmIFNJR1RFUk0KKyAgICBzaWduYWwoU0lHVEVSTSxmKTsgICAgICAg ICAgICAgICAgICAvKiBTb2Z0d2FyZSB0ZXJtaW5hdGlvbiAqLworI2VuZGlmIC8qIFNJR1RFUk0g Ki8KKworLyoKKyAgUHJpb3IgdG8gSnVseSAxOTk5IHdlIHVzZWQgdG8gY2FsbCBzaWdodXAoKSBo ZXJlIGJ1dCBub3cgaXQncyBjYWxsZWQgaW4KKyAgc3lzaW5pdCgpIHNvIFNJR0hVUCBjYW4gYmUg Y2F1Z2h0IGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGluaXQgZmlsZSBvcgorICBhIGtlcmJhbmcg c2NyaXB0LgorKi8KKworLyogTm93IGhhbmRsZSBrZXlib2FyZCBzdG9wLCBxdWl0LCBhbmQgaW50 ZXJydXB0IHNpZ25hbHMuICovCisvKiBDaGVjayBpZiBpbnZva2VkIGluIGJhY2tncm91bmQgLS0g aWYgc28gc2lnbmFscyBzZXQgdG8gYmUgaWdub3JlZC4gKi8KKy8qIEhvd2V2ZXIsIGlmIHJ1bm5p bmcgdW5kZXIgYSBqb2IgY29udHJvbCBzaGVsbCwgZG9uJ3QgaWdub3JlIHRoZW0uICovCisvKiBX ZSB3b24ndCBiZSBnZXR0aW5nIGFueSwgYXMgd2UgYXJlbid0IGluIHRoZSB0ZXJtaW5hbCdzIHBy b2Nlc3MgZ3JvdXAuICovCisKKyAgICBkZWJ1ZyhGMTAxLCJjb25pbnQgYmFja2dyZCIsIiIsYmFj a2dyZCk7CisgICAgZGVidWcoRjEwMSwiY29uaW50IGpjIiwiIixqYyk7CisKKyAgICBpZiAoYmFj a2dyZCAmJiAhamMpIHsJCS8qIEluIGJhY2tncm91bmQsIGlnbm9yZSBzaWduYWxzICovCisJZGVi dWcoRjEwMSwiY29uaW50IGJhY2tncm91bmQgaWdub3Jpbmcgc2lnbmFscywgamMiLCIiLGpjKTsK KyNpZmRlZiBTSUdUU1RQCisgICAgICAgIHNpZ25hbChTSUdUU1RQLFNJR19JR04pOyAgICAgICAg LyogS2V5Ym9hcmQgc3RvcCAqLworI2VuZGlmIC8qIFNJR1RTVFAgKi8KKyAgICAgICAgc2lnbmFs KFNJR1FVSVQsU0lHX0lHTik7ICAgICAgICAvKiBLZXlib2FyZCBxdWl0ICovCisgICAgICAgIHNp Z25hbChTSUdJTlQsU0lHX0lHTik7ICAgICAgICAgLyogS2V5Ym9hcmQgaW50ZXJydXB0ICovCisJ c2lnaW50X2lnbiA9IDE7CisJY29uaXN0YXRlID0gQ09OSV9OT0k7CisgICAgfSBlbHNlIHsJCQkJ LyogRWxzZSBpbiBmb3JlZ3JvdW5kIG9yIHN1c3BlbmRlZCAqLworCWRlYnVnKEYxMDEsImNvbmlu dCBmb3JlZ3JvdW5kIGNhdGNoaW5nIHNpZ25hbHMsIGpjIiwiIixqYyk7CisgICAgICAgIHNpZ25h bChTSUdJTlQsZik7ICAgICAgICAgICAgICAgLyogQ2F0Y2ggdGVybWluYWwgaW50ZXJydXB0ICov CisJc2lnaW50X2lnbiA9IChmID09IFNJR19JR04pID8gMSA6IDA7CisKKyNpZmRlZiBTSUdUU1RQ CQkJCS8qIEtleWJvYXJkIHN0b3AgKHN1c3BlbmQpICovCisJLyogZGVidWcoRjEwMSwiY29uaW50 IFNJR1NUU1RQIiwiIixzKTsgKi8KKwlpZiAocyA9PSBOVUxMKSBzID0gU0lHX0RGTDsKKyNpZmRl ZiBOT0pDCQkJCS8qIE5vIGpvYiBjb250cm9sIGFsbG93ZWQuICovCisJc2lnbmFsKFNJR1RTVFAs U0lHX0lHTik7CisjZWxzZQkJCQkJLyogSm9iIGNvbnRyb2wgYWxsb3dlZCAqLworCWlmIChqYykJ CQkJLyogaWYgYXZhaWxhYmxlLiAqLworCSAgc2lnbmFsKFNJR1RTVFAscyk7CisJZWxzZQorCSAg c2lnbmFsKFNJR1RTVFAsU0lHX0lHTik7CisjZW5kaWYgLyogTk9KQyAqLworI2VuZGlmIC8qIFNJ R1RTVFAgKi8KKworI2lmbmRlZiBPWE9TCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZuZGVmIEZJT05S RUFECQkJLyogV2F0Y2ggb3V0LCB3ZSBkb24ndCBrbm93IHRoaXMuLi4gKi8KKyNpZm5kZWYgU0VM RUNUCisjaWZuZGVmIENLX1BPTEwKKyNpZm5kZWYgUkRDSEsKKyAgICAgICAgc2lnbmFsKFNJR1FV SVQsZXNjdHJwKTsgICAgICAgICAvKiBRdWl0IHNpZ25hbCwgU3lzIElJSS9WLiAqLworI2VuZGlm IC8qIFJEQ0hLICovCisjZW5kaWYgLyogQ0tfUE9MTCAqLworI2VuZGlmIC8qIFNFTEVDVCAqLwor I2VuZGlmIC8qIEZJT05SRUFEICovCisgICAgICAgIGlmIChjb25lc2MpIGNvbmVzYyA9IDA7ICAg ICAgICAgLyogQ2xlYXIgb3V0IHBlbmRpbmcgZXNjYXBlcyAqLworI2Vsc2UKKyNpZmRlZiBWNwor ICAgICAgICBzaWduYWwoU0lHUVVJVCxlc2N0cnApOyAgICAgICAgIC8qIFY3IGxpa2UgU3lzIElJ SS9WICovCisgICAgICAgIGlmIChjb25lc2MpIGNvbmVzYyA9IDA7CisjZWxzZQorI2lmZGVmIGFl Z2lzCisgICAgICAgIHNpZ25hbChTSUdRVUlULGYpOyAgICAgICAgICAgICAgLyogQXBvbGxvLCBj YXRjaCBpdCBsaWtlIG90aGVycy4gKi8KKyNlbHNlCisgICAgICAgIHNpZ25hbChTSUdRVUlULFNJ R19JR04pOyAgICAgICAgLyogT3RoZXJzLCBpZ25vcmUgbGlrZSA0RCAmIGVhcmxpZXIuICovCisj ZW5kaWYgLyogYWVnaXMgKi8KKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAq LworI2VuZGlmIC8qIE9YT1MgKi8KKwljb25pc3RhdGUgPSBDT05JX0lOVDsKKyAgICB9Cit9CisK KworLyogIEMgTyBOIE4gTyBJICAtLSAgUmVzZXQgY29uc29sZSB0ZXJtaW5hbCBpbnRlcnJ1cHRz ICovCisKK1ZPSUQKK2Nvbm5vaSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBD b25zb2xlLW5vLWludGVycnVwdHMgKi8KKworICAgIGRlYnVnKEYxMDEsImNvbm5vaSBjb25pc3Rh dGUiLCIiLGNvbmlzdGF0ZSk7CisjaWZkZWYgU0lHVFNUUAorICAgIHNpZ25hbChTSUdUU1RQLFNJ R19JR04pOwkJLyogU3VzcGVuZCAqLworI2VuZGlmIC8qIFNJR1RTVFAgKi8KKyAgICBjb25pbnQo U0lHX0lHTixTSUdfSUdOKTsJCS8qIEludGVycnVwdCAqLworICAgIHNpZ2ludF9pZ24gPSAxOwkJ CS8qIFJlbWVtYmVyIHdlIGRpZCB0aGlzIG91cnNlbHZlcyAqLworI2lmZGVmIFNJR1FVSVQKKyAg ICBzaWduYWwoU0lHUVVJVCxTSUdfSUdOKTsJCS8qIFF1aXQgKi8KKyNlbmRpZiAvKiBTSUdRVUlU ICovCisjaWZkZWYgU0lHVEVSTQorICAgIHNpZ25hbChTSUdURVJNLFNJR19JR04pOwkJLyogVGVy bSAqLworI2VuZGlmIC8qIFNJR1RFUk0gKi8KKyAgICBjb25pc3RhdGUgPSBDT05JX05PSTsKK30K KworLyogIEkgTiBJIFQgUiBBIFcgUSAgLS0gIFNldCB1cCB0byByZWFkIC9kZXYva21lbSBmb3Ig Y2hhcmFjdGVyIGNvdW50LiAgKi8KKworI2lmZGVmICBWNworLyoKKyBVc2VkIGluIFZlcnNpb24g NyB0byBzaW11bGF0ZSBCZXJrZWxleSdzIEZJT05SRUFEIGlvY3RsIGNhbGwuICBUaGlzCisgZWxp bWluYXRlcyBibG9ja2luZyBvbiBhIHJlYWQsIGJlY2F1c2Ugd2UgY2FuIHJlYWQgL2Rldi9rbWVt IHRvIGdldCB0aGUKKyBudW1iZXIgb2YgY2hhcmFjdGVycyBhdmFpbGFibGUgZm9yIHJhdyBpbnB1 dC4gIElmIHlvdXIgc3lzdGVtIGNhbid0Cisgb3IgeW91IHdvbid0IGxldCB0aGUgd29ybGQgcmVh ZCAvZGV2L2ttZW0gdGhlbiB5b3UgbXVzdCBmaWd1cmUgb3V0IGEKKyBkaWZmZXJlbnQgd2F5IHRv IGRvIHRoZSBjb3VudGluZyBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSwgb3IgZWxzZSByZXBsYWNl CisgdGhpcyBieSBhIGR1bW15IGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgMC4KKyovCisv KgorICogQ2FsbCB0aGlzIHJvdXRpbmUgYXM6IGluaXRyYXdxKHR0eSkKKyAqIHdoZXJlIHR0eSBp cyB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgdGVybWluYWwuICBJdCB3aWxsIHJldHVybgorICog KGFzIGEgY2hhciAqKSB0aGUga2VybmVsLW1vZGUgbWVtb3J5IGFkZHJlc3Mgb2YgdGhlIHJhd3Eg Y2hhcmFjdGVyCisgKiBjb3VudCwgd2hpY2ggbWF5IHRoZW4gYmUgcmVhZC4gIEl0IGhhcyB0aGUg c2lkZS1lZmZlY3Qgb2YgZmx1c2hpbmcKKyAqIGlucHV0IG9uIHRoZSB0ZXJtaW5hbC4KKyAqLwor LyoKKyAqIEpvaG4gTWFja2luLCBQaHlzaW9sb2d5IERlcHQuLCBVbml2ZXJzaXR5IG9mIFN5ZG5l eSAoQXVzdHJhbGlhKQorICogLi4uIWRlY3ZheCFtdWxnYSFwaHlzaW9sLnN1Lm96IWpvaG4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhp cyBjb2RlLCBhcworICogbG9uZyBhcyB0aGlzIGNvbW1lbnQgaXMgcmV0YWluZWQgdW5tb2RpZmll ZCBhbmQgbm8gY29tbWVyY2lhbAorICogYWR2YW50YWdlIGlzIGdhaW5lZC4KKyAqLworI2lmbmRl ZiBNSU5JWAorI2lmbmRlZiBNSU5JWDIKKyNpZm5kZWYgQ09IRVJFTlQKKyNpbmNsdWRlIDxhLm91 dC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyNlbmRp ZiAvKiBNSU5JWDIgKi8KKyNlbmRpZiAvKiBNSU5JWCAqLworCisjaWZkZWYgQ09IRVJFTlQKKyNp bmNsdWRlIDxsLm91dC5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYgLyogQ09IRVJF TlQgKi8KKworY2hhciAqCitpbml0cmF3cSh0dHkpIGludCB0dHk7IHsKKyNpZmRlZiBNSU5JWAor ICAgIHJldHVybigwKTsKKyNlbHNlCisjaWZkZWYgTUlOSVgyCisgICAgcmV0dXJuKDApOworI2Vs c2UKKyNpZmRlZiBVVFMyNAorICAgIHJldHVybigwKTsKKyNlbHNlCisjaWZkZWYgQlNEMjkKKyAg ICByZXR1cm4oMCk7CisjZWxzZQorICAgIGxvbmcgbHNlZWsoKTsKKyAgICBzdGF0aWMgc3RydWN0 IG5saXN0IG5sW10gPSB7CisgICAgICAgIHtQUk9DTkFNRX0sCisgICAgICAgIHtOUFJPQ05BTUV9 LAorICAgICAgICB7IiJ9CisgICAgfTsKKyAgICBzdGF0aWMgc3RydWN0IHByb2MgKnBwOworICAg IGNoYXIgKnFhZGRyLCAqcCwgYzsKKyAgICBpbnQgbTsKKyAgICBQSURfVCBwaWQsIG1lOworICAg IE5QVFlQRSB4cHJvYzsgICAgICAgICAgICAgICAgICAgICAgIC8qIEl0cyB0eXBlIGlzIGRlZmlu ZWQgaW4gbWFrZWZpbGUuICovCisgICAgaW50IGNhdGNoKCk7CisKKyAgICBtZSA9IGdldHBpZCgp OworICAgIGlmICgobSA9IG9wZW4oIi9kZXYva21lbSIsIDApKSA8IDApIGVycigia21lbSIpOwor ICAgIG5saXN0KEJPT1ROQU1FLCBubCk7CisgICAgaWYgKG5sWzBdLm5fdHlwZSA9PSAwKSBlcnIo InByb2MgYXJyYXkiKTsKKworICAgIGlmIChubFsxXS5uX3R5cGUgPT0gMCkgZXJyKCJucHJvYyIp OworCisgICAgbHNlZWsobSwgKGxvbmcpKG5sWzFdLm5fdmFsdWUpLCAwKTsKKyAgICByZWFkICht LCAmeHByb2MsIHNpemVvZih4cHJvYykpOworICAgIHNhdmFsID0gc2lnbmFsKFNJR0FMUk0sIGNh dGNoKTsKKyAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gMCkgeworICAgICAgICB3aGlsZSgxKQor ICAgICAgICAgICAgcmVhZCh0dHksICZjLCAxKTsKKyAgICB9CisgICAgYWxhcm0oMik7CisKKyAg ICBpZihzZXRqbXAoampidWYpID09IDApIHsKKyAgICAgICAgd2hpbGUoMSkKKwkgIHJlYWQodHR5 LCAmYywgMSk7CisgICAgfQorICAgIHNpZ25hbChTSUdBTFJNLCBTSUdfREZMKTsKKworI2lmZGVm IERJUkVDVAorICAgIHBwID0gKHN0cnVjdCBwcm9jICopIG5sWzBdLm5fdmFsdWU7CisjZWxzZQor ICAgIGlmIChsc2VlayhtLCAobG9uZykobmxbMF0ubl92YWx1ZSksIDApIDwgMEwpIGVycigic2Vl ayIpOworICAgIGlmIChyZWFkKG0sICZwcCwgc2l6ZW9mKHBwKSkgIT0gc2l6ZW9mKHBwKSkgIGVy cigibm8gcmVhZCBvZiBwcm9jIHB0ciIpOworI2VuZGlmCisgICAgbHNlZWsobSwgKGxvbmcpKG5s WzFdLm5fdmFsdWUpLCAwKTsKKyAgICByZWFkKG0sICZ4cHJvYywgc2l6ZW9mKHhwcm9jKSk7CisK KyAgICBpZiAobHNlZWsobSwgKGxvbmcpcHAsIDApIDwgMEwpIGVycigiQ2FuJ3Qgc2VlayB0byBw cm9jIik7CisgICAgaWYgKChwID0gbWFsbG9jKHhwcm9jICogc2l6ZW9mKHN0cnVjdCBwcm9jKSkp ID09IE5VTEwpIGVycigibWFsbG9jIik7CisgICAgaWYgKHJlYWQobSxwLHhwcm9jICogc2l6ZW9m KHN0cnVjdCBwcm9jKSkgIT0geHByb2Mqc2l6ZW9mKHN0cnVjdCBwcm9jKSkKKyAgICAgICAgZXJy KCJyZWFkIHByb2MgdGFibGUiKTsKKyAgICBmb3IgKHBwID0gKHN0cnVjdCBwcm9jICopcDsgeHBy b2MgPiAwOyAtLXhwcm9jLCArK3BwKSB7CisgICAgICAgIGlmIChwcCAtPiBwX3BpZCA9PSAoc2hv cnQpIHBpZCkgZ290byBpb3V0OworICAgIH0KKyAgICBlcnIoIm5vIHN1Y2ggcHJvYyIpOworCitp b3V0OgorICAgIGNsb3NlKG0pOworICAgIHFhZGRyID0gKGNoYXIgKikocHAgLT4gcF93Y2hhbik7 CisgICAgZnJlZSAocCk7CisgICAga2lsbChwaWQsIFNJR0tJTEwpOworICAgIHdhaXQoKFdBSVRf VCAqKTApOworICAgIHJldHVybiAocWFkZHIpOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2Vu ZGlmCit9CisKKy8qICBNb3JlIFY3LXN1cHBvcnQgZnVuY3Rpb25zLi4uICAqLworCitzdGF0aWMg Vk9JRAorZXJyKHMpIGNoYXIgKnM7IHsKKyAgICBjaGFyIGJ1ZlsyMDBdOworCisgICAgY2ttYWtt c2coYnVmLDIwMCwiZmF0YWwgZXJyb3IgaW4gaW5pdHJhd3E6ICIsIHMsIE5VTEwsIE5VTEwpOwor ICAgIHBlcnJvcihidWYpOworICAgIGRvZXhpdCgxLC0xKTsKK30KKworc3RhdGljIFZPSUQKK2Nh dGNoKGZvbykgaW50IGZvbzsgeworICAgIGxvbmdqbXAoampidWYsIC0xKTsKK30KKworCisvKiAg RyBFIE4gQiBSIEsgIC0tICBTaW11bGF0ZSBhIG1vZGVtIGJyZWFrLiAgKi8KKworI2lmZGVmIE1J TklYCisjZGVmaW5lIEJTUEVFRCBCMTEwCisjZWxzZQorI2lmZGVmIE1JTklYMgorI2RlZmluZSBC U1BFRUQgQjExMAorI2Vsc2UKKyNkZWZpbmUgQlNQRUVEIEIxNTAKKyNlbmRpZiAvKiBNSU5JWDIg Ki8KKyNlbmRpZiAvKiBNSU5JWCAqLworCisjaWZuZGVmIE1JTklYMgorVk9JRAorZ2VuYnJrKGZu LG1zZWMpIGludCBmbiwgbXNlYzsgeworICAgIHN0cnVjdCBzZ3R0eWIgdHRidWY7CisgICAgaW50 IHJldCwgc29zcGVlZCwgeCwgeTsKKworICAgIHJldCA9IGlvY3RsKGZuLCBUSU9DR0VUUCwgJnR0 YnVmKTsKKyAgICBzb3NwZWVkID0gdHRidWYuc2dfb3NwZWVkOworICAgIHR0YnVmLnNnX29zcGVl ZCA9IEJTUEVFRDsKKyAgICByZXQgPSBpb2N0bChmbiwgVElPQ1NFVFAsICZ0dGJ1Zik7CisgICAg eSA9IChpbnQpc3RybGVuKGJybnVscyk7CisgICAgeCA9ICggQlNQRUVEICogMTAwICkgLyBtc2Vj OworICAgIGlmICh4ID4geSkgeCA9IHk7CisgICAgcmV0ID0gd3JpdGUoZm4sIGJybnVscywgKCgg QlNQRUVEICogMTAwICkgLyBtc2VjICkpOworICAgIHR0YnVmLnNnX29zcGVlZCA9IHNvc3BlZWQ7 CisgICAgcmV0ID0gaW9jdGwoZm4sIFRJT0NTRVRQLCAmdHRidWYpOworICAgIHJldCA9IHdyaXRl KGZuLCAiQCIsIDEpOworICAgIHJldHVybjsKK30KKyNlbmRpZiAvKiBNSU5JWDIgKi8KKworI2lm ZGVmIE1JTklYMgoraW50CitnZW5icmsoZm4sbXNlYykgaW50IGZuLCBtc2VjOyB7CisgICAgc3Ry dWN0IHRlcm1pb3MgdHRidWY7CisgICAgaW50IHJldCwgeCwgeTsKKyAgICBzcGVlZF90IHNvc3Bl ZWQ7CisKKyAgICByZXQgPSB0Y2dldGF0dHIoZm4sICZ0dGJ1Zik7CisgICAgc29zcGVlZCA9IHR0 YnVmLmNfb3NwZWVkOworICAgIHR0YnVmLmNfb3NwZWVkID0gQlNQRUVEOworICAgIHJldCA9IHRj c2V0YXR0cihmbixUQ1NBRFJBSU4sICZ0dGJ1Zik7CisgICAgeSA9IChpbnQpc3RybGVuKGJybnVs cyk7CisgICAgeCA9ICggQlNQRUVEICogMTAwICkgLyBtc2VjOworICAgIGlmICh4ID4geSkgeCA9 IHk7CisgICAgcmV0ID0gd3JpdGUoZm4sIGJybnVscywgKCggQlNQRUVEICogMTAwICkgLyBtc2Vj ICkpOworICAgIHR0YnVmLmNfb3NwZWVkID0gc29zcGVlZDsKKyAgICByZXQgPSB0Y3NldGF0dHIo Zm4sIFRDU0FEUkFJTiwgJnR0YnVmKTsKKyAgICByZXQgPSB3cml0ZShmbiwgIkAiLCAxKTsKKyAg ICByZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIE1JTklYMiAqLworI2VuZGlmIC8qIFY3ICovCisK Ky8qCisgIEkgTiBDIEggSyAgLS0gIENoZWNrIGlmIGNoYXJzIHdhaXRpbmcgdG8gYmUgcmVhZCBv biBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuCisKKyAgVGhpcyByb3V0aW5lIGlzIGEgbWVyZ2VyIG9m IHR0Y2hrKCkgYW5kIGNvbmNoaygpLgorICBDYWxsIHdpdGg6CisgICAgY2hhbm5lbCA9PSAwIHRv IGNoZWNrIGNvbnNvbGUuCisgICAgY2hhbm5lbCA9PSAxIHRvIGNoZWNrIGNvbW11bmljYXRpb25z IGNvbm5lY3Rpb24uCisgIGFuZDoKKyAgICBmZCA9IGZpbGUgZGVzY3JpcHRvci4KKyAgUmV0dXJu czoKKyAgID49IDA6IG51bWJlciBvZiBjaGFyYWN0ZXJzIHdhaXRpbmcsIDAgb3IgZ3JlYXRlciwK KyAgICAgLTE6IG9uIGFueSBraW5kIG9mIGVycm9yLAorICAgICAtMjogaWYgdGhlcmUgaXMgKGRl ZmluaXRlbHkpIG5vIGNvbm5lY3Rpb24uCisgIE5vdGU6IEluIFVOSVggd2UgZG9uJ3QgaGF2ZSB0 byBjYWxsIG5ldHRjaGsoKSBiZWNhdXNlIGEgc29ja2V0CisgIGZpbGUgZGVzY3JpcHRvciB3b3Jr cyBqdXN0IGxpa2UgaW4gc2VyaWFsIGkvbywgaW9jdGxzIGFuZCBhbGwuCisgIChCdXQgdGhpcyB3 aWxsIGNoYW5nZSBpZiB3ZSBhZGQgbm9uLWZpbGUtZGVzY3JpcHRvciBjaGFubmVscywKKyAgc3Vj aCBhcyBJQk0gWC4yNSBmb3IgQUlYLi4uKQorKi8KK3N0YXRpYyBpbnQKK2luX2NoayhjaGFubmVs LCBmZCkgaW50IGNoYW5uZWwsIGZkOyB7CisgICAgaW50IHgsIG4gPSAwOwkJCS8qIFdvcmtlcnMs IG4gPSByZXR1cm4gdmFsdWUgKi8KKyAgICBleHRlcm4gaW50IGNsc29uZGlzYzsJCS8qIENsb3Nl IG9uIGRpc2Nvbm5lY3QgKi8KKy8qCisgIFRoZSBmaXJzdCBzZWN0aW9uIGNoZWNrcyB0byBtYWtl IHN1cmUgd2UgaGF2ZSBhIGNvbm5lY3Rpb24sCisgIGJ1dCBvbmx5IGlmIHdlJ3JlIGluIGxvY2Fs IG1vZGUuCisqLworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMTEs ImluX2NoayBlbnRyeSIsY2tpdG9hKGZkKSxjaGFubmVsKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsg dHR5ZmQiLCIiLHR0eWZkKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgdHRwdHkiLCIiLHR0cHR5KTsK KyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKy8qCisgIEJ1dCBkb24ndCBzYXkgY29ubmVjdGlv biBpcyBnb25lIGlmIHdlIGhhdmUgYW55IGJ1ZmZlcmVkLXN0dWZmLgorKi8KKyNpZmRlZiBUVExF QlVGCisgICAgZGVidWcoRjEwMSwiaW5fY2hrIHR0cHVzaCIsIiIsdHRwdXNoKTsKKyAgICBpZiAo Y2hhbm5lbCA9PSAxKSB7CisJaWYgKHR0cHVzaCA+PSAwKQorCSAgbisrOworCW4gKz0gbGVfaW5i dWYoKTsKKwlpZiAobiA+IDApCisJICByZXR1cm4obik7CisgICAgfQorI2VuZGlmIC8qIFRUTEVC VUYgKi8KKworI2lmZGVmIE5FVFBUWQorI2lmZGVmIEhBVkVfUFRZVFJBUAorICAgIC8qIFNwZWNp YWwgaGFuZGxpbmcgZm9yIEhQLVVYIHB0eSBpL28gKi8KKyAgICBpZiAodHRwdHkgJiYgcHR5X3Ry YXBfcGVuZGluZyh0dHlmZCkgPiAwKSB7CisgICAgICAgIGlmIChwdHlfdHJhcF9oYW5kbGVyKHR0 eWZkKSA+IDApIHsKKyAgICAgICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgICAgIHJldHVybigt Mik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogSEFWRV9QVFlUUkFQICovCisjZW5kaWYg LyogTkVUUFRZICovCisKKyAgICBpZiAoY2hhbm5lbCkgewkJCS8qIENoZWNraW5nIGNvbW11bmlj YXRpb25zIGNoYW5uZWwgKi8KKwlpZiAodHR5ZmQgPCAwKSB7CQkvKiBObyBjb25uZWN0aW9uICov CisJICByZXR1cm4oLTIpOwkJCS8qIFRoYXQncyB3aGF0IHRoaXMgbWVhbnMgKi8KKwl9IGVsc2Ug aWYgKHhsb2NhbCAmJgkJLyogSW4gbG9jYWwgbW9kZSAqLworCQkgICAoIW5ldGNvbm4JCS8qIFNl cmlhbCBjb25uZWN0aW9uIG9yICovCisjaWZkZWYgVE5fQ09NUE9SVAorCQkgICAgfHwgaXN0bmNv bXBvcnQoKSAgICAvKiBUZWxuZXQgQ29tIFBvcnQgKi8KKyNlbmRpZiAvKiBUTl9DT01QT1JUICov CisJCSAgICkgJiYgdHRjYXJyICE9IENBUl9PRkYgLyogd2l0aCBDQVJSSUVSIFdBVENIIE9OIChv ciBBVVRPKSAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBNWVJFQUQKKy8qCisgIFNlZW1zIGxp a2UgdGhpcyB3b3VsZCBiZSBhIGdvb2QgaWRlYSBidXQgaXQgcHJldmVudHMgQy1LZXJtaXQgZnJv bQorICBwb3BwaW5nIGJhY2sgdG8gdGhlIHByb21wdCBhdXRvbWF0aWNhbGx5IHdoZW4gY2Fycmll ciBkcm9wcy4gIEhvd2V2ZXIsCisgIGNvbW1lbnRpbmcgdGhpcyBvdXQgcHJldmVudHMgdXMgZnJv bSBzZWVpbmcgdGhlIE5PIENBUlJJRVIgbWVzc2FnZS4KKyAgTmVlZHMgbW9yZSB3b3JrLi4uCisq LworCQkgICAmJiBteV9jb3VudCA8IDEJLyogTm90aGluZyBpbiBvdXIgaW50ZXJuYWwgYnVmZmVy ICovCisjZW5kaWYgLyogTVlSRUFEICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkgICApIHsK KwkgICAgaW50IHg7CisJICAgIHggPSB0dGdtZG0oKTsJCS8qIFNvIGdldCBtb2RlbSBzaWduYWxz ICovCisJICAgIGRlYnVnKEYxMDEsImluX2NoayBjbG9zZS1vbi1kaXNjb25uZWN0IiwiIixjbHNv bmRpc2MpOworCSAgICBpZiAoeCA+IC0xKSB7CQkvKiBDaGVjayBmb3IgY2FycmllciAqLworCQlp ZiAoISh4ICYgQk1fRENEKSkgewkvKiBObyBjYXJyaWVyICovCisJCSAgICBkZWJ1ZyhGMTAxLCJp bl9jaGsgY2FycmllciBsb3N0IiwiIix4KTsKKwkJICAgIGlmIChjbHNvbmRpc2MpCS8qIElmICJj bG9zZS1vbi1kaXNjb25uZWN0IiAqLworCQkgICAgICB0dGNsb3MoMCk7CS8qIGNsb3NlIGRldmlj ZSAmIHJlbGVhc2UgbG9jay4gKi8KKwkJICAgIHJldHVybigtMik7CQkvKiBUaGlzIG1lYW5zICJk aXNjb25uZWN0ZWQiICovCisJCX0KKwkgICAgLyogSW4gY2FzZSBJL08gdG8gZGV2aWNlIGFmdGVy IENEIGRyb3BwZWQgYWx3YXlzIGZhaWxzICovCisJICAgIC8qIGFzIGluIERlYmlhbiBMaW51eCAy LjEgYW5kIFVuaXh3YXJlIDIuMS4uLiAqLworCSAgICB9IGVsc2UgeworCSAgICAgICAgZGVidWco RjEwMSwiaW5fY2hrIHR0Z21kbSBJL08gZXJyb3IiLCIiLGVycm5vKTsKKwkgICAgICAgIGRlYnVn KEYxMDEsImluX2NoayB0dGdtZG0gZ290c2lncyIsIiIsZ290c2lncyk7CisJICAgICAgICBpZiAo Z290c2lncykgewkJLyogSWYgd2UgZ290IHNpZ25hbHMgYmVmb3JlLi4uICovCisJCSAgICBpZiAo ZXJybm8gPT0gNSB8fCBlcnJubyA9PSA2KSB7IC8qIEkvTyBlcnJvciBldGMgKi8KKwkJICAgICAg ICBpZiAoY2xzb25kaXNjKQkvKiBsaWtlIHdoZW4gbW9kZW0gaGFuZ3MgdXAgKi8KKwkJCSAgdHRj bG9zKDApOworCQkJcmV0dXJuKC0yKTsKKwkJICAgIH0KKwkJfQorCQkvKiBJZiB3ZSBuZXZlciBn b3QgbW9kZW0gc2lnbmFscyBzdWNjZXNzZnVsbHkgb24gdGhpcyAqLworCQkvKiBjb25uZWN0aW9u IGJlZm9yZSwgd2UgY2FuJ3QgY29uY2x1ZGUgdGhhdCBUSElTIGZhaWx1cmUgKi8KKwkJLyogbWVh bnMgdGhlIGNvbm5lY3Rpb24gd2FzIGxvc3QuICovCisJCXJldHVybigwKTsKKwkgICAgfQorCX0K KyAgICB9CisKKy8qIFdlIHNlZW0gdG8gaGF2ZSBhIGNvbm5lY3Rpb24gc28gbm93IHNlZSBpZiBh bnkgYnl0ZXMgYXJlIHdhaXRpbmcgb24gaXQgKi8KKworI2lmZGVmIENLX1NTTAorICAgIGlmIChz c2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSB7CisgICAgICAgIG4gKz0gU1NMX3Bl bmRpbmcoc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2Nvbik7CisgICAgICAgIGRlYnVnKEYx MDEsImluX2NoayBTU0xfcGVuZGluZyIsIiIsbik7CisgICAgICAgIGlmIChuIDwgMCkgeworICAg ICAgICAgICAgdHRjbG9zKDApOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfSBl bHNlIGlmIChuID4gMCkgeworICAgICAgICAgICAgcmV0dXJuKG4pOworICAgICAgICB9CisgICAg fQorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFJMT0dDT0RFCisjaWZkZWYgQ0tfS0VSQkVS T1MKKyAgICAvKiBJdCBpcyBub3Qgc2FmZSB0byByZWFkIGFueSBkYXRhIHdoZW4gdXNpbmcgZW5j cnlwdGVkIEtsb2dpbiAqLworICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5w cm90byA9PSBOUF9FSzVMT0dJTikgeworI2lmZGVmIEtSQjQKKyAgICAgICAgaWYgKHR0bnByb3Rv ID09IE5QX0VLNExPR0lOKSB7CisgICAgICAgICAgICBuICs9IGtyYjRfZGVzX2F2YWlsKHR0eWZk KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImluX2NoayBrcmI0X2Rlc19hdmFpbCIsIiIsbik7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorICAgICAgICBpZiAo dHRucHJvdG8gPT0gTlBfRUs1TE9HSU4pIHsKKyAgICAgICAgICAgIG4gKz0ga3JiNV9kZXNfYXZh aWwodHR5ZmQpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiaW5fY2hrIGtyYjVfZGVzX2F2YWls IiwiIixuKTsKKyAgICAgICAgfQorI2lmZGVmIEtSQjVfVTJVCisgICAgICAgIGlmICh0dG5wcm90 byA9PSBOUF9LNVUyVSkgeworICAgICAgICAgICAgbiArPSBrcmI1X3UydV9hdmFpbCh0dHlmZCk7 CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsga3JiNV9kZXNfYXZhaWwiLCIiLG4pOwor ICAgICAgICB9CisjZW5kaWYgLyogS1JCNV9VMlUgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisgICAg ICAgIGlmIChuIDwgMCkJCQkvKiBJcyB0aGlzIHJpZ2h0PyAqLworCSAgcmV0dXJuKC0xKTsKKyAg ICAgICAgZWxzZQorCSAgcmV0dXJuKG4pOworICAgIH0KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LworI2VuZGlmIC8qIFJMT0dDT0RFICovCisKKyAgICBlcnJubyA9IDA7CQkJCS8qIFJlc2V0IHRo aXMgc28gd2UgbG9nIGdvb2QgaW5mbyAqLworI2lmZGVmIEZJT05SRUFECisgICAgeCA9IGlvY3Rs KGZkLCBGSU9OUkVBRCwgJm4pOwkvKiBCU0QgYW5kIGxvdHMgb2Ygb3RoZXJzICovCisjaWZkZWYg REVCVUcJCQkJLyogKHRoZSBtb3JlIHRoZSBiZXR0ZXIpICovCisgICAgaWYgKGRlYmxvZykgewor CWRlYnVnKEYxMDEsImluX2NoayBGSU9OUkVBRCByZXR1cm4gY29kZSIsIiIseCk7CisJZGVidWco RjEwMSwiaW5fY2hrIEZJT05SRUFEIGNvdW50IiwiIixuKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsg RklPTlJFQUQgZXJybm8iLCIiLGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNl bHNlIC8qIEZJT05SRUFEIG5vdCBkZWZpbmVkICovCisvKgorICBIZXJlLCBpZiAobmV0Y29ubiAm JiB0dG5ldCA9PSBORVRfVENQQiksIHdlIG1pZ2h0IHRyeSBjYWxsaW5nIHJlY3Ztc2coKQorICB3 aXRoIGZsYWdzIE1TR19QRUVLfE1TR19ET05UV0FJVCBvbiB0aGUgc29ja2V0ICh0dHlmZCksIGV4 Y2VwdCB0aGlzIGlzIG5vdAorICBwb3J0YWJsZSAoTVNHX0RPTlRXQUlUIGlzbid0IGRlZmluZWQg aW4gYW55IG9mIHRoZSA8c3lzL3NvY2tldC5oPiBmaWxlcworICB0aGF0IEkgbG9va2VkIGF0LCBi dXQgaXQgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGNhbGwgZnJvbSBibG9ja2luZyksIGFuZAor ICB0aGUgbXNnaGRyIHN0cnVjdCBkaWZmZXJzIGZyb20gcGxhY2UgdG8gcGxhY2UsIHNvIHdlIHdv dWxkIG5lZWQgYW5vdGhlcgorICBhdmFsYW5jaGUgb2YgaWZkZWZzLiAgU3RpbGwsIHdoZW4gRklP TlJFQUQgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBpcyB0aGUKKyAgb25seSBvdGhlciBrbm93biBt ZXRob2Qgb2YgYXNraW5nIHRoZSBPUyBmb3IgdGhlICpudW1iZXIqIG9mIGNoYXJhY3RlcnMKKyAg YXZhaWxhYmxlIGZvciByZWFkaW5nLgorKi8KKyNpZmRlZiBWNwkJCQkvKiBVTklYIFY3OiBsb29r IGluIGtlcm5lbCBtZW1vcnkgKi8KKyNpZmRlZiBNSU5JWAorICAgIG4gPSAwOwkJCQkvKiBCdXQg bm90IGluIE1JTklYICovCisjZWxzZQorI2lmZGVmIE1JTklYMgorICAgIG4gPSAwOworI2Vsc2UK KyAgICBsc2VlayhrbWVtW1RUWV0sIChsb25nKSBxYWRkcltUVFldLCAwKTsgLyogN3RoIEVkaXRp b24gVW5peCAqLworICAgIHggPSByZWFkKGttZW1bVFRZXSwgJm4sIHNpemVvZihpbnQpKTsKKyAg ICBpZiAoeCAhPSBzaXplb2YoaW50KSkKKyAgICAgIG4gPSAwOworI2VuZGlmIC8qIE1JTklYMiAq LworI2VuZGlmIC8qIE1JTklYICovCisjZWxzZSAvKiBOb3QgVjcgKi8KKyNpZmRlZiBQUk9WWDEK KyAgICB4ID0gaW9jdGwoZmQsIFRJT0NRQ05ULCAmdHRidWYpOwkvKiBERUMgUHJvLzN4eCBWZW5p eCBWLjEgKi8KKyAgICBuID0gdHRidWYuc2dfaXNwZWVkICYgMDM3NzsJCS8qIENpcmNhIDE5ODQg Ki8KKyAgICBpZiAoeCA8IDApIG4gPSAwOworI2Vsc2UKKyNpZmRlZiBNWVJFQUQKKy8qCisgIEhl cmUgd2Ugc2tpcCBhbGwgdGhlIHVuZGVwZW5kYWJsZSBhbmQgZXhwZW5zaXZlIGNhbGxzIGJlbG93 IGlmIHdlCisgIGFscmVhZHkgaGF2ZSBzb21ldGhpbmcgaW4gb3VyIGludGVybmFsIGJ1ZmZlci4g IFRoaXMgdGVuZHMgdG8gd29yayBxdWl0ZQorICBuaWNlbHksIHNvIHRoZSBvbmx5IHJlYWxseSBi YWQgY2FzZSByZW1haW5pbmcgaXMgdGhlIG9uZSBpbiB3aGljaCBuZWl0aGVyCisgIEZJT05SRUFE IG9yIE1ZUkVBRCBhcmUgZGVmaW5lZCwgd2hpY2ggaXMgaW5jcmVhc2luZ2x5IHJhcmUgdGhlc2Ug ZGF5cy4KKyovCisgICAgaWYgKGNoYW5uZWwgIT0gMCAmJiBteV9jb3VudCA+IDApIHsKKwlkZWJ1 ZyhGMTAxLCJpbl9jaGsgYnVmIG15X2NvdW50IiwiIixteV9jb3VudCk7CisJbiA9IG15X2NvdW50 OwkJCS8qIG4gd2FzIDAgYmVmb3JlIHdlIGdvdCBoZXJlICovCisJcmV0dXJuKG4pOworICAgIH0K KyNlbmRpZiAvKiBNWVJFQUQgKi8KKy8qCisgIHJkY2hrKCksIHNlbGVjdCgpLCBhbmQgcG9sbCgp IHRlbGwgdXMgKmlmKiBkYXRhIGlzIGF2YWlsYWJsZSB0byBiZSByZWFkLCBidXQKKyAgbm90IGhv dyBtdWNoLCBzbyB0aGVzZSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGEgZmluYWwgcmVzb3J0LiAg RXNwZWNpYWxseQorICBzaW5jZSB0aGVzZSBjYWxscyB0ZW5kIHRvIGFkZCBhIGxvdCBvdmVyaGVh ZC4KKyovCisjaWZkZWYgUkRDSEsJCQkJLyogVGhpcyBtb3N0bHkgU0NPLXNwZWNpZmljICovCisg ICAgbiA9IHJkY2hrKGZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJpbl9jaGsgcmRjaGsiLCIiLG4pOwor I2Vsc2UgLyogTm8gUkRDSEsgKi8KKyNpZmRlZiBTRUxFQ1QKKyNpZmRlZiBQbGFuOQorICAgIC8q IE9ubHkgYWxsb3dzIHNlbGVjdCBvbiB0aGUgY29uc29sZSAuLi4gZG9uJ3QgYXNrICovCisgICAg aWYgKGNoYW5uZWwgPT0gMCkKKyNlbmRpZiAvKiBQbGFuOSAqLworICAgICAgeworCWZkX3NldCBy ZmRzOwkJCS8qIFJlYWQgZmlsZSBkZXNjcmlwdG9ycyAqLworI2lmZGVmIEJFTExWMTAKKwlGRF9a RVJPKHJmZHMpOwkJCS8qIEluaXRpYWxpemUgdGhlbSAqLworCUZEX1NFVChmZCxyZmRzKTsJCS8q IFdlIHdhbnQgdG8gbG9vayBhdCB0aGlzIGZkICovCisjZWxzZQorCUZEX1pFUk8oJnJmZHMpOwkJ CS8qIEluaXRpYWxpemUgdGhlbSAqLworCUZEX1NFVChmZCwmcmZkcyk7CQkvKiBXZSB3YW50IHRv IGxvb2sgYXQgdGhpcyBmZCAqLworCXR2LnR2X3NlYyA9IHR2LnR2X3VzZWMgPSAwTDsJLyogQSAw LXZhbHVlZCB0aW1ldmFsIHN0cnVjdHVyZSAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyNpZmRl ZiBQbGFuOQorCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZk X3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImluX2NoayBQbGFuIDkgc2VsZWN0IiwiIixu KTsKKyNlbHNlCisjaWZkZWYgQkVMTFYxMAorCW4gPSBzZWxlY3QoIDEyOCwgcmZkcywgKGZkX3Nl dCAqKTAsIChmZF9zZXQgKikwLCAwICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIEJFTExWMTAgc2Vs ZWN0IiwiIixuKTsKKyNlbHNlCisjaWZkZWYgQlNENDQKKwluID0gc2VsZWN0KCBGRF9TRVRTSVpF LCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAxLCJp bl9jaGsgQlNENDQgc2VsZWN0IiwiIixuKTsKKyNlbHNlCisjaWZkZWYgQlNENDMKKwluID0gc2Vs ZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsK KwlkZWJ1ZyhGMTAxLCJpbl9jaGsgQlNENDMgc2VsZWN0IiwiIixuKTsKKyNlbHNlCisjaWZkZWYg U09MQVJJUworCW4gPSBzZWxlY3QoIEZEX1NFVFNJWkUsICZyZmRzLCAoZmRfc2V0ICopMCwgKGZk X3NldCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImluX2NoayBTT0xBUklTIHNlbGVjdCIsIiIs bik7CisjZWxzZQorI2lmZGVmIFFOWDYKKwluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywg KGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgUU5Y NiBzZWxlY3QiLCIiLG4pOworI2Vsc2UKKyNpZmRlZiBRTlgKKwluID0gc2VsZWN0KCBGRF9TRVRT SVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAx LCJpbl9jaGsgUU5YIHNlbGVjdCIsIiIsbik7CisjZWxzZQorI2lmZGVmIENPSEVSRU5UCisJbiA9 IHNlbGVjdCggRkRfU0VUU0laRSwgJnJmZHMsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2 ICk7CisJZGVidWcoRjEwMSwiaW5fY2hrIENPSEVSRU5UIHNlbGVjdCIsIiIsbik7CisjZWxzZQor I2lmZGVmIFNWUjQKKwluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAmcmZkcywgKGZkX3NldCAqKTAs IChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgU1ZSNCBzZWxlY3QiLCIi LG4pOworI2Vsc2UKKyNpZmRlZiBfX2xpbnV4X18KKwluID0gc2VsZWN0KCBGRF9TRVRTSVpFLCAm cmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAxLCJpbl9j aGsgTElOVVggc2VsZWN0IiwiIixuKTsKKyNpZmRlZiBPU0YKKwluID0gc2VsZWN0KCBGRF9TRVRT SVpFLCAmcmZkcywgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdHYgKTsKKwlkZWJ1ZyhGMTAx LCJpbl9jaGsgT1NGIHNlbGVjdCIsIiIsbik7CisjZWxzZQorCW4gPSBzZWxlY3QoIEZEX1NFVFNJ WkUsICZyZmRzLCAoaW50ICopMCwgKGludCAqKTAsICZ0diApOworCWRlYnVnKEYxMDEsImluX2No ayBjYXRjaGFsbCBzZWxlY3QiLCIiLG4pOworI2VuZGlmIC8qIE9TRiAqLworI2VuZGlmIC8qIF9f bGludXhfXyAqLworI2VuZGlmIC8qIFNWUjQgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2Vu ZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIFFOWDYgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisj ZW5kaWYgLyogQlNENDMgKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIEJFTExWMTAg Ki8KKyNlbmRpZiAvKiBQbGFuOSAqLworICAgIH0KKyNlbHNlICAvKiBOb3QgU0VMRUNUICovCisj aWZkZWYgQ0tfUE9MTAorICAgIHsKKyAgICAgIHN0cnVjdCBwb2xsZmQgcGZkOworCisgICAgICBw ZmQuZmQgPSBmZDsKKyAgICAgIHBmZC5ldmVudHMgPSBQT0xMSU47CisgICAgICBwZmQucmV2ZW50 cyA9IDA7CisgICAgICBuID0gcG9sbCgmcGZkLCAxLCAwKTsKKyAgICAgIGRlYnVnKEYxMDEsImlu X2NoayBwb2xsIiwiIixuKTsKKyAgICAgIGlmICgobiA+IDApICYmIChwZmQucmV2ZW50cyAmIFBP TExJTikpCisJbiA9IDE7CisgICAgfQorI2VuZGlmIC8qIENLX1BPTEwgKi8KKyNlbmRpZiAvKiBT RUxFQ1QgKi8KKyNlbmRpZiAvKiBSRENISyAqLworI2VuZGlmIC8qIFBST1ZYMSAqLworI2VuZGlm IC8qIFY3ICovCisjZW5kaWYgLyogRklPTlJFQUQgKi8KKworLyogRnJvbSBoZXJlIGRvd24sIHRy ZWF0IGNvbnNvbGUgYW5kIGNvbW11bmljYXRpb24gZGV2aWNlIGRpZmZlcmVudGx5Li4uICovCisK KyAgICBpZiAoY2hhbm5lbCA9PSAwKSB7CQkJLyogQ29uc29sZSAqLworCisjaWZkZWYgU1ZPUlBP U0lYCisjaWZuZGVmIEZJT05SRUFECisjaWZuZGVmIFNFTEVDVAorI2lmbmRlZiBDS19QT0xMCisj aWZuZGVmIFJEQ0hLCisvKgorICBUaGlzIGlzIHRoZSBoaWRlb3VzIGhhY2sgdXNlZCBpbiBTeXN0 ZW0gViBhbmQgUE9TSVggc3lzdGVtcyB0aGF0IGRvbid0CisgIHN1cHBvcnQgRklPTlJFQUQsIHJk Y2hrKCksIHNlbGVjdCgpLCBwb2xsKCksIGV0YywgaW4gd2hpY2ggdGhlIHVzZXIncworICBDT05O RUNULW1vZGUgZXNjYXBlIGNoYXJhY3RlciBpcyBhdHRhY2hlZCB0byBTSUdRVUlULiAgVXNlZCwg b2J2aW91c2x5LAorICBvbmx5IG9uIHRoZSBjb25zb2xlLgorKi8KKwlpZiAoY29uZXNjKSB7CQkJ LyogRXNjYXBlIGNoYXJhY3RlciB0eXBlZCA9PSBTSUdRVUlUICovCisJICAgIGRlYnVnKEYxMDAs ImluX2NoayBjb25lc2MiLCIiLGNvbmVzYyk7CisJICAgIGNvbmVzYyA9IDA7CisJICAgIHNpZ25h bChTSUdRVUlULGVzY3RycCk7CS8qIFJlc3RvcmUgc2lnbmFsICovCisJICAgIG4gKz0gMTsKKwl9 CisjZW5kaWYgLyogUkRDSEsgKi8KKyNlbmRpZiAvKiBDS19QT0xMICovCisjZW5kaWYgLyogU0VM RUNUICovCisjZW5kaWYgLyogRklPTlJFQUQgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKwor CXJldHVybihuKTsJCQkvKiBEb25lIHdpdGggY29uc29sZSAqLworICAgIH0KKworICAgIGlmIChj aGFubmVsICE9IDApIHsJCQkvKiBDb21tdW5pY2F0aW9ucyBjb25uZWN0aW9uICovCisKKyNpZmRl ZiBNWVJFQUQKKyNpZm5kZWYgRklPTlJFQUQKKy8qCisgIHNlbGVjdCgpIG9yIHJkY2hrKCksIGV0 YywgaGFzIHRvbGQgdXMgdGhhdCBzb21ldGhpbmcgaXMgd2FpdGluZywgYnV0IHdlCisgIGRvbid0 IGtub3cgaG93IG11Y2guICBTbyB3ZSBkbyBhIHJlYWQgdG8gZ2V0IGl0IGFuZCB0aGVuIHdlIGtu b3cuICBOb3RlOgorICBUaGlzIHJlYWQgaXMgTk9UIG5vbmJsb2NraW5nIGlmIG5vdGhpbmcgaXMg dGhlcmUgKGJlY2F1c2Ugb2YgVk1JTj0xKSwgYnV0CisgIGl0IHNob3VsZCBiZSBzYWZlIGluIHRo aXMgY2FzZSBzaW5jZSB0aGUgT1MgdGVsbHMgdXMgYXQgbGVhc3Qgb25lIGJ5dGUgaXMKKyAgd2Fp dGluZyB0byBiZSByZWFkLCBhbmQgTVlSRUFEIHJlYWRzIHJldHVybiBhcyBtdWNoIGFzIGlzIHRo ZXJlIHdpdGhvdXQKKyAgd2FpdGluZyBmb3IgYW55IG1vcmUuICBDb250cm9sbGVkIHRlc3RzIG9u IFNvbGFyaXMgYW5kIFVuaXh3YXJlICh3aXRoCisgIEZJT05SRUFEIGRlbGliZXJhdGVseSB1bmRl ZmluZWQpIHNob3cgdGhpcyB0byBiZSB0cnVlLgorKi8KKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgcmVh ZCBteV9jb3VudCIsIiIsbXlfY291bnQpOworCWRlYnVnKEYxMDEsImluX2NoayByZWFkIG4iLCIi LG4pOworCWlmIChuID4gMCAmJiBteV9jb3VudCA9PSAwKSB7CisJICAgIC8qIFRoaXMgYWxzbyBj YXRjaGVzIGRpc2Nvbm5lY3RzIGV0YyAqLworCSAgICAvKiBEbyB3aGF0IG15Z2V0YnVmIGRvZXMg ZXhjZXB0IGRvbid0IGdyYWIgYSBjaGFyYWN0ZXIgKi8KKwkgICAgbXlfY291bnQgPSBteWZpbGxi dWYoKTsKKwkgICAgbXlfaXRlbSA9IC0xOwkJLyogXl5eICovCisJICAgIGRlYnVnKEYxMDEsImlu X2NoayBteWZpbGxidWYgbXlfY291bnQiLCIiLG15X2NvdW50KTsKKwkgICAgaWYgKG15X2NvdW50 IDwgMCkKKwkgICAgICByZXR1cm4oLTEpOworCSAgICBlbHNlCisJICAgICAgbiA9IDA7CQkJLyog TkI6IG4gaXMgcmVwbGFjZWQgYnkgbXlfY291bnQgKi8KKwl9CisjZW5kaWYgLyogRklPTlJFQUQg Ki8KKy8qCisgIEhlcmUgd2UgYWRkIHdoYXRldmVyIHdlIHRoaW5rIGlzIHVucmVhZCB0byB3aGF0 IGlzIHN0aWxsIGluIG91cgorICBvdXIgaW50ZXJuYWwgYnVmZmVyLiAgVGh1cyB0aGUgaW1wb3J0 YW5jZSBvZiBzZXR0aW5nIG4gdG8gMCBqdXN0IGFib3ZlLgorKi8KKwlkZWJ1ZyhGMTAxLCJpbl9j aGsgbXlfY291bnQiLCIiLG15X2NvdW50KTsKKwlkZWJ1ZyhGMTAxLCJpbl9jaGsgbiIsIiIsbik7 CisJaWYgKG15X2NvdW50ID4gMCkKKwkgIG4gKz0gbXlfY291bnQ7CisjZW5kaWYgLyogTVlSRUFE ICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsImluX2NoayByZXN1bHQiLCIiLG4pOworCisgICAg LyogRXJyb3JzIGhlcmUgZG9uJ3QgcHJvdmUgdGhlIGNvbm5lY3Rpb24gaGFzIGRyb3BwZWQgc28g anVzdCBzYXkgMCAqLworCisgICAgcmV0dXJuKG4gPCAwID8gMCA6IG4pOworfQorCisKKy8qICBU IFQgQyBIIEsgIC0tICBUZWxsIGhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcgaW4gdHR5 IGlucHV0IGJ1ZmZlciAgKi8KKworaW50Cit0dGNoaygpIHsKKyAgICBpbnQgZmQ7CisjaWZkZWYg TkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsKKyAgICBlbHNlCisjZW5k aWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworICAgIHJldHVybihpbl9jaGsoMSxm ZCkpOworfQorCisvKiAgVCBUIFggSSBOICAtLSAgR2V0IG4gY2hhcmFjdGVycyBmcm9tIHR0eSBp bnB1dCBidWZmZXIgICovCisKKy8qICBSZXR1cm5zIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVh bGx5IGdvdHRlbiwgb3IgLTEgb24gZmFpbHVyZSAgKi8KKworLyogIEludGVuZGVkIGZvciB1c2Ug b25seSB3aGVuIGl0IGlzIGtub3duIHRoYXQgbiBjaGFyYWN0ZXJzIGFyZSBhY3R1YWxseSAqLwor LyogIEF2YWlsYWJsZSBpbiB0aGUgaW5wdXQgYnVmZmVyLiAgKi8KKworaW50Cit0dHhpbihuLGJ1 ZikgaW50IG47IENIQVIgKmJ1ZjsgeworICAgIHJlZ2lzdGVyIGludCB4ID0gMCwgYyA9IC0yOwor I2lmZGVmIFRUTEVCVUYKKyAgICByZWdpc3RlciBpbnQgaSA9IDA7CisjZW5kaWYgLyogVFRMRUJV RiAqLworICAgIGludCBmZDsKKworICAgIGlmIChuIDwgMSkJCQkJLyogTm90aGluZyB0byBkbyAq LworICAgICAgcmV0dXJuKDApOworCisjaWZkZWYgVFRMRUJVRgorICAgIGlmICh0dHB1c2ggPj0g MCkgeworICAgICAgICBidWZbMF0gPSB0dHB1c2g7CQkvKiBQdXQgcHVzaGVkIGNoYXIgaW4gYnVm ZmVyKi8KKyAgICAgICAgdHRwdXNoID0gLTE7CQkJLyogQ2xlYXIgdGhlIHB1c2ggYnVmZmVyICov CisgICAgICAgIGlmICh0dGNoaygpID4gMCkKKwkgIHJldHVybih0dHhpbihuLTEsICZidWZbMV0p ICsgMSk7CisgICAgICAgIGVsc2UKKwkgIHJldHVybigxKTsKKyAgICB9CisgICAgaWYgKGxlX2Rh dGEpIHsKKyAgICAgICAgd2hpbGUgKGxlX2luYnVmKCkgPiAwKSB7CisJICAgIGlmIChsZV9nZXRj aGFyKCZidWZbaV0pKSB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIG4t LTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodHRjaGsoKSA+IDApCisJ ICByZXR1cm4odHR4aW4obiwmYnVmW2ldKStpKTsKKyAgICAgICAgZWxzZQorCSAgcmV0dXJuKGkp OworICAgIH0KKyNlbmRpZiAvKiBUVExFQlVGICovCisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAo dHRwaXBlKQorICAgICAgZmQgPSBmZGluOworICAgIGVsc2UKKyNlbmRpZiAvKiBORVRDTUQgKi8K KyAgICAgIGZkID0gdHR5ZmQ7CisKKyNpZmRlZiBTVU5YMjUKKyAgICBpZiAobmV0Y29ubiAmJiAo dHRuZXQgPT0gTkVUX1NYMjUpKQkvKiBYLjI1IGNvbm5lY3Rpb24gKi8KKyAgICAgIHJldHVybih4 MjV4aW4obixidWYpKTsKKyNlbmRpZiAvKiBTVU5YMjUgKi8KKworI2lmZGVmIElCTVgyNQorICAg IC8qIHJpZWhtOiBwb3NzaWJseSBub3QgbmVlZGVkLiBUZXN0IHdvcmtlZCB3aXRoIG5vcm1hbCBy ZWFkcyBhbmQgd3JpdGVzICovCisgICAgaWYgKG5ldGNvbm4gJiYgKHR0bmV0ID09IE5FVF9JWDI1 KSkJeyAvKiBYLjI1IGNvbm5lY3Rpb24gKi8KKwl4ID0geDI1eGluKG4sYnVmKTsKKwlpZiAoeCA+ IDApIGJ1Zlt4XSA9ICdcMCc7CisJcmV0dXJuKHgpOworICAgIH0KKyNlbmRpZiAvKiBJQk1YMjUg Ki8KKworI2lmZGVmIE1ZUkVBRAorICAgIGRlYnVnKEYxMDEsInR0eGluIE1ZUkVBRCIsIiIsbik7 CisgICAgd2hpbGUgKHggPCBuKSB7CisJYyA9IG15cmVhZCgpOworCWlmIChjIDwgMCkgeworCSAg ICBkZWJ1ZyhGMTAxLCJ0dHhpbiBteXJlYWQgcmV0dXJucyIsIiIsYyk7CisJICAgIGlmIChjID09 IC0zKSB4ID0gLTE7CisJICAgIGJyZWFrOworICAgICAgICB9CisJYnVmW3grK10gPSBjICYgdHRw bXNrOworI2lmZGVmIFJMT0dDT0RFCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgLyogSXQg aXMgaW1wb3NzaWJsZSB0byBrbm93IGhvdyBtYW55IGNoYXJhY3RlcnMgYXJlIHdhaXRpbmcgKi8K KyAgICAgICAgLyogdG8gYmUgcmVhZCB3aGVuIHlvdSBhcmUgdXNpbmcgRW5jcnlwdGVkIFJsb2dp biBvciBTU0wgICAgKi8KKyAgICAgICAgLyogYXMgdGhlIHRyYW5zcG9ydCBzaW5jZSB0aGUgbnVt YmVyIG9mIHJlYWwgZGF0YSBieXRlcyAgICAgKi8KKyAgICAgICAgLyogY2FuIGJlIGdyZWF0ZXIg b3IgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb24gdGhlICAgKi8KKyAgICAgICAgLyog d2lyZSB3aGljaCBpcyB3aGF0IHR0Y2hrKCkgcmV0dXJucy4gICAgICAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgaWYgKG5ldGNvbm4gJiYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0 bnByb3RvID09IE5QX0VLNUxPR0lOKSkKKwkgIGlmICh0dGNoaygpIDw9IDApCisJICAgIGJyZWFr OworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRl ZiBDS19TU0wKKyAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcp CisJICBpZiAodHRjaGsoKSA8PSAwKQorCSAgICBicmVhazsKKyNlbmRpZiAvKiBDS19TU0wgKi8K KyAgICB9CisjZWxzZQorICAgIGRlYnVnKEYxMDEsInR0eGluIFJFQUQiLCIiLG4pOworICAgIHgg PSByZWFkKGZkLGJ1ZixuKTsKKyAgICBmb3IgKGMgPSAwOyBjIDwgbjsgYysrKQkJLyogU3RyaXAg YW55IHBhcml0eSAqLworICAgICAgYnVmW2NdICY9IHR0cG1zazsKKyNlbmRpZiAvKiBNWVJFQUQg Ki8KKworICAgIGRlYnVnKEYxMDEsInR0eGluIHgiLCIiLHgpOwkJLyogRG9uZSAqLworICAgIGlm ICh4ID4gMCkgYnVmW3hdID0gJ1wwJzsKKyAgICBpZiAoeCA8IDApIHggPSAtMTsKKyAgICByZXR1 cm4oeCk7Cit9CisKKy8qICBUIFQgTyBMICAtLSAgV3JpdGUgc3RyaW5nIHMsIGxlbmd0aCBuLCB0 byBjb21tdW5pY2F0aW9uIGRldmljZS4gICovCisvKgorICBSZXR1cm5zOgorICAgPj0gMCBvbiBz dWNjZXNzLCBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3R1YWxseSB3cml0dGVuLgorICAgLTEgb24g ZmFpbHVyZS4KKyovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorQ0hBUiAqIHhwYWNrZXQgPSBOVUxM OworaW50IG54cGFja2V0ID0gMDsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisKKyNkZWZp bmUgVFRPTE1BWFQgNQoraW50Cit0dG9sKHMsbikgaW50IG47IENIQVIgKnM7IHsKKyAgICBpbnQg eCwgbGVuLCB0cmllcywgZmQ7CisjaWZkZWYgQ0tYWENIQVIKKyAgICBleHRlcm4gaW50IGRibGZs YWc7CQkJLyogRm9yIFNFVCBTRU5EIERPVUJMRS1DSEFSQUNURVIgKi8KKyAgICBleHRlcm4gc2hv cnQgZGJsdFtdOworICAgIENIQVIgKnAgPSBOVUxMLCAqcDIsICpzMiwgYzsKKyAgICBpbnQgbjIg PSAwOworI2VuZGlmIC8qIENLWFhDSEFSICovCisKKyAgICBpZiAodHR5ZmQgPCAwKQkJCS8qIE5v dCBvcGVuPyAqLworICAgICAgcmV0dXJuKC0zKTsKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJs b2cpIHsKKwkvKiBkZWJ1ZyhGMTAxLCJ0dG9sIHR0eWZkIiwiIix0dHlmZCk7ICovCisJY2toZXhk dW1wKCJ0dG9sIHMiLHMsbik7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBO RVRDTUQKKyAgICBpZiAodHRwaXBlKQorICAgICAgZmQgPSBmZG91dDsKKyAgICBlbHNlCisjZW5k aWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisjaWZkZWYgQ0tYWENIQVIKKy8q ICBEb3VibGUgYW55IGNoYXJhY3RlcnMgdGhhdCBtdXN0IGJlIGRvdWJsZWQuICAqLworICAgIGRl YnVnKEYxMDEsInR0b2wgZGJsZmxhZyIsIiIsZGJsZmxhZyk7CisgICAgaWYgKGRibGZsYWcpIHsK KwlwID0gKENIQVIgKikgbWFsbG9jKG4gKyBuICsgMSk7CisJaWYgKHApIHsKKwkgICAgczIgPSBz OworCSAgICBwMiA9IHA7CisJICAgIG4yID0gMDsKKwkgICAgd2hpbGUgKCpzMikgeworCQljID0g KnMyKys7CisJCSpwMisrID0gYzsKKwkJbjIrKzsKKwkJaWYgKGRibHRbKHVuc2lnbmVkKSBjXSAm IDIpIHsKKwkJICAgICpwMisrID0gYzsKKwkJICAgIG4yKys7CisJCX0KKwkgICAgfQorCSAgICBz ID0gcDsKKwkgICAgbiA9IG4yOworCSAgICBzW25dID0gJ1wwJzsKKwl9CisjaWZkZWYgREVCVUcK KyAgICAgICAgY2toZXhkdW1wKCJ0dG9sIGRvdWJsZWQgcyIscyxuKTsKKyNlbmRpZiAvKiBERUJV RyAqLworICAgIH0KKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworCisgICAgdHJpZXMgPSBUVE9MTUFY VDsJCQkvKiBBbGxvdyB1cCB0byB0aGlzIG1hbnkgdHJpZXMgKi8KKyAgICBsZW4gPSBuOwkJCQkv KiBSZW1lbWJlciBvcmlnaW5hbCBsZW5ndGggKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKy8q CisgIFRoaXMgaXMgdG8gYXZvaWQgZW5jcnlwdGluZyBhIHBhY2tldCB0aGF0IGlzIGFscmVhZHkg ZW5jcnlwdGVkLCBlLmcuCisgIHdoZW4gd2UgcmVzZW5kIGEgcGFja2V0IGRpcmVjdGx5IG91dCBv ZiB0aGUgcGFja2V0IGJ1ZmZlciwgYW5kIGFsc28gdG8KKyAgYXZvaWQgZW5jcnlwdGluZyBhIGNv bnN0YW50IChsaXRlcmFsKSBzdHJpbmcsIHdoaWNoIGNhbiBjYXVzZSBhIG1lbW9yeQorICBmYXVs dC4KKyovCisgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpIHsKKwlpbnQgeDsK KwlpZiAobnhwYWNrZXQgPCBuKSB7CisJICAgIGlmICh4cGFja2V0KSB7CisJCWZyZWUoeHBhY2tl dCk7CisJCXhwYWNrZXQgPSBOVUxMOworCQlueHBhY2tldCA9IDA7CisJICAgIH0KKwkgICAgeCA9 IG4gPiAxMDI0MCA/IG4gOiAxMDI0MDsKKwkgICAgeHBhY2tldCA9IChDSEFSICopbWFsbG9jKHgp OworCSAgICBpZiAoIXhwYWNrZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsInR0b2wgbWFsbG9jIGZh aWx1cmVcbiIpOworCQlyZXR1cm4oLTEpOworCSAgICB9IGVsc2UKKwkgICAgICBueHBhY2tldCA9 IHg7CisJfQorCW1lbWNweSgoY2hhciAqKXhwYWNrZXQsKGNoYXIgKilzLG4pOworCXMgPSB4cGFj a2V0OworCWNrX3RuX2VuY3J5cHQoKGNoYXIgKilzLG4pOworICAgIH0KKyNlbmRpZiAvKiBDS19F TkNSWVBUSU9OICovCisKKyAgICB3aGlsZSAobiA+IDAgJiYKKwkgICAodHJpZXMtLSA+IDAKKyNp ZmRlZiBDS19FTkNSWVBUSU9OCisJICAgIC8qIGtlZXAgdHJ5aW5nIGlmIHdlIGFyZSBlbmNyeXB0 aW5nICovCisJICAgIHx8IFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikKKyNlbmRpZiAvKiBD S19FTkNSWVBUSU9OICovCisgICAgICAgICAgICApKSB7CQkJLyogQmUgcGVyc2lzdGVudCAqLwor CWRlYnVnKEYxMDEsInR0b2wgdHJ5IiwiIixUVE9MTUFYVCAtIHRyaWVzKTsKKyNpZmRlZiBCRU9T T1JCRUJPWAorICAgICAgICBpZiAobmV0Y29ubiAmJiAhdHRwaXBlICYmICF0dHB0eSkKKwkgIHgg PSBuZXR0b2woKGNoYXIgKilzLG4pOwkvKiBXcml0ZSBzdHJpbmcgdG8gZGV2aWNlICovCisgICAg ICAgIGVsc2UKKyNlbmRpZiAvKiBCRU9TT1JCRUJPWCAqLworI2lmZGVmIElCTVgyNQorCSAgaWYg KHR0bmV0ID09IE5FVF9JWDI1KQorCSAgICAvKgorCSAgICAgKiB0aGlzIGlzIGEgbW9yZSBjb250 cm9sbGVkIHdheSBvZiB3cml0aW5nIHRvIFgyNQorCSAgICAgKiBTVFJFQU1TLCBob3dldmVyIHdy aXRlIHNob3VsZCBhbHNvIHdvcmshCisJICAgICAqLworCSAgICB4ID0geDI1d3JpdGUodHR5ZmQs IHMsIG4pOworCSAgZWxzZQorI2VuZGlmIC8qIElCTVgyNSAqLworI2lmZGVmIENLX1NTTAorCSAg ICBpZiAoc3NsX2FjdGl2ZV9mbGFnIHx8IHRsc19hY3RpdmVfZmxhZykgeworCQlpbnQgZXJyb3I7 CisJCS8qIFdyaXRlIHVzaW5nIFNTTCAqLworICAgICAgICAgICAgICAgIHNzbF9yZXRyeToKKwkJ aWYgKHNzbF9hY3RpdmVfZmxhZykKKyAgICAgICAgICAgICAgICAgIHggPSBTU0xfd3JpdGUoc3Ns X2Nvbiwgcywgbik7CisJCWVsc2UKKyAgICAgICAgICAgICAgICAgIHggPSBTU0xfd3JpdGUodGxz X2Nvbiwgcywgbik7CisJCXN3aXRjaCAoU1NMX2dldF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3Ns X2Nvbjp0bHNfY29uLHgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToK KyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gbikKKwkJICAgICAgcmV0dXJuKGxlbik7Cisg ICAgICAgICAgICAgICAgICAgIHMgKz0geDsKKyAgICAgICAgICAgICAgICAgICAgbiAtPSB4Owor ICAgICAgICAgICAgICAgICAgICBnb3RvIHNzbF9yZXRyeTsKKwkJICBjYXNlIFNTTF9FUlJPUl9X QU5UX1dSSVRFOgorCQkgIGNhc2UgU1NMX0VSUk9SX1dBTlRfUkVBRDoKKwkJICAgIHggPSAwOwor CQkgICAgYnJlYWs7CisJCSAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAgICAgICAgICAg ICAgICAgaWYgKHggIT0gMCkKKwkJICAgICAgcmV0dXJuKC0xKTsKKwkJICBjYXNlIFNTTF9FUlJP Ul9XQU5UX1g1MDlfTE9PS1VQOgorCQkgIGNhc2UgU1NMX0VSUk9SX1NTTDoKKwkJICBjYXNlIFNT TF9FUlJPUl9aRVJPX1JFVFVSTjoKKwkJICBkZWZhdWx0OgorCQkgICAgdHRjbG9zKDApOworCQkg ICAgcmV0dXJuKC0zKTsKKwkJfQorCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNp ZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtSQjQKKyNpZmRlZiBSTE9HQ09ERQorCSAgICBpZiAo dHRucHJvdG8gPT0gTlBfRUs0TE9HSU4pIHsKKwkJcmV0dXJuKGtyYjRfZGVzX3dyaXRlKHR0eWZk LHMsbikpOworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8qIEtS QjQgKi8KKyNpZmRlZiBLUkI1CisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgICAgIGlmICh0dG5w cm90byA9PSBOUF9FSzVMT0dJTikgeworICAgICAgICAgICAgICAgIHJldHVybihrcmI1X2Rlc193 cml0ZSh0dHlmZCwoY2hhciAqKXMsbiwwKSk7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAv KiBSTE9HQ09ERSAqLworI2lmZGVmIEtSQjVfVTJVCisgICAgICAgICAgICBpZiAodHRucHJvdG8g PT0gTlBfSzVVMlUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4oa3JiNV91MnVfd3JpdGUodHR5 ZmQsKGNoYXIgKilzLG4pKTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIEtSQjVfVTJV ICovCisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisJICAgICAg eCA9IHdyaXRlKGZkLHMsbik7CS8qIFdyaXRlIHN0cmluZyB0byBkZXZpY2UgKi8KKworCWlmICh4 ID09IG4pIHsJCQkvKiBXb3JrZWQ/ICovCisJICAgIGRlYnVnKEYxMDEsInR0b2wgb2siLCIiLHgp OwkvKiBPSyAqLworI2lmZGVmIENLWFhDSEFSCisJICAgIGlmIChwKSBmcmVlKHApOworI2VuZGlm IC8qIENLWFhDSEFSICovCisJICAgIHJldHVybihsZW4pOwkJLyogRG9uZSAqLworCX0gZWxzZSBp ZiAoeCA8IDApIHsJCS8qIE5vLCBnb3QgZXJyb3I/ICovCisJICAgIGRlYnVnKEYxMDEsInR0b2wg d3JpdGUgZXJyb3IiLCIiLGVycm5vKTsKKyNpZmRlZiBFV09VTERCTE9DSworCSAgICBpZiAoZXJy bm8gPT0gRVdPVUxEQkxPQ0spIHsKKwkJbXNsZWVwKDEwKTsKKwkJY29udGludWU7CisJICAgIH0g ZWxzZQorI2VuZGlmIC8qIEVXT1VMREJMT0NLICovCisjaWZkZWYgVENQU09DS0VUCisJICAgIGlm IChuZXRjb25uICYmIHR0bmV0ID09IE5FVF9UQ1BCKSB7CisJCWRlYnVnKEYxMDEsInR0b2wgVENQ IGVycm9yIiwiIixlcnJubyk7CisJCXR0Y2xvcygwKTsJCS8qIENsb3NlIHRoZSBjb25uZWN0aW9u LiAqLworCQl4ID0gLTM7CisJICAgIH0KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBD S1hYQ0hBUgorCSAgICBpZiAocCkgZnJlZShwKTsKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworCSAg ICByZXR1cm4oeCk7CisJfSBlbHNlIHsJCQkvKiBObyBlcnJvciwgc28gcGFydGlhbCBzdWNjZXNz ICovCisJICAgIGRlYnVnKEYxMDEsInR0b2wgcGFydGlhbCIsIiIseCk7IC8qIFRoaXMgbmV2ZXIg aGFwcGVucyAqLworCSAgICBzICs9IHg7CQkJLyogUG9pbnQgdG8gcGFydCBub3Qgd3JpdHRlbiB5 ZXQgKi8KKwkgICAgbiAtPSB4OwkJCS8qIEFkanVzdCBsZW5ndGggKi8KKwkgICAgaWYgKHggPiAw KSBtc2xlZXAoMTApOwkvKiBXYWl0IDEwIG1zZWMgKi8KKwl9CQkJCS8qIEdvIGJhY2sgYW5kIHRy eSBhZ2FpbiAqLworICAgIH0KKyNpZmRlZiBDS1hYQ0hBUgorICAgIGlmIChwKSBmcmVlKHApOwor I2VuZGlmIC8qIENLWFhDSEFSICovCisgICAgcmV0dXJuKG4gPCAxID8gbGVuIDogLTEpOwkJLyog UmV0dXJuIHRoZSByZXN1bHRzICovCit9CisKKy8qICBUIFQgTyBDICAtLSAgT3V0cHV0IGEgY2hh cmFjdGVyIHRvIHRoZSBjb21tdW5pY2F0aW9uIGxpbmUgICovCisKKy8qCisgVGhpcyBmdW5jdGlv biBzaG91bGQgb25seSBiZSB1c2VkIGZvciBpbnRlcmFjdGl2ZSwgY2hhcmFjdGVyLW1vZGUgb3Bl cmF0aW9ucywKKyBsaWtlIHRlcm1pbmFsIGNvbm5lY3Rpb24sIHNjcmlwdCBleGVjdXRpb24sIGRp YWxlciBpL28sIHdoZXJlIHRoZSBvdmVyaGVhZAorIG9mIHRoZSBzaWduYWxzIGFuZCBhbGFybXMg ZG9lcyBub3QgY3JlYXRlIGEgYm90dGxlbmVjay4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQwor dHRvYyhjaGFyIGMpCisjZWxzZQordHRvYyhjKSBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KKy8qIHR0b2MgKi8geworI2RlZmluZSBUVE9DX1RNTyAxNQkJCS8qIFRpbWVvdXQgaW4gY2Fz ZSB3ZSBnZXQgc3R1Y2sgKi8KKyAgICBpbnQgeHgsIGZkOworCisgICAgaWYgKHR0eWZkIDwgMCkJ CQkvKiBDaGVjayBmb3Igbm90IG9wZW4uICovCisgICAgICByZXR1cm4oLTEpOworCisjaWZkZWYg TkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRvdXQ7CisgICAgZWxzZQorI2Vu ZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0dHlmZDsKKworICAgIGMgJj0gMHhmZjsKKyAg ICAvKiBkZWJ1ZyhGMTAxLCJ0dG9jIiwiIiwoQ0hBUikgYyk7ICovCisgICAgc2F2YWwgPSBzaWdu YWwoU0lHQUxSTSx0aW1lcmgpOwkvKiBFbmFibGUgdGltZXIgaW50ZXJydXB0ICovCisgICAgeHgg PSBhbGFybShUVE9DX1RNTyk7CQkvKiBmb3IgdGhpcyBtYW55IHNlY29uZHMuICovCisgICAgaWYg KHh4IDwgMCkgeHggPSAwOwkJCS8qIFNhdmUgb2xkIGFsYXJtIHZhbHVlLiAqLworICAgIC8qIGRl YnVnKEYxMDEsInR0b2MgYWxhcm0iLCIiLHh4KTsgKi8KKyAgICBpZiAoCisjaWZkZWYgQ0tfUE9T SVhfU0lHCisJc2lnc2V0am1wKHNqYnVmLDEpCisjZWxzZQorCXNldGptcChzamJ1ZikKKyNlbmRp ZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkpIHsJCS8qIFRpbWVyIHdlbnQgb2ZmPyAqLworCXR0aW1v ZmYoKTsJCQkvKiBZZXMsIGNhbmNlbCB0aGlzIGFsYXJtLiAqLworCWlmICh4eCAtIFRUT0NfVE1P ID4gMCkgYWxhcm0oeHggLSBUVE9DX1RNTyk7IC8qIFJlc3RvcmUgcHJldmlvdXMgb25lICovCisg ICAgICAgIC8qIGRlYnVnKEYxMDAsInR0b2MgdGltZW91dCIsIiIsMCk7ICovCisjaWZkZWYgTkVU Q09OTgorCWlmICghbmV0Y29ubikgeworI2VuZGlmIC8qIE5FVENPTk4gKi8KKwkgICAgZGVidWco RjEwMSwidHRvYyB0aW1lb3V0IiwiIixjKTsKKwkgICAgaWYgKHR0ZmxvdyA9PSBGTE9fWE9OWCkg eworCQlkZWJ1ZyhGMTAxLCJ0dG9jIGZsb3ciLCIiLHR0Zmxvdyk7IC8qIE1heWJlIHdlJ3JlIHhv ZmYnZCAqLworI2lmbmRlZiBQbGFuOQorI2lmZGVmIFBPU0lYCisJCS8qIFBPU0lYIHdheSB0byB1 bnN0aWNrLiAqLworCQlkZWJ1ZyhGMTAwLCJ0dG9jIHRjZmxvdyIsIiIsdGNmbG93KHR0eWZkLFRD T09OKSk7CisjZWxzZQorI2lmZGVmIEJTRDQJCQkJLyogQmVya2VsZXkgd2F5IHRvIGRvIGl0LiAq LworI2lmZGVmIFRJT0NTVEFSVAorLyogLi4uLiBVc2VkIHRvIGJlICJpb2N0bCh0dHlmZCwgVElP Q1NUQVJULCAwKTsiLiAgV2hvIGtub3dzPyAqLworCQl7CisJCSAgaW50IHggPSAwOworCQkgIGRl YnVnKEYxMDEsInR0b2MgVElPQ1NUQVJUIiwiIixpb2N0bCh0dHlmZCwgVElPQ1NUQVJULCAmeCkp OworCQl9CisjZW5kaWYgLyogVElPQ1NUQVJUICovCisjZW5kaWYgLyogQlNENCAqLworCQkJCQkv KiBJcyB0aGVyZSBhIFN5cyBWIHdheSB0byBkbyB0aGlzPyAqLworI2VuZGlmIC8qIFBPU0lYICov CisjZW5kaWYgLyogUGxhbjkgKi8KKwkgICAgfQorI2lmZGVmIE5FVENPTk4KKyAgICAgICAgfQor I2VuZGlmIC8qIE5FVENPTk4gKi8KKwlyZXR1cm4oLTEpOwkJCS8qIFJldHVybiBmYWlsdXJlIGNv ZGUuICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHJjOworI2lmZGVmIEJFT1NPUkJFQk9Y CisjaWZkZWYgTkVUQ09OTgorICAgICAgICBpZiAobmV0Y29ubiAmJiAhdHRwaXBlICYmICF0dHB0 eSkKKwkgIHJjID0gbmV0dG9jKGMpOworICAgICAgICBlbHNlCisjZW5kaWYgLyogIEJFT1NPUkJF Qk9YICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKwkgIGlm IChURUxPUFRfTUUoVEVMT1BUX0VOQ1JZUFRJT04pKQorCSAgICBja190bl9lbmNyeXB0KCZjLDEp OworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBJQk1YMjUKKwkvKiByaWVobTog bWF5YmUgdGhpcyBpc24ndCBuZWNlc3NhcnkgYWZ0ZXIgYWxsLiBUZXN0IHByb2dyYW0KKwkgKiB3 b3JrZWQgZmluZSB3aXRoIGRhdGEgYmVpbmcgc2VudCBhbmQgcmV0cmlldmVkIHdpdGggbm9ybWFs CisJICogcmVhZCdzIGFuZCB3cml0ZXMhCisJICovCisJaWYgKHR0bmV0ID09IE5FVF9JWDI1KQor CSAgcmMgPSB4MjV3cml0ZSh0dHlmZCwmYywxKTsgLyogYXMgYWJvdmUgZm9yIFgyNSBzdHJlYW1z ICovCisJZWxzZQorI2VuZGlmIC8qIElCTVgyNSAqLworI2lmZGVmIENLX1NTTAorCSAgaWYgKHNz bF9hY3RpdmVfZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpIHsKKwkgICAgICBpbnQgZXJyb3I7CisJ ICAgICAgLyogV3JpdGUgdXNpbmcgU1NMICovCisJICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykK KyAgICAgICAgICAgICAgICByYyA9IFNTTF93cml0ZShzc2xfY29uLCAmYywgMSk7CisJICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24sICZjLCAxKTsKKwkg ICAgICBzd2l0Y2ggKFNTTF9nZXRfZXJyb3Ioc3NsX2FjdGl2ZV9mbGFnP3NzbF9jb246dGxzX2Nv bixyYykpeworCQljYXNlIFNTTF9FUlJPUl9OT05FOgorCQkgIGJyZWFrOworCQljYXNlIFNTTF9F UlJPUl9XQU5UX1dSSVRFOgorCQljYXNlIFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisJCSAgcmMgPSAw OworCQkgIGJyZWFrOworCQljYXNlIFNTTF9FUlJPUl9TWVNDQUxMOgorCQkgIGlmIChyYyAhPSAw KQorCQkgICAgcmV0dXJuKC0xKTsKKwkJY2FzZSBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUDoK KwkJY2FzZSBTU0xfRVJST1JfU1NMOgorCQljYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoKKwkJ ZGVmYXVsdDoKKwkJICB0dGNsb3MoMCk7CisJCSAgcmV0dXJuKC0xKTsKKwkgICAgICB9CisJICB9 IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtS QjQKKyNpZmRlZiBSTE9HQ09ERQorCSAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOKSB7CisJ ICAgICAgcmMgPSAoa3JiNF9kZXNfd3JpdGUodHR5ZmQsKGNoYXIgKikmYywxKSA9PSAxKTsKKwkg IH0gZWxzZQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVm IEtSQjUKKyNpZmRlZiBSTE9HQ09ERQorICAgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9FSzVM T0dJTikgeworICAgICAgICAgICAgICByYyA9IChrcmI1X2Rlc193cml0ZSh0dHlmZCwmYywxLDAp ID09IDEpOworICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYg S1JCNV9VMlUKKyAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKKyAgICAgICAg ICAgICAgcmMgPSAoa3JiNV91MnVfd3JpdGUodHR5ZmQsJmMsMSkgPT0gMSk7CisgICAgICAgICAg fSBlbHNlCisjZW5kaWYgLyogS1JCNV9VMlUgKi8KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KKwkgICAgcmMgPSB3cml0ZShmZCwmYywxKTsJLyogVHJ5IHRvIHdy aXRlIHRoZSBjaGFyYWN0ZXIuICovCisJaWYgKHJjIDwgMSkgewkJCS8qIEZhaWxlZCAqLworCSAg ICB0dGltb2ZmKCk7CQkJLyogVHVybiBvZmYgdGhlIGFsYXJtLiAqLworCSAgICBhbGFybSh4eCk7 CQkJLyogUmVzdG9yZSBwcmV2aW91cyBhbGFybS4gKi8KKwkgICAgZGVidWcoRjEwMSwidHRvYyBl cnJubyIsIiIsZXJybm8pOyAvKiBMb2cgdGhlIGVycm9yLCAqLworCSAgICByZXR1cm4oLTEpOwkJ CS8qIGFuZCByZXR1cm4gdGhlIGVycm9yIGNvZGUuICovCisJfQorICAgIH0KKyAgICB0dGltb2Zm KCk7CQkJCS8qIFN1Y2Nlc3MsIHR1cm4gb2ZmIHRoZSBhbGFybS4gKi8KKyAgICBhbGFybSh4eCk7 CQkJCS8qIFJlc3RvcmUgcHJldmlvdXMgYWxhcm0uICovCisgICAgcmV0dXJuKDApOwkJCQkvKiBS ZXR1cm4gZ29vZCBjb2RlLiAqLworfQorCisvKiAgVCBUIEkgTiBMICAtLSAgUmVhZCBhIHJlY29y ZCAodXAgdG8gYnJlYWsgY2hhcmFjdGVyKSBmcm9tIGNvbW0gbGluZS4gICovCisvKgorICBSZWFk cyB1cCB0byAibWF4IiBjaGFyYWN0ZXJzIGZyb20gdGhlIGNvbm5lY3Rpb24sIHRlcm1pbmF0aW5n IG9uOgorICAgIChhKSB0aGUgcGFja2V0IGxlbmd0aCBmaWVsZCBpZiB0aGUgInR1cm4iIGFyZ3Vt ZW50IGlzIHplcm8sIG9yCisgICAgKGIpIG9uIHRoZSBwYWNrZXQtZW5kIGNoYXJhY3RlciAoZW9s KSBpZiB0aGUgInR1cm4iIGFyZ3VtZW50IGlzIG5vbnplcm8KKyAgICAoYykgYSBjZXJ0YWluIG51 bWJlciBvZiBDdHJsLUMncyBpbiBhIHJvdworCisgIFJldHVybnM6CisgICAgPj0gMCwgdGhlIG51 bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgdXBvbiBzdWNjZXNzOworICAgIC0xIGlmICJtYXgiIGV4 Y2VlZGVkLCB0aW1lb3V0LCBvciBvdGhlciBjb3JyZWN0YWJsZSBlcnJvcjsKKyAgICAtMiBvbiB1 c2VyIGludGVycnVwdGlvbiAoYyk7CisgICAgLTMgb24gZmF0YWwgZXJyb3IgbGlrZSBjb25uZWN0 aW9uIGxvc3QuCisKKyAgVGhlIG5hbWUgb2YgdGhpcyByb3V0aW5lIGRhdGVzIGZyb20gdGhlIGVh cmx5IGRheXMgd2hlbiBLZXJtaXQgcGFja2V0cworICB3ZXJlLCBpbmRlZWQsIGFsd2F5cyBsaW5l cyBvZiB0ZXh0LiAgVGhhdCB3YXMgYmVmb3JlIGNvbnRyb2wtY2hhcmFjdGVyCisgIHVucHJlZml4 aW5nIGFuZCBsZW5ndGgtZHJpdmVuIHBhY2tldCBmcmFtaW5nIHdlcmUgaW50cm9kdWNlZCwgd2hp Y2ggdGhpcworICB2ZXJzaW9uIGhhbmRsZS4gIE5COiB0aGlzIHJvdXRpbmUgaXMgT05MWSBmb3Ig cmVhZGluZyBpbmNvbWluZyBLZXJtaXQKKyAgcGFja2V0cywgbm90aGluZyBlbHNlLiAgVG8gcmVh ZCBvdGhlciBraW5kcyBvZiBpbmNvbWluZyBtYXRlcmlhbCwgdXNlCisgIHR0aW5jKCkgb3IgdHR4 aW4oKS4KKworICBUaGUgYnl0ZXMgdGhhdCB3ZXJlIGlucHV0IGFyZSBjb3BpZWQgaW50byAiZGVz dCIgd2l0aCB0aGVpciBwYXJpdHkgYml0cworICBzdHJpcHBlZCBpZiBwYXJpdHkgd2FzIHNlbGVj dGVkLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCisgIEJ5dGVzIGFmdGVyIHRo ZSBlb2wgYXJlIGF2YWlsYWJsZSB1cG9uIHRoZSBuZXh0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4K KworICBUaGUgaWRlYSBpcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHN5c3RlbSBjYWxscyBw ZXIgcGFja2V0LCBhbmQgYWxzbyB0bworICBtaW5pbWl6ZSB0aW1lb3V0cy4gIFRoaXMgZnVuY3Rp b24gaXMgdGhlIGlubmVyIGxvb3Agb2YgdGhlIHByb3RvY29sIGFuZCBtdXN0CisgIGJlIGFzIGVm ZmljaWVudCBhcyBwb3NzaWJsZS4gIFRoZSBjdXJyZW50IHN0cmF0ZWd5IGlzIHRvIHVzZSBteXJl YWQoKSwgYQorICBtYWNybyB0byBtYW5hZ2UgYnVmZmVyZWQgKGFuZCBnZW5lcmFsbHkgbm9uYmxv Y2tpbmcpIHJlYWRzLgorCisgIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gY2FsbHMgcGFyY2hrKCks IHdoaWNoIGlzIGRlZmluZWQgaW4gYW5vdGhlciBtb2R1bGUuCisgIE5vcm1hbGx5LCBja3V0aW8u YyBkb2VzIG5vdCBkZXBlbmQgb24gY29kZSBmcm9tIGFueSBvdGhlciBtb2R1bGUsIGJ1dCB0aGVy ZQorICBpcyBhbiBleGNlcHRpb24gaW4gdGhpcyBjYXNlIGJlY2F1c2UgYWxsIHRoZSBvdGhlciBj az90aW8uYyBtb2R1bGVzIGFsc28KKyAgbmVlZCB0byBjYWxsIHBhcmNoaygpLCBzbyBpdCdzIGJl dHRlciB0byBoYXZlIGl0IGRlZmluZWQgaW4gYSBjb21tb24gcGxhY2UuCisqLworI2lmZGVmIENU UkxDCisjdW5kZWYgQ1RSTEMKKyNlbmRpZiAvKiBDVFJMQyAqLworI2RlZmluZSBDVFJMQyAnXDAz JworLyoKKyAgV2UgaGF2ZSBmb3VyIGRpZmZlcmVudCBkZWNsYXJhdGlvbnMgaGVyZSBiZWNhdXNl OgorICAoYSkgdG8gYWxsb3cgS2VybWl0IHRvIGJlIGJ1aWx0IHdpdGhvdXQgdGhlIGF1dG9tYXRp YyBwYXJpdHkgc2Vuc2luZyBmZWF0dXJlCisgIChiKSBvbmUgb2YgZWFjaCB0eXBlIGZvciBBTlNJ IEMsIG9uZSBmb3Igbm9uLUFOU0kuCisqLworI2lmbmRlZiBOT1hGRVIKKworc3RhdGljIGludCBw dXNoZWRiYWNrID0gMDsKKworaW50CisjaWZkZWYgUEFSU0VOU0UKKyNpZmRlZiBDS19BTlNJQwor dHRpbmwoQ0hBUiAqZGVzdCwgaW50IG1heCxpbnQgdGltbywgQ0hBUiBlb2wsIENIQVIgc3RhcnQs IGludCB0dXJuKQorI2Vsc2UKK3R0aW5sKGRlc3QsbWF4LHRpbW8sZW9sLHN0YXJ0LHR1cm4pIGlu dCBtYXgsdGltbyx0dXJuOyBDSEFSICpkZXN0LCBlb2wsIHN0YXJ0OworI2VuZGlmIC8qIENLX0FO U0lDICovCisjZWxzZSAvKiBub3QgUEFSU0VOU0UgKi8KKyNpZmRlZiBDS19BTlNJQwordHRpbmwo Q0hBUiAqZGVzdCwgaW50IG1heCxpbnQgdGltbywgQ0hBUiBlb2wpCisjZWxzZQordHRpbmwoZGVz dCxtYXgsdGltbyxlb2wpIGludCBtYXgsdGltbzsgQ0hBUiAqZGVzdCwgZW9sOworI2VuZGlmIC8q IENLX0FOU0lDICovCisjZW5kaWYgLyogUEFSU0VOU0UgKi8KKy8qIHR0aW5sICovIHsKKworI2lm bmRlZiBNWVJFQUQKKyAgICBDSEFSIGNoLCBkdW07CisjZW5kaWYgLyogTVlSRUFEICovCisjaWZk ZWYgUEFSU0VOU0UKKyAgICBpbnQgcGt0bGVuID0gLTE7CisgICAgaW50IGxwbGVuID0gMDsKKyAg ICBpbnQgaGF2ZWxlbiA9IDA7CisjZW5kaWYgLyogUEFSU0VOU0UgKi8KKyAgICBpbnQgZmQ7Cisg ICAgaW50IHNvcG1hc2sgPSAweGZmOwkJCS8qIFN0YXJ0LU9mLVBhY2tldCBtYXNrICovCisjaWZk ZWYgQ0tYWENIQVIKKyAgICBleHRlcm4gc2hvcnQgZGJsdFtdOwkJLyogSWdub3JlLWNoYXJhY3Rl ciB0YWJsZSAqLworICAgIGV4dGVybiBpbnQgaWduZmxhZzsKKyNlbmRpZiAvKiBDS1hYQ0hBUiAq LworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGV4dGVybiBDSEFSIHN0Y2hyOworI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworICAgIGludCB4OworI2lmZGVmIFNUUkVBTUlORworICAgIGV4dGVybiBpbnQg c3RyZWFtaW5nOworICAgIGV4dGVybiBpbnQgc25kdHlwOworI2VuZGlmIC8qIFNUUkVBTUlORyAq LworCisgICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0zKTsgICAgICAgICAgLyogTm90IG9wZW4u ICovCisvKgorICBJbiBGZWJydWFyeSAyMDA3IEkgZml4ZWQgdHRpbmwoKSB0byB3b3JrIGJldHRl ciB1bmRlciB0aGUgdHJ1bHkgYXdmdWwKKyAgY29uZGl0aW9ucyBlbmNvdW50ZXJlZCBieSB0aGUg QU0tQVBFWCBvY2Vhbm9ncmFwaGljIGZsb2F0cyB0aGF0IGdhdGhlcgorICBodXJyaWNhbmUgZGF0 YSBhbmQgcGhvbmUgaG9tZSB1c2luZyBJcmlkaXVtIHNhdGVsbGl0ZSBtb2RlbXMsIHdoaWNoIHVu ZGVyCisgIGNlcnRhaW4gY29uZGl0aW9ucywgY2FuIHNlbmQgdHdvIHBhY2tldHMgYmFjayB0byBi YWNrIGFmdGVyIGEgbG9uZyBwYXVzZS4KKyAgSW4gdGhpcyBjYXNlIHRoZSBzZWNvbmQgcGFja2V0 IHdvdWxkIGJlIGlnbm9yZWQgYmVjYXVzZSB0aGUgU09IIHdhcyBza2lwcGVkCisgIGR1ZSB0byB0 aGUgdHRmbHVpKCkgY2FsbC4gIEJ1dCB0aGUgcmV3b3JrZWQgbG9va2FoZWFkL3B1c2hiYWNrIGxv Z2ljIGJyb2tlCisgIEtlcm1pdCB0cmFuc2ZlcnMgb24gZW5jcnlwdGVkIGNvbm5lY3Rpb25zLiAg VGhpcyB3YXMgZml4ZWQgMTItMTMgQXVndXN0CisgIDIwMDcuICBBbGwgb2YgdGhpcyBoYXBwZW5l ZCBhZnRlciA4LjAuMjEyIERldi4yNyB3YXMgcmVsZWFzZWQgYW5kIGJlZm9yZQorICBEZXYuMjgs IHNvIG5vIGhhcm0gZG9uZSBvdGhlciB0aGFuIHRoZSBkZWxheS4KKyovCisgICAgZGVidWcoRjEw MSwidHRpbmwgbWF4IiwiIixtYXgpOworICAgIGRlYnVnKEYxMDEsInR0aW5sIHRpbW8iLCIiLHRp bW8pOworCisjaWZkZWYgTkVUQ01ECisgICAgaWYgKHR0cGlwZSkKKyAgICAgIGZkID0gZmRpbjsK KyAgICBlbHNlCisjZW5kaWYgLyogTkVUQ01EICovCisgICAgICBmZCA9IHR0eWZkOworCisjaWZk ZWYgQ09NTUVOVAorICAgIGlmICh4bG9jYWwgJiYgY29uY2hrKCkgPiAwKQkJLyogQWxsb3cgZm9y IGNvbnNvbGUgaW50ZXJydXB0aW9ucyAqLworICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisKKyAgICAqZGVzdCA9ICdcMCc7ICAgICAgICAgICAgICAgICAgICAgICAvKiBD bGVhciBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKyAgICBpZiAodGltbyA8IDApIHRpbW8gPSAwOwkJ LyogU2FmZXR5ICovCisgICAgaWYgKHRpbW8pIHsJCQkJLyogRG9uJ3QgdGltZSBvdXQgaWYgdGlt byA9PSAwICovCisJaW50IHh4OworCXNhdmFsID0gc2lnbmFsKFNJR0FMUk0sdGltZXJoKTsJLyog RW5hYmxlIHRpbWVyIGludGVycnVwdCAqLworCXh4ID0gYWxhcm0odGltbyk7CQkvKiBTZXQgaXQu ICovCisJZGVidWcoRjEwMSwidHRpbmwgYWxhcm0iLCIiLHh4KTsKKyAgICB9CisgICAgaWYgKAor I2lmZGVmIENLX1BPU0lYX1NJRworCXNpZ3NldGptcChzamJ1ZiwxKQorI2Vsc2UKKwlzZXRqbXAo c2pidWYpCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJKSB7CQkJCS8qIFRpbWVyIHdlbnQg b2ZmPyAqLworCWRlYnVnKEYxMDAsInR0aW5sIHRpbW91dCIsIiIsMCk7IC8qIEdldCBoZXJlIG9u IHRpbWVvdXQuICovCisJLyogZGVidWcoRjExMCwiIHdpdGgiLChjaGFyICopIGRlc3QsMCk7ICov CisJdHRpbW9mZigpOwkJCS8qIFR1cm4gb2ZmIHRpbWVyICovCisJcmV0dXJuKC0xKTsJCQkvKiBh bmQgcmV0dXJuIGVycm9yIGNvZGUuICovCisgICAgfSBlbHNlIHsKKwlyZWdpc3RlciBpbnQgaSwg biA9IC0xOwkJLyogbG9jYWwgdmFyaWFibGVzICovCisJaW50IGNjbiA9IDA7CisjaWZkZWYgUEFS U0VOU0UKKwlyZWdpc3RlciBpbnQgZmxhZyA9IDA7CisJZGVidWcoRjAwMCwidHRpbmwgc3RhcnQi LCIiLHN0YXJ0KTsKKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworCisJdHRwbXNrID0gdHRwcnR5ID8g MDE3NyA6IDAzNzc7CS8qIFNldCBwYXJpdHkgc3RyaXBwaW5nIG1hc2suICovCisJc29wbWFzayA9 IG5lZWRwY2hrID8gMDE3NyA6IHR0cG1zazsgLyogQW5kIFNPUCBtYXRjaGluZyBtYXNrLiAqLwor CisvKiBOb3cgcmVhZCBpbnRvIGRlc3RpbmF0aW9uLCBzdHJpcHBpbmcgcGFyaXR5IGFuZCBsb29r aW5nIGZvciB0aGUgKi8KKy8qIHRoZSBwYWNrZXQgdGVybWluYXRvciwgYW5kIGFsc28gZm9yIHNl dmVyYWwgQ3RybC1DJ3MgdHlwZWQgaW4gYSByb3cuICovCisKKwlpID0gMDsJCQkJLyogRGVzdGlu YXRpb24gaW5kZXggKi8KKwlkZWJ1ZyhGMTAxLCJ0dGlubCBlb2wiLCIiLGVvbCk7CisKKwl3aGls ZSAoaSA8IG1heC0xKSB7CisjaWZkZWYgTVlSRUFECisJICAgIGVycm5vID0gMDsKKwkgICAgLyog T24gZW5jcnlwdGVkIGNvbm5lY3Rpb25zIG15cmVhZCByZXR1cm5zIGVuY3J5cHRlZCBieXRlcyAq LworCSAgICBuID0gbXlyZWFkKCk7CisJICAgIGRlYnVnKEYwMDAsIlRUSU5MIG15cmVhZCBjaGFy IiwiIixuKTsKKwkgICAgaWYgKG4gPCAwKSB7CS8qIFRpbWVvdXQgb3IgaS9vIGVycm9yPyAqLwor I2lmZGVmIERFQlVHCisJCWlmIChkZWJsb2cpIHsKKwkJICAgIGRlYnVnKEYxMDEsInR0aW5sIG15 cmVhZCBmYWlsdXJlLCBuIiwiIixuKTsKKwkJICAgIGRlYnVnKEYxMDEsInR0aW5sIG15cmVhZCBl cnJubyIsIiIsZXJybm8pOworCQl9CisjZW5kaWYgLyogREVCVUcgKi8KKwkJLyogRG9uJ3QgbGV0 IEVJTlRSIGJyZWFrIHBhY2tldHMuICovCisJCWlmIChuID09IC0zKSB7CisJCSAgICBpZiAoZXJy bm8gPT0gRUlOVFIgJiYgaSA+IDApIHsKKwkJCWRlYnVnKEYxMTEsInR0aW5sIEVJTlRSIG15cmVh ZCBpIiwiY29udGludWluZyIsaSk7CisJCQljb250aW51ZTsKKwkJICAgIH0gZWxzZSB7CisJCQlk ZWJ1ZyhGMTEwLCJ0dGlubCBub24tRUlOVFIgLTMiLCJjbG9zaW5nIiwwKTsKKwkJCXdhc2Nsb3Nl ZCA9IDE7CisJCQl0dGltb2ZmKCk7CS8qIFR1cm4gb2ZmIHRpbWVyICovCisJCQl0dGNsb3MoMCk7 CisJCQlyZXR1cm4obik7CisJCSAgICB9CisJCX0gZWxzZSBpZiAobiA9PSAtMiAmJiBuZXRjb25u IC8qICYmIHRpbW8gPT0gMCAqLyApIHsKKwkJICAgIC8qIEhlcmUgd2UgdHJ5IHRvIGNhdGNoIGJy b2tlbiBuZXR3b3JrIGNvbm5lY3Rpb25zICovCisJCSAgICAvKiBldmVuIHdoZW4gaW9jdGwoKSBh bmQgcmVhZCgpIGRvIG5vdCBjYXRjaCB0aGVtICovCisJCSAgICBkZWJ1ZyhGMTExLCJ0dGlubCBu ZXR3b3JrIG15cmVhZCBmYWlsdXJlIiwiY2xvc2luZyIsbik7CisJCSAgICB3YXNjbG9zZWQgPSAx OworCQkgICAgdHRpbW9mZigpOworCQkgICAgdHRjbG9zKDApOworCQkgICAgcmV0dXJuKC0zKTsK KwkJfQorI2lmZGVmIFNUUkVBTUlORworCQkvKiBTdHJlYW1pbmcgYW5kIG5vIGRhdGEgdG8gcmVh ZCAqLworCQllbHNlIGlmIChuID09IDAgJiYgc3RyZWFtaW5nICYmIHNuZHR5cCA9PSAnRCcpCisJ CSAgcmV0dXJuKDApOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCQlicmVhazsJCQkvKiBCcmVh ayBvdXQgb2Ygd2hpbGUgbG9vcCAqLworCSAgICB9CisKKyNlbHNlIC8qIG5vdCBNWVJFQUQgKGlz IHRoaXMgY29kZSB1c2VkIGFueXdoZXJlIGFueSBtb3JlPykgKi8KKy8qCisgIFRoZSBub24tTVlS RUFEIGNvZGUgZGF0ZXMgZnJvbSB0aGUgMTk4MHMgYW5kIHdhcyBuZWVkZWQgb24gY2VydGFpbiBw bGF0Zm9ybXMKKyAgd2hlcmUgdGhlcmUgd2VyZSBubyBub25ibG9ja2luZyByZWFkcy4gIC1mZGMs IDIwMDcvMDIvMjIuCisqLworCSAgICBpZiAoKG4gPSByZWFkKGZkLCAmbiwgMSkpIDwgMSkKKwkg ICAgICBicmVhazsJCQkvKiBFcnJvciAtIGJyZWFrIG91dCBvZiB3aGlsZSBsb29wICovCisKKyNl bmRpZiAvKiBNWVJFQUQgKi8KKworCSAgICAvKiBHZXQgaGVyZSB3aXRoIGNoYXIgaW4gbiAqLwor CisjaWZkZWYgQ0tfRU5DUllQVElPTgorCSAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJ T04pICYmICFwdXNoZWRiYWNrKSB7CisJCUNIQVIgY2ggPSBuOworCQlja190bl9kZWNyeXB0KChj aGFyICopJmNoLDEpOworCQluID0gY2g7CisJCWRlYnVnKEYwMDAsIlRUSU5MIGRlY3J5cCBjaGFy IiwiIixuKTsKKwkgICAgfQorCSAgICBwdXNoZWRiYWNrID0gMDsKKyNlbmRpZiAvKiBDS19FTkNS WVBUSU9OICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKwkgICAgaWYgKG4gPT0gSUFDICYmCQkvKiBI YW5kbGUgVGVsbmV0IG9wdGlvbnMgKi8KKwkJKCh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxO RVQoKSkgfHwKKwkJKCF4bG9jYWwgJiYgc3N0ZWxuZXQpKSkgeworCQluID0gdHRfdG5vcHQobik7 CisJCWlmIChuIDwgMCkKKwkJICByZXR1cm4obik7CisjaWZuZGVmIE5PUEFSU0VOCisJCWVsc2Ug aWYgKG4gPT0gMSkKKwkJICBzdGFydCA9IHN0Y2hyOworI2VuZGlmIC8qIE5PUEFSU0VOICovCisJ CWlmIChuICE9IDI1NSkJCS8qIE5vIGRhdGEgLSBnbyBiYWNrIGZvciBuZXh0IGNoYXIgKi8KKwkJ ICBjb250aW51ZTsKKwkgICAgfQkJCQkvKiBRdW90ZWQgSUFDIC0ga2VlcCBnb2luZyAqLworI2Vu ZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZkZWYgQ0tYWENIQVIKKwkgICAgaWYgKGlnbmZsYWcp CisJICAgICAgaWYgKGRibHRbKHVuc2lnbmVkKSBuXSAmIDEpIC8qIENoYXJhY3RlciB0byBpZ25v cmU/ICovCisJCWNvbnRpbnVlOworI2VuZGlmIC8qIENLWFhDSEFSICovCisvKgorICBVc2UgcGFy aXR5IG1hc2ssIHJhdGhlciB0aGFuIGFsd2F5cyBzdHJpcHBpbmcgcGFyaXR5LCB0byBjaGVjayBm b3IKKyAgY2FuY2VsbGF0aW9uLiAgT3RoZXJ3aXNlLCBydW5zIGxpa2UgXHgwM1x4ODNceDAzIGlu IGEgcGFja2V0IGNvdWxkIGNhbmNlbAorICB0aGUgdHJhbnNmZXIgd2hlbiBwYXJpdHkgaXMgTk9O RS4gIChOb3RlIHRoYXQgXHgwM1x4MDNceDAzIGlzIGV4dHJlbWVseQorICB1bmxpa2VseSBkdWUg dG8gcnVuLWxlbmd0aCBlbmNvZGluZy4pCisqLworCSAgICAvKiBDaGVjayBjYW5jZWxsYXRpb24g Ki8KKwkgICAgaWYgKCF4bG9jYWwgJiYgeGZyY2FuICYmICgobiAmIHR0cG1zaykgPT0geGZyY2hy KSkgeworCQlpZiAoKytjY24gPj0geGZybnVtKSB7CS8qIElmIHhmcm51bSBpbiBhIHJvdywgYmFp bCBvdXQuICovCisJCSAgICBpZiAodGltbykgewkJLyogQ2xlYXIgdGltZXIuICovCisJCQl0dGlt b2ZmKCk7CisJCSAgICB9CisJCSAgICBpZiAoeGZyY2hyIDwgMzIpCisJCSAgICAgIHByaW50Zigi XiVjLi4uXHJcbiIsKGNoYXIpKHhmcmNocis2NCkpOworCQkgICAgZWxzZQorCQkgICAgICBwcmlu dGYoIkNhbmNlbGVkLi4uXHJcbiIpOworCQkgICAgcmV0dXJuKC0yKTsKKwkJfQorCSAgICB9IGVs c2UgY2NuID0gMDsJCS8qIE5vIGNhbmNlbGxhdGlvbiwgcmVzZXQgY291bnRlciwgKi8KKworI2lm ZGVmIFBBUlNFTlNFCisvKgorICBSZXN0cnVjdHVyZWQgY29kZSBhbGxvd3MgZm9yIGEgbmV3IHBh Y2tldCB0byBhcHBlYXIgc29tZXdoZXJlIGluIHRoZQorICBtaWRkbGUgb2YgYSBwcmV2aW91cyBv bmUuICAtZmRjLCAyNCBGZWIgMjAwNy4KKyovCisJICAgIGlmICgobiAmIHNvcG1hc2spID09IHN0 YXJ0KSB7IC8qIFN0YXJ0IG9mIFBhY2tldCAqLworCQlkZWJ1ZyhGMTAxLCJ0dGlubCBTT1AgaSIs IiIsaSk7CisJCWZsYWcgPSAxOwkJLyogRmxhZyB0aGF0IHdlIGFyZSBpbiBhIHBhY2tldCAqLwor CQloYXZlbGVuID0gMDsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgbGVuZ3RoICovCisJCXBrdGxl biA9IC0xOwkJLyogKGlmIGFueSkgaW4gY2FzZSB3ZSB3ZXJlICovCisJCWxwbGVuID0gMDsJCS8q IGFscmVhZCBwcm9jZXNzYW5kIGEgcGFja2V0ICovCisJCWkgPSAwOwkJCS8qIGFuZCByZXNldCB0 aGUgZGVzdCBidWZmZXIgcG9pbnRlciAqLworCSAgICB9CisJICAgIGlmIChmbGFnID09IDApIHsJ CS8qIE5vIFNPUCB5ZXQuLi4gKi8KKwkJZGVidWcoRjAwMCwidHRpbmwgc2tpcHBpbmciLCIiLG4p OworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBkZXN0W2krK10gPSBuICYgdHRwbXNrOworLyoK KyAgSWYgd2UgaGF2ZSBub3QgYmVlbiBpbnN0cnVjdGVkIHRvIHdhaXQgZm9yIGEgdHVybmFyb3Vu ZCBjaGFyYWN0ZXIsIHdlIGNhbiBnbworICBieSB0aGUgcGFja2V0IGxlbmd0aCBmaWVsZC4gIElm IHR1cm4gIT0gMCwgd2UgbXVzdCB3YWl0IGZvciB0aGUgZW5kIG9mIGxpbmUKKyAgKGVvbCkgY2hh cmFjdGVyIGJlZm9yZSByZXR1cm5pbmcuICBUaGlzIGlzIGFuIGVncmVnaW91cyB2aW9sYXRpb24g b2YgYWxsCisgIHByaW5jaXBsZXMgb2YgbGF5ZXJpbmcuLi4gIChMZXNzIGVncmVnaW91cyBpbiBD LUtlcm1pdCA5LjAsIGluIHdoaWNoIHdlIGdvCisgIGJ5IHRoZSBsZW5ndGggZmllbGQgYnV0IGFs c28gbG9vayBmb3IgdGhlIGVvbCBpbiBjYXNlIGl0IGFycml2ZXMgZWFybHksCisgIGUuZy4gaWYg dGhlIGxlbmd0aCBmaWVsZCB3YXMgY29ycnVwdGVkIHVwd2FyZHMuKQorKi8KKwkgICAgaWYgKCFo YXZlbGVuKSB7CisJCWlmIChpID09IDIpIHsKKwkJICAgIGlmICgoZGVzdFsxXSAmIDB4N2YpIDwg MzIpIC8qIEdhcmJhZ2UgaW4gbGVuZ3RoIGZpZWxkICovCisJCSAgICAgIHJldHVybigtMSk7CS8q IGZkYyAtIDEzIEFwciAyMDEwICovCisJCSAgICBwa3RsZW4gPSB4dW5jaGFyKGRlc3RbMV0gJiAw eDdmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBrdGxlbiA+IDk0KQkvKiBSdWJvdXQgaW4g bGVuZ3RoIGZpZWxkICovCisJCSAgICAgIHJldHVybigtMSk7CS8qIGZkYyAtIDEzIEFwciAyMDEw ICovCisJCSAgICBpZiAocGt0bGVuID4gMSkgeworCQkJaGF2ZWxlbiA9IDE7CisJCQlkZWJ1ZyhG MTAxLCJ0dGlubCBwa3RsZW4gdmFsdWUiLCIiLHBrdGxlbik7CisJCSAgICB9CisJCX0gZWxzZSBp ZiAoaSA9PSA1ICYmIHBrdGxlbiA9PSAwKSB7CisJCSAgICBscGxlbiA9IHh1bmNoYXIoZGVzdFs0 XSAmIDB4N2YpOworCQl9IGVsc2UgaWYgKGkgPT0gNiAmJiBwa3RsZW4gPT0gMCkgeworCQkgICAg cGt0bGVuID0gbHBsZW4gKiA5NSArIHh1bmNoYXIoZGVzdFs1XSAmIDB4N2YpICsgNTsKKwkJICAg IGhhdmVsZW4gPSAxOworCQkgICAgZGVidWcoRjEwMSwidHRpbmwgZXh0ZW5kZWQgbGVuZ3RoIiwi Iixwa3RsZW4pOworCQl9CisJICAgIH0KKworLyoKKyAgU3VwcG9zZSB3ZSBsb29rZWQgYXQgdGhl IHNlcXVlbmNlIG51bWJlciBoZXJlIGFuZCBmb3VuZCBpdCB3YXMgb3V0IG9mCisgIHJhbmdlPyAg VGhpcyB3b3VsZCBtZWFuIGVpdGhlciAoYSkgaW5jb21pbmcgcGFja2V0cyBoYWQgU09QIHVucHJl Zml4ZWQKKyAgYW5kIHdlIGFyZSBvdXQgb2Ygc3luYywgb3IgKGIpIHRoZSBwYWNrZXQgaXMgZGFt YWdlZC4gIFNpbmNlIChhKSBpcyBiYWQKKyAgcHJhY3RpY2UsIGxldCdzIGlnbm9yZSBpdC4gIFNv IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmUgaWYgd2Uga25vdyB0aGUKKyAgcGFja2V0IGlzIGRhbWFn ZWQ/CisKKyAgIDEuIE5vdGhpbmcgLS0ga2VlcCB0cnlpbmcgdG8gcmVhZCB0aGUgcGFja2V0IHRp bGwgd2UgZmluZCB3aGF0IHdlIHRoaW5rCisgICAgICBpcyB0aGUgZW5kLCBvciB3ZSB0aW1lIG91 dCwgYW5kIGxldCB0aGUgdXBwZXIgbGF5ZXIgZGVjaWRlIHdoYXQgdG8KKyAgICAgIGRvLiAgQnV0 IHNpbmNlIGVpdGhlciB0aGUgcGFja2V0IGlzIGNvcnJ1cHQgb3Igd2UgYXJlIG91dCBvZiBzeW5j LAorICAgICAgb3VyIGNyaXRlcmlvbiBmb3IgZmluZGluZyB0aGUgZW5kIGRvZXMgbm90IGFwcGx5 IGFuZCB3ZSBhcmUgbGlrZWx5CisgICAgICB0byB0aW1lIG91dCAob3Igc3dhbGxvdyBhIHBpZWNl IG9mIHRoZSBuZXh0IHBhY2tldCkgaWYgb3VyIGFzc3VtZWQKKyAgICAgIGxlbmd0aCBpcyB0b28g bG9uZy4gIChUaGlzIHdhcyB0aGUgYmVoYXZpb3IgcHJpb3IgdG8gdmVyc2lvbiA3LjAuKQorCisg ICAyLiBzZXQgZmxhZyA9IDAgYW5kIGNvbnRpbnVlPyAgVGhpcyB3b3VsZCBmb3JjZSB1cyB0byB3 YWl0IGZvciB0aGUKKyAgICAgIG5leHQgcGFja2V0IHRvIGNvbWUgaW4sIGFuZCB0aGVyZWZvcmUg KGluIHRoZSBub253aW5kb3dpbmcgY2FzZSksCisgICAgICB3b3VsZCBmb3JjZSBhIHRpbWVvdXQg aW4gdGhlIG90aGVyIEtlcm1pdC4KKworICAgMy4gc2V0IGZsYWcgPSAwIGFuZCBjb250aW51ZSwg YnV0IG9ubHkgaWYgdGhlIHdpbmRvdyBzaXplIGlzID4gMSBhbmQKKyAgICAgIHRoZSB3aW5kb3cg aXMgbm90IGJsb2NrZWQ/ICBUYWxrIGFib3V0IGNoZWF0aW5nIQorCisgICA0LiBSZXR1cm4gYSBm YWlsdXJlIGNvZGUgYW5kIGxldCB0aGUgdXBwZXIgbGF5ZXIgZGVjaWRlIHdoYXQgdG8gZG8uCisg ICAgICBUaGlzIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvIDMsIGJ1dCB3aXRob3V0IHRoZSBjaGVh dGluZy4gIFNvIGxldCdzCisgICAgICBkbyBpdCB0aGF0IHdheS4uLiAgQnV0IG5vdGUgdGhhdCB3 ZSBtdXN0IGlnbm9yZSB0aGUgcGFyaXR5IGJpdAorICAgICAgaW4gY2FzZSB0aGlzIGlzIHRoZSBm aXJzdCBwYWNrZXQgYW5kIHdlIGhhdmUgbm90IHlldCBydW4gcGFyY2hrKCkuCisqLworCSAgICBp ZiAoaSA9PSAzKSB7CQkvKiBQZWVrIGF0IHNlcXVlbmNlIG51bWJlciAqLworCQl4ID0geHVuY2hh cigoZGVzdFtpLTFdICYgMHg3ZikpOyAvKiBJZiBpdCdzIG5vdCBpbiByYW5nZS4uLiAqLworCQlp ZiAoeCA8IDAgfHwgeCA+IDYzKSB7CisJCSAgICBkZWJ1ZyhGMTExLCJ0dGlubCBiYWQgc2VxIixk ZXN0LHgpOworCQkgICAgaWYgKHRpbW8pIHR0aW1vZmYoKTsKKwkJICAgIHJldHVybigtMSk7CQkv KiByZXR1cm4gYSBub25mYXRhbCBlcnJvciAqLworCQl9CisJICAgIH0KKworI2Vsc2UgLyogUEFS U0VOU0UgKi8KKwkgICAgZGVzdFtpKytdID0gbiAmIHR0cG1zazsKKyNlbmRpZiAvKiBQQVJTRU5T RSAqLworCisgICAgLyogQ2hlY2sgZm9yIGVuZCBvZiBwYWNrZXQgKi8KKworCSAgICBpZiAoCisJ CSgobiAmIHR0cG1zaykgPT0gZW9sKQkvKiBBbHdheXMgYnJlYWsgb24gdGhlIGVvbCBjaGFyICov CisjaWZkZWYgUEFSU0VOU0UKKwkJIHx8CQkJLyogZmRjIC0gc2VlIG5vdGVzIG9mIDEzIEFwciAy MDEwICovCisvKgorICBQdXJlbHkgbGVuZ3RoLWRyaXZlbiBpZiBTRVQgSEFORFNIQUtFIE5PTkUg KGkuZS4gdHVybiA9PSAwKS4KKyAgVGhpcyBhbGxvd3MgcGFja2V0IHRlcm1pbmF0b3JzIGFuZCBo YW5kc2hha2UgY2hhcmFjdGVycyB0byBhcHBlYXIKKyAgbGl0ZXJhbGx5IGluc2lkZSBhIHBhY2tl dCBkYXRhIGZpZWxkLgorKi8KKwkJKGhhdmVsZW4gJiYgKGkgPiBwa3RsZW4rMSkgJiYKKwkJICgh dHVybiB8fCAodHVybiAmJiAobiAmIDB4N2YpID09IHR1cm4pKSkgLyogKHR1cm4sIG5vdCBlb2wp ICovCisKKyNlbmRpZiAvKiBQQVJTRU5TRSAqLworCQkpIHsKKy8qCisgIEhlcmUgd2UgaGF2ZSBl aXRoZXIgcmVhZCB0aGUgbGFzdCBieXRlIG9mIHRoZSBwYWNrZXQgYmFzZWQgb24gaXRzIGxlbmd0 aAorICBmaWVsZCwgb3IgZWxzZSB3ZSBoYXZlIHJlYWQgdGhlIHBhY2tldCB0ZXJtaW5hdG9yIChl b2wpIG9yIHRoZSBoYWxmLWR1cGxleAorICBsaW5lLXR1cm5hcm91bmQgY2hhciAodHVybikuCisq LworI2lmbmRlZiBQQVJTRU5TRQorCQlkZWJ1ZyhGMTAxLCJ0dGlubCBnb3QgZW9sIiwiIixlb2wp OyAvKiAob3IgdHVybikgKi8KKwkJZGVzdFtpXSA9ICdcMCc7CQkvKiBZZXMsIHRlcm1pbmF0ZSB0 aGUgc3RyaW5nLCAqLworCQkvKiBkZWJ1ZyhGMTAxLCJ0dGlubCBpIiwiIixpKTsgKi8KKworI2Vs c2UgIC8qIFBBUlNFTlNFICovCisKKyNpZmRlZiBERUJVRworCQlpZiAoZGVibG9nKSB7CisJCSAg ICBpZiAoKG4gJiB0dHBtc2spICE9IGVvbCkgeworCQkJZGVidWcoRjEwMSwidHRpbmwgRU9QIGxl bmd0aCIsIiIscGt0bGVuKTsKKwkJCWRlYnVnKEYwMDAsInR0aW5sIEVPUCBjdXJyZW50IGNoYXIi LCIiLG4pOworCQkJZGVidWcoRjEwMSwidHRpbmwgRU9QIHBhY2tldCBidWYgaW5kZXgiLCIiLGkp OworCQkgICAgfSBlbHNlIGRlYnVnKEYxMDEsInR0aW5sIGdvdCBlb2wiLCIiLGVvbCk7CisJCX0K KyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgTVlSRUFECisvKgorICBUaGUgcGFja2V0IHdh cyByZWFkIGJhc2VkIG9uIGl0cyBsZW5ndGguICBUaGlzIGxlYXZlcyB0aGUgcGFja2V0IHRlcm1p bmF0b3IKKyAgdW5yZWFkLCBhbmQgc28gdHRjaGsoKSB3aWxsIGFsd2F5cyByZXR1cm4gYXQgbGVh c3QgMSBiZWNhdXNlIG9mIHRoaXMsCisgIHBvc3NpYmx5IGdpdmluZyBhIGZhbHNlIHBvc2l0aXZl IHRvIHRoZSAiaXMgdGhlcmUgYW5vdGhlciBwYWNrZXQgd2FpdGluZz8iCisgIHRlc3QuICBCdXQg aWYgd2Uga25vdyB0aGUgdGVybWluYXRvciAob3IgYW55IG90aGVyIGludGVycGFja2V0IGp1bmsp IGlzCisgIHRoZXJlLCB3ZSBjYW4gc2FmZWx5IGdldCByaWQgb2YgaXQuCisKKyAgTk9URTogVGhp cyBjb2RlIHJld29ya2VkIHRvIChhKSBleGVjdXRlIGV2ZW4gaWYgdGhlIGRlYnVnIGxvZyBpc24n dCBhY3RpdmU7CisgIGFuZCAoYikgYWN0dWFsbHkgd29yay4gIC1mZGMsIDIwMDcvMDIvMjIuICBB bmQgYWdhaW4gMjAwNy8wOC8xMi0xMyB0byBhbHNvCisgIHdvcmsgb24gZW5jcnlwdGVkIGNvbm5l Y3Rpb25zLgorKi8JCisJCWRlYnVnKEYxMDEsIlRUSU5MIG15X2NvdW50IiwiIixteV9jb3VudCk7 CisJCWlmICgobiAmIHR0cG1zaykgIT0gZW9sKSB7IC8qIE5vdCB0aGUgcGFja2V0IHRlcm1pbmF0 b3IgKi8KKwkJICAgIGludCB4OworCQkgICAgd2hpbGUgKG15X2NvdW50ID4gMCkgeworCQkJeCA9 IG15cmVhZCgpOwkgICAvKiAod2FzIHR0aW5jKDApICovCisJCQlkZWJ1ZyhGMDAwLCJUVElOTCBs a3JlYWQgY2hhciIsIiIseCk7CisjaWZkZWYgQ0tfRU5DUllQVElPTgorCQkJaWYgKFRFTE9QVF9V KFRFTE9QVF9FTkNSWVBUSU9OKSkgeworCQkJICAgIENIQVIgY2ggPSB4OworCQkJICAgIGNrX3Ru X2RlY3J5cHQoKGNoYXIgKikmY2gsMSk7CisJCQkgICAgeCA9IGNoOworCQkJICAgIGRlYnVnKEYw MDAsIlRUSU5MIGxrZGVjciBjaGFyIiwiIix4KTsgCisJCQl9CisjZW5kaWYJLyogQ0tfRU5DUllQ VElPTiAqLworCQkJLyoKKwkJCSAgTm90ZTogd2hpbGUgaXQgbWlnaHQgc2VlbSBtb3JlIGVsZWdh bnQgdG8gc2ltcGx5CisJCQkgIHB1c2ggYmFjayB0aGUgZW5jcnlwdGVkIGJ5dGUsIHRoYXQgZGVz eW5jaHJvbml6ZXMKKwkJCSAgdGhlIGRlY3J5cHRpb24gc3RyZWFtOyB0aGUgZmxhZyBpcyBuZWNl c3Nhcnkgc28gd2UKKwkJCSAgZG9uJ3QgdHJ5IHRvIGRlY3J5cHQgdGhlIHNhbWUgYnl0ZSB0d2lj ZS4KKwkJCSovCisJCQlpZiAoKHggJiB0dHBtc2spID09IHN0YXJ0KSB7IC8qIFN0YXJ0IG9mIG5l eHQgcGFja2V0ICovCisJCQkgICAgbXl1bnJkKHgpOwkvKiBQdXNoIGJhY2sgdGhlIGRlY3J5cHRl ZCBieXRlICovCisJCQkgICAgcHVzaGVkYmFjayA9IDE7IC8qIEFuZCBzZXQgZmxhZyAqLworCQkJ ICAgIGRlYnVnKEYwMDAsIlRUSU5MIGxrcHVzaCBjaGFyIiwiIix4KTsKKwkJCSAgICBicmVhazsK KwkJCX0KKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIE1ZUkVBRCAqLworCisJCWRlc3RbaV0gPSAn XDAnOwkJLyogVGVybWluYXRlIHRoZSBzdHJpbmcsICovCisJICAgICAgICBpZiAobmVlZHBjaGsp IHsJCS8qIFBhcml0eSBjaGVja2VkIHlldD8gKi8KKwkJICAgIGlmICh0dHBydHkgPT0gMCkgewkv KiBObywgY2hlY2suICovCisJCQlpZiAoKHR0cHJ0eSA9IHBhcmNoayhkZXN0LHN0YXJ0LGkpKSA+ IDApIHsKKwkJCSAgICBpbnQgajsKKwkJCSAgICBkZWJ1ZyhGMTAxLCJ0dGlubCBzZW5zZXMgcGFy aXR5IiwiIix0dHBydHkpOworCQkJICAgIGRlYnVnKEYxMTAsInR0aW5sIHBhY2tldCBiZWZvcmUi LGRlc3QsMCk7CisJCQkgICAgdHRwbXNrID0gMHg3ZjsKKwkJCSAgICBmb3IgKGogPSAwOyBqIDwg aTsgaisrKQorCQkJICAgICAgZGVzdFtqXSAmPSAweDdmOwkvKiBTdHJpcCBwYXJpdHkgZnJvbSBw YWNrZXQgKi8KKwkJCSAgICBkZWJ1ZyhGMTEwLCJ0dGlubCBwYWNrZXQgYWZ0ZXIgIixkZXN0LDAp OworCQkJfSBlbHNlIHR0cHJ0eSA9IDA7IC8qIFJlc3RvcmUgaWYgcGFyY2hrIGVycm9yICovCisJ CSAgICB9CisJCSAgICBzb3BtYXNrID0gdHRwbXNrOworCQkgICAgbmVlZHBjaGsgPSAwOworCQl9 CisjZW5kaWYgLyogUEFSU0VOU0UgKi8KKworCQlpZiAodGltbykJCS8qIFR1cm4gb2ZmIHRpbWVy IGlmIGl0IHdhcyBvbiAqLworCQkgIHR0aW1vZmYoKTsKKyAgICAgICAgICAgICAgICBja2hleGR1 bXAoInR0aW5sIGdvdCIsZGVzdCxpKTsKKworI2lmZGVmIFNUUkVBTUlORworCQkvKiB0dGlubCgp IHdhcyBjYWxsZWQgYmVjYXVzZSB0aGVyZSB3YXMgbm9uLXBhY2tldCAqLworCQkvKiBkYXRhIHNp dHRpbmcgaW4gdGhlIGJhY2sgY2hhbm5lbC4gIElnbm9yZSBpdC4gICAqLworCQlpZiAoc3RyZWFt aW5nICYmIHNuZHR5cCA9PSAnRCcpCisJCSAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KKwkJcmV0dXJuKGkpOworCSAgICB9CisJfSAvKiBFbmQgb2Ygd2hpbGUoKSAqLworCXR0 aW1vZmYoKTsKKwlyZXR1cm4obik7CisgICAgfQorfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisv KiAgVCBUIEkgTiBDIC0tICBSZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhlIGNvbW11bmljYXRpb24g bGluZSAgKi8KKy8qCisgT24gc3VjY2VzcywgcmV0dXJucyB0aGUgY2hhcmFjdGVyIHRoYXQgd2Fz IHJlYWQsID49IDAuCisgT24gZmFpbHVyZSwgcmV0dXJucyAtMSBvciBvdGhlciBuZWdhdGl2ZSBt eXJlYWQgZXJyb3IgY29kZSwKKyAgIG9yIC0yIGlmIGNvbm5lY3Rpb24gaXMgYnJva2VuIG9yIHR0 eWZkIDwgMC4KKyAgIG9yIC0zIGlmIHNlc3Npb24gbGltaXQgaGFzIGV4cGlyZWQsCisgICBvciAt NCBpZiBzb21ldGhpbmcgb3Igb3RoZXIuLi4KKyBOT1RFOiBUaGUgQVBJIGRvZXMgbm90IHByb3Zp ZGUgZm9yIHR0aW5jKCkgcmV0dXJuaW5nIGEgc3BlY2lhbCBjb2RlCisgdXBvbiB0aW1lb3V0LCBi dXQgd2UgbmVlZCBpdC4gIFNvIGZvciB0aGlzIHdlIGhhdmUgYSBnbG9iYWwgdmFyaWFibGUsCisg dHRpbmN0aW1vLgorKi8KK3N0YXRpYyBpbnQgdHRpbmN0aW1vID0gMDsJCS8qIFl1ayAqLworCitp bnQKK3R0aW5jKHRpbW8pIGludCB0aW1vOyB7CisKKyAgICBpbnQgbiA9IDAsIGZkOworICAgIGlu dCBpc190biA9IDA7CisgICAgQ0hBUiBjaCA9IDA7CisKKyAgICB0dGluY3RpbW8gPSAwOworCisg ICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0yKTsgICAgICAgICAgLyogTm90IG9wZW4uICovCisK KyAgICBpc190biA9ICh4bG9jYWwgJiYgbmV0Y29ubiAmJiBJU19URUxORVQoKSkgfHwKKwkgICAg KCF4bG9jYWwgJiYgc3N0ZWxuZXQpOworCisjaWZkZWYgVFRMRUJVRgorICAgIGlmICh0dHB1c2gg Pj0gMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJ0dGluYyIsInR0cHVzaCIsdHRwdXNoKTsKKyAg ICAgICAgY2ggPSB0dHB1c2g7CisgICAgICAgIHR0cHVzaCA9IC0xOworICAgICAgICByZXR1cm4o Y2gpOworICAgIH0KKyAgICBpZiAobGVfZGF0YSkgeworICAgICAgICBpZiAobGVfZ2V0Y2hhcigm Y2gpID4gMCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwidHRpbmMgbGVfZ2V0Y2hhciIsImNo IixjaCk7CisgICAgICAgICAgICByZXR1cm4oY2gpOworICAgICAgICB9CisgICAgfQorI2VuZGlm IC8qIFRUTEVCVUYgKi8KKworI2lmZGVmIE5FVENNRAorICAgIGlmICh0dHBpcGUpCisgICAgICBm ZCA9IGZkaW47CisgICAgZWxzZQorI2VuZGlmIC8qIE5FVENNRCAqLworICAgICAgZmQgPSB0dHlm ZDsKKworICAgIGlmICgodGltbyA8PSAwKQkJCS8qIFVudGltZWQuICovCisjaWZkZWYgTVlSRUFE CisJfHwgKG15X2NvdW50ID4gMCkJCS8qIEJ1ZmZlcmVkIGNoYXIgYWxyZWFkeSB3YWl0aW5nLiAq LworI2VuZGlmIC8qIE1ZUkVBRCAqLworCSkgeworI2lmZGVmIE1ZUkVBRAorICAgICAgICAvKiBD b21tIGxpbmUgZmFpbHVyZSByZXR1cm5zIC0xIHRocnUgbXlyZWFkLCBzbyBubyAmPSAwMzc3ICov CisJbiA9IG15cmVhZCgpOwkJCS8qIFdhaXQgZm9yIGEgY2hhcmFjdGVyLi4uICovCisJLyogZGVi dWcoRjAwMCwidHRpbmMgTVlSRUFEIG4iLCIiLG4pOyAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04K KwkvKiBkZWJ1ZyhGMTAxLCJ0dGluYyB1X2VuY3J5cHQiLCIiLFRFTE9QVF9VKFRFTE9QVF9FTkNS WVBUSU9OKSk7ICovCisJaWYgKFRFTE9QVF9VKFRFTE9QVF9FTkNSWVBUSU9OKSAmJiBuID49IDAp IHsKKwkgICAgY2ggPSBuOworCSAgICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOworCSAg ICBuID0gY2g7CisJfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworI2lmZGVmIE5FVFBU WQorCWlmICh0dHB0eSAmJiBuIDwgMCkgeworCSAgICBkZWJ1ZyhGMTAxLCJ0dGluYyBlcnJvciBv biBwdHkiLCIiLG4pOworCSAgICB0dGNsb3MoMCk7CisJICAgIHJldHVybihuKTsKKwl9CisjZW5k aWYgLyogTkVUUFRZICovCisKKyNpZmRlZiBUTkNPREUKKwlpZiAoKG4gPiAtMSkgJiYgaXNfdG4p CisJICByZXR1cm4oKHVuc2lnbmVkKShuICYgMHhmZikpOworCWVsc2UKKyNlbmRpZiAvKiBUTkNP REUgKi8KKwkgIHJldHVybihuIDwgMCA/IG4gOiAodW5zaWduZWQpKG4gJiB0dHBtc2spKTsKKwor I2Vsc2UgIC8qIE1ZUkVBRCAqLworCisgICAgICAgIHdoaWxlICgobiA9IHJlYWQoZmQsJmNoLDEp KSA9PSAwKSAvKiBXYWl0IGZvciBhIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgLyogU2hvdWxkbid0 IGhhdmUgdG8gbG9vcCBpbiB2ZXIgNUEuICovCisjaWZkZWYgTkVUQ09OTgorCSAgaWYgKG5ldGNv bm4pIHsJCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIG5ldCAqLworCSAgICAgIG5ldGNsb3MoKTsJ CS8qIElmIHJlYWQoKSByZXR1cm5zIDAgaXQgbWVhbnMgKi8KKwkgICAgICBuZXRjb25uID0gMDsJ CS8qIHRoZSBjb25uZWN0aW9uIGhhcyBkcm9wcGVkLiAqLworCSAgICAgIGVycm5vID0gRU5PVENP Tk47CisJICAgICAgcmV0dXJuKC0yKTsKKwkgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisJICA7 CisJLyogZGVidWcoRjEwMSwidHRpbmMiLCIiLGNoKTsgKi8KKyNpZmRlZiBUTkNPREUKKwlpZiAo KG4gPiAwKSAmJiBpc190bikgeworI2lmZGVmIENLX0VOQ1JZUFRJT04KKwkgICAgaWYgKFRFTE9Q VF9VKFRFTE9QVF9FTkNSWVBUSU9OKSkgeworCQlja190bl9kZWNyeXB0KCZjaCwxKTsKKwkJbiA9 IGNoOworCSAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworCSAgICByZXR1cm4oKHVu c2lnbmVkKShjaCAmIDB4ZmYpKTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAg ICAgcmV0dXJuKChuIDwgMCkgPyAtNCA6ICgobiA9PSAwKSA/IC0xIDogKHVuc2lnbmVkKShjaCAm IHR0cG1zaykpKTsKKyNlbmRpZiAvKiBNWVJFQUQgKi8KKworICAgIH0gZWxzZSB7CQkJCS8qIFRp bWVkIHJlYWQgKi8KKworCWludCBvbGRhbGFybTsKKwlzYXZhbCA9IHNpZ25hbChTSUdBTFJNLHRp bWVyaCk7CS8qIFNldCB1cCBoYW5kbGVyLCBzYXZlIG9sZCBvbmUuICovCisJb2xkYWxhcm0gPSBh bGFybSh0aW1vKTsJCS8qIFNldCBhbGFybSwgc2F2ZSBvbGQgb25lLiAqLworCWlmICgKKyNpZmRl ZiBDS19QT1NJWF9TSUcKKwkgICAgc2lnc2V0am1wKHNqYnVmLDEpCisjZWxzZQorCSAgICBzZXRq bXAoc2pidWYpCisjZW5kaWYgLyogQ0tfUE9TSVhfU0lHICovCisJICAgICkgewkJCQkvKiBUaW1l ciBleHBpcmVkICovCisJICAgIHR0aW5jdGltbyA9IDE7CisJICAgIG4gPSAtMTsJCQkvKiBzZXQg ZmxhZyAqLworCX0gZWxzZSB7CisjaWZkZWYgTVlSRUFECisJICAgIG4gPSBteXJlYWQoKTsJCS8q IElmIG1hbmFnaW5nIG93biBidWZmZXIuLi4gKi8KKwkgICAgZGVidWcoRjEwMSwidHRpbmMgbXly ZWFkIiwiIixuKTsKKwkgICAgY2ggPSBuOworI2Vsc2UKKwkgICAgbiA9IHJlYWQoZmQsJmNoLDEp OwkJLyogT3RoZXJ3aXNlIGNhbGwgdGhlIHN5c3RlbS4gKi8KKwkgICAgaWYgKG4gPT0gMCkgbiA9 IC0xOworCSAgICBkZWJ1ZyhGMTAxLCJ0dGluYyByZWFkIiwiIixuKTsKKyNlbmRpZiAvKiBNWVJF QUQgKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKwkgICAgaWYgKFRFTE9QVF9VKFRFTE9QVF9F TkNSWVBUSU9OKSAmJiBuID49IDApIHsKKwkJY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsK KwkgICAgfQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKwkgICAgaWYgKG4gPj0gMCkKKwkg ICAgICBuID0gKHVuc2lnbmVkKSAoY2ggJiAweGZmKTsKKwkgICAgZWxzZQorCSAgICAgIG4gPSAo biA8IDApID8gLTQgOiAtMjsJLyogU3BlY2lhbCByZXR1cm4gY29kZXMuICovCisJfQorCXR0aW1v ZmYoKTsJCQkvKiBUdXJuIG9mZiB0aGUgdGltZXIgKi8KKwlpZiAob2xkYWxhcm0gPiAwKSB7CisJ ICAgIGlmIChuID09IC0xKQkJLyogYW5kIHJlc3RvcmUgYW55IHByZXZpb3VzIGFsYXJtICovCisJ ICAgICAgb2xkYWxhcm0gLT0gdGltbzsKKwkgICAgaWYgKG9sZGFsYXJtIDwgMCkJCS8qIGFkanVz dGVkIGJ5IG91ciB0aW1lb3V0IGludGVydmFsICovCisJICAgICAgb2xkYWxhcm0gPSAwOworCSAg ICBpZiAob2xkYWxhcm0pIHsKKwkgICAgICAgIGRlYnVnKEYxMDEsInR0aW5jIHJlc3RvcmluZyBv bGRhbGFybSIsIiIsb2xkYWxhcm0pOworCQlhbGFybShvbGRhbGFybSk7CisJICAgIH0KKwl9Cisj aWZkZWYgTkVUQ09OTgorCWlmIChuZXRjb25uKSB7CisJICAgIGlmIChuID09IC0yKSB7CQkvKiBy ZWFkKCkgcmV0dXJucyAwICovCisJCW5ldGNsb3MoKTsJCS8qIG9uIG5ldHdvcmsgcmVhZCBmYWls dXJlICovCisJCW5ldGNvbm4gPSAwOworCQllcnJubyA9IEVOT1RDT05OOworCSAgICB9CisJfQor I2VuZGlmCS8qIE5FVENPTk4gKi8KKyNpZmRlZiBUTkNPREUKKwlpZiAoKG4gPiAtMSkgJiYgaXNf dG4pCisJICByZXR1cm4oKHVuc2lnbmVkKShuICYgMHhmZikpOworCWVsc2UKKyNlbmRpZiAvKiBU TkNPREUgKi8KKwkgIC8qIFJldHVybiBtYXNrZWQgY2hhciBvciBuZWcuICovCisJICByZXR1cm4o IChuIDwgMCkgPyBuIDogKHVuc2lnbmVkKShuICYgdHRwbXNrKSApOworICAgIH0KK30KKworLyog IFMgTiBEIEIgUiBLICAtLSAgU2VuZCBhIEJSRUFLIHNpZ25hbCBvZiB0aGUgZ2l2ZW4gZHVyYXRp b24gICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworc25kYnJrKGludCBtc2VjKSB7 CQkJLyogQXJndW1lbnQgaXMgbWlsbGlzZWNvbmRzICovCisjZWxzZQorc25kYnJrKG1zZWMpIGlu dCBtc2VjOyB7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNpZm5kZWYgUE9TSVgKKyAgICBpbnQg eCwgbjsKKyNlbmRpZiAvKiBQT1NJWCAqLworCisjaWZkZWYgT1hPUworI2RlZmluZSBCU0RCUkVB SworI2VuZGlmIC8qIE9YT1MgKi8KKworI2lmZGVmIEFOWUJTRAorI2RlZmluZSBCU0RCUkVBSwor I2VuZGlmIC8qIEFOWUJTRCAqLworCisjaWZkZWYgQlNENDQKKyNkZWZpbmUgQlNEQlJFQUsKKyNl bmRpZiAvKiBCU0Q0NCAqLworCisjaWZkZWYgQ09IRVJFTlQKKyNpZmRlZiBCU0RCUkVBSworI3Vu ZGVmIEJTREJSRUFLCisjZW5kaWYgLyogQlNEQlJFQUsgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAq LworCisjaWZkZWYgQkVMTFYxMAorI2lmZGVmIEJTREJSRUFLCisjdW5kZWYgQlNEQlJFQUsKKyNl bmRpZiAvKiBCU0RCUkVBSyAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKworI2lmZGVmIFBST1ZY MQorICAgIGNoYXIgc3BkOworI2VuZGlmIC8qIFBST1ZYMSAqLworCisgICAgZGVidWcoRjEwMSwi dHRzbmRiIHR0eWZkIiwiIix0dHlmZCk7CisgICAgaWYgKHR0eWZkIDwgMCkgcmV0dXJuKC0xKTsg ICAgICAgICAgLyogTm90IG9wZW4uICovCisKKyNpZmRlZiBQbGFuOQorICAgIHJldHVybiBwOXNu ZGJyayhtc2VjKTsKKyNlbHNlCisjaWZkZWYgTkVUQ09OTgorI2lmZGVmIE5FVENNRAorICAgIGlm ICh0dHBpcGUpCQkJCS8qIFBpcGUgKi8KKyAgICAgIHJldHVybih0dG9jKCdcMCcpKTsKKyNlbmRp ZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpCisgICAgICByZXR1 cm4odHRvYygnXDAnKSk7CisjZW5kaWYgLyogTkVUUFRZICovCisgICAgaWYgKG5ldGNvbm4pIAkJ CS8qIFNlbmQgbmV0d29yayBCUkVBSyAqLworICAgICAgcmV0dXJuKG5ldGJyZWFrKCkpOworI2Vu ZGlmIC8qIE5FVENPTk4gKi8KKworICAgIGlmIChtc2VjIDwgMSB8fCBtc2VjID4gNTAwMCkgcmV0 dXJuKC0xKTsgLyogQmFkIGFyZ3VtZW50ICovCisKKyNpZmRlZiBQT1NJWAkJCQkvKiBFYXN5IGlu IFBPU0lYICovCisgICAgeworCWludCB4OworCWRlYnVnKEYxMTEsInNuZGJyayBQT1NJWCIsY2tp dG9hKG1zZWMpLChtc2VjLzM3NSkpOworCWVycm5vID0gMDsKKwl4ID0gdGNzZW5kYnJlYWsodHR5 ZmQsbXNlYyAvIDM3NSk7CisJZGVidWcoRjExMSwic25kYnJrIHRjc2VuZGJyZWFrIixja2l0b2Eo ZXJybm8pLHgpOworCXJldHVybih4KTsKKyAgICB9CisjZWxzZQorI2lmZGVmIFBST1ZYMQorICAg IGd0dHkodHR5ZmQsJnR0YnVmKTsgICAgICAgICAgICAgICAgIC8qIEdldCBjdXJyZW50IHR0eSBm bGFncyAqLworICAgIHNwZCA9IHR0YnVmLnNnX29zcGVlZDsgICAgICAgICAgICAgIC8qIFNhdmUg c3BlZWQgKi8KKyAgICB0dGJ1Zi5zZ19vc3BlZWQgPSBCNTA7ICAgICAgICAgICAgICAvKiBDaGFu Z2UgdG8gNTAgYmF1ZCAqLworICAgIHN0dHkodHR5ZmQsJnR0YnVmKTsgICAgICAgICAgICAgICAg IC8qICAuLi4gKi8KKyAgICBuID0gKGludClzdHJsZW4oYnJudWxzKTsJCS8qIFNlbmQgdGhlIHJp Z2h0IG51bWJlciBvZiBudWxscyAqLworICAgIHggPSBtc2VjIC8gOTE7CisgICAgaWYgKHggPiBu KSB4ID0gbjsKKyAgICB3cml0ZSh0dHlmZCxicm51bHMsbik7CisgICAgdHRidWYuc2dfb3NwZWVk ID0gc3BkOyAgICAgICAgICAgICAgLyogUmVzdG9yZSBzcGVlZCAqLworICAgIHN0dHkodHR5ZmQs JnR0YnVmKTsgICAgICAgICAgICAgICAgIC8qICAuLi4gKi8KKyAgICByZXR1cm4oMCk7CisjZWxz ZQorI2lmZGVmIGFlZ2lzCisgICAgc2lvXyRjb250cm9sKChzaG9ydCl0dHlmZCwgc2lvXyRzZW5k X2JyZWFrLCBtc2VjLCBzdCk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBCU0RCUkVB SworICAgIG4gPSBGV1JJVEU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIG91dHB1 dCBxdWV1ZS4gKi8KKy8qIFdhdGNoIG91dCBmb3IgaW50IHZzIGxvbmcgcHJvYmxlbXMgaW4gJm4g YXJnISAqLworICAgIGRlYnVnKEYxMDEsInNuZGJyayBCU0RCUkVBSyIsIiIsbXNlYyk7CisgICAg aW9jdGwodHR5ZmQsVElPQ0ZMVVNILCZuKTsgICAgICAgICAgLyogSWdub3JlIGFueSBlcnJvcnMu LiAqLworICAgIGlmIChpb2N0bCh0dHlmZCxUSU9DU0JSSywoY2hhciAqKTApIDwgMCkgeyAgLyog VHVybiBvbiBCUkVBSyAqLworICAgICAgICBwZXJyb3IoIkNhbid0IHNlbmQgQlJFQUsiKTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgeCA9IG1zbGVlcChtc2VjKTsgICAgICAgICAg ICAgICAgICAgIC8qIFNsZWVwIGZvciBzbyBtYW55IG1pbGxpc2Vjb25kcyAqLworICAgIGlmIChp b2N0bCh0dHlmZCxUSU9DQ0JSSywoY2hhciAqKTApIDwgMCkgeyAgLyogVHVybiBvZmYgQlJFQUsg Ki8KKyAgICAgICAgcGVycm9yKCJCUkVBSyBzdHVjayEhISIpOworICAgICAgICBkb2V4aXQoQkFE X0VYSVQsLTEpOwkJLyogR2V0IG91dCwgY2xvc2luZyB0aGUgbGluZS4gKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHdpdGggYmFkIGV4aXQgc3RhdHVzICov CisgICAgfQorICAgIHJldHVybih4KTsKKyNlbHNlCisjaWZkZWYgQVRUU1YKKy8qCisgIE5vIHdh eSB0byBzZW5kIGEgbG9uZyBCUkVBSyBpbiBTeXMgViwgc28gc2VuZCBhIGJ1bmNoIG9mIHJlZ3Vs YXIgb25lcy4KKyAgKEFjdHVhbGx5LCBTeXMgViBSNCBpcyAqc3VwcG9zZWQqIHRvIGhhdmUgdGhl IFBPU0lYIHRjc2VuZGJyZWFrKCkgZnVuY3Rpb24sCisgIGJ1dCB0aGVyZSdzIG5vIHdheSBmb3Ig dGhpcyBjb2RlIHRvIGtub3cgZm9yIHN1cmUuKQorKi8KKyAgICBkZWJ1ZyhGMTAxLCJzbmRicmsg QVRUU1YiLCIiLG1zZWMpOworICAgIHggPSBtc2VjIC8gMjc1OworICAgIGZvciAobiA9IDA7IG4g PCB4OyBuKyspIHsKKwkvKiBSZXBvcnRlZGx5IHRoZSBjYXN0IGJyZWFrcyB0aGlzIGZ1bmN0aW9u IG9uIHNvbWUgc3lzdGVtcyAqLworCS8qIEJ1dCB0aGVuIHdoeSB3YXMgaXQgaGVyZSBpbiB0aGUg Zmlyc3QgcGxhY2U/ICovCisJaWYgKGlvY3RsKHR0eWZkLFRDU0JSSywgLyogKGNoYXIgKikgKi8g MCkgPCAwKSB7CisJICAgIHBlcnJvcigiQ2FuJ3Qgc2VuZCBCUkVBSyIpOworCSAgICByZXR1cm4o LTEpOworCX0KKyAgICB9CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiAgVjcKKyAgICBk ZWJ1ZyhGMTAxLCJzbmRicmsgVjciLCIiLG1zZWMpOworICAgIHJldHVybihnZW5icmsodHR5ZmQs MjUwKSk7CQkvKiBTaW11bGF0ZSBhIEJSRUFLICovCisjZWxzZQorICAgIGRlYnVnKEYxMDEsInNu ZGJyayBjYXRjaGFsbCIsIiIsbXNlYyk7CisgICAgdHRvYygwKTt0dG9jKDApO3R0b2MoMCk7dHRv YygwKTsKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogVjcgKi8KKyNlbmRpZiAvKiBCU0RCUkVB SyAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogYWVnaXMgKi8KKyNlbmRpZiAvKiBQ Uk9WWDEgKi8KKyNlbmRpZiAvKiBQT1NJWCAqLworI2VuZGlmIC8qIFBsYW45ICovCit9CisKKy8q ICBUIFQgUyBOIEQgQiAgLS0gIFNlbmQgYSBCUkVBSyBzaWduYWwgICovCisKK2ludAordHRzbmRi KCkgeworI2lmZGVmIFROX0NPTVBPUlQKKyAgICBpZiAobmV0Y29ubiAmJiBpc3RuY29tcG9ydCgp KQorICAgICAgcmV0dXJuKCh0bnNuZGIoMjc1TCkgPj0gMCkgPyAwIDogLTEpOworICAgIGVsc2UK KyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgICByZXR1cm4oc25kYnJrKDI3NSkpOworfQor CisvKiAgVCBUIFMgTiBEIEwgQiAgLS0gIFNlbmQgYSBMb25nIEJSRUFLIHNpZ25hbCAgKi8KKwor aW50Cit0dHNuZGxiKCkgeworI2lmZGVmIFROX0NPTVBPUlQKKyAgICBpZiAobmV0Y29ubiAmJiBp c3RuY29tcG9ydCgpKQorICAgICAgcmV0dXJuKCh0bnNuZGIoMTgwMEwpID49IDApID8gMCA6IC0x KTsKKyAgICBlbHNlCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAgIHJldHVybihzbmRicmso MTUwMCkpOworfQorCisvKiAgTSBTIEwgRSBFIFAgIC0tICBNaWxsaXNlY29uZCB2ZXJzaW9uIG9m IHNsZWVwKCkuICAqLworCisvKgorICBDYWxsIHdpdGggbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyAo dGhvdXNhbmR0aHMgb2Ygc2Vjb25kcykgdG8gc2xlZXAuCisgIEludGVuZGVkIG9ubHkgZm9yIHNt YWxsIGludGVydmFscy4gIEZvciBiaWcgb25lcywganVzdCB1c2Ugc2xlZXAoKS4KKyAgSGlnaGx5 IHN5c3RlbS1kZXBlbmRlbnQuCisgIFJldHVybnMgMCBhbHdheXMsIGV2ZW4gaWYgaXQgZGlkbid0 IHdvcmsuCisqLworCisvKiBEZWZpbmUgTVNMRlRJTUUgZm9yIHN5c3RlbXMgdGhhdCBtdXN0IHVz ZSBhbiBmdGltZSgpIGxvb3AuICovCisjaWZkZWYgQU5ZQlNECQkJCS8qIEZvciBwcmUtNC4yIEJT RCB2ZXJzaW9ucyAqLworI2lmbmRlZiBCU0Q0CisjZGVmaW5lIE1TTEZUSU1FCisjZW5kaWYgLyog QlNENCAqLworI2VuZGlmIC8qIEFOWUJTRCAqLworCisjaWZkZWYgVE9XRVIxCQkJCS8qIE5DUiBU b3dlciBPUyAxLjAgKi8KKyNkZWZpbmUgTVNMRlRJTUUKKyNlbmRpZiAvKiBUT1dFUjEgKi8KKwor I2lmZGVmIENPSEVSRU5UICAgICAgICAgLyogQ29oZXJlbnQuLi4gKi8KKyNpZm5kZWYgX0kzODYg ICAgICAgICAgIC8qIE1heWJlIENvaGVyZW50LzM4NiBzaG91bGQgZ2V0IHRoaXMsIHRvbyAqLwor I2RlZmluZSBNU0xGVElNRSAgICAgICAgLyogT3BpbmlvbnMgYXJlIGRpdmlkZWQgKi8KKyNlbmRp ZiAvKiBfSTM4NiAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisKKyNpZmRlZiBDT01NRU5UCisj aWZkZWYgR0VUTVNFQworCisvKiBNaWxsaXNlY29uZCB0aW1lciAqLworCitzdGF0aWMgbG9uZyBt c2VjYmFzZSA9IDBMOwkJLyogVW5zaWduZWQgbG9uZyBub3QgcG9ydGFibGUgKi8KKworbG9uZwor Z2V0bXNlYygpIHsJCQkJLyogTWlsbGlzZWNvbmRzIHNpbmNlIGJhc2UgdGltZSAqLworICAgIHN0 cnVjdCB0aW1ldmFsIHh2OworICAgIHN0cnVjdCB0aW1lem9uZSB4ejsKKyAgICBsb25nIHNlY3Ms IG1zZWNzOworICAgIGlmICgKKyNpZmRlZiBHVE9ET05FQVJHCisJZ2V0dGltZW9mZGF5KCZ0dikK KyNlbHNlCisjaWZkZWYgUFRYCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkKKyNlbHNlCisJZ2V0 dGltZW9mZGF5KCZ0diwgJnR6KQorI2VuZGlmIC8qIFBUWCAqLworI2VuZGlmIC8qIEdUT0RPTkVB UkcgKi8KKwk8IDApCisgICAgICByZXR1cm4oLTEpOworICAgIGlmIChtc2VjYmFzZSA9PSAwTCkg ewkJLyogRmlyc3QgY2FsbCwgc2V0IGJhc2UgdGltZS4gKi8KKwltc2VjYmFzZSA9IHR2LnR2X3Nl YzsKKwlkZWJ1ZyhGMTAxLCJnZXRtc2VjIGJhc2UiLCIiLG1zZWNiYXNlKTsKKyAgICB9CisgICAg cmV0dXJuKCgodHYudHZfc2VjIC0gbXNlY2Jhc2UpICogMTAwMEwpICsgKHR2LnR2X3VzZWMgLyAx MDAwTCkpOworfQorI2VuZGlmIC8qIEdFVE1TRUMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisK KyNpZmRlZiBTRUxFQ1QKK2ludAordHR3YWl0KGZkLCBzZWNzKSBpbnQgZmQsIHNlY3M7IHsKKyAg ICBpbnQgeDsKKyAgICBmZF9zZXQgcmZkczsKKyAgICBGRF9aRVJPKCZyZmRzKTsKKyAgICBGRF9T RVQoZmQsJnJmZHMpOworICAgIHR2LnR2X3NlYyA9IHNlY3M7CisgICAgdHYudHZfdXNlYyA9IDBM OworICAgIGVycm5vID0gMDsKKyAgICBpZiAoKHggPSBzZWxlY3QoRkRfU0VUU0laRSwKKyNpZmRl ZiBIUFVYOQorCQkgICAgKGludCAqKQorI2Vsc2UKKyNpZmRlZiBIUFVYMTAwMAorCQkgICAgKGlu dCAqKQorI2VuZGlmIC8qIEhQVVgxMDAwICovCisjZW5kaWYgLyogSFBVWDkgKi8KKwkJICAgICZy ZmRzLAorCQkgICAgMCwgMCwgJnR2KSkgPCAwKSB7CisJZGVidWcoRjEwMSwidHR3YWl0IHNlbGVj dCBlcnJubyIsIiIsZXJybm8pOworCXJldHVybigwKTsKKyAgICB9IGVsc2UgeworCWRlYnVnKEYx MDEsInR0d2FpdCBPSyIsIiIsZXJybm8pOworCXggPSBGRF9JU1NFVChmZCwgJnJmZHMpOworCWRl YnVnKEYxMDEsInR0d2FpdCBzZWxlY3QgeCIsIiIseCk7CisJcmV0dXJuKHggPyAxIDogMCk7Cisg ICAgfQorfQorI2VuZGlmIC8qIFNFTEVDVCAqLworCitpbnQKK21zbGVlcChtKSBpbnQgbTsgewor LyoKKyAgT3RoZXIgcG9zc2liaWxpdGllcyBoZXJlIGFyZToKKyAgIG5hbm9zbGVlcCgpLCByZXBv cnRlZGx5IGRlZmluZWQgaW4gUE9TSVguNC4KKyAgIHNnaW5hcCgpLCBJUklYIG9ubHkgKGJhY2sg dG8gd2hhdCBJUklYIHZlcnNpb24gSSBkb24ndCBrbm93KS4KKyovCisjaWZkZWYgUGxhbjkKKyAg ICByZXR1cm4gX1NMRUVQKG0pOworI2Vsc2UKKyNpZmRlZiBCRU9TT1JCRUJPWAorICAgIHNub296 ZShtKjEwMDApOworI2Vsc2UgLyogQkVPU09SQkVCT1ggKi8KKyNpZmRlZiBTRUxFQ1QKKyAgICBp bnQgdDEsIHg7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIFNFTEVDVCAxIiwiIixtKTsKKyAgICBp ZiAobSA8PSAwKSByZXR1cm4oMCk7CisgICAgaWYgKG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJp ZyBhcmd1bWVudHMuICovCisJc2xlZXAobS8xMDAwKTsKKwltID0gbSAlIDEwMDA7CisJaWYgKG0g PCAxMCkgcmV0dXJuKDApOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgU0VMRUNUIDIi LCIiLG0pOworI2lmZGVmIEJFTExWMTAKKyAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwg KGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCBtICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIEJF TExWMTAgc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIEJFTExWMTAgKi8KKyNpZmRlZiBIUFVYOQor ICAgIGdldHRpbWVvZmRheSgmdHYsICZ0eik7CisjZWxzZQorCisjaWZuZGVmIENPSEVSRU5UCisj aWZkZWYgR1RPRE9ORUFSRworICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2KSA8IDApCisjZWxzZQor I2lmZGVmIFBUWAorICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpIDwgMCkKKyNlbHNlCisj aWZkZWYgTk9USU1FWk9ORQorICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKSA8IDApCS8q IHdvbmRlciB3aGF0IHRoaXMgZG9lcy4uLiAqLworI2Vsc2UKKyAgICBpZiAoZ2V0dGltZW9mZGF5 KCZ0diwgJnR6KSA8IDApCisjZW5kaWYgLyogTk9USU1FWk9ORSAqLworI2VuZGlmIC8qIFBUWCAq LworI2VuZGlmIC8qIEdUT0RPTkVBUkcgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgdDEgPSB0 di50dl9zZWM7ICAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kcyAqLworI2VuZGlmIC8qIENP SEVSRU5UICovCisjZW5kaWYgLyogSFBVWDkgKi8KKyAgICB0di50dl9zZWMgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAvKiBVc2Ugc2VsZWN0KCkgKi8KKyAgICB0di50dl91c2VjID0gbSAqIDEw MDBMOworI2lmZGVmIEJTRDQ0CisgICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9z ZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIEJTRDQ0 IHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBCU0Q0NCAqLworI2lmZGVmIF9fbGludXhfXworICAg IHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0 diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBfX2xpbnV4X18gc2VsZWN0IiwiIix4KTsKKyNl bHNlIC8qIF9fbGludXhfXyAqLworI2lmZGVmIEJTRDQzCisgICAgeCA9IHNlbGVjdCggMCwgKGZk X3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEw MSwibXNsZWVwIEJTRDQzIHNlbGVjdCIsIiIseCk7CisjZWxzZSAvKiBCU0Q0MyAqLworI2lmZGVm IFFOWDYKKyAgICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9z ZXQgKikwLCAmdHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgUU5YNiBzZWxlY3QiLCIiLHgp OworI2Vsc2UgLyogUU5YNiAqLworI2lmZGVmIFFOWAorICAgIHggPSBzZWxlY3QoIDAsIChmZF9z ZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEs Im1zbGVlcCBRTlggc2VsZWN0IiwiIix4KTsKKyNlbHNlIC8qIFFOWCAqLworI2lmZGVmIENPSEVS RU5UCisgICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0 ICopMCwgJnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIENPSEVSRU5UIHNlbGVjdCIsIiIs eCk7CisjZWxzZSAvKiBDT0hFUkVOVCAqLworI2lmZGVmIEhQVVgxMDAwCQkJCS8qIDEwLjAwIG9u bHksIG5vdCAxMC4xMCBvciBsYXRlciAqLworICAgIHggPSBzZWxlY3QoIDAsIChpbnQgKikwLCAo aW50ICopMCwgKGludCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBIUC1VWCAx MC4wMCBzZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogSFBVWDEwMDAgKi8KKyNpZmRlZiBTVlI0Cisg ICAgeCA9IHNlbGVjdCggMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwg JnR2ICk7CisgICAgZGVidWcoRjEwMSwibXNsZWVwIFNWUjQgc2VsZWN0IiwiIix4KTsKKyNlbHNl IC8qIFNWUjQgKi8KKyNpZmRlZiBPU0Y0MAorICAgIHggPSBzZWxlY3QoIDAsIChmZF9zZXQgKikw LCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0diApOworICAgIGRlYnVnKEYxMDEsIm1zbGVl cCBPU0Y0MCBzZWxlY3QiLCIiLHgpOworI2Vsc2UgLyogT1NGNDAgKi8KKyNpZmRlZiBQVFgKKyAg ICB4ID0gc2VsZWN0KCAwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAm dHYgKTsKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgT1NGNDAgc2VsZWN0IiwiIix4KTsKKyNlbHNl CisgICAgeCA9IHNlbGVjdCggMCwgKGludCAqKTAsIChpbnQgKikwLCAoaW50ICopMCwgJnR2ICk7 CisgICAgZGVidWcoRjEwMSwibXNsZWVwIGNhdGNoLWFsbCBzZWxlY3QiLCIiLHgpOworI2VuZGlm IC8qIFBUWCAqLworI2VuZGlmIC8qIE9TRjQwICovCisjZW5kaWYgLyogSFAxMDAwICovCisjZW5k aWYgLyogU1ZSNCAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCisjZW5kaWYgLyogUU5YICovCisj ZW5kaWYgLyogUU5YNiAqLworI2VuZGlmIC8qIEJTRDQzICovCisjZW5kaWYgLyogX19saW51eF9f ICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbmRpZiAvKiBCRUxMVjEwICovCisgICAgcmV0dXJu KDApOworCisjZWxzZQkJCQkJLyogTm90IFNFTEVDVCAqLworI2lmZGVmIENLX1BPTEwJCQkJLyog V2UgaGF2ZSBwb2xsKCkgKi8KKyAgICBzdHJ1Y3QgcG9sbGZkIHBmZDsJCQkvKiBTdXBwbHkgYSB2 YWxpZCBhZGRyZXNzIGZvciBwb2xsKCkgKi8KKworI2lmZGVmIE9EVDMwCQkJCS8qIEJ1dCBpbiBT Q08gT0RUIDMuMCAqLworI2lmZGVmIE5BUAkJCQkvKiB3ZSBzaG91bGQgdXNlIG5hcCgpIGluc3Rl YWQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgT0RUIDMuMCBOQVAiLCIiLG0pOyAvKiBiZWNh dXNlIHVzaW5nIHBvbGwoKSBoZXJlICovCisgICAgbmFwKChsb25nKW0pOwkJCSAgIC8qIHNlZW1z IHRvIGJyZWFrIGRpYWxpbmcuICovCisgICAgcmV0dXJuKDApOworI2Vsc2UKKyAgICBkZWJ1ZyhG MTAxLCJtc2xlZXAgT0RUIDMuMCBQT0xMIiwiIixtKTsKKyAgICBwb2xsKCZwZmQsIDAsIG0pOwor ICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBOQVAgKi8KKyNlbHNlCisgICAgZGVidWcoRjEwMSwi bXNsZWVwIFBPTEwiLCIiLG0pOworICAgIHBvbGwoJnBmZCwgMCwgbSk7CisgICAgcmV0dXJuKDAp OworI2VuZGlmIC8qIE9EVDMwICovCisKKy8qCisgIFdlIGNvdWxkIGhhbmRsZSB0aGUgYWJvdmUg bW9yZSBjbGVhbmx5IGJ5IGp1c3QgbGV0dGluZyBuYXAoKSBhbHdheXMKKyAgdGFrZSBwcmVjZWRl bmNlIG92ZXIgcG9sbCgpIGluIHRoaXMgcm91dGluZSwgYnV0IHRoZXJlIGlzIG5vIHdheSB0byBr bm93CisgIHdoZXRoZXIgdGhhdCB3b3VsZCBicmVhayBzb21ldGhpbmcgZWxzZS4KKyovCisKKyNl bHNlCQkJCQkvKiBOb3QgUE9MTCAqLworI2lmZGVmIFVTTEVFUAorLyoKKyAgIlRoaXMgcm91dGlu ZSBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZXRpdGltZXIoMik7IGl0IHJlcXVpcmVzIGVpZ2h0Cisg IHN5c3RlbSBjYWxscy4uLiIuICBJbiBvdGhlciB3b3JkcywgaXQgbWlnaHQgdGFrZSA1IG1pbnV0 ZXMgdG8gc2xlZXAKKyAgMTAgbWlsbGlzZWNvbmRzLi4uCisqLworICAgIGRlYnVnKEYxMDEsIm1z bGVlcCBVU0xFRVAiLCIiLG0pOworICAgIGlmIChtID49IDEwMDApIHsJCQkvKiBDYXRjaCBiaWcg YXJndW1lbnRzLiAqLworCXNsZWVwKG0vMTAwMCk7CisJbSA9IG0gJSAxMDAwOworCWlmIChtIDwg MTApIHJldHVybigwKTsKKyAgICB9CisgICAgdXNsZWVwKCh1bnNpZ25lZCBpbnQpKG0gKiAxMDAw KSk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBhZWdpcworICAgIHRpbWVfJGNsb2Nr X3QgZHVyOworICAgIGRlYnVnKEYxMDEsIm1zbGVlcCBhZWdpcyIsIiIsbSk7CisgICAgZHVyLmMy LmhpZ2gxNiA9IDA7CisgICAgZHVyLmMyLmxvdzMyICA9IDI1MCAqIG07IC8qIG9uZSBtaWxsaXNl Y29uZCA9IDI1MCBmb3VyIG1pY3Jvc2Vjb25kIHRpY2tzICovCisgICAgdGltZV8kd2FpdCh0aW1l XyRyZWxhdGl2ZSwgZHVyLCBzdCk7CisgICAgcmV0dXJuKDApOworI2Vsc2UKKyNpZmRlZiBQUk9W WDEKKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgVmVuaXgiLCIiLG0pOworICAgIGlmIChtIDw9IDAp IHJldHVybigwKTsKKyAgICBzbGVlcCgtKChtICogNjAgKyA1MDApIC8gMTAwMCkpOworICAgIHJl dHVybigwKTsKKyNlbHNlCisjaWZkZWYgTkFQCisgICAgZGVidWcoRjEwMSwibXNsZWVwIE5BUCIs IiIsbSk7CisgICAgbmFwKChsb25nKW0pOworICAgIHJldHVybigwKTsKKyNlbHNlCisjaWZkZWYg QVRUU1YKKyNpZm5kZWYgQlNENDQKKyAgICBleHRlcm4gbG9uZyB0aW1lcygpOwkJLyogT3IgI2lu Y2x1ZGUgPHRpbWVzLmg+ID8gKi8KKyNlbmRpZiAvKiBCU0Q0NCAqLworICAgIGxvbmcgdDEsIHQy LCB0YXJyYXlbNF07CisgICAgaW50IHQzOworICAgIGNoYXIgKmNwID0gZ2V0ZW52KCJIWiIpOwor ICAgIGludCBDTE9DS19USUNLOworICAgIGludCBoZXJ0ejsKKworICAgIGlmIChjcCAmJiAoaGVy dHogPSBhdG9pKGNwKSkpIHsKKyAgICAgICAgQ0xPQ0tfVElDSyAgPSAxMDAwIC8gaGVydHo7Cisg ICAgfSBlbHNlIHsJCQkJLyogcHJvYmFibHkgc2luZ2xlIHVzZXIgbW9kZSAqLworI2lmZGVmIEha CisgICAgICAgIENMT0NLX1RJQ0sgID0gMTAwMCAvIEhaOworI2Vsc2UKKwlzdGF0aWMgd2FybmVk ID0gMDsKKwkvKiBIWiBhbHdheXMgZXhpc3RzIGluLCBmb3IgaW5zdGFuY2UsIFNDTyBYZW5peCwg c28geW91IGRvbid0IGhhdmUgdG8KKwkgKiBtYWtlIHNwZWNpYWwgI2lmZGVmcyBmb3IgWEVOSVgg aGVyZSwgbGlrZSBpbiB2ZXIgNEYuIEFsc28sIGlmIHlvdQorCSAqIGhhdmUgWGVuaXgsIHlvdSBo YXZlIHNob3VsZCBoYXZlIG5hcCgpLCBzbyB0aGUgYmVzdCBpcyB0byB1c2UgLUROQVAKKwkgKiBp biB0aGUgbWFrZWZpbGUuIE1vc3Qgc3lzdGVtcyBoYXZlIEhaLgorCSAqLworCUNMT0NLX1RJQ0sg PSAxNzsJCS8qIDEvNjAgc2VjICovCisJaWYgKCF3YXJuZWQpIHsKKyAgICAgICAgICBwcmludGYo Indhcm5pbmc6IGVudmlyb25tZW50IHZhcmlhYmxlIEhaIGJhZC4uLiB1c2luZyBIWj0lZFxyXG4i LAorCQkgMTAwMCAvIENMT0NLX1RJQ0spOworICAgICAgICAgIHdhcm5lZCA9IDE7CisJfQorI2Vu ZGlmIC8qICFIWiAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJtc2xlZXAgQVRUU1YiLCIiLG0p OworICAgIGlmIChtIDw9IDApIHJldHVybigwKTsKKyAgICBpZiAobSA+PSAxMDAwKSB7CQkJLyog Q2F0Y2ggYmlnIGFyZ3VtZW50cy4gKi8KKwlzbGVlcChtLzEwMDApOworCW0gPSBtICUgMTAwMDsK KwlpZiAobSA8IDEwKSByZXR1cm4oMCk7CisgICAgfQorICAgIGlmICgodDEgPSB0aW1lcyh0YXJy YXkpKSA8IDApIHJldHVybigtMSk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCh0MiA9 IHRpbWVzKHRhcnJheSkpIDwgMCkgcmV0dXJuKC0xKTsKKyAgICAgICAgdDMgPSAoKGludCkodDIg LSB0MSkpICogQ0xPQ0tfVElDSzsKKyAgICAgICAgaWYgKHQzID4gbSkgcmV0dXJuKHQzKTsKKyAg ICB9CisjZWxzZSAvKiBOb3QgQVRUU1YgKi8KKyNpZmRlZiBNU0xGVElNRQkJCQkvKiBVc2UgZnRp bWUoKSBsb29wLi4uICovCisgICAgaW50IHQxLCB0MyA9IDA7CisgICAgZGVidWcoRjEwMSwibXNs ZWVwIE1TTEZUSU1FIiwiIixtKTsKKyAgICBpZiAobSA8PSAwKSByZXR1cm4oMCk7CisgICAgaWYg KG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJpZyBhcmd1bWVudHMuICovCisJc2xlZXAobS8xMDAw KTsKKwltID0gbSAlIDEwMDA7CisJaWYgKG0gPCAxMCkgcmV0dXJuKDApOworICAgIH0KKyNpZmRl ZiBRTlgKKyAgICBmdGltZSgmZnRwKTsJCQkvKiB2b2lkIGZ0aW1lKCkgaW4gUU5YICovCisjZWxz ZQorICAgIGlmIChmdGltZSgmZnRwKSA8IDApIHJldHVybigtMSk7CS8qIEdldCBiYXNlIHRpbWUu ICovCisjZW5kaWYgLyogUU5YICovCisgICAgdDEgPSAoKGZ0cC50aW1lICYgMHhmZikgKiAxMDAw KSArIGZ0cC5taWxsaXRtOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGZ0aW1lKCZmdHApOwkJ CS8qIEdldCBjdXJyZW50IHRpbWUgYW5kIGNvbXBhcmUuICovCisgICAgICAgIHQzID0gKCgoZnRw LnRpbWUgJiAweGZmKSAqIDEwMDApICsgZnRwLm1pbGxpdG0pIC0gdDE7CisgICAgICAgIGlmICh0 MyA+IG0pIHJldHVybigwKTsKKyAgICB9CisjZWxzZQorLyogVGhpcyBpbmNsdWRlcyB0cnVlIFBP U0lYLCB3aGljaCBoYXMgbm8gd2F5IHRvIGRvIHRoaXMuICovCisgICAgZGVidWcoRjEwMSwibXNs ZWVwIGJ1c3kgbG9vcCIsIiIsbSk7CisgICAgaWYgKG0gPj0gMTAwMCkgewkJCS8qIENhdGNoIGJp ZyBhcmd1bWVudHMuICovCisJc2xlZXAobS8xMDAwKTsKKwltID0gbSAlIDEwMDA7CisJaWYgKG0g PCAxMCkgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAobSA+IDApIHdoaWxlIChtID4gMCkgbS0t OwkvKiBKdXN0IGEgZHVtYiBidXN5IGxvb3AgKi8KKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyog TVNMRlRJTUUgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIE5BUCAqLworI2VuZGlm IC8qIFBST1ZYMSAqLworI2VuZGlmIC8qIGFlZ2lzICovCisjZW5kaWYgLyogQ0tfUE9MTCAqLwor I2VuZGlmIC8qIFNFTEVDVCAqLworI2VuZGlmIC8qIEJFT1NPUkJFQk9YICovCisjZW5kaWYgLyog VVNMRUVQICovCisjZW5kaWYgLyogUGxhbjkgKi8KK30KKworLyogIFIgVCBJIE0gRSBSIC0tICBS ZXNldCBlbGFwc2VkIHRpbWUgY291bnRlciAgKi8KKworVk9JRAorcnRpbWVyKCkgeworICAgIHRj b3VudCA9IHRpbWUoICh0aW1lX3QgKikgMCApOworfQorCisKKy8qICBHIFQgSSBNIEUgUiAtLSAg R2V0IGN1cnJlbnQgdmFsdWUgb2YgZWxhcHNlZCB0aW1lIGNvdW50ZXIgaW4gc2Vjb25kcyAgKi8K KworaW50CitndGltZXIoKSB7CisgICAgaW50IHg7CisgICAgeCA9IChpbnQpICh0aW1lKCAodGlt ZV90ICopIDAgKSAtIHRjb3VudCk7CisgICAgZGVidWcoRjEwMSwiZ3RpbWVyIiwiIix4KTsKKyAg ICByZXR1cm4oICh4IDwgMCkgPyAwIDogeCApOworfQorCisjaWZkZWYgR0ZUSU1FUgorLyoKKyAg RmxvYXRpbmctcG9pbnQgdGltZXJzLiAgUmVxdWlyZSBub3Qgb25seSBmbG9hdGluZyBwb2ludCBz dXBwb3J0LCBidXQKKyAgYWxzbyBnZXR0aW1lb2ZkYXkoKS4KKyovCitzdGF0aWMgc3RydWN0IHRp bWV2YWwgdHplcm87CisKK1ZPSUQKK3JmdGltZXIoKSB7CisjaWZkZWYgR1RPRE9ORUFSRwkJCS8q IEFjY291bnQgZm9yIE1vdCdzIGRlZmluaXRpb24gKi8KKyAgICAoVk9JRCkgZ2V0dGltZW9mZGF5 KCZ0emVybyk7CisjZWxzZQorICAgIChWT0lEKSBnZXR0aW1lb2ZkYXkoJnR6ZXJvLCAoc3RydWN0 IHRpbWV6b25lICopMCk7CisjZW5kaWYgLyogR1RPRE9ORUFSRyAqLworfQorCitDS0ZMT0FUCitn ZnRpbWVyKCkgeworICAgIHN0cnVjdCB0aW1ldmFsIHRub3csIHRkZWx0YTsKKyAgICBDS0ZMT0FU IHM7CisjaWZkZWYgREVCVUcKKyAgICBjaGFyIGZwYnVmWzY0XTsKKyNlbmRpZiAvKiBERUJVRyAq LworI2lmZGVmIEdUT0RPTkVBUkcJCQkvKiBBY2NvdW50IGZvciBNb3QncyBkZWZpbml0aW9uICov CisgICAgKFZPSUQpIGdldHRpbWVvZmRheSgmdG5vdyk7CisjZWxzZQorICAgIChWT0lEKSBnZXR0 aW1lb2ZkYXkoJnRub3csIChzdHJ1Y3QgdGltZXpvbmUgKikwKTsKKyNlbmRpZiAvKiBHVE9ET05F QVJHICovCisKKyAgICB0ZGVsdGEudHZfc2VjID0gdG5vdy50dl9zZWMgLSB0emVyby50dl9zZWM7 CisgICAgdGRlbHRhLnR2X3VzZWMgPSB0bm93LnR2X3VzZWMgLSB0emVyby50dl91c2VjOworCisg ICAgaWYgKHRkZWx0YS50dl91c2VjIDwgMCkgeworCXRkZWx0YS50dl9zZWMtLTsKKwl0ZGVsdGEu dHZfdXNlYyArPSAxMDAwMDAwOworICAgIH0KKyAgICBzID0gKENLRkxPQVQpIHRkZWx0YS50dl9z ZWMgKyAoKENLRkxPQVQpIHRkZWx0YS50dl91c2VjIC8gMTAwMDAwMC4wKTsKKyAgICBpZiAocyA8 IEdGTUlOVElNRSkKKyAgICAgIHMgPSBHRk1JTlRJTUU7CisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nKSB7CisJc3ByaW50ZihmcGJ1ZiwiJWYiLHMpOworCWRlYnVnKEYxMTAsImdmdGltZXIi LGZwYnVmLDApOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHJldHVybihzKTsKK30K KyNlbmRpZiAvKiBHRlRJTUVSICovCisKKy8qICBaIFQgSSBNIEUgIC0tICBSZXR1cm4gYXNjdGlt ZSgpLWZvcm1hdCBkYXRlL3RpbWUgc3RyaW5nICAqLworLyoKKyAgTk9URTogYXMgYSBzaWRlIGVm ZmVjdCBvZiBjYWxsaW5nIHRoaXMgcm91dGluZSwgd2UgY2FuIGFsc28gc2V0IHRoZQorICBmb2xs b3dpbmcgdHdvIHZhcmlhYmxlcywgZ2l2aW5nIHRoZSBtaWNyby0gYW5kIG1pbGxpc2Vjb25kcyAo ZnJhY3Rpb25zIG9mCisgIHNlY29uZHMpIG9mIHRoZSBjbG9jayB0aW1lLiAgQ3VycmVudGx5IHRo aXMgaXMgZG9uZSBvbmx5IGluIEJTRC1iYXNlZCBidWlsZHMKKyAgdGhhdCB1c2UgZ2V0dGltZW9m ZGF5KCkuICBXaGVuIHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IGZpbGxlZCBpbiwgdGhleSBhcmUK KyAgbGVmdCB3aXRoIGEgdmFsdWUgb2YgLTFMLgorKi8KK3N0YXRpYyBjaGFyIGFzY3RtYnVmWzY0 XTsKKworVk9JRAorenRpbWUocykgY2hhciAqKnM7IHsKKworI2lmZGVmIEdGVElNRVIKKy8qCisg IFRoZSBnZXR0aW1lb2ZkYXkoKSBtZXRob2QsIHdoaWNoIGFsc28gc2V0cyB6dG1zZWMgYW5kIHp0 dXNlYywgd29ya3MgZm9yCisgIGFsbCBHRlRJTUVSIGJ1aWxkcy4gIE5PVEU6IHp0bXNlYyBhbmQg enR1c2VjIGFyZSBkZWZpbmVkIGluIGNrY21haS5jLAorICBhbmQgZXh0ZXJuIGRlY2xhcmF0aW9u cyBmb3IgdGhlbSBhcmUgaW4gY2tjZGViLmg7IHRodXMgdGhleSBhcmUKKyAgZGVjbGFyZWQgaW4g dGhpcyBmaWxlIGJ5IGluY2x1c2lvbiBvZiBja2NkZWIuaC4KKyovCisgICAgY2hhciAqYXNjdGlt ZSgpOworICAgIHN0cnVjdCB0bSAqbG9jYWx0aW1lKCk7CisgICAgc3RydWN0IHRtICp0cDsKKyAg ICB6dG1zZWMgPSAtMUw7CisgICAgenR1c2VjID0gLTFMOworCisgICAgaWYgKCFzKQorICAgICAg ZGVidWcoRjEwMCwienRpbWUgcz09TlVMTCIsIiIsMCk7CisKKyNpZmRlZiBHVE9ET05FQVJHCisg ICAgLyogTm8gMm5kIGFyZyBpbiBNb3Rvcm9sYSBTVjg4IGFuZCBzb21lIG90aGVycyAqLworICAg IGlmIChnZXR0aW1lb2ZkYXkoJnR2KSA+IC0xKQorI2Vsc2UKKyNpZm5kZWYgQ09IRVJFTlQKKyNp ZmRlZiBQVFgKKyAgICBpZiAoZ2V0dGltZW9mZGF5KCZ0dixOVUxMKSA+IC0xKQorI2Vsc2UKKyNp ZmRlZiBOT1RJTUVaT05FCisgICAgaWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpID4gLTEpCS8q IHdvbmRlciB3aGF0IHRoaXMgZG9lcy4uLiAqLworI2Vsc2UKKyAgICBpZiAoZ2V0dGltZW9mZGF5 KCZ0diwgJnR6KSA+IC0xKQorI2VuZGlmIC8qIE5PVElNRVpPTkUgKi8KKyNlbmRpZiAvKiBQVFgg Ki8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIEdUT0RPTkVBUkcgKi8KKyAgICAg IHsJCQkJCS8qIEZpbGwgaW4gdG0gc3RydWN0ICovCisJenR1c2VjID0gdHYudHZfdXNlYzsJCS8q IE1pY3Jvc2Vjb25kcyAqLworCXp0bXNlYyA9IHp0dXNlYyAvIDEwMDBMOwkvKiBNaWxsaXNlY29u ZHMgKi8KKyNpZmRlZiBIUFVYOQorCXsKKwkgICAgdGltZV90IHp6OworCSAgICB6eiA9IHR2LnR2 X3NlYzsKKwkgICAgdHAgPSBsb2NhbHRpbWUoJnp6KTsJLyogQ29udmVydCB0byBsb2NhbCB0aW1l ICovCisJfQorI2Vsc2UKKyNpZmRlZiBIUFVYMTAwMAorCXsKKwkgICAgdGltZV90IHp6OworCSAg ICB6eiA9IHR2LnR2X3NlYzsKKwkgICAgdHAgPSBsb2NhbHRpbWUoJnp6KTsKKwl9CisjZWxzZQor I2lmZGVmIExJTlVYCisJeyAgIC8qIGF2b2lkIHVuYWxpZ25lZCBhY2Nlc3MgdHJhcCBvbiA2NC1i aXQgcGxhdGZvcm1zICovCisJICAgIHRpbWVfdCB6ejsKKwkgICAgenogPSB0di50dl9zZWM7CisJ ICAgIHRwID0gbG9jYWx0aW1lKCZ6eik7CisJfQorI2Vsc2UKKyNpZmRlZiBNQUNPU1gKKwl0cCA9 IGxvY2FsdGltZSgodGltZV90ICopJnR2LnR2X3NlYyk7IC8qIENvbnZlcnQgdG8gbG9jYWwgdGlt ZSAqLworI2Vsc2UKKwl0cCA9IGxvY2FsdGltZSgmdHYudHZfc2VjKTsKKyNlbmRpZiAvKiBNQUNP U1ggKi8KKyNlbmRpZiAvKiBMSU5VWCAqLworI2VuZGlmIC8qIEhQVVgxMDAwICovCisjZW5kaWYg LyogSFBVWDkgKi8KKwlpZiAocykgeworCSAgICBjaGFyICogczI7CisJICAgIHMyID0gYXNjdGlt ZSh0cCk7CQkvKiBDb252ZXJ0IHJlc3VsdCB0byBBU0NJSSBzdHJpbmcgKi8KKwkgICAgYXNjdG1i dWZbMF0gPSAnXDAnOworCSAgICBpZiAoczIpIGNrc3RybmNweShhc2N0bWJ1ZixzMiw2NCk7CisJ ICAgICpzID0gYXNjdG1idWY7CisJICAgIGRlYnVnKEYxMTEsInp0aW1lIEdGVElNRVIgZ2V0dGlt ZW9mZGF5Iiwqcyx6dHVzZWMpOworCX0KKyAgICB9CisjZWxzZSAgLyogTm90IEdGVElNRVIgKi8K KworI3VuZGVmIFpUSU1FVjcJCQkJLyogV2hpY2ggc3lzdGVtcyBuZWVkIHRvIHVzZSAqLworI2lm ZGVmIENPSEVSRU5UCQkJCS8qIG9sZCBVTklYIFZlcnNpb24gNyB3YXkuLi4gKi8KKyNkZWZpbmUg WlRJTUVWNworI2VuZGlmIC8qIENPSEVSRU5UICovCisjaWZkZWYgVE9XRVIxCisjZGVmaW5lIFpU SU1FVjcKKyNlbmRpZiAvKiBUT1dFUjEgKi8KKyNpZmRlZiBBTllCU0QKKyNpZm5kZWYgQlNENDIK KyNkZWZpbmUgWlRJTUVWNworI2VuZGlmIC8qIEJTRDQyICovCisjZW5kaWYgLyogQU5ZQlNEICov CisjaWZkZWYgVjcKKyNpZm5kZWYgTUlOSVgKKyNkZWZpbmUgWlRJTUVWNworI2VuZGlmIC8qIE1J TklYICovCisjZW5kaWYgLyogVjcgKi8KKyNpZmRlZiBQT1NJWAorI2RlZmluZSBaVElNRVY3Cisj ZW5kaWYgLyogUE9TSVggKi8KKworI2lmZGVmIEhQVVgxMDIwCisvKgorICBQcm90b3R5cGVzIGFy ZSBpbiA8dGltZS5oPiwgaW5jbHVkZWQgYWJvdmUuCisqLworICAgIHRpbWVfdCBjbG9ja19zdG9y YWdlOworICAgIGNsb2NrX3N0b3JhZ2UgPSB0aW1lKCh2b2lkICopIDApOworICAgIGlmIChzKSB7 CisJKnMgPSBjdGltZSgmY2xvY2tfc3RvcmFnZSk7CisJZGVidWcoRjExMCwienRpbWU6IEhQVVgg MTAuMjAiLCpzLDApOworICAgIH0KKyNlbHNlCisjaWZkZWYgQVRUU1YJCQkJLyogQVQmVCB3YXkg Ki8KKy8qICBleHRlcm4gbG9uZyB0aW1lKCk7ICovCQkvKiBUaGVvcmV0aWNhbGx5IHRoZXNlIHNo b3VsZCAqLworICAgIGNoYXIgKmN0aW1lKCk7CQkJLyogYWxyZWFkeSBiZWVuIGRjbCdkIGluIDx0 aW1lLmg+ICovCisgICAgdGltZV90IGNsb2NrX3N0b3JhZ2U7CisgICAgY2xvY2tfc3RvcmFnZSA9 IHRpbWUoCisjaWZkZWYgSVJJWDYwCisJCQkgKHRpbWVfdCAqKQorI2Vsc2UKKyNpZmRlZiBCU0Q0 NAorCQkJICh0aW1lX3QgKikKKyNlbHNlCisJCQkgKGxvbmcgKikKKyNlbmRpZiAvKiBCU0Q0NCAq LworI2VuZGlmIC8qIElSSVg2MCAqLworCQkJIDAgKTsKKyAgICBpZiAocykgeworCSpzID0gY3Rp bWUoICZjbG9ja19zdG9yYWdlICk7CisJZGVidWcoRjExMCwienRpbWU6IEFUVFNWIiwqcywwKTsK KyAgICB9CisjZWxzZQorI2lmZGVmIFBST1ZYMQkJCQkvKiBWZW5peCAxLjAgd2F5ICovCisgICAg aW50IHV0aW1lWzJdOworICAgIHRpbWUodXRpbWUpOworICAgIGlmIChzKSB7CisJKnMgPSBjdGlt ZSh1dGltZSk7CisJZGVidWcoRjExMCwienRpbWU6IFBST1ZYMSIsKnMsMCk7CisgICAgfQorI2Vs c2UKKyNpZmRlZiBCU0Q0MgkJCQkvKiA0LjJCU0Qgd2F5ICovCisgICAgY2hhciAqYXNjdGltZSgp OworICAgIHN0cnVjdCB0bSAqbG9jYWx0aW1lKCk7CisgICAgc3RydWN0IHRtICp0cDsKKyAgICBn ZXR0aW1lb2ZkYXkoJnR2LCAmdHopOworICAgIHp0dXNlYyA9IHR2LnR2X3VzZWM7CisgICAgenRt c2VjID0gdHYudHZfdXNlYyAvIDEwMDBMOworICAgIHRwID0gbG9jYWx0aW1lKCZ0di50dl9zZWMp OworICAgIGlmIChzKSB7CisJKnMgPSBhc2N0aW1lKHRwKTsKKwlkZWJ1ZyhGMTExLCJ6dGltZTog QlNENDIiLCpzLHp0dXNlYyk7CisgICAgfQorI2Vsc2UKKyNpZmRlZiBNSU5JWAkJCQkvKiBNSU5J WCB3YXkgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgZXh0ZXJuIGxvbmcgdGltZSgpOwkJCS8qIEFs cmVhZHkgZ290IHRoZXNlIGZyb20gPHRpbWUuaD4gKi8KKyAgICBleHRlcm4gY2hhciAqY3RpbWUo KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgdGltZV90IHV0aW1lWzJdOworICAgIHRpbWUo dXRpbWUpOworICAgIGlmIChzKSB7CisJKnMgPSBjdGltZSh1dGltZSk7CisJZGVidWcoRjExMCwi enRpbWU6IE1JTklYIiwqcywwKTsKKyAgICB9CisjZWxzZQorI2lmZGVmIFpUSU1FVjcJCQkJLyog VGhlIHJlZ3VsYXIgd2F5ICovCisgICAgY2hhciAqYXNjdGltZSgpOworICAgIHN0cnVjdCB0bSAq bG9jYWx0aW1lKCk7CisgICAgc3RydWN0IHRtICp0cDsKKyAgICBsb25nIHhjbG9jazsJCQkvKiBv ciB1bnNpZ25lZCBsb25nIGZvciBCZUJveD8gKi8KKyAgICB0aW1lKCZ4Y2xvY2spOworICAgIHRw ID0gbG9jYWx0aW1lKCZ4Y2xvY2spOworICAgIGlmIChzKSB7CisJKnMgPSBhc2N0aW1lKHRwKTsK KwlkZWJ1ZyhGMTEwLCJ6dGltZTogWlRJTUVWNyIsKnMsMCk7CisgICAgfQorI2Vsc2UJCQkJCS8q IENhdGNoLWFsbCBmb3Igb3RoZXJzLi4uICovCisgICAgaWYgKHMpIHsKKwkqcyA9ICJEYXkgTW9u IDAwIDAwOjAwOjAwIDAwMDBcbiI7IC8qIER1bW15IGluIGFzY3RpbWUoKSBmb3JtYXQgKi8KKwlk ZWJ1ZyhGMTEwLCJ6dGltZTogY2F0Y2gtYWxsIiwqcywwKTsKKyAgICB9CisjZW5kaWYgLyogWlRJ TUVWNyAqLworI2VuZGlmIC8qIE1JTklYICovCisjZW5kaWYgLyogQlNENDIgKi8KKyNlbmRpZiAv KiBQUk9WWDEgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEhQVVgxMDIwICovCisj ZW5kaWYgLyogR0ZUSU1FUiAqLworfQorCisvKiAgQyBPIE4gRyBNICAtLSAgR2V0IGNvbnNvbGUg dGVybWluYWwgbW9kZXMuICAqLworCisvKgorICBTYXZlcyBpbml0aWFsIGNvbnNvbGUgbW9kZSwg YW5kIGVzdGFibGlzaGVzIHZhcmlhYmxlcyBmb3Igc3dpdGNoaW5nCisgIGJldHdlZW4gY3VycmVu dCAocHJlc3VtYWJseSBub3JtYWwpIG1vZGUgYW5kIG90aGVyIG1vZGVzLgorICBTaG91bGQgYmUg Y2FsbGVkIHdoZW4gcHJvZ3JhbSBzdGFydHMsIGJ1dCBvbmx5IGFmdGVyIGVzdGFibGlzaGluZwor ICB3aGV0aGVyIHByb2dyYW0gaXMgaW4gdGhlIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZC4KKyAg UmV0dXJucyAxIGlmIGl0IGdvdCB0aGUgbW9kZXMgT0ssIDAgaWYgaXQgZGlkIG5vdGhpbmcsIC0x IG9uIGVycm9yLgorKi8KK2ludAorY29uZ20oKSB7CisgICAgaW50IGZkOworICAgIGlmIChiYWNr Z3JkIHx8ICFpc2F0dHkoMCkpIHsJLyogSWYgaW4gYmFja2dyb3VuZC4gKi8KKwljZ21mID0gLTE7 CQkJLyogRG9uJ3QgYm90aGVyLCBtb2RlcyBhcmUgZ2FyYmFnZS4gKi8KKwlyZXR1cm4oLTEpOwor ICAgIH0KKyAgICBpZiAoY2dtZiA+IDApIHJldHVybigwKTsJCS8qIEFscmVhZHkgZGlkIHRoaXMu ICovCisgICAgZGVidWcoRjEwMCwiY29uZ20gZ2V0dGluZyBtb2RlcyIsIiIsMCk7IC8qIE5lZWQg dG8gZG8gaXQuICovCisjaWZkZWYgYWVnaXMKKyAgICBpb3NfJGlucV90eXBlX3VpZChpb3NfJHN0 ZGluLCBjb251aWQsIHN0KTsKKyAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIHsKKwlmcHJp bnRmKHN0ZGVyciwgInByb2JsZW0gZ2V0dGluZyBzdGRpbiBvYmp0eXBlOiAiKTsKKwllcnJvcl8k cHJpbnQoc3QpOworICAgIH0KKyAgICBjb25jcnAgPSAoY29udWlkID09IG1ieF8kdWlkKTsKKyAg ICBjb25idWZuID0gMDsKKyNlbmRpZiAvKiBhZWdpcyAqLworCisjaWZuZGVmIEJFQk9YCisgICAg aWYgKChmZCA9IG9wZW4oQ1RUTkFNLDIpKSA8IDApIHsJLyogT3BlbiBjb250cm9sbGluZyB0ZXJt aW5hbCAqLworI2lmZGVmIENPTU1FTlQKKwlmcHJpbnRmKHN0ZGVyciwiRXJyb3Igb3BlbmluZyAl c1xuIiwgQ1RUTkFNKTsKKwlwZXJyb3IoImNvbmdtIik7CisJcmV0dXJuKC0xKTsKKyNlbHNlCisJ ZmQgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisjZWxzZQorICAgIGZkID0gMDsK KyNlbmRpZiAvKiAhQkVCT1ggKi8KKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICBpZiAodGNnZXRh dHRyKGZkLCZjY29sZCkgPCAwKSByZXR1cm4oLTEpOworICAgIGlmICh0Y2dldGF0dHIoZmQsJmNj Y2JyaykgPCAwKSByZXR1cm4oLTEpOworICAgIGlmICh0Y2dldGF0dHIoZmQsJmNjcmF3KSA8IDAp IHJldHVybigtMSk7CisjZWxzZQorI2lmZGVmIEFUVFNWCisgICAgaWYgKGlvY3RsKGZkLFRDR0VU QSwmY2NvbGQpICA8IDApIHJldHVybigtMSk7CisgICAgaWYgKGlvY3RsKGZkLFRDR0VUQSwmY2Nj YnJrKSA8IDApIHJldHVybigtMSk7CisgICAgaWYgKGlvY3RsKGZkLFRDR0VUQSwmY2NyYXcpICA8 IDApIHJldHVybigtMSk7CisjaWZkZWYgVlhWRQorICAgIGNjY2Jyay5jX2xpbmUgPSAwOwkJCS8q IFNUVFkgbGluZSAwIGZvciBDREMgVlgvVkUgKi8KKyAgICBpZiAoaW9jdGwoZmQsVENTRVRBLCZj Y2NicmspIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBjY3Jhdy5jX2xpbmUgPSAwOwkJCS8qIFNUVFkg bGluZSAwIGZvciBDREMgVlgvVkUgKi8KKyAgICBpZiAoaW9jdGwoZmQsVENTRVRBLCZjY3Jhdykg PCAwKSByZXR1cm4oLTEpOworI2VuZGlmIC8qIFZYVkUgKi8KKyNlbHNlCisjaWZkZWYgQkVMTFYx MAorICAgIGlmIChpb2N0bChmZCxUSU9DR0VUUCwmY2NvbGQpIDwgMCkgcmV0dXJuKC0xKTsKKyAg ICBpZiAoaW9jdGwoZmQsVElPQ0dFVFAsJmNjY2JyaykgPCAwKSByZXR1cm4oLTEpOworICAgIGlm IChpb2N0bChmZCxUSU9DR0VUUCwmY2NyYXcpIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhG MTAxLCJjY2Nicmsuc2dfZmxhZ3Mgb3JpZyIsIiIsIGNjY2Jyay5zZ19mbGFncyk7CisjZWxzZQor ICAgIGlmIChndHR5KGZkLCZjY29sZCkgPCAwKSByZXR1cm4oLTEpOworICAgIGlmIChndHR5KGZk LCZjY2NicmspIDwgMCkgcmV0dXJuKC0xKTsKKyAgICBpZiAoZ3R0eShmZCwmY2NyYXcpIDwgMCkg cmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNl bmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyNpZmRlZiBzb255X25ld3MJCQkvKiBTb255IE5FV1Mg Ki8KKyAgICBpZiAoaW9jdGwoZmQsVElPQ0tHRVQsJmttX2NvbikgPCAwKSB7IC8qIEdldCBjb25z b2xlIEthbmppIG1vZGUgKi8KKwlwZXJyb3IoImNvbmdtIGVycm9yIGdldHRpbmcgS2FuamkgbW9k ZSIpOworCWRlYnVnKEYxMDEsImNvbmdtIGVycm9yIGdldHRpbmcgS2FuamkgbW9kZSIsIiIsMCk7 CisJa21fY29uID0gLTE7CQkJLyogTWFrZSBzdXJlIHRoaXMgc3RheXMgdW5kZWZpbmVkLiAqLwor CXJldHVybigtMSk7CisgICAgfQorI2VuZGlmIC8qIHNvbnlfbmV3cyAqLworICAgIGlmIChmZCA+ IDApCisgICAgICBjbG9zZShmZCk7CisgICAgY2dtZiA9IDE7CQkJCS8qIEZsYWcgdGhhdCB3ZSBn b3QgdGhlbS4gKi8KKyAgICByZXR1cm4oMSk7Cit9CisKKworc3RhdGljIFZPSUQKK2NvbmdldGJ1 Zih4KSBpbnQgeDsgeworICAgIGludCBuOworICAgIG4gPSBDT05CVUZTSVogLSAoY29uYnVmcCAt IGNvbmJ1Zik7CS8qIEhvdyBtdWNoIHJvb20gbGVmdCBpbiBidWZmZXI/ICovCisgICAgaWYgKHgg PiBuKSB7CisJZGVidWcoRjEwMSwiY29uZ2V0YnVmIGNoYXIgbG9zcyIsIiIseC1uKTsKKwl4ID0g bjsKKyAgICB9CisgICAgeCA9IHJlYWQoMCxjb25idWZwLHgpOworICAgIGNvbmJ1Zm4gKz0geDsK KyAgICBkZWJ1ZyhGMTExLCJjb25nZXRidWYgcmVhZGFoZWFkIixjb25idWYseCk7Cit9CisKKwor LyogIEMgTyBOIEMgQiAtLSAgUHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUuICAqLworCisvKiAg UmV0dXJucyAwIGlmIG9rLCAtMSBpZiBub3QgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitj b25jYihjaGFyIGVzYykKKyNlbHNlCitjb25jYihlc2MpIGNoYXIgZXNjOworI2VuZGlmIC8qIENL X0FOU0lDICovCisvKiBjb25jYiAqLyB7CisgICAgaW50IHgsIHkgPSAwOworICAgIGRlYnVnKEYx MDEsImNvbmNiIGNvbnN0YXRlIiwiIixjb25zdGF0ZSk7CisgICAgZGVidWcoRjEwMSwiY29uY2Ig Y2dtZiIsIiIsY2dtZik7CisgICAgZGVidWcoRjEwMSwiY29uY2IgYmFja2dyZCIsIiIsYmFja2dy ZCk7CisKKyAgICBpZiAoY29uc3RhdGUgPT0gQ09OX0NCKQorICAgICAgcmV0dXJuKDApOworCisg ICAgaWYgKGNnbWYgPCAxKQkJCS8qIERpZCB3ZSBnZXQgY29uc29sZSBtb2RlcyB5ZXQ/ICovCisg ICAgICBpZiAoIWJhY2tncmQpCQkJLyogTm8sIGluIGJhY2tncm91bmQ/ICovCisJY29uZ20oKTsJ CQkvKiBObywgdHJ5IHRvIGdldCB0aGVtIG5vdy4gKi8KKyAgICBpZiAoY2dtZiA8IDEpCQkJLyog U3RpbGwgZG9uJ3QgaGF2ZSB0aGVtPyAqLworICAgICAgcmV0dXJuKDApOwkJCS8qIEdpdmUgdXAu ICovCisgICAgZGVidWcoRjEwMSwiY29uY2IgdHR5ZmQiLCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhG MTAxLCJjb25jYiB0dGZkZmxnIiwiIix0dGZkZmxnKTsKKyNpZmRlZiBDT01NRU5UCisgICAgLyog VGhpcyBicmVha3MgcmV0dXJuaW5nIHRvIHByb21wdCBhZnRlciBwcm90b2NvbCB3aXRoICItbCAw IiAqLworICAgIC8qIENvbW1lbnRlZCBvdXQgSnVseSAxOTk4ICovCisgICAgaWYgKHR0ZmRmbGcg JiYgdHR5ZmQgPj0gMCAmJiB0dHlmZCA8IDMpCisgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIHggPSBpc2F0dHkoMCk7CisgICAgZGVidWcoRjEwMSwiY29uY2IgaXNh dHR5IiwiIix4KTsKKyAgICBpZiAoIXgpIHJldHVybigwKTsJCQkvKiBPbmx5IHdoZW4gcnVubmlu ZyBvbiByZWFsIHR0eXMgKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25jYiB4c3VzcGVuZCIsIiIseHN1 c3BlbmQpOworICAgIGlmIChiYWNrZ3JkKQkJCS8qIERvIG5vdGhpbmcgaWYgaW4gYmFja2dyb3Vu ZC4gKi8KKyAgICAgIHJldHVybigwKTsKKyAgICBlc2NjaHIgPSBlc2M7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRvIG90aGVyIGZucyAqLworICAgIGNreGVj aCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByb2dyYW0gY2FuIGVjaG8gY2hhcmFj dGVycyAqLworI2lmZGVmIGFlZ2lzCisgICAgY29uYnVmbiA9IDA7CisgICAgaWYgKGNvbmNycCkg cmV0dXJuKHdyaXRlKDEsICJcMDM1XDAwMiIsIDIpKTsKKyAgICBpZiAoY29udWlkID09IGlucHV0 X3BhZF8kdWlkKSB7cGFkXyRyYXcoaW9zXyRzdGRpbiwgc3QpOyByZXR1cm4oMCk7fQorI2VuZGlm IC8qIGFlZ2lzICovCisKKyNpZmRlZiBDT0hFUkVOVAorI2RlZmluZSBTVk9SUE9TSVgKKyNlbmRp ZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYgUGxhbjkKKyAgICB4ID0gcDljb25jYigpOworI2Vs c2UKKyNpZm5kZWYgU1ZPUlBPU0lYCQkJLyogQlNELCBWNywgZXRjICovCisgICAgZGVidWcoRjEw MSwiY2NjYnJrLnNnX2ZsYWdzIGNvbmNiIDEiLCIiLCBjY2Nicmsuc2dfZmxhZ3MpOworICAgIGRl YnVnKEYxMDEsImNvbmNiIHN0dHkgQ0JSRUFLIiwiIiwwKTsKKyAgICBjY2Nicmsuc2dfZmxhZ3Mg fD0gKENCUkVBS3xDUk1PRCk7CS8qIFNldCB0byBjaGFyYWN0ZXIgd2FrZXVwLCAqLworICAgIGNj Y2Jyay5zZ19mbGFncyAmPSB+RUNITzsgICAgICAgICAgIC8qIG5vIGVjaG8uICovCisgICAgZGVi dWcoRjEwMSwiY2NjYnJrLnNnX2ZsYWdzIGNvbmNiIDIiLCIiLCBjY2Nicmsuc2dfZmxhZ3MpOwor ICAgIGVycm5vID0gMDsKKy8qCisgIEJTRCBzdHR5KCkgY2xlYXJzIHRoZSBjb25zb2xlIGJ1ZmZl ci4gIFNvIGlmIGFueXRoaW5nIGlzIHdhaXRpbmcgaW4gaXQsCisgIHdlIGhhdmUgdG8gcmVhZCBp dCBub3cgdG8gYXZvaWQgbG9zaW5nIGl0LgorKi8KKyAgICB4ID0gY29uY2hrKCk7CisgICAgaWYg KHggPiAwKQorICAgICAgY29uZ2V0YnVmKHgpOworCisjaWZkZWYgQkVMTFYxMAorICAgIHggPSBp b2N0bCgwLFRJT0NTRVRQLCZjY2NicmspOworI2Vsc2UKKyAgICB4ID0gc3R0eSgwLCZjY2Nicmsp OworICAgIGRlYnVnKEYxMDEsImNjY2Jyay5zZ19mbGFncyBjb25jYiB4IiwiIiwgeCk7CisjZW5k aWYgLyogQkVMTFYxMCAqLworI2Vsc2UJCQkJCS8qIFN5cyBWIGFuZCBQT1NJWCAqLworI2lmbmRl ZiBPWE9TCisgICAgZGVidWcoRjEwMSwiY29uY2IgY2NjYnJrLmNfZmxhZyIsIiIsY2NjYnJrLmNf bGZsYWcpOworI2lmZGVmIFFOWAorICAgIC8qIERvbid0IG1lc3Mgd2l0aCBJRVhURU4gKi8KKyAg ICBjY2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKKyNlbHNlCisjaWZkZWYgQ09IRVJF TlQKKyAgICBjY2NicmsuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKKyNlbHNlCisgICAgY2Nj YnJrLmNfbGZsYWcgJj0gfihJQ0FOT058RUNIT3xJRVhURU4pOworI2VuZGlmIC8qIENPSEVSRU5U ICovCisjZW5kaWYgLyogUU5YICovCisgICAgY2NjYnJrLmNfbGZsYWcgfD0gSVNJRzsJCS8qIEFs bG93IHNpZ25hbHMgaW4gY29tbWFuZCBtb2RlLiAqLworICAgIGNjY2Jyay5jX2lmbGFnIHw9IElH TkJSSzsJCS8qIEJ1dCBpZ25vcmUgQlJFQUsgc2lnbmFsICovCisgICAgY2NjYnJrLmNfaWZsYWcg Jj0gfkJSS0lOVDsKKworI2Vsc2UgLyogT1hPUyAqLworICAgIGRlYnVnKEYxMDAsImNvbmNiIE9Y T1MgaXMgZGVmaW5lZCIsIiIsMCk7CisgICAgY2NjYnJrLmNfbGZsYWcgJj0gfihJQ0FOT058RUNI Tyk7CisgICAgY2NjYnJrLmNfY2NbVkRJU0NBUkRdID0gY2NjYnJrLmNfY2NbVkxORVhUXSA9IENE SVNBQkxFOworI2VuZGlmIC8qIE9YT1MgKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBCZWxpZXZl IGl0IG9yIG5vdCwgaW4gU0NPIFVOSVgsIFZTVVNQIGlzIGdyZWF0ZXIgdGhhbiBOQ0MsIGFuZCBz byB0aGlzCisgIGFycmF5IHJlZmVyZW5jZSBpcyBvdXQgb2YgYm91bmRzLiAgSXQncyBvbmx5IGEg ZGVidWcoKSBjYWxsIHNvIHdobyBuZWVkcyBpdC4KKyovCisjaWZkZWYgVlNVU1AKKyAgICBkZWJ1 ZyhGMTAxLCJjb25jYiBjX2NjW1ZTVVNQXSIsIiIsY2NjYnJrLmNfY2NbVlNVU1BdKTsKKyNlbmRp ZiAvKiBWU1VTUCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZm5kZWYgVklOVFIKKyAgICBk ZWJ1ZyhGMTAxLCJjb25jYiBjX2NjWzBdIiwiIixjY2NicmsuY19jY1swXSk7CisgICAgY2NjYnJr LmNfY2NbMF0gPSAwMDM7ICAgICAgICAgICAgICAgLyogSW50ZXJydXB0IGNoYXIgaXMgQ29udHJv bC1DICovCisjZWxzZQorICAgIGRlYnVnKEYxMDEsImNvbmNiIGNfY2NbVklOVFJdIiwiIixjY2Ni cmsuY19jY1swXSk7CisgICAgY2NjYnJrLmNfY2NbVklOVFJdID0gMDAzOworI2VuZGlmIC8qIFZJ TlRSICovCisjaWZuZGVmIFZRVUlUCisgICAgY2NjYnJrLmNfY2NbMV0gPSBlc2NjaHI7ICAgICAg ICAgICAgLyogZXNjYXBlIGR1cmluZyBwYWNrZXQgbW9kZXMgKi8KKyNlbHNlCisgICAgY2NjYnJr LmNfY2NbVlFVSVRdID0gZXNjY2hyOworI2VuZGlmIC8qIFZRVUlUICovCisjaWZuZGVmIFZFT0YK KyAgICBjY2NicmsuY19jY1s0XSA9IDE7CisjZWxzZQorI2lmbmRlZiBPWE9TCisjaWZkZWYgVk1J TgorICAgIGNjY2Jyay5jX2NjW1ZNSU5dID0gMTsKKyNlbmRpZiAvKiBWTUlOICovCisjZWxzZSAv KiBPWE9TICovCisgICAgY2NjYnJrLmNfbWluID0gMTsKKyNlbmRpZiAvKiBPWE9TICovCisjZW5k aWYgLyogVkVPRiAqLworI2lmZGVmIFpJTE9HCisgICAgY2NjYnJrLmNfY2NbNV0gPSAwOworI2Vs c2UKKyNpZm5kZWYgVkVPTAorICAgIGNjY2Jyay5jX2NjWzVdID0gMTsKKyNlbHNlCisjaWZuZGVm IE9YT1MKKyNpZmRlZiBWVElNRQorICAgIGNjY2Jyay5jX2NjW1ZUSU1FXSA9IDE7CisjZW5kaWYg LyogVlRJTUUgKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICBjY2NicmsuY190aW1lID0gMTsKKyNl bmRpZiAvKiBPWE9TICovCisjZW5kaWYgLyogVkVPTCAqLworI2VuZGlmIC8qIFpJTE9HICovCisg ICAgZXJybm8gPSAwOworI2lmZGVmIEJTRDQ0T1JQT1NJWAkJCS8qIFNldCBuZXcgbW9kZXMgKi8K KyAgICB4ID0gdGNzZXRhdHRyKDAsVENTQURSQUlOLCZjY2NicmspOworI2Vsc2UgLyogQVRUU1Yg Ki8gICAgICAJCQkvKiBvciB0aGUgUE9TSVggd2F5ICovCisgICAgeCA9IGlvY3RsKDAsVENTRVRB VywmY2NjYnJrKTsJLyogdGhlIFN5cyBWIHdheSAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAq LworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworCisjaWZkZWYgQ09IRVJFTlQKKyN1bmRlZiBTVk9S UE9TSVgKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworCisgICAgZGVidWcoRjEwMSwiY29uY2IgeCIs IiIseCk7CisgICAgZGVidWcoRjEwMSwiY29uY2IgZXJybm8iLCIiLGVycm5vKTsKKworI2lmZGVm ICBWNworI2lmbmRlZiBNSU5JWAorICAgIGlmIChrbWVtW0NPTl0gPCAwKSB7CisgICAgICAgIHFh ZGRyW0NPTl0gPSBpbml0cmF3cSgwKTsKKyAgICAgICAgaWYoKGttZW1bQ09OXSA9IG9wZW4oIi9k ZXYva21lbSIsIDApKSA8IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3Qg cmVhZCAvZGV2L2ttZW0gaW4gY29uY2IuXG4iKTsKKyAgICAgICAgICAgIHBlcnJvcigiL2Rldi9r bWVtIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IE1JTklYICovCisjZW5kaWYgLyogVjcgKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworCisgICAgaWYg KHggPiAtMSkKKyAgICAgIGNvbnN0YXRlID0gQ09OX0NCOworCisgICAgZGVidWcoRjEwMSwiY29u Y2IgcmV0dXJucyIsIiIseCk7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgQyBPIE4gQiBJIE4g IC0tICBQdXQgY29uc29sZSBpbiBiaW5hcnkgbW9kZSAgKi8KKworLyogIFJldHVybnMgMCBpZiBv aywgLTEgaWYgbm90ICAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworY29uYmluKGNoYXIgZXNj KQorI2Vsc2UKK2NvbmJpbihlc2MpIGNoYXIgZXNjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiBjb25iaW4gKi8gIHsKKworICAgIGludCB4OworCisgICAgZGVidWcoRjEwMSwiY29uYmluIGNv bnN0YXRlIiwiIixjb25zdGF0ZSk7CisKKyAgICBpZiAoY29uc3RhdGUgPT0gQ09OX0JJTikKKyAg ICAgIHJldHVybigwKTsKKworICAgIGlmICghaXNhdHR5KDApKSByZXR1cm4oMCk7ICAgICAgICAg IC8qIG9ubHkgZm9yIHJlYWwgdHR5cyAqLworICAgIGNvbmdtKCk7CQkJCS8qIEdldCBtb2RlcyBp ZiBuZWNlc3NhcnkuICovCisgICAgZGVidWcoRjEwMCwiY29uYmluIiwiIiwwKTsKKyAgICBlc2Nj aHIgPSBlc2M7ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHRoaXMgYXZhaWxhYmxlIHRv IG90aGVyIGZucyAqLworICAgIGNreGVjaCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFByb2dyYW0gY2FuIGVjaG8gY2hhcmFjdGVycyAqLworI2lmZGVmIGFlZ2lzCisgICAgY29uYnVm biA9IDA7CisgICAgaWYgKGNvbmNycCkgcmV0dXJuKHdyaXRlKDEsICJcMDM1XDAwMiIsIDIpKTsK KyAgICBpZiAoY29udWlkID09IGlucHV0X3BhZF8kdWlkKSB7CisJcGFkXyRyYXcoaW9zXyRzdGRp biwgc3QpOworCXJldHVybigwKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBhZWdpcyAqLworCisjaWZk ZWYgQ09IRVJFTlQKKyNkZWZpbmUgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKwor I2lmZGVmIFBsYW45CisgICAgcmV0dXJuIHA5Y29uYmluKCk7CisjZWxzZQorI2lmZGVmIFNWT1JQ T1NJWAorI2lmbmRlZiBPWE9TCisjaWZkZWYgUU5YCisgICAgY2NyYXcuY19sZmxhZyAmPSB+KElT SUd8SUNBTk9OfEVDSE8pOworI2Vsc2UKKyNpZmRlZiBDT0hFUkVOVAorICAgIGNjcmF3LmNfbGZs YWcgJj0gfihJU0lHfElDQU5PTnxFQ0hPKTsKKyNlbHNlCisgICAgY2NyYXcuY19sZmxhZyAmPSB+ KElTSUd8SUNBTk9OfEVDSE98SUVYVEVOKTsKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlm IC8qIFFOWCAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIGNjcmF3LmNfbGZsYWcgJj0gfihJU0lH fElDQU5PTnxFQ0hPKTsKKyAgICBjY3Jhdy5jX2NjW1ZESVNDQVJEXSA9IGNjcmF3LmNfY2NbVkxO RVhUXSA9IENESVNBQkxFOworI2VuZGlmIC8qIE9YT1MgKi8KKyAgICBjY3Jhdy5jX2lmbGFnIHw9 IElHTlBBUjsKKy8qCisgIE5vdGUgdGhhdCBmb3IgdGVybWluYWwgc2Vzc2lvbnMgd2UgZGlzYWJs ZSBYb24vWG9mZiBmbG93IGNvbnRyb2wgdG8gYWxsb3cKKyAgdGhlIHBhc3NhZ2UgXlEgYW5kIF5T IGFzIGRhdGEgY2hhcmFjdGVycyBmb3IgRU1BQ1MsIGFuZCB0byBhbGxvdyBYTU9ERU0KKyAgdHJh bnNmZXJzIHRvIHdvcmsgd2hlbiBDLUtlcm1pdCBpcyBpbiB0aGUgbWlkZGxlLCBldGMuICBIYXJk d2FyZSBmbG93CisgIGNvbnRyb2wsIGlmIGluIHVzZSwgaXMgbm90IGFmZmVjdGVkLgorKi8KKyNp ZmRlZiBBVFRTVgorI2lmZGVmIEJTRDQ0CisgICAgY2NyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJ TkxDUnxJR05DUnxJQ1JOTHxJWE9OfElYQU5ZfElYT0ZGCisgICAgICAgICAgICAgICAgICAgICAg ICB8SU5QQ0t8SVNUUklQKTsKKyNlbHNlCisgICAgY2NyYXcuY19pZmxhZyAmPSB+KElHTkJSS3xJ TkxDUnxJR05DUnxJQ1JOTHxJVUNMQ3xJWE9OfElYQU5ZfElYT0ZGCisgICAgICAgICAgICAgICAg ICAgICAgICB8SU5QQ0t8SVNUUklQKTsKKyNlbmRpZiAvKiBCU0Q0NCAqLworI2Vsc2UgLyogUE9T SVggKi8KKyAgICBjY3Jhdy5jX2lmbGFnICY9IH4oSUdOQlJLfElOTENSfElHTkNSfElDUk5MfElY T058SVhPRkZ8SU5QQ0t8SVNUUklQKTsKKyNlbmRpZiAvKiBBVFRTViAqLworICAgIGNjcmF3LmNf b2ZsYWcgJj0gfk9QT1NUOworI2lmZGVmIENPTU1FTlQKKy8qCisgIFdIQVQgVEhFIEhFQ0sgV0FT IFRISVMgRk9SPworICBUaGUgQjk2MDAgc2V0dGluZyAob2J2aW91c2x5KSBwcmV2ZW50cyBDT05O RUNUIGZyb20gd29ya2luZyBhdCBhbnkKKyAgc3BlZWQgb3RoZXIgdGhhbiA5NjAwIHdoZW4geW91 IGFyZSBsb2dnZWQgaW4gdG8gdGhlIDczMDAgb24gYSBzZXJpYWwKKyAgbGluZS4gIE1heWJlIHNv bWUgb2YgdGhlIG90aGVyIGZsYWdzIGFyZSBuZWNlc3NhcnkgLS0gaWYgc28sIHB1dCBiYWNrCisg IHRoZSBvbmVzIHRoYXQgYXJlIG5lZWRlZC4gIFRoaXMgY29kZSBpcyBzdXBwb3NlZCB0byB3b3Jr IHRoZSBzYW1lLCBubworICBtYXR0ZXIgd2hldGhlciB5b3UgYXJlIGxvZ2dlZCBpbiB0byB0aGUg NzMwMCBvbiB0aGUgcmVhbCBjb25zb2xlIGRldmljZSwKKyAgb3IgdGhyb3VnaCBhIHNlcmlhbCBw b3J0LgorKi8KKyNpZmRlZiBBVFQ3MzAwCisgICAgY2NyYXcuY19jZmxhZyA9IENMT0NBTCB8IEI5 NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTDsKKyNlbmRpZiAvKiBBVFQ3MzAwICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworCisvKioqIEtlcm1pdCB1c2VkIHRvIHB1dCB0aGUgY29uc29sZSBpbiA4 LWJpdCByYXcgbW9kZSwgYnV0IHNvbWUgdXNlcnMgaGF2ZQorICoqKiBwb2ludGVkIG91dCB0aGF0 IHRoaXMgc2hvdWxkIG5vdCBiZSBkb25lLCBzaW5jZSBzb21lIHNpdGVzIGFjdHVhbGx5CisgKioq IHVzZSB0ZXJtaW5hbHMgd2l0aCBwYXJpdHkgc2V0dGluZ3Mgb24gdGhlaXIgVW5peCBzeXN0ZW1z LCBhbmQgaWYgd2UKKyAqKiogb3ZlcnJpZGUgdGhlIGN1cnJlbnQgc2V0dGluZ3MgYW5kIHN0b3Ag ZG9pbmcgcGFyaXR5LCB0aGVuIHRoZWlyIHRlcm1pbmFscworICoqKiB3aWxsIGRpc3BsYXkgYmxv dGNoZXMgZm9yIGNoYXJhY3RlcnMgd2hvc2UgcGFyaXR5IGlzIHdyb25nLiAgVGhlcmVmb3JlLAor ICoqKiB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyBhcmUgY29tbWVudGVkIG91dCAoTGFycnkgQWZy aW4sIENsZW1zb24gVSk6CisgKioqCisgKioqICAgY2NyYXcuY19jZmxhZyAmPSB+KFBBUkVOQnxD U0laRSk7CisgKioqICAgY2NyYXcuY19jZmxhZyB8PSAoQ1M4fENSRUFEKTsKKyAqKioKKyAqKiog U3lzIElJSS9WIHNpdGVzIHRoYXQgaGF2ZSB0cm91YmxlIHdpdGggdGhpcyBjYW4gcmVzdG9yZSB0 aGVzZSBsaW5lcy4KKyAqKiovCisjaWZuZGVmIFZJTlRSCisgICAgY2NyYXcuY19jY1swXSA9IDAw MzsJCS8qIEludGVycnVwdCBjaGFyIGlzIEN0cmwtQyAqLworI2Vsc2UKKyAgICBjY3Jhdy5jX2Nj W1ZJTlRSXSA9IDAwMzsKKyNlbmRpZiAvKiBWSU5UUiAqLworI2lmbmRlZiBWUVVJVAorICAgIGNj cmF3LmNfY2NbMV0gPSBlc2NjaHI7CQkvKiBFc2NhcGUgZHVyaW5nIHBhY2tldCBtb2RlICovCisj ZWxzZQorICAgIGNjcmF3LmNfY2NbVlFVSVRdID0gZXNjY2hyOworI2VuZGlmIC8qIFZRVUlUICov CisjaWZuZGVmIFZFT0YKKyAgICBjY3Jhdy5jX2NjWzRdID0gMTsKKyNlbHNlCisjaWZuZGVmIE9Y T1MKKyNpZmRlZiBWTUlOCisgICAgY2NyYXcuY19jY1tWTUlOXSA9IDE7CisjZW5kaWYgLyogVk1J TiAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIGNjcmF3LmNfbWluID0gMTsKKyNlbmRpZiAvKiBP WE9TICovCisjZW5kaWYgLyogVkVPRiAqLworCisjaWZkZWYgWklMT0cKKyAgICBjY3Jhdy5jX2Nj WzVdID0gMDsKKyNlbHNlCisjaWZuZGVmIFZFT0wKKyAgICBjY3Jhdy5jX2NjWzVdID0gMTsKKyNl bHNlCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBWVElNRQorICAgIGNjcmF3LmNfY2NbVlRJTUVdID0g MTsKKyNlbmRpZiAvKiBWVElNRSAqLworI2Vsc2UgLyogT1hPUyAqLworICAgIGNjcmF3LmNfdGlt ZSA9IDE7CisjZW5kaWYgLyogT1hPUyAqLworI2VuZGlmIC8qIFZFT0wgKi8KKyNlbmRpZiAvKiBa SUxPRyAqLworCisjaWZkZWYgQlNENDRPUlBPU0lYCisgICAgeCA9IHRjc2V0YXR0cigwLFRDU0FE UkFJTiwmY2NyYXcpOwkvKiBTZXQgbmV3IG1vZGVzLiAqLworI2Vsc2UKKyAgICB4ID0gaW9jdGwo MCxUQ1NFVEFXLCZjY3Jhdyk7CisjZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisjZWxzZSAvKiBC ZXJrZWxleSwgZXRjLiAqLworICAgIHggPSBjb25jaGsoKTsJCQkvKiBCZWNhdXNlIHN0dHkoKSBp cyBkZXN0cnVjdGl2ZSAqLworICAgIGlmICh4ID4gMCkKKyAgICAgIGNvbmdldGJ1Zih4KTsKKyAg ICBjY3Jhdy5zZ19mbGFncyB8PSAoUkFXfFRBTkRFTSk7ICAgICAvKiBTZXQgcmF3bW9kZSwgWE9O L1hPRkYgKGhhKSAqLworICAgIGNjcmF3LnNnX2ZsYWdzICY9IH4oRUNIT3xDUk1PRCk7ICAgIC8q IFNldCBjaGFyIHdha2V1cCwgbm8gZWNobyAqLworI2lmZGVmIEJFTExWMTAKKyAgICB4ID0gaW9j dGwoMCxUSU9DU0VUUCwmY2NyYXcpOworI2Vsc2UKKyAgICB4ID0gc3R0eSgwLCZjY3Jhdyk7Cisj ZW5kaWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8qIFBs YW45ICovCisKKyAgICBpZiAoeCA+IC0xKQorICAgICAgY29uc3RhdGUgPSBDT05fQklOOworCisg ICAgZGVidWcoRjEwMSwiY29uYmluIHJldHVybnMiLCIiLHgpOworICAgIHJldHVybih4KTsKKwor I2lmZGVmIENPSEVSRU5UCisjdW5kZWYgU1ZPUlBPU0lYCisjZW5kaWYgLyogQ09IRVJFTlQgKi8K KworfQorCisKKy8qICBDIE8gTiBSIEUgUyAgLS0gIFJlc3RvcmUgdGhlIGNvbnNvbGUgdGVybWlu YWwgICovCisKK2ludAorY29ucmVzKCkgeworICAgIGludCB4OworICAgIGRlYnVnKEYxMDEsImNv bnJlcyBjZ21mIiwiIixjZ21mKTsKKyAgICBkZWJ1ZyhGMTAxLCJjb25yZXMgY29uc3RhdGUiLCIi LGNvbnN0YXRlKTsKKworICAgIGlmIChjZ21mIDwgMSkJCQkvKiBEbyBub3RoaW5nIGlmIG1vZGVz IHVuY2hhbmdlZCAqLworICAgICAgcmV0dXJuKDApOworICAgIGlmIChjb25zdGF0ZSA9PSBDT05f UkVTKQorICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCFpc2F0dHkoMCkpIHJldHVybigwKTsg ICAgICAgICAgLyogb25seSBmb3IgcmVhbCB0dHlzICovCisgICAgZGVidWcoRjEwMCwiY29ucmVz IGlzYXR0eSBvayIsIiIsMCk7CisgICAgY2t4ZWNoID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU3lzdGVtIHNob3VsZCBlY2hvIGNoYXJzICovCisKKyNpZmRlZiBhZWdpcworICAgIGNv bmJ1Zm4gPSAwOworICAgIGlmIChjb25jcnApIHJldHVybih3cml0ZSgxLCAiXDAzNVwwMDEiLCAy KSk7CisgICAgaWYgKGNvbnVpZCA9PSBpbnB1dF9wYWRfJHVpZCkgeworCXBhZF8kY29va2VkKGlv c18kc3RkaW4sIHN0KTsKKwljb25zdGF0ZSA9IENPTl9SRVM7CisJcmV0dXJuKDApOworICAgIH0K KyNlbmRpZiAvKiBhZWdpcyAqLworCisjaWZkZWYgUGxhbjkKKyAgICBwOWNvbnJlcygpOworI2Vs c2UKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICBkZWJ1ZyhGMTAwLCJjb25yZXMgcmVzdG9yaW5n IHRjc2V0YXR0ciIsIiIsMCk7CisgICAgeCA9IHRjc2V0YXR0cigwLFRDU0FEUkFJTiwmY2NvbGQp OworI2Vsc2UKKyNpZmRlZiBBVFRTVgorICAgIGRlYnVnKEYxMDAsImNvbnJlcyByZXN0b3Jpbmcg aW9jdGwiLCIiLDApOworICAgIHggPSBpb2N0bCgwLFRDU0VUQVcsJmNjb2xkKTsKKyNlbHNlIC8q IEJTRCwgVjcsIGFuZCBmcmllbmRzICovCisjaWZkZWYgc29ueV9uZXdzCQkJLyogU29ueSBORVdT ICovCisgICAgaWYgKGttX2NvbiAhPSAtMSkKKyAgICAgIGlvY3RsKDAsVElPQ0tTRVQsJmttX2Nv bik7CS8qIFJlc3RvcmUgY29uc29sZSBLYW5qaSBtb2RlICovCisjZW5kaWYgLyogc29ueV9uZXdz ICovCisgICAgbXNsZWVwKDEwMCk7CisgICAgZGVidWcoRjEwMCwiY29ucmVzIHJlc3RvcmluZyBz dHR5IiwiIiwwKTsKKyAgICB4ID0gY29uY2hrKCk7CQkJLyogQmVjYXVzZSBzdHR5KCkgaXMgZGVz dHJ1Y3RpdmUgKi8KKyAgICBpZiAoeCA+IDApCisgICAgICBjb25nZXRidWYoeCk7CisjaWZkZWYg QkVMTFYxMAorICAgIHggPSBpb2N0bCgwLFRJT0NTRVRQLCZjY29sZCk7CisjZWxzZQorICAgIHgg PSBzdHR5KDAsJmNjb2xkKTsKKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogQVRUU1Yg Ki8KKyNlbmRpZiAvKiBCU0Q0NE9SUE9TSVggKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworICAgIGlm ICh4ID4gLTEpCisgICAgICBjb25zdGF0ZSA9IENPTl9SRVM7CisKKyAgICBkZWJ1ZyhGMTAxLCJj b25yZXMgcmV0dXJucyIsIiIseCk7CisgICAgcmV0dXJuKHgpOworfQorCisvKiAgQyBPIE4gTyBD ICAtLSAgT3V0cHV0IGEgY2hhcmFjdGVyIHRvIHRoZSBjb25zb2xlIHRlcm1pbmFsICAqLworCitp bnQKKyNpZmRlZiBDS19BTlNJQworY29ub2MoY2hhciBjKQorI2Vsc2UKK2Nvbm9jKGMpIGNoYXIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY29ub2MgKi8geworCisjaWZkZWYgSUtTRAor ICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpCisgICAgICByZXR1cm4odHRvYyhjKSk7CisKKyNp ZmRlZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKGluc2VydmVyICYmIFRFTE9QVF9NRShURUxPUFRf RU5DUllQVElPTikpCisgICAgICAgIGNrX3RuX2VuY3J5cHQoJmMsMSk7CisjZW5kaWYgLyogQ0tf RU5DUllQVElPTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIFBsYW45CisgICAgcmV0 dXJuIGNvbndyaXRlKCZjLDEpOworI2Vsc2UKKyAgICByZXR1cm4od3JpdGUoMSwmYywxKSk7Cisj ZW5kaWYgLyogUGxhbjkgKi8KK30KKworLyogIEMgTyBOIFggTyAgLS0gIFdyaXRlIHggY2hhcmFj dGVycyB0byB0aGUgY29uc29sZSB0ZXJtaW5hbCAgKi8KKworaW50Citjb254byh4LHMpIGludCB4 OyBjaGFyICpzOyB7CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkK KyAgICAgIHJldHVybih0dG9sKChDSEFSICopcyx4KSk7CisKKyNpZmRlZiBDS19FTkNSWVBUSU9O CisgICAgaWYgKGluc2VydmVyICYmIFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCisgICAg ICAgIGNrX3RuX2VuY3J5cHQocyx4KTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5k aWYgLyogSUtTRCAqLworCisjaWZkZWYgUGxhbjkKKyAgICByZXR1cm4oY29ud3JpdGUocyx4KSk7 CisjZWxzZQorICAgIHJldHVybih3cml0ZSgxLHMseCkpOworI2VuZGlmIC8qIFBsYW45ICovCit9 CisKKy8qICBDIE8gTiBPIEwgIC0tICBXcml0ZSBhIGxpbmUgdG8gdGhlIGNvbnNvbGUgdGVybWlu YWwgICovCisKK2ludAorY29ub2wocykgY2hhciAqczsgeworICAgIGludCBsZW47CisgICAgaWYg KCFzKSBzID0gIiI7CQkJLyogQWx3YXlzIGRvIHRoaXMhICovCisgICAgbGVuID0gc3RybGVuKHMp OworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgIHJldHVybigwKTsKKworI2lmZGVmIElLU0QKKyAg ICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsKQorICAgICAgcmV0dXJuKHR0b2woKENIQVIgKilzLGxl bikpOworCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgIGlmIChpbnNlcnZlciAmJiBURUxPUFRf TUUoVEVMT1BUX0VOQ1JZUFRJT04pKSB7CisJaWYgKG54cGFja2V0IDwgbGVuKSB7CisJICAgIGlm ICh4cGFja2V0KSB7CisJCWZyZWUoeHBhY2tldCk7CisJCXhwYWNrZXQgPSBOVUxMOworCQlueHBh Y2tldCA9IDA7CisJICAgIH0KKwkgICAgbGVuID0gbGVuID4gMTAyNDAgPyBsZW4gOiAxMDI0MDsK KwkgICAgeHBhY2tldCA9IChDSEFSICopbWFsbG9jKGxlbik7CisJICAgIGlmICgheHBhY2tldCkg eworCQlmcHJpbnRmKHN0ZGVyciwidHRvbCBtYWxsb2MgZmFpbHVyZVxuIik7CisJCXJldHVybigt MSk7CisJICAgIH0gZWxzZQorCSAgICAgIG54cGFja2V0ID0gbGVuOworCX0KKwltZW1jcHkoeHBh Y2tldCxzLGxlbik7CisJcyA9IChjaGFyICopeHBhY2tldDsKKwlja190bl9lbmNyeXB0KHMsbGVu KTsKKyAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIElLU0QgKi8K KworI2lmZGVmIFBsYW45CisgICAgcmV0dXJuKGNvbndyaXRlKHMsbGVuKSk7CisjZWxzZQorICAg IHJldHVybih3cml0ZSgxLHMsbGVuKSk7CisjZW5kaWYgLyogUGxhbjkgKi8KK30KKworLyogIEMg TyBOIE8gTCBBICAtLSAgV3JpdGUgYW4gYXJyYXkgb2YgbGluZXMgdG8gdGhlIGNvbnNvbGUgdGVy bWluYWwgKi8KKworaW50Citjb25vbGEocykgY2hhciAqc1tdOyB7CisgICAgY2hhciAqIHA7Cisg ICAgaW50IGksIHg7CisKKworICAgIGlmICghcykgcmV0dXJuKDApOworICAgIGZvciAoaSA9IDA7 IDsgaSsrKSB7CisJcCA9IHNbaV07CisJaWYgKCFwKSBwID0gIiI7CQkJLyogTGV0J3Mgbm90IGR1 bXAgY29yZSBzaGFsbCB3ZT8gKi8KKwlpZiAoISpwKQorCSAgYnJlYWs7CisjaWZkZWYgSUtTRAor CWlmIChpbnNlcnZlciAmJiAhbG9jYWwpCisJICB4ID0gdHRvbCgoQ0hBUiAqKXAsKGludClzdHJs ZW4ocCkpOworCWVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisJICB4ID0gY29ub2wocCk7CisJaWYg KHggPCAwKQorCSAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisvKiAg QyBPIE4gTyBMIEwgIC0tICBPdXRwdXQgYSBzdHJpbmcgZm9sbG93ZWQgYnkgQ1JMRiAgKi8KKwor aW50Citjb25vbGwocykgY2hhciAqczsgeworICAgIENIQVIgYnVmWzNdOworICAgIGJ1ZlswXSA9 ICdccic7CisgICAgYnVmWzFdID0gJ1xuJzsKKyAgICBidWZbMl0gPSAnXDAnOworICAgIGlmICgh cykgcyA9ICIiOworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJiAhbG9jYWwpIHsK KwlpZiAoKnMpIHR0b2woKENIQVIgKilzLChpbnQpc3RybGVuKHMpKTsKKwlyZXR1cm4odHRvbChi dWYsMikpOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBpZiAoKnMpIGNvbm9sKHMp OworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKGluc2VydmVyICYm IFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCisgICAgICBja190bl9lbmNyeXB0KChjaGFy ICopYnVmLDIpOworI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBJS1NEICov CisKKyNpZmRlZiBQbGFuOQorICAgIHJldHVybihjb253cml0ZShidWYsIDIpKTsKKyNlbHNlCisg ICAgcmV0dXJuKHdyaXRlKDEsYnVmLDIpKTsKKyNlbmRpZiAvKiBQbGFuOSAqLworfQorCisvKiAg QyBPIE4gQyBIIEsgIC0tICBSZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBhdmFpbGFibGUgYXQg Y29uc29sZSAgKi8KKy8qCisgIFdlIGNvdWxkIGFsc28gdXNlIHNlbGVjdCgpIGhlcmUgdG8gY292 ZXIgYSBmZXcgbW9yZSBzeXN0ZW1zIHRoYXQgYXJlIG5vdAorICBjb3ZlcmVkIGJ5IGFueSBvZiB0 aGUgZm9sbG93aW5nLCBlLmcuIEhQLVVYIDkuMHggb24gdGhlIG1vZGVsIDgwMC4KKyovCitpbnQK K2NvbmNoaygpIHsKKyAgICBzdGF0aWMgaW50IGNvbnR5cCA9IDA7CQkvKiArMSBmb3IgaXNhdHR5 LCAtMSBvdGhlcndpc2UgKi8KKworICAgIGlmIChjb250eXAgPT0gMCkJCQkvKiBUaGlzIHByZXZl bnRzIHVubmVjZXNzYXJ5ICovCisgICAgICBjb250eXAgPSAoaXNhdHR5KDApID8gMSA6IC0xKTsJ LyogZHVwbGljYXRlZCBjYWxscyB0byBpc2F0dHkoKSAqLworICAgIGRlYnVnKEYxMDEsImNvbmNo ayBjb250eXAiLCIiLGNvbnR5cCk7CisgICAgaWYgKGJhY2tncmQgfHwgKGNvbnR5cCA8IDApKQor ICAgICAgcmV0dXJuKDApOworCisjaWZkZWYgYWVnaXMKKyAgICBpZiAoY29uYnVmbiA+IDApIHJl dHVybihjb25idWZuKTsgICAvKiB1c2Ugb2xkIGNvdW50IGlmIG5vbnplcm8gKi8KKworICAgIC8q IHJlYWQgaW4gbW9yZSBjaGFyYWN0ZXJzICovCisgICAgY29uYnVmbiA9IGlvc18kZ2V0KGlvc18k c3RkaW4sCisgICAgICAgICAgICAgIGlvc18kY29uZF9vcHQsIGNvbmJ1ZiwgKGxvbmcpc2l6ZW9m KGNvbmJ1ZiksIHN0KTsKKyAgICBpZiAoc3QuYWxsICE9IHN0YXR1c18kb2spIGNvbmJ1Zm4gPSAw OworICAgIGNvbmJ1ZnAgPSBjb25idWY7CisgICAgcmV0dXJuKGNvbmJ1Zm4pOworI2Vsc2UKKyNp ZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkKKyAgICAgIHJldHVybihpbl9j aGsoMSx0dHlmZCkpOworICAgIGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICByZXR1cm4o aW5fY2hrKDAsMCkpOworI2VuZGlmIC8qIGFlZ2lzICovCit9CisKKy8qICBDIE8gTiBJIE4gQyAg LS0gIEdldCBhIGNoYXJhY3RlciBmcm9tIHRoZSBjb25zb2xlICAqLworLyoKKyAgQ2FsbCB3aXRo IHRpbW8gPiAwIHRvIGRvIGEgdGltZWQgcmVhZCwgdGltbyA9PSAwIHRvIGRvIGFuIHVudGltZWQg YmxvY2tpbmcKKyAgcmVhZC4gIFVwb24gc3VjY2VzcywgcmV0dXJucyB0aGUgY2hhcmFjdGVyLiAg VXBvbiBmYWlsdXJlLCByZXR1cm5zIC0xLgorICBBIHRpbWVkIHJlYWQgdGhhdCBkb2VzIG5vdCBj b21wbGV0ZSB3aXRoaW4gdGhlIHRpbWVvdXQgcGVyaW9kIHJldHVybnMgLTIuCisqLworaW50Citj b25pbmModGltbykgaW50IHRpbW87IHsKKyAgICBpbnQgbiA9IDA7IENIQVIgY2g7CisgICAgaW50 IHh4OworCisgICAgaWYgKGNvbmJ1Zm4gPiAwKSB7CQkJLyogSWYgc29tZXRoaW5nIGFscmVhZHkg YnVmZmVyZWQgKi8KKwktLWNvbmJ1Zm47CisJcmV0dXJuKCh1bnNpZ25lZCkoKmNvbmJ1ZnArKyAm IDB4ZmYpKTsKKyAgICB9CisKKyAgICBlcnJubyA9IDA7CQkJCS8qIENsZWFyIHRoaXMgKi8KKyNp ZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyICYmICFsb2NhbCkgeworCXh4ID0gdHRpbmModGlt byk7CisJaWYgKHh4IDwgMCkKKwkgIHJldHVybih0dGluY3RpbW8gPyAtMiA6IC0xKTsKKwllbHNl CisJICByZXR1cm4oeHgpOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyNpZmRlZiBhZWdp cwkJCQkvKiBBcG9sbG8gQWVnaXMgb25seS4uLiAqLworICAgIGRlYnVnKEYxMDEsImNvbmluYyB0 aW1vIiwiIix0aW1vKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBpZiAoY29uY2hrKCkgPiAw KSB7CisJLS1jb25idWZuOworCXJldHVybigodW5zaWduZWQpKCpjb25idWZwKysgJiAweGZmKSk7 CisgICAgfQorI2VuZGlmIC8qIGFlZ2lzICovCisKKyNpZmRlZiBUVExFQlVGCisgICAgaWYgKAor I2lmZGVmIElLU0QKKwlpbnNlcnZlciAmJgorI2VuZGlmIC8qIElLU0QgKi8KKwkheGxvY2FsCisJ KSB7CisJaWYgKHR0cHVzaCA+PSAwKSB7CisJICAgIGRlYnVnKEYxMTEsInR0aW5jIiwidHRwdXNo Iix0dHB1c2gpOworCSAgICBjaCA9IHR0cHVzaDsKKwkgICAgdHRwdXNoID0gLTE7CisJICAgIHJl dHVybihjaCk7CisJfQorCWlmIChsZV9kYXRhKSB7CisJICAgIGlmIChsZV9nZXRjaGFyKCZjaCkg PiAwKSB7CisJCWRlYnVnKEYxMTEsInR0aW5jIExvY2FsRWNob0luQnVmIiwiY2giLGNoKTsKKwkJ cmV0dXJuKGNoKTsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYgLyogVFRMRUJVRiAqLworCisg ICAgaWYgKHRpbW8gPD0gMCkgewkJCS8qIFVudGltZWQsIGJsb2NraW5nIHJlYWQuICovCisJd2hp bGUgKDEpIHsJCQkvKiBLZWVwIHRyeWluZyB0aWxsIHdlIGdldCBvbmUuICovCisJICAgIG4gPSBy ZWFkKDAsICZjaCwgMSk7CS8qIFJlYWQgYSBjaGFyYWN0ZXIuICovCisJICAgIGlmIChuID09IDAp IGNvbnRpbnVlOwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAqLworCSAgICBpZiAobiA+IDApIHsJCS8q IElmIHJlYWQgd2FzIHN1Y2Nlc3NmdWwsICovCisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0VOQ1JZ UFRJT04KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJjb25pbmMgZGVjcnlwdCAxIiwiIiww KTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2FsICYmIFRFTE9QVF9VKFRF TE9QVF9FTkNSWVBUSU9OKSkKKwkJICBja190bl9kZWNyeXB0KChjaGFyICopJmNoLDEpOworI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBJS1NEICovCisJCXJldHVybigodW5z aWduZWQpKGNoICYgMHhmZikpOyAvKiByZXR1cm4gdGhlIGNoYXJhY3Rlci4gKi8KKyAgICAgICAg ICAgIH0KKworLyogQ29tZSBoZXJlIGlmIHJlYWQoKSByZXR1cm5lZCBhbiBlcnJvci4gKi8KKwor CSAgICBkZWJ1ZyhGMTAxLCAiY29uaW5jKDApIGVycm5vIiwiIixlcnJubyk7IC8qIExvZyB0aGUg ZXJyb3IuICovCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZmRlZiBDSUUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENJRSBSZWd1bHVzIGhhcyBubyBFSU5UUiBzeW1i b2w/ICovCisjaWZuZGVmIEVJTlRSCisjZGVmaW5lIEVJTlRSIDQKKyNlbmRpZiAvKiBFSU5UUiAq LworI2VuZGlmIC8qIENJRSAqLworLyoKKyAgVGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIHNldmVy YWwgZGlmZmVyZW50IHB1cnBvc2VzLiAgSW4gQ09OTkVDVCBtb2RlLCBpdCBpcworICB1c2VkIHRv IGRvIGFuIHVudGltZWQsIGJsb2NraW5nIHJlYWQgZnJvbSB0aGUga2V5Ym9hcmQgaW4gdGhlIGxv d2VyIENPTk5FQ1QKKyAgZm9yay4gIER1cmluZyBsb2NhbC1tb2RlIGZpbGUgdHJhbnNmZXIsIGl0 IHJlYWRzIGEgY2hhcmFjdGVyIGZyb20gdGhlCisgIGNvbnNvbGUgdG8gaW50ZXJydXB0IHRoZSBm aWxlIHRyYW5zZmVyIChsaWtlIEEgZm9yIGEgc3RhdHVzIHJlcG9ydCwgWCB0bworICBjYW5jZWwg YSBmaWxlLCBldGMpLiAgT2J2aW91c2x5LCB3ZSBkb24ndCB3YW50IHRoZSByZWFkcyBpbiB0aGUg bGF0dGVyIGNhc2UKKyAgdG8gYmUgYmxvY2tpbmcsIG9yIHRoZSBmaWxlIHRyYW5zZmVyIHdvdWxk IHN0b3AgdW50aWwgdGhlIHVzZXIgdHlwZWQKKyAgc29tZXRoaW5nLiAgVW5mb3J0dW5hdGVseSwg U3lzdGVtIFYgZG9lcyBub3QgYWxsb3cgdGhlIGNvbnNvbGUgZGV2aWNlIGlucHV0CisgIGJ1ZmZl ciB0byBiZSBzYW1wbGVkIG5vbmRlc3RydWN0aXZlbHkgKGUuZy4gYnkgY29uY2hrKCkpLCBzbyBh IGtsdWRnZSBpcworICB1c2VkIGluc3RlYWQuICBEdXJpbmcgbG9jYWwtbW9kZSBmaWxlIHRyYW5z ZmVyLCB0aGUgU0lHUVVJVCBzaWduYWwgaXMgYXJtZWQKKyAgYW5kIHRyYXBwZWQgYnkgZXNjdHJw KCksIGFuZCB0aGlzIHJvdXRpbmUgcHJldGVuZHMgdG8gaGF2ZSByZWFkIHRoZSBxdWl0CisgIGNo YXJhY3RlciBmcm9tIHRoZSBrZXlib2FyZCBub3JtYWxseS4gIEJ1dCwga2x1ZGdlIG9yIG5vIGts dWRnZSwgdGhlIHJlYWQoKQorICBpc3N1ZWQgYnkgdGhpcyBjb21tYW5kLCB1bmRlciBTeXN0ZW0g ViBvbmx5LCBjYW4gZmFpbCBpZiBhIHNpZ25hbCAtLSBBTlkKKyAgc2lnbmFsIC0tIGlzIGNhdWdo dCB3aGlsZSB0aGUgcmVhZCBpcyBwZW5kaW5nLiAgVGhpcyBjYW4gb2NjdXIgbm90IG9ubHkgd2hl bgorICB0aGUgdXNlciB0eXBlcyB0aGUgcXVpdCBjaGFyYWN0ZXIsIGJ1dCBhbHNvIGR1cmluZyB0 ZWxuZXQgbmVnb3RpYXRpb25zLCB3aGVuCisgIHRoZSBsb3dlciBDT05ORUNUIGZvcmsgc2lnbmFs cyB0aGUgdXBwZXIgb25lIGFib3V0IGFuIGVjaG9pbmcgbW9kZSBjaGFuZ2UuCisgIFdoZW4gdGhp cyBoYXBwZW5zLCB3ZSBoYXZlIHRvIHBvc3QgdGhlIHJlYWQoKSBhZ2Fpbi4gIFRoaXMgaXMgYXBw YXJlbnRseSBub3QKKyAgYSBwcm9ibGVtIGluIEJTRC1iYXNlZCBVTklYIHZlcnNpb25zLgorKi8K KwkgICAgaWYgKGVycm5vID09IEVJTlRSKQkJLyogUmVhZCBpbnRlcnJ1cHRlZC4gKi8KKwkgICAg ICBpZiAoY29uZXNjKSAgewkJLyogSWYgYnkgU0lHUVVJVCwgKi8KKyAJCSBjb25lc2MgPSAwOwkJ LyogdGhlIGNvbmVzYyB2YXJpYWJsZSBpcyBzZXQsICovCisgCQkgcmV0dXJuKGVzY2Nocik7CS8q IHNvIHJldHVybiB0aGUgZXNjYXBlIGNoYXJhY3Rlci4gKi8KKwkgICAgIH0gZWxzZSBjb250aW51 ZTsJCS8qIEJ5IG90aGVyIHNpZ25hbCwgdHJ5IGFnYWluLiAqLworI2Vsc2UKKy8qCisgIFRoaXMg bWlnaHQgYmUgZGFuZ2Vyb3VzLCBidXQgbGV0J3MgZG8gdGhpcyBvbiBub24tU3lzdGVtIFYgdmVy c2lvbnMgdG9vLAorICBzaW5jZSBhdCBsZWFzdCBvbmUgU3VuT1MgNC4xLjIgdXNlciBjb21wbGFp bnMgb2YgaW1tZWRpYXRlIGRpc2Nvbm5lY3Rpb25zCisgIHVwb24gZmlyc3QgbWFraW5nIGEgVEVM TkVUIGNvbm5lY3Rpb24uCisqLworCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBSZWFkIGlu dGVycnVwdGVkLiAqLworCSAgICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwor I2Vsc2UgLyogT1hPUyAqLworCSAgICBpZiAoZXJybm8gPT0gRUlOVFIpCQkvKiBSZWFkIGludGVy cnVwdGVkLiAqLworCSAgICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIE9YT1MgKi8KKwkgICAgcmV0 dXJuKC0xKTsJCQkvKiBFcnJvciAqLworCX0KKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBpZiAo ZGVibG9nICYmIHRpbW8gPD0gMCkgeworCWRlYnVnKEYxMDAsImNvbmluYyB0aW1lb3V0IGxvZ2lj IGVycm9yIiwiIiwwKTsKKwl0aW1vID0gMTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKwor LyogVGltZWQgcmVhZC4uLiAqLworCisgICAgc2F2YWwgPSBzaWduYWwoU0lHQUxSTSx0aW1lcmgp OwkvKiBTZXQgdXAgdGltZW91dCBoYW5kbGVyLiAqLworICAgIHh4ID0gYWxhcm0odGltbyk7CQkJ LyogU2V0IHRoZSBhbGFybS4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25pbmMgYWxhcm0gc2V0Iiwi Iix0aW1vKTsKKyAgICBpZiAoCisjaWZkZWYgQ0tfUE9TSVhfU0lHCisJc2lnc2V0am1wKHNqYnVm LDEpCisjZWxzZQorCXNldGptcChzamJ1ZikKKyNlbmRpZiAvKiBDS19QT1NJWF9TSUcgKi8KKwkp CQkJCS8qIFRoZSByZWFkKCkgdGltZWQgb3V0LiAqLworICAgICAgbiA9IC0yOwkJCQkvKiBDb2Rl IGZvciB0aW1lb3V0LiAqLworICAgIGVsc2UKKyAgICAgIG4gPSByZWFkKDAsICZjaCwgMSk7Cisg ICAgdHRpbW9mZigpOwkJCQkvKiBUdXJuIG9mZiB0aW1lciAqLworICAgIGlmIChuID4gMCkgewkJ CS8qIEdvdCBjaGFyYWN0ZXIgT0suICovCisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0VOQ1JZUFRJ T04KKyAgICAgICAgZGVidWcoRjEwMCwiY29uaW5jIGRlY3J5cHQgMiIsIiIsMCk7CisgICAgICAg IGlmIChpbnNlcnZlciAmJiAhbG9jYWwgJiYgVEVMT1BUX1UoVEVMT1BUX0VOQ1JZUFRJT04pKQor CSAgY2tfdG5fZGVjcnlwdCgoY2hhciAqKSZjaCwxKTsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisjZW5kaWYgLyogSUtTRCAqLworCXJldHVybigodW5zaWduZWQpKGNoICYgMHhmZikpOwkv KiBSZXR1cm4gaXQuICovCisgICAgfQorLyoKKyAgcmVhZCgpIHJldHVybmVkIGFuIGVycm9yLiAg U2FtZSBkZWFsIGFzIGFib3ZlLCBidXQgd2l0aG91dCB0aGUgbG9vcC4KKyovCisgICAgZGVidWco RjEwMSwgImNvbmluYyh0aW1vKSBuIiwiIixuKTsKKyAgICBkZWJ1ZyhGMTAxLCAiY29uaW5jKHRp bW8pIGVycm5vIiwiIixlcnJubyk7CisjaWZuZGVmIE9YT1MKKyNpZmRlZiBTVk9SUE9TSVgKKyAg ICBpZiAobiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUiAmJiBjb25lc2MgIT0gMCkgeworCWNvbmVz YyA9IDA7CisJcmV0dXJuKGVzY2Nocik7CQkJLyogVXNlciBlbnRlcmVkIGVzY2FwZSBjaGFyYWN0 ZXIuICovCisgICAgfQorI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworICAgIGlmIChuID09IDAgJiYg ZXJybm8gPiAwKSB7CQkvKiBJdCdzIGFuIGVycm9yICovCisJcmV0dXJuKC0xKTsKKyAgICB9Cisj ZW5kaWYgLyogISBPWE9TICovCisgICAgcmV0dXJuKG4pOworfQorCisvKiAgQyBPIE4gRyBLIFMg IC0tICBDb25zb2xlIEdldCBLZXlib2FyZCBTY2FuY29kZSAgKi8KKworI2lmbmRlZiBjb25na3MK Ky8qCisgIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZmlsbGVkIGluIHdpdGggdGhlIHZhcmlv dXMgc3lzdGVtLWRlcGVuZGVudAorICBzeXN0ZW0gY2FsbHMgdXNlZCBieSBTVU5PUywgTmVYVCBP UywgWGVuaXgsIEF2aWlvbiwgZXRjLCB0byByZWFkIGEgZnVsbAorICBrZXlib2FyZCBzY2FuIGNv ZGUuICBVbmZvcnR1bmF0ZWx5IHRoZXJlIGFyZW4ndCBhbnkuCisqLworaW50Citjb25na3ModGlt bykgaW50IHRpbW87IHsKKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWxvY2Fs KQorICAgICAgcmV0dXJuKHR0aW5jKHRpbW8pKTsKKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBy ZXR1cm4oY29uaW5jKHRpbW8pKTsKK30KKyNlbmRpZiAvKiBjb25na3MgKi8KKworI2lmZGVmIEFU VDczMDAKKworLyogIEEgVCBUIEQgSSBBIEwgIC0tICBEaWFsIHVwIHRoZSByZW1vdGUgc3lzdGVt IHVzaW5nIGludGVybmFsIG1vZGVtCisgKiBQdXJwb3NlOiB0byBvcGVuIGFuZCBkaWFsIGEgbnVt YmVyIG9uIHRoZSBpbnRlcm5hbCBtb2RlbSBhdmFpbGFibGUgb24gdGhlCisgKiBBVFQ3MzAwIFVO SVggUEMuICBXcml0dGVuIGJ5IEpvZSBEb3VwbmlrLiBTdXBlcmNlZWRzIHZlcnNpb24gd3JpdHRl biBieQorICogUmljaGFyZCBFLiBIaWxsLCBEaWNraW5zb24sIFRYLiB3aGljaCBlbXBsb3llZCBk aWFsKDNjKS4KKyAqIFVzZXMgaW5mb3JtYXRpb24gaW4gPHN5cy9waG9uZS5oPiBhbmQgb3VyIHN0 YXR1cyBpbnQgYXR0bW9kZW0uCisgKi8KK2F0dGRpYWwodHRuYW1lLHNwZWVkLHRlbG5icikgY2hh ciAqdHRuYW1lLCp0ZWxuYnI7IGxvbmcgc3BlZWQ7IHsKKyAgICBjaGFyICp0ZWxudW07CisKKyAg ICBhdHRtb2RlbSAmPSB+SVNNT0RFTTsgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZGVtIG5v dCBpbiB1c2UgeWV0ICovCisgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBPX05ERUxBWSBp cyBzZXQsIGVsc2UgaS9vIHRyYWZmaWMgaGFuZ3MgKi8KKyAgICAgICAgICAgICAgICAgICAgLyog V2UgdHVybiB0aGlzIGZsYWcgb2ZmIG9uY2UgdGhlIGRpYWwgaXMgY29tcGxldGUgKi8KKyAgICBm Y250bCh0dHlmZCwgRl9TRVRGTCwgZmNudGwodHR5ZmQsIEZfR0VURkwsIDApIHwgT19OREVMQVkp OworCisgICAgLyogQ29uZGl0aW9uIGxpbmUsIGNoZWNrIGF2YWlsYWJpbGl0eSAmIERBVEEgbW9k ZSwgdHVybiBvbiBzcGVha2VyICovCisgICAgaWYgKGlvY3RsKHR0eWZkLFBJT0NPRkZIT09LLCAm ZGlhbGVyKSA9PSAtMSkgeworICAgICAgICBwcmludGYoImNhbm5vdCBhY2Nlc3MgcGhvbmVcbiIp OworICAgICAgICB0dGNsb3MoMCk7CisgICAgICAgIHJldHVybiAoLTIpOworICAgIH0KKyAgICBp b2N0bCh0dHlmZCxQSU9DR0VUUCwmZGlhbGVyKTsgICAgICAvKiBnZXQgcGhvbmUgZGlhbGVyIHBh cmFtZXRlcnMgKi8KKworICAgIGlmIChkaWFsZXIuY19saW5lcGFyYW0gJiBWT0lDRSkgewkvKiBw aG9uZSBtdXN0IGJlIGluIERBVEEgbW9kZSAqLworICAgICAgICBwcmludGYoIiBTaG91bGQgbm90 IGRpYWwgd2l0aCBtb2RlbSBpbiBWT0lDRSBtb2RlLlxuIik7CisgICAgICAgIHByaW50ZigiIEV4 aXQgS2VybWl0LCBzd2l0Y2ggdG8gREFUQSBhbmQgcmV0cnkgY2FsbC5cbiIpOworICAgICAgICB0 dGNsb3MoMCk7CisgICAgICAgIHJldHVybiAoLTIpOworICAgIH0KKyNpZmRlZiBBVFRUT05FRAkJ CQkvKiBPbGQgd2F5LCB0b25lIGRpYWxpbmcgb25seS4gKi8KKyAgICBkaWFsZXIuY19saW5lcGFy YW0gPSBEQVRBIHwgRFRNRjsJLyogRGlhbCB3aXRoIHRvbmVzLCAqLworICAgIGRpYWxlci5jX2xp bmVwYXJhbSAmPSB+UFVMU0U7CS8qIG5vdCB3aXRoIHB1bHNlcy4gKi8KKyNlbHNlCisgICAgLyog TGVhdmUgY3VycmVudCBwdWxzZS90b25lIHN0YXRlIGFsb25lLiAqLworICAgIC8qIEJ1dCB3aGF0 IGFib3V0IERBVEE/ICBBZGQgaXQgYmFjayBpZiB5b3UgaGF2ZSB0cm91YmxlLiAqLworICAgIC8q IHN5cy9waG9uZSBzYXlzIHlvdSBnZXQgREFUQSBhdXRvbWF0aWNhbGx5IGJ5IG9wZW5pbmcgZGV2 aWNlIFJEV1IgKi8KKyNlbmRpZgorICAgIGRpYWxlci5jX3dhaXRkaWFsdG9uZSA9IDU7ICAgICAg ICAgICAgICAgICAgLyogd2FpdCA1IHNlYyBmb3IgZGlhbHRvbmUgKi8KKyNpZmRlZiBDT01NRU5U CisgICAgZGlhbGVyLmNfZmVlZGJhY2sgPSBTUEVBS0VST058Tk9STVNQS3xSSU5HT047ICAvKiBj b250cm9sIHNwZWFrZXIgKi8KKyNlbHNlCisgICAgLyogc3lzL3Bob25lIHNheXMgUklOR09OIHVz ZWQgb25seSBmb3IgaW5jb21pbmcgdm9pY2UgY2FsbHMgKi8KKyAgICBkaWFsZXIuY19mZWVkYmFj ayAmPSB+KFNPRlRTUEt8TE9VRFNQSyk7CisgICAgZGlhbGVyLmNfZmVlZGJhY2sgfD0gU1BFQUtF Uk9OfE5PUk1TUEs7CisjZW5kaWYKKyAgICBkaWFsZXIuY193YWl0Zmxhc2ggPSA1MDA7ICAgICAg ICAgICAgICAgICAgIC8qIDAuNSBzZWMgZmxhc2ggaG9vayAqLworICAgIGlmKGlvY3RsKHR0eWZk LFBJT0NTRVRQLCZkaWFsZXIpID09IC0xKSB7ICAgLyogc2V0IHBob25lIHBhcmFtZXRlcnMgKi8K KyAgICAgICAgcHJpbnRmKCJDYW5ub3Qgc2V0IG1vZGVtIGNoYXJhY3RlcmlzdGljc1xuIik7Cisg ICAgICAgIHR0Y2xvcygwKTsKKyAgICAgICAgcmV0dXJuICgtMik7CisgICAgfQorICAgIGlvY3Rs KHR0eWZkLFBJT0NSRUNPTk4sMCk7CQkvKiBUdXJucyBvbiBzcGVha2VyIGZvciBwdWxzZSAqLwor CisjaWZkZWYgQ09NTUVOVAorICAgIGZwcmludGYoc3RkZXJyLCJQaG9uZSBsaW5lIHN0YXR1cy4g bGluZV9wYXI6JW8gZGlhbHRvbmVfd2FpdDolbyBcCitsaW5lX3N0YXR1czolbyBmZWVkYmFjazol b1xuIiwKKyAgICBkaWFsZXIuY19saW5lcGFyYW0sIGRpYWxlci5jX3dhaXRkaWFsdG9uZSwKKyAg ICBkaWFsZXIuY19saW5lc3RhdHVzLCBkaWFsZXIuY19mZWVkYmFjayk7CisjZW5kaWYKKworICAg IGF0dG1vZGVtIHw9IElTTU9ERU07ICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kZW0gaXMg bm93IGluLXVzZSAqLworICAgIHNsZWVwKDEpOworICAgIGZvciAodGVsbnVtID0gdGVsbmJyOyAq dGVsbnVtICE9ICdcMCc7IHRlbG51bSsrKSAgICAvKiBkaWFsIG51bWJlciAqLworI2lmZGVmIEFU VFRPTkVECisgICAgICAvKiBUb25lIGRpYWxpbmcgb25seSAqLworICAgICAgaWYgKGlvY3RsKHR0 eWZkLFBJT0NESUFMLHRlbG51bSkgIT0gMCkgeworCSAgcGVycm9yKCJFcnJvciBpbiBkaWFsaW5n Iik7CisJICB0dGNsb3MoMCk7CisJICByZXR1cm4oLTIpOworICAgICAgfQorI2Vsc2UgLyogQWxs b3cgUHVsc2Ugb3IgVG9uZSBkaWFsaW5nICovCisgICAgc3dpdGNoICgqdGVsbnVtKSB7CisgICAg ICBjYXNlICd0JzogY2FzZSAnVCc6IGNhc2UgJyUnOgkvKiBUb25lIGRpYWxpbmcgcmVxdWVzdGVk ICovCisJZGlhbGVyLmNfbGluZXBhcmFtIHw9IERUTUY7CisJZGlhbGVyLmNfbGluZXBhcmFtICY9 IH5QVUxTRTsKKwlpZiAoaW9jdGwodHR5ZmQsUElPQ1NFVFAsJmRpYWxlcikgPT0gLTEpIHsKKwkg ICAgcHJpbnRmKCJDYW5ub3Qgc2V0IG1vZGVtIHRvIHRvbmUgZGlhbGluZ1xuIik7CisJICAgIHR0 Y2xvcygwKTsKKwkgICAgcmV0dXJuKC0yKTsKKwl9CisJYnJlYWs7CisgICAgICBjYXNlICdkJzog Y2FzZSAnRCc6IGNhc2UgJ3AnOiBjYXNlICdQJzogY2FzZSAnXic6CisJZGlhbGVyLmNfbGluZXBh cmFtIHw9IFBVTFNFOworCWRpYWxlci5jX2xpbmVwYXJhbSAmPSB+RFRNRjsKKwlpZiAoaW9jdGwo dHR5ZmQsUElPQ1NFVFAsJmRpYWxlcikgPT0gLTEpIHsKKwkgICAgcHJpbnRmKCJDYW5ub3Qgc2V0 IG1vZGVtIHRvIHB1bHNlIGRpYWxpbmdcbiIpOworCSAgICB0dGNsb3MoMCk7CisJICAgIHJldHVy bigtMik7CisJfQorCWJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKGlvY3RsKHR0 eWZkLFBJT0NESUFMLHRlbG51bSkgIT0gMCkgeworCSAgICBwZXJyb3IoIkRpYWxpbmcgZXJyb3Ii KTsKKwkgICAgdHRjbG9zKDApOworCSAgICByZXR1cm4oLTIpOworCX0KKwlicmVhazsKKyAgICB9 CisjZW5kaWYKKworICAgIGlvY3RsKHR0eWZkLFBJT0NESUFMLCJAIik7CQkvKiB0ZXJtaW5hdG9y IGZvciBkYXRhIGNhbGwgKi8KKyAgICBkbyB7CQkJCS8qIHdhaXQgZm9yIG1vZGVtcyB0byBDb25u ZWN0ICovCisgICAgICAgIGlmIChpb2N0bCh0dHlmZCxQSU9DR0VUUCwmZGlhbGVyKSAhPSAwKQl7 IC8qIGdldCBwYXJhbXMgKi8KKwkgICAgcGVycm9yKCJDYW5ub3QgZ2V0IG1vZGVtcyB0byBjb25u ZWN0Iik7CisJICAgIHR0Y2xvcygwKTsKKwkgICAgcmV0dXJuKC0yKTsKKwl9CisgICAgfSB3aGls ZSAoKGRpYWxlci5jX2xpbmVzdGF0dXMgJiBNT0RFTUNPTk5FQ1RFRCkgPT0gMCk7CisgICAgLyog VHVybiBvZmYgT19OREVMQVkgZmxhZyBub3cuICovCisgICAgZmNudGwodHR5ZmQsIEZfU0VURkws IGZjbnRsKHR0eWZkLCBGX0dFVEZMLCAwKSAmIH5PX05ERUxBWSk7CisgICAgc2lnbmFsKFNJR0hV UCwgc2lnaHVwKTsgICAgICAgICAgICAgLyogaGFuZ3VwIG9uIGxvc3Mgb2YgY2FycmllciAqLwor ICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBzdWNjZXNz ICovCit9CisKKy8qCisgIE9mZmdldHR5LCBvbmdldHR5IGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rp b24gZ2V0IHRoZSAnZ2V0dHkoMW0pJyBvZmYKKyAgYW5kIHJlc3RvcmUgaXQgdG8gdGhlIGluZGlj YXRlZCBsaW5lLiAgU2hlbGwncyByZXR1cm4gY29kZXMgYXJlOgorICAgIDA6IENhbid0IGRvIGl0 LiAgUHJvYmFibHkgYSB1c2VyIGxvZ2dlZCBvbi4KKyAgICAxOiBObyBuZWVkLiAgTm8gZ2V0dHkg b24gdGhhdCBsaW5lLgorICAgIDI6IERvbmUsIHlvdSBzaG91bGQgcmVzdG9yZSB0aGUgZ2V0dHkg d2hlbiB5b3UncmUgZG9uZS4KKyAgRE9HRVRZIFN5c3RlbSgzKSwgaG93ZXZlciwgcmV0dXJucyB0 aGVtIGFzIDAsIDI1NiwgNTEyLCByZXNwZWN0aXZlbHkuCisgIFRoYW5rcyB0byBLZXZpbiBPJ0dv cm1hbiwgQW5hcm0gU29mdHdhcmUgU3lzdGVtcy4KKworICAgZ2V0b2ZmLnNoIGxvb2tzIGxpa2U6 ICAgZ2V0b24uc2ggbG9va3MgbGlrZToKKyAgICAgc2V0Z2V0dHkgJDEgMCAgICAgICAgICAgc2V0 Z2V0dHkgJDEgMQorICAgICBlcnI9JD8gICAgICAgICAgICAgICAgICBleGl0ICQ/CisgICAgIHNs ZWVwIDIKKyAgICAgZXhpdCAkZXJyCisqLworCisvKiAgTyBGIEYgRyBFIFQgVCBZICAtLSAgVHVy biBvZmYgZ2V0dHkoMW0pIGZvciB0aGUgY29tbXVuaWNhdGlvbnMgdHR5IGxpbmUKKyAqIGFuZCBn ZXQgc3RhdHVzIHNvIGl0IGNhbiBiZSByZXN0YXJ0ZWQgYWZ0ZXIgdGhlIGxpbmUgaXMgaHVuZyB1 cC4KKyAqLworaW50CitvZmZnZXR0eSh0dG5hbWUpIGNoYXIgKnR0bmFtZTsgeworICAgIGNoYXIg dGVtcFszMF07CisgICAgd2hpbGUgKCp0dG5hbWUgIT0gJ1wwJykgdHRuYW1lKys7ICAgICAgIC8q IHNlZWsgdGVybWluYXRvciBvZiBwYXRoICovCisgICAgdHRuYW1lIC09IDM7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGdldCBsYXN0IDMgY2hhcnMgb2YgbmFtZSAqLworICAgIHNwcmlu dGYodGVtcCwiL3Vzci9iaW4vZ2V0b2ZmLnNoICVzIix0dG5hbWUpOworICAgIHJldHVybih6c3lz Y21kKHRlbXApKTsKK30KKworLyogIE8gTiBHIEUgVCBUIFkgIC0tICBUdXJuIG9uIGdldHR5KDFt KSBmb3IgdGhlIGNvbW11bmljYXRpb25zIHR0eSBsaW5lICovCisKK2ludAorb25nZXR0eSh0dG5h bWUpIGNoYXIgKnR0bmFtZTsgeworICAgIGNoYXIgdGVtcFszMF07CisgICAgd2hpbGUgKCp0dG5h bWUgIT0gJ1wwJykgdHRuYW1lKys7ICAgICAgIC8qIGNvbW1zIHR0eSBwYXRoIG5hbWUgKi8KKyAg ICB0dG5hbWUgLT0gMzsKKyAgICBzcHJpbnRmKHRlbXAsIi91c3IvYmluL2dldG9uLnNoICVzIix0 dG5hbWUpOworICAgIHJldHVybih6c3lzY21kKHRlbXApKTsKK30KKyNlbmRpZiAvKiBBVFQ3MzAw ICovCisKKy8qICBUIFQgUyBDIEEgUiBSICAtLSAgU2V0IHR0Y2FyciB2YXJpYWJsZSwgY29udHJv bGxpbmcgY2FycmllciBoYW5kbGluZy4KKyAqCisgKiAgMCA9IE9mZjogQWx3YXlzIGlnbm9yZSBj YXJyaWVyLiBFLmcuIHlvdSBjYW4gY29ubmVjdCB3aXRob3V0IGNhcnJpZXIuCisgKiAgMSA9IE9u OiBIZWVkIGNhcnJpZXIsIGV4Y2VwdCBkdXJpbmcgZGlhbGluZy4gQ2FycmllciBsb3NzIGdpdmVz IGRpc2Nvbm5lY3QuCisgKiAgMiA9IEF1dG86IEZvciAibW9kZW0gZGlyZWN0IjogVGhlIHNhbWUg YXMgIk9mZiIuCisgKiAgICAgICAgICAgIEZvciByZWFsIG1vZGVtIHR5cGVzOiBIZWVkIGNhcnJp ZXIgZHVyaW5nIGNvbm5lY3QsIGJ1dCBpZ25vcmUKKyAqICAgICAgICAgICAgICAgIGl0IGFueXRp bWUgZWxzZS4gIENvbXBhdGlibGUgd2l0aCBwcmUtNUEgQy1LZXJtaXQgdmVyc2lvbnMuCisgKgor ICogQXMgeW91IGNhbiBzZWUsIHRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgZGlhbGluZywg d2hpY2ggYWx3YXlzIGlnbm9yZXMKKyAqIGNhcnJpZXIgKHVubGVzcyB0aGVyZSBpcyBzb21lIHNw ZWNpYWwgZXhjZXB0aW9uIGZvciBzb21lIG1vZGVtIHR5cGUpLiAgSXQKKyAqIGRvZXMgYWZmZWN0 IHR0b3BlbigpIGlmIGl0IGlzIHNldCBiZWZvcmUgdHRvcGVuKCkgaXMgdXNlZC4gIFRoaXMgc2V0 dGluZworICogdGFrZXMgZWZmZWN0IG9uIHRoZSBuZXh0IGNhbGwgdG8gdHRvcGVuKCkvdHRwa3Qo KS90dHZ0KCkuICBBbmQgdGhleSBhcmUKKyAqIChvciBzaG91bGQgYmUpIGFsd2F5cyBjYWxsZWQg YmVmb3JlIGFueSBjb21tdW5pY2F0aW9ucyBpcyB0cmllZCwgd2hpY2gKKyAqIG1lYW5zIHRoYXQs IHByYWN0aWNhbGx5IHNwZWFraW5nLCB0aGUgZWZmZWN0IGlzIGltbWVkaWF0ZS4KKyAqCisgKiBP ZiBjb3Vyc2UsIG5vdGhpbmcgb2YgdGhpcyBhcHBsaWVzIHRvIHJlbW90ZSBtb2RlICh4bG9jYWwg PSAwKS4KKyAqCisgKiBTb21lb25lIGhhcyB5ZXQgdG8gdW5jb3ZlciBob3cgdG8gbWFuaXB1bGF0 ZSB0aGUgY2FycmllciBpbiB0aGUgQlNECisgKiBlbnZpcm9ubWVudCAob3IgYW55IG5vbi10ZXJt aW8gdXNpbmcgZW52aXJvbm1lbnQpLiAgVW50aWwgdGhhdCB0aW1lLCB0aGlzCisgKiB3aWxsIHNp bXBseSBiZSBhIG5vLW9wIGZvciBCU0QuCisgKgorICogTm90ZSB0aGF0IGluIHByZXZpb3VzIHZl cnNpb25zLCB0aGUgY2FycmllciB3YXMgbW9zdCBvZnRlbiBsZWZ0IHVuY2hhbmdlZAorICogaW4g dHRwa3QoKS90dHZ0KCkgdW5sZXNzIHRoZXkgd2VyZSBjYWxsZWQgd2l0aCBGTE9fRElBTCBvciBG TE9fRElBWC4gIFRoaXMKKyAqIGhhcyBjaGFuZ2VkLiAgTm93IGl0IGlzIGNvbnRyb2xsZWQgYnkg dHRjYXJyIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlc2UKKyAqIG1vZGVzLgorICovCitpbnQKK3R0 c2NhcnIoY2FycmllcikgaW50IGNhcnJpZXI7IHsKKyAgICB0dGNhcnIgPSBjYXJyaWVyOworICAg IGRlYnVnKEYxMDEsICJ0dHNjYXJyIiwiIix0dGNhcnIpOworICAgIHJldHVybih0dGNhcnIpOwor fQorCisvKiBDIEEgUiBSIEMgVCBMICAtLSAgU2V0IHR0eSBtb2RlcyBmb3IgY2FycmllciB0cmVh dG1lbnQuCisgKgorICogU2V0cyB0aGUgYXBwcm9wcmlhdGUgYml0cyBpbiBhIHRlcm1pbyBvciBz Z3R0eWIgc3RydWN0IGZvciBjYXJyaWVyIGNvbnRyb2wKKyAqIChhY3R1YWxseSwgdGhlcmUgYXJl IG5vIGJpdHMgaW4gc2d0dHliIGZvciB0aGF0KSwgb3IgcGVyZm9ybXMgYW55IG90aGVyCisgKiBv cGVyYXRpb25zIG5lZWRlZCB0byBjb250cm9sIHRoaXMgb24gdGhlIGN1cnJlbnQgc3lzdGVtLiAg VGhlIGZ1bmN0aW9uIGRvZXMKKyAqIG5vdCBkbyB0aGUgYWN0dWFsIFRDU0VUQSBvciBzdHR5LCBz aW5jZSBvZnRlbiB3ZSB3YW50IHRvIHNldCBvdGhlciBiaXRzIHRvbworICogZmlyc3QuICBEb24n dCBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiB4bG9jYWwgaXMgMCwgb3IgdGhlIHR0eSBpcyBub3Qg b3BlbmVkLgorICoKKyAqIFdlIGRvbid0IGtub3cgaG93IHRvIGRvIGFueXRoaW5nIGxpa2UgY2Fy cmllciBjb250cm9sIG9uIG5vbi1BVFRTViBzeXN0ZW1zLAorICogZXhjZXB0LCBhcHBhcmVudGx5 LCB1bHRyaXguICBTZWUgYWJvdmUuICBJdCBpcyBhbHNvIGtub3duIHRoYXQgdGhpcyBkb2Vzbid0 CisgKiBoYXZlIG11Y2ggZWZmZWN0IG9uIGEgWGVuaXggc3lzdGVtLiAgRm9yIFhlbml4LCBvbmUg c2hvdWxkIHN3aXRjaCBiYWNrIGFuZAorICogZm9ydGggYmV0d2VlbiB0aGUgdXBwZXIgYW5kIGxv d2VyIGNhc2UgZGV2aWNlIGZpbGVzLiAgTWF5YmUgbGF0ZXIuCisgKiBQcmVzZW50bHksIFhlbml4 IHdpbGwgc3RpY2sgdG8gdGhlIG1vZGUgaXQgd2FzIG9wZW5lZCB3aXRoLgorICoKKyAqIGNhcnJp ZXI6IDAgPSBpZ25vcmUgY2FycmllciwgMSA9IHJlcXVpcmUgY2Fycmllci4KKyAqIFRoZSBjdXJy ZW50IHN0YXRlIGlzIHNhdmVkIGluIGN1cmNhcnIsIGFuZCBjaGVja2VkIHRvIHNhdmUgbGFib3Vy LgorICovCisjaWZkZWYgU1ZPUlBPU0lYCitpbnQKKyNpZmRlZiBCU0Q0NE9SUE9TSVgKK2NhcnJj dGwodHRwYXIsIGNhcnJpZXIpCXN0cnVjdCB0ZXJtaW9zICp0dHBhcjsgaW50IGNhcnJpZXI7Cisj ZWxzZSAvKiBBVFRTViAqLworY2FycmN0bCh0dHBhciwgY2FycmllcikJc3RydWN0IHRlcm1pbyAq dHRwYXI7IGludCBjYXJyaWVyOworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworLyogY2FycmN0 bCAqLyB7CisgICAgZGVidWcoRjEwMSwgImNhcnJjdGwiLCIiLGNhcnJpZXIpOworICAgIGlmIChj YXJyaWVyKQorICAgICAgdHRwYXItPmNfY2ZsYWcgJj0gfkNMT0NBTDsKKyAgICBlbHNlCisgICAg ICB0dHBhci0+Y19jZmxhZyB8PSBDTE9DQUw7CisgICAgcmV0dXJuKDApOworfQorI2Vsc2UgLyog QmVya2VsZXksIFY3LCBldCBhbC4uLiAqLworaW50CitjYXJyY3RsKHR0cGFyLCBjYXJyaWVyKSBz dHJ1Y3Qgc2d0dHliICp0dHBhcjsgaW50IGNhcnJpZXI7IHsKKyAgICBkZWJ1ZyhGMTAxLCAiY2Fy cmN0bCIsIiIsY2Fycmllcik7CisgICAgaWYgKGNhcnJpZXIgPT0gY3VyY2FycikKKyAgICAgIHJl dHVybigwKTsKKyAgICBjdXJjYXJyID0gY2FycmllcjsKKyNpZmRlZiB1bHRyaXgKKyNpZmRlZiBD T01NRU5UCisvKgorICBPbGQgY29kZSBmcm9tIHNvbWVib2R5IGF0IERFQyB0aGF0IHRlbmRzIHRv IGdldCBzdHVjaywgdGltZSBvdXQsIGV0Yy4KKyovCisgICAgaWYgKGNhcnJpZXIpIHsKKwlpb2N0 bCh0dHlmZCwgVElPQ01PREVNLCAmdGVtcCk7CisJaW9jdGwodHR5ZmQsIFRJT0NIUENMLCAwKTsK KyAgICB9IGVsc2UgeworCS8qIChBY2NvcmRpbmcgdG8gdGhlIG1hbnVhbHMsIFRJT0NOQ0FSIHNo b3VsZCBiZSBwcmVmZXJyZWQgKi8KKwkvKiBvdmVyIFRJT0NOTU9ERU0uLi4pICovCisJaW9jdGwo dHR5ZmQsIFRJT0NOTU9ERU0sICZ0ZW1wKTsKKyAgICB9CisjZWxzZQorLyoKKyAgTmV3IGNvZGUg ZnJvbSBKYW1pZSBXYXRzb24gdGhhdCwgaGUgc2F5cywgZWxpbWluYXRlcyB0aGUgcHJvYmxlbXMu CisqLworICAgIGlmIChjYXJyaWVyKSB7CisJaW9jdGwodHR5ZmQsIFRJT0NDQVIpOworCWlvY3Rs KHR0eWZkLCBUSU9DSFBDTCk7CisgICAgfSBlbHNlIHsKKwlpb2N0bCh0dHlmZCwgVElPQ05DQVIp OworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogdWx0cml4ICovCisgICAg cmV0dXJuKDApOworfQorI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworCisKKy8qICBUIFQgRyBNIEQg TSAgLS0gIEdldCBtb2RlbSBzaWduYWxzICAqLworLyoKKyBMb29rcyBmb3IgUlMtMjMyIG1vZGVt IHNpZ25hbHMsIGFuZCByZXR1cm5zIHRob3NlIHRoYXQgYXJlIG9uIGluIGFzIGl0cworIHJldHVy biB2YWx1ZSwgaW4gYSBiaXQgbWFzayBjb21wb3NlZCBvZiB0aGUgQk1feHh4IHZhbHVlcyBkZWZp bmVkIGluIGNrY2RlYi5oLgorIFJldHVybnM6CisgLTMgTm90IGltcGxlbWVudGVkCisgLTIgaWYg dGhlIGNvbW11bmljYXRpb24gZGV2aWNlIGRvZXMgbm90IGhhdmUgbW9kZW0gY29udHJvbCAoZS5n LiB0ZWxuZXQpCisgLTEgb24gZXJyb3IuCisgPj0gMCBvbiBzdWNjZXNzLCB3aXRoIGEgYml0IG1h c2sgY29udGFpbmluZyB0aGUgbW9kZW0gc2lnbmFscyB0aGF0IGFyZSBvbi4KKyovCisKKy8qCisg IERlZmluZSB0aGUgc3ltYm9sIEtfTURNQ1RMIGlmIHdlIGhhdmUgU3lzIFYgUjMgLyA0LjMgQlNE IHN0eWxlCisgIG1vZGVtIGNvbnRyb2wsIG5hbWVseSB0aGUgVElPQ01HRVQgaW9jdGwuCisqLwor CisjaWZkZWYgQlNENDMKKyNkZWZpbmUgS19NRE1DVEwKKyNlbmRpZiAvKiBCU0Q0MyAqLworCisj aWZkZWYgU1VOT1M0CisjZGVmaW5lIEtfTURNQ1RMCisjZW5kaWYgLyogU1VOT1M0ICovCisKKy8q CisgIFNDTyBPcGVuU2VydmVyIFI1LjAuNC4gIFRoZSBUSU9DTUdFVCBkZWZpbml0aW9uIGlzIGhh cmR3aXJlZCBpbiBiZWNhdXNlIGl0CisgIGlzIHNraXBwZWQgaW4gdGVybWlvLmggd2hlbiBfUE9T SVhfU09VUkNFIGlzIGRlZmluZWQuICBCdXQgX1BPU0lYX1NPVVJDRQorICBtdXN0IGJlIGRlZmlu ZWQgaW4gb3JkZXIgdG8gZ2V0IHRoZSBoaWdoIHNlcmlhbCBzcGVlZHMgdGhhdCBhcmUgbmV3IHRv CisgIDUuMC40LiAgSG93ZXZlciwgdGhlIHJlZ3VsYXIgU0NPIGRyaXZlcnMgZG8gbm90IGltcGxl bWVudCBUSU9DTUdFVCwgc28gdGhlCisgIGlvY3RsKCkgcmV0dXJucyAtMSB3aXRoIGVycm5vIDIy IChpbnZhbGlkIGZ1bmN0aW9uKS4gIEJ1dCB0aGlyZC1wYXJ0eQorICBkcml2ZXJzLCBlLmcuIGZv ciBEaWdpYm9hcmQsIGRvIGltcGxlbWVudCBpdCwgYW5kIHNvIGl0IHNob3VsZCB3b3JrIG9uIHBv cnRzCisgIGRyaXZlbiBieSB0aG9zZSBkcml2ZXJzLgorKi8KKyNpZmRlZiBTQ09fT1NSNTA0Cisj aWZuZGVmIFRJT0NNR0VUCisjZGVmaW5lIFRJT0NNR0VUICgoJ3QnPDw4KXwyOSkKKyNlbmRpZiAv KiBUSU9DTUdFVCAqLworI2VuZGlmIC8qIFNDT19PU1I1MDQgKi8KKworI2lmZGVmIENLX1NDT1Y1 CisvKiBCZWNhdXNlIFBPU0lYIHN0cmljdG5lc3MgaW4gPHN5cy90ZXJtaW8uaD4gd29uJ3QgbGV0 IHVzIHNlZSB0aGVzZS4gKi8KKyNpZm5kZWYgVElPQ01fRFRSCisjZGVmaW5lIFRJT0NNX0RUUgkw eDAwMDIJCS8qIGRhdGEgdGVybWluYWwgcmVhZHkgKi8KKyNkZWZpbmUgVElPQ01fUlRTCTB4MDAw NAkJLyogcmVxdWVzdCB0byBzZW5kICovCisjZGVmaW5lIFRJT0NNX0NUUwkweDAwMjAJCS8qIGNs ZWFyIHRvIHNlbmQgKi8KKyNkZWZpbmUgVElPQ01fQ0FSCTB4MDA0MAkJLyogY2FycmllciBkZXRl Y3QgKi8KKyNkZWZpbmUgVElPQ01fUk5HCTB4MDA4MAkJLyogcmluZyAqLworI2RlZmluZSBUSU9D TV9EU1IJMHgwMTAwCQkvKiBkYXRhIHNldCByZWFkeSAqLworI2RlZmluZSBUSU9DTV9DRAlUSU9D TV9DQVIKKyNkZWZpbmUgVElPQ01fUkkJVElPQ01fUk5HCisjZW5kaWYgLyogVElPQ01fRFRSICov CisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKworI2lmZGVmIFFOWAorI2RlZmluZSBLX01ETUNUTAor I2Vsc2UKKyNpZmRlZiBUSU9DTUdFVAorI2RlZmluZSBLX01ETUNUTAorI2VuZGlmIC8qIFRJT0NN R0VUICovCisjZW5kaWYgLyogUU5YICovCisvKgorICAiQSBzZXJpYWwgY29tbXVuaWNhdGlvbiBw cm9ncmFtIHRoYXQgY2FuJ3QgcmVhZCBtb2RlbSBzaWduYWxzCisgICBpcyBsaWtlIGEgY2FyIHdp dGhvdXQgd2luZG93cy4iCisqLworaW50Cit0dGdtZG0oKSB7CisKKyNpZmRlZiBRTlgKKyNpbmNs dWRlIDxzeXMvcWlvY3RsLmg+CisKKyAgICB1bnNpZ25lZCBsb25nIHksIG1kbWJpdHNbMl07Cisg ICAgaW50IHgsIHogPSAwOworCisgICAgaWYgKHhsb2NhbCAmJiB0dHlmZCA8IDApCisgICAgICBy ZXR1cm4oLTEpOworCisjaWZkZWYgTkVUQ09OTgorICAgIGlmIChuZXRjb25uKSB7CQkJLyogTmV0 d29yayBjb25uZWN0aW9uICovCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICBpZiAoaXN0bmNv bXBvcnQoKSkgeworCSAgICBnb3RzaWdzID0gMTsKKwkgICAgcmV0dXJuKHRuZ21kbSgpKTsKKwl9 IGVsc2UKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisJICByZXR1cm4oLTIpOwkJCS8qIE5vIG1v ZGVtIHNpZ25hbHMgKi8KKyAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZkZWYgTkVU Q01ECisgICAgaWYgKHR0cGlwZSkgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNp ZmRlZiBORVRQVFkKKyAgICBpZiAodHRwdHkpIHJldHVybigtMik7CisjZW5kaWYgLyogTkVUUFRZ ICovCisKKyAgICBtZG1iaXRzWzBdID0gMEw7CisgICAgbWRtYml0c1sxXSA9IDBMOworLyoKKyAq IEZyb20gPHN5cy9xaW9jdGwuaD46CisgKgorICogU0VSSUFMIGRldmljZXMgICAoYWxsIERldi5z ZXIgdmVyc2lvbnMpCisgKiAwIDogRFRSICAgICAgICAgICA4ID0gRGF0YSBCaXRzIDAgIDE2IC0g cmVzZXJ2ZWQgICAgIDI0IC0gcmVzZXJ2ZWQKKyAqIDEgOiBSVFMgICAgICAgICAgIDkgPSBEYXRh IEJpdHMgMSAgMTcgLSByZXNlcnZlZCAgICAgMjUgLSByZXNlcnZlZAorICogMiA9IE91dCAxICAg ICAgICAxMCA9IFN0b3AgQml0cyAgICAxOCAtIHJlc2VydmVkICAgICAyNiAtIHJlc2VydmVkCisg KiAzID0gSW50IEVuYWJsZSAgIDExID0gUGFyIEVuYWJsZSAgIDE5IC0gcmVzZXJ2ZWQgICAgIDI3 IC0gcmVzZXJ2ZWQKKyAqIDQgPSBMb29wICAgICAgICAgMTIgPSBQYXIgRXZlbiAgICAgMjAgPSBD VFMgICAgICAgICAgMjggLSByZXNlcnZlZAorICogNSAtIHJlc2VydmVkICAgICAxMyA9IFBhciBT dGljayAgICAyMSA9IERTUiAgICAgICAgICAyOSAtIHJlc2VydmVkCisgKiA2IC0gcmVzZXJ2ZWQg ICAgIDE0IDogQnJlYWsgICAgICAgIDIyID0gUkkgICAgICAgICAgIDMwIC0gcmVzZXJ2ZWQKKyAq IDcgLSByZXNlcnZlZCAgICAgMTUgPSAwICAgICAgICAgICAgMjMgPSBDRCAgICAgICAgICAgMzEg LSByZXNlcnZlZAorICovCisgICAgZXJybm8gPSAwOworICAgIHggPSBxbnhfaW9jdGwodHR5ZmQs IFFDVExfREVWX0NUTCwgJm1kbWJpdHNbMF0sIDgsICZtZG1iaXRzWzBdLCA0KTsKKyAgICBkZWJ1 ZyhGMTAxLCJ0dGdtZG0gcW54X2lvY3RsIiwiIix4KTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0g cW54X2lvY3RsIGVycm5vIiwiIixlcnJubyk7CisgICAgaWYgKCF4KSB7CisJZGVidWcoRjEwMSwi dHRnbWRtIHFueF9pb2N0bCBtZG1iaXRzWzBdIiwiIixtZG1iaXRzWzBdKTsKKwlkZWJ1ZyhGMTAx LCJ0dGdtZG0gcW54X2lvY3RsIG1kbWJpdHNbMV0iLCIiLG1kbWJpdHNbMV0pOworCXkgPSBtZG1i aXRzWzBdOworCWlmICh5ICYgMHgwMDAwMDFMKSB6IHw9IEJNX0RUUjsJLyogQml0ICAwICovCisJ aWYgKHkgJiAweDAwMDAwMkwpIHogfD0gQk1fUlRTOwkvKiBCaXQgIDEgKi8KKwlpZiAoeSAmIDB4 MTAwMDAwTCkgeiB8PSBCTV9DVFM7CS8qIEJpdCAyMCAqLworCWlmICh5ICYgMHgyMDAwMDBMKSB6 IHw9IEJNX0RTUjsJLyogQml0IDIxICovCisJaWYgKHkgJiAweDQwMDAwMEwpIHogfD0gQk1fUk5H OwkvKiBCaXQgMjIgKi8KKwlpZiAoeSAmIDB4ODAwMDAwTCkgeiB8PSBCTV9EQ0Q7CS8qIEJpdCAy MyAqLworCWRlYnVnKEYxMDEsInR0Z21kbSBxbnggcmVzdWx0IiwiIix6KTsKKwlkZWJ1ZyhGMTEw LCJ0dGdtZG0gcW54IENEID0gIiwoeiAmIEJNX0RDRCkgPyAiT24iIDogIk9mZiIsIDApOworCWdv dHNpZ3MgPSAxOworCXJldHVybih6KTsKKyAgICB9IGVsc2UgcmV0dXJuKC0xKTsKKyNlbHNlIC8q IFFOWCAqLworI2lmZGVmIEhQVVgJCQkJLyogSFBVWCBoYXMgaXRzIG93biB3YXkgKi8KKyAgICBp bnQgeCwgejsKKworI2lmZGVmIEhQVVgxMAkJCQkvKiBNb2RlbSBmbGFnIHdvcmQgKi8KKyAgICBt ZmxhZyB5OwkJCQkvKiBtZmxhZyB0eXBlZGVmJ2QgaW4gPHN5cy9tb2RlbS5oPiAqLworI2Vsc2UK KyNpZmRlZiBIUFVYOQorICAgIG1mbGFnIHk7CisjZWxzZQorI2lmZGVmIEhQVVg4CisgICAgbWZs YWcgeTsKKyNlbHNlCisgICAgdW5zaWduZWQgbG9uZyB5OwkJCS8qIE5vdCBzdXJlIGFib3V0IHBy ZS04LjAuLi4gKi8KKyNlbmRpZiAvKiBIUFVYOCAqLworI2VuZGlmIC8qIEhQVVg5ICovCisjZW5k aWYgLyogSFBVWDEwICovCisKKyAgICBpZiAoeGxvY2FsICYmIHR0eWZkIDwgMCkKKyAgICAgIHJl dHVybigtMSk7CisKKyNpZmRlZiBORVRDT05OCisgICAgaWYgKG5ldGNvbm4pIHsJCQkvKiBOZXR3 b3JrIGNvbm5lY3Rpb24gKi8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgIGlmIChpc3RuY29t cG9ydCgpKSB7CisJICAgIGdvdHNpZ3MgPSAxOworCSAgICByZXR1cm4odG5nbWRtKCkpOworCX0g ZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKwkgIHJldHVybigtMik7CQkJLyogTm8gbW9k ZW0gc2lnbmFscyAqLworICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBORVRD TUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lm ZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBORVRQVFkg Ki8KKworICAgIGlmICh4bG9jYWwpCQkJCS8qIEdldCBtb2RlbSBzaWduYWxzICovCisgICAgICB4 ID0gaW9jdGwodHR5ZmQsTUNHRVRBLCZ5KTsKKyAgICBlbHNlCisgICAgICB4ID0gaW9jdGwoMCxN Q0dFVEEsJnkpOworICAgIGlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0 dGdtZG0iLCIiLHkpOworCisgICAgeiA9IDA7CQkJCS8qIEluaXRpYWxpemUgcmV0dXJuIHZhbHVl ICovCisKKy8qIE5vdyBzZXQgYml0cyBmb3IgZWFjaCBtb2RlbSBzaWduYWwgdGhhdCBpcyByZXBv cnRlZCB0byBiZSBvbi4gKi8KKworI2lmZGVmIE1DVFMKKyAgICAvKiBDbGVhciBUbyBTZW5kICov CisgICAgZGVidWcoRjEwMSwidHRnbWRtIEhQVVggQ1RTIiwiIix5ICYgTUNUUyk7CisgICAgaWYg KHkgJiBNQ1RTKSB6IHw9IEJNX0NUUzsKKyNlbmRpZgorI2lmZGVmIE1EU1IKKyAgICAvKiBEYXRh IFNldCBSZWFkeSAqLworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIERTUiIsIiIseSAmIE1E U1IpOworICAgIGlmICh5ICYgTURTUikgeiB8PSBCTV9EU1I7CisjZW5kaWYKKyNpZmRlZiBNRENE CisgICAgLyogQ2FycmllciAqLworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBIUFVYIERDRCIsIiIs eSAmIE1EQ0QpOworICAgIGlmICh5ICYgTURDRCkgeiB8PSBCTV9EQ0Q7CisjZW5kaWYKKyNpZmRl ZiBNUkkKKyAgICAvKiBSaW5nIEluZGljYXRlICovCisgICAgZGVidWcoRjEwMSwidHRnbWRtIEhQ VVggUkkiLCIiLHkgJiBNUkkpOworICAgIGlmICh5ICYgTVJJKSB6IHw9IEJNX1JORzsKKyNlbmRp ZgorI2lmZGVmIE1EVFIKKyAgICAvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCisgICAgZGVidWco RjEwMSwidHRnbWRtIEhQVVggRFRSIiwiIix5ICYgTURUUik7CisgICAgaWYgKHkgJiBNRFRSKSB6 IHw9IEJNX0RUUjsKKyNlbmRpZgorI2lmZGVmIE1SVFMKKyAgICAvKiBSZXF1ZXN0IFRvIFNlbmQg Ki8KKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0gSFBVWCBSVFMiLCIiLHkgJiBNUlRTKTsKKyAgICBp ZiAoeSAmIE1SVFMpIHogfD0gQk1fUlRTOworI2VuZGlmCisgICAgZ290c2lncyA9IDE7CisgICAg cmV0dXJuKHopOworCisjZWxzZSAvKiAhIEhQVVggKi8KKworI2lmZGVmIEtfTURNQ1RMCisvKgor ICBOb3RlLCBUSU9DTUdFVCBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBkZWZpbmVkIGluIDxzeXMv aW9jdGwuaD4gb3IgZWxzZXdoZXJlLgorICBJZiBub3QsIHdlIHRyeSBpbmNsdWRpbmcgPHN5cy90 dHljb20uaD4gLS0gaWYgdGhpcyBibG93cyB1cCB0aGVuIG1vcmUgaWZkZWZzCisgIGFyZSBuZWVk ZWQuCisqLworI2lmbmRlZiBUSU9DTUdFVAorI2luY2x1ZGUgPHN5cy90dHljb20uaD4KKyNlbmRp ZiAvKiBUSU9DTUdFVCAqLworCisgICAgaW50IHgsIHksIHo7CisKKyAgICBkZWJ1ZyhGMTAwLCJ0 dGdtZG0gS19NRE1DVEwgZGVmaW5lZCIsIiIsMCk7CisKKyNpZmRlZiBORVRDT05OCisgICAgaWYg KG5ldGNvbm4pIHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KKyNpZmRlZiBUTl9DT01QT1JU CisgICAgICAgIGlmIChpc3RuY29tcG9ydCgpKSB7CisJICAgIGdvdHNpZ3MgPSAxOworCSAgICBy ZXR1cm4odG5nbWRtKCkpOworCX0gZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKwkgIHJl dHVybigtMik7CQkJLyogTm8gbW9kZW0gc2lnbmFscyAqLworICAgIH0KKyNlbmRpZiAvKiBORVRD T05OICovCisKKyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOworI2Vu ZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKC0y KTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKworICAgIGlmICh4bG9jYWwgJiYgdHR5ZmQgPCAwKQor ICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmICh4bG9jYWwpCisgICAgICB4ID0gaW9jdGwodHR5 ZmQsVElPQ01HRVQsJnkpOwkvKiBHZXQgbW9kZW0gc2lnbmFscy4gKi8KKyAgICBlbHNlCisgICAg ICB4ID0gaW9jdGwoMCxUSU9DTUdFVCwmeSk7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NN R0VUIGlvY3RsIiwiIix4KTsKKyAgICBpZiAoeCA8IDApIHsKKwlkZWJ1ZyhGMTAxLCJ0dGdtZG0g ZXJybm8iLCIiLGVycm5vKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ0 dGdtZG0gYml0cyIsIiIseSk7CisKKyAgICB6ID0gMDsJCQkJLyogSW5pdGlhbGl6ZSByZXR1cm4g dmFsdWUuICovCisjaWZkZWYgVElPQ01fQ1RTCisgICAgLyogQ2xlYXIgVG8gU2VuZCAqLworICAg IGlmICh5ICYgVElPQ01fQ1RTKSB6IHw9IEJNX0NUUzsKKyAgICBkZWJ1ZyhGMTAxLCJ0dGdtZG0g VElPQ01fQ1RTIGRlZmluZWQiLCIiLFRJT0NNX0NUUyk7IAorI2Vsc2UKKyAgICBkZWJ1ZyhGMTAw LCJ0dGdtZG0gVElPQ01fQ1RTIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRpZgorI2lmZGVmIFRJ T0NNX0RTUgorICAgIC8qIERhdGEgU2V0IFJlYWR5ICovCisgICAgaWYgKHkgJiBUSU9DTV9EU1Ip IHogfD0gQk1fRFNSOworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9DTV9EU1IgZGVmaW5lZCIs IiIsVElPQ01fRFNSKTsgCisjZWxzZQorICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9EU1Ig bm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmCisjaWZkZWYgVElPQ01fQ0FSCisgICAgLyogQ2Fy cmllciAqLworICAgIGlmICh5ICYgVElPQ01fQ0FSKSB6IHw9IEJNX0RDRDsKKyAgICBkZWJ1ZyhG MTAxLCJ0dGdtZG0gVElPQ01fQ0FSIGRlZmluZWQiLCIiLFRJT0NNX0NBUik7IAorI2Vsc2UKKyAg ICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gVElPQ01fQ0FSIG5vdCBkZWZpbmVkIiwiIiwwKTsKKyNlbmRp ZgorI2lmZGVmIFRJT0NNX1JORworICAgIC8qIFJpbmcgSW5kaWNhdGUgKi8KKyAgICBpZiAoeSAm IFRJT0NNX1JORykgeiB8PSBCTV9STkc7CisgICAgZGVidWcoRjEwMSwidHRnbWRtIFRJT0NNX1JO RyBkZWZpbmVkIiwiIixUSU9DTV9STkcpOyAKKyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRnbWRt IFRJT0NNX1JORyBub3QgZGVmaW5lZCIsIiIsMCk7CisjZW5kaWYKKyNpZmRlZiBUSU9DTV9EVFIK KyAgICAvKiBEYXRhIFRlcm1pbmFsIFJlYWR5ICovCisgICAgaWYgKHkgJiBUSU9DTV9EVFIpIHog fD0gQk1fRFRSOworICAgIGRlYnVnKEYxMDEsInR0Z21kbSBUSU9DTV9EVFIgZGVmaW5lZCIsIiIs VElPQ01fRFRSKTsgCisjZWxzZQorICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9EVFIgbm90 IGRlZmluZWQiLCIiLDApOworI2VuZGlmCisjaWZkZWYgVElPQ01fUlRTCisgICAgLyogUmVxdWVz dCBUbyBTZW5kICovCisgICAgaWYgKHkgJiBUSU9DTV9SVFMpIHogfD0gQk1fUlRTOworICAgIGRl YnVnKEYxMDEsInR0Z21kbSBUSU9DTV9SVFMgZGVmaW5lZCIsIiIsVElPQ01fUlRTKTsgCisjZWxz ZQorICAgIGRlYnVnKEYxMDAsInR0Z21kbSBUSU9DTV9SVFMgbm90IGRlZmluZWQiLCIiLDApOwor I2VuZGlmCisgICAgZ290c2lncyA9IDE7CisgICAgcmV0dXJuKHopOworCisjZWxzZSAvKiAhS19N RE1DVEwgY2F0Y2gtQWxsICovCisKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0gS19NRE1DVEwgbm90 IGRlZmluZWQiLCIiLDApOworI2lmZGVmIFRJT0NNR0VUCisgICAgZGVidWcoRjEwMCwidHRnbWRt IFRJT0NNR0VUIGRlZmluZWQiLCIiLDApOworI2Vsc2UKKyAgICBkZWJ1ZyhGMTAwLCJ0dGdtZG0g VElPQ01HRVQgbm90IGRlZmluZWQiLCIiLDApOworI2VuZGlmIC8qIFRJT0NNR0VUICovCisjaWZk ZWYgX1NWSUQzCisgICAgZGVidWcoRjEwMCwidHRnbWRtIF9TVklEMyBkZWZpbmVkIiwiIiwwKTsK KyNlbHNlCisgICAgZGVidWcoRjEwMCwidHRnbWRtIF9TVklEMyBub3QgZGVmaW5lZCIsIiIsMCk7 CisjZW5kaWYgLyogX1NWSUQzICovCisKKyNpZmRlZiBORVRDT05OCisgICAgaWYgKG5ldGNvbm4p IHsJCQkvKiBOZXR3b3JrIGNvbm5lY3Rpb24gKi8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAg IGlmIChpc3RuY29tcG9ydCgpKSB7CisJICAgIGdvdHNpZ3MgPSAxOworCSAgICByZXR1cm4odG5n bWRtKCkpOworCX0gZWxzZQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKwkgIHJldHVybigtMik7 CQkJLyogTm8gbW9kZW0gc2lnbmFscyAqLworICAgIH0KKyNlbmRpZiAvKiBORVRDT05OICovCisK KyNpZmRlZiBORVRDTUQKKyAgICBpZiAodHRwaXBlKSByZXR1cm4oLTIpOworI2VuZGlmIC8qIE5F VENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgIGlmICh0dHB0eSkgcmV0dXJuKC0yKTsKKyNlbmRp ZiAvKiBORVRQVFkgKi8KKworICAgIHJldHVybigtMyk7CQkJCS8qIFNvcnJ5LCBJIGRvbid0IGtu b3cgaG93Li4uICovCisKKyNlbmRpZiAvKiBLX01ETUNUTCAqLworI2VuZGlmIC8qIEhQVVggKi8K KyNlbmRpZiAvKiBRTlggKi8KK30KKworLyogIFAgUyBVIFMgUCBFIE4gRCAgLS0gIFB1dCB0aGlz IHByb2Nlc3MgaW4gdGhlIGJhY2tncm91bmQuICAqLworCisvKgorICBDYWxsIHdpdGggZmxhZyBu b256ZXJvIGlmIHN1c3BlbmRpbmcgaXMgYWxsb3dlZCwgemVybyBpZiBub3QgYWxsb3dlZC4KKyAg UmV0dXJucyAwIG9uIGFwcGFyZW50IHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKGZsYWcgd2FzIHpl cm8sIG9yCisgIGtpbGwoKSByZXR1cm5lZCBhbiBlcnJvciBjb2RlLgorKi8KK2ludAorcHN1c3Bl bmQoZmxhZykgaW50IGZsYWc7IHsKKworI2lmZGVmIFJUVQorICAgIGV4dGVybiBpbnQgcnR1X2J1 ZzsKKyNlbmRpZiAvKiBSVFUgKi8KKworICAgIGlmIChmbGFnID09IDApIHJldHVybigtMSk7CisK KyNpZmRlZiBOT0pDCisgICAgcmV0dXJuKC0xKTsKKyNlbHNlCisjaWZkZWYgU0lHVFNUUAorLyoK KyAgVGhlIGJpZyBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgam9iIGNvbnRyb2wgaXMgKnJlYWxs eSogc3VwcG9ydGVkLgorICBUaGVyZSdzIG5vIHdheSBLZXJtaXQgY2FuIGtub3cgZm9yIHN1cmUu ICBUaGUgZmFjdCB0aGF0IFNJR1RTVFAgaXMKKyAgZGVmaW5lZCBkb2VzIG5vdCBndWFyYW50ZWUg dGhlIFVuaXgga2VybmVsIHN1cHBvcnRzIGl0LCBhbmQgdGhlIGZhY3QKKyAgdGhhdCB0aGUgVW5p eCBrZXJuZWwgc3VwcG9ydHMgaXQgZG9lc24ndCBndWFyYW50ZWUgdGhhdCB0aGUgdXNlcidzCisg IHNoZWxsIChvciBvdGhlciBwcm9jZXNzIHRoYXQgaW52b2tlZCBLZXJtaXQpIHN1cHBvcnRzIGl0 LgorKi8KKyNpZmRlZiBSVFUKKyAgICBydHVfYnVnID0gMTsKKyNlbmRpZiAvKiBSVFUgKi8KKyAg ICBpZiAoa2lsbCgwLFNJR1NUT1ApIDwgMAorI2lmZGVmIE1JUFMKKy8qIExldCdzIHRyeSB0aGlz IGZvciBNSVBTIHRvby4gKi8KKwkmJiBraWxsKGdldHBpZCgpLFNJR1NUT1ApIDwgMAorI2VuZGlm IC8qIE1JUFMgKi8KKwkpIHsJCQkJLyogSWYgam9iIGNvbnRyb2wsIHN1c3BlbmQgdGhlIGpvYiAq LworCXBlcnJvcigic3VzcGVuZCIpOworCWRlYnVnKEYxMDEsInBzdXNwZW5kIGVycm9yIiwiIixl cnJubyk7CisJcmV0dXJuKC0xKTsKKyAgICB9CisgICAgZGVidWcoRjEwMCwicHN1c3BlbmQgb2si LCIiLDApOworICAgIHJldHVybigwKTsKKyNlbHNlCisgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAv KiBTSUdUU1RQICovCisjZW5kaWYgLyogTk9KQyAqLworfQorCisvKgorICBzZXR1aWQgcGFja2Fn ZSwgYnkgS3Jpc3RvZmZlciBFcmlrc3Nvbiwgd2l0aCBjb250cmlidXRpb25zIGZyb20gRGVhbgor ICBMb25nIGFuZCBmZGMuCisqLworCisvKiBUaGUgZm9sbG93aW5nIGlzIGZvciBTQ08gd2hlbiBD S19BTlNJTElCUyBpcyBkZWZpbmVkLi4uICovCisjaWZkZWYgTV9VTklYCisjaWZkZWYgQ0tfQU5T SUxJQlMKKyNpZm5kZWYgTk9HRVRJRF9QUk9UT1MKKyNkZWZpbmUgTk9HRVRJRF9QUk9UT1MKKyNl bmRpZiAvKiBOT0dFVElEX1BST1RPUyAqLworI2VuZGlmIC8qIENLX0FOU0lMSUJTICovCisjZW5k aWYgLyogTV9VTklYICovCisKKyNpZm5kZWYgX1BPU0lYX1NPVVJDRQorI2lmbmRlZiBTVU5PUzQK KyNpZm5kZWYgTkVYVAorI2lmbmRlZiBQUzJBSVgxMAorI2lmbmRlZiBzZXF1ZW50CisjaWZuZGVm IEhQVVg5CisjaWZuZGVmIEhQVVgxMAorI2lmbmRlZiBDT0hFUkVOVAorI2lmbmRlZiBOT0dFVElE X1BST1RPUworX1BST1RPVFlQKCBVSURfVCBnZXR1aWQsICh2b2lkKSApOworX1BST1RPVFlQKCBV SURfVCBnZXRldWlkLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVUlEX1QgZ2V0cmV1aWQsICh2b2lk KSApOworX1BST1RPVFlQKCBVSURfVCBnZXRnaWQsICh2b2lkKSApOworX1BST1RPVFlQKCBVSURf VCBnZXRlZ2lkLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVUlEX1QgZ2V0cmVnaWQsICh2b2lkKSAp OworI2VuZGlmIC8qIE5PR0VUSURfUFJPVE9TICovCisjZWxzZQorX1BST1RPVFlQKCBVSURfVCBn ZXRyZXVpZCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFVJRF9UIGdldHJlZ2lkLCAodm9pZCkgKTsK KyNlbmRpZiAvKiBDT0hFUkVOVCAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIEhQ VVg5ICovCisjZW5kaWYgLyogc2VxdWVudCAqLworI2VuZGlmIC8qIFBTMkFJWDEwICovCisjZW5k aWYgLyogTkVYVCAqLworI2VuZGlmIC8qIFNVTk9TNCAqLworI2VuZGlmIC8qIF9QT1NJWF9TT1VS Q0UgKi8KKworLyoKK1N1YmplY3Q6IFNldC11c2VyLWlkCitUbzogZmRjQHdhdHN1bi5jYy5jb2x1 bWJpYS5lZHUgKEZyYW5rIGRhIENydXopCitEYXRlOiBTYXQsIDIxIEFwciA5MCA0OjQ4OjI1IE1F UworRnJvbTogS3Jpc3RvZmZlciBFcmlrc3NvbiA8c2tlQHBrbWFiLnNlPgorCitUaGlzIGlzIGEg c2V0IG9mIGZ1bmN0aW9ucyB0byBiZSB1c2VkIGluIHByb2dyYW1zIHRoYXQgbWF5IGJlIHJ1biBz ZXQtdXNlci1pZAorYW5kL29yIHNldC1ncm91cC1pZC4gVGhleSBoYW5kbGUgYm90aCB0aGUgY2Fz ZSB3aGVyZSB0aGUgcHJvZ3JhbSBpcyBub3QgcnVuCit3aXRoIHN1Y2ggcHJpdmlsZWdlcyAobm90 aGluZyBzcGVjaWFsIGhhcHBlbnMgdGhlbiksIGFuZCB0aGUgY2FzZSB3aGVyZSBvbmUKK29yIGJv dGggb2YgdGhlc2Ugc2V0LWlkIG1vZGVzIGFyZSB1c2VkLiAgVGhlIHByb2dyYW0gaXMgbWFkZSB0 byBydW4gd2l0aCB0aGUKK3VzZXIncyByZWFsIHVzZXIgYW5kIGdyb3VwIGlkcyBtb3N0IG9mIHRo ZSB0aW1lLCBleGNlcHQgZm9yIHdoZW4gbW9yZQorcHJpdmlsZWdlcyBhcmUgbmVlZGVkLiAgRG9u J3Qgc2V0LXVzZXItaWQgdG8gInJvb3QiLgorCitUaGlzIHdvcmtzIG9uIFN5c3RlbSBWIGFuZCBQ T1NJWC4gIEluIEJTRCwgaXQgZGVwZW5kcyBvbiB0aGUKKyJzYXZlZC1zZXQtdXNlci1pZCIgZmVh dHVyZS4KKyovCisKKyNkZWZpbmUgVUlEX1JPT1QgMAkJCS8qIFJvb3QgdXNlciBhbmQgZ3JvdXAg aWRzICovCisjZGVmaW5lIEdJRF9ST09UIDAKKworLyoKKyAgVGhlIGZvbGxvd2luZyBjb2RlIGRl ZmluZXMgdGhlIHN5bWJvbCBTRVRFVUlEIGZvciBVTklYIHN5c3RlbXMgYmFzZWQKKyAgb24gQlNE NC40IChlaXRoZXIgLUVuY3VtYmVyZWQgb3IgLUxpdGUpLiAgVGhpcyBwcm9ncmFtIHdpbGwgdGhl biB1c2UKKyAgc2V0ZXVpZCgpIGFuZCBzZXRlZ2lkKCkgaW5zdGVhZCBvZiBzZXR1aWQoKSBhbmQg c2V0Z2lkKCksIHdoaWNoIHN0aWxsCisgIGRvbid0IGFsbG93IGFyYml0cmFyeSBzd2l0Y2hpbmcu ICBJdCBhbHNvIGF2b2lkcyBzZXRyZXVpZCgpIGFuZAorICBzZXRyZWdpZCgpLCB3aGljaCBhcmUg aW5jbHVkZWQgaW4gQlNENC40IGZvciBjb21wYXRpYmlsaXR5IG9ubHksIGFyZQorICBpbnNlY3Vy ZSwgYW5kIHByaW50IHdhcm5pbmdzIHRvIHN0ZGVyciB1bmRlciBhdCBsZWFzdCBvbmUgc3lzdGVt IChOZXRCU0QKKyAgMS4wKS4gIE5vdGUgdGhhdCBQT1NJWCBzeXN0ZW1zIHNob3VsZCBzdGlsbCB1 c2Ugc2V0dWlkKCkgYW5kIHNldGdpZCgpOworICB0aGUgc2V0ZXVpZCgpIGFuZCBzZXRlZ2lkKCkg ZnVuY3Rpb25zIGFyZSBCU0Q0LjQgZXh0ZW5zaW9ucyB0byB0aGUKKyAgUE9TSVggbW9kZWwuICBN aWtlIExvbmcgPG1pa2UubG9uZ0BhbmFsb2cuY29tPiwgOC85NC4KKyovCisjaWZkZWYgQlNENDQK KyNkZWZpbmUgU0VURVVJRAorI2VuZGlmIC8qIEJTRDQ0ICovCisKKy8qCisgIFRoZSBmb2xsb3dp bmcgY29uc3RydWN0aW9uIGF1dG9tYXRpY2FsbHkgZGVmaW5lcyB0aGUgc3ltYm9sIFNFVFJFVUlE IGZvcgorICBVTklYIHZlcnNpb25zIGJhc2VkIG9uIEJlcmtlbGV5IFVuaXggNC4yIGFuZCA0LjMu ICBJZiB0aGlzIHN5bWJvbCBpcworICBkZWZpbmVkLCB0aGVuIHRoaXMgcHJvZ3JhbSB3aWxsIHVz ZSBnZXRyZXVpZCgpIGFuZCBnZXRyZWdpZCgpIGNhbGxzIGluCisgIHByZWZlcmVuY2UgdG8gZ2V0 dWlkKCkgYW5kIGdldGdpZCgpLCB3aGljaCBpbiBCZXJrZWxleS1iYXNlZCBVbml4ZXMgZG8KKyAg bm90IGFsbG93IGFyYml0cmFyeSBzd2l0Y2hpbmcgYmFjayBhbmQgZm9ydGggb2YgcmVhbCAmIGVm ZmVjdGl2ZSB1aWQuCisgIFRoaXMgY29uc3RydWN0aW9uIGFsc28gYWxsb3dzIC1EU0VUUkVVSUQg dG8gYmUgcHV0IG9uIHRoZSBjYyBjb21tYW5kIGxpbmUKKyAgZm9yIGFueSBzeXN0ZW0gdGhhdCBo YXMgYW5kIHdhbnRzIHRvIHVzZSBzZXRyZVt1Z11pZCgpLiAgSXQgYWxzbyBwcmV2ZW50cworICBh dXRvbWF0aWMgZGVmaW5pdGlvbiBvZiBTRVRSRVVJRCBpZiAtRE5PU0VUUkVVIGlzIGluY2x1ZGVk IG9uIHRoZSBjYworICBjb21tYW5kIGxpbmUgKG9yIG90aGVyd2lzZSBkZWZpbmVkKS4KKyovCisj aWZkZWYgRlQxOAkJCQkvKiBOb25lIG9mIHRoaXMgZm9yIEZvcnR1bmUuICovCisjZGVmaW5lIE5P U0VUUkVVCisjZW5kaWYgLyogRlQxOCAqLworCisjaWZkZWYgQU5ZQlNECisjaWZuZGVmIEJTRDI5 CisjaWZuZGVmIEJTRDQxCisjaWZuZGVmIFNFVFJFVUlECisjaWZuZGVmIE5PU0VUUkVVCisjaWZu ZGVmIFNFVEVVSUQKKyNkZWZpbmUgU0VUUkVVSUQKKyNlbmRpZiAvKiBTRVRFVUlEICovCisjZW5k aWYgLyogTk9TRVRSRVUgKi8KKyNlbmRpZiAvKiBTRVRSRVVJRCAqLworI2VuZGlmIC8qICFCU0Q0 MSAqLworI2VuZGlmIC8qICFCU0QyOSAqLworI2VuZGlmIC8qIEFOWUJTRCAqLworCisvKiBWYXJp YWJsZXMgZm9yIHVzZXIgYW5kIGdyb3VwIElEcy4gKi8KKworc3RhdGljIFVJRF9UIHJlYWx1aWQg PSAoVUlEX1QpIC0xLCBwcml2dWlkID0gKFVJRF9UKSAtMTsKK3N0YXRpYyBHSURfVCByZWFsZ2lk ID0gKEdJRF9UKSAtMSwgcHJpdmdpZCA9IChHSURfVCkgLTE7CisKKworLyogUCBSIEkgViBfIEkg TiBJICAtLSAgSW5pdGlhbGl6ZSBwcml2aWxlZ2VzIHBhY2thZ2UgICovCisKKy8qIENhbGxlZCBh cyBlYXJseSBhcyBwb3NzaWJsZSBpbiBhIHNldC11aWQgb3Igc2V0LWdpZCBwcm9ncmFtIHRvIHN0 b3JlIHRoZQorICogc2V0LXRvIHVpZCBhbmQvb3IgZ2lkIGFuZCBzdGVwIGRvd24gdG8gdGhlIHVz ZXJzIHJlYWwgdWlkIGFuZCBnaWQuIFRoZQorICogc3RvcmVkIGlkJ3MgY2FuIGJlIHRlbXBvcmFy aWx5IHJlc3RvcmVkIChhbGxvd2VkIGluIFN5c3RlbSBWKSBkdXJpbmcKKyAqIG9wZXJhdGlvbnMg dGhhdCByZXF1aXJlIHRoZSBwcml2aWxlZ2UuICBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgcHJvZ3Jh bQorICogc2hvdWxkIGV4ZWN1dGUgaW4gdW5wcml2aWxpZ2VkIHN0YXRlLCB0byBub3QgaW1wb3Nl IGFueSBzZWN1cml0eSB0aHJlYXQuCisgKgorICogTm90ZTogRG9uJ3QgZm9yZ2V0IHRoYXQgYWNj ZXNzKCkgYWx3YXlzIHVzZXMgdGhlIHJlYWwgaWQ6cyB0byBkZXRlcm1pbmUKKyAqIGZpbGUgYWNj ZXNzLCBldmVuIHdpdGggcHJpdmlsZWdlcyByZXN0b3JlZC4KKyAqCisgKiBSZXR1cm5zIGFuIGVy cm9yIG1hc2ssIHdpdGggZXJyb3IgdmFsdWVzIG9yOmVkIHRvZ2V0aGVyOgorICogICAxIGlmIHNl dHVpZCgpIGZhaWxzLAorICogICAyIGlmIHNldGdpZCgpIGZhaWxzLCBhbmQKKyAqICAgNCBpZiB0 aGUgcHJvZ3JhbSBpcyBzZXQtdXNlci1pZCB0byAicm9vdCIsIHdoaWNoIGNhbid0IGJlIGhhbmRs ZWQuCisgKgorICogT25seSB0aGUgcmV0dXJuIHZhbHVlIDAgaW5kaWNhdGVzIHJlYWwgc3VjY2Vz cy4gSW4gY2FzZSBvZiBmYWlsdXJlLAorICogdGhvc2UgcHJpdmlsZWdlcyB0aGF0IGNvdWxkIGJl IHJlZHVjZWQgaGF2ZSBiZWVuLCBhdCBsZWFzdCwgYnV0IHRoZQorICogcHJvZ3JhbSBzaG91bGQg YmUgYWJvcnRlZCBub25lLXRoZS1sZXNzLgorICoKKyAqIEFsc28gbm90ZSB0aGF0IHRoZXNlIGZ1 bmN0aW9ucyBkbyBub3QgZXhwZWN0IHRoZSB1aWQgb3IgZ2lkIHRvIGNoYW5nZQorICogd2l0aG91 dCB0aGVpciBrbm93aW5nLiBJdCBtYXkgd29yayBpZiBpdCBpcyBvbmx5IGRvbmUgdGVtcG9yYXJp bHksIGJ1dAorICogeW91J3JlIG9uIHlvdXIgb3duLgorICovCitpbnQKK3ByaXZfaW5pKCkgewor ICAgIGludCBlcnIgPSAwOworCisjaWZuZGVmIEhBVkVfTE9DS0RFVgorCisgICAgLyogU2F2ZSBy ZWFsIElEOnMuICovCisgICAgcmVhbHVpZCA9IGdldHVpZCgpOworICAgIHJlYWxnaWQgPSBnZXRn aWQoKTsKKworICAgIC8qIFNhdmUgY3VycmVudCBlZmZlY3RpdmUgSUQ6cywgdGhvc2Ugc2V0IHRv IGF0IHByb2dyYW0gZXhlYy4gKi8KKyAgICBwcml2dWlkID0gZ2V0ZXVpZCgpOworICAgIHByaXZn aWQgPSBnZXRlZ2lkKCk7CisKKyAgICAvKiBJZiBydW5uaW5nIHNldC11aWQsIGdvIGRvd24gdG8g cmVhbCB1aWQsIG90aGVyd2lzZSByZW1lbWJlciB0aGF0CisgICAgICogbm8gcHJpdmlsZWdlZCB1 aWQgaXMgYXZhaWxhYmxlLgorICAgICAqCisgICAgICogRXhjZXB0aW9uczoKKyAgICAgKgorICAg ICAqIDEpIElmIHRoZSByZWFsIHVpZCBpcyBhbHJlYWR5ICJyb290IiBhbmQgdGhlIHNldC11aWQg dWlkICh0aGUKKyAgICAgKiBpbml0aWFsIGVmZmVjdGl2ZSB1aWQpIGlzIG5vdCAicm9vdCIsIHRo ZW4gd2Ugd291bGQgaGF2ZSB0cm91YmxlCisgICAgICogaWYgd2Ugd2VudCAiZG93biIgdG8gInJv b3QiIGhlcmUsIGFuZCB0aGVuIHRlbXBvcmFyaWx5IGJhY2sgdG8gdGhlCisgICAgICogc2V0LXVp ZCB1aWQgKG5vdCAicm9vdCIpIGFuZCB0aGVuIGFnYWluIHRyaWVkIHRvIGJlY29tZSAicm9vdCIu IEkKKyAgICAgKiB0aGluayB0aGUgInNhdmVkIHNldC11aWQiIGlzIGxvc3Qgd2hlbiBjaGFuZ2lu ZyB1aWQgZnJvbSBlZmZlY3RpdmUKKyAgICAgKiB1aWQgInJvb3QiLCB3aGljaCBjaGFuZ2VzIGFs bCB1aWQsIG5vdCBvbmx5IHRoZSBlZmZlY3RpdmUgdWlkLiBCdXQKKyAgICAgKiBpbiB0aGlzIHNp dHVhdGlvbiwgd2UgY2FuIHNpbXBseSBnbyB0byAicm9vdCIgYW5kIHN0YXkgdGhlcmUgYWxsCisg ICAgICogdGhlIHRpbWUuIFRoYXQgc2hvdWxkIGdpdmUgc3VmZmljaWVudCBwcml2aWxlZ2UgKHVu ZGVyc3RhdGVtZW50ISksCisgICAgICogYW5kIGdpdmUgdGhlIHJpZ2h0IHVpZHMgZm9yIHN1YnBy b2Nlc3Nlcy4KKyAgICAgKgorICAgICAqIDIpIElmIHRoZSBzZXQtdWlkICh0aGUgaW5pdGlhbCBl ZmZlY3RpdmUgdWlkKSBpcyAicm9vdCIsIGFuZCB3ZQorICAgICAqIGNoYW5nZSB1aWQgdG8gdGhl IHJlYWwgdWlkLCB3ZSBjYW4ndCBjaGFuZ2UgaXQgYmFjayB0byAicm9vdCIgd2hlbgorICAgICAq IHdlIG5lZWQgdGhlIHByaXZpbGVnZSwgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBpbiAxKS4gVGh1 cywgd2UgY2FuJ3QKKyAgICAgKiBoYW5kbGUgcHJvZ3JhbXMgdGhhdCBhcmUgc2V0LXVzZXItaWQg dG8gInJvb3QiIGF0IGFsbC4gVGhlIHByb2dyYW0KKyAgICAgKiBzaG91bGQgYmUgc3RvcHBlZC4g IFVzZSBzb21lIG90aGVyIHVpZC4gICJyb290IiBpcyBwcm9iYWJseSB0b28KKyAgICAgKiBwcml2 aWxlZ2VkIGZvciBzdWNoIHRoaW5ncywgYW55d2F5LiAoVGhlIHVpZCBpcyByZXZlcnRlZCB0byB0 aGUKKyAgICAgKiByZWFsIHVpZCB1bnRpbCB0ZXJtaW5hdGlvbi4pCisgICAgICoKKyAgICAgKiBU aGVzZSB0d28gZXhjZXB0aW9ucyBoYXZlIHRoZSBlZmZlY3QgdGhhdCB0aGUgInJvb3QiIHVpZCB3 aWxsIG5ldmVyCisgICAgICogYmUgb25lIG9mIHRoZSB0d28gdWlkcyB0aGF0IGFyZSBiZWluZyBz d2l0Y2hlZCBiZXR3ZWVuLCB3aGljaCBhbHNvCisgICAgICogbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0 byBjaGVjayBmb3Igc3VjaCBjYXNlcyBpbiB0aGUgc3dpdGNoaW5nCisgICAgICogZnVuY3Rpb25z LgorICAgICAqCisgICAgICogTm90ZSB0aGF0IGV4Y2VwdGlvbiAxKSBpcyBoYW5kbGVkIGJ5IHRo ZXNlIHJvdXRpbmVzIChieSBjb25zdGFudGx5CisgICAgICogcnVubmluZyB3aXRoIHVpZCAicm9v dCIsIHdoaWxlIGV4Y2VwdGlvbiAyKSBpcyBhIHNlcmlvdXMgZXJyb3IsIGFuZAorICAgICAqIGlz IG5vdCBwcm92aWRlZCBmb3IgYXQgYWxsIGluIHRoZSBzd2l0Y2hpbmcgZnVuY3Rpb25zLgorICAg ICAqLworICAgIGlmIChyZWFsdWlkID09IHByaXZ1aWQpCisJcHJpdnVpZCA9IChVSURfVCkgLTE7 CQkvKiBOb3QgcnVubmluZyBzZXQtdXNlci1pZC4gKi8KKworICAgIC8qIElmIHJ1bm5pbmcgc2V0 LWdpZCwgZ28gZG93biB0byByZWFsIGdpZCwgb3RoZXJ3aXNlIHJlbWVtYmVyIHRoYXQKKyAgICAg KiBubyBwcml2aWxlZ2VkIGdpZCBpcyBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKiBUaGVyZSBh cmUgbm8gZXhjZXB0aW9uIGxpa2UgdGhlcmUgaXMgZm9yIHRoZSB1c2VyIGlkLCBzaW5jZSB0aGVy ZQorICAgICAqIGlzIG5vIGdyb3VwIGlkIHRoYXQgaXMgcHJpdmlsZWdlZCBpbiB0aGUgbWFubmVy IG9mIHVpZCAicm9vdCIuCisgICAgICogVGhlcmUgY291bGQgYmUgZXF1aXZhbGVudCBwcm9ibGVt cyBmb3IgZ3JvdXAgY2hhbmdpbmcgaWYgdGhlCisgICAgICogcHJvZ3JhbSBzb21ldGltZXMgcmFu IHdpdGggdWlkICJyb290IiBhbmQgc29tZXRpbWVzIG5vdCwgYnV0CisgICAgICogdGhhdCBpcyBh bHJlYWR5IGF2b2lkZWQgYXMgZXhwbGFpbmVkIGFib3ZlLgorICAgICAqCisgICAgICogVGh1cyB3 ZSBjYW4gZXhwZWN0IGFsd2F5cyB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUgInNhdmVkIHNl dC0KKyAgICAgKiBnaWQiIHdoZW4gd2Ugd2FudCwgYW5kIGJhY2sgdG8gdGhlIHJlYWwgZ2lkIGFn YWluLiBZb3UgbWF5IGFsc28KKyAgICAgKiBkcmF3IHRoZSBjb25jbHVzaW9uIHRoYXQgc2V0LWdp ZCBwcm92aWRlcyBmb3IgZmV3ZXIgaGFzc2xlcyB0aGFuCisgICAgICogc2V0LXVpZC4KKyAgICAg Ki8KKworI2lmZGVmIFNVSURERUJVRworICAgIGZwcmludGYoc3RkZXJyLCJVSURfUk9PVD0lZFxu IixVSURfUk9PVCk7CisgICAgZnByaW50ZihzdGRlcnIsInJlYWx1aWQ9JWRcbiIscmVhbHVpZCk7 CisgICAgZnByaW50ZihzdGRlcnIsInByaXZ1aWQ9JWRcbiIscHJpdnVpZCk7CisjZW5kaWYgLyog U1VJRERFQlVHICovCisKKyAgICBpZiAocmVhbGdpZCA9PSBwcml2Z2lkKQkJLyogSWYgbm90IHJ1 bm5pbmcgc2V0LXVzZXItaWQsICovCisgICAgICBwcml2Z2lkID0gKEdJRF9UKSAtMTsJCS8qICBy ZW1lbWJlciBpdCB0aGlzIHdheS4gKi8KKworICAgIGVyciA9IHByaXZfb2ZmKCk7CQkJLyogVHVy biBvZmYgc2V0dWlkIHByaXZpbGVnZS4gKi8KKworICAgIGlmIChwcml2dWlkID09IFVJRF9ST09U KQkJLyogSWYgc2V0dWlkIHRvIHJvb3QsICovCisgICAgICBlcnIgfD0gNDsJCQkJLyogcmV0dXJu IHRoaXMgZXJyb3IuICovCisKKyAgICBpZiAocmVhbHVpZCA9PSBVSURfUk9PVCkgewkJLyogSWYg cmVhbCBpZCBpcyByb290LCAqLworCXByaXZ1aWQgPSAoVUlEX1QpIC0xOwkJLyogc3RheSByb290 IGF0IGFsbCB0aW1lcy4gKi8KKyNpZmRlZiBBVFQ3MzAwCisJLyogSWYgS2VybWl0IGluc3RhbGxl ZCBTVUlEIHV1Y3AgYW5kIHVzZXIgaXMgcnVubmluZyBhcyByb290ICovCisJZXJyICY9IH4xOwkJ CS8qIFN5c3RlbSBWIFIwIGRvZXMgbm90IHNhdmUgVUlEICovCisjZW5kaWYgLyogQVRUNzMwMCAq LworICAgIH0KKyNlbmRpZiAvKiBIQVZFX0xPQ0tERVYgKi8KKyAgICByZXR1cm4oZXJyKTsKK30K KworCisvKiBNYWNyb3MgZm9yIGhpZGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gVUlEL0dJRCBzZXR0 aW5nIGJldHdlZW4gdmFyaW91cyBVbml4CisgKiBzeXN0ZW1zLiBUaGVzZSBtYWNyb3Mgc2hvdWxk IGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBib3RoIHRoZSBwcml2aWxlZ2VkIElECisgKiBhbmQgdGhl IG5vbi1wcml2aWxlZ2VkIElELiBUaGUgb25lIGluIHRoZSBzZWNvbmQgYXJndW1lbnQsIHdpbGwg YmVjb21lIHRoZQorICogZWZmZWN0aXZlIElELiBUaGUgb25lIGluIHRoZSBmaXJzdCBhcmd1bWVu dCB3aWxsIGJlIHJldGFpbmVkIGZvciBsYXRlcgorICogcmV0cmlldmFsLgorICovCisjaWZkZWYg U0VUUkVVSUQKKyNpZmRlZiBTQVZFRFVJRAorLyogT24gQlNEIHN5c3RlbXMgd2l0aCB0aGUgc2F2 ZWQtVUlEIGZlYXR1cmUsIHdlIGp1c3QganVnZ2xlIHRoZSBlZmZlY3RpdmUKKyAqIFVJRCBiYWNr IGFuZCBmb3J0aCwgYW5kIGxlYXZlIHRoZSByZWFsIFVJRCBhdCBpdHMgdHJ1ZSB2YWx1ZS4gIFRo ZSBrZXJuZWwKKyAqIGFsbG93cyBzd2l0Y2hpbmcgdG8gYm90aCB0aGUgY3VycmVudCByZWFsIFVJ RCwgdGhlIGVmZmVjdGl2ZSBVSUQsIGFuZCB0aGUKKyAqIFVJRCB3aGljaCB0aGUgcHJvZ3JhbSBp cyBzZXQtVUlEIHRvLiAgVGhlIHNhdmVkIHNldC1VSUQgYWx3YXlzIGhvbGRzIHRoZQorICogcHJp dmlsZWdlZCBVSUQgZm9yIHVzLCBhbmQgdGhlIHJlYWwgVUlEIHdpbGwgYWx3YXlzIGJlIHRoZSBu b24tcHJpdmlsZWdlZCwKKyAqIGFuZCB3ZSBjYW4gZnJlZWx5IGNob29zZSBvbmUgb2YgdGhlbSBm b3IgdGhlIGVmZmVjdGl2ZSBVSUQgYXQgYW55IHRpbWUuCisgKi8KKyNkZWZpbmUgc3dpdGNodWlk KGhpZGRlbixhY3RpdmUpIHNldHJldWlkKCAoVUlEX1QpIC0xLCBhY3RpdmUpCisjZGVmaW5lIHN3 aXRjaGdpZChoaWRkZW4sYWN0aXZlKSBzZXRyZWdpZCggKEdJRF9UKSAtMSwgYWN0aXZlKQorCisj ZWxzZSAgIC8qIFNFVFJFVUlELCFTQVZFRFVJRCAqLworCisvKiBPbiBzeXN0ZW1zIHdpdGggc2V0 cmVYaWQoKSBidXQgd2l0aG91dCB0aGUgc2F2ZWQtVUlEIGZlYXR1cmUsIG5vdGFibHkKKyAqIEJT RCA0LjIsIHdlIHN3YXAgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSBVSURzIGVhY2ggdGltZS4gIEl0 J3MKKyAqIHRoZSBlZmZlY3RpdmUgVUlEIHRoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4sIGJ1dCB3 ZSBoYXZlIHRvIHJldGFpbiB0aGUKKyAqIHVudXNlZCBVSUQgc29tZXdoZXJlIHRvIGVuYWJsZSB1 cyB0byByZXN0b3JlIGl0IGxhdGVyLCBhbmQgd2UgZG8gdGhpcworICogaW4gdGhlIHJlYWwgVUlE LiAgVGhlIGtlcm5lbCBvbmx5IGFsbG93cyBzd2l0Y2hpbmcgdG8gZWl0aGVyIHRoZSBjdXJyZW50 CisgKiByZWFsIG9yIHRoZSBlZmZlY3RpdmUgVUlELCB1bmxlc3MgeW91J3JlICJyb290Ii4KKyAq LworI2RlZmluZSBzd2l0Y2h1aWQoaGlkZGVuLGFjdGl2ZSkJc2V0cmV1aWQoaGlkZGVuLGFjdGl2 ZSkKKyNkZWZpbmUgc3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpCXNldHJlZ2lkKGhpZGRlbixhY3Rp dmUpCisjZW5kaWYKKworI2Vsc2UgLyogIVNFVFJFVUlELCAhU0FWRURVSUQgKi8KKworI2lmZGVm IFNFVEVVSUQKKy8qCisgIEJTRCA0LjQgd29ya3Mgc2ltaWxhcmx5IHRvIFN5c3RlbSBWIGFuZCBQ T1NJWCAoc2VlIGJlbG93KSwgYnV0IHVzZXMKKyAgc2V0ZVhpZCgpIGluc3RlYWQgb2Ygc2V0WGlk KCkgdG8gY2hhbmdlIGVmZmVjdGl2ZSBJRHMuICBJbiBhZGRpdGlvbiwgdGhlCisgIHNldGVYaWQo KSBmdW5jdGlvbnMgd29yayB0aGUgc2FtZSBmb3IgInJvb3QiIGFzIGZvciBvdGhlciB1c2Vycy4K KyovCisjZGVmaW5lIHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKQlzZXRldWlkKGFjdGl2ZSkKKyNk ZWZpbmUgc3dpdGNoZ2lkKGhpZGRlbixhY3RpdmUpCXNldGVnaWQoYWN0aXZlKQorCisjZWxzZSAv KiAhU0VURVVJRCAqLworCisvKiBPbiBTeXN0ZW0gViBhbmQgUE9TSVgsIHRoZSBvbmx5IHRoaW5n IHdlIGNhbiBjaGFuZ2UgaXMgdGhlIGVmZmVjdGl2ZSBVSUQKKyAqICh1bmxlc3MgdGhlIGN1cnJl bnQgZWZmZWN0aXZlIFVJRCBpcyAicm9vdCIsIGJ1dCBpbml0c3VpZCgpIGF2b2lkcyB0aGF0IGZv cgorICogdXMpLiAgVGhlIGtlcm5lbCBhbGxvd3Mgc3dpdGNoaW5nIHRvIHRoZSBjdXJyZW50IHJl YWwgVUlEIG9yIHRvIHRoZSBzYXZlZAorICogc2V0LVVJRC4gIFRoZXNlIGFyZSBhbHdheXMgc2V0 IHRvIHRoZSBub24tcHJpdmlsZWdlZCBVSUQgYW5kIHRoZSBwcml2aWxlZ2VkCisgKiBVSUQsIHJl c3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgY2hhbmdlIHRoZSBlZmZlY3RpdmUgVUlELiAgVGhpcyBi cmVha3MgaWYKKyAqIHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBVSUQgaXMgInJvb3QiLCB0aG91Z2gs IGJlY2F1c2UgZm9yICJyb290IiBzZXR1aWQvZ2lkCisgKiBiZWNvbWVzIG1vcmUgcG93ZXJmdWws IHdoaWNoIGlzIHdoeSBpbml0c3VpZCgpIHRyZWF0cyAicm9vdCIgc3BlY2lhbGx5LgorICogTm90 ZTogVGhhdCBzcGVjaWFsIHRyZWF0bWVudCBtYXliZSBjb3VsZCBiZSBpZ25vcmVkIGZvciBCU0Q/ ICBOb3RlOiBGb3IKKyAqIHN5c3RlbXMgdGhhdCBkb24ndCBmaXQgYW55IG9mIHRoZXNlIGZvdXIg Y2FzZXMsIHdlIHNpbXBseSBjYW4ndCBzdXBwb3J0CisgKiBzZXQtVUlELgorICovCisjZGVmaW5l IHN3aXRjaHVpZChoaWRkZW4sYWN0aXZlKQlzZXR1aWQoYWN0aXZlKQorI2RlZmluZSBzd2l0Y2hn aWQoaGlkZGVuLGFjdGl2ZSkJc2V0Z2lkKGFjdGl2ZSkKKworI2VuZGlmIC8qIFNFVEVVSUQgKi8K KyNlbmRpZiAvKiBTRVRSRVVJRCAqLworCisKKy8qIFAgUiBJIFYgXyBPIE4gIC0tICBUdXJuIG9u IHRoZSBzZXR1aWQgYW5kL29yIHNldGdpZCAqLworCisvKiBHbyB0byB0aGUgcHJpdmlsZWdlZCB1 aWQgKGdpZCkgdGhhdCB0aGUgcHJvZ3JhbSBpcyBzZXQtdXNlci1pZAorICogKHNldC1ncm91cC1p ZCkgdG8sIHVubGVzcyB0aGUgcHJvZ3JhbSBpcyBydW5uaW5nIHVucHJpdmlsZWdlZC4KKyAqIElm IHNldHVpZCgpIGZhaWxzLCByZXR1cm4gdmFsdWUgd2lsbCBiZSAxLiBJZiBnZXR1aWQoKSBmYWls cyBpdAorICogd2lsbCBiZSAyLiAgUmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGZpcnN0IGZhaWx1 cmUsIGFuZCB0aGUgZnVuY3Rpb24KKyAqIHRyaWVzIHRvIHJlc3RvcmUgYW55IHBhcnRpYWwgd29y ayBkb25lLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCisgKiBHcm91cCBpZCBpcyBjaGFuZ2VkIGZp cnN0LCBzaW5jZSBpdCBpcyBsZXNzIHNlcmlvdXMgdGhhbiB1c2VyIGlkLgorICovCitpbnQKK3By aXZfb24oKSB7CisjaWZuZGVmIEhBVkVfTE9DS0RFVgorICAgIGlmIChwcml2Z2lkICE9IChHSURf VCkgLTEpCisgICAgICBpZiAoc3dpdGNoZ2lkKHJlYWxnaWQscHJpdmdpZCkpCisgICAgICAgIHJl dHVybigyKTsKKworICAgIGlmIChwcml2dWlkICE9IChVSURfVCkgLTEpCisgICAgICBpZiAoc3dp dGNodWlkKHJlYWx1aWQscHJpdnVpZCkpIHsKKwkgIGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEp CisJICAgIHN3aXRjaGdpZChwcml2Z2lkLHJlYWxnaWQpOworCSAgcmV0dXJuKDEpOworICAgICAg fQorI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLworICAgIHJldHVybigwKTsKK30KKworLyogUCBS IEkgViBfIE8gRiBGICAtLSAgVHVybiBvbiB0aGUgcmVhbCB1aWQgYW5kIGdpZCAqLworCisvKiBS ZXR1cm4gdG8gdGhlIHVucHJpdmlsZWdlZCB1aWQgKGdpZCkgYWZ0ZXIgYW4gdGVtcG9yYXJ5IHZp c2l0IHRvCisgKiBwcml2aWxlZ2VkIHN0YXR1cywgdW5sZXNzIHRoZSBwcm9ncmFtIGlzIHJ1bm5p bmcgd2l0aG91dCBzZXQtdXNlci1pZAorICogKHNldC1ncm91cC1pZCkuIFJldHVybnMgMSBmb3Ig ZmFpbHVyZSBpbiBzZXR1aWQoKSBhbmQgMiBmb3IgZmFpbHVyZQorICogaW4gc2V0Z2lkKCkgb3I6 ZWQgdG9nZXRoZXIuIFRoZSBmdW5jdGlvbnMgdHJpZXMgdG8gcmV0dXJuIGJvdGggdWlkCisgKiBh bmQgZ2lkIHRvIHVucHJpdmlsZWdlZCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiBlcnJvcnMuIFJldHVy bnMgMCBvbgorICogc3VjY2Vzcy4KKyAqLworaW50Citwcml2X29mZigpIHsKKyAgICBpbnQgZXJy ID0gMDsKKyNpZm5kZWYgSEFWRV9MT0NLREVWCisgICAgaWYgKHByaXZ1aWQgIT0gKFVJRF9UKSAt MSkKKyAgICAgICBpZiAoc3dpdGNodWlkKHByaXZ1aWQscmVhbHVpZCkpCisJICBlcnIgfD0gMTsK KworICAgIGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEpCisgICAgICAgaWYgKHN3aXRjaGdpZChw cml2Z2lkLHJlYWxnaWQpKQorCWVyciB8PSAyOworI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLwor ICAgIHJldHVybihlcnIpOworfQorCisvKiBUdXJuIG9mZiBwcml2aWxlZ2UgcGVybWFuZW50bHku ICBObyBnb2luZyBiYWNrLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVmb3JlCisgKiBhIGZvcmsoKSBv biBCU0Q0MyBtYWNoaW5lcyB0aGF0IGRvbid0IHNhdmUgdGhlIHNldFVJRCBvciBzZXRHSUQsIGJl Y2F1c2UKKyAqIHdlIHN3YXAgdGhlIHJlYWwgYW5kIGVmZmVjdGl2ZSBpZHMsIGFuZCB3ZSBkb24n dCB3YW50IHRvIGxldCB0aGUgZm9ya2VkCisgKiBwcm9jZXNzIHN3YXAgdGhlbSBhZ2FpbiBhbmQg Z2V0IHRoZSBwcml2aWxlZ2UgYmFjay4gSXQgd2lsbCB3b3JrIG9uIG90aGVyCisgKiBtYWNoaW5l cyB0b28sIHN1Y2ggdGhhdCB5b3UgY2FuIHJlbHkgb24gaXRzIGVmZmVjdCBhbHdheXMgYmVpbmcg dGhlIHNhbWUsCisgKiBmb3IgaW5zdGFuY2UsIGV2ZW4gd2hlbiB5b3UncmUgaW4gcHJpdl9vbigp IHN0YXRlIHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgKiAoV2VsbCwgdGhhdCBwYXJ0IGFib3V0ICJw ZXJtYW5lbnQiIGlzIG9uIFN5c3RlbSBWIG9ubHkgdHJ1ZSBpZiB5b3UgZm9sbG93CisgKiB0aGlz IHdpdGggYSBjYWxsIHRvIGV4ZWMoKSwgYnV0IHRoYXQncyB3aGF0IHdlIHdhbnQgaXQgZm9yIGFu eXdheS4pCisgKiBBZGRlZCBieSBEZWFuIExvbmcgLS0gZGxvbmdAbWlkZ2FyZC51Y3NjLmVkdQor ICovCitpbnQKK3ByaXZfY2FuKCkgeworI2lmbmRlZiBIQVZFX0xPQ0tERVYKKyNpZmRlZiBTRVRS RVVJRAorICAgIGludCBlcnIgPSAwOworICAgIGlmIChwcml2dWlkICE9IChVSURfVCkgLTEpCisg ICAgICAgaWYgKHNldHJldWlkKHJlYWx1aWQscmVhbHVpZCkpCisJICBlcnIgfD0gMTsKKworICAg IGlmIChwcml2Z2lkICE9IChHSURfVCkgLTEpCisgICAgICAgIGlmIChzZXRyZWdpZChyZWFsZ2lk LHJlYWxnaWQpKQorIAkgIGVyciB8PSAyOworCisgICAgcmV0dXJuKGVycik7CisKKyNlbHNlCisj aWZkZWYgU0VURVVJRAorICAgIGludCBlcnIgPSAwOworICAgIGlmIChwcml2dWlkICE9IChVSURf VCkgLTEpCisJaWYgKHNldHVpZChyZWFsdWlkKSkgeworCSAgICBkZWJ1ZyhGMTAxLCJzZXR1aWQg ZmFpbGVkIiwiIixlcnJubyk7CisJICAgIGVyciB8PSAxOworCSAgICBkZWJ1ZyhGMTAxLCJydWlk IiwiIixnZXR1aWQoKSk7CisJICAgIGRlYnVnKEYxMDEsImV1aWQiLCIiLGdldGV1aWQoKSk7CisJ fQorICAgIGRlYnVnKEYxMDEsInNldHVpZCIsIiIscmVhbHVpZCk7CisgICAgaWYgKHByaXZnaWQg IT0gKEdJRF9UKSAtMSkKKyAgICAgICAgaWYgKHNldGdpZChyZWFsZ2lkKSkgeworCSAgICBkZWJ1 ZyhGMTAxLCJzZXRnaWQgZmFpbGVkIiwiIixlcnJubyk7CisJICAgIGVyciB8PSAyOworCSAgICBk ZWJ1ZyhGMTAxLCJyZ2lkIiwiIixnZXRnaWQoKSk7CisJICAgIGRlYnVnKEYxMDEsImVnaWQiLCIi LGdldGVnaWQoKSk7CisJfQorICAgIGRlYnVnKEYxMDEsInNldGdpZCIsIiIscmVhbGdpZCk7Cisg ICAgcmV0dXJuKGVycik7CisjZWxzZQorICAgIC8qIEVhc3kgd2F5IG9mIHVzaW5nIHNldHVpZCgp L3NldGdpZCgpIGluc3RlYWQgb2Ygc2V0cmV1aWQoKS9zZXRyZWdpZCgpLiovCisgICAgcmV0dXJu KHByaXZfb2ZmKCkpOworI2VuZGlmIC8qIFNFVEVVSUQgKi8KKyNlbmRpZiAvKiBTRVRSRVVJRCAq LworI2Vsc2UKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogSEFWRV9MT0NLREVWICovCit9CisK Ky8qIFAgUiBJIFYgXyBPIFAgTiAgLS0gIEZvciBvcGVuaW5nIHByb3RlY3RlZCBmaWxlcyBvciBk ZXZpY2VzLiAqLworCitpbnQKK3ByaXZfb3BuKG5hbWUsIG1vZGVzKSBjaGFyICpuYW1lOyBpbnQg bW9kZXM7IHsKKyAgICBpbnQgeDsKKyAgICBwcml2X29uKCk7CQkJCS8qIFR1cm4gcHJpdmlsZWdl cyBvbiAqLworICAgIGRlYnVnKEYxMTEsInByaXZfb3BuIixuYW1lLG1vZGVzKTsKKyAgICBlcnJu byA9IDA7CisgICAgeCA9IG9wZW4obmFtZSwgbW9kZXMpOwkJLyogVHJ5IHRvIG9wZW4gdGhlIGRl dmljZSAqLworICAgIGRlYnVnKEYxMDEsInByaXZfb3BuIHJlc3VsdCIsIiIseCk7CisgICAgZGVi dWcoRjEwMSwicHJpdl9vcG4gZXJybm8iLCIiLGVycm5vKTsKKyAgICBwcml2X29mZigpOwkJCQkv KiBUdXJuIHByaXZpbGVnZXMgb2ZmICovCisgICAgcmV0dXJuKHgpOwkJCQkvKiBSZXR1cm4gb3Bl bidzIHJldHVybiBjb2RlICovCit9CisKKy8qICBQIFIgSSBWIF8gQyBIIEsgIC0tICBDaGVjayBw cml2aWxlZ2VzLiAgKi8KKworLyogIFRyeSB0byB0dXJuIHRoZW0gb2ZmLiAgSWYgdHVybmluZyB0 aGVtIG9mZiBkaWQgbm90IHN1Y2NlZWQsIGNhbmNlbCB0aGVtICovCisKK2ludAorcHJpdl9jaGso KSB7CisgICAgaW50IHgsIHkgPSAwOworICAgIHggPSBwcml2X29mZigpOwkJCS8qIFR1cm4gb2Zm IHByaXZzLiAqLworICAgIGlmICh4ICE9IDAgfHwgZ2V0dWlkKCkgPT0gcHJpdnVpZCB8fCBnZXRl dWlkKCkgPT0gcHJpdnVpZCkKKyAgICAgIHkgPSBwcml2X2NhbigpOworICAgIGlmICh4ICE9IDAg fHwgZ2V0Z2lkKCkgPT0gcHJpdmdpZCB8fCBnZXRlZ2lkKCkgPT0gcHJpdmdpZCkKKyAgICAgIHkg PSB5IHwgcHJpdl9jYW4oKTsKKyAgICByZXR1cm4oeSk7Cit9CisKK1VJRF9UCityZWFsX3VpZCgp IHsKKyAgICByZXR1cm4ocmVhbHVpZCk7Cit9CisKK1ZPSUQKK3R0aW1vZmYoKSB7CQkJCS8qIFR1 cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisgICAgLyogaW50IHh4OyAqLworLyoKKyAg QXMgb2YgNUEoMTgzKSwgd2Ugc2V0IFNJR0FMUk0gdG8gU0lHX0lHTiAodG8gaWdub3JlIGFsYXJt cykgcmF0aGVyIHRoYW4gdG8KKyAgU0lHX0RGTCAodG8gY2F0Y2ggYWxhcm1zLCBvciBpZiB0aGVy ZSBpcyBubyBoYW5kbGVyLCB0byBleGl0KS4gIFRoaXMgaXMgdG8KKyAgY3VyZSAobWFzaywgcmVh bGx5KSBhIGRlZXBlciBwcm9ibGVtIHdpdGggc3RyYXkgYWxhcm1zIHRoYXQgb2NjdXJzIG9uIHNv bWUKKyAgc3lzdGVtcywgcG9zc2libHkgaGF2aW5nIHRvIGRvIHdpdGggc2xlZXAoKSwgdGhhdCBj YXVzZWQgY29yZSBkdW1wcy4gIEl0CisgIHNob3VsZCBiZSBPSyB0byBkbyB0aGlzLCBiZWNhdXNl IG5vIGNvZGUgaW4gdGhpcyBtb2R1bGUgdXNlcyBuZXN0ZWQgYWxhcm1zLgorICAoQnV0IHdlIHN0 aWxsIGhhdmUgdG8gd2F0Y2ggb3V0IGZvciBTQ1JJUFQgYW5kIERJQUwuLi4pCisqLworICAgIC8q IHh4ID0gKi8gYWxhcm0oMCk7CisgICAgLyogZGVidWcoRjEwMSwidHRpbW9mZiBhbGFybSIsIiIs eHgpOyAqLworICAgIGlmIChzYXZhbCkgewkJCS8qIFJlc3RvcmUgYW55IHByZXZpb3VzICovCisJ c2lnbmFsKFNJR0FMUk0sc2F2YWwpOwkJLyogYWxhcm0gaGFuZGxlci4gKi8KKwkvKiBkZWJ1ZyhG MTAxLCJ0dGltb2ZmIGFsYXJtIHJlc3RvcmluZyBzYXZhbCIsIiIsc2F2YWwpOyAqLworCXNhdmFs ID0gTlVMTDsKKyAgICB9IGVsc2UgeworCXNpZ25hbChTSUdBTFJNLFNJR19JR04pOwkvKiBVc2Vk IHRvIGJlIFNJR19ERkwgKi8KKwkvKiBkZWJ1ZyhGMTAwLCJ0dGltb2ZmIGFsYXJtIFNJR19JR04i LCIiLDApOyAqLworICAgIH0KK30KKworCitpbnQKK3R0X2lzX3NlY3VyZSgpIHsJICAvKiBUZWxs cyB3aGV0aGVyIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgc2VjdXJlICovCisKKyAgICBpZiAo dHR5ZmQgPT0gLTEpCisgICAgICByZXR1cm4oMCk7CisKKyAgICBpZiAoMAorI2lmZGVmIFNTSEJV SUxUSU4KKwl8fCBJU19TU0goKQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBDS19F TkNSWVBUSU9OCisJfHwgY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQor I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDS19TU0wKKwl8fCB0bHNfYWN0aXZl X2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxP R0NPREUKKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIENLX0VOQ1JZUFRJT04KKwl8fCB0dG5w cm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgorI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlmIC8qIFJM T0dDT0RFICovCisJKQorICAgICAgcmV0dXJuKDEpOworICAgIHJldHVybigwKTsKK30KKworI2lm ZGVmIENLX1JFRElSCisgIAorLyogRXh0ZXJuYWwgcHJvdG9jb2wgaGFuZGxlciBwYXJhbWV0ZXJz IGZyb20gY2t1dXMzLmMgKi8KK2V4dGVybiBpbnQgZXhwX2hhbmRsZXIsIGV4cF9zdGRlcnIsIGV4 cF90aW1vOworCisjaWZkZWYgU0VMRUNUCisjaWZkZWYgTkVUUFRZCisKKy8qIFRoZSByaWdodCBz aXplIGlzIDI0NTc2ICovCisKKyNpZm5kZWYgUFRZX1BCVUZfU0laRQkJCS8qIFNpemUgb2YgYnVm ZmVyIHRvIHJlYWQgZnJvbSBwdHkgKi8KKyNkZWZpbmUgUFRZX1BCVUZfU0laRSAyNDU3NgkJLyog YW5kIHdyaXRlIHRvIG5ldC4gKi8KKyNlbmRpZgkvKiBQVFlfUEJVRl9TSVpFICovCisKKyNpZm5k ZWYgUFRZX1RCVUZfU0laRQkJCS8qIFNpemUgb2YgYnVmZmVyIHRvIHJlYWQgZnJvbSBuZXQgKi8K KyNkZWZpbmUgUFRZX1RCVUZfU0laRSAyNDU3NgkJLyogYW5kIHdyaXRlIHRvIHB0eS4gKi8KKyNl bmRpZgkvKiBQVFlfVEJVRl9TSVpFICovCisKKyNpZmRlZiBPX05ERUxBWQkJCQkvKiBXaGV0aGVy IHRvIHVzZSBub25ibG9ja2luZyAqLworI2lmbmRlZiBQVFlfTk9fTkRFTEFZCQkJLyogcmVhZHMg b24gdGhlIHBzZXVkb3Rlcm1pbmFsICovCisjaWZuZGVmIFBUWV9VU0VfTkRFTEFZCisjZGVmaW5l IFBUWV9VU0VfTkRFTEFZCisjZW5kaWYJLyogUFRZX1VTRV9OREVMQVkgKi8KKyNlbmRpZgkvKiBQ VFlfTk9fTkRFTEFZICovCisjZW5kaWYJLyogT19OREVMQVkgKi8KKworI2lmbmRlZiBIQVZFX09Q RU5QVFkKKyNpZm5kZWYgVVNFX0NLVVBUWV9DCisjZGVmaW5lIFVTRV9DS1VQVFlfQworI2VuZGlm IC8qIFVTRV9DS1VQVFlfQyAqLworI2VuZGlmIC8qIEhBVkVfT1BFTlBUWSAqLworCitWT0lECitw dHlfbWFrZV9yYXcoZmQpIGludCBmZDsgeworICAgIGludCB4ID0gLTIzLCBpOworCisjaWZkZWYg QlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KKyAgICBzdHJ1Y3QgdGVybWlvcyB0cDsKKyNlbHNl CisjaWZkZWYgQVRUU1YJCQkJLyogQVQmVCBVTklYICovCisjaWZkZWYgQ0tfQU5TSUMKKyAgICBz dHJ1Y3QgdGVybWlvIHRwID0gezB9OworI2Vsc2UKKyAgICBzdHJ1Y3QgdGVybWlvIHRwOworI2Vu ZGlmCS8qIENLX0FOU0lDICovCisjZWxzZQorICAgIHN0cnVjdCBzZ3R0eWIgdHA7CQkJLyogVHJh ZGl0aW9uYWwgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAq LworCisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGZkIiwiIixmZCk7CisgICAgZXJybm8g PSAwOworCisjaWZkZWYgQlNENDRPUlBPU0lYCQkJLyogUE9TSVggKi8KKyAgICB4ID0gdGNnZXRh dHRyKGZkLCZ0cCk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IHRjZ2V0YXR0ciIsIiIs eCk7CisjZWxzZQorI2lmZGVmIEFUVFNWCQkJCS8qIEFUJlQgVU5JWCAqLworICAgIHggPSBpb2N0 bChmZCxUQ0dFVEEsJnRwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgVENHRVRBIGlv Y3RsIiwiIix4KTsKKyNlbHNlCisgICAgeCA9IGd0dHkoZmQsJnRwKTsKKyAgICBkZWJ1ZyhGMTAx LCJwdHlfbWFrZV9yYXcgdHR0eSIsIiIseCk7CisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRpZiAv KiBCU0Q0NE9SUE9TSVggKi8KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgR0VUIGVycm5v IiwiIixlcnJubyk7CisKKyNpZmRlZiBVU0VfQ0ZNQUtFUkFXCisgICAgZXJybm8gPSAwOworICAg IGNmbWFrZXJhdygmdHApOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyBjZm1ha2VyYXcg ZXJybm8iLCIiLGVycm5vKTsKKyNlbHNlICAvKiBVU0VfQ0ZNQUtFUkFXICovCisKKyNpZmRlZiBD T01NRU5UCisKKy8qIFRoaXMgdmVyeSBzaW1wbGUgdmVyc2lvbiByZWNvbW1lbmRlZCBieSBTZXJn IElha29sZXYgZG9lc24ndCB3b3JrICovCisKKyAgICB0cC5jX2xmbGFnICY9IH4oRUNIT3xJQ0FO T058SUVYVEVOfElTSUcpOworICAgIHRwLmNfaWZsYWcgJj0gfihCUktJTlR8SUNSTkx8SU5QQ0t8 SVNUUklQfElYT04pOworICAgIHRwLmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkIpOworICAgIHRw LmNfY2ZsYWcgfD0gQ1M4OworICAgIHRwLmNfb2ZsYWcgJj0gfihPUE9TVCk7CisgICAgdHAuY19j Y1tWTUlOXSA9IDE7CisgICAgdHAuY19jY1tWVElNRV0gPSAwOworCisgICAgZGVidWcoRjEwMSwi cHR5X21ha2VfcmF3IDEgY19jY1tdIE5DQ1MiLCIiLE5DQ1MpOworICAgIGRlYnVnKEYxMDEsInB0 eV9tYWtlX3JhdyAxIGlmbGFncyIsIiIsdHAuY19pZmxhZyk7CisgICAgZGVidWcoRjEwMSwicHR5 X21ha2VfcmF3IDEgb2ZsYWdzIiwiIix0cC5jX29mbGFnKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlf bWFrZV9yYXcgMSBsZmxhZ3MiLCIiLHRwLmNfbGZsYWcpOworICAgIGRlYnVnKEYxMDEsInB0eV9t YWtlX3JhdyAxIGNmbGFncyIsIiIsdHAuY19jZmxhZyk7CisKKyNlbHNlCisjaWZkZWYgQ09NTUVO VAorLyoKKyAgSW4gdGhpcyB2ZXJzaW9uIHdlIHVuc2V0IGV2ZXJ5dGhpbmcgYW5kIHRoZW4gc2V0 IG9ubHkgdGhlCisgIGJpdHMgd2Uga25vdyB3ZSBuZWVkLgorKi8KKyAgICAvKiBpZmxhZ3MgKi8K KyAgICB0cC5jX2lmbGFnID0gMEw7CisgICAgdHAuY19pZmxhZyB8PSBJR05CUks7CisjaWZkZWYg SU1BWEJFTAorICAgIHRwLmNfaWZsYWcgfD0gSU1BWEJFTDsKKyNlbmRpZiAvKiBJTUFYQkVMICov CisKKyAgICAvKiBvZmxhZ3MgKi8KKyAgICB0cC5jX29mbGFnID0gMEw7CisKKyAgICAvKiBsZmxh Z3MgKi8KKyAgICB0cC5jX2xmbGFnID0gMEw7CisjaWZkZWYgTk9LRVJOSU5GTworICAgIHRwLmNf bGZsYWcgfD0gTk9LRVJOSU5GTzsKKyNlbmRpZgkvKiBOT0tFUk5JTkZPICovCisKKyAgICAvKiBj ZmxhZ3MgKi8KKyAgICB0cC5jX2NmbGFnID0gMEw7CisgICAgdHAuY19jZmxhZyB8PSBDUzh8Q1JF QUQ7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTkNDUzsgaSsrKSB7CS8qIE5vIHNwZWNpYWwgY2hh cmFjdGVycyAqLworCXRwLmNfY2NbaV0gPSAwOworICAgIH0KKyNpZmRlZiBWTUlOCisgICAgdHAu Y19jY1tWTUlOXSA9IDE7CQkJLyogQnV0IGFsd2F5cyB3YWl0IGZvciBpbnB1dCAqLworI2VuZGlm CS8qIFZNSU4gKi8KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBjX2NjW10gTkNDUyIs IiIsTkNDUyk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgaWZsYWdzIiwiIix0cC5j X2lmbGFnKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMiBvZmxhZ3MiLCIiLHRwLmNf b2ZsYWcpOworICAgIGRlYnVnKEYxMDEsInB0eV9tYWtlX3JhdyAyIGxmbGFncyIsIiIsdHAuY19s ZmxhZyk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IDIgY2ZsYWdzIiwiIix0cC5jX2Nm bGFnKTsKKworI2Vsc2UgIC8qIENPTU1FTlQgKi8KKy8qCisgIEluIHRoaXMgdmVyc2lvbiB3ZSBz ZXQgb3IgdW5zZXQgZXZlcnkgc2luZ2xlIGZsYWcgZXhwbGljaXRseS4gIEl0IHdvcmtzIGEKKyAg Yml0IGJldHRlciB0aGFuIHRoZSBzaW1wbGUgdmVyc2lvbiBqdXN0IGFib3ZlLCBidXQgaXQncyBz dGlsbCBmYXIgZnJvbQorICBhZGVxdWF0ZS4KKyovCisgICAgLyogaWZsYWdzICovCisgICAgdHAu Y19pZmxhZyAmPSB+KFBBUk1SS3xJU1RSSVB8QlJLSU5UfElOTENSfElHTkNSfElDUk5MKTsKKyAg ICB0cC5jX2lmbGFnICY9IH4oSU5QQ0t8SUdOUEFSfElYQU5ZfElYT058SVhPRkYpOworICAgIHRw LmNfaWZsYWcgfD0gSUdOQlJLOworI2lmZGVmIElNQVhCRUwKKyNpZmRlZiBDT01NRU5UCisgICAg dHAuY19pZmxhZyB8PSBJTUFYQkVMOworI2Vsc2UKKyAgICB0cC5jX2lmbGFnICY9IH5JTUFYQkVM OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBJTUFYQkVMICovCisjaWZkZWYgSVVD TEMKKyAgICB0cC5jX2lmbGFnICY9IH5JVUNMQzsKKyNlbmRpZiAvKiBJVUNMQyAqLworCisgICAg Lyogb2ZsYWdzICovCisjaWZkZWYgQlNETFkKKyAgICB0cC5jX29mbGFnICY9IH5CU0RMWTsKKyNl bmRpZiAvKiBCU0RMWSAqLworI2lmZGVmIENSRExZCisgICAgdHAuY19vZmxhZyAmPSB+Q1JETFk7 CisjZW5kaWYgLyogQ1JETFkgKi8KKyNpZmRlZiBGRkRMWQorICAgIHRwLmNfb2ZsYWcgJj0gfkZG RExZOworI2VuZGlmIC8qIEZGRExZICovCisjaWZkZWYgTkxETFkKKyAgICB0cC5jX29mbGFnICY9 IH5OTERMWTsKKyNlbmRpZiAvKiBOTERMWSAqLworI2lmZGVmIFRBQkRMWQorICAgIHRwLmNfb2Zs YWcgJj0gflRBQkRMWTsKKyNlbmRpZiAvKiBUQUJETFkgKi8KKyNpZmRlZiBWVERMWQorICAgIHRw LmNfb2ZsYWcgJj0gflZURExZOworI2VuZGlmIC8qIFZURExZICovCisjaWZkZWYgT0ZERUwKKyAg ICB0cC5jX29mbGFnICY9IH5PRkRFTDsKKyNlbmRpZiAvKiBPRkRFTCAqLworI2lmZGVmIE9GSUxM CisgICAgdHAuY19vZmxhZyAmPSB+T0ZJTEw7CisjZW5kaWYgLyogT0ZJTEwgKi8KKyNpZmRlZiBP TENVQworICAgIHRwLmNfb2ZsYWcgJj0gfk9MQ1VDOworI2VuZGlmIC8qIE9MQ1VDICovCisjaWZk ZWYgQ01TUEFSCisgICAgdHAuY19vZmxhZyAmPSB+Q01TUEFSOworI2VuZGlmIC8qIENNU1BBUiAq LworICAgIHRwLmNfb2ZsYWcgJj0gfk9QT1NUOworI2lmZGVmIE9YVEFCUworICAgIHRwLmNfb2Zs YWcgJj0gfk9YVEFCUzsKKyNlbmRpZiAvKiBPWFRBQlMgKi8KKyNpZmRlZiBDT01NRU5UCisjaWZk ZWYgT05PQ1IKKyAgICB0cC5jX29mbGFnICY9IH5PTk9DUjsJCS8qIE1heWJlIHNob3VsZCBiZSB8 PT8gKi8KKyAgICB0cC5jX29mbGFnIHw9IE9OT0NSOwkJLyogbWFrZXMgbm8gZGlmZmVyZW5jZSBl aXRoZXIgd2F5ICovCisjZW5kaWYgLyogT05PQ1IgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisj aWZkZWYgT05PRU9UCisgICAgdHAuY19vZmxhZyAmPSB+T05PRU9UOworI2VuZGlmIC8qIE9OT0VP VCAqLworI2lmZGVmIE9OTFJFVAorICAgIHRwLmNfb2ZsYWcgJj0gfk9OTFJFVDsKKyNlbmRpZiAv KiBPTkxSRVQgKi8KKyNpZmRlZiBPTkxDUgorICAgIHRwLmNfb2ZsYWcgJj0gfk9OTENSOworI2Vu ZGlmIC8qIE9OTENSICovCisjaWZkZWYgT0NSTkwKKyAgICB0cC5jX29mbGFnICY9IH5PQ1JOTDsK KyNlbmRpZiAvKiBPQ1JOTCAqLworCisgICAgLyogbGZsYWdzICovCisgICAgdHAuY19sZmxhZyAm PSB+RUNITzsKKyNpZmRlZiBFQ0hPRQorICAgIHRwLmNfbGZsYWcgJj0gfkVDSE9FOworI2VuZGlm IC8qIEVDSE9FICovCisjaWZkZWYgRUNIT05MCisgICAgdHAuY19sZmxhZyAmPSB+RUNIT05MOwor I2VuZGlmIC8qIEVDSE9OTCAqLworI2lmZGVmIEVDSE9QUlQKKyAgICB0cC5jX2xmbGFnICY9IH5F Q0hPUFJUOworI2VuZGlmIC8qIEVDSE9QUlQgKi8KKyNpZmRlZiBFQ0hPS0UKKyAgICB0cC5jX2xm bGFnICY9IH5FQ0hPS0U7CisjZW5kaWYgLyogRUNIT0tFICovCisjaWZkZWYgRUNIT0NUTAorICAg IHRwLmNfbGZsYWcgJj0gfkVDSE9DVEw7CisjZW5kaWYgLyogRUNIT0NUTCAqLworI2lmZGVmIFhD QVNFCisgICAgdHAuY19sZmxhZyAmPSB+WENBU0U7CisjZW5kaWYgLyogWENBU0UgKi8KKyNpZmRl ZiBBTFRXRVJBU0UKKyAgICB0cC5jX2xmbGFnICY9IH5BTFRXRVJBU0U7CisjZW5kaWYgLyogQUxU V0VSQVNFICovCisjaWZkZWYgRVhUUFJPQworICAgIHRwLmNfbGZsYWcgJj0gfihJQ0FOT058SVNJ R3xJRVhURU58VE9TVE9QfEZMVVNIT3xQRU5ESU58RVhUUFJPQyk7CisjZWxzZQorICAgIHRwLmNf bGZsYWcgJj0gfihJQ0FOT058SVNJR3xJRVhURU58VE9TVE9QfEZMVVNIT3xQRU5ESU4pOworI2Vu ZGlmCS8qIEVYVFBST0MgKi8KKyNpZmRlZiBOT0tFUk5JTkZPCisgICAgdHAuY19sZmxhZyB8PSBO T0tFUk5JTkZPOworI2VuZGlmCS8qIE5PS0VSTklORk8gKi8KKyNpZm5kZWYgQ09NTUVOVAorICAg IHRwLmNfbGZsYWcgJj0gfk5PRkxTSDsJCS8qIFRSWSBJVCBUSEUgT1RIRVIgV0FZPyAqLworI2Vs c2UKKyAgICB0cC5jX2xmbGFnIHw9IE5PRkxTSDsJCS8qIE5vLCB0aGlzIHdheSBpcyB3b3JzZSAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIC8qIGNmbGFncyAqLworICAgIHRwLmNfY2Zs YWcgJj0gfihDU0laRXxQQVJFTkJ8UEFST0REKTsKKyAgICB0cC5jX2NmbGFnIHw9IENTOHxDUkVB RDsKKworI2lmZGVmIE1ETUJVRgorICAgIHRwLmNfY2ZsYWcgJj0gfihNRE1CVUYpOworI2Vsc2UK KyNpZmRlZiBDQ0FSX09GTE9XCisgICAgdHAuY19jZmxhZyAmPSB+KENDQVJfT0ZMT1cpOwkvKiB0 d28gbmFtZXMgZm9yIHRoZSBzYW1lIHRoaW5nICovCisjZW5kaWYgLyogQ0NBUl9PRkxPVyAqLwor I2VuZGlmIC8qIE1ETUJVRiAqLworCisjaWZkZWYgQ0NUU19PRkxPVworICAgIHRwLmNfY2ZsYWcg Jj0gfihDQ1RTX09GTE9XKTsKKyNlbmRpZiAvKiBDQ1RTX09GTE9XICovCisjaWZkZWYgQ0RTUl9P RkxPVworICAgIHRwLmNfY2ZsYWcgJj0gfihDRFNSX09GTE9XKTsKKyNlbmRpZiAvKiBDRFNSX09G TE9XICovCisjaWZkZWYgQ0RUUl9JRkxPVworICAgIHRwLmNfY2ZsYWcgJj0gfihDRFRSX0lGTE9X KTsKKyNlbmRpZiAvKiBDRFRSX0lGTE9XICovCisjaWZkZWYgQ1JUU19JRkxPVworICAgIHRwLmNf Y2ZsYWcgJj0gfihDUlRTX0lGTE9XKTsKKyNlbmRpZiAvKiBDUlRTX0lGTE9XICovCisjaWZkZWYg Q1JUU1hPRkYKKyAgICB0cC5jX2NmbGFnICY9IH4oQ1JUU1hPRkYpOworI2VuZGlmIC8qIENSVFNY T0ZGICovCisjaWZkZWYgQ1JUU0NUUworICAgIHRwLmNfY2ZsYWcgJj0gfihDUlRTQ1RTKTsKKyNl bmRpZiAvKiBDUlRTQ1RTICovCisjaWZkZWYgQ0xPQ0FMCisgICAgdHAuY19jZmxhZyAmPSB+KENM T0NBTCk7CisjZW5kaWYgLyogQ0xPQ0FMICovCisjaWZkZWYgQ1NUT1BCCisgICAgdHAuY19jZmxh ZyAmPSB+KENTVE9QQik7CisjZW5kaWYgLyogQ1NUT1BCICovCisjaWZkZWYgSFVQQ0wKKyAgICB0 cC5jX2NmbGFnICY9IH4oSFVQQ0wpOworI2VuZGlmIC8qIEhVUENMICovCisKKyAgICBmb3IgKGkg PSAwOyBpIDwgTkNDUzsgaSsrKSB7CS8qIE5vIHNwZWNpYWwgY2hhcmFjdGVycyAqLworCXRwLmNf Y2NbaV0gPSAwOworICAgIH0KKyNpZmRlZiBWTUlOCisgICAgdHAuY19jY1tWTUlOXSA9IDE7CQkJ LyogQnV0IGFsd2F5cyB3YWl0IGZvciBpbnB1dCAqLworI2VuZGlmCS8qIFZNSU4gKi8KKyAgICBk ZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBjX2NjW10gTkNDUyIsIiIsTkNDUyk7CisgICAgZGVi dWcoRjEwMSwicHR5X21ha2VfcmF3IDMgaWZsYWdzIiwiIix0cC5jX2lmbGFnKTsKKyAgICBkZWJ1 ZyhGMTAxLCJwdHlfbWFrZV9yYXcgMyBvZmxhZ3MiLCIiLHRwLmNfb2ZsYWcpOworICAgIGRlYnVn KEYxMDEsInB0eV9tYWtlX3JhdyAzIGxmbGFncyIsIiIsdHAuY19sZmxhZyk7CisgICAgZGVidWco RjEwMSwicHR5X21ha2VfcmF3IDMgY2ZsYWdzIiwiIix0cC5jX2NmbGFnKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgZXJybm8gPSAwOworI2lmZGVm IEJTRDQ0T1JQT1NJWAkJCS8qIFBPU0lYICovCisgICAgeCA9IHRjc2V0YXR0cihmZCxUQ1NBTk9X LCZ0cCk7CisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IHRjc2V0YXR0ciIsIiIseCk7Cisj ZWxzZQorI2lmZGVmIEFUVFNWCQkJCS8qIEFUJlQgVU5JWCAqLworICAgIHggPSBpb2N0bChmZCxU Q1NFVEEsJnRwKTsKKyAgICBkZWJ1ZyhGMTAxLCJwdHlfbWFrZV9yYXcgaW9jdGwiLCIiLHgpOwor I2Vsc2UKKyAgICB4ID0gc3R0eShmZCwmdHApOwkJCS8qIFRyYWRpdGlvbmFsICovCisgICAgZGVi dWcoRjEwMSwicHR5X21ha2VfcmF3IHN0dHkiLCIiLHgpOworI2VuZGlmIC8qIEFUVFNWICovCisj ZW5kaWYgLyogQlNENDRPUlBPU0lYICovCisgICAgZGVidWcoRjEwMSwicHR5X21ha2VfcmF3IGVy cm5vIiwiIixlcnJubyk7CisKKyNlbmRpZiAvKiBfX05ldEJTRF9fICovCit9CisKK3N0YXRpYyBp bnQKK3B0eV9jaGsoZmQpIGludCBmZDsgeworICAgIGludCB4LCBuID0gMDsKKyAgICBlcnJubyA9 IDA7CisjaWZkZWYgRklPTlJFQUQKKyAgICB4ID0gaW9jdGwoZmQsIEZJT05SRUFELCAmbik7CS8q IEJTRCBhbmQgbW9zdCBvdGhlcnMgKi8KKyAgICBja21ha21zZyhtc2didWYsNTAwLAorCSAgICAg InB0eV9jaGsgaW9jdGwgRklPTlJFQUQgZXJybm89IiwKKwkgICAgIGNraXRvYShlcnJubyksCisJ ICAgICAiIGNvdW50PSIsCisJICAgICBja2l0b2EobikpOworICAgIGRlYnVnKEYxMDAsbXNnYnVm LCIiLDApOworI2Vsc2UKKyNpZmRlZiBSRENISworICAgIG4gPSByZGNoayhmZCk7CisgICAgZGVi dWcoRjEwMSwicHR5X2NoayByZGNoayIsIiIsbik7CisjZWxzZQorICAgIG4gPSAxOworI2VuZGlm CS8qIFJEQ0hLICovCisjZW5kaWYJLyogRklPTlJFQUQgKi8KKyAgICByZXR1cm4oKG4gPiAtMSkg PyBuIDogMCk7Cit9CisKK3N0YXRpYyBpbnQKK3B0eV9nZXRfc3RhdHVzKGZkLHBpZCkgaW50IGZk OyBQSURfVCBwaWQ7IHsKKyAgICBpbnQgeCwgc3RhdHVzID0gLTE7CisgICAgUElEX1QgdzsKKwor ICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGZkIiwiIixmZCk7CisgICAgZGVidWcoRjEw MSwicHR5X2dldF9zdGF0dXMgcGlkIiwiIixwaWQpOworCisgICAgaWYgKHBleGl0c3RhdCA+IC0x KQorICAgICAgcmV0dXJuKHBleGl0c3RhdCk7CisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogTm90 IG9ubHkgdW5uZWNlc3NhcnkgYnV0IGhhcm1mdWwgKi8KKyAgICBlcnJubyA9IDA7CisgICAgeCA9 IGtpbGwocHR5X2ZvcmtfcGlkLDApOworICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGtp bGwgdmFsdWUiLCIiLHgpOworICAgIGRlYnVnKEYxMDEsInB0eV9nZXRfc3RhdHVzIGtpbGwgZXJy bm8iLCIiLGVycm5vKTsKKyAgICBpZiAoeCA+IC0xICYmIGVycm5vICE9IEVTUkNIKQorICAgICAg cmV0dXJuKC0xKTsJCQkvKiBGb3JrIHN0aWxsIHRoZXJlICovCisgICAgLyogRm9yayBzZWVtcyB0 byBiZSBnb25lICovCisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgZXJybm8gPSAwOworICAg IHggPSB3YWl0cGlkKHB0eV9mb3JrX3BpZCwmc3RhdHVzLFdOT0hBTkcpOworICAgIGRlYnVnKEYx MTEsInB0eV9nZXRfc3RhdHVzIHdhaXRwaWQiLGNraXRvYShlcnJubykseCk7CisgICAgaWYgKHgg PD0gMCAmJiBlcnJubyA9PSAwKSB7CisJZGVidWcoRjEwMSwicHR5X2dldF9zdGF0dXMgd2FpdHBp ZCByZXR1cm4iLCIiLC0xKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAoeCA+IDApIHsK KwlpZiAoeCAhPSBwdHlfZm9ya19waWQpCisJICBkZWJ1ZyhGMTAxLAorCQkicHR5X2dldF9zdGF0 dXMgd2FpdHBpZCBwaWQgZG9lc24ndCBtYXRjaCIsIiIscHR5X2ZvcmtfcGlkKTsgCisJZGVidWco RjEwMSwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCBzdGF0dXMiLCIiLHN0YXR1cyk7CisJZGVidWco RjEwMSwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCBlcnJubyIsIiIsZXJybm8pOworCWlmIChXSUZF WElURUQoc3RhdHVzKSkgeworCSAgICBkZWJ1ZyhGMTAwLCJwdHlfZ2V0X3N0YXR1cyBXSUZFWElU RUQiLCIiLDApOworCSAgICBzdGF0dXMgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOworCSAgICBkZWJ1 ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyBmb3JrIGV4aXQgc3RhdHVzIiwiIixzdGF0dXMpOworI2lm ZGVmIENPTU1FTlQKKwkgICAgZW5kX3B0eSgpOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKwkgICAg Y2xvc2UoZmQpOworCSAgICBwZXhpdHN0YXQgPSBzdGF0dXM7CisJfSBlbHNlIHsKKwkgICAgZGVi dWcoRjEwMCwicHR5X2dldF9zdGF0dXMgd2FpdHBpZCB1bmV4cGVjdGVkIHN0YXR1cyIsIiIsMCk7 CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJwdHlfZ2V0X3N0YXR1cyByZXR1cm4gc3RhdHVz IiwiIixzdGF0dXMpOworICAgIHJldHVybihzdGF0dXMpOworfQorCisvKiB0IHQgcCB0IHkgYyBt IGQgIC0tICBSdW4gY29tbWFuZCBvbiBwdHkgYW5kIGZvcndhcmQgdG8gbmV0ICovCisKKy8qCisg IE5lZWRlZCBmb3IgcnVubmluZyBleHRlcm5hbCBwcm90b2NvbHMgb24gc2VjdXJlIGNvbm5lY3Rp b25zLgorICBGb3IgZXhhbXBsZSwgaWYgQy1LZXJtaXQgaGFzIG1hZGUgYW4gU1NML1RMUyBvciBL ZXJiZXJvcyBUZWxuZXQKKyAgY29ubmVjdGlvbiwgYW5kIHRoZW4gbmVlZHMgdG8gdHJhbnNmZXIg YSBmaWxlIHdpdGggWm1vZGVtLCB3aGljaCBpcworICBhbiBleHRlcm5hbCBwcm9ncmFtLCB0aGlz IHJvdXRpbmUgcmVhZHMgWm1vZGVtJ3Mgb3V0cHV0LCBlbmNyeXB0cyBpdCwKKyAgYW5kIHRoZW4g Zm9yd2FyZHMgaXQgb3V0IHRoZSBjb25uZWN0aW9uLCBhbmQgcmVhZHMgdGhlIGVuY3J5cHRlZCBk YXRhCisgIHN0cmVhbSBjb21pbmcgaW4gZnJvbSB0aGUgY29ubmVjdGlvbiwgZGVjcnlwdHMgaXQs IGFuZCBmb3J3YXJkcyBpdCB0bworICBabW9kZW0uCisKKyAgV29ya3MgbGlrZSBhIFRDUC9JUCBw b3J0IGZvcndhcmRlciBleGNlcHQgb25lIGVuZCBpcyBhIHB0eSByYXRoZXIKKyAgdGhhbiBhIHNv Y2tldCwgd2hpY2ggaW50cm9kdWNlcyBzb21lIGNvbXBsaWNhdGlvbnM6CisKKyAgIC4gT24gbW9z dCBwbGF0Zm9ybXMsIHNlbGVjdCgpIGFsd2F5cyBpbmRpY2F0ZXMgdGhlIG91dHB1dCBzaWRlIG9m CisgICAgIHRoZSBwdHkgaGFzIGNoYXJhY3RlcnMgd2FpdGluZyB0byBiZSByZWFkLCBldmVuIHdo ZW4gaXQgZG9lc24ndCwKKyAgICAgZXZlbiB3aGVuIHRoZSBwdHkgcHJvY2VzcyBoYXMgYWxyZWFk eSBleGl0ZWQuCisKKyAgIC4gTm9uYmxvY2tpbmcgcmVhZHMgbXVzdCBiZSB1c2VkIG9uIHRoZSBw dHksIGJlY2F1c2UgdGhlcmUgaXMgbm8KKyAgICAgd2F5IG9uIGNlcnRhaW4gcGxhdGZvcm1zIChl LmcuIE5ldEJTRCkgdG8gZmluZCBvdXQgaG93IG1hbnkgY2hhcmFjdGVycworICAgICBhcmUgYXZh aWxhYmxlIHRvIGJlIHJlYWQgKHRoZSBGSU9OUkVBRCBpb2N0bCBhbHdheXMgc2F5cyAwKS4gIFRo ZSBjb2RlCisgICAgIGFsc28gYWxsb3dzIGZvciBibG9ja2luZyByZWFkcyAoaWYgT19OREVMQVkg YW5kIE9fTk9OQkxPQ0sgYXJlIG5vdAorICAgICBkZWZpbmVkLCBvciBpZiBQVFlfTk9fTkRFTEFZ IGlzIGRlZmluZWQpLCBidXQgb24gc29tZSBwbGF0Zm9ybXMgdGhpcyBjYW4KKyAgICAgcmVzdWx0 IGluIHNpbmdsZS1ieXRlIHJlYWRzIGFuZCB3cml0ZXMgKE5ldEJTRCBhZ2FpbikuCisKKyAgIC4g VGVzdGluZyBmb3IgIkVPRiIgb24gdGhlIHB0eSBpcyBwcm9ibGVtYXRpYy4gIHNlbGVjdCgpIG5l dmVyIGdpdmVzCisgICAgIGFueSBpbmRpY2F0aW9uLiAgQWZ0ZXIgdGhlIHB0eSBwcm9jZXNzIGhh cyBleGl0ZWQgYW5kIHRoZSBmb3JrIGhhcworICAgICBkaXNhcHBlYXJlZCwgcmVhZCgpIGNhbiBz dGlsbCByZXR1cm4gd2l0aCAwIGJ5dGVzIHJlYWQgYnV0IHdpdGhvdXQgYW4KKyAgICAgZXJyb3Ig KE5ldEJTRCk7IG5vIGtub3duIHRlc3Qgb24gdGhlIHB0eSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBp bmRpY2F0ZQorICAgICB0aGF0IGl0IGlzIG5vIGxvbmdlciB2YWxpZC4gIFRoZSBwcm9jZXNzIElE IG9mIHRoZSBwdHkgZm9yayBjYW4gYmUKKyAgICAgdGVzdGVkIG9uIHNvbWUgcGxhdGZvcm1zIChO ZXRCU0QsIGx1Y2tpbHkpIGJ1dCBub3Qgb3RoZXJzIChTb2xhcmlzLAorICAgICBMaW51eCkuCisK KyAgT24gdGhlIG5ldHdvcmsgc2lkZSwgd2UgdXNlIHR0aW5jKCkgYW5kIHR0b2MoKSwgd2hpY2gs IGZvciBuZXR3b3JrIAorICBjb25uZWN0aW9ucywgaGFuZGxlIGFueSBhY3RpdmUgc2VjdXJpdHkg bWV0aG9kcy4KKworICBDYWxsIHdpdGggcyA9IGNvbW1hbmQuCisgIFJldHVybnMgMCBvbiBmYWls dXJlLCAxIG9uIHN1Y2Nlc3MuCisgIGZkYyAtIERlY2VtYmVyIDIwMDYgLSBBdWd1c3QgMjAwNy4K KworICBOT1RFOiBUaGlzIGNvZGUgZGVmYXVsdHMgdG8gbm9uYmxvY2tpbmcgcmVhZHMgaWYgT19O REVMQVkgb3IgT19OT05CTE9DSyBhcmUKKyAgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGVzLCB3 aGljaCBzaG91bGQgYmUgdHJ1ZSBvZiBldmVyeSByZWNlbnQgVW5peAorICBwbGF0Zm9ybS4gIElm IHRoaXMgY2F1c2VzIHRyb3VibGUgc29tZXdoZXJlLCBkZWZpbmUgUFRZX05PX05ERUxBWSwgZS5n LiB3aGVuCisgIGJ1aWxkaW5nIEMtS2VybWl0OgorCisgICAgdG91Y2ggY2t1dGlvLmMKKyAgICBt YWtlIHBsYXRmb3JtbmFtZSBLRkxBR1M9LURQVFlfTk9fTk9ERUxBWQorKi8KK3N0YXRpYyBpbnQg aGF2ZV9wdHkgPSAwOwkJLyogRG8gd2UgaGF2ZSBhIHB0eT8gKi8KKworc3RhdGljIFNJR1RZUCAo KnNhdmVfc2lnY2hsZCkoKSA9IE5VTEw7CS8qIEZvciBjYXRjaGluZyBTSUdDSExEICovCisKK3N0 YXRpYyBWT0lECitzaWdjaGxkX2hhbmRsZXIoc2lnKSBpbnQgc2lnOyB7CisgICAgaGF2ZV9wdHkg PSAwOwkJCS8qIFdlIGRvbid0IGhhdmUgYSBwdHkgKi8KKyNpZmRlZiBERUJVRworICAgIGlmIChz YXZlX3NpZ2NobGQpIHsKKwkoVk9JRCkgc2lnbmFsKFNJR0NITEQsc2F2ZV9zaWdjaGxkKTsKKwlz YXZlX3NpZ2NobGQgPSBOVUxMOworICAgIH0KKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEw MCwiKioqKioqKioqKioqKioiLCIiLDApOworCWRlYnVnKEYxMDAsIlNJR0NITEQgY2F1Z2h0Iiwi IiwwKTsKKwlkZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKiIsIiIsMCk7CisgICAgfQorI2VuZGlm CS8qIERFQlVHICovCit9CisjZGVmaW5lIEhBVkVfSUFDIDEKKyNkZWZpbmUgSEFWRV9DUiAgMgor CitpbnQKK3R0cHR5Y21kKHMpIGNoYXIgKnM7IHsKKyAgICBDSEFSIHRidWZbUFRZX1RCVUZfU0la RV07CQkvKiBSZWFkIGZyb20gbmV0LCB3cml0ZSB0byBwdHkgKi8KKyAgICBpbnQgdGJ1Zl9hdmFp bCA9IDA7CQkJLyogUG9pbnRlcnMgZm9yIHRidWYgKi8KKyAgICBpbnQgdGJ1Zl93cml0dGVuID0g MDsKKyAgICBzdGF0aWMgaW50IGluX3N0YXRlID0gMDsJCS8qIEZvciBURUxORVQgSUFDIGFuZCBO VlQgaW4gKi8KKyAgICBzdGF0aWMgaW50IG91dF9wcmV2ID0gMDsJCS8qIFNpbXBsZXIgc2NoZW1l IGZvciBvdXQgKi8KKworICAgIENIQVIgcGJ1ZltQVFlfUEJVRl9TSVpFXTsJCS8qIFJlYWQgZnJv bSBwdHksIHdyaXRlIHRvIG5ldCAqLworICAgIENIQVIgZGJ1ZltQVFlfUEJVRl9TSVpFICsgUFRZ X1BCVUZfU0laRSArIDFdOyAvKiBEb3VibGUtc2l6ZSBidWZmZXIgKi8KKyAgICBpbnQgcGJ1Zl9h dmFpbCA9IDA7CQkJLyogUG9pbnRlcnMgZm9yIHBidWYgKi8KKyAgICBpbnQgcGJ1Zl93cml0dGVu ID0gMDsKKworICAgIGludCBwdHlmZCA9IC0xOwkJCS8qIFB0eSBmaWxlIGRlc2NyaXB0b3IgKi8K KyAgICBpbnQgaGF2ZV9uZXQgPSAwOwkJCS8qIFdlIGhhdmUgYSBuZXR3b3JrIGNvbm5lY3Rpb24g Ki8KKyAgICBpbnQgcHR5X2VyciA9IDA7CQkJLyogR290IGVycm9yIG9uIHB0eSAqLworICAgIGlu dCBuZXRfZXJyID0gMDsJCQkvKiBHb3QgZXJyb3Igb24gbmV0ICovCisgICAgaW50IHN0YXR1cyA9 IC0xOwkJCS8qIFB0eSBwcm9jZXNzIGV4aXQgc3RhdHVzICovCisgICAgaW50IHJjID0gMDsJCQkJ LyogT3VyIHJldHVybiBjb2RlICovCisKKyAgICBpbnQgeDEgPSAwLCB4MiA9IDA7CQkJLyogV29y a2Vycy4uLiAqLworICAgIGludCBjLCBuLCBtLCB0LCB4OwkJCS8qIFdvcmtlcnMgKi8KKworICAg IGxvbmcgc2Vjb25kc190b193YWl0ID0gMEw7CQkvKiBzZWxlY3QoKSB0aW1lb3V0ICovCisgICAg c3RydWN0IHRpbWV2YWwgdHYsICp0djI7CQkvKiBGb3Igc2VsZWN0KCkgKi8KKyNpZmRlZiBJTlRT RUxFQ1QKKyAgICBpbnQgaW4sIG91dCwgZXJyOwkJCS8qIEZvciBzZWxlY3QoKSAqLworI2Vsc2UK KyAgICBmZF9zZXQgaW4sIG91dCwgZXJyOworI2VuZGlmIC8qIElOVFNFTEVDVCAqLworICAgIGlu dCBuZmRzID0gMDsJCQkvKiBGb3Igc2VsZWN0KCkgKi8KKworICAgIGludCBwc2V0ID0gMCwgdHNl dCA9IDAsIHBub3RzZXQgPSAwLCB0bm90c2V0ID0gMDsgLyogc3RhdHMvZGVidWdnaW4gb25seSAq LworICAgIGludCByZWFkX25ldF9ieXRlcyA9IDA7CQkvKiBTdGF0cyAqLworICAgIGludCB3cml0 ZV9uZXRfYnl0ZXMgPSAwOwkJLyogU3RhdHMgKi8KKyAgICBpbnQgcmVhZF9wdHlfYnl0ZXMgPSAw OwkJLyogU3RhdHMgKi8KKyAgICBpbnQgd3JpdGVfcHR5X2J5dGVzID0gMDsJCS8qIFN0YXRzICov CisgICAgaW50IGlzX3RuID0gMDsJCQkvKiBURUxORVQgcHJvdG9jb2wgaXMgYWN0aXZlICovCisK KyAgICBpbnQgbWFzdGVyZmQgPSAtMTsKKyAgICBpbnQgc2xhdmVmZCA9IC0xOworI2lmbmRlZiBV U0VfQ0tVUFRZX0MKKyAgICBzdHJ1Y3QgdGVybWlvcyB0ZXJtOworICAgIHN0cnVjdCB3aW5zaXpl IHR3aW47CisgICAgc3RydWN0IHN0cmluZ2FycmF5ICogcTsKKyAgICBjaGFyICoqIGFyZ3MgPSBO VUxMOworI2VuZGlmIC8qIFVTRV9DS1VQVFlfQyAqLworCisgICAgaW5fc3RhdGUgPSAwOwkJCS8q IE5vIHByZXZpb3VzIGNoYXJhY3RlciB5ZXQgKi8KKworICAgIGlmICh0dHlmZCA9PSAtMSkgewor CXByaW50ZigiP1NvcnJ5LCBjb21tdW5pY2F0aW9uIGNoYW5uZWwgaXMgbm90IG9wZW5cbiIpOwor CXJldHVybigwKTsKKyAgICB9IGVsc2UgeworCWhhdmVfbmV0ID0gMTsKKyAgICB9CisgICAgaWYg KG5vcHVzaCkgeworCWRlYnVnKEYxMDAsInR0cHR5Y21kIGZhaWw6IG5vcHVzaCIsIiIsMCk7CisJ cmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoIXMpIHMgPSAiIjsJCQkvKiBEZWZlbnNlIGRlIGJv Z3VzIGFyZ3VtZW50cyAqLworICAgIGlmICghKnMpIHJldHVybigwKTsKKyAgICBwZXhpdHN0YXQg PSAtMTsJCQkvKiBGb3JrIHByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KKworI2lmZGVmIFROQ09ERQor ICAgIGlzX3RuID0gKHhsb2NhbCAmJiBuZXRjb25uICYmIElTX1RFTE5FVCgpKSB8fCAvKiBUZWxu ZXQgcHJvdG9jb2wgYWN0aXZlICovCisJICAgICgheGxvY2FsICYmIHNzdGVsbmV0KTsKKyNlbmRp ZiAvKiBUTkNPREUgKi8KKworICAgIGRlYnVnKEYxMTAsInR0cHR5Y21kIGNvbW1hbmQiLHMsMCk7 CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgdHR5ZmQiLCIiLHR0eWZkKTsKKyAgICBkZWJ1ZyhG MTAxLCJ0dHB0eWNtZCBpc190biIsIiIsaXNfdG4pOworICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k IGNrZXJtaXQgcGlkIiwiIixnZXRwaWQoKSk7CisKKyNpZmRlZiBVU0VfQ0tVUFRZX0MKKyAgICAv KiBDYWxsIGNrdXB0eS5jIG1vZHVsZSB0byBnZXQgYW5kIHNldCB1cCB0aGUgcHR5IGZvcmsgKi8K KyAgICAvKiBmYyAxID09ICJydW4gYW4gZXh0ZXJuYWwgcHJvdG9jb2wiICovCisgICAgZGVidWco RjEwMCwidHRwdHljbWQgdXNpbmcgY2t1cHR5LmMiLCIiLDApOworICAgIGlmIChkb19wdHkoJnB0 eWZkLHMsMSkgPCAwKSB7CS8qIFN0YXJ0IHRoZSBjb21tYW5kIG9uIGEgcHR5ICovCisJZGVidWco RjEwMCwidHRwdHljbWQgZG9fcHR5IGZhaWxzIiwiIiwwKTsKKwlyZXR1cm4oMCk7CisgICAgfQor ICAgIG1hc3RlcmZkID0gcHR5ZmQ7CisgICAgcHR5X21hc3Rlcl9mZCA9IHB0eWZkOworI2lmZGVm IENPTU1FTlQKKyAgICBzbGF2ZWZkID0gcHR5X3NsYXZlX2ZkOwkJLyogVGhpcyBpcyBub3Qgdmlz aWJsZSB0byB1cyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBkZWJ1ZyhGMTExLCJ0dHB0 eWNtZCBwdHlmZCIsIlVTRV9DS1VQVFlfQyIscHR5ZmQpOworICAgIGRlYnVnKEYxMTEsInR0cHR5 Y21kIG1hc3RlcmZkIiwiVVNFX0NLVVBUWV9DIixtYXN0ZXJmZCk7CisgICAgZGVidWcoRjExMSwi dHRwdHljbWQgZm9yayBwaWQiLCJVU0VfQ0tVUFRZX0MiLHB0eV9mb3JrX3BpZCk7CisjaWZuZGVm IFNPTEFSSVMKKyAgICAvKiAiaW9jdGwgaW5hcHByb3ByaWF0ZSBvbiBkZXZpY2UiIGZvciBwdHkg bWFzdGVyICovCisgICAgcHR5X21ha2VfcmF3KG1hc3RlcmZkKTsKKyNlbmRpZiAvKiBTT0xBUklT ICovCisKKyNlbHNlIC8qIFVTRV9DS1VQVFlfQyAqLworCisgICAgZGVidWcoRjEwMCwidHRwdHlj bWQgT1BFTlBUWSIsIiIsMCk7CisgICAgaWYgKHRjZ2V0YXR0cigwLCAmdGVybSkgPT0gLTEpIHsJ LyogR2V0IGNvbnRyb2xsaW5nIHRlcm1pbmFsJ3MgbW9kZXMgKi8KKwlwZXJyb3IoInRjZ2V0YXR0 ciIpOworCXJldHVybigwKTsKKyAgICB9CisgICAgaWYgKGlvY3RsKDAsIFRJT0NHV0lOU1osIChj aGFyICopICZ0d2luKSA9PSAtMSkgeyAvKiBhbmQgd2luZG93IHNpemUgKi8KKwlwZXJyb3IoImlv Y3RsIFRJT0NHV0lOU1oiKTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIGlmIChvcGVucHR5KCZt YXN0ZXJmZCwgJnNsYXZlZmQsIE5VTEwsIE5VTEwsIE5VTEwpID09IC0xKSB7CisJZGVidWcoRjEw MSwidHRwdHljbWQgb3BlbnB0eSBmYWlsZWQgZXJybm8iLCIiLGVycm5vKTsKKwlwZXJyb3IoIm9w ZW50cHkiKTsKKwlyZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG9w ZW5wdHkgbWFzdGVyZmQiLCIiLG1hc3RlcmZkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBv cGVucHR5IHNsYXZlZmQiLCIiLHNsYXZlZmQpOworICAgIHB0eV9tYXN0ZXJfZmQgPSBtYXN0ZXJm ZDsKKyAgICBwdHlfc2xhdmVfZmQgPSBzbGF2ZWZkOworICAgIGRlYnVnKEYxMDEsInR0cHR5Y21k IG9wZW5wdHkgcHR5X21hc3Rlcl9mZCIsIiIscHR5X21hc3Rlcl9mZCk7CisKKyAgICAvKiBQdXQg cHR5IG1hc3RlciBpbiByYXcgbW9kZSBidXQgbGV0IGZvcmtlZCBhcHAgY29udHJvbCB0aGUgc2xh dmUgKi8KKyAgICBwdHlfbWFrZV9yYXcobWFzdGVyZmQpOworCisjaWZkZWYgQ09NTUVOVAorI2lm ZGVmIFRJT0NSRU1PVEUKKyAgICAvKiBUSU9DUkVNT1RFLDAgPSBkaXNhYmxlIGFsbCB0ZXJtaW8g cHJvY2Vzc2luZyAqLworICAgIHggPSBpb2N0bChtYXN0ZXJmZCwgVElPQ1JFTU9URSwgMSk7Cisg ICAgZGVidWcoRjExMSwidHRwdHljbWQgaW9jdGwgVElPQ1JFTU9URSIsY2tpdG9hKHgpLGVycm5v KTsKKyNlbmRpZgkvKiBUSU9DUkVNT1RFICovCisjaWZkZWYgVElPQ1RUWQorICAgIC8qIFRJT0NU VFksMCA9IGRpc2FibGUgYWxsIHRlcm1pbyBwcm9jZXNzaW5nICovCisgICAgeCA9IGlvY3RsKG1h c3RlcmZkLCBUSU9DVFRZLCAwKTsKKyAgICBkZWJ1ZyhGMTExLCJ0dHB0eWNtZCBpb2N0bCBUSU9D VFRZIixja2l0b2EoeCksZXJybm8pOworI2VuZGlmCS8qIFRJT0NUVFkgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisKKyAgICBoYXZlX3B0eSA9IDE7CQkJLyogV2UgaGF2ZSBhbiBvcGVuIHB0eSAq LworICAgIHNhdmVfc2lnY2hsZCA9IHNpZ25hbChTSUdDSExELCBzaWdjaGxkX2hhbmRsZXIpOyAv KiBDYXRjaCBmb3JrIHF1aXQgKi8KKworICAgIHB0eV9mb3JrX3BpZCA9IGZvcmsoKTsJCS8qIE1h a2UgZm9yayBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNt ZCBwdHlfZm9ya19waWQiLCIiLHB0eV9mb3JrX3BpZCk7CisgICAgaWYgKHB0eV9mb3JrX3BpZCA9 PSAtMSkgeworCXBlcnJvcigiZm9yayIpOworCXJldHVybigwKTsKKyAgICB9IGVsc2UgaWYgKHB0 eV9mb3JrX3BpZCA9PSAwKSB7CS8qIEluIG5ldyBmb3JrICovCisJaW50IHg7CisJZGVidWcoRjEw MSwidHRwdHljbWQgbmV3IGZvcmsgcGlkIiwiIixnZXRwaWQoKSk7CisJY2xvc2UobWFzdGVyZmQp OwkJLyogU2xhdmUgcXVhcnRlcnMgbm8gbWFzdGVycyBhbGxvd2VkICovCisJeCA9IHNldHNpZCgp OworCWRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldyBmb3JrIHNldHNpZCIsIiIseCk7CisJaWYgKHgg PT0gLTEpIHsKKwkgICAgcGVycm9yKCJ0dHB0eWNtZCBzZXRzaWQiKTsKKwkgICAgZXhpdCgxKTsK Kwl9CisJc2lnbmFsKFNJR0lOVCxTSUdfSUdOKTsJCS8qIExldCB1cHBlciBmb3JrIGNhdGNoIHRo aXMgKi8KKwkKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgVElPQ1NDVFRZCisJLyogTWFrZSBwdHkg dGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIGZvciB0aGUgcHJvY2VzcyAqLworCS8qIFRISVMgQ0FV U0VTIEFOIElORklOSVRFIFNJR1dJTkNIIElOVEVSUlVQVCBMT09QICovCisJeCA9IGlvY3RsKHNs YXZlZmQsIFRJT0NTQ1RUWSwgTlVMTCk7CisJZGVidWcoRjEwMSwidHRwdHljbWQgVElPQ1NDVFRZ IiwiIix4KTsKKyNlbmRpZgkvKiBUSU9DU0NUVFkgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisK KwkvKiBJbml0aWFsaXplIHNsYXZlIHB0eSBtb2RlcyBhbmQgc2l6ZSB0byB0aG9zZSBvZiBvdXIg dGVybWluYWwgKi8KKwlpZiAodGNzZXRhdHRyKHNsYXZlZmQsIFRDU0FOT1csICZ0ZXJtKSA9PSAt MSkgeworCSAgICBwZXJyb3IoInR0cHR5Y21kIHRjc2V0YXR0ciIpOworCSAgICBleGl0KDEpOwor CX0KKwlpZiAoaW9jdGwoc2xhdmVmZCwgVElPQ1NXSU5TWiwgJnR3aW4pID09IC0xKSB7CisJICAg IHBlcnJvcigidHRwdHljbWQgaW9jdGwiKTsKKwkgICAgZXhpdCgxKTsKKwl9CisjaWZkZWYgQ09N TUVOVAorI2lmZGVmIFRJT0NOT1RUWQorCS8qIERpc2Fzc29jaWF0ZSB0aGlzIHByb2Nlc3MgZnJv bSBpdHMgdGVybWluYWwgKi8KKwkvKiBUSElTIEhBUyBOTyBFRkZFQ1QgKi8KKwl4ID0gaW9jdGwo c2xhdmVmZCwgVElPQ05PVFRZLCBOVUxMKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBUSU9DTk9U VFkiLCIiLHgpOworI2VuZGlmCS8qIFRJT0NOT1RUWSAqLworI2VuZGlmCS8qIENPTU1FTlQgKi8K KworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBTSUdUVE9VCQorCS8qIElnbm9yZSB0ZXJtaW5hbCBv dXRwdXQgaW50ZXJydXB0cyAqLworCS8qIFRISVMgSEFTIE5PIEVGRkVDVCAqLworCWRlYnVnKEYx MDAsInR0cHR5Y21kIGlnbm9yaW5nIFNJR1RUT1UiLCIiLDApOworCXNpZ25hbChTSUdUVE9VLCBT SUdfSUdOKTsKKyNlbmRpZgkvKiBTSUdUVE9VICovCisjaWZkZWYgU0lHVFNUUAkKKwkvKiBJZ25v cmUgdGVybWluYWwgb3V0cHV0IGludGVycnVwdHMgKi8KKwkvKiBUSElTIEhBUyBOTyBFRkZFQ1Qg Ki8KKwlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBpZ25vcmluZyBTSUdUU1RQIiwiIiwwKTsKKwlzaWdu YWwoU0lHVFNUUCwgU0lHX0lHTik7CisjZW5kaWYJLyogU0lHVFNUUCAqLworI2VuZGlmCS8qIENP TU1FTlQgKi8KKworCXB0eV9tYWtlX3JhdyhzbGF2ZWZkKTsJCS8qIFB1dCBpdCBpbiByYXdtb2Rl ICovCisKKwllcnJubyA9IDA7CisJaWYgKGR1cDIoc2xhdmVmZCwgU1RESU5fRklMRU5PKSAhPSBT VERJTl9GSUxFTk8gfHwKKwkgICAgZHVwMihzbGF2ZWZkLCBTVERPVVRfRklMRU5PKSAhPSBTVERP VVRfRklMRU5PKSB7CisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldyBmb3JrIGR1cDIgZXJy b3IiLCIiLGVycm5vKTsKKwkgICAgcGVycm9yKCJ0dHB0eWNtZCBkdXAyIik7CisJICAgIGV4aXQo MSk7CisJfQorCWRlYnVnKEYxMDAsInR0cHR5Y21kIG5ldyBmb3JrIGR1cDIgb2siLCIiLDApOwor CisJLyogUGFyc2UgZXh0ZXJuYWwgcHJvdG9jb2wgY29tbWFuZCBsaW5lICovCisJcSA9IGNrc3Bs aXQoMSwwLHMsTlVMTCwiXFwlW10mJCstLz0qXl9AIXt9Lzw+fC4jfidgOjs/Iiw3LDAsMCk7CisJ aWYgKCFxKSB7CisJICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIGNrc3BsaXQgZmFpbGVkIiwiIiww KTsKKwkgICAgZXhpdCgxKTsKKwl9IGVsc2UgeworCSAgICBpbnQgaSwgbjsKKwkgICAgZGVidWco RjEwMCwidHRwdHljbWQgY2tzcGxpdCBvayIsIiIsMCk7CisJICAgIG4gPSBxLT5hX3NpemU7CisJ ICAgIGFyZ3MgPSBxLT5hX2hlYWQgKyAxOworCSAgICBmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykg eworCQlpZiAoIWFyZ3NbaV0pIHsKKwkJICAgIGJyZWFrOworCQl9IGVsc2UgeworCQkgICAgLyog c29tZXRpbWVzIGNrc3BsaXQoKSBkb2Vzbid0IHRlcm1pbmF0ZSB0aGUgbGlzdCAqLworCQkgICAg aWYgKChpID09IG4pICYmIGFyZ3NbaV0pIHsKKwkJCWlmICgoaW50KXN0cmxlbihhcmdzW2ldKSA9 PSAwKQorCQkJICBtYWtlc3RyKCYoYXJnc1tpXSksTlVMTCk7CisJCSAgICB9CisJCX0KKwkgICAg fQkgICAgCisJfQorI2lmZGVmIENPTU1FTlQKKy8qCisgIFB1dHRpbmcgdGhlIHNsYXZlIHB0eSBp biByYXdtb2RlIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlCisgIGV4dGVybmFs IHByb3RvY29sIHByb2dyYW0gaXMgc3VwcG9zZWQgdG8gZG8gdGhhdCBpdHNlbGYuICBZZXQgZG9p bmcgdGhpcworICBoZXJlIGN1dHMgZG93biBvbiBabW9kZW0gYmluYXJ5LWZpbGUgdHJhbnNtaXNz aW9uIGVycm9ycyBieSAzMC01MCUgYnV0CisgIHN0aWxsIGRvZXNuJ3QgZWxpbWluYXRlIHRoZW0u CisqLworCXB0eV9tYWtlX3JhdyhTVERJTl9GSUxFTk8pOworCXB0eV9tYWtlX3JhdyhTVERPVVRf RklMRU5PKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKwlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCBl eGVjdnAnaW5nIGV4dGVybmFsIHByb3RvY29sIiwiIiwwKTsKKwlleGVjdnAoYXJnc1swXSxhcmdz KTsKKwlwZXJyb3IoImV4ZWN2cCBmYWlsZWQiKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBleGVj dnAgZmFpbGVkIiwiIixlcnJubyk7CisJY2xvc2Uoc2xhdmVmZCk7CisJZXhpdCgxKTsKKyAgICB9 IAorICAgIC8qICh0aGVyZSBhcmUgYmV0dGVyIHdheXMgdG8gZG8gdGhpcy4uLikgKi8KKyAgICBt c2xlZXAoMTAwMCk7CQkgIC8qIE1ha2UgcGFyZW50IHdhaXQgZm9yIGNoaWxkIHRvIGJlIHJlYWR5 ICovCisgICAgcHR5ZmQgPSBtYXN0ZXJmZDsJCQkvKiBXZSB0YWxrIHRvIHRoZSBtYXN0ZXIgKi8K KworI2VuZGlmIC8qIFVTRV9DS1VQVFlfQyAqLworCisgICAgZGVidWcoRjEwMSwidHRwdHljbWQg cHR5ZmQiLCIiLHB0eWZkKTsKKyAgICBpZiAocHR5ZmQgPCAwKSB7CisJcHJpbnRmKCI/RmFpbHVy ZSB0byBnZXQgcHR5XG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBoYXZlX3B0eSA9IDE7 CSAgICAgIC8qIFdlIGhhdmUgYW4gb3BlbiBwdHkgb3Igd2Ugd291bGRuJ3QgaGUgaGVyZSAqLwor CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgUFRZX1BCVUZfU0laRSIsIiIsUFRZX1BCVUZfU0la RSk7CisgICAgZGVidWcoRjEwMSwidHRwdHljbWQgUFRZX1RCVUZfU0laRSIsIiIsUFRZX1RCVUZf U0laRSk7CisKKyNpZmRlZiBQVFlfVVNFX05ERUxBWQorICAgIC8qIAorICAgICAgIE5PVEU6IElm IHNlbGVjdCgpIGFuZCBpb2N0bChwdHlmZCxGSU9OUkVBRCwmbikgcmV0dXJuIHRydWUgaW5kaWNh dGlvbnMKKyAgICAgICBvbiB0aGUgcHR5LCB3ZSBkb24ndCBuZWVkIG5vbmJsb2NraW5nIHJlYWRz LiAgUGVyZm9ybWFuY2Ugb2YgZWl0aGVyCisgICAgICAgbWV0aG9kIHNlZW1zIHRvIGJlIGFib3V0 IHRoZSBzYW1lLCBzbyB1c2Ugd2hhdGV2ZXIgd29ya3MuCisgICAgKi8KKyAgICBlcnJubyA9IDA7 CisgICAgeCA9IGZjbnRsKHB0eWZkLEZfU0VURkwsZmNudGwocHR5ZmQsRl9HRVRGTCwgMCl8T19O REVMQVkpOworICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCisJICAgICAidHRwdHljbWQgc2V0IE9f TkRFTEFZIGVycm5vPSIsCisJICAgICBja2l0b2EoZXJybm8pLAorCSAgICAgIiBmY250bD0iLAor CSAgICAgY2tpdG9hKHgpKTsKKyAgICBkZWJ1ZyhGMTAwLG1zZ2J1ZiwiIiwwKTsKKyNlbmRpZiAv KiBQVFlfVVNFX05ERUxBWSAqLworCisjaWZkZWYgQ09NTUVOVAorLyogTm90IG5lY2Vzc2FyeSwg dGhlIHByb3RvY29sIG1vZHVsZSBhbHJlYWR5IGRpZCB0aGlzICovCisKKyNpZmRlZiBVU0VfQ0ZN QUtFUkFXCisgICAgaWYgKHRjZ2V0YXR0cih0dHlmZCwgJnRlcm0pID4gLTEpIHsKKwljZm1ha2Vy YXcoJnRlcm0pOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldCBjZm1ha2VyYXcgZXJybm8iLCIi LGVycm5vKTsKKwl4IHRjc2V0YXR0cih0dHlmZCwgVENTQU5PVywgJnRlcm0pOworCWRlYnVnKEYx MDEsInR0cHR5Y21kIG5ldCB0Y3NldGF0dHIiLCIiLHgpOworCWRlYnVnKEYxMDEsInR0cHR5Y21k IG5ldCB0Y3NldGF0dHIiLCIiLGVycm5vKTsKKyAgICB9CisjZWxzZQorICAgIGlmIChsb2NhbCkJ CQkJLyogUHV0IG5ldHdvcmsgY29ubmVjdGlvbiBpbiAqLworICAgICAgdHRwa3QodHRzcGVlZCx0 dGZsb3csdHRwcnR5KTsJLyogInBhY2tldCBtb2RlIi4gKi8KKyAgICBlbHNlCisgICAgICBjb25i aW4oKGNoYXIpZXNjY2hyKTsJCS8qIE9SLi4uIHB0eV9tYWtlX3JhdygwKSAqLworI2VuZGlmIC8q IFVTRV9DRk1BS0VSQVcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBUTkNPREUK KyAgICBpZiAoaXNfdG4pIHsKKyAgICAgIGRlYnVnKEYxMDEsIjw8PCB0dHB0eWNtZCBURUxPUFRf TUVfQklOQVJZIiwiIixURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpOworICAgICAgZGVidWcoRjEw MSwiPDw8IHR0cHR5Y21kIFRFTE9QVF9VX0JJTkFSWSIsIiIsVEVMT1BUX1UoVEVMT1BUX0JJTkFS WSkpOworICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKworICAgIGRlYnVnKEYxMDEsInR0cHR5 Y21kIGVudGVyaW5nIGxvb3AgLSBzZWNvbmRzX3RvX3dhaXQiLCIiLHNlY29uZHNfdG9fd2FpdCk7 CisKKyAgICB3aGlsZSAoaGF2ZV9wdHkgfHwgaGF2ZV9uZXQpIHsKKwlGRF9aRVJPKCZpbik7CQkJ LyogSW5pdGlhbGl6ZSBzZWxlY3QoKSBzdHJ1Y3RzICovCisJRkRfWkVSTygmb3V0KTsKKwlGRF9a RVJPKCZlcnIpOwkJCS8qIChub3QgdXNlZCBiZWNhdXNlIHVzZWxlc3MpICovCisJbmZkcyA9IC0x OworCisJZGVidWcoRjEwMSwidHRwdHljbWQgbG9vcCB0b3AgaGF2ZV9wdHkiLCIiLGhhdmVfcHR5 KTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBsb29wIHRvcCBoYXZlX25ldCIsIiIsaGF2ZV9uZXQp OworCisJLyogUHR5IGlzIG9wZW4gYW5kIHdlIGhhdmUgcm9vbSB0byByZWFkIGZyb20gaXQ/ICov CisJaWYgKGhhdmVfcHR5ICYmIHBidWZfYXZhaWwgPCBQVFlfUEJVRl9TSVpFKSB7CisJICAgIGRl YnVnKEYxMDAsInR0cHR5Y21kIEZEX1NFVCBwdHlmZCBpbiIsIiIsMCk7CisgICAgICAgICAgICBG RF9TRVQocHR5ZmQsICZpbik7CisJICAgIG5mZHMgPSBwdHlmZDsKKyAgICAgICAgfQorCS8qIE5l dHdvcmsgaXMgb3BlbiBhbmQgd2UgaGF2ZSByb29tIHRvIHJlYWQgZnJvbSBpdD8gKi8KKyAgICAg ICAgaWYgKGhhdmVfbmV0ICYmIGhhdmVfcHR5ICYmIHRidWZfYXZhaWwgPCBQVFlfVEJVRl9TSVpF KSB7CisJICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX1NFVCB0dHlmZCBpbiIsIiIsMCk7Cisg ICAgICAgICAgICBGRF9TRVQodHR5ZmQsICZpbik7CisJICAgIGlmICh0dHlmZCA+IG5mZHMpIG5m ZHMgPSB0dHlmZDsKKyAgICAgICAgfQorCS8qIFB0eSBpcyBvcGVuIGFuZCB3ZSBoYXZlIHN0dWZm IHRvIHdyaXRlIHRvIGl0PyAqLworICAgICAgICBpZiAoaGF2ZV9wdHkgJiYgdGJ1Zl9hdmFpbCAt IHRidWZfd3JpdHRlbiA+IDApIHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHB0 eWZkIG91dCIsIiIsMCk7CisgICAgICAgICAgICBGRF9TRVQgKHB0eWZkLCAmb3V0KTsKKwkgICAg aWYgKHB0eWZkID4gbmZkcykgbmZkcyA9IHB0eWZkOworICAgICAgICB9CisJLyogTmV0IGlzIG9w ZW4gYW5kIHdlIGhhdmUgc3R1ZmYgdG8gd3JpdGUgdG8gaXQ/ICovCisJZGVidWcoRjEwMSwidHRw dHljbWQgcGJ1Zl9hdmFpbC1wYnVmX3dyaXR0ZW4iLCIiLAorCSAgICAgIHBidWZfYXZhaWwgLSBw YnVmX3dyaXR0ZW4pOworICAgICAgICBpZiAoaGF2ZV9uZXQgJiYgcGJ1Zl9hdmFpbCAtIHBidWZf d3JpdHRlbiA+IDApIHsKKwkgICAgZGVidWcoRjEwMCwidHRwdHljbWQgRkRfU0VUIHR0eWZkIG91 dCIsIiIsMCk7CisgICAgICAgICAgICBGRF9TRVQgKHR0eWZkLCAmb3V0KTsKKwkgICAgaWYgKHR0 eWZkID4gbmZkcykgbmZkcyA9IHR0eWZkOworICAgICAgICB9CisJLyogV2UgZG9uJ3QgdXNlIGVy ciBiZWNhdXNlIGl0J3Mgbm90IHJlYWxseSBmb3IgZXJyb3JzLCAqLworCS8qIGJ1dCBmb3Igb3V0 IG9mIGJhbmQgZGF0YSBvbiB0aGUgVENQIHNvY2tldCwgd2hpY2gsIGlmIGl0IGlzICovCisJLyog dG8gYmUgaGFuZGxlZCBhdCBhbGwsIGlzIGhhbmRsZWQgaW4gdGhlIHR0KigpIHJvdXRpbmVzICov CisKKwluZmRzKys7CQkJCS8qIDAtYmFzZWQgdG8gMS1iYXNlZCAqLworCWRlYnVnKEYxMDEsInR0 cHR5Y21kIG5mZHMiLCIiLG5mZHMpOworCWlmICghbmZkcykgeworCSAgICBkZWJ1ZyhGMTAwLCJ0 dHB0eWNtZCBOTyBGRHMgc2V0IGZvciBzZWxlY3QiLCIiLDApOworCSAgICBpZiAoaGF2ZV9wdHkp IHsKKwkJLyogVGhpcyBpcyBub3QgcmlnaHQgLS0gc2xlZXBpbmcgd29uJ3QgYWNjb21wbGlzaCBh bnl0aGluZyAqLworCQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBtc2xlZXAiLCIiLDEwMCk7CisJCW1z bGVlcCgxMDApOwkgICAgCisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMDAsInR0cHR5Y21kIG5v IHB0eSAtIHF1aXR0aW5nIGxvb3AiLCIiLDApOworCQlicmVhazsKKwkgICAgfQorCX0KKwllcnJu byA9IDA7CisKKwlpZiAoc2Vjb25kc190b193YWl0ID4gMEwpIHsJLyogVGltZW91dCBpbiBjYXNl IG5vdGhpbmcgaGFwcGVucyAqLworCSAgICB0di50dl9zZWMgPSBzZWNvbmRzX3RvX3dhaXQ7IC8q IGZvciBhIGxvbmcgdGltZSAqLworCSAgICB0di50dl91c2VjID0gMEw7CQkKKwkgICAgdHYyID0g JnR2OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHYyID0gTlVMTDsKKwl9CisJeCA9 IHNlbGVjdChuZmRzLCAmaW4sICZvdXQsIE5VTEwsIHR2Mik7CisJZGVidWcoRjEwMSwidHRwdHlj bWQgc2VsZWN0IiwiIix4KTsKKwlpZiAoeCA8IDApIHsKKwkgICAgaWYgKGVycm5vID09IEVJTlRS KQorCSAgICAgIGNvbnRpbnVlOworCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBzZWxlY3QgZXJy b3IiLCIiLGVycm5vKTsKKwkgICAgYnJlYWs7CisJfQorCWlmICh4ID09IDApIHsKKwkgICAgZGVi dWcoRjEwMSwidHRwdHljbWQgKysrIHNlbGVjdCB0aW1lb3V0IiwiIixzZWNvbmRzX3RvX3dhaXQp OyAKKwkgICAgaWYgKGhhdmVfcHR5KSB7CisJCXN0YXR1cyA9IHB0eV9nZXRfc3RhdHVzKHB0eWZk LHB0eV9mb3JrX3BpZCk7CisJCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEEi LCIiLHN0YXR1cyk7CisJCWlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOworCQlo YXZlX3B0eSA9IDA7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCS8qIFdlIHdhbnQgdG8gaGFu ZGxlIGFueSBwZW5kaW5nIHdyaXRlcyBmaXJzdCB0byBtYWtlIHJvb20gKi8KKwkvKiBmb3IgbmV3 IGluY29taW5nLiAqLworCisJaWYgKEZEX0lTU0VUKHR0eWZkLCAmb3V0KSkgewkvKiBDYW4gd3Jp dGUgdG8gbmV0PyAqLworCSAgICBDSEFSICogczsKKwkgICAgcyA9IHBidWYgKyBwYnVmX3dyaXR0 ZW47CS8qIEN1cnJlbnQgc3BvdCBmb3Igc2VuZGluZyAqLworI2lmZGVmIFROQ09ERQorCSAgICBp ZiAoaXNfdG4pIHsJCS8qIHR0b2woKSBkb2Vzbid0IGRvdWJsZSBJQUNzICovCisJCUNIQVIgYzsJ CQkvKiBSZXdyaXRlIHN0cmluZyB3aXRoIElBQ3MgZG91YmxlZCAqLworCQlpbnQgaTsKKwkJcyA9 IHBidWYgKyBwYnVmX3dyaXR0ZW47IC8qIFNvdXJjZSAqLworCQl4ID0gMDsJCSAJIC8qIENvdW50 ICovCisJCWZvciAoaSA9IDA7IGkgPCBwYnVmX2F2YWlsIC0gcGJ1Zl93cml0dGVuOyBpKyspIHsK KwkJICAgIGMgPSBzW2ldOwkJLyogTmV4dCBjaGFyYWN0ZXIgKi8KKwkJICAgIGlmIChjID09IElB QykgewkvKiBJZiBpdCdzIElBQyAqLworCQkJZGJ1Zlt4KytdID0gYzsJLyogcHV0IGFub3RoZXIg b25lICovCisJCQlkZWJ1ZyhGMDAwLCI+Pj4gUVVPVEVEIElBQyIsIiIsYyk7CisJCSAgICB9IGVs c2UgaWYgKGMgIT0gMHgwYSAmJiBvdXRfcHJldiA9PSAweDBkKSB7CS8qIEJhcmUgQ1IgKi8KKwkJ CWlmICghVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpKSB7IC8qIE5WVCBydWxlICovCisJCQkgICAg YyA9IDB4MDA7CisJCQkgICAgZGJ1Zlt4KytdID0gYzsKKwkJCSAgICBkZWJ1ZyhGMDAwLCI+Pj4g Q1ItTlVMIiwiIixjKTsKKwkJCX0JCQkKKwkJICAgIH0KKwkJICAgIGRidWZbeCsrXSA9IGM7CS8q IENvcHkgYW5kIGNvdW50IGl0ICovCisJCSAgICBkZWJ1ZyhGMDAwLCI+Pj4gY2hhciIsY2tpdG9h KGluX3N0YXRlKSxjKTsKKwkJICAgIG91dF9wcmV2ID0gYzsKKwkJfQorCQlzID0gZGJ1ZjsJCS8q IE5ldyBzb3VyY2UgKi8KKwkgICAgfSBlbHNlCisjZW5kaWYgLyogVE5DT0RFICovCisJICAgICAg eCA9IHBidWZfYXZhaWwgLSBwYnVmX3dyaXR0ZW47IC8qIEhvdyBtdWNoIHRvIHNlbmQgKi8KKwor CSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBieXRlcyB0byBzZW5kIiwiIix4KTsKKwkgICAgeCA9 IHR0b2wocywgeCk7CisJICAgIGRlYnVnKEYxMDEsIj4+PiB0dG9sIiwiIix4KTsKKwkgICAgaWYg KHggPCAwKSB7CisJCW5ldF9lcnIrKzsKKwkJZGVidWcoRjExMSwidHRwdHljbWQgdHRvbCBlcnJv ciIsY2tpdG9hKHgpLGVycm5vKTsKKwkJeCA9IDA7CisJICAgIH0KKwkgICAgd3JpdGVfbmV0X2J5 dGVzICs9IHg7CisJICAgIHBidWZfd3JpdHRlbiArPSB4OworCX0KKwlpZiAoRkRfSVNTRVQocHR5 ZmQsICZvdXQpKSB7CS8qIENhbiB3cml0ZSB0byBwdHk/ICovCisJICAgIGRlYnVnKEYxMDAsInR0 cHR5Y21kIEZEX0lTU0VUIHB0eWZkIG91dCIsIiIsMCk7CisJICAgIGVycm5vID0gMDsKKyNpZm5k ZWYgQ09NTUVOVAorCSAgICB4ID0gd3JpdGUocHR5ZmQsdGJ1ZiArIHRidWZfd3JpdHRlbix0YnVm X2F2YWlsIC0gdGJ1Zl93cml0dGVuKTsKKyNlbHNlCisJICAgIC8qIEJ5dGUgbG9vcCB0byBydWxl IG91dCBkYXRhIG92ZXJydW5zIGluIHRoZSBwdHkgKi8KKwkgICAgLyogKGl0IG1ha2VzIG5vIGRp ZmZlcmVuY2UpICovCisJICAgIHsKKwkJY2hhciAqcCA9IHRidWYrdGJ1Zl93cml0dGVuOworCQlp bnQgbiA9IHRidWZfYXZhaWwgLSB0YnVmX3dyaXR0ZW47CisJCWZvciAoeCA9IDA7IHggPCBuOyB4 KyspIHsKKwkJICAgIG1zbGVlcCgxMCk7CisJCSAgICBpZiAod3JpdGUocHR5ZmQsJihwW3hdKSwx KSA8IDApCisJCSAgICAgIGJyZWFrOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICov CisJICAgIGRlYnVnKEYxMTEsInR0cHR5Y21kIHB0eWZkIHdyaXRlIixja2l0b2EoZXJybm8pLHgp OworCSAgICBpZiAoeCA+IDApIHsKKwkJdGJ1Zl93cml0dGVuICs9IHg7CisJCXdyaXRlX3B0eV9i eXRlcyArPSB4OworCSAgICB9IGVsc2UgeworCQl4ID0gMDsKKwkJcHR5X2VycisrOworCQlpZiAo cGV4aXRzdGF0IDwgMCkgeworCQkgICAgc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5 X2ZvcmtfcGlkKTsKKwkJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEIi LCIiLHN0YXR1cyk7CisJCSAgICBpZiAoc3RhdHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsK KwkJICAgIGhhdmVfcHR5ID0gMDsKKwkJfQorCQlkZWJ1ZyhGMTAwLCJ0dHB0eWNtZCArKysgcHR5 ZmQgd3JpdGUgZXJyb3IiLCIiLDApOworCSAgICB9CisJfQorCWlmIChGRF9JU1NFVCh0dHlmZCwg JmluKSkgewkvKiBDYW4gcmVhZCBmcm9tIG5ldD8gKi8KKwkgICAgdHNldCsrOworCSAgICBkZWJ1 ZyhGMTAwLCJ0dHB0eWNtZCBGRF9JU1NFVCB0dHlmZCBpbiIsIiIsMCk7CisJICAgIG4gPSBpbl9j aGsoMSx0dHlmZCk7CisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGluX2Noayh0dHlmZCkiLCIi LG4pOyAKKwkgICAgaWYgKG4gPCAwIHx8IHR0eWZkID09IC0xKSB7CisJCWRlYnVnKEYxMDEsInR0 cHR5Y21kICsrKyB0dHlmZCBlcnJubyIsIiIsZXJybm8pOworCQluZXRfZXJyKys7CisJICAgIH0g ZWxzZSBpZiAobiA+IDApIHsKKwkJaWYgKG4gPiBQVFlfVEJVRl9TSVpFIC0gdGJ1Zl9hdmFpbCkK KwkJICBuID0gUFRZX1RCVUZfU0laRSAtIHRidWZfYXZhaWw7CisJCWRlYnVnKEYxMDEsInR0cHR5 Y21kIG5ldCByZWFkIHNpemUgYWRqdXN0ZWQiLCIiLG4pOyAKKwkJaWYgKHhsb2NhbCAmJiBuZXRj b25uKSB7CisJCSAgICAvKgorCQkgICAgICBXZSBoYXZlIHRvIHVzZSBhIGJ5dGUgbG9vcCBoZXJl IGJlY2F1c2UgdHR4aW4oKQorCQkgICAgICBkb2VzIG5vdCBkZWNyeXB0IG9yLCBmb3IgdGhhdCBt YXR0ZXIsIGhhbmRsZSBUZWxuZXQuCisJCSAgICAqLworCQkgICAgaW50IGM7CisJCSAgICBDSEFS ICogcDsKKwkJICAgIHAgPSB0YnVmICsgdGJ1Zl9hdmFpbDsKKwkJICAgIGZvciAoeCA9IDA7IHgg PCBuOyB4KyspIHsKKwkJCWlmICgoYyA9IHR0aW5jKDApKSA8IDApCisJCQkgIGJyZWFrOworCQkJ aWYgKCFpc190bikgewkvKiBOb3QgVGVsbmV0IC0ga2VlcCBhbGwgYnl0ZXMgKi8KKwkJCSAgICAq cCsrID0gKENIQVIpYzsKKwkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgY2hhciIsIiIsYyk7CisjaWZk ZWYgVE5DT0RFCisJCQl9IGVsc2UgewkvKiBUZWxuZXQgLSBtdXN0IGhhbmRsZSBJQUMgYW5kIE5W VCAqLworCQkJICAgIGRlYnVnKEYwMDAsIjw8PCBjaGFyIixja2l0b2EoaW5fc3RhdGUpLGMpOwor CQkJICAgIHN3aXRjaCAoYykgeworCQkJICAgICAgY2FzZSAweDAwOiAvKiBOVUwgKi8KKwkJCQlp ZiAoaW5fc3RhdGUgPT0gSEFWRV9DUikgeworCQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgU0tJUCIs IiIsYyk7CisJCQkJfSBlbHNlIHsKKwkJCQkgICAgKnArKyA9IGM7CisJCQkJICAgIGRlYnVnKEYw MDAsIjw8PCBLZWVwIiwiIixjKTsKKwkJCQl9CisJCQkJaW5fc3RhdGUgPSAwOworCQkJCWJyZWFr OworCQkJICAgICAgY2FzZSAweDBkOiAvKiBDUiAqLworCQkJCWlmICghVEVMT1BUX1UoVEVMT1BU X0JJTkFSWSkpCisJCQkJICBpbl9zdGF0ZSA9IEhBVkVfQ1I7CisJCQkJKnArKyA9IGM7CisJCQkJ ZGVidWcoRjAwMCwiPDw8IEtlZXAiLCIiLGMpOworCQkJCWJyZWFrOworI2lmZGVmIENPTU1FTlQK KwkJCSAgICAgIGNhc2UgMHgwZjogLyogQ3RybC1PICovCisJCQkgICAgICBjYXNlIDB4MTY6IC8q IEN0cmwtViAqLworCQkJCSpwKysgPSAweDE2OworCQkJCSpwKysgPSBjOworCQkJCWRlYnVnKEYw MDAsIjw8PCBRVU9UIiwiIixjKTsKKwkJCQlicmVhazsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJ CQkgICAgICBjYXNlIDB4ZmY6IC8qIElBQyAqLworCQkJCWlmIChpbl9zdGF0ZSA9PSBIQVZFX0lB QykgeworCQkJCSAgICBkZWJ1ZyhGMDAwLCI8PDwgS0VFUCIsIiIsYyk7CisJCQkJICAgICpwKysg PSBjOworCQkJCSAgICBpbl9zdGF0ZSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkgICAgZGVidWco RjAwMCwiPDw8IFNLSVAiLCIiLGMpOworCQkJCSAgICBpbl9zdGF0ZSA9IEhBVkVfSUFDOworCQkJ CX0KKwkJCQlicmVhazsKKwkJCSAgICAgIGRlZmF1bHQ6CS8qIEFsbCBvdGhlcnMgKi8KKwkJCQlp ZiAoaW5fc3RhdGUgPT0gSEFWRV9JQUMpIHsKKyNpZmRlZiBDT01NRU5UCisvKgorICB0bl9kb29w KCkgd2lsbCBjb25zdW1lIGFuIHVua25vd24gbnVtYmVyIG9mIGJ5dGVzIGFuZCB3ZSdsbCBvdmVy c2hvb3QKKyAgdGhlIGZvci1sb29wLiAgVGhlIG9ubHkgVGVsbmV0IGNvbW1hbmQgSSd2ZSBldmVy IHNlZW4gYXJyaXZlIGhlcmUgaXMKKyAgYSBEYXRhIE1hcmssIHdoaWNoIGNvbWVzIHdoZW4gdGhl IHJlbW90ZSBwcm90b2NvbCBleGl0cyBhbmQgdGhlIHJlbW90ZQorICBqb2IgcmV0dXJucyB0byBp dHMgc2hlbGwgcHJvbXB0LiAgT24gdGhlIGFzc3VtcHRpb24gaXQncyBhIDEtYnl0ZSBjb21tYW5k LAorICB3ZSBkb24ndCB3cml0ZSBvdXQgdGhlIElBQyBvciB0aGUgY29tbWFuZCwgYW5kIHdlIGNs ZWFyIHRoZSBzdGF0ZS4gIElmCisgIHdlIGNhbGxlZCB0bl9kb29wKCkgd2UnZCBoYXZlIG5vIHdh eSBvZiBrbm93aW5nIGhvdyBtYW55IGJ5dGVzIGl0IHRvb2sKKyAgZnJvbSB0aGUgaW5wdXQgc3Ry ZWFtLgorKi8KKwkJCQkgICAgaW50IHh4OworCQkJCSAgICB4eCA9IHRuX2Rvb3AoKENIQVIpYyxk dXBsZXgsdHRpbmMpOworCQkJCSAgICBkZWJ1ZyhGMTExLCI8PDwgRE9PUCIsY2tjdG9hKGMpLHh4 KTsKKyNlbHNlCisJCQkJICAgIGRlYnVnKEYxMDEsIjw8PCBET09QIiwiIixjKTsKKyNlbmRpZgkv KiBDT01NRU5UICovCisJCQkJICAgIGluX3N0YXRlID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCSAg ICAqcCsrID0gYzsKKwkJCQkgICAgZGVidWcoRjAwMCwiPDw8IGtlZXAiLCIiLGMpOworCQkJCSAg ICBpbl9zdGF0ZSA9IDA7CisJCQkJfQorCQkJICAgIH0KKyNlbmRpZgkvKiBUTkNPREUgKi8KKwkJ CX0KKwkJICAgIH0KKwkJICAgIGNrbWFrbXNnKG1zZ2J1Ziw1MDAsCisJCQkgICAgICJ0dHB0eWNt ZCByZWFkIG5ldCBbdHRpbmMgbG9vcF0gZXJybm89IiwKKwkJCSAgICAgY2tpdG9hKGVycm5vKSwK KwkJCSAgICAgIiBjb3VudD0iLAorCQkJICAgICBja2l0b2EoeCkpOworCQkgICAgZGVidWcoRjEw MCxtc2didWYsIiIsMCk7CisJCX0gZWxzZSB7CisJCSAgICB4ID0gdHR4aW4obix0YnVmK3RidWZf YXZhaWwpOworCQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgdHR4aW4geCIsIiIseCk7IAorCQl9 CisKKwkJaWYgKHggPCAwKSB7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCByZWFkIG5ldCBl cnJvciIsIiIseCk7CisJCSAgICBuZXRfZXJyKys7CisJCX0KKwkJdGJ1Zl9hdmFpbCArPSB4Owor CQlyZWFkX25ldF9ieXRlcyArPSB4OworCSAgICB9CisKKwl9IGVsc2UKKwkgIHRub3RzZXQrKzsK KworCWlmIChGRF9JU1NFVChwdHlmZCwgJmluKSkgewkvKiBSZWFkIGZyb20gcHR5PyAqLworCSAg ICBwc2V0Kys7CisJICAgIGRlYnVnKEYxMDAsInR0cHR5Y21kIEZEX0lTU0VUIHB0eWZkIGluIiwi IiwwKTsKKyNpZmRlZiBQVFlfVVNFX05ERUxBWQorCSAgICBuID0gUFRZX1BCVUZfU0laRTsKKyNl bHNlCisJICAgIC8qCisJICAgICAgVGhpcyBkb2VzIG5vdCB3b3JrIG9uIG5vbmJsb2NraW5nIGNo YW5uZWxzCisJICAgICAgb24gY2VydGFpbiBwbGF0Zm9ybXMgc3VjaCBhcyBOZXRCU0QuCisJICAg ICovCisJICAgIG4gPSBwdHlfY2hrKHB0eWZkKTsKKyNlbmRpZiAvKiBQVFlfVVNFX05ERUxBWSAq LworCSAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfY2hrKCkgbiIsIiIsbik7IAorCisJICAg IGlmIChuIDwgMCkKKwkgICAgICBuID0gMDsKKwkgICAgaWYgKG4gPiAwKSB7CisJCWlmIChuID4g UFRZX1BCVUZfU0laRSAtIHBidWZfYXZhaWwpCisJCSAgbiA9IFBUWV9QQlVGX1NJWkUgLSBwYnVm X2F2YWlsOworCQlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHkgcmVhZCBzaXplIGFkanVzdGVkIiwi IixuKTsgCisJCWVycm5vID0gMDsKKwkJeCA9IHJlYWQocHR5ZmQscGJ1ZitwYnVmX2F2YWlsLG4p OworI2lmZGVmIERFQlVHCisJCWlmIChkZWJsb2cpIHsKKwkJICAgIGNrbWFrbXNnKG1zZ2J1Ziw1 MDAsCisJCQkgICAgICJ0dHB0eWNtZCByZWFkIHB0eSBlcnJubz0iLAorCQkJICAgICBja2l0b2Eo ZXJybm8pLAorCQkJICAgICAiIGNvdW50PSIsCisJCQkgICAgIGNraXRvYSh4KSk7CisJCSAgICBk ZWJ1ZyhGMTAwLG1zZ2J1ZiwiIiwwKTsKKwkJfQorI2VuZGlmCS8qIERFQlVHICovCisKKwkJaWYg KHggPCAwICYmIGVycm5vID09IEVBR0FJTikKKwkJICB4ID0gMDsKKworCQlpZiAoeCA8IDApIHsJ CS8qIFRoaXMgd29ya3Mgb24gU29sYXJpcyBhbmQgTGludXggKi8KKwkJICAgIHB0eV9lcnIrKzsJ CS8qIGJ1dCBub3QgTmV0QlNEICovCisJCSAgICBkZWJ1ZyhGMTAwLCJURVJNSU5BVElPTiBURVNU IEEiLCIiLDApOworI2lmZGVmIENPTU1FTlQKKwkJICAgIGlmIChlcnJubyA9PSBFSU8pCisJCSAg ICAgIHJjID0gMTsKKyNlbmRpZgkvKiBDT01NRU5UICovCisJCSAgICBpZiAocGV4aXRzdGF0IDwg MCkgeworCQkJc3RhdHVzID0gcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2ZvcmtfcGlkKTsKKwkJ CWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEMiLCIiLHN0YXR1cyk7CisJCQlp ZiAoc3RhdHVzID4gLTEpIHBleGl0c3RhdCA9IHN0YXR1czsKKwkJICAgIH0KKwkJICAgIGhhdmVf cHR5ID0gMDsKKwkJICAgIHggPSAwOworCQl9CisJCWlmICh4ID09IDAgJiYgIXB0eV9lcnIpIHsg LyogVGhpcyB3b3JrcyBvbiBOZXRCU0QgYnV0ICovCisJCSAgICBkZWJ1ZyhGMTAwLCJURVJNSU5B VElPTiBURVNUIEIiLCIiLDApOworCQkgICAgc3RhdHVzID0gcGV4aXRzdGF0ID4gLTEgPyBwZXhp dHN0YXQgOgorCQkJcHR5X2dldF9zdGF0dXMocHR5ZmQscHR5X2ZvcmtfcGlkKTsKKwkJICAgIGRl YnVnKEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEQiLCIiLHN0YXR1cyk7CisJCSAgICBp ZiAoc3RhdHVzID4gLTEpIHsKKwkJCXBleGl0c3RhdCA9IHN0YXR1czsKKwkJCXB0eV9lcnIrKzsK KwkJCWhhdmVfcHR5ID0gMDsKKwkJICAgIH0gZWxzZSB7CQkvKiBTZWxlY3QoKSBsaWVkICovCisJ CQlwdHlfZXJyID0gMDsJLyogcHR5IHN0aWxsIHRoZXJlIGJ1dCBoYXMgbm90aGluZyAqLworCQkJ bXNsZWVwKDEwMCk7CS8qIHNsZWVwIGEgYml0ICovCisJCSAgICB9CisJCSAgICB4ID0gMDsKKwkJ fSAKKwkJLyogSG9wZWZ1bGx5IHRoZSBuZXh0IHR3byBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4uLiAq LworCQlpZiAoIXB0eV9lcnIgJiYgKAorI2lmbmRlZiBQVFlfVVNFX05ERUxBWQorCQkgICAgeCA8 IDEgfHwgZXJybm8KKyNlbHNlCisJCSAgICBlcnJubyAhPSAwICYmIGVycm5vICE9IEVBR0FJTgor I2VuZGlmIC8qIFBUWV9VU0VfTkRFTEFZICovCisJCSAgICApKSB7CisJCSAgICBkZWJ1ZyhGMTAw LCJURVJNSU5BVElPTiBURVNUIEMiLCIiLDApOworCQkgICAgcHR5X2VycisrOworCQkgICAgZGVi dWcoRjEwMSwidHRwdHljbWQgU0VUIHB0eV9lcnIiLCIiLHB0eV9lcnIpOworCQkgICAgaWYgKGVy cm5vID09IEVJTykJLyogZXJybm8gPT0gRUlPIGlzIGxpa2UgRU9GICovCisJCSAgICAgIHJjID0g MTsKKwkJICAgIGlmICh4IDwgMCkKKwkJICAgICAgeCA9IDA7CisJCX0KKyNpZmRlZiBDT01NRU5U CisjaWZkZWYgREVCVUcKKwkJaWYgKGRlYmxvZykgeworCQkgICAgcGJ1ZltwYnVmX2F2YWlsICsg eF0gPSAnXDAnOworCQkgICAgZGVidWcoRjExMSwidHRwdHljbWQgYWRkZWQgdG8gcHR5IGJ1ZmZl ciIsCisJCQkgIHBidWYrcGJ1Zl9hdmFpbCx4KTsKKwkJfQorI2VuZGlmCS8qIERFQlVHICovCisj ZW5kaWYJLyogQ09NTUVOVCAqLworCQlwYnVmX2F2YWlsICs9IHg7CisJCXJlYWRfcHR5X2J5dGVz ICs9IHg7CisJICAgIH0gZWxzZSB7CQkJLyogbiA9PSAwIHdpdGggYmxvY2tpbmcgcmVhZHMgKi8K KwkJZGVidWcoRjEwMCwKKwkJICAgICAgIlBUWSBSRUFEIFJFVFVSTkVEIFpFUk8gQllURVMgLSBT SE9VTEQgTk9UIEhBUFBFTiIsCisJCSAgICAgICIiLDApOworCSAgICB9CisJfSBlbHNlCisJICBw bm90c2V0Kys7CisKKwkvKiBJZiB3cml0ZXMgaGF2ZSBjYXVnaHQgdXAgdG8gcmVhZHMsIHJlc2V0 IHRoZSBidWZmZXJzICovCisKKwlpZiAocGJ1Zl93cml0dGVuID09IHBidWZfYXZhaWwpCisJICBw YnVmX3dyaXR0ZW4gPSBwYnVmX2F2YWlsID0gMDsKKwlpZiAodGJ1Zl93cml0dGVuID09IHRidWZf YXZhaWwpCisJICB0YnVmX3dyaXR0ZW4gPSB0YnVmX2F2YWlsID0gMDsKKworCS8qIFNlZSBpZiB3 ZSBjYW4gZXhpdCAqLworCisJeDEgPSBwYnVmX2F2YWlsIC0gcGJ1Zl93cml0dGVuOyAKKwl4MiA9 IHRidWZfYXZhaWwgLSB0YnVmX3dyaXR0ZW47CisKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlf ZXJyIExPT1AgRVhJVCBURVNUIHB0eV9lcnIiLCIiLHB0eV9lcnIpOworCWRlYnVnKEYxMDEsInR0 cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElUIFRFU1QgeDEgW3dyaXRlIHRvIG5ldF0iLCIiLHgxKTsK KwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCBwdHlfZXJyIExPT1AgRVhJVCBURVNUIHgyIFt3cml0ZSB0 byBwdHldIiwiIix4Mik7CisJZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2VyciBMT09QIEVYSVQg VEVTVCByYyIsIiIscmMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBFWElU IFRFU1Qgc3RhdHVzIiwiIixzdGF0dXMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIg TE9PUCBFWElUIFRFU1QgcGV4aXRzdGF0IiwiIixwZXhpdHN0YXQpOworCisJaWYgKG5ldF9lcnIp IHsJCQkvKiBOZXQgZXJyb3I/ICovCisJICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIG5ldF9lcnIg TE9PUCBFWElUIFRFU1QgbmV0X2VyciIsIiIsbmV0X2Vycik7CisJICAgIGlmIChoYXZlX25ldCkg eworCQlpZiAobG9jYWwpIHsKKwkJICAgIHR0Y2xvcygwKTsKKwkJICAgIHByaW50ZigiP0Nvbm5l Y3Rpb24gY2xvc2VkXG4iKTsKKwkJfQorCQloYXZlX25ldCA9IDA7CisJICAgIH0KKwkgICAgZGVi dWcoRjEwMSwidHRwdHljbWQgbmV0X2VyciBMT09QIEVYSVQgVEVTVCB4MSIsIiIseDEpOworCSAg ICBpZiAoeDEgPT0gMCkKKwkgICAgICBicmVhazsKKwl9CisJaWYgKHB0eV9lcnIpIHsJCQkvKiBQ dHkgZXJyb3I/ICovCisJICAgIGlmIChoYXZlX3B0eSkgeworCQlpZiAocGV4aXRzdGF0IDwgMCkg ewkJCisJCSAgICBzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOwor CQkgICAgZGVidWcoRjEwMSwidHRwdHljbWQgcHR5X2dldF9zdGF0dXMgRSIsIiIsc3RhdHVzKTsK KwkJICAgIGlmIChzdGF0dXMgPiAtMSkgcGV4aXRzdGF0ID0gc3RhdHVzOworCQl9CisJCWhhdmVf cHR5ID0gMDsKKwkgICAgfQorCSAgICBpZiAoeDEgPT0gMCAmJiB4MiA9PSAwKSB7CS8qIElmIGJ1 ZmZlcnMgYXJlIGNhdWdodCB1cCAqLworCQlyYyA9IDE7CQkJLyogc2V0IHByZWxpbWluYXJ5IHJl dHVybiB0byBzdWNjZXNzICovCisJCWRlYnVnKEYxMDEsInR0cHR5Y21kIHB0eV9lcnIgTE9PUCBF WElUIFRFU1QgcmMgMiIsIiIscmMpOworCQlicmVhazsJCQkvKiBhbmQgZXhpdCB0aGUgbG9vcCAq LworCSAgICB9CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgaGF2ZV9w dHkiLCIiLGhhdmVfcHR5KTsKKyAgICBpZiAoaGF2ZV9wdHkpIHsJCQkvKiBJbiBjYXNlIHNlbGVj dCgpIGZhaWxlZCAqLworI2lmZGVmIFVTRV9DS1VQVFlfQworCWVuZF9wdHkoKTsKKwljbG9zZShw dHlmZCk7CisjZWxzZQorCWNsb3NlKHNsYXZlZmQpOworCWNsb3NlKG1hc3RlcmZkKTsKKyNlbmRp ZiAvKiBVU0VfQ0tVUFRZX0MgKi8KKyAgICB9CisgICAgcHR5X21hc3Rlcl9mZCA9IC0xOworICAg IGRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7CisgICAg aWYgKHBleGl0c3RhdCA8IDApIHsJCS8qIFRyeSBvbmUgbGFzdCB0aW1lIHRvIGdldCBzdGF0dXMg Ki8KKwlzdGF0dXMgPSBwdHlfZ2V0X3N0YXR1cyhwdHlmZCxwdHlfZm9ya19waWQpOworCWRlYnVn KEYxMDEsInR0cHR5Y21kIHB0eV9nZXRfc3RhdHVzIEYiLCIiLHN0YXR1cyk7CisJaWYgKHN0YXR1 cyA+IC0xKSBwZXhpdHN0YXQgPSBzdGF0dXM7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInR0cHR5 Y21kICsrKyBmaW5hbCBwZXhpdHN0YXQiLCIiLHBleGl0c3RhdCk7CisgICAgaWYgKGRlYmxvZykg ewkJCS8qIFN0YXRzIGZvciBkZWJ1ZyBsb2cgKi8KKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysg cHNldAkiLCIiLHBzZXQpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyBwbm90c2V0IiwiIixw bm90c2V0KTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgdHNldAkiLCIiLHRzZXQpOworCWRl YnVnKEYxMDEsInR0cHR5Y21kICsrKyB0bm90c2V0IiwiIix0bm90c2V0KTsKKworCWRlYnVnKEYx MDEsInR0cHR5Y21kICsrKyAgcmVhZF9wdHlfYnl0ZXMiLCIiLHJlYWRfcHR5X2J5dGVzKTsKKwlk ZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgd3JpdGVfbmV0X2J5dGVzIiwiIix3cml0ZV9uZXRfYnl0 ZXMpOworCWRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyAgcmVhZF9uZXRfYnl0ZXMiLCIiLHJlYWRf bmV0X2J5dGVzKTsKKwlkZWJ1ZyhGMTAxLCJ0dHB0eWNtZCArKysgd3JpdGVfcHR5X2J5dGVzIiwi Iix3cml0ZV9wdHlfYnl0ZXMpOworICAgIH0KKy8qCisgIElmIHdlIGdvdCB0aGUgZXh0ZXJuYWwg cHJvdG9jb2wncyBleGl0IHN0YXR1cyBmcm9tIHdhaXRwaWQoKSwgd2UgdXNlIHRoYXQKKyAgdG8g c2V0IG91ciByZXR1cm4gY29kZS4gIElmIG5vdCwgd2UgZmFsbCBiYWNrIG9uIHdoYXRldmVyIHJj IHdhcyBwcmV2aW91c2x5CisgIHNldCB0bywgbmFtZWx5IDEgKHN1Y2Nlc3MpIGlmIHRoZSBwdHkg Zm9yayBzZWVtZWQgdG8gdGVybWluYXRlLCAwIG90aGVyd2lzZS4KKyovCisgICAgaWYgKHNhdmVf c2lnY2hsZCkgewkJCS8qIFJlc3RvcmUgdGhpcyBpZiB3ZSBjaGFuZ2VkIGl0ICovCisJKFZPSUQp IHNpZ25hbChTSUdDSExELHNhdmVfc2lnY2hsZCk7CisJc2F2ZV9zaWdjaGxkID0gTlVMTDsKKyAg ICB9CisgICAgbXNsZWVwKDUwMCk7CisgICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0hVUCk7 CS8qIEluIGNhc2UgaXQncyBzdGlsbCB0aGVyZSAqLworICAgIHB0eV9mb3JrX3BpZCA9IC0xOwor ICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kIGZvcmsga2lsbCBTSUdIVVAiLCIiLHgpOworICAgIGlm IChwZXhpdHN0YXQgPiAtMSkKKyAgICAgIHJjID0gKHBleGl0c3RhdCA9PSAwID8gMSA6IDApOwor ICAgIGRlYnVnKEYxMDEsInR0cHR5Y21kICsrKyByYyIsIiIscmMpOworICAgIGlmICghbG9jYWwp IHsJCQkvKiBJZiBpbiByZW1vdGUgbW9kZSAqLworCWNvbnJlcygpOwkJCS8qIHJlc3RvcmUgY29u c29sZSB0byBDQlJFQUsgbW9kZSAqLworCWNvbmNiKChjaGFyKWVzY2Nocik7CisgICAgfQorICAg IHJldHVybihyYyk7Cit9CisjZW5kaWYJLyogTkVUUFRZICovCisjZW5kaWYJLyogU0VMRUNUICov CisKKy8qIFQgVCBSIFUgTiBDIE0gRCAgLS0gIFJlZGlyZWN0IGFuIGV4dGVybmFsIGNvbW1hbmQg b3ZlciB0aGUgY29ubmVjdGlvbi4gKi8KKworLyoKKyAgVFRSVU5DTUQgaXMgdGhlIHJvdXRpbmUg dGhhdCB3YXMgb3JpZ2luYWxseSB1c2VkIGZvciBydW5uaW5nIGV4dGVybmFsCisgIHByb3RvY29s cy4gIEl0IGlzIHZlcnkgc2ltcGxlIGFuZCB3b3JrcyBmaW5lIHByb3ZpZGVkIChhKSB0aGUgY29u bmVjdGlvbgorICBpcyBub3QgZW5jcnlwdGVkLCBhbmQgKGIpIHRoZSBleHRlcm5hbCBwcm90b2Nv bCB1c2VzIHN0YW5kYXJkIGkvbworICAoZmlsZSBkZXNjcmlwdG9ycyAwIGFuZCAxKSBmb3IgZmls ZSB0cmFuc2Zlci4KKyovCisKK2ludAordHRydW5jbWQocykgY2hhciAqczsgeworICAgIFBJRF9U IHBpZDsJCQkJLyogcGlkIG9mIGxvd2VyIGZvcmsgKi8KKyAgICBpbnQgd3N0YXQ7CQkJCS8qIGZv ciB3YWl0KCkgKi8KKyAgICBpbnQgeDsKKyAgICBpbnQgc3RhdHVzcDsKKworICAgIGlmICh0dHlm ZCA9PSAtMSkgeworCXByaW50ZigiP1NvcnJ5LCBkZXZpY2UgaXMgbm90IG9wZW5cbiIpOworCXJl dHVybigwKTsKKyAgICB9CisgICAgaWYgKG5vcHVzaCkgeworCWRlYnVnKEYxMDAsInR0cnVuY21k IGZhaWw6IG5vcHVzaCIsIiIsMCk7CisJcmV0dXJuKDApOworICAgIH0KKworI2lmZGVmIE5FVFBU WQorLyoqKioqKioqKioqKioqKgorICBJdCBtaWdodCBhbHNvIGJlIG5lY2Vzc2FyeSB0byB1c2Ug dGhlIHB0eSByb3V0aW5lIGZvciBvdGhlciByZWFzb25zLAorICBlLmcuIGJlY2F1c2UgdGhlIGV4 dGVybmFsIHByb2dyYW0gZG9lcyBub3QgdXNlIHN0ZGlvLgorKi8KKyNpZmRlZiBORVRDT05OCisv KgorICBJZiB3ZSBoYXZlIGEgbmV0d29yayBjb25uZWN0aW9uIHdlIHVzZSBhIGRpZmZlcmVudCBy b3V0aW5lIGJlY2F1c2UKKyAgKGEpIGlmIHRoZSBjb25uZWN0aW9uIGlzIGVuY3J5cHRlZCwgdGhl IG1lY2hhbmlzbSB1c2VkIGhlcmUgY2FuJ3QgZGVhbAorICB3aXRoIGl0OyBhbmQgKGIpIGl0IHdv bid0IGhhbmRsZSBhbnkgbmV0d29yayBwcm90b2NvbHMgZWl0aGVyLCBlLmcuCisgIFRlbG5ldCwg UmxvZ2luLCBLNSBVLXRvLVUsIGV0Yy4gIEhvd2V2ZXIsIHRoaXMgcm91dGluZSB3b3JrcyBtdWNo CisgIGJldHRlciAoZmFzdGVyLCBtb3JlIHRyYW5zcGFyZW50KSBvbiBzZXJpYWwgY29ubmVjdGlv bnMgYW5kIHdoZW4KKyAgQy1LZXJtaXQgaXMgaW4gcmVtb3RlIG1vZGUgKGkuZS4gaXMgb24gdGhl IGZhciBlbmQpLgorKi8KKyAgICAvKiBGb3IgdGVzdGluZyBhbHdheXMgdXNlIHRoaXMgKi8KKyAg ICBpZiAobmV0Y29ubikKKyAgICAgIHJldHVybih0dHB0eWNtZChzKSk7CisjZW5kaWYgLyogTkVU Q09OTiAqLworCisvKioqKioqKioqKioqKioqLworI2Vsc2UgIC8qIE5FVFBUWSAqLworICAgIGlm ICh0dF9pc19zZWN1cmUoKSkgeworCXByaW50ZigiP1NvcnJ5LCBcCitleHRlcm5hbCBwcm90b2Nv bHMgb3ZlciBzZWN1cmUgY29ubmVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIE9TLlxuIgor ICAgICAgICAgICAgICApOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2VuZGlmCS8qIE5F VFBUWSAqLworCisgICAgY29ucmVzKCk7CQkJCS8qIE1ha2UgY29uc29sZSBub3JtYWwgICovCisg ICAgcGV4aXRzdGF0ID0gLTQ7CisgICAgaWYgKChwaWQgPSBmb3JrKCkpID09IDApIHsJCS8qIE1h a2UgYSBjaGlsZCBmb3JrICovCisJaWYgKHByaXZfY2FuKCkpCQkJLyogQ2hpbGQ6IHR1cm4gb2Zm IHByaXZzLiAqLworCSAgZXhpdCgxKTsKKwlkdXAyKHR0eWZkLCAwKTsJCQkvKiBHaXZlIHN0ZGlu L291dCB0byB0aGUgbGluZSAqLworCWR1cDIodHR5ZmQsIDEpOworCXggPSBzeXN0ZW0ocyk7CisJ ZGVidWcoRjEwMSwidHRydW5jbWQgc3lzdGVtIixzLHgpOworCV9leGl0KHggPyBCQURfRVhJVCA6 IDApOworICAgIH0gZWxzZSB7CisJU0lHVFlQICgqaXN0YXQpKCksICgqcXN0YXQpKCk7CisJaWYg KHBpZCA9PSAoUElEX1QpIC0xKQkJLyogZm9yaygpIGZhaWxlZD8gKi8KKwkgIHJldHVybigwKTsK Kwlpc3RhdCA9IHNpZ25hbChTSUdJTlQsU0lHX0lHTik7IC8qIExldCB0aGUgZm9yayBoYW5kbGUg a2V5Ym9hcmQgKi8KKwlxc3RhdCA9IHNpZ25hbChTSUdRVUlULFNJR19JR04pOyAvKiBpbnRlcnJ1 cHRzIGl0c2VsZi4uLiAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIAl3aGlsZSAoKCh3c3RhdCA9 IHdhaXQoJnN0YXR1c3ApKSAhPSBwaWQpICYmICh3c3RhdCAhPSAtMSkpIDsKKyNlbHNlICAvKiBO b3QgQ09NTUVOVCAqLworICAgIAl3aGlsZSAoMSkgeworCSAgICB3c3RhdCA9IHdhaXQoJnN0YXR1 c3ApOworCSAgICBkZWJ1ZyhGMTAxLCJ0dHJ1bmNtZCB3YWl0IiwiIix3c3RhdCk7CisJICAgIGlm ICh3c3RhdCA9PSBwaWQgfHwgd3N0YXQgPT0gLTEpCisJICAgICAgYnJlYWs7CisJfQorI2VuZGlm IC8qIENPTU1FTlQgKi8KKworCXBleGl0c3RhdCA9IChzdGF0dXNwICYgMHhmZikgPyBzdGF0dXNw IDogc3RhdHVzcCA+PiA4OworCWRlYnVnKEYxMDEsInR0cnVuY21kIHdhaXQgc3RhdHVzcCIsIiIs c3RhdHVzcCk7CisJZGVidWcoRjEwMSwidHRydW5jbWQgd2FpdCBwZXhpdHN0YXQiLCIiLHBleGl0 c3RhdCk7CisJc2lnbmFsKFNJR0lOVCxpc3RhdCk7CQkvKiBSZXN0b3JlIGludGVycnVwdHMgKi8K KwlzaWduYWwoU0lHUVVJVCxxc3RhdCk7CisgICAgfQorICAgIGNvbmNiKChjaGFyKWVzY2Nocik7 CQkvKiBSZXN0b3JlIGNvbnNvbGUgdG8gQ0JSRUFLIG1vZGUgKi8KKyAgICByZXR1cm4oc3RhdHVz cCA9PSAwID8gMSA6IDApOworfQorI2VuZGlmCS8qIENLX1JFRElSICovCisKK3N0cnVjdCB0bSAq CisjaWZkZWYgQ0tfQU5TSUMKK2NtZGF0ZTJ0bShjaGFyICogZGF0ZSwgaW50IGdtdCkgICAgICAg ICAvKiBkYXRlIGFzICJ5eXl5bW1kZCBoaDptbTpzcyIgKi8KKyNlbHNlCitjbWRhdGUydG0oZGF0 ZSxnbXQpIGNoYXIgKiBkYXRlOyBpbnQgZ210OworI2VuZGlmCit7CisgICAgLyogZGF0ZSBhcyAi eXl5eW1tZGQgaGg6bW06c3MiICovCisgICAgc3RhdGljIHN0cnVjdCB0bSBfdG07CisgICAgdGlt ZV90IG5vdzsKKworICAgIGlmIChzdHJsZW4oZGF0ZSkgIT0gMTcgfHwKKwlkYXRlWzhdICE9ICcg JyB8fAorCWRhdGVbMTFdICE9ICc6JyB8fAorCWRhdGVbMTRdICE9ICc6JykKKyAgICAgIHJldHVy bihOVUxMKTsKKworICAgIHRpbWUoJm5vdyk7CisgICAgaWYgKGdtdCkKKyAgICAgIF90bSA9ICpn bXRpbWUoJm5vdyk7CisgICAgZWxzZQorICAgICAgX3RtID0gKmxvY2FsdGltZSgmbm93KTsKKyAg ICBfdG0udG1feWVhciA9IChkYXRlWzBdLScwJykqMTAwMCArIChkYXRlWzFdLScwJykqMTAwICsK KyAgICAgICAgICAgICAgICAgIChkYXRlWzJdLScwJykqMTAgICArIChkYXRlWzNdLScwJyktMTkw MDsKKyAgICBfdG0udG1fbW9uICA9IChkYXRlWzRdLScwJykqMTAgICArIChkYXRlWzVdLScwJykt MTsKKyAgICBfdG0udG1fbWRheSA9IChkYXRlWzZdLScwJykqMTAgICArIChkYXRlWzddLScwJyk7 CisgICAgX3RtLnRtX2hvdXIgPSAoZGF0ZVs5XS0nMCcpKjEwICAgKyAoZGF0ZVsxMF0tJzAnKTsK KyAgICBfdG0udG1fbWluICA9IChkYXRlWzEyXS0nMCcpKjEwICArIChkYXRlWzEzXS0nMCcpOwor ICAgIF90bS50bV9zZWMgID0gKGRhdGVbMTVdLScwJykqMTAgICsgKGRhdGVbMTZdLScwJyk7CisK KyAgICAvKiBTaG91bGQgd2Ugc2V0IF90bS50bV9pc2RzdCB0byAtMSBoZXJlPyAqLworCisgICAg X3RtLnRtX3dkYXkgPSAwOworICAgIF90bS50bV95ZGF5ID0gMDsKKworICAgIHJldHVybigmX3Rt KTsKK30KKworI2lmZGVmIE9YT1MKKyN1bmRlZiBraWxsCisjZW5kaWYgLyogT1hPUyAqLworCisj aWZkZWYgT1hPUworaW50Citwcml2X2tpbGwocGlkLCBzaWcpIGludCBwaWQsIHNpZzsgeworICAg IGludAlpOworCisgICAgaWYgKHByaXZfb24oKSkKKwlkZWJ1ZyhGMTAwLCJwcml2X2tpbGwgcHJp dl9vbiBmYWlsZWQiLCIiLDApOworICAgIGkgPSBraWxsKHBpZCwgc2lnKTsKKyAgICBpZiAocHJp dl9vZmYoKSkKKwlkZWJ1ZyhGMTAwLCJwcml2X2tpbGwgcHJpdl9vZmYgZmFpbGVkIiwiIiwwKTsK KyAgICByZXR1cm4oaSk7Cit9CisjZW5kaWYgLyogT1hPUyAqLworCisjaWZkZWYgQkVPU09SQkVC T1gKKy8qICNpZmRlZiBCRV9EUl83ICovCisvKgorICBhbGFybSgpIGZ1bmN0aW9uIG5vdCBzdXBw bGllZCB3aXRoIEJlIE9TIERSNyAtIHRoaXMgb25lIGNvbnRyaWJ1dGVkIGJ5CisgIE5lYWwgUC4g TXVycGh5LgorKi8KKworLyoKKyAgVGhpcyBzaG91bGQgbWltaWMgdGhlIFVOSVgvUE9TSVggYWxh cm0oKSBmdW5jdGlvbiB3ZWxsIGVub3VnaCwgd2l0aCB0aGUKKyAgY2F2ZWF0IHRoYXQgb25lJ3Mg U0lHQUxSTSBoYW5kbGVyIG11c3QgY2FsbCBhbGFybV9leHBpcmVkKCkgdG8gY2xlYW4gdXAgdmFy cworICBhbmQgd2FpdCBmb3IgdGhlIGFsYXJtIHRocmVhZCB0byBmaW5pc2guCisqLwordW5zaWdu ZWQgaW50CithbGFybSh1bnNpZ25lZCBpbnQgc2Vjb25kcykgeworICAgIGxvbmcgdGltZV9sZWZ0 ID0gMDsKKworLyogSWYgYW4gYWxhcm0gaXMgYWN0aXZlLCB0dXJuIGl0IG9mZiwgc2F2aW5nIHRo ZSB1bnVzZWQgdGltZSAqLworICAgIGlmIChhbGFybV90aHJlYWQgIT0gLTEpIHsKKyAgICAgICAg LyogV2UnbGwgYmUgZ2VuZXJvdXMgYW5kIGNvdW50IHBhcnRpYWwgc2Vjb25kcyBhcyB3aG9sZSBz ZWNvbmRzLiAqLworICAgICAgICB0aW1lX2xlZnQgPSBhbGFybV9zdHJ1Y3QudGltZSAtCisJICAo KHN5c3RlbV90aW1lKCkgLSB0aW1lX3N0YXJ0ZWQpIC8gMTAwMDAwMC4wKTsKKworICAgICAgICAv KiBLaWxsIHRoZSBhbGFybSB0aHJlYWQgKi8KKyAgICAgICAga2lsbF90aHJlYWQgKGFsYXJtX3Ro cmVhZCk7CisKKyAgICAgICAgLyogV2UgbmVlZCB0byBjbGVhbiB1cCBhcyB0aG91Z2ggdGhlIGFs YXJtIG9jY3VyZWQuICovCisgICAgICAgIHRpbWVfc3RhcnRlZCA9IDA7CisgICAgICAgIGFsYXJt X3N0cnVjdC50aHJlYWQgPSAtMTsKKyAgICAgICAgYWxhcm1fc3RydWN0LnRpbWUgPSAwOworICAg ICAgICBhbGFybV9leHBpcmVkKCk7CisgICAgfQorCisvKiBTZXQgYSBuZXcgYWxhcm0gY2xvY2ss IGlmIHJlcXVlc3RlZC4gKi8KKyAgICBpZiAoc2Vjb25kcyA+IDApIHsKKyAgICAgICAgYWxhcm1f c3RydWN0LnRocmVhZCA9IGZpbmRfdGhyZWFkKE5VTEwpOworICAgICAgICBhbGFybV9zdHJ1Y3Qu dGltZSA9IHNlY29uZHM7CisgICAgICAgIHRpbWVfc3RhcnRlZCA9IHN5c3RlbV90aW1lKCk7Cisg ICAgICAgIGFsYXJtX3RocmVhZCA9IHNwYXduX3RocmVhZCAoZG9fYWxhcm0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsYXJtX3RocmVhZCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQl9OT1JNQUxfUFJJT1JJVFksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJmFsYXJtX3N0cnVjdAorCQkJCSAgICAg KTsKKyAgICAgICAgcmVzdW1lX3RocmVhZCAoYWxhcm1fdGhyZWFkKTsKKyAgICB9CisKKy8qIE5v dyByZXR1cm4gW3VudXNlZCB0aW1lIHwgMF0gKi8KKyAgICByZXR1cm4gKCh1bnNpZ25lZCBpbnQp IHRpbWVfbGVmdCk7Cit9CisKKy8qCisgIFRoaXMgZnVuY3Rpb24gaXMgdGhlIGRlcGFydHVyZSBm cm9tIFVOSVgvUE9TSVggYWxhcm0gaGFuZGxpbmcuIEluIHRoZSBjYXNlCisgIG9mIEJlJ3MgbWlz c2luZyBhbGFybSgpIGZ1bmN0aW9uLCB0aGlzIHN0dWZmIG5lZWRzIHRvIGJlIGRvbmUgaW4gdGhl IFNJR0FMUk0KKyAgaGFuZGxlci4gV2hlbiBCZSBpbXBsZW1lbnRzIGFsYXJtKCksIHRoaXMgZnVu Y3Rpb24gY2FsbCBjYW4gYmUgZWxpbWluYXRlZAorICBmcm9tIHVzZXIncyBTSUdBTFJNIHNpZ25h bCBoYW5kbGVycy4KKyovCisKK3ZvaWQKK2FsYXJtX2V4cGlyZWQodm9pZCkgeworICAgIGxvbmcg cmV0X3ZhbDsKKworICAgIGlmIChhbGFybV90aHJlYWQgIT0gLTEpIHsKKyAgICAgICAgd2FpdF9m b3JfdGhyZWFkIChhbGFybV90aHJlYWQsICZyZXRfdmFsKTsKKyAgICAgICAgYWxhcm1fdGhyZWFk ID0gLTE7CisgICAgfQorfQorCisvKgorICBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHNub296 ZXMgdGhlIHJlcXVpc2l0ZSBudW1iZXIgb2Ygc2Vjb25kcyBhbmQgdGhlbgorICBTSUdBTFJNcyB0 aGUgY2FsbGluZyB0aHJlYWQuIE5vdGUgdGhhdCBraWxsKCkgd2FudHMgYSBwaWRfdCBhcmcsIHdo aWxzdCBCZQorICB1c2VzIHRocmVhZF9pZDsgY3VycmVudGx5IHRoZXkgYXJlIGJvdGggdHlwZGVm J2VkIGFzIGxvbmcsIGJ1dCBJJ2xsIGRvIHRoZQorICBjYXN0IGFueXdheS4gVGhpcyBmdW5jdGlv biBpcyBydW4gaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisqLworCitsb25nCitkb19hbGFybSAodm9p ZCAqYWxhcm1fc3RydWN0KSB7CisgICAgc25vb3plICgoZG91YmxlKSAoKHN0cnVjdCBBTEFSTV9T VFJVQ1QgKikgYWxhcm1fc3RydWN0KS0+dGltZSAqIDEwMDAwMDAuMCk7CisgICAga2lsbCAoKHBp ZF90KSgoc3RydWN0IEFMQVJNX1NUUlVDVCAqKSBhbGFybV9zdHJ1Y3QpLT50aHJlYWQsIFNJR0FM Uk0pOworICAgIHRpbWVfc3RhcnRlZCA9IDA7CisgICAgKChzdHJ1Y3QgQUxBUk1fU1RSVUNUICop IGFsYXJtX3N0cnVjdCktPnRocmVhZCA9IC0xOworICAgICgoc3RydWN0IEFMQVJNX1NUUlVDVCAq KSBhbGFybV9zdHJ1Y3QpLT50aW1lID0gMDsKK30KKy8qICNlbmRpZiAqLyAvKiBCRV9EUl83ICov CisjZW5kaWYgLyogQkVPU09SQkVCT1ggKi8KKworI2lmZGVmIFBsYW45CisKK2ludAorcDl0dHlj dGwoY2hhciBsZXR0ZXIsIGludCBudW0sIGludCBwYXJhbSkgeworICAgIGNoYXIgY21kWzIwXTsK KyAgICBpbnQgbGVuOworCisgICAgaWYgKHR0eWN0bGZkIDwgMCkKKyAgICAgIHJldHVybiAtMTsK KworICAgIGNtZFswXSA9IGxldHRlcjsKKyAgICBpZiAobnVtKQorICAgICAgbGVuID0gc3ByaW50 ZihjbWQgKyAxLCAiJWQiLCBwYXJhbSkgKyAxOworICAgIGVsc2UgeworCWNtZFsxXSA9IHBhcmFt OworCWxlbiA9IDI7CisgICAgfQorICAgIGlmICh3cml0ZSh0dHljdGxmZCwgY21kLCBsZW4pID09 IGxlbikgeworCWNtZFtsZW5dID0gMDsKKwkvKiBmcHJpbnRmKHN0ZG91dCwgIndyb3RlICclcydc biIsIGNtZCk7ICovCisJcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworaW50 CitwOXR0eXBhcml0eShjaGFyIGwpIHsKKyAgICByZXR1cm4gcDl0dHljdGwoJ3AnLCAwLCBsKTsK K30KKworaW50CitwOXR0aGZsb3coaW50IGZsb3csIGludCBzdGF0dXMpIHsKKyAgICByZXR1cm4g cDl0dHljdGwoJ20nLCAxLCBzdGF0dXMpOworfQorCitpbnQKK3A5dHRzc3BkKGludCBjcHMpIHsK KyAgICBpZiAocDl0dHljdGwoJ2InLCAxLCBjcHMgKiAxMCkgPCAwKQorICAgICAgcmV0dXJuIC0x OworICAgIHR0eWxhc3RzcGVlZCA9IGNwcyAqIDEwOworICAgIHJldHVybiAwOworfQorCitpbnQK K3A5b3BlbnR0eWN0bChjaGFyICp0dG5hbWUpIHsKKyAgICBjaGFyIG5hbWVbMTAwXTsKKworICAg IGlmICh0dHljdGxmZCA+PSAwKSB7CisJY2xvc2UodHR5Y3RsZmQpOworCXR0eWN0bGZkID0gLTE7 CisJdHR5bGFzdHNwZWVkID0gLTE7CisgICAgfQorICAgIHNwcmludGYobmFtZSwgIiVzY3RsIiwg dHRuYW1lKTsKKyAgICB0dHljdGxmZCA9IG9wZW4obmFtZSwgMSk7CisgICAgcmV0dXJuIHR0eWN0 bGZkOworfQorCitpbnQKK3A5Y29uY2IoKSB7CisgICAgaWYgKGNvbnNjdGxmZCA+PSAwKSB7CisJ aWYgKHdyaXRlKGNvbnNjdGxmZCwgInJhd29uIiwgNSkgPT0gNSkKKwkgIHJldHVybiAwOworICAg IH0KKyAgICByZXR1cm4gLTE7Cit9CisKK2ludAorcDljb25iaW4oKSB7CisgICAgcmV0dXJuIHA5 Y29uY2IoKTsKK30KKworaW50CitwOWNvbnJlcygpIHsKKyAgICBpZiAoY29uc2N0bGZkID49IDAp IHsKKwlpZiAod3JpdGUoY29uc2N0bGZkLCAicmF3b2ZmIiwgNikgPT0gNikKKwkgIHJldHVybiAw OworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK2ludAorcDlzbmRicmsoaW50IG1zZWMpIHsK KyAgICBpZiAodHR5Y3RsZmQgPj0gMCkgeworCWNoYXIgY21kWzIwXTsKKwlpbnQgaSA9IHNwcmlu dGYoY21kLCAiayVkIiwgbXNlYyk7CisJaWYgKHdyaXRlKHR0eWN0bGZkLCBjbWQsIGkpID09IGkp CisJICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCitpbnQKK2NvbndyaXRl KGNoYXIgKmJ1ZiwgaW50IG4pIHsKKyAgICBpbnQgeDsKKyAgICBzdGF0aWMgaW50IGxlbmd0aCA9 IDA7CisgICAgc3RhdGljIGludCBob2xkaW5nY3IgPSAwOworICAgIGludCBub3JtYWwgPSAwOwor ICAgIGZvciAoeCA9IDA7IHggPCBuOyB4KyspIHsKKwljaGFyIGMgPSBidWZbeF07CisJaWYgKGMg PT0gMDA3KSB7CisJICAgIGlmIChub3JtYWwpIHsKKwkJd3JpdGUoMSwgYnVmICsgKHggLSBub3Jt YWwpLCBub3JtYWwpOworCQlsZW5ndGggKz0gbm9ybWFsOworCQlub3JtYWwgPSAwOworCSAgICB9 CisJICAgIC8qIHdyaXRlKG5vaXNlZmQsICIxMDAwIDMwMCIsIDgpOyAqLworCSAgICBob2xkaW5n Y3IgPSAwOworCX0gZWxzZSBpZiAoYyA9PSAnXHInKSB7CisJICAgIGlmIChub3JtYWwpIHsKKwkJ d3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwpOworCQlsZW5ndGggKz0gbm9ybWFs OworCQlub3JtYWwgPSAwOworCSAgICB9CisJICAgIGhvbGRpbmdjciA9IDE7CisJfSBlbHNlIGlm IChjID09ICdcbicpIHsKKwkgICAgd3JpdGUoMSwgYnVmICsgKHggLSBub3JtYWwpLCBub3JtYWwg KyAxKTsKKwkgICAgbm9ybWFsID0gMDsKKwkgICAgbGVuZ3RoID0gMDsKKwkgICAgaG9sZGluZ2Ny ID0gMDsKKwl9IGVsc2UgaWYgKGMgPT0gJ1xiJykgeworCSAgICBpZiAobm9ybWFsKSB7CisJCXdy aXRlKDEsIGJ1ZiArICh4IC0gbm9ybWFsKSwgbm9ybWFsKTsKKwkJbGVuZ3RoICs9IG5vcm1hbDsK KwkJbm9ybWFsID0gMDsKKwkgICAgfQorCSAgICBpZiAobGVuZ3RoKSB7CisJCXdyaXRlKDEsICZj LCAxKTsKKwkJbGVuZ3RoLS07CisJICAgIH0KKwkgICAgaG9sZGluZ2NyID0gMDsKKwl9IGVsc2Ug eworCSAgICBpZiAoaG9sZGluZ2NyKSB7CisJCWNoYXIgYiA9ICdcYic7CisJCXdoaWxlIChsZW5n dGgtLSA+IDApCisJCSAgd3JpdGUoMSwgJmIsIDEpOworCQlsZW5ndGggPSAwOwkvKiBjb21waWxl ciBidWcgKi8KKwkgICAgfQorCSAgICBob2xkaW5nY3IgPSAwOworCSAgICBub3JtYWwrKzsKKwl9 CisgICAgfQorICAgIGlmIChub3JtYWwpIHsKKwl3cml0ZSgxLCBidWYgKyAoeCAtIG5vcm1hbCks IG5vcm1hbCk7CisJbGVuZ3RoICs9IG5vcm1hbDsKKyAgICB9CisgICAgcmV0dXJuIG47Cit9CisK K3ZvaWQKK2NvbnByaW50KGNoYXIgKmZtdCwgLi4uKSB7CisgICAgc3RhdGljIGNoYXIgYnVmWzEw MDBdOwkJLyogbm90IHNhZmUgaWYgb24gdGhlIHN0YWNrICovCisKKyAgICB2YV9saXN0IGFwOwor ICAgIGludCBpOworCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgaSA9IHZzcHJpbnRmKGJ1 ZiwgZm10LCBhcCk7CisgICAgY29ud3JpdGUoYnVmLCBpKTsKK30KKyNlbmRpZiAvKiBQbGFuOSAq LworCisvKiBmcHJpbnRmLCBwcmludGYsIHBlcnJvciByZXBsYWNlbWVudHMuLi4gKi8KKworLyog ZiBwIHIgaSBuIHQgZiAqLworCisjaWZkZWYgVU5JWAorI2lmZGVmIENLX0FOU0lDCisjaW5jbHVk ZSA8c3RkYXJnLmg+CisjZWxzZSAvKiBDS19BTlNJQyAqLworI2lmZGVmIF9fR05VQ19fCisjaW5j bHVkZSA8c3RkYXJnLmg+CisjZWxzZQorI2luY2x1ZGUgPHZhcmFyZ3MuaD4KKyNlbmRpZgkvKiBf X0dOVUNfXyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjaWZkZWYgZnByaW50ZgorI3VuZGVm IGZwcmludGYKK3N0YXRpYyBjaGFyIHN0cjFbNDA5Nl07CitzdGF0aWMgY2hhciBzdHIyWzQwOTZd OworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2NreGZwcmludGYoRklMRSAqIGZpbGUsIGNvbnN0IGNo YXIgKiBmb3JtYXQsIC4uLikKKyNlbHNlIC8qIENLX0FOU0lDICovCitja3hmcHJpbnRmKHZhX2Fs aXN0KSB2YV9kY2wKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogY2t4ZnByaW50ZiAqLyB7Cisg ICAgaW50IGksIGosIGxlbiwgZ290X2NyOworICAgIHZhX2xpc3QgYXJnczsKKyAgICBpbnQgcmMg PSAwOworCisjaWZkZWYgQ0tfQU5TSUMKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworI2Vs c2UgLyogQ0tfQU5TSUMgKi8KKyAgICBjaGFyICogZm9ybWF0OworICAgIEZJTEUgKiBmaWxlOwor ICAgIHZhX3N0YXJ0KGFyZ3MpOworICAgIGZpbGUgPSB2YV9hcmcoYXJncyxGSUxFICopOworICAg IGZvcm1hdCA9IHZhX2FyZyhhcmdzLGNoYXIgKik7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKwor ICAgIGlmICghaW5zZXJ2ZXIgfHwgKGZpbGUgIT0gc3Rkb3V0ICYmIGZpbGUgIT0gc3RkZXJyICYm IGZpbGUgIT0gc3RkaW4pKSB7CisJcmMgPSB2ZnByaW50ZihmaWxlLGZvcm1hdCxhcmdzKTsKKyAg ICB9IGVsc2UgeworCXVuc2lnbmVkIGludCBjOworICAgICAgICByYyA9IHZzcHJpbnRmKHN0cjEs IGZvcm1hdCwgYXJncyk7CisgICAgICAgIGxlbiA9IHN0cmxlbihzdHIxKTsKKyAgICAgICAgaWYg KGxlbiA+PSBzaXplb2Yoc3RyMSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNreGZwcmlu dGYoKSBidWZmZXIgb3ZlcmZsb3ciLCIiLGxlbik7CisgICAgICAgICAgICBkb2V4aXQoQkFEX0VY SVQsMSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMCwgaiA9IDAsIGdvdF9jciA9IDA7 CisJICAgICBpIDwgbGVuICYmIGogPCBzaXplb2Yoc3RyMSktMjsKKwkgICAgIGkrKywgaisrICkg eworCSAgICAvKiBXZSBjYW4ndCB1c2UgMjU1IGFzIGEgY2FzZSBsYWJlbCBiZWNhdXNlIG9mIHNp Z25lZCBjaGFycyAqLworCSAgICBjID0gKHVuc2lnbmVkKShzdHIxW2ldICYgMHhmZik7CisjaWZk ZWYgVE5DT0RFCisJICAgIGlmIChjID09IDI1NSkgeworCQlpZiAoZ290X2NyICYmICFURUxPUFRf TUUoVEVMT1BUX0JJTkFSWSkpCisJCSAgc3RyMltqKytdID0gJ1wwJzsKKwkJc3RyMltqKytdID0g SUFDOworCQlzdHIyW2pdID0gSUFDOworCQlnb3RfY3IgPSAwOworCSAgICB9IGVsc2UKKyNlbmRp ZiAvKiBUTkNPREUgKi8KKwkgICAgc3dpdGNoIChjKSB7CisJICAgICAgY2FzZSAnXHInOgorICAg ICAgICAgICAgICAgIGlmIChnb3RfY3IKKyNpZmRlZiBUTkNPREUKKwkJICAgICYmICFURUxPUFRf TUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkJICAgICkKKwkJICBzdHIy W2orK10gPSAnXDAnOworICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIxW2ldOworICAgICAg ICAgICAgICAgIGdvdF9jciA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgY2Fz ZSAnXG4nOgorICAgICAgICAgICAgICAgIGlmICghZ290X2NyKQorCQkgIHN0cjJbaisrXSA9ICdc cic7CisgICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07CisgICAgICAgICAgICAgICAg Z290X2NyID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICBkZWZhdWx0OgorICAg ICAgICAgICAgICAgIGlmIChnb3RfY3IKKyNpZmRlZiBUTkNPREUKKwkJICAgICYmICFURUxPUFRf TUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkJICAgICkKKwkJICBzdHIy W2orK10gPSAnXDAnOworICAgICAgICAgICAgICAgIHN0cjJbal0gPSBzdHIxW2ldOworICAgICAg ICAgICAgICAgIGdvdF9jciA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg aWYgKGdvdF9jcgorI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgICYmICFURUxPUFRfTUUoVEVM T1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAgICAgICAgICApCisgICAgICAg ICAgICBzdHIyW2orK10gPSAnXDAnOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyNpZmRlZiBUTkNP REUKKyAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfRU5DUllQVElPTikpCisJICBja190bl9l bmNyeXB0KHN0cjIsaik7CisjZW5kaWYgLyogVE5DT0RFICovCisjZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLworI2lmZGVmIENLX1NTTAorCWlmIChpbnNlcnZlciAmJiAoc3NsX2FjdGl2ZV9mbGFn IHx8IHRsc19hY3RpdmVfZmxhZykpIHsKKwkgICAgLyogV3JpdGUgdXNpbmcgU1NMICovCisgICAg ICAgICAgICBjaGFyICogcCA9IHN0cjI7CisgICAgICAgICAgc3NsX3JldHJ5OgorICAgICAgICAg ICAgaWYgKHNzbF9hY3RpdmVfZmxhZykKKwkgICAgICByYyA9IFNTTF93cml0ZShzc2xfY29uLCBw LCBqKTsKKyAgICAgICAgICAgIGVsc2UKKwkgICAgICByYyA9IFNTTF93cml0ZSh0bHNfY29uLCBw LCBqKTsKKwkgICAgZGVidWcoRjExMSwiY2t4ZnByaW50ZiIsIlNTTF93cml0ZSIscmMpOworICAg ICAgICAgICAgc3dpdGNoIChTU0xfZ2V0X2Vycm9yKHNzbF9hY3RpdmVfZmxhZz9zc2xfY29uOnRs c19jb24scmMpKSB7CisJICAgICAgY2FzZSBTU0xfRVJST1JfTk9ORToKKyAgICAgICAgICAgICAg ICBpZiAocmMgPT0gaikKKwkJICBicmVhazsKKyAgICAgICAgICAgICAgICBwICs9IHJjOworICAg ICAgICAgICAgICAgIGogLT0gcmM7CisgICAgICAgICAgICAgICAgZ290byBzc2xfcmV0cnk7CisJ ICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9X QU5UX1JFQUQ6CisJICAgICAgY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKyAgICAgICAgICAgICAg ICBpZiAocmMgIT0gMCkKKwkJICByZXR1cm4oLTEpOworCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dB TlRfWDUwOV9MT09LVVA6CisJICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorCSAgICAgIGNhc2Ug U1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorCSAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg cmMgPSAwOworICAgICAgICAgICAgfQorCX0gZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAg ICAgICBmd3JpdGUoc3RyMixzaXplb2YoY2hhciksaixzdGRvdXQpOworICAgIH0KKyAgICB2YV9l bmQoYXJncyk7CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAvKiBmcHJpbnRmICovCisKKy8q IHAgciBpIG4gdCBmICovCisKKyNpZmRlZiBwcmludGYKKyN1bmRlZiBwcmludGYKK2ludAorI2lm ZGVmIENLX0FOU0lDCitja3hwcmludGYoY29uc3QgY2hhciAqIGZvcm1hdCwgLi4uKQorI2Vsc2Ug LyogQ0tfQU5TSUMgKi8KK2NreHByaW50Zih2YV9hbGlzdCkgdmFfZGNsCisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KKy8qIGNreHByaW50ZiAqLyB7CisgICAgaW50IGksIGosIGxlbiwgZ290X2NyOwor ICAgIHZhX2xpc3QgYXJnczsKKyAgICBpbnQgcmMgPSAwOworCisjaWZkZWYgQ0tfQU5TSUMKKyAg ICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworI2Vsc2UgLyogQ0tfQU5TSUMgKi8KKyAgICBjaGFy ICogZm9ybWF0OworICAgIHZhX3N0YXJ0KGFyZ3MpOworICAgIGZvcm1hdCA9IHZhX2FyZyhhcmdz LGNoYXIgKik7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKworICAgIGlmICghaW5zZXJ2ZXIpIHsK KwlyYyA9IHZwcmludGYoZm9ybWF0LCBhcmdzKTsKKyAgICB9IGVsc2UgeworCXVuc2lnbmVkIGlu dCBjOworICAgICAgICByYyA9IHZzcHJpbnRmKHN0cjEsIGZvcm1hdCwgYXJncyk7CisgICAgICAg IGxlbiA9IHN0cmxlbihzdHIxKTsKKyAgICAgICAgaWYgKGxlbiA+PSBzaXplb2Yoc3RyMSkpIHsK KyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNreHByaW50ZigpIGJ1ZmZlciBvdmVyZmxvdyIsIiIs bGVuKTsKKyAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAgICAgfQorICAgICAg ICBmb3IgKGkgPSAwLCBqID0gMCwgZ290X2NyPTA7CisJICAgICBpIDwgbGVuICYmIGogPCBzaXpl b2Yoc3RyMSktMjsKKwkgICAgIGkrKywgaisrICkgeworCSAgICBjID0gKHVuc2lnbmVkKShzdHIx W2ldICYgMHhmZik7CisjaWZkZWYgVE5DT0RFCisJICAgIGlmIChjID09IDI1NSkgeworCQlpZiAo Z290X2NyICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkpCisJCSAgc3RyMltqKytdID0gJ1ww JzsKKwkJc3RyMltqKytdID0gSUFDOworCQlzdHIyW2pdID0gSUFDOworCQlnb3RfY3IgPSAwOwor CSAgICB9IGVsc2UKKyNlbmRpZiAvKiBUTkNPREUgKi8KKwkgICAgc3dpdGNoIChjKSB7CisJICAg ICAgY2FzZSAnXHInOgorICAgICAgICAgICAgICAgIGlmIChnb3RfY3IKKyNpZmRlZiBUTkNPREUK KwkJICAgICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBUTkNPREUgKi8K KwkJICAgICkKKwkJICBzdHIyW2orK10gPSAnXDAnOworICAgICAgICAgICAgICAgIHN0cjJbal0g PSBzdHIxW2ldOworICAgICAgICAgICAgICAgIGdvdF9jciA9IDE7CisgICAgICAgICAgICAgICAg YnJlYWs7CisJICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgICAgICAgIGlmICghZ290X2NyKQor CQkgIHN0cjJbaisrXSA9ICdccic7CisgICAgICAgICAgICAgICAgc3RyMltqXSA9IHN0cjFbaV07 CisgICAgICAgICAgICAgICAgZ290X2NyID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChnb3RfY3IKKyNpZmRlZiBUTkNPREUK KwkJICAgICYmICFURUxPUFRfTUUoVEVMT1BUX0JJTkFSWSkKKyNlbmRpZiAvKiBUTkNPREUgKi8K KwkJICAgICkKKwkJICBzdHIyW2orK10gPSAnXDAnOworICAgICAgICAgICAgICAgIHN0cjJbal0g PSBzdHIxW2ldOworICAgICAgICAgICAgICAgIGdvdF9jciA9IDA7CisgICAgICAgICAgICAgICAg YnJlYWs7CisJICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZ290X2NyCisjaWZkZWYgVE5D T0RFCisgICAgICAgICAgICAgJiYgIVRFTE9QVF9NRShURUxPUFRfQklOQVJZKQorI2VuZGlmIC8q IFROQ09ERSAqLworICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHN0cjJbaisrXSA9ICdcMCc7 CisjaWZkZWYgQ0tfRU5DUllQVElPTgorI2lmZGVmIFROQ09ERQorICAgICAgICBpZiAoVEVMT1BU X01FKFRFTE9QVF9FTkNSWVBUSU9OKSkKKwkgIGNrX3RuX2VuY3J5cHQoc3RyMixqKTsKKyNlbmRp ZiAvKiBUTkNPREUgKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfU1NM CisJaWYgKGluc2VydmVyICYmIChzc2xfYWN0aXZlX2ZsYWcgfHwgdGxzX2FjdGl2ZV9mbGFnKSkg eworICAgICAgICAgICAgY2hhciAqIHAgPSBzdHIyOworCSAgICAvKiBXcml0ZSB1c2luZyBTU0wg Ki8KKyAgICAgICAgICBzc2xfcmV0cnk6CisgICAgICAgICAgICBpZiAoc3NsX2FjdGl2ZV9mbGFn KQorCSAgICAgIHJjID0gU1NMX3dyaXRlKHNzbF9jb24sIHAsIGopOworICAgICAgICAgICAgZWxz ZQorCSAgICAgIHJjID0gU1NMX3dyaXRlKHRsc19jb24sIHAsIGopOworCSAgICBkZWJ1ZyhGMTEx LCJja3hwcmludGYiLCJTU0xfd3JpdGUiLHJjKTsKKyAgICAgICAgICAgIHN3aXRjaCAoU1NMX2dl dF9lcnJvcihzc2xfYWN0aXZlX2ZsYWc/c3NsX2Nvbjp0bHNfY29uLHJjKSkgeworCSAgICAgIGNh c2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICAgICAgaWYgKHJjID09IGopCisJCSAgYnJl YWs7CisgICAgICAgICAgICAgICAgcCArPSByYzsKKyAgICAgICAgICAgICAgICBqIC09IHJjOwor ICAgICAgICAgICAgICAgIGdvdG8gc3NsX3JldHJ5OworCSAgICAgIGNhc2UgU1NMX0VSUk9SX1dB TlRfV1JJVEU6CisJICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorCSAgICAgIGNhc2Ug U1NMX0VSUk9SX1NZU0NBTEw6CisgICAgICAgICAgICAgICAgaWYgKHJjICE9IDApCisJCSAgcmV0 dXJuKC0xKTsKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgorCSAgICAg IGNhc2UgU1NMX0VSUk9SX1NTTDoKKwkgICAgICBjYXNlIFNTTF9FUlJPUl9aRVJPX1JFVFVSTjoK KwkgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgIH0K Kwl9IGVsc2UKKyNlbmRpZiAvKiBDS19TU0wgKi8KKwkgIHJjID0gZndyaXRlKHN0cjIsc2l6ZW9m KGNoYXIpLGosc3Rkb3V0KTsKKyAgICB9CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybihy Yyk7Cit9CisjZW5kaWYgLyogcHJpbnRmICovCisKKy8qICBwIGUgciByIG8gciAgKi8KKworI2lm ZGVmIHBlcnJvcgorI3VuZGVmIHBlcnJvcgorX1BST1RPVFlQKGNoYXIgKiBja19lcnJzdHIsKFZP SUQpKTsKKyNpZmRlZiBORVhUCit2b2lkCisjZWxzZQorI2lmZGVmIENLX1NDT1Y1Cit2b2lkCisj ZWxzZQoraW50CisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNlbmRpZiAvKiBORVhUICovCisjaWZk ZWYgQ0tfQU5TSUMKK2NreHBlcnJvcihjb25zdCBjaGFyICogc3RyKQorI2Vsc2UgLyogQ0tfQU5T SUMgKi8KK2NreHBlcnJvcihzdHIpIGNoYXIgKiBzdHI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIGNreHBlcnJvciAqLyB7CisgICAgY2hhciAqIGVycnN0ciA9IGNrX2VycnN0cigpOworI2lm bmRlZiBORVhUCisjaWZuZGVmIENLX1NDT1Y1CisgICAgcmV0dXJuCisjZW5kaWYgLyogQ0tfU0NP VjUgKi8KKyNlbmRpZiAvKiBORVhUICovCisgICAgICBja3hwcmludGYoIiVzJXMgJXNcbiIsc3Ry LCplcnJzdHI/IjoiOiIiLGVycnN0cik7Cit9CisjZW5kaWYgLyogcGVycm9yICovCisjZW5kaWYg LyogVU5JWCAqLworCisjaWZkZWYgTUlOSVgyCisKKy8qIE1pbml4IGRvZXNuJ3QgaGF2ZSBhIGdl dHRpbWVvZmRheSBjYWxsIChidXQgTUlOSVgzIGRvZXMpLgorICogV2UgZmFrZSBvbmUgaGVyZSB1 c2luZyB0aW1lKDIpCisgKi8KKworI2lmbmRlZiBNSU5JWDMKK2ludAorZ2V0dGltZW9mZGF5KHN0 cnVjdCB0aW1ldmFsICp0cCwgc3RydWN0IHRpbWV6b25lICp0enApIHsKKyAgICB0cC0+dHZfdXNl YyA9IDBMOwkJCS8qIENsb3NlIGVub3VnaCBmb3IgaG9yc2VzaG9lcyAqLworICAgIGlmKHRpbWUo Jih0cC0+dHZfc2VjKSk9PS0xKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICByZXR1cm4oMCk7Cit9 CisjZW5kaWYJLyogTUlOSVgzICovCisKKyNpZm5kZWYgTUlOSVgzCitpbnQKK3JlYWRsaW5rKGNv bnN0IGNoYXIgKnBhdGgsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZnNpeikgeworICAgIGVycm5vID0g RU5PU1lTOworICAgIHJldHVybigtMSk7Cit9CisjZW5kaWYJLyogTUlOSVgzICovCisKKyNlbmRp ZiAvKiBNSU5JWDIgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrdXR1dG9yLnR4dCBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTku MC4zMDIvY2t1dHV0b3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVm MmFlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdXR1dG9yLnR4dApAQCAtMCwwICsxLDE5NDggQEAKKworICAgWzFdVGhlIENvbHVt YmlhIENyb3duIFRoZSBLZXJtaXQgUHJvamVjdCB8IENvbHVtYmlhIFVuaXZlcnNpdHkKKyAgIDYx MiBXZXN0IDExNXRoIFN0cmVldCwgTmV3IFlvcmsgTlkgMTAwMjUgVVNBIG8gWzJda2VybWl0QGNv bHVtYmlhLmVkdQorICAgLi4uc2luY2UgMTk4MQorICAgWzNdSG9tZSBbNF1LZXJtaXQgOTUgWzVd Qy1LZXJtaXQgWzZdU2NyaXB0cyBbN11DdXJyZW50IFs4XU5ldyBbOV1GQVEKKyAgIFsxMF1TdXBw b3J0CisKKyAgIEMtS0VSTUlUIDkuMCBVTklYIE1BTlVBTCBQQUdFIEFORCBUVVRPUklBTAorCisg ICAgIEZyYW5rIGRhIENydXoKKyAgICAgWzExXVRoZSBLZXJtaXQgUHJvamVjdCwgWzEyXUNvbHVt YmlhIFVuaXZlcnNpdHkKKworICAgWyBbMTNdUERGIHZlcnNpb24gXSBbIFsxNF1Ocm9mZiB2ZXJz aW9uIF0KKworICAgICBUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgdGhlIGJlZ2lu bmVyIHN1ZmZpY2llbnQKKyAgICAgaW5mb3JtYXRpb24gdG8gbWFrZSBiYXNpYyAoaWYgbm90IGFk dmFuY2VkKSB1c2Ugb2YgQy1LZXJtaXQgOS4wLgorICAgICBBbHRob3VnaCBpdCBtaWdodCBiZSBy YXRoZXIgbG9uZyBmb3IgYSBVbml4IG1hbnVhbCBwYWdlIChhYm91dCAxNjAwCisgICAgIGxpbmVz KSwgaXQncyBzdGlsbCBmYXIgc2hvcnRlciB0aGFuIHRoZSBbMTVdQy1LZXJtaXQgbWFudWFsLCB3 aGljaAorICAgICBzaG91bGQgYmUgY29uc3VsdGVkIGZvciBhZHZhbmNlZCB0b3BpY3Mgc3VjaCBh cyBjdXN0b21pemF0aW9uLAorICAgICBjaGFyYWN0ZXItc2V0cywgc2NyaXB0aW5nLCBldGMuIFdl IGFsc28gYXR0ZW1wdCB0byBwcm92aWRlIGEgY2xlYXIKKyAgICAgc3RydWN0dXJhbCBvdmVydmll dyBvZiBDLUtlcm1pdCdzIG1hbnkgY2FwYWJpbGl0aWVzLCBmdW5jdGlvbmFsCisgICAgIGFyZWFz LCBzdGF0ZXMsIGFuZCBtb2RlcyBhbmQgdGhlaXIgaW50ZXJyZWxhdGlvbiwgdGhhdCBzaG91bGQg YmUKKyAgICAgaGVscGZ1bCB0byBiZWdpbm5lcnMgYW5kIHZldGVyYW5zIGFsaWtlLCBhcyB3ZWxs IGFzIHRvIHRob3NlCisgICAgIHVwZ3JhZGluZyB0byB0aGUgbmV3IHJlbGVhc2UuIFRoYW5rcyB0 byBDaHJpc3RpbmUgR2lhbm9uZSBmb3IgaGVyCisgICAgIHdvcmsgb24gdGhpcyBkb2N1bWVudCBi ZWZvcmUgc2hlIHdhcyBsYWlkIG9mZiBpbiAyMDA1LgorCisgICBNb3N0IHJlY2VudCB1cGRhdGU6 IEZyaSBKdWwgMSAxNDoxMjozMSAyMDExCisKK0NPTlRFTlRTCisKKyAgICAgKiBbMTZdREVTQ1JJ UFRJT04KKyAgICAgKiBbMTddU1lOT1BTSVMKKyAgICAgKiBbMThdT1BUSU9OUworICAgICAqIFsx OV1DT01NQU5EIExBTkdVQUdFCisgICAgICogWzIwXUlOSVRJQUxJWkFUSU9OIEZJTEUKKyAgICAg KiBbMjFdTU9ERVMgT0YgT1BFUkFUSU9OCisgICAgICogWzIyXU1BS0lORyBDT05ORUNUSU9OUwor ICAgICAqIFsyM11UUkFOU0ZFUlJJTkcgRklMRVMgV0lUSCBLRVJNSVQKKyAgICAgKiBbMjRdS0VS TUlUIENMSUVOVC9TRVJWRVIgQ09OTkVDVElPTlMKKworICAgICAqIFsyNV1LRVJNSVQnUyBCVUlM VC1JTiBGVFAgQU5EIEhUVFAgQ0xJRU5UUworICAgICAqIFsyNl1JTlRFUk5FVCBLRVJNSVQgU0VS VklDRQorICAgICAqIFsyN11TRUNVUklUWQorICAgICAqIFsyOF1BTFRFUk5BVElWRSBDT01NQU5E LUxJTkUgUEVSU09OQUxJVElFUworICAgICAqIFsyOV1MSUNFTlNFCisgICAgICogWzMwXU9USEVS IFRPUElDUworICAgICAqIFszMV1ET0NVTUVOVEFUSU9OIEFORCBVUERBVEVTCisgICAgICogWzMy XUZJTEVTCisgICAgICogWzMzXUFVVEhPUlMKKworREVTQ1JJUFRJT04KKworICAgWzM0XVRvcCAg IFszNV1Db250ZW50cyAgIFszNl1OZXh0CisKKyAgIFszN11DLUtlcm1pdCBpcyBhbiBhbGwtcHVy cG9zZSBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBwYWNrYWdlIGZyb20gdGhlCisgICBbMzhdS2Vy bWl0IFByb2plY3QgYXQgWzM5XUNvbHVtYmlhIFVuaXZlcnNpdHkgdGhhdDoKKworICAgICAqIElz IHBvcnRhYmxlIHRvIG1hbnkgcGxhdGZvcm1zLCBVbml4IGFuZCBub24tVW5peCBhbGlrZS4KKyAg ICAgKiBDYW4gbWFrZSBib3RoIHNlcmlhbCBhbmQgbmV0d29yayBjb25uZWN0aW9ucy4KKyAgICAg KiBDYW4gY29uZHVjdCBpbnRlcmFjdGl2ZSB0ZXJtaW5hbCBzZXNzaW9ucyBvdmVyIGl0cyBjb25u ZWN0aW9uLgorICAgICAqIENhbiB0cmFuc2ZlciB0ZXh0IG9yIGJpbmFyeSBmaWxlcyBvdmVyIHRo ZSBzYW1lIGNvbm5lY3Rpb24uCisgICAgICogQ2FuIGNvbnZlcnQgdGV4dC1maWxlIGNoYXJhY3Rl ciBzZXRzIGluIHRlcm1pbmFsIG1vZGUgb3IgZmlsZQorICAgICAgIHRyYW5zZmVyLgorICAgICAq IElzIGN1c3RvbWl6YWJsZSBpbiBldmVyeSBhc3BlY3Qgb2YgaXRzIG9wZXJhdGlvbi4KKworICAg Qy1LZXJtaXQgaXMgYSBtb2RlbSBwcm9ncmFtLCBhIFRlbG5ldCBjbGllbnQsIGFuIFJsb2dpbiBj bGllbnQsIGFuIEZUUAorICAgY2xpZW50LCBhbiBIVFRQIGNsaWVudCwgYW5kIG9uIHNlbGVjdGVk IHBsYXRmb3JtcywgYWxzbyBhbiBYLjI1IGNsaWVudC4KKyAgIEl0IGNhbiBtYWtlIGl0cyBvd24g c2VjdXJlIEludGVybmV0IGNvbm5lY3Rpb25zIHVzaW5nIElFVEYtYXBwcm92ZWQKKyAgIHNlY3Vy aXR5IG1ldGhvZHMgaW5jbHVkaW5nIEtlcmJlcm9zIElWLCBLZXJiZXJvcyBWLCBTU0wvVExTLCBh bmQgU1JQCisgICBhbmQgaXQgY2FuIGFsc28gbWFrZSBTU0ggKFNlY3VyZSBTaGVsbCkgY29ubmVj dGlvbnMgdGhyb3VnaCB5b3VyCisgICBleHRlcm5hbCBTU0ggY2xpZW50IGFwcGxpY2F0aW9uLiBJ dCBjYW4gYmUgdGhlIGZhci1lbmQgZmlsZS10cmFuc2ZlciBvcgorICAgY2xpZW50L3NlcnZlciBw YXJ0bmVyIG9mIHlvdXIgZGVza3RvcCBLZXJtaXQgY2xpZW50LiBJdCBjYW4gYWxzbyBhY2NlcHQK KyAgIGluY29taW5nIGRpYWxlZCBhbmQgbmV0d29yayBjb25uZWN0aW9ucy4gSXQgY2FuIGV2ZW4g YmUgaW5zdGFsbGVkIGFzIGFuCisgICBJbnRlcm5ldCBzZXJ2aWNlIG9uIGl0cyBvd24gc3RhbmRh cmQgVENQIHNvY2tldCwgMTY0OSBbWzQwXVJGQzI4MzksCisgICBbNDFdUkZDMjg0MF0uCisKKyAg IEFuZCBwZXJoYXBzIG1vc3QgaW1wb3J0YW50LCBldmVyeXRoaW5nIHlvdSBjYW4gZG8gImJ5IGhh bmQiCisgICAoaW50ZXJhY3RpdmVseSkgd2l0aCBDLUtlcm1pdCwgY2FuIGJlICJzY3JpcHRlZCIg KGF1dG9tYXRlZCkgdXNpbmcgaXRzCisgICBidWlsdC1pbiBjcm9zcy1wbGF0Zm9ybSB0cmFuc3Bv cnQtaW5kZXBlbmRlbnQgc2NyaXB0IHByb2dyYW1taW5nCisgICBsYW5ndWFnZSwgd2hpY2ggaGFw cGVucyB0byBiZSBpZGVudGljYWwgdG8gaXRzIGludGVyYWN0aXZlIGNvbW1hbmQKKyAgIGxhbmd1 YWdlLgorCisgICBUaGlzIG1hbnVhbCBwYWdlIG9mZmVycyBhbiBvdmVydmlldyBvZiBDLUtlcm1p dCA5LjAgZm9yIFVuaXggKCJVbml4IiBpcworICAgYW4gb3BlcmF0aW5nIHN5c3RlbSBmYW1pbHkg dGhhdCBpbmNsdWRlcyBBSVgsIERHL1VYLCBGcmVlQlNELCBIUC1VWCwKKyAgIElSSVgsIExpbnV4 LCBNYWMgT1MgWCwgTmV0QlNELCBPcGVuQlNELCBPcGVuIFNlcnZlciwgT3BlbiBVbml4LCBRTlgs CisgICBTb2xhcmlzLCBTdW5PUywgU3lzdGVtIFYgUjMsIFN5c3RlbSBWIFI0LCBUcnU2NCBVbml4 LCBVbml4d2FyZSwgWGVuaXgsCisgICBhbmQgbWFueSBvdGhlcnMpLiBGb3IgdGhvcm91Z2ggY292 ZXJhZ2UsIHBsZWFzZSBjb25zdWx0IHRoZSBwdWJsaXNoZWQKKyAgIEMtS2VybWl0IG1hbnVhbCBh bmQgc3VwcGxlbWVudHMgKHNlZSBbNDJdRE9DVU1FTlRBVElPTiBiZWxvdykuIEZvcgorICAgZnVy dGhlciBpbmZvcm1hdGlvbiBhYm91dCBDLUtlcm1pdCwgS2VybWl0IHNvZnR3YXJlIGZvciBvdGhl cgorICAgcGxhdGZvcm1zLCBhbmQgS2VybWl0IG1hbnVhbHMsIHZpc2l0IHRoZSBLZXJtaXQgUHJv amVjdCB3ZWJzaXRlOgorCisgIFs0M11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisK KyAgIFRoaXMgaXMgYSBsb25nZXItdGhhbi1hdmVyYWdlIG1hbnVhbCBwYWdlLCBhbmQgeWV0IGl0 IGJhcmVseSBzY3JhdGNoZXMKKyAgIHRoZSBzdXJmYWNlLiBEb24ndCBiZSBkYXVudGVkLiBDLUtl cm1pdCBpcyBhIGxhcmdlIGFuZCBjb21wbGV4IHBhY2thZ2UsCisgICBldm9sdmluZyBvdmVyIGRl Y2FkZXMgb2YgcHJhY3RpY2UgYW5kIGV4cGVyaWVuY2UsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbgor ICAgaXQncyBoYXJkIHRvIGxlYXJuIG9yIHVzZS4gSXRzIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5j dGlvbnMgYXJlCisgICBleHBsYWluZWQgaGVyZSB3aXRoIHBvaW50ZXJzIHRvIGFkZGl0aW9uYWwg aW5mb3JtYXRpb24gZWxzZXdoZXJlLgorCisgICBbNDRdS2VybWl0IEhvbWUgWzQ1XUMtS2VybWl0 IEhvbWUgWzQ2XUMtS2VybWl0IEZBUQorCitTWU5PUFNJUworCisgICBbNDddVG9wIFs0OF1Db250 ZW50cyBbNDldTmV4dCBbNTBdUHJldmlvdXMKKworICAgVXNhZ2U6ICBrZXJtaXQgW2ZpbGVuYW1l XSBbLXggYXJnIFsteCBhcmddLi4uWy15eXldLi5dIFsgez0sLS0sK30gdGV4dAorICAgXSBdCisg ICBPcjogICAga2VybWl0IFVSTAorCisgICAgICogLXggaXMgYW4gb3B0aW9uIHJlcXVpcmluZyBh biBhcmd1bWVudDsKKyAgICAgKiAteSBpcyBhbiBvcHRpb24gd2l0aCBubyBhcmd1bWVudC4KKwor ICAgSWYgdGhlIGZpcnN0IGNvbW1hbmQtbGluZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiBhIGZp bGUsCisgICBpbnRlcmFjdGl2ZS1tb2RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBmcm9tIHRoZSBm aWxlLiBUaGUgJz0nIChvciAiLS0iKQorICAgYXJndW1lbnQgdGVsbHMgS2VybWl0IG5vdCB0byBw YXJzZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBjb21tYW5kIGxpbmUsCisgICBidXQgdG8gbWFrZSB0 aGUgd29yZHMgZm9sbG93aW5nICc9JyBhdmFpbGFibGUgYXMgXCUxLCBcJTIsIC4uLiBcJTkuIFRo ZQorICAgIisiIGFyZ3VtZW50IGlzIGxpa2UgIj0iIGJ1dCBmb3IgdXNlIGluICJrZXJiYW5nIHNj cmlwdHMiIChleHBsYWluZWQKKyAgIFs1MV1iZWxvdykuIEEgc2Vjb25kIGNvbW1hbmQtbGluZSBm b3JtYXQgYWxsb3dzIHRoZSBvbmUgYW5kIG9ubHkKKyAgIGFyZ3VtZW50IHRvIGJlIGEgWzUyXVRl bG5ldCwgRlRQLCBIVFRQLCBvciBJS1NEIFVSTC4KKworICAgT3JkZXIgb2YgZXhlY3V0aW9uOgor CisgICAgMS4gWzUzXVRoZSBjb21tYW5kIGZpbGUgKGlmIGFueSkuCisgICAgMi4gWzU0XVRoZSBp bml0aWFsaXphdGlvbiBmaWxlLCBpZiBhbnksIHVubGVzcyBzdXBwcmVzc2VkIHdpdGggLVkuCisg ICAgMy4gWzU1XVRoZSBjdXN0b21pemF0aW9uIGZpbGUgKGlmIGl0IGlzIGV4ZWN1dGVkIGJ5IHRo ZSBpbml0aWFsaXphdGlvbgorICAgICAgIGZpbGUpLgorICAgIDQuIFs1Nl1UaGUgY29tbWFuZC1s aW5lIFVSTCAoaWYgYW55LCBhbmQgaWYgc28sIGV4ZWN1dGlvbiBzdG9wcyBoZXJlKS4KKyAgICA1 LiBbNTddQ29tbWFuZC1saW5lIG9wdGlvbnMgKGlmIGFueSkuCisgICAgNi4gWzU4XUludGVyYWN0 aXZlIGNvbW1hbmRzLgorCisgICBTb21lIGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBjYXVzZSBh Y3Rpb25zIChzdWNoIGFzIC1zIHRvIHNlbmQgYQorICAgZmlsZSk7IG90aGVycyBqdXN0IHNldCBw YXJhbWV0ZXJzLiBJZiBhbnkgYWN0aW9uIG9wdGlvbnMgYXJlIGluY2x1ZGVkCisgICBvbiB0aGUg Y29tbWFuZCBsaW5lLCBLZXJtaXQgZXhpdHMgd2hlbiBmaW5pc2hlZCB1bmxlc3MgYWxzbyBnaXZl biB0aGUKKyAgIC1TICgic3RheSIpIG9wdGlvbi4gSWYgbm8gYWN0aW9uIG9wdGlvbnMgYXJlIGdp dmVuLCBubyBpbml0aWFsaXphdGlvbgorICAgb3IgY29tbWFuZCBmaWxlcyBjb250YWluZWQgYW4g RVhJVCBvciBRVUlUIGNvbW1hbmQsIGFuZCBubyBmYXRhbCBlcnJvcnMKKyAgIG9jY3VycmVkLCBL ZXJtaXQgaXNzdWVzIGl0cyBwcm9tcHQgYW5kIHdhaXRzIGZvciB5b3UgdG8gdHlwZSBjb21tYW5k cy4KKworICAgICBCZWFyIGluIG1pbmQgdGhhdCBDLUtlcm1pdCBjYW4gYmUgYnVpbHQgd2l0aCBz ZWxlY3RlZCBmZWF0dXJlcworICAgICBkaXNhYmxlZCwgYW5kIGFsc28gdGhhdCBjZXJ0YWluIGZl YXR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbAorICAgICBwbGF0Zm9ybXMuIEZvciBleGFt cGxlLCBDLUtlcm1pdCBjYW4ndCBiZSBidWlsdCB3aXRoIFRDUC9JUCBzdXBwb3J0CisgICAgIG9u IGEgcGxhdGZvcm0gdGhhdCBkb2VzIG5vdCBoYXZlIFRDUC9JUCBoZWFkZXIgZmlsZXMgYW5kIGxp YnJhcmllcworICAgICAoYW5kIGV2ZW4gaWYgS2VybWl0IGRvZXMgaW5jbHVkZSBUQ1AvSVAgc3Vw cG9ydCwgaXQgY2FuJ3QgYmUgdXNlZCB0bworICAgICBtYWtlIFRDUC9JUCBjb25uZWN0aW9ucyBv biBhIGNvbXB1dGVyIHRoYXQgZG9lcyBub3QgaGF2ZSBhIFRDUC9JUAorICAgICBzdGFjayBpbnN0 YWxsZWQpLiBJZiB5b3VyIHZlcnNpb24gb2YgQy1LZXJtaXQgbGFja3MgYSBmZWF0dXJlCisgICAg IG1lbnRpb25lZCBoZXJlLCB1c2UgaXRzIFNIT1cgRkVBVFVSRVMgY29tbWFuZCB0byBzZWUgd2hh dCBtaWdodCBoYXZlCisgICAgIGJlZW4gZXhjbHVkZWQuCisKKyAgIEMtS2VybWl0IGhhcyB0aHJl ZSBraW5kcyBvZiBjb21tYW5kczogcmVndWxhciBzaW5nbGUtbGV0dGVyCisgICBjb21tYW5kLWxp bmUgb3B0aW9ucywgZXh0ZW5kZWQtZm9ybWF0IGNvbW1hbmQtbGluZSBvcHRpb25zLCBhbmQKKyAg IGludGVyYWN0aXZlIGNvbW1hbmRzLgorCisgICBbNTldS2VybWl0IEhvbWUgWzYwXUMtS2VybWl0 IEhvbWUgWzYxXUMtS2VybWl0IEZBUQorCitPUFRJT05TCisKKyAgIFs2Ml1Ub3AgWzYzXUNvbnRl bnRzIFs2NF1OZXh0IFs2NV1QcmV2aW91cyAgPC0gKE1vc3QgcGVvcGxlIHNob3VsZAorICAgY2xp Y2sgTmV4dCB0byBza2lwIGFyb3VuZCB0aGlzIHNlY3Rpb24uLi4pCisKKyAgIExpa2UgbW9zdCBV bml4IGNvbW1hbmRzLCBDLUtlcm1pdCBjYW4gYmUgYmUgZ2l2ZW4gb3B0aW9ucyBvbiB0aGUKKyAg IGNvbW1hbmQgbGluZS4gQnV0IEMtS2VybWl0IGFsc28gY2FuIGJlIHVzZWQgaW50ZXJhY3RpdmVs eSBieSBnaXZpbmcgaXQKKyAgIFs2Nl1jb21tYW5kcyBjb21wb3NlZCBvZiB3b3Jkcywgd2hpY2gg YXJlIG1vcmUgaW50dWl0aXZlIHRoYW4gY3J5cHRpYworICAgY29tbWFuZC1saW5lIG9wdGlvbnMs IGFuZCBtb3JlIGZsZXhpYmxlIHRvby4gSW4gb3RoZXIgd29yZHMsIHlvdSBkb24ndAorICAgaGF2 ZSB0byB1c2UgQy1LZXJtaXQncyBjb21tYW5kLWxpbmUgb3B0aW9ucywgYnV0IHRoZXkgYXJlIGF2 YWlsYWJsZSBpZgorICAgeW91IHdhbnQgdG8uIChCeSB0aGUgc2FtZSB0b2tlbiwgeW91IGRvbid0 IGhhdmUgdG8gdXNlIGl0cyBpbnRlcmFjdGl2ZQorICAgY29tbWFuZHMgZWl0aGVyIC0tIHlvdSBj YW4gdXNlIGVpdGhlciBvciBib3RoIGluIGFueSBjb21iaW5hdGlvbi4pCisKKyAgIEMtS2VybWl0 IGlzIGdlbmVyYWxseSBpbnN0YWxsZWQgaW4gdGhlIFBBVEggYXMgImtlcm1pdCIsIGFuZCB0aGVy ZWZvcmUKKyAgIGlzIGludm9rZWQgYnkgdHlwaW5nIHRoZSB3b3JkICJrZXJtaXQiIChsb3dlcmNh c2UpIGF0IHRoZSBzaGVsbCBwcm9tcHQsCisgICBhbmQgdGhlbiBwcmVzc2luZyB0aGUgUmV0dXJu IG9yIEVudGVyIGtleS4gSWYgeW91IHdpc2ggdG8gaW5jbHVkZQorICAgY29tbWFuZC1saW5lIG9w dGlvbnMsIHB1dCB0aGVtIGFmdGVyIHRoZSB3b3JkICJrZXJtaXQiIGJ1dCBiZWZvcmUKKyAgIHBy ZXNzaW5nIFJldHVybiBvciBFbnRlciwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgZm9yIGV4YW1wbGU6 CisKKyAgJCBrZXJtaXQgLXMgY2tlcm1pdC50YXIuZ3oKKworICAgKCckJyBpcyB0aGUgc2hlbGwg cHJvbXB0OyAia2VybWl0IC1zIGNrZXJtaXQudGFyLmd6IiBpcyB3aGF0IHlvdSB0eXBlLAorICAg Zm9sbG93ZWQgYnkgUmV0dXJuIG9yIEVudGVyLikKKworICAgSGVyZSBpcyBhIGxpc3Qgb2YgQy1L ZXJtaXQncyBzaW5nbGUtbGV0dGVyIGNvbW1hbmQtbGluZSBvcHRpb25zLCB3aGljaAorICAgc3Rh cnQgd2l0aCBhIHNpbmdsZSBkYXNoICgtKSwgaW4gQVNDSUkgKCJhbHBoYWJldGljYWwiKSBvcmRl ci4KKyAgIEFscGhhYmV0aWMgY2FzZSBpcyBzaWduaWZpY2FudCAoLUEgaXMgbm90IHRoZSBzYW1l IGFzIC1hKS4gVGhlIEFjdGlvbj8KKyAgIGNvbHVtbiBjb250YWlucyBZIGZvciBhY3Rpb24gb3B0 aW9ucyBhbmQgTiBmb3Igbm9uLWFjdGlvbiBvcHRpb25zLgorCisgICBPcHRpb24gQWN0aW9uPyBE ZXNjcmlwdGlvbgorICAgLTAgTiAoZGlnaXQgemVybykgMTAwJSB0cmFuc3BhcmVudCBDb25uZWN0 IHN0YXRlIGZvciAiaW4tdGhlLW1pZGRsZSIKKyAgIG9wZXJhdGlvbjogOCBiaXRzLCBubyBwYXJp dHksIG5vIGVzY2FwZSBjaGFyYWN0ZXIsIGV2ZXJ5dGhpbmcgcGFzc2VzCisgICB0aHJvdWdoLgor ICAgLTggTiAoZGlnaXQgZWlnaHQpIENvbm5lY3Rpb24gaXMgOC1iaXQgY2xlYW4gKHRoaXMgaXMg dGhlIGRlZmF1bHQgaW4KKyAgIEMtS2VybWl0IDkuMCkuIEVxdWl2YWxlbnQgdG8gdGhlIEVJR0hU QklUIGNvbW1hbmQsIHdoaWNoIGluIHR1cm4gaXMgYQorICAgc2hvcnRjdXQgZm9yIFNFVCBURVJN SU5BTCBCWVRFU0laRSA4LCBTRVQgQ09NTUFORCBCWVRFU0laRSA4LCBTRVQKKyAgIFBBUklUWSBO T05FLgorICAgLTkgYXJnIE4gKGRpZ2l0IG5pbmUpIE1ha2UgYSBjb25uZWN0aW9uIHRvIGFuIEZU UCBzZXJ2ZXIuIEVxdWl2YWxlbnQgdG8KKyAgIHRoZSBGVFAgT1BFTiBjb21tYW5kLgorICAgQXJn dW1lbnQ6IElQLWFkZHJlc3Mtb3ItaG9zdG5hbWVbOm9wdGlvbmFsLVRDUC1wb3J0XS4KKyAgIE5P VEU6IEMtS2VybWl0IGFsc28gaGFzIGEgc2VwYXJhdGUgRlRQIGNvbW1hbmQtbGluZSBwZXJzb25h bGl0eSwgd2l0aAorICAgcmVndWxhciBGVFAtbGlrZSBjb21tYW5kLWxpbmUgc3ludGF4LiBbNjdd TW9yZSBhYm91dCB0aGlzIGJlbG93LgorICAgLUEgTiBLZXJtaXQgaXMgdG8gYmUgc3RhcnRlZCBh cyBhbiBJbnRlcm5ldCBzZXJ2aWNlIChJS1NEKSAob25seSBmcm9tCisgICBpbmV0ZC5jb25mKS4K KyAgIC1CIE4gS2VybWl0IGlzIHJ1bm5pbmcgaW4gQmF0Y2ggb3IgQmFja2dyb3VuZCAobm8gY29u dHJvbGxpbmcKKyAgIHRlcm1pbmFsKS4gVG8gYmUgdXNlZCBpbiBjYXNlIEtlcm1pdCBkb2Vzbid0 IGF1dG9tYXRpY2FsbHkgc2Vuc2UgaXRzCisgICBiYWNrZ3JvdW5kIHN0YXR1cy4gRXF1aXZhbGVu dCB0byB0aGUgU0VUIEJBQ0tHUk9VTkQgT04gY29tbWFuZC4KKyAgIC1DIGFyZyBOIEludGVyYWN0 aXZlLW1vZGUgQ29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQuCisgICBBcmd1bWVudDogQ29tbWFuZHMg c2VwYXJhdGVkIGJ5IGNvbW1hcywgbGlzdCBpbiBkb3VibGVxdW90ZXMuCisgICAtRCBhcmcgTiBE ZWxheSBiZWZvcmUgc3RhcnRpbmcgdG8gc2VuZCBpbiBSZW1vdGUgbW9kZS4gRXF1aXZhbGVudCB0 bworICAgdGhlIFNFVCBERUxBWSBjb21tYW5kLgorICAgQXJndW1lbnQ6IE51bWJlciBvZiBzZWNv bmRzLgorICAgLUUgTiBFeGl0IGF1dG9tYXRpY2FsbHkgd2hlbiBjb25uZWN0aW9uIGNsb3Nlcy4g RXF1aXZhbGVudCB0byBTRVQgRVhJVAorICAgT04tRElTQ09OTkVDVCBPTi4KKyAgIC1GIGFyZyBO IFVzZSBhbiBvcGVuIFRDUCBjb25uZWN0aW9uLgorICAgQXJndW1lbnQ6IE51bWVyaWMgZmlsZSBk ZXNjcmlwdG9yIG9mIG9wZW4gVENQIGNvbm5lY3Rpb24uCisgICBBbHNvIHNlZTogLWosIC1KLgor ICAgLUcgYXJnIFkgR2V0IGZpbGUocykgZnJvbSBzZXJ2ZXIsIHNlbmQgY29udGVudHMgdG8gc3Rh bmRhcmQgb3V0cHV0LAorICAgd2hpY2ggbm9ybWFsbHkgd291bGQgYmUgcGlwZWQgdG8gYW5vdGhl ciBwcm9jZXNzLgorICAgQXJndW1lbnQ6IFJlbW90ZSBmaWxlIHNwZWNpZmljYXRpb24sIGluIHF1 b3RlcyBpZiBpdCBjb250YWlucworICAgbWV0YWNoYXJhY3RlcnMuCisgICBBbHNvIHNlZTogLWcs IC1rLgorICAgLUggTiBTdXBwcmVzcyBwcm9ncmFtIHN0YXJ0dXAgSGVyYWxkIGFuZCBncmVldGlu Zy4KKyAgIC1JIE4gVGVsbCBLZXJtaXQgaXQgaGFzIGEgcmVsaWFibGUgY29ubmVjdGlvbiwgdG8g Zm9yY2Ugc3RyZWFtaW5nIHRvIGJlCisgICB1c2VkIHdoZXJlIGl0IG5vcm1hbGx5IHdvdWxkIG5v dCBiZS4gRXF1aXZhbGVudCB0byB0aGUgU0VUIFJFTElBQkxFIE9OCisgICBjb21tYW5kLgorICAg LUogYXJnIE4gIkJlIGxpa2UgVGVsbmV0LiIgTGlrZSAtaiBidXQgaW1wbGllcyAtRS4KKyAgIEFy Z3VtZW50OiBJUCBob3N0bmFtZS9hZGRyZXNzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgc2Vydmlj ZS4KKyAgIE5PVEU6IEMtS2VybWl0IGFsc28gaGFzIGEgc2VwYXJhdGUgVGVsbmV0IGNvbW1hbmQt bGluZSBwZXJzb25hbGl0eSwKKyAgIHdpdGggcmVndWxhciBUZWxuZXQtbGlrZSBjb21tYW5kLWxp bmUgc3ludGF4LiBbNjhdTW9yZSBhYm91dCB0aGlzCisgICBiZWxvdy4KKyAgIC1MIE4gUmVjdXJz aXZlIGRpcmVjdG9yeSBkZXNjZW50IGZvciBmaWxlcyBpbiAtcyBvcHRpb24uCisgICAtTSBhcmcg TiBNeSB1c2VyIG5hbWUgKGZvciB1c2Ugd2l0aCBUZWxuZXQsIFJsb2dpbiwgRlRQLCBldGMpLgor ICAgRXF1aXZhbGVudCB0byB0aGUgU0VUIExPR0lOIFVTRVIgY29tbWFuZC4KKyAgIEFyZ3VtZW50 OiBVc2VybmFtZSBzdHJpbmcuCisgICAtTyBZIChVcHBlcmNhc2UgbGV0dGVyIE8pIEJlIGEgc2Vy dmVyIGZvciBPbmUgY29tbWFuZCBvbmx5LiBBbHNvIHNlZToKKyAgIC14LgorICAgLVAgTiBEb24n dCBjb252ZXJ0IGZpbGUgKFBhdGgpIG5hbWVzIG9mIHRyYW5zZmVycmVkIGZpbGVzLiBFcXVpdmFs ZW50CisgICB0byBTRVQgRklMRSBOQU1FUyBMSVRFUkFMLgorICAgLVEgTiBRdWljayBLZXJtaXQg cHJvdG9jb2wgc2V0dGluZ3MuIEVxdWl2YWxlbnQgdG8gdGhlIEZBU1QgY29tbWFuZC4KKyAgIFRo aXMgaXMgdGhlIGRlZmF1bHQgaW4gQy1LZXJtaXQgNy4wIGFuZCBsYXRlci4KKyAgIC1SIE4gUmVt b3RlLW9ubHkgKHRoaXMganVzdCBtYWtlcyBJRiBSRU1PVEUgdHJ1ZSkuCisgICAtUyBOIFN0YXkg KGVudGVyIGNvbW1hbmQgcGFyc2VyIGFmdGVyIGFjdGlvbiBvcHRpb25zKS4KKyAgIC1UIE4gRm9y Y2UgVGV4dCBtb2RlIGZvciBmaWxlIHRyYW5zZmVyOyBpbXBsaWVzIC1WLiBFcXVpdmFsZW50IHRv IFNFVAorICAgVFJBTlNGRVIgTU9ERSBNQU5VQUwsIFNFVCBGSUxFIFRZUEUgVEVYVC4KKyAgIC1W IE4gRGlzYWJsZSBhdXRvbWF0aWMgcGVyLWZpbGUgdGV4dC9iaW5hcnkgc3dpdGNoaW5nLiBFcXVp dmFsZW50IHRvCisgICBTRVQgVFJBTlNGRVIgTU9ERSBNQU5VQUwuCisgICAtWSBOIFNraXAgKGRv bid0IGV4ZWN1dGUpIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlLgorICAgLWEgYXJnIE4gQXMtbmFt ZSBmb3IgZmlsZShzKSBpbiAtcywgLXIsIG9yIC1nLgorICAgQXJndW1lbnQ6IEFzLW5hbWUgc3Ry aW5nIChhbHRlcm5hdGl2ZSBmaWxlbmFtZSkuIFdoZW4gcmVjZWl2aW5nIGZpbGVzLAorICAgdGhp cyBjYW4gYmUgYSBkaXJlY3RvcnkgbmFtZS4KKyAgIC1iIGFyZyBOIFNwZWVkIGZvciBzZXJpYWwg ZGV2aWNlLiBFcXVpdmFsZW50IHRvIFNFVCBTUEVFRC4KKyAgIEFyZ3VtZW50OiBOdW1lcmljIEJp dHMgcGVyIHNlY29uZCBmb3Igc2VyaWFsIGNvbm5lY3Rpb25zLgorICAgLWMgWSBFbnRlciBDb25u ZWN0IHN0YXRlIGJlZm9yZSB0cmFuc2ZlcnJpbmcgZmlsZXMuCisgICAtZCBOIENyZWF0ZSBhIGRl YnVnLmxvZyBmaWxlIHdpdGggZGV0YWlsZWQgZGVidWdnaW5nIGluZm9ybWF0aW9uIChhCisgICBz ZWNvbmQgLWQgYWRkcyB0aW1lc3RhbXBzKS4gRXF1aXZhbGVudCB0byBMT0cgREVCVUcgYnV0IHRh a2VzIGVmZmVjdAorICAgc29vbmVyLgorICAgLWUgYXJnIE4gTWF4aW11bSBsZW5ndGggZm9yIGlu Y29taW5nIEtlcm1pdCBmaWxlLXRyYW5zZmVyIHBhY2tldHMuCisgICBFcXVpdmFsZW50IHRvIFNF VCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEguCisgICBBcmd1bWVudDogTGVuZ3RoIGluIGJ5dGVzLgor ICAgLWYgWSBTZW5kIGEgRklOSVNIIGNvbW1hbmQgdG8gYSBLZXJtaXQgc2VydmVyLgorICAgLWcg YXJnIE4gR2V0IGZpbGUocykgZnJvbSBhIEtlcm1pdCBzZXJ2ZXIuCisgICBBcmd1bWVudDogRmls ZSBzcGVjaWZpY2F0aW9uIG9uIG90aGVyIGNvbXB1dGVyLCBpbiBxdW90ZXMgaWYgaXQKKyAgIGNv bnRhaW5zIG1ldGFjaGFyYWN0ZXJzLiBFcXVpdmFsZW50IHRvIEdFVC4KKyAgIEFsc28gc2VlOiAt YSwgLUcsIC1yLgorICAgLWggWSBQcmludCBIZWxwIHRleHQgZm9yIHNpbmdsZS1sZXR0ZXIgY29t bWFuZC1saW5lIG9wdGlvbnMgKHBpcGUgdGhydQorICAgJ21vcmUnIHRvIHByZXZlbnQgc2Nyb2xs aW5nKS4KKyAgIC1pIE4gRm9yY2UgYmluYXJ5IChJbWFnZSkgbW9kZSBmb3IgZmlsZSB0cmFuc2Zl cjsgaW1wbGllcyAtVi4KKyAgIEVxdWl2YWxlbnQgdG8gU0VUIFRSQU5TRkVSIE1PREUgTUFOVUFM LCBTRVQgRklMRSBUWVBFIEJJTkFSWS4KKyAgIC1qIGFyZyBOIE1ha2UgYSBUQ1AvSVAgY29ubmVj dGlvbi4KKyAgIEFyZ3VtZW50OiBJUCBob3N0IG5hbWUvYWRkcmVzcyBhbmQgb3B0aW9uYWwgc2Vy dmljZSBuYW1lIG9yIG51bWJlci4KKyAgIEVxdWl2YWxlbnQgdG8gdGhlIFRFTE5FVCBjb21tYW5k LgorICAgQWxzbyBzZWU6IC1KLCAtRi4KKyAgIC1rIFkgUmVjZWl2ZSBmaWxlKHMpIHRvIHN0YW5k YXJkIG91dHB1dCwgd2hpY2ggbm9ybWFsbHkgd291bGQgYmUgcGlwZWQKKyAgIHRvIGFub3RoZXIg cHJvY2Vzcy4KKyAgIEFsc28gc2VlOiAtciwgLUcuCisgICAtbCBhcmcgTiAoTG93ZXJjYXNlIGxl dHRlciBMKSBNYWtlIGEgY29ubmVjdGlvbiBvbiB0aGUgZ2l2ZW4gc2VyaWFsCisgICBjb21tdW5p Y2F0aW9ucyBkZXZpY2UuIEVxdWl2YWxlbnQgdG8gdGhlIFNFVCBMSU5FIChTRVQgUE9SVCkgY29t bWFuZC4KKyAgIEFyZ3VtZW50OiBTZXJpYWwgZGV2aWNlIG5hbWUsIGUuZy4gL2Rldi90dHlTMC4K KyAgIC1tIGFyZyBOIE1vZGVtIHR5cGUgZm9yIHVzZSB3aXRoIHRoZSAtbCBkZXZpY2UuIEVxdWl2 YWxlbnQgdG8gdGhlIFNFVAorICAgTU9ERU0gVFlQRSBjb21tYW5kLgorICAgQXJndW1lbnQ6IE1v ZGVtIG5hbWUgYXMgaW4gU0VUIE1PREVNIFRZUEUgY29tbWFuZCwgZS5nLiAidXNyb2JvdGljcyIu CisgICAtbiBZIEVudGVyIENvbm5lY3Qgc3RhdGUgYWZ0ZXIgdHJhbnNmZXJyaW5nIGZpbGVzICho aXN0b3JpY2FsKS4KKyAgIC1wIGFyZyBOIFBhcml0eS4gRXF1aXZhbGVudCB0byB0aGUgU0VUIFBB UklUWSBjb21tYW5kLgorICAgQXJndW1lbnQ6IE9uZSBvZiB0aGUgZm9sbG93aW5nOiBlKHZlbiks IG8oZGQpLCBtKGFyayksIG4ob25lKSwgcyhwYWNlKS4KKyAgIC1xIE4gUXVpZXQgKHN1cHByZXNz IG1vc3QgbWVzc2FnZXMpLiBFcXVpdmFsZW50IHRvIFNFVCBRVUlFVCBPTi4KKyAgIC1yIFkgUmVj ZWl2ZSBmaWxlKHMpLiBFcXVpdmFsZW50IHRvIHRoZSBSRUNFSVZFIGNvbW1hbmQuCisgICBBcmd1 bWVudDogKG5vbmUsIGJ1dCBzZWUgLWEpCisgICAtcyBhcmcgTiBTZW5kIGZpbGUocykuCisgICBB cmd1bWVudDogT25lIG9yIG1vcmUgbG9jYWwgZmlsZSBzcGVjaWZpY2F0aW9ucy4gRXF1aXZhbGVu dCB0byB0aGUgU0VORAorICAgY29tbWFuZC4KKyAgIEFsc28gc2VlOiAtYS4KKyAgIC10IE4gKEhp c3RvcmljYWwpIFhvbiAoQ3RybC1RKSBUdXJuYXJvdW5kIGNoYXJhY3RlciBmb3IgaGFsZi1kdXBs ZXgKKyAgIGNvbm5lY3Rpb25zICh1c2VkIG9uIHNlcmlhbCBsaW5lbW9kZSBjb25uZWN0aW9ucyB0 byBvbGQgbWFpbmZyYW1lcykuCisgICBFcXVpdmFsZW50IHRvIFNFVCBEVVBMRVggSEFMRiwgU0VU IEhBTkRTSEFLRSBYT04uCisgICAtdiBhcmcgTiBXaW5kb3cgc2l6ZSBmb3IgS2VybWl0IHByb3Rv Y29sIChpZ25vcmVkIHdoZW4gc3RyZWFtaW5nKS4KKyAgIEVxdWl2YWxlbnQgdG8gU0VUIFdJTkRP Vy1TSVpFLgorICAgQXJndW1lbnQ6IE51bWJlciwgMSB0byAzMi4KKyAgIC13IE4gSW5jb21pbmcg ZmlsZXMgV3JpdGUgb3ZlciBleGlzdGluZyBmaWxlcy4gRXF1aXZhbGVudCB0byBTRVQgRklMRQor ICAgQ09MTElTSU9OIE9WRVJXUklURS4KKyAgIC14IFkgRW50ZXIgc2VydmVyIG1vZGUuIEVxdWl2 YWxlbnQgdG8gdGhlIFNFUlZFUiBjb21tYW5kLiBBbHNvIHNlZTogLU8uCisgICAteSBhcmcgTiBB bHRlcm5hdGl2ZSBpbml0aWFsaXphdGlvbiBmaWxlLgorICAgQXJndW1lbnQ6IEZpbGVuYW1lLgor ICAgLXogTiBGb3JjZSBmb3JlZ3JvdW5kIGJlaGF2aW9yLiBUbyBiZSB1c2VkIGluIGNhc2UgS2Vy bWl0IGRvZXNuJ3QKKyAgIGF1dG9tYXRpY2FsbHkgc2Vuc2UgaXRzIGZvcmVncm91bmQgc3RhdHVz LiBFcXVpdmFsZW50IHRvIHRoZSBTRVQKKyAgIEJBQ0tHUk9VTkQgT0ZGIGNvbW1hbmQuCisKKyAg IEV4dGVuZGVkIGNvbW1hbmQtbGluZSBvcHRpb25zIChuZWNlc3NhcnkgYmVjYXVzZSBzaW5nbGUt bGV0dGVyIG9uZXMgYXJlCisgICBhYm91dCB1c2VkIHVwKSBzdGFydCB3aXRoIHR3byBkYXNoZXMg KC0tKSwgd2l0aCB3b3JkcyByYXRoZXIgdGhhbgorICAgc2luZ2xlIGxldHRlcnMgYXMgb3B0aW9u IG5hbWVzLiBJZiBhbiBleHRlbmRlZCBvcHRpb24gdGFrZXMgYW4KKyAgIGFyZ3VtZW50LCBpdCBp cyBzZXBhcmF0ZWQgZnJvbSB0aGUgb3B0aW9uIHdvcmQgYnkgYSBjb2xvbiAoOikuIEV4dGVuZGVk CisgICBvcHRpb25zIGluY2x1ZGU6CisKKyAgIE9wdGlvbiBEZXNjcmlwdGlvbgorICAgLS1iYW5u ZXJmaWxlOmZpbGVuYW1lIEZpbGUgdG8gZGlzcGxheSB1cG9uIHN0YXJ0dXAgb3IgSUtTRCBsb2dp bi4KKyAgIC0tY2RmaWxlOmZpbGVuYW1lIEZpbGUgdG8gYmUgc2VudCBmb3IgZGlzcGxheSB0byB0 aGUgY2xpZW50IHdoZW4gc2VydmVyCisgICBjaGFuZ2VzIGRpcmVjdG9yeSAoZmlsZW5hbWUgaXMg cmVsYXRpdmUgdG8gdGhlIGNoYW5nZWQtdG8gZGlyZWN0b3J5KS4KKyAgIC0tY2RtZXNzYWdlOntv bixvZmZ9IEVuYWJsZS9kaXNhYmxlIHRoZSBzZXJ2ZXIgQ0QgbWVzc2FnZSBmZWF0dXJlLgorICAg LS1oZWxwIFByaW50cyB1c2FnZSBtZXNzYWdlIGZvciBleHRlbmRlZCBvcHRpb25zLgorICAgLS1o ZWxwZmlsZTpmaWxlbmFtZSBEZXNpZ25hdGVzIGEgZmlsZSBjb250YWluaW5nIGN1c3RvbSB0ZXh0 IHRvIHJlcGxhY2UKKyAgIHRoZSB0b3AtbGV2ZWwgSEVMUCBjb21tYW5kLgorICAgLS1ub2ludGVy cnVwdHMgRGlzYWJsZXMga2V5Ym9hcmQgaW50ZXJydXB0cy4KKyAgIC0tbm9wZXJtcyBEaXNhYmxl cyB0aGUgS2VybWl0IHByb3RvY29sIGZpbGUgUGVybWlzc2lvbnMgYXR0cmlidXRlLCB0bworICAg cHJldmVudCB0cmFuc21pc3Npb24gb2YgZmlsZSBwZXJtaXNzaW9ucyAocHJvdGVjdGlvbikgZnJv bSBzZW5kZXIgdG8KKyAgIHJlY2VpdmVyLgorCisgICBQbHVzIHNldmVyYWwgb3RoZXIgWzY5XUlL U0QtT25seSBvcHRpb25zLgorCisgICBTZWUgdGhlIFs3MF1maWxlLXRyYW5zZmVyIHNlY3Rpb24g Zm9yIGV4YW1wbGVzIG9mIGNvbW1hbmQtbGluZQorICAgaW52b2NhdGlvbi4KKworQ09NTUFORCBM QU5HVUFHRQorCisgICBbNzFdVG9wIFs3Ml1Db250ZW50cyBbNzNdTmV4dCBbNzRdUHJldmlvdXMK KworICAgICAqIFs3NV1Db21tYW5kIEZpbGVzLCBNYWNyb3MsIGFuZCBTY3JpcHRzCisgICAgICog Wzc2XUNvbW1hbmQgTGlzdAorCisgICBDLUtlcm1pdCdzIGludGVyYWN0aXZlIGNvbW1hbmQgbGFu Z3VhZ2UgaXMgdGhlIHN1YmplY3Qgb2YgYQorICAgWzc3XTYyMi1wYWdlIGJvb2sgYW5kIGFub3Ro ZXIgc2V2ZXJhbCBodW5kcmVkIHBhZ2VzIG9mIHVwZGF0ZXMsIGZhciB0b28KKyAgIG11Y2ggZm9y IGEgbWFudWFsIHBhZ2UuIEJ1dCBpdCdzIG5vdCBoYXJkIHRvIGdldCBzdGFydGVkLiBBdCB0aGUg c2hlbGwKKyAgIHByb21wdCwganVzdCB0eXBlICJrZXJtaXQiIHRvIGdldCBDLUtlcm1pdCdzIGlu dGVyYWN0aXZlIGNvbW1hbmQKKyAgIHByb21wdDoKKworICAkIGtlcm1pdAorICAoL2N1cnJlbnQv ZGlyZWN0b3J5KSBDLUtlcm1pdD4KKworICAgQmVnaW4gYnkgdHlwaW5nICJoZWxwIiAoYW5kIHRo ZW4gcHJlc3MgdGhlIFJldHVybiBvciBFbnRlciBrZXkpIGZvciBhCisgICB0b3AtbGV2ZWwgb3Zl cnZpZXcsIHJlYWQgaXQsIGFuZCBnbyBmcm9tIHRoZXJlLiBZb3VyIHNlY29uZCBjb21tYW5kCisg ICBzaG91bGQgcHJvYmFibHkgYmUgImludHJvIiAoaW50cm9kdWN0aW9uKS4gTm90ZSB0aGUgcHJv bXB0IHNob3dzIHlvdXIKKyAgIGN1cnJlbnQgZGlyZWN0b3J5ICh1bmxlc3MgeW91IHRlbGwgS2Vy bWl0IHRvIHByb21wdCB5b3Ugd2l0aCBzb21ldGhpbmcKKyAgIGVsc2UpLgorCisgICBJbnRlcmFj dGl2ZSBjb21tYW5kcyBhcmUgY29tcG9zZWQgbWFpbmx5IG9mIHJlZ3VsYXIgRW5nbGlzaCB3b3Jk cywKKyAgIHVzdWFsbHkgaW4gdGhlIGZvcm0gb2YgaW1wZXJhdGl2ZSBzZW50ZW5jZXMsIHN1Y2gg YXM6CisKKyAgc2VuZCBvb2ZhLnR4dAorCisgICB3aGljaCB0ZWxscyBLZXJtaXQgdG8gc2VuZCAo dHJhbnNmZXIpIHRoZSBmaWxlIHdob3NlIG5hbWUgaXMgb29mYS50eHQsCisgICBvcjoKKworICBz ZXQgdHJhbnNmZXIgbW9kZSBhdXRvbWF0aWMKKworICAgd2hpY2ggc2V0cyBLZXJtaXQncyAidHJh bnNmZXIgbW9kZSIgdG8gImF1dG9tYXRpYyIgKHdoYXRldmVyIHRoYXQKKyAgIG1lYW5zKS4KKwor ICAgV2hpbGUgdHlwaW5nIGNvbW1hbmRzLCB5b3UgY2FuIGFiYnJldmlhdGUsIGFzayBmb3IgaGVs cCAoYnkgcHJlc3NpbmcKKyAgIHRoZSAiPyIga2V5IGFueXdoZXJlIGluIGEgY29tbWFuZCksIGNv bXBsZXRlIGtleXdvcmRzIG9yIGZpbGVuYW1lcworICAgKHdpdGggdGhlIFRhYiBvciBFc2Mga2V5 KSwgYW5kIGVkaXQgeW91ciB0eXBpbmcgd2l0aCBCYWNrc3BhY2Ugb3IKKyAgIERlbGV0ZSwgQ3Ry bC1XLCBDdHJsLVUsIGV0Yy4gWW91IGNhbiBhbHNvIHJlY2FsbCBwcmV2aW91cyBjb21tYW5kcywK KyAgIHNhdmUgeW91ciBjb21tYW5kIGhpc3RvcnksIGFuZCB3aG8ga25vd3Mgd2hhdCBlbHNlLiBH aXZlIHRoZSBJTlRSTworICAgY29tbWFuZCBmb3IgZGV0YWlscy4KKworICAgQy1LZXJtaXQgaGFz IGh1bmRyZWRzIG9mIGNvbW1hbmRzLCBhbmQgdGhleSBjYW4gYmUgaXNzdWVkIGluIGluZmluaXRl CisgICB2YXJpZXR5IGFuZCBjb21iaW5hdGlvbnMsIGluY2x1ZGluZyBjb21tYW5kcyBmb3I6CisK KyAgICAgKiBNYWtpbmcgY29ubmVjdGlvbnMgKFNFVCBMSU5FLCBESUFMLCBURUxORVQsIFNTSCwg RlRQLCBDT05ORUNULCAuLi4pCisgICAgICogQnJlYWtpbmcgY29ubmVjdGlvbnMgKEhBTkdVUCwg Q0xPU0UpCisgICAgICogVHJhbnNmZXJyaW5nIGZpbGVzIChTRU5ELCBHRVQsIFJFQ0VJVkUsIE1P VkUsIFJFU0VORCwgLi4uKQorICAgICAqIEVzdGFibGlzaGluZyBwcmVmZXJlbmNlcyAoU0VUKQor ICAgICAqIERpc3BsYXlpbmcgcHJlZmVyZW5jZXMgKFNIT1cpCisgICAgICogTWFuYWdpbmcgbG9j YWwgZmlsZXMgKENELCBERUxFVEUsIE1LRElSLCBESVJFQ1RPUlksIFJFTkFNRSwgVFlQRSwKKyAg ICAgICAuLi4pCisgICAgICogTWFuYWdpbmcgcmVtb3RlIGZpbGVzIChSQ0QsIFJERUwsIFJNS0RJ UiwgUkRJUiwgLi4uKQorICAgICAqIFVzaW5nIGxvY2FsIGZpbGVzIChGT1BFTiwgRkNMT1NFLCBG UkVBRCwgRldSSVRFKQorICAgICAqIFByb2dyYW1taW5nIChUQUtFLCBERUZJTkUsIElGLCBGT1Is IFdISUxFLCBTV0lUQ0gsIERFQ0xBUkUsIC4uLikKKyAgICAgKiBJbnRlcmFjdGluZyB3aXRoIHRo ZSB1c2VyIChFQ0hPLCBBU0ssIC4uLikKKyAgICAgKiBJbnRlcmFjdGluZyB3aXRoIGEgcmVtb3Rl IGNvbXB1dGVyIChJTlBVVCwgT1VUUFVULCAuLi4pCisgICAgICogSW50ZXJhY3Rpbmcgd2l0aCBs b2NhbCBwcm9ncmFtcyAoUlVOLCBFWEVDLCBQVFksIC4uLikKKyAgICAgKiBMb2dnaW5nIHRoaW5n cyAoTE9HIFNFU1NJT04sIExPRyBQQUNLRVRTLCBMT0cgREVCVUcsIC4uLikKKworICAgQW5kIG9m IGNvdXJzZSBRVUlUIG9yIEVYSVQgdG8gZ2V0IG91dCBhbmQgSEVMUCB0byBnZXQgaGVscCwgYW5k IGZvcgorICAgcHJvZ3JhbW1lcnM6IGxvb3BzLCBkZWNpc2lvbiBtYWtpbmcsIHZhcmlhYmxlcywg YXJyYXlzLCBhc3NvY2lhdGl2ZQorICAgYXJyYXlzLCBpbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2lu dCBhcml0aG1ldGljLCBtYWNyb3MsIGJ1aWx0LWluIGFuZAorICAgdXNlci1kZWZpbmVkIGZ1bmN0 aW9ucywgc3RyaW5nIG1hbmlwdWxhdGlvbiwgcGF0dGVybiBtYXRjaGluZywgYmxvY2sKKyAgIHN0 cnVjdHVyZSwgc2NvcGluZywgcmVjdXJzaW9uLCBhbmQgYWxsIHRoZSByZXN0LiBUbyBnZXQgYSBs aXN0IG9mIGFsbAorICAgQy1LZXJtaXQncyBjb21tYW5kcywgdHlwZSBhIHF1ZXN0aW9uIG1hcmsg KD8pIGF0IHRoZSBwcm9tcHQuIFRvIGdldCBhCisgICBkZXNjcmlwdGlvbiBvZiBhbnkgY29tbWFu ZCwgdHlwZSBIRUxQIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIHRoZQorICAgY29tbWFuZCwgZm9y IGV4YW1wbGU6CisKKyAgaGVscCBzZW5kCisKKyAgIFRoZSBjb21tYW5kIGludGVycnVwdGlvbiBj aGFyYWN0ZXIgaXMgQ3RybC1DIChob2xkIGRvd24gdGhlIEN0cmwga2V5CisgICBhbmQgcHJlc3Mg dGhlIEMga2V5KS4KKworICAgVGhlIGNvbW1hbmQgbGFuZ3VhZ2UgImVzY2FwZSBjaGFyYWN0ZXIi LCB1c2VkIHRvIGludHJvZHVjZSB2YXJpYWJsZQorICAgbmFtZXMsIGZ1bmN0aW9uIGludm9jYXRp b25zLCBhbmQgc28gb24sIGlzIGJhY2tzbGFzaCAoXCkuIElmIHlvdSBuZWVkCisgICB0byBpbmNs dWRlIGEgbGl0ZXJhbCBiYWNrc2xhc2ggaW4gYSBjb21tYW5kLCB0eXBlIHR3byBvZiB0aGVtLCBl LmcuOgorCisgIGdldCBjOlxcazk1XFxrOTVjdXN0b20uaW5pCisKK0NvbW1hbmQgRmlsZXMsIE1h Y3JvcywgYW5kIFNjcmlwdHMKKworICAgQSBmaWxlIGNvbnRhaW5pbmcgS2VybWl0IGNvbW1hbmRz IGlzIGNhbGxlZCBhIEtlcm1pdCBjb21tYW5kIGZpbGUgb3IKKyAgIEtlcm1pdCBzY3JpcHQuIEl0 IGNhbiBiZSBleGVjdXRlZCB3aXRoIEtlcm1pdCdzIFRBS0UgY29tbWFuZDoKKworICAoL2N1cnJl bnQvZGlyKSBDLUtlcm1pdD4gdGFrZSBjb21tYW5kZmlsZQorCisgICAod2hlcmUgImNvbW1hbmRm aWxlIiBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCBmaWxlKS4gUGxlYXNlIGRvbid0CisgICBw aXBlIGEgY29tbWFuZCBmaWxlIGludG8gS2VybWl0J3Mgc3RhbmRhcmQgaW5wdXQgKHdoaWNoIG1p Z2h0IG9yIG1pZ2h0CisgICBub3Qgd29yayk7IGlmIHlvdSBoYXZlIEtlcm1pdCBjb21tYW5kcyBp biBhIGZpbGUsIHRlbGwgS2VybWl0IHRvIFRBS0UKKyAgIHRoZSBmaWxlLgorCisgICBJbiBVbml4 IG9ubHksIGEgS2VybWl0IGNvbW1hbmQgZmlsZSBjYW4gYWxzbyBiZSBleGVjdXRlZCBkaXJlY3Rs eSBieQorICAgaW5jbHVkaW5nIGEgImtlcmJhbmciIGxpbmUgYXMgdGhlIGZpcnN0IGxpbmUgb2Yg dGhlIGZpbGU6CisKKyAgIyEvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgKworCisgICBUaGF0IGlzLCBh IHRvcCBsaW5lIHRoYXQgc3RhcnRzIHdpdGggIiMhIiwgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkg dGhlCisgICBmdWxsIHBhdGggb2YgdGhlIEtlcm1pdCBleGVjdXRhYmxlLCBhbmQgdGhlbiwgaWYg dGhlIEtlcm1pdCBzY3JpcHQgaXMKKyAgIHRvIGJlIGdpdmVuIGFyZ3VtZW50cyBvbiB0aGUgY29t bWFuZCBsaW5lLCBhIHNwYWNlIGFuZCBhIHBsdXMgc2lnbi4gVGhlCisgICBzY3JpcHQgZmlsZSBt dXN0IGFsc28gaGF2ZSBleGVjdXRlIHBlcm1pc3Npb246CisKKyAgY2htb2QgK3ggY29tbWFuZGZp bGUKKworICAgRXhjZXB0IGZvciB0aGUgIiArIiBwYXJ0LCB0aGlzIGlzIGV4YWN0bHkgdGhlIHNh bWUgYXMgeW91IHdvdWxkIGRvIGZvcgorICAgYSBzaGVsbCBzY3JpcHQsIGEgUGVybCBzY3JpcHQs IGV0Yy4gSGVyZSdzIGEgc2ltcGxlIGJ1dCB1c2VsZXNzIGV4YW1wbGUKKyAgIHNjcmlwdCB0aGF0 IHJlZ3VyZ2l0YXRlcyBpdHMgYXJndW1lbnRzICh1cCB0byB0aHJlZSBvZiB0aGVtKToKKworICAj IS91c3IvbG9jYWwvYmluL2tlcm1pdCArCisgIGlmIGRlZmluZWQgXCUxIGVjaG8gIkFyZ3VtZW50 IDE6IFwlMSIKKyAgaWYgZGVmaW5lZCBcJTIgZWNobyAiQXJndW1lbnQgMjogXCUyIgorICBpZiBk ZWZpbmVkIFwlMyBlY2hvICJBcmd1bWVudCAzOiBcJTMiCisgIGlmIGRlZmluZWQgXCU0IGVjaG8g ImV0Yy4uLiIKKyAgZXhpdAorCisgICBJZiB0aGlzIGZpbGUgaXMgc3RvcmVkIGluIHlvdXIgY3Vy cmVudCBkaXJlY3RvcnkgYXMgImNvbW1hbmRmaWxlIiwKKyAgIHRoZW46CisKKyAgLi9jb21tYW5k ZmlsZSBvbmUgdHdvIHRocmVlIGZvdXIgZml2ZQorCisgICBwcmludHM6CisKKyAgQXJndW1lbnQg MTogb25lCisgIEFyZ3VtZW50IDI6IHR3bworICBBcmd1bWVudCAzOiB0aHJlZQorICBldGMuLi4K KworICAgVGhpcyBpbGx1c3RyYXRlcyB0aGUgYmFzaWMgc3RydWN0dXJlIG9mIGEgc3RhbmRhbG9u ZSBLZXJtaXQgc2NyaXB0OiB0aGUKKyAgICJrZXJiYW5nIGxpbmUiLCB0aGVuIHNvbWUgY29tbWFu ZHMuIEl0IHNob3VsZCBlbmQgd2l0aCAiZXhpdCIgdW5sZXNzCisgICB5b3Ugd2FudCB0aGUgS2Vy bWl0IHByb21wdCB0byBhcHBlYXIgd2hlbiBpdCBpcyBmaW5pc2hlZC4gXCUxIGlzIHRoZQorICAg Zmlyc3QgYXJndW1lbnQsIFwlMiB0aGUgc2Vjb25kLCBhbmQgc28gb24uCisKKyAgIFlvdSBjYW4g YWxzbyBjcmVhdGUgeW91ciBvd24gY29tbWFuZHMgYnkgZGVmaW5pbmcgbmFtZWQgbWFjcm9zIGNv bXBvc2VkCisgICBvZiBvdGhlciBLZXJtaXQgY29tbWFuZHMgKG9yIG1hY3JvcykuIEhlcmUncyBh IHNpbXBsZSBleGFtcGxlOgorCisgIGRlZmluZSBteWRpYWwgeworICAgICAgc2V0IG1vZGVtIHR5 cGUgdXNyb2JvdGljcworICAgICAgc2V0IHBvcnQgL2Rldi90dHlTMAorICAgICAgaWYgZmFpbCBl bmQgMQorICAgICAgc2V0IHNwZWVkIDU3NjAwCisgICAgICBkaWFsIFwlMQorICAgICAgaWYgc3Vj Y2VzcyBjb25uZWN0CisgIH0KKworICAgVGhpcyBzaG93cyBob3cgeW91IGNhbiBjb21iaW5lIG1h bnkgY29tbWFuZHMgaW50byBvbmUgY29tbWFuZCwgIm15ZGlhbCIKKyAgIGluIHRoaXMgY2FzZSAo eW91IGNhbiB1c2UgYW55IG5hbWUgeW91IGxpa2UsIHByb3ZpZGVkIGl0IGRvZXMgbm90IGNsYXNo CisgICB3aXRoIHRoZSBuYW1lIG9mIGEgYnVpbHQtaW4gY29tbWFuZCkuIFdoZW4gdGhpcyBtYWNy byBkZWZpbml0aW9uIGlzIGluCisgICBlZmZlY3QsIHlvdSBjYW4gdHlwZSBjb21tYW5kcyBsaWtl OgorCisgIG15ZGlhbCA3NjU0MzIxCisKKyAgIGFuZCBpdCBleGVjdXRlcyBhbGwgdGhlIGNvbW1h bmRzIGluIG1hY3JvIGRlZmluaXRpb24sIHN1YnN0aXR1dGluZyB0aGUKKyAgIGZpcnN0IG9wZXJh bmQgKCI3NjU0MzIxIikgZm9yIHRoZSBmb3JtYWwgcGFyYW1ldGVyICgiXCUxIikgaW4gdGhlCisg ICBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHlvdSBmcm9tIGhhdmluZyB0byB0eXBlIGxvdHMgb2Yg Y29tbWFuZHMgZXZlcnkKKyAgIHRpbWUgeW91IHdhbnQgdG8gbWFrZSBhIG1vZGVtIGNhbGwuCisK KyAgIE9uZSB3YXkgdG8gaGF2ZSB0aGUgbWFjcm8gZGVmaW5pdGlvbiBpbiBlZmZlY3QgaXMgdG8g dHlwZSB0aGUKKyAgIGRlZmluaXRpb24gYXQgdGhlIEtlcm1pdCBwcm9tcHQuIEFub3RoZXIgd2F5 IGlzIHRvIHN0b3JlIHRoZSBkZWZpbml0aW9uCisgICBpbiBhIGZpbGUgYW5kIFRBS0UgdGhlIGZp bGUuIElmIHlvdSB3YW50IHRoZSBkZWZpbml0aW9uIHRvIGJlIGluIGVmZmVjdAorICAgYXV0b21h dGljYWxseSBldmVyeSB0aW1lIHlvdSBzdGFydCBLZXJtaXQsIHB1dCB0aGUgZGVmaW5pdGlvbiBp biB5b3VyCisgICBpbml0aWFsaXphdGlvbiBvciBjdXN0b21pemF0aW9uIGZpbGUgKGV4cGxhaW5l ZCBbNzhdYmVsb3cpLgorCisgICBIZXJlJ3MgYSBzb21ld2hhdCBtb3JlIGFtYml0aW91cyBleGFt cGxlOgorCisgIGRlZmluZSBteWRlbGV0ZSB7CisgICAgICBsb2NhbCB0cmFzaAorICAgICAgYXNz aWduIHRyYXNoIFx2KGhvbWUpdHJhc2hjYW4vCisgICAgICBpZiBub3QgZGVmaW5lZCBcJTEgZW5k IDEgIkRlbGV0ZSB3aGF0PyIKKyAgICAgIGlmIHdpbGQgXCUxIGVuZCAxICJEZWxldGluZyBtdWx0 aXBsZSBmaWxlcyBpcyB0b28gc2NhcnkiCisgICAgICBpZiBub3QgZXhpc3QgXCUxIGVuZCAxICJJ IGNhbid0IGZpbmQgXCUxIgorICAgICAgaWYgbm90IGRpcmVjdG9yeSBcbSh0cmFzaCkgeworICAg ICAgICAgIG1rZGlyIFxtKHRyYXNoKQorICAgICAgICAgIGlmIGZhaWwgZW5kIDEgIk5vIHRyYXNo IGNhbiIKKyAgICAgIH0KKyAgICAgIHJlbmFtZSAvbGlzdCBcJTEgXG0odHJhc2gpCisgIH0KKyAg ZGVmaW5lIG15dW5kZWxldGUgeworICAgICAgbG9jYWwgdHJhc2gKKyAgICAgIGFzc2lnbiB0cmFz aCBcdihob21lKXRyYXNoY2FuLworICAgICAgaWYgbm90IGRlZmluZWQgXCUxIGVuZCAxICJVbmRl bGV0ZSB3aGF0PyIKKyAgICAgIGlmIHdpbGQgXCUxIGVuZCAxICJVbmRlbGV0aW5nIG11bHRpcGxl IGZpbGVzIGlzIHRvbyBoYXJkIgorICAgICAgaWYgbm90IGRpcmVjdG9yeSBcbSh0cmFzaCkgZW5k IDEgIk5vIHRyYXNoIGNhbiIKKyAgICAgIGlmIG5vdCBleGlzdCBcbSh0cmFzaClcJTEgZW5kIDEg IkkgY2FuJ3QgZmluZCBcJTEgaW4gdHJhc2ggY2FuIgorICAgICAgcmVuYW1lIC9saXN0IFxtKHRy YXNoKVwlMSAuCisgIH0KKworICAgVGhlc2UgbWFjcm9zIGFyZSBub3QgZXhhY3RseSBwcm9kdWN0 aW9uIHF1YWxpdHkgKHRoZXkgZG9uJ3QgaGFuZGxlCisgICBmaWxlbmFtZXMgdGhhdCBpbmNsdWRl IHBhdGggc2VnbWVudHMsIHRoZXkgZG9uJ3QgaGFuZGxlIG11bHRpcGxlIGZpbGVzLAorICAgZXRj KSwgYnV0IHlvdSBnZXQgdGhlIGlkZWE6IHlvdSBjYW4gcGFzcyBhcmd1bWVudHMgdG8gbWFjcm9z LCB0aGV5IGNhbgorICAgY2hlY2sgdGhlbSBhbmQgbWFrZSBvdGhlciBraW5kcyBvZiBkZWNpc2lv bnMsIGFuZCB0aGUgY29tbWFuZHMKKyAgIHRoZW1zZWx2ZXMgYXJlIHJlbGF0aXZlbHkgaW50dWl0 aXZlIGFuZCBpbnRlbGxpZ2libGUuCisKKyAgIElmIHlvdSBwdXQgdGhlIGFib3ZlIGxpbmVzIGlu dG8geW91ciBpbml0aWFsaXphdGlvbiBvciBjdXN0b21pemF0aW9uCisgICBmaWxlLCB5b3UnbGwg aGF2ZSBNWURFTEVURSBhbmQgTVlVTkRFTEVURSBjb21tYW5kcyBhdmFpbGFibGUgZXZlcnkgdGlt ZQorICAgeW91IHN0YXJ0IEtlcm1pdCwgYXQgbGVhc3QgYXMgbG9uZyBhcyB5b3UgZG9uJ3Qgc3Vw cHJlc3MgZXhlY3V0aW9uIG9mCisgICB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZS4gKEV4ZXJjaXNl IGZvciB0aGUgcmVhZGVyOiBNYWtlIHRoZXNlIG1hY3JvcworICAgZ2VuZXJhbGx5IHVzZWZ1bDog cmVtb3ZlIGxpbWl0YXRpb25zLCBhZGQgdHJhc2hjYW4gZGlzcGxheSwgYnJvd3NpbmcsCisgICBl bXB0eWluZywgZXRjLikKKworICAgS2VyYmFuZyBzY3JpcHRzIGV4ZWN1dGUgd2l0aG91dCB0aGUg aW5pdGlhbGl6YXRpb24gZmlsZS4gVGhpcyB0byBrZWVwCisgICB0aGVtIHBvcnRhYmxlIGFuZCBh bHNvIHRvIG1ha2UgdGhlbSBzdGFydCBmYXN0ZXIuIElmIHlvdSB3YW50IHRvIHdyaXRlCisgICBL ZXJiYW5nIHNjcmlwdHMgdGhhdCBkZXBlbmQgb24gdGhlIGluaXRpYWxpemF0aW9uIGZpbGUsIGlu Y2x1ZGUgdGhlCisgICBjb21tYW5kCisKKyAgdGFrZSBcdihob21lKS5rZXJtcmMKKworICAgYXQg dGhlIGRlc2lyZWQgc3BvdCBpbiB0aGUgc2NyaXB0LiBCeSB0aGUgd2F5LCBcdih4eHgpIGlzIGEg YnVpbHQtaW4KKyAgIHZhcmlhYmxlICh4eHggaXMgdGhlIHZhcmlhYmxlIG5hbWUsICJob21lIiBp biB0aGlzIGNhc2UpLiBUbyBzZWUgd2hhdAorICAgYnVpbHQtaW4gdmFyaWFibGVzIGFyZSBhdmFp bGFibGUsIHR5cGUgInNob3cgdmFyaWFibGVzIiBhdCB0aGUgQy1LZXJtaXQKKyAgIHByb21wdC4g VG8gc2VlIHdoYXQgZWxzZSB5b3UgY2FuIHNob3csIHR5cGUgInNob3cgPyIuIFxtKHh4eCkgaXMg YSB1c2VyCisgICBkZWZpbmVkIHZhcmlhYmxlIChzdHJpY3RseSBzcGVha2luZywgaXQgaXMgYSBt YWNybyB1c2VkIGFzIGEgdmFyaWFibGUpLgorCitDb21tYW5kIExpc3QKKworICAgQy1LZXJtaXQg aGFzIG1vcmUgdGhhbiAyMDAgdG9wLWxldmVsIGNvbW1hbmRzLCBhbmQgc29tZSBvZiB0aGVzZSwg c3VjaAorICAgYXMgU0VULCBicmFuY2ggb2ZmIGludG8gaHVuZHJlZHMgb2Ygc3ViY29tbWFuZHMg b2YgdGhlaXIgb3duLCBzbyBpdCdzCisgICBub3QgcHJhY3RpY2FsIHRvIGRlc2NyaWJlIHRoZW0g YWxsIGhlcmUuIEluc3RlYWQsIGhlcmUncyBhIGNvbmNpc2UgbGlzdAorICAgb2YgdGhlIG1vc3Qg Y29tbW9ubHkgdXNlZCB0b3AtbGV2ZWwgY29tbWFuZHMsIGdyb3VwZWQgYnkgY2F0ZWdvcnkuIFRv CisgICBsZWFybiBhYm91dCBlYWNoIGNvbW1hbmQsIHR5cGUgImhlbHAiIGZvbGxvd2VkIGJ5IHRo ZSBjb21tYW5kIG5hbWUsCisgICBlLmcuICJoZWxwIHNldCIuIFRlcm1zIHN1Y2ggYXMgQ29tbWFu ZCBzdGF0ZSBhbmQgQ29ubmVjdCBzdGF0ZSBhcmUKKyAgIGV4cGxhaW5lZCBpbiBzdWJzZXF1ZW50 IHNlY3Rpb25zLgorCisgICBPcHRpb25hbCBmaWVsZHMgYXJlIHNob3duIGluIFsgaXRhbGljaXpl ZCBicmFja2V0cyBdLiBmaWxlbmFtZSBtZWFucworICAgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZmls ZS4gZmlsZXNwZWMgbWVhbnMgYSBmaWxlIHNwZWNpZmljYXRpb24gdGhhdCBpcworICAgYWxsb3dl ZCB0byBjb250YWluIHdpbGRjYXJkIGNoYXJhY3RlcnMgbGlrZSAnKicgdG8gbWF0Y2ggZ3JvdXBz IG9mCisgICBmaWxlcy4gb3B0aW9ucyBhcmUgKG9wdGlvbmFsKSBzd2l0Y2hlcyBsaWtlIC9QQUdF LCAvTk9QQUdFLCAvUVVJRVQsCisgICBldGMsIGxpc3RlZCBpbiB0aGUgSEVMUCB0ZXh0IGZvciBl YWNoIGNvbW1hbmQuIEV4YW1wbGU6CisKKyAgc2VuZCAvcmVjdXJzaXZlIC9sYXJnZXI6MTAwMDAg L2FmdGVyOi0xd2VlayAvZXhjZXB0OioudHh0ICoKKworICAgd2hpY2ggY2FuIGJlIHJlYWQgYXMg InNlbmQgYWxsIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhbmQgYWxsIHRoZQorICAgb25l cyB1bmRlcm5lYXRoIGl0IHRoYXQgYXJlIGxhcmdlciB0aGFuIDEwMDAwIGJ5dGVzLCBubyBtb3Jl IHRoYW4gb25lCisgICB3ZWVrIG9sZCwgYW5kIHdob3NlIG5hbWVzIGRvbid0IGVuZCB3aXRoICIu dHh0Ii4KKworICAgQmFzaWMgQ29tbWFuZHMKKworICAgSEVMUCBSZXF1ZXN0cyB0b3AtbGV2ZWwg aGVscC4KKyAgIEhFTFAgY29tbWFuZCBSZXF1ZXN0cyBoZWxwIGFib3V0IHRoZSBnaXZlbiBjb21t YW5kLgorICAgSU5UUk9EVUNUSU9OIFJlcXVlc3RzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIEMt S2VybWl0LgorICAgTElDRU5TRSBEaXNwbGF5cyB0aGUgQy1LZXJtaXQgc29mdHdhcmUgY29weXJp Z2h0IGFuZCBsaWNlbnNlLgorICAgVkVSU0lPTiBEaXNwbGF5cyBDLUtlcm1pdCdzIHZlcnNpb24g bnVtYmVyLgorICAgRVhJVCBbIG51bWJlciBdIEV4aXRzIGZyb20gS2VybWl0IHdpdGggdGhlIGdp dmVuIHN0YXR1cyBjb2RlLiBTeW5vbnltczoKKyAgIFFVSVQsIEUsIFEuCisgICBUQUtFIGZpbGVu YW1lIFsgcGFyYW1ldGVycy4uLiBdIEV4ZWN1dGVzIGNvbW1hbmRzIGZyb20gdGhlIGdpdmVuIGZp bGUuCisgICBMT0cgaXRlbSBbIGZpbGVuYW1lIF0gS2VlcHMgYSBsb2cgb2YgdGhlIGdpdmVuIGl0 ZW0gaW4gdGhlIGdpdmVuIGZpbGUuCisgICBbIERPIF0gbWFjcm8gWyBwYXJhbWV0ZXJzLi4uIF0g ICAgRXhlY3V0ZXMgY29tbWFuZHMgZnJvbSB0aGUgZ2l2ZW4KKyAgIG1hY3JvLgorICAgU0VUIHBh cmFtZXRlciB2YWx1ZSBTZXRzIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdG8gdGhlIGdpdmVuIHZhbHVl LgorICAgU0hPVyBjYXRlZ29yeSBTaG93cyBzZXR0aW5ncyBpbiBhIGdpdmVuIGNhdGVnb3J5Lgor ICAgU1RBVFVTIFRlbGxzIHdoZXRoZXIgcHJldmlvdXMgY29tbWFuZCBzdWNjZWVkZWQgb3IgZmFp bGVkLgorICAgREFURSBbIGRhdGUtYW5kL29yLXRpbWUgXSBTaG93cyBjdXJyZW50IGRhdGUtdGlt ZSBvciBpbnRlcnByZXRzIGdpdmVuCisgICBkYXRlLXRpbWUuCisgICBSVU4gWyBleHRlcm4tY29t bWFuZCBbIHBhcmFtZXRlcnMuLi4gXSBSdW5zIHRoZSBnaXZlbiBleHRlcm5hbCBjb21tYW5kLgor ICAgU3lub255bTogIS4KKyAgIEVYRUMgWyBleHRlcm4tY29tbWFuZCBbIHBhcmFtcy4uLiBdIEtl cm1pdCBvdmVybGF5cyBpdHNlbGYgd2l0aCB0aGUKKyAgIGdpdmVuIGNvbW1hbmQuCisgICBTVVNQ RU5EIFN0b3BzIEtlcm1pdCBhbmQgcHV0cyBpdCBpbiB0aGUgYmFja2dyb3VuZC4gU3lub255bTog Wi4KKworICAgTG9jYWwgRmlsZSBNYW5hZ2VtZW50CisKKyAgIFRZUEUgWyBvcHRpb25zIF0gZmls ZW5hbWUgRGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBmaWxlLgorICAgTU9SRSBb IG9wdGlvbnMgXSBmaWxlbmFtZSBFcXVpdmFsZW50IHRvIFRZUEUgL1BBR0UgKHBhdXNlIGFmdGVy IGVhY2gKKyAgIHNjcmVlbmZ1bCkuCisgICBDQVQgWyBvcHRpb25zIF0gZmlsZW5hbWUgRXF1aXZh bGVudCB0byBUWVBFIC9OT1BBR0UuCisgICBIRUFEIFsgb3B0aW9ucyBdIGZpbGVuYW1lIERpc3Bs YXlzIHRoZSBmaXJzdCBmZXcgbGluZXMgb2YgYSBnaXZlbiBmaWxlLgorICAgVEFJTCBbIG9wdGlv bnMgXSBmaWxlbmFtZSBEaXNwbGF5cyB0aGUgbGFzdCBmZXcgbGluZXMgb2YgYSBnaXZlbiBmaWxl LgorICAgR1JFUCBbIG9wdGlvbnMgXSBwYXR0ZXJuIGZpbGVzcGVjIERpc3BsYXlzIGxpbmVzIGZy b20gZmlsZXMgdGhhdCBtYXRjaAorICAgdGhlIHBhdHRlcm4uIFN5bm9ueW06IEZJTkQuCisgICBE SVJFQ1RPUlkgWyBvcHRpb25zIF0gWyBmaWxlc3BlYyBdIExpc3RzIGZpbGVzIChidWlsdC1pbiwg bWFueQorICAgb3B0aW9ucykuCisgICBMUyBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjIF0gTGlzdHMg ZmlsZXMgKHJ1bnMgZXh0ZXJuYWwgImxzIiBjb21tYW5kKS4KKyAgIERFTEVURSBbIG9wdGlvbnMg XSBbIGZpbGVzcGVjIF0gRGVsZXRlcyBmaWxlcy4gU3lub255bTogUk0uCisgICBQVVJHRSBbIG9w dGlvbnMgXSBbIGZpbGVzcGVjIF0gUmVtb3ZlcyBiYWNrdXAgKCoufm5+KSBmaWxlcy4KKyAgIENP UFkgWyBvcHRpb25zIF0gWyBmaWxlc3BlY3MuLi4gXSBDb3BpZXMgZmlsZXMuIFN5bm9ueW06IENQ LgorICAgUkVOQU1FIFsgb3B0aW9ucyBdIFsgZmlsZXNwZWNzLi4uIF0gUmVuYW1lcyBmaWxlcy4g U3lub255bTogTVYuCisgICBDSE1PRCBbIG9wdGlvbnMgXSBbIGZpbGVzcGVjcy4uLiBdIENoYW5n ZXMgcGVybWlzc2lvbnMgb2YgZmlsZXMuCisgICBUUkFOU0xBVEUgZmlsZW5hbWUgY2hhcnNldHMg ZmlsZW5hbWUgXSBDb252ZXJ0cyBmaWxlJ3MgY2hhcmFjdGVyIHNldC4KKyAgIFN5bm9ueW06IFhM QVRFLgorICAgQ0QgQ2hhbmdlcyB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHlvdXIgaG9tZSBk aXJlY3RvcnkuCisgICBDRCBkaXJlY3RvcnkgQ2hhbmdlcyB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5 IHRvIHRoZSBvbmUgZ2l2ZW4uCisgICBDRFVQIENoYW5nZXMgeW91ciB3b3JraW5nIGRpcmVjdG9y eSBvbmUgbGV2ZWwgdXAuCisgICBQV0QgRGlzcGxheXMgeW91ciB3b3JraW5nIGRpcmVjdG9yeS4K KyAgIEJBQ0sgUmV0dXJucyB0byB5b3VyIHByZXZpb3VzIHdvcmtpbmcgZGlyZWN0b3J5LgorICAg TUtESVIgWyBkaXJlY3RvcnkgXSBDcmVhdGVzIGEgZGlyZWN0b3J5LgorICAgUk1ESVIgWyBkaXJl Y3RvcnkgXSBSZW1vdmVzIGEgZGlyZWN0b3J5LgorCisgICBNYWtpbmcgQ29ubmVjdGlvbnMKKwor ICAgU0VUIExJTkUgWyBvcHRpb25zIF0gZGV2aWNlbmFtZSAgICAgICAgT3BlbnMgdGhlIG5hbWVk IHNlcmlhbCBwb3J0LgorICAgU3lub255bTogU0VUIFBPUlQuCisgICBPUEVOIExJTkUgWyBvcHRp b25zIF0gZGV2aWNlbmFtZSBTYW1lIGFzIFNFVCBMSU5FLiBTeW5vbnltOiBPUEVOIFBPUlQuCisg ICBTRVQgTU9ERU0gVFlQRSBbIG5hbWUgXSBUZWxscyBLZXJtaXQgd2hhdCBraW5kIG9mIG1vZGVt IGlzIG9uIHRoZSBwb3J0LgorICAgRElBTCBbIG51bWJlciBdIFRlbGxzIEtlcm1pdCB0byBkaWFs IHRoZSBnaXZlbiBwaG9uZSBudW1iZXIgd2l0aCB0aGUKKyAgIG1vZGVtLgorICAgUkVESUFMIFJl ZGlhbHMgdGhlIG1vc3QgcmVjZW50bHkgZGlhbGVkIHBob25lIG51bWJlci4KKyAgIEFOU1dFUiBX YWl0cyBmb3IgYW5kIGFuc3dlcnMgYW4gaW5jb21pbmcgY2FsbCBvbiB0aGUgbW9kZW0uCisgICBB VVRIRU5USUNBVEUgWyBwYXJhbWV0ZXJzLi4uIF0gUGVyZm9ybXMgc2VjdXJlIGF1dGhlbnRpY2F0 aW9uIG9uIGEKKyAgIFRDUC9JUCBjb25uZWN0aW9uLgorICAgU0VUIE5FVFdPUksgVFlQRSB7IFRD UC9JUCwgWC4yNSwgLi4uIH0gU2VsZWN0cyBuZXR3b3JrIHR5cGUgZm9yCisgICBzdWJzZXF1ZW50 IFNFVCBIT1NUIGNvbW1hbmRzLgorICAgU0VUIEhPU1QgWyBvcHRpb25zIF0gaG9zdCBbIHBvcnQg XSBPcGVucyBhIG5ldHdvcmsgY29ubmVjdGlvbiB0byB0aGUKKyAgIGdpdmVuIGhvc3QgYW5kIHBv cnQuCisgICBTRVQgSE9TVCBbIG9wdGlvbnMgXSAqIHBvcnQgV2FpdHMgZm9yIGFuIGluY29taW5n IFRDUC9JUCBjb25uZWN0aW9uIG9uCisgICB0aGUgZ2l2ZW4gcG9ydC4KKyAgIFRFTE5FVCBbIG9w dGlvbnMgXSBob3N0IE9wZW5zIGEgVGVsbmV0IGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kCisg ICBlbnRlcnMgQ29ubmVjdCBzdGF0ZS4KKyAgIFJMT0dJTiBbIG9wdGlvbnMgXSBob3N0IE9wZW5z IGFuIFJsb2dpbiBjb25uZWN0aW9uIHRvIHRoZSBob3N0IGFuZAorICAgZW50ZXJzIENvbm5lY3Qg c3RhdGUuCisgICBJS1NEIFsgb3B0aW9ucyBdIGhvc3QgT3BlbnMgYSBjb25uZWN0aW9uIHRvIGFu IEludGVybmV0IEtlcm1pdCBTZXJ2aWNlLgorICAgU1NIIFsgb3B0aW9ucyBdIGhvc3QgT3BlbnMg YW4gU1NIIGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIGVudGVycworICAgQ29ubmVjdCBzdGF0 ZS4KKyAgIEZUUCBPUEVOIGhvc3QgWyBvcHRpb25zIF0gT3BlbnMgYW4gRlRQIGNvbm5lY3Rpb24g dG8gdGhlIGhvc3QuCisgICBIVFRQIFsgb3B0aW9ucyBdIE9QRU4gaG9zdCBPcGVucyBhbiBIVFRQ IGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QuCisgICBQVFkgZXh0ZXJuYWwtY29tbWFuZCBSdW5zIHRo ZSBjb21tYW5kIG9uIGEgcHNldWRvdGVybWluYWwgYXMgaWYgaXQgd2VyZQorICAgYSBjb25uZWN0 aW9uLgorICAgUElQRSBleHRlcm5hbC1jb21tYW5kIFJ1bnMgdGhlIGNvbW1hbmQgdGhyb3VnaCBh IHBpcGUgYXMgaWYgaXQgd2VyZSBhCisgICBjb25uZWN0aW9uLgorCisgICBVc2luZyBDb25uZWN0 aW9ucworCisgICBDT05ORUNUIFsgb3B0aW9ucyBdICAgICAgICAgICAgICAgICAgICBFbnRlcnMg Q29ubmVjdCAodGVybWluYWwpIHN0YXRlLgorICAgU3lub255bTogQy4KKyAgIFJFRElSRUNUIGNv bW1hbmQgUmVkaXJlY3RzIHRoZSBnaXZlbiBleHRlcm5hbCBjb21tYW5kIG92ZXIgdGhlCisgICBj b25uZWN0aW9uLgorICAgVEVMT1BUIGNvbW1hbmQgU2VuZHMgYSBUZWxuZXQgcHJvdG9jb2wgY29t bWFuZCAoVGVsbmV0IGNvbm5lY3Rpb25zCisgICBvbmx5KS4KKyAgIEN0cmwtXEMgIkVzY2FwZXMg YmFjayIgZnJvbSBDb25uZWN0IHN0YXRlIHRvIENvbW1hbmQgc3RhdGUuCisgICBDdHJsLVxCIChJ biBDb25uZWN0IHN0YXRlKSBTZW5kcyBhIEJSRUFLIHNpZ25hbCAoc2VyaWFsIG9yIFRlbG5ldCku CisgICBDdHJsLVwhIChJbiBDb25uZWN0IHN0YXRlKSBFbnRlcnMgaW5mZXJpb3Igc2hlbGw7ICJl eGl0IiB0byByZXR1cm4uCisgICBDdHJsLVw/IChJbiBDb25uZWN0IHN0YXRlKSBTaG93cyBhIG1l bnUgb2Ygb3RoZXIgZXNjYXBlLWxldmVsIG9wdGlvbnMuCisgICBDdHJsLVxDdHJsLVwgKEluIENv bm5lY3Qgc3RhdGUpIFR5cGUgdHdvIEN0cmwtQmFja3NsYXNoZXMgdG8gc2VuZCBvbmUKKyAgIG9m IHRoZW0uCisgICBTRVQgRVNDQVBFIFsgY2hhcmFjdGVyIF0gQ2hhbmdlcyBLZXJtaXQncyBDb25u ZWN0LXN0YXRlIGVzY2FwZQorICAgY2hhcmFjdGVyLgorCisgICBDbG9zaW5nIENvbm5lY3Rpb25z CisKKyAgIEhBTkdVUCBIYW5ncyB1cCB0aGUgY3VycmVudGx5IG9wZW4gc2VyaWFsLXBvcnQgb3Ig bmV0d29yayBjb25uZWN0aW9uLgorICAgQ0xPU0UgQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBz ZXJpYWwtcG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpb24uCisgICBTRVQgTElORSAod2l0aCBubyBk ZXZpY2VuYW1lKSAgICAgICAgICBDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuCisgICBzZXJpYWwt cG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpb24uCisgICBTRVQgSE9TVCAod2l0aCBubyBob3N0bmFt ZSkgQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBzZXJpYWwtcG9ydCBvcgorICAgbmV0d29yayBj b25uZWN0aW9uLgorICAgRlRQIENMT1NFIENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4gRlRQIGNv bm5lY3Rpb24uCisgICBIVFRQIENMT1NFIENsb3NlcyB0aGUgY3VycmVudGx5IG9wZW4gSFRUUCBj b25uZWN0aW9uLgorICAgRVhJVCBBbHNvIGNsb3NlcyBhbGwgY29ubmVjdGlvbnMuIFN5bm9ueW06 IFFVSVQuCisgICBTRVQgRVhJVCBXQVJOSU5HIE9GRiBTdXBwcmVzc2VzIHdhcm5pbmcgYWJvdXQg b3BlbiBjb25uZWN0aW9ucyBvbiBleGl0CisgICBvciBjbG9zZS4KKworICAgRmlsZSBUcmFuc2Zl cgorCisgICBTRU5EIFsgb3B0aW9ucyBdIGZpbGVuYW1lIFsgYXMtbmFtZSBdICBTZW5kcyB0aGUg Z2l2ZW4gZmlsZS4gU3lub255bToKKyAgIFMuCisgICBTRU5EIFsgb3B0aW9ucyBdIGZpbGVzcGVj IFNlbmRzIGFsbCBmaWxlcyB0aGF0IG1hdGNoLgorICAgUkVTRU5EIFsgb3B0aW9ucyBdIGZpbGVz cGVjIFJlc3VtZXMgYW4gaW50ZXJydXB0ZWQgU0VORCBmcm9tIHRoZSBwb2ludAorICAgb2YgZmFp bHVyZS4KKyAgIFJFQ0VJVkUgWyBvcHRpb25zIF0gWyBhcy1uYW1lIF0gV2FpdHMgcGFzc2l2ZWx5 IGZvciBmaWxlcyB0byBhcnJpdmUuCisgICBTeW5vbnltOiBSLgorICAgTE9HIFRSQU5TQUNUSU9O UyBbIGZpbGVuYW1lIF0gS2VlcHMgYSByZWNvcmQgb2YgZmlsZSB0cmFuc2ZlcnMuCisgICBGQVNU IFVzZSBmYXN0IGZpbGUtdHJhbnNmZXIgc2V0dGluZ3MgKGRlZmF1bHQpLgorICAgQ0FVVElPVVMg VXNlIGNhdXRpb3VzIGFuZCBsZXNzIGZhc3QgZmlsZS10cmFuc2ZlciBzZXR0aW5ncy4KKyAgIFJP QlVTVCBVc2UgdWx0cmEtY29uc2VydmF0aXZlIGFuZCBzbG93IGZpbGUtdHJhbnNmZXIgc2V0dGlu Z3MuCisgICBTVEFUSVNUSUNTIFsgb3B0aW9ucyBdIEdpdmVzIHN0YXRpc3RpY3MgYWJvdXQgdGhl IG1vc3QgcmVjZW50IGZpbGUKKyAgIHRyYW5zZmVyLgorICAgV0hFUkUgQWZ0ZXIgdHJhbnNmZXI6 ICJXaGVyZSBkaWQgbXkgZmlsZXMgZ28/Ii4KKyAgIFRSQU5TTUlUIFsgb3B0aW9ucyBdIFsgZmls ZW5hbWUgXSBTZW5kcyBmaWxlIHdpdGhvdXQgcHJvdG9jb2wuIFN5bm9ueW06CisgICBYTUlULgor ICAgTE9HIFNFU1NJT04gWyBmaWxlbmFtZSBdIENhcHR1cmVzIHJlbW90ZSB0ZXh0IG9yIGZpbGVz IHdpdGhvdXQKKyAgIHByb3RvY29sLgorICAgU0VUIFBST1RPQ09MIFsgbmFtZS4uLiBdIFRlbGxz IEtlcm1pdCB0byB1c2UgYW4gZXh0ZXJuYWwgZmlsZS10cmFuc2ZlcgorICAgcHJvdG9jb2wuCisg ICBGVFAgeyBQVVQsIE1QVVQsIEdFVCwgTUdFVCwgLi4uIH0gRlRQIGNsaWVudCBjb21tYW5kcy4K KyAgIEhUVFAgeyBQVVQsIEdFVCwgSEVBRCwgUE9TVCwgLi4uIH0gSFRUUCBjbGllbnQgY29tbWFu ZHMuCisKKyAgIEtlcm1pdCBTZXJ2ZXIKKworICAgRU5BQkxFLCBESVNBQkxFICAgICAgICAgICAg ICAgICAgICAgICAgQ29udHJvbHMgd2hpY2ggZmVhdHVyZXMgY2FuIGJlCisgICB1c2VkIGJ5IGNs aWVudHMuCisgICBTRVQgU0VSVkVSIFNldHMgcGFyYW1ldGVycyBwcmlvciB0byBlbnRlcmluZyBT ZXJ2ZXIgc3RhdGUuCisgICBTRVJWRVIgRW50ZXJzIFNlcnZlciBzdGF0ZS4KKworICAgQ2xpZW50 IG9mIEtlcm1pdCBvciBGVFAgU2VydmVyCisKKyAgIFsgUkVNT1RFIF0gTE9HSU4gWyB1c2VyIHBh c3N3b3JkIF0gTG9ncyBpbiB0byBhIEtlcm1pdCBzZXJ2ZXIgb3IgSUtTRAorICAgdGhhdCByZXF1 aXJlcyBpdC4KKyAgIFsgUkVNT1RFIF0gTE9HT1VUIExvZ3Mgb3V0IGZyb20gYSBLZXJtaXQgc2Vy dmVyIG9yIElLU0QuCisgICBTRU5EIFsgb3B0aW9ucyBdIGZpbGVuYW1lIFsgYXMtbmFtZSBdICBT ZW5kcyB0aGUgZ2l2ZW4gZmlsZSB0byB0aGUKKyAgIHNlcnZlci4gU3lub255bXM6IFMsIFBVVC4K KyAgIFNFTkQgWyBvcHRpb25zIF0gZmlsZXNwZWMgU2VuZHMgYWxsIGZpbGVzIHRoYXQgbWF0Y2gu CisgICBSRVNFTkQgWyBvcHRpb25zIF0gZmlsZXNwZWMgUmVzdW1lcyBhbiBpbnRlcnJ1cHRlZCBT RU5EIGZyb20gdGhlIHBvaW50CisgICBvZiBmYWlsdXJlLgorICAgR0VUIFsgb3B0aW9ucyBdIHJl bW90ZS1maWxlc3BlYyBBc2tzIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUgZ2l2ZW4KKyAgIGZpbGVz LiBTeW5vbnltOiBHLgorICAgUkVHRVQgWyBvcHRpb25zIF0gcmVtb3RlLWZpbGVzcGVjIFJlc3Vt ZXMgYW4gaW50ZXJydXB0ZWQgR0VUIGZyb20gdGhlCisgICBwb2ludCBvZiBmYWlsdXJlLgorICAg UkVNT1RFIENEIFsgZGlyZWN0b3J5IF0gQXNrcyBzZXJ2ZXIgdG8gY2hhbmdlIGl0cyB3b3JraW5n IGRpcmVjdG9yeS4KKyAgIFN5bm9ueW06IFJDRC4KKyAgIFJFTU9URSBQV0QgWyBkaXJlY3Rvcnkg XSBBc2tzIHNlcnZlciB0byBkaXNwbGF5IGl0cyB3b3JraW5nIGRpcmVjdG9yeS4KKyAgIFN5bm9u eW06IFJQV0QuCisgICBSRU1PVEUgRElSRUNUT1JZIFsgZmlsZXNwZWMuLi4gXSBBc2tzIHNlcnZl ciB0byBzZW5kIGEgZGlyZWN0b3J5CisgICBsaXN0aW5nLiBTeW5vbnltOiBSRElSLgorICAgUkVN T1RFIERFTEVURSBbIGZpbGVzcGVjLi4uIF0gQXNrcyBzZXJ2ZXIgdG8gZGVsZXRlIGZpbGVzLiBT eW5vbnltOgorICAgUkRFTC4KKyAgIFJFTU9URSBbIGNvbW1hbmQuLi4gXSAoTWFueSBvdGhlciBj b21tYW5kczogInJlbW90ZSA/IiBmb3IgYSBsaXN0KS4KKyAgIE1BSUwgWyBvcHRpb25zIF0gZmls ZXNwZWMgU2VuZHMgZmlsZShzKSB0byBiZSBkZWxpdmVyZWQgYXMgZS1tYWlsCisgICAoS2VybWl0 IG9ubHkpLgorICAgRklOSVNIIEFza3MgdGhlIHNlcnZlciB0byBleGl0IHNlcnZlciBzdGF0ZSAo S2VybWl0IG9ubHkpLgorICAgQllFIEFza3MgdGhlIHNlcnZlciB0byBsb2cgb3V0IGFuZCBjbG9z ZSB0aGUgY29ubmVjdGlvbi4KKworICAgU2NyaXB0IFByb2dyYW1taW5nCisgICAgICAgICAgREVG SU5FLCBERUNMQVJFLCBVTkRFRklORSwgVU5ERUNMQVJFLCBBU1NJR04sIEVWQUxVQVRFLAorICAg ICAgICAgIFNFWFBSRVNTSU9OLCBBUlJBWSwgU09SVCwgSU5QVVQsIE9VVFBVVCwgSUYsIEZPUiwg V0hJTEUsIFNXSVRDSCwKKyAgICAgICAgICBHT1RPLCBFQ0hPLCBBU0ssIEdFVEMsIEdFVE9LLCBB U1NFUlQsIFdBSVQsIFNMRUVQLCBGT1BFTiwgRlJFQUQsCisgICAgICAgICAgRldSSVRFLCBGQ0xP U0UsIFNUT1AsIEVORCwgUkVUVVJOLCBMRUFSTiwgU0hJRlQsIFRSQUNFLCBWT0lELAorICAgICAg ICAgIElOQ1JFTUVOVCwgREVDUkVNRU5ULCAuLi4gRm9yIHRoZXNlIGFuZCBtYW55IG1vcmUgeW91 J2xsIG5lZWQgdG8KKyAgICAgICAgICBjb25zdWx0IHRoZSBbNzldbWFudWFsIGFuZCBzdXBwbGVt ZW50cywgYW5kL29yIHZpc2l0IHRoZQorICAgICAgICAgIFs4MF1LZXJtaXQgU2NyaXB0IExpYnJh cnksIHdoaWNoIGFsc28gaW5jbHVkZXMgYSBicmllZiB0dXRvcmlhbC4KKyAgICAgICAgICBIaW50 OiBIRUxQIExFQVJOIHRvIGZpbmQgb3V0IGhvdyB0byBnZXQgS2VybWl0IHRvIHdyaXRlIHNpbXBs ZQorICAgICAgICAgIHNjcmlwdHMgZm9yIHlvdS4KKworICAgTWFueSBvZiBLZXJtaXQncyBjb21t YW5kcyBoYXZlIHN5bm9ueW1zLCB2YXJpYW50cywgcmVsYXRpdmVzLCBhbmQgc28KKyAgIG9uLiBG b3IgZXhhbXBsZSwgTVNFTkQgaXMgYSB2ZXJzaW9uIG9mIFNFTkQgdGhhdCBhY2NlcHRzIGEgbGlz dCBvZiBmaWxlCisgICBzcGVjaWZpY2F0aW9ucyB0byBiZSBzZW50LCByYXRoZXIgdGhhbiBqdXN0 IG9uZSBmaWxlIHNwZWNpZmljYXRpb24sIGFuZAorICAgTVBVVCBpcyBhIHN5bm9ueW0gb2YgTVNF TkQuIE1PVkUgbWVhbnMgdG8gU0VORCBhbmQgdGhlbiBERUxFVEUgdGhlCisgICBzb3VyY2UgZmls ZSBpZiBzdWNjZXNzZnVsLiBNTU9WRSBpcyBsaWtlIE1PVkUsIGJ1dCBhY2NlcHRzIGEgbGlzdCBv ZgorICAgZmlsZXNwZWNzLCBhbmQgc28gb24uIFRoZXNlIGFyZSBkZXNjcmliZWQgaW4gdGhlIFs4 MV1mdWxsCisgICBkb2N1bWVudGF0aW9uLgorCisgICBVc2UgcXVlc3Rpb24gbWFyayB0byBmZWVs IHlvdXIgd2F5IHRocm91Z2ggYW4gdW5mYW1pbGlhciBjb21tYW5kLCBhcyBpbgorICAgdGhpcyBl eGFtcGxlICh0aGUgcGFydCB5b3UgdHlwZSBpcyB1bmRlcmxpbmVkKToKKworICBDLUtlcm1pdD4g cmVtb3RlID8gT25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICBhc3NpZ24gICAgIGRlbGV0ZSAgICAg aGVscCAgICAgICBsb2dpbiAgICAgIHByaW50ICAgICAgcmVuYW1lICAgICBzcGFjZQorICAgY2Qg ICAgICAgICBkaXJlY3RvcnkgIGhvc3QgICAgICAgbG9nb3V0ICAgICBwd2QgICAgICAgIHJtZGly ICAgICAgdHlwZQorICAgY29weSAgICAgICBleGl0ICAgICAgIGtlcm1pdCAgICAgbWtkaXIgICAg ICBxdWVyeSAgICAgIHNldCAgICAgICAgd2hvCisgIEMtS2VybWl0PiByZW1vdGUgc2V0ID8gT25l IG9mIHRoZSBmb2xsb3dpbmc6CisgICBhdHRyaWJ1dGVzICAgZmlsZSAgICAgICAgIHJldHJ5ICAg ICAgICB0cmFuc2ZlcgorICAgYmxvY2stY2hlY2sgIHJlY2VpdmUgICAgICBzZXJ2ZXIgICAgICAg d2luZG93CisgIEMtS2VybWl0PiByZW1vdGUgc2V0IGZpbGUgPyBPbmUgb2YgdGhlIGZvbGxvd2lu ZzoKKyAgIGNoYXJhY3Rlci1zZXQgIGluY29tcGxldGUgICAgIHJlY29yZC1sZW5ndGgKKyAgIGNv bGxpc2lvbiAgICAgIG5hbWVzICAgICAgICAgIHR5cGUKKyAgQy1LZXJtaXQ+IHJlbW90ZSBzZXQg ZmlsZSBuYW1lcyA/IE9uZSBvZiB0aGUgZm9sbG93aW5nOgorICAgY29udmVydGVkICBsaXRlcmFs CisgIEMtS2VybWl0PiByZW1vdGUgc2V0IGZpbGUgbmFtZXMgbGl0ZXJhbAorICBDLUtlcm1pdD4K KworICAgVGhpcyBpcyBjYWxsZWQgbWVudSBvbiBkZW1hbmQ6IHlvdSBnZXQgYSBtZW51IHdoZW4g eW91IHdhbnQgb25lLCBidXQKKyAgIG1lbnVzIGFyZSBub3QgZm9yY2VkIG9uIHlvdSBldmVuIHdo ZW4ga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gTm90ZSB0aGF0CisgICB5b3UgY2FuIGFsc28gYWJi cmV2aWF0ZSBtb3N0IGtleXdvcmRzLCBhbmQgeW91IGNhbiBjb21wbGV0ZSB0aGVtIHdpdGgKKyAg IHRoZSBUYWIgb3IgRXNjIGtleS4gQWxzbyBub3RlIHRoYXQgPyB3b3JrcyBmb3IgZmlsZW5hbWVz IHRvbywgYW5kIHRoYXQKKyAgIHlvdSBjYW4gdXNlIGl0IGluIHRoZSBtaWRkbGUgb2YgYSBrZXl3 b3JkIG9yIGZpbGVuYW1lLCBub3QganVzdCBhdCB0aGUKKyAgIGJlZ2lubmluZy4gRm9yIGV4YW1w bGUsICJzZW5kIHg/IiBsaXN0cyBhbGwgdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50CisgICBkaXJl Y3Rvcnkgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAneCcuCisKKyAgIFs4Ml1LZXJtaXQgSG9tZSBb ODNdQy1LZXJtaXQgSG9tZSBbODRdQy1LZXJtaXQgRkFRCisKK0lOSVRJQUxJWkFUSU9OIEZJTEUK KworICAgWzg1XVRvcCBbODZdQ29udGVudHMgWzg3XU5leHQgWzg4XVByZXZpb3VzCisKKyAgIElu IGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIEMtS2VybWl0IGV4ZWN1dGVzIGNvbW1hbmRzIGZy b20gYSBmaWxlCisgICBjYWxsZWQgLmtlcm1yYyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IHdoZW4g aXQgc3RhcnRzLCB1bmxlc3MgaXQgaXMKKyAgIGdpdmVuIHRoZSAtWSBvciAteSBjb21tYW5kLWxp bmUgb3B0aW9uLiBDdXN0b20gY29uZmlndXJhdGlvbnMgbWlnaHQKKyAgIHN1YnN0aXR1dGUgYSBz aGFyZWQgc3lzdGVtLXdpZGUgaW5pdGlhbGl6YXRpb24gZmlsZS4gVGhlIFNIT1cgRklMRQorICAg Y29tbWFuZCB0ZWxscyB3aGF0IGluaXRpYWxpemF0aW9uIGZpbGUsIGlmIGFueSwgd2FzIHVzZWQu IFRoZSBzdGFuZGFyZAorICAgaW5pdGlhbGl6YXRpb24gZmlsZSAiY2hhaW5zIiB0byBhbiBpbmRp dmlkdWFsIGN1c3RvbWl6YXRpb24gZmlsZSwKKyAgIC5teWtlcm1jLCBpbiB0aGUgaG9tZSBkaXJl Y3RvcnksIGluIHdoaWNoIGVhY2ggdXNlciBjYW4gZXN0YWJsaXNoCisgICBoZXIvaGlzIG93biBw cmVmZXJlbmNlcywgZGVmaW5lIG1hY3JvcywgYW5kIHNvIG9uLgorCisgICBTaW5jZSBleGVjdXRp b24gb2YgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKGF0IGxlYXN0IHRoZSBzdGFuZGFyZCBvbmUp CisgICBtYWtlcyBDLUtlcm1pdCB0YWtlIGxvbmdlciB0byBzdGFydCwgaXQgbWlnaHQgYmUgYmV0 dGVyIG5vdCB0byBoYXZlIGFuCisgICBpbml0aWFsaXphdGlvbiBmaWxlLCBlc3BlY2lhbGx5IG5v dyB0aGF0IEtlcm1pdCdzIGRlZmF1bHQgc3RhcnR1cAorICAgY29uZmlndXJhdGlvbiBpcyB3ZWxs IGF0dHVuZWQgdG8gbW9kZXJuIGNvbXB1dGluZyBhbmQgbmV0d29ya2luZyAtLSBpbgorICAgb3Ro ZXIgd29yZHMsIHlvdSBubyBsb25nZXIgaGF2ZSBkbyBhbnl0aGluZyBzcGVjaWFsIHRvIG1ha2Ug S2VybWl0CisgICB0cmFuc2ZlcnMgZ28gZmFzdC4gU28gaW5zdGVhZCBvZiBoYXZpbmcgYW4gaW5p dGlhbGl6YXRpb24gZmlsZSB0aGF0IGlzCisgICBleGVjdXRlZCBldmVyeSB0aW1lIEtlcm1pdCBz dGFydHMsIHlvdSBtaWdodCBjb25zaWRlciBtYWtpbmcgb25lIG9yCisgICBtb3JlIGtlcmJhbmcg c2NyaXB0cyAod2l0aCBuYW1lcyBvdGhlciB0aGF0IC5rZXJtcmMpIHRoYXQgZG8gTk9UCisgICBp bmNsdWRlIGFuICJleGl0IiBjb21tYW5kLCBhbmQgaW52b2tlIHRob3NlIHdoZW4geW91IG5lZWQg dGhlIHNldHRpbmdzLAorICAgbWFjcm8gZGVmaW5pdGlvbnMsIGFuZC9vciBzY3JpcHRlZCBhY3Rp b25zIHRoZXkgY29udGFpbiwgYW5kIGludm9rZQorICAgQy1LZXJtaXQgZGlyZWN0bHkgd2hlbiB5 b3UgZG9uJ3QuCisKKyAgIFRvIHB1dCBpdCBhbm90aGVyIHdheS4uLiBXZSBzdGlsbCBkaXN0cmli dXRlIHRoZSBzdGFuZGFyZAorICAgaW5pdGlhbGl6YXRpb24gZmlsZSBzaW5jZSBpdCdzIGZlYXR1 cmVkIGluIHRoZSBtYW51YWwgYW5kIGJhY2t3YXJkcworICAgY29tcGF0aWJpbGl0eSBpcyBpbXBv cnRhbnQgdG8gdXMuIEJ1dCB0aGVyZSdzIG5vIGhhcm0gaW4gbm90IHVzaW5nIGl0CisgICBpZiB5 b3UgZG9uJ3QgbmVlZCB0aGUgc3R1ZmYgdGhhdCdzIGluIGl0IChzZXJ2aWNlcyBkaXJlY3Rvcnks IGRpYWxpbmcKKyAgIGRpcmVjdG9yeSwgbmV0d29yayBkaXJlY3RvcnksIGFuZCBhc3NvY2lhdGVk IG1hY3JvIGRlZmluaXRpb25zKS4gT24gdGhlCisgICBvdGhlciBoYW5kLCBpZiB0aGVyZSBhcmUg c2V0dGluZ3Mgb3IgbWFjcm9zIHlvdSB3YW50IGluIGVmZmVjdCBFVkVSWQorICAgdGltZSB5b3Ug dXNlIEtlcm1pdCwgdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgKG9yIHRoZSBjdXN0b21pemF0aW9u IGZpbGUKKyAgIGl0IGNoYWlucyB0bykgaXMgdGhlIHBsYWNlIHRvIHB1dCB0aGVtLCBiZWNhdXNl IHRoYXQncyB0aGUgb25seSBwbGFjZQorICAgS2VybWl0IGxvb2tzIGZvciB0aGVtIGF1dG9tYXRp Y2FsbHkgZWFjaCB0aW1lIHlvdSBzdGFydCBpdC4KKworICAgWzg5XUtlcm1pdCBIb21lIFs5MF1D LUtlcm1pdCBIb21lIFs5MV1DLUtlcm1pdCBGQVEKKworTU9ERVMgT0YgT1BFUkFUSU9OCisKKyAg IFs5Ml1Ub3AgWzkzXUNvbnRlbnRzIFs5NF1OZXh0IFs5NV1QcmV2aW91cworCisgICBLZXJtaXQg aXMgc2FpZCB0byBiZSBpbiBMb2NhbCBtb2RlIGlmIGl0IGhhcyBtYWRlIGEgY29ubmVjdGlvbiB0 bworICAgYW5vdGhlciBjb21wdXRlciwgZS5nLiBieSBkaWFsaW5nIGl0IG9yIGVzdGFibGlzaGlu ZyBhIFRlbG5ldAorICAgY29ubmVjdGlvbiB0byBpdC4gVGhlIG90aGVyIGNvbXB1dGVyIGlzIHJl bW90ZSwgc28gaWYgeW91IHN0YXJ0IGFub3RoZXIKKyAgIGNvcHkgb2YgS2VybWl0IG9uIHRoZSBy ZW1vdGUgY29tcHV0ZXIsIGl0IGlzIHNhaWQgdG8gYmUgaW4gUmVtb3RlIG1vZGUKKyAgIChhcyBs b25nIGFzIGl0IGhhcyBub3QgbWFkZSBhbnkgY29ubmVjdGlvbnMgb2YgaXRzIG93bikuIFRoZSBs b2NhbAorICAgS2VybWl0IGNvbW11bmljYXRlcyBvdmVyIHRoZSBjb21tdW5pY2F0aW9ucyBkZXZp Y2Ugb3IgbmV0d29yaworICAgY29ubmVjdGlvbiwgYWN0aW5nIGFzIGEgY29uZHVpdCBiZXR3ZWVu IHRoZSB0aGUgcmVtb3RlIGNvbXB1dGVyIGFuZAorICAgeW91ciBrZXlib2FyZCBhbmQgc2NyZWVu LiBUaGUgcmVtb3RlIEtlcm1pdCBpcyB0aGUgZmlsZS10cmFuc2ZlcgorICAgcGFydG5lciB0byB0 aGUgbG9jYWwgS2VybWl0IGFuZCBjb21tdW5pY2F0ZXMgb25seSB0aHJvdWdoIGl0cyBzdGFuZGFy ZAorICAgaW5wdXQgYW5kIG91dHB1dC4KKworICAgQXQgYW55IG1vbWVudCwgYSBLZXJtaXQgcHJv Z3JhbSBjYW4gYmUgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzLgorICAgSXQncyBpbXBv cnRhbnQgdG8ga25vdyB3aGF0IHRoZXkgYXJlIGFuZCBob3cgdG8gY2hhbmdlIGZyb20gb25lIHRv IHRoZQorICAgb3RoZXIuCisKKyAgIENvbW1hbmQgc3RhdGUKKyAgICAgICAgICBJbiB0aGlzIHN0 YXRlLCBLZXJtaXQgcmVhZHMgY29tbWFuZHMgZnJvbToKKworICAgICAgICAgICsgWW91ciBrZXli b2FyZDsgb3I6CisgICAgICAgICAgKyBBIGZpbGUsIG9yOgorICAgICAgICAgICsgQSBtYWNybyBk ZWZpbml0aW9uLgorCisgICAgICAgICAgWW91IGNhbiBleGl0IGZyb20gQ29tbWFuZCBzdGF0ZSBi YWNrIHRvIFVuaXggd2l0aCB0aGUgRVhJVCBvcgorICAgICAgICAgIFFVSVQgY29tbWFuZCAoc2Ft ZSB0aGluZykuIFlvdSBjYW4gZW50ZXIgQ29ubmVjdCBzdGF0ZSB3aXRoIGFueQorICAgICAgICAg IG9mIHZhcmlvdXMgY29tbWFuZHMgKENPTk5FQ1QsIERJQUwsIFRFTE5FVCwgZXRjKS4gWW91IGNh biBlbnRlcgorICAgICAgICAgIGZpbGUgdHJhbnNmZXIgc3RhdGUgd2l0aCBjb21tYW5kcyBsaWtl IFNFTkQsIFJFQ0VJVkUsIGFuZCBHRVQuCisgICAgICAgICAgWW91IGNhbiBlbnRlciBTZXJ2ZXIg c3RhdGUgd2l0aCB0aGUgU0VSVkVSIGNvbW1hbmQuIFRoZSBUQUtFCisgICAgICAgICAgY29tbWFu ZCB0ZWxscyBLZXJtaXQgdG8gcmVhZCBhbmQgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGEgZmlsZS4K KyAgICAgICAgICBUaGUgKHBlcmhhcHMgaW1wbGllZCkgRE8gY29tbWFuZCB0ZWxscyBLZXJtaXQg dG8gcmVhZCBhbmQKKyAgICAgICAgICBleGVjdXRlIGNvbW1hbmRzIGZyb20gYSBtYWNybyBkZWZp bml0aW9uLiBXaGlsZSBpbiBDb21tYW5kCisgICAgICAgICAgc3RhdGUsIHlvdSBjYW4gaW50ZXJy dXB0IGFueSBjb21tYW5kLCBtYWNybywgb3IgY29tbWFuZCBmaWxlIGJ5CisgICAgICAgICAgdHlw aW5nIEN0cmwtQyAoaG9sZCBkb3duIHRoZSBDdHJsIGtleSBhbmQgcHJlc3MgdGhlIEMga2V5KTsg dGhpcworICAgICAgICAgIG5vcm1hbGx5IGJyaW5ncyB5b3UgYmFjayB0byB0aGUgcHJvbXB0Lgor CisgICBTaGVsbCBzdGF0ZQorICAgICAgICAgIFlvdSBjYW4gaW52b2tlIGFuIGluZmVyaW9yIHNo ZWxsIG9yIGV4dGVybmFsIGNvbW1hbmQgZnJvbSB0aGUKKyAgICAgICAgICBLZXJtaXQgY29tbWFu ZCBwcm9tcHQgYnkgdXNpbmcgdGhlIFBVU0gsIFJVTiAoISksIEVESVQsIG9yCisgICAgICAgICAg QlJPV1NFIGNvbW1hbmQuIFdoaWxlIHRoZSBpbmZlcmlvciBzaGVsbCBvciBjb21tYW5kIGlzIGFj dGl2ZSwKKyAgICAgICAgICBLZXJtaXQgaXMgc3VzcGVuZGVkIGFuZCBkb2VzIG5vdGhpbmcuIFJl dHVybiB0byBLZXJtaXQgQ29tbWFuZAorICAgICAgICAgIHN0YXRlIGJ5IGV4aXRpbmcgZnJvbSB0 aGUgaW5mZXJpb3Igc2hlbGwgb3IgYXBwbGljYXRpb24uCisKKyAgIENvbm5lY3Qgc3RhdGUKKyAg ICAgICAgICBJbiB0aGlzIHN0YXRlLCB3aGljaCBjYW4gYmUgZW50ZXJlZCBvbmx5IHdoZW4gaW4g TG9jYWwgbW9kZQorICAgICAgICAgIChpLmUuIHdoZW4gS2VybWl0IGhhcyBtYWRlIGEgY29ubmVj dGlvbiB0byBhbm90aGVyIGNvbXB1dGVyKSwKKyAgICAgICAgICBLZXJtaXQgaXMgYWN0aW5nIGFz IGEgdGVybWluYWwgdG8gdGhlIHJlbW90ZSBjb21wdXRlci4gWW91cgorICAgICAgICAgIGtleXN0 cm9rZXMgYXJlIHNlbnQgdG8gdGhlIHJlbW90ZSBjb21wdXRlciBhbmQgY2hhcmFjdGVycyB0aGF0 CisgICAgICAgICAgYXJyaXZlIG92ZXIgdGhlIGNvbW11bmljYXRpb24gY29ubmVjdGlvbiBhcmUg ZGlzcGxheWVkIG9uIHlvdXIKKyAgICAgICAgICBzY3JlZW4uIFRoaXMgc3RhdGUgaXMgZW50ZXJl ZCB3aGVuIHlvdSBnaXZlIGEgQ09OTkVDVCwgRElBTCwKKyAgICAgICAgICBURUxORVQsIFJMT0dJ Tiwgb3IgSUtTRCBjb21tYW5kLiBZb3UgY2FuIHJldHVybiB0byBjb21tYW5kIHN0YXRlCisgICAg ICAgICAgYnkgbG9nZ2luZyBvdXQgb2YgdGhlIHJlbW90ZSBjb21wdXRlciwgb3IgYnkgdHlwaW5n OgorCisgIEN0cmwtXGMKKworICAgICAgICAgIFRoYXQgaXM6IEhvbGQgZG93biB0aGUgQ3RybCBr ZXkgYW5kIHByZXNzIHRoZSBiYWNrc2xhc2gga2V5LAorICAgICAgICAgIHRoZW4gbGV0IGdvIG9m IHRoZSBDdHJsIGtleSBhbmQgcHJlc3MgdGhlIEMga2V5LiBUaGlzIGlzIGNhbGxlZAorICAgICAg ICAgIGVzY2FwaW5nIGJhY2suIENlcnRhaW4gb3RoZXIgZXNjYXBlLWxldmVsIGNvbW1hbmRzIGFy ZSBhbHNvCisgICAgICAgICAgcHJvdmlkZWQ7IHR5cGUgQ3RybC1cPyBmb3IgYSBsaXN0LiBGb3Ig ZXhhbXBsZSwgeW91IGNhbiBlbnRlcgorICAgICAgICAgIFNoZWxsIHN0YXRlIHdpdGg6CisKKyAg Q3RybC1cIQorCisgICAgICAgICAgVG8gc2VuZCBhIEN0cmwtXCB0byB0aGUgaG9zdCB3aGlsZSBp biBDb25uZWN0IHN0YXRlLCB0eXBlIHR3byBvZgorICAgICAgICAgIHRoZW0gaW4gYSByb3cuIFNl ZSBIRUxQIENPTk5FQ1QgYW5kIEhFTFAgU0VUIEVTQ0FQRSBmb3IgbW9yZQorICAgICAgICAgIGlu Zm8uCisKKyAgIExvY2FsIGZpbGUtdHJhbnNmZXIgc3RhdGUKKyAgICAgICAgICBJbiB0aGlzIHN0 YXRlLCBLZXJtaXQgaXMgc2VuZGluZyBwYWNrZXRzIGJhY2sgYW5kIGZvcnRoIHdpdGggdGhlCisg ICAgICAgICAgb3RoZXIgY29tcHV0ZXIgaW4gb3JkZXIgdG8gdHJhbnNmZXIgYSBmaWxlIG9yIGFj Y29tcGxpc2ggc29tZQorICAgICAgICAgIG90aGVyIGZpbGUtcmVsYXRlZCB0YXNrLiBBbmQgYXQg dGhlIHNhbWUgdGltZSwgaXQgaXMgZGlzcGxheWluZworICAgICAgICAgIGl0cyBwcm9ncmVzcyBv biB5b3VyIHNjcmVlbiBhbmQgd2F0Y2hpbmcgeW91ciBrZXlib2FyZCBmb3IKKyAgICAgICAgICBp bnRlcnJ1cHRpb25zLiBJbiB0aGlzIHN0YXRlLCB0aGUgZm9sbG93aW5nIHNpbmdsZS1rZXlzdHJv a2UKKyAgICAgICAgICBjb21tYW5kcyBhcmUgYWNjZXB0ZWQ6CisKKyAgICAgIFggICAgICAgIElu dGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBnbyBvbiB0byB0aGUgbmV4dCAoaWYgYW55KS4K KyAgICAgIFogICAgICAgIEludGVycnVwdCB0aGUgY3VycmVudCBmaWxlIGFuZCBza2lwIGFsbCB0 aGUgcmVzdC4KKyAgICAgIEUgICAgICAgIExpa2UgWiBidXQgdXNlcyBhICJzdHJvbmdlciIgcHJv dG9jb2wgKHVzZSBpZiBYIG9yIFogZG9uJ3Qgd29yaykuCisgICAgICBDdHJsLUMgICBJbnRlcnJ1 cHQgZmlsZS10cmFuc2ZlciBtb2RlICh1c2UgaWYgWiBvciBFIGRvbid0IHdvcmspLgorCisgICAg ICAgICAgS2VybWl0IHJldHVybnMgdG8gaXRzIHByZXZpb3VzIHN0YXRlIChDb21tYW5kIG9yIENv bm5lY3QpIHdoZW4KKyAgICAgICAgICB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUgb3Igd2hlbiBp bnRlcnJ1cHRlZCBzdWNjZXNzZnVsbHkgYnkgWCwKKyAgICAgICAgICBaLCBFLCBvciBDdHJsLUMg KGhvbGQgZG93biB0aGUgQ3RybCBrZXkgYW5kIHByZXNzIHRoZSBDIGtleSkuCisKKyAgIFJlbW90 ZSBmaWxlLXRyYW5zZmVyIHN0YXRlCisgICAgICAgICAgSW4gdGhpcyBzdGF0ZSwgS2VybWl0IGlz IGV4Y2hhbmdpbmcgZmlsZS10cmFuc2ZlciBwYWNrZXRzIHdpdGgKKyAgICAgICAgICBpdHMgbG9j YWwgcGFydG5lciBvdmVyIGl0cyBzdGFuZGFyZCBpL28uIEl0IGxlYXZlcyB0aGlzIHN0YXRlCisg ICAgICAgICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4gSW4g Y2FzZSB5b3UgZmluZAorICAgICAgICAgIHlvdXIgbG9jYWwgS2VybWl0IGluIENvbm5lY3Qgc3Rh dGUgYW5kIHRoZSByZW1vdGUgb25lIGluCisgICAgICAgICAgRmlsZS10cmFuc2ZlciBzdGF0ZSAo aW4gd2hpY2ggaXQgc2VlbXMgdG8gaWdub3JlIHlvdXIKKyAgICAgICAgICBrZXlzdHJva2VzKSwg eW91IGNhbiB1c3VhbGx5IHJldHVybiBpdCB0byBjb21tYW5kIHN0YXRlIGJ5CisgICAgICAgICAg dHlwaW5nIHRocmVlIEN0cmwtQydzIGluIGEgcm93LiBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgcmV0 dXJuCisgICAgICAgICAgeW91ciBsb2NhbCBLZXJtaXQgdG8gQ29tbWFuZCBzdGF0ZSAoQ3RybC1c IEMpIGFuZCB0eXBlCisgICAgICAgICAgImUtcGFja2V0IiBhbmQgdGhlbiBwcmVzcyB0aGUgUmV0 dXJuIG9yIEVudGVyIGtleTsgdGhpcyBmb3JjZXMgYQorICAgICAgICAgIGZhdGFsIEtlcm1pdCBw cm90b2NvbCBlcnJvci4KKworICAgUmVtb3RlIFNlcnZlciBzdGF0ZQorICAgICAgICAgIFRoaXMg aXMgbGlrZSBSZW1vdGUgRmlsZS10cmFuc2ZlciBzdGF0ZSwgZXhjZXB0IGl0IG5ldmVyIHJldHVy bnMKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5IHRvIENvbW1hbmQgc3RhdGUuIFJhdGhlciwgaXQg YXdhaXRzIGZ1cnRoZXIKKyAgICAgICAgICBpbnN0cnVjdGlvbnMgZnJvbSB0aGUgY2xpZW50IHBy b2dyYW07IHRoYXQgaXMsIGZyb20geW91ciBMb2NhbAorICAgICAgICAgIEtlcm1pdCBwcm9ncmFt LiBZb3UgY2FuIHJldHVybiB0aGUgUmVtb3RlIFNlcnZlciB0byBpdHMgcHJldmlvdXMKKyAgICAg ICAgICBzdGF0ZSBieSBpc3N1aW5nIGEgImZpbmlzaCIgY29tbWFuZCB0byB0aGUgY2xpZW50LCBv ciBpZiB5b3UgYXJlCisgICAgICAgICAgaW4gQ29ubmVjdCBzdGF0ZSwgYnkgdHlwaW5nIHRocmVl IEN0cmwtQydzIGluIGEgcm93LiBZb3UgY2FuCisgICAgICAgICAgdGVsbCB0aGUgc2VydmVyIGpv YiB0byBsb2cgb3V0IGFuZCBicmVhayB0aGUgY29ubmVjdGlvbiBieQorICAgICAgICAgIGlzc3Vp bmcgYSAiYnllIiBjb21tYW5kIHRvIHRoZSBjbGllbnQuCisKKyAgIExvY2FsIFNlcnZlciBzdGF0 ZQorICAgICAgICAgIExpa2UgUmVtb3RlLVNlcnZlciBzdGF0ZSwgYnV0IGluIGxvY2FsIG1vZGUs IGFuZCB0aGVyZWZvcmUgd2l0aAorICAgICAgICAgIGl0cyBmaWxlLXRyYW5zZmVyIGRpc3BsYXkg c2hvd2luZywgYW5kIGxpc3RlbmluZyBmb3Igc2luZ2xlLWtleQorICAgICAgICAgIGNvbW1hbmRz LCBhcyBpbiBMb2NhbCBGaWxlLXRyYW5zZmVyIHN0YXRlLiBVc3VhbGx5IHRoaXMgc3RhdGUgaXMK KyAgICAgICAgICBlbnRlcmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIHJlbW90ZSBLZXJtaXQgcHJv Z3JhbSBnaXZlcyBhIEdFVAorICAgICAgICAgIGNvbW1hbmQuCisKKyAgIEMtS2VybWl0LCBLZXJt aXQgOTUsIGFuZCBNUy1ET1MgS2VybWl0IGFsbCBjYW4gc3dpdGNoIGF1dG9tYXRpY2FsbHkKKyAg IGZyb20gQ29ubmVjdCBzdGF0ZSB0byBMb2NhbCBGaWxlLXRyYW5zZmVyIHN0YXRlIHdoZW4geW91 IGluaXRpYXRlIGEKKyAgIGZpbGUgdHJhbnNmZXIgZnJvbSB0aGUgcmVtb3RlIGNvbXB1dGVyIGJ5 IHN0YXJ0aW5nIEtlcm1pdCBhbmQgdGVsbGluZworICAgaXQgdG8gc2VuZCBvciBnZXQgYSBmaWxl LCBpbiB3aGljaCBjYXNlLCBDb25uZWN0IHN0YXRlIGlzIGF1dG9tYXRpY2FsbHkKKyAgIHJlc3Vt ZWQgYWZ0ZXIgdGhlIGZpbGUgdHJhbnNmZXIgaXMgZmluaXNoZWQuCisKKyAgIE5vdGUgdGhhdCBD LUtlcm1pdCBpcyBub3QgYSB0ZXJtaW5hbCBlbXVsYXRvci4gSXQgaXMgYSBjb21tdW5pY2F0aW9u cworICAgYXBwbGljYXRpb24gdGhhdCB5b3UgcnVuIGluIGEgdGVybWluYWwgd2luZG93IChlLmcu IGNvbnNvbGUgb3IgWHRlcm0pLgorICAgVGhlIHNwZWNpZmljIGVtdWxhdGlvbiwgc3VjaCBhcyBW VDEwMCwgVlQyMjAsIExpbnV4IENvbnNvbGUsIG9yIFh0ZXJtLAorICAgaXMgcHJvdmlkZWQgYnkg dGhlIHRlcm1pbmFsIHdpbmRvdyBpbiB3aGljaCB5b3UgYXJlIHJ1bm5pbmcgQy1LZXJtaXQuCisg ICBLZXJtaXQgOTUgYW5kIE1TLURPUyBLZXJtaXQsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgdHJ1 ZSB0ZXJtaW5hbAorICAgZW11bGF0b3JzLiBXaHkgaXMgQy1LZXJtaXQgbm90IGEgdGVybWluYWwg ZW11bGF0b3I/IFs5Nl1DTElDSyBIRVJFIHRvCisgICByZWFkIGFib3V0IGl0LgorCisgICBbOTdd S2VybWl0IEhvbWUgWzk4XUMtS2VybWl0IEhvbWUgWzk5XUMtS2VybWl0IEZBUQorCitNQUtJTkcg Q09OTkVDVElPTlMKKworICAgWzEwMF1Ub3AgWzEwMV1Db250ZW50cyBbMTAyXU5leHQgWzEwM11Q cmV2aW91cworCisgICBIZXJlIGlzIGhvdyB0byBtYWtlIGRpZmZlcmVudCBraW5kcyBvZiBjb25u ZWN0aW9ucyB1c2luZyBpbnRlcmFjdGl2ZQorICAgS2VybWl0IGNvbW1hbmRzIChhcyBub3RlZCBh Ym92ZSwgeW91IGNhbiBhbHNvIG1ha2UgY29ubmVjdGlvbnMgd2l0aAorICAgY29tbWFuZC1saW5l IG9wdGlvbnMpLiBOb3RlIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gbWFrZSBjb25uZWN0aW9ucwor ICAgd2l0aCBLZXJtaXQuIEl0IGNhbiBhbHNvIGJlIHVzZWQgb24gdGhlIGZhciBlbmQgb2YgYSBj b25uZWN0aW9uIGFzIHRoZQorICAgcmVtb3RlIGZpbGUgdHJhbnNmZXIgYW5kIG1hbmFnZW1lbnQg cGFydG5lciBvZiB5b3VyIGxvY2FsCisgICBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZS4KKworICAg TWFraW5nIGEgVGVsbmV0IENvbm5lY3Rpb24KKyAgICAgICAgICBBdCB0aGUgQy1LZXJtaXQgY29t bWFuZCBwcm9tcHQsIHNpbXBseSB0eXBlOgorCisgIHRlbG5ldCBmb28uYmFyLmNvbSAgICAgICAg IDsgU3Vic3RpdHV0ZSBkZXNpcmVkIGhvc3QgbmFtZSBvciBhZGRyZXNzLgorICB0ZWxuZXQgeHl6 Y29ycC5jb20gMzAwMCAgICA7IFlvdSBjYW4gYWxzbyBpbmNsdWRlIGEgcG9ydCBudW1iZXIuCisK KyAgICAgICAgICBJZiB0aGUgY29ubmVjdGlvbiBpcyBzdWNjZXNzZnVsLCBLZXJtaXQgYXV0b21h dGljYWxseSBlbnRlcnMKKyAgICAgICAgICBDb25uZWN0IHN0YXRlLiBXaGVuIHlvdSBsb2dvdXQg ZnJvbSB0aGUgcmVtb3RlIGhvc3QsIEtlcm1pdAorICAgICAgICAgIGF1dG9tYXRpY2FsbHkgcmV0 dXJucyB0byBpdHMgcHJvbXB0LiBNb3JlIGluZm86IEhFTFAgVEVMTkVULAorICAgICAgICAgIEhF TFAgU0VUIFRFTE5FVCwgSEVMUCBTRVQgVEVMT1BULiBBbHNvIHNlZSB0aGUgWzEwNF1JS1NEIHNl Y3Rpb24KKyAgICAgICAgICBiZWxvdy4KKworICAgTWFraW5nIGFuIFJsb2dpbiBjb25uZWN0aW9u CisgICAgICAgICAgVGhpcyBpcyBqdXN0IGxpa2UgVGVsbmV0LCBleGNlcHQgeW91IGhhdmUgdG8g YmUgcm9vdCB0byBkbyBpdAorICAgICAgICAgIGJlY2F1c2UgUmxvZ2luIHVzZXMgYSBwcml2aWxl Z2VkIFRDUCBwb3J0OgorCisgIHJsb2dpbiBmb28uYmFyLmNvbSAgICAgICAgIDsgU3Vic3RpdHV0 ZSBkZXNpcmVkIGhvc3QgbmFtZSBvciBhZGRyZXNzLgorCisgICAgICAgICAgTW9yZSBpbmZvOiBI RUxQIFJMT0dJTi4KKworICAgTWFraW5nIGFuIFNTSCBDb25uZWN0aW9uCisgICAgICAgICAgVW5s aWtlIFRlbG5ldCBhbmQgUmxvZ2luLCBTU0ggY29ubmVjdGlvbnMgYXJlIG5vdCBidWlsdC1pbiwg YnV0CisgICAgICAgICAgaGFuZGxlZCBieSBydW5uaW5nIHlvdXIgZXh0ZXJuYWwgU1NIIGNsaWVu dCB0aHJvdWdoIGEKKyAgICAgICAgICBwc2V1ZG90ZXJtaW5hbC4gVXNpbmcgQy1LZXJtaXQgdG8g Y29udHJvbCB0aGUgU1NIIGNsaWVudCBnaXZlcworICAgICAgICAgIHlvdSBhbGwgb2YgS2VybWl0 J3MgZmVhdHVyZXMgKGZpbGUgdHJhbnNmZXIsIGNoYXJhY3Rlci1zZXQKKyAgICAgICAgICBjb252 ZXJzaW9uLCBzY3JpcHRpbmcsIGV0Yykgb3ZlciBTU0guCisKKyAgc3NoIGZvby5iYXIuY29tICAg ICAgICAgICAgOyBTdWJzdGl0dXRlIGRlc2lyZWQgaG9zdCBuYW1lIG9yIGFkZHJlc3MuCisKKyAg ICAgICAgICBNb3JlIGluZm86IEhFTFAgU1NILCBIRUxQIFNFVCBTU0guCisKKyAgIERpYWxpbmcg d2l0aCBhIE1vZGVtCisgICAgICAgICAgSWYgaXQncyBhbiBleHRlcm5hbCBtb2RlbSwgbWFrZSBz dXJlIGl0IGlzIGNvbm5lY3RlZCB0byBhIHVzYWJsZQorICAgICAgICAgIHNlcmlhbCBwb3J0IG9u IHlvdXIgY29tcHV0ZXIgd2l0aCBhIHJlZ3VsYXIgKHN0cmFpZ2h0LXRocm91Z2gpCisgICAgICAg ICAgWzEwNV1tb2RlbSBjYWJsZSwgYW5kIHRvIHRoZSB0ZWxlcGhvbmUgamFjayB3aXRoIGEgdGVs ZXBob25lCisgICAgICAgICAgY2FibGUsIGFuZCB0aGF0IGl0J3MgdHVybmVkIG9uLiBUaGVuIHVz ZSB0aGVzZSBjb21tYW5kczoKKworICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzICA7IE9yIG90 aGVyIHN1cHBvcnRlZCB0eXBlCisgIHNldCBsaW5lIC9kZXYvdHR5UzAgICAgICAgIDsgU3BlY2lm eSBkZXZpY2UgbmFtZQorICBzZXQgc3BlZWQgNTc2MDAgICAgICAgICAgICA7IE9yIG90aGVyIGRl c2lyZWQgc3BlZWQKKyAgc2V0IGZsb3cgcnRzL2N0cyAgICAgICAgICAgOyBNb3N0IG1vZGVybiBt b2RlbXMgc3VwcG9ydCB0aGlzCisgIHNldCBkaWFsIG1ldGhvZCB0b25lICAgICAgIDsgKG9yIHB1 bHNlKQorICBkaWFsIDc2NTQzMjEgICAgICAgICAgICAgICA7IERpYWwgdGhlIGRlc2lyZWQgbnVt YmVyCisKKyAgICAgICAgICBUeXBlICJzZXQgbW9kZW0gdHlwZSA/IiBmb3IgYSBsaXN0IG9mIHN1 cHBvcnRlZCBtb2RlbSB0eXBlcy4gSWYKKyAgICAgICAgICB5b3Ugb21pdCB0aGUgU0VUIE1PREVN IFRZUEUgY29tbWFuZCwgdGhlIGRlZmF1bHQgdHlwZSBpcworICAgICAgICAgICJnZW5lcmljLWhp Z2gtc3BlZWQiLCB3aGljaCBzaG91bGQgd29yayBmb3IgbW9zdCBtb2Rlcm4KKyAgICAgICAgICBB VC1jb21tYW5kLXNldCBtb2RlbXMuIElmIHRoZSBsaW5lIGlzIGJ1c3ksIEtlcm1pdCByZWRpYWxz CisgICAgICAgICAgYXV0b21hdGljYWxseS4gSWYgdGhlIGNhbGwgZG9lcyBub3Qgc3VjY2VlZCwg dXNlICJzZXQgZGlhbAorICAgICAgICAgIGRpc3BsYXkgb24iIGFuZCB0cnkgaXQgYWdhaW4gdG8g d2F0Y2ggd2hhdCBoYXBwZW5zLiBJZiB0aGUgY2FsbAorICAgICAgICAgIHN1Y2NlZWRzLCBLZXJt aXQgZW50ZXJzIENvbm5lY3Qgc3RhdGUgYXV0b21hdGljYWxseSBhbmQgcmV0dXJucworICAgICAg ICAgIHRvIGl0cyBwcm9tcHQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBsb2cgb3V0IGZyb20gdGhl IHJlbW90ZQorICAgICAgICAgIGNvbXB1dGVyIG9yIHRoZSBjb25uZWN0aW9uIGlzIG90aGVyd2lz ZSBsb3N0LgorCisgICAgICAgICAgWW91IGNhbiBhbHNvIGRpYWwgZnJvbSBhIG1vZGVtIHRoYXQg aXMgYWNjZXNzaWJsZSBieSBUZWxuZXQsCisgICAgICAgICAgZS5nLiB0byBhIHJldmVyc2UgdGVy bWluYWwgc2VydmVyLiBJbiB0aGlzIGNhc2UgdGhlIGNvbW1hbmQKKyAgICAgICAgICBzZXF1ZW5j ZSBpczoKKworICBzZXQgaG9zdCB0cy54eHguY29tIDIwMDAgICA7IFRlcm1pbmFsLXNlcnZlciBh bmQgcG9ydAorICBzZXQgbW9kZW0gdHlwZSB1c3JvYm90aWNzICA7IE9yIG90aGVyIHN1cHBvcnRl ZCB0eXBlCisgIHNldCBkaWFsIG1ldGhvZCB0b25lICAgICAgIDsgKG9yIHB1bHNlKQorICBkaWFs IDc2NTQzMjEgICAgICAgICAgICAgICA7IERpYWwgdGhlIGRlc2lyZWQgbnVtYmVyCisKKyAgICAg ICAgICBJZiB0aGUgdGVybWluYWwgc2VydmVyIHN1cHBvcnRzIHRoZSBUZWxuZXQgQ29tIFBvcnQg T3B0aW9uLAorICAgICAgICAgIFsxMDZdUkZDIDIyMTcsIHlvdSBjYW4gYWxzbyBnaXZlIHNlcmlh bC1wb3J0IHJlbGF0ZWQgY29tbWFuZHMKKyAgICAgICAgICBzdWNoIGFzIFNFVCBTUEVFRCwgU0VU IFBBUklUWSwgYW5kIHNvIG9uLCBhbmQgS2VybWl0IHJlbGF5cyB0aGVtCisgICAgICAgICAgdG8g dGhlIHRlcm1pbmFsIHNlcnZlciB1c2luZyB0aGUgcHJvdG9jb2wgc3BlY2lmaWVkIGluIHRoZSBS RkMuCisKKyAgICAgICAgICBNb3JlIGluZm86IEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVCBMSU5F LCBIRUxQIFNFVCBTUEVFRCwgSEVMUAorICAgICAgICAgIFNFVCBGTE9XLCBIRUxQIERJQUwsIEhF TFAgU0VUIERJQUwsIEhFTFAgU0VUIE1PREVNLCBIRUxQIFNFVAorICAgICAgICAgIENBUlJJRVIt V0FUQ0gsIFNIT1cgQ09NTVVOSUNBVElPTlMsIFNIT1cgTU9ERU0sIFNIT1cgRElBTC4KKworICAg RGlyZWN0IFNlcmlhbCBQb3J0CisgICAgICAgICAgQ29ubmVjdCB0aGUgdHdvIGNvbXB1dGVycywg QSBhbmQgQiwgd2l0aCBhIFsxMDddbnVsbCBtb2RlbSBjYWJsZQorICAgICAgICAgIChvciB0d28g bW9kZW0gY2FibGVzIGludGVyY29ubmVjdGVkIHdpdGggYSBudWxsLW1vZGVtIGFkYXB0ZXIgb3IK KyAgICAgICAgICBtb2RlbSBlbGltaW5hdG9yKS4gRnJvbSBDb21wdXRlciBBOgorCisgIHNldCBt b2RlbSB0eXBlIG5vbmUgICAgICAgIDsgVGhlcmUgaXMgbm8gbW9kZW0KKyAgc2V0IGxpbmUgL2Rl di90dHlTMCAgICAgICAgOyBTcGVjaWZ5IGRldmljZSBuYW1lCisgIHNldCBjYXJyaWVyLXdhdGNo IG9mZiAgICAgIDsgSWYgRFRSIGFuZCBDRCBhcmUgbm90IGNyb3NzLWNvbm5lY3RlZAorICBzZXQg c3BlZWQgNTc2MDAgICAgICAgICAgICA7IE9yIG90aGVyIGRlc2lyZWQgc3BlZWQKKyAgc2V0IGZs b3cgcnRzL2N0cyAgICAgICAgICAgOyBJZiBSVFMgYW5kIENUUyBhcmUgY3Jvc3MtY29ubmVjdGVk CisgIHNldCBmbG93IHhvbi94b2ZmICAgICAgICAgIDsgSWYgeW91IGNhbid0IHVzZSBSVFMvQ1RT CisgIHNldCBwYXJpdHkgZXZlbiAgICAgICAgICAgIDsgKG9yICJtYXJrIiBvciAic3BhY2UiLCBp ZiBuZWNlc3NhcnkpCisgIHNldCBzdG9wLWJpdHMgMiAgICAgICAgICAgIDsgKHJhcmVseSBuZWNl c3NhcnkpCisgIGNvbm5lY3QgICAgICAgICAgICAgICAgICAgIDsgRW50ZXIgQ29ubmVjdCAodGVy bWluYWwpIHN0YXRlCisKKyAgICAgICAgICBUaGlzIGFzc3VtZXMgQ29tcHV0ZXIgQiBpcyBzZXQg dXAgdG8gbGV0IHlvdSBsb2cgaW4uIElmIGl0CisgICAgICAgICAgaXNuJ3QsIHlvdSBjYW4gcnVu IGEgY29weSBvZiBLZXJtaXQgb24gQ29tcHV0ZXIgQiBhbmQgZm9sbG93CisgICAgICAgICAgYXBw cm94aW1hdGVseSB0aGUgc2FtZSBkaXJlY3Rpb25zLiBNb3JlIGluZm86IEFzIGFib3ZlIHBsdXMg SEVMUAorICAgICAgICAgIENPTk5FQ1QuCisKKyAgIFdpdGggbW9kZW1zIG9yIGRpcmVjdCBzZXJp YWwgY29ubmVjdGlvbnMsIHlvdSBtaWdodCBhbHNvIGhhdmUgdG8gInNldAorICAgcGFyaXR5IGV2 ZW4iIChvciAibWFyayIgb3IgInNwYWNlIikgaWYgaXQncyBhIDctYml0IGNvbm5lY3Rpb24uCisK KyAgIE9mIHRoZSBjb25uZWN0aW9uIHR5cGVzIGxpc3RlZCBhYm92ZSwgb25seSBvbmUgY2FuIGJl IG9wZW4gYXQgYSB0aW1lLgorICAgSG93ZXZlciwgYW55IG9uZSBvZiB0aGVzZSBjYW4gYmUgb3Bl biBjb25jdXJyZW50bHkgd2l0aCBhbiBbMTA4XUZUUCBvcgorICAgSFRUUCBzZXNzaW9uLiBFYWNo IGNvbm5lY3Rpb24gdHlwZSBjYW4gYmUgY3VzdG9taXplZCB0byBhbnkgZGVzaXJlZAorICAgZGVn cmVlLCBzY3JpcHRlZCwgbG9nZ2VkLCB5b3UgbmFtZSBpdC4gU2VlIHRoZSBtYW51YWwuCisKKyAg IE5PVEU6IE9uIHNlbGVjdGVkIHBsYXRmb3JtcywgQy1LZXJtaXQgYWxzbyBjYW4gbWFrZSBYLjI1 IGNvbm5lY3Rpb25zLgorICAgU2VlIHRoZSBtYW51YWwgZm9yIGRldGFpbHMuCisKKyAgIFsxMDld S2VybWl0IEhvbWUgWzExMF1DLUtlcm1pdCBIb21lIFsxMTFdQy1LZXJtaXQgRkFRCisKK1RSQU5T RkVSUklORyBGSUxFUyBXSVRIIEtFUk1JVAorCisgICBbMTEyXVRvcCBbMTEzXUNvbnRlbnRzIFsx MTRdTmV4dCBbMTE1XVByZXZpb3VzCisKKyAgICAgKiBbMTE2XURvd25sb2FkaW5nIEZpbGVzCisg ICAgICogWzExN11VcGxvYWRpbmcgRmlsZXMKKyAgICAgKiBbMTE4XUtlcm1pdCBUcmFuc2ZlcnMg dGhlIE9sZC1GYXNoaW9uZWQgV2F5CisgICAgICogWzExOV1JZiBGaWxlIFRyYW5zZmVyIEZhaWxz CisgICAgICogWzEyMF1BZHZhbmNlZCBLZXJtaXQgRmlsZSBUcmFuc2ZlciBGZWF0dXJlcworICAg ICAqIFsxMjFdTm9uLUtlcm1pdCBGaWxlIFRyYW5zZmVyCisKKyAgIFRoZXJlIGlzIGEgWzEyMl13 aWRlc3ByZWFkIGFuZCBwZXJzaXN0ZW50IGJlbGllZiB0aGF0IEtlcm1pdCBpcyBhIHNsb3cKKyAg IHByb3RvY29sLiBUaGlzIGlzIGJlY2F1c2UsIHVudGlsIHJlY2VudGx5LCBpdCB1c2VkIGNvbnNl cnZhdGl2ZSB0dW5pbmcKKyAgIGJ5IGRlZmF1bHQgdG8gbWFrZSBzdXJlIGZpbGUgdHJhbnNmZXJz IHN1Y2NlZWRlZCwgcmF0aGVyIHRoYW4gZmFpbGluZworICAgYmVjYXVzZSB0aGV5IG92ZXJsb2Fk ZWQgdGhlIGNvbm5lY3Rpb24uIFNvbWUgZXh0cmEgY29tbWFuZHMgKG9yCisgICBjb21tYW5kLWxp bmUgb3B0aW9ucywgbGlrZSAtUSkgd2VyZSBuZWVkZWQgdG8gbWFrZSBpdCBnbyBmYXN0LCBidXQK KyAgIG5vYm9keSBib3RoZXJlZCB0byBmaW5kIG91dCBhYm91dCB0aGVtLiBBbHNvLCBpdCB0YWtl cyB0d28gdG8gdGFuZ286CisgICBtb3N0IG5vbi1LZXJtaXQtUHJvamVjdCBLZXJtaXQgcHJvdG9j b2wgaW1wbGVtZW50YXRpb25zIHJlYWxseSBBUkUKKyAgIHNsb3cuIFRoZSBiZXN0IGZpbGUtdHJh bnNmZXIgcGFydG5lcnMgZm9yIEMtS2VybWl0IGFyZTogYW5vdGhlciBjb3B5IG9mCisgICBbMTIz XUMtS2VybWl0ICg3LjAgb3IgbGF0ZXIpIGFuZCBbMTI0XUtlcm1pdCA5NS4gVGhlc2UgY29tYmlu YXRpb25zCisgICB3b3JrIHdlbGwgYW5kIHRoZXkgd29yayBmYXN0IGJ5IGRlZmF1bHQuIE1TLURP UyBLZXJtaXQgaXMgZ29vZCB0b28sIGJ1dAorICAgeW91IGhhdmUgdG8gdGVsbCBpdCB0byBnbyBm YXN0IChieSBnaXZpbmcgaXQgdGhlIEZBU1QgY29tbWFuZCkuCisKKyAgIEZ1cnRoZXJtb3JlLCBh bGwgdGhyZWUgb2YgdGhlc2UgS2VybWl0IHByb2dyYW1zIHN1cHBvcnQgImF1dG9kb3dubG9hZCIK KyAgIGFuZCAiYXV0b3VwbG9hZCIsIG1lYW5pbmcgdGhhdCB3aGVuIHRoZXkgYXJlIGluIENvbm5l Y3Qgc3RhdGUgYW5kIGEKKyAgIEtlcm1pdCBwYWNrZXQgY29tZXMgaW4gZnJvbSB0aGUgcmVtb3Rl LCB0aGV5IGF1dG9tYXRpY2FsbHkgc3dpdGNoIGludG8KKyAgIGZpbGUgdHJhbnNmZXIgbW9kZS4K KworICAgQW5kIHBsdXMsIEMtS2VybWl0IGFuZCBLOTUgYWxzbyBzd2l0Y2ggYXV0b21hdGljYWxs eSBiZXR3ZWVuIHRleHQgYW5kCisgICBiaW5hcnkgbW9kZSBmb3IgZWFjaCBmaWxlLCBzbyB0aGVy ZSBpcyBubyBuZWVkIHRvICJzZXQgZmlsZSB0eXBlCisgICBiaW5hcnkiIG9yICJzZXQgZmlsZSB0 eXBlIHRleHQiLCBvciB0byB3b3JyeSBhYm91dCBmaWxlcyBiZWluZworICAgY29ycnVwdGVkIGJl Y2F1c2UgdGhleSB3ZXJlIHRyYW5zZmVycmVkIGluIHRoZSB3cm9uZyBtb2RlLgorCisgICBXaGF0 IGFsbCBvZiB0aGVzZSB3b3JkcyBhZGQgdXAgdG8gaXMgdGhhdCBub3csIHdoZW4geW91IHVzZSB1 cC10by1kYXRlCisgICBLZXJtaXQgc29mdHdhcmUgZnJvbSB0aGUgS2VybWl0IFByb2plY3QsIGZp bGUgdHJhbnNmZXIgaXMgbm90IG9ubHkKKyAgIGZhc3QsIGl0J3MgcmlkaWN1bG91c2x5IGVhc3ku IFlvdSBiYXJlbHkgaGF2ZSB0byBnaXZlIGFueSBjb21tYW5kcyBhdAorICAgYWxsLgorCisgICBE b3dubG9hZGluZyBGaWxlcworICAgICAgICAgIExldCdzIHNheSB5b3UgaGF2ZSBbMTI1XUtlcm1p dCA5NSwgWzEyNl1DLUtlcm1pdCwgb3IgWzEyN11NUy1ET1MKKyAgICAgICAgICBLZXJtaXQgb24g eW91ciBkZXNrdG9wIGNvbXB1dGVyLCB3aXRoIGEgY29ubmVjdGlvbiB0byBhIFVuaXgKKyAgICAg ICAgICBjb21wdXRlciB0aGF0IGhhcyBDLUtlcm1pdCBpbnN0YWxsZWQgYXMgImtlcm1pdCIuIFRv IGRvd25sb2FkIGEKKyAgICAgICAgICBmaWxlIChzZW5kIGl0IGZyb20gVW5peCB0byB5b3VyIGRl c2t0b3AgY29tcHV0ZXIpLCBqdXN0IHR5cGUgdGhlCisgICAgICAgICAgZm9sbG93aW5nIGNvbW1h bmQgYXQgeW91ciBVbml4IHNoZWxsIHByb21wdDoKKworICBrZXJtaXQgLXMgb29mYS50eHQKKwor ICAgICAgICAgICh3aGVyZSBvb2ZhLnR4dCBpcyB0aGUgZmlsZW5hbWUpLiBJZiB5b3Ugd2FudCB0 byBzZW5kIG1vcmUgdGhhbgorICAgICAgICAgIG9uZSBmaWxlLCB5b3UgY2FuIHB1dCBhcyBtYW55 IGZpbGVuYW1lcyBhcyB5b3Ugd2FudCBvbiB0aGUKKyAgICAgICAgICBjb21tYW5kIGxpbmUsIGFu ZCB0aGV5IGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGV4dCBhbmQKKyAgICAgICAgICBiaW5h cnk6CisKKyAga2VybWl0IC1zIG9vZmEudHh0IG9vZmEuemlwIG9vZmEuaHRtbCBvb2ZhLnRhci5n egorCisgICAgICAgICAgYW5kL29yIHlvdSBjYW4gdXNlIHdpbGRjYXJkcyB0byBzZW5kIGdyb3Vw cyBvZiBmaWxlczoKKworICBrZXJtaXQgLXMgb29mYS4qCisKKyAgICAgICAgICBJZiB5b3Ugd2Fu dCB0byBzZW5kIGEgZmlsZSB1bmRlciBhbiBhc3N1bWVkIG5hbWUsIHVzZToKKworICBrZXJtaXQg LXMgZnJpZGF5LnR4dCAtYSB0b2RheS50eHQKKworICAgICAgICAgIFRoaXMgc2VuZHMgdGhlIGZp bGUgZnJpZGF5LnR4dCBidXQgdGVsbHMgdGhlIHJlY2VpdmluZyBLZXJtaXQKKyAgICAgICAgICB0 aGF0IGl0cyBuYW1lIGlzIHRvZGF5LnR4dC4gSW4gYWxsIGNhc2VzLCBhcyBub3RlZCwgd2hlbiB0 aGUKKyAgICAgICAgICBmaWxlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLCB5b3VyIGRlc2t0b3AgS2Vy bWl0IHJldHVybnMKKyAgICAgICAgICBhdXRvbWF0aWNhbGx5IHRvIENvbm5lY3Qgc3RhdGUuIE5v IHdvcnJpZXMgYWJvdXQgZXNjYXBpbmcgYmFjaywKKyAgICAgICAgICByZS1jb25uZWN0aW5nLCB0 ZXh0L2JpbmFyeSBtb2RlIHN3aXRjaGluZy4gQWxtb3N0IHRvbyBlYXN5LAorICAgICAgICAgIHJp Z2h0PworCisgICBVcGxvYWRpbmcgRmlsZXMKKyAgICAgICAgICBUbyB1cGxvYWQgZmlsZXMgKHNl bmQgdGhlbSBmcm9tIHlvdXIgZGVza3RvcCBjb21wdXRlciB0byB0aGUKKyAgICAgICAgICByZW1v dGUgVW5peCBjb21wdXRlcikgZG8gdGhlIHNhbWUgdGhpbmcsIGJ1dCB1c2UgdGhlIC1nIChHRVQp CisgICAgICAgICAgb3B0aW9uIGluc3RlYWQgb2YgLXM6CisKKyAga2VybWl0IC1nIG9vZmEudHh0 CisKKyAgICAgICAgICBUaGlzIGNhdXNlcyB5b3VyIGxvY2FsIEtlcm1pdCB0byBlbnRlciBzZXJ2 ZXIgbW9kZTsgdGhlbiB0aGUKKyAgICAgICAgICByZW1vdGUgS2VybWl0IHByb2dyYW0gcmVxdWVz dHMgdGhlIG5hbWVkIGZpbGUgYW5kIHRoZSBsb2NhbAorICAgICAgICAgIEtlcm1pdCBzZW5kcyBp dCBhbmQgcmV0dXJucyBhdXRvbWF0aWNhbGx5IHRvIENvbm5lY3Qgc3RhdGUgd2hlbgorICAgICAg ICAgIGRvbmUuCisKKyAgICAgICAgICBJZiB5b3Ugd2FudCB0byB1cGxvYWQgbXVsdGlwbGUgZmls ZXMsIHlvdSBoYXZlIGhhdmUgdXNlIHNoZWxsCisgICAgICAgICAgcXVvdGluZyBydWxlcywgc2lu Y2UgdGhlc2UgYXJlbid0IGxvY2FsIGZpbGVzOgorCisgIGtlcm1pdCAtZyAib29mYS50eHQgb29m YS56aXAgb29mYS5odG1sIG9vZmEudGFyLmd6IgorICBrZXJtaXQgLWcgIm9vZmEuKiIKKworICAg ICAgICAgIElmIHlvdSB3YW50IHRvIHVwbG9hZCBhIGZpbGUgYnV0IHN0b3JlIGl0IHVuZGVyIGEg ZGlmZmVyZW50CisgICAgICAgICAgbmFtZSwgdXNlOgorCisgIGtlcm1pdCAtZyBmcmlkYXkudHh0 IC1hIHRvZGF5LnR4dAorCisgICBLZXJtaXQgVHJhbnNmZXJzIHRoZSBPbGQtRmFzaGlvbmVkIFdh eQorICAgICAgICAgIElmIHlvdXIgZGVza3RvcCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBkb2Vz IG5vdCBzdXBwb3J0CisgICAgICAgICAgYXV0b3VwbG9hZCBvciBhdXRvZG93bmxvYWQsIG9yIGl0 IGRvZXMgbm90IGluY2x1ZGUgS2VybWl0IHNlcnZlcgorICAgICAgICAgIG1vZGUsIHRoZSBwcm9j ZWR1cmUgcmVxdWlyZXMgbW9yZSBzdGVwcy4KKworICAgICAgICAgIFRvIGRvd25sb2FkIGEgZmls ZSwgdHlwZToKKworICBrZXJtaXQgLXMgZmlsZW5hbWUKKworICAgICAgICAgIG9uIHRoZSBob3N0 IGFzIGJlZm9yZSwgYnV0IGlmIG5vdGhpbmcgaGFwcGVucyBhdXRvbWF0aWNhbGx5IGluCisgICAg ICAgICAgcmVzcG9uc2UgdG8gdGhpcyBjb21tYW5kLCB5b3UgaGF2ZSB0byBzd2l0Y2ggeW91ciBk ZXNrdG9wCisgICAgICAgICAgY29tbXVuaWNhdGlvbnMgc29mdHdhcmUgaW50byBLZXJtaXQgUmVj ZWl2ZSBzdGF0ZS4gVGhpcyBtaWdodCBiZQorICAgICAgICAgIGRvbmUgYnkgZXNjYXBpbmcgYmFj ayB1c2luZyBrZXlib2FyZCBjaGFyYWN0ZXJzIG9yIGhvdCBrZXlzCisgICAgICAgICAgKEFsdC14 IGlzIHR5cGljYWwpIGFuZC9vciB3aXRoIGEgY29tbWFuZCAobGlrZSBSRUNFSVZFKSBvciBhCisg ICAgICAgICAgbWVudS4gV2hlbiB0aGUgZmlsZSB0cmFuc2ZlciBpcyBjb21wbGV0ZSwgeW91IGhh dmUgdG8gZ28gYmFjayB0bworICAgICAgICAgIENvbm5lY3Qgc3RhdGUsIFRlcm1pbmFsIGVtdWxh dGlvbiwgb3Igd2hhdGV2ZXIgdGVybWlub2xvZ3kKKyAgICAgICAgICBhcHBsaWVzIHRvIHlvdXIg ZGVza3RvcCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZS4KKworICAgICAgICAgIFRvIHVwbG9hZCBh IGZpbGUsIHR5cGU6CisKKyAga2VybWl0IC1yCisKKyAgICAgICAgICBvbiB0aGUgaG9zdCAocmF0 aGVyIHRoYW4gImtlcm1pdCAtZyIpLiBUaGlzIHRlbGxzIEMtS2VybWl0IHRvCisgICAgICAgICAg d2FpdCBwYXNzaXZlbHkgZm9yIGEgZmlsZSB0byBzdGFydCBhcnJpdmluZy4gVGhlbiByZWdhaW4g dGhlCisgICAgICAgICAgYXR0ZW50aW9uIG9mIHlvdXIgZGVza3RvcCBzb2Z0d2FyZSAoQWx0LXgg b3Igd2hhdGV2ZXIpIGFuZAorICAgICAgICAgIGluc3RydWN0IGl0IHRvIHNlbmQgdGhlIGRlc2ly ZWQgZmlsZShzKSB3aXRoIEtlcm1pdCBwcm90b2NvbC4KKyAgICAgICAgICBXaGVuIHRoZSB0cmFu c2ZlciBpcyBmaW5pc2hlZCwgcmV0dXJuIHRvIHRoZSBDb25uZWN0IG9yIFRlcm1pbmFsCisgICAg ICAgICAgc2NyZWVuLgorCisgICBJZiBGaWxlIFRyYW5zZmVyIEZhaWxzCisgICAgICAgICAgQWx0 aG91Z2ggZXZlcnkgYXNwZWN0IG9mIEtlcm1pdCdzIG9wZXJhdGlvbiBjYW4gYmUgZmluZWx5IHR1 bmVkLAorICAgICAgICAgIHRoZXJlIGFyZSBhbHNvIHRocmVlIHNob3J0IGFuZCBzaW1wbGUgIm9t bmlidXMgdHVuaW5nIiBjb21tYW5kcworICAgICAgICAgIHlvdSBjYW4gdXNlIGZvciB0cm91Ymxl c2hvb3Rpbmc6CisKKyAgICAgICAgRkFTVAorICAgICAgICAgICAgICAgIFVzZSBmYXN0IGZpbGUt dHJhbnNmZXIgc2V0dGluZ3MuIFRoaXMgaGFzIGJlZW4gdGhlIGRlZmF1bHQKKyAgICAgICAgICAg ICAgICBzaW5jZSBDLUtlcm1pdCA3LjAgbm93IHRoYXQgbW9zdCBtb2Rlcm4gY29tcHV0ZXJzIGFu ZAorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHN1cHBvcnQgaXQuIElmIHRyYW5zZmVycyBm YWlsIHdpdGggZmFzdAorICAgICAgICAgICAgICAgIHNldHRpbmdzLCB0cnkgLiAuIC4KKworICAg ICAgICBDQVVUSU9VUworICAgICAgICAgICAgICAgIFVzZSBjYXV0aW91cyBidXQgbm90IHBhcmFu b2lkIHNldHRpbmdzLiBGaWxlIHRyYW5zZmVycywgaWYKKyAgICAgICAgICAgICAgICB0aGV5IHdv cmssIHdpbGwgZ28gYXQgbWVkaXVtIHNwZWVkLiBJZiBub3QsIHRyeSAuIC4gLgorCisgICAgICAg IFJPQlVTVAorICAgICAgICAgICAgICAgIFVzZSB0aGUgbW9zdCByb2J1c3QsIHJlc2lsaWVudCwg Y29uc2VydmF0aXZlLCBzYWZlLCBhbmQKKyAgICAgICAgICAgICAgICByZWxpYWJsZSBzZXR0aW5n cy4gRmlsZSB0cmFuc2ZlcnMgd2lsbCBhbG1vc3QgY2VydGFpbmx5CisgICAgICAgICAgICAgICAg d29yaywgYnV0IHRoZXkgd2lsbCBiZSBxdWl0ZSBzbG93IChvZiBjb3Vyc2UgdGhpcyBpcyBhCisg ICAgICAgICAgICAgICAgY2xhc3NpYyB0cmFkZW9mZjsgUk9CVVNUIHdhcyBDLUtlcm1pdCdzIGRl ZmF1bHQgdHVuaW5nIGluCisgICAgICAgICAgICAgICAgdmVyc2lvbnMgNi4wIGFuZCBlYXJsaWVy LCB3aGljaCBtYWRlIGV2ZXJ5Ym9keSB0aGluaworICAgICAgICAgICAgICAgIEtlcm1pdCBwcm90 b2NvbCB3YXMgc2xvdykuIElmIFJPQlVTVCBkb2Vzbid0IGRvIHRoZSB0cmljaywKKyAgICAgICAg ICAgICAgICB0cnkgYWdhaW4gd2l0aCBTRVQgUEFSSVRZIFNQQUNFIGZpcnN0IGluIGNhc2UgaXQn cyBub3QgYW4KKyAgICAgICAgICAgICAgICA4LWJpdCBjb25uZWN0aW9uLgorCisgICAgICAgICAg T2J2aW91c2x5IHRoZSBzdWNjZXNzIGFuZCBwZXJmb3JtYW5jZSBvZiBhIGZpbGUgdHJhbnNmZXIg YWxzbworICAgICAgICAgIGRlcGVuZHMgb24gQy1LZXJtaXQncyBmaWxlIHRyYW5zZmVyIHBhcnRu ZXIuIFVwLXRvLWRhdGUsIHJlYWwKKyAgICAgICAgICBbMTI4XUtlcm1pdCBQcm9qZWN0IHBhcnRu ZXJzIGFyZSByZWNvbW1lbmRlZCBiZWNhdXNlIHRoZXkKKyAgICAgICAgICBjb250YWluIHRoZSBi ZXN0IEtlcm1pdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbnMgYW5kIGJlY2F1c2UKKyAgICAgICAg ICBbMTI5XXdlIGNhbiBzdXBwb3J0IHRoZW0gaW4gY2FzZSBvZiB0cm91YmxlLgorCisgICAgICAg ICAgSWYgeW91IHN0aWxsIGhhdmUgdHJvdWJsZSwgY29uc3VsdCBDaGFwdGVyIDEwIG9mIFsxMzBd VXNpbmcKKyAgICAgICAgICBDLUtlcm1pdCwgb3Igc2VuZCBlbWFpbCB0byBbMTMxXWtlcm1pdC1z dXBwb3J0QGNvbHVtYmlhLmVkdS4KKworICAgQWR2YW5jZWQgS2VybWl0IEZpbGUtVHJhbnNmZXIg RmVhdHVyZXMKKyAgICAgICAgICBPYnZpb3VzbHkgdGhlcmUgaXMgYSBsb3QgbW9yZSB0byBLZXJt aXQgZmlsZSB0cmFuc2ZlciwgaW5jbHVkaW5nCisgICAgICAgICAgYWxsIHNvcnRzIG9mIGludGVy YWN0aXZlIGNvbW1hbmRzLCBwcmVmZXJlbmNlcywgb3B0aW9ucywKKyAgICAgICAgICBsb2dnaW5n LCBkZWJ1Z2dpbmcsIHRyb3VibGVzaG9vdGluZywgYW5kIGFueXRoaW5nIGVsc2UgeW91IGNhbgor ICAgICAgICAgIGltYWdpbmUgYnV0IHRoYXQncyB3aGF0IHRoZSBbMTMyXW1hbnVhbCBhbmQgdXBk YXRlcyBhcmUgZm9yLgorICAgICAgICAgIEhlcmUgYXJlIGEgZmV3IHRvcGljcyB5b3UgY2FuIGV4 cGxvcmUgaWYgeW91J3JlIGludGVyZXN0ZWQgYnkKKyAgICAgICAgICBUeXBpbmcgSEVMUCBmb3Ig dGhlIGxpc3RlZCBjb21tYW5kczoKKworICAgICAgICBMb2dnaW5nIHRyYW5zZmVyczoKKyAgICAg ICAgICAgICAgICBMT0cgVFJBTlNBQ1RJT05TIChIRUxQIExPRykKKworICAgICAgICBBdXRvbWF0 aWMgcGVyLWZpbGUgdGV4dC9iaW5hcnkgbW9kZSBzd2l0Y2hpbmc6CisgICAgICAgICAgICAgICAg U0VUIFRSQU5TRkVSIE1PREUgeyBBVVRPTUFUSUMsIE1BTlVBTCB9IChIRUxQIFNFVAorICAgICAg ICAgICAgICAgIFRSQU5TRkVSKS4KKworICAgICAgICBDcm9zcy1wbGF0Zm9ybSByZWN1cnNpdmUg ZGlyZWN0b3J5IHRyZWUgdHJhbnNmZXI6CisgICAgICAgICAgICAgICAgU0VORCAvUkVDVVJTSVZF LCBHRVQgL1JFQ1VSU0lWRSAoSEVMUCBTRU5ELCBIRUxQIEdFVCkuCisKKyAgICAgICAgRmlsZSBj b2xsaXNpb24gb3B0aW9uczoKKyAgICAgICAgICAgICAgICBTRVQgRklMRSBDT0xMSVNJT04geyBP VkVSV1JJVEUsIEJBQ0tVUCwgRElTQ0FSRCwgLi4uIH0KKyAgICAgICAgICAgICAgICAoSEVMUCBT RVQgRklMRSkuCisKKyAgICAgICAgVXBkYXRlIG1vZGUgKG9ubHkgdHJhbnNmZXIgZmlsZXMgdGhh dCBjaGFuZ2VkIHNpbmNlIGxhc3QgdGltZSk6CisgICAgICAgICAgICAgICAgU0VUIEZJTEUgQ09M TElTSU9OIFVQREFURSAoSEVMUCBTRVQgRklMRSkuCisKKyAgICAgICAgRmlsZW5hbWUgc2VsZWN0 aW9uIHBhdHRlcm5zOgorICAgICAgICAgICAgICAgIChIRUxQIFdJTERDQVJEKS4KKworICAgICAg ICBGbGV4aWJsZSBmaWxlIHNlbGVjdGlvbjoKKyAgICAgICAgICAgICAgICBTRU5EIChvciBHRVQp IC9CRUZPUkUgL0FGVEVSIC9MQVJHRVIgL1NNQUxMRVIgL1RZUEUKKyAgICAgICAgICAgICAgICAv RVhDRVBULCAuLi4KKworICAgICAgICBDaGFyYWN0ZXItc2V0IGNvbnZlcnNpb246CisgICAgICAg ICAgICAgICAgU0VUIHsgRklMRSwgVFJBTlNGRVIgfSBDSEFSQUNURVItU0VULCBBU1NPQ0lBVEUs IC4uLgorCisgICAgICAgIEZpbGUvUGF0aG5hbWUgY29udHJvbDoKKyAgICAgICAgICAgICAgICBT RVQgeyBTRU5ELCBSRUNFSVZFIH0gUEFUSE5BTUVTLCBTRVQgRklMRSBOQU1FUy4KKworICAgICAg ICBBdG9taWMgZmlsZSBtb3ZlbWVudDoKKyAgICAgICAgICAgICAgICBTRU5EIChvciBHRVQpIC9E RUxFVEUgL1JFTkFNRSAvTU9WRS1UTworCisgICAgICAgIFRyYW5zZmVycmluZyB0by9mcm9tIHN0 YW5kYXJkIGkvbyBvZiBvdGhlciBjb21tYW5kczoKKyAgICAgICAgICAgICAgICBTRU5EIChvciBH RVQpIC9DT01NQU5ECisKKyAgICAgICAgUmVjb3Zlcnkgb2YgaW50ZXJydXB0ZWQgdHJhbnNmZXIg ZnJvbSBwb2ludCBvZiBmYWlsdXJlOgorICAgICAgICAgICAgICAgIFJFU0VORCwgUkVHRVQgKEhF TFAgUkVTRU5ELCBIRUxQIFJFR0VUKS4KKworICAgTm9uLUtlcm1pdCBGaWxlIFRyYW5zZmVyCisg ICAgICAgICAgWW91IGNhbiBhbHNvIHVzZSBDLUtlcm1pdCB0byB0cmFuc2ZlciBmaWxlcyB3aXRo IEZUUCBvciBIVFRQCisgICAgICAgICAgSW50ZXJuZXQgcHJvdG9jb2xzOyBbMTMzXXNlZSBiZWxv dy4KKworICAgICAgICAgIE9uIGEgcmVndWxhciBzZXJpYWwgb3IgVGVsbmV0IGNvbm5lY3Rpb24g d2hlcmUgdGhlIG90aGVyCisgICAgICAgICAgY29tcHV0ZXIgZG9lc24ndCBzdXBwb3J0IEtlcm1p dCBwcm90b2NvbCBhdCBhbGwsIHlvdSBoYXZlCisgICAgICAgICAgc2V2ZXJhbCBvcHRpb25zLiBG b3IgZXhhbXBsZSwgaWYgeW91ciBkZXNrdG9wIGNvbW11bmljYXRpb25zCisgICAgICAgICAgc29m dHdhcmUgc3VwcG9ydHMgWm1vZGVtLCB1c2UgInJ6IiBhbmQgInN6IiBvbiB0aGUgaG9zdCByYXRo ZXIKKyAgICAgICAgICB0aGFuIEtlcm1pdC4gQnV0IGlmIEtlcm1pdCBpcyB5b3VyIGRlc2t0b3Ag c29mdHdhcmUsIGFuZCB5b3UgYXJlCisgICAgICAgICAgdXNpbmcgaXQgdG8gbWFrZSBjYWxscyBv ciBuZXR3b3JrIGNvbm5lY3Rpb25zIHRvIG90aGVyIGNvbXB1dGVycworICAgICAgICAgIHRoYXQg ZG9uJ3Qgc3VwcG9ydCBLZXJtaXQgcHJvdG9jb2wgKG9yIHRoYXQgZG9uJ3QgaGF2ZSBhIGdvb2QK KyAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBpdCksIHRoZW4gaWYgeW91ciBjb21wdXRlciBh bHNvIGhhcyBleHRlcm5hbAorICAgICAgICAgIFgsIFksIG9yIFptb2RlbSBwcm9ncmFtcyB0aGF0 IGFyZSByZWRpcmVjdGFibGUsIEtlcm1pdCBjYW4gdXNlCisgICAgICAgICAgdGhlbSBhcyBleHRl cm5hbCBwcm90b2NvbHMuIEhFTFAgU0VUIFBST1RPQ09MIGZvciBkZXRhaWxzLgorCisgICAgICAg ICAgWW91IGNhbiBhbHNvIGNhcHR1cmUgInJhdyIgZGF0YSBzdHJlYW1zIGZyb20gdGhlIG90aGVy IGNvbXB1dGVyCisgICAgICAgICAgd2l0aCBMT0cgU0VTU0lPTiAoSEVMUCBMT0cgYW5kIEhFTFAg U0VUIFNFU1NJT04tTE9HIGZvcgorICAgICAgICAgIGRldGFpbHMpLCBhbmQgeW91IGNhbiB1cGxv YWQgZmlsZXMgd2l0aG91dCBhbnkgcHJvdG9jb2wgYXQgYWxsCisgICAgICAgICAgd2l0aCBUUkFO U01JVCAoSEVMUCBUUkFOU01JVCwgSEVMUCBTRVQgVFJBTlNNSVQpLgorCisgICBbMTM0XUtlcm1p dCBIb21lIFsxMzVdQy1LZXJtaXQgSG9tZSBbMTM2XUMtS2VybWl0IEZBUQorCitLRVJNSVQgQ0xJ RU5UL1NFUlZFUiBDT05ORUNUSU9OUworCisgICBbMTM3XVRvcCBbMTM4XUNvbnRlbnRzIFsxMzld TmV4dCBbMTQwXVByZXZpb3VzCisKKyAgIE9uIGFueSBraW5kIG9mIGNvbm5lY3Rpb24geW91IGNh biBtYWtlIHdpdGggS2VybWl0IC0tIHNlcmlhbCwgVENQL0lQLAorICAgWC4yNSwgZXRjIC0tIHlv dSBjYW4gc2V0IHVwIGEgY29udmVuaWVudCBjbGllbnQvc2VydmVyIHJlbGF0aW9uc2hpcAorICAg YmV0d2VlbiB5b3VyIEtlcm1pdCBjbGllbnQgKHRoZSBvbmUgdGhhdCBtYWRlIHRoZSBjb25uZWN0 aW9uKSBhbmQgdGhlCisgICBLZXJtaXQgcHJvZ3JhbSBvbiB0aGUgZmFyIGVuZCBvZiB0aGUgY29u bmVjdGlvbiAodGhlIHJlbW90ZSBLZXJtaXQpIGJ5CisgICBwdXR0aW5nIHRoZSByZW1vdGUgS2Vy bWl0IGluIHNlcnZlciBtb2RlLiBUaGlzIGlzIG5vcm1hbGx5IGRvbmUgYnkKKyAgIGdpdmluZyBp dCBhIFNFUlZFUiBjb21tYW5kLCBvciBieSBzdGFydGluZyBpdCB3aXRoIHRoZSAteCBjb21tYW5k LWxpbmUKKyAgIG9wdGlvbi4gSW4gc29tZSBjYXNlcyAoWzE0MV1JbnRlcm5ldCBLZXJtaXQgU2Vy dmljZSwgU1NIIGNvbm5lY3Rpb25zIHRvCisgICBhIEtlcm1pdCBzdWJzeXN0ZW0sIG9yIHNwZWNp YWxseSBjb25maWd1cmVkIGhvc3RzKSwgdGhlcmUgaXMgYWxyZWFkeSBhCisgICBLZXJtaXQgc2Vy dmVyIHdhaXRpbmcgb24gdGhlIGZhciBlbmQuIEhlcmUgaXMgYSBxdWljayBzeW5vcHNpcyBvZiB0 aGUKKyAgIGNvbW1hbmRzIHlvdSBjYW4gZ2l2ZSB0byB0aGUgY2xpZW50IGZvciBpbnRlcmFjdGlu ZyB3aXRoIHRoZSBzZXJ2ZXI6CisKKyAgIFNFTkQgWyBzd2l0Y2hlcyBdIGZpbGVuYW1lCisgICAg ICAgICAgU2VuZHMgdGhlIG5hbWVkIGZpbGUgdG8gdGhlIHNlcnZlci4gVGhlIGZpbGVuYW1lIGNh biBpbmNsdWRlCisgICAgICAgICAgd2lsZGNhcmRzLiBMb3RzIG9mIHN3aXRjaGVzIGFyZSBhdmFp bGFibGUgZm9yIGZpbGUgc2VsZWN0aW9uLAorICAgICAgICAgIGV0Yy4gVHlwZSBIRUxQIFNFTkQg YXQgdGhlIGNsaWVudCBwcm9tcHQgZm9yIGRldGFpbHMuCisKKyAgIEdFVCBbIHN3aXRjaGVzIF0g ZmlsZW5hbWUKKyAgICAgICAgICBBc2tzIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUgbmFtZWQgZmls ZS4gVGhlIGZpbGVuYW1lIGNhbiBpbmNsdWRlCisgICAgICAgICAgd2lsZGNhcmRzLiBUeXBlIEhF TFAgR0VUIGF0IHRoZSBjbGllbnQgcHJvbXB0IGZvciBkZXRhaWxzLgorCisgICBCWUUKKyAgICAg ICAgICBUZXJtaW5hdGVzIHRoZSBzZXJ2ZXIgYW5kIGNsb3NlcyB5b3VyIGNvbm5lY3Rpb24gdG8g aXQuCisKKyAgIEZJTklTSAorICAgICAgICAgIFRlcm1pbmF0ZXMgdGhlIHNlcnZlci4gSWYgeW91 IHN0YXJ0ZWQgdGhlIHNlcnZlciB5b3Vyc2VsZiwgdGhpcworICAgICAgICAgIGxlYXZlcyB0aGUg cmVtb3RlIGhvc3QgYXQgaXRzIHNoZWxsIHByb21wdC4gSWYgaXQgd2FzIGEKKyAgICAgICAgICBk ZWRpY2F0ZWQgc2VydmVyIChzdWNoIGFzIElLU0Qgb3IgYW4gU1NIIHN1YnN5c3RlbSksIEZJTklT SCBpcworICAgICAgICAgIGVxdWl2YWxlbnQgdG8gQllFLgorCisgICBTRVQgTE9DVVMgeyBMT0NB TCwgUkVNT1RFLCBBVVRPIH0KKyAgICAgICAgICAoQy1LZXJtaXQgOC4wLjIwMSBhbmQgbGF0ZXIs IEs5NSAxLjEuMjEgYW5kIGxhdGVyKSBUaGlzIHRlbGxzCisgICAgICAgICAgdGhlIGNsaWVudCB3 aGV0aGVyIGZpbGUtbWFuYWdlbWVudCBjb21tYW5kcyBsaWtlIENELCBQV0QsCisgICAgICAgICAg RElSRUNUT1JZLCBERUxFVEUsIE1LRElSLCBldGMsIHNob3VsZCBiZSBleGVjdXRlZCBsb2NhbGx5 IG9yIGJ5CisgICAgICAgICAgdGhlIHNlcnZlci4gSW4gdGhpcyB0eXBlIG9mIGNvbm5lY3Rpb24s IHRoZSBkZWZhdWx0IGlzIExPQ0FMLgorICAgICAgICAgIFVzZSBTRVQgTE9DVVMgUkVNT1RFIGlm IHlvdSB3YW50IEtlcm1pdCB0byBiZWhhdmUgbGlrZSBhbiBGVFAKKyAgICAgICAgICBjbGllbnQs IGluIHdoaWNoIGNhc2UgdGhlc2UgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIHJlbW90ZWx5LCBhbmQK KyAgICAgICAgICB0aGVpciBsb2NhbCB2ZXJzaW9ucyBtdXN0IGhhdmUgYW4gTCBwcmVmaXg6IExD RCwgTFBXRCwKKyAgICAgICAgICBMRElSRUNUT1JZLCBldGMuIFdoZW4gTE9DVVMgaXMgTE9DQUws IHRoZW4gdGhlIHJlbW90ZSB2ZXJzaW9ucworICAgICAgICAgIG11c3QgaGF2ZSBhbiBSIHByZWZp eDogUkNELCBSUFdELCBSRElSRUNUT1JZLCBldGMuIEhFTFAgU0VUCisgICAgICAgICAgTE9DVVMg Zm9yIGRldGFpbHMuIFNIT1cgQ09NTUFORCB0byBzZWUgY3VycmVudCBsb2N1cy4KKworICAgVGhl IGZvbGxvd2luZyBjb21tYW5kcyBhcmUgYWZmZWN0ZWQgYnkgU0VUIExPQ1VTOgorCisgICBDRCwg TENELCBSQ0QKKyAgICAgICAgICBDaGFuZ2UgKHdvcmtpbmcsIGN1cnJlbnQpIGRpcmVjdG9yeS4g SEVMUCBDRCBmb3IgZGV0YWlscy4KKworICAgQ0RVUCwgTENEVVAsIFJDRFVQCisgICAgICAgICAg Q0Qgb25lIGxldmVsIHVwLgorCisgICBESVJFQ1RPUlksIExESVJFQ1RPUlksIFJESVJFQ1RPUlkK KyAgICAgICAgICBQcm9kdWNlIGEgZGlyZWN0b3J5IGxpc3RpbmcuIE1hbnkgb3B0aW9ucyBhcmUg YXZhaWxhYmxlIGZvcgorICAgICAgICAgIGxvY2FsIGxpc3RpbmdzLiBIRUxQIERJUkVDVE9SWSBm b3IgZGV0YWlscy4KKworICAgREVMRVRFLCBMREVMRVRFLCBSREVMRVRFCisgICAgICAgICAgRGVs ZXRlcyBmaWxlcyBvciBkaXJlY3Rvcmllcy4gTWFueSBvcHRpb25zIGF2YWlsYWJsZSwgSEVMUAor ICAgICAgICAgIERFTEVURS4KKworICAgUkVOQU1FLCBMUkVOQU1FLCBSUkVOQU1FCisgICAgICAg ICAgUmVuYW1lcyBmaWxlcyBvciBkaXJlY3Rvcmllcy4gTWFueSBvcHRpb25zIGF2YWlsYWJsZSwg SEVMUAorICAgICAgICAgIFJFTkFNRS4KKworICAgTUtESVIsIExNS0RJUiwgUk1LRElSCisgICAg ICAgICAgQ3JlYXRlcyBhIGRpcmVjdG9yeS4gSEVMUCBNS0RJUi4KKworICAgUk1ESVIsIExSTURJ UiwgUlJNRElSCisgICAgICAgICAgUmVtb3ZlcyBhIGRpcmVjdG9yeS4gSEVMUCBSTURJUi4KKwor ICAgVGhlcmUgYXJlIGRvemVucyAtLSBtYXliZSBodW5kcmVkcyAtLSBvZiBvdGhlciBjb21tYW5k cywgZGVzY3JpYmVkIGluCisgICB0aGUgYnVpbHQtaW4gaGVscCwgb24gdGhlIHdlYnNpdGUsIGFu ZC9vciBpbiB0aGUgcHVibGlzaGVkIG9yIG9ubGluZQorICAgbWFudWFscy4gQnV0IGV2ZW4gaWYg eW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIGRvY3VtZW50YXRpb24sIHlvdSBjYW4KKyAgICJzZXQg bG9jdXMgcmVtb3RlIiBhbmQgdGhlbiB1c2UgcHJldHR5IG11Y2ggdGhlIHNhbWUgY29tbWFuZHMg eW91IHdvdWxkCisgICB1c2Ugd2l0aCBhbnkgRlRQIGNsaWVudC4KKworICAgWzE0Ml1LZXJtaXQg SG9tZSBbMTQzXUMtS2VybWl0IEhvbWUgWzE0NF1DLUtlcm1pdCBGQVEKKworS0VSTUlUJ1MgQlVJ TFQtSU4gRlRQIEFORCBIVFRQIENMSUVOVFMKKworICAgWzE0NV1Ub3AgWzE0Nl1Db250ZW50cyBb MTQ3XU5leHQgWzE0OF1QcmV2aW91cworCisgICBLZXJtaXQncyBGVFAgY2xpZW50IGlzIGxpa2Ug dGhlIHJlZ3VsYXIgVW5peCBGVFAgY2xpZW50IHRoYXQgeW91J3JlCisgICB1c2VkIHRvLCBidXQg d2l0aCBzb21lIGRpZmZlcmVuY2VzOgorCisgICAgICogSXQgaGFzIGxvdHMgbW9yZSBjb21tYW5k cyBhbmQgZmVhdHVyZXMuCisgICAgICogWW91IGNhbiBoYXZlIGFuIEZUUCBzZXNzaW9uIGFuZCBh IHJlZ3VsYXIgS2VybWl0IHNlcmlhbCBvciBUZWxuZXQKKyAgICAgICBzZXNzaW9uIG9wZW4gYXQg dGhlIHNhbWUgdGltZS4KKyAgICAgKiBGVFAgc2Vzc2lvbnMgY2FuIGJlIGZ1bGx5IGF1dG9tYXRl ZC4KKworICAgQnkgZGVmYXVsdCBLZXJtaXQncyBGVFAgY2xpZW50IHRyaWVzIGl0cyBiZXN0IHRv IHByZXNlbnQgdGhlIHNhbWUgdXNlcgorICAgaW50ZXJmYWNlIGFzIGEgcmVndWxhciBGVFAgY2xp ZW50OiBQVVQsIEdFVCwgRElSLCBDRCwgQllFLCBldGMsIHNob3VsZAorICAgd29yayB0aGUgc2Ft ZSwgZXZlbiB0aG91Z2ggc29tZSBvZiB0aGVzZSBjb21tYW5kcyBoYXZlIGRpZmZlcmVudAorICAg bWVhbmluZyBpbiBLZXJtaXQtdG8tS2VybWl0IGNvbm5lY3Rpb25zOyBmb3IgZXhhbXBsZSwgQ0Qs IERJUiwgUkVOQU1FLAorICAgZXRjLCBpbiBLZXJtaXQgYWN0IGxvY2FsbHksIHdoZXJlYXMgaW4g RlRQIHRoZXkgYXJlIGNvbW1hbmRzIGZvciB0aGUKKyAgIHNlcnZlci4gVGhpcyBtaWdodCBjYXVz ZSBzb21lIGNvbmZ1c2lvbiwgYnV0IGFzIGluIGFsbCB0aGluZ3MgS2VybWl0LAorICAgeW91IGhh dmUgdG90YWwgY29udHJvbDoKKworICAgICAqIFRoZSBbMTQ5XVNFVCBMT0NVUyBjb21tYW5kIGxl dHMgeW91IHNwZWNpZnkgd2hlcmUgZmlsZSBtYW5hZ2VtZW50CisgICAgICAgY29tbWFuZHMgc2hv dWxkIGJlIGV4ZWN1dGVkIC0tIGxvY2FsbHkgb3IgcmVtb3RlbHkgLS0gZm9yIGFueSBraW5kCisg ICAgICAgb2YgY29ubmVjdGlvbi4KKyAgICAgKiBBbnkgRlRQIGNvbW1hbmQgY2FuIGJlIHByZWZp eGVkIHdpdGggdGhlIHdvcmQgIkZUUCIgdG8gcmVtb3ZlIGFueQorICAgICAgIGFtYmlndWl0eS4K KworICAgUGVuZGluZyBwdWJsaWNhdGlvbiBvZiB0aGUgbmV4dCBlZGl0aW9uIG9mIHRoZSBtYW51 YWwsIHRoZSBLZXJtaXQgRlRQCisgICBjbGllbnQgaXMgdGhvcm91Z2hseSBkb2N1bWVudGVkIGF0 IHRoZSBLZXJtaXQgUHJvamVjdCB3ZWJzaXRlOgorCisgIFsxNTBdaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2Z0cGNsaWVudC5odG1sCisKKyAgIFlvdSBhbHNvIGNhbiB1c2UgSEVMUCBG VFAgYW5kIEhFTFAgU0VUIEZUUCB0byBnZXQgZGVzY3JpcHRpb25zIG9mCisgICBLZXJtaXQncyBG VFAtcmVsYXRlZCBjb21tYW5kcy4KKworICAgVGhlIEhUVFAgY2xpZW50IGlzIHNpbWlsYXIgdG8g dGhlIEZUUCBvbmUsIGV4Y2VwdCB5b3UgcHJlZml4IGVhY2gKKyAgIGNvbW1hbmQgd2l0aCBIVFRQ IGluc3RlYWQgb2YgRlRQOiBIVFRQIE9QRU4sIEhUVFAgR0VULCBIVFRQIFBVVCwgSFRUUAorICAg Q0xPU0UsIGV0Yy4gVHlwZSBIRUxQIEhUVFAgZm9yIGRldGFpbHMsIG9yIHZpc2l0IHRoZSB0byB2 aWV3IHRoZQorICAgWzE1MV1tYW51YWwgc3VwcGxlbWVudHMuIEhUVFAgY29ubmVjdGlvbnMgY2Fu IGJlIG9wZW4gYXQgdGhlIHNhbWUgdGltZQorICAgYXMgcmVndWxhciBzZXJpYWwgb3IgVGVsbmV0 IGNvbm5lY3Rpb25zIGFuZCBGVFAgY29ubmVjdGlvbnMuIFNvIEtlcm1pdAorICAgY2FuIG1hbmFn ZSB1cCB0byB0aHJlZSB0eXBlcyBjb25uZWN0aW9ucyBzaW11bHRhbmVvdXNseS4KKworICAgWzE1 Ml1LZXJtaXQgSG9tZSBbMTUzXUMtS2VybWl0IEhvbWUgWzE1NF1DLUtlcm1pdCBGQVEgWzE1NV1G VFAgQ2xpZW50CisgICBbMTU2XUhUVFAgQ2xpZW50CisKK0lOVEVSTkVUIEtFUk1JVCBTRVJWSUNF CisKKyAgIFsxNTddVG9wIFsxNThdQ29udGVudHMgWzE1OV1OZXh0IFsxNjBdUHJldmlvdXMKKwor ICAgQy1LZXJtaXQgY2FuIGJlIGNvbmZpZ3VyZWQgYW5kIHJ1biBhcyBhbiBJbnRlcm5ldCBzZXJ2 aWNlIChjYWxsZWQKKyAgIElLU0QpLCBzaW1pbGFyIHRvIGFuIEZUUCBzZXJ2ZXIgKEZUUEQpIGV4 Y2VwdCB5b3UgY2FuIChidXQgbmVlZCBub3QpCisgICBpbnRlcmFjdCB3aXRoIGl0IGRpcmVjdGx5 LCBwbHVzIGl0IGRvZXMgYSBsb3QgbW9yZSB0aGFuIGFuIEZUUCBzZXJ2ZXIKKyAgIGNhbiBkby4g VGhlIFRDUCBwb3J0IGZvciBJS1NEIGlzIDE2NDkuIEl0IHVzZXMgVGVsbmV0IHByb3RvY29sLgor ICAgQy1LZXJtaXQgY2FuIGJlIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2ZXIsIG9yIGl0IGNhbiBi ZSBhIGNsaWVudCBvZiBhbgorICAgSUtTRC4gWW91IGNhbiBtYWtlIGNvbm5lY3Rpb25zIGZyb20g Qy1LZXJtaXQgdG8gYW4gSUtTRCB3aXRoIGFueSBvZiB0aGUKKyAgIGZvbGxvd2luZyBjb21tYW5k czoKKworICB0ZWxuZXQgZm9vLmJhci5lZHUgMTY0OQorICB0ZWxuZXQgZm9vLmJhci5lZHUga2Vy bWl0ICAgOyBpZiAia2VybWl0IiBpcyBsaXN0ZWQgaW4gL2V0Yy9zZXJ2aWNlcworICBpa3NkIGZv by5iYXIuZWR1CisKKyAgIFRoZSBJS1NEIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBhIFRFTE5F VCBjb21tYW5kIHNwZWNpZnlpbmcgcG9ydAorICAgMTY0OS4gRm9yIG1vcmUgaW5mb3JtYXRpb24g YWJvdXQgbWFraW5nIGFuZCB1c2luZyBjb25uZWN0aW9ucyB0byBhbgorICAgSUtTRCwgc2VlOgor CisgIFsxNjFdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1aWtzZC5odG1sCisKKyAg IFlvdSBjYW4gcnVuIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIG9uIHlvdXIgb3duIGNvbXB1 dGVyIHRvbyAoaWYgeW91CisgICBhcmUgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yKS4gRm9yIGlu c3RydWN0aW9ucywgc2VlOgorCisgIFsxNjJdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2lrc2QuaHRtbAorCisgICBbMTYzXUtlcm1pdCBIb21lIFsxNjRdQy1LZXJtaXQgSG9tZSBbMTY1 XUMtS2VybWl0IEZBUQorCitTRUNVUklUWQorCisgICBbMTY2XVRvcCBbMTY3XUNvbnRlbnRzIFsx NjhdTmV4dCBbMTY5XVByZXZpb3VzCisKKyAgIEFsbCBvZiBDLUtlcm1pdCdzIGJ1aWx0LWluIFRD UC9JUCBuZXR3b3JraW5nIG1ldGhvZHMgKFRlbG5ldCwgUmxvZ2luLAorICAgSUtTRCwgRlRQLCBh bmQgSFRUUCkgY2FuIGJlIHNlY3VyZWQgYnkgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZwor ICAgSUVURi1hcHByb3ZlZCBtZXRob2RzOgorCisgICAgICogTUlUIEtlcmJlcm9zIElWCisgICAg ICogTUlUIEtlcmJlcm9zIFYKKyAgICAgKiBTU0wvVExTCisgICAgICogU3RhbmZvcmQgU1JQCisK KyAgIEZvciBjb21wbGV0ZSBpbnN0cnVjdGlvbnMgc2VlOgorCisgIFsxNzBdaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKKworICAgQW5kIGFzIG5vdGVkIHByZXZp b3VzbHksIHlvdSBjYW4gYWxzbyBtYWtlIFNTSCBjb25uZWN0aW9ucyB3aXRoCisgICBDLUtlcm1p dCBpZiB5b3UgYWxyZWFkeSBoYXZlIGFuIFNTSCBjbGllbnQgaW5zdGFsbGVkLgorCisgICBbMTcx XUtlcm1pdCBIb21lIFsxNzJdQy1LZXJtaXQgSG9tZSBbMTczXUMtS2VybWl0IEZBUQorCitBTFRF Uk5BVElWRSBDT01NQU5ELUxJTkUgUEVSU09OQUxJVElFUworCisgICBbMTc0XVRvcCBbMTc1XUNv bnRlbnRzIFsxNzZdTmV4dCBbMTc3XVByZXZpb3VzCisKKyAgIFdoZW4gaW52b2tlZCBhcyAia2Vy bWl0IiBvciBhbnkgb3RoZXIgbmFtZSBiZXNpZGVzIGFueSBvZiB0aGUgc3BlY2lhbAorICAgb25l cywgQy1LZXJtaXQgaGFzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBkZXNjcmliZWQgYWJvdmUg aW4gdGhlCisgICBbMTc4XU9QVElPTlMgc2VjdGlvbi4gSG93ZXZlciwgaWYgeW91IGludm9rZSBD LUtlcm1pdCB1c2luZyBhbnkgb2YgdGhlCisgICBmb2xsb3dpbmcgbmFtZXM6CisKKyAgICAgdGVs bmV0ICBUZWxuZXQgY2xpZW50CisgICAgIGZ0cCAgICAgRlRQIGNsaWVudAorICAgICBodHRwICAg IEhUVFAgY2xpZW50CisgICAgIGh0dHBzICAgU2VjdXJlIEhUVFAgY2xpZW50CisKKyAgIEtlcm1p dCdzIGNvbW1hbmQtbGluZSBwZXJzb25hbGl0eSBjaGFuZ2VzIHRvIG1hdGNoLiBUaGlzIGNhbiBi ZSBkb25lCisgICAoYW1vbmcgb3RoZXIgd2F5cykgd2l0aCBzeW1ib2xpYyBsaW5rcyAoc3ltbGlu a3MpLiBGb3IgZXhhbXBsZSwgaWYgeW91CisgICB3YW50IEMtS2VybWl0IHRvIGJlIHlvdXIgcmVn dWxhciBUZWxuZXQgY2xpZW50LCBvciB0aGUgVGVsbmV0IGhlbHBlciBvZgorICAgeW91ciBXZWIg YnJvd3NlciwgeW91IGNhbiBjcmVhdGUgYSBsaW5rIGxpa2UgdGhlIGZvbGxvd2luZyBpbiBhCisg ICBkaXJlY3RvcnkgdGhhdCBsaWVzIGluIHlvdXIgUEFUSCBhaGVhZCBvZiB0aGUgcmVndWxhciB0 ZWxuZXQgcHJvZ3JhbToKKworICBsbiAtcyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgdGVsbmV0CisK KyAgIE5vdyB3aGVuIHlvdSBnaXZlIGEgInRlbG5ldCIgY29tbWFuZCwgeW91IGFyZSBpbnZva2lu ZyBLZXJtaXQgaW5zdGVhZCwKKyAgIGJ1dCB3aXRoIGl0cyBUZWxuZXQgY29tbWFuZC1saW5lIHBl cnNvbmFsaXR5IHNvLCBmb3IgZXhhbXBsZToKKworICB0ZWxuZXQgeHl6Y29ycC5jb20KKworICAg TWFrZXMgYSBUZWxuZXQgY29ubmVjdGlvbiB0byB4eXpjb3JwLmNvbSwgYW5kIEtlcm1pdCBleGl0 cworICAgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCAoanVzdCBs aWtlIHRoZSByZWd1bGFyCisgICBUZWxuZXQgY2xpZW50KS4gVHlwZSAidGVsbmV0IC1oIiB0byBn ZXQgYSBsaXN0IG9mIEtlcm1pdCdzCisgICBUZWxuZXQtcGVyc29uYWxpdHkgY29tbWFuZC1saW5l IG9wdGlvbnMsIHdoaWNoIGFyZSBpbnRlbmRlZCB0byBiZSBhcworICAgY29tcGF0aWJsZSBhcyBw b3NzaWJsZSB3aXRoIHRoZSByZWd1bGFyIFRlbG5ldCBjbGllbnQuCisKKyAgIFNpbWlsYXJseSBm b3IgRlRQOgorCisgIGxuIC1zIC91c3IvbG9jYWwvYmluL2tlcm1pdCBmdHAKKworICAgQW5kIG5v dyB0eXBlICJmdHAgLWgiIHRvIHNlZSBpdHMgY29tbWFuZC1saW5lIG9wdGlvbnMsIGFuZCB1c2Ug Y29tbWFuZAorICAgbGluZXMganVzdCBsaWtlIHlvdSB3b3VsZCBnaXZlIHlvdXIgcmVndWxhciBG VFAgY2xpZW50OgorCisgIGZ0cCAtbiB4eXpjb3JwLmNvbQorCisgICBidXQgd2l0aCBhZGRpdGlv bmFsIG9wdGlvbnMgYWxsb3dpbmcgYW4gZW50aXJlIHNlc3Npb24gdG8gYmUgc3BlY2lmaWVkCisg ICBvbiB0aGUgY29tbWFuZCBsaW5lLCBhcyBleHBsYWluZWQgaW4gdGhlIEMtS2VybWl0IFsxNzld RlRQIGNsaWVudAorICAgZG9jdW1lbnRhdGlvbi4KKworICAgQW5kIHNpbWlsYXJseSBmb3IgSFRU UDoKKworICBsbiAtcyAvdXNyL2xvY2FsL2Jpbi9rZXJtaXQgaHR0cAorICAuL2h0dHAgLWgKKyAg Li9odHRwIHd3dy5jb2x1bWJpYS5lZHUgLWcga2VybWl0L2luZGV4Lmh0bWwKKworICAgRmluYWxs eSwgaWYgS2VybWl0J3MgZmlyc3QgY29tbWFuZC1saW5lIG9wdGlvbiBpcyBhIFRlbG5ldCwgRlRQ LCBJS1NELAorICAgb3IgSFRUUCBVUkwsIEtlcm1pdCBhdXRvbWF0aWNhbGx5IG1ha2VzIHRoZSBh cHByb3ByaWF0ZSBraW5kIG9mCisgICBjb25uZWN0aW9uIGFuZCwgaWYgaW5kaWNhdGVkIGJ5IHRo ZSBVUkwsIHRha2VzIHRoZSBkZXNpcmVkIGFjdGlvbjoKKworICBrZXJtaXQgdGVsbmV0Onh5emNv cnAuY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgT3BlbnMgYSBUZWxuZXQgc2Vzc2lv bgorICBrZXJtaXQgdGVsbmV0Oi8vb2xnYUB4eXpjb3JwLmNvbSAgICAgICAgICAgICAgICAgICAg IDsgRGl0dG8gZm9yIHVzZXIgb2xnYQorICBrZXJtaXQgZnRwOi8vb2xnYUB4eXpjb3JwLmNvbS9w dWJsaWMvb29mYS56aXAgICAgICAgIDsgRG93bmxvYWRzIGEgZmlsZQorICBrZXJtaXQga2VybWl0 Oi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvZi9SRUFELk1FIDsgRGl0dG8gZm9yIElLU0QK KyAga2VybWl0IGlrc2Q6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2tlcm1pdC9mL1JFQUQuTUUgICA7 IChUaGlzIHdvcmtzIHRvbykKKyAga2VybWl0IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9pbmRleC5odG1sICAgICA7IEdyYWJzIGEgd2ViIHBhZ2UKKyAga2VybWl0IGh0dHBzOi8vd3d3 cy54eXpjb3JwLmNvbS9zZWNyZXQvcGxhbi5odG1sICAgICA7IEdyYWJzIGEgc2VjdXJlIHdlYiBw YWdlCisKKyAgIFsxODBdS2VybWl0IEhvbWUgWzE4MV1DLUtlcm1pdCBIb21lIFsxODJdQy1LZXJt aXQgRkFRCisKK0xJQ0VOU0UKKworICAgWzE4M11Ub3AgWzE4NF1Db250ZW50cyBbMTg1XU5leHQg WzE4Nl1QcmV2aW91cworCisgICBPbiBvciBiZWZvcmUgMzAgSnVuZSAyMDExLCBiYXJyaW5nIHVu Zm9yZXNlZW4gY2lyY3Vtc3RhbmNlcywKKyAgIFsxODddQy1LZXJtaXQgOS4wIHdpbGwgYmUgcmVs ZWFzZWQgd2l0aCB0aGUgWzE4OF1SZXZpc2VkIDMtQ2xhdXNlIEJTRAorICAgTGljZW5zZS4gVGhp cyBpcyBhIGNlcnRpZmllZCBbMTg5XU9wZW4gU291cmNlIGxpY2Vuc2UsIGFuZCBpdCBtZWFucwor ICAgdGhhdCBDLUtlcm1pdCBubyBsb25nZXIgbmVlZHMgdG8gYmUgbGljZW5zZWQgZm9yIGNvbW1l cmNpYWwKKyAgIHJlZGlzdHJpYnV0aW9uLiBUZWNobmljYWwgc3VwcG9ydCBmb3IgS2VybWl0IHNv ZnR3YXJlIHdpbGwgbm90IGJlCisgICBhdmFpbGFibGUgZnJvbSBDb2x1bWJpYSBVbml2ZXJzaXR5 IGFmdGVyIEp1bmUgMzB0aC4KKworICAgWzE5MF1LZXJtaXQgSG9tZSBbMTkxXUMtS2VybWl0IEhv bWUgWzE5Ml1DLUtlcm1pdCBGQVEKKworT1RIRVIgVE9QSUNTCisKKyAgIFsxOTNdVG9wIFsxOTRd Q29udGVudHMgWzE5NV1OZXh0IFsxOTZdUHJldmlvdXMKKworICAgVGhlcmUncyB3YXkgbW9yZSB0 byBDLUtlcm1pdCB0aGFuIHdlJ3ZlIHRvdWNoZWQgb24gaGVyZSAtLQorICAgdHJvdWJsZXNob290 aW5nLCBjdXN0b21pemF0aW9uLCBjaGFyYWN0ZXIgc2V0cywgZGlhbGluZyBkaXJlY3RvcmllcywK KyAgIHNlbmRpbmcgcGFnZXMsIHNjcmlwdCB3cml0aW5nLCBhbmQgb24gYW5kIG9uLCBhbGwgb2Yg d2hpY2ggYXJlIGNvdmVyZWQKKyAgIGluIHRoZSBtYW51YWwgYW5kIHVwZGF0ZXMgYW5kIHN1cHBs ZW1lbnRzLiBGb3IgdGhlIG1vc3QgdXAtdG8tZGF0ZQorICAgaW5mb3JtYXRpb24gb24gZG9jdW1l bnRhdGlvbiAob3IgdXBkYXRlZCBkb2N1bWVudGF0aW9uIGl0c2VsZikgdmlzaXQKKyAgIHRoZSBL ZXJtaXQgUHJvamVjdCB3ZWJzaXRlOgorCisgIFsxOTddaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0LworCisgICBUaGVyZSB5b3Ugd2lsbCBhbHNvIGZpbmQgWzE5OF1LZXJtaXQgc29mdHdh cmUgcGFja2FnZXMgZm9yIG90aGVyCisgICBwbGF0Zm9ybXM6IGRpZmZlcmVudCBVbml4IHZhcmll dGllcywgV2luZG93cywgRE9TLCBWTVMsIElCTSBtYWluZnJhbWVzLAorICAgYW5kIG1hbnkgb3Ro ZXJzOiAyMCsgeWVhcnMnIHdvcnRoLgorCisgICBbMTk5XUtlcm1pdCBIb21lIFsyMDBdQy1LZXJt aXQgSG9tZSBbMjAxXUMtS2VybWl0IEZBUQorCitET0NVTUVOVEFUSU9OIEFORCBVUERBVEVTCisK KyAgIFsyMDJdVG9wIFsyMDNdQ29udGVudHMgWzIwNF1OZXh0IFsyMDVdUHJldmlvdXMKKworICAg VGhlIG1hbnVhbCBmb3IgQy1LZXJtaXQgaXM6CisKKyAgICAxLiBGcmFuayBkYSBDcnV6IGFuZCBD aHJpc3RpbmUgTS4gR2lhbm9uZSwgWzIwNl1Vc2luZyBDLUtlcm1pdCwgU2Vjb25kCisgICAgICAg RWRpdGlvbiwgRGlnaXRhbCBQcmVzcyAvIEJ1dHRlcndvcnRoLUhlaW5lbWFubiwgV29idXJuLCBN QSwgMTk5NywKKyAgICAgICA2MjIgcGFnZXMsIElTQk4gMS01NTU1OC0xNjQtMS4gVGhpcyBpcyBh IHByaW50ZWQgYm9vaywgbm93IGFsc28KKyAgICAgICBhdmFpbGFibGUgYXMgYSBbMjA3XUtpbmRs ZSBFLUJvb2suIEl0IGNvdmVycyBDLUtlcm1pdCA2LjAuCisgICAgMi4gVGhlIEMtS2VybWl0IDcu MCBTdXBwbGVtZW50OgorICAgICAgIFsyMDhdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrZXJtaXQ3MC5odG1sCisgICAgMy4gVGhlIEMtS2VybWl0IDguMCBTdXBwbGVtZW50OgorICAg ICAgIFsyMDldaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisg ICAgNC4gVGhlIEMtS2VybWl0IDkuMCBTdXBwbGVtZW50OgorICAgICAgIFsyMTBdaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQ5MC5odG1sCisKKyAgIFRoZSBDLUtlcm1pdCBo b21lIHBhZ2UgaXMgaGVyZToKKworICBbMjExXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKKworICAgVmlzaXQgdGhpcyBwYWdlIHRvIGxlYXJuIGFib3V0IG5ldyB2 ZXJzaW9ucywgQmV0YSB0ZXN0cywgYW5kIG90aGVyCisgICBuZXdzOyB0byByZWFkIGNhc2Ugc3R1 ZGllcyBhbmQgdHV0b3JpYWxzOyB0byBkb3dubG9hZCBzb3VyY2UgY29kZSwKKyAgIGluc3RhbGwg cGFja2FnZXMsIGFuZCBbMjEyXXByZWJ1aWx0IGJpbmFyaWVzIGZvciBtYW55IHBsYXRmb3Jtcy4g QWxzbworICAgdmlzaXQ6CisKKyAgIFsyMTNdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L3NjcmlwdGxpYi5odG1sCisgICAgICAgICAgVGhlIEtlcm1pdCBzY3JpcHQgbGlicmFyeSBhbmQg dHV0b3JpYWwKKworICAgWzIxNF1odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvbmV3ZmFx Lmh0bWwKKyAgICAgICAgICBUaGUgS2VybWl0IEZBUSAoRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlv bnMgYWJvdXQgS2VybWl0KQorCisgICBbMjE1XWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2ZhcS5odG1sCisgICAgICAgICAgVGhlIEMtS2VybWl0IEZBUSAoRnJlcXVlbnRseSBBc2tl ZCBRdWVzdGlvbnMgYWJvdXQgQy1LZXJtaXQpCisKKyAgIFsyMTZdaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKKyAgICAgICAgICBUaGUgS2VybWl0IHNlY3VyaXR5 IHJlZmVyZW5jZS4KKworICAgWzIxN11odHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvdGVs bmV0Lmh0bWwKKyAgICAgICAgICBDLUtlcm1pdCBUZWxuZXQgY2xpZW50IGRvY3VtZW50YXRpb24u CisKKyAgIFsyMThdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N0dWRpZXMuaHRtbAor ICAgICAgICAgIENhc2Ugc3R1ZGllcy4KKworICAgWzIxOV1odHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tjYndyLmh0bWwKKyAgICAgICAgICBHZW5lcmFsIEMtS2VybWl0IEhpbnRzIGFu ZCBUaXBzLgorCisgICBbMjIwXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3Vid3Iu aHRtbAorICAgICAgICAgIFVuaXggQy1LZXJtaXQgSGludHMgYW5kIFRpcHMuCisKKyAgIFsyMjFd aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdmJ3ci5odG1sCisgICAgICAgICAgVk1T IEMtS2VybWl0IEhpbnRzIGFuZCBUaXBzLgorCisgICBbMjIyXWh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3VpbnMuaHRtbAorICAgICAgICAgIFVuaXggQy1LZXJtaXQgSW5zdGFsbGF0 aW9uIEluc3RydWN0aW9ucworCisgICBbMjIzXWh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3ZpbnMuaHRtbAorICAgICAgICAgIFZNUyBDLUtlcm1pdCBJbnN0YWxsYXRpb24gSW5zdHJ1 Y3Rpb25zCisKKyAgIFsyMjRdaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQu aHRtbAorICAgICAgICAgIFRlY2huaWNhbCBzdXBwb3J0LgorCisgICBbMjI1XWh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9rOTV0dXRvcmlhbC5odG1sCisgICAgICAgICAgS2VybWl0IDk1 IHR1dG9yaWFsICh0aGlzIGRvY3VtZW50KS4KKworICAgWzIyNl1jb21wLnByb3RvY29scy5rZXJt aXQubWlzYworICAgICAgICAgIFRoZSBLZXJtaXQgbmV3c2dyb3VwICh1bm1vZGVyYXRlZCkuCisK KyAgIFsyMjddS2VybWl0IEhvbWUgWzIyOF1DLUtlcm1pdCBIb21lIFsyMjldQy1LZXJtaXQgRkFR CisKK0ZJTEVTCisKKyAgIFsyMzBdVG9wIFsyMzFdQ29udGVudHMgWzIzMl1OZXh0IFsyMzNdUHJl dmlvdXMKKworICAgICAgICAgIFsyMzRdVGhlIFJldmlzZWQgMy1DbGF1c2UgTGljZW5zZQorICAg ICAgICAgIEMtS2VybWl0IGxpY2Vuc2UuCisKKyAgIFsyMzVdfi8ua2VybXJjCisgICAgICAgICAg SW5pdGlhbGl6YXRpb24gZmlsZS4KKworICAgWzIzNl1+Ly5teWtlcm1yYworICAgICAgICAgIEN1 c3RvbWl6YXRpb24gZmlsZS4KKworICAgfi8ua2RkCisgICAgICAgICAgS2VybWl0IGRpYWxpbmcg ZGlyZWN0b3J5IChzZWUgbWFudWFsKS4KKworICAgfi8ua25kCisgICAgICAgICAgS2VybWl0IG5l dHdvcmsgZGlyZWN0b3J5IChzZWUgbWFudWFsKS4KKworICAgfi8ua3NkCisgICAgICAgICAgS2Vy bWl0IHNlcnZpY2VzIGRpcmVjdG9yeSAoc2VlIG1hbnVhbCkuCisKKyAgIFsyMzddY2t1aW5zLmh0 bWwKKyAgICAgICAgICBJbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBVbml4LgorCisgICBb MjM4XWNrY2J3ci5odG1sCisgICAgICAgICAgR2VuZXJhbCBDLUtlcm1pdCBidWdzLCBoaW50cywg dGlwcy4KKworICAgWzIzOV1ja3Vid3IuaHRtbAorICAgICAgICAgIFVuaXgtc3BlY2lmaWMgQy1L ZXJtaXQgYnVncywgaGludHMsIHRpcHMuCisKKyAgIFsyNDBdY2tjcGxtLmh0bWwKKyAgICAgICAg ICBDLUtlcm1pdCBwcm9ncmFtIGxvZ2ljIG1hbnVhbC4KKworICAgWzI0MV1ja2NjZmcuaHRtbAor ICAgICAgICAgIEMtS2VybWl0IGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisK KyAgIHNzaAorICAgICAgICAgIChpbiB5b3VyIFBBVEgpIFNTSCBjb25uZWN0aW9uIGhlbHBlci4K KworICAgcnosIHN6LCBldGMuCisgICAgICAgICAgKGluIHlvdXIgUEFUSCkgZXh0ZXJuYWwgcHJv dG9jb2xzIGZvciBYWVptb2RlbS4KKworICAgL3Zhci9zcG9vbC9sb2NrcyAob3Igd2hhdGV2ZXIp CisgICAgICAgICAgVVVDUCBsb2NrZmlsZSBmb3IgZGlhbGluZyBvdXQgKHNlZSBbMjQyXWluc3Rh bGxhdGlvbgorICAgICAgICAgIGluc3RydWN0aW9ucykuCisKKyAgIFsyNDNdS2VybWl0IEhvbWUg WzI0NF1DLUtlcm1pdCBIb21lIFsyNDVdQy1LZXJtaXQgRkFRCisKK0FVVEhPUlMKKworICAgWzI0 Nl1Ub3AgWzI0N11Db250ZW50cyBbMjQ4XVByZXZpb3VzCisKKyAgICAgRnJhbmsgZGEgQ3J1eiBh bmQgSmVmZnJleSBFIEFsdG1hbgorICAgICBUaGUgS2VybWl0IFByb2plY3QgLSBDb2x1bWJpYSBV bml2ZXJpdHkKKyAgICAgNjEyIFdlc3QgMTE1dGggU3RyZWV0CisgICAgIE5ldyBZb3JrIE5ZIDEw MDI1LTc3OTkKKyAgICAgVVNBCisKKyAgIDE5ODUtcHJlc2VudCwgd2l0aCBjb250cmlidXRpb25z IGZyb20gaHVuZHJlZHMgb2Ygb3RoZXJzIGFsbCBvdmVyIHRoZQorICAgd29ybGQuCisgICAgIF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXworCisKKyAgICBDLUtlcm1pdCA5LjAgVW5peCBNYW51YWwgUGFnZSBhbmQgVHV0b3Jp YWwgLyBbMjQ5XWtlcm1pdEBjb2x1bWJpYS5lZHUKKyAgICAvIDEgSnVseSAyMDExCisKK1JlZmVy ZW5jZXMKKworICAgMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvCisgICAyLiBtYWlsdG86a2Vy bWl0QGNvbHVtYmlhLmVkdQorICAgMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2lu ZGV4Lmh0bWwKKyAgIDQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAor ICAgNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICAgNi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCisgICA3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3VycmVudC5odG1sCisgICA4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvd2hhdHNuZXcuaHRtbAorICAgOS4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKKyAgMTAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9zdXBwb3J0Lmh0bWwKKyAgMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC8KKyAgMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1LworICAxMy4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLnBkZgorICAxNC4gZnRwOi8va2VybWl0LmNvbHVtYmlh LmVkdS9rZXJtaXQvdGVzdC90ZXh0L2NrdWtlci5ucgorICAxNS4gaHR0cDovL3d3dy5hbWF6b24u Y29tL2dwL3Byb2R1Y3QvMTU1NTU4MTY0MT9pZT1VVEY4JnRhZz1hbGVpZG1vcmVsZG9tLTIwJmxp bmtDb2RlPWFzMiZjYW1wPTE3ODkmY3JlYXRpdmU9OTMyNSZjcmVhdGl2ZUFTSU49MTU1NTU4MTY0 MQorICAxNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZGVz Y3JpcHRpb24KKyAgMTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI3N5bm9wc2lzCisgIDE4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCNvcHRpb25zCisgIDE5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 dHV0b3IuaHRtbCNjb21tYW5kcworICAyMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjaW5pdGZpbGUKKyAgMjEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI21vZGVzCisgIDIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNjb25uZWN0aW9ucworICAyMy4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdHJhbnNmZXIKKyAgMjQuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3NlcnZlcgorICAyNS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZnRwCisgIDI2LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpa3NkCisgIDI3LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNzZWN1cml0eQorICAyOC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjcGVyc29uYWUKKyAgMjkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2xpY2Vuc2UKKyAgMzAuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI290aGVyCisgIDMxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9u CisgIDMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmaWxl cworICAzMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjYXV0 aG9ycworICAzNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwj dG9wCisgIDM1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNj b250ZW50cworICAzNi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjc3lub3BzaXMKKyAgMzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0 Lmh0bWwKKyAgMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAgMzkuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1LworICA0MC4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZj MjgzOS50eHQKKyAgNDEuIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzI4NDAudHh0Cisg IDQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVu dGF0aW9uCisgIDQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgIDQ0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgIDQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDQ2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tmYXEuaHRtbAorICA0Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1 dG9yLmh0bWwjdG9wCisgIDQ4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCNjb250ZW50cworICA0OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjb3B0aW9ucworICA1MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjc3lub3BzaXMKKyAgNTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI2tlcmJhbmcKKyAgNTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCisgIDUzLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNrZXJiYW5nCisgIDU0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpbml0ZmlsZQorICA1NS4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaW5pdGZpbGUKKyAgNTYuIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCisgIDU3LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNvcHRpb25zCisgIDU4LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb21tYW5kcworICA1 OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworICA2MC4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorICA2MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L2NrZmFxLmh0bWwKKyAgNjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3V0dXRvci5odG1sI3RvcAorICA2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjY29udGVudHMKKyAgNjQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI2NvbW1hbmRzCisgIDY1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkZXNjcmlwdGlvbgorICA2Ni4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29tbWFuZHMKKyAgNjcuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCisgIDY4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQorICA2OS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaWtzZAorICA3MC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdHJhbnNmZXIKKyAgNzEu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAorICA3Mi4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKKyAg NzMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2luaXRmaWxl CisgIDc0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNvcHRp b25zCisgIDc1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNr ZXJiYW5nCisgIDc2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCNjbWRsaXN0CisgIDc3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNkb2N1bWVudGF0aW9uCisgIDc4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1dHV0b3IuaHRtbCNpbml0ZmlsZQorICA3OS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRhdGlvbgorICA4MC4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2Nrc2NyaXB0cy5odG1sCisgIDgxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9uCisgIDgyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvCisgIDgzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2tlcm1pdC5odG1sCisgIDg0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEu aHRtbAorICA4NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwj dG9wCisgIDg2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNj b250ZW50cworICA4Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjbW9kZXMKKyAgODguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI2NvbW1hbmRzCisgIDg5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgIDkw LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDkxLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAorICA5Mi4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCisgIDkzLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cworICA5NC4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29ubmVjdGlvbnMKKyAgOTUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2luaXRmaWxlCisgIDk2 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbCN0ZXJtCisgIDk3LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgIDk4LiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgIDk5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2tmYXEuaHRtbAorIDEwMC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr dXR1dG9yLmh0bWwjdG9wCisgMTAxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 dHV0b3IuaHRtbCNjb250ZW50cworIDEwMi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdXR1dG9yLmh0bWwjdHJhbnNmZXIKKyAxMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI21vZGVzCisgMTA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNpa3NkCisgMTA1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2FibGUuaHRtbAorIDEwNi4gZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjIx Ny50eHQKKyAxMDcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9jYWJsZS5odG1sCisg MTA4LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmdHAKKyAx MDkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAxMTAuIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja2ZhcS5odG1sCisgMTEyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2t1dHV0b3IuaHRtbCN0b3AKKyAxMTMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja3V0dXRvci5odG1sI2NvbnRlbnRzCisgMTE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1dHV0b3IuaHRtbCNzZXJ2ZXIKKyAxMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI2Nvbm5lY3Rpb25zCisgMTE2LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb3dubG9hZAorIDExNy4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdXBsb2FkCisgMTE4LiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNvbGRmYXNoaW9uZWQKKyAxMTkuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3Ryb3VibGUKKyAxMjAu IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2FkdmFuY2VkCisg MTIxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNub25rZXJt aXQKKyAxMjIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rZXJtaXQuaHRtbCNub3Rz bG93CisgMTIzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisg MTI0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvazk1Lmh0bWwKKyAxMjUuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9rOTUuaHRtbAorIDEyNi4gaHR0cDovL3d3dy5jb2x1 bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDEyNy4gaHR0cDovL3d3dy5jb2x1bWJpYS5l ZHUva2VybWl0L21za2VybWl0Lmh0bWwKKyAxMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC8KKyAxMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9zdXBwb3J0Lmh0bWwK KyAxMzAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja21hbnVhbC5odG1sCisgMTMx LiBtYWlsdG86a2VybWl0LXN1cHBvcnRAY29sdW1iaWEuZWR1CisgMTMyLiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9uCisgMTMzLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmdHAKKyAxMzQuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKyAxMzUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja2VybWl0Lmh0bWwKKyAxMzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2ZhcS5odG1sCisgMTM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0 b3IuaHRtbCN0b3AKKyAxMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRv ci5odG1sI2NvbnRlbnRzCisgMTM5LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 dHV0b3IuaHRtbCNmdHAKKyAxNDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI3RyYW5zZmVyCisgMTQxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv Y2t1dHV0b3IuaHRtbCNpa3NkCisgMTQyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQv CisgMTQzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTQ0 LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAorIDE0NS4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCisgMTQ2LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cworIDE0Ny4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjaWtzZAorIDE0OC4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdHJhbnNmZXIKKyAxNDku IGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3NlcnZlcgorIDE1 MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Z0cGNsaWVudC5odG1sCisgMTUxLiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNkb2N1bWVudGF0aW9u CisgMTUyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgMTUzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisgMTU0LiBodHRwOi8vd3d3LmNvbHVt YmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAorIDE1NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUv a2VybWl0L2NrZXJtaXQzLmh0bWwjeDMKKyAxNTYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0My5odG1sI3gyLjIKKyAxNTcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja3V0dXRvci5odG1sI3RvcAorIDE1OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKKyAxNTkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1 L2tlcm1pdC9ja3V0dXRvci5odG1sI3NlY3VyaXR5CisgMTYwLiBodHRwOi8vd3d3LmNvbHVtYmlh LmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNmdHAKKyAxNjEuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9jdWlrc2QuaHRtbAorIDE2Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2lrc2QuaHRtbAorIDE2My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworIDE2 NC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDE2NS4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKKyAxNjYuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAorIDE2Ny4gaHR0cDovL3d3dy5j b2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKKyAxNjguIGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3BlcnNvbmFlCisgMTY5LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNpa3NkCisgMTcwLiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAorIDE3MS4gaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0LworIDE3Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrZXJtaXQuaHRtbAorIDE3My4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2Nr ZmFxLmh0bWwKKyAxNzQuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5o dG1sI3RvcAorIDE3NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjY29udGVudHMKKyAxNzYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRv ci5odG1sI2xpY2Vuc2UKKyAxNzcuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI2lrc2QKKyAxNzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0 dXRvci5odG1sI29wdGlvbnMKKyAxNzkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2VybWl0My5odG1sI3gzLjEuMgorIDE4MC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 LworIDE4MS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZXJtaXQuaHRtbAorIDE4 Mi4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrZmFxLmh0bWwKKyAxODMuIGh0dHA6 Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI3RvcAorIDE4NC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjY29udGVudHMKKyAxODUuIGh0 dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI290aGVyCisgMTg2LiBo dHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNwZXJzb25hZQorIDE4 Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrOTAuaHRtbAorIDE4OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2N1LWJzZC1saWNlbnNlLmh0bWwKKyAxODkuIGh0dHA6 Ly93d3cub3BlbnNvdXJjZS5vcmcvCisgMTkwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvCisgMTkxLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tlcm1pdC5odG1sCisg MTkyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tmYXEuaHRtbAorIDE5My4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjdG9wCisgMTk0LiBodHRw Oi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNjb250ZW50cworIDE5NS4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjZG9jdW1lbnRhdGlv bgorIDE5Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0bWwjbGlj ZW5zZQorIDE5Ny4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0LworIDE5OC4gaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2hvd3RvZ2V0Lmh0bWwKKyAxOTkuIGh0dHA6Ly93d3cu Y29sdW1iaWEuZWR1L2tlcm1pdC8KKyAyMDAuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1p dC9ja2VybWl0Lmh0bWwKKyAyMDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Zh cS5odG1sCisgMjAyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCN0b3AKKyAyMDMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1s I2NvbnRlbnRzCisgMjA0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3Iu aHRtbCNmaWxlcworIDIwNS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjb3RoZXIKKyAyMDYuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja21hbnVh bC5odG1sCisgMjA3LiBodHRwOi8vd3d3LmFtYXpvbi5jb20vZ3AvcHJvZHVjdC9CMDAyQUNQRjlN P2llPVVURjgmdGFnPWFsZWlkbW9yZWxkb20tMjAmbGlua0NvZGU9YXMyJmNhbXA9MTc4OSZjcmVh dGl2ZT0zOTA5NTcmY3JlYXRpdmVBU0lOPUIwMDJBQ1BGOU0KKyAyMDguIGh0dHA6Ly93d3cuY29s dW1iaWEuZWR1L2tlcm1pdC9ja2VybWl0NzAuaHRtbAorIDIwOS4gaHR0cDovL3d3dy5jb2x1bWJp YS5lZHUva2VybWl0L2NrZXJtaXQ4MC5odG1sCisgMjEwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVk dS9rZXJtaXQvY2tlcm1pdDkwLmh0bWwKKyAyMTEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tl cm1pdC9ja2VybWl0Lmh0bWwKKyAyMTIuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j azgwYmluYXJpZXMuaHRtbAorIDIxMy4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3Nj cmlwdGxpYi5odG1sCisgMjE0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvbmV3ZmFx Lmh0bWwKKyAyMTUuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1sCisg MjE2LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc2VjdXJpdHkuaHRtbAorIDIxNy4g aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3RlbG5ldC5odG1sCisgMjE4LiBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvc3R1ZGllcy5odG1sCisgMjE5LiBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2tjYndyLmh0bWwKKyAyMjAuIGh0dHA6Ly93d3cuY29sdW1iaWEu ZWR1L2tlcm1pdC9ja3Vid3IuaHRtbAorIDIyMS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2Vy bWl0L2NrdmJ3ci5odG1sCisgMjIyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1 aW5zLmh0bWwKKyAyMjMuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3ZpbnMuaHRt bAorIDIyNC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3N1cHBvcnQuaHRtbAorIDIy NS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2s5NXR1dG9yaWFsLmh0bWwKKyAyMjYu IG5ld3M6Y29tcC5wcm90b2NvbHMua2VybWl0Lm1pc2MKKyAyMjcuIGh0dHA6Ly93d3cuY29sdW1i aWEuZWR1L2tlcm1pdC8KKyAyMjguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2Vy bWl0Lmh0bWwKKyAyMjkuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2ZhcS5odG1s CisgMjMwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCN0b3AK KyAyMzEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja3V0dXRvci5odG1sI2NvbnRl bnRzCisgMjMyLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRtbCNh dXRob3JzCisgMjMzLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCNkb2N1bWVudGF0aW9uCisgMjM0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY3Ut YnNkLWxpY2Vuc2UuaHRtbAorIDIzNS4gZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQv Yy1rZXJtaXQvY2tlcm1pdC5pbmkKKyAyMzYuIGZ0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUva2Vy bWl0L2Mta2VybWl0L2NrZXJtb2QuaW5pCisgMjM3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9r ZXJtaXQvY2t1aW5zLmh0bWwKKyAyMzguIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9j a2Nid3IuaHRtbAorIDIzOS4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5o dG1sCisgMjQwLiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjcGxtLmh0bWwKKyAy NDEuIGh0dHA6Ly93d3cuY29sdW1iaWEuZWR1L2tlcm1pdC9ja2NjZmcuaHRtbAorIDI0Mi4gaHR0 cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWlucy5odG1sCisgMjQzLiBodHRwOi8vd3d3 LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisgMjQ0LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJt aXQvY2tlcm1pdC5odG1sCisgMjQ1LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tm YXEuaHRtbAorIDI0Ni4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9yLmh0 bWwjdG9wCisgMjQ3LiBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1dHV0b3IuaHRt bCNjb250ZW50cworIDI0OC4gaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdXR1dG9y Lmh0bWwjZmlsZXMKKyAyNDkuIG1haWx0bzprZXJtaXRAY29sdW1iaWEuZWR1CgpkaWZmIC0tZ2l0 IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czIuYyBiL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMyLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwZGZlOQotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMyLmMKQEAgLTAsMCArMSwxNDQ5MSBA QAorI2lmZGVmIFNTSFRFU1QKKyNkZWZpbmUgU1NIQlVJTFRJTgorI2VuZGlmIC8qIFNTSFRFU1Qg Ki8KKworLyogIEMgSyBVIFUgUyAyICAtLSAgVXNlciBpbnRlcmZhY2Ugc3RyaW5ncyAmIGhlbHAg dGV4dCBtb2R1bGUgZm9yIEMtS2VybWl0ICAqLworCisvKgorICBBdXRob3JzOgorICAgIEZyYW5r IGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBD b2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5CisgICAgSmVmZnJleSBFIEFsdG1hbiA8 amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5j LiwgTmV3IFlvcmsgQ2l0eQorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKKyAgICBUcnVz dGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAg IEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUg b3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlz Y2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisKKyAgVGhpcyBtb2R1bGUgY29udGFpbnMgSEVMUCBj b21tYW5kIGFuZCBvdGhlciBsb25nIHRleHQgc3RyaW5ncy4KKworICBJTVBPUlRBTlQ6IENoYXJh Y3RlciBzdHJpbmcgY29uc3RhbnRzIGxvbmdlciB0aGFuIGFib3V0IDI1MCBhcmUgbm90IHBvcnRh YmxlLgorICBMb25nZXIgc3RyaW5ncyBzaG91bGQgYmUgYnJva2VuIHVwIGludG8gYXJyYXlzIG9m IHN0cmluZ3MgYW5kIGFjY2Vzc2VkIHdpdGgKKyAgaG1zZ2EoKSByYXRoZXIgdGhhbiBobXNnKCku ICAoVGhpcyBzdGF0ZW1lbnQgd2FzIHRydWUgaW4gdGhlIDE5ODBzIGFuZAorICBwcm9iYWJseSBp cyBub3QgYSBiaWcgY29uY2VybiBpbiB0aGUgMjFzdCBDZW50dXJ5LCBidXQgeW91IG5ldmVyIGtu b3c7CisgIHRoZXJlIHN0aWxsIG1pZ2h0IGV4aXN0IHNvbWUgMTYtYml0IHBsYXRmb3JtcyBhbmQg QyBjb21waWxlcnMgdGhhdCBoYXZlCisgIHJlc3RyaWN0aW9ucyBsaWtlIHRoaXMuCisqLworI2lu Y2x1ZGUgImNrY3N5bS5oIgorI2luY2x1ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgImNrY25ldC5o IgorI2luY2x1ZGUgImNrY2FzYy5oIgorI2luY2x1ZGUgImNrY2tlci5oIgorI2luY2x1ZGUgImNr dXVzci5oIgorI2luY2x1ZGUgImNrY3hsYS5oIgorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjaW5j bHVkZSA8d2luZG93cy5oPgorI2Vsc2UgLyogbm90IE5UICovCisjZGVmaW5lIElOQ0xfS0JECisj aWZkZWYgT1MyTU9VU0UKKyNkZWZpbmUgSU5DTF9NT1UKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLwor I2RlZmluZSBJTkNMX0RPU01JU0MKKyNkZWZpbmUgSU5DTF9ET1NERVZJQ0VTCisjaW5jbHVkZSA8 b3MyLmg+ICAgICAgICAgICAgICAgIC8qIFRoaXMgcHVsbHMgaW4gYSB3aG9sZSBsb2FkIG9mIHN0 dWZmICovCisjdW5kZWYgQ09NTUVOVAorI2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAiY2tvY29u LmgiCisjaW5jbHVkZSAiY2tva3ZiLmgiCisjaW5jbHVkZSAiY2tva2V5LmgiCisjZW5kaWYgLyog T1MyICovCisKK2V4dGVybiBjaGFyICogY2tfY3J5ZWFyOwkJLyogRm9yIGNvcHlyaWdodCBub3Rp Y2UgKi8KKworZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7CitleHRlcm4gY2hhciAqIGNjbnRhYltd OworLyoKKyAgaGxwdG9rIGNvbnRhaW5zIHRoZSBzdHJpbmcgZm9yIHdoaWNoIHRoZSB1c2VyIHJl cXVlc3RlZCBoZWxwLiAgVGhpcyBpcworICB1c2VmdWwgZm9yIGRpc3Rpbmd1aXNoaW5nIHN5bm9u eW1zLCBpbiBjYXNlIGRpZmZlcmVudCBoZWxwIHRleHQgaXMgbmVlZGVkCisgIGRlcGVuZGluZyBv biB3aGljaCBzeW5vbnltIHdhcyBnaXZlbi4KKyovCitleHRlcm4gY2hhciAqIGhscHRvazsKKwor I2lmbmRlZiBOT0lLU0QKKyAgICBleHRlcm4gaW50IGluc2VydmVyOworI2VuZGlmIC8qIElLU0Qg Ki8KKworI2lmbmRlZiBOT0lDUAorZXh0ZXJuIGludCBjbWZsZ3M7CisKKyNpZmRlZiBEQ01EQlVG CitleHRlcm4gY2hhciAqY21kYnVmLCAqYXRtYnVmOworI2Vsc2UKK2V4dGVybiBjaGFyIGNtZGJ1 ZltdLCBhdG1idWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisjZW5kaWYgLyogTk9JQ1AgKi8K KworZXh0ZXJuIGNoYXIgKnhhcmcwOworZXh0ZXJuIGludCBucm10LCBucHJtLCBkZmxvYywgbG9j YWwsIHBhcml0eSwgZXNjYXBlOworZXh0ZXJuIGludCB0dXJuLCBmbG93OworZXh0ZXJuIGludCBi aW5hcnksIHF1aWV0LCBrZWVwOworZXh0ZXJuIGludCBzdWNjZXNzLCB4YXNrbW9yZTsKKyNpZmRl ZiBPUzIKK2V4dGVybiBpbnQgdHRfcm93c1tdLCB0dF9jb2xzW107CisjZWxzZSAvKiBPUzIgKi8K K2V4dGVybiBpbnQgdHRfcm93cywgdHRfY29sczsKKyNlbmRpZiAvKiBPUzIgKi8KK2V4dGVybiBp bnQgY21kX3Jvd3MsIGNtZF9jb2xzOworCitleHRlcm4gbG9uZyBzcGVlZDsKK2V4dGVybiBjaGFy ICpkZnR0eSwgKnZlcnNpbywgKmNreHN5czsKKyNpZm5kZWYgTk9IRUxQCitleHRlcm4gY2hhciAq aGVscGZpbGU7CisjZW5kaWYgLyogTk9IRUxQICovCitleHRlcm4gc3RydWN0IGtleXRhYiBwcm10 YWJbXTsKKyNpZm5kZWYgTk9YRkVSCitleHRlcm4gc3RydWN0IGtleXRhYiByZW1jbWRbXTsKKyNl bmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0lDUAorCisvKiAgSW50ZXJhY3RpdmUgaGVs cCBzdHJpbmdzICAqLworCisvKiBUb3AtbGV2ZWwgSEVMUCB0ZXh0LiAgSU1QT1JUQU5UOiBBbHNv IHNlZSB0b3BobHBpW10gZm9yIElLU0QuICovCisKK3N0YXRpYyBjaGFyICp0b3BobHBbXSA9IHsK KyJUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3Jr LlxuIiwKKworI2lmbmRlZiBOT0hFTFAKKyIgIFR5cGUgRVhJVCAgICB0byBleGl0LiIsCisjaWZk ZWYgT1MyCisiICBUeXBlIElOVFJPICAgZm9yIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIHRoZSBL ZXJtaXQgQ29tbWFuZCBzY3JlZW4uIiwKKyIgIFR5cGUgTElDRU5TRSB0byBzZWUgdGhlIEtlcm1p dCA5NSBsaWNlbnNlLiIsCisjZWxzZQorIiAgVHlwZSBJTlRSTyAgIGZvciBhIGJyaWVmIGludHJv ZHVjdGlvbiB0byBDLUtlcm1pdC4iLAorIiAgVHlwZSBMSUNFTlNFIHRvIHNlZSB0aGUgQy1LZXJt aXQgbGljZW5zZS4iLAorI2VuZGlmIC8qIE9TMiAqLworIiAgVHlwZSBIRUxQICAgIGZvbGxvd2Vk IGJ5IGEgY29tbWFuZCBuYW1lIGZvciBoZWxwIGFib3V0IGEgc3BlY2lmaWMgY29tbWFuZC4iLAor I2lmbmRlZiBOT1BVU0gKKyNpZmRlZiBVTklYCisiICBUeXBlIE1BTlVBTCAgdG8gYWNjZXNzIHRo ZSBDLUtlcm1pdCBtYW51YWwgcGFnZS4iLAorI2Vsc2UKKyNpZmRlZiBWTVMKKyIgIFR5cGUgTUFO VUFMICB0byBhY2Nlc3MgdGhlIEMtS2VybWl0IGhlbHAgdG9waWMuIiwKKyNlbHNlCisjaWZkZWYg T1MyCisiICBUeXBlIE1BTlVBTCAgdG8gYWNjZXNzIHRoZSBLOTUgbWFudWFsLiIsCisjZWxzZQor IiAgVHlwZSBNQU5VQUwgIHRvIGFjY2VzcyB0aGUgQy1LZXJtaXQgbWFudWFsLiIsCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8q IE5PUFVTSCAqLworIiAgVHlwZSBORVdTICAgIGZvciBuZXdzIGFib3V0IG5ldyBmZWF0dXJlcy4i LAorIiAgVHlwZSBTVVBQT1JUIHRvIGxlYXJuIGhvdyB0byBnZXQgdGVjaG5pY2FsIHN1cHBvcnQu IiwKKyIgIFByZXNzID8gICAgICAocXVlc3Rpb24gbWFyaykgYXQgdGhlIHByb21wdCwgb3IgYW55 d2hlcmUgd2l0aGluIGEgY29tbWFuZCwiLAorIiAgICAgICAgICAgICAgIGZvciBhIG1lbnUgKGNv bnRleHQtc2Vuc2l0aXZlIGhlbHAsIG1lbnUgb24gZGVtYW5kKS4iLAorI2Vsc2UKKyJQcmVzcyA/ IGZvciBhIGxpc3Qgb2YgY29tbWFuZHM7IHNlZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxlZCBk ZXNjcmlwdGlvbnMuIiwKKyNlbmRpZiAvKiBOT0hFTFAgKi8KKworI2lmbmRlZiBOT0NNREwKKyNp Zm5kZWYgTk9IRUxQCisiICIsCisiICBUeXBlIEhFTFAgT1BUSU9OUyBmb3IgaGVscCB3aXRoIGNv bW1hbmQtbGluZSBvcHRpb25zLiIsCisjZW5kaWYgLyogTk9IRUxQICovCisjZW5kaWYgLyogTk9D TURMICovCisiICIsCisjaWZuZGVmIE9TMgorI2lmZGVmIE1BQworIkRvY3VtZW50YXRpb24gZm9y IENvbW1hbmQgV2luZG93OiBcIlVzaW5nIEMtS2VybWl0XCIgYnkgRnJhbmsgZGEgQ3J1eiBhbmQi LAorIkNocmlzdGluZSBNLiBHaWFub25lLCBEaWdpdGFsIFByZXNzLCAxOTk3LCBJU0JOOiAxLTU1 NTU4LTE2NC0xIiwKKyNlbHNlCisiRE9DVU1FTlRBVElPTjogXCJVc2luZyBDLUtlcm1pdFwiIGJ5 IEZyYW5rIGRhIENydXogYW5kIENocmlzdGluZSBNLiBHaWFub25lLCIsCisiMm5kIEVkaXRpb24s IERpZ2l0YWwgUHJlc3MgLyBCdXR0ZXJ3b3J0aC1IZWluZW1hbm4gMTk5NywgSVNCTiAxLTU1NTU4 LTE2NC0xLCIsCisicGx1cyBzdXBwbGVtZW50cyBhdCBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9ja2VybWl0Lmh0bWwjZG9jLiIsCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogT1MyICov CisjaWZkZWYgTUFDCisiICIsCisiQWxzbyBzZWUgdGhlIE1hYyBLZXJtaXQgRG9jIGFuZCBCd3Ig ZmlsZXMgb24gdGhlIE1hYyBLZXJtaXQgZGlza2V0dGUuXG4iLAorI2Vsc2UKKyNpZmRlZiBIUFVY MTAKKyIgIiwKKyJTZWUgdGhlIGZpbGVzIGluIC91c3Ivc2hhcmUvbGliL2tlcm1pdC8gZm9yIGFk ZGl0aW9uYWwgaW5mb3JtYXRpb24uIiwKKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAvKiBN QUMgKi8KKyIiCit9OworCisjaWZuZGVmIE5PSUtTRAorc3RhdGljIGNoYXIgKnRvcGhscGlbXSA9 IHsgICAgICAgICAgICAgIC8qIFRvcC1sZXZlbCBoZWxwIGZvciBJS1NEICovCisKKyJUcnVzdGVl cyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLlxuIiwKKwor I2lmbmRlZiBOT0hFTFAKKyIgIFR5cGUgSU5UUk8gICBmb3IgYSBicmllZiBpbnRyb2R1Y3Rpb24g dG8gS2VybWl0IGNvbW1hbmRzLiIsCisiICBUeXBlIFZFUlNJT04gZm9yIHZlcnNpb24gYW5kIGNv cHlyaWdodCBpbmZvcm1hdGlvbi4iLAorIiAgVHlwZSBIRUxQICAgIGZvbGxvd2VkIGJ5IGEgY29t bWFuZCBuYW1lIGZvciBoZWxwIGFib3V0IGEgc3BlY2lmaWMgY29tbWFuZC4iLAorIiAgVHlwZSBT VVBQT1JUIHRvIGxlYXJuIGhvdyB0byBnZXQgdGVjaG5pY2FsIHN1cHBvcnQuIiwKKyIgIFR5cGUg TE9HT1VUICAob3IgRVhJVCkgdG8gbG9nIG91dC4iLAorIiAgUHJlc3MgPyAgICAgIChxdWVzdGlv biBtYXJrKSBhdCB0aGUgcHJvbXB0LCBvciBhbnl3aGVyZSB3aXRoaW4gYSBjb21tYW5kLCIsCisi ICAgICAgICAgICAgICAgZm9yIGEgbWVudSAoY29udGV4dC1zZW5zaXRpdmUgaGVscCwgbWVudSBv biBkZW1hbmQpLiIsCisjZWxzZQorIlByZXNzID8gZm9yIGEgbGlzdCBvZiBjb21tYW5kczsgc2Vl IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9ucy4iLAorI2VuZGlmIC8qIE5P SEVMUCAqLworIiAiLAorIkRPQ1VNRU5UQVRJT046IFwiVXNpbmcgQy1LZXJtaXRcIiBieSBGcmFu ayBkYSBDcnV6IGFuZCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwiLAorIjJuZCBFZGl0aW9uLCBEaWdp dGFsIFByZXNzICgxOTk3KSwgSVNCTiAxLTU1NTU4LTE2NC0xLiAgTW9yZSBpbmZvIGF0IHRoZSIs CisiS2VybWl0IFByb2plY3Qgd2Vic2l0ZSwgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvLiIs CisiIgorfTsKKyNlbmRpZiAvKiBOT0lLU0QgKi8KKworI2lmbmRlZiBOT0hFTFAKK2NoYXIgKm5l d3N0eHRbXSA9IHsKKyNpZmRlZiBPUzIKKyJXZWxjb21lIHRvIEtlcm1pdCA5NSAzLngueC4gIE1h am9yIG5ldyBmZWF0dXJlcyBzaW5jZSAyLjEuMyBpbmNsdWRlOiIsCisjZWxzZQorIldlbGNvbWUg dG8gQy1LZXJtaXQgOS4wLjMwMC4gIE5ldyBmZWF0dXJlcyBzaW5jZSA4LjAuMjExIGluY2x1ZGU6 IiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgLiBPcGVuIFNvdXJjZSBTaW1wbGlmaWVkIDMtQ2xhdXNl IEJTRCBMaWNlbnNlIiwKKyIgLiBGdWxsIDY0LWJpdCBtZW1vcnkgbW9kZWwgb24gcGxhdGZvcm1z IHRoYXQgc3VwcG9ydCBpdCIsCisiIC4gTGFyZ2UgZmlsZSBzdXBwb3J0ICg2NC1iaXQgZmlsZSBz aXplKSBvbiBtb3N0IHBsYXRmb3JtcyIsCisiIC4gTG9uZyBpbnRlZ2VyIHZhcmlhYmxlcyBhbmQg Y29uc3RhbnRzIGluIGNvbW1hbmRzIGFuZCBzY3JpcHRzIiwKKyIgLiBCaWdnZXIgbWF4aW11bSBj b21tYW5kIGFuZCBtYWNybyBsZW5ndGhzIiwKKyIgLiBCaWdnZXIgZmlsZW5hbWUgZXhwYW5zaW9u IHNwYWNlIiwKKyIgLiBOZXcgc3VwZXItZmxleGlibGUgUkVOQU1FIGNvbW1hbmQiLAorIiAuIE5l dyBDT1BZIGFuZCBESVJFQ1RPUlkgY29tbWFuZCBvcHRpb25zIiwKKyIgLiBOZXcgVE9VQ0ggY29t bWFuZCIsCisiIC4gUmF3IFNTTC9UTFMgY29ubmVjdGlvbnMgZm9yIGNvbm5lY3RpbmcgdG8gUE9Q MyBhbmQgc2ltaWxhciBzZXJ2aWNlcyIsCisiIC4gQXQgcHJvbXB0LCBDdHJsLUsgcmVjYWxscyBt b3N0IHJlY2VudCBmaWxlbmFtZSIsCisiIC4gU2NyaXB0aW5nIGFuZCBwZXJmb3JtYW5jZSBpbXBy b3ZlbWVudHMgYW5kIGJ1ZyBmaXhlcyIsCisiICIsCisiRG9jdW1lbnRhdGlvbjoiLAorIiAxLiBo dHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS91c2luZ2NrZXJtaXQuaHRtbCIsCisiICAgIFwiVXNp bmcgQy1LZXJtaXRcIiwgc2Vjb25kIGVkaXRpb24gKDE5OTcpLCBjdXJyZW50IHdpdGggQy1LZXJt aXQgNi4wLiIsCisiICIsCisiIDIuIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2NrZXJtaXQ3 MC5odG1sIiwKKyIgICAgd2hpY2ggZG9jdW1lbnRzIHRoZSBuZXcgZmVhdHVyZXMgb2YgQy1LZXJt aXQgNy4wLiIsCisiICIsCisiIDMuIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2NrZXJtaXQ4 MC5odG1sIiwKKyIgICAgd2hpY2ggZG9jdW1lbnRzIHRoZSBuZXcgZmVhdHVyZXMgb2YgQy1LZXJt aXQgOC4wLiIsCisiICIsCisiIDQuIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2NrZXJtaXQ5 MC5odG1sIiwKKyIgICAgd2hpY2ggZG9jdW1lbnRzIHRoZSBuZXcgZmVhdHVyZXMgb2YgQy1LZXJt aXQgOS4wLiIsCisiICIsCisiSWYgdGhlIHJlbGVhc2UgZGF0ZSBzaG93biBieSB0aGUgVkVSU0lP TiBjb21tYW5kIGlzIGxvbmcgcGFzdCwgYmUgc3VyZSB0byIsCisiY2hlY2sgd2l0aCB0aGUgS2Vy bWl0IHdlYnNpdGUgdG8gc2VlIGlmIHRoZXJlIGhhdmUgYmVlbiB1cGRhdGVzOiIsCisiICIsCisj aWZkZWYgT1MyCisiICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rOTUuaHRtbCAgICAgKEtl cm1pdCA5NSBob21lIHBhZ2UpIiwKKyNlbHNlCisiICBodHRwOi8va2VybWl0LmNvbHVtYmlhLmVk dS9ja2VybWl0Lmh0bWwgKEMtS2VybWl0IGhvbWUgcGFnZSkiLAorI2VuZGlmCS8qIE9TMiAqLwor IiAgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvICAgICAgICAgICAgIChLZXJtaXQgUHJvamVj dCBob21lIHBhZ2UpIiwKKyIiCit9OworI2VuZGlmIC8qIE5PSEVMUCAqLworCisjaWZuZGVmIE5P SEVMUAorY2hhciAqaW50cm90eHRbXSA9IHsKKyNpZmRlZiBPUzIKKyJXZWxjb21lIHRvIEstOTUs IEtlcm1pdCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBmb3I6IiwKKyNlbHNlCisjaWZkZWYgVU5J WAorI2lmZGVmIEhQVVgKKyJXZWxjb21lIHRvIEhQLVVYIEMtS2VybWl0IGNvbW11bmljYXRpb25z IHNvZnR3YXJlIGZvcjoiLAorI2Vsc2UKKyJXZWxjb21lIHRvIFVOSVggQy1LZXJtaXQgY29tbXVu aWNhdGlvbnMgc29mdHdhcmUgZm9yOiIsCisjZW5kaWYgLyogSFBVWCAqLworI2Vsc2UKKyNpZmRl ZiBWTVMKKyJXZWxjb21lIHRvIFZNUyBDLUtlcm1pdCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBm b3I6IiwKKyNlbHNlCisjaWZkZWYgVk9TCisiV2VsY29tZSB0byBWT1MgQy1LZXJtaXQgY29tbXVu aWNhdGlvbnMgc29mdHdhcmUgZm9yOiIsCisjZWxzZQorI2lmZGVmIE1BQworIldlbGNvbWUgdG8g TWFjIEtlcm1pdCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBmb3I6IiwKKyNlbHNlCisiV2VsY29t ZSB0byBDLUtlcm1pdCBjb21tdW5pY2F0aW9ucyBzb2Z0d2FyZSBmb3I6IiwKKyNlbmRpZiAvKiBN QUMgKi8KKyNlbmRpZiAvKiBWT1MgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBVTklY ICovCisjZW5kaWYgLyogT1MyICovCisjaWZuZGVmIE5PWEZFUgorIiAuIEVycm9yLWZyZWUgYW5k IGVmZmljaWVudCBmaWxlIHRyYW5zZmVyIiwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYg Tk9MT0NBTAorI2lmZGVmIE9TMgorIiAuIFZUMzIwLzIyMC8xMDIvMTAwLzUyLCBBTlNJLCBXeXNl LCBMaW51eCwgVGVsZXZpZGVvLCBhbmQgb3RoZXIgZW11bGF0aW9ucyIsCisjZWxzZQorI2lmZGVm IE1BQworIiAuIFZUMjIwIHRlcm1pbmFsIGVtdWxhdGlvbiIsCisjZWxzZQorIiAuIFRlcm1pbmFs IGNvbm5lY3Rpb24iLAorI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlm IC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9TUEwKKyIgLiBTY3JpcHQgcHJvZ3JhbW1pbmciLAor I2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PSUNTCisiIC4gSW50ZXJuYXRpb25hbCBjaGFy YWN0ZXIgc2V0IGNvbnZlcnNpb24iLAorI2VuZGlmIC8qIE5PSUNTICovCisjaWZuZGVmIE5PRElB TAorI2lmbmRlZiBOT1NQTAorIiAuIE51bWVyaWMgYW5kIGFscGhhbnVtZXJpYyBwYWdpbmciLAor I2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZm5kZWYgTk9MT0NB TAorIiAiLAorIlN1cHBvcnRpbmc6IiwKKyIgLiBTZXJpYWwgY29ubmVjdGlvbnMsIGRpcmVjdCBv ciBkaWFsZWQuIiwKKyNpZm5kZWYgTk9ESUFMCisiIC4gQXV0b21hdGljIG1vZGVtIGRpYWxpbmci LAorI2VuZGlmIC8qIE5PRElBTCAqLworI2lmZGVmIFRDUFNPQ0tFVAorIiAuIFRDUC9JUCBuZXR3 b3JrIGNvbm5lY3Rpb25zOiIsCisjaWZkZWYgVE5DT0RFCisiICAgLSBUZWxuZXQgc2Vzc2lvbnMi LAorI2VuZGlmIC8qIFROQ09ERSAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyIgICAtIFNTSCB2MSBh bmQgdjIgY29ubmVjdGlvbnMiLAorI2Vsc2UKKyNpZmRlZiBBTllTU0gKKyIgICAtIFNTSCBjb25u ZWN0aW9ucyB2aWEgZXh0ZXJuYWwgYWdlbnQiLAorI2VuZGlmIC8qIEFOWVNTSCAqLworI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KKyNpZmRlZiBSTE9HQ09ERQorIiAgIC0gUmxvZ2luIHNlc3Npb25z IiwKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIE5FV0ZUUAorIiAgIC0gRlRQIHNlc3Np b25zIiwKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNpZmRlZiBDS0hUVFAKKyIgICAtIEhUVFAgMS4x IHNlc3Npb25zIiwKKyNlbmRpZiAvKiBDS0hUVFAgKi8KKyNpZmRlZiBJS1NECisiICAgLSBJbnRl cm5ldCBLZXJtaXQgU2VydmljZSIsCisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8qIFRDUFNP Q0tFVCAqLworI2lmZGVmIEFOWVgyNQorIiAuIFguMjUgbmV0d29yayBjb25uZWN0aW9ucyIsCisj ZW5kaWYgLyogQU5ZWDI1ICovCisjaWZkZWYgT1MyCisjaWZkZWYgREVDTkVUCisiIC4gREVDbmV0 L1BBVEhXT1JLUyBMQVQgRXRoZXJuZXQgY29ubmVjdGlvbnMiLAorI2VuZGlmIC8qIERFQ05FVCAq LworI2lmZGVmIFNVUEVSTEFUCisiIC4gTWVyaWRpYW4gVGVjaG5vbG9naWVzJyBTdXBlckxBVCBj b25uZWN0aW9ucyIsCisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKyNpZmRlZiBOUElQRQorIiAuIE5h bWVkLXBpcGUgY29ubmVjdGlvbnMiLAorI2VuZGlmIC8qIE5QSVBFICovCisjaWZkZWYgQ0tfTkVU QklPUworIiAuIE5FVEJJT1MgY29ubmVjdGlvbnMiLAorI2VuZGlmIC8qIENLX05FVEJJT1MgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyIgIiwKKyJXaGlsZSB0 eXBpbmcgY29tbWFuZHMsIHlvdSBtYXkgdXNlIHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBjaGFyYWN0 ZXJzOiIsCisiIC4gREVMLCBSVUJPVVQsIEJBQ0tTUEFDRSwgQ1RSTC1IOiBEZWxldGUgdGhlIG1v c3QgcmVjZW50IGNoYXJhY3RlciB0eXBlZC4iLAorIiAuIENUUkwtVzogICAgICBEZWxldGUgdGhl IG1vc3QgcmVjZW50IHdvcmQgdHlwZWQuIiwKKyIgLiBDVFJMLVU6ICAgICAgRGVsZXRlIHRoZSBj dXJyZW50IGxpbmUuIiwKKyIgLiBDVFJMLVI6ICAgICAgUmVkaXNwbGF5IHRoZSBjdXJyZW50IGxp bmUuIiwKKworI2lmZGVmIENLX1JFQ0FMTAorI2lmZGVmIE9TMgorIiAuIFVwYXJyb3c6ICAgICBD b21tYW5kIHJlY2FsbCAtIGdvIGJhY2t3YXJkcyBpbiBjb21tYW5kIHJlY2FsbCBidWZmZXIuIiwK KyIgLiBEb3duYXJyb3c6ICAgQ29tbWFuZCByZWNhbGwgLSBnbyBmb3J3YXJkIGluIGNvbW1hbmQg cmVjYWxsIGJ1ZmZlci4iLAorI2lmbmRlZiBOT0lLU0QKKyIgICAoTm90ZTogQXJyb3cga2V5cyBj YW4gYmUgdXNlZCBvbmx5IG9uIHRoZSBQQydzIHBoeXNpY2FsIGtleWJvYXJkLikiLAorI2VuZGlm IC8qIE5PSUtTRCAqLworI2VuZGlmIC8qIE9TMiAqLworIiAuIENUUkwtUDogICAgICBDb21tYW5k IHJlY2FsbCAtIGdvIGJhY2t3YXJkcyBpbiBjb21tYW5kIHJlY2FsbCBidWZmZXIuIiwKKyIgLiBD VFJMLUI6ICAgICAgQ29tbWFuZCByZWNhbGwgLSBzYW1lIGFzIEN0cmwtUC4iLAorIiAuIENUUkwt TjogICAgICBDb21tYW5kIHJlY2FsbCAtIGdvIGZvcndhcmQgaW4gY29tbWFuZCByZWNhbGwgYnVm ZmVyLiIsCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisjaWZuZGVmIE5PTEFTVEZJTEUKKyIgLiBD VFJMLUs6ICAgICAgSW5zZXJ0IHRoZSBtb3N0IHJlY2VudGx5IGVudGVyZWQgbG9jYWwgZmlsZSBz cGVjaWZpY3Rpb24uIiwKKyNlbmRpZgkvKiBOT0xBU1RGSUxFICovCisKKyIgLiA/ICAgICAgICAg ICAgKHF1ZXN0aW9uIG1hcmspIERpc3BsYXkgYSBtZW51IGZvciB0aGUgY3VycmVudCBjb21tYW5k IGZpZWxkLiIKKywKKyIgLiBFU0MgICAgICAgICAgKG9yIFRBQiBvciBDdHJsLUkpIEF0dGVtcHQg dG8gY29tcGxldGUgdGhlIGN1cnJlbnQgZmllbGQuIiwKKyIgLiBcXCAgICAgICAgICAgIChiYWNr c2xhc2gpIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgbGl0ZXJhbGx5IiwKKyNpZm5k ZWYgTk9TUEwKKyIgICAgICAgICAgICAgICAgb3IgaW50cm9kdWNlIGEgYmFja3NsYXNoIGNvZGUs IHZhcmlhYmxlLCBvciBmdW5jdGlvbi4iLAorI2Vsc2UKKyIgICAgICAgICAgICAgICAgb3IgaW50 cm9kdWNlIGEgbnVtZXJpYyBiYWNrc2xhc2ggY29kZS4iLAorI2VuZGlmIC8qIE5PU1BMICovCisi ICIsCisKKyJJTVBPUlRBTlQ6IFNpbmNlIGJhY2tzbGFzaCAoXFwpIGlzIEtlcm1pdCdzIGNvbW1h bmQtbGluZSBlc2NhcGUgY2hhcmFjdGVyLCIsCisieW91IG11c3QgZW50ZXIgRE9TLCBXaW5kb3dz LCBvciBPUy8yIHBhdGhuYW1lcyB1c2luZyBlaXRoZXIgZm9yd2FyZCBzbGFzaCAoLykiCissCisi b3IgZG91YmxlIGJhY2tzbGFzaCAoXFxcXCkgYXMgdGhlIGRpcmVjdG9yeSBzZXBhcmF0b3IgaW4g bW9zdCBjb250ZXh0cy4iLAorIkV4YW1wbGVzOiBDOi9UTVAvUkVBRE1FLlRYVCwgQzpcXFxcVE1Q XFxcXFJFQURNRS5UWFQuIiwKKyIgIiwKKworIkNvbW1hbmQgd29yZHMgb3RoZXIgdGhhbiBmaWxl bmFtZXMgY2FuIGJlIGFiYnJldmlhdGVkIGluIG1vc3QgY29udGV4dHMuIiwKKyIgIiwKKworIkJh c2ljIGNvbW1hbmRzOiIsCisiICBFWElUICAgICAgICAgIEV4aXQgZnJvbSBLZXJtaXQiLAorIiAg SEVMUCAgICAgICAgICBSZXF1ZXN0IGdlbmVyYWwgaGVscCIsCisiICBIRUxQIGNvbW1hbmQgIFJl cXVlc3QgaGVscCBhYm91dCB0aGUgZ2l2ZW4gY29tbWFuZCIsCisiICBUQUtFICAgICAgICAgIEV4 ZWN1dGUgY29tbWFuZHMgZnJvbSBhIGZpbGUiLAorIiAgVFlQRSAgICAgICAgICBEaXNwbGF5IGEg ZmlsZSBvbiB5b3VyIHNjcmVlbiIsCisiICBPUklFTlRBVElPTiAgIEV4cGxhaW5zIGRpcmVjdG9y eSBzdHJ1Y3R1cmUiLAorIiAiLAorCisjaWZuZGVmIE5PWEZFUgorIkNvbW1hbmRzIGZvciBmaWxl IHRyYW5zZmVyOiIsCisiICBTRU5EICAgICAgICAgIFNlbmQgZmlsZXMiLAorIiAgUkVDRUlWRSAg ICAgICBSZWNlaXZlIGZpbGVzIiwKKyIgIEdFVCAgICAgICAgICAgR2V0IGZpbGVzIGZyb20gYSBL ZXJtaXQgc2VydmVyIiwKKyNpZmRlZiBDS19SRVNFTkQKKyIgIFJFU0VORCAgICAgICAgUmVjb3Zl ciBhbiBpbnRlcnJ1cHRlZCBzZW5kIiwKKyIgIFJFR0VUICAgICAgICAgUmVjb3ZlciBhbiBpbnRl cnJ1cHRlZCBnZXQgZnJvbSBhIHNlcnZlciIsCisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisjaWZu ZGVmIE5PU0VSVkVSCisiICBTRVJWRVIgICAgICAgIEJlIGEgS2VybWl0IHNlcnZlciIsCisjZW5k aWYgLyogTk9TRVJWRVIgKi8KKyIgIiwKKyJGaWxlLXRyYW5zZmVyIHNwZWVkIHNlbGVjdGlvbjoi LAorIiAgRkFTVCAgICAgICAgICBVc2UgZmFzdCBzZXR0aW5ncyAtLSBUSElTIElTIFRIRSBERUZB VUxUIiwKKyIgIENBVVRJT1VTICAgICAgVXNlIHNsb3dlciwgbW9yZSBjYXV0aW91cyBzZXR0aW5n cyIsCisiICBST0JVU1QgICAgICAgIFVzZSBleHRyZW1lbHkgc2xvdyBhbmQgY2F1dGlvdXMgc2V0 dGluZ3MiLAorIiAiLAorIkZpbGUtdHJhbnNmZXIgcGVyZm9ybWFuY2UgZmluZSB0dW5pbmc6IiwK KyIgIFNFVCBSRUNFSVZFIFBBQ0tFVC1MRU5HVEggIEtlcm1pdCBwYWNrZXQgc2l6ZSIsCisiICBT RVQgV0lORE9XICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc2xpZGluZyB3aW5kb3cgc2xvdHMi LAorIiAgU0VUIFBSRUZJWElORyAgICAgICAgICAgICAgQW1vdW50IG9mIGNvbnRyb2wtY2hhcmFj dGVyIHByZWZpeGluZyIsCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9MT0NBTAor IiAiLAorIlRvIG1ha2UgYSBkaXJlY3Qgc2VyaWFsIGNvbm5lY3Rpb246IiwKKyNpZmRlZiBPUzIK KyNpZmRlZiBOVAorI2lmZGVmIENLX1RBUEkKKyIgIFNFVCBQT1JUIFRBUEkgU2VsZWN0IFRBUEkg Y29tbXVuaWNhdGlvbiBkZXZpY2UiLAorI2VuZGlmIC8qIENLX1RBUEkgKi8KKyIgIFNFVCBQT1JU ICAgICAgU2VsZWN0IHNlcmlhbCBjb21tdW5pY2F0aW9uIGRldmljZSIsCisjZWxzZQorIiAgU0VU IFBPUlQgICAgICBTZWxlY3Qgc2VyaWFsIGNvbW11bmljYXRpb24gcG9ydCBvciBzZXJ2ZXIiLAor I2VuZGlmIC8qIE5UICovCisjZWxzZQorIiAgU0VUIExJTkUgICAgICBTZWxlY3Qgc2VyaWFsIGNv bW11bmljYXRpb24gZGV2aWNlIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIFNFVCBTUEVFRCAgICAg U2VsZWN0IGNvbW11bmljYXRpb24gc3BlZWQiLAorIiAgU0VUIFBBUklUWSAgICBDb21tdW5pY2F0 aW9ucyBwYXJpdHkgKGlmIG5lY2Vzc2FyeSkiLAorI2lmZGVmIENLX1JUU0NUUworIiAgU0VUIEZM T1cgICAgICBDb21tdW5pY2F0aW9ucyBmbG93IGNvbnRyb2wsIHN1Y2ggYXMgUlRTL0NUUyIsCisj ZWxzZQorIiAgU0VUIEZMT1cgICAgICBDb21tdW5pY2F0aW9ucyBmbG93IGNvbnRyb2wsIHN1Y2gg YXMgWE9OL1hPRkYiLAorI2VuZGlmIC8qIENLX1JUU0NUUyAqLworIiAgQ09OTkVDVCAgICAgICBC ZWdpbiB0ZXJtaW5hbCBjb25uZWN0aW9uIiwKKworI2lmbmRlZiBOT0RJQUwKKyIgIiwKKyJUbyBk aWFsIG91dCB3aXRoIGEgbW9kZW06IiwKKyIgIFNFVCBESUFMIERJUkVDVE9SWSAgICAgU3BlY2lm eSBkaWFsaW5nIGRpcmVjdG9yeSBmaWxlIChvcHRpb25hbCkiLAorIiAgU0VUIERJQUwgQ09VTlRS WS1DT0RFICBDb3VudHJ5IHlvdSBhcmUgZGlhbGluZyBmcm9tICgqKSIsCisiICBTRVQgRElBTCBB UkVBLUNPREUgICAgIEFyZWEtY29kZSB5b3UgYXJlIGRpYWxpbmcgZnJvbSAoKikiLAorIiAgTE9P S1VQICAgICAgICAgICAgICAgICBMb29rdXAgZW50cmllcyBpbiB5b3VyIGRpYWxpbmcgZGlyZWN0 b3J5ICgqKSIsCisiICBTRVQgTU9ERU0gVFlQRSAgICAgICAgIFNlbGVjdCBtb2RlbSB0eXBlIiwK KyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorI2lmZGVmIENLX1RBUEkKKyIgIFNFVCBQT1JUIFRBUEkg ICAgICAgICAgU2VsZWN0IFRBUEkgY29tbXVuaWNhdGlvbiBkZXZpY2UiLAorI2VuZGlmIC8qIENL X1RBUEkgKi8KKyIgIFNFVCBQT1JUICAgICAgICAgICAgICAgU2VsZWN0IHNlcmlhbCBjb21tdW5p Y2F0aW9uIGRldmljZSIsCisjZWxzZQorIiAgU0VUIFBPUlQgICAgICAgICAgICAgICBTZWxlY3Qg c2VyaWFsIGNvbW11bmljYXRpb24gcG9ydCBvciBzZXJ2ZXIiLAorI2VuZGlmIC8qIE5UICovCisj ZWxzZQorIiAgU0VUIExJTkUgICAgICAgICAgICAgICBTZWxlY3Qgc2VyaWFsIGNvbW11bmljYXRp b24gZGV2aWNlIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIFNFVCBTUEVFRCAgICAgICAgICAgICAg U2VsZWN0IGNvbW11bmljYXRpb24gc3BlZWQiLAorIiAgU0VUIFBBUklUWSAgICAgICAgICAgICBD b21tdW5pY2F0aW9ucyBwYXJpdHkgKGlmIG5lY2Vzc2FyeSkiLAorIiAgRElBTCAgICAgICAgICAg ICAgICAgICBEaWFsIHRoZSBwaG9uZSBudW1iZXIiLAorIiAgQ09OTkVDVCAgICAgICAgICAgICAg ICBCZWdpbiB0ZXJtaW5hbCBjb25uZWN0aW9uIiwKKyIgIiwKKyNpZmRlZiBPUzIKKyJGdXJ0aGVy IGluZm86ICAgSEVMUCBESUFMLCBIRUxQIFNFVCBNT0RFTSwgSEVMUCBTRVQgUE9SVCwgSEVMUCBT RVQgRElBTCIsCisjZWxzZQorIkZ1cnRoZXIgaW5mbzogICBIRUxQIERJQUwsIEhFTFAgU0VUIE1P REVNLCBIRUxQIFNFVCBMSU5FLCBIRUxQIFNFVCBESUFMIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIo KikgKEZvciB1c2Ugd2l0aCBvcHRpb25hbCBkaWFsaW5nIGRpcmVjdG9yeSkiLAorI2VuZGlmIC8q IE5PRElBTCAqLworCisjaWZkZWYgTkVUQ09OTgorIiAiLAorIlRvIG1ha2UgYSBuZXR3b3JrIGNv bm5lY3Rpb246IiwKKyNpZm5kZWYgTk9ESUFMCisiICBTRVQgTkVUV09SSyBESVJFQ1RPUlkgIFNw ZWNpZnkgYSBuZXR3b3JrIHNlcnZpY2VzIGRpcmVjdG9yeSAob3B0aW9uYWwpIiwKKyIgIExPT0tV UCAgICAgICAgICAgICAgICAgTG9va3VwIGVudHJpZXMgaW4geW91ciBuZXR3b3JrIGRpcmVjdG9y eSIsCisjZW5kaWYgLyogTk9ESUFMICovCisiICBTRVQgTkVUV09SSyBUWVBFICAgICAgIFNlbGVj dCBuZXR3b3JrIHR5cGUgKGlmIG1vcmUgdGhhbiBvbmUgYXZhaWxhYmxlKSIsCisiICBTRVQgSE9T VCAgICAgICAgICAgICAgIE1ha2UgYSBuZXR3b3JrIGNvbm5lY3Rpb24gYnV0IHN0YXkgaW4gY29t bWFuZCBtb2RlIiwKKyIgIENPTk5FQ1QgICAgICAgICAgICAgICAgQmVnaW4gdGVybWluYWwgY29u bmVjdGlvbiIsCisjaWZkZWYgVE5DT0RFCisiICBURUxORVQgICAgICAgICAgICAgICAgIFNlbGVj dCBhIFRlbG5ldCBob3N0IGFuZCBDT05ORUNUIHRvIGl0IiwKKyNlbmRpZiAvKiBUTkNPREUgKi8K KyNpZmRlZiBSTE9HQ09ERQorIiAgUkxPR0lOICAgICAgICAgICAgICAgICBTZWxlY3QgYW4gUmxv Z2luIGhvc3QgYW5kIENPTk5FQ1QgdG8gaXQiLAorI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZk ZWYgQU5ZU1NICisiICBTU0ggWyBPUEVOIF0gICAgICAgICAgIFNlbGVjdCBhbiBTU0ggaG9zdCBh bmQgQ09OTkVDVCB0byBpdCIsCisjZW5kaWYgLyogQU5ZU1NIICovCisjaWZkZWYgTkVXRlRQCisi ICBGVFAgWyBPUEVOIF0gICAgICAgICAgIE1ha2UgYW4gRlRQIGNvbm5lY3Rpb24iLAorI2VuZGlm IC8qIE5FV0ZUUCAqLworI2lmZGVmIENLSFRUUAorIiAgSFRUUCBPUEVOICAgICAgICAgICAgICBN YWtlIGFuIEhUVFAgY29ubmVjdGlvbiIsCisjZW5kaWYgLyogQ0tIVFRQICovCisjZW5kaWYgLyog TkVUQ09OTiAqLworCisjaWZkZWYgTlQKKyIgIiwKKyJUbyByZXR1cm4gZnJvbSB0aGUgdGVybWlu YWwgd2luZG93IHRvIHRoZSBLLTk1PiBwcm9tcHQ6IiwKKyNlbHNlCisjaWZkZWYgT1MyCisiICIs CisiVG8gcmV0dXJuIGZyb20gdGhlIHRlcm1pbmFsIHdpbmRvdyB0byB0aGUgSy8yPiBwcm9tcHQ6 IiwKKyNlbHNlCisiICIsCisiVG8gcmV0dXJuIGZyb20gYSB0ZXJtaW5hbCBjb25uZWN0aW9uIHRv IHRoZSBDLUtlcm1pdCBwcm9tcHQ6IiwKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOVCAq LworI2lmZGVmIE9TMgorIiAgXAorUHJlc3MgdGhlIGtleSBvciBrZXktY29tYmluYXRpb24gc2hv d24gYWZ0ZXIgXCJDb21tYW5kOlwiIGluIHRoZSBzdGF0dXMgbGluZSIsCisiICAoc3VjaCBhcyBB bHQteCkgb3IgdHlwZSB5b3VyIGVzY2FwZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhlIGxldHRl ciBDLiIsCisjZWxzZQorIiAgVHlwZSB5b3VyIGVzY2FwZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkg dGhlIGxldHRlciBDLiIsCisjZW5kaWYgLyogT1MyICovCisiICIsCisiVG8gZGlzcGxheSB5b3Vy IGVzY2FwZSBjaGFyYWN0ZXI6IiwKKyIgIFNIT1cgRVNDQVBFIiwKKyIgIiwKKyJUbyBkaXNwbGF5 IG90aGVyIHNldHRpbmdzOiIsCisiICBTSE9XIENPTU1VTklDQVRJT05TLCBTSE9XIFRFUk1JTkFM LCBTSE9XIEZJTEUsIFNIT1cgUFJPVE9DT0wsIGV0Yy4iLAorI2Vsc2UgIC8qICFOT0xPQ0FMICov CisiICIsCisiVG8gZGlzcGxheSBzZXR0aW5nczoiLAorIiAgU0hPVyBDT01NVU5JQ0FUSU9OUywg U0hPVyBGSUxFLCBTSE9XIFBST1RPQ09MLCBldGMuIiwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisi ICIsCisiVGhlIG1hbnVhbCBmb3IgQy1LZXJtaXQgaXMgdGhlIGJvb2sgXCJVc2luZyBDLUtlcm1p dFwiLiAgRm9yIGluZm9ybWF0aW9uIiwKKyJhYm91dCB0aGUgbWFudWFsLCB2aXNpdDoiLAorIiAg aHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvdXNpbmdja2VybWl0Lmh0bWwiLAorIiAiLAorI2lm ZGVmIE9TMgorIkZvciBhIEtlcm1pdCA5NSB0dXRvcmlhbCwgdmlzaXQ6IiwKKyIgIGh0dHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2s5NXR1dG9yLmh0bWwiLAorIiAiLAorI2VuZGlmIC8qIE9TMiAq LworIkZvciBhbiBvbmxpbmUgQy1LZXJtaXQgdHV0b3JpYWwsIHZpc2l0OiIsCisiICBodHRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9ja3V0dXRvci5odG1sIiwKKyIgIiwKKyJUbyBsZWFybiBhYm91 dCBzY3JpcHQgcHJvZ3JhbW1pbmcgYW5kIGF1dG9tYXRpb246IiwKKyIgIGh0dHA6Ly9rZXJtaXQu Y29sdW1iaWEuZWR1L2Nrc2NyaXB0cy5odG1sIiwKKyIgIiwKKyJGb3IgZnVydGhlciBpbmZvcm1h dGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgY29tbWFuZCwgdHlwZSBIRUxQIHh4eCwiLAorIndoZXJl IHh4eCBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC4gIEZvciBkb2N1bWVudGF0aW9uLCBuZXdz IG9mIG5ldyIsCisicmVsZWFzZXMsIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBLZXJtaXQg c29mdHdhcmUsIHZpc2l0IHRoZSIsCisiS2VybWl0IFByb2plY3Qgd2Vic2l0ZToiLAorIiAiLAor IiAgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvIiwKKyIgIiwKKyJGb3IgaW5mb3JtYXRpb24g YWJvdXQgdGVjaG5pY2FsIHN1cHBvcnQgcGxlYXNlIHZpc2l0IHRoaXMgcGFnZToiLAorIiAiLAor IiAgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUvc3VwcG9ydC5odG1sIiwKKyIiCit9OworCitz dGF0aWMgY2hhciAqIGhteHltYXRjaFtdID0geworIlNFVCBNQVRDSCB7IERPVEZJTEUsIEZJRk8g fSB7IE9OLCBPRkYgfSIsCisiICBUZWxscyB3aGV0aGVyIHdpbGRjYXJkcyBzaG91bGQgbWF0Y2gg ZG90ZmlsZXMgKGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIiwKKyIgIHdpdGggcGVyaW9kKSBvciBV TklYIEZJRk8gc3BlY2lhbCBmaWxlcy4gIE1BVENIIEZJRk8gZGVmYXVsdCBpcyBPRkYuIiwKKyIg IE1BVENIIERPVEZJTEUgZGVmYXVsdCBpcyBPRkYgaW4gVU5JWCwgT04gZWxzZXdoZXJlLiIsCisi IgorfTsKKworI2lmbmRlZiBOT1NFWFAKK3N0YXRpYyBjaGFyICogaG14eXNleHBbXSA9IHsKKyJT RVQgU0VYUFJFU1NJT04geyBERVBUSC1MSU1JVCwgRUNITy1SRVNVTFQsIFRSVU5DQVRFLUFMTC1S RVNVTFRTIH0iLAorIiAgREVQVEgtTElNSVQgc2V0cyBhIGxpbWl0IG9uIHRoZSBkZXB0aCBvZiBu ZXN0aW5nIG9yIHJlY3Vyc2lvbiBpbiIsCisiICBTLUV4cHJlc3Npb25zIHRvIHByZXZlbnQgdGhl IHByb2dyYW0gZnJvbSBjcmFzaGluZyBmcm9tIG1lbW9yeSBleGhhdXN0aW9uLiIsCisiICBFQ0hP LVJFU1VMVCB0ZWxscyB3aGV0aGVyIFMtRXhwcmVzc2lvbiByZXN1bHRzIHNob3VsZCBiZSBkaXNw bGF5ZWQgYXMiLAorIiAgYSByZXN1bHQgb2YgZXZhbHVhdGluZyBhbiBleHByZXNzaW9uOyB0aGUg ZGVmYXVsdCBpcyB0byBkaXNwbGF5IG9ubHkgYXQiLAorIiAgdG9wIChpbnRlcmFjdGl2ZSkgbGV2 ZWw7IE9GRiBtZWFucyBuZXZlciBkaXNwbGF5OyBPTiBtZWFucyBhbHdheXMgZGlzcGxheS4iLAor IiAgVFJVTkNBVEUtQUxMLVJFU1VMVFMgT04gbWVhbnMgdGhlIHJlc3VsdHMgb2YgYWxsIGFyaXRo bWV0aWMgb3BlcmF0aW9ucyIsCisiICBzaG91bGQgYmUgZm9yY2VkIHRvIGludGVnZXJzICh3aG9s ZSBudW1iZXJzKSBieSBkaXNjYXJkaW5nIGFueSBmcmFjdGlvbmFsIiwKKyIgIHBhcnQuICBUaGUg ZGVmYXVsdCBpcyBPRkYuICBTSE9XIFNFWFBSRVNTSU9OIGRpc3BsYXlzIHRoZSBjdXJyZW50IHNl dHRpbmdzLiIKKywiIgorfTsKKyNlbmRpZgkvKiBOT1NFWFAgKi8KKworI2lmZGVmIE9TMgorI2lm ZGVmIEtVSQorc3RhdGljIGNoYXIgKiBobXh5Z3VpW10gPSB7CisiU0VUIEdVSSBDTE9TRSBPRkYi LAorIiAgRGlzYWJsZXMgdGhlIFN5c3RlbSBNZW51IENsb3NlIGFuZCBGaWxlLT5FeGl0IGZ1bmN0 aW9ucyB3aGljaCBjb3VsZCBiZSIsCisiICB1c2VkIHRvIGV4aXQgS2VybWl0LiAgT25jZSBkaXNh YmxlZCB0aGVzZSBmdW5jdGlvbnMgY2Fubm90IGJlIHJlLWVuYWJsZWQiLAorIiAgYW5kIHRoZSBv bmx5IHdheSB0byBleGl0IEtlcm1pdCBpcyB2aWEgdGhlIEtlcm1pdCBTY3JpcHQgRVhJVCBjb21t YW5kLiIsCisiICIsCisiU0VUIEdVSSBESUFMT0dTIHsgT04sIE9GRiB9IiwKKyIgIE9OIG1lYW5z IHRoYXQgcG9wdXBzLCBhbGVydHMsIHVzZSBHVUkgZGlhbG9nczsgT0ZGIG1lYW5zIHRvIHVzZSIs CisiICB0ZXh0LW1vZGUgcG9wdXBzIG9yIHByb21wdHMuICBPTiBieSBkZWZhdWx0LiIsCisiICIs CisiU0VUIEdVSSBGT05UIG5hbWUgc2l6ZSIsCisiICBDaG9vc2VzIHRoZSBmb250IGFuZCBzaXpl LiAgVHlwZSBcInNldCBndWkgZm9udCA/XCIgdG8gc2VlIHRoZSBsaXN0IG9mIiwKKyIgIGNob2lj ZXMuICBUaGUgc2l6ZSBjYW4gYmUgYSB3aG9sZSBudW1iZXIgb3IgY2FuIGNvbnRhaW4gYSBkZWNp bWFsIHBvaW50IiwKKyIgIGFuZCBhIGZyYWN0aW9uICh3aGljaCBpcyByb3VuZGVkIHRvIHRoZSBu ZWFyZXN0IGhhbGYgcG9pbnQpLiIsCisiICIsCisiU0VUIEdVSSBNRU5VQkFSIE9GRiIsCisiICBE aXNhYmxlcyBtZW51YmFyIGZ1bmN0aW9ucyB3aGljaCBjb3VsZCBiZSB1c2VkIHRvIG1vZGlmeSB0 aGUgS2VybWl0IiwKKyIgIHNlc3Npb24gY29uZmlndXJhdGlvbi4gIE9uY2UgZGlzYWJsZWQgdGhl IG1lbnViYXIgZnVuY3Rpb25zIGNhbm5vdCBiZSIsCisiICByZS1lbmFibGVkLiIsIAorIiAiLAor IlNFVCBHVUkgUkdCQ09MT1IgY29sb3JuYW1lIHJlZHZhbHVlIGdyZWVudmFsdWUgYmx1ZXZhbHVl IiwKKyIgIFNwZWNpZmllcyB0aGUgcmVkLWdyZWVuLWJsdWUgbWl4dHVyZSB0byBiZSB1c2VkIHRv IHJlbmRlciB0aGUgZ2l2ZW4iLAorIiAgY29sb3IgbmFtZS4gIFR5cGUgXCJzZXQgZ3VpIHJnYmNv bG9yXCIgdG8gc2VlIGEgbGlzdCBvZiBjb2xvcm5hbWVzLiIsCisiICB0aGUgUkdCIHZhbHVlcyBh cmUgd2hvbGUgbnVtYmVycyBmcm9tIDAgdG8gMjU1LiIsCisiICIsCisiU0VUIEdVSSBUT09MQkFS IE9GRiIsIAorIiAgRGlzYWJsZXMgdG9vbGJhciBmdW5jdGlvbnMgd2hpY2ggY291bGQgYmUgdXNl ZCB0byBtb2RpZnkgdGhlIEtlcm1pdCIsCisiICBzZXNzaW9uIGNvbmZpZ3VyYXRpb24uICBPbmNl IGRpc2FibGVkIHRoZSB0b29sYmFyIGZ1bmN0aW9ucyBjYW5ub3QgYmUiLAorIiAgcmUtZW5hYmxl ZC4iLCAKKyIgIiwKKyJTRVQgR1VJIFdJTkRPVyBQT1NJVElPTiB4IHkiLAorIiAgTW92ZXMgdGhl IEs5NSB3aW5kb3cgdG8gdGhlIGdpdmVuIFgsWSBjb29yZGluYXRlcywgcGl4ZWxzIGZyb20gdG9w IGxlZnQuIiwKKyIgIChOb3QgeWV0IGltcGxlbWVudGVkIC0tIHVzZSBjb21tYW5kLWxpbmUgb3B0 aW9ucyB0byBkbyB0aGlzLikiLAorIiAiLAorIlNFVCBHVUkgV0lORE9XIFJFU0laRS1NT0RFIHsg Q0hBTkdFLURJTUVOU0lPTlMsIFNDQUxFLUZPTlQgfSIsCisiICBEZWZhdWx0IGlzIENIQU5HRS1E SU1FTlNJT05TLiIsCisiIiwKKyJTRVQgR1VJIFdJTkRPVyBSVU4tTU9ERSB7IE1BWElNSVpFLCBN SU5JTUlaRSwgUkVTVE9SRSB9IiwKKyIgIENoYW5nZXMgdGhlIHJ1biBtb2RlIHN0YXRlIG9mIHRo ZSBHVUkgd2luZG93LiIsCisiIgorfTsKKyNlbmRpZiAvKiBLVUkgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKworI2lmZGVmIEFOWVNTSAorc3RhdGljIGNoYXIgKiBobXh4c3NoW10gPSB7CisjaWZkZWYg U1NIQlVJTFRJTgorIlN5bnRheDogU1NIIHsgQURELCBBR0VOVCwgQ0xFQVIsIEtFWSwgWyBPUEVO IF0sIFYyIH0gb3BlcmFuZHMuLi4iLAorIiAgUGVyZm9ybXMgYW4gU1NILXJlbGF0ZWQgYWN0aW9u LCBkZXBlbmRpbmcgb24gdGhlIGtleXdvcmQgdGhhdCBmb2xsb3dzOiIsCisiICIsCisiU1NIIEFE RCBMT0NBTC1QT1JULUZPUldBUkQgbG9jYWwtcG9ydCBob3N0IHBvcnQiLAorIiAgQWRkcyBhIHBv cnQgZm9yd2FyZGluZyB0cmlwbGV0IHRvIHRoZSBsb2NhbCBwb3J0IGZvcndhcmRpbmcgbGlzdC4i LAorIiAgVGhlIHRyaXBsZXQgc3BlY2lmaWVzIGEgbG9jYWwgcG9ydCB0byBiZSBmb3J3YXJkZWQg YW5kIHRoZSBob3N0bmFtZSAvIiwKKyIgIGlwLWFkZHJlc3MgYW5kIHBvcnQgbnVtYmVyIHRvIHdo aWNoIHRoZSBwb3J0IHNob3VsZCBiZSBmb3J3YXJkZWQgZnJvbSIsCisiICB0aGUgcmVtb3RlIGhv c3QuICBQb3J0IGZvcndhcmRpbmcgaXMgYWN0aXZhdGVkIGF0IGNvbm5lY3Rpb24iLAorIiAgZXN0 YWJsaXNobWVudCBhbmQgY29udGludWVzIHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIHRlcm1pbmF0 ZWQuIiwKKyIgIiwKKyJTU0ggQUREIFJFTU9URS1QT1JULUZPUldBUkQgcmVtb3RlLXBvcnQgaG9z dCBwb3J0IiwKKyIgIEFkZHMgYSBwb3J0IGZvcndhcmRpbmcgdHJpcGxldCB0byB0aGUgcmVtb3Rl IHBvcnQgZm9yd2FyZGluZyBsaXN0LiIsCisiICBUaGUgdHJpcGxldCBzcGVjaWZpZXMgYSByZW1v dGUgcG9ydCB0byBiZSBmb3J3YXJkZWQgYW5kIHRoZSIsCisiICBob3N0bmFtZS9pcC1hZGRyZXNz IGFuZCBwb3J0IG51bWJlciB0byB3aGljaCB0aGUgcG9ydCBzaG91bGQgYmUiLAorIiAgZm9yd2Fy ZGVkIGZyb20gdGhlIGxvY2FsIG1hY2hpbmUuICBQb3J0IGZvcndhcmRpbmcgaXMgYWN0aXZhdGVk IGF0IiwKKyIgIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgY29udGludWVzIHVudGlsIHRo ZSBjb25uZWN0aW9uIGlzIiwKKyIgIHRlcm1pbmF0ZWQuIiwKKyIgIiwKKyJTU0ggQUdFTlQgQURE IFsgaWRlbnRpdHktZmlsZSBdIiwKKyIgIEFkZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBpZGVudGl0 eS1maWxlIChpZiBhbnkpIHRvIHRoZSBTU0ggQUdFTlQiLAorIiAgcHJpdmF0ZSBrZXkgY2FjaGUu ICBJZiBubyBpZGVudGl0eS1maWxlIGlzIHNwZWNpZmllZCwgYWxsIGZpbGVzIiwKKyIgIHNwZWNp ZmllZCB3aXRoIFNFVCBTU0ggSURFTlRJVFktRklMRSBhcmUgYWRkZWQgdG8gdGhlIGNhY2hlLiIs CisiICIsCisiU1NIIEFHRU5UIERFTEVURSBbIGlkZW50aXR5LWZpbGUgXSIsCisiICBEZWxldGVz IHRoZSBjb250ZW50cyBvZiB0aGUgaWRlbnRpdHktZmlsZSAoaWYgYW55KSBmcm9tIHRoZSBTU0gg QUdFTlQiLAorIiAgcHJpdmF0ZSBrZXkgY2FjaGUuICBJZiBubyBpZGVudGl0eS1maWxlIGlzIHNw ZWNpZmllZCwgYWxsIGZpbGVzIiwKKyIgIHNwZWNpZmllZCB3aXRoIFNFVCBTU0ggSURFTlRJVFkt RklMRSBhcmUgZGVsZXRlZCBmcm9tIHRoZSBjYWNoZS4iLAorIiAiLAorIlNTSCBBR0VOVCBMSVNU IFsgL0ZJTkdFUlBSSU5UIF0iLAorIiAgTGlzdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBTU0ggQUdF TlQgcHJpdmF0ZSBrZXkgY2FjaGUuICBJZiAvRklOR0VSUFJJTlQiLAorIiAgaXMgc3BlY2lmaWVk LCB0aGUgZmluZ2VycHJpbnQgb2YgdGhlIHByaXZhdGUga2V5cyBhcmUgZGlzcGxheWVkIGluc3Rl YWQiLAorIiAgb2YgdGhlIGtleXMuIiwKKyIgIiwKKyJTU0ggQ0xFQVIgTE9DQUwtUE9SVC1GT1JX QVJEIiwKKyIgIENsZWFycyB0aGUgbG9jYWwgcG9ydCBmb3J3YXJkaW5nIGxpc3QuIiwKKyIgIiwK KyJTU0ggQ0xFQVIgUkVNT1RFLVBPUlQtRk9SV0FSRCIsCisiICBDbGVhcnMgdGhlIHJlbW90ZSBw b3J0IGZvcndhcmRpbmcgbGlzdC4iLAorIiAiLAorIlNTSCBLRVkgY29tbWFuZHM6IiwKKyIgIFRo ZSBTU0ggS0VZIGNvbW1hbmRzIGNyZWF0ZSBhbmQgbWFuYWdlIHB1YmxpYyBhbmQgcHJpdmF0ZSBr ZXkgcGFpcnMiLAorIiAgKGlkZW50aXRpZXMpLiAgVGhlcmUgYXJlIHRocmVlIGZvcm1zIG9mIFNT SCBrZXlzLiAgRWFjaCBrZXkgcGFpciBpcyIsCisiICBzdG9yZWQgaW4gaXRzIG93biBzZXQgb2Yg ZmlsZXM6IiwKKyIgIiwKKyIgICBLZXkgVHlwZSAgICAgIFByaXZhdGUgS2V5IEZpbGUgICAgICAg ICAgIFB1YmxpYyBLZXkgRmlsZSIsCisiICAgIHYxIFJTQSBrZXlzICAgXFx2KGFwcGRhdGEpc3No L2lkZW50aXR5ICAgXFx2KGFwcGRhdGEpc3NoL2lkZW50aXR5LnB1YiIsCisiICAgIHYyIFJTQSBr ZXlzICAgXFx2KGFwcGRhdGEpc3NoL2lkX3JzYSAgICAgXFx2KGFwcGRhdGEpc3NoL2lkX3JzYS5w dWIiLAorIiAgICB2MiBEU0Ega2V5cyAgIFxcdihhcHBkYXRhKXNzaC9pZF9kc2EgICAgIFxcdihh cHBkYXRhKXNzaC9pZF9kc2EucHViIiwKKyIgIiwKKyIgIEtleXMgYXJlIHN0b3JlZCB1c2luZyB0 aGUgT3BlblNTSCBrZXlmaWxlIGZvcm1hdC4gIFRoZSBwcml2YXRlIGtleSIsCisiICBmaWxlcyBj YW4gYmUgKG9wdGlvbmFsbHkpIHByb3RlY3RlZCBieSBzcGVjaWZ5aW5nIGEgcGFzc3BocmFzZS4g IEEiLAorIiAgcGFzc3BocmFzZSBpcyBhIGxvbmdlciB2ZXJzaW9uIG9mIGEgcGFzc3dvcmQuICBF bmdsaXNoIHRleHQgcHJvdmlkZXMiLAorIiAgbm8gbW9yZSB0aGFuIDIgYml0cyBvZiBrZXkgZGF0 YSBwZXIgY2hhcmFjdGVyLiAgNTYtYml0IGtleXMgY2FuIGJlIiwKKyIgIGJyb2tlbiBieSBhIGJy dXRlIGZvcmNlIGF0dGFjayBpbiBhcHByb3hpbWF0ZWx5IDI0IGhvdXJzLiAgV2hlbiB1c2VkLCIs CisiICBwcml2YXRlIGtleSBmaWxlcyBzaG91bGQgdGhlcmVmb3JlIGJlIHByb3RlY3RlZCBieSBh IHBhc3NwaHJhc2Ugb2YgYXQiLAorIiAgbGVhc3QgNDAgY2hhcmFjdGVycyAoYWJvdXQgODAgYml0 cykuIiwKKyIgIiwKKyIgIFRvIGluc3RhbGwgYSBwdWJsaWMga2V5IGZpbGUgb24gdGhlIGhvc3Qs IHlvdSBtdXN0IHRyYW5zZmVyIHRoZSBmaWxlIiwKKyIgIHRvIHRoZSBob3N0IGFuZCBhcHBlbmQg aXQgdG8geW91ciBcImF1dGhvcml6ZWRfa2V5c1wiIGZpbGUuICBUaGUgZmlsZSIsCisiICBwZXJt aXNzaW9ucyBtdXN0IGJlIDYwMCAob3IgZXF1aXZhbGVudCkuIiwKKyIgIiwKKyJTU0ggS0VZIENI QU5HRS1QQVNTUEhSQVNFIFsgL05FVy1QQVNTUEhSQVNFOnBhc3NwaHJhc2UiLAorIiAgICAgIC9P TEQtUEFTU1BIUkFTRTpwYXNzcGhyYXNlIF0gZmlsZW5hbWUiLAorIiAgVGhpcyByZS1lbmNyeXB0 cyB0aGUgc3BlY2lmaWVkIHByaXZhdGUga2V5IGZpbGUgd2l0aCBhIG5ldyBwYXNzcGhyYXNlLiIs CisiICBUaGUgb2xkIHBhc3NwaHJhc2UgaXMgcmVxdWlyZWQuICBJZiB0aGUgcGFzc3BocmFzZXMg KGFuZCBmaWxlbmFtZSkgYXJlIiwKKyIgIG5vdCBwcm92aWRlZCBLZXJtaXQgcHJvbXB0cyB5b3Vy IGZvciB0aGVtLiIsCisiICIsCisiU1NIIEtFWSBDUkVBVEUgWyAvQklUUzpiaXRzIC9QQVNTUEhS QVNFOnBhc3NwaHJhc2UiLAorIiAgICAvVFlQRTp7IFYxLVJTQSwgVjItRFNBLCBWMi1SU0EgfSAv VjEtUlNBLUNPTU1FTlQ6Y29tbWVudCBdIGZpbGVuYW1lIiwKKyIgIFRoaXMgY29tbWFuZCBjcmVh dGVzIGEgbmV3IHByaXZhdGUvcHVibGljIGtleSBwYWlyLiAgVGhlIGRlZmF1bHRzIGFyZToiLAor IiAgQklUUzoxMDI0IGFuZCBUWVBFOlYyLVJTQS4gIFRoZSBmaWxlbmFtZSBpcyB0aGUgbmFtZSBv ZiB0aGUgcHJpdmF0ZSIsCisiICBrZXkgZmlsZS4gIFRoZSBwdWJsaWMga2V5IGlzIGNyZWF0ZWQg d2l0aCB0aGUgc2FtZSBuYW1lIHdpdGggLnB1YiIsCisiICBhcHBlbmRlZCB0byBpdC4gIElmIGEg ZmlsZW5hbWUgaXMgbm90IHNwZWNpZmllZCBLZXJtaXQgcHJvbXB0cyB5b3UgZm9yIiwKKyIgIGl0 LiAgVjEgUlNBIGtleSBmaWxlcyBtYXkgaGF2ZSBhbiBvcHRpb25hbCBjb21tZW50LCB3aGljaCBp cyBpZ25vcmVkIiwKKyIgIGZvciBvdGhlciBrZXkgdHlwZXMuIiwKKyIgIiwKKyJTU0ggS0VZIERJ U1BMQVkgWyAvRk9STUFUOntGSU5HRVJQUklOVCxJRVRGLE9QRU5TU0gsU1NILkNPTX0gXSBmaWxl bmFtZSIsCisiICBUaGlzIGNvbW1hbmQgZGlzcGxheXMgdGhlIGNvbnRlbnRzIG9mIGEgcHVibGlj IG9yIHByaXZhdGUga2V5IGZpbGUuIiwKKyIgIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyBPUEVOU1NI LiIsCisiICIsCisiU1NIIEtFWSBWMSBTRVQtQ09NTUVOVCBmaWxlbmFtZSBjb21tZW50IiwKKyIg IFRoaXMgY29tbWFuZCByZXBsYWNlcyB0aGUgY29tbWVudCBhc3NvY2lhdGVkIHdpdGggYSBWMSBS U0Ega2V5IGZpbGUuIiwKKyIgIiwKKyJTU0ggWyBPUEVOIF0gaG9zdCBbIHBvcnQgXSBbIC9DT01N QU5EOmNvbW1hbmQgL1VTRVI6dXNlcm5hbWUiLAorIiAgICAgIC9QQVNTV09SRDpwd2QgL1ZFUlNJ T046eyAxLCAyIH0gL1gxMS1GT1JXQVJESU5HOnsgT04sIE9GRiB9IF0iLAorIiAgVGhpcyBjb21t YW5kIGVzdGFibGlzaGVzIGEgbmV3IGNvbm5lY3Rpb24gdXNpbmcgU1NIIHZlcnNpb24gMSBvciIs CisiICB2ZXJzaW9uIDIgcHJvdG9jb2wuICBUaGUgY29ubmVjdGlvbiBpcyBtYWRlIHRvIHRoZSBz cGVjaWZpZWQgaG9zdCBvbiIsCisiICB0aGUgU1NIIHBvcnQgKHlvdSBjYW4gb3ZlcnJpZGUgdGhl IHBvcnQgYnkgaW5jbHVkaW5nIGEgcG9ydCBuYW1lIG9yIiwKKyIgIG51bWJlciBhZnRlciB0aGUg aG9zdCBuYW1lKS4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgdGhlIiwKKyIg IGF1dGhlbnRpY2F0aW9uIG5lZ290aWF0aW9ucyBiZWdpbi4gIElmIHRoZSBhdXRoZW50aWNhdGlv biBpcyBhY2NlcHRlZCwiLAorIiAgdGhlIGxvY2FsIGFuZCByZW1vdGUgcG9ydCBmb3J3YXJkaW5n IGxpc3RzIGFyZSB1c2VkIHRvIGVzdGFibGlzaCB0aGUiLAorIiAgZGVzaXJlZCBjb25uZWN0aW9u cy4gIElmIFgxMSBGb3J3YXJkaW5nIGlzIGFjdGl2ZSwgdGhpcyByZXN1bHRzIGluIGEiLAorIiAg cmVtb3RlIHBvcnQgZm9yd2FyZGluZyBiZXR3ZWVuIHRoZSBYMTEgY2xpZW50cyBvbiB0aGUgcmVt b3RlIGhvc3QgYW5kIiwKKyIgIFgxMSBTZXJ2ZXIgb24gdGhlIGxvY2FsIG1hY2hpbmUuICBJZiBh IC9DT01NQU5EIGlzIHByb3ZpZGVkLCB0aGUiLAorIiAgY29tbWFuZCBpcyBleGVjdXRlZCBvbiB0 aGUgcmVtb3RlIGhvc3QgaW4gcGxhY2Ugb2YgeW91ciBkZWZhdWx0IHNoZWxsLiIsCisiICIsCisi ICBBbiBleGFtcGxlIG9mIGEgL0NPTU1BTkQgdG8gZXhlY3V0ZSBDLUtlcm1pdCBpbiBTRVJWRVIg bW9kZSBpczoiLAorIiAgICAgU1NIIE9QRU4gaG9zdG5hbWUgL0NPTU1BTkQ6e2tlcm1pdCAteCAt bCAwfSIsCisiICIsCisiU1NIIFYyIFJFS0VZIiwKKyIgIFJlcXVlc3RzIHRoYXQgYW4gZXhpc3Rp bmcgU1NIIFYyIGNvbm5lY3Rpb24gZ2VuZXJhdGUgbmV3IHNlc3Npb24ga2V5cy4iLAorI2Vsc2Ug IC8qIFNTSEJVSUxUSU4gKi8KKyJTeW50YXg6IFNTSCBbIG9wdGlvbnMgXSA8aG9zdG5hbWU+IFsg Y29tbWFuZCBdIiwKKyIgIE1ha2VzIGFuIFNTSCBjb25uZWN0aW9uIHVzaW5nIHRoZSBleHRlcm5h bCBzc2ggcHJvZ3JhbSB2aWEgdGhlIFNFVCBTU0giLAorIiAgQ09NTUFORCBzdHJpbmcsIHdoaWNo IGlzIFwic3NoIC1lIG5vbmVcIiBieSBkZWZhdWx0LiAgT3B0aW9ucyBmb3IgdGhlIiwKKyIgIGV4 dGVybmFsIHNzaCBwcm9ncmFtIG1heSBiZSBpbmNsdWRlZC4gIElmIHRoZSBob3N0bmFtZSBpcyBm b2xsb3dlZCBieSBhIiwKKyIgIGNvbW1hbmQsIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIG9uIHRo ZSBob3N0IGluc3RlYWQgb2YgYW4gaW50ZXJhY3RpdmUiLAorIiAgc2hlbGwuIiwKKyNlbmRpZiAv KiBTU0hCVUlMVElOICovCisiIgorfTsKKworc3RhdGljIGNoYXIgKmhteHlzc2hbXSA9IHsKKyNp ZmRlZiBTU0hCVUlMVElOCisiU0VUIFNTSCBBR0VOVC1GT1JXQVJESU5HIHsgT04sIE9GRiB9IiwK KyIgIElmIGFuIGF1dGhlbnRpY2F0aW9uIGFnZW50IGlzIGluIHVzZSwgc2V0dGluZyB0aGlzIHZh bHVlIHRvIE9OIiwKKyIgIHJlc3VsdHMgaW4gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGFnZW50IGJl aW5nIGZvcndhcmRlZCB0byB0aGUgcmVtb3RlIiwKKyIgIGNvbXB1dGVyLiAgVGhlIGRlZmF1bHQg aXMgT0ZGLiIsCisiICIsCisiU0VUIFNTSCBDSEVDSy1IT1NULUlQIHsgT04sIE9GRiB9IiwKKyIg IFNwZWNpZmllcyB3aGV0aGVyIHRoZSByZW1vdGUgaG9zdCdzIGlwLWFkZHJlc3Mgc2hvdWxkIGJl IGNoZWNrZWQiLAorIiAgYWdhaW5zdCB0aGUgbWF0Y2hpbmcgaG9zdCBrZXkgaW4gdGhlIGtub3du X2hvc3RzIGZpbGUuICBUaGlzIGNhbiBiZSIsCisiICB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUg aG9zdCBrZXkgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiBETlMgc3Bvb2ZpbmcuIiwKKyIgIFRoZSBk ZWZhdWx0IGlzIE9OLiIsCisiICIsCisiU0VUIFNTSCBDT01QUkVTU0lPTiB7IE9OLCBPRkYgfSIs CisiICBTcGVjaWZpZXMgd2hldGhlciBjb21wcmVzc2lvbiB3aWxsIGJlIHVzZWQuICBUaGUgZGVm YXVsdCBpcyBPTi4iLAorIiAiLAorIlNFVCBTU0ggRFlOQU1JQy1GT1JXQVJESU5HIHsgT04sIE9G RiB9IiwKKyIgIFNwZWNpZmllcyB3aGV0aGVyIEtlcm1pdCBpcyB0byBhY3QgYXMgYSBTT0NLUzQg c2VydmljZSBvbiBwb3J0IDEwODAiLAorIiAgd2hlbiBjb25uZWN0ZWQgdG8gYSByZW1vdGUgaG9z dCB2aWEgU1NILiAgV2hlbiBLZXJtaXQgYWN0cyBhcyBhIFNPQ0tTNCIsCisiICBzZXJ2aWNlLCBp dCBhY2NlcHRzIGNvbm5lY3Rpb24gcmVxdWVzdHMgYW5kIGZvcndhcmRzIHRoZSBjb25uZWN0aW9u cyIsCisiICB0aHJvdWdoIHRoZSByZW1vdGUgaG9zdC4gIFRoZSBkZWZhdWx0IGlzIE9GRi4iLAor IiAiLAorIlNFVCBTU0ggR0FURVdBWS1QT1JUUyB7IE9OLCBPRkYgfSIsCisiICBTcGVjaWZpZXMg d2hldGhlciBLZXJtaXQgc2hvdWxkIGFjdCBhcyBhIGdhdGV3YXkgZm9yIGZvcndhcmRlZCIsCisi ICBjb25uZWN0aW9ucyByZWNlaXZlZCBmcm9tIHRoZSByZW1vdGUgaG9zdC4gIFRoZSBkZWZhdWx0 IGlzIE9GRi4iLAorIiAiLAorIlNFVCBTU0ggR1NTQVBJIERFTEVHQVRFLUNSRURFTlRJQUxTIHsg T04sIE9GRiB9IiwKKyIgIFNwZWNpZmllcyB3aGV0aGVyIEtlcm1pdCBzaG91bGQgZGVsZWdhdGUg R1NTQVBJIGNyZWRlbnRpYWxzIHRvICIsCisiICB0aGUgcmVtb3RlIGhvc3QgYWZ0ZXIgYXV0aGVu dGljYXRpb24uICBEZWxlZ2F0aW5nIGNyZWRlbnRpYWxzIGFsbG93cyIsCisiICB0aGUgY3JlZGVu dGlhbHMgdG8gYmUgdXNlZCBmcm9tIHRoZSByZW1vdGUgaG9zdC4gIFRoZSBkZWZhdWx0IGlzIE9G Ri4iLAorIiAiLAorIlNFVCBTU0ggSEVBUlRCRUFULUlOVEVSVkFMIDxzZWNvbmRzPiIsCisiICBT cGVjaWZpZXMgYSBudW1iZXIgb2Ygc2Vjb25kcyBvZiBpZGxlIHRpbWUgYWZ0ZXIgd2hpY2ggYW4g SUdOT1JFIiwKKyIgIG1lc3NhZ2Ugd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuICBUaGlzIHB1 bHNlIGlzIHVzZWZ1bCBmb3IiLAorIiAgbWFpbnRhaW5pbmcgY29ubmVjdGlvbnMgdGhyb3VnaCBI VFRQIFByb3h5IHNlcnZlcnMgYW5kIE5ldHdvcmsiLAorIiAgQWRkcmVzcyBUcmFuc2xhdG9ycy4g IFRoZSBkZWZhdWx0IGlzIE9GRiAoMCBzZWNvbmRzKS4iLAorIiAiLAorIlNFVCBTU0ggSURFTlRJ VFktRklMRSBmaWxlbmFtZSBbIGZpbGVuYW1lIFsgLi4uIF0gXSIsCisiICBTcGVjaWZpZXMgb25l IG9yIG1vcmUgZmlsZXMgZnJvbSB3aGljaCB0aGUgdXNlcidzIGF1dGhvcml6YXRpb24iLAorIiAg aWRlbnRpdGllcyAocHJpdmF0ZSBrZXlzKSBhcmUgdG8gYmUgcmVhZCB3aGVuIHVzaW5nIHB1Ymxp YyBrZXkiLAorIiAgYXV0aG9yaXphdGlvbi4gIFRoZXNlIGFyZSBmaWxlcyB1c2VkIGluIGFkZGl0 aW9uIHRvIHRoZSBkZWZhdWx0IGZpbGVzOiIsCisiICIsCisiICAgIFxcdihhcHBkYXRhKXNzaC9p ZGVudGl0eSAgICAgIFYxIFJTQSIsCisiICAgIFxcdihhcHBkYXRhKXNzaC9pZF9yc2EgICAgICAg IFYyIFJTQSIsCisiICAgIFxcdihhcHBkYXRhKXNzaC9pZF9kc2EgICAgICAgIFYyIERTQSIsCisi ICIsCisiU0VUIFNTSCBLRVJCRVJPUzQgVEdULVBBU1NJTkcgeyBPTiwgT0ZGIH0iLAorIiAgU3Bl Y2lmaWVzIHdoZXRoZXIgS2VybWl0IHNob3VsZCBmb3J3YXJkIEtlcmJlcm9zIDQgVEdUcyB0byB0 aGUgaG9zdC4iLAorIiAgVGhlIGRlZmF1bHQgaXMgT0ZGLiIsCisiICIsCisiU0VUIFNTSCBLRVJC RVJPUzUgVEdULVBBU1NJTkcgeyBPTiwgT0ZGIH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgS2Vy bWl0IHNob3VsZCBmb3J3YXJkIEtlcmJlcm9zIDUgVEdUcyB0byB0byB0aGUiLAorIiAgaG9zdC4g IFRoZSBkZWZhdWx0IGlzIE9GRi4iLAorIiAiLAorIlNFVCBTU0ggUFJJVklMRUdFRC1QT1JUIHsg T04sIE9GRiB9IiwKKyIgIFNwZWNpZmllcyB3aGV0aGVyIGEgcHJpdmlsZWdlZCBwb3J0IChsZXNz IHRoYW4gMTAyNCkgc2hvdWxkIGJlIHVzZWQiLAorIiAgd2hlbiBjb25uZWN0aW5nIHRvIHRoZSBo b3N0LiAgUHJpdmlsZWdlZCBwb3J0cyBhcmUgbm90IHJlcXVpcmVkIGV4Y2VwdCIsCisiICB3aGVu IHVzaW5nIFNTSCBWMSB3aXRoIFJob3N0cyBvciBSaG9zdHNSU0EgYXV0aG9yaXphdGlvbi4gIFRo ZSBkZWZhdWx0IiwKKyIgIGlzIE9GRi4iLAorIiAiLAorIlNFVCBTU0ggUVVJRVQgeyBPTiwgT0ZG IH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgYWxsIG1lc3NhZ2VzIGdlbmVyYXRlZCBpbiBjb25q dW5jdGlvbiB3aXRoIFNTSCIsCisiICBwcm90b2NvbHMgc2hvdWxkIGJlIHN1cHByZXNzZWQuICBU aGUgZGVmYXVsdCBpcyBPRkYuIiwKKyIgIiwKKyJTRVQgU1NIIFNUUklDVC1IT1NULUtFWS1DSEVD SyB7IEFTSywgT04sIE9GRiB9IiwKKyIgIFNwZWNpZmllcyBob3cgS2VybWl0IHNob3VsZCBiZWhh dmUgaWYgdGhlIHRoZSBob3N0IGtleSBjaGVjayBmYWlscy4iLAorIiAgV2hlbiBzdHJpY3QgaG9z dCBrZXkgY2hlY2tpbmcgaXMgT0ZGLCB0aGUgbmV3IGhvc3Qga2V5IGlzIGFkZGVkIHRvIHRoZSIs CisiICBwcm90b2NvbC12ZXJzaW9uLXNwZWNpZmljIHVzZXIta25vd24taG9zdHMtZmlsZS4gIFdo ZW4gc3RyaWN0IGhvc3Qga2V5IiwKKyIgIGNoZWNraW5nIGlzIE9OLCB0aGUgbmV3IGhvc3Qga2V5 IGlzIHJlZnVzZWQgYW5kIHRoZSBjb25uZWN0aW9uIGlzIiwKKyIgIGRyb3BwZWQuICBXaGVuIHNl dCB0byBBU0ssIEtlcm1pdCBwcm9tcHQgeW91IHRvIHNheSB3aGV0aGVyIHRoZSBuZXciLAorIiAg aG9zdCBrZXkgc2hvdWxkIGJlIGFjY2VwdGVkLiAgVGhlIGRlZmF1bHQgaXMgQVNLLiIsCisiICIs CisiICBTdHJpY3QgaG9zdCBrZXkgY2hlY2tpbmcgcHJvdGVjdHMgeW91IGFnYWluc3QgVHJvamFu IGhvcnNlIGF0dGFja3MuIiwKKyIgIEl0IGRlcGVuZHMgb24geW91IHRvIG1haW50YWluIHRoZSBj b250ZW50cyBvZiB0aGUga25vd24taG9zdHMtZmlsZSIsCisiICB3aXRoIGN1cnJlbnQgYW5kIHRy dXN0ZWQgaG9zdCBrZXlzLiIsCisiICIsCisiU0VUIFNTSCBVU0UtT1BFTlNTSC1DT05GSUcgeyBP TiwgT0ZGIH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgS2VybWl0IHNob3VsZCBwYXJzZSBhbiBP cGVuU1NIIGNvbmZpZ3VyYXRpb24gZmlsZSIsCisiICBhZnRlciBhcHBseWluZyBLZXJtaXQncyBT RVQgU1NIIGNvbW1hbmRzLiAgVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSIsCisiICB3b3VsZCBiZSBs b2NhdGVkIGF0IFxcdihob21lKXNzaC9zc2hfY29uZmlnLiAgVGhlIGRlZmF1bHQgaXMgT0ZGLiIs CisiICIsCisiU0VUIFNTSCBWMSBDSVBIRVIgeyAzREVTLCBCTE9XRklTSCwgREVTIH0iLAorIiAg U3BlY2lmaWVzIHdoaWNoIGNpcGhlciBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IFNTSCB2ZXJz aW9uIDEiLAorIiAgY29ubmVjdGlvbnMuICBUaGUgZGVmYXVsdCBpcyAzREVTLiIsCisiICIsCisi U0VUIFNTSCBWMSBHTE9CQUwtS05PV04tSE9TVFMtRklMRSBmaWxlbmFtZSIsCisiICBTcGVjaWZp ZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0td2lkZSBrbm93bi1ob3N0cyBmaWxlLiAgVGhl IiwKKyIgIGRlZmF1bHQgaXM6IiwKKyIgIiwKKyIgICAgXHYoY29tbW9uKXNzaF9rbm93bl9ob3N0 cyIsCisiICIsCisiU0VUIFNTSCBWMSBVU0VSLUtOT1dOLUhPU1RTLUZJTEUgZmlsZW5hbWUiLAor IiAgU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgdXNlci1rbm93bi1ob3N0cy1maWxlLiAg VGhlIGRlZmF1bHQiLAorIiAgbG9jYXRpb24gaXM6IiwKKyIgIiwKKyIgICAgXFx2KGFwcGRhdGEp c3NoL2tub3duX2hvc3RzIiwKKyIgIiwKKyJTRVQgU1NIIFYyIEFVVEhFTlRJQ0FUSU9OIHsgRVhU RVJOQUwtS0VZWCwgR1NTQVBJLCBIT1NUQkFTRUQsICIsCisiICAgIEtFWUJPQVJELUlOVEVSQUNU SVZFLCBQQVNTV09SRCwgUFVCS0VZLCBTUlAtR0VYLVNIQTEgfSBbIC4uLiBdIiwKKyIgIFNwZWNp ZmllcyBhbiBvcmRlcmVkIGxpc3Qgb2YgU1NIIHZlcnNpb24gMiBhdXRoZW50aWNhdGlvbiBtZXRo b2RzIHRvIiwKKyIgIGJlIHVzZWQgd2hlbiBjb25uZWN0aW5nIHRvIHRoZSByZW1vdGUgaG9zdC4g IFRoZSBkZWZhdWx0IGxpc3QgaXM6IiwKKyIgIiwKKyIgICAgZXh0ZXJuYWwta2V5eCBnc3NhcGkg aG9zdGJhc2VkIHB1YmxpY2tleSBzcnAtZ2V4LXNoYTEgcHVibGlja2V5IiwKKyIgICAga2V5Ym9h cmQtaW50ZXJhY3RpdmUgcGFzc3dvcmQgbm9uZSIsCisiICIsCisiU0VUIFNTSCBWMiBBVVRPLVJF S0VZIHsgT04sIE9GRiB9IiwKKyIgIFNwZWNpZmllcyB3aGV0aGVyIEtlcm1pdCBhdXRvbWF0aWNh bGx5IGlzc3VlcyByZWtleWluZyByZXF1ZXN0cyIsCisiICBvbmNlIGFuIGhvdXIgd2hlbiBTU0gg dmVyc2lvbiAyIGluIGluIHVzZS4gIFRoZSBkZWZhdWx0IGlzIE9OLiIsCisiICIsCisiU0VUIFNT SCBWMiBDSVBIRVJTIHsgM0RFUy1DQkMsIEFFUzEyOC1DQkMgQUVTMTkyLUNCQyBBRVMyNTYtQ0JD IiwKKyIgICAgIEFSQ0ZPVVIgQkxPV0ZJU0gtQ0JDIENBU1QxMjgtQ0JDIFJJSk5EQUVMMTI4LUNC QyBSSUpOREFFTDE5Mi1DQkMiLAorIiAgICAgUklKTkRBRUwyNTYtQ0JDIH0iLAorIiAgU3BlY2lm aWVzIGFuIG9yZGVyZWQgbGlzdCBvZiBTU0ggdmVyc2lvbiBjaXBoZXJzIHRvIGJlIHVzZWQgdG8g ZW5jcnlwdCIsCisiICB0aGUgZXN0YWJsaXNoZWQgY29ubmVjdGlvbi4gIFRoZSBkZWZhdWx0IGxp c3QgaXM6IiwKKyIgIiwKKyIgICAgYWVzMTI4LWNiYyAzZGVzLWNiYyBibG93ZmlzaC1jYmMgY2Fz dDEyOC1jYmMgYXJjZm91ciBhZXMxOTItY2JjIiwKKyIgICAgYWVzMjU2LWNiYyIsCisiICIsCisi ICBcInJpam5kYWVsXCIgaXMgYW4gYWxpYXMgZm9yIFwiYWVzXCIuIiwKKyIgIiwKKyJTRVQgU1NI IFYyIEdMT0JBTC1LTk9XTi1IT1NUUy1GSUxFIGZpbGVuYW1lIiwKKyIgIFNwZWNpZmllcyB0aGUg bG9jYXRpb24gb2YgdGhlIHN5c3RlbS13aWRlIGtub3duLWhvc3RzIGZpbGUuICBUaGUgZGVmYXVs dCIsCisiICBsb2NhdGlvbiBpczoiLAorIiAiLAorIiAgICBcXHYoY29tbW9uKXNzaC9rbm93bl9o b3N0czIiLAorIiAiLAorIlNFVCBTU0ggVjIgSE9TVEtFWS1BTEdPUklUSE1TIHsgU1NILURTUywg U1NILVJTQSB9IiwKKyIgIFNwZWNpZmllcyBhbiBvcmRlcmVkIGxpc3Qgb2YgaG9zdGtleSBhbGdv cml0aG1zIHRvIGJlIHVzZWQgdG8gdmVyaWZ5IiwKKyIgIHRoZSBpZGVudGl0eSBvZiB0aGUgaG9z dC4gIFRoZSBkZWZhdWx0IGxpc3QgaXMiLAorIiAiLAorIiAgICBzc2gtcnNhIHNzaC1kc3MiLAor IiAiLAorIlNFVCBTU0ggVjIgTUFDUyB7IEhNQUMtTUQ1IEhNQUMtTUQ1LTk2IEhNQUMtUklQRU1E MTYwIEhNQUMtU0hBMSIsCisiICAgICBITUFDLVNIQTEtOTYgfSIsCisiICBTcGVjaWZpZXMgYW4g b3JkZXJlZCBsaXN0IG9mIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSBhbGdvcml0aG1zIHRv IiwKKyIgIGJlIHVzZWQgZm9yIGludGVncml0eSAgcHJvdGVjdGlvbiBvZiB0aGUgZXN0YWJsaXNo ZWQgY29ubmVjdGlvbi4gIFRoZSIsCisiICBkZWZhdWx0IGxpc3QgaXM6IiwKKyIgIiwKKyIgICAg aG1hYy1tZDUgaG1hYy1zaGExIGhtYWMtcmlwZW1kMTYwIGhtYWMtc2hhMS05NiBobWFjLW1kNS05 NiIsCisiICIsCisiU0VUIFNTSCBWMiBVU0VSLUtOT1dOLUhPU1RTLUZJTEUgZmlsZW5hbWUiLAor IiAgU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgdXNlci1rbm93bi1ob3N0cyBmaWxlLiAg VGhlIGRlZmF1bHQiLAorIiAgbG9jYXRpb24gaXM6IiwKKyIgIiwKKyIgICAgXFx2KGFwcGRhdGEp c3NoL2tub3duX2hvc3RzMiIsCisiICIsCisiU0VUIFNTSCBWRVJCT1NFIGxldmVsIiwKKyIgIFNw ZWNpZmllcyBob3cgbWFueSBtZXNzYWdlcyBzaG91bGQgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBPcGVu U1NIIGVuZ2luZS4iLAorIiAgVGhlIGxldmVsIGNhbiByYW5nZSBmcm9tIDAgdG8gNy4gIFRoZSBk ZWZhdWx0IHZhbHVlIGlzIDIuIiwKKyIgIiwKKyJTRVQgU1NIIFZFUlNJT04geyAxLCAyLCBBVVRP TUFUSUMgfSIsCisiICBTcGVjaWZpZXMgd2hpY2ggU1NIIHZlcnNpb24gc2hvdWxkIGJlIG5lZ290 aWF0ZWQuICBUaGUgZGVmYXVsdCBpcyIsCisiICBBVVRPTUFUSUMgd2hpY2ggbWVhbnMgdXNlIHZl cnNpb24gMiBpZiBzdXBwb3J0ZWQ7IG90aGVyd2lzZSB0byBmYWxsIiwKKyIgIGJhY2sgdG8gdmVy c2lvbiAxLiIsCisiICIsCisiU0VUIFNTSCBYMTEtRk9SV0FSRElORyB7IE9OLCBPRkYgfSIsCisi ICBTcGVjaWZpZXMgd2hldGhlciBYIFdpbmRvd3MgU3lzdGVtIERhdGEgaXMgdG8gYmUgZm9yd2Fy ZGVkIGFjcm9zcyB0aGUiLAorIiAgZXN0YWJsaXNoZWQgU1NIIGNvbm5lY3Rpb24uICBUaGUgZGVm YXVsdCBpcyBPRkYuICBXaGVuIE9OLCB0aGUgRElTUExBWSIsCisiICB2YWx1ZSBpcyBlaXRoZXIg c2V0IHVzaW5nIHRoZSBTRVQgVEVMTkVUIEVOViBESVNQTEFZIGNvbW1hbmQgb3IgcmVhZCIsCisi ICBmcm9tIHRoZSBESVNQTEFZIGVudmlyb25tZW50IHZhcmlhYmxlLiIsCisiICIsCisiU0VUIFNT SCBYQVVUSC1MT0NBVElPTiBmaWxlbmFtZSIsCisiICBTcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9m IHRoZSB4YXV0aCBleGVjdXRhYmxlIChpZiBwcm92aWRlZCB3aXRoIHRoZSIsCisiICBYMTEgU2Vy dmVyIHNvZnR3YXJlLikiLAorI2Vsc2UgIC8qIFNTSEJVSUxUSU4gKi8KKyJTeW50YXg6IFNFVCBT U0ggQ09NTUFORCBjb21tYW5kIiwKKyIgIFNwZWNpZmllcyB0aGUgZXh0ZXJuYWwgY29tbWFuZCB0 byBiZSB1c2VkIHRvIG1ha2UgYW4gU1NIIGNvbm5lY3Rpb24uIiwKKyIgIEJ5IGRlZmF1bHQgaXQg aXMgXCJzc2ggLWUgbm9uZVwiIChzc2ggd2l0aCBubyBlc2NhcGUgY2hhcmFjdGVyKS4iLAorI2Vu ZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyIiCit9OworI2VuZGlmIC8qIEFOWVNTSCAqLworCisjaWZk ZWYgTkVXRlRQCitzdGF0aWMgY2hhciAqaG14eWdwcltdID0geworIlN5bnRheDogU0VUIEdFVC1Q VVQtUkVNT1RFIHsgQVVUTywgRlRQLCBLRVJNSVR9IiwKKyIgIFRlbGxzIEtlcm1pdCB3aGV0aGVy IEdFVCwgUFVULCBhbmQgUkVNT1RFIGNvbW1hbmRzIHNob3VsZCBiZSBkaXJlY3RlZCIsCisiICBh dCBhIEtlcm1pdCBzZXJ2ZXIgb3IgYW4gRlRQIHNlcnZlci4gIFRoZSBkZWZhdWx0IGlzIEFVVE8s IG1lYW5pbmcgdGhhdCIsCisiICBpZiB5b3UgaGF2ZSBvbmx5IG9uZSBhY3RpdmUgY29ubmVjdGlv biwgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpcyB0YWtlbiIsCisiICB3aGVuIHlvdSBnaXZlIGEg R0VULCBQVVQsIG9yIFJFTU9URSBjb21tYW5kLiAgU0VUIEdFVC1QVVQtUkVNT1RFIEZUUCBmb3Jj ZXMiCissCisiICBLZXJtaXQgdG8gdHJlYXQgR0VULCBQVVQsIGFuZCBSRU1PVEUgYXMgRlRQIGNs aWVudCBjb21tYW5kczsgc2V0dGluZyB0aGlzIiwKKyIgIHRvIEtFUk1JVCBmb3JjZXMgdGhlc2Ug Y29tbWFuZHMgdG8gYmUgdHJlYXRlZCBhcyBLZXJtaXQgY2xpZW50IGNvbW1hbmRzLiIsCisiICBO T1RFOiBQVVQgaW5jbHVkZXMgU0VORCwgTVBVVCwgTVNFTkQsIGFuZCBhbGwgb3RoZXIgc2ltaWxh ciBjb21tYW5kcy4iLAorIiAgQWxzbyBzZWUgSEVMUCBSRU1PVEUsIEhFTFAgU0VUIExPQ1VTLCBI RUxQIEZUUC4iLAorIiIKK307CisjZW5kaWYgLyogTkVXRlRQICovCisKKyNpZmRlZiBMT0NVUwor c3RhdGljIGNoYXIgKmhteHlsb2N1c1tdID0geworI2lmZGVmIEtVSQorIlN5bnRheDogU0VUIExP Q1VTIHsgQVNLLCBBVVRPLCBMT0NBTCwgUkVNT1RFIH0iLAorI2Vsc2UKKyJTeW50YXg6IFNFVCBM T0NVUyB7IEFVVE8sIExPQ0FMLCBSRU1PVEUgfSIsCisjZW5kaWYgLyogS1VJICovCisiICBTcGVj aWZpZXMgd2hldGhlciB1bnByZWZpeGVkIGZpbGUgbWFuYWdlbWVudCBjb21tYW5kcyBzaG91bGQg b3BlcmF0ZSIsCisiICBsb2NhbGx5IG9yICh3aGVuIHRoZXJlIGlzIGEgY29ubmVjdGlvbiB0byBh IHJlbW90ZSBGVFAgb3IgS2VybWl0IiwKKyIgIHNlcnZlcikgc2VudCB0byB0aGUgc2VydmVyLiAg VGhlIGFmZmVjdGVkIGNvbW1hbmRzIGFyZTogQ0QgKENXRCksIFBXRCwiLAorIiAgQ0RVUCwgRElS RUNUT1JZLCBERUxFVEUsIFJFTkFNRSwgTUtESVIsIGFuZCBSTURJUi4gIFRvIGZvcmNlIGFueSBv ZiIsCisiICB0aGVzZSBjb21tYW5kcyB0byBiZSBleGVjdXRlZCBsb2NhbGx5LCBnaXZlIGl0IGFu IEwtcHJlZml4OiBMQ0QsIExESVIsIiwKKyIgIGV0Yy4gIFRvIGZvcmNlIHJlbW90ZSBleGVjdXRp b24sIHVzZSB0aGUgUi1wcmVmaXg6IFJDRCwgUkRJUiwgYW5kIHNvIiwKKyIgIG9uLiAgU0hPVyBD T01NQU5EIHNob3dzIHRoZSBjdXJyZW50IExvY3VzLiIsCisiICIsCisiICBCeSBkZWZhdWx0LCB0 aGUgTG9jdXMgZm9yIGZpbGUgbWFuYWdlbWVudCBjb21tYW5kcyBpcyBzd2l0Y2hlZCIsCisiICBh dXRvbWF0aWNhbGx5IHdoZW5ldmVyIHlvdSBtYWtlIG9yIGNsb3NlIGEgY29ubmVjdGlvbjogaWYg eW91IG1ha2UgYW4iLAorIiAgRlRQIGNvbm5lY3Rpb24sIHRoZSBMb2N1cyBiZWNvbWVzIFJFTU9U RTsgaWYgeW91IGNsb3NlIGFuIEZUUCBjb25uZWN0aW9uIiwKKyIgIG9yIG1ha2UgYW55IG90aGVy IGtpbmQgb2YgY29ubmVjdGlvbiwgdGhlIExvY3VzIGJlY29tZXMgTE9DQUwuIiwKKyNpZmRlZiBL VUkKKyIgIiwKKyIgIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgYXV0b21hdGljIHN3aXRjaGluZzog QVNLICh0aGUgZGVmYXVsdCkgd2hpY2giLAorIiAgYXNrcyB5b3UgaWYgaXQncyBPSyB0byBzd2l0 Y2gsIGFuZCBBVVRPLCB3aGljaCBzd2l0Y2hlcyB3aXRob3V0IGFza2luZy4iLAorI2VuZGlmIC8q IEtVSSAqLworIiAiLAorIiAgSWYgeW91IGdpdmUgYSBTRVQgTE9DVVMgTE9DQUwgb3IgU0VUIExP Q1VTIFJFTU9URSBjb21tYW5kLCB0aGlzIHNldHMiLAorIiAgdGhlIGxvY3VzIGFzIGluZGljYXRl ZCBhbmQgZGlzYWJsZXMgYXV0b21hdGljIHN3aXRjaGluZy4iLAorI2lmZGVmIEtVSQorIiAgU0VU IExPQ1VTIEFVVE8gb3IgU0VUIExPQ1VTIEFTSyByZXN0b3JlcyBhdXRvbWF0aWMgc3dpdGNoaW5n LiIsCisiICBZb3UgY2FuIGFsc28gY2hhbmdlIExvY3VzIHN3aXRjaGluZyBhbmQgYmVoYXZpb3Ig aW4gdGhlIEFjdGlvbnMgbWVudS4iLAorI2Vsc2UKKyIgIFNFVCBMT0NVUyBBVVRPIHJlc3RvcmVz IGF1dG9tYXRpYyBzd2l0Y2hpbmcuIiwKKyNlbmRpZiAvKiBLVUkgKi8KKyIiLAorfTsKKyNlbmRp ZiAvKiBMT0NVUyAqLworCisjaWZkZWYgVU5JWAorI2lmbmRlZiBOT1BVVEVOVgorc3RhdGljIGNo YXIgKmhteHhwdXRlbnZbXSA9IHsKKyJTeW50YXg6IFBVVEVOViBuYW1lIHZhbHVlIiwKKyIgIENy ZWF0ZXMgb3IgbW9kaWZpZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggdGhlIGdpdmVu IG5hbWUgdG8gaGF2ZSIsCisiICB0aGUgZ2l2ZW4gdmFsdWUuICBQdXJwb3NlOiB0byBwYXNzIHBh cmFtZXRlcnMgdG8gc3VicHJvY2Vzc2VzIHdpdGhvdXQiLAorIiAgaGF2aW5nIHRoZW0gYXBwZWFy IG9uIHRoZSBjb21tYW5kIGxpbmUuICBJZiB0aGUgdmFsdWUgaXMgYmxhbmsgKGVtcHR5KSwiLAor IiAgdGhlIHZhcmlhYmxlIGlzIGRlbGV0ZWQuICBUaGUgcmVzdWx0IGlzIHZpc2libGUgdG8gdGhp cyBpbnN0YW50aWF0aW9uIG9mIiwKKyIgIEMtS2VybWl0IHZpYSBcXCQobmFtZSkgYW5kIHRvIGFu eSBpbmZlcmlvciBwcm9jZXNzZXMgYnkgd2hhdGV2ZXIgbWV0aG9kIiwKKyIgIHRoZXkgdXNlIHRv IGFjY2VzcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUaGUgdmFsdWUgbWF5IGJlIGVuY2xvc2Vk IGluIiwKKyIgIGRvdWJsZXF1b3RlcyBvciBicmFjZXMsIGJ1dCBpdCBuZWVkIG5vdCBiZTsgaWYg aXQgaXMgdGhlIG91dGVybW9zdCIsCisiICBkb3VibGVxdW90ZXMgb3IgYnJhY2VzIGFyZSByZW1v dmVkLiIsCisiICIsCisiICBOb3RlIHRoZSBzeW50YXg6IiwKKyIgICAgUFVURU5WIG5hbWUgdmFs dWUiLAorIiAgbm90OiIsCisiICAgIFBVVEVOViBuYW1lPXZhbHVlIiwKKyIgIiwKKyIgIFRoZXJl IGlzIG5vIGVxdWFsIHNpZ24gYmV0d2VlbiBuYW1lIGFuZCB2YWx1ZSwgYW5kIHRoZSBuYW1lIGl0 c2VsZiBtYXkiLAorIiAgbm90IGluY2x1ZGUgYW4gZXF1YWwgc2lnbi4iLAorIiIsCit9OworI2Vu ZGlmCS8qIE5PUFVURU5WICovCisjZW5kaWYJLyogVU5JWCAqLworCitzdGF0aWMgY2hhciAqaG14 eHRha1tdID0geworIlN5bnRheDogVEFLRSBmaWxlbmFtZSBbIGFyZ3VtZW50cyBdIiwKKyIgIFRl bGxzIEtlcm1pdCB0byBleGVjdXRlIGNvbW1hbmRzIGZyb20gdGhlIG5hbWVkIGZpbGUuICBPcHRp b25hbCBhcmd1bWVudCIsCisiICB3b3JkcywgYXJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgdG8g dGhlIG1hY3JvIGFyZ3VtZW50IHZhcmlhYmxlcyBcXCUxIiwKKyIgIHRocm91Z2ggXFwlOS4gIEtl cm1pdCBjb21tYW5kIGZpbGVzIG1heSB0aGVtc2VsdmVzIGNvbnRhaW4gVEFLRSBjb21tYW5kcywi LAorIiAgdXAgdG8gYW55IHJlYXNvbmFibGUgZGVwdGggb2YgbmVzdGluZy4iLAorIiIKK307CisK KyNpZmRlZiBUQ1BTT0NLRVQKK3N0YXRpYyBjaGFyICpobXh4ZmlyZXdbXSA9IHsKKyNpZmRlZiBP UzIKKyJGaXJld2FsbCBUcmF2ZXJzYWwgaW4gS2VybWl0IDk1IiwKKyNlbHNlCisiRmlyZXdhbGwg VHJhdmVyc2FsIGluIEMtS2VybWl0IiwKKyNlbmRpZgorIiAiLAorI2lmbmRlZiBORVdGVFAKKyNp Zm5kZWYgQ0tIVFRQCisjaWZuZGVmIENLX1NPQ0tTCisjZGVmaW5lIE5PRklSRVdBTEwKKyNlbmRp ZgorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBOT0ZJUkVXQUxMCisiVGhpcyB2ZXJzaW9uIG9mIEtl cm1pdCB3YXMgYnVpbHQgd2l0aCBubyBzdXBwb3J0IGZvciBmaXJld2FsbCB0cmF2ZXJzYWwiLAor InByb3RvY29scy4gIEtlcm1pdCBjYW4gYmUgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBIVFRQIFBy b3h5IFNlcnZlcnMsIiwKKyJTT0NLUyBhdXRob3JpemVkIGZpcmV3YWxsIHRyYXZlcnNhbCwgYW5k IEZUUCBQYXNzaXZlIGNvbm5lY3Rpb24gbW9kZXMuIiwKKyIgIiwKKyNlbHNlIC8qIE5PRklSRVdB TEwgKi8KKyNpZmRlZiBDS0hUVFAKKyJUaGUgc2ltcGxpc3QgZm9ybSBvZiBmaXJld2FsbCB0cmF2 ZXJzYWwgaXMgdGhlIEhUVFAgQ09OTkVDVCBjb21tYW5kLiBUaGUiLAorIkNPTk5FQ1QgY29tbWFu ZCB3YXMgaW1wbGVtZW50ZWQgdG8gYWxsb3cgYSBwdWJsaWMgd2ViIHNlcnZlciB3aGljaCB1c3Vh bGx5IiwKKyJyZXNpZGVzIG9uIHRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSBwdWJsaWMgYW5kIHBy aXZhdGUgbmV0d29ya3MgdG8gZm9yd2FyZCIsCisiSFRUUCByZXF1ZXN0cyBmcm9tIGNsaWVudHMg b24gdGhlIHByaXZhdGUgbmV0d29yayB0byBwdWJsaWMgd2ViIHNpdGVzLiAgVG8iLAorImFsbG93 IHNlY3VyZSB3ZWIgY29ubmVjdGlvbnMsIHRoZSBIVFRQIENPTk5FQ1QgY29tbWFuZCBhdXRoZW50 aWNhdGVzIHRoZSIsCisiY2xpZW50IHdpdGggYSB1c2VybmFtZS9wYXNzd29yZCBhbmQgdGhlbiBl c3RhYmxpc2hlcyBhIHR1bm5lbCB0byB0aGUiLAorImRlc2lyZWQgaG9zdC4iLAorCisiICIsCisK KyJXZWIgc2VydmVycyB0aGF0IHN1cHBvcnQgdGhlIENPTk5FQ1QgY29tbWFuZCBjYW4gYmUgY29u ZmlndXJlZCB0byBhbGxvdyIsCisib3V0Ym91bmQgY29ubmVjdGlvbnMgZm9yIGF1dGhlbnRpY2F0 ZWQgdXNlcnMgdG8gYW55IFRDUC9JUCBob3N0bmFtZS1wb3J0IiwKKyJjb21iaW5hdGlvbiBhY2Nl c3NpYmxlIHRvIHRoZSBXZWIgc2VydmVyLiAgSFRUUCBDT05ORUNUIGNhbiBiZSB1c2VkIG9ubHki LAorIndpdGggVENQLWJhc2VkIHByb3RvY29scy4gIFByb3RvY29scyBzdWNoIGFzIEtlcmJlcm9z IGF1dGhlbnRpY2F0aW9uIHRoYXQiLAorInVzZSBVRFAvSVAgY2Fubm90IGJlIHR1bm5lbGVkIHVz aW5nIEhUVFAgQ09OTkVDVC4iLAorCisiICIsCisKKyJTRVQgVENQIEhUVFAtUFJPWFkgW3N3aXRj aGVzXSBbPGhvc3RuYW1lIG9yIGlwLWFkZHJlc3M+Wzo8cG9ydD5dXSIsCisiICBJZiBhIGhvc3Ru YW1lIG9yIGlwLWFkZHJlc3MgaXMgc3BlY2lmaWVkLCBLZXJtaXQgdXNlcyB0aGUgZ2l2ZW4iLAor IiAgcHJveHkgc2VydmVyIHdoZW4gYXR0ZW1wdGluZyBvdXRnb2luZyBUQ1AgY29ubmVjdGlvbnMu ICBJZiBubyBob3N0bmFtZXIiLAorIiAgb3IgaXAtYWRkcmVzcyBpcyBzcGVjaWZpZWQsIGFueSBw cmV2aW91c2x5IHNwZWNpZmllZCBQcm94eSBzZXJ2ZXIgaXMiLAorIiAgcmVtb3ZlZC4gIElmIG5v IHBvcnQgbnVtYmVyIGlzIHNwZWNpZmllZCwgdGhlIFwiaHR0cFwiIHNlcnZpY2UgaXMgdXNlZC4i LAorIiAgW3N3aXRjaGVzXSBjYW4gYmUgb25lIG9yIG1vcmUgb2Y6IiwKKyIgICAgIC9BR0VOVDo8 YWdlbnQ+IC9VU0VSOjx1c2VyPiAvUEFTU1dPUkQ6PHBhc3N3b3JkPiIsCisiICBTd2l0Y2ggcGFy YW1ldGVycyBhcmUgdXNlZCB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIHByb3h5IHNlcnZlciBhbmQi LAorIiAgb3ZlcnJpZGUgYW55IG90aGVyIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5l Y3Rpb24uIiwKKyIgIiwKKworI2VuZGlmIC8qIENLSFRUUCAqLworI2lmZGVmIENLX1NPQ0tTCisK KyJJbiB0aGUgZWFybHkgMTk5MHMgYXMgZmlyZXdhbGxzIHdlcmUgYmVjb21pbmcgcHJldmFsZW50 LCBEYXZpZCBLb2JsYXMiLAorImRldmVsb3BlZCB0aGUgU09DS1MgcHJvdG9jb2wgZm9yIFRDUC9J UCBmaXJld2FsbCB0cmF2ZXJzYWwuICBUd28gdmVyc2lvbnMiLAorIm9mIFNPQ0tTIGFyZSBjdXJy ZW50bHkgaW4gdXNlOiBWZXJzaW9uIDQuMiBsZXRzIFRDUC9JUCBjbGllbnQgYXBwbGljYXRpb25z IiwKKyJ0cmF2ZXJzZSBmaXJld2FsbHMsIHNpbWlsYXIgdG8gSFRUUCBDT05ORUNULCBleGNlcHQg dGhhdCB0aGUgU09DS1MgY2xpZW50IiwKKyJpcyBhd2FyZSBvZiB0aGUgcHVibGljIHNvdXJjZSBJ UCBhZGRyZXNzIGFuZCBwb3J0LCB3aGljaCBjYW4gYmUgdXNlZCB3aXRoaW4iLAorInRoZSBhcHBs aWNhdGlvbiBwcm90b2NvbCB0byBhc3Npc3QgaW4gc2VjdXJpbmcgdGhlIGNvbm5lY3Rpb24gKGUu Zy4gRlRQIiwKKyJzZXNzaW9ucyBzZWN1cmVkIHdpdGggR1NTQVBJIEtlcmJlcm9zIDUpLiIsCisK KyIgIiwKKworIkluIDE5OTUgdGhlIElFVEYgaXNzdWVkIFNPQ0tTIFByb3RvY29sIFZlcnNpb24g NSAoUkZDIDE5MjgpLCB3aGljaCBpcyIsCisic2lnbmlmaWNhbnRseSBtb3JlIGdlbmVyYWwgdGhh biB2ZXJzaW9uIDQuICBCZXNpZGVzIHN1cHBvcnRpbmcgY2xpZW50LSIsCisidG8tc2VydmVyIFRD UC9JUCBjb25uZWN0aW9ucywgaXQgYWxzbyBpbmNsdWRlczoiLAorCisiICIsCisiIC4gQXV0aGVu dGljYXRlZCBmaXJld2FsbCB0cmF2ZXJzYWwgb2YgVURQL0lQIHBhY2tldHMuIiwKKyIgLiBBdXRo ZW50aWNhdGVkIGJpbmRpbmcgb2YgaW5jb21pbmcgcHVibGljIHBvcnRzIG9uIHRoZSBmaXJld2Fs bC4iLAorIiAiLAorCisiVGhpcyBsZXRzIGEgc2VydmljZSBvbiB0aGUgcHJpdmF0ZSBuZXR3b3Jr IG9mZmVyIHB1YmxpYyBzZXJ2aWNlcy4gIEl0IGFsc28iLAorImxldHMgY2xpZW50IGFwcGxpY2F0 aW9ucyBsaWtlIEZUUCBlc3RhYmxpc2ggYSB0ZW1wb3JhcnkgcHVibGljIHByZXNlbmNlIiwKKyJ0 aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBGVFAgc2VydmVyIHRvIGNyZWF0ZSBhIGRhdGEgY2hhbm5l bC4gIEJ5IGFsbG93aW5nIiwKKyJ0aGUgY2xpZW50IHRvIGJpbmQgdG8gYSBwdWJsaWMgcG9ydCBv biB0aGUgZmlyZXdhbGwgYW5kIGJlIGF3YXJlIG9mIHRoZSIsCisicHVibGljIGFkZHJlc3MsIFNP Q0tTIDUgbGV0cyB0aGUgYXBwbGljYXRpb24gcHJvdG9jb2wgY29tbXVuaWNhdGUgdGhpcyIsCisi aW5mb3JtYXRpb24gdG8gdGhlIHNlcnZlci4iLAorCisiICIsCisKKyNpZmRlZiBPUzIKKyNpZmRl ZiBOVAorIktlcm1pdCA5NSBzdXBwb3J0cyBTT0NLUyA0LjIuICBUaGUgU09DS1MgU2VydmVyIGlz IHNwZWNpZmllZCB3aXRoOiIsCisiICIsCisiICBTRVQgVENQIFNPQ0tTLVNFUlZFUiBob3N0bmFt ZS9pcC1hZGRyZXNzIiwKKyIgIiwKKyJUaGUgU09DS1MuQ09ORiBmaWxlIGlzIGZvdW5kIGJ5IGV4 YW1pbmluZyB0aGUgRVRDIGVudmlyb25tZW50IHZhcmlhYmxlOyIsCisic2VhcmNoaW5nIGluIFxc V0lORE9XUyBvbiBXaW5kb3dzIDk1Lzk4L01FOyBvciB0aGUiLAorIlxcV0lORE9XU1xcU1lTVEVN XFxEUklWRVJTXFxFVEMgZGlyZWN0b3J5IG9uIE5UXFwyMDAwXFxYUCBzeXN0ZW1zLiIsCisKKyNl bHNlIC8qIE5UICovCisKKyJLZXJtaXQvMiBwcm92aWRlcyBzdXBwb3J0IGZvciBTT0NLUyA0LjIg c2VydmVycyB3aGVuIHVzaW5nIElCTSBUQ1AvSVAgMi4wLCIsCisiSUJNIE9TLzIgV0FSUCwgb3Ig YSBjb21wYXRpYmxlIHByb3RvY29sIHN0YWNrLiBTT0NLUyBpcyBvbmUgcG9wdWxhciBtZWFucyIs Cisib2YgaW1wbGVtZW50aW5nIGEgZmlyZXdhbGwgYmV0d2VlbiBhIHByaXZhdGUgbmV0d29yayBh bmQgdGhlIEludGVybmV0LiIsCisiICIsCisiS2VybWl0LzIgc2hhcmVzIHRoZSBzYW1lIFNPQ0tT IGVudmlyb25tZW50IHZhcmlhYmxlcyBhcyBJQk0gR29waGVyLiBJdCBhbHNvIiwKKyJzdXBwb3J0 cyB0aGUgdXNlIG9mIGxvY2FsIFNPQ0tTIGNvbmZpZ3VyYXRpb24gZmlsZXMuIiwKKyIgIiwKKyJU byBzcGVjaWZ5IHRoZSBkZWZhdWx0IFNPQ0tTIFNlcnZlciwgYWRkIFNFVCBTT0NLU19TRVJWRVI9 IHRvIHlvdXIiLAorIkNPTkZJRy5TWVMgZmlsZS4iLAorIiAiLAorIklmIHlvdSBtdXN0IHVzZSBh IFNPQ0tTIERpc3RyaWJ1dGVkIE5hbWUgU2VydmVyLCBhZGQgU0VUIFNPQ0tTX05TPSB0byB5b3Vy IiwKKyJDT05GSUcuU1lTIGZpbGUuIiwKKyIgIiwKKworIklmIHlvdSBtdXN0IHVzZSBhIHNwZWNp ZmljIHdpdGggeW91ciBTT0NLUyBzZXJ2ZXIsIGJlIHN1cmUgdG8gYWRkIFNFVCBVU0VSPSIsCisi dG8geW91ciBDT05GSUcuU1lTIGZpbGUuIE90aGVyd2lzZSwgXCJvczJ1c2VyXCIgaXMgdXNlZCBi eSBkZWZhdWx0LiIsCisKKyIgIiwKKworIlRoZSBTT0NLUyBjb25maWd1cmF0aW9uIGZpbGUgbXVz dCBiZSBwbGFjZWQgaW4gdGhlIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IiwKKyJ0aGUgRVRDIGVu dmlyb25tZW50IHZhcmlhYmxlIGFzIGRlY2xhcmVkIGluIHlvdXIgQ09ORklHLlNZUyBmaWxlLiBU aGUgbmFtZSIsCisic2hvdWxkIGJlIFNPQ0tTLkNPTkYuIE9uIGEgRkFUIGZpbGUgc3lzdGVtLCB1 c2UgU09DS1MuQ05GLiIsCisKKyIgIiwKKyJUaGUgZm9ybWF0IG9mIHRoZSBsaW5lcyBpbiB0aGUg U09DS1MgY29uZmlndXJhdGlvbiBmaWxlIGFyZSBhcyBmb2xsb3dzOiIsCisiICIsCisiIC4gIyBj b21tZW50cyIsCisiIC4gZGVueSBbKj11c2VybGlzdF0gZHN0X2FkZHIgZHN0X21hc2sgW29wIHBv cnRdIiwKKyIgLiBkaXJlY3QgWyo9dXNlcmxpc3RdIGRzdF9hZGRyIGRzdF9tYXNrIFtvcCBwb3J0 XSIsCisiIC4gc29ja2QgW0A9c2VydmVybGlzdF0gWyo9dXNlcmxpc3RdIGRzdF9hZGRyIGRzdF9t YXNrIFtvcCBwb3J0XSIsCisiICIsCisKKyJvcCBtdXN0IGJlIG9uZSBvZiAnZXEnLCAnbmVxJywg J2x0JywgJ2d0JywgJ2xlJywgb3IgJ2dlJy4gZHN0X2FkZHIsIiwKKyJkc3RfbWFzaywgYW5kIHBv cnQgbWF5IGJlIGVpdGhlciBudW1lcmljIG9yIG5hbWUgZXF1aXZhbGVudHMuIiwKKworIiAiLAor CisiS2VybWl0LzIgaWdub3JlcyB0aGUgWyo9dXNlcmxpc3RdIGFuZCBbQD1zZXJ2ZXJsaXN0XSBm aWVsZHMuIE1hdGNoZXMgYXJlIiwKKyJkZXRlcm1pbmVkIG9uIGEgZmlyc3QgbWF0Y2ggbm90IGEg YmVzdCBtYXRjaCBiYXNpcy4gQWRkcmVzc2VzIGZvciB3aGljaCBubyIsCisibWF0Y2ggaXMgZm91 bmQgZGVmYXVsdCB0byBcInNvY2tkXCIuIiwKKworIiAiLAorCisiRm9yIGNvbXBsZXRlbmVzczog RmllbGRzIGluIHNxdWFyZSBicmFja2V0cyBhcmUgb3B0aW9uYWwuIFRoZSBvcHRpb25hbCIsCisi QD1zZXJ2ZXJsaXN0IGZpZWxkIHdpdGggYSAnc29ja2QnIGxpbmUgc3BlY2lmaWVzIHRoZSBsaXN0 IG9mIFNPQ0tTIHNlcnZlcnMiLAorInRoZSBjbGllbnQgc2hvdWxkIHRyeSAoaW4gdGhlIGdpdmVu IG9yZGVyKSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFNPQ0tTIiwKKyJzZXJ2ZXIuIElmIHRoZSBA PXNlcnZlcmxpc3QgcGFydCBpcyBvbWl0dGVkLCB0aGVuIHRoZSBkZWZhdWx0IFNPQ0tTIHNlcnZl ciIsCisiaXMgdXNlZC4gIENvbW1hcyBhcmUgdXNlZCBpbiB0aGUgdXNlcmxpc3QgYW5kIHNlcnZl cmxpc3QgYXMgc2VwYXJhdG9ycywgbm8iLAorIndoaXRlIHNwYWNlcyBhcmUgYWxsb3dlZC4iLAor CisjZW5kaWYgLyogTlQgKi8KKworIiAiLAorCisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBDS19T T0NLUzUKKyJUaGlzIHZlcnNpb24gb2YgQy1LZXJtaXQgc3VwcG9ydHMgU09DS1MgdmVyc2lvbiA1 LiIsCisjZWxzZSAvKiBDS19TT0NLUzUgKi8KKyJUaGlzIHZlcnNpb24gb2YgQy1LZXJtaXQgc3Vw cG9ydHMgU09DS1MgdmVyc2lvbiA0LiIsCisjZW5kaWYgLyogQ0tfU09DS1M1ICovCisKKyJTZWUg dGhlIG1hbiBwYWdlIChvciBvdGhlciBzeXN0ZW0gZG9jdW1lbnRhdGlvbikgZm9yIGluZm9ybWF0 aW9uIG9uIiwKKyJjb25maWd1cmluZyB0aGUgU09DS1MgbGlicmFyeSB2aWEgdGhlIC9ldGMvc29j a3MuY29uZiBmaWxlLiIsCisKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKyNlbmRpZiAvKiBDS19T T0NLUyAqLworCisjaWZkZWYgTkVXRlRQCisKKyJGVFAgaXMgb25lIG9mIHRoZSBmZXcgd2VsbC1r bm93biBJbnRlcm5ldCBzZXJ2aWNlcyB0aGF0IHJlcXVpcmVzIiwKKyJtdWx0aXBsZSBjb25uZWN0 aW9ucy4gIEFzIGRlc2NyaWJlZCBhYm92ZSwgRlRQIG9yaWdpbmFsbHkgcmVxdWlyZWQgdGhlIiwK KyJzZXJ2ZXIgdG8gZXN0YWJsaXNoIHRoZSBkYXRhIGNvbm5lY3Rpb24gdG8gdGhlIGNsaWVudCB1 c2luZyBhIGRlc3RpbmF0aW9uIiwKKyJhZGRyZXNzIGFuZCBwb3J0IHByb3ZpZGVkIGJ5IHRoZSBj bGllbnQuICBUaGlzIGRvZXNuJ3Qgd29yayB3aXRoIHBvcnQiLAorImZpbHRlcmluZyBmaXJld2Fs bHMuIiwKKworIiAiLAorCisiTGF0ZXIsIEZUUCBwcm90b2NvbCBhZGRlZCBhIFwicGFzc2l2ZVwi IG1vZGUsIGluIHdoaWNoIGNvbm5lY3Rpb25zIGZvciIsCisidGhlIGRhdGEgY2hhbm5lbHMgYXJl IGNyZWF0ZWQgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLiAgSW5zdGVhZCBvZiB0aGUiLAorInNl cnZlciBlc3RhYmxpc2hpbmcgYSBjb25uZWN0aW9uIHRvIHRoZSBjbGllbnQsIHRoZSBjbGllbnQg bWFrZXMgYSBzZWNvbmQiLAorImNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyIGFzIHRoZSBkZXN0 aW5hdGlvbi4gIFRoaXMgd29ya3MganVzdCBmaW5lIGFzIiwKKyJsb25nIGFzIHRoZSBjbGllbnQg aXMgYmVoaW5kIHRoZSBmaXJld2FsbCBhbmQgdGhlIHNlcnZlciBpcyBpbiBwdWJsaWMiLAorImFk ZHJlc3Mgc3BhY2UuICBJZiB0aGUgc2VydmVyIGlzIGJlaGluZCBhIGZpcmV3YWxsIHRoZW4gdGhl IHRyYWRpdGlvbmFsIiwKKyJhY3RpdmUgbW9kZSBtdXN0IGJlIHVzZWQuICBJZiBib3RoIHRoZSBj bGllbnQgYW5kIHNlcnZlciBhcmUgYmVoaW5kIHRoZWlyIiwKKyJvd24gcG9ydCBmaWx0ZXJpbmcg ZmlyZXdhbGxzIHRoZW4gZGF0YSBjaGFubmVscyBjYW5ub3QgYmUgZXN0YWJsaXNoZWQuIiwKKwor IiAiLAorCisiSW4gS2VybWl0J3MgRlRQIGNsaWVudCwgcGFzc2l2ZSBtb2RlIGlzIGNvbnRyb2xs ZWQgd2l0aCB0aGUgY29tbWFuZDoiLAorCisiICIsCisiICBTRVQgRlRQIFBBU1NJVkUtTU9ERSB7 IE9OLCBPRkYgfSIsCisiICIsCisKKyJUaGUgZGVmYXVsdCBpcyBPTiwgbWVhbmluZyB0byB1c2Ug cGFzc2l2ZSBtb2RlLiIsCisKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNlbmRpZiAvKiBOT0ZJUkVX QUxMICovCisKKyIiCit9OworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCitzdGF0aWMgY2hhciAq aG14eHNhdmVbXSA9IHsKKyJTeW50YXg6IFNBVkUgaXRlbSBmaWxlbmFtZSB7IE5FVywgQVBQRU5E IH0iLAorIiAgU2F2ZXMgdGhlIHJlcXVlc3RlZCBtYXRlcmlhbCBpbiB0aGUgZ2l2ZW4gZmlsZS4g IEEgbmV3IGZpbGUgaXMgY3JlYXRlZCIsCisiICBieSBkZWZhdWx0OyBpbmNsdWRlIEFQUEVORCBh dCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kIHRvIGFwcGVuZCB0byBhbiIsCisiICBleGlzdGluZyBm aWxlLiAgSXRlbXM6IiwKKyNpZm5kZWYgTk9TRVRLRVkKKyIgICAgS0VZTUFQICAgICAgICAgICAg ICAgU2F2ZXMgdGhlIGN1cnJlbnQga2V5IHNldHRpbmdzLiIsCisjZW5kaWYgLyogTk9TRVRLRVkg Ki8KKyNpZmRlZiBDS19SRUNBTEwKKyIgICAgQ09NTUFORCBISVNUT1JZICAgICAgU2F2ZXMgdGhl IGN1cnJlbnQgY29tbWFuZCByZWNhbGwgKGhpc3RvcnkpIGJ1ZmZlciIsCisjZW5kaWYgLyogQ0tf UkVDQUxMICovCisjaWZkZWYgT1MyCisiICAgIENPTU1BTkQgU0NST0xMQkFDSyAgIFNhdmVzIHRo ZSBjdXJyZW50IGNvbW1hbmQtc2NyZWVuIHNjcm9sbGJhY2sgYnVmZmVyIiwKKyIgICAgVEVSTUlO QUwgU0NST0xMQkFDSyAgU2F2ZXMgdGhlIGN1cnJlbnQgdGVybWluYWwtc2NyZWVuIHNjcm9sbGJh Y2sgYnVmZmVyIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIiCit9OworCisjaWZkZWYgQ0tST09UCitz dGF0aWMgY2hhciAqaG14eGNocm9vdFtdID0geworIlN5bnRheDogU0VUIFJPT1QgZGlyZWN0b3J5 bmFtZSIsCisiICBTZXRzIHRoZSByb290IGZvciBmaWxlIGFjY2VzcyB0byB0aGUgZ2l2ZW4gZGly ZWN0b3J5IGFuZCBkaXNhYmxlcyBhY2Nlc3MiLAorIiAgdG8gc3lzdGVtIGFuZCBzaGVsbCBjb21t YW5kcyBhbmQgZXh0ZXJuYWwgcHJvZ3JhbXMuICBPbmNlIHRoaXMgY29tbWFuZCIsCisiICBpcyBn aXZlbiwgbm8gZmlsZXMgb3IgZGlyZWN0b3JpZXMgb3V0c2lkZSB0aGUgdHJlZSByb290ZWQgYnkg dGhlIGdpdmVuIiwKKyIgIGRpcmVjdG9yeSBjYW4gYmUgb3BlbmVkLCByZWFkLCBsaXN0ZWQsIGRl bGV0ZWQsIHJlbmFtZWQsIG9yIGFjY2Vzc2VkIGluIiwKKyIgIGFueSBvdGhlciB3YXkuICBUaGlz IGNvbW1hbmQgY2FuIG5vdCBiZSB1bmRvbmUgYnkgYSBzdWJzZXF1ZW50IFNFVCBST09UIiwKKyIg IGNvbW1hbmQuICBQcmltYXJpbHkgZm9yIHVzZSB3aXRoIHNlcnZlciBtb2RlLCB0byByZXN0cmlj dCBhY2Nlc3Mgb2YiLAorIiAgY2xpZW50cyB0byBhIHBhcnRpY3VsYXIgZGlyZWN0b3J5IHRyZWUu ICBTeW5vbnltOiBDSFJPT1QuIiwKKyIiCit9OworI2VuZGlmIC8qIENLUk9PVCAqLworCitzdGF0 aWMgY2hhciAqaG14eHNjcm5bXSA9IHsKKyJTeW50YXg6IFNDUkVFTiB7IENMRUFSLCBDTEVPTCwg TU9WRSByb3cgY29sdW1uIH0iLAorI2lmZGVmIE9TMgorIiAgUGVyZm9ybXMgc2NyZWVuLWZvcm1h dHRpbmcgYWN0aW9ucy4iLAorI2Vsc2UKKyIgIFBlcmZvcm1zIHNjcmVlbi1mb3JtYXR0aW5nIGFj dGlvbnMuICBDb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGVzZSBjb21tYW5kcyIsCisiICBkZXBlbmRz IG9uIHByb3BlciB0ZXJtaW5hbCBzZXR1cCBvbiBib3RoIGVuZHMgb2YgdGhlIGNvbm5lY3Rpb24g LS0gbWFpbmx5IiwKKyIgIHRoYXQgdGhlIGhvc3QgdGVybWluYWwgdHlwZSBpcyBzZXQgdG8gYWdy ZWUgd2l0aCB0aGUga2luZCBvZiB0ZXJtaW5hbCBvciIsCisiICB0aGUgZW11bGF0aW9uIHlvdSBh cmUgdmlld2luZyBDLUtlcm1pdCB0aHJvdWdoLiIsCisjZW5kaWYgLyogT1MyICovCisiICIsCisi U0NSRUVOIENMRUFSIiwKKyIgIE1vdmVzIHRoZSBjdXJzb3IgdG8gaG9tZSBwb3NpdGlvbiBhbmQg Y2xlYXJzIHRoZSBlbnRpcmUgc2NyZWVuLiIsCisjaWZkZWYgT1MyCisiICBTeW5vbnltczogQ0xT LCBDTEVBUiBTQ1JFRU4sIENMRUFSIENPTU1BTkQtU0NSRUVOIEFMTCIsCisjZWxzZQorIiAgU3lu b255bXM6IENMUywgQ0xFQVIgU0NSRUVOLiIsCisjZW5kaWYgLyogT1MyICovCisiICIsCisiU0NS RUVOIENMRU9MIiwKKyIgIENsZWFycyBmcm9tIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiB0 byB0aGUgZW5kIG9mIHRoZSBsaW5lLiIsCisjaWZkZWYgT1MyCisiICBTeW5vbnltOiBDTEVBUiBD T01NQU5ELVNDUkVFTiBFT0wiLAorI2VuZGlmIC8qIE9TMiAqLworIiAiLAorIlNDUkVFTiBNT1ZF IHJvdyBjb2x1bW4iLAorIiAgTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgaW5kaWNhdGVkIHJvdyBh bmQgY29sdW1uLiAgVGhlIHJvdyBhbmQgY29sdW1uIiwKKyIgIG51bWJlcnMgYXJlIDEtYmFzZWQg c28gb24gYSAyNHg4MCBzY3JlZW4sIHRoZSBob21lIHBvc2l0aW9uIGlzIDEgMSBhbmQiLAorIiAg dGhlIGxvd2VyIHJpZ2h0IGNvcm5lciBpcyAyNCA4MC4gIElmIGEgcm93IG9yIGNvbHVtbiBudW1i ZXIgaXMgZ2l2ZW4gdGhhdCIsCisiICB0b28gbGFyZ2UgZm9yIHdoYXQgS2VybWl0IG9yIHRoZSBv cGVyYXRpbmcgc3lzdGVtIHRoaW5rcyBpcyB5b3VyIHNjcmVlbiIsCisiICBzaXplLCB0aGUgYXBw cm9wcmlhdGUgbnVtYmVyIGlzIHN1YnN0aXR1dGVkLiIsCisiICIsCisiQWxzbyBzZWU6IiwKKyNp ZmRlZiBPUzIKKyIgIEhFTFAgRlVOQ1RJT04gU0NSTkNVUlgsIEhFTFAgRlVOQ1RJT04gU0NSTkNV UlksIEhFTFAgRlVOQ1RJT04gU0NSU1RSLCIsCisjZW5kaWYgLyogT1MyICovCisiICBTSE9XIFZB UklBQkxFIFRFUk1JTkFMLCBTSE9XIFZBUklBQkxFIENPTFMsIFNIT1cgVkFSIFJPV1MsIFNIT1cg Q09NTUFORC4iLAorIiIKK307CisKKyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBjaGFyICpobWZ3b3Jk W10gPSB7CisiRnVuY3Rpb24gXFxmd29yZChzMSxuMSxzMixzMyxuMixuMykgLSBFeHRyYWN0cyBh IHdvcmQgZnJvbSBhIHN0cmluZy4iLAorIiAgICBzMSA9IHNvdXJjZSBzdHJpbmcuIiwKKyIgICAg bjEgPSB3b3JkIG51bWJlciAoMS1iYXNlZCkgY291bnRpbmcgZnJvbSBsZWZ0OyBpZiBuZWdhdGl2 ZSwgZnJvbSByaWdodC4iLAorIiAgICBzMiA9IG9wdGlvbmFsIGJyZWFrIHNldC4iLAorIiAgICBz MyA9IG9wdGlvbmFsIGluY2x1ZGUgc2V0IChvciBBTEwsIENTViwgb3IgVFNWKS4iLAorIiAgICBu MiA9IG9wdGlvbmFsIGdyb3VwaW5nIG1hc2suIiwKKyIgICAgbjMgPSBvcHRpb25hbCBzZXBhcmF0 b3IgZmxhZzoiLAorIiAgICAgICAwID0gY29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9yczsiLAor IiAgICAgICAxID0gZG9uJ3QgY29sbGFwc2UgYWRqYWNlbnQgc2VwYXJhdG9ycy4iLAorIiAiLAor IiAgXFxmd29yZCgpIHJldHVybnMgdGhlIG4xdGggXCJ3b3JkXCIgb2YgdGhlIHN0cmluZyBzMSwg YWNjb3JkaW5nIHRvIHRoZSIsCisiICBjcml0ZXJpYSBzcGVjaWZpZWQgYnkgdGhlIG90aGVyIHBh cmFtZXRlcnMuIiwKKyIgIiwKKyIgIFRoZSBCUkVBSyBTRVQgaXMgdGhlIHNldCBvZiBhbGwgY2hh cmFjdGVycyB0aGF0IHNlcGFyYXRlIHdvcmRzLiBUaGUiLAorIiAgZGVmYXVsdCBicmVhayBzZXQg aXMgYWxsIGNoYXJhY3RlcnMgZXhjZXB0IEFTQ0lJIGxldHRlcnMgYW5kIGRpZ2l0cy4iLAorIiAg QVNDSUkgKEMwKSBjb250cm9sIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWQgYXMgYnJlYWsgY2hhcmFj dGVycyBieSBkZWZhdWx0LCIsCisiICBhcyBhcmUgc3BhY2luZyBhbmQgcHVuY3R1YXRpb24gY2hh cmFjdGVycywgYnJhY2tldHMsIGFuZCBzbyBvbiwgYW5kIiwKKyIgIGFsbCA4LWJpdCBjaGFyYWN0 ZXJzLiIsCisiICIsCisiICBUaGUgSU5DTFVERSBTRVQgaXMgdGhlIHNldCBvZiBjaGFyYWN0ZXJz IHRoYXQgYXJlIHRvIGJlIHRyZWF0ZWQgYXMgIiwKKyIgIHBhcnRzIG9mIHdvcmRzIGV2ZW4gdGhv dWdoIHRoZXkgbm9ybWFsbHkgd291bGQgYmUgc2VwYXJhdG9ycy4gIFRoZSIsCisiICBkZWZhdWx0 IGluY2x1ZGUgc2V0IGlzIGVtcHR5LiAgVGhyZWUgc3BlY2lhbCBzeW1ib2xpYyBpbmNsdWRlIHNl dHMgYXJlIiwKKyIgIGFsc28gYWxsb3dlZDoiLAorIiAgICIsCisiICAgIEFMTCAobWVhbmluZyBp bmNsdWRlIGFsbCBieXRlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGJyZWFrIHNldCkiLAorIiAgICBD U1YgKHNwZWNpYWwgdHJlYXRtZW50IGZvciBDb21tYS1TZXBhcmF0ZWQtVmFsdWUgcmVjb3Jkcyki LAorIiAgICBUU1YgKHNwZWNpYWwgdHJlYXRtZW50IGZvciBUYWItU2VwYXJhdGVkLVZhbHVlIHJl Y29yZHMpIiwKKyIgIiwKKyIgIEZvciBvcGVyYXRpbmcgb24gOC1iaXQgY2hhcmFjdGVyIHNldHMs IHRoZSBpbmNsdWRlIHNldCBzaG91bGQgYmUgQUxMLiIsCisiICIsCisiICBJZiB0aGUgR1JPVVBJ TkcgTUFTSyBpcyBnaXZlbiBhbmQgaXMgbm9uemVybywgd29yZHMgY2FuIGJlIGdyb3VwZWQgYnki LAorIiAgcXVvdGVzIG9yIGJyYWNrZXRzIHNlbGVjdGVkIGJ5IHRoZSBzdW0gb2YgdGhlIGZvbGxv d2luZzoiLAorIiAiLAorIiAgICAgMSA9IGRvdWJsZXF1b3RlczogICAgXCJhIGIgY1wiIiwKKyIg ICAgIDIgPSBicmFjZXM6ICAgICAgICAgIHthIGIgY30iLAorIiAgICAgNCA9IGFwb3N0cm9waGVz OiAgICAgJ2EgYiBjJyIsCisiICAgICA4ID0gcGFyZW50aGVzZXM6ICAgICAoYSBiIGMpIiwKKyIg ICAgMTYgPSBzcXVhcmUgYnJhY2tldHM6IFthIGIgY10iLAorIiAgICAzMiA9IGFuZ2xlIGJyYWNr ZXRzOiAgPGEgYiBjPiIsCisiICIsCisiICBOZXN0aW5nIGlzIHBvc3NpYmxlIHdpdGgge30oKVtd PD4gYnV0IG5vdCB3aXRoIHF1b3RlcyBvciBhcG9zdHJvcGhlcy4iLAorIiAiLAorIlJldHVybnMg c3RyaW5nOiIsCisiICBXb3JkIG51bWJlciBuMSwgaWYgdGhlcmUgaXMgb25lLCBvdGhlcndpc2Ug YW4gZW1wdHkgc3RyaW5nLiIsCisiICIsCisiQWxzbyBzZWU6IiwKKyIgIEhFTFAgRlVOQ1RJT04g U1BMSVQiLAorIiIKK307CisKK3N0YXRpYyBjaGFyICpobXh4cHJvbXB0W10gPSB7CisiU3ludGF4 OiBQUk9NUFQgWyB0ZXh0IF0iLAorIiAgRW50ZXJzIGludGVyYWN0aXZlIGNvbW1hbmQgbGV2ZWwg ZnJvbSB3aXRoaW4gYSBzY3JpcHQgaW4gc3VjaCBhIHdheSB0aGF0IiwKKyIgIHRoZSBzY3JpcHQg Y2FuIGJlIGNvbnRpbnVlZCB3aXRoIGFuIEVORCBvciBSRVRVUk4gY29tbWFuZC4gIFNUT1AsIEVY SVQsIiwKKyIgIFNIT1cgU1RBQ0ssIFRSQUNFLCBhbmQgQ3RybC1DIGFsbCBoYXZlIHRoZWlyIG5v cm1hbCBlZmZlY3RzLiAgVGhlIFBST01QVCIsCisiICBjb21tYW5kIGFsbG93cyB2YXJpYWJsZXMg dG8gYmUgZXhhbWluZWQgb3IgY2hhbmdlZCwgb3IgYW55IG90aGVyIGNvbW1hbmRzIiwKKyIgIHRv IGJlIGdpdmVuLCBpbiBhbnkgbnVtYmVyLCBwcmlvciB0byByZXR1cm5pbmcgdG8gdGhlIHNjcmlw dCwgYWxsb3dpbmciLAorIiAgS2VybWl0IHRvIHNlcnZlIGFzIGl0cyBvd24gZGVidWdnZXI7IGFk ZGluZyB0aGUgUFJPTVBUIGNvbW1hbmQgdG8gYSBzY3JpcHQiLAorIiAgaXMgbGlrZSBzZXR0aW5n IGEgYnJlYWtwb2ludC4gIElmIHRoZSBvcHRpb25hbCB0ZXh0IGlzIGluY2x1ZGVkLCBpdCBpcyIs CisiICB1c2VkIGFzIHRoZSBuZXcgcHJvbXB0IGZvciB0aGlzIGxldmVsLCBlLmcuIFwicHJvbXB0 IEJyZWFrcG9pbnRfMT5cIi4iLAorIiIKK307CisKK3N0YXRpYyBjaGFyICpoeHhpbnBbXSA9IHsK KyJTeW50YXg6ICBJTlBVVCBbIC9DT1VOVDpuIC9DTEVBUiAvTk9NQVRDSCAvTk9XUkFQIF0gXAor eyBudW1iZXItb2Ytc2Vjb25kcywgdGltZS1vZi1kYXkgfSBbIHRleHQgXSIsCisiICIsCisiRXhh bXBsZXM6IiwKKyIgIElOUFVUIDUgTG9naW46IiwKKyIgIElOUFVUIDIzOjU5OjU5IFJJTkciLAor IiAgSU5QVVQgL05PTUFUQ0ggMTAiLAorIiAgSU5QVVQgL0NMRUFSIDEwIFxcMTNcXDEwIiwKKyIg IElOUFVUIC9DTEVBUiAxMCBcXDEzXFwxMCRcMzIiLAorIiAgSU5QVVQgL0NPVU5UOjI1NiAxMCIs CisiICBJTlBVVCAxMCBcXGZwYXR0ZXJuKDwqQCouKj4pIiwKKyIgIiwKKyIgIFdhaXRzIHVwIHRv IHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcywgb3IgdW50aWwgdGhlIGdpdmVuIHRpbWUgb2Yg ZGF5LCIsCisiICBmb3IgdGhlIGdpdmVuIHRleHQgdG8gYXJyaXZlIG9uIHRoZSBjb25uZWN0aW9u LiBGb3IgdXNlIGluIHNjcmlwdCBwcm9ncmFtcyIsCisiICB3aXRoIElGIEZBSUxVUkUgb3IgSUYg U1VDQ0VTUywgd2hpY2ggdGVsbCB3aGV0aGVyIHRoZSBkZXNpcmVkIHRleHQgYXJyaXZlZCIsCisi ICB3aXRoaW4gdGhlIGdpdmVuIGFtb3VudCBvZiB0aW1lLiIsCisiICIsCisiICBUaGUgdGV4dCwg aWYgZ2l2ZW4sIGNhbiBiZSBhIHJlZ3VsYXIgdGV4dCBvciBpdCBjYW4gYmUgYSBcXHBhdHRlcm4o KSIsCisiICBpbnZvY2F0aW9uLCBpbiB3aGljaCBjYXNlIGl0IGlzIHRyZWF0ZWQgYXMgYSBwYXR0 ZXJuIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCIsCisiICBzdHJpbmcgKEhFTFAgUEFUVEVSTlMgZm9y IGRldGFpbHMpLiIsCisiICIsCisiICBJZiB0aGUgL0NPVU5UOiBzd2l0Y2ggaXMgaW5jbHVkZWQs IElOUFVUIHdhaXRzIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIiwKKyIgIGNoYXJhY3RlcnMgdG8g YXJyaXZlLiIsCisiICIsCisiICBJZiBubyB0ZXh0IGlzIHNwZWNpZmllZCwgSU5QVVQgd2FpdHMg Zm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBhcnJpdmVzIiwKKyIgIGFuZCBtYWtlcyBpdCBh dmFpbGFibGUgaW4gdGhlIFxcdihpbmNoYXIpIHZhcmlhYmxlLiAgVGhpcyBpcyBlcXVpdmFsZW50 IHRvIiwKKyIgIGluY2x1ZGluZyBhIC9DT1VOVDogc3dpdGNoIHdpdGggYW4gYXJndW1lbnQgb2Yg MS4iLAorIiAiLAorIiAgSWYgdGhlIC9OT01BVENIIHN3aXRjaCBpcyBpbmNsdWRlZCwgSU5QVVQg ZG9lcyBub3QgYXR0ZW1wdCB0byBtYXRjaCBhbnkiLAorIiAgY2hhcmFjdGVycywgYnV0IGNvbnRp bnVlcyByZWFkaW5nIGZyb20gdGhlIGNvbW11bmljYXRpb24gY29ubmVjdGlvbiB1bnRpbCIsCisi ICB0aGUgdGltZW91dCBpbnRlcnZhbCBleHBpcmVzLiAgSWYgdGhlIHRpbWVvdXQgaW50ZXJ2YWwg aXMgMCwgdGhlIElOUFVUIiwKKyIgIGNvbW1hbmQgZG9lcyBub3Qgd2FpdDsgaS5lLiB0aGUgZ2l2 ZW4gdGV4dCBtdXN0IGFscmVhZHkgYmUgYXZhaWxhYmxlIGZvciIsCisiICByZWFkaW5nIGZvciB0 aGUgSU5QVVQgY29tbWFuZCB0byBzdWNjZWVkLiAgSWYgdGhlIGludGVydmFsIGlzIG5lZ2F0aXZl LCIsCisiICB0aGUgSU5QVVQgY29tbWFuZCB3YWl0cyBmb3JldmVyLiIsCisiICIsCisiICBUaGUg SU5QVVQgYnVmZmVyLCBcXHYoaW5wdXQpLCBpcyBub3JtYWxseSBjaXJjdWxhci4gIEluY29taW5n IG1hdGVyaWFsIGlzIiwKKyIgIGFwcGVuZGVkIHRvIGl0IHVudGlsIGl0IHJlYWNoZXMgdGhlIGVu ZCwgYW5kIHRoZW4gaXQgd3JhcHMgYXJvdW5kIHRvIHRoZSIsCisiICBiZWdpbm5pbmcuICBJZiB0 aGUgL0NMRUFSIHN3aXRjaCBpcyBnaXZlbiwgSU5QVVQgY2xlYXJzIGl0cyBidWZmZXIgYmVmb3Jl IiwKKyIgIHJlYWRpbmcgZnJvbSB0aGUgY29ubmVjdGlvbi4iLAorIiAiLAorIiAgVHlwaWNhbCBl eGFtcGxlIG9mIHVzZToiLAorIiAiLAorIiAgICBJTlBVVCAxMCBsb2dpbjoiLAorIiAgICBJRiBG QUlMIEVYSVQgMSBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBsb2dpbiBwcm9tcHRcIiIsCisiICAg IExJTkVPVVQgbXl1c2VyaWQiLAorIiAgICBJTlBVVCAxMCBQYXNzd29yZDoiLAorIiAgICBJRiBG QUlMIEVYSVQgMSBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBQYXNzd29yZCBwcm9tcHRcIiIsCisi ICAgIExJTkVPVVQgeHh4eHh4eCIsCisiICIsCisiICBUaGUgL05PV1JBUCBzd2l0Y2ggbWVhbnMg dGhhdCBJTlBVVCBzaG91bGQgcmV0dXJuIHdpdGggZmFpbHVyZSBzdGF0dXMiLAorIiAgYW5kIHdp dGggXFx2KGluc3RhdHVzKSBzZXQgdG8gNiBpZiBpdHMgaW50ZXJuYWwgYnVmZmVyIGZpbGxzIHVw IGJlZm9yZSIsCisiICBhbnkgb2YgdGhlIG90aGVyIGNvbXBsZXRpb24gY3JpdGVyaWEgYXJlIG1l dC4gIFRoaXMgYWxsb3dzIGZvciBjYXB0dXJlIiwKKyIgIG9mIHRoZSBjb21wbGV0ZSBpbmNvbWlu ZyBkYXRhIHN0cmVhbSAoZXhjZXB0IE5VTCBieXRlcywgd2hpY2ggYXJlIiwKKyIgIGRpc2NhcmRl ZCkuICBDQVVUSU9OOiBpZiB0aGUgc2VhcmNoIHRhcmdldCAoaWYgYW55KSBzcGFucyB0aGUgSU5Q VVQgYnVmZmVyIiwKKyIgIGJvdW5kYXJ5LCBJTlBVVCB3aWxsIG5vdCBzdWNjZWVkLiIsCisiICIs CisiICBcCitcXHYoaW5zdGF0dXMpIHZhbHVlcyBhcmU6IDAgKHN1Y2Nlc3MpLCAxICh0aW1lZCBv dXQpLCAyIChrZXlib2FyZCBpbnRlcnJ1cHQpLCIsCisiICAzIChpbnRlcm5hbCBlcnJvciksIDQg KEkvTyBlcnJvciBvciBjb25uZWN0aW9uIGxvc3QpLCA1IChJTlBVVCBkaXNhYmxlZCksIiwKKyIg IGFuZCA2IChidWZmZXIgZmlsbGVkIGFuZCAvTk9XUkFQIHNldCk7IHRoZXNlIGFyZSBzaG93biBi eSBcXHYoaW5tZXNzYWdlKS4iLAorIiAiLAorIiAgQWxzbyBzZWUgT1VUUFVULCBNSU5QVVQsIFJF SU5QVVQsIFNFVCBJTlBVVCBhbmQgQ0xFQVIuICBTZWUgSEVMUCBQQVVTRSBmb3IiLAorIiAgZGV0 YWlscyBvbiB0aW1lLW9mLWRheSBmb3JtYXQgYW5kIEhFTFAgUEFUVEVSTlMgZm9yIHBhdHRlcm4g c3ludGF4LiIsCisiIn07CisKK3N0YXRpYyBjaGFyICpoeHhvdXRbXSA9IHsKKyJTeW50YXg6IE9V VFBVVCB0ZXh0IiwKKyIgIFNlbmRzIHRoZSB0ZXh0IG91dCB0aGUgY29tbXVuaWNhdGlvbnMgY29u bmVjdGlvbiwgYXMgaWYgeW91IGhhZCB0eXBlZCBpdCIsCisiICBkdXJpbmcgQ09OTkVDVCBtb2Rl LiAgVGhlIHRleHQgbWF5IGNvbnRhaW4gYmFja3NsYXNoIGNvZGVzLCB2YXJpYWJsZXMsIiwKKyIg IGV0YywgcGx1cyB0aGUgZm9sbG93aW5nIHNwZWNpYWwgY29kZXM6IiwKKyIgIiwKKyIgICAgXFxO IC0gU2VuZCBhIE5VTCAoQVNDSUkgMCkgY2hhcmFjdGVyICh5b3UgY2FuJ3QgdXNlIFxcMCBmb3Ig dGhpcykuIiwKKyIgICAgXFxCIC0gU2VuZCBhIEJSRUFLIHNpZ25hbC4iLAorIiAgICBcXEwgLSBT ZW5kIGEgTG9uZyBCUkVBSyBzaWduYWwuIiwKKyIgIiwKKyJBbHNvIHNlZSBTRVQgT1VUUFVULiIs CisiIiB9OworI2VuZGlmIC8qIE5PU1BMICovCisKK3N0YXRpYyBjaGFyICpoeHlwYXJpW10gPSB7 CisiU0VUIFBBUklUWSBOT05FIiwKKyIgIENob29zZXMgOCBkYXRhIGJpdHMgYW5kIG5vIHBhcml0 eS4iLAorIiAiLAorIlNFVCBQQVJJVFkgeyBFVkVOLCBPREQsIE1BUkssIFNQQUNFIH0iLAorIiAg Q2hvb3NlcyA3IGRhdGEgYml0cyBwbHVzIHRoZSBpbmRpY2F0ZWQga2luZCBvZiBwYXJpdHkuIiwK KyIgIEZvcmNlcyA4dGgtYml0IHByZWZpeGluZyBkdXJpbmcgZmlsZSB0cmFuc2Zlci4iLAorIiAi LAorI2lmZGVmIEhXUEFSSVRZCisiU0VUIFBBUklUWSBIQVJEV0FSRSB7IEVWRU4sIE9ERCB9IiwK KyIgIENob29zZXMgOCBkYXRhIGJpdHMgcGx1cyB0aGUgaW5kaWNhdGVkIGtpbmQgb2YgcGFyaXR5 LiIsCisiICIsCisiQWxzbyBzZWUgU0VUIFRFUk1JTkFMIEJZVEVTSVpFLCBTRVQgU0VSSUFMLCBh bmQgU0VUIFNUT1AtQklUUy4iLAorI2Vsc2UKKyJBbHNvIHNlZSBTRVQgVEVSTUlOQUwgQllURVNJ WkUgYW5kIFNFVCBTRVJJQUwuIiwKKyNlbmRpZiAvKiBIV1BBUklUWSAqLworIiJ9OworCisjaWZu ZGVmIE5PTE9DQUwKK3N0YXRpYyBjaGFyICpoeHllc2NbXSA9IHsKKyNpZmRlZiBPUzIKKyJTeW50 YXg6IFNFVCBFU0NBUEUgbnVtYmVyIiwKKyIgIERlY2ltYWwgQVNDSUkgdmFsdWUgZm9yIGVzY2Fw ZSBjaGFyYWN0ZXIgZHVyaW5nIENPTk5FQ1QsIG5vcm1hbGx5IDI5IiwKKyIgIChDb250cm9sLV0p LiAgVHlwZSB0aGUgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSBDIHRvIGdldCBiYWNrIHRv IHRoZSIsCisiICBDLUtlcm1pdCBwcm9tcHQgb3IgZm9sbG93ZWQgYnkgPyB0byBzZWUgb3RoZXIg b3B0aW9ucywgb3IgdXNlIHRoZSBcXEtleGl0IiwKKyIgIGtleWJvYXJkIHZlcmIsIG5vcm1hbGx5 IGFzc2lnbmVkIHRvIEFsdC14LiIsCisjZWxzZQorI2lmZGVmIE5FWFQKKyJTeW50YXg6IFNFVCBF U0NBUEUgbnVtYmVyIiwKKyIgIERlY2ltYWwgQVNDSUkgdmFsdWUgZm9yIGVzY2FwZSBjaGFyYWN0 ZXIgZHVyaW5nIENPTk5FQ1QsIG5vcm1hbGx5IDI5IiwKKyIgIChDb250cm9sLV0pLiAgVHlwZSB0 aGUgZXNjYXBlIGNoYXJhY3RlciBmb2xsb3dlZCBieSBDIHRvIGdldCBiYWNrIHRvIHRoZSIsCisi ICBDLUtlcm1pdCBwcm9tcHQgb3IgZm9sbG93ZWQgYnkgPyB0byBzZWUgb3RoZXIgb3B0aW9ucy4i LAorI2Vsc2UKKyJTeW50YXg6IFNFVCBFU0NBUEUgbnVtYmVyIiwKKyIgIERlY2ltYWwgQVNDSUkg dmFsdWUgZm9yIGVzY2FwZSBjaGFyYWN0ZXIgZHVyaW5nIENPTk5FQ1QsIG5vcm1hbGx5IDI4IiwK KyIgIChDb250cm9sLVxcKS4gIFR5cGUgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkg QyB0byBnZXQgYmFjayB0byB0aGUiLAorIiAgQy1LZXJtaXQgcHJvbXB0IG9yIGZvbGxvd2VkIGJ5 ID8gdG8gc2VlIG90aGVyIG9wdGlvbnMuIiwKKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyog T1MyICovCisiICIsCisiWW91IG1heSBhbHNvIGVudGVyIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGFz IF5YIChjaXJjdW1mbGV4IGZvbGxvd2VkIGJ5IGEiLAorImxldHRlciBvciBvbmUgb2Y6IEAsIF4s IF8sIFssIFxcLCBvciBdLCB0byBpbmRpY2F0ZSBhIGNvbnRyb2wgY2hhcmFjdGVyOyIsCisiZm9y IGV4YW1wbGUsIFNFVCBFU0MgXl8gc2V0cyB5b3VyIGVzY2FwZSBjaGFyYWN0ZXIgdG8gQ3RybC1V bmRlcnNjb3JlLiIsCisiICIsCisiWW91IGNhbiBhbHNvIHNwZWNpZnkgYW4gOC1iaXQgY2hhcmFj dGVyICgxMjgtMjU1KSBhcyB5b3VyIGVzY2FwZSBjaGFyYWN0ZXIsIiwKKyJlaXRoZXIgYnkgdHlw aW5nIGl0IGxpdGVyYWxseSBvciBieSBlbnRlcmluZyBpdHMgbnVtZXJpYyBjb2RlLiIsCisiIiB9 OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1NQTAorc3RhdGljIGNoYXIgKmh4 eW91dFtdID0geworIlNFVCBPVVRQVVQgUEFDSU5HIDxudW1iZXI+IiwKKyIgIEhvdyBtYW55IG1p bGxpc2Vjb25kcyB0byBwYXVzZSBhZnRlciBzZW5kaW5nIGVhY2ggT1VUUFVUIGNoYXJhY3Rlciwi LAorIiAgbm9ybWFsbHkgMC4iLAorIiAiLAorIlNFVCBPVVRQVVQgU1BFQ0lBTC1FU0NBUEVTIHsg T04sIE9GRiB9IiwKKyIgIFdoZXRoZXIgdG8gcHJvY2VzcyB0aGUgc3BlY2lhbCBPVVRQVVQtb25s eSBlc2NhcGVzIFxcQiwgXFxMLCBhbmQgXFxOLiIsCisiICBOb3JtYWxseSBPTiAodGhleSBhcmUg cHJvY2Vzc2VkKS4iLAorIiIgfTsKKworc3RhdGljIGNoYXIgKmh4eWlucFtdID0geworIlN5bnRh eDogU0VUIElOUFVUIHBhcmFtZXRlciB2YWx1ZSIsCisiICIsCisjaWZkZWYgQ0tfQVVUT0RMCisi U0VUIElOUFVUIEFVVE9ET1dOTE9BRCB7IE9OLCBPRkYgfSIsCisiICBDb250cm9scyB3aGV0aGVy IGF1dG9kb3dubG9hZHMgYXJlIGFsbG93ZWQgZHVyaW5nIElOUFVUIGNvbW1hbmQgZXhlY3V0aW9u LiIsCisiICIsCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisiU0VUIElOUFVUIEJVRkZFUi1MRU5H VEggbnVtYmVyLW9mLWJ5dGVzIiwKKyIgIFJlbW92ZXMgdGhlIG9sZCBJTlBVVCBidWZmZXIgYW5k IGNyZWF0ZXMgYSBuZXcgb25lIHdpdGggdGhlIGdpdmVuIGxlbmd0aC4iLAorIiAiLAorIlNFVCBJ TlBVVCBDQU5DRUxMQVRJT04geyBPTiwgT0ZGIH0iLAorIiAgV2hldGhlciBhbiBJTlBVVCBpbiBw cm9ncmVzcyBjYW4gYmUgY2FuIGludGVycnVwdGVkIGZyb20gdGhlIGtleWJvYXJkLiIsCisiICIs CisiU0VUIElOUFVUIENBU0UgeyBJR05PUkUsIE9CU0VSVkUgfSIsCisiICBUZWxscyB3aGV0aGVy IGFscGhhYmV0aWMgY2FzZSBpcyB0byBiZSBzaWduaWZpY2FudCBpbiBzdHJpbmcgY29tcGFyaXNv bnMuIiwKKyIgIFRoaXMgc2V0dGluZyBpcyBsb2NhbCB0byB0aGUgY3VycmVudCBtYWNybyBvciBj b21tYW5kIGZpbGUsIGFuZCBpcyIsCisiICBpbmhlcml0ZWQgYnkgc3Vib3JkaW5hdGUgbWFjcm9z IGFuZCB0YWtlIGZpbGVzLiIsCisiICIsCisiU0VUIElOUFVUIEVDSE8geyBPTiwgT0ZGIH0iLAor IiAgVGVsbHMgd2hldGhlciB0byBkaXNwbGF5IGFycml2aW5nIGNoYXJhY3RlcnMgcmVhZCBieSBJ TlBVVCBvbiB0aGUgc2NyZWVuLiIsCisiICIsCisjaWZkZWYgQ0tGTE9BVAorIlNFVCBJTlBVVCBT Q0FMRS1GQUNUT1IgPG51bWJlcj4iLAorIiAgQSBudW1iZXIgdG8gbXVsdGlwbHkgYWxsIElOUFVU IHRpbWVvdXRzIGJ5LCB3aGljaCBtYXkgaW5jbHVkZSBhIGZyYWN0aW9uYWwiLAorIiAgcGFydCwg ZS5nLiAyLjUuICBBbGwgSU5QVVQgY29tbWFuZHMgdGhhdCBzcGVjaWZ5IGEgdGltZW91dCBpbiBz ZWNvbmRzIiwKKyIgIChhcyBvcHBvc2VkIHRvIGEgc3BlY2lmaWMgdGltZSBvZiBkYXkpIGhhdmUg dGhlaXIgdGltZSBsaW1pdCBhZGp1c3RlZCIsCisiICBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgZmFj dG9yLCB3aGljaCBpcyBhbHNvIGF2YWlsYWJsZSBpbiB0aGUgYnVpbHQtaW4iLAorIiAgcmVhZC1v bmx5IHZhcmlhYmxlIFxcdihpbnNjYWxlKS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuMC4iLAor IiAiLAorCisjZW5kaWYJLyogQ0tGTE9BVCAqLworCisiU0VUIElOUFVUIFNJTEVOQ0UgPG51bWJl cj4iLAorIiAgVGhlIG1heGltdW0gbnVtYmVyIHRvIHNlY29uZHMgb2Ygc2lsZW5jZSAobm8gaW5w dXQgYXQgYWxsKSBiZWZvcmUgdGhlIiwKKyIgIElOUFVUIGNvbW1hbmQgdGltZXMgb3V0LCAwIGZv ciBubyBtYXhpbXVtLiIsCisiICIsCisjaWZkZWYgT1MyCisiU0VUIElOUFVUIFRFUk1JTkFMIHsg T04sIE9GRiB9IiwKKyIgIERldGVybWluZXMgd2hldGhlciB0aGUgZGF0YSByZWNlaXZlZCBkdXJp bmcgYW4gSU5QVVQgY29tbWFuZCBpcyBkaXNwbGF5ZWQiLAorIiAgaW4gdGhlIHRlcm1pbmFsIHdp bmRvdy4gIERlZmF1bHQgaXMgT04uIiwKKyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyJTRVQgSU5Q VVQgVElNRU9VVC1BQ1RJT04geyBQUk9DRUVELCBRVUlUIH0iLAorIiAgVGVsbHMgd2hldGhlciB0 byBwcm9jZWVkIG9yIHF1aXQgZnJvbSBhIHNjcmlwdCBwcm9ncmFtIGlmIGFuIElOUFVUIGNvbW1h bmQiLAorIiAgZmFpbHMuICBQUk9DRUVEIChkZWZhdWx0KSBhbGxvd3MgdXNlIG9mIElGIFNVQ0NF U1MgLyBJRiBGQUlMVVJFIGNvbW1hbmRzLiIsCisiICBUaGlzIHNldHRpbmcgaXMgbG9jYWwgdG8g dGhlIGN1cnJlbnQgbWFjcm8gb3IgY29tbWFuZCBmaWxlLCBhbmQgaXMiLAorIiAgaW5oZXJpdGVk IGJ5IHN1Ym9yZGluYXRlIG1hY3JvcyBhbmQgdGFrZSBmaWxlcy4iLAorIiIgfTsKKworc3RhdGlj IGNoYXIgKmh4eWZ1bmNbXSA9IHsKKyJTRVQgRlVOQ1RJT04gRElBR05PU1RJQ1MgeyBPTiwgT0ZG IH0iLAorIiAgV2hldGhlciB0byBpc3N1ZSBkaWFnbm9zdGljIG1lc3NhZ2VzIGZvciBpbGxlZ2Fs IGZ1bmN0aW9uIGNhbGxzIGFuZCIsCisiICByZWZlcmVuY2VzIHRvIG5vbmV4aXN0ZW50IGJ1aWx0 LWluIHZhcmlhYmxlcy4gIE9OIGJ5IGRlZmF1bHQuIiwKKyIgIiwKKyJTRVQgRlVOQ1RJT04gRVJS T1IgeyBPTiwgT0ZGIH0iLAorIiAgV2hldGhlciBhbiBpbGxlZ2FsIGZ1bmN0aW9uIGNhbGwgb3Ig cmVmZXJlbmNlIHRvIGEgbm9uZXhpc3RlbnQgYnVpbHQtaW4iLAorIiAgdmFyaWFibGUgc2hvdWxk IGNhdXNlIGEgY29tbWFuZCB0byBmYWlsLiAgT0ZGIGJ5IGRlZmF1bHQuIiwKKyIiIH07CisjZW5k aWYgLyogTk9TUEwgKi8KKworc3RhdGljIGNoYXIgKmh4eXh5eltdID0geworI2lmZGVmIENLX1hZ WgorI2lmZGVmIFhZWl9JTlRFUk5BTAorCisvKiBUaGlzIGlzIGZvciBidWlsdC1pbiBwcm90b2Nv bHMgKi8KKworIlN5bnRheDogU0VUIFBST1RPQ09MIHsgS0VSTUlULCBYTU9ERU0sIFlNT0RFTSwg Wk1PREVNIH0gWyBzMSBzMiBbIHMzIF0gXSIsCisiICBTZWxlY3RzIHByb3RvY29sIHRvIHVzZSBm b3IgdHJhbnNmZXJyaW5nIGZpbGVzLiAgU3RyaW5nIHMxIGlzIGEgY29tbWFuZCB0byIsCisiICBz ZW5kIHRvIHRoZSByZW1vdGUgaG9zdCBwcmlvciB0byBTRU5EaW5nIGZpbGVzIHdpdGggdGhpcyBw cm90b2NvbCBpbiIsCisiICBiaW5hcnkgbW9kZTsgc3RyaW5nIHMyIGlzIHRoZSBzYW1lIHRoaW5n IGJ1dCBmb3IgdGV4dCBtb2RlLiAgVXNlIFwiJXNcIiBpbiIsCisiICBhbnkgb2YgdGhlc2Ugc3Ry aW5ncyB0byByZXByZXNlbnQgdGhlIGZpbGVuYW1lKHMpLiAgSWYgdGhlIHByb3RvY29sIGlzIiwK KyIgIEtFUk1JVCwgeW91IG1heSBhbHNvIHNwZWNpZnkgYSBzdHJpbmcgczMsIHRoZSBjb21tYW5k IHRvIHN0YXJ0IGEgS2VybWl0IiwKKyIgIHNlcnZlciBvbiB0aGUgcmVtb3RlIGhvc3Qgd2hlbiB5 b3UgZ2l2ZSBhIEdFVCwgUkVHRVQsIFJFTU9URSwgb3Igb3RoZXIiLAorIiAgY2xpZW50IGNvbW1h bmQuICBVc2UgeyBicmFjZXMgfSBpZiBhbnkgY29tbWFuZCBjb250YWlucyBzcGFjZXMuICBFeGFt cGxlczoiLAorIiAiLAorIiAgICBzZXQgcHJvdG8geG1vZGVtIHtyeCAlc30ge3J4IC1hICVzfSIs CisiICAgIHNldCBwcm90byBrZXJtaXQge2tlcm1pdCAtWVFpcn0ge2tlcm1pdCAtWVFUcn0ge2tl cm1pdCAtWVF4fSIsCisKKyNlbHNlIC8qIFRoaXMgaXMgZm9yIHdoZW4gbm9uLUtlcm1pdCBwcm90 b2NvbHMgYXJlIGV4dGVybmFsICovCisKKyJTeW50YXg6IFwKK1NFVCBQUk9UT0NPTCB7IEtFUk1J VCwgWE1PREVNLCBZTU9ERU0sIFpNT0RFTSB9IFsgczEgczIgczMgczQgczUgczYgXSIsCisiICBT ZWxlY3RzIHByb3RvY29sIHRvIHVzZSBmb3IgdHJhbnNmZXJyaW5nIGZpbGVzLiAgczEgYW5kIHMy IGFyZSBjb21tYW5kcyB0byIsCisiICBvdXRwdXQgcHJpb3IgdG8gU0VORGluZyB3aXRoIHRoaXMg cHJvdG9jb2wsIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQgdGhlIiwKKyIgIFJFQ0VJVkUgcHJvY2Vz cyBvbiB0aGUgb3RoZXIgZW5kIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUsIHJlc3BlY3RpdmVseS4i LAorIiAgSWYgdGhlIHByb3RvY29sIGlzIEtFUk1JVCwgczMgaXMgdGhlIGNvbW1hbmQgdG8gc3Rh cnQgYSBLZXJtaXQgc2VydmVyIG9uIiwKKyIgIHRoZSByZW1vdGUgY29tcHV0ZXIsIGFuZCB0aGVy ZSBhcmUgbm8gczQtczYgY29tbWFuZHMuICBPdGhlcndpc2UsIHMzIGFuZCIsCisiICBzNCBhcmUg Y29tbWFuZHMgdXNlZCBvbiB0aGlzIGNvbXB1dGVyIGZvciBzZW5kaW5nIGZpbGVzIHdpdGggdGhp cyBwcm90b2NvbCIsCisiICBpbiBiaW5hcnkgb3IgdGV4dCBtb2RlLCByZXNwZWN0aXZlbHk7IHM1 IGFuZCBzNiBhcmUgdGhlIGNvbW1hbmRzIGZvciIsCisiICByZWNlaXZpbmcgZmlsZXMgd2l0aCB0 aGlzIHByb3RvY29sLiAgVXNlIFwiJXNcIiBpbiBhbnkgb2YgdGhlc2Ugc3RyaW5ncyIsCisiICB0 byByZXByZXNlbnQgdGhlIGZpbGVuYW1lKHMpLiAgVXNlIHsgYnJhY2VzIH0gaWYgYW55IGNvbW1h bmQgY29udGFpbnMiLAorIiAgc3BhY2VzLiAgRXhhbXBsZXM6IiwKKyIgIiwKKyIgICAgc2V0IHBy b3RvIGtlcm1pdCB7a2VybWl0IC1ZUWlyfSB7a2VybWl0IC1ZUVRyfSB7a2VybWl0IC1ZUXh9IiwK KyIgICAgc2V0IHByb3RvIHltb2RlbSByYiB7cmIgLWF9IHtzYiAlc30ge3NiIC1hICVzfSByYiBy YiIsCisiICIsCisiRXh0ZXJuYWwgcHJvdG9jb2xzIHJlcXVpcmUgUkVESVJFQ1QgYW5kIGV4dGVy bmFsIGZpbGUgdHJhbnNmZXIgcHJvZ3JhbXMgdGhhdCIsCisidXNlIHJlZGlyZWN0YWJsZSBzdGFu ZGFyZCBpbnB1dC9vdXRwdXQuIiwKKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KKyNlbHNlCisi U3ludGF4OiBcCitTRVQgUFJPVE9DT0wgS0VSTUlUIFsgczEgWyBzMiBbIHMzIF0gXSBdIiwKKyIg IExldHMgeW91IHNwZWNpZnkgdGhlIGF1dG91cGxvYWQgYmluYXJ5LCBhdXRvdXBsb2FkIHRleHQs IGFuZCBhdXRvc2VydmVyIiwKKyIgIGNvbW1hbmQgc3RyaW5ncyB0byBiZSBzZW50IHRvIHRoZSBy ZW1vdGUgc3lzdGVtIGluIGFkdmFuY2Ugb2YgYW55IFNFTkQiLAorIiAgb3IgR0VUIGNvbW1hbmRz LiAgQnkgZGVmYXVsdCB0aGVzZSBhcmUgXCJrZXJtaXQgLWlyXCIsIFwia2VybWl0IC1yXCIsIGFu ZCIsCisiICBcImtlcm1pdCAteFwiLiAgVXNlIHsgYnJhY2VzIH0gYXJvdW5kIGFueSBjb21tYW5k IHRoYXQgY29udGFpbnMgc3BhY2VzLiIsCisiICBFeGFtcGxlOiIsCisiICIsCisiICAgIHNldCBw cm90byBrZXJtaXQge2tlcm1pdCAtWWlyfSB7a2VybWl0IC1ZVHJ9IHtrZXJtaXQgLVl4fSIsCisj ZW5kaWYgLyogQ0tfWFlaICovCisiICIsCisiICBTSE9XIFBST1RPQ09MIGRpc3BsYXlzIHRoZSBj dXJyZW50IHNldHRpbmdzLiIsCisiIn07CisKK3N0YXRpYyBjaGFyICpobXh4YnllID0gIlN5bnRh eDogQllFXG5cCisgIFNodXQgZG93biBhbmQgbG9nIG91dCBhIHJlbW90ZSBLZXJtaXQgc2VydmVy IjsKKworI2lmZGVmIENLX1BFUk1TCisjaWZkZWYgVU5JWAorc3RhdGljIGNoYXIgKmhteHhjaG1v ZFtdID0geworIlN5bnRheDogQ0hNT0QgWyBzd2l0Y2hlcyBdIGNvZGUgZmlsZXNwZWMiLAorIiAg VU5JWCBvbmx5LiAgQ2hhbmdlcyBwZXJtaXNzaW9ucyBvZiB0aGUgZ2l2ZW4gZmlsZShzKSB0byB0 aGUgZ2l2ZW4gY29kZSwiLAorIiAgd2hpY2ggbXVzdCBiZSBhbiBvY3RhbCBudW1iZXIgc3VjaCBh cyA2NjQgb3IgNzc1LiAgT3B0aW9uYWwgc3dpdGNoZXM6IiwKKyIgIiwKKyIgICAvRklMRVMgICAg ICAgIE9ubHkgY2hhbmdlIHBlcm1pc3Npb25zIG9mIHJlZ3VsYXIgZmlsZXMuIiwKKyIgICAvRElS RUNUT1JJRVMgIE9ubHkgY2hhbmdlIHBlcm1pc3Npb25zIG9mIGRpcmVjdG9yeSBmaWxlcy4iLAor IiAgIC9UWVBFOkJJTkFSWSAgT25seSBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgYmluYXJ5IGZpbGVz LiIsCisiICAgL1RZUEU6VEVYVCAgICBPbmx5IGNoYW5nZSBwZXJtaXNzaW9ucyBvZiB0ZXh0IGZp bGVzLiIsCisiICAgL0RPVEZJTEVTICAgICBJbmNsdWRlIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2lu IHdpdGggZG90ICguKS4iLAorIiAgIC9SRUNVUlNJVkUgICAgQ2hhbmdlIHBlcm1pc3Npb25zIGlu IHN1YmRpcmVjdG9yaWVzIHRvby4iLAorIiAgIC9MSVNUICAgICAgICAgTGlzdCBlYWNoIGZpbGUg KHN5bm9ueW06IC9WRVJCT1NFKS4iLAorIiAgIC9OT0xJU1QgICAgICAgT3BlcmF0ZSBzaWxlbnRs eSAoc3lub255bTogL1FVSUVUKS4iLAorIiAgIC9QQUdFICAgICAgICAgV2hlbiBsaXN0aW5nLCBw YXVzZSBhdCBlbmQgb2YgZWFjaCBzY3JlZW4gKGltcGxpZXMgL0xJU1QpLiIsCisiICAgL05PUEFH RSAgICAgICBXaGVuIGxpc3RpbmcsIGRvbid0IHBhdXNlIGF0IGVuZCBvZiBlYWNoIHNjcmVlbi4i LAorIiAgIC9TSU1VTEFURSAgICAgU2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUgYnV0IGRvbid0IGFj dHVhbGx5IGRvIGl0LiIsCisiIgorfTsKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogQ0tf UEVSTVMgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBOT1NFWFAKK3N0YXRpYyBjaGFyICpo bXh4c2V4cFtdID0geworIlN5bnRheDogKG9wZXJhdGlvbiBvcGVyYW5kIFsgb3BlcmFuZCBbIC4u LiBdIF0pIiwKKyIgIiwKKyIgIEMtS2VybWl0IGluY2x1ZGVzIGEgc2ltcGxlIExJU1AtbGlrZSBT LUV4cHJlc3Npb24gcGFyc2VyIG9wZXJhdGluZyBvbiIsCisiICBudW1iZXJzIG9ubHkuICBBbiBT LUV4cHJlc3Npb24gaXMgYWx3YXlzIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLiAgVGhlIiwKKyIg IHBhcmVudGhlc2VzIGNhbiBjb250YWluIChhKSBhIG51bWJlciwgKGIpIGEgdmFyaWFibGUsIChj KSBhIGZ1bmN0aW9uIHRoYXQiLAorIiAgcmV0dXJucyBhIG51bWJlciwgb3IgKGQpIGFuIG9wZXJh dG9yIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIG9wZXJhbmRzLiIsCisiICBPcGVyYW5kcyBjYW4g YmUgYW55IG9mIChhKSB0aHJvdWdoIChjKSBvciBhbiBTLUV4cHJlc3Npb24uICBOdW1iZXJzIGNh biBiZSIsCisiICBpbnRlZ2VycyBvciBmbG9hdGluZy1wb2ludC4gIEFueSBvcGVyYW5kIHRoYXQg aXMgbm90IGEgbnVtYmVyIGFuZCBkb2VzIG5vdCIsCisiICBzdGFydCB3aXRoIGJhY2tzbGFzaCAo XFwpIGlzIHRyZWF0ZWQgYXMgYSBLZXJtaXQgbWFjcm8gbmFtZS4gIE9wZXJhdG9yczoiLAorIiAi LAorIiBPcGVyYXRvciAgQWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhh bXBsZSAgICAgICAgICAgVmFsdWUiLAorIiAgRVZBTCAoLikgIFJldHVybnMgdGhlIGNvbnRhaW5l ZCB2YWx1ZSAgICAgICAgICAgICg2KSAgICAgICAgICAgICAgIDYiLAorIiAgUVVPVEUgKCcpIElu aGliaXRzIGV2YWx1YXRpb24gb2YgZm9sbG93aW5nIHZhbHVlIChxdW90ZSBhKSAgICAgICAgIGEi LAorIiAgU0VUUSAgICAgIEFzc2lnbnMgYSB2YWx1ZSB0byBhIGdsb2JhbCB2YXJpYWJsZSAgIChz ZXRxIGEgMikgICAgICAgIDIiLAorIiAgTEVUICAgICAgIEFzc2lnbnMgYSB2YWx1ZSB0byBhIGxv Y2FsIHZhcmlhYmxlICAgIChsZXQgYiAtMS4zKSAgICAgLTEuMyIsCisiICArICAgICAgICAgQWRk cyBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAgICAgICAgKCsgYSBiKSAgICAgICAgICAgMC43 IiwKKyIgIC0gICAgICAgICBTdWJ0cmFjdHMgYWxsIG9wZXJhbmRzICgxIG9yIG1vcmUpICAgICAo LSA5IDUgMiAxKSAgICAgICAxIiwKKyIgICogICAgICAgICBNdWx0aXBsaWVzIGFsbCBvcGVyYW5k cyAoMSBvciBtb3JlKSAgICAoKiBhICgrIGIgMSkgMykgIC0xLjgiLAorIiAgLyAgICAgICAgIERp dmlkZXMgYWxsIG9wZXJhbmRzICgxIG9yIG1vcmUpICAgICAgICgvIGIgYSAyKSAgICAgICAgLTAu MzI1IiwKKyIgIF4gICAgICAgICBSYWlzZSBnaXZlbiBudW1iZXIgdG8gZ2l2ZW4gcG93ZXIgICAg ICAoXiAzIDIpICAgICAgICAgICA5IiwKKyIgICsrICAgICAgICBJbmNyZW1lbnRzIGEgdmFyaWFi bGUgICAgICAgICAgICAgICAgICAoKysgYSAxLjIpICAgICAgICAzLjIiLAorIiAgLS0gICAgICAg IERlY3JlbWVudHMgYSB2YXJpYWJsZSAgICAgICAgICAgICAgICAgICgtLSBhKSAgICAgICAgICAg IDEiLAorIiAgQUJTICAgICAgIEFic29sdXRlIHZhbHVlIG9mIDEgb3BlcmFuZCAgICAgICAgICAg IChhYnMgKCogYSBiIDMpKSAgIDcuOCIsCisiICBNQVggICAgICAgTWF4aW11bSBvZiBhbGwgb3Bl cmFuZHMgKDEgb3IgbW9yZSkgICAgKG1heCAxIDIgMyA0KSAgICAgNCIsCisiICBNSU4gICAgICAg TWluaW11bSBvZiBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAgKG1pbiAxIDIgMyA0KSAgICAg MSIsCisiICBNT0QgICAgICAgTW9kdWx1cyBvZiBhbGwgb3BlcmFuZHMgKDEgb3IgbW9yZSkgICAg KG1vZCA3IDQgMikgICAgICAgMSIsCisiICBUUlVOQ0FURSAgSW50ZWdlciBwYXJ0IG9mIGZsb2F0 aW5nLXBvaW50IG9wZXJhbmQgKHRydW5jYXRlIDEuMzMzKSAgMSIsCisiICBDRUlMSU5HICAgQ2Vp bGluZyBvZiBmbG9hdGluZy1wb2ludCBvcGVyYW5kICAgICAgKGNlaWxpbmcgMS4yNSkgICAgMiIs CisiICBGTE9PUiAgICAgRmxvb3Igb2YgZmxvYXRpbmctcG9pbnQgb3BlcmFuZCAgICAgICAgKGZs b29yIDEuMjUpICAgICAgMSIsCisiICBST1VORCAgICAgT3BlcmFuZCByb3VuZGVkIHRvIG5lYXJl c3QgaW50ZWdlciAgICAgKHJvdW5kIDEuNzUpICAgICAgMiIsCisiICBTUVJUICAgICAgU3F1YXJl IHJvb3Qgb2YgMSBvcGVyYW5kICAgICAgICAgICAgICAgKHNxcnQgMikgICAgICAgICAgMS40MTQu LiIsCisiICBFWFAgICAgICAgZSAoMi43MTgyOC4uKSB0byB0aGUgZ2l2ZW4gcG93ZXIgICAgICAg KGV4cCAtMSkgICAgICAgICAgMC4zNjcuLiIsCisiICBTSU4gICAgICAgU2luZSBvZiBhbmdsZSBl eHByZXNzZWQgaW4gcmFkaWFucyAgICAgKHNpbiAoLyBwaSAyKSkgICAgMS4wIiwKKyIgIENPUyAg ICAgICBDb3NpbmUgb2YgZ2l2ZW4gbnVtYmVyICAgICAgICAgICAgICAgICAoY29zIHBpKSAgICAg ICAgIC0xLjAiLAorIiAgVEFOICAgICAgIFRhbmdlbnQgb2YgZ2l2ZW4gbnVtYmVyICAgICAgICAg ICAgICAgICh0YW4gcGkpICAgICAgICAgIDAuMCIsCisiICBMT0cgICAgICAgTmF0dXJhbCBsb2cg KGJhc2UgZSkgb2YgZ2l2ZW4gbnVtYmVyICAgKGxvZyAyLjcxODMpICAgICAgMS4wMDAuLiIsCisi ICBMT0cxMCAgICAgTG9nIGJhc2UgMTAgb2YgZ2l2ZW4gbnVtYmVyICAgICAgICAgICAgKGxvZzEw IDEwMDApICAgICAgMy4wIiwKKyIgIiwKKyJQcmVkaWNhdGUgb3BlcmF0b3JzIHJldHVybiAwIGlm IGZhbHNlLCAxIGlmIHRydWUsIGFuZCBpZiBpdCBpcyB0aGUgb3V0ZXJtb3N0IiwKKyJvcGVyYXRv ciwgc2V0cyBTVUNDRVNTIG9yIEZBSUxVUkUgYWNjb3JkaW5nbHk6IiwKKyIgIiwKKyIgIDwgICAg ICAgICBPcGVyYW5kcyBpbiBzdHJpY3RseSBkZXNjZW5kaW5nIG9yZGVyICAoPCA2IDUgNCAzIDIg MSkgICAxIiwKKyIgIDw9ICAgICAgICBPcGVyYW5kcyBpbiBkZXNjZW5kaW5nIG9yZGVyICAgICAg ICAgICAoPD0gNiA2IDUgNCAzIDIpICAxIiwKKyIgICE9ICAgICAgICBPcGVyYW5kcyBhcmUgbm90 IGVxdWFsICAgICAgICAgICAgICAgICAoIT0gMSAxIDEuMCkgICAgICAwIiwKKyIgID0gICAoPT0p ICBBbGwgb3BlcmFuZHMgYXJlIGVxdWFsICAgICAgICAgICAgICAgICAoPSAzIDMgMyAzKSAgICAg ICAxIiwKKyIgID4gICAgICAgICBPcGVyYW5kcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIg ICAoPiAxIDIgMyA0IDUgNikgICAxIiwKKyIgID49ICAgICAgICBPcGVyYW5kcyBpbiBhc2NlbmRp bmcgb3JkZXIgICAgICAgICAgICAoPiAxIDEgMiAzIDQgNSkgICAxIiwKKyIgIEFORCAoJiYpICBP cGVyYW5kcyBhcmUgYWxsIHRydWUgICAgICAgICAgICAgICAgICAoYW5kIDEgMSAxIDEgMCkgICAw IiwKKyIgIE9SICAofHwpICBBdCBsZWFzdCBvbmUgb3BlcmFuZCBpcyB0cnVlICAgICAgICAgICAo b3IgMSAxIDEgMSAwKSAgICAxIiwKKyIgIFhPUiAgICAgICBMb2dpY2FsIEV4Y2x1c2l2ZSBPUiAg ICAgICAgICAgICAgICAgICAoeG9yIDMgMSkgICAgICAgICAwIiwKKyIgIE5PVCAoISkgICBSZXZl cnNlcyB0cnV0aCB2YWx1ZSBvZiBvcGVyYW5kICAgICAgICAobm90IDMpICAgICAgICAgICAwIiwK KyIgIiwKKyJCaXQtb3JpZW50ZWQgb3BlcmF0b3JzOiIsCisiICIsCisiICAmICAgICAgICAgQml0 d2lzZSBBTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCYgNyAyKSAgICAgICAgICAgMiIs CisiICB8ICAgICAgICAgQml0d2lzZSBPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHwg MSAyIDMgNCkgICAgICAgNyIsCisiICAjICAgICAgICAgQml0d2lzZSBFeGNsdXNpdmUgT1IgICAg ICAgICAgICAgICAgICAgKCMgMyAxKSAgICAgICAgICAgMiIsCisiICB+ICAgICAgICAgUmV2ZXJz ZXMgYWxsIGJpdHMgICAgICAgICAgICAgICAgICAgICAgKH4gMykgICAgICAgICAgICAtNCIsCisi ICIsCisiT3BlcmF0b3JzIHRoYXQgd29yayBvbiB0cnV0aCB2YWx1ZXM6IiwKKyIgIiwKKyIgIElG ICAgICAgICBDb25kaXRpb25hbCBldmFsdWF0aW9uICAgICAgICAgICAgICAgICAoaWYgKDEpIDIg MykgICAgICAyIiwKKyIgIiwKKyJPcGVyYXRvcnMgY2FuIGFsc28gYmUgbmFtZXMgb2YgS2VybWl0 IG1hY3JvcyB0aGF0IHJldHVybiBlaXRoZXIgbnVtZXJpYyIsCisidmFsdWVzIG9yIG5vIHZhbHVl IGF0IGFsbC4iLAorIiAiLAorIkJ1aWx0LWluIGNvbnN0YW50cyBhcmU6IiwKKyIgIiwKKyIgIHQg ICAgICAgICBUcnVlICgxKSIsCisiICBuaWwgICAgICAgRmFsc2UgKGVtcHR5KSIsCisiICBwaSAg ICAgICAgVGhlIHZhbHVlIG9mIFBpICgzLjE0MTU5MjYuLi4pIiwKKyIgIiwKKyJJZiBTRVQgU0VY UFJFU1NJT04gVFJVTkNBVEUtQUxMLVJFU1VMVFMgaXMgT04sIGFsbCByZXN1bHRzIGFyZSB0cnVu Y3RhdGVkIiwKKyJ0byBpbnRlZ2VyIHZhbHVlcyBieSBkaXNjYXJkaW5nIGFueSBmcmFjdGlvbmFs IHBhcnQuICBPdGhlcndpc2UgcmVzdWx0cyIsCisiYXJlIGZsb2F0aW5nLXBvaW50IGlmIHRoZXJl IGZyYWN0aW9uYWwgcGFydCBhbmQgaW50ZWdlciBvdGhlcndpc2UuIiwKKyJJZiBTRVQgU0VYUFJF U1NJT04gRUNITy1SRVNVTFQgaXMgQVVUTyAodGhlIGRlZmF1bHQpLCB0aGUgdmFsdWUgb2YgdGhl IiwKKyJTLUV4cHJlc3Npb24gaXMgcHJpbnRlZCBpZiB0aGUgUy1FeHByZXNzaW9uIGlzIGdpdmVu IGF0IHRvcCBsZXZlbDsgaWYgT04sIiwKKyJpdCBpcyBwcmludGVkIGF0IGFueSBsZXZlbDsgaWYg T0ZGIGl0IGlzIG5vdCBwcmludGVkLiAgQXQgYWxsIGxldmVscywgdGhlIiwKKyJ2YXJpYWJsZSBc XHYoc2V4cHJlc3Npb24pIGlzIHNldCB0byB0aGUgbW9zdCByZWNlbnQgUy1FeHByZXNzaW9uLCBh bmQiLAorIlxcdihzdmFsdWUpIGlzIHNldCB0byBpdHMgdmFsdWUuICBZb3UgY2FuIHVzZSB0aGUg XFxmc2V4cHJlc3NzaW9uKCkgZnVuY3Rpb24iLAorInRvIGV2YWx1YXRlIGFuIFMtRXhwcmVzc2lv biBhbnl3aGVyZSBpbiBhIEtlcm1pdCBjb21tYW5kLiIsCisiIgorfTsKKyNlbmRpZiAvKiBOT1NF WFAgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCitzdGF0aWMgY2hhciAqaG14eGdyZXBbXSA9IHsK KyNpZmRlZiBVTklYT1JPU0sKKyJTeW50YXg6IEdSRVAgWyBvcHRpb25zIF0gcGF0dGVybiBmaWxl c3BlYyIsCisjZWxzZQorIlN5bnRheDogRklORCBbIG9wdGlvbnMgXSBwYXR0ZXJuIGZpbGVzcGVj IiwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyIgIFNlYXJjaGVzIHRocm91Z2ggdGhlIGdpdmVu IGZpbGUgb3IgZmlsZXMgZm9yIHRoZSBnaXZlbiBjaGFyYWN0ZXIgc3RyaW5nIiwKKyIgIG9yIHBh dHRlcm4uICBJbiB0aGUgbm9ybWFsIGNhc2UsIGFsbCBsaW5lcyBjb250YWluaW5nIGFueSB0ZXh0 IHRoYXQgbWF0Y2hlcyIKKywKKyIgIHRoZSBwYXR0ZXJuIGFyZSBwcmludGVkLiAgUGF0dGVybiBz eW50YXggaXMgYXMgZGVzY3JpYmVkIGluIEhFTFAgUEFUVEVSTlMiLAorIiAgZXhjZXB0IHRoYXQg JyonIGlzIGltcGxpZWQgYXQgdGhlIGJlZ2lubmluZyB1bmxlc3MgdGhlIHBhdHRlcm4gc3RhcnRz IHdpdGgiLAorIiAgJ14nIGFuZCBhbHNvIGF0IHRoZSBlbmQgdW5sZXNzIHRoZSBwYXR0ZXJuIGVu ZHMgd2l0aCAnJCcuICBUaGVyZWZvcmUsIiwKKyIgIFwiZ3JlcCBzb21ldGhpbmcgKi50eHRcIiBs aXN0cyBhbGwgbGluZXMgaW4gYWxsICoudHh0IGZpbGVzIHRoYXQgY29udGFpbiIsCisiICB0aGUg d29yZCBcInNvbWV0aGluZ1wiLCBidXQgXCJncmVwIF5zb21ldGhpbmcgKi50eHRcIiBsaXN0cyBv bmx5IHRoZSBsaW5lcyIsCisiICB0aGF0IFNUQVJUIHdpdGggXCJzb21ldGhpbmdcIi4gIFRoZSBj b21tYW5kIHN1Y2NlZWRzIGlmIGFueSBvZiB0aGUgZ2l2ZW4iLAorIiAgZmlsZXMgY29udGFpbmVk IGFueSBsaW5lcyB0aGF0IG1hdGNoIHRoZSBwYXR0ZXJuLCBvdGhlcndpc2UgaXQgZmFpbHMuIiwK KyNpZmRlZiBVTklYT1JPU0sKKyIgIFN5bm9ueW06IEZJTkQuIiwKKyNlbHNlCisiICBTeW5vbnlt OiBHUkVQLiIsCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisiICIsCisiRmlsZSBzZWxlY3Rpb24g b3B0aW9uczoiLAorIiAgL05PQkFDS1VQRklMRVMiLAorIiAgICBFeGNsdWRlcyBiYWNrdXAgZmls ZXMgKGxpa2Ugb29mYS50eHQufjN+KSBmcm9tIHRoZSBzZWFyY2guIiwKKyIgIC9ET1RGSUxFUyIs CisiICAgIEluY2x1ZGVzIGZpbGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggZG90ICguKSBpbiB0 aGUgc2VhcmNoLiIsCisiICAvTk9ET1RGSUxFUyIsCisiICAgIEV4Y2x1ZGVzIGZpbGVzIHdob3Nl IG5hbWVzIHN0YXJ0IHdpdGggZG90ICguKSBmcm9tIHRoZSBzZWFyY2guIiwKKyNpZmRlZiBSRUNV UlNJVkUKKyIgIC9SRUNVUlNJVkUiLAorIiAgICBTZWFyY2hlcyB0aHJvdWdoIGZpbGVzIGluIHN1 YmRpcmVjdG9yaWVzIHRvby4iLAorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworIiAgL1RZUEU6VEVY VCIsCisiICAgIFNlYXJjaCBvbmx5IHRleHQgZmlsZXMgKHJlcXVpcmVzIEZJTEUgU0NBTiBPTiku IiwKKyIgIC9UWVBFOkJJTkFSWSIsCisiICAgIFNlYXJjaCBvbmx5IGJpbmFyeSBmaWxlcyAocmVx dWlyZXMgRklMRSBTQ0FOIE9OKS4iLAorIiAiLAorIlBhdHRlcm4tbWF0Y2hpbmcgb3B0aW9uczoi LAorIiAgL05PQ0FTRSIsCisiICAgIElnbm9yZXMgY2FzZSBvZiBsZXR0ZXJzIChBU0NJSSBvbmx5 KSB3aGVuIGNvbXBhcmluZy4iLAorIiAgL05PTUFUQ0giLAorIiAgICBTZWFyY2hlcyBmb3IgbGlu ZXMgdGhhdCBkbyBOT1QgbWF0Y2ggdGhlIHBhdHRlcm4uIiwKKyIgIC9FWENFUFQ6cGF0dGVybiIs CisiICAgIEV4Y2x1ZGUgbGluZXMgdGhhdCBtYXRjaCB0aGUgbWFpbiBwYXR0ZXJuIHRoYXQgYWxz byBtYXRjaCB0aGlzIHBhdHRlcm4uIiwKKyIgIiwKKyJEaXNwbGF5IG9wdGlvbnM6IiwKKyIgIC9D T1VOVDp2YXJpYWJsZS1uYW1lIiwKKyIgICAgRm9yIGVhY2ggZmlsZSwgcHJpbnRzIG9ubHkgdGhl IGZpbGVuYW1lIGFuZCBhIGNvdW50IG9mIG1hdGNoaW5nIGxpbmVzIiwKKyIgICAgYW5kIGFzc2ln bnMgdGhlIHRvdGFsIG1hdGNoIGNvdW50IHRvIHRoZSB2YXJpYWJsZSwgaWYgb25lIGlzIGdpdmVu LiIsCisiICAvTkFNRU9OTFkiLAorIiAgICBQcmludHMgdGhlIG5hbWUgb2YgZWFjaCBmaWxlIHRo YXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGxpbmUsIiwKKyIgICAgb25lIG5hbWUg cGVyIGxpbmUsIHJhdGhlciB0aGFuIHNob3dpbmcgZWFjaCBtYXRjaGluZyBsaW5lLiIsCisiICAv Tk9MSVNUIiwKKyIgICAgRG9lc24ndCBwcmludCBhbnl0aGluZyAoYnV0IHNldHMgU1VDQ0VTUyBv ciBGQUlMVVJFIGFwcHJvcHJpYXRlbHkpLiIsCisiICAvTElORU5VTUJFUlMiLAorIiAgICBQcmVj ZWRlcyBlYWNoIGZpbGUgbGluZSBieSBpdHMgbGluZSBudW1iZXIgd2l0aGluIHRoZSBmaWxlLiIs CisiICAvUEFHRSIsCisiICAgIFBhdXNlcyBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAorIiAgL05P UEFHRSIsCisiICAgIERvZXNuJ3QgcGF1c2UgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwuIiwKKyIgIC9P VVRQVVQ6bmFtZSIsCisiICAgIFNlbmRzIHJlc3VsdHMgdG8gdGhlIGdpdmVuIGZpbGUuICBJZiB0 aGlzIHN3aXRjaCBpcyBvbWl0dGVkLCB0aGUiLAorIiAgICByZXN1bHRzIGFwcGVhciBvbiB5b3Vy IHNjcmVlbi4gIFRoaXMgc3dpdGNoIG92ZXJyaWRlcyBhbnkgZXhwcmVzcyBvciIsCisiICAgIGlt cGxpZWQgL1BBR0Ugc3dpdGNoLiIsCisiIn07CisKK3N0YXRpYyBjaGFyICpobXh4ZGlyW10gPSB7 CisjaWZkZWYgRE9NWURJUgorIlN5bnRheDogRElSRUNUT1JZIFsgc3dpdGNoZXMgXSBbIGZpbGVz cGVjIFsgZmlsZXNwZWMgWyAuLi4gXSBdIF0iLAorI2lmZGVmIExPQ1VTCisiICBJZiBMT0NVUyBp cyBSRU1PVEUgb3IgTE9DVVMgaXMgQVVUTyBhbmQgeW91IGhhdmUgYW4gRlRQIGNvbm5lY3Rpb24s IiwKKyIgIHRoaXMgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIFJFTU9URSBESVJFQ1RPUlkgKFJE SVIpLiAgT3RoZXJ3aXNlOiIsCisiICIsCisjZW5kaWYgLyogTE9DVVMgKi8KKyIgIExpc3RzIGxv Y2FsIGZpbGVzLiAgVGhlIGZpbGVzcGVjIG1heSBiZSBhIGZpbGVuYW1lLCBwb3NzaWJseSBjb250 YWluaW5nIiwKKyIgIHdpbGRjYXJkIGNoYXJhY3RlcnMsIG9yIGEgZGlyZWN0b3J5IG5hbWUuICBJ ZiBubyBmaWxlc3BlYyBpcyBnaXZlbiwgYWxsIiwKKyIgIGZpbGVzIGluIHRoZSBjdXJyZW50IGRp cmVjdG9yeSBhcmUgbGlzdGVkLiAgSWYgYSBkaXJlY3RvcnkgbmFtZSBpcyBnaXZlbiwiLAorIiAg YWxsIHRoZSAgZmlsZXMgaW4gaXQgYXJlIGxpc3RlZC4gIE11bHRpcGxlIGZpbGVzcGVjcyBjYW4g YmUgZ2l2ZW4uIiwKKyIgIE9wdGlvbmFsIHN3aXRjaGVzOiIsCisiICIsCisiICAgL0JSSUVGICAg ICAgICAgICBMaXN0IGZpbGVuYW1lcyBvbmx5LiIsCisjaWZkZWYgQ0tfUEVSTVMKKyIgICAvVkVS Qk9TRSAgICAgICArIEFsc28gbGlzdCBwZXJtaXNzaW9ucywgc2l6ZSwgYW5kIGRhdGUuIiwKKyNl bHNlCisiICAgL1ZFUkJPU0UgICAgICAgKyBBbHNvIGxpc3QgZGF0ZSBhbmQgc2l6ZS4iLAorI2Vu ZGlmIC8qIENLX1BFUk1TICovCisiICAgL0ZJTEVTICAgICAgICAgICBTaG93IGZpbGVzIGJ1dCBu b3QgZGlyZWN0b3JpZXMuIiwKKyIgICAvRElSRUNUT1JJRVMgICAgIFNob3cgZGlyZWN0b3JpZXMg YnV0IG5vdCBmaWxlcy4iLAorIiAgIC9BTEwgICAgICAgICAgICsgU2hvdyBib3RoIGZpbGVzIGFu ZCBkaXJlY3Rvcmllcy4iLAorIiAgIC9BUlJBWTomYSAgICAgICAgU3RvcmUgZmlsZSBsaXN0IGlu IHNwZWNpZmllZCBhcnJheSAoZS5nLiBcXCVhW10pLiIsCisiICAgL1BBR0UgICAgICAgICAgICBQ YXVzZSBhZnRlciBlYWNoIHNjcmVlbmZ1bC4iLAorIiAgIC9OT1BBR0UgICAgICAgICAgRG9uJ3Qg cGF1c2UgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwuIiwKKyIgICAvVE9QOm4gICAgICAgICAgIE9ubHkg c2hvdyB0aGUgdG9wIG4gbGluZXMgb2YgdGhlIGRpcmVjdG9yeSBsaXN0aW5nLiIsCisjaWZkZWYg VU5JWE9ST1NLCisiICAgL0RPVEZJTEVTICAgICAgICBJbmNsdWRlIGZpbGVzIHdob3NlIG5hbWVz IHN0YXJ0IHdpdGggZG90IChwZXJpb2QpLiIsCisiICAgL05PRE9URklMRVMgICAgKyBEb24ndCBp bmNsdWRlIGZpbGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggZG90LiIsCisiICAgL0ZPTExPV0xJ TktTICAgICBGb2xsb3cgc3ltYm9saWMgbGlua3MuIiwKKyIgICAvTk9GT0xMT1dMSU5LUyArIERv bid0IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4iLAorIiAgIC9OT0xJTktTICAgICAgICAgRG9uJ3Qg bGlzdCBzeW1ib2xpYyBsaW5rcyBhdCBhbGwuIiwKKyIgICAvQkFDS1VQICAgICAgICArIEluY2x1 ZGUgYmFja3VwIGZpbGVzIChuYW1lcyBlbmQgd2l0aCAufm5+KS4iLAorIiAgIC9OT0JBQ0tVUEZJ TEVTICAgRG9uJ3QgaW5jbHVkZSBiYWNrdXAgZmlsZXMuIiwKKyNlbmRpZiAvKiBVTklYT1JPU0sg Ki8KKyIgICAvT1VUUFVUOmZpbGUgICAgIFN0b3JlIGRpcmVjdG9yeSBsaXN0aW5nIGluIHRoZSBn aXZlbiBmaWxlLiIsCisiICAgL0hFQURJTkcgICAgICAgICBJbmNsdWRlIGhlYWRpbmcgYW5kIHN1 bW1hcnkuIiwKKyIgICAvTk9IRUFESU5HICAgICArIERvbid0IGluY2x1ZGUgaGVhZGluZyBvciBz dW1tYXJ5LiIsCisiICAgL0NPVU5UOnZhciAgICAgICBQdXQgdGhlIG51bWJlciBvZiBtYXRjaGlu ZyBmaWxlcyBpbiB0aGUgZ2l2ZW4gdmFyaWFibGUuIiwKKyIgICAvU1VNTUFSWSAgICAgICAgIFBy aW50IG9ubHkgY291bnQgYW5kIHRvdGFsIHNpemUgb2YgbWF0Y2hpbmcgZmlsZXMuIiwKKyIgICAv WEZFUk1PREUgICAgICAgIFNob3cgcGF0dGVybi1iYXNlZCB0cmFuc2ZlciBtb2RlIChUPVRleHQs IEI9QmluYXJ5KS4iLAorIiAgIC9UWVBFOiAgICAgICAgICAgU2hvdyBvbmx5IGZpbGVzIG9mIHRo ZSBzcGVjaWZpZWQgdHlwZSAodGV4dCBvciBiaW5hcnkpLiIsCisiICAgL01FU1NBR0U6dGV4dCAg ICBBZGQgYnJpZWYgbWVzc2FnZSB0byBlYWNoIGxpc3RpbmcgbGluZS4iLAorIiAgIC9OT01FU1NB R0UgICAgICsgRG9uJ3QgYWRkIG1lc3NhZ2UgdG8gZWFjaCBsaXN0aW5nIGxpbmUuIiwKKyIgICAv Tk9YRkVSTU9ERSAgICArIERvbid0IHNob3cgcGF0dGVybi1iYXNlZCB0cmFuc2ZlciBtb2RlIiwK KyIgICAvSVNPREFURSAgICAgICArIEluIHZlcmJvc2UgbGlzdGluZ3MsIHNob3cgZGF0ZSBpbiBJ U08gODA2MSBmb3JtYXQuIiwKKyIgICAvRU5HTElTSERBVEUgICAgIEluIHZlcmJvc2UgbGlzdGlu Z3MsIHNob3cgZGF0ZSBpbiBcIkVuZ2xpc2hcIiBmb3JtYXQuIiwKKyNpZmRlZiBSRUNVUlNJVkUK KyIgICAvUkVDVVJTSVZFICAgICAgIERlc2NlbmQgdGhyb3VnaCBzdWJkaXJlY3Rvcmllcy4iLAor IiAgIC9OT1JFQ1VSU0lWRSAgICsgRG9uJ3QgZGVzY2VuZCB0aHJvdWdoIHN1YmRpcmVjdG9yaWVz LiIsCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisiICAgL1NPUlQ6a2V5ICAgICAgICBTb3J0IGJ5 IGtleSwgTkFNRSwgREFURSwgb3IgU0laRTsgZGVmYXVsdCBrZXkgaXMgTkFNRS4iLAorIiAgIC9O T1NPUlQgICAgICAgICsgRG9uJ3Qgc29ydC4iLAorIiAgIC9BU0NFTkRJTkcgICAgICsgSWYgc29y dGluZywgc29ydCBpbiBhc2NlbmRpbmcgb3JkZXIuIiwKKyIgICAvUkVWRVJTRSAgICAgICAgIElm IHNvcnRpbmcsIHNvcnQgaW4gcmV2ZXJzZSBvcmRlci4iLAorIiAiLAorIkZhY3RvcnkgZGVmYXVs dHMgYXJlIG1hcmtlZCB3aXRoICsuICBEZWZhdWx0IGZvciBwYWdpbmcgZGVwZW5kcyBvbiBTRVQi LAorIkNPTU1BTkQgTU9SRS1QUk9NUFRJTkcuICBVc2UgU0VUIE9QVElPTlMgRElSRUNUT1JZIFsg c3dpdGNoZXMgXSB0byBjaGFuZ2UiLAorImRlZmF1bHRzOyB1c2UgU0hPVyBPUFRJT05TIHRvIGRp c3BsYXkgY3VzdG9taXplZCBkZWZhdWx0cy4gIEFsc28gc2VlIiwKKyJXRElSRUNUT1JZLiIsCisj ZWxzZQorIlN5bnRheDogRElSRUNUT1JZIFsgZmlsZXNwZWMgXSIsCisiICBMaXN0cyB0aGUgc3Bl Y2lmaWVkIGZpbGUgb3IgZmlsZXMuICBJZiBubyBmaWxlc3BlYyBpcyBnaXZlbiwgYWxsIGZpbGVz IiwKKyIgIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhcmUgbGlzdGVkLiIsCisjZW5kaWYgLyog RE9NWURJUiAqLworIiJ9OworCitzdGF0aWMgY2hhciAqaG14eHRvdWNbXSA9IHsKKyJTeW50YXg6 IFRPVUNIIFsgc3dpdGNoZXMgXSBmaWxlc3BlYyIsCisiICBVcGRhdGVzIHRoZSBtb2RpZmljYXRp b24gdGltZSBvZiB0aGUgZ2l2ZW4gZmlsZSBvciBmaWxlcyB0byB0aGUgY3VycmVudCIsCisiICBk YXRlIGFuZCB0aW1lLiAgSWYgdGhlIGZpbGVzcGVjIGlzIHRoZSBuYW1lIG9mIGEgc2luZ2xlIGZp bGUgdGhhdCBkb2VzIG5vdCIsCisiICBleGlzdCwgdGhlIGZpbGUgaXMgY3JlYXRlZC4gIFRoZSBv cHRpb25hbCBzd2l0Y2hlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIiwKKyIgIHRoZSBESVJFQ1RPUlkg Y29tbWFuZC4gIFRPVUNIIG9wZXJhdGVzIHNpbGVudGx5IHVubGVzcyB0aGUgL1ZFUkJPU0UiLAor IiAgc3dpdGNoIGlzIGdpdmVuLCBpbiB3aGljaCBjYXNlIGl0IGxpc3RzIGVhY2ggZmlsZSBpdCBh ZmZlY3RzLiIsCisiIn07CisKKyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBjaGFyICpobXh4a2NkW10g PSB7CisiU3ludGF4OiBLQ0Qgc3ltYm9saWMtZGlyZWN0b3J5LW5hbWUiLAorIiAgS2VybWl0IENo YW5nZSBEaXJlY3Rvcnk6IExpa2UgQ0QgKHEudi4pIGJ1dCAoYSkgYWx3YXlzIGFjdHMgbG9jYWxs eSwgYW5kIiwKKyIgIChiKSB0YWtlcyBhIHN5bWJvbGljIGRpcmVjdG9yeSBuYW1lIHJhdGhlciB0 aGFuIGFuIGFjdHVhbCBkaXJlY3RvcnkgbmFtZS4iLAorIiAgVGhlIHN5bWJvbGljIG5hbWVzIGNv cnJlc3BvbmQgdG8gS2VybWl0J3MgZGlyZWN0b3J5LXZhbHVlZCBidWlsdC1pbiIsCisiICB2YXJp YWJsZXMsIHN1Y2ggYXMgXFx2KGRvd25sb2FkKSwgXFx2KGV4ZWRpciksIGFuZCBzbyBvbi4gIEhl cmUncyB0aGUgbGlzdDoiCissCisiICIsCisjaWZkZWYgTlQKKyIgICAgYXBwZGF0YSAgICAgICBZ b3VyIHBlcnNvbmFsIEtlcm1pdCA5NSBhcHBsaWNhdGlvbiBkYXRhIGRpcmVjdG9yeSIsCisiICAg IGNvbW1vbiAgICAgICAgS2VybWl0IDk1J3MgYXBwbGljYXRpb24gZGF0YSBkaXJlY3RvcnkgZm9y IGFsbCB1c2VycyIsCisiICAgIGRlc2t0b3AgICAgICAgWW91ciBXaW5kb3dzIGRlc2t0b3AiLAor I2VuZGlmIC8qIE5UICovCisiICAgIGRvd25sb2FkICAgICAgWW91ciBkb3dubG9hZCBkaXJlY3Rv cnkgKGlmIGFueSkiLAorI2lmZGVmIE9TMk9SVU5JWAorIiAgICBleGVkaXIgICAgICAgIFRoZSBk aXJlY3Rvcnkgd2hlcmUgdGhlIEtlcm1pdCBleGVjdXRhYmxlIHJlc2lkZXMiLAorI2VuZGlmIC8q IE9TMk9SVU5JWCAqLworIiAgICBob21lICAgICAgICAgIFlvdXIgaG9tZSwgbG9naW4sIG9yIGRl ZmF1bHQgZGlyZWN0b3J5IiwKKyIgICAgaW5pZGlyICAgICAgICBUaGUgZGlyZWN0b3J5IHdoZXJl IEtlcm1pdCdzIGluaXRpYWxpemF0aW9uIHdhcyBmb3VuZCIsCisjaWZkZWYgVU5JWAorIiAgICBs b2NrZGlyICAgICAgIFRoZSBVTklYIFVVQ1AgbG9ja2ZpbGUgZGlyZWN0b3J5IG9uIHRoaXMgY29t cHV0ZXIiLAorI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBOVAorIiAgICBwZXJzb25hbCAgICAg IFlvdXIgXCJNeSBEb2N1bWVudHNcIiBkaXJlY3RvcnkiLAorI2VuZGlmIC8qIE5UICovCisiICAg IHN0YXJ0dXAgICAgICAgWW91ciBjdXJyZW50IGRpcmVjdG9yeSBhdCB0aGUgdGltZSBLZXJtaXQg c3RhcnRlZCIsCisiICAgIHRleHRkaXIgICAgICAgVGhlIGRpcmVjdG9yeSB3aGVyZSBLZXJtaXQg dGV4dCBmaWxlcyByZXNpZGUsIGlmIGFueSIsCisiICAgIHRtcGRpciAgICAgICAgWW91ciB0ZW1w b3JhcnkgZGlyZWN0b3J5IiwKKyIgIiwKKyIgIEFsc28gc2VlIENELCBTRVQgRklMRSBET1dOTE9B RCwgU0VUIFRFTVAtRElSRUNUT1JZLiIsCisiIgorfTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitz dGF0aWMgY2hhciAqaG14eGN3ZFtdID0geworI2lmZGVmIExPQ1VTCisiICBJZiBMT0NVUyBpcyBS RU1PVEUgb3IgTE9DVVMgaXMgQVVUTyBhbmQgeW91IGhhdmUgYW4gRlRQIGNvbm5lY3Rpb24sIiwK KyIgIHRoaXMgY29tbWFuZCBpcyBlcXVpdmFsZW50IHRvIFJFTU9URSBDRCAoUkNEKS4gIE90aGVy d2lzZToiLAorIiAiLAorI2VuZGlmIC8qIExPQ1VTICovCisjaWZkZWYgdm1zCisiU3ludGF4OiBD RCBbIGRpcmVjdG9yeSBvciBkZXZpY2U6ZGlyZWN0b3J5IF0iLAorIiAgQ2hhbmdlIFdvcmtpbmcg RGlyZWN0b3J5LiAgRXF1aXZhbGVudCB0byBWTVMgU0VUIERFRkFVTFQgY29tbWFuZC4iLAorI2Vs c2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorIkNoYW5nZSBXb3JraW5nIERpcmVjdG9yeSwgZXF1aXZh bGVudCB0byBBT1MvVlMgJ2RpcicgY29tbWFuZC4iLAorI2Vsc2UKKyNpZmRlZiBPUzIKKyJTeW50 YXg6IENEIFsgZGlzayBvciBkaXJlY3RvcnkgbmFtZSBdIiwKKyIgIENoYW5nZSBEaXNrIG9yIERp cmVjdG9yeS4gIElmIGEgZGlzayBvciBkaXJlY3RvcnkgbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCIs CisiICB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5IGJlY29tZXMgdGhlIG9uZSBzcGVjaWZpZWQgYnkg SE9NRSBlbnZpcm9ubWVudCIsCisiICB2YXJpYWJsZSwgaWYgYW55LiAgQSBkaXNrIGxldHRlciBt dXN0IGJlIGZvbGxvd2VkIGJ5IGEgY29sb24uIiwKKyNlbHNlCisiU3ludGF4OiBDRCBbIGRpcmVj dG9yeSBuYW1lIF0iLAorIiAgQ2hhbmdlIERpcmVjdG9yeS4gIENoYW5nZXMgeW91ciBjdXJyZW50 LCB3b3JraW5nLCBkZWZhdWx0IGRpcmVjdG9yeSB0byB0aGUiLAorIiAgb25lIGdpdmVuLCBzbyB0 aGF0IGZ1dHVyZSBub24tYWJzb2x1dGUgZmlsZW5hbWUgcmVmZXJlbmNlcyBhcmUgcmVsYXRpdmUg dG8iLAorIiAgdGhpcyBkaXJlY3RvcnkuICBJZiB0aGUgZGlyZWN0b3J5IG5hbWUgaXMgb21pdHRl ZCwgeW91ciBob21lIChsb2dpbikiLAorIiAgZGlyZWN0b3J5IGlzIHN1cHBsaWVkLiIsCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiB2bXMgKi8K KyIgIEMtS2VybWl0J3MgZGVmYXVsdCBwcm9tcHQgc2hvd3MgeW91ciBjdXJyZW50IGRpcmVjdG9y eS4iLAorIiAgU3lub255bXM6IExDRCwgQ1dELiIsCisjaWZkZWYgTE9DVVMKKyIgIEFsc28gc2Vl OiBTRVQgTE9DVVMsIFBXRCwgQ0RVUCwgQkFDSywgUkVNT1RFIENEIChSQ0QpLCBTRVQgQ0QsIFNF VCBQUk9NUFQuIiwKKyNlbHNlCisiICBBbHNvIHNlZTogUFdELCBDRFVQLCBCQUNLLCBSRU1PVEUg Q0QgKFJDRCksIFNFVCBDRCwgU0VUIFBST01QVC4iLAorI2VuZGlmIC8qIExPQ1VTICovCisjaWZu ZGVmIE5PU1BMCisiICBBbmQgc2VlOiBIRUxQIEtDRC4iLAorI2VuZGlmIC8qIE5PU1BMICovCisi ICBSZWxldmFudCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IENEUEFUSCwgSE9NRS4iLAorIiJ9Owor CitzdGF0aWMgY2hhciAqaG14eGRlbFtdID0geworIlN5bnRheDogREVMRVRFIFsgc3dpdGNoZXMu Li4gXSBmaWxlc3BlYyIsCisjaWZkZWYgTE9DVVMKKyIgIElmIExPQ1VTIGlzIFJFTU9URSBvciBM T0NVUyBpcyBBVVRPIGFuZCB5b3UgaGF2ZSBhbiBGVFAgY29ubmVjdGlvbiwiLAorIiAgdGhpcyBj b21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gUkVNT1RFIERFTEVURSAoUkRFTEVURSkuICBPdGhlcndp c2U6IiwKKyIgIiwKKyNlbmRpZiAvKiBMT0NVUyAqLworIiAgRGVsZXRlcyBhIGZpbGUgb3IgZmls ZXMgb24gdGhlIGNvbXB1dGVyIHdoZXJlIEMtS2VybWl0IGlzIHJ1bm5pbmcuIiwKKyIgIFRoZSBm aWxlc3BlYyBtYXkgZGVub3RlIGEgc2luZ2xlIGZpbGUgb3IgY2FuIGluY2x1ZGUgd2lsZGNhcmQg Y2hhcmFjdGVycyIsCisiICB0byBtYXRjaCBtdWx0aXBsZSBmaWxlcy4gIFJNIGlzIGEgc3lub255 bSBmb3IgREVMRVRFLiAgU3dpdGNoZXMgaW5jbHVkZToiLAorIiAiLAorIi9BRlRFUjpkYXRlLXRp bWUiLAorI2lmZGVmIFZNUworIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBjcmVh dGVkIGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUgYXJlIiwKKyNlbHNlCisiICBTcGVjaWZpZXMg dGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUg YXJlIiwKKyNlbmRpZiAvKiBWTVMgKi8KKyIgIHRvIGJlIGRlbGV0ZWQuICBIRUxQIERBVEUgZm9y IGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuIiwKKyIgIiwKKyIvQkVGT1JFOmRhdGUtdGlt ZSIsCisjaWZkZWYgVk1TCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlm aWVkIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKKyNlbHNlCisiICBTcGVjaWZpZXMgdGhh dCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwK KyNlbmRpZiAvKiBWTVMgKi8KKyIgIGFyZSB0byBiZSBkZWxldGVkLiIsCisiICIsCisiL05PVC1B RlRFUjpkYXRlLXRpbWUiLAorI2lmZGVmIFZNUworIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9z ZSBmaWxlcyBtb2RpZmllZCBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZWxz ZQorIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBiZWZv cmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZW5kaWYgLyogVk1TICovCisiICBhcmUgdG8gYmUg ZGVsZXRlZC4iLAorIiAiLAorIi9OT1QtQkVGT1JFOmRhdGUtdGltZSIsCisjaWZkZWYgVk1TCisi ICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGFmdGVyIHRo ZSBnaXZlbiBkYXRlLXRpbWUiLAorI2Vsc2UKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2Ug ZmlsZXMgbW9kaWZpZWQgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZW5kaWYg LyogVk1TICovCisiICBhcmUgdG8gYmUgZGVsZXRlZC4iLAorIiAiLAorIi9MQVJHRVItVEhBTjpu dW1iZXIiLAorIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBsb25nZXIgdGhhbiB0 aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGFyZSIsCisiICB0byBiZSBkZWxldGVkLiIsCisiICIs CisiL1NNQUxMRVItVEhBTjpudW1iZXIiLAorIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBm aWxlcyBzbWFsbGVyIHRoYW4gdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcyBhcmUiLAorIiAgdG8g YmUgc2VudC4iLAorIiAiLAorIi9FWENFUFQ6cGF0dGVybiIsCisiICBTcGVjaWZpZXMgdGhhdCBh bnkgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4sIHdoaWNoIGNhbiBiZSBhIiwK KyIgIHJlZ3VsYXIgZmlsZW5hbWUgb3IgbWF5IGNvbnRhaW4gd2lsZGNhcmRzLCBhcmUgbm90IHRv IGJlIGRlbGV0ZWQuICBUbyIsCisiICBzcGVjaWZ5IG11bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4 KSwgdXNlIG91dGVyIGJyYWNlcyBhcm91bmQgdGhlIGdyb3VwIiwKKyIgIGFuZCBpbm5lciBicmFj ZXMgYXJvdW5kIGVhY2ggcGF0dGVybjoiLAorIiAiLAorIiAgICAvRVhDRVBUOnt7cGF0dGVybjF9 e3BhdHRlcm4yfS4uLn0iLAorIiAiLAorI2lmZGVmIFVOSVhPUk9TSworIi9ET1RGSUxFUyIsCisi ICBJbmNsdWRlIChkZWxldGUpIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggXCIuXCIuIiwK KyIgIiwKKyIvTk9ET1RGSUxFUyIsCisiICBTa2lwIChkb24ndCBkZWxldGUpIGZpbGVzIHdob3Nl IG5hbWVzIGJlZ2luIHdpdGggXCIuXCIuIiwKKyIgIiwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8K KyIvVFlQRTpURVhUIiwKKyIgIERlbGV0ZSBvbmx5IHJlZ3VsYXIgdGV4dCBmaWxlcyAocmVxdWly ZXMgRklMRSBTQ0FOIE9OKSIsCisiICIsCisiL1RZUEU6QklOQVJZIiwKKyIgIERlbGV0ZSBvbmx5 IHJlZ3VsYXIgYmluYXJ5IGZpbGVzIChyZXF1aXJlcyBGSUxFIFNDQU4gT04pIiwKKyIgIiwKKyIv RElSRUNUT1JJRVMiLAorIiAgSW5jbHVkZSBkaXJlY3Rvcmllcy4gIElmIHRoaXMgc3dpdGNoIGlz IG5vdCBnaXZlbiwgb25seSByZWd1bGFyIGZpbGVzIiwKKyIgIGFyZSBkZWxldGVkLiAgSWYgaXQg aXMgZ2l2ZW4sIEtlcm1pdCBhdHRlbXB0cyB0byBkZWxldGUgYW55IGRpcmVjdG9yaWVzIiwKKyIg IHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGZpbGUgc3BlY2lmaWNhdGlvbiwgd2hpY2ggc3VjY2VlZHMg b25seSBpZiB0aGUiLAorIiAgZGlyZWN0b3J5IGlzIGVtcHR5LiIsCisiICIsCisjaWZkZWYgUkVD VVJTSVZFCisiL1JFQ1VSU0lWRSIsCisiICBUaGUgREVMRVRFIGNvbW1hbmQgYXBwbGllcyB0byB0 aGUgZW50aXJlIGRpcmVjdG9yeSB0cmVlIHJvb3RlZCBpbiB0aGUiLAorIiAgY3VycmVudCBvciBz cGVjaWZpZWQgZGlyZWN0b3J5LiAgV2hlbiB0aGUgL0RJUkVDVE9SSUVTIHN3aXRjaCBpcyBhbHNv IiwKKyIgIGdpdmVuLCBLZXJtaXQgZGVsZXRlcyBhbGwgdGhlIChtYXRjaGluZykgZmlsZXMgaW4g ZWFjaCBkaXJlY3RvcnkgYmVmb3JlIiwKKyIgIGF0dGVtcHRpbmcgdG8gZGVsZXRlIHRoZSBkaXJl Y3RvcnkgaXRzZWxmLiIsCisiICIsCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisjaWZkZWYgVU5J WAorI2lmZGVmIFJFQ1VSU0lWRQorIi9BTEwiLAorIiAgVGhpcyBpcyBhIHNob3J0Y3V0IGZvciAv UkVDVVJTSVZFIC9ESVJFQ1RPUklFUyAvRE9URklMRVMuIiwKKyNlbHNlCisiL0FMTCIsCisiICBU aGlzIGlzIGEgc2hvcnRjdXQgZm9yIC9ESVJFQ1RPUklFUyAvRE9URklMRVMuIiwKKyNlbmRpZiAv KiBSRUNVUlNJVkUgKi8KKyNlbHNlICAvKiAhVU5JWCAqLworI2lmZGVmIFJFQ1VSU0lWRQorIi9B TEwiLAorIiAgVGhpcyBpcyBhIHNob3J0Y3V0IGZvciAvUkVDVVJTSVZFIC9ESVJFQ1RPUklFUy4i LAorI2Vsc2UKKyIvQUxMIiwKKyIgIFRoaXMgaXMgYSBzeW5vbnltIGZvciAvRElSRUNUT1JJRVMu IiwKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyNlbmRpZiAvKiBVTklYICovCisiICIsCisiL0xJ U1QiLAorIiAgTGlzdCBlYWNoIGZpbGUgYW5kIHRlbGwgd2hldGhlciBpdCB3YXMgZGVsZXRlZC4g IFN5bm9ueW1zOiAvTE9HLCAvVkVSQk9TRS4iLAorIiAiLAorIi9OT0xJU1QiLAorIiAgRG9uJ3Qg bGlzdCBmaWxlcyB3aGlsZSBkZWxldGluZy4gIFN5bm9ueW1zOiAvTk9MT0csIC9RVUlFVC4iLAor IiAiLAorIi9IRUFESU5HIiwKKyIgIFByaW50IGhlYWRpbmcgYW5kIHN1bW1hcnkgaW5mb3JtYXRp b24uIiwKKyIgIiwKKyIvTk9IRUFESU5HIiwKKyIgIERvbid0IHByaW50IGhlYWRpbmcgYW5kIHN1 bW1hcnkgaW5mb3JtYXRpb24uIiwKKyIgIiwKKyIvU1VNTUFSWSIsCisiICBMaWtlIC9IRUFESU5H IC9OT0xJU1QsIGJ1dCBvbmx5IHByaW50cyB0aGUgc3VtbWFyeSBsaW5lLiIsCisiICIsCisiL1BB R0UiLAorIiAgSWYgbGlzdGluZywgcGF1c2UgYWZ0ZXIgZWFjaCBzY3JlZW5mdWwuIiwKKyIgIiwK KyIvTk9QQUdFIiwKKyIgIERvbid0IHBhdXNlIGFmdGVyIGVhY2ggc2NyZWVuZnVsLiIsCisiICIs CisiL0FTSyIsCisiICBJbnRlcmFjdGl2ZWx5IGFzayBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBlYWNo IGZpbGUuICBSZXBseSBZZXMgb3IgT0sgdG8iLAorIiAgZGVsZXRlIGl0LCBObyBub3QgdG8gZGVs ZXRlIGl0LCBRdWl0IHRvIGNhbmNlbCB0aGUgREVMRVRFIGNvbW1hbmQsIGFuZCIsCisiICBHbyB0 byBnbyBhaGVhZCBhbmQgZGVsZXRlIGFsbCB0aGUgcmVzdCBvZiB0aGUgZmlsZXMgd2l0aG91dCBh c2tpbmcuIiwKKyIgIiwKKyIvTk9BU0siLAorIiAgRGVsZXRlIGZpbGVzIHdpdGhvdXQgYXNraW5n IHBlcm1pc3Npb24uIiwKKyIgIiwKKyIvU0lNVUxBVEUiLAorIiAgUHJldmlldyBmaWxlcyBzZWxl Y3RlZCBmb3IgZGVsZXRpb24gd2l0aG91dCBhY3R1YWxseSBkZWxldGluZyB0aGVtLiIsCisiICBJ bXBsaWVzIC9MSVNULiIsCisiICIsCisiVXNlIFNFVCBPUFRJT05TIERFTEVURSB0byBtYWtlIHNl bGVjdGVkIHN3aXRjaGVzIGVmZmVjdGl2ZSBmb3IgZXZlcnkgREVMRVRFIiwKKyJjb21tYW5kIFwK K3VubGVzcyB5b3Ugb3ZlcnJpZGUgdGhlbTsgdXNlIFNIT1cgT1BUSU9OUyB0byBzZWUgc2VsZWN0 aW9ucyBjdXJyZW50bHkiLAorI2lmZGVmIExPQ1VTCisiaW4gZWZmZWN0LiAgQWxzbyBzZWUgSEVM UCBTRVQgTE9DVVMsIEhFTFAgUFVSR0UsIEhFTFAgV0lMRENBUkQuIiwKKyNlbHNlCisiaW4gZWZm ZWN0LiAgQWxzbyBzZWUgSEVMUCBQVVJHRSwgSEVMUCBXSUxEQ0FSRC4iLAorI2VuZGlmIC8qIExP Q1VTICovCisiIn07CisKKyNpZm5kZWYgTk9IVFRQCitzdGF0aWMgY2hhciAqaG14eGh0dHBbXSA9 IHsKKyJTeW50YXg6IiwKKyNpZmRlZiBDS19TU0wKKyJIVFRQIFsgPHN3aXRjaGVzPiBdIE9QRU4g W3sgL1NTTCwgL1RMUyB9XSA8aG9zdG5hbWU+IDxzZXJ2aWNlL3BvcnQ+IiwKKyNlbHNlCisiSFRU UCBbIDxzd2l0Y2hlcz4gXSBPUEVOIDxob3N0bmFtZT4gPHNlcnZpY2UvcG9ydD4iLAorI2VuZGlm IC8qQ0tfU1NMICovCisiICBJbnN0cnVjdHMgS2VybWl0IHRvIG9wZW4gYSBuZXcgY29ubmVjdGlv biBmb3IgSFRUUCBjb21tdW5pY2F0aW9uIHdpdGgiLAorIiAgdGhlIHNwZWNpZmllZCBob3N0IG9u IHRoZSBzcGVjaWZpZWQgcG9ydC4gIFRoZSBkZWZhdWx0IHBvcnQgaXMgXCJodHRwXCIuIiwKKyNp ZmRlZiBDS19TU0wKKyIgIElmIC9TU0wgb3IgL1RMUyBhcmUgc3BlY2lmaWVkIG9yIGlmIHRoZSBz ZXJ2aWNlIGlzIFwiaHR0cHNcIiBvciBwb3J0IDQ0MywiLAorIiAgYSBzZWN1cmUgY29ubmVjdGlv biB3aWxsIGJlIGVzdGFibGlzaGVkIHVzaW5nIHRoZSBjdXJyZW50IGF1dGhlbnRpY2F0aW9uIiwK KyIgIHNldHRpbmdzLiAgU2VlIEhFTFAgU0VUIEFVVEggZm9yIGRldGFpbHMuIiwKKyNlbmRpZiAv KiBDS19TU0wgKi8KKyIgIElmIDxzd2l0Y2hlcz4gYXJlIHNwZWNpZmllZCwgdGhleSBhcmUgYXBw bGllZCB0byBhbGwgc3Vic2VxdWVudCBIVFRQIiwKKyIgIGFjdGlvbnMgKEdFVCwgUFVULCAuLi4p IHVudGlsIGFuIEhUVFAgQ0xPU0UgY29tbWFuZCBpcyBleGVjdXRlZC4iLAorIiAgQSBVUkwgY2Fu IGJlIGluY2x1ZGVkIGluIHBsYWNlIG9mIHRoZSBob3N0bmFtZSBhbmQgc2VydmljZSBvciBwb3J0 LiIsCisiICIsCisiSFRUUCBDTE9TRSIsCisiICBJbnN0cnVjdHMgS2VybWl0IHRvIGNsb3NlIGFu eSBvcGVuIEhUVFAgY29ubmVjdGlvbiBhbmQgY2xlYXIgYW55IHNhdmVkIiwKKyIgIHN3aXRjaCB2 YWx1ZXMuIiwKKyIgIiwKKyJIVFRQIFsgPHN3aXRjaGVzPiBdIENPTk5FQ1QgPGhvc3Q+Wzo8cG9y dD5dIiwKKyIgIEluc3RydWN0cyB0aGUgc2VydmVyIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24g d2l0aCB0aGUgc3BlY2lmaWVkIGhvc3QiLAorIiAgYW5kIHRvIHJlZGlyZWN0IGFsbCBkYXRhIHRy YW5zbWl0dGVkIGJldHdlZW4gS2VybWl0IGFuZCB0aGUgaG9zdCBmb3IgdGhlIiwKKyIgIGxpZmUg b2YgdGhlIGNvbm5lY3Rpb24uIiwKKyIgIiwKKyJIVFRQIFsgPHN3aXRjaGVzPiBdIEdFVCA8cmVt b3RlLWZpbGVuYW1lPiBbIDxsb2NhbC1maWxlbmFtZT4gXSIsCisiICBSZXRyaWV2ZXMgdGhlIG5h bWVkIGZpbGUgb24gdGhlIGN1cnJlbnRseSBvcGVuIEhUVFAgY29ubmVjdGlvbi4gIFRoZSIsCisi ICBkZWZhdWx0IGxvY2FsIGZpbGVuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSByZW1vdGUgZmlsZW5h bWUsIGJ1dCB3aXRoIGFueSIsCisiICBwYXRoIHN0cmlwcGVkLiAgSWYgeW91IHdhbnQgdGhlIGZp bGUgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4gaW5zdGVhZCIsCisiICBvZiBzdG9yZWQg b24gZGlzaywgaW5jbHVkZSB0aGUgL1RPU0NSRUVOIHN3aXRjaCBhbmQgb21pdCB0aGUgbG9jYWwi LAorIiAgZmlsZW5hbWUuICBJZiB5b3UgZ2l2ZSBhIFVSTCBpbnN0ZWFkIG9mIGEgcmVtb3RlIGZp bGVuYW1lLCB0aGlzIGNvbW1hbmRzIiwKKyIgIG9wZW5zIHRoZSBjb25uZWN0aW9uLCBHRVRzIHRo ZSBmaWxlLCBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uOyB0aGUgc2FtZSIsCisiICBpcyB0cnVl IGZvciB0aGUgcmVtYWluaW5nIEhUVFAgY29tbWFuZHMgZm9yIHdoaWNoIHlvdSBjYW4gc3BlY2lm eSBhIiwKKyIgIHJlbW90ZSBmaWxlbmFtZSwgZGlyZWN0b3J5IG5hbWUsIG9yIHBhdGguIiwKKyIg IiwKKyJIVFRQIFsgPHN3aXRjaGVzPiBdIEhFQUQgPHJlbW90ZS1maWxlbmFtZT4gWyA8bG9jYWwt ZmlsZW5hbWU+IF0iLAorIiAgTGlrZSBHRVQgZXhjZXB0IHdpdGhvdXQgYWN0dWFsbHkgZ2V0dGlu ZyB0aGUgZmlsZTsgaW5zdGVhZCBpdCBnZXRzIG9ubHkiLAorIiAgdGhlIGhlYWRlcnMsIHN0b3Jp bmcgdGhlbSBpbnRvIHRoZSBnaXZlbiBmaWxlIChpZiBhIGxvY2FsIGZpbGVuYW1lIGlzIiwKKyIg IHNwZWNpZmllZCksIG9uZSBsaW5lIHBlciBoZWFkZXIgaXRlbSBhcyBzaG93biBpbiB0aGUgL0FS UkFZOiBzd2l0Y2giLAorIiAgZGVzY3JpcHRpb24uIiwKKyIgIiwKKyJIVFRQIFsgPHN3aXRjaGVz PiBdIElOREVYIDxyZW1vdGUtZGlyZWN0b3J5PiBbIDxsb2NhbC1maWxlbmFtZT4gXSIsCisiICBS ZXRyaWV2ZXMgdGhlIGZpbGUgbGlzdGluZyBmb3IgdGhlIGdpdmVuIHNlcnZlciBkaXJlY3Rvcnku IiwKKyIgIE5PVEU6IFRoaXMgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IG1vc3QgV2ViIHNl cnZlcnMsIGFuZCBldmVuIHdoZW4iLAorIiAgdGhlIHNlcnZlciB1bmRlcnN0YW5kIGl0LCB0aGVy ZSBpcyBubyBzdGFyZGFyZCByZXNwb25zZSBmb3JtYXQuIiwKKyIgIiwKKyJIVFRQIFsgPHN3aXRj aGVzPiBdIFBPU1QgWyAvTUlNRS1UWVBFOjx0eXBlPiBdIDxsb2NhbC1maWxlPiA8cmVtb3RlLXBh dGg+IiwKKyIgICAgIFsgPGRlc3QtZmlsZT4gXSIsCisiICBVc2VkIHRvIHNlbmQgYSByZXNwb25z ZSBhcyBpZiBpdCB3ZXJlIHNlbnQgZnJvbSBhIGZvcm0uICBUaGUgZGF0YSB0byBiZSIsCisiICBw b3N0ZWQgbXVzdCBiZSByZWFkIGZyb20gYSBmaWxlLiIsCisiICIsCisiSFRUUCBbIDxzd2l0Y2hl cz4gXSBQVVQgWyAvTUlNRS1UWVBFOjx0eXBlPiBdIDxsb2NhbC1maWxlPiA8cmVtb3RlLWZpbGU+ IiwKKyIgICAgIFsgPGRlc3QtZmlsZT4gXSIsCisiICBVcGxvYWRzIHRoZSBnaXZlbiBsb2NhbCBm aWxlIHRvIHNlcnZlciBmaWxlLiAgSWYgdGhlIHJlbW90ZSBmaWxlbmFtZSBpcyIsCisiICBvbWl0 dGVkLCB0aGUgbG9jYWwgbmFtZSBpcyB1c2VkLCBidXQgd2l0aCBhbnkgcGF0aCBzdHJpcHBlZC4i LAorIiAiLAorIkhUVFAgWyA8c3dpdGNoZXM+IF0gREVMRVRFIDxyZW1vdGUtZmlsZW5hbWU+IiwK KyIgIEluc3RydWN0cyB0aGUgc2VydmVyIHRvIGRlbGV0ZSB0aGUgc3BlY2lmaWVkIGZpbGVuYW1l LiIsCisiICIsCisid2hlcmUgPHN3aXRjaGVzPiBhcmU6IiwKKyIvQUdFTlQ6PHVzZXItYWdlbnQ+ IiwKKyIgIElkZW50aWZpZXMgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyOyBcIkMtS2VybWl0XCIg b3IgXCJLZXJtaXQtOTVcIiIsCisiICBieSBkZWZhdWx0LiIsCisiICIsCisiL0hFQURFUjo8aGVh ZGVyLWxpbmU+IiwKKyIgIFVzZWQgZm9yIHNwZWNpZnlpbmcgYW55IG9wdGlvbmFsIGhlYWRlcnMu ICBBIGxpc3Qgb2YgaGVhZGVycyBpcyBwcm92aWRlZCIsCisiICB1c2luZyBicmFjZXMgZm9yIGdy b3VwaW5nOiIsCisiICIsCisiICAgIC9IRUFERVI6e3s8dGFnPjo8dmFsdWU+fXs8dGFnPjo8dmFs dWU+fS4uLn0iLAorIiAiLAorIiAgRm9yIGEgbGlzdGluZyBvZiB2YWxpZCA8dGFnPiB2YWx1ZSBh bmQgPHZhbHVlPiBmb3JtYXRzIHNlZSBSRkMgMTk0NToiLAorIiAgXCJIeXBlcnRleHQgVHJhbnNm ZXIgUHJvdG9jb2wgLS0gSFRUUC8xLjBcIi4gIEEgbWF4aW11bSBvZiBlaWdodCBoZWFkZXJzIiwK KyIgIG1heSBiZSBzcGVjaWZpZWQuIiwKKyIgIiwKKyIvVE9TQ1JFRU4iLAorIiAgRGlzcGxheSBz ZXJ2ZXIgcmVzcG9uc2VzIG9uIHRoZSBzY3JlZW4uIiwKKyIgIiwKKyIvVVNFUjo8bmFtZT4iLAor IiAgSW4gY2FzZSBhIHBhZ2UgcmVxdWlyZXMgYSB1c2VybmFtZSBmb3IgYWNjZXNzLiIsCisiICIs CisiL1BBU1NXT1JEOjxwYXNzd29yZD4iLAorIiAgSW4gY2FzZSBhIHBhZ2UgcmVxdWlyZXMgYSBw YXNzd29yZCBmb3IgYWNjZXNzLiIsCisiICIsCisiL0FSUkFZOjxhcnJheW5hbWU+IiwKKyIgIFRl bGxzIEtlcm1pdCB0byBzdG9yZSB0aGUgcmVzcG9uc2UgaGVhZGVycyBpbiB0aGUgZ2l2ZW4gYXJy YXksIG9uZSBsaW5lIiwKKyIgIHBlciBlbGVtZW50LiAgVGhlIGFycmF5IG5lZWQgbm90IGJlIGRl Y2xhcmVkIGluIGFkdmFuY2UuICBFeGFtcGxlOiIsCisiICIsCisiICAgIGh0dHAgL2FycmF5OmMg Z2V0IGtlcm1pdC9pbmRleC5odG1sIiwKKyIgICAgc2hvdyBhcnJheSBjIiwKKyIgICAgRGltZW5z aW9uID0gOSIsCisiICAgIDEuIERhdGU6IEZyaSwgMjYgTm92IDE5OTkgMjM6MTI6MjIgR01UIiwK KyIgICAgMi4gU2VydmVyOiBBcGFjaGUvMS4zLjQgKFVuaXgpIiwKKyIgICAgMy4gTGFzdC1Nb2Rp ZmllZDogTW9uLCAwNiBTZXAgMTk5OSAyMjozNTo1OCBHTVQiLAorIiAgICA0LiBFVGFnOiBcImJj MDQ5LWY3Mi0zN2Q0NDFjZVwiIiwKKyIgICAgNS4gQWNjZXB0LVJhbmdlczogYnl0ZXMiLAorIiAg ICA2LiBDb250ZW50LUxlbmd0aDogMzk1NCIsCisiICAgIDcuIENvbm5lY3Rpb246IGNsb3NlICAg ICAiLAorIiAgICA4LiBDb250ZW50LVR5cGU6IHRleHQvaHRtbCIsCisiICIsCisiQXMgeW91IGNh biBzZWUsIHRoZSBoZWFkZXIgbGluZXMgYXJlIGxpa2UgTUlNRSBlLW1haWwgaGVhZGVyIGxpbmVz OiIsCisiaWRlbnRpZmllciwgY29sb24sIHZhbHVlLiAgVGhlIC9BUlJBWSBzd2l0Y2ggaXMgdGhl IG9ubHkgbWV0aG9kIGF2YWlsYWJsZSIsCisidG8gYSBzY3JpcHQgdG8gcHJvY2VzcyB0aGUgc2Vy dmVyIHJlc3BvbnNlcyBmb3IgYSBQT1NUIG9yIFBVVCBjb21tYW5kLiIsCisiICIsCisiIgorfTsK KyNlbmRpZiAvKiBOT0hUVFAgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCitzdGF0aWMgY2hhciAq aG14eGF1dGhbXSA9IHsKKyJTeW50YXg6IiwKKyJBVVRIRU5USUNBVEUgeyBLRVJCRVJPUzQsIEtF UkJFUk9TNSBbIHN3aXRjaGVzIF0gfSA8YWN0aW9uPiBbIHN3aXRjaGVzIF0iLAorIiAgT2J0YWlu cyBvciBkZXN0cm95cyBLZXJiZXJvcyB0aWNrZXRzIGFuZCBsaXN0cyBpbmZvcm1hdGlvbiBhYm91 dCB0aGVtLiIsCisiICBBY3Rpb25zIGFyZSBJTklUSUFMSVpFLCBERVNUUk9ZLCBhbmQgTElTVC1D UkVERU5USUFMUy4gIEtFUkJFUk9TNCBjYW4gYmUiLAorIiAgYWJicmV2aWF0ZWQgSzQgb3IgS1JC NDsgS0VSQkVST1M1IGNhbiBiZSBhYmJyZXZpYXRlZCBLNSBvciBLUkI1LiAgVXNlID8gdG8iLAor IiAgc2VlIHdoaWNoIGtleXdvcmRzLCBzd2l0Y2hlcywgb3Igb3RoZXIgcXVhbnRpdGllcyBhcmUg dmFsaWQgYXQgZWFjaCBwb2ludCIsCisiICBpbiB0aGUgY29tbWFuZC4iLAorIiAiLAorIiAgVGhl IGFjdGlvbnMgYXJlIElOSVRJQUxJWkUsIERFU1RST1ksIGFuZCBMSVNULUNSRURFTlRJQUxTOiIs CisiICIsCisiICAgIEFVVEggeyBLNCwgSzUgfSB7IElOSVRJQUxJWkUgW3N3aXRjaGVzXSwgREVT VFJPWSwiLAorIiAgICAgIExJU1QtQ1JFREVOVElBTFMgW3N3aXRjaGVzXSB9IiwKKyIgIiwKKyIg IFRoZSBJTklUSUFMSVpFIGFjdGlvbiBpcyB0aGUgbW9zdCBjb21wbGV4LCBhbmQgaXRzIGZvcm1h dCBpcyBkaWZmZXJlbnQiLAorIiAgZm9yIEtlcmJlcm9zIDQgYW5kIEtlcmJlcm9zIDUuICBUaGUg Zm9ybWF0IGZvciBLZXJiZXJvcyA0IGlzOiIsCisiICIsCisiICBBVVRIIEs0IElOSVRJQUxJWkUg WyAvSU5TVEFOQ0U6PG5hbWU+IC9MSUZFVElNRTo8bWludXRlcz4gLSIsCisiICAgIC9QQVNTV09S RDo8cGFzc3dvcmQ+IC9QUkVBVVRIIC9SRUFMTTo8bmFtZT4gPHByaW5jaXBhbD4gXSIsCisiICIs CisiICBBbGwgc3dpdGNoZXMgYXJlIG9wdGlvbmFsLiAgS2VyYmVyb3MgNCBJTklUSUFMSVpFIHN3 aXRjaGVzIGFyZToiLAorIiAiLAorIiAgL0lOU1RBTkNFOjxuYW1lPiIsCisiICAgIEFsbG93cyBh biBJbnN0YW5jZSAoc3VjaCBhcyBhIGhvc3RuYW1lKSB0byBiZSBzcGVjaWZpZWQuIiwKKyIgIiwK KyIgIC9MSUZFVElNRTo8bnVtYmVyPiIsCisiICAgIFNwZWNpZmllcyB0aGUgcmVxdWVzdGVkIGxp ZmV0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSB0aWNrZXQuICBJZiBubyIsCisiICAgIGxpZmV0aW1l IGlzIHNwZWNpZmllZCwgNjAwIG1pbnV0ZXMgaXMgdXNlZC4gIElmIHRoZSBsaWZldGltZSBpcyBn cmVhdGVyIiwKKyIgICAgdGhhbiB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgdGhlIHRpY2tldCBn cmFudGluZyBzZXJ2aWNlLCB0aGUgcmVzdWx0aW5nIiwKKyIgICAgbGlmZXRpbWUgaXMgc2hvcnRl bmVkIGFjY29yZGluZ2x5LiIsCisiICIsCisiICAvTk9ULVBSRUFVVEgiLAorIiAgICBJbnN0cnVj dHMgS2VybWl0IHRvIHNlbmQgYSB0aWNrZXQgZ2V0dGluZyB0aWNrZXQgKFRHVCkgcmVxdWVzdCB0 byB0aGUiLAorIiAgICBLREMgd2l0aG91dCBhbnkgcHJlYXV0aGVudGljYXRpb24gZGF0YS4iLAor IiAiLAorIiAgL1BBU1NXT1JEOjxzdHJpbmc+IiwKKyIgICAgQWxsb3dzIGEgcGFzc3dvcmQgdG8g YmUgaW5jbHVkZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvciBpbiBhIHNjcmlwdCIsCisiICAgIGZp bGUuICBJZiBubyAvUEFTU1dPUkQgc3dpdGNoIGlzIGluY2x1ZGVkLCB5b3UgYXJlIHByb21wdGVk IG9uIGEgc2VwYXJhdGUiCissCisiICAgIGxpbmUuICBUaGUgcGFzc3dvcmQgc3dpdGNoIGlzIHBy b3ZpZGVkIG9uIGEgdXNlLWF0LXlvdXItb3duLXJpc2sgYmFzaXMiLAorIiAgICBmb3IgdXNlIGlu IGF1dG9tYXRlZCBzY3JpcHRzLiAgV0FSTklORzogUGFzc3dvcmRzIHNob3VsZCBub3QgYmUgc3Rv cmVkIGluIgorLAorIiAgICBmaWxlcy4iLAorIiAiLAorIiAgL1BSRUFVVEgiLAorIiAgICBJbnN0 cnVjdHMgS2VybWl0IHRvIHNlbmQgYSBwcmVhdXRoZW50aWNhdGVkIFRpY2tldC1HZXR0aW5nIFRp Y2tldCAoVEdUKSIsCisiICAgIHJlcXVlc3QgdG8gdGhlIEtEQyBpbnN0ZWFkIG9mIGEgcGxhaW50 ZXh0IHJlcXVlc3QuICBUaGUgZGVmYXVsdCB3aGVuIiwKKyIgICAgc3VwcG9ydGVkIGJ5IHRoZSBL ZXJiZXJvcyBsaWJyYXJpZXMuIiwKKyIgIiwKKyIgIC9SRUFMTTo8bmFtZT4iLAorIiAgICBBbGxv d3MgYSByZWFsbSB0byBiZSBzcGVjaWZpZWQgKG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgcmVhbG0p LiIsCisiICIsCisiICA8cHJpbmNpcGFsPiIsCisiICAgIFlvdXIgaWRlbnRpdHkgaW4gdGhlIGdp dmVuIG9yIGRlZmF1bHQgS2VyYmVyb3MgcmVhbG0sIG9mIHRoZSBmb3JtOiIsCisiICAgIHVzZXJp ZFsuaW5zdGFuY2VbLmluc3RhbmNlXV1AW3JlYWxtXSAgIiwKKyIgICAgQ2FuIGJlIG9taXR0ZWQg aWYgaXQgaXMgdGhlIHNhbWUgYXMgeW91ciB1c2VybmFtZSBvciBTRVQgTE9HSU4gVVNFUklEIiwK KyIgICAgdmFsdWUgb24gdGhlIGNsaWVudCBzeXN0ZW0uIiwKKyIgIiwKKyIgIFRoZSBmb3JtYXQg Zm9yIEtlcmJlcm9zIDUgaXMgYXMgZm9sbG93czoiLAorIiAiLAorIiAgQVVUSCBLNSBbIC9DQUNI RTo8ZmlsZW5hbWU+IF0geyBJTklUSUFMSVpFIFsgc3dpdGNoZXMgXSwgREVTVFJPWSwiLAorIiAg ICBMSVNULUNSRURFTlRJQUxTIC4uLn0iLAorIiAiLAorIlRoZSBJTklUSUFMSVpFIGNvbW1hbmQg Zm9yIEtlcmJlcm9zIDUgY2FuIGluY2x1ZGUgYSBudW1iZXIgb2Ygc3dpdGNoZXM7IiwKKyJhbGwg YXJlIG9wdGlvbmFsOiIsCisiICIsCisiQVVUSCBLNSBbIC9DQUNIRTo8ZmlsZW5hbWU+IF0gSU5J VElUSUFMSVpFIFsgL0FERFJFU1NFUzo8YWRkci1saXN0PiIsCisiICAvRk9SV0FSREFCTEUgL0tF UkJFUk9TNCAvTElGRVRJTUU6PG1pbnV0ZXM+IC9QQVNTV09SRDo8cGFzc3dvcmQ+IiwKKyIgIC9Q T1NUREFURTo8ZGF0ZS10aW1lPiAvUFJPWElBQkxFIC9SRUFMTTo8bmFtZT4gL1JFTkVXIC9SRU5F V0FCTEU6PG1pbnV0ZXM+IiwKKyIgIC9TRVJWSUNFOjxuYW1lPiAvVkFMSURBVEUgPHByaW5jaXBh bD4gXSIsCisiICIsCisiICBBbGwgS2VyYmVyb3MgNSBJTklUSUFMSVpFIHN3aXRjaGVzIGFyZSBv cHRpb25hbDoiLAorIiAiLAorIiAgL0FERFJFU1NFUzp7bGlzdCBvZiBpcC1hZGRyZXNzZXN9IiwK KyIgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBJUCBhZGRyZXNzZXMgdGhhdCBzaG91bGQgYmUgcGxh Y2VkIGluIHRoZSBUaWNrZXQiLAorIiAgICBHZXR0aW5nIFRpY2tldCBpbiBhZGRpdGlvbiB0byB0 aGUgbG9jYWwgbWFjaGluZSBhZGRyZXNzZXMuIiwKKyIgIiwKKyIgIC9GT1JXQVJEQUJMRSIsCisi ICAgIFJlcXVlc3RzIGZvcndhcmRhYmxlIHRpY2tldHMuIiwKKyIgIiwKKyIgIC9JTlNUQU5DRTo8 bmFtZT4iLAorIiAgICBBbGxvd3MgYW4gSW5zdGFuY2UgKHN1Y2ggYXMgYSBob3N0bmFtZSkgdG8g YmUgc3BlY2lmaWVkLiIsCisiICIsCisiICAvS0VSQkVST1M0IiwKKyIgICAgSW5zdHJ1Y3RzIEtl cm1pdCB0byBnZXQgS2VyYmVyb3MgNCB0aWNrZXRzIGluIGFkZGl0aW9uIHRvIEtlcmJlcm9zIDUi LAorIiAgICB0aWNrZXRzLiAgSWYgS2VyYmVyb3MgNSB0aWNrZXRzIGFyZSBub3Qgc3VwcG9ydGVk IGJ5IHRoZSBzZXJ2ZXIsIGEiLAorIiAgICBtaWxkIHdhcm5pbmcgaXMgcHJpbnRlZCBhbmQgS2Vy YmVyb3MgNCB0aWNrZXRzIGFyZSByZXF1ZXN0ZWQuIiwKKyIgIiwKKyIgIC9MSUZFVElNRTo8bnVt YmVyPiIsCisiICAgIFNwZWNpZmllcyB0aGUgcmVxdWVzdGVkIGxpZmV0aW1lIGluIG1pbnV0ZXMg Zm9yIHRoZSB0aWNrZXQuICBJZiBubyIsCisiICAgIGxpZmV0aW1lIGlzIHNwZWNpZmllZCwgNjAw IG1pbnV0ZXMgaXMgdXNlZC4gIElmIHRoZSBsaWZldGltZSBpcyBncmVhdGVyIiwKKyIgICAgdGhh biB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgYnkgdGhlIHRpY2tldCBncmFudGluZyBzZXJ2aWNlLCB0 aGUgcmVzdWx0aW5nIiwKKyIgICAgbGlmZXRpbWUgaXMgc2hvcnRlbmVkLiIsCisiICIsCisiICAv Tk8tS0VSQkVST1M0IiwKKyIgICAgSW5zdHJ1Y3RzIEtlcm1pdCB0byBub3QgYXR0ZW1wdCB0byBy ZXRyaWV2ZSBLZXJiZXJvcyA0IGNyZWRlbnRpYWxzLiIsCisiICIsCisiICAvTk9ULUZPUldBUkRB QkxFIiwKKyIgICAgUmVxdWVzdHMgbm9uLWZvcndhcmRhYmxlIHRpY2tldHMuIiwKKyIgIiwKKyIg IC9OT1QtUFJPWElBQkxFIiwKKyIgICAgUmVxdWVzdHMgbm9uLXByb3hpYWJsZSB0aWNrZXRzLiIs CisiICIsCisiICAvUEFTU1dPUkQ6PHN0cmluZz4iLAorIiAgICBBbGxvd3MgYSBwYXNzd29yZCB0 byBiZSBpbmNsdWRlZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIGEgc2NyaXB0IiwKKyIgICAg ZmlsZS4gIElmIG5vIC9QQVNTV09SRCBzd2l0Y2ggaXMgaW5jbHVkZWQsIHlvdSBhcmUgcHJvbXB0 ZWQgb24gYSBzZXBhcmF0ZSIKKywKKyIgICAgbGluZS4gIFRoZSBwYXNzd29yZCBzd2l0Y2ggaXMg cHJvdmlkZWQgb24gYSB1c2UtYXQteW91ci1vd24tcmlzayBiYXNpcyIsCisiICAgIGZvciB1c2Ug aW4gYXV0b21hdGVkIHNjcmlwdHMuICBXQVJOSU5HOiBQYXNzd29yZHMgc2hvdWxkIG5vdCBiZSBz dG9yZWQgaW4iCissCisiICAgIGZpbGVzLiIsCisiICIsCisiICAvUE9TVERBVEU6PGRhdGUtdGlt ZT4iLAorIiAgICBSZXF1ZXN0cyBhIHBvc3RkYXRlZCB0aWNrZXQsIHZhbGlkIHN0YXJ0aW5nIGF0 IDxkYXRlLXRpbWU+LiAgUG9zdGRhdGVkIiwKKyIgICAgdGlja2V0cyBhcmUgaXNzdWVkIHdpdGgg dGhlIGludmFsaWQgZmxhZyBzZXQsIGFuZCBuZWVkIHRvIGJlIGZlZCBiYWNrIHRvIiwKKyIgICAg dGhlIEtEQyBiZWZvcmUgdXNlIHdpdGggdGhlIC9WQUxJREFURSBzd2l0Y2guICBUeXBlIEhFTFAg REFURSBmb3IgaW5mbyIsCisiICAgIG9uIGRhdGUtdGltZSBmb3JtYXRzLiIsCisiICIsCisiICAv UFJPWElBQkxFIiwKKyIgICAgUmVxdWVzdHMgcHJveGlhYmxlIHRpY2tldHMuIiwKKyIgIiwKKyIg IC9SRUFMTTo8c3RyaW5nPiIsCisiICAgIEFsbG93cyBhbiBhbHRlcm5hdGl2ZSByZWFsbSB0byBi ZSBzcGVjaWZpZWQuIiwKKyIgIiwKKyIgIC9SRU5FVyIsCisiICAgIFJlcXVlc3RzIHJlbmV3YWwg b2YgYSByZW5ld2FibGUgVGlja2V0LUdyYW50aW5nIFRpY2tldC4gIE5vdGUgdGhhdCAiLAorIiAg ICBhbiBleHBpcmVkIHRpY2tldCBjYW5ub3QgYmUgcmVuZXdlZCBldmVuIGlmIGl0IGlzIHdpdGhp biBpdHMgcmVuZXdhYmxlICIsCisiICAgIGxpZmV0aW1lLiIsCisiICIsCisiICAvUkVORVdBQkxF OjxudW1iZXI+IiwKKyIgICAgUmVxdWVzdHMgcmVuZXdhYmxlIHRpY2tldHMsIHdpdGggYSB0b3Rh bCBsaWZldGltZSBvZiA8bnVtYmVyPiBtaW51dGVzLiIsCisiICIsCisiICAvU0VSVklDRTo8c3Ry aW5nPiIsCisiICAgIEFsbG93cyBhIHNlcnZpY2Ugb3RoZXIgdGhhbiB0aGUgdGlja2V0IGdyYW50 aW5nIHNlcnZpY2UgdG8gYmUgc3BlY2lmaWVkLiIsCisiICIsCisiICAvVkFMSURBVEUiLAorIiAg ICBSZXF1ZXN0cyB0aGF0IHRoZSBUaWNrZXQgR3JhbnRpbmcgVGlja2V0IGluIHRoZSBjYWNoZSAo d2l0aCB0aGUgaW52YWxpZCIsCisiICAgIGZsYWcgc2V0KSBiZSBwYXNzZWQgdG8gdGhlIEtEQyBm b3IgdmFsaWRhdGlvbi4gIElmIHRoZSB0aWNrZXQgaXMgd2l0aGluIiwKKyIgICAgaXRzIHJlcXVl c3RlZCB0aW1lIHJhbmdlLCB0aGUgY2FjaGUgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdmFsaWRhdGVk IiwKKyIgICAgdGlja2V0LiIsCisiICIsCisiICA8cHJpbmNpcGFsPiIsCisiICAgIFlvdXIgaWRl bnRpdHkgaW4gdGhlIGdpdmVuIG9yIGRlZmF1bHQgS2VyYmVyb3MgcmVhbG0sIG9mIHRoZSBmb3Jt OiIsCisiICAgIHVzZXJpZFsvaW5zdGFuY2VdW0ByZWFsbV0gICIsCisiICAgIENhbiBiZSBvbWl0 dGVkIGlmIGl0IGlzIHRoZSBzYW1lIGFzIHlvdXIgdXNlcm5hbWUgb3IgU0VUIExPR0lOIFVTRVJJ RCIsCisiICAgIHZhbHVlIG9uIHRoZSBjbGllbnQgc3lzdGVtLiIsCisiICIsCisiICBOb3RlOiBL ZXJiZXJvcyA1IGFsd2F5cyBhdHRlbXB0cyB0byByZXRyaWV2ZSBhIFRpY2tldC1HZXR0aW5nIFRp Y2tldCAoVEdUKSIsCisiICB1c2luZyB0aGUgcHJlYXV0aGVudGljYXRlZCBUR1QgcmVxdWVzdC4i LAorIiAiLAorIiAgQVVUSE9SSVpFIEs1IExJU1QtQ1JFREVOVElBTFMgWyAvQUREUkVTU0VTIC9G TEFHUyAvRU5DUllQVElPTiBdIiwKKyIgIiwKKyIgIFNob3dzIHN0YXJ0IHRpbWUsIGV4cGlyYXRp b24gdGltZSwgc2VydmljZSBvciBwcmluY2lwYWwgbmFtZSwgcGx1cyIsCisiICB0aGUgZm9sbG93 aW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZGVwZW5kaW5nIHRoZSBzd2l0Y2hlczoiLAorIiAi LAorIiAgL0FERFJFU1NFUyBkaXNwbGF5cyB0aGUgaG9zdG5hbWVzIGFuZC9vciBJUCBhZGRyZXNz ZXMgZW1iZWRkZWQgd2l0aGluIiwKKyIgICAgdGhlIHRpY2tldHMuIiwKKyIgIiwKKyIgIC9GTEFH UyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIChpZiBhcHBsaWNhYmxlKSBmb3Ig ZWFjaCB0aWNrZXQ6IiwKKyIgICAgRiAtIFRpY2tldCBpcyBGb3J3YXJkYWJsZSIsCisiICAgIGYg LSBUaWNrZXQgd2FzIEZvcndhcmRlZCIsCisiICAgIFAgLSBUaWNrZXQgaXMgUHJveGlhYmxlIiwK KyIgICAgcCAtIFRpY2tldCBpcyBhIFByb3h5IiwKKyIgICAgRCAtIFRpY2tldCBtYXkgYmUgUG9z dGRhdGVkIiwKKyIgICAgZCAtIFRpY2tldCBoYXMgYmVlbiBQb3N0ZGF0ZWQiLAorIiAgICBpIC0g VGlja2V0IGlzIEludmFsaWQiLAorIiAgICBSIC0gVGlja2V0IGlzIFJlbmV3YWJsZSIsCisiICAg IEkgLSBUaWNrZXQgaXMgdGhlIEluaXRpYWwgVGlja2V0IiwKKyIgICAgSCAtIFRpY2tldCBoYXMg YmVlbiBhdXRoZW50aWNhdGVkIGJ5IEhhcmR3YXJlIiwKKyIgICAgQSAtIFRpY2tldCBoYXMgYmVl biBQcmUtYXV0aGVudGljYXRlZCIsCisiICIsCisiICAvRU5DUllQVElPTiBkaXNwbGF5cyB0aGUg ZW5jcnlwdGlvbiB1c2VkIGJ5IGVhY2ggdGlja2V0IChpZiBhcHBsaWNhYmxlKToiLAorIiAgICBE RVMtQ0JDLUNSQyIsCisiICAgIERFUy1DQkMtTUQ0IiwKKyIgICAgREVTLUNCQy1NRDUiLAorIiAg ICBERVMzLUNCQy1TSEEiLAorIiIKK307CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2lm bmRlZiBOT0NTRVRTCitzdGF0aWMgY2hhciAqaG14eGFzc29jW10gPSB7CisiQVNTT0NJQVRFIEZJ TEUtQ0hBUkFDVEVSLVNFVCA8ZmlsZS1jaGFyYWN0ZXItc2V0PiA8dHJhbnNmZXItY2hhcmFjdGVy LXNldD4iLAorIiAgVGVsbHMgQy1LZXJtaXQgdGhhdCB3aGVuZXZlciB0aGUgZ2l2ZW4gZmlsZS1j aGFyYWN0ZXIgc2V0IGlzIHNlbGVjdGVkLCBhbmQiLAorIiAgU0VORCBDSEFSQUNURVItU0VUIChx LnYuKSBpcyBBVVRPTUFUSUMsIHRoZSBnaXZlbiB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IiwKKyIg IGlzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuIiwKKyIgIiwKKyJBU1NPQ0lBVEUgWEZFUi1DSEFS QUNURVItU0VUIDx4ZmVyLWNoYXJhY3Rlci1zZXQ+IDxmaWxlLWNoYXJhY3Rlci1zZXQ+IiwKKyIg IFRlbGxzIEMtS2VybWl0IHRoYXQgd2hlbmV2ZXIgdGhlIGdpdmVuIHRyYW5zZmVyLWNoYXJhY3Rl ciBzZXQgaXMgc2VsZWN0ZWQsIiwKKyIgIGVpdGhlciBieSBjb21tYW5kIG9yIGJ5IGFuIGFubm91 bmNlciBhdHRhY2hlZCB0byBhbiBpbmNvbWluZyB0ZXh0IGZpbGUsIiwKKyIgIGFuZCBTRU5EIENI QVJBQ1RFUi1TRVQgaXMgQVVUT01BVElDLCB0aGUgc3BlY2lmaWVkIGZpbGUgY2hhcmFjdGVyLXNl dCBpcyIsCisiICB0byBiZSBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LiAgU3lub255bTogQVNTT0NJ QVRFIFRSQU5TRkVSLUNIQVJBQ1RFUi1TRVQuIiwKKyIgIiwKKyJVc2UgU0hPVyBBU1NPQ0lBVElP TlMgdG8gbGlzdCB0aGUgY3VycmVudCBjaGFyYWN0ZXItc2V0IGFzc29jaWF0aW9ucywgYW5kIiwK KyJTSE9XIENIQVJBQ1RFUi1TRVRTIHRvIGxpc3QgdGhlIGN1cnJlbnQgc2V0dGluZ3MuIiwKKyIi Cit9OworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworc3RhdGljIGNoYXIgKmhteHhwYXRbXSA9IHsK KyJBIFwicGF0dGVyblwiIGlzIG5vdGF0aW9uIHVzZWQgaW4gYSBzZWFyY2ggc3RyaW5nIHdoZW4g c2VhcmNoaW5nIHRocm91Z2giLAorInRleHQuICBDLUtlcm1pdCB1c2VzIHRocmVlIGtpbmRzIG9m IHBhdHRlcm5zOiBmbG9hdGluZyBwYXR0ZXJucywgYW5jaG9yZWQiLAorInBhdHRlcm5zLCBhbmQg d2lsZGNhcmRzLiAgV2lsZGNhcmRzIGFyZSBhbmNob3JlZCBwYXR0ZXJucyB0aGF0IGFyZSB1c2Vk IHRvIiwKKyJtYXRjaCBmaWxlIG5hbWVzOyB0eXBlIEhFTFAgV0lMRENBUkQgdG8gbGVhcm4gYWJv dXQgdGhlbS4iLAorIiAiLAorIkluIGEgcGF0dGVybiwgY2VydGFpbiBjaGFyYWN0ZXJzIGFyZSBz cGVjaWFsOiIsCisiICIsCisiKiBNYXRjaGVzIGFueSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUg Y2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCBcImsqdFwiIiwKKyIgIG1hdGNoZXMgYWxsIHN0cmlu Z3MgdGhhdCBzdGFydCB3aXRoIFwia1wiIGFuZCBlbmQgd2l0aCBcInRcIiBpbmNsdWRpbmciLAor IiAgXCJrdFwiLCBcImtpdFwiLCBcImtuaWdodFwiLCBvciBcImtlcm1pdFwiLiIsCisiICIsCisj aWZkZWYgVk1TCisiJSBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUs IFwiayUlJSV0XCIgbWF0Y2hlcyBhbGwgc3RyaW5ncyIsCisjZWxzZQorIj8gTWF0Y2hlcyBhbnkg c2luZ2xlIGNoYXJhY3Rlci4gIEZvciBleGFtcGxlLCBcIms/Pz8/dFwiIG1hdGNoZXMgYWxsIHN0 cmluZ3MiLAorI2VuZGlmIC8qIFZNUyAqLworIiAgdGhhdCBhcmUgZXhhY3RseSA2IGNoYXJhY3Rl cnMgbG9uZyBhbmQgc3RhcnQgd2l0aCBcImtcIiBhbmQgZW5kIHdpdGgiLAorI2lmZGVmIFZNUwor IiAgd2l0aCBcInRcIi4iLAorI2Vsc2UKKyIgIHdpdGggXCJ0XCIuICBXaGVuIHR5cGluZyBjb21t YW5kcyBhdCB0aGUgcHJvbXB0LCB5b3UgbXVzdCBwcmVjZWRlIGFueSIsCisiICBxdWVzdGlvbiBt YXJrIHRvIGJlIHVzZWQgZm9yIG1hdGNoaW5nIGJ5IGEgYmFja3NsYXNoIChcXCkgdG8gb3ZlcnJp ZGUgdGhlIiwKKyIgIG5vcm1hbCBmdW5jdGlvbiBvZiBxdWVzdGlvbiBtYXJrIGluIGludGVyYWN0 aXZlIGNvbW1hbmRzLCB3aGljaCBpcyB0byIsCisiICBwcm92aWRlIG1lbnVzIGFuZCBmaWxlIGxp c3RzLiIsCisjZW5kaWYgLyogVk1TICovCisiICIsCisjaWZkZWYgT1MyT1JVTklYCisjaWZkZWYg Q0tSRUdFWAorIlthYmNdIiwKKyIgIFNxdWFyZSBicmFja2V0cyBlbmNsb3NpbmcgYSBsaXN0IG9m IGNoYXJhY3RlcnMgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGluIiwKKyIgIHRoZSBsaXN0LiAgRXhh bXBsZTogaFthb3VddCBtYXRjaGVzIGhhdCwgaG90LCBhbmQgaHV0LiIsCisiICIsCisiW2Etel0i LAorIiAgU3F1YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIHJhbmdlIG9mIGNoYXJhY3RlcnMgbWF0 Y2hlcyBhbnkgY2hhcmFjdGVyIGluIiwKKyIgIHRoZSByYW5nZTsgYSBoeXBoZW4gKC0pIHNlcGFy YXRlcyB0aGUgbG93IGFuZCBoaWdoIGVsZW1lbnRzIG9mIHRoZSByYW5nZS4iLAorIiAgRm9yIGV4 YW1wbGUsIFthLXpdIG1hdGNoZXMgYW55IGNoYXJhY3RlciBmcm9tIGEgdG8gei4iLAorIiAiLAor IlthY2RtLXpdIiwKKyIgIExpc3RzIGFuZCByYW5nZXMgbWF5IGJlIGNvbWJpbmVkLiAgVGhpcyBl eGFtcGxlIG1hdGNoZXMgYSwgYywgZCwgb3IgYW55IiwKKyIgIGxldHRlciBmcm9tIG0gdGhyb3Vn aCB6LiIsCisiICIsCisie3N0cmluZzEsc3RyaW5nMiwuLi59IiwKKyIgIEJyYWNlcyBlbmNsb3Nl IGEgbGlzdCBvZiBzdHJpbmdzIHRvIGJlIG1hdGNoZWQuICBGb3IgZXhhbXBsZToiLAorIiAga2Vy e21pdCxuZWwsYmVyb3N9IG1hdGNoZXMga2VybWl0LCBrZXJuZWwsIGFuZCBrZXJiZXJvcy4gIFRo ZSBzdHJpbmdzIiwKKyIgIG1heSB0aGVtc2VsdmVzIGNvbnRhaW4gKiwgPywgW2FiY10sIFthLXpd LCBvciBvdGhlciBsaXN0cyBvZiBzdHJpbmdzLiIsCisjZW5kaWYgLyogQ0tSRUdFWCAqLworI2Vu ZGlmIC8qIE9TMk9SVU5JWCAqLworI2lmbmRlZiBOT1NQTAorIiAiLAorIlRvIGZvcmNlIGEgc3Bl Y2lhbCBwYXR0ZXJuIGNoYXJhY3RlciB0byBiZSB0YWtlbiBsaXRlcmFsbHksIHByZWNlZGUgaXQg d2l0aCIsCisiYSBiYWNrc2xhc2gsIGUuZy4gW2FcXC16XSBtYXRjaGVzIGEsIGh5cGhlbiwgb3Ig eiByYXRoZXIgdGhhbiBhIHRocm91Z2ggei4iLAorIiAiLAorIkEgZmxvYXRpbmcgIHBhdHRlcm4g Y2FuIGFsc28gaW5jbHVkZSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgY2hhcmFjdGVyczoiLAorIiAi LAorIl4gKEZpcnN0IGNoYXJhY3RlciBvZiBwYXR0ZXJuKSBBbmNob3JzIHRoZSBwYXR0ZXJuIGF0 IHRoZSBiZWdpbm5pbmcuIiwKKyIkIChMYXN0IGNoYXJhY3RlciBvZiBwYXR0ZXJuKSBBbmNob3Jz IHRoZSBwYXR0ZXJuIGF0IHRoZSBlbmQuIiwKKyIgIiwKKyJJZiBhIGZsb2F0aW5nIHBhdHRlcm4g ZG9lcyBub3Qgc3RhcnQgd2l0aCBcIl5cIiwgdGhlIHBhdHRlcm4gY2FuIG1hdGNoIiwKKyJhbnl3 aGVyZSBpbiB0aGUgc3RyaW5nIGluc3RlYWQgb2Ygb25seSBhdCB0aGUgYmVnaW5uaW5nOyBpbiBv dGhlciB3b3JkcywgYSIsCisibGVhZGluZyBcIipcIiBpcyBhc3N1bWVkLiAgU2ltaWxhcmx5LCBp ZiB0aGUgcGF0dGVybiBkb2Vzbid0IGVuZCB3aXRoIFwiJFwiLCIsCisiYSB0cmFpbGluZyBcIipc IiBpcyBhc3N1bWVkLiIsCisiICIsCisiVGhlIGZvbGxvd2luZyBjb21tYW5kcyBhbmQgZnVuY3Rp b25zIHVzZSBmbG9hdGluZyBwYXR0ZXJuczoiLAorIiAgR1JFUCBbIDxzd2l0Y2hlcz4gXSA8cGF0 dGVybj4gPGZpbGVzcGVjPiIsCisiICBUWVBFIC9NQVRDSDo8cGF0dGVybj4gPGZpbGU+IiwKKyIg IFxcZmFycmF5bG9vayg8cGF0dGVybj4sPGFycmF5bmFtZT4pIiwKKyIgIFxcZnNlYXJjaCg8cGF0 dGVybj4sPHN0cmluZz5bLDxvZmZzZXQ+XSkiLAorIiAgXFxmcnNlYXJjaCg8cGF0dGVybj4sPHN0 cmluZz5bLDxvZmZzZXQ+XSkiLAorIiAgVGhlIC9FWENFUFQ6IGNsYXVzZSBpbiBTRU5ELCBHRVQs IERFTEVURSwgZXRjLiIsCisiICIsCisiRXhhbXBsZToiLAorIiAgXFxmc2VhcmNoKGFiYyx4eGFi Y3h4eCkgc3VjY2VlZHMgYmVjYXVzZSB4eGFiY3h4IGNvbnRhaW5zIGFiYy4iLAorIiAgXFxmc2Vh cmNoKF5hYmMseHhhYmN4eCkgZmFpbHMgYmVjYXVzZSB4eGFiY3h4IGRvZXMgbm90IHN0YXJ0IHdp dGggYWJjLiIsCisiICIsCisKKyJBbGwgb3RoZXIgY29tbWFuZHMgYW5kIGZ1bmN0aW9ucyB1c2Ug YW5jaG9yZWQgcGF0dGVybnMsIG1lYW5pbmcgdGhhdCBeIGFuZCAkIiwKKyJhcmUgbm90IHRyZWF0 ZWQgc3BlY2lhbGx5LCBhbmQgKiBpcyBub3QgYXNzdW1lZCBhdCB0aGUgYmVnaW5uaW5nIG9yIGVu ZCBvZiIsCisidGhlIHBhdHRlcm4uICBUaGlzIGlzIHRydWUgbWFpbmx5IG9mIGZpbGVuYW1lIHBh dHRlcm5zICh3aWxkY2FyZHMpLCBzaW5jZSIsCisieW91IHdvdWxkIG5vdCB3YW50IGEgY29tbWFu ZCBsaWtlIFwiZGVsZXRlIHhcIiB0byBkZWxldGUgYWxsIGZpbGVzIHdob3NlIiwgCisibmFtZXMg Y29udGFpbmVkIFwieFwiISIsCisKKyIgIiwKKyJZb3UgY2FuIHVzZSBhbmNob3JlZCBwYXR0ZXJu cyBub3Qgb25seSBpbiBmaWxlbmFtZXMsIGJ1dCBhbHNvIGluIFNXSVRDSCIsCisiY2FzZSBsYWJl bHMsIGluIHRoZSBJTlBVVCBhbmQgTUlOUFVUIGNvbW1hbmRzLCBhbmQgaW4gZmlsZSBiaW5hcnkt IGFuZCIsCisidGV4dC1wYXR0ZXJucyBmb3IgZmlsZW5hbWVzLiAgVGhlIElGIE1BVENIIHBhdHRl cm4gaXMgYWxzbyBhbmNob3JlZC4iLAorI2VuZGlmIC8qIE5PU1BMICovCisiIiB9OworCitzdGF0 aWMgY2hhciAqaG14eHdpbGRbXSA9IHsKKworIkEgXCJ3aWxkY2FyZFwiIGlzIGEgbm90YXRpb24g dXNlZCBpbiBhIGZpbGVuYW1lIHRvIG1hdGNoIG11bHRpcGxlIGZpbGVzLiIsCisiRm9yIGV4YW1w bGUsIGluIFwic2VuZCAqLnR4dFwiIHRoZSBhc3RlcmlzayBpcyBhIHdpbGRjYXJkLiAgS2VybWl0 IGNvbW1hbmRzIiwKKyJ0aGF0IGFjY2VwdCBmaWxlbmFtZXMgYWxzbyBhY2NlcHRzIHdpbGRjYXJk cywgZXhjZXB0IGNvbW1hbmRzIHRoYXQgYXJlIiwKKyJhbGxvd2VkIHRvIG9wZXJhdGUgb24gb25s eSBvbmUgZmlsZSwgc3VjaCBhcyBUUkFOU01JVC4iLAorIlRoaXMgdmVyc2lvbiBvZiBLZXJtaXQg YWNjZXB0cyB0aGUgZm9sbG93aW5nIHdpbGRjYXJkczoiLAorIiAiLAorIiogTWF0Y2hlcyBhbnkg c2VxdWVuY2Ugb2YgemVybyBvciBtb3JlIGNoYXJhY3RlcnMuICBGb3IgZXhhbXBsZSwgXCJjayou Y1wiIiwKKyIgIG1hdGNoZXMgYWxsIGZpbGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggXCJja1wi IGFuZCBlbmQgd2l0aCBcIi5jXCIiLAorIiAgaW5jbHVkaW5nIFwiY2suY1wiLiIsCisiICIsCisj aWZkZWYgVk1TCisiJSBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUs IFwiY2slLmNcIiBtYXRjaGVzIGFsbCBmaWxlcyIsCisjZWxzZQorIj8gTWF0Y2hlcyBhbnkgc2lu Z2xlIGNoYXJhY3Rlci4gIEZvciBleGFtcGxlLCBcImNrPy5jXCIgbWF0Y2hlcyBhbGwgZmlsZXMi LAorI2VuZGlmIC8qIFZNUyAqLworIiAgd2hvc2UgbmFtZXMgYXJlIGV4YWN0bHkgNSBjaGFyYWN0 ZXJzIGxvbmcgYW5kIHN0YXJ0IHdpdGggXCJja1wiIGFuZCBlbmQiLAorI2lmZGVmIFZNUworIiAg d2l0aCBcIi5jXCIuIiwKKyNlbHNlCisiICB3aXRoIFwiLmNcIi4gIFdoZW4gdHlwaW5nIGNvbW1h bmRzIGF0IHRoZSBwcm9tcHQsIHlvdSBtdXN0IHByZWNlZGUgYW55IiwKKyIgIHF1ZXN0aW9uIG1h cmsgdG8gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgYnkgYSBiYWNrc2xhc2ggKFxcKSB0byBvdmVycmlk ZSB0aGUiLAorIiAgbm9ybWFsIGZ1bmN0aW9uIG9mIHF1ZXN0aW9uIG1hcmsgaW4gaW50ZXJhY3Rp dmUgY29tbWFuZHMsIHdoaWNoIGlzIHRvIiwKKyIgIHByb3ZpZGUgbWVudXMgYW5kIGZpbGUgbGlz dHMuICBZb3UgZG9uJ3QsIGhvd2V2ZXIsIG5lZWQgdG8gcXVvdGUgZmlsZW5hbWUiLAorIiAgcXVl c3Rpb24gbWFya3MgaW4gY29tbWFuZCBmaWxlcyAoc2NyaXB0IHByb2dyYW1zKS4iLAorI2VuZGlm IC8qIFZNUyAqLworIiAiLAorI2lmZGVmIE9TMk9SVU5JWAorI2lmZGVmIENLUkVHRVgKKyJbYWJj XSIsCisiICBTcXVhcmUgYnJhY2tldHMgZW5jbG9zaW5nIGEgbGlzdCBvZiBjaGFyYWN0ZXJzIG1h dGNoZXMgYW55IGNoYXJhY3RlciBpbiIsCisiICB0aGUgbGlzdC4gIEV4YW1wbGU6IGNrdXVzci5b Y2hdIG1hdGNoZXMgY2t1dXNyLmMgYW5kIGNrdXVzci5oLiIsCisiICIsCisiW2Etel0iLAorIiAg U3F1YXJlIGJyYWNrZXRzIGVuY2xvc2luZyBhIHJhbmdlIG9mIGNoYXJhY3RlcnMgbWF0Y2hlcyBh bnkgY2hhcmFjdGVyIGluIiwKKyIgIHRoZSByYW5nZTsgYSBoeXBoZW4gKC0pIHNlcGFyYXRlcyB0 aGUgbG93IGFuZCBoaWdoIGVsZW1lbnRzIG9mIHRoZSByYW5nZS4iLAorIiAgRm9yIGV4YW1wbGUs IFthLXpdIG1hdGNoZXMgYW55IGNoYXJhY3RlciBmcm9tIGEgdG8gei4iLAorIiAiLAorIlthY2Rt LXpdIiwKKyIgIExpc3RzIGFuZCByYW5nZXMgbWF5IGJlIGNvbWJpbmVkLiAgVGhpcyBleGFtcGxl IG1hdGNoZXMgYSwgYywgZCwgb3IgYW55IiwKKyIgIGxldHRlciBmcm9tIG0gdGhyb3VnaCB6LiIs CisiICIsCisie3N0cmluZzEsc3RyaW5nMiwuLi59IiwKKyIgIEJyYWNlcyBlbmNsb3NlIGEgbGlz dCBvZiBzdHJpbmdzIHRvIGJlIG1hdGNoZWQuICBGb3IgZXhhbXBsZToiLAorIiAgY2t7dWZpbyx2 Y29uLGNtYWl9LmMgbWF0Y2hlcyBja3VmaW8uYywgY2t2Y29uLmMsIG9yIGNrY21haS5jLiAgVGhl IHN0cmluZ3MiLAorIiAgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiAqLCA/LCBbYWJjXSwgW2Etel0s IG9yIG90aGVyIGxpc3RzIG9mIHN0cmluZ3MuIiwKKyNlbmRpZiAvKiBDS1JFR0VYICovCisjZW5k aWYgLyogT1MyT1JVTklYICovCisiICIsCisiVG8gZm9yY2UgYSBzcGVjaWFsIHBhdHRlcm4gY2hh cmFjdGVyIHRvIGJlIHRha2VuIGxpdGVyYWxseSwgcHJlY2VkZSBpdCB3aXRoIiwKKyJhIGJhY2tz bGFzaCwgZS5nLiBbYVxcLXpdIG1hdGNoZXMgYSwgaHlwaGVuLCBvciB6IHJhdGhlciB0aGFuIGEg dGhyb3VnaCB6LiIsCisiT3IgdGVsbCBLZXJtaXQgdG8gU0VUIFdJTERDQVJELUVYUEFOU0lPTiBP RkYgYmVmb3JlIGVudGVyaW5nIG9yIHJlZmVycmluZyIsCisidG8gdGhlIGZpbGVuYW1lLiIsCisi ICIsCisjaWZuZGVmIE5PU1BMCisiU2ltaWxhciBub3RhdGlvbiBjYW4gYmUgdXNlZCBpbiBnZW5l cmFsLXB1cnBvc2Ugc3RyaW5nIG1hdGNoaW5nLiAgVHlwZSBIRUxQIiwKKyJQQVRURVJOUyBmb3Ig ZGV0YWlscy4gIEFsc28gc2VlIEhFTFAgU0VUIE1BVENILiIsCisjZW5kaWYgLyogTk9TUEwgKi8K KyIiIH07CisKKyNpZm5kZWYgTk9YRkVSCitzdGF0aWMgY2hhciAqaG14eGZhc3RbXSA9IHsKKyJG QVNULCBDQVVUSU9VUywgYW5kIFJPQlVTVCBhcmUgcHJlZGVmaW5lZCBtYWNyb3MgdGhhdCBzZXQg c2V2ZXJhbCIsCisiZmlsZS10cmFuc2ZlciBwYXJhbWV0ZXJzIGF0IG9uY2UgdG8gYWNoaWV2ZSB0 aGUgZGVzaXJlZCBmaWxlLXRyYW5zZmVyIGdvYWwuIiwKKyJGQVNUIGNob29zZXMgYSBsYXJnZSBw YWNrZXQgc2l6ZSwgYSBsYXJnZSB3aW5kb3cgc2l6ZSwgYW5kIGEgZmFpciBhbW91bnQgb2YiLAor ImNvbnRyb2wtY2hhcmFjdGVyIHVucHJlZml4aW5nIGF0IHRoZSByaXNrIG9mIHBvc3NpYmxlIGZh aWx1cmUgb24gc29tZSIsCisiY29ubmVjdGlvbnMuICBGQVNUIGlzIHRoZSBkZWZhdWx0IHR1bmlu ZyBpbiBDLUtlcm1pdCA3LjAgYW5kIGxhdGVyLiAgSW4gY2FzZSIsCisiRkFTVCBmaWxlIHRyYW5z ZmVycyBmYWlsIGZvciB5b3Ugb24gYSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24sIHRyeSBDQVVUSU9V Uy4iLAorIklmIHRoYXQgZmFpbHMgdG9vLCB0cnkgUk9CVVNULiAgWW91IGNhbiBhbHNvIGNoYW5n ZSB0aGUgZGVmaW5pdGlvbnMgb2YgZWFjaCIsCisibWFjcm8gd2l0aCB0aGUgREVGSU5FIGNvbW1h bmQuICBUbyBzZWUgdGhlIGN1cnJlbnQgZGVmaW5pdGlvbnMsIHR5cGUiLAorIlwic2hvdyBtYWNy byBmYXN0XCIsIFwic2hvdyBtYWNybyBjYXV0aW91c1wiLCBvciBcInNob3cgbWFjcm8gcm9idXN0 XCIuIiwKKyIiCit9OworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgVk1TCitzdGF0aWMg Y2hhciAqIGhteHhwdXJnZVtdID0geworIlN5bnRheDogUFVSR0UgWyBzd2l0Y2hlcyBdIFsgZmls ZXNwZWMgXSIsCisiICBSdW5zIHRoZSBEQ0wgUFVSR0UgY29tbWFuZC4gIFN3aXRjaGVzIGFuZCBm aWxlc3BlYyBhcmUgbm90IHBhcnNlZCBvciIsCisiICB2ZXJpZmllZCBieSBLZXJtaXQsIGJ1dCBw YXNzZWQgZGlyZWN0bHkgdG8gRENMLiIsCisiIgorfTsKKyNlbHNlCisjaWZkZWYgQ0tQVVJHRQor c3RhdGljIGNoYXIgKiBobXh4cHVyZ2VbXSA9IHsKKyJTeW50YXg6IFBVUkdFIFsgc3dpdGNoZXMg XSBbIGZpbGVzcGVjIF0iLAorIiAgRGVsZXRlcyBiYWNrdXAgZmlsZXM7IHRoYXQgaXMsIGZpbGVz IHdob3NlIG5hbWVzIGVuZCBpbiBcIi5+bn5cIiwgd2hlcmUiLAorIiAgbiBpcyBhIG51bWJlci4g IFBVUkdFIGJ5IGl0c2VsZiBkZWxldGVzIGFsbCBiYWNrdXAgZmlsZXMgaW4gdGhlIGN1cnJlbnQi LAorIiAgZGlyZWN0b3J5LiAgU3dpdGNoZXM6IiwKKworIiAiLAorIi9BRlRFUjpkYXRlLXRpbWUi LAorI2lmZGVmIFZNUworIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBjcmVhdGVk IGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUgYXJlIiwKKyNlbHNlCisiICBTcGVjaWZpZXMgdGhh dCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUgYXJl IiwKKyNlbmRpZiAvKiBWTVMgKi8KKyIgIHRvIGJlIHB1cmdlZC4gIEhFTFAgREFURSBmb3IgaW5m byBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy4iLAorIiAiLAorIi9CRUZPUkU6ZGF0ZS10aW1lIiwK KyNpZmRlZiBWTVMKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQg YmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAorI2Vsc2UKKyIgIFNwZWNpZmllcyB0aGF0IG9u bHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAorI2Vu ZGlmIC8qIFZNUyAqLworIiAgYXJlIHRvIGJlIHB1cmdlZC4iLAorIiAiLAorIi9OT1QtQUZURVI6 ZGF0ZS10aW1lIiwKKyNpZmRlZiBWTVMKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmls ZXMgbW9kaWZpZWQgYXQgb3IgYmVmb3JlIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAorI2Vsc2UKKyIg IFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYmVmb3JlIHRo ZSBnaXZlbiBkYXRlLXRpbWUiLAorI2VuZGlmIC8qIFZNUyAqLworIiAgYXJlIHRvIGJlIHB1cmdl ZC4iLAorIiAiLAorIi9OT1QtQkVGT1JFOmRhdGUtdGltZSIsCisjaWZkZWYgVk1TCisiICBTcGVj aWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGFmdGVyIHRoZSBnaXZl biBkYXRlLXRpbWUiLAorI2Vsc2UKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMg bW9kaWZpZWQgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZW5kaWYgLyogVk1T ICovCisiICBhcmUgdG8gYmUgcHVyZ2VkLiIsCisiICIsCisiL0xBUkdFUi1USEFOOm51bWJlciIs CisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIGxvbmdlciB0aGFuIHRoZSBnaXZl biBudW1iZXIgb2YgYnl0ZXMgYXJlIiwKKyIgIHRvIGJlIHB1cmdlZC4iLAorIiAiLAorIi9TTUFM TEVSLVRIQU46bnVtYmVyIiwKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgc21h bGxlciB0aGFuIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgYXJlIiwKKyIgIHRvIGJlIHB1cmdl ZC4iLAorIiAiLAorIi9FWENFUFQ6cGF0dGVybiIsCisiICBTcGVjaWZpZXMgdGhhdCBhbnkgZmls ZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4sIHdoaWNoIGNhbiBiZSBhIiwKKyIgIHJl Z3VsYXIgZmlsZW5hbWUgb3IgbWF5IGNvbnRhaW4gd2lsZGNhcmRzLCBhcmUgbm90IHRvIGJlIHB1 cmdlZC4gIFRvIiwKKyIgIHNwZWNpZnkgbXVsdGlwbGUgcGF0dGVybnMgKHVwIHRvIDgpLCB1c2Ug b3V0ZXIgYnJhY2VzIGFyb3VuZCB0aGUgZ3JvdXAiLAorIiAgYW5kIGlubmVyIGJyYWNlcyBhcm91 bmQgZWFjaCBwYXR0ZXJuOiIsCisiICIsCisiICAgIC9FWENFUFQ6e3twYXR0ZXJuMX17cGF0dGVy bjJ9Li4ufSIsCisiICIsCisjaWZkZWYgVU5JWE9ST1NLCisiL0RPVEZJTEVTIiwKKyIgIEluY2x1 ZGUgKHB1cmdlKSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIFwiLlwiLiIsCisiICIsCisi L05PRE9URklMRVMiLAorIiAgU2tpcCAoZG9uJ3QgcHVyZ2UpIGZpbGVzIHdob3NlIG5hbWVzIGJl Z2luIHdpdGggXCIuXCIuIiwKKyIgIiwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyNpZmRlZiBS RUNVUlNJVkUKKyIvUkVDVVJTSVZFIiwKKyIgIERlc2NlbmRzIHRocm91Z2ggdGhlIGN1cnJlbnQg b3Igc3BlY2lmaWVkIGRpcmVjdG9yeSB0cmVlLiIsCisiICIsCisjZW5kaWYgLyogUkVDVVJTSVZF ICovCisiL0tFRVA6biIsCisiICBSZXRhaW4gdGhlICduJyBtb3N0IHJlY2VudCAoaGlnaGVzdC1u dW1iZXJlZCkgYmFja3VwIGZpbGVzIGZvciBlYWNoIGZpbGUuIiwKKyIgIEJ5IGRlZmF1bHQsIG5v bmUgYXJlIGtlcHQuICBJZiAvS0VFUCBpcyBnaXZlbiB3aXRob3V0IGEgbnVtYmVyLCAxIGlzIHVz ZWQuIiwKKyIgIiwKKyIvTElTVCIsCisiICBEaXNwbGF5IGVhY2ggZmlsZSBhcyBpdCBpcyBwcm9j ZXNzZWQgYW5kIHNheSB3aGV0aGVyIGl0IGlzIHB1cmdlZCBvciBrZXB0LiIsCisiICBTeW5vbnlt czogL0xPRywgL1ZFUkJPU0UuIiwKKyIgIiwKKyIvTk9MSVNUIiwKKyIgIFRoZSBQVVJHRSBjb21t YW5kIHNob3VsZCBvcGVyYXRlIHNpbGVudGx5IChkZWZhdWx0KS4iLAorIiAgU3lub255bXM6IC9O T0xPRywgL1FVSUVULiIsCisiICIsCisiL0hFQURJTkciLAorIiAgUHJpbnQgaGVhZGluZyBhbmQg c3VtbWFyeSBpbmZvcm1hdGlvbi4iLAorIiAiLAorIi9OT0hFQURJTkciLAorIiAgRG9uJ3QgcHJp bnQgaGVhZGluZyBhbmQgc3VtbWFyeSBpbmZvcm1hdGlvbi4iLAorIiAiLAorIi9QQUdFIiwKKyIg IFdoZW4gL0xJU1QgaXMgaW4gZWZmZWN0LCBwYXVzZSBhdCB0aGUgZW5kIG9mIGVhY2ggc2NyZWVu ZnVsLCBldmVuIGlmIiwKKyIgIENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgaXMgT0ZGLiIsCisiICIs CisiL05PUEFHRSIsCisiICBEb24ndCBwYXVzZSwgZXZlbiBpZiBDT01NQU5EIE1PUkUtUFJPTVBU SU5HIGlzIE9OLiIsCisiICIsCisiL0FTSyIsCisiICBJbnRlcmFjdGl2ZWx5IGFzayBwZXJtaXNz aW9uIHRvIGRlbGV0ZSBlYWNoIGJhY2t1cCBmaWxlLiIsCisiICIsCisiL05PQVNLIiwKKyIgIFB1 cmdlIGJhY2t1cCBmaWxlcyB3aXRob3V0IGFza2luZyBwZXJtaXNzaW9uLiIsCisiICIsCisiL1NJ TVVMQVRFIiwKKyIgIEluaGliaXRzIHRoZSBhY3R1YWwgZGVsZXRpb24gb2YgZmlsZXM7IHVzZSB0 byBwcmV2aWV3IHdoaWNoIGZpbGVzIHdvdWxkIiwKKyIgIGFjdHVhbGx5IGJlIGRlbGV0ZWQuICBJ bXBsaWVzIC9MSVNULiIsCisiICIsCisiVXNlIFNFVCBPUFRJT05TIFBVUkdFIFsgc3dpdGNoZXMg XSB0byBjaGFuZ2UgZGVmYXVsdHM7IHVzZSBTSE9XIE9QVElPTlMgdG8iLAorImRpc3BsYXkgY3Vz dG9taXplZCBkZWZhdWx0cy4gIEFsc28gc2VlIEhFTFAgREVMRVRFLCBIRUxQIFdJTERDQVJELiIs CisiIgorfTsKKyNlbmRpZiAvKiBDS1BVUkdFICovCisjZW5kaWYgLyogVk1TICovCisKK3N0YXRp YyBjaGFyICpobXh4Y2xvW10gPSB7CisiU3ludGF4OiAgQ0xPU0UgWyBpdGVtIF0iLAorIiAgQ2xv c2UgdGhlIGluZGljYXRlZCBpdGVtLiAgVGhlIGRlZmF1bHQgaXRlbSBpcyBDT05ORUNUSU9OLCB3 aGljaCBpcyB0aGUiLAorIiAgY3VycmVudCBTRVQgTElORSBvciBTRVQgSE9TVCBjb25uZWN0aW9u LiAgVGhlIG90aGVyIGl0ZW1zIGFyZToiLAorIiAiLAorI2lmZGVmIENLTE9HRElBTAorIiAgICBD WC1MT0cgICAgICAgICAgKGNvbm5lY3Rpb24gbG9nLCBvcGVuZWQgd2l0aCBMT0cgQ1gpIiwKKyNl bmRpZiAvKiBDS0xPR0RJQUwgKi8KKyNpZm5kZWYgTk9MT0NBTAorIiAgICBTRVNTSU9OLUxPRyAg ICAgKG9wZW5lZCB3aXRoIExPRyBTRVNTSU9OKSIsCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lm ZGVmIFRMT0cKKyIgICAgVFJBTlNBQ1RJT04tTE9HIChvcGVuZWQgd2l0aCBMT0cgVFJBTlNBQ1RJ T05TKSIsCisjZW5kaWYgLyogVExPRyAqLworIiAgICBQQUNLRVQtTE9HICAgICAgKG9wZW5lZCB3 aXRoIExPRyBQQUNLRVRTKSIsCisjaWZkZWYgREVCVUcKKyIgICAgREVCVUctTE9HICAgICAgIChv cGVuZWQgd2l0aCBMT0cgREVCVUcpIiwKKyNlbmRpZiAvKiBERUJVRyAqLworI2lmbmRlZiBOT1NQ TAorIiAgICBSRUFELUZJTEUgICAgICAgKG9wZW5lZCB3aXRoIE9QRU4gUkVBRCkiLAorIiAgICBX UklURS1GSUxFICAgICAgKG9wZW5lZCB3aXRoIE9QRU4gV1JJVEUgb3IgT1BFTiBBUFBFTkQpIiwK KyNlbmRpZiAvKiBOT1NQTCAqLworIiAiLAorIlR5cGUgSEVMUCBMT0cgYW5kIEhFTFAgT1BFTiBm b3IgZnVydGhlciBpbmZvLiIsCisiIgorfTsKKworI2lmZGVmIENLTEVBUk4KK3N0YXRpYyBjaGFy ICogaG14eGxlYXJuW10gPSB7CisiU3ludGF4OiBMRUFSTiBbIC9PTiAvT0ZGIC9DTE9TRSBdIFsg ZmlsZW5hbWUgXSIsCisiICBSZWNvcmRzIGEgbG9naW4gc2NyaXB0LiAgSWYgeW91IGdpdmUgYSBm aWxlbmFtZSwgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciIsCisiICBzdWJzZXF1ZW50IHJlY29yZGlu Zy4gIElmIHlvdSBkb24ndCBnaXZlIGFueSBzd2l0Y2hlcywgL09OIGlzIGFzc3VtZWQuIiwKKyIg IC9PTiBlbmFibGVzIHJlY29yZGluZyB0byB0aGUgY3VycmVudCBmaWxlIChpZiBhbnkpOyAvT0ZG IGRpc2FibGVzIiwKKyIgIHJlY29yZGluZy4gIC9DTE9TRSBjbG9zZXMgdGhlIGN1cnJlbnQgZmls ZSAoaWYgYW55KS4gIEFmdGVyIExFQVJOIC9DTE9TRSIsCisiICBvciBleGl0IGZyb20gS2VybWl0 LCB5b3VyIHNjcmlwdCBpcyBhdmFpbGFibGUgZm9yIGV4ZWN1dGlvbiBieSB0aGUgVEFLRSIsCisi ICBjb21tYW5kLiIsCisiIgorfTsKKyNlbmRpZiAvKiBDS0xFQVJOICovCisKKyNpZmRlZiBDS19N SU5QVVQKK3N0YXRpYyBjaGFyICpobXh4bWlucFtdID0geworIlN5bnRheDogIE1JTlBVVCBbIHN3 aXRjaGVzIF0gbiBbIHN0cmluZzEgWyBzdHJpbmcyIFsgLi4uIF0gXSBdIiwKKyJFeGFtcGxlOiBN SU5QVVQgNSBMb2dpbjoge1VzZXJuYW1lOiB9IHtOTyBDQVJSSUVSfSBCVVNZIFJJTkciLAorIiAg Rm9yIHVzZSBpbiBzY3JpcHQgcHJvZ3JhbXMuICBXYWl0cyB1cCB0byBuIHNlY29uZHMgZm9yIGFu eSBvbmUgb2YgdGhlIiwKKyIgIHN0cmluZ3MgdG8gYXJyaXZlIG9uIHRoZSBjb21tdW5pY2F0aW9u IGRldmljZS4gIElmIG5vIHN0cmluZ3MgYXJlIGdpdmVuLCIsCisiICB0aGUgY29tbWFuZCB3YWl0 cyBmb3IgYW55IGNoYXJhY3RlciBhdCBhbGwgdG8gYXJyaXZlLiAgU3RyaW5ncyBhcmUiLAorIiAg c2VwYXJhdGVkIGJ5IHNwYWNlczsgdXNlIHticmFjZXN9IG9yIFwiZG91YmxlcXVvdGVzXCIgZm9y IGdyb3VwaW5nLiAgSWYiLAorIiAgYW55IG9mIHRoZSBzdHJpbmdzIGlzIGVuY291bnRlcmVkIHdp dGhpbiB0aGUgdGltZW91dCBpbnRlcnZhbCwgdGhlIGNvbW1hbmQiLAorIiAgc3VjY2VlZHMgYW5k IHRoZSBcXHYobWlucHV0KSB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0aGUgc3Ry aW5nIiwKKyIgIHRoYXQgd2FzIG1hdGNoZWQ6IDEsIDIsIDMsIGV0Yy4gIElmIG5vbmUgb2YgdGhl IHN0cmluZ3MgYXJyaXZlcywgdGhlIiwKKyIgIGNvbW1hbmQgdGltZXMgb3V0LCBmYWlscywgYW5k IFxcdihtaW5wdXQpIGlzIHNldCB0byAwLiAgSW4gYWxsIG90aGVyIiwKKyIgIHJlc3BlY3RzLCBN SU5QVVQgaXMgbGlrZSBJTlBVVC4gIFNlZSBIRUxQIElOUFVUIGZvciB0aGUgYXZhaWxhYmxlIHN3 aXRjaGVzIiwKKyIgIGFuZCBvdGhlciBkZXRhaWxzIG9mIG9wZXJhdGlvbi4iLAorIiIgfTsKKyNl bmRpZiAvKiBDS19NSU5QVVQgKi8KKworI2lmbmRlZiBOT0xPQ0FMCitzdGF0aWMgY2hhciAqaG14 eGNvbltdID0geworIlN5bnRheDogQ09OTkVDVCAob3IgQywgb3IgQ1EpIFsgc3dpdGNoZXMgXSIs CisiICBDb25uZWN0IHRvIGEgcmVtb3RlIGNvbXB1dGVyIHZpYSB0aGUgc2VyaWFsIGNvbW11bmlj YXRpb25zIGRldmljZSBnaXZlbiBpbiIsCisjaWZkZWYgT1MyCisiICB0aGUgbW9zdCByZWNlbnQg U0VUIFBPUlQgY29tbWFuZCwgb3IgdG8gdGhlIG5ldHdvcmsgaG9zdCBuYW1lZCBpbiB0aGUgbW9z dCIsCisjZWxzZQorIiAgdGhlIG1vc3QgcmVjZW50IFNFVCBMSU5FIGNvbW1hbmQsIG9yIHRvIHRo ZSBuZXR3b3JrIGhvc3QgbmFtZWQgaW4gdGhlIG1vc3QiLAorI2VuZGlmIC8qIE9TMiAqLworIiAg cmVjZW50IFNFVCBIT1NUIGNvbW1hbmQuICBUeXBlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGZvbGxv d2VkIGJ5IEMgdG8gZ2V0IiwKKyIgIGJhY2sgdG8gdGhlIEMtS2VybWl0IHByb21wdCwgb3IgZm9s bG93ZWQgYnkgPyBmb3IgYSBsaXN0IG9mIENPTk5FQ1QtbW9kZSIsCisjaWZkZWYgT1MyCisiICBl c2NhcGUgY29tbWFuZHMuICBZb3UgY2FuIGFsc28gYXNzaWduIHRoZSBcXEtleGl0IHZlcmIgdG8g dGhlIGtleSBvciIsCisiICBrZXktY29tYmluYXRpb24gb2YgeW91ciBjaG9pY2U7IGJ5IGRlZmF1 bHQgaXQgaXMgYXNzaWduZWQgdG8gQWx0LXguIiwKKyNlbHNlCisiICBlc2NhcGUgY29tbWFuZHMu IiwKKyIgIiwKKyJJbmNsdWRlIHRoZSAvUVVJRVRMWSBzd2l0Y2ggdG8gc3VwcHJlc3MgdGhlIGlu Zm9ybWF0aW9uYWwgbWVzc2FnZSB0aGF0IiwKKyJ0ZWxscyB5b3UgaG93IHRvIGVzY2FwZSBiYWNr LCBldGMuICBDUSBpcyBhIHN5bm9ueW0gZm9yIENPTk5FQ1QgL1FVSUVUTFkuIiwKKyNlbmRpZiAv KiBPUzIgKi8KKyIgIiwKKyJPdGhlciBzd2l0Y2hlcyBpbmNsdWRlOiIsCisjaWZkZWYgQ0tfVFJJ R0dFUgorIiAiLAorIi9UUklHR0VSOnN0cmluZyIsCisiICBPbmUgb3IgbW9yZSBzdHJpbmdzIHRv IGxvb2sgZm9yIHRoYXQgd2lsbCBjYXVzZSBhdXRvbWF0aWMgcmV0dXJuIHRvIiwKKyIgIGNvbW1h bmQgbW9kZS4gIFRvIHNwZWNpZnkgb25lIHN0cmluZywganVzdCBwdXQgaXQgcmlnaHQgYWZ0ZXIg dGhlIiwKKyIgIGNvbG9uLCBlLmcuIFwiL1RSSUdHRVI6R29vZGJ5ZVwiLiAgSWYgdGhlIHN0cmlu ZyBjb250YWlucyBhbnkgc3BhY2VzLCB5b3UiLAorIiAgbXVzdCBlbmNsb3NlIGl0IGluIGJyYWNl cywgZS5nLiBcIi9UUklHR0VSOntSRUFEWSBUTyBTRU5ELi4ufVwiLiAgVG8iLAorIiAgc3BlY2lm eSBtb3JlIHRoYW4gb25lIHRyaWdnZXIsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoiLAorIiAi LAorIiAgICAvVFJJR0dFUjp7e3N0cmluZzF9e3N0cmluZzJ9Li4ue3N0cmluZ259fSIsCisiICIs CisiICBVcG9uIHJldHVybiBmcm9tIENPTk5FQ1QgbW9kZSwgdGhlIHZhcmlhYmxlIFxcdih0cmln Z2VyKSBpcyBzZXQgdG8gdGhlIiwKKyIgIHRyaWdnZXIgc3RyaW5nLCBpZiBhbnksIHRoYXQgd2Fz IGFjdHVhbGx5IGVuY291bnRlcmVkLiAgVGhpcyB2YWx1ZSwgbGlrZSIsCisiICBhbGwgb3RoZXIg Q09OTkVDVCBzd2l0Y2hlcyBhcHBsaWVzIG9ubHkgdG8gdGhlIENPTk5FQ1QgY29tbWFuZCB3aXRo IHdoaWNoIiwKKyIgIGl0IGlzIGdpdmVuLCBhbmQgb3ZlcnJpZGVzICh0ZW1wb3JhcmlseSkgYW55 IGdsb2JhbCBTRVQgVEVSTUlOQUwgVFJJR0dFUiIsCisiICBzdHJpbmcgdGhhdCBtaWdodCBiZSBp biBlZmZlY3QuIiwKKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisjaWZkZWYgT1MyCisiICIsCisi L0lETEUtTElNSVQ6bnVtYmVyIiwKKyIgIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBvZiBpZGxlIHRp bWUsIGFmdGVyIHdoaWNoIEtlcm1pdCByZXR1cm5zIiwKKyIgIGF1dG9tYXRpY2FsbHkgdG8gY29t bWFuZCBtb2RlOyBkZWZhdWx0IDAgKG5vIGxpbWl0KS4iLAorIiAiLAorIi9JRExFLUlOVEVSVkFM Om51bWJlciIsCisiICBUaGUgbnVtYmVyIG9mIHNlY29uZHMgb2YgaWRsZSB0aW1lLCBhZnRlciB3 aGljaCBLZXJtaXQgYXV0b21hdGljYWxseSIsCisiICB0cmFuc21pdHMgdGhlIGlkbGUgc3RyaW5n LiIsCisiICIsCisiL0lETEUtU1RSSU5HOnN0cmluZyIsCisiICBUaGUgc3RyaW5nIHRvIHRyYW5z bWl0IHdoZW5ldmVyIHRoZSBpZGxlIGludGVydmFsIGhhcyBwYXNzZWQuIiwKKyIgIiwKKyIvVElN RS1MSU1JVDpudW1iZXIiLAorIiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgZm9yIHdo aWNoIHRoZSBDT05ORUNUIHNlc3Npb24gbWF5IGxhc3QuIiwKKyIgIFRoZSBkZWZhdWx0IGlzIDAg KG5vIGxpbWl0KS4gIElmIGEgbm9uemVybyBudW1iZXIgaXMgZ2l2ZW4sIEtlcm1pdCByZXR1cm5z IiwKKyIgIGF1dG9tYXRpY2FsbHkgdG8gY29tbWFuZCBtb2RlIGFmdGVyIHRoaXMgbWFueSBzZWNv bmRzLiIsCisjZW5kaWYgLyogT1MyICovCisiIiB9OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKwor c3RhdGljIGNoYXIgKmhteHhtZ2V0W10gPSB7CisiU3ludGF4OiBNR0VUIFsgc3dpdGNoZXMuLi4g XSByZW1vdGUtZmlsZXNwZWMgWyByZW1vdGUtZmlsZXNwZWMgLi4uIF0iLAorIiAiLAorIkp1c3Qg bGlrZSBHRVQgKHEudi4pIGV4Y2VwdCBhbGxvd3MgYSBsaXN0IG9mIHJlbW90ZSBmaWxlIHNwZWNp ZmljYXRpb25zLCIsCisic2VwYXJhdGVkIGJ5IHNwYWNlcy4iLAorIiIKK307CisKK3N0YXRpYyBj aGFyICpobXh4Z2V0W10gPSB7CisiU3ludGF4OiBHRVQgWyBzd2l0Y2hlcy4uLiBdIHJlbW90ZS1m aWxlc3BlYyBbIGFzLW5hbWUgXSIsCisiICBUZWxscyB0aGUgb3RoZXIgS2VybWl0LCB3aGljaCBt dXN0IGJlIGluIChvciBzdXBwb3J0IGF1dG9zd2l0Y2hpbmcgaW50bykiLAorIiAgc2VydmVyIG1v ZGUsIHRvIHNlbmQgdGhlIG5hbWVkIGZpbGUgb3IgZmlsZXMuICBJZiB0aGUgcmVtb3RlLWZpbGVz cGVjIG9yIiwKKyIgIHRoZSBhcy1uYW1lIGNvbnRhaW4gc3BhY2VzLCB0aGV5IG11c3QgYmUgZW5j bG9zZWQgaW4gYnJhY2VzLiAgSWYgYXMtbmFtZSIsCisiICBpcyB0aGUgbmFtZSBvZiBhbiBleGlz dGluZyBsb2NhbCBkaXJlY3RvcnksIGluY29taW5nIGZpbGVzIGFyZSBwbGFjZWQgaW4iLAorIiAg dGhhdCBkaXJlY3Rvcnk7IGlmIGl0IGlzIHRoZSBuYW1lIG9mIGRpcmVjdG9yeSB0aGF0IGRvZXMg bm90IGV4aXN0LCBLZXJtaXQiLAorIiAgdHJpZXMgdG8gY3JlYXRlIGl0LiAgT3B0aW9uYWwgc3dp dGNoZXMgaW5jbHVkZToiLAorIiAiLAorIi9BUy1OQU1FOnRleHQiLAorIiAgU3BlY2lmaWVzIFwi dGV4dFwiIGFzIHRoZSBuYW1lIHRvIHN0b3JlIHRoZSBpbmNvbWluZyBmaWxlIHVuZGVyLCBvciIs CisiICBkaXJlY3RvcnkgdG8gc3RvcmUgaXQgaW4uICBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUg YXMtbmFtZSBhcyB0aGUgc2Vjb25kIiwKKyIgIGZpbGVuYW1lIG9uIHRoZSBHRVQgY29tbWFuZCBs aW5lLiIsCisiICIsCisiL0JJTkFSWSIsCisiICBQZXJmb3JtcyB0aGlzIHRyYW5zZmVyIGluIGJp bmFyeSBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwiLAorIiAgdHJhbnNmZXIgbW9k ZS4iLAorIiAiLAorIi9DT01NQU5EIiwKKyIgIFJlY2VpdmVzIHRoZSBmaWxlIGludG8gdGhlIHN0 YW5kYXJkIGlucHV0IG9mIGEgY29tbWFuZCwgcmF0aGVyIHRoYW4gc2F2aW5nIiwKKyIgIGl0IG9u ICBkaXNrLiAgVGhlIC9BUy1OQU1FIG9yIHRoZSBzZWNvbmQgXCJmaWxlbmFtZVwiIG9uIHRoZSBH RVQgY29tbWFuZCIsCisiICBsaW5lIGlzIGludGVycHJldGVkIGFzIHRoZSBuYW1lIG9mIGEgY29t bWFuZC4iLAorIiAiLAorIi9ERUxFVEUiLAorIiAgQXNrcyB0aGUgb3RoZXIgS2VybWl0IHRvIGRl bGV0ZSB0aGUgZmlsZSAob3IgZWFjaCBmaWxlIGluIHRoZSBncm91cCkiLAorIiAgYWZ0ZXIgaXQg aGFzIGJlZW4gdHJhbnNmZXJyZWQgc3VjY2Vzc2Z1bGx5LiIsCisiICIsCisiL0VYQ0VQVDpwYXR0 ZXJuIiwKKyIgIFNwZWNpZmllcyB0aGF0IGFueSBmaWxlcyB3aG9zZSBuYW1lcyBtYXRjaCB0aGUg cGF0dGVybiwgd2hpY2ggY2FuIGJlIGEiLAorIiAgcmVndWxhciBmaWxlbmFtZSwgb3IgbWF5IGNv bnRhaW4gXCIqXCIgYW5kL29yIFwiP1wiIG1ldGFjaGFyYWN0ZXJzLCIsCisiICBhcmUgdG8gYmUg cmVmdXNlZC4gIFRvIHNwZWNpZnkgbXVsdGlwbGUgcGF0dGVybnMgKHVwIHRvIDgpLCB1c2Ugb3V0 ZXIiLAorIiAgYnJhY2VzIGFyb3VuZCB0aGUgZ3JvdXAsIGFuZCBpbm5lciBicmFjZXMgYXJvdW5k IGVhY2ggcGF0dGVybjoiLAorIiAiLAorIiAgICAvRVhDRVBUOnt7cGF0dGVybjF9e3BhdHRlcm4y fS4uLn0iLAorIiAiLAorIi9GSUxFTkFNRVM6e0NPTlZFUlRFRCxMSVRFUkFMfSIsCisiICBPdmVy cmlkZXMgdGhlIGdsb2JhbCBTRVQgRklMRSBOQU1FUyBzZXR0aW5nIGZvciB0aGlzIHRyYW5zZmVy IG9ubHkuIiwKKyIgIiwKKyIvRklMVEVSOmNvbW1hbmQiLAorIiAgQ2F1c2VzIHRoZSBpbmNvbWlu ZyBmaWxlIHRvIHBhc3NlZCB0aHJvdWdoIHRoZSBnaXZlbiBjb21tYW5kIChzdGFuZGFyZCIsCisi ICBpbnB1dC9vdXRwdXQgZmlsdGVyKSBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byBkaXNrLiIsCisi ICIsCisjaWZkZWYgVk1TCisiL0lNQUdFIiwKKyIgIFRyYW5zZmVyIGluIGltYWdlIG1vZGUuIiwK KyIgIiwKKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBDS19MQUJFTEVECisiL0xBQkVMRUQiLAor IiAgVk1TIGFuZCBPUy8yIG9ubHk6IFNwZWNpZmllcyBsYWJlbGVkIHRyYW5zZmVyIG1vZGUuIiwK KyIgIiwKKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisKKyIvTU9WRS1UTzpkaXJlY3RvcnktbmFt ZSIsCisiICBTcGVjaWZpZXMgdGhhdCBlYWNoIGZpbGUgdGhhdCBhcnJpdmVzIHNob3VsZCBiZSBt b3ZlZCB0byB0aGUgc3BlY2lmaWVkIiwKKyIgIGRpcmVjdG9yeSBhZnRlciwgYW5kIG9ubHkgaWYs IGl0IGhhcyBiZWVuIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseS4iLAorIiAiLAorIi9QQVRITkFNRVM6 e09GRixBQlNPTFVURSxSRUxBVElWRSxBVVRPfSIsCisiICBPdmVycmlkZXMgdGhlIGdsb2JhbCBT RVQgUkVDRUlWRSBQQVRITkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2Zlci4iLAorIiAiLAor Ii9QSVBFUzp7T04sT0ZGfSIsCisiICBPdmVycmlkZXMgdGhlIFRSQU5TRkVSIFBJUEVTIHNldHRp bmcgZm9yIHRoaXMgY29tbWFuZCBvbmx5LiAgT04gYWxsb3dzIiwKKyIgIHJlY2VwdGlvbiBvZiBm aWxlcyB3aXRoIG5hbWVzIGxpa2UgXCIhdGFyIHhmIC1cIiB0byBiZSBhdXRvbWF0aWNhbGx5IiwK KyIgIGRpcmVjdGVkIHRvIGEgcGlwZWxpbmUuIiwKKyIgIiwKKyIvUVVJRVQiLAorIiAgV2hlbiBz ZW5kaW5nIGluIGxvY2FsIG1vZGUsIHRoaXMgc3VwcHJlc3NlcyB0aGUgZmlsZS10cmFuc2ZlciBk aXNwbGF5LiIsCisiICIsCisiL1JFQ09WRVIiLAorIiAgVXNlZCB0byByZWNvdmVyIGZyb20gYSBw cmV2aW91c2x5IGludGVycnVwdGVkIHRyYW5zZmVyOyBHRVQgL1JFQ09WRVIiLAorIiAgaXMgZXF1 aXZhbGVudCBSRUdFVC4gIFdvcmtzIG9ubHkgaW4gYmluYXJ5IG1vZGUuIiwKKyIgIiwKKyIvUkVD VVJTSVZFIiwKKyIgIFRlbGxzIHRoZSBzZXJ2ZXIgdG8gZGVzY2VuZCB0aHJvdWdoIHRoZSBkaXJl Y3RvcnkgdHJlZSB3aGVuIGxvY2F0aW5nIiwKKyIgIHRoZSBmaWxlcyB0byBiZSBzZW50LiIsCisi ICIsCisiL1JFTkFNRS1UTzpzdHJpbmciLAorIiAgU3BlY2lmaWVzIHRoYXQgZWFjaCBmaWxlIHRo YXQgYXJyaXZlcyBzaG91bGQgYmUgcmVuYW1lZCBhcyBzcGVjaWZpZWQiLAorIiAgYWZ0ZXIsIGFu ZCBvbmx5IGlmLCBpdCBoYXMgYmVlbiByZWNlaXZlZCBzdWNjZXNzZnVsbHkuICBUaGUgc3RyaW5n IHNob3VsZCIsCisiICBub3JtYWxseSBjb250YWluIHZhcmlhYmxlcyBsaWtlIFxcdihmaWxlbmFt ZSkgb3IgXFx2KGZpbGVudW0pLiIsCisiICIsCisiL1RFWFQiLAorIiAgUGVyZm9ybXMgdGhpcyB0 cmFuc2ZlciBpbiB0ZXh0IG1vZGUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGdsb2JhbCIsCisiICB0 cmFuc2ZlciBtb2RlLiIsCisiICIsCisiL1RSQU5TUEFSRU5UIiwKKyIgIEluaGliaXRzIGNoYXJh Y3Rlci1zZXQgdHJhbnNsYXRpb24gb2YgaW5jb21pbmcgdGV4dCBmaWxlcyBmb3IgdGhlIGR1cmF0 aW9uIiwKKyIgIG9mIHRoZSBHRVQgY29tbWFuZCB3aXRob3V0IGFmZmVjdGluZyBzdWJzZXF1ZW50 IGNvbW1hbmRzLiIsCisiICIsCisiQWxzbyBzZWUgSEVMUCBNR0VULCBIRUxQIFNFTkQsIEhFTFAg UkVDRUlWRSwgSEVMUCBTRVJWRVIsIEhFTFAgUkVNT1RFLiIsCisiIn07CisKK3N0YXRpYyBjaGFy ICpobXh4bGdbXSA9IHsKKyJTeW50YXg6IExPRyAob3IgTCkgbG9nLXR5cGUgWyBmaWxlbmFtZSBb IHsgTkVXLCBBUFBFTkQgfSBdIF0iLAorIiAiLAorIlJlY29yZCBpbmZvcm1hdGlvbiBpbiBhIGxv ZyBmaWxlOiIsCisiICIsCisjaWZkZWYgQ0tMT0dESUFMCisiQ1giLAorIiAgQ29ubmVjdGlvbnMg bWFkZSB3aXRoIFNFVCBMSU5FLCBTRVQgUE9SVCwgU0VUIEhPU1QsIERJQUwsIFRFTE5FVCwgZXRj LiIsCisiICBUaGUgZGVmYXVsdCBmaWxlbmFtZSBpcyBDWC5MT0cgaW4geW91ciBob21lIGRpcmVj dG9yeSBhbmQgQVBQRU5EIGlzIHRoZSIsCisiICBkZWZhdWx0IG1vZGUgZm9yIG9wZW5pbmcuIiwK KyIgIiwKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKyNpZmRlZiBERUJVRworIkRFQlVHIiwKKyIg IERlYnVnZ2luZyBpbmZvcm1hdGlvbiwgdG8gaGVscCB0cmFjayBkb3duIGJ1Z3MgaW4gdGhlIEMt S2VybWl0IHByb2dyYW0uIiwKKyIgIFRoZSBkZWZhdWx0IGxvZyBuYW1lIGlzIGRlYnVnLmxvZyBp biBjdXJyZW50IGRpcmVjdG9yeS4iLAorIiAiLAorI2VuZGlmIC8qIERFQlVHICovCisiUEFDS0VU UyIsCisiICBLZXJtaXQgcGFja2V0cywgdG8gaGVscCB3aXRoIHByb3RvY29sIHByb2JsZW1zLiAg VGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMiLAorIiAgcGFja2V0LmxvZyBpbiBjdXJyZW50IGRpcmVj dG9yeS4iLAorIiAiLAorI2lmbmRlZiBOT0xPQ0FMCisiU0VTU0lPTiIsCisiICBSZWNvcmRzIHlv dXIgQ09OTkVDVCBzZXNzaW9uIChkZWZhdWx0OiBzZXNzaW9uLmxvZyBpbiBjdXJyZW50IGRpcmVj dG9yeSkuIiwKKyIgIiwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgVExPRworIlRSQU5T QUNUSU9OUyIsCisiICBOYW1lcyBhbmQgc3RhdGlzdGljcyBhYm91dCBmaWxlcyB0cmFuc2ZlcnJl ZCAoZGVmYXVsdDogdHJhbnNhY3QubG9nIGluIiwKKyIgIGN1cnJlbnQgZGlyZWN0b3J5OyBzZWUg SEVMUCBTRVQgVFJBTlNBQ1RJT04tTE9HIGZvciB0cmFuc2FjdGlvbi1sb2cgZm9ybWF0IiwKKyIg IG9wdGlvbnMuKSIsCisiICIsCisjZW5kaWYgLyogVExPRyAqLworIklmIHlvdSBpbmNsdWRlIHRo ZSBBUFBFTkQga2V5d29yZCBhZnRlciB0aGUgZmlsZW5hbWUsIHRoZSBleGlzdGluZyBsb2cgZmls ZSwiLAorImlmIGFueSwgaXMgYXBwZW5kZWQgdG87IG90aGVyd2lzZSBhIG5ldyBmaWxlIGlzIGNy ZWF0ZWQgKGV4Y2VwdCBBUFBFTkQgaXMiLAorInRoZSBkZWZhdWx0IGZvciB0aGUgY29ubmVjdGlv biBsb2cpLiAgVXNlIENMT1NFIDxrZXl3b3JkPiB0byBzdG9wIGxvZ2dpbmcuIiwKKyNpZmRlZiBP UzJPUlVOSVgKKyIgIiwKKyJOb3RlOiBUaGUgZmlsZW5hbWUgY2FuIGFsc28gYmUgYSBwaXBlLCBl LmcuOiIsCisiICIsCisiICBsb2cgdHJhbnNhY3Rpb25zIHxscHIiLAorIiAgbG9nIGRlYnVnIHt8 IGdyZXAgXCJeVEVMTkVUXCIgPiBkZWJ1Zy5sb2d9IiwKKyIgIiwKKyJCcmFjZXMgYXJlIHJlcXVp cmVkIGlmIHRoZSBwaXBlbGluZSBvciBmaWxlbmFtZSBjb250YWlucyBzcGFjZXMuIiwKKyNlbmRp ZiAvKiBPUzJPUlVOSVggKi8KKyIiIH07CisKKyNpZm5kZWYgTk9TQ1JJUFQKK3N0YXRpYyBjaGFy ICpobXh4bG9naVtdID0geyAiXAorU3ludGF4OiBTQ1JJUFQgdGV4dCIsCisiICBBIGxpbWl0ZWQg YW5kIGNyeXB0aWMgXCJsb2dpbiBhc3Npc3RhbnRcIiwgY2FycmllZCBvdmVyIGZyb20gb2xkIEMt S2VybWl0IiwKKyIgIHJlbGVhc2VzIGZvciBjb21wdGFiaWxpdHksIGJ1dCBub3QgcmVjb21tZW5k ZWQgZm9yIHVzZS4gIEluc3RlYWQsIHBsZWFzZSIsCisiICB1c2UgdGhlIGZ1bGwgc2NyaXB0IHBy b2dyYW1taW5nIGxhbmd1YWdlIGRlc2NyaWJlZCBpbiBjaGFwdGVycyAxNy0xOSBvZiIsCisiICBc IlVzaW5nIEMtS2VybWl0XCIuIiwKKyIgIiwKKyIgIExvZ2luIHRvIGEgcmVtb3RlIHN5c3RlbSB1 c2luZyB0aGUgdGV4dCBwcm92aWRlZC4gIFRoZSBsb2dpbiBzY3JpcHQiLAorIiAgaXMgaW50ZW5k ZWQgdG8gb3BlcmF0ZSBzaW1pbGFybHkgdG8gVU5JWCB1dWNwIFwiTC5zeXNcIiBlbnRyaWVzLiIs CisiICBBIGxvZ2luIHNjcmlwdCBpcyBhIHNlcXVlbmNlIG9mIHRoZSBmb3JtOiIsCisiICIsCisi ICAgIGV4cGVjdCBzZW5kIFtleHBlY3Qgc2VuZF0gLiAuIC4iLAorIiAiLAorIiAgd2hlcmUgJ2V4 cGVjdCcgaXMgYSBwcm9tcHQgb3IgbWVzc2FnZSB0byBiZSBpc3N1ZWQgYnkgdGhlIHJlbW90ZSBz aXRlLCBhbmQiLAorIiAgJ3NlbmQnIGlzIHRoZSBuYW1lcywgbnVtYmVycywgZXRjLCB0byByZXR1 cm4uICBUaGUgc2VuZCBtYXkgYWxzbyBiZSB0aGUiLAorIiAga2V5d29yZCBFT1QgdG8gc2VuZCBD b250cm9sLUQsIG9yIEJSRUFLIChvciBcXFxcYikgdG8gc2VuZCBhIGJyZWFrIHNpZ25hbC4iLAor IiAgTGV0dGVycyBpbiBzZW5kIG1heSBiZSBwcmVmaXhlZCBieSB+IHRvIHNlbmQgc3BlY2lhbCBj aGFyYWN0ZXJzOiIsCisiICIsCisiICB+YiBiYWNrc3BhY2UsIH5zIHNwYWNlLCB+cSAnPycsIH5u IGxpbmVmZWVkLCB+ciByZXR1cm4sIH5jIGRvblwndCIsCisiICBhcHBlbmQgYSByZXR1cm4sIGFu ZCB+b1tvW29dXSBmb3Igb2N0YWwgb2YgYSBjaGFyYWN0ZXIuICBBcyB3aXRoIHNvbWUiLAorIiAg VVVDUCBzeXN0ZW1zLCBzZW50IHN0cmluZ3MgYXJlIGZvbGxvd2VkIGJ5IH5yIHVubGVzcyB0aGV5 IGVuZCB3aXRoIH5jLiIsCisiICIsCisiICBPbmx5IHRoZSBsYXN0IDcgY2hhcmFjdGVycyBpbiBl YWNoIGV4cGVjdCBhcmUgbWF0Y2hlZC4gIEEgbnVsbCBleHBlY3QsIiwKKyIgIGUuZy4gfjAgb3Ig dHdvIGFkamFjZW50IGRhc2hlcywgY2F1c2VzIGEgc2hvcnQgZGVsYXkuICBJZiB5b3UgZXhwZWN0 IiwKKyIgIHRoYXQgYSBzZXF1ZW5jZSBtaWdodCBub3QgYXJyaXZlLCBhcyB3aXRoIHV1Y3AsIGNv bmRpdGlvbmFsIHNlcXVlbmNlcyIsCisiICBtYXkgYmUgZXhwcmVzc2VkIGluIHRoZSBmb3JtOiIs CisiICIsCisiICAgIC1zZW5kLWV4cGVjdFstc2VuZC1leHBlY3RbLi4uXV0iLAorIiAiLAorIiAg d2hlcmUgZGFzaGVkIHNlcXVlbmNlcyBhcmUgZm9sbG93ZWQgYXMgbG9uZyBhcyBwcmV2aW91cyBl eHBlY3RzIGZhaWwuIiwKKyIiIH07CisjZW5kaWYgLyogTk9TQ1JJUFQgKi8KKworI2lmbmRlZiBO T0ZSSUxMUworc3RhdGljIGNoYXIgKiBobXh4dHlwW10gPSB7CisiU3ludGF4OiBUWVBFIFsgc3dp dGNoZXMuLi4gXSBmaWxlIiwKKyIgIERpc3BsYXlzIGEgZmlsZSBvbiB0aGUgc2NyZWVuLiAgUGF1 c2VzIGF1dG9tYXRpY2FsbHkgYXQgZW5kIG9mIGVhY2giLAorIiAgc2NyZWVuZnVsIGlmIENPTU1B TkQgTU9SRS1QUk9NUFRJTkcgaXMgT04uICBPcHRpb25hbCBzd2l0Y2hlczoiLAorIiAiLAorIiAg L1BBR0UiLAorIiAgICAgUGF1c2UgYXQgdGhlIGVuZCBvZiBlYWNoIHNjcmVlbmZ1bCBldmVuIGlm IENPTU1BTkQgTU9SRS1QUk9NUFRJTkcgT0ZGLiIsCisiICAgICBTeW5vbnltOiAvTU9SRSIsCisi ICAvTk9QQUdFIiwKKyIgICAgIERvbid0IHBhdXNlIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW4g ZXZlbiBpZiBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIE9OLiIKKywKKyIgIC9IRUFEOm4iLAorIiAg ICAgT25seSB0eXBlIHRoZSBmaXJzdCAnbicgbGluZXMgb2YgdGhlIGZpbGUuIiwKKyIgIC9UQUlM Om4iLAorIiAgICAgT25seSB0eXBlIHRoZSBsYXN0ICduJyBsaW5lcyBvZiB0aGUgZmlsZS4iLAor IiAgL01BVENIOnBhdHRlcm4iLAorIiAgICAgT25seSB0eXBlIGxpbmVzIHRoYXQgbWF0Y2ggdGhl IGdpdmVuIHBhdHRlcm4uICBIRUxQIFdJTERDQVJEUyBmb3IgaW5mbyIsCisiICAgICBpbmZvIGFi b3V0IHBhdHRlcm5zLiAgL0hFQUQgYW5kIC9UQUlMIGFwcGx5IGFmdGVyIC9NQVRDSC4iLAorIiAg L1BSRUZJWDpzdHJpbmciLAorIiAgICAgUHJpbnQgdGhlIGdpdmVuIHN0cmluZyBhdCB0aGUgYmVn aW5uaW5nIG9mIGVhY2ggbGluZS4iLAorIiAgL05VTUJFUiIsCisiICAgICBBZGQgbGluZSBudW1i ZXJzIChjb25mbGljdHMgd2l0aCAvUFJFRklYKSIsCisiICAvV0lEVEg6bnVtYmVyIiwKKyIgICAg IFRydW5jYXRlIGVhY2ggbGluZSBhdCB0aGUgZ2l2ZW4gY29sdW1uIG51bWJlciBiZWZvcmUgcHJp bnRpbmcuIiwKKyNpZmRlZiBLVUkKKyIgICAgIE9yIHdoZW4gY29tYmluZWQgd2l0aCAvR1VJIHNw ZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIGRpYWxvZyBib3guIiwKKyIgIC9IRUlHSFQ6bnVtYmVy IiwKKyIgICAgIFdoZW4gY29tYmluZWQgd2l0aCAvR1VJIHNwZWNpZmllcyB0aGUgaGVpZ2h0IG9m IHRoZSBkaWFsb2cgYm94LiIsCisiICAvR1VJOnN0cmluZyIsCisiICAgICBTcGVjaWZpZXMgdGhl IHRpdGxlIHRvIHVzZSBmb3IgdGhlIGRpYWxvZyBib3guIiwKKyNlbmRpZiAvKiBLVUkgKi8KKyIg IC9DT1VOVCIsCisiICAgICBDb3VudCBsaW5lcyAoYW5kIG1hdGNoZXMpIGFuZCBwcmludCB0aGUg Y291bnQocykgYnV0IG5vdCB0aGUgbGluZXMuIiwKKyNpZmRlZiBVTklDT0RFCisiICAvQ0hBUkFD VEVSLVNFVDpuYW1lIiwKKyIgICAgIFRyYW5zbGF0ZXMgZnJvbSB0aGUgbmFtZWQgY2hhcmFjdGVy IHNldC4iLAorI2lmbmRlZiBPUzIKKyIgIC9UUkFOU0xBVEUtVE86bmFtZSIsCisiICAgICBUcmFu c2xhdGVzIHRvIHRoZSBuYW1lZCBjaGFyYWN0ZXIgc2V0IChkZWZhdWx0ID0gY3VycmVudCBmaWxl IGNoYXJzZXQpLiIsCisjZW5kaWYgLyogT1MyICovCisiICAvVFJBTlNQQVJFTlQiLAorIiAgICAg SW5oaWJpdHMgY2hhcmFjdGVyLXNldCB0cmFuc2xhdGlvbi4iLAorI2VuZGlmIC8qIFVOSUNPREUg Ki8KKyIgIC9PVVRQVVQ6bmFtZSIsCisiICAgICBTZW5kcyByZXN1bHRzIHRvIHRoZSBnaXZlbiBm aWxlLiAgSWYgdGhpcyBzd2l0Y2ggaXMgb21pdHRlZCwgdGhlIiwKKyIgICAgIHJlc3VsdHMgYXBw ZWFyIG9uIHlvdXIgc2NyZWVuLiAgVGhpcyBzd2l0Y2ggb3ZlcnJpZGVzIGFueSBleHByZXNzIG9y IiwKKyIgICAgIGltcGxpZWQgL1BBR0Ugc3dpdGNoLiIsCisiICIsCisiWW91IGNhbiB1c2UgU0VU IE9QVElPTlMgVFlQRSB0byBzZXQgdGhlIGRlZmF1bHRzIGZvciAvUEFHRSBvciAvTk9QQUdFIGFu ZCIsCisiL1dJRFRILiAgVXNlIFNIT1cgT1BUSU9OUyB0byBzZWUgY3VycmVudCBUWVBFIG9wdGlv bnMuIiwKKyIiCit9OworCitzdGF0aWMgY2hhciAqIGhteHhjbGVbXSA9IHsKKyJTeW50YXg6IENM RUFSIFsgaXRlbS1uYW1lIF0iLAorIiAiLAorIkNsZWFycyB0aGUgbmFtZWQgaXRlbS4gIElmIG5v IGl0ZW0gaXMgbmFtZWQsIERFVklDRS1BTkQtSU5QVVQgaXMgYXNzdW1lZC4iLAorIiAiLAorIiAg QUxBUk0gICAgICAgICAgICBDbGVhcnMgYW55IHBlbmRpbmcgYWxhcm0gKHNlZSBTRVQgQUxBUk0p LiIsCisjaWZkZWYgQ0tfQVBDCisiICBBUEMtU1RBVFVTICAgICAgIENsZWFycyBBcHBsaWNhdGlv biBQcm9ncmFtIENvbW1hbmQgc3RhdHVzLiIsCisjZW5kaWYgLyogQ0tfQVBDICovCisjaWZkZWYg UEFUVEVSTlMKKyIgIEJJTkFSWS1QQVRURVJOUyAgQ2xlYXJzIHRoZSBmaWxlIGJpbmFyeS1wYXR0 ZXJucyBsaXN0LiIsCisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyNpZmRlZiBPUzIKKyIgIENPTU1B TkQtU0NSRUVOICAgQ2xlYXJzIHRoZSBjdXJyZW50IGNvbW1hbmQgc2NyZWVuLiIsCisjZW5kaWYg LyogT1MyICovCisiICBERVZJQ0UgICAgICAgICAgIENsZWFycyB0aGUgY3VycmVudCBwb3J0IG9y IG5ldHdvcmsgaW5wdXQgYnVmZmVyLiIsCisiICBERVZJQ0UtQU5ELUlOUFVUIENsZWFycyBib3Ro IHRoZSBkZXZpY2UgYW5kIHRoZSBJTlBVVCBidWZmZXIuIiwKKyIgIERJQUwtU1RBVFVTICAgICAg Q2xlYXJzIHRoZSBcXHYoZGlhbHN0YXR1cykgdmFyaWFibGUuIiwKKyIgIFwKK0lOUFVUICAgICAg ICAgICAgQ2xlYXJzIHRoZSBJTlBVVC1jb21tYW5kIGJ1ZmZlciBhbmQgdGhlIFxcdihpbnB1dCkg dmFyaWFibGUuIiwKKyIgIEtFWUJPQVJELUJVRkZFUiAgQ2xlYXJzIHRoZSBjb21tYW5kIHRlcm1p bmFsIGtleWJvYXJkIGlucHV0IGJ1ZmZlci4iLAorI2lmZGVmIE9TMgorIiAgXAorU0NST0xMQkFD SyAgICAgICBlbXB0aWVzIHRoZSBzY3JvbGxiYWNrIGJ1ZmZlciBpbmNsdWRpbmcgdGhlIGN1cnJl bnQgc2NyZWVuLiIsCisjZW5kaWYgLyogT1MyICovCisiICBTRU5ELUxJU1QgICAgICAgIENsZWFy cyB0aGUgY3VycmVudCBTRU5EIGxpc3QgKHNlZSBBREQpLiIsCisjaWZkZWYgT1MyCisiICBcCitU RVJNSU5BTC1TQ1JFRU4gIENsZWFycyB0aGUgY3VycmVudCBzY3JlZW4gYSBwbGFjZXMgaXQgaW50 byB0aGUgc2Nyb2xsYmFjay4iLAorIiAgICBidWZmZXIuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyNp ZmRlZiBQQVRURVJOUworIiAgVEVYVC1QQVRURVJOUyAgICBDbGVhcnMgdGhlIGZpbGUgdGV4dC1w YXR0ZXJucyBsaXN0LiIsCisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyIifTsKKyNlbmRpZiAvKiBO T0ZSSUxMUyAqLworCitzdGF0aWMgY2hhciAqIGhteHhkYXRlW10gPSB7CisiU3ludGF4OiBEQVRF IFsgZGF0ZS10aW1lIFsgdGltZXpvbmUgXSBdIFsgZGVsdGEtdGltZSBdIiwKKyIgIFByaW50cyBh IGRhdGUtdGltZSBpbiBzdGFuZGFyZCBmb3JtYXQ6IHl5eXltbWRkX2hoOm1tOnNzLiIsCisiICBW YXJpb3VzIGRhdGUtdGltZSBmb3JtYXRzIGFyZSBhY2NlcHRlZDoiLAorIiAiLAorIiAgLiBUaGUg ZGF0ZSwgaWYgZ2l2ZW4sIG11c3QgcHJlY2VkZSB0aGUgdGltZS4iLAorIiAgLiBUaGUgeWVhciBt dXN0IGJlIGZvdXIgZGlnaXRzIG9yIGVsc2UgYSAyLWRpZ2l0IGZvcm1hdCBkZCBtbW0geXksIiwK KyIgICAgaW4gd2hpY2ggY2FzZSBpZiAoeXkgPCA1MCkgeXl5eSA9IHl5ICsgMjAwMDsgZWxzZSB5 eXl5ID0geXkgKyAxOTAwLiIsCisiICAuIElmIHRoZSB5ZWFyIGNvbWVzIGZpcnN0LCB0aGUgc2Vj b25kIGZpZWxkIGlzIHRoZSBtb250aC4iLAorIiAgLiBUaGUgZGF5LCBtb250aCwgYW5kIHllYXIg bWF5IGJlIHNlcGFyYXRlZCBieSBzcGFjZXMsIC8sIC0sIG9yIHVuZGVyc2NvcmUuIgorLCIgIC4g VGhlIGRhdGUgYW5kIHRpbWUgbWF5IGJlIHNlcGFyYXRlZCBieSBzcGFjZXMgb3IgdW5kZXJzY29y ZS4iLAorIiAgLiBUaGUgbW9udGggbWF5IGJlIG51bWVyaWMgKDEgPSBKYW51YXJ5KSBvciBzcGVs bGVkIG91dCBvciBhYmJyZXZpYXRlZCBpbiIsCisiICAgIEVuZ2xpc2guIiwKKyIgIC4gVGhlIHRp bWUgbWF5IGJlIGluIDI0LWhvdXIgZm9ybWF0IG9yIDEyLWhvdXIgZm9ybWF0LiIsCisiICAuIElm IHRoZSBob3VyIGlzIDEyIG9yIGxlc3MsIEFNIGlzIGFzc3VtZWQgdW5sZXNzIEFNIG9yIFBNIGlz IGluY2x1ZGVkLiIsCisiICAuIElmIHRoZSBkYXRlIGlzIG9taXR0ZWQgYnV0IGEgdGltZSBpcyBn aXZlbiwgdGhlIGN1cnJlbnQgZGF0ZSBpcyBzdXBwbGllZC4iCissCisiICAuIElmIHRoZSB0aW1l IGlzIGdpdmVuIGJ1dCBkYXRlIG9taXR0ZWQsIDAwOjAwOjAwIGlzIHN1cHBsaWVkLiIsCisiICAu IElmIGJvdGggdGhlIGRhdGUgYW5kIHRpbWUgYXJlIG9taXR0ZWQsIHRoZSBjdXJyZW50IGRhdGUg YW5kIHRpbWUgYXJlIiwKKyIgICAgc3VwcGxpZWQuIiwKKyIgIiwKKyIgIFRoZSBmb2xsb3dpbmcg c2hvcnRjdXRzIGNhbiBhbHNvIGJlIHVzZWQgaW4gcGxhY2Ugb2YgZGF0ZXM6IiwKKyIgIiwKKyIg IE5PVyIsCisiICAgIFN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4iLAorIiAi LAorIiAgVE9EQVkiLAorIiAgICBUb2RheSdzIGRhdGUsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkg YSB0aW1lOyAwMDowMDowMCBpZiBubyB0aW1lIGdpdmVuLiIsCisiICIsCisiICBZRVNURVJEQVki LAorIiAgICBZZXN0ZXJkYXkncyBkYXRlLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgdGltZSAo ZGVmYXVsdCAwMDowMDowMCkuIiwKKyIgIiwKKyIgIFRPTU9SUk9XIiwKKyIgICAgVG9tb3Jyb3dz J3MgZGF0ZSwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIHRpbWUgKGRlZmF1bHQgMDA6MDA6MDAp LiIsCisiICIsCisiICBUaW1lem9uZSBzcGVjaWZpY2F0aW9ucyBhcmUgc2ltaWxhciB0byB0aG9z ZSB1c2VkIGluIGUtbWFpbCBhbmQgSFRUUCIsCisiICAgIGhlYWRlcnMsIGVpdGhlciBhIFVTQSB0 aW1lem9uZSBuYW1lLCBlLmcuIEVTVCwgb3IgYSBzaWduZWQgZm91ci1kaWdpdCIsCisiICAgIHRp bWV6b25lIG9mZnNldCwgeyssLX1oaG1tLCBlLmcuLCAtMDUwMDsgaXQgaXMgdXNlZCB0byBjb252 ZXJ0IGRhdGUtdGltZSwiCissCisiICAgIGEgbG9jYWwgdGltZSBpbiB0aGF0IHRpbWV6b25lLCB0 byBHTVQgd2hpY2ggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gdGhlIiwKKyIgICAgbG9jYWwgdGltZSBh dCB0aGUgaG9zdC4gIElmIG5vIHRpbWV6b25lIGlzIGdpdmVuLCB0aGUgZGF0ZS10aW1lIGlzIGxv Y2FsLiIKKywiICAgIFRvIGNvbnZlcnQgbG9jYWwgdGltZSAob3IgYSB0aW1lIGluIGEgc3BlY2lm aWVkIHRpbWV6b25lKSB0byBVVEMgKEdNVCksIiwKKyIgICAgdXNlIHRoZSBmdW5jdGlvbiBcZnV0 Y2RhdGUoKS4iLAorIiAiLAorIiAgRGVsdGEgdGltZXMgYXJlIGdpdmVuIGFzIHsrLC19W251bWJl ciBkYXRlLXVuaXRzXVtoaFs6bW1bOnNzXV1dIiwKKyIgICAgQSBkYXRlIGluIHRoZSBmdXR1cmUv cGFzdCByZWxhdGl2ZSB0byB0aGUgZGF0ZS10aW1lOyBkYXRlLXVuaXRzIG1heSBiZSIsCisiICAg IERBWVMsIFdFRUtTLCBNT05USFMsIFlFQVJTOiArM2RheXMsIC03d2Vla3MsICszOjAwLCArMW1v bnRoIDg6MDAuIiwKKyIgIiwKKyJBbGwgdGhlIGZvcm1hdHMgc2hvd24gYWJvdmUgYXJlIGFjY2Vw dGFibGUgYXMgYXJndW1lbnRzIHRvIGRhdGUtdGltZSBzd2l0Y2hlcyIKKywKKyJzdWNoIGFzIC9B RlRFUjogb3IgL0JFRk9SRTosIGFuZCB0byBmdW5jdGlvbnMgc3VjaCBhcyBcXGZjdnRkYXRlKCks IiwKKyJcXGZkaWZmZGF0ZSgpLCBhbmQgXFxmdXRjZGF0ZSgpLCB0aGF0IHRha2UgZGF0ZS10aW1l IHN0cmluZ3MgYXMgYXJndW1lbnRzLiIsCisiIgorfTsKKworCisjaWZuZGVmIE5PWEZFUgorc3Rh dGljIGNoYXIgKiBobXh4c2VuW10gPSB7CisiU3ludGF4OiBTRU5EIChvciBTKSBbIHN3aXRjaGVz Li4uXSBbIGZpbGVzcGVjIFsgYXMtbmFtZSBdIF0iLAorIiAgU2VuZHMgdGhlIGZpbGUgb3IgZmls ZXMgc3BlY2lmaWVkIGJ5IGZpbGVzcGVjLiAgSWYgdGhlIGZpbGVzcGVjIGlzIG9taXR0ZWQiLAor IiAgdGhlIFNFTkQtTElTVCBpcyB1c2VkIChIRUxQIEFERCBmb3IgbW9yZSBpbmZvKS4gIFRoZSBm aWxlc3BlYyBtYXkgY29udGFpbiIsCisiICB3aWxkY2FyZCBjaGFyYWN0ZXJzLiAgQW4gJ2FzLW5h bWUnIG1heSBiZSBnaXZlbiB0byBzcGVjaWZ5IHRoZSBuYW1lKHMpIiwKKyIgIHRoZSBmaWxlcyhz KSBhcmUgc2VudCB1bmRlcjsgaWYgdGhlIGFzLW5hbWUgaXMgb21pdHRlZCwgZWFjaCBmaWxlIGlz IiwKKyIgIHNlbnQgdW5kZXIgaXRzIG93biBuYW1lLiAgQWxzbyBzZWUgSEVMUCBNU0VORCwgSEVM UCBXSUxEQ0FSRC4iLAorIiAgT3B0aW9uYWwgc3dpdGNoZXMgaW5jbHVkZToiLAorIiAiLAorI2lm bmRlZiBOT1NQTAorIi9BUlJBWTo8YXJyYXluYW1lPiIsCisiICBTcGVjaWZpZXMgdGhhdCB0aGUg ZGF0YSB0byBiZSBzZW50IGNvbWVzIGZyb20gdGhlIGdpdmVuIGFycmF5LCBzdWNoIGFzIiwKKyIg IFxcJmFbXS4gIEEgcmFuZ2UgbWF5IGJlIHNwZWNpZmllZCwgZS5nLiBTRU5EIC9BUlJBWTomYVsx MDA6MTk5XS4gIExlYXZlIiwKKyIgIHRoZSBicmFja2V0cyBlbXB0eSBvciBvbWl0IHRoZW0gYWx0 b2dldGhlciB0byBzZW5kIHRoZSB3aG9sZSAxLWJhc2VkIGFycmF5LiIKKywKKyIgIEluY2x1ZGUg L1RFWFQgdG8gaGF2ZSBLZXJtaXQgc3VwcGx5IGEgbGluZSB0ZXJtaW5hdG9yIGF0IHRoZSBlbmQg b2YgZWFjaCIsCisiICBhcnJheSBlbGVtZW50IChhbmQgdHJhbnNsYXRlIGNoYXJhY3RlciBzZXRz IGlmIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25zIiwKKyIgIGFyZSBzZXQgdXApLCBvciAvQklO QVJZIHRvIHRyZWF0IHRoZSBhcnJheSBhcyBvbmUgbG9uZyBzdHJpbmcgb2YgY2hhcmFjdGVycyIK KywKKyIgIHRvIGJlIHNlbnQgYXMtaXMuICBJZiBhbiBhcy1uYW1lIGlzIG5vdCBzcGVjaWZpZWQs IHRoZSBhcnJheSBpcyBzZW50IHdpdGgiLAorIiAgdGhlIG5hbWUgX0FSUkFZX1hfLCB3aGVyZSBc IlhcIiBpcyByZXBsYWNlZCBieSBhY3R1YWwgYXJyYXkgbGV0dGVyLiIsCisiICIsCisjZW5kaWYg LyogTk9TUEwgKi8KKworIi9BUy1OQU1FOjx0ZXh0PiIsCisiICBTcGVjaWZpZXMgPHRleHQ+IGFz IHRoZSBuYW1lIHRvIHNlbmQgdGhlIGZpbGUgdW5kZXIgaW5zdGVhZCBvZiBpdHMgcmVhbCIsCisi ICBuYW1lLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGdpdmluZyBhbiBhcy1uYW1lIGFmdGVyIHRo ZSBmaWxlc3BlYy4iLAorIiAiLAorIi9CSU5BUlkiLAorIiAgUGVyZm9ybXMgdGhpcyB0cmFuc2Zl ciBpbiBiaW5hcnkgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZ2xvYmFsIiwKKyIgIHRyYW5z ZmVyIG1vZGUuIiwKKyIgIiwKKyIvVEVYVCIsCisiICBQZXJmb3JtcyB0aGlzIHRyYW5zZmVyIGlu IHRleHQgbW9kZSB3aXRob3V0IGFmZmVjdGluZyB0aGUgZ2xvYmFsIiwKKyIgIHRyYW5zZmVyIG1v ZGUuIiwKKyIgIiwKKyIvVFJBTlNQQVJFTlQiLAorIiAgSW5oaWJpdHMgY2hhcmFjdGVyLXNldCB0 cmFuc2xhdGlvbiBmb3IgdGV4dCBmaWxlcyBmb3IgdGhlIGR1cmF0aW9uIG9mIiwKKyIgIHRoZSBT RU5EIGNvbW1hbmQgd2l0aG91dCBhZmZlY3Rpbmcgc3Vic2VxdWVudCBjb21tYW5kcy4iLAorIiAi LAorIi9OT0JBQ0tVUEZJTEVTIiwKKyIgIFNraXAgKGRvbid0IHNlbmQpIEtlcm1pdCBvciBFTUFD UyBiYWNrdXAgZmlsZXMgKGZpbGVzIHdpdGggbmFtZXMgdGhhdCIsCisiICBlbmQgd2l0aCAufm5+ LCB3aGVyZSBuIGlzIGEgbnVtYmVyKS4iLAorIiAiLAorI2lmZGVmIFVOSVhPUk9TSworIi9ET1RG SUxFUyIsCisiICBJbmNsdWRlIChzZW5kKSBmaWxlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIFwi LlwiLiIsCisiICIsCisiL05PRE9URklMRVMiLAorIiAgRG9uJ3Qgc2VuZCBmaWxlcyB3aG9zZSBu YW1lcyBiZWdpbiB3aXRoIFwiLlwiLiIsCisiICIsCisiL0ZPTExPV0xJTktTIiwKKyIgIFNlbmQg ZmlsZXMgdGhhdCBhcmUgcG9pbnRlZCB0byBieSBzeW1ib2xpYyBsaW5rcy4iLAorIiAiLAorIi9O T0ZPTExPV0xJTktTIiwKKyIgIFNraXAgb3ZlciBzeW1ib2xpYyBsaW5rcyAoZGVmYXVsdCkuIiwK KyIgIiwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKworI2lmZGVmIFZNUworIi9JTUFHRSIsCisi ICBQZXJmb3JtcyB0aGlzIHRyYW5zZmVyIGluIGltYWdlIG1vZGUgd2l0aG91dCBhZmZlY3Rpbmcg dGhlIGdsb2JhbCIsCisiICB0cmFuc2ZlciBtb2RlLiIsCisiICIsCisjZW5kaWYgLyogVk1TICov CisjaWZkZWYgQ0tfTEFCRUxFRAorIi9MQUJFTEVEIiwKKyIgIFBlcmZvcm1zIHRoaXMgdHJhbnNm ZXIgaW4gbGFiZWxlZCBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBnbG9iYWwiLAorIiAgdHJh bnNmZXIgbW9kZS4iLAorIiAiLAorI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKyIvQ09NTUFORCIs CisiICBTZW5kcyB0aGUgb3V0cHV0IGZyb20gYSBjb21tYW5kLCByYXRoZXIgdGhhbiB0aGUgY29u dGVudHMgb2YgYSBmaWxlLiIsCisiICBUaGUgZmlyc3QgXCJmaWxlbmFtZVwiIG9uIHRoZSBTRU5E IGNvbW1hbmQgbGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aGUgbmFtZSIsCisiICBvZiBhIGNvbW1h bmQ7IHRoZSBzZWNvbmQgKGlmIGFueSkgaXMgdGhlIGFzLW5hbWUuIiwKKyIgIiwKKyIvRklMRU5B TUVTOntDT05WRVJURUQsTElURVJBTH0iLAorIiAgT3ZlcnJpZGVzIHRoZSBnbG9iYWwgU0VUIEZJ TEUgTkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5LiIsCisiICIsCisiL1BBVEhO QU1FUzp7T0ZGLEFCU09MVVRFLFJFTEFUSVZFfSIsCisiICBPdmVycmlkZXMgdGhlIGdsb2JhbCBT RVQgU0VORCBQQVRITkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2Zlci4iLAorIiAiLAorIi9G SUxURVI6Y29tbWFuZCIsCisiICBTcGVjaWZpZXMgYSBjb21tYW5kIFwKKyhzdGFuZGFyZCBpbnB1 dC9vdXRwdXQgZmlsdGVyKSB0byBwYXNzIHRoZSBmaWxlIHRocm91Z2giLAorIiAgYmVmb3JlIHNl bmRpbmcgaXQuIiwKKyIgIiwKKyIvREVMRVRFIiwKKyIgIERlbGV0ZXMgdGhlIGZpbGUgKG9yIGVh Y2ggZmlsZSBpbiB0aGUgZ3JvdXApIGFmdGVyIGl0IGhhcyBiZWVuIHNlbnQiLAorIiAgc3VjY2Vz c2Z1bGx5IChhcHBsaWVzIG9ubHkgdG8gcmVhbCBmaWxlcykuIiwKKyIgIiwKKyIvUVVJRVQiLAor IiAgV2hlbiBzZW5kaW5nIGluIGxvY2FsIG1vZGUsIHRoaXMgc3VwcHJlc3NlcyB0aGUgZmlsZS10 cmFuc2ZlciBkaXNwbGF5LiIsCisiICIsCisiL1JFQ09WRVIiLAorIiAgVXNlZCB0byByZWNvdmVy IGZyb20gYSBwcmV2aW91c2x5IGludGVycnVwdGVkIHRyYW5zZmVyOyBTRU5EIC9SRUNPVkVSIiwK KyIgIGlzIGVxdWl2YWxlbnQgUkVTRU5EICh1c2UgaW4gYmluYXJ5IG1vZGUgb25seSkuIiwKKyIg IiwKKyIvUkVDVVJTSVZFIiwKKyIgIFRlbGxzIEMtS2VybWl0IHRvIGxvb2sgbm90IG9ubHkgaW4g dGhlIGdpdmVuIG9yIGN1cnJlbnQgZGlyZWN0b3J5IGZvciIsCisiICBmaWxlcyB0aGF0IG1hdGNo IHRoZSBmaWxlc3BlYywgYnV0IGFsc28gaW4gYWxsIGl0cyBzdWJkaXJlY3RvcmllcywgYW5kIiwK KyIgIGFsbCB0aGVpciBzdWJkaXJlY3RvcmllcywgZXRjLiIsCisiICIsCisiL1JFTkFNRS1UTzpu YW1lIiwKKyIgIFRlbGxzIEMtS2VybWl0IHRvIHJlbmFtZSBlYWNoIHNvdXJjZSBmaWxlIHRoYXQg aXMgc2VudCBzdWNjZXNzZnVsbHkgdG8iLAorIiAgdGhlIGdpdmVuIG5hbWUgKHVzdWFsbHkgeW91 IHNob3VsZCBpbmNsdWRlIFxcdihmaWxlbmFtZSkgaW4gdGhlIG5ldyBuYW1lLCIsCisiICB3aGlj aCBpcyByZXBsYWNlZCBieSB0aGUgb3JpZ2luYWwgZmlsZW5hbWUuIiwKKyIgIiwKKyIvTU9WRS1U TzpkaXJlY3RvcnkiLAorIiAgVGVsbHMgQy1LZXJtaXQgdG8gbW92ZSBlYWNoIHNvdXJjZSBmaWxl IHRoYXQgaXMgc2VudCBzdWNjZXNzZnVsbHkgdG8iLAorIiAgdGhlIGdpdmVuIGRpcmVjdG9yeS4i LAorIiAiLAorIi9TVEFSVElORzpudW1iZXIiLAorIiAgU3RhcnRzIHNlbmRpbmcgdGhlIGZpbGUg ZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBwb3NpdGlvbi4iLAorIiAgU0VORCAvU1RBUlRJTkc6biBmaWxl bmFtZSBpcyBlcXVpdmFsZW50IHRvIFBTRU5EIGZpbGVuYW1lIG4uIiwKKyIgIiwKKyIvU1VCSkVD VDp0ZXh0IiwKKyIgIFNwZWNpZmllcyB0aGUgc3ViamVjdCBvZiBhbiBlbWFpbCBtZXNzYWdlLCB0 byBiZSB1c2VkIHdpdGggL01BSUwuICBJZiB0aGUiLAorIiAgdGV4dCBjb250YWlucyBzcGFjZXMs IGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzLiIsCisiICIsCisiL01BSUw6YWRkcmVzcyIs CisiICBTZW5kcyB0aGUgZmlsZSBhcyBlLW1haWwgdG8gdGhlIGdpdmVuIGFkZHJlc3M7IHVzZSB3 aXRoIC9TVUJKRUNUOi4iLAorIiAiLAorIi9QUklOVDpvcHRpb25zIiwKKyIgIFNlbmRzIHRoZSBm aWxlIHRvIGJlIHByaW50ZWQsIHdpdGggb3B0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHByaW50ZXIu IiwKKyIgIiwKKyNpZmRlZiBDS19YWVoKKyIvUFJPVE9DT0w6bmFtZSIsCisiICBVc2VzIHRoZSBn aXZlbiBwcm90b2NvbCB0byBzZW5kIHRoZSBmaWxlIChLZXJtaXQsIFptb2RlbSwgZXRjKSBmb3Ig dGhpcyIsCisiICB0cmFuc2ZlciB3aXRob3V0IGNoYW5naW5nIGdsb2JhbCBwcm90b2NvbC4iLAor IiAiLAorI2VuZGlmIC8qIENLX1hZWiAqLworIi9BRlRFUjpkYXRlLXRpbWUiLAorI2lmZGVmIFZN UworIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBjcmVhdGVkIGFmdGVyIHRoZSBn aXZlbiBkYXRlLXRpbWUgYXJlIiwKKyNlbHNlCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3Nl IGZpbGVzIG1vZGlmaWVkIGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUgYXJlIiwKKyNlbmRpZiAv KiBWTVMgKi8KKyIgIHRvIGJlIHNlbnQuICBIRUxQIERBVEUgZm9yIGluZm8gYWJvdXQgZGF0ZS10 aW1lIGZvcm1hdHMuIiwKKyIgIiwKKyIvQkVGT1JFOmRhdGUtdGltZSIsCisjaWZkZWYgVk1TCisi ICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVzIG1vZGlmaWVkIGJlZm9yZSB0aGUgZ2l2 ZW4gZGF0ZS10aW1lIiwKKyNlbHNlCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRob3NlIGZpbGVz IG1vZGlmaWVkIGJlZm9yZSB0aGUgZ2l2ZW4gZGF0ZS10aW1lIiwKKyNlbmRpZiAvKiBWTVMgKi8K KyIgIGFyZSB0byBiZSBzZW50LiIsCisiICIsCisiL05PVC1BRlRFUjpkYXRlLXRpbWUiLAorI2lm ZGVmIFZNUworIiAgU3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBv ciBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZWxzZQorIiAgU3BlY2lmaWVzIHRoYXQg b25seSB0aG9zZSBmaWxlcyBtb2RpZmllZCBhdCBvciBiZWZvcmUgdGhlIGdpdmVuIGRhdGUtdGlt ZSIsCisjZW5kaWYgLyogVk1TICovCisiICBhcmUgdG8gYmUgc2VudC4iLAorIiAiLAorIi9OT1Qt QkVGT1JFOmRhdGUtdGltZSIsCisjaWZkZWYgVk1TCisiICBTcGVjaWZpZXMgdGhhdCBvbmx5IHRo b3NlIGZpbGVzIG1vZGlmaWVkIGF0IG9yIGFmdGVyIHRoZSBnaXZlbiBkYXRlLXRpbWUiLAorI2Vs c2UKKyIgIFNwZWNpZmllcyB0aGF0IG9ubHkgdGhvc2UgZmlsZXMgbW9kaWZpZWQgYXQgb3IgYWZ0 ZXIgdGhlIGdpdmVuIGRhdGUtdGltZSIsCisjZW5kaWYgLyogVk1TICovCisiICBhcmUgdG8gYmUg c2VudC4iLAorIiAiLAorIi9MQVJHRVItVEhBTjpudW1iZXIiLAorIiAgU3BlY2lmaWVzIHRoYXQg b25seSB0aG9zZSBmaWxlcyBsb25nZXIgdGhhbiB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIGFy ZSIsCisiICB0byBiZSBzZW50LiIsCisiICIsCisiL1NNQUxMRVItVEhBTjpudW1iZXIiLAorIiAg U3BlY2lmaWVzIHRoYXQgb25seSB0aG9zZSBmaWxlcyBzbWFsbGVyIHRoYW4gdGhlIGdpdmVuIG51 bWJlciBvZiBieXRlcyBhcmUiLAorIiAgdG8gYmUgc2VudC4iLAorIiAiLAorIi9FWENFUFQ6cGF0 dGVybiIsCisiICBTcGVjaWZpZXMgdGhhdCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhl IHBhdHRlcm4sIHdoaWNoIGNhbiBiZSBhIiwKKyIgIHJlZ3VsYXIgZmlsZW5hbWUsIG9yIG1heSBj b250YWluIFwiKlwiIGFuZC9vciBcIj9cIiBtZXRhY2hhcmFjdGVycywiLAorIiAgYXJlIG5vdCB0 byBiZSBzZW50LiAgVG8gc3BlY2lmeSBtdWx0aXBsZSBwYXR0ZXJucyAodXAgdG8gOCksIHVzZSBv dXRlciIsCisiICBicmFjZXMgYXJvdW5kIHRoZSBncm91cCwgYW5kIGlubmVyIGJyYWNlcyBhcm91 bmQgZWFjaCBwYXR0ZXJuOiIsCisiICIsCisiICAgIC9FWENFUFQ6e3twYXR0ZXJuMX17cGF0dGVy bjJ9Li4ufSIsCisiICIsCisiL1RZUEU6e0FMTCxURVhULEJJTkFSWX0iLAorIiAgU2VuZCBvbmx5 IGZpbGVzIG9mIHRoZSBnaXZlbiB0eXBlIChzZWUgU0VUIEZJTEUgU0NBTikuIiwKKyIgIiwKKyIv TElTVEZJTEU6ZmlsZW5hbWUiLAorIiAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgZmlsZSB0aGF0 IGNvbnRhaW5zIHRoZSBsaXN0IG9mIG5hbWVzIG9mIGZpbGVzIiwKKyIgIHRoYXQgYXJlIHRvIGJl IHNlbnQuICBUaGUgZmlsZW5hbWVzIHNob3VsZCBiZSBsaXN0ZWQgb25lIG5hbWUgcGVyIGxpbmUi LAorIiAgaW4gdGhpcyBmaWxlIChidXQgYSBuYW1lIGNhbiBjb250YWluIHdpbGRjYXJkcykuIiwK KyIgIiwKKyJBbHNvIHNlZSBIRUxQIFJFQ0VJVkUsIEhFTFAgR0VULCBIRUxQIFNFUlZFUiwgSEVM UCBSRU1PVEUuIiwKKyIifTsKKworc3RhdGljIGNoYXIgKmhteHhyY1tdID0geworIlN5bnRheDog UkVDRUlWRSAob3IgUikgWyBzd2l0Y2hlcy4uLiBdIFsgYXMtbmFtZSBdIiwKKyIgIFdhaXQgZm9y IGEgZmlsZSB0byBhcnJpdmUgZnJvbSB0aGUgb3RoZXIgS2VybWl0LCB3aGljaCBtdXN0IGJlIGdp dmVuIGEiLAorIiAgU0VORCBjb21tYW5kLiAgSWYgdGhlIG9wdGlvbmFsIGFzLW5hbWUgaXMgZ2l2 ZW4sIHRoZSBpbmNvbWluZyBmaWxlIG9yIiwKKyIgIGZpbGVzIGFyZSBzdG9yZWQgdW5kZXIgdGhh dCBuYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzdG9yZWQgdW5kZXIiLAorI2lmbmRlZiBDS19U TVBESVIKKyIgIHRoZSBuYW1lIGl0IGFycml2ZXMgd2l0aC4iLAorI2Vsc2UKKyNpZmRlZiBPUzIK KyIgIHRoZSBuYW1lIGl0IGFycml2ZXMgd2l0aC4gIElmIHRoZSBmaWxlc3BlYyBkZW5vdGVzIGEg ZGlzayBhbmQvb3IiLAorIiAgZGlyZWN0b3J5LCB0aGUgaW5jb21pbmcgZmlsZSBvciBmaWxlcyB3 aWxsIGJlIHN0b3JlZCB0aGVyZS4iLAorI2Vsc2UKKyIgIHRoZSBuYW1lIGl0IGFycml2ZXMgd2l0 aC4gIElmIHRoZSBmaWxlc3BlYyBkZW5vdGVzIGEgZGlyZWN0b3J5LCB0aGUiLAorIiAgaW5jb21p bmcgZmlsZSBvciBmaWxlcyB3aWxsIGJlIHBsYWNlZCBpbiB0aGF0IGRpcmVjdG9yeS4iLAorI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX1RNUERJUiAqLworIiAiLAorIk9wdGlvbmFsIHN3 aXRjaGVzIGluY2x1ZGU6IiwKKyIgIiwKKyIvQVMtTkFNRTp0ZXh0IiwKKyIgIFNwZWNpZmllcyBc InRleHRcIiBhcyB0aGUgbmFtZSB0byBzdG9yZSB0aGUgaW5jb21pbmcgZmlsZSB1bmRlci4iLAor IiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIGFzLW5hbWUgYXMgYSBmaWxlbmFtZSBvbiB0aGUg Y29tbWFuZCBsaW5lLiIsCisiICIsCisiL0JJTkFSWSIsCisiICBTa2lwcyB0ZXh0LW1vZGUgY29u dmVyc2lvbnMgdW5sZXNzIHRoZSBpbmNvbWluZyBmaWxlIGFycml2ZXMgd2l0aCBiaW5hcnkiLAor IiAgYXR0cmlidXRlIiwKKyIgIiwKKyIvQ09NTUFORCIsCisiICBSZWNlaXZlcyB0aGUgZmlsZSBp bnRvIHRoZSBzdGFuZGFyZCBpbnB1dCBvZiBhIGNvbW1hbmQsIHJhdGhlciB0aGFuIHNhdmluZyIs CisiICBpdCBvbiBkaXNrLiAgVGhlIC9BUy1OQU1FIG9yIHRoZSBcImZpbGVuYW1lXCIgb24gdGhl IFJFQ0VJVkUgY29tbWFuZCBsaW5lIiwKKyIgIGlzIGludGVycHJldGVkIGFzIHRoZSBuYW1lIG9m IGEgY29tbWFuZC4iLAorIiAiLAorIi9FWENFUFQ6cGF0dGVybiIsCisiICBTcGVjaWZpZXMgdGhh dCBhbnkgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4sIHdoaWNoIGNhbiBiZSBh IiwKKyIgIHJlZ3VsYXIgZmlsZW5hbWUsIG9yIG1heSBjb250YWluIFwiKlwiIGFuZC9vciBcIj9c IiBtZXRhY2hhcmFjdGVycywiLAorIiAgYXJlIHRvIGJlIHJlZnVzZWQuICBUbyBzcGVjaWZ5IG11 bHRpcGxlIHBhdHRlcm5zICh1cCB0byA4KSwgdXNlIG91dGVyIiwKKyIgIGJyYWNlcyBhcm91bmQg dGhlIGdyb3VwLCBhbmQgaW5uZXIgYnJhY2VzIGFyb3VuZCBlYWNoIHBhdHRlcm46IiwKKyIgIiwK KyIgICAgL0VYQ0VQVDp7e3BhdHRlcm4xfXtwYXR0ZXJuMn0uLi59IiwKKyIgIiwKKyIvRklMRU5B TUVTOntDT05WRVJURUQsTElURVJBTH0iLAorIiAgT3ZlcnJpZGVzIHRoZSBnbG9iYWwgU0VUIEZJ TEUgTkFNRVMgc2V0dGluZyBmb3IgdGhpcyB0cmFuc2ZlciBvbmx5LiIsCisiICIsCisiL0ZJTFRF Ujpjb21tYW5kIiwKKyIgIENhdXNlcyB0aGUgaW5jb21pbmcgZmlsZSB0byBwYXNzZWQgdGhyb3Vn aCB0aGUgZ2l2ZW4gY29tbWFuZCAoc3RhbmRhcmQiLAorIiAgaW5wdXQvb3V0cHV0IGZpbHRlcikg YmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gZGlzay4iLAorIiAiLAorI2lmZGVmIFZNUworIi9JTUFH RSIsCisiICBSZWNlaXZlcyB0aGUgZmlsZSBpbiBpbWFnZSBtb2RlLiIsCisiICIsCisjZW5kaWYg LyogVk1TICovCisjaWZkZWYgQ0tfTEFCRUxFRAorIi9MQUJFTEVEIiwKKyIgIFNwZWNpZmllcyBs YWJlbGVkIHRyYW5zZmVyIG1vZGUuIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisK KyIvTU9WRS1UTzpkaXJlY3RvcnktbmFtZSIsCisiICBTcGVjaWZpZXMgdGhhdCBlYWNoIGZpbGUg dGhhdCBhcnJpdmVzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgc3BlY2lmaWVkIiwKKyIgIGRpcmVj dG9yeSBhZnRlciwgYW5kIG9ubHkgaWYsIGl0IGhhcyBiZWVuIHJlY2VpdmVkIHN1Y2Nlc3NmdWxs eS4iLAorIiAiLAorIi9QQVRITkFNRVM6e09GRixBQlNPTFVURSxSRUxBVElWRSxBVVRPfSIsCisi ICBPdmVycmlkZXMgdGhlIGdsb2JhbCBTRVQgUkVDRUlWRSBQQVRITkFNRVMgc2V0dGluZyBmb3Ig dGhpcyB0cmFuc2Zlci4iLAorIiAiLAorIi9QSVBFUzp7T04sT0ZGfSIsCisiICBPdmVycmlkZXMg dGhlIFRSQU5TRkVSIFBJUEVTIHNldHRpbmcgZm9yIHRoaXMgY29tbWFuZCBvbmx5LiAgT04gYWxs b3dzIiwKKyIgIHJlY2VwdGlvbiBvZiBmaWxlcyB3aXRoIG5hbWVzIGxpa2UgXCIhdGFyIHhmIC1c IiB0byBiZSBhdXRvbWF0aWNhbGx5IiwKKyIgIGRpcmVjdGVkIHRvIGEgcGlwZWxpbmUuIiwKKyIg IiwKKyIvUFJPVE9DT0w6bmFtZSIsCisiICBVc2UgdGhlIGdpdmVuIHByb3RvY29sIHRvIHJlY2Vp dmUgdGhlIGluY29taW5nIGZpbGUocykuIiwKKyIgIiwKKyIvUVVJRVQiLAorIiAgV2hlbiBzZW5k aW5nIGluIGxvY2FsIG1vZGUsIHRoaXMgc3VwcHJlc3NlcyB0aGUgZmlsZS10cmFuc2ZlciBkaXNw bGF5LiIsCisiICIsCisiL1JFQ1VSU0lWRSIsCisiICBFcXVpdmFsZW50IHRvIC9QQVRITkFNRVM6 UkVMQVRJVkUuIiwKKyIgIiwKKyIvUkVOQU1FLVRPOnN0cmluZyIsCisiICBTcGVjaWZpZXMgdGhh dCBlYWNoIGZpbGUgdGhhdCBhcnJpdmVzIHNob3VsZCBiZSByZW5hbWVkIGFzIHNwZWNpZmllZCIs CisiICBhZnRlciwgYW5kIG9ubHkgaWYsIGl0IGhhcyBiZWVuIHJlY2VpdmVkIHN1Y2Nlc3NmdWxs eS4gIFRoZSBzdHJpbmcgc2hvdWxkIiwKKyIgIG5vcm1hbGx5IGNvbnRhaW4gdmFyaWFibGVzIGxp a2UgXFx2KGZpbGVuYW1lKSBvciBcXHYoZmlsZW51bSkuIiwKKyIgIiwKKyIvVEVYVCIsCisiICBG b3JjZXMgdGV4dC1tb2RlIGNvbnZlcnNpb25zIHVubGVzcyB0aGUgaW5jb21pbmcgZmlsZSBoYXMg dGhlIGJpbmFyeSIsCisiICBhdHRyaWJ1dGUiLAorIiAiLAorIi9UUkFOU1BBUkVOVCIsCisiICBJ bmhpYml0cyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uIG9mIGluY29taW5nIHRleHQgZmlsZXMg Zm9yIHRoZSBkdXJhdGlvbiIsCisiICBvZiB0aGUgUkVDRUlWRSBjb21tYW5kIHdpdGhvdXQgYWZm ZWN0aW5nIHN1YnNlcXVlbnQgY29tbWFuZHMuIiwKKyIgIiwKKyJBbHNvIHNlZSBIRUxQIFNFTkQs IEhFTFAgR0VULCBIRUxQIFNFUlZFUiwgSEVMUCBSRU1PVEUuIiwKKyIiIH07CisKKyNpZm5kZWYg Tk9SRVNFTkQKK3N0YXRpYyBjaGFyICpobXh4cnNlbiA9ICJcCitTeW50YXg6IFJFU0VORCBmaWxl c3BlYyBbbmFtZV1cblxuXAorICBSZXNlbmRzIHRoZSBmaWxlIG9yIGZpbGVzLCB3aG9zZSBwcmV2 aW91cyB0cmFuc2ZlciB3YXMgaW50ZXJydXB0ZWQuXG5cCisgIFBpY2tzIHVwIGZyb20gd2hlcmUg cHJldmlvdXMgdHJhbnNmZXIgbGVmdCBvZmYsIElGIHRoZSByZWNlaXZlciBrZXB0IHRoZVxuXAor ICBwYXJ0aWFsbHkgcmVjZWl2ZWQgZmlsZS4gIFdvcmtzIG9ubHkgZm9yIGJpbmFyeS1tb2RlIHRy YW5zZmVycy5cblwKKyAgUmVxdWlyZXMgZmlsZS10cmFuc2ZlciBwYXJ0bmVyIHRvIHN1cHBvcnQg cmVjb3ZlcnkuICBTeW5vbnltOiBSRVBVVC4iOworCitzdGF0aWMgY2hhciAqaG14eHJnZXQgPSAi XAorU3ludGF4OiBSRUdFVCBmaWxlc3BlY1xuXG5cCisgIEFzayBhIHNlcnZlciB0byBSRVNFTkQg YSBmaWxlIHRvIEMtS2VybWl0LiI7CisKK3N0YXRpYyBjaGFyICpobXh4cHNlbiA9ICJcCitTeW50 YXg6IFBTRU5EIGZpbGVzcGVjIHBvc2l0aW9uIFtuYW1lXVxuXG5cCisgIEp1c3QgbGlrZSBTRU5E LCBleGNlcHQgc2VuZHMgdGhlIGZpbGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGJ5dGUgcG9zaXRp b24uIjsKKyNlbmRpZiAvKiBOT1JFU0VORCAqLworCisjaWZuZGVmIE5PTVNFTkQKK3N0YXRpYyBj aGFyICpobXh4bXNlW10gPSB7CisiU3ludGF4OiBNU0VORCBbIHN3aXRjaGVzLi4uIF0gZmlsZXNw ZWMgWyBmaWxlc3BlYyBbIC4uLiBdIF0iLAorIiAgU2VuZHMgdGhlIGZpbGVzIHNwZWNpZmllZCBi eSB0aGUgZmlsZXNwZWNzLiAgT25lIG9yIG1vcmUgZmlsZXNwZWNzIG1heSBiZSIsCisiICBsaXN0 ZWQsIHNlcGFyYXRlZCBieSBzcGFjZXMuICBBbnkgb3IgYWxsIGZpbGVzcGVjcyBtYXkgY29udGFp biB3aWxkY2FyZHMiLAorIiAgYW5kIHRoZXkgbWF5IGJlIGluIGRpZmZlcmVudCBkaXJlY3Rvcmll cy4gIEFsdGVybmF0aXZlIG5hbWVzIGNhbm5vdCBiZSIsCisiICBnaXZlbi4gIFN3aXRjaGVzIGlu Y2x1ZGUgL0JJTkFSWSAvREVMRVRFIC9NQUlMIC9QUk9UT0NPTCAvUVVJRVQgL1JFQ09WRVIiLAor IiAgL1RFWFQgL1RZUEU7IHNlZSBIRUxQIFNFTkQgZm9yIGRlc2NyaXB0aW9ucy4iLAorIiIKK307 CisjZW5kaWYgLyogTk9NU0VORCAqLworCitzdGF0aWMgY2hhciAqaG14eGFkZFtdID0geworI2lm bmRlZiBOT01TRU5ECisiQUREIFNFTkQtTElTVCBmaWxlc3BlYyBbIDxtb2RlPiBbIDxhcy1uYW1l PiBdIF0iLAorIiAgQWRkcyB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgZmlsZXMgdG8gdGhlIGN1cnJl bnQgU0VORCBsaXN0LiAgVXNlIFNIT1ciLAorIiAgU0VORC1MSVNUIGFuZCBDTEVBUiBTRU5ELUxJ U1QgdG8gZGlzcGxheSBhbmQgY2xlYXIgdGhlIGxpc3Q7IHVzZSBTRU5EIiwKKyIgIGJ5IGl0c2Vs ZiB0byBzZW5kIHRoZSBmaWxlcyBmcm9tIGl0LiIsCisiICIsCisjZW5kaWYgLyogTk9NU0VORCAq LworI2lmZGVmIFBBVFRFUk5TCisiQUREIEJJTkFSWS1QQVRURVJOUyBbIDxwYXR0ZXJuPiBbIDxw YXR0ZXJuPiAuLi4gXSBdIiwKKyIgIEFkZHMgdGhlIHBhdHRlcm4ocyksIGlmIGFueSwgdG8gdGhl IFNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUyBsaXN0LiIsCisiICIsCisiQUREIFRFWFQtUEFUVEVS TlMgWyA8cGF0dGVybj4gWyA8cGF0dGVybj4gLi4uIF0gXSIsCisiICBBZGRzIHRoZSBwYXR0ZXJu KHMpLCBpZiBhbnksIHRvIHRoZSBTRVQgRklMRSBURVhULVBBVFRFUk5TIGxpc3QuIiwKKyIgIFVz ZSBTSE9XIFBBVFRFUk5TIHRvIHNlZSB0aGUgbGlzdHMuICBTZWUgSEVMUCBTRVQgRklMRSBmb3Ig ZnVydGhlciBpbmZvLiIsCisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyIifTsKKworc3RhdGljIGNo YXIgKmhteHhyZW12W10gPSB7CisjaWZkZWYgUEFUVEVSTlMKKyJSRU1PVkUgQklOQVJZLVBBVFRF Uk5TIFsgPHBhdHRlcm4+IFsgPHBhdHRlcm4+IC4uLiBdIF0iLAorIiAgUmVtb3ZlcyB0aGUgcGF0 dGVybihzKSwgaWYgYW55LCBmcm9tIHRoZSBTRVQgRklMRSBCSU5BUlktUEFUVEVSTlMgbGlzdCIs CisiICIsCisiUkVNT1ZFIFRFWFQtUEFUVEVSTlMgWyA8cGF0dGVybj4gWyA8cGF0dGVybj4gLi4u IF0gXSIsCisiICBSZW1vdmVzIHRoZSBnaXZlbiBwYXR0ZXJucyBmcm9tIHRoZSBTRVQgRklMRSBU RVhULVBBVFRFUk5TIGxpc3QuIiwKKyIgIFVzZSBTSE9XIFBBVFRFUk5TIHRvIHNlZSB0aGUgbGlz dHMuICBTZWUgSEVMUCBTRVQgRklMRSBmb3IgZnVydGhlciBpbmZvLiIsCisjZW5kaWYgLyogUEFU VEVSTlMgKi8KKyIifTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NFUlZFUgor c3RhdGljIGNoYXIgKmhteHhzZXIgPSAiU3ludGF4OiBTRVJWRVJcblwKKyAgRW50ZXIgc2VydmVy IG1vZGUgb24gdGhlIGN1cnJlbnQgY29ubmVjdGlvbi4gIEFsbCBmdXJ0aGVyIGNvbW1hbmRzXG5c CisgIGFyZSB0YWtlbiBpbiBwYWNrZXQgZm9ybSBmcm9tIHRoZSBvdGhlciBLZXJtaXQgcHJvZ3Jh bS4gIFVzZSBGSU5JU0gsXG5cCisgIEJZRSwgb3IgUkVNT1RFIEVYSVQgdG8gZ2V0IEMtS2VybWl0 IG91dCBvZiBzZXJ2ZXIgbW9kZS4iOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKK3N0YXRpYyBj aGFyICpobWhzZXRbXSA9IHsKKyIgIFRoZSBTRVQgY29tbWFuZCBlc3RhYmxpc2hlcyBjb21tdW5p Y2F0aW9uLCBmaWxlLCBzY3JpcHRpbmcsIG9yIG90aGVyIiwKKyIgIHBhcmFtZXRlcnMuICBUaGUg U0hPVyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlcyBvZiIsCisiICBT RVQgcGFyYW1ldGVycy4gIEhlbHAgaXMgYXZhaWxhYmxlIGZvciBlYWNoIGluZGl2aWR1YWwgcGFy YW1ldGVyOyIsCisiICB0eXBlIEhFTFAgU0VUID8gdG8gc2VlIHdoYXQncyBhdmFpbGFibGUuIiwK KyIiIH07CisKKyNpZm5kZWYgTk9TRVRLRVkKK3N0YXRpYyBjaGFyICpobWhza2V5W10gPSB7Cisi U3ludGF4OiBTRVQgS0VZIGsgdGV4dCIsCisiT3I6ICAgICBTRVQgS0VZIENMRUFSIiwKKyIgIENv bmZpZ3VyZSB0aGUga2V5IHdob3NlIFwic2NhbiBjb2RlXCIgaXMgayB0byBzZW5kIHRoZSBnaXZl biB0ZXh0IHdoZW4iLAorIiAgcHJlc3NlZCBkdXJpbmcgQ09OTkVDVCBtb2RlLiAgU0VUIEtFWSBD TEVBUiByZXN0b3JlcyBhbGwgdGhlIGRlZmF1bHQiLAorIiAga2V5IG1hcHBpbmdzLiAgSWYgdGhl cmUgaXMgbm8gdGV4dCwgdGhlIGRlZmF1bHQga2V5IGJpbmRpbmcgaXMgcmVzdG9yZWQiLAorI2lm bmRlZiBOT0NTRVRTCisiICBmb3IgdGhlIGtleSBrLiAgU0VUIEtFWSBtYXBwaW5ncyB0YWtlIHBs YWNlIGJlZm9yZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IiwKKyIgIHRyYW5zbGF0aW9uLiIsCisj ZWxzZQorIiAgdGhlIGtleSBrLiIsCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmZGVmIE9TMgor IiAiLAorIiAgVGhlIHRleHQgbWF5IGNvbnRhaW4gXCJcXEt2ZXJic1wiIHRvIGRlbm90ZSBhY3Rp b25zLCB0byBzdGFuZCBmb3IgREVDIiwKKyIgIGtleXBhZCwgZnVuY3Rpb24sIG9yIGVkaXRpbmcg a2V5cywgZXRjLiAgRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUga2V5Ym9hcmQiLAorIiAgdmVyYnMs IHR5cGUgU0hPVyBLVkVSQlMuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKyIgIFRvIGZpbmQg b3V0IHRoZSBzY2FuIGNvZGUgYW5kIG1hcHBpbmcgZm9yIGEgcGFydGljdWxhciBrZXksIHVzZSB0 aGUiLAorIiAgU0hPVyBLRVkgY29tbWFuZC4iLAorIiJ9OworI2VuZGlmIC8qIE5PU0VUS0VZICov CisKK3N0YXRpYyBjaGFyICpobXh5Y2hrdFtdID0geyAiU3ludGF4OiBTRVQgQkxPQ0stQ0hFQ0sg bnVtYmVyIiwKKyIgIiwKKyJUeXBlIG9mIGJsb2NrIGNoZWNrIHRvIGJlIHVzZWQgZm9yIGVycm9y IGRldGVjdGlvbiBvbiBmaWxlLXRyYW5zZmVyIiwKKyJwYWNrZXRzOiAxLCAyLCAzLCA0LCBvciA1 LiAgVGhpcyBjb21tYW5kIG11c3QgYmUgZ2l2ZW4gdG8gdGhlIGZpbGUiLAorInNlbmRlciBwcmlv ciB0byB0aGUgdHJhbnNmZXIuIiwKKyIgIiwKKyJUeXBlIDEgaXMgc3RhbmRhcmQgYW5kIHN1cHBv cnRlZCBieSBhbGwgS2VybWl0IHByb3RvY29sIGltcGxlbWVudGF0aW9ucywiLAorIiAgYnV0IGl0 J3Mgb25seSBhIDYtYml0IGNoZWNrc3VtLCByZXByZXNlbnRlZCBpbiBhIHNpbmdsZSBwcmludGFi bGUgQVNDSUkiLAorIiAgY2hhcmFjdGVyLiAgSXQncyBmaW5lIGZvciByZWxpYWJsZSBjb25uZWN0 aW9ucyAoZXJyb3ItY29ycmVjdGluZyBtb2RlbXMsIiwKKyIgIFRDUC9JUCwgZXRjKSBidXQgdHlw ZSAzIGlzIHJlY29tbWVuZGVkIGZvciBjb25uZWN0aW9ucyB3aGVyZSBlcnJvcnMgY2FuIiwKKyIg IG9jY3VyLiIsCisiICIsCisiVHlwZSAyIGlzIGEgMTItYml0IGNoZWNrc3VtIHJlcHJlc2VudGVk IGluIHR3byBwcmludGFibGUgY2hhcmFjdGVycy4iLAorIiAiLAorIlR5cGUgMyBpcyBhIDE2LWJp dCBjeWNsaWMgcmVkdW5kYW5jeSBjaGVjaywgdGhlIHN0cm9uZ2VzdCBlcnJvciIsCisiICBkZXRl Y3Rpb24gbWV0aG9kIHN1cHBvcnRlZCBieSBLZXJtaXQgcHJvdG9jb2wsIHJlcHJlc2VudGVkIGlu IHRocmVlIiwKKyIgIHByaW50YWJsZSBjaGFyYWN0ZXJzLiIsCisiICIsCisiVHlwZSA0IChhbGlh cyBcIkJMQU5LLUZSRUUtMlwiKSBpcyBhIDEyLWJpdCBjaGVja3N1bSBndWFyYW50ZWVkIHRvIiwK KyIgIGNvbnRhaW4gbm8gYmxhbmtzIGluIGl0cyByZXByZXNlbnRhdGlvbjsgdGhpcyBpcyBuZWVk ZWQgZm9yIGNvbm5lY3Rpb25zIiwKKyIgIHdoZXJlIHRyYWlsaW5nIGJsYW5rcyBhcmUgc3RyaXBw ZWQgZnJvbSBpbmNvbWluZyBsaW5lcyBvZiB0ZXh0LiIsCisiICIsCisiVHlwZSA1IChhbGlhcyBc IkZPUkNFLTNcIikgbWVhbnMgdG8gZm9yY2UgYSBUeXBlIDMgYmxvY2sgY2hlY2sgb24iLAorIiAg ZXZlcnkgcGFja2V0LCBpbmNsdWRpbmcgdGhlIGZpcnN0IHBhY2tldCwgd2hpY2ggbm9ybWFsbHkg aGFzIGEgdHlwZSAxIiwKKyIgIGJsb2NrIGNoZWNrLiAgVGhpcyBpcyBmb3IgdXNlIGluIGNyaXRp Y2FsIGFwcGxpY2F0aW9ucyBvbiBub2lzeSIsCisiICBjb25uZWN0aW9ucy4gIEFzIHdpdGggdHlw ZXMgMiwgMywgYW5kIDQsIGlmIHRoZSBLZXJtaXQgZmlsZSIsCisiICB0cmFuc2ZlciBwYXJ0bmVy IGRvZXMgbm90IHN1cHBvcnQgdGhpcyB0eXBlLCB0aGUgdHJhbnNmZXIgZmFpbHMiLAorIiAgaW1t ZWRpYXRlbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNmZXIuIiwKKyIiIH07CisKK3N0 YXRpYyBjaGFyICogaG14eWRlYltdID0geworIlN5bnRheDogU0VUIERFQlVHIHsgU0VTU0lPTiwg T04sIE9GRiwgVElNRVNUQU1QLCBNRVNTQUdFUyB9IiwKKyIgIiwKKyJTRVQgREVCVUcgT04iLAor I2lmZGVmIERFQlVHCisiICBPcGVucyBhIGRlYnVnIGxvZyBmaWxlIG5hbWVkIGRlYnVnLmxvZyBp biB0aGUgY3VycmVudCBkaXJlY3RvcnkuIiwKKyIgIFVzZSBMT0cgREVCVUcgaWYgeW91IHdhbnQg c3BlY2lmeSBhIGRpZmZlcmVudCBsb2cgZmlsZSBuYW1lIG9yIHBhdGguIiwKKyNlbHNlCisiICAo SGFzIG5vIGVmZmVjdCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0LikiLAorI2VuZGlmIC8qIERF QlVHICovCisiICIsCisiU0VUIERFQlVHIE9GRiIsCisiICBTdG9wcyBkZWJ1ZyBsb2dnaW5nIGFu ZCBzZXNzaW9uIGRlYnVnZ2luZy4iLAorIiAiLAorIlNFVCBERUJVRyBTRVNTSU9OIiwKKyNpZm5k ZWYgTk9MT0NBTAorIiAgRGlzcGxheXMgY29udHJvbCBhbmQgOC1iaXQgY2hhcmFjdGVycyBzeW1i b2xpY2FsbHkgZHVyaW5nIENPTk5FQ1QgbW9kZS4iLAorIiAgRXF1aXZhbGVudCB0byBTRVQgVEVS TUlOQUwgREVCVUcgT04uIiwKKyNlbHNlCisiICAoSGFzIG5vIGVmZmVjdCBpbiB0aGlzIHZlcnNp b24gb2YgS2VybWl0LikiLAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyIgIiwKKyJTRVQgREVCVUcg VElNRVNUQU1QIHsgT04sIE9GRiB9IiwKKyIgIEVuYWJsZXMvRGlzYWJsZXMgdGltZXN0YW1wcyBv biBkZWJ1ZyBsb2cgZW50cmllcy4iLAorIiAiLAorIlNFVCBERUJVRyBNRVNTQUdFUyB7IE9OLCBP RkYsIFNUREVSUiB9IFtDLUtlcm1pdCA5LjBdIiwKKyIgIEVuYWJsZXMvRGlzYWJsZXMgbWVzc2Fn ZXMgcHJpbnRlZCBieSB0aGUgREVCVUcgY29tbWFuZC4iLAorIiAgU0VUIERFQlVHIE9GRiBjYXVz ZXMgREVCVUcgbWVzc2FnZXMgbm90IHRvIGJlIHByaW50ZWQuIiwKKyIgIFNFVCBERUJVRyBPTiBz ZW5kcyBERUJVRyBtZXNzYWdlcyB0byBzdGFuZGFyZCBvdXRwdXQgKHN0ZG91dCk7IiwKKyIgIFNF VCBERUJVRyBTVERFUlIgc2VuZHMgREVCVUcgbWVzc2FnZXMgdG8gc3RhbmRhcmQgZXJyb3IgKHN0 ZGVycik7IiwKKyIiIH07CisKKyNpZmRlZiBDS19TUEVFRAorc3RhdGljIGNoYXIgKmhteHlxY3Rs W10gPSB7CisiU3ludGF4OiBTRVQgQ09OVFJPTC1DSEFSQUNURVIgeyBQUkVGSVhFRCwgVU5QUkVG SVhFRCB9IHsgPGNvZGU+Li4uLCBBTEwgfSIsCisiICIsCisiICA8Y29kZT4gaXMgdGhlIG51bWVy aWMgQVNDSUkgY29kZSBmb3IgYSBjb250cm9sIGNoYXJhY3RlciAxLTMxLDEyNy0xNTksMjU1LiIK KywKKyIgIFRoZSB3b3JkIFwiQUxMXCIgbWVhbnMgYWxsIGNoYXJhY3RlcnMgaW4gdGhpcyByYW5n ZS4iLAorIiAiLAorIiAgUFJFRklYRUQgPGNvZGU+IG1lYW5zIHRoZSBnaXZlbiBjb250cm9sIGNo YXJhY3RlciBtdXN0IGJlIGNvbnZlcnRlZCB0byBhIiwKKyIgIHByaW50YWJsZSBjaGFyYWN0ZXIg YW5kIHByZWZpeGVkLCB0aGUgZGVmYXVsdCBmb3IgYWxsIGNvbnRyb2wgY2hhcmFjdGVycy4iLAor IiAiLAorIiAgVU5QUkVGSVhFRCA8Y29kZT4gbWVhbnMgeW91IHRoaW5rIGl0IGlzIHNhZmUgdG8g c2VuZCB0aGUgZ2l2ZW4gY29udHJvbCIsCisiICBjaGFyYWN0ZXIgYXMtaXMsIHdpdGhvdXQgYSBw cmVmaXguICBVU0UgVEhJUyBPUFRJT04gQVQgWU9VUiBPV04gUklTSyEiLAorIiAiLAorIiAgU0hP VyBDT05UUk9MIHRvIHNlZSBjdXJyZW50IHNldHRpbmdzLiAgU0VUIENPTlRST0wgUFJFRklYRUQg QUxMIGlzIiwKKyIgIHJlY29tbWVuZGVkIGZvciBzYWZldHkuICBZb3UgY2FuIGluY2x1ZGUgbXVs dGlwbGUgPGNvZGU+IHZhbHVlcyBpbiBvbmUiLAorIiAgY29tbWFuZCwgc2VwYXJhdGVkIGJ5IHNw YWNlcy4iLAorIiIgfTsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisjaWZuZGVmIE5PRElBTAor c3RhdGljIGNoYXIgKmh4eW1vZG1bXSA9IHsKKyJTeW50YXg6IFNFVCBNT0RFTSA8cGFyYW1ldGVy PiA8dmFsdWU+IC4uLiIsCisiICIsCisiTm90ZTogTWFueSBvZiB0aGUgU0VUIE1PREVNIHBhcmFt ZXRlcnMgYXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSB3aGVuIiwKKyJ5b3UgU0VUIE1PREVN IFRZUEUsIGFjY29yZGluZyB0byB0aGUgbW9kZW0ncyBjYXBhYmlsaXRpZXMuICBTSE9XIE1PREVN IHRvIiwKKyJzZWUgdGhlbS4gIEFsc28gc2VlIEhFTFAgRElBTCBhbmQgSEVMUCBTRVQgRElBTC4i LAorIiAiLAorIlNFVCBNT0RFTSBUWVBFIDxuYW1lPiIsCisKKyIgVGVsbHMgS2VybWl0IHdoaWNo IGtpbmQgb2YgbW9kZW0geW91IGhhdmUsIHNvIGl0IGNhbiBpc3N1ZSB0aGUiLAorIiBhcHByb3By aWF0ZSBtb2RlbS1zcGVjaWZpYyBjb21tYW5kcyBmb3IgY29uZmlndXJhdGlvbiwgZGlhbGluZywg YW5kIiwKKyIgaGFuZ2luZyB1cC4gIEZvciBhIGxpc3Qgb2YgdGhlIG1vZGVtIHR5cGVzIGtub3du IHRvIEtlcm1pdCwgdHlwZSBcInNldCIsCisiIG1vZGVtIHR5cGUgP1wiLiAgVGhlIGRlZmF1bHQg bW9kZW0gdHlwZSBpcyBHRU5FUklDLCB3aGljaCBzaG91bGQgd29yayIsCisiIHdpdGggYW55IEFU IGNvbW1hbmQtc2V0IG1vZGVtIHRoYXQgaXMgY29uZmlndXJlZCBmb3IgZXJyb3IgY29ycmVjdGlv biwiLAorIiBkYXRhIGNvbXByZXNzaW9uLCBhbmQgaGFyZHdhcmUgZmxvdyBjb250cm9sLiAgVXNl IFNFVCBNT0RFTSBUWVBFIE5PTkUiLAorIiBmb3IgZGlyZWN0IHNlcmlhbCwgY29ubmVjdGlvbnMu ICBVc2UgU0VUIE1PREVNIFRZUEUgVVNFUi1ERUZJTkVEIHRvIHVzZSIsCisiIGEgdHlwZSBvZiBt b2RlbSB0aGF0IGlzIG5vdCBidWlsdCBpbiB0byBLZXJtaXQsIGFuZCB0aGVuIHVzZSBTRVQgTU9E RU0iLAorIiBDQVBBQklMSVRJRVMsIFNFVCBNT0RFTSwgRElBTC1DT01NQU5ELCBhbmQgU0VUIE1P REVNIENPTU1BTkQgdG8gdGVsbCIsCisiIEtlcm1pdCBob3cgdG8gY29uZmlndXJlIGFuZCBjb250 cm9sIGl0LiIsCisKKyIgIiwKKworIlNFVCBNT0RFTSBDQVBBQklMSVRJRVMgPGxpc3Q+IiwKKyIg IFVzZSB0aGlzIGNvbW1hbmQgZm9yIGNoYW5naW5nIEtlcm1pdCdzIGlkZWEgb2YgeW91ciBtb2Rl bSdzIGNhcGFiaWxpdGllcywiLAorIiAgZm9yIGV4YW1wbGUsIGlmIHlvdXIgbW9kZW0gaXMgc3Vw cG9zZWQgdG8gaGF2ZSBidWlsdC1pbiBlcnJvciBjb3JyZWN0aW9uIiwKKyIgIGJ1dCBpbiBmYWN0 IGRvZXMgbm90LiAgQWxzbyB1c2UgdGhpcyBjb21tYW5kIHRvIGRlZmluZSB0aGUgY2FwYWJpbGl0 aWVzIiwKKyIgIG9mIGEgVVNFUi1ERUZJTkVEIG1vZGVtLiAgQ2FwYWJpbGl0aWVzIGFyZToiLAor IiAiLAorIiAgICBBVCAgICAgIEFULWNvbW1hbmRzIiwKKyIgICAgREMgICAgICBkYXRhLWNvbXBy ZXNzaW9uIiwKKyIgICAgRUMgICAgICBlcnJvci1jb3JyZWN0aW9uIiwKKyIgICAgSFdGQyAgICBo YXJkd2FyZS1mbG93IiwKKyIgICAgSVRVICAgICB2MjViaXMtY29tbWFuZHMiLAorIiAgICBTV0ZD ICAgIHNvZnR3YXJlLWZsb3ciLAorIiAgICBLUyAgICAgIGtlcm1pdC1zcG9vZiIsCisiICAgIFNC ICAgICAgc3BlZWQtYnVmZmVyaW5nIiwKKyIgICAgVEIgICAgICBUZWxlYml0IiwKKyIgIiwKKyJT RVQgTU9ERU0gQ0FSUklFUi1XQVRDSCB7IEFVVE8sIE9OLCBPRkYgfSIsCisiICBTeW5vbnltIGZv ciBTRVQgQ0FSUklFUi1XQVRDSCAocS52LikiLAorIiAiLAorIlNFVCBNT0RFTSBDT01QUkVTU0lP TiB7IE9OLCBPRkYgfSIsCisiICBFbmFibGVzL2Rpc2FibGVzIHRoZSBtb2RlbSdzIGRhdGEgY29t cHJlc3Npb24gZmVhdHVyZSwgaWYgYW55LiIsCisiICIsCisiU0VUIE1PREVNIERJQUwtQ09NTUFO RCA8dGV4dD4iLAorIiAgVGhlIHRleHQgcmVwbGFjZXMgS2VybWl0J3MgYnVpbHQtaW4gbW9kZW0g ZGlhbGluZyBjb21tYW5kLiAgSXQgbXVzdCIsCisiICBpbmNsdWRlICclcycgKHBlcmNlbnQgcykg YXMgYSBwbGFjZS1ob2xkZXIgZm9yIHRoZSB0ZWxlcGhvbmUgbnVtYmVycyIsCisiICBnaXZlbiBp biB5b3VyIERJQUwgY29tbWFuZHMuIiwKKyIgIiwKKyJTRVQgTU9ERU0gRVJST1ItQ09SUkVDVElP TiB7IE9OLCBPRkYgfSIsCisiICBFbmFibGVzL2Rpc2FibGVzIHRoZSBtb2RlbSdzIGVycm9yLWNv cnJlY3Rpb24gZmVhdHVyZSwgaWYgYW55LiIsCisiICIsCisiU0VUIE1PREVNIEVTQ0FQRS1DSEFS QUNURVIgbnVtYmVyIiwKKyIgIE51bWVyaWMgQVNDSUkgdmFsdWUgb2YgbW9kZW0ncyBlc2NhcGUg Y2hhcmFjdGVyLCBlLmcuIDQzIGZvciAnKycuIiwKKyIgIEZvciBIYXllcy1jb21wYXRpYmxlIG1v ZGVtcywgS2VybWl0IHVzZXMgdGhyZWUgY29waWVzLCBlLmcuIFwiKysrXCIuIiwKKyIgIiwKKyJT RVQgTU9ERU0gRkxPVy1DT05UUk9MIHtBVVRPLCBOT05FLCBSVFMvQ1RTLCBYT04vWE9GRn0iLAor IiAgU2VsZWN0cyB0aGUgdHlwZSBvZiBsb2NhbCBmbG93IGNvbnRyb2wgdG8gYmUgdXNlZCBieSB0 aGUgbW9kZW0uIiwKKyIgIiwKKyJTRVQgTU9ERU0gSEFOR1VQLU1FVEhPRCB7IE1PREVNLUNPTU1B TkQsIFJTMjMyLVNJR05BTCwgRFRSIH0iLAorIiAgSG93IGhhbmd1cCBvcGVyYXRpb25zIHNob3Vs ZCBiZSBkb25lLiAgTU9ERU0tQ09NTUFORCBtZWFucyB0cnkgdG8iLAorIiAgZXNjYXBlIGJhY2sg dG8gdGhlIG1vZGVtJ3MgY29tbWFuZCBwcm9jZXNzb3IgYW5kIGdpdmUgYSBtb2RlbS1zcGVjaWZp YyIsCisiICBoYW5ndXAgY29tbWFuZC4gIFJTMjMyLVNJR05BTCBtZWFucyB0dXJuIG9mZiB0aGUg RFRSIHNpZ25hbC4gIERUUiBpcyBhIiwKKyIgIHN5bm9ueW0gZm9yIFJTMjMyLVNJR05BTC4iLAor IiAiLAorIlNFVCBNT0RFTSBLRVJNSVQtU1BPT0Yge09OLCBPRkZ9IiwKKyIgIElmIHRoZSBzZWxl Y3RlZCBtb2RlbSB0eXBlIHN1cHBvcnRzIHRoZSBLZXJtaXQgcHJvdG9jb2wgZGlyZWN0bHksIiwK KyIgIHVzZSB0aGlzIGNvbW1hbmQgdG8gdHVybiBpdHMgS2VybWl0IHByb3RvY29sIGZ1bmN0aW9u IG9uIG9yIG9mZi4iLAorIiAiLAorIlNFVCBNT0RFTSBNQVhJTVVNLVNQRUVEIDxudW1iZXI+IiwK KyIgIFNwZWNpZnkgdGhlIG1heGltdW0gaW50ZXJmYWNlIHNwZWVkIGZvciB0aGUgbW9kZW0uIiwK KyIgIiwKKyJTRVQgTU9ERU0gTkFNRSA8dGV4dD4iLAorIiAgRGVzY3JpcHRpdmUgbmFtZSBmb3Ig YSBVU0VSLURFRklORUQgbW9kZW0uIiwKKyIgIiwKKyJTRVQgTU9ERU0gU1BFQUtFUiB7T04sIE9G Rn0iLAorIiAgVHVybnMgdGhlIG1vZGVtJ3Mgc3BlYWtlciBvbiBvciBvZmYgZHVyaW5nIGRpYWxp bmcuIiwKKyIgIiwKKyJTRVQgTU9ERU0gU1BFRUQtTUFUQ0hJTkcge09OLCBPRkZ9IiwKKyIgIE9O IG1lYW5zIHRoYXQgQy1LZXJtaXQgY2hhbmdlcyBpdHMgc2VyaWFsIGludGVyZmFjZSBzcGVlZCB0 byBhZ3JlZSB3aXRoIiwKKyIgIHRoZSBzcGVlZCByZXBvcnRlZCBieSB0aGUgbW9kZW0ncyBDT05O RUNUIG1lc3NhZ2UsIGlmIGFueS4gIE9GRiBtZWFucyIsCisiICBLZXJtaXQgc2hvdWxkIG5vdCBj aGFuZ2UgaXRzIGludGVyZmFjZSBzcGVlZC4iLAorIiAiLAorIlNFVCBNT0RFTSBWT0xVTUUge0xP VywgTUVESVVNLCBISUdIfSIsCisiICBTZWxlY3RzIHRoZSBkZXNpcmVkIG1vZGVtIHNwZWFrZXIg dm9sdW1lIGZvciB3aGVuIHRoZSBzcGVha2VyIGlzIE9OLiIsCisiICIsCisiU0VUIE1PREVNIENP TU1BTkQgY29tbWFuZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgYnVpbHQtaW4gbW9kZW0gY29tbWFu ZHMgZm9yIiwKKyJlYWNoIG1vZGVtIHR5cGUsIG9yIHRvIGZpbGwgaW4gY29tbWFuZHMgZm9yIHRo ZSBVU0VSLURFRklORUQgbW9kZW0gdHlwZS4iLAorIk9taXR0aW5nIHRoZSBvcHRpb25hbCBbIHRl eHQgXSByZXN0b3JlcyB0aGUgYnVpbHQtaW4gbW9kZW0tc3BlY2lmaWMgY29tbWFuZCwiLAorImlm IGFueToiLAorIiAiLAorIlNFVCBNT0RFTSBDT01NQU5EIEFVVE9BTlNXRVIge09OLCBPRkZ9IFsg dGV4dCBdIiwKKyIgIE1vZGVtIGNvbW1hbmRzIHRvIHR1cm4gYXV0b2Fuc3dlciBvbiBhbmQgb2Zm LiIsCisiICIsCisiU0VUIE1PREVNIENPTU1BTkQgQ09NUFJFU1NJT04ge09OLCBPRkZ9IFsgdGV4 dCBdIiwKKyIgIE1vZGVtIGNvbW1hbmRzIHRvIHR1cm4gZGF0YSBjb21wcmVzc2lvbiBvbiBhbmQg b2ZmLiIsCisiICIsCisiU0VUIE1PREVNIENPTU1BTkQgRVJST1ItQ09SUkVDVElPTiB7T04sIE9G Rn0gWyB0ZXh0IF0iLAorIiAgTW9kZW0gY29tbWFuZHMgdG8gdHVybiBlcnJvciBjb3JyZWN0aW9u IG9uIGFuZCBvZmYuIiwKKyIgIiwKKyJTRVQgTU9ERU0gQ09NTUFORCBIQU5HVVAgWyB0ZXh0IF0i LAorIiAgQ29tbWFuZCB0aGF0IHRlbGxzIHRoZSBtb2RlbSB0byBoYW5nIHVwIHRoZSBjb25uZWN0 aW9uLiIsCisiICIsCisiU0VUIE1PREVNIENPTU1BTkQgSUdOT1JFLURJQUxUT05FIFsgdGV4dCBd IiwKKyIgIENvbW1hbmQgdGhhdCB0ZWxscyB0aGUgbW9kZW0gbm90IHRvIHdhaXQgZm9yIGRpYWx0 b25lIGJlZm9yZSBkaWFsaW5nLiIsCisiICIsCisiU0VUIE1PREVNIENPTU1BTkQgSU5JVC1TVFJJ TkcgWyB0ZXh0IF0iLAorIiAgVGhlICd0ZXh0JyBpcyBhIHJlcGxhY2VtZW50IGZvciBDLUtlcm1p dCdzIGJ1aWx0LWluIGluaXRpYWxpemF0aW9uIGNvbW1hbmQiLAorIiAgZm9yIHRoZSBtb2RlbS4i LAorIiAiLAorIlNFVCBNT0RFTSBDT01NQU5EIFBSRURJQUwtSU5JVCBbIHRleHQgXSIsCisiICBB IHNlY29uZCBJTklULVNUUklORyB0aGF0IGlzIHRvIGJlIHNlbnQgdG8gdGhlIG1vZGVtIGp1c3Qg cHJpb3IgdG8gXAorZGlhbGluZy4iLAorIiAiLAorIlNFVCBNT0RFTSBDT01NQU5EIEhBUkRXQVJF LUZMT1cgWyB0ZXh0IF0iLAorIiAgTW9kZW0gY29tbWFuZCB0byBlbmFibGUgaGFyZHdhcmUgZmxv dyBjb250cm9sIChSVFMvQ1RTKSBpbiB0aGUgbW9kZW0uIiwKKyIgIiwKKyJTRVQgTU9ERU0gQ09N TUFORCBTT0ZUV0FSRS1GTE9XIFsgdGV4dCBdIiwKKyIgIE1vZGVtIGNvbW1hbmQgdG8gZW5hYmxl IGxvY2FsIHNvZnR3YXJlIGZsb3cgY29udHJvbCAoWG9uL1hvZmYpIGluIG1vZGVtLiIsCisiICIs CisiU0VUIE1PREVNIENPTU1BTkQgU1BFQUtFUiB7IE9OLCBPRkYgfSBbIHRleHQgXSIsCisiICBN b2RlbSBjb21tYW5kIHRvIHR1cm4gdGhlIG1vZGVtJ3Mgc3BlYWtlciBvbiBvciBvZmYuIiwKKyIg IiwKKyJTRVQgTU9ERU0gQ09NTUFORCBOTy1GTE9XLUNPTlRST0wgWyB0ZXh0IF0iLAorIiAgTW9k ZW0gY29tbWFuZCB0byBkaXNhYmxlIGxvY2FsIGZsb3cgY29udHJvbCBpbiB0aGUgbW9kZW0uIiwK KyIgIiwKKyJTRVQgTU9ERU0gQ09NTUFORCBQVUxTRSBbIHRleHQgXSIsCisiICBNb2RlbSBjb21t YW5kIHRvIHNlbGVjdCBwdWxzZSBkaWFsaW5nLiIsCisiICIsCisiU0VUIE1PREVNIENPTU1BTkQg VE9ORSBbIHRleHQgXSIsCisiICBNb2RlbSBjb21tYW5kIHRvIHNlbGVjdCB0b25lIGRpYWxpbmcu IiwKKyIgIiwKKyJTRVQgTU9ERU0gQ09NTUFORCBWT0xVTUUgeyBMT1csIE1FRElVTSwgSElHSCB9 IFsgdGV4dCBdIiwKKyIgIE1vZGVtIGNvbW1hbmQgdG8gc2V0IHRoZSBtb2RlbSdzIHNwZWFrZXIg dm9sdW1lLiIsCisiIn07CisKK3N0YXRpYyBjaGFyICpobXh5ZGlhbFtdID0geworIlRoZSBTRVQg RElBTCBjb21tYW5kIGVzdGFibGlzaGVzIG9yIGNoYW5nZXMgYWxsIHBhcmFtZXRlcnMgcmVsYXRl ZCB0byIsCisiZGlhbGluZyB0aGUgdGVsZXBob25lLiAgQWxzbyBzZWUgSEVMUCBESUFMIGFuZCBI RUxQIFNFVCBNT0RFTS4gIFVzZSBTSE9XIiwKKyJESUFMIHRvIGRpc3BsYXkgYWxsIG9mIHRoZSBT RVQgRElBTCB2YWx1ZXMuIiwKKyIgIiwKKyJTRVQgRElBTCBDT1VOVFJZLUNPREUgPG51bWJlcj4i LAorIiAgVGVsbHMgS2VybWl0IHRoZSB0ZWxlcGhvbmljIGNvdW50cnktY29kZSBvZiB0aGUgY291 bnRyeSB5b3UgYXJlIGRpYWxpbmciLAorIiAgZnJvbSwgc28gaXQgY2FuIHRlbGwgd2hldGhlciBh IHBvcnRhYmxlLWZvcm1hdCBwaG9uZSBudW1iZXIgZnJvbSB5b3VyIiwKKyIgIGRpYWxpbmcgZGly ZWN0b3J5IHdpbGwgcmVzdWx0IGluIGEgbmF0aW9uYWwgb3IgYW4gaW50ZXJuYXRpb25hbCBjYWxs LiIsCisiICBFeGFtcGxlczogMSBmb3IgVVNBLCBDYW5hZGEsIFB1ZXJ0byBSaWNvLCBldGM7IDcg Zm9yIFJ1c3NpYSwgMzkgZm9yIEl0YWx5LCIsCisiICAzNTEgZm9yIFBvcnR1Z2FsLCA0NyBmb3Ig Tm9yd2F5LCA0NCBmb3IgdGhlIFVLLCA5NzIgZm9yIElzcmFlbCwgODEgZm9yIiwKKyIgIEphcGFu LCAuLi4iLAorIiAiLAorIiAgSWYgeW91IGhhdmUgbm90IGFscmVhZHkgc2V0IHlvdXIgRElBTCBJ TlRMLVBSRUZJWCBhbmQgTEQtUFJFRklYLCB0aGVuIHRoaXMiLAorIiAgY29tbWFuZCBzZXRzIGRl ZmF1bHQgdmFsdWVzIGZvciB0aGVtOiAwMTEgYW5kIDEsIHJlc3BlY3RpdmVseSwgZm9yIGNvdW50 cnkiLAorIiAgY29kZSAxOyAwMCBhbmQgMCwgcmVzcGVjdGl2ZWx5LCBmb3IgYWxsIG90aGVyIGNv dW50cnkgY29kZXMuICBJZiB0aGVzZSBhcmUiLAorIiAgbm90IHlvdXIgdHJ1ZSBpbnRlcm5hdGlv bmFsIGFuZCBsb25nLWRpc3RhbmNlIGRpYWxpbmcgcHJlZml4ZXMsIHRoZW4geW91IiwKKyIgIHNo b3VsZCBmb2xsb3cgdGhpcyBjb21tYW5kIGJ5IERJQUwgSU5UTC1QUkVGSVggYW5kIExELVBSRUZJ WCB0byBsZXQgS2VybWl0IiwKKyIgIGtub3cgd2hhdCB0aGV5IHJlYWxseSBhcmUuIiwKKyIgIiwK KyJTRVQgRElBTCBBUkVBLUNPREUgWyA8bnVtYmVyPiBdIiwKKyIgIFRlbGxzIEtlcm1pdCB0aGUg YXJlYSBvciBjaXR5IGNvZGUgdGhhdCB5b3UgYXJlIGRpYWxpbmcgZnJvbSwgc28gaXQgY2FuIiwK KyIgIHRlbGwgd2hldGhlciBhIHBvcnRhYmxlLWZvcm1hdCBwaG9uZSBudW1iZXIgZnJvbSB0aGUg ZGlhbGluZyBkaXJlY3RvcnkgaXMiLAorIiAgbG9jYWwgb3IgbG9uZyBkaXN0YW5jZS4gIEJlIGNh cmVmdWwgbm90IHRvIGluY2x1ZGUgeW91ciBsb25nLWRpc3RhbmNlIiwKKyIgIGRpYWxpbmcgcHJl Zml4IGFzIHBhcnQgb2YgeW91ciBhcmVhIGNvZGU7IGZvciBleGFtcGxlLCB0aGUgYXJlYSBjb2Rl IGZvciIsCisiICBjZW50cmFsIExvbmRvbiBpcyAxNzEsIG5vdCAwMTcxLiIsCisiICIsCisiU0VU IERJQUwgQ09ORklSTUFUSU9OIHtPTiwgT0ZGfSIsCisiICBLZXJtaXQgZG9lcyB2YXJpb3VzIHRy YW5zZm9ybWF0aW9ucyBvbiBhIHRlbGVwaG9uZSBudW1iZXIgcmV0cmlldmVkIGZyb20iLAorIiAg dGhlIGRpYWxpbmcgZGlyZWN0b3J5IHByaW9yIHRvIGRpYWxpbmcgKHVzZSBMT09LVVAgPG5hbWU+ IHRvIHNlZSB0aGVtKS4iLAorIiAgSW4gY2FzZSB0aGUgcmVzdWx0IG1pZ2h0IGJlIHdyb25nLCB5 b3UgY2FuIHVzZSBTRVQgRElBTCBDT05GSVJNIE9OIHRvIGhhdmUiLAorIiAgS2VybWl0IGFzayB5 b3UgaWYgaXQgaXMgT0sgdG8gZGlhbCB0aGUgbnVtYmVyLCBhbmQgaWYgbm90LCB0byBsZXQgeW91 IHR5cGUiLAorIiAgaW4gYSByZXBsYWNlbWVudC4iLAorIiAiLAorIlNFVCBESUFMIENPTk5FQ1Qg eyBBVVRPLCBPTiwgT0ZGIH0iLAorIiAgV2hldGhlciB0byBDT05ORUNUIChlbnRlciB0ZXJtaW5h bCBtb2RlKSBhdXRvbWF0aWNhbGx5IGFmdGVyIHN1Y2Nlc3NmdWxseSIsCisiICBkaWFsaW5nLiAg T04gbWVhbnMgdG8gZG8gdGhpczsgT0ZGIG1lYW5zIG5vdCB0by4gIEFVVE8gKHRoZSBkZWZhdWx0 KSBtZWFucyIsCisiICBkbyBpdCBpZiB0aGUgRElBTCBjb21tYW5kIHdhcyBnaXZlbiBpbnRlcmFj dGl2ZWx5LCBidXQgZG9uJ3QgZG8gaXQgaWYgdGhlIiwKKyIgIERJQUwgY29tbWFuZCB3YXMgaXNz dWVkIGZyb20gYSBtYWNybyBvciBjb21tYW5kIGZpbGUuICBJZiB5b3Ugc3BlY2lmeSBPTiIsCisi ICBvciBBVVRPLCB5b3UgbWF5IGZvbGxvdyB0aGlzIGJ5IG9uZSBvZiB0aGUga2V5d29yZHMgVkVS Qk9TRSBvciBRVUlFVCwgdG8iLAorIiAgaW5kaWNhdGUgd2hldGhlciB0aGUgdmVyYm9zZSA0LWxp bmUgJ0Nvbm5lY3RpbmcuLi4nIG1lc3NhZ2UgaXMgdG8gYmUiLAorIiAgZGlzcGxheWVkIGlmIERJ QUwgc3VjY2VlZHMgYW5kIEtlcm1pdCBnb2VzIGludG8gQ09OTkVDVCBtb2RlLiIsCisiICIsCisi U0VUIERJQUwgQ09OVkVSVC1ESVJFQ1RPUlkge0FTSywgT04sIE9GRn0iLAorIiAgVGhlIGZvcm1h dCBvZiBLZXJtaXQncyBkaWFsaW5nIGRpcmVjdG9yeSBjaGFuZ2VkIGluIHZlcnNpb24gNUEoMTky KS4gIFRoaXMiLAorIiAgY29tbWFuZCB0ZWxscyBLZXJtaXQgd2hhdCB0byBkbyB3aGVuIGl0IGVu Y291bnRlcnMgYW4gb2xkLXN0eWxlIGRpcmVjdG9yeToiLAorIiAgQVNLIHlvdSB3aGV0aGVyIHRv IGNvbnZlcnQgaXQsIG9yIGNvbnZlcnQgaXQgYXV0b21hdGljYWxseSAoT04pLCBvciBsZWF2ZSIs CisiICBpdCBhbG9uZSAoT0ZGKS4gIE9sZC1zdHlsZSBkaXJlY3RvcmllcyBjYW4gc3RpbGwgYmUg dXNlZCB3aXRob3V0IiwKKyIgIGNvbnZlcnNpb24sIGJ1dCB0aGUgcGFyaXR5IGFuZCBzcGVlZCBm aWVsZHMgYXJlIGlnbm9yZWQuIiwKKyIgIiwKKyJTRVQgRElBTCBESVJFQ1RPUlkgWyBmaWxlbmFt ZSBbIGZpbGVuYW1lIFsgZmlsZW5hbWUgWyAuLi4gXSBdIF0gXSIsCisiICBUaGUgbmFtZShzKSBv ZiB5b3VyIGRpYWxpbmcgZGlyZWN0b3J5IGZpbGUocykuICBJZiB5b3UgZG8gbm90IHN1cHBseSBh bnkiLAorIiAgZmlsZW5hbWVzLCB0aGUgIGRpYWxpbmcgZGlyZWN0b3J5IGZlYXR1cmUgaXMgZGlz YWJsZWQgYW5kIGFsbCBudW1iZXJzIGFyZSIsCisiICBkaWFsZWQgbGl0ZXJhbGx5IGFzIGdpdmVu IGluIHRoZSBESUFMIGNvbW1hbmQuICBJZiB5b3Ugc3VwcGx5IG1vcmUgdGhhbiIsCisiICBvbmUg ZGlyZWN0b3J5LCBhbGwgb2YgdGhlbSBhcmUgc2VhcmNoZWQuIiwKKyIgIiwKKyJTRVQgRElBTCBT T1JUIHtPTiwgT0ZGfSIsCisiICBXaGVuIG11bHRpcGxlIGVudHJpZXMgYXJlIG9idGFpbmVkIGZy b20geW91ciBkaWFsaW5nIGRpcmVjdG9yeSwgdGhleSBhcmUiLAorIiAgc29ydGVkIGluIFwiY2hl YXBlc3QtZmlyc3RcIiBvcmRlci4gIElmIHRoaXMgZG9lcyBub3QgcHJvZHVjZSB0aGUgZGVzaXJl ZCIsCisiICBlZmZlY3QsIFNFVCBESUFMIFNPUlQgT0ZGIHRvIGRpc2FibGUgc29ydGluZywgYW5k IHRoZSBudW1iZXJzIHdpbGwgYmUiLAorIiAgZGlhbGVkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0 aGV5IHdlcmUgZm91bmQuIiwKKyIgIiwKKyJTRVQgRElBTCBESVNQTEFZIHtPTiwgT0ZGfSIsCisi ICBXaGV0aGVyIHRvIGRpc3BsYXkgZGlhbGluZyBwcm9ncmVzcyBvbiB0aGUgc2NyZWVuOyBkZWZh dWx0IGlzIE9GRi4iLAorIiAiLAorIlNFVCBESUFMIEhBTkdVUCB7T04sIE9GRn0iLAorIiAgV2hl dGhlciB0byBoYW5nIHVwIHRoZSBwaG9uZSBwcmlvciB0byBkaWFsaW5nOyBkZWZhdWx0IGlzIE9O LiIsCisiICIsCisiU0VUIERJQUwgSUdOT1JFLURJQUxUT05FIHtPTiwgT0ZGfSIsCisiICBXaGV0 aGVyIHRvIGlnbm9yZSBkaWFsdG9uZSB3aGVuIGRpYWxpbmc7IGRlZmF1bHQgaXMgT0ZGLiIsCisi ICIsCisjaWZuZGVmIE5PU1BMCisiU0VUIERJQUwgTUFDUk8gWyBuYW1lIF0iLAorIiAgU3BlY2lm eSB0aGUgbmFtZSBvZiBhIG1hY3JvIHRvIGV4ZWN1dGUgb24gZXZlcnkgcGhvbmUgbnVtYmVyIGRp YWxlZCwganVzdCIsCisiICBwcmlvciB0byBkaWFsaW5nIGl0LCBpbiBvcmRlciB0byBwZXJmb3Jt IGFueSBsYXN0LW1pbnV0ZSBhbHRlcmF0aW9ucy4iLAorIiAiLAorI2VuZGlmIC8qIE5PU1BMICov CisiU0VUIERJQUwgTUVUSE9EIHtBVVRPLCBERUZBVUxULCBUT05FLCBQVUxTRX0iLAorIiAgV2hl dGhlciB0byB1c2UgdGhlIG1vZGVtJ3MgREVGQVVMVCBkaWFsaW5nIG1ldGhvZCwgb3IgdG8gZm9y Y2UgVE9ORSBvciIsCisiICBQVUxTRSBkaWFsaW5nLiAgQVVUTyAodGhlIGRlZmF1bHQpIG1lYW5z IHRvIGNob29zZSB0b25lIG9yIHB1bHNlIGRpYWxpbmciLAorIiAgYmFzZWQgb24gdGhlIGNvdW50 cnkgY29kZS4gIChBbHNvIHNlZSBTRVQgRElBTCBUT05FLUNPVU5UUklFUyBhbmQgU0VUIERJQUwi LAorIiAgUFVMU0UtQ09VTlRSSUVTLikiLAorIiAiLAorIlNFVCBESUFMIFBBQ0lORyBudW1iZXIi LAorIiAgSG93IG1hbnkgbWlsbGlzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4gc2VuZGluZyBlYWNo IGNoYXJhY3RlciB0byB0aGUgbW9kZW0iLAorIiAgZGlhbGVyLiAgVGhlIGRlZmF1bHQgaXMgLTEs IG1lYW5pbmcgdG8gdXNlIHRoZSBudW1iZXIgZnJvbSB0aGUgYnVpbHQtaW4iLAorIiBtb2RlbSBk YXRhYmFzZS4iLAorIiAgIiwKKyJTRVQgRElBTCBQVUxTRS1DT1VOVFJJRVMgWyBjYyBbIGNjIFsg Li4uIF0gXSBdIiwKKyIgIFNldHMgdGhlIGxpc3Qgb2YgY291bnRyaWVzIGluIHdoaWNoIHB1bHNl IGRpYWxpbmcgaXMgcmVxdWlyZWQuICBFYWNoIGNjIiwKKyIgIGlzIGEgY291bnRyeSBjb2RlLiIs CisiICIsCisiU0VUIERJQUwgVEVTVCB7IE9OLCBPRkYgfSIsCisiICBPRkYgZm9yIG5vcm1hbCBk aWFsaW5nLiAgU2V0IHRvIE9OIHRvIHRlc3QgZGlhbGluZyBwcm9jZWR1cmVzIHdpdGhvdXQiLAor IiAgYWN0dWFsbHkgZGlhbGluZy4iLAorIiAiLAorIlNFVCBESUFMIFRPTkUtQ09VTlRSSUVTIFsg Y2MgWyBjYyBbIC4uLiBdIF0gXSIsCisiICBTZXRzIHRoZSBsaXN0IG9mIGNvdW50cmllcyBpbiB3 aGljaCB0b25lIGRpYWxpbmcgaXMgYXZhaWxhYmxlLiAgRWFjaCBjYyIsCisiICBpcyBhIGNvdW50 cnkgY29kZS4iLAorIiAiLAorIlNFVCBESUFMIFRJTUVPVVQgbnVtYmVyIiwKKyIgIEhvdyBtYW55 IHNlY29uZHMgdG8gd2FpdCBmb3IgYSBkaWFsZWQgY2FsbCB0byBjb21wbGV0ZS4gIFVzZSB0aGlz IGNvbW1hbmQiLAorIiAgdG8gb3ZlcnJpZGUgdGhlIERJQUwgY29tbWFuZCdzIGF1dG9tYXRpYyB0 aW1lb3V0IGNhbGN1bGF0aW9uLiAgQSB2YWx1ZSIsCisiICBvZiAwIHR1cm5zIG9mZiB0aGlzIGZl YXR1cmUgYW5kIHJldHVybnMgdG8gS2VybWl0J3MgYXV0b21hdGljIGRpYWwiLAorIiAgdGltZW91 dCBjYWxjdWxhdGlvbi4iLAorIiAiLAorIlNFVCBESUFMIFJFU1RSSUNUIHsgSU5URVJOQVRJT05B TCwgTE9DQUwsIExPTkctRElTVEFOQ0UsIE5PTkUgfSIsCisiICBQcmV2ZW50cyBwbGFjaW5nIGNh bGxzIG9mIHRoZSB0eXBlIGluZGljYXRlZCwgb3IgZ3JlYXRlci4gIEZvciBleGFtcGxlIiwKKyIg IFNFVCBESUFMIFJFU1RSSUNUIExPTkcgcHJldmVudHMgcGxhY2luZyBvZiBsb25nLWRpc3RhbmNl IGFuZCBpbnRlcm5hdGlvbmFsIiwKKyIgIGNhbGxzLiAgSWYgdGhpcyBjb21tYW5kIGlzIG5vdCBn aXZlbiwgdGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucy4gIFVzZWZ1bCIsCisiICB3aGVuIGRpYWxp bmcgYSBsaXN0IG9mIG51bWJlcnMgZmV0Y2hlZCBmcm9tIGEgZGlhbGluZyBkaXJlY3RvcnkuIiwK KyIgIiwKKyJTRVQgRElBTCBSRVRSSUVTIDxudW1iZXI+IiwKKyIgIEhvdyBtYW55IHRpbWVzIHRv IHJlZGlhbCBlYWNoIG51bWJlciBpZiB0aGUgZGlhbGluZyByZXN1bHQgaXMgYnVzeSBvciBubyIs CisiICBubyBhbnN3ZXIsIHVudGlsIHRoZSBjYWxsIGlzIHN1Y2Nlc3NmdWxseSBhbnN3ZXJlZC4g IFRoZSBkZWZhdWx0IGlzIDAiLAorIiAgYmVjYXVzZSBhdXRvbWF0aWMgcmVkaWFsaW5nIGlzIGls bGVnYWwgaW4gc29tZSBjb3VudHJpZXMuIiwKKyIgIiwKKyJTRVQgRElBTCBJTlRFUlZBTCA8bnVt YmVyPiIsCisiICBIb3cgbWFueSBzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4gYXV0b21hdGljIHJl ZGlhbCBhdHRlbXB0czsgZGVmYXVsdCAxMC4iLAorIiAiLAorIlRoZSBmb2xsb3dpbmcgY29tbWFu ZHMgYXBwbHkgdG8gYWxsIHBob25lIG51bWJlcnMsIHdoZXRoZXIgZ2l2ZW4gbGl0ZXJhbGx5IiwK KyJvciBmb3VuZCBpbiB0aGUgZGlhbGluZyBkaXJlY3Rvcnk6IiwKKyIgIiwKKyJTRVQgRElBTCBQ UkVGSVggWyB0ZXh0IF0iLAorIiAgRXN0YWJsaXNoIGEgcHJlZml4IHRvIGJlIGFwcGxpZWQgdG8g YWxsIHBob25lIG51bWJlcnMgdGhhdCBhcmUgZGlhbGVkLCIsCisiICBmb3IgZXhhbXBsZSB0byBk aXNhYmxlIGNhbGwgd2FpdGluZy4iLAorIiAiLAorIlNFVCBESUFMIFNVRkZJWCBbIHRleHQgXSIs CisiICBFc3RhYmxpc2ggYSBzdWZmaXggdG8gYmUgYWRkZWQgYWZ0ZXIgYWxsIHBob25lIG51bWJl cnMgdGhhdCBhcmUgZGlhbGVkLiIsCisiICIsCisiVGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcHBs eSBvbmx5IHRvIHBvcnRhYmxlLWZvcm1hdCBudW1iZXJzIG9idGFpbmVkIGZyb20iLAorInRoZSBk aWFsaW5nIGRpcmVjdG9yeTsgaS5lLiBudW1iZXJzIHRoYXQgc3RhcnQgd2l0aCBhIFwiK1wiIHNp Z24gYW5kIiwKKyJjb3VudHJ5IGNvZGUsIGZvbGxvd2VkIGJ5IGFyZWEgY29kZSBpbiBwYXJlbnRo ZXNlcywgZm9sbG93ZWQgYnkgdGhlIHBob25lIiwKKyJudW1iZXIuIiwKKyIgIiwKKyJTRVQgRElB TCBMQy1BUkVBLUNPREVTIFsgPGxpc3Q+IF0iLAorIiAgU3BlY2llcyBhIGxpc3Qgb2YgYXJlYSBj b2RlcyB0byB3aGljaCBkaWFsaW5nIGlzIGxvY2FsLCBpLmUuIGRvZXMgbm90IiwKKyIgIHJlcXVp cmUgdGhlIExELVBSRUZJWC4gIFVwIHRvIDMyIGFyZWEgY29kZXMgbWF5IGJlIGxpc3RlZCwgc2Vw YXJhdGVkIGJ5IiwKKyIgIHNwYWNlcy4gIEFueSBhcmVhIGNvZGVzIGluIHRoaXMgbGlzdCB3aWxs IGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBkaWFsIiwKKyIgIHN0cmluZyBzbyBkbyBub3QgaW5j bHVkZSB5b3VyIG93biBhcmVhIGNvZGUgaWYgaXQgc2hvdWxkIG5vdCBiZSBkaWFsZWQuIiwKKyIg IiwKKyJTRVQgRElBTCBMQy1QUkVGSVggWyA8dGV4dD4gXSIsCisiICBTcGVjaWZpZXMgYSBwcmVm aXggdG8gYmUgYXBwbGllZCB0byBsb2NhbCBjYWxscyBtYWRlIGZyb20gcG9ydGFibGUgZGlhbGlu ZyIsCisiICBkaXJlY3RvcnkgZW50cmllcy4gIE5vcm1hbGx5IG5vIHByZWZpeCBpcyB1c2VkIGZv ciBsb2NhbCBjYWxscy4iLAorIiAiLAorIlNFVCBESUFMIExDLVNVRkZJWCBbIDx0ZXh0PiBdIiwK KyIgIFNwZWNpZmllcyBhIHN1ZmZpeCB0byBiZSBhcHBsaWVkIHRvIGxvY2FsIGNhbGxzIG1hZGUg ZnJvbSBwb3J0YWJsZSBkaWFsaW5nIiwKKyIgIGRpcmVjdG9yeSBlbnRyaWVzLiAgTm9ybWFsbHkg bm8gc3VmZml4IGlzIHVzZWQgZm9yIGxvY2FsIGNhbGxzLiIsCisiICIsCisiU0VUIERJQUwgTEQt UFJFRklYIFsgPHRleHQ+IF0iLAorIiAgWW91ciBsb25nLWRpc3RhbmNlIGRpYWxpbmcgcHJlZml4 LCB0byBiZSB1c2VkIHdpdGggcG9ydGFibGUgZGlhbGluZyIsCisiICBkaXJlY3RvcnkgZW50cmll cyB0aGF0IHJlc3VsdCBpbiBsb25nLWRpc3RhbmNlIGNhbGxzLiIsCisiICIsCisiU0VUIERJQUwg TEQtU1VGRklYIFsgPHRleHQ+IF0iLAorIiAgTG9uZy1kaXN0YW5jZSBkaWFsaW5nIHN1ZmZpeCwg aWYgYW55LCB0byBiZSB1c2VkIHdpdGggcG9ydGFibGUgZGlhbGluZyIsCisiICBkaXJlY3Rvcnkg ZW50cmllcyB0aGF0IHJlc3VsdCBpbiBsb25nLWRpc3RhbmNlIGNhbGxzLiAgVGhpcyB3b3VsZCBu b3JtYWxseSIsCisiICBiZSB1c2VkIGZvciBhcHBlbmRpbmcgYSBjYWxsaW5nLWNhcmQgbnVtYmVy IHRvIHRoZSBwaG9uZSBudW1iZXIuIiwKKyIgIiwKKyJTRVQgRElBTCBGT1JDRS1MT05HLURJU1RB TkNFIHsgT04sIE9GRiB9IiwKKyIgIFdoZXRoZXIgdG8gZm9yY2UgbG9uZy1kaXN0YW5jZSBkaWFs aW5nIGZvciBjYWxscyB0aGF0IG5vcm1hbGx5IHdvdWxkIGJlIiwKKyIgIGxvY2FsLiAgRm9yIHVz ZSAoZS5nLikgaW4gRnJhbmNlLiIsCisiICIsCisiU0VUIERJQUwgVE9MTC1GUkVFLUFSRUEtQ09E RSBbIDxudW1iZXI+IFsgPG51bWJlcj4gWyAuLi4gXSBdIF0iLAorIiAgVGVsbHMgS2VybWl0IHRo ZSB0b2xsLWZyZWUgYXJlYSBjb2RlKHMpIGluIHlvdXIgY291bnRyeS4iLAorIiAiLAorIlNFVCBE SUFMIFRPTEwtRlJFRS1QUkVGSVggWyA8dGV4dD4gXSIsCisiICBZb3UgdG9sbC1mcmVlIGRpYWxp bmcgcHJlZml4LCBpbiBjYXNlIGl0IGlzIGRpZmZlcmVudCBmcm9tIHlvdXIgbG9uZy0iLAorIiAg ZGlzdGFuY2UgZGlhbGluZyBwcmVmaXguIiwKKyIgIiwKKyJTRVQgRElBTCBJTlRMLVBSRUZJWCA8 dGV4dD4iLAorIiAgWW91ciBpbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4LCB0byBiZSB1c2Vk IHdpdGggcG9ydGFibGUgZGlhbGluZyIsCisiICBkaXJlY3RvcnkgZW50cmllcyB0aGF0IHJlc3Vs dCBpbiBpbnRlcm5hdGlvbmFsIGNhbGxzLiIsCisiICIsCisiU0VUIERJQUwgSU5UTC1TVUZGSVgg PHRleHQ+IiwKKyIgIEludGVybmF0aW9uYWwgZGlhbGluZyBzdWZmaXgsIGlmIGFueSwgdG8gYmUg dXNlZCB3aXRoIHBvcnRhYmxlIGRpYWxpbmciLAorIiAgZGlyZWN0b3J5IGVudHJpZXMgdGhhdCBy ZXN1bHQgaW4gaW50ZXJuYXRpb25hbCBjYWxscy4iLAorIiAiLAorIlNFVCBESUFMIFBCWC1PVVRT SURFLVBSRUZJWCA8dGV4dD4iLAorIiAgVXNlIHRoaXMgdG8gdGVsbCBLZXJtaXQgaG93IHRvIGdl dCBhbiBvdXRzaWRlIGxpbmUgd2hlbiBkaWFsaW5nIGZyb20gYSIsCisiICBQcml2YXRlIEJyYW5j aCBFeGNoYW5nZSAoUEJYKS4iLAorIiAiLAorIlNFVCBESUFMIFBCWC1FWENIQU5HRSA8dGV4dD4g WyA8dGV4dD4gWyAuLi4gXSBdIiwKKyIgIElmIFBCWC1PVVRTSURFLVBSRUZJWCBpcyBzZXQsIHRo ZW4geW91IGNhbiB1c2UgdGhpcyBjb21tYW5kIHRvIHRlbGwgS2VybWl0IiwKKyIgIHRoZSBsZWFk aW5nIGRpZ2l0cyBvZiBvbmUgb3IgbW9yZSBsb2NhbCBwaG9uZSBudW1iZXJzIHRoYXQgaWRlbnRp ZnkgaXQgYXMiLAorIiAgYmVpbmcgb24geW91ciBQQlgsIHNvIGl0IGNhbiBtYWtlIGFuIGludGVy bmFsIGNhbGwgYnkgZGVsZXRpbmcgdGhvc2UgZGlnaXRzIgorLAorIiAgZnJvbSB0aGUgcGhvbmUg bnVtYmVyLiIsCisiICIsCisiU0VUIERJQUwgUEJYLUlOVEVSTkFMLVBSRUZJWCA8dGV4dD4iLAor IiAgSWYgUEJYLUVYQ0hBTkdFIGlzIHNldCwgYW5kIEtlcm1pdCBkZXRlcm1pbmVzIGZyb20gaXQg dGhhdCBhIGNhbGwgaXMiLAorIiAgaW50ZXJuYWwsIHRoZW4gdGhpcyBwcmVmaXgsIGlmIGFueSwg aXMgYWRkZWQgdG8gdGhlIG51bWJlciBwcmlvciB0byIsCisiICBcCitkaWFsaW5nLiAgVXNlIHRo aXMgaWYgaW50ZXJuYWwgY2FsbHMgZnJvbSB5b3VyIFBCWCByZXF1aXJlIGEgc3BlY2lhbCBwcmVm aXguIiwKKyIiIH07CisjZW5kaWYgLyogTk9ESUFMICovCisKK3N0YXRpYyBjaGFyICpobXh5Zmxv W10gPSB7ICJTeW50YXg6IFNFVCBGTE9XIFsgc3dpdGNoIF0gdmFsdWUiLAorIiAiLAorI2lmbmRl ZiBOT0xPQ0FMCisiICBTZWxlY3RzIHRoZSB0eXBlIG9mIGZsb3cgY29udHJvbCB0byB1c2UgZHVy aW5nIGZpbGUgdHJhbnNmZXIsIHRlcm1pbmFsIiwKKyIgIGNvbm5lY3Rpb24sIGFuZCBzY3JpcHQg ZXhlY3V0aW9uLiIsCisjZWxzZQorIiAgU2VsZWN0cyB0aGUgdHlwZSBvZiBmbG93IGNvbnRyb2wg dG8gdXNlIGR1cmluZyBmaWxlIHRyYW5zZmVyLiIsCisjZW5kaWYgLyogTk9MT0NBTCAqLworIiAi LAorIiAgU3dpdGNoZXMgbGV0IHlvdSBhc3NvY2lhdGUgYSBwYXJ0aWN1bGFyIGtpbmQgb2YgZmxv dyBjb250cm9sIHdpdGggZWFjaCIsCisiICBraW5kIG9mIGNvbm5lY3Rpb246IC9SRU1PVEUsIC9N T0RFTSwgL0RJUkVDVC1TRVJJQUwsIC9UQ1BJUCwgZXRjOyB0eXBlIiwKKyIgIFwic2V0IGZsb3cg P1wiIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIHN3aXRjaGVzLiAgVGhlbiB3aGVuZXZlciB5b3Ug bWFrZSIsCisiICBhIGNvbm5lY3Rpb24sIHRoZSBhc3NvY2lhdGVkIGZsb3ctY29udHJvbCBpcyBj aG9zZW4gYXV0b21hdGljYWxseS4iLAorIiAgVGhlIGZsb3ctY29udHJvbCB2YWx1ZXMgYXJlIE5P TkUsIEtFRVAsIFhPTi9YT0ZGLCBhbmQgcG9zc2libHkgUlRTL0NUUyIsCisiICBhbmQgc29tZSBv dGhlcnM7IGFnYWluLCB0eXBlIFwic2V0IGZsb3cgP1wiIGZvciBhIGxpc3QuICBLRUVQIHRlbGxz IEtlcm1pdCIsCisiICBub3QgdG8gdHJ5IHRvIGNoYW5nZSB0aGUgY3VycmVudCBmbG93LWNvbnRy b2wgbWV0aG9kIGZvciB0aGUgY29ubmVjdGlvbi4iLAorIiAiLAorIiAgSWYgeW91IG9taXQgdGhl IHN3aXRjaCBhbmQgc2ltcGx5IHN1cHBseSBhIHZhbHVlLCB0aGlzIHZhbHVlIGJlY29tZXMgdGhl IiwKKyIgIGN1cnJlbnQgZmxvdyBjb250cm9sIHR5cGUsIG92ZXJyaWRpbmcgYW55IGRlZmF1bHQg dmFsdWUgdGhhdCBtaWdodCBoYXZlIiwKKyIgIGJlZW4gY2hvc2VuIGluIHlvdXIgbW9zdCByZWNl bnQgU0VUIExJTkUsIFNFVCBQT1JULCBvciBTRVQgSE9TVCwgb3Igb3RoZXIiLAorIiAgY29ubmVj dGlvbi1lc3RhYmxpc2htZW50IGNvbW1hbmQuIiwKKyIgIiwKKyIgIFR5cGUgU0hPVyBGTE9XLUNP TlRST0wgdG8gc2VlIHRoZSBjdXJyZW50IGRlZmF1bHRzIGZvciBlYWNoIGNvbm5lY3Rpb24gdHlw ZSIKKywKKyIgIGFzIHdlbGwgYXMgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiB0eXBlIGFuZCBmbG93 LWNvbnRyb2wgc2V0dGluZy4gIFNIT1ciLAorIiAgQ09NTVVOSUNBVElPTlMgYWxzbyBzaG93cyB0 aGUgY3VycmVudCBmbG93LWNvbnRyb2wgc2V0dGluZy4iLAorIiJ9OworCitzdGF0aWMgY2hhciAq aG14eWZbXSA9IHsKKyJTeW50YXg6IFNFVCBGSUxFIHBhcmFtZXRlciB2YWx1ZSIsCisiICIsCisi U2V0cyBmaWxlLXJlbGF0ZWQgcGFyYW1ldGVycy4gIFVzZSBTSE9XIEZJTEUgdG8gdmlldyB0aGVt LiAgQWxzbyBzZWUgU0VUIiwKKyIoYW5kIFNIT1cpIFRSQU5TRkVSIGFuZCBQUk9UT0NPTC4iLAor IiAiLAorI2lmZGVmIFZNUworIlNFVCBGSUxFIFRZUEUgeyBURVhULCBCSU5BUlksIElNQUdFLCBM QUJFTEVEIH0iLAorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisiU0VUIEZJTEUgVFlQRSB7IFRFWFQs IEJJTkFSWSwgTEFCRUxFRCB9IiwKKyNlbHNlCisjaWZkZWYgTUFDCisiU0VUIEZJTEUgVFlQRSB7 IFRFWFQsIEJJTkFSWSwgTUFDQklOQVJZIH0iLAorI2Vsc2UKKyJTRVQgRklMRSBUWVBFIHsgVEVY VCwgQklOQVJZIH0iLAorI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyIgIEhvdyBmaWxlIGNvbnRlbnRzIGFyZSB0byBiZSB0cmVhdGVkIGR1 cmluZyBmaWxlIHRyYW5zZmVyIGluIHRoZSBhYnNlbmNlIiwKKyIgIG9mIGFueSBvdGhlciBpbmRp Y2F0aW9uLiAgVFlQRSBjYW4gYmUgVEVYVCBmb3IgY29udmVyc2lvbiBvZiByZWNvcmQgZm9ybWF0 IiwKKyIgIGFuZCBjaGFyYWN0ZXIgc2V0LCB3aGljaCBpcyB1c3VhbGx5IG5lZWRlZCB3aGVuIHRy YW5zZmVycmluZyB0ZXh0IGZpbGVzIiwKKyIgIGJldHdlZW4gdW5saWtlIHBsYXRmb3JtcyAoc3Vj aCBhcyBVTklYIGFuZCBXaW5kb3dzKSwgb3IgQklOQVJZIGZvciBubyIsCisiICBjb252ZXJzaW9u IGlmIFRSQU5TRkVSIE1PREUgaXMgTUFOVUFMLCB3aGljaCBpcyBub3QgdGhlIGRlZmF1bHQuICBV c2UiLAorIiAgQklOQVJZIHdpdGggVFJBTlNGRVIgTU9ERSBNQU5VQUwgZm9yIGV4ZWN1dGFibGUg cHJvZ3JhbXMgb3IgYmluYXJ5IGRhdGEgb3IiLAorIiAgd2hlbmV2ZXIgeW91IHdpc2ggdG8gZHVw bGljYXRlIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiB0aGUgZmlsZSwgYnl0ZSBmb3IiCissCisi ICBieXRlLiAgSW4gbW9zdCBtb2Rlcm4gS2VybWl0IHByb2dyYW1zLCB0aGUgZmlsZSBzZW5kZXIg aW5mb3JtcyB0aGUgcmVjZWl2ZXIiCissCisiICBvZiB0aGUgZmlsZSB0eXBlIGF1dG9tYXRpY2Fs bHkuICBIb3dldmVyLCB3aGVuIHNlbmRpbmcgZmlsZXMgZnJvbSBDLUtlcm1pdCIsCisiICB0byBh biBhbmNpZW50IG9yIG5vbi1Db2x1bWJpYSBLZXJtaXQgaW1wbGVtZW50YXRpb24sIHlvdSBtaWdo dCBuZWVkIHRvIHNldCIsCisiICB0aGUgY29ycmVzcG9uZGluZyBmaWxlIHR5cGUgYXQgdGhlIHJl Y2VpdmVyIGFzIHdlbGwuIiwKKyIgIiwKKyNpZmRlZiBWTVMKKyIgIEZJTEUgVFlQRSBzZXR0aW5n cyBvZiBURVhUIGFuZCBCSU5BUlkgaGF2ZSBubyBlZmZlY3Qgd2hlbiBzZW5kaW5nIGZpbGVzLCIs CisiICBzaW5jZSBWTVMgQy1LZXJtaXQgZGV0ZXJtaW5lcyBlYWNoIGZpbGUncyB0eXBlIGF1dG9t YXRpY2FsbHkgZnJvbSBpdHMiLAorIiAgcmVjb3JkIGZvcm1hdDogYmluYXJ5IGZvciBmaXhlZCwg dGV4dCBmb3Igb3RoZXJzLiAgRm9yIGluY29taW5nIGZpbGVzLCIsCisiICB0aGVzZSBzZXR0aW5n cyBhcmUgZWZmZWN0aXZlIG9ubHkgaW4gdGhlIGFic2VuY2Ugb2YgYSBmaWxlLXR5cGUgaW5kaWNh dGlvbiIsCisiICBmcm9tIHRoZSBzZW5kZXIuIiwKKyIgIiwKKyIgIFlvdSBtYXkgaW5jbHVkZSBh biBvcHRpb25hbCByZWNvcmQtZm9ybWF0IGFmdGVyIHRoZSB3b3JkIEJJTkFSWS4gIFRoaXMgbWF5 IiwKKyIgIGJlIEZJWEVEICh0aGUgZGVmYXVsdCkgb3IgVU5ERUZJTkVELiAgVU5ERUZJTkVEIGlz IHVzZWQgd2hlbiB5b3UgbmVlZCB0byIsCisiICByZWNlaXZlIGJpbmFyeSBmaWxlcyBpbiBiaW5h cnkgbW9kZSBhbmQgaGF2ZSB0aGVtIHN0b3JlZCB3aXRoIFVOREVGSU5FRCIsCisiICByZWNvcmQg Zm9ybWF0LCB3aGljaCBpcyByZXF1aXJlZCBieSBjZXJ0YWluIFZNUyBhcHBsaWNhdGlvbnMuIiwK KyIgIiwKKyIgIFR3byBhZGRpdGlvbmFsIFZNUyBmaWxlIHR5cGVzIGFyZSBhbHNvIHN1cHBvcnRl ZDogSU1BR0UgYW5kIExBQkVMRUQuIiwKKyIgIElNQUdFIG1lYW5zIHJhdyBibG9jayBpL28sIG5v IGludGVyZmVyZW5jZSBmcm9tIFJNUywgYXBwbGllcyB0byBmaWxlIiwKKyIgIHRyYW5zbWlzc2lv biBvbmx5LCBhbmQgb3ZlcnJpZGVzIHRoZSBub3JtYWwgYXV0b21hdGljYSBmaWxlIHR5cGUiLAor IiAgZGV0ZXJtaW5hdGlvbi4gICBMQUJFTEVEIG1lYW5zIHRvIHNlbmQgb3IgaW50ZXJwcmV0IFJN UyBhdHRyaWJ1dGVzIiwKKyIgIHdpdGggdGhlIGZpbGUuIiwKKyIgIiwKKyNlbHNlCisiICBXaGVu IFRSQU5TRkVSIE1PREUgaXMgQVVUT01BVElDIChhcyBpdCBpcyBieSBkZWZhdWx0KSwgdmFyaW91 cyBhdXRvbWF0aWMiLAorIiAgbWV0aG9kcyAoZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSkgYXJl IHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIiwKKyIgIGlzIHRyYW5zZmVycmVkIGlu IHRleHQgb3IgYmluYXJ5IG1vZGU7IHRoZXNlIG1ldGhvZHMgKHdoaWNoIG1pZ2h0IGluY2x1ZGUi LAorIiAgY29udGVudCBzY2FuIChzZWUgU0VUIEZJTEUgU0NBTiBiZWxvdyksIGZpbGVuYW1lIHBh dHRlcm4gbWF0Y2hpbmcgKFNFVCBGSUxFIgorLAorIiAgUEFUVEVSTlMpLCBjbGllbnQvc2VydmVy IFwia2luZHJlZC1zcGlyaXRcIiByZWNvZ25pdGlvbiwgb3Igc291cmNlIGZpbGUiLAorIiAgcmVj b3JkIGZvcm1hdCkgc3VwZXJzZWRlIHRoZSBGSUxFIFRZUEUgc2V0dGluZyBidXQgY2FuLCB0aGVt c2VsdmVzLCBiZSIsCisiICBzdXBlcnNlZGVkIGJ5IGluY2x1ZGluZyBhIC9CSU5BUlkgb3IgL1RF WFQgc3dpdGNoIGluIHRoZSBTRU5ELCBHRVQsIG9yIiwKKyIgIFJFQ0VJVkUgY29tbWFuZC4iLAor IiAiLAorIiAgV2hlbiBUUkFOU0ZFUiBNT0RFIGlzIE1BTlVBTCwgdGhlIGF1dG9tYXRpYyBtZXRo b2RzIGFyZSBza2lwcGVkIGZvciBzZW5kaW5nIgorLAorIiAgZmlsZXM7IHRoZSBGSUxFIFRZUEUg c2V0dGluZyBpcyB1c2VkIGluc3RlYWQsIHdoaWNoIGNhbiBiZSBzdXBlcnNlZGVkIG9uIiwKKyIg IGEgcGVyLWNvbW1hbmQgYmFzaXMgd2l0aCBhIC9URVhUIG9yIC9CSU5BUlkgc3dpdGNoLiIsCisj ZW5kaWYgLyogVk1TICovCisiICIsCisKKyNpZm5kZWYgTk9YRkVSCisKKyJTRVQgRklMRSBCWVRF U0laRSB7IDcsIDggfSIsCisiICBOb3JtYWxseSA4LiAgSWYgNywgS2VybWl0IHRydW5jYXRlcyB0 aGUgOHRoIGJpdCBvZiBhbGwgZmlsZSBieXRlcy4iLAorIiAiLAorI2lmbmRlZiBOT0NTRVRTCisi U0VUIEZJTEUgQ0hBUkFDVEVSLVNFVCBuYW1lIiwKKyIgIFRlbGxzIHRoZSBlbmNvZGluZyBvZiB0 aGUgbG9jYWwgZmlsZSwgQVNDSUkgYnkgZGVmYXVsdC4iLAorIiAgVGhlIG5hbWVzIElUQUxJQU4s IFBPUlRVR1VFU0UsIE5PUldFR0lBTiwgZXRjLCByZWZlciB0byA3LWJpdCBJU08tNjQ2IiwKKyIg IG5hdGlvbmFsIGNoYXJhY3RlciBzZXRzLiAgTEFUSU4xIGlzIHRoZSA4LWJpdCBJU08gODg1OS0x IExhdGluIEFscGhhYmV0IDEiLAorIiAgZm9yIFdlc3Rlcm4gRXVyb3BlYW4gbGFuZ3VhZ2VzLiIs CisiICBORVhUIGlzIHRoZSA4LWJpdCBjaGFyYWN0ZXIgc2V0IG9mIHRoZSBOZVhUIHdvcmtzdGF0 aW9uLiIsCisiICBUaGUgQ1Bubm4gc2V0cyBhcmUgZm9yIFBDcy4gIE1BQ0lOVE9TSC1MQVRJTiBp cyBmb3IgdGhlIE1hY2ludG9zaC4iLAorI2lmbmRlZiBOT0xBVElOMgorIiAgTEFUSU4yIGlzIElT TyA4ODU5LTIgZm9yIEVhc3Rlcm4gRXVyb3BlYW4gbGFuZ3VhZ2VzIHRoYXQgYXJlIHdyaXR0ZW4g d2l0aCIsCisiICBSb21hbiBsZXR0ZXJzLiAgTWF6b3ZpYSBpcyBhIFBDIGNvZGUgcGFnZSB1c2Vk IGluIFBvbGFuZC4iLAorI2VuZGlmIC8qIE5PTEFUSU4yICovCisjaWZkZWYgQ1lSSUxMSUMKKyIg IEtPSS1DWVJJTExJQywgQ1lSSUxMSUMtSVNPLCBhbmQgQ1A4NjYgYXJlIDgtYml0IEN5cmlsbGlj IGNoYXJhY3RlciBzZXRzLiIsCisiICBTSE9SVC1LT0kgaXMgYSA3LWJpdCBBU0NJSSBjb2Rpbmcg Zm9yIEN5cmlsbGljLiAgQlVMR0FSSUEtUEMgaXMgYSBQQyBjb2RlIiwKKyIgIHBhZ2UgdXNlZCBp biBCdWxnYXJpYSIsCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyNpZmRlZiBIRUJSRVcKKyIgIEhF QlJFVy1JU08gaXMgSVNPIDg4NTktOCBMYXRpbi9IZWJyZXcuICBDUDg2MiBpcyB0aGUgSGVicmV3 IFBDIGNvZGUgcGFnZS4iLAorIiAgSEVCUkVXLTcgaXMgbGlrZSBBU0NJSSB3aXRoIHRoZSBsb3dl cmNhc2UgbGV0dGVycyByZXBsYWNlZCBieSBIZWJyZXcuIiwKKyNlbmRpZiAvKiBIRUJSRVcgKi8K KyNpZmRlZiBHUkVFSworIiAgR1JFRUstSVNPIGlzIElTTyA4ODU5LTcgTGF0aW4vR3JlZWsuICBD UDg2OSBpcyB0aGUgR3JlZWsgUEMgY29kZSBwYWdlLiIsCisiICBFTE9ULTkyNyBpcyBsaWtlIEFT Q0lJIHdpdGggdGhlIGxvd2VyY2FzZSBsZXR0ZXJzIHJlcGxhY2VkIGJ5IEdyZWVrLiIsCisjZW5k aWYgLyogR1JFRUsgKi8KKyNpZmRlZiBLQU5KSQorIiAgSkFQQU5FU0UtRVVDLCBKSVM3LUtBTkpJ LCBERUMtS0FOSkksIGFuZCBTSElGVC1KSVMtS0FOSkkgYXJlIEphcGFuZXNlIiwKKyIgIEthbmpp IGNoYXJhY3RlciBzZXRzLiIsCisjZW5kaWYgLyogS0FOSkkgKi8KKyNpZmRlZiBVTklDT0RFCisi ICBVQ1MtMiBpcyB0aGUgMi1ieXRlIGZvcm0gb2YgdGhlIFVuaXZlcnNhbCBDaGFyYWN0ZXIgU2V0 LiIsCisiICBVVEYtOCBpcyB0aGUgc2VyaWFsaXplZCBmb3JtIG9mIHRoZSBVbml2ZXJzYWwgQ2hh cmFjdGVyIFNldC4iLAorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyIgIFR5cGUgU0VUIEZJTEUgQ0hB UiA/IGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgZmlsZSBjaGFyYWN0ZXIgc2V0cy4iLAorIiAiLAor IlNFVCBGSUxFIERFRkFVTFQgN0JJVC1DSEFSQUNURVItU0VUIiwKKyIgIFdoZW4gYXV0b21hdGlj YWxseSBzd2l0Y2hpbmcgYW1vbmcgZGlmZmVyZW50IGtpbmRzIG9mIGZpbGVzIHdoaWxlIHNlbmRp bmciLAorIiAgdGhpcyB0ZWxscyB0aGUgY2hhcmFjdGVyIHNldCB0byBiZSB1c2VkIGZvciA3LWJp dCB0ZXh0IGZpbGVzLiIsCisiICIsCisiU0VUIEZJTEUgREVGQVVMVCA4QklULUNIQVJBQ1RFUi1T RVQiLAorIiAgVGhpcyB0ZWxscyB0aGUgY2hhcmFjdGVyIHNldCB0byBiZSB1c2VkIGZvciA4LWJp dCB0ZXh0IGZpbGVzIHdoZW4iLAorIiAgc3dpdGNoaW5nIGF1dG9tYXRpY2FsbHkgYW1vbmcgZGlm ZmVyZW50IGtpbmRzIG9mIGZpbGVzLiIsCisiICIsCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisi U0VUIEZJTEUgQ09MTElTSU9OIG9wdGlvbiIsCisiICBUZWxscyB3aGF0IHRvIGRvIHdoZW4gYSBm aWxlIGFycml2ZXMgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyIsCisiICBhbiBleGlzdGluZyBm aWxlLiAgVGhlIG9wdGlvbnMgYXJlOiIsCisiICAgQkFDS1VQIChkZWZhdWx0KSAtIFJlbmFtZSB0 aGUgb2xkIGZpbGUgdG8gYSBuZXcsIHVuaXF1ZSBuYW1lIGFuZCBzdG9yZSIsCisiICAgICB0aGUg aW5jb21pbmcgZmlsZSB1bmRlciB0aGUgbmFtZSBpdCB3YXMgc2VudCB3aXRoLiIsCisiICAgT1ZF UldSSVRFIC0gT3ZlcndyaXRlIChyZXBsYWNlKSB0aGUgZXhpc3RpbmcgZmlsZS4iLAorIiAgIEFQ UEVORCAtIEFwcGVuZCB0aGUgaW5jb21pbmcgZmlsZSB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGlu ZyBmaWxlLiIsCisiICAgUkVKRUNUIC0gUmVmdXNlIGFuZC9vciBkaXNjYXJkIHRoZSBpbmNvbWlu ZyBmaWxlICg9IERJU0NBUkQpLiIsCisiICAgUkVOQU1FIC0gR2l2ZSB0aGUgaW5jb21pbmcgZmls ZSBhIHVuaXF1ZSBuYW1lLiIsCisiICAgVVBEQVRFIC0gQWNjZXB0IHRoZSBpbmNvbWluZyBmaWxl IG9ubHkgaWYgbmV3ZXIgdGhhbiB0aGUgZXhpc3RpbmcgZmlsZS4iLAorIiAiLAorCisiU0VUIEZJ TEUgREVTVElOQVRJT04geyBESVNLLCBQUklOVEVSLCBTQ1JFRU4sIE5PV0hFUkUgfSIsCisiICBE SVNLIChkZWZhdWx0KTogU3RvcmUgaW5jb21pbmcgZmlsZXMgb24gZGlzay4iLAorIiAgUFJJTlRF UjogICAgICAgIFNlbmQgaW5jb21pbmcgZmlsZXMgdG8gU0VUIFBSSU5URVIgZGV2aWNlLiIsCisi ICBTQ1JFRU46ICAgICAgICAgRGlzcGxheSBpbmNvbWluZyBmaWxlcyBvbiBzY3JlZW4gKGxvY2Fs IG1vZGUgb25seSkuIiwKKyIgIE5PV0hFUkU6ICAgICAgICBEbyBub3QgcHV0IGluY29taW5nIGZp bGVzIGFueXdoZXJlICh1c2UgZm9yIGNhbGlicmF0aW9uKS4iLAorIiAiLAorIlNFVCBGSUxFIERJ U1BMQVkgb3B0aW9uIiwKKyIgIFNlbGVjdHMgdGhlIGZvcm1hdCBvZiB0aGUgZmlsZSB0cmFuc2Zl ciBkaXNwbGF5IGZvciBsb2NhbC1tb2RlIGZpbGUiLAorIiAgdHJhbnNmZXIuICBUaGUgY2hvaWNl cyBhcmU6IiwKKyIgIiwKKyIgIEJSSUVGICAgICAgQSBsaW5lIHBlciBmaWxlLCBzaG93aW5nIHNp emUsIG1vZGUsIHN0YXR1cywgYW5kIHRocm91Z2hwdXQuIiwKKyIgIFNFUklBTCAgICAgT25lIGRv dCBpcyBwcmludGVkIGZvciBldmVyeSBLIGJ5dGVzIHRyYW5zZmVycmVkLiIsCisiICBDUlQgICAg ICAgIE51bWJlcnMgYXJlIGNvbnRpbnVvdXNseSB1cGRhdGVkIG9uIGEgc2luZ2xlIHNjcmVlbiBs aW5lLiIsCisiICAgICAgICAgICAgIFRoaXMgZm9ybWF0IGNhbiBiZSB1c2VkIG9uIGFueSB2aWRl byBkaXNwbGF5IHRlcm1pbmFsLiIsCisjaWZkZWYgQ0tfQ1VSU0VTCisiICBGVUxMU0NSRUVOIEEg ZnVsbHkgZm9ybWF0dGVkIDI0eDgwIHNjcmVlbiBzaG93aW5nIGxvdHMgb2YgaW5mb3JtYXRpb24u IiwKKyIgICAgICAgICAgICAgVGhpcyByZXF1aXJlcyBhIHRlcm1pbmFsIG9yIHRlcm1pbmFsIGVt dWxhdG9yLiIsCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisiICBOT05FICAgICAgIE5vIGZpbGUg dHJhbnNmZXIgZGlzcGxheSBhdCBhbGwuIiwKKyIgIiwKKworIlNFVCBGSUxFIERPV05MT0FELURJ UkVDVE9SWSBbIDxkaXJlY3RvcnktbmFtZT4gXSIsCisiICBUaGUgZGlyZWN0b3J5IGludG8gd2hp Y2ggYWxsIHJlY2VpdmVkIGZpbGVzIHNob3VsZCBiZSBwbGFjZWQuICBCeSBkZWZhdWx0LCIsCisi ICByZWNlaXZlZCBmaWxlcyBnbyBpbnRvIHlvdXIgY3VycmVudCBkaXJlY3RvcnkuIiwKKyIgIiwK KyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIENLX0NUUkxaCisiU0VUIEZJTEUgRU9GIHsg Q1RSTC1aLCBMRU5HVEggfSIsCisiICBFbmQtT2YtRmlsZSBkZXRlY3Rpb24gbWV0aG9kLCBub3Jt YWxseSBMRU5HVEguICBBcHBsaWVzIG9ubHkgdG8gdGV4dC1tb2RlIiwKKyIgIHRyYW5zZmVycy4g IFdoZW4gc2V0IHRvIENUUkwtWiwgdGhpcyBtYWtlcyB0aGUgZmlsZSBzZW5kZXIgdHJlYXQgdGhl IGZpcnN0IiwKKyIgIEN0cmwtWiBpbiB0aGUgaW5wdXQgZmlsZSBhcyB0aGUgZW5kIG9mIGZpbGUg KEVPRiksIGFuZCBpdCBtYWtlcyB0aGUgZmlsZSIsCisiICByZWNlaXZlciB0YWNrIGEgQ3RybC1a IG9udG8gdGhlIGVuZCBvZiB0aGUgb3V0cHV0IGZpbGUgaWYgaXQgZG9lcyBub3QiLAorIiAgYWxy ZWFkeSBlbmQgd2l0aCBDdHJsLVouIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19DVFJMWiAqLworCisi U0VUIEZJTEUgRU5ELU9GLUxJTkUgeyBDUiwgQ1JMRiwgTEYgfSIsCisiICBVc2UgdGhpcyBjb21t YW5kIHRvIHNwZWNpZnkgbm9uc3RhbmRhcmQgbGluZSB0ZXJtaW5hdG9ycyBmb3IgdGV4dCBmaWxl cy4iLAorIiAiLAorCisjaWZuZGVmIE5PWEZFUgorIlNFVCBGSUxFIElOQ09NUExFVEUgeyBBVVRP LCBLRUVQLCBESVNDQVJEIH0iLAorIiAgV2hhdCB0byBkbyB3aXRoIGFuIGluY29tcGxldGVseSBy ZWNlaXZlZCBmaWxlOiBLRUVQLCBESVNDQVJELCBvciBBVVRPLiIsCisiICBBVVRPICh0aGUgZGVm YXVsdCkgbWVhbnMgRElTQ0FSRCBpZiB0cmFuc2ZlciBpcyBpbiB0ZXh0IG1vZGUsIEtFRVAgaWYg aXQiLAorIiAgaXMgaW4gYmluYXJ5IG1vZGUuIiwKKyIgIiwKKyNpZmRlZiBWTVMKKyJTRVQgRklM RSBMQUJFTCB7IEFDTCwgQkFDS1VQLURBVEUsIE5BTUUsIE9XTkVSLCBQQVRIIH0geyBPTiwgT0ZG IH0iLAorIiAgVGVsbHMgd2hpY2ggaXRlbXMgdG8gaW5jbHVkZSAoT04pIG9yIGV4Y2x1ZGUgKE9G RikgaW4gbGFiZWxlZCBmaWxlIiwKKyIgIHRyYW5zZmVycyIsCisiICIsCisjZWxzZQorI2lmZGVm IE9TMgorIlNFVCBGSUxFIExBQkVMIHsgQVJDSElWRSwgUkVBRC1PTkxZLCBISURERU4sIFNZU1RF TSwgRVhURU5ERUQgfSB7IE9OLCBPRkYgfSIsCisiICBUZWxscyB3aGljaCBpdGVtcyB0byBpbmNs dWRlIChPTikgb3IgZXhjbHVkZSAoT0ZGKSBpbiBsYWJlbGVkIGZpbGUiLAorIiAgdHJhbnNmZXJz LiIsCisiICIsCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBV TklYCisjaWZkZWYgRFlOQU1JQworIlNFVCBGSUxFIExJU1RTSVpFIG51bWJlciIsCisiICBDaGFu Z2VzIHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCB3aWxkY2FyZCBleHBhbnNpb24gbGlzdC4gIFVz ZSBTSE9XIEZJTEUiLAorIiAgdG8gc2VlIHRoZSBjdXJyZW50IHNpemUuICBVc2UgdGhpcyBjb21t YW5kIHRvIGluY3JlYXNlIHRoZSBzaXplIGlmIHlvdSBnZXQiLAorIiAgYSBcIj9Ub28gbWFueSBm aWxlc1wiIGVycm9yLiAgQWxzbyBzZWUgU0VUIEZJTEUgU1RSSU5HU1BBQ0UuIiwKKyIgIiwKKyNl bmRpZiAvKiBEWU5BTUlDICovCisjZW5kaWYgLyogVU5JWCAqLworCisiU0VUIEZJTEUgTkFNRVMg eyBDT05WRVJURUQsIExJVEVSQUwgfSIsCisiICBGaWxlIG5hbWVzIGFyZSBub3JtYWxseSBDT05W RVJURUQgdG8gXCJjb21tb24gZm9ybVwiIGR1cmluZyB0cmFuc21pc3Npb24iLAorIiAgKGUuZy4g bG93ZXJjYXNlIHRvIHVwcGVyY2FzZSwgZXh0cmEgcGVyaW9kcyBjaGFuZ2VkIHRvIHVuZGVyc2Nv cmUsIGV0YykuIiwKKyIgIExJVEVSQUwgbWVhbnMgdXNlIGZpbGVuYW1lcyBsaXRlcmFsbHkgKHVz ZWZ1bCBiZXR3ZWVuIGxpa2Ugc3lzdGVtcykuICBBbHNvIiwKKyIgIHNlZSBTRVQgU0VORCBQQVRI TkFNRVMgYW5kIFNFVCBSRUNFSVZFIFBBVEhOQU1FUy4iLAorIiAiLAorCisjaWZkZWYgVU5JWAor IlNFVCBGSUxFIE9VVFBVVCB7IHsgQlVGRkVSRUQsIFVOQlVGRkVSRUQgfSBbIHNpemUgXSwgQkxP Q0tJTkcsIE5PTkJMT0NLSU5HIH0iLAorIiAgTGV0cyB5b3UgY29udHJvbCB0aGUgZGlzayBvdXRw dXQgYnVmZmVyIGZvciBpbmNvbWluZyBmaWxlcy4gIEJ1ZmZlcmVkIiwKKyIgIGJsb2NraW5nIHdy aXRlcyBhcmUgbm9ybWFsLiAgTm9uYmxvY2tpbmcgd3JpdGVzIG1pZ2h0IGJlIGZhc3RlciBvbiBz b21lIiwKKyIgIHN5c3RlbXMgYnV0IG1pZ2h0IGFsc28gYmUgcmlza3ksIGRlcGVuZGluZyBvbiB0 aGUgdW5kZXJseWluZyBmaWxlIHNlcnZpY2UuIiwKKyIgIFVuYnVmZmVyZWQgd3JpdGVzIG1pZ2h0 IGJlIHVzZWZ1bCBpbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMgdG8gZW5zdXJlIHRoYXQiLAorIiAg Y2FjaGVkIGRpc2sgd3JpdGVzIGFyZSBub3QgbG9zdCBpbiBhIGNyYXNoLCBidXQgd2lsbCBwcm9i YWJseSBhbHNvIGJlIiwKKyIgIHNsb3dlci4gIFRoZSBvcHRpb25hbCBzaXplIHBhcmFtZXRlciBh ZnRlciBCVUZGRVJFRCBvciBVTkJVRkZFUkVEIGxldHMgeW91IiwKKyIgIGNoYW5nZSB0aGUgZGlz ayBvdXRwdXQgYnVmZmVyIHNpemU7IHRoaXMgbWlnaHQgbWFrZSBhIGRpZmZlcmVuY2UgaW4iLAor IiAgcGVyZm9ybWFuY2UuIiwKKyIgIiwKKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBQQVRU RVJOUworIlNFVCBGSUxFIFBBVFRFUk5TIHsgT04sIE9GRiwgQVVUTyB9IiwKKyIgIE9OIG1lYW5z IHRvIHVzZSBmaWxlbmFtZSBwYXR0ZXJuIGxpc3RzIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHNl bmQgYSBmaWxlIiwKKyIgIGluIHRleHQgb3IgYmluYXJ5IG1vZGUuICBPRkYgbWVhbnMgdG8gc2Vu ZCBhbGwgZmlsZXMgaW4gdGhlIHByZXZhaWxpbmciLAorIiAgbW9kZS4gIEFVVE8gKHRoZSBkZWZh dWx0KSBpcyBsaWtlIE9OIGlmIHRoZSBvdGhlciBLZXJtaXQgYWNjZXB0cyBBdHRyaWJ1dGUiLAor IiAgcGFja2V0cyBhbmQgbGlrZSBPRkYgb3RoZXJ3aXNlLiAgRklMRSBQQVRURVJOUyBhcmUgdXNl ZCBvbmx5IGlmIEZJTEUgU0NBTiIsCisiICBpcyBPRkYgKHNlZSBTRVQgRklMRSBTQ0FOKS4iLAor IiAiLAorIlNFVCBGSUxFIEJJTkFSWS1QQVRURVJOUyBbIDxwYXR0ZXJuPiBbIDxwYXR0ZXJuPiAu Li4gXSBdIiwKKyIgIFplcm8gb3IgbW9yZSBmaWxlbmFtZSBwYXR0ZXJucyB3aGljaCwgaWYgbWF0 Y2hlZCwgY2F1c2UgYSBmaWxlIHRvIGJlIHNlbnQiLAorIiAgaW4gYmluYXJ5IG1vZGUgd2hlbiBG SUxFIFBBVFRFUk5TIGFyZSBPTi4gIEhFTFAgV0lMRENBUkRTIGZvciBhIGRlc2NyaXB0aW9uIgor LAorIiAgb2YgcGF0dGVybiBzeW50YXguICBTSE9XIFBBVFRFUk5TIHRvIHNlZSB0aGUgY3VycmVu dCBmaWxlIHBhdHRlcm4gbGlzdHMuIiwKKyIgIiwKKyJTRVQgRklMRSBURVhULVBBVFRFUk5TIFsg PHBhdHRlcm4+IFsgPHBhdHRlcm4+IC4uLiBdIF0iLAorIiAgWmVybyBvciBtb3JlIGZpbGVuYW1l IHBhdHRlcm5zIHdoaWNoLCBpZiBtYXRjaGVkLCBjYXVzZSBhIGZpbGUgdG8gYmUgc2VudCIsCisi ICBpbiB0ZXh0IG1vZGUgd2hlbiBGSUxFIFBBVFRFUk5TIGlzIE9OOyBpZiBhIGZpbGUgZG9lcyBu b3QgbWF0Y2ggYSB0ZXh0IG9yIiwKKyIgIGJpbmFyeSBwYXR0ZXJuLCB0aGUgcHJldmFpbGluZyBT RVQgRklMRSBUWVBFIGlzIHVzZWQuIiwKKyIgIiwKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCisj aWZkZWYgVk1TCisiU0VUIEZJTEUgUkVDT1JELUxFTkdUSCBudW1iZXIiLAorIiAgU2V0cyB0aGUg cmVjb3JkIGxlbmd0aCBmb3IgcmVjZWl2ZWQgZmlsZXMgb2YgdHlwZSBCSU5BUlkuICBVc2UgdGhp cyB0byIsCisiICByZWNlaXZlIFZNUyBCQUNLVVAgc2F2ZXNldHMgb3Igb3RoZXIgZml4ZWQtZm9y bWF0IGZpbGVzIHRoYXQgZG8gbm90IHVzZSIsCisiICB0aGUgZGVmYXVsdCByZWNvcmQgbGVuZ3Ro IG9mIDUxMi4iLAorIiAiLAorI2VuZGlmIC8qIFZNUyAqLworCisiU0VUIEZJTEUgU0NBTiB7IE9O IFsgc2l6ZSBdLCBPRkYgfSIsCisiICBJZiBUUkFOU0ZFUiBNT0RFIGlzIEFVVE9NQVRJQyBhbmQg RklMRSBTQ0FOIGlzIE9OIChhcyBpdCBpcyBieSBkZWZhdWx0KSIsCisiICBLZXJtaXQgcGVla3Mg YXQgdGhlIGZpbGUncyBjb250ZW50cyB0byBzZWUgaWYgaXQncyB0ZXh0IG9yIGJpbmFyeS4gIFVz ZSIsCisiICBTRVQgRklMRSBTQ0FOIE9GRiB0byBkaXNhYmxlIGZpbGUgcGVla2luZywgd2hpbGUg c3RpbGwga2VlcGluZyBUUkFOU0ZFUiIsCisiICBNT0RFIGF1dG9tYXRpYyB0byBhbGxvdyBuYW1l IHBhdHRlcm5zIGFuZCBvdGhlciBtZXRob2RzLiAgVGhlIG9wdGlvbmFsIiwKKyIgIHNpemUgaXMg dGhlIG51bWJlciBvZiBmaWxlIGJ5dGVzIHRvIHNjYW4sIDQ5MTUyIGJ5IGRlZmF1bHQuICAtMSBt ZWFucyB0byIsCisiICBzY2FuIHRoZSB3aG9sZSBmaWxlLiAgQWxzbyBzZWUgU0VUIEZJTEUgUEFU VEVSTlMuIiwKKyIgIiwKKworI2lmZGVmIFVOSVgKKyNpZmRlZiBEWU5BTUlDCisiU0VUIEZJTEUg U1RSSU5HU1BBQ0UgbnVtYmVyIiwKKyIgIENoYW5nZXMgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0 aGUgaW50ZXJuYWwgYnVmZmVyIHRoYXQgaG9sZHMgbGlzdHMgb2YiLAorIiAgZmlsZW5hbWVzIHN1 Y2ggYXMgd2lsZGNhcmQgZXhwYW5zaW9uIGxpc3RzLiAgVXNlIFNIT1cgRklMRSB0byBzZWUgdGhl IiwKKyIgIGN1cnJlbnQgc2l6ZS4gIFVzZSB0aGlzIGNvbW1hbmQgdG8gaW5jcmVhc2UgdGhlIHNp emUgaWYgeW91IGdldCBhIiwKKyIgIFwiP1N0cmluZyBzcGFjZSBleGhhdXN0ZWRcIiBlcnJvci4g IEFsc28gc2VlIFNFVCBGSUxFIExJU1RTSVpFLiIsCisiICIsCisjZW5kaWYgLyogRFlOQU1JQyAq LworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIFVOSUNPREUKKyJTRVQgRklMRSBVQ1MgQk9N IHsgT04sIE9GRiB9IiwKKyIgIFdoZXRoZXIgdG8gd3JpdGUgYSBCeXRlIE9yZGVyIE1hcmsgd2hl biBjcmVhdGluZyBhIFVDUy0yIGZpbGUuIiwKKyIgIiwKKyJTRVQgRklMRSBVQ1MgQllURS1PUkRF UiB7IEJJRy1FTkRJQU4sIExJVFRMRS1FTkRJQU4gfSIsCisiICBCeXRlIG9yZGVyIHRvIHVzZSB3 aGVuIGNyZWF0aW5nIFVDUy0yIGZpbGVzLCBhbmQgdG8gdXNlIHdoZW4gcmVhZGluZyBVQ1MtMiIs CisiICBmaWxlcyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIGEgQnl0ZSBPcmRlciBNYXJrLiIsCisi ICIsCisjZW5kaWYgLyogVU5JQ09ERSAqLworCisiU0VUIEZJTEUgV0FSTklORyB7IE9OLCBPRkYg fSIsCisiICBTRVQgRklMRSBXQVJOSU5HIGlzIHN1cGVyc2VkZWQgYnkgdGhlIG5ld2VyIGNvbW1h bmQsIFNFVCBGSUxFIiwKKyIgIENPTExJU0lPTi4gIFNFVCBGSUxFIFdBUk5JTkcgT04gaXMgZXF1 aXZhbGVudCB0byBTRVQgRklMRSBDT0xMSVNJT04gUkVOQU1FIiwKKyIgIGFuZCBTRVQgRklMRSBX QVJOSU5HIE9GRiBpcyBlcXVpdmFsZW50IHRvIFNFVCBGSUxFIENPTExJU0lPTiBPVkVSV1JJVEUu IiwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyIiIH07CisKK3N0YXRpYyBjaGFyICpobXh5aHNoW10g PSB7CisiU3ludGF4OiBTRVQgSEFORFNIQUtFIHsgTk9ORSwgWE9OLCBMRiwgQkVMTCwgRVNDLCBD T0RFIG51bWJlciB9IiwKKyIgIENoYXJhY3RlciB0byB1c2UgZm9yIGhhbGYgZHVwbGV4IGxpbmUg dHVybmFyb3VuZCBoYW5kc2hha2UgZHVyaW5nIGZpbGUiLAorIiAgdHJhbnNmZXIuICBDLUtlcm1p dCB3YWl0cyBmb3IgdGhpcyBjaGFyYWN0ZXIgZnJvbSB0aGUgb3RoZXIgY29tcHV0ZXIiLAorIiAg YmVmb3JlIHNlbmRpbmcgaXRzIG5leHQgcGFja2V0LiAgRGVmYXVsdCBpcyBOT05FOyB5b3UgY2Fu IGdpdmUgb25lIG9mIHRoZSIsCisiICBvdGhlciBuYW1lcyBsaWtlIEJFTEwgb3IgRVNDLCBvciB1 c2UgU0VUIEhBTkRTSEFLRSBDT0RFIHRvIHNwZWNpZnkgdGhlIiwKKyIgIG51bWVyaWMgY29kZSB2 YWx1ZSBvZiB0aGUgaGFuZHNoYWtlIGNoYXJhY3Rlci4gIFR5cGUgU0VUIEhBTkRTSCA/IGZvciBh IiwKKyIgIGNvbXBsZXRlIGxpc3Qgb2YgcG9zc2liaWxpdGllcy4iLAorIiIgfTsKKworI2lmbmRl ZiBOT1NFUlZFUgorc3RhdGljIGNoYXIgKmhzZXRzcnZbXSA9IHsKKyJTRVQgU0VSVkVSIENELU1F U1NBR0Uge09OLE9GRn0iLAorIiAgVGVsbHMgd2hldGhlciB0aGUgc2VydmVyLCBhZnRlciBzdWNj ZXNzZnVsbHkgZXhlY3V0aW5nIGEgUkVNT1RFIENEIiwKKyIgIGNvbW1hbmQsIHNob3VsZCBzZW5k IHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IGRpcmVjdG9yeSdzIFJFQUQuTUUiLAorIiAgKG9yIHNp bWlsYXIpIGZpbGUgdG8geW91ciBzY3JlZW4uIiwKKyIgIiwKKyJTRVQgU0VSVkVSIENELU1FU1NB R0UgRklMRSBuYW1lIiwKKyIgIFRlbGxzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRpc3Bs YXllZCBhcyBhIENELU1FU1NBR0UsIHN1Y2ggYXMiLAorIiAgUkVBRC5NRSAoU0hPVyBTRVJWRVIg dGVsbHMgdGhlIGN1cnJlbnQgQ0QtTUVTU0FHRSBGSUxFIG5hbWUpLiIsCisiICBUbyBzcGVjaWZ5 IG1vcmUgdGhhbiBvbmUgZmlsZW5hbWUgdG8gbG9vayBmb3IsIHVzZSB7e25hbWUxfXtuYW1lMn0u Ln0uIiwKKyIgIFN5bm9ueW06IFNFVCBDRCBNRVNTQUdFIEZJTEUgPGxpc3Q+LiIsCisiICIsCisi U0VUIFNFUlZFUiBESVNQTEFZIHtPTixPRkZ9IiwKKyIgIFRlbGxzIHdoZXRoZXIgbG9jYWwtbW9k ZSBDLUtlcm1pdCBkdXJpbmcgc2VydmVyIG9wZXJhdGlvbiBzaG91bGQgcHV0IGEiLAorIiAgZmls ZSB0cmFuc2ZlciBkaXNwbGF5IG9uIHRoZSBzY3JlZW4uICBEZWZhdWx0IGlzIE9GRi4iLAorIiAi LAorIlNFVCBTRVJWRVIgR0VULVBBVEggWyBkaXJlY3RvcnkgWyBkaXJlY3RvcnkgWyAuLi4gXSBd IF0iLAorIiAgVGVsbHMgdGhlIEMtS2VybWl0IHNlcnZlciB3aGVyZSB0byBsb29rIGZvciBmaWxl cyB3aG9zZSBuYW1lcyBpdCByZWNlaXZlcyIsCisiICBmcm9tIGNsaWVudCBHRVQgY29tbWFuZHMg d2hlbiB0aGUgbmFtZXMgYXJlIG5vdCBmdWxseSBzcGVjaWZpZWQgcGF0aG5hbWVzLiIsCisiICBE ZWZhdWx0IGlzIG5vIEdFVC1QQVRILCBzbyBDLUtlcm1pdCBsb29rcyBvbmx5IGluIGl0cyBjdXJy ZW50IGRpcmVjdG9yeS4iLAorIiAiLAorIlNFVCBTRVJWRVIgSURMRS1USU1FT1VUIHNlY29uZHMi LAorIiAgSWRsZSB0aW1lIGxpbWl0IHdoaWxlIGluIHNlcnZlciBtb2RlLCAwIGZvciBubyBsaW1p dC4iLAorI2lmbmRlZiBPUzIKKyIgIE5PVEU6IFNFUlZFUiBJRExFLVRJTUVPVVQgYW5kIFNFUlZF UiBUSU1FT1VUIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIg IiwKKyJTRVQgU0VSVkVSIEtFRVBBTElWRSB7T04sT0ZGfSIsCisiICBUZWxscyB3aGV0aGVyIEMt S2VybWl0IHNob3VsZCBzZW5kIFwia2VlcGFsaXZlXCIgcGFja2V0cyB3aGlsZSBleGVjdXRpbmci LAorIiAgUkVNT1RFIEhPU1QgY29tbWFuZHMsIHdoaWNoIGlzIHVzZWZ1bCBpbiBjYXNlIHRoZSBj b21tYW5kIHRha2VzIGEgbG9uZyIsCisiICB0aW1lIHRvIHByb2R1Y2UgYW55IG91dHB1dCBhbmQg dGhlcmVmb3JlIG1pZ2h0IGNhdXNlIHRoZSBvcGVyYXRpb24gdG8gdGltZSIsCisiICBvdXQuICBP TiBieSBkZWZhdWx0OyB0dXJuIGl0IE9GRiBpZiBpdCBjYXVzZXMgdHJvdWJsZSB3aXRoIHRoZSBj bGllbnQgb3IiLAorIiAgc2xvd3MgZG93biB0aGUgc2VydmVyIHRvbyBtdWNoLiIsCisiICIsCisi U0VUIFNFUlZFUiBMT0dJTiBbIHVzZXJuYW1lIFsgcGFzc3dvcmQgWyBhY2NvdW50IF0gXSBdIiwK KyIgIFNldHMgdXAgYSB1c2VybmFtZSBhbmQgb3B0aW9uYWwgcGFzc3dvcmQgd2hpY2ggbXVzdCBi ZSBzdXBwbGllZCBiZWZvcmUiLAorIiAgdGhlIHNlcnZlciB3aWxsIHJlc3BvbmQgdG8gYW55IGNv bW1hbmRzIG90aGVyIHRoYW4gUkVNT1RFIExPR0lOLiAgVGhlIiwKKyIgIGFjY291bnQgaXMgaWdu b3JlZC4gIElmIHlvdSBlbnRlciBTRVQgU0VSVkVSIExPR0lOIGJ5IGl0c2VsZiwgdGhlbiBsb2dp biIsCisiICBpcyBubyBsb25nZXIgcmVxdWlyZWQuICBPbmx5IG9uZSBTRVQgU0VSVkVSIExPR0lO IGNvbW1hbmQgY2FuIGJlIGluIGVmZmVjdCIsCisiICBhdCBhIHRpbWU7IEMtS2VybWl0IGRvZXMg bm90IHN1cHBvcnQgbXVsdGlwbGUgdXNlci9wYXNzd29yZCBwYWlycy4iLAorIiAiLAorIlNFVCBT RVJWRVIgVElNRU9VVCBuIiwKKyIgIFNlcnZlciBjb21tYW5kIHdhaXQgdGltZW91dCBpbnRlcnZh bCwgaG93IG9mdGVuIHRoZSBDLUtlcm1pdCBzZXJ2ZXIgaXNzdWVzIiwKKyIgIGEgTkFLIHdoaWxl IHdhaXRpbmcgZm9yIGEgY29tbWFuZCBwYWNrZXQuICBTcGVjaWZ5IDAgZm9yIG5vIE5BS3MgYXQg YWxsLiIsCisiICBEZWZhdWx0IGlzIDAuIiwKKyIiCit9OworI2VuZGlmIC8qIE5PU0VSVkVSICov CisKK3N0YXRpYyBjaGFyICpobWhybXRbXSA9IHsKKyNpZmRlZiBORVdGVFAKKyJUaGUgUkVNT1RF IGNvbW1hbmQgc2VuZHMgZmlsZSBtYW5hZ2VtZW50IGluc3RydWN0aW9ucyBvciBvdGhlciBjb21t YW5kcyIsCisidG8gYSBLZXJtaXQgb3IgRlRQIHNlcnZlci4gIElmIHlvdSBoYXZlIGEgc2luZ2xl IGNvbm5lY3Rpb24sIHRoZSBjb21tYW5kIGlzIiwKKyJkaXJlY3RlZCB0byB0aGUgc2VydmVyIHlv dSBhcmUgY29ubmVjdGVkIHRvOyBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBjb25uZWN0aW9ucyIKKywK KyJ0aGUgY29tbWFuZCBpcyBkaXJlY3RlZCBhY2NvcmRpbmcgdG8geW91ciBHRVQtUFVULVJFTU9U RSBzZXR0aW5nLiIsCisjZWxzZQorIlRoZSBSRU1PVEUgY29tbWFuZCBzZW5kcyBmaWxlIG1hbmFn ZW1lbnQgaW5zdHJ1Y3Rpb25zIG9yIG90aGVyIGNvbW1hbmRzIiwKKyJ0byBhIEtlcm1pdCBzZXJ2 ZXIuICBUaGVyZSBzaG91bGQgYWxyZWFkeSBiZSBhIEtlcm1pdCBydW5uaW5nIGluIHNlcnZlciIs CisibW9kZSBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLiIsCisjZW5kaWYgLyog TkVXRlRQICovCisiVHlwZSBSRU1PVEUgPyB0byBzZWUgYSBsaXN0IG9mIGF2YWlsYWJsZSByZW1v dGUgY29tbWFuZHMuICBUeXBlIEhFTFAgUkVNT1RFIiwKKyJ4eHggdG8gZ2V0IGZ1cnRoZXIgaW5m b3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIHJlbW90ZSBjb21tYW5kIHh4eC4iLAorIiAiLAor IkFsbCBSRU1PVEUgY29tbWFuZHMgZXhjZXB0IExPR0lOIGFuZCBMT0dPVVQgaGF2ZSBSLWNvbW1h bmQgc2hvcnRjdXRzOyIsCisiZm9yIGV4YW1wbGUsIFJESVIgZm9yIFJFTU9URSBESVIsIFJDRCBm b3IgUkVNT1RFIENELCBldGMuIiwKKyIgIiwKKyNpZmRlZiBORVdGVFAKKyNpZmRlZiBMT0NVUwor IkFsc28gc2VlOiBIRUxQIFNFVCBMT0NVUywgSEVMUCBGVFAsIEhFTFAgU0VUIEdFVC1QVVQtUkVN T1RFLiIsCisjZWxzZQorIkFsc28gc2VlOiBIRUxQIEZUUCwgSEVMUCBTRVQgR0VULVBVVC1SRU1P VEUuIiwKKyNlbmRpZiAvKiBMT0NVUyAqLworI2Vsc2UKKyNpZmRlZiBMT0NVUworIkFsc28gc2Vl OiBIRUxQIFNFVCBMT0NVUy4iLAorI2VuZGlmIC8qIExPQ1VTICovCisjZW5kaWYgLyogTkVXRlRQ ICovCisiIiB9OworCisjaWZuZGVmIE5PU1BMCitzdGF0aWMgY2hhciAqaWZobHBbXSA9IHsgIlN5 bnRheDogSUYgW05PVF0gY29uZGl0aW9uIGNvbW1hbmRsaXN0IiwKKyIgIiwKKyJJZiB0aGUgY29u ZGl0aW9uIGlzIChpcyBub3QpIHRydWUsIGRvIHRoZSBjb21tYW5kbGlzdC4gIFRoZSBjb21tYW5k bGlzdCIsCisiY2FuIGJlIGEgc2luZ2xlIGNvbW1hbmQsIG9yIGEgbGlzdCBvZiBjb21tYW5kcyBz ZXBhcmF0ZWQgYnkgY29tbWFzIGFuZCIsCisiZW5jbG9zZWQgaW4gYnJhY2VzLiAgVGhlIGNvbmRp dGlvbiBjYW4gYmUgYSBzaW5nbGUgY29uZGl0aW9uIG9yIGEgZ3JvdXAgb2YiLAorImNvbmRpdGlv bnMgc2VwYXJhdGVkIGJ5IEFORCAoJiYpIG9yIE9SICh8fCkgYW5kIGVuY2xvc2VkIGluIHBhcmVu dGhlc2VzLiIsCisiSWYgcGFyZW50aGVzZXMgYXJlIHVzZWQgdGhleSBtdXN0IGJlIHN1cnJvdW5k ZWQgYnkgc3BhY2VzLiAgRXhhbXBsZXM6IiwKKyIgIiwKKyIgIElGIEVYSVNUIG9vZmEudHh0IDxj b21tYW5kPiIsCisiICBJRiAoIEVYSVNUIG9vZmEudHh0IHx8ID0gXFx2KG5kYXkpIDMgKSA8Y29t bWFuZD4iLAorIiAgSUYgKCBFWElTVCBvb2ZhLnR4dCB8fCA9IFxcdihuZGF5KSAzICkgeyA8Y29t bWFuZD4sIDxjb21tYW5kPiwgLi4uIH0iLAorIiAiLAorIlRoZSBjb25kaXRpb25zIGFyZToiLAor IiAiLAorIiAgU1VDQ0VTUyAgICAgLSBUaGUgcHJldmlvdXMgY29tbWFuZCBzdWNjZWVkZWQiLAor IiAgT0sgICAgICAgICAgLSBTeW5vbnltIGZvciBTVUNDRVNTIiwKKyIgIEZBSUxVUkUgICAgIC0g VGhlIHByZXZpb3VzIGNvbW1hbmQgZmFpbGVkIiwKKyIgIEVSUk9SICAgICAgIC0gU3lub255bSBm b3IgRkFJTFVSRSIsCisiICBGTEFHICAgICAgICAtIFN1Y2NlZWRzIGlmIFNFVCBGTEFHIE9OLCBm YWlscyBpZiBTRVQgRkxBRyBPRkYiLAorIiAgQkFDS0dST1VORCAgLSBDLUtlcm1pdCBpcyBydW5u aW5nIGluIHRoZSBiYWNrZ3JvdW5kIiwKKyNpZmRlZiBDS19JRlJPCisiICBGT1JFR1JPVU5EICAt IEMtS2VybWl0IGlzIHJ1bm5pbmcgaW4gdGhlIGZvcmVncm91bmQiLAorIiAgUkVNT1RFLU9OTFkg LSBDLUtlcm1pdCB3YXMgc3RhcnRlZCB3aXRoIHRoZSAtUiBjb21tYW5kLWxpbmUgb3B0aW9uIiwK KyNlbHNlCisiICBGT1JFR1JPVU5EICAtIEMtS2VybWl0IGlzIHJ1bm5pbmcgaW4gdGhlIGZvcmVn cm91bmQiLAorI2VuZGlmIC8qIENLX0lGUk8gKi8KKyIgIEtFUkJBTkcgICAgIC0gQSBLZXJiYW5n IHNjcmlwdCBpcyBydW5uaW5nIiwKKyIgIEFMQVJNICAgICAgIC0gU0VUIEFMQVJNIHRpbWUgaGFz IHBhc3NlZCIsCisiICBBU0tUSU1FT1VUICAtIFRoZSBtb3N0IHJlY2VudCBBU0ssIEFTS1EsIEdF VEMsIG9yIEdFVE9LIHRpbWVkIG91dCIsCisiICBFTVVMQVRJT04gICAtIFN1Y2NlZWRzIGlmIGV4 ZWN1dGVkIHdoaWxlIGluIENPTk5FQ1QgbW9kZSIsCisjaWZkZWYgT1MyCisiICBUQVBJICAgICAg ICAtIEN1cnJlbnQgY29ubmVjdGlvbiBpcyB2aWEgYSBNaWNyb3NvZnQgVEFQSSBkZXZpY2UiLAor I2VuZGlmIC8qIE9TMiAqLworIiAiLAorIiAgTVMtS0VSTUlUICAgLSBQcm9ncmFtIGlzIE1TLURP UyBLZXJtaXQiLAorIiAgQy1LRVJNSVQgICAgLSBQcm9ncmFtIGlzIEMtS2VybWl0IiwKKyIgIEst OTUgICAgICAgIC0gUHJvZ3JhbSBpcyBLZXJtaXQgOTUiLAorIiAgR1VJICAgICAgICAgLSBQcm9n cmFtIHJ1bnMgaW4gYSBHVUkgd2luZG93IiwKKyIgIiwKKyIgIEFWQUlMQUJMRSBDUllQVE8gICAg ICAgICAgICAgICAgICAtIEVuY3J5cHRpb24gaXMgYXZhaWxhYmxlIiwKKyIgIEFWQUlMQUJMRSBL RVJCRVJPUzQgICAgICAgICAgICAgICAtIEtlcmJlcm9zIDQgYXV0aGVudGljYXRpb24gaXMgYXZh aWxhYmxlIiwKKyIgIEFWQUlMQUJMRSBLRVJCRVJPUzUgICAgICAgICAgICAgICAtIEtlcmJlcm9z IDUgYXV0aGVudGljYXRpb24gaXMgYXZhaWxhYmxlIiwKKyIgIEFWQUlMQUJMRSBOVExNICAgICAg ICAgICAgICAgICAgICAtIE5UTE0gYXV0aGVudGljYXRpb24gaXMgYXZhaWxhYmxlIiwKKyIgIEFW QUlMQUJMRSBTUlAgICAgICAgICAgICAgICAgICAgICAtIFNSUCBhdXRoZW50aWNhdGlvbiBpcyBh dmFpbGFibGUiLAorIiAgQVZBSUxBQkxFIFNTTCAgICAgICAgICAgICAgICAgICAgIC0gU1NML1RM UyBhdXRoZW50aWNhdGlvbiBpcyBhdmFpbGFibGUiLAorIiAgTUFUQ0ggc3RyaW5nIHBhdHRlcm4g ICAgICAgICAgICAgIC0gU3VjY2VlZHMgaWYgc3RyaW5nIG1hdGNoZXMgcGF0dGVybiIsCisjaWZk ZWYgQ0tGTE9BVAorIiAgRkxPQVQgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgIC0gU3VjY2Vl ZHMgaWYgZmxvYXRpbmctcG9pbnQgbnVtYmVyIiwKKyNlbmRpZiAvKiBDS0ZMT0FUICovCisiICBD T01NQU5EIHdvcmQgICAgICAgICAgICAgICAgICAgICAgLSBTdWNjZWVkcyBpZiB3b3JkIGlzIGJ1 aWx0LWluIGNvbW1hbmQiLAorIiAgREVGSU5FRCB2YXJpYWJsZW5hbWUgb3IgbWFjcm9uYW1lIC0g VGhlIG5hbWVkIHZhcmlhYmxlIG9yIG1hY3JvIGlzIGRlZmluZWQiLAorIiAgREVDTEFSRUQgYXJy YXluYW1lICAgICAgICAgICAgICAgIC0gVGhlIG5hbWVkIGFycmF5IGlzIGRlY2xhcmVkIiwKKyIg IE5VTUVSSUMgdmFyaWFibGUgb3IgY29uc3RhbnQgICAgICAtIFRoZSB2YXJpYWJsZSBvciBjb25z dGFudCBpcyBudW1lcmljIiwKKyIgIEVYSVNUIGZpbGVuYW1lICAgICAgICAgICAgICAgICAgICAt IFRoZSBuYW1lZCBmaWxlIGV4aXN0cyIsCisiICBBQlNPTFVURSBmaWxlbmFtZSAgICAgICAgICAg ICAgICAgLSBUaGUgZmlsZW5hbWUgaXMgYWJzb2x1dGUsIG5vdCByZWxhdGl2ZSIsCisjaWZkZWYg Q0tfVE1QRElSCisiICBESVJFQ1RPUlkgc3RyaW5nICAgICAgICAgICAgICAgICAgLSBUaGUgc3Ry aW5nIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IiwKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8K KyNpZmRlZiBVTklYCisiICBMSU5LIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUg c3RyaW5nIGlzIGEgc3ltYm9saWMgbGluayIsCisjZW5kaWYJLyogVU5JWCAqLworIiAgUkVBREFC TEUgZmlsZW5hbWUgICAgICAgICAgICAgICAgIC0gU3VjY2VlZHMgaWYgdGhlIGZpbGUgaXMgcmVh ZGFibGUiLAorIiAgV1JJVEVBQkxFIGZpbGVuYW1lICAgICAgICAgICAgICAgIC0gU3VjY2VlZHMg aWYgdGhlIGZpbGUgaXMgd3JpdGVhYmxlIiwKKyNpZmRlZiBaRkNEQVQKKyIgIE5FV0VSIGZpbGUx IGZpbGUyICAgICAgICAgICAgICAgICAtIFRoZSAxc3QgZmlsZSBpcyBuZXdlciB0aGFuIHRoZSAy bmQgb25lIiwKKyNlbmRpZiAvKiBaRkNEQVQgKi8KKyIgIE9QRU4geyBSRUFELUZJTEUsU0VTU0lP Ti1MT0csLi4ufSAtIFRoZSBnaXZlbiBmaWxlIG9yIGxvZyBpcyBvcGVuIiwKKyNpZm5kZWYgTk9M T0NBTAorIiAgT1BFTiBDT05ORUNUSU9OICAgICAgICAgICAgICAgICAgIC0gQSBjb25uZWN0aW9u IGlzIG9wZW4iLAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyIgIEtCSElUICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtIEEga2V5IGhhcyBiZWVuIHByZXNzZWQiLAorIiAiLAorIiAgVkVSU0lP TiAtIGVxdWl2YWxlbnQgdG8gXCJpZiA+PSBcXHYodmVyc2lvbikgLi4uXCIiLAorIiAgQ09VTlQg ICAtIHN1YnRyYWN0IG9uZSBmcm9tIENPVU5ULCBleGVjdXRlIHRoZSBjb21tYW5kIGlmIHRoZSBy ZXN1bHQgaXMiLAorIiAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiB6ZXJvIChzZWUgU0VUIENPVU5U KSIsCisiICIsCisiICBFUVVBTCBzMSBzMiAtIHMxIGFuZCBzMiAoY2hhcmFjdGVyIHN0cmluZ3Mg b3IgdmFyaWFibGVzKSBhcmUgZXF1YWwiLAorIiAgTExUIHMxIHMyICAgLSBzMSBpcyBsZXhpY2Fs bHkgKGFscGhhYmV0aWNhbGx5KSBsZXNzIHRoYW4gczIiLAorIiAgTEdUIHMxIHMxICAgLSBzMSBp cyBsZXhpY2FsbHkgKGFscGhhYmV0aWNhbGx5KSBncmVhdGVyIHRoYW4gczIiLAorIiAiLAorIiAg PSAgbjEgbjIgLSBuMSBhbmQgbjIgKG51bWJlcnMgb3IgdmFyaWFibGVzIGNvbnRhaW5pbmcgbnVt YmVycykgYXJlIGVxdWFsIiwKKyIgIDwgIG4xIG4yIC0gbjEgaXMgYXJpdGhtZXRpY2FsbHkgbGVz cyB0aGFuIG4yIiwKKyIgIDw9IG4xIG4yIC0gbjEgaXMgYXJpdGhtZXRpY2FsbHkgbGVzcyB0aGFu IG9yIGVxdWFsIHRvIG4yIiwKKyIgID4gIG4xIG4yIC0gbjEgaXMgYXJpdGhtZXRpY2FsbHkgZ3Jl YXRlciB0aGFuIG4yIiwKKyIgID49IG4xIG4yIC0gbjEgaXMgYXJpdGhtZXRpY2FsbHkgZ3JlYXRl ciB0aGFuIG9yIGVxdWFsIHRvIG4yIiwKKyIgIiwKKyIgIChudW1iZXIgYnkgaXRzZWxmKSAtIGZh aWxzIGlmIHRoZSBudW1iZXIgaXMgMCwgc3VjY2VlZHMgb3RoZXJ3aXNlIiwKKyIgIiwKKyIgIFRS VUUgICAgIC0gYWx3YXlzIHN1Y2NlZWRzIiwKKyIgIEZBTFNFICAgIC0gYWx3YXlzIGZhaWxzIiwK KyIgIiwKKyJUaGUgSUYgY29tbWFuZCBtYXkgYmUgZm9sbG93ZWQgb24gdGhlIG5leHQgbGluZSBi eSBhbiBFTFNFIGNvbW1hbmQuIEV4YW1wbGU6IiwKKyIgIiwKKyIgIElGIDwgXFwleCAxMCBFQ0hP IEl0J3MgbGVzcyIsCisiICBFTFNFIGVjaG8gSXQncyBub3QgbGVzcyIsCisiICIsCisiSXQgY2Fu IGFsc28gaW5jbHVkZSBhbiBFTFNFIHBhcnQgb24gdGhlIHNhbWUgbGluZSBpZiBicmFjZXMgYXJl IHVzZWQ6IiwKKyIgIiwKKyIgIElGIDwgXFwleCAxMCB7IEVDSE8gSXQncyBsZXNzIH0gRUxTRSB7 IEVDSE8gSXQncyBub3QgbGVzcyB9IiwKKyIgIiwKKyJBbHNvIHNlZSBIRUxQIFdJTERDQVJEIChm b3IgSUYgTUFUQ0ggcGF0dGVybiBzeW50YXgpLiIsCisiIiB9OworCitzdGF0aWMgY2hhciAqaG14 eGV2YWxbXSA9IHsgIlN5bnRheDogRVZBTFVBVEUgdmFyaWFibGUgZXhwcmVzc2lvbiIsCisiICBF dmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gYW5kIGFzc2lnbnMgaXRzIHZhbHVlIHRvIHRoZSBnaXZl biB2YXJpYWJsZS4iLAorIiAgVGhlIGV4cHJlc3Npb24gY2FuIGNvbnRhaW4gbnVtYmVycyBhbmQv b3IgbnVtZXJpYy12YWx1ZWQgdmFyaWFibGVzIG9yIiwKKyIgIGZ1bmN0aW9ucywgY29tYmluZWQg d2l0aCBtYXRoZW1hdGljYWwgb3BlcmF0b3JzIGFuZCBwYXJlbnRoZXNlcyBpbiIsCisiICB0cmFk aXRpb25hbCBub3RhdGlvbi4gIE9wZXJhdG9ycyBpbmNsdWRlICstLyooKSwgZXRjLiAgRXhhbXBs ZToiLAorIiAgRVZBTFVBVEUgXFwlbiAoMSsxKSAqIChcXCVhIC8gMykuIiwKKyIgIiwKKyIgIE5P VEU6IFByaW9yIHRvIEMtS2VybWl0IDcuMCwgdGhlIHN5bnRheCB3YXMgXCJFVkFMVUFURSBleHBy ZXNzaW9uXCIiLAorIiAgKG5vIHZhcmlhYmxlKSwgYW5kIHRoZSByZXN1bHQgd2FzIHByaW50ZWQu ICBVc2UgU0VUIEVWQUwgeyBPTEQsIE5FVyB9IiwKKyIgIHRvIGNob29zZSB0aGUgb2xkIG9yIG5l dyBiZWhhdmlvciwgd2hpY2ggaXMgTkVXIGJ5IGRlZmF1bHQuIiwKKyIgIiwKKyJBbHNlIHNlZTog SEVMUCBGVU5DVElPTiBFVkFMLiIsCisiIiB9OworI2VuZGlmIC8qIE5PU1BMICovCisKK3N0YXRp YyBjaGFyICpobXh4ZXhpdFtdID0geworIlN5bnRheDogRVhJVCAob3IgUVVJVCkgWyBudW1iZXIg WyB0ZXh0IF0gXSIsCisiICBFeGl0cyBmcm9tIHRoZSBLZXJtaXQgcHJvZ3JhbSwgY2xvc2luZyBh bGwgb3BlbiBmaWxlcyBhbmQgZGV2aWNlcy4iLAorIiAgSWYgYSBudW1iZXIgaXMgZ2l2ZW4gaXQg YmVjb21lcyBLZXJtaXQncyBleGl0IHN0YXR1cyBjb2RlLiAgSWYgdGV4dCBpcyIsCisiICBpbmNs dWRlZCwgaXQgaXMgcHJpbnRlZC4gIEFsc28gc2VlIFNFVCBFWElULiIsCisiIiB9OworCisjaWZu ZGVmIE5PU1BMCitzdGF0aWMgY2hhciAqaWZ4aGxwW10gPSB7ICJcCitTeW50YXg6IFhJRiBjb25k aXRpb24geyBjb21tYW5kbGlzdCB9IFsgRUxTRSB7IGNvbW1hbmRsaXN0IH0gXSIsCisiICBPYnNv bGV0ZS4gIFNhbWUgYXMgSUYgKHNlZSBIRUxQIElGKS4iLAorIiIgfTsKKworc3RhdGljIGNoYXIg KmZvcmhscFtdID0geyAiXAorU3ludGF4OiBGT1IgdmFyaWFibGVuYW1lIGluaXRpYWwtdmFsdWUg ZmluYWwtdmFsdWUgaW5jcmVtZW50IHsgY29tbWFuZGxpc3QgfSIsCisiICBGT1IgbG9vcC4gIEV4 ZWN1dGUgdGhlIGNvbW1hLXNlcGFyYXRlZCBjb21tYW5kcyBpbiB0aGUgY29tbWFuZGxpc3QgdGhl IiwKKyIgIG51bWJlciBvZiB0aW1lcyBnaXZlbiBieSB0aGUgaW5pdGlhbCB2YWx1ZSwgZmluYWwg dmFsdWUgYW5kIGluY3JlbWVudC4iLAorIiAgRXhhbXBsZTogIEZPUiBcXCVpIDEwIDEgLTEgeyBw YXVzZSAxLCBlY2hvIFxcJWkgfSIsICIiIH07CisKK3N0YXRpYyBjaGFyICp3aGlobHBbXSA9IHsg IlwKK1N5bnRheDogV0hJTEUgY29uZGl0aW9uIHsgY29tbWFuZGxpc3QgfSIsCisiICBXSElMRSBs b29wLiAgRXhlY3V0ZSB0aGUgY29tbWEtc2VwYXJhdGVkIGNvbW1hbmRzIGluIHRoZSBicmFja2V0 ZWQiLAorIiAgY29tbWFuZGxpc3Qgd2hpbGUgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLiAgQ29uZGl0 aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIiwKKyIgIElGIGNvbW1hbmRzLiIsCisiIiB9OworCitz dGF0aWMgY2hhciAqc3dpaGxwW10gPSB7CisiU3ludGF4OiBTV0lUQ0ggPHZhcmlhYmxlPiB7IGNh c2UtbGlzdCB9IiwKKyIgIFNlbGVjdHMgZnJvbSBhIGdyb3VwIG9mIGNvbW1hbmRzIGJhc2VkIG9u IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLiIsCisiICBUaGUgY2FzZS1saXN0IGlzIGEgc2VyaWVz IG9mIGxpbmVzIGxpa2UgdGhlc2U6IiwKKyIgIiwKKyIgICAgOngsIGNvbW1hbmQsIGNvbW1hbmQs IC4uLiwgYnJlYWsiLAorIiAiLAorIiAgd2hlcmUgXCJ4XCIgaXMgYSBwb3NzaWJsZSB2YWx1ZSBm b3IgdGhlIHZhcmlhYmxlLiAgQXQgdGhlIGVuZCBvZiB0aGUiLAorIiAgY2FzZS1saXN0LCB5b3Ug Y2FuIHB1dCBhIFwiZGVmYXVsdFwiIGxhYmVsIHRvIGNhdGNoIHdoZW4gdGhlIHZhcmlhYmxlIGRv ZXMiLAorIiAgbm90IG1hdGNoIGFueSBvZiB0aGUgbGFiZWxzOiIsCisiICIsCisiICAgIDpkZWZh dWx0LCBjb21tYW5kLCBjb21tYW5kLCAuLi4iLAorIiAiLAorIlRoZSBjYXNlIGxhYmVsIFwieFwi IGNhbiBiZSBhIGNoYXJhY3RlciwgYSBzdHJpbmcsIGEgdmFyaWFibGUsIGEgZnVuY3Rpb24iLAor Imludm9jYXRpb24sIGEgcGF0dGVybiwgb3IgYW55IGNvbWJpbmF0aW9uIG9mIHRoZXNlLiAgU2Vl IEhFTFAgV0lMRENBUkRTIiwKKyJmb3IgaW5mb3JtYXRpb24gYWJvdXQgcGF0dGVybnMuIiwKKyIi fTsKKworc3RhdGljIGNoYXIgKm9wZW5obHBbXSA9IHsKKyJTeW50YXg6ICBPUEVOIG1vZGUgZmls ZW5hbWUiLAorIiAgRm9yIHVzZSB3aXRoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzLiAgT3BlbiB0 aGUgbG9jYWwgZmlsZSBpbiB0aGUiLAorIiAgc3BlY2lmaWVkIG1vZGU6IFJFQUQsIFdSSVRFLCBv ciBBUFBFTkQuICAhUkVBRCBhbmQgIVdSSVRFIG1lYW4gdG8gcmVhZCIsCisiICBmcm9tIG9yIHdy aXRlIHRvIGEgc3lzdGVtIGNvbW1hbmQgcmF0aGVyIHRoYW4gYSBmaWxlLiAgRXhhbXBsZXM6IiwK KyIgIiwKKyIgICAgT1BFTiBSRUFEIG9vZmEudHh0IiwKKyIgICAgT1BFTiAhUkVBRCBzb3J0IGZv by5iYXIiLAorIiIgfTsKKworc3RhdGljIGNoYXIgKmh4eGFza1tdID0geworIlN5bnRheDogIEFT SyBbIHN3aXRjaGVzIF0gdmFyaWFibGVuYW1lIFsgcHJvbXB0IF0iLAorIkV4YW1wbGU6IEFTSyBc XCVuIHsgV2hhdCBpcyB5b3VyIG5hbWVcXD8gfSIsCisiICBJc3N1ZXMgdGhlIHByb21wdCBhbmQg ZGVmaW5lcyB0aGUgdmFyaWFibGUgdG8gYmUgd2hhdGV2ZXIgaXMgdHlwZWQgaW4iLAorIiAgcmVz cG9uc2UsIHVwIHRvIHRoZSB0ZXJtaW5hdGluZyBjYXJyaWFnZSByZXR1cm4uICBVc2UgYnJhY2Vz IHRvIHByZXNlcnZlIiwKKyIgIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIHNwYWNlcyBpbiB0aGUg cHJvbXB0LiIsCisiICIsCisiU3ludGF4OiAgQVNLUSBbIHN3aXRjaGVzIF0gdmFyaWFibGVuYW1l IFsgcHJvbXB0IF0iLAorIkV4YW1wbGU6IEFTS1EgXFwlcCB7IFBhc3N3b3JkOn0iLAorIiAgTGlr ZSBBU0sgZXhjZXB0IHRoZSByZXNwb25zZSBkb2VzIG5vdCBlY2hvIG9uIHRoZSBzY3JlZW4gb3Is IGlmIHNwZWNpZmllZCIsCisiICBpdCBlY2hvZXMgYXMgYXN0ZXJpc2tzIG9yIG90aGVyIHNwZWNp ZmllZCBjaGFyYWN0ZXIuIiwKKyIgIiwKKyJTd2l0Y2hlczoiLAorIiAvREVGQVVMVDp0ZXh0IiwK KyIgIFRleHQgdG8gc3VwcGx5IGlmIHRoZSB1c2VyIGVudGVycyBhIGJsYW5rIHJlc3BvbnNlIG9y IHRoZSAvVElNRU9VVCIsCisiICBsaW1pdCBleHBpcmVkIHdpdGggbm8gcmVzcG9uc2UuIiwKKyIg IiwKKyIgL0VDSE86Y2hhciIsCisiICAoQVNLUSBvbmx5KSBDaGFyYWN0ZXIgdG8gYmUgZWNob2Vk IGVhY2ggdGltZSB0aGUgdXNlciBwcmVzc2VzIGEga2V5IiwKKyIgIGNvcnJlc3BvbmRpbmcgdG8g YSBwcmludGFibGUgY2hhcmFjdGVyLiAgVGhpcyBsZXRzIHVzZXJzIHNlZSB3aGF0IHRoZXkgYXJl IiwKKyIgIGRvaW5nIHdoZW4gdGhleSBhcmUgdHlwaW5nIChlLmcuKSBwYXNzd29yZHMsIGFuZCBt YWtlcyBlZGl0aW5nIGVhc2llci4iLAorIiAiLAorI2lmZGVmIE9TMgorIiAvUE9QVVAiLAorIiAg VGhlIHByb21wdCBhbmQgcmVzcG9uc2UgZGlhbG9nIHRha2VzIHBsYWNlIGluIGEgdGV4dC1tb2Rl IHBvcHVwLiIsCisiICBLOTUgb25seTsgaW4gQy1LZXJtaXQgdGhpcyBzd2l0Y2ggaXMgaWdub3Jl ZC4iLAorIiAiLAorI2lmZGVmIEtVSQorIiAvR1VJIiwKKyIgIFRoZSBwcm9tcHQgYW5kIHJlc3Bv bnNlIGRpYWxvZyB0YWtlcyBwbGFjZSBpbiBhIEdVSSBwb3B1cC4iLAorIiAgSzk1IEdVSSB2ZXJz aW9uIG9ubHk7IGluIEMtS2VybWl0IGFuZCB0aGUgSzk1IGNvbnNvbGUgdmVyc2lvbiwiLCAKKyIg IHRoaXMgc3dpdGNoIGlzIGlnbm9yZWQuIiwKKyIgIiwKKyNlbmRpZiAvKiBLVUkgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyIgL1RJTUVPVVQ6bnVtYmVyIiwKKyIgIElmIHRoZSByZXNwb25zZSBpcyBu b3QgZW50ZXJlZCB3aXRoaW4gdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLCB0aGUiLAorIiAg Y29tbWFuZCBmYWlscy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIEFTSy1USU1FUiB0 byBhIHBvc2l0aXZlIiwKKyIgIG51bWJlciwgZXhjZXB0IGl0IGFwcGxpZXMgb25seSB0byB0aGlz IGNvbW1hbmQuICBBbHNvIHNlZSBTRVQgQVNLLVRJTUVSLiIsCisiICBOT1RFOiBJZiBhIC9ERUZB VUxUOiB2YWx1ZSB3YXMgYWxzbyBnaXZlbiwgaXQgaXMgc3VwcGxpZWQgYXV0b21hdGljYWxseSIs CisiICB1cG9uIHRpbWVvdXQgYW5kIHRoZSBjb21tYW5kIGRvZXMgTk9UIGZhaWwuIiwKKworIiAi LAorIiAvUVVJRVQiLAorIiAgU3VwcHJlc3NlcyBcIj9UaW1lZCBvdXRcIiBtZXNzYWdlIHdoZW4g L1RJTUVPVVQgaXMgZ2l2ZW4gYW5kIHVzZXIgZG9lc24ndCIsCisiICByZXNwb25kIHdpdGhpbiB0 aGUgdGltZSBsaW1pdC4iLAorIiJ9Oworc3RhdGljIGNoYXIgKmh4eGdldGNbXSA9IHsKKyJTeW50 YXg6ICBHRVRDIHZhcmlhYmxlbmFtZSBbIHByb21wdCBdIiwKKyJFeGFtcGxlOiBHRVRDIFxcJWMg eyBUeXBlIGFueSBjaGFyYWN0ZXIgdG8gY29udGludWUuLi59IiwKKyIgIElzc3VlcyB0aGUgcHJv bXB0IGFuZCBzZXRzIHRoZSB2YXJpYWJsZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIHlvdSB0eXBl LiIsCisiICBVc2UgYnJhY2VzIHRvIHByZXNlcnZlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIHNw YWNlcyBpbiB0aGUgcHJvbXB0LiIsCisiICIsCisiQWxzbyBzZWUgU0VUIEFTSy1USU1FUi4iLAor IiJ9OworCitzdGF0aWMgY2hhciAqaG14eXRpbWVyW10gPSB7CisiU3ludGF4OiBTRVQgQVNLLVRJ TUVSIG51bWJlciIsCisiICBGb3IgdXNlIHdpdGggQVNLLCBBU0tRLCBHRVRPSywgYW5kIEdFVEMu ICBJZiBBU0stVElNRVIgaXMgc2V0IHRvIGEgbnVtYmVyIiwKKyIgIGdyZWF0ZXIgdGhhbiAwLCB0 aGVzZSBjb21tYW5kcyB3aWxsIHRpbWUgb3V0IGFmdGVyIHRoZSBnaXZlbiBudW1iZXIgb2YiLAor IiAgc2Vjb25kcyB3aXRoIG5vIHJlc3BvbnNlLiAgVGhpcyBjb21tYW5kIGlzIFwic3RpY2t5XCIs IHNvIHRvIHJldmVydCB0byIsCisiIFwKK3VudGltZWQgQVNLcyBhZnRlciBhIHRpbWVkIG9uZSwg dXNlIFNFVCBBU0stVElNRVIgMC4gIEFsc28gc2VlIElGIEFTS1RJTUVPVVQuIiwKKyIifTsKKwor c3RhdGljIGNoYXIgKmh4eGRvdFtdID0geworIlN5bnRheDogLjx2YXJpYWJsZS1uYW1lPiA8YXNz aWdubWVudC1vcGVyYXRvcj4gPHZhbHVlPiIsCisiICBBc3NpZ25zIHRoZSB2YWx1ZSB0byB0aGUg dmFyaWFibGUgaW4gdGhlIG1hbm5lciBpbmRpY2F0ZWQgYnkgdGhlIiwKKyIgIGFzc2lnbm1lbnQg b3BlcmF0b3I6IiwKKyIgID0gICBDb3BpZXMgd2l0aG91dCBldmFsdWF0aW9uIChsaWtlIERFRklO RSkuIiwKKyIgIDo9ICBDb3BpZXMgd2l0aCBldmFsdWF0aW9uIChsaWtlIEFTU0lHTikuIiwKKyIg IDo6PSBDb3BpZXMgd2l0aCBhcml0aG1ldGljIGV2YWx1YXRpb24gKGxpa2UgRVZBTFVBVEUpLiIs CisiIn07CisKK3N0YXRpYyBjaGFyICpoeHhkZWZbXSA9IHsKKyJTeW50YXg6IERFRklORSBuYW1l IFsgZGVmaW5pdGlvbiBdIiwKKyIgIERlZmluZXMgYSBtYWNybyBvciB2YXJpYWJsZS4gIEl0cyB2 YWx1ZSBpcyB0aGUgZGVmaW5pdGlvbiwgdGFrZW4iLAorIiAgbGl0ZXJhbGx5LiAgTm8gZXhwYW5z aW9uIG9yIGV2YWx1YXRpb24gb2YgdGhlIGRlZmluaXRpb24gaXMgZG9uZS4gIFRodXMiLAorIiAg aWYgdGhlIGRlZmluaXRpb24gaW5jbHVkZXMgYW55IHZhcmlhYmxlIG9yIGZ1bmN0aW9uIHJlZmVy ZW5jZXMsIHRoZWlyIiwKKyIgIG5hbWVzIGFyZSBpbmNsdWRlZCwgcmF0aGVyIHRoYW4gdGhlaXIg dmFsdWVzIChjb21wYXJlIHdpdGggQVNTSUdOKS4gIElmIiwKKyIgIHRoZSBkZWZpbml0aW9uIGlz IG9taXR0ZWQsIHRoZW4gdGhlIG5hbWVkIHZhcmlhYmxlIG9yIG1hY3JvIGlzIHVuZGVmaW5lZC4i LAorIiAiLAorIkEgdHlwaWNhbCBtYWNybyBkZWZpbml0aW9uIGxvb2tzIGxpa2UgdGhpczoiLAor IiAiLAorIiAgREVGSU5FIG5hbWUgY29tbWFuZCwgY29tbWFuZCwgY29tbWFuZCwgLi4uIiwKKyIg IiwKKyJmb3IgZXhhbXBsZToiLAorIiAiLAorIiAgREVGSU5FIHZheCBzZXQgcGFyaXR5IGV2ZW4s IHNldCBkdXBsZXggZnVsbCwgc2V0IGZsb3cgeG9uL3hvZmYiLAorIiAiLAorIndoaWNoIGRlZmlu ZXMgYSBLZXJtaXQgY29tbWFuZCBtYWNybyBjYWxsZWQgJ3ZheCcuICBUaGUgZGVmaW5pdGlvbiBp cyBhIiwKKyJjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBLZXJtaXQgY29tbWFuZHMuICBVc2UgdGhl IERPIGNvbW1hbmQgdG8gZXhlY3V0ZSIsCisidGhlIG1hY3JvLCBvciBqdXN0IHR5cGUgaXRzIG5h bWUsIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgYXJndW1lbnRzLiIsCisiICIsCisiVGhlIGRlZmlu aXRpb24gb2YgYSB2YXJpYWJsZSBjYW4gYmUgYW55dGhpbmcgYXQgYWxsLCBmb3IgZXhhbXBsZToi LAorIiAiLAorIiAgREVGSU5FIFxcJWEgTW9uZGF5IiwKKyIgIERFRklORSBcXCViIDMiLAorIiAi LAorIlRoZXNlIHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBhbG1vc3QgYW55d2hlcmUsIGZvciBleGFt cGxlOiIsCisiICIsCisiICBFQ0hPIFRvZGF5IGlzIFxcJWEiLAorIiAgU0VUIEJMT0NLLUNIRUNL IFxcJWIiLAorIiIgfTsKKworc3RhdGljIGNoYXIgKmh4eGFzc1tdID0geworIlN5bnRheDogIEFT U0lHTiB2YXJpYWJsZW5hbWUgc3RyaW5nLiIsCisiRXhhbXBsZTogQVNTSUdOIFxcJWEgTXkgbmFt ZSBpcyBcXCViLiIsCisiICBBc3NpZ25zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzdHJpbmcg dG8gdGhlIHZhcmlhYmxlIChvciBtYWNybykuIiwKKyIgIFRoZSBkZWZpbml0aW9uIHN0cmluZyBp cyBmdWxseSBldmFsdWF0ZWQgYmVmb3JlIGl0IGlzIGFzc2lnbmVkLCBzbyB0aGF0IiwKKyIgIHRo ZSB2YWx1ZXMgb2YgYW55IHZhcmlhYmxlcyB0aGF0IGFyZSBjb250YWluZWQgYXJlIHVzZWQsIHJh dGhlciB0aGFuIHRoZWlyIiwKKyIgIG5hbWVzLiAgQ29tcGFyZSB3aXRoIERFRklORS4gIFRvIGls bHVzdHJhdGUgdGhlIGRpZmZlcmVuY2UsIHRyeSB0aGlzOiIsCisiICIsCisiICAgIERFRklORSBc XCVhIGhlbGxvIiwKKyIgICAgREVGSU5FIFxcJXggXFwlYSIsCisiICAgIEFTU0lHTiBcXCV5IFxc JWEiLAorIiAgICBERUZJTkUgXFwlYSBnb29kYnllIiwKKyIgICAgRUNITyBcXCV4IFxcJXkiLAor IiAiLAorIiAgVGhpcyBwcmludHMgJ2dvb2RieWUgaGVsbG8nLiIsICIiIH07CisKK3N0YXRpYyBj aGFyICpoeHhkZWNbXSA9IHsKKyJTeW50YXg6IERFQ1JFTUVOVCB2YXJpYWJsZW5hbWUgWyBudW1i ZXIgXSIsCisiICBEZWNyZW1lbnQgKHN1YnRyYWN0IG9uZSBmcm9tKSB0aGUgdmFsdWUgb2YgYSB2 YXJpYWJsZSBpZiB0aGUgY3VycmVudCB2YWx1ZSIsCisiICBpcyBudW1lcmljLiAgSWYgdGhlIG51 bWJlciBhcmd1bWVudCBpcyBnaXZlbiwgc3VidHJhY3QgdGhhdCBudW1iZXIiLAorIiAgaW5zdGVh ZC4iLAorIiAiLAorIkV4YW1wbGVzOiBERUNSIFxcJWEsIERFQ1IgXFwlYSA3LCBERUNSIFxcJWEg XFwlbiIsICIiIH07CisKK3N0YXRpYyBjaGFyICpoeHhpbmNbXSA9IHsKKyJTeW50YXg6IElOQ1JF TUVOVCB2YXJpYWJsZW5hbWUgWyBudW1iZXIgXSIsCisiICBJbmNyZW1lbnQgKGFkZCBvbmUgdG8p IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlIGlmIHRoZSBjdXJyZW50IHZhbHVlIGlzIiwKKyIgIG51 bWVyaWMuICBJZiB0aGUgbnVtYmVyIGFyZ3VtZW50IGlzIGdpdmVuLCBhZGQgdGhhdCBudW1iZXIg aW5zdGVhZC4iLAorIiAiLAorIkV4YW1wbGVzOiBJTkNSIFxcJWEsIElOQ1IgXFwlYSA3LCBJTkNS IFxcJWEgXFwlbiIsICIiIH07CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIEFOWVgyNQor I2lmbmRlZiBJQk1YMjUKK3N0YXRpYyBjaGFyICpoeHhwYWRbXSA9IHsKKyJTeW50YXg6IFBBRCBj b21tYW5kIiwKKyJYLjI1IFBBRCBjb21tYW5kczoiLAorIiAiLAorIiAgICBQQUQgQ0xFQVIgICAg IC0gQ2xlYXIgdGhlIHZpcnR1YWwgY2FsbCIsCisiICAgIFBBRCBTVEFUVVMgICAgLSBSZXR1cm4g dGhlIHN0YXR1cyBvZiB2aXJ0dWFsIGNhbGwiLAorIiAgICBQQUQgUkVTRVQgICAgIC0gU2VuZCBh IHJlc2V0IHBhY2tldCIsCisiICAgIFBBRCBJTlRFUlJVUFQgLSBTZW5kIGFuIGludGVycnVwdCBw YWNrZXQiLAorIiJ9OworI2VuZGlmIC8qIElCTVgyNSAqLworCitzdGF0aWMgY2hhciAqaHh5eDI1 W10gPSB7CisiU3ludGF4OiBTRVQgWC4yNSBvcHRpb24geyBPTiBbIGRhdGEgXSwgT0ZGIH0iLAor IiAiLAorIlguMjUgY2FsbCBvcHRpb25zOiIsCisiICBDTE9TRUQtVVNFUi1HUk9VUCB7IE9OIGlu ZGV4LCBPRkYgfSIsCisiICAgIEVuYWJsZSBvciBkaXNhYmxlIGNsb3NlZCB1c2VyIGdyb3VwIGNh bGwsIHdoZXJlIGluZGV4IGlzIHRoZSBncm91cCIsCisiICAgIGluZGV4LCAwIHRvIDk5LiIsCisi ICBSRVZFUlNFLUNIQVJHRSB7IE9OLCBPRkYgfSIsCisiICAgIFRlbGwgd2hldGhlciB5b3Ugd2Fu dCB0byByZXZlcnNlIHRoZSBjaGFyZ2VzIGZvciB0aGUgY2FsbC4iLAorIiAgQ0FMTC1VU0VSLURB VEEgeyBPTiBzdHJpbmcsIE9GRiB9IiwKKyIgICAgU3BlY2lmeSBjYWxsIHVzZXItZGF0YSBmb3Ig dGhlIFguMjUgY2FsbC4iLAorIiJ9OworI2VuZGlmIC8qIEFOWVgyNSAqLworCitzdGF0aWMgY2hh ciAqaHh5cHJ0cltdID0geworI2lmZGVmIFBSSU5UU1dJCisiU3ludGF4OiBTRVQgUFJJTlRFUiBb IHN3aXRjaGVzIF0gWyBuYW1lIF0iLAorIiAiLAorIiAgU3BlY2lmaWVzIHRoZSBwcmludGVyIHRv IGJlIHVzZWQgZm9yIHRyYW5zcGFyZW50LXByaW50LCBhdXRvcHJpbnQsIGFuZCIsCisiICBzY3Jl ZW4tZHVtcCBtYXRlcmlhbCBkdXJpbmcgdGVybWluYWwgZW11bGF0aW9uLCBhcyB3ZWxsIGFzIGZv ciB0aGUgUFJJTlQiLAorIiAgY29tbWFuZCwgcGx1cyB2YXJpb3VzIG9wdGlvbnMgZ292ZXJuaW5n IHByaW50IGJlaGF2aW9yLiIsCisiICIsCisiU3dpdGNoZXMgZm9yIHNwZWNpZnlpbmcgdGhlIHBy aW50ZXIgYnkgdHlwZToiLAorIiAiLAorIi9OT05FIiwKKyIgIEluY2x1ZGUgdGhpcyBzd2l0Y2gg dG8gc3BlY2lmeSB0aGF0IGFsbCBwcmludGVyIGFjdGlvbnMgc2hvdWxkIHNpbXBseSBiZSIsCisi ICBza2lwcGVkLiAgVXNlIHRoaXMsIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBubyBwcmludGVy LiIsCisiICIsCisiL0RPUy1ERVZJQ0VbOm5hbWVdIiwKKyIgIEluY2x1ZGUgdGhpcyB0byBkZWNs YXJlIGEgRE9TIHByaW50ZXIgYW5kIHRvIHNwZWNpZnkgaXRzIG5hbWUsIHN1Y2ggYXMiLAorIiAg UFJOLCBMUFQxLCBldGMuIiwKKyIgIiwKKyNpZmRlZiBOVAorIi9XSU5ET1dTLVFVRVVFWzpbcXVl dWUtbmFtZV1dIiwKKyIgIEluY2x1ZGUgdGhpcyB0byBkZWNsYXJlIGEgV2luZG93cyBwcmludGVy IGFuZCBzcGVjaWZ5IGl0cyBxdWV1ZSBuYW1lLiIsCisiICBUeXBlIHF1ZXN0aW9uIG1hcmsgKD8p IGFmdGVyIHRoZSBjb2xvbiAoOikgdG8gc2VlIGEgbGlzdCBvZiBrbm93biBxdWV1ZSIsCisiICBu YW1lcy4gIElmIHRoZSBjb2xvbiBpcyBhYnNlbnQsIHRoZSBzd2l0Y2ggaW5kaWNhdGVzIHRoZSBj dXJyZW50bHkiLAorIiAgc2VsZWN0ZWQgcHJpbnRlciBpcyBhIFdpbmRvd3MgUHJpbnQgUXVldWUu ICBJZiB0aGUgY29sb24gaXMgcHJvdmlkZWQiLAorIiAgYW5kIHRoZSBuYW1lIGlzIGFic2VudCwg dGhlIFdpbmRvd3MgUHJpbnQgUXVldWUgY2hvc2VuIGFzIHRoZSBEZWZhdWx0IiwKKyIgIFByaW50 ZXIgaXMgc2VsZWN0ZWQuIiwKKyIgIiwKKyNlbmRpZiAvKiBOVCAqLworIi9GSUxFWzpuYW1lXSIs CisiICBTcGVjaWZpZXMgdGhhdCBhbGwgcHJpbnRlciBtYXRlcmlhbCBpcyB0byBiZSBhcHBlbmRl ZCB0byB0aGUgbmFtZWQgZmlsZSwiLAorIiAgcmF0aGVyIHRoYW4gYmVpbmcgc2VudCB0byBhIHBy aW50ZXIuICBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMiLAorIiAgY3JlYXRlZCB0 aGUgZmlyc3QgdGltZSBhbnkgbWF0ZXJpYWwgaXMgdG8gYmUgcHJpbnRlZC4iLAorIiAiLAorIi9Q SVBFWzpuYW1lXSIsCisiICBTcGVjaWZpZXMgdGhhdCBhbGwgcHJpbnRlciBtYXRlcmlhbCBpcyB0 byBiZSBzZW50IGFzIHN0YW5kYXJkIGlucHV0IHRvIiwKKyIgIHRoZSBwcm9ncmFtIG9yIGNvbW1h bmQgd2hvc2UgbmFtZSBpcyBnaXZlbi4gIEV4YW1wbGU6IiwKKyIgIiwKKyIgICAgU0VUIFBSSU5U RVIgL1BJUEU6e3RleHRwcyA+IGxwdDF9IiwKKyIgIiwKKyJJZiB5b3UgZ2l2ZSBhIHByaW50ZXIg bmFtZSB3aXRob3V0IHNwZWNpZnlpbmcgYW55IG9mIHRoZXNlIHN3aXRjaGVzLCB0aGVuIGl0IiwK KyJpcyBhc3N1bWVkIHRvIGJlIGEgRE9TIHByaW50ZXIgZGV2aWNlIG9yIGZpbGVuYW1lIHVubGVz cyB0aGUgbmFtZSBnaXZlbiIsCisiKGFmdGVyIHJlbW92aW5nIGVuY2xvc2luZyBicmFjZXMsIGlm IGFueSkgc3RhcnRzIHdpdGggXCJ8XCIsIFwKK2luIHdoaWNoIGNhc2UgaXQiLAorImlzIGEgcGlw ZS4gIEV4YW1wbGVzOiIsCisiICIsCisiICBTRVQgUFJJTlRFUiBMUFQxICAgICAgICAgICAgICAg PC0tIERPUyBkZXZpY2UiLAorIiAgU0VUIFBSSU5URVIge3wgdGV4dHBzID4gbHB0MX0gIDwtLSBQ aXBlIiwKKyIgIiwKKyJUaGUgbmV4dCBncm91cCBvZiBzd2l0Y2hlcyB0ZWxscyB3aGV0aGVyIHRo ZSBwcmludGVyIGlzIG9uZS13YXkgb3IiLAorImJpZGlyZWN0aW9uYWwgKHR3by13YXkpOiIsCisi ICIsCisiL09VVFBVVC1PTkxZIiwKKyIgIEluY2x1ZGUgdGhpcyB0byBkZWNsYXJlIHRoZSBwcmlu dGVyIGNhcGFibGUgb25seSBvZiByZWNlaXZpbmcgbWF0ZXJpYWwgdG8iLAorIiAgYmUgcHJpbnRl ZCwgYnV0IG5vdCBzZW5kaW5nIGFueXRoaW5nIGJhY2suICBUaGlzIGlzIHRoZSBub3JtYWwga2lu ZCBvZiIsCisiICBwcmludGVyLCBLZXJtaXQncyBkZWZhdWx0IGtpbmQsIGFuZCB0aGUgb3Bwb3Np dGUgb2YgL0JJRElSRUNUSU9OQUwuIiwKKyIgIiwKKyIvQklESVJFQ1RJT05BTCIsCisiICBJbmNs dWRlIHRoaXMgdG8gZGVjbGFyZSB0aGUgcHJpbnRlciBiaWRpcmVjdGlvbmFsLiAgVGhpcyBpcyB0 aGUgb3Bwb3NpdGUgIiwKKyIgIG9mIC9PVVRQVVQtT05MWS4gIFlvdSBjYW4gYWxzbyB1c2UgdGhp cyBvcHRpb24gd2l0aCBzZXJpYWwgcHJpbnRlcnMsIGV2ZW4iLAorIiAgaWYgdGhleSBhcmVuJ3Qg YmlkaXJlY3Rpb25hbCwgaW4gY2FzZSB5b3UgbmVlZCB0byBzcGVjaWZ5IHNwZWVkLCBmbG93IiwK KyIgIGNvbnRyb2wsIG9yIHBhcml0eS4iLAorIiAiLAorIlRoZSBuZXh0IGdyb3VwIGFwcGxpZXMg b25seSB0byBiaWRpcmVjdGlvbmFsIGFuZC9vciBzZXJpYWwgcHJpbnRlcnM6IiwKKyIgIiwKKyIv RkxPVy1DT05UUk9MOntOT05FLFhPTi9YT0ZGLFJUUy9DVFMsS0VFUH0iLAorIiAgRmxvdyBjb250 cm9sIHRvIHVzZSB3aXRoIGEgc2VyaWFsIGJpZGlyZWN0aW9uYWwgcHJpbnRlciwgZGVmYXVsdCBL RUVQOyIsCisjaWZkZWYgTlQKKyIgIGkuZS4gdXNlIHdoYXRldmVyIHRoZSBXaW5kb3dzIGRyaXZl ciBmb3IgdGhlIHBvcnQgbm9ybWFsbHkgdXNlcy4iLAorI2Vsc2UKKyIgIGkuZS4gdXNlIHdoYXRl dmVyIHRoZSBPUy8yIGRyaXZlciBmb3IgdGhlIHBvcnQgbm9ybWFsbHkgdXNlcy4iLAorI2VuZGlm IC8qIE5UICovCisiICIsCisiL1BBUklUWTp7Tk9ORSxFVkVOLE9ERCxTUEFDRSxNQVJLfSIsCisi ICBQYXJpdHkgdG8gdXNlIHdpdGggYSBzZXJpYWwgcHJpbnRlciwgZGVmYXVsdCBOT05FOyBpLmUu IHVzZSA4IGRhdGEgYml0cyIsCisiICBhbmQgbm8gcGFyaXR5LiAgSWYgeW91IG9taXQgdGhlIGNv bG9uIGFuZCB0aGUga2V5d29yZCwgTk9ORSBpcyBzZWxlY3RlZC4iLAorIiAiLAorIi9TUEVFRDpu dW1iZXIiLAorIiAgSW50ZXJmYWNlIHNwZWVkLCBpbiBiaXRzIHBlciBzZWNvbmQsIHRvIHVzZSB3 aXRoIGEgc2VyaWFsIHByaW50ZXIsIHN1Y2ggYXMiLAorIiAgMjQwMCwgOTYwMCwgMTkyMDAsIGV0 Yy4gIFR5cGUgU0VUIFBSSU5URVIgL1NQRUVEOj8gZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSIsCisi ICBzcGVlZHMuIiwKKyIgIiwKKyJUaGUgbmV4dCBncm91cCBkZWFscyB3aXRoIHByaW50IGpvYnMg LS0gaG93IHRvIGlkZW50aWZ5IHRoZW0sIGhvdyB0byBzdGFydCIsCisidGhlbSwgaG93IHRvIHRl cm1pbmF0ZSB0aGVtOiIsCisiICIsCisiL1RJTUVPVVRbOm51bWJlcl0iLAorIiAgVXNlZCB3aXRo IGhvc3QtZGlyZWN0ZWQgdHJhbnNwYXJlbnQgb3IgYXV0byBwcmludGluZywgdGhpcyBpcyB0aGUg bnVtYmVyIiwKKyIgIG9mIHNlY29uZHMgdG8gd2FpdCBhZnRlciB0aGUgaG9zdCBjbG9zZXMgdGhl IHByaW50ZXIgYmVmb3JlIHRlcm1pbmF0aW5nIiwKKyIgIHRoZSBwcmludCBqb2IgaWYgdGhlIHBy aW50ZXIgaXMgbm90IG9wZW5lZCBhZ2FpbiBkdXJpbmcgdGhlIHNwZWNpZmllZCIsCisiICBhbW91 bnQgb2YgdGltZS4iLAorIiAiLAorIi9KT0ItSEVBREVSLUZJTEVbOmZpbGVuYW1lXSIsCisiICBU aGUgbmFtZSBvZiBhIGZpbGUgdG8gYmUgc2VudCB0byB0aGUgcHJpbnRlciBhdCB0aGUgYmVnaW5u aW5nIG9mIGVhY2giLAorIiAgcHJpbnQgam9iLCBhcyBhIGJ1cnN0IHBhZ2UsIG9yIHRvIGNvbmZp Z3VyZSB0aGUgcHJpbnRlci4gIE5vcm1hbGx5IG5vIGZpbGUiLAorIiAgaXMgaXMgc2VudC4iLAor IiAiLAorIi9FTkQtT0YtSk9CLVNUUklOR1s6c3RyaW5nXSIsCisiICBTdHJpbmcgb2YgY2hhcmFj dGVycyB0byBiZSBzZW50IHRvIHRoZSBwcmludGVyIGF0IHRoZSBlbmQgb2YgdGhlIHByaW50IiwK KyIgIGpvYiwgdXN1YWxseSB1c2VkIHRvIGZvcmNlIHRoZSBsYXN0IG9yIG9ubHkgcGFnZSBvdXQg b2YgdGhlIHByaW50ZXIuICBXaGVuIiwKKyIgIHN1Y2ggYSBzdHJpbmcgaXMgbmVlZGVkLCBpdCB1 c3VhbGx5IGNvbnNpc3RzIG9mIGEgc2luZ2xlIGZvcm1mZWVkOiBcInNldCIsCisiICBwcmludGVy IC9lbmQtb2Ytam9iOntcXDEyfVwiLiAgTm8gZW5kLW9mLWpvYiBzdHJpbmcgaXMgc2VudCB1bmxl c3MgeW91IiwKKyIgIHNwZWNpZnkgb25lIHdpdGggdGhpcyBvcHRpb24uICBJZiB0aGUgc3RyaW5n IGNvbnRhaW5zIGFueSBzcGFjZXMgb3IiLAorIiAgY29udHJvbCBjaGFyYWN0ZXJzIChldmVuIGlu IGJhY2tzbGFzaCBub3RhdGlvbiwgYXMgYWJvdmUpLCBlbmNsb3NlIGl0IGluIiwKKyIgIGJyYWNl cy4iLAorIiAiLAorIlRoZSBuZXh0IGdyb3VwIGlzIGZvciB1c2Ugd2l0aCBwcmludGVycyB0aGF0 IHByaW50IG9ubHkgUG9zdFNjcmlwdDoiLAorIiAiLAorIi9QT1NUU0NSSVBUIG9yIC9QUyIsCisi ICBJbmRpY2F0ZXMgdGhhdCBLOTUgc2hvdWxkIGNvbnZlcnQgYWxsIHRleHQgdG8gUG9zdFNjcmlw dCBiZWZvcmUgc2VuZGluZyIsCisiICBpdCB0byB0aGUgcHJpbnRlci4gIFRoZSBmaXhlZC1waXRj aCBDb3VyaWVyLTExIGZvbnQgaXMgdXNlZC4iLAorIiAiLAorIi9XSURUSDpudW1iZXIiLAorIiAg U3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgcGFnZSBpbiBjaGFyYWN0ZXJzLiAgSWYgdGhpcyBz d2l0Y2ggaXMgbm90IiwKKyIgIGdpdmVuLCA4MCBpcyB1c2VkLiIsCisiICIsCisiL0hFSUdIVDpu dW1iZXIiLAorIiAgU3BlY2lmaWVzIHRoZSBoZWlnaHQgb2YgdGhlIHBhZ2UgaW4gbGluZXMuICBJ ZiB0aGlzIHN3aXRjaCBpcyBub3QgZ2l2ZW4iLAorIiAgNjYgaXMgdXNlZC4iLAorIiAiLAorIi9O T1BPU1RTQ1JJUFQgb3IgL05PUFMiLAorIiAgSW5kaWNhdGVzIHRoYXQgSzk1IHNob3VsZCBub3Qg Y29udmVydCBhbGwgdGV4dCB0byBQb3N0U2NyaXB0IGJlZm9yZSIsCisiICBzZW5kaW5nIGl0IHRv IHRoZSBwcmludGVyLiIsCisiICIsCisiVGhlIGZpbmFsIHN3aXRjaCBpcyBmb3IgdXNlIHdpdGgg QXV0b1ByaW50IG1vZGUgYW5kIFNjcmVlbiBEdW1wcyIsCisiICIsCisiL0NIQVJBQ1RFUi1TRVQ6 PGNoYXJhY3Rlci1zZXQ+IiwKKyIgIFNwZWNpZmllcyB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5 IHRoZSBwcmludGVyIHdoaWNoIG1heSBiZSBkaWZmZXJlbnQiLAorIiAgZnJvbSBib3RoIHRoZSBj aGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIGhvc3QgYW5kIGJ5IHRoZSBsb2NhbCBjb21wdXRlci4i LAorIiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgQ1A0MzcuIiwKKyIgIiwKKyJTSE9XIFBSSU5URVIg ZGlzcGxheXMgeW91ciBjdXJyZW50IHByaW50ZXIgc2V0dGluZ3MuIiwKKyNlbHNlCisjaWZkZWYg VU5JWAorIlN5bnRheDogU0VUIFBSSU5URVIgWyB7IHxjb21tYW5kLCBmaWxlbmFtZSB9IF0iLAor IiAgU3BlY2lmaWVzIHRoZSBjb21tYW5kIChzdWNoIGFzIFwifGxwclwiKSBvciBmaWxlbmFtZSB0 byBiZSB1c2VkIGJ5IHRoZSIsCisiICBQUklOVCBjb21tYW5kLiAgSWYgYSBmaWxlbmFtZSBpcyBn aXZlbiwgZWFjaCBQUklOVCBjb21tYW5kIGFwcGVuZHMgdG8gdGhlIiwKKyIgIGdpdmVuIGZpbGUu ICBJZiB0aGUgU0VUIFBSSU5URVIgYXJndW1lbnQgY29udGFpbnMgc3BhY2VzLCBpdCBtdXN0IGJl IiwKKyIgIGVuY2xvc2VkIGluIGJyYWNlcywgZS5nLiBcInNldCBwcmludGVyIHt8IGxwciAtUGxh c2VyfVwiLiBJZiB0aGUgYXJndW1lbnQiLAorIiAgaXMgb21pdHRlZCB0aGUgZGVmYXVsdCB2YWx1 ZSBpcyByZXN0b3JlZC4gIFNIT1cgUFJJTlRFUiBsaXN0cyB0aGUgY3VycmVudCIsCisiICBwcmlu dGVyLiAgU2VlIEhFTFAgUFJJTlQgZm9yIGZ1cnRoZXIgaW5mby4iLAorI2Vsc2UKKyJTb3JyeSwg U0VUIFBSSU5URVIgbm90IGF2YWlsYWJsZSB5ZXQuIiwKKyNlbmRpZiAvKiBVTklYICovCisjZW5k aWYgLyogUFJJTlRTV0kgKi8KKyIifTsKKworI2lmZGVmIE9TMgorI2lmZGVmIEJQUklOVAorc3Rh dGljIGNoYXIgKmh4eWJwcnRyW10gPSB7CisiU3ludGF4OiBTRVQgQlBSSU5URVIgWyBwb3J0bmFt ZSBzcGVlZCBbIHBhcml0eSBbIGZsb3ctY29udHJvbCBdIF0gXSIsCisiICAoT2Jzb2xldGUsIHJl cGxhY2VkIGJ5IFNFVCBQUklOVEVSIC9CSURJUkVDVElPTkFMLikiLAorIiJ9OworI2VuZGlmIC8q IEJQUklOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCitzdGF0aWMgY2hhciAqaHh5ZXhpdFtdID0g eworIlN5bnRheDogU0VUIEVYSVQgSEFOR1VQIHsgT04sIE9GRiB9IiwKKyIgIFdoZW4gT04gKHdo aWNoIGlzIHRoZSBkZWZhdWx0KSwgQy1LZXJtaXQgZXhlY3V0ZXMgYW4gaW1wbGljaXQgSEFOR1VQ IGFuZCIsCisiICBDTE9TRSBjb21tYW5kIG9uIHRoZSBjb21tdW5pY2F0aW9ucyBkZXZpY2Ugb3Ig Y29ubmVjdGlvbiB3aGVuIGl0IGV4aXRzLiIsCisiICBXaGVuIE9GRiwgS2VybWl0IHNraXBzIHRo aXMgc2VxdWVuY2UuIiwKKyIgIiwKKyJTeW50YXg6IFNFVCBFWElUIE9OLURJU0NPTk5FQ1QgeyBP TiwgT0ZGIH0iLAorIiAgV2hlbiBPTiwgQy1LZXJtaXQgRVhJVHMgYXV0b21hdGljYWxseSB3aGVu IGEgbmV0d29yayBjb25uZWN0aW9uIiwKKyIgIGlzIHRlcm1pbmF0ZWQgZWl0aGVyIGJ5IHRoZSBo b3N0IG9yIGJ5IGlzc3VpbmcgYSBIQU5HVVAgY29tbWFuZC4iLAorIiAiLAorIlN5bnRheDogU0VU IEVYSVQgU1RBVFVTIG51bWJlciIsCisjaWZkZWYgTk9TUEwKKyIgIFNldCBDLUtlcm1pdCdzIHBy b2dyYW0gcmV0dXJuIGNvZGUgdG8gdGhlIGdpdmVuIG51bWJlci4iLAorI2Vsc2UKKyIgIFNldCBD LUtlcm1pdCdzIHByb2dyYW0gcmV0dXJuIGNvZGUgdG8gdGhlIGdpdmVuIG51bWJlciwgd2hpY2gg Y2FuIGJlIGEiLAorIiAgY29uc3RhbnQsIHZhcmlhYmxlLCBmdW5jdGlvbiByZXN1bHQsIG9yIGFy aXRobWV0aWMgZXhwcmVzc2lvbi4iLAorI2VuZGlmIC8qIE5PU1BMICovCisiICIsCisiU3ludGF4 OiBTRVQgRVhJVCBXQVJOSU5HIHsgT04sIE9GRiwgQUxXQVlTIH0iLAorIiAgV2hlbiBFWElUIFdB Uk5JTkcgaXMgT04sIGlzc3VlIGEgd2FybmluZyBtZXNzYWdlIGFuZCBhc2sgZm9yIGNvbmZpcm1h dGlvbiIsCisiICBiZWZvcmUgRVhJVGluZyBpZiBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlciBjb21w dXRlciBtaWdodCBzdGlsbCBiZSBvcGVuLiIsCisiICBXaGVuIEVYSVQgV0FSTklORyBpcyBBTFdB WVMsIGNvbmZpcm1hdGlvbiBpcyBhbHdheXMgcmVxdWVzdGVkLiAgV2hlbiBPRkYiLAorIiAgaXQg aXMgbmV2ZXIgcmVxdWVzdGVkLiAgVGhlIGRlZmF1bHQgaXMgT04uIiwKKyIiIH07CisKKyNpZm5k ZWYgTk9TUEwKK3N0YXRpYyBjaGFyICpoeHhwYXVbXSA9IHsKKyJTeW50YXg6ICBQQVVTRSBbIHsg bnVtYmVyLW9mLXNlY29uZHMsIGhoOm1tOnNzIH0gXSIsCisiRXhhbXBsZTogUEFVU0UgMyAgb3Ig IFBBVVNFIDE0OjUyOjMwIiwKKyIgIERvIG5vdGhpbmcgZm9yIHRoZSBzcGVjaWZpZWQgbnVtYmVy IG9mIHNlY29uZHMgb3IgdW50aWwgdGhlIGdpdmVuIHRpbWUgb2YiLAorIiAgZGF5IGluIDI0LWhv dXIgaGg6bW06c3Mgbm90YXRpb24uICBJZiB0aGUgdGltZSBvZiBkYXkgaXMgZWFybGllciB0aGFu IHRoZSIsCisiICBjdXJyZW50IHRpbWUsIGl0IGlzIGFzc3VtZWQgdG8gYmUgdG9tb3Jyb3cuICBJ ZiBubyBhcmd1bWVudCBnaXZlbiwgb25lIiwKKyIgIHNlY29uZCBpcyB1c2VkLiAgVGhlIHBhdXNl IGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0eXBpbmcgYW55IGNoYXJhY3RlciBvbiIsCisiICB0aGUg a2V5Ym9hcmQgdW5sZXNzIFNMRUVQIENBTkNFTExBVElPTiBpcyBPRkYuICBJZiBpbnRlcnJ1cHRl ZCwgUEFVU0UiLAorIiAgZmFpbHMsIG90aGVyd2lzZSBpdCBzdWNjZWVkcy4gIFN5bm9ueW06IFNM RUVQLiIsCisiIiB9OworCitzdGF0aWMgY2hhciAqaHh4bXNsW10gPSB7CisiU3ludGF4OiAgTVNM RUVQIFsgbnVtYmVyIF0iLAorIkV4YW1wbGU6IE1TTEVFUCA1MDAiLAorIiAgRG8gbm90aGluZyBm b3IgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzOyBpZiBubyBudW1iZXIgZ2l2 ZW4sIiwKKyIgIDEwMCBtaWxsaXNlY29uZHMuIiwiIiB9OworI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZm5kZWYgTk9QVVNICitleHRlcm4gaW50IG5vcHVzaDsKK3N0YXRpYyBjaGFyICpoeHhzaGVb XSA9IHsKKyJTeW50YXg6ICEsIEAsIFJVTiwgUFVTSCwgb3IgU1BBV04sIG9wdGlvbmFsbHkgZm9s bG93ZWQgYnkgYSBjb21tYW5kLiIsCisiICBHaXZlcyB0aGUgY29tbWFuZCB0byB0aGUgbG9jYWwg b3BlcmF0aW5nIHN5c3RlbSdzIGNvbW1hbmQgcHJvY2Vzc29yLCBhbmQiLAorIiAgZGlzcGxheXMg dGhlIHJlc3VsdHMgb24gdGhlIHNjcmVlbi4gIElmIHRoZSBjb21tYW5kIGlzIG9taXR0ZWQsIGVu dGVycyB0aGUiLAorIiAgc3lzdGVtJ3MgY29tbWFuZCBsaW5lIGludGVycHJldGVyIG9yIHNoZWxs OyBleGl0IGZyb20gaXQgKHRoZSBjb21tYW5kIGZvciIsCisiICB0aGlzIGlzIHVzdWFsbHkgRVhJ VCBvciBRVUlUIG9yIExPR09VVCkgdG8gcmV0dXJuIHRvIEtlcm1pdC4iLAorIiIKK307CisjZW5k aWYgLyogTk9QVVNIICovCisKKyNpZm5kZWYgTk9YTUlUCitzdGF0aWMgY2hhciAqaHh4eG1pdFtd ID0geworIlN5bnRheDogVFJBTlNNSVQgWyBzd2l0Y2hlcyBdIGZpbGVuYW1lIiwKKyIgIFNlbmRz IHRoZSBjb250ZW50cyBvZiBhIGZpbGUsIHdpdGhvdXQgYW55IGVycm9yIGNoZWNraW5nIG9yIGNv cnJlY3Rpb24sIiwKKyIgIHRvIHRoZSBjb21wdXRlciBvbiB0aGUgb3RoZXIgZW5kIG9mIHlvdXIg U0VUIExJTkUgb3IgU0VUIEhPU1QgY29ubmVjdGlvbiIsCisiICAob3IgaWYgQy1LZXJtaXQgaXMg aW4gcmVtb3RlIG1vZGUsIGRpc3BsYXlzIGl0IG9uIHRoZSBzY3JlZW4pLiAgVGhlIiwKKyIgIGZp bGVuYW1lIGlzIHRoZSBuYW1lIG9mIGEgc2luZ2xlIGZpbGUgKG5vIHdpbGRjYXJkcykgdG8gYmUg c2VudCBvciwgaWYiLAorIiAgdGhlIC9QSVBFIHN3aXRjaCBpcyBpbmNsdWRlZCwgdGhlIG5hbWUg b2YgYSBjb21tYW5kIHdob3NlIG91dHB1dCBpcyB0byBiZSIsCisiICBzZW50LiIsCisiICIsCisi ICBUaGUgZmlsZSBpcyBzZW50IGFjY29yZGluZyB0byB5b3VyIGN1cnJlbnQgRklMRSBUWVBFIHNl dHRpbmcgKEJJTkFSWSBvciIsCisiICBURVhUKSwgd2hpY2ggeW91IGNhbiBvdmVycmlkZSB3aXRo IGEgL0JJTkFSWSBvciAvVEVYVCBzd2l0Y2ggd2l0aG91dCIsCisiICBjaGFuZ2luZyB0aGUgZ2xv YmFsIHNldHRpbmcuICBJbiB0ZXh0IG1vZGUsIGl0IGlzIHNlbnQgYSBsaW5lIGF0IGEgdGltZSwi LAorIiAgd2l0aCBjYXJyaWFnZSByZXR1cm4gYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUgKGFzIGlm IHlvdSB3ZXJlIHR5cGluZyBpdCBhdCIsCisiICB5b3VyIGtleWJvYXJkKSwgYW5kIEMtS2VybWl0 IHdhaXRzIGZvciBhIGxpbmVmZWVkIHRvIGVjaG8gYmVmb3JlIHNlbmRpbmciLAorIiAgdGhlIG5l eHQgbGluZTsgdXNlIC9OT1dBSVQgdG8gZWxpbWluYXRlIHRoZSBmZWVkYmFjayByZXF1aXJlbWVu dC4gIEluIiwKKyIgIGJpbmFyeSBtb2RlLCBpdCBpcyBzZW50IGEgY2hhcmFjdGVyIGF0IGEgdGlt ZSwgd2l0aCBubyBmZWVkYmFjayByZXF1aXJlZC4iLAorIiAiLAorIiAgTm9ybWFsbHkgdGhlIHRy YW5zbWl0dGVkIG1hdGVyaWFsIGlzIGVjaG9lZCB0byB5b3VyIHNjcmVlbi4gIFVzZSBTRVQiLAor IiAgVFJBTlNNSVQgRUNITyBPRkYgb3IgdGhlIC9OT0VDSE8gc3dpdGNoIHRvIHN1cHByZXNzIGVj aG9pbmcuICBOb3RlIHRoYXQiLAorIiAgVFJBTlNNSVQgL05PRUNITyAvTk9XQUlUIC9CSU5BUlkg aXMgYSBzcGVjaWFsIGNhc2UsIHRoYXQgbW9yZSBvciBsZXNzIiwKKyIgIGJsYXN0cyB0aGUgZmls ZSBvdXQgYXQgZnVsbCBzcGVlZC4iLAorIiAiLAorI2lmbmRlZiBOT0NTRVRTCisiICBDaGFyYWN0 ZXIgc2V0cyBhcmUgdHJhbnNsYXRlZCBhY2NvcmRpbmcgdG8geW91ciBjdXJyZW50IEZJTEUgYW5k IFRFUk1JTkFMIiwKKyIgIENIQVJBQ1RFUi1TRVQgc2V0dGluZ3Mgd2hlbiBUUkFOU01JVCBpcyBp biB0ZXh0IG1vZGUuICBJbmNsdWRlIC9UUkFOU1BBUkVOVCIKKywKKyIgIHRvIGRpc2FibGUgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvbiBpbiB0ZXh0IG1vZGUgKC9UUkFOU1BBUkVOVCBpbXBsaWVz IiwKKyIgIC9URVhUKS4iLAorIiAiLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyIgIFRoZXJlIGNh biBiZSBubyBndWFyYW50ZWUgdGhhdCB0aGUgb3RoZXIgY29tcHV0ZXIgd2lsbCByZWNlaXZlIHRo ZSBmaWxlIiwKKyIgIGNvcnJlY3RseSBhbmQgY29tcGxldGVseS4gIEJlZm9yZSB5b3Ugc3RhcnQg dGhlIFRSQU5TTUlUIGNvbW1hbmQsIHlvdSIsCisiICBtdXN0IHB1dCB0aGUgb3RoZXIgY29tcHV0 ZXIgaW4gZGF0YSBjb2xsZWN0aW9uIG1vZGUsIGZvciBleGFtcGxlIGJ5IiwKKyIgIHN0YXJ0aW5n IGEgdGV4dCBlZGl0b3IuICBUUkFOU01JVCBtYXkgYmUgaW50ZXJydXB0ZWQgYnkgQ3RybC1DLiAg U3lub255bToiLAorIiAgWE1JVC4gIFNlZSBIRUxQIFNFVCBUUkFOU01JVCBmb3IgZnVydGhlciBp bmZvcm1hdGlvbi4iLAorIiIgfTsKKyNlbmRpZiAvKiBOT1hNSVQgKi8KKworI2lmbmRlZiBOT0NT RVRTCitzdGF0aWMgY2hhciAqaHh4eGxhW10gPSB7CisiU3ludGF4OiBUUkFOU0xBVEUgZmlsZTEg Y3MxIGNzMiBbIGZpbGUyIF0iLAorIiAgVHJhbnNsYXRlcyBmaWxlMSBmcm9tIHRoZSBjaGFyYWN0 ZXIgc2V0IGNzMSBpbnRvIHRoZSBjaGFyYWN0ZXIgc2V0IGNzMiIsCisiICBhbmQgc3RvcmVzIHRo ZSByZXN1bHQgaW4gZmlsZTIuICBUaGUgY2hhcmFjdGVyIHNldHMgY2FuIGJlIGFueSBvZiIsCisi ICBDLUtlcm1pdCdzIGZpbGUgY2hhcmFjdGVyIHNldHMuICBJZiBmaWxlMiBpcyBvbWl0dGVkLCB0 aGUgdHJhbnNsYXRpb24iLAorIiAgaXMgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uICBBbiBhcHBy b3ByaWF0ZSBpbnRlcm1lZGlhdGUgY2hhcmFjdGVyLXNldCIsCisiICBpcyBjaG9zZW4gYXV0b21h dGljYWxseSwgaWYgbmVjZXNzYXJ5LiAgU3lub255bTogWExBVEUuICBFeGFtcGxlOiIsCisiICIs CisiICAgIFRSQU5TTEFURSBsYXNhZ25hLmxhdCBsYXRpbjEgaXRhbGlhbiBsYXNhZ25hLm5yYyIs CisiICIsCisiICBNdWx0aXBsZSBmaWxlcyBjYW4gYmUgdHJhbnNsYXRlZCBpZiBmaWxlMiBpcyBh IGRpcmVjdG9yeSBvciBkZXZpY2UgbmFtZSwiLAorIiAgcmF0aGVyIHRoYW4gYSBmaWxlbmFtZSwg b3IgaWYgZmlsZTIgaXMgb21pdHRlZC4iLAorIiIgfTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisK KyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBjaGFyICpoeHh3YWlbXSA9IHsKKyJTeW50YXg6IFdBSVQg eyBudW1iZXItb2Ytc2Vjb25kcywgaGg6bW06c3MgfSBbIDx3aGF0PiBdIiwKKyIgIiwKKyJFeGFt cGxlczoiLAorIiAgd2FpdCA1IGNkIGN0cyIsCisiICB3YWl0IDIzOjU5OjU5IGNkIiwKKyIgIiwK KyIgIFdhaXRzIHVwIHRvIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBvciB0aGUgZ2l2ZW4g dGltZSBvZiBkYXkgZm9yIHRoZSIsCisiICBzcGVjaWZpZWQgaXRlbSBvciBldmVudCwgd2hpY2gg Y2FuIGJlIEZJTEUsIHRoZSBuYW1lKHMpIG9mIG9uZSBvciBtb3JlIiwKKyIgIG1vZGVtIHNpZ25h bHMsIG9yIG5vdGhpbmcuICBJZiBub3RoaW5nIGlzIHNwZWNpZmllZCwgV0FJVCBhY3RzIGxpa2Ug U0xFRVAuIiwKKyIgIElmIG9uZSBvciBtb3JlIG1vZGVtIHNpZ25hbCBuYW1lcyBhcmUgZ2l2ZW4s IEtlcm1pdCB3YWl0cyBmb3IgdGhlIHNwZWNpZmllZCIKKywKKyIgIG1vZGVtIHNpZ25hbHMgdG8g YXBwZWFyIG9uIHRoZSBzZXJpYWwgY29tbXVuaWNhdGlvbiBkZXZpY2UuIiwKKyIgIFNldHMgRkFJ TFVSRSBpZiB0aGUgc2lnbmFscyBkbyBub3QgYXBwZWFyIGluIHRoZSBnaXZlbiB0aW1lIG9yIGlu dGVycnVwdGVkIiwKKyIgIGZyb20gdGhlIGtleWJvYXJkIGR1cmluZyB0aGUgd2FpdGluZyBwZXJp b2QuIiwKKyIgIiwKKyJTaWduYWxzOiIsCisiICBjZCAgPSBDYXJyaWVyIERldGVjdDsiLAorIiAg ZHNyID0gRGF0YXNldCBSZWFkeTsiLAorIiAgY3RzID0gQ2xlYXIgVG8gU2VuZDsiLAorIiAgcmkg ID0gUmluZyBJbmRpY2F0ZS4iLAorIiAiLAorIklmIHlvdSB3YW50IEtlcm1pdCB0byB3YWl0IGZv ciBhIGZpbGUgZXZlbnQsIHRoZW4gdGhlIHN5bnRheCBpczoiLAorIiAiLAorIiAgV0FJVCA8dGlt ZT4gRklMRSB7IENSRUFUSU9OLCBERUxFVElPTiwgTU9ESUZJQ0FUSU9OIH0gPGZpbGVuYW1lPiIs CisiICIsCisid2hlcmUgPHRpbWU+IGlzIGFzIGFib3ZlLCBhbmQgPGZpbGVuYW1lPiBpcyB0aGUg bmFtZSBvZiBhIHNpbmdsZSBmaWxlLiIsCisiS2VybWl0IHdhaXRzIHVwIHRvIHRoZSBnaXZlbiBh bW91bnQgb2YgdGltZSBmb3IgdGhlIHNwZWNpZmllZCBldmVudCB0byBvY2N1ciIsCisid2l0aCB0 aGUgc3BlY2lmaWVkIGZpbGUsIHN1Y2NlZWRzIGlmIGl0IGRvZXMsIGZhaWxzIGlmIGl0IGRvZXNu J3QuIiwKKyIiIH07CisjZW5kaWYgLyogTk9TUEwgKi8KKworc3RhdGljIGNoYXIgKmh4eHdyaVtd ID0geworIlN5bnRheDogV1JJVEUgbmFtZSB0ZXh0IiwKKyIgIFdyaXRlcyB0aGUgZ2l2ZW4gdGV4 dCB0byB0aGUgbmFtZWQgbG9nIG9yIGZpbGUuICBUaGUgdGV4dCB0ZXh0IG1heSBpbmNsdWRlIiwK KyIgIGJhY2tzbGFzaCBjb2RlcywgYW5kIGlzIG5vdCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSB1 bmxlc3MgeW91IGluY2x1ZGUgdGhlIiwKKyIgIGFwcHJvcHJpYXRlIGNvZGUuICBUaGUgbmFtZSBw YXJhbWV0ZXIgY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOiIsCisiICIsCisiICAgREVCVUct TE9HIiwKKyIgICBFUlJPUiAoc3RhbmRhcmQgZXJyb3IpIiwKKyNpZm5kZWYgTk9TUEwKKyIgICBG SUxFICh0aGUgT1BFTiBXUklURSwgT1BFTiAhV1JJVEUsIG9yIE9QRU4gQVBQRU5EIGZpbGUsIHNl ZSBIRUxQIE9QRU4pIiwKKyNlbmRpZiAvKiBOT1NQTCAqLworIiAgIFBBQ0tFVC1MT0ciLAorIiAg IFNDUkVFTiAoY29tcGFyZSB3aXRoIEVDSE8pIiwKKyNpZm5kZWYgTk9MT0NBTAorIiAgIFNFU1NJ T04tTE9HIiwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisiICAgVFJBTlNBQ1RJT04tTE9HIiwgIiIg fTsKKworI2lmbmRlZiBOT0RJQUwKK3N0YXRpYyBjaGFyICpoeHhsb29rW10gPSB7ICJTeW50YXg6 IExPT0tVUCBuYW1lIiwKKyIgIExvb2tzIHVwIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBkaWFsaW5n IGRpcmVjdG9yeSBvciBkaXJlY3RvcmllcywgaWYgYW55LCIsCisiICBzcGVjaWZpZWQgaW4gdGhl IG1vc3QgcmVjZW50IFNFVCBESUFMIERJUkVDVE9SWSBjb21tYW5kLiAgRWFjaCBtYXRjaGluZyIs CisiICBlbnRyeSBpcyBzaG93biwgYWxvbmcgd2l0aCBhbnkgdHJhbnNmb3JtYXRpb25zIHRoYXQg d291bGQgYmUgYXBwbGllZCB0byIsCisiICBwb3J0YWJsZS1mb3JtYXQgZW50cmllcyBiYXNlZCBv biB5b3VyIGxvY2FsZS4gIEhFTFAgRElBTCwgSEVMUCBTRVQgRElBTCIsCisiICBmb3IgZnVydGhl ciBpbmZvLiIsCisiIgorfTsKKworc3RhdGljIGNoYXIgKmh4eGFuc3dbXSA9IHsgIlN5bnRheDog IEFOU1dFUiBbIDxzZWNvbmRzPiBdIiwKKyNpZmRlZiBPUzIKKyIgIFdhaXRzIGZvciBhIG1vZGVt IGNhbGwgdG8gY29tZSBpbi4gIFByaW9yIFNFVCBNT0RFTSBUWVBFIGFuZCBTRVQgUE9SVCIsCisj ZWxzZQorIiAgV2FpdHMgZm9yIGEgbW9kZW0gY2FsbCB0byBjb21lIGluLiAgUHJpb3IgU0VUIE1P REVNIFRZUEUgYW5kIFNFVCBMSU5FIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIHJlcXVpcmVkLiAg SWYgPHNlY29uZHM+IGlzIDAgb3Igbm90IHNwZWNpZmllZCwgS2VybWl0IHdhaXRzIGZvcmV2ZXIg b3IiLAorIiAgdW50aWwgaW50ZXJydXB0ZWQsIG90aGVyd2lzZSBLZXJtaXQgd2FpdHMgdGhlIGdp dmVuIG51bWJlciBvZiBzZWNvbmRzLiIsCisiICBUaGUgQU5TV0VSIGNvbW1hbmQgcHV0cyB0aGUg bW9kZW0gaW4gYXV0b2Fuc3dlciBtb2RlLiAgU3Vic2VxdWVudCBESUFMIiwKKyIgIGNvbW1hbmRz IHdpbGwgYXV0b21hdGljYWxseSBwdXQgaXQgKGJhY2spIGluIG9yaWdpbmF0ZSBtb2RlLiAgU0hP VyBNT0RFTSwiLAorIiAgSEVMUCBTRVQgTU9ERU0gZm9yIG1vcmUgaW5mby4iLAorIiIKK307CisK K3N0YXRpYyBjaGFyICpoeHhkaWFsW10gPSB7ICJTeW50YXg6ICBESUFMIHBob25lbnVtYmVyIiwK KyJFeGFtcGxlOiBESUFMIDc2NTQzMjEiLAorIiAgXAorRGlhbHMgYSBudW1iZXIgdXNpbmcgYW4g YXV0b2RpYWwgbW9kZW0uICBGaXJzdCB5b3UgbXVzdCBTRVQgTU9ERU0gVFlQRSwgdGhlbiIsCisj aWZkZWYgT1MyCisiICBTRVQgUE9SVCAob3IgaW4gV2luZG93cyBvbmx5LCBTRVQgUE9SVCBUQVBJ IGluc3RlYWQgb2YgU0VUIE1PREVNIFRZUEUgYW5kIiwKKyIgIFNFVCBMSU5FKSwgdGhlbiBTRVQg U1BFRUQuIFRoZW4gZ2l2ZSB0aGUgRElBTCBjb21tYW5kLCBpbmNsdWRpbmcgdGhlIHBob25lIiwK KyNlbHNlCisiICBTRVQgTElORSwgdGhlbiBTRVQgU1BFRUQuICBUaGVuIGdpdmUgdGhlIERJQUwg Y29tbWFuZCwgaW5jbHVkaW5nIHRoZSBwaG9uZSIsCisjZW5kaWYgLyogT1MyICovCisiICBudW1i ZXIsIGZvciBleGFtcGxlOiIsCisiICIsCisiICAgRElBTCA3NjU0MzIxIiwKKyNpZmRlZiBORVRD T05OCisiICIsCisiICBJZiB0aGUgbW9kZW0gaXMgb24gYSBuZXR3b3JrIG1vZGVtIHNlcnZlciwg U0VUIEhPU1QgZmlyc3QsIHRoZW4gU0VUIE1PREVNIiwKKyIgIFRZUEUsIHRoZW4gRElBTC4iLAor I2VuZGlmIC8qIE5FVENPTk4gKi8KKyIgIiwKKyJJZiB5b3UgZ2l2ZSB0aGUgRElBTCBjb21tYW5k IGludGVyYWN0aXZlbHkgYXQgdGhlIEtlcm1pdCBwcm9tcHQsIGFuZCB0aGUiLAorImNhbGwgaXMg cGxhY2VkIHN1Y2Nlc3NmdWxseSwgS2VybWl0IGF1dG9tYXRpY2FsbHkgZW50ZXJzIENPTk5FQ1Qg bW9kZS4iLAorIklmIHRoZSBESUFMIGNvbW1hbmQgaXMgZ2l2ZW4gZnJvbSBhIG1hY3JvIG9yIGNv bW1hbmQgZmlsZSwgS2VybWl0IHJlbWFpbnMiLAorImluIGNvbW1hbmQgbW9kZSBhZnRlciB0aGUg Y2FsbCBpcyBwbGFjZWQsIHN1Y2Nlc3NmdWxseSBvciBub3QuICBZb3UgY2FuIiwKKyJjaGFuZ2Ug dGhpcyBiZWhhdmlvciB3aXRoIHRoZSBTRVQgRElBTCBDT05ORUNUIGNvbW1hbmQuIiwKKyIgIiwK KyJJZiB0aGUgcGhvbmVudW1iZXIgc3RhcnRzIHdpdGggYSBsZXR0ZXIsIGFuZCBpZiB5b3UgaGF2 ZSB1c2VkIHRoZSBTRVQgRElBTCIsCisiRElSRUNUT1JZIGNvbW1hbmQgdG8gc3BlY2lmeSBvbmUg b3IgbW9yZSBkaWFsaW5nLWRpcmVjdG9yeSBmaWxlcywgS2VybWl0IiwKKyJsb29rcyBpdCB1cCBp biB0aGUgZ2l2ZW4gZmlsZShzKTsgaWYgaXQgaXMgZm91bmQsIHRoZSBuYW1lIGlzIHJlcGxhY2Vk IGJ5IiwKKyJ0aGUgbnVtYmVyIG9yIG51bWJlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lLiAg SWYgaXQgaXMgbm90IGZvdW5kLCB0aGUiLAorIm5hbWUgaXMgc2VudCB0byB0aGUgbW9kZW0gbGl0 ZXJhbGx5LiIsCisiICIsCisiSWYgdGhlIHBob25lbnVtYmVyIHN0YXJ0cyB3aXRoIGFuIGVxdWFs cyBzaWduIChcIj1cIiksIHRoaXMgZm9yY2VzIHRoZSBwYXJ0IiwKKyJhZnRlciB0aGUgPSB0byBi ZSBzZW50IGxpdGVyYWxseSB0byB0aGUgbW9kZW0sIGV2ZW4gaWYgaXQgc3RhcnRzIHdpdGggYSIs CisibGV0dGVyLCB3aXRob3V0IGFueSBkaXJlY3RvcnkgbG9va3VwLiIsCisiICIsCisiWW91IGNh biBhbHNvIGdpdmUgYSBsaXN0IG9mIHBob25lIG51bWJlcnMgZW5jbG9zZWQgaW4gYnJhY2VzLCBl Lmc6IiwKKyIgIiwKKyIgIGRpYWwge3s3NjU0MzIxfXs4NzY1NDMyfXsrMSAoMjEyIDU1NS0xMjEy fX0iLAorIiAiLAorIihFYWNoIG51bWJlciBpcyBlbmNsb3NlZCBpbiBicmFjZXMgYW5kIHRoZSBl bnRpcmUgbGlzdCBpcyBhbHNvIGVuY2xvc2VkIGluIiwKKyJicmFjZXMuKSAgSW4gdGhpcyBjYXNl LCBlYWNoIG51bWJlciBpcyB0cmllZCB1bnRpbCB0aGVyZSBpcyBhbiBhbnN3ZXIuICBUaGUiLAor InBob25lIG51bWJlcnMgaW4gdGhpcyBraW5kIG9mIGxpc3QgY2FuIG5vdCBiZSBuYW1lcyBvZiBk aWFsaW5nIGRpcmVjdG9yeSIsCisiZW50cmllcy4iLAorIiAiLAorIkEgZGlhbGluZyBkaXJlY3Rv cnkgaXMgYSBwbGFpbiB0ZXh0IGZpbGUsIG9uZSBlbnRyeSBwZXIgbGluZToiLAorIiAiLAorIiAg bmFtZSAgcGhvbmVudW1iZXIgIDsgIGNvbW1lbnRzIiwKKyIgIiwKKyJmb3IgZXhhbXBsZToiLAor IiAiLAorIiAgd29yayAgICA5ODc2NTQzICAgICAgICAgICAgICA7IFRoaXMgaXMgYSBjb21tZW50 IiwKKyIgIGUtbWFpbCAgKzEgICgyMTIpIDU1NSA0MzIxICAgOyBNeSBlbGVjdHJvbmljIG1haWxi b3giLAorIiAgZ2VybWFueSArNDkgKDUxMSkgNTU1IDEyMzQgICA7IE91ciBicmFuY2ggaW4gSGFu b3ZlciIsCisiICIsCisiSWYgYSBwaG9uZSBudW1iZXIgc3RhcnRzIHdpdGggKywgdGhlbiBpdCBt dXN0IGluY2x1ZGUgY291bnRyeSBjb2RlIGFuZCIsCisiYXJlYSBjb2RlLCBhbmQgQy1LZXJtaXQg d2lsbCB0cnkgdG8gaGFuZGxlIHRoZXNlIGFwcHJvcHJpYXRlbHkgYmFzZWQgb24iLAorInRoZSBj dXJyZW50IGxvY2FsZSAoSEVMUCBTRVQgRElBTCBmb3IgZnVydGhlciBpbmZvKTsgdGhlc2UgYXJl IGNhbGxlZCIsCisiUE9SVEFCTEUgZW50cmllcy4gIElmIGl0IGRvZXMgbm90IHN0YXJ0IHdpdGgg KywgaXQgaXMgZGlhbGVkIGxpdGVyYWxseS4iLAorIiAiLAorIklmIG1vcmUgdGhhbiBvbmUgZW50 cnkgaXMgZm91bmQgd2l0aCB0aGUgc2FtZSBuYW1lLCBLZXJtaXQgZGlhbHMgYWxsIG9mIiwKKyJ0 aGVtIHVudGlsIHRoZSBjYWxsIGlzIGNvbXBsZXRlZDsgaWYgdGhlIGVudHJpZXMgYXJlIGluIHBv cnRhYmxlIGZvcm1hdCwiLAorIktlcm1pdCBkaWFscyB0aGVtIGluIGNoZWFwLXRvLWV4cGVuc2l2 ZSBvcmRlcjogaW50ZXJuYWwsIHRoZW4gbG9jYWwsIHRoZW4iLAorImxvbmctZGlzdGFuY2UsIHRo ZW4gaW50ZXJuYXRpb25hbCwgYmFzZWQgb24gaXRzIGtub3dsZWRnZSBvZiB5b3VyIGxvY2FsIiwK KyJjb3VudHJ5IGNvZGUgYW5kIGFyZWEgY29kZSAoc2VlIEhFTFAgU0VUIERJQUwpLiIsCisiICIs CisiU3BlY2lmeSB5b3VyIGRpYWxpbmcgZGlyZWN0b3J5IGZpbGUocykgd2l0aCB0aGUgU0VUIERJ QUwgRElSRUNUT1JZIGNvbW1hbmQuIiwKKyIgIiwKKyNpZmRlZiBORVRDT05OCisiU2VlIGFsc28g U0VUIERJQUwsIFNFVCBNT0RFTSwgU0VUIExJTkUsIFNFVCBIT1NULCBTRVQgU1BFRUQsIFJFRElB TCwgYW5kIiwKKyJQRElBTC4iLAorI2Vsc2UKKyJTZWUgYWxzbyBTRVQgRElBTCwgU0VUIE1PREVN LCBTRVQgTElORSwgU0VUIFNQRUVELCBQRElBTCwgYW5kIFJFRElBTC4iLAorI2VuZGlmIC8qIE5F VENPTk4gKi8KKyIiIH07CisKKyNpZmRlZiBDS19UQVBJCitzdGF0aWMgY2hhciAqaHh4dGFwaVtd ID0geworIlRBUEkgQ09ORklHVVJFLUxJTkUgPHRhcGktbGluZT4iLAorIiAgRGlzcGxheXMgdGhl IFRBUEkgQ29uZmlndXJlIExpbmUgRGlhbG9nIGJveCBhbmQgYWxsb3dzIHlvdSB0byIsCisiICBh bHRlciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIDx0YXBpLWxp bmU+LiIsCisiICIsCisiVEFQSSBESUFMSU5HLVBST1BFUlRJRVMiLAorIiAgRGlzcGxheXMgdGhl IFRBUEkgRGlhbGluZyBQcm9wZXJ0aWVzIChsb2NhdGlvbnMpIERpYWxvZyBib3guICBUaGUiLAor IiAgRGlhbGluZyBydWxlcyBtYXkgYmUgY2hhbmdlZCBhbmQgbG9jYXRpb25zIGNyZWF0ZWQgYW5k IGRlbGV0ZWQuIiwKKyIgIFdoZW4gdGhlIGRpYWxvZyBib3ggaXMgY2xvc2VkLCBLLTk1IGltcG9y dHMgdGhlIGN1cnJlbnQgRGlhbGluZyIsCisiICBQcm9wZXJ0aWVzJyBMb2NhdGlvbiBpbnRvIHRo ZSBLZXJtaXQgRElBTCBjb21tYW5kIHNldHRpbmdzLiIsCisiIn07CisKK3N0YXRpYyBjaGFyICpo eHl0YXBpW10gPSB7CisiU0VUIFRBUEkgTElORSA8dGFwaS1saW5lPiIsCisiICBPcGVucyBhIFRB UEkgZGV2aWNlIGZvciB1c2UgYnkgS2VybWl0LiIsCisiICIsCisiU0VUIFRBUEkgTU9ERU0tRElB TElORyB7T04sIFtPRkZdfSIsCisiICBJZiBUQVBJIE1PREVNLURJQUxJTkcgaXMgT0ZGIHdoZW4g U0VUIFRBUEkgTElORSBpcyBpc3N1ZWQsIEtlcm1pdCBvcGVucyIsCisiICB0aGUgVEFQSSBkZXZp Y2UgZGlyZWN0bHkgYXMgYSBcInJhdyBwb3J0XCIuICBUaGUgZGV2aWNlIGlzIHVuYXZhaWxhYmxl IHRvIiwKKyIgIG90aGVyIGFwcGxpY2F0aW9ucyBhbmQgS2VybWl0IHBlcmZvcm1zIGRpYWxpbmcg ZnVuY3Rpb25zIHVzaW5nIGl0cyIsCisiICBidWlsdC1pbiBkaWFsaW5nIGFuZCBtb2RlbSBkYXRh YmFzZXMuICBJZiBUQVBJIE1PREVNLURJQUxJTkcgaXMgT04sIFRBUEkiLAorIiAgaGFuZGxlcyBh bGwgZGlhbGluZyBmdW5jdGlvbnMgYW5kIHRoZSBwb3J0IG1heSBiZSBzaGFyZWQgd2l0aCBvdGhl ciIsCisiICBhcHBsaWNhdGlvbnMgd2hlbiBhIGNhbGwgaXMgbm90IGFjdGl2ZS4gIFdoZW4gVEFQ SSBNT0RFTS1ESUFMSU5HIGlzIE9GRiwiLAorIiAgU0VUIE1PREVNIFRZUEUgVEFQSSBLZXJtaXQg dXNlcyB0aGUgVEFQSSBtb2RlbSBjb21tYW5kcyBpbXBvcnRlZCBmcm9tIHRoZSIsCisiICBXaW5k b3dzIFJlZ2lzdHJ5IGR1cmluZyB0aGUgcHJldmlvdXMgU0VUIFRBUEkgTElORSBjYWxsLiIsCisi ICIsCisiU0VUIFRBUEkgTE9DQVRJT04gPHRhcGktbG9jYXRpb24+IiwKKyIgIFNwZWNpZmllcyB0 aGUgVEFQSSBsb2NhdGlvbiB0byBtYWtlIGN1cnJlbnQgZm9yIHRoZSBlbnRpcmUgc3lzdGVtLiAg VGhlIiwKKyIgIDx0YXBpLWxvY2F0aW9uPidzIGRpYWxpbmcgcHJvcGVydGllcyBhcmUgaW1wb3J0 ZWQgaW50byBLZXJtaXQncyBTRVQgRElBTCIsCisiICBjb21tYW5kIGRhdGFiYXNlLiIsCisiICIs CisiU0VUIFRBUEkgUEhPTkUtTlVNQkVSLUNPTlZFUlNJT05TIHtPTiwgT0ZGLCBbQVVUT119IiwK KyIgIENvbnRyb2xzIHdoZXRoZXIgdGhlIHBob25lIG51bWJlciBjb252ZXJzaW9ucyBhcmUgcGVy Zm9ybWVkIGJ5IFRBUEkgKE9OKSIsCisiICBvciBieSBLZXJtaXQgKE9GRiksIG9yIGFjY29yZGlu ZyB0aGUgdHlwZSBvZiBwb3J0IHRoYXQgd2FzIHNlbGVjdGVkIiwKKyIgIChBVVRPKTsgQVVUTyBp cyB0aGUgZGVmYXVsdCwgYW5kIGlzIGVxdWl2YWxlbnQgdG8gT04gaWYgdGhlIGN1cnJlbnQiLAor IiAgTElORS9QT1JUIGlzIGEgVEFQSSBkZXZpY2UgYW5kIFRBUEkgTU9ERU0tRElBTElORyBpcyBP TiwgT0ZGIG90aGVyd2lzZS4iLAorIiAiLAorIlNFVCBUQVBJIE1PREVNLUxJR0hUUyB7W09OXSwg T0ZGfSIsCisiICBEaXNwbGF5cyBhIG1vZGVtIGxpZ2h0cyBpbmRpY2F0b3Igb24gdGhlIFdpbmRv d3MgOTUgVGFza2Jhci4gIERvZXMgbm90aGluZyIsCisiICBpbiBXaW5kb3dzIE5UIDQuMC4iLAor IiAiLAorIlNFVCBUQVBJIE1BTlVBTC1ESUFMSU5HIHtPTiwgW09GRl19IiwKKyIgIERpc3BsYXlz IGEgZGlhbG9nIGJveCBkdXJpbmcgZGlhbGluZyByZXF1ZXN0aW5nIHRoYXQgeW91IG1hbnVhbGx5 IGRpYWwgdGhlIiwKKyIgIHBob25lIGJlZm9yZSBjb250aW51aW5nLiAgQXBwbGllcyBvbmx5IHdo ZW4gVEFQSSBNT0RFTS1ESUFMSU5HIGlzIE9OLiIsCisiICIsCisiU0VUIFRBUEkgV0FJVC1GT1It Q1JFRElULUNBUkQtVE9ORSA8c2Vjb25kcz4iLAorIiAgU29tZSBtb2RlbXMgZG9uJ3Qgc3VwcG9y dCB0aGUgJyQnIChCT05HKSBzeW1ib2wgZHVyaW5nIGRpYWxpbmcsIHdoaWNoIiwKKyIgIG1lYW5z IFwid2FpdCBmb3IgY3JlZGl0IGNhcmQgdG9uZSBiZWZvcmUgY29udGludWluZy5cIiAgSWYgVEFQ SSByZWNvZ25pemVzIiwKKyIgIHRoZSBtb2RlbSBhcyBvbmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0 IEJPTkcsIGl0IHJlcGxhY2VzIHRoZSAnJCcgd2l0aCIsCisiICA8c2Vjb25kcz4gd29ydGggb2Yg cGF1c2VzLiAgVGhlIGRlZmF1bHQgaXMgOCBzZWNvbmRzLiAgVGhpcyBjb21tYW5kIiwKKyIgIGFw cGxpZXMgb25seSB3aGVuIFRBUEkgTU9ERU0tRElBTElORyBpcyBPTiIsCisiICIsCisiU0VUIFRB UEkgUFJFLURJQUwtVEVSTUlOQUwge09OLCBbT0ZGXX0iLAorIlNFVCBUQVBJIFBPU1QtRElBTC1U RVJNSU5BTCB7T04sIFtPRkZdfSIsCisiICBEaXNwbGF5cyBhIHNtYWxsIHRlcm1pbmFsIHdpbmRv dyB0aGF0IG1heSBiZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIiwKKyIgIG1vZGVtIG9y IHRoZSBob3N0IHByaW9yIHRvIG9yIGltbWVkaWF0ZWx5IGFmdGVyIGRpYWxpbmc7IGFwcGxpZXMg b25seSB3aGVuIiwKKyIgIFRBUEkgTU9ERU0tRElBTElORyBpcyBPTiIsCisiICIsCisiU0VUIFRB UEkgSU5BQ1RJVklUWS1USU1FT1VUIDxtaW51dGVzPiIsCisiICBTcGVjaWZpZXMgdGhlIG51bWJl ciBvZiBtaW51dGVzIG9mIGluYWN0aXZpdHkgdGhhdCBtYXkgZ28gYnkgYmVmb3JlIFRBUEkiLAor IiAgZGlzY29ubmVjdHMgdGhlIGxpbmUuICBUaGUgZGVmYXVsdCBpcyAwIHdoaWNoIG1lYW5zIGRp c2FibGUgdGhpcyBmdW5jdGlvbi4iLAorIiAgQXBwbGllcyBvbmx5IHdoZW4gVEFQSSBNT0RFTS1E SUFMSU5HIGlzIE9OLiIsCisiICIsCisiU0VUIFRBUEkgVVNFLVdJTkRPV1MtQ09ORklHVVJBVElP TiB7T04sIFtPRkZdfSIsCisiICBTcGVjaWZpZXMgd2hldGhlciB0aGUgVEFQSSBtb2RlbSB2YWx1 ZXMgZm9yIHNwZWVkLCBwYXJpdHksIHN0b3AgYml0cywgZmxvdyIsCisiICBjb250cm9sLCBldGMu IGFyZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgdmFsdWVzIHNwZWNpZmllZCIs CisiICB3aXRoaW4gS2VybWl0LTk1LiIsCisiICIsCisiIn07CisjZW5kaWYgLyogQ0tfVEFQSSAq LworCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZmRlZiBUTkNPREUKK3N0YXRpYyBjaGFyICpo bXh4aWtzW10gPSB7CisiU3ludGF4OiBJS1MgWyBzd2l0Y2hlcyBdIFsgaG9zdCBbIHNlcnZpY2Ug XSBdIiwKKyIgIEVzdGFibGlzaGVzIGEgbmV3IGNvbm5lY3Rpb24gdG8gYW4gSW50ZXJuZXQgS2Vy bWl0IFNlcnZpY2UgZGFlbW9uLiIsCisiICBFcXVpdmFsZW50IHRvIFNFVCBORVRXT1JLIFRZUEUg VENQL0lQLCBTRVQgSE9TVCBob3N0IEtFUk1JVCAvVEVMTkVULCIsCisiICBJRiBTVUNDRVNTIENP Tk5FQ1QuICBJZiBob3N0IGlzIG9taXR0ZWQsIHRoZSBwcmV2aW91cyBjb25uZWN0aW9uIChpZiBh bnkpIiwKKyIgIGlzIHJlc3VtZWQuICBEZXBlbmRpbmcgb24gaG93IEtlcm1pdCBoYXMgYmVlbiBi dWlsdCBzd2l0Y2hlcyBtYXkgYmUiLAorIiAgYXZhaWxhYmxlIHRvIHJlcXVpcmUgYSBzZWN1cmUg YXV0aGVudGljYXRpb24gbWV0aG9kIGFuZCBiaWRpcmVjdGlvbmFsIiwKKyIgIGVuY3J5cHRpb24u ICBTZWUgSEVMUCBTRVQgVEVMTkVUIGZvciBtb3JlIGluZm8uIiwKKyIgIiwKKyNpZmRlZiBDS19B VVRIRU5USUNBVElPTgorIiAvQVVUSDo8dHlwZT4gaXMgZXF1aXZhbGVudCB0byBTRVQgVEVMTkVU IEFVVEggVFlQRSA8dHlwZT4gYW5kIiwKKyIgICBTRVQgVEVMT1BUIEFVVEggUkVRVUlSRUQgd2l0 aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMuICBJZiB0aGUgdHlwZSIsCisiICAgaXMgQVVUTywg dGhlbiBTRVQgVEVMT1BUIEFVVEggUkVRVUVTVEVEIGlzIGV4ZWN1dGVkIGFuZCBpZiB0aGUgdHlw ZSIsCisiICAgaXMgTk9ORSwgdGhlbiBTRVQgVEVMT1BUIEFVVEggUkVGVVNFRCBpcyBleGVjdXRl ZC4iLAorIiAiLAorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ0tfRU5D UllQVElPTgorIiAvRU5DUllQVDo8dHlwZT4gaXMgZXF1aXZhbGVudCB0byBTRVQgVEVMTkVUIEVO Q1JZUFQgVFlQRSA8dHlwZT4iLAorIiAgIGFuZCBTRVQgVEVMT1BUIEVOQ1JZUFQgUkVRVUlSRUQg UkVRVUlSRUQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMuIiwKKyIgICBJZiB0aGUgdHlw ZSBpcyBBVVRPIHRoZW4gU0VUIFRFTE9QVCBBVVRIIFJFUVVFU1RFRCBSRVFVRVNURUQgaXMgZXhl Y3V0ZWQiLAorIiAgIGFuZCBpZiB0aGUgdHlwZSBpcyBOT05FIHRoZW4gU0VUIFRFTE9QVCBFTkNS WVBUIFJFRlVTRUQgUkVGVVNFRCBpcyIsCisiICAgZXhlY3V0ZWQuIiwKKyIgIiwKKyNlbmRpZiAv KiBDS19FTkNSWVBUSU9OICovCisiIC9VU0VSSUQ6WzxuYW1lPl0iLAorIiAgIFRoaXMgc3dpdGNo IGlzIGVxdWl2YWxlbnQgdG8gU0VUIExPR0lOIFVTRVJJRCA8bmFtZT4gb3IgU0VUIFRFTE5FVCIs CisiICAgRU5WSVJPTk1FTlQgVVNFUiA8bmFtZT4uICBJZiBhIHN0cmluZyBpcyBnaXZlbiwgaXQg c2VudCB0byBob3N0IGR1cmluZyIsCisiICAgVGVsbmV0IG5lZ290aWF0aW9uczsgaWYgdGhpcyBz d2l0Y2ggaXMgZ2l2ZW4gYnV0IHRoZSBzdHJpbmcgaXMgb21pdHRlZCwiLAorIiAgIG5vIHVzZXIg SUQgaXMgc2VudCB0byB0aGUgaG9zdC4gIElmIHRoaXMgc3dpdGNoIGlzIG5vdCBnaXZlbiwgeW91 ciIsCisiICAgY3VycmVudCBVU0VSSUQgdmFsdWUsIFxcdih1c2VyaWQpLCBpcyBzZW50LiAgV2hl biBhIHVzZXJpZCBpcyBzZW50IHRvIHRoZSIsCisiICAgaG9zdCBpdCBpcyBhIHJlcXVlc3QgdG8g bG9naW4gYXMgdGhlIHNwZWNpZmllZCB1c2VyLiIsCisiICIsCisjaWZkZWYgQ0tfQVVUSEVOVElD QVRJT04KKyIgL1BBU1NXT1JEOls8c3RyaW5nPl0iLAorIiAgIFRoaXMgc3dpdGNoIGlzIGVxdWl2 YWxlbnQgdG8gU0VUIExPR0lOIFBBU1NXT1JELiAgSWYgYSBzdHJpbmcgaXMgZ2l2ZW4sIiwKKyIg ICBpdCBpcyB0cmVhdGVkIGFzIHRoZSBwYXNzd29yZCB0byBiZSB1c2VkIChpZiByZXF1aXJlZCkg YnkgYW55IFRlbG5ldCIsCisiICAgQXV0aGVudGljYXRpb24gcHJvdG9jb2wgKEtlcmJlcm9zIFRp Y2tldCByZXRyaWV2YWwsIFNlY3VyZSBSZW1vdGUiLAorIiAgIFBhc3N3b3JkLCBvciBYLjUwOSBj ZXJ0aWZpY2F0ZSBwcml2YXRlIGtleSBkZWNyeXB0aW9uLikgIElmIG5vIHBhc3N3b3JkIiwKKyIg ICBzd2l0Y2ggaXMgc3BlY2lmaWVkIGEgcHJvbXB0IGlzIGlzc3VlZCB0byByZXF1ZXN0IHRoZSBw YXNzd29yZCBpZiBvbmUiLAorIiAgIGlzIHJlcXVpcmVkIGZvciB0aGUgbmVnb3RpYXRlZCBhdXRo ZW50aWNhdGlvbiBtZXRob2QuIiwKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworIiJ9 OworCitzdGF0aWMgY2hhciAqaG14eHRlbFtdID0geworIlN5bnRheDogVEVMTkVUIFsgc3dpdGNo ZXMgXSBbIGhvc3QgWyBzZXJ2aWNlIF0gXSIsCisiICBFcXVpdmFsZW50IHRvIFNFVCBORVRXT1JL IFRZUEUgVENQL0lQLCBTRVQgSE9TVCBob3N0IFsgc2VydmljZSBdIC9URUxORVQsIiwKKyIgIElG IFNVQ0NFU1MgQ09OTkVDVC4gIElmIGhvc3QgaXMgb21pdHRlZCwgdGhlIHByZXZpb3VzIGNvbm5l Y3Rpb24gKGlmIGFueSkiLAorIiAgaXMgcmVzdW1lZC4gIERlcGVuZGluZyBvbiBob3cgS2VybWl0 IGhhcyBiZWVuIGJ1aWx0IHN3aXRjaGVzIG1heSBiZSIsCisiICBhdmFpbGFibGUgdG8gcmVxdWly ZSBhIHNlY3VyZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgYW5kIGJpZGlyZWN0aW9uYWwiLAorIiAg ZW5jcnlwdGlvbi4gIFNlZSBIRUxQIFNFVCBURUxORVQgZm9yIG1vcmUgaW5mby4iLAorIiAiLAor I2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisiIC9BVVRIOjx0eXBlPiBpcyBlcXVpdmFsZW50IHRv IFNFVCBURUxORVQgQVVUSCBUWVBFIDx0eXBlPiBhbmQiLAorIiAgIFNFVCBURUxPUFQgQVVUSCBS RVFVSVJFRCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucy4gIElmIHRoZSB0eXBlIiwKKyIg ICBpcyBBVVRPLCB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRVFVRVNURUQgaXMgZXhlY3V0ZWQgYW5k IGlmIHRoZSB0eXBlIiwKKyIgICBpcyBOT05FLCB0aGVuIFNFVCBURUxPUFQgQVVUSCBSRUZVU0VE IGlzIGV4ZWN1dGVkLiIsCisiICIsCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNp ZmRlZiBDS19FTkNSWVBUSU9OCisiIC9FTkNSWVBUOjx0eXBlPiBpcyBlcXVpdmFsZW50IHRvIFNF VCBURUxORVQgRU5DUllQVCBUWVBFIDx0eXBlPiIsCisiICAgYW5kIFNFVCBURUxPUFQgRU5DUllQ VCBSRVFVSVJFRCBSRVFVSVJFRCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucy4iLAorIiAg IElmIHRoZSB0eXBlIGlzIEFVVE8gdGhlbiBTRVQgVEVMT1BUIEFVVEggUkVRVUVTVEVEIFJFUVVF U1RFRCBpcyBleGVjdXRlZCIsCisiICAgYW5kIGlmIHRoZSB0eXBlIGlzIE5PTkUgdGhlbiBTRVQg VEVMT1BUIEVOQ1JZUFQgUkVGVVNFRCBSRUZVU0VEIGlzIiwKKyIgICBleGVjdXRlZC4iLAorIiAi LAorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyIgL1VTRVJJRDpbPG5hbWU+XSIsCisiICAg VGhpcyBzd2l0Y2ggaXMgZXF1aXZhbGVudCB0byBTRVQgTE9HSU4gVVNFUklEIDxuYW1lPiBvciBT RVQgVEVMTkVUIiwKKyIgICBFTlZJUk9OTUVOVCBVU0VSIDxuYW1lPi4gIElmIGEgc3RyaW5nIGlz IGdpdmVuLCBpdCBzZW50IHRvIGhvc3QgZHVyaW5nIiwKKyIgICBUZWxuZXQgbmVnb3RpYXRpb25z OyBpZiB0aGlzIHN3aXRjaCBpcyBnaXZlbiBidXQgdGhlIHN0cmluZyBpcyBvbWl0dGVkLCIsCisi ICAgbm8gdXNlciBJRCBpcyBzZW50IHRvIHRoZSBob3N0LiAgSWYgdGhpcyBzd2l0Y2ggaXMgbm90 IGdpdmVuLCB5b3VyIiwKKyIgICBjdXJyZW50IFVTRVJJRCB2YWx1ZSwgXFx2KHVzZXJpZCksIGlz IHNlbnQuICBXaGVuIGEgdXNlcmlkIGlzIHNlbnQgdG8gdGhlIiwKKyIgICBob3N0IGl0IGlzIGEg cmVxdWVzdCB0byBsb2dpbiBhcyB0aGUgc3BlY2lmaWVkIHVzZXIuIiwKKyIgIiwKKyNpZmRlZiBD S19BVVRIRU5USUNBVElPTgorIiAvUEFTU1dPUkQ6WzxzdHJpbmc+XSIsCisiICAgVGhpcyBzd2l0 Y2ggaXMgZXF1aXZhbGVudCB0byBTRVQgTE9HSU4gUEFTU1dPUkQuICBJZiBhIHN0cmluZyBpcyBn aXZlbiwiLAorIiAgIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIHBhc3N3b3JkIHRvIGJlIHVzZWQgKGlm IHJlcXVpcmVkKSBieSBhbnkgVGVsbmV0IiwKKyIgICBBdXRoZW50aWNhdGlvbiBwcm90b2NvbCAo S2VyYmVyb3MgVGlja2V0IHJldHJpZXZhbCwgU2VjdXJlIFJlbW90ZSIsCisiICAgUGFzc3dvcmQs IG9yIFguNTA5IGNlcnRpZmljYXRlIHByaXZhdGUga2V5IGRlY3J5cHRpb24uKSAgSWYgbm8gcGFz c3dvcmQiLAorIiAgIHN3aXRjaCBpcyBzcGVjaWZpZWQgYSBwcm9tcHQgaXMgaXNzdWVkIHRvIHJl cXVlc3QgdGhlIHBhc3N3b3JkIGlmIG9uZSIsCisiICAgaXMgcmVxdWlyZWQgZm9yIHRoZSBuZWdv dGlhdGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4iLAorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FU SU9OICovCisiIn07CisKK3N0YXRpYyBjaGFyICpoeHRvcHRbXSA9IHsKKyJURUxPUFQgeyBBTywg QVlULCBCUkVBSywgQ0FOQ0VMLCBFQywgRUwsIEVPRiwgRU9SLCBHQSwgSVAsIERNQVJLLCBOT1As IFNFLCIsCisiICAgICAgICAgU1VTUCwgU0IgWyBvcHRpb24gXSwgRE8gWyBvcHRpb24gXSwgRE9O VCBbIG9wdGlvbiBdLCIsCisiICAgICAgICAgV0lMTCBbIG9wdGlvbiBdLCBXT05UIFtvcHRpb25d IH0iLAorIiAgVGhpcyBjb21tYW5kIGxldHMgeW91IHNlbmQgYWxsIHRoZSBUZWxuZXQgcHJvdG9j b2wgY29tbWFuZHMuICBOb3RlIHRoYXQiLAorIiAgY2VydGFpbiBjb21tYW5kcyBkbyBub3QgcmVx dWlyZSBhIHJlc3BvbnNlLCBhbmQgdGhlcmVmb3JlIGNhbiBiZSB1c2VkIGFzIiwKKyIgIG5vbmRl c3RydWN0aXZlIFwicHJvYmVzXCIgdG8gc2VlIGlmIHRoZSBUZWxuZXQgc2Vzc2lvbiBpcyBzdGls bCBvcGVuOyIsCisiICBlLmcuOiIsCisiICIsCisiICAgIHNldCBob3N0IHh5emNvcnAuY29tIiwK KyIgICAgLi4uIiwKKyIgICAgdGVsb3B0IG5vcCIsCisiICAgIHRlbG9wdCBub3AiLAorIiAgICBp ZiBmYWlsIHN0b3AgMSBDb25uZWN0aW9uIGxvc3QiLAorIiAiLAorIiAgVEVMT1BUIE5PUCBpcyBz ZW50IHR3aWNlIGJlY2F1c2UgdGhlIGZhaWx1cmUgb2YgdGhlIGNvbm5lY3Rpb24gd2lsbCBub3Qi LAorIiAgYmUgZGV0ZWN0ZWQgdW50aWwgdGhlIHNlY29uZCBzZW5kIGlzIGF0dGVtcHRlZC4gIFRo aXMgY29tbWFuZCBpcyBtZWFudCIsCisiICBwcmltYXJpbHkgYXMgYSBkZWJ1Z2dpbmcgdG9vbCBm b3IgdGhlIGV4cGVydCB1c2VyLiIsCisiIn07CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNlbmRp ZiAvKiBOT0hFTFAgKi8KKworLyogIEQgTyBIIEwgUCAgLS0gIEdpdmUgYSBoZWxwIG1lc3NhZ2Ug ICovCisKK19QUk9UT1RZUCggaW50IGRvaHNldCwgKGludCkgKTsKKyNpZm5kZWYgTk9DTURMCitf UFJPVE9UWVAoIGludCBkb2hvcHRzLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBOT0NNREwgKi8KKyNp Zm5kZWYgTk9TUEwKK19QUk9UT1RZUCggaW50IGRvaGZ1bmMsIChpbnQpICk7CitleHRlcm4gc3Ry dWN0IGtleXRhYiBmbmN0YWJbXTsKK2V4dGVybiBpbnQgbmZ1bmNzOworI2VuZGlmIC8qIE5PU1BM ICovCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PS1ZFUkJTCitfUFJPVE9UWVAoIGludCBkb2hrdmVy YiwgKGludCkgKTsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOworZXh0ZXJuIGludCBu a3ZlcmJzOworI2VuZGlmIC8qIE5PS1ZFUkJTICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZm5k ZWYgTk9TUEwKK3N0YXRpYyBjaGFyICogaHh4ZGNsW10gPSB7CisiU3ludGF4OiBBUlJBWSB2ZXJi IG9wZXJhbmRzLi4uIiwKKyIgIiwKKyJEZWNsYXJlcyBhcnJheXMgYW5kIHBlcmZvcm1zIHZhcmlv dXMgb3BlcmF0aW9ucyBvbiB0aGVtLiAgQXJyYXlzIGhhdmUiLAorInRoZSBmb2xsb3dpbmcgc3lu dGF4OiIsCisiICIsCisiICBcXCZhW25dIiwKKyIgIiwKKyJ3aGVyZSBcImFcIiBpcyBhIGxldHRl ciBhbmQgbiBpcyBhIG51bWJlciBvciBhIHZhcmlhYmxlIHdpdGggYSBudW1lcmljIHZhbHVlIiwK KyJvciBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24uICBUaGUgdmFsdWUgb2YgYW4gYXJyYXkgZWxl bWVudCBjYW4gYmUgYW55dGhpbmciLAorImF0IGFsbCAtLSBhIG51bWJlciwgYSBjaGFyYWN0ZXIs IGEgc3RyaW5nLCBhIGZpbGVuYW1lLCBldGMuIiwKKyIgIiwKKyJUaGUgZm9sbG93aW5nIEFSUkFZ IHZlcmJzIGFyZSBhdmFpbGFibGU6IiwKKyIgIiwKKyJbIEFSUkFZIF0gREVDTEFSRSBhcnJheW5h bWVbbl0gWyA9IGluaXRpYWxpemVycy4uLiBdIiwKKyIgIERlY2xhcmVzIGFuIGFycmF5IG9mIHRo ZSBnaXZlbiBzaXplLCBuLiAgVGhlIHJlc3VsdGluZyBhcnJheSBoYXMgbisxIiwKKyIgIGVsZW1l bnRzLCAwIHRocm91Z2ggbi4gIEFycmF5IGVsZW1lbnRzIGNhbiBiZSB1c2VkIGp1c3QgbGlrZSBh bnkgb3RoZXIiLAorIiAgdmFyaWFibGVzLiAgSW5pdGlhbCB2YWx1ZXMgY2FuIGJlIGdpdmVuIGZv ciBlbGVtZW50cyAxLCAyLCAuLi4gYnkiLAorIiAgaW5jbHVkaW5nID0gZm9sbG93ZWQgYnkgb25l IG9yIG1vcmUgdmFsdWVzIHNlcGFyYXRlZCBieSBzcGFjZXMuICBJZiB5b3UiLAorIiAgb21pdCB0 aGUgc2l6ZSwgdGhlIGFycmF5IGlzIHNpemVkIGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGlu aXRpYWxpemVyczsiLAorIiAgaWYgbm9uZSBhcmUgZ2l2ZW4gdGhlIGFycmF5IGlzIGRlc3Ryb3ll ZCBhbmQgdW5kZWNsYXJlZCBpZiBpdCBhbHJlYWR5IiwKKyIgIGV4aXN0ZWQuICBUaGUgQVJSQVkg a2V5d29yZCBpcyBvcHRpb25hbC4gIFN5bm9ueW06IFsgQVJSQVkgXSBEQ0wuIiwKKyIgIiwKKyJb IEFSUkFZIF0gVU5ERUNMQVJFIGFycmF5bmFtZSIsCisiICBEZXN0cm95cyBhbmQgdW5kZWNsYXJl cyB0aGUgZ2l2ZW4gYXJyYXkuICBTeW5vbnltOiBBUlJBWSBERVNUUk9ZLiIsCisiICIsCisiQVJS QVkgU0hPVyBbIGFycmF5bmFtZSBdIiwKKyIgIERpc3BsYXlzIHRoZSBjb250ZW50cyBvZiB0aGUg Z2l2ZW4gYXJyYXkuICBBIHJhbmdlIHNwZWNpZmllciBjYW4gYmUiLAorIiAgaW5jbHVkZWQgdG8g ZGlzcGxheSBhIHNlZ21lbnQgb2YgdGhlIGFycmF5LCBlLmcuIFwiYXJyYXkgc2hvdyBcXCZhWzE6 MjRdLlwiIgorLAorIiAgSWYgdGhlIGFycmF5bmFtZSBpcyBvbWl0dGVkLCBhbGwgZGVjbGFyZWQg YXJyYXlzIGFyZSBsaXN0ZWQsIGJ1dCB0aGVpciIsCisiICBjb250ZW50cyBpcyBub3Qgc2hvd24u ICBTeW5vbnltOiBTSE9XIEFSUkFZLiIsCisiICIsCisiQVJSQVkgQ0xFQVIgYXJyYXluYW1lIiwK KyIgIENsZWFycyBhbGwgZWxlbWVudHMgb2YgdGhlIGFycmF5LCBpLmUuIHNldHMgdGhlbSB0byBl bXB0eSB2YWx1ZXMuIiwKKyIgIFlvdSBtYXkgaW5jbHVkZSBhIHJhbmdlIHNwZWNpZmllciB0byBj bGVhciBhIHNlZ21lbnQgb2YgdGhlIGFycmF5IHJhdGhlciIsCisiICB0aGFuIHRoZSB3aG9sZSBh cnJheSwgZS5nLiBcImFycmF5IGNsZWFyIFxcJWFbMjI6MzhdXCIiLAorIiAiLAorIkFSUkFZIFNF VCBhcnJheW5hbWUgdmFsdWUiLAorIiAgU2V0cyBhbGwgZWxlbWVudHMgb2YgdGhlIGFycmF5IHRv IHRoZSBnaXZlbiB2YWx1ZS4gIFlvdSBtYXkgc3BlY2lmeSBhIiwKKyIgIHJhbmdlIHRvIHNldCBh IHNlZ21lbnQgb2YgdGhlIGFycmF5LCBlLmcuIFwiYXJyYXkgc2V0IFxcJWFbMjo5XSAwXCIiLAor IiAiLAorIkFSUkFZIFJFU0laRSBhcnJheW5hbWUgbnVtYmVyIiwKKyIgIENoYW5nZXMgdGhlIHNp emUgb2YgdGhlIGdpdmVuIGFycmF5LCB3aGljaCBtdXN0IGFscmVhZHkgZXhpc3QsIHRvIHRoZSIs CisiICBudW1iZXIgZ2l2ZW4uICBJZiB0aGUgbnVtYmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3Vy cmVudCBzaXplLCB0aGUgZXh0cmEiLAorIiAgZWxlbWVudHMgYXJlIGRpc2NhcmRlZDsgaWYgaXQg aXMgbGFyZ2VyLCBuZXcgZW1wdHkgZWxlbWVudHMgYXJlIGFkZGVkLiIsCisiICIsCisiQVJSQVkg Q09QWSBhcnJheTEgYXJyYXkyIiwKKyIgIENvcGllcyBhcnJheTEgdG8gYXJyYXkyLiAgSWYgYXJy YXkyIGhhcyBub3QgYmVlbiBkZWNsYXJlZCwgaXQgaXMgY3JlYXRlZCIsCisiICBhdXRvbWF0aWNh bGx5LiAgUmFuZ2Ugc3BlY2lmaWVycyBtYXkgYmUgZ2l2ZW4gb24gb25lIG9yIGJvdGggYXJyYXlz LiIsCisiICIsCisiQVJSQVkgTElOSyBhcnJheTEgYXJyYTIiLAorIiAgTWFrZXMgYXJyYXkxIGEg bGluayB0byBhcnJheTIuIiwKKyIgIiwKKyJbIEFSUkFZIF0gU09SVCBbIHN3aXRjaGVzIF0gYXJy YXktbmFtZSBbIGFycmF5MiBdIiwKKyIgIFNvcnRzIHRoZSBnaXZlbiBhcnJheSBsZXhpY2FsbHkg YWNjb3JkaW5nIHRvIHRoZSBzd2l0Y2hlcy4gIEVsZW1lbnQgMCBvZiIsCisiICB0aGUgYXJyYXkg aXMgZXhjbHVkZWQgZnJvbSBzb3J0aW5nIGJ5IGRlZmF1bHQuICBUaGUgQVJSQVkga2V5d29yZCBp cyIsCisiICBvcHRpb25hbC4gIElmIGEgc2Vjb25kIGFycmF5IG5hbWUgaXMgZ2l2ZW4sIHRoYXQg YXJyYXkgaXMgc29ydGVkIGFjY29yZGluZyIsCisiICB0byB0aGUgZmlyc3Qgb25lLiAgU3dpdGNo ZXM6IiwKKyIgIiwKKyIgIC9DQVNFOntPTixPRkZ9IiwKKyIgICAgSWYgT04sIGFscGhhYmV0aWMg Y2FzZSBtYXR0ZXJzOyBpZiBPRkYgaXQgaXMgaWdub3JlZC4gIElmIHRoaXMgc3dpdGNoIGlzIiwK KyIgICAgb21pdHRlZCwgdGhlIGN1cnJlbnQgU0VUIENBU0Ugc2V0dGluZyBhcHBsaWVzLiIsCisi ICIsCisiICAvS0VZOm51bWJlciIsCisiICAgIFwKK1Bvc2l0aW9uICgxLWJhc2VkIGNvbHVtbiBu dW1iZXIpIGF0IHdoaWNoIGNvbXBhcmlzb25zIGJlZ2luLCAxIGJ5IGRlZmF1bHQuIiwKKyIgIiwK KyIgIC9OVU1FUklDIiwKKyIgICAgU3BlY2lmaWVzIGEgbnVtZXJpYyByYXRoZXIgdGhhbiBsZXhp Y2FsIHNvcnQuIiwKKyIgIiwKKyIgIC9SQU5HRTpsb3dbOmhpZ2hdIiwKKyIgICAgVGhlIHJhbmdl IG9mIGVsZW1lbnRzLCBsb3cgdGhyb3VnaCBoaWdoLCB0byBiZSBzb3J0ZWQuICBJZiB0aGlzIHN3 aXRjaCIsCisiICAgIGlzIG5vdCBnaXZlbiwgZWxlbWVudHMgMSB0aHJvdWdoIHRoZSBkaW1lbnNp b25lZCBzaXplIGFyZSBzb3J0ZWQuICBJZiIsCisiICAgIDpoaWdoIGlzIG9taXR0ZWQsIHRoZSBk aW1lbnNpb25lZCBzaXplIGlzIHVzZWQuICBUbyBpbmNsdWRlIGVsZW1lbnQgMCBpbiIsCisiICAg IGEgc29ydCwgdXNlIC9SQU5HRTowICh0byBzb3J0IHRoZSB3aG9sZSBhcnJheSkgb3IgL1JBTkdF OjA6biAodG8gc29ydCIsCisiICAgIGVsZW1lbnRzIDAgdGhyb3VnaCBuKS4gIFlvdSBjYW4gdXNl IGEgcmFuZ2Ugc3BlY2lmaWVyIGluIHRoZSBhcnJheSBuYW1lIiwKKyIgICAgaW5zdGVhZCBvZiB0 aGUgL1JBTkdFIHN3aXRjaC4iLAorIiAiLAorIiAgL1JFVkVSU0UiLAorIiAgICBTb3J0IGluIHJl dmVyc2Ugb3JkZXIuICBJZiB0aGlzIHN3aXRjaCBpcyBub3QgZ2l2ZW4sIHRoZSBhcnJheSBpcyBz b3J0ZWQiLAorIiAgICBpbiBhc2NlbmRpbmcgb3JkZXIuIiwKKyIgIiwKKyJWYXJpb3VzIGZ1bmN0 aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBhcnJheSBvcGVyYXRpb25zOyBzZWUgSEVMUCBGVU5DVElP TiBmb3IiLAorImRldGFpbHMuICBUaGVzZSBpbmNsdWRlIFxcZmRpbWVuc2lvbigpLCBcXGZhcnJh eWxvb2soKSwgXFxmZmlsZXMoKSwgXAorXFxmc3BsaXQoKSwiLAorImFuZCBtYW55IG1vcmUuIiwK KyIifTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgWkNPUFkKK3N0YXRpYyBjaGFyICog aG14eGNweVtdID0geworIlN5bnRheDogQ09QWSBbIHN3aXRjaGVzIF0gZmlsZTEgZmlsZTIiLAor IiAgQ29waWVzIHRoZSBzb3VyY2UgZmlsZSAoZmlsZTEpIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxl IChmaWxlMikuICBJZiBmaWxlMiIsCisiICBpcyBhIGRpcmVjdG9yeSwgZmlsZTEgY2FuIGNvbnRh aW4gd2lsZGNhcmRzIHRvIGRlbm90ZSBhIGdyb3VwIG9mIGZpbGVzIHRvIiwKKyIgIGJlIGNvcGll ZCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiAgU3dpdGNoZXM6IiwKKyIgIiwKKyIgIC9MSVNUIiwK KyIgICAgUHJpbnQgdGhlIGZpbGVuYW1lcyBhbmQgc3RhdHVzIHdoaWxlIGNvcHlpbmcuICBTeW5v bnltczogL0xPRywgL1ZFUkJPU0UuIiwKKyIgIiwKKyIgIC9OT0xJU1QiLAorIiAgICBDb3B5IHNp bGVudGx5IChkZWZhdWx0KS4gU3lub255bXM6IC9OT0xPRywgL1FVSUVULiIsCisiICIsCisiICAv UFJFU0VSVkUiLAorIiAgICBDb3B5IHRpbWVzdGFtcCBhbmQgcGVybWlzc2lvbnMgZnJvbSBzb3Vy Y2UgZmlsZSB0byBkZXN0aW5hdGlvbiBmaWxlLiIsCisiICIsCisiICAvT1ZFUldSSVRFOntBTFdB WVMsTkVWRVIsTkVXRVIsT0xERVJ9IiwKKyIgICAgV2hlbiBjb3B5aW5nIGZyb20gb25lIGRpcmVj dG9yeSB0byBhbm90aGVyLCB0aGlzIHRlbGxzIHdoYXQgdG8gZG8gd2hlbiIsCisiICAgIHRoZSBk ZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RzOiBvdmVyd3JpdGUgaXQgYWx3YXlzOyBuZXZl cjsgb25seSBpZiIsCisiICAgIHRoZSBzb3VyY2UgZmlsZSBpcyBuZXdlcjsgb3Igb25seSBpZiB0 aGUgc291cmNlIGZpbGUgaXMgb2xkZXIuIiwKKyIgIiwKKyIgIC9BUFBFTkQiLAorIiAgICBBcHBl bmQgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlLiAgSW4gdGhpcyBjYXNl IHRoZSBzb3VyY2UiLAorIiAgICBmaWxlIHNwZWNpZmljYXRpb24gY2FuIGNvbnRhaW4gd2lsZGNh cmRzLCBhbmQgYWxsIHRoZSBtYXRjaGluZyBzb3VyY2UiLAorIiAgICBmaWxlcyBhcmUgYXBwZW5k ZWQsIG9uZSBhZnRlciB0aGUgb3RoZXIgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGJ5IG5hbWUsIiwK KyIgICAgdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUuIiwKKyIgIiwKKyIgIC9TV0FQLUJZVEVTIiwK KyIgICAgU3dhcCBieXRlcyB3aGlsZSBjb3B5aW5nIChlLmcuIGZvciBjb252ZXJ0aW5nIGJldHdl ZW4gQmlnLUVuZGlhbiBhbmQiLAorIiAgICBMaXR0bGUtRW5kaWFuIGJpbmFyeSBkYXRhIGZvcm1h dHMpLiIsCisjaWZuZGVmIE5PU1BMCisiICIsCisiICAvRlJPTUI2NCIsCisiICAgIENvbnZlcnQg ZnJvbSBCYXNlNjQgZW5jb2Rpbmcgd2hpbGUgY29weWluZy4iLAorIiAiLAorIiAgL1RPQjY0IiwK KyIgICAgQ29udmVydCB0byBCYXNlNjQgZW5jb2Rpbmcgd2hpbGUgY29weWluZy4iLAorI2VuZGlm IC8qIE5PU1BMICovCisiIgorfTsKKyNlbmRpZiAvKiBaQ09QWSAqLworCisjaWZuZGVmIE5PRlJJ TExTCitzdGF0aWMgY2hhciAqIGhteHhyZW5bXSA9IHsKKyNpZmRlZiBMT0NVUworIiAgSWYgTE9D VVMgaXMgUkVNT1RFIG9yIExPQ1VTIGlzIEFVVE8gYW5kIHlvdSBoYXZlIGFuIEZUUCBjb25uZWN0 aW9uLCIsCisiICB0aGlzIGNvbW1hbmQgaXMgZXF1aXZhbGVudCB0byBSRU1PVEUgUkVOQU1FIChS UkVOKS4gIE90aGVyd2lzZToiLAorIiAiLAorI2VuZGlmIC8qIExPQ1VTICovCisiU3ludGF4OiBS RU5BTUUgWyBzd2l0Y2hlcyBdIG5hbWUxIFsgbmFtZTIgXSIsCisiICBSZW5hbWVzIHRoZSBzb3Vy Y2UgZmlsZSAobmFtZTEpIHRvIHRoZSB0YXJnZXQgbmFtZTIuICBJZiBuYW1lMiBpcyBhIiwKKyIg IGRpcmVjdG9yeSwgbmFtZTEgaXMgYWxsb3dlZCB0byBjb250YWluIHdpbGRjYXJkcywgYW5kIHRo ZSBmaWxlKHMpIG1hdGNoaW5nIiwKKyIgIG5hbWUxIGFyZSBtb3ZlZCB0byBkaXJlY3RvcnkgbmFt ZTIsIHN1YmplY3QgdG8gcnVsZXMgb2YgdGhlIHVuZGVybHlpbmciLAorIiAgb3BlcmF0aW5nIHN5 c3RlbSByZWdhcmRpbmcgcmVuYW1pbmcgYWNyb3NzIGRpc2sgYm91bmRhcmllcywgZXRjLiBTd2l0 Y2hlczoiLAorIiAiLAorIiAgL0xJU1QiLAorIiAgICBQcmludCB0aGUgZmlsZW5hbWVzIGFuZCBz dGF0dXMgd2hpbGUgcmVuYW1pbmcuICBTeW5vbnltczogL0xPRywgL1ZFUkJPU0UiLAorIiAiLAor IiAgL05PTElTVCIsCisiICAgIFJlbmFtZSBzaWxlbnRseSAoZGVmYXVsdCkuIFN5bm9ueW1zOiAv Tk9MT0csIC9RVUlFVCIsCisiICIsCisiICAvQ09MTElTSU9OOntGQUlMLFNLSVAsT1ZFUldSSVRF fSIsCisiICAgIFRlbGxzIHdoYXQgdG8gZG8gaWYgYSBmaWxlIHdpdGggdGhlIGdpdmVuIChvciBk ZXJpdmVkKSBuZXcgbmFtZSBhbHJlYWR5IiwKKyIgICAgZXhpc3RzOiBmYWlsIChhbmQgc3RvcCB3 aXRob3V0IHJlbmFtaW5nIGFueSBmaWxlcyk7IHNraXAgdGhpcyBmaWxlIiwKKyIgICAgd2l0aG91 dCByZW5hbWluZyBpdCBhbmQgZ28gb24gdG8gdGhlIG5leHQgb25lLCBpZiBhbnk7IG9yIG92ZXJ3 cml0ZSAodGhlIiwKKyIgICAgZXhpc3RpbmcgZmlsZSkuICBQUk9DRUVEIGlzIGEgc3lub255bSBm b3IgU0tJUC4iLAorIiAiLAorIiAgL1NJTVVMQVRFIiwKKyIgICAgU2hvdyB3aGF0IHRoZSBlZmZl Y3RzIG9mIHRoZSBSRU5BTUUgY29tbWFuZCB3b3VsZCBiZSB3aXRob3V0IGFjdHVhbGx5IiwKKyIg ICAgcmVuYW1pbmcgYW55IGZpbGVzLiIsCisiICIsCisiICBXaGVuIGFueSBvZiB0aGUgZm9sbG93 aW5nIHN3aXRjaGVzIGlzIGdpdmVuLCBuYW1lMiBtdXN0IGVpdGhlciBiZSB0aGUiLAorIiAgdGhl IG5hbWUgb2YgYSBkaXJlY3RvcnksIG9yIGVsc2Ugb21pdHRlZCwgYW5kIG5hbWUxIGlzIGFsbG93 ZWQgdG8gY29udGFpbiIsCisiICBjb250YWluIHdpbGRjYXJkcywgYWxsb3dpbmcgbXVsdGlwbGUg ZmlsZXMgdG8gYmUgcmVuYW1lZCBhdCBvbmNlLiBJZiBuYW1lMiIsCisiICBpcyBnaXZlbiwgdGhl biBhbGwgZmlsZXMgbWF0Y2hpbmcgbmFtZTEgYXJlIG1vdmVkIHRvIHRoZSBuYW1lMiBkaXJlY3Rv cnkiLAorIiAgYWZ0ZXIgYmVpbmcgcmVuYW1lZC4iLAorIiAiLAorIiAgL0xPV0VSOntBTEwsVVBQ RVJ9IiwKKyIgICAgQ29udmVydHMgbGV0dGVycyBpbiB0aGUgZmlsZW5hbWUgdG8gbG93ZXJjYXNl LiAgQUxMIG1lYW5zIHRvIGNvbnZlcnQiLAorIiAgICBhbGwgbWF0Y2hpbmcgZmlsZW5hbWVzLCBV UFBFUiBtZWFucyB0byBjb252ZXJ0IG9ubHkgdGhvc2UgZmlsZW5hbWVzIiwKKyIgICAgdGhhdCBj b250YWluIG5vIGxvd2VyY2FzZSBsZXR0ZXJzLiAgVGhlIHN3aXRjaCBhcmd1bWVudCBjYW4gYmUg b21pdHRlZCwiLAorIiAgICBpbiB3aGljaCBjYXNlIEFMTCBmaWxlbmFtZXMgYXJlIGNvbnZlcnRl ZC4iLAorIiAiLAorIiAgL1VQUEVSOntBTEwsTE9XRVJ9IiwKKyIgICAgQ29udmVydHMgbGV0dGVy cyBpbiB0aGUgZmlsZW5hbWUgdG8gdXBwZXJjYXNlLiAgQUxMIG1lYW5zIHRvIGNvbnZlcnQiLAor IiAgICBhbGwgbWF0Y2hpbmcgZmlsZW5hbWVzLCBMT1dFUiBtZWFucyB0byBjb252ZXJ0IG9ubHkg dGhvc2UgZmlsZW5hbWVzIiwKKyIgICAgdGhhdCBjb250YWluIG5vIHVwcGVyY2FzZSBsZXR0ZXJz LiAgQXMgd2l0aCAvTE9XRVIsIEFMTCBpcyB0aGUgZGVmYXVsdCIsCisiICAgIHN3aXRjaCBhcmd1 bWVudC4iLAorIiAiLAorIiAgL0ZJWFNQQUNFUzpzIiwKKyIgICAgUmVwbGFjZXMgYWxsIHNwYWNl cyBpbiBlYWNoIG1hdGNoaW5nIGZpbGVuYW1lIGJ5IHRoZSBzdHJpbmcgcywgd2hpY2ggbWF5IiwK KyIgICAgYmUgZW1wdHksIGEgc2luZ2xlIGNoYXJhY3Rlciwgb3IgYSBzdHJpbmcgb2YgY2hhcmFj dGVycy4gIFRoZSBkZWZhdWx0IiwKKyIgICAgcmVwbGFjZW1lbnQgKGlmIG5vIGFyZ3VtZW50IGlz IGdpdmVuKSBpcyB1bmRlcnNjb3JlIChfKS4iLAorIiAiLAorIiAgL1JFUExBQ0U6e3tzdHJpbmcx fXtzdHJpbmcyfXtvcHRpb25zfX0iLAorIiAgICBSZXBsYWNlcyBhbGwgb3Igc2VsZWN0ZWQgb2Nj dXJyZW5jZXMgb2Ygc3RyaW5nMSB3aXRoIHN0cmluZzIgaW4gdGhlIiwKKyIgICAgbWF0Y2hpbmcg ZmlsZW5hbWVzLiAgVGhlIGJyYWNlcyBhcmUgcGFydCBvZiB0aGUgY29tbWFuZC4gIFRoZSBvcHRp b25zIiwKKyIgICAgc3RyaW5nIGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczoi LAorIiAgICAgQTogU3RyaW5nIG1hdGNoaW5nIGlzIGNhc2Utc2Vuc2l0aXZlLiIsCisiICAgICBh OiBTdHJpbmcgbWF0Y2hpbmcgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iLAorIiAgICAgXjogU3RyaW5n IG1hdGNoaW5nIGlzIGFuY2hvcmVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVuYW1lLiIs CisiICAgICAkOiBTdHJpbmcgbWF0Y2hpbmcgaXMgYW5jaG9yZWQgdG8gdGhlIGVuZCBvZiB0aGUg ZmlsZW5hbWUuIiwKKyIgICAgIDE6IE9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHN0 cmluZyAoaWYgYW55KSB3aWxsIGJlIGNoYW5nZWQuIiwKKyIgICAgIDI6IE9ubHkgdGhlIHNlY29u ZCBvY2N1cnJlbmNlLCBhbmQgc28gb24gZm9yIGFsbCBkaWdpdHMgdXAgdG8gOS4iLAorIiAgICAg LTogKGJlZm9yZSBhIGRpZ2l0KSBPY2N1cnJlbmNlcyBhcmUgY291bnRlZCBmcm9tIHRoZSByaWdo dC4iLAorIiAgICAgfjogKGJlZm9yZSBvY2N1cnJlbmNlKSBBbGwgb2NjdXJlbmNlcyBCVVQgdGhl IG9uZSBnaXZlbiBhcmUgY2hhbmdlZC4iLAorIiAiLAorIiAgL0NPTlZFUlQ6Y3NldDE6Y3NldDEi LAorIiAgICBDb252ZXJ0cyBlYWNoIG1hdGNoaW5nIGZpbGVuYW1lIGZyb20gY2hhcmFjdGVyLXNl dCAxIHRvIGNoYXJhY3Rlci1zZXQgMi4iLAorIiAgICBDaGFyYWN0ZXIgc2V0cyBhcmUgdGhlIHNh bWUgYXMgZm9yIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQuIiwKKyIgIiwKKyIgIEdsb2JhbCB2YWx1 ZXMgZm9yIC9MSVNUIGFuZCBDT0xMSVNJT04gY2FuIGJlIHNldCB3aXRoIFNFVCBSRU5BTUUgYW5k IiwKKyIgIGRpc3BsYXllZCB3aXRoIFNIT1cgUkVOQU1FLiIsCisiIgorfTsKKyNlbmRpZiAvKiBO T0ZSSUxMUyAqLworCitzdGF0aWMgY2hhciAqCitjbWRsaGxwW10gPSB7CisiQ29tbWFuZC1saW5l IG9wdGlvbnMgYXJlIGdpdmVuIGFmdGVyIHRoZSBwcm9ncmFtIG5hbWUgaW4gdGhlIHN5c3RlbSIs CisiY29tbWFuZCB0aGF0IHlvdSB1c2UgdG8gc3RhcnQgS2VybWl0LiAgRXhhbXBsZToiLAorIiAi LAorIiBrZXJtaXQgLWkgLXMgb29mYS5leGUiLAorIiAiLAorInRlbGxzIEtlcm1pdCB0byBzZW5k ICgtcykgdGhlIGZpbGUgb29mYS5leGUgaW4gYmluYXJ5ICgtaSkgbW9kZS4iLAorIiAiLAorIkNv bW1hbmQtbGluZSBvcHRpb25zIGFyZSBjYXNlLXNlbnNpdGl2ZTsgXCItc1wiIGlzIGRpZmZlcmVu dCBmcm9tIFwiLVNcIi4iLAorI2lmZGVmIFZNUworIkluIFZNUywgdXBwZXJjYXNlIG9wdGlvbnMg bXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGVxdW90ZXM6ICIsCisiICIsCisiICQga2VybWl0IFwi LVlcIiBcIi1TXCIgLXMgb29mYS50eHQgIiwKKyNlbmRpZiAvKiBWTVMgKi8KKyIgIiwKKyJJZiBh bnkgXCJhY3Rpb24gb3B0aW9uc1wiIGFyZSBpbmNsdWRlZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBL ZXJtaXQgZXhpdHMiLAorImFmdGVyIGV4ZWN1dGluZyBpdHMgY29tbWFuZC1saW5lIG9wdGlvbnMu ICBJZiAtUyBpcyBpbmNsdWRlZCwgb3Igbm8gYWN0aW9uIiwKKyJvcHRpb25zIHdlcmUgZ2l2ZW4s IEtlcm1pdCBlbnRlcnMgaXRzIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyIGFuZCIsCisiaXNz dWVzIGl0cyBwcm9tcHQuIiwKKyIgIiwKKyJDb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgc2luZ2xl IGNoYXJhY3RlcnMgcHJlY2VkZWQgYnkgZGFzaCAoLSkuICBTb21lIiwKKyJyZXF1aXJlIGFuIFwi YXJndW1lbnQsXCIgb3RoZXJzIGRvIG5vdC4gIElmIGFuIGFyZ3VtZW50IGNvbnRhaW5zIHNwYWNl cywgaXQiLAorIm11c3QgYmUgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzOiIsCisiICIsCisiIGtl cm1pdCAtcyBcImZpbGVuYW1lIHdpdGggc3BhY2VzXCIiLAorIiAiLAorIlwKK0FuIG9wdGlvbiB0 aGF0IGRvZXMgbm90IHJlcXVpcmUgYW4gYXJndW1lbnQgY2FuIGJlIGJ1bmRsZWQgd2l0aCBvdGhl ciBvcHRpb25zOiIKKywKKyIgIiwKKyIga2VybWl0IC1RaXMgb29mYS5leGUiLAorIiAiLAorIkV4 Y2VwdGlvbnMgdG8gdGhlIHJ1bGVzOiIsCisiICIsCisiIC4gSWYgdGhlIGZpcnN0IGNvbW1hbmQt bGluZSBvcHRpb24gaXMgYSBmaWxlbmFtZSwgS2VybWl0IGV4ZWN1dGVzIGNvbW1hbmRzIiwKKyIg ICBmcm9tIHRoZSBmaWxlLiAgQWRkaXRpb25hbCBjb21tYW5kLWxpbmUgb3B0aW9ucyBjYW4gZm9s bG93IHRoZSBmaWxlbmFtZS4iLAorIiAiLAorIiAuIFRoZSBzcGVjaWFsIG9wdGlvbiBcIj1cIiAo ZXF1YWwgc2lnbikgb3IgXCItLVwiIChkb3VibGUgaHlwaGVuKSBtZWFucyB0byIsCisiICAgdHJl YXQgdGhlIHJlc3Qgb2YgdGhlIGNvbW1hbmQgbGluZSBhcyBkYXRhLCByYXRoZXIgdGhhbiBjb21t YW5kczsgdGhpcyIsCisiICAgZGF0YSBpcyBwbGFjZWQgaW4gdGhlIGFyZ3VtZW50IHZlY3RvciBh cnJheSwgXFwmQFtdLCBhbG9uZyB3aXRoIHRoZSBvdGhlciIsCisiICAgaXRlbXMgb24gdGhlIGNv bW1hbmQgbGluZSwgYW5kIGFsc28gaW4gdGhlIHRvcC1sZXZlbCBcXCUxLi5cXCU5IHZhcmlhYmxl cy4iCissCisiICIsCisjaWZkZWYgS0VSQkFORworIiAuIEEgc2ltaWxhciBvcHRpb24gXCIrXCIg KHBsdXMgc2lnbikgbWVhbnM6IHRoZSBuYW1lIG9mIGEgS2VybWl0IHNjcmlwdCIsCisiICAgZmls ZSBmb2xsb3dzLiAgVGhpcyBmaWxlIGlzIHRvIGJlIGV4ZWN1dGVkLCBhbmQgaXRzIG5hbWUgYXNz aWduZWQgdG8gXFwlMCIsCisiICAgYW5kIFxcJl9bMF0uICBBbGwgc3Vic2VxdWVudCBjb21tYW5k LWxpbmUgYXJndW1lbnRzIGFyZSB0byBiZSBpZ25vcmVkIGJ5IiwKKyIgICBLZXJtaXQgYnV0IG1h ZGUgYXZhaWxhYmxlIHRvIHRoZSBzY3JpcHQgYXMgXFwlMSwgXFwlMiwgLi4uLCBhcyB3ZWxsIGFz IiwKKyIgICBpbiB0aGUgYXJndW1lbnQtdmVjdG9yIGFycmF5cy4gIFRoZSBpbml0aWFsaXphdGlv biBmaWxlIGlzIG5vdCBleGVjdXRlZCIsCisiICAgYXV0b21hdGljYWxseSBpbiB0aGlzIGNhc2Uu IiwKKyIgIiwKKyNlbmRpZiAvKiBLRVJCQU5HICovCisiIC4gVGhlIC1zIG9wdGlvbiBjYW4gYWNj ZXB0IG11bHRpcGxlIGZpbGVuYW1lcywgc2VwYXJhdGVkIGJ5IHNwYWNlcy4iLAorIiAiLAorIiAu IHRoZSAtaiBhbmQgLUogb3B0aW9ucyBhbGxvdyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQs IHRoZSBUQ1AgcG9ydCIsCisiICAgbmFtZSBvciBudW1iZXIuIiwKKyIgIiwKKyJUeXBlIFwiaGVs cCBvcHRpb25zIGFsbFwiIHRvIGxpc3QgYWxsIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4iLAor IlR5cGUgXCJoZWxwIG9wdGlvbiB4XCIgdG8gc2VlIHRoZSBoZWxwIG1lc3NhZ2UgZm9yIG9wdGlv biB4LiIsCisiICIsCisiS2VybWl0IGFsc28gb2ZmZXJzIGEgc2VsZWN0aW9uIG9mIFwiZXh0ZW5k ZWQgY29tbWFuZC1saW5lXCIgb3B0aW9ucy4iLAorIlRoZXNlIGJlZ2luIHdpdGggdHdvIGRhc2hl cywgZm9sbG93ZWQgYnkgYSBrZXl3b3JkLCBhbmQgdGhlbiwgaWYgdGhlIG9wdGlvbiIsCisiaGFz IGFyZ3VtZW50cywgYSBjb2xvbiAoOikgb3IgZXF1YWwgc2lnbiAoPSkgZm9sbG93ZWQgYnkgdGhl IGFyZ3VtZW50LiIsCisiVW5saWtlIHNpbmdsZS1sZXR0ZXIgb3B0aW9ucywgZXh0ZW5kZWQgb3B0 aW9uIGtleXdvcmRzIGFyZW4ndCBjYXNlIHNlbnNpdGl2ZSIsCisiYW5kIHRoZXkgY2FuIGJlIGFi YnJldmlhdGVkIHRvIGFueSBsZW5ndGggdGhhdCBzdGlsbCBkaXN0aW5ndWlzaGVzIHRoZW0gZnJv bSIsCisib3RoZXIgZXh0ZW5kZWQtb3B0aW9uIGtleXdvcmRzLiAgRXhhbXBsZToiLAorIiAiLAor IiAga2VybWl0IC0tYmFubmVyOm9vZmEudHh0IiwKKyIgIiwKKyJ3aGljaCBkZXNpZ25hdGVzIHRo ZSBmaWxlIG9vZmEudHh0IHRvIGJlIHByaW50ZWQgdXBvbiBzdGFydHVwLCByYXRoZXIgdGhhbiIs CisidGhlIGJ1aWx0LWluIGJhbm5lciAoZ3JlZXRpbmcpIHRleHQuICBUbyBvYnRhaW4gYSBsaXN0 IG9mIGF2YWlsYWJsZSIsCisiZXh0ZW5kZWQgb3B0aW9ucywgdHlwZSBcImhlbHAgZXh0ZW5kZWQt b3B0aW9ucyA/XCIuICBUbyBnZXQgaGVscCBhYm91dCBhbGwiLAorImV4dGVuZGVkIG9wdGlvbnMs IHR5cGUgXCJoZWxwIGV4dGVuZGVkLW9wdGlvbnNcIi4gIFRvIGdldCBoZWxwIGFib3V0IGEiLAor InBhcnRpY3VsYXIgZXh0ZW5kZWQgb3B0aW9uLCB0eXBlIFwiaGVscCBleHRlbmRlZC1vcHRpb24g eHh4XCIsIHdoZXJlIFwieHh4XCIiLAorImlzIHRoZSBvcHRpb24ga2V5d29yZC4iLAorI2lmZGVm IENPTU1FTlQKKyNpZm5kZWYgTk9JS1NECisiICIsCisiQXQgcHJlc2VudCwgbW9zdCBvZiB0aGUg ZXh0ZW5kZWQgb3B0aW9ucyBhcHBseSBvbmx5IHRvIHRoZSBJbnRlcm5ldCBLZXJtaXQiLAorIlNl cnZpY2UgRGFlbW9uIChJS1NEKS4gIFR5cGUgXCJoZWxwIGlrc2RcIiBmb3IgZGV0YWlscy4iLAor I2VuZGlmIC8qIE5PSUtTRCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyIiCit9OworCisKKyNp Zm5kZWYgTk9IRUxQCisjaWZuZGVmIE5PQ01ETAoraW50Citkb3hvcHRzKCkgeworICAgIGV4dGVy biBjaGFyICogeG9wdGhscFtdLCAqIHhhcmdobHBbXTsKKyAgICBleHRlcm4gc3RydWN0IGtleXRh YiB4YXJndGFiW107CisgICAgZXh0ZXJuIGludCBueGFyZ3M7CisgICAgaW50IGksIHgsIHksIG4g PSAwOworI2lmZGVmIENLX1RUR1dTSVoKKyNpZmRlZiBPUzIKKyAgICB0dGdjd3N6KCk7CisjZWxz ZSAvKiBPUzIgKi8KKyAgICAvKiBDaGVjayB3aGV0aGVyIHdpbmRvdyBzaXplIGNoYW5nZWQgKi8K KyAgICBpZiAodHRnd3NpeigpID4gMCkgeworICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRf Y29scyA+IDApIHsKKyAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKKyAgICAgICAgICAg IGNtZF9jb2xzID0gdHRfY29sczsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgeSA9IGNta2V5KHhhcmd0YWIsCisgICAgICAg ICAgICAgIG54YXJncywKKyAgICAgICAgICAgICAgIkV4dGVuZGVkIGFyZ3VtZW50IHdpdGhvdXQg dGhlIFwiLS1cIiBwcmVmaXgiLAorICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgeHhz dHJpbmcKKyAgICAgICAgICAgICAgKTsKKyAgICBpZiAoeSA9PSAtMykgeworCXByaW50ZigiXG4i KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorCSAgcmV0dXJuKHgpOworICAgICAg ICBmb3IgKGkgPSAwOyBpIDw9IFhBX01BWDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoeG9wdGhs cFtpXSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIseG9wdGhscFtpXSk7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCIgICAlc1xuIix4YXJnaGxwW2ldKTsKKyAgICAgICAgICAgICAg ICBwcmludGYoIlxuIik7CisgICAgICAgICAgICAgICAgbiArPSAzOworICAgICAgICAgICAgICAg IGlmIChuID4gKGNtZF9yb3dzIC0gNikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2tt b3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgbiA9IDA7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybigxKTsKKyAgICB9IGVs c2UgaWYgKHkgPCAwKQorICAgICAgcmV0dXJuKHkpOworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkKKyAgICAgIHJldHVybih4KTsKKyAgICBwcmludGYoIlxuJXNcbiIseG9wdGhscFt5XSk7Cisg ICAgcHJpbnRmKCIgICAlc1xuXG4iLHhhcmdobHBbeV0pOworICAgIHJldHVybigxKTsKK30KKwor aW50Citkb2hvcHRzKCkgeworICAgIGludCBpLCBuLCB4LCB5LCB6LCBhbGwgPSAwLCBtc2cgPSAw OworICAgIGNoYXIgKnM7CisgICAgZXh0ZXJuIGNoYXIgKm9wdGhscFtdLCAqYXJnaGxwW107Cisg ICAgZXh0ZXJuIGNoYXIgKiB4b3B0aGxwW10sICogeGFyZ2hscFtdOworICAgIGV4dGVybiBpbnQg b3B0YWN0W107CisgICAgaWYgKCh4ID0gY210eHQoIkEgY29tbWFuZC1saW5lIG9wdGlvbiBjaGFy YWN0ZXIsXG5cCitvciB0aGUgd29yZCBBTEwsIG9yIGNhcnJpYWdlIHJldHVybiBmb3IgYW4gb3Zl cnZpZXciLAorICAgICAgICAgICAgICAgICAgICIiLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAg ICByZXR1cm4oeCk7CisgICAgaWYgKCEqcykKKyAgICAgIG1zZyA9IDE7CisgICAgZWxzZSBpZiAo IXN0cmNtcChzLCJhbGwiKSB8fCAoIXN0cmNtcChzLCJBTEwiKSkpCisgICAgICBhbGwgPSAxOwor ICAgIGVsc2UgaWYgKCpzID09ICctJykgICAgICAgICAgICAgICAgIC8qIEJlIHRvbGVyYW50IG9m IGxlYWRpbmcgaHlwaGVuICovCisgICAgICBzKys7CisgICAgaWYgKCFhbGwgJiYgKGludClzdHJs ZW4ocykgPiAxKSB7CisgICAgICAgIHByaW50ZigiP0Egc2luZ2xlIGNoYXJhY3RlciwgcGxlYXNl LCBvciBjYXJyaWFnZSB0byBsaXN0IHRoZW0gYWxsLlxuIik7CisgICAgICAgIHJldHVybigtOSk7 CisgICAgfQorICAgIGlmIChhbGwpIHsKKyAgICAgICAgeSA9IDMzOworICAgICAgICB6ID0gMTI3 OworICAgIH0gZWxzZSB7CisgICAgICAgIHkgPSAqczsKKyAgICAgICAgeiA9ICh5ID09IDApID8g MTI3IDogeTsKKyAgICAgICAgaWYgKHkgPT0gMCkgeSA9IDMzOworICAgIH0KKyNpZmRlZiBDS19U VEdXU0laCisjaWZkZWYgT1MyCisgICAgdHRnY3dzeigpOworI2Vsc2UgLyogT1MyICovCisgICAg LyogQ2hlY2sgd2hldGhlciB3aW5kb3cgc2l6ZSBjaGFuZ2VkICovCisgICAgaWYgKHR0Z3dzaXoo KSA+IDApIHsKKyAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMgPiAwKSB7CisgICAg ICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7CisgICAgICAgICAgICBjbWRfY29scyA9IHR0X2Nv bHM7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfVFRH V1NJWiAqLworICAgIHByaW50ZigiXG4iKTsKKyAgICBmb3IgKGkgPSAwLCBuID0gMTsgbXNnICE9 IDAgJiYgKmNtZGxobHBbaV07IGkrKykgeworICAgICAgICBwcmludGYoIiVzXG4iLGNtZGxobHBb aV0pOworICAgICAgICBpZiAoKytuID4gKGNtZF9yb3dzIC0gMykpIHsKKyAgICAgICAgICAgaWYg KCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFsbCkgeworICAg ICAgICBwcmludGYoIlRoZSBmb2xsb3dpbmcgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIGF2YWls YWJsZTpcblxuIik7CisgICAgICAgIG4gKz0gMjsKKyAgICB9CisgICAgZm9yIChpID0geTsgbXNn ID09IDAgJiYgaSA8PSB6OyBpKyspIHsKKyAgICAgICAgaWYgKCFvcHRobHBbaV0pCisgICAgICAg ICAgY29udGludWU7CisgICAgICAgIGlmIChhcmdobHBbaV0pIHsgICAgICAgICAgICAgICAgLyog T3B0aW9uIHdpdGggYXJnICovCisgICAgICAgICAgICBwcmludGYoIiAtJWMgPGFyZz4lc1xuIiwo Y2hhcilpLChvcHRhY3RbaV0/IiAoYWN0aW9uIG9wdGlvbikiOiIiKSk7CisKKyAgICAgICAgICAg IHByaW50ZigiICAgICAlc1xuIixvcHRobHBbaV0pOworICAgICAgICAgICAgcHJpbnRmKCIgICAg IEFyZ3VtZW50OiAlc1xuXG4iLGFyZ2hscFtpXSk7CisgICAgICAgICAgICB4ID0gNDsKKyAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcHRpb24gd2l0aG91dCBhcmcg Ki8KKyAgICAgICAgICAgIHByaW50ZigiIC0lYyAgJXMlc1xuIiwKKyAgICAgICAgICAgICAgICAg ICAoY2hhcilpLCBvcHRobHBbaV0sCisgICAgICAgICAgICAgICAgICAgKG9wdGFjdFtpXT8iIChh Y3Rpb24gb3B0aW9uKSI6IiIpCisgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcHJp bnRmKCIgICAgIEFyZ3VtZW50OiAobm9uZSlcblxuIik7CisgICAgICAgICAgICB4ID0gMzsKKyAg ICAgICAgfQorICAgICAgICBuICs9IHg7CisgICAgICAgIGlmIChuID4gKGNtZF9yb3dzIC0geCAt IDEpKSB7CisgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkKKyAgICAgICAgICAgICAgcmV0dXJu KDApOworICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChhbGwpIHsJCQkJLyogSmVmZiwgSmFuIDIwMDMgKi8KKyAgICAgICAgcHJp bnRmKCJcbiIpOworICAgICAgICBpZiAoKytuID49IGNtZF9yb3dzKSB7CisgICAgICAgICAgICBp ZiAoIWFza21vcmUoKSkKKyAgICAgICAgICAgICAgcmV0dXJuKDApOworCSAgICBlbHNlCisgICAg ICAgICAgICAgIG4gPSAwOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiVGhlIGZvbGxvd2lu ZyBleHRlbmRlZCBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4iKTsKKyAgICAgICAgaWYgKCsrbiA+ PSBjbWRfcm93cykgeworICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCisgICAgICAgICAgICAg IHJldHVybigwKTsKKwkgICAgZWxzZQorICAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgfQor ICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIGlmICgrK24gPj0gY21kX3Jvd3MpIHsKKyAg ICAgICAgICAgIGlmICghYXNrbW9yZSgpKQorICAgICAgICAgICAgICByZXR1cm4oMCk7CisJICAg IGVsc2UKKyAgICAgICAgICAgICAgbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0g MDsgaSA8PSBYQV9NQVg7IGkrKykgeworICAgICAgICAgICAgaWYgKHhvcHRobHBbaV0pIHsKKyAg ICAgICAgICAgICAgICBwcmludGYoIiVzXG4iLHhvcHRobHBbaV0pOworICAgICAgICAgICAgICAg IHByaW50ZigiICAgJXNcbiIseGFyZ2hscFtpXSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJc biIpOworICAgICAgICAgICAgICAgIG4gKz0gMzsKKyAgICAgICAgICAgICAgICBpZiAobiA+IChj bWRfcm93cyAtIDQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXNrbW9yZSgpKQorCQkg ICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJICAgICAgbiA9IDA7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg IHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBOT0NNREwgKi8KKyNlbmRpZiAvKiBOT0hFTFAgKi8K KworI2lmZGVmIENLQ0hBTk5FTElPCitzdGF0aWMgY2hhciAqIGh4eGZpbGVbXSA9IHsKKyJTeW50 YXg6IEZJTEUgPHN1YmNvbW1hbmQ+IFsgc3dpdGNoZXMgXSA8Y2hhbm5lbD4gWyA8ZGF0YT4gXSIs CisiICBPcGVucywgY2xvc2VzLCByZWFkcywgd3JpdGVzLCBhbmQgbWFuYWdlcyBsb2NhbCBmaWxl cy4iLAorIiAiLAorIlRoZSBGSUxFIGNvbW1hbmRzIGFyZToiLAorIiAiLAorIiAgRklMRSBPUEVO ICAgKG9yIEZPUEVOKSAgIC0tIE9wZW4gYSBsb2NhbCBmaWxlLiIsCisiICBGSUxFIENMT1NFICAo b3IgRkNMT1NFKSAgLS0gQ2xvc2UgYW4gb3BlbiBmaWxlLiIsCisiICBGSUxFIFJFQUQgICAob3Ig RlJFQUQpICAgLS0gUmVhZCBkYXRhIGZyb20gYW4gb3BlbiBmaWxlLiIsCisiICBGSUxFIFdSSVRF ICAob3IgRldSSVRFKSAgLS0gV3JpdGUgZGF0YSB0byBhbiBvcGVuIGZpbGUuIiwKKyIgIEZJTEUg TElTVCAgIChvciBGTElTVCkgICAtLSBMaXN0IG9wZW4gZmlsZXMuIiwKKyIgIEZJTEUgU1RBVFVT IChvciBGU1RBVFVTKSAtLSBTaG93IHN0YXR1cyBvZiBhIGNoYW5uZWwuIiwKKyIgIEZJTEUgUkVX SU5EIChvciBGUkVXSU5EKSAtLSBSZXdpbmQgYW4gb3BlbiBmaWxlIiwKKyIgIEZJTEUgQ09VTlQg IChvciBGQ09VTlQpICAtLSBDb3VudCBsaW5lcyBvciBieXRlcyBpbiBhbiBvcGVuIGZpbGUiLAor IiAgRklMRSBTRUVLICAgKG9yIEZTRUVLKSAgIC0tIFNlZWsgdG8gc3BlY2lmaWVkIHNwb3QgaW4g YW4gb3BlbiBmaWxlLiIsCisiICBGSUxFIEZMVVNIICAob3IgRkZMVVNIKSAgLS0gRmx1c2ggb3V0 cHV0IGJ1ZmZlcnMgZm9yIGFuIG9wZW4gZmlsZS4iLAorIiAiLAorIlR5cGUgSEVMUCBGSUxFIE9Q RU4gb3IgSEVMUCBGT1BFTiBmb3IgZGV0YWlscyBhYm91dCBGSUxFIE9QRU47IiwKKyJ0eXBlIEhF TFAgRklMRSBDTE9TRSBvciBIRUxQIEZDTE9TRSBmb3IgZGV0YWlscyBhYm91dCBGSUxFIENMT1NF LCBhbmQgc28gb24uIiwKKyIgIiwKKyJUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgcmVsYXRl ZCB0byB0aGUgRklMRSBjb21tYW5kOiIsCisiICIsCisiICBcXHYoZl9tYXgpICAgICAtLSBNYXhp bXVtIG51bWJlciBvZiBmaWxlcyB0aGF0IGNhbiBiZSBvcGVuIGF0IG9uY2UiLAorIiAgXFx2KGZf ZXJyb3IpICAgLS0gQ29tcGxldGlvbiBjb2RlIG9mIG1vc3QgcmVjZW50IEZJTEUgY29tbWFuZCBv ciBmdW5jdGlvbiIsCisiICBcXHYoZl9jb3VudCkgICAtLSBSZXN1bHQgb2YgbW9zdCByZWNlbnQg RklMRSBDT1VOVCBjb21tYW5kIiwKKyIgIiwKKyJUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUg cmVsYXRlZCB0byB0aGUgRklMRSBjb21tYW5kOiIsCisiICIsCisiICBcXEZfZW9mKCkgICAgICAt LSBDaGVjayBpZiBjaGFubmVsIGlzIGF0IEVPRiIsCisiICBcXEZfcG9zKCkgICAgICAtLSBHZXQg Y2hhbm5lbCByZWFkL3dyaXRlIHBvc2l0aW9uIChieXRlIG51bWJlcikiLAorIiAgXFxGX2xpbmUo KSAgICAgLS0gR2V0IGNoYW5uZWwgcmVhZC93cml0ZSBwb3NpdGlvbiAobGluZSBudW1iZXIpIiwK KyIgIFxcRl9oYW5kbGUoKSAgIC0tIEdldCBmaWxlIGhhbmRsZSIsCisiICBcXEZfc3RhdHVzKCkg ICAtLSBHZXQgY2hhbm5lbCBzdGF0dXMiLAorIiAgXFxGX2dldGNoYXIoKSAgLS0gUmVhZCBjaGFy YWN0ZXIiLAorIiAgXFxGX2dldGxpbmUoKSAgLS0gUmVhZCBsaW5lIiwKKyIgIFxcRl9nZXRibG9j aygpIC0tIFJlYWQgYmxvY2siLAorIiAgXFxGX3B1dGNoYXIoKSAgLS0gV3JpdGUgY2hhcmFjdGVy IiwKKyIgIFxcRl9wdXRsaW5lKCkgIC0tIFdyaXRlIGxpbmUiLAorIiAgXFxGX3B1dGJsb2NrKCkg LS0gV3JpdGUgYmxvY2siLAorIiAgXFxGX2Vycm1zZygpICAgLS0gRXJyb3IgbWVzc2FnZSBmcm9t IG1vc3QgcmVjZW50IEZJTEUgY29tbWFuZCBvciBmdW5jdGlvbiIsCisiICIsCisiVHlwZSBIRUxQ IDxmdW5jdGlvbi1uYW1lPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvbmUuIiwKKyIiCit9 OworCitzdGF0aWMgY2hhciAqIGh4eGZfb3BbXSA9IHsKKyJTeW50YXg6IEZJTEUgT1BFTiBbIHN3 aXRjaGVzIF0gPHZhcmlhYmxlPiA8ZmlsZW5hbWU+IiwKKyIgIE9wZW5zIHRoZSBmaWxlIGluZGlj YXRlZCBieSA8ZmlsZW5hbWU+IGluIHRoZSBtb2RlIGluZGljYXRlZCBieSB0aGUiLAorIiAgc3dp dGNoZXMsIGlmIGFueSwgb3IgaWYgbm8gc3dpdGNoZXMgYXJlIGluY2x1ZGVkLCBpbiByZWFkLW9u bHkgbW9kZSwgYW5kIiwKKyIgIGFzc2lnbnMgYSBjaGFubmVsIG51bWJlciBmb3IgdGhlIGZpbGUg dG8gdGhlIGdpdmVuIHZhcmlhYmxlLiIsCisiICBTeW5vbnltOiBGT1BFTi4gIFN3aXRjaGVzOiIs CisiICIsCisiL1JFQUQiLAorIiAgT3BlbiB0aGUgZmlsZSBmb3IgcmVhZGluZy4iLAorIiAiLAor Ii9XUklURSIsCisiICBPcGVuIHRoZSBmaWxlIGZvciB3cml0aW5nLiAgSWYgL1JFQUQgd2FzIG5v dCBhbHNvIHNwZWNpZmllZCwgdGhpcyBjcmVhdGVzIiwKKyIgIGEgbmV3IGZpbGUuICBJZiAvUkVB RCB3YXMgc3BlY2lmaWVkLCB0aGUgZXhpc3RpbmcgZmlsZSBpcyBwcmVzZXJ2ZWQsIGJ1dCIsCisi ICB3cml0aW5nIGlzIGFsbG93ZWQuICBJbiBib3RoIGNhc2VzLCB0aGUgcmVhZC93cml0ZSBwb2lu dGVyIGlzIGluaXRpYWxseSIsCisiICBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiIsCisi ICIsCisiL0FQUEVORCIsCisiICBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGEg bmV3IGZpbGUgYW5kIG9wZW4gaXQgZm9yIHdyaXRpbmcuIiwKKyIgIElmIHRoZSBmaWxlIGV4aXN0 cywgb3BlbiBpdCBmb3Igd3JpdGluZywgYnV0IHdpdGggdGhlIHdyaXRlIHBvaW50ZXIiLAorIiAg cG9zaXRpb25lZCBhdCB0aGUgZW5kLiIsCisiICIsCisiL0JJTkFSWSIsCisjaWZkZWYgVk1TCisi ICBPcGVucyB0aGUgZmlsZSBpbiBiaW5hcnkgbW9kZSB0byBpbmhpYml0IGVuZC1vZi1saW5lIGNv bnZlcnNpb25zLiIsCisjZWxzZQorI2lmZGVmIE9TMgorIiAgT3BlbnMgdGhlIGZpbGUgaW4gYmlu YXJ5IG1vZGUgdG8gaW5oaWJpdCBlbmQtb2YtbGluZSBjb252ZXJzaW9ucy4iLAorI2Vsc2UKKyNp ZmRlZiBVTklYCisiICBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGluIFVOSVguIiwKKyNlbHNlCisi ICBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIG9uIHRoaXMgcGxhdGZvcm0uIiwKKyNlbmRpZiAvKiBV TklYICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCisiICIsCisiU3dpdGNo ZXMgY2FuIGJlIGNvbWJpbmVkIGluIGFuIHdheSB0aGF0IG1ha2VzIHNlbnNlIGFuZCBpcyBzdXBw b3J0ZWQgYnkgdGhlIiwKKyJ1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0uIiwKKyIiCit9Owor CitzdGF0aWMgY2hhciAqIGh4eGZfY2xbXSA9IHsKKyJTeW50YXg6IEZJTEUgQ0xPU0UgPGNoYW5u ZWw+IiwKKyIgIENsb3NlcyB0aGUgZmlsZSBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBpZiBpdCB3YXMg b3Blbi4iLAorIiAgQWxzbyBzZWUgSEVMUCBGSUxFIE9QRU4uICBTeW5vbnltOiBGQ0xPU0UuIiwK KyIiCit9OworCitzdGF0aWMgY2hhciAqIGh4eGZfZmxbXSA9IHsKKyJTeW50YXg6IEZJTEUgRkxV U0ggPGNoYW5uZWw+IiwKKyIgIEZsdXNoZXMgb3V0cHV0IGJ1ZmZlcnMgb24gdGhlIGdpdmVuIGNo YW5uZWwgaWYgaXQgd2FzIG9wZW4sIGZvcmNpbmciLAorIiAgYWxsIG1hdGVyaWFsIHByZXZpb3Vz bHkgd3JpdHRlbiB0byBiZSBjb21taXR0ZWQgdG8gZGlzay4gIFN5bm9ueW06IEZGTFVTSC4iLAor IiAgQWxzbyBhdmFpbGFibGUgYXMgXFxGX2ZsdXNoKCkuIiwKKyIiCit9OworCitzdGF0aWMgY2hh ciAqIGh4eGZfbGlbXSA9IHsKKyJTeW50YXg6IEZJTEUgTElTVCIsCisiICBMaXN0cyB0aGUgY2hh bm5lbCBudW1iZXIsIG5hbWUsIG1vZGVzLCBhbmQgcG9zaXRpb24gb2YgZWFjaCBmaWxlIG9wZW5l ZCIsCisiICB3aXRoIEZJTEUgT1BFTi4gIFN5bm9ueW06IEZMSVNULiIsCisiIgorfTsKKworc3Rh dGljIGNoYXIgKiBoeHhmX3JlW10gPSB7CisiU3ludGF4OiBGSUxFIFJFQUQgWyBzd2l0Y2hlcyBd IDxjaGFubmVsPiBbIDx2YXJpYWJsZT4gXSIsCisiICBSZWFkcyBkYXRhIGZyb20gdGhlIGZpbGUg b24gdGhlIGdpdmVuIGNoYW5uZWwgbnVtYmVyIGludG8gdGhlIDx2YXJpYWJsZT4sIiwKKyIgIGlm IG9uZSB3YXMgZ2l2ZW47IGlmIG5vIHZhcmlhYmxlIHdhcyBnaXZlbiwgdGhlIHJlc3VsdCBpcyBw cmludGVkIG9uIiwKKyIgIHRoZSBzY3JlZW4uICBUaGUgdmFyaWFibGUgc2hvdWxkIGJlIGEgbWFj cm8gbmFtZSByYXRoZXIgdGhhbiBhIFxcJXgiLAorIiAgdmFyaWFibGUgb3IgYXJyYXkgZWxlbWVu dCBpZiB5b3Ugd2FudCBiYWNrc2xhc2ggY2hhcmFjdGVycyBpbiB0aGUgZmlsZSB0byIsCisiICBi ZSB0YWtlbiBsaXRlcmFsbHkuICBTeW5vbnltOiBGUkVBRC4gIFN3aXRjaGVzOiIsCisiICIsCisi L0xJTkUiLAorIiAgU3BlY2lmaWVzIHRoYXQgYSBsaW5lIG9mIHRleHQgaXMgdG8gYmUgcmVhZC4g IEEgbGluZSBpcyBkZWZpbmVkIGFjY29yZGluZyIsCisiICB0byB0aGUgdW5kZXJseWluZyBvcGVy YXRpbmcgc3lzdGVtJ3MgdGV4dC1maWxlIGZvcm1hdC4gIEZvciBleGFtcGxlLCBpbiIsCisiICBV TklYIGEgbGluZSBpcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdXAgdG8gYW5kIGluY2x1ZGlu ZyBhIGxpbmVmZWVkLiIsCisiICBUaGUgbGluZSB0ZXJtaW5hdG9yIChpZiBhbnkpIGlzIHJlbW92 ZWQgYmVmb3JlIGFzc2lnbmluZyB0aGUgdGV4dCB0byB0aGUiLAorIiAgdmFyaWFibGUuICBJZiBu byBzd2l0Y2hlcyBhcmUgaW5jbHVkZWQgd2l0aCB0aGUgRklMRSBSRUFEIGNvbW1hbmQsIC9MSU5F IiwKKyIgIGlzIGFzc3VtZWQuIiwKKyIgIiwKKyIvU0laRTpudW1iZXIiLAorIiAgU3BlY2lmaWVz IHRoYXQgdGhlIGdpdmVuIG51bWJlciBvZiBieXRlcyAoY2hhcmFjdGVycykgaXMgdG8gYmUgcmVh ZC4iLAorIiAgVGhpcyBnaXZlcyBhIHNlbWJsYW5jZSBvZiBcInJlY29yZCBpL29cIiBmb3IgZmls ZXMgdGhhdCBkbyBub3QgbmVjZXNzYXJpbHkiLAorIiAgY29udGFpbiBsaW5lcy4gIFRoZSByZXN1 bHRpbmcgYmxvY2sgb2YgY2hhcmFjdGVycyBpcyBhc3NpZ25lZCB0byB0aGUiLAorIiAgdmFyaWFi bGUgd2l0aG91dCBhbnkgZWRpdGluZy4iLAorIiAiLAorIi9DSEFSQUNURVIiLAorIiAgRXF1aXZh bGVudCB0byAvU0laRToxLiAgSWYgRklMRSBSRUFEIC9DSEFSIHN1Y2NlZWRzIGJ1dCB0aGUgPHZh cmlhYmxlPiBpcyIsCisiICBlbXB0eSwgdGhpcyBpbmRpY2F0ZXMgYSBOVUwgYnl0ZSB3YXMgcmVh ZC4iLAorIiAiLAorIi9UUklNIiwKKyIgIFRlbGxzIEtlcm1pdCB0byB0cmltIHRyYWlsaW5nIHdo aXRlc3BhY2Ugd2hlbiB1c2VkIHdpdGggL0xJTkUuICBJZ25vcmVkIiwKKyIgIGlmIHVzZWQgd2l0 aCAvQ0hBUiBvciAvU0laRS4iLAorIiAiLAorIi9VTlRBQklGWSIsCisiICBUZWxscyBLZXJtaXQg dG8gY29udmVydCB0YWJzIHRvIHNwYWNlcyAoYXNzdW1pbmcgdGFicyBzZXQgZXZlcnkgOCBzcGFj ZXMpIiwKKyIgIHdoZW4gdXNlZCB3aXRoIC9MSU5FLiAgSWdub3JlZCBpZiB1c2VkIHdpdGggL0NI QVIgb3IgL1NJWkUuIiwKKyIgIiwKKyJTeW5vbnltOiBGUkVBRC4iLAorIkFsc28gYXZhaWxhYmxl IGFzIFxcRl9nZXRjaGFyKCksIFxcRl9nZXRsaW5lKCksIFxcRl9nZXRibG9jaygpLiIsCisiIgor fTsKKworc3RhdGljIGNoYXIgKiBoeHhmX3J3W10gPSB7CisiU3ludGF4OiBGSUxFIFJFV0lORCA8 Y2hhbm5lbD4iLAorIiAgSWYgdGhlIGNoYW5uZWwgaXMgb3BlbiwgbW92ZXMgdGhlIHJlYWQvd3Jp dGUgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIiwKKyIgIHRoZSBmaWxlLiAgRXF1aXZhbGVu dCB0byBGSUxFIFNFRUsgPGNoYW5uZWw+IDAuICBTeW5vbnltOiBGUkVXSU5ELiIsCisiICBBbHNv IGF2YWlsYWJsZSBhcyBcXEZfcmV3aW5kKCkuIiwKKyIiCit9OworCitzdGF0aWMgY2hhciAqIGh4 eGZfc2VbXSA9IHsKKyJTeW50YXg6IEZJTEUgU0VFSyBbIHN3aXRjaGVzIF0gPGNoYW5uZWw+IHsg W3srLC19XTxudW1iZXI+LCBFT0YgfSIsCisiICBTd2l0Y2hlcyBhcmUgL0JZVEUsIC9MSU5FLCAv UkVMQVRJVkUsIC9BQlNPTFVURSwgYW5kIC9GSU5EOnBhdHRlcm4uIiwKKyIgIE1vdmVzIHRoZSBm aWxlIHBvaW50ZXIgZm9yIHRoaXMgZmlsZSB0byB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhlIiwK KyIgIGZpbGUuICBTdWJzZXF1ZW50IEZJTEUgUkVBRHMgb3IgV1JJVEVzIHdpbGwgdGFrZSBwbGFj ZSBhdCB0aGF0IHBvc2l0aW9uLiIsCisiICBJZiBuZWl0aGVyIHRoZSAvUkVMQVRJVkUgbm9yIC9B QlNPTFVURSBzd2l0Y2ggaXMgZ2l2ZW4sIGFuIHVuc2lnbmVkIiwKKyIgIDxudW1iZXI+IGlzIGFi c29sdXRlOyBhIHNpZ25lZCBudW1iZXIgaXMgcmVsYXRpdmUuICBFT0YgbWVhbnMgdG8gbW92ZSB0 byIsCisiICB0aGUgZW5kIG9mIHRoZSBmaWxlLiAgSWYgYSAvRklORDogc3dpdGNoIGlzIGluY2x1 ZGVkLCBLZXJtaXQgc2Vla3MgdG8gdGhlIiwKKyIgIHNwZWNpZmllZCBzcG90IChlLmcuIDAgZm9y IHRoZSBiZWdpbm5pbmcpIGFuZCB0aGVuIGJlZ2lucyBzZWFyY2hpbmcgbGluZSIsCisiICBieSBs aW5lIGZvciB0aGUgZmlyc3QgbGluZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICBU byBzdGFydCIsCisiICBzZWFyY2hpbmcgZnJvbSB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIHNw ZWNpZnkgYSBsaW5lIG51bWJlciBvZiArMC4iLAorIiAgVG8gc3RhcnQgc2VhcmNoaW5nIGZyb20g dGhlIGxpbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lLCB1c2UgKzEgKGV0YykuIiwKKyIgIFN5bm9u eW06IEZTRUVLLiIsCisiIgorfTsKKworc3RhdGljIGNoYXIgKiBoeHhmX3N0W10gPSB7CisiU3lu dGF4OiBGSUxFIFNUQVRVUyA8Y2hhbm5lbD4iLAorIiAgSWYgdGhlIGNoYW5uZWwgaXMgb3Blbiwg dGhpcyBjb21tYW5kIHNob3dzIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB0aGUiLAorIiAgc3dpdGNo ZXMgaXQgd2FzIG9wZW5lZCB3aXRoLCBhbmQgdGhlIGN1cnJlbnQgcmVhZC93cml0ZSBwb3NpdGlv bi4iLAorIiAgU3lub255bTogRlNUQVRVUyIsCisiIgorfTsKKworc3RhdGljIGNoYXIgKiBoeHhm X2NvW10gPSB7CisiU3ludGF4OiBGSUxFIENPVU5UIFsgeyAvQllURVMsIC9MSU5FUywgL0xJU1Qs IC9OT0xJU1QgfSBdIDxjaGFubmVsPiIsCisiICBJZiB0aGUgY2hhbm5lbCBpcyBvcGVuLCB0aGlz IGNvbW1hbmQgcHJpbnRzIHRoZSBudWJtZXIgb2YgYnl0ZXMgKGRlZmF1bHQpIiwKKyIgIG9yIGxp bmVzIGluIHRoZSBmaWxlIGlmIGF0IHRvcCBsZXZlbCBvciBpZiAvTElTVCBpcyBpbmNsdWRlZDsg aWYgL05PTElTVCIsCisiICBpcyBnaXZlbiwgdGhlIHJlc3VsdCBpcyBub3QgcHJpbnRlZC4gIElu IGFsbCBjYXNlcyB0aGUgcmVzdWx0IGlzIGFzc2lnbmVkIiwKKyIgIHRvIFxcdihmX2NvdW50KS4g IFN5bm9ueW06IEZDT1VOVCIsCisiIgorfTsKKworc3RhdGljIGNoYXIgKiBoeHhmX3dyW10gPSB7 CisiRklMRSBXUklURSBbIHN3aXRjaGVzIF0gPGNoYW5uZWw+IDx0ZXh0PiIsCisiICBXcml0ZXMg dGhlIGdpdmVuIHRleHQgdG8gdGhlIGZpbGUgb24gdGhlIGdpdmVuIGNoYW5uZWwgbnVtYmVyLiAg VGhlIDx0ZXh0PiIsCisiICBjYW4gYmUgbGl0ZXJhbCB0ZXh0IG9yIGEgdmFyaWFibGUsIG9yIGFu eSBjb21iaW5hdGlvbi4gIElmIHRoZSB0ZXh0IG1pZ2h0IiwKKyIgIGNvbnRhaW4gbGVhZGluZyBv ciB0cmFpbGluZyBzcGFjZXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gYnJhY2VzIGlmIHlvdSIs CisiICB3YW50IHRvIHByZXNlcnZlIHRoZW0uICBTeW5vbnltOiBGV1JJVEUuICBTd2l0Y2hlczoi LAorIiAiLAorIi9MSU5FIiwKKyIgIFNwZWNpZmllcyB0aGF0IGFuIGFwcHJvcHJpYXRlIGxpbmUg dGVybWluYXRvciBpcyB0byBiZSBhZGRlZCB0byB0aGUiLAorIiAgZW5kIG9mIHRoZSA8dGV4dD4u ICBJZiBubyBzd2l0Y2hlcyBhcmUgaW5jbHVkZWQsIC9MSU5FIGlzIGFzc3VtZWQuIiwKKyIgIiwK KyIvU0laRTpudW1iZXIiLAorIiAgU3BlY2lmaWVzIHRoYXQgdGhlIGdpdmVuIG51bWJlciBvZiBi eXRlcyAoY2hhcmFjdGVycykgaXMgdG8gYmUgd3JpdHRlbi4iLAorIiAgSWYgdGhlIGdpdmVuIDx0 ZXh0PiBpcyBsb25nZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUsIGl0IGlzIHRydW5jYXRlZDsi LAorIiAgaWYgaXMgc2hvcnRlciwgaXQgaXMgcGFkZGVkIGFjY29yZGluZyAvTFBBRCBhbmQgL1JQ QUQgc3dpdGNoZXMuICBTeW5vbnltOiIsCisiICAvQkxPQ0suIiwKKyIgIiwKKyIvTFBBRFs6dmFs dWVdIiwKKyIgIElmIC9TSVpFIHdhcyBnaXZlbiwgYnV0IHRoZSA8dGV4dD4gaXMgc2hvcnRlciB0 aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZSwiLAorIiAgdGhlIHRleHQgaXMgcGFkZGVkIG9uIHRoZSBs ZWZ0IHdpdGggc3VmZmljaWVudCBjb3BpZXMgb2YgdGhlIGNoYXJhY3RlciIsCisiICB3aG9zZSBB U0NJSSB2YWx1ZSBpcyBnaXZlbiB0byB3cml0ZSB0aGUgZ2l2ZW4gbGVuZ3RoLiAgSWYgbm8gdmFs dWUgaXMiLAorIiAgc3BlY2lmaWVkLCAzMiAodGhlIGNvZGUgZm9yIFNwYWNlKSBpcyB1c2VkLiAg VGhlIHZhbHVlIGNhbiBhbHNvIGJlIDAgdG8iLAorIiAgd3JpdGUgdGhlIGluZGljYXRlZCBudW1i ZXIgb2YgTlVMIGJ5dGVzLiAgSWYgL1NJWkUgd2FzIG5vdCBnaXZlbiwgdGhpcyIsCisiICBzd2l0 Y2ggaXMgaWdub3JlZC4iLAorIiAiLAorIi9SUEFEWzp2YWx1ZV0iLAorIiAgTGlrZSBMUEFELCBi dXQgcGFkcyBvbiB0aGUgcmlnaHQuIiwKKyIgIiwKKyIvU1RSSU5HIiwKKyIgIFNwZWNpZmllcyB0 aGF0IHRoZSA8dGV4dD4gaXMgdG8gYmUgd3JpdHRlbiBhcy1pcywgd2l0aCBubyB0ZXJtaW5hdG9y IGFkZGVkLiIKKywKKyIgIiwKKyIvQ0hBUkFDVEVSIiwKKyIgIFNwZWNpZmllcyB0aGF0IG9uZSBj aGFyYWN0ZXIgc2hvdWxkIGJlIHdyaXR0ZW4uICBJZiB0aGUgPHRleHQ+IGlzIGVtcHR5IG9yIiwK KyIgIG5vdCBnaXZlbiwgYSBOVUwgY2hhcmFjdGVyIGlzIHdyaXR0ZW47IG90aGVyd2lzZSB0aGUg Zmlyc3QgY2hhcmFjdGVyIG9mIiwKKyIgIDx0ZXh0PiBpcyBnaXZlbi4iLAorIiAiLAorIlN5bm9u eW0gRldSSVRFLiIsCisiQWxzbyBhdmFpbGFibGUgYXMgXFxGX3B1dGNoYXIoKSwgXFxGX3B1dGxp bmUoKSwgXFxGX3B1dGJsb2NrKCkuIiwKKyIiCit9OworCitzdGF0aWMgaW50Citkb2hmaWxlKGN4 KSBpbnQgY3g7IHsKKyAgICBleHRlcm4gc3RydWN0IGtleXRhYiBmY3RhYltdOworICAgIGV4dGVy biBpbnQgbmZjdGFiOworICAgIGludCB4OworICAgIGlmIChjeCA9PSBYWEZJTEUpIHsgICAgICAg ICAgICAgICAgIC8qIEZJTEUgY29tbWFuZCB3YXMgZ2l2ZW4gKi8KKyAgICAgICAgLyogR2V0IHN1 YmNvbW1hbmQgKi8KKyAgICAgICAgaWYgKChjeCA9IGNta2V5KGZjdGFiLG5mY3RhYiwiT3BlcmF0 aW9uIiwiIix4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgaWYgKGN4ID09IC0zKSB7Cisg ICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICAgICAgICAgIGN4ID0gWFhGSUxFOworICAgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICAgIHJldHVybihjeCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgc3dpdGNoIChj eCkgeworICAgICAgICAgIGNhc2UgRklMX0NMUzogY3ggPSBYWEZfQ0w7IGJyZWFrOworICAgICAg ICAgIGNhc2UgRklMX0ZMVTogY3ggPSBYWEZfRkw7IGJyZWFrOworICAgICAgICAgIGNhc2UgRklM X0xJUzogY3ggPSBYWEZfTEk7IGJyZWFrOworICAgICAgICAgIGNhc2UgRklMX09QTjogY3ggPSBY WEZfT1A7IGJyZWFrOworICAgICAgICAgIGNhc2UgRklMX1JFQTogY3ggPSBYWEZfUkU7IGJyZWFr OworICAgICAgICAgIGNhc2UgRklMX1JFVzogY3ggPSBYWEZfUlc7IGJyZWFrOworICAgICAgICAg IGNhc2UgRklMX1NFRTogY3ggPSBYWEZfU0U7IGJyZWFrOworICAgICAgICAgIGNhc2UgRklMX1NU QTogY3ggPSBYWEZfU1Q7IGJyZWFrOworICAgICAgICAgIGNhc2UgRklMX1dSSTogY3ggPSBYWEZf V1I7IGJyZWFrOworICAgICAgICAgIGNhc2UgRklMX0NPVTogY3ggPSBYWEZfQ087IGJyZWFrOwor ICAgICAgICB9CisgICAgfQorICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgIGNhc2UgWFhGSUxFOiBy ZXR1cm4oaG1zZ2EoaHh4ZmlsZSkpOworICAgICAgY2FzZSBYWEZfQ0w6IHJldHVybihobXNnYSho eHhmX2NsKSk7CisgICAgICBjYXNlIFhYRl9GTDogcmV0dXJuKGhtc2dhKGh4eGZfZmwpKTsKKyAg ICAgIGNhc2UgWFhGX0xJOiByZXR1cm4oaG1zZ2EoaHh4Zl9saSkpOworICAgICAgY2FzZSBYWEZf T1A6IHJldHVybihobXNnYShoeHhmX29wKSk7CisgICAgICBjYXNlIFhYRl9SRTogcmV0dXJuKGht c2dhKGh4eGZfcmUpKTsKKyAgICAgIGNhc2UgWFhGX1JXOiByZXR1cm4oaG1zZ2EoaHh4Zl9ydykp OworICAgICAgY2FzZSBYWEZfU0U6IHJldHVybihobXNnYShoeHhmX3NlKSk7CisgICAgICBjYXNl IFhYRl9TVDogcmV0dXJuKGhtc2dhKGh4eGZfc3QpKTsKKyAgICAgIGNhc2UgWFhGX1dSOiByZXR1 cm4oaG1zZ2EoaHh4Zl93cikpOworICAgICAgY2FzZSBYWEZfQ086IHJldHVybihobXNnYShoeHhm X2NvKSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oLTIpOworICAgIH0KK30KKyNl bmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCitpbnQKK2RvaGxwKHh4KSBpbnQgeHg7IHsKKyAgICBp bnQgeCx5OworCisgICAgZGVidWcoRjEwMSwiRE9IRUxQIHh4IiwiIix4eCk7CisgICAgaWYgKHh4 IDwgMCkgcmV0dXJuKHh4KTsKKworI2lmZGVmIE5PSEVMUAorICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBwcmludGYoIlxuJXMsIENvcHlyaWdodCAoQykg MTk4NSwgJXMsIix2ZXJzaW8sIGNrX2NyeWVhcik7CisjaWZuZGVmIE5PSUtTRAorICAgIGlmIChp bnNlcnZlcikKKyAgICAgIHJldHVybihobXNnYSh0b3BobHBpKSk7CisgICAgZWxzZQorI2VuZGlm IC8qIElLU0QgKi8KKyAgICAgIHJldHVybihobXNnYSh0b3BobHApKTsKKworI2Vsc2UgLyogaGVs cCBpcyBhdmFpbGFibGUgKi8KKworICAgIGlmIChoZWxwZmlsZSkKKyAgICAgIHJldHVybihkb3R5 cGUoaGVscGZpbGUseGFza21vcmUsMCwwLE5VTEwsMCxOVUxMLDAsMCxOVUxMLDApKTsKKworI2lm ZGVmIENLQ0hBTk5FTElPCisgICAgaWYgKHh4ID09IFhYRklMRSkKKyAgICAgIHJldHVybihkb2hm aWxlKHh4KSk7CisgICAgZWxzZSBpZiAoeHggPT0gWFhGX1JFIHx8IHh4ID09IFhYRl9XUiB8fCB4 eCA9PSBYWEZfT1AgfHwKKyAgICAgICAgICAgICB4eCA9PSBYWEZfQ0wgfHwgeHggPT0gWFhGX1NF IHx8IHh4ID09IFhYRl9SVyB8fAorICAgICAgICAgICAgIHh4ID09IFhYRl9GTCB8fCB4eCA9PSBY WEZfTEkgfHwgeHggPT0gWFhGX1NUIHx8IHh4ID09IFhYRl9DTykKKyAgICAgIHJldHVybihkb2hm aWxlKHh4KSk7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworICAgIHN3aXRjaCAoeHgpIHsK KworI2lmbmRlZiBOT1NQTAorY2FzZSBYWEFTUzogICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEFTU0lHTiAqLworICAgIHJldHVybihobXNnYShoeHhhc3MpKTsKKworY2FzZSBYWEFTSzog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFTSyAqLworY2FzZSBYWEFTS1E6ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEFTS1EgKi8KKyAgICByZXR1cm4oaG1zZ2EoaHh4YXNr KSk7CisKK2Nhc2UgWFhBUEM6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogQVBDIHRleHRcblwK KyAgRWNob2VzIHRoZSB0ZXh0IHdpdGhpbiBhIFZUMjIwLzMyMC80MjAgQXBwbGljYXRpb24gUHJv Z3JhbSBDb21tYW5kLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PRlJJTExT CitjYXNlIFhYQlVHOgorICAgIHJldHVybihobXNnKCJEZXNjcmliZXMgaG93IHRvIGdldCB0ZWNo bmljYWwgc3VwcG9ydC4iKSk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT1NQ TAorY2FzZSBYWEJFRVA6CisjaWZkZWYgT1MyCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogQkVF UCBbIHsgRVJST1IsIElORk9STUFUSU9OLCBXQVJOSU5HIH0gXVxuXAorICBHZW5lcmF0ZXMgYSBi ZWxsIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzZXR0aW5ncy4gIElmIFNFVCBCRUxMIGlzIHNl dCB0b1xuXAorICBcInN5c3RlbS1zb3VuZHNcIiB0aGVuIHRoZSBhcHByb3ByaWF0ZSBTeXN0ZW0g U291bmQgd2lsbCBiZSBnZW5lcmF0ZWQuXG5cCisgIERlZmF1bHQgaXMgSU5GT1JNQVRJT04uIikp OworI2Vsc2UgLyogT1MyICovCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogQkVFUFxuXAorU2Vu ZHMgYSBCRUwgY2hhcmFjdGVyIHRvIHlvdXIgdGVybWluYWwuIikpOworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIE5PU1BMICovCisKK2Nhc2UgWFhCWUU6ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBCWUUgKi8KKyAgICByZXR1cm4oaG1zZyhobXh4YnllKSk7CisKK2Nhc2UgWFhD SEs6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayAqLworICAgIHJldHVybiho bXNnKCJcCitTeW50YXg6IENIRUNLIG5hbWVcblwKKyAgQ2hlY2tzXAorICB0byBzZWUgaWYgdGhl IG5hbWVkIGZlYXR1cmUgaXMgaW5jbHVkZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdC5cblwK KyAgVG8gbGlzdCB0aGUgZmVhdHVyZXMgeW91IGNhbiBjaGVjaywgdHlwZSBcImNoZWNrID9cIi4i KSk7CisKKyNpZm5kZWYgTk9GUklMTFMKK2Nhc2UgWFhDTEU6ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBjbGVhciAqLworICAgIHJldHVybihobXNnYShobXh4Y2xlKSk7CisjZW5kaWYg LyogTk9GUklMTFMgKi8KKworY2FzZSBYWENMTzogICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGNsb3NlICovCisgICAgcmV0dXJuKGhtc2dhKGhteHhjbG8pKTsKKworY2FzZSBYWENPTTog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1lbnQgKi8KKyNpZm5kZWYgU1RSQVRV UyAvKiBDYW4ndCB1c2UgIyBmb3IgY29tbWVudHMgaW4gU3RyYXR1cyBWT1MgKi8KKyAgICByZXR1 cm4oaG1zZygiXAorU3ludGF4OiBDT01NRU5UIHRleHRcblwKK0V4YW1wbGU6IENPTU1FTlQgLSB0 aGlzIGlzIGEgY29tbWVudC5cblwKKyAgSW50cm9kdWNlcyBhIGNvbW1lbnQuICBCZWdpbm5pbmcg b2YgY29tbWFuZCBsaW5lIG9ubHkuICBDb21tYW5kcyBtYXkgYWxzb1xuXAorICBoYXZlIHRyYWls aW5nIGNvbW1lbnRzLCBpbnRyb2R1Y2VkIGJ5IDsgb3IgIy4iKSk7CisjZWxzZQorICAgIHJldHVy bihobXNnKCJcCitTeW50YXg6IENPTU1FTlQgdGV4dFxuXAorRXhhbXBsZTogQ09NTUVOVCAtIHRo aXMgaXMgYSBjb21tZW50LlxuXAorICBJbnRyb2R1Y2VzIGEgY29tbWVudC4gIEJlZ2lubmluZyBv ZiBjb21tYW5kIGxpbmUgb25seS4gIENvbW1hbmRzIG1heSBhbHNvXG5cCisgIGhhdmUgdHJhaWxp bmcgY29tbWVudHMsIGludHJvZHVjZWQgYnkgOyAoc2VtaWNvbG9uKS4iKSk7CisjZW5kaWYgLyog U1RSQVRVUyAqLworCisjaWZuZGVmIE5PTE9DQUwKK2Nhc2UgWFhDT046ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDT05ORUNUICovCitjYXNlIFhYQ1E6ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ1EgPT0gQ09OTkVDVCAvUVVJRVRMWSAqLworICAgIGhtc2dhKGhteHhj b24pOworICAgIHByaW50ZigiWW91ciBlc2NhcGUgY2hhcmFjdGVyIGlzIEN0cmwtJWMgKEFTQ0lJ ICVkLCAlcylcclxuIiwKKyAgICAgICAgICAgY3RsKGVzY2FwZSksIGVzY2FwZSwgKGVzY2FwZSA9 PSAxMjcgPyAiREVMIiA6IGNjbnRhYltlc2NhcGVdKSk7CisgICAgcmV0dXJuKDApOworI2VuZGlm IC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIFpDT1BZCitjYXNlIFhYQ1BZOgorICAgIHJldHVybiho bXNnYShobXh4Y3B5KSk7CisjZW5kaWYgLyogWkNPUFkgKi8KKworI2lmZGVmIE5UCitjYXNlIFhY TElOSzoKK3JldHVybihobXNnKAorIiAgTElOSyBzb3VyY2UgZGVzdGluYXRpb25cblwKKyAgIGNy ZWF0ZXMgYSBoYXJkIGxpbmsgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IHNvdXJjZSB0byB0aGUg ZmlsZW5hbWVcblwKKyAgIHNwZWNpZmllZCBieSBkZXN0aW5hdGlvbi4gIEhhcmQgbGlua3MgYXJl IG9ubHkgc3VwcG9ydGVkIG9uIE5URlMuXG5cCisgICBkZXN0aW5hdGlvbiBjYW4gZWl0aGVyIGJl IGEgZmlsZW5hbWUgb3IgYSBkaXJlY3RvcnkuICBzb3VyY2UgbWF5XG5cCisgICBjb250YWluIHdp bGRjYXJkcyBpZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4iKSk7CisjZW5kaWYgLyogTlQg Ki8KKworI2lmbmRlZiBOT0ZSSUxMUworY2FzZSBYWExSRU46ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIExSRU5BTUUgKi8KKyAgICByZXR1cm4oaG1zZygKKyIgIExSRU5BTUUgaXMgYW4g YWxpYXMgZm9yIHRoZSBSRU5BTUUgY29tbWFuZCBmb3JjaW5nIGl0IHRvIGV4ZWN1dGVcblwKKyAg b24gdGhlIGxvY2FsIGNvbXB1dGVyLiAgQWxzbyBzZWU6IFJFTkFNRSwgUlJFTkFNRSwgU0VUIExP Q1VTLiIpKTsKKworY2FzZSBYWFJFTjoKKyAgICByZXR1cm4oaG1zZ2EoaG14eHJlbikpOworI2Vu ZGlmIC8qIE5PRlJJTExTICovCisKK2Nhc2UgWFhDRFVQOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ0RVUCAqLworY2FzZSBYWExDRFU6CisgICAgcmV0dXJuKGhtc2coCisiQ2hhbmdl IHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBvbmUganVzdCBhYm92ZSB0aGUgY3VycmVudCBvbmUu IikpOworCitjYXNlIFhYTENXRDoKKyAgICByZXR1cm4oaG1zZygKKyIgIExDRCAoTENXRCkgaXMg YW4gYWxpYXMgZm9yIHRoZSBDRCAoQ1dEKSBjb21tYW5kIGZvcmNpbmcgaXQgdG8gZXhlY3V0ZVxu XAorICBvbiB0aGUgbG9jYWwgY29tcHV0ZXIuICBBbHNvIHNlZTogQ0QsIENEVVAsIFJDRCwgU0VU IExPQ1VTLiIpKTsKKworY2FzZSBYWENXRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENEIC8gQ1dEICovCisgICAgcmV0dXJuKGhtc2dhKGhteHhjd2QpKTsKKworI2lmbmRlZiBOT1NQ TAorY2FzZSBYWEtDRDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eGtjZCkpOworCitjYXNlIFhYQVJS QVk6CitjYXNlIFhYRENMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVDTEFSRSAq LworY2FzZSBYWFNPUlQ6CisgICAgcmV0dXJuKGhtc2dhKGh4eGRjbCkpOworCitjYXNlIFhYREVG OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVGSU5FICovCisjaWZuZGVmIE5PU1BM CisgICAgaWYgKGhscHRvaykgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2hhdCB0aGV5IGFj dHVhbGx5IHR5cGVkLi4uICovCisgICAgICBpZiAoaGxwdG9rWzBdID09ICcuJykKKyAgICAgICAg cmV0dXJuKGhtc2dhKGh4eGRvdCkpOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgcmV0dXJuKGht c2dhKGh4eGRlZikpOworCitjYXNlIFhYVU5ERUY6ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogVU5ERUZJTkUgKi8KKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiAgVU5ERUZJTkUgdmFyaWFi bGUtbmFtZVxuXAorICBVbmRlZmluZXMgYSBtYWNybyBvciB2YXJpYWJsZS4iKSk7CisjZW5kaWYg LyogTk9TUEwgKi8KKworY2FzZSBYWE1TRzoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBNRVNT QUdFIHRleHQtdG8tcHJpbnQtaWYtZGVidWdnaW5nXG5cCisgIFByaW50cyB0aGUgZ2l2ZW4gdGV4 dCB0byBzdGRvdXQgaWYgU0VUIERFQlVHIE1FU1NBR0UgaXMgT047IHByaW50cyBpdFxuXAorICB0 byBzdGRlcnIgaWYgU0VUIERFQlVHIE1FU1NBR0UgaXMgU1RERVJSOyBkb2Vzbid0IHByaW50IGl0 IGF0IGFsbCBpZiBTRVRcblwKKyAgREVCVUcgTUVTU0FHRSBpcyBPRkYuICBTeW5vbnltOiBNU0cu IikpOworCisjaWZuZGVmIE5PRlJJTExTCitjYXNlIFhYTERFTDoKKyAgICByZXR1cm4oaG1zZygK KyIgIExERUxFVEUgaXMgYW4gYWxpYXMgZm9yIHRoZSBERUxFVEUgY29tbWFuZCBmb3JjaW5nIGl0 IHRvIGV4ZWN1dGVcblwKKyAgb24gdGhlIGxvY2FsIGNvbXB1dGVyLiAgQWxzbyBzZWU6IERFTEVU RSwgUkRFTEVURSwgU0VUIExPQ1VTLiIpKTsKKworY2FzZSBYWERFTDogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGRlbGV0ZSAqLworICAgIHJldHVybihobXNnYShobXh4ZGVsKSk7Cisj ZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT0RJQUwKK2Nhc2UgWFhESUFMOiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMLCBldGMuLi4gKi8KKyAgICByZXR1cm4oaG1z Z2EoaHh4ZGlhbCkpOworCitjYXNlIFhYUERJQTogICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUERJQUwgKi8KKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQRElBTCBwaG9uZW51bWJlclxu XAorICBQYXJ0aWFsbHkgZGlhbHMgYSBwaG9uZSBudW1iZXIuICBMaWtlIERJQUwgYnV0IGRvZXMg bm90IHdhaXQgZm9yIGNhcnJpZXJcblwKKyAgb3IgQ09OTkVDVCBtZXNzYWdlLiIpKTsKKworY2Fz ZSBYWFJFRDoKKyAgICByZXR1cm4oaG1zZygiUmVkaWFsIHRoZSBudW1iZXIgZ2l2ZW4gaW4gdGhl IG1vc3QgcmVjZW50IERJQUwgY29tbW5kLiIpKTsKKworY2FzZSBYWEFOU1c6ICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEFOU1dFUiAqLworICAgIHJldHVybihobXNnYShoeHhhbnN3KSk7 CisKK2Nhc2UgWFhMT09LOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMT09LVVAgbnVt YmVyIGluIGRpcmVjdG9yeSAqLworICAgIHJldHVybihobXNnYShoeHhsb29rKSk7CisjZW5kaWYg LyogTk9ESUFMICovCisKK2Nhc2UgWFhMRElSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMRElSRUNUT1JZICovCisgICAgcmV0dXJuKGhtc2coCisiICBMRElSSVJFQ1RPUlkgaXMgYW4g YWxpYXMgZm9yIHRoZSBESVJFQ1RPUlkgY29tbWFuZCBmb3JjaW5nIGl0IHRvIGV4ZWN1dGVcblwK KyAgb24gdGhlIGxvY2FsIGNvbXB1dGVyLiAgQWxzbyBzZWU6IERJUkVDVE9SWSwgU0VUIExPQ1VT LCBSRElSRUNUT1JZLiIpKTsKKworY2FzZSBYWERJUjogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIERJUkVDVE9SWSAqLworICAgIHJldHVybihobXNnYShobXh4ZGlyKSk7CisKK2Nhc2Ug WFhUT1VDOgkJCQkvKiBUT1VDSCAqLworICAgIHJldHVybihobXNnYShobXh4dG91YykpOworCitj YXNlIFhYV0RJUjoJCQkJLyogV0RJUkVDVE9SWSAqLworICByZXR1cm4oaG1zZygiICBXRElSRUNU T1JZIGlzIHNob3J0aGFuZCBmb3IgRElSRUNUT1JZIC9TT1JUOkRBVEUgL1JFVkVSU0U7XG5cCisg IGl0IHByb2R1Y2VzIGEgbGlzdGluZyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuICBT ZWUgdGhlIERJUkVDVE9SWVxuXAorICBjb21tYW5kIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiIp KTsKKworY2FzZSBYWEhESVI6CQkJCS8qIEhESVJFQ1RPUlkgKi8KKyAgcmV0dXJuKGhtc2coIiAg SERJUkVDVE9SWSBpcyBzaG9ydGhhbmQgZm9yIERJUkVDVE9SWSAvU09SVDpTSVpFIC9SRVZFUlNF O1xuXAorICBpdCBwcm9kdWNlcyBhIGxpc3Rpbmcgc2hvd2luZyB0aGUgYmlnZ2VzdCBmaWxlcyBm aXJzdC4gIFNlZSB0aGUgRElSRUNUT1JZXG5cCisgIGNvbW1hbmQgZm9yIGZ1cnRoZXIgaW5mb3Jt YXRpb24uIikpOworCitjYXNlIFhYTE1LRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TE1LRElSICovCisgICAgcmV0dXJuKGhtc2coCisiICBMTUtESVIgaXMgYW4gYWxpYXMgZm9yIHRo ZSBNS0RJUiBjb21tYW5kIGZvcmNpbmcgaXQgdG8gZXhlY3V0ZVxuXAorICBvbiB0aGUgbG9jYWwg Y29tcHV0ZXIuICBBbHNvIHNlZTogTUtESVIsIFJNS0RJUiwgU0VUIExPQ1VTLiIpKTsKKworY2Fz ZSBYWE1LRElSOiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1LRElSICovCisgICAgcmV0 dXJuKGhtc2coIkNyZWF0ZXMgYSBkaXJlY3RvcnkuICBBbHNvIHNlZSBMUk1ESVIsIFJSTURJUiwg U0VUIExPQ1VTLiIpKTsKKworY2FzZSBYWExSTUQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIExSTURJUiAqLworICAgIHJldHVybihobXNnKAorIiAgTFJNRElSIGlzIGFuIGFsaWFzIGZv ciB0aGUgUk1ESVIgY29tbWFuZCBmb3JjaW5nIGl0IHRvIGV4ZWN1dGVcblwKKyAgb24gdGhlIGxv Y2FsIGNvbXB1dGVyLiAgQWxzbyBzZWU6IFJNRElSLCBSUk1ESVIsIFNFVCBMT0NVUy4iKSk7CisK K2Nhc2UgWFhSTURJUjogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSTURJUiAqLworICAg IHJldHVybihobXNnKCJSZW1vdmVzIGEgZGlyZWN0b3J5LiAgQWxzbyBzZWUgTFJNRElSLCBSUk1E SVIsIFNFVCBMT0NVUy4iKSk7CisKK2Nhc2UgWFhMUzoKKyNpZmRlZiBVTklYT1JPU0sKKyAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBMUyBbIGFyZ3MgXVxuXAorICBSdW5zIFwibHNcIiB3aXRoIHRo ZSBnaXZlbiBhcmd1bWVudHMuIikpOworI2Vsc2UKKyAgICByZXR1cm4oaG1zZ2EoaG14eGRpcikp OworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworCisjaWZuZGVmIE5PU0VSVkVSCisjaWZuZGVmIE5P RlJJTExTCitjYXNlIFhYRElTOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IERJU0FCTEUgY29t bWFuZFxuXAorICBTZWN1cml0eSBmb3IgdGhlIEtlcm1pdCBzZXJ2ZXIuICBQcmV2ZW50cyB0aGUg Y2xpZW50IEtlcm1pdCBwcm9ncmFtIGZyb21cblwKKyAgZXhlY3V0aW5nIHRoZSBuYW1lZCBSRU1P VEUgY29tbWFuZCwgc3VjaCBhcyBDRCwgREVMRVRFLCBSRUNFSVZFLCBldGMuIikpOworI2VuZGlm IC8qIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2lmbmRlZiBOT1NQTAor Y2FzZSBYWERPOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvICovCisgICAgcmV0 dXJuKGhtc2coIlN5bnRheDogWyBETyBdIG1hY3JvbmFtZSBbIGFyZ3VtZW50cyBdXG5cCisgIEV4 ZWN1dGVzIGEgbWFjcm8gdGhhdCB3YXMgZGVmaW5lZCB3aXRoIHRoZSBERUZJTkUgY29tbWFuZC4g IFRoZSB3b3JkIERPXG5cCisgIGNhbiBiZSBvbWl0dGVkLiAgVHJhaWxpbmcgYXJndW1lbnQgd29y ZHMsIGlmIGFueSwgYXJlIGF1dG9tYXRpY2FsbHlcblwKKyAgYXNzaWduZWQgdG8gdGhlIG1hY3Jv IGFyZ3VtZW50IHZhcmlhYmxlcyBcXCUxIHRocm91Z2ggXFwlOS4iKSk7CisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWERFQzoKKyAgICByZXR1cm4oaG1zZ2EoaHh4 ZGVjKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworY2FzZSBYWEVDSDogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGVjaG8gKi8KKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBFQ0hPIHRl eHRcblwKKyAgRGlzcGxheXMgdGhlIHRleHQgb24gdGhlIHNjcmVlbiwgZm9sbG93ZWQgYnkgYSBs aW5lIHRlcm1pbmF0b3IuICBUaGUgRUNIT1xuXAorICB0ZXh0IG1heSBjb250YWluIGJhY2tzbGFz aCBjb2Rlcy4gIEV4YW1wbGU6IEVDSE8gXFw3V2FrZSB1cCFcXDcuICBBbHNvIHNlZVxuXAorICBY RUNITyBhbmQgV1JJVEUgU0NSRUVOLiIpKTsKKworY2FzZSBYWFhFQ0g6ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHhlY2hvICovCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogWEVDSE8g dGV4dFxuXAorICBKdXN0IGxpa2UgRUNITyBidXQgZG9lcyBub3QgYWRkIGEgbGluZSB0ZXJtaW5h dG9yIHRvIHRoZSB0ZXh0LiAgU2VlIEVDSE8uIikpOworCitjYXNlIFhYVk9JRDoKKyAgICByZXR1 cm4oaG1zZygiU3ludGF4OiBWT0lEIHRleHRcblwKKyAgTGlrZSBFQ0hPIGJ1dCBkb2Vzbid0IHBy aW50IGFueXRoaW5nOyBjYW4gYmUgdXNlZCB0byBpbnZva2UgZnVuY3Rpb25zXG5cCisgIHdoZW4g eW91IGRvbid0IG5lZWQgdG8gZGlzcGxheSBvciB1c2UgdGhlaXIgcmVzdWx0cy4iKSk7CisKKyNp Zm5kZWYgTk9TRVJWRVIKKyNpZm5kZWYgTk9GUklMTFMKK2Nhc2UgWFhFTkE6CisgICAgcmV0dXJu KGhtc2coIlN5bnRheDogRU5BQkxFIGNhcGFiaWxpdHlcblwKKyAgRm9yIHVzZSB3aXRoIHNlcnZl ciBtb2RlLiAgQWxsb3dzIHRoZSBjbGllbnQgS2VybWl0IHByb2dyYW0gYWNjZXNzIHRvIHRoZVxu XAorICBuYW1lZCBjYXBhYmlsaXR5LCBzdWNoIGFzIENELCBERUxFVEUsIFJFQ0VJVkUsIGV0Yy4g IE9wcG9zaXRlIG9mIERJU0FCTEUuIikpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisjZW5kaWYg LyogTk9TRVJWRVIgKi8KKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWEVORDogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGVuZCAqLworICAgIHJldHVybihobXNnKCJTeW50YXg6IEVORCBb IG51bWJlciBbIG1lc3NhZ2UgXSBdXG5cCisgIEV4aXRzIGZyb20gdGhlIGN1cnJlbnQgbWFjcm8g b3IgVEFLRSBmaWxlLCBiYWNrIHRvIHdoZXJldmVyIGludm9rZWQgZnJvbS5cblwKKyAgTnVtYmVy IGlzIHJldHVybiBjb2RlLiAgTWVzc2FnZSwgaWYgZ2l2ZW4sIGlzIHByaW50ZWQuIikpOworCitj YXNlIFhYRVZBTDogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXZhbHVhdGUgKi8KKyAg ICByZXR1cm4oaG1zZ2EoaG14eGV2YWwpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVm IE5PRlJJTExTCitjYXNlIFhYRVJSOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZS1w YWNrZXQgKi8KKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBFLVBBQ0tFVFxuXAorICBTZW5kcyBh biBFcnJvciBwYWNrZXQgdG8gdGhlIG90aGVyIEtlcm1pdC4iKSk7CisjZW5kaWYgLyogTk9GUklM TFMgKi8KKworY2FzZSBYWEVYSTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQg Ki8KK2Nhc2UgWFhRVUk6CisgICAgcmV0dXJuKGhtc2dhKGhteHhleGl0KSk7CisKK2Nhc2UgWFhG SU46CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogRklOSVNIXG5cCisgIFRlbGxzIHRoZSByZW1v dGUgS2VybWl0IHNlcnZlciB0byBzaHV0IGRvd24gd2l0aG91dCBsb2dnaW5nIG91dC4iKSk7CisK KyNpZm5kZWYgTk9TUEwKKyAgY2FzZSBYWEZPUjoKKyAgICByZXR1cm4oaG1zZ2EoZm9yaGxwKSk7 CisjZW5kaWYgLyogTk9TUEwgKi8KKworICBjYXNlIFhYR0VUOgorICAgIHJldHVybihobXNnYSho bXh4Z2V0KSk7CisgIGNhc2UgWFhNR0VUOgorICAgIHJldHVybihobXNnYShobXh4bWdldCkpOwor CisjaWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PRlJJTExTCisgIGNhc2UgWFhHT0s6CisgICAgcmV0 dXJuKGhtc2coIlN5bnRheDogR0VUT0sgWyBzd2l0Y2hlcyBdIHByb21wdFxuXAorICBQcmludHMg dGhlIHByb21wdCwgbWFrZXMgdXNlciB0eXBlICd5ZXMnLCAnbm8nLCBvciAnb2snLCBhbmQgc2V0 cyBTVUNDRVNTXG5cCisgIG9yIEZBSUxVUkUgYWNjb3JkaW5nbHkuICBUaGUgb3B0aW9uYWwgc3dp dGNoZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBBU0suIikpOworI2VuZGlmIC8qIE5PRlJJTExTICov CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NQTAorICBjYXNlIFhYR09UTzoKKyAg ICByZXR1cm4oaG1zZygiU3ludGF4OiBHT1RPIGxhYmVsXG5cCisgIEluIGEgVEFLRSBmaWxlIG9y IG1hY3JvLCBnbyB0byB0aGUgZ2l2ZW4gbGFiZWwuICBBIGxhYmVsIGlzIGEgd29yZCBvbiB0aGVc blwKKyAgbGVmdCBtYXJnaW4gdGhhdCBzdGFydHMgd2l0aCBhIGNvbG9uICg6KS4gIEV4YW1wbGU6 XG5cblwKKyAgOm9vZmFcblwKKyAgZWNobyBIZWxsbyFcblwKKyAgZ290byBvb2ZhIikpOworI2Vu ZGlmIC8qIE5PU1BMICovCisKKyAgY2FzZSBYWEhBTjoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4 OiBIQU5HVVBcblwKK0hhbmcgdXAgdGhlIHBob25lIG9yIG5ldHdvcmsgY29ubmVjdGlvbi4iKSk7 CisKKyAgY2FzZSBYWEhMUDoKKy8qCisgIFdlIGdldCBjb25maXJtYXRpb24gaGVyZSwgZXZlbiB0 aG91Z2ggd2UgZG8gaXQgYWdhaW4gaW4gaG1zZ2EoKSwgdG8gcHJldmVudAorICB0aGUgQ29weXJp Z2h0IG1lc3NhZ2UgZnJvbSBiZWluZyBwcmludGVkIHByZW1hdHVyZWx5LiAgVGhpcyBkb2Vzbid0 IGRvIGFueQorICBoYXJtLCBiZWNhdXNlIHRoZSBmaXJzdCBjYWxsIHRvIGNtY2ZtKCkgc2V0cyBj bWZsZ3MgdG8gMSwgbWFraW5nIHRoZSBzZWNvbmQKKyAgY2FsbCByZXR1cm4gaW1tZWRpYXRlbHku CisqLworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKworICAg IGlmIChoZWxwZmlsZSkgeworICAgICAgICBwcmludGYoIlxuJXMsIENvcHlyaWdodCAoQykgMTk4 NSwgJXMsXG5cCitUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9m IE5ldyBZb3JrLlxuXG4iLAorCSAgICAgICB2ZXJzaW8sCisJICAgICAgIGNrX2NyeWVhcgorCSAg ICAgICApOworICAgICAgICByZXR1cm4oZG90eXBlKGhlbHBmaWxlLHhhc2ttb3JlLDMsMCxOVUxM LDAsTlVMTCwwLDAsTlVMTCwwKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJcbiVz LCBDb3B5cmlnaHQgKEMpIDE5ODUsICVzLCIsdmVyc2lvLGNrX2NyeWVhcik7CisgICAgICAgIHJl dHVybihobXNnYSh0b3BobHApKTsKKyAgICB9CisKK2Nhc2UgWFhJTlQ6CisjaWZkZWYgT1MyCisg ICAgcmV0dXJuKGhtc2coIlRoZSBJTlRSTyBjb21tYW5kIGdpdmVzIGEgYnJpZWYgaW50cm9kdWN0 aW9uIHRvIEtlcm1pdCA5NS4iKSk7CisjZWxzZQorICAgIHJldHVybihobXNnKCJUaGUgSU5UUk8g Y29tbWFuZCBnaXZlcyBhIGJyaWVmIGludHJvZHVjdGlvbiB0byBDLUtlcm1pdC4iKSk7CisjZW5k aWYgLyogT1MyICovCisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFhJRjoKKyAgICByZXR1cm4oaG1z Z2EoaWZobHApKTsKKworY2FzZSBYWElOQzoKKyAgICByZXR1cm4oaG1zZ2EoaHh4aW5jKSk7CisK K2Nhc2UgWFhJTlA6CisgICByZXR1cm4oaG1zZ2EoaHh4aW5wKSk7CisjZW5kaWYgLyogTk9TUEwg Ki8KKworI2lmZGVmIENLX01JTlBVVAorY2FzZSBYWE1JTlA6CisgICAgcmV0dXJuKGhtc2dhKGht eHhtaW5wKSk7CisjZW5kaWYgLyogQ0tfTUlOUFVUICovCisKKyNpZm5kZWYgTk9TUEwKK2Nhc2Ug WFhSRUk6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVJTlBVVCBuIHN0cmluZ1xuXAorICBM b29rcyBmb3IgdGhlIHN0cmluZyBpbiB0aGUgdGV4dCB0aGF0IGhhcyByZWNlbnRseSBiZWVuIElO UFVULCBzZXQgU1VDQ0VTU1xuXAorICBvciBGQUlMVVJFIGFjY29yZGluZ2x5LiAgVGltZW91dCwg biwgbXVzdCBiZSBzcGVjaWZpZWQgYnV0IGlzIGlnbm9yZWQuIikpOworI2VuZGlmIC8qIE5PU1BM ICovCisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFhMQkw6CisgICAgcmV0dXJuKGhtc2coIlwKKyAg SW50cm9kdWNlcyBhIGxhYmVsLCBsaWtlIDpsb29wLCBmb3IgdXNlIHdpdGggR09UTyBpbiBUQUtF IGZpbGVzIG9yIG1hY3Jvcy5cblwKK1NlZSBHT1RPLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLwor CitjYXNlIFhYTE9HOgorICAgIHJldHVybihobXNnYShobXh4bGcpKTsKKworI2lmbmRlZiBOT1ND UklQVAorY2FzZSBYWExPR0k6CisgICAgcmV0dXJuKGhtc2dhKGhteHhsb2dpKSk7CisjZW5kaWYK KworI2lmbmRlZiBOT0ZSSUxMUworY2FzZSBYWE1BSToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4 OiBNQUlMIGZpbGVuYW1lIGFkZHJlc3NcblwKKyAgRXF1aXZhbGVudCB0byBTRU5EIC9NQUlMOmFk ZHJlc3MgZmlsZW5hbWUuIikpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9N U0VORAorY2FzZSBYWE1TRToKKyAgICByZXR1cm4oaG1zZ2EoaG14eG1zZSkpOworCitjYXNlIFhY QUREOgorICAgIHJldHVybihobXNnYShobXh4YWRkKSk7CisKK2Nhc2UgWFhNTU9WRToKKyAgICBy ZXR1cm4oaG1zZygiTU1PVkUgaXMgZXhhY3RseSBsaWtlIE1TRU5ELCBleGNlcHQgZWFjaCBmaWxl IHRoYXQgaXNcblwKK3NlbnQgc3VjY2Vzc2Z1bGx5IGlzIGRlbGV0ZWQgYWZ0ZXIgaXQgaXMgc2Vu dC4iKSk7CisjZW5kaWYgLyogTk9NU0VORCAqLworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhYT1BF OgorICAgIHJldHVybihobXNnYShvcGVuaGxwKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworY2Fz ZSBYWE5FVzoKKyAgICByZXR1cm4oaG1zZygKKyIgIFByaW50cyBuZXdzIG9mIG5ldyBmZWF0dXJl cyBzaW5jZSBwdWJsaWNhdGlvbiBvZiBcIlVzaW5nIEMtS2VybWl0XCIuIikpOworCitjYXNlIFhY VVBEOgorICAgIHJldHVybihobXNnKAorIiAgTmV3IGZlYXR1cmVzIGFyZSBkZXNjcmliZWQgaW4g dGhlIG9ubGluZSBLZXJtaXQgOTUgbWFudWFsLFxuXAorICAgYWNjZXNzaWJsZSB2aWEgdGhlIE1B TlVBTCBjb21tYW5kLiIpKTsKKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWE9VVDoKKyAgICByZXR1 cm4oaG1zZ2EoaHh4b3V0KSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIEFOWVgyNQor I2lmbmRlZiBJQk1YMjUKK2Nhc2UgWFhQQUQ6CisgICAgcmV0dXJuKGhtc2dhKGh4eHBhZCkpOwor I2VuZGlmIC8qIElCTVgyNSAqLworI2VuZGlmIC8qIEFOWVgyNSAqLworCisjaWZuZGVmIE5PU1BM CitjYXNlIFhYUEFVOgorICAgIHJldHVybihobXNnYShoeHhwYXUpKTsKKworY2FzZSBYWE1TTDoK KyAgICByZXR1cm4oaG1zZ2EoaHh4bXNsKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVm IFRDUFNPQ0tFVAorY2FzZSBYWFBORzoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQSU5HIFsg SVAtaG9zdG5hbWUtb3ItbnVtYmVyIF1cblwKKyAgQ2hlY2tzIGlmIHRoZSBnaXZlbiBJUCBuZXR3 b3JrIGhvc3QgaXMgcmVhY2hhYmxlLiAgRGVmYXVsdCBob3N0IGlzIGZyb21cblwKKyAgbW9zdCBy ZWNlbnQgU0VUIEhPU1Qgb3IgVEVMTkVUIGNvbW1hbmQuICBSdW5zIHN5c3RlbSBQSU5HIHByb2dy YW0sIGlmIGFueS4iKQorICAgICAgICAgICApOworCitjYXNlIFhYRlRQOgorI2lmZGVmIFNZU0ZU UAorICAgIHJldHVybihobXNnKCJTeW50YXg6IEZUUCBbIElQLWhvc3RuYW1lLW9yLW51bWJlciBd XG5cCisgIE1ha2VzIGFuIEZUUCBjb25uZWN0aW9uIHRvIHRoZSBnaXZlbiBJUCBob3N0IG9yLCBp ZiBubyBob3N0IHNwZWNpZmllZCwgdG9cblwKKyAgdGhlIGN1cnJlbnQgaG9zdC4gIFVzZXMgdGhl IHN5c3RlbSdzIEZUUCBwcm9ncmFtLCBpZiBhbnkuIikpOworI2Vsc2UKKyNpZm5kZWYgTk9GVFAK KyAgICByZXR1cm4oZG9mdHBobHAoKSk7CisjZW5kaWYgLyogTk9GVFAgKi8KKyNlbmRpZiAvKiBT WVNGVFAgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworY2Fz ZSBYWFBSSToKKyNpZmRlZiBVTklYCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUFJJTlQgZmls ZSBbIG9wdGlvbnMgXVxuXAorICBQcmludHMgdGhlIGxvY2FsIGZpbGUgb24gYSBsb2NhbCBwcmlu dGVyIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuICBBbHNvIHNlZVxuXAorICBIRUxQIFNFVCBQUklO VEVSLiIpKTsKKyNlbHNlCisjaWZkZWYgVk1TCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUFJJ TlQgZmlsZSBbIG9wdGlvbnMgXVxuXAorICBQcmludHMgdGhlIGxvY2FsIGZpbGUgb24gYSBsb2Nh bCBwcmludGVyIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuICBBbHNvIHNlZVxuXAorICBIRUxQIFNF VCBQUklOVEVSLiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUFJJTlQgZmls ZVxuXAorICBQcmludHMgdGhlIGxvY2FsIGZpbGUgb24gYSBsb2NhbCBwcmludGVyLiAgQWxzbyBz ZWUgSEVMUCBTRVQgUFJJTlRFUi4iKSk7CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIFZN UyAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisKK2Nhc2UgWFhQV0Q6CitjYXNlIFhYTFBXRDoK KyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQV0RcblwKK1ByaW50IHRoZSBuYW1lIG9mIHRoZSBj dXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiIpKTsKKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWFJF QToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRUFEIHZhcmlhYmxlbmFtZVxuXAorICBSZWFk cyBhIGxpbmUgZnJvbSB0aGUgY3VycmVudGx5IG9wZW4gUkVBRCBvciAhUkVBRCBmaWxlIGludG8g dGhlIHZhcmlhYmxlXG5cCisgIChzZWUgT1BFTikuIikpOworI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZm5kZWYgTk9YRkVSCitjYXNlIFhYUkVDOgorICAgIHJldHVybihobXNnYShobXh4cmMpKTsK KworY2FzZSBYWFJFTToKKyAgICB5ID0gY21rZXkocmVtY21kLG5ybXQsIlJlbW90ZSBjb21tYW5k IiwiIix4eHN0cmluZyk7CisgICAgcmV0dXJuKGRvaHJtdCh5KSk7CisjZW5kaWYgLyogTk9YRkVS ICovCisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFhSRVQ6CisgICAgcmV0dXJuKGhtc2coIlN5bnRh eDogUkVUVVJOIFsgdmFsdWUgXVxuXAorICBSZXR1cm4gZnJvbSBhIG1hY3JvLiAgQW4gb3B0aW9u YWwgcmV0dXJuIHZhbHVlIGNhbiBiZSBnaXZlbiBmb3IgdXNlIHdpdGhcblwKKyAgXFxmZXhlY3V0 ZShtYWNybyksIHdoaWNoIGFsbG93cyBtYWNyb3MgdG8gYmUgdXNlZCBsaWtlIGZ1bmN0aW9ucy4i KSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1hGRVIKK2Nhc2UgWFhTRU46Cisg ICAgcmV0dXJuKGhtc2dhKGhteHhzZW4pKTsKK2Nhc2UgWFhNT1ZFOgorICAgIHJldHVybihobXNn KCJNT1ZFIGlzIGV4YWN0bHkgbGlrZSBTRU5ELCBleGNlcHQgZWFjaCBmaWxlIHRoYXQgaXNcblwK K3NlbnQgc3VjY2Vzc2Z1bGx5IGlzIGRlbGV0ZWQgYWZ0ZXIgaXQgaXMgc2VudC4iKSk7CisjaWZu ZGVmIE5PUkVTRU5ECitjYXNlIFhYUlNFTjoKKyAgICByZXR1cm4oaG1zZyhobXh4cnNlbikpOwor Y2FzZSBYWFJFR0VUOgorICAgIHJldHVybihobXNnKGhteHhyZ2V0KSk7CitjYXNlIFhYUFNFTjoK KyAgICByZXR1cm4oaG1zZyhobXh4cHNlbikpOworI2VuZGlmIC8qIE5PUkVTRU5EICovCisKKyNp Zm5kZWYgTk9TRVJWRVIKK2Nhc2UgWFhTRVI6CisgICAgcmV0dXJuKGhtc2coaG14eHNlcikpOwor I2VuZGlmIC8qIE5PU0VSVkVSICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9K QworY2FzZSBYWFNVUzoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTVVNQRU5EIG9yIFpcblwK KyAgU3VzcGVuZHMgS2VybWl0LiAgQ29udGludWUgS2VybWl0IHdpdGggdGhlIGFwcHJvcHJpYXRl IHN5c3RlbSBjb21tYW5kLFxuXAorICBzdWNoIGFzIGZnLiIpKTsKKyNlbmRpZiAvKiBOT0pDICov CisKK2Nhc2UgWFhTRVQ6CisgICAgeSA9IGNta2V5KHBybXRhYixucHJtLCJQYXJhbWV0ZXIiLCIi LHh4c3RyaW5nKTsKKyAgICBkZWJ1ZyhGMTAxLCJIRUxQIFNFVCB5IiwiIix5KTsKKyAgICByZXR1 cm4oZG9oc2V0KHkpKTsKKworI2lmbmRlZiBOT1BVU0gKK2Nhc2UgWFhTSEU6CisgICAgaWYgKG5v cHVzaCkgeworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAg ICAgcHJpbnRmKCJTb3JyeSwgaGVscCBub3QgYXZhaWxhYmxlIGZvciBcIiVzXCJcbiIsY21kYnVm KTsKKyAgICAgICAgYnJlYWs7CisgICAgfSBlbHNlCisgICAgICAgcmV0dXJuKGhtc2dhKGh4eHNo ZSkpOworI2lmZGVmIENLX1JFRElSCitjYXNlIFhYRlVOOgorICAgIHJldHVybihobXNnKCJTeW50 YXg6IFJFRElSRUNUIGNvbW1hbmRcblwKKyAgUnVucyB0aGUgZ2l2ZW4gbG9jYWwgY29tbWFuZCB3 aXRoIGl0cyBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0IHJlZGlyZWN0ZWRcblwKKyAgdG8gdGhl IGN1cnJlbnQgU0VUIExJTkUgb3IgU0VUIEhPU1QgY29tbXVuaWNhdGlvbnMgcGF0aC5cblwKKyAg U3lub255bTogPCAoTGVmdCBhbmdsZSBicmFja2V0KS4iKSk7CisjZW5kaWYgLyogQ0tfUkVESVIg Ki8KKworI2lmZGVmIENLX1JFWFgKK2Nhc2UgWFhSRVhYOgorICAgIHJldHVybihobXNnKCJTeW50 YXg6IFJFWFggdGV4dFxuXAorICBUaGUgdGV4dCBpcyBhIFJleHggY29tbWFuZCB0byBiZSBleGVj dXRlZC4gVGhlIFxcdihyZXh4KSB2YXJpYWJsZSBpcyBzZXRcblwKKyAgdG8gdGhlIFJleHggY29t bWFuZCdzIHJldHVybiB2YWx1ZS5cblwKKyAgVG8gZXhlY3V0ZSBhIHJleHggcHJvZ3JhbSBmaWxl LCB1c2U6ICBSRVhYIGNhbGwgPGZpbGVuYW1lPlxuXAorICBSZXh4IHByb2dyYW1zIG1heSBjYWxs IEtlcm1pdCBmdW5jdGlvbnMgYnkgcGxhY2luZyB0aGUgS2VybWl0IGNvbW1hbmRcblwKKyAgaW4g c2luZ2xlIHF1b3Rlcy4gIEZvciBpbnN0YW5jZTogICdzZXQgcGFyaXR5IG5vbmUnLiIpKTsKKyNl bmRpZiAvKiBDS19SRVhYICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZm5kZWYgTk9TSE9X CitjYXNlIFhYU0hPOgorICAgIHJldHVybihobXNnKCJcCisgIERpc3BsYXkgY3VycmVudCB2YWx1 ZXMgb2YgdmFyaW91cyBpdGVtcyAoU0VUIHBhcmFtZXRlcnMsIHZhcmlhYmxlcywgZXRjKS5cblwK KyAgVHlwZSBTSE9XID8gZm9yIGEgbGlzdCBvZiBjYXRlZ29yaWVzLiIpKTsKKyNlbmRpZiAvKiBO T1NIT1cgKi8KKworY2FzZSBYWFNQQToKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIHJldHVybiho bXNnKCJcCisgIERpc3BsYXkgZGlzayB1c2FnZSBpbiBjdXJyZW50IGRldmljZSwgZGlyZWN0b3J5 LFxuXAorICBvciByZXR1cm4gc3BhY2UgZm9yIGEgc3BlY2lmaWVkIGRldmljZSwgZGlyZWN0b3J5 LiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU1BBQ0VcblwKKyAgRGlzcGxh eSBkaXNrIHVzYWdlIGluIGN1cnJlbnQgZGV2aWNlIGFuZC9vciBkaXJlY3RvcnkiKSk7CisjZW5k aWYKKworY2FzZSBYWFNUQToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTVEFUSVNUSUNTIFsv QlJJRUZdXG5cCisgIERpc3BsYXkgc3RhdGlzdGljcyBhYm91dCBtb3N0IHJlY2VudCBmaWxlIHRy YW5zZmVyIikpOworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhYU1RPOgorICAgIHJldHVybihobXNn KCJTeW50YXg6IFNUT1AgWyBudW1iZXIgWyBtZXNzYWdlIF0gXVxuXAorICBTdG9wIGV4ZWN1dGlu ZyB0aGUgY3VycmVudCBtYWNybyBvciBUQUtFIGZpbGUgYW5kIHJldHVybiBpbW1lZGlhdGVseSB0 b1xuXAorICB0aGUgS2VybWl0IHByb21wdC4gIE51bWJlciBpcyBhIHJldHVybiBjb2RlLiAgTWVz c2FnZSBwcmludGVkIGlmIGdpdmVuLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitjYXNlIFhY VEFLOgorICAgIHJldHVybihobXNnYShobXh4dGFrKSk7CisKKyNpZmRlZiBUQ1BTT0NLRVQKKyNp ZmRlZiBUTkNPREUKK2Nhc2UgWFhJS1NEOgorICAgIHJldHVybihobXNnYShobXh4aWtzKSk7CisK K2Nhc2UgWFhURUw6CisgICAgcmV0dXJuKGhtc2dhKGhteHh0ZWwpKTsKKworY2FzZSBYWFRFTE9Q OgorICAgIHJldHVybihobXNnYShoeHRvcHQpKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lm ZGVmIFJMT0dDT0RFCitjYXNlIFhYUkxPRzoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSTE9H SU4gWyBzd2l0Y2hlcyBdIFsgaG9zdCBbIHVzZXJuYW1lIF0gXVxuXAorICBFcXVpdmFsZW50IHRv IFNFVCBORVRXT1JLIFRZUEUgVENQL0lQLCBTRVQgSE9TVCBob3N0IFsgc2VydmljZSBdIC9STE9H SU4sXG5cCisgIElGIFNVQ0NFU1MgQ09OTkVDVC4gIElmIGhvc3QgaXMgb21pdHRlZCwgdGhlIHBy ZXZpb3VzIGNvbm5lY3Rpb24gKGlmIGFueSlcblwKKyAgaXMgcmVzdW1lZC4gIERlcGVuZGluZyBv biBob3cgS2VybWl0IGhhcyBiZWVuIGJ1aWx0IHN3aXRjaGVzIG1heSBiZVxuXAorICBhdmFpbGFi bGUgdG8gcmVxdWlyZSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBhbmQgREVTIGVuY3J5cHRpb24u IikpOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyNp Zm5kZWYgTk9YTUlUCitjYXNlIFhYVFJBOgorICAgIHJldHVybihobXNnYShoeHh4bWl0KSk7Cisj ZW5kaWYgLyogTk9YTUlUICovCisKKyNpZm5kZWYgTk9GUklMTFMKK2Nhc2UgWFhUWVA6CisgICAg cmV0dXJuKGhtc2dhKGhteHh0eXApKTsKK2Nhc2UgWFhNT1JFOgorICAgIHJldHVybihobXNnKCJT eW50YXg6IE1PUkUgWyBzd2l0Y2hlcyBdIGZpbGVuYW1lXG5cCisgIEVxdWl2YWxlbnQgdG8gVFlQ RSAvUEFHRSBmaWxlbmFtZTsgc2VlIEhFTFAgVFlQRS4iKSk7CitjYXNlIFhYQ0FUOgorICAgIHJl dHVybihobXNnKCJTeW50YXg6IE1PUkUgWyBzd2l0Y2hlcyBdIGZpbGVuYW1lXG5cCisgIEVxdWl2 YWxlbnQgdG8gVFlQRSAvTk9QQUdFIGZpbGVuYW1lOyBzZWUgSEVMUCBUWVBFLiIpKTsKK2Nhc2Ug WFhIRUFEOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IEhFQUQgWyBzd2l0Y2hlcyBdIGZpbGVu YW1lXG5cCisgIEVxdWl2YWxlbnQgdG8gVFlQRSAvSEVBRCBmaWxlbmFtZTsgc2VlIEhFTFAgVFlQ RS4iKSk7CitjYXNlIFhYVEFJTDoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBUQUlMIFsgc3dp dGNoZXMgXSBmaWxlbmFtZVxuXAorICBFcXVpdmFsZW50IHRvIFRZUEUgL1RBSUwgZmlsZW5hbWU7 IHNlZSBIRUxQIFRZUEUuIikpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9T UEwKK2Nhc2UgWFhXSEk6CisgICAgcmV0dXJuKGhtc2dhKHdoaWhscCkpOworCitjYXNlIFhYU1dJ VDoKKyAgICByZXR1cm4oaG1zZ2Eoc3dpaGxwKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lm bmRlZiBOT0NTRVRTCitjYXNlIFhYWExBOgorICAgIHJldHVybihobXNnYShoeHh4bGEpKTsKKyNl bmRpZiAvKiBOT0NTRVRTICovCisKK2Nhc2UgWFhWRVI6CisgICAgcmV0dXJuKGhtc2coIlN5bnRh eDogVkVSU0lPTlxuRGlzcGxheXMgdGhlIHByb2dyYW0gdmVyc2lvbiBudW1iZXIuIikpOworCisj aWZuZGVmIE5PU1BMCitjYXNlIFhYV0FJOgorICAgIHJldHVybihobXNnYShoeHh3YWkpKTsKKyNl bmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PRlJJTExTCitjYXNlIFhYV0hPOgorICAgIHJl dHVybihobXNnKCJTeW50YXg6IFdITyBbIHVzZXIgXVxuRGlzcGxheXMgaW5mbyBhYm91dCB0aGUg dXNlci4iKSk7CisKK2Nhc2UgWFhXUkk6CisgICAgcmV0dXJuKGhtc2dhKGh4eHdyaSkpOworCitj YXNlIFhYV1JMOgorICAgIHJldHVybihobXNnKAorIldSSVRFLUxJTkUgKFdSSVRFTE4pIGlzIGp1 c3QgbGlrZSBXUklURSwgYnV0IGluY2x1ZGVzIGEgbGluZSB0ZXJtaW5hdG9yXG5cCithdCB0aGUg ZW5kIG9mIHRleHQuICBTZWUgV1JJVEUuIikpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNp Zm5kZWYgTk9TUEwKK2Nhc2UgWFhJRlg6CisgICAgcmV0dXJuKGhtc2dhKGlmeGhscCkpOworCitj YXNlIFhYR0VUQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VUQyAqLworICAgIHJl dHVybihobXNnYShoeHhnZXRjKSk7CisKK2Nhc2UgWFhGV0Q6ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGT1JXQVJEICovCisgICAgcmV0dXJuKGhtc2coCisiTGlrZSBHT1RPLCBidXQg c2VhcmNoZXMgb25seSBmb3J3YXJkIGZvciB0aGUgbGFiZWwuICBTZWUgR09UTy4iKSk7CisKK2Nh c2UgWFhMT0NBTDogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMT0NBTCAqLworICAgIHJl dHVybihobXNnKAorIkRlY2xhcmVzIGEgdmFyaWFibGUgdG8gYmUgbG9jYWwgdG8gdGhlIGN1cnJl bnQgbWFjcm8gb3IgY29tbWFuZCBmaWxlLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitjYXNl IFhYVklFVzoKKyAgICByZXR1cm4oaG1zZygKKyJWaWV3IHRoZSB0ZXJtaW5hbCBlbXVsYXRpb24g c2NyZWVuIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBjb25uZWN0aW9uLiIpKTsKKworI2lmZGVmIE5F V0ZUUAorY2FzZSBYWEFTQzoKKyAgICByZXR1cm4oaG1zZygKKyJJbmhpYml0cyBhdXRvbWF0aWMg dHJhbnNmZXItbW9kZSBzd2l0Y2hpbmcgYW5kIGZvcmNlcyBURVhUIChBU0NJSSkgdHJhbnNmZXJc blwKK21vZGUgZm9yIGFsbCBmaWxlcyBpbiBib3RoIEtlcm1pdCBhbmQgRlRQIHByb3RvY29scy4i KSk7CitjYXNlIFhYQklOOgorICAgIHJldHVybihobXNnKAorIkluaGliaXRzIGF1dG9tYXRpYyB0 cmFuc2Zlci1tb2RlIHN3aXRjaGluZyBhbmQgZm9yY2VzIEJJTkFSWSB0cmFuc2ZlciBtb2RlXG5c Citmb3IgYWxsIGZpbGVzIGluIGJvdGggS2VybWl0IGFuZCBGVFAgcHJvdG9jb2xzLiIpKTsKKyNl bHNlCitjYXNlIFhYQVNDOgorICAgIHJldHVybihobXNnKAorIkluaGliaXRzIGF1dG9tYXRpYyB0 cmFuc2Zlci1tb2RlIHN3aXRjaGluZyBhbmQgZm9yY2VzIFRFWFQgKEFTQ0lJKSB0cmFuc2Zlclxu XAorbW9kZSBmb3IgYWxsIGZpbGVzLiIpKTsKK2Nhc2UgWFhCSU46CisgICAgcmV0dXJuKGhtc2co CisiSW5oaWJpdHMgYXV0b21hdGljIHRyYW5zZmVyLW1vZGUgc3dpdGNoaW5nIGFuZCBmb3JjZXMg QklOQVJZIHRyYW5zZmVyIG1vZGVcblwKK2ZvciBhbGwgZmlsZXMuIikpOworI2VuZGlmCS8qIE5F V0ZUUCAqLworCitjYXNlIFhYREFURToKKyAgICByZXR1cm4oaG1zZ2EoaG14eGRhdGUpKTsKKwor Y2FzZSBYWFJFVFI6CisgICAgcmV0dXJuKGhtc2coCisiSnVzdCBsaWtlIEdFVCBidXQgYXNrcyB0 aGUgc2VydmVyIHRvIGRlbGV0ZSBlYWNoIGZpbGUgdGhhdCBoYXMgYmVlblxuXAorc2VudCBzdWNj ZXNzZnVsbHkuIikpOworCitjYXNlIFhYRUlHSFQ6CisgICAgcmV0dXJuKGhtc2coCisiRXF1aXZh bGVudCB0byBTRVQgUEFSSVRZIE5PTkUsIFNFVCBDT01NQU5EIEJZVEUgOCwgU0VUIFRFUk1JTkFM IEJZVEUgOC4iKSk7CisKK2Nhc2UgWFhTQVZFOgorICAgIHJldHVybihobXNnYShobXh4c2F2ZSkp OworCisjaWZuZGVmIE5PRlJJTExTCisjaWZuZGVmIE5PUFVTSAorY2FzZSBYWEVESVQ6CisgICAg cmV0dXJuKGhtc2coIlN5bnRheDogRURJVCBbIDxmaWxlPiBdXG5cCitTdGFydHMgeW91ciBwcmVm ZXJyZWQgZWRpdG9yIG9uIHRoZSBnaXZlbiBmaWxlLCBvciBpZiBub25lIGdpdmVuLCB0aGUgbW9z dFxuXAorcmVjZW50bHkgZWRpdGVkIGZpbGUsIGlmIGFueS4gIEFsc28gc2VlIFNFVCBFRElUT1Iu IikpOworI2VuZGlmIC8qIE5PUFVTSCAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZmRl ZiBCUk9XU0VSCitjYXNlIFhYQlJPV1M6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogQlJPV1NF IFsgPHVybD4gXVxuXAorU3RhcnRzIHlvdXIgcHJlZmVycmVkIFdlYiBicm93c2VyIG9uIHRoZSBn aXZlbiBVUkwsIG9yIGlmIG5vbmUgZ2l2ZW4sIHRoZVxuXAorbW9zdCByZWNlbnRseSB2aXNpdGVk IFVSTCwgaWYgYW55LiAgQWxzbyBzZWUgU0VUIEJST1dTRVIuIikpOworI2VuZGlmIC8qIEJST1dT RVIgKi8KKworI2lmZGVmIENLX1RBUEkKK2Nhc2UgWFhUQVBJOgorICAgIHJldHVybihobXNnYSho eHh0YXBpKSk7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisjaWZkZWYgUElQRVNFTkQKK2Nhc2Ug WFhDU0VOOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IENTRU5EIFsgc3dpdGNoZXMgXSA8Y29t bWFuZD4gWyA8YXMtbmFtZT4gXVxuXAorU2VuZHMgZnJvbSB0aGUgZ2l2ZW4gPGNvbW1hbmQ+IHJh dGhlciB0aGFuIGZyb20gYSBmaWxlLiAgRXF1aXZhbGVudCB0b1xuXAorU0VORCAvQ09NTUFORDsg c2VlIEhFTFAgU0VORCBmb3IgZGV0YWlscy4iKSk7CisKK2Nhc2UgWFhDUkVDOgorICAgIHJldHVy bihobXNnKCJTeW50YXg6IENSRUNFSVZFIFsgc3dpdGNoZXMgXSA8Y29tbWFuZD5cblwKK1JlY2Vp dmVzIHRvIHRoZSBnaXZlbiA8Y29tbWFuZD4gcmF0aGVyIHRoYW4gdG8gYSBmaWxlLiAgRXF1aXZh bGVudCB0b1xuXAorUkVDRUlWRSAvQ09NTUFORDsgc2VlIEhFTFAgUkVDRUlWRSBmb3IgZGV0YWls cy4iKSk7CisKK2Nhc2UgWFhDR0VUOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IENHRVQgPHJl bW90ZS1maWxlLW9yLWNvbW1hbmQ+IDxsb2NhbC1jb21tYW5kPlxuXAorRXF1aXZhbGVudCB0byBH RVQgL0NPTU1BTkQ7IHNlZSBIRUxQIEdFVCBmb3IgZGV0YWlscy4iKSk7CisjZW5kaWYgLyogUElQ RVNFTkQgKi8KKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWEZVTkM6CisvKgorICBUcmlja3kgcGFy c2luZy4gIFdlIHdhbnQgdG8gbGV0IHRoZW0gdHlwZSB0aGUgZnVuY3Rpb24gbmFtZSBpbiBhbnkg Zm9ybWF0CisgIGF0IGFsbDogXGZibGFoKCksIFxmYmxhaCwgXFxmYmxhaCgpLCBmYmxhaCwgYmxh aCwgYmxhaCgpLCBldGMsIGJ1dCBvZiBjb3Vyc2UKKyAgb25seSBvbmUgb2YgdGhlc2UgaXMgcmVj b2duaXplZCBieSBjbWtleSgpLiAgU28gd2UgY2FsbCBjbWtleXgoKSAodGhlICJubworICBjb21w bGFpbnRzIiB2ZXJzaW9uIG9mIGNta2V5KCkpLCBhbmQgaWYgaXQgZmFpbHMsIHdlIHRyeSB0aGUg b3RoZXIgZm9ybWF0cworICBzaWxlbnRseSwgYW5kIHN0aWxsIGFsbG93IGZvciA8bm8tbmFtZS1n aXZlbj4sIGVkaXRpbmcgYW5kIHJlcGFyc2UsIGV0Yy4KKyovCisgICAgeSA9IGNta2V5eChmbmN0 YWIsbmZ1bmNzLCJOYW1lIG9mIGZ1bmN0aW9uIiwiIixOVUxMKTsKKyAgICBpZiAoeSA9PSAtMSkg eyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXBhcnNlIG5lZWRlZCAqLworICAgICAgICByZXR1 cm4oeSk7CisgICAgfSBlbHNlIGlmICh5ID09IC0zKSB7CisgICAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgICAgICAgICAgLyogRm9yIHJlY2FsbCBidWZmZXIuLi4gKi8KKyAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICAgIHJldHVybihkb2hmdW5jKHkpKTsgICAgICAgICAgICAgLyogLTMg Z2l2ZXMgZ2VuZXJhbCBtZXNzYWdlICovCisgICAgfQorICAgIGlmICh5IDwgMCkgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNvbWV0aGluZyBnaXZlbiBidXQgZGlkbid0IG1hdGNoICovCisg ICAgICAgIGludCBkdW1teTsKKyAgICAgICAgY2hhciAqIHA7CisgICAgICAgIGZvciAocCA9IGF0 bWJ1ZjsgKnA7IHArKykgeyAgICAgLyogQ2hvcCBvZmYgdHJhaWxpbmcgcGFyZW5zIGlmIGFueSAq LworICAgICAgICAgICAgaWYgKCpwID09ICcoJykgeworICAgICAgICAgICAgICAgICpwID0gTlVM OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIC8qIENob3Agb2ZmIGxlYWRpbmcgIlxcZiIgb3IgIlxmIiBvciAiZiIgKi8KKyAgICAgICAg cCA9IGF0bWJ1ZjsKKyAgICAgICAgaWYgKCpwID09IENNRFEpICAgICAgICAgICAgICAgICAvKiBB bGxvdyBmb3IgXFxmLi4uICovCisgICAgICAgICAgcCsrOworICAgICAgICBpZiAoKnAgPT0gQ01E USAmJiAoKihwKzEpID09ICdmJyB8fCAqKHArMSkgPT0gJ0YnKSkgeyAvKiBvciBcZiAqLworICAg ICAgICAgICAgcCArPSAyOworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdmJyB8fCAqcCA9PSAn RicpIHsgLyogb3IganVzdCBmICovCisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAg ICAgeSA9IGxvb2t1cChmbmN0YWIscCxuZnVuY3MsJmR1bW15KTsgLyogTG9vayB1cCB0aGUgcmVz dWx0ICovCisgICAgfQorICAgIGlmICh5IDwgMCkgeworICAgICAgICBwcmludGYoIj9ObyBzdWNo IGZ1bmN0aW9uIC0gXCIlc1wiXG4iLGF0bWJ1Zik7CisgICAgICAgIHJldHVybigtOSk7CisgICAg fQorICAgIHggPSBjbWdicmsoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgb3V0IGhv dyB1c2VyIHRlcm1pbmF0ZWQgKi8KKyAgICBpZiAoeCA9PSBMRiB8fCB4ID09IENSKSAgICAgICAg ICAgICAvKiBpZiB3aXRoIENSIG9yIExGICovCisgICAgICBjbWZsZ3MgPSAxOyAgICAgICAgICAg ICAgICAgICAgICAgLyogcmVzdG9yZSBjbWZsZ3MgdG8gc2F5IHNvICovCisgICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKSAgICAgICAgICAgICAgLyogQW5kIFRIRU4gY29uZmlybSBzbyBjb21tYW5k IHdpbGwgKi8KKyAgICAgIHJldHVybih4KTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQg aW50byByZWNhbGwgYnVmZmVyLiAqLworICAgIHJldHVybihkb2hmdW5jKHkpKTsKKyNlbmRpZiAv KiBOT1NQTCAqLworCisjaWZuZGVmIE5PQ01ETAorY2FzZSBYWE9QVFM6ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbW1hbmQtbGluZSBvcHRpb25zICovCisgICAgcmV0dXJuKGRvaG9w dHMoKSk7CisKK2Nhc2UgWFhYT1BUUzogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHRl bmRlZCBjb21tYW5kLWxpbmUgb3B0aW9ucyAqLworICAgIHJldHVybihkb3hvcHRzKCkpOworI2Vu ZGlmIC8qIE5PQ01ETCAqLworCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PS1ZFUkJTCitjYXNlIFhY S1ZSQjogeworICAgIHkgPSBjbWtleXgoa3ZlcmJzLG5rdmVyYnMsIk5hbWUgb2Yga2V5Ym9hcmQg dmVyYiB3aXRob3V0IFxcayIsIiIsTlVMTCk7CisgICAgaWYgKHkgPT0gLTEpIHsgICAgICAgICAg ICAgICAgICAgICAgLyogUmVwYXJzZSBuZWVkZWQgKi8KKyAgICAgICAgcmV0dXJuKHkpOworICAg IH0gZWxzZSBpZiAoeSA9PSAtMykgeworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApICAg ICAgICAgIC8qIEZvciByZWNhbGwgYnVmZmVyLi4uICovCisgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICByZXR1cm4oZG9oa3ZlcmIoeSkpOyAgICAgICAgICAgIC8qIC0zIGdpdmVzIGdlbmVy YWwgbWVzc2FnZSAqLworICAgIH0KKyAgICBpZiAoeSA8IDApIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTb21ldGhpbmcgZ2l2ZW4gYnV0IGRpZG4ndCBtYXRjaCAqLworICAgICAgICBpbnQg ZHVtbXk7CisgICAgICAgIGNoYXIgKiBwOworICAgICAgICBmb3IgKHAgPSBhdG1idWY7ICpwOyBw KyspIHsgICAgIC8qIENob3Agb2ZmIHRyYWlsaW5nIHBhcmVucyBpZiBhbnkgKi8KKyAgICAgICAg ICAgIGlmICgqcCA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICAqcCA9IE5VTDsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBDaG9w IG9mZiBsZWFkaW5nICJcXGsiIG9yICJcayIgb3IgImsiICovCisgICAgICAgIHAgPSBhdG1idWY7 CisgICAgICAgIGlmICgqcCA9PSBDTURRKSAgICAgICAgICAgICAgICAgLyogQWxsb3cgZm9yIFxc ay4uLiAqLworICAgICAgICAgIHArKzsKKyAgICAgICAgaWYgKCpwID09IENNRFEgJiYgKCoocCsx KSA9PSAnaycgfHwgKihwKzEpID09ICdLJykpIHsgLyogb3IgXGsgKi8KKyAgICAgICAgICAgIHAg Kz0gMjsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnaycgfHwgKnAgPT0gJ0snKSB7IC8qIG9y IGp1c3QgayAqLworICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIHkgPSBsb29r dXAoa3ZlcmJzLHAsbmt2ZXJicywmZHVtbXkpOyAvKiBMb29rIHVwIHRoZSByZXN1bHQgKi8KKyAg ICB9CisgICAgaWYgKHkgPCAwKSB7CisgICAgICAgIHByaW50ZigiP05vIHN1Y2ggZnVuY3Rpb24g LSBcIiVzXCJcbiIsYXRtYnVmKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgeCA9 IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmluZCBvdXQgaG93IHVzZXIgdGVy bWluYXRlZCAqLworICAgIGlmICh4ID09IExGIHx8IHggPT0gQ1IpICAgICAgICAgICAgIC8qIGlm IHdpdGggQ1Igb3IgTEYgKi8KKyAgICAgIGNtZmxncyA9IDE7ICAgICAgICAgICAgICAgICAgICAg ICAvKiByZXN0b3JlIGNtZmxncyB0byBzYXkgc28gKi8KKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApICAgICAgICAgICAgICAvKiBBbmQgVEhFTiBjb25maXJtIHNvIGNvbW1hbmQgd2lsbCAqLwor ICAgICAgcmV0dXJuKHgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCBpbnRvIHJlY2Fs bCBidWZmZXIuICovCisgICAgcmV0dXJuKGRvaGt2ZXJiKHkpKTsKK30KKyNlbmRpZiAvKiBOT0tW RVJCUyAqLworI2VuZGlmIC8qIE9TMiAqLworCitjYXNlIFhYS0VSTUk6CisgICAgcmV0dXJuKGht c2coIlN5bnRheDogS0VSTUlUIFtjb21tYW5kLWxpbmUtb3B0aW9uc11cblwKKyAgTGV0cyB5b3Ug Z2l2ZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhdCB0aGUgcHJvbXB0IG9yIGluIGEgc2NyaXB0Llxu XAorICBIRUxQIE9QVElPTlMgZm9yIG1vcmUgaW5mby4iKSk7CisKK2Nhc2UgWFhCQUNLOgorICAg IHJldHVybihobXNnKCJTeW50YXg6IEJBQ0tcbiAgUmV0dXJucyB0byB5b3VyIHByZXZpb3VzIGRp cmVjdG9yeS4iKSk7CisKK2Nhc2UgWFhXSEVSRToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBX SEVSRVxuICBUZWxscyB3aGVyZSB5b3VyIHRyYW5zZmVycmVkIGZpbGVzIHdlbnQuIikpOworCisj aWZuZGVmIE5PWEZFUgorY2FzZSBYWFJFTVY6CisgICAgcmV0dXJuKGhtc2dhKGhteHhyZW12KSk7 CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworY2FzZSBYWEFVVEg6 CisgICAgcmV0dXJuKGhtc2dhKGhteHhhdXRoKSk7CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8K KworI2lmbmRlZiBOT0hUVFAKK2Nhc2UgWFhIVFRQOgorICAgIHJldHVybihobXNnYShobXh4aHR0 cCkpOworI2VuZGlmIC8qIE5PSFRUUCAqLworCisjaWZkZWYgTkVUQ01ECitjYXNlIFhYUElQRToK KyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBQSVBFIFsgY29tbWFuZCBdXG5cCitNYWtlcyBhIGNv bm5lY3Rpb24gdGhyb3VnaCB0aGUgcHJvZ3JhbSB3aG9zZSBjb21tYW5kIGxpbmUgaXMgZ2l2ZW4u IEV4YW1wbGU6XG5cCitcbiBwaXBlIHJsb2dpbiB4eXpjb3JwLmNvbSIpKTsKKyNlbmRpZiAvKiBO RVRDTUQgKi8KKworY2FzZSBYWFNUQVRVUzoKKyAgICByZXR1cm4oaG1zZygKKyJTVEFUVVMgaXMg dGhlIHNhbWUgYXMgU0hPVyBTVEFUVVM7IHByaW50cyBTVUNDRVNTIG9yIEZBSUxVUkUgZm9yIHRo ZVxuXAorcHJldmlvdXMgY29tbWFuZC4iKSk7CisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFhBU1NF UjoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBBU1NFUlQgPGNvbmRpdGlvbj5cblwKK1N1Y2Nl ZWRzIG9yIGZhaWxzIGRlcGVuZGluZyBvbiA8Y29uZGl0aW9uPjsgc2VlIEhFTFAgSUYgZm9yIDxj b25kaXRpb24+cy4iKSk7CisKK2Nhc2UgWFhGQUlMOgorICAgIHJldHVybihobXNnKCJBbHdheXMg ZmFpbHMuIikpOworCitjYXNlIFhYU1VDQzoKKyAgICByZXR1cm4oaG1zZygiQWx3YXlzIHN1Y2Nl ZWRzLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgQ0tfTE9HSU4KK2Nhc2UgWFhM T0dPVVQ6CisgICAgcmV0dXJuKGhtc2coCisiSWYgeW91IGhhdmVkIGxvZ2dlZCBpbiB0byBLZXJt aXQgYXMgYW4gSW50ZXJuZXQgS2VybWl0IHNlcnZlciwgdGhlIExPR09VVFxuXAorY29tbWFuZCwg Z2l2ZW4gYXQgdGhlIHByb21wdCwgbG9ncyB5b3Ugb3V0IGFuZCBjbG9zZXMgeW91ciBzZXNzaW9u LiIpKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCitjYXNlIFhYUkVTRVQ6CisgICAgcmV0dXJu KGhtc2coIkNsb3NlcyBhbGwgb3BlbiBmaWxlcyBhbmQgbG9ncy4iKSk7CisKKyNpZm5kZWYgTk9D U0VUUworY2FzZSBYWEFTU09DOgorICAgIHJldHVybihobXNnYShobXh4YXNzb2MpKTsKKyNlbmRp ZiAvKiBOT0NTRVRTICovCisKKyNpZm5kZWYgTk9TUEwKK2Nhc2UgWFhTSElGVDoKKyAgICByZXR1 cm4oaG1zZygiU3ludGF4OiBTSElGVCBbIG4gXVxuXAorICBTaGlmdHMgXFwlMS4uOSB2YXJpYWJs ZXMgbiBwbGFjZXMgdG8gdGhlIGxlZnQ7IGRlZmF1bHQgbiA9IDEuIikpOworI2VuZGlmIC8qIE5P U1BMICovCisKKyNpZm5kZWYgTk9QVVNICitjYXNlIFhYTUFOOgorI2lmZGVmIFVOSVgKKyAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBNQU5VQUwgWyB0b3BpYyBdXG5cCisgIFJ1bnMgdGhlIFwibWFu XCIgY29tbWFuZCBvbiB0aGUgZ2l2ZW4gdG9waWMgKGRlZmF1bHQgXCJrZXJtaXRcIikuIikpOwor I2Vsc2UKKyNpZmRlZiBPUzIKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBNQU5VQUxcblwKKyAg QWNjZXNzZXMgdGhlIEtlcm1pdCA5NSBIVE1MIG1hbnVhbCB1c2luZyB0aGUgY3VycmVudCBicm93 c2VyLiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogTUFOVUFMIFsgdG9waWMg XVxuXAorICBSdW5zIHRoZSBcImhlbHBcIiBjb21tYW5kIG9uIHRoZSBnaXZlbiB0b3BpYyAoZGVm YXVsdCBcImtlcm1pdFwiKS4iKSk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVU5JWCAq LworI2VuZGlmIC8qIE5PUFVTSCAqLworCitjYXNlIFhYV0lMRDoKKyAgICByZXR1cm4oaG1zZ2Eo aG14eHdpbGQpKTsKKworI2lmZGVmIExPQ1VTCitjYXNlIFhYTE9DVToKKyAgICByZXR1cm4oaG1z Z2EoaG14eWxvY3VzKSk7CisjZW5kaWYJLyogTE9DVVMgKi8KKworY2FzZSBYWFBBVDoKKyAgICBy ZXR1cm4oaG1zZ2EoaG14eHBhdCkpOworCisjaWZuZGVmIE5PWEZFUgorY2FzZSBYWEZBU1Q6Citj YXNlIFhYQ0FVOgorY2FzZSBYWFJPQjoKKyAgICByZXR1cm4oaG1zZ2EoaG14eGZhc3QpKTsKKyNl bmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIENLUFVSR0UKK2Nhc2UgWFhQVVJHRToKKyAgICBy ZXR1cm4oaG1zZ2EoaG14eHB1cmdlKSk7CisjZWxzZQorI2lmZGVmIFZNUworY2FzZSBYWFBVUkdF OgorICAgIHJldHVybihobXNnYShobXh4cHVyZ2UpKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRp ZiAvKiBDS1BVUkdFICovCisKKyNpZm5kZWYgTk9YRkVSCisgIGNhc2UgWFhSQVNHOgorICAgIHJl dHVybihobXNnKCIgIFJBU0cgYW5kIFJBU1NJR04gYXJlIHNob3J0IGZvcm1zIG9mIFJFTU9URSBB U1NJR04uIikpOworICBjYXNlIFhYUkNXRDoKKyAgICByZXR1cm4oaG1zZygiICBSQ0QgYW5kIFJD V0QgYXJlIHNob3J0IGZvcm1zIG9mIFJFTU9URSBDRC4iKSk7CisgIGNhc2UgWFhSQ1BZOgorICAg IHJldHVybihobXNnKCIgIFJDT1BZIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgQ09QWS4iKSk7 CisgIGNhc2UgWFhSREVMOgorICAgIHJldHVybihobXNnKCIgIFJERUxFVEUgaXMgYSBzaG9ydCBm b3JtIG9mIFJFTU9URSBSRUxFVEUuIikpOworICBjYXNlIFhYUkRJUjoKKyAgICByZXR1cm4oaG1z ZygiICBSRElSRUNUT1JZIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgRElSRUNUT1JZLiIpKTsK KyAgY2FzZSBYWFJYSVQ6CisgICAgcmV0dXJuKGhtc2coIiAgUkVYSVQgaXMgYSBzaG9ydCBmb3Jt IG9mIFJFTU9URSBFWElULiIpKTsKKyAgY2FzZSBYWFJITFA6CisgICAgcmV0dXJuKGhtc2coIiAg UkhFTFAgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBIRUxQLiIpKTsKKyAgY2FzZSBYWFJIT1M6 CisgICAgcmV0dXJuKGhtc2coIiAgUkhPU1QgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBIT1NU LiIpKTsKKyAgY2FzZSBYWFJLRVI6CisgICAgcmV0dXJuKGhtc2coIiAgUktFUk1JVCBpcyBhIHNo b3J0IGZvcm0gb2YgUkVNT1RFIEtFUk1JVC4iKSk7CisgIGNhc2UgWFhSTUtEOgorICAgIHJldHVy bihobXNnKCIgIFJNS0RJUiBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIE1LRElSLiIpKTsKKyAg Y2FzZSBYWFJNU0c6CisgICAgcmV0dXJuKGhtc2coIiAgUk1FU1NBR0UgYW5kIFJNU0cgYXJlIHNo b3J0IGZvcm1zIG9mIFJFTU9URSBNRVNTQUdFLiIpKTsKKyAgY2FzZSBYWFJQUkk6CisgICAgcmV0 dXJuKGhtc2coIiAgUlBSSU5UIGlzIGEgc2hvcnQgZm9ybSBvZiBSRU1PVEUgUFJJTlQuIikpOwor ICBjYXNlIFhYUlBXRDoKKyAgICByZXR1cm4oaG1zZygiICBSUFdEIGlzIGEgc2hvcnQgZm9ybSBv ZiBSRU1PVEUgUFdELiIpKTsKKyAgY2FzZSBYWFJRVUU6CisgICAgcmV0dXJuKGhtc2coIiAgUVVF UlkgYW5kIFJRVUVSWSBhcmUgc2hvcnQgZm9ybXMgb2YgUkVNT1RFIFFVRVJZLiIpKTsKKyAgY2Fz ZSBYWFJSRU46CisgICAgcmV0dXJuKGhtc2coIiAgUlJFTkFNRSBpcyBhIHNob3J0IGZvcm0gb2Yg UkVNT1RFIFJFTkFNRS4iKSk7CisgIGNhc2UgWFhSUk1EOgorICAgIHJldHVybihobXNnKCIgIFJS TURJUiBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIFJNRElSLiIpKTsKKyAgY2FzZSBYWFJTRVQ6 CisgICAgcmV0dXJuKGhtc2coIiAgUlNFVCBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RFIFNFVC4i KSk7CisgIGNhc2UgWFhSU1BBOgorICAgIHJldHVybihobXNnKCIgIFJTUEFDRSBpcyBhIHNob3J0 IGZvcm0gb2YgUkVNT1RFIFNQQUNFLiIpKTsKKyAgY2FzZSBYWFJUWVA6CisgICAgcmV0dXJuKGht c2coIiAgUlRZUEUgaXMgYSBzaG9ydCBmb3JtIG9mIFJFTU9URSBUWVBFLiIpKTsKKyAgY2FzZSBY WFJXSE86CisgICAgcmV0dXJuKGhtc2coIiAgUldITyBpcyBhIHNob3J0IGZvcm0gb2YgUkVNT1RF IFdITy4iKSk7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgY2FzZSBYWFNDUk46CisgICAgcmV0 dXJuKGhtc2dhKGhteHhzY3JuKSk7CisKKyNpZmRlZiBDS0VYRUMKKyAgY2FzZSBYWEVYRUM6Cisg ICAgcmV0dXJuKGhtc2coIlN5bnRheDogRVhFQyA8Y29tbWFuZD4gWyA8YXJnMT4gWyA8YXJnMj4g WyAuLi4gXSBdXG5cCisgIEMtS2VybWl0IG92ZXJsYXlzIGl0c2VsZiB3aXRoIHRoZSBnaXZlbiBz eXN0ZW0gY29tbWFuZCBhbmQgc3RhcnRzIGl0IHdpdGhcblwKKyAgdGhlIGdpdmVuIGFyZ3VtZW50 cy4gIFVwb24gYW55IGVycm9yLCBjb250cm9sIHJldHVybnMgdG8gQy1LZXJtaXQuIikpOworI2Vu ZGlmIC8qIENLRVhFQyAqLworCisjaWZuZGVmIE5PU1BMCisgIGNhc2UgWFhUUkFDRToKKyAgICBy ZXR1cm4oaG1zZygKKyJTeW50YXg6IFRSQUNFIHsgL09OLCAvT0ZGIH0geyBBU1NJR05NRU5UUywg Q09NTUFORC1MRVZFTCwgQUxMIH1cblwKKyAgVHVybnMgdHJhY2luZyBvZiB0aGUgZ2l2ZW4gb2Jq ZWN0IG9uIG9yIG9mZi4iKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIENLX1BFUk1T CisjaWZkZWYgVU5JWAorICBjYXNlIFhYQ0hNT0Q6CisgICAgcmV0dXJuKGhtc2dhKGhteHhjaG1v ZCkpOworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisjaWZkZWYg Q0tST09UCisgIGNhc2UgWFhDSFJUOgorICAgIHJldHVybihobXNnYShobXh4Y2hyb290KSk7Cisj ZW5kaWYgLyogQ0tST09UICovCisKKyNpZm5kZWYgTk9TUEwKKyAgY2FzZSBYWFBST01QOgorICAg IHJldHVybihobXNnYShobXh4cHJvbXB0KSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICBjYXNl IFhYR1JFUDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eGdyZXApKTsKKworI2lmbmRlZiBOT1NFWFAK KyNpZm5kZWYgTk9TUEwKKyAgY2FzZSBYWFNFWFA6CisgICAgcmV0dXJuKGhtc2dhKGhteHhzZXhw KSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT1NFWFAgKi8KKworI2lmZGVmIENL TEVBUk4KKyAgY2FzZSBYWExFQVJOOgorICAgIHJldHVybihobXNnYShobXh4bGVhcm4pKTsKKyNl bmRpZiAvKiBDS0xFQVJOICovCisKKyNpZmRlZiBBTllTU0gKKyAgY2FzZSBYWFNTSDoKKyAgICBy ZXR1cm4oaG1zZ2EoaG14eHNzaCkpOworI2VuZGlmIC8qIEFOWVNTSCAqLworCisjaWZkZWYgVENQ U09DS0VUCisgIGNhc2UgWFhGSVJFVzoKKyAgICByZXR1cm4oaG1zZ2EoaG14eGZpcmV3KSk7Cisj ZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZmRlZiBORVdGVFAKKyAgY2FzZSBYWFVTRVI6Cisg ICAgcmV0dXJuKGhtc2coIiBFcXVpdmFsZW50IHRvIEZUUCBVU0VSLiIpKTsKKyAgY2FzZSBYWEFD Q1Q6CisgICAgcmV0dXJuKGhtc2coIiBFcXVpdmFsZW50IHRvIEZUUCBBQ0NPVU5ULiIpKTsKKyNl bmRpZiAvKiBORVdGVFAgKi8KKworICBjYXNlIFhYT1JJRToKKyAgICByZXR1cm4oaG1zZygiIFNo b3dzIHRoZSBkaXJlY3RvcmllcyBpbXBvcnRhbnQgdG8gS2VybWl0LiIpKTsKKworICBjYXNlIFhY Q09OVDoKKyAgICByZXR1cm4oaG1zZygiIEluIGEgRk9SIG9yIFdISUxFIGxvb3A6IGNvbnRpbnVl IHRoZSBsb29wLlxuXAorIEF0IHRoZSBwcm9tcHQ6IGNvbnRpbnVlIGEgc2NyaXB0IHRoYXQgaGFz IFwic2hlbGxlZCBvdXRcIiB0byB0aGUgcHJvbXB0LiIpKTsKKworICBjYXNlIFhYUkVETzoKKyAg ICByZXR1cm4oaG1zZygiIFN5bnRheDogUkVETyB4eHggKG9yKSBeeHh4XG5cCisgUmUtZXhlY3V0 ZXMgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQgc3RhcnRpbmcgd2l0aCB4eHguIikpOworCisjaWZk ZWYgVU5JWAorI2lmbmRlZiBOT1BVVEVOVgorICBjYXNlIFhYUFVURToKKyAgICByZXR1cm4oaG1z Z2EoaG14eHB1dGVudikpOworI2VuZGlmCS8qIE5PUFVURU5WICovCisjZW5kaWYJLyogVU5JWCAq LworCisgIGNhc2UgWFhOT1RBVjoKKyAgICByZXR1cm4oaG1zZygiIFRoaXMgY29tbWFuZCBpcyBu b3QgY29uZmlndXJlZCBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0LiIpKTsKKworZGVmYXVsdDog eworICAgICAgICBjaGFyICpzOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKKyAgICAgICAgcyA9IGNtZGJ1ZiArIChpbnQpc3RybGVuKGNtZGJ1ZikgLTE7CisgICAg ICAgIHdoaWxlIChzID49IGNtZGJ1ZiAmJiAqcyA9PSBTUCkKKyAgICAgICAgICAqcy0tID0gTlVM OworICAgICAgICB3aGlsZSAocyA+PSBjbWRidWYgJiYgKnMgIT0gU1ApCisgICAgICAgICAgcy0t OworICAgICAgICB3aGlsZSAoKnMgPT0gU1ApIHMrKzsKKyAgICAgICAgcHJpbnRmKCJTb3JyeSwg aGVscCBub3QgYXZhaWxhYmxlIGZvciBcIiVzXCJcbiIscyk7CisgICAgICAgIGJyZWFrOworICAg ICAgfQorICAgIH0gLyogc3dpdGNoICovCisjZW5kaWYgLyogTk9IRUxQICovCisKKyAgICByZXR1 cm4oc3VjY2VzcyA9IDApOworfQorCisvKiAgSCBNIFMgRyAgLS0gIEdldCBjb25maXJtYXRpb24s IHRoZW4gcHJpbnQgdGhlIGdpdmVuIG1lc3NhZ2UgICovCisKK2ludAoraG1zZyhzKSBjaGFyICpz OyB7CisgICAgaW50IHg7CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Cisg ICAgcHJpbnRmKCJcbiVzXG5cbiIscyk7CisgICAgcmV0dXJuKDApOworfQorCisjaWZkZWYgTk9I RUxQCisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBh biBhcnJheSBvZiBsaW5lcywgKi8KK2htc2dhKHMpIGNoYXIgKnNbXTsgeyAgICAgICAgICAgICAg ICAgICAvKiBjaGVhcCB2ZXJzaW9uLiAqLworICAgIGludCBpOworICAgIGlmICgoaSA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKGkpOworICAgIHByaW50ZigiXG4iKTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIFN0YXJ0IG9mZiB3aXRoIGEgYmxhbmsgbGluZSAqLworICAgIGZvciAoaSA9IDA7ICpz W2ldOyBpKyspIHsgICAgICAgICAgIC8qIFByaW50IGVhY2ggbGluZS4gKi8KKyAgICAgICAgcHJp bnRmKCIlc1xuIixzW2ldKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworICAgIHJldHVybigw KTsKK30KKworI2Vsc2UgLyogTk9IRUxQIG5vdCBkZWZpbmVkLi4uICovCisKK2ludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBhbiBhcnJheSBvZiBsaW5lcywg Ki8KK2htc2dhKHMpIGNoYXIgKnNbXTsgeyAgICAgICAgICAgICAgICAgICAvKiBwYXVzaW5nIGF0 IGVuZCBvZiBlYWNoIHNjcmVlbi4gKi8KKyAgICBleHRlcm4gaW50IGhtdG9wbGluZTsgICAgICAg ICAgICAgICAvKiAoVGhpcyBzaG91bGQgYmUgYSBwYXJhbWV0ZXIuLi4pICovCisgICAgaW50IHgs IHksIGksIGosIGssIG47CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisK KyNpZmRlZiBDS19UVEdXU0laCisjaWZkZWYgT1MyCisgICAgdHRnY3dzeigpOworI2Vsc2UgLyog T1MyICovCisgICAgLyogQ2hlY2sgd2hldGhlciB3aW5kb3cgc2l6ZSBjaGFuZ2VkICovCisgICAg aWYgKHR0Z3dzaXooKSA+IDApIHsKKyAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMg PiAwKSB7CisgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7CisgICAgICAgICAgICBjbWRf Y29scyA9IHR0X2NvbHM7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogQ0tfVFRHV1NJWiAqLworCisgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAgICAg ICAgICAgLyogU3RhcnQgb2ZmIHdpdGggYSBibGFuayBsaW5lICovCisgICAgbiA9IChobXRvcGxp bmUgPiAwKSA/IGhtdG9wbGluZSA6IDE7IC8qIExpbmUgY291bnRlciAqLworICAgIGZvciAoaSA9 IDA7ICpzW2ldOyBpKyspIHsKKyAgICAgICAgcHJpbnRmKCIlc1xuIixzW2ldKTsgICAgICAgICAg ICAvKiBQcmludCBhIGxpbmUuICovCisgICAgICAgIHkgPSAoaW50KXN0cmxlbihzW2ldKTsKKyAg ICAgICAgayA9IDE7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCB5OyBqKyspICAgICAgICAgLyog U2VlIGhvdyBtYW55IG5ld2xpbmVzIHdlcmUgKi8KKyAgICAgICAgICBpZiAoc1tpXVtqXSA9PSAn XG4nKSBrKys7ICAgICAvKiBpbiB0aGUgc3RyaW5nLi4uICovCisgICAgICAgIG4gKz0gazsKKyAg ICAgICAgaWYgKG4gPiAoY21kX3Jvd3MgLSAzKSAmJiAqc1tpKzFdKSAvKiBBZnRlciBhIHNjcmVl bmZ1bCwgZ2l2ZSB0aGVtICovCisgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ICAgLyogYSAibW9yZT8iIHByb21wdC4gKi8KKyAgICAgICAgICBlbHNlIG4gPSAwOworICAgIH0K KyAgICBwcmludGYoIlxuIik7CisgICAgcmV0dXJuKDApOworfQorCisjaWZuZGVmIE5PRlJJTExT CitzdGF0aWMgY2hhciAqIHN1cHBvcnR0ZXh0W10gPSB7CisKKyJMaXZlIHRlY2huaWNhbCBzdXBw b3J0IGZvciBLZXJtaXQgc29mdHdhcmUgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSIsCisiZnJvbSBD b2x1bWJpYSBVbml2ZXJzaXR5LCBhcyBpdCB3YXMgZnJvbSBtaWQtMTk4MSB1bnRpbCBtaWQtMjAx MSB3aGVuIiwKKworI2lmZGVmIE9TMgorCisidGhlIEtlcm1pdCBQcm9qZWN0IHdhcyBjYW5jZWxs ZWQuICBCZWdpbm5pbmcgd2l0aCB2ZXJzaW9uIDMuMCwgS2VybWl0IDk1IiwKKworI2Vsc2UKKwor InRoZSBLZXJtaXQgUHJvamVjdCB3YXMgY2FuY2VsbGVkLiAgQmVnaW5uaW5nIHdpdGggdmVyc2lv biA5LjAsIEMtS2VybWl0IiwKKworI2VuZGlmCS8qIE9TMiAqLworCisiaXMgT3BlbiBTb3VyY2Ug c29mdHdhcmUuICBUaGUgS2VybWl0IHdlYnNpdGUgaXMgc3VwcG9zZWQgcmVtYWluIG9wZW4iLAor ImluZGVmaW5pdGVseSBhdDoiLAorIiAiLAorIiAgaHR0cDovL2tlcm1pdC5jb2x1bWJpYS5lZHUv IiwKKyIgIiwKKworI2lmZGVmIE9TMgorCisiVGhlIEtlcm1pdCA5NSBwYWdlIGlzIGhlcmU6IiwK KyIgIiwKKyIgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1L2s5NS5odG1sIiwKKyIgIiwKKyJU aGUgS2VybWl0IDk1IG1hbnVhbCBpcyBoZXJlOiIsCisiICIsCisiICBodHRwOi8va2VybWl0LmNv bHVtYmlhLmVkdS9rOTVtYW51YWwvIiwKKyIgIiwKKyJUaGUgS2VybWl0IDk1IEZyZXF1ZW50bHkg QXNrZWQgUXVlc3Rpb25zIHBhZ2UgaXMgaGVyZToiLAorIiAiLAorIiAgaHR0cDovL2tlcm1pdC5j b2x1bWJpYS5lZHUvazk1ZmFxLmh0bWwiLAorIiAiLAorImFuZCBtYW55IG90aGVyIHJlc291cmNl cyBhcmUgbGlzdGVkIG9uIHRoZSBLZXJtaXQgOTUgaG9tZSBwYWdlLiIsCisiICIsCisKKyNlbHNl CisKKyJUaGUgQy1LZXJtaXQgaG9tZSBwYWdlIGlzIGhlcmU6IiwKKyIgIiwKKyIgIGh0dHA6Ly9r ZXJtaXQuY29sdW1iaWEuZWR1L2NrZXJtaXQuaHRtbCIsCisiICIsCisiVGhlIGRvY3VtZW50YXRp b24gZm9yIEMtS2VybWl0IGlzIGxpc3RlZCBoZXJlOiIsCisiICIsCisiICBodHRwOi8va2VybWl0 LmNvbHVtYmlhLmVkdS9ja2VybWl0Lmh0bWwjZG9jIiwKKyIgIiwKKyJUaGUgQy1LZXJtaXQgRnJl cXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgcGFnZSBpcyBoZXJlOiIsCisiICIsCisiICBodHRwOi8v a2VybWl0LmNvbHVtYmlhLmVkdS9ja2ZhcS5odG1sIiwKKyIgIiwKKyJhbmQgbWFueSBvdGhlciBy ZXNvdXJjZXMgYXJlIGxpc3RlZCBvbiB0aGUgQy1LZXJtaXQgaG9tZSBwYWdlLiIsCisiICIsCisK KyNlbmRpZgkvKiBPUzIgKi8KKworIlRpbWUgd2lsbCB0ZWxsIHdoYXQgc29ydCBvZiBkZXZlbG9w bWVudCBhbmQgc3VwcG9ydCBzdHJ1Y3R1cmVzIGFyaXNlIiwKKyJpbiB0aGUgT3BlbiBTb3VyY2Ug Y29tbXVuaXR5LiIsCisiIgorfTsKKworLyogRG8gdGhlIEJVRyBjb21tYW5kICovCitpbnQKK2Rv YnVnKCkgeworICAgIHJldHVybihobXNnYShzdXBwb3J0dGV4dCkpOworfQorI2VuZGlmIC8qIE5P RlJJTExTICovCisKKyNpZm5kZWYgTk9YTUlUCitzdGF0aWMgY2hhciAqaHNldHhtaXRbXSA9IHsK KyJTeW50YXg6IFNFVCBUUkFOU01JVCBwYXJhbWV0ZXIgdmFsdWUiLAorIiAiLAorIkNvbnRyb2xz IHRoZSBiZWhhdmlvciBvZiB0aGUgVFJBTlNNSVQgY29tbWFuZCAoc2VlIEhFTFAgVFJBTlNNSVQp OiIsCisiICIsCisiU0VUIFRSQU5TTUlUIEVDSE8geyBPTiwgT0ZGIH0iLAorIiAgV2hldGhlciB0 byBlY2hvIHRleHQgdG8geW91ciBzY3JlZW4gYXMgaXQgaXMgYmVpbmcgdHJhbnNtaXR0ZWQuIiwK KyIgIiwKKyJTRVQgVFJBTlNNSVQgRU9GIHRleHQiLAorIiAgVGV4dCB0byBzZW5kIGFmdGVyIGVu ZCBvZiBmaWxlIGlzIHJlYWNoZWQsIGUuZy4gXFw0IGZvciBDdHJsLUQiLAorIiAiLAorIlNFVCBU UkFOU01JVCBGSUxMIG51bWJlciIsCisiICBBU0NJSSB2YWx1ZSBvZiBhIGNoYXJhY3RlciB0byBp bnNlcnQgaW50byBibGFuayBsaW5lcywgMCBmb3Igbm9uZS4iLAorIiAgQXBwbGllcyBvbmx5IHRv IHRleHQgbW9kZS4gIDAgYnkgZGVmYXVsdC4iLAorIiAiLAorIlNFVCBUUkFOU01JVCBMSU5FRkVF RCB7IE9OLCBPRkYgfSIsCisiICBUcmFuc21pdCBMaW5lZmVlZCBhcyB3ZWxsIGFzIENhcnJpYWdl IFJldHVybiAoQ1IpIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLiIsCisiICBOb3JtYWxseSwgb25s eSBDUiAgaXMgc2VudC4iLAorIiAiLAorIlNFVCBUUkFOU01JVCBMT0NLSU5HLVNISUZUIHsgT04s IE9GRiB9IiwKKyIgIFdoZXRoZXIgdG8gdXNlIFNPL1NJIGZvciB0cmFuc21pdHRpbmcgOC1iaXQg ZGF0YSB3aGVuIFBBUklUWSBpcyBub3QgTk9ORS4iLAorIiAiLAorIlNFVCBUUkFOU01JVCBQQVVT RSBudW1iZXIiLAorIiAgSG93IG1hbnkgbWlsbGlzZWNvbmRzIHRvIHBhdXNlIGFmdGVyIHRyYW5z bWl0dGluZyBlYWNoIGxpbmUgKHRleHQgbW9kZSksIiwKKyIgIG9yIGVhY2ggY2hhcmFjdGVyIChi aW5hcnkgbW9kZSkuIiwKKyIgIiwKKyJTRVQgVFJBTlNNSVQgUFJPTVBUIG51bWJlciIsCisiICBB U0NJSSB2YWx1ZSBvZiBjaGFyYWN0ZXIgdG8gbG9vayBmb3IgZnJvbSBob3N0IGJlZm9yZSBzZW5k aW5nIG5leHQgbGluZSIsCisiICB3aGVuIFRSQU5TTUlUdGluZyBpbiB0ZXh0IG1vZGU7IG5vcm1h bGx5IDEwIChMaW5lZmVlZCkuICAwIG1lYW5zIG5vbmU7IiwKKyIgIGRvbid0IHdhaXQgZm9yIGEg cHJvbXB0LiIsCisiICIsCisiU0VUIFRSQU5TTUlUIFRJTUVPVVQgbnVtYmVyIiwKKyIgIE51bWJl ciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIGVhY2ggY2hhcmFjdGVyIHRvIGVjaG8gd2hlbiBUUkFO U01JVCBFQ0hPIiwKKyIgIGlzIE9OIG9yIFRSQU5TTUlUIFBST01QVCBpcyBub3QgMC4gIElmIDAg aXMgc3BlY2lmaWVkLCB0aGlzIG1lYW5zIHdhaXQiLAorIiAgaW5kZWZpbml0ZWx5IGZvciBlYWNo IGVjaG8uIiwKKyIgIiwKKyJTeW5vbnltOiBTRVQgWE1JVC4gIFNIT1cgVFJBTlNNSVQgZGlzcGxh eXMgY3VycmVudCBzZXR0aW5ncy4iLAorIiIgfTsKKyNlbmRpZiAvKiBOT1hNSVQgKi8KKworc3Rh dGljIGNoYXIgKmhzZXRia2dbXSA9IHsKKyJTeW50YXg6IFNFVCBCQUNLR1JPVU5EIHsgT0ZGLCBP TiB9IiwKKyIgIiwKKyIgIFNFVCBCQUNLR1JPVU5EIE9GRiBmb3JjZXMgcHJvbXB0cyBhbmQgbWVz c2FnZXMgdG8gYXBwZWFyIG9uIHlvdXIgc2NyZWVuIiwKKyIgIGV2ZW4gdGhvdWdoIEtlcm1pdCB0 aGlua3MgaXQgaXMgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZC4iLAorIiIgfTsKKworI2lmZGVm IERZTkFNSUMKK3N0YXRpYyBjaGFyICpoc2V0YnVmW10gPSB7CisiU3ludGF4OiBTRVQgQlVGRkVS UyBuMSBbIG4yIF0iLAorIiAiLAorIiAgQ2hhbmdlcyB0aGUgb3ZlcmFsbCBhbW91bnQgb2YgbWVt b3J5IGFsbG9jYXRlZCBmb3IgU0VORCBhbmQgUkVDRUlWRSBwYWNrZXQiLAorIiAgYnVmZmVycywg cmVzcGVjdGl2ZWx5LiAgQmlnZ2VyIG51bWJlcnMgbGV0IHlvdSBoYXZlIGxvbmdlciBwYWNrZXRz IGFuZCIsCisiICBtb3JlIHdpbmRvdyBzbG90cy4gIElmIG4yIGlzIG9taXR0ZWQsIHRoZSBzYW1l IHZhbHVlIGFzIG4xIGlzIHVzZWQuIiwKKyNpZmRlZiBCSUdCVUZPSworIiAiLAorIiAgTk9URTog VGhpcyBjb21tYW5kIGlzIG5vdCBuZWVkZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdCwgd2hp Y2ggaXMiLAorIiAgYWxyZWFkeSBjb25maWd1cmVkIGZvciBtYXhpbXVtLXNpemUgcGFja2V0IGJ1 ZmZlcnMuIiwKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworIiIgfTsKKyNlbmRpZiAvKiBEWU5BTUlD ICovCisKK3N0YXRpYyBjaGFyICpoc2V0Y21kW10gPSB7CisiU3ludGF4OiBTRVQgQ09NTUFORCBw YXJhbWV0ZXIgdmFsdWUiLAorIiAiLAorCisjaWZkZWYgQ0tfQVVUT0RMCisiU0VUIENPTU1BTkQg QVVUT0RPV05MT0FEIHsgT04sIE9GRiB9IiwKKyIgIEVuYWJsZXMvRGlzYWJsZXMgYXV0b21hdGlj IHJlY29nbml0aW9uIG9mIEtlcm1pdCBwYWNrZXRzIHdoaWxlIGluIiwKKyIgIGNvbW1hbmQgbW9k ZS4gIE9OIGJ5IGRlZmF1bHQuIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKworIlNF VCBDT01NQU5EIEJZVEVTSVpFIHsgNywgOCB9IiwKKyIgIEluZm9ybXMgS2VybWl0IG9mIHRoZSBi eXRlc2l6ZSBvZiB0aGUgY29tbXVuaWNhdGlvbiBwYXRoIGJldHdlZW4gaXRzZWxmIiwKKyIgIGFu ZCB5b3VyIGtleWJvYXJkIGFuZCBzY3JlZW4uICA4IGlzIGFzc3VtZWQuICBTRVQgQ09NTUFORCBC WVRFIDcgb25seSBpZiIsCisiICA4LWJpdCBjaGFyYWN0ZXJzIGNhbm5vdCBwYXNzLiIsCisiICIs CisKKyNpZmRlZiBPUzIKKyJTRVQgQ09NTUFORCBDT0xPUiA8Zm9yZWdyb3VuZC1jb2xvcj4gPGJh Y2tncm91bmQtY29sb3I+IiwKKyIgIExldHMgeW91IGNob29zZSBjb2xvcnMgZm9yIENvbW1hbmQg c2NyZWVuLiAgVXNlID8gaW4gdGhlIGNvbG9yIGZpZWxkcyB0byIsCisiICB0byBnZXQgbGlzdHMg b2YgYXZhaWxhYmxlIGNvbG9ycy4iLAorIiAiLAorIlNFVCBDT01NQU5EIENVUlNPUi1QT1NJVElP TiA8cm93PiA8Y29sdW1uPiIsCisiICBNb3ZlcyB0aGUgY29tbWFuZC1zY3JlZW4gY3Vyc29yIHRv IHRoZSBnaXZlbiBwb3NpdGlvbiAoMS1iYXNlZCkuICBUaGlzIiwKKyIgIGNvbW1hbmQgc2hvdWxk IGJlIHVzZWQgaW4gc2NyaXB0cyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQU5TSS5TWVMgZXNjYXBl IiwKKyIgIHNlcXVlbmNlcy4iLAorIiAiLAorI2VuZGlmIC8qIE9TMiAqLworCisiU0VUIENPTU1B TkQgRVJST1IgeyAwLDEsMiwzIH0iLAorIiAgU2V0cyB0aGUgdmVyYm9zaXR5IGxldmVsIG9mIGNv bW1hbmQgZXJyb3IgbWVzc2FnZXM7IHRoZSBoaWdoZXIgdGhlIG51bWJlciwiLAorIiAgdGhlIG1v cmUgdmVyYm9zZSB0aGUgbWVzc2FnZS4gIFRoZSBkZWZhdWx0IGlzIDEuICBIaWdoZXIgdmFsdWVz IGFyZSIsCisiICB1c2VmdWwgb25seSBmb3IgZGVidWdnaW5nIHNjcmlwdHMuIiwKKyIgIiwKKwor I2lmZGVmIE9TMgorI2lmZGVmIE5UCisiU0VUIENPTU1BTkQgSEVJR0hUIDxudW1iZXI+IiwKKyIg IENoYW5nZXMgdGhlIG51bWJlciBvZiByb3dzIChsaW5lcykgaW4geW91ciBjb21tYW5kIHNjcmVl biwgbm90IiwKKyIgIGNvdW50aW5nIHRoZSBzdGF0dXMgbGluZS4gIFJlY29tbWVuZGVkIHZhbHVl cyBhcmUgMjQsIDQyLCBhbmQgNDkgKG9yIDI1LCIsCisiICA0MywgYW5kIDUwIGlmIFNFVCBDT01N QU5EIFNUQVRVU0xJTkUgaXMgT0ZGLikiLAorI2Vsc2UKKyJTRVQgQ09NTUFORCBIRUlHSFQgPG51 bWJlcj4iCisiICBDaGFuZ2VzIHRoZSBudW1iZXIgb2Ygcm93cyAobGluZXMpIGluIHlvdXIgY29t bWFuZCBzY3JlZW4sIG5vdCIsCisiICBjb3VudGluZyB0aGUgc3RhdHVzIGxpbmUuICBXaW5kb3dl ZCBzZXNzaW9ucyBjYW4gdXNlIGFueSB2YWx1ZSBmcm9tIDggdG8iLAorIiAgMTAxLiAgRnVsbHNj cmVlbiBzZXNzaW9ucyBhcmUgbGltaXRlZCB0byAyNCwgNDIsIDQ5LCBvciA1OS4gIE5vdCBhbGwi CisiICBoZWlnaHRzIGFyZSBzdXBwb3J0ZWQgYnkgYWxsIHZpZGVvIGFkYXB0ZXJzLiIsCisjZW5k aWYgLyogTlQgKi8KKyNlbHNlICAvKiBPUzIgKi8KKyJTRVQgQ09NTUFORCBIRUlHSFQgPG51bWJl cj4iLAorIiAgSW5mb3JtcyBLZXJtaXQgb2YgdGhlIG51bWJlciBvZiByb3dzIGluIHlvdXIgY29t bWFuZCBzY3JlZW4gZm9yIHRoZSIsCisiICBwdXJwb3NlcyBvZiBNb3JlPy1wcm9tcHRpbmcuIiwK KyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKyJTRVQgQ09NTUFORCBXSURUSCA8bnVtYmVyPiIsCisi ICBJbmZvcm1zIEtlcm1pdCBvZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWNyb3NzIHlvdXIg c2NyZWVuIGZvciIsCisiICBwdXJwb3NlcyBvZiBzY3JlZW4gZm9ybWF0dGluZy4iLAorIiAiLAor IlNFVCBDT01NQU5EIE1PUkUtUFJPTVBUSU5HIHsgT04sIE9GRiB9IiwKKyIgIE9OICh0aGUgZGVm YXVsdCkgZW5hYmxlcyBNb3JlPy1wcm9tcHRpbmcgd2hlbiBLZXJtaXQgbmVlZHMgdG8gZGlzcGxh eSIsCisiICB0ZXh0IHRoYXQgZG9lcyBub3QgZml0IHZlcnRpY2FsbHkgb24geW91ciBzY3JlZW4u ICBPRkYgYWxsb3dzIHRoZSB0ZXh0IHRvIiwKKyIgIHNjcm9sbCBieSB3aXRob3V0IGludGVydmVu dGlvbi4gIElmIHlvdXIgY29tbWFuZCB3aW5kb3cgaGFzIHNjcm9sbCBiYXJzLCIsCisiICB5b3Ug bWlnaHQgcHJlZmVyIE9GRi4iLAorIiAiLAorCisjaWZkZWYgQ0tfUkVDQUxMCisiU0VUIENPTU1B TkQgUkVDQUxMLUJVRkZFUi1TSVpFIG51bWJlciIsCisiICBIb3cgYmlnIHlvdSB3YW50IEtlcm1p dCdzIGNvbW1hbmQgcmVjYWxsIGJ1ZmZlciB0byBiZS4gIEJ5IGRlZmF1bHQsIGl0IiwKKyIgIGhv bGRzIDEwIGNvbW1hbmRzLiAgWW91IGNhbiBtYWtlIGl0IGFueSBzaXplIHlvdSBsaWtlLCBzdWJq ZWN0IHRvIG1lbW9yeSIsCisiICBjb25zdHJhaW50cyBvZiB0aGUgY29tcHV0ZXIuICBBIHNpemUg b2YgMCBkaXNhYmxlcyBjb21tYW5kIHJlY2FsbC4iLAorIiAgV2hlbmV2ZXIgeW91IGdpdmUgdGhp cyBjb21tYW5kLCBwcmV2aW91cyBjb21tYW5kIGhpc3RvcnkgaXMgbG9zdC4iLAorIiAiLAorI2Vu ZGlmIC8qIENLX1JFQ0FMTCAqLworCisiU0VUIENPTU1BTkQgUVVPVElORyB7IE9OLCBPRkYgfSIs CisiICBXaGV0aGVyIHRvIHRyZWF0IGJhY2tzbGFzaCBhbmQgcXVlc3Rpb24gbWFyayBhcyBzcGVj aWFsIGNoYXJhY3RlcnMgKE9OKSwiLAorIiAgb3IgYXMgb3JkaW5hcnkgZGF0YSBjaGFyYWN0ZXJz IChPRkYpIGluIGNvbW1hbmRzLiAgT04gYnkgZGVmYXVsdC4iLAorIiAiLAorI2lmZGVmIERPVUJM RVFVT1RJTkcKKyJTRVQgQ09NTUFORCBET1VCTEVRVU9USU5HIHsgT04sIE9GRiB9IiwKKyIgIFdo ZXRoZXIgdG8gYWxsb3cgZG91YmxlcXVvdGVzIChcIikgdG8gYmUgdXNlZCB0byBlbmNsb3NlIGZp ZWxkcywiLAorIiAgZmlsZW5hbWVzLCBkaXJlY3RvcnkgbmFtZXMsIGFuZCBtYWNybyBhcmd1bWVu dHMgdGhhdCBtaWdodCBjb250YWluIiwKKyIgIHNwYWNlcy4gIE9OIGJ5IGRlZmF1bHQ7IHVzZSBP RkYgdG8gZm9yY2UgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIiwKKyIgIHZlcnNpb25zLiIsCisi ICIsCisjZW5kaWYgLyogRE9VQkxFUVVPVElORyAqLworCisjaWZkZWYgQ0tfUkVDQUxMCisiU0VU IENPTU1BTkQgUkVUUlkgeyBPTiwgT0ZGIH0iLAorIiAgV2hldGhlciB0byByZXByb21wdCB5b3Ug d2l0aCB0aGUgY29ycmVjdCBidXQgaW5jb21wbGV0ZSBwb3J0aW9uIG9mIGEiLAorIiAgc3ludGFj dGljYWxseSBpbmNvcnJlY3QgY29tbWFuZC4gIE9OIGJ5IGRlZmF1bHQuIiwKKyIgIiwKKyNlbmRp ZiAvKiBDS19SRUNBTEwgKi8KKworI2lmZGVmIE9TMgorIlNFVCBDT01NQU5EIFNDUk9MTEJBQ0sg PGxpbmVzPiIsCisiICBTZXRzIHNpemUgb2YgdmlydHVhbCBDb21tYW5kIHNjcmVlbiBidWZmZXIg dG8gdGhlIGdpdmVuIG51bWJlciBvZiBsaW5lcywiLAorIiAgd2hpY2ggaW5jbHVkZXMgdGhlIGFj dGl2ZSBDb21tYW5kIHNjcmVlbi4gIFRoZSBtaW5pbXVtIGlzIDI1Ni4gIFRoZSBtYXgiLAorIiAg aXMgMiBtaWxsaW9uLiAgVGhlIGRlZmF1bHQgaXMgNTEyLiIsCisiICIsCisiU0VUIENPTU1BTkQg U1RBVFVTTElORSB7IE9OLCBPRkYgfSIsCisiICBPTiAoZGVmYXVsdCkgZW5hYmxlcyB0aGUgS2Vy bWl0IHN0YXR1cyBsaW5lIGluIHRoZSBjb21tYW5kIHNjcmVlbi4iLAorIiAgT0ZGIHJlbW92ZXMg aXQsIG1ha2luZyB0aGUgbGluZSBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgaG9zdC4iLAorIiAi LAorI2VuZGlmIC8qIE9TMiAqLworCisiVXNlIFNIT1cgQ09NTUFORCB0byBkaXNwbGF5IHRoZXNl IHNldHRpbmdzLiIsCisiIiB9OworCisjaWZuZGVmIE5PTE9DQUwKK3N0YXRpYyBjaGFyICpoc2V0 Y2FyW10gPSB7CisiU3ludGF4OiBTRVQgQ0FSUklFUi1XQVRDSCB7IEFVVE8sIE9GRiwgT04gfSIs CisiICIsCisiICBBdHRlbXB0cyB0byBjb250cm9sIHRyZWF0bWVudCBvZiBjYXJyaWVyICh0aGUg RGF0YSBDYXJyaWVyIERldGVjdCBzaWduYWwpIiwKKyIgIG9uIHNlcmlhbCBjb21tdW5pY2F0aW9u IChTRVQgTElORSBvciBTRVQgUE9SVCkgZGV2aWNlcy4gIE9OIG1lYW5zIHRoYXQiLAorIiAgY2Fy cmllciBpcyByZXF1aXJlZCBhdCBhbGwgdGltZXMuICBPRkYgbWVhbnMgY2FycmllciBpcyBuZXZl ciByZXF1aXJlZC4iLAorIiAgQVVUTyAodGhlIGRlZmF1bHQpIG1lYW5zIGNhcnJpZXIgaXMgcmVx dWlyZWQgYXQgYWxsIHRpbWVzIGV4Y2VwdCBkdXJpbmciLAorIiAgdGhlIERJQUwgY29tbWFuZC4g IENvcnJlY3Qgb3BlcmF0aW9uIG9mIGNhcnJpZXItd2F0Y2ggZGVwZW5kcyBvbiB0aGUiLAorIiAg Y2FwYWJpbGl0aWVzIG9mIHRoZSB1bmRlcmx5aW5nIE9TLCBkcml2ZXJzLCBkZXZpY2VzLCBhbmQg Y2FibGVzLiAgSWYgeW91IiwKKyIgIG5lZWQgdG8gQ09OTkVDVCB0byBhIHNlcmlhbCBkZXZpY2Ug dGhhdCBpcyBub3QgYXNzZXJ0aW5nIGNhcnJpZXIsIGFuZCIsCisiICBLZXJtaXQgd29uJ3QgbGV0 IHlvdSwgdXNlIFNFVCBDQVJSSUVSLVdBVENIIE9GRi4gIFVzZSBTSE9XIENPTU1VTklDQVRJT05T IiwKKyIgIHRvIGRpc3BsYXkgdGhlIENBUlJJRVItV0FUQ0ggc2V0dGluZy4iLAorIiIgfTsKKyNl bmRpZiAvKiBOT0xPQ0FMICovCisKK3N0YXRpYyBjaGFyICpoc2V0YXRbXSA9IHsKKyJTeW50YXg6 IFNFVCBBVFRSSUJVVEVTIG5hbWUgT04gb3IgT0ZGIiwKKyIgIiwKKyIgIFVzZSB0aGlzIGNvbW1h bmQgdG8gZW5hYmxlIChPTikgb3IgZGlzYWJsZSAoT0ZGKSB0aGUgdHJhbnNtaXNzaW9uIG9mIiwK KyIgIHNlbGVjdGVkIGZpbGUgYXR0cmlidXRlcyBhbG9uZyB3aXRoIGVhY2ggZmlsZSwgYW5kIHRv IGhhbmRsZSBvciBpZ25vcmUiLAorIiAgc2VsZWN0ZWQgaW5jb21pbmcgZmlsZSBhdHRyaWJ1dGVz LCBpbmNsdWRpbmc6IiwKKyIgIiwKKyNpZm5kZWYgTk9DU0VUUworIiAgIENIQVJBQ1RFUi1TRVQ6 ICBUaGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldCBmb3IgdGV4dCBmaWxlcyIsCisjZW5kaWYgLyog Tk9DU0VUUyAqLworIiAgIERBVEU6ICAgICAgICAgICBUaGUgZmlsZSdzIGNyZWF0aW9uIGRhdGUi LAorIiAgIERJU1BPU0lUSU9OOiAgICBVbnVzdWFsIHRoaW5ncyB0byBkbyB3aXRoIHRoZSBmaWxl LCBsaWtlIE1BSUwgb3IgUFJJTlQiLAorIiAgIExFTkdUSDogICAgICAgICBUaGUgZmlsZSdzIGxl bmd0aCIsCisiICAgUFJPVEVDVElPTjogICAgIFRoZSBmaWxlJ3MgcHJvdGVjdGlvbiAocGVybWlz c2lvbnMpIiwKKyIgICBTWVNURU0tSUQ6ICAgICAgTWFjaGluZS9PcGVyYXRpbmcgc3lzdGVtIG9m IG9yaWdpbiIsCisiICAgVFlQRTogICAgICAgICAgIFRoZSBmaWxlJ3MgdHlwZSAodGV4dCBvciBi aW5hcnkpIiwKKyIgIiwKKyJZb3UgY2FuIGFsc28gc3BlY2lmeSBBTEwgdG8gc2VsZWN0IGFsbCBv ZiB0aGVtLiAgRXhhbXBsZXM6IiwKKyIgIiwKKyIgICBTRVQgQVRUUiBEQVRFIE9GRiIsCisiICAg U0VUIEFUVFIgTEVOR1RIIE9OIiwKKyIgICBTRVQgQVRUUiBBTEwgT0ZGIiwKKyIgIiwKKyJBbHNv IHNlZSBIRUxQIFNFVCBTRU5EIGFuZCBIRUxQIFNFVCBSRUNFSVZFLiIsCisiIgorfTsKKworc3Rh dGljIGNoYXIgKmh4eXRha1tdID0geworIlN5bnRheDogU0VUIFRBS0UgcGFyYW1ldGVyIHZhbHVl IiwKKyIgIiwKKyIgIENvbnRyb2xzIGJlaGF2aW9yIG9mIFRBS0UgY29tbWFuZDoiLAorIiAiLAor IlNFVCBUQUtFIEVDSE8geyBPTiwgT0ZGIH0iLAorIiAgVGVsbHMgd2hldGhlciBjb21tYW5kcyBy ZWFkIGZyb20gYSBUQUtFIGZpbGUgc2hvdWxkIGJlIGRpc3BsYXllZCBvbiB0aGUiLAorIiAgc2Ny ZWVuIChpZiBzbywgZWFjaCBjb21tYW5kIGlzIHNob3duIGF0IHRoZSB0aW1lIGl0IGlzIHJlYWQs IGFuZCBsYWJlbGVkIiwKKyIgIHdpdGggYSBsaW5lIG51bWJlcikuIiwKKyIgIiwKKyJTRVQgVEFL RSBFUlJPUiB7IE9OLCBPRkYgfSIsCisiICBUZWxscyB3aGV0aGVyIGEgVEFLRSBjb21tYW5kIGZp bGUgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlZCB3aGVuIiwKKyIgIGEgY29tbWFu ZCBmYWlscy4gIFRoaXMgc2V0dGluZyBpcyBsb2NhbCB0byB0aGUgY3VycmVudCBjb21tYW5kIGZp bGUsIGFuZCIsCisiICBpbmhlcml0ZWQgYnkgc3Vib3JkaW5hdGUgY29tbWFuZCBmaWxlcy4iLAor IiIgfTsKKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyTU9VU0UKK3N0YXRpYyBjaGFyICpo eHltb3VzZVtdID0geworIlN5bnRheDogU0VUIE1PVVNFIEFDVElWQVRFIHsgT04sIE9GRiB9IiwK KyIgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIG1vdXNlIGluIENvbm5lY3QgbW9kZS4gIERlZmF1 bHQgaXMgT04iLAorIiAiLAorIlN5bnRheDogU0VUIE1PVVNFIEJVVFRPTiA8bnVtYmVyPiA8a2V5 LW1vZGlmaWVyPiA8YWN0aW9uPiBbIDx0ZXh0PiBdIiwKKyIgd2hlcmU6IiwKKyIgIDxudW1iZXI+ IGlzIHRoZSBtb3VzZSBidXR0b24gbnVtYmVyLCAxLCAyLCBvciAzOyIsCisiICA8a2V5LW1vZGlm aWVyPiBkZW5vdGVzIG1vZGlmaWVyIGtleXMgaGVsZCBkb3duIGR1cmluZyB0aGUgbW91c2UgZXZl bnQ6IiwKKyIgICBBTFQsIEFMVC1TSElGVCwgQ1RSTCwgQ1RSTC1BTFQgQ1RSTC1BTFQtU0hJRlQs IENUUkwtU0hJRlQsIFNISUZULCBOT05FOyIsCisiICA8YWN0aW9uPiBpcyB0aGUgbW91c2UgYWN0 aW9uLCBDTElDSywgRFJBRywgb3IgRE9VQkxFLUNMSUNLLiIsCisiICIsCisiIFRoZSA8dGV4dD4g aGFzIGV4YWN0bHkgdGhlIHNhbWUgcHJvcGVydGllcyBhcyB0aGUgPHRleHQ+IGZyb20gdGhlIFNF VCBLRVkiLAorIiBjb21tYW5kIC0tIGl0IGNhbiBiZSBhIGNoYXJhY3RlciwgYSBzdHJpbmcsIG9u ZSBvciBtb3JlIEt2ZXJicywgYSBtYWNybyIsCisiIGludm9rZWQgYXMgYSBLdmVyYiwgb3IgYW55 IGNvbWJpbmF0aW9uIG9mIHRoZXNlLiAgVGh1cywgYW55dGhpbmcgdGhhdCBjYW4iLAorIiBiZSBh c3NpZ25lZCB0byBhIGtleSBjYW4gYWxzbyBiZSBhc3NpZ25lZCB0byB0aGUgbW91c2UgLS0gYW5k IHZpY2UgdmVyc2EuIiwKKyIgSWYgdGhlIDx0ZXh0PiBpcyBvbWl0dGVkLCB0aGUgYWN0aW9uIHdp bGwgYmUgaWdub3JlZC4gIEV4YW1wbGVzOiIsCisiICIsCisiIFNFVCBNT1VTRSBCVVRUT04gMSBO T05FIERPVUJMRSBcXEttb3VzZUN1clBvcyIsCisiIFNFVCBNT1UgQiAyIFNISUZUIENMSUNLIGhl bHBcXDEzIiwKKyIgIiwKKyIgRFJBRyBvcGVyYXRpb25zIHBlcmZvcm0gYSBcIm1hcmsgbW9kZVwi IHNlbGVjdGlvbiBvZiBUZXh0LiBZb3Ugc2hvdWxkIiwKKyIgYXNzaWduIG9ubHkgdGhlIGZvbGxv d2luZyBhY3Rpb25zIHRvIGRyYWcgb3BlcmF0aW9uczoiLAorIiAiLAorIiAgXFxLZHVtcCAgICAg ICAgIC0gY29weSBtYXJrZWQgdGV4dCB0byBwcmludGVyIChvciBmaWxlKSIsCisiICBcXEttYXJr Y29weWNsaXAgLSBjb3B5IG1hcmtlZCB0ZXh0IHRvIFBNIENsaXBib2FyZCIsCisiICBcXEttYXJr Y29weWhvc3QgLSBjb3B5IG1hcmtlZCB0ZXh0IGRpcmVjdCB0byBIb3N0IiwKKyIgIFxcS21vdXNl bWFyayAgICAtIG1hcmsgdGV4dCwgbm8gY29weSBvcGVyYXRpb24gcGVyZm9ybWVkIiwKKyIgIiwK KyIgVGhlIGZvbGxvd2luZyBLdmVyYiBpcyBvbmx5IGZvciB1c2Ugd2l0aCB0aGUgbW91c2U6IiwK KyIgIiwKKyIgIFxcS21vdXNlQ3VyUG9zIiwKKyIgIiwKKyIgd2hpY2ggcmVwcmVzZW50cyB0aGUg bW91c2UtZGlyZWN0ZWQgdGVybWluYWwgY3Vyc29yIGZlYXR1cmUuIiwKKyIgIiwKKyJTeW50YXg6 IFNFVCBNT1VTRSBDTEVBUiIsCisiIFJlc3RvcmVzIGFsbCBtb3VzZSBldmVudHMgdG8gdGhlaXIg ZGVmYXVsdCBkZWZpbml0aW9ucyIsCisiICAgQnV0dG9uIDEgQ3RybC1DbGljayA9IEt2ZXJiOiBc XEttb3VzZXVybCIsCisiICAgQnV0dG9uIDEgRG91YmxlLUNsaWNrID0gS3ZlcmI6IFxcS21vdXNl Y3VycG9zIiwKKyIgICBCdXR0b24gMSBEcmFnID0gS3ZlcmI6IFxcS21hcmtjb3B5Y2xpcCIsCisi ICAgQnV0dG9uIDEgQWx0LURyYWcgPSBLdmVyYjogXFxLbWFya2NvcHljbGlwX25vZW9sIiwKKyIg ICBCdXR0b24gMSBDdHJsLURyYWcgPSBLdmVyYjogXFxLbWFya2NvcHlob3N0IiwKKyIgICBCdXR0 b24gMSBDdHJsLUFsdC1EcmFnID0gS3ZlcmI6IFxcS21hcmtjb3B5aG9zdF9ub2VvbCIsCisiICAg QnV0dG9uIDEgQ3RybC1TaGlmdC1EcmFnID0gS3ZlcmI6IFxcS2R1bXAiLAorIiAgIEJ1dHRvbiAy IERvdWJsZS1DbGljayA9IEt2ZXJiOiBcXEtwYXN0ZSIsCisiICAgQnV0dG9uIDIgRHJhZyA9IEt2 ZXJiOiBcXEttYXJrY29weWhvc3QiLAorIiAgIEJ1dHRvbiAyIEFsdC1EcmFnID0gS3ZlcmI6IFxc S21hcmtjb3B5aG9zdF9ub2VvbCAgICAgIiwgICAgCisiICAgQnV0dG9uIDMgRG91YmxlLUNsaWNr ID0gS3ZlcmI6IFxcS3Bhc3RlIiwKKyIifTsKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworCitzdGF0 aWMgY2hhciAqaHh5dGVybVtdID0geworIlN5bnRheDogU0VUIFRFUk1JTkFMIHBhcmFtZXRlciB2 YWx1ZSIsCisiICIsCisjaWZkZWYgT1MyCisiU0VUIFRFUk1JTkFMIFRZUEUgeyBBTlNJLCBWVDUy LCBWVDEwMCwgVlQxMDIsIFZUMjIwLCBWVDMyMCwgLi4uIH0iLAorIiAgU2VsZWN0cyB0eXBlIHR5 cGUgb2YgdGVybWluYWwgdG8gZW11bGF0ZS4gIFR5cGUgU0VUIFRFUk1JTkFMIFRZUEUgPyB0byIs CisiICBzZWUgYSBjb21wbGV0ZSBsaXN0LiIsCisiICIsCisiU0VUIFRFUk1JTkFMIEFOU1dFUkJB Q0sgeyBPRkYsIE9OIH0iLAorIiAgRGlzYWJsZXMvZW5hYmxlcyB0aGUgRU5RL0Fuc3dlcmJhY2sg c2VxdWVuY2UgKFwiSy05NSB2ZXJzaW9uIHRlcm0tdHlwZVwiKS4iLAorIiAiLAorIlNFVCBURVJN SU5BTCBBTlNXRVJCQUNLIE1FU1NBR0UgPGV4dGVuc2lvbj4iLAorIiAgQWxsb3dzIHlvdSB0byBz cGVjaWZ5IGFuIGV4dGVuc2lvbiB0byB0aGUgZGVmYXVsdCBhbnN3ZXJiYWNrIG1lc3NhZ2UuIiwK KyIgIiwKKyNlbHNlCisiU0VUIFRFUk1JTkFMIFRZUEUgLi4uIiwKKyIgIFRoaXMgY29tbWFuZCBp cyBub3QgYXZhaWxhYmxlIGJlY2F1c2UgdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdCBkb2VzIG5vdCIs CisiICBpbmNsdWRlIGEgdGVybWluYWwgZW11bGF0b3IuICBJbnN0ZWFkLCBpdCBpcyBhIFwic2Vt aXRyYW5zcGFyZW50IHBpcGVcIiIsCisiICAob3IgYSB0b3RhbGx5IHRyYW5zcGFyZW50IG9uZSwg aWYgeW91IGNvbmZpZ3VyZSBpdCB0aGF0IHdheSkgdG8gdGhlIiwKKyIgIGNvbXB1dGVyIG9yIHNl cnZpY2UgeW91IGhhdmUgbWFkZSBhIGNvbm5lY3Rpb24gdG8uICBZb3VyIGNvbnNvbGUsIiwKKyIg IHdvcmtzdGF0aW9uIHdpbmRvdywgb3IgdGhlIHRlcm1pbmFsIGVtdWxhdG9yIG9yIHRlcm1pbmFs IGZyb20gd2hpY2ggeW91IiwKKyIgIGFyZSBydW5uaW5nIEtlcm1pdCBwcm92aWRlcyB0aGUgZW11 bGF0aW9uLiIsCisiICIsCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19BUEMKKyJTRVQg VEVSTUlOQUwgQVBDIHsgT04sIE9GRiwgTk8tSU5QVVQsIE5PLUlOUFVULVVOQ0hFQ0tFRCwgVU5D SEVDS0VEIH0iLAorI2lmZGVmIE9TMgorIiAgQ29udHJvbHMgZXhlY3V0aW9uIG9mIEFwcGxpY2F0 aW9uIFByb2dyYW0gQ29tbWFuZHMgc2VudCBieSB0aGUgaG9zdCB3aGlsZSIsCisiICBLLTk1IGlz IGVpdGhlciBpbiBDT05ORUNUIG1vZGUgb3IgcHJvY2Vzc2luZyBJTlBVVCBjb21tYW5kcy4gIE9O IGFsbG93cyIsCisiICBleGVjdXRpb24gb2YgXCJzYWZlXCIgY29tbWFuZHMgYW5kIGRpc2FsbG93 cyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgb25lcyIsCisiICBzdWNoIGFzIERFTEVURSwgUkVOQU1F LCBPVVRQVVQsIGFuZCBSVU4uICBPRkYgcHJldmVudHMgZXhlY3V0aW9uIG9mIEFQQ3MuIiwKKyIg IFVOQ0hFQ0tFRCBhbGxvd3MgZXhlY3V0aW9uIG9mIGFsbCBBUENzLiAgT0ZGIGlzIHRoZSBkZWZh dWx0LiIsCisjZWxzZSAvKiBPUzIgKi8KKyIgIENvbnRyb2xzIGV4ZWN1dGlvbiBvZiBBcHBsaWNh dGlvbiBQcm9ncmFtIENvbW1hbmRzIHNlbnQgYnkgdGhlIGhvc3Qgd2hpbGUiLAorIiAgQy1LZXJt aXQgaXMgaW4gQ09OTkVDVCBtb2RlLiAgT04gYWxsb3dzIGV4ZWN1dGlvbiBvZiBcInNhZmVcIiBj b21tYW5kcyBhbmQiLAorIiAgZGlzYWxsb3dzIHBvdGVudGlhbGx5IGRhbmdlcm91cyBjb21tYW5k cyBzdWNoIGFzIERFTEVURSwgUkVOQU1FLCBPVVRQVVQsIiwKKyIgIGFuZCBSVU4uICBPRkYgcHJl dmVudHMgZXhlY3V0aW9uIG9mIEFQQ3MuICBVTkNIRUNLRUQgYWxsb3dzIGV4ZWN1dGlvbiBvZiIs CisiICBhbGwgQVBDcy4gIE9GRiBpcyB0aGUgZGVmYXVsdC4iLAorI2VuZGlmIC8qIE9TMiAqLwor IiAiLAorI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZkZWYgT1MyCisiU0VUIFRFUk1JTkFMIEFS Uk9XLUtFWVMgeyBBUFBMSUNBVElPTiwgQ1VSU09SIH0iLAorIiAgU2V0cyB0aGUgbW9kZSBmb3Ig dGhlIGFycm93IGtleXMgZHVyaW5nIFZUIHRlcm1pbmFsIGVtdWxhdGlvbi4iLAorIiAiLAorIlNF VCBURVJNSU5BTCBBVFRSSUJVVEUgeyBCTElOSywgRElNLCBQUk9URUNURUQsIFJFVkVSU0UsIFVO REVSTElORSB9IiwKKyIgIERldGVybWluZXMgaG93IGF0dHJpYnV0ZXMgYXJlIGRpc3BsYXllZCBi eSBLZXJtaXQtOTUuIiwKKyIgIiwKKyJTRVQgVEVSTUlOQUwgQVRUUklCVVRFIHsgQkxJTkssIERJ TSwgUkVWRVJTRSwgVU5ERVJMSU5FIH0geyBPTiwgT0ZGIH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0 aGVyIHJlYWwgQmxpbmtpbmcsIERpbSwgUmV2ZXJzZSwgYW5kIFVuZGVybGluZSBhcmUgdXNlZCBp biIsCisiICB0aGUgdGVybWluYWwgZGlzcGxheS4gIFdoZW4gQkxJTksgaXMgdHVybmVkIE9GRiwg cmV2ZXJzZSBiYWNrZ3JvdW5kIiwKKyIgIGludGVuc2l0eSBpcyB1c2VkLiAgV2hlbiBESU0gaXMg dHVybmVkIE9GRiwgZGltIGNoYXJhY3RlcnMgYXBwZWFyIEJPTEQuIiwKKyIgIFdoZW4gUkVWRVJT RSBhbmQgVU5ERVJMSU5FIGFyZSBPRkYsIHRoZSBjb2xvcnMgc2VsZWN0ZWQgd2l0aCBTRVQiLAor IiAgVEVSTUlOQUwgQ09MT1IgeyBSRVZFUlNFLFVOREVSTElORSB9IGFyZSB1c2VkIGluc3RlYWQu ICBUaGlzIGNvbW1hbmQiLAorIiAgYWZmZWN0cyB0aGUgZW50aXJlIGN1cnJlbnQgc2NyZWVuIGFu ZCB0ZXJtaW5hbCBzY3JvbGxiYWNrIGJ1ZmZlci4iLAorIiAiLAorIlNFVCBURVJNSU5BTCBBVFRS SUJVVEUgUFJPVEVDVEVEIFsgLSIsCisiICAgeyBCT0xELCBESU0sIElOVklTSUJMRSwgTk9STUFM LCBSRVZFUlNFLCBVTkRFUkxJTkVEIH0gXSIsCisiICBTZXRzIHRoZSBhdHRyaWJ1dGVzIHVzZWQg dG8gcmVwcmVzZW50IFByb3RlY3RlZCB0ZXh0IGluIFd5c2UgYW5kIFRlbGV2aWRlbyIsCisiICB0 ZXJtaW5hbCBlbXVsYXRpb25zLiAgQW55IGNvbWJpbmF0aW9uIG9mIGF0dHJpYnV0ZXMgbWF5IGJl IHVzZWQuICBUaGUiLAorIiAgZGVmYXVsdCBpcyBESU0uKSIsCisiICIsCisjZW5kaWYgLyogT1My ICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBDS19YWVoKKyJTRVQgVEVSTUlOQUwgQVVUT0RPV05M T0FEIHsgT04sIE9GRiwgRVJST1IgeyBTVE9QLCBDT05USU5VRSB9IH0iLAorIiAgZW5hYmxlcy9k aXNhYmxlcyBhdXRvbWF0aWMgc3dpdGNoaW5nIGludG8gZmlsZS10cmFuc2ZlciBtb2RlIHdoZW4g YSBLZXJtaXQiLAorIiAgb3IgWk1PREVNIGZpbGUgdHJhbnNmZXIgaGFzIGJlZW4gZGV0ZWN0ZWQg ZHVyaW5nIENPTk5FQ1QgbW9kZSBvciB3aGlsZSIsCisiICBhbiBJTlBVVCBjb21tYW5kIGlzIGFj dGl2ZS4gIERlZmF1bHQgaXMgT0ZGLiIsCisjZWxzZQorIlNFVCBURVJNSU5BTCBBVVRPRE9XTkxP QUQgeyBPTiwgT0ZGLCBFUlJPUiB7IFNUT1AsIENPTlRJTlVFIH0gfSIsCisiICBlbmFibGVzL2Rp c2FibGVzIGF1dG9tYXRpYyBzd2l0Y2hpbmcgaW50byBmaWxlLXRyYW5zZmVyIG1vZGUgd2hlbiBh IEtlcm1pdCIsCisiICBmaWxlIHRyYW5zZmVyIGhhcyBiZWVuIGRldGVjdGVkIGR1cmluZyBDT05O RUNUIG1vZGUgb3Igd2hpbGUgYW4gSU5QVVQiLAorIiAgY29tbWFuZCBpcyBhY3RpdmUuICBEZWZh dWx0IGlzIE9GRi4iLAorI2VuZGlmIC8qIENLX1hZWiAqLworCisiICIsCisiICBXaGVuIFRFUk1J TkFMIEFVVE9ET1dOTE9BRCBpcyBPTiwgdGhlIFRFUk1JTkFMIEFVVE9ET1dOTE9BRCBFUlJPUiBz ZXR0aW5nIiwKKyIgIHRlbGxzIHdoYXQgdG8gZG8gaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBh IGZpbGUgdHJhbnNmZXIgb3Igb3RoZXIiLAorIiAgcHJvdG9jb2wgb3BlcmF0aW9uIGluaXRpYXRl ZCBieSB0aGUgdGVybWluYWwgZW11bGF0b3I6IFNUT1AgKHRoZSBkZWZhdWx0KSIsCisiICBtZWFu cyB0byByZW1haW4gaW4gY29tbWFuZCBtb2RlIHNvIHlvdSBjYW4gc2VlIHdoYXQgaGFwcGVuZWQ7 IENPTlRJTlVFIiwKKyIgIG1lYW5zIHRvIHJlc3VtZSB0aGUgQ09OTkVDVCBzZXNzaW9uIChlLmcu IHNvIGEgZmFyLWVuZCBzY3JpcHQgY2FuIGNvbnRpbnVlIiwKKyIgIGl0cyB3b3JrKS4iLAorIiAi LAorCisjaWZkZWYgQ0tfWFlaCisiU0VUIFRFUk0uLi4gQVVUTy4uLiB7IEtFUk1JVCwgWk1PREVN IH0gQzAtQ09ORkxJQ1RTIHsgSUdOT1JFRCwgUFJPQ0VTU0VEIH0iLAorIiAgRGV0ZXJtaW5lcyB3 aGV0aGVyIHRoZSBhY3RpdmUgdGVybWluYWwgZW11bGF0b3Igc2hvdWxkIHByb2Nlc3Mgb3IgaWdu b3JlIiwKKyIgIEMwIGNvbnRyb2wgY2hhcmFjdGVycyB3aGljaCBhcmUgYWxzbyB1c2VkIGZvciB0 aGUgc3BlY2lmaWVkIGZpbGUgdHJhbnNmZXIiLAorIiAgcHJvdG9jb2wuICBLZXJtaXQgYnkgZGVm YXVsdCB1c2VzIF5BIChTT0gpIGFuZCBabW9kZW0gdXNlcyBeWCAoQ0FOKS4iLAorIiAgRGVmYXVs dCBpcyBQUk9DRVNTRUQuIiwKKyIgIiwKKyJTRVQgVEVSTS4uLiBBVVRPLi4uIHsgS0VSTUlULCBa TU9ERU0gfSBERVRFQ1RJT04tTUVUSE9EIHsgUEFDS0VULCBTVFJJTkcgfSIsCisiICBEZXRlcm1p bmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBmaWxlIHRyYW5zZmVyIHByb3RvY29sIHNob3VsZCBi ZSBkZXRlY3RlZCIsCisiICBieSBsb29raW5nIGZvciB2YWxpZCBwYWNrZXRzIG9yIGJ5IGlkZW50 aWZ5aW5nIGEgc3BlY2lmaWVkIHRleHQgc3RyaW5nLiIsCisiICBEZWZhdWx0IGlzIFBBQ0tFVC4i LAorIiAiLAorIlNFVCBURVJNLi4uIEFVVE8uLi4geyBLRVJNSVQsIFpNT0RFTSB9IFNUUklORyA8 dGV4dD4iLAorIiAgTGV0cyB5b3UgYXNzaWduIGFuIGF1dG9kb3dubG9hZCBkZXRlY3Rpb24gc3Ry aW5nIGZvciB1c2Ugd2l0aCB0aGUiLAorIiAgc3BlY2lmaWVkIGZpbGUgdHJhbnNmZXIgcHJvdG9j b2wuIiwKKyIgIERlZmF1bHQgZm9yIEtlcm1pdCBpcyBcIlJFQURZIFRPIFNFTkQuLi5cIiwgZm9y IFptb2RlbSBpcyBcInJ6XFx7MTN9XCIuIiwKKyIgIiwKKyNlbHNlIC8qIENLX1hZWiAqLworIlNF VCBURVJNLi4uIEFVVE8uLi4gS0VSTUlUIEMwLUNPTkZMSUNUUyB7IElHTk9SRUQsIFBST0NFU1NF RCB9IiwKKyIgIERldGVybWluZXMgd2hldGhlciB0aGUgYWN0aXZlIHRlcm1pbmFsIGVtdWxhdG9y IHNob3VsZCBwcm9jZXNzIG9yIGlnbm9yZSIsCisiICBDMCBjb250cm9sIGNoYXJhY3RlcnMgd2hp Y2ggYXJlIGFsc28gdXNlZCBmb3IgdGhlIHNwZWNpZmllZCBmaWxlIHRyYW5zZmVyIiwKKyIgIHBy b3RvY29sLiAgS2VybWl0IGJ5IGRlZmF1bHQgdXNlcyBeQSA8U09IPi4gIERlZmF1bHQgaXMgUFJP Q0VTU0VELiIsCisiICIsCisiU0VUIFRFUk0uLi4gQVVUTy4uLiBLRVJNSVQgREVURUNUSU9OLU1F VEhPRCB7IFBBQ0tFVCwgU1RSSU5HIH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVj aWZpZWQgZmlsZSB0cmFuc2ZlciBwcm90b2NvbCBzaG91bGQgYmUgZGV0ZWN0ZWQiLAorIiAgYnkg bG9va2luZyBmb3IgdmFsaWQgcGFja2V0cyBvciBieSBpZGVudGlmeWluZyBhIHNwZWNpZmllZCB0 ZXh0IHN0cmluZy4iLAorIiAgRGVmYXVsdCBpcyBQQUNLRVQuIiwKKyIgIiwKKyJTRVQgVEVSTS4u LiBBVVRPLi4uIEtFUk1JVCBTVFJJTkcgPHRleHQ+IiwKKyIgIExldHMgeW91IGFzc2lnbiBhbiBh dXRvZG93bmxvYWQgZGV0ZWN0aW9uIHN0cmluZyBmb3IgdXNlIHdpdGggdGhlIiwKKyIgIHNwZWNp ZmllZCBmaWxlIHRyYW5zZmVyIHByb3RvY29sLiAgRGVmYXVsdCBpcyBcIlJFQURZIFRPIFNFTkQu Li5cIi4iLAorIiAiLAorI2VuZGlmIC8qIENLX1hZWiAqLworIlNFVCBURVJNSU5BTCBBVVRPUEFH RSB7IE9OLCBPRkYgfSIsCisiICIsCisiU0VUIFRFUk1JTkFMIEFVVE9TQ1JPTEwgeyBPTiwgT0ZG IH0iLAorIiAiLAorI2Vsc2UgLyogT1MyICovCisiU0VUIFRFUk1JTkFMIEFVVE9ET1dOTE9BRCB7 IE9OLCBPRkYsIEVSUk9SIHsgU1RPUCwgQ09OVElOVUUgfSB9IiwKKyIgIEVuYWJsZXMvZGlzYWJs ZXMgYXV0b21hdGljIHN3aXRjaGluZyBpbnRvIGZpbGUtdHJhbnNmZXIgbW9kZSB3aGVuIGEgdmFs aWQiLAorI2lmZGVmIENLX1hZWgorIiAgS2VybWl0IG9yIFpNT0RFTSBwYWNrZXQgb2YgdGhlIGFw cHJvcHJpYXRlIHR5cGUgaXMgcmVjZWl2ZWQgZHVyaW5nIENPTk5FQ1QiLAorIiAgbW9kZS4gIERl ZmF1bHQgaXMgT0ZGLiIsCisjZWxzZQorIiAgS2VybWl0IHBhY2tldCBvZiB0aGUgYXBwcm9wcmlh dGUgdHlwZSBpcyByZWNlaXZlZCBkdXJpbmcgQ09OTkVDVCBtb2RlLiIsCisiICBEZWZhdWx0IGlz IE9GRi4iLAorI2VuZGlmIC8qIENLX1hZWiAqLworCisiICIsCisiICBXaGVuIFRFUk1JTkFMIEFV VE9ET1dOTE9BRCBpcyBPTiwgdGhlIFRFUk1JTkFMIEFVVE9ET1dOTE9BRCBFUlJPUiBzZXR0aW5n IiwKKyIgIHRlbGxzIHdoYXQgdG8gZG8gaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBhIGZpbGUg dHJhbnNmZXIgb3Igb3RoZXIiLAorIiAgcHJvdG9jb2wgb3BlcmF0aW9uIGluaXRpYXRlZCBieSB0 aGUgdGVybWluYWwgZW11bGF0b3I6IFNUT1AgKHRoZSBkZWZhdWx0KSIsCisiICBtZWFucyB0byBy ZW1haW4gaW4gY29tbWFuZCBtb2RlIHNvIHlvdSBjYW4gc2VlIHdoYXQgaGFwcGVuZWQ7IENPTlRJ TlVFIiwKKyIgIG1lYW5zIHRvIHJlc3VtZSB0aGUgQ09OTkVDVCBzZXNzaW9uIChlLmcuIHNvIGEg ZmFyLWVuZCBzY3JpcHQgY2FuIGNvbnRpbnVlIiwKKyIgIGl0cyB3b3JrKS4iLAorIiAiLAorCisj ZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBPUzIKKyJTRVQgVEVSTUlOQUwgQkVMTCB7IEFVRElC TEUsIFZJU0lCTEUsIE5PTkUgfSIsCisiICBTcGVjaWZpZXMgaG93IENvbnRyb2wtRyAoYmVsbCkg Y2hhcmFjdGVycyBhcmUgaGFuZGxlZC4gIEFVRElCTEUgbWVhbnMiLAorIiAgYSBiZWVwIGlzIHNv dW5kZWQ7IFZJU0lCTEUgbWVhbnMgdGhlIHNjcmVlbiBpcyBmbGFzaGVkIG1vbWVudGFyaWx5LiIs CisiICIsCisiICAoVGhpcyBjb21tYW5kIGhhcyBiZWVuIHN1cGVyc2VkZWQgYnkgU0VUIEJFTEwu KSIsCisiICIsCisjZW5kaWYgLyogT1MyICovCisKKyJTRVQgVEVSTUlOQUwgQllURVNJWkUgeyA3 LCA4IH0iLAorIiAgVXNlIDctIG9yIDgtYml0IGNoYXJhY3RlcnMgYmV0d2VlbiBLZXJtaXQgYW5k IHRoZSByZW1vdGUgY29tcHV0ZXIgZHVyaW5nIiwKKyIgIHRlcm1pbmFsIHNlc3Npb25zLiAgVGhl IGRlZmF1bHQgaXMgOC4iLAorIiAiLAorCisjaWZuZGVmIE5PQ1NFVFMKKyNpZmRlZiBPUzIKKyJT RVQgVEVSTUlOQUwgQ0hBUkFDVEVSLVNFVCA8cmVtb3RlLWNzPiIsCisiICBTcGVjaWZpZXMgdGhl IGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgcmVtb3RlIGhvc3QsIDxyZW1vdGUtY3M+LiIsCisi ICBFcXVpdmFsZW50IHRvIFNFVCBURVJNIFJFTU9URS1DSEFSQUNURVItU0VUIDxyZW1vdGUtY3M+ IEFMTC4gIEZvciBtb3JlIiwKKyIgIGNvbnRyb2wgb3ZlciB0aGUgZGV0YWlscywgdXNlIFNFVCBU RVJNIFJFTU9URS1DSEFSQUNURVItU0VUIGFuZCAoaW4iLAorIiAgbm9uLUdVSSBLOTUgdmVyc2lv bnMpIFNFVCBURVJNIExPQ0FMLUNIQVJBQ1RFUi1TRVQ7IHRoZXNlIGFyZSBleHBsYWluZWQiLAor IiAgYmVsb3cuICBUaGUgZGVmYXVsdCBURVJNSU5BTCBDSEFSQUNURVItU0VUIGlzIExBVElOMSAo SVNPIDg4NTktMSkuIiwKKyNlbHNlICAvKiBub3QgT1MyICovCisiU0VUIFRFUk1JTkFMIENIQVJB Q1RFUi1TRVQgPHJlbW90ZS1jcz4gWyA8bG9jYWwtY3M+IF0iLAorIiAgU3BlY2lmaWVzIHRoZSBj aGFyYWN0ZXIgc2V0IHVzZWQgYnkgdGhlIHJlbW90ZSBob3N0LCA8cmVtb3RlLWNzPiwgYW5kIHRo ZSIsCisiICBjaGFyYWN0ZXIgc2V0IHVzZWQgYnkgQy1LZXJtaXQgbG9jYWxseSwgPGxvY2FsLWNz Pi4gIElmIHlvdSBkb24ndCBzcGVjaWZ5IiwKKyIgIHRoZSBsb2NhbCBjaGFyYWN0ZXIgc2V0LCB0 aGUgY3VycmVudCBGSUxFIENIQVJBQ1RFUi1TRVQgaXMgdXNlZC4gIFdoZW4iLAorIiAgeW91IHNw ZWNpZnkgdHdvIGRpZmZlcmVudCBjaGFyYWN0ZXIgc2V0cywgQy1LZXJtaXQgdHJhbnNsYXRlcyBi ZXR3ZWVuIHRoZW0iLAorIiAgZHVyaW5nIENPTk5FQ1QuICBCeSBkZWZhdWx0LCBib3RoIGNoYXJh Y3RlciBzZXRzIGFyZSBUUkFOU1BBUkVOVCwgYW5kIiwKKyIgIG5vIHRyYW5zbGF0aW9uIGlzIGRv bmUuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNp ZmRlZiBPUzIKKworIlNFVCBURVJNSU5BTCBDT0RFLVBBR0UgPG51bWJlcj4iLAorIiAgTGV0cyB5 b3UgY2hhbmdlIHRoZSBQQyBjb2RlIHBhZ2UuICBPbmx5IHdvcmtzIGZvciBjb2RlIHBhZ2VzIHRo YXQgYXJlIiwKKyIgIHN1Y2Nlc3NmdWxseSBwcmVwYXJlZCBpbiBDT05GSUcuU1lTLiAgVXNlIFNI T1cgVEVSTUlOQUwgdG8gbGlzdCB0aGUiLAorIiAgY3VycmVudCBjb2RlIHBhZ2UgYW5kIHRoZSBh dmFpbGFibGUgY29kZSBwYWdlcy4iLAorI2lmZGVmIE9TMk9OTFkKKyIgIiwKKyIgIEFsc28gc2Vl IFNFVCBURVJNSU5BTCBGT05UIGlmIHRoZSBkZXNpcmVkIGNvZGUgcGFnZSBpbiBub3QgYXZhaWxh YmxlIGluIiwKKyIgIHlvdXIgdmVyc2lvbiBvZiBPUy8yLiIsCisjZW5kaWYgLyogT1MyT05MWSAq LworIiAiLAorCisjaWZuZGVmIE5UCisiU0VUIFRFUk1JTkFMIENPTE9SIEJPUkRFUiA8Zm9yZWdy b3VuZD4iLAorI2VuZGlmIC8qIE5UICovCisiU0VUIFRFUk1JTkFMIENPTE9SIDxzY3JlZW5wYXJ0 PiA8Zm9yZWdyb3VuZD4gPGJhY2tncm91bmQ+IiwKKyIgU2V0cyB0aGUgY29sb3JzIG9mIHRoZSB0 ZXJtaW5hbCBlbXVsYXRpb24gc2NyZWVuLiIsCisiIDxzY3JlZW5wYXJ0PiBtYXkgYmUgYW55IG9m IHRoZSBmb2xsb3dpbmc6IiwKKyIgIERFQlVHLCBIRUxQLVRFWFQsIFJFVkVSU0UsIFNFTEVDVElP TiwgU1RBVFVTLUxJTkUsIFRFUk1JTkFMLVNDUkVFTiwgb3IiLAorIiAgVU5ERVJMSU5FRC1URVhU LiIsCisiIDxmb3JlZ3JvdW5kPiBhbmQgPGJhY2tncm91bmQ+IG1heSBiZSBhbnkgb2Y6IiwKKyIg IEJMQUNLLCBCTFVFLCBHUkVFTiwgQ1lBTiwgUkVELCBNQUdFTlRBLCBCUk9XTiwgTEdSQVksIERH UkFZLCBMQkxVRSwiLAorIiAgTEdSRUVOLCBMQ1lBTiwgTFJFRCwgTE1BR0VOVEEsIFlFTExPVyBv ciBXSElURS4iLAorIiBUaGUgTCBwcmVmaXggZm9yIHRoZSBjb2xvciBuYW1lcyBtZWFucyBMaWdo dC4iLAorIiAiLAorCisiU0VUIFRFUk1JTkFMIENPTE9SIEVSQVNFIHsgQ1VSUkVOVC1DT0xPUiwg REVGQVVMVC1DT0xPUiB9IiwKKyIgIERldGVybWluZXMgd2hldGhlciB0aGUgY3VycmVudCBjb2xv ciBhcyBzZXQgYnkgdGhlIGhvc3Qgb3IgdGhlIGRlZmF1bHQiLAorIiAgY29sb3IgYXMgc2V0IGJ5 IHRoZSB1c2VyIChTRVQgVEVSTUlOQUwgQ09MT1IgVEVSTUlOQUwpIGlzIHVzZWQgdG8gY2xlYXIi LAorIiAgdGhlIHNjcmVlbiB3aGVuIGVyYXNlIGNvbW1hbmRzIGFyZSByZWNlaXZlZCBmcm9tIHRo ZSBob3N0LiIsCisiICIsCisKKyJTRVQgVEVSTUlOQUwgQ09MT1IgUkVTRVQtT04tRVNDWzBtIHsg Q1VSUkVOVC1DT0xPUiwgREVGQVVMVC1DT0xPUiB9IiwKKyIgIERldGVybWluZXMgd2hldGhlciB0 aGUgY3VycmVudCBjb2xvciBvciB0aGUgZGVmYXVsdCBjb2xvciBpcyB1c2VkIGFmdGVyIiwKKyIg IDxFU0M+WzBtIChcInJlc2V0IGF0dHJpYnV0ZXNcIikgY29tbWFuZCBzZXF1ZW5jZSBpcyByZWNl aXZlZCBmcm9tIHRoZSIsCisiICBob3N0LiIsCisiICIsCisKKyJTRVQgVEVSTUlOQUwgQ09OVFJP TFMgeyA3LCA4IH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIFZUMjIwLzMyMCBvciBXeXNlIDM3 MCBmdW5jdGlvbiBrZXlzLCBhcnJvdyBrZXlzLCBldGMsIiwKKyIgIHRoYXQgZ2VuZXJhdGUgQU5T SS1mb3JtYXQgZXNjYXBlIHNlcXVlbmNlcyBzaG91bGQgc2VuZCA4LWJpdCBjb250cm9sIiwKKyIg IGNoYXJhY3RlcnMgb3IgNy1iaXQgZXNjYXBlIHNlcXVlbmNlcy4iLAorIiAiLAorI2VuZGlmIC8q IE9TMiAqLworCisiU0VUIFRFUk1JTkFMIENSLURJU1BMQVkgeyBDUkxGLCBOT1JNQUwgfSIsCisi ICBTcGVjaWZpZXMgaG93IGluY29taW5nIGNhcnJpYWdlIHJldHVybiBjaGFyYWN0ZXJzIGFyZSB0 byBiZSBkaXNwbGF5ZWQiLAorIiAgb24geW91ciBzY3JlZW4uIiwKKyIgIiwKKworI2lmZGVmIE9T MgorI2lmZGVmIEtVSQorIlNFVCBURVJNSU5BTCBDVVJTT1IgeyBGVUxMLCBIQUxGLCBVTkRFUkxJ TkUgfSB7T04sIE9GRiwgTk9CTElOS30iLAorIiAgU2VsZWN0cyB0aGUgY3Vyc29yIHN0eWxlIGFu ZCB2aXNpYmlsaXR5IGZvciB0aGUgdGVybWluYWwgc2NyZWVuLiIsCisjZWxzZQorIlNFVCBURVJN SU5BTCBDVVJTT1IgeyBGVUxMLCBIQUxGLCBVTkRFUkxJTkUgfSB7T04sIE9GRn0iLAorIiAgU2Vs ZWN0cyB0aGUgY3Vyc29yIHN0eWxlIGFuZCB2aXNpYmlsaXR5IGZvciB0aGUgdGVybWluYWwgc2Ny ZWVuLiIsCisjZW5kaWYgLyogS1VJICovCisiICIsCisjZW5kaWYgLyogT1MyICovCisKKyJTRVQg VEVSTUlOQUwgREVCVUcgeyBPTiwgT0ZGIH0iLAorIiAgVHVybnMgdGVybWluYWwgc2Vzc2lvbiBk ZWJ1Z2dpbmcgb24gYW5kIG9mZi4gIFdoZW4gT04sIGluY29taW5nIGNvbnRyb2wiLAorIiAgY2hh cmFjdGVycyBhcmUgZGlzcGxheWVkIHN5bWJvbGljYWxseSwgcmF0aGVyIHRoYW4gYmUgdGFrZW4g YXMgZm9ybWF0dGluZyIsCisiICBjb21tYW5kcy4gIFNFVCBURVJNSU5BTCBERUJVRyBPTiBpbXBs aWVzIFNFVCBURUxORVQgREVCVUcgT04uIiwKKyIgIiwKKyNpZmRlZiBPUzIKKyJTRVQgVEVSTUlO QUwgREctVU5JWC1NT0RFIHsgT04sIE9GRiB9IiwKKyIgIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBE YXRhIEdlbmVyYWwgZW11bGF0aW9ucyBzaG91bGQgYWNjZXB0IGNvbnRyb2wiLAorIiAgc2VxdWVu Y2VzIGluIFVuaXggY29tcGF0aWJsZSBmb3JtYXQgb3IgaW4gbmF0aXZlIERHIGZvcm1hdC4gIFRo ZSIsCisiICBkZWZhdWx0IGlzIE9GRiwgREcgZm9ybWF0LiIsCisiICIsCisjZW5kaWYgLyogT1My ICovCisKKyJTRVQgVEVSTUlOQUwgRUNITyB7IExPQ0FMLCBSRU1PVEUgfSIsCisiICBTcGVjaWZp ZXMgd2hpY2ggc2lkZSBkb2VzIHRoZSBlY2hvaW5nIGR1cmluZyB0ZXJtaW5hbCBjb25uZWN0aW9u LiIsCisiICIsCisKKyJTRVQgVEVSTUlOQUwgRVNDQVBFLUNIQVJBQ1RFUiB7IEVOQUJMRUQsIERJ U0FCTEVEIH0iLAorIiAgVHVybnMgb24vb2ZmIHRoZSBhYmlsaXR5IHRvIGVzY2FwZSBiYWNrIGZy b20gQ09OTkVDVCBtb2RlIHVzaW5nIHRoZSBTRVQiLAorI2lmZGVmIE9TMgorIiAgRVNDQVBFIGNo YXJhY3Rlci4gIElmIHlvdSBkaXNhYmxlIGl0IHlvdSBjYW4gc3RpbGwgZ2V0IGJhY2sgdXNpbmcg QWx0LWtleSIsCisiICBjb21iaW5hdGlvbnMgYXMgc2hvd24gaW4gdGhlIHN0YXR1cyBsaW5lLiAg QWxzbyBzZWUgSEVMUCBTRVQgRVNDQVBFLiIsCisjZWxzZQorIiAgRVNDQVBFIGNoYXJhY3Rlci4g IElmIHlvdSBkaXNhYmxlIGl0LCBLZXJtaXQgcmV0dXJucyB0byBpdHMgcHJvbXB0IG9ubHkiLAor IiAgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgYnkgdGhlIG90aGVyIGVuZC4gIFVTRSBX SVRIIEVYVFJFTUUgQ0FVVElPTi4iLAorIiAgQWxzbyBzZWUgSEVMUCBTRVQgRVNDQVBFLiIsCisj ZW5kaWYgLyogT1MyICovCisiICIsCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBLVUkKKyJTRVQgVEVS TUlOQUwgRk9OVCA8ZmFjZW5hbWU+IDxoZWlnaHQ+IiwKKyIgIFNwZWNpZmllcyB0aGUgZm9udCB0 byBiZSB1c2VkIGluIHRoZSBLZXJtaXQgOTUgd2luZG93LiAgVGhlIGZvbnQgaXMiLAorIiAgZGV0 ZXJtaW5lZCBieSB0aGUgY2hvaWNlIG9mIGEgZmFjZW5hbWUgYW5kIGEgaGVpZ2h0IG1lYXN1cmVk IGluIFBvaW50cy4iLAorIiAgVGhlIGF2YWlsYWJsZSBmYWNlbmFtZXMgYXJlIHRob3NlIGluc3Rh bGxlZCBpbiB0aGUgRm9udCBDb250cm9sIFBhbmVsLiIsCisiICIsCisjZWxzZSAvKiBLVUkgKi8K KyNpZmRlZiBPUzJPTkxZCisiU0VUIFRFUk1JTkFMIEZPTlQgeyBDUDQzNywgQ1A4NTAsIENQODUy LCBDUDg2MiwgQ1A4NjYsIERFRkFVTFQgfSIsCisiICBDUDQzNyAtIE9yaWdpbmFsIFBDIGNvZGUg cGFnZSIsCisiICBDUDg1MCAtIFwiTXVsdGlsaW5ndWFsXCIgKFdlc3QgRXVyb3BlKSBjb2RlIHBh Z2UiLAorIiAgQ1A4NTIgLSBFYXN0IEV1cm9wZSBSb21hbiBBbHBoYWJldCBjb2RlIHBhZ2UgKGZv ciBDemVjaCwgUG9saXNoLCBldGMpIiwKKyIgIENQODYyIC0gSGVicmV3IGNvZGUgcGFnZSIsCisi ICBDUDg2NiAtIEN5cmlsbGljIChSdXNzaWFuLCBCZWxvcnVzc2lhbiwgYW5kIFVrcmFpbmlhbikg Y29kZSBwYWdlIiwKKyIgIiwKKyIgIExvYWRzIGEgc29mdCBpbnRvIHRoZSB2aWRlbyBhZGFwdGVy IGZvciB1c2UgZHVyaW5nIHRlcm1pbmFsIGVtdWxhdGlvbi4iLAorIiAgVXNlIHRoaXMgY29tbWFu ZCB3aGVuIHlvdXIgT1MvMiBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGUgZGVzaXJlZCBjb2RlLiIs CisiICBwYWdlLiAgQ2FuIGJlIHVzZWQgb25seSBpbiBmdWxsLXNjcmVlbiBzZXNzaW9ucy4gIEFs c28gc2VlIFNFVCBURVJNSU5BTCIsCisiICBDT0RFLVBBR0UgYW5kIFNFVCBURVJNSU5BTCBSRU1P VEUtQ0hBUkFDVEVSLVNFVC4iLAorIiAiLAorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNlbmRpZiAv KiBLVUkgKi8KKworI2lmZGVmIE5UCisiU0VUIFRFUk1JTkFMIEhFSUdIVCA8bnVtYmVyPiIsCisi ICBDaGFuZ2VzIHRoZSBudW1iZXIgb2Ygcm93cyAobGluZXMpIHRvIHVzZSBkdXJpbmcgdGVybWlu YWwgZW11bGF0aW9uLCBub3QiLAorIiAgY291bnRpbmcgdGhlIHN0YXR1cyBsaW5lLiAgUmVjb21t ZW5kZWQgdmFsdWVzIGFyZSAyNCwgNDIsIGFuZCA0OSAob3IgMjUsIiwKKyIgIDQzLCBhbmQgNTAg aWYgU0VUIFRFUk1JTkFMIFNUQVRVU0xJTkUgaXMgT0ZGLikiLAorI2Vsc2UKKyJTRVQgVEVSTUlO QUwgSEVJR0hUIDxudW1iZXI+IgorIiAgQ2hhbmdlcyB0aGUgbnVtYmVyIG9mIHJvd3MgKGxpbmVz KSB0byB1c2UgZHVyaW5nIHRlcm1pbmFsIGVtdWxhdGlvbiwgbm90IiwKKyIgIGNvdW50aW5nIHRo ZSBzdGF0dXMgbGluZS4gIFdpbmRvd2VkIHNlc3Npb25zIGNhbiB1c2UgYW55IHZhbHVlIGZyb20g OCB0byIsCisiICAxMDEuICBGdWxsc2NyZWVuIHNlc3Npb25zIGFyZSBsaW1pdGVkIHRvIDI0LCA0 MiwgNDksIG9yIDU5LiAgTm90IGFsbCIKKyIgIGhlaWdodHMgYXJlIHN1cHBvcnRlZCBieSBhbGwg dmlkZW8gYWRhcHRlcnMuIiwKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgIC8qIE9TMiAqLworIlNF VCBURVJNSU5BTCBIRUlHSFQgPG51bWJlcj4iLAorIiAgVGVsbHMgQy1LZXJtaXQgaG93IG1hbnkg cm93cyAobGluZXMpIGFyZSBvbiB5b3VyIENPTk5FQ1QtbW9kZSBzY3JlZW4uIiwKKyNlbmRpZiAv KiBPUzIgKi8KKyIgIiwKKworI2lmZGVmIENLVElETEUKKyJTRVQgVEVSTUlOQUwgSURMRS1USU1F T1VUIDxudW1iZXI+IiwKKyIgIFNldHMgdGhlIGxpbWl0IG9uIGlkbGUgdGltZSBpbiBDT05ORUNU IG1vZGUgdG8gdGhlIGdpdmVuIG51bWJlciBvZiIsCisiICBzZWNvbmRzLiAgMCAodGhlIGRlZmF1 bHQpIG1lYW5zIG5vIGxpbWl0LiIsCisiICIsCisiU0VUIFRFUk1JTkFMIElETEUtQUNUSU9OIHsg RVhJVCwgSEFOR1VQLCBPVVRQVVQgWyB0ZXh0IF0sIFJFVFVSTiB9IiwKKyIgIFNwZWNpZmllcyB0 aGUgYWN0aW9uIHRvIGJlIHRha2VuIHdoZW4gYSBDT05ORUNUIHNlc3Npb24gaXMgaWRsZSBmb3Ig dGhlIiwKKyIgIG51bWJlciBvZiBzZWNvbmRzIGdpdmVuIGJ5IFNFVCBURVJNSU5BTCBJRExFLVRJ TUVPVVQuICBUaGUgZGVmYXVsdCBhY3Rpb24iLAorIiAgaXMgdG8gUkVUVVJOIHRvIGNvbW1hbmQg bW9kZS4gIEVYSVQgZXhpdHMgZnJvbSBLZXJtaXQ7IEhBTkdVUCBoYW5ncyB1cCB0aGUiLAorIiAg Y29ubmVjdGlvbiwgYW5kIE9VVFBVVCBzZW5kcyB0aGUgZ2l2ZW4gdGV4dCB0byB0aGUgaG9zdCB3 aXRob3V0IGxlYXZpbmciLAorIiAgQ09OTkVDVCBtb2RlOyBpZiBubyB0ZXh0IGlzIGdpdmVuIGEg TlVMICgwKSBjaGFyYWN0ZXIgaXMgc2VudC4iLAorI2lmZGVmIFROQ09ERQorIiAiLAorIlNFVCBU RVJNSU5BTCBJRExFLUFDVElPTiB7IFRFTE5FVC1OT1AsIFRFTE5FVC1BWVQgfSIsCisiICBGb3Ig VEVMTkVUIGNvbm5lY3Rpb25zIG9ubHk6IFNlbmRzIHRoZSBpbmRpY2F0ZWQgVGVsbmV0IHByb3Rv Y29sIG1lc3NhZ2U6IiwKKyIgIE5vIE9wZXJhdGlvbiAoTk9QKSBvciBcIkFyZSBZb3UgVGhlcmU/ XCIgKEFZVCkuIiwKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyIgIiwKKyNlbmRpZiAvKiBDS1RJRExF ICovCisKKyNpZmRlZiBPUzIKKworIlNFVCBURVJNSU5BTCBLREItRk9MTE9XUy1HTC9HUiB7IE9O LCBPRkYgfSIsCisiIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUga2V5Ym9hcmQgY2hhcmFj dGVyIHNldCBzaG91bGQgZm9sbG93IHRoZSIsCisiICBhY3RpdmUgR0wgYW5kIEdSIGNoYXJhY3Rl ciBzZXRzLiAgVGhpcyBmZWF0dXJlIGlzIE9GRiBieSBkZWZhdWx0IGFuZCIsCisiICBzaG91bGQg bm90IGJlIHVzZWQgdW5sZXNzIGl0IGlzIHNwZWNpZmljbHkgcmVxdWlyZWQgYnkgdGhlIGhvc3Qi LAorIiAgYXBwbGljYXRpb24uIiwKKyIgIiwKKworIlNFVCBURVJNSU5BTCBLRVkgPG1vZGU+IC9M SVRFUkFMIDxrZXljb2RlPiA8dGV4dD4iLAorIlNFVCBURVJNSU5BTCBLRVkgPG1vZGU+IERFRkFV TFQiLAorIlNFVCBURVJNSU5BTCBLRVkgPG1vZGU+IENMRUFSIiwKKyIgIENvbmZpZ3VyZXMgdGhl IGtleSB3aG9zZSA8a2V5Y29kZT4gaXMgZ2l2ZW4gdG8gc2VuZCB0aGUgZ2l2ZW4gdGV4dCB3aGVu IiwKKyIgIHByZXNzZWQgd2hpbGUgPG1vZGU+IGlzIGFjdGl2ZS4gIDxtb2RlPiBtYXkgYmUgYW55 IG9mIHRoZSB2YWxpZCB0ZXJtaW5hbCIsCisiICB0eXBlcyBvciB0aGUgc3BlY2lhbCBtb2RlcyBc IkVNQUNTXCIsIFwiSEVCUkVXXCIgb3IgXCJSVVNTSUFOXCIuICBERUZBVUxUIiwKKyIgIHJlc3Rv cmVzIGFsbCBkZWZhdWx0IGtleSBtYXBwaW5ncyBmb3IgdGhlIHNwZWNpZmllZCBtb2RlLiAgQ0xF QVIgZXJhc2VzIiwKKyIgIGFsbCB0aGUga2V5IG1hcHBpbmdzLiAgSWYgdGhlcmUgaXMgbm8gdGV4 dCwgdGhlIGRlZmF1bHQga2V5IGJpbmRpbmcgaXMiLAorI2lmbmRlZiBOT0NTRVRTCisiICByZXN0 b3JlZCBmb3IgdGhlIGtleSBrLiAgU0VUIFRFUk1JTkFMIEtFWSBtYXBwaW5ncyB0YWtlIHBsYWNl IGJlZm9yZSIsCisiICB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uLiAgU0VUIEtF WSBtYXBwaW5ncyB0YWtlIHByZWNlZGVuY2Ugb3ZlciIsCisiICBTRVQgVEVSTUlOQUwgS0VZIDx0 ZXJtaW5hbCB0eXBlPiBzZXR0aW5ncy4iLAorI2Vsc2UKKyIgIHJlc3RvcmVkIGZvciB0aGUga2V5 LiAgU0VUIEtFWSBtYXBwaW5ncyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBTRVQgVEVSTUlOQUwiLAor IiAgS0VZIDx0ZXJtaW5hbCB0eXBlPiBzZXR0aW5ncy4iLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8K KyIgIFRoZSAvTElURVJBTCBzd2l0Y2ggbWF5IGJlIHVzZWQgdG8gaW5zdHJ1Y3QgS2VybWl0IHRv IGlnbm9yZSBjaGFyYWN0ZXItc2V0IiwKKyIgIHRyYW5zbGF0aW9ucyB3aGVuIHNlbmRpbmcgdGhp cyBkZWZpbml0aW9uIHRvIHRoZSBob3N0LiIsCisiICIsCisiICBUaGUgdGV4dCBtYXkgY29udGFp biBcIlxcS3ZlcmJzXCIgdG8gZGVub3RlIGFjdGlvbnMsIHRvIHN0YW5kIGZvciBERUMiLAorIiAg a2V5cGFkLCBmdW5jdGlvbiwgb3IgZWRpdGluZyBrZXlzLCBldGMuICBGb3IgYSBsaXN0IG9mIGF2 YWlsYWJsZSBrZXlib2FyZCIsCisiICB2ZXJicywgdHlwZSBTSE9XIEtWRVJCUy4iLAorIiAiLAor IiAgVG8gZmluZCBvdXQgdGhlIGtleWNvZGUgYW5kIG1hcHBpbmcgZm9yIGEgcGFydGljdWxhciBr ZXksIHVzZSB0aGUgU0hPVyIsCisiICBLRVkgY29tbWFuZC4gIFVzZSB0aGUgU0FWRSBLRVlTIGNv bW1hbmQgdG8gc2F2ZSBhbGwgc2V0dGluZ3MgdG8gYSBmaWxlLiIsCisiICIsCisiU0VUIFRFUk1J TkFMIEtFWUJPQVJELU1PREUgeyBOT1JNQUwsIEVNQUNTLCBSVVNTSUFOLCBIRUJSRVcgfSIsCisi ICBTZWxlY3QgYSBzcGVjaWFsIGtleWJvYXJkIG1vZGUgZm9yIHVzZSBpbiB0aGUgdGVybWluYWwg c2NyZWVuLiIsCisiICIsCisKKyJTRVQgVEVSTUlOQUwgS0VZUEFELU1PREUgeyBBUFBMSUNBVElP TiwgTlVNRVJJQyB9IiwKKyIgIFNwZWNpZmllcyB0aGUgXCJtb2RlXCIgb2YgdGhlIG51bWVyaWMg a2V5cGFkIGZvciBWVCB0ZXJtaW5hbCBlbXVsYXRpb24uIiwKKyIgIFVzZSB0aGlzIGNvbW1hbmQg aW4gY2FzZSB0aGUgaG9zdCBvciBhcHBsaWNhdGlvbiB3YW50cyB0aGUga2V5cGFkIHRvIGJlIiwK KyIgIGluIGEgZGlmZmVyZW50IG1vZGUgdGhhbiBpdCdzIGluLCBidXQgZGlkIG5vdCBzZW5kIHRo ZSBlc2NhcGUgc2VxdWVuY2UiLAorIiAgdG8gcHV0IGl0IGluIHRoZSBuZWVkZWQgbW9kZS4iLAor IiAiLAorCisjZW5kaWYJLyogT1MyICovCisKKyJTRVQgVEVSTUlOQUwgTEYtRElTUExBWSB7IENS TEYsIE5PUk1BTCB9IiwKKyIgIFNwZWNpZmllcyBob3cgaW5jb21pbmcgbGluZWZlZWQgY2hhcmFj dGVycyBhcmUgdG8gYmUgZGlzcGxheWVkIiwKKyIgIG9uIHlvdXIgc2NyZWVuLiIsCisiICIsCisK KyNpZmRlZiBPUzIKKworI2lmZGVmIEtVSQorIlNFVCBURVJNSU5BTCBMSU5FLVNQQUNJTkcgPGZs b2F0PiIsCisiICBTcGVjaWZpZXMgdGhlIGxpbmUgc3BhY2luZyB1c2VkIHdoZW4gZGlzcGxheWlu ZyB0ZXh0LiAgVGhlIGRlZmF1bHQgaXMgMS4wLiIsCisiICBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJv bSAxLjAgdG8gMy4wIGluY2x1c2l2ZS4iLAorIiAiLAorI2VuZGlmIC8qIEtVSSAqLworI2VuZGlm IC8qIE9TMiAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyNpZmRlZiBPUzIKKyJTRVQgVEVSTUlOQUwg TE9DQUwtQ0hBUkFDVEVSLVNFVCA8bG9jYWwtY3M+IiwKKyIgIFNwZWNpZmllcyB0aGUgY2hhcmFj dGVyIHNldCB1c2VkIGJ5IEstOTUgbG9jYWxseS4gIElmIHlvdSBkb24ndCBzcGVjaWZ5IiwKKyNp ZmRlZiBPUzJPTkxZCisiICB0aGUgbG9jYWwgY2hhcmFjdGVyLXNldCwgdGhlIGN1cnJlbnQgVEVS TUlOQUwgRk9OVCBpcyB1c2VkIGlmIHlvdSBoYXZlIiwKKyIgIGdpdmVuIGEgU0VUIFRFUk1JTkFM IEZPTlQgY29tbWFuZDsgb3RoZXJ3aXNlIHRoZSBjdXJyZW50IGNvZGVwYWdlIGlzIHVzZWQuIiwK KyNlbHNlCisiICB0aGUgbG9jYWwgY2hhcmFjdGVyLXNldCwgdGhlIGN1cnJlbnQgY29kZSBwYWdl IGlzIHVzZWQuIiwKKyNlbmRpZiAvKiBPUzJPTkxZICovCisiICIsCisiICBXaGVuIHRoZSBsb2Nh bCBhbmQgcmVtb3RlIGNoYXJhY3RlciBzZXRzIGRpZmZlciwgS2VybWl0IHRyYW5zbGF0ZXMgYmV0 d2VlbiIsCisiICB0aGVtIGR1cmluZyBDT05ORUNULiAgQnkgZGVmYXVsdCwgdGhlIHJlbW90ZSBj aGFyYWN0ZXIgc2V0IGlzIExhdGluMSBhbmQiLAorIiAgdGhlIGxvY2FsIG9uZSBpcyB5b3VyIGN1 cnJlbnQgY29kZSBwYWdlLiIsCisjaWZkZWYgTlQKKyIgIiwKKyIgIEluIFdpbmRvd3MgTlQsIFVu aWNvZGUgaXMgdXNlZCBhcyB0aGUgbG9jYWwgY2hhcmFjdGVyLXNldCByZWdhcmRsZXNzIG9mIiwK KyIgIHRoaXMgc2V0dGluZy4iLAorI2VuZGlmIC8qIE5UICovCisiICIsCisiU2VlIGFsc28gU0VU IFRFUk1JTkFMIFJFTU9URS1DSEFSQUNURVItU0VUIiwKKyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZmRlZiBPUzIKKyJTRVQgVEVSTUlOQUwgTE9DS0lO Ry1TSElGVCB7IE9GRiwgT04gfSIsCisiICBUZWxscyB3aGV0aGVyIHRvIHNlbmQgU2hpZnQtSW4v U2hpZnQtT3V0IChDdHJsLU8gYW5kIEN0cmwtTikgdG8gc3dpdGNoIiwKKyIgIGJldHdlZW4gNy1i aXQgYW5kIDgtYml0IGNoYXJhY3RlcnMgc2VudCBkdXJpbmcgdGVybWluYWwgZW11bGF0aW9uIG92 ZXIiLAorIiAgNy1iaXQgY29ubmVjdGlvbnMuICBPRkYgYnkgZGVmYXVsdC4iLAorI2Vsc2UKKyJT RVQgVEVSTUlOQUwgTE9DS0lORy1TSElGVCB7IE9GRiwgT04gfSIsCisiICBUZWxscyBLZXJtaXQg d2hldGhlciB0byB1c2UgU2hpZnQtSW4vU2hpZnQtT3V0IChDdHJsLU8gYW5kIEN0cmwtTikgdG8i LAorIiAgc3dpdGNoIGJldHdlZW4gNy1iaXQgYW5kIDgtYml0IGNoYXJhY3RlcnMgZHVyaW5nIENP Tk5FQ1QuICBPRkYgYnkgZGVmYXVsdC4iLAorI2VuZGlmIC8qIE9TMiAqLworIiAiLAorCisjaWZk ZWYgT1MyCisiU0VUIFRFUk1JTkFMIE1BUkdJTi1CRUxMIHsgT04gW2NvbHVtbl0sIE9GRiB9IiwK KyIgIERldGVybWluZXMgd2hldGhlciB0aGUgbWFyZ2luLWJlbGwgaXMgYWN0aXZhdGVkIGFuZCB3 aGF0IGNvbHVtbiBpdCBzaG91bGQiLAorIiAgcmluZyBhdC4gIE9GRiBieSBkZWZhdWx0LiIsCisi ICIsCisjZW5kaWYgLyogT1MyICovCisKKyJTRVQgVEVSTUlOQUwgTkVXTElORS1NT0RFIHsgT0ZG LCBPTiB9IiwKKyIgIFRlbGxzIHdoZXRoZXIgdG8gc2VuZCBDUkxGIChDYXJyaWFnZSBSZXR1cm4g YW5kIExpbmUgRmVlZCkgd2hlbiB5b3UgdHlwZSIsCisiICBDUiAocHJlc3MgdGhlIFJldHVybiBv ciBFbnRlciBrZXkpIGluIENPTk5FQ1QgbW9kZS4iLAorIiAiLAorCisjaWZkZWYgT1MyCisiU0VU IFRFUk1JTkFMIE9VVFBVVC1QQUNJTkcgPG1pbGxpc2Vjb25kcz4iLAorIiAgVGVsbHMgaG93IGxv bmcgdG8gcGF1c2UgYmV0d2VlbiBzZW5kaW5nIGVhY2ggY2hhcmFjdGVyIHRvIHRoZSBob3N0IGR1 cmluZyIsCisiICBDT05ORUNUIG1vZGUuICBOb3JtYWxseSBub3QgbmVlZGVkIGJ1dCBzb21ldGlt ZXMgcmVxdWlyZWQgdG8gd29yayBhcm91bmQiLAorIiAgVFJBTlNNSVNTSU9OIEJMT0NLRUQgY29u ZGl0aW9ucyB3aGVuIHBhc3RpbmcgaW50byB0aGUgdGVybWluYWwgd2luZG93LiIsCisiICIsCisK KyNpZmRlZiBQQ1RFUk0KKyJTRVQgVEVSTUlOQUwgUENURVJNIHsgT04sIE9GRiB9IiwKKyIgIEFj dGl2YXRlcyBvciBkZWFjdGl2YXRlcyB0aGUgUENURVJNIHRlcm1pbmFsIGVtdWxhdGlvbiBrZXli b2FyZCBtb2RlLiIsCisiICBXaGVuIFBDVEVSTSBpcyBPTiBhbGwga2V5c3Ryb2tlcyBpbiB0aGUg dGVybWluYWwgc2NyZWVuIGFyZSBzZW50IHRvIHRoZSIsCisiICBob3N0IGFzIG1ha2UvYnJlYWsg KGRvd24vdXApIGNvZGVzIGluc3RlYWQgb2YgYXMgY2hhcmFjdGVycyBmcm9tIHRoZSIsCisiICBS RU1PVEUtQ0hBUkFDVEVSLVNFVCwgYW5kIGFsbCBrZXlib2FyZCBtYXBwaW5ncywgaW5jbHVkaW5n IEt2ZXJicyBhbmQgdGhlIiwKKyIgIGVzY2FwZSBjaGFyYWN0ZXIgYXJlIGRpc2FibGVkLiAgVG8g dHVybiBvZmYgUENURVJNIGtleWJvYXJkIG1vZGUgd2hpbGUgaW4iLAorIiAgQ09OTkVDVCBtb2Rl IHByZXNzIENvbnRyb2wtQ2Fwc0xvY2suICBQQ1RFUk0gaXMgT0ZGIGJ5IGRlZmF1bHQuIiwKKyIg IiwKKyNlbmRpZiAvKiBQQ1RFUk0gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE9TMgor IlNFVCBURVJNSU5BTCBQUklOVCB7IEFVVE8sIENPUFksIE9GRiwgVVNFUiB9IiwKKyIgIEFsbG93 cyBzZWxlY3RpdmUgY29udHJvbCBvZiB2YXJpb3VzIHR5cGVzIG9mIHByaW50aW5nIGZyb20gdGhl IFRlcm1pbmFsIiwKKyIgIHNlc3Npb24uICBBVVRPIHByaW50cyBhIGxpbmUgb2YgdGV4dCBmcm9t IHRoZSB0ZXJtaW5hbCBzY3JlZW4gd2hlbmV2ZXIiLAorIiAgdGhlIGN1cnNvciBpcyBtb3ZlZCBv ZmYgdGhlIGxpbmUuICBDT1BZIHByaW50cyBldmVyeSBieXRlIHJlY2VpdmVkIGFzIiwKKyIgIGl0 IGlzIHJlY2VpdmVkIHdpdGhvdXQgaW50ZXJwcmV0YXRpb24uICBVU0VSIHByaW50cyBldmVyeSBi eXRlIGFmdGVyIiwKKyIgIGludGVycHJldGF0aW9uIGJ5IHRoZSB0ZXJtaW5hbCBlbXVsYXRvciB0 cmFuc2xhdGVzIGNoYXJhY3Rlci1zZXRzIGFuZCIsCisiICBjb25zdHJ1Y3QgZXNjYXBlIHNlcXVl bmNlcywgLi4uICBUaGUgZGVmYXVsdCBpcyBPRkYuIiwKKyIgIiwKKyNlbHNlCisjaWZkZWYgWFBS SU5UCisiU0VUIFRFUk1JTkFMIFBSSU5UIHsgT04sIE9GRiB9IiwKKyIgIEVuYWJsZXMgYW5kIGRp c2FibGVzIGhvc3QtaW5pdGlhdGVkIHRyYW5zcGFyZW50IHByaW50aW5nIGluIENPTk5FQ1QgbW9k ZS4iLAorIiAiLAorI2VuZGlmIC8qIFhQUklOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZk ZWYgT1MyCisjaWZuZGVmIE5PQ1NFVFMKKyJTRVQgVEVSTUlOQUwgUkVNT1RFLUNIQVJBQ1RFUi1T RVQgPHJlbW90ZS1jcz4gWyB7IEcwLEcxLEcyLEczIH0uLi4gXSIsCisiICBTcGVjaWZpZXMgdGhl IGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgcmVtb3RlIGhvc3QsIDxyZW1vdGUtY3M+LiIsCisi ICBXaGVuIHRoZSBsb2NhbCBhbmQgcmVtb3RlIGNoYXJhY3RlciBzZXRzIGRpZmZlciwgS2VybWl0 IHRyYW5zbGF0ZXMiLAorIiAgYmV0d2VlbiB0aGVtIGR1cmluZyBDT05ORUNULiAgQnkgZGVmYXVs dCwgdGhlIHJlbW90ZSBjaGFyYWN0ZXIgc2V0IGlzIiwKKyIgIExhdGluMSBhbmQgdGhlIGxvY2Fs IG9uZSBpcyB5b3VyIGN1cnJlbnQgY29kZSBwYWdlLiAgT3B0aW9uYWxseSwgeW91IGNhbiIsCisi ICBhbHNvIGRlc2lnbmF0ZSB0aGUgY2hhcmFjdGVyIHNldCB0byB0aGUgRzAuLkczIGdyYXBoaWMg dGFibGVzLiIsCisiICIsCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2VuZGlmIC8qIE9TMiAqLwor CisjaWZkZWYgT1MyCisiU0VUIFRFUk1JTkFMIFJPTEwtTU9ERSB7IElOU0VSVCwgT1ZFUldSSVRF LCBLRVlTVFJPS0VTIFsgb3B0aW9uIF0gfSIsCisiICBUZWxscyB3aGV0aGVyIG5ldyBkYXRhIHdo ZW4gcmVjZWl2ZWQgZnJvbSB0aGUgaG9zdCBpcyBlbnRlcmVkIGludG8gdGhlIiwKKyIgIHNjcm9s bGJhY2sgYnVmZmVyIGF0IHRoZSBjdXJyZW50IHJvbGxiYWNrIHBvc2l0aW9uIChPVkVSV1JJVEUp IG9yIGF0IHRoZSIsCisiICBlbmQgb2YgdGhlIGJ1ZmZlciAoSU5TRVJUKS4gIFRoZSBkZWZhdWx0 IGlzIElOU0VSVC4gIFR5cGluZyBpcyBhbGxvd2VkIiwKKyIgIGR1cmluZyByb2xsYmFja3MgaW4g ZWl0aGVyIG1vZGUsIGFjY29yZGluZyB0byBTRVQgVEVSTSBST0xMIEtFWVNUUk9LRVM6IiwKKyIg IFNFTkQgKHRoZSBkZWZhdWx0KSBtZWFucyB0byBwcm9jZXNzIGtleXN0cm9rZXMgbm9ybWFsbHk7 IElHTk9SRSBtZWFucyB0byIsCisiICBpZ25vcmUgdGhlbSB3aGVuIHRoZSBzY3JlZW4gaXMgc2Ny b2xsZWQgYmFjazsgUkVTVE9SRS1BTkQtU0VORCBpcyBsaWtlIiwKKyIgIFNFTkQgYnV0IHJlc3Rv cmVzIHRoZSBzY3JlZW4gdG8gaXRzIGFjdGl2ZSBwb3NpdGlvbiBmaXJzdC4iLAorIiAiLAorCisi U0VUIFRFUk1JTkFMIFNDUkVFTi1NT0RFIHsgTk9STUFMLCBSRVZFUlNFIH0iLAorIiAgV2hlbiBz ZXQgdG8gUkVWRVJTRSB0aGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgYXJlIHN3 YXBwZWQgYXMiLAorIiAgd2VsbCBhcyB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGZvcmVncm91bmQg YW5kIGJhY2tncm91bmQgaW50ZW5zaXR5IGJpdHMuIiwKKyIgIFRoZSBkZWZhdWx0IGlzIE5PUk1B TC4iLAorIiAiLAorCisiU0VUIFRFUk1JTkFMIFNDUkVFTi1PUFRJTUlaRSB7IE9OLCBPRkYgfSIs CisiICBXaGVuIHNldCB0byBPTiwgdGhlIGRlZmF1bHQsIEtlcm1pdCBvbmx5IHBhaW50cyB0aGUg c2NyZWVuIHdpdGggY2hhcmFjdGVycyIsCisiICB0aGF0IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUg bGFzdCBzY3JlZW4gcGFpbnQuICBXaGVuIE9GRiwgdGhlIHNjcmVlbiBpcyIsCisiICBjb21wbGV0 ZWx5IHJlcGFpbnRlZCBlYWNoIHRpbWUgdGhlcmUgaXMgYSBjaGFuZ2UuIiwKKyIgIiwKKworIlNF VCBURVJNSU5BTCBTQ1JFRU4tVVBEQVRFIHsgRkFTVCwgU01PT1RIIH0gWyA8bWlsbGlzZWNvbmRz PiBdIiwKKyIgIENob29zZXMgdGhlIG1lY2hhbmlzbSB1c2VkIGZvciBzY3JlZW4gdXBkYXRpbmcg YW5kIHRoZSB1cGRhdGUgZnJlcXVlbmN5LiIsCisiICBEZWZhdWx0cyBhcmUgRkFTVCBzY3JvbGxp bmcgd2l0aCB1cGRhdGVzIGV2ZXJ5IDEwMCBtaWxsaXNlY29uZHMuIiwKKyIgIiwKKworIlNFVCBU RVJNSU5BTCBTQ1JPTExCQUNLIDxsaW5lcz4iLAorIiAgU2V0cyBzaXplIG9mIENPTk5FQ1Qgdmly dHVhbCBzY3JlZW4gYnVmZmVyLiAgPGxpbmVzPiBpbmNsdWRlcyB0aGUgYWN0aXZlIiwKKyIgIHRl cm1pbmFsIHNjcmVlbi4gIFRoZSBtaW5pbXVtIGlzIDI1Ni4gIFRoZSBtYXhpbXVtIGlzIDIgbWls bGlvbi4gIFRoZSIsCisiICBkZWZhdWx0IGlzIDIwMDAuIiwKKyIgIiwKKworIlNFVCBURVJNSU5B TCBTRU5ELURBVEEgeyBPTiwgT0ZGIH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0aGVyIEFTQ0lJIGVt dWxhdGlvbnMgc3VjaCBhcyBXWVNFIDMwLDUwLDYwIG9yIFRWSSA5MTArLDkyNSwiLAorIiAgOTUw IG1heSBzZW5kIHRoZWlyIHNjcmVlbiBjb250ZW50cyB0byB0aGUgaG9zdCB1cG9uIHJlcXVlc3Qu ICBBbGxvd2luZyB0aGUiLAorIiAgc2NyZWVuIHRvIGJlIHJlYWQgYnkgdGhlIGhvc3QgaXMgYSBz aWduaWZpY2FudCBzZWN1cml0eSByaXNrLiAgVGhlIGRlZmF1bHQiLAorIiAgaXMgT0ZGIGFuZCBz aG91bGQgb25seSBiZSBjaGFuZ2VkIGFmdGVyIGEgc2VjdXJpdHkgZXZhbHVhdGlvbiBvZiBob3N0 IiwKKyIgIGVudmlyb25tZW50LiIsCisiICIsCisKKyJTRVQgVEVSTUlOQUwgU0VORC1FTkQtT0Yt QkxPQ0sgeyBDUkxGX0VUWCwgVVNfQ1IgfSIsCisiICBEZXRlcm1pbmVzIHdoaWNoIHNldCBvZiBj aGFyYWN0ZXJzIHNob3VsZCBiZSB1c2VkIGFzIGVuZCBvZiBsaW5lIGFuZCBlbmQiLAorIiAgb2Yg dHJhbnNtaXNzaW9uIGluZGljYXRvcnMgd2hlbiBzZW5kaW5nIHNjcmVlbiBkYXRhIHRvIHRoZSBo b3N0IiwKKyIgIiwKKworIlNFVCBURVJNSU5BTCBTR1ItQ09MT1JTIHsgT04sIE9GRiB9IiwKKyIg IE9OIChkZWZhdWx0KSBtZWFucyBhbGxvdyBob3N0IGNvbnRyb2wgb2YgY29sb3JzOyBPRkYgbWVh bnMgaWdub3JlIGhvc3QiLAorIiAgZXNjYXBlIHNlcXVlbmNlcyB0byBzZXQgY29sb3IuIiwKKyIg IiwKKworIlNFVCBURVJNSU5BTCBTTkktQ0guQ09ERSB7IE9OLCBPRkYgfSIsCisiICBUaGlzIGNv bW1hbmQgY29udHJvbHMgdGhlIHN0YXRlIG9mIHRoZSBDSC5DT0RFIGtleS4gIEl0IGlzIHRoZSBl cXVpdmFsZW50IiwKKyIgIHRvIHRoZSBTTklfQ0hfQ09ERSBLZXlib2FyZCB2ZXJiLiAgVGhlIFNO SSB0ZXJtaW5hbCB1c2VzIENILkNPREUgdG8iLAorIiAgZWFzaWx5IHN3aXRjaCBiZXR3ZWVuIHRo ZSBOYXRpb25hbCBMYW5ndWFnZSBjaGFyYWN0ZXIgc2V0IGFuZCBVLlMuIEFTQ0lJLiIsCisiICBU aGUgZGVmYXVsdCBpcyBPTiB3aGljaCBtZWFucyB0byBkaXNwbGF5IGNoYXJhY3RlcnMgYXMgVS5T LiBBU0NJSS4gIFdoZW4iLAorIiAgT0ZGIHRoZSBsYW51YWdlIHNwZWNpZmllZCBieSBTRVQgVEVS TUlOQUwgU05JLUxBTlVBR0UgaXMgdXNlZCB0byBkaXNwbGF5IiwKKyIgIGNoYXJhY3RlcnMgd2hl biA3LWJpdCBjaGFyYWN0ZXIgc2V0cyBhcmUgaW4gdXNlLiIsCisiICIsCisiU0VUIFRFUk1JTkFM IFNOSS1GSVJNV0FSRS1WRVJTSU9OUyA8a2JkLXZlcnNpb24+IDx0ZXJtaW5hbC12ZXJzaW9uPiIs CisiICBTcGVjaWZpZXMgdGhlIEZpcm13YXJlIFZlcnNpb24gbnVtYmVyIHRoYXQgc2hvdWxkIGJl IHJlcG9ydGVkIHRvIHRoZSBob3N0IiwKKyIgIHdoZW4gdGhlIHRlcm1pbmFsIGlzIHF1ZXJpZWQu ICBUaGUgZGVmYXVsdCBpcyA5MjAwMzEgZm9yIHRoZSBrZXlib2FyZCIsCisiICBhbmQgODMwODUx IGZvciB0aGUgdGVybWluYWwuIiwKKyIgIiwKKyJTRVQgVEVSTUlOQUwgU05JLUxBTkdVQUdFIDxu YXRpb25hbC1sYW5ndWFnZT4iLAorIiAgQW4gYWxpYXMgZm9yIFNFVCBURVJNSU5BTCBWVC1MQU5V QUdFLCB0aGlzIGNvbW1hbmQgc3BlY2lmaWVzIHRoZSBuYXRpb25hbCIsCisiICBsYW5ndWFnZSBj aGFyYWN0ZXItc2V0IHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgTlJDIG1vZGUgaXMgYWN0 aXZhdGVkIiwKKyIgIGZvciBWVCBlbXVsYXRpb25zIG9yIHdoZW4gQ0guQ09ERSBpcyBPRkYgZm9y IFNOSSBlbXVsYXRpb25zLiAgVGhlIGRlZmF1bHQiLAorIiAgbGFuZ3VhZ2UgZm9yIFNFVCBURVJN SU5BTCBUWVBFIFNOSS05NzgwMSBpcyBcIkdlcm1hblwiLiIsCisiICIsCisiU0VUIFRFUk1JTkFM IFNOSS1QQUdFTU9ERSB7IE9OLCBPRkYgfSIsCisiICBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90 IHBhZ2UgbW9kZSBpcyBhY3RpdmUuICBPRkYgYnkgZGVmYXVsdC4iLAorIiAiLAorIlNFVCBURVJN SU5BTCBTTkktU0NST0xMTU9ERSB7IE9OLCBPRkYgfSIsCisiICBEZXRlcm1pbmVzIHdoZXRoZXIg b3Igbm90IHNjcm9sbCBtb2RlIGlzIGFjdGl2ZS4gIE9GRiBieSBkZWZhdWx0LiIsCisiICIsCisi U0VUIFRFUk1JTkFMIFNUQVRVU0xJTkUgeyBPTiwgT0ZGIH0iLAorIiAgT04gKGRlZmF1bHQpIGVu YWJsZXMgdGhlIEtlcm1pdCBzdGF0dXMgbGluZSBpbiB0aGUgdGVybWluYWwgc2NyZWVuLiIsCisi ICBPRkYgcmVtb3ZlcyBpdCwgbWFraW5nIHRoZSBsaW5lIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRo ZSBob3N0LiIsCisiICIsCisKKyJTRVQgVEVSTUlOQUwgVFJBTlNNSVQtVElNRU9VVCA8c2Vjb25k cz4iLAorIiAgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIEstOTUgd2FpdHMg YmVmb3JlIHJldHVybmluZyB0byB0aGUiLAorIiAgcHJvbXB0IGlmIHlvdXIga2V5c3Ryb2tlcyBj YW4ndCBiZSB0cmFuc21pdHRlZCBmb3Igc29tZSByZWFzb24sIHN1Y2ggYXMgYSIsCisiICBmbG93 LWNvbnRyb2wgZGVhZGxvY2suIiwKKyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENL X1RSSUdHRVIKKyJTRVQgVEVSTUlOQUwgVFJJR0dFUiA8c3RyaW5nPiIsCisiICBTcGVjaWZpZXMg YSBzdHJpbmcgdGhhdCwgd2hlbiBkZXRlY3RlZCBkdXJpbmcgYW55IHN1YnNlcXVlbnQgQ09OTkVD VCIsCisiICBzZXNzaW9uLCBpcyB0byBjYXVzZSBhdXRvbWF0aWMgcmV0dXJuIHRvIGNvbW1hbmQg bW9kZS4gIEdpdmUgdGhpcyBjb21tYW5kIiwKKyIgIHdpdGhvdXQgYSBzdHJpbmcgdG8gY2FuY2Vs IHRoZSBjdXJyZW50IHRyaWdnZXIuICBTZWUgSEVMUCBDT05ORUNUIGZvciIsCisiICBhZGRpdGlv bmFsIGluZm9ybWF0aW9uLiIsCisiICIsCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCisjaWZk ZWYgT1MyCisiU0VUIFRFUk1JTkFMIFVSTC1ISUdITElHSFQgeyBPTiA8YXR0cmlidXRlPiwgT0ZG IH0iLAorIiAgU3BlY2lmaWVzIHdoZXRoZXIgSy05NSBzaG91bGQgaGlnaGxpZ2h0IFVSTHMgYW5k IHdoaWNoIHNjcmVlbiBhdHRyaWJ1dGUiLAorIiAgc2hvdWxkIGJlIHVzZWQuICBUaGUgc2NyZWVu IGF0dHJpYnV0ZXMgY2FuIGJlIG9uZSBvZiBOT1JNQUwsIEJMSU5LLCBCT0xELCIsCisiICBESU0s IElOVklTSUJMRSwgUkVWRVJTRSwgb3IgVU5ERVJMSU5FLiAgVGhlIGRlZmF1bHQgaXMgT04gdXNp bmcgdGhlIiwKKyIgIEJPTEQgc2NyZWVuIGF0dHJpYnV0ZS4iLAorIiAiLAorIlNFVCBURVJNSU5B TCBWSURFTy1DSEFOR0UgeyBESVNBQkxFRCwgRU5BQkxFRCB9IiwKKyIgIFNwZWNpZmllcyB3aGV0 aGVyIEstOTUgc2hvdWxkIGNoYW5nZSB2aWRlbyBtb2RlcyBhdXRvbWF0aWNhbGx5IGluIHJlc3Bv bnNlIiwKKyNpZmRlZiBOVAorIiAgdG8gZXNjYXBlIHNlcXVlbmNlcyBmcm9tIHRoZSBvdGhlciBj b21wdXRlci4gIEVOQUJMRUQgYnkgZGVmYXVsdCAoZXhjZXB0IiwKKyIgIG9uIFdpbmRvd3MgOTUp LiIsCisjZWxzZSAvKiBOVCAqLworIiAgdG8gZXNjYXBlIHNlcXVlbmNlcyBmcm9tIHRoZSBvdGhl ciBjb21wdXRlci4gIEVOQUJMRUQgYnkgZGVmYXVsdC4iLAorI2VuZGlmIC8qIE5UICovCisiICIs CisKKyJTRVQgVEVSTUlOQUwgVlQtTEFOR1VBR0UgPGxhbmd1YWdlPiIsCisiICBTcGVjaWZpZXMg dGhlIE5hdGlvbmFsIFJlcGxhY2VtZW50IENoYXJhY3RlciBTZXQgKE5SQykgdG8gYmUgdXNlZCB3 aGVuIiwKKyIgIE5SQyBtb2RlIGlzIGFjdGl2YXRlZC4gIFRoZSBkZWZhdWx0IGlzIFwiTm9ydGgg QW1lcmljYW5cIi4iLAorIiAiLAorIlNFVCBURVJNSU5BTCBWVC1OUkMtTU9ERSB7IE9OLCBPRkYg fSIsCisiICBPRkYgKGRlZmF1bHQpIGNob29zZXMgVlQgbXVsdGluYXRpb25hbCBDaGFyYWN0ZXIg U2V0IG1vZGUuICBPRkYgY2hvb3NlcyIsCisiICBWVCBOYXRpb25hbCBSZXBsYWNlbWVudCBDaGFy YWN0ZXItc2V0IG1vZGUuICBUaGUgTlJDIGlzIHNlbGVjdGVkIHdpdGgiLAorIiAgU0VUIFRFUk1J TkFMIFZULUxBTkdVQUdFIiwKKyIgIiwKKworI2lmZGVmIE5UCisiU0VUIFRFUk1JTkFMIFdJRFRI IDxjb2xzPiIsCisiICBUZWxscyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHRlcm1pbmFs IHNjcmVlbi4iLAorIiAiLAorIiAgVGhlIGRlZmF1bHQgaXMgODAuICBZb3UgY2FuIGFsc28gdXNl IDEzMi4gIE90aGVyIHdpZHRocyBjYW4gYmUgY2hvc2VuIGJ1dCIsCisiICBhcmUgdXN1YWxseSBu b3Qgc3VwcG9ydGVkIGJ5IGhvc3Qgc29mdHdhcmUuIiwKKyIgIiwKKyNlbHNlCisiU0VUIFRFUk1J TkFMIFdJRFRIIDxjb2xzPiIsCisiICBUZWxscyBob3cgbWFueSBjb2x1bW5zIGRlZmluZSB0aGUg dGVybWluYWwgc2l6ZS4iLAorIiAiLAorIkRlZmF1bHQgaXMgODAuICBJbiBXaW5kb3dlZCBPUy8y IDIueCBzZXNzaW9ucywgdGhpcyB2YWx1ZSBtYXkgbm90IGJlIGNoYW5nZWQiLAorIkluIFdpbmRv d2VkIE9TLzIgV0FSUCAzLnggc2Vzc2lvbnMsIHRoaXMgdmFsdWUgbWF5IHJhbmdlIGZyb20gMjAg dG8gMjU1LiIsCisiSW4gRnVsbCBzY3JlZW4gc2Vzc2lvbnMsIHZhbHVlcyBvZiA0MCwgODAsIGFu ZCAxMzIgYXJlIHZhbGlkLiAgTm90IGFsbCIsCisiY29tYmluYXRpb25zIG9mIGhlaWdodCBhbmQg d2lkdGggYXJlIHN1cHBvcnRlZCBvbiBhbGwgYWRhcHRlcnMuIiwKKyIgIiwKKyNlbmRpZiAvKiBO VCAqLworIlNFVCBURVJNSU5BTCBXUkFQIHsgT0ZGLCBPTiB9IiwKKyIgIFRlbGxzIHdoZXRoZXIg dGhlIHRlcm1pbmFsIGVtdWxhdG9yIHNob3VsZCBhdXRvbWF0aWNhbGx5IHdyYXAgbG9uZyBsaW5l cyIsCisiICBvbiB5b3VyIHNjcmVlbi4iLAorIiAiLAorI2Vsc2UKKworIlNFVCBURVJNSU5BTCBX SURUSCA8bnVtYmVyPiIsCisiIFwKK1RlbGxzIEtlcm1pdCBob3cgbWFueSBjb2x1bW5zIChjaGFy YWN0ZXJzKSBhcmUgb24geW91ciBDT05ORUNULW1vZGUgc2NyZWVuLiIsCisiICIsCisjZW5kaWYg LyogT1MyICovCisiVHlwZSBTSE9XIFRFUk1JTkFMIHRvIHNlZSBjdXJyZW50IHRlcm1pbmFsIHNl dHRpbmdzLiIsCisiIiB9OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE5FVENPTk4K K3N0YXRpYyBjaGFyICpoeHlob3N0W10gPSB7CisiU0VUIEhPU1QgWyBzd2l0Y2hlcyBdIGhvc3Ru YW1lLW9yLWFkZHJlc3MgWyBzZXJ2aWNlIF0gWyBwcm90b2NvbC1zd2l0Y2ggXSIsCisiICBFc3Rh Ymxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBuZXR3b3JrIGhvc3Qgb24gdGhl IGN1cnJlbnRseSIsCisiICBzZWxlY3RlZCBuZXR3b3JrIHR5cGUuICBGb3IgVENQL0lQIGNvbm5l Y3Rpb25zLCB0aGUgZGVmYXVsdCBzZXJ2aWNlIGlzIiwKKyIgIFRFTE5FVDsgc3BlY2lmeSBhIGRp ZmZlcmVudCBUQ1AgcG9ydCBudW1iZXIgb3Igc2VydmljZSBuYW1lIHRvIGNob29zZSBhIiwKKyIg IGRpZmZlcmVudCBzZXJ2aWNlLiAgVGhlIGZpcnN0IHNldCBvZiBzd2l0Y2hlcyBjYW4gYmU6IiwK KyIgIiwKKyIgL05FVFdPUkstVFlQRTpuYW1lIiwKKyIgICBNYWtlcyB0aGUgY29ubmVjdGlvbiBv biB0aGUgZ2l2ZW4gdHlwZSBvZiBuZXR3b3JrLiAgRXF1aXZhbGVudCB0byBTRVQiLAorIiAgIE5F VFdPUksgVFlQRSBuYW1lIHByaW9yIHRvIFNFVCBIT1NULCBleGNlcHQgdGhhdCB0aGUgc2VsZWN0 ZWQgbmV0d29yayIsCisiICAgdHlwZSBpcyB1c2VkIG9ubHkgZm9yIHRoaXMgY29ubmVjdGlvbi4g IFR5cGUgXCJzZXQgaG9zdCAvbmV0Oj9cIiB0byBzZWUiLAorI2lmZGVmIE5FVENNRAorIiAgIGEg bGlzdC4gIC9ORVRXT1JLLVRZUEU6Q09NTUFORCBtZWFucyB0byBtYWtlIHRoZSBjb25uZWN0aW9u IHRocm91Z2ggdGhlIiwKKyIgICBnaXZlbiBzeXN0ZW0gY29tbWFuZCwgc3VjaCBhcyBcInJsb2dp blwiIG9yIFwiY3VcIi4iLAorI2Vsc2UKKyIgICBhIGxpc3QuIiwKKyNlbmRpZiAvKiBORVRDTUQg Ki8KKyIgIiwKKyIgL0NPTk5FQ1QiLAorIiAgIFwKK0VudGVyIENPTk5FQ1QgKHRlcm1pbmFsKSBt b2RlIGF1dG9tYXRpY2FsbHkgaWYgdGhlIGNvbm5lY3Rpb24gaXMgc3VjY2Vzc2Z1bC4iLAorIiAi LAorIiAvU0VSVkVSIiwKKyIgICBFbnRlciBzZXJ2ZXIgbW9kZSBhdXRvbWF0aWNhbGx5IGlmIHRo ZSBjb25uZWN0aW9uIGlzIHN1Y2Nlc3NmdWwuIiwKKyIgIiwKKyIgL1VTRVJJRDpbPG5hbWU+XSIs CisiICAgVGhpcyBzd2l0Y2ggaXMgZXF1aXZhbGVudCB0byBTRVQgTE9HSU4gVVNFUklEIDxuYW1l PiBvciBTRVQgVEVMTkVUIiwKKyIgICBFTlZJUk9OTUVOVCBVU0VSIDxuYW1lPi4gIElmIGEgc3Ry aW5nIGlzIGdpdmVuLCBpdCBzZW50IHRvIGhvc3QgZHVyaW5nIiwKKyIgICBUZWxuZXQgbmVnb3Rp YXRpb25zOyBpZiB0aGlzIHN3aXRjaCBpcyBnaXZlbiBidXQgdGhlIHN0cmluZyBpcyBvbWl0dGVk LCIsCisiICAgbm8gdXNlciBJRCBpcyBzZW50IHRvIHRoZSBob3N0LiAgSWYgdGhpcyBzd2l0Y2gg aXMgbm90IGdpdmVuLCB5b3VyIiwKKyIgICBjdXJyZW50IFVTRVJJRCB2YWx1ZSwgXFx2KHVzZXJp ZCksIGlzIHNlbnQuICBXaGVuIGEgdXNlcmlkIGlzIHNlbnQgdG8gdGhlIiwKKyIgICBob3N0IGl0 IGlzIGEgcmVxdWVzdCB0byBsb2dpbiBhcyB0aGUgc3BlY2lmaWVkIHVzZXIuIiwKKyIgIiwKKyNp ZmRlZiBDS19BVVRIRU5USUNBVElPTgorIiAvUEFTU1dPUkQ6WzxzdHJpbmc+XSIsCisiICAgVGhp cyBzd2l0Y2ggaXMgZXF1aXZhbGVudCB0byBTRVQgTE9HSU4gUEFTU1dPUkQuICBJZiBhIHN0cmlu ZyBpcyBnaXZlbiwiLAorIiAgIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIHBhc3N3b3JkIHRvIGJlIHVz ZWQgKGlmIHJlcXVpcmVkKSBieSBhbnkgVGVsbmV0IiwKKyIgICBBdXRoZW50aWNhdGlvbiBwcm90 b2NvbCAoS2VyYmVyb3MgVGlja2V0IHJldHJpZXZhbCwgU2VjdXJlIFJlbW90ZSIsCisiICAgUGFz c3dvcmQsIG9yIFguNTA5IGNlcnRpZmljYXRlIHByaXZhdGUga2V5IGRlY3J5cHRpb24uKSAgSWYg bm8gcGFzc3dvcmQiLAorIiAgIHN3aXRjaCBpcyBzcGVjaWZpZWQgYSBwcm9tcHQgaXMgaXNzdWVk IHRvIHJlcXVlc3QgdGhlIHBhc3N3b3JkIGlmIG9uZSIsCisiICAgaXMgcmVxdWlyZWQgZm9yIHRo ZSBuZWdvdGlhdGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4iLAorIiAiLAorI2VuZGlmIC8qIENL X0FVVEhFTlRJQ0FUSU9OICovCisiVGhlIHByb3RvY29sLXN3aXRjaGVzIGNhbiBiZToiLAorIiAi LAorIiAvTk8tVEVMTkVULUlOSVQiLAorIiAgIERvIG5vdCBzZW5kIGluaXRpYWwgVGVsbmV0IG5l Z290aWF0aW9ucyBldmVuIGlmIHRoaXMgaXMgYSBUZWxuZXQgcG9ydC4iLAorIiAiLAorIiAvUkFX LVNPQ0tFVCIsCisiICAgVGhpcyBpcyBhIGNvbm5lY3Rpb24gdG8gYSByYXcgVENQIHNvY2tldC4i LAorIiAiLAorI2lmZGVmIFJMT0dDT0RFCisiIC9STE9HSU4iLAorIiAgIFVzZSBSbG9naW4gcHJv dG9jb2wgZXZlbiBpZiB0aGlzIGlzIG5vdCBhbiBSbG9naW4gcG9ydC4iLAorIiAiLAorI2VuZGlm IC8qIFJMT0dDT0RFICovCisiIC9URUxORVQiLAorIiAgIFNlbmQgaW5pdGlhbCBUZWxuZXQgbmVn b3RpYXRpb25zIGV2ZW4gaWYgdGhpcyBpcyBub3QgYSBUZWxuZXQgcG9ydC4iLAorIiAiLAorI2lm ZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgUkxPR0NPREUKKyNpZmRlZiBLUkI0CisiIC9LNExPR0lO IiwKKyIgICBVc2UgS2VyYmVyb3MgSVYga2xvZ2luIHByb3RvY29sIGV2ZW4gaWYgdGhpcyBpcyBu b3QgYSBrbG9naW4gcG9ydC4iLAorIiAiLAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyIgL0VLNExP R0lOIiwKKyIgICBVc2UgS2VyYmVyb3MgSVYgRW5jcnlwdGVkIGxvZ2luIHByb3RvY29sIGV2ZW4g aWYgdGhpcyBpcyBub3QgYW4gZWtsb2dpbiIsCisiICAgcG9ydC4iLAorIiAiLAorI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JCNQorIiAvSzVM T0dJTiIsCisiICAgVXNlIEtlcmJlcm9zIFYga2xvZ2luIHByb3RvY29sIGV2ZW4gaWYgdGhpcyBp cyBub3QgYSBrbG9naW4gcG9ydC4iLAorIiAiLAorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyIgL0VL NUxPR0lOIiwKKyIgICBVc2UgS2VyYmVyb3MgViBFbmNyeXB0ZWQgbG9naW4gcHJvdG9jb2wgZXZl biBpZiB0aGlzIGlzIG5vdCBhbiBla2xvZ2luIiwKKyIgICBwb3J0LiIsCisiICIsCisjZW5kaWYg LyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBSTE9HQ09E RSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjaWZkZWYgQ0tfU1NMCisiIC9TU0wiLAor IiAgIFBlcmZvcm0gU1NMIG5lZ290aWF0aW9ucy4iLAorIiAiLAorIiAvU1NMLVRFTE5FVCIsCisi ICAgUGVyZm9ybSBTU0wgbmVnb3RpYXRpb25zIGFuZCBpZiBzdWNjZXNzZnVsIHN0YXJ0IFRlbG5l dCBuZWdvdGlhdGlvbnMuIiwKKyIgIiwKKyIgL1RMUyIsCisiICAgUGVyZm9ybSBUTFMgbmVnb3Rp YXRpb25zLiIsCisiICIsCisiIC9UTFMtVEVMTkVUIiwKKyIgICBQZXJmb3JtIFRMUyBuZWdvdGlh dGlvbnMgYW5kIGlmIHN1Y2Nlc3NmdWwgc3RhcnQgVGVsbmV0IG5lZ290aWF0aW9ucy4iLAorIiAi LAorI2VuZGlmIC8qIENLX1NTTCAqLworIkV4YW1wbGVzOiIsCisiICBTRVQgSE9TVCBrZXJtaXQu Y29sdW1iaWEuZWR1IiwKKyIgIFNFVCBIT1NUIC9DT05ORUNUIGtlcm1pdC5jb2x1bWJpYS5lZHUi LAorIiAgU0VUIEhPU1QgKiAxNjQ5IiwKKyIgIFNFVCBIT1NUIC9TRVJWRVIgKiAxNjQ5IiwKKyIg IFNFVCBIT1NUIDEyOC41OS4zOS4yIiwKKyIgIFNFVCBIT1NUIG1hZGxhYi5zcHJsLnVtaWNoLmVk dSAzMDAwIiwKKyIgIFNFVCBIT1NUIHh5emNvcnAuY29tIDIwMDAgL1JBVy1TT0NLRVQiLAorI2lm ZGVmIFNTSEJVSUxUSU4KKyIgIFNFVCBIT1NUIC9ORVQ6U1NIIGtlcm1pdC5jb2x1bWJpYS5lZHUg L3gxMS1mb3J3YXJkaW5nOm9uIiwgCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIE5F VENNRAorIiAgU0VUIEhPU1QgL0NPTk5FQ1QgL0NPTU1BTkQgcmxvZ2luIHh5emNvcnAuY29tIiwK KyNlbmRpZiAvKiBORVRDTUQgKi8KKyIgIiwKKyNpZmRlZiBTVVBFUkxBVAorIk5vdGVzOiIsCisi ICIsCisiIC4gVGhlIFRFTE5FVCBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gU0VUIE5FVFdPUksg VFlQRSBUQ1AvSVAsIiwKKyIgICBTRVQgSE9TVCBuYW1lIFsgcG9ydCBdIC9URUxORVQsIElGIFNV Q0NFU1MgQ09OTkVDVCIsCisiICIsCisiIC4gRm9yIFNVUEVSTEFUIGNvbm5lY3Rpb25zLCB0aGUg aG9zdG5hbWUtb3ItYWRkcmVzcyBtYXkgYmUgZWl0aGVyIGEgc2VydmljZSIsCisiICAgbmFtZSwg b3IgYSBub2RlL3BvcnQgY29tYmluYXRpb24sIGFzIHJlcXVpcmVkIGJ5IHlvdXIgTEFUIGhvc3Qu IiwKKyNlbHNlCisiVGhlIFRFTE5FVCBjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG8gU0VUIE5FVFdP UksgVFlQRSBUQ1AvSVAsIiwKKyJTRVQgSE9TVCBuYW1lIFsgcG9ydCBdIC9URUxORVQsIElGIFNV Q0NFU1MgQ09OTkVDVCIsCisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKyIgIiwKKyJBbHNvIHNlZSBT RVQgTkVUV09SSywgVEVMTkVULCBTRVQgVEVMTkVULiIsCisiIiB9OworCitzdGF0aWMgY2hhciAq aG14eWF1dGhbXSA9IHsKKyJTeW5hdHg6IFNFVCBBVVRIRU5USUNBVElPTiA8YXV0aF90eXBlPiA8 cGFyYW1ldGVyPiA8dmFsdWU+IiwKKyIgIFNldHMgZGVmYXVsdHMgZm9yIHRoZSBBVVRIRU5USUNB VEUgY29tbWFuZDoiLAorIiAiLAorI2lmZGVmIENLX0tFUkJFUk9TCisiU0VUIEFVVEhFTlRJQ0FU SU9OIEtFUkJFUk9TNSBBRERSRVNTRVMge2xpc3Qgb2YgaXAtYWRkcmVzc2VzfSIsCisiICBTcGVj aWZpZXMgYSBsaXN0IG9mIElQIGFkZHJlc3NlcyB0aGF0IHNob3VsZCBiZSBwbGFjZWQgaW4gdGhl IFRpY2tldCIsCisiICBHZXR0aW5nIFRpY2tldCBpbiBhZGRpdGlvbiB0byB0aGUgbG9jYWwgbWFj aGluZSBhZGRyZXNzZXMuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBLRVJCRVJPUzQs IEtFUkJFUk9TNSB9IEFVVE9ERVNUUk9ZIiwKKyIgIHsgT04tQ0xPU0UsIE9OLUVYSVQsIE5FVkVS IH0iLAorIiAgV2hlbiBPTiwgS2VybWl0IHdpbGwgZGVzdHJveSBhbGwgY3JlZGVudGlhbHMgaW4g dGhlIGRlZmF1bHQiLAorIiAgY3JlZGVudGlhbHMgY2FjaGUgdXBvbiBLZXJtaXQgdGVybWluYXRp b24uICBEZWZhdWx0IGlzIE5FVkVSLiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgS0VS QkVST1M0LCBLRVJCRVJPUzUgfSBBVVRPR0VUIHsgT04sIE9GRiB9IiwKKyIgIFdoZW4gT04sIGlm IHRoZSBob3N0IG9mZmVycyBLZXJiZXJvcyA0IG9yIEtlcmJlcm9zIDUgYXV0aGVudGljYXRpb24i LAorIiAgYW5kIEtlcm1pdCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGF0IGF1dGhlbnRpY2F0aW9u IG1ldGhvZCBhbmQgdGhlcmUiLAorIiAgaXMgbm8gVEdULCBLZXJtaXQgd2lsbCBhdXRvbWF0aWNh bGx5IGF0dGVtcHQgdG8gcmV0cmlldmUgb25lIGJ5IiwKKyIgIHByb21wdGluZyBmb3IgdGhlIHBh c3N3b3JkIChhbmQgcHJpbmNpcGFsIGlmIG5lZWRlZC4pICBEZWZhdWx0IGlzIE9OLiIsCisiICIs CisiU0VUIEFVVEhFTlRJQ0FUSU9OIEtFUkJFUk9TNSBDUkVERU5USUFMUy1DQUNIRSA8ZmlsZW5h bWU+IiwKKyIgIEFsbG93cyBhbiBhbHRlcm5hdGl2ZSBjcmVkZW50aWFscyBjYWNoZSB0byBiZSBz cGVjaWZpZWQuICBUaGlzIGlzIHVzZWZ1bCIsCisiICB3aGVuIHlvdSBuZWVkIHRvIG1haW50YWlu IHR3byBvciBtb3JlIHNldHMgb2YgY3JlZGVudGlhbHMgZm9yIGRpZmZlcmVudCIsCisiICByZWFs bXMgb3Igcm9sZXMuICBUaGUgZGVmYXVsdCBpcyBzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50 IHZhcmlhYmxlIiwKKyIgIEtSQjVDQ05BTUUgb3IgYXMgcmVwb3J0ZWQgYnkgdGhlIEtlcmJlcm9z IDUgbGlicmFyeS4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiBLRVJCRVJPUzUgRk9SV0FS REFCTEUgeyBPTiwgT0ZGIH0iLAorIiAgV2hlbiBPTiwgc3BlY2lmaWVzIHRoYXQgS2VyYmVyb3Mg NSBjcmVkZW50aWFscyBzaG91bGQgYmUgZm9yd2FyZGFibGUgdG8iLAorIiAgdGhlIGhvc3QuICBJ ZiBTRVQgVEVMTkVUIEFVVEhFTlRJQ0FUSU9OIEZPUldBUkRJTkcgaXMgT04sIGZvcndhcmRhYmxl IiwKKyIgIGNyZWRlbnRpYWxzIGFyZSBzZW50IHRvIHRoZSBob3N0LiAgVGhlIGRlZmF1bHQgaXMg T0ZGLiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIEtFUkJFUk9TNSBHRVQtSzQtVEdUIHsg T04sIE9GRiB9IiwKKyIgIFdoZW4gT04sIHNwZWNpZmllcyB0aGF0IEtlcmJlcm9zIDQgY3JlZGVu dGlhbHMgc2hvdWxkIGJlIHJlcXVlc3RlZCBlYWNoIiwKKyIgIHRpbWUgS2VyYmVyb3MgNSBjcmVk ZW50aWFscyBhcmUgcmVxdWVzdGVkIHdpdGggQVVUSCBLRVJCRVJPUzUgSU5JVC4iLAorIiAgRGVm YXVsdCBpcyBPRkYuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04gS0VSQkVST1M0IElOU1RB TkNFIDxpbnN0YW5jZT4iLAorIiAgQWxsb3dzIGEgS2VyYmVyb3MgNCBpbnN0YW5jZSB0byBiZSBz cGVjaWZpZWQgYXMgYSBkZWZhdWx0IChpZiBuZWVkZWQpLiIsCisiICIsCisiU0VUIEFVVEhFTlRJ Q0FUSU9OIHsgS0VSQkVST1M0LCBLRVJCRVJPUzUgfSBLRVlUQUIgPGZpbGVuYW1lPiIsCisiICBT cGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBrZXl0YWIgZmlsZSB1c2VkIHRvIGF1dGhlbnRp Y2F0ZSBpbmNvbWluZyIsCisiICBjb25uZWN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzIG5vbmUsIHdo aWNoIG1lYW5zIHRvIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSIsCisiICBjb25maWd1cmVkIGluIHRo ZSBLZXJiZXJvcyBpbnN0YWxsYXRpb24uIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBL RVJCRVJPUzQsIEtFUkJFUk9TNSB9IExJRkVUSU1FIDxtaW51dGVzPiIsCisiICBTcGVjaWZpZXMg dGhlIGxpZmV0aW1lIG9mIHRoZSBUR1RzIHJlcXVlc3RlZCBmcm9tIHRoZSBLREMuICBUaGUgZGVm YXVsdCIsCisiICBpcyA2MDAgbWludXRlcyAoMTAgaG91cnMpLiIsCisiICIsCisiU0VUIEFVVEhF TlRJQ0FUSU9OIEtFUkJFUk9TNSBOTy1BRERSRVNTRVMgeyBPTiwgT0ZGIH0iLAorIiAgU3BlY2lm aWVzIHdoZXRoZXIgb3Igbm90IElQIGFkZHJlc3NlcyB3aWxsIGJlIGluc2VydGVkIGludG8gdGhl IFRHVC4iCisiICBEZWZhdWx0IGlzIE9GRi4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiBL RVJCRVJPUzQgUFJFQVVUSCB7IE9OLCBPRkYgfSIsCisiICBBbGxvd3MgS2VyYmVyb3MgNCBwcmVh dXRoZW50aWNhdGVkIFRHVCByZXF1ZXN0cyB0byBiZSB0dXJuZWQgb2ZmLiAgVGhlIiwKKyIgIGRl ZmF1bHQgaXMgT04uICBPbmx5IHVzZSBpZiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gIFdlIHJlY29t bWVuZCB0aGF0IiwKKyIgIHByZWF1dGhlbnRpY2F0ZWQgcmVxdWVzdHMgYmUgcmVxdWlyZWQgZm9y IGFsbCB0aWNrZXRzIHJldHVybmVkIGJ5IGEgS0RDIiwKKyIgIHRvIGEgcmVxdWVzdG9yLiIsCisi ICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgS0VSQkVST1M0LCBLRVJCRVJPUzUgfSBQUklOQ0lQ QUwgPG5hbWU+IiwKKyIgIFdoZW4gS2VybWl0IHN0YXJ0cywgaXQgYXR0ZW1wdHMgdG8gc2V0IHRo ZSBwcmluY2lwYWwgbmFtZSB0byB0aGF0IHN0b3JlZCIsCisiICBpbiB0aGUgY3VycmVudCBjcmVk ZW50aWFscyBjYWNoZS4gIElmIG5vIGNyZWRlbnRpYWwgY2FjaGUgZXhpc3RzLCB0aGUiLAorIiAg Y3VycmVudCBTRVQgTE9HSU4gVVNFUklEIHZhbHVlIGlzIHVzZWQuICBTRVQgTE9HSU4gVVNFUklE IGlzIHNldCB0byB0aGUiLAorIiAgb3BlcmF0aW5nIHN5c3RlbSdzIGN1cnJlbnQgdXNlcm5hbWUg d2hlbiBLZXJtaXQgaXMgc3RhcnRlZC4gIFRvIGZvcmNlIiwKKyIgIEtlcm1pdCB0byBwcm9tcHQg dGhlIHVzZXIgZm9yIHRoZSBwcmluY2lwYWwgbmFtZSB3aGVuIHJlcXVlc3RpbmcgVEdUcywiLAor IiAgcGxhY2U6IiwKKyIgIiwKKyIgICAgU0VUIEFVVEggSzQgUFJJTkNJUEFMIHt9IiwKKyIgICAg U0VUIEFVVEggSzUgUFJJTkNJUEFMIHt9IiwKKyIgIiwKKyIgIGluIHRoZSBLZXJtaXQgaW5pdGlh bGl6YXRpb24gZmlsZSBvciBjb25uZWN0aW9uIHNjcmlwdC4iLAorIiAiLAorIlNFVCBBVVRIRU5U SUNBVElPTiB7IEtFUkJFUk9TNCwgS0VSQkVST1M1IH0gUFJPTVBUIFBBU1NXT1JEIDxwcm9tcHQ+ IiwKKyIgIFNwZWNpZmllcyBhIGN1c3RvbSBwcm9tcHQgdG8gYmUgdXNlZCB3aGVuIHByb21wdGlu ZyBmb3IgYSBwYXNzd29yZC4iLAorIiAgVGhlIEtlcmJlcm9zIHByb21wdCBzdHJpbmdzIG1heSBj b250YWluIHR3byAlcyByZXBsYWNlbWVudCBmaWVsZHMuIiwKKyIgIFRoZSBmaXJzdCAlcyBpcyBy ZXBsYWNlZCBieSB0aGUgcHJpbmNpcGFsIG5hbWU7IHRoZSBzZWNvbmQgYnkgdGhlIHJlYWxtLiIs CisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgS0VSQkVST1M0LCBLRVJCRVJPUzUgfSBQUk9N UFQgUFJJTkNJUEFMIDxwcm9tcHQ+IiwKKyIgIFNwZWNpZmllcyBhIGN1c3RvbSBwcm9tcHQgdG8g YmUgdXNlZCB3aGVuIHByb21wdGluZyBmb3IgdGhlIEtlcmJlcm9zIiwKKyIgIHByaW5jaXBhbCBu YW1lLiAgTm8gJXMgcmVwbGFjZW1lbnQgZmllbGRzIG1heSBiZSB1c2VkLiAgS2VybWl0IHByb21w dHMiLAorIiAgZm9yIGEgcHJpbmNpcGFsIG5hbWUgd2hlbiByZXRyaWV2aW5nIGEgVEdUIGlmIHRo ZSBjb21tYW5kOiIsCisiICIsCisiICAgIFNFVCBBVVRIRU5USUNBVElPTiB7IEtFUkJFUk9TNCwg S0VSQkVST1M1IH0gUFJJTkNJUEFMIHt9IiwKKyIgIiwKKyIgIGhhcyBiZWVuIGlzc3VlZC4iLAor IiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiBLRVJCRVJPUzUgUFJPWElBQkxFIHsgT04sIE9GRiB9 IiwKKyIgIFdoZW4gT04sIHNwZWNpZmllcyB0aGF0IEtlcmJlcm9zIDUgY3JlZGVudGlhbHMgc2hv dWxkIGJlIHByb3hpYWJsZS4iLAorIiAgRGVmYXVsdCBpcyBPRkYuIiwKKyIgIiwKKyJTRVQgQVVU SEVOVElDQVRJT04gS0VSQkVST1M1IFJFTkVXQUJMRSA8bWludXRlcz4iLAorIiAgV2hlbiA8bWlu dXRlcz4gaXMgZ3JlYXRlciB0aGFuIHRoZSB0aWNrZXQgbGlmZXRpbWUgYSBUR1QgbWF5IGJlIHJl bmV3ZWQiLAorIiAgd2l0aCBBVVRIIEs1IElOSVQgL1JFTkVXIGluc3RlYWQgb2YgZ2V0dGluZyBh IG5ldyB0aWNrZXQgYXMgbG9uZyBhcyB0aGUiLAorIiAgdGlja2V0IGlzIG5vdCBleHBpcmVkIGFu ZCBpdHMgd2l0aGluIHRoZSByZW5ld2FibGUgbGlmZXRpbWUuICBEZWZhdWx0IGlzIiwKKyIgIDAg KHplcm8pIG1pbnV0ZXMuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBLRVJCRVJPUzQs IEtFUkJFUk9TNSB9IFJFQUxNIDxuYW1lPiIsCisiICBJZiBubyBkZWZhdWx0IGlzIHNldCwgdGhl IGRlZmF1bHQgcmVhbG0gY29uZmlndXJlZCBmb3IgdGhlIEtlcmJlcm9zIiwKKyIgIGxpYnJhcmll cyBpcyB1c2VkLiAgQWJicmV2aWF0aW9ucyBhY2NlcHRlZC4iLAorIiAiLAorIlNFVCBBVVRIRU5U SUNBVElPTiB7IEtFUkJFUk9TNCwgS0VSQkVST1M1IH0gU0VSVklDRS1OQU1FIDxuYW1lPiIsCisi ICBUaGlzIGNvbW1hbmQgc3BlY2lmaWVzIHRoZSBzZXJ2aWNlIHRpY2tldCBuYW1lIHVzZWQgdG8g YXV0aGVudGljYXRlIiwKKyIgIHRvIHRoZSBob3N0IHdoZW4gS2VybWl0IGlzIHVzZWQgYXMgYSBj bGllbnQ7IG9yIHRoZSBzZXJ2aWNlIHRpY2tldCIsCisiICBuYW1lIGFjY2VwdGVkIGJ5IEtlcm1p dCB3aGVuIGl0IGlzIGFjdGluZyBhcyB0aGUgaG9zdC4iLAorIiAgSWYgbm8gZGVmYXVsdCBpcyBz ZXQsIHRoZSBkZWZhdWx0IHNlcnZpY2UgbmFtZSBmb3IgS2VyYmVyb3MgNCBpcyIsCisiICBcInJj bWRcIiBhbmQgZm9yIEtlcmJlcm9zIDUgaXMgXCJob3N0XCIuIiwKKyIgIiwKKyNlbmRpZiAvKiBD S19LRVJCRVJPUyAqLworI2lmZGVmIENLX1NSUAorIlNFVCBBVVRIRU5USUNBVElPTiBTUlAgUFJP TVBUIFBBU1NXT1JEIDxwcm9tcHQ+IiwKKyIgIFNwZWNpZmllcyBhIGN1c3RvbSBwcm9tcHQgdG8g YmUgdXNlZCB3aGVuIHByb21wdGluZyBmb3IgYSBwYXNzd29yZC4iLAorIiAgVGhlIFNSUCBwcm9t cHQgc3RyaW5nIG1heSBjb250YWluIG9uZSAlcyByZXBsYWNlbWVudCBmaWVsZHMgd2hpY2ggaXMi LAorIiAgcmVwbGFjZWQgYnkgdGhlIGxvZ2luIHVzZXJpZC4iLAorIiAiLAorI2VuZGlmIC8qIENL X1NSUCAqLworI2lmZGVmIENLX1NTTAorIkluIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRz IFwiU1NMXCIgYW5kIFwiVExTXCIgYXJlIGFsaWFzZXMuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElD QVRJT04geyBTU0wsIFRMUyB9IENJUEhFUi1MSVNUIDxsaXN0IG9mIGNpcGhlcnM+IiwKKyJBcHBs aWVzIHRvIGJvdGggU1NMIGFuZCBUTFMuICBBIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGFueSBv ZiB0aGUgZm9sbG93aW5nIiwKKyIoY2FzZSBzZW5zaXRpdmUpIG9wdGlvbnMgZGVwZW5kaW5nIG9u IHRoZSBvcHRpb25zIGNob3NlbiB3aGVuIE9wZW5TU0wgd2FzICIsCisiY29tcGlsZWQ6ICIsCisi ICIsCisiICBLZXkgRXhjaGFuZ2UgQWxnb3JpdGhtczoiLAorIiAgICBcImtSU0FcIiAgICAgIFJT QSBrZXkgZXhjaGFuZ2UiLAorIiAgICBcImtESHJcIiAgICAgIERpZmZpZS1IZWxsbWFuIGtleSBl eGNoYW5nZSAoa2V5IGZyb20gUlNBIGNlcnQpIiwKKyIgICAgXCJrREhkXCIgICAgICBEaWZmaWUt SGVsbG1hbiBrZXkgZXhjaGFuZ2UgKGtleSBmcm9tIERTQSBjZXJ0KSIsCisiICAgIFwia0VESFwi ICAgICAgRXBoZW1lcmFsIERpZmZpZS1IZWxsbWFuIGtleSBleGNoYW5nZSAodGVtcG9yYXJ5IGtl eSkiLAorIiAgICBcImtLUkI1XCIgICAgIEtlcmJlcm9zIDUiLAorIiAiLAorIiAgQXV0aGVudGlj YXRpb24gQWxnb3JpdGhtOiIsCisiICAgIFwiYU5VTExcIiAgICAgTm8gYXV0aGVudGljYXRpb24i LAorIiAgICBcImFSU0FcIiAgICAgIFJTQSBhdXRoZW50aWNhdGlvbiIsCisiICAgIFwiYURTU1wi ICAgICAgRFNTIGF1dGhlbnRpY2F0aW9uIiwKKyIgICAgXCJhREhcIiAgICAgICBEaWZmaWUtSGVs bG1hbiBhdXRoZW50aWNhdGlvbiIsCisiICAgIFwiYUtSQjVcIiAgICAgS2VyYmVyb3MgNSIsCisi ICIsCisiICBDaXBoZXIgRW5jb2RpbmcgQWxnb3JpdGhtOiIsCisiICAgIFwiZU5VTExcIiAgICAg Tm8gZW5jb2RpaW5nIiwKKyIgICAgXCJERVNcIiAgICAgICBERVMgZW5jb2RpbmciLAorIiAgICBc IjNERVNcIiAgICAgIFRyaXBsZSBERVMgZW5jb2RpbmciLAorIiAgICBcIlJDNFwiICAgICAgIFJD NCBlbmNvZGluZyIsCisiICAgIFwiUkMyXCIgICAgICAgUkMyIGVuY29kaW5nIiwKKyIgICAgXCJJ REVBXCIgICAgICBJREVBIGVuY29kaW5nIiwKKyIgIiwKKyIgIE1BQyBEaWdlc3QgQWxnb3JpdGht OiIsCisiICAgIFwiTUQ1XCIgICAgICAgTUQ1IGhhc2ggZnVuY3Rpb24iLAorIiAgICBcIlNIQTFc IiAgICAgIFNIQTEgaGFzaCBmdW5jdGlvbiIsCisiICAgIFwiU0hBXCIgICAgICAgU0hBIGhhc2gg ZnVuY3Rpb24gKHNob3VsZCBub3QgYmUgdXNlZCkiLAorIiAiLAorIiAgQWxpYXNlczoiLAorIiAg ICBcIlNTTHYyXCIgICAgIGFsbCBTU0wgdmVyc2lvbiAyLjAgY2lwaGVycyAoc2hvdWxkIG5vdCBi ZSB1c2VkKSIsCisiICAgIFwiU1NMdjNcIiAgICAgYWxsIFNTTCB2ZXJzaW9uIDMuMCBjaXBoZXJz IiwKKyIgICAgXCJFWFBcIiAgICAgICBhbGwgZXhwb3J0IGNpcGhlcnMgKDQwLWJpdCkiLAorIiAg ICBcIkVYUE9SVDU2XCIgIGFsbCBleHBvcnQgY2lwaGVycyAoNTYtYml0KSIsCisiICAgIFwiTE9X XCIgICAgICAgYWxsIGxvdyBzdHJlbmd0aCBjaXBoZXJzIChubyBleHBvcnQpIiwKKyIgICAgXCJN RURJVU1cIiAgICBhbGwgY2lwaGVycyB3aXRoIDEyOC1iaXQgZW5jcnlwdGlvbiIsCisiICAgIFwi SElHSFwiICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgZ3JlYXRlciB0aGFuIDEyOC1iaXQgZW5jcnlw dGlvbiIsCisiICAgIFwiUlNBXCIgICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgUlNBIGtleSBleGNo YW5nZSIsCisiICAgIFwiREhcIiAgICAgICAgYWxsIGNpcGhlcnMgdXNpbmcgRGlmZmllLUhlbGxt YW4ga2V5IGV4Y2hhbmdlIiwKKyIgICAgXCJFREhcIiAgICAgICBhbGwgY2lwaGVycyB1c2luZyBF cGhlbWVyYWwgRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlIiwKKyIgICAgXCJBREhcIiAgICAg ICBhbGwgY2lwaGVycyB1c2luZyBBbm9ueW1vdXMgRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdl IiwKKyIgICAgXCJEU1NcIiAgICAgICBhbGwgY2lwaGVycyB1c2luZyBEU1MgYXV0aGVudGljYXRp b24iLAorIiAgICBcIktSQjVcIiAgICAgIGFsbCBjaXBoZXJzIHVzaW5nIEtlcmJlcm9zIDUgYXV0 aGVudGljYXRpb24iLAorIiAgICBcIk5VTExcIiAgICAgIGFsbCBjaXBoZXJzIHVzaW5nIG5vIGVu Y3J5cHRpb24iLAorIiAiLAorIkVhY2ggaXRlbSBpbiB0aGUgbGlzdCBtYXkgaW5jbHVkZSBhIHBy ZWZpeCBtb2RpZmllcjoiLAorIiAiLAorIiAgICBcIitcIiAgICAgICAgIG1vdmUgY2lwaGVyKHMp IHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIGluIHRoZSBsaXN0IiwKKyIgICAgXCItXCIgICAgICAg ICByZW1vdmUgY2lwaGVyKHMpIGZyb20gdGhlIGxpc3QgKG1heSBiZSBhZGRlZCBhZ2FpbiBieSIs CisiICAgICAgICAgICAgICAgIGEgc3Vic2VxdWVudCBsaXN0IGVudHJ5KSIsCisiICAgIFwiIVwi ICAgICAgICAga2lsbCBjaXBoZXIgZnJvbSB0aGUgbGlzdCAoaXQgbWF5IG5vdCBiZSBhZGRlZCBh Z2FpbiIsCisiICAgICAgICAgICAgICAgIGJ5IGEgc3Vic2VxdWVudCBsaXN0IGVudHJ5KSIsCisi ICIsCisiSWYgbm8gbW9kaWZpZXIgaXMgc3BlY2lmaWVkIHRoZSBlbnRyeSBpcyBhZGRlZCB0byB0 aGUgbGlzdCBhdCB0aGUgY3VycmVudCAiLAorInBvc2l0aW9uLiAgXCIrXCIgbWF5IGFsc28gYmUg dXNlZCB0byBjb21iaW5lIHRhZ3MgdG8gc3BlY2lmeSBlbnRyaWVzIHN1Y2ggYXMgIgorLAorIlwi UlNBK1JDNFwiIGRlc2NyaWJlcyBhbGwgY2lwaGVycyB0aGF0IHVzZSBib3RoIFJTQSBhbmQgUkM0 LiIsCisiICIsCisiRm9yIGV4YW1wbGUsIGFsbCBhdmFpbGFibGUgY2lwaGVycyBub3QgaW5jbHVk aW5nIEFESCBrZXkgZXhjaGFuZ2U6IiwKKyIgIiwKKyIgIEFMTDohQURIOlJDNCtSU0E6K0hJR0g6 K01FRElVTTorTE9XOitTU0x2MjorRVhQIiwKKyIgIiwKKyJBbGwgYWxnb3JpdGhtcyBpbmNsdWRp bmcgQURIIGFuZCBleHBvcnQgYnV0IGV4Y2x1ZGluZyBwYXRlbnRlZCBhbGdvcml0aG1zOiAiLAor IiAiLAorIiAgSElHSDpNRURJVU06TE9XOkVYUE9SVDU2OkVYUDpBREg6IWtSU0E6IWFSU0E6IVJD NDohUkMyOiFJREVBIiwKKyIgIiwKKyJUaGUgT3BlblNTTCBjb21tYW5kICIsCisiICIsCisiICBv cGVuc3NsLmV4ZSBjaXBoZXJzIC12IDxsaXN0IG9mIGNpcGhlcnM+ICIsCisiICIsCisibWF5IGJl IHVzZWQgdG8gbGlzdCBhbGwgb2YgdGhlIGNpcGhlcnMgYW5kIHRoZSBvcmRlciBkZXNjcmliZWQg YnkgYSBzcGVjaWZpYyIsCisiPGxpc3Qgb2YgY2lwaGVycz4uIiwKKyIgIiwKKyJTRVQgQVVUSEVO VElDQVRJT04geyBTU0wsIFRMUyB9IENSTC1ESVIgPGRpcmVjdG9yeT4iLAorInNwZWNpZmllcyBh IGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGNlcnRpZmljYXRlIHJldm9jYXRpb24gZmlsZXMgd2hl cmUgZWFjaCIsCisiZmlsZSBpcyBuYW1lZCBieSB0aGUgaGFzaCBvZiB0aGUgY2VydGlmaWNhdGUg dGhhdCBoYXMgYmVlbiByZXZva2VkLiIsCisiICIsCisiICBPcGVuU1NMIGV4cGVjdHMgdGhlIGhh c2ggc3ltbGlua3MgdG8gYmUgbWFkZSBsaWtlIHRoaXM6IiwKKyIgIiwKKyIgICAgbG4gLXMgY3Js LnBlbSBgb3BlbnNzbCBjcmwgLWhhc2ggLW5vb3V0IC1pbiBjcmwucGVtYC5yMCIsCisiICIsCisi ICBTaW5jZSBub3QgYWxsIGZpbGUgc3lzdGVtcyBoYXZlIHN5bWxpbmtzIHlvdSBjYW4gdXNlIHRo ZSBmb2xsb3dpbmcgY29tbWFuZCIsCisiICBpbiBLZXJtaXQgdG8gY29weSB0aGUgY3JsLnBlbSBm aWxlIHRvIHRoZSBoYXNoIGZpbGUgbmFtZS4iLAorIiAiLAorIiAgICAgY29weSBjcmwucGVtIHtc XGZjb21tYW5kKG9wZW5zc2wuZXhlIGNybCAtaGFzaCAtbm9vdXQgLWluIGNybC5wZW0pLnIwfSIs CisiICIsCisiICBUaGlzIHByb2R1Y2VzIGEgaGFzaCBiYXNlZCBvbiB0aGUgaXNzdWVyIGZpZWxk IGluIHRoZSBDUkwgc3VjaCAiLAorIiAgdGhhdCB0aGUgaXNzdWVyIGZpZWxkIG9mIGEgQ2VydCBt YXkgYmUgcXVpY2tseSBtYXBwZWQgdG8gdGhlICIsCisiICBjb3JyZWN0IENSTC4iLAorIiAiLAor IlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExTIH0gQ1JMLUZJTEUgPGZpbGVuYW1lPiIsCisi c3BlY2lmaWVzIGEgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBjZXJ0aWZpY2F0ZSByZXZv Y2F0aW9ucy4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExTIH0gREVCVUcg eyBPTiwgT0ZGIH0iLAorInNwZWNpZmllcyB3aGV0aGVyIGRlYnVnIGluZm9ybWF0aW9uIHNob3Vs ZCBiZSBkaXNwbGF5ZWQgYWJvdXQgdGhlIFNTTC9UTFMiLAorImNvbm5lY3Rpb24uICBXaGVuIERF QlVHIGlzIE9OLCB0aGUgVkVSSUZZIGNvbW1hbmQgZG9lcyBub3QgdGVybWluYXRlIiwKKyJjb25u ZWN0aW9ucyB3aGVuIHNldCB0byBGQUlMLUlGLU5PLVBFRVItQ0VSVCB3aGVuIGEgY2VydGlmaWNh dGUgaXMiLAorInByZXNlbnRlZCB0aGF0IGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgdmVyaWZpZWQu ICBJbnN0ZWFkIGVhY2ggZXJyb3IiLAorImlzIGRpc3BsYXllZCBidXQgdGhlIGNvbm5lY3Rpb24g YXV0b21hdGljYWxseSBjb250aW51ZXMuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBT U0wsIFRMUyB9IERILVBBUkFNLUZJTEUgPGZpbGVuYW1lPiIsCisiICBTcGVjaWZpZXMgYSBmaWxl IGNvbnRhaW5pbmcgREggcGFyYW1ldGVycyB3aGljaCBhcmUgdXNlZCB0byBnZW5lcmF0ZSIsCisi ICB0ZW1wb3JhcnkgREgga2V5cy4gIElmIGEgREggcGFyYW1ldGVyIGZpbGUgaXMgbm90IHByb3Zp ZGVkIEtlcm1pdCB1c2VzIGEiLAorIiAgZml4ZWQgc2V0IG9mIHBhcmFtZXRlcnMgZGVwZW5kaW5n IG9uIHRoZSBuZWdvdGlhdGVkIGtleSBsZW5ndGguICBLZXJtaXQiLAorIiAgcHJvdmlkZXMgREgg cGFyYW1ldGVycyBmb3Iga2V5IGxlbmd0aHMgb2YgNTEyLCA3NjgsIDEwMjQsIDE1MzYsIGFuZCAy MDQ4IiwKKyIgIGJpdHMuIiwKKyIgIiwKKyJTRVQgQVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9 IERTQS1DRVJULUNIQUlOLUZJTEUgPGZpbGVuYW1lPiIsCisiICBTcGVjaWZpZXMgYSBmaWxlIGNv bnRhaW5pbmcgYSBEU0EgY2VydGlmaWNhdGUgY2hhaW4gdG8gYmUgc2VudCBhbG9uZyB3aXRoIiwK KyIgIHRoZSBEU0EtQ0VSVCB0byB0aGUgcGVlci4gIFRoaXMgZmlsZSBtdXN0IG9ubHkgYmUgc3Bl Y2lmaWVkIGlmIEtlcm1pdCBpcyIsCisiICBiZWluZyB1c2VkIGFzIGEgc2VydmVyIGFuZCB0aGUg RFNBIGNlcnRpZmljYXRlIHdhcyBzaWduZWQgYnkgYW4iLAorIiAgaW50ZXJtZWRpYXJ5IGNlcnRp ZmljYXRlIGF1dGhvcml0eS4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExT IH0gRFNBLUNFUlQtRklMRSA8ZmlsZW5hbWU+IiwKKyIgIFNwZWNpZmllcyBhIGZpbGUgY29udGFp bmluZyBhIERTQSBjZXJ0aWZpY2F0ZSB0byBiZSBzZW50IHRvIHRoZSBwZWVyIHRvICIsCisiICBh dXRoZW50aWNhdGUgdGhlIGhvc3Qgb3IgZW5kIHVzZXIuICBUaGUgZmlsZSBtYXkgY29udGFpbiB0 aGUgbWF0Y2hpbmcgREggIiwKKyIgIHByaXZhdGUga2V5IGluc3RlYWQgb2YgdXNpbmcgdGhlIERT QS1LRVktRklMRSBjb21tYW5kLiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBU TFMgfSBEU0EtS0VZLUZJTEUgPGZpbGVuYW1lPiIsCisiU3BlY2lmaWVzIGEgZmlsZSBjb250YWlu aW5nIHRoZSBwcml2YXRlIERIIGtleSB0aGF0IG1hdGNoZXMgdGhlIERTQSAiLAorImNlcnRpZmlj YXRlIHNwZWNpZmllZCB3aXRoIERTQS1DRVJULUZJTEUuICBUaGlzIGNvbW1hbmQgaXMgb25seSBu ZWNlc3NhcnkgaWYiLAorInRoZSBwcml2YXRlIGtleSBpcyBub3QgYXBwZW5kZWQgdG8gdGhlIGNl cnRpZmljYXRlIGluIHRoZSBmaWxlIHNwZWNpZmllZCBieSIsCisiRFNBLUNFUlQtRklMRS4iLAor IiAiLAorIiAgTm90ZTogV2hlbiBleGVjdXRpbmcgYSBzY3JpcHQgaW4gdGhlIGJhY2tncm91bmQg b3Igd2hlbiBpdCBpcyIsCisiICBydW5uaW5nIGFzIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2aWNl IERhZW1vbiwgS2VybWl0IGNhbm5vdCBzdXBwb3J0ICIsCisiICBlbmNyeXB0ZWQgcHJpdmF0ZSBr ZXlzLiAgV2hlbiBhdHRlbXB0aW5nIHRvIGxvYWQgYSBwcml2YXRlIGtleSB0aGF0IGlzIiwKKyIg IGVuY3J5cHRlZCwgYSBwcm9tcHQgd2lsbCBiZSBnZW5lcmF0ZWQgcmVxdWVzdGluZyB0aGUgcGFz c3BocmFzZSBuZWNlc3NhcnkiLAorIiAgdG8gZGVjcnlwdCB0aGUga2V5ZmlsZS4gIFRvIGF1dG9t YXRlIGFjY2VzcyB0byB0aGUgcHJpdmF0ZSBrZXkgeW91IG11c3QiLAorIiAgZGVjcnlwdCB0aGUg ZW5jcnlwdGVkIGtleWZpbGUgYW5kIGNyZWF0ZSBhbiB1bmVuY3J5cHRlZCBrZXlmaWxlIGZvciB1 c2UiLAorIiAgYnkgS2VybWl0LiAgVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IHVzaW5nIHRo ZSBmb2xsb3dpbmcgY29tbWFuZCBhbmQiLAorIiAgdGhlIHBhc3NwaHJhc2U6IiwKKyIgIiwKKyIg IG9wZW5zc2wgZHNhIC1pbiA8ZW5jcnlwdGVkLWtleS1maWxlPiAtb3V0IDx1bmVuY3J5cHRlZC1r ZXktZmlsZT4iLAorIiAiLAorIlNFVCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExTIH0gUkFORE9N LUZJTEUgPGZpbGVuYW1lPiIsCisiICBTcGVjaWZpZXMgYSBmaWxlIGNvbnRhaW5pbmcgcmFuZG9t IGRhdGEgdG8gYmUgdXNlZCBhcyBzZWVkIGZvciB0aGUiLAorIiAgUHNldWRvIFJhbmRvbSBOdW1i ZXIgR2VuZXJhdG9yLiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFyZSIsCisiICBvdmVyd3Jp dHRlbiB3aXRoIG5ldyByYW5kb20gZGF0YSBvbiBlYWNoIHVzZS4iLAorIiAiLAorIlNFVCBBVVRI RU5USUNBVElPTiB7IFNTTCwgVExTIH0gUlNBLUNFUlQtQ0hBSU4tRklMRSA8ZmlsZW5hbWU+IiwK KyIgIFNwZWNpZmllcyBhIGZpbGUgY29udGFpbmluZyBhIFJTQSBjZXJ0aWZpY2F0ZSBjaGFpbiB0 byBiZSBzZW50IGFsb25nIHdpdGgiLAorIiAgdGhlIFJTQS1DRVJUIHRvIHRoZSBwZWVyLiAgVGhp cyBmaWxlIG11c3Qgb25seSBiZSBzcGVjaWZpZWQgaWYgS2VybWl0IGlzIiwKKyIgIGJlaW5nIHVz ZWQgYXMgYSBzZXJ2ZXIgYW5kIHRoZSBSU0EgY2VydGlmaWNhdGUgd2FzIHNpZ25lZCBieSBhbiIs CisiICBpbnRlcm1lZGlhcnkgY2VydGlmaWNhdGUgYXV0aG9yaXR5LiIsCisiICIsCisiU0VUIEFV VEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBSU0EtQ0VSVC1GSUxFIDxmaWxlbmFtZT4iLAorIiAg U3BlY2lmaWVzIGEgZmlsZSBjb250YWluaW5nIGEgUlNBIGNlcnRpZmljYXRlIHRvIGJlIHNlbnQg dG8gdGhlIHBlZXIgdG8gIiwKKyIgIGF1dGhlbnRpY2F0ZSB0aGUgaG9zdCBvciBlbmQgdXNlci4g IFRoZSBmaWxlIG1heSBjb250YWluIHRoZSBtYXRjaGluZyBSU0EgIiwKKyIgIHByaXZhdGUga2V5 IGluc3RlYWQgb2YgdXNpbmcgdGhlIFJTQS1LRVktRklMRSBjb21tYW5kLiIsCisiICIsCisiU0VU IEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBUTFMgfSBSU0EtS0VZLUZJTEUgPGZpbGVuYW1lPiIsCisi ICBTcGVjaWZpZXMgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHByaXZhdGUgUlNBIGtleSB0aGF0IG1h dGNoZXMgdGhlIFJTQSIsCisiICBjZXJ0aWZpY2F0ZSBzcGVjaWZpZWQgd2l0aCBSU0EtQ0VSVC1G SUxFLiAgVGhpcyBjb21tYW5kIGlzIG9ubHkgbmVjZXNzYXJ5IiwKKyIgIGlmIHRoZSBwcml2YXRl IGtleSBpcyBub3QgYXBwZW5kZWQgdG8gdGhlIGNlcnRpZmljYXRlIGluIHRoZSBmaWxlIHNwZWNp ZmllZCIKKywKKyIgIGJ5IFJTQS1DRVJULUZJTEUuICAiLAorIiAiLAorIiAgTm90ZTogV2hlbiBl eGVjdXRpbmcgYSBzY3JpcHQgaW4gdGhlIGJhY2tncm91bmQgb3Igd2hlbiBpdCBpcyIsCisiICBy dW5uaW5nIGFzIGFuIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIERhZW1vbiwgS2VybWl0IGNhbm5v dCBzdXBwb3J0ICIsCisiICBlbmNyeXB0ZWQgcHJpdmF0ZSBrZXlzLiAgV2hlbiBhdHRlbXB0aW5n IHRvIGxvYWQgYSBwcml2YXRlIGtleSB0aGF0IGlzIiwKKyIgIGVuY3J5cHRlZCwgYSBwcm9tcHQg d2lsbCBiZSBnZW5lcmF0ZWQgcmVxdWVzdGluZyB0aGUgcGFzc3BocmFzZSBuZWNlc3NhcnkiLAor IiAgdG8gZGVjcnlwdCB0aGUga2V5ZmlsZS4gIFRvIGF1dG9tYXRlIGFjY2VzcyB0byB0aGUgcHJp dmF0ZSBrZXkgeW91IG11c3QiLAorIiAgZGVjcnlwdCB0aGUgZW5jcnlwdGVkIGtleWZpbGUgYW5k IGNyZWF0ZSBhbiB1bmVuY3J5cHRlZCBrZXlmaWxlIGZvciB1c2UiLAorIiAgYnkgS2VybWl0LiAg VGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBh bmQiLAorIiAgdGhlIHBhc3NwaHJhc2U6IiwKKyIgIiwKKyIgIG9wZW5zc2wgcnNhIC1pbiA8ZW5j cnlwdGVkLWtleS1maWxlPiAtb3V0IDx1bmVuY3J5cHRlZC1rZXktZmlsZT4iLAorIiAiLAorIlNF VCBBVVRIRU5USUNBVElPTiB7IFNTTCwgVExTIH0gVkVSQk9TRSB7IE9OLCBPRkYgfSIsCisiICBT cGVjaWZpZXMgd2hldGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXV0aGVudGljYXRpb24gKGll LCB0aGUiLAorIiAgY2VydGlmaWNhdGUgY2hhaW4pIHNob3VsZCBiZSBkaXNwbGF5ZWQgdXBvbiBt YWtpbmcgYSBjb25uZWN0aW9uLiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9OIHsgU1NMLCBU TFMgfSBWRVJJRlkgeyBOTyxQRUVSLUNFUlQsRkFJTC1JRi1OTy1QRUVSLUNFUlQgfSIsCisiICBT cGVjaWZpZXMgd2hldGhlciBjZXJ0aWZpY2F0ZXMgc2hvdWxkIGJlIHJlcXVlc3RlZCBmcm9tIHRo ZSBwZWVyIHZlcmlmaWVkOyIsCisiICB3aGV0aGVyIHRoZXkgc2hvdWxkIGJlIHZlcmlmaWVkIHdo ZW4gdGhleSBhcmUgcHJlc2VudGVkOyBhbmQgd2hldGhlciB0aGV5IiwKKyIgIHNob3VsZCBiZSBy ZXF1aXJlZC4gIFdoZW4gc2V0IHRvIE5PICh0aGUgZGVmYXVsdCBmb3IgSUtTRCksIEtlcm1pdCBk b2VzIiwKKyIgIG5vdCByZXF1ZXN0IHRoYXQgdGhlIHBlZXIgc2VuZCBhIGNlcnRpZmljYXRlOyBp ZiBvbmUgaXMgcHJlc2VudGVkIGl0IGlzIiwKKyIgIGlnbm9yZWQuICBXaGVuIHNldCB0byBQRUVS LUNFUlQgKHRoZSBkZWZhdWx0IHdoZW4gbm90IElLU0QpLCBLZXJtaXQiLAorIiAgcmVxdWVzdHMg YSBjZXJ0aWZpY2F0ZSBiZSBzZW50IGJ5IHRoZSBwZWVyLiAgSWYgcHJlc2VudGVkLCB0aGUgY2Vy dGlmaWNhdGUiLAorIiAgaXMgdmVyaWZpZWQuICBBbnkgZXJyb3JzIGR1cmluZyB0aGUgdmVyaWZp Y2F0aW9uIHByb2Nlc3MgcmVzdWx0IGluIiwKKyIgIHF1ZXJpZXMgdG8gdGhlIGVuZCB1c2VyLiAg V2hlbiBzZXQgdG8gRkFJTC1JRi1OTy1QRUVSLUNFUlQsIEtlcm1pdCIsCisiICByZXF1ZXN0cyBh IGNlcnRpZmljYXRlIGJlIHNlbnQgYnkgdGhlIHBlZXIuICBJZiB0aGUgY2VydGlmaWNhdGUgaXMg bm90IiwKKyIgIHByZXNlbnRlZCBvciBmYWlscyB0byB2ZXJpZnksIHRoZSBjb25uZWN0aW9uIGlz IHRlcm1pbmF0ZWQgd2l0aG91dCIsCisiICBxdWVyeWluZyB0aGUgdXNlci4iLAorIiAiLAorIiAg SWYgYW4gYW5vbnltb3VzIGNpcGhlciAoaS5lLiwgQURIKSBpcyBkZXNpcmVkLCB0aGUgTk8gc2V0 dGluZyBtdXN0IGJlIiwKKyIgIHVzZWQuICBPdGhlcndpc2UsIHRoZSByZWNlaXB0IG9mIHRoZSBw ZWVyIGNlcnRpZmljYXRlIHJlcXVlc3QgaXMiLAorIiAgaW50ZXJwcmV0ZWQgYXMgYSBwcm90b2Nv bCBlcnJvciBhbmQgdGhlIG5lZ290aWF0aW9uIGZhaWxzLiIsCisiICIsCisiICBJZiB5b3Ugd2lz aCB0byBhbGxvdyB0aGUgcGVlciB0byBhdXRoZW50aWNhdGUgdXNpbmcgZWl0aGVyIGFuIFg1MDki LAorIiAgY2VydGlmaWNhdGUgdG8gdXNlcmlkIG1hcHBpbmcgZnVuY3Rpb24gb3IgdmlhIHVzZSBv ZiBhIH4vLnRsc2xvZ2luIGZpbGUiLAorIiAgeW91IG11c3QgdXNlIGVpdGhlciBQRUVSLUNFUlQg b3IgRkFJTC1JRi1OTy1QRUVSLUNFUlQuICBPdGhlcndpc2UsIGFueSIsCisiICBjZXJ0aWZpY2F0 ZXMgdGhhdCBhcmUgcHJlc2VudGVkIGlzIGlnbm9yZWQuICBJbiBvdGhlciB3b3JkcywgdXNlIE5P IGlmIHlvdSIsCisiICB3YW50IHRvIGRpc2FibGUgdGhlIGFiaWxpdHkgdG8gdXNlIGNlcnRpZmlj YXRlcyB0byBhdXRoZW50aWNhdGUgYSBwZWVyLiIsCisiICIsCisiU0VUIEFVVEhFTlRJQ0FUSU9O IHsgU1NMLCBUTFMgfSBWRVJJRlktRElSIDxkaXJlY3Rvcnk+IiwKKyIgIFNwZWNpZmllcyBhIGRp cmVjdG9yeSB0aGF0IGNvbnRhaW5zIHJvb3QgQ0EgY2VydGlmaWNhdGUgZmlsZXMgdXNlZCB0byIs CisiICB2ZXJpZnkgdGhlIGNlcnRpZmljYXRlIGNoYWlucyBwcmVzZW50ZWQgYnkgdGhlIHBlZXIu ICBFYWNoIGZpbGUgaXMgbmFtZWQiLAorIiAgYnkgYSBoYXNoIG9mIHRoZSBjZXJ0aWZpY2F0ZS4i LAorIiAiLAorIiAgT3BlblNTTCBleHBlY3RzIHRoZSBoYXNoIHN5bWxpbmtzIHRvIGJlIG1hZGUg bGlrZSB0aGlzOiIsCisiICIsCisiICAgIGxuIC1zIGNlcnQucGVtIGBvcGVuc3NsIHg1MDkgLWhh c2ggLW5vb3V0IC1pbiBjZXJ0LnBlbWAuMCIsCisiICIsCisiICBTaW5jZSBub3QgYWxsIGZpbGUg c3lzdGVtcyBoYXZlIHN5bWxpbmtzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCIs CisiICBpbiBLZXJtaXQgdG8gY29weSB0aGUgY2VydC5wZW0gZmlsZSB0byB0aGUgaGFzaCBmaWxl IG5hbWUuIiwKKyIgIiwKKyIgICAgY29weSBjZXJ0LnBlbSB7XFxmY29tbWFuZChvcGVuc3NsLmV4 ZSB4NTA5IC1oYXNoIC1ub291dCAtaW4gY2VydC5wZW0pLjB9IiwKKyIgIiwKKyIgIFRoaXMgcHJv ZHVjZXMgYSBoYXNoIGJhc2VkIG9uIHRoZSBzdWJqZWN0IGZpZWxkIGluIHRoZSBjZXJ0IHN1Y2gg dGhhdCB0aGUiLAorIiAgY2VydGlmaWNhdGUgbWF5IGJlIHF1aWNrbHkgZm91bmQuIiwKKyIgIiwK KyJTRVQgQVVUSEVOVElDQVRJT04geyBTU0wsIFRMUyB9IFZFUklGWS1GSUxFIDxmaWxlPiIsCisi ICBTcGVjaWZpZXMgYSBmaWxlIHRoYXQgY29udGFpbnMgcm9vdCBDQSBjZXJ0aWZpY2F0ZXMgdG8g YmUgdXNlZCBmb3IiLAorIiAgdmVyaWZ5aW5nIGNlcnRpZmljYXRlIGNoYWlucy4iLAorIiAiLAor I2VuZGlmIC8qIENLX1NTTCAqLworIiIKK307CisKK3N0YXRpYyBjaGFyICpoeHluZXRbXSA9IHsK KyJTeW50YXg6IFNFVCBORVRXT1JLIHsgVFlQRSBuZXR3b3JrLXR5cGUsIERJUkVDVE9SWSBbIGZp bGUocykuLi4gXSB9IiwKKyIgIiwKKyJTZWxlY3QgdGhlIHR5cGUgb2YgbmV0d29yayB0byBiZSB1 c2VkIHdpdGggU0VUIEhPU1QgY29ubmVjdGlvbnM6IiwKKyIgIiwKKyNpZmRlZiBORVRDTUQKKyIg IFNFVCBORVRXT1JLIFRZUEUgQ09NTUFORCAgIDsgTWFrZSBhIGNvbm5lY3Rpb24gdGhyb3VnaCBh biBleHRlcm5hbCBjb21tYW5kIiwKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBUQ1BTT0NL RVQKKyIgIFNFVCBORVRXT1JLIFRZUEUgVENQL0lQICAgIDsgSW50ZXJuZXQ6IFRlbG5ldCwgUmxv Z2luLCBldGMuIiwKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBBTllYMjUKKyIgIFNF VCBORVRXT1JLIFRZUEUgWC4yNSAgICAgIDsgWC4yNSBwZWVyLXRvLXBlZXIgY29ubmVjdGlvbnMu IiwKKyNlbmRpZiAvKiBBTllYMjUgKi8KKyNpZmRlZiBERUNORVQKKyIgIFNFVCBORVRXT1JLIFRZ UEUgUEFUSFdPUktTIHsgTEFULCBDVEVSTSB9IDsgREVDIExBVCBvciBDVEVSTSBjb25uZWN0aW9u cy4iLAorI2VuZGlmIC8qIERFQ05FVCAqLworI2lmZGVmIE5QSVBFCisiICBTRVQgTkVUV09SSyBU WVBFIE5BTUVELVBJUEUgPHBpcGVuYW1lPiAgOyBPUy8yIE5hbWVkIFBpcGUgY29ubmVjdGlvbnMu IiwKKyNlbmRpZiAvKiBOUElQRSAqLworI2lmZGVmIENLX05FVEJJT1MKKyIgIFNFVCBORVRXT1JL IFRZUEUgTkVUQklPUyAgICAgICAgICAgICAgICA7IE5FVEJJT1MgcGVlci10by1wZWVyIGNvbm5l Y3Rpb25zIiwKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisjaWZkZWYgU1VQRVJMQVQKKyIgIFNF VCBORVRXT1JLIFRZUEUgU1VQRVJMQVQgOyBMQVQgY29ubmVjdGlvbnMgKE1lcmlkaWFuIFRlY2hu b2xvZ3kgU3VwZXJMQVQpIiwKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworIiAiLAorIklmIG9ubHkg b25lIG5ldHdvcmsgdHlwZSBpcyBsaXN0ZWQgYWJvdmUsIHRoYXQgaXMgdGhlIGRlZmF1bHQgbmV0 d29yayBmb3IiLAorI2lmZGVmIFJMT0dDT0RFCisiU0VUIEhPU1QgY29tbWFuZHMuICBBbHNvIHNl ZSBTRVQgSE9TVCwgVEVMTkVULCBSTE9HSU4uIiwKKyNlbHNlCisjaWZkZWYgVE5DT0RFCisiU0VU IEhPU1QgY29tbWFuZHMuICBBbHNvIHNlZSBTRVQgSE9TVCwgVEVMTkVULiIsCisjZWxzZQorIlNF VCBIT1NUIGNvbW1hbmRzLiAgQWxzbyBzZWUgU0VUIEhPU1QuIiwKKyNlbmRpZiAvKiBUTkNPREUg Ki8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworIiAiLAorIlNFVCBORVRXT1JLIERJUkVDVE9SWSBb IGZpbGUgWyBmaWxlIFsgLi4uIF0gXSBdIiwKKyIgIFNwZWNpZmllcyB0aGUgbmFtZShzKSBvZiB6 ZXJvIG9yIG1vcmUgbmV0d29yayBkaXJlY3RvcnkgZmlsZXMsIHNpbWlsYXIgdG8iLAorIiAgZGlh bGluZyBkaXJlY3RvcmllcyAoSEVMUCBESUFMIGZvciBkZXRhaWxzKS4gIFRoZSBnZW5lcmFsIGZv cm1hdCBvZiBhIiwKKyIgIG5ldHdvcmsgZGlyZWN0b3J5IGVudHJ5IGlzOiIsCisiICIsCisiICAg IG5hbWUgbmV0d29yay10eXBlIGFkZHJlc3MgWyBuZXR3b3JrLXNwZWNpZmljLWluZm8gXSBbIDsg Y29tbWVudCBdIiwKKyIgIiwKKyIgIEZvciBUQ1AvSVAsIHRoZSBmb3JtYXQgaXM6IiwKKyIgIiwK KyIgICAgbmFtZSB0Y3AvaXAgaXAtaG9zdG5hbWUtb3ItYWRkcmVzcyBbIHNvY2tldCBdIFsgOyBj b21tZW50IF0iLAorIiAiLAorIllvdSBjYW4gaGF2ZSBtdWx0aXBsZSBuZXR3b3JrIGRpcmVjdG9y aWVzIGFuZCB5b3UgY2FuIGhhdmUgbXVsdGlwbGUgZW50cmllcyIsCisid2l0aCB0aGUgc2FtZSBu YW1lLiAgU0VUIEhPU1QgPG5hbWU+IGFuZCBURUxORVQgPG5hbWU+IGNvbW1hbmRzIGxvb2sgdXAg dGhlIiwKKyJnaXZlbiA8bmFtZT4gaW4gdGhlIGRpcmVjdG9yeSBhbmQsIGlmIGZvdW5kLCBmaWxs IGluIHRoZSBhZGRpdGlvbmFsIGl0ZW1zIiwKKyJmcm9tIHRoZSBlbnRyeSwgYW5kIHRoZW4gdHJ5 IGFsbCBtYXRjaGluZyBlbnRyaWVzIHVudGlsIG9uZSBzdWNjZWVkcy4iLAorIiJ9OworCisjaWZu ZGVmIE5PVENQT1BUUworc3RhdGljIGNoYXIgKmh4eXRjcFtdID0geworI2lmZGVmIFNPTF9TT0NL RVQKKyJTRVQgVENQIEFERFJFU1MgPGlwLWFkZHJlc3M+IiwKKyIgIFRoaXMgYWxsb3dzIGEgc3Bl Y2lmaWMgSVAgQWRkcmVzcyBvbiBhIG11bHRpaG9tZWQgaG9zdCB0byBiZSB1c2VkIiwKKyIgIGlu c3RlYWQgb2YgYWxsb3dpbmcgdGhlIFRDUC9JUCBzdGFjayB0byBjaG9vc2UuICBUaGlzIG1heSBi ZSBuZWNlc3NhcnkiLAorIiAgd2hlbiB1c2luZyBhdXRoZW50aWNhdGlvbiBvciBsaXN0ZW5pbmcg Zm9yIGFuIGluY29taW5nIGNvbm5lY3Rpb24uIiwKKyIgIFNwZWNpZnkgbm8gPGlwLWFkZHJlc3M+ IHRvIHJlbW92ZSB0aGUgcHJlZmVyZW5jZS4iLAorIiAiLAorIlNFVCBUQ1AgS0VFUEFMSVZFIHsg T04sIE9GRiB9IiwKKyIgIFNldHRpbmcgdGhpcyBPTiBtaWdodCBoZWxwIHRvIGRldGVjdCBicm9r ZW4gY29ubmVjdGlvbnMgbW9yZSBxdWlja2x5LiIsCisiICAoZGVmYXVsdCBpcyBPTi4pIiwKKyIg IiwKKyJTRVQgVENQIExJTkdFUiB7IE9OIFt0aW1lb3V0XSwgT0ZGIH0iLAorIiAgU2V0dGluZyB0 aGlzIE9OIGVuc3VyZXMgdGhhdCBhIGNvbm5lY3Rpb24gZG9lc24ndCBjbG9zZSBiZWZvcmUgYWxs IiwKKyIgIG91dHN0YW5kaW5nIGRhdGEgaGFzIGJlZW4gdHJhbnNmZXJyZWQgYW5kIGFja25vd2xl ZGdlZC4gIFRoZSB0aW1lb3V0IGlzIiwKKyIgIG1lYXN1cmVkIGluIDEwdGhzIG9mIG1pbGxpc2Vj b25kcy4gIFRoZSBkZWZhdWx0IGlzIE9OIHdpdGggYSB0aW1lb3V0IG9mIDAuIiwKKyIgIiwKKyJT RVQgVENQIE5PREVMQVkgeyBPTiwgT0ZGIH0iLAorIiAgT04gbWVhbnMgc2VuZCBzaG9ydCBUQ1Ag cGFja2V0cyBpbW1lZGlhdGVseSByYXRoZXIgdGhhbiB3YWl0aW5nIiwKKyIgIHRvIGFjY3VtdWxh dGUgYSBidW5jaCBvZiB0aGVtIGJlZm9yZSB0cmFuc21pdHRpbmcgKE5hZ2xlIEFsZ29yaXRobSku IiwKKyIgIChkZWZhdWx0IGlzIE9GRi4pIiwKKyIgIiwKKyJTRVQgVENQIFJFQ1ZCVUYgPG51bWJl cj4iLAorIlNFVCBUQ1AgU0VOREJVRiA8bnVtYmVyPiIsCisiICAgVENQIHJlY2VpdmUgYW5kIHNl bmQgYnVmZmVyIHNpemVzLiAgKGRlZmF1bHQgaXMgLTEsIHVzZSBzeXN0ZW0gZGVmYXVsdHMuKSIs CisiICIsCisiVGhlc2UgaXRlbXMgbGV0IHlvdSB0dW5lIFRDUCBuZXR3b3JraW5nIHBlcmZvcm1h bmNlIG9uIGEgcGVyLWNvbm5lY3Rpb24iLAorImJhc2lzIGJ5IGFkanVzdGluZyBwYXJhbWV0ZXJz IHlvdSBub3JtYWxseSB3b3VsZCBub3QgaGF2ZSBhY2Nlc3MgdG8uICBZb3UiLAorInNob3VsZCB1 c2UgdGhlc2UgY29tbWFuZHMgb25seSBpZiB5b3UgZmVlbCB0aGF0IHRoZSBUQ1AvSVAgcHJvdG9j b2wgc3RhY2siLAorInRoYXQgS2VybWl0IGlzIHVzaW5nIGlzIGdpdmluZyB5b3UgaW5hZGVxdWF0 ZSBwZXJmb3JtYW5jZSwgYW5kIHRoZW4gb25seSBpZiIsCisieW91IHVuZGVyc3RhbmQgdGhlIGNv bmNlcHRzIChzZWUsIGZvciBleGFtcGxlLCB0aGUgQ29tZXIgVENQL0lQIGJvb2tzKSwgYW5kIiwK KyJ0aGVuIGF0IHlvdXIgb3duIHJpc2suICBUaGVzZSBzZXR0aW5ncyBhcmUgZGlzcGxheWVkIGJ5 IFNIT1cgTkVUV09SSy4gIE5vdCIsCisiYWxsIG9wdGlvbnMgYXJlIG5lY2Vzc2FyaWx5IGF2YWls YWJsZSBpbiBhbGwgS2VybWl0IHZlcnNpb25zOyBpdCBkZXBlbmRzIG9uIiwKKyJ0aGUgdW5kZXJs eWluZyBUQ1AvSVAgc2VydmljZXMuIiwKKyIgIiwKKyJUaGUgZm9sbG93aW5nIFRDUCBhbmQvb3Ig SVAgcGFyYW1ldGVyKHMpIG1heSBhbHNvIGJlIGNoYW5nZWQ6IiwKKyIgIiwKKyNlbmRpZiAvKiBT T0xfU09DS0VUICovCisiU0VUIFRDUCBSRVZFUlNFLUROUy1MT09LVVAgeyBBVVRPLCBPTiwgT0ZG IH0iLAorIiAgVGVsbHMgS2VybWl0IHdoZXRoZXIgdG8gcGVyZm9ybSByZXZlcnNlIEROUyBsb29r dXAgb24gVENQL0lQIGNvbm5lY3Rpb25zIiwKKyIgIHNvIEtlcm1pdCBjYW4gZGV0ZXJtaW5lIHRo ZSBhY3R1YWwgaG9zdG5hbWUgb2YgdGhlIGhvc3QgaXQgaXMgY29ubmVjdGVkIiwKKyIgIHRvLCB3 aGljaCBpcyB1c2VmdWwgZm9yIGNvbm5lY3Rpb25zIHRvIGhvc3QgcG9vbHMsIGFuZCBpcyByZXF1 aXJlZCBmb3IiLAorIiAgS2VyYmVyb3MgY29ubmVjdGlvbnMgdG8gaG9zdCBwb29scyBhbmQgZm9y IGluY29taW5nIGNvbm5lY3Rpb25zLiAgSWYgdGhlIiwKKyIgIG90aGVyIGhvc3QgZG9lcyBub3Qg aGF2ZSBhIEROUyBlbnRyeSwgdGhlIHJldmVyc2UgbG9va3VwIGNvdWxkIHRha2UgYSBsb25nIiwK KyIgIHRpbWUgKG1pbnV0ZXMpIHRvIGZhaWwsIGJ1dCB0aGUgY29ubmVjdGlvbiB3aWxsIHN0aWxs IGJlIG1hZGUuICBUdXJuIHRoaXMiLAorIiAgb3B0aW9uIE9GRiBmb3Igc3BlZWRpZXIgY29ubmVj dGlvbnMgaWYgeW91IGRvIG5vdCBuZWVkIHRvIGtub3cgZXhhY3RseSIsCisiICB3aGljaCBob3N0 IHlvdSBhcmUgY29ubmVjdGVkIHRvIGFuZCB5b3UgYXJlIG5vdCB1c2luZyBLZXJiZXJvcy4gIEFV VE8sIHRoZSIsCisiICBkZWZhdWx0LCBtZWFucyB0aGUgbG9va3VwIGlzIGRvbmUgb24gaG9zdG5h bWVzLCBidXQgbm90IG9uIG51bWVyaWMgSVAiLAorIiAgYWRkcmVzc2VzIHVubGVzcyBLZXJiZXJv cyBzdXBwb3J0IGlzIGluc3RhbGxlZC4iLAorI2lmZGVmIENLX0ROU19TUlYKKyIgIiwKKyJTRVQg VENQIEROUy1TRVJWSUNFLVJFQ09SRFMge09OLCBPRkZ9IiwKKyIgIFRlbGxzIEtlcm1pdCB3aGV0 aGVyIHRvIHRyeSB0byB1c2UgRE5TIFNSViByZWNvcmRzIHRvIGRldGVybWluZSB0aGUiLAorIiAg aG9zdCBhbmQgcG9ydCBudW1iZXIgdXBvbiB3aGljaCB0byBmaW5kIGFuIGFkdmVydGlzZWQgc2Vy dmljZS4gIEZvciIsCisiICBleGFtcGxlLCBpZiBhIGhvc3Qgd2FudHMgcmVndWxhciBUZWxuZXQg Y29ubmVjdGlvbnMgcmVkaXJlY3RlZCB0byBzb21lIiwKKyIgIHBvcnQgb3RoZXIgdGhhbiAyMywg dGhpcyBmZWF0dXJlIGFsbG93cyBLZXJtaXQgdG8gYXNrIHRoZSBob3N0IHdoaWNoIiwKKyIgIHBv cnQgaXQgc2hvdWxkIHVzZS4gIFNpbmNlIG5vdCBhbGwgZG9tYWluIHNlcnZlcnMgYXJlIHNldCB1 cCB0byBhbnN3ZXIiLAorIiAgc3VjaCByZXF1ZXN0cywgdGhpcyBmZWF0dXJlIGlzIE9GRiBieSBk ZWZhdWx0LiIsCisjZW5kaWYgLyogQ0tfRE5TX1NSViAqLworI2lmZGVmIE5UCisjaWZkZWYgQ0tf U09DS1MKKyIgIiwKKyJTRVQgVENQIFNPQ0tTLVNFUlZFUiBbPGhvc3RuYW1lIG9yIGlwLWFkZHJl c3M+XSIsCisiICBJZiBhIGhvc3RuYW1lIG9yIGlwLWFkZHJlc3MgaXMgc3BlY2lmaWVkLCBLZXJt aXQgd2lsbCB1c2UgdGhlIFNPQ0tTIiwKKyIgIHNlcnZlciB3aGVuIGF0dGVtcHRpbmcgb3V0Z29p bmcgY29ubmVjdGlvbnMuICBJZiBubyBob3N0bmFtZSBvciIsCisiICBpcC1hZGRyZXNzIGlzIHNw ZWNpZmllZCwgYW55IHByZXZpb3VzbHkgc3BlY2lmaWVkIFNPQ0tTIHNlcnZlciB3aWxsIiwKKyIg IGJlIHJlbW92ZWQuIiwKKyNlbmRpZiAvKiBDS19TT0NLUyAqLworI2VuZGlmIC8qIE5UICovCisj aWZuZGVmIE5PSFRUUAorIiAiLAorIlNFVCBUQ1AgSFRUUC1QUk9YWSBbPGhvc3RuYW1lIG9yIGlw LWFkZHJlc3M+Wzo8cG9ydD5dXSIsCisiICBJZiBhIGhvc3RuYW1lIG9yIGlwLWFkZHJlc3MgaXMg c3BlY2lmaWVkLCBLZXJtaXQgd2lsbCB1c2UgdGhlIFByb3h5IiwKKyIgIHNlcnZlciB3aGVuIGF0 dGVtcHRpbmcgb3V0Z29pbmcgY29ubmVjdGlvbnMuICBJZiBubyBob3N0bmFtZSBvciIsCisiICBp cC1hZGRyZXNzIGlzIHNwZWNpZmllZCwgYW55IHByZXZpb3VzbHkgc3BlY2lmaWVkIFByb3h5IHNl cnZlciB3aWxsIiwKKyIgIGJlIHJlbW92ZWQuICBJZiBubyBwb3J0IG51bWJlciBpcyBzcGVjaWZp ZWQsIHRoZSBcImh0dHBcIiBzZXJ2aWNlIiwKKyIgIHdpbGwgYmUgdXNlZC4iLAorI2VuZGlmIC8q IE5PSFRUUCAqLworIiJ9OworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworI2VuZGlmIC8qIE5FVENP Tk4gKi8KKworI2lmZGVmIFROQ09ERQorc3RhdGljIGNoYXIgKmh4eXRvcHRbXSA9IHsKKyJTRVQg VEVMT1BUIFsgeyAvQ0xJRU5ULCAvU0VSVkVSIH0gXSA8b3B0aW9uPiAtIiwKKyIgICAgeyBBQ0NF UFRFRCwgUkVGVVNFRCwgUkVRVUVTVEVELCBSRVFVSVJFRCB9IC0iLAorIiAgICBbIHsgQUNDRVBU RUQsIFJFRlVTRUQsIFJFUVVFU1RFRCwgUkVRVUlSRUQgfSBdIiwKKyIgIFNFVCBURUxPUFQgbGV0 cyB5b3Ugc3BlY2lmeSBwb2xpY3kgcmVxdWlyZW1lbnRzIGZvciBLZXJtaXQncyBoYW5kbGluZyBv ZiIsCisiICBUZWxuZXQgb3B0aW9uIG5lZ290aWF0aW9ucy4gIFNldHRpbmcgYW4gb3B0aW9uIFJF UVVJUkVEIGNhdXNlcyBLZXJtaXQiLAorIiAgdG8gb2ZmZXIgdGhlIG9wdGlvbiB0byB0aGUgcGVl ciBhbmQgZGlzY29ubmVjdCBpZiB0aGUgb3B0aW9uIGlzIHJlZnVzZWQuIiwKKyIgIFJFUVVFU1RF RCBjYXVzZXMgS2VybWl0IHRvIG9mZmVyIGFuIG9wdGlvbiB0byB0aGUgcGVlci4gIEFDQ0VQVEVE IHJlc3VsdHMiLAorIiAgaW4gbm8gb2ZmZXIgYnV0IEtlcm1pdCB3aWxsIGF0dGVtcHQgdG8gbmVn b3RpYXRlIHRoZSBvcHRpb24gaWYgaXQgaXMiLAorIiAgcmVxdWVzdGVkLiAgUkVGVVNFRCBpbnN0 cnVjdHMgS2VybWl0IHRvIHJlZnVzZSB0aGUgb3B0aW9uIGlmIGl0IGlzIiwKKyIgIHJlcXVlc3Rl ZCBieSB0aGUgcGVlci4iLAorIiAiLAorIiAgU29tZSBvcHRpb25zIGFyZSBuZWdvdGlhdGVkIGlu IHR3byBkaXJlY3Rpb25zIGFuZCBhY2NlcHQgc2VwYXJhdGUgcG9saWNpZXMiLAorIiAgZm9yIGVh Y2ggZGlyZWN0aW9uOyB0aGUgZmlyc3Qga2V5d29yZCBhcHBsaWVzIHRvIEtlcm1pdCBpdHNlbGYs IHRoZSBzZWNvbmQiLAorIiAgYXBwbGllcyB0byBLZXJtaXQncyBUZWxuZXQgcGFydG5lcjsgaWYg dGhlIHNlY29uZCBrZXl3b3JkIGlzIG9taXR0ZWQsIGFuIiwKKyIgIGFwcHJvcHJpYXRlIChvcHRp b24tc3BlY2lmaWMpIGRlZmF1bHQgaXMgYXBwbGllZC4gIFlvdSBjYW4gYWxzbyBpbmNsdWRlIGEi LAorIiAgL0NMSUVOVCBvciAvU0VSVkVSIHN3aXRjaCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBn aXZlbiBwb2xpY2llcyBhcHBseSIsCisiICB3aGVuIEtlcm1pdCBpcyB0aGUgVGVsbmV0IGNsaWVu dCBvciB0aGUgVGVsbmV0IHNlcnZlcjsgaWYgbm8gc3dpdGNoIGlzIiwKKyIgIGdpdmVuLCB0aGUg Y29tbWFuZCBhcHBsaWVzIHRvIHRoZSBjbGllbnQuIiwKKyIgIiwKKyIgIE5vdGUgdGhhdCBzb21l IG9mIEtlcm1pdCdzIFRlbG5ldCBwYXJ0bmVycyBmYWlsIHRvIHJlZnVzZSBvcHRpb25zIHRoYXQi LAorIiAgdGhleSBkbyBub3QgcmVjb2duaXplIGFuZCBpbnN0ZWFkIGRvIG5vdCByZXNwb25kIGF0 IGFsbC4gIEluIHRoaXMgY2FzZSBpdCIsCisiICBpcyBwb3NzaWJsZSB0byB1c2UgU0VUIFRFTE9Q VCB0byBpbnN0cnVjdCBLZXJtaXQgdG8gUkVGVVNFIHRoZSBvcHRpb24iLAorIiAgYmVmb3JlIGNv bm5lY3RpbmcgdG8gdGhlIHByb2JsZW0gaG9zdCwgdGh1cyBza2lwcGluZyB0aGUgcHJvYmxlbWF0 aWMiLAorIiAgbmVnb3RpYXRpb24uIiwKKyIgIiwKKyIgIFVzZSBTSE9XIFRFTE9QVCB0byB2aWV3 IGN1cnJlbnQgVGVsbmV0IE9wdGlvbiBuZWdvdGlhdGlvbiBzZXR0aW5ncy4iLAorIiAgU0hPVyBU RUxORVQgZGlzcGxheXMgY3VycmVudCBUZWxuZXQgc2V0dGluZ3MuIiwKKyIifTsKKworc3RhdGlj IGNoYXIgKmh4eXRlbFtdID0geworIlN5bnRheDogU0VUIFRFTE5FVCBwYXJhbWV0ZXIgdmFsdWUi LAorIiAiLAorIkZvciBUQ1AvSVAgVEVMTkVUIGNvbm5lY3Rpb25zLCB3aGljaCBhcmUgaW4gTlZU IChBU0NJSSkgbW9kZSBieSBkZWZhdWx0OiIsCisiICIsCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJ T04KKyNpZmRlZiBDT01NRU5UCisiU0VUIFRFTE5FVCBBVVRIRU5JQ0FUSU9OIHsgQUNDRVBURUQs IFJFRlVTRUQsIFJFUVVFU1RFRCwgUkVRVUlSRUQgfSIsCisiICBBQ0NFUFQgb3IgUkVGVVNFIGF1 dGhlbnRpY2F0aW9uIGJpZHMsIG9yIGFjdGl2ZWx5IFJFUVVFU1QgYXV0aGVudGljYXRpb24uIiwK KyIgIFJFUVVJUkVEIHJlZnVzZXMgdGhlIGNvbm5lY3Rpb24gaWYgYXV0aGVudGljYXRpb24gaXMg bm90IHN1Y2Nlc3NmdWxseSIsCisiICBuZWdvdGlhdGVkLiAgQUNDRVBURUQgYnkgZGVmYXVsdC4i LAorIiAiLAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyJTRVQgVEVMTkVUIEFVVEhFTlRJQ0FUSU9O IFRZUEUgeyBBVVRPTUFUSUMsIEtFUkJFUk9TX0lWLCBLRVJCRVJPU19WLCAuLi4iLAorI2lmZGVm IE5UCisiICAuLi4sIE5UTE0sIFNTTCwgU1JQLCBOT05FIH0gWy4uLl0iLAorI2Vsc2UgLyogTlQg Ki8KKyIgIC4uLiwgU1NMLCBTUlAsIE5PTkUgfSBbLi4uXSIsCisjZW5kaWYgLyogTlQgKi8KKyIg IEFVVE9NQVRJQyBpcyB0aGUgZGVmYXVsdC4gIEF2YWlsYWJsZSBvcHRpb25zIGNhbiB2YXJ5IGRl cGVuZGluZyBvbiB0aGUiLAorIiAgZmVhdHVyZXMgS2VybWl0IHdhcyBidWlsdCB0byBzdXBwb3J0 IGFuZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSIsCisiICBjb25maWd1cmF0aW9uOyB0eXBlIFNFVCBU RUxORVQgQVVUSEVOVElDQVRJT04gVFlQRSA/IGZvciBhIGxpc3QuIiwKKyIgIiwKKyIgIFdoZW4g S2VybWl0IGlzIHRoZSBUZWxuZXQgY2xpZW50OiIsCisiICAgIEFVVE9NQVRJQyBhbGxvd3MgdGhl IGhvc3QgdG8gY2hvb3NlIHRoZSBwcmVmZXJyZWQgdHlwZSBvZiBhdXRoZW50aWNhdGlvbi4iCiss CisiICAgIE5PTkUgaW5zdHJ1Y3RzIEtlcm1pdCB0byByZWZ1c2UgYWxsIGF1dGhlbnRpY2F0aW9u IG1ldGhvZHMgd2hlbiB0aGUiLAorIiAgICBhdXRoZW50aWNhdGlvbiBvcHRpb24gaXMgbmVnb3Rp YXRlZC4gIEEgbGlzdCBvZiBvbmUgb3IgbW9yZSBvdGhlciB2YWx1ZXMiLAorIiAgICBhbGxvdyBh IHNwZWNpZmljIHN1YnNldCBvZiB0aGUgc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMg dG8gYmUiLAorIiAgICB1c2VkLiIsCisiICIsCisiICBXaGVuIEtlcm1pdCBpcyB0aGUgVGVsbmV0 IHNlcnZlcjoiLAorIiAgICBBVVRPTUFUSUMgcmVzdWx0cyBpbiBhdmFpbGFibGUgYXV0aGVudGlj YXRpb24gbWV0aG9kcyBiZWluZyBvZmZlcmVkIiwKKyIgICAgdG8gdGhlIHRlbG5ldCBjbGllbnQg aW4gdGhlIGZvbGxvd2luZyBvcmRlcjoiLAorIiAiLAorI2lmZGVmIE5UCisiICAgICAgS0VSQkVS T1NfViwgS0VSQkVST1NfSVYsIFNSUCwgU1NMLCBOVExNIiwKKyNlbHNlIC8qIE5UICovCisiICAg ICAgS0VSQkVST1NfViwgS0VSQkVST1NfSVYsIFNSUCwgU1NMLCBOVExNIiwKKyNlbmRpZiAvKiBO VCAqLworIiAiLAorIiAgTk9ORSByZXN1bHRzIGluIG5vIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMg YmVpbmcgb2ZmZXJlZCB0byB0aGUgVGVsbmV0IiwKKyIgIHNlcnZlciB3aGVuIHRoZSBhdXRoZW50 aWNhdGlvbiBvcHRpb24gaXMgbmVnb3RpYXRlZC4gIFRoZSBwcmVmZXJyZWQiLAorIiAgbWV0aG9k IG9mIGRpc2FibGluZyBhdXRoZW50aWNhdGlvbiBpczoiLAorIiAiLAorIiAgICBTRVQgVEVMT1BU IC9TRVJWRVIgQVVUSEVOVElDQVRJT04gUkVGVVNFIiwKKyIgIiwKKyIgIEEgbGlzdCBvZiBvbmUg b3IgbW9yZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHNwZWNpZmllcyB0aGUgb3JkZXIgdGhvc2Ui LAorIiAgbWV0aG9kcyBhcmUgdG8gYmUgb2ZmZXJlZCB0byB0aGUgdGVsbmV0IGNsaWVudC4iLAor I2lmZGVmIE5UCisiICIsCisiICBJZiB5b3Ugd2lzaCB0byBhbGxvdyBOVExNIGF1dGhlbnRpY2F0 aW9uIHRvIGJlIHVzZWQgd2l0aCB0aGUgTWljcm9zb2Z0IiwKKyIgIFdpbmRvd3MgMjAwMCBvciBT ZXJ2aWNlcyBmb3IgVW5peCBUZWxuZXQgY2xpZW50IHlvdSBtdXN0IHNwZWNpZnkgYSBsaXN0IiwK KyIgIHdpdGggTlRMTSBhcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4gIEJ5IGRlZmF1bHQs IE5UTE0gaXMgdGhlIGxhc3QiLAorIiAgaXRlbSBpbiB0aGUgbGlzdCBiZWNhdXNlIGl0IGRvZXMg bm90IHByb3ZpZGUgYW55IGZvcm0gb2YgZGF0YSBlbmNyeXB0aW9uLiIsCisjZW5kaWYgLyogTlQg Ki8KKyIgIiwKKyNpZmRlZiBDS19LRVJCRVJPUworIlNFVCBURUxORVQgQVVUSEVOVElDQVRJT04g Rk9SV0FSRElORyB7IE9OLCBPRkYgfSIsCisiICBTZXQgdGhpcyB0byBPTiB0byBmb3J3YXJkIEtl cmJlcm9zIFYgdGlja2V0LWdyYW50aW5nLXRpY2tldHMgdG8gdGhlIGhvc3QiLAorIiAgYWZ0ZXIg YXV0aGVudGljYXRpb24gaXMgY29tcGxldGUuICBPRkYgYnkgZGVmYXVsdC4iLAorIiAiLAorI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCisiU0VUIFRFTE5FVCBBVVRIRU5USUNBVElPTiBFTkNSWVBU LUZMQUcgeyBBTlksIE5PTkUsIFRFTE9QVCB9IiwKKyIgIFVzZSB0aGlzIGNvbW1hbmQgdG8gc3Bl Y2lmeSB3aGljaCBBVVRIIHRlbG9wdCBlbmNyeXB0aW9uIGZsYWdzIG1heSBiZSIsCisiICBhY2Nl cHRlZCBpbiBjbGllbnQgbW9kZSBvciBvZmZlcmVkIGluIHNlcnZlciBtb2RlLiAgVGhlIGRlZmF1 bHQgaXMgQU5ZLiIsCisiICIsCisiU0VUIFRFTE5FVCBBVVRIRU5USUNBVElPTiBIT1ctRkxBRyB7 IEFOWSwgT05FLVdBWSwgTVVUVUFMIH0iLAorIiAgVXNlIHRoaXMgY29tbWFuZCB0byBzcGVjaWZ5 IHdoaWNoIEFVVEggdGVsb3B0IGhvdyBmbGFncyBtYXkgYmUiLAorIiAgYWNjZXB0ZWQgaW4gY2xp ZW50IG1vZGUgb3Igb2ZmZXJlZCBpbiBzZXJ2ZXIgbW9kZS4gIFRoZSBkZWZhdWx0IGlzIEFOWS4i LAorIiAiLAorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ09NTUVOVAor IlNFVCBURUxORVQgQklOQVJZLU1PREUgeyBBQ0NFUFRFRCwgUkVGVVNFRCwgUkVRVUVTVEVELCBS RVFVSVJFRCB9IiwKKyIgIEFDQ0VQVCBvciBSRUZVU0UgYmluYXJ5LW1vZGUgYmlkcywgb3IgYWN0 aXZlbHkgUkVRVUVTVCBiaW5hcnkgbW9kZS4iLAorIiAgUkVRVUlSRUQgcmVmdXNlcyB0aGUgY29u bmVjdGlvbiBpZiBiaW5hcnkgbW9kZSBpcyBub3Qgc3VjY2Vzc2Z1bGx5IiwKKyIgIG5lZ290aWF0 ZWQgaW4gYm90aCBkaXJlY3Rpb25zLiAgQUNDRVBURUQgYnkgZGVmYXVsdC4iLAorIiAiLAorI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyJTRVQgVEVMTkVUIEJJTkFSWS1UUkFOU0ZFUi1NT0RFIHsgT04s IE9GRiB9IiwKKyIgIFdoZW4gT04gKE9GRiBieSBkZWZhdWx0KSBhbmQgQklOQVJZIG5lZ290aWF0 aW9ucyBhcmUgbm90IFJFRlVTRUQgS2VybWl0IiwKKyIgIHdpbGwgYXR0ZW1wdCB0byBuZWdvdGlh dGUgQklOQVJZIG1vZGUgaW4gZWFjaCBkaXJlY3Rpb24gYmVmb3JlIHRoZSBzdGFydCIsCisiICBv ZiBlYWNoIGZpbGUgdHJhbnNmZXIuICBBZnRlciB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGUgQklO QVJZIG1vZGUgd2lsbCIsCisiICBiZSByZXN0b3JlZCB0byB0aGUgcHJlLXRyYW5zZmVyIHN0YXRl LiIsCisiICIsCisiU0VUIFRFTE5FVCBCSU5BUlktVFJBTlNGRVItTU9ERSB7IE9OLCBPRkYgfSIs CisiICBTZXQgdGhpcyBjb21tYW5kIHRvIE9OIGlmIHlvdSB3YW50IHRvIGZvcmNlIEtlcm1pdCB0 byBuZWdvdGlhdGUiLAorIiAgVGVsbmV0IEJpbmFyeSBpbiBib3RoIGRpcmVjdGlvbnMgd2hlbiBw ZXJmb3JtaW5nIGZpbGUgdHJhbnNmZXJzLiIsCisiICBEZWZhdWx0IGlzIE9GRi4gIEFsaWFzIFNF VCBURUxORVQgQklOQVJZLVhGRVItTU9ERS4iLAorIiAiLAorIlNFVCBURUxORVQgQlVHIEFVVEgt S1JCNS1ERVMgeyBPTiwgT0ZGIH0iLAorIiAgRGVmYXVsdCBpcyBPTi4gIERpc2FibGUgdGhpcyBi dWcgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgZW5jcnlwdGlvbiB0eXBlcyIsCisiICBvdGhlciB0aGFu IERFUyBzdWNoIGFzIDNERVMgb3IgQ0FTVC0xMjggd2hlbiB0aGUgS2VyYmVyb3MgNSBzZXNzaW9u IGtleSIsCisiICBpcyBsb25nZXIgdGhhbiA4IGJ5dGVzLiIsCisiICIsCisiU0VUIFRFTE5FVCBC VUcgQklOQVJZLU1FLU1FQU5TLVUtVE9PIHsgT04sIE9GRiB9IiwKKyIgIFNldCB0aGlzIHRvIE9O IHRvIHRyeSB0byBvdmVyY29tZSBURUxORVQgYmluYXJ5LW1vZGUgbWlzbmVnb3RpYXRpb25zIGJ5 IiwKKyIgIEtlcm1pdCdzIFRFTE5FVCBwYXJ0bmVyLiIsCisiICIsCisiU0VUIFRFTE5FVCBCVUcg QklOQVJZLVUtTUVBTlMtTUUtVE9PIHsgT04sIE9GRiB9IiwKKyIgIFNldCB0aGlzIHRvIE9OIHRv IHRyeSB0byBvdmVyY29tZSBURUxORVQgYmluYXJ5LW1vZGUgbWlzbmVnb3RpYXRpb25zIGJ5IiwK KyIgIEtlcm1pdCdzIFRFTE5FVCBwYXJ0bmVyLiIsCisiICIsCisiU0VUIFRFTE5FVCBCVUcgSU5G SU5JVEUtTE9PUC1DSEVDSyB7IE9OLCBPRkYgfSIsCisiICBTZXQgdGhpcyB0byBPTiB0byBwcmV2 ZW50IEtlcm1pdCBmcm9tIHJlc3BvbmRpbmcgdG8gYSB0ZWxuZXQgbmVnb3RpYXRpb24iLAorIiAg c2VxdWVuY2UgdGhhdCBlbnRlcnMgYW4gaW5maW5pdGUgbG9vcC4gIFRoZSBkZWZhdWx0IGlzIE9G RiBiZWNhdXNlIHRoaXMiLAorIiAgc2hvdWxkIG5ldmVyIG9jY3VyLiIsCisiICIsCisiU0VUIFRF TE5FVCBCVUcgU0ItSU1QTElFUy1XSUxMLURPIHsgT04sIE9GRiB9IiwKKyIgIFNldCB0aGlzIHRv IE9OIHRvIGFsbG93IEtlcm1pdCB0byByZXNwb25kIHRvIHRlbG5ldCBzdWItbmVnb3RpYXRpb25z IGlmIiwKKyIgIHRoZSBwZWVyIGZvcmdldHMgdG8gcmVzcG9uZCB0byBXSUxMIHdpdGggRE8gb3Ig dG8gRE8gd2l0aCBXSUxMLiIsCisiICIsCisiU0VUIFRFTE5FVCBERUJVRyB7IE9OLCBPRkYgfSIs CisiICBTZXQgdGhpcyB0byBPTiB0byBkaXNwbGF5IHRlbG5ldCBuZWdvdGlhdGlvbnMgYXMgdGhl eSBhcmUgc2VudCBhbmQiLAorIiAgcmVjZWl2ZWQuIiwKKyIgIiwKKyJTRVQgVEVMTkVUIERFTEFZ LVNCIHsgT04sIE9GRiB9IiwKKyIgIFdoZW4gT04sIHRlbG5ldCBzdWJuZWdvdGlhdGlvbiByZXNw b25zZXMgYXJlIGRlbGF5ZWQgdW50aWwgYWZ0ZXIgYWxsIiwKKyIgIGF1dGhlbnRpY2F0aW9uIGFu ZCBlbmNyeXB0aW9uIG9wdGlvbnMgYXJlIGVpdGhlciBzdWNjZXNzZnVsbHkgbmVnb3RpYXRlZCIs CisiICBvciByZWZ1c2VkLiBUaGlzIGVuc3VyZXMgdGhhdCBwcml2YXRlIGRhdGEgaXMgcHJvdGVj dGVkLiAgV2hlbiBPRkYsIHRlbG5ldCIsCisiICBzdWJuZWdvdGlhdGlvbiByZXNwb25zZXMgYXJl IHNlbnQgaW1tZWRpYXRlbHkuICBUaGUgZGVmYXVsdCBpcyBPTi4iLAorIiAiLAorIlNFVCBURUxO RVQgRUNITyB7IExPQ0FMLCBSRU1PVEUgfSIsCisiICBLZXJtaXQncyBpbml0aWFsIGVjaG9pbmcg c3RhdGUgZm9yIFRFTE5FVCBjb25uZWN0aW9ucywgTE9DQUwgYnkgZGVmYXVsdC4iLAorIiAgQWZ0 ZXIgdGhlIGNvbm5lY3Rpb24gaXMgbWFkZSwgVEVMTkVUIG5lZ290aWF0aW9ucyBkZXRlcm1pbmUg dGhlIGVjaG9pbmcuIiwKKyIgIiwKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisjaWZkZWYgQ09NTUVO VAorIlNFVCBURUxORVQgRU5DUllQVElPTiB7IEFDQ0VQVEVELCBSRUZVU0VELCBSRVFVRVNURUQs IFJFUVVJUkVEIH0iLAorIiAgQUNDRVBUIG9yIFJFRlVTRSBlbmNyeXB0aW9uIGJpZHMsIG9yIGFj dGl2ZWx5IFJFUVVFU1QgZW5jcnlwdGlvbiBpbiBib3RoLiIsCisiICBkaXJlY3Rpb25zLiAgUkVR VUlSRUQgcmVmdXNlcyB0aGUgY29ubmVjdGlvbiBpZiBlbmNyeXB0aW9uIGlzIG5vdCIsCisiICBz dWNjZXNzZnVsbHkgbmVnb3RpYXRlZCBpbiBib3RoIGRpcmVjdGlvbnMuICBBQ0NFUFRFRCBieSBk ZWZhdWx0LiIsCisiICIsCisjZW5kaWYgLyogQ09NTUVOVCAqLworIlNFVCBURUxORVQgRU5DUllQ VElPTiBUWVBFIHsgQVVUT01BVElDLCBDQVNUMTI4X0NGQjY0LCBDQVNUMTI4X09GQjY0LCAiLAor IiAgQ0FTVDVfNDBfQ0ZCNjQsIENBU1Q1XzQwX09GQjY0LCBERVNfQ0ZCNjQsIERFU19PRkI2NCwg Tk9ORSB9IiwKKyIgIEFVVE9NQVRJQyBhbGxvd3MgdGhlIGhvc3QgdG8gY2hvb3NlIHRoZSBwcmVm ZXJyZWQgdHlwZSBvZiBlbmNyeXB0aW9uLiIsCisiICBPdGhlciB2YWx1ZXMgYWxsb3cgYSBzcGVj aWZpYyBlbmNyeXB0aW9uIG1ldGhvZCB0byBiZSBzcGVjaWZpZWQuIiwKKyIgIEFVVE9NQVRJQyBp cyB0aGUgZGVmYXVsdC4gIFRoZSBsaXN0IG9mIG9wdGlvbnMgd2lsbCB2YXJ5IGRlcGVuZGluZyIs CisiICBvbiB0aGUgZW5jcnlwdGlvbiB0eXBlcyBzZWxlY3RlZCBhdCBjb21waWxhdGlvbiB0aW1l LiIsCisiICIsCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX0VOVklST05N RU5UCisjaWZkZWYgQ09NTUVOVAorIlNFVCBURUxORVQgRU5WSVJPTk1FTlQgeyBPTiwgT0ZGLCB2 YXJpYWJsZS1uYW1lIFsgdmFsdWUgXSB9IiwKKyIgIFRoaXMgZmVhdHVyZSBsZXRzIEtlcm1pdCBz ZW5kIHRoZSB2YWx1ZXMgb2YgY2VydGFpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMiLAorIiAgdG8g dGhlIG90aGVyIGNvbXB1dGVyIGlmIGl0IGFza3MgZm9yIHRoZW0uICBUaGUgdmFyaWFibGUtbmFt ZSBjYW4gYmUgYW55IiwKKyIgIG9mIHRoZSBcIndlbGwta25vd25cIiB2YXJpYWJsZXMgXCJVU0VS XCIsIFwiSk9CXCIsIFwiQUNDVFwiLCBcIlBSSU5URVJcIiwiLAorIiAgXCJTWVNURU1UWVBFXCIs IG9yIFwiRElTUExBWVwiLiAgU29tZSBUZWxuZXQgc2VydmVycywgaWYgZ2l2ZW4gYSBVU0VSIiwK KyIgIHZhbHVlIGluIHRoaXMgd2F5LCB3aWxsIGFjY2VwdCBpdCBhbmQgdGhlcmVmb3JlIG5vdCBw cm9tcHQgeW91IGZvciB1c2VyIiwKKyIgIG5hbWUgd2hlbiB5b3UgbG9nIGluLiAgVGhlIGRlZmF1 bHQgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIHlvdXIgZW52aXJvbm1lbnQ7IiwKKyIgIHVzZSB0aGlz IGNvbW1hbmQgdG8gY2hhbmdlIG9yIHJlbW92ZSB0aGVtLiAgU2VlIFJGQzE1NzIgZm9yIGRldGFp bHMuICBZb3UiLAorIiAgbWF5IGFsc28gc3BlY2lmeSBPRkYgdG8gZGlzYWJsZSB0aGlzIGZlYXR1 cmUsIGFuZCBPTiB0byByZS1lbmFibGUgaXQuIiwKKyIgIiwKKyNlbHNlCisiU0VUIFRFTE5FVCBF TlZJUk9OTUVOVCB7IHZhcmlhYmxlLW5hbWUgWyB2YWx1ZSBdIH0iLAorIiAgVGhpcyBmZWF0dXJl IGxldHMgS2VybWl0IHNlbmQgdGhlIHZhbHVlcyBvZiBjZXJ0YWluIGVudmlyb25tZW50IHZhcmlh YmxlcyIsCisiICB0byB0aGUgb3RoZXIgY29tcHV0ZXIgaWYgaXQgYXNrcyBmb3IgdGhlbS4gIFRo ZSB2YXJpYWJsZS1uYW1lIGNhbiBiZSBhbnkiLAorIiAgb2YgdGhlIFwid2VsbC1rbm93blwiIHZh cmlhYmxlcyBcIlVTRVJcIiwgXCJKT0JcIiwgXCJBQ0NUXCIsIFwiUFJJTlRFUlwiLCIsCisiICBc IlNZU1RFTVRZUEVcIiwgb3IgXCJESVNQTEFZXCIuICBTb21lIFRlbG5ldCBzZXJ2ZXJzLCBpZiBn aXZlbiBhIFVTRVIiLAorIiAgdmFsdWUgaW4gdGhpcyB3YXksIHdpbGwgYWNjZXB0IGl0IGFuZCB0 aGVyZWZvcmUgbm90IHByb21wdCB5b3UgZm9yIHVzZXIiLAorIiAgbmFtZSB3aGVuIHlvdSBsb2cg aW4uICBUaGUgZGVmYXVsdCB2YWx1ZXMgYXJlIHRha2VuIGZyb20geW91ciBlbnZpcm9ubWVudDsi LAorIiAgdXNlIHRoaXMgY29tbWFuZCB0byBjaGFuZ2Ugb3IgcmVtb3ZlIHRoZW0uICBTZWUgUkZD MTU3MiBmb3IgZGV0YWlscy4iLAorIiAiLAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAv KiBDS19FTlZJUk9OTUVOVCAqLworI2lmZGVmIENLX0ZPUldBUkRfWAorIlNFVCBURUxORVQgRk9S V0FSRC1YIFhBVVRIT1JJVFktRklMRSA8ZmlsZT4iLAorIiAgSWYgeW91ciBYIFNlcnZlciByZXF1 aXJlcyBYIGF1dGhlbnRpY2F0aW9uIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIiwKKyIgIC5YYXV0 aG9yaXR5IGZpbGUgaXMgbm90IGRlZmluZWQgYnkgdGhlIFhBVVRIT1JJVFkgZW52aXJvbm1lbnQg dmFyaWFibGUsIiwKKyIgIHVzZSB0aGlzIGNvbW1hbmQgdG8gc3BlY2lmeSB0aGUgbG9jYXRpb24g b2YgdGhlIC5YYXV0aG9yaXR5IGZpbGUuIgorIiAgIiwKKyNlbmRpZiAvKiBDS19GT1JXQVJEX1gg Ki8KKyNpZmRlZiBDS19TTkRMT0MKKyJTRVQgVEVMTkVUIExPQ0FUSU9OIFsgdGV4dCBdIiwKKyIg IExvY2F0aW9uIHN0cmluZyB0byBzZW5kIHRvIHRoZSBUZWxuZXQgc2VydmVyIGlmIGl0IGFza3Mu ICBCeSBkZWZhdWx0IHRoaXMiLAorIiAgaXMgcGlja2VkIHVwIGZyb20gdGhlIExPQ0FUSU9OIGVu dmlyb25tZW50IHZhcmlhYmxlLiAgR2l2ZSB0aGlzIGNvbW1hbmQiLAorIiAgd2l0aCBubyB0ZXh0 IHRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLiIsCisiICIsCisjZW5kaWYgLyogQ0tfU05ETE9DICov CisiU0VUIFRFTE5FVCBORVdMSU5FLU1PREUgeyBOVlQsIEJJTkFSWS1NT0RFIH0geyBPRkYsIE9O LCBSQVcgfSIsCisKKyIgIERldGVybWluZXMgaG93IGNhcnJpYWdlIHJldHVybnMgYXJlIGhhbmRs ZWQgb24gVEVMTkVUIGNvbm5lY3Rpb25zLiAgVGhlcmUiLAorIiAgYXJlIHNlcGFyYXRlIHNldHRp bmdzIGZvciBOVlQgKEFTQ0lJKSBtb2RlIGFuZCBiaW5hcnkgbW9kZS4gIE9OIChkZWZhdWx0IiwK KyIgIGZvciBOVlQgbW9kZSkgbWVhbnMgQ1JMRiByZXByZXNlbnRzIENSLiAgT0ZGIG1lYW5zIENS IGZvbGxvd2VkIGJ5IE5VTCIsCisiICByZXByZXNlbnRzIENSLiAgUkFXIChkZWZhdWx0IGZvciBC SU5BUlkgbW9kZSkgbWVhbnMgQ1Igc3RhbmRzIGZvciBpdHNlbGYuIiwKKyIgIiwKKyNpZmRlZiBU Q1BTT0NLRVQKKyJTRVQgVEVMTkVUIFBST01QVC1GT1ItVVNFUklEIDxwcm9tcHQ+IiwKKyIgIFNw ZWNpZmllcyBhIGN1c3RvbSBwcm9tcHQgdG8gYmUgdXNlZCB3aGVuIHByb21wdGluZyBmb3IgYSB1 c2VyaWQuICBLZXJtaXQiLAorIiAgcHJvbXB0cyBmb3IgYSB1c2VyaWQgaWYgdGhlIGNvbW1hbmQ6 IiwKKyIgIiwKKyIgICAgU0VUIExPR0lOIFVTRVJJRCB7fSIsCisiICIsCisiICBoYXMgYmVlbiBp c3N1ZWQgcHJpb3IgdG8gYSBUZWxuZXQgYXV0aGVudGljYXRpb24gbmVnb3RpYXRpb24gZm9yIGFu IiwKKyIgIGF1dGhlbnRpY2F0aW9uIHR5cGUgdGhhdCByZXF1aXJlcyB0aGUgdHJhbnNtaXNzaW9u IG9mIGEgbmFtZSwgc3VjaCBhcyIsCisiICBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkLiIsCisiICIs CisjZW5kaWYgLyogVENQU09DS0VUICovCisiU0VUIFRFTE5FVCBSRU1PVEUtRUNITyB7IE9OLCBP RkYgfSIsCisiICBBcHBsaWVzIG9ubHkgdG8gaW5jb21pbmcgY29ubmVjdGlvbnMgY3JlYXRlZCB3 aXRoOiIsCisiICAgIFNFVCBIT1NUICogPHBvcnQ+IC9URUxORVQiLAorIiAgVGhpcyBjb21tYW5k IGRldGVybWluZXMgd2hldGhlciBLZXJtaXQgd2lsbCBhY3R1YWxseSBlY2hvIGNoYXJhY3RlcnMi LAorIiAgcmVjZWl2ZWQgZnJvbSB0aGUgcmVtb3RlIHdoZW4gaXQgaGFzIG5lZ290aWF0ZWQgdG8g ZG8gc28uICBUaGUgZGVmYXVsdCIsCisiICBpcyBPTi4gIFJlbW90ZSBlY2hvaW5nIG1heSBiZSB0 dXJuZWQgb2ZmIHdoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIHJlYWQiLAorIiAgYSBwYXNzd29yZCB3 aXRoIHRoZSBJTlBVVCBjb21tYW5kLiIsCisiICIsCisiU0VUIFRFTE5FVCBURVJNSU5BTC1UWVBF IG5hbWUiLAorIiAgVGhlIHRlcm1pbmFsIHR5cGUgdG8gc2VuZCB0byB0aGUgcmVtb3RlIFRFTE5F VCBob3N0LiAgSWYgbm9uZSBpcyBnaXZlbiwiLAorI2lmZGVmIE9TMgorIiAgeW91ciBjdXJyZW50 IFNFVCBURVJNSU5BTCBUWVBFIHZhbHVlIGlzIHNlbnQsIGUuZy4gVlQyMjAuIiwKKyIgIiwKKyNl bHNlCisiICB5b3VyIGxvY2FsIHRlcm1pbmFsIHR5cGUgaXMgc2VudC4iLAorIiAiLAorI2VuZGlm IC8qIE9TMiAqLworIlNFVCBURUxORVQgV0FJVC1GT1ItTkVHT1RJQVRJT05TIHsgT04sIE9GRiB9 IiwKKyIgIEVhY2ggVGVsbmV0IG9wdGlvbiBtdXN0IGJlIGZ1bGx5IG5lZ290aWF0ZWQgZWl0aGVy IE9uIG9yIE9mZiBiZWZvcmUgdGhlIiwKKyIgIHNlc3Npb24gY2FuIGNvbnRpbnVlLiAgVGhpcyBp cyBlc3BlY2lhbGx5IHRydWUgd2l0aCBvcHRpb25zIHRoYXQgcmVxdWlyZSIsCisiICBzdWJuZWdv dGlhdGlvbnMgc3VjaCBhcyBBdXRoZW50aWNhdGlvbiwgRW5jcnlwdGlvbiwgYW5kIEtlcm1pdDsg Zm9yIiwKKyIgIHByb3BlciBzdXBwb3J0IG9mIHRoZXNlIG9wdGlvbnMgS2VybWl0IG11c3Qgd2Fp dCBmb3IgdGhlIG5lZ290aWF0aW9ucyB0byIsCisiICBjb21wbGV0ZS4gIE9mIGNvdXJzZSwgS2Vy bWl0IGhhcyBubyB3YXkgb2Yga25vd2luZyB3aGV0aGVyIGEgcmVwbHkgaXMiLAorIiAgZGVsYXll ZCBvciBub3QgY29taW5nIGF0IGFsbCwgYW5kIHNvIHdpbGwgd2FpdCBhIG1pbnV0ZSBvciBtb3Jl IGZvciIsCisiICByZXF1aXJlZCByZXBsaWVzIGJlZm9yZSBjb250aW51aW5nIHRoZSBzZXNzaW9u LiAgSWYgeW91IGtub3cgdGhhdCBLZXJtaXQncyIsCisiICBUZWxuZXQgcGFydG5lciB3aWxsIG5v dCBiZSBzZW5kaW5nIHRoZSByZXF1aXJlZCByZXBsaWVzLCB5b3UgY2FuIHNldCB0aGlzIiwKKyIg IG9wdGlvbiBvZiBPRkYgdG8gYXZvaWQgdGhlIGxvbmcgdGltZW91dHMuICBPciB5b3UgY2FuIGlu c3RydWN0IEtlcm1pdCB0byIsCisiICBSRUZVU0Ugc3BlY2lmaWMgb3B0aW9ucyB3aXRoIHRoZSBT RVQgVEVMT1BUIGNvbW1hbmQuIiwKKyIiLAorIlR5cGUgU0hPVyBURUxORVQgdG8gc2VlIHRoZSBj dXJyZW50IHZhbHVlcyBvZiB0aGVzZSBwYXJhbWV0ZXJzLiIsCisiIiB9OworI2VuZGlmIC8qIFRO Q09ERSAqLworCisjaWZuZGVmIE5PU1BMCitzdGF0aWMgY2hhciAqaHh5bWFjcltdID0geworIlN5 bnRheDogU0VUIE1BQ1JPIHBhcmFtZXRlciB2YWx1ZSIsCisiICBDb250cm9scyB0aGUgYmVoYXZp b3Igb2YgbWFjcm9zLiIsCisiICIsCisiU0VUIE1BQ1JPIEVDSE8geyBPTiwgT0ZGIH0iLAorIiAg VGVsbHMgd2hldGhlciBjb21tYW5kcyBleGVjdXRlZCBmcm9tIGEgbWFjcm8gZGVmaW5pdGlvbiBz aG91bGQgYmUiLAorIiAgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uICBPRkYgYnkgZGVmYXVsdDsg dXNlIE9OIGZvciBkZWJ1Z2dpbmcuIiwKKyIgIiwKKyJTRVQgTUFDUk8gRVJST1IgeyBPTiwgT0ZG IH0iLAorIiAgVGVsbHMgd2hldGhlciBhIG1hY3JvIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IHRl cm1pbmF0ZWQgdXBvbiBhIGNvbW1hbmQiLAorIiAgZXJyb3IuICBUaGlzIHNldHRpbmcgaXMgbG9j YWwgdG8gdGhlIGN1cnJlbnQgbWFjcm8sIGFuZCBpbmhlcml0ZWQgYnkiLAorIiAgc3Vib3JkaW5h dGUgbWFjcm9zLiIsCisiIiB9OworI2VuZGlmIC8qIE5PU1BMICovCisKK3N0YXRpYyBjaGFyICpo bXh5cHJtW10gPSB7CisiU3ludGF4OiBTRVQgUFJPTVBUIFsgdGV4dCBdIiwKKyIgIiwKKyNpZmRl ZiBPUzIKKyJQcm9tcHQgdGV4dCBmb3IgdGhpcyBwcm9ncmFtLCBub3JtYWxseSAnSy05NT4nLiAg TWF5IGNvbnRhaW4gYmFja3NsYXNoIiwKKyNlbHNlCisjaWZkZWYgTUFDCisiUHJvbXB0IHRleHQg Zm9yIHRoaXMgcHJvZ3JhbSwgbm9ybWFsbHkgJ01hYy1LZXJtaXQ+Jy4gIE1heSBjb250YWluIGJh Y2tzbGFzaCIsCisjZWxzZQorIlByb21wdCB0ZXh0IGZvciB0aGlzIHByb2dyYW0sIG5vcm1hbGx5 ICdDLUtlcm1pdD4nLiAgTWF5IGNvbnRhaW4gYmFja3NsYXNoIiwKKyNlbmRpZiAvKiBNQUMgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyJjb2RlcyBmb3Igc3BlY2lhbCBlZmZlY3RzLiAgU3Vycm91bmQg YnkgeyB9IHRvIHByZXNlcnZlIGxlYWRpbmcgb3IgdHJhaWxpbmciLAorI2lmZGVmIE9TMgorInNw YWNlcy4gIElmIHRleHQgb21pdHRlZCwgcHJvbXB0IHJldmVydHMgdG8gSy05NT4uICBQcm9tcHQg Y2FuIGluY2x1ZGUiLAorI2Vsc2UKKyNpZmRlZiBNQUMKKyJzcGFjZXMuICBJZiB0ZXh0IG9taXR0 ZWQsIHByb21wdCByZXZlcnRzIHRvIE1hYy1LZXJtaXQ+LiAgUHJvbXB0IGNhbiBpbmNsdWRlIiwK KyNlbHNlCisic3BhY2VzLiAgSWYgdGV4dCBvbWl0dGVkLCBwcm9tcHQgcmV2ZXJ0cyB0byBDLUtl cm1pdD4uICBQcm9tcHQgY2FuIGluY2x1ZGUiLAorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IE1BQyAqLworInZhcmlhYmxlcyBsaWtlIFxcdihkaXIpIG9yIFxcdih0aW1lKSB0byBzaG93IGN1 cnJlbnQgZGlyZWN0b3J5IG9yIHRpbWUuIiwKKyIiIH07CisKKyNpZmRlZiBVTklYCitzdGF0aWMg Y2hhciAqaHh5d2lsZFtdID0geworIlN5bnRheDogU0VUIFdJTERDQVJELUVYUEFOU0lPTiB7IEtF Uk1JVCBbIHN3aXRjaCBdLCBTSEVMTCwgT04sIE9GRiB9IiwKKyIgIEtFUk1JVCAodGhlIGRlZmF1 bHQpIG1lYW5zIEMtS2VybWl0IGV4cGFuZHMgZmlsZW5hbWUgd2lsZGNhcmRzIGluIFNFTkQgYW5k IiwKKyIgIHNpbWlsYXIgY29tbWFuZHMgaXRzZWxmLCBhbmQgaW4gaW5jb21pbmcgR0VUIGNvbW1h bmRzLiAgT3B0aW9uYWwgc3dpdGNoZXMiLAorIiAgYXJlIC9OTy1NQVRDSC1ET1QtRklMRVMgKFwi KlwiIGFuZCBcIj9cIiBzaG91bGQgbm90IG1hdGNoIGFuIGluaXRpYWwiLAorIiAgcGVyaW9kIGlu IGEgZmlsZW5hbWU7IHRoaXMgaXMgdGhlIGRlZmF1bHQpIGFuZCAvTUFUQ0gtRE9ULUZJTEVTIGlm IHlvdSIsCisiICB3YW50IGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggXCIuXCIgaW5jbHVk ZWQuICBTRVQgV0lMRENBUkQgU0hFTEwiLAorIiAgbWVhbnMgdGhhdCBLZXJtaXQgYXNrcyB5b3Vy IHByZWZlcnJlZCBzaGVsbCB0byBleHBhbmQgd2lsZGNhcmRzICh0aGlzIiwKKyIgIHNob3VsZCBu b3QgYmUgbmVjZXNzYXJ5IGluIEMtS2VybWl0IDcuMCBhbmQgbGF0ZXIpLiAgSEVMUCBXSUxEQ0FS RCBmb3IiLAorIiAgZnVydGhlciBpbmZvcm1hdGlvbi4iLAorIiAiLAorIiAgVGhlIE9OIGFuZCBP RkYgY2hvaWNlcyBhbGxvdyB5b3UgdG8gZGlzYWJsZSBhbmQgcmVuYWJsZSB3aWxkY2FyZCIsCisi ICBwcm9jZXNzaW5nIGluZGVwZW5kZW50IG9mIHRoZSBLRVJNSVQgLyBTSEVMTCBjaG9pY2UuICBE aXNhYmxpbmcgd2lsZGNhcmRzIiwKKyIgIGFsbG93cyB5b3UgdG8gcHJvY2VzcyBhbiBhcnJheSBv ciBsaXN0IG9mIGZpbGVuYW1lcyB3aXRob3V0IGhhdmluZyB0byIsCisiICBjb25zaWRlciB3aGV0 aGVyIHRoZSBuYW1lcyBtaWdodCBjb250YWluIGxpdGVyYWwgd2lsZGNhcmQgY2hhcmFjdGVycy4i LAorIiAgV0FSTklORzogU0VUIFdJTEQgT0ZGIGFsc28gZGlzYWJsZXMgaW50ZXJuYWwgZmlsZW5h bWUgcGF0dGVybi1tYXRjaGluZywiLAorIiAgdXNlZCAoZm9yIGV4YW1wbGUpIGluIGNyZWF0aW5n IGJhY2t1cCBmaWxlcy4iLAorIiIgfTsKKyNlbHNlCitzdGF0aWMgY2hhciAqaHh5d2lsZFtdID0g eworIlN5bnRheDogU0VUIFdJTERDQVJELUVYUEFOU0lPTiB7IE9OLCBPRkYgfSIsCisiICBPTiAo dGhlIGRlZmF1bHQpIG1lYW5zIHRoYXQgZmlsZW5hbWVzIGdpdmVuIHRvIEtlcm1pdCBjb21tYW5k cyBzdWNoIGFzIiwKKyIgIFNFTkQgYW5kIERJUkVDVE9SWSBhcmUgYXV0b21hdGljYWxseSBleHBh bmRlZCBpbnRvIGxpc3RzIG9mIGZpbGVuYW1lcyBpZiIsCisiICB0aGV5IGNvbnRhaW4gc3BlY2lh bCAnd2lsZGNhcmQgY2hhcmFjdGVycycgc3VjaCBhcyAnKicuICBZb3UgY2FuIHJlZmVyZW5jZSIs CisiICBmaWxlcyB3aG9zZSBuYW1lcyBjb250YWlucyBzdWNoIGNoYXJhY3RlcnMgbGl0ZXJhbGx5 IGJ5IHByZWNlZGluZyBlYWNoIiwKKyIgIHN1Y2ggY2hhcmFjdGVyIHdpdGggYSBiYWNrc2xhc2gg J1xcJy4gIFdoZW4gZGVhbGluZyBwcm9ncmFtbWF0aWNhbGx5IHdpdGgiLAorIiAgYSBmaWxlIGxp c3QsIGhvd2V2ZXIsIHlvdSBzaG91bGQgU0VUIFdJTERDQVJELUVYUEFOU0lPTiBPRkYgdG8gZm9y Y2UiLAorIiAgdHJlYXQgZWFjaCBuYW1lIGluIHRoZSBsaXN0IGFzIGEgbGl0ZXJhbCBuYW1lLiAg U2VlIEhFTFAgV0lMRENBUkRTIGZvciIsCisiICBkZXRhaWxzIGFib3V0IHdpbGRjYXJkIHN5bnRh eC4iLAorIiIgfTsKKyNlbmRpZiAvKiBVTklYICovCisKKyNpZm5kZWYgTk9YRkVSCitzdGF0aWMg Y2hhciAqaHh5d2luZFtdID0geworIlN5bnRheDogU0VUIFdJTkRPVy1TSVpFIG51bWJlciIsCisi ICBTcGVjaWZpZXMgbnVtYmVyIG9mIHNsb3RzIGZvciBzbGlkaW5nIHdpbmRvd3MsIGkuZS4gdGhl IG51bWJlciBvZiBwYWNrZXRzIiwKKyIgIHRoYXQgY2FuIGJlIHRyYW5zbWl0dGVkIGJlZm9yZSB3 YWl0aW5nIGZvciBhY2tub3dsZWRnZW1lbnQuICBUaGUgZGVmYXVsdCIsCisjaWZkZWYgWFlaX0lO VEVSTkFMCisiICBmb3IgS2VybWl0IHByb3RvY29sIGlzIG9uZSwgdGhlIG1heGltdW0gaXMgMzI7 IGZvciBaTU9ERU0sIHRoZSBkZWZhdWx0IiwKKyIgIGlzIG5vIHdpbmRvd2luZyAoMCkuICBGb3Ig Wk1PREVNLCB0aGUgd2luZG93IHNpemUgaXMgcmVhbGx5IHRoZSBwYWNrZXQiLAorIiAgbGVuZ3Ro LCBhbmQgaXMgdXNlZCBvbmx5IHdoZW4gbm9uLXdpbmRvd2VkIChzdHJlYW1pbmcpIHRyYW5zZmVy cyBmYWlsOyB0aGUiLAorIiAgWk1PREVNIHdpbmRvdyBzaXplIHNob3VsZCBiZSBhIGxhcmdpc2gg bnVtYmVyLCBsaWtlIDEwMjQsIGFuZCBpdCBzaG91bGQgYmUiLAorIiAgYSBtdWx0aXBsZSBvZiA2 NC4iLAorI2Vsc2UKKyIgIGlzIG9uZSwgdGhlIG1heGltdW0gaXMgMzIuICBJbmNyZWFzZWQgd2lu ZG93IHNpemUgbWlnaHQgcmVzdWx0IGluIHJlZHVjZWQiLAorIiAgbWF4aW11bSBwYWNrZXQgbGVu Z3RoLiAgVXNlIHNsaWRpbmcgd2luZG93cyBmb3IgaW1wcm92ZWQgZWZmaWNpZW5jeSBvbiIsCisi ICBjb25uZWN0aW9ucyB3aXRoIGxvbmcgZGVsYXlzLiAgQSBmdWxsIGR1cGxleCBjb25uZWN0aW9u IGlzIHJlcXVpcmVkLCBhcyIsCisiICB3ZWxsIGFzIGEgY29vcGVyYXRpbmcgS2VybWl0IG9uIHRo ZSBvdGhlciBlbmQuIiwKKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8KKyIiIH07CisKK3N0YXRp YyBjaGFyICpoeHlycHRbXSA9IHsKKyJTeW50YXg6IFNFVCBSRVBFQVQgeyBDT1VOVFMgeyBPTiwg T0ZGIH0sIFBSRUZJWCA8Y29kZT4gfSIsCisiICBTRVQgUkVQRUFUIENPVU5UUyB0dXJucyB0aGUg cmVwZWF0LWNvdW50IGNvbXByZXNzaW9uIG1lY2hhbmlzbSBPTiBhbmQgT0ZGLiIsCisiICBUaGUg ZGVmYXVsdCBpcyBPTi4gIFNFVCBSRVBFQVQgUFJFRklYIDxjb2RlPiBzZXRzIHRoZSByZXBlYXQt Y291bnQgcHJlZml4IiwKKyIgIGNoYXJhY3RlciB0byB0aGUgZ2l2ZW4gY29kZS4gIFRoZSBkZWZh dWx0IGlzIDEyNiAodGlsZGUpLiIsCisiIiB9OworCitzdGF0aWMgY2hhciAqaHh5cmN2W10gPSB7 CisiU3ludGF4OiBTRVQgUkVDRUlWRSBwYXJhbWV0ZXIgdmFsdWUiLAorIiAgU3BlY2lmaWVzIHBh cmFtZXRlcnMgZm9yIGluYm91bmQgcGFja2V0czoiLAorIiAiLAorI2lmbmRlZiBOT0NTRVRTCisi U0VUIFJFQ0VJVkUgQ0hBUkFDVEVSLVNFVCB7IEFVVE9NQVRJQywgTUFOVUFMIH0iLAorIiAgV2hl dGhlciB0byBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byBhbiBhcHByb3ByaWF0ZSBmaWxlLWNoYXJh Y3RlciBzZXQgYmFzZWQiLAorIiAgb24gdGhlIHRyYW5zZmVyIGNoYXJhY3Rlci1zZXQgYW5ub3Vu Y2VyLCBpZiBhbnksIG9mIGFuIGluY29taW5nIHRleHQgZmlsZS4iLAorIiAgQVVUT01BVElDIGJ5 IGRlZmF1bHQuICBBbHNvIHNlZSBIRUxQIEFTU09DSUFURS4iLAorIiAiLAorI2VuZGlmIC8qIE5P Q1NFVFMgKi8KKyJTRVQgUkVDRUlWRSBDT05UUk9MLVBSRUZJWCBudW1iZXIiLAorIiAgQVNDSUkg dmFsdWUgb2YgcHJlZml4IGNoYXJhY3RlciB1c2VkIGZvciBxdW90aW5nIGNvbnRyb2wgY2hhcmFj dGVycyBpbiIsCisiICBwYWNrZXRzIHRoYXQgS2VybWl0IHJlY2VpdmVzLCBub3JtYWxseSAzNSAo bnVtYmVyIHNpZ24pLiAgRG9uJ3QgY2hhbmdlIiwKKyIgIHRoaXMgdW5sZXNzIHNvbWV0aGluZyBp cyB3cm9uZyB3aXRoIHRoZSBvdGhlciBLZXJtaXQgcHJvZ3JhbS4iLAorIiAiLAorIlNFVCBSRUNF SVZFIEVORC1PRi1QQUNLRVQgbnVtYmVyIiwKKyIgIEFTQ0lJIHZhbHVlIG9mIGNvbnRyb2wgY2hh cmFjdGVyIHRoYXQgdGVybWluYXRlcyBpbmNvbWluZyBwYWNrZXRzLCIsCisiICBub3JtYWxseSAx MyAoY2FycmlhZ2UgcmV0dXJuKS4iLAorIiAiLAorI2lmZGVmIENLWFhDSEFSCisiU0VUIFJFQ0VJ VkUgSUdOT1JFLUNIQVJBQ1RFUiBudW1iZXIiLAorIiAgQVNDSUkgdmFsdWUgb2YgY2hhcmFjdGVy IHRvIGJlIGRpc2NhcmRlZCB3aGVuIHJlY2VpdmluZyBwYWNrZXRzLCBzdWNoIGFzIiwKKyIgIGxp bmUgZm9sZGluZyBjaGFyYWN0ZXJzLiIsCisiICIsCisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKyJT RVQgUkVDRUlWRSBNT1ZFLVRPIFsgZGlyZWN0b3J5IF0iLAorIiAgSWYgYSBkaXJlY3RvcnkgbmFt ZSBpcyBzcGVjaWZpZWQsIHRoZW4gZXZlcnkgZmlsZSB0aGF0IGlzIHJlY2VpdmVkIiwKKyIgIHN1 Y2Nlc3NmdWxseSBpcyBtb3ZlZCB0byB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGltbWVkaWF0ZWx5IGFm dGVyIHJlY2VwdGlvbiIsCisiICBpcyBjb21wbGV0ZS4gIE9taXQgdGhlIGRpcmVjdG9yeSBuYW1l IHRvIHJlbW92ZSBhbnkgcHJldmlvdXNseSBzZXQgbW92ZS10byIsCisiICBkaXJlY3RvcnkuIiwK KyIgIiwKKyJTRVQgUkVDRUlWRSBQQUNLRVQtTEVOR1RIIG51bWJlciIsCisiICBNYXhpbXVtIGxl bmd0aCBwYWNrZXQgdGhlIG90aGVyIEtlcm1pdCBzaG91bGQgc2VuZC4iLAorIiAiLAorIlNFVCBS RUNFSVZFIFBBRERJTkcgbnVtYmVyIiwKKyIgIE51bWJlciBvZiBwcmVwYWNrZXQgcGFkZGluZyBj aGFyYWN0ZXJzIHRvIGFzayBmb3IgKG5vcm1hbGx5IDApLiIsCisiICIsCisiU0VUIFJFQ0VJVkUg UEFELUNIQVJBQ1RFUiBudW1iZXIiLAorIiAgQVNDSUkgdmFsdWUgb2YgY29udHJvbCBjaGFyYWN0 ZXIgdG8gdXNlIGZvciBwYWRkaW5nIChub3JtYWxseSAwKS4iLAorIiAiLAorIlNFVCBSRUNFSVZF IFBBVEhOQU1FUyB7T0ZGLCBBQlNPTFVURSwgUkVMQVRJVkUsIEFVVE99IiwKKyIgIElmIGEgcmVj b2duaXphYmxlIHBhdGggKGRpcmVjdG9yeSwgZGV2aWNlKSBzcGVjaWZpY2F0aW9uIGFwcGVhcnMg aW4gYW4iLAorIiAgaW5jb21pbmcgZmlsZW5hbWUsIHN0cmlwIGl0IE9GRiBiZWZvcmUgdHJ5aW5n IHRvIGNyZWF0ZSB0aGUgb3V0cHV0IGZpbGUuIiwKKyNpZmRlZiBDS19NS0RJUgorIiAgT3RoZXJ3 aXNlLCB0aGVuIGlmIGFueSBvZiB0aGUgZGlyZWN0b3JpZXMgaW4gdGhlIHBhdGggZG9uJ3QgZXhp c3QsIEtlcm1pdCIsCisiICB0cmllcyB0byBjcmVhdGUgdGhlbSwgcmVsYXRpdmUgdG8geW91ciBj dXJyZW50IG9yIGRvd25sb2FkIGRpcmVjdG9yeSwgb3IiLAorIiAgYWJzb2x1dGVseSwgYXMgc3Bl Y2lmaWVkLiAgUkVMQVRJVkUgbWVhbnMgZm9yY2UgYWxsIGluY29taW5nIG5hbWVzLCBldmVuIiwK KyIgIGlmIHRoZXkgYXJlIGFic29sdXRlLCB0byBiZSByZWxhdGl2ZSB0byB5b3VyIGN1cnJlbnQg b3IgZG93bmxvYWQgZGlyZWN0b3J5LiIKKywKKyIgIEFVVE8sIHdoaWNoIGlzIHRoZSBkZWZhdWx0 LCBtZWFucyBSRUxBVElWRSBpZiB0aGUgZmlsZSBzZW5kZXIgaW5kaWNhdGVzIGluIiwKKyIgIGFk dmFuY2UgdGhhdCB0aGlzIGlzIGEgcmVjdXJzaXZlIHRyYW5zZmVyLCBvdGhlcndpc2UgT0ZGLiIs CisjZW5kaWYgLyogQ0tfTUtESVIgKi8KKyIgIiwKKyJTRVQgUkVDRUlWRSBQQVVTRSBudW1iZXIi LAorIiAgTWlsbGlzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4gcGFja2V0cywgbm9ybWFsbHkgMC4i LAorIiAiLAorCisjaWZkZWYgQ0tfUEVSTVMKKyJTRVQgUkVDRUlWRSBQRVJNSVNTSU9OUyB7IE9O LCBPRkYgfSIsCisiICBXaGV0aGVyIHRvIGNvcHkgZmlsZSBwZXJtaXNzaW9ucyBmcm9tIGluYm91 bmQgQXR0cmlidXRlIHBhY2tldHMuIiwKKyIgIiwKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCisi U0VUIFJFQ0VJVkUgUkVOQU1FLVRPIFsgdGVtcGxhdGUgXSIsCisiICBJZiBhIHRlbXBsYXRlIGlz IHNwZWNpZmllZCwgdGhlbiBldmVyeSBmaWxlIHRoYXQgaXMgcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5 IiwKKyIgIFwKK2lzIHJlbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiB0ZW1wbGF0ZSBpbW1l ZGlhdGVseSBhZnRlciBpdCBpcyByZWNlaXZlZC4iLAorIiAgXAorVGhlIHRlbXBsYXRlIHNob3Vs ZCBpbmNsdWRlIHZhcmlhYmxlcyBsaWtlIFxcdihmaWxlbmFtZSkgb3IgXFx2KGZpbGVudW1iZXIp LiIsCisiICBPbWl0IHRoZSB0ZW1wbGF0ZSB0byByZW1vdmUgYW55IHRlbXBsYXRlIHByZXZpb3Vz bHkgc2V0LiIsCisiICIsCisiU0VUIFJFQ0VJVkUgU1RBUlQtT0YtUEFDS0VUIG51bWJlciIsCisi ICBBU0NJSSB2YWx1ZSBvZiBjaGFyYWN0ZXIgdGhhdCBtYXJrcyBzdGFydCBvZiBpbmJvdW5kIHBh Y2tldC4iLAorIiAiLAorIlNFVCBSRUNFSVZFIFRJTUVPVVQgbnVtYmVyIiwKKyIgIE51bWJlciBv ZiBzZWNvbmRzIHRoZSBvdGhlciBLZXJtaXQgc2hvdWxkIHdhaXQgZm9yIGEgcGFja2V0IGJlZm9y ZSBzZW5kaW5nIiwKKyIgIGEgTkFLIG9yIHJldHJhbnNtaXR0aW5nLiIsCisjaWZkZWYgVk1TCisi ICIsCisiU0VUIFJFQ0VJVkUgVkVSU0lPTi1OVU1CRVJTIHsgT04sIE9GRiB9IiwKKyIgIElmIE9O LCBhbmQgaW4gaW5jb21pbmcgZmlsZW5hbWUgaW5jbHVkZXMgYSBWTVMgdmVyc2lvbiBudW1iZXIs IHVzZSBpdCB3aGVuIiwKKyIgIGNyZWF0aW5nIHRoZSBmaWxlLiAgSWYgT0ZGICh3aGljaCBpcyB0 aGUgZGVmYXVsdCksIHN0cmlwIGFueSBWTVMgdmVyc2lvbiIsCisiICBudW1iZXIgZnJvbSBpbmNv bWluZyBmaWxlbmFtZXMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSBmaWxlLCBcCitj YXVzaW5nIiwKKyIgIHRoZSBuZXcgZmlsZSB0byByZWNlaXZlIHRoZSBuZXh0IGhpZ2hlc3QgdmVy c2lvbiBudW1iZXIuIiwKKyNlbmRpZiAvKiBWTVMgKi8KKyIiIH07CisKK3N0YXRpYyBjaGFyICpo eHlzbmRbXSA9IHsKKyJTeW50YXg6IFNFVCBTRU5EIHBhcmFtZXRlciB2YWx1ZSIsCisiICBTcGVj aWZpZXMgcGFyYW1ldGVycyBmb3Igb3V0Ym91bmQgZmlsZXMgb3IgcGFja2V0cy4iLAorIiAiLAor IlNFVCBTRU5EIEJBQ0tVUCB7IE9OLCBPRkYgfSIsCisiICBUZWxscyB3aGV0aGVyIHRvIGluY2x1 ZGUgYmFja3VwIGZpbGVzIHdoZW4gc2VuZGluZyBmaWxlIGdyb3Vwcy4gIEJhY2t1cCIsCisiICBm aWxlcyBhcmUgdGhvc2UgY3JlYXRlZCBieSBLZXJtaXQsIEVNQUNTLCBldGMsIHdoZW4gY3JlYXRp bmcgYSBuZXcgZmlsZSIsCisiICB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5n IGZpbGUuICBBIGJhY2t1cCBmaWxlIGhhcyBhIHZlcnNpb24iLAorIiAgYXBwZW5kZWQgdG8gaXRz IG5hbWUsIGUuZy4gb29mYS50eHQufjIzfi4gIE9OIGlzIHRoZSBkZWZhdWx0LCBtZWFuaW5nIiwK KyIgIGRvbid0IGV4Y2x1ZGUgYmFja3VwIGZpbGVzLiAgVXNlIE9GRiB0byBleGNsdWRlIGJhY2t1 cCBmaWxlcyBmcm9tIGdyb3VwIiwKKyIgIHRyYW5zZmVycy4iLAorIiAiLAorI2lmbmRlZiBOT0NT RVRTCisiU0VUIFNFTkQgQ0hBUkFDVEVSLVNFVCB7IEFVVE9NQVRJQywgTUFOVUFMIH0iLAorIiAg V2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHN3aXRjaCB0byBhbiBhcHByb3ByaWF0ZSBmaWxlLWNo YXJhY3RlciB3aGVuIGEiLAorIiAgU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgY29tbWFuZCBp cyBnaXZlbiwgb3IgdmljZSB2ZXJzYS4gIEFVVE9NQVRJQyBieSIsCisiICBkZWZhdWx0LiAgQWxz byBzZWUgSEVMUCBBU1NPQ0lBVEUuIiwKKyIgIiwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyJT RVQgU0VORCBDT05UUk9MLVBSRUZJWCBudW1iZXIiLAorIiAgQVNDSUkgdmFsdWUgb2YgcHJlZml4 IGNoYXJhY3RlciB1c2VkIGZvciBxdW90aW5nIGNvbnRyb2wgY2hhcmFjdGVycyBpbiIsCisiICBw YWNrZXRzIHRoYXQgS2VybWl0IHNlbmRzLCBub3JtYWxseSAzNSAobnVtYmVyIHNpZ24pLiIsCisi ICIsCisjaWZkZWYgQ0tYWENIQVIKKyJTRVQgU0VORCBET1VCTEUtQ0hBUkFDVEVSIG51bWJlciIs CisiICBBU0NJSSB2YWx1ZSBvZiBjaGFyYWN0ZXIgdG8gYmUgZG91YmxlZCB3aGVuIHNlbmRpbmcg cGFja2V0cywgc3VjaCBhcyBhbiIsCisiICBYLjI1IFBBRCBlc2NhcGUgY2hhcmFjdGVyLiIsCisi ICIsCisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKyJTRVQgU0VORCBFTkQtT0YtUEFDS0VUIG51bWJl ciIsCisiICBBU0NJSSB2YWx1ZSBvZiBjb250cm9sIGNoYXJhY3RlciB0byB0ZXJtaW5hdGUgYW4g b3V0Ym91bmQgcGFja2V0LCIsCisiICBub3JtYWxseSAxMyAoY2FycmlhZ2UgcmV0dXJuKS4iLAor IiAiLAorIlNFVCBTRU5EIE1PVkUtVE8gWyBkaXJlY3RvcnkgXSIsCisiICBcCitJZiBhIGRpcmVj dG9yeSBuYW1lIGlzIHNwZWNpZmllZCwgdGhlbiBldmVyeSBmaWxlIHRoYXQgaXMgc2VudCBzdWNj ZXNzZnVsbHkiLAorIiAgaXMgbW92ZWQgdG8gdGhlIGdpdmVuIGRpcmVjdG9yeSBpbW1lZGlhdGVs eSBhZnRlciBpdCBpcyBzZW50LiIsCisiICBPbWl0IHRoZSBkaXJlY3RvcnkgbmFtZSB0byByZW1v dmUgYW55IHByZXZpb3VzbHkgc2V0IG1vdmUtdG8gZGlyZWN0b3J5LiIsCisiICIsCisiU0VUIFNF TkQgUEFDS0VULUxFTkdUSCBudW1iZXIiLAorIiAgTWF4aW11bSBsZW5ndGggcGFja2V0IHRvIHNl bmQsIGV2ZW4gaWYgb3RoZXIgS2VybWl0IGFza3MgZm9yIGxvbmdlciBvbmVzLiIsCisiICBUaGlz IGNvbW1hbmQgY2FuIG5vdCBiZSB1c2VkIHRvIGZvcmNlIHBhY2tldHMgdG8gYmUgc2VudCB0aGF0 IGFyZSBsb25nZXIiLAorIiAgdGhhbiB0aGUgbGVuZ3RoIHJlcXVlc3RlZCBieSB0aGUgcmVjZWl2 ZXIuICBVc2UgdGhpcyBjb21tYW5kIG9ubHkgdG8iLAorIiAgZm9yY2Ugc2hvcnRlciBvbmVzLiIs CisiICIsCisiU0VUIFNFTkQgUEFERElORyBudW1iZXIiLAorIiAgTnVtYmVyIG9mIHByZXBhY2tl dCBwYWRkaW5nIGNoYXJhY3RlcnMgdG8gc2VuZC4iLAorIiAiLAorIlNFVCBTRU5EIFBBRC1DSEFS QUNURVIgbnVtYmVyIiwKKyIgIEFTQ0lJIHZhbHVlIG9mIGNvbnRyb2wgY2hhcmFjdGVyIHRvIHVz ZSBmb3IgcGFkZGluZy4iLAorIiAiLAorIlNFVCBTRU5EIFBBVEhOQU1FUyB7T0ZGLCBBQlNPTFVU RSwgUkVMQVRJVkV9IiwKKyIgIEluY2x1ZGUgdGhlIHBhdGggKGRldmljZSwgZGlyZWN0b3J5KSBw b3J0aW9uIHdpdGggdGhlIGZpbGUgbmFtZSB3aGVuIiwKKyIgIHNlbmRpbmcgaXQgYXMgc3BlY2lm aWVkOyBBQlNPTFVURSBtZWFucyB0byBzZW5kIHRoZSB3aG9sZSBwYXRobmFtZSwiLAorIiAgUkVM QVRJVkUgbWVhbnMgdG8gaW5jbHVkZSB0aGUgcGF0aG5hbWUgcmVsYXRpdmUgdG8gdGhlIGN1cnJl bnQgZGlyZWN0b3J5LiIsCisiICBBcHBsaWVzIHRvIHRoZSBhY3R1YWwgZmlsZW5hbWUsIG5vdCB0 byB0aGUgXCJhcy1uYW1lXCIuICBUaGUgZGVmYXVsdCBpcyIsCisiICBPRkYuIiwKKyIgIiwKKyJT RVQgU0VORCBQQVVTRSBudW1iZXIiLAorIiAgTWlsbGlzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4g cGFja2V0cywgbm9ybWFsbHkgMC4iLAorIiAiLAorCisjaWZkZWYgQ0tfUEVSTVMKKyJTRVQgU0VO RCBQRVJNSVNTSU9OUyB7IE9OLCBPRkYgfSIsCisiICBXaGV0aGVyIHRvIGluY2x1ZGUgZmlsZSBw ZXJtaXNzaW9ucyBpbiBvdXRib3VuZCBBdHRyaWJ1dGUgcGFja2V0cy4iLAorIiAiLAorI2VuZGlm IC8qIENLX1BFUk1TICovCisKKyJTRVQgU0VORCBSRU5BTUUtVE8gWyB0ZW1wbGF0ZSBdIiwKKyIg IElmIGEgdGVtcGxhdGUgaXMgc3BlY2lmaWVkLCB0aGVuIGV2ZXJ5IGZpbGUgdGhhdCBpcyBzZW50 IHN1Y2Nlc3NmdWxseSIsCisiICBpcyByZW5hbWVkIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gdGVt cGxhdGUgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaXMgc2VudC4iLAorIiAgXAorVGhlIHRlbXBsYXRl IHNob3VsZCBpbmNsdWRlIHZhcmlhYmxlcyBsaWtlIFxcdihmaWxlbmFtZSkgb3IgXFx2KGZpbGVu dW1iZXIpLiIsCisiICBPbWl0IHRoZSB0ZW1wbGF0ZSB0byByZW1vdmUgYW55IHRlbXBsYXRlIHBy ZXZpb3VzbHkgc2V0LiIsCisiICIsCisiU0VUIFNFTkQgU1RBUlQtT0YtUEFDS0VUIG51bWJlciIs CisiICBBU0NJSSB2YWx1ZSBvZiBjaGFyYWN0ZXIgdG8gbWFyayBzdGFydCBvZiBvdXRib3VuZCBw YWNrZXQuIiwKKyIgIiwKKyNpZmRlZiBDS19USU1FUlMKKyJTRVQgU0VORCBUSU1FT1VUIG51bWJl ciBbIHsgRFlOQU1JQyBbIG1pbiBtYXggXSBdLCBGSVhFRCB9IF0iLAorI2Vsc2UKKyJTRVQgU0VO RCBUSU1FT1VUIG51bWJlciIsCisjZW5kaWYgLyogQ0tfVElNRVJTICovCisKKyIgIE51bWJlciBv ZiBzZWNvbmRzIHRvIHdhaXQgZm9yIGEgcGFja2V0IGJlZm9yZSBzZW5kaW5nIE5BSyBvciIsCisj aWZkZWYgQ0tfVElNRVJTCisiICByZXRyYW5zbWl0dGluZy4gIEluY2x1ZGUgdGhlIHdvcmQgRFlO QU1JQyBhZnRlciB0aGUgbnVtYmVyIGluIHRoZSIsCisiICBTRVQgU0VORCBUSU1FT1VUIGNvbW1h bmQgdG8gaGF2ZSBLZXJtaXQgY29tcHV0ZSB0aGUgdGltZW91dHMgZHluYW1pY2FsbHkiLAorIiAg dGhyb3VnaG91dCB0aGUgdHJhbnNmZXIgYmFzZWQgb24gdGhlIHBhY2tldCByYXRlLiAgSW5jbHVk ZSB0aGUgd29yZCBGSVhFRCIsCisiICB0byB1c2UgdGhlIFwibnVtYmVyXCIgZ2l2ZW4gdGhyb3Vn aG91dCB0aGUgdHJhbnNmZXIuICBEWU5BTUlDIGlzIHRoZSIsCisiICBkZWZhdWx0LiAgQWZ0ZXIg RFlOQU1JQyB5b3UgbWF5IGluY2x1ZGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuIiwKKyIg IFNFVCBTRU5EIFRJTUVPVVQgLTEgRklYRUQgbWVhbnMgbm8gdGltZW91dHMuIiwKKyNlbHNlCisi ICByZXRyYW5zbWl0dGluZy4iLAorI2VuZGlmIC8qIENLX1RJTUVSUyAqLworI2lmZGVmIFZNUwor IiAiLAorIlNFVCBTRU5EIFZFUlNJT04tTlVNQkVSUyB7IE9OLCBPRkYgfSIsCisiICBJZiBPTiwg aW5jbHVkZSBWTVMgdmVyc2lvbiBudW1iZXJzIGluIG91dGJvdW5kIGZpbGVuYW1lcy4gIElmIE9G RiAod2hpY2giLAorIiAgaXMgdGhlIGRlZmF1bHQpLCBzdHJpcCB2ZXJzaW9uIG51bWJlcnMuIiwK KyNlbmRpZiAvKiBWTVMgKi8KKyIiIH07CisKK3N0YXRpYyBjaGFyICpoeHl4ZmVyW10gPSB7Cisi U3ludGF4OiBTRVQgVFJBTlNGRVIgKG9yIFhGRVIpIHBhcmFtZXRlciB2YWx1ZSIsCisiICIsCisi Q2hvaWNlczoiLAorIiAiLAorIlNFVCBUUkFOU0ZFUiBCRUxMIHsgT0ZGLCBPTiB9IiwKKyIgIFdo ZXRoZXIgdG8gcmluZyB0aGUgdGVybWluYWwgYmVsbCBhdCB0aGUgZW5kIG9mIGEgZmlsZSB0cmFu c2Zlci4iLAorIiAiLAorI2lmZGVmIFhGUkNBTgorIlNFVCBUUkFOU0ZFUiBDQU5DRUxMQVRJT04g eyBPRkYsIE9OIFsgPGNvZGU+IFsgPG51bWJlcj4gXSBdIH0iLAorIiAgT0ZGIGRpc2FibGVzIHJl bW90ZS1tb2RlIHBhY2tldC1tb2RlIGNhbmNlbGxhdGlvbiBmcm9tIHRoZSBrZXlib2FyZC4iLAor IiAgT04gZW5hYmxlcyBpdC4gIFRoZSBvcHRpb25hbCA8Y29kZT4gaXMgdGhlIGNvbnRyb2wgY2hh cmFjdGVyIHRvIHVzZSBmb3IiLAorIiAgY2FuY2VsbGF0aW9uOyB0aGUgb3B0aW9uYWwgPG51bWJl cj4gaXMgaG93IG1hbnkgY29uc2VjdXRpdmUgb2NjdXJyZW5jZXMiLAorIiAgb2YgdGhlIGdpdmVu IGNvbnRyb2wgY2hhcmFjdGVyIGFyZSByZXF1aXJlZCBmb3IgY2FuY2VsbGF0aW9uLiIsCisiICIs CisjZW5kaWYgLyogWEZSQ0FOICovCisiU0VUIFRSQU5TRkVSIElOVEVSUlVQVElPTiB7IE9OLCBP RkYgfSIsCisiICBUUkFOU0ZFUiBJTlRFUlJVUFRJT04gaXMgbm9ybWFsbHkgT04sIGFsbG93aW5n IGZvciBpbnRlcnJ1cHRpb24gb2YgYSBmaWxlIiwKKyIgIHRyYW5zZmVyIGluIHByb2dyZXNzIGJ5 IHR5cGluZyBjZXJ0YWluIGNoYXJhY3RlcnMgd2hpbGUgdGhlIGZpbGUtdHJhbnNmZXIiLAorIiAg ZGlzcGxheSBpcyBhY3RpdmUuICBTRVQgVFJBTlNGRVIgSU5URVJSVVBUSU9OIE9GRiBkaXNhYmxl cyBpbnRlcnJ1cHRpb24iLAorIiAgb2YgZmlsZSB0cmFuc2ZlciBmcm9tIHRoZSBrZXlib2FyZCBp biBsb2NhbCBtb2RlLiIsCisiICIsCisjaWZuZGVmIE5PU1BMCisiU0VUIFRSQU5TRkVSIENSQy1D QUxDVUxBVElPTiB7IE9GRiwgT04gfSIsCisiICBUZWxscyB3aGV0aGVyIEtlcm1pdCBzaG91bGQg YWNjdW11bGF0ZSBhIEN5Y2xpYyBSZWR1bmRhbmN5IENoZWNrIGZvciAiLAorIiAgZWFjaCBmaWxl IHRyYW5zZmVyLiAgTm9ybWFsbHkgT04sIGluIHdoaWNoIGNhc2UgdGhlIENSQyB2YWx1ZSBpcyBh dmFpbGFibGUiLAorIiAgaW4gdGhlIFxcdihjcmMxNikgdmFyaWFibGUgYWZ0ZXIgdGhlIHRyYW5z ZmVyLiAgQWRkcyBzb21lIG92ZXJoZWFkLiAgVXNlIiwKKyIgIFNFVCBUUkFOU0ZFUiBDUkMgT0ZG IHRvIGRpc2FibGUuIiwKKyIgIiwKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT0NTRVRT CisiU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgbmFtZSIsCisiICBTZWxlY3RzIHRoZSBjaGFy YWN0ZXIgc2V0IHVzZWQgdG8gcmVwcmVzZW50IHRleHR1YWwgZGF0YSBpbiBLZXJtaXQiLAorIiAg cGFja2V0cy4gIFRleHQgY2hhcmFjdGVycyBhcmUgdHJhbnNsYXRlZCB0by9mcm9tIHRoZSBGSUxF IENIQVJBQ1RFUi1TRVQuIiwKKyIgIENob2ljZXM6IiwKKyIgIiwKKyIgIFRSQU5TUEFSRU5UIChu byB0cmFuc2xhdGlvbiwgdGhlIGRlZmF1bHQpIiwKKyIgIEFTQ0lJIiwKKyIgIExBVElOMSAoSVNP IDg4NTktMSBMYXRpbiBBbHBoYWJldCAxKSIsCisjaWZuZGVmIE5PTEFUSU4yCisiICBMQVRJTjIg KElTTyA4ODU5LTIgTGF0aW4gQWxwaGFiZXQgMikiLAorI2VuZGlmIC8qIE5PTEFUSU4yICovCisi ICBMQVRJTjkgKElTTyA4ODU5LTE1IExhdGluIEFscGhhYmV0IDkpIiwKKyNpZmRlZiBDWVJJTExJ QworIiAgQ1lSSUxMSUMtSVNPIChJU08gODg1OS01IExhdGluL0N5cmlsbGljKSIsCisjZW5kaWYg LyogQ1lSSUxMSUMgKi8KKyNpZmRlZiBHUkVFSworIiAgR1JFRUstSVNPIChJU08gODg1OS03IExh dGluL0dyZWVrKSIsCisjZW5kaWYgLyogR1JFRUsgKi8KKyNpZmRlZiBIRUJSRVcKKyIgIEhFQlJF Vy1JU08gKElTTyA4ODU5LTggTGF0aW4vSGVicmV3KSIsCisjZW5kaWYgLyogSEVCUkVXICovCisj aWZkZWYgS0FOSkkKKyIgIEpBUEFORVNFLUVVQyAoSklTIFggMDIwOCBLYW5qaSArIFJvbWFuIGFu ZCBLYXRha2FuYSkiLAorI2VuZGlmIC8qIEtBTkpJICovCisjaWZkZWYgVU5JQ09ERQorIiAgVUNT LTIgKElTTyAxMDY0NiAvIFVuaWNvZGUgMi1ieXRlIGZvcm0pIiwKKyIgIFVURi04IChJU08gMTA2 NDYgLyBVbmljb2RlIDgtYml0IHNlcmlhbGl6ZWQgdHJhbnNmb3JtYXRpb24gZm9ybWF0KSIsCisj ZW5kaWYgLyogVU5JQ09ERSAqLworIiAiLAorIlNFVCBUUkFOU0ZFUiBUUkFOU0xBVElPTiB7IE9O LCBPRkYgfSIsCisiICBFbmFibGVzIGFuZCBkaXNhYmxlcyBmaWxlLXRyYW5zZmVyIGNoYXJhY3Rl ci1zZXQgdHJhbnNsYXRpb24uICBJdCdzIiwKKyIgIGVuYWJsZWQgYnkgZGVmYXVsdC4iLAorI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKyIgIiwKKyNpZmRlZiBDS19DVVJTRVMKKyJTRVQgVFJBTlNGRVIg RElTUExBWSB7IEJSSUVGLCBDUlQsIEZVTExTQ1JFRU4sIE5PTkUsIFNFUklBTCB9IiwKKyNlbHNl CisiU0VUIFRSQU5TRkVSIERJU1BMQVkgeyBCUklFRiwgQ1JULCBOT05FLCBTRVJJQUwgfSIsCisj ZW5kaWYgIC8qIENLX0NVUlNFUyAqLworIiAgQ2hvb3NlIHRoZSBkZXNpcmVkIGZvcm1hdCBmb3Ig dGhlIHByb2dyZXNzIHJlcG9ydCB0byBiZSBkaXNwbGF5ZWQgb24iLAorIiAgeW91ciBzY3JlZW4g ZHVyaW5nIGZpbGUgdHJhbnNmZXJzIHdoZW4gS2VybWl0IGlzIGluIGxvY2FsIG1vZGUuIiwKKyNp ZmRlZiBDS19DVVJTRVMKKyIgIEZVTExTQ1JFRU4gcmVxdWlyZXMgeW91ciB0ZXJtaW5hbCB0eXBl IGJlIHNldCBjb3JyZWN0bHk7IHRoZSBvdGhlcnMiLAorIiAgYXJlIGluZGVwZW5kZW50IG9mIHRl cm1pbmFsIHR5cGUuIiwKKyNlbHNlCisiICBmaWxlIHRyYW5zZmVyLiIsCisjZW5kaWYgIC8qIENL X0NVUlNFUyAqLworIiAiLAorIlNFVCBUUkFOU0ZFUiBMT0NLSU5HLVNISUZUIHsgT0ZGLCBPTiwg Rk9SQ0VEIH0iLAorIiAgVGVsbCB3aGV0aGVyIGxvY2tpbmctc2hpZnQgcHJvdG9jb2wgc2hvdWxk IGJlIHVzZWQgZHVyaW5nIGZpbGUgdHJhbnNmZXIiLAorIiAgdG8gYWNoaWV2ZSA4LWJpdCB0cmFu c3BhcmVuY3kgb24gYSA3LWJpdCBjb25uZWN0aW9uLiAgT04gbWVhbnMgdG8gcmVxdWVzdCIsCisi ICBpdHMgdXNlIGlmIFBBUklUWSBpcyBub3QgTk9ORSBhbmQgdG8gdXNlIGl0IGlmIHRoZSBvdGhl ciBLZXJtaXQgYWdyZWVzLCIsCisiICBPRkYgbWVhbnMgbm90IHRvIHVzZSBpdCwgRk9SQ0VEIG1l YW5zIHRvIHVzZSBpdCBldmVuIGlmIHRoZSBvdGhlciBLZXJtaXQiLAorIiAgZG9lcyBub3QgYWdy ZWUuIiwKKyIgIiwKKyJTRVQgVFJBTlNGRVIgTU9ERSB7IEFVVE9NQVRJQywgTUFOVUFMIH0iLAor IiAgQXV0b21hdGljICh0aGUgZGVmYXVsdCkgbWVhbnMgS2VybWl0IHNob3VsZCBhdXRvbWF0aWNh bGx5IGdvIGludG8gYmluYXJ5IiwKKyIgIGZpbGUtdHJhbnNmZXIgbW9kZSBhbmQgdXNlIGxpdGVy YWwgZmlsZW5hbWVzIGlmIHRoZSBvdGhlciBLZXJtaXQgc2F5cyBpdCIsCisiICBoYXMgYSBjb21w YXRpYmxlIGZpbGUgc3lzdGVtLCBlLmcuIFVOSVgtdG8tVU5JWCwgYnV0IG5vdCBVTklYLXRvLURP Uy4iLAorI2lmZGVmIFBBVFRFUk5TCisiICBBbHNvLCB3aGVuIHNlbmRpbmcgZmlsZXMsIEtlcm1p dCBzaG91bGQgc3dpdGNoIGJldHdlZW4gYmluYXJ5IGFuZCB0ZXh0IiwKKyIgIG1vZGUgYXV0b21h dGljYWxseSBwZXIgZmlsZSBiYXNlZCBvbiB0aGUgU0VUIEZJTEUgQklOQVJZLVBBVFRFUk5TIGFu ZCBTRVQiLAorIiAgRklMRSBURVhULVBBVFRFUk5TLiIsCisjZW5kaWYgLyogUEFUVEVSTlMgKi8K KyIgIiwKKyNpZmRlZiBQSVBFU0VORAorIlNFVCBUUkFOU0ZFUiBQSVBFUyB7IE9OLCBPRkYgfSIs CisiICBFbmFibGVzL0Rpc2FibGVzIGF1dG9tYXRpYyBzZW5kaW5nIGZyb20gLyByZWNlcHRpb24g dG8gY29tbWFuZCBwaXBlcyB3aGVuIiwKKyIgIHRoZSBpbmNvbWluZyBmaWxlbmFtZSBzdGFydHMg d2l0aCAnIScuICBBbHNvIHNlZSBDU0VORCwgQ1JFQ0VJVkUuIiwKKyIgIiwKKyNlbmRpZiAvKiBQ SVBFU0VORCAqLworI2lmZGVmIENLX1hZWgorIlNFVCBUUkFOU0ZFUiBQUk9UT0NPTCB7IEtFUk1J VCwgWE1PREVNLCAuLi4gfSIsCisiICBTeW5vbnltIGZvciBTRVQgUFJPVE9DT0wgKHEudi4pLiIs CisiICIsCisjZW5kaWYgLyogQ0tfWFlaICovCisiU0VUIFRSQU5TRkVSIFJFUE9SVCB7IE9OLCBP RkYgfSIsCisiICBFbmFibGVzL0Rpc2FibGVzIHRoZSBhdXRvbWF0aWMgcG9zdC10cmFuc2ZlciBt ZXNzYWdlIHRlbGxpbmcgd2hhdCBmaWxlcyIsCisiICB3ZW50IHdoZXJlIGZyb20gQy1LZXJtaXQg d2hlbiBpdCBpcyBpbiByZW1vdGUgbW9kZS4gIE9OIGJ5IGRlZmF1bHQuIiwKKyIgIiwKKyJTRVQg VFJBTlNGRVIgU0xPVy1TVEFSVCB7IE9GRiwgT04gfSIsCisiICBPTiAodGhlIGRlZmF1bHQpIHRl bGxzIEtlcm1pdCwgd2hlbiBzZW5kaW5nIGZpbGVzLCB0byBncmFkdWFsbHkgYnVpbGQgdXAiLAor IiAgdGhlIHBhY2tldCBsZW5ndGggdG8gdGhlIG1heGltdW0gbmVnb3RpYXRlZCBsZW5ndGguICBP RkYgbWVhbnMgc3RhcnQiLAorIiAgc2VuZGluZyB0aGUgbWF4aW11bSBsZW5ndGggcmlnaHQgYXdh eS4iLAorIiAiLAorIlN5bm9ueW06IFNFVCBYRkVSLiAgVXNlIFNIT1cgVFJBTlNGRVIgKFhGRVIp IHRvIHNlZSBTRVQgVFJBTlNGRVIgdmFsdWVzLiIsCisiIiB9OworI2VuZGlmIC8qIE5PWEZFUiAq LworCisjaWZkZWYgTlQKK3N0YXRpYyBjaGFyICpoeHl3aW45NVtdID0geworIlNFVCBXSU45NSA4 LjMtRklMRU5BTUVTIHsgT04sIE9GRiB9IiwKKyIgIEluc3RydWN0cyBLLTk1IHRvIHJlcG9ydCBh bGwgZmlsZW5hbWVzIHVzaW5nIDguMyBub3RhdGlvbiBpbnN0ZWFkIG9mIHRoZSIsCisiICBub3Jt YWwgbG9uZyBmaWxlbmFtZXMuICBEZWZhdWx0IGlzIE9GRiIsCisiICIsCisiU0VUIFdJTjk1IEFM VC1HUiB7IE9OLCBPRkYgfSIsCisiICBJbnN0cnVjdHMgSy05NSwgd2hlbiB1c2VkIG9uIE1TIFdp bmRvd3MgOTUsIHRvIGludGVycHJldCB0aGUgUmlnaHQgQWx0IGtleSIsCisiICBhcyB0aGUgQWx0 LUdyIGtleS4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHdvcmsgYXJvdW5kIHRoZSBmYWlsdXJlIG9m IiwKKyIgIFdpbmRvd3MgOTUgdG8gcHJvcGVybHkgdHJhbnNsYXRlIG5vbi1VUyBrZXlib2FyZHMu ICBEZWZhdWx0IGlzIE9GRi4iLAorIiAiLAorIlNFVCBXSU45NSBLRVlCT0FSRC1UUkFOU0xBVElP TiA8Y2hhcmFjdGVyLXNldD4iLAorIiAgU3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXItc2V0IHRoYXQg V2luZG93cyA5NSBpcyB1c2luZyB0byBzZW5kIGtleXN0cm9rZXMiLAorIiAgdG8gS2VybWl0LTk1 IHZpYSB0aGUga2V5Ym9hcmQgaW5wdXQgZnVuY3Rpb25zLiAgRGVmYXVsdCBpcyBMYXRpbjEtSVNP LiIsCisiICIsCisiU0VUIFdJTjk1IE9WRVJMQVBQRUQtSU8geyBPTiA8cmVxdWVzdHM+LCBPRkYg fSIsCisiICBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IEstOTUgdXNlcyBPdmVybGFwcGVkLUkv TyBtZXRob2RzIGZvciByZWFkaW5nIiwKKyIgIGZyb20gYW5kIHdyaXRpbmcgdG8gc2VyaWFsIGFu ZCBUQVBJIGNvbW11bmljYXRpb24gZGV2aWNlcy4gIDxyZXF1ZXN0cz4iLAorIiAgc3BlY2lmaWVz IHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXMgd3JpdGUgcmVxdWVzdHMgdGhhdCBt YXkgYmUiLAorIiAgb3ZlcmxhcHBlZCwgZnJvbSAxIHRvIDMwLiAgRGVmYXVsdCBpcyBPTi4iLAor IiAiLAorIlNFVCBXSU45NSBQT1BVUFMgeyBPTiwgT0ZGIH0iLAorIiAgRGV0ZXJtaW5lcyB3aGV0 aGVyIG9yIG5vdCBLZXJtaXQgOTUgdXNlcyBQb3B1cHMgdG8gcXVlcnkgdGhlIHVzZXIgZm9yIiwK KyIgIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBzdWNoIGFzIHVzZXIgSURzIG9yIHBhc3N3b3Jkcy4g IERlZmF1bHQgaXMgT04uIiwKKyIgIiwKKyJTRVQgV0lOOTUgU0VMRUNULUJVRyB7IE9OLCBPRkYg fSIKKyIgIFNvbWUgVENQL0lQIChXaW5zb2NrKSBpbXBsZW1lbnRhdGlvbnMgZm9yIFdpbmRvd3Mg aGF2ZSBhIGRlZmVjdGl2ZSIsCisiICBzZWxlY3QoKSBmdW5jdGlvbi4gIFVzZSB0aGlzIGNvbW1h bmQgdG8gYXZvaWQgdGhlIHVzZSBvZiBzZWxlY3QoKSBpZiIsCisiICBLOTUgYXBwZWFycyB0byBi ZSB1bmFibGUgdG8gc2VuZCBkYXRhIG92ZXIgVENQL0lQLiAgRGVmYXVsdCBpcyBPRkYuIiwKKyIi fTsKKyNlbmRpZiAvKiBOVCAqLworCitzdGF0aWMgY2hhciAqaG14eWJlbFtdID0geworI2lmZGVm IE9TMgorIlN5bnRheDogU0VUIEJFTEwgeyBBVURJQkxFIFsgeyBCRUVQLCBTWVNURU0tU09VTkRT IH0gXSwgVklTSUJMRSwgTk9ORSB9IiwKKyIgIFNwZWNpZmllcyBob3cgaW5jb21pbmcgQ3RybC1H IChiZWxsKSBjaGFyYWN0ZXJzIGFyZSBoYW5kbGVkIGluIENPTk5FQ1QiLAorIiAgbW9kZSBhbmQg aG93IGNvbW1hbmQgd2FybmluZ3MgYXJlIHByZXNlbnRlZCBpbiBjb21tYW5kIG1vZGUuICBBVURJ QkxFIiwKKyIgIG1lYW5zIGVpdGhlciBhIGJlZXAgb3IgYSBzeXN0ZW0tc291bmQgaXMgZ2VuZXJh dGVkOyBWSVNJQkxFIG1lYW5zIHRoZSIsCisiICBzY3JlZW4gaXMgZmxhc2hlZCBtb21lbnRhcmls eS4iLAorI2Vsc2UKKyJTeW50YXg6IFNFVCBCRUxMIHsgT0ZGLCBPTiB9IiwKKyIgIE9OICh0aGUg ZGVmYXVsdCkgZW5hYmxlcyByaW5naW5nIG9mIHRoZSB0ZXJtaW5hbCBiZWxsIChiZWVwKSBleGNl cHQgd2hlcmUiLAorIiAgaXQgaXMgZGlzYWJsZWQgaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBl LmcuIGJ5IFNFVCBUUkFOU0ZFUiBCRUxMLiAgT0ZGIiwKKyIgIGRpc2FibGVzIHJpbmdpbmcgb2Yg dGhlIGJlbGwgaW4gYWxsIGNpcmN1bXN0YW5jZXMsIG92ZXJyaWRpbmcgYW55IHNwZWNpZmljIiwK KyIgIFNFVCB4eHggQkVMTCBzZWxlY3Rpb25zLiIsCisjZW5kaWYgLyogT1MyICovCisiIn07CisK KyNpZmRlZiBPUzIKK3N0YXRpYyBjaGFyICpobXh5bXNrW10gPSB7CisiU0VUIE1TS0VSTUlUIEZJ TEUtUkVOQU1JTkcgeyBPTiwgT0ZGIH0iLAorIiAgT04gZW5hYmxlcyB0aGUgdXNlIG9mIE1TLURP UyBLZXJtaXQgZmlsZSByZW5hbWluZyBjb252ZW50aW9ucyBpbnN0ZWFkIG9mIiwKKyIgIEMtS2Vy bWl0IGNvbnZlbnRpb25zLiAgRmlsZSByZW5hbWluZyBvY2N1cnMgZHVyaW5nIGZpbGUgdHJhbnNm ZXJzIHdoZW4iLAorIiAgdGhlcmUgaXMgYSBmaWxlIG5hbWUgY29sbGlzaW9uIGFuZCBlaXRoZXIg QkFDS1VQIG9yIFJFTkFNRSBjb2xsaXNpb24iLAorIiAgb3B0aW9ucyBhcmUgYWN0aXZlLiAgQy1L ZXJtaXQgY29udmVudGlvbnMgcHJlc2VydmUgdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSIsCisiICB3 aGlsZSBhcHBlbmRpbmcgLn5udW1+IHRvIHRoZSBlbmQuICBNUy1ET1MgS2VybWl0IGNvbnZlbnRp b25zIHJlc3RyaWN0IiwKKyIgIGZpbGVuYW1lcyB0byA4LjMgbm90YXRpb24gYW5kIHByZXNlcnZl IHRoZSBleHRlbnNpb24uICBVbmlxdWUgbnVtZXJpYyIsCisiICB2YWx1ZXMgb3ZlcndyaXRlIHRo ZSByaWdodCBtb3N0IHBvcnRpb24gb2YgdGhlIGZpbGUgbmFtZSdzIGxlZnQgaGFuZCBzaWRlLiIs CisiICIsCisiU0VUIE1TS0VSTUlUIEtFWUNPREVTIHsgT04sIE9GRiB9IiwKKyIgIE9OIGVuYWJs ZXMgdGhlIHVzZSBvZiBNUy1ET1MgS2VybWl0IGNvbXBhdGlibGUga2V5Y29kZXMgdG8gcHJvdmlk ZSBzY3JpcHQiLAorIiAgcG9ydGFiaWxpdHkuIiwKKyIifTsKKyNlbmRpZiAvKiBPUzIgKi8KKwor c3RhdGljIGNoYXIgKmhteHljZFtdID0geworIlN5bnRheDogU0VUIENEIHsgSE9NRSA8cGF0aD4s IFBBVEggPHBhdGg+LCBNRVNTQUdFIHsgT04sIE9GRiwgRklMRSA8bGlzdD4gfSB9IgorLAorIiAi LAorIlNFVCBDRCBIT01FIDxwYXRoPiIsCisiICBTcGVjaWZpZWQgd2hpY2ggZGlyZWN0b3J5IHRv IGNoYW5nZSB0byBpZiBDRCBvciBLQ0QgaXMgZ2l2ZW4gd2l0aG91dCBhIiwKKyIgIHBhdGhuYW1l LiAgSWYgdGhpcyBjb21tYW5kIGlzIG5vdCBnaXZlbiwgeW91ciBsb2dpbiBvciBIT01FIGRpcmVj dG9yeSBpcyIsCisiICB1c2VkLiIsCisiICIsCisiU0VUIENEIFBBVEggPHBhdGg+IiwKKyIgIE92 ZXJyaWRlcyBub3JtYWwgQ0RQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCB3aGljaCB0ZWxscyB0 aGUgQ0QgY29tbWFuZCIsCisiICB3aGVyZSB0byBsb29rIGZvciBkaXJlY3RvcmllcyB0byBDRCB0 byBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGVtIGZ1bGx5LiIsCisiICBUaGUgZm9ybWF0IGlzOiIs CisiICIsCisjaWZkZWYgVU5JWE9ST1NLCisiICAgIHNldCBjZCBwYXRoIDpkaXJlY3Rvcnk6ZGly ZWN0b3J5Oi4uLiIsCisiICIsCisiICBpbiBvdGhlciB3b3JkcywgYSBsaXN0IG9mIGRpcmVjdG9y aWVzIHNlcGFyYXRlZCBieSBjb2xvbnMsIHdpdGggYSBjb2xvbiIsCisiICBhdCB0aGUgYmVnaW5u aW5nLCBlLmcuOiIsCisiICIsCisiICAgIHNldCBjZCBwYXRoIDovdXNyL29sZ2E6L3Vzci9pdmFu L3B1YmxpYzovdG1wIiwKKyNlbHNlCisjaWZkZWYgT1MyCisiICAgIHNldCBjZCBwYXRoIGRpc2s6 ZGlyZWN0b3J5O2Rpc2s6ZGlyZWN0b3J5Oy4uLiIsCisiICIsCisiICBqdXN0IGxpa2UgdGhlIERP UyBQQVRIOyBpbiBvdGhlciB3b3JkcywgYSBsaXN0IG9mIGRpc2s6ZGlyZWN0b3J5IG5hbWVzIiwK KyIgIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLCBlLmcuOiIsCisiICIsCisiICAgIFNFVCBDRCBQ QVRIIEM6XFxLOTU7QzpcXEhPTUU7QzpcXExPQ0FMO0M6XFwiLAorI2Vsc2UKKyNpZmRlZiBWTVMK KyIgICAgc2V0IGNkIHBhdGggZGlyZWN0b3J5LGRpcmVjdG9yeSwuLi4iLAorIiAiLAorIiAgaW4g b3RoZXIgd29yZHMsIGEgbGlzdCBvZiBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbnMgb3IgbG9naWNh bCBuYW1lcyB0aGF0IiwKKyIgIHJlcHJlc2VudCB0aGVtLCBlLmcuOiIsCisiICIsCisiICAgIFNF VCBDRCBQQVRIIFNZUyRMT0dJTjosJERJU0sxOltPTEdBXSwkRElTSzJbU0NSQVRDSC5JVkFOXS4i LAorI2Vsc2UKKyIgICh1bmtub3duIGZvciB0aGlzIHBsYXRmb3JtKSIsCisjZW5kaWYgLyogVk1T ICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisiICIsCisiU0VU IENEIE1FU1NBR0UgeyBPTiwgT0ZGIH0iLAorIiAgRGVmYXVsdCBpcyBPRkYuICBXaGVuIE9OLCB0 aGlzIHRlbGxzIEtlcm1pdCB0byBsb29rIGZvciBhIGZpbGUgd2l0aCBhIiwKKyIgIGNlcnRhaW4g bmFtZSBpbiBhbnkgZGlyZWN0b3J5IHRoYXQgeW91IENEIHRvLCBhbmQgaWYgaXQgZmluZHMgb25l LCB0byIsCisiICBkaXNwbGF5IGl0IG9uIHlvdXIgc2NyZWVuIHdoZW4geW91IGdpdmUgdGhlIENE IGNvbW1hbmQuICBUaGUgZmlsZW5hbWUsIiwKKyIgIG9yIGxpc3Qgb2YgbmFtZXMsIGlzIGdpdmVu IGluIHRoZSBTRVQgQ0QgTUVTU0FHRSBGSUxFIGNvbW1hbmQuIiwKKyIgIiwKKyJTRVQgQ0QgTUVT U0FHRSBGSUxFIG5hbWUiLAorIiAgb3I6IiwKKyJTRVQgQ0QgTUVTU0FHRSBGSUxFIHt7bmFtZTF9 e25hbWUyfS4uLntuYW1lOH19IiwKKyIgIFNwZWNpZnkgdXAgdG8gOCBmaWxlbmFtZXMgdG8gbG9v ayBmb3Igd2hlbiB3aGVuIENEaW5nIHRvIGEgbmV3IGRpcmVjdG9yeSIsCisiICBhbmQgQ0QgTUVT U0FHRSBpcyBPTi4gIFRoZSBmaXJzdCBvbmUgZm91bmQsIGlmIGFueSwgaW4gdGhlIG5ldyBkaXJl Y3RvcnkiLAorI2lmbmRlZiBERkNETVNHCisiICBpcyBkaXNwbGF5ZWQuIiwKKyNlbHNlCisiICBp cyBkaXNwbGF5ZWQuICBUaGUgZGVmYXVsdCBsaXN0IGlzOiIsCisiICIsCisjaWZkZWYgVU5JWE9S T1NLCisiICAge3suLy5yZWFkbWV9e1JFQURNRS5UWFR9e1JFQUQuTUV9fSIsCisjZWxzZQorIiAg IHt7UkVBRE1FLlRYVH17UkVBRC5NRX19IiwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyIgIiwK KyNlbmRpZiAvKiBERkNETVNHICovCisjaWZuZGVmIE5PU0VSVkVSCisiU3lub255bTogU0VUIFNF UlZFUiBDRC1NRVNTQUdFIEZJTEUuIiwKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworIiAiLAorIlR5 cGUgU0hPVyBDRCB0byB2aWV3IGN1cnJlbnQgQ0Qgc2V0dGluZ3MuICBBbHNvIHNlZSBIRUxQIFNF VCBTRVJWRVIuIiwKKyIiCit9OworCisjaWZuZGVmIE5PSUtTRAorc3RhdGljIGNoYXIgKiBoc2V0 aWtzW10gPSB7CisjaWZkZWYgT1MyCisiU0VUIElLUyBBTk9OWU1PVVMgQUNDT1VOVCA8dXNlcm5h bWU+IiwKKyIgIE9uIFdpbmRvd3MgTlQvMjAwMCB0aGlzIGlzIHRoZSBhY2NvdW50IHRoYXQgd2ls bCBiZSB1c2VkIHRvIGFsbG93IiwKKyIgIGFub255bW91cyBhY2Nlc3MgdG8gdGhlIHN5c3RlbS4g IFRoaXMgYWNjb3VudCBNVVNUIGhhdmUgbm8gcGFzc3dvcmQiLAorIiAgYW5kIGl0cyBwcml2aWxl Z2VzIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIG9ubHkgYWxsb3cgdGhvc2Ugb3BlcmF0aW9ucyIs CisiICB3aGljaCBzaG91bGQgYmUgcGVybWl0dGVkIHRvIHVua25vd24gdXNlcnMuICBJbiBwcmFj dGljZSB0aGlzIG1lYW5zIiwKKyIgIExpc3QgRGlyZWN0b3JpZXMgYW5kIFJlYWQtRXhlY3V0ZSBw cml2aWxlZ2VzIG9ubHkuICBJZiBhIGRpcmVjdG9yeSIsCisiICBpcyBjb25maWd1cmVkIGZvciBX cml0ZSBwcml2aWxlZ2VzIHRoZW4gUmVhZCBwcml2aWxlZ2VzIHNob3VsZCBiZSIsCisiICBkZW5p ZWQgZm9yIHRoYXQgZGlyZWN0b3J5LiAgT3RoZXJ3aXNlLCB5b3VyIHN5c3RlbSB3aWxsIGJlY29t ZSB1c2VkIiwKKyIgIGJ5IHNvZnR3YXJlIHBpcmF0ZXMuICBJZiB0aGlzIGNvbW1hbmQgaXMgbm90 IHNwZWNpZmllZCBpbiB0aGUgSUtTRC5LU0MiLAorIiAgZmlsZSB0aGUgdXNlcm5hbWUgXCJHVUVT VFwiIGlzIHVzZWQgYnkgZGVmYXVsdC4gIFRoaXMgY29tbWFuZCBoYXMgbm8iLAorIiAgZWZmZWN0 IG9uIFdpbmRvd3MgOTUvOTguIiwKKyIgIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyJTRVQgSUtTIEFO T05ZTU9VUyBJTklURklMRSBmaWxlbmFtZSIsCisjaWZkZWYgT1MyCisiICBUaGUgaW5pdGlhbGl6 YXRpb24gZmlsZSB0byBiZSBleGVjdXRlZCBmb3IgYW5vbnltb3VzIGxvZ2lucy4gIEJ5IGRlZmF1 bHQiLAorIiAgaXQgaXMgSzk1LklOSSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgYXNzb2NpYXRlZCB3 aXRoIHRoZSBBTk5PTllNT1VTIGFjY291bnQuIgorLAorIiAgQW55IGZpbGVuYW1lIHRoYXQgeW91 IHNwZWNpZnkgaGVyZSBtdXN0IGJlIHJlYWRhYmxlIGJ5IHRoZSBBTk9OWU1PVVMiLAorIiAgYWNj b3VudCBhbmQgaWYgYSBTRVQgSUtTIEFOT05ZTU9VUyBST09UIGNvbW1hbmQgd2FzIGdpdmVuLCBl eGlzdCB3aXRoaW4iLAorIiAgdGhlIHJlc3RyaWN0ZWQgZGlyZWN0b3J5IHRyZWUuICBUaGlzIG9w dGlvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgU0VUIElLUyIsCisiICBJTklURklMRSBjb21tYW5k IHdoaWNoIGFwcGxpZXMgb25seSB0byByZWFsIHVzZXJzLiIsCisjZWxzZQorIiAgVGhlIGluaXRp YWxpemF0aW9uIGZpbGUgdG8gYmUgZXhlY3V0ZWQgZm9yIGFub255bW91cyBsb2dpbnMuICBCeSBk ZWZhdWx0IiwKKyIgIGl0IGlzIC5rZXJtcmMgaW4gdGhlIGFub255bW91cyByb290IGRpcmVjdG9y eS4gIFRoaXMgb3B0aW9uIGlzIGluZGVwZW5kZW50IiwKKyIgIG9mIHRoZSBTRVQgSUtTIElOSVRG SUxFIGNvbW1hbmQgd2hpY2ggYXBwbGllcyBvbmx5IHRvIHJlYWwgdXNlcnMuIiwKKyNlbmRpZiAv KiBPUzIgKi8KKyIgIiwKKyJTRVQgSUtTIEFOT05ZTU9VUyBMT0dJTiB7IE9OLCBPRkYgfSIsCisj aWZkZWYgT1MyCisiICBXaGV0aGVyIGFub255bW91cyBsb2dpbnMgYXJlIGFsbG93ZWQuICBCeSBk ZWZhdWx0IHRoZXkgYXJlIE5PVCBhbGxvd2VkLCIsCisiICBzbyB0aGlzIG9wdGlvbiBuZWVkIGJl IGluY2x1ZGVkIG9ubHkgdG8gYWxsb3cgdGhlbSAob3IgZm9yIGNsYXJpdHksIHRvIiwKKyIgIGVt cGhhc2l6ZSB0aGF0IHRoZXkgYXJlIG5vdCBhbGxvd2VkKS4gIEFub255bW91cyBsb2dpbiBvY2N1 cnMgd2hlbiB0aGUiLAorIiAgdXNlcm5hbWUgXCJhbm9ueW1vdXNcIiBpcyBzcGVjaWZpZWQgd2l0 aCBhbnkgcGFzc3dvcmQgKGFzIHdpdGggZnRwZCkuIiwKKyIgIEluIG9yZGVyIGZvciBhbm9ueW1v dXMgbG9naW5zIHRvIHN1Y2NlZWQgb24gV2luZG93cyBOVC8yMDAwLCB0aGUiLAorIiAgQU5PTllN T1VTIGFjY291bnQgbXVzdCBiZSBlbmFibGVkLiIsCisiICIsCisiICBPbiBXaW5kb3dzIE5UIGFu ZCAyMDAwLCBhbm9ueW1vdXMgdXNlcnMgaGF2ZSB0aGUgc2FtZSBhY2Nlc3MgcmlnaHRzIGFzIiwK KyIgIHRoZSBBTk9OWU1PVVMgYWNjb3VudC4gIEluIFdpbmRvd3MgOTUvOTgsIGFub255bW91cyB1 c2VycywganVzdCBsaWtlIGFueSIsCisiICBvdGhlciB1c2VycywgaGF2ZSBmdWxsIGFjY2VzcyBy aWdodHMgdG8geW91ciBlbnRpcmUgUEMsIHNpbmNlIFdpbmRvd3MgOTUiLAorIiAgYW5kIDk4IGlu Y2x1ZGUgbm8gc2VjdXJpdHkgZmVhdHVyZXMuICBGb3IgdGhpcyByZWFzb24sIGlmIHlvdSBhcmUg YWxsb3dpbmciLAorIiAgYW5vbnltb3VzIGxvZ2lucywgYmUgc3VyZSB0byBhbHNvIFNFVCBhbiBJ S1MgQU5PTllNT1VTIFJPT1QgZGlyZWN0b3J5IHRvIiwKKyIgIHJlc3RyaWN0IGFub255bW91cyB1 c2VycycgZmlsZSBhY2Nlc3MuIiwKKyIgIiwKKyIgIEFub255bW91cyB1c2VyIHBlcm1pc3Npb25z IG1heSBiZSByZXN0cmljdGVkIHZpYSB0aGUgc3BlY2lmaWNhdGlvbiBvZiAiLAorIiAgRElTQUJM RSBjb21tYW5kcyBpbiB0aGUgQU5PTllNT1VTIGluaXRmaWxlLiAgQW5vbnltb3VzIHVzZXJzIGFy ZSBub3QgIiwKKyIgIHBlcm1pdHRlZCB0byBleGVjdXRlIGFuIEVOQUJMRSBjb21tYW5kLiAgQW5v bnltb3VzIHVzZXJzIGFyZSBhbHNvIHByZXZlbnRlZCIKKywKKyIgIGZyb20gU0hPV2luZyBzZW5z aXRpdmUgZGF0YSBhYm91dCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciB0aGUgSUtTIiwKKyIgIGNv bmZpZ3VyYXRpb24uIiwKKyNlbHNlCisiICBXaGV0aGVyIGFub255bW91cyBsb2dpbnMgYXJlIGFs bG93ZWQuIEJ5IGRlZmF1bHQgdGhleSBhcmUgYWxsb3dlZCwgc28gdGhpcyIsCisiICBvcHRpb24g bmVlZCBiZSBpbmNsdWRlZCBvbmx5IHRvIGRpc2FsbG93IHRoZW0gKG9yIGZvciBjbGFyaXR5LCB0 byBlbXBoYXNpemUiCissCisiICB0aGV5IGFyZSBhbGxvd2VkKS4gQW5vbnltb3VzIGxvZ2luIG9j Y3VycyB3aGVuIHRoZSB1c2VybmFtZSBcImFub255bW91c1wiIiwKKyIgIG9yIFwiZnRwXCIgaXMg Z2l2ZW4sIHdpdGggYW55IHBhc3N3b3JkIChhcyB3aXRoIGZ0cGQpLiIsCisjZW5kaWYgLyogT1My ICovCisiICIsCisiU0VUIElLUyBBTk9OWU1PVVMgUk9PVCA8ZGlyZWN0b3J5PiIsCisiICBTcGVj aWZpZXMgYSBkaXJlY3RvcnkgdHJlZSB0byB3aGljaCBhbm9ueW1vdXMgdXNlcnMgYXJlIHJlc3Ry aWN0ZWQgYWZ0ZXIiLAorIiAgbG9naW4uIiwKKyIgIiwKKyJTRVQgSUtTIEJBTk5FUkZJTEUgPGZp bGVuYW1lPiIsCisiICBUaGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIG1lc3NhZ2UgdG8g YmUgcHJpbnRlZCBhZnRlciB0aGUgdXNlciBsb2dzIiwKKyIgIGluLCBpbiBwbGFjZSBvZiB0aGUg bm9ybWFsIG1lc3NhZ2UgKGNvcHlyaWdodCBub3RpY2UsIFwiVHlwZSBIRUxQIG9yID8gZm9yIiwK KyIgIGhlbHBcIiwgZXRjKS4iLAorIiAiLAorIlNFVCBJS1MgQ0RGSUxFIDxmaWxlbGlzdD4iLAor IiAgV2hlbiBjZG1lc3NhZ2UgaXMgb24sIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIFwicmVhZCBt ZVwiIGZpbGUgdG8gYmUgc2hvd24uIgorLAorIiAgTm9ybWFsbHkgeW91IHdvdWxkIHNwZWNpZnkg YSByZWxhdGl2ZSAobm90IGFic29sdXRlKSBuYW1lLCBzaW5jZSB0aGUgZmlsZSIsCisiICBpcyBv cGVuZWQgdXNpbmcgdGhlIGxpdGVyYWwgbmFtZSB5b3Ugc3BlY2lmaWVkLCBhZnRlciBjaGFuZ2lu ZyB0byB0aGUgbmV3IiwKKyIgIGRpcmVjdG9yeS4gIEV4YW1wbGU6IiwKKyIgIiwKKyIgICAgU0VU IElLUyBDREZJTEUgUkVBRC5NRSIsCisiICIsCisiICBZb3UgY2FuIGFsc28gZ2l2ZSBhIGxpc3Qg b2YgdXAgdG8gOCBmaWxlbmFtZXMgYnkgKGEpIGVuY2xvc2luZyBlYWNoIiwKKyIgIGZpbGVuYW1l IGluIGJyYWNlcywgYW5kIChiKSBlbmNsb3NpbmcgdGhlIGVudGlyZSBsaXN0IGluIGJyYWNlcy4g IEV4YW1wbGU6IiwKKyIgIiwKKyIgICAgU0VUIElLUyBDREZJTEUge3tSRUFELk1FfXthYXJlYWRt ZS50eHR9e1JFQURNRX17cmVhZC10aGlzLWZpcnN0fX0iLAorIiAiLAorIiAgV2hlbiBhIGxpc3Qg aXMgZ2l2ZW4sIGl0IGlzIHNlYXJjaGVkIGZyb20gbGVmdCB0byByaWdodCBhbmQgdGhlIGZpcnN0 IiwKKyIgIGZpbGUgZm91bmQgaXMgZGlzcGxheWVkLiIsCisiICIsCisiU0VUIElLUyBDRE1FU1NB R0Uge09OLCBPRkYsIDAsIDEsIDJ9IiwKKyIgIEZvciB1c2UgaW4gdGhlIFNlcnZlci1TaWRlIFNl cnZlciBjb25maWd1cmF0aW9uOyB3aGVuZXZlciB0aGUgY2xpZW50IiwKKyIgIHRlbGxzIHRoZSBz ZXJ2ZXIgdG8gY2hhbmdlIGRpcmVjdG9yeSwgdGhlIHNlcnZlciBzZW5kcyB0aGUgY29udGVudHMg b2YgYSIsCisiICBcInJlYWQgbWVcIiBmaWxlIHRvIHRoZSBjbGllbnQncyBzY3JlZW4uICBUaGlz IGZlYXR1cmUgaXMgT04gYnkgZGVmYXVsdCwiLAorIiAgYW5kIG9wZXJhdGVzIGluIGNsaWVudC9z ZXJ2ZXIgbW9kZSBvbmx5IHdoZW4gT04gb3IgMS4gIElmIHNldCB0byAyIG9yIiwKKyIgIGhpZ2hl ciwgaXQgYWxzbyBvcGVyYXRlcyB3aGVuIHRoZSBDRCBjb21tYW5kIGlzIGdpdmVuIGF0IHRoZSBJ S1NEPiBwcm9tcHQuIiwKKyIgIFN5bm9ueW06IFNFVCBJS1MgQ0RNU0cuIiwKKyIgIiwKKyJTRVQg SUtTIERBVEFCQVNFIHsgT04sIE9GRiB9IiwKKyIgIFRoaXMgY29tbWFuZCBkZXRlcm1pbmVzIHdo ZXRoZXIgZW50cmllcyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgU0VUIElLUyIsCisiICBEQkZJTEUg KElLU0QgYWN0aXZlIHNlc3Npb25zIGRhdGFiYXNlKS4iLAorIiAiLAorIlNFVCBJS1MgREJGSUxF IDxmaWxlbmFtZT4iLAorIiAgU3BlY2lmaWVzIHRoZSBmaWxlIHdoaWNoIHNob3VsZCBiZSB1c2Vk IGZvciBzdG9yaW5nIHJ1bnRpbWUgc3RhdHVzIiwKKyNpZmRlZiBPUzIKKyIgIGluZm9ybWF0aW9u IGFib3V0IGFjdGl2ZSBjb25uZWN0aW9ucy4gIFRoZSBkZWZhdWx0IGlzIGEgZmlsZSBjYWxsZWQi LAorIiAgXCJpa3NkLmRiXCIgaW4gdGhlIFdJTkRPV1MgZGlyZWN0b3J5LiIsCisjZWxzZQorI2lm ZGVmIFVOSVgKKyIgIGluZm9ybWF0aW9uIGFib3V0IGFjdGl2ZSBjb25uZWN0aW9ucy4gIFRoZSBk ZWZhdWx0IGlzIGEgZmlsZSBjYWxsZWQiLAorIiAgXCJpa3NkLmRiXCIgaW4gdGhlIC92YXIvbG9n IGRpcmVjdG9yeS4iLAorI2Vsc2UKKyIgIGluZm9ybWF0aW9uIGFib3V0IGFjdGl2ZSBjb25uZWN0 aW9ucy4iLAorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyIgIiwKKyNpZmRl ZiBPUzIKKyJTRVQgSUtTIERFRkFVTFQtRE9NQUlOIDxkb21haW4tbmFtZT4iLAorIiAgQSB1c2Vy aWQgb24gV2luZG93cyBpcyBvZiB0aGUgZm9ybSBET01BSU5cXFxcdXNlcmlkLiAgVGhpcyBjb21t YW5kIiwKKyIgIGRldGVybWluZXMgd2hpY2ggZG9tYWluIHdpbGwgYmUgc2VhcmNoZWQgZm9yIHRo ZSB1c2VyaWQgaWYgYSBkb21haW4iLAorIiAgaXMgbm90IHNwZWNpZmllZCBieSB0aGUgdXNlci4g IE9uIFdpbmRvd3MgOTUvOTggd2hlbiBVc2VyLWxldmVsIiwKKyIgIGFjY2VzcyBpcyBhY3RpdmF0 ZWQgaW4gdGhlIE5ldHdvcmsgQ29udHJvbCBQYW5lbCwgdGhlIGRlZmF1bHQgIiwKKyIgIGRvbWFp biB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2V0LiAgSWYgdGhlIGRlZmF1bHQgZG9tYWluIGlzIG5v dCIsCisiICBzcGVjaWZpZWQsIGFjY291bnRzIG9uIHRoZSBsb2NhbCBtYWNoaW5lIHdpbGwgdGFr ZSBwcmVjZWRlbmNlIG92ZXIiLAorIiAgYWNjb3VudHMgaW4gRG9tYWlucyB0byB3aGljaCB0aGUg bG9jYWwgbWFjaGluZSBiZWxvbmdzLiIsCisjZW5kaWYgLyogT1MyICovCisiICIsCisiU0VUIElL UyBIRUxQRklMRSA8ZmlsZW5hbWU+IiwKKyIgIFNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGZpbGUg dG8gYmUgZGlzcGxheWVkIGlmIHRoZSB1c2VyIHR5cGVzIEhFTFAiLAorIiAgKG5vdCBmb2xsb3dl ZCBieSBhIHNwZWNpZmljIGNvbW1hbmQgb3IgdG9waWMpLCBpbiBwbGFjZSBvZiB0aGUgYnVpbHQt aW4iLAorIiAgdG9wLWxldmVsIGhlbHAgdGV4dC4gIFRoZSBmaWxlIG5lZWQgbm90IGZpdCBvbiBv bmUgc2NyZWVuOyBtb3JlLXByb21wdGluZyIsCisiICBpcyB1c2VkIGlmIHRoZSBmaWxlIGlzIG1v cmUgdGhhbiBvbmUgc2NyZWVuIGxvbmcgaWYgQ09NTUFORCBNT1JFLVBST01QVElORyIsCisiICBp cyBPTiwgYXMgaXQgaXMgYnkgZGVmYXVsdC4iLAorIiAiLAorIlNFVCBJS1MgSU5JVEZJTEUgPGZp bGVuYW1lPiIsCisiICBFeGVjdXRlIDxmaWxlbmFtZT4gcmF0aGVyIHRoYW4gdGhlIG5vcm1hbCBp bml0aWFsaXphdGlvbiBmaWxlIGZvciByZWFsIiwKKyIgIHVzZXJzOyB0aGlzIG9wdGlvbiBkb2Vz IG5vdCBhcHBseSB0byBhbm9ueW1vdXMgdXNlcnMuIiwKKyIgIiwKKyJTRVQgSUtTIE5PLUlOSVRG SUxFIHsgT04sIE9GRiB9IiwKKyIgIERvIG5vdCBleGVjdXRlIGFuIGluaXRpYWxpemF0aW9uIGZp bGUsIGV2ZW4gaWYgYSByZWFsIHVzZXIgaXMgbG9nZ2luZyBpbi4iLAorIiAiLAorIlNFVCBJS1Mg U0VSVkVSLU9OTFkgeyBPTiwgT0ZGIH0iLAorIiAgSWYgdGhpcyBvcHRpb24gaXMgaW5jbHVkZWQg b24gdGhlIElLU0QgY29tbWFuZCBsaW5lLCB0aGUgQ2xpZW50IFNpZGUgU2VydmVyIgorLAorIiAg Y29uZmlndXJhdGlvbiBpcyBkaXNhYmxlZCwgYW5kIHRoZSB1c2VyIHdpbGwgbm90IGdldCBhIFVz ZXJuYW1lOiBvciIsCisiICBQYXNzd29yZDogcHJvbXB0LCBhbmQgd2lsbCBub3QgYmUgYWJsZSB0 byBhY2Nlc3MgdGhlIElLU0QgY29tbWFuZCBwcm9tcHQuIiwKKyIgIEEgRklOSVNIIGNvbW1hbmQg c2VudCB0byB0aGUgSUtTRCB3aWxsIGxvZyBpdCBvdXQgYW5kIGNsb3NlIHRoZSIsCisiICBjb25u ZWN0aW9uLCByYXRoZXIgdGhhbiByZXR1cm5pbmcgaXQgdG8gaXRzIHByb21wdC4iLAorIiAiLAor IlNFVCBJS1MgVElNRU9VVCA8bnVtYmVyPiIsCisiICBUaGlzIHNldHMgYSBsaW1pdCAoaW4gc2Vj b25kcykgb24gdGhlIGFtb3VudCBvZiB0aW1lIHRoZSBjbGllbnQgaGFzIHRvIGxvZyIsCisiICBp biBvbmNlIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUuICBJZiBzdWNjZXNzZnVsIGxvZ2luIGRvZXMg bm90IG9jY3VyIHdpdGhpbiIsCisiICB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMsIHRoZSBj b25uZWN0aW9uIGlzIGNsb3NlZC4gIFRoZSBkZWZhdWx0IHRpbWVvdXQiCissCisiICBpcyAzMDAg c2Vjb25kcyAoNSBtaW51dGVzKS4gIEEgdmFsdWUgb2YgMCBvciBsZXNzIGluZGljYXRlcyB0aGVy ZSBpcyB0byBiZSIsCisiICBubyBsaW1pdC4iLAorIiAiLAorIlNFVCBJS1MgVVNFUkZJTEUgPGZp bGVuYW1lPiIsCisjaWZkZWYgVU5JWAorIiAgVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBs b2NhbCB1c2VybmFtZXMgdGhhdCBhcmUgdG8gYmUgZGVuaWVkIGFjY2VzcyIsCisiICB0byBJbnRl cm5ldCBLZXJtaXQgU2VydmljZS4gIFRoZSBkZWZhdWx0IGlzIC9ldGMvZnRwdXNlcnMuICBUaGlz IGNhbiBiZSB0aGUiCissCisiICBzYW1lIGZpbGUgdGhhdCBpcyB1c2VkIGJ5IHd1ZnRwZCwgYW5k IHRoZSBzeW50YXggaXMgdGhlIHNhbWU6IG9uZSB1c2VybmFtZSIsCisiICBwZXIgbGluZTsgbGlu ZXMgc3RhcnRpbmcgd2l0aCBcIiNcIiBhcmUgaWdub3JlZC4gIFVzZSB0aGlzIG9wdGlvbiB0byIs CisiICBzcGVjaWZ5IHRoZSBuYW1lIG9mIGEgZGlmZmVyZW50IGZvcmJpZGRlbi11c2VyIGZpbGUs IG9yIHVzZSIsCisiICBcInNldCBpa3MgdXNlcmZpbGUgL2Rldi9udWxsXCIgdG8gZGlzYWJsZSB0 aGlzIGZlYXR1cmUgaW4gY2FzZSB0aGVyZSBpcyBhIiwKKyIgICAvZXRjL2Z0cHVzZXJzIGZpbGUg YnV0IHlvdSBkb24ndCB3YW50IHRvIHVzZSBpdC4iLAorI2Vsc2UKKyIgIFRoaXMgZmlsZSBjb250 YWlucyBhIGxpc3Qgb2YgbG9jYWwgdXNlcm5hbWVzIHRoYXQgYXJlIHRvIGJlIGRlbmllZCBhY2Nl c3MiLAorIiAgdG8gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2UuICBUaGUgc3ludGF4IGlzOiBvbmUg dXNlcm5hbWUgcGVyIGxpbmU7IGxpbmVzIiwKKyIgIHN0YXJ0aW5nIHdpdGggXCIjXCIgYXJlIGln bm9yZWQuIiwKKyNlbmRpZiAvKiBVTklYICovCisiICIsCisiU0VUIElLUyBYRkVSTE9HIHsgT04s IE9GRiB9IiwKKyNpZmRlZiBVTklYCisiICBXaGV0aGVyIGEgZmlsZS10cmFuc2ZlciBsb2cgc2hv dWxkIGJlIGtlcHQuICBPZmYgYnkgZGVmYXVsdC4gIElmIFwib25cIiwiLAorIiAgYnV0IG5vIFNF VCBJS1NEIFhGRVJGSUxFIGNvbW1hbmQgaXMgZ2l2ZW4sIC92YXIvbG9nL2lrc2QubG9nIGlzIHVz ZWQuIiwKKyNlbHNlCisiICBXaGV0aGVyIGEgZmlsZS10cmFuc2ZlciBsb2cgc2hvdWxkIGJlIGtl cHQuICBPZmYgYnkgZGVmYXVsdC4iLAorI2VuZGlmIC8qIFVOSVggKi8KKyIgIiwKKyJTRVQgSUtT IFhGRVJGSUxFIDxmaWxlbmFtZT4iLAorIiAgVXNlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgYW4g aWtzZCBsb2cgZmlsZSBuYW1lLiAgSWYgeW91IGluY2x1ZGUgdGhpcyIsCisiICBvcHRpb24sIGl0 IGltcGxpZXMgU0VUIElLUyBYRkVSRklMRSBPTi4iLAorIiIKK307CisjZW5kaWYgLyogTk9JS1NE ICovCisKKy8qICBEIE8gSCBTIEUgVCAgLS0gIEdpdmUgaGVscCBmb3IgU0VUIGNvbW1hbmQgICov CisKK2ludAorZG9oc2V0KHh4KSBpbnQgeHg7IHsKKyAgICBpbnQgeDsKKworICAgIGlmICh4eCA9 PSAtMykgcmV0dXJuKGhtc2dhKGhtaHNldCkpOworICAgIGlmICh4eCA8IDApIHJldHVybih4eCk7 CisKKyNpZmRlZiBORVdGVFAKKyAgICBpZiAoeHggPT0gWFlGVFBYKQorICAgICAgcmV0dXJuKGRv c2V0ZnRwaGxwKCkpOworICAgIGlmICh4eCA9PSBYWUdQUikKKyAgICAgIHJldHVybihobXNnYSho bXh5Z3ByKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKKyAgICBzd2l0Y2ggKHh4KSB7CisjaWZuZGVmIE5PSUtTRAorICAgICAg Y2FzZSBYWUlLUzoKKyAgICAgICAgcmV0dXJuKGhtc2dhKGhzZXRpa3MpKTsKKyNlbmRpZiAvKiBO T0lLU0QgKi8KKworY2FzZSBYWV9SRU46CisgIHJldHVybihobXNnKCJTRVQgUkVOQU1FIExJU1Qg eyBPTiwgT0ZGIH1cblwKKyAgVGVsbHMgd2hldGhlciB0aGUgUkVOQU1FIGNvbW1hbmQgc2hvdWxk IGxpc3QgaXRzIHJlc3VsdHMgYnkgZGVmYXVsdC5cblxuXAorU0VUIFJFTkFNRSBDT0xMSVNJT04g eyBGQUlMLCBQUk9DRUVELCBPVkVSV1JJVEUgfVxuXAorICBFc3RhYmxpc2hlcyB0aGUgZGVmYXVs dCBhY3Rpb24gd2hlbiByZW5hbWluZyBhIGZpbGUgd291bGQgZGVzdHJveSBhblxuXAorICBleGlz dGluZyBmaWxlLiAgU2VlIEhFTFAgUkVOQU1FLiIpKTsKKworY2FzZSBYWUFUVFI6CisgICAgcmV0 dXJuKGhtc2dhKGhzZXRhdCkpOworCitjYXNlIFhZQkFDSzoKKyAgICByZXR1cm4oaG1zZ2EoaHNl dGJrZykpOworCitjYXNlIFhZQkVMTDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eWJlbCkpOworCisj aWZkZWYgT1MyCitjYXNlIFhZUFJUWToKKyAgICByZXR1cm4oaG1zZygiU0VUIFBSSU9SSVRZIHsg UkVHVUxBUiwgRk9SRUdST1VORC1TRVJWRVIsIFRJTUUtQ1JJVElDQUwgfVxuXAorICBTcGVjaWZp ZXMgYXQgd2hpY2ggcHJpb3JpdHkgbGV2ZWwgdGhlIGNvbW11bmljYXRpb24gYW5kIHNjcmVlbiB1 cGRhdGVcblwKKyAgdGhyZWFkcyBzaG91bGQgb3BlcmF0ZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlz IEZPUkVHUk9VTkQtU0VSVkVSLiIpKTsKKworY2FzZSBYWU1TSzoKKyAgICByZXR1cm4oaG1zZ2Eo aG14eW1zaykpOworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgRFlOQU1JQworY2FzZSBYWUJV RjoKKyAgICByZXR1cm4oaG1zZ2EoaHNldGJ1ZikpOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKwor I2lmbmRlZiBOT0xPQ0FMCitjYXNlIFhZQ0FSUjoKKyAgICByZXR1cm4oaG1zZ2EoaHNldGNhcikp OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1NQTAorY2FzZSBYWUNBU0U6Cisg ICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIENBU0UgeyBPTiwgT0ZGIH1cblwKKyAgVGVsbHMg d2hldGhlciBhbHBoYWJldGljIGNhc2UgaXMgc2lnbmlmaWNhbnQgaW4gc3RyaW5nIGNvbXBhcmlz b25zXG5cCisgIGRvbmUgYnkgSU5QVVQsIElGLCBhbmQgb3RoZXIgY29tbWFuZHMuICBUaGlzIHNl dHRpbmcgaXMgbG9jYWwgdG8gdGhlXG5cCisgIGN1cnJlbnQgbWFjcm8gb3IgY29tbWFuZCBmaWxl LCBhbmQgaW5oZXJpdGVkIGJ5IHN1Ym9yZGluYXRlcy4iKSk7CisKKyNlbmRpZiAvKiBOT1NQTCAq LworCitjYXNlIFhZQ01EOgorICAgIHJldHVybihobXNnYShoc2V0Y21kKSk7CisKK2Nhc2UgWFlJ RkQ6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIElOQ09NUExFVEUgeyBESVNDQVJELCBL RUVQIH1cblwKKyAgV2hldGhlciB0byBkaXNjYXJkIG9yIGtlZXAgaW5jb21wbGV0ZWx5IHJlY2Vp dmVkIGZpbGVzLCBkZWZhdWx0IGlzIEtFRVAuIikpOworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhZ SU5QVToKKyAgICByZXR1cm4oaG1zZ2EoaHh5aW5wKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKwor Y2FzZSBYWUNIS1Q6CisgICAgcmV0dXJuKGhtc2dhKGhteHljaGt0KSk7CisKKyNpZm5kZWYgTk9T UEwKK2Nhc2UgWFlDT1VOOgorICAgIHJldHVybihobXNnKCJTeW50YXg6ICBTRVQgQ09VTlQgbnVt YmVyXG5cCisgRXhhbXBsZTogU0VUIENPVU5UIDVcblwKKyAgU2V0IHVwIGEgbG9vcCBjb3VudGVy LCBmb3IgdXNlIHdpdGggSUYgQ09VTlQuICBMb2NhbCB0byBjdXJyZW50IG1hY3JvXG5cCisgIG9y IGNvbW1hbmQgZmlsZSwgaW5oZXJpdGVkIGJ5IHN1Ym9yZGluYXRlIG1hY3JvcyBhbmQgY29tbWFu ZCBmaWxlcy4iKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworY2FzZSBYWURFQlU6CisgICAgcmV0 dXJuKGhtc2dhKGhteHlkZWIpKTsKKworY2FzZSBYWURGTFQ6CisgICAgcmV0dXJuKGhtc2coIlN5 bnRheDogU0VUIERFRkFVTFQgZGlyZWN0b3J5XG5cCisgIENoYW5nZSBkaXJlY3RvcnkuICBFcXVp dmFsZW50IHRvIENEIGNvbW1hbmQuIikpOworCitjYXNlIFhZREVMQToKKyAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBTRVQgREVMQVkgbnVtYmVyXG5cCisgIE51bWJlciBvZiBzZWNvbmRzIHRvIHdh aXQgYmVmb3JlIHNlbmRpbmcgZmlyc3QgcGFja2V0IGFmdGVyIFNFTkQgY29tbWFuZC4iKSk7CisK KyNpZm5kZWYgTk9ESUFMCitjYXNlIFhZRElBTDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eWRpYWwp KTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmZGVmIFVOSVgKK2Nhc2UgWFlTVVNQOgorICAg IHJldHVybihobXNnKCJTeW50YXg6IFNFVCBTVVNQRU5EIHsgT0ZGLCBPTiB9XG5cCisgIERpc2Fi bGVzIFNVU1BFTkQgY29tbWFuZCwgc3VzcGVuZCBzaWduYWxzLCBhbmQgPGVzYy1jaGFyPlogZHVy aW5nIENPTk5FQ1QuIikKKyAgICAgICAgICAgKTsKKyNlbmRpZgorCisjaWZuZGVmIE5PU0NSSVBU CitjYXNlIFhZU0NSSToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgU0NSSVBUIEVDSE8g eyBPRkYsIE9OIH1cblwKKyAgRGlzYWJsZXMvRW5hYmxlcyBlY2hvaW5nIG9mIFNDUklQVCBjb21t YW5kIG9wZXJhdGlvbi4iKSk7CisjZW5kaWYgLyogTk9TQ1JJUFQgKi8KKworY2FzZSBYWVRBS0U6 CisgICAgcmV0dXJuKGhtc2dhKGh4eXRhaykpOworCisjaWZuZGVmIE5PTE9DQUwKK2Nhc2UgWFlU RVJNOgorICAgIHJldHVybihobXNnYShoeHl0ZXJtKSk7CisKK2Nhc2UgWFlEVVBMOgorICAgIHJl dHVybihobXNnKCJTeW50YXg6IFNFVCBEVVBMRVggeyBGVUxMLCBIQUxGIH1cblwKKyAgRHVyaW5n IENPTk5FQ1Q6IEZVTEwgbWVhbnMgcmVtb3RlIGhvc3QgZWNob2VzLCBIQUxGIG1lYW5zIEtlcm1p dFxuXAorICBkb2VzIGl0cyBvd24gZWNob2luZy4iKSk7CisKK2Nhc2UgWFlMQ0xFOgorICAgIHJl dHVybihobXNnKCJTeW50YXg6IFNFVCBMT0NBTC1FQ0hPIHsgT0ZGLCBPTiB9XG5cCisgIER1cmlu ZyBDT05ORUNUOiBPRkYgbWVhbnMgcmVtb3RlIGhvc3QgZWNob2VzLCBPTiBtZWFucyBLZXJtaXRc blwKKyAgZG9lcyBpdHMgb3duIGVjaG9pbmcuICBTeW5vbnltIGZvciBTRVQgRFVQTEVYIHsgRlVM TCwgSEFMRiB9LiIpKTsKKworY2FzZSBYWUVTQzoKKyAgICByZXR1cm4oaG1zZ2EoaHh5ZXNjKSk7 ICAgICAgICAgICAgICAvKiBTRVQgRVNDQVBFICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCitj YXNlIFhZUFJUUjogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFBSSU5URVIgKi8K KyAgICByZXR1cm4oaG1zZ2EoaHh5cHJ0cikpOworCisjaWZkZWYgT1MyCisjaWZkZWYgQlBSSU5U CitjYXNlIFhZQkRDUDogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEJQUklOVEVS ICovCisgICAgcmV0dXJuKGhtc2dhKGh4eWJwcnRyKSk7CisjZW5kaWYgLyogQlBSSU5UICovCisj ZW5kaWYgLyogT1MyICovCisKK2Nhc2UgWFlFWElUOgorICAgIHJldHVybihobXNnYShoeHlleGl0 KSk7CisKK2Nhc2UgWFlGSUxFOgorICAgIHJldHVybihobXNnYShobXh5ZikpOworCitjYXNlIFhZ RkxPVzoKKyAgICByZXR1cm4oaG1zZ2EoaG14eWZsbykpOworCitjYXNlIFhZSEFORDoKKyAgIHJl dHVybihobXNnYShobXh5aHNoKSk7CisKKyNpZmRlZiBORVRDT05OCisKK2Nhc2UgWFlIT1NUOgor ICAgIHJldHVybihobXNnYShoeHlob3N0KSk7CisKK2Nhc2UgWFlORVQ6CisgICAgcmV0dXJuKGht c2dhKGh4eW5ldCkpOworCisjaWZuZGVmIE5PVENQT1BUUworI2lmZGVmIFNPTF9TT0NLRVQKK2Nh c2UgWFlUQ1A6CisgICAgcmV0dXJuKGhtc2dhKGh4eXRjcCkpOworI2VuZGlmIC8qIFNPTF9TT0NL RVQgKi8KKyNlbmRpZiAvKiBOT1RDUE9QVFMgKi8KKworI2lmZGVmIEFOWVgyNQorY2FzZSBYWVgy NToKKyAgICByZXR1cm4oaG1zZ2EoaHh5eDI1KSk7CisKKyNpZm5kZWYgSUJNWDI1CitjYXNlIFhZ UEFEOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBQQUQgbmFtZSB2YWx1ZVxuXAorU2V0 IGEgUEFEIFguMyBwYXJhbWV0ZXIgd2l0aCBhIGRlc2lyZWQgdmFsdWUuIikpOworI2VuZGlmIC8q IElCTVgyNSAqLworI2VuZGlmIC8qIEFOWVgyNSAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKwor I2lmbmRlZiBOT1NQTAorY2FzZSBYWU9VVFA6CisgICAgcmV0dXJuKGhtc2dhKGh4eW91dCkpOwor I2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TRVRLRVkKK2Nhc2UgWFlLRVk6ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgS0VZICovCisgICAgcmV0dXJuKGhtc2dhKGht aHNrZXkpKTsKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworCisjaWZuZGVmIE5PQ1NFVFMKK2Nhc2Ug WFlMQU5HOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBMQU5HVUFHRSBuYW1lXG5cCisg IFNlbGVjdHMgbGFuZ3VhZ2Utc3BlY2lmaWMgdHJhbnNsYXRpb24gcnVsZXMgZm9yIHRleHQtbW9k ZSBmaWxlIHRyYW5zZmVycy5cblwKKyAgVXNlZCB3aXRoIFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQg YW5kIFNFVCBUUkFOU0ZFUiBDSEFSQUNURVItU0VUIHdoZW4gb25lXG5cCisgIG9mIHRoZXNlIGlz IEFTQ0lJLiIpKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKK2Nhc2UgWFlMSU5FOgorICAgIHBy aW50ZigiXG5TeW50YXg6IFNFVCBMSU5FIChvciBTRVQgUE9SVCkgWyBzd2l0Y2hlcyBdIFsgZGV2 aWNlbmFtZSBdXG5cCisgIFNlbGVjdHMgYSBzZXJpYWwtcG9ydCBkZXZpY2UgdG8gdXNlIGZvciBt YWtpbmcgY29ubmVjdGlvbnMuXG4iKTsKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorICAgIHByaW50 ZigiXG4iKTsKKyAgICBwcmludGYoCisiICBZb3UgbWF5IGFjY2VzcyBjb21tdW5pY2F0aW9uIHBv cnRzIGJ5IHRoZSB0cmFkaXRpb25hbCBcIkRPU1wiIHBvcnQgbmFtZVxuIik7CisgICAgcHJpbnRm KAorIiAgKGUuZy4gU0VUIFBPUlQgQ09NMSkgb3IgYnkgdGhlIE1pY3Jvc29mdCBUZWxlcGhvbnkg bW9kZW0gbmFtZSBmcm9tIHRoZVxuIik7CisgICAgcHJpbnRmKAorIiAgTW9kZW1zIGZvbGRlciBv ZiB0aGUgQ29udHJvbCBQYW5lbCAoZS5nLiBTRVQgUE9SVCBUQVBJKS4gSWYgb25lIG1ldGhvZFxu Iik7CisgICAgcHJpbnRmKCIgIGRvZXNuJ3Qgd29yaywgdHJ5IHRoZSBvdGhlci5cblxuIik7Cisj ZW5kaWYgLyogTlQgKi8KKyNlbHNlICAvKiBPUzIgKi8KKyAgICBwcmludGYoIiAgVHlwaWNhbCBk ZXZpY2UgbmFtZSBmb3IgdGhpcyBwbGF0Zm9ybTogJXMuXG4iLHR0Z3RwbigpKTsKKyAgICBwcmlu dGYoIiAgVGhlIGRlZmF1bHQgZGV2aWNlIG5hbWUgaXMgJXMgKGkuZS4gbm9uZSkuXG4iLGRmdHR5 KTsKKyAgICBpZiAoIWRmbG9jKSB7CisgICAgICAgIHByaW50ZigKKyIgIElmIHlvdSBkbyBub3Qg Z2l2ZSBhIFNFVCBMSU5FIGNvbW1hbmQgb3IgaWYgeW91IGdpdmUgYSBTRVQgTElORSBjb21tYW5k XG4iKTsKKyAgICAgICAgcHJpbnRmKAorIiAgd2l0aCBubyBkZXZpY2UgbmFtZSwgb3IgaWYgeW91 IHNwZWNpZnkgJXMgYXMgdGhlIGRldmljZSBuYW1lLFxuIixkZnR0eSk7CisgICAgICAgIHByaW50 ZigKKyIgIEtlcm1pdCB3aWxsIGJlIGluIFwicmVtb3RlIG1vZGVcIiwgc3VpdGFibGUgZm9yIHVz ZSBvbiB0aGUgZmFyIGVuZCBvZiBhXG4iKTsKKyAgICAgICAgcHJpbnRmKAorIiAgY29ubmVjdGlv biwgZS5nLiBhcyB0aGUgZmlsZS10cmFuc2ZlciBwYXJ0bmVyIG9mIHlvdXIgZGVza3RvcCBjb21t dW5pY2F0aW9uXAorXG4iKTsKKyAgICAgICAgcHJpbnRmKAorIiAgc29mdHdhcmUuICBJZiB5b3Ug U0VUIExJTkUgdG8gYSBzcGVjaWZpYyBkZXZpY2Ugb3RoZXIgdGhhbiAlcyxcbiIsIGRmdHR5KTsK KyAgICAgICAgcHJpbnRmKAorIiAgS2VybWl0IGlzIGluIFwibG9jYWwgbW9kZVwiLCBzdWl0YWJs ZSBmb3IgbWFraW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyXG4iCisgICAgICAgICAgICAgICk7 CisgICAgICAgIHByaW50ZigKKyIgIGNvbXB1dGVyLiAgU0VUIExJTkUgYWxvbmUgcmVzZXRzIEtl cm1pdCB0byByZW1vdGUgbW9kZS5cbiIpOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgcHJpbnRmKAorIiAgVG8gdXNlIGEgbW9kZW0gdG8gZGlhbCBvdXQsIGZpcnN0IFNFVCBNT0RF TSBUWVBFIChlLmcuLCB0byBVU1IpLCB0aGVuXG4iKTsKKyAgICBwcmludGYoCisjaWZkZWYgT1My CisiICBTRVQgUE9SVCBDT014IChvciBTRVQgUE9SVCBUQVBJKSwgU0VUIFNQRUVELCB0aGVuIGdp dmUgYSBESUFMIGNvbW1hbmQuXG4iKTsKKyNlbHNlCisiICBTRVQgTElORSB4eHgsIHRoZW4gU0VU IFNQRUVELCB0aGVuIGdpdmUgYSBESUFMIGNvbW1hbmQuXG4iKTsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICBwcmludGYoCisjaWZkZWYgT1MyCisiICBGb3IgZGlyZWN0IG51bGwtbW9kZW0gY29ubmVj dGlvbnMgdXNlIFNFVCBNT0RFTSBUWVBFIE5PTkUsIFNFVCBQT1JUIENPTXgsXG4iCisjZWxzZQor IiAgRm9yIGRpcmVjdCBudWxsLW1vZGVtIGNvbm5lY3Rpb25zLCB1c2UgU0VUIE1PREVNIFRZUEUg Tk9ORSwgU0VUIExJTkUgeHh4LFxuIgorI2VuZGlmIC8qIE9TMiAqLworICAgICk7CisgICAgcHJp bnRmKAorIiAgdGhlbiBTRVQgRkxPVywgU0VUIFNQRUVELCBhbmQgQ09OTkVDVC5cbiIpOworICAg IHByaW50ZigKKyJcbk9wdGlvbmFsIHN3aXRjaGVzOlxuXAorICAvQ09OTkVDVCAtIEVudGVyIENP Tk5FQ1QgbW9kZSBhdXRvbWF0aWNhbGx5IGlmIFNFVCBMSU5FIHN1Y2NlZWRzLlxuIik7CisgICAg cHJpbnRmKAorIiAgL1NFUlZFUiAgLSBFbnRlciBzZXJ2ZXIgbW9kZSBhdXRvbWF0aWNhbGx5IGlm IFNFVCBMSU5FIHN1Y2NlZWRzLlxuIik7CisjaWZkZWYgVk1TCisgICAgcHJpbnRmKAorIiAgL1NI QVJFICAgLSBPcGVuIHRoZSBkZXZpY2UgaW4gc2hhcmVkIG1vZGUuXG4iKTsKKyAgICBwcmludGYo CisiICAvTk9TSEFSRSAtIE9wZW4gdGhlIGRldmljZSBpbiBleGNsdXNpdmUgbW9kZS5cbiIpOwor I2VuZGlmIC8qIFZNUyAqLworICAgIHByaW50ZigiXG4iKTsKKyAgICBwcmludGYoCisiQWxzbyBz ZWUgSEVMUCBTRVQgTU9ERU0sIEhFTFAgU0VUIERJQUwsIEhFTFAgU0VUIFNQRUVELCBIRUxQIFNF VCBGTE9XLlxuIik7CisgICAgcmV0dXJuKDApOworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhZTUFD UjoKKyAgICByZXR1cm4oaG1zZ2EoaHh5bWFjcikpOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNp Zm5kZWYgTk9ESUFMCitjYXNlIFhZTU9ETToKKyAgICByZXR1cm4oaG1zZ2EoaHh5bW9kbSkpOwor I2VuZGlmIC8qIE5PRElBTCAqLworCitjYXNlIFhZUEFSSToKKyAgICByZXR1cm4oaG1zZ2EoaHh5 cGFyaSkpOworCitjYXNlIFhZUFJPTToKKyAgICByZXR1cm4oaG1zZ2EoaG14eXBybSkpOworCitj YXNlIFhZUVVJRToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgUVVJRVQge09OLCBPRkZ9 XG5cCisgIE5vcm1hbGx5IE9GRi4gIE9OIGRpc2FibGVzIG1vc3QgaW5mb3JtYXRpb24gbWVzc2Fn ZXMgZHVyaW5nIGludGVyYWN0aXZlXG5cCisgIG9wZXJhdGlvbi4iKSk7CisKKyNpZmRlZiBDS19T UEVFRAorY2FzZSBYWVFDVEw6CisgICAgcmV0dXJuKGhtc2dhKGhteHlxY3RsKSk7CisjZW5kaWYg LyogQ0tfU1BFRUQgKi8KKworY2FzZSBYWVJFVFI6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDog U0VUIFJFVFJZIG51bWJlclxuXAorICBJbiBLZXJtaXQgcHJvdG9jb2wgZmlsZSB0cmFuc2ZlcnM6 IEhvdyBtYW55IHRpbWVzIHRvIHJldHJhbnNtaXQgYVxuXAorICBwYXJ0aWN1bGFyIHBhY2tldCBi ZWZvcmUgZ2l2aW5nIHVwOyAwID0gbm8gbGltaXQuIikpOworCisjaWZuZGVmIE5PTE9DQUwKK2Nh c2UgWFlTRVNTOgorI2lmZGVmIFVOSVgKKyAgICByZXR1cm4oaG1zZygKKyJTeW50YXg6XG5cCisg U0VUIFNFU1NJT04tTE9HIHsgQklOQVJZLCBERUJVRywgTlVMTC1QQURERUQsIFRFWFQsIFRJTUVT VEFNUEVELVRFWFQgfVxuXAorICBJZiBCSU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0 ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYgVEVYVCwgc3RyaXBcblwKKyAgb3V0IENSLCBOVUwsIGFu ZCBYT04vWE9GRiBjaGFyYWN0ZXJzLiAgREVCVUcgaXMgdGhlIHNhbWUgYXMgQklOQVJZIGJ1dFxu XAorICBhbHNvIGluY2x1ZGVzIFRlbG5ldCBuZWdvdGlhdGlvbnMgb24gVENQL0lQIGNvbm5lY3Rp b25zLiIpKTsKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICByZXR1cm4oaG1zZygKKyJT eW50YXg6IFNFVCBTRVNTSU9OLUxPRyB7IEJJTkFSWSwgREVCVUcsIFRFWFQsIFRJTUVTVEFNUEVE LVRFWFQgfVxuXAorICBJZiBCSU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGlu IHNlc3Npb24gbG9nLiAgSWYgVEVYVCwgc3RyaXBcblwKKyAgb3V0IENSLCBOVUwsIGFuZCBYT04v WE9GRiBjaGFyYWN0ZXJzLiAgREVCVUcgaXMgdGhlIHNhbWUgYXMgQklOQVJZIGJ1dFxuXAorICBh bHNvIGluY2x1ZGVzIFRlbG5ldCBuZWdvdGlhdGlvbnMgb24gVENQL0lQIGNvbm5lY3Rpb25zLiIp KTsKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworICAgIHJldHVybihobXNnKAorIlN5bnRheDogU0VU IFNFU1NJT04tTE9HIHsgQklOQVJZLCBERUJVRywgVEVYVCwgVElNRVNUQU1QRUQtVEVYVCB9XG5c CisgIElmIEJJTkFSWSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJhY3RlcnMgaW4gc2Vzc2lvbiBs b2cuICBJZiBURVhULCBzdHJpcFxuXAorICBvdXQgQ1IsIE5VTCwgYW5kIFhPTi9YT0ZGIGNoYXJh Y3RlcnMuICBERUJVRyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0XG5cCisgIGFsc28gaW5jbHVk ZXMgVGVsbmV0IG5lZ290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMuIikpOworI2Vsc2UK KyNpZmRlZiBBTUlHQQorICAgIHJldHVybihobXNnKAorIlN5bnRheDogU0VUIFNFU1NJT04tTE9H IHsgQklOQVJZLCBERUJVRywgVEVYVCwgVElNRVNUQU1QRUQtVEVYVCB9XG5cCisgIElmIEJJTkFS WSwgcmVjb3JkIGFsbCBDT05ORUNUIGNoYXJhY3RlcnMgaW4gc2Vzc2lvbiBsb2cuICBJZiBURVhU LCBzdHJpcFxuXAorICBvdXQgQ1IsIE5VTCwgYW5kIFhPTi9YT0ZGIGNoYXJhY3RlcnMuICBERUJV RyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0XG5cCisgIGFsc28gaW5jbHVkZXMgVGVsbmV0IG5l Z290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVjdGlvbnMuIikpOworI2Vsc2UKKyNpZmRlZiBHRU1E T1MKKyAgICByZXR1cm4oaG1zZygKKyJTeW50YXg6IFNFVCBTRVNTSU9OLUxPRyB7IEJJTkFSWSwg REVCVUcsIFRFWFQsIFRJTUVTVEFNUEVELVRFWFQgfVxuXAorICBJZiBCSU5BUlksIHJlY29yZCBh bGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGluIHNlc3Npb24gbG9nLiAgSWYgVEVYVCwgc3RyaXBcblwK KyAgb3V0IENSLCBOVUwsIGFuZCBYT04vWE9GRiBjaGFyYWN0ZXJzLiAgREVCVUcgaXMgdGhlIHNh bWUgYXMgQklOQVJZIGJ1dFxuXAorICBhbHNvIGluY2x1ZGVzIFRlbG5ldCBuZWdvdGlhdGlvbnMg b24gVENQL0lQIGNvbm5lY3Rpb25zLiIpKTsKKyNlbHNlCisjaWZkZWYgT1MyCisgICAgcmV0dXJu KGhtc2coCisiU3ludGF4OiBTRVQgU0VTU0lPTi1MT0cgeyBCSU5BUlksIERFQlVHLCBURVhULCBU SU1FU1RBTVBFRC1URVhUIH1cblwKKyAgSWYgQklOQVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hh cmFjdGVycyBpbiBzZXNzaW9uIGxvZy4gIElmIFRFWFQsIHN0cmlwXG5cCisgIG91dCBOVUwgYW5k IFhPTi9YT0ZGIGNoYXJhY3RlcnMuICBERUJVRyBpcyB0aGUgc2FtZSBhcyBCSU5BUlkgYnV0XG5c CisgIGFsc28gaW5jbHVkZXMgVGVsbmV0IG5lZ290aWF0aW9ucyBvbiBUQ1AvSVAgY29ubmVjdGlv bnMuIikpOworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICByZXR1cm4oaG1zZygKKyJTeW50YXg6IFNF VCBTRVNTSU9OLUxPRyB7IEJJTkFSWSwgREVCVUcsIFRFWFQsIFRJTUVTVEFNUEVELVRFWFQgfVxu XAorICBJZiBCSU5BUlksIHJlY29yZCBhbGwgQ09OTkVDVCBjaGFyYWN0ZXJzIGluIHNlc3Npb24g bG9nLiAgSWYgVEVYVCwgc3RyaXBcblwKKyAgb3V0IENSLCBOVUwsIGFuZCBYT04vWE9GRiBjaGFy YWN0ZXJzLiAgREVCVUcgaXMgdGhlIHNhbWUgYXMgQklOQVJZIGJ1dFxuXAorICBhbHNvIGluY2x1 ZGVzIFRlbG5ldCBuZWdvdGlhdGlvbnMgb24gVENQL0lQIGNvbm5lY3Rpb25zLiIpKTsKKyNlbHNl CisjaWZkZWYgT1NLCisgICAgcmV0dXJuKGhtc2coCisiU3ludGF4OiBTRVQgU0VTU0lPTi1MT0cg eyBCSU5BUlksIERFQlVHLCBURVhULCBUSU1FU1RBTVBFRC1URVhUIH1cblwKKyAgSWYgQklOQVJZ LCByZWNvcmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVycyBpbiBzZXNzaW9uIGxvZy4gIElmIFRFWFQs IHN0cmlwXG5cCisgIG91dCBMRiwgTlVMIGFuZCBYT04vWE9GRiBjaGFyYWN0ZXJzLiIpKTsKKyNl bHNlCisjaWZkZWYgTUFDCisgICAgcmV0dXJuKGhtc2coCisiU3ludGF4OiBTRVQgU0VTU0lPTi1M T0cgeyBCSU5BUlksIERFQlVHLCBURVhULCBUSU1FU1RBTVBFRC1URVhUIH1cblwKKyAgSWYgQklO QVJZLCByZWNvcmQgYWxsIENPTk5FQ1QgY2hhcmFjdGVycyBpbiBzZXNzaW9uIGxvZy4gIElmIFRF WFQsIHN0cmlwXG5cCisgIG91dCBMRiwgTlVMIGFuZCBYT04vWE9GRiBjaGFyYWN0ZXJzLiIpKTsK KyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLwor I2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8q IE9TMk9SVU5JWCAqLworCitjYXNlIFhZU1BFRToKKyNpZmRlZiBPUzIKKworICAgIHJldHVybiho bXNnKCJTeW50YXg6IFNFVCBTUEVFRCBudW1iZXJcblwKKyAgU3BlZWQgZm9yIHNlcmlhbC1wb3J0 IGNvbW11bmljYXRpb24gZGV2aWNlIHNwZWNpZmllZCBpbiBtb3N0IHJlY2VudFxuXAorICBTRVQg UE9SVCBjb21tYW5kLCBpbiBiaXRzIHBlciBzZWNvbmQuICBUeXBlIFNFVCBTUEVFRCA/IGZvciBh IGxpc3Qgb2ZcblwKKyAgcG9zc2libGUgc3BlZWRzLiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGht c2coIlN5bnRheDogU0VUIFNQRUVEIG51bWJlclxuXAorICBTcGVlZCBmb3Igc2VyaWFsLXBvcnQg Y29tbXVuaWNhdGlvbiBkZXZpY2Ugc3BlY2lmaWVkIGluIG1vc3QgcmVjZW50XG5cCisgIFNFVCBM SU5FIGNvbW1hbmQsIGluIGJpdHMgcGVyIHNlY29uZC4gIFR5cGUgU0VUIFNQRUVEID8gZm9yIGEg bGlzdCBvZlxuXAorICBwb3NzaWJsZSBzcGVlZHMuICBIYXMgbm8gZWZmZWN0IG9uIGpvYidzIGNv bnRyb2xsaW5nIHRlcm1pbmFsLiIpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xP Q0FMICovCisKKyNpZm5kZWYgTk9YRkVSCitjYXNlIFhZUkVDVjoKKyAgICByZXR1cm4oaG1zZ2Eo aHh5cmN2KSk7CitjYXNlIFhZU0VORDoKKyAgICByZXR1cm4oaG1zZ2EoaHh5c25kKSk7CitjYXNl IFhZUkVQVDoKKyAgICByZXR1cm4oaG1zZ2EoaHh5cnB0KSk7CisjZW5kaWYgLyogTk9YRkVSICov CisKKyNpZm5kZWYgTk9TRVJWRVIKK2Nhc2UgWFlTRVJWOgorICAgIHJldHVybihobXNnYShoc2V0 c3J2KSk7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2lmZGVmIFROQ09ERQorY2FzZSBYWVRF TDoKKyAgICByZXR1cm4oaG1zZ2EoaHh5dGVsKSk7CisKK2Nhc2UgWFlURUxPUDoKKyAgICByZXR1 cm4oaG1zZ2EoaHh5dG9wdCkpOworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZuZGVmIE5PWE1J VAorY2FzZSBYWVhNSVQ6CisgICAgcmV0dXJuKGhtc2dhKGhzZXR4bWl0KSk7CisjZW5kaWYgLyog Tk9YTUlUICovCisKKyNpZm5kZWYgTk9DU0VUUworY2FzZSBYWVVOQ1M6CisgICAgcmV0dXJuKGht c2coIlN5bnRheDogU0VUIFVOS05PV04tQ0hBUi1TRVQgYWN0aW9uXG5cCisgIERJU0NBUkQgKGRl ZmF1bHQpIG1lYW5zIHJlamVjdCBhbnkgYXJyaXZpbmcgZmlsZXMgZW5jb2RlZCBpbiB1bmtub3du XG5cCisgIGNoYXJhY3RlciBzZXRzLiAgS0VFUCBtZWFucyB0byBhY2NlcHQgdGhlbSBhbnl3YXku IikpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIFVOSVgKK2Nhc2UgWFlXSUxEOgor ICAgIHJldHVybihobXNnYShoeHl3aWxkKSk7CisjZW5kaWYgLyogVU5JWCAqLworCisjaWZuZGVm IE5PWEZFUgorY2FzZSBYWVdJTkQ6CisgICAgcmV0dXJuKGhtc2dhKGh4eXdpbmQpKTsKK2Nhc2Ug WFlYRkVSOgorICAgIHJldHVybihobXNnYShoeHl4ZmVyKSk7CisjZW5kaWYgLyogTk9YRkVSICov CisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMk1PVVNFCitjYXNlIFhZTU9VU0U6CisgICAg cmV0dXJuKGhtc2dhKGh4eW1vdXNlKSk7CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKyNlbmRpZiAv KiBOT0xPQ0FMICovCisKK2Nhc2UgWFlBTFJNOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNF VCBBTEFSTSBbIHsgc2Vjb25kcywgaGg6bW06c3MgfSBdXG5cCisgIE51bWJlciBvZiBzZWNvbmRz IGZyb20gbm93LCBvciB0aW1lIG9mIGRheSwgYWZ0ZXIgd2hpY2ggSUYgQUxBUk1cblwKKyAgd2ls bCBzdWNjZWVkLiAgMCwgb3Igbm8gdGltZSBhdCBhbGwsIG1lYW5zIG5vIGFsYXJtLiIpKTsKKwor Y2FzZSBYWVBST1RPOgorICAgIHJldHVybihobXNnYShoeHl4eXopKTsKKworI2lmZGVmIENLX1NQ RUVECitjYXNlIFhZUFJFRklYOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBQUkVGSVhJ TkcgeyBBTEwsIENBVVRJT1VTLCBNSU5JTUFMIH1cblwKKyAgXAorU2VsZWN0cyB0aGUgZGVncmVl IG9mIGNvbnRyb2wtY2hhcmFjdGVyIHByZWZpeGluZy4gIEFsc28gc2VlIEhFTFAgU0VUIENPTlRS T0wuIgorKSk7CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworI2lmZGVmIE9TMgorY2FzZSBYWUxP R0lOOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBMT0dJTiB7IFVTRVJJRCwgUEFTU1dP UkQsIFBST01QVCB9IDx0ZXh0PlxuXAorICBQcm92aWRlcyBhY2Nlc3MgaW5mb3JtYXRpb24gZm9y IHVzZSBieSBsb2dpbiBzY3JpcHRzLiIpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBO T1NQTAorY2FzZSBYWVRNUERJUjoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgVEVNUC1E SVJFQ1RPUlkgWyA8ZGlyZWN0b3J5LW5hbWU+IF1cblwKKyAgT3ZlcnJpZGVzIGF1dG9tYXRpYyBh c3NpZ25tZW50IG9mIFxcdih0bXBkaXIpIHZhcmlhYmxlLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAq LworCisjaWZkZWYgT1MyCitjYXNlIFhZVElUTEU6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDog U0VUIFRJVExFIDx0ZXh0PlxuXAorICBTZXRzIHdpbmRvdyB0aXRsZSB0byB0ZXh0IGluc3RlYWQg b2YgdXNpbmcgY3VycmVudCBob3N0L3BvcnQgbmFtZS4iKSk7CisjZW5kaWYgLyogT1MyICovCisK KyNpZm5kZWYgTk9QVVNICisjaWZuZGVmIE5PRlJJTExTCitjYXNlIFhZRURJVDoKKyAgICByZXR1 cm4oaG1zZygiU3ludGF4OiBTRVQgRURJVE9SIHBhdGhuYW1lIFsgb3B0aW9ucyBdXG5cCisgIFNw ZWNpZmllcyB0aGUgbmFtZSBvZiB5b3VyIHByZWZlcnJlZCBlZGl0b3IsIHBsdXMgYW55IGNvbW1h bmQtbGluZVxuXAorICBvcHRpb25zLiAgU0hPVyBFRElUT1IgZGlzcGxheXMgaXQuIikpOworI2Vu ZGlmIC8qIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZmRlZiBCUk9XU0VS CitjYXNlIFhZQlJPV1NFOgorI2lmZGVmIE5UCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VU IEJST1dTRVIgWyBwYXRobmFtZSBbIG9wdGlvbnMgXSBdXG5cCisgIFNwZWNpZmllcyB0aGUgbmFt ZSBvZiB5b3VyIHByZWZlcnJlZCBicm93c2VyIHBsdXMgYW55IGNvbW1hbmQtbGluZVxuXAorICBv cHRpb25zLiAgU0hPVyBCUk9XU0VSIGRpc3BsYXlzIGl0LiAgT21pdCBwYXRobmFtZSBhbmQgb3B0 aW9ucyB0byB1c2VcblwKKyAgU2hlbGxFeGVjdXRlLiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGht c2coIlN5bnRheDogU0VUIEJST1dTRVIgWyBwYXRobmFtZSBbIG9wdGlvbnMgXSBdXG5cCisgIFNw ZWNpZmllcyB0aGUgbmFtZSBvZiB5b3VyIHByZWZlcnJlZCBicm93c2VyIHBsdXMgYW55IGNvbW1h bmQtbGluZVxuXAorICBvcHRpb25zLiAgU0hPVyBCUk9XU0VSIGRpc3BsYXlzIGl0LiIpKTsKKyNl bmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIEJST1dTRVIgKi8KKworI2lmZGVmIENLX1RBUEkKK2Nh c2UgWFlUQVBJOgorICAgIHJldHVybihobXNnYShoeHl0YXBpKSk7CisjZW5kaWYgLyogQ0tfVEFQ SSAqLworCisjaWZkZWYgTlQKK2Nhc2UgWFlXSU45NToKKyAgICByZXR1cm4oaG1zZ2EoaHh5d2lu OTUpKTsKKyNlbmRpZiAvKiBOVCAqLworCisjaWZuZGVmIE5PU1BMCitjYXNlIFhZRlVOQzoKKyAg ICByZXR1cm4oaG1zZ2EoaHh5ZnVuYykpOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBD S19BVVRIRU5USUNBVElPTgorY2FzZSBYWUFVVEg6CisgICAgcmV0dXJuKGhtc2dhKGhteHlhdXRo KSk7CisjZWxzZSAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX1NTTAorY2FzZSBY WUFVVEg6CisgICAgcmV0dXJuKGhtc2dhKGhteHlhdXRoKSk7CisjZW5kaWYgLyogQ0tfU1NMICov CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworI2lmZGVmIEJST1dTRVIKK2Nhc2Ug WFlGVFA6CisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogU0VUIEZUUCBbIHBhdGhuYW1lIFsgb3B0 aW9ucyBdIF1cblwKKyAgU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHlvdXIgZnRwIGNsaWVudCwgcGx1 cyBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMuXG5cCisgIFNIT1cgRlRQIGRpc3BsYXlzIGl0LiIp KTsKKyNlbmRpZiAvKiBCUk9XU0VSICovCisKK2Nhc2UgWFlTTEVFUDoKKyAgICByZXR1cm4oaG1z ZygiU3ludGF4OiBTRVQgU0xFRVAgQ0FOQ0VMTEFUSU9OIHsgT04sIE9GRiB9XG5cCisgIFRlbGxz IHdoZXRoZXIgU0xFRVAgKFBBVVNFKSBvciBXQUlUIGNvbW1hbmRzIGNhbiBiZSBpbnRlcnJ1cHRl ZCBmcm9tIHRoZVxuXAorICBrZXlib2FyZDsgT04gYnkgZGVmYXVsdC4iKSk7CisKK2Nhc2UgWFlD RDoKKyAgICByZXR1cm4oaG1zZ2EoaG14eWNkKSk7CisKK2Nhc2UgWFlTRVJJQUw6CisgICAgcmV0 dXJuKGhtc2coIlN5bnRheDogU0VUIFNFUklBTCBkcHNcblwKKyAgZCBpcyBkYXRhIGxlbmd0aCBp biBiaXRzLCA3IG9yIDg7IHAgaXMgZmlyc3QgbGV0dGVyIG9mIHBhcml0eTsgcyBpcyBzdG9wXG5c CisgIGJpdHMsIDEgb3IgMi4gIEV4YW1wbGVzOiBcInNldCBzZXJpYWwgN2UxXCIsIFwic2V0IHNl cmlhbCA4bjFcIi4iKSk7CisKKyNpZmRlZiBIV1BBUklUWQorY2FzZSBYWVNUT1A6CisgICAgcmV0 dXJuKGhtc2coIlN5bnRheDogU0VUIFNUT1AtQklUUyB7IDEsIDIgfVxuXAorICBOdW1iZXIgb2Yg c3RvcCBiaXRzIHRvIHVzZSBvbiBTRVQgTElORSBjb25uZWN0aW9ucywgbm9ybWFsbHkgMS4iKSk7 CisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKworI2lmbmRlZiBOT0xPQ0FMCitjYXNlIFhZRElTQzoK KyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgRElTQ09OTkVDVCB7IE9OLCBPRkYgfVxuXAor ICBXaGV0aGVyIHRvIGNsb3NlIGFuZCByZWxlYXNlIGEgU0VUIExJTkUgZGV2aWNlIGF1dG9tYXRp Y2FsbHkgdXBvblxuXAorICBkaXNjb25uZWN0aW9uOyBPRkYgPSBrZWVwIGRldmljZSBvcGVuIChk ZWZhdWx0KTsgT04gPSBjbG9zZSBhbmQgcmVsZWFzZS4iKSk7CisjZW5kaWYgLyogTk9MT0NBTCAq LworCisjaWZkZWYgU1RSRUFNSU5HCitjYXNlIFhZU1RSRUFNOgorICAgIHJldHVybihobXNnKCJT eW50YXg6IFNFVCBTVFJFQU1JTkcgeyBPTiwgT0ZGLCBBVVRPIH1cblwKKyAgVGVsbHMgS2VybWl0 IHdoZXRoZXIgc3RyZWFtaW5nIHByb3RvY29sIGNhbiBiZSB1c2VkIGR1cmluZyBLZXJtaXQgZmls ZVxuXAorICB0cmFuc2ZlcnMuICBEZWZhdWx0IGlzIEFVVE8sIG1lYW5pbmcgdXNlIGl0IGlmIGNv bm5lY3Rpb24gaXMgcmVsaWFibGUuIikpOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCitjYXNl IFhZUkVMWToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgUkVMSUFCTEUgeyBPTiwgT0ZG LCBBVVRPIH1cblwKKyAgVGVsbHMgS2VybWl0IHdoZXRoZXIgaXRzIGNvbm5lY3Rpb24gaXMgcmVs aWFibGUuICBEZWZhdWx0IGlzIEFVVE8sXG5cCisgIG1lYW5pbmcgS2VybWl0IHNob3VsZCBmaWd1 cmUgaXQgb3V0IGZvciBpdHNlbGYuIikpOworCitjYXNlIFhZQ0xFQVI6CisgICAgcmV0dXJuKGht c2coIlN5bnRheDogU0VUIENMRUFSLUNIQU5ORUwgeyBPTiwgT0ZGLCBBVVRPIH1cblwKKyAgVGVs bHMgS2VybWl0IHdoZXRoZXIgaXRzIGNvbm5lY3Rpb24gaXMgdHJhbnNwYXJlbnQgdG8gYWxsIDgt Yml0IGJ5dGVzLlxuXAorICBEZWZhdWx0IGlzIEFVVE8sIG1lYW5pbmcgS2VybWl0IGZpZ3VyZXMg aXQgb3V0IGZyb20gdGhlIGNvbm5lY3Rpb24gdHlwZS5cblwKKyAgV2hlbiBib3RoIHNlbmRlciBh bmQgcmVjZWl2ZXIgYWdyZWUgY2hhbm5lbCBpcyBjbGVhciwgU0VUIFBSRUZJWElORyBOT05FXG5c CisgIGlzIHVzZWQgYXV0b21hdGljYWxseS4iKSk7CisKKyNpZmRlZiBUTE9HCitjYXNlIFhZVExP RzoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBTRVQgVFJBTlNBQ1RJT04tTE9HIHsgQlJJRUYs IEZUUCwgVkVSQk9TRSB9XG5cCisgIFNlbGVjdHMgdGhlIHRyYW5zYWN0aW9uLWxvZyBmb3JtYXQ7 IEJSSUVGIGFuZCBGVFAgaGF2ZSBvbmUgbGluZSBwZXIgZmlsZTtcblwKKyAgRlRQIGlzIGNvbXBh dGlibGUgd2l0aCBGVFAgbG9nLiAgVkVSQk9TRSAodGhlIGRlZmF1bHQpIGhhcyBtb3JlIGluZm8u IikpOworI2VuZGlmIC8qIFRMT0cgKi8KKworY2FzZSBYWU9QVFM6CisgICAgcmV0dXJuKGhtc2co IlN5bnRheDogU0VUIE9QVElPTlMgY29tbWFuZCBbIHN3aXRjaGVzLi4uIF1cblwKKyAgRm9yIHVz ZSB3aXRoIGNvbW1hbmRzIHRoYXQgaGF2ZSBzd2l0Y2hlczsgc2V0cyB0aGUgZGVmYXVsdCBzd2l0 Y2hlcyBmb3JcblwKKyAgdGhlIGdpdmVuIGNvbW1hbmQuICBUeXBlIFNFVCBPUFRJT05TID8gZm9y IGEgbGlzdCBvZiBhbWVuYWJsZSBjb21tYW5kcy4iKSk7CisKKyNpZm5kZWYgTk9TUEwKK2Nhc2Ug WFlUSU1FUjoKKyAgICByZXR1cm4oaG1zZ2EoaG14eXRpbWVyKSk7CisjZW5kaWYgLyogTk9TUEwg Ki8KKworI2lmZGVmIENLUk9PVAorICBjYXNlIFhZUk9PVDoKKyAgICByZXR1cm4oaG1zZ2EoaG14 eGNocm9vdCkpOworI2VuZGlmIC8qIFhZUk9PVCAqLworCisjaWZkZWYgQU5ZU1NICisgIGNhc2Ug WFlTU0g6CisgICAgcmV0dXJuKGhtc2dhKGhteHlzc2gpKTsKKyNlbmRpZiAvKiBBTllDTUQgKi8K KworI2lmZGVmIExPQ1VTCisgIGNhc2UgWFlMT0NVUzoKKyAgICByZXR1cm4oaG1zZ2EoaG14eWxv Y3VzKSk7CisjZW5kaWYgLyogTE9DVVMgKi8KKworI2lmZGVmIE9TMgorI2lmZGVmIEtVSQorICBj YXNlIFhZR1VJOgorICAgIHJldHVybihobXNnYShobXh5Z3VpKSk7CisjZW5kaWYgLyogS1VJICov CisjZW5kaWYgLyogT1MyICovCisKKyAgY2FzZSBYWU1BVENIOgorICAgIHJldHVybihobXNnYSho bXh5bWF0Y2gpKTsKKworI2lmbmRlZiBOT1NFWFAKKyAgY2FzZSBYWVNFWFA6CisgICAgcmV0dXJu KGhtc2dhKGhteHlzZXhwKSk7CisjZW5kaWYJLyogTk9TRVhQICovCisKKyNpZm5kZWYgTk9TUEwK KyAgY2FzZSBYWVZBUkVWOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFNFVCBWQVJJQUJMRS1F VkFMVUFUSU9OIHsgUkVDVVJTSVZFLCBTSU1QTEUgfVxuXAorICBUZWxscyBLZXJtaXQgd2VhdGhl ciB0byBldmFsdWF0ZSBcXCV4IGFuZCBcXCZ4W10gdmFyaWFibGVzIHJlY3Vyc2l2ZWx5XG5cCisg ICh3aGljaCBpcyB0aGUgZGVmYXVsdCBmb3IgaGlzdG9yaWNhbCByZWFzb25zKSBvciBieSBzaW1w bGUgc3RyaW5nXG5cCisgIHJlcGxhY2VtZW50LCB3aGljaCBsZXRzIHlvdSB1c2UgdGhlc2UgdmFy aWFibGVzIHNhZmVseSB0byBzdG9yZSBzdHJpbmdzXG5cCisgIChzdWNoIGFzIFdpbmRvd3MgcGF0 aG5hbWVzKSB0aGF0IG1pZ2h0IGNvbnRhaW4gYmFja3NsYXNoZXMuIikpOworI2VuZGlmCS8qIE5P U1BMICovCisKK2RlZmF1bHQ6CisgICAgcHJpbnRmKCJOb3QgYXZhaWxhYmxlIC0gXCIlc1wiXG4i LGNtZGJ1Zik7CisgICAgcmV0dXJuKDApOworICAgIH0KK30KKworI2lmbmRlZiBOT1NQTAorc3Rh dGljIGNoYXIgKiBoZnNwbGl0W10gPSB7CisiRnVuY3Rpb24gXFxmc3BsaXQoczEsJmEsczIsczMs bjIsbjMpIC0gQXNzaWducyBzdHJpbmcgd29yZHMgdG8gYW4gYXJyYXkuIiwKKyIgIHMxID0gc291 cmNlIHN0cmluZy4iLAorIiAgJmEgPSBhcnJheSBkZXNpZ25hdG9yLiIsCisiICBzMiA9IG9wdGlv bmFsIGJyZWFrIHNldC4iLAorIiAgczMgPSBvcHRpb25hbCBpbmNsdWRlIHNldCAob3IgQUxMLCBD U1YsIG9yIFRTVikuIiwKKyIgIG4yID0gb3B0aW9uYWwgZ3JvdXBpbmcgbWFzay4iLAorIiAgbjMg PSBvcHRpb25hbCBzZXBhcmF0b3IgZmxhZzoiLAorIiAgIDAgPSBjb2xsYXBzZSBhZGphY2VudCBz ZXBhcmF0b3JzOyIsCisiICAgMSA9IGRvbid0IGNvbGxhcHNlIGFkamFjZW50IHNlcGFyYXRvcnMu IiwKKyIgIiwKKyIgIFxcZnNwbGl0KCkgYnJlYWtzIHRoZSBzdHJpbmcgczEgaW50byBcIndvcmRz XCIgYXMgaW5kaWNhdGVkIGJ5IHRoZSBvdGhlciIsCisiICBwYXJhbWV0ZXJzLCBhc3NpZ25pbmcg dGhlbSB0byBnaXZlbiBhcnJheSwgaWYgYW55LiAgSWYgdGhlIHNwZWNpZmllZCIsCisiICBhbHJl YWR5IGV4aXN0cywgaXQgaXMgcmVjeWNsZWQ7IGlmIG5vIGFycmF5IGlzIHNwZWNpZmllZCwgdGhl IGNvdW50IGlzIiwKKyIgIHJldHVybmVkIGJ1dCBubyBhcnJheSBpcyBjcmVhdGVkLiAgQWxsIGFy Z3VtZW50cyBhcmUgb3B0aW9uYWwiLAorIiAgKFxcZnNwbGl0KCkgd2l0aCBubyBhcmd1bWVudHMg cmV0dXJucyAwKS4iLAorIiAiLAorIiAgVGhlIEJSRUFLIFNFVCBpcyB0aGUgc2V0IG9mIGFsbCBj aGFyYWN0ZXJzIHRoYXQgc2VwYXJhdGUgd29yZHMuIFRoZSIsCisiICBkZWZhdWx0IGJyZWFrIHNl dCBpcyBhbGwgY2hhcmFjdGVycyBleGNlcHQgQVNDSUkgbGV0dGVycyBhbmQgZGlnaXRzLiIsCisi ICBBU0NJSSAoQzApIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBicmVhayBjaGFy YWN0ZXJzIGJ5IGRlZmF1bHQsIiwKKyIgIGFzIGFyZSBzcGFjaW5nIGFuZCBwdW5jdHVhdGlvbiBj aGFyYWN0ZXJzLCBicmFja2V0cywgYW5kIHNvIG9uLCBhbmQiLAorIiAgYWxsIDgtYml0IGNoYXJh Y3RlcnMuIiwKKyIgIiwKKyIgIFRoZSBJTkNMVURFIFNFVCBpcyB0aGUgc2V0IG9mIGNoYXJhY3Rl cnMgdGhhdCBhcmUgdG8gYmUgdHJlYXRlZCBhcyAiLAorIiAgcGFydHMgb2Ygd29yZHMgZXZlbiB0 aG91Z2ggdGhleSBub3JtYWxseSB3b3VsZCBiZSBzZXBhcmF0b3JzLiAgVGhlIiwKKyIgIGRlZmF1 bHQgaW5jbHVkZSBzZXQgaXMgZW1wdHkuICBUaHJlZSBzcGVjaWFsIHN5bWJvbGljIGluY2x1ZGUg c2V0cyBhcmUiLAorIiAgYWxzbyBhbGxvd2VkOiIsCisiICIsCisiICAgIEFMTCAobWVhbmluZyBp bmNsdWRlIGFsbCBieXRlcyB0aGF0IGFyZSBub3QgaW4gdGhlIGJyZWFrIHNldCkiLAorIiAgICBD U1YgKHNwZWNpYWwgdHJlYXRtZW50IGZvciBDb21tYS1TZXBhcmF0ZWQtVmFsdWUgcmVjb3Jkcyki LAorIiAgICBUU1YgKHNwZWNpYWwgdHJlYXRtZW50IGZvciBUYWItU2VwYXJhdGVkLVZhbHVlIHJl Y29yZHMpIiwKKyIgIiwKKyIgIEZvciBvcGVyYXRpbmcgb24gOC1iaXQgY2hhcmFjdGVyIHNldHMs IHRoZSBpbmNsdWRlIHNldCBzaG91bGQgYmUgQUxMLiIsCisiICIsCisiICBJZiB0aGUgZ3JvdXBp bmcgbWFzayBpcyBnaXZlbiBhbmQgaXMgbm9uemVybywgd29yZHMgY2FuIGJlIGdyb3VwZWQgYnki LAorIiAgcXVvdGVzIG9yIGJyYWNrZXRzIHNlbGVjdGVkIGJ5IHRoZSBzdW0gb2YgdGhlIGZvbGxv d2luZzoiLAorIiAiLAorIiAgICAgMSA9IGRvdWJsZXF1b3RlczogICAgXCJhIGIgY1wiIiwKKyIg ICAgIDIgPSBicmFjZXM6ICAgICAgICAgIHthIGIgY30iLAorIiAgICAgNCA9IGFwb3N0cm9waGVz OiAgICAgJ2EgYiBjJyIsCisiICAgICA4ID0gcGFyZW50aGVzZXM6ICAgICAoYSBiIGMpIiwKKyIg ICAgMTYgPSBzcXVhcmUgYnJhY2tldHM6IFthIGIgY10iLAorIiAgICAzMiA9IGFuZ2xlIGJyYWNr ZXRzOiAgPGEgYiBjPiIsCisiICIsCisiICBOZXN0aW5nIGlzIHBvc3NpYmxlIHdpdGgge30oKVtd PD4gYnV0IG5vdCB3aXRoIHF1b3RlcyBvciBhcG9zdHJvcGhlcy4iLAorIiAiLAorIlJldHVybnMg aW50ZWdlcjoiLAorIiAgTnVtYmVyIG9mIHdvcmRzIGluIHNvdXJjZSBzdHJpbmcuIiwKKyIgIiwK KyJBbHNvIHNlZToiLAorIiAgSEVMUCBGVU5DVElPTiBXT1JEIiwKKyIiCit9OworCisvKiAgRCBP IEggRiBVIE4gQyAgLS0gIEdpdmUgaGVscCBmb3IgYSBmdW5jdGlvbiAgKi8KKworaW50Citkb2hm dW5jKHh4KSBpbnQgeHg7IHsKKyAgICAvKiBpbnQgeDsgKi8KKyAgICBpZiAoeHggPT0gLTMpIHsK KyAgICAgICAgcHJpbnRmKCJcbiBUeXBlIFNIT1cgRlVOQ1RJT05TIHRvIHNlZSBhIGxpc3Qgb2Yg YXZhaWxhYmxlIGZ1bmN0aW9ucy5cbiIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50 ZigKKyAgICAgICAgIiBUeXBlIEhFTFAgRlVOQ1RJT04gPG5hbWU+IGZvciBoZWxwIG9uIGEgcGFy dGljdWxhciBmdW5jdGlvbi5cbiIpOworICAgICAgICBwcmludGYoCisgICAgICAgICIgRm9yIGZ1 bmN0aW9uIHNldHRpbmdzIHVzZSBIRUxQIFNFVCBGVU5DVElPTiBhbmQgU0hPVyBTQ1JJUFRTLlxu XG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoeHggPT0gRk5fV09SRCkg ICAgICAgICAgICAgICAgICAvKiBMb25nIGhlbHAgbWVzc2FnZSAqLworICAgICAgICByZXR1cm4o aG1zZ2EoaG1md29yZCkpOworCisgICAgcHJpbnRmKCJcbiIpOworICAgIHN3aXRjaCAoeHgpIHsK KyAgICAgIGNhc2UgRk5fSU5EOiAgICAgICAgICAgICAgICAgICAgICAvKiBJbmRleCAob2Ygc3Ry aW5nIDEgaW4gc3RyaW5nIDIpICovCisgICAgICBjYXNlIEZOX1JJWDogICAgICAgICAgICAgICAg ICAgICAgLyogUmluZGV4IChpbmRleCBmcm9tIHJpZ2h0KSAqLworICAgICAgICBwcmludGYoIlxc ZiVzaW5kZXgoczEsczIsbjEsbjIpXG5cCisgIHMxID0gc3RyaW5nIHRvIGxvb2sgZm9yLlxuXAor ICBzMiA9IHN0cmluZyB0byBsb29rIGluLlxuXAorICBuMSA9IG9wdGlvbmFsIDEtYmFzZWQgc3Rh cnRpbmcgcG9zaXRpb24sIGRlZmF1bHQgPSAxLlxuXAorICBuMiA9IG9wdGlvbmFsIGRlc2lyZWQg b2NjdXJyZW5jZSBudW1iZXIsIGRlZmF1bHQgPSAxLlxuIiwKKyAgICAgICAgICAgICAgIHh4ID09 IEZOX1JJWCA/ICJyIiA6ICIiCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoIlJl dHVybnMgaW50ZWdlcjpcblwKKyAgMS1iYXNlZCBwb3NpdGlvbiBvZiAlc21vc3Qgb2NjdXJyZW5j ZSBvZiBzMSBpbiBzMiwgaWdub3JpbmcgdGhlICVzbW9zdFxuXAorICAobjEtMSkgY2hhcmFjdGVy cyBpbiBzMjsgcmV0dXJucyAwIGlmIHMxIG5vdCBmb3VuZCBpbiBzMi5cbiIsCisgICAgICAgICAg ICAgICB4eCA9PSBGTl9JTkQgPyAibGVmdCIgOiAicmlnaHQiLAorICAgICAgICAgICAgICAgeHgg PT0gRk5fSU5EID8gImxlZnQiIDogInJpZ2h0IgorICAgICAgICApOworICAgICAgICBicmVhazsK KyAgICAgIGNhc2UgRk5fQ09VTlQ6CQkJLyogQ291bnQgb2NjdXJyZW5jZXMgb2YgczEgaW4gczIg Ki8KKwlwcmludGYoIlxcZmNvdW50KHMxLHMyLG4xKVxuXAorICBzMSA9IHN0cmluZyBvciBjaGFy YWN0ZXIgdG8gbG9vayBmb3IuXG5cCisgIHMyID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5cCisgIG4x ID0gb3B0aW9uYWwgMS1iYXNlZCBzdGFydGluZyBwb3NpdGlvbiwgZGVmYXVsdCA9IDEuXG4iKTsK KwlwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgTnVtYmVyIG9mIG9jY3VycmVuY2VzIG9m IHMxIGluIHMyLCAwIG9yIG1vcmUuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug Rk5fU0VBUkNIOiAgICAgICAgICAgICAgICAgICAvKiBTZWFyY2ggZm9yIHBhdHRlcm4gKi8KKyAg ICAgIGNhc2UgRk5fUlNFQVJDSDogICAgICAgICAgICAgICAgICAvKiBTZWFyY2ggZm9yIHBhdHRl cm4gZnJvbSByaWdodCAqLworICAgICAgICBwcmludGYoIlxcZiVzc2VhcmNoKHMxLHMyLG4xLG4y KVxuXAorICBzMSA9IHBhdHRlcm4gdG8gbG9vayBmb3IuXG5cCisgIHMyID0gc3RyaW5nIHRvIGxv b2sgaW4uXG5cCisgIG4xID0gb3B0aW9uYWwgMS1iYXNlZCBvZmZzZXQsIGRlZmF1bHQgPSAxLlxu XAorICBuMiA9IG9wdGlvbmFsIGRlc2lyZWQgb2NjdXJyZW5jZSBvZiBtYXRjaCwgZGVmYXVsdCA9 IDEuXG4iLAorICAgICAgICAgICAgICAgeHggPT0gRk5fUlNFQVJDSCA/ICJyIiA6ICIiCisgICAg ICAgICAgICAgICApOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgMS1i YXNlZCBwb3NpdGlvbiBvZiAlc21vc3QgbWF0Y2ggZm9yIHMxIGluIHMyLCBpZ25vcmluZyB0aGUg JXNtb3N0XG5cCisgIChuMS0xKSBjaGFyYWN0ZXJzIGluIHMyOyByZXR1cm5zIDAgaWYgbm8gbWF0 Y2guXG4iLAorICAgICAgICAgICAgICAgeHggPT0gRk5fU0VBUkNIID8gImxlZnQiIDogInJpZ2h0 IiwKKyAgICAgICAgICAgICAgIHh4ID09IEZOX1NFQVJDSCA/ICJsZWZ0IiA6ICJyaWdodCIKKyAg ICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCIgIFNlZSBIRUxQIFdJTERDQVJEUyBmb3IgaW5mbyBh Ym91dCBwYXR0ZXJucy5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fTEVOOiAg ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggKG9mIHN0cmluZykgKi8KKyAgICAgICAgcHJp bnRmKCJcXGZsZW5ndGgoczEpXG5cCisgIHMxID0gc3RyaW5nLlxuIik7CisgICAgICAgIHByaW50 ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICBMZW5ndGggb2Ygc3RyaW5nIHMxLlxuIik7CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9MSVQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIExp dGVyYWwgKGRvbid0IGV4cGFuZCB0aGUgc3RyaW5nKSAqLworICAgICAgICBwcmludGYoIlxcZmxp dGVyYWwoczEpXG5cCisgIHMxID0gc3RyaW5nLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJu cyBzdHJpbmc6XG5cCisgIHMxIGxpdGVyYWxseSB3aXRob3V0IGV2YWx1YXRpb24uXG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0xPVzogICAgICAgICAgICAgICAgICAgICAgLyog TG93ZXIgKGNvbnZlcnQgdG8gbG93ZXJjYXNlKSAqLworICAgICAgICBwcmludGYoIlxcZmxvd2Vy KHMxKVxuXAorICBzMSA9IHN0cmluZy5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3Ry aW5nOlxuXAorICBzMSB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzIGNvbnZlcnRlZCB0byBsb3dlcmNh c2UuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX01BWDogICAgICAgICAgICAg ICAgICAgICAgLyogTWF4IChtYXhpbXVtKSAqLworICAgICAgICBwcmludGYoIlxcZm1heGltdW0o bjEsbjIpXG5cCisgIG4xID0gaW50ZWdlci5cblwKKyAgbjIgPSBpbnRlZ2VyLlxuIik7CisgICAg ICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICBUaGUgZ3JlYXRlciBvZiBuMSBhbmQg bjIuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX01JTjogICAgICAgICAgICAg ICAgICAgICAgLyogTWluIChtaW5pbXVtKSAqLworICAgICAgICBwcmludGYoIlxcZm1pbmltdW0o bjEsbjIpXG5cCisgIG4xID0gaW50ZWdlci5cblwKKyAgbjIgPSBpbnRlZ2VyLlxuIik7CisgICAg ICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICBUaGUgbGVzc2VyIG9mIG4xIGFuZCBu Mi5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fTU9EOiAgICAgICAgICAgICAg ICAgICAgICAvKiBNb2QgKG1vZHVsdXMpICovCisgICAgICAgIHByaW50ZigiXFxmbW9kdWx1cyhu MSxuMilcblwKKyAgbjEgPSBpbnRlZ2VyLlxuXAorICBuMiA9IGludGVnZXIuXG4iKTsKKyAgICAg ICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisgIFRoZSByZW1haW5kZXIgYWZ0ZXIgZGl2 aWRpbmcgbjEgYnkgbjIuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0VWQTog ICAgICAgICAgICAgICAgICAgICAgLyogRXZhbCAoZXZhbHVhdGUgYXJpdGggZXhwcmVzc2lvbikg Ki8KKyAgICAgICAgcHJpbnRmKCJcXGZldmFsdWF0ZShlKVxuXAorICBlID0gYXJpdGhtZXRpYyBl eHByZXNzaW9uLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorICBU aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgICBjYXNlIEZOX1NVQjogICAgICAgICAgICAgICAgICAgICAgLyogU3Vic3RyIChz dWJzdHJpbmcpICovCisgICAgICAgIHByaW50ZigiXFxmc3Vic3RyaW5nKHMxLG4xLG4yKVxuXAor ICBzMSA9IHN0cmluZy5cblwKKyAgbjEgPSBpbnRlZ2VyLCAxLWJhc2VkIHN0YXJ0aW5nIHBvc2l0 aW9uLCBkZWZhdWx0ID0gMS5cblwKKyAgbjIgPSBpbnRlZ2VyLCBsZW5ndGgsIGRlZmF1bHQgPSBs ZW5ndGgoczEpIC0gbjEgKyAxLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6 XG5cCisgIFN1YnN0cmluZyBvZiBzMSBzdGFydGluZyBhdCBuMSwgbGVuZ3RoIG4yLlxuIik7Cisg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9VUFA6ICAgICAgICAgICAgICAgICAgICAgIC8q IFVwcGVyIChjb252ZXJ0IHRvIHVwcGVyY2FzZSkgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZ1cHBl cihzMSlcblwKKyAgczEgPSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0 cmluZzpcblwKKyAgczEgd2l0aCBsb3dlcmNhc2UgbGV0dGVycyBjb252ZXJ0ZWQgdG8gdXBwZXJj YXNlLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9SRVY6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFJldmVyc2UgKGEgc3RyaW5nKSAqLworICAgICAgICBwcmludGYoIlxcZnJl dmVyc2UoczEpXG5cCisgIHMxID0gc3RyaW5nLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJu cyBzdHJpbmc6XG5cCisgIHMxIHdpdGggaXRzIGNoYXJhY3RlcnMgaW4gcmV2ZXJzZSBvcmRlci5c biIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fUkVQOiAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXBlYXQgKGEgc3RyaW5nKSAqLworICAgICAgICBwcmludGYoIlxcZnJlcGVhdChz MSxuMSlcblwKKyAgczEgPSBzdHJpbmcuXG5cCisgIG4xID0gaW50ZWdlci5cbiIpOworICAgICAg ICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBzMSByZXBlYXRlZCBuMSB0aW1lcy5cbiIp OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fRVhFOiAgICAgICAgICAgICAgICAgICAg ICAvKiBFeGVjdXRlIChhIG1hY3JvKSAqLworICAgICAgICBwcmludGYoIlxcZmV4ZWN1dGUobTEs YTEsYTIsYTMsLi4uKVxuXAorICBtMSA9IG1hY3JvIG5hbWUuXG5cCisgIGExID0gYXJndW1lbnQg MS5cblwKKyAgYTIgPSBhcmd1bWVudCAyLCBldGNcbiIpOworICAgICAgICBwcmludGYoIlJldHVy bnMgc3RyaW5nOlxuXAorICBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBtYWNybyAoSEVMUCBSRVRV Uk4gZm9yIGZ1cnRoZXIgaW5mbykuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZO X0xQQTogICAgICAgICAgICAgICAgICAgICAgLyogTFBBRCAobGVmdCBwYWQpICovCisgICAgICBj YXNlIEZOX1JQQTogICAgICAgICAgICAgICAgICAgICAgLyogUlBBRCAocmlnaHQgcGFkKSAqLwor ICAgICAgICBwcmludGYoIlxcZiVjcGFkKHMxLG4xLGMxKVxuXAorICBzMSA9IHN0cmluZy5cblwK KyAgbjEgPSBpbnRlZ2VyLlxuXAorICBjMSA9IGNoYXJhY3RlciwgZGVmYXVsdCA9IHNwYWNlLlxu IiwKKyAgICAgICAgICAgICAgICB4eCA9PSBGTl9MUEEgPyAnbCcgOiAncicpOworICAgICAgICBw cmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBzMSAlcy1wYWRkZWQgd2l0aCBjaGFyYWN0ZXIg YzEgdG8gbGVuZ3RoIG4xLlxuIiwKKyAgICAgICAgICAgICAgIHh4ID09IEZOX0xQQSA/ICJsZWZ0 IiA6ICJyaWdodCIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fREVGOiAgICAgICAg ICAgICAgICAgICAgICAvKiBEZWZpbml0aW9uIG9mIGEgbWFjcm8sIHVuZXhwYW5kZWQgKi8KKyAg ICAgICAgcHJpbnRmKCJcXGZkZWZpbml0aW9uKG0xKVxuXAorICBtMSA9IG1hY3JvIG5hbWUuXG4i KTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKKyAgTGl0ZXJhbCBkZWZpbml0 aW9uIG9mIG1hY3JvIG0xLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9DT046 ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRlbnRzIG9mIGEgdmFyaWFibGUsIGRpdHRvICov CisgICAgICAgIHByaW50ZigiXFxmY29udGVudHModjEpXG5cCisgIHYxID0gdmFyaWFibGUgbmFt ZSBzdWNoIGFzIFxcJSVhLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5c CisgIExpdGVyYWwgZGVmaW5pdGlvbiBvZiB2YXJpYWJsZSB2MSwgZXZhbHVhdGVkIG9uZSBsZXZl bCBvbmx5LlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9GSUw6ICAgICAgICAg ICAgICAgICAgICAgIC8qIE5leHQgZmlsZSAqLworICAgICAgICBwcmludGYoIlxcZm5leHRmaWxl KClcbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBOYW1lIG9mIG5l eHQgZmlsZSBmcm9tIGxpc3QgY3JlYXRlZCBieSBtb3N0IHJlY2VudCBcXGZbcl1maWxlcygpIG9y XG5cCisgIFxcZltyXWRpcigpaW52b2NhdGlvbiwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJl IGFyZSBubyBtb3JlIGZpbGVzIGluXG5cCisgIHRoZSBsaXN0LlxuIik7CisgICAgICAgIGJyZWFr OworICAgICAgY2FzZSBGTl9GQzogICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgY291bnQg Ki8KKyAgICAgICAgcHJpbnRmKCJcXGZmaWxlcyhmMVssJmFdKSAtIEZpbGUgbGlzdC5cblwKKyAg ZjEgPSBmaWxlIHNwZWNpZmljYXRpb24sIHBvc3NpYmx5IGNvbnRhaW5pbmcgd2lsZGNhcmRzLlxu XAorICAmYSA9IG9wdGlvbmFsIG5hbWUgb2YgYXJyYXkgdG8gYXNzaWduIGZpbGUgbGlzdCB0by5c biIpOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgVGhlIG51bWJlciBv ZiByZWd1bGFyIGZpbGVzIHRoYXQgbWF0Y2ggZjEuICBVc2Ugd2l0aCBcXGZuZXh0ZmlsZSgpLlxu Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9DSFI6ICAgICAgICAgICAgICAgICAg ICAgIC8qIENoYXJhY3RlciAobGlrZSBCQVNJQyBDSFIkKCkpICovCisgICAgICAgIHByaW50Zigi XFxmY2hhcmFjdGVyKG4xKVxuXAorICBuMSA9IGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJpbnRm KCJSZXR1cm5zIGNoYXJhY3RlcjpcblwKKyAgVGhlIGNoYXJhY3RlciB3aG9zZSBudW1lcmljIGNv ZGUgaXMgbjEuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX1JJRzogICAgICAg ICAgICAgICAgICAgICAgLyogUmlnaHQgKGxpa2UgQkFTSUMgUklHSFQkKCkpICovCisgICAgICAg IHByaW50ZigiXFxmcmlnaHQoczEsbjEpXG5cCisgIHMxID0gc3RyaW5nLlxuXAorICBuMSA9IGlu dGVnZXIsIGRlZmF1bHQgPSBsZW5ndGgoczEpLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJu cyBzdHJpbmc6XG5cCisgIFRoZSByaWdodG1vc3QgbjEgY2hhcmFjdGVycyBvZiBzdHJpbmcgczEu XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0xFRjogICAgICAgICAgICAgICAg ICAgICAgLyogTGVmdCAobGlrZSBCQVNJQyBMRUZUJCgpKSAqLworICAgICAgICBwcmludGYoIlxc ZmxlZnQoczEsbjEpXG5cCisgIHMxID0gc3RyaW5nLlxuXAorICBuMSA9IGludGVnZXIsIGRlZmF1 bHQgPSBsZW5ndGgoczEpLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5c CisgIFRoZSBsZWZ0bW9zdCBuMSBjaGFyYWN0ZXJzIG9mIHN0cmluZyBzMS5cbiIpOworICAgICAg ICBicmVhazsKKyAgICAgIGNhc2UgRk5fQ09EOiAgICAgICAgICAgICAgICAgICAgICAvKiBDb2Rl IHZhbHVlIG9mIGNoYXJhY3RlciAqLworICAgICAgICBwcmludGYoIlxcZmNvZGUoczEpXG5cCisg IGMxID0gY2hhcmFjdGVyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxu XAorICBUaGUgbnVtZXJpYyBjb2RlIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gc3RyaW5nIHMx LCBvciAwIGlmIHMxIGVtcHR5LlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9S UEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UgKi8KKyAgICAgICAgcHJpbnRmKCJc XGZyZXBsYWNlKHMxLHMyLHMzWyxuMV0pXG5cCisgIHMxID0gb3JpZ2luYWwgc3RyaW5nLlxuXAor ICBzMiA9IG1hdGNoIHN0cmluZy5cblwKKyAgczMgPSByZXBsYWNlbWVudCBzdHJpbmcuXG5cCisg IG4xID0gb2NjdXJyZW5jZS5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxu XAorICBzMSB3aXRoIG9jY3VycmVuY2UgbnVtYmVyIG4xIG9mIHMyIHJlcGxhY2VkIGJ5IHMzLlxu XAorICBJZiBuMSA9IDAgb3Igb21pdHRlZCwgYWxsIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5c blwKKyAgSWYgbjEgPCAwLCBvY2N1cnJlbmNlcyBhcmUgY291bnRlZCBmcm9tIHRoZSByaWdodC5c biIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9GRDogICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGUgZGF0ZSAqLworICAgICAgICBwcmludGYoIlxcZmRhdGUoZjEpXG5cCisg IGYxID0gZmlsZW5hbWUuXG4iKTsKKyNpZmRlZiBWTVMKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5z IHN0cmluZzpcblwKKyAgQ3JlYXRpb24gZGF0ZSBvZiBmaWxlIGYxLCBmb3JtYXQ6IHl5eXltbWRk IGhoOm1tOnNzLlxuIik7CisjZWxzZQorICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxu XAorICBNb2RpZmljYXRpb24gZGF0ZSBvZiBmaWxlIGYxLCBmb3JtYXQ6IHl5eXltbWRkIGhoOm1t OnNzLlxuIik7CisjZW5kaWYgLyogVk1TICovCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBG Tl9GUzogICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc2l6ZSAqLworICAgICAgICBwcmlu dGYoIlxcZnNpemUoZjEpXG5cCisgIGYxID0gZmlsZW5hbWUuXG4iKTsKKyAgICAgICAgcHJpbnRm KCJSZXR1cm5zIGludGVnZXI6XG5cCisgIFNpemUgb2YgZmlsZSBmMS5cbiIpOworICAgICAgICBi cmVhazsKKyAgICAgIGNhc2UgRk5fVkVSOiAgICAgICAgICAgICAgICAgICAgICAvKiBWZXJpZnkg Ki8KKyAgICAgICAgcHJpbnRmKCJcXGZ2ZXJpZnkoczEsczIsbjEpXG5cCisgIHMxID0gc3RyaW5n IG9mIGNoYXJhY3RlcnMgdG8gbG9vayBmb3IuXG5cCisgIHMyID0gc3RyaW5nIHRvIGxvb2sgaW4u XG5cCisgIG4xID0gc3RhcnRpbmcgcG9zaXRpb24gaW4gczIuXG4iKTsKKyAgICAgICAgcHJpbnRm KCJSZXR1cm5zIGludGVnZXI6XG5cCisgIDEtYmFzZWQgcG9zaXRpb24gb2YgZmlyc3QgY2hhcmFj dGVyIGluIHMyIHRoYXQgaXMgbm90IGFsc28gaW4gczEsXG5cCisgIG9yIC0xIGlmIHMxIGlzIGVt cHR5LCBvciAwIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHMyIGFyZSBhbHNvIGluIHMxLlxuIik7Cisg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9JUEE6ICAgICAgICAgICAgICAgICAgICAgIC8q IEZpbmQgYW5kIHJldHVybiBJUCBhZGRyZXNzICovCisgICAgICAgIHByaW50ZigiXFxmaXBhZGRy ZXNzKHMxLG4xKVxuXAorICBzMSA9IHN0cmluZy5cblwKKyAgbjEgPSAxLWJhc2VkIGludGVnZXIg c3RhcnRpbmcgcG9zaXRpb24sIGRlZmF1bHQgPSAxLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0 dXJucyBzdHJpbmc6XG5cCisgIEZpcnN0IElQIGFkZHJlc3MgaW4gczEsIHNjYW5uaW5nIGZyb20g bGVmdCBzdGFydGluZyBhdCBwb3NpdGlvbiBuMS5cbiIpOworICAgICAgICBicmVhazsKKyAgICAg IGNhc2UgRk5fSEVYOiAgICAgICAgICAgICAgICAgICAgICAvKiBIZXhpZnkgKi8KKyAgICAgICAg cHJpbnRmKCJcXGZoZXhpZnkoczEpXG5cCisgIHMxID0gc3RyaW5nLlxuIik7CisgICAgICAgIHBy aW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIFRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlv biBvZiBzMS4gIEFsc28gc2VlIFxcZm4yaGV4KCkuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg ICBjYXNlIEZOX1VOSDogICAgICAgICAgICAgICAgICAgICAgLyogVW5oZXhpZnkgKi8KKyAgICAg ICAgcHJpbnRmKCJcXGZ1bmhleGlmeShoMSlcblwKKyAgaDEgPSBIZXhhZGVjaW1hbCBzdHJpbmcu XG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcblwKKyAgVGhlIHJlc3VsdCBv ZiB1bmhleGlmeWluZyBzMSwgb3Igbm90aGluZyBpZiBzMSBpcyBub3QgYSBoZXggc3RyaW5nLlxu Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9VTlRBQjoJCQkvKiBVbnRhYmlmeSAq LworICAgICAgICBwcmludGYoIlxcZnVudGFiaWZ5KHMxKVxuXAorICBzMSA9IHN0cmluZy5cbiIp OworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBUaGUgcmVzdWx0IG9mIGNv bnZlcnRpbmcgdGFicyBpbiBzMSB0byBzcGFjZXMgYXNzdW1pbmcgdGFiIHN0b3BzIGV2ZXJ5XG5c CisgIDggc3BhY2VzLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9CUks6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEJyZWFrICovCisgICAgICBjYXNlIEZOX1NQTjogICAgICAg ICAgICAgICAgICAgICAgLyogU3BhbiAqLworICAgICAgICBwcmludGYoIlxcZiVzKHMxLHMyLG4x KVxuXAorICBzMSA9IHN0cmluZyB0byBsb29rIGluLlxuXAorICBzMiA9IHN0cmluZyBvZiBjaGFy YWN0ZXJzIHRvIGxvb2sgZm9yLlxuXAorICBuMSA9IDEtYmFzZWQgaW50ZWdlciBzdGFydGluZyBw b3NpdGlvbiwgZGVmYXVsdCA9IDEuXG4iLAorICAgICAgICAgICAgICB4eCA9PSBGTl9CUksgPyAi YnJlYWsiIDogInNwYW4iCisgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigiUmV0dXJu cyBzdHJpbmc6XG5cCisgIHMxIHVwIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGFueSBjaGFy YWN0ZXIlc2Fsc28gaW4gczIsXG5cCisgIHNjYW5uaW5nIGZyb20gdGhlIGxlZnQgc3RhcnRpbmcg YXQgcG9zaXRpb24gbjEuXG4iLAorICAgICAgICAgICAgICAgeHggPT0gRk5fU1BOID8gIiBub3Qg IiA6ICIgIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9UUk06ICAgICAgICAgICAg ICAgICAgICAgIC8qIFRyaW0gKi8KKyAgICAgIGNhc2UgRk5fTFRSOiAgICAgICAgICAgICAgICAg ICAgICAvKiBMZWZ0LVRyaW0gKi8KKyAgICAgICAgcHJpbnRmKCJcXGYlcyhzMSxzMilcblwKKyAg czEgPSBzdHJpbmcgdG8gbG9vayBpbi5cblwKKyAgczIgPSBzdHJpbmcgb2YgY2hhcmFjdGVycyB0 byBsb29rIGZvciwgZGVmYXVsdCA9IGJsYW5rcyBhbmQgdGFicy5cbiIsCisgICAgICAgICAgICAg ICB4eCA9PSBGTl9UUk0gPyAidHJpbSIgOiAibHRyaW0iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1 cm5zIHN0cmluZzpcblwKKyAgczEgd2l0aCBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBhbHNvIGlu IHMyIHRyaW1tZWQgZnJvbSB0aGUgJXMuXG4uIiwKKyAgICAgICAgICAgICAgIHh4ID09IEZOX1RS TSA/ICJyaWdodCIgOiAibGVmdCIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fQ0FQ OiAgICAgICAgICAgICAgICAgICAgICAvKiBDYXBpdGFsaXplICovCisgICAgICAgIHByaW50Zigi XFxmY2FwaXRhbGl6ZShzMSlcblwKKyAgczEgPSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcHJpbnRm KCJSZXR1cm5zIHN0cmluZzpcblwKKyAgczEgd2l0aCBpdHMgZmlyc3QgbGV0dGVyIGNvbnZlcnRl ZCB0byB1cHBlcmNhc2UgYW5kIHRoZSByZW1haW5pbmdcblwKKyAgbGV0dGVycyB0byBsb3dlcmNh c2UuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJTeW5vbnltOiBcXGZjYXBzKHMxKVxuIik7CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9UT0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRp bWUtb2YtZGF5LXRvLXNlY3Mtc2luY2UtbWlkbml0ZSAqLworICAgICAgICBwcmludGYoIlxcZnRv ZDJzZWNzKHMxKVxuXAorICBzMSA9IHRpbWUtb2YtZGF5IHN0cmluZywgaGg6bW06c3MsIDI0LWhv dXIgZm9ybWF0LlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBudW1iZXI6XG5cCisgIFNl Y29uZHMgc2luY2UgbWlkbmlnaHQuXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZO X0ZGTjogICAgICAgICAgICAgICAgICAgICAgLyogRnVsbCBmaWxlIG5hbWUgKi8KKyAgICAgICAg cHJpbnRmKCJcXGZwYXRobmFtZShmMSlcblwKKyAgZjEgPSBmaWxlbmFtZSwgcG9zc2libHkgd2ls ZC5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBGdWxsIHBhdGhu YW1lIG9mIGYxLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9DSEs6ICAgICAg ICAgICAgICAgICAgICAgIC8qIENoZWNrc3VtIG9mIHRleHQgKi8KKyAgICAgICAgcHJpbnRmKCJc XGZjaGVja3N1bShzMSlcblwKKyAgczEgPSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJS ZXR1cm5zIGludGVnZXI6XG5cCisgIDE2LWJpdCBjaGVja3N1bSBvZiBzdHJpbmcgczEuXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0NSQzogICAgICAgICAgICAgICAgICAgICAg LyogQ1JDLTE2IG9mIHRleHQgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZjcmMxNihzMSlcblwKKyAg czEgPSBzdHJpbmcuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisg IDE2LWJpdCBjeWNsaWMgcmVkdW5kYW5jeSBjaGVjayBvZiBzdHJpbmcgczEuXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0JTTjogICAgICAgICAgICAgICAgICAgICAgLyogQmFz ZW5hbWUgb2YgZmlsZSAqLworICAgICAgICBwcmludGYoIlxcZmJhc2VuYW1lKGYxKVxuXAorICBm MSA9IGZpbGVuYW1lLCBwb3NzaWJseSB3aWxkLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJu cyBzdHJpbmc6XG5cCisgIEZpbGVuYW1lIGYxIHN0cmlwcGVkIG9mIGFsbCBkZXZpY2UgYW5kIGRp cmVjdG9yeSBpbmZvcm1hdGlvbi5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5f Q01EOiAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgb2YgYSBjb21tYW5kIChjb29rZWQp ICovCisgICAgICAgIHByaW50ZigiXFxmY29tbWFuZChzMSlcblwKKyAgczEgPSBzdHJpbmdcbiIp OworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBPdXRwdXQgb2Ygc3lzdGVt IGNvbW1hbmQgczEsIGlmIGFueSwgd2l0aCBmaW5hbCBsaW5lIHRlcm1pbmF0b3Igc3RyaXBwZWQu XG4iCisgICAgICAgICAgICAgICApOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fUkFX OiAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgb2YgYSBjb21tYW5kIChyYXcpICovCisg ICAgICAgIHByaW50ZigiXFxmcmF3Y29tbWFuZChzMSlcblwKKyAgczEgPSBzdHJpbmdcbiIpOwor ICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBPdXRwdXQgb2Ygc3lzdGVtIGNv bW1hbmQgczEsIGlmIGFueS5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fU1RY OiAgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBmcm9tIHJpZ2h0ICovCisgICAgICAgIHBy aW50ZigiXFxmc3RyaXB4KHMxLGMxKVxuXAorICBzMSA9IHN0cmluZyB0byBsb29rIGluLlxuXAor ICBjMSA9IGNoYXJhY3RlciB0byBsb29rIGZvciwgZGVmYXVsdCA9IFwiLlwiLlxuIik7CisgICAg ICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIHMxIHVwIHRvIHRoZSByaWdodG1vc3Qg b2NjdXJyZW5jZSBvZiBjaGFyYWN0ZXIgYzEuXG4iCisgICAgICAgICk7CisgICAgICAgIGJyZWFr OworCisgICAgICBjYXNlIEZOX1NUTDogICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXAgZnJv bSBsZWZ0ICovCisgICAgICAgIHByaW50ZigiXFxmbG9wKHMxWyxjMVssbjFdXSlcblwKKyAgczEg PSBzdHJpbmcgdG8gbG9vayBpbi5cblwKKyAgYzEgPSBjaGFyYWN0ZXIgdG8gbG9vayBmb3IsIGRl ZmF1bHQgPSBcIi5cIi5cblwKKyAgbjEgPSBvY2N1cnJlbmNlIG9mIGMxLCBkZWZhdWx0ID0gMS5c biIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuXAorICBUaGUgcGFydCBvZiBz MSBhZnRlciB0aGUgbjF0aCBsZWZ0bW9zdCBvY2N1cnJlbmNlIG9mIGNoYXJhY3RlciBjMS5cbiIK KyAgICAgICAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fTE9QWDogICAgICAg ICAgICAgICAgICAgICAgLyogU3RyaXAgZnJvbSByaWdodCAqLworICAgICAgICBwcmludGYoIlxc ZmxvcHgoczEsYzEpXG5cCisgIHMxID0gc3RyaW5nIHRvIGxvb2sgaW4uXG5cCisgIGMxID0gY2hh cmFjdGVyIHRvIGxvb2sgZm9yLCBkZWZhdWx0ID0gXCIuXCIuXG5cCisgIG4xID0gb2NjdXJyZW5j ZSBvZiBjMSwgZGVmYXVsdCA9IDEuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmlu ZzpcblwKKyAgVGhlIHBhcnQgb2YgczEgYWZ0ZXIgdGhlIG4xdGggcmlnaHRtb3N0IG9jY3VycmVu Y2Ugb2YgY2hhcmFjdGVyIGMxLlxuIgorICAgICAgICApOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBGTl9TVE46ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmlwIG4gY2hhcnMgKi8K KyAgICAgICAgcHJpbnRmKCJcXGZzdHJpcG4oczEsbjEpXG5cCisgIHMxID0gc3RyaW5nIHRvIGxv b2sgaW4uXG5cCisgIG4xID0gaW50ZWdlciwgZGVmYXVsdCA9IDAuXG4iKTsKKyAgICAgICAgcHJp bnRmKCJSZXR1cm5zIHN0cmluZzpcblwKKyAgczEgd2l0aCBuMSBjaGFyYWN0ZXJzIHJlbW92ZWQg ZnJvbSB0aGUgcmlnaHQuXG4iCisgICAgICAgICk7CisgICAgICAgIGJyZWFrOworCisgICAgICBj YXNlIEZOX1NUQjogICAgICAgICAgICAgICAgICAgICAgLyogU3RyaXAgZW5jbG9zaW5nIGJyYWNr ZXRzICovCisgICAgICAgIHByaW50ZigiXFxmc3RyaXBiKHMxWyxjMVssYzJdXSlcblwKKyAgczEg PSBvcmlnaW5hbCBzdHJpbmcuXG5cCisgIGMxID0gb3B0aW9uYWwgZmlyc3QgY2hhcmFjdGVyXG4i KTsKKyAgICAgICAgcHJpbnRmKCJcCisgIGMyID0gb3B0aW9uYWwgZmluYWwgY2hhcmFjdGVyLlxu Iik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIHMxIHdpdGggdGhlIGlu ZGljYXRlZCBlbmNsb3NpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgSWYgYzEgYW5kIGMyIG5vdFxu XAorICAgICBzcGVjaWZpZWQsIGFueSBtYXRjaGluZyBicmFja2V0cywgYnJhY2VzLCBwYXJlbnRo ZXNlcywgb3IgcXVvdGVzIGFyZVxuIik7CisgICAgICAgIHByaW50ZigiXAorICAgICBhc3N1bWVk LiAgSWYgYzEgaXMgZ2l2ZW4gYnV0IG5vdCBjMiwgdGhlIGFwcHJvcHJpYXRlIGMyIGlzIGFzc3Vt ZWQuXG5cCisgICAgIGlmIGJvdGggYzEgYW5kIGMyIGFyZSBnaXZlbiwgdGhleSBhcmUgdXNlZCBh cy1pcy5cbiIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigKKyJBbHRlcm5hdGl2 ZSBmb3JtYXQ6XG5cCisgIEluY2x1ZGUgYSBncm91cGluZyBtYXNrIG51bWJlciBpbiBwbGFjZSBv ZiBjMSBhbmQgb21pdCBjMiB0byBzcGVjaWZ5IG1vcmVcblwKKyAgdGhhbiBvbmUgcG9zc2liaWxp dHkgYXQgb25jZTsgc2VlIFxcZndvcmQoKSBmb3IgZGV0YWlscy5cbiIKKyAgICAgICAgICAgICAg ICk7CisgICAgICAgIGJyZWFrOworCisjaWZkZWYgT1MyCisgICAgICBjYXNlIEZOX1NDUk5fQ1g6 ICAgICAgICAgICAgICAgICAgLyogU2NyZWVuIEN1cnNvciBYIFBvcyAqLworICAgICAgICBwcmlu dGYoIlxcZnNjcm5jdXJ4KClcbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpc blwKKyAgVGhlIDAtYmFzZWQgWCBjb29yZGluYXRlIChjb2x1bW4pIG9mIHRoZSBUZXJtaW5hbCBz Y3JlZW4gY3Vyc29yLlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9TQ1JOX0NZ OiAgICAgICAgICAgICAgICAgIC8qIFNjcmVlbiBDdXJzb3IgWSBQb3MgKi8KKyAgICAgICAgcHJp bnRmKCJcXGZzY3JuY3VyeSgpXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6 XG5cCisgIFRoZSAwLWJhc2VkIFkgY29vcmRpbmF0ZSAocm93KSBvZiB0aGUgVGVybWluYWwgc2Ny ZWVuIGN1cnNvci5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fU0NSTl9TVFI6 ICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gU3RyaW5nICovCisgICAgICAgIHByaW50ZigiXFxm c2NybnN0cihueSxueCxuMSlcblwKKyAgbnkgPSBpbnRlZ2VyLlxuXAorICBueCA9IGludGVnZXIu XG5cCisgIG4xID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5n OlxuXAorICBUaGUgc3RyaW5nIGF0IFRlcm1pbmFsLXNjcmVlbiBjb29yZGluYXRlcyAobngsbnkp LCBsZW5ndGggbjEsXG5cCisgIGJsYW5rcyBpbmNsdWRlZC4gIENvb3JkaW5hdGVzIHN0YXJ0IGF0 IDAuICBEZWZhdWx0IHZhbHVlcyBhcmVcblwKKyAgMCBmb3IgbnkgYW5kIG54LCBhbmQgbGluZSB3 aWR0aCBmb3IgbjEuXG4iKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogT1MyICovCisKKyAg ICAgIGNhc2UgRk5fMkhFWDogICAgICAgICAgICAgICAgICAgICAvKiBOdW0gdG8gaGV4ICovCisg ICAgICAgIHByaW50ZigiXFxmbjJoZXgobjEpIC0gTnVtYmVyIHRvIGhleFxuICBuMSA9IGludGVn ZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIHN0cmluZzpcbiAgVGhlIGhleGFkZWNp bWFsIHJlcHJlc2VudGF0aW9uIG9mIG4xLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBj YXNlIEZOXzJPQ1Q6ICAgICAgICAgICAgICAgICAgICAgLyogTnVtIHRvIGhleCAqLworICAgICAg ICBwcmludGYoIlxcZm4yb2N0YWwobjEpIC0gTnVtYmVyIHRvIG9jdGFsXG4gIG4xID0gaW50ZWdl ci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgc3RyaW5nOlxuICBUaGUgb2N0YWwgcmVw cmVzZW50YXRpb24gb2YgbjEuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBSRUNVUlNJ VkUKKyAgICAgIGNhc2UgRk5fRElSOiAgICAgICAgICAgICAgICAgICAgICAvKiBSZWN1cnNpdmUg ZGlyZWN0b3J5IGNvdW50ICovCisgICAgICAgIHByaW50ZigiXFxmZGlyZWN0b3JpZXMoZjEpIC0g RGlyZWN0b3J5IGxpc3QuXG5cCisgIGYxID0gZGlyZWN0b3J5IHNwZWNpZmljYXRpb24sIHBvc3Np Ymx5IGNvbnRhaW5pbmcgd2lsZGNhcmRzLlxuXAorICAmYSA9IG9wdGlvbmFsIG5hbWUgb2YgYXJy YXkgdG8gYXNzaWduIGRpcmVjdG9yeSBsaXN0IHRvLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0 dXJucyBpbnRlZ2VyOlxuXAorICBUaGUgbnVtYmVyIG9mIGRpcmVjdG9yaWVzIHRoYXQgbWF0Y2gg ZjE7IHVzZSB3aXRoIFxcZm5leHRmaWxlKCkuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fUkZJTDogICAgICAgICAgICAgICAgICAgICAvKiBSZWN1cnNpdmUgZmlsZSBjb3Vu dCAqLworICAgICAgICBwcmludGYoIlxcZnJmaWxlcyhmMVssJmFdKSAtIFJlY3Vyc2l2ZSBmaWxl IGxpc3QuXG5cCisgIGYxID0gZmlsZSBzcGVjaWZpY2F0aW9uLCBwb3NzaWJseSBjb250YWluaW5n IHdpbGRjYXJkcy5cblwKKyAgJmEgPSBvcHRpb25hbCBuYW1lIG9mIGFycmF5IHRvIGFzc2lnbiBm aWxlIGxpc3QgdG8uXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisg IFRoZSBudW1iZXIgb2YgZmlsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggZjEgaW4gdGhlIGN1cnJlbnQg b3IgZ2l2ZW5cblwKKyAgZGlyZWN0b3J5IHRyZWU7IHVzZSB3aXRoIFxcZm5leHRmaWxlKCkuXG4i KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fUkRJUjogICAgICAgICAgICAgICAg ICAgICAvKiBSZWN1cnNpdmUgZGlyZWN0b3J5IGNvdW50ICovCisgICAgICAgIHByaW50ZigiXFxm cmRpcmVjdG9yaWVzKGYxKSAtIFJlY3Vyc2l2ZSBkaXJlY3RvcnkgbGlzdC5cblwKKyAgZjEgPSBk aXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgcG9zc2libHkgY29udGFpbmluZyB3aWxkY2FyZHMuXG5c CisgICZhID0gb3B0aW9uYWwgbmFtZSBvZiBhcnJheSB0byBhc3NpZ24gZGlyZWN0b3J5IGxpc3Qg dG8uXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisgIFRoZSBudW1i ZXIgb2YgZGlyZWN0b3JpZXMgdGhhdCBtYXRjaCBmMSBpbiB0aGUgY3VycmVudCBvciBnaXZlbiBk aXJlY3RvcnlcblwKKyAgdHJlZS4gIFVzZSB3aXRoIFxcZm5leHRmaWxlKCkuXG4iKTsKKyAgICAg ICAgYnJlYWs7CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisKKyAgICAgIGNhc2UgRk5fRE5BTTog ICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgcGFydCBvZiBhIGZpbGVuYW1lICovCisg ICAgICAgIHByaW50ZigiXFxmZGlybmFtZShmKSAtIERpcmVjdG9yeSBwYXJ0IG9mIGEgZmlsZW5h bWUuXG5cCisgIGYgPSBhIGZpbGUgc3BlY2lmaWNhdGlvbi5cbiIpOworICAgICAgICBwcmludGYo IlJldHVybnMgZGlyZWN0b3J5IG5hbWU6XG5cCisgIFRoZSBmdWxsIG5hbWUgb2YgdGhlIGRpcmVj dG9yeSB0aGF0IHRoZSBmaWxlIGlzIGluLCBvciBpZiB0aGUgZmlsZSBpcyBhXG5cCisgIGRpcmVj dG9yeSwgaXRzIGZ1bGwgbmFtZS5cbiIpOworICAgICAgICBicmVhazsKKworI2lmbmRlZiBOT1JB TkRPTQorICAgICAgY2FzZSBGTl9SQU5EOiAgICAgICAgICAgICAgICAgICAgIC8qIFJhbmRvbSBu dW1iZXIgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZyYW5kb20obikgLSBSYW5kb20gbnVtYmVyLlxu XAorICBuID0gYSBwb3NpdGl2ZSBpbnRlZ2VyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJu cyBpbnRlZ2VyOlxuXAorICBBIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCBuLTEuXG4iKTsK KyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9SQU5ET00gKi8KKworICAgICAgY2FzZSBGTl9T UExJVDogICAgICAgICAgICAgICAgICAgIC8qIFNwbGl0ICovCisjaWZkZWYgQ09NTUVOVAorICAg ICAgICBwcmludGYoIlxcZnNwbGl0KHMxLCZhLHMyLHMzLG4yLG4zKSAtIFwKK0Fzc2lnbiBzdHJp bmcgd29yZHMgdG8gYW4gYXJyYXkuXG5cCisgIHMxID0gc291cmNlIHN0cmluZ1xuICAmYSA9IGFy cmF5IGRlc2lnbmF0b3JcbiAgczIgPSBvcHRpb25hbCBicmVhayBzZXQuXG4iKTsKKyAgICAgICAg cHJpbnRmKCIgIHMzID0gb3B0aW9uYWwgaW5jbHVkZSBzZXQuXG4iKTsKKyAgICAgICAgcHJpbnRm KCIgIG4yID0gb3B0aW9uYWwgZ3JvdXBpbmcgbWFzay5cbiIpOworICAgICAgICBwcmludGYoIiAg bjMgPSBvcHRpb25hbCBzZXBhcmF0b3IgZmxhZy5cbiIpOworICAgICAgICBwcmludGYoIiAgczIs IHMzLCBuMiwgbjMgYXJlIGFzIGluIFxcZndvcmQoKS5cbiIpOworICAgICAgICBwcmludGYoCisi ICBBbGwgYXJndW1lbnRzIGFyZSBvcHRpb25hbDsgaWYgXFwmYVtdIGFscmVhZHkgZXhpc3RzLCBp dCBpcyByZWN5Y2xlZDtcblwKKyAgaWYgYXJyYXkgbm90IHNwZWNpZmllZCwgdGhlIGNvdW50IGlz IHJldHVybmVkIGJ1dCBubyBhcnJheSBpcyBjcmVhdGVkLlxuIik7CisgICAgICAgIHByaW50Zigi UmV0dXJucyBpbnRlZ2VyOlxuXAorICBOdW1iZXIgb2Ygd29yZHMgaW4gc291cmNlIHN0cmluZy5c biIpOworI2Vsc2UKKyAgICAgICAgaG1zZ2EoaGZzcGxpdCk7CisjZW5kaWYJLyogQ09NTUVOVCAq LworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9EVElNOiAgICAgICAgICAgICAgICAg ICAgIC8qIENWVERBVEUgKi8KKyAgICAgICAgcHJpbnRmKCJcXGZjdnRkYXRlKFtkYXRlLXRpbWVd WyxuMV0pIC0gRGF0ZS90aW1lIGNvbnZlcnNpb24uXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIENv bnZlcnRzIGRhdGUgYW5kL29yIHRpbWUgdG8gc3RhbmRhcmQgZm9ybWF0LlxuIik7CisgICAgICAg IHByaW50ZigiICBJZiBubyBkYXRlL3RpbWUgZ2l2ZW4sIHJldHVybnMgY3VycmVudCBkYXRlL3Rp bWUuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFtkYXRlLXRpbWVdLCBpZiBnaXZlbiwgaXMgZnJl ZS1mb3JtYXQgZGF0ZSBhbmQvb3IgdGltZS5cbiIpOworICAgICAgICBwcmludGYoIiAgSEVMUCBE QVRFIGZvciBpbmZvIGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLlxuIik7CisgICAgICAgIHByaW50 ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIFN0YW5kYXJkLWZvcm1hdCBkYXRlIGFuZCB0aW1lOiB5 eXl5bW1kZCBoaDptbTpzcyAobnVtZXJpYylcbiIpOworICAgICAgICBwcmludGYoIiAgSWYgbjEg aXMgZ2l2ZW46XG5cCisgIG4xID0gMTogeXl5eS1tbW0tZGQgaGg6bW06c3MgKG1tbSA9IEVuZ2xp c2ggMy1sZXR0ZXIgbW9udGggYWJicmV2aWF0aW9uKVxuXAorICBuMSA9IDI6IGRkLW1tbS15eXl5 IGhoOm1tOnNzIChkaXR0bylcblwKKyAgbjEgPSAzOiB5eXl5bW1kZGhobW1zcyAoYWxsIG51bWVy aWMpXG5cCisgIG4xID0gNDogRGF5IE1vbiBkZCBoaDptbTpzcyB5eXl5IChhc2N0aW1lKVxuXAor ICBPdGhlcjogIHl5eXltbWRkIGhoOm1tOmRkIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBj YXNlIEZOX0pEQVRFOiAgICAgICAgICAgICAgICAgICAgLyogRE9ZICovCisgICAgICAgIHByaW50 ZigiXFxmZG95KFtkYXRlLXRpbWVdKSAtIERheSBvZiBZZWFyLlxuIik7CisgICAgICAgIHByaW50 ZigiICBDb252ZXJ0cyBkYXRlIGFuZC9vciB0aW1lIHRvIGRheS1vZi15ZWFyIChET1kpIGZvcm1h dC5cbiIpOworICAgICAgICBwcmludGYoIiAgSWYgbm8gZGF0ZS90aW1lIGdpdmVuLCByZXR1cm5z IGN1cnJlbnQgZGF0ZS5cbiIpOworICAgICAgICBwcmludGYoIiAgW2RhdGUtdGltZV0sIGlmIGdp dmVuLCBpcyBmcmVlLWZvcm1hdCBkYXRlIGFuZC9vciB0aW1lLlxuIik7CisgICAgICAgIHByaW50 ZigiICBIRUxQIERBVEUgZm9yIGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuXG4iKTsKKyAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIG51bWVyaWMgc3RyaW5nOlxuXAorICBET1k6IHl5eXlkZGQs IHdoZXJlIGRkZCBpcyAxLWJhc2VkIGRheSBudW1iZXIgaW4geWVhci5cbiIpOworICAgICAgICBi cmVhazsKKworICAgICAgY2FzZSBGTl9QTkNWVDoKKyAgICAgICAgcHJpbnRmKCJcXGZkaWFsY29u dmVydChwaG9uZS1udW1iZXIpIC0gQ29udmVydCBwaG9uZSBudW1iZXIuXG4iKTsKKyAgICAgICAg cHJpbnRmKCIgIENvbnZlcnRzIHRoZSBnaXZlbiBwaG9uZSBudW1iZXIgZm9yIGRpYWxpbmcgYWNj b3JkaW5nXG4iKTsKKyAgICAgICAgcHJpbnRmKAorIiAgdG8gdGhlIHByZXZhaWxpbmcgZGlhbGlu ZyBydWxlcyAtLSBjb3VudHJ5IGNvZGUsIGFyZWEgY29kZSwgZXRjLlxuIik7CisgICAgICAgIHBy aW50ZigiUmV0dXJucyBzdHJpbmc6XG5cCisgIFRoZSBkaWFsIHN0cmluZyB0aGF0IHdvdWxkIGJl IHVzZWQgaWYgdGhlIHNhbWUgcGhvbmUgbnVtYmVyIGhhZCBiZWVuXG5cCisgIGdpdmVuIHRvIHRo ZSBESUFMIGNvbW1hbmQuXG4iCisgICAgICAgICAgICAgICk7CisgICAgICAgIGJyZWFrOworCisg ICAgICBjYXNlIEZOX0RBVEVKOiAgICAgICAgICAgICAgICAgICAgLyogRE9ZMkRBVEUgKi8KKyAg ICAgICAgcHJpbnRmKCJcXGZkb3kyZGF0ZShbZG95WyB0aW1lXV0pIC0gRGF5IG9mIFllYXIgdG8g RGF0ZS5cbiIpOworICAgICAgICBwcmludGYoIiAgQ29udmVydHMgeXl5eW1tbSB0byB5eXl5bW1k ZFxuIik7CisgICAgICAgIHByaW50ZigiICBJZiB0aW1lIGluY2x1ZGVkLCBpdCBpcyBjb252ZXJ0 ZWQgdG8gMjQtaG91ciBmb3JtYXQuIik7CisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICJS ZXR1cm5zIHN0YW5kYXJkIGRhdGUgb3IgZGF0ZS10aW1lIHN0cmluZyB5eXl5bW1kZCBoaDptbTpz c1xuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX01KRDoKKyAgICAgICAgcHJp bnRmKCJcXGZtamQoW1tkYXRlXVsgdGltZV1dKSAtIE1vZGlmaWVkIEp1bGlhbiBEYXRlIChNSkQp LlxuIik7CisgICAgICAgIHByaW50ZigKKyIgIENvbnZlcnRzIGRhdGUgYW5kL29yIHRpbWUgdG8g TUpELCB0aGUgbnVtYmVyIG9mIGRheXMgc2luY2UgMTcgTm92IDE4NTguXG4iKTsKKyAgICAgICAg cHJpbnRmKCIgIEhFTFAgREFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy5cbiIp OworICAgICAgICBwcmludGYoIlJldHVybnM6IGludGVnZXIuXG4iKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgRk5fTUpEMjoKKyAgICAgICAgcHJpbnRmKCJcXGZtamQyZGF0ZShtamQp IC0gTW9kaWZpZWQgSnVsaWFuIERhdGUgKE1KRCkgdG8gRGF0ZS5cbiIpOworICAgICAgICBwcmlu dGYoIiAgQ29udmVydHMgTUpEIHRvIHN0YW5kYXJkLWZvcm1hdCBkYXRlLlxuIik7CisgICAgICAg IHByaW50ZigiUmV0dXJuczogeXl5eW1tZGQuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fREFZOgorICAgICAgICBwcmludGYoIlxcZmRheShbW2RhdGVdWyB0aW1lXV0pIC0g RGF5IG9mIFdlZWsuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGRheSBvZiB3ZWVrIG9m IGdpdmVuIGRhdGUgYXMgTW9uLCBUdWUsIGV0Yy5cbiIpOworICAgICAgICBwcmludGYoIkhFTFAg REFURSBmb3IgaW5mbyBhYm91dCBkYXRlLXRpbWUgZm9ybWF0cy5cbiIpOworICAgICAgICBicmVh azsKKworICAgICAgY2FzZSBGTl9OREFZOgorICAgICAgICBwcmludGYoIlxcZm5kYXkoW1tkYXRl XVsgdGltZV1dKSAtIE51bWVyaWMgRGF5IG9mIFdlZWsuXG4iKTsKKyAgICAgICAgcHJpbnRmKAor ICAgICJSZXR1cm5zIG51bWVyaWMgZGF5IG9mIHdlZWsgb2YgZ2l2ZW4gZGF0ZSwgMD1TdW4sIDE9 TW9uLCAuLi4sIDY9U2F0LlxuIik7CisgICAgICAgIHByaW50ZigiSEVMUCBEQVRFIGZvciBpbmZv IGFib3V0IGRhdGUtdGltZSBmb3JtYXRzLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBj YXNlIEZOX1RJTUU6CisgICAgICAgIHByaW50ZigiXFxmdGltZShbW2RhdGVdWyB0aW1lXV0pIC0g VGltZS5cbiIpOworICAgICAgICBwcmludGYoCisiUmV0dXJucyB0aW1lIHBvcnRpb24gb2YgZ2l2 ZW4gZGF0ZSBhbmQvb3IgdGltZSBpbiBoaDptbTpzcyBmb3JtYXQuXG4iKTsKKyAgICAgICAgcHJp bnRmKCJJZiBubyBhcmd1bWVudCBnaXZlbiwgcmV0dXJucyBjdXJyZW50IHRpbWUuXG4iKTsKKyAg ICAgICAgcHJpbnRmKCJIRUxQIERBVEUgZm9yIGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMu XG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fTlRJTToKKyAgICAgICAgcHJp bnRmKCJcXGZudGltZShbW2RhdGVdWyB0aW1lXV0pIC0gTnVtZXJpYyBUaW1lLlxuIik7CisgICAg ICAgIHByaW50ZigKKyJSZXR1cm5zIHRpbWUgcG9ydGlvbiBvZiBnaXZlbiBkYXRlIGFuZC9vciB0 aW1lIGFzIHNlY29uZHMgc2luY2UgbWlkbmlnaHQuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJJZiBu byBhcmd1bWVudCBnaXZlbiwgcmV0dXJucyBjdXJyZW50IHRpbWUuXG4iKTsKKyAgICAgICAgcHJp bnRmKCJIRUxQIERBVEUgZm9yIGluZm8gYWJvdXQgZGF0ZS10aW1lIGZvcm1hdHMuXG4iKTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fTjJUSU06CisgICAgICAgIHByaW50ZigiXFxm bjJ0aW1lKHNlY29uZHMpIC0gTnVtZXJpYyBUaW1lIHRvIFRpbWUuXG4iKTsKKyAgICAgICAgcHJp bnRmKAorIlJldHVybnMgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIGluIGhoOm1tOnNzIGZv cm1hdC5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9QRVJNOgorICAgICAg ICBwcmludGYoIlxcZnBlcm1pc3Npb25zKGZpbGUpIC0gUGVybWlzc2lvbnMgb2YgRmlsZS5cbiIp OworICAgICAgICBwcmludGYoCisjaWZkZWYgVU5JWAorIlJldHVybnMgcGVybWlzc2lvbnMgb2Yg Z2l2ZW4gZmlsZSBhcyB0aGV5IHdvdWxkIGJlIHNob3duIGJ5IFwibHMgLWxcIi5cbiIKKyNlbHNl CisjaWZkZWYgVk1TCisiUmV0dXJucyBwZXJtaXNzaW9ucyBvZiBnaXZlbiBmaWxlIGFzIHRoZXkg d291bGQgYmUgc2hvd24gYnkgXCJkaXIgL3Byb3RcIi5cbiIKKyNlbHNlCisiUmV0dXJucyB0aGUg cGVybWlzc2lvbnMgb2YgdGhlIGdpdmVuIGZpbGUuXG4iCisjZW5kaWYgLyogVk1TICovCisjZW5k aWYgLyogVU5JWCAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fQUxPT0s6CisgICAgICAgIHByaW50ZigiXFxmYXJyYXlsb29rKHBhdHRlcm4sJmEp IC0gTG9va3VwIHBhdHRlcm4gaW4gYXJyYXkuXG5cCisgIHBhdHRlcm4gPSBTdHJpbmcgb3IgcGF0 dGVyblxuIik7CisgICAgICAgIHByaW50ZigiICAmYSA9IGFycmF5IGRlc2lnbmF0b3IsIGNhbiBp bmNsdWRlIHJhbmdlIHNwZWNpZmllci5cbiIpOworICAgICAgICBwcmludGYoCisiUmV0dXJucyBu dW1iZXI6XG5cCisgIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgYXJyYXkgZWxlbWVu dCBvciAtMSBpZiBub25lLlxuIik7CisgICAgICAgIHByaW50ZigiTW9yZSBpbmZvOlxuXAorICBI RUxQIFBBVFRFUk4gZm9yIHBhdHRlcm4gc3ludGF4LlxuICBIRUxQIEFSUkFZIGZvciBhcnJheXMu XG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fVExPT0s6CisgICAgICAgIHBy aW50ZigKKyJcXGZ0YWJsZWxvb2soa2V5d29yZCwmYSxbY10pIC0gTG9va3VwIGtleXdvcmQgaW4g a2V5d29yZCB0YWJsZS5cblwKKyAgcGF0dGVybiA9IFN0cmluZ1xuIik7CisgICAgICAgIHByaW50 ZigiICBrZXl3b3JkID0ga2V5d29yZCB0byBsb29rIHVwIChjYW4gYmUgYWJicmV2aWF0ZWQpLlxu Iik7CisgICAgICAgIHByaW50ZigiICAmYSAgICAgID0gYXJyYXkgZGVzaWduYXRvciwgY2FuIGlu Y2x1ZGUgcmFuZ2Ugc3BlY2lmaWVyLlxuIik7CisgICAgICAgIHByaW50ZigiICAgICAgICAgICAg VGhpcyBhcnJheSBtdXN0IGJlIGluIGFscGhhYmV0aWNhbCBvcmRlci5cbiIpOworICAgICAgICBw cmludGYoIiAgYyAgICAgICA9IE9wdGlvbmFsIGZpZWxkIGRlbGltaXRlciwgY29sb24oOikgYnkg ZGVmYXVsdC5cbiIpOworICAgICAgICBwcmludGYoCisiUmV0dXJucyBudW1iZXI6XG5cCisgIDEg b3IgZ3JlYXRlciwgaW5kZXggb2YgYXJyYXkgZWxlbWVudCB0aGF0IHVuaXF1ZWx5IG1hdGNoZXMg Z2l2ZW4ga2V5d29yZDtcbiIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigKKyJv ciAtMiBpZiBrZXl3b3JkIHdhcyBhbWJpZ3VvdXMsIG9yIC0xIGlmIGtleXdvcmQgZW1wdHkgb3Ig bm90IGZvdW5kLlxuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCJBbHNvIHNl ZTpcblwKKyAgSEVMUCBGVU5DIEFSUkFZTE9PSyBmb3IgYSBzaW1pbGFyIGZ1bmN0aW9uLlxuICBI RUxQIEFSUkFZIGZvciBhcnJheXMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug Rk5fQUJTOiAgICAgICAgICAgICAgICAgICAgICAvKiBBYnNvbHV0ZSAqLworICAgICAgICBwcmlu dGYoIlxcZmFic29sdXRlKG4xKVxuXAorICBuMSA9IGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJp bnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisgIFRoZSBhYnNvbHV0ZSAodW5zaWduZWQpIHZhbHVl IG9mIG4xLlxuIik7CisgICAgICAgIGJyZWFrOworCisjaWZkZWYgRk5GTE9BVAorICAgICAgY2Fz ZSBGTl9GUEFCUzoKKyAgICAgICAgcHJpbnRmKCJcXGZmcGFic29sdXRlKGYxLGQpXG5cCisgIGYx ID0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9yIGludGVnZXIuXG5cCisgICBkID0gaW50ZWdlci5c biIpOworICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAor ICBUaGUgYWJzb2x1dGUgKHVuc2lnbmVkKSB2YWx1ZSBvZiBmMSB0byBkIGRlY2ltYWwgcGxhY2Vz LlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0ZQQUREOgorICAgICAgICBw cmludGYoIlxcZmZwYWRkKGYxLGYyLGQpXG5cCisgIGYxLGYyID0gZmxvYXRpbmctcG9pbnQgbnVt YmVycyBvciBpbnRlZ2Vycy5cblwKKyAgICAgIGQgPSBpbnRlZ2VyLlxuIik7CisgICAgICAgIHBy aW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCisgIFRoZSBzdW0gb2YgZjEg YW5kIGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fRlBTVUI6CisgICAgICAgIHByaW50ZigiXFxmZnBzdWJ0cmFjdChmMSxmMixkKVxu XAorICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgaW50ZWdlcnMuXG5cCisgICAg ICBkID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9p bnQgbnVtYmVyOlxuXAorICBmMSBtaW51cyBmMiB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7Cisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0ZQTVVMOgorICAgICAgICBwcmludGYoIlxc ZmZwbXVsdGlwbHkoZjEsZjIsZClcblwKKyAgZjEsZjIgPSBmbG9hdGluZy1wb2ludCBudW1iZXJz IG9yIGludGVnZXJzLlxuXAorICAgICAgZCA9IGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJpbnRm KCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKKyAgVGhlIHByb2R1Y3Qgb2YgZjEg YW5kIGYyIHRvIGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fRlBESVY6CisgICAgICAgIHByaW50ZigiXFxmZnBkaXZpZGUoZjEsZjIsZClcblwK KyAgZjEsZjIgPSBmbG9hdGluZy1wb2ludCBudW1iZXJzIG9yIGludGVnZXJzLlxuXAorICAgICAg ZCA9IGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50 IG51bWJlcjpcblwKKyAgZjEgZGl2aWRlZCBieSBmMiB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0ZQTUFYOgorICAgICAgICBwcmludGYo IlxcZmZwbWF4aW11bShmMSxmMixkKVxuXAorICBmMSxmMiA9IGZsb2F0aW5nLXBvaW50IG51bWJl cnMgb3IgaW50ZWdlcnMuXG5cCisgICAgICBkID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmlu dGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAorICBUaGUgbWF4aW11bSBvZiBm MSBhbmQgZjIgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBGTl9GUE1JTjoKKyAgICAgICAgcHJpbnRmKCJcXGZmcG1pbmltdW0oZjEsZjIsZClc blwKKyAgZjEsZjIgPSBmbG9hdGluZy1wb2ludCBudW1iZXJzIG9yIGludGVnZXJzLlxuXAorICAg ICAgZCA9IGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBv aW50IG51bWJlcjpcblwKKyAgVGhlIG1pbmltdW0gb2YgZjEgYW5kIGYyIHRvIGQgZGVjaW1hbCBw bGFjZXMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRlBNT0Q6CisgICAg ICAgIHByaW50ZigiXFxmZnBtb2R1bHVzKGYxLGYyLGQpXG5cCisgIGYxLGYyID0gZmxvYXRpbmct cG9pbnQgbnVtYmVycyBvciBpbnRlZ2Vycy5cblwKKyAgICAgIGQgPSBpbnRlZ2VyLlxuIik7Cisg ICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCisgIFRoZSBt b2R1bHVzIG9mIGYxIGFuZCBmMiB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7CisgICAgICAgIGJy ZWFrOworCisgICAgICBjYXNlIEZOX0ZQUE9XOgorICAgICAgICBwcmludGYoIlxcZmZwcmFpc2Uo ZjEsZjIsZClcblwKKyAgZjEsZjIgPSBmbG9hdGluZy1wb2ludCBudW1iZXJzIG9yIGludGVnZXJz LlxuXAorICAgICAgZCA9IGludGVnZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZs b2F0aW5nLXBvaW50IG51bWJlcjpcblwKKyAgZjEgcmFpc2VkIHRvIHRoZSBwb3dlciBmMiwgdG8g ZCBkZWNpbWFsIHBsYWNlcy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9G UENPUzoKKyAgICAgICAgcHJpbnRmKCJcXGZmcGNvc2luZShmMSxkKVxuXAorICBmMSA9IGZsb2F0 aW5nLXBvaW50IG51bWJlciBvciBpbnRlZ2VyLlxuXAorICAgZCA9IGludGVnZXIuXG4iKTsKKyAg ICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKKyAgVGhlIGNv c2luZSBvZiBhbmdsZSBmMSAoaW4gcmFkaWFucykgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOwor ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9GUFNJTjoKKyAgICAgICAgcHJpbnRmKCJc XGZmcHNpbmUoZjEsZClcblwKKyAgZjEgPSBmbG9hdGluZy1wb2ludCBudW1iZXIgb3IgaW50ZWdl ci5cblwKKyAgIGQgPSBpbnRlZ2VyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBmbG9h dGluZy1wb2ludCBudW1iZXI6XG5cCisgIFRoZSBzaW5lIG9mIGFuZ2xlIGYxIChpbiByYWRpYW5z KSB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl IEZOX0ZQVEFOOgorICAgICAgICBwcmludGYoIlxcZmZwdGFuZ2VudChmMSxkKVxuXAorICBmMSA9 IGZsb2F0aW5nLXBvaW50IG51bWJlciBvciBpbnRlZ2VyLlxuXAorICAgZCA9IGludGVnZXIuXG4i KTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGZsb2F0aW5nLXBvaW50IG51bWJlcjpcblwKKyAg VGhlIHRhbmdlbnQgb2YgYW5nbGUgZjEgKGluIHJhZGlhbnMpIHRvIGQgZGVjaW1hbCBwbGFjZXMu XG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRlBFWFA6CisgICAgICAgIHBy aW50ZigiXFxmZnBleHAoZjEsZClcblwKKyAgZjEgPSBmbG9hdGluZy1wb2ludCBudW1iZXIgb3Ig aW50ZWdlci5cblwKKyAgIGQgPSBpbnRlZ2VyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJu cyBmbG9hdGluZy1wb2ludCBudW1iZXI6XG5cCisgIGUgKHRoZSBiYXNlIG9mIG5hdHVyYWwgbG9n YXJpdGhtcykgcmFpc2VkIHRvIHRoZSBmMSBwb3dlcixcblwKKyAgdG8gZCBkZWNpbWFsIHBsYWNl cy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9GUElOVDoKKyAgICAgICAg cHJpbnRmKCJcXGZmcGludChmMSlcblwKKyAgZjEgPSBmbG9hdGluZy1wb2ludCBudW1iZXIgb3Ig aW50ZWdlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgVGhl IGludGVnZXIgcGFydCBvZiBmMS5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBG Tl9GUExPRzoKKyAgICAgICAgcHJpbnRmKCJcXGZmcGxvZzEwKGYxLGQpXG5cCisgIGYxID0gZmxv YXRpbmctcG9pbnQgbnVtYmVyIG9yIGludGVnZXIuXG5cCisgICBkID0gaW50ZWdlci5cbiIpOwor ICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAorICBUaGUg bG9nYXJpdGhtLCBiYXNlIDEwLCBvZiBmMSB0byBkIGRlY2ltYWwgcGxhY2VzLlxuIik7CisgICAg ICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0ZQTE46CisgICAgICAgIHByaW50ZigiXFxmZnBs b2duKGYxLGQpXG5cCisgIGYxID0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9yIGludGVnZXIuXG5c CisgICBkID0gaW50ZWdlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmct cG9pbnQgbnVtYmVyOlxuXAorICBUaGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgZjEgdG8gZCBkZWNp bWFsIHBsYWNlcy5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9GUFJPVToK KyAgICAgICAgcHJpbnRmKCJcXGZmcHJvdW5kKGYxLGQpXG5cCisgIGYxID0gZmxvYXRpbmctcG9p bnQgbnVtYmVyIG9yIGludGVnZXIuXG5cCisgICBkID0gaW50ZWdlci5cbiIpOworICAgICAgICBw cmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAorICBmMSByb3VuZGVkIHRv IGQgZGVjaW1hbCBwbGFjZXMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5f RlBTUVI6CisgICAgICAgIHByaW50ZigiXFxmZnBzcXJ0KGYxLGQpXG5cCisgIGYxID0gZmxvYXRp bmctcG9pbnQgbnVtYmVyIG9yIGludGVnZXIuXG5cCisgICBkID0gaW50ZWdlci5cbiIpOworICAg ICAgICBwcmludGYoIlJldHVybnMgZmxvYXRpbmctcG9pbnQgbnVtYmVyOlxuXAorICBUaGUgc3F1 YXJlIHJvb3Qgb2YgZjEgdG8gZCBkZWNpbWFsIHBsYWNlcy5cbiIpOworICAgICAgICBicmVhazsK KyNlbmRpZiAvKiBGTkZMT0FUICovCisKKyNpZmRlZiBDS0NIQU5ORUxJTworICAgICAgY2FzZSBG Tl9GRU9GOgorICAgICAgICBwcmludGYoIlxcZl9lb2YobjEpXG5cCisgIG4xID0gY2hhbm5lbCBu dW1iZXIuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIG51bWJlcjpcblwKKyAgMSBpZiBj aGFubmVsIG4xIGF0IGVuZCBvZiBmaWxlLCAwIG90aGVyd2lzZS5cbiIpOworICAgICAgICBicmVh azsKKyAgICAgIGNhc2UgRk5fRlBPUzoKKyAgICAgICAgcHJpbnRmKCJcXGZfcG9zKG4xKVxuXAor ICBuMSA9IGNoYW5uZWwgbnVtYmVyLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBudW1i ZXI6XG5cCisgIFJlYWQvd3JpdGUgcG9pbnRlciBvZiBjaGFubmVsIG4xIGFzIGJ5dGUgbnVtYmVy LlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGTl9OTElORToKKyAgICAgICAgcHJp bnRmKCJcXGZfbGluZShuMSlcblwKKyAgbjEgPSBjaGFubmVsIG51bWJlci5cbiIpOworICAgICAg ICBwcmludGYoIlJldHVybnMgbnVtYmVyOlxuXAorICBSZWFkL3dyaXRlIHBvaW50ZXIgb2YgY2hh bm5lbCBuMSBhcyBsaW5lIG51bWJlci5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug Rk5fRklMTk86CisgICAgICAgIHByaW50ZigiXFxmX2hhbmRsZShuMSlcblwKKyAgbjEgPSBjaGFu bmVsIG51bWJlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgbnVtYmVyOlxuXAorICBG aWxlICVzIG9mIG9wZW4gZmlsZSBvbiBjaGFubmVsIG4xLlxuIiwKKyNpZmRlZiBPUzIKKyAgICAg ICAgICAgICAgICJoYW5kbGUiCisjZWxzZQorICAgICAgICAgICAgICAgImRlc2NyaXB0b3IiCisj ZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICApOworICAgICAgICBicmVhazsKKyAgICAg IGNhc2UgRk5fRlNUQVQ6CisgICAgICAgIHByaW50ZigiXFxmX3N0YXR1cyhuMSlcblwKKyAgbjEg PSBjaGFubmVsIG51bWJlci5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnMgbnVtYmVyOlxu XAorICBTdW0gb2Ygb3BlbiBtb2RlcyBvZiBjaGFubmVsIG4xOiAxID0gcmVhZDsgMiA9IHdyaXRl OyA0ID0gYXBwZW5kLCBvcjpcblwKKyAgMCBpZiBub3Qgb3Blbi5cbiIpOworICAgICAgICBicmVh azsKKyAgICAgIGNhc2UgRk5fRkdDSEFSOgorICAgICAgICBwcmludGYoIlxcZl9nZXRjaGFyKG4x KVxuXAorICBuMSA9IGNoYW5uZWwgbnVtYmVyLlxuIik7CisgICAgICAgIHByaW50ZigiICBSZWFk cyBhIGNoYXJhY3RlciBmcm9tIGNoYW5uZWwgbjEgYW5kIHJldHVybnMgaXQuXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0ZHTElORToKKyAgICAgICAgcHJpbnRmKCJcXGZfZ2V0 bGluZShuMSlcblwKKyAgbjEgPSBjaGFubmVsIG51bWJlci5cbiIpOworICAgICAgICBwcmludGYo IiAgUmVhZHMgYSBsaW5lIGZyb20gY2hhbm5lbCBuMSBhbmQgcmV0dXJucyBpdC5cbiIpOworICAg ICAgICBicmVhazsKKyAgICAgIGNhc2UgRk5fRkdCTEs6CisgICAgICAgIHByaW50ZigiXFxmX2dl dGJsb2NrKG4xLG4yKVxuXAorICBuMSA9IGNoYW5uZWwgbnVtYmVyLCBuMiA9IHNpemVcbiIpOwor ICAgICAgICBwcmludGYoCisiICBSZWFkcyBhIGJsb2NrIG9mIG4yIGNoYXJhY3RlcnMgZnJvbSBj aGFubmVsIG4xIGFuZCByZXR1cm5zIGl0LlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSBGTl9GUENIQVI6CisgICAgICAgIHByaW50ZigiXFxmX3B1dGNoYXIobjEsYylcblwKKyAgbjEg PSBjaGFubmVsIG51bWJlciwgYyA9IGNoYXJhY3RlclxuIik7CisgICAgICAgIHByaW50ZigiICBX cml0ZXMgYSBjaGFyYWN0ZXIgdG8gY2hhbm5lbCBuMS5cblwKK1JldHVybnMgbnVtYmVyOlxuXAor ICAxIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0ZQTElORToKKyAgICAgICAgcHJpbnRmKCJc XGZfcHV0bGluZShuMSxzMSlcblwKKyAgbjEgPSBjaGFubmVsIG51bWJlciwgczEgPSBzdHJpbmdc biIpOworICAgICAgICBwcmludGYoCisiICBXcml0ZXMgdGhlIHN0cmluZyBzMSB0byBjaGFubmVs IG4xIGFuZCBhZGRzIGEgbGluZSB0ZXJtaW5hdG9yLlxuXAorUmV0dXJucyBudW1iZXI6XG4iKTsK KyAgICAgICAgcHJpbnRmKCIgIEhvdyBtYW55IGNoYXJhY3RlcnMgd3JpdHRlbiBpZiBzdWNjZXNz ZnVsO1xuXAorICBPdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuIgorICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEZOX0ZQQkxLOgorICAgICAgICBw cmludGYoIlxcZl9wdXRibG9jayhuMSxzMSlcblwKKyAgbjEgPSBjaGFubmVsIG51bWJlciwgczEg PSBzdHJpbmdcbiIpOworICAgICAgICBwcmludGYoCisiICBXcml0ZXMgdGhlIHN0cmluZyBzMSB0 byBjaGFubmVsIG4xLlxuXAorICBSZXR1cm5zIG51bWJlcjpcbiIpOworICAgICAgICBwcmludGYo IiAgSG93IG1hbnkgY2hhcmFjdGVycyB3cml0dGVuIGlmIHN1Y2Nlc3NmdWw7XG5cCisgIE90aGVy d2lzZSBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuXG4iCisgICAgICAgICAgICAgICApOworICAgICAg ICBicmVhazsKKyAgICAgIGNhc2UgRk5fRkVSTVNHOgorICAgICAgICBwcmludGYoIlxcZl9lcnJt c2coW24xXSlcblwKKyAgbjEgPSBudW1lcmljIGVycm9yIGNvZGUsIFxcdihmX2Vycm9yKSBieSBk ZWZhdWx0LlxuIik7CisgICAgICAgIHByaW50ZigiICBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGVy cm9yIG1lc3NhZ2Ugc3RyaW5nLlxuIik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLQ0hB Tk5FTElPICovCisKKyAgICAgIGNhc2UgRk5fQUFEVU1QOgorICAgICAgICBwcmludGYoIlxcZmFh Y29udmVydChuYW1lLCZhWywmYl0pXG5cCisgIG5hbWUgPSBuYW1lIG9mIGFzc29jaWF0aXZlIGFy cmF5LCAmYSBhbmQgJmIgPSBuYW1lcyBvZiByZWd1bGFyIGFycmF5cy5cbiIpOworICAgICAgICBw cmludGYoCisiICBDb252ZXJ0cyB0aGUgZ2l2ZW4gYXNzb2NpYXRpdmUgYXJyYXkgaW50byB0d28g cmVndWxhciBhcnJheXMsICZhIGFuZCAmYixcblwKKyAgY29udGFpbmluZyB0aGUgaW5kaWNlcyBh bmQgdmFsdWVzLCByZXNwZWN0aXZlbHk6XG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIG51 bWJlcjpcblwKKyAgSG93IG1hbnkgZWxlbWVudHMgd2VyZSBjb252ZXJ0ZWQuXG4iKTsKKyAgICAg ICAgYnJlYWs7CisKKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgY2FzZSBGTl9LUkJfVEs6Cisg ICAgICAgIHByaW50ZigiXFxma3JidGlja2V0cyhuKVxuXAorICBuID0gS2VyYmVyb3MgdmVyc2lv biBudW1iZXIgKDQgb3IgNSkuXG5cCisgIFJldHVybnMgc3RyaW5nOlxuXAorICBUaGUgbnVtYmVy IG9mIGFjdGl2ZSBLZXJiZXJvcyA0IG9yIDUgdGlja2V0cy5cblwKKyAgUmVzZXRzIHRoZSB0aWNr ZXQgbGlzdCB1c2VkIGJ5IFxcZmtyYm5leHR0aWNrZXQobikuXG4iKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgRk5fS1JCX05YOgorICAgICAgICBwcmludGYoIlxcZmtyYm5leHR0aWNr ZXQobilcblwKKyAgbiA9IEtlcmJlcm9zIHZlcnNpb24gbnVtYmVyICg0IG9yIDUpLlxuXAorICBS ZXR1cm5zIHN0cmluZzpcblwKKyAgICBUaGUgbmV4dCB0aWNrZXQgaW4gdGhlIEtlcmJlcm9zIDQg b3IgNSB0aWNrZXQgbGlzdCB0aGF0IHdhcyBzZXQgdXAgYnlcblwKKyAgICB0aGUgbW9zdCByZWNl bnQgaW52b2NhdGlvbiBvZiBcXGZrcmJ0aWNrZXRzKG4pLlxuIik7CisgICAgICAgIGJyZWFrOwor CisgICAgICBjYXNlIEZOX0tSQl9JVjoKKyAgICAgICAgcHJpbnRmKCJcXGZrcmJpc3ZhbGlkKG4s bmFtZSlcblwKKyAgbiAgICA9IEtlcmJlcm9zIHZlcnNpb24gbnVtYmVyICg0IG9yIDUpLlxuXAor ICBuYW1lID0gYSB0aWNrZXQgbmFtZSBhcyByZXR1cm5lZCBieSBcXGZrcmJuZXh0dGlja2V0KG4p LlxuXAorICBSZXR1cm5zIG51bWJlcjpcblwKKyAgICAxIGlmIHRoZSB0aWNrZXQgaXMgdmFsaWQs IDAgaWYgbm90IHZhbGlkLlxuXAorICAgIEEgdGlja2V0IGlzIHZhbGlkIGlmIGFsbCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMgYXJlIHRydWU6XG5cbiIpOworICAgICAgICBwcmludGYoIlxuXAor ICAgIChpKSAgIGl0IGV4aXN0cyBpbiB0aGUgY3VycmVudCBjYWNoZSBmaWxlO1xuXAorICAgIChp aSkgIGl0IGlzIG5vdCBleHBpcmVkO1xuXAorICAgIChpaWkpIGl0IGlzIG5vdCBtYXJrZWQgaW52 YWxpZCAoSzUgb25seSk7XG5cCisgICAgKGl2KSAgaXQgd2FzIGlzc3VlZCBmcm9tIHRoZSBjdXJy ZW50IElQIGFkZHJlc3NcbiIpOworICAgICAgICBwcmludGYoIlxuICBUaGlzIHZhbHVlIGNhbiBi ZSB1c2VkIGluIGFuIElGIHN0YXRlbWVudCwgZS5nLjpcblxuIik7CisgICAgICAgIHByaW50Zigi ICAgIGlmIFxcZmtyYmlzdmFsaWQoNCxrcmJ0Z3QuRk9PLkJBUi5FRFVARk9PLkJBUi5FRFUpIC4u LlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX0tSQl9UVDoKKyAgICAgICAg cHJpbnRmKCJcXGZrcmJ0aW1lbGVmdChuLG5hbWUpXG5cCisgIG4gICAgPSBLZXJiZXJvcyB2ZXJz aW9uIG51bWJlciAoNCBvciA1KS5cblwKKyAgbmFtZSA9IGEgdGlja2V0IG5hbWUgYXMgcmV0dXJu ZWQgYnkgXFxma3JibmV4dHRpY2tldChuKS5cblwKKyAgUmV0dXJucyBzdHJpbmc6XG5cCisgICAg VGhlIG51bWJlciBvZiBzZWNvbmRzIHJlbWFpbmluZyBpbiB0aGUgdGlja2V0J3MgbGlmZXRpbWUu XG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fS1JCX0ZHOgorICAgICAgICBw cmludGYoIlxcZmtyYmZsYWdzKG4sbmFtZSlcblwKKyAgbiAgICA9IEtlcmJlcm9zIHZlcnNpb24g bnVtYmVyICg0IG9yIDUpLlxuXAorICBuYW1lID0gYSB0aWNrZXQgbmFtZSBhcyByZXR1cm5lZCBi eSBcXGZrcmJuZXh0dGlja2V0KG4pLlxuXAorICBSZXR1cm5zIHN0cmluZzpcbiIpOworICAgICAg ICBwcmludGYoCisiICAgIFRoZSBmbGFncyBzdHJpbmcgYXMgcmVwb3J0ZWQgd2l0aCBBVVRIIEs1 IExJU1QgL0ZMQUdTLiAgVGhpcyBzdHJpbmcgY2FuXG5cCisgICAgYmUgc2VhcmNoZWQgZm9yIGEg cGFydGljdWxhciBmbGFnIHVzaW5nIHRoZSBcXGZpbmRleCgpIGZ1bmN0aW9uIHdoZW5cblwKKyAg ICBTRVQgQ0FTRSBpcyBPTiAoZm9yIGNhc2Ugc2Vuc2l0aXZlIHNlYXJjaGVzKS4gIEZsYWcgc3Ry aW5ncyBhcmUgb25seVxuXAorICAgIGF2YWlsYWJsZSBmb3IgSzUgdGlja2V0cy5cbiIpOworICAg ICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisgICAgICBjYXNlIEZOX1BB VFRFUk46CisgICAgICAgIHByaW50ZigiXFxmcGF0dGVybihzKVxuXAorICBzID0gc3RyaW5nXG5c CisgIFJldHVybnMgc3RyaW5nOiBzIHdpdGggYW55IHZhcmlhYmxlcywgZXRjLCBldmFsdWF0ZWQg aW4gdGhlIG5vcm1hbCBtYW5uZXIuXG4iCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmlu dGYoIlwKKyAgRm9yIHVzZSB3aXRoIElOUFVULCBNSU5QVVQsIGFuZCBSRUlOUFVUIHRvIGRlY2xh cmUgdGhhdCBhIHNlYXJjaCB0YXJnZXQgaXNcblwKKyAgYSBwYXR0ZXJuIHJhdGhlciB0aGFuIGEg bGl0ZXJhbCBzdHJpbmcuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fSEVY Mk46CisgICAgICAgIHByaW50ZigiXFxmaGV4Mm4ocylcblwKKyAgcyA9IGhleGFkZWNpbWFsIG51 bWJlclxuXAorICBSZXR1cm5zIGRlY2ltYWwgZXF1aXZhbGVudC5cbiIpOworICAgICAgICBicmVh azsKKworICAgICAgY2FzZSBGTl9IRVgySVA6CisgICAgICAgIHByaW50ZigiXFxmaGV4MmlwKHMp XG5cCisgIHMgPSA4LWRpZ2l0IGhleGFkZWNpbWFsIG51bWJlclxuXAorICBSZXR1cm5zIHRoZSBl cXVpdmFsZW50IGRlY2ltYWwgZG90dGVkIElQIGFkZHJlc3MuXG4iKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICAgIGNhc2UgRk5fSVAySEVYOgorICAgICAgICBwcmludGYoIlxcZmlwMmhleChzKVxu XAorICBzID0gZGVjaW1hbCBkb3R0ZWQgSVAgYWRkcmVzc1xuXAorICBSZXR1cm5zIHRoZSBlcXVp dmFsZW50IDgtZGlnaXQgaGV4YWRlY2ltYWwgbnVtYmVyLlxuIik7CisgICAgICAgIGJyZWFrOwor CisgICAgICBjYXNlIEZOX09DVDJOOgorICAgICAgICBwcmludGYoIlxcZm9jdDJuKHMpXG5cCisg IHMgPSBvY3RhbCBudW1iZXJcblwKKyAgUmV0dXJucyBkZWNpbWFsIGVxdWl2YWxlbnQuXG4iKTsK KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fVE9CNjQ6CisgICAgICAgIHByaW50Zigi XFxiNjRlbmNvZGUocylcblwKKyAgcyA9IHN0cmluZyBjb250YWluaW5nIG5vIE5VTCBieXRlc1xu XAorICBSZXR1cm5zIEJhc2UtNjQgZW5jb2Rpbmcgb2Ygc3RyaW5nLlxuIik7CisgICAgICAgIGJy ZWFrOworCisgICAgICBjYXNlIEZOX0ZNQjY0OgorICAgICAgICBwcmludGYoIlxcYjY0ZGVjb2Rl KHMpXG5cCisgIHMgPSBzdHJpbmcgaW4gQmFzZS02NCBub3RhdGlvblxuXAorICBSZXR1cm5zIHRo ZSBkZWNvZGVkIHN0cmluZyBvciBhbiBlcnJvciBjb2RlIGlmIHMgbm90IHZhbGlkLlxuIik7Cisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX1JBRElYOgorICAgICAgICBwcmludGYoIlxc ZnJhZGl4KHMsbjEsbjIpXG5cCisgIHMgPSBudW1iZXIgaW4gcmFkaXggbjFcblwKKyAgUmV0dXJu cyB0aGUgbnVtYmVyJ3MgcmVwcmVzZW50YXRpb24gaW4gcmFkaXggbjIuXG4iKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICAgIGNhc2UgRk5fSk9JTjoKKyAgICAgICAgcHJpbnRmKCJcXGZqb2luKCZh WyxzWyxuMVssbjJdXV0pXG5cCisgICZhID0gYXJyYXkgZGVzaWduYXRvciwgY2FuIGluY2x1ZGUg cmFuZ2Ugc3BlY2lmaWVyLlxuXAorICBzICA9IG9wdGlvbmFsIHNlcGFyYXRvci5cbiIpOworICAg ICAgICBwcmludGYoIlwKKyAgbjEgPSBub256ZXJvIHRvIHB1dCBncm91cGluZyBhcm91bmQgZWxl bWVudHMgdGhhdCBjb250YWluIHNwYWNlcztcblwKKyAgICAgICBzZWUgXFxmd29yZCgpIGdyb3Vw aW5nIG1hc2sgZm9yIHZhbHVlcyBvZiBuLlxuIik7CisgICAgICAgIHByaW50ZigiXAorICBuMiA9 IDAgb3Igb21pdHRlZCB0byBwdXQgc3BhY2VzIGJldHdlZW4gZWxlbWVudHM7IG5vbnplcm8gdG8g b21pdCB0aGVtLlxuIik7CisgICAgICAgIHByaW50ZigiXAorICBSZXR1cm5zIHRoZSAoc2VsZWN0 ZWQpIGVsZW1lbnRzIG9mIHRoZSBhcnJheSBqb2luZWQgdG8gdG9nZXRoZXIsXG5cCisgIHNlcGFy YXRlZCBieSB0aGUgc2VwYXJhdG9yLlxuIik7CisJcHJpbnRmKCJcblwKKyAgSWYgcyBpcyBDU1Yg KGxpdGVyYWxseSksIHRoYXQgbWVhbnMgdGhlIGFycmF5IGlzIHRvIGJlIHRyYW5zZm9ybWVkIGlu dG8gYVxuXAorICBjb21tYS1zZXBhcmF0ZWQgbGlzdC4gIE5vIG90aGVyIGFyZ3VtZW50cyBhcmUg bmVlZGVkLiAgSWYgcyBpcyBUU1YsIHRoZW5cblwKKyAgYSB0YWItc2VwYXJhdGVkIGxpc3QgaXMg Y3JlYXRlZC5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9TVUJTVDoKKyAg ICAgICAgcHJpbnRmKCJcXGZzdWJzdGl0dXRlKHMxLHMyLHMzKVxuXAorICBzMSA9IFNvdXJjZSBz dHJpbmcuXG5cCisgIHMyID0gTGlzdCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHRyYW5zbGF0ZWQuXG5c CisgIHMzID0gTGlzdCBvZiBjaGFyYWN0ZXJzIHRvIHRyYW5zbGF0ZSB0aGVtIHRvLlxuIik7Cisg ICAgICAgIHByaW50ZigKKyIgIFJldHVybnM6IHMxLCB3aXRoIGVhY2ggY2hhcmFjdGVyIHRoYXQg aXMgaW4gczIgcmVwbGFjZWQgYnkgdGhlXG5cCisgIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyIGlu IHMzLiAgczIgYW5kIHMzIGNhbiBjb250YWluIEFTQ0lJIHJhbmdlcyxcblwKKyAgbGlrZSBbYS16 XS4gIEFueSBjaGFyYWN0ZXJzIGluIHMyIHRoYXQgZG9uJ3QgaGF2ZSBjb3JyZXNwb25kaW5nXG5c CisgIGNoYXJhY3RlcnMgaW4gczMgKGFmdGVyIHJhbmdlIGV4cGFuc2lvbikgYXJlIHJlbW92ZWQg ZnJvbSB0aGUgcmVzdWx0LlxuXAorICBUaGlzIGZ1bmN0aW9uIHdvcmtzIG9ubHkgd2l0aCBzaW5n bGUtYnl0ZSBjaGFyYWN0ZXItc2V0c1xuIik7CisgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5P U0VYUAorICAgICAgY2FzZSBGTl9TRVhQOgorICAgICAgICBwcmludGYoIlxcZnNleHByZXNzaW9u KHMxKVxuXAorICBzMSA9IFMtRXhwcmVzc2lvbi5cbiIpOworICAgICAgICBwcmludGYoIiAgUmV0 dXJuczogVGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIHMxLlxuIik7CisgICAgICAgIGJyZWFrOwor CisjZW5kaWYgLyogTk9TRVhQICovCisKKyAgICAgIGNhc2UgRk5fQ01EU1RLOgorICAgICAgICBw cmludGYoIlxcZmNtZHN0YWNrKG4xLG4yKVxuXAorICBuMSA9IENvbW1hbmQtc3RhY2sgbGV2ZWws IDAgdG8gXFx2KGNtZGxldmVsKSwgZGVmYXVsdCBcXHYoY21kbGV2ZWwpLlxuXAorICBuMiA9IEZ1 bmN0aW9uIGNvZGUsIDAgb3IgMS5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnM6XG4iKTsK KyAgICAgICAgcHJpbnRmKCIgIG4yID0gMDogbmFtZSBvZiBvYmplY3QgYXQgc3RhY2sgbGV2ZWwg bjFcblwKKyAgbjIgPSAxOiB0eXBlIG9mIG9iamVjdCBhdCBzdGFjayBsZXZlbCBuMTpcblwKKyAg ICAgMCA9IGludGVyYWN0aXZlIHByb21wdFxuXAorICAgICAxID0gY29tbWFuZCBmaWxlXG5cCisg ICAgIDIgPSBtYWNyb1xuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICBicmVhazsKKwor I2lmZGVmIENLRkxPQVQKKyAgICAgIGNhc2UgRk5fRElGREFURToKKyAgICAgICAgcHJpbnRmKCJc XGZkaWZmZGF0ZXMoZDEsZDIpXG5cCisgIGQxID0gZnJlZS1mb3JtYXQgZGF0ZSBhbmQvb3IgdGlt ZSAoZGVmYXVsdCA9IE5PVykuXG5cCisgIGQyID0gZGl0dG8uXG4iKTsKKyAgICAgICAgcHJpbnRm KCJSZXR1cm5zOlxuIik7CisgICAgICAgIHByaW50ZigiICBEaWZmZXJlbmNlIGV4cHJlc3NlZCBh cyBkZWx0YSB0aW1lOlxuIik7CisgICAgICAgIHByaW50ZigiICBOZWdhdGl2ZSBpZiBkMiBpcyBs YXRlciB0aGFuIGQxLCBvdGhlcndpc2UgcG9zaXRpdmUuXG4iKTsKKyAgICAgICAgYnJlYWs7Cisj ZW5kaWYgLyogQ0tGTE9BVCAqLworCisgICAgICBjYXNlIEZOX0NNUERBVEU6CisgICAgICAgIHBy aW50ZigiXFxmY21wZGF0ZXMoZDEsZDIpXG5cCisgIGQxID0gZnJlZS1mb3JtYXQgZGF0ZSBhbmQv b3IgdGltZSAoZGVmYXVsdCA9IE5PVykuXG5cCisgIGQyID0gZGl0dG8uXG4iKTsKKyAgICAgICAg cHJpbnRmKCJSZXR1cm5zOlxuIik7CisgICAgICAgIHByaW50ZigiICAwIGlmIGQxIGlzIGVxdWFs IHRvIGQyO1xuXAorICAxIGlmIGQxIGlzIGxhdGVyIHRoYW4gZDI7XG5cCisgLTEgaWYgZDEgaXMg ZWFybGllciB0aGFuIGQyLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX1RP R01UOgorICAgICAgICBwcmludGYoIlxcZnV0Y2RhdGUoZDEpXG5cCisgIGQxID0gZnJlZS1mb3Jt YXQgZGF0ZSBhbmQvb3IgdGltZSAoZGVmYXVsdCA9IE5PVykuXG4iKTsKKyAgICAgICAgcHJpbnRm KCJSZXR1cm5zOlxuIik7CisgICAgICAgIHByaW50ZigiICBEYXRlLXRpbWUgY29udmVydGVkIHRv IFVUQyAoR01UKSB5eXl5bW1kZCBoaDptbTpzcy5cbiIpOworICAgICAgICBicmVhazsKKworI2lm ZGVmIFRDUFNPQ0tFVAorICAgICAgY2FzZSBGTl9IU1RBREQ6CisgICAgICAgIHByaW50ZigiXFxm YWRkcjJuYW1lKHMpXG5cCisgIHMgPSBudW1lcmljIElQIGFkZHJlc3MuXG4iKTsKKyAgICAgICAg cHJpbnRmKCJSZXR1cm5zOlxuIik7CisgICAgICAgIHByaW50ZigiICBDb3JyZXNwb25kaW5nIElQ IGhvc3RuYW1lIGlmIGZvdW5kLCBvdGhlcndpc2UgbnVsbC5cbiIpOworICAgICAgICBicmVhazsK KyAgICAgIGNhc2UgRk5fSFNUTkFNOgorICAgICAgICBwcmludGYoIlxcZm5hbWUyYWRkcihzKVxu XAorICBzID0gSVAgaG9zdCBuYW1lLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJuczpcbiIp OworICAgICAgICBwcmludGYoIiAgQ29ycmVzcG9uZGluZyBudW1lcmljIElQIGFkZHJlc3MgaWYg Zm91bmQsIGVsc2UgbnVsbC5cbiIpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KKworICAgICAgY2FzZSBGTl9ERUxTRUM6CisgICAgICAgIHByaW50ZigiXFxmZGVsdGEy c2VjcyhkdClcblwKKyAgZHQgPSBEZWx0YSB0aW1lLCBlLmcuICszZDE0OjI3OjUyLlxuIik7Cisg ICAgICAgIHByaW50ZigiUmV0dXJuczpcbiIpOworICAgICAgICBwcmludGYoIiAgVGhlIGNvcnJl c3BvbmRpbmcgbnVtYmVyIG9mIHNlY29uZHMuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgRk5fUENfRFU6CisgICAgICAgIHByaW50ZigiXFxmZG9zMnVuaXhwYXRoKHApXG5cCisg IHAgPSBzdHJpbmcsIERPUyBwYXRobmFtZS5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnM6 XG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIFRoZSBhcmd1bWVudCBjb252ZXJ0ZWQgdG8gYSBVbml4 IHBhdGhuYW1lLlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZOX1BDX1VEOgor ICAgICAgICBwcmludGYoIlxcZnVuaXgyZG9zcGF0aChwKVxuXAorICBwID0gc3RyaW5nLCBVbml4 IHBhdGhuYW1lLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJuczpcbiIpOworICAgICAgICBw cmludGYoIiAgVGhlIGFyZ3VtZW50IGNvbnZlcnRlZCB0byBhIERPUyBwYXRobmFtZS5cbiIpOwor ICAgICAgICBicmVhazsKKworI2lmZGVmIEZOX0VSUk1TRworICAgICAgY2FzZSBGTl9FUlJNU0c6 CisgICAgICAgIHByaW50ZigiXFxmZXJyc3RyaW5nKG4pXG5cCisgIG4gPSBwbGF0Zm9ybS1kZXBl bmRlbnQgbnVtZXJpYyBlcnJvciBjb2RlLlxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJuczpc biIpOworICAgICAgICBwcmludGYoIiAgVGhlIGNvcnJlc3BvbmRpbmcgZXJyb3Igc3RyaW5nLlxu Iik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZOX0VSUk1TRyAqLworCisgICAgICBjYXNl IEZOX0tXVkFMOgorICAgICAgICBwcmludGYoIlxcZmtleXdvcmR2YWx1ZShzMVssczJdKVxuXAor ICBzMSA9IHN0cmluZyBvZiB0aGUgZm9ybSBcIm5hbWU9dmFsdWVcIlxuXAorICBzMiA9IG9uZSBt b3JlIHNlcGFyYXRvciBjaGFyYWN0ZXJzIChkZWZhdWx0IHNlcGFyYXRvciBpcyBcIj1cIilcbiIp OworICAgICAgICBwcmludGYoIiAgICBBc3NpZ25zIHRoZSB2YWx1ZSwgaWYgYW55LCB0byB0aGUg bmFtZWQgbWFjcm8gYW5kIHNldHNcbiIpOworICAgICAgICBwcmludGYoIiAgICB0aGUgXFx2KGxh c3RrZXl3b3JkdmFsdWUpIHRvIHRoZSBtYWNybyBuYW1lLlxuIik7CisgICAgICAgIHByaW50Zigi ICAgIElmIG5vIHZhbHVlIGlzIGdpdmVuLCB0aGUgbWFjcm8gaXMgdW5kZWZpbmVkLlxuIik7Cisg ICAgICAgIHByaW50ZigiUmV0dXJuczpcbiIpOworICAgICAgICBwcmludGYoIiAtMSBvbiBlcnJv clxuIik7CisgICAgICAgIHByaW50ZigiICAwIGlmIG5vIGtleXdvcmQgb3IgdmFsdWUgd2VyZSBm b3VuZFxuIik7CisgICAgICAgIHByaW50ZigiICAxIGlmIGEga2V5d29yZCB3YXMgZm91bmQgYnV0 IG5vIHZhbHVlXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgIDIgaWYgYSBrZXl3b3JkIGFuZCBhIHZh bHVlIHdlcmUgZm91bmRcbiIpOworICAgICAgICBwcmludGYoIlN5bm9ueW06IFxca3d2YWx1ZShz MVssczJdKVxuIik7CisgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ09NTUVOVAorICAgICAgY2Fz ZSBGTl9TTEVFUDoKKyAgICAgICAgcHJpbnRmKCJcXGZzbGVlcChuKVxuXAorICBuID0gbnVtYmVy IG9mIHNlY29uZHNcbiIpOworICAgICAgICBwcmludGYoIiAgICBQYXVzZXMgZm9yIHRoZSBnaXZl biBudW1iZXIgb2Ygc2Vjb25kcy5cbiIpOworICAgICAgICBwcmludGYoIlJldHVybnM6IHRoZSBl bXB0eSBzdHJpbmcuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fTVNMRUVQ OgorICAgICAgICBwcmludGYoIlxcZm1zbGVlcChuKVxuXAorICBuID0gbnVtYmVyIG9mIG1pbGxp c2Vjb25kc1xuIik7CisgICAgICAgIHByaW50ZigiICAgIFBhdXNlcyBmb3IgdGhlIGdpdmVuIG51 bWJlciBvZiBtaWxsaXNlY29uZHMuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zOiB0aGUg ZW1wdHkgc3RyaW5nLlxuIik7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KworI2lmZGVmIE5UCisgICAgICBjYXNlIEZOX1NOQU1FOgorICAgICAgICBwcmludGYoIlxcZnNo b3J0cGF0aG5hbWUocylcblwKKyAgcyA9IGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUgc3RyaW5nXG4i KTsKKyAgICAgICAgcHJpbnRmKCIgICAgUmV0dXJucyB0aGUgc2hvcnQgcGF0aCBmb3JtIG9mIHRo ZSBnaXZlbiBpbnB1dC5cbiIpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9MTkFN RToKKyAgICAgICAgcHJpbnRmKCJcXGZsb25ncGF0aG5hbWUocylcblwKKyAgcyA9IGZpbGUgb3Ig ZGlyZWN0b3J5IG5hbWUgc3RyaW5nXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgICAgUmV0dXJucyB0 aGUgbG9uZyBwYXRoIGZvcm0gb2YgdGhlIGdpdmVuIGlucHV0LlxuIik7CisgICAgICAgIGJyZWFr OworI2Vsc2UKKyAgICAgIGNhc2UgRk5fU05BTUU6CisgICAgICAgIHByaW50ZigiXFxmc2hvcnRw YXRobmFtZShzKVxuXAorICAgIFN5bm9ueW0gZm9yIFxmcGF0aG5hbWUoKVxuIik7CisgICAgICAg IGJyZWFrOworCisgICAgICBjYXNlIEZOX0xOQU1FOgorICAgICAgICBwcmludGYoIlxcZmxvbmdw YXRobmFtZShzKVxuXAorICAgIFN5bm9ueW0gZm9yIFxmcGF0aG5hbWUoKVxuIik7CisgICAgICAg IGJyZWFrOworI2VuZGlmIC8qIE5UICovCisKKyAgICAgIGNhc2UgRk5fRU1BSUw6CisgICAgICAg IHByaW50ZigiXFxmZW1haWxhZGRyZXNzKHMpXG5cCisgIHMgPSBGcm9tOiBvciBTZW5kZXI6IGhl YWRlciBmcm9tIGFuIFJGQzI4MjItZm9ybWF0IGVtYWlsIG1lc3NhZ2VcbiIpOworICAgICAgICBw cmludGYoIiAgICBFeHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgZW1haWwgYWRkcmVzcy5cbiIpOwor ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9QSUNUVVJFOgorICAgICAgICBwcmludGYo IlxcZnBpY3R1cmVpbmZvKHNbLCZhXSlcblwKKyAgcyAgPSBGaWxlIHNwZWNpZmljYXRpb24gb2Yg YSBKUEcgb3IgR0lGIHBpY3R1cmUgZmlsZS5cblwKKyAgJmEgPSBPcHRpb25hbCBhcnJheSBuYW1l LlxuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5zIGludGVnZXI6XG5cCisgIDAgaWYgZmls ZSBub3QgZm91bmQgb3Igbm90IHJlY29nbml6ZWQ7XG5cCisgIDEgaWYgb3JpZW50YXRpb24gaXMg bGFuZHNjYXBlO1xuXAorICAyIGlmIG9yaWVudGF0aW9uIGlzIHBvcnRyYWl0LlxuXG4iKTsgCisJ cHJpbnRmKCIgIElmIGFuIGFycmF5IG5hbWUgaXMgaW5jbHVkZWQsIGVsZW1lbnQgMSBpcyBmaWxs ZWQgXAoraW4gd2l0aCB0aGUgaW1hZ2Ugd2lkdGhcblwKKyAgaW4gcGl4ZWxzLCBhbmQgZWxlbWVu dCAyIHRoZSBpbWFnZSBoZWlnaHQuXG4iKTsKKwlicmVhazsKKworICAgICAgY2FzZSBGTl9QSUQ6 CisgICAgICAgIHByaW50ZigiXFxmZ2V0cGlkaW5mbyhuMSlcblwKKyBuMSA9IE51bWVyaWMgcHJv Y2VzcyBJRFxuIik7CisgICAgICAgIHByaW50ZigiUmV0dXJucyBpbnRlZ2VyOlxuXAorIC0xIG9u IGZhaWx1cmUgdG8gZ2V0IGluZm9ybWF0aW9uO1xuXAorICAxIGlmIG4xIGlzIHRoZSBJRCBvZiBh biBhY3RpdmUgcHJvY2VzcztcblwKKyAgMCBpZiB0aGUgcHJvY2VzcyBkb2VzIG5vdCBleGlzdC5c biIpOyAKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fRlVOQzoKKwlwcmludGYoIlxc ZmZ1bmN0aW9uKHMxKVxuXAorIHMxID0gbmFtZSBvZiBmdW5jdGlvbi5cbiIpOworICAgICAgICBw cmludGYoIlJldHVybnMgaW50ZWdlcjpcblwKKyAgMSBpZiBzMSBpcyB0aGUgbmFtZSBvZiBhbiBh dmFpbGFibGUgYnVpbHQtaW4gZnVuY3Rpb247XG5cCisgIDAgb3RoZXJ3aXNlLlxuIik7IAorICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBGTl9SRUNVUlNFOgorCXByaW50ZigiXFxmcmVjdXJz ZShzMSlcblwKKyBzMSA9IG5hbWUgb2YgXFwmeCBvciBcXCZ4W10gdHlwZSB2YXJpYWJsZVxuIik7 CisgICAgICAgIHByaW50ZigiUmV0dXJucyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIHZh cmlhYmxlIHJlY3Vyc2l2ZWx5LlxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEZO X1NRVUVFWkU6CisgICAgICAgIHByaW50ZigiXFxmc3F1ZWV6ZShzKVxuXAorICBzID0gc3RyaW5n XG5cCisgICAgUmV0dXJucyBzdHJpbmcgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNw YWNlIHJlbW92ZWQsIFRhYnNcblwKKyAgICBjb252ZXJ0ZWQgdG8gU3BhY2VzLCBhbmQgbXVsdGlw bGUgc3BhY2VzIGNvbnZlcnRlZCB0byBzaW5nbGUgc3BhY2VzLlxuIik7CisgICAgICAgIGJyZWFr OworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgIGNhc2UgRk5fWExBVEU6CisgICAgICAgIHByaW50 ZigiXFxmY3Z0Y3NldChzLGNzZXQxLGNzZXQyKVxuXAorICBzID0gc3RyaW5nXG5cCisgICAgUmV0 dXJucyBzdHJpbmcgY29udmVydGVkIGZyb20gY2hhcmFjdGVyIHNldCBjc2V0MSB0byBjc2V0Miwg d2hlcmUgY3NldDFcblwKKyAgICBhbmQgY3NldDIgYXJlIG5hbWVzIG9mIEZpbGUgQ2hhcmFjdGVy LVNldHMgXAorKCdzZXQgZmlsZSBjaGFyID8nIGZvciBhIGxpc3QpLlxuIik7CisgICAgICAgIGJy ZWFrOworI2VuZGlmCS8qIE5PQ1NFVFMgKi8KKworICAgICAgY2FzZSBGTl9VTlBDVDoKKyAgICAg ICAgcHJpbnRmKCJcXGZkZWNvZGVoZXgoczFbLHMyXSlcblwKKyAgczEsIHMyID0gc3RyaW5nc1xu XAorICAgIERlY29kZXMgYSBzdHJpbmcgczEgdGhhdCBjb250YWlucyBwcmVmaXhlZCBoZXggYnl0 ZXMuICBzMiBpcyB0aGUgcHJlZml4O1xuXAorICAgIHRoZSBkZWZhdWx0IGlzICUlJSUuICBZb3Ug Y2FuIHNwZWNpZnkgYW55IG90aGVyIHByZWZpeCBvbmUgb3IgdHdvIGJ5dGVzXG5cCisgICAgbG9u Zy4gIElmIHRoZSBwcmVmaXggY29udGFpbnMgbGV0dGVycyAoc3VjaCBhcyAweCksIGNhc2UgaXMg aW5nb3JlZC5cblwKKyAgICBSZXR1cm5zIHN0cmluZyBzMSB3aXRoIGhleCBlc2NhcGVzIHJlcGxh Y2VkIGJ5IHRoZSBieXRlcyB0aGV5IFwKK3JlcHJlc2VudC5cbiIpOworICAgICAgICBicmVhazsK KworICAgICAgY2FzZSBGTl9TVFJJTkdUOgorICAgICAgICBwcmludGYoIlxcZnN0cmluZ3R5cGUo cylcblwKKyAgcyA9IHN0cmluZ1xuXAorICAgIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5n IHRoZSB0eXBlIG9mIGl0cyBzdHJpbmcgYXJndW1lbnQgczE6XG5cCisgICAgN0JJVCwgOEJJVCwg VVRGOCwgVEVYVCwgb3IgQklOQVJZLiAgVEVYVCBtZWFucyBzb21lIGtpbmQgb2YgdGV4dFxuXAor ICAgIG90aGVyIHRoYW4gN0JJVCwgOEJJVCwgb3IgVVRGOCAodGhpcyBwcm9iYWJseSB3aWxsIG5l dmVyIGFwcGVhcikuXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRk5fU1RSQ01Q OgorICAgICAgICBwcmludGYoIlxcZnN0cmNtcChzMSxzMlssY2FzZVssc3RhcnRbLGxlbmd0aF1d XSlcblwKKyAgczEsIHMyID0gc3RyaW5nc1xuXAorICBjYXNlLCBzdGFydCwgbGVuZ3RoID0gbnVt YmVycyBvciBhcml0aG1ldGljIGV4cHJlc3Npb25zLlxuXAorICAgIGNhc2UgPSAwIFtkZWZhdWx0 XSBtZWFucyB0byBkbyBhIGNhc2UtaW5kZXBlbmRlbnQgY29tcGFyaXNvbjtcblwKKyAgICBub256 ZXJvIGNhc2UgcmVxdWVzdHMgYSBjYXNlLXNlbnNpdGl2ZSBjb21wYXJpc29uLlxuXAorICAgIFRo ZSBvcHRpb25hbCBzdGFydCBhbmQgbGVuZ3RoIGFyZ3VtZW50cyBhcHBseSB0byBib3RoIHMxIGFu ZCBzMlxuXAorICAgIGFuZCBhbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHN1YnN0cmluZ3MgaWYgaXQg aXMgbm90IGRlc2lyZWQgdG8gY29tcGFyZVxuXAorICAgIHRoZSB3aG9sZSBzdHJpbmdzLiAgUmVz dWx0cyBmb3Igbm9uLUFTQ0lJIHN0cmluZ3MgYXJlIGltcGxlbnRhdGlvbi1cblwKKyAgICBhbmQg bG9jYWxlLWRlcGVuZGVudC5cblwKKyAgUmV0dXJucyBhIG51bWJlcjpcblwKKyAgICAtMTogczEg aXMgbGV4aWNhbGx5IGxlc3MgdGhhbiBzMjtcblwKKyAgICAgMDogczEgYW5kIHMyIGFyZSBsZXhp Y2FsbHkgZXF1YWw7XG5cCisgICAgIDI6IHMxIGlzIGxleGljYWxseSBncmVhdGVyIHRoYW4gczIu XG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50Zigi U29ycnksIGhlbHAgbm90IGF2YWlsYWJsZSBmb3IgXCIlc1wiXG4iLGNtZGJ1Zik7CisgICAgfQor ICAgcHJpbnRmKCJcbiIpOworICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9LVkVSQlMKKworLyogIEQgTyBIIEsgViBFIFIgQiAgLS0g IEdpdmUgaGVscCBmb3IgYSBLdmVyYiAgKi8KKworaW50Citkb2hrdmVyYih4eCkgaW50IHh4OyB7 CisgICAgaW50IHgsaSxmb3VuZCxidXR0b24sZXZlbnQ7CisKKyAgICBpZiAoeHggPT0gLTMpIHsK KyAgICAgICAgcHJpbnRmKCJcbiBUeXBlIFNIT1cgS1ZFUkJTIHRvIHNlZSBhIGxpc3Qgb2YgYXZh aWxhYmxlIEt2ZXJicy5cbiIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigKKyIg VHlwZSBIRUxQIEtWRVJCIDxuYW1lPiB0byBzZWUgdGhlIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBh IGdpdmVuIEt2ZXJiLlxuXG4iCisgICAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybigtOSk7 CisgICAgfQorICAgIGlmICh4eCA8IDApIHJldHVybih4eCk7CisgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeCk7CisgICAgc3dpdGNoICggeHggKSB7CisgICAgICAgIC8qIERFQyBW VCBrZXlib2FyZCBrZXkgZGVmaW5pdGlvbnMgKi8KKworICAgIGNhc2UgIEtfQ09NUE9TRSA6ICAg ICAgICAgICAgICAgICAgIC8qIENvbXBvc2Uga2V5ICovCisgICAgICAgIHByaW50ZigiXFxLY29t cG9zZSAgICAgICAgICAgQ29tcG9zZSBhbiBhY2NlbnRlZCBjaGFyYWN0ZXJcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlICBLX0NfVU5JMTYgOiAgICAgICAgICAgICAgICAgICAvKiBVQ1My IGtleSAqLworICAgICAgICBwcmludGYoIlxcS3VjczIgICAgICAgICAgICAgIEVudGVyIGEgVW5p Y29kZSBjaGFyYWN0ZXJcbiIpOworICAgICAgICBicmVhazsKKworLyogREVDIGFycm93IGtleXMg Ki8KKworICAgIGNhc2UgIEtfVVBBUlIgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBVcCBB cnJvdyBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEt1cGFyciAgICAgICAgIFRyYW5zbWl0IFRl cm1pbmFsIFVwIEFycm93IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19ETkFSUiAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIERvd24gQXJyb3cga2V5ICovCisg ICAgICAgIHByaW50ZigiXFxLZG5hcnIgICAgICAgICBUcmFuc21pdCBUZXJtaW5hbCBEb3duIEFy cm93IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19SVEFSUiAgICAg OiAgICAgICAgICAgICAgICAgLyogREVDIFJpZ2h0IEFycm93IGtleSAqLworICAgICAgICBwcmlu dGYoIlxcS3J0YXJyICAgICAgICAgVHJhbnNtaXQgVGVybWluYWwgUmlnaHQgQXJyb3cgc2VxdWVu Y2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0xGQVJSICAgICA6ICAgICAgICAg ICAgICAgICAvKiBERUMgTGVmdCBBcnJvdyBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtsZmFy ciAgICAgICAgIFRyYW5zbWl0IFRlcm1pbmFsIExlZnQgQXJyb3cgc2VxdWVuY2VcbiIpOworICAg ICAgICBicmVhazsKKworICAgIGNhc2UgIEtfUEYxICAgICAgIDogICAgICAgICAgICAgICAgIC8q IERFQyBQRjEga2V5ICovCisgICAgICAgIHByaW50ZigiXFxLcGYxLFxcS2dvbGQgICAgVHJhbnNt aXQgREVDIFBGMSBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfUEYy ICAgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBQRjIga2V5ICovCisgICAgICAgIHByaW50 ZigiXFxLcGYyICAgICAgICAgICBUcmFuc21pdCBERUMgUEYyIHNlcXVlbmNlXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19QRjMgICAgICAgOiAgICAgICAgICAgICAgICAgLyogREVD IFBGMyBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtwZjMgICAgICAgICAgIFRyYW5zbWl0IERF QyBQRjMgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX1BGNCAgICAg ICA6ICAgICAgICAgICAgICAgICAvKiBERUMgUEY0IGtleSAqLworICAgICAgICBwcmludGYoIlxc S3BmNCAgICAgICAgICAgVHJhbnNtaXQgREVDIFBGNCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJy ZWFrOworCisgICAgY2FzZSAgS19LUDAgICAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEtl eXBhZCAwICovCisgICAgICAgIHByaW50ZigiXFxLa3AwICAgICAgICAgICBUcmFuc21pdCBERUMg S2V5cGFkLTAgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0tQMSAg ICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgS2V5cGFkIDEgKi8KKyAgICAgICAgcHJpbnRm KCJcXEtrcDEgICAgICAgICAgIFRyYW5zbWl0IERFQyBLZXlwYWQtMSBzZXF1ZW5jZVxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS1AyICAgICAgIDogICAgICAgICAgICAgICAgIC8q IGV0YyAuLi4gdGhyb3VnaCA5ICovCisgICAgICAgIHByaW50ZigiXFxLa3AyICAgICAgICAgICBU cmFuc21pdCBERUMgS2V5cGFkLTIgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBj YXNlICBLX0tQMyAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLa3AzICAgICAgICAgICBUcmFu c21pdCBERUMgS2V5cGFkLTMgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl ICBLX0tQNCAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLa3A0ICAgICAgICAgICBUcmFuc21p dCBERUMgS2V5cGFkLTQgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBL X0tQNSAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLa3A1ICAgICAgICAgICBUcmFuc21pdCBE RUMgS2V5cGFkLTUgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0tQ NiAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLa3A2ICAgICAgICAgICBUcmFuc21pdCBERUMg S2V5cGFkLTYgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0tQNyAg ICAgICA6CisgICAgICAgIHByaW50ZigiXFxLa3A3ICAgICAgICAgICBUcmFuc21pdCBERUMgS2V5 cGFkLTcgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0tQOCAgICAg ICA6CisgICAgICAgIHByaW50ZigiXFxLa3A4ICAgICAgICAgICBUcmFuc21pdCBERUMgS2V5cGFk LTggc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0tQOSAgICAgICA6 CisgICAgICAgIHByaW50ZigiXFxLa3A5ICAgICAgICAgICBUcmFuc21pdCBERUMgS2V5cGFkLTkg c2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0tQQ09NQSAgICA6ICAg ICAgICAgICAgICAgICAvKiBERUMga2V5cGFkIGNvbW1hICovCisgICAgICAgIHByaW50ZigiXFxL a3Bjb21hICAgICAgICBUcmFuc21pdCBERUMgS2V5cGFkLUNvbW1hIHNlcXVlbmNlXG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19LUE1JTlVTICAgOiAgICAgICAgICAgICAgICAgLyog REVDIGtleXBhZCBtaW51cyAqLworICAgICAgICBwcmludGYoIlxcS2twbWludXMgICAgICAgVHJh bnNtaXQgREVDIEtleXBhZC1NaW51cyBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfS1BET1QgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBrZXlwYWQgcGVyaW9k ICovCisgICAgICAgIHByaW50ZigiXFxLa3Bkb3QgICAgICAgICBUcmFuc21pdCBERUMgS2V5cGFk LVBlcmlvZCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS1BFTlRF UiAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBrZXlwYWQgZW50ZXIgKi8KKyAgICAgICAgcHJp bnRmKCJcXEtrcGVudGVyICAgICAgIFRyYW5zbWl0IERFQyBLZXlwYWQtRW50ZXIgc2VxdWVuY2Vc biIpOworICAgICAgICBicmVhazsKKworLyogREVDIFRvcC1SYW5rIEYga2V5cyAqLworCisgICAg Y2FzZSAgS19ERUNGMSAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEYxIGtleSAqLworICAg ICAgICBwcmludGYoIlxcS2RlY2YxICAgICAgICAgVHJhbnNtaXQgREVDIEYxIHNlcXVlbmNlIGZv ciBQQyBrZXlib2FyZFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDRjIgICAg IDogICAgICAgICAgICAgICAgIC8qIERFQyBGMiBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtk ZWNmMiAgICAgICAgIFRyYW5zbWl0IERFQyBGMiBzZXF1ZW5jZSBmb3IgUEMga2V5Ym9hcmRcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ0YzICAgICA6ICAgICAgICAgICAgICAg ICAvKiBERUMgRjMga2V5ICovCisgICAgICAgIHByaW50ZigiXFxLZGVjZjMgICAgICAgICBUcmFu c21pdCBERUMgRjMgc2VxdWVuY2UgZm9yIFBDIGtleWJvYXJkXG4iKTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19ERUNGNCAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEY0IGtleSAq LworICAgICAgICBwcmludGYoIlxcS2RlY2Y0ICAgICAgICAgVHJhbnNtaXQgREVDIEY0IHNlcXVl bmNlIGZvciBQQyBrZXlib2FyZFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVD RjUgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBGNSBrZXkgKi8KKyAgICAgICAgcHJpbnRm KCJcXEtkZWNmNSAgICAgICAgIFRyYW5zbWl0IERFQyBGNSBzZXF1ZW5jZSBmb3IgUEMga2V5Ym9h cmRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ0hPTUU6ICAgICAgICAgICAg ICAgICAgICAvKiBERUMgSE9NRSBrZXkgKi8KKyAgICAgICBwcmludGYoIlxcS2RlY2hvbWUgICAg ICAgVHJhbnNtaXQgREVDIEhPTUUgc2VxdWVuY2UgZm9yIFBDIGtleWJvYXJkXG4iKTsKKyAgICAg ICBicmVhazsKKworICAgIGNhc2UgIEtfREVDRjYgICAgIDogICAgICAgICAgICAgICAgIC8qIERF QyBGNiBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtkZWNmNiAgICAgICAgIFRyYW5zbWl0IERF QyBGNiBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDRjcgICAg IDogICAgICAgICAgICAgICAgIC8qIGV0YywgdGhyb3VnaCBGMjAgKi8KKyAgICAgICAgcHJpbnRm KCJcXEtkZWNmNyAgICAgICAgIFRyYW5zbWl0IERFQyBGNyBzZXF1ZW5jZVxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfREVDRjggICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtkZWNm OCAgICAgICAgIFRyYW5zbWl0IERFQyBGOCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfREVDRjkgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtkZWNmOSAgICAgICAg IFRyYW5zbWl0IERFQyBGOSBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfREVDRjEwICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtkZWNmMTAgICAgICAgIFRyYW5zbWl0 IERFQyBGMTAgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ0Yx MSAgICA6CisgICAgICAgIHByaW50ZigiXFxLZGVjZjExICAgICAgICBUcmFuc21pdCBERUMgRjEx IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ERUNGMTIgICAgOgor ICAgICAgICBwcmludGYoIlxcS2RlY2YxMiAgICAgICAgVHJhbnNtaXQgREVDIEYxMiBzZXF1ZW5j ZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDRjEzICAgIDoKKyAgICAgICAg cHJpbnRmKCJcXEtkZWNmMTMgICAgICAgIFRyYW5zbWl0IERFQyBGMTMgc2VxdWVuY2VcbiIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ0YxNCAgICA6CisgICAgICAgIHByaW50Zigi XFxLZGVjZjE0ICAgICAgICBUcmFuc21pdCBERUMgRjE0IHNlcXVlbmNlXG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19ERUNIRUxQICAgOiAgICAgICAgICAgICAgICAgLyogREVDIEhl bHAga2V5ICovCisgICAgICAgIHByaW50ZigiXFxLZGVjZjE1LFxcS2RlY2hlbHAgIFRyYW5zbWl0 IERFQyBIRUxQIHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ERUNE TyAgICAgOiAgICAgICAgICAgICAgICAgLyogREVDIERvIGtleSAqLworICAgICAgICBwcmludGYo IlxcS2RlY2YxNixcXEtkZWNkbyAgICBUcmFuc21pdCBERUMgRE8gc2VxdWVuY2VcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ0YxNyAgICA6CisgICAgICAgIHByaW50ZigiXFxL ZGVjZjE3ICAgICAgICBUcmFuc21pdCBERUMgRjE3IHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19ERUNGMTggICAgOgorICAgICAgICBwcmludGYoIlxcS2RlY2YxOCAg ICAgICAgVHJhbnNtaXQgREVDIEYxOCBzZXF1ZW5jZVxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfREVDRjE5ICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtkZWNmMTkgICAgICAgIFRy YW5zbWl0IERFQyBGMTkgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBL X0RFQ0YyMCAgICA6CisgICAgICAgIHByaW50ZigiXFxLZGVjZjIwICAgICAgICBUcmFuc21pdCBE RUMgRjIwIHNlcXVlbmNlXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKy8qIERFQyBlZGl0aW5nIGtl eXMgKi8KKworICAgIGNhc2UgIEtfREVDRklORCAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBG aW5kIGtleSAqLworICAgICAgICBwcmludGYoIlxcS2RlY2ZpbmQgICAgICAgVHJhbnNtaXQgREVD IEZJTkQgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ0lOU0VS VCA6ICAgICAgICAgICAgICAgICAvKiBERUMgSW5zZXJ0IGtleSAqLworICAgICAgICBwcmludGYo IlxcS2RlY2luc2VydCAgICAgVHJhbnNtaXQgREVDIElOU0VSVCBIRVJFIHNlcXVlbmNlXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ERUNSRU1PVkUgOiAgICAgICAgICAgICAgICAg LyogREVDIFJlbW92ZSBrZXkgKi8KKyAgICAgICAgcHJpbnRmKCJcXEtkZWNyZW1vdmUgICAgIFRy YW5zbWl0IERFQyBSRU1PVkUgc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl ICBLX0RFQ1NFTEVDVCA6ICAgICAgICAgICAgICAgICAvKiBERUMgU2VsZWN0IGtleSAqLworICAg ICAgICBwcmludGYoIlxcS2RlY2ZzZWxlY3QgICAgVHJhbnNtaXQgREVDIFNFTEVDVCBzZXF1ZW5j ZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVDUFJFViAgIDogICAgICAgICAg ICAgICAgIC8qIERFQyBQcmV2aW91cyBTY3JlZW4ga2V5ICovCisgICAgICAgIHByaW50ZigiXFxL ZGVjcHJldiAgICAgICBUcmFuc21pdCBERUMgUFJFViBTQ1JFRU4gc2VxdWVuY2VcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlICBLX0RFQ05FWFQgICA6ICAgICAgICAgICAgICAgICAvKiBE RUMgTmV4dCBTY3JlZW4ga2V5ICovCisgICAgICAgIHByaW50ZigiXFxLZGVjbmV4dCAgICAgICBU cmFuc21pdCBERUMgTkVYVCBTQ1JFRU4gc2VxdWVuY2VcbiIpOworICAgICAgICBicmVhazsKKwor LyogREVDIFVzZXItRGVmaW5lZCBLZXlzICovCisKKyAgICBjYXNlICBLX1VES0YxICAgICA6ICAg ICAgICAgICAgICAgICAvKiBGMSAtIEY1IGFyZSBYVEVSTSBleHRlbnNpb25zICovCisgICAgICBw cmludGYoIlxcS3Vka2YxICAgICAgICAgVHJhbnNtaXQgWFRFUk0gRjEgVXNlciBEZWZpbmVkIEtl eSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1VES0YyICAgICA6Cisg ICAgICBwcmludGYoIlxcS3Vka2YyICAgICAgICAgVHJhbnNtaXQgWFRFUk0gRjIgVXNlciBEZWZp bmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1VES0YzICAg ICA6CisgICAgICBwcmludGYoIlxcS3Vka2YzICAgICAgICAgVHJhbnNtaXQgWFRFUk0gRjMgVXNl ciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1VE S0Y0ICAgICA6CisgICAgICBwcmludGYoIlxcS3Vka2Y0ICAgICAgICAgVHJhbnNtaXQgWFRFUk0g RjQgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1VES0Y1ICAgICA6CisgICAgICBwcmludGYoIlxcS3Vka2Y1ICAgICAgICAgVHJhbnNtaXQg WFRFUk0gRjUgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX1VES0Y2ICAgICA6ICAgICAgICAgICAgICAgICAvKiBERUMgVXNlciBEZWZpbmVk IEtleSBGNiAqLworICAgICAgcHJpbnRmKCJcXEt1ZGtmNiAgICAgICAgIFRyYW5zbWl0IERFQyBG NiBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfVURLRjcgICAgIDogICAgICAgICAgICAgICAgIC8qIERFQyBVc2VyIERlZmluZWQgS2V5IEY3 ICovCisgICAgICBwcmludGYoIlxcS3Vka2Y3ICAgICAgICAgVHJhbnNtaXQgREVDIEY3IFVzZXIg RGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19VREtG OCAgICAgOiAgICAgICAgICAgICAgICAgLyogZXRjIC4uLiB0aHJvdWdoIEYyMCAqLworICAgICAg cHJpbnRmKCJcXEt1ZGtmOCAgICAgICAgIFRyYW5zbWl0IERFQyBGOCBVc2VyIERlZmluZWQgS2V5 IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVURLRjkgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLdWRrZjkgICAgICAgICBUcmFuc21pdCBERUMgRjkgVXNlciBEZWZpbmVk IEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1VES0YxMCAgICA6 CisgICAgICBwcmludGYoIlxcS3Vka2YxMCAgICAgICAgVHJhbnNtaXQgREVDIEYxMCBVc2VyIERl ZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVURLRjEx ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjExICAgICAgICBUcmFuc21pdCBERUMgRjExIFVz ZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19V REtGMTIgICAgOgorICAgICAgcHJpbnRmKCJcXEt1ZGtmMTIgICAgICAgIFRyYW5zbWl0IERFQyBG MTIgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1VES0YxMyAgICA6CisgICAgICBwcmludGYoIlxcS3Vka2YxMyAgICAgICAgVHJhbnNtaXQg REVDIEYxMyBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfVURLRjE0ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjE0ICAgICAgICBUcmFu c21pdCBERUMgRjE0IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19VREtIRUxQICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS3Vka2hl bHAsXFxLdWRrZjE1ICBUcmFuc21pdCBERUMgSEVMUCBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNl XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVURLRE8gICAgIDoKKyAgICAgIHByaW50 ZigKKyAgICAgICJcXEt1ZGtkbyxcXEt1ZGtmMTYgICAgVHJhbnNtaXQgREVDIERPIFVzZXIgRGVm aW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19VREtGMTcg ICAgOgorICAgICAgcHJpbnRmKCJcXEt1ZGtmMTcgICAgICAgIFRyYW5zbWl0IERFQyBGMTcgVXNl ciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1VE S0YxOCAgICA6CisgICAgICBwcmludGYoIlxcS3Vka2YxOCAgICAgICAgVHJhbnNtaXQgREVDIEYx OCBVc2VyIERlZmluZWQgS2V5IHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfVURLRjE5ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdWRrZjE5ICAgICAgICBUcmFuc21pdCBE RUMgRjE5IFVzZXIgRGVmaW5lZCBLZXkgc2VxdWVuY2VcbiIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAgS19VREtGMjAgICAgOgorICAgICAgcHJpbnRmKCJcXEt1ZGtmMjAgICAgICAgIFRyYW5z bWl0IERFQyBGMjAgVXNlciBEZWZpbmVkIEtleSBzZXF1ZW5jZVxuIik7CisgICAgICBicmVhazsK KworLyogRW1hY3MgS2V5cyAqLworICAgIGNhc2UgIEtfRU1BQ1NfT1ZFUjoKKyAgICAgIHByaW50 ZigKKyAgICAgIlxcS2VtYWNzX292ZXJ3cml0ZSAgVHJhbnNtaXQgRU1BQ1MgT3ZlcndyaXRlIHRv Z2dsZSBjb21tYW5kIHNlcXVlbmNlXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBLZXJtaXQgc2Ny ZWVuLXNjcm9sbGluZyBrZXlzICovCisKKyAgICBjYXNlICBLX0ROT05FICAgICA6ICAgICAgICAg ICAgICAgICAvKiBTY3JlZW4gcm9sbGJhY2s6IGRvd24gb25lIGxpbmUgKi8KKyAgICAgIHByaW50 ZigiXFxLZG5vbmUgICAgICAgICBTY3JlZW4gcm9sbGJhY2s6IGRvd24gb25lIGxpbmVcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ETlNDTiAgICAgOiAgICAgICAgICAgICAgICAgLyog U2NyZWVuIHJvbGxiYWNrOiBkb3duIG9uZSBzY3JlZW4gKi8KKyAgICAgIHByaW50ZigiXFxLZG5z Y24gICAgICAgICBTY3JlZW4gcm9sbGJhY2s6IGRvd24gb25lIHNjcmVlblxuIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlICBLX1VQT05FICAgICA6ICAgICAgICAgICAgICAgICAvKiBTY3JlZW4g cm9sbGJhY2s6IFVwIG9uZSBsaW5lICovCisgICAgICBwcmludGYoIlxcS3Vwb25lICAgICAgICAg U2NyZWVuIHJvbGxiYWNrOiB1cCBvbmUgbGluZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1VQU0NOICAgICA6ICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gcm9sbGJhY2s6IFVwIG9u ZSBzY3JlZW4gKi8KKyAgICAgIHByaW50ZigiXFxLdXBzY24gICAgICAgICBTY3JlZW4gcm9sbGJh Y2s6IHVwIG9uZSBzY3JlZW5cbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19FTkRTQ04g ICAgOiAgICAgICAgICAgICAgICAgLyogU2NyZWVuIHJvbGxiYWNrOiBsYXRlc3Qgc2NyZWVuICov CisgICAgICBwcmludGYoIlxcS2VuZHNjbiAgICAgICAgU2NyZWVuIHJvbGxiYWNrOiBsYXRlc3Qg c2NyZWVuXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSE9NU0NOICAgIDogICAgICAg ICAgICAgICAgIC8qIFNjcmVlbiByb2xsYmFjazogb2xkZXN0IHNjcmVlbiAqLworICAgICAgcHJp bnRmKCJcXEtob21zY24gICAgICAgIFNjcmVlbiByb2xsYmFjazogb2xkZXN0IHNjcmVlblxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0dPX0JPT0sgICA6ICAgICAgICAgLyogU2Nyb2xs IHRvIGJvb2ttYXJrICovCisgICAgICBwcmludGYoIlxcS2dvYm9vayAgICAgICAgU2NyZWVuIHJv bGxiYWNrOiBnbyB0byBib29rbWFya1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0dP VE8gICAgICA6ICAgICAgICAgLyogU2Nyb2xsIHRvIGxpbmUgbnVtYmVyICovCisgICAgICBwcmlu dGYoIlxcS2dvdG8gICAgICAgICAgU2NyZWVuIHJvbGxiYWNrOiBnbyB0byBsaW5lIG51bWJlclxu Iik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgIEtfTEZPTkUgICAgIDogICAgICAgICAgICAg ICAgIC8qIEhvcml6b250YWwgU2Nyb2xsOiBMZWZ0IG9uZSBjZWxsICovCisgICAgICBwcmludGYo IlxcS2xmb25lICAgICAgICAgSG9yaXpvbnRhbCBTY3JvbGw6IExlZnQgb25lIGNvbHVtblxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0xGUEFHRSAgICA6ICAgICAgICAgICAgICAgICAv KiBIb3Jpem9udGFsIFNjcm9sbDogTGVmdCBvbmUgcGFnZSAqLworICAgICAgcHJpbnRmKCJcXEts ZnBhZ2UgICAgICAgIEhvcml6b250YWwgU2Nyb2xsOiBMZWZ0IGVpZ2h0IGNvbHVtbnNcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19MRkFMTCAgICAgOgorICAgICAgcHJpbnRmKCJcXEts ZmFsbCAgICAgICAgIEhvcml6b250YWwgU2Nyb2xsOiBMZWZ0IHRvIG1hcmdpblxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX1JUT05FICAgICA6ICAgICAgICAgICAgICAgICAvKiBIb3Jp em9udGFsIFNjcm9sbDogUmlnaHQgb25lIGNlbGwgKi8KKyAgICAgIHByaW50ZigiXFxLcnRvbmUg ICAgICAgICBIb3Jpem9udGFsIFNjcm9sbDogUmlnaHQgb25lIGNvbHVtblxuIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlICBLX1JUUEFHRSAgICA6ICAgICAgICAgICAgICAgICAvKiBIb3Jpem9u dGFsIFNjcm9sbDogUmlnaHQgb25lIHBhZ2UgKi8KKyAgICAgIHByaW50ZigiXFxLcnRwYWdlICAg ICAgICBIb3Jpem9udGFsIFNjcm9sbDogUmlnaHQgZWlnaHQgY29sdW1uc1xuIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlICBLX1JUQUxMICAgICA6CisgICAgICBwcmludGYoIlxcS3J0YWxsICAg ICAgICAgSG9yaXpvbnRhbCBTY3JvbGw6IFJpZ2h0IHRvIG1hcmdpblxuIik7CisgICAgICBicmVh azsKKworLyogS2V5Ym9hcmQgbGFuZ3VhZ2Ugc3dpdGNoaW5nIHZlcmJzICovCisKKyAgICBjYXNl ICBLX0tCX0VORyAgICA6ICAgICAgICAgICAgICAgICAvKiBFbmdsaXNoIGtleWJvYXJkIG1vZGUg Ki8KKyAgICAgIHByaW50ZigiXFxLa2JlbmdsaXNoICAgICBTd2l0Y2ggdG8gTm9ybWFsIChFbmds aXNoKSBrZXlib2FyZCBtb2RlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS0JfSEVC ICAgIDogICAgICAgICAgICAgICAgIC8qIEhlYnJldyBrZXlib2FyZCBtb2RlICovCisgICAgICBw cmludGYoIlxcS2tiaGVicmV3ICAgICAgU3dpdGNoIHRvIEhlYnJldyBrZXlib2FyZCBtb2RlXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS0JfUlVTICAgIDogICAgICAgICAgICAgICAg IC8qIFJ1c3NpYW4ga2V5Ym9hcmQgbW9kZSAqLworICAgICAgcHJpbnRmKCJcXEtrYnJ1c3NpYW4g ICAgIFN3aXRjaCB0byBSdXNzaWFuIGtleWJvYXJkIG1vZGVcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19LQl9FTUEgICAgOiAgICAgICAgICAgICAgICAgLyogRW1hY3Mga2V5Ym9hcmQg bW9kZSAqLworICAgICAgcHJpbnRmKCJcXEtrYmVtYWNzICAgICAgIFN3aXRjaCB0byBFTUFDUyBr ZXlib2FyZCBtb2RlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfS0JfV1AgICAgIDog ICAgICAgICAgICAgICAgIC8qIFdvcmQgUGVyZmVjdCA1LjEgbW9kZSAqLworICAgICAgcHJpbnRm KCJcXEtrYndwICAgICAgICAgIFN3aXRjaCB0byBXb3JkIFBlcmZlY3QgNS4xIGtleWJvYXJkIG1v ZGVcbiIpOworICAgICAgYnJlYWs7CisKKy8qIE1hcmsgTW9kZSBhY3Rpb25zICovCisKKyAgICBj YXNlICBLX01BUktfU1RBUlQgIDogICAgICAgLyogRW50ZXIgTWFyayBNb2RlL1N0YXJ0IG1hcmtp bmcgKi8KKyAgICAgIHByaW50ZigiXFxLbWFya3N0YXJ0ICAgICBNYXJrIE1vZGU6IEVudGVyIG1v ZGUgb3IgU3RhcnQgbWFya2luZ1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX01BUktf Q0FOQ0VMIDogICAgICAgLyogRXhpdCBNYXJrIE1vZGUgLSBEbyBOb3RoaW5nICovCisgICAgICBw cmludGYoIlxcS21hcmtjYW5jZWwgICAgTWFyayBNb2RlOiBDYW5jZWwgbW9kZVxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX01BUktfQ09QWUNMSVA6ICAgICAgLyogRXhpdCBNYXJrIE1v ZGUgLSBDb3B5IGRhdGEgdG8gY2xpcGJvYXJkICovCisgICAgICBwcmludGYoIlxcS21hcmtjb3B5 Y2xpcCAgTWFyayBNb2RlOiBDb3B5IG1hcmtlZCB0ZXh0IHRvIGNsaXBib2FyZFxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX01BUktfQ09QWUhPU1Q6ICAgICAgLyogRXhpdCBNYXJrIE1v ZGUgLSBDb3B5IGRhdGEgdG8gaG9zdCAgICovCisgICAgICBwcmludGYoIlxcS21hcmtjb3B5aG9z dCAgTWFyayBNb2RlOiBDb3B5IG1hcmtlZCB0ZXh0IHRvIGhvc3RcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19NQVJLX1NFTEVDVCA6ICAgICAgIC8qIEV4aXQgTWFyayBNb2RlIC0gU2Vs ZWN0ICovCisgICAgICBwcmludGYoCisgICAgICAiXFxLbWFya3NlbGVjdCAgICBNYXJrIE1vZGU6 IFBsYWNlIG1hcmtlZCB0ZXh0IGludG8gXFx2KHNlbGVjdClcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19CQUNLU1JDSCAgICA6ICAgICAgICAgICAgLyogU2VhcmNoIEJhY2t3YXJkcyBm b3IgdGV4dCAqLworICAgICAgcHJpbnRmKCJcXEtiYWNrc2VhcmNoICAgIFNlYXJjaDogQmVnaW4g YmFja3dhcmQgc2VhcmNoIGZvciB0ZXh0XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf RldEU1JDSCAgICAgOiAgICAgICAgICAgIC8qIFNlYXJjaCBGb3J3YXJkcyBmb3IgdGV4dCAqLwor ICAgICAgcHJpbnRmKCJcXEtmd2RzZWFyY2ggICAgIFNlYXJjaDogQmVnaW4gZm9yd2FyZCBzZWFy Y2ggZm9yIHRleHRcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19CQUNLTkVYVCAgICA6 ICAgICAvKiBTZWFyY2ggQmFja3dhcmRzIGZvciBuZXh0IGluc3RhbmNlIG9mIHRleHQgKi8KKyAg ICAgIHByaW50ZigKKyAgICAgICJcXEtiYWNrbmV4dCAgICAgIFNlYXJjaDogRmluZCBuZXh0IGlu c3RhbmNlIG9mIHRleHQgYmFja3dhcmRzXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf RldETkVYVCAgICAgOiAgICAgIC8qIFNlYXJjaCBGb3J3YXJkcyBmb3IgbmV4dCBpbnN0YW5jZSBv ZiB0ZXh0ICovCisgICAgICBwcmludGYoIlxcS2Z3ZG5leHQgICAgICAgU2VhcmNoOiBGaW5kIG5l eHQgaW5zdGFuY2Ugb2YgdGV4dCBmb3J3YXJkc1xuIik7CisgICAgICBicmVhazsKKworLyogTWlz Y2VsbGFuZW91cyBLZXJtaXQgYWN0aW9ucyAqLworCisgICAgY2FzZSAgS19FWElUICAgICAgICA6 ICAgICAgICAgICAgICAgLyogUmV0dXJuIHRvIGNvbW1hbmQgcGFyc2VyICovCisgICAgICBwcmlu dGYoIlxcS2V4aXQgICAgICAgICAgVG9nZ2xlIGJldHdlZW4gQ09NTUFORCBhbmQgQ09OTkVDVCBt b2Rlc1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0JSRUFLICAgICAgIDogICAgICAg ICAgICAgICAvKiBTZW5kIGEgQlJFQUsgKi8KKyAgICAgIHByaW50ZigiXFxLYnJlYWsgICAgICAg ICBUcmFuc21pdCBCUkVBSyBzaWduYWwgdG8gaG9zdFxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX1JFU0VUICAgICAgIDogICAgICAgICAgICAgICAvKiBSZXNldCBlbXVsYXRvciAqLwor ICAgICAgcHJpbnRmKCJcXEtyZXNldCAgICAgICAgIFJlc2V0IFRlcm1pbmFsIEVtdWxhdG9yIHRv IHVzZXIgZGVmYXVsdHNcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ET1MgICAgICAg ICA6ICAgICAgICAgICAgICAgLyogUHVzaCB0byBET1MgKGkuZS4gT1MvMikgKi8KKyAgICAgIHBy aW50ZigiXFxLZG9zLFxcS29zMiAgICAgUHVzaCB0byBDb21tYW5kIFNoZWxsXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfSEFOR1VQICAgICAgOiAgICAgICAgICAgICAgIC8qIEhhbmcg dXAgdGhlIGNvbm5lY3Rpb24gKi8KKyAgICAgIHByaW50ZigiXFxLaGFuZ3VwICAgICAgICBIYW5n dXAgdGhlIGFjdGl2ZSBjb25uZWN0aW9uXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf RFVNUCAgICAgICAgOiAgICAgICAgICAgICAgIC8qIER1bXAvUHJpbnQgY3VycmVudCBzY3JlZW4g Ki8KKyAgICAgIHByaW50ZigKKyAgICAgIlxcS2R1bXAgICAgICAgICAgRHVtcC9jb3B5IGN1cnJl bnQgc2NyZWVuIHRvIFNFVCBQUklOVEVSIGRldmljZS9maWxlXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfTEJSRUFLICAgICAgOiAgICAgICAgICAgICAgIC8qIFNlbmQgYSBMb25nIEJS RUFLICovCisgICAgICBwcmludGYoIlxcS2xicmVhayAgICAgICAgVHJhbnNtaXQgTE9ORyBCUkVB SyBzaWduYWwgdG8gaG9zdFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX05VTEwgICAg ICAgIDogICAgICAgICAgICAgICAvKiBTZW5kIGEgTlVMICovCisgICAgICBwcmludGYoIlxcS251 bGwgICAgICAgICAgVHJhbnNtaXQgTlVMTCAoJ1wwJykgY2hhcmFjdGVyIHRvIGhvc3RcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19IRUxQICAgICAgICA6ICAgICAgICAgICAgICAgLyog UG9wLXVwIGhlbHAgKi8KKyAgICAgIHByaW50ZigiXFxLaGVscCAgICAgICAgICBSYWlzZSBQb3At VXAgaGVscCBkaXNwbGF5XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSE9MRFNDUk4g ICAgOiAgICAgICAgICAgICAgIC8qIEhvbGQgc2NyZWVuICovCisgICAgICBwcmludGYoIlxcS2hv bGRzY3JuICAgICAgUGF1c2UgZGF0YSBpbnB1dCBkdXJpbmcgQ09OTkVDVCBtb2RlXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfSUdOT1JFICAgICAgOiAgICAgICAgICAgICAgIC8qIEln bm9yZSB0aGlzIGtleSwgZG9uJ3QgZXZlbiBiZWVwICovCisgICAgICBwcmludGYoIlxcS2lnbm9y ZSAgICAgICAgSWdub3JlIGtleVxuIik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgIEtfTE9H T0ZGICAgICAgOiAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIHNlc3Npb24gbG9nZ2luZyAqLwor ICAgICAgcHJpbnRmKCJcXEtsb2dvZmYgICAgICAgIFR1cm4gb2ZmIHNlc3Npb24gbG9nZ2luZyAo c2VlIFxcS3Nlc3Npb24pXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfTE9HT04gICAg ICAgOiAgICAgICAgICAgICAgIC8qIFR1cm4gb24gc2Vzc2lvbiBsb2dnaW5nICovCisgICAgICBw cmludGYoIlxcS2xvZ29uICAgICAgICAgVHVybiBvbiBzZXNzaW9uIGxvZ2dpbmcgKHNlZSBcXEtz ZXNzaW9uKVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEtfU0VTU0lPTjoKKyAgICAgIHBy aW50ZigKKyAgICAgICAgICJcXEtzZXNzaW9uICAgICAgIFRvZ2dsZSBvbi9vZmYgc2Vzc2lvbiBs b2dnaW5nIHRvICdzZXNzaW9uLmxvZydcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0FV VE9ET1dOOgorICAgICAgcHJpbnRmKCJcXEthdXRvZG93biAgICAgIFRvZ2dsZSBvbi9vZmYgdGVy bWluYWwgYXV0b2Rvd25sb2FkLlxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEtfQllURVNJ WkU6CisgICAgICBwcmludGYoCisgICAgICAgICJcXEtieXRlc2l6ZSAgICAgIFRvZ2dsZSB0ZXJt aW5hbCBieXRlc2l6ZSBiZXR3ZWVuIDcgYW5kIDggYml0cy5cbiIpOworICAgICAgYnJlYWs7CisK KyNpZmRlZiBDT01NRU5UCisgICAgY2FzZSBNT0RFTElORToKKyAgICBjYXNlICBLX05FVEhPTEQg ICAgIDogICAgICAgICAgICAgICAvKiBQdXQgbmV0d29yayBjb25uZWN0aW9uIG9uIGhvbGQgKi8K KyAgICBjYXNlICBLX05FWFRTRVNTICAgIDogICAgICAgICAgICAgICAvKiBUb2dnbGUgdG8gbmV4 dCBuZXR3b3JrIHNlc3Npb24gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBjYXNlIEtf Q1VSU09SX1VSTDoKKyAgICAgICAgcHJpbnRmKAorICAgICAiXFxLdXJsICAgICAgICAgICBUcmVh dCB0ZXh0IHVuZGVyIGN1cnNvciBwb3NpdGlvbiBhcyBhIFVSTFxuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgIEtfU1RBVFVTICAgICAgOiAgICAgICAgICAgICAgIC8qIFNob3cgc3RhdHVz ICovCisgICAgICBwcmludGYoCisgICAgICJcXEtzdGF0dXMgICAgICAgIFRvZ2dsZSBzdGF0dXNs aW5lIChOb25lLCBJbmRpY2F0b3IsIEhvc3QgV3JpdGVhYmxlKVxuIik7CisgICAgICBicmVhazsK KyAgICBjYXNlICBLX1RFUk1UWVBFICAgIDogICAgICAgICAgICAgICAvKiBUb2dnbGUgdGVybSB0 eXBlOiB0ZXh0L2dyYXBoaWNzICovCisgICAgICBwcmludGYoIlxcS3Rlcm10eXBlICAgICAgVG9n Z2xlIFRlcm1pbmFsIFR5cGVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19QUlRDVFJM ICAgICA6ICAgICAgICAgICAgICAgLyogUHJpbnQgQ29udHJvbGxlciBtb2RlICovCisgICAgICBw cmludGYoIlxcS3BydGN0cmwgICAgICAgVG9nZ2xlIEN0cmwtUHJpbnQgKHRyYW5zcGFyZW50KSBt b2RlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfUFJJTlRGRiAgICAgOiAgICAgICAg ICAgICAgIC8qIFByaW50IGZvcm1mZWVkICovCisgICAgICBwcmludGYoIlxcS3ByaW50ZmYgICAg ICAgT3V0cHV0IEZvcm0gRmVlZCB0byBTRVQgUFJJTlRFUiBkZXZpY2VcbiIpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19GTElQU0NOICAgICA6ICAgICAgICAgICAgICAgLyogRmxpcCBzY3Jl ZW4gKi8KKyAgICAgIHByaW50ZigiXFxLZmxpcHNjbiAgICAgICBSZXZlcnNlIGZvcmVncm91bmQg YW5kIGJhY2tncm91bmQgY29sb3JzXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREVC VUcgICAgICAgOiAgICAgICAgICAgICAgIC8qIFRvZ2dsZSBkZWJ1Z2dpbmcgKi8KKyAgICAgIHBy aW50ZigiXFxLZGVidWcgICAgICAgICBUb2dnbGUgVGVybWluYWwgRGVidWcgbW9kZVxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1ROX1NBSyAgICAgIDogICAgICAgICAgICAgICAvKiBU RUxORVQgU2VjdXJlIEFjY2VzcyBLZXkgKi8KKyAgICAgIHByaW50ZigiXFxLdG5fc2FrICAgICAg ICBURUxORVQ6IElCTSBTZWN1cmUgQWNjZXNzIEtleVxuIik7CisgICAgICBwcmludGYoIiAgICAg ICAgICAgICAgICBVc2VkIHRvIHJlcXVlc3QgYSBUcnVzdGVkIFNoZWxsIHdpdGggQUlYXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVE5fQU8gICAgICAgOiAgICAgICAgICAgICAgIC8q IFRFTE5FVCBDYW5jZWwgT3V0cHV0ICovCisgICAgICBwcmludGYoIlxcS3RuX2FvICAgICAgICAg VEVMTkVUOiBUcmFuc21pdCBDYW5jZWwtT3V0cHV0IHJlcXVlc3RcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19UTl9BWVQgICAgICA6ICAgICAgICAgICAgICAgLyogVEVMTkVUIEFyZSBZ b3UgVGhlcmUgKi8KKyAgICAgIHByaW50ZigiXFxLdG5heXQgICAgICAgICBURUxORVQ6IFRyYW5z bWl0IEFyZSBZb3UgVGhlcmU/IHJlcXVlc3RcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19UTl9FQyAgICAgICA6ICAgICAgICAgICAgICAgLyogVEVMTkVUIEVyYXNlIENoYXJhY3RlciAq LworICAgICAgcHJpbnRmKCJcXEt0bl9lYyAgICAgICAgIFRFTE5FVDogVHJhbnNtaXQgRXJhc2Ug Q2hhcmFjdGVyIHJlcXVlc3RcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UTl9FTCAg ICAgICA6ICAgICAgICAgICAgICAgLyogVEVMTkVUIEVyYXNlIExpbmUgKi8KKyAgICAgIHByaW50 ZigiXFxLdG5fZWwgICAgICAgICBURUxORVQ6IFRyYW5zbWl0IEVyYXNlIExpbmUgcmVxdWVzdFxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1ROX0dBICAgICAgIDogICAgICAgICAgICAg ICAvKiBURUxORVQgR28gQWhlYWQgKi8KKyAgICAgIHByaW50ZigiXFxLdG5fZ2EgICAgICAgICBU RUxORVQ6IFRyYW5zbWl0IEdvIEFoZWFkIHJlcXVlc3RcbiIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAgS19UTl9JUCAgICAgICA6ICAgICAgICAgICAgICAgLyogVEVMTkVUIEludGVycnVwdCBQ cm9jZXNzICovCisgICAgICBwcmludGYoIlxcS3RuX2lwICAgICAgICAgVEVMTkVUOiBUcmFuc21p dCBJbnRlcnJ1cHQgUHJvY2VzcyByZXF1ZXN0XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfVE5fTE9HT1VUICAgOiAgICAgICAgICAgICAgIC8qIFRFTE5FVCBMb2dvdXQgKi8KKyAgICAg IHByaW50ZigiXFxLdG5fbG9nb3V0ICAgICBURUxORVQ6IFRyYW5zbWl0IERvIExvZ291dCBPcHRp b25cbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UTl9OQVdTICAgOiAgICAgICAgICAg ICAgICAgLyogVEVMTkVUIE5BV1MgKi8KKyAgICAgIHByaW50ZigKKyAgICAgICAgIlxcS3RuX25h d3MgICAgICAgVEVMTkVUOiBUcmFuc21pdCBXaW5kb3cgU2l6ZSBpZiBOQVdTIGlzIGFjdGl2ZVxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1BBU1RFICAgICAgIDogICAgICAgICAgICAg ICAvKiBQYXN0ZSBkYXRhIGZyb20gY2xpcGJvYXJkICovCisgICAgICBwcmludGYoIlxcS3Bhc3Rl ICAgICAgICAgUGFzdGUgZGF0YSBmcm9tIGNsaXBib2FyZCB0byBob3N0XG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfQ0xSU0NSTiAgICAgOiAgICAgICAgICAgICAgIC8qIENsZWFyIFRl cm1pbmFsIFNjcmVlbiAqLworICAgICAgcHJpbnRmKCJcXEtjbGVhcnNjcmVlbiAgIENsZWFyIHRo ZSBUZXJtaW5hbCBzY3JlZW5cbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19QUlRBVVRP ICAgICA6ICAgICAgICAgICAgICAgLyogUHJpbnQgQXV0byBtb2RlICovCisgICAgICBwcmludGYo IlxcS3BydGF1dG8gICAgICAgVG9nZ2xlIEF1dG8tUHJpbnQgbW9kZVxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX1BSVENPUFkgICAgIDogICAgICAgICAgICAgICAvKiBQcmludCBDb3B5 IG1vZGUgKi8KKyAgICAgIHByaW50ZigiXFxLcHJ0Y29weSAgICAgICBUb2dnbGUgQ29weS1Qcmlu dCBtb2RlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TV0VSQkFDSyAgOiAgICAg ICAgICAgICAgIC8qIFRyYW5zbWl0IEFuc3dlcmJhY2sgU3RyaW5nICovCisgICAgICBwcmludGYo IlxcS2Fuc3dlcmJhY2sgICAgVHJhbnNtaXQgYW5zd2VyYmFjayBzdHJpbmcgdG8gaG9zdFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1NFVF9CT09LICAgIDogICAgICAgICAgICAgICAv KiBTZXQgQm9va21hcmsgKi8KKyAgICAgIHByaW50ZigiXFxLc2V0Ym9vayAgICAgICBTZXQgYm9v a21hcmtcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19RVUlUICAgICAgICA6ICAgICAg ICAgICAgICAgLyogUXVpdCBLZXJtaXQgKi8KKyAgICAgIHByaW50ZigiXFxLcXVpdCAgICAgICAg ICBIYW5ndXAgY29ubmVjdGlvbiBhbmQgcXVpdCBrZXJtaXRcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19LRVlDTElDSyAgICA6ICAgICAgICAgICAgICAgLyogVG9nZ2xlIEtleWNsaWNr ICovCisgICAgICBwcmludGYoIlxcS2tleWNsaWNrICAgICAgVG9nZ2xlIEtleWNsaWNrIG1vZGVc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19MT0dERUJVRyAgICA6ICAgICAgICAgICAg ICAgLyogVG9nZ2xlIERlYnVnIExvZyBGaWxlICovCisgICAgICBwcmludGYoIlxcS2xvZ2RlYnVn ICAgICAgVG9nZ2xlIERlYnVnIExvZ2dpbmcgdG8gRmlsZVxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX0ZOS0VZUyAgICAgIDogICAgICAgICAgICAgICAvKiBTaG93IEZ1bmN0aW9uIEtl eSBMYWJlbHMgKi8KKyAgICAgIHByaW50ZigiXFxLZm5rZXlzICAgICAgICBEaXNwbGF5IEZ1bmN0 aW9uIEtleSBMYWJlbHNcbiIpOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBPUzJNT1VTRQorLyog TW91c2Ugb25seSBLdmVyYnMgKi8KKworICAgIGNhc2UgIEtfTU9VU0VfQ1VSUE9TIDoKKyAgICAg IHByaW50ZigiXFxLbW91c2VjdXJwb3MgICBNb3VzZTogTW92ZSBob3N0IGN1cnNvciB0byBwb3Np dGlvblxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX01PVVNFX01BUksgICA6CisgICAg ICBwcmludGYoCisgICAgICJcXEttb3VzZW1hcmsgICAgIE1vdXNlOiBNYXJrIHRleHQgZm9yIHNl bGVjdGlvbiAoZHJhZyBldmVudCBvbmx5KVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBL X01PVVNFX1VSTCAgICA6CisgICAgICBwcmludGYoIlxcS21vdXNldXJsICAgICAgTW91c2U6IFN0 YXJ0IGJyb3dzZXIgd2l0aCBzZWxlY3RlZCBVUkxcbiIpOworICAgICAgYnJlYWs7CisjZW5kaWYg LyogT1MyTU9VU0UgKi8KKworLyogQU5TSSBGdW5jdGlvbiBLZXkgZGVmaW5pdGlvbnMgKi8KKyAg ICBjYXNlICBLX0FOU0lGMDEgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjAxICAg ICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEYxIFxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX0FOU0lGMDIgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjAyICAgICAg IFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEYyIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX0FOU0lGMDMgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjAzICAgICAgIFRy YW5zbWl0IFNDT0FOU0kvQVQzODY6IEYzIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBL X0FOU0lGMDQgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjA0ICAgICAgIFRyYW5z bWl0IFNDT0FOU0kvQVQzODY6IEY0IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FO U0lGMDUgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjA1ICAgICAgIFRyYW5zbWl0 IFNDT0FOU0kvQVQzODY6IEY1IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lG MDYgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjA2ICAgICAgIFRyYW5zbWl0IFND T0FOU0kvQVQzODY6IEY2IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMDcg ICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjA3ICAgICAgIFRyYW5zbWl0IFNDT0FO U0kvQVQzODY6IEY3IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMDggICAg ICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjA4ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kv QVQzODY6IEY4IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMDkgICAgICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjA5ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQz ODY6IEY5IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTAgICAgICAgICAg OgorICAgICAgcHJpbnRmKCJcXEthbnNpZjEwICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6 IEYxMFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTEgICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEthbnNpZjExICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEYx MVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTIgICAgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEthbnNpZjEyICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEYxMlxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTMgICAgICAgICAgOgorICAgICAg cHJpbnRmKCJcXEthbnNpZjEzICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFNoaWZ0LUYx IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTQgICAgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEthbnNpZjE0ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFNoaWZ0 LUYyIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTUgICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEthbnNpZjE1ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFNo aWZ0LUYzIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTYgICAgICAgICAg OgorICAgICAgcHJpbnRmKCJcXEthbnNpZjE2ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6 IFNoaWZ0LUY0IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTcgICAgICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjE3ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQz ODY6IFNoaWZ0LUY1IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTggICAg ICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjE4ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kv QVQzODY6IFNoaWZ0LUY2IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMTkg ICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjE5ICAgICAgIFRyYW5zbWl0IFNDT0FO U0kvQVQzODY6IFNoaWZ0LUY3IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lG MjAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjIwICAgICAgIFRyYW5zbWl0IFND T0FOU0kvQVQzODY6IFNoaWZ0LUY4IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FO U0lGMjEgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjIxICAgICAgIFRyYW5zbWl0 IFNDT0FOU0kvQVQzODY6IFNoaWZ0LUY5IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBL X0FOU0lGMjIgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjIyICAgICAgIFRyYW5z bWl0IFNDT0FOU0kvQVQzODY6IFNoaWZ0LUYxMFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX0FOU0lGMjMgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjIzICAgICAgIFRy YW5zbWl0IFNDT0FOU0kvQVQzODY6IFNoaWZ0LUYxMVxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX0FOU0lGMjQgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjI0ICAgICAg IFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFNoaWZ0LUYxMlxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX0FOU0lGMjUgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjI1ICAg ICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjEgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfQU5TSUYyNiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMjYg ICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GMiBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19BTlNJRjI3ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWYy NyAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUYzIFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0FOU0lGMjggICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNp ZjI4ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjQgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfQU5TSUYyOSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fu c2lmMjkgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GNSBcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjMwICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL YW5zaWYzMCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUY2IFxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMzEgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJc XEthbnNpZjMxICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjcgXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYzMiAgICAgICAgICA6CisgICAgICBwcmludGYo IlxcS2Fuc2lmMzIgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GOCBcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjMzICAgICAgICAgIDoKKyAgICAgIHByaW50 ZigiXFxLYW5zaWYzMyAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUY5IFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMzQgICAgICAgICAgOgorICAgICAgcHJp bnRmKCJcXEthbnNpZjM0ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtRjEwXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYzNSAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS2Fuc2lmMzUgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1GMTFc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjM2ICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLYW5zaWYzNiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLUYx MlxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGMzcgICAgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEthbnNpZjM3ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwt U2hpZnQtRjEgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUYzOCAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmMzggICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4 NjogQ3RybC1TaGlmdC1GMiBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjM5 ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWYzOSAgICAgICBUcmFuc21pdCBTQ09B TlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUYzIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBL X0FOU0lGNDAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjQwICAgICAgIFRyYW5z bWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjQgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfQU5TSUY0MSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmNDEgICAg ICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GNSBcbiIpOworICAgICAgYnJl YWs7CisgICAgY2FzZSAgS19BTlNJRjQyICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5z aWY0MiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUY2IFxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNDMgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEthbnNpZjQzICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEN0cmwtU2hpZnQtRjcg XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY0NCAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS2Fuc2lmNDQgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogQ3RybC1T aGlmdC1GOCBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjQ1ICAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWY0NSAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2 OiBDdHJsLVNoaWZ0LUY5IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNDYg ICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNpZjQ2ICAgICAgIFRyYW5zbWl0IFNDT0FO U0kvQVQzODY6IEN0cmwtU2hpZnQtRjEwXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf QU5TSUY0NyAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Fuc2lmNDcgICAgICAgVHJhbnNt aXQgU0NPQU5TSS9BVDM4NjogQ3RybC1TaGlmdC1GMTFcbiIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAgS19BTlNJRjQ4ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWY0OCAgICAg ICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LUYxMlxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0FOU0lGNDkgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNp ZjQ5ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IEhvbWVcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19BTlNJRjUwICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWY1 MCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBVcCBBcnJvd1xuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0FOU0lGNTEgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEthbnNp ZjUxICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IFBnVXBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19BTlNJRjUyICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLYW5zaWY1 MiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBDdHJsLVNoaWZ0LVN1YnRyYWN0XG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY1MyAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS2Fuc2lmNTMgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogTGVmdCBBcnJvd1xu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNTQgICAgICAgICAgOgorICAgICAg cHJpbnRmKCJcXEthbnNpZjU0ICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IENsZWFyXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY1NSAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS2Fuc2lmNTUgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4NjogUmlnaHQgQXJy b3dcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjU2ICAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLYW5zaWY1NiAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBTaGlm dC1BZGRcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjU3ICAgICAgICAgIDoK KyAgICAgIHByaW50ZigiXFxLYW5zaWY1NyAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBF bmRcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19BTlNJRjU4ICAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLYW5zaWY1OCAgICAgICBUcmFuc21pdCBTQ09BTlNJL0FUMzg2OiBEb3du IEFycm93XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfQU5TSUY1OSAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS2Fuc2lmNTkgICAgICAgVHJhbnNtaXQgU0NPQU5TSS9BVDM4Njog UGdEblxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNjAgICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEthbnNpZjYwICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IElu c2VydFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0FOU0lGNjEgICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEthbnNpZjYxICAgICAgIFRyYW5zbWl0IFNDT0FOU0kvQVQzODY6IChu b3QgbmFtZWQpXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBXWVNFIEZ1bmN0aW9uIEtleXMgKHVu c2hpZnRlZCkgKi8KKyAgICBjYXNlICBLX1dZRjAxICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwMSAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMVxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjAyICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwMiAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMlxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjAzICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwMyAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGM1xuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjA0ICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwNCAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGNFxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjA1ICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwNSAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGNVxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjA2ICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwNiAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGNlxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjA3ICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwNyAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGN1xuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjA4ICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwOCAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGOFxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjA5ICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYwOSAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGOVxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjEwICAgICAgICAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eWYxMCAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMTBcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUYxMSAgICAgICAgICAgIDoKKyAgICAgIHByaW50 ZigiXFxLd3lmMTEgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjExXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMTIgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5ZjEyICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxMlxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjEzICAgICAgICAgICAgOgorICAgICAgcHJp bnRmKCJcXEt3eWYxMyAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMTNcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUYxNCAgICAgICAgICAgIDoKKyAgICAgIHBy aW50ZigiXFxLd3lmMTQgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjE0XG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMTUgICAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS3d5ZjE1ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYxNVxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjE2ICAgICAgICAgICAgOgorICAgICAg cHJpbnRmKCJcXEt3eWYxNiAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBGMTZc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUYxNyAgICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLd3lmMTcgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogRjE3 XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lGMTggICAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS3d5ZjE4ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEYx OFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZRjE5ICAgICAgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEt3eWYxOSAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBG MTlcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUYyMCAgICAgICAgICAgIDoKKyAg ICAgIHByaW50ZigiXFxLd3lmMjAgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDog RjIwXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBXWVNFIEZ1bmN0aW9uIEtleXMgKHNoaWZ0ZWQp ICovCisgICAgY2FzZSAgS19XWVNGMDEgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lz ZjAxICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjFcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMDIgICAgICAgICAgIDoKKyAgICAgIHByaW50Zigi XFxLd3lzZjAyICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjJcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMDMgICAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS3d5c2YwMyAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0 LUYzXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTRjA0ICAgICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEt3eXNmMDQgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYw OiBTaGlmdC1GNFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0YwNSAgICAgICAg ICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lzZjA1ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUw LzYwLzE2MDogU2hpZnQtRjVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMDYg ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5c2YwNiAgICAgICAgVHJhbnNtaXQgV1lT RSAzMC81MC82MC8xNjA6IFNoaWZ0LUY2XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf V1lTRjA3ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXNmMDcgICAgICAgIFRyYW5z bWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GN1xuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX1dZU0YwOCAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lzZjA4ICAgICAg ICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjhcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19XWVNGMDkgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5c2Yw OSAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUY5XG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfV1lTRjEwICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJc XEt3eXNmMTAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMTBcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMTEgICAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS3d5c2YxMSAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0 LUYxMVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0YxMiAgICAgICAgICAgIDoK KyAgICAgIHByaW50ZigiXFxLd3lzZjEyICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2 MDogU2hpZnQtRjEyXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTRjEzICAgICAg ICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXNmMTMgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAv NTAvNjAvMTYwOiBTaGlmdC1GMTNcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNG MTQgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5c2YxNCAgICAgICAgVHJhbnNtaXQg V1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYxNFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1dZU0YxNSAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lzZjE1ICAgICAgICBU cmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjE1XG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfV1lTRjE2ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXNmMTYg ICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlmdC1GMTZcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19XWVNGMTcgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL d3lzZjE3ICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtRjE3XG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTRjE4ICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3d5c2YxOCAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUYx OFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0YxOSAgICAgICAgICAgOgorICAg ICAgcHJpbnRmKCJcXEt3eXNmMTkgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBT aGlmdC1GMTlcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNGMjAgICAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLd3lzZjIwICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYw LzE2MDogU2hpZnQtRjIwXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBXWVNFIEVkaXQgYW5kIFNw ZWNpYWwgS2V5cyAqLworICAgIGNhc2UgIEtfV1lCUyAgICAgICAgIDoKKyAgICAgIHByaW50Zigi XFxLd3licyAgICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogQmFja3NwYWNlXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lDTFJMTiAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS3d5Y2xybG4gICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IENsZWFy IExpbmVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNDTFJMTiAgICAgOgorICAg ICBwcmludGYoIlxcS3d5c2NscmxuICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNo aWZ0LUNsZWFyIExpbmVcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUNMUlBHICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEt3eWNscnBnICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAv NjAvMTYwOiBDbGVhciBQYWdlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTQ0xS UEcgICAgIDoKKyAgICBwcmludGYoIlxcS3d5c2NscnBnICAgICAgVHJhbnNtaXQgV1lTRSAzMC81 MC82MC8xNjA6IFNoaWZ0LUNsZWFyIFBhZ2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19XWURFTENIQVIgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eWRlbGNoYXIgICAgIFRyYW5zbWl0 IFdZU0UgMzAvNTAvNjAvMTYwOiBEZWxldGUgQ2hhclxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX1dZREVMTE4gICAgICA6CisgICAgICBwcmludGYoIlxcS3d5ZGVsbG4gICAgICAgVHJh bnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IERlbGV0ZSBMaW5lXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfV1lFTlRFUiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5ZW50ZXIg ICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEVudGVyXG4iKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgIEtfV1lFU0MgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5ZXNj ICAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IEVzY1xuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX1dZSE9NRSAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eWhv bWUgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBIb21lXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfV1lTSE9NRSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5 c2hvbWUgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LUhvbWVcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUlOU0VSVCAgICAgOgorICAgICAgcHJpbnRmKCJc XEt3eWluc2VydCAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBJbnNlcnRcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWUlOU0NIQVIgICAgOgorICAgICAgcHJpbnRmKCJc XEt3eWluc2NoYXIgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBJbnNlcnQgQ2hhclxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZSU5TTE4gICAgICAgICAgOgorICAgICAg cHJpbnRmKCJcXEt3eWluc2xuICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBJbnNl cnQgTGluZVxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZUEdORVhUICAgICA6Cisg ICAgICBwcmludGYoIlxcS3d5cGduZXh0ICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6 IFBhZ2UgTmV4dFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZUEdQUkVWICAgICA6 CisgICAgICBwcmludGYoIlxcS3d5cGdwcmV2ICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8x NjA6IFBhZ2UgUHJldmlvdXNcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVJFUExB Q0UgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXJlcGxhY2UgICAgIFRyYW5zbWl0IFdZU0UgMzAv NTAvNjAvMTYwOiBSZXBsYWNlICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf V1lSRVRVUk4gICAgIDoKKyAgICAgIHByaW50ZigiXFxLd3lyZXR1cm4gICAgICBUcmFuc21pdCBX WVNFIDMwLzUwLzYwLzE2MDogUmV0dXJuICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX1dZVEFCICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXRhYiAgICAgICAg IFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBUYWIgICAgICAgICAgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfV1lTVEFCICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5 c3RhYiAgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IFNoaWZ0LVRhYiAgICBcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVBSVFNDTiAgICAgOgorICAgICAgcHJpbnRm KCJcXEt3eXBydHNjbiAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBQcmludCBTY3Jl ZW4gXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTRVNDICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLd3lzZXNjICAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogU2hp ZnQtRXNjICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0JTICAgICAgICA6 CisgICAgcHJpbnRmKCJcXEt3eXNicyAgICAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYw OiBTaGlmdC1CYWNrc3BhY2VcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNFTlRF UiAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXNlbnRlciAgICAgIFRyYW5zbWl0IFdZU0UgMzAv NTAvNjAvMTYwOiBTaGlmdC1FbnRlclxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZ U1JFVFVSTiAgICA6CisgICAgICBwcmludGYoIlxcS3d5c3JldHVybiAgICAgVHJhbnNtaXQgV1lT RSAzMC81MC82MC8xNjA6IFNoaWZ0LVJldHVyblxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX1dZVVBBUlIgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eXVwYXJyICAgICAgIFRy YW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBVcCBBcnJvd1xuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX1dZRE5BUlIgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt3eWRuYXJyICAg ICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBEb3duIEFycm93XG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfV1lMRkFSUiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3d5 bGZhcnIgICAgICAgVHJhbnNtaXQgV1lTRSAzMC81MC82MC8xNjA6IExlZnQgQXJyb3dcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVJUQVJSICAgICAgICAgIDoKKyAgICAgIHByaW50 ZigiXFxLd3lydGFyciAgICAgICBUcmFuc21pdCBXWVNFIDMwLzUwLzYwLzE2MDogUmlnaHQgQXJy b3dcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19XWVNVUEFSUiAgICAgOgorICAgICAg cHJpbnRmKCJcXEt3eXN1cGFyciAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYwOiBTaGlm dC1VcCBBcnJvd1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1dZU0ROQVJSICAgICA6 CisgICAgcHJpbnRmKCJcXEt3eXNkbmFyciAgICAgIFRyYW5zbWl0IFdZU0UgMzAvNTAvNjAvMTYw OiBTaGlmdC1Eb3duIEFycm93XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfV1lTTEZB UlIgICAgIDoKKyAgICBwcmludGYoIlxcS3d5c2xmYXJyICAgICAgVHJhbnNtaXQgV1lTRSAzMC81 MC82MC8xNjA6IFNoaWZ0LUxlZnQgQXJyb3dcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19XWVNSVEFSUiAgICAgOgorICAgIHByaW50ZigiXFxLd3lzcnRhcnIgICAgICBUcmFuc21pdCBX WVNFIDMwLzUwLzYwLzE2MDogU2hpZnQtUmlnaHQgQXJyb3dcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19XWVNFTkQ6CisgICAgICBwcmludGYoIlxcS3d5c2VuZCAgICAgICAgVHJhbnNt aXQgV1lTRSAzMC81MC82MC8xNjA6IFNlbmRcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAg S19XWVNTRU5EOgorICAgICAgcHJpbnRmKCJcXEt3eXNzZW5kICAgICAgIFRyYW5zbWl0IFdZU0Ug MzAvNTAvNjAvMTYwOiBTaGlmdC1TZW5kXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBEYXRhIEdl bmVyYWwgRnVuY3Rpb24gS2V5cyAodW5zaGlmdGVkKSAqLworICAgIGNhc2UgIEtfREdGMDEgICAg ICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBH ZW5lcmFsOiBGMSAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfREdGMDIgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAgICAgVHJh bnNtaXQgRGF0YSBHZW5lcmFsOiBGMiAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgIEtfREdGMDMgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnZjAx ICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBGMyAgICAgICAgICAgICAgICAgXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdGMDQgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBGNCAgICAgICAgICAg ICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdGMDUgICAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBG NSAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdGMDYg ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0 YSBHZW5lcmFsOiBGNiAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfREdGMDcgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAgICAg VHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBGNyAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfREdGMDggICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Rn ZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBGOCAgICAgICAgICAgICAgICAgXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdGMDkgICAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBGOSAgICAgICAg ICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdGMTAgICAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFs OiBGMTAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdG MTEgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQg RGF0YSBHZW5lcmFsOiBGMTEgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfREdGMTIgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAg ICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBGMTIgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfREdGMTMgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxc S2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBGMTMgICAgICAgICAgICAgICAg XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdGMTQgICAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBGMTQgICAg ICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdGMTUgICAgICAg ICAgICA6CisgICAgICBwcmludGYoIlxcS2RnZjAxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5l cmFsOiBGMTUgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBEYXRhIEdl bmVyYWwgRnVuY3Rpb24gS2V5cyAoc2hpZnRlZCkgKi8KKyAgICBjYXNlICBLX0RHU0YwMSAgICAg ICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2Rnc2YwMSAgICAgICAgVHJhbnNtaXQg RGF0YSBHZW5lcmFsOiBTaGlmdC1GMSAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgIEtfREdTRjAyICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAi XFxLZGdzZjAyICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYyICAgICAgICAg ICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NGMDMgICAgICAgICAg IDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ3NmMDMgICAgICAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogU2hpZnQtRjMgICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX0RHU0YwNCAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2Rn c2YwNCAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GNCAgICAgICAgICAgICAg ICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdTRjA1ICAgICAgICAgICA6Cisg ICAgICBwcmludGYoCisgICAgICAiXFxLZGdzZjA1ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVy YWw6IFNoaWZ0LUY1ICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19ER1NGMDYgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ3NmMDYg ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjYgICAgICAgICAgICAgICAgIFxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0YwNyAgICAgICAgICAgOgorICAgICAg cHJpbnRmKAorICAgICAgIlxcS2Rnc2YwNyAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBT aGlmdC1GNyAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf REdTRjA4ICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdzZjA4ICAgICAg ICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUY4ICAgICAgICAgICAgICAgICBcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NGMDkgICAgICAgICAgIDoKKyAgICAgIHByaW50 ZigKKyAgICAgICJcXEtkZ3NmMDkgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQt RjkgICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0Yx MCAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2Rnc2YxMCAgICAgICAgVHJh bnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GMTAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfREdTRjExICAgICAgICAgICA6CisgICAgICBwcmludGYoCisg ICAgICAiXFxLZGdzZjExICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUYxMSAg ICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NGMTIgICAg ICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ3NmMTIgICAgICAgIFRyYW5zbWl0 IERhdGEgR2VuZXJhbDogU2hpZnQtRjEyICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0RHU0YxMyAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAg IlxcS2Rnc2YxMyAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1GMTMgICAgICAg ICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdTRjE0ICAgICAgICAg ICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdzZjE0ICAgICAgICBUcmFuc21pdCBEYXRh IEdlbmVyYWw6IFNoaWZ0LUYxNCAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19ER1NGMTUgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtk Z3NmMTUgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtRjE1ICAgICAgICAgICAg ICAgIFxuIik7CisgICAgICBicmVhazsKKworLyogRGF0YSBHZW5lcmFsIEZ1bmN0aW9uIEtleXMg KGNvbnRyb2wpICovCisgICAgY2FzZSAgS19ER0NGMDEgICAgICAgICAgIDoKKyAgICAgIHByaW50 ZigKKyAgICAgICJcXEtkZ2NmMDEgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1G MSAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDRjAy ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2RnY2YwMiAgICAgICAgVHJh bnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUYyICAgICAgICAgICAgICAgICBcbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19ER0NGMDMgICAgICAgICAgICA6CisgICAgICBwcmludGYoCisg ICAgICAiXFxLZGdjZjAzICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjMgICAg ICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ0YwNCAgICAg ICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ2NmMDQgICAgICAgIFRyYW5zbWl0 IERhdGEgR2VuZXJhbDogQ3RybC1GNCAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgIEtfREdDRjA1ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAg IlxcS2RnY2YwNSAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUY1ICAgICAgICAg ICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NGMDYgICAgICAgICAg ICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdjZjA2ICAgICAgICBUcmFuc21pdCBEYXRh IEdlbmVyYWw6IEN0cmwtRjYgICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX0RHQ0YwNyAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtk Z2NmMDcgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GNyAgICAgICAgICAgICAg ICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDRjA4ICAgICAgICAgICAgOgor ICAgICAgcHJpbnRmKAorICAgICAgIlxcS2RnY2YwOCAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5l cmFsOiBDdHJsLUY4ICAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSAgS19ER0NGMDkgICAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdjZjA5 ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtRjkgICAgICAgICAgICAgICAgIFxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ0YxMCAgICAgICAgICAgIDoKKyAgICAg IHByaW50ZigKKyAgICAgICJcXEtkZ2NmMTAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDog Q3RybC1GMTAgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf REdDRjExICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICAgIlxcS2RnY2YxMSAgICAg ICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUYxMSAgICAgICAgICAgICAgICBcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NGMTIgICAgICAgICAgICA6CisgICAgICBwcmlu dGYoCisgICAgICAiXFxLZGdjZjEyICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwt RjEyICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ0Yx MyAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAgICJcXEtkZ2NmMTMgICAgICAgIFRy YW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1GMTMgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfREdDRjE0ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKAor ICAgICAgIlxcS2RnY2YxNCAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLUYxNCAg ICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NGMTUgICAg ICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgICAiXFxLZGdjZjE1ICAgICAgICBUcmFuc21p dCBEYXRhIEdlbmVyYWw6IEN0cmwtRjE1ICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVh azsKKworLyogRGF0YSBHZW5lcmFsIEZ1bmN0aW9uIEtleXMgKGNvbnRyb2wgc2hpZnRlZCkgKi8K KyAgICBjYXNlICBLX0RHQ1NGMDEgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICJcXEtk Z2NzZjAxICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GMSAgICAgICAg ICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NTRjAyICAgICAgICAg IDoKKyAgICAgIHByaW50ZigKKyAgICAiXFxLZGdjc2YwMiAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IEN0cmwtU2hpZnQtRjIgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfREdDU0YwMyAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgIlxcS2Rn Y3NmMDMgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUYzICAgICAgICAg ICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ1NGMDQgICAgICAgICAg OgorICAgICAgcHJpbnRmKAorICAgICJcXEtkZ2NzZjA0ICAgICAgIFRyYW5zbWl0IERhdGEgR2Vu ZXJhbDogQ3RybC1TaGlmdC1GNCAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19ER0NTRjA1ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAiXFxLZGdj c2YwNSAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjUgICAgICAgICAg ICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDU0YwNiAgICAgICAgICA6 CisgICAgICBwcmludGYoCisgICAgIlxcS2RnY3NmMDYgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5l cmFsOiBDdHJsLVNoaWZ0LUY2ICAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX0RHQ1NGMDcgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICJcXEtkZ2Nz ZjA3ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GNyAgICAgICAgICAg ICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NTRjA4ICAgICAgICAgIDoK KyAgICAgIHByaW50ZigKKyAgICAiXFxLZGdjc2YwOCAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVy YWw6IEN0cmwtU2hpZnQtRjggICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfREdDU0YwOSAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgIlxcS2RnY3Nm MDkgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUY5ICAgICAgICAgICAg ICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQ1NGMTAgICAgICAgICAgOgor ICAgICAgcHJpbnRmKAorICAgICJcXEtkZ2NzZjEwICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJh bDogQ3RybC1TaGlmdC1GMTAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSAgS19ER0NTRjExICAgICAgICAgIDoKKyAgICAgIHByaW50ZigKKyAgICAiXFxLZGdjc2Yx MSAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEN0cmwtU2hpZnQtRjExICAgICAgICAgICAg ICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdDU0YxMiAgICAgICAgICA6Cisg ICAgICBwcmludGYoCisgICAgIlxcS2RnY3NmMTIgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFs OiBDdHJsLVNoaWZ0LUYxMiAgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX0RHQ1NGMTMgICAgICAgICAgOgorICAgICAgcHJpbnRmKAorICAgICJcXEtkZ2NzZjEz ICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogQ3RybC1TaGlmdC1GMTMgICAgICAgICAgICAg ICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0NTRjE0ICAgICAgICAgIDoKKyAg ICAgIHByaW50ZigKKyAgICAiXFxLZGdjc2YxNCAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6 IEN0cmwtU2hpZnQtRjE0ICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfREdDU0YxNSAgICAgICAgICA6CisgICAgICBwcmludGYoCisgICAgIlxcS2RnY3NmMTUg ICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBDdHJsLVNoaWZ0LUYxNSAgICAgICAgICAgICAg IFxuIik7CisgICAgICBicmVhazsKKworICAgIGNhc2UgIEtfREdVUEFSUiAgICAgICAgICA6Cisg ICAgICBwcmludGYoIlxcS2RndXBhcnIgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBVcCBB cnJvdyAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0ROQVJSICAg ICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdkbmFyciAgICAgICBUcmFuc21pdCBEYXRhIEdl bmVyYWw6IERvd24gQXJyb3cgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBL X0RHTEZBUlIgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtkZ2xmYXJyICAgICAgIFRyYW5z bWl0IERhdGEgR2VuZXJhbDogTGVmdCBBcnJvdyAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfREdSVEFSUiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RncnRhcnIg ICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBSaWdodCBBcnJvdyAgICAgICBcbiIpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NVUEFSUiAgICAgOgorICAgICAgcHJpbnRmKCJcXEtk Z3N1cGFyciAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtVXAgQXJyb3cgICAgXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdTRE5BUlIgICAgIDoKKyAgICAgIHByaW50 ZigiXFxLZGdzZG5hcnIgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LURvd24gQXJy b3cgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0xGQVJSICAgICA6CisgICAg ICBwcmludGYoIlxcS2Rnc2xmYXJyICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1M ZWZ0IEFycm93ICBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NSVEFSUiAgICAg OgorICAgICAgcHJpbnRmKCJcXEtkZ3NydGFyciAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDog U2hpZnQtUmlnaHQgQXJyb3cgXG4iKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAgS19ER0VS QVNFUEFHRSAgOgorICAgICAgcHJpbnRmKCJcXEtkZ2VyYXNlcGFnZSAgIFRyYW5zbWl0IERhdGEg R2VuZXJhbDogRXJhc2UgUGFnZSAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfREdDMSAgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnYzEgICAgICAgICAgVHJh bnNtaXQgRGF0YSBHZW5lcmFsOiBDMSAgICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19ER0MyICAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdjMiAg ICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEMyICAgICAgICAgICAgICAgIFxuIik7Cisg ICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHRVJBU0VFT0wgICA6CisgICAgICBwcmludGYoIlxc S2RnZXJhc2Vlb2wgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBFcmFzZSBFT0wgICAgICAgICBc biIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER0MzICAgICAgICAgICAgIDoKKyAgICAg IHByaW50ZigiXFxLZGdjMyAgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IEMzICAgICAg ICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHQzQgICAgICAgICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEtkZ2M0ICAgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJh bDogQzQgICAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfREdD TURQUklOVCAgIDoKKyAgICAgIHByaW50ZigiXFxLZGdjbWRwcmludCAgICBUcmFuc21pdCBEYXRh IEdlbmVyYWw6IENvbW1hbmQgUHJpbnQgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX0RHSE9NRSAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnaG9tZSAgICAgICAgVHJhbnNt aXQgRGF0YSBHZW5lcmFsOiBIb21lICAgICAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19ER1NFUkFTRVBBR0UgOgorICAgICAgcHJpbnRmKCJcXEtkZ3NlcmFzZXBhZ2Ug IFRyYW5zbWl0IERhdGEgR2VuZXJhbDogRXJhc2UgUGFnZSAgICAgICAgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfREdTQzEgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Rn c2MxICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1DMSAgICAgICAgICBcbiIp OworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NDMiAgICAgICAgICAgIDoKKyAgICAgIHBy aW50ZigiXFxLZGdzYzIgICAgICAgICBUcmFuc21pdCBEYXRhIEdlbmVyYWw6IFNoaWZ0LUMyICAg ICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0VSQVNFRU9MICA6Cisg ICAgICBwcmludGYoIlxcS2Rnc2VyYXNlZW9sICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBTaGlm dC1FcmFzZSBFT0wgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0RHU0MzICAgICAg ICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtkZ3NjMyAgICAgICAgIFRyYW5zbWl0IERhdGEgR2Vu ZXJhbDogU2hpZnQtQzMgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf REdTQzQgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2Rnc2M0ICAgICAgICAgVHJhbnNt aXQgRGF0YSBHZW5lcmFsOiBTaGlmdC1DNCAgICAgICAgICBcbiIpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSAgS19ER1NDTURQUklOVCAgOgorICAgICAgcHJpbnRmKCJcXEtkZ3NjbWRwcmludCAg IFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtQ29tbWFuZCBQcmludFxuIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlICBLX0RHQlMgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2RnYnMg ICAgICAgICAgVHJhbnNtaXQgRGF0YSBHZW5lcmFsOiBCYWNrc3BhY2UgICAgICAgICBcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19ER1NIT01FICAgICAgOgorICAgICAgcHJpbnRmKCJc XEtkc2hvbWUgICAgICAgIFRyYW5zbWl0IERhdGEgR2VuZXJhbDogU2hpZnQtSG9tZSAgICAgICAg XG4iKTsKKyAgICAgIGJyZWFrOworCisKKy8qIFRlbGV2aWRlbyBGdW5jdGlvbiBLZXlzICh1bnNo aWZ0ZWQpICovCisgICAgY2FzZSAgS19UVklGMDEgICAgICAgICAgIDoKKyAgICAgIHByaW50Zigi XFxLdHZpZjAxICAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IEYxICAgICAgIFxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX1RWSUYwMiAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJc XEt0dmlmMDIgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjIgICAgICAgICAgICAgIFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSUYwMyAgICAgICAgICAgOgorICAgICAgcHJp bnRmKCJcXEt0dmlmMDMgICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogRjMgICAgICAgICAgICAg XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjA0ICAgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS3R2aWYwNCAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGNCAgICAgICAg ICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjA1ICAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS3R2aWYwNSAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGNSAg ICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjA2ICAgICAg ICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWYwNiAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVv OiBGNiAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjA3 ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWYwNyAgICAgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBGNyAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf VFZJRjA4ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWYwOCAgICAgICAgVHJhbnNt aXQgVGVsZXZpZGVvOiBGOCAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfVFZJRjA5ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWYwOSAgICAgICAg VHJhbnNtaXQgVGVsZXZpZGVvOiBGOSAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfVFZJRjEwICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWYxMCAg ICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMTAgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfVFZJRjExICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2 aWYxMSAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMTEgICAgICAgICAgICAgXG4iKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjEyICAgICAgICAgICA6CisgICAgICBwcmludGYo IlxcS3R2aWYxMiAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMTIgICAgICAgICAgICAgXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjEzICAgICAgICAgICA6CisgICAgICBw cmludGYoIlxcS3R2aWYxMyAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMTMgICAgICAgICAg ICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjE0ICAgICAgICAgICA6Cisg ICAgICBwcmludGYoIlxcS3R2aWYxNCAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBGMTQgICAg ICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjE1ICAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS3R2aWYxNSAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBG MTUgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRjE2ICAg ICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWYxNiAgICAgICAgVHJhbnNtaXQgVGVsZXZp ZGVvOiBGMTYgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworCisvKiBUZWxldmlkZW8g RnVuY3Rpb24gS2V5cyAoc2hpZnRlZCkgKi8KKyAgICBjYXNlICBLX1RWSVNGMDEgICAgICAgICAg OgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjAxICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogU2hp ZnQtRjEgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0YwMiAgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS3R2aXNmMDIgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBTaGlm dC1GMiBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjAzICAgICAgICAgICAg OgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjAzICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogU2hp ZnQtRjMgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0YwNCAgICAgICAgICAg IDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YwNCAgICAgICBUcmFuc21pdCBUZWxldmlkZW86IFNo aWZ0LUY0IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNGMDUgICAgICAgICAg ICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMDUgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBT aGlmdC1GNSBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjA2ICAgICAgICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjA2ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzog U2hpZnQtRjYgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0YwNyAgICAgICAg ICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YwNyAgICAgICBUcmFuc21pdCBUZWxldmlkZW86 IFNoaWZ0LUY3IFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNGMDggICAgICAg ICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMDggICAgICAgVHJhbnNtaXQgVGVsZXZpZGVv OiBTaGlmdC1GOCBcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjA5ICAgICAg ICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjA5ICAgICAgIFRyYW5zbWl0IFRlbGV2aWRl bzogU2hpZnQtRjkgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0YxMCAgICAg ICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YxMCAgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFNoaWZ0LUYxMFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNGMTEgICAg ICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMTEgICAgICAgVHJhbnNtaXQgVGVsZXZp ZGVvOiBTaGlmdC1GMTFcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjEyICAg ICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjEyICAgICAgIFRyYW5zbWl0IFRlbGV2 aWRlbzogU2hpZnQtRjEyXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0YxMyAg ICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YxMyAgICAgICBUcmFuc21pdCBUZWxl dmlkZW86IFNoaWZ0LUYxM1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX1RWSVNGMTQg ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNmMTQgICAgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBTaGlmdC1GMTRcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19UVklTRjE1 ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEt0dmlzZjE1ICAgICAgIFRyYW5zbWl0IFRl bGV2aWRlbzogU2hpZnQtRjE1XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0Yx NiAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2YxNiAgICAgICBUcmFuc21pdCBU ZWxldmlkZW86IFNoaWZ0LUYxNlxuIik7CisgICAgICBicmVhazsKKworLyogVGVsZXZpZGVvIEVk aXQgYW5kIFNwZWNpYWwgS2V5cyAqLworICAgIGNhc2UgIEtfVFZJQlMgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS3R2aWJzICAgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBCYWNrc3BhY2Ug ICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJQ0xSTE4gICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS3R2aWNscmxuICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBDbGVh ciBMaW5lICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0NMUkxOICAg ICA6CisgICAgICBwcmludGYoIlxcS3R2aXNjbHJsbiAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBT aGlmdC1DbGVhciBMaW5lXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJQ0xSUEcg ICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWNscnBnICAgICAgVHJhbnNtaXQgVGVsZXZpZGVv OiBDbGVhciBQYWdlICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0NM UlBHICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNjbHJwZyAgICAgVHJhbnNtaXQgVGVsZXZp ZGVvOiBTaGlmdC1DbGVhciBQYWdlXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJ REVMQ0hBUiAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWRlbGNoYXIgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBEZWxldGUgQ2hhciAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf VFZJREVMTE4gICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWRlbGxuICAgICAgVHJhbnNtaXQg VGVsZXZpZGVvOiBEZWxldGUgTGluZSAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug IEtfVFZJRU5URVIgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWVudGVyICAgICAgVHJh bnNtaXQgVGVsZXZpZGVvOiBFbnRlciAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfVFZJRVNDICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWVzYyAgICAg ICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBFc2MgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgIEtfVFZJSE9NRSAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aWhv bWUgICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBIb21lICAgICAgICAgICAgXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0hPTUUgICAgICAgICA6CisgICAgICBwcmludGYoIlxc S3R2aXNob21lICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBTaGlmdC1Ib21lICAgICAgXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJSU5TRVJUICAgICA6CisgICAgICBwcmludGYo IlxcS3R2aWluc2VydCAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBJbnNlcnQgICAgICAgICAgXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJSU5TQ0hBUiAgICA6CisgICAgICBwcmlu dGYoIlxcS3R2aWluc2NoYXIgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBJbnNlcnQgQ2hhciAgICAg XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJSU5TTE4gICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS3R2aWluc2xuICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBJbnNlcnQgTGlu ZSAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJUEdORVhUICAgICA6Cisg ICAgICBwcmludGYoIlxcS3R2aXBnbmV4dCAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBQYWdlIE5l eHQgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJUEdQUkVWICAgICA6 CisgICAgICBwcmludGYoIlxcS3R2aXBncHJldiAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBQYWdl IFByZXZpb3VzICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJUkVQTEFDRSAg ICA6CisgICAgICBwcmludGYoIlxcS3R2aXJlcGxhY2UgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBS ZXBsYWNlICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJUkVUVVJO ICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXJldHVybiAgICAgVHJhbnNtaXQgVGVsZXZpZGVv OiBSZXR1cm4gICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJVEFC ICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXRhYiAgICAgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBUYWIgICAgICAgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtf VFZJU1RBQiAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXN0YWIgICAgICAgVHJhbnNt aXQgVGVsZXZpZGVvOiBTaGlmdC1UYWIgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgIEtfVFZJUFJUU0NOICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXBydHNjbiAgICAgVHJh bnNtaXQgVGVsZXZpZGVvOiBQcmludCBTY3JlZW4gICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAg IGNhc2UgIEtfVFZJU0VTQyAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNlc2MgICAgICAg VHJhbnNtaXQgVGVsZXZpZGVvOiBTaGlmdC1Fc2MgICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgIEtfVFZJU0JTICAgICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNicyAgICAg ICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBTaGlmdC1CYWNrc3BhY2UgXG4iKTsKKyAgICAgIGJyZWFr OworICAgIGNhc2UgIEtfVFZJU0VOVEVSICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNlbnRl ciAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBTaGlmdC1FbnRlciAgICAgXG4iKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgIEtfVFZJU1JFVFVSTiAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNy ZXR1cm4gICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBTaGlmdC1SZXR1cm4gICAgXG4iKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgIEtfVFZJVVBBUlIgICAgICAgICA6CisgICAgICBwcmludGYoIlxc S3R2aXVwYXJyICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBVcCBBcnJvdyAgICAgICAgXG4iKTsK KyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJRE5BUlIgICAgICAgICA6CisgICAgICBwcmlu dGYoIlxcS3R2aWRuYXJyICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBEb3duIEFycm93ICAgICAg XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJTEZBUlIgICAgICAgICA6CisgICAg ICBwcmludGYoIlxcS3R2aWxmYXJyICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBMZWZ0IEFycm93 ICAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJUlRBUlIgICAgICAgICA6 CisgICAgICBwcmludGYoIlxcS3R2aXJ0YXJyICAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBSaWdo dCBBcnJvdyAgICAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU1VQQVJSICAg ICA6CisgICAgICBwcmludGYoIlxcS3R2aXN1cGFyciAgICAgVHJhbnNtaXQgVGVsZXZpZGVvOiBT aGlmdC1VcCBBcnJvdyAgXG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0ROQVJS ICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNkbmFyciAgICAgVHJhbnNtaXQgVGVsZXZpZGVv OiBTaGlmdC1Eb3duIEFycm93XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJU0xG QVJSICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNsZmFyciAgICAgVHJhbnNtaXQgVGVsZXZp ZGVvOiBTaGlmdC1MZWZ0IEFycm93XG4iKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfVFZJ U1JUQVJSICAgICA6CisgICAgICBwcmludGYoIlxcS3R2aXNydGFyciAgICAgVHJhbnNtaXQgVGVs ZXZpZGVvOiBTaGlmdC1SaWdodCBBcnJvd1xuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIEtf VFZJU0VORDoKKyAgICAgIHByaW50ZigiXFxLdHZpc2VuZCAgICAgICBUcmFuc21pdCBUZWxldmlk ZW86IFNlbmRcbiIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1RWSVNTRU5EOgorICAgICAg cHJpbnRmKCJcXEt0dmlzc2VuZCAgICAgIFRyYW5zbWl0IFRlbGV2aWRlbzogU2hpZnQtU2VuZFxu Iik7CisgICAgICBicmVhazsKKworLyogSFAgRnVuY3Rpb24gYW5kIEVkaXQga2V5cyAqLworICAg IGNhc2UgIEtfSFBGMDEgICAgICAgICAgICA6CisgICAgICBwcmludGYoIlxcS2hwZjAxICAgICAg ICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBGMSAgICAgICBcbiIpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSAgS19IUEYwMiAgICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxLaHBmMDIg ICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEYyICAgICAgICAgICAgICBcbiIpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAgS19IUEYwMyAgICAgICAgICAgIDoKKyAgICAgIHByaW50 ZigiXFxLaHBmMDMgICAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEYzICAgICAgICAg ICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQRjA0ICAgICAgICAgICAgOgor ICAgICAgcHJpbnRmKCJcXEtocGYwNCAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDog RjQgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQRjA1ICAg ICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYwNSAgICAgICAgIFRyYW5zbWl0IEhld2xl dHQtUGFja2FyZDogRjUgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNl ICBLX0hQRjA2ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYwNiAgICAgICAgIFRy YW5zbWl0IEhld2xldHQtUGFja2FyZDogRjYgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVh azsKKyAgICBjYXNlICBLX0hQRjA3ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYw NyAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjcgICAgICAgICAgICAgIFxuIik7 CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQRjA4ICAgICAgICAgICAgOgorICAgICAgcHJp bnRmKCJcXEtocGYwOCAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjggICAgICAg ICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQRjA5ICAgICAgICAgICAg OgorICAgICAgcHJpbnRmKCJcXEtocGYwOSAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2Fy ZDogRjkgICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQRjEw ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYxMCAgICAgICAgIFRyYW5zbWl0IEhl d2xldHQtUGFja2FyZDogRjEwICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBj YXNlICBLX0hQRjExICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYxMSAgICAgICAg IFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjExICAgICAgICAgICAgIFxuIik7CisgICAgICBi cmVhazsKKyAgICBjYXNlICBLX0hQRjEyICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEto cGYxMiAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjEyICAgICAgICAgICAgIFxu Iik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQRjEzICAgICAgICAgICAgOgorICAgICAg cHJpbnRmKCJcXEtocGYxMyAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjEzICAg ICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQRjE0ICAgICAgICAg ICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYxNCAgICAgICAgIFRyYW5zbWl0IEhld2xldHQtUGFj a2FyZDogRjE0ICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAgICBjYXNlICBLX0hQ RjE1ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYxNSAgICAgICAgIFRyYW5zbWl0 IEhld2xldHQtUGFja2FyZDogRjE1ICAgICAgICAgICAgIFxuIik7CisgICAgICBicmVhazsKKyAg ICBjYXNlICBLX0hQRjE2ICAgICAgICAgICAgOgorICAgICAgcHJpbnRmKCJcXEtocGYxNiAgICAg ICAgIFRyYW5zbWl0IEhld2xldHQtUGFja2FyZDogRjE2ICAgICAgICAgICAgIFxuIik7CisgICAg ICBicmVhazsKKyAgICBjYXNlICBLX0hQUkVUVVJOICAgICA6CisgICAgICBwcmludGYoIlxcS2hw cmV0dXJuICAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBSZXR1cm5cbiIpOworICAgICAg YnJlYWs7CisgICAgY2FzZSAgS19IUEVOVEVSICAgICAgICAgIDoKKyAgICAgIHByaW50ZigiXFxL aHBlbnRlciAgICAgICBUcmFuc21pdCBIZXdsZXR0LVBhY2thcmQ6IEVudGVyIChrZXlwYWQpXG4i KTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgIEtfSFBCQUNLVEFCICAgICAgICA6CisgICAgICBw cmludGYoIlxcS2hwYmFja3RhYiAgICAgVHJhbnNtaXQgSGV3bGV0dC1QYWNrYXJkOiBCYWNrIFRh YlxuIik7CisgICAgICBicmVhazsKKyAgICAgICAgLyogU2llbWVucyBOaXhkb3JmIEludGVybmF0 aW9uYWwgOTc4MDEtNXh4IGt2ZXJicyAqLworICAgIGNhc2UgS19TTklfRE9VQkxFXzAgICAgICA6 CisgICAgICAgIHByaW50ZigiXFxLc25pXzAwICAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01 eHg6IERvdWJsZS1aZXJvXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0RP VUJMRV8wICAgIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9jXzAwICAgICAgICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBDdHJsLURvdWJsZS1aZXJvXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX1NOSV9DX0NFICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19j ZSAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1DRVxuIik7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgS19TTklfQ19DT01QT1NFICAgICA6CisgICAgICAgIHByaW50ZigiXFxL c25pX2NfY29tcG9zZSAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtQ29tcG9zZVxuIik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19ERUxFVEVfQ0hBUiA6CisgICAgICAg IHByaW50ZigKKyJcXEtzbmlfY19kZWxfY2hhciAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3Ry bC1EZWxldGUgQ2hhclxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19ERUxF VEVfTElORSA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfY19kZWxfbGluZSAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogQ3RybC1EZWxldGUgTGluZVxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgS19TTklfQ19ERUxFVEVfV09SRCA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfY19k ZWxfd29yZCAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1EZWxldGUgV29yZFxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19DVVJTT1JfRE9XTiA6CisgICAgICAgIHBy aW50ZigKKyJcXEtzbmlfY19kbmFyciAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1D dXJzb3IgRG93blxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19FTkRNQVJL RSAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZW5kbWFya2UgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEN0cmwtRW5kIE1hcmtlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBL X1NOSV9DX0YwMSAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMDEgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMVxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgS19TTklfQ19GMDIgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZjAy ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjJcbiIpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIEtfU05JX0NfRjAzICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3Nu aV9jX2YwMyAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYzXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0YwNCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRm KCJcXEtzbmlfY19mMDQgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GNFxuIik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19GMDUgICAgICAgICA6CisgICAgICAg IHByaW50ZigiXFxLc25pX2NfZjA1ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwt RjVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfRjA2ICAgICAgICAgOgor ICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YwNiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4 OiBDdHJsLUY2XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0YwNyAgICAg ICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMDcgICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogQ3RybC1GN1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19G MDggICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZjA4ICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEN0cmwtRjhcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf U05JX0NfRjA5ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YwOSAgICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUY5XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9DX0YxMCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMTAg ICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMTBcbiIpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIEtfU05JX0NfRjExICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3Nu aV9jX2YxMSAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxMVxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19GMTIgICAgICAgICA6CisgICAgICAgIHByaW50 ZigiXFxLc25pX2NfZjEyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjEyXG4i KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0YxMyAgICAgICAgIDoKKyAgICAg ICAgcHJpbnRmKCJcXEtzbmlfY19mMTMgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3Ry bC1GMTNcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfRjE0ICAgICAgICAg OgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YxNCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEt NXh4OiBDdHJsLUYxNFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19GMTUg ICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfZjE1ICAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IEN0cmwtRjE1XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NO SV9DX0YxNiAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMTYgICAgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMTZcbiIpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIEtfU05JX0NfRjE3ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YxNyAg ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUYxN1xuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19TTklfQ19GMTggICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25p X2NfZjE4ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjE4XG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX1VTRVIxICAgICAgICA6CisgICAgICAgIHByaW50 ZigKKyJcXEtzbmlfY191c2VyMSAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1LZXkg YmVsb3cgRjE4XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX0YxOSAgICAg ICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19mMTkgICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogQ3RybC1GMTlcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0Nf VVNFUjIgICAgICAgOgorICAgICAgICBwcmludGYoCisiXFxLc25pX2NfdXNlcjIgICAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IEN0cmwtS2V5IGJlbG93IEYxOVxuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19TTklfQ19GMjAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25p X2NfZjIwICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtRjIwXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX1VTRVIzICAgICAgIDoKKyAgICAgICAgcHJpbnRm KAorIlxcS3NuaV9jX3VzZXIzICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUtleSBi ZWxvdyBGMjBcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfRjIxICAgICAg ICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX2YyMSAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBDdHJsLUYyMVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19V U0VSNCAgICAgICA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfY191c2VyNCAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogQ3RybC1LZXkgYmVsb3cgRjIxXG4iKTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSBLX1NOSV9DX0YyMiAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlf Y19mMjIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1GMjJcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfVVNFUjUgICAgICAgOgorICAgICAgICBwcmludGYo CisiXFxLc25pX2NfdXNlcjUgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtS2V5IGJl bG93IEYyMlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19IRUxQICAgICAg ICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfaGVscCAgICAgIFRyYW5zbWl0IFNOSS05Nzgw MS01eHg6IEN0cmwtSGVscFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19I T01FICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfaG9tZSAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEN0cmwtSG9tZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug S19TTklfQ19JTlNFUlRfQ0hBUiA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfY19pbnNfY2hh ciAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1JbnNlcnQgQ2hhclxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19TTklfQ19JTlNFUlRfTElORSA6CisgICAgICAgIHByaW50ZigK KyJcXEtzbmlfY19pbnNfbGluZSAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1JbnNlcnQg TGluZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19JTlNFUlRfV09SRCA6 CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfY19pbnNfd29yZCAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogQ3RybC1JbnNlcnQgV29yZFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19T TklfQ19MRUZUX1RBQiAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfbGVmdF90YWIgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtTGVmdCBUYWJcbiIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIEtfU05JX0NfQ1VSU09SX0xFRlQgOgorICAgICAgICBwcmludGYoCisiXFxLc25p X2NfbGZhcnIgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtQ3Vyc29yIExlZnRcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfTU9ERSAgICAgICAgOgorICAgICAg ICBwcmludGYoIlxcS3NuaV9jX21vZGUgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJs LU1vZGVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfUEFHRSAgICAgICAg OgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX3BhZ2UgICAgICBUcmFuc21pdCBTTkktOTc4MDEt NXh4OiBDdHJsLVBhZ2VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NfUFJJ TlQgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9jX3ByaW50ICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBDdHJsLVByaW50XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBL X1NOSV9DX0NVUlNPUl9SSUdIVDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9jX3J0YXJyICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdHJsLUN1cnNvciBSaWdodFxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19TTklfQ19TQ1JPTExfRE9XTiA6CisgICAgICAgIHByaW50ZigK KyJcXEtzbmlfY19zY3JvbGxfZG4gVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1TY3JvbGwg RG93blxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ19TQ1JPTExfVVAgICA6 CisgICAgICAgIHByaW50ZigiXFxLc25pX2Nfc2Nyb2xsX3VwIFRyYW5zbWl0IFNOSS05NzgwMS01 eHg6IEN0cmwtU2Nyb2xsIFVwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9D X1NUQVJUICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY19zdGFydCAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogQ3RybC1TdGFydFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgS19TTklfQ19DVVJTT1JfVVAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2NfdXBhcnIg ICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN0cmwtQ3Vyc29yIFVwXG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBLX1NOSV9DX1RBQiAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJc XEtzbmlfY190YWIgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogQ3RybC1UYWJcbiIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NFICAgICAgICAgICAgOgorICAgICAgICBw cmludGYoIlxcS3NuaV9jZSAgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDRVxuIik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfQ0hfQ09ERToKKyAgICAgICAgcHJpbnRm KCJcXEtzbmlfY2hfY29kZSAgICAgVG9nZ2xlIFNOSS05NzgwMS01eHg6IENILkNPREUgZnVuY3Rp b24uXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9DT01QT1NFICAgICAgIDoK KyAgICAgICAgcHJpbnRmKCJcXEtzbmlfY29tcG9zZSAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4 eDogQ29tcG9zZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfREVMRVRFX0NI QVIgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2RlbF9jaGFyICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IERlbGV0ZSBDaGFyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NO SV9ERUxFVEVfTElORSAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZGVsX2xpbmUgICAgVHJh bnNtaXQgU05JLTk3ODAxLTV4eDogRGVsZXRlIExpbmVcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfU05JX0RFTEVURV9XT1JEICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9kZWxf d29yZCAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBEZWxldGUgV29yZFxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19TTklfQ1VSU09SX0RPV04gICA6CisgICAgICAgIHByaW50Zigi XFxLc25pX2RuYXJyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEN1cnNvciBEb3duXG4i KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9FTkRNQVJLRSAgICAgIDoKKyAgICAg ICAgcHJpbnRmKCJcXEtzbmlfZW5kbWFya2UgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRW5k IE1hcmtlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9GMDEgICAgICAgICAg IDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjAxICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogRjFcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YwMiAgICAgICAg ICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMDIgICAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBGMlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfRjAzICAgICAg ICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2YwMyAgICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IEYzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9GMDQgICAg ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjA0ICAgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogRjRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YwNSAg ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMDUgICAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBGNVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfRjA2 ICAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2YwNiAgICAgICAgIFRyYW5zbWl0 IFNOSS05NzgwMS01eHg6IEY2XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9G MDcgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjA3ICAgICAgICAgVHJhbnNt aXQgU05JLTk3ODAxLTV4eDogRjdcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05J X0YwOCAgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMDggICAgICAgICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBGOFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19T TklfRjA5ICAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2YwOSAgICAgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IEY5XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBL X1NOSV9GMTAgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjEwICAgICAgICAg VHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjEwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBLX1NOSV9GMTEgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjExICAgICAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjExXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9GMTIgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjEyICAg ICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjEyXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX1NOSV9GMTMgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfZjEz ICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjEzXG4iKTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSBLX1NOSV9GMTQgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlf ZjE0ICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjE0XG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX1NOSV9GMTUgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtz bmlfZjE1ICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjE1XG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBLX1NOSV9GMTYgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJc XEtzbmlfZjE2ICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjE2XG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9GMTcgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRm KCJcXEtzbmlfZjE3ICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjE3XG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9GMTggICAgICAgICAgIDoKKyAgICAgICAgcHJp bnRmKCJcXEtzbmlfZjE4ICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjE4XG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9VU0VSMSAgICAgICAgICA6CisgICAgICAg IHByaW50ZigiXFxLc25pX3VzZXIxICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEtleSBi ZWxvdyBGMThcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YxOSAgICAgICAg ICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9mMTkgICAgICAgICBUcmFuc21pdCBTTkktOTc4 MDEtNXh4OiBGMTlcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1VTRVIyICAg ICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfdXNlcjIgICAgICAgVHJhbnNtaXQgU05J LTk3ODAxLTV4eDogS2V5IGJlbG93IEYxOVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug S19TTklfRjIwICAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2YyMCAgICAgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEYyMFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgS19TTklfVVNFUjMgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV91c2VyMyAg ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBLZXkgYmVsb3cgRjIwXG4iKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBLX1NOSV9GMjEgICAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJc XEtzbmlfZjIxICAgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogRjIxXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9VU0VSNCAgICAgICAgICA6CisgICAgICAgIHByaW50 ZigiXFxLc25pX3VzZXI0ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEtleSBiZWxvdyBG MjFcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0YyMiAgICAgICAgICAgOgor ICAgICAgICBwcmludGYoIlxcS3NuaV9mMjIgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4 OiBGMjJcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1VTRVI1ICAgICAgICAg IDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfdXNlcjUgICAgICAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogS2V5IGJlbG93IEYyMlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklf SEVMUCAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX2hlbHAgICAgICAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IEhlbHBcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf U05JX0hPTUUgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9ob21lICAgICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBIb21lXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBLX1NOSV9JTlNFUlRfQ0hBUiAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfaW5zX2NoYXIg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogSW5zZXJ0IENoYXJcbiIpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIEtfU05JX0lOU0VSVF9MSU5FICAgOgorICAgICAgICBwcmludGYoIlxcS3Nu aV9pbnNfbGluZSAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBJbnNlcnQgTGluZVxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfSU5TRVJUX1dPUkQgICA6CisgICAgICAgIHBy aW50ZigiXFxLc25pX2luc193b3JkICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IEluc2VydCBX b3JkXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9MRUZUX1RBQiAgICAgIDoK KyAgICAgICAgcHJpbnRmKCJcXEtzbmlfbGVmdF90YWIgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4 eDogTGVmdCBUYWJcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NVUlNPUl9M RUZUICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9sZmFyciAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBDdXJzb3IgTGVmdFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19T TklfTU9ERSAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX21vZGUgICAgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IE1vZGVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IEtfU05JX1BBR0UgICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9wYWdlICAgICAg ICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBQYWdlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9QUklOVCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfcHJpbnQg ICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogUHJpbnRcbiIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIEtfU05JX0NVUlNPUl9SSUdIVCAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9y dGFyciAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdXJzb3IgUmlnaHRcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfRE9VQkxFXzAgICAgOgorICAgICAgICBwcmlu dGYoCisiXFxLc25pX3NfMDAgICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LURv dWJsZS1aZXJvXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0NFICAgICAg ICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19jZSAgICAgICAgVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogU2hpZnQtQ0VcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1Nf Q09NUE9TRSAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2NvbXBvc2UgICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBTaGlmdC1Db21wb3NlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9TX0RFTEVURV9DSEFSIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9zX2Rl bF9jaGFyICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1EZWxldGUgQ2hhclxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19ERUxFVEVfTElORSA6CisgICAgICAgIHBy aW50ZigKKyJcXEtzbmlfc19kZWxfbGluZSAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQt RGVsZXRlIExpbmVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfREVMRVRF X1dPUkQgOgorICAgICAgICBwcmludGYoCisiXFxLc25pX3NfZGVsX3dvcmQgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IFNoaWZ0LURlbGV0ZSBXb3JkXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9TX0NVUlNPUl9ET1dOIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9zX2Ru YXJyICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1DdXJzb3IgRG93blxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19FTkRNQVJLRSAgICA6CisgICAgICAgIHBy aW50ZigiXFxLc25pX3NfZW5kbWFya2UgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUVu ZCBNYXJrZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMDEgICAgICAg ICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjAxICAgICAgIFRyYW5zbWl0IFNOSS05Nzgw MS01eHg6IFNoaWZ0LUYxXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0Yw MiAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMDIgICAgICAgVHJhbnNtaXQg U05JLTk3ODAxLTV4eDogU2hpZnQtRjJcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf U05JX1NfRjAzICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YwMyAgICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GM1xuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgS19TTklfU19GMDQgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjA0 ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUY0XG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX1NOSV9TX0YwNSAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtz bmlfc19mMDUgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtRjVcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfRjA2ICAgICAgICAgOgorICAgICAgICBwcmlu dGYoIlxcS3NuaV9zX2YwNiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GNlxu Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMDcgICAgICAgICA6CisgICAg ICAgIHByaW50ZigiXFxLc25pX3NfZjA3ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNo aWZ0LUY3XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0YwOCAgICAgICAg IDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19mMDggICAgICAgVHJhbnNtaXQgU05JLTk3ODAx LTV4eDogU2hpZnQtRjhcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfRjA5 ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YwOSAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBTaGlmdC1GOVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19T TklfU19GMTAgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjEwICAgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYxMFxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgS19TTklfU19GMTEgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjEx ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYxMVxuIik7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgS19TTklfU19GMTIgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxL c25pX3NfZjEyICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYxMlxuIik7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMTMgICAgICAgICA6CisgICAgICAgIHBy aW50ZigiXFxLc25pX3NfZjEzICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYx M1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMTQgICAgICAgICA6Cisg ICAgICAgIHByaW50ZigiXFxLc25pX3NfZjE0ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6 IFNoaWZ0LUYxNFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19GMTUgICAg ICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjE1ICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IFNoaWZ0LUYxNVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklf U19GMTYgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjE2ICAgICAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYxNlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgS19TTklfU19GMTcgICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfZjE3ICAg ICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYxN1xuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19TTklfU19GMTggICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25p X3NfZjE4ICAgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUYxOFxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19VU0VSMSAgICAgICAgOgorICAgICAgICBwcmlu dGYoCisiXFxLc25pX3NfdXNlcjEgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUtl eSBiZWxvdyBGMThcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfRjE5ICAg ICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YxOSAgICAgICBUcmFuc21pdCBTTkkt OTc4MDEtNXh4OiBTaGlmdC1GMTlcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05J X1NfVVNFUjIgICAgICAgOgorICAgICAgICBwcmludGYoCisiXFxLc25pX3NfdXNlcjIgICAgIFRy YW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUtleSBiZWxvdyBGMTlcbiIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEtfU05JX1NfRjIwICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxc S3NuaV9zX2YyMCAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMjBcbiIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfVVNFUjMgICAgICAgOgorICAgICAgICBw cmludGYoCisiXFxLc25pX3NfdXNlcjMgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0 LUtleSBiZWxvdyBGMjBcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfRjIx ICAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2YyMSAgICAgICBUcmFuc21pdCBT TkktOTc4MDEtNXh4OiBTaGlmdC1GMjFcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf U05JX1NfVVNFUjQgICAgICAgOgorICAgICAgICBwcmludGYoCisiXFxLc25pX3NfdXNlcjQgICAg IFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUtleSBiZWxvdyBGMjFcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfRjIyICAgICAgICAgOgorICAgICAgICBwcmludGYo IlxcS3NuaV9zX2YyMiAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1GMjJcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfVVNFUjUgICAgICAgOgorICAgICAg ICBwcmludGYoCisiXFxLc25pX3NfdXNlcjUgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNo aWZ0LUtleSBiZWxvdyBGMjJcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1Nf SEVMUCAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX2hlbHAgICAgICBUcmFuc21p dCBTTkktOTc4MDEtNXh4OiBTaGlmdC1IZWxwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBLX1NOSV9TX0hPTUUgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19ob21lICAg ICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtSG9tZVxuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19TTklfU19JTlNFUlRfQ0hBUiA6CisgICAgICAgIHByaW50ZigKKyJcXEtz bmlfc19pbnNfY2hhciAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtSW5zZXJ0IENoYXJc biIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfSU5TRVJUX0xJTkUgOgorICAg ICAgICBwcmludGYoCisiXFxLc25pX3NfaW5zX2xpbmUgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6 IFNoaWZ0LUluc2VydCBMaW5lXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9T X0lOU0VSVF9XT1JEIDoKKyAgICAgICAgcHJpbnRmKAorIlxcS3NuaV9zX2luc193b3JkICBUcmFu c21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1JbnNlcnQgV29yZFxuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19TTklfU19MRUZUX1RBQiAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25p X3NfbGVmdF90YWIgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUxlZnQgVGFiXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX1NOSV9TX0NVUlNPUl9MRUZUIDoKKyAgICAgICAg cHJpbnRmKAorIlxcS3NuaV9zX2xmYXJyICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlm dC1DdXJzb3IgTGVmdFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19NT0RF ICAgICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfbW9kZSAgICAgIFRyYW5zbWl0IFNO SS05NzgwMS01eHg6IFNoaWZ0LU1vZGVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf U05JX1NfUEFHRSAgICAgICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX3BhZ2UgICAgICBU cmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1QYWdlXG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX1NOSV9TX1BSSU5UICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc19w cmludCAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2hpZnQtUHJpbnRcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfU05JX1NfQ1VSU09SX1JJR0hUOgorICAgICAgICBwcmludGYo CisiXFxLc25pX3NfcnRhcnIgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0LUN1cnNv ciBSaWdodFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19TQ1JPTExfRE9X TiA6CisgICAgICAgIHByaW50ZigKKyJcXEtzbmlfc19zY3JvbGxfZG4gVHJhbnNtaXQgU05JLTk3 ODAxLTV4eDogU2hpZnQtU2Nyb2xsIERvd25cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl IEtfU05JX1NfU0NST0xMX1VQICAgOgorICAgICAgICBwcmludGYoIlxcS3NuaV9zX3Njcm9sbF91 cCBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1TY3JvbGwgVXBcbiIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEtfU05JX1NfU1RBUlQgICAgICAgOgorICAgICAgICBwcmludGYoIlxc S3NuaV9zX3N0YXJ0ICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBTaGlmdC1TdGFydFxuIik7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19DVVJTT1JfVVAgICA6CisgICAgICAg IHByaW50ZigiXFxLc25pX3NfdXBhcnIgICAgIFRyYW5zbWl0IFNOSS05NzgwMS01eHg6IFNoaWZ0 LUN1cnNvciBVcFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklfU19UQUIgICAg ICAgICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3NfdGFiICAgICAgIFRyYW5zbWl0IFNOSS05 NzgwMS01eHg6IFNoaWZ0LVRhYlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19TTklf U0NST0xMX0RPV04gICA6CisgICAgICAgIHByaW50ZigiXFxLc25pX3Njcm9sbF9kbiAgIFRyYW5z bWl0IFNOSS05NzgwMS01eHg6IFNjcm9sbCBEb3duXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX1NOSV9TQ1JPTExfVVAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtzbmlfc2Nyb2xs X3VwICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU2Nyb2xsIFVwXG4iKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBLX1NOSV9TVEFSVCAgICAgICAgIDoKKyAgICAgICAgcHJpbnRmKCJcXEtz bmlfc3RhcnQgICAgICAgVHJhbnNtaXQgU05JLTk3ODAxLTV4eDogU3RhcnRcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfU05JX1RBQiAgICAgICAgICAgOgorICAgICAgICBwcmludGYo IlxcS3NuaV90YWIgICAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBUYWJcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfU05JX0NVUlNPUl9VUCAgICAgOgorICAgICAgICBwcmlu dGYoIlxcS3NuaV91cGFyciAgICAgICBUcmFuc21pdCBTTkktOTc4MDEtNXh4OiBDdXJzb3IgVXBc biIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgS19CQTgwX0FUVFI6CisgICAgICAgIHBy aW50ZigiXFxLYmE4MF9hdHRyICAgICAgIFRyYW5zbWl0IEJBODA6IEF0dHJcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9DX0tFWToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgw X2Nfa2V5ICAgICAgVHJhbnNtaXQgQkE4MDogQ1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgS19CQTgwX0NMRUFSOgorICAgICAgICBwcmludGYoIlxcS2JhODBfY2xlYXIgICAgICBUcmFu c21pdCBCQTgwOiBDbGVhclxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX0NN RDoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2NtZCAgICAgICAgVHJhbnNtaXQgQkE4MDogQ21k XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfQ09QWToKKyAgICAgICAgcHJp bnRmKCJcXEtiYTgwX2NvcHkgICAgICAgVHJhbnNtaXQgQkE4MDogQ29weVxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19CQTgwX0RFTDoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2Rl bCAgICAgICAgVHJhbnNtaXQgQkE4MDogRGVsZXRlXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX0JBODBfREVMX0I6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9kZWxfYiAgICAgIFRy YW5zbWl0IEJBODA6IERlbGV0ZSBCXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JB ODBfRE86CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9kbyAgICAgICAgIFRyYW5zbWl0IEJBODA6 IERvXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfRU5EOgorICAgICAgICBw cmludGYoIlxcS2JhODBfZW5kICAgICAgICBUcmFuc21pdCBCQTgwOiBFbmRcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9FTlY6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9l bnYgICAgICAgIFRyYW5zbWl0IEJBODA6IEVudlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgS19CQTgwX0VPUDoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2VvcCAgICAgICAgVHJhbnNt aXQgQkE4MDogRU9QXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfRVJBU0U6 CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9lcmFzZSAgICAgIFRyYW5zbWl0IEJBODA6IEVyYXNl XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfRk1UOgorICAgICAgICBwcmlu dGYoIlxcS2JhODBfZm10ICAgICAgICBUcmFuc21pdCBCQTgwOiBGb3JtYXRcbiIpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9IRUxQOgorICAgICAgICBwcmludGYoIlxcS2JhODBf aGVscCAgICAgICBUcmFuc21pdCBCQTgwOiBIZWxwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBLX0JBODBfSE9NRToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2hvbWUgICAgICAgVHJh bnNtaXQgQkE4MDogSG9tZVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX0lO UzoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX2lucyAgICAgICAgVHJhbnNtaXQgQkE4MDogSW5z ZXJ0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfSU5TX0I6CisgICAgICAg IHByaW50ZigiXFxLYmE4MF9pbnNfYiAgICAgIFRyYW5zbWl0IEJBODA6IEluc2VydCBCXG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfTUFSSzoKKyAgICAgICAgcHJpbnRmKCJc XEtiYTgwX21hcmsgICAgICAgVHJhbnNtaXQgQkE4MDogTWFya1xuIik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgS19CQTgwX01PVkU6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9tb3ZlICAg ICAgIFRyYW5zbWl0IEJBODA6IE1vdmVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtf QkE4MF9QQTAxOgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGEwMSAgICAgICBUcmFuc21pdCBC QTgwOiBQQTFcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTAyOgorICAg ICAgICBwcmludGYoIlxcS2JhODBfcGEwMiAgICAgICBUcmFuc21pdCBCQTgwOiBQQTJcbiIpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTAzOgorICAgICAgICBwcmludGYoIlxc S2JhODBfcGEwMyAgICAgICBUcmFuc21pdCBCQTgwOiBQQTNcbiIpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIEtfQkE4MF9QQTA0OgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGEwNCAgICAg ICBUcmFuc21pdCBCQTgwOiBQQTRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4 MF9QQTA1OgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGEwNSAgICAgICBUcmFuc21pdCBCQTgw OiBQQTVcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTA2OgorICAgICAg ICBwcmludGYoIlxcS2JhODBfcGEwNiAgICAgICBUcmFuc21pdCBCQTgwOiBQQTZcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTA3OgorICAgICAgICBwcmludGYoIlxcS2Jh ODBfcGEwNyAgICAgICBUcmFuc21pdCBCQTgwOiBQQTdcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfQkE4MF9QQTA4OgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGEwOCAgICAgICBU cmFuc21pdCBCQTgwOiBQQThcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9Q QTA5OgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGEwOSAgICAgICBUcmFuc21pdCBCQTgwOiBQ QTlcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTEwOgorICAgICAgICBw cmludGYoIlxcS2JhODBfcGExMCAgICAgICBUcmFuc21pdCBCQTgwOiBQQTEwXG4iKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfUEExMToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgw X3BhMTEgICAgICAgVHJhbnNtaXQgQkE4MDogUEExMVxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgS19CQTgwX1BBMTI6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTEyICAgICAgIFRy YW5zbWl0IEJBODA6IFBBMTJcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9Q QTEzOgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGExMyAgICAgICBUcmFuc21pdCBCQTgwOiBQ QTEzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfUEExNDoKKyAgICAgICAg cHJpbnRmKCJcXEtiYTgwX3BhMTQgICAgICAgVHJhbnNtaXQgQkE4MDogUEExNFxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMTU6CisgICAgICAgIHByaW50ZigiXFxLYmE4 MF9wYTE1ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMTVcbiIpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIEtfQkE4MF9QQTE2OgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGExNiAgICAgICBU cmFuc21pdCBCQTgwOiBQQTE2XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBf UEExNzoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMTcgICAgICAgVHJhbnNtaXQgQkE4MDog UEExN1xuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BBMTg6CisgICAgICAg IHByaW50ZigiXFxLYmE4MF9wYTE4ICAgICAgIFRyYW5zbWl0IEJBODA6IFBBMThcbiIpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTE5OgorICAgICAgICBwcmludGYoIlxcS2Jh ODBfcGExOSAgICAgICBUcmFuc21pdCBCQTgwOiBQQTE5XG4iKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBLX0JBODBfUEEyMDoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3BhMjAgICAgICAg VHJhbnNtaXQgQkE4MDogUEEyMFxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgw X1BBMjE6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTIxICAgICAgIFRyYW5zbWl0IEJBODA6 IFBBMjFcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QQTIyOgorICAgICAg ICBwcmludGYoIlxcS2JhODBfcGEyMiAgICAgICBUcmFuc21pdCBCQTgwOiBQQTIyXG4iKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfUEEyMzoKKyAgICAgICAgcHJpbnRmKCJcXEti YTgwX3BhMjMgICAgICAgVHJhbnNtaXQgQkE4MDogUEEyM1xuIik7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgS19CQTgwX1BBMjQ6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9wYTI0ICAgICAg IFRyYW5zbWl0IEJBODA6IFBBMjRcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4 MF9QR0ROOgorICAgICAgICBwcmludGYoIlxcS2JhODBfcGdkbiAgICAgICBUcmFuc21pdCBCQTgw OiBQYWdlIERvd25cbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9QR1VQOgor ICAgICAgICBwcmludGYoIlxcS2JhODBfcGd1cCAgICAgICBUcmFuc21pdCBCQTgwOiBQYWdlIFVw XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfUElDSzoKKyAgICAgICAgcHJp bnRmKCJcXEtiYTgwX3BpY2sgICAgICAgVHJhbnNtaXQgQkE4MDogUGlja1xuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19CQTgwX1BSSU5UOgorICAgICAgICBwcmludGYoIlxcS2JhODBf cHJpbnQgICAgICBUcmFuc21pdCBCQTgwOiBQcmludFxuIik7CisgICAgICAgIGJyZWFrOworICAg IGNhc2UgS19CQTgwX1BVVDoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3B1dCAgICAgICAgVHJh bnNtaXQgQkE4MDogUHV0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfUkVG UkVTSDoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3JlZnJlc2ggICAgVHJhbnNtaXQgQkE4MDog UmVmcmVzaCBcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9SRVNFVDoKKyAg ICAgICAgcHJpbnRmKCJcXEtiYTgwX3Jlc2V0ICAgICAgVHJhbnNtaXQgQkE4MDogUmVzZXRcbiIp OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9SVUJPVVQ6CisgICAgICAgIHByaW50 ZigiXFxLYmE4MF9ydWJvdXQgICAgIFRyYW5zbWl0IEJBODA6IFJ1Ym91dFxuIik7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgS19CQTgwX1NBVkU6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9z YXZlICAgICAgIFRyYW5zbWl0IEJBODA6IFNhdmVcbiIpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIEtfQkE4MF9TT0ZUS0VZMToKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3NvZnRrZXkxICAg VHJhbnNtaXQgQkE4MDogU29mdGtleSAxXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBL X0JBODBfU09GVEtFWTI6CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5MiAgIFRyYW5z bWl0IEJBODA6IFNvZnRrZXkgMlxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgw X1NPRlRLRVkzOgorICAgICAgICBwcmludGYoIlxcS2JhODBfc29mdGtleTMgICBUcmFuc21pdCBC QTgwOiBTb2Z0a2V5IDNcbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9TT0ZU S0VZNDoKKyAgICAgICAgcHJpbnRmKCJcXEtiYTgwX3NvZnRrZXk0ICAgVHJhbnNtaXQgQkE4MDog U29mdGtleSA0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfU09GVEtFWTU6 CisgICAgICAgIHByaW50ZigiXFxLYmE4MF9zb2Z0a2V5NSAgIFRyYW5zbWl0IEJBODA6IFNvZnRr ZXkgNVxuIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1NPRlRLRVk2OgorICAg ICAgICBwcmludGYoIlxcS2JhODBfc29mdGtleTYgICBUcmFuc21pdCBCQTgwOiBTb2Z0a2V5IDZc biIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEtfQkE4MF9TT0ZUS0VZNzoKKyAgICAgICAg cHJpbnRmKCJcXEtiYTgwX3NvZnRrZXk3ICAgVHJhbnNtaXQgQkE4MDogU29mdGtleSA3XG4iKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBLX0JBODBfU09GVEtFWTg6CisgICAgICAgIHByaW50 ZigiXFxLYmE4MF9zb2Z0a2V5OCAgIFRyYW5zbWl0IEJBODA6IFNvZnRrZXkgOFxuIik7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgS19CQTgwX1NPRlRLRVk5OgorICAgICAgICBwcmludGYoIlxc S2JhODBfc29mdGtleTkgICBUcmFuc21pdCBCQTgwOiBTb2Z0a2V5IDlcbiIpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIEtfQkE4MF9VTkRPOgorICAgICAgICBwcmludGYoIlxcS2JhODBfdW5k byAgICAgICBUcmFuc21pdCBCQTgwOiBVbmRvXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgY2FzZSAgS19JMzFfRjAxOgorICAgICAgICBwcmludGYoIlxcS2kzMV9mMDEgICAgICAgICBU cmFuc21pdCBJQk0gMzF4eDogRjFcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBL X0kzMV9GMDI6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YwMiAgICAgICAgIFRy YW5zbWl0IElCTSAzMXh4OiBGMlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtf STMxX0YwMzogICAgICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjAzICAgICAgICAgVHJh bnNtaXQgSUJNIDMxeHg6IEYzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19J MzFfRjA0OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMDQgICAgICAgICBUcmFu c21pdCBJQk0gMzF4eDogRjRcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kz MV9GMDU6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YwNSAgICAgICAgIFRyYW5z bWl0IElCTSAzMXh4OiBGNVxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMx X0YwNjogICAgICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjA2ICAgICAgICAgVHJhbnNt aXQgSUJNIDMxeHg6IEY2XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFf RjA3OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMDcgICAgICAgICBUcmFuc21p dCBJQk0gMzF4eDogRjdcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9G MDg6ICAgICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2YwOCAgICAgICAgIFRyYW5zbWl0 IElCTSAzMXh4OiBGOFxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMxX0Yw OTogICAgICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfZjA5ICAgICAgICAgVHJhbnNtaXQg SUJNIDMxeHg6IEY5XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjEw OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTAgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjEwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjEx OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTEgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjExXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjEy OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTIgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjEyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjEz OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTMgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjEzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjE0 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTQgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjE0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjE1 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTUgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjE1XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjE2 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTYgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjE2XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjE3 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTcgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjE3XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjE4 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTggICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjE4XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjE5 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMTkgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjE5XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjIw OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjAgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjIwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjIx OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjEgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjIxXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjIy OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjIgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjIyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjIz OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjMgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjIzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjI0 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjQgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjI0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjI1 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjUgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjI1XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjI2 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjYgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjI2XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjI3 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjcgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjI3XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjI4 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjggICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjI4XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjI5 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMjkgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjI5XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjMw OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMzAgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjMwXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjMx OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMzEgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjMxXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjMy OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMzIgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjMyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjMz OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMzMgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjMzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjM0 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMzQgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjM0XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjM1 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMzUgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjM1XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRjM2 OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9mMzYgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogRjM2XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfUEEx OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9wYTEgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogUEExXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfUEEy OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9wYTIgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogUEEyXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfUEEz OiAgICAgICAgIAorICAgICAgICBwcmludGYoIlxcS2kzMV9wYTMgICAgICAgICBUcmFuc21pdCBJ Qk0gMzF4eDogUEEzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfUkVT RVQ6CisgICAgICAgIHByaW50ZigiXFxLaTMxX3Jlc2V0ICAgICAgIFRyYW5zbWl0IElCTSAzMXh4 OiBSZXNldFxuIik7CisgICAgICAgIGJyZWFrOyAgICAgICAgICAgIAorICAgICAgIGNhc2UgIEtf STMxX0pVTVA6ICAgICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfanVtcCAgICAgICAgVHJh bnNtaXQgSUJNIDMxeHg6IEp1bXBcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBL X0kzMV9DTEVBUjogICAgICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2NsZWFyICAgICAgIFRy YW5zbWl0IElCTSAzMXh4OiBDbGVhclxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2Ug IEtfSTMxX0VSQVNFX0VPRjogICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfZXJhc2VfZW9mICAg VHJhbnNtaXQgSUJNIDMxeHg6IEVyYXNlIHRvIEVuZCBvZiBGaWVsZFxuIik7CisgICAgICAgIGJy ZWFrOworICAgICAgIGNhc2UgIEtfSTMxX0VSQVNFX0VPUDogICAKKyAgICAgICAgcHJpbnRmKCJc XEtpMzFfZW9wICAgICAgICAgVHJhbnNtaXQgSUJNIDMxeHg6IEVyYXNlIHRvIEVuZCBvZiBQYWdl XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfRVJBU0VfSU5QOiAgIAor ICAgICAgICBwcmludGYoIlxcS2kzMV9pbnAgICAgICAgICBUcmFuc21pdCBJQk0gMzF4eDogRXJh c2UgSW5wdXQgT3BlcmF0aW9uXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19J MzFfSU5TRVJUX0NIQVI6IAorICAgICAgICBwcmludGYoIlxcS2kzMV9pbnNfY2hhciAgICBUcmFu c21pdCBJQk0gMzF4eDogSW5zZXJ0IENoYXJhY3RlclxuIik7CisgICAgICAgIGJyZWFrOworICAg ICAgIGNhc2UgIEtfSTMxX0lOU0VSVF9TUEFDRToKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfaW5z X3NwYWNlICAgVHJhbnNtaXQgSUJNIDMxeHg6IEluc2VydCBTcGFjZVxuIik7CisgICAgICAgIGJy ZWFrOworICAgICAgIGNhc2UgIEtfSTMxX0RFTEVURTogICAgICAKKyAgICAgICAgcHJpbnRmKCJc XEtpMzFfZGVsZXRlICAgICAgVHJhbnNtaXQgSUJNIDMxeHg6IERlbGV0ZSBDaGFyYWN0ZXJcbiIp OworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9JTlNfTE46ICAgICAgCisgICAg ICAgIHByaW50ZigiXFxLaTMxX2luc19saW5lICAgIFRyYW5zbWl0IElCTSAzMXh4OiBJbnNlcnQg TGluZVxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMxX0RFTF9MTjogICAg ICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfZGVsX2xuICAgICAgVHJhbnNtaXQgSUJNIDMxeHg6 IERlbGV0ZSBMaW5lXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19JMzFfUFJJ TlRfTElORTogIAorICAgICAgICBwcmludGYoIlxcS2kzMV9wcnRfbGluZSAgICBUcmFuc21pdCBJ Qk0gMzF4eDogUHJpbnQgTGluZVxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtf STMxX1BSSU5UX01TRzogICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfcHJ0X21zZyAgICAgVHJh bnNtaXQgSUJNIDMxeHg6IFByaW50IE1lc3NhZ2VcbiIpOworICAgICAgICBicmVhazsKKyAgICAg ICBjYXNlICBLX0kzMV9QUklOVF9TSElGVDogCisgICAgICAgIHByaW50ZigiXFxLaTMxX3BydF9z aGlmdCAgIFRyYW5zbWl0IElCTSAzMXh4OiBQcmludCBTaGlmdFxuIik7CisgICAgICAgIGJyZWFr OworICAgICAgIGNhc2UgIEtfSTMxX0NBTkNFTDogICAgICAKKyAgICAgICAgcHJpbnRmKCJcXEtp MzFfY2FuY2VsICAgICAgVHJhbnNtaXQgSUJNIDMxeHg6IENhbmNlbFxuIik7CisgICAgICAgIGJy ZWFrOworICAgICAgIGNhc2UgIEtfSTMxX1NFTkRfTElORTogICAKKyAgICAgICAgcHJpbnRmKCJc XEtpMzFfc2VuZF9saW5lICAgVHJhbnNtaXQgSUJNIDMxeHg6IFNlbmQgTGluZVxuIik7CisgICAg ICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMxX1NFTkRfTVNHOiAgICAKKyAgICAgICAgcHJp bnRmKCJcXEtpMzFfc2VuZF9tc2cgICAgVHJhbnNtaXQgSUJNIDMxeHg6IFNlbmQgTWVzc2FnZVxu Iik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMxX1NFTkRfUEFHRTogICAKKyAg ICAgICAgcHJpbnRmKCJcXEtpMzFfc2VuZF9wYWdlICAgVHJhbnNtaXQgSUJNIDMxeHg6IFNlbmQg UGFnZVxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfSTMxX0hPTUU6ICAgICAg ICAKKyAgICAgICAgcHJpbnRmKCJcXEtpMzFfaG9tZSAgICAgICAgVHJhbnNtaXQgSUJNIDMxeHg6 IEhvbWVcbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX0kzMV9CQUNLX1RBQjog ICAgCisgICAgICAgIHByaW50ZigiXFxLaTMxX2JhY2tfdGFiICAgIFRyYW5zbWl0IElCTSAzMXh4 OiBCYWNrIFRhYlxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfU1VOX1NUT1A6 IAorICAgICAgICBwcmludGYoIlxcS3N1bnN0b3AgICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29s ZTogU3RvcFxuIik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfU1VOX0FHQUlOOgor ICAgICAgICBwcmludGYoIlxcS3N1bmFnYWluICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTog QWdhaW5cbiIpOworICAgICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX1NVTl9QUk9QUzoKKyAg ICAgICAgcHJpbnRmKCJcXEtzdW5wcm9wcyAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IFBy b3BzXG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19TVU5fVU5ETzogCisgICAg ICAgIHByaW50ZigiXFxLc3VudW5kbyAgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBVbmRv XG4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSAgS19TVU5fRlJPTlQ6CisgICAgICAg IHByaW50ZigiXFxLc3VuZnJvbnQgICAgICAgIFRyYW5zbWl0IFNVTiBDb25zb2xlOiBGcm9udFxu Iik7CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfU1VOX0NPUFk6IAorICAgICAgICBw cmludGYoIlxcS3N1bmNvcHkgICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogQ29weVxuIik7 CisgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfU1VOX09QRU46IAorICAgICAgICBwcmlu dGYoIlxcS3N1bm9wZW4gICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogT3BlblxuIik7Cisg ICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgIEtfU1VOX1BBU1RFOgorICAgICAgICBwcmludGYo IlxcS3N1bnBhc3RlICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogUGFzdGVcbiIpOworICAg ICAgICBicmVhazsKKyAgICAgICBjYXNlICBLX1NVTl9GSU5EOiAKKyAgICAgICAgcHJpbnRmKCJc XEtzdW5maW5kICAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IEZpbmRcbiIpOworICAgICAg ICBicmVhazsKKyAgICAgICBjYXNlICBLX1NVTl9DVVQ6ICAKKyAgICAgICAgcHJpbnRmKCJcXEtz dW5jdXQgICAgICAgICAgVHJhbnNtaXQgU1VOIENvbnNvbGU6IEN1dFxuIik7CisgICAgICAgIGJy ZWFrOworICAgICAgIGNhc2UgIEtfU1VOX0hFTFA6IAorICAgICAgICBwcmludGYoIlxcS3N1bmhl bHAgICAgICAgICBUcmFuc21pdCBTVU4gQ29uc29sZTogSGVscFxuIik7CisgICAgICAgIGJyZWFr OworCisgICAgICAgZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCJObyBhZGRpdGlvbmFsIGhlbHAg YXZhaWxhYmxlIGZvciB0aGlzIGt2ZXJiXG4iKTsKKyAgfQorICAgIHByaW50ZigiXG4iKTsKKwor ICAgIC8qIFRoaXMgaXMgbm90IHRoZSBwcm9wZXIgd2F5IHRvIGRvIGl0IHNpbmNlIGl0IGRvZXNu J3Qgc2hvdyAgKi8KKyAgICAvKiBhbGwgZW11bGF0aW9ucywgbm9yIGRvZXMgaXQgc2hvdyB0aGUg c3BlY2lhbCBtb2RlcywgYnV0IGl0ICovCisgICAgLyogaXMgYmV0dGVyIHRoYW4gbm90aGluZy4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgcHJpbnRmKCJDdXJy ZW50IGJpbmRpbmdzOlxuIik7CisgICAgZm91bmQgPSAwOworICAgIGZvciAoaSA9IDI1NjsgaSA8 IEtNU0laRSA7IGkrKykgeworICAgICAgICBjb25fZXZlbnQgZXZ0ID0gbWFwa2V5KGkpOworICAg ICAgICBpZiAoZXZ0LnR5cGUgIT0ga3ZlcmIpCisgICAgICAgICAgY29udGludWU7CisgICAgICAg IGlmICgoZXZ0Lmt2ZXJiLmlkICYgfkZfS1ZFUkIpID09IHh4KSB7CisgICAgICAgICAgICBmb3Vu ZCA9IDE7CisgICAgICAgICAgICBwcmludGYoIiAgXFwlLTRkIC0gJXNcbiIsaSxrZXluYW1lKGkp KTsKKyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBPUzJNT1VTRQorICAgIGZvciAoIGJ1dHRvbiA9 IDAgOyBidXR0b24gPCBNTUJVVFRPTk1BWCA7IGJ1dHRvbisrICkKKyAgICAgIGZvciAoIGV2ZW50 ID0gMCA7IGV2ZW50IDwgTU1FVkVOVFNJWkUgOyBldmVudCsrICkKKyAgICAgICAgaWYgKCBtb3Vz ZW1hcFtidXR0b25dW2V2ZW50XS50eXBlID09IGt2ZXJiICkgeworICAgICAgICAgICAgaWYgKCAo bW91c2VtYXBbYnV0dG9uXVtldmVudF0ua3ZlcmIuaWQgJiB+Rl9LVkVSQikgPT0geHggKSB7Cisg ICAgICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgICAgIHByaW50ZigiICBNb3Vz ZSAtICVzXG4iLG1vdXNlbmFtZShidXR0b24sZXZlbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorI2VuZGlmIC8qIE9TMk1PVVNFICovCisKKyAgICBpZiAoICFmb3VuZCApIHsKKyAgICAg ICAgcHJpbnRmKCIgIChub25lKVxuIik7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRp ZiAvKiBOT0tWRVJCUyAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PWEZFUgorLyog IEQgTyBIIFIgTSBUICAtLSAgR2l2ZSBoZWxwIGFib3V0IFJFTU9URSBjb21tYW5kICAqLworCitz dGF0aWMgY2hhciAqaHJzZXRbXSA9IHsKKyJTeW50YXg6ICBSRU1PVEUgU0VUIHBhcmFtZXRlciB2 YWx1ZSIsCisiRXhhbXBsZTogUkVNT1RFIFNFVCBGSUxFIFRZUEUgQklOQVJZIiwKKyIgIEFza3Mg dGhlIEtlcm1pdCBzZXJ2ZXIgdG8gc2V0IHRoZSBuYW1lZCBwYXJhbWV0ZXIgdG8gdGhlIGdpdmVu IHZhbHVlLiIsCisiICBFcXVpdmFsZW50IHRvIHR5cGluZyB0aGUgY29ycmVzcG9uZGluZyBTRVQg Y29tbWFuZCBkaXJlY3RseSB0byB0aGUgb3RoZXIiLAorIiAgS2VybWl0IGlmIGl0IHdlcmUgaW4g aW50ZXJhY3RpdmUgbW9kZS4iLCAiIiB9OworCitpbnQKK2RvaHJtdCh4eCkgaW50IHh4OyB7Cisg ICAgaW50IHg7CisgICAgaWYgKHh4ID09IC0zKSByZXR1cm4oaG1zZ2EoaG1ocm10KSk7CisgICAg aWYgKHh4IDwgMCkgcmV0dXJuKHh4KTsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKKyAgICBzd2l0Y2ggKHh4KSB7CisKK2Nhc2UgWFpDUFk6CisgICAgcmV0dXJuKGhtc2co IlN5bnRheDogUkVNT1RFIENPUFkgc291cmNlIGRlc3RpbmF0aW9uXG5cCisgIEFza3MgdGhlIEtl cm1pdCBzZXJ2ZXIgdG8gY29weSB0aGUgc291cmNlIGZpbGUgdG8gZGVzdGluYXRpb24uXG5cCisg IFN5bm9ueW06IFJDT1BZLiIpKTsKKworY2FzZSBYWkNXRDoKKyNpZmRlZiBORVdGVFAKKyAgICBy ZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgQ0QgWyBuYW1lIF1cblwKKyAgQXNrcyB0aGUgS2Vy bWl0IG9yIEZUUCBzZXJ2ZXIgdG8gY2hhbmdlIGl0cyB3b3JraW5nIGRpcmVjdG9yeSBvciBkZXZp Y2UuXG5cCisgIElmIHRoZSBkZXZpY2Ugb3IgZGlyZWN0b3J5IG5hbWUgaXMgb21pdHRlZCwgcmVz dG9yZSB0aGUgZGVmYXVsdC5cblwKKyAgU3lub255bTogUkNELiIpKTsKKyNlbHNlCisgICAgcmV0 dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIENEIFsgbmFtZSBdXG5cCisgIEFza3MgdGhlIEtlcm1p dCBzZXJ2ZXIgdG8gY2hhbmdlIGl0cyB3b3JraW5nIGRpcmVjdG9yeSBvciBkZXZpY2UuXG5cCisg IElmIHRoZSBkZXZpY2Ugb3IgZGlyZWN0b3J5IG5hbWUgaXMgb21pdHRlZCwgcmVzdG9yZSB0aGUg ZGVmYXVsdC5cblwKKyAgU3lub255bTogUkNELiIpKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwor Y2FzZSBYWkRFTDoKKyNpZmRlZiBORVdGVFAKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1P VEUgREVMRVRFIGZpbGVzcGVjXG5cCisgIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2VydmVyIHRv IGRlbGV0ZSB0aGUgbmFtZWQgZmlsZShzKS5cblwKKyAgU3lub255bTogUkRFTC4iKSk7CisjZWxz ZQorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBERUxFVEUgZmlsZXNwZWNcblwKKyAg QXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBkZWxldGUgdGhlIG5hbWVkIGZpbGUocykuXG5cCisg IFN5bm9ueW06IFJERUwuIikpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCitjYXNlIFhaTUtEOgor I2lmZGVmIE5FV0ZUUAorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBNS0RJUiBkaXJl Y3RvcnktbmFtZVxuXAorICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQIHNlcnZlciB0byBjcmVhdGUg dGhlIG5hbWVkIGRpcmVjdG9yeS5cblwKKyAgU3lub255bTogUk1LRElSLiIpKTsKKyNlbHNlCisg ICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIE1LRElSIGRpcmVjdG9yeS1uYW1lXG5cCisg IEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gY3JlYXRlIHRoZSBuYW1lZCBkaXJlY3RvcnkuXG5c CisgIFN5bm9ueW06IFJNS0RJUi4iKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisKK2Nhc2UgWFpS TUQ6CisjaWZkZWYgTkVXRlRQCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIFJNRElS IGRpcmVjdG9yeS1uYW1lXG5cCisgIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2VydmVyIHRvIHJl bW92ZSB0aGUgbmFtZWQgZGlyZWN0b3J5LlxuXAorICBTeW5vbnltOiBSUk1ESVIuIikpOworI2Vs c2UKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgUk1ESVIgZGlyZWN0b3J5LW5hbWVc blwKKyAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byByZW1vdmUgdGhlIG5hbWVkIGRpcmVjdG9y eS5cblwKKyAgU3lub255bTogUlJNRElSLiIpKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKworY2Fz ZSBYWkRJUjoKKyNpZmRlZiBORVdGVFAKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUg RElSRUNUT1JZIFsgZmlsZXNwZWMgXVxuXAorICBBc2tzIHRoZSBLZXJtaXQgb3IgRlRQIHNlcnZl ciB0byBwcm92aWRlIGEgZGlyZWN0b3J5IGxpc3Rpbmcgb2YgdGhlIG5hbWVkXG5cCisgIGZpbGUo cykgb3IgaWYgbm8gZmlsZSBzcGVjaWZpY2F0aW9uIGlzIGdpdmVuLCBvZiBhbGwgZmlsZXMgaW4g aXRzIGN1cnJlbnRcblwKKyAgZGlyZWN0b3J5LiAgU3lub255bTogUkRJUi4iKSk7CisjZWxzZQor ICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBESVJFQ1RPUlkgWyBmaWxlc3BlYyBdXG5c CisgIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gcHJvdmlkZSBhIGRpcmVjdG9yeSBsaXN0aW5n IG9mIHRoZSBuYW1lZFxuXAorICBmaWxlKHMpIG9yIGlmIG5vIGZpbGUgc3BlY2lmaWNhdGlvbiBp cyBnaXZlbiwgb2YgYWxsIGZpbGVzIGluIGl0cyBjdXJyZW50XG5cCisgIGRpcmVjdG9yeS4gIFN5 bm9ueW06IFJESVIuIikpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCitjYXNlIFhaSExQOgorI2lm ZGVmIE5FV0ZUUAorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBIRUxQXG5cCisgIEFz a3MgdGhlIEtlcm1pdCBvciBGVFAgc2VydmVyIHRvIGxpc3QgdGhlIHNlcnZpY2VzIGl0IHByb3Zp ZGVzLlxuXAorICBTeW5vbnltOiBSSEVMUC4iKSk7CisjZWxzZQorICAgIHJldHVybihobXNnKCJT eW50YXg6IFJFTU9URSBIRUxQXG5cCisgIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gbGlzdCB0 aGUgc2VydmljZXMgaXQgcHJvdmlkZXMuXG5cCisgIFN5bm9ueW06IFJIRUxQLiIpKTsKKyNlbmRp ZiAvKiBORVdGVFAgKi8KKworY2FzZSBYWkhPUzoKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBS RU1PVEUgSE9TVCBjb21tYW5kXG5cCisgIFNlbmRzIGEgY29tbWFuZCB0byB0aGUgb3RoZXIgY29t cHV0ZXIgaW4gaXRzIG93biBjb21tYW5kIGxhbmd1YWdlXG5cCisgIHRocm91Z2ggdGhlIEtlcm1p dCBzZXJ2ZXIgdGhhdCBpcyBydW5uaW5nIG9uIHRoYXQgaG9zdC4gIFN5bm9ueW06IFJIT1NULiIp KTsKKworI2lmbmRlZiBOT0ZSSUxMUworY2FzZSBYWktFUjoKKyAgICByZXR1cm4oaG1zZygiU3lu dGF4OiBSRU1PVEUgS0VSTUlUIGNvbW1hbmRcblwKKyAgU2VuZHMgYSBjb21tYW5kIHRvIHRoZSBy ZW1vdGUgS2VybWl0IHNlcnZlciBpbiBpdHMgb3duIGNvbW1hbmQgbGFuZ3VhZ2UuXG5cCisgIFN5 bm9ueW06IFJLRVJNSVQuIikpOworCitjYXNlIFhaTEdJOgorICAgIHJldHVybihobXNnKCJTeW50 YXg6IFJFTU9URSBMT0dJTiB1c2VyIHBhc3N3b3JkIFsgYWNjb3VudCBdXG5cCisgIExvZ3MgaW4g dG8gYSByZW1vdGUgS2VybWl0IHNlcnZlciB0aGF0IHJlcXVpcmVzIHlvdSBsb2dpbi4gIE5vdGU6 IFJMT0dJTlxuXAorICBpcyBOT1QgYSBzeW5vbnltIGZvciBSRU1PVEUgTE9HSU4uIikpOworCitj YXNlIFhaTEdPOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9URSBMT0dPVVRcblwKKyAg TG9ncyBvdXQgZnJvbSBhIHJlbW90ZSBLZXJtaXQgc2VydmVyIHRvIHdoaWNoIHlvdSBoYXZlIHBy ZXZpb3VzbHkgbG9nZ2VkIGluLiIKKykpOworCitjYXNlIFhaTVNHOgorICAgIHJldHVybihobXNn KCJTeW50YXg6IFJFTU9URSBNRVNTQUdFIHRleHRcblwKKyAgU2VuZHMgYSBzaG9ydCB0ZXh0IG1l c3NhZ2UgdG8gdGhlIHJlbW90ZSBLZXJtaXQgc2VydmVyLiIpKTsKKworY2FzZSBYWlBSSToKKyAg ICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgUFJJTlQgZmlsZXNwZWMgWyBvcHRpb25zIF1c blwKKyAgU2VuZHMgdGhlIHNwZWNpZmllZCBmaWxlKHMpIHRvIHRoZSByZW1vdGUgS2VybWl0IGFu ZCBhc2sgaXQgdG8gaGF2ZSB0aGVcblwKKyAgZmlsZSBwcmludGVkIG9uIHRoZSByZW1vdGUgc3lz dGVtJ3MgcHJpbnRlciwgdXNpbmcgYW55IHNwZWNpZmllZCBvcHRpb25zLlxuXAorICBTeW5vbnlt OiBSUFJJTlQuIikpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisKK2Nhc2UgWFpSRU46CisjaWZk ZWYgTkVXRlRQCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIFJFTkFNRSBmaWxlc3Bl YyBuZXduYW1lXG5cCisgIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2VydmVyIHRvIHJlbmFtZSB0 aGUgZmlsZS4gIFN5bm9ueW06IFJSRU5BTUUuIikpOworI2Vsc2UKKyAgICByZXR1cm4oaG1zZygi U3ludGF4OiBSRU1PVEUgUkVOQU1FIGZpbGVzcGVjIG5ld25hbWVcblwKKyAgQXNrcyB0aGUgS2Vy bWl0IHNlcnZlciB0byByZW5hbWUgdGhlIGZpbGUuICBTeW5vbnltOiBSUkVOQU1FLiIpKTsKKyNl bmRpZiAvKiBORVdGVFAgKi8KKworY2FzZSBYWlNFVDoKKyAgICByZXR1cm4oaG1zZ2EoaHJzZXQp KTsKKworY2FzZSBYWlNQQToKKyAgICByZXR1cm4oaG1zZygiU3ludGF4OiBSRU1PVEUgU1BBQ0Ug WyBuYW1lIF1cblwKKyAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byB0ZWxsIHlvdSBhYm91dCBp dHMgZGlzayBzcGFjZSBvbiB0aGUgY3VycmVudFxuXAorICBkaXNrIG9yIGRpcmVjdG9yeSwgb3Ig aW4gdGhlIG9uZSB0aGF0IHlvdSBuYW1lLiAgU3lub255bTogUlNQQUNFLiIpKTsKKworI2lmbmRl ZiBOT0ZSSUxMUworY2FzZSBYWlRZUDoKKyNpZmRlZiBORVdGVFAKKyAgICByZXR1cm4oaG1zZygi U3ludGF4OiBSRU1PVEUgVFlQRSBmaWxlXG5cCisgIEFza3MgdGhlIEtlcm1pdCBvciBGVFAgc2Vy dmVyIHRvIHNlbmQgdGhlIG5hbWVkIGZpbGUgdG8geW91ciBzY3JlZW4uXG5cCisgIFN5bm9ueW06 IFJUWVBFLiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIFRZUEUg ZmlsZVxuXAorICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIHNlbmQgdGhlIG5hbWVkIGZpbGUo cykgdG8geW91ciBzY3JlZW4uXG5cCisgIFN5bm9ueW06IFJUWVBFLiIpKTsKKyNlbmRpZiAvKiBO RVdGVFAgKi8KKworCitjYXNlIFhaV0hPOgorICAgIHJldHVybihobXNnKCJTeW50YXg6IFJFTU9U RSBXSE8gWyBuYW1lIF1cblwKKyAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBsaXN0IHdobydz IGxvZ2dlZCBpbiwgb3IgdG8gZ2l2ZSBpbmZvcm1hdGlvblxuXAorICBhYm91dCB0aGUgbmFtZWQg dXNlci4gIFN5bm9ueW06IFJXSE8uIikpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZm5k ZWYgTk9TUEwKK2Nhc2UgWFpRVUU6CisgICAgcmV0dXJuKGhtc2coCisiU3ludGF4OiBbIFJFTU9U RSBdIFFVRVJZIHsgS0VSTUlULCBTWVNURU0sIFVTRVIgfSB2YXJpYWJsZS1uYW1lXG5cCisgIEFz a3MgdGhlIEtlcm1pdCBzZXJ2ZXIgdG8gc2VuZCB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIHZhcmlh YmxlIG9mIHRoZVxuXAorICBnaXZlbiB0eXBlLCBhbmQgbWFrZSBpdCBhdmFpbGFibGUgaW4gdGhl IFxcdihxdWVyeSkgdmFyaWFibGUuICBXaGVuIHRoZVxuXAorICB0eXBlIGlzIEtFUk1JVCBmdW5j dGlvbnMgbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGlmIHRoZXkgd2VyZSB2YXJpYWJsZXMuIikp OworCitjYXNlIFhaQVNHOgorICAgIHJldHVybihobXNnKAorIlN5bnRheDogUkVNT1RFIEFTU0lH TiB2YXJpYWJsZS1uYW1lIFsgdmFsdWUgXVxuXAorICBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0 byB0aGUgbmFtZWQgZ2xvYmFsIHZhcmlhYmxlIG9uIHRoZSBzZXJ2ZXIuXG5cCisgIFN5bm9ueW1z OiBSQVNHLCBSQVNTSUdOLiIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitjYXNlIFhaUFdEOgor ICAgIHJldHVybihobXNnKAorI2lmZGVmIE5FV0ZUUAorIlN5bnRheDogUkVNT1RFIFBXRFxuXAor ICBBc2tzIHRoZSBLZXJtaXQgc2VydmVyIHRvIGRpc3BsYXkgaXRzIGN1cnJlbnQgd29ya2luZyBk aXJlY3RvcnkuXG5cCisgIFN5bm9ueW06IFJQV0QuIikpOworI2Vsc2UKKyJTeW50YXg6IFJFTU9U RSBQV0RcblwKKyAgQXNrcyB0aGUgS2VybWl0IG9yIEZUUCBzZXJ2ZXIgdG8gZGlzcGxheSBpdHMg Y3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cblwKKyAgU3lub255bTogUlBXRC4iKSk7CisjZW5k aWYgLyogTkVXRlRQICovCisKK2Nhc2UgWFpYSVQ6CisjaWZkZWYgTkVXRlRQCisgICAgcmV0dXJu KGhtc2coIlN5bnRheDogUkVNT1RFIEVYSVRcblwKKyAgIEFza3MgdGhlIEtlcm1pdCBzZXJ2ZXIg dG8gZXhpdCAod2l0aG91dCBkaXNjb25uZWN0aW5nKSwgb3IgY2xvc2VzIGFuIEZUUFxuXAorICAg Y29ubmVjdGlvbi4gIFN5bm9ueW06IFJFWElULCBhbmQgKGZvciBGVFAgb25seSkgQllFLCBGVFAg QllFLiIpKTsKKyNlbHNlCisgICAgcmV0dXJuKGhtc2coIlN5bnRheDogUkVNT1RFIEVYSVRcblwK KyAgQXNrcyB0aGUgS2VybWl0IHNlcnZlciB0byBleGl0LiAgU3lub255bTogUkVYSVQuIikpOwor I2VuZGlmIC8qIE5FV0ZUUCAqLworCitkZWZhdWx0OgorICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOworICAgIHByaW50ZigiP1NvcnJ5LCBubyBoZWxwIGF2YWlsYWJsZSAtIFwi JXNcIlxuIixjbWRidWYpOworICAgIHJldHVybigtOSk7CisgICAgfQorfQorI2VuZGlmIC8qIE5P WEZFUiAqLworI2VuZGlmIC8qIE5PSEVMUCAqLworI2VuZGlmIC8qIE5PSUNQICovCgpkaWZmIC0t Z2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czMuYyBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMzLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4N2IzNAotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJt aXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXMzLmMKQEAgLTAsMCArMSwxMzYy OSBAQAorI2lmZGVmIFNTSFRFU1QKKyNkZWZpbmUgU1NIQlVJTFRJTgorI2VuZGlmIC8qIFNTSFRF U1QgKi8KKworI2luY2x1ZGUgImNrY3N5bS5oIiAgICAgICAgICAgICAgICAgICAgIC8qIFN5bWJv bCBkZWZpbml0aW9ucyAqLworCisvKiAgQyBLIFUgVSBTIDMgLS0gICJVc2VyIEludGVyZmFjZSIg Zm9yIEMtS2VybWl0LCBwYXJ0IDMgICovCisKKy8qCisgIEF1dGhvcnM6CisgICAgRnJhbmsgZGEg Q3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUgS2VybWl0IFByb2plY3QsIENvbHVt YmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBKZWZmcmV5IEUgQWx0bWFuIDxqYWx0 bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMuLCBO ZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAorICAgIFRydXN0ZWVz IG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxs IHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0 aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFp bWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qICBTRVQgY29tbWFuZCAoYnV0IG11Y2ggbWF0 ZXJpYWwgaGFzIGJlZW4gc3BsaXQgb2ZmIGludG8gY2t1dXM3LmMpLiAqLworCisvKgorICBLZXJt aXQtc3BlY2lmaWMgaW5jbHVkZXMuCisgIERlZmluaXRpb25zIGhlcmUgc3VwZXJzZWRlIHRob3Nl IGZyb20gc3lzdGVtIGluY2x1ZGUgZmlsZXMuCisqLworI2luY2x1ZGUgImNrY2RlYi5oIiAgICAg ICAgICAgICAgICAgICAgIC8qIERlYnVnZ2luZyAmIGNvbXBpbGVyIHRoaW5ncyAqLworI2luY2x1 ZGUgImNrY2FzYy5oIiAgICAgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGNoYXJhY3RlciBzeW1i b2xzICovCisjaW5jbHVkZSAiY2tja2VyLmgiICAgICAgICAgICAgICAgICAgICAgLyogS2VybWl0 IGFwcGxpY2F0aW9uIGRlZmluaXRpb25zICovCisjaW5jbHVkZSAiY2tjeGxhLmgiICAgICAgICAg ICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldCB0cmFuc2xhdGlvbiAqLworI2luY2x1ZGUgImNr Y25ldC5oIiAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgc3ltYm9scyAqLworCitjaGFy IHB3YnVmW1BXQlVGTCsxXSAgPSB7IE5VTCwgTlVMIH07CitpbnQgcHdmbGcgPSAwOworaW50IHB3 Y3J5cHQgPSAwOworCisjaWZuZGVmIE5PSUNQCisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgor I2luY2x1ZGUgImNrdWF0aC5oIgorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZk ZWYgQ0tfU1NMCisjaW5jbHVkZSAiY2tfc3NsLmgiCisjZW5kaWYgLyogQ0tfU1NMICovCisjaW5j bHVkZSAiY2t1dXNyLmgiICAgICAgICAgICAgICAgICAgICAgLyogVXNlciBpbnRlcmZhY2Ugc3lt Ym9scyAqLworI2lmZGVmIE9TMgorI2luY2x1ZGUgImNrY3VuaS5oIgorI2lmZGVmIFNTSEJVSUxU SU4KKyNpbmNsdWRlICJja29zc2guaCIKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYg Q0tfTkVUQklPUworI2luY2x1ZGUgPG9zMi5oPgorI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFdvdWxkIHlvdSBiZWxpZXZlICovCisjdW5kZWYgQ09NTUVOVCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogPG9zMi5oPiBkZWZpbmVzIHRoaXMgPyAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyNpbmNsdWRlICJja29uYmkuaCIKK2V4dGVybiBVQ0hBUiBOZXRCaW9z QWRhcHRlcjsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisjaW5jbHVkZSAiY2tvY29uLmgiCisj aW5jbHVkZSAiY2tva2V5LmgiCisjaWZuZGVmIE5PVEVSTQorZXh0ZXJuIHVuc2lnbmVkIGNoYXIg Y29sb3JjbWQ7ICAvKiBDb21tYW5kLXNjcmVlbiBjb2xvcnMgKi8KK2V4dGVybiBzdHJ1Y3Qga2V5 dGFiIHR0eWNscnRhYltdOworZXh0ZXJuIGludCBuY2xyczsKK2V4dGVybiBpbnQgdHRfY29sc1td LCB0dF9yb3dzW10sIHR0X3N6Y2huZ1tdLCB0dF9zdGF0dXNbXTsKKyNlbmRpZiAvKiBOT1RFUk0g Ki8KK19QUk9UT1RZUChpbnQgc2V0cHJ0eSwgKHZvaWQpKTsKK2V4dGVybiBjaGFyIHN0YXJ0dXBk aXJbXSwgZXhlZGlyW107CitleHRlcm4gaW50IHR0X21vZGVjaGc7CisjaWZkZWYgTlQKKyNpbmNs dWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbnRhcC5oIiAg ICAgICAgICAgICAgICAgICAgIC8qIE1pY3Jvc29mdCBUQVBJICovCisjZW5kaWYgLyogTlQgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBPUzIKK2V4dGVybiBjaGFyICogZXhlZGlyOwor I2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tfUkVDQUxMCitleHRlcm4gaW50IGNtX3JldHJ5 OworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCisjaWZkZWYgTkVXRlRQCitleHRlcm4gaW50IGZ0 cGlzb3BlbigpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCitleHRlcm4gaW50IGNtZGludDsKK2V4 dGVybiBpbnQgc3J2aWRsOworCisjaWZkZWYgQ0tGTE9BVAorZXh0ZXJuIENLRkxPQVQgZmxvYXR2 YWw7CQkvKiAoc2VlIGlzZmxvYXQoKSkgKi8KKyNlbmRpZiAvKiBDS0ZMT0FUICovCisKKyNpZm5k ZWYgTk9QVVNICisjaWZuZGVmIE5PRlJJTExTCisjaWZkZWYgVk1TCitjaGFyIGVkaXRvcltDS01B WFBBVEggKyAxXSA9ICJlZGl0IjsKKyNlbHNlCitjaGFyIGVkaXRvcltDS01BWFBBVEggKyAxXSA9 IHsgTlVMLCBOVUwgfTsKKyNlbmRpZiAvKiBWTVMgKi8KK2NoYXIgZWRpdG9wdHNbMTI4XSA9IHsg TlVMLCBOVUwgfTsKK2NoYXIgZWRpdGZpbGVbQ0tNQVhQQVRIICsgMV0gPSB7IE5VTCwgTlVMIH07 CisjaWZkZWYgQlJPV1NFUgorY2hhciBicm93c2VyW0NLTUFYUEFUSCArIDFdID0geyBOVUwsIE5V TCB9OworY2hhciBicm93c29wdHNbMTI4XSA9IHsgTlVMLCBOVUwgfTsKK2NoYXIgYnJvd3N1cmxb NDA5Nl0gPSB7IE5VTCwgTlVMIH07CisjZW5kaWYgLyogQlJPV1NFUiAqLworI2VuZGlmIC8qICBO T0ZSSUxMUyAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworCisjaWZuZGVmIE5PRlJJTExTCisjaWZu ZGVmIE5PUkVOQU1FCitfUFJPVE9UWVAoaW50IHNldHJlbmFtZSwgKHZvaWQpKTsKKyNlbmRpZgkv KiBOT1JFTkFNRSAqLworI2VuZGlmCS8qIE5PRlJJTExTICovCisKKy8qIFZhcmlhYmxlcyAqLwor CitpbnQgY21kX3F1b3RpbmcgPSAxOworaW50IGNtZF9lcnIgPSAxOworZXh0ZXJuIGludCBoaW50 cywgeGNtZHNyYzsKKworI2lmZGVmIENLX0tFUkJFUk9TCitjaGFyICogazRwd3Byb21wdCA9IE5V TEw7ICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNCBwYXNzd29yZCBwcm9tcHQgKi8KK2NoYXIg KiBrNHBycHJvbXB0ID0gTlVMTDsgICAgICAgICAgICAgICAvKiBLZXJiZXJvcyA0IHByaW5jaXBh bCBwcm9tcHQgKi8KK2NoYXIgKiBrNXB3cHJvbXB0ID0gTlVMTDsgICAgICAgICAgICAgICAvKiBL ZXJiZXJvcyA1IHBhc3N3b3JkIHByb21wdCAqLworY2hhciAqIGs1cHJwcm9tcHQgPSBOVUxMOyAg ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDUgcHJpbmNpcGFsIHByb21wdCAqLworI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCisjaWZkZWYgQ0tfU1JQCitjaGFyICogc3JwcHdwcm9tcHQgPSBOVUxM OworI2VuZGlmIC8qIENLX1NSUCAqLworCitleHRlcm4gY2hhciAqIGNrcHJvbXB0LCAqIGlrcHJv bXB0OyAgICAgLyogRGVmYXVsdCBwcm9tcHQgKi8KK2V4dGVybiB4eF9zdHJwIHh4c3RyaW5nOwor CitleHRlcm4gY2hhciAqIGNkbXNnZmlsZVtdLCAqIGNkbXNnc3RyOworCitleHRlcm4gaW50Cisg IGxvY2FsLCBzZXJ2ZXIsIHN1Y2Nlc3MsIGRlc3QsIHNsZWVwY2FuLCBpbnNlcnZlciwgZmxvdywg YXV0b2Zsb3csIGJpbmFyeSwKKyAgcGFyaXR5LCBlc2NhcGUsIHdoYXQsIHR1cm4sIGR1cGxleCwg YmFja2dyZCwgaHdwYXJpdHksIHN0b3BiaXRzLCB0dXJuY2gsCisgIG1kbXR5cCwgbmV0d29yaywg cXVpZXQsIG5ldHR5cGUsIGNhcnJpZXIsIGRlYnNlcywgZGVidGltLCBjZHRpbW8sIG5sYW5ncywK KyAgYmdzZXQsIHBmbGFnLCBtc2dmbGcsIGNtZG1zaywgeHN1c3BlbmQsIHRlY2hvLCBwYWNpbmcs IHhpdHdhcm4sIHhpdHN0YSwKKyAgb3V0ZXNjLCBjbWRfY29scywgY21kX3Jvd3MsIGNreGVjaCwg eGFza21vcmUsIGhhdmVsaW5lLCBkaWRzZXRsaW4sIGlzZ3Vlc3QsCisgIG1kbXNhdiwgY2xlYXJy cSwgc2F2ZWFzaywgZGVibXNnOworCitleHRlcm4gaW50IHJlbGlhYmxlLCBzZXRyZWxpYWJsZSwg bWF0Y2hkb3QsIG1hdGNoZmlmbywgZGlyX2RvdHM7CisKKyNpZm5kZWYgTk9TRVJWRVIKKyAgZXh0 ZXJuIGludCBlbl9wcmk7CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2lmZGVmIElLU0RDT05G CitleHRlcm4gaW50IGlrc2RjZjsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworI2lmZGVmIFRDUFNP Q0tFVAorICBleHRlcm4gaW50IHRuX2V4aXQ7CisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZk ZWYgVE5DT0RFCisgIGNoYXIgKiB0bl9wcl91aWQgPSBOVUxMOworI2VuZGlmIC8qIFROQ09ERSAq LworICBleHRlcm4gaW50IGV4aXRvbmNsb3NlOworCisjaWZuZGVmIE5PS1ZFUkJTCitleHRlcm4g aW50IG5rdmVyYnM7CitleHRlcm4gc3RydWN0IGtleXRhYiBrdmVyYnNbXTsKKyNlbmRpZiAvKiBO T0tWRVJCUyAqLworCitleHRlcm4gaW50IHR0bnByb3RvOyAgICAgICAgICAgICAgICAgICAgLyog TmV0d29yayBwcm90b2NvbCAqLworCitleHRlcm4gY2hhciAqY2NudGFiW107ICAgICAgICAgICAg ICAgICAgLyogTmFtZXMgb2YgY29udHJvbCBjaGFycyAqLworCisjaWZkZWYgQ0tfQVBDCitleHRl cm4gaW50IGFwY2FjdGl2ZSwgYXBjc3RhdHVzOworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZu ZGVmIE5PU0NSSVBUCitleHRlcm4gaW50IHNlY2hvOyAgICAgICAgICAgICAgICAgICAgICAgLyog V2hldGhlciBTQ1JJUFQgY21kIHNob3VsZCBlY2hvICovCisjZW5kaWYgLyogTk9TQ1JJUFQgKi8K KworI2lmZGVmIERDTURCVUYKK2V4dGVybiBjaGFyICphdG1idWYsICphdHhidWY7CisjZWxzZQor ZXh0ZXJuIGNoYXIgYXRtYnVmW10sIGF0eGJ1ZltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KK2V4 dGVybiBpbnQgY21mbGdzOworCitleHRlcm4gY2hhciBwc2F2ZVtdOworZXh0ZXJuIGNoYXIgdWlk YnVmW107CitleHRlcm4gaW50ICBzbF91aWRfc2F2ZWQ7CitpbnQgRGVsZXRlU3RhcnR1cEZpbGUg PSAwOworCitleHRlcm4gaW50IGNtZGx2bDsgICAgICAgICAgICAgICAgICAgICAgLyogT3ZlcmFs bCBjb21tYW5kIGxldmVsICovCisKKyNpZm5kZWYgTk9TUEwKK19QUk9UT1RZUCggc3RhdGljIGlu dCBwYXJzZGlyLCAoaW50KSApOworY2hhciBwcm1idWZbUFdCVUZMKzFdID0geyBOVUwsIE5VTCB9 OworaW50IGZuZGlhZ3MgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIGRp YWdub3N0aWNzIG9uL29mZiAqLworaW50IGZuZXJyb3IgPSAxOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEZ1bmN0aW9uIGVycm9yIHRyZWF0bWVudCAqLworCisjaWZkZWYgRENNREJVRgorZXh0 ZXJuIGludCAqY291bnQsICp0YWtlcnIsICptZXJyb3IsICppbnBjYXM7CisjZWxzZQorZXh0ZXJu IGludCBjb3VudFtdLCB0YWtlcnJbXSwgbWVycm9yW10sIGlucGNhc1tdOworI2VuZGlmIC8qIERD TURCVUYgKi8KK2V4dGVybiBpbnQgbWVjaG87ICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNy byBlY2hvICovCitleHRlcm4gbG9uZyBja19hbGFybTsKK2V4dGVybiBjaGFyIGFscm1fZGF0ZVtd LCBhbHJtX3RpbWVbXTsKKyNlbHNlCitleHRlcm4gaW50IHRha2VycltdOworI2VuZGlmIC8qIE5P U1BMICovCisKK2V4dGVybiBpbnQgeF9pZm51bTsKK2V4dGVybiBpbnQgYmlnc2JzaXosIGJpZ3Ji c2l6OyAgICAgICAgICAvKiBQYWNrZXQgYnVmZmVycyAqLworCitleHRlcm4gbG9uZyBzcGVlZDsg ICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgc3BlZWQgKi8KKworZXh0ZXJuIGNoYXIg dHRuYW1lW107ICAgICAgICAgICAgICAgICAgIC8qIENvbW11bmljYXRpb24gZGV2aWNlIG5hbWUg Ki8KK2V4dGVybiBjaGFyIG15aG9zdFtdIDsKK2V4dGVybiBjaGFyIGluaWRpcltdOyAgICAgICAg ICAgICAgICAgICAvKiBJbmkgRmlsZSBkaXJlY3RvcnkgKi8KKworI2lmbmRlZiBOT1NFVEtFWQor ZXh0ZXJuIEtFWSAqa2V5bWFwOyAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBtYXAg Zm9yIFNFVCBLRVkgKDE6MSkgICovCitleHRlcm4gTUFDUk8gKm1hY3JvdGFiOyAgICAgICAgICAg ICAgICAgLyogTWFjcm8gbWFwIGZvciBTRVQgS0VZICgxOnN0cmluZykgKi8KKyNlbmRpZiAvKiBO T1NFVEtFWSAqLworI2lmZGVmIE9TMgoraW50IHdpZGVyZXN1bHQ7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZvciB3aWRlIE9TLzIgc2NhbiBjb2Rlcy9jbW51bSgpICovCisjZW5kaWYgLyog T1MyICovCisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorZXh0ZXJuIGludCB0dF9zY3Jz aXplW107ICAgICAgICAgICAgICAgIC8qIFNjcm9sbGJhY2sgYnVmZmVyIFNpemVzICovCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisvKiBQcmludGVyIHNldHRpbmdz ICovCisKK2V4dGVybiBjaGFyICogcHJpbnRlcm5hbWU7ICAgICAgICAgICAgICAvKiBOVUxMIGlm IHByaW50ZXIgbm90IHJlZGlyZWN0ZWQgKi8KK2V4dGVybiBpbnQgcHJpbnRwaXBlOworZXh0ZXJu IGludCBub3ByaW50ZXI7CisjaWZkZWYgUFJJTlRTV0kKK2ludCBwcmludHRpbW8gPSAwOworY2hh ciAqIHByaW50dGVybSA9IE5VTEw7CitjaGFyICogcHJpbnRzZXAgPSBOVUxMOworaW50IHByaW50 ZXJ0eXBlID0gMDsKKyNpZmRlZiBCUFJJTlQKK2ludCBwcmludGJpZGkgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAvKiBTRVQgQlBSSU5URVIgKGJpZGlyZWN0aW9uYWwpICovCitsb25nIHBwb3J0 c3BlZWQgPSAwTDsgICAgICAgICAgICAgICAgICAgLyogQmlkaXJlY3Rpb24gcHJpbnRlciBwb3J0 IHNwZWVkLCAqLworaW50IHBwb3J0cGFyaXR5ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qICBw YXJpdHksICovCitpbnQgcHBvcnRmbG93ID0gRkxPX0tFRVA7ICAgICAgICAgICAgICAgLyogIGFu ZCBmbG93IGNvbnRyb2wgKi8KKyNlbmRpZiAvKiBCUFJJTlQgKi8KKyNpZmRlZiBPUzIKK2V4dGVy biBpbnQgdHh0MnBzOyAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0MlBTIGNvbnZlcnNpb24/ ICovCitleHRlcm4gaW50IHBzX3dpZHRoLCBwc19sZW5ndGg7ICAgICAgICAgLyogVGV4dDJQUyBk aW1lbnNpb25zICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogUFJJTlRTV0kgKi8KKwor I2lmZGVmIE9TMgorZXh0ZXJuIGludCB0Y3BfYXZhaWw7ICAgICAgICAgICAgICAgICAgIC8qIE5v bnplcm8gaWYgVENQL0lQIGlzIGF2YWlsYWJsZSAqLworI2lmZGVmIERFQ05FVAorZXh0ZXJuIGlu dCBkbmV0X2F2YWlsOyAgICAgICAgICAgICAgICAgIC8qIERpdHRvIGZvciBERUNuZXQgKi8KKyNl bmRpZiAvKiBERUNORVQgKi8KKyNpZmRlZiBTVVBFUkxBVAorZXh0ZXJuIGludCBzbGF0X2F2YWls OworI2VuZGlmIC8qIFNVUEVSTEFUICovCisjZW5kaWYgLyogT1MyICovCisKK3N0YXRpYyBzdHJ1 Y3Qga2V5dGFiIGxvZ2ludGFiW10gPSB7CisgICAgeyAicGFzc3dvcmQiLCBMT0dJX1BTVywgQ01f SU5WIH0sCisgICAgeyAicHJvbXB0IiwgICBMT0dJX1BSTSwgQ01fSU5WIH0sCisgICAgeyAidXNl cmlkIiwgICBMT0dJX1VJRCwgMCB9Cit9OworCisjaWZuZGVmIE5PQ1NFVFMKKy8qIHN5c3RlbS1p bmRlcGVuZGVudCBjaGFyYWN0ZXIgc2V0cywgZGVmaW5lZCBpbiBja2N4bGEuW2NoXSAqLworZXh0 ZXJuIHN0cnVjdCBjc2luZm8gdGNzaW5mb1tdOworZXh0ZXJuIHN0cnVjdCBsYW5naW5mbyBsYW5n c1tdOworCisvKiBPdGhlciBjaGFyYWN0ZXItc2V0IHJlbGF0ZWQgdmFyaWFibGVzICovCitleHRl cm4gaW50IHRjaGFyc2V0LCB0c2xldmVsLCBsYW5ndWFnZTsKKyNlbmRpZiAvKiBOT0NTRVRTICov CisKKy8qIEZpbGUtdHJhbnNmZXIgdmFyaWFibGUgZGVjbGFyYXRpb25zICovCisKKyNpZm5kZWYg Tk9YRkVSCisjaWZkZWYgQ0tfQVVUT0RMCitleHRlcm4gaW50IGNtZGFkbDsKKyNlbmRpZiAvKiBD S19BVVRPREwgKi8KKworI2lmbmRlZiBOT1NFUlZFUgorZXh0ZXJuIGludCBuZ2V0cGF0aDsKK2V4 dGVybiBjaGFyICogZ2V0cGF0aFtdOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKK2V4dGVybiBz dHJ1Y3QgY2tfcCBwdGFiW107CisKK2V4dGVybiBDSEFSIHNzdGF0ZTsgICAgICAgICAgICAgICAg ICAgICAvKiBQcm90b2NvbCBzdGFydCBzdGF0ZSAqLworZXh0ZXJuIENIQVIgbXljdGxxOyAgICAg ICAgICAgICAgICAgICAgIC8qIENvbnRyb2wtY2hhcmFjdGVyIHByZWZpeCAqLworZXh0ZXJuIENI QVIgbXlycHRxOyAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGVhdC1jb3VudCBwcmVmaXggKi8K KworZXh0ZXJuIGludCBwcm90b2NvbCwgc2l6ZSwgc3BzaXosIHNwbWF4LCB1cnBzaXosIHNydnRp bSwgc3J2Y2Rtc2csIHNsb3N0YXJ0LAorICBzcnZkaXMsIHhmZXJtb2RlLCBja2RlbGF5LCBrZWVw LCBtYXh0cnksIHVua2NzLCBiY3RyLCBiY3RmLCBlYnFmbGcsIHN3Y2FwciwKKyAgd3Nsb3RyLCBs c2NhcHIsIGxzY2FwdSwgc3BzaXpyLCBycHRlbmEsIHJwdG1pbiwgZG9jcmMsIHhmcmNhbiwgeGZy Y2hyLAorICB4ZnJudW0sIHhmcmJlbCwgeGZyaW50LCBzcnZwaW5nLCBnX3hmZXJtb2RlLCB4ZnJ4 bGE7CisKKyNpZmRlZiBQSVBFU0VORAorZXh0ZXJuIGludCB1c2VwaXBlczsKKyNlbmRpZiAvKiBQ SVBFU0VORCAqLworCisjaWZkZWYgQ0tYWENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgLyog RE9VQkxFIC8gSUdOT1JFIGNoYXIgdGFibGUgKi8KK2V4dGVybiBpbnQgZGJsZmxhZywgaWduZmxh ZywgZGJsY2hhcjsKK2V4dGVybiBzaG9ydCBkYmx0W107CisjZW5kaWYgLyogQ0tYWENIQVIgKi8K KworI2lmZGVmIENLX1NQRUVECitleHRlcm4gc2hvcnQgY3RscFtdOyAgICAgICAgICAgICAgICAg ICAgLyogQ29udHJvbC1wcmVmaXggdGFibGUgKi8KK2V4dGVybiBpbnQgcHJlZml4aW5nOworc3Rh dGljIHN0cnVjdCBrZXl0YWIgcGZ4dGFiW10gPSB7CisgICAgImFsbCIsICAgICAgICAgUFhfQUxM LCAwLAorICAgICJjYXV0aW91cyIsICAgIFBYX0NBVSwgMCwKKyAgICAibWluaW1hbCIsICAgICBQ WF9XSUwsIDAsCisgICAgIm5vbmUiLCAgICAgICAgUFhfTk9OLCAwCit9OworI2VuZGlmIC8qIENL X1NQRUVEICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKy8qIERlY2xhcmF0aW9ucyBmcm9tIGNt ZCBwYWNrYWdlICovCisKKyNpZmRlZiBEQ01EQlVGCitleHRlcm4gY2hhciAqY21kYnVmOyAgICAg ICAgICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KK2V4dGVybiBjaGFyICpsaW5lOwor ZXh0ZXJuIGNoYXIgKnRtcGJ1ZjsKKyNlbHNlCitleHRlcm4gY2hhciBjbWRidWZbXTsgICAgICAg ICAgICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KK2V4dGVybiBjaGFyIGxpbmVbXTsgICAg ICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgYnVmZmVyIGZvciBhbnl0aGluZyAqLworZXh0 ZXJuIGNoYXIgdG1wYnVmW107CisjZW5kaWYgLyogRENNREJVRiAqLworCisvKiBGcm9tIG1haW4g Y2t1c2VyIG1vZHVsZS4uLiAqLworCitleHRlcm4gY2hhciAqdHAsICpscDsgICAgICAgICAgICAg ICAgICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLworCitleHRlcm4gaW50IHRsZXZlbDsgICAgICAg ICAgICAgICAgICAgICAgLyogVGFrZSBDb21tYW5kIGZpbGUgbGV2ZWwgKi8KKworI2lmbmRlZiBO T0xPQ0FMCitleHRlcm4gaW50IHNlc3NmdDsgICAgICAgICAgICAgICAgICAgICAgLyogU2Vzc2lv bi1sb2cgZmlsZSB0eXBlICovCitleHRlcm4gaW50IHNsb2d0czsgICAgICAgICAgICAgICAgICAg ICAgLyogU2Vzc2lvbi1sb2cgdGltZXN0YW1wcyBvbi9vZmYgKi8KK2V4dGVybiBpbnQgc2xvZ251 bDsJCQkvKiBMaW5lcyBudWxsLXRlcm1pbmF0ZWQgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisK K2NoYXIgKiB0ZW1wZGlyID0gTlVMTDsKKworI2lmZGVmIFZNUworaW50IHZtc19tc2dzID0gMTsg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBNRVNTQUdFUyAqLworZXh0ZXJuIGludCBiYXRj aDsKKyNlbmRpZiAvKiBWTVMgKi8KKworLyogS2V5d29yZCB0YWJsZXMgZm9yIFNFVCBjb21tYW5k cyAqLworCisjaWZkZWYgQ0tfU1BFRUQKK3N0cnVjdCBrZXl0YWIgY3RsdGFiW10gPSB7CisgICAg InByZWZpeGVkIiwgICAxLCAwLCAgICAgICAgICAgICAgICAgLyogTm90ZSwgdGhlIHZhbHVlcyBh cmUgaW1wb3J0YW50LiAqLworICAgICJ1bnByZWZpeGVkIiwgMCwgMAorfTsKKyNlbmRpZiAvKiBD S19TUEVFRCAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBvbGRuZXdbXSA9IHsKKyAgICAibmV3 IiwgMCwgMCwKKyAgICAib2xkIiwgMSwgMAorfTsKKworI2RlZmluZSBNQ0hfRklGTyAxCisjZGVm aW5lIE1DSF9ET1RGIDIKK3N0cnVjdCBrZXl0YWIgbWF0Y2h0YWJbXSA9IHsKKyAgICB7ICJkb3Rm aWxlIiwgTUNIX0RPVEYsIDAgfSwKKyAgICB7ICJmaWZvIiwgICAgTUNIX0ZJRk8sIDAgfQorfTsK K2ludCBubWF0Y2h0YWIgPSAoc2l6ZW9mKG1hdGNodGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7CisKKyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZ1bmN0YWJbXSA9IHsK KyAgICAiZGlhZ25vc3RpY3MiLCBGVU5DX0RJLCAwLAorICAgICJlcnJvciIsICAgICAgIEZVTkNf RVIsIDAKK307CitzdGF0aWMgaW50IG5mdW5jdGFiID0gKHNpemVvZihmdW5jdGFiKSAvIHNpemVv ZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgb3V0cHRhYltdID0geyAgICAgICAg ICAgICAvKiBTRVQgT1VUUFVUIHBhcmFtZXRlcnMgKi8KKyAgICAicGFjaW5nIiwgMCwgMCwgICAg ICAgICAgICAgICAgICAgICAvKiBvbmx5IG9uZSBzbyBmYXIuLi4gKi8KKyAgICAic3BlY2lhbC1l c2NhcGVzIiwgMSwgMAorfTsKK2ludCBub3V0cHRhYiA9IChzaXplb2Yob3V0cHRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOyAvKiBIb3cgbWFueSAqLworI2VuZGlmIC8qIE5PU1BMICovCisK K3N0cnVjdCBrZXl0YWIgY2hrdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBCbG9jayBjaGVjayB0 eXBlcyAqLworICAgICIxIiwgMSwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSAg Ni1iaXQgY2hlY2tzdW0gKi8KKyAgICAiMiIsIDIsIDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiAyID0gMTItYml0IGNoZWNrc3VtICovCisgICAgIjMiLCAzLCAwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMyA9IDE2LWJpdCBDUkMgKi8KKyAgICAiNCIsIDQsIDAsCQkJCS8qIFNh bWUgYXMgQiAqLworICAgICI1IiwgNSwgMCwJCQkJLyogU2FtZSBhcyBGICovCisgICAgImJsYW5r LWZyZWUtMiIsIDQsIENNX0lOViwJCS8qIEIgPSAxMi1iaXQgY2hlY2tzdW0sIG5vIGJsYW5rcyAq LworICAgICJmb3JjZS0zIiwgNSwgQ01fSU5WCQkvKiBGID0gRm9yY2UgQ1JDIG9uIEFMTCBwYWNr ZXRzICovCit9Oworc3RhdGljIGludCBuY2hrdCA9IChzaXplb2YoY2hrdGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgcnB0dGFiW10gPSB7ICAgICAgICAgICAg ICAvKiBTRVQgUkVQRUFUICovCisgICAgImNvdW50cyIsICAgIDAsIDAsICAgICAgICAgICAgICAg ICAgLyogT24gb3IgT2ZmICovCisjaWZkZWYgQ09NTUVOVAorICAgICJtaW5pbXVtIiwgICAxLCAw LCAgICAgICAgICAgICAgICAgIC8qIFRocmVzaGhvbGQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgInByZWZpeCIsICAgIDIsIDAgICAgICAgICAgICAgICAgICAgLyogUmVwZWF0LXByZWZp eCBjaGFyYWN0ZXIgdmFsdWUgKi8KK307CisKKyNpZm5kZWYgTk9MT0NBTAorLyogRm9yIFNFVCBb IE1PREVNIF0gQ0FSUklFUiwgYW5kIGFsc28gZm9yIFNFVCBESUFMIENPTk5FQ1QgKi8KKworc3Ry dWN0IGtleXRhYiBjcnJ0YWJbXSA9IHsKKyAgICAiYXV0b21hdGljIiwgQ0FSX0FVVCwgMCwgICAg ICAgICAgICAvKiAyICovCisgICAgIm9mZiIsICAgICAgIENBUl9PRkYsIDAsICAgICAgICAgICAg LyogMCAqLworICAgICJvbiIsICAgICAgICBDQVJfT04sICAwICAgICAgICAgICAgIC8qIDEgKi8K K307CitpbnQgbmNyciA9IDM7CisjZW5kaWYgLyogTk9MT0NBTCAqLworCitzdHJ1Y3Qga2V5dGFi IG9vYXRhYltdID0geyAgICAgICAgICAgICAgLyogT24vT2ZmL0F1dG8gdGFibGUgKi8KKyAgICAi YXV0b21hdGljIiwgU0VUX0FVVE8sIDAsICAgICAgICAgICAvKiAyICovCisgICAgIm9mZiIsICAg ICAgIFNFVF9PRkYsICAwLCAgICAgICAgICAgLyogMCAqLworICAgICJvbiIsICAgICAgICBTRVRf T04sICAgMCAgICAgICAgICAgIC8qIDEgKi8KK307CisKK3N0cnVjdCBrZXl0YWIgb29ldGFiW10g PSB7ICAgICAgICAgICAgICAvKiBPbi9PZmYvU3RkZXJyIHRhYmxlIDIwMTAvMDMvMTIgKi8KKyAg ICAib2ZmIiwgICAgICAgU0VUX09GRiwgMCwJCS8qIGZvciBTRVQgREVCVUcgTUVTU0FHRVMgKi8K KyAgICAib24iLCAgICAgICAgU0VUX09OLCAgMCwKKyAgICAicyIsICAgICAgICAgMiwgICAgICAg Q01fQUJSfENNX0lOViwKKyAgICAic3QiLCAgICAgICAgMiwgICAgICAgQ01fQUJSfENNX0lOViwK KyAgICAic3RkIiwgICAgICAgMiwgICAgICAgQ01fQUJSfENNX0lOViwKKyAgICAic3RkZXJyIiwg ICAgMiwgICAgICAgMCwKKyAgICAic3Rkb3V0IiwgICAgU0VUX09OLCAgQ01fSU5WCit9Oworc3Rh dGljIGludCBub29ldGFiID0gKHNpemVvZihvb2V0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIp KTsKKworc3RydWN0IGtleXRhYiBvb2t0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIE9uL09mZi9B c2sgdGFibGUgKi8KKyAgICAiYXNrIiwgICAgICAgMiwgICAgICAgIDAsICAgICAgICAgICAvKiAy ICovCisgICAgIm9mZiIsICAgICAgIFNFVF9PRkYsICAwLCAgICAgICAgICAgLyogMCAqLworICAg ICJvbiIsICAgICAgICBTRVRfT04sICAgMCAgICAgICAgICAgIC8qIDEgKi8KK307CisKK3N0cnVj dCBrZXl0YWIgcXZ0YWJbXSA9IHsgICAgICAgICAgICAgICAvKiBRdWlldC9WZXJib3NlIHRhYmxl ICovCisgICAgInF1aWV0IiwgMSwgMCwKKyAgICAidmVyYm9zZSIsIDAsIDAKK307CitpbnQgbnF2 dCA9IDI7CisKKy8qIEZvciBTRVQgREVCVUcgKi8KKworI2RlZmluZSBERUJfT0ZGICAwCisjZGVm aW5lIERFQl9PTiAgIDEKKyNkZWZpbmUgREVCX1NFUyAgMgorI2RlZmluZSBERUJfVElNICAzCisj ZGVmaW5lIERFQl9MRU4gIDQKKyNkZWZpbmUgREVCX01TRyAgNQorCitzdHJ1Y3Qga2V5dGFiIGRi Z3RhYltdID0geworICAgICJsaW5lbGVuZ3RoIiwgREVCX0xFTiwgQ01fSU5WLAorICAgICJtIiwg ICAgICAgICAgREVCX01TRywgQ01fQUJSfENNX0lOViwKKyAgICAibWVzc2FnZSIsICAgIERFQl9N U0csIDAsCisgICAgIm1zZyIsICAgICAgICBERUJfTVNHLCBDTV9JTlYsCisgICAgIm9mZiIsICAg ICAgICBERUJfT0ZGLCAwLAorICAgICJvbiIsICAgICAgICAgREVCX09OLCAgMCwKKyAgICAic2Vz c2lvbiIsICAgIERFQl9TRVMsIDAsCisgICAgInRpbWVzdGFtcHMiLCBERUJfVElNLCAwCit9Owor aW50IG5kYmcgPSAoc2l6ZW9mKGRiZ3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisj aWZuZGVmIE5PTE9DQUwKKy8qIFRyYW5zbWlzc2lvbiBzcGVlZHMgKi8KKworI2lmZGVmIFRUU1BE TElTVCAvKiBTcGVlZCB0YWJsZSBjb25zdHJ1Y3RlZCBhdCBydW50aW1lIC4gLiAuICovCisKK3N0 cnVjdCBrZXl0YWIgKiBzcGR0YWIgPSBOVUxMOworaW50IG5zcGQgPSAwOworCisjZWxzZQorLyoK KyAgTm90ZSwgdGhlIHZhbHVlcyBhcmUgZW5jb2RlZCBpbiBjcHMgcmF0aGVyIHRoYW4gYnBzIGJl Y2F1c2UgMTkyMDAgYW5kIGhpZ2hlcgorICBhcmUgdG9vIGJpZyBmb3Igc29tZSBpbnRzLiAgQWxs IGJ1dCA3NWJwcyBhcmUgbXVsdGlwbGVzIG9mIHRlbi4gIFJlc3VsdCBvZgorICBsb29rdXAgaW4g dGhpcyB0YWJsZSBtdXN0IGJlIG11bHRpcGxpZWQgYnkgMTAgdG8gZ2V0IGFjdHVhbCBzcGVlZCBp biBicHMuCisgIElmIHRoaXMgbnVtYmVyIGlzIDcwLCBpdCBtdXN0IGJlIGNoYW5nZWQgdG8gNzUu ICBJZiBpdCBpcyA4ODgsIHRoaXMgbWVhbnMKKyAgNzUvMTIwMCBzcGxpdCBzcGVlZC4KKworICBU aGUgdmFsdWVzIGFyZSBnZW5lcmljLCByYXRoZXIgdGhhbiBzcGVjaWZpYyB0byBVTklYLiAgV2Ug Y2FuJ3QgdXNlIEI3NSwKKyAgQjEyMDAsIEI5NjAwLCBldGMsIGJlY2F1c2Ugbm9uLVVOSVggdmVy c2lvbnMgb2YgQy1LZXJtaXQgd2lsbCBub3QKKyAgbmVjZXNzYXJpbHkgaGF2ZSB0aGVzZSBzeW1i b2xzIGRlZmluZWQuICBUaGUgQlBTX3h4eCBzeW1ib2xzIGFyZQorICBLZXJtaXQtc3BlY2lmaWMs IGFuZCBhcmUgZGVmaW5lZCBpbiBja2NkZWIuaCBvciBvbiB0aGUgQ0MgY29tbWFuZCBsaW5lLgor CisgIExpa2UgYWxsIG90aGVyIGtleXRhYnMsIHRoaXMgb25lIG11c3QgYmUgaW4gImFscGhhYmV0 aWNhbCIgb3JkZXIsCisgIHJhdGhlciB0aGFuIG51bWVyaWMgb3JkZXIuCisqLworc3RydWN0IGtl eXRhYiBzcGR0YWJbXSA9IHsKKyAgICAiMCIsICAgICAgMCwgIENNX0lOViwKKyAgICAiMTEwIiwg ICAxMSwgIDAsCisjaWZkZWYgQlBTXzExNUsKKyAiMTE1MjAwIiwxMTUyMCwgIDAsCisjZW5kaWYg LyogQlBTXzExNUsgKi8KKyAgIjEyMDAiLCAgIDEyMCwgIDAsCisjaWZkZWYgQlBTXzEzNAorICAi MTM0LjUiLCAgMTM0LCAgMCwKKyNlbmRpZiAvKiBCUFNfMTM0ICovCisjaWZkZWYgQlBTXzE0Swor ICAiMTQ0MDAiLCAxNDQwLCAgMCwKKyNlbmRpZiAvKiBCUFNfMTRLICovCisjaWZkZWYgQlBTXzE1 MAorICAiMTUwIiwgICAgIDE1LCAgMCwKKyNlbmRpZiAvKiBCUFNfMTUwICovCisjaWZkZWYgQlBT XzE4MDAKKyAgIjE4MDAiLCAgICAgMTgwLCAgMCwKKyNlbmRpZiAvKiBCUFNfMTUwICovCisjaWZk ZWYgQlBTXzE5SworICAiMTkyMDAiLCAxOTIwLCAgMCwKKyNlbmRpZiAvKiBCUFNfMTlLICovCisj aWZkZWYgQlBTXzIwMAorICAiMjAwIiwgICAgIDIwLCAgMCwKKyNlbmRpZiAvKiBCUFNfMjAwICov CisjaWZkZWYgQlBTXzIzMEsKKyAgIjIzMDQwMCIsIDIzMDQwLCAwLAorI2VuZGlmIC8qIEJQU18y MzBLICovCisgICIyNDAwIiwgICAyNDAsICAwLAorI2lmZGVmIEJQU18yOEsKKyAgIjI4ODAwIiwg Mjg4MCwgIDAsCisjZW5kaWYgLyogQlBTXzI4SyAqLworICAiMzAwIiwgICAgIDMwLCAgMCwKKyNp ZmRlZiBCUFNfMzYwMAorICAiMzYwMCIsICAgMzYwLCAgMCwKKyNlbmRpZiAvKiBCUFNfMzYwMCAq LworI2lmZGVmIEJQU18zOEsKKyAgIjM4NDAwIiwgMzg0MCwgIDAsCisjZW5kaWYgLyogQlBTXzM4 SyAqLworI2lmZGVmIEJQU180NjBLCisgICI0NjA4MDAiLCA0NjA4MCwgIDAsICAgICAgICAgICAg ICAgICAgLyogTmVlZCAzMiBiaXRzIGZvciB0aGlzLi4uICovCisjZW5kaWYgLyogQlBTXzQ2MEsg Ki8KKyAgIjQ4MDAiLCAgIDQ4MCwgIDAsCisjaWZkZWYgQlBTXzUwCisgICI1MCIsICAgICAgIDUs ICAwLAorI2VuZGlmIC8qIEJQU181MCAqLworI2lmZGVmIEJQU181N0sKKyAgIjU3NjAwIiwgNTc2 MCwgIDAsCisjZW5kaWYgLyogQlBTXzU3SyAqLworICAiNjAwIiwgICAgIDYwLCAgMCwKKyNpZmRl ZiBCUFNfNzIwMAorICAiNzIwMCIsICAgNzIwLCAgMCwKKyNlbmRpZiAvKiBCUFNfNzIwMCAqLwor I2lmZGVmIEJQU183NQorICAiNzUiLCAgICAgICA3LCAgMCwKKyNlbmRpZiAvKiBCUFNfNzUgKi8K KyNpZmRlZiBCUFNfNzUxMgorICAiNzUvMTIwMCIsODg4LCAgMCwgICAgICAgICAgICAgICAgICAg IC8qIENvZGUgIjg4OCIgZm9yIHNwbGl0IHNwZWVkICovCisjZW5kaWYgLyogQlBTXzc1MTIgKi8K KyNpZmRlZiBCUFNfNzZLCisgICI3NjgwMCIsIDc2ODAsICAwLAorI2VuZGlmIC8qIEJQU183Nksg Ki8KKyNpZmRlZiBCUFNfOTIxSworICAiOTIxNjAwIiwgOTIxNjAsMCwgICAgICAgICAgICAgICAg ICAgIC8qIE5lZWQgMzIgYml0cyBmb3IgdGhpcy4uLiAqLworI2VuZGlmIC8qIEJQU185MjFLICov CisgICI5NjAwIiwgICA5NjAsICAwCit9OworaW50IG5zcGQgPSAoc2l6ZW9mKHNwZHRhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOyAvKiBIb3cgbWFueSBzcGVlZHMgKi8KKyNlbmRpZiAvKiBU VFNQRExJU1QgKi8KKworI2lmZGVmIFROX0NPTVBPUlQKK3N0cnVjdCBrZXl0YWIgdG5zcGR0YWJb XSA9IHsgICAgICAgICAgICAvKiBSRkMgMjIxNyBURUxORVQgQ09NUE9SVCBPcHRpb24gKi8KKyAg ICAiMTE1MjAwIiwgMTE1MjAsICAwLCAgICAgICAgICAgICAgICAvKiAoYWRkIGFueSBvdGhlciBk ZWZpbmVkIHNwZWVkcykgKi8KKyAgICAiMTIwMCIsICAgICAxMjAsICAwLAorICAgICIxNDQwMCIs ICAgMTQ0MCwgIDAsCisgICAgIjE5MjAwIiwgICAxOTIwLCAgMCwKKyAgICAiMjMwNDAwIiwgMjMw NDAsICAwLAorICAgICIyNDAwIiwgICAgIDI0MCwgIDAsCisgICAgIjI4ODAwIiwgICAyODgwLCAg MCwKKyAgICAiMzAwIiwgICAgICAgMzAsICAwLAorICAgICIzODQwMCIsICAgMzg0MCwgIDAsCisg ICAgIjQ2MDgwMCIsIDQ2MDgwLCAgMCwKKyAgICAiNDgwMCIsICAgICA0ODAsICAwLAorICAgICI1 NzYwMCIsICAgNTc2MCwgIDAsCisgICAgIjYwMCIsICAgICAgIDYwLCAgMCwKKyAgICAiOTYwMCIs ICAgICA5NjAsICAwCit9OworaW50IG50bnNwZCA9IChzaXplb2YodG5zcGR0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsgLyogSG93IG1hbnkgc3BlZWRzICovCisjZW5kaWYgLyogVE5fQ09N UE9SVCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT0NTRVRTCitleHRlcm4g c3RydWN0IGtleXRhYiBsbmd0YWJbXTsgICAgICAgICAgLyogTGFuZ3VhZ2VzIGZvciBTRVQgTEFO R1VBR0UgKi8KK2V4dGVybiBpbnQgbmxuZzsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZm5k ZWYgTk9MT0NBTAorLyogRHVwbGV4IGtleXdvcmQgdGFibGUgKi8KKworc3RydWN0IGtleXRhYiBk cHh0YWJbXSA9IHsKKyAgICAiZnVsbCIsICAgICAgMCwgMCwKKyAgICAiaGFsZiIsICAgICAgMSwg MAorfTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKy8qIEZsb3cgQ29udHJvbCAqLworCitzdHJ1 Y3Qga2V5dGFiIGN4dHlwZXN3W10gPSB7CisjaWZkZWYgREVDTkVUCisgICAgIi9kZWNuZXQiLCAg ICAgICAgIENYVF9ERUNORVQsICAwLAorI2VuZGlmIC8qIERFQ05FVCAqLworICAgICIvZGlyZWN0 LXNlcmlhbCIsICBDWFRfRElSRUNULCAgMCwKKyNpZmRlZiBERUNORVQKKyAgICAiL2xhdCIsICAg ICAgICAgICAgQ1hUX0xBVCwgICAgIDAsCisjZWxzZQorI2lmZGVmIFNVUEVSTEFUCisgICAgIi9s YXQiLCAgICAgICAgICAgIENYVF9MQVQsICAgICAwLAorI2VuZGlmIC8qIFNVUEVSTEFUICovCisj ZW5kaWYgLyogREVDTkVUICovCisgICAgIi9tb2RlbSIsICAgICAgICAgIENYVF9NT0RFTSwgICAw LAorI2lmZGVmIE5QSVBFCisgICAgIi9uYW1lZC1waXBlIiwgICAgIENYVF9OUElQRSwgICAwLAor I2VuZGlmIC8qIE5QSVBFICovCisjaWZkZWYgTkVUQklPUworICAgICIvbmV0YmlvcyIsICAgICAg ICBDWFRfTkVUQklPUywgMCwKKyNlbmRpZiAvKiBORVRCSU9TICovCisgICAgIi9yZW1vdGUiLCAg ICAgICAgIENYVF9SRU1PVEUsICAwLAorI2lmZGVmIFRDUFNPQ0tFVAorICAgICIvdGNwaXAiLCAg ICAgICAgICBDWFRfVENQSVAsICAgMCwKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBB TllYMjUKKyAgICAiL3guMjUiLCAgICAgICAgICAgQ1hUX1gyNSwgICAgIDAsCisjZW5kaWYgLyog QU5ZWDI1ICovCisgICAgIiIsIDAsIDAKK307CitpbnQgbmN4dHlwZXN3ID0gKHNpemVvZihjeHR5 cGVzdykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisjaWZkZWYgVE5fQ09NUE9SVAorc3Ry dWN0IGtleXRhYiB0bmZsb3RhYltdID0geyAgICAgICAgICAgIC8qIFNFVCBGTE9XLUNPTlRST0wg a2V5d29yZCB0YWJsZSAqLworICAgICJkdHIvY2QiLCAgICBGTE9fRFRSQywgMCwgICAgICAgICAg IC8qIGZvciBSRkMgMjIxNyBUZWxuZXQgQ09NUE9SVCAqLworICAgICJkdHIvY3RzIiwgICBGTE9f RFRSVCwgMCwKKyAgICAia2VlcCIsICAgICAgRkxPX0tFRVAsIDAsCisgICAgIm5vbmUiLCAgICAg IEZMT19OT05FLCAwLAorICAgICJydHMvY3RzIiwgICBGTE9fUlRTQywgMCwKKyAgICAieG9uL3hv ZmYiLCAgRkxPX1hPTlgsIDAKK307CitpbnQgbnRuZmxvID0gKHNpemVvZih0bmZsb3RhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKworc3RydWN0 IGtleXRhYiBmbG90YWJbXSA9IHsgICAgICAgICAgICAgIC8qIFNFVCBGTE9XLUNPTlRST0wga2V5 d29yZCB0YWJsZSAqLworICAgICJhdXRvbWF0aWMiLCBGTE9fQVVUTywgQ01fSU5WLCAgICAgIC8q IE5vdCBuZWVkZWQgYW55IG1vcmUgKi8KKyNpZmRlZiBDS19EVFJDRAorICAgICJkdHIvY2QiLCAg ICBGTE9fRFRSQywgMCwKKyNlbmRpZiAvKiBDS19EVFJDRCAqLworI2lmZGVmIENLX0RUUkNUUwor ICAgICJkdHIvY3RzIiwgICBGTE9fRFRSVCwgMCwKKyNlbmRpZiAvKiBDS19EVFJDVFMgKi8KKyAg ICAia2VlcCIsICAgICAgRkxPX0tFRVAsIDAsCisgICAgIm5vbmUiLCAgICAgIEZMT19OT05FLCAw LAorI2lmZGVmIENLX1JUU0NUUworICAgICJydHMvY3RzIiwgICBGTE9fUlRTQywgMCwKKyNlbmRp ZiAvKiBDS19SVFNDVFMgKi8KKyNpZm5kZWYgUGxhbjkKKyAgICAieG9uL3hvZmYiLCAgRkxPX1hP TlgsIDAsCisjZW5kaWYgLyogUGxhbjkgKi8KKyAgICAiIiwgMCwgMAorfTsKK2ludCBuZmxvID0g KHNpemVvZihmbG90YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKy8qICBIYW5k c2hha2UgY2hhcmFjdGVycyAgKi8KKworc3RydWN0IGtleXRhYiBoc2h0YWJbXSA9IHsKKyAgICAi YmVsbCIsIDAwNywgMCwKKyAgICAiY29kZSIsIDk5OCwgMCwKKyAgICAiY3IiLCAgIDAxNSwgMCwK KyAgICAiZXNjIiwgIDAzMywgMCwKKyAgICAibGYiLCAgIDAxMiwgMCwKKyAgICAibm9uZSIsIDk5 OSwgMCwgICAgICAgICAgICAgICAgICAgICAvKiAoY2FuJ3QgdXNlIG5lZ2F0aXZlIG51bWJlcnMp ICovCisgICAgInhvZmYiLCAwMjMsIDAsCisgICAgInhvbiIsICAwMjEsIDAKK307CitpbnQgbmhz aCA9IChzaXplb2YoaHNodGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZm5kZWYg Tk9MT0NBTAorc3RhdGljIHN0cnVjdCBrZXl0YWIgc2Z0dGFiW10gPSB7ICAgICAgIC8qIEZpbGUg dHlwZXMgZm9yIFNFVCBTRVNTSU9OLUxPRyAqLworICAgICJhc2NpaSIsICAgICBYWUZUX1QsIENN X0lOViwKKyAgICAiYmluYXJ5IiwgICAgWFlGVF9CLCAwLAorICAgICJkZWJ1ZyIsICAgICBYWUZU X0QsIDAsCisgICAgIm51bGwtcGFkZGVkLWxpbmVzIiwgOTk4LCAwLAorICAgICJ0ZXh0IiwgICAg ICBYWUZUX1QsIDAsCisgICAgInRpbWVzdGFtcGVkLXRleHQiLCA5OTksIDAKK307CitzdGF0aWMg aW50IG5zZnR0YWIgPSAoc2l6ZW9mKHNmdHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT0RJQUwKKworI2lmZGVmIE5FVENPTk4g ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldHdvcmtzIGRpcmVjdG9yeSBkZXBlbmRzICov CitpbnQgbm5ldGRpciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogb24gRElBTCBjb2Rl IC0tIGZpeCBsYXRlci4uLiAqLworY2hhciAqbmV0ZGlyW01BWERESVIrMl07CisjZW5kaWYgLyog TkVUQ09OTiAqLworCitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgc2V0ZGlhbCwgKGludCkgKTsKK19Q Uk9UT1RZUCggc3RhdGljIGludCBzZXRkY2QsICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMg aW50IGNrbG9naW4sICh2b2lkKSApOworCisjaWZuZGVmIE1JTklESUFMCisjaWZkZWYgT0xEVEJD T0RFCitleHRlcm4gaW50IHRibW9kZWw7ICAgICAgICAgICAgICAgICAgICAgLyogVGVsZWJpdCBt b2RlbCBJRCAqLworI2VuZGlmIC8qIE9MRFRCQ09ERSAqLworI2VuZGlmIC8qIE1JTklESUFMICov CisKK2V4dGVybiBNRE1JTkYgKm1vZGVtcFtdOyAgICAgICAgICAgICAgICAvKiBQb2ludGVycyB0 byBtb2RlbSBpbmZvIHN0cnVjdHMgKi8KK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIG1kbXRhYltdOyAg ICAgICAgICAvKiBNb2RlbSB0eXBlcyAoaW4gbW9kdWxlIGNrdWRpYS5jKSAqLworZXh0ZXJuIGlu dCBubWRtOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiB0aGVtICovCisKK19Q Uk9UT1RZUChzdGF0aWMgaW50IGRpYWxzdHIsKGNoYXIgKiosIGNoYXIgKikpOworCitleHRlcm4g aW50IGRpYWxobmcsIGRpYWx0bW8sIGRpYWxrc3AsIGRpYWxkcHksIGRpYWxtaHUsIGRpYWxlYywg ZGlhbGRjOworZXh0ZXJuIGludCBkaWFscnRyLCBkaWFsaW50LCBkaWFsdWR0LCBkaWFsc3J0LCBk aWFscnN0ciwgbWRtd2FpdGQ7CitleHRlcm4gaW50IG1kbXNwZCwgZGlhbGZjLCBkaWFsbXRoLCBk aWFsZXNjLCBkaWFsZmxkLCBkaWFsaWR0LCBkaWFscGFjZTsKK2V4dGVybiBpbnQgbWRtc3BrLCBt ZG12b2wsIGRpYWx0ZXN0OworCitpbnQgZGlhbGN2dCA9IDI7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogRElBTCBDT05WRVJULURJUkVDVE9SWSAqLworaW50IGRpYWxjbmYgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERJQUwgQ09ORklSTUFUSU9OICovCitpbnQgZGlhbGNvbiA9IDI7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05ORUNUICovCitpbnQgZGlhbGNxICA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBDT05ORUNUIEFVVE8gcXVpZXQvdmVy Ym9zZSAqLworZXh0ZXJuIGxvbmcgZGlhbG1heCwgZGlhbGNhcGFzOworaW50IHVzZXJtZG0gPSAw OworZXh0ZXJuIGludCBuZGlhbGRpcjsKK2V4dGVybiBjaGFyICpkaWFsaW5pLCAgICpkaWFsbXN0 ciwgKmRpYWxtcHJtdCwgKmRpYWxkaXJbXSwgKmRpYWxjbWQsICAqZGlhbG5wciwKKyAqZGlhbGRj b24sICpkaWFsZGNvZmYsICpkaWFsZWNvbiwgKmRpYWxlY29mZiwgKmRpYWxoY21kLCAgKmRpYWx4 MywKKyAqZGlhbGh3ZmMsICpkaWFsc3dmYywgICpkaWFsbm9mYywgKmRpYWx0b25lLCAgKmRpYWxw dWxzZSwgKmRpYWxuYW1lLCAqZGlhbGxhYzsKK2V4dGVybiBjaGFyICpkaWFsbGNjLCAgICpkaWFs aXhwLCAgKmRpYWxpeHMsICAgKmRpYWxsZHAsICAgKmRpYWxsZHMsICAqZGlhbHRmcCwKKyAqZGlh bHB4aSwgICpkaWFscHhvLCAgICpkaWFsc2Z4LCAgKmRpYWxhYW9uLCAgKmRpYWxhYW9mZjsKK2V4 dGVybiBjaGFyICpkaWFsbGNwLCAgICpkaWFsbGNzLCAgKmRpYWxpbmkyLCAgKmRpYWxtYWM7Citl eHRlcm4gY2hhciAqZGlhbHNwb2ZmLCAqZGlhbHNwb24sICpkaWFsdm9sMSwgICpkaWFsdm9sMiwg ICpkaWFsdm9sMzsKKworY2hhciAqZGlhbHRvY2NbTUFYVFBDQ10gPSB7IE5VTEwsIE5VTEwgfTsK K2ludCBuZGlhbHRvY2MgPSAwOworY2hhciAqZGlhbHB1Y2NbTUFYVFBDQ10gPSB7IE5VTEwsIE5V TEwgfTsKK2ludCBuZGlhbHB1Y2MgPSAwOworCitjaGFyICpkaWFsdGZjW01BWFRPTExGUkVFXSA9 IHsKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9 OworaW50IG50b2xsZnJlZSA9IDA7CisKK2NoYXIgKmRpYWxweHhbTUFYUEJYRVhDSF0gPSB7Cisg ICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKK2lu dCBuZGlhbHB4eCA9IDA7CisKK2NoYXIgKmRpYWxsY2FjW01BWExPQ0FMQUNdID0geworICAgIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKK307CitpbnQgbmxvY2FsYWMgPSAwOwor CitzdGF0aWMgc3RydWN0IGtleXRhYiBkcnN0cnRhYltdID0geworICAgICJpbnRlcm5hdGlvbmFs IiwgNSwgMCwKKyAgICAibG9jYWwiLCAgICAgICAgIDIsIDAsCisgICAgImxvbmctZGlzdGFuY2Ui LCA0LCAwLAorICAgICJub25lIiwgICAgICAgICAgNiwgMAorfTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgZGNudnRhYltdID0geworICAgICJhc2siLCAgMiwgMCwKKyAgICAib2ZmIiwgIDAsIDAs CisgICAgIm9uIiwgICAxLCAwCit9OworCitzdHJ1Y3Qga2V5dGFiIHNldG1kbVtdID0geworICAg ICJjYXBhYmlsaXRpZXMiLCAgICAgWFlEQ0FQLCAgMCwKKyAgICAiY2Fycmllci13YXRjaCIsICAg IFhZRE1DRCwgIDAsCisgICAgImNvbW1hbmQiLCAgICAgICAgICBYWURTVFIsICAwLAorICAgICJj b21wcmVzc2lvbiIsICAgICAgWFlEREMsICAgQ01fSU5WLAorICAgICJkYXRhLWNvbXByZXNzaW9u IiwgWFlEREMsICAgMCwKKyAgICAiZGlhbC1jb21tYW5kIiwgICAgIFhZRERJQSwgIDAsCisgICAg ImVycm9yLWNvcnJlY3Rpb24iLCBYWURFQywgICAwLAorICAgICJlc2NhcGUtY2hhcmFjdGVyIiwg WFlERVNDLCAgMCwKKyAgICAiZmxvdy1jb250cm9sIiwgICAgIFhZREZDLCAgIDAsCisgICAgImhh bmd1cC1tZXRob2QiLCAgICBYWURNSFUsICAwLAorI2lmbmRlZiBOT1hGRVIKKyAgICAia2VybWl0 LXNwb29mIiwgICAgIFhZREtTUCwgIDAsCisjZW5kaWYgLyogTk9YRkVSICovCisgICAgIm1heGlt dW0tc3BlZWQiLCAgICBYWURNQVgsICAwLAorICAgICJuYW1lIiwgICAgICAgICAgICAgWFlETkFN LCAgMCwKKyAgICAic3BlYWtlciIsICAgICAgICAgIFhZRFNQSywgIDAsCisgICAgInNwZWVkLW1h dGNoaW5nIiwgICBYWURTUEQsICAwLAorICAgICJ0eXBlIiwgICAgICAgICAgICAgWFlEVFlQLCAg MCwKKyAgICAidm9sdW1lIiwgICAgICAgICAgIFhZRFZPTCwgIDAKK307CitpbnQgbnNldG1kbSA9 IChzaXplb2Yoc2V0bWRtKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0 YWIgdm9sdGFiW10gPSB7CisgICAgImhpZ2giLCAgIDMsICAwLAorICAgICJsb3ciLCAgICAxLCAg MCwKKyAgICAibWVkaXVtIiwgMiwgIDAKK307CisKK3N0cnVjdCBrZXl0YWIgbWRtY2FwW10gPSB7 CisgICAgImF0LWNvbW1hbmRzIiwgICAgICBDS0RfQVQsICAwLAorICAgICJjb21wcmVzc2lvbiIs ICAgICAgQ0tEX0RDLCAgMCwKKyAgICAiZGMiLCAgICAgICAgICAgICAgIENLRF9EQywgIENNX0lO ViwKKyAgICAiZWMiLCAgICAgICAgICAgICAgIENLRF9FQywgIENNX0lOViwKKyAgICAiZXJyb3It Y29ycmVjdGlvbiIsIENLRF9FQywgIDAsCisgICAgImhhcmR3YXJlLWZsb3ciLCAgICBDS0RfSFcs ICAwLAorICAgICJod2ZjIiwgICAgICAgICAgICAgQ0tEX0hXLCAgQ01fSU5WLAorICAgICJpdHUi LCAgICAgICAgICAgICAgQ0tEX1YyNSwgQ01fSU5WLAorICAgICJrZXJtaXQtc3Bvb2YiLCAgICAg Q0tEX0tTLCAgMCwKKyAgICAia3MiLCAgICAgICAgICAgICAgIENLRF9LUywgIENNX0lOViwKKyAg ICAic2IiLCAgICAgICAgICAgICAgIENLRF9TQiwgIENNX0lOViwKKyAgICAic29mdHdhcmUtZmxv dyIsICAgIENLRF9TVywgIDAsCisgICAgInNwZWVkLWJ1ZmZlcmluZyIsICBDS0RfU0IsICAwLAor ICAgICJzd2ZjIiwgICAgICAgICAgICAgQ0tEX1NXLCAgQ01fSU5WLAorICAgICJ0YiIsICAgICAg ICAgICAgICAgQ0tEX1RCLCAgQ01fSU5WLAorICAgICJ0ZWxlYml0IiwgICAgICAgICAgQ0tEX1RC LCAgMCwKKyAgICAidjI1YmlzLWNvbW1hbmRzIiwgIENLRF9WMjUsIDAKK307CitpbnQgbm1kbWNh cCA9IChzaXplb2YobWRtY2FwKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZmRlZiBD T01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQU5TV0VSIG5vdCBpbXBsZW1l bnRlZCB5ZXQgKi8KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGFuc3dlcnRhYltdID0geworICAgIHsg ImNhbGxlci1pZCIsICBYWUFfQ0lELCAgMCB9OworICAgIHsgInJpbmdzIiwgICAgICBYWUFfUk5H LCAgMCB9OworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmFuc3dlcnRhYiA9ICAo c2l6ZW9mKGFuc3dlcnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKyNlbmRpZiAv KiBDT01NRU5UICovCisKK3N0cnVjdCBrZXl0YWIgZGlhbHRhYltdID0geyAgICAgICAgICAgICAv KiBTRVQgRElBTCB0YWJsZSAqLworICAgICJhcmVhLWNvZGUiLCAgICAgICAgWFlETEFDLCAwLCAg ICAgIC8qIEFsc28gc3RpbGwgaW5jbHVkZXMgaXRlbXMgICAgICovCisgICAgImNvbXByZXNzaW9u IiwgICAgICBYWUREQywgIENNX0lOViwgLyogdGhhdCB3ZXJlIG1vdmVkIHRvIFNFVCBNT0RFTSwg Ki8KKyAgICAiY29uZmlybWF0aW9uIiwgICAgIFhZRENORiwgMCwgICAgICAvKiBidXQgdGhleSBh cmUgQ01fSU5WaXNpYmxlLi4uICAqLworICAgICJjb25uZWN0IiwgICAgICAgICAgWFlEQ09OLCAw LAorICAgICJjb252ZXJ0LWRpcmVjdG9yeSIsWFlEQ1ZULCAwLAorICAgICJjb3VudHJ5LWNvZGUi LCAgICAgWFlETENDLCAwLAorICAgICJkaWFsLWNvbW1hbmQiLCAgICAgWFlERElBLCBDTV9JTlYs CisgICAgImRpcmVjdG9yeSIsICAgICAgICBYWURESVIsIDAsCisgICAgImRpc3BsYXkiLCAgICAg ICAgICBYWUREUFksIDAsCisgICAgImVzY2FwZS1jaGFyYWN0ZXIiLCBYWURFU0MsIENNX0lOViwK KyAgICAiZXJyb3ItY29ycmVjdGlvbiIsIFhZREVDLCAgQ01fSU5WLAorICAgICJmbG93LWNvbnRy b2wiLCAgICAgWFlERkMsICBDTV9JTlYsCisgICAgImZvcmNlLWxvbmctZGlzdGFuY2UiLCBYWURG TEQsIDAsCisgICAgImhhbmd1cCIsICAgICAgICAgICBYWURIVVAsIDAsCisgICAgImlnbm9yZS1k aWFsdG9uZSIsICBYWURJRFQsIDAsCisgICAgImludGVydmFsIiwgICAgICAgICBYWURJTlQsIDAs CisgICAgImluIiwgICAgICAgICAgICAgICBYWURJTkksIENNX0lOVnxDTV9BQlIsCisgICAgImlu aXQtc3RyaW5nIiwgICAgICBYWURJTkksIENNX0lOViwKKyAgICAiaW50bC1wcmVmaXgiLCAgICAg IFhZRElYUCwgMCwKKyAgICAiaW50bC1zdWZmaXgiLCAgICAgIFhZRElYUywgMCwKKyNpZm5kZWYg Tk9YRkVSCisgICAgImtlcm1pdC1zcG9vZiIsICAgICBYWURLU1AsIENNX0lOViwKKyNlbmRpZiAv KiBOT1hGRVIgKi8KKyAgICAibGMtYXJlYS1jb2RlcyIsICAgIFhZRExMQUMsIDAsCisgICAgImxj LXByZWZpeCIsICAgICAgICBYWURMQ1AsIDAsCisgICAgImxjLXN1ZmZpeCIsICAgICAgICBYWURM Q1MsIDAsCisgICAgImxkLXByZWZpeCIsICAgICAgICBYWURMRFAsIDAsCisgICAgImxkLXN1ZmZp eCIsICAgICAgICBYWURMRFMsIDAsCisgICAgImxvY2FsLWFyZWEtY29kZSIsICBYWURMQUMsIENN X0lOViwKKyAgICAibG9jYWwtcHJlZml4IiwgICAgIFhZRExDUCwgQ01fSU5WLAorICAgICJsb2Nh bC1zdWZmaXgiLCAgICAgWFlETENTLCBDTV9JTlYsCisgICAgIm0iLCAgICAgICAgICAgICAgICBY WURNVEgsIENNX0lOVnxDTV9BQlIsCisjaWZuZGVmIE5PU1BMCisgICAgIm1hY3JvIiwgICAgICAg ICAgICBYWURNQUMsIDAsICAgICAgLyogMTk1ICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRl ZiBNRE1IVVAKKyAgICAibWUiLCAgICAgICAgICAgICAgIFhZRE1USCwgQ01fSU5WfENNX0FCUiwK KyNlbmRpZiAvKiBNRE1IVVAgKi8KKyAgICAibWV0aG9kIiwgICAgICAgICAgIFhZRE1USCwgMCwK KyAgICAibW5wLWVuYWJsZSIsICAgICAgIFhZRE1OUCwgQ01fSU5WLCAvKiBvYnNvbGV0ZSBidXQg c3RpbGwgYWNjZXB0ZWQgKi8KKyNpZmRlZiBNRE1IVVAKKyAgICAibW9kZW0taGFuZ3VwIiwgICAg IFhZRE1IVSwgQ01fSU5WLAorI2VuZGlmIC8qIE1ETUhVUCAqLworICAgICJwYWNpbmciLCAgICAg ICAgICAgWFlEUEFDLCAgMCwKKyAgICAicGJ4LWV4Y2hhbmdlIiwgICAgIFhZRFBYWCwgIDAsCisg ICAgInBieC1pbnNpZGUtcHJlZml4IixYWURQWEksICAwLAorICAgICJwYngtb3V0c2lkZS1wcmVm aXgiLFhZRFBYTywgMCwKKyAgICAicHJlZml4IiwgICAgICAgICAgIFhZRE5QUiwgIDAsCisgICAg InB1bHNlLWNvdW50cmllcyIsICBYWURQVUNDLCAwLAorICAgICJyZXN0cmljdCIsICAgICAgICAg WFlEUlNUUiwgMCwKKyAgICAicmV0cmllcyIsICAgICAgICAgIFhZRFJUTSwgIDAsCisgICAgInNv cnQiLCAgICAgICAgICAgICBYWURTUlQsICAwLAorICAgICJzcGVlZC1tYXRjaGluZyIsICAgWFlE U1BELCAgQ01fSU5WLAorICAgICJzdHJpbmciLCAgICAgICAgICAgWFlEU1RSLCAgQ01fSU5WLAor ICAgICJzdWZmaXgiLCAgICAgICAgICAgWFlEU0ZYLCAgMCwKKyAgICAidGVzdCIsICAgICAgICAg ICAgIFhZRFRFU1QsIDAsCisgICAgInRpbWVvdXQiLCAgICAgICAgICBYWURUTU8sICAwLAorICAg ICJ0Zi1hcmVhLWNvZGUiLCAgICAgWFlEVEZDLCAgQ01fSU5WLAorICAgICJ0Zi1wcmVmaXgiLCAg ICAgICAgWFlEVEZQLCAgQ01fSU5WLAorICAgICJ0b2xsLWZyZWUtYXJlYS1jb2RlIixYWURURkMs MCwKKyAgICAidG9sbC1mcmVlLXByZWZpeCIsIFhZRFRGUCwgIDAsCisgICAgInRvbmUtY291bnRy aWVzIiwgICBYWURUT0NDLCAwCit9OworaW50IG5kaWFsID0gKHNpemVvZihkaWFsdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZmRlZiBNRE1IVVAKK3N0cnVjdCBrZXl0YWIgbWRt aGFuZ1tdID0geworICAgICJkdHIiLCAgICAgICAgICAgMCwgMCwKKyAgICAibW9kZW0tY29tbWFu ZCIsIDEsIDAsCisgICAgInJzMjMyLXNpZ25hbCIsICAwLCAwLAorICAgICJ2MjQtc2lnbmFsIiwg ICAgMCwgQ01fSU5WCit9OworI2VuZGlmIC8qIE1ETUhVUCAqLworCitzdGF0aWMgc3RydWN0IGtl eXRhYiBtZG1jbWRbXSA9IHsKKyAgICAiYXV0b2Fuc3dlciIsICAgICAgIFhZRFNfQU4sIDAsICAg ICAvKiBhdXRvYW5zd2VyICovCisgICAgImNvbXByZXNzaW9uIiwgICAgICBYWURTX0RDLCAwLCAg ICAgLyogZGF0YSBjb21wcmVzc2lvbiAqLworICAgICJkaWFsLW1vZGUtcHJvbXB0IiwgWFlEU19N UCwgMCwgICAgIC8qIGRpYWwgbW9kZSBwcm9tcHQgKi8KKyAgICAiZGlhbC1tb2RlLXN0cmluZyIs IFhZRFNfTVMsIDAsICAgICAvKiBkaWFsIG1vZGUgc3RyaW5nICovCisgICAgImVycm9yLWNvcnJl Y3Rpb24iLCBYWURTX0VDLCAwLCAgICAgLyogZXJyb3IgY29ycmVjdGlvbiAqLworICAgICJoYW5n dXAtY29tbWFuZCIsICAgWFlEU19IVSwgMCwgICAgIC8qIGhhbmd1cCBjb21tYW5kICovCisgICAg ImhhcmR3YXJlLWZsb3ciLCAgICBYWURTX0hXLCAwLCAgICAgLyogaHdmYyAqLworICAgICJpZ25v cmUtZGlhbHRvbmUiLCAgWFlEU19JRCwgMCwgICAgIC8qIGlnbm9yZSBkaWFsdG9uZSAqLworICAg ICJpbml0LXN0cmluZyIsICAgICAgWFlEU19JTiwgMCwgICAgIC8qIGluaXQgc3RyaW5nICovCisg ICAgIm5vLWZsb3ctY29udHJvbCIsICBYWURTX05GLCAwLCAgICAgLyogbm8gZmxvdyBjb250cm9s ICovCisgICAgInByZWRpYWwtaW5pdCIsICAgICBYWURTX0kyLCAwLCAgICAgLyogbGFzdC1taW51 dGUgc2V0dXAgY29tbWFuZHMgKi8KKyAgICAicHVsc2UiLCAgICAgICAgICAgIFhZRFNfRFAsIDAs ICAgICAvKiBwdWxzZSAqLworICAgICJzb2Z0d2FyZS1mbG93IiwgICAgWFlEU19TVywgMCwgICAg IC8qIHN3ZmMgKi8KKyAgICAic3BlYWtlciIsICAgICAgICAgIFhZRFNfU1AsIDAsICAgICAvKiBT cGVha2VyICovCisgICAgInRvbmUiLCAgICAgICAgICAgICBYWURTX0RULCAwLCAgICAgLyogdG9u ZSAqLworICAgICJ2b2x1bWUiLCAgICAgICAgICAgWFlEU19WTywgMCAgICAgIC8qIFZvbHVtZSAq LworfTsKK3N0YXRpYyBpbnQgbm1kbWNtZCA9IChzaXplb2YobWRtY21kKSAvIHNpemVvZihzdHJ1 Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgZGlhbF9mY1tdID0geworICAgICJhdXRvIiwg ICAgIEZMT19BVVRPLCAwLAorICAgICJub25lIiwgICAgIEZMT19OT05FLCAwLAorICAgICJydHMv Y3RzIiwgIEZMT19SVFNDLCAwLAorICAgICJ4b24veG9mZiIsIEZMT19YT05YLCAwCit9OworCitz dHJ1Y3Qga2V5dGFiIGRpYWxfbVtdID0geyAgICAgICAgICAgICAgLyogRElBTCBNRVRIT0QgKi8K KyAgICAiYXV0byIsICAgIFhZRE1fQSwgMCwKKyAgICAiZGVmYXVsdCIsIFhZRE1fRCwgMCwKKyAg ICAicHVsc2UiLCAgIFhZRE1fUCwgMCwKKyAgICAidG9uZSIsICAgIFhZRE1fVCwgMAorfTsKK2lu dCBuZGlhbF9tID0gKHNpemVvZihkaWFsX20pL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5k aWYgLyogTk9ESUFMICovCisKKyNpZmRlZiBDS19UQVBJCitzdHJ1Y3Qga2V5dGFiIHRhcGl0YWJb XSA9IHsgICAgICAgICAgICAgLyogVG9wLUxldmVsIE1pY3Jvc29mdCBUQVBJICovCisgICAgImNv bmZpZ3VyZS1saW5lIiwgICAgIFhZVEFQSV9DRkcsICAwLAorICAgICJkaWFsaW5nLXByb3BlcnRp ZXMiLCBYWVRBUElfRElBTCwgMAorfTsKK2ludCBudGFwaXRhYiA9IChzaXplb2YodGFwaXRhYikv c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiBzZXR0YXBpdGFiW10gPSB7 ICAgICAgICAgIC8qIFNFVCBNaWNyb3NvZnQgVEFQSSAqLworICAgICJpbmFjdGl2aXR5LXRpbWVv dXQiLCBYWVRBUElfSU5BLCAgMCwKKyAgICAibGluZSIsICAgICAgICAgICAgICAgWFlUQVBJX0xJ TiwgIDAsCisgICAgImxvY2F0aW9uIiwgICAgICAgICAgIFhZVEFQSV9MT0MsICAwLAorICAgICJt YW51YWwtZGlhbGluZyIsICAgICBYWVRBUElfTUFOLCAgMCwKKyAgICAibW9kZW0tZGlhbGluZyIs ICAgICAgWFlUQVBJX1BBU1MsIDAsCisgICAgIm1vZGVtLWxpZ2h0cyIsICAgICAgIFhZVEFQSV9M R0hULCAwLAorICAgICJwaG9uZS1udW1iZXItY29udmVyc2lvbnMiLCAgIFhZVEFQSV9DT04sICAw LAorICAgICJwb3J0IiwgICAgICAgICAgICAgICBYWVRBUElfTElOLCAgQ01fSU5WLAorICAgICJw b3N0LWRpYWwtdGVybWluYWwiLCBYWVRBUElfUFNULCAgMCwKKyAgICAicHJlLWRpYWwtdGVybWlu YWwiLCAgWFlUQVBJX1BSRSwgIDAsCisgICAgInVzZS13aW5kb3dzLWNvbmZpZ3VyYXRpb24iLCBY WVRBUElfVVNFLCAwLAorICAgICJ3YWl0LWZvci1jcmVkaXQtY2FyZC10b25lIiwgWFlUQVBJX0JO RywgMAorfTsKK2ludCBuc2V0dGFwaXRhYiA9IChzaXplb2Yoc2V0dGFwaXRhYikvc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiAqIHRhcGlsb2N0YWIgPSBOVUxMOyAgICAg IC8qIE1pY3Jvc29mdCBUQVBJIExvY2F0aW9ucyAqLworaW50IG50YXBpbG9jID0gMDsKK2V4dGVy biBzdHJ1Y3Qga2V5dGFiICogdGFwaWxpbmV0YWI7ICAgICAvKiBNaWNyb3NvZnQgVEFQSSBMaW5l IERldmljZXMgKi8KK2V4dGVybiBpbnQgbnRhcGlsaW5lOworZXh0ZXJuIGludCB0dHRhcGk7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFRBUEkgaW4gdXNlICovCitleHRlcm4gaW50IHRhcGlwYXNz OyAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBQYXNzdGhyb3VnaCBtb2RlICovCitleHRlcm4g aW50IHRhcGljb252OyAgICAgICAgICAgICAgICAgICAgLyogVEFQSSBDb252ZXJzaW9uIG1vZGUg Ki8KK2V4dGVybiBpbnQgdGFwaWxpZ2h0czsKK2V4dGVybiBpbnQgdGFwaXByZXRlcm07CitleHRl cm4gaW50IHRhcGlwb3N0dGVybTsKK2V4dGVybiBpbnQgdGFwaW1hbnVhbDsKK2V4dGVybiBpbnQg dGFwaWluYWN0aXZpdHk7CitleHRlcm4gaW50IHRhcGlib25nOworZXh0ZXJuIGludCB0YXBpdXNl Y2ZnOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKworI2lmbmRlZiBOT1BVU0gKK2V4dGVybiBpbnQg bm9wdXNoOworZXh0ZXJuIGludCB3aWxkZW5hOworI2lmZGVmIFVOSVgKK3N0cnVjdCBrZXl0YWIg d2lsZHRhYltdID0geyAgICAgICAgICAgICAvKiBTRVQgV0lMRENBUkQtRVhQQU5TSU9OICovCisj aWZkZWYgVU5JWAorICAgICJrZXJtaXQiLCAgV0lMRF9LRVIsIDAsCQkvKiBCeSBLZXJtaXQgKi8K KyNlbmRpZgkvKiBVTklYICovCisgICAgIm9mZiIsICAgICBXSUxEX09GRiwgMCwJCS8qIERpc2Fi bGVkICovCisgICAgIm9uIiwgICAgICBXSUxEX09OLCAgMCwJCS8qIEVuYWJsZWQgKi8KKyNpZmRl ZiBVTklYCisgICAgInNoZWxsIiwgICBXSUxEX1NIRSwgMCwJCS8qIEJ5IFNoZWxsICovCisjZW5k aWYJLyogVU5JWCAqLworICAgICIiLCAwLCAwCit9OworaW50IG53aWxkID0gKHNpemVvZih3aWxk dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdHJ1Y3Qga2V5dGFiIHdkb3R0 YWJbXSA9IHsgICAgICAgICAgICAgLyogY29udCdkICovCisgICAgIi9tYXRjaC1kb3QtZmlsZXMi LCAgICAxLCAwLAorICAgICIvbm8tbWF0Y2gtZG90LWZpbGVzIiwgMCwgMAorfTsKK2V4dGVybiBp bnQgd2lsZHhwYW5kOworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKwor I2lmZGVmIE5FVENPTk4KK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIG5ldGNtZFtdLCBuZXRrZXlbXTsK K2V4dGVybiBpbnQgbm5ldHMsIG5uZXRrZXk7CisjaWZkZWYgVENQU09DS0VUCitleHRlcm4gc3Ry dWN0IGtleXRhYiB0Y3BvcHRbXTsKK2V4dGVybiBpbnQgbnRjcG9wdDsKKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KKyNpZmRlZiBOUElQRQorY2hhciBwaXBlbmFtZVtQSVBFTkFNTCsxXSA9IHsgTlVM LCBOVUwgfTsKKyNlbmRpZiAvKiBOUElQRSAqLworI2lmZGVmIENLX05FVEJJT1MKK2V4dGVybiB1 bnNpZ25lZCBjaGFyIE5ldEJpb3NOYW1lW107CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworI2Vu ZGlmIC8qIE5FVENPTk4gKi8KKworI2lmZGVmIEFOWVgyNQorc3RydWN0IGtleXRhYiB4MjV0YWJb XSA9IHsKKyAgICAiY2FsbC11c2VyLWRhdGEiLCAgICBYWVVEQVQsIDAsCisgICAgImNsb3NlZC11 c2VyLWdyb3VwIiwgWFlDTE9TLCAwLAorICAgICJyZXZlcnNlLWNoYXJnZSIsICAgIFhZUkVWQywg MAorfTsKK2ludCBueDI1ID0gKHNpemVvZih4MjV0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIp KTsKKworI2lmbmRlZiBJQk1YMjUKK3N0cnVjdCBrZXl0YWIgcGFkeDN0YWJbXSA9IHsKKyAgICAi YnJlYWstYWN0aW9uIiwgICAgICAgICBQQURfQlJFQUtfQUNUSU9OLCAgICAgICAgICAgMCwKKyAg ICAiYnJlYWstY2hhcmFjdGVyIiwgICAgICBQQURfQlJFQUtfQ0hBUkFDVEVSLCAgICAgICAgMCwK KyAgICAiY2hhcmFjdGVyLWRlbGV0ZSIsICAgICBQQURfQ0hBUl9ERUxFVEVfQ0hBUiwgICAgICAg MCwKKyAgICAiY3ItcGFkZGluZyIsICAgICAgICAgICBQQURfUEFERElOR19BRlRFUl9DUiwgICAg ICAgMCwKKyAgICAiZGlzY2FyZC1vdXRwdXQiLCAgICAgICBQQURfU1VQUFJFU1NJT05fT0ZfREFU QSwgICAgMCwKKyAgICAiZWNobyIsICAgICAgICAgICAgICAgICBQQURfRUNITywgICAgICAgICAg ICAgICAgICAgMCwKKyAgICAiZWRpdGluZyIsICAgICAgICAgICAgICBQQURfRURJVElORywgICAg ICAgICAgICAgICAgMCwKKyAgICAiZXNjYXBlIiwgICAgICAgICAgICAgICBQQURfRVNDQVBFLCAg ICAgICAgICAgICAgICAgMCwKKyAgICAiZm9yd2FyZCIsICAgICAgICAgICAgICBQQURfREFUQV9G T1JXQVJEX0NIQVIsICAgICAgMCwKKyAgICAibGYtcGFkZGluZyIsICAgICAgICAgICBQQURfUEFE RElOR19BRlRFUl9MRiwgICAgICAgMCwKKyAgICAibGYtaW5zZXJ0IiwgICAgICAgICAgICBQQURf TEZfQUZURVJfQ1IsICAgICAgICAgICAgMCwKKyAgICAibGluZS1kZWxldGUiLCAgICAgICAgICBQ QURfQlVGRkVSX0RFTEVURV9DSEFSLCAgICAgMCwKKyAgICAibGluZS1kaXNwbGF5IiwgICAgICAg ICBQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUiwgICAgMCwKKyAgICAibGluZS1mb2xkIiwgICAgICAg ICAgICBQQURfTElORV9GT0xESU5HLCAgICAgICAgICAgMCwKKyAgICAicGFkLWZsb3ctY29udHJv bCIsICAgICBQQURfRkxPV19DT05UUk9MX0JZX1BBRCwgICAgMCwKKyAgICAic2VydmljZS1zaWdu YWxzIiwgICAgICBQQURfU1VQUFJFU1NJT05fT0ZfU0lHTkFMUywgMCwKKyAgICAidGltZW91dCIs ICAgICAgICAgICAgICBQQURfREFUQV9GT1JXQVJEX1RJTUVPVVQsICAgMCwKKy8qIFNwZWVkIGlz IHJlYWQtb25seSAqLworICAgICJ0cmFuc21pc3Npb24tcmF0ZSIsICAgIFBBRF9MSU5FX1NQRUVE LCAgICAgICAgICAgICAwLAorICAgICJ1c2VyLWZsb3ctY29udHJvbCIsICAgIFBBRF9GTE9XX0NP TlRST0xfQllfVVNFUiwgICAwCit9OworaW50IG5wYWR4MyA9IChzaXplb2YocGFkeDN0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNlbmRpZiAvKiBB TllYMjUgKi8KKworI2lmZGVmIFRMT0cKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHZidGFiW10gPSB7 CisgICAgImJyaWVmIiwgICAwLCAwLAorI2lmZGVmIE9TMk9SVU5JWAorICAgICJmdHAiLCAgICAg MiwgMCwKKyNlbHNlCisjaWZkZWYgVk1TCisgICAgImZ0cCIsICAgICAyLCAwLAorI2VuZGlmIC8q IGRlZiBWTVMgKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICAidmVyYm9zZSIsIDEsIDAK K307CitpbnQgbnZiID0gKHNpemVvZih2YnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwor I2VuZGlmIC8qIFRMT0cgKi8KKworI2lmZGVmIENLU1lTTE9HCitzdGF0aWMgc3RydWN0IGtleXRh YiBzeXNsb2d0YWJbXSA9IHsKKyAgICAiYWxsIiwgICAgICAgICBTWVNMR19DWCwgMCwKKyAgICAi Y29tbWFuZHMiLCAgICBTWVNMR19DTSwgMCwKKyAgICAiY29ubmVjdGlvbiIsICBTWVNMR19BQywg MCwKKyAgICAiZGVidWciLCAgICAgICBTWVNMR19EQiwgMCwKKyAgICAiZGlhbCIsICAgICAgICBT WVNMR19ESSwgMCwKKyAgICAiZmlsZS1hY2Nlc3MiLCBTWVNMR19GQSwgMCwKKyAgICAiZmlsZS1j cmVhdGUiLCBTWVNMR19GQywgMCwKKyAgICAibG9naW4iLCAgICAgICBTWVNMR19MSSwgMCwKKyAg ICAibm9uZSIsICAgICAgICBTWVNMR19OTywgMCwKKyAgICAicHJvdG9jb2wiLCAgICBTWVNMR19Q UiwgMAorfTsKK2ludCBuc3lzbG9nID0gKHNpemVvZihzeXNsb2d0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisvKiBQYXJpdHkga2V5d29yZCB0 YWJsZSAqLworCitzdHJ1Y3Qga2V5dGFiIHBhcnRibFtdID0geworICAgICJldmVuIiwgICAgJ2Un LCAwLAorI2lmZGVmIEhXUEFSSVRZCisgICAgImhhcmR3YXJlIiwnSCcsIDAsCisjZW5kaWYgLyog SFdQQVJJVFkgKi8KKyAgICAibWFyayIsICAgICdtJywgMCwKKyAgICAibm9uZSIsICAgICAwICwg MCwKKyAgICAib2RkIiwgICAgICdvJywgMCwKKyAgICAic3BhY2UiLCAgICdzJywgMAorfTsKK2lu dCBucGFyID0gKHNpemVvZihwYXJ0YmwpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lm ZGVmIEhXUEFSSVRZCitzdHJ1Y3Qga2V5dGFiIGh3cGFydGJsW10gPSB7CisvKiBBZGQgbWFyayBh bmQgc3BhY2UgaWYgbmVlZGVkIGFuZCBwb3NzaWJsZSAqLworICAgICJldmVuIiwgICAgJ2UnLCAw LAorI2lmZGVmIE9TMgorICAgICJtYXJrIiwgICAgJ20nLCAwLAorI2VuZGlmIC8qIE9TMiAqLwor ICAgICJvZGQiLCAgICAgJ28nLCAwLAorI2lmZGVmIE9TMgorICAgICJzcGFjZSIsICAgJ3MnLCAw LAorI2VuZGlmIC8qIE9TMiAqLworICAgICIiLCAwLCAwCit9OworaW50IG5od3BhciA9IChzaXpl b2YoaHdwYXJ0YmwpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisjZW5kaWYgLyogSFdQ QVJJVFkgKi8KKworLyogT24vT2ZmIHRhYmxlICovCisKK3N0cnVjdCBrZXl0YWIgb25vZmZbXSA9 IHsKKyAgICAib2ZmIiwgICAgICAgMCwgMCwKKyAgICAib24iLCAgICAgICAgMSwgMAorfTsKKwor I2RlZmluZSBYWUNEX00gICAgMAkJCS8qIENEIE1FU1NBR0UgKi8KKyNkZWZpbmUgWFlDRF9QICAg IDEJCQkvKiBDRCBQQVRIICovCisjZGVmaW5lIFhZQ0RfSCAgICAyCQkJLyogQ0QgSE9NRSAqLwor CitzdHJ1Y3Qga2V5dGFiIGNkdGFiW10gPSB7CisgICAgImhvbWUiLCAgICAgIFhZQ0RfSCwgMCwK KyAgICAibWVzc2FnZSIsICAgWFlDRF9NLCAwLAorICAgICJwYXRoIiwgICAgICBYWUNEX1AsIDAK K307CitpbnQgbmNkdGFiID0gKHNpemVvZihjZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OworCitzdHJ1Y3Qga2V5dGFiIGNkbXNnW10gPSB7CisgICAgImZpbGUiLCAgICAgIDIsIDAsCisg ICAgIm9mZiIsICAgICAgIDAsIDAsCisgICAgIm9uIiwgICAgICAgIDEsIDAKK307CitpbnQgbmNk bXNnID0gKHNpemVvZihjZG1zZykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMK K3N0cnVjdCBrZXl0YWIgeGl0dGFiW10gPSB7ICAgICAgICAgICAgICAvKiBTRVQgRVhJVCAqLwor ICAgICJoYW5ndXAiLCAgICAgICAgMywgMCwgICAgICAgICAgICAgIC8qIC4uLkhBTkdVUCAqLwor ICAgICJvbi1kaXNjb25uZWN0IiwgMiwgMCwgICAgICAgICAgICAgIC8qIC4uLk9OLURJU0NPTk5F Q1QgKi8KKyAgICAic3RhdHVzIiwgICAgICAgIDAsIDAsICAgICAgICAgICAgICAvKiAuLi5TVEFU VVMgKi8KKyAgICAid2FybmluZyIsICAgICAgIDEsIDAgICAgICAgICAgICAgICAvKiAuLi5XQVJO SU5HICovCit9OworaW50IG5leGl0ID0gKHNpemVvZih4aXR0YWIpIC8gc2l6ZW9mKHN0cnVjdCBr ZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiB4aXR3dGFiW10gPSB7ICAgICAgICAgICAgIC8qIFNF VCBFWElUIFdBUk5JTkcgKi8KKyAgICAiYWx3YXlzIiwgMiwgMCwgICAgICAgICAgICAgICAgICAg ICAvKiBldmVuIHdoZW4gbm90IGNvbm5lY3RlZCAqLworICAgICJvZmYiLCAgICAwLCAwLCAgICAg ICAgICAgICAgICAgICAgIC8qIG5vIHdhcm5pbmcgICAgICovCisgICAgIm9uIiwgICAgIDEsIDAg ICAgICAgICAgICAgICAgICAgICAgLyogd2hlbiBjb25uZWN0ZWQgKi8KK307CitpbnQgbmV4aXR3 ID0gKHNpemVvZih4aXR3dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBr ZXl0YWIgcmx0YWJbXSA9IHsKKyAgICAibG9jYWwiLCAgICAgMSwgMCwgICAgICAgICAgICAgICAg ICAvKiBFQ0hPIHZhbHVlcyAqLworICAgICJvZmYiLCAgICAgICAwLCBDTV9JTlYsCisgICAgIm9u IiwgICAgICAgIDEsIENNX0lOViwKKyAgICAicmVtb3RlIiwgICAgMCwgMAorfTsKK2ludCBucmx0 ID0gKHNpemVvZihybHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisvKiBJbmNvbXBs ZXRlIEZpbGUgRGlzcG9zaXRpb24gdGFibGUgKi8KKworc3RydWN0IGtleXRhYiBpZmR0YWJbXSA9 IHsKKyAgICAiZGlzY2FyZCIsIFNFVF9PRkYsIDAsCisgICAgImtlZXAiLCAgICBTRVRfT04sICAw Cit9OworCitzdHJ1Y3Qga2V5dGFiIGlmZGF0YWJbXSA9IHsKKyAgICAiYXV0byIsICAgIFNFVF9B VVRPLCAwLAorICAgICJkaXNjYXJkIiwgU0VUX09GRiwgIDAsCisgICAgImtlZXAiLCAgICBTRVRf T04sICAgMAorfTsKKworY2hhciAqIGlmZG5hbVtdID0geyAiZGlzY2FyZCIsICJrZWVwIiwgImF1 dG8iIH07CisKKy8qIFNFVCBUQUtFIHBhcmFtZXRlcnMgdGFibGUgKi8KK3N0YXRpYworc3RydWN0 IGtleXRhYiB0YWt0YWJbXSA9IHsKKyAgICAiZWNobyIsICAwLCAwLAorICAgICJlcnJvciIsIDEs IDAsCisgICAgIm9mZiIsICAgMiwgQ01fSU5WLCAgICAgICAgICAgICAgICAgLyogRm9yIGNvbXBh dGliaWxpdHkgKi8KKyAgICAib24iLCAgICAzLCBDTV9JTlYgICAgICAgICAgICAgICAgICAvKiB3 aXRoIE1TLURPUyBLZXJtaXQuLi4gKi8KK307CisKKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBDT01N RU5UCisvKiBub3QgdXNlZCAqLworc3RhdGljCitzdHJ1Y3Qga2V5dGFiIHN1ZnRhYltdID0geyAg ICAgICAgICAgICAgLyogKHdoYXQgdG8gZG8gd2l0aCkgU1RBUlRVUC1GSUxFICovCisgICAgImRl bGV0ZSIsIDEsIDAsCisgICAgImtlZXAiLCAgIDAsIDAKK307CisjZW5kaWYgLyogQ09NTUVOVCAq LworCisvKiBTRVQgTUFDUk8gcGFyYW1ldGVycyB0YWJsZSAqLworc3RhdGljCitzdHJ1Y3Qga2V5 dGFiIHNtYWN0YWJbXSA9IHsKKyAgICAiZWNobyIsICAwLCAwLAorICAgICJlcnJvciIsIDEsIDAK K307CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NDUklQVAorc3RhdGljCitzdHJ1 Y3Qga2V5dGFiIHNjcnRhYltdID0geworICAgICJlY2hvIiwgIDAsIDAKK307CisjZW5kaWYgLyog Tk9TQ1JJUFQgKi8KKworLyogU0VUIENPTU1BTkQgdGFibGUgKi8KKworLyogU0VUIENPTU1BTkQg aXRlbXMuLi4gKi8KKworI2RlZmluZSBTQ01EX0JTWiAwCS8qIEJZVEVTSVpFICovCisjZGVmaW5l IFNDTURfUkNMIDEJLyogUkVDQUxMICovCisjZGVmaW5lIFNDTURfUlRSIDIJLyogUkVUUlkgKi8K KyNkZWZpbmUgU0NNRF9RVU8gMwkvKiBRVU9USU5HICovCisjZGVmaW5lIFNDTURfQ09MIDQJLyog Q09MT1IgKi8KKyNkZWZpbmUgU0NNRF9ISUcgNQkvKiBIRUlHSFQgKi8KKyNkZWZpbmUgU0NNRF9X SUQgNgkvKiBXSURUSCAqLworI2RlZmluZSBTQ01EX0NVUiA3CS8qIENVUlNPUi1QT1NJVElPTiAq LworI2RlZmluZSBTQ01EX1NDUiA4CS8qIFNDUk9MTEJBQ0sgKi8KKyNkZWZpbmUgU0NNRF9NT1Ig OQkvKiBNT1JFLVBST01QVElORyAqLworI2RlZmluZSBTQ01EX0lOVCAxMCAgICAgLyogSU5URVJS VVBUSU9OICovCisjZGVmaW5lIFNDTURfQURMIDExICAgICAvKiBBVVRPRE9XTkxPQUQgKi8KKyNk ZWZpbmUgU0NNRF9TVEEgMTIgICAgIC8qIFNUQVRVU0xJTkUgKi8KKyNkZWZpbmUgU0NNRF9EQlEg MTMJLyogRE9VQkxFUVVPVElORyAqLworI2RlZmluZSBTQ01EX0NCUiAxNAkvKiBDQlJFQUsgKi8K KyNkZWZpbmUgU0NNRF9CRkwgMTUJLyogQlVGRkVSLVNJWkUgKG5vdCB1c2VkKSAqLworI2RlZmlu ZSBTQ01EX0VSUiAxNgkvKiBFUlJPUiAqLworI2RlZmluZSBTQ01EX1ZBUiAxNwkvKiBWQVJJQUJM RS1FVkFMVUFUSU9OICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNjbWR0YWJbXSA9IHsKKyNp ZmRlZiBDS19BVVRPREwKKyAgICAiYXV0b2Rvd25sb2FkIiwgICAgICAgU0NNRF9BREwsIDAsCisj ZW5kaWYgLyogQ0tfQVVUT0RMICovCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgVG8gaW1wbGVtZW50 IHRoaXMgcmVxdWlyZXMgdGhhdCB3ZSBjaGFuZ2UgQ01EQkwgYW5kIEFUTUJMCisgIGZyb20gY29t cGlsZS10aW1lIHN5bWJvbHMgdG8gcnVudGltZSB2YXJpYWJsZXMuICBOb3QgYSBiaWcgZGVhbCwK KyAgYnV0IG5vdCB0cml2aWFsIGVpdGhlci4KKyAqLworICAgICJidWZmZXItc2l6ZSIsICAgICAg ICBTQ01EX0JGTCwgMCwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgImJ5dGVzaXplIiwgICAg ICAgICAgIFNDTURfQlNaLCAwLAorICAgICJjYnJlYWsiLCAgICAgICAgICAgICBTQ01EX0NCUiwg Q01fSU5WLAorI2lmZGVmIE9TMgorICAgICJjb2xvciIsICAgICAgICAgICAgICBTQ01EX0NPTCwg MCwKKyAgICAiY3Vyc29yLXBvc2l0aW9uIiwgICAgU0NNRF9DVVIsIDAsCisjZW5kaWYgLyogT1My ICovCisjaWZkZWYgRE9VQkxFUVVPVElORworICAgICJkb3VibGVxdW90aW5nIiwgICAgICBTQ01E X0RCUSwgMCwKKyNlbmRpZiAvKiBET1VCTEVRVU9USU5HICovCisgICAgImVycm9yLWRpc3BsYXki LCAgICAgIFNDTURfRVJSLCAwLAorICAgICJoZWlnaHQiLCAgICAgICAgICAgICBTQ01EX0hJRywg MCwKKyAgICAiaW50ZXJydXB0aW9uIiwgICAgICAgU0NNRF9JTlQsIDAsCisgICAgIm1vcmUtcHJv bXB0aW5nIiwgICAgIFNDTURfTU9SLCAwLAorICAgICJxdW90aW5nIiwgICAgICAgICAgICBTQ01E X1FVTywgMCwKKyNpZmRlZiBDS19SRUNBTEwKKyAgICAicmVjYWxsLWJ1ZmZlci1zaXplIiwgU0NN RF9SQ0wsIDAsCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisjaWZkZWYgQ0tfUkVDQUxMCisgICAg InJldHJ5IiwgICAgICAgICAgICAgIFNDTURfUlRSLCAwLAorI2VuZGlmIC8qIENLX1JFQ0FMTCAq LworI2lmZGVmIE9TMgorI2lmZGVmIE9ORVRFUk1VUEQKKyAgICAic2Nyb2xsYmFjayIsICAgICAg ICAgU0NNRF9TQ1IsIDAsCisgICAgInN0YXR1c2xpbmUiLCAgICAgICAgIFNDTURfU1RBLCAwLAor I2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAidmFyaWFibGUt ZXZhbHVhdGlvbiIsIFNDTURfVkFSLDAsCisgICAgIndpZHRoIiwgICAgICAgICAgICAgIFNDTURf V0lELCAwCit9Oworc3RhdGljIGludCBuYnl0dCA9IChzaXplb2Yoc2NtZHRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOworCisjaWZuZGVmIE5PU0VSVkVSCisvKiBTZXJ2ZXIgcGFyYW1ldGVy cyB0YWJsZSAqLworc3RhdGljIHN0cnVjdCBrZXl0YWIgc3J2dGFiW10gPSB7CisgICAgImNkLW1l c3NhZ2UiLCAgIFhZU0VSQywgMCwKKyAgICAiZGlzcGxheSIsICAgICAgWFlTRVJELCAwLAorICAg ICJnZXQtcGF0aCIsICAgICBYWVNFUlAsIDAsCisgICAgImlkbGUtdGltZW91dCIsIFhZU0VSSSwg MCwKKyAgICAia2VlcGFsaXZlIiwgICAgWFlTRVJLLCAwLAorICAgICJsb2dpbiIsICAgICAgICBY WVNFUkwsIDAsCisgICAgInRpbWVvdXQiLCAgICAgIFhZU0VSVCwgMAorfTsKK3N0YXRpYyBpbnQg bnNydnQgPSAoc2l6ZW9mKHNydnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlm IC8qIE5PU0VSVkVSICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNsZWVwdGFiW10gPSB7ICAg ICAvKiBTRVQgU0xFRVAgdGFibGUgKi8KKyAgICAiY2FuY2VsbGF0aW9uIiwgIDAsICAgMAorfTsK Kworc3RhdGljIHN0cnVjdCBrZXl0YWIgdHN0YWJbXSA9IHsgICAgICAgIC8qIFNFVCBUUkFOU0ZF Ui9YRkVSIHRhYmxlICovCisgICAgImJlbGwiLCAgICAgICAgICAgIFhZWF9CRUwsIDAsCisjaWZk ZWYgWEZSQ0FOCisgICAgImNhbmNlbGxhdGlvbiIsICAgIFhZWF9DQU4sIDAsCisjZW5kaWYgLyog WEZSQ0FOICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAiY2hhcmFjdGVyLXNldCIsICAgWFlYX0NT RSwgMCwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZuZGVmIE5PU1BMCisgICAgImNyYy1jYWxj dWxhdGlvbiIsIFhZWF9DUkMsIDAsCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAiZGlzcGxheSIs ICAgICAgICAgWFlYX0RJUywgMCwKKyAgICAiaW50ZXJydXB0aW9uIiwgICAgWFlYX0lOVCwgMCwK KyAgICAibG9ja2luZy1zaGlmdCIsICAgWFlYX0xTSCwgMCwKKyAgICAibWVzc2FnZSIsICAgICAg ICAgWFlYX01TRywgMCwKKyAgICAibW9kZSIsICAgICAgICAgICAgWFlYX01PRCwgMCwKKyAgICAi bXNnIiwgICAgICAgICAgICAgWFlYX01TRywgQ01fSU5WLAorI2lmZGVmIFBJUEVTRU5ECisgICAg InBpcGVzIiwgICAgICAgICAgIFhZWF9QSVAsIDAsCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNp ZmRlZiBDS19YWVoKKyAgICAicHJvdG9jb2wiLCAgICAgICAgWFlYX1BSTywgMCwKKyNlbmRpZiAv KiBDS19YWVogKi8KKyAgICAicmVwb3J0IiwgICAgICAgICAgWFlYX1JQVCwgMCwKKyAgICAic2xv dy1zdGFydCIsICAgICAgWFlYX1NMTywgMCwKKyNpZm5kZWYgTk9DU0VUUworICAgICJ0cmFuc2xh dGlvbiIsICAgICBYWVhfWExBLCAwLAorI2Vsc2UKKyAgICAidHJhbnNsYXRpb24iLCAgICAgWFlY X1hMQSwgQ01fSU5WLAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAieGxhdGlvbiIsICAgICAg ICAgWFlYX1hMQSwgQ01fSU5WLAorICAgICIiLCAwLCAwCit9Oworc3RhdGljIGludCBudHMgPSAo c2l6ZW9mKHRzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3Ry dWN0IGtleXRhYiBydHN0YWJbXSA9IHsgICAgICAgLyogUkVNT1RFIFNFVCBUUkFOU0ZFUi9YRkVS IHRhYmxlICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAiY2hhcmFjdGVyLXNldCIsICAgWFlYX0NT RSwgMCwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgIm1vZGUiLCAgICAgICAgICAgIFhZWF9N T0QsIDAKK307CitzdGF0aWMgaW50IG5ydHMgPSAoc2l6ZW9mKHJ0c3RhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHhmcm10YWJbXSA9IHsgICAgICAgICAgICAg LyogVFJBTlNGRVIgTU9ERSB0YWJsZSAqLworICAgICJhdXRvbWF0aWMiLCBYTU9ERV9BLCAwLAor ICAgICJtYW51YWwiLCAgICBYTU9ERV9NLCAwCit9OworCisjaWZkZWYgTE9DVVMKK2V4dGVybiBp bnQgbG9jdXMsIGF1dG9sb2N1czsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgbG9jdXN0YWJbXSA9 IHsKKyNpZmRlZiBLVUkKKyAgICB7ICJhc2siLCAgICAgMywgMCB9LAkJLyogUHJlc2VudGx5IGlt cGxlbWVudGVkIGluIEdVSSBvbmx5ICovCisjZW5kaWYgLyogS1VJICovCisgICAgeyAiYXV0byIs ICAgIDIsIDAgfSwKKyAgICB7ICJsb2NhbCIsICAgMSwgMCB9LAorICAgIHsgInJlbW90ZSIsICAw LCAwIH0KK307CitzdGF0aWMgaW50IG5sb2N1c3RhYiA9IChzaXplb2YobG9jdXN0YWIpIC8gc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2VuZGlmIC8qIExPQ1VTICovCisKKyNpZm5kZWYgTk9D U0VUUworLyogU0VUIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgdGFibGUgKi8KKworZXh0ZXJuIHN0 cnVjdCBrZXl0YWIgdGNzdGFiW107CitleHRlcm4gaW50IG50Y3M7CisjZW5kaWYgLyogTk9DU0VU UyAqLworCisvKiBTRVQgVFJBTlNGRVIgTE9DS0lORy1TSElGVCB0YWJsZSAqLworc3RydWN0IGtl eXRhYiBsc3RhYltdID0geworICAgICJmb3JjZWQiLCAyLCAgIDAsCisgICAgIm9mZiIsICAgIDAs ICAgMCwKKyAgICAib24iLCAgICAgMSwgICAwCit9OworaW50IG5scyA9IChzaXplb2YobHN0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworLyogU0VUIFRFTE5FVCB0YWJsZXMgKi8KKyNp ZmRlZiBUTkNPREUKK2V4dGVybiBpbnQgdG5fbmxtLCB0bl9iX25sbSwgdG5fYl9tZXUsIHRuX2Jf dW1lLCB0bl9iX3hmZXIsIHRuX3NiX2J1ZzsKK2V4dGVybiBpbnQgdG5fbm9fZW5jcnlwdF94ZmVy LCB0bl9hdXRoX2tyYjVfZGVzX2J1ZzsKK2V4dGVybiBpbnQgdG5fd2FpdF9mbGcsIHRuX2R1cGxl eCwgdG5fZGVsYXlfc2IsIHRuX3NmdTsKK2V4dGVybiBpbnQgc2xfdG5fc2F2ZWQ7CitleHRlcm4g aW50IHRuX2luZmluaXRlOworZXh0ZXJuIGludCB0bl9yZW1fZWNobzsKK2V4dGVybiBpbnQgdG5f ZGViOworZXh0ZXJuIGludCB0bl9hdXRoX2hvdzsKK2V4dGVybiBpbnQgdG5fYXV0aF9lbmM7Cisj aWZkZWYgQ0tfRk9SV0FSRF9YCitleHRlcm4gY2hhciAqIHRuX2Z3ZHhfeGF1dGhvcml0eTsKKyNl bmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorc3RhdGlj IHN0cnVjdCBrZXl0YWIgc2V0YXV0aFtdID0geworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgIms0 IiwgICAgICAgIEFVVEhfS1JCNCwgQ01fSU5WLAorICAgICJrNSIsICAgICAgICBBVVRIX0tSQjUs IENNX0lOViwKKyAgICAia2VyYmVyb3M0IiwgQVVUSF9LUkI0LCAwLAorICAgICJrZXJiZXJvczUi LCBBVVRIX0tSQjUsIDAsCisgICAgImtlcmJlcm9zX2l2IixBVVRIX0tSQjQsIENNX0lOViwKKyAg ICAia2VyYmVyb3NfdiIsIEFVVEhfS1JCNSwgQ01fSU5WLAorICAgICJrcmI0IiwgICAgICBBVVRI X0tSQjQsIENNX0lOViwKKyAgICAia3JiNSIsICAgICAgQVVUSF9LUkI1LCBDTV9JTlYsCisjZW5k aWYgLyogQ0tfS0VSQkVST1MgKi8KKyNpZmRlZiBDS19TUlAKKyAgICAic3JwIiwgICAgICAgQVVU SF9TUlAsICAwLAorI2VuZGlmIC8qIENLX1NSUCAqLworI2lmZGVmIENLX1NTTAorICAgICJzc2wi LCAgICAgIEFVVEhfU1NMLCAgIDAsCisgICAgInRscyIsICAgICAgQVVUSF9UTFMsICAgMCwKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyAgICAiIiwgICAgICAgICAwLCAgICAgIDAKK307CitzdGF0aWMg aW50IG5zZXRhdXRoID0gc2l6ZW9mKHNldGF1dGgpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7 CisjaWZkZWYgQ0tfS0VSQkVST1MKK2V4dGVybiBjaGFyICoga3JiNV9kX3ByaW5jaXBhbDsgICAg ICAgICAvKiBEZWZhdWx0IHByaW5jaXBhbCAqLworZXh0ZXJuIGNoYXIgKiBrcmI1X2RfaW5zdGFu Y2U7CitleHRlcm4gY2hhciAqIGtyYjVfZF9yZWFsbTsgICAgICAgICAgICAgLyogRGVmYXVsdCBy ZWFsbSAqLworZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7ICAgICAgICAgICAgICAgIC8qIERlZmF1 bHQgY3JlZGVudGlhbHMgY2FjaGUgKi8KK2V4dGVybiBjaGFyICoga3JiNV9kX3NydjsgICAgICAg ICAgICAgICAvKiBEZWZhdWx0IHNlcnZpY2UgbmFtZSAqLworZXh0ZXJuIGludCAgICBrcmI1X2Rf bGlmZXRpbWU7ICAgICAgICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKi8KK2V4dGVybiBpbnQgICAg a3JiNV9kX2ZvcndhcmRhYmxlOworZXh0ZXJuIGludCAgICBrcmI1X2RfcHJveGlhYmxlOworZXh0 ZXJuIGludCAgICBrcmI1X2RfcmVuZXdhYmxlOworZXh0ZXJuIGludCAgICBrcmI1X2F1dG9nZXQ7 CitleHRlcm4gaW50ICAgIGtyYjVfYXV0b2RlbDsKK2V4dGVybiBpbnQgICAga3JiNV9kX2dldGs0 OworZXh0ZXJuIGludCAgICBrcmI1X2NoZWNrYWRkcnM7ICAgICAgICAgIC8qIENoZWNrIFRHVCBB ZGRycyAqLworZXh0ZXJuIGludCAgICBrcmI1X2Rfbm9fYWRkcmVzc2VzOworZXh0ZXJuIGNoYXIg KiBrcmI1X2RfYWRkcnNbXTsKK2V4dGVybiBjaGFyICogazVfa2V5dGFiOyAgICAgICAgICAgICAg ICAvKiBLZXl0YWIgZmlsZSAqLworCitleHRlcm4gc3RydWN0IGtyYjRfaW5pdF9kYXRhIGtyYjRf aW5pdDsKK2V4dGVybiBjaGFyICoga3JiNF9kX3ByaW5jaXBhbDsgICAgICAgICAvKiBEZWZhdWx0 IHByaW5jaXBhbCAqLworZXh0ZXJuIGNoYXIgKiBrcmI0X2RfcmVhbG07ICAgICAgICAgICAgIC8q IERlZmF1bHQgcmVhbG0gKi8KK2V4dGVybiBjaGFyICoga3JiNF9kX3NydjsgICAgICAgICAgICAg ICAvKiBEZWZhdWx0IHNlcnZpY2UgbmFtZSAqLworZXh0ZXJuIGludCAgICBrcmI0X2RfbGlmZXRp bWU7ICAgICAgICAgIC8qIERlZmF1bHQgbGlmZXRpbWUgKi8KK2V4dGVybiBpbnQgICAga3JiNF9k X3ByZWF1dGg7CitleHRlcm4gY2hhciAqIGtyYjRfZF9pbnN0YW5jZTsKK2V4dGVybiBpbnQgICAg a3JiNF9hdXRvZ2V0OworZXh0ZXJuIGludCAgICBrcmI0X2F1dG9kZWw7CitleHRlcm4gaW50ICAg IGtyYjRfY2hlY2thZGRyczsgICAgICAgICAgLyogQ2hlY2sgVEdUIEFkZHJzICovCitleHRlcm4g Y2hhciAqIGs0X2tleXRhYjsgICAgICAgICAgICAgICAgLyogS2V5dGFiIGZpbGUgKi8KKyNpZmRl ZiBLUkI0CitleHRlcm4gaW50ICAgIGs0ZGVidWc7CisjZW5kaWYgLyogS1JCNCAqLworc3RhdGlj IHN0cnVjdCBrZXl0YWIga3JidmVyW10gPSB7CisgICAgIjQiLCAgICAgICAgICAgICAgICAgNCwg MCwKKyAgICAiNSIsICAgICAgICAgICAgICAgICA1LCAwLAorICAgICJpdiIsICAgICAgICAgICAg ICAgIDQsIENNX0lOViwKKyAgICAidiIsICAgICAgICAgICAgICAgICA1LCBDTV9JTlYKK307Citz dGF0aWMgaW50IG5rcmJ2ZXIgPSBzaXplb2Yoa3JidmVyKS9zaXplb2Yoc3RydWN0IGtleXRhYik7 CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGtkZXN0YWJbXSA9IHsKKyAgICAibmV2ZXIiLCAgICAg ICAgICAgIEtSQl9ERUxfTk8sIDAsCisgICAgIm5vIiwgICAgICAgICAgICAgICBLUkJfREVMX05P LCBDTV9JTlYsCisgICAgIm9uLWNsb3NlIiwgICAgICAgICBLUkJfREVMX0NMLCAwLAorICAgICJv bi1leGl0IiwgICAgICAgICAgS1JCX0RFTF9FWCwgMAorfTsKK3N0YXRpYyBpbnQgbmtkZXN0YWIg PSBzaXplb2Yoa2Rlc3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCitzdGF0aWMgc3RydWN0 IGtleXRhYiBrNHRhYltdID0geworICAgICJhdXRvZGVsIiwgICAgICAgICAgIFhZS1JCREVMLCBD TV9JTlYsCisgICAgImF1dG9kZXN0cm95IiwgICAgICAgWFlLUkJERUwsIDAsCisgICAgImF1dG9n ZXQiLCAgICAgICAgICAgWFlLUkJHRVQsIDAsCisgICAgImNoZWNrLWFkZHJlc3MiLCAgICAgWFlL UkJBRFIsIDAsCisgICAgImRlYnVnIiwgICAgICAgICAgICAgWFlLUkJEQkcsIENNX0lOViwKKyAg ICAiaW5zdGFuY2UiLCAgICAgICAgICBYWUtSQklOUywgMCwKKyAgICAia2V5dGFiIiwgICAgICAg ICAgICBYWUtSQktUQiwgMCwKKyAgICAibGlmZXRpbWUiLCAgICAgICAgICBYWUtSQkxJRiwgMCwK KyAgICAicHJlYXV0aCIsICAgICAgICAgICBYWUtSQlBSRSwgMCwKKyAgICAicHJpbmNpcGFsIiwg ICAgICAgICBYWUtSQlBSLCAgMCwKKyAgICAicHJvbXB0IiwgICAgICAgICAgICBYWUtSQlBSTSwg MCwKKyAgICAicmVhbG0iLCAgICAgICAgICAgICBYWUtSQlJMLCAgMCwKKyAgICAic2VydmljZS1u YW1lIiwgICAgICBYWUtSQlNSViwgMAorfTsKK3N0YXRpYyBpbnQgbms0dGFiID0gc2l6ZW9mKGs0 dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGs1dGFi W10gPSB7CisgICAgImFkZHJlc3NlcyIsICAgICAgICAgWFlLUkJBREQsIDAsCisgICAgImF1dG9k ZWxldGUiLCAgICAgICAgWFlLUkJERUwsIENNX0lOViwKKyAgICAiYXV0b2Rlc3Ryb3kiLCAgICAg ICBYWUtSQkRFTCwgMCwKKyAgICAiYXV0b2dldCIsICAgICAgICAgICBYWUtSQkdFVCwgMCwKKyAg ICAiY2MiLCAgICAgICAgICAgICAgICBYWUtSQkNDLCAgQ01fSU5WLAorICAgICJjaGVjay1hZGRy ZXNzIiwgICAgIFhZS1JCQURSLCAwLAorICAgICJjcmVkZW50aWFscy1jYWNoZSIsIFhZS1JCQ0Ms ICAwLAorICAgICJmb3J3YXJkYWJsZSIsICAgICAgIFhZS1JCRldELCAwLAorICAgICJnZXQtazQt dGd0IiwgICAgICAgIFhZS1JCSzVLNCwwLAorICAgICJpbnN0YW5jZSIsICAgICAgICAgIFhZS1JC SU5TLCAwLAorICAgICJrZXl0YWIiLCAgICAgICAgICAgIFhZS1JCS1RCLCAwLAorICAgICJsaWZl dGltZSIsICAgICAgICAgIFhZS1JCTElGLCAwLAorICAgICJuby1hZGRyZXNzZXMiLCAgICAgIFhZ S1JCTkFELCAwLAorICAgICJwcmluY2lwYWwiLCAgICAgICAgIFhZS1JCUFIsICAwLAorICAgICJw cm9tcHQiLCAgICAgICAgICAgIFhZS1JCUFJNLCAwLAorICAgICJwcm94aWFibGUiLCAgICAgICAg IFhZS1JCUFJYLCAwLAorICAgICJyZWFsbSIsICAgICAgICAgICAgIFhZS1JCUkwsICAwLAorICAg ICJyZW5ld2FibGUiLCAgICAgICAgIFhZS1JCUk5XLCAwLAorICAgICJzZXJ2aWNlLW5hbWUiLCAg ICAgIFhZS1JCU1JWLCAwCit9Oworc3RhdGljIGludCBuazV0YWIgPSBzaXplb2YoazV0YWIpL3Np emVvZihzdHJ1Y3Qga2V5dGFiKTsKKworI2RlZmluZSBLUkJfUFdfUFJNIDEKKyNkZWZpbmUgS1JC X1BSX1BSTSAyCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGtyYnBybXRhYltdID0geworICAgICJw YXNzd29yZCIsICBLUkJfUFdfUFJNLCAwLAorICAgICJwcmluY2lwYWwiLCBLUkJfUFJfUFJNLCAw Cit9OworCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNpZmRlZiBDS19TUlAKK3N0YXRpYyBz dHJ1Y3Qga2V5dGFiIHNycHRhYltdID0geworICAgICJwcm9tcHQiLCAgICAgICAgICAgIFhZU1JQ UFJNLCAwCit9Oworc3RhdGljIGludCBuc3JwdGFiID0gc2l6ZW9mKHNycHRhYikvc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpOworI2RlZmluZSBTUlBfUFdfUFJNIDEKKworc3RhdGljIHN0cnVjdCBrZXl0 YWIgc3JwcHJtdGFiW10gPSB7CisgICAgInBhc3N3b3JkIiwgIFNSUF9QV19QUk0sIDAKK307Cisj ZW5kaWYgLyogQ0tfU1JQICovCisjaWZkZWYgQ0tfU1NMCitzdGF0aWMgc3RydWN0IGtleXRhYiBz c2x0YWJbXSA9IHsKKyAgICAiY2VydHMtb2siLCAgICAgICAgICBYWVNTTENPSywgIENNX0lOViwK KyAgICAiY2lwaGVyLWxpc3QiLCAgICAgICBYWVNTTENMLCAgIDAsCisgICAgImNybC1kaXIiLCAg ICAgICAgICAgWFlTU0xDUkxELCAwLAorICAgICJjcmwtZmlsZSIsICAgICAgICAgIFhZU1NMQ1JM LCAgMCwKKyAgICAiZGVidWciLCAgICAgICAgICAgICBYWVNTTERCRywgIDAsCisgICAgImRoLWtl eS1maWxlIiwgICAgICAgWFlTU0xES0ZMLCBDTV9JTlYsCisgICAgImRoLXBhcmFtLWZpbGUiLCAg ICAgWFlTU0xEUEZMLCAwLAorICAgICJkc2EtY2VydC1jaGFpbi1maWxlIiwgWFlTU0xEQ0NGLCAw LAorICAgICJkc2EtY2VydC1maWxlIiwgICAgIFhZU1NMRENGTCwgMCwKKyAgICAiZHNhLWtleS1m aWxlIiwgICAgICBYWVNTTERLRkwsIDAsCisgICAgImR1bW15IiwgICAgICAgICAgICAgWFlTU0xE VU0sICBDTV9JTlYsCisgICAgIm9ubHkiLCAgICAgICAgICAgICAgWFlTU0xPTiwgICBDTV9JTlYs CisgICAgInJhbmRvbS1maWxlIiwgICAgICAgWFlTU0xSTkQsICAwLAorICAgICJyc2EtY2VydC1j aGFpbi1maWxlIiwgWFlTU0xSQ0NGLCAwLAorICAgICJyc2EtY2VydC1maWxlIiwgICAgIFhZU1NM UkNGTCwgMCwKKyAgICAicnNhLWtleS1maWxlIiwgICAgICBYWVNTTFJLRkwsIDAsCisgICAgInZl cmJvc2UiLCAgICAgICAgICAgWFlTU0xWUkIsICAwLAorICAgICJ2ZXJpZnkiLCAgICAgICAgICAg IFhZU1NMVlJGLCAgMCwKKyAgICAidmVyaWZ5LWRpciIsICAgICAgICBYWVNTTFZSRkQsIDAsCisg ICAgInZlcmlmeS1maWxlIiwgICAgICAgWFlTU0xWUkZGLCAwCit9Oworc3RhdGljIGludCBuc3Ns dGFiID0gc2l6ZW9mKHNzbHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworc3RhdGljIHN0cnVj dCBrZXl0YWIgc3NsdmVydGFiW10gPSB7CisgICAgImZhaWwtaWYtbm8tcGVlci1jZXJ0IiwgU1NM X1ZFUklGWV9QRUVSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX0ZB SUxfSUZfTk9fUEVFUl9DRVJULCAwLAorICAgICJubyIsICAgICAgICAgICAgICAgU1NMX1ZFUklG WV9OT05FLCAwLAorICAgICJub25lIiwgICAgICAgICAgICAgU1NMX1ZFUklGWV9OT05FLCBDTV9J TlYsCisgICAgIm9mZiIsICAgICAgICAgICAgICBTU0xfVkVSSUZZX05PTkUsIENNX0lOViwKKyAg ICAib24iLCAgICAgICAgICAgICAgIFNTTF9WRVJJRllfUEVFUiwgQ01fSU5WLAorICAgICJwZWVy LWNlcnQiLCAgICAgICAgU1NMX1ZFUklGWV9QRUVSLCAwCit9Oworc3RhdGljIGludCBuc3NsdmVy dGFiID0gc2l6ZW9mKHNzbHZlcnRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworI2VuZGlmIC8q IENLX1NTTCAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ0tfRU5D UllQVElPTgoraW50IGN4X3R5cGUgPSBDWF9BVVRPOworZXh0ZXJuIGludCBzbF9jeF90eXBlOwor I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KK2V4dGVybiBjaGFyICp0Y3BfYWRkcmVzczsKKyNp Zm5kZWYgTk9IVFRQCitleHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5OworZXh0ZXJuIGNoYXIg KiB0Y3BfaHR0cF9wcm94eV91c2VyOworZXh0ZXJuIGNoYXIgKiB0Y3BfaHR0cF9wcm94eV9wd2Q7 CitleHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5X2FnZW50OworI2VuZGlmIC8qIE5PSFRUUCAq LworI2lmZGVmIE5UCisjaWZkZWYgQ0tfU09DS1MKK2V4dGVybiBjaGFyICp0Y3Bfc29ja3Nfc3Zy OworZXh0ZXJuIGNoYXIgKnRjcF9zb2Nrc191c2VyOworI2lmZGVmIENLX1NPQ0tTX05TCitleHRl cm4gY2hhciAqdGNwX3NvY2tzX25zOworI2VuZGlmIC8qIENLX1NPQ0tTX05TICovCisjZW5kaWYg LyogQ0tfU09DS1MgKi8KKyNlbmRpZiAvKiBOVCAqLworCisjZGVmaW5lIFVQV19VU0VSICAxCisj ZGVmaW5lIFVQV19QQVNTICAyCisjZGVmaW5lIFVQV19BR0VOVCAzCisKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHVzZXJwYXNzW10gPSB7CisgICAgeyAiL2FnZW50IiwgICBVUFdfQUdFTlQsIENNX0FS RyB9LAorICAgIHsgIi9wYXNzd29yZCIsIFVQV19QQVNTLCBDTV9BUkcgfSwKKyAgICB7ICIvdXNl ciIsICAgICBVUFdfVVNFUiwgQ01fQVJHIH0sCit9Oworc3RhdGljIGludCBudXNlcnBhc3MgPSBz aXplb2YodXNlcnBhc3MpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgdG5uZWd0YWJbXSA9IHsgICAgIC8qIFRFTE5FVCBORUdPVElBVElPTiB0YWJsZSAqLwor ICAgICJhY2NlcHRlZCIsICBUTl9OR19BQywgMCwKKyAgICAicmVmdXNlZCIsICAgVE5fTkdfUkYs IDAsCisgICAgInJlcSIsICAgICAgIFROX05HX1JRLCBDTV9JTlZ8Q01fQUJSLAorICAgICJyZXF1 IiwgICAgICBUTl9OR19SUSwgQ01fSU5WfENNX0FCUiwKKyAgICAicmVxdWUiLCAgICAgVE5fTkdf UlEsIENNX0lOVnxDTV9BQlIsCisgICAgInJlcXVlcyIsICAgIFROX05HX1JRLCBDTV9JTlZ8Q01f QUJSLAorICAgICJyZXF1ZXN0IiwgICBUTl9OR19SUSwgQ01fSU5WfENNX0FCUiwKKyAgICAicmVx dWVzdGUiLCAgVE5fTkdfUlEsIENNX0lOVnxDTV9BQlIsCisgICAgInJlcXVlc3RlZCIsIFROX05H X1JRLCAwLAorICAgICJyZXF1aXJlZCIsICBUTl9OR19NVSwgMAorfTsKK3N0YXRpYyBpbnQgbnRu bmVndGFiID0gc2l6ZW9mKHRubmVndGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKKyNpZmRl ZiBDS19FTkNSWVBUSU9OCitzdGF0aWMgc3RydWN0IGtleXRhYiB0eXBrd2RbXSA9IHsKKyAgICAi L3R5cGUiLCAwLCBDTV9BUkcKK307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRuZW5jdGFiW10g PSB7ICAgICAvKiBURUxORVQgRU5DUllQVElPTiB0YWJsZSAqLworICAgICJhY2NlcHRlZCIsICAg VE5fTkdfQUMsICAgIENNX0lOViwKKyAgICAicmVmdXNlZCIsICAgIFROX05HX1JGLCAgICBDTV9J TlYsCisgICAgInJlcSIsICAgICAgICBUTl9OR19SUSwgICAgQ01fSU5WfENNX0FCUiwKKyAgICAi cmVxdSIsICAgICAgIFROX05HX1JRLCAgICBDTV9JTlZ8Q01fQUJSLAorICAgICJyZXF1ZSIsICAg ICAgVE5fTkdfUlEsICAgIENNX0lOVnxDTV9BQlIsCisgICAgInJlcXVlcyIsICAgICBUTl9OR19S USwgICAgQ01fSU5WfENNX0FCUiwKKyAgICAicmVxdWVzdCIsICAgIFROX05HX1JRLCAgICBDTV9J TlZ8Q01fQUJSLAorICAgICJyZXF1ZXN0ZSIsICAgVE5fTkdfUlEsICAgIENNX0lOVnxDTV9BQlIs CisgICAgInJlcXVlc3RlZCIsICBUTl9OR19SUSwgICAgQ01fSU5WLAorICAgICJyZXF1aXJlZCIs ICAgVE5fTkdfTVUsICAgIENNX0lOViwKKyAgICAic3RhcnQiLCAgICAgIFROX0VOX1NUQVJULCBD TV9JTlYsCisgICAgInN0b3AiLCAgICAgICBUTl9FTl9TVE9QLCAgQ01fSU5WLAorICAgICJ0eXBl IiwgICAgICAgVE5fRU5fVFlQLCAgIDAKK307CitzdGF0aWMgaW50IG50bmVuYyA9IHNpemVvZih0 bmVuY3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIDsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9O ICovCisKKyNpZmRlZiBDS19GT1JXQVJEX1gKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRuZndkeHRh YltdID0geyAgICAvKiBURUxORVQgRk9SV0FSRC1YIHRhYmxlICovCisgICAgIm5vLWVuY3J5cHRp b24iLCAgICAxLCAgQ01fSU5WLAorICAgICJ4YXV0aG9yaXR5LWZpbGUiLCAgMCwgIDAKK307Citz dGF0aWMgaW50IG50bmZ3ZHggPSBzaXplb2YodG5md2R4dGFiKS9zaXplb2Yoc3RydWN0IGtleXRh YikgOworI2VuZGlmIC8qIENLX0ZPUldBUkRfWCAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiB0 bmJ1Z3RhYltdID0geyAgICAgLyogVEVMTkVUIEJVRyB0YWJsZSAqLworICAgICJhdXRoLWtyYjUt ZGVzIiwgICAgICAgICA0LCAwLAorICAgICJiaW5hcnktbWUtbWVhbnMtdS10b28iLCAwLCAwLAor ICAgICJiaW5hcnktdS1tZWFucy1tZS10b28iLCAxLCAwLAorICAgICJpbmZpbml0ZS1sb29wLWNo ZWNrIiwgICAyLCAwLAorICAgICJzYi1pbXBsaWVzLXdpbGwtZG8iLCAgICAzLCAwCit9OworCisj aWZkZWYgQ0tfRU5WSVJPTk1FTlQKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRuZW52dGFiW10gPSB7 ICAgICAvKiBURUxORVQgRU5WSVJPTk1FTlQgdGFibGUgKi8KKyAgICAiYWNjdCIsICAgICBUTl9F TlZfQUNDVCwgICAgMCwKKyAgICAiZGlzcGxheSIsICBUTl9FTlZfRElTUCwgICAgMCwKKyAgICAi am9iIiwgICAgICBUTl9FTlZfSk9CLCAgICAgMCwKKyAgICAibG9jYXRpb24iLCBUTl9FTlZfTE9D LCAgICAgMCwKKyAgICAib2ZmIiwgICAgICBUTl9FTlZfT0ZGLCAgICAgQ01fSU5WLAorICAgICJv biIsICAgICAgIFROX0VOVl9PTiwgICAgICBDTV9JTlYsCisgICAgInByaW50ZXIiLCAgVE5fRU5W X1BSTlQsICAgIDAsCisgICAgInN5c3RlbXR5cGUiLFROX0VOVl9TWVMsICAgIDAsCisgICAgInVz ZXIiLCAgICAgVE5fRU5WX1VTUiwgICAgIDAsCisgICAgInVzZXJ2YXIiLCAgVE5fRU5WX1VWQVIs ICAgIDAsCisgICAgIiIsIDAsIDAKK307CitzdGF0aWMgaW50IG50bmVudiA9IHNpemVvZih0bmVu dnRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVO VCAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRu YXV0aHRhYltdID0geyAgICAvKiBURUxORVQgQVVUSEVOVElDQVRJT04gdGFibGUgKi8KKyAgICAi YWNjZXB0ZWQiLCAgIFROX05HX0FDLCAgQ01fSU5WLAorICAgICJlbmNyeXB0LWZsYWciLCBUTl9B VV9FTkMsIDAsCisgICAgImZvcndhcmRpbmciLCBUTl9BVV9GV0QsICAgMCwKKyAgICAiaG93LWZs YWciLCAgIFROX0FVX0hPVywgICAwLAorICAgICJyZWZ1c2VkIiwgICAgVE5fTkdfUkYsICBDTV9J TlYsCisgICAgInJlcSIsICAgICAgICBUTl9OR19SUSwgIENNX0lOVnxDTV9BQlIsCisgICAgInJl cXUiLCAgICAgICBUTl9OR19SUSwgIENNX0lOVnxDTV9BQlIsCisgICAgInJlcXVlIiwgICAgICBU Tl9OR19SUSwgIENNX0lOVnxDTV9BQlIsCisgICAgInJlcXVlcyIsICAgICBUTl9OR19SUSwgIENN X0lOVnxDTV9BQlIsCisgICAgInJlcXVlc3QiLCAgICBUTl9OR19SUSwgIENNX0lOVnxDTV9BQlIs CisgICAgInJlcXVlc3RlIiwgICBUTl9OR19SUSwgIENNX0lOVnxDTV9BQlIsCisgICAgInJlcXVl c3RlZCIsICBUTl9OR19SUSwgIENNX0lOViwKKyAgICAicmVxdWlyZWQiLCAgIFROX05HX01VLCAg Q01fSU5WLAorICAgICJ0eXBlIiwgICAgICAgVE5fQVVfVFlQLCAwCit9Oworc3RhdGljIGludCBu dG5hdXRoID0gc2l6ZW9mKHRuYXV0aHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIDsKKworc3Ry dWN0IGtleXRhYiBhdXR5cHRhYltdID0geyAgICAvKiBURUxORVQgQVVUSEVOVElDQVRJT04gVFlQ RSB0YWJsZSAqLworICAgICJhdXRvbWF0aWMiLCAgQVVUSF9BVVRPLCAwLAorI2lmZGVmIENLX0tF UkJFUk9TCisgICAgIms0IiwgICAgICAgICBBVVRIX0tSQjQsIENNX0lOViwKKyAgICAiazUiLCAg ICAgICAgIEFVVEhfS1JCNSwgQ01fSU5WLAorICAgICJrZXJiZXJvczQiLCAgQVVUSF9LUkI0LCAw LAorICAgICJrZXJiZXJvczUiLCAgQVVUSF9LUkI1LCAwLAorICAgICJrZXJiZXJvc19pdiIsQVVU SF9LUkI0LCBDTV9JTlYsCisgICAgImtlcmJlcm9zX3YiLCBBVVRIX0tSQjUsIENNX0lOViwKKyAg ICAia3JiNCIsICAgICAgIEFVVEhfS1JCNCwgQ01fSU5WLAorICAgICJrcmI1IiwgICAgICAgQVVU SF9LUkI1LCBDTV9JTlYsCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICAibm9uZSIsICAg ICAgIEFVVEhfTk9ORSwgMCwKKyNpZmRlZiBOVAorICAgICJudGxtIiwgICAgICAgQVVUSF9OVExN LCAwLAorI2VuZGlmIC8qIE5UICovCisjaWZkZWYgQ0tfU1JQCisgICAgInNycCIsICAgICAgICBB VVRIX1NSUCwgIDAsCisjZW5kaWYgLyogQ0tfU1JQICovCisjaWZkZWYgQ0tfU1NMCisgICAgInNz bCIsICAgICAgICBBVVRIX1NTTCwgIDAsCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgIiIsIDAs IDAKK307CitpbnQgbmF1dHlwID0gc2l6ZW9mKGF1dHlwdGFiKS9zaXplb2Yoc3RydWN0IGtleXRh YikgLSAxOworCitzdHJ1Y3Qga2V5dGFiIGF1aG93dGFiW10gPSB7ICAgIC8qIFRFTE5FVCBBVVRI RU5USUNBVElPTiBIT1cgdGFibGUgKi8KKyAgICAiYW55IiwgICAgIFROX0FVVEhfSE9XX0FOWSwg ICAgIDAsCisgICAgIm11dHVhbCIsICBUTl9BVVRIX0hPV19NVVRVQUwsICAwLAorICAgICJvbmUt d2F5IiwgVE5fQVVUSF9IT1dfT05FX1dBWSwgMCwKKyAgICAiIiwgMCwgMAorfTsKK2ludCBuYXVo b3cgPSBzaXplb2YoYXVob3d0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7CisKK3N0cnVj dCBrZXl0YWIgYXVlbmN0YWJbXSA9IHsgICAgLyogVEVMTkVUIEFVVEhFTlRJQ0FUSU9OIEVOQ1JZ UFQgdGFibGUgKi8KKyAgICAiYW55IiwgICAgIFROX0FVVEhfRU5DX0FOWSwgICAgIDAsCisgICAg Im5vbmUiLCAgICBUTl9BVVRIX0VOQ19OT05FLCAgICAwLAorICAgICJ0ZWxvcHQiLCAgVE5fQVVU SF9FTkNfVEVMT1BULCAgMCwKKyNpZmRlZiBDS19TU0wKKyAgICAidGxzIiwgICAgIFROX0FVVEhf RU5DX1RMUywgICAgIDAsCisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgIiIsIDAsIDAKK307Citp bnQgbmF1ZW5jID0gc2l6ZW9mKGF1ZW5jdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOwor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNkZWZpbmUgVE5fTkxfQklOIDMKKyNk ZWZpbmUgVE5fTkxfTlZUIDQKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRuX25sbXRhYltdID0geyAg ICAvKiBURUxORVQgTkVXTElORS1NT0RFIHRhYmxlICovCisgICAgImJpbmFyeS1tb2RlIiwgVE5f TkxfQklOLCAwLCAgICAgICAgLyogQmluYXJ5IG1vZGUgKi8KKyAgICAibnZ0IiwgICAgVE5fTkxf TlZULCAwLCAgICAgICAgICAgICAvKiBOVlQgbW9kZSAqLworICAgICJvZmYiLCAgICBUTkxfQ1JO VUwsIENNX0lOViwgICAgICAgIC8qIENSLU5VTCAoVEVMTkVUIHNwZWMpICovCisgICAgIm9uIiwg ICAgIFROTF9DUkxGLCAgQ01fSU5WLCAgICAgICAgLyogQ1ItTEYgKFRFTE5FVCBzcGVjKSAqLwor ICAgICJyYXciLCAgICBUTkxfQ1IsICAgIENNX0lOViAgICAgICAgIC8qIENSIG9ubHkgKG91dCBv ZiBzcGVjKSAqLworfTsKK3N0YXRpYyBpbnQgbnRuX25sbSA9IChzaXplb2YodG5fbmxtdGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRubG10YWJb XSA9IHsgICAgICAvKiBURUxORVQgTkVXTElORS1NT0RFIHRhYmxlICovCisgICAgImNyIiwgICAg IFROTF9DUiwgICAgQ01fSU5WLCAgICAgICAgLyogQ1Igb25seSAob3V0IG9mIHNwZWMpICovCisg ICAgImNyLWxmIiwgIFROTF9DUkxGLCAgQ01fSU5WLCAgICAgICAgLyogQ1ItTEYgKFRFTE5FVCBz cGVjKSAqLworICAgICJjci1udWwiLCBUTkxfQ1JOVUwsIENNX0lOViwgICAgICAgIC8qIENSLU5V TCAoVEVMTkVUIHNwZWMpICovCisgICAgImxmIiwgICAgIFROTF9MRiwgICAgQ01fSU5WLCAgICAg ICAgLyogTEYgaW5zdGVhZCBvZiBDUi1MRiAqLworICAgICJvZmYiLCAgICBUTkxfQ1JOVUwsIDAs ICAgICAgICAgICAgIC8qIENSLU5VTCAoVEVMTkVUIHNwZWMpICovCisgICAgIm9uIiwgICAgIFRO TF9DUkxGLCAgMCwgICAgICAgICAgICAgLyogQ1ItTEYgKFRFTE5FVCBzcGVjKSAqLworICAgICJy YXciLCAgICBUTkxfQ1IsICAgIDAgICAgICAgICAgICAgIC8qIENSIG9ubHkgKG91dCBvZiBzcGVj KSAqLworfTsKK3N0YXRpYyBpbnQgbnRubG0gPSAoc2l6ZW9mKHRubG10YWIpIC8gc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiB0bnRhYltdID0geworI2lmZGVmIENLX0FV VEhFTlRJQ0FUSU9OCisgICAgImF1dGhlbnRpY2F0aW9uIiwgICAgICAgQ0tfVE5fQVUsICAwLAor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgImIiLCAgICAgICAgICAgICAgICAg ICAgQ0tfVE5fQk0sICBDTV9JTlZ8Q01fQUJSLAorICAgICJiaSIsICAgICAgICAgICAgICAgICAg IENLX1ROX0JNLCAgQ01fSU5WfENNX0FCUiwKKyAgICAiYmluIiwgICAgICAgICAgICAgICAgICBD S19UTl9CTSwgIENNX0lOVnxDTV9BQlIsCisgICAgImJpbmEiLCAgICAgICAgICAgICAgICAgQ0tf VE5fQk0sICBDTV9JTlZ8Q01fQUJSLAorICAgICJiaW5hciIsICAgICAgICAgICAgICAgIENLX1RO X0JNLCAgQ01fSU5WfENNX0FCUiwKKyAgICAiYmluYXJ5IiwgICAgICAgICAgICAgICBDS19UTl9C TSwgIENNX0lOVnxDTV9BQlIsCisgICAgImJpbmFyeS0iLCAgICAgICAgICAgICAgQ0tfVE5fQk0s ICBDTV9JTlZ8Q01fQUJSLAorICAgICJiaW5hcnktbW9kZSIsICAgICAgICAgIENLX1ROX0JNLCAg Q01fSU5WLAorICAgICJiaW5hcnktdHJhbnNmZXItbW9kZSIsIENLX1ROX1hGLCAgMCwKKyAgICAi YmluYXJ5LXhmZXItbW9kZSIsICAgICBDS19UTl9YRiwgIENNX0lOViwKKyAgICAiYnVnIiwgICAg ICAgICAgICAgICAgICBDS19UTl9CVUcsIDAsCisgICAgImRlYnVnIiwgICAgICAgICAgICAgICAg Q0tfVE5fREIsICAwLAorICAgICJkZWxheS1zYiIsICAgICAgICAgICAgIENLX1ROX0RMLCAgMCwK KyAgICAiZWNobyIsICAgICAgICAgICAgICAgICBDS19UTl9FQywgIDAsCisjaWZkZWYgQ0tfRU5D UllQVElPTgorICAgICJlbmNyeXB0aW9uIiwgICAgICBDS19UTl9FTkMsICAwLAorI2VuZGlmIC8q IENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDS19FTlZJUk9OTUVOVAorICAgICJlbnZpcm9ubWVu dCIsICAgICBDS19UTl9FTlYsICAwLAorI2VuZGlmIC8qIENLX0VOVklST05NRU5UICovCisjaWZk ZWYgQ0tfRk9SV0FSRF9YCisgICAgImZvcndhcmQteCIsICAgICAgIENLX1ROX0ZYLCAgIDAsCisj ZW5kaWYgLyogQ0tfRk9SV0FSRF9YICovCisjaWZkZWYgSUtTX09QVElPTgorICAgICJrZXJtaXQi LCAgICAgICAgICBDS19UTl9JS1MsICBDTV9JTlYsCisjZW5kaWYgLyogSUtTX09QVElPTiAqLwor I2lmZGVmIENLX1NORExPQworICAgICJsb2NhdGlvbiIsICAgICAgICBDS19UTl9MT0MsICAwLAor I2VuZGlmIC8qIENLX1NORExPQyAqLworI2lmZGVmIENLX05BV1MKKyAgICAibmF3cyIsICAgICAg ICAgICAgQ0tfVE5fTkFXUywgQ01fSU5WLAorI2VuZGlmIC8qIENLX05BV1MgKi8KKyAgICAibmV3 bGluZS1tb2RlIiwgICAgQ0tfVE5fTkwsICAgMCwKKyAgICAibm8tZW5jcnlwdC1kdXJpbmcteGZl ciIsIENLX1ROX05FLCBDTV9JTlYsCisgICAgInByb21wdC1mb3ItdXNlcmlkIixDS19UTl9QVUlE LDAsCisgICAgInJlbW90ZS1lY2hvIiwgICAgIENLX1ROX1JFLCAgIDAsCisjaWZkZWYgQ0tfU1NM CisgICAgInN0YXJ0LXRscyIsICAgICAgIENLX1ROX1RMUywgIENNX0lOViwKKyNlbmRpZiAvKiBD S19TU0wgKi8KKyNpZmRlZiBOVAorICAgICJzZnUtY29tcGF0aWJpbGl0eSIsIENLX1ROX1NGVSwg MCwKKyNlbHNlCisgICAgInNmdS1jb21wYXRpYmlsaXR5IiwgQ0tfVE5fU0ZVLCBDTV9JTlYsCisj ZW5kaWYgLyogTlQgKi8KKyAgICAidGVybWluYWwtdHlwZSIsICAgQ0tfVE5fVFQsICAgMCwKKyAg ICAid2FpdC1mb3ItbmVnb3RpYXRpb25zIiwgQ0tfVE5fV0FJVCwgMCwKKyNpZmRlZiBDS19FTlZJ Uk9OTUVOVAorICAgICJ4ZGlzcGxheS1sb2NhdGlvbiIsQ0tfVE5fWEQsIENNX0lOViwKKyNlbmRp ZiAvKiBDS19FTlZJUk9OTUVOVCAqLworICAgICIiLCAwLCAwCit9OworaW50IG50biA9IChzaXpl b2YodG50YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0cnVjdCBrZXl0YWIg dG5vcHR0YWJbXSA9IHsKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICJhdXRoZW50aWNh dGlvbiIsICBDS19UTl9BVSwgICAwLAorI2Vsc2UKKyAgICAiYXV0aGVudGljYXRpb24iLCAgQ0tf VE5fQVUsICAgQ01fSU5WLAorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgImJp bmFyeS1tb2RlIiwgICAgIENLX1ROX0JNLCAgIDAsCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICJj IiwgICAgICAgICAgICAgICBDS19UTl9DUEMsICAgQ01fSU5WfENNX0FCUiwKKyAgICAiY28iLCAg ICAgICAgICAgICAgQ0tfVE5fQ1BDLCAgIENNX0lOVnxDTV9BQlIsCisgICAgImNvbSIsICAgICAg ICAgICAgIENLX1ROX0NQQywgICBDTV9JTlZ8Q01fQUJSLAorICAgICJjb20tcG9ydC1jb250cm9s IixDS19UTl9DUEMsICAgMCwKKyAgICAiY29tcG9ydC1jb250cm9sIiwgQ0tfVE5fQ1BDLCAgIENN X0lOViwKKyNlbHNlIC8qIFROX0NPTVBPUlQgKi8KKyAgICAiY29tLXBvcnQtY29udHJvbCIsQ0tf VE5fQ1BDLCAgQ01fSU5WLAorICAgICJjb21wb3J0LWNvbnRyb2wiLCBDS19UTl9DUEMsICAgQ01f SU5WLAorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAiZWNobyIsICAgICAgICAgICAgQ0tf VE5fRUMsICAgMCwKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgImVuY3J5cHRpb24iLCAgICAg IENLX1ROX0VOQywgIDAsCisjZWxzZQorICAgICJlbmNyeXB0aW9uIiwgICAgICBDS19UTl9FTkMs ICBDTV9JTlYsCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIENLX0ZPUldBUkRf WAorICAgICJmb3J3YXJkLXgiLCAgICAgICBDS19UTl9GWCwgICAwLAorI2Vsc2UgLyogQ0tfRk9S V0FSRF9YICovCisgICAgImZvcndhcmQteCIsICAgICAgIENLX1ROX0ZYLCAgIENNX0lOViwKKyNl bmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyAgICAiaWJtLXNhayIsICAgICAgICAgQ0tfVE5fU0FL LCAgQ01fSU5WLAorI2lmZGVmIElLU19PUFRJT04KKyAgICAia2VybWl0IiwgICAgICAgICAgQ0tf VE5fSUtTLCAgMCwKKyNlbHNlCisgICAgImtlcm1pdCIsICAgICAgICAgIENLX1ROX0lLUywgIENN X0lOViwKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisgICAgImxmbG93IiwgICAgICAgICAgIENL X1ROX0ZMVywgIENNX0lOViwKKyAgICAibG9nb3V0IiwgICAgICAgICAgQ0tfVE5fTE9HLCAgMCwK KyNpZmRlZiBDS19OQVdTCisgICAgIm5hd3MiLCAgICAgICAgICAgIENLX1ROX05BV1MsIDAsCisj ZWxzZQorICAgICJuYXdzIiwgICAgICAgICAgICBDS19UTl9OQVdTLCBDTV9JTlYsCisjZW5kaWYg LyogQ0tfTkFXUyAqLworI2lmZGVmIENLX0VOVklST05NRU5UCisgICAgIm5ldy1lbnZpcm9ubWVu dCIsIENLX1ROX0VOViwgIDAsCisjZWxzZQorICAgICJuZXctZW52aXJvbm1lbnQiLCBDS19UTl9F TlYsICBDTV9JTlYsCisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KKyAgICAicHJhZ21hLWhl YXJ0YmVhdCIsQ0tfVE5fUEhSLCAgQ01fSU5WLAorICAgICJwcmFnbWEtbG9nb24iLCAgICBDS19U Tl9QTEcsICBDTV9JTlYsCisgICAgInByYWdtYS1zc3BpIiwgICAgIENLX1ROX1BTUCwgIENNX0lO ViwKKyAgICAic2FrIiwgICAgICAgICAgICAgQ0tfVE5fU0FLLCAgQ01fSU5WLAorI2lmZGVmIENL X1NORExPQworICAgICJzZW5kLWxvY2F0aW9uIiwgICBDS19UTl9MT0MsICAwLAorI2Vsc2UKKyAg ICAic2VuZC1sb2NhdGlvbiIsICAgQ0tfVE5fTE9DLCAgQ01fSU5WLAorI2VuZGlmIC8qIENLX1NO RExPQyAqLworICAgICJzZ2EiLCAgICAgICAgICAgICBDS19UTl9TR0EsIENNX0lOVnxDTV9BQlIs CisjaWZkZWYgQ0tfU1NMCisgICAgInN0YXJ0LXRscyIsICAgICAgIENLX1ROX1RMUywgIDAsCisj ZWxzZQorICAgICJzdGFydC10bHMiLCAgICAgICBDS19UTl9UTFMsICBDTV9JTlYsCisjZW5kaWYg LyogQ0tfU1NMICovCisgICAgInN1cHByZXNzLWdvLWFoZWFkcyIsIENLX1ROX1NHQSwgMCwKKyAg ICAidGVybWluYWwtdHlwZSIsICAgQ0tfVE5fVFQsICAgMCwKKyAgICAidHR5cGUiLCAgICAgICAg ICAgQ0tfVE5fVFQsICAgQ01fSU5WfENNX0FCUiwKKyNpZmRlZiBDS19FTlZJUk9OTUVOVAorICAg ICJ4ZGlzcGxheS1sb2NhdGlvbiIsIENLX1ROX1hELCAwLAorI2Vsc2UKKyAgICAieGRpc3BsYXkt bG9jYXRpb24iLCBDS19UTl9YRCwgQ01fSU5WLAorI2VuZGlmIC8qIENLX0VOVklST05NRU5UICov CisgICAgIiIsIDAsIDAKK307CitpbnQgbnRub3B0ID0gKHNpemVvZih0bm9wdHRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RydWN0IGtleXRhYiB0bm9wdHN3W10gPSB7Cisg ICAgIi9jbGllbnQiLCAgQ0tfVE5fQ0xJRU5ULCAgIDAsCisgICAgIi9zZXJ2ZXIiLCAgQ0tfVE5f U0VSVkVSLCAgIDAKK307CitpbnQgbnRub3B0c3cgPSAoc2l6ZW9mKHRub3B0c3cpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworc3RydWN0IGtleXRhYiBm dHJ0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEZlYXR1cmUgdGFibGUgKi8KKyNpZm5kZWYgTk9D U0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwID0gd2UgaGF2ZSBpdCwgMSA9IHdlIGRv bid0ICovCisiY2hhcmFjdGVyLXNldHMiLCAgICAgICAwLCAwLAorI2Vsc2UKKyJjaGFyYWN0ZXIt c2V0cyIsICAgICAgIDEsIDAsCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmbmRlZiBOT0NZUklM CisiY3lyaWxsaWMiLCAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJjeXJpbGxpYyIsICAgICAg ICAgICAgIDEsIDAsCisjZW5kaWYgLyogTk9DWVJJTCAqLworCisjaWZuZGVmIE5PTE9HRElBTAor ImN4LWxvZyIsICAgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisiY3gtbG9nIiwgICAgICAgICAg ICAgICAxLCAwLAorI2VuZGlmIC8qIE5PTE9HRElBTCAqLworCisjaWZuZGVmIE5PREVCVUcKKyJk ZWJ1ZyIsICAgICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorImRlYnVnIiwgICAgICAgICAgICAg ICAgMSwgMCwKKyNlbmRpZiAvKiBOT0RFQlVHICovCisKKyNpZm5kZWYgTk9ESUFMCisiZGlhbCIs ICAgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJkaWFsIiwgICAgICAgICAgICAgICAgIDEs IDAsCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZmRlZiBEWU5BTUlDCisiZHluYW1pYy1tZW1v cnkiLCAgICAgICAwLCAwLAorI2Vsc2UKKyJkeW5hbWljLW1lbW9yeSIsICAgICAgIDEsIDAsCisj ZW5kaWYgLyogRFlOQU1JQyAqLworCisjaWZuZGVmIE5PWEZFUgorImZpbGUtdHJhbnNmZXIiLCAg ICAgICAgMCwgMCwKKyNlbHNlCisiZmlsZS10cmFuc2ZlciIsICAgICAgICAxLCAwLAorI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZkZWYgWFhGV0QKKyJmb3J3YXJkIiwgICAgICAgICAgICAgIDAs IDAsCisjZWxzZQorImZvcndhcmQiLCAgICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBYWEZX RCAqLworCisjaWZkZWYgTkVXRlRQCisiZnRwIiwgICAgICAgICAgICAgICAgICAwLCAwLAorI2Vs c2UKKyJmdHAiLCAgICAgICAgICAgICAgICAgIDEsIDAsCisjZW5kaWYgLyogTkVXRlRQICovCisK KyNpZmRlZiBDS19DVVJTRVMKKyJmdWxsc2NyZWVuLWRpc3BsYXkiLCAgIDAsIDAsCisjZWxzZQor ImZ1bGxzY3JlZW4tZGlzcGxheSIsICAgMSwgMCwKKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyNp ZmRlZiBHUkVFSworImdyZWVrIiwgICAgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisiZ3JlZWsi LCAgICAgICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgSEVCUkVX CisiaGVicmV3IiwgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJoZWJyZXciLCAgICAgICAg ICAgICAgIDEsIDAsCisjZW5kaWYgLyogSEVCUkVXICovCisjaWZuZGVmIE5PSEVMUAorImhlbHAi LCAgICAgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisiaGVscCIsICAgICAgICAgICAgICAgICAx LCAwLAorI2VuZGlmIC8qIE5PSEVMUCAqLworCisjaWZuZGVmIE5PSUtTRAorImlrc2QiLCAgICAg ICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisiaWtzZCIsICAgICAgICAgICAgICAgICAxLCAwLAor I2VuZGlmIC8qIE5PSUtTRCAqLworCisjaWZuZGVmIE5PU1BMCisiaWYtY29tbWFuZCIsICAgICAg ICAgICAwLCAwLAorI2Vsc2UKKyJpZi1jb21tYW5kIiwgICAgICAgICAgIDEsIDAsCisjZW5kaWYg LyogTk9TUEwgKi8KKyNpZm5kZWYgTk9KQworI2lmZGVmIFVOSVgKKyJqb2ItY29udHJvbCIsICAg ICAgICAgIDAsIDAsCisjZWxzZQorImpvYi1jb250cm9sIiwgICAgICAgICAgMSwgMCwKKyNlbmRp ZiAvKiBVTklYICovCisjZWxzZQorImpvYi1jb250cm9sIiwgICAgICAgICAgMSwgMCwKKyNlbmRp ZiAvKiBOT0pDICovCisjaWZkZWYgS0FOSkkKKyJrYW5qaSIsICAgICAgICAgICAgICAgIDAsIDAs CisjZWxzZQorImthbmppIiwgICAgICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBLQU5KSSAq LworCisjaWZuZGVmIE5PWEZFUgorImtlcm1pdCIsICAgICAgICAgICAgICAgMCwgMCwKKyNlbHNl Cisia2VybWl0IiwgICAgICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8qIE5PWEZFUiAqLworCisj aWZkZWYgQ0tfS0VSQkVST1MKKyJrZXJiZXJvcyIsICAgICAgICAgICAgIDAsIDAsCisjZWxzZQor ImtlcmJlcm9zIiwgICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwor CisjaWZuZGVmIE5PQ1NFVFMKKyJsYXRpbjEiLCAgICAgICAgICAgICAgIDAsIDAsCisjZWxzZQor ImxhdGluMSIsICAgICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZk ZWYgTEFUSU4yCisibGF0aW4yIiwgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJsYXRpbjIi LCAgICAgICAgICAgICAgIDEsIDAsCisjZW5kaWYgLyogTEFUSU4yICovCisKKyNpZmRlZiBDS0xF QVJOCisibGVhcm5lZC1zY3JpcHRzIiwgICAgICAgMCwgMCwKKyNlbHNlCisibGVhcm5lZC1zY3Jp cHRzIiwgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBDS0xFQVJOICovCisKKyNpZm5kZWYgTk9MT0NB TAorIm1ha2luZy1jb25uZWN0aW9ucyIsICAgMCwgMCwKKyNlbHNlCisibWFraW5nLWNvbm5lY3Rp b25zIiwgICAxLCAwLAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE5FVENPTk4KKyJu ZXR3b3JrIiwgICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorIm5ldHdvcmsiLCAgICAgICAgICAg ICAgMSwgMCwKKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBOVAorI2lmZGVmIENLX0FV VEhFTlRJQ0FUSU9OCisibnRsbSIsICAgICAgICAgICAgICAgICAxLCAwLAorI2Vsc2UgLyogQ0tf QVVUSEVOVElDQVRJT04gKi8KKyJudGxtIiwgICAgICAgICAgICAgICAgIDAsIDAsCisjZW5kaWYg LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNlbHNlIC8qIE5UICovCisibnRsbSIsICAgICAgICAg ICAgICAgICAwLCAwLAorI2VuZGlmIC8qIE5UICovCisKKyNpZmRlZiBQSVBFU0VORAorInBpcGVz IiwgICAgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisjaWZkZWYgTkVUQ01ECisicGlwZXMiLCAg ICAgICAgICAgICAgICAwLCAwLAorI2VuZGlmIC8qIE5FVENNRCAqLworI2VuZGlmIC8qIFBJUEVT RU5EICovCisjaWZuZGVmIFBJUEVTRU5ECisjaWZuZGVmIE5FVENNRAorInBpcGVzIiwgICAgICAg ICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2VuZGlmIC8qIE5FVENNRCAq LworCisjaWZkZWYgTkVUUFRZCisicHR5IiwgICAgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UK KyJwdHkiLCAgICAgICAgICAgICAgICAgIDEsIDAsCisjZW5kaWYgLyogTkVUUFRZICovCisKKyNp Zm5kZWYgTk9QVVNICisicHVzaCIsICAgICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJwdXNo IiwgICAgICAgICAgICAgICAgIDEsIDAsCisjZW5kaWYgLyogUFVTSCAqLworCisjaWZkZWYgQ0tf UkVESVIKKyJyZWRpcmVjdCIsICAgICAgICAgICAgIDAsIDAsCisjZWxzZQorInJlZGlyZWN0Iiwg ICAgICAgICAgICAgMSwgMCwKKyNlbmRpZiAvKiBDS19SRURJUiAqLworCisjaWZkZWYgQ0tfUlRT Q1RTCisicnRzL2N0cyIsICAgICAgICAgICAgICAwLCAwLAorI2Vsc2UKKyJydHMvY3RzIiwgICAg ICAgICAgICAgIDEsIDAsCisjZW5kaWYgLyogUlRTL0NUUyAqLworCisjaWZuZGVmIE5PU0NSSVBU Cisic2NyaXB0LWNvbW1hbmQiLCAgICAgICAwLCAwLAorI2Vsc2UKKyJzY3JpcHQtY29tbWFuZCIs ICAgICAgIDEsIDAsCisjZW5kaWYgLyogTk9TQ1JJUFQgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyJz ZXJ2ZXItbW9kZSIsICAgICAgICAgIDAsIDAsCisjZWxzZQorInNlcnZlci1tb2RlIiwgICAgICAg ICAgMSwgMCwKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworCisjaWZuZGVmIE5PU0VYUAorInNleHBy ZXNzaW9uIiwgICAgICAgICAgMCwgMCwKKyNlbHNlCisic2V4cHJlc3Npb24iLCAgICAgICAgICAx LCAwLAorI2VuZGlmIC8qIE5PU0VYUCAqLworCisjaWZkZWYgU0ZUUF9CVUlMVElOCisic2Z0cCIs ICAgICAgICAgICAgICAgICAxLCAwLAorI2Vsc2UKKyJzZnRwIiwgICAgICAgICAgICAgICAgIDAs IDAsCisjZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCisKKyNpZm5kZWYgTk9TSE9XCisic2hvdy1j b21tYW5kIiwgICAgICAgICAwLCAwLAorI2Vsc2UKKyJzaG93LWNvbW1hbmQiLCAgICAgICAgIDEs IDAsCisjZW5kaWYgLyogTk9TSE9XICovCisKKyNpZmRlZiBDS19TUlAKKyJzcnAiLCAgICAgICAg ICAgICAgICAgIDAsIDAsCisjZWxzZQorInNycCIsICAgICAgICAgICAgICAgICAgMSwgMCwKKyNl bmRpZiAvKiBDS19TUlAgKi8KKworI2lmZGVmIFNTSEJVSUxUSU4KKyJzc2giLCAgICAgICAgICAg ICAgICAgIDAsIDAsCisjZWxzZSAvKiBTU0hCVUlMVElOICovCisic3NoIiwgICAgICAgICAgICAg ICAgICAxLCAwLAorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVmIENLX1NTTAorInNz bC90bHMiLCAgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisic3NsL3RscyIsICAgICAgICAgICAg ICAxLCAwLAorI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZuZGVmIE5PWE1JVAorInRyYW5zbWl0 IiwgICAgICAgICAgICAgMCwgMCwKKyNlbHNlCisidHJhbnNtaXQiLCAgICAgICAgICAgICAxLCAw LAorI2VuZGlmIC8qIE5PWE1JVCAqLworCisjaWZkZWYgVU5JQ09ERQorInVuaWNvZGUiLCAgICAg ICAgICAgICAgMCwgMCwKKyNlbHNlCisidW5pY29kZSIsICAgICAgICAgICAgICAxLCAwLAorI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKworI2lmZGVmIENLX1hZWgorInh5em1vZGVtIiwgICAgICAgICAg ICAgMCwgMCwKKyNlbHNlCisieHl6bW9kZW0iLCAgICAgICAgICAgICAxLCAwLAorI2VuZGlmIC8q IENLX1hZWiAqLworCisiIiwgMCwgMAorfTsKK2ludCBuZnRyID0gKHNpemVvZihmdHJ0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0cnVjdCBrZXl0YWIgZGVzdHRhYltdID0g eyAgICAgICAgICAgICAvKiBTRVQgREVTVElOQVRJT04gKi8KKyNpZmRlZiBDQUxJQlJBVEUKKyAg ICAiY2FsaWJyYXRlIiwgREVTVF9OLCBDTV9JTlYsCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisg ICAgImRpc2siLCAgICBERVNUX0QsIDAsCisjaWZkZWYgQ0FMSUJSQVRFCisgICAgIm5vd2hlcmUi LCBERVNUX04sIDAsCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisgICAgInByaW50ZXIiLCBERVNU X1AsIDAsCisgICAgInNjcmVlbiIsICBERVNUX1MsIDAKK307CitpbnQgbmRlc3RzID0gIChzaXpl b2YoZGVzdHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisjaWZuZGVmIE5PU1BMICAg ICAgICAgICAvKiBVc2VkIG9ubHkgd2l0aCBzY3JpcHQgcHJvZ3JhbW1pbmcgaXRlbXMuLi4gKi8K KworI2lmbmRlZiBOT1NFUlZFUiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMganVz dCB0byBhdm9pZCBzb21lICovCisjZGVmaW5lIENLX1BBUlNESVIgICAgICAgICAgICAgICAgICAg ICAgLyogInN0YXRlbWVudCBub3QgcmVhY2hlZCIgKi8KKyNlbHNlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBjb21wbGFpbnRzLi4uICovCisjaWZuZGVmIE5PRElBTAorI2Rl ZmluZSBDS19QQVJTRElSCisjZW5kaWYgLyogTk9ESUFMICovCisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KKworLyoKKyAgY3ggPT0gMCBtZWFucyBkaWFsIGRpcmVjdG9yeQorICBjeCA9PSAxIG1lYW5z IG5ldHdvcmsgZGlyZWN0b3J5CisgIGN4ID09IDIgbWVhbnMgYSBkaXJlY3RvcnkgcGF0aCBsaXN0 CisqLworc3RhdGljIGludAorcGFyc2RpcihjeCkgaW50IGN4OyB7CisgICAgaW50IGksIHgsIHks IGRkOyAgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLworICAgIGludCBueGRpcjsKKyAg ICBjaGFyICpzOworICAgIGNoYXIgKiogeGRpcjsKKyAgICBjaGFyICpwcFtNQVhHRVRQQVRIXTsg ICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgbmFtZSBwb2ludGVycyAqLworI2lmZGVmIFpGTlFG UAorICAgIHN0cnVjdCB6Zm5mcCAqIGZucDsKKyNpZmRlZiBPUzIKKyAgICBjaGFyICogZW52Owor ICAgIGNoYXIgZGlycGF0aFs0MDk2XTsKKyNlbHNlIC8qIE9TMiAqLworICAgIGNoYXIgZGlycGF0 aFsxMDI0XTsgICAgICAgICAgICAgICAgIC8qIEZvciBmdWxseSBxdWFsaWZpZWQgZmlsZW5hbWVz ICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogWkZOUUZQICovCisKKyAgICBpbnQgbWF4 ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiB0aGluZ3Mg dG8gcGFyc2UgKi8KKyAgICBjaGFyIGM7CisKKyNpZm5kZWYgTk9ESUFMCisgICAgaWYgKGN4ID09 IDApIHsgICAgICAgICAgICAgICAgICAgICAgLyogRGlhbGluZyAqLworICAgICAgICBueGRpciA9 IG5kaWFsZGlyOworICAgICAgICB4ZGlyID0gZGlhbGRpcjsKKyAgICAgICAgbWF4ID0gTUFYRERJ UjsKKyAgICB9IGVsc2UKKyNpZmRlZiBORVRDT05OCisgICAgaWYgKGN4ID09IDEpIHsgICAgICAg ICAgICAgICAgICAgICAgLyogTmV0d29yayAqLworICAgICAgICBueGRpciA9IG5uZXRkaXI7Cisg ICAgICAgIHhkaXIgPSBuZXRkaXI7CisgICAgICAgIG1heCA9IE1BWERESVI7CisgICAgfSBlbHNl CisjZW5kaWYgLyogTkVUQ09OTiAqLworI2VuZGlmIC8qIE5PRElBTCAqLworI2lmbmRlZiBOT1NF UlZFUgorICAgIGlmIChjeCA9PSAyKSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVCBwYXRo ICovCisgICAgICAgIG54ZGlyID0gbmdldHBhdGg7CisgICAgICAgIHhkaXIgPSBnZXRwYXRoOwor ICAgICAgICBtYXggPSBNQVhHRVRQQVRIOworICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENhbGxlZCB3aXRoIGludmFsaWQgZnVuY3Rpb24gY29kZSAqLworI2VuZGlm IC8qIE5PU0VSVkVSICovCisgICAgICByZXR1cm4oLTIpOworCisgICAgZm9yIChpID0gMDsgaSA8 IE1BWEdFVFBBVEg7IGkrKykgICAgLyogSW5pdCB0aGVzZS4gKi8KKyAgICAgIHBwW2ldID0gTlVM TDsKKworI2lmZGVmIENLX1BBUlNESVIKKyAgICBkZCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUZW1wb3JhcnkgbmFtZSBjb3VudGVyICovCisgICAgd2hpbGUgKDEpIHsKKyAg ICAgICAgaWYgKGN4ICE9IDIpIHsgICAgICAgICAgICAgICAgICAvKiBEaWFsaW5nIG9yIE5ldHdv cmsgRGlyZWN0b3J5ICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICBpbnQgbGVuOworICAgICAg ICAgICAgY2hhciAqIGFwcGRhdGEwID0gTlVMTCwgKiBhcHBkYXRhMSA9IE5VTEw7CisjaWZkZWYg TlQKKyAgICAgICAgICAgIGVudiA9IGdldGVudigiSzk1UEhPTkVTIik7CisgICAgICAgICAgICBt YWtlc3RyKCZhcHBkYXRhMCwoY2hhciAqKUdldEFwcERhdGEoMCkpOworICAgICAgICAgICAgbWFr ZXN0cigmYXBwZGF0YTEsKGNoYXIgKilHZXRBcHBEYXRhKDEpKTsKKyNlbHNlIC8qIE5UICovCisg ICAgICAgICAgICBlbnYgPSBnZXRlbnYoIksyUEhPTkVTIik7CisjZW5kaWYgLyogTlQgKi8KKyAg ICAgICAgICAgIGlmICghZW52KQorICAgICAgICAgICAgICBlbnYgPSBnZXRlbnYoIks5NVBIT05F UyIpOworICAgICAgICAgICAgaWYgKCFlbnYpCisgICAgICAgICAgICAgIGVudiA9ICIiOworCisg ICAgICAgICAgICBkaXJwYXRoWzBdID0gJ1wwJzsKKyAgICAgICAgICAgIGxlbiA9IHN0cmxlbihl bnYpICsgMipzdHJsZW4oc3RhcnR1cGRpcikgKyAyKnN0cmxlbihpbmlkaXIpCisgICAgICAgICAg ICAgICAgKyAoYXBwZGF0YTA/MipzdHJsZW4oYXBwZGF0YTApOjApIAorICAgICAgICAgICAgICAg ICsgKGFwcGRhdGExPzIqc3RybGVuKGFwcGRhdGExKTowKQorICAgICAgICAgICAgICAgICsgMipz dHJsZW4oemhvbWUoKSkgKyAyKnN0cmxlbihleGVkaXIpICsgOCpzdHJsZW4oIlBIT05FUy8iKQor ICAgICAgICAgICAgICAgICsgMTI7CisgICAgICAgICAgICBpZiAobGVuIDwgNDA5NikgICAgICAg ICAgICAgLyogU0FGRSAqLworICAgICAgICAgICAgICBzcHJpbnRmKGRpcnBhdGgsCisgICAgICAg ICAgICAgICAgICAgICIlcyVzJXM7JXMlczslcyVzJXMlcyVzJXMlcyVzJXM7JXMlczslczslcyVz IiwKKyAgICAgICAgICAgICAgICAgICAgLyogU2VtaWNvbG9uLXNlcGFyYXRlZCBwYXRoIGxpc3Qg Ki8KKyAgICAgICAgICAgICAgICAgICAgZW52LAorICAgICAgICAgICAgICAgICAgICAoZW52WzBd ICYmIGVudltzdHJsZW4oZW52KS0xXSA9PSAnOycpID8gIiIgOiAiOyIsCisgICAgICAgICAgICAg ICAgICAgIHN0YXJ0dXBkaXIsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBkaXIsICJQSE9O RVMvIiwKKyAgICAgICAgICAgICAgICAgICAgYXBwZGF0YTEgPyBhcHBkYXRhMSA6ICIiLCAKKyAg ICAgICAgICAgICAgICAgICAgYXBwZGF0YTEgPyAiS2VybWl0IDk1OyIgOiAiIiwKKyAgICAgICAg ICAgICAgICAgICAgYXBwZGF0YTEgPyBhcHBkYXRhMSA6ICIiLCAKKyAgICAgICAgICAgICAgICAg ICAgYXBwZGF0YTEgPyAiS2VybWl0IDk1L1BIT05FUy87IiA6ICIiLAorICAgICAgICAgICAgICAg ICAgICBhcHBkYXRhMCA/IGFwcGRhdGEwIDogIiIsIAorICAgICAgICAgICAgICAgICAgICBhcHBk YXRhMCA/ICJLZXJtaXQgOTU7IiA6ICIiLAorICAgICAgICAgICAgICAgICAgICBhcHBkYXRhMCA/ IGFwcGRhdGEwIDogIiIsIAorICAgICAgICAgICAgICAgICAgICBhcHBkYXRhMCA/ICJLZXJtaXQg OTUvUEhPTkVTLzsiIDogIiIsCisgICAgICAgICAgICAgICAgICAgIGluaWRpciwKKyAgICAgICAg ICAgICAgICAgICAgaW5pZGlyLCAiUEhPTkVTLyIsCisgICAgICAgICAgICAgICAgICAgIHpob21l KCksCisgICAgICAgICAgICAgICAgICAgIHpob21lKCksICJQSE9ORVMvIiwKKyAgICAgICAgICAg ICAgICAgICAgZXhlZGlyLAorICAgICAgICAgICAgICAgICAgICBleGVkaXIsICJQSE9ORVMvIgor ICAgICAgICAgICAgICAgICAgICApOworI2lmZGVmIE5UCisgICAgICAgICAgICBtYWtlc3RyKCZh cHBkYXRhMCxOVUxMKTsKKyAgICAgICAgICAgIG1ha2VzdHIoJmFwcGRhdGExLE5VTEwpOworI2Vu ZGlmIC8qIE5UICovCisjZWxzZQorI2lmZGVmIFVOSVgKKyAgICAgICAgICAgIHkgPSAxMDI0Owor ICAgICAgICAgICAgcyA9IGRpcnBhdGg7CisgICAgICAgICAgICB6enN0cmluZygiXFx2KGhvbWUp IiwmcywmeSk7CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAg ICAgeSA9IGNtaWZpcCgKKyAgICAgICAgICAgICAgICAgICJOYW1lcyBvZiBvbmUgb3IgbW9yZSBk aXJlY3RvcnkgZmlsZXMsIHNlcGFyYXRlZCBieSBzcGFjZXMiLAorICAgICAgICAgICAgICAgICAg ICAgICAiIiwmcywmeCwwLAorI2lmZGVmIE9TMk9SVU5JWAorICAgICAgICAgICAgICAgICAgICAg ICBkaXJwYXRoLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyNlbmRpZiAv KiBPUzJPUlVOSVggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMaXN0IG9mIGRpcmVjdG9yeSBuYW1lcyAqLworICAgICAgICAgICAgeCA9IDA7CisgICAg ICAgICAgICB5ID0gY21kaXIoIkRpcmVjdG9yeSBuYW1lIiwiIiwmcyx4eHN0cmluZyk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKHkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAtMykgeyAg ICAgICAgICAgICAgLyogRU9MIG9yIHVzZXIgdHlwZWQgPENSPiAqLworICAgICAgICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBtYXg7IGkrKykgeyAvKiBDbGVhciB0aGVzZSAqLworICAgICAgICAgICAgICAg ICAgICBpZiAoaSA8IG54ZGlyICYmIHhkaXJbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGZyZWUoeGRpcltpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgeGRpcltpXSA9IChpIDwgZGQpID8gcHBbaV0gOiBOVUxMOworICAgICAgICAgICAgICAgIH0K KyNpZm5kZWYgTk9ESUFMCisgICAgICAgICAgICAgICAgaWYgKGN4ID09IDApCisgICAgICAgICAg ICAgICAgICBuZGlhbGRpciA9IGRkOworI2lmZGVmIE5FVENPTk4KKyAgICAgICAgICAgICAgICBp ZiAoY3ggPT0gMSkKKyAgICAgICAgICAgICAgICAgIG5uZXRkaXIgPSBkZDsKKyNlbmRpZiAvKiBO RVRDT05OICovCisjZW5kaWYgLyogTk9ESUFMICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgICAg ICAgICAgICAgaWYgKGN4ID09IDIpCisgICAgICAgICAgICAgICAgICBuZ2V0cGF0aCA9IGRkOwor I2VuZGlmIC8qIE5PU0VSVkVSICovCisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIGVy cm9yICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRkOyBpKyspIHsgIC8qIEZy ZWUgdGVtcCBzdG9yYWdlICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwcFtpXSkgZnJlZShw cFtpXSk7IC8qIGJ1dCBkb24ndCBjaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgcHBbaV0g PSBOVUxMOyAgICAgICAgICAgLyogYW55dGhpbmcgZWxzZSAqLworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dl ZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisjaWZkZWYgQ0tfVE1Q RElSCisgICAgICAgIGlmIChjeCA9PSAyICYmICFpc2RpcihzKSkgeworICAgICAgICAgICAgcHJp bnRmKCI/Tm90IGEgZGlyZWN0b3J5IC0gJXNcbiIsIHMpOworICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworCisjaWZkZWYgWkZOUUZQCisg ICAgICAgIGlmIChjeCA8IDIpIHsKKyAgICAgICAgICAgIGlmICghaXNhYnNvbHV0ZShzKSkgeyAg ICAgICAvKiBJZiBub3QgcmVsYXRpdmUgZ2V0IGZ1bGwgcGF0aCAqLworICAgICAgICAgICAgICAg IGlmICgoZm5wID0gemZucWZwKHMsVE1QQlVGU0laIC0gMSx0bXBidWYpKSkgeworICAgICAgICAg ICAgICAgICAgICBpZiAoZm5wLT5mcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKGlu dCkgc3RybGVuKGZucC0+ZnBhdGgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBm bnAtPmZwYXRoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor I2VuZGlmIC8qIFpGTlFGUCAqLworICAgICAgICBjID0gTlVMOworICAgICAgICB4ID0gc3RybGVu KHMpOworICAgICAgICBpZiAoeCA+IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBsYXN0 IGNoYXIgKi8KKyAgICAgICAgICBjID0gc1t4LTFdOworICAgICAgICBkZWJ1ZyhGMDAwLCJwYXJz ZGlyIHMiLHMsYyk7CisgICAgICAgIGlmICgocHBbZGRdID0gbWFsbG9jKHN0cmxlbihzKSsyKSkg PT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3IgLSBtYWxsb2Nc biIpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRkOyBpKyspIHsgIC8qIEZyZWUgdGVt cCBzdG9yYWdlICovCisgICAgICAgICAgICAgICAgaWYgKHBwW2ldKSBmcmVlKHBwW2ldKTsKKyAg ICAgICAgICAgICAgICBwcFtpXSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhh dmUgc3RvcmFnZSBmb3IgbmFtZSAqLworICAgICAgICAgICAgc3RyY3B5KHBwW2RkXSxzKTsgICAg ICAgICAgIC8qIENvcHkgc3RyaW5nIGludG8gbmV3IHN0b3JhZ2UgKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMTEsInBhcnNkaXIgcHBbZGRdIDEiLHBwW2RkXSxkZCk7CisjaWZuZGVmIE5PWEZFUgor ICAgICAgICAgICAgaWYgKGN4ID09IDIpIHsgICAgICAgICAgICAgIC8qIElmIHdlIGFyZSBwYXJz aW5nIGRpcmVjdG9yaWVzICovCisgICAgICAgICAgICAgICAgY2hhciBkaXJzZXBbMl07CisgICAg ICAgICAgICAgICAgZXh0ZXJuIGludCBteWluZGV4OyAgICAgLyogQXBwZW5kIGRpcmVjdG9yeSBz ZXBhcmF0b3IgaWYgKi8KKyAgICAgICAgICAgICAgICBleHRlcm4gc3RydWN0IHN5c2RhdGEgc3lz aWRsaXN0W107IC8qIGl0IGlzIG1pc3NpbmcuLi4gICAqLworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsInBhcnNkaXIgbXlpbmRleCIsIiIsbXlpbmRleCk7CisgICAgICAgICAgICAgICAgaWYg KG15aW5kZXggPiAtMSkKKyAgICAgICAgICAgICAgICAgIGlmIChzeXNpZGxpc3RbbXlpbmRleF0u c2lkX3VuaXhsaWtlKQorICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSBzeXNpZGxpc3RbbXlp bmRleF0uc2lkX2RpcnNlcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlyc2VwWzBdID0g c3lzaWRsaXN0W215aW5kZXhdLnNpZF9kaXJzZXA7CisgICAgICAgICAgICAgICAgICAgICAgICBk aXJzZXBbMV0gPSBOVUw7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJjYXQocHBbZGRdLCAo Y2hhciAqKSBkaXJzZXApOyAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInBh cnNkaXIgcHBbZGRdIDIiLHBwW2RkXSxkZCk7CisgICAgICAgICAgICBpZiAoKytkZCA+IG1heCkg eworICAgICAgICAgICAgICAgIHByaW50ZigiP1RvbyBtYW55IGRpcmVjdG9yaWVzIC0gJWQgbWF4 XG4iLCBtYXgpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZDsgaSsrKSB7ICAv KiBGcmVlIHRlbXAgc3RvcmFnZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAocHBbaV0pIGZy ZWUocHBbaV0pOworICAgICAgICAgICAgICAgICAgICBwcFtpXSA9IE5VTEw7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1BB UlNESVIgKi8KK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU0VSVkVSCitzdGF0 aWMgaW50Citja2xvZ2luKCkgeworICAgIGludCB4OworICAgIGNoYXIgKiBzOworICAgIGNoYXIg dXNlcm5hbWVbTE9HSU5MRU4rMV07CisgICAgY2hhciBwYXNzd29yZFtMT0dJTkxFTisxXTsKKyAg ICBjaGFyIGFjY291bnRbTE9HSU5MRU4rMV07CisgICAgZXh0ZXJuIGNoYXIgKiB4X3VzZXIsICog eF9wYXNzd2QsICogeF9hY2N0OworICAgIGV4dGVybiBpbnQgeF9sb2dpbiwgeF9sb2dnZWQ7CisK KyAgICB1c2VybmFtZVswXSA9IE5VTDsKKyAgICBwYXNzd29yZFswXSA9IE5VTDsKKyAgICBhY2Nv dW50WzBdICA9IE5VTDsKKworICAgIHggPSBjbWZsZCgidXNlcm5hbWUiLCAiIiwgJnMsIHh4c3Ry aW5nKTsKKyAgICBpZiAoeCAhPSAtMykgeworICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICBpZiAoKGludClzdHJsZW4ocykgPiBMT0dJTkxFTikgeworICAg ICAgICAgICAgcHJpbnRmKCJcIiVzXCIgLSB0b28gbG9uZywgJWQgbWF4XG4iLCBzLCBMT0dJTkxF Tik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGNrc3RybmNw eSh1c2VybmFtZSxzLExPR0lOTEVOKzEpOworICAgICAgICB4ID0gY21mbGQoInBhc3N3b3JkIiwg IiIsICZzLCB4eHN0cmluZyk7CisgICAgICAgIGlmICh4ICE9IC0zKSB7CisgICAgICAgICAgICBp ZiAoeCA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoaW50 KXN0cmxlbihzKSA+IExPR0lOTEVOKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcIiVzXCIg LSB0b28gbG9uZywgJWQgbWF4XG4iLCBzLCBMT0dJTkxFTik7CisgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNrc3RybmNweShwYXNzd29yZCxz LExPR0lOTEVOKzEpOworICAgICAgICAgICAgeCA9IGNtZmxkKCJhY2NvdW50IiwgIiIsICZzLCB4 eHN0cmluZyk7CisgICAgICAgICAgICBpZiAoeCAhPSAtMykgeworICAgICAgICAgICAgICAgIGlm ICh4IDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICBp ZiAoKGludClzdHJsZW4ocykgPiBMT0dJTkxFTikgeworICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIlwiJXNcIiAtIHRvbyBsb25nLCAlZCBtYXhcbiIsIHMsIExPR0lOTEVOKTsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KGFjY291bnQscyxMT0dJTkxFTisxKTsKKyAgICAgICAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbWFrZXN0cigmeF91c2VyLHVzZXJuYW1lKTsK KyAgICBtYWtlc3RyKCZ4X3Bhc3N3ZCxwYXNzd29yZCk7CisgICAgbWFrZXN0cigmeF9hY2N0LGFj Y291bnQpOworICAgIHhfbG9naW4gPSAoeF91c2VyKSA/IDEgOiAwOworICAgIHhfbG9nZ2VkID0g MDsKKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2lmbmRlZiBO T0xPQ0FMCitzdGF0aWMgaW50CitzZXRkY2QoKSB7CisgICAgaW50IHgsIHksIHogPSAwOworICAg IGlmICgoeSA9IGNta2V5KGNycnRhYixuY3JyLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeSk7CisgICAgaWYgKHkgPT0gQ0FSX09OKSB7CisgICAgICAgIHggPSBjbW51bSgi Q2FycmllciB3YWl0IHRpbWVvdXQsIHNlY29uZHMiLCIwIiwxMCwmeix4eHN0cmluZyk7CisgICAg ICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOworICAgIH0KKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKKyAgICBjYXJyaWVyID0gdHRzY2Fycih5KTsKKyAgICBjZHRpbW8gPSB6 OworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKK2V4dGVybiBzdHJ1 Y3Qga2V5dGFiIHllc25vW107CitleHRlcm4gaW50IG55ZXNubzsKKworLyogZyBlIHQgeSBlIHMg biBvICAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBxMHllc25vW10gPSB7ICAgICAgLyogWWVz L05vL1F1aXQga2V5d29yZCB0YWJsZSAqLworICAgICJubyIsICAgIDAsIDAsCisgICAgIm9rIiwg ICAgMSwgMCwKKyAgICAieWVzIiwgICAxLCAwCit9Oworc3RhdGljIGludCBucTB5ZXNubyA9IChz aXplb2YocTB5ZXNubykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0 IGtleXRhYiBxMXllc25vW10gPSB7ICAgICAgLyogWWVzL05vL1F1aXQga2V5d29yZCB0YWJsZSAq LworICAgICJubyIsICAgIDAsIDAsCisgICAgIm9rIiwgICAgMSwgMCwKKyAgICAicXVpdCIsICAy LCAwLAorICAgICJ5ZXMiLCAgIDEsIDAKK307CitzdGF0aWMgaW50IG5xMXllc25vID0gKHNpemVv ZihxMXllc25vKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5 dGFiIHEyeWVzbm9bXSA9IHsgICAgICAvKiBZZXMvTm8vUXVpdCBrZXl3b3JkIHRhYmxlICovCisg ICAgImdvIiwgICAgMywgMCwKKyAgICAibm8iLCAgICAwLCAwLAorICAgICJvayIsICAgIDEsIDAs CisgICAgInllcyIsICAgMSwgMAorfTsKK3N0YXRpYyBpbnQgbnEyeWVzbm8gPSAoc2l6ZW9mKHEy eWVzbm8pIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIg cTN5ZXNub1tdID0geyAgICAgIC8qIFllcy9Oby9RdWl0IGtleXdvcmQgdGFibGUgKi8KKyAgICAi Z28iLCAgICAzLCAwLAorICAgICJubyIsICAgIDAsIDAsCisgICAgIm9rIiwgICAgMSwgMCwKKyAg ICAicXVpdCIsICAyLCAwLAorICAgICJ5ZXMiLCAgIDEsIDAKK307CitzdGF0aWMgaW50IG5xM3ll c25vID0gKHNpemVvZihxM3llc25vKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKworLyog QXNrIHF1ZXN0aW9uLCBnZXQgeWVzL25vIGFuc3dlciAqLworCitpbnQKK2dldHllc25vKG1zZywg ZmxhZ3MpIGNoYXIgKiBtc2c7IGludCBmbGFnczsgeworI2lmZGVmIENLX1JFQ0FMTAorICAgIGV4 dGVybiBpbnQgb25fcmVjYWxsOyAgICAgICAgICAgICAgIC8qIGFyb3VuZCBQYXNzd29yZCBwcm9t cHRpbmcgKi8KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICBpbnQgeSwgejsKKworI2lmbmRl ZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB2bW9kZSwgd2luOTVfcG9wdXAs IHN0YXJ0ZmxhZ3M7CisgICAgaW50IHZtb2RlX3NhdiA9IHZtb2RlOworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIENLX0FQQworICAgIGlmICggYXBjYWN0 aXZlICE9IEFQQ19JTkFDVElWRSAmJiAoYXBjc3RhdHVzICYgQVBDX05PSU5QKSApIHsKKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNp Zm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorI2lmZGVmIENPTU1FTlQKKyAgICBpZiAod2luOTVf cG9wdXAgJiYgIShzdGFydGZsYWdzICYgOTYpCisjaWZkZWYgSUtTRAorICAgICAgICAmJiAhaW5z ZXJ2ZXIKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICkKKyAgICAgIHJldHVybihwb3B1cF9y ZWFkeWVzbm8odm1vZGUsTlVMTCxtc2csZmxhZ3MpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgaWYgKHZtb2RlID09IFZURVJNKSB7CisgICAgICAgIHZtb2RlID0gVkNNRDsKKyAgICAgICAg VnNjcm5Jc0RpcnR5KFZURVJNKTsKKyAgICAgICAgVnNjcm5Jc0RpcnR5KFZDTUQpOworICAgIH0K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgVk1TCisvKgor ICBJbiBWTVMsIHdoZW5ldmVyIGEgVEFLRSBmaWxlIG9yIG1hY3JvIGlzIGFjdGl2ZSwgd2UgcmVz dG9yZSB0aGUKKyAgb3JpZ2luYWwgY29uc29sZSBtb2RlcyBzbyBDdHJsLUMvQ3RybC1ZIGNhbiB3 b3JrLiAgQnV0IGhlcmUgd2UKKyAgZ28gaW50ZXJhY3RpdmUgYWdhaW4sIHNvIHdlIGhhdmUgdG8g dGVtcG9yYXJpbHkgcHV0IHRoZW0gYmFjay4KKyovCisgICAgaWYgKCF4Y21kc3JjKQorICAgICAg Y29uY2IoKGNoYXIpZXNjYXBlKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIENLX1JFQ0FM TAorICAgIG9uX3JlY2FsbCA9IDA7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgY21zYXZw KHBzYXZlLFBST01QVEwpOyAgICAgICAgICAgICAgLyogU2F2ZSBvbGQgcHJvbXB0ICovCisgICAg Y21zZXRwKG1zZyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBuZXcgcHJvbXB0ICov CisgICAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBh bnN3ZXIgdG8gTm8uICovCisgICAgY21pbmkoY2t4ZWNoKTsgICAgICAgICAgICAgICAgICAgICAg LyogSW5pdGlhbGl6ZSBwYXJzZXIuICovCisgICAgZG8geworICAgICAgICBwcm9tcHQoTlVMTCk7 ICAgICAgICAgICAgICAgICAgIC8qIElzc3VlIHByb21wdC4gKi8KKyAgICAgICAgc3dpdGNoIChm bGFncykgeworICAgICAgICAgIGNhc2UgMDogIHkgPSBjbWtleShxMHllc25vLG5xMHllc25vLCIi LCIiLE5VTEwpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDE6ICB5ID0gY21rZXkocTF5ZXNubyxu cTF5ZXNubywiIiwiIixOVUxMKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgeSA9IGNta2V5 KHEyeWVzbm8sbnEyeWVzbm8sIiIsIiIsTlVMTCk7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6 IHkgPSBjbWtleShxM3llc25vLG5xM3llc25vLCIiLCIiLE5VTEwpOworICAgICAgICB9CisgICAg ICAgIGlmICh5IDwgMCkgeworICAgICAgICAgICAgaWYgKHkgPT0gLTQpIHsgICAgICAgICAgICAg IC8qIEVPRiAqLworICAgICAgICAgICAgICAgIHogPSB5OworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfSBlbHNlIGlmICh5ID09IC0zKSAgICAgICAgIC8qIE5vIGFuc3dlcj8g Ki8KKyAgICAgICAgICAgICAgcHJpbnRmKCIgUGxlYXNlIHJlc3BvbmQ7IHR5cGUgJz8nIHRvIHNl ZSB2YWxpZCBhbnN3ZXJzLlxuIik7CisgICAgICAgICAgICBjbWluaShja3hlY2gpOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgeiA9IHk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNh dmUgYW5zd2VyICovCisgICAgICAgICAgICB5ID0gY21jZm0oKTsgICAgICAgICAgICAgICAgLyog R2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgICB9CisgICAgfSB3aGlsZSAoeSA8IDApOyAgICAg ICAgICAgICAgICAgICAgLyogQ29udGludWUgdGlsbCBkb25lICovCisgICAgY21zZXRwKHBzYXZl KTsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSByZWFsIHByb21wdCAqLworI2lmZGVm IFZNUworICAgIGlmIChjbWRsdmwgPiAwKSAgICAgICAgICAgICAgICAgICAgIC8qIEluIFZNUyBh bmQgbm90IGF0IHRvcCBsZXZlbCwgKi8KKyAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAgcmVzdG9yZSBjb25zb2xlIGFnYWluLiAqLworI2VuZGlmIC8qIFZNUyAqLwor I2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgaWYgKHZtb2RlICE9IHZtb2RlX3Nhdikg eworICAgICAgICB2bW9kZSA9IFZURVJNOworICAgICAgICBWc2NybklzRGlydHkoVkNNRCk7Cisg ICAgICAgIFZzY3JuSXNEaXJ0eShWVEVSTSk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKyAgICByZXR1cm4oeik7Cit9CisKKyNpZmRlZiBLVUkKK2V4dGVy biBIV05EIGh3bmRDb25zb2xlOworX1BST1RPVFlQKGludCBndWlfdHh0X2RpYWxvZywoY2hhciAq LGNoYXIgKixpbnQsY2hhciAqLGludCxjaGFyICosaW50KSk7CitfUFJPVE9UWVAoaW50IGd1aV9t dHh0X2RpYWxvZywoY2hhciAqLGludCxzdHJ1Y3QgdHh0Ym94IFtdKSk7CitfUFJPVE9UWVAoaW50 IGd1aV9wb3NpdGlvbiwoaW50LCBpbnQpKTsKK19QUk9UT1RZUChpbnQgZ3VpX3Jlc2l6ZV9tb2Rl LChpbnQpKTsKK19QUk9UT1RZUChpbnQgZ3VpX3dpbl9ydW5fbW9kZSwoaW50KSk7CitfUFJPVE9U WVAoaW50IGd1aV9zYXZlYXNfZGlhbG9nLChjaGFyICosY2hhciAqLCBpbnQsIGNoYXIgKiwgY2hh ciAqLCBpbnQpKTsKK2V4dGVybiBpbnQgZ3VpX2RpYWxvZzsKKyNlbmRpZiAvKiBLVUkgKi8KKwor LyogdSBxIF8gbyBrICAtLSAgVXNlciBRdWVyeSwgZ2V0IFllcy9ObyBvciBPSyBDYW5jZWwgICov CisvKgorICBDYWxsIHdpdGg6ICAKKyAgICBwcmVmYWNlOiBFeHBsYW5hdG9yeSB0ZXh0IHRvIHBy aW50LCBvciBOVUxMLgorICAgIHByb21wdDogIFByb21wdC4KKyAgICBtYXNrOiAgICBCaXRtYXNr IGZvciBsZWdhbCByZXNwb25zZXM6IDEgPSBPSyBvciBZZXM7IDIgPSBObyBvciBDYW5jZWwuCisg ICAgaGVscDogICAgSGVscCB0ZXh0IChhcnJheSBvZiBzdHJpbmdzIG9yIE5VTEwpIFtub3QgdXNl ZCBieSBwYXJzZXJdLgorICAgIGRmbHQ6ICAgIERlZmF1bHQgcmVzcG9uc2UgKDEgb3IgMikgW25v dCB1c2VkIGJ5IHBhcnNlcl0uCisgIFJldHVybnM6CisgICAtMTogICAgICAgSW52YWxpZCBhcmd1 bWVudChzKS4KKyAgICAwOiAgICAgICBVc2VyIHNhaWQgTm8gb3IgQ2FuY2VsLgorICAgIDEgICAg ICAgIFVzZXIgc2FpZCBZZXMgb3IgT0suICAgIAorICBOb3RlczoKKyAgICBwcmVmYWNlIGFuZCBw cm9tcHQgc2hvdWxkIG5vdCBpbmNsdWRlIGZpbmFsIGxpbmUgdGVybWluYXRvciBidXQgbWF5Cisg ICAgaW5jbHVkZSBlbWJlZGRlZCBvbmVzLiAgSGVscCB0ZXh0IGlzIGluIGNhc2UgR1VJIGRpYWxv ZyBuZWVkcyBhIEhlbHAKKyAgICBidXR0b247IGZpbmFsIGVsZW1lbnQgb2YgaGVscC1zdHJpbmcg YXJyYXkgaXMgIiIuICBkZmx0IGlzIHVzZWQgYnkgR1VJCisgICAgdG8gaGlnaGxpZ2h0IHRoZSBk ZWZhdWx0IHJlc3BvbnNlIGJ1dHRvbi4KKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQwordXFfb2so Y2hhciAqIHByZWZhY2UsIGNoYXIgKiBwcm9tcHQsIGludCBtYXNrLGNoYXIgKiogaGVscCwgaW50 IGRmbHQpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordXFfb2socHJlZmFjZSxwcm9tcHQsbWFzayxo ZWxwLGRmbHQpCisgICAgY2hhciAqIHByZWZhY2UsICogcHJvbXB0LCAqKiBoZWxwOworICAgIGlu dCBtYXNrLCBkZmx0OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB1cV9vayAqLyB7CisgICAg aW50IHJjLCBsZW47CisgICAgY2hhciAqIHRleHQ9TlVMTDsKKworICAgIGlmICghcHJvbXB0KQor ICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmICgobWFzayAmIDMpID09IDEpIHsJCS8qIE9LIChH VUkgb25seSkgKi8KKyNpZmRlZiBLVUkKKyAgICAgIGlmICggZ3VpX2RpYWxvZyApIHsKKwkvKiBU aGlzIG9uZSBpcyBmb3IgcG9wdXAgaGVscCwgYWxlcnRzLCBldGMgKi8KKyAgICAgICAgaWYgKHBy ZWZhY2UpIHsKKyAgICAgICAgICAgIGxlbiA9IHN0cmxlbihwcmVmYWNlKSArIHN0cmxlbihwcm9t cHQpICsgNDsKKyAgICAgICAgICAgIHRleHQgPSAoY2hhciAqKW1hbGxvYyhsZW4pOworICAgICAg ICAgICAgY2ttYWttc2codGV4dCxsZW4scHJlZmFjZSwiXG4iLHByb21wdCxOVUxMKTsKKyAgICAg ICAgfQorICAgICAgICByYyA9IE1lc3NhZ2VCb3goaHduZENvbnNvbGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgdGV4dCA/IHRleHQgOiBwcm9tcHQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgcHJvbXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgIE1CX09LIHwgTUJfSUNPTklORk9S TUFUSU9OIHwgTUJfVEFTS01PREFMKTsKKyAgICAgICAgU2hvd1dpbmRvd0FzeW5jKGh3bmRDb25z b2xlLFNXX1NIT1dOT1JNQUwpOworICAgICAgICBTZXRGb3JlZ3JvdW5kV2luZG93KGh3bmRDb25z b2xlKTsKKyAgICAgICAgaWYgKHRleHQpCisJICBmcmVlKHRleHQpOworICAgICAgICBpZiAoIXJj KQorCSAgcmV0dXJuKC0xKTsKKyAgICAgICAgZWxzZSAKKwkgIHJldHVybigxKTsKKyAgICAgIH0g ZWxzZQorI2VuZGlmICAvKiBLVUkgKi8KKyAgICAgIHsKKwlpZiAocHJlZmFjZSkJCQkvKiBKdXN0 IGRpc3BsYXkgdGhlIHRleHQsIGlmIGFueSAqLworCSAgcHJpbnRmKCIlc1xuIixwcmVmYWNlKTsK KwlpZiAocHJvbXB0KQorCSAgcHJpbnRmKCIlc1xuIixwcm9tcHQpOworICAgICAgICByZXR1cm4o MSk7CisgICAgICB9CisgICAgfSBlbHNlIGlmICgobWFzayAmIDMpID09IDMpIHsJLyogWWVzL05v IG9yIE9LL0NhbmNlbCAqLworI2lmZGVmIEtVSQorICAgICAgaWYgKCBndWlfZGlhbG9nICkgewor ICAgICAgICBpZiAocHJlZmFjZSkgeworICAgICAgICAgICAgbGVuID0gc3RybGVuKHByZWZhY2Up ICsgc3RybGVuKHByb21wdCkgKyA0OworICAgICAgICAgICAgdGV4dCA9IChjaGFyICopbWFsbG9j KGxlbik7CisgICAgICAgICAgICBja21ha21zZyh0ZXh0LGxlbixwcmVmYWNlLCJcbiIscHJvbXB0 LE5VTEwpOworICAgICAgICB9CisgICAgICAgIHJjID0gTWVzc2FnZUJveChod25kQ29uc29sZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID8gdGV4dCA6IHByb21wdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBwcm9tcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgTUJfWUVT Tk8gfCBNQl9JQ09OSU5GT1JNQVRJT04gfCBNQl9UQVNLTU9EQUwgfCAKKyAgICAgICAgICAgICAg ICAgICAgICAgICAoZGZsdCA9PSAyID8gTUJfREVGQlVUVE9OMiA6IE1CX0RFRkJVVFRPTjEpKTsK KyAgICAgICAgU2hvd1dpbmRvd0FzeW5jKGh3bmRDb25zb2xlLFNXX1NIT1dOT1JNQUwpOworICAg ICAgICBTZXRGb3JlZ3JvdW5kV2luZG93KGh3bmRDb25zb2xlKTsKKyAgICAgICAgaWYgKHRleHQp CisJICBmcmVlKHRleHQpOworICAgICAgICBpZiAoIXJjKQorCSAgcmV0dXJuKC0xKTsKKyAgICAg ICAgZWxzZSBpZiAocmMgPT0gSUROTyB8fCByYyA9PSBJRENBTkNFTCkKKwkgIHJldHVybigwKTsK KyAgICAgICAgZWxzZQorCSAgcmV0dXJuKDEpOworICAgICAgfSBlbHNlCisjZW5kaWYgIC8qIEtV SSAqLworICAgICAgeworCWlmIChwcmVmYWNlKQorCSAgcHJpbnRmKCIlc1xuIixwcmVmYWNlKTsK KwlyZXR1cm4oZ2V0eWVzbm8ocHJvbXB0LDApKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworCXBy aW50ZigiP0ludGVybmFsIGVycm9yOiB1cV9vaygpXG4iKTsKKwlyZXR1cm4oLTEpOworICAgIH0K K30KKworLyogdSBxIF8gdCB4IHQgIC0tICBVc2VyIFF1ZXJ5LCBnZXQgc2luZ2xlIHRleHQgcmVz cG9uc2UgICovCisvKgorICBDYWxsIHdpdGg6ICAKKyAgICBwcmVmYWNlOiBFeHBsYW5hdG9yeSB0 ZXh0IHRvIHByaW50LCBvciBOVUxMLgorICAgIHByb21wdDogIFByb21wdC4gCisgICAgZWNobzog ICAgMCA9IGRvbid0IGVjaG87IDEgPSBlY2hvOyAyID0gZWNobyB3aXRoIGFzdGVyaXNrcy4KKyAg ICBoZWxwOiAgICBIZWxwIHRleHQgKGFycmF5IG9mIHN0cmluZ3Mgb3IgTlVMTCkgW25vdCB1c2Vk IGJ5IHBhcnNlcl0uCisgICAgYnVmOiAgICAgUG9pbnRlciB0byByZXN1bHQgYnVmZmVyLgorICAg IGJ1ZmxlbjogIExlbmd0aCBvZiByZXN1bHQgYnVmZmVyLgorICAgIGRmbHQ6ICAgIERlZmF1bHQg cmVzcG9uc2UgdGV4dCBvciBOVUxMIFtub3QgdXNlZCBieSBwYXJzZXJdLgorICAgIHRpbWVyOiAg IE9wdGlvbmFsIFRpbWVvdXQKKyAgUmV0dXJuczoKKyAgICAwOiAgICAgICBVc2VyIHNhaWQgTm8g b3IgQ2FuY2VsLgorICAgIDEgICAgICAgIFVzZXIgc2FpZCBZZXMgb3IgT0suICAgIAorICBOb3Rl czoKKyAgICBwcmVmYWNlLCBwcm9tcHQsIGFuZCBoZWxwIGFzIGZvciB1cV9vaygpLgorKi8KK2lu dAorI2lmZGVmIENLX0FOU0lDCit1cV90eHQoY2hhciAqIHByZWZhY2UsIGNoYXIgKiBwcm9tcHQs IGludCBlY2hvLCBjaGFyICoqIGhlbHAsIGNoYXIgKiBidWYsIAorICAgICAgIGludCBidWZsZW4s IGNoYXIgKmRmbHQsIGludCB0aW1lcikKKyNlbHNlIC8qIENLX0FOU0lDICovCit1cV90eHQocHJl ZmFjZSxwcm9tcHQsZWNobyxoZWxwLGJ1ZixidWZsZW4sZGZsdCx0aW1lcikKKyAgICBjaGFyICog cHJlZmFjZSwgKiBwcm9tcHQsICoqIGhlbHAsICogYnVmLCAqIGRmbHQ7IAorICAgIGludCBidWZs ZW4sIGVjaG8sIHRpbWVyOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisjaWZuZGVmIE5PTE9D QUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHZtb2RlOworICAgIGV4dGVybiBpbnQgc3Rh cnRmbGFnczsKKyAgICBleHRlcm4gaW50IHdpbjk1X3BvcHVwOworI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICBpbnQgcmM7IAorCisgICAgaWYgKGJ1ZmxlbiA8IDEg fHwgIWJ1ZikKKyAgICAgIHJldHVybigwKTsKKyNpZmRlZiBLVUkKKyAgICBpZiAoIGd1aV9kaWFs b2cgKSB7CisgICAgICAgIHJjID0gZ3VpX3R4dF9kaWFsb2cocHJlZmFjZSxwcm9tcHQsZWNobyxi dWYsYnVmbGVuLGRmbHQsdGltZXIpOworICAgICAgICBpZiAoIHJjID4gLTEgKQorICAgICAgICAg ICAgcmV0dXJuKHJjKTsKKyAgICAvKiBPdGhlcndpc2UsIHRoZSBkaWFsb2cgY291bGQgbm90IGJl IGNyZWF0ZWQuICBGYWxsYmFjayB0byB0ZXh0IG1vZGUgKi8KKyAgICB9IAorI2VuZGlmIC8qIEtV SSAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgaWYgKHdpbjk1X3BvcHVwICYm ICEoc3RhcnRmbGFncyAmIDk2KQorI2lmZGVmIElLU0QKKyAgICAgICAgICYmICFpbnNlcnZlcgor I2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICkgeworICAgICAgICBkZWJvayA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBsb2cgKi8KKyAgICAgICAgaWYgKGVjaG8gPT0g MSkKKyAgICAgICAgICAgICAgICBwb3B1cF9yZWFkdGV4dCh2bW9kZSxwcmVmYWNlLHByb21wdCxi dWYsYnVmbGVuLDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvcHVwX3Jl YWRwYXNzKHZtb2RlLHByZWZhY2UscHJvbXB0LGJ1ZixidWZsZW4sMCk7CisgICAgICAgIGRlYm9r ID0gMTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisKKyAgICBpZiAocHJlZmFjZSkKKyAgICAgIHByaW50ZigiJXNcbiIs cHJlZmFjZSk7CisgICAgaWYgKGVjaG8gPT0gMSkKKyAgICAgIHJlYWR0ZXh0KHByb21wdCxidWYs YnVmbGVuKTsKKyAgICBlbHNlCisgICAgICByZWFkcGFzcyhwcm9tcHQsYnVmLGJ1Zmxlbik7Cisg ICAgcmV0dXJuKDEpOwkJCQkvKiAobm8gYnV0dG9ucyBpbiBwYXJzZXIpICovCit9CisKKy8qIHUg cSBfIG0gdCB4IHQgIC0tICBVc2VyIFF1ZXJ5LCBnZXQgbXVsdGlwbGUgdGV4dCByZXNwb25zZXMg Ki8KKy8qCisgIENhbGwgd2l0aDogIAorICAgIHByZWZhY2U6IEV4cGxhbmF0b3J5IHRleHQgdG8g cHJpbnQsIG9yIE5VTEwuCisgICAgaGVscDogICAgSGVscCB0ZXh0IChhcnJheSBvZiBzdHJpbmdz IG9yIE5VTEwpIFtub3QgdXNlZCBieSBwYXJzZXJdLgorICAgIG46ICAgICAgIE51bWJlciBvZiBy ZXNwb25zZXMgd2FudGVkLgorICAgIGZpZWxkOiAgIEFycmF5IG9mIHN0cnVjdCB0eHRib3gsIG9u ZSBlbGVtZW50IHBlciBmaWVsZCwgc2VlIGNrdXVzci5oLgorICBSZXR1cm5zOgorICAgIDA6ICAg ICAgIFVzZXIgc2FpZCBObyBvciBDYW5jZWwuCisgICAgMSAgICAgICAgVXNlciBzYWlkIFllcyBv ciBPSy4gICAgCisgIE5vdGVzOgorICAgIHByZWZhY2UgYW5kIGhlbHAgYXMgZm9yIHVxX29rKCku CisqLworaW50CisjaWZkZWYgQ0tfQU5TSUMKK3VxX210eHQoY2hhciAqIHByZWZhY2UsY2hhciAq KmhlbHAsIGludCBuLCBzdHJ1Y3QgdHh0Ym94IGZpZWxkW10pCisjZWxzZSAvKiBDS19BTlNJQyAq LwordXFfbXR4dChwcmVmYWNlLGhlbHAsbixmaWVsZCkKKyAgICBjaGFyICogcHJlZmFjZTsgY2hh ciAqKiBoZWxwOyBpbnQgbjsgc3RydWN0IHR4dGJveCBmaWVsZFtdOyAKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB2 bW9kZTsKKyAgICBleHRlcm4gaW50IHN0YXJ0ZmxhZ3M7CisgICAgZXh0ZXJuIGludCB3aW45NV9w b3B1cDsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgaW50IGks IHJjOworCisgICAgaWYgKG4gPCAxIHx8ICFmaWVsZCkKKyAgICAgIHJldHVybigwKTsKKyNpZmRl ZiBLVUkKKyAgICBpZiAoIGd1aV9kaWFsb2cgKSB7CisgICAgICAgIHJjID0gZ3VpX210eHRfZGlh bG9nKHByZWZhY2UsIG4sIGZpZWxkKTsKKyAgICAgICAgaWYgKCByYyA+IC0xICkKKyAgICAgICAg ICAgIHJldHVybihyYyk7CisgICAgLyogT3RoZXJ3aXNlLCB0aGUgZGlhbG9nIGNvdWxkIG5vdCBi ZSBjcmVhdGVkLiAgRmFsbGJhY2sgdG8gdGV4dCBtb2RlICovCisgICAgfQorI2VuZGlmIC8qIEtV SSAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgaWYgKHdpbjk1X3BvcHVwICYm ICEoc3RhcnRmbGFncyAmIDk2KQorI2lmZGVmIElLU0QKKyAgICAgICAgICYmICFpbnNlcnZlcgor I2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICkgeworICAgICAgICBkZWJvayA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBsb2cgKi8KKyAgICAgICAgZm9yIChpID0gMDsg aSA8IG47IGkrKykgeworICAgICAgICAgICAgaWYgKGZpZWxkW2ldLnRfZWNobyA9PSAxKQorICAg ICAgICAgICAgICAgIHBvcHVwX3JlYWR0ZXh0KHZtb2RlLHByZWZhY2UsZmllbGRbaV0udF9sYmws ZmllbGRbaV0udF9idWYsZmllbGRbaV0udF9sZW4sMCk7CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgcG9wdXBfcmVhZHBhc3Modm1vZGUscHJlZmFjZSxmaWVsZFtpXS50X2xibCxm aWVsZFtpXS50X2J1ZixmaWVsZFtpXS50X2xlbiwwKTsKKyAgICAgICAgfQorICAgICAgICBkZWJv ayA9IDE7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogTk9MT0NBTCAqLworCisgICAgaWYgKHByZWZhY2UpCisgICAgICBwcmludGYoIiVzXG4i LHByZWZhY2UpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwlpZiAoZmllbGRbaV0u dF9lY2hvID09IDEpCisJICByZWFkdGV4dChmaWVsZFtpXS50X2xibCxmaWVsZFtpXS50X2J1Zixm aWVsZFtpXS50X2xlbik7CisJZWxzZQorCSAgcmVhZHBhc3MoZmllbGRbaV0udF9sYmwsZmllbGRb aV0udF9idWYsZmllbGRbaV0udF9sZW4pOworICAgIH0KKyAgICByZXR1cm4oMSk7Cit9CisKKy8q IHUgcSBfIGYgaSBsIGUgIC0tICBVc2VyIFF1ZXJ5LCBnZXQgZmlsZSBvciBkaXJlY3RvcnkgbmFt ZSAgKi8KKy8qCisgIENhbGwgd2l0aDogIAorICAgIHByZWZhY2U6IEV4cGxhbmF0b3J5IHRleHQg dG8gcHJpbnQsIG9yIE5VTEwuCisgICAgcHJvbXB0OiAgUHJvbXB0IHN0cmluZy4KKyAgICBmYzog ICAgICBGdW5jdGlvbiBjb2RlOgorCSAgICAgICAxID0gaW5wdXQgKGV4aXN0aW5nKSBmaWxlCisJ ICAgICAgIDIgPSBleGlzdGluZyBkaXJlY3RvcnkgCisJICAgICAgIDMgPSBjcmVhdGUgbmV3IG91 dHB1dCBmaWxlCisJICAgICAgIDQgPSBvdXRwdXQgZmlsZSBhbGxvd2luZyBhcHBlbmQgYWNjZXNz CisgICAgaGVscDogICAgSGVscCB0ZXh0IChhcnJheSBvZiBzdHJpbmdzIG9yIE5VTEwpIFtub3Qg dXNlZCBieSBwYXJzZXJdLgorICAgIGRmbHQ6ICAgIERlZmF1bHQgcmVzcG9uc2UuCisgICAgcmVz dWx0OiAgUG9pbnRlciB0byByZXN1bHQgYnVmZmVyLgorICAgIHJsZW5ndGg6IExlbmd0aCBvZiBy ZXN1bHQgYnVmZmVyLgorCisgIFJldHVybnM6CisgICAtMTogICAgICAgSW52YWxpZCBhcmd1bWVu dCwgcmVzdWx0IHRvbyBsb25nLCBvciBvdGhlciBlcnJvci4KKyAgICAwOiAgICAgICBVc2VyIENh bmNlbGVkLgorICAgIDE6ICAgICAgIE9LLCB3aXRoIGZpbGUvcGF0aG5hbWUgY29waWVkIHRvIHJl c3VsdCBidWZmZXIuCisgICAgMjogICAgICAgTGlrZSAxLCBidXQgZm9yIG91dHB1dCBmaWxlIHRo YXQgaXMgdG8gYmUgYXBwZW5kZWQgdG8uCisKKyAgTm90ZXM6CisgICAgMS4gcHJlZmFjZSBhbmQg cHJvbXB0IHNob3VsZCBub3QgaW5jbHVkZSBmaW5hbCBsaW5lIHRlcm1pbmF0b3IgYnV0IG1heQor ICAgICAgIGluY2x1ZGUgZW1iZWRkZWQgb25lcy4gIEhlbHAgdGV4dCBpcyBpbiBjYXNlIEdVSSBk aWFsb2cgbmVlZHMgYSBIZWxwCisgICAgICAgYnV0dG9uOyBmaW5hbCBlbGVtZW50IG9mIGhlbHAt c3RyaW5nIGFycmF5IGlzICIiLgorCisgICAgMi4gVGhlIGRlZmF1bHQgbWlnaHQgYmUgYSBmaWxl bmFtZSwgYSBkaXJlY3RvcnkgbmFtZSwgYSByZWxhdGl2ZQorICAgICAgIHBhdGhuYW1lLCBvciBh biBhYnNvbHV0ZSBwYXRobmFtZS4gIFRoaXMgcm91dGluZSBtdXN0IGNvbnZlcnQgaXQgaW50bwor ICAgICAgIGludG8gYSBmdWxseSBxdWFsaWZpZWQgKGFic29sdXRlKSBwYXRobmFtZSBzbyB0aGUg dXNlciBrbm93cyBleGFjdGx5CisgICAgICAgd2hlcmUgdGhlIGZpbGUgaXMgdG8gYmUgZm91bmQg b3Igc3RvcmVkLiAgSW4gYWRkaXRpb24sIHRoZSBXaW5kb3dzCisgICAgICAgdmVyc2lvbiBvZiB0 aGlzIHJvdXRpbmUgbXVzdCBzZXBhcmF0ZSB0aGUgZGlyZWN0b3J5IHBhcnQgZnJvbSB0aGUKKyAg ICAgICBuYW1lIHBhcnQsIHNvIGl0IGNhbiBkaXNwbGF5IHRoZSBnaXZlbiBkaXJlY3RvcnkgaW4g dGhlIGZpbGUgZGlhbG9nLAorICAgICAgIGFuZCBwdXQgbmFtZSBpbiB0aGUgZmlsZW5hbWUgYm94 IHRvIGJlIGVkaXRlZCwgcmVwbGFjZWQsIG9yCisgICAgICAgYWNjZXB0ZWQuCisKKyAgICAzLiBX aGVuIGNhbGxlZCB3aXRoIEZDIDQsIHRoZSBXaW5kb3dzIHZlcnNpb24gc2hvdWxkIGluY2x1ZGUg Ik5ldyIgYW5kCisgICAgICAgIkFwcGVuZCIgYnV0dG9ucyBpbiB0aGUgZGlhbG9nLiBzbyB0aGUg dXNlciBjYW4gc2F5IHdoZXRoZXIgdGhlIGZpbGUKKyAgICAgICBzaG91bGQgb3ZlcndyaXRlIGFu eSBmaWxlIG9mIHRoZSBzYW1lIG5hbWUsIG9yIGJlIGFwcGVuZGVkIHRvIGl0LgorKi8KKworaW50 CisjaWZkZWYgQ0tfQU5TSUMKK3VxX2ZpbGUoY2hhciAqIHByZWZhY2UsIGNoYXIgKiBmcHJvbXB0 LCBpbnQgZmMsIGNoYXIgKiogaGVscCwKKwljaGFyICogZGZsdCwgY2hhciAqIHJlc3VsdCwgaW50 IHJsZW5ndGgpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordXFfZmlsZShwcmVmYWNlLGZwcm9tcHQs ZmMsaGVscCxkZmx0LHJlc3VsdCxybGVuZ3RoKQorICAgIGNoYXIgKiBwcmVmYWNlLCAqIGZwcm9t cHQsICoqIGhlbHAsICogZGZsdCwgKiByZXN1bHQ7CisgICAgaW50IGZjLCBybGVuZ3RoOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisvKiB1cV9maWxlICovIHsKKworICAgIGludCByYyA9IC0xLCB4 LCB5LCB6OworICAgIGNoYXIgKiBzLCAqIHAsICogZnVsbHBhdGg7CisgICAgY2hhciBmaWxlYnVm W0NLTUFYUEFUSCsxXTsKKworI2lmZGVmIENLX1JFQ0FMTAorICAgIGV4dGVybiBpbnQgb25fcmVj YWxsOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCisjaWZkZWYgS1VJCisgICAgaWYgKCBndWlf ZGlhbG9nICkgeworICAgICAgICByYyA9IGd1aV9zYXZlYXNfZGlhbG9nKHByZWZhY2UsZnByb21w dCxmYyxkZmx0LHJlc3VsdCxybGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKyNl bmRpZiAvKiBLVUkgKi8KKworI2lmZGVmIENLX1JFQ0FMTAorICAgIG9uX3JlY2FsbCA9IDA7Cisj ZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyAgICBpZiAocHJlZmFjZSkJCQkvKiBJZiBwcmVmYXRv cnkgdGV4dCBnaXZlbi4uLiAqLworICAgICAgcHJpbnRmKCIlc1xuIixwcmVmYWNlKTsJCS8qIGRp c3BsYXkgaXQuICovCisKKyAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7ICAgICAgICAgICAgICAv KiBTYXZlIG9sZCBwcm9tcHQgKi8KKworICAgIC8qIFdlIGdldCB0aGUgZnVsbCBwYXRobmFtZSBv ZiB0aGUgcHJvcG9zZWQgb3V0cHV0IGZpbGUganVzdCBzbyAqLworICAgIC8qIHdlIGNhbiBzaG93 IGl0IHRvIHRoZSB1c2VyIGJ1dCB3ZSBkb24ndCB1c2UgaXQgb3Vyc2VsdmVzLiAqLworCisgICAg cCA9IE5VTEw7CQkJCS8qIEJ1aWxkIG5ldyBwcm9tcHQgKi8KKyAgICBpZiAoIWRmbHQpIGRmbHQg PSAiIjsKKyAgICBpZiAoKmRmbHQpCQkJCS8qIEhhdmUgZGVmYXVsdCBmaWxlbmFtZSAqLworICAg ICAgemZucWZwKGRmbHQsQ0tNQVhQQVRIKzEsZmlsZWJ1Zik7CS8qIEdldCBmdWxsIHBhdGggKi8K KyAgICBlbHNlCisgICAgICBja21ha21zZyhmaWxlYnVmLENLTUFYUEFUSCsxLHpndGRpcigpLCJu ZXdmaWxlIixOVUxMLE5VTEwpOworICAgIGZ1bGxwYXRoID0gZmlsZWJ1ZjsKKyAgICB4ID0gc3Ry bGVuKGZ1bGxwYXRoKTsKKworICAgIC8qIElmIG5vIHByb21wdCBnaXZlbiwgYnVpbGQgb25lIHRo YXQgc2hvd3MgdGhlIHByb3Bvc2VkIGZ1bGwgcGF0aG5hbWUuICovCisKKyAgICBpZiAoIWZwcm9t cHQpIGZwcm9tcHQgPSAiIjsKKyAgICBpZiAoISpmcHJvbXB0KSBmcHJvbXB0ID0geCA/ICIgRmls ZW5hbWUiIDogIiBGaWxlbmFtZTogIjsKKyAgICB5ID0gc3RybGVuKGZwcm9tcHQpOworICAgIGlm ICh4ID4gMCkgewkJCS8qIEhhdmUgZGVmYXVsdCBwYXRobmFtZT8gKi8KKwlwID0gKGNoYXIgKilt YWxsb2MoeCArIHkgKyA3KTsJLyogR2V0IHRlbXAgc3RvcmFnZSAqLworCWlmIChwKSB7CQkJLyog QnVpbGQgcHJvbXB0ICovCisJICAgIGNrbWFrbXNnKHAseCt5KzcsZnByb21wdCwiIFsiLGZ1bGxw YXRoLCJdOiAiKTsKKwkgICAgZnByb21wdCA9IHA7CisJfQorICAgIH0KKyAgICBjbXNldHAoZnBy b21wdCk7CQkJLyogTWFrZSBuZXcgcHJvbXB0ICovCisgICAgaWYgKHApIGZyZWUocCk7CQkJLyog RnJlZSB0ZW1wIHN0b3JhZ2UgKi8KKyAgICBjbWluaShja3hlY2gpOyAgICAgICAgICAgICAgICAg ICAgICAvKiBJbml0aWFsaXplIHBhcnNlci4gKi8KKyAgICB4ID0gLTE7CisgICAgZG8geworICAg ICAgICBwcm9tcHQoTlVMTCk7ICAgICAgICAgICAgICAgICAgIC8qIElzc3VlIHByb21wdC4gKi8K KyAgICAgICAgc3dpdGNoIChmYykgewkJCS8qIFBhcnNlIGRlcGVuZHMgb24gZnVuY3Rpb24gY29k ZSAqLworICAgICAgICAgIGNhc2UgMToJCQkvKiBJbnB1dCBmaWxlICovCisJICAgIHggPSBjbWlm aSgiTmFtZSBvZiBleGlzdGluZyBmaWxlIixkZmx0LCZzLCZ5LHh4c3RyaW5nKTsKKwkgICAgcmMg PSAxOworCSAgICBicmVhazsKKwkgIGNhc2UgMjoJCQkvKiBEaXJlY3RvcnkgKi8KKwkgICAgeCA9 IGNtZGlyKCJEaXJlY3RvcnkgbmFtZSIsZGZsdCwmcyx4eHN0cmluZyk7CisJICAgIHJjID0gMTsK KwkgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOgkJCS8qIE5ldyBvdXRwdXQgZmlsZSAqLwor CSAgICAvKiBGYWxsIHRocnUuLi4gKi8KKwkgIGNhc2UgNDoJCQkvKiBPdXRwdXQgZmlsZSAtIEFw cGVuZCBhbGxvd2VkICovCisJICAgIHggPSBjbW9maSgiT3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlv biIsZGZsdCwmcyx4eHN0cmluZyk7CisJICAgIHJjID0gKGZjID09IDQpID8gMSA6IDI7CisJICAg IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CQkJLyogQmFkIGZ1bmN0aW9uIGNvZGUgKi8KKwkg ICAgZ290byB4X3VxX2ZpbGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPCAwKSB7CQkJLyog UGFyc2UgZXJyb3IgKi8KKwkgICAgZmlsZWJ1ZlswXSA9IE5VTDsKKyAgICAgICAgICAgIGlmICh4 ID09IC00KSB7ICAgICAgICAgICAgICAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAtMykgICAgICAgICAvKiBObyBhbnN3ZXI/ICov CisgICAgICAgICAgICAgIHByaW50ZihmYyA9PSAyID8KKwkJICAgICAiIFBsZWFzZSBlbnRlciBh IGRpcmVjdG9yeSBuYW1lLlxuIiA6CisJCSAgICAgIiBQbGVhc2UgZW50ZXIgYSBmaWxlbmFtZS5c biIKKwkJICAgICApOworICAgICAgICAgICAgY21pbmkoY2t4ZWNoKTsKKyAgICAgICAgfSBlbHNl IHsKKwkgICAgeiA9IHN0cmxlbihzKTsKKwkgICAgaWYgKHogPiBybGVuZ3RoIHx8IGNrc3RybmNw eShmaWxlYnVmLGJyc3RyaXAocyksQ0tNQVhQQVRIKzEpIDwgeikgeworCQlwcmludGYoIj9OYW1l IHRvbyBsb25nXG4iKTsKKwkJeCA9IC05OworCSAgICB9IGVsc2UKKwkgICAgICB4ID0gY21jZm0o KTsJCS8qIEdldCBjb25maXJtYXRpb24gKi8KKyAgICAgICAgfQorCWlmIChmYyA9PSAxICYmIHgg PiAtMSAmJiB5ID4gMCkgeworCSAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWRcbiIp OworCSAgICB4ID0gLTk7CisJfQorICAgIH0gd2hpbGUgKHggPCAwKTsgICAgICAgICAgICAgICAg ICAgIC8qIENvbnRpbnVlIHRpbGwgZG9uZSAqLworCisgIHhfdXFfZmlsZToKKyAgICBpZiAoeCA8 IDApCisgICAgICByYyA9IC0xOworCisgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAg ICAgICAgLyogUmVzdG9yZSByZWFsIHByb21wdCAqLworCisgICAgaWYgKHJjID4gMCkKKyAgICAg IGNrc3RybmNweShyZXN1bHQsZmlsZWJ1ZixybGVuZ3RoKTsKKyAgICByZXR1cm4ocmMpOworfQor CisKKyNpZmRlZiBDS19QRVJNUworI2lmZGVmIFVOSVgKKworX1BST1RPVFlQKCBpbnQgenNldHBl cm0sIChjaGFyICosIGludCkpOworCisvKiBDSE1PRCBjb21tYW5kIGZvciBVTklYIG9ubHkgKi8K KworI2RlZmluZSBDSE1fRElSIDAKKyNkZWZpbmUgQ0hNX0RPVCAxCisjZGVmaW5lIENITV9GSUwg MgorI2RlZmluZSBDSE1fTElTIDMKKyNkZWZpbmUgQ0hNX05PTCA0CisjZGVmaW5lIENITV9RVUkg NQorI2RlZmluZSBDSE1fUkVDIDYKKyNkZWZpbmUgQ0hNX1ZSQiA3CisjZGVmaW5lIENITV9QQUcg OAorI2RlZmluZSBDSE1fTk9QIDkKKyNkZWZpbmUgQ0hNX1RZUCAxMAorI2RlZmluZSBDSE1fU0lN IDExCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHVjaG1vZHN3W10gPSB7CisgICAgIi9kaXJlY3Rv cmllcyIsIENITV9ESVIsIDAsCisgICAgIi9kb3RmaWxlcyIsICAgIENITV9ET1QsIDAsCisgICAg Ii9maWxlcyIsICAgICAgIENITV9GSUwsIDAsCisgICAgIi9saXN0IiwgICAgICAgIENITV9MSVMs IDAsCisgICAgIi9ub2xpc3QiLCAgICAgIENITV9OT0wsIDAsCisgICAgIi9ub3BhZ2UiLCAgICAg IENITV9OT1AsIDAsCisgICAgIi9wYWdlIiwgICAgICAgIENITV9QQUcsIDAsCisgICAgIi9xdWll dCIsICAgICAgIENITV9RVUksIENNX0lOViwKKyAgICAiL3JlY3Vyc2l2ZSIsICAgQ0hNX1JFQywg MCwKKyAgICAiL3NpbXVsYXRlIiwgICAgQ0hNX1NJTSwgMCwKKyAgICAiL3R5cGUiLCAgICAgICAg Q0hNX1RZUCwgQ01fQVJHLAorICAgICIvdmVyYm9zZSIsICAgICBDSE1fVlJCLCBDTV9JTlYsCit9 Oworc3RhdGljIGludCBuY2htb2RzdyA9IChzaXplb2YodWNobW9kc3cpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKTsKKworaW50Citkb3VjaG1vZCgpIHsKKyAgICBleHRlcm4gaW50IHJlY3Vyc2l2 ZSwgbnNjYW5maWxlLCBkaXJhY3RpdmU7CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgIGV4dGVybiBp bnQgdHRfcm93cywgdHRfY29sczsKKyAgICBpbnQgbiA9IDA7CisjZW5kaWYgLyogQ0tfVFRHV1NJ WiAqLworICAgIGludCBpLCBmaWxlcyA9IDEsIHQxID0gMSwgdDIgPSAwLCB4LCB5LCB6LCB2ZXJi b3NlID0gMCwgcmMgPSAxLCBwYWdpbmc7CisgICAgaW50IHhtb2RlID0gLTEsIGZzID0gMCwgZ2V0 dmFsID0gMCwgc2ltdWxhdGUgPSAwLCB3aWxkID0gMDsKKyAgICBjaGFyIGMsICogczsKKyAgICBz dHJ1Y3QgRkRCIHN3LCBudTsKKworICAgIGlmICh4YXNrbW9yZSA8IDApIHsKKyNpZmRlZiBDS19U VEdXU0laCisgICAgICAgIHhhc2ttb3JlID0gMTsKKyNlbHNlCisgICAgICAgIHhhc2ttb3JlID0g MDsKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgfQorICAgIHBhZ2luZyA9IHhhc2ttb3Jl OworCisgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRC IC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAg ICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJPY3RhbCBmaWxlIHBlcm1pc3Npb24gY29k ZSwgb3Igc3dpdGNoIiwKKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbmNobW9kc3csICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNt c3dpICovCisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vz c2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICB1Y2htb2RzdywgICAgICAgICAgICAgICAgICAg IC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJm51ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21mZGJp KCZudSwKKyAgICAgICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIg Ki8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIZWxwIG1lc3Nh Z2UgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0 ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTi9BICovCisg ICAgICAgICAgIDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmFkaXggPSA4ICovCisg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTi9BICovCisgICAgICAg ICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAq LworICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIE4vQSAqLworICAg ICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgKi8KKyAgICAgICAg ICAgKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICgoeCA9IGNtZmRiKCZzdykpIDwg MCkgeworICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICB4ID0gLTk7 CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/RmlsZW5hbWUgcmVxdWlyZWRcbiIpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgICAgIGlmIChj bXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGMgPSBj bWdicmsoKTsKKyAgICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsKKyAgICAg ICAgaWYgKGdldHZhbCAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAg cHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0dmFsICYmIChj bWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNo IHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgIH0KKyAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7CisgICAgICAgICAgY2Fz ZSBDSE1fRElSOgorICAgICAgICAgICAgdDEgPSAxOworICAgICAgICAgICAgdDIgPSAxOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBDSE1fRE9UOgorICAgICAgICAgICAgbWF0 Y2hkb3QgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBDSE1fRklMOgor ICAgICAgICAgICAgdDEgPSAwOworICAgICAgICAgICAgdDIgPSAwOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBDSE1fTElTOgorICAgICAgICAgIGNhc2UgQ0hNX1ZSQjoKKyAg ICAgICAgICAgIHZlcmJvc2UgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBDSE1fTk9MOgorICAgICAgICAgIGNhc2UgQ0hNX1FVSToKKyAgICAgICAgICAgIHZlcmJvc2Ug PSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBDSE1fUkVDOgorICAgICAg ICAgICAgcmVjdXJzaXZlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug Q0hNX1BBRzoKKyAgICAgICAgICAgIHZlcmJvc2UgPSAxOworICAgICAgICAgICAgcGFnaW5nID0g MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ0hNX05PUDoKKyAgICAgICAg ICAgIHBhZ2luZyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIENITV9T SU06CisgICAgICAgICAgICBzaW11bGF0ZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIENITV9UWVA6IHsKKyAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIg dHh0YmluW107CisgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR4dGJpbiwzLCIiLCIiLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAg aWYgKHggPT0gMikgeyAgICAgICAgICAgICAvKiBBTEwgKi8KKyAgICAgICAgICAgICAgICAgIHht b2RlID0gLTE7CisgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgLyogVEVY VCBvciBCSU5BUlkgb25seSAqLworICAgICAgICAgICAgICAgICAgeG1vZGUgPSB4OworICAgICAg ICAgICAgICAgICAgZnMgPSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB6ID0gY21yZXN1bHQubnJlc3Vs dDsKKyAgICB4ID0gY21pZmkyKCJGaWxlIHNwZWNpZmljYXRpb24iLCIiLCZzLCZ3aWxkLHQxLE5V TEwseHhzdHJpbmcsdDIpOworICAgIGlmICh4IDwgMCkgeworICAgICAgICBpZiAoeCA9PSAtMykg eworICAgICAgICAgICAgcHJpbnRmKCI/QSBmaWxlIHNwZWNpZmljYXRpb24gaXMgcmVxdWlyZWRc biIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg cmV0dXJuKHgpOworICAgIH0KKyAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAg ICBzID0gdG1wYnVmOworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgIHJldHVybih4 KTsKKyNpZmRlZiBaWFJFV0lORAorICAgIGlmICh3aWxkKSBmaWxlcyA9IHp4cmV3aW5kKCk7Cisj ZWxzZQorICAgIGlmICh3aWxkKSBmaWxlcyA9IG56eHBhbmQocywwKTsKKyNlbmRpZiAvKiBaWFJF V0lORCAqLworCisgICAgaWYgKHBhZ2luZyA+IC0xKQorICAgICAgeGFza21vcmUgPSBwYWdpbmc7 CisKKyNpZmRlZiBDS19UVEdXU0laCisgICAgaWYgKHZlcmJvc2UgJiYgcGFnaW5nKSB7CisjaWZk ZWYgT1MyCisgICAgICAgIHR0Z2N3c3ooKTsKKyNlbHNlIC8qIE9TMiAqLworICAgICAgICBpZiAo dHRnd3NpeigpID4gMCkgeworICAgICAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0X2NvbHMg PiAwKSB7CisgICAgICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOworICAgICAgICAgICAg ICAgIGNtZF9jb2xzID0gdHRfY29sczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlm IC8qIE9TMiAqLworICAgIH0KKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisKKyAgICBmb3IgKGkg PSAwOyBpIDwgZmlsZXM7IGkrKykgeworICAgICAgICBpZiAoZmlsZXMgPT0gMSAmJiB3aWxkID09 IDApIHsgIC8qIEZvciAiY2htb2QgNzc3IC4iICovCisgICAgICAgICAgICBja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4ID0gem5leHQo bGluZSk7CisgICAgICAgICAgICBpZiAoeCA8IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9 PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05vIGZpbGVzIG1hdGNoIC0gXCIl c1wiXG4iLGxpbmUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGZzKSB7CisjaWZkZWYgVk1TT1JVTklYCisgICAgICAgICAgICAv KiBJZiAvVFlQRTpURVhUIG9yIEJJTkFSWSBnaXZlbiwgc2tpcCBkaXJlY3RvcmllcyBhbmQgbGlu a3MgKi8KKyAgICAgICAgICAgIC8qIHNpbmNlIHRoZXkgYXJlIG5laXRoZXIgdGV4dCBub3IgYmlu YXJ5LiAqLworICAgICAgICAgICAgZXh0ZXJuIGludCB6Z2ZzX2Rpciwgemdmc19saW5rOworICAg ICAgICAgICAgemdldGZzKGxpbmUpOworICAgICAgICAgICAgaWYgKHpnZnNfZGlyIHx8IHpnZnNf bGluaykKKyAgICAgICAgICAgICAgY29udGludWU7CisjZWxzZQorICAgICAgICAgICAgaWYgKHpj aGtpKGxpbmUpIDwgMCkKKyAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYgLyogVk1TT1JV TklYICovCisgICAgICAgICAgICAvKiBSZWd1bGFyIGZpbGUsIHNjYW4gaXQgKi8KKyAgICAgICAg ICAgIHN3aXRjaCAoc2NhbmZpbGUobGluZSwmeSxuc2NhbmZpbGUpKSB7CisgICAgICAgICAgICAg IGNhc2UgRlRfQklOOgorICAgICAgICAgICAgICAgIGlmICh4bW9kZSAhPSAxKQorICAgICAgICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg IGNhc2UgRlRfVEVYVDoKKyAgICAgICAgICAgICAgY2FzZSBGVF83QklUOgorICAgICAgICAgICAg ICBjYXNlIEZUXzhCSVQ6CisjaWZkZWYgVU5JQ09ERQorICAgICAgICAgICAgICBjYXNlIEZUX1VU Rjg6CisgICAgICAgICAgICAgIGNhc2UgRlRfVUNTMjoKKyNlbmRpZiAvKiBVTklDT0RFICovCisg ICAgICAgICAgICAgICAgaWYgKHhtb2RlICE9IDApCisgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc2ltdWxhdGUpIHsKKyNp ZmRlZiBVTklYCisgICAgICAgICAgICBleHRlcm4gaW50IHpjaGtvZDsgICAgICAgICAgLyogVW5p ZGVudGlmaWVkIEZseWluZyAqLworICAgICAgICAgICAgaW50IHh4ID0gemNoa29kOyAgICAgICAg ICAgIC8qIEFQSSBFeHRlbnNpb24uLi4gKi8KKyAgICAgICAgICAgIHpjaGtvZCA9IDE7CisjZW5k aWYgLyogVU5JWCAqLworICAgICAgICAgICAgaWYgKHpjaGtvKGxpbmUpIDwgMCkKKyAgICAgICAg ICAgICAgcHJpbnRmKCIlcyAtIEFjY2VzcyBkZW5pZWRcbiIsbGluZSk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBPS1xuIixsaW5lKTsKKyNpZmRlZiBVTklY CisgICAgICAgICAgICB6Y2hrb2QgPSB4eDsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBpZiAoenNldHBlcm0obGluZSx6KSA8IDEpIHsKKyAgICAgICAg ICAgICAgICBpZiAodmVyYm9zZSB8fCBmaWxlcyA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIlczogJXNcbiIsbGluZSxja19lcnJzdHIoKSk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyYm9zZSkg eworICAgICAgICAgICAgICAgIHByaW50ZigiJXMgICVzXG4iLHppcGVybShsaW5lKSxsaW5lKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIENLX1RUR1dTSVoKKyAgICAgICAgaWYg KHZlcmJvc2UgJiYgcGFnaW5nKSB7ICAgICAgICAvKiBQYXVzZSBhdCBlbmQgb2Ygc2NyZWVuICov CisgICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4gMCkgeworICAgICAg ICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19UVEdXU0laICov CisKKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSByYyk7Cit9CisjZW5kaWYgLyogVU5JWCAq LworI2VuZGlmIC8qIENLX1BFUk1TICovCisKKyNpZm5kZWYgTk9TUEwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTLUV4cHJlc3Npb25zICovCisjaWZuZGVmIE5PU0VYUAorCitzdHJ1Y3Qg a2V5dGFiIHNleHB0YWJbXSA9IHsKKyAgICAiZGVwdGgtbGltaXQiLCAxLCAwLAorICAgICJlY2hv LXJlc3VsdCIsIDAsIDAsCisgICAgInRydW5jYXRlLWFsbC1yZXN1bHRzIiwgMgorfTsKKworc3Rh dGljIGludCBzZXhwbWF4ZGVwID0gMTAwMDsgICAgICAgICAgIC8qIE1heGltdW0gZGVwdGggKi8K KworI2RlZmluZSB4eGZsb2F0KHMseCkgXAorKChpc2RpZ2l0KCpzKXx8KCpzPT0nLScpfHwoKnM9 PScrJyl8fCgqcz09Jy4nKXx8KCpzPT0nXDA0MCcpKT9pc2Zsb2F0KHMseCk6MCkKKworI2RlZmlu ZSBTWF9BREQgIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5bWJvbHMgZm9yIGJ1aWx0LWlu IG9wZXJhdG9ycyAqLworI2RlZmluZSBTWF9TVUIgIDIKKyNkZWZpbmUgU1hfTVVMICAzCisjZGVm aW5lIFNYX0RJViAgNAorI2RlZmluZSBTWF9QT1cgIDUKKyNkZWZpbmUgU1hfU0VUICA2CisjZGVm aW5lIFNYX01PRCAgNworI2RlZmluZSBTWF9FVkEgIDgKKyNkZWZpbmUgU1hfRVhQICA5CisjZGVm aW5lIFNYX0FFUSAxMAorI2RlZmluZSBTWF9BTFQgMTEKKyNkZWZpbmUgU1hfQUdUIDEyCisjZGVm aW5lIFNYX0FMRSAxMworI2RlZmluZSBTWF9BR0UgMTQKKyNkZWZpbmUgU1hfTUlOIDE1CisjZGVm aW5lIFNYX01BWCAxNgorI2RlZmluZSBTWF9TUVIgMTcKKyNkZWZpbmUgU1hfRkxSIDE4CisjZGVm aW5lIFNYX0NFSSAxOQorI2RlZmluZSBTWF9UUlUgMjAKKyNkZWZpbmUgU1hfQUJTIDIxCisjZGVm aW5lIFNYX1JPVSAyMgorI2RlZmluZSBTWF9MRVQgMjMKKyNkZWZpbmUgU1hfTEdOIDI0CisjZGVm aW5lIFNYX0xHWCAyNQorI2RlZmluZSBTWF9GTE8gMjYKKyNkZWZpbmUgU1hfSUZDIDI3CisjZGVm aW5lIFNYX05PVCAyOAorI2RlZmluZSBTWF9ORVEgMjkKKyNkZWZpbmUgU1hfQU5EIDMwCisjZGVm aW5lIFNYX0xPUiAzMQorI2RlZmluZSBTWF9TSU4gMzIKKyNkZWZpbmUgU1hfQ09TIDMzCisjZGVm aW5lIFNYX1RBTiAzNAorI2RlZmluZSBTWF9CV0EgMzUKKyNkZWZpbmUgU1hfQldPIDM2CisjZGVm aW5lIFNYX0JXWCAzNworI2RlZmluZSBTWF9CV04gMzgKKyNkZWZpbmUgU1hfWE9SIDM5CisjZGVm aW5lIFNYX0lOQyA0MAorI2RlZmluZSBTWF9ERUMgNDEKKyNkZWZpbmUgU1hfUVVPIDQyCisjZGVm aW5lIFNYX1NUUiA0MworCisvKiBPcGVyYXRvciBmbGFncyAqLworCisjZGVmaW5lIFNYRl9QUkUg MjU2ICAgICAgICAgICAgICAgICAgICAgLyogUHJlZGljYXRlICovCisjZGVmaW5lIFNYRl9PTkUg NTEyICAgICAgICAgICAgICAgICAgICAgLyogUmVxdWlyZXMgb25lIGFyZyAqLworI2RlZmluZSBT WEZfVFdPIDEwMjQgICAgICAgICAgICAgICAgICAgIC8qIFJlcXVpcmVzIHR3byBhcmdzIG9yIG1v cmUgKi8KKyNkZWZpbmUgU1hGX0ZMTyAyMDQ4ICAgICAgICAgICAgICAgICAgICAvKiBDb2VyY2Ug dG8gZmxvYXRpbmctcG9pbnQgKi8KKworLyogQnVpbHQtaW4gY29uc3RhbnRzICovCisKKyNkZWZp bmUgU1hDX05JTCAxICAgICAgICAgICAgICAgICAgICAgICAvKiBOSUwgKi8KKyNkZWZpbmUgU1hD X1BJICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBQSSAqLworI2RlZmluZSBTWENfVCAgIDMg ICAgICAgICAgICAgICAgICAgICAgIC8qIFQgKi8KKworLyoKKyAgVGhpcyBpcyBhbiB4bG9va3Vw KCkgdGFibGUgYW5kIHNvIG5lZWQgbm90IGJlIGluICJhbGhhYmV0aWNhbCIgb3JkZXIuCisgIFRo ZXJlZm9yZSBlbnRyaWVzIGFyZSBhcnJhbmdlZCB0byBtaW5pbWl6ZSBzZWFyY2ggZm9yIG1vc3Qg Y29tbW9uCisgIG9wZXJhdG9ycy4KKyovCitzdGF0aWMgc3RydWN0IGtleXRhYiBzZXhwb3BzW10g PSB7ICAgICAgLyogQnVpbHQtaW4gb3BlcmF0b3JzICovCisgICAgInNldHEiLCAgICBTWF9TRVQs IDAsICAgICAgICAgICAgICAgLyogR2xvYmFsIGFzc2lnbm1lbnQgKi8KKyAgICAiKyIsICAgICAg IFNYX0FERCwgMCwgICAgICAgICAgICAgICAvKiBTaW1wbGUgYXJpdGhtZXRpYyAqLworICAgICIt IiwgICAgICAgU1hfU1VCLCAwLAorICAgICIqIiwgICAgICAgU1hfTVVMLCAwLAorICAgICIvIiwg ICAgICAgU1hfRElWLCBTWEZfVFdPLAorICAgICJeIiwgICAgICAgU1hfUE9XLCBTWEZfVFdPLAor CisgICAgImlmIiwgICAgICBTWF9JRkMsIFNYRl9UV08sICAgICAgICAgLyogSUYgKi8KKyAgICAi bGV0IiwgICAgIFNYX0xFVCwgMCwgICAgICAgICAgICAgICAvKiBMb2NhbCBhc3NpZ25tZW50ICov CisgICAgIm5vdCIsICAgICBTWF9OT1QsIFNYRl9PTkUsICAgICAgICAgLyogTk9UICovCisgICAg Im1vZCIsICAgICBTWF9NT0QsIFNYRl9UV08sICAgICAgICAgLyogTW9kdWx1cyAqLworCisgICAg IjwiLCAgICAgICBTWF9BTFQsIFNYRl9QUkUsCQkvKiBDb21wYXJpc29ucyAqLworICAgICI+Iiwg ICAgICAgU1hfQUdULCBTWEZfUFJFLAorICAgICI8PSIsICAgICAgU1hfQUxFLCBTWEZfUFJFLAor ICAgICI9IiwgICAgICAgU1hfQUVRLCBTWEZfUFJFLAorICAgICI+PSIsICAgICAgU1hfQUdFLCBT WEZfUFJFLAorICAgICIhPSIsICAgICAgU1hfTkVRLCBTWEZfUFJFLAorCisgICAgIisrIiwgICAg ICBTWF9JTkMsIFNYRl9PTkV8U1hGX1RXTywgLyogSW5jcmVtZW50ICovCisgICAgIi0tIiwgICAg ICBTWF9ERUMsIFNYRl9PTkV8U1hGX1RXTywgLyogRGVjcmVtZW50ICovCisKKyAgICAiKioiLCAg ICAgIFNYX1BPVywgU1hGX1RXTywgICAgICAgICAvKiBDb21tb24gc3lub255bXMgKi8KKyAgICAi PT0iLCAgICAgIFNYX0FFUSwgU1hGX1BSRSwKKyAgICAiISIsICAgICAgIFNYX05PVCwgU1hGX09O RSwKKyAgICAiLiIsICAgICAgIFNYX0VWQSwgMCwKKworICAgICJhbmQiLCAgICAgU1hfQU5ELCAw LCAgICAgICAgICAgICAgIC8qIExvZ2ljYWwgb3BlcmF0b3JzICovCisgICAgIm9yIiwgICAgICBT WF9MT1IsIDAsCisgICAgInhvciIsICAgICBTWF9YT1IsIFNYRl9UV08sCisKKyAgICAibWF4Iiwg ICAgIFNYX01BWCwgU1hGX09ORXxTWEZfVFdPLCAvKiBNYXggYW5kIG1pbiAqLworICAgICJtaW4i LCAgICAgU1hfTUlOLCBTWEZfT05FfFNYRl9UV08sCisKKyAgICAiJSIsICAgICAgIFNYX01PRCwg U1hGX1RXTywgICAgICAgICAvKiBNb3JlIHN5bm9ueW1zICovCisgICAgInx8IiwgICAgICBTWF9M T1IsIDAsCisgICAgIiYmIiwgICAgICBTWF9BTkQsIDAsCisKKyAgICAicXVvdGUiLCAgIFNYX1FV TywgU1hGX09ORSwKKyAgICAic3RyaW5nIiwgIFNYX1NUUiwgU1hGX09ORSwKKworICAgICJldmFs IiwgICAgU1hfRVZBLCAwLCAgICAgICAgICAgICAgIC8qIEFzc29ydGVkIGNvbW1hbmRzICovCisg ICAgImFicyIsICAgICBTWF9BQlMsIFNYRl9PTkUsCisgICAgInRydW5jYXRlIixTWF9UUlUsIFNY Rl9PTkV8U1hGX0ZMTywKKyAgICAicm91bmQiLCAgIFNYX1JPVSwgU1hGX09ORXxTWEZfVFdPfFNY Rl9GTE8sCisgICAgImNlaWxpbmciLCBTWF9DRUksIFNYRl9PTkV8U1hGX0ZMTywKKyAgICAiZmxv b3IiLCAgIFNYX0ZMUiwgU1hGX09ORXxTWEZfRkxPLAorICAgICJmbG9hdCIsICAgU1hfRkxPLCBT WEZfT05FfFNYRl9GTE8sCisKKyNpZmRlZiBGTkZMT0FUCisgICAgInNxcnQiLCAgICBTWF9TUVIs IFNYRl9PTkV8U1hGX0ZMTywgLyogRmxvYXRpbmcgcG9pbnQgZnVuY3Rpb25zICovCisgICAgImV4 cCIsICAgICBTWF9FWFAsIFNYRl9PTkV8U1hGX0ZMTywKKyAgICAic2luIiwgICAgIFNYX1NJTiwg U1hGX09ORXxTWEZfRkxPLAorICAgICJjb3MiLCAgICAgU1hfQ09TLCBTWEZfT05FfFNYRl9GTE8s CisgICAgInRhbiIsICAgICBTWF9UQU4sIFNYRl9PTkV8U1hGX0ZMTywKKyAgICAibG9nIiwgICAg IFNYX0xHTiwgU1hGX09ORXxTWEZfRkxPLAorICAgICJsb2cxMCIsICAgU1hfTEdYLCBTWEZfT05F fFNYRl9GTE8sCisjZW5kaWYgLyogRk5GTE9BVCAqLworCisgICAgIiMiLCAgICAgICBTWF9CV1gs IFNYRl9UV08sICAgICAgICAgLyogQml0d2lzZSBvcGVyYXRvcnMgKi8KKyAgICAiJiIsICAgICAg IFNYX0JXQSwgMCwKKyAgICAifCIsICAgICAgIFNYX0JXTywgMCwKKyAgICAifiIsICAgICAgIFNY X0JXTiwgU1hGX09ORSwKKyAgICAiIiwgMCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiAoZW5kKSAqLworfTsKK3N0YXRpYyBpbnQgbnNleHBvcHMgPSAoc2l6ZW9mKHNleHBvcHMpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNleHBj b25zdHNbXSA9IHsgICAvKiBCdWlsdC1pbiBjb25zdGFudHMgKi8KKyAgICAibmlsIiwgU1hDX05J TCwgMCwgICAgICAgICAgICAgICAgICAvKiBOSUwgKGZhbHNlKSAqLworICAgICJwaSIsICBTWENf UEksICAwLCAgICAgICAgICAgICAgICAgIC8qIFBpICgzLjE0MTU5MjYuLi4pICovCisgICAgInQi LCAgIFNYQ19ULCAgIDAsICAgICAgICAgICAgICAgICAgLyogVCAodHJ1ZSkgKi8KKyAgICAiIiwg MCwgMAorfTsKK3N0YXRpYyBpbnQgbnNleHBjb25zdHMgPSAoc2l6ZW9mKHNleHBjb25zdHMpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK2ludCBzZXhwcmMgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTLUV4cHJlc3Npb24gZXJyb3IgZmxhZyAqLworaW50IHNleHBwdiA9 IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZWRpY2F0ZSB2YWx1ZSAqLworc3RhdGlj IGludCBzZXhwdHJ1bmMgPSAwOwkJLyogRmxhZyB0byBmb3JjZSBhbGwgcmVzdWx0cyB0byBpbnQg Ki8KKworI2RlZmluZSBTWE1MRU4gNjQgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIGFy ZyBsaXN0IGluaXRpYWwgbGVuZ3RoICovCisjaW5jbHVkZSA8bWF0aC5oPiAgICAgICAgICAgICAg ICAgICAgICAgLyogRmxvYXRpbmctcG9pbnQgZnVuY3Rpb25zICovCisKK19QUk9UT1RZUCggY2hh ciAqIGZwZm9ybWF0LCAoQ0tGTE9BVCwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIENLRkxPQVQg Y2tyb3VuZCwgKENLRkxPQVQsIGludCwgY2hhciAqLCBpbnQpICk7CisKK2V4dGVybiBjaGFyIG1h dGhfcGlbXTsgICAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiBQaSAqLworZXh0ZXJuIGludCBz ZXhwZWNobzsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTRVhQUkVTU0lPTiBFQ0hPIHZhbHVl ICovCitleHRlcm4gY2hhciAqIHNleHB2YWw7ICAgICAgICAgICAgICAgICAgLyogTGFzdCB0b3At bGV2ZWwgUy1FeHByZXNzaW9uIHZhbHVlICovCitleHRlcm4gY2hhciAqIGxhc3RzZXhwOyAgICAg ICAgICAgICAgICAgLyogTGFzdCBTLUV4cHJlc3Npb24gKi8KK2ludCBzZXhwcm1heCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBMb25nZXN0IHJlc3VsdCAoZm9yIHN0YXRzKSAqLworaW50 IHNleHBkbWF4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE1heCBkZXB0aCByZWFjaGVk IChmb3Igc3RhdHMpICovCitpbnQgc2V4cGRlcCAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg LyogZG9zZXhwKCkgcmVjdXJzaW9uIGRlcHRoICovCitzdGF0aWMgaW50ICogc3hybGVuID0gTlVM TDsgICAgICAgICAgICAgLyogUmVzdWx0IHN0YWNrIHN0cmluZyBzaXplcyAqLworc3RhdGljIGNo YXIgKiogc3hyZXN1bHQgPSBOVUxMOyAgICAgICAgIC8qIFJlc3VsdCBzdGFjayAqLworCisvKiAg cyBoIG8gcyBlIHggcCAgLS0gIFNob3cgUy1FeHByZXNzaW9uIGluZm8gICovCisKK1ZPSUQKK3No b3NleHAoKSB7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50ZigiIHNleHByZXNzaW9uIGVj aG8tcmVzdWx0OiAlc1xuIixzaG93b29hKHNleHBlY2hvKSk7CisgICAgcHJpbnRmKCIgc2V4cHJl c3Npb24gZGVwdGgtbGltaXQ6ICVkXG4iLHNleHBtYXhkZXApOworICAgIHByaW50ZigiXG4iKTsK KyAgICBwcmludGYoIiBtYXhpbXVtIGRlcHRoIHJlYWNoZWQ6ICAgJWRcbiIsc2V4cGRtYXgpOwor ICAgIHByaW50ZigiIGxvbmdlc3QgcmVzdWx0IHJldHVybmVkOiAlZFxuIixzZXhwcm1heCk7Cisg ICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50ZigiIHRydW5jYXRlIGFsbCByZXN1bHRzOiAgICAl c1xuIixzaG93b2ZmKHNleHB0cnVuYykpOworICAgIHByaW50ZigiXG4iKTsKKyAgICBwcmludGYo IiBsYXN0IHNleHByZXNzaW9uOiAgICAgICAgJXNcbiIsbGFzdHNleHAgPyBsYXN0c2V4cCA6ICIo bm9uZSkiKTsKKyAgICBwcmludGYoIiBsYXN0IHZhbHVlOiAgICAgICAgICAgICAgJXNcbiIsc2V4 cHZhbCA/IHNleHB2YWwgOiAiKG5vbmUpIik7CisgICAgcHJpbnRmKCJcbiIpOworfQorCisKK3N0 YXRpYyBjaGFyICoKK3NleHBkZWJ1ZyhzKSBjaGFyICogczsgeworICAgIC8qIEZvciBkZWJ1Z2dp bmcgLS0gaW5jbHVkZXMgcmVjdXJzaW9uIGRlcHRoIGluIGVhY2ggZGVidWcgZW50cnkgKi8KKyAg ICBzdGF0aWMgY2hhciBidWZbNjRdOworICAgIGNrbWFrbXNnKGJ1Ziw2NCwiZG9zZXhwWyIsY2tp dG9hKHNleHBkZXApLCJdICIscyk7CisgICAgcmV0dXJuKChjaGFyICopYnVmKTsKK30KKworLyog IGQgbyBzIGUgeCBwICAtLSAgUy1FeHByZXNzaW9uIFJlYWRlciAgKi8KKworLyogIFJldHVybnMg dmFsdWUgYXMgc3RyaW5nIChlbXB0eSwgbnVtZXJpYywgb3Igbm9uLW51bWVyaWMpICovCisKK3N0 YXRpYyBjaGFyIHN4cm91bmRidWZbMzJdOwkJLyogRm9yIFJPVU5EIHJlc3VsdCAqLworCitjaGFy ICoKK2Rvc2V4cChzKSBjaGFyICpzOyB7ICAgICAgICAgICAgICAgICAgICAvKiBzID0gUy1FeHBy ZXNzaW9uICovCisgICAgZXh0ZXJuIHN0cnVjdCBtdGFiICptYWN0YWI7ICAgICAgICAgLyogTWFj cm8gdGFibGUgKi8KKyAgICBleHRlcm4gaW50IG1hY2x2bCwgbm1hYzsKKyAgICBleHRlcm4gY2hh ciAqbXJ2YWxbXTsKKyAgICBleHRlcm4gaW50IG1ha2VzdHJsZW47ICAgICAgICAgICAgICAvKiAo c2VlIG1ha2VzdHIoKSkgKi8KKyAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxID0gTlVMTDsgICAg ICAvKiBja3NwbGl0KCkgcmV0dXJuIHR5cGUgKi8KKyAgICBjaGFyICogcFtTRVhQTUFYKzFdLCAq KiBwMjsgICAgICAgICAvKiBMaXN0IGl0ZW1zIChtdXN0IGJlIG9uIHN0YWNrKSAqLworICAgIGNo YXIgKiBsaW5lID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEZvciBidWlsZGluZyBtYWNybyBh cmd1bWVudCBsaXN0ICovCisgICAgaW50IG5vc3BsaXQgPSAwOworICAgIGludCBsaW5lbGVuID0g MDsKKyAgICBpbnQgbGluZXBvcyA9IDA7CisgICAgaW50IHF1b3RlID0gMDsgICAgICAgICAgICAg ICAgICAgICAgLyogTElTUCBxdW90ZSBmbGFnICovCisgICAgY2hhciAqIHMyOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogV29ya2VycyAqLworICAgIGludCBrdywga3dmbGFncywgbXggPSAw LCB4ID0gMDsKKyAgICBpbnQgbm90ID0gMCwgdHJ1bmNhdGUgPSAwLCBidWlsdGluID0gMDsKKyAg ICBpbnQgZnBmbGFnID0gMCwgcXVpdCA9IDAsIG1hY3JvID0gMDsKKyAgICBDS19PRkZfVCByZXN1 bHQgPSAwLCBpLCBqLCBrLCBuID0gMDsKKyAgICBDS0ZMT0FUIGZwaiwgZnByZXN1bHQgPSAwLjA7 ICAgICAgICAvKiBGbG9hdGluZy1wb2ludCByZXN1bHRzICovCisgICAgaW50IHBmbGFnID0gMDsg ICAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBwcmVkaWNhdGUgKi8KKyAgICBpbnQgcHJlc3Vs dCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBQcmVkaWNhdGUgcmVzdWx0ICovCisgICAgaW50 IG11c3RmcmVlID0gMDsgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgbWFsbG9jJ2Qgd2UgbXVz dCBmcmVlICovCisKKyAgICBzZXhwcHYgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmVkaWNhdGUgdmFsdWUgKi8KKyAgICBzMiA9ICIiOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBEZWZhdWx0IHJldHVybiB2YWx1ZSAqLworCisgICAgZGVidWcoRjExMSxzZXhwZGVidWco ImVudHJ5IDEiKSxzLHNleHByYyk7CisKKyAgICBpZiAoKytzZXhwZGVwID4gc2V4cG1heGRlcCkg eyAgICAgICAvKiBLZWVwIHRyYWNrIG9mIGRlcHRoICovCisgICAgICAgIHByaW50ZigiP1MtRXhw cmVzc2lvbiBkZXB0aCBsaW1pdCBleGNlZWRlZDogJWRcbiIsc2V4cG1heGRlcCk7CisgICAgICAg IHNleHByYysrOworICAgICAgICBkZWJ1ZyhGMTExLHNleHBkZWJ1ZygibWF4IGRlcHRoIGV4Y2Vl ZGVkIikscyxzZXhwcmMpOworICAgIH0KKyAgICBpZiAoc2V4cGRlcCA+IHNleHBkbWF4KSAgICAg ICAgICAgICAvKiBGb3Igc3RhdHMgKi8KKyAgICAgIHNleHBkbWF4ID0gc2V4cGRlcDsKKworICAg IGlmIChzZXhwcmMpICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yLCBxdWl0IGFsbCBs ZXZlbHMgKi8KKyAgICAgIGdvdG8geGRvc2V4cDsgICAgICAgICAgICAgICAgICAgICAvKiBBbHdh eXMgZ290byBjb21tb24gZXhpdCBwb2ludCAqLworCisgICAgZGVidWcoRjExMSxzZXhwZGVidWco ImVudHJ5IDIiKSxzLHNleHByYyk7CisKKyAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAg ICAgICAgICAvKiBOdWxsIG9yIGVtcHR5IGFyZyAqLworCisgICAgd2hpbGUgKCpzID09IFNQKSBz Kys7ICAgICAgICAgICAgICAgLyogU3RyaXAgbGVhZGluZyBzcGFjZXMgKi8KKyAgICBpZiAoISpz KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzbyBlbXB0eSByZXN1bHQgKi8KKyAgICAg IGdvdG8geGRvc2V4cDsKKy8qCisgIEFsbG9jYXRlIHJlc3VsdCBzdGFjayB1cG9uIGZpcnN0IHVz ZSwgb3IgYWZ0ZXIgaXQgaGFzIGJlZW4gcmVzaXplZCB3aXRoCisgIFNFVCBTRVhQIERFUFRILUxJ TUlULgorKi8KKyAgICBpZiAoIXN4cmVzdWx0KSB7CisgICAgICAgIHN4cmVzdWx0ID0gKGNoYXIg KiopbWFsbG9jKHNleHBtYXhkZXAgKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgIGlmICghc3hy ZXN1bHQpIHsKKyAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUg LSBcIiVzXCJcbiIsIHMpOworICAgICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICBnb3Rv IHhkb3NleHA7CisgICAgICAgIH0KKyAgICAgICAgc3hybGVuID0gKGludCAqKW1hbGxvYyhzZXhw bWF4ZGVwICogc2l6ZW9mKGludCkpOworICAgICAgICBpZiAoIXN4cmxlbikgeworICAgICAgICAg ICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAtIFwiJXNcIlxuIiwgcyk7Cisg ICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAg fQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2V4cG1heGRlcDsgaSsrKSB7CisgICAgICAgICAg ICBzeHJlc3VsdFtpXSA9IE5VTEw7ICAgICAgICAgLyogUmVzdWx0IHBvaW50ZXJzICovCisgICAg ICAgICAgICBzeHJsZW5baV0gPSAwOyAgICAgICAgICAgICAgLyogQnVmZmVyIHNpemVzICovCisg ICAgICAgIH0KKyAgICB9CisgICAgczIgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogczIgaXMgdGhlIHJlc3VsdCBwb2ludGVyICovCisgICAgayA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTGVuZ3RoIGFjY3VtdWxhdG9yICovCisgICAgaWYgKHNbMF0gPT0g JygnKSB7ICAgICAgICAgICAgICAgICAgLyogU3RhcnRzIHdpdGggb3BlbiBwYXJlbj8gKi8KKyAg ICAgICAgd2hpbGUgKCpzMisrKSBrKys7ICAgICAgICAgICAgICAvKiBHZXQgbGVuZ3RoICovCisg ICAgICAgIGlmIChzW2stMV0gPT0gJyknKSB7ICAgICAgICAgICAgLyogU3RyaXAgb3V0ZXIgcGFy ZW5zIGlmIGFueSAqLworICAgICAgICAgICAgc1trLTFdID0gTlVMOworICAgICAgICAgICAgcysr OworICAgICAgICAgICAgayAtPSAyOworICAgICAgICAgICAgd2hpbGUgKCpzID09IFNQKSB7ICAg ICAgICAgIC8qIFN0cmlwIGxlYWRpbmcgc3BhY2VzIGZyb20gcmVzdWx0ICovCisgICAgICAgICAg ICAgICAgcysrOworICAgICAgICAgICAgICAgIGstLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHdoaWxlIChrID4gMCAmJiBzW2stMV0gPT0gU1ApIHsgLyogQW5kIHRyYWlsaW5nIHNwYWNl cy4gKi8KKyAgICAgICAgICAgICAgICBzW2stMV0gPSBOVUw7CisgICAgICAgICAgICAgICAgay0t OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghKnMpIHsgICAgICAgICAg ICAgICAgICAgICAgLyogSWYgbm90aGluZyByZW1haW5zICovCisgICAgICAgICAgICBzMiA9ICIi OyAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIGVtcHR5IHJlc3VsdC4gKi8KKyAgICAgICAg ICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBCcmVhayByZXN1bHQg dXAgaW50byAid29yZHMiIChhbiBTRVhQIGNvdW50cyBhcyBhIHdvcmQpICovCisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgU0VYUE1BWCsxOyBpKysgKSB7CS8qIENsZWFyIHRoZSBvcGVyYW5kcyAqLwor CXBbaV0gPSBOVUxMOworICAgIH0KKyAgICBpZiAoISoocysxKSB8fCAhKihzKzIpKSB7ICAgICAg ICAgICAvKiBObyBuZWVkIHRvIGNhbGwgY2tzcGxpdCgpICovCisgICAgICAgIG4gPSAxOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogaWYgaXQncyBvbmUgb3IgdHdvIGNoYXJzLiAqLworICAg ICAgICBwWzFdID0gczsgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gbWFsbG9j IHRoaXMgZWl0aGVyLiAqLworCW5vc3BsaXQgPSAxOworICAgICAgICBkZWJ1ZyhGMTAxLHNleHBk ZWJ1Zygibm9zcGxpdCIpLCIiLG4pOworICAgICAgICBpZiAoc1swXSA9PSAnKCcpIHsgICAgICAg ICAgICAgIC8qICgpIGVtcHR5ICovCisgICAgICAgICAgICBzMiA9ICIiOworICAgICAgICAgICAg Z290byB4ZG9zZXhwOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKwlub3NwbGl0ID0gMDsKKyAg ICAgICAgcSA9IGNrc3BsaXQoMSxTRVhQTUFYLHMsTlVMTCwiXFwlW10mJCstLz0qXl9AIXt9Lzw+ fC4jfidgOjs/Iiw4LDM5LDApOworICAgICAgICBpZiAoIXEpCisgICAgICAgICAgZ290byB4ZG9z ZXhwOworICAgICAgICBuID0gcS0+YV9zaXplOyAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBv ZiBpdGVtcyAqLworICAgICAgICBkZWJ1ZyhGMTAxLHNleHBkZWJ1Zygic3BsaXQiKSwiIixuKTsK KyAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTRVhQTUFYKSB7ICAgICAvKiBDaGVjayBmb3IgdG9v IG1hbnkgKi8KKyAgICAgICAgICAgIHByaW50ZigiP1RvbyBtYW55IG9wZXJhbmRzOiBtYXggPSAl ZFxuIixTRVhQTUFYKTsKKyAgICAgICAgICAgIHNleHByYysrOworICAgICAgICAgICAgZ290byB4 ZG9zZXhwOworICAgICAgICB9CisgICAgICAgIGlmIChuID09IDApICAgICAgICAgICAgICAgICAg ICAgLyogTm9uZSwgcmVzdWx0IGlzIE5VTEwsIGRvbmUuICovCisgICAgICAgICAgZ290byB4ZG9z ZXhwOworICAgICAgICBpZiAobiA9PSAxICYmIHNbMF0gPT0gJygnKSB7ICAgIC8qIE9uZSBidXQg aXQncyBhbm90aGVyIFNFWFAgKi8KKyAgICAgICAgICAgIHMyID0gZG9zZXhwKHMpOworICAgICAg ICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICB9CisgICAgICAgIHAyID0gcS0+YV9oZWFkOyAg ICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0IGFycmF5LiAqLworICAgICAgICBmb3Ig KGkgPSAxOyBpIDw9IG47IGkrKykgeyAgICAgIC8qIFdlIG11c3QgY29weSBpdCBiZWNhdXNlICov CisgICAgICAgICAgICBwW2ldID0gTlVMTDsgICAgICAgICAgICAgICAgLyogcmVjdXJzaXZlIGNh bGxzIHRvIGRvc2V4cCgpICovCisgICAgICAgICAgICBpZiAocDJbaV0pICAgICAgICAgICAgICAg ICAgLyogd3JpdGUgb3ZlciB0aGUgc2FtZSBhcnJheSAqLworICAgICAgICAgICAgICBtYWtlc3Ry KCYocFtpXSkscDJbaV0pOworICAgICAgICB9CisgICAgICAgIGlmIChzWzBdID09ICcoJykgeyAg ICAgICAgICAgICAgLyogT3BlcmF0b3IgaXMgYW4gUy1FeHByZXNzaW9uICovCisgICAgICAgICAg ICBzMiA9IGRvc2V4cChwWzFdKTsgICAgICAgICAgLyogUmVwbGFjZSBpdCBieSBpdHMgdmFsdWUg Ki8KKyAgICAgICAgICAgIG1ha2VzdHIoJihwWzFdKSxzMik7CisgICAgICAgIH0KKyAgICAgICAg bXVzdGZyZWUrKzsgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0byBmcmVlIGl0ICov CisgICAgfQorICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVnKCJoZWFkIikscFsxXSwwKTsKKworICAg IGlmIChuID09IDEgJiYgcFsxXSkgeworICAgICAgICBpZiAoKihwWzFdKSA9PSAnXDA0NycpIHsg ICAgICAgLyogQXBvc3Ryb3BoZSA9IExJU1AgcXVvdGUgY2hhcmFjdGVyICovCisgICAgICAgICAg ICBzMiA9IHBbMV07CisgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgIH0KKyAgICB9 CisvKgorICBUaGlzIHNlY3Rpb24gc2lkZXN0ZXBzIHhsb29rdXAoKSBvZiB0aGUgbW9zdCBjb21t b24gb3BlcmF0b3JzLgorICBJdCdzIG5vdCBuZWNlc3NhcnkgYnV0IGl0IHNwZWVkcyB1cCBTRVhQ LWhlYXZ5IGxvb3BzIGJ5IGFib3V0IDEwJS4KKyovCisgICAga3dmbGFncyA9IDA7CisgICAgaWYg KG4gPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vayB1cCB0aGUgb3BlcmF0b3Ig Ki8KKyAgICAgICAgczIgPSBwWzFdOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcmVsb29rdXAg b3B0aW1pemF0aW9uLi4uICovCisgICAgICAgIGlmICghczIpCisgICAgICAgICAgczIgPSAiIjsK KyAgICAgICAgaWYgKCEqczIpCisgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICBrdyA9 IDA7CisgICAgICAgIHggPSAwOworICAgICAgICBpZiAoaXNkaWdpdCgqczIpKSB7ICAgICAgICAg ICAgIC8qIERpZ2l0ICovCisgICAgICAgICAgICB4ID0gLTI7CisKKyAgICAgICAgfSBlbHNlIGlm IChpc2FscGhhKCpzMikgJiYgISooczIrMSkpIHsgLyogU2luZ2xlIGxldHRlciAqLworICAgICAg ICAgICAgeCA9IC0xOworCisgICAgICAgIH0gZWxzZSBpZiAoKnMyID09ICdzJyB8fCAqczIgPT0g J1MnKSB7IC8qIFNFVFEgKi8KKyAgICAgICAgICAgIHMyKys7CisgICAgICAgICAgICBpZiAoKnMy ID09ICdlJyB8fCAqczIgPT0gJ0UnKSB7CisgICAgICAgICAgICAgICAgczIrKzsKKyAgICAgICAg ICAgICAgICBpZiAoKnMyID09ICd0JyB8fCAqczIgPT0gJ1QnKSB7CisgICAgICAgICAgICAgICAg ICAgIHMyKys7CisgICAgICAgICAgICAgICAgICAgIGlmICgqczIgPT0gJ3EnIHx8ICpzMiA9PSAn UScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKihzMisxKSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHggPSBTWF9TRVQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAga3dmbGFncyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbiA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF4KSB7 CisgICAgICAgICAgICBpZiAoISooczIrMSkpIHsgICAgICAgICAgICAgLyogQ29tbW9uIHNpbmds ZS1jaGFyYWN0ZXIgb3BzICovCisgICAgICAgICAgICAgICAgaWYgKCpzMiA9PSAnKycpIHsKKyAg ICAgICAgICAgICAgICAgICAgeCA9IFNYX0FERDsKKyAgICAgICAgICAgICAgICAgICAga3dmbGFn cyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJ1aWx0aW4gPSAxOworICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoKnMyID09ICctJykgeworICAgICAgICAgICAgICAgICAgICB4ID0gU1hfU1VC OworICAgICAgICAgICAgICAgICAgICBrd2ZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICAgICAg YnVpbHRpbiA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqczIgPT0gJyonKSB7Cisg ICAgICAgICAgICAgICAgICAgIHggPSBTWF9NVUw7CisgICAgICAgICAgICAgICAgICAgIGt3Zmxh Z3MgPSAwOworICAgICAgICAgICAgICAgICAgICBidWlsdGluID0gMTsKKyAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKCpzMiA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IFNYX0RJ VjsKKyAgICAgICAgICAgICAgICAgICAga3dmbGFncyA9IFNYRl9UV087CisgICAgICAgICAgICAg ICAgICAgIGJ1aWx0aW4gPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICgheCkgeyAgICAgICAgICAgICAgICAgICAvKiBOb25lIG9mIHRoZSBhYm92 ZSwgbG9vayBpdCB1cCAqLworICAgICAgICAgICAgICAgIHggPSB4bG9va3VwKHNleHBvcHMscFsx XSxuc2V4cG9wcywma3cpOworICAgICAgICAgICAgICAgIGlmICh4ID4gMCkgeworICAgICAgICAg ICAgICAgICAgICBrd2ZsYWdzID0gc2V4cG9wc1trd10uZmxnczsKKyAgICAgICAgICAgICAgICAg ICAgYnVpbHRpbiA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorICAgIC8qIElmIG5vbmUgb2YgdGhlIGFib3ZlLCBjaGVjayBidWlsdC1pbiBj b25zdGFudHMgKi8KKworICAgIGlmICh4ID09IC0xKSB7CisgICAgICAgIHggPSB4bG9va3VwKHNl eHBjb25zdHMscFsxXSxuc2V4cGNvbnN0cywma3cpOworICAgICAgICBpZiAoeCA+IDApIHsKKyAg ICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICBjYXNlIFNYQ19OSUw6CisgICAg ICAgICAgICAgICAgczIgPSAiIjsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAg ICAgICAgICAgIGNhc2UgU1hDX1BJOgorICAgICAgICAgICAgICAgIHMyID0gbWF0aF9waTsKKyAg ICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICAgIGNhc2UgU1hDX1Q6Cisg ICAgICAgICAgICAgICAgczIgPSAiMSI7CisgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChuID09IDEpIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vdCBhbiBleHByZXNzaW9uICovCisgICAgICAgIGlmIChidWls dGluKSB7ICAgICAgICAgICAgICAgICAgLyogQnVpbHQtaW4gb3BlcmFuZD8gKi8KKyAgICAgICAg ICAgIHN3aXRjaCAoeCkgewkJLyogT3BlcmF0b3JzIHdpdGggZGVmYXVsdCB2YWx1ZXMgKi8KKyAg ICAgICAgICAgICAgY2FzZSBTWF9FVkE6CisgICAgICAgICAgICAgICAgczIgPSAiIjsKKyAgICAg ICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICAgIGNhc2UgU1hfTVVMOiAgICAg ICAgICAgICAgLyogKCopICovCisgICAgICAgICAgICAgICAgczIgPSBzZXhwdmFsID8gc2V4cHZh bCA6ICIxIjsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICAgIGNh c2UgU1hfQU5EOiAgICAgICAgICAgICAgLyogKEFORCkgKi8KKyAgICAgICAgICAgICAgY2FzZSBT WF9CV0E6ICAgICAgICAgICAgICAvKiBCaXR3aXNlICgmKSAqLworICAgICAgICAgICAgICAgIHJl c3VsdCsrOworICAgICAgICAgICAgICBjYXNlIFNYX0xPUjogICAgICAgICAgICAgIC8qIChPUikg Ki8KKyAgICAgICAgICAgICAgY2FzZSBTWF9CV086ICAgICAgICAgICAgICAvKiBCaXR3aXNlICh8 KSAqLworICAgICAgICAgICAgICBjYXNlIFNYX0FERDogICAgICAgICAgICAgIC8qICgrKSAqLwor ICAgICAgICAgICAgICBjYXNlIFNYX1NVQjogICAgICAgICAgICAgIC8qICgtKSAqLworICAgICAg ICAgICAgICAgIHMyID0gcmVzdWx0ID8gIjEiIDogIjAiOworICAgICAgICAgICAgICAgIGdvdG8g eGRvc2V4cDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE5vdCBhIGJ1aWx0LWluIG9wZXJhbmQgKi8KKyAgICAgICAgICAgIGNoYXIg KiBwMTsKKyAgICAgICAgICAgIHAxID0gcFsxXTsKKyAgICAgICAgICAgIHdoaWxlICgqcDEgPT0g U1ApIHAxKys7CisgICAgICAgICAgICBpZiAoIWlzYWxwaGEoKnAxKSkgeworICAgICAgICAgICAg ICAgIGlmICh4eGZsb2F0KHAxLDApID4gMCkgeyAvKiBJcyBpdCBhIG51bWJlcj8gKi8KKyAgICAg ICAgICAgICAgICAgICAgczIgPSBwMTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpzMiA9 PSAnKycpIHMyKys7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqcDEgPT0gJygnKSB7IC8q IEFuIFMtRXhwcmVzc2lvbj8gKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAg ICAgczIgPSBkb3NleHAoczIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgczIgPSBkb3Nl eHAocDEpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgfSBlbHNlIGlmICh4IDwgMSkgeyAg ICAgICAgIC8qIElzIGl0IGEgdmFyaWFibGU/ICovCisgICAgICAgICAgICAgICAgaiA9IG14bG9v ayhtYWN0YWIscFsxXSxubWFjKTsgLyogTG9vayBpdCB1cCAqLworICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsc2V4cGRlYnVnKCJuPT0xIG14bG9vayIpLHBbMV0saik7CisgICAgICAgICAgICAg ICAgczIgPSAoaiA+IC0xKSA/IG1hY3RhYltqXS5tdmFsIDogIiI7CisgICAgICAgICAgICAgICAg aWYgKCFzMikgczIgPSAiIjsKKyAgICAgICAgICAgICAgICBpZiAoeHhmbG9hdChzMiwwKSA+IDAp ICAvKiBNYWNybyB2YWx1ZSBpcyBhIG51bWJlciAqLworICAgICAgICAgICAgICAgICAgZ290byB4 ZG9zZXhwOworICAgICAgICAgICAgICAgIGlmIChqID4gLTEpIHsgICAgICAgICAgIC8qIEl0J3Mg YSBtYWNybyAqLworICAgICAgICAgICAgICAgICAgICBteCA9IGo7CisgICAgICAgICAgICAgICAg ICAgIHggPSBqOyAgICAgICAgICAgICAgLyogd2hvc2UgZGVmaW5pdGlvbiBpcyBub3QgbnVtZXJp YyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKnMyID09ICcoJykgeyAgIC8qIElzIGl0IGFu IFMtRXhwcmVzc2lvbj8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGhhdmUgdG8g YWxsb2NhdGUgbWVtb3J5IG9uIHRoZSBzdGFjayAqLworICAgICAgICAgICAgICAgICAgICAgICAg LyogdG8gY2FsbCBvdXJzZWx2ZXMgcmVjdXJzaXZlbHkgb24gaXQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIG90aGVyd2lzZSB3ZSdsbCB3aXBlIG91dCB0aGUgbWFjcm8gZGVmaW5pdGlv biAqLworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqIHMzID0gTlVMTDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGludCBrID0gMDsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IHMzID0gczI7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnMzKyspIGsrKzsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHMzID0gKGNoYXIgKiltYWxsb2MoayArIDQpOworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHMzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RyY3B5KHMzLHMyKTsgICAvKiBTQUZFICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg czIgPSBkb3NleHAoczMpOyAvKiBFdmFsdWF0ZSBpdCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyZWUoczMpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJl IC0gXCIlc1wiXG4iLHMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g eGRvc2V4cDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo KnMyID09ICdcMDQ3JykgeworICAgICAgICAgICAgICAgICAgICAgICAgczIrKzsKKyNpZmRlZiBD T01NRU5UCisJCQkvKiBEdW1wcyBjb3JlIGlmIHBldHR5IG9wdGltaXphdGlvbiB3YXMgdGFrZW4g Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwWzFdKSxzMik7CisjZWxzZQor CQkJaWYgKCFub3NwbGl0ICYmIHBbMV0pIGZyZWUocFsxXSk7CisJCQlwWzFdID0gKGNoYXIgKilt YWxsb2MoKGludClzdHJsZW4oczIpICsgMSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgczIgPSBwWzFdOworCQkJaWYgKCFzMikgczIgPSAiIjsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgqczIgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHMyW21ha2VzdHJsZW4tMV0gPT0gJyknKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMyW21ha2VzdHJsZW4tMV0gPSBOVUw7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEx MCxzZXhwZGVidWcoIidBIiksczIsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhk b3NleHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWFjcm8r KzsgICAgICAgICAgICAvKiBOb3QgYW4gUy1FeHByZXNzaW9uICovCisgICAgICAgICAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgLyogTm90IGZvdW5kIGluIG1hY3JvIHRhYmxlICovCisg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05vdCBkZWZpbmVkIC0gXCIlc1wiXG4iLCBwWzFd KTsKKyAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICAgICAgICAgIGdv dG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9IGVsc2UgaWYgKHggPCAxICYmICFtYWNybykgeyAgICAgICAvKiBuID4gMSBhbmQgbm90 IGEgYnVpbHQtaW4gb3BlcmF0b3IgKi8KKyAgICAgICAgeCA9IG14bG9vayhtYWN0YWIscFsxXSxu bWFjKTsgICAvKiBTZWUgaWYgaXQncyBhIG1hY3JvICovCisgICAgICAgIGRlYnVnKEYxMTEsc2V4 cGRlYnVnKCJuIT0xIG14bG9vayIpLHBbMV0seCk7CisgICAgICAgIGlmICh4IDwgMCkgeworICAg ICAgICAgICAgcHJpbnRmKCI/SW52YWxpZCBvcGVyYW5kIC0gXCIlc1wiXG4iLHBbMV0pOworICAg ICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgIH0K KyAgICAgICAgbXggPSB4OworICAgICAgICBtYWNybysrOworICAgIH0KKyAgICBpZiAoYnVpbHRp bikgeyAgICAgICAgICAgICAgICAgICAgICAvKiBCdWlsdC1pbiBvcGVyYXRvci4uLiAqLworICAg ICAgICBpZiAoa3dmbGFncykgeworICAgICAgICAgICAgaW50IGZsZ3M7CisgICAgICAgICAgICBp ZiAoKGZsZ3MgPSAoa3dmbGFncyAmIChTWEZfT05FfFNYRl9UV08pKSkpIHsKKyAgICAgICAgICAg ICAgICBzd2l0Y2ggKGZsZ3MpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgKFNYRl9PTkV8U1hG X1RXTyk6CisgICAgICAgICAgICAgICAgICAgIGlmIChuIDwgMikgeworICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/VG9vIGZldyBvcGVyYW5kcyAtIFwiJXNcIlxuIixzKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHNleHByYysrOworICAgICAgICAgICAgICAgICAgICAgICAgZ290 byB4ZG9zZXhwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBTWEZfVFdPOgorICAgICAgICAgICAgICAgICAg ICBpZiAobiA8IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RvbyBmZXcg b3BlcmFuZHMgLSBcIiVzXCJcbiIscyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXhwcmMr KzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgU1hGX09ORToKKwkJICAgIGlmIChuICE9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiP1RvbyAlcyBvcGVyYW5kcyAtIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobiA+IDIpID8gIm1hbnkiIDogImZldyIsIHMpOworICAgICAgICAgICAg ICAgICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhkb3Nl eHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoa3dmbGFncyAmIFNYRl9QUkUpIHsgICAgLyogUHJlZGljYXRl PyAqLworCQlpZiAobiA8IDIpIHsKKwkJICAgIHByaW50ZigiP1RvbyBmZXcgb3BlcmFuZHMgLSBc IiVzXCJcbiIscyk7CisJCSAgICBzZXhwcmMrKzsKKwkJICAgIGdvdG8geGRvc2V4cDsKKwkJfQor ICAgICAgICAgICAgICAgIHBmbGFnID0gMTsKKyAgICAgICAgICAgICAgICBwcmVzdWx0ID0gMTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChrd2ZsYWdzICYgU1hGX0ZMTykgICAgICAv KiBPcGVyYXRvciByZXF1aXJlcyBmbG9hdGluZyBwb2ludCAqLworICAgICAgICAgICAgICBmcGZs YWcrKzsgICAgICAgICAgICAgICAgIC8qIEZvcmNlIGl0ICovCisKKwkgICAgaWYgKHggPT0gU1hf Uk9VKSB7CQkvKiBST1VORCBjYW4gaGF2ZSAxIG9yIDIgYXJndW1lbnRzICovCisJCWlmIChuIDwg MiB8fCBuID4gMykgeworCQkgICAgcHJpbnRmKCI/VG9vICVzIG9wZXJhbmRzIC0gXCIlc1wiXG4i LAorCQkJICAgKG4gPiAzKSA/ICJtYW55IiA6ICJmZXciLCBzKTsKKwkJICAgIHNleHByYysrOwor CQkgICAgZ290byB4ZG9zZXhwOworCQl9CisJICAgIH0KKwkgICAgaWYgKHggPT0gU1hfUk9VKSB7 CisJCS8qIEJ1dCB0aGV5IGFyZSBub3QgImN1bXVsYXRpdmUiIGxpa2Ugb3RoZXIgU0VYUCBhcmdz ICovCisJCS8qIFNvIHRoaXMgY2FzZSBpcyBoYW5kbGVkIHNwZWNpYWxseSAqLworCQljaGFyIGJ1 ZjFbMzJdLCBidWYyWzMyXTsKKwkJZmxvYXQgcjsKKwkJY2hhciAqIHMwLCAqIHMxOworCQljaGFy ICogcTAsICogcTE7CisKKwkJczAgPSBwWzJdOworCQlpZiAoIXMwKSBzMCA9ICIiOworCQlpZiAo ISpzMCkgczAgPSAiMCI7CisJCXEwID0gZG9zZXhwKHMwKTsKKwkJY2tzdHJuY3B5KGJ1ZjEscTAs MzIpOworCQlxMCA9IGJ1ZjE7CisKKwkJczEgPSBwWzNdOworCQlpZiAoIXMxKSBzMSA9ICIiOwor CQlpZiAoISpzMSkgczEgPSAiMCI7CisJCXExID0gZG9zZXhwKHMxKTsKKwkJaWYgKCFxMSkgcTEg PSAiIjsKKwkJaWYgKCEqcTEpIHExID0gIjAiOworCQlja3N0cm5jcHkoYnVmMixxMSwzMik7CisJ CXExID0gYnVmMjsKKworCQlyID0gY2tyb3VuZChhdG9mKHEwKSwoaW50KShhdG9mKHExKSksc3hy b3VuZGJ1ZiwzMSk7CisJCXMyID0gc3hyb3VuZGJ1ZjsKKwkJc2V4cHJjID0gMDsKKwkJZ290byB4 ZG9zZXhwOworCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPT0gU1hfU0VUIHx8IHgg PT0gU1hfTEVUIHx8IC8qIEFzc2lnbm1lbnQgaXMgc3BlY2lhbCAqLworICAgICAgICAgICAgeCA9 PSBTWF9JTkMgfHwgeCA9PSBTWF9ERUMpIHsKKyAgICAgICAgICAgIGludCByYzsKKyAgICAgICAg ICAgIGNoYXIgYywgKiBtLCAqIHMzOworICAgICAgICAgICAgaWYgKG4gPT0gMSkgeworICAgICAg ICAgICAgICAgIHMyID0gIiI7CisgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgczIgPSBOVUxMOworICAgICAgICAgICAgZm9yIChpID0gMTsg aSA8IG47IGkgKz0gMikgeyAvKiBMb29wIHRocnUgb3BlcmFuZCBwYWlycyAqLworICAgICAgICAg ICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICBzMyA9IHBbaSsxXTsKKyAgICAgICAgICAg ICAgICBjID0gKnMzOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVnKCJ0YXJn ZXQgcCIpLHMzLDApOworCisgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRhcmdldCBkb2Vz bid0IGhhdmUgbXVsdGlwbGUgd29yZHMgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKnMzKSB7 IGlmICgqczMgPCAnIScpIHsgcmMgPSAxOyBicmVhazsgfTsgczMrKzsgfQorICAgICAgICAgICAg ICAgIHMzID0gcFtpKzFdOworICAgICAgICAgICAgICAgIGlmIChyYykgeyAgICAgICAgICAgICAg IC8qIElmIGl0IGRvZXMgaXQgbXVzdCBoYXZlIGJlZW4gKi8KKyAgICAgICAgICAgICAgICAgICAg Y2hhciAqIHM0OyAgICAgICAgICAvKiBhbiBTRVhQIHNvIGV2YWx1YXRlIGl0ICovCisgICAgICAg ICAgICAgICAgICAgIHMzID0gZG9zZXhwKHMzKTsKKyAgICAgICAgICAgICAgICAgICAgczQgPSBz MzsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICB3aGls ZSAoKnM0KSB7IGlmICgqczQgPCAnIScpIHsgcmMgPSAxOyBicmVhazsgfTsgczQrKzsgfQorICAg ICAgICAgICAgICAgICAgICBpZiAocmMgPT0gMCkgbWFrZXN0cigmKHBbaSsxXSksczMpOworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIEFuZCB0aGF0IGl0J3Mgbm90IGEg bnVtYmVyLCBldGMuICovCisgICAgICAgICAgICAgICAgaWYgKHJjID4gMCB8fCBpc2RpZ2l0KGMp IHx8IGMgPT0gJygnKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ludmFsaWQgYXNz aWdubWVudCAtIFwiJXNcIlxuIixzKTsKKyAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7Cisg ICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKGlzYWxwaGEoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSB4bG9va3VwKHNleHBj b25zdHMsczMsbnNleHBjb25zdHMsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYyA+ IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Fzc2lnbm1lbnQgdG8gY29u c3RhbnQgLSBcIiVzXCJcbiIscyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsK KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIElmICsrIG9yIC0t LCBnZXQgY3VycmVudCB2YWx1ZSBvZiB2YXJpYWJsZSAqLworICAgICAgICAgICAgICAgIGlmICh4 ID09IFNYX0lOQyB8fCB4ID09IFNYX0RFQykgeworICAgICAgICAgICAgICAgICAgICBpbnQgb2sg PSAxOworICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMl07CisgICAgICAgICAgICAgICAg ICAgIGlmIChjID09IENNRFEpIHsgICAgLyogQSBiYWNrc2xhc2ggdmFyaWFibGUgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIGludCBuID0gMzI7CisgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICogcyA9IGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZlswXSA9IE5VTDsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh6enN0cmluZyhzMywmcywmbikgPCAwIHx8ICFidWZb MF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHMyID0gYnVmOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg IC8qIEEgbWFjcm8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoayA9IG14bG9vayht YWN0YWIsczMsbm1hYykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAwOwor ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBz MiA9IG1hY3RhYltrXS5tdmFsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05vdCBk ZWZpbmVkIC0gXCIlc1wiXG4iLHBbaSsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXhw cmMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIXMyKSBzMiA9ICIiOworICAgICAg ICAgICAgICAgICAgICBrID0geHhmbG9hdChzMiwwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg KGsgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgbnVtZXJpYyAt IFwiJXNcIlxuIixwW2krMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7Cisg ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpzMiA9PSAnKycpIHMyKys7CisgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCA9IGNrYXRvZnMoczIpOworICAgICAgICAgICAgICAgICAgICBm cHJlc3VsdCA9IGZsb2F0dmFsOworICAgICAgICAgICAgICAgICAgICBpZiAoayA+IDEgfHwgZnBy ZXN1bHQgIT0gcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgIGZwZmxhZysrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobiA8IGkrMikgeyAgICAgICAgICAvKiBW YXJpYWJsZSB3aXRoIG5vIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIHMyID0gIiI7Cisg ICAgICAgICAgICAgICAgICAgIGlmICh4ID09IFNYX1NFVCB8fCB4ID09IFNYX0xFVCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgZGVsbWFjKHBbaSsxXSwxKTsgLyogRGVsZXRlIHRoZSB2YXJp YWJsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzMiA9ICIxIjsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8q IFZhcmlhYmxlIHdpdGggdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgayA9IHh4ZmxvYXQo cFtpKzJdLDApOyAvKiBJcyBpdCBhIG51bWJlcj8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYg KGsgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzMiA9IHBbaSsyXTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHdoaWxlICgqczIgPT0gJysnKSBzMisrOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBkb3NleHAocFtpKzJd KTsgLyogSGF2ZSB2YWx1ZSwgZXZhbHVhdGUgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChzZXhwcmMpIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh czIpIHMyID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISpzMiAmJiAoeCA9PSBT WF9JTkMgfHwgeCA9PSBTWF9ERUMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBpZiAoeCA9PSBTWF9JTkMgfHwgeCA9PSBTWF9ERUMpIHsKKyAgICAgICAgICAgICAgICAg ICAgayA9IHh4ZmxvYXQoczIsMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChrIDwgMSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90IG51bWVyaWMgLSBcIiVzXCJcbiIs czIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKCpzMiA9PSAnKycpIHMyKys7CisgICAgICAgICAgICAgICAgICAgIGog PSBja2F0b2ZzKHMyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPiAxKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBmcGogPSBmbG9hdHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAg IGZwZmxhZysrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgZnBqID0gKENLRkxPQVQpajsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBpZiAoeCA9PSBTWF9JTkMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHJlc3VsdCArPSBqOworICAgICAgICAgICAgICAgICAgICAgICAgZnByZXN1bHQgKz0gZnBqOwor ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gU1hfREVDKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICByZXN1bHQgLT0gajsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmVz dWx0IC09IGZwajsKKyAgICAgICAgICAgICAgICAgICAgfQorI2lmZGVmIEZORkxPQVQKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBmcHJlc3VsdCkgZnBmbGFnKys7CisjZW5kaWYJ LyogRk5GTE9BVCAqLworICAgICAgICAgICAgICAgICAgICBzMiA9IChmcGZsYWcgJiYgIXNleHB0 cnVuYykgPworCQkJZnBmb3JtYXQoZnByZXN1bHQsMCwwKSA6IGNrZnN0b2EocmVzdWx0KTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHggPT0gU1hfTEVUICYmIGNtZGx2 bCA+IDApIC8qIExFVCBtYWtlcyB2YXIgbG9jYWwgKi8KKyAgICAgICAgICAgICAgICAgIGFkZGxv Y2FsKHBbaSsxXSk7CisgICAgICAgICAgICAgICAgaWYgKChyYyA9IGFkZG1hYyhwW2krMV0sczIp KSA8IDApIHsgLyogQWRkIHRoZSB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KHJjKSB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzogbSA9ICJBcnJheSBub3QgZGVj bGFyZWQiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0yOiBtID0gIlN1YnNj cmlwdCBvdXQgb2YgcmFuZ2UiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIC00 OiBtID0gIk91dCBvZiBtZW1vcnkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZh dWx0OiBtID0gIkVycm9yIGNyZWF0aW5nIHZhcmlhYmxlIjsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIj8lcyAtIFwiJXNcIlxuIixtLHMpOworICAg ICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9z ZXhwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoczIpIHJlc3VsdCA9 IGNrYXRvZnMoczIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byB4ZG9zZXhwOwor ICAgICAgICB9IGVsc2UgaWYgKHggPT0gU1hfSUZDKSB7ICAgICAgICAgICAgICAgLyogQ29uZGl0 aW9uYWwgZXhwcmVzc2lvbiAqLworICAgICAgICAgICAgaW50IHRydWUgPSAwOworICAgICAgICAg ICAgaWYgKG4gPiA0KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgb3BlcmFu ZHM6IElGIC0gXCIlc1wiXG4iLHMpOworICAgICAgICAgICAgICAgIHNleHByYysrOworICAgICAg ICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMyID0g ZG9zZXhwKHBbMl0pOworICAgICAgICAgICAgaWYgKHNleHByYykgZ290byB4ZG9zZXhwOworICAg ICAgICAgICAgaWYgKHMyKSB7CisgICAgICAgICAgICAgICAgaiA9IGNrYXRvZnMoczIpOworICAg ICAgICAgICAgICAgIGlmICh4eGZsb2F0KHMyLDApID09IDIpIHsKKyAgICAgICAgICAgICAgICAg ICAgZnBmbGFnKys7CisgICAgICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpcmVz dWx0OworICAgICAgICAgICAgICAgICAgICBmcGogPSBmbG9hdHZhbDsKKyAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcGogPSBhdG9mKHMyKTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJ1ZSA9ICgoZnBqICE9IDAuMCkgPyAxIDogMCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRydWUgJiYgbiA8IDQpIHsKKyAgICAg ICAgICAgICAgICBzMiA9IE5VTEw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIHMyID0gZG9zZXhwKHRydWUgPyBwWzNdIDogcFs0XSk7CisgICAgICAgICAgICAgICAgaWYg KHNleHByYykgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgICAgIGogPSBzMiA/IGNrYXRvZnMo czIpIDogMDsKKyAgICAgICAgICAgICAgICBpZiAoeHhmbG9hdChzMiwwKSA9PSAyKSB7CisgICAg ICAgICAgICAgICAgICAgIGZwZmxhZysrOworICAgICAgICAgICAgICAgICAgICBmcHJlc3VsdCA9 IChDS0ZMT0FUKXJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgZnBqID0gZmxvYXR2YWw7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnBqID0gczIgPyBh dG9mKHMyKSA6IDAuMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnByZXN1 bHQgPSBmcGo7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gajsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgfSBlbHNlIGlmICh4ID09IFNYX1FVTykg eworI2lmbmRlZiBDT01NRU5UCisgICAgICAgICAgICBpbnQgeHg7CisgICAgICAgICAgICB4eCA9 IHN0cmxlbihwWzJdKTsKKyAgICAgICAgICAgIHBbM10gPSAoY2hhciAqKW1hbGxvYyh4eCs0KTsK KyAgICAgICAgICAgIHMyID0gcFszXTsKKyAgICAgICAgICAgIGNrbWFrbXNnKHBbM10seHgrNCwi JygiLHBbMl0sIikiLE5VTEwpOworICAgICAgICAgICAgbisrOworI2Vsc2UKKyAgICAgICAgICAg IHMyID0gcFsyXTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBnb3RvIHhkb3Nl eHA7CisgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBTWF9TVFIpIHsKKyAgICAgICAgICAgIGludCB4 eDsKKyAgICAgICAgICAgIHMyID0gZG9zZXhwKHBbMl0pOworICAgICAgICAgICAgaWYgKHNleHBy YykgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgeHggPSBzdHJsZW4oczIpOworICAgICAgICAg ICAgcFszXSA9IChjaGFyICopbWFsbG9jKHh4KzQpOworICAgICAgICAgICAgY2ttYWttc2cocFsz XSx4eCs0LCInKCIsczIsIikiLE5VTEwpOworICAgICAgICAgICAgczIgPSBwWzNdOworICAgICAg ICAgICAgbisrOworICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICB9CisgICAgfQor ICAgIC8qIEFyaXRobWV0aWMgb3BlcmF0b3Igb3IgbWFjcm8gLSBMb29wIHRocnUgb3BlcmFuZHMg Ki8KKworICAgIHF1aXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3J0LWNp cmN1aXQgZmxhZy4gKi8KKyAgICBpZiAobWFjcm8gJiYgbiA+IDEpIHsgICAgICAgICAgICAgICAv KiBJZiBvcGVyYXRvciBpcyBhIG1hY3JvICovCisgICAgICAgIGlmICghbGluZSkgeyAgICAgICAg ICAgICAgICAgICAgLyogYWxsb2NhdGUgbG9jYWwgYnVmZmVyIGZvciAqLworICAgICAgICAgICAg bGluZSA9IChjaGFyICopbWFsbG9jKFNYTUxFTik7IC8qIHRoZSBldmFsdWF0ZWQgYXJndW1lbnQg bGlzdC4gKi8KKyAgICAgICAgICAgIGlmICghbGluZSkgeworICAgICAgICAgICAgICAgIHByaW50 ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgLSBcIiVzXCJcbiIscFsxXSk7CisgICAgICAg ICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgbGluZWxlbiA9IFNYTUxFTjsKKyAgICAgICAgICAgIC8qIGRl YnVnKEYxMDEsImRvc2V4cCBtYWNybyBhcmcgYnVmZmVyIiwiIixsaW5lbGVuKTsgKi8KKyAgICAg ICAgfQorICAgICAgICBsaW5lcG9zID0gMDsKKyAgICAgICAgbGluZVtsaW5lcG9zXSA9IE5VTDsK KyAgICB9CisgICAgZm9yIChpID0gMTsgKChpIDwgbikgJiYgIXNleHByYyAmJiAhcXVpdCk7IGkr KykgeyAvKiBMb29wIHRocnUgb3BlcmFuZHMgKi8KKyAgICAgICAgcXVvdGUgPSAwOworICAgICAg ICBzMiA9IHBbaSsxXTsgICAgICAgICAgICAgICAgICAgIC8qIEdldCBvcGVyYW5kICovCisgICAg ICAgIGlmICghczIpIHMyID0gIiI7CisKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmICgqczIg PT0gJ1wwNDcnKSB7ICAgICAgICAgICAgLyogSXMgaXQgcXVvdGVkPyAqLworICAgICAgICAgICAg ZGVidWcoRjExMCxzZXhwZGVidWcoIidCIiksczIsMCk7CisgICAgICAgICAgICBzMisrOyAgICAg ICAgICAgICAgICAgICAgICAgLyogU3BhY2UgcGFzdCB0aGUgcXVvdGUgKi8KKyAgICAgICAgICAg IHF1b3RlKys7CisgICAgICAgICAgICBpZiAoKnMyID09ICcoJykgeyAgICAgICAgICAgLyogUXVv dGVkIFMtRXhwcmVzc2lvbj8gKi8KKyAgICAgICAgICAgICAgICBjaGFyIGM0LCAqIHM0ID0gczIr MTsgICAvKiBTdHJpcCBvdXRlciBwYXJlbnMgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKGM0 ID0gKnM0KyspKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjNCA9PSAnKScgJiYgISpzNCkg eworICAgICAgICAgICAgICAgICAgICAgICAgczIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAg ICooczQtMSkgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVnKCInQyIpLHMyLDApOworCisgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IHF1b3RlZCAqLworICAgICAgICAgICAgczIg PSBkb3NleHAocFtpKzFdKTsgICAgICAgIC8qIGV2YWx1YXRlIGl0ICovCisgICAgICAgICAgICBp ZiAoc2V4cHJjKSBnb3RvIHhkb3NleHA7CisgICAgICAgICAgICBpZiAoIXMyKSBzMiA9ICIiOwor ICAgICAgICAgICAgaWYgKCFtYWNybyAmJiB4ID09IFNYX0VWQSkKKyAgICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGlmICgqczIgIT0gJ1wwNDcnKSB7ICAg ICAgICAgICAgLyogSXMgaXQgcXVvdGVkPyAqLworICAgICAgICAgICAgczIgPSBkb3NleHAocFtp KzFdKTsgICAgICAgIC8qIE5vLCBldmFsdWF0ZSBpdCAqLworICAgICAgICAgICAgaWYgKHNleHBy YykgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgaWYgKCFzMikgczIgPSAiIjsKKyAgICAgICAg ICAgIGlmICghbWFjcm8gJiYgeCA9PSBTWF9FVkEpCisgICAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICB9CisgICAgICAgIGlmICgqczIgPT0gJ1wwNDcnKSB7ICAgICAgICAgICAgLyogSXMg cmVzdWx0IHF1b3RlZD8gKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsc2V4cGRlYnVnKCInQiIp LHMyLDApOworICAgICAgICAgICAgczIrKzsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwYWNl IHBhc3QgdGhlIHF1b3RlICovCisgICAgICAgICAgICBxdW90ZSsrOworICAgICAgICAgICAgaWYg KCpzMiA9PSAnKCcpIHsgICAgICAgICAgIC8qIFF1b3RlZCBTLUV4cHJlc3Npb24/ICovCisgICAg ICAgICAgICAgICAgY2hhciBjNCwgKiBzNCA9IHMyKzE7ICAgLyogU3RyaXAgb3V0ZXIgcGFyZW5z ICovCisgICAgICAgICAgICAgICAgd2hpbGUgKChjNCA9ICpzNCsrKSkgeworICAgICAgICAgICAg ICAgICAgICBpZiAoYzQgPT0gJyknICYmICEqczQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHMyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAqKHM0LTEpID0gTlVMOworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLHNleHBkZWJ1Zygi J0MiKSxzMiwwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYg KG1hY3JvKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLHNleHBkZWJ1ZygibWFjcm8gYXJnIiks czIsaSk7CisgICAgICAgICAgICBpZiAoISpzMikgcXVvdGUrKzsKKyAgICAgICAgICAgIGlmICgh cXVvdGUpIHsKKyAgICAgICAgICAgICAgICByZWdpc3RlciBjaGFyIGM0LCAqIHM0ID0gczI7Cisg ICAgICAgICAgICAgICAgd2hpbGUgKChjNCA9ICpzNCsrKSkgaWYgKGM0ID09IFNQKSB7IHF1b3Rl Kys7IGJyZWFrOyB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocXVvdGUpIGxpbmVb bGluZXBvcysrXSA9ICd7JzsKKyAgICAgICAgICAgIHdoaWxlICgobGluZVtsaW5lcG9zKytdID0g KnMyKyspKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVwb3MgPiBsaW5lbGVuIC0gMykgewor ICAgICAgICAgICAgICAgICAgICBjaGFyICogdG1wID0gTlVMTDsKKyAgICAgICAgICAgICAgICAg ICAgbGluZVtsaW5lcG9zXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgbGluZWxlbiArPSBT WE1MRU47CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IChjaGFyICopIG1hbGxvYyhsaW5lbGVu KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0bXApIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiP01lbW9yeSByZS1hbGxvY2F0aW9uIGZhaWx1cmUgLSBcIiVzLi4uXCJcbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsK KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdHJjcHkodG1wLGxp bmUpOworICAgICAgICAgICAgICAgICAgICBmcmVlKGxpbmUpOworICAgICAgICAgICAgICAgICAg ICBsaW5lID0gdG1wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGxpbmVwb3MtLTsgICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgTlVMICovCisg ICAgICAgICAgICBpZiAocXVvdGUpCisgICAgICAgICAgICAgIGxpbmVbbGluZXBvcysrXSA9ICd9 JzsgICAgLyogRW5kIHF1b3RlIGdyb3VwICovCisgICAgICAgICAgICBsaW5lW2xpbmVwb3MrK10g PSBTUDsgICAgICAgLyogYWRkIGEgc3BhY2UgKi8KKyAgICAgICAgICAgIGxpbmVbbGluZXBvc10g PSBOVUw7ICAgICAgICAvKiBhbmQgYSBOVUwgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICB9CisgICAgICAgIGlmICghcXVvdGUpIHsgICAgICAgICAgICAgICAgICAgLyogQnVpbHQt aW4gb3BlcmF0b3IuLi4gKi8KKyAgICAgICAgICAgIHMyID0gZG9zZXhwKHMyKTsKKyAgICAgICAg ICAgIGlmIChzZXhwcmMpIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgIGlmICghczIpIHMyID0g IiI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPT0gU1hfRVZBKQorICAgICAgICAgIGNvbnRp bnVlOworCisgICAgICAgIGlmICghKnMyKSB7CisgICAgICAgICAgICAvKiBBbiBlbXB0eSB2YWx1 ZSBpcyBub3QgYSBsZWdhbCBudW1iZXIgKi8KKyAgICAgICAgICAgIC8qIGJ1dCBpdCBpcyBhIGxl Z2FsIHRydXRoIHZhbHVlICovCisgICAgICAgICAgICBpZiAoeCAhPSBTWF9BTkQgJiYgeCAhPSBT WF9MT1IgJiYgeCAhPSBTWF9OT1QpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgTnVt ZXJpYyAtIFwiJXNcIlxuIixwW2krMV0pOworICAgICAgICAgICAgICAgIHNleHByYysrOworICAg ICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGog PSAwOworICAgICAgICAgICAgZnBqID0gMC4wOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgaiA9IGNrYXRvZnMoczIpOworICAgICAgICAgICAgLyogU3dpdGNoIHRvIGZsb2F0aW5nLXBv aW50IHVwb24gZW5jb3VudGVyaW5nIGFueSBmLnAuIGFyZyAqLworICAgICAgICAgICAgLyogT1Iu Li4gaWYgaW50ZWdlciBpcyB0b28gYmlnICovCisgICAgICAgICAgICBpZiAoIWZwZmxhZykgaWYg KHh4ZmxvYXQoczIsMCkgPT0gMikKKyAgICAgICAgICAgICAgZnBmbGFnKys7CisgICAgICAgICAg ICBmcGogPSBhdG9mKHMyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSAxKSB7ICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWwgcmVzdWx0IGlzIGZpcnN0IG9wZXJhbmQgKi8KKyAgICAg ICAgICAgIHJlc3VsdCA9IChuID09IDIgJiYgeCA9PSBTWF9TVUIpID8gMC1qIDogajsKKyAgICAg ICAgICAgIGZwcmVzdWx0ID0gKG4gPT0gMiAmJiB4ID09IFNYX1NVQikgPyAtZnBqIDogZnBqOwor CSAgICBpZiAoKHggPT0gU1hfQU5EICYmIHJlc3VsdCA9PSAwKSB8fAkvKiBTaG9ydCBjaXJjdWl0 ICovCisJCSh4ID09IFNYX0xPUiAmJiByZXN1bHQgIT0gMCkpCisJICAgICAgcXVpdCsrOworICAg ICAgICAgICAgaWYgKCEoa3dmbGFncyAmIFNYRl9PTkUpKQkvKiBDb21tYW5kIHcvc2luZ2xlIGFy ZyAqLworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeCA9 PSBTWF9NT0QgfHwgeCA9PSBTWF9ESVYpIHsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAg ICAgICAgICAgICBmcGZsYWcrKzsKKyAgICAgICAgICAgIGlmICghZnBqKSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/RGl2aWRlIGJ5IHplcm8gLSBcIiVzXCJcbiIsY21kYnVmKTsKKyAgICAg ICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoICh4KSB7CQkJLyogQWNjdW11bGF0 ZSByZXN1bHQgKi8KKworICAgICAgICAgIGNhc2UgU1hfRVZBOiAgICAgICAgICAgICAgICAgIC8q IEVWQUwgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IGo7CisgICAgICAgICAgICBmcHJlc3VsdCA9 IGZwajsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9BREQ6ICAgICAg ICAgICAgICAgICAgLyogKyAqLworICAgICAgICAgICAgcmVzdWx0ICs9IGo7CisgICAgICAgICAg ICBmcHJlc3VsdCArPSBmcGo7CisjaWZkZWYgRk5GTE9BVAorICAgICAgICAgICAgaWYgKHJlc3Vs dCAhPSBmcHJlc3VsdCkKKyAgICAgICAgICAgICAgZnBmbGFnKys7CisjZW5kaWYJLyogRk5GTE9B VCAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX1NVQjogICAgICAg ICAgICAgICAgICAvKiAtICovCisgICAgICAgICAgICByZXN1bHQgLT0gajsKKyAgICAgICAgICAg IGZwcmVzdWx0IC09IGZwajsKKyNpZmRlZiBGTkZMT0FUCisgICAgICAgICAgICBpZiAocmVzdWx0 ICE9IGZwcmVzdWx0KQorICAgICAgICAgICAgICBmcGZsYWcrKzsKKyNlbmRpZgkvKiBGTkZMT0FU ICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1hfTVVMOiAgICAgICAg ICAgICAgICAgIC8qICogKi8KKyAgICAgICAgICAgIHJlc3VsdCAqPSBqOworICAgICAgICAgICAg ZnByZXN1bHQgKj0gZnBqOworI2lmZGVmIEZORkxPQVQKKyAgICAgICAgICAgIGlmIChyZXN1bHQg IT0gZnByZXN1bHQpCisgICAgICAgICAgICAgIGZwZmxhZysrOworI2VuZGlmCS8qIEZORkxPQVQg Ki8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9BTkQ6ICAgICAgICAg ICAgICAgICAgLyogQU5EICovCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgajsKKyAg ICAgICAgICAgIGlmICghcmVzdWx0KSBxdWl0Kys7CisgICAgICAgICAgICBmcHJlc3VsdCA9IGZw cmVzdWx0ICYmIGZwajsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9M T1I6ICAgICAgICAgICAgICAgICAgLyogT1IgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3Vs dCB8fCBqOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHF1aXQrKzsKKyAgICAgICAgICAgIGZw cmVzdWx0ID0gZnByZXN1bHQgfHwgZnBqOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg ICBjYXNlIFNYX01PRDogICAgICAgICAgICAgICAgICAvKiBNb2R1bHVzICovCisgICAgICAgICAg ICByZXN1bHQgPSByZXN1bHQgJSBqOworI2lmZGVmIEZORkxPQVQKKyAgICAgICAgICAgIGZwcmVz dWx0ID0gKENLRkxPQVQpZm1vZChmcHJlc3VsdCxmcGopOworICAgICAgICAgICAgaWYgKHJlc3Vs dCAhPSBmcHJlc3VsdCkKKyAgICAgICAgICAgICAgZnBmbGFnKys7CisjZWxzZQorICAgICAgICAg ICAgZnByZXN1bHQgPSByZXN1bHQ7CisjZW5kaWYgLyogRk5GTE9BVCAqLworICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX0RJVjogICAgICAgICAgICAgICAgICAvKiAvICov CisJICAgIGlmIChqKSB7CisJCXJlc3VsdCAvPSBqOworCQlmcHJlc3VsdCAvPSBmcGo7CisjaWZk ZWYgRk5GTE9BVAorCQlpZiAocmVzdWx0ICE9IGZwcmVzdWx0KQorCQkgIGZwZmxhZysrOworI2Vu ZGlmCS8qIEZORkxPQVQgKi8KKwkgICAgfSBlbHNlIHsKKwkJZnByZXN1bHQgLz0gZnBqOworCQly ZXN1bHQgPSBmcGo7CisjaWZkZWYgRk5GTE9BVAorCQkgIGZwZmxhZysrOworI2VuZGlmCS8qIEZO RkxPQVQgKi8KKwkgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNY X0FFUTogICAgICAgICAgICAgICAgICAvKiBUZXN0IGZvciBlcXVhbGl0eSAqLworICAgICAgICAg ICAgaWYgKGZwZmxhZykgeworICAgICAgICAgICAgICAgIGlmIChmcHJlc3VsdCAhPSBmcGopCisg ICAgICAgICAgICAgICAgICBwcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBqKQorICAgICAgICAgICAgICAgICAgcHJlc3VsdCA9 IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug U1hfTkVROiAgICAgICAgICAgICAgICAgIC8qIFRlc3QgZm9yIGluZXFhbGl0eSAqLworICAgICAg ICAgICAgaWYgKGZwZmxhZykgeworICAgICAgICAgICAgICAgIGlmIChmcHJlc3VsdCA9PSBmcGop CisgICAgICAgICAgICAgICAgICBwcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBqKQorICAgICAgICAgICAgICAgICAgcHJlc3Vs dCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNh c2UgU1hfQUxFOiAgICAgICAgICAgICAgICAgIC8qIEFyaXRobWV0aWMgbGVzcy1lcXVhbCAqLwor ICAgICAgICAgICAgaWYgKGZwZmxhZykgeworICAgICAgICAgICAgICAgIGlmIChmcGogPCBmcHJl c3VsdCkKKyAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOworICAgICAgICAgICAgICAgIGZw cmVzdWx0ID0gZnBqOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo aiA8IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOworICAgICAgICAgICAg ICAgIHJlc3VsdCA9IGo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAg ICAgICAgIGNhc2UgU1hfQUxUOiAgICAgICAgICAgICAgICAgIC8qIEFyaXRobWV0aWMgbGVzcy10 aGFuICovCisgICAgICAgICAgICBpZiAoZnBmbGFnKSB7CisgICAgICAgICAgICAgICAgaWYgKGZw aiA8PSBmcHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgIHByZXN1bHQgPSAwOworICAgICAgICAg ICAgICAgIGZwcmVzdWx0ID0gZnBqOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBpZiAoaiA8PSByZXN1bHQpCisgICAgICAgICAgICAgICAgICBwcmVzdWx0ID0gMDsKKyAg ICAgICAgICAgICAgICByZXN1bHQgPSBqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgICBjYXNlIFNYX0FHVDogICAgICAgICAgICAgICAgICAvKiBBcml0aG1l dGljIGdyZWF0ZXItdGhhbiAqLworICAgICAgICAgICAgaWYgKGZwZmxhZykgeworICAgICAgICAg ICAgICAgIGlmIChmcGogPj0gZnByZXN1bHQpCisgICAgICAgICAgICAgICAgICBwcmVzdWx0ID0g MDsKKyAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgaWYgKGogPj0gcmVzdWx0KQorICAgICAgICAgICAgICAgICAgcHJl c3VsdCA9IDA7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gajsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9BR0U6ICAgICAgICAgICAgICAg ICAgLyogQXJpdGhtZXRpYyBncmVhdGVyLWVxdWFsICovCisgICAgICAgICAgICBpZiAoZnBmbGFn KSB7CisgICAgICAgICAgICAgICAgaWYgKGZwaiA+IGZwcmVzdWx0KQorICAgICAgICAgICAgICAg ICAgcHJlc3VsdCA9IDA7CisgICAgICAgICAgICAgICAgZnByZXN1bHQgPSBmcGo7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChqID4gcmVzdWx0KQorICAgICAgICAg ICAgICAgICAgcHJlc3VsdCA9IDA7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gajsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9QT1c6ICAg ICAgICAgICAgICAgICAgLyogUmFpc2UgdG8gcG93ZXIgKi8KKyNpZmRlZiBGTkZMT0FUCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgZG91YmxlIGR1bW15OworICAgICAgICAgICAgICAg IGlmICghZnBqKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmVzdWx0ID0gMS4wOworICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoKCFmcHJlc3VsdCAmJiBmcGogPD0gMC4wKSkgeworICAgICAg ICAgICAgICAgICAgICBwcmludGYoIj9EaXZpZGUgYnkgemVybyAtIFwiJXNcIlxuIixjbWRidWYp OworICAgICAgICAgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICAgICAgZ290 byB4ZG9zZXhwOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnByZXN1bHQgPCAwLjAgJiYg bW9kZihmcGosJmR1bW15KSkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Eb21haW4g ZXJyb3IgLSBcIiVzXCJcbiIsY21kYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgc2V4cHJjKys7 CisgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvc2V4cDsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKXBvdyhmcHJlc3Vs dCxmcGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBGTkZM T0FUICovCisgICAgICAgICAgICBpZiAoaiA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0 ID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ0tfT0ZGX1Qgeiwg c2lnbiA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGogPCAwKSB7CisgICAgICAgICAgICAgICAg ICAgIGlmIChyZXN1bHQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/ RGl2aWRlIGJ5IHplcm8gLSBcIiVzXCJcbiIsY21kYnVmKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHNleHByYysrOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGogPSAwIC0gajsKKyAgICAg ICAgICAgICAgICAgICAgc2lnbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB6ID0gcmVzdWx0OworICAgICAgICAgICAgICAgIHdoaWxlICgtLWogPiAwKQorICAgICAgICAg ICAgICAgICAgcmVzdWx0ICo9IHo7CisgICAgICAgICAgICAgICAgaWYgKHNpZ24pCisgICAgICAg ICAgICAgICAgICByZXN1bHQgPSAxIC8gcmVzdWx0OworICAgICAgICAgICAgfQorI2lmZGVmIEZO RkxPQVQKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gZnByZXN1bHQpCisgICAgICAgICAgICAg IGZwZmxhZysrOworI2VuZGlmCS8qIEZORkxPQVQgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisj aWZkZWYgRk5GTE9BVAorICAgICAgICAgIGNhc2UgU1hfRVhQOiAgICAgICAgICAgICAgICAgIC8q IGUgdG8gdGhlIGdpdmVuIHBvd2VyICovCisgICAgICAgICAgICBmcHJlc3VsdCA9IChDS0ZMT0FU KSBleHAoZnBqKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9MR046 ICAgICAgICAgICAgICAgICAgLyogTmF0dXJhbCBsb2cgKi8KKyAgICAgICAgICBjYXNlIFNYX0xH WDogICAgICAgICAgICAgICAgICAvKiBMb2cgYmFzZSAxMCAqLworICAgICAgICAgIGNhc2UgU1hf U1FSOiAgICAgICAgICAgICAgICAgIC8qIFNxdWFyZSByb290ICovCisgICAgICAgICAgICBpZiAo ZnBqIDwgMC4wKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/QXJndW1lbnQgb3V0IG9mIHJh bmdlIC0gXCIlc1wiXG4iLGNtZGJ1Zik7CisgICAgICAgICAgICAgICAgc2V4cHJjKys7CisgICAg ICAgICAgICAgICAgZ290byB4ZG9zZXhwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KHggPT0gU1hfU1FSKQorICAgICAgICAgICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKSBzcXJ0KGZw aik7CisgICAgICAgICAgICBlbHNlIGlmICh4ID09IFNYX0xHTikKKyAgICAgICAgICAgICAgZnBy ZXN1bHQgPSAoQ0tGTE9BVCkgbG9nKGZwaik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIGxvZzEwKGZwaik7CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICAgIGNhc2UgU1hfU0lOOiAgICAgICAgICAgICAgICAgIC8qIHNpbmUgKi8KKyAg ICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIHNpbihmcGopOworICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgICBjYXNlIFNYX0NPUzogICAgICAgICAgICAgICAgICAvKiBjb3NpbmUg Ki8KKyAgICAgICAgICAgIGZwcmVzdWx0ID0gKENLRkxPQVQpIGNvcyhmcGopOworICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX1RBTjogICAgICAgICAgICAgICAgICAvKiB0 YW5nZW50ICovCisgICAgICAgICAgICBmcHJlc3VsdCA9IChDS0ZMT0FUKSB0YW4oZnBqKTsKKyAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEZORkxPQVQgKi8KKworICAgICAgICAgIGNhc2Ug U1hfQ0VJOiAgICAgICAgICAgICAgICAgIC8qIENlaWxpbmcgKi8KKyAgICAgICAgICAgIGlmIChq ICE9IGZwaikKKyAgICAgICAgICAgICAgaWYgKGZwaiA+IDAuMCkKKyAgICAgICAgICAgICAgICBm cGogKz0gMS4wOworICAgICAgICAgICAgZnByZXN1bHQgPSBmcGo7CisgICAgICAgICAgICBmcGZs YWcgPSAxOworICAgICAgICAgICAgdHJ1bmNhdGUgPSAxOworICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgICBjYXNlIFNYX0ZMUjogICAgICAgICAgICAgICAgICAvKiBGbG9vciAqLworICAg ICAgICAgICAgaWYgKGogIT0gZnBqKQorICAgICAgICAgICAgICBpZiAoZnBqIDwgMC4wKQorICAg ICAgICAgICAgICAgIGZwaiAtPSAxLjA7CisgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKKyAg ICAgICAgICAgIGZwZmxhZyA9IDE7CisgICAgICAgICAgICB0cnVuY2F0ZSA9IDE7CisgICAgICAg ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU1hfVFJVOiAgICAgICAgICAgICAgICAgIC8q IFRydW5jYXRlICovCisgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKKyAgICAgICAgICAgIGZw ZmxhZyA9IDE7CisgICAgICAgICAgICB0cnVuY2F0ZSA9IDE7CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICAgIGNhc2UgU1hfQUJTOiAgICAgICAgICAgICAgICAgIC8qIEFic29sdXRlIHZh bHVlICovCisgICAgICAgICAgICByZXN1bHQgPSAoaiA8IDApID8gMCAtIGogOiBqOworI2lmZGVm IEZORkxPQVQKKyAgICAgICAgICAgIGZwcmVzdWx0ID0gKGZwaiA8IDAuMCkgPyAwLjAgLSBmcGog OiBmcGo7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IGZwcmVzdWx0KQorICAgICAgICAgICAg ICBmcGZsYWcrKzsKKyNlbmRpZgkvKiBGTkZMT0FUICovCisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICAgIGNhc2UgU1hfTUFYOiAgICAgICAgICAgICAgICAgIC8qIE1heCAqLworICAgICAg ICAgICAgaWYgKGogIT0gZnBqKQorICAgICAgICAgICAgICBmcGZsYWcrKzsKKyAgICAgICAgICAg IGlmIChmcGZsYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnBqID4gZnByZXN1bHQpCisgICAg ICAgICAgICAgICAgICBmcHJlc3VsdCA9IGZwajsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg ICAgICAgICBpZiAoaiA+IHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBqOworICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX01JTjogICAgICAgICAgICAgICAg ICAvKiBNaW4gKi8KKyAgICAgICAgICAgIGlmIChqICE9IGZwaikKKyAgICAgICAgICAgICAgZnBm bGFnKys7CisgICAgICAgICAgICBpZiAoZnBmbGFnKSB7CisgICAgICAgICAgICAgICAgaWYgKGZw aiA8IGZwcmVzdWx0KQorICAgICAgICAgICAgICAgICAgZnByZXN1bHQgPSBmcGo7CisgICAgICAg ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgaWYgKGogPCByZXN1bHQpCisgICAgICAgICAgICAg ICAgcmVzdWx0ID0gajsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9G TE86ICAgICAgICAgICAgICAgICAgLyogRmxvYXQgKi8KKyAgICAgICAgICAgIGZwZmxhZysrOwor ICAgICAgICAgICAgZnByZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAgICBmcGogPSBqOworICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX05PVDogICAgICAgICAgICAgICAg ICAvKiBOT1QgKHJldmVyc2UgdHJ1dGggdmFsdWUpICovCisgICAgICAgICAgICBmcGZsYWcgPSAw OworICAgICAgICAgICAgbm90Kys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNh c2UgU1hfQldBOiAgICAgICAgICAgICAgICAgIC8qIEJpdHdpc2UgQU5EICovCisgICAgICAgICAg ICBmcGZsYWcgPSAwOworICAgICAgICAgICAgcmVzdWx0ICY9IGo7CisgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgIGNhc2UgU1hfQldPOiAgICAgICAgICAgICAgICAgIC8qIEJpdHdpc2Ug T1IgKi8KKyAgICAgICAgICAgIGZwZmxhZyA9IDA7CisgICAgICAgICAgICByZXN1bHQgfD0gajsK KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTWF9CV1g6ICAgICAgICAgICAg ICAgICAgLyogQml0d2lzZSBYT1IgKi8KKyAgICAgICAgICBjYXNlIFNYX1hPUjogICAgICAgICAg ICAgICAgICAvKiBMb2dpY2FsIFhPUiAqLworICAgICAgICAgICAgaWYgKG4gPiAzKSB7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCI/VG9vIG1hbnkgb3BlcmFuZHMgLSBcIiVzXCJcbiIscyk7Cisg ICAgICAgICAgICAgICAgc2V4cHJjKys7CisgICAgICAgICAgICAgICAgZ290byB4ZG9zZXhwOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZnBmbGFnID0gMDsKKyAgICAgICAgICAgIGlmICh4 ID09IFNYX0JXWCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCBePSBqOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0ICYmICFqKSB8fCAoIXJl c3VsdCAmJiBqKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSByZXN1bHQgPSAxOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNYX0JXTjog ICAgICAgICAgICAgICAgICAvKiBCaXR3aXNlIE5vdCAqLworICAgICAgICAgICAgZnBmbGFnID0g MDsKKyAgICAgICAgICAgIHJlc3VsdCA9IH5yZXN1bHQ7CisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwcmludGYoIkJBRCBPUCBbJXNdXG4iLHBb MV0pOworICAgICAgICAgICAgc2V4cHJjKys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFw ZmxhZykgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGEgcHJlZGljYXRlICovCisgICAg ICBzZXhwcHYgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgLyogU28gdW5zZXQgdGhpcyAqLwor CisgIC8qIGRvbWFjcm86ICovCisKKyAgICBpZiAobWFjcm8pIHsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBVc2VyLWRlZmluZWQgbWFjcm8gKi8KKyAgICAgICAgZXh0ZXJuIGludCBmc2V4cGZs YWc7ICAgICAgICAgICAvKiAoc2VlIGZuZXZhbCgpOmNrdXVzNC5jKSAqLworICAgICAgICBpbnQg bG9va2FnYWluID0gMDsgICAgICAgICAgICAgIC8qIE1heWJlIHRoZSBtYWNybyB0YWJsZSBjaGFu Z2VkICovCisgICAgICAgIGlmIChtYWN0YWJbbXhdLmt3ZCkgeyAgICAgICAgICAgLyogQ2hlY2sg YW5kIHNlZSAqLworICAgICAgICAgICAgaWYgKGNrc3RyY21wKG1hY3RhYltteF0ua3dkLHBbMV0s LTEsMCkpCisgICAgICAgICAgICAgIGxvb2thZ2FpbisrOworICAgICAgICB9IGVsc2UKKyAgICAg ICAgICBsb29rYWdhaW4rKzsKKyAgICAgICAgaWYgKGxvb2thZ2FpbikgeyAgICAgICAgICAgICAg ICAvKiBUaGUgdGFibGUgY2hhbmdlZCAqLworICAgICAgICAgICAgbXggPSBteGxvb2sobWFjdGFi LHBbMV0sbm1hYyk7IC8qIEdldCB0aGUgbWFjcm8ncyBuZXcgaW5kZXggKi8KKyAgICAgICAgICAg IGRlYnVnKEYxMTEsc2V4cGRlYnVnKCJtYWNybyBtb3ZlZCIpLHBbMV0sbXgpOworICAgICAgICAg ICAgaWYgKG14IDwgMCkgeyAgICAgICAgICAgICAgICAgIC8qIFlpa2VzISAqLworICAgICAgICAg ICAgICAgIHByaW50ZigiP01hY3JvIGRpc2FwcGVhcmVkISAtIFwiJXNcIlxuIixwWzFdKTsKKyAg ICAgICAgICAgICAgICBzZXhwcmMrKzsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3NleHA7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMSxzZXhwZGVidWcoIm1h Y3JvIG14IiksbWFjdGFiW214XS5rd2QsbXgpOworICAgICAgICBpZiAoZnNleHBmbGFnKSB7ICAg ICAgICAgICAgICAgIC8qIElmIGVtYmVkZGVkIGluIGEgZnVuY3Rpb24gY2FsbCAqLworICAgICAg ICAgICAgaWYgKGNtcHVzaCgpID4gLTEpIHsgICAgICAgIC8qIGdldCBhIG5ldyBjb3B5IG9mIHRo ZSBwYXJzaW5nICovCisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBpZmM7ICAgICAgICAgLyog ZW52aXJvbm1lbnQsICovCisgICAgICAgICAgICAgICAgaW50IGssIGlmY3NhdiA9IGlmYzsgICAg Lyogc2F2ZSB0aGUgSUYgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICBkb2RvKG14LGxpbmUsMCk7 ICAgICAgICAvKiBTZXQgdXAgdGhlIG1hY3JvICovCisgICAgICAgICAgICAgICAgayA9IHBhcnNl cigxKTsgICAgICAgICAgLyogQ2FsbCB0aGUgcGFyc2VyIHRvIGV4ZWN1dGUgaXQgKi8KKyAgICAg ICAgICAgICAgICBjbXBvcCgpOyAgICAgICAgICAgICAgICAvKiBQb3AgYmFjayB0byBwcmV2aW91 cyBsZXZlbCAqLworICAgICAgICAgICAgICAgIGlmYyA9IGlmY3NhdjsgICAgICAgICAgIC8qIHJl c3RvcmUgSUYgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoayA9PSAwKSAgICAgICAgICAg ICAvKiBJZiBubyBlcnJvciAqLworICAgICAgICAgICAgICAgICAgczIgPSBtcnZhbFttYWNsdmwr MV07IC8qIGdldCByZXR1cm4gdmFsdWUsIGlmIGFueSAqLworICAgICAgICAgICAgICAgIGlmICgh czIpIHMyID0gIiI7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCxzZXhwZGVidWcoIm1hY3Jv IHJldHVybiIpLHMyLDApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw cmludGYoIj9SZXNvdXJjZXMgZXhoYXVzdGVkIC0gXCIlc1wiXG4iLHMpOworICAgICAgICAgICAg ICAgIHNleHByYysrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vdCBlbWJlZGRlZCBpbiBhIGZ1bmN0aW9uIGNhbGwgKi8KKyAgICAg ICAgICAgIGRvZG8obXgsbGluZSwwKTsgICAgICAgICAgICAvKiBBcyBhYm92ZSBidXQgd2l0aG91 dCBjbXB1c2gvcG9wKCkgKi8KKyAgICAgICAgICAgIGsgPSBwYXJzZXIoMSk7CisgICAgICAgICAg ICBpZiAoayA9PSAwKQorICAgICAgICAgICAgICBzMiA9IG1ydmFsW21hY2x2bCsxXTsKKyAgICAg ICAgICAgIGlmICghczIpIHMyID0gIiI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHBmbGFn KSB7ICAgICAgICAgICAgICAgICAvKiBQcmVkaWNhdGUgKi8KKyAgICAgICAgaWYgKG5vdCkgcHJl c3VsdCA9IHByZXN1bHQgPyAwIDogMTsKKyAgICAgICAgc2V4cHB2ID0gcHJlc3VsdDsgICAgICAg ICAgICAgICAvKiBTbyBzZXQgcHJlZGljYXRlIHZhbHVlICgwIG9yIDEpICovCisgICAgICAgIHMy ID0gcHJlc3VsdCA/ICIxIiA6ICIwIjsKKyAgICB9IGVsc2UgaWYgKGZwZmxhZyAmJiAhc2V4cHRy dW5jKSB7CS8qIFJlc3VsdCBpcyBmbG9hdGluZy1wb2ludCAqLworICAgICAgICBpZiAobm90KSBm cHJlc3VsdCA9IGZwcmVzdWx0ID8gMC4wIDogMS4wOworICAgICAgICBzMiA9IGZwZm9ybWF0KGZw cmVzdWx0LDAsMCk7CisgICAgfSBlbHNlIGlmICh4ICE9IFNYX0VWQSkgeworICAgICAgICBpZiAo bm90KSByZXN1bHQgPSByZXN1bHQgPyAwIDogMTsKKyAgICAgICAgczIgPSBja2ZzdG9hKHJlc3Vs dCk7CisgICAgfQorCisvKiBDb21tb24gZXhpdCBwb2ludC4gIEFsd2F5cyBjb21lIGhlcmUgdG8g ZXhpdC4gKi8KKworICB4ZG9zZXhwOgorCisgICAgaWYgKCFzMikgczIgPSAiIjsKKyAgICBpZiAo IXNleHByYyAmJiBzMikgeyAgICAgICAgICAgICAgICAvKiBIYXZlIGEgcmVzdWx0ICovCisgICAg ICAgIGNoYXIgKiBzeDsKKyAgICAgICAgY2hhciAqIHEyID0gczI7IGludCB4eCA9IDA7CisgICAg ICAgIGlmICgqczIpIHsKKyAgICAgICAgICAgIHdoaWxlICgqcTIrKykgeHgrKzsgICAgICAgICAv KiBHZXQgbGVuZ3RoICovCisgICAgICAgICAgICBpZiAoeHggPiBzZXhwcm1heCkgICAgICAgICAg LyogKHN0YXRzKSAqLworICAgICAgICAgICAgICBzZXhwcm1heCA9IHh4OworICAgICAgICB9IGVs c2UKKyAgICAgICAgICB4eCA9IDA7CisgICAgICAgIGlmICh4eCA+IHN4cmxlbltzZXhwZGVwXSB8 fCAhc3hyZXN1bHRbc2V4cGRlcF0pIHsKKyAgICAgICAgICAgIGludCBrOworICAgICAgICAgICAg ayA9IHh4ICsgeHggLyA0OworICAgICAgICAgICAgaWYgKGsgPCAzMikgayA9IDMyOworICAgICAg ICAgICAgaWYgKHN4cmVzdWx0W3NleHBkZXBdKQorICAgICAgICAgICAgICBmcmVlKHN4cmVzdWx0 W3NleHBkZXBdKTsKKyAgICAgICAgICAgIGlmICgoc3hyZXN1bHRbc2V4cGRlcF0gPSAoY2hhciAq KW1hbGxvYyhrKSkpIHsKKyAgICAgICAgICAgICAgICBzeHJsZW5bc2V4cGRlcF0gPSBrOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2Nh dGlvbiBmYWlsdXJlIC0gXCIlc1wiXG4iLHMyKTsKKyAgICAgICAgICAgICAgICBzZXhwcmMrKzsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzeCA9IHN4cmVzdWx0W3NleHBkZXBd OyAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCBidWZmZXIgKi8KKyAgICAgICAgd2hpbGUgKCgq c3grKyA9ICpzMisrKSkgOyAgICAgICAvKiBjb3B5IHJlc3VsdC4gKi8KKyAgICAgICAgaWYgKGZw ZmxhZyAmJiB0cnVuY2F0ZSkgeyAgICAgICAvKiBGbG9hdGluZyBwb2ludCArIHRydW5jYXRlICov CisgICAgICAgICAgICBzeCA9IHN4cmVzdWx0W3NleHBkZXBdOyAgICAgLyogYXQgZGVjaW1hbCBw b2ludCAqLworICAgICAgICAgICAgZm9yIChpID0geHggLSAxOyBpID49IDA7IGktLSkgeworICAg ICAgICAgICAgICAgIGlmIChzeFtpXSA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgc3hb aV0gPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApIHsgICAgICAgLyogSWYg bm90aGluZyBsZWZ0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBzeFswXSA9ICcwJzsgICAg LyogcHV0IGEgemVyby4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN4WzFdID0gTlVMOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorICAgIGlmIChsaW5lKSAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIElmIG1hY3JvIGFyZyBidWZmZXIgYWxsb2NhdGVkICovCisgICAgICBmcmVlKGxpbmUpOyAg ICAgICAgICAgICAgICAgICAgICAgLyogZnJlZSBpdC4gKi8KKyAgICBpZiAobXVzdGZyZWUpIHsg ICAgICAgICAgICAgICAgICAgICAvKiBBbmQgZnJlZSBsb2NhbCBjb3B5IG9mIHNwbGl0IGxpc3Qg Ki8KKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChw W2ldKSBmcmVlKHBbaV0pOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMTEsc2V4cGRl YnVnKCJleGl0Iiksc3hyZXN1bHRbc2V4cGRlcF0sc2V4cHJjKTsKKyAgICByZXR1cm4oc3hyZXN1 bHRbc2V4cGRlcC0tXSk7Cit9CisjZW5kaWYgLyogTk9TRVhQICovCisjZW5kaWYgLyogTk9TUEwg Ki8KKworaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENIRUNLIGNv bW1hbmQgKi8KK2RvY2hrKCkgeworICAgIGludCB4LCB5OworICAgIGlmICgoeSA9IGNta2V5KGZ0 cnRhYixuZnRyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworICAgIGNr c3RybmNweShsaW5lLGF0bWJ1ZixMSU5CVUZTSVopOworICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkKKyAgICAgIHJldHVybih5KTsKKyNpZm5kZWYgTk9QVVNICisgICAgaWYgKCFja3N0cmNtcChs aW5lLCJwdXNoIiwoaW50KXN0cmxlbihsaW5lKSwwKSkgeworICAgICAgICBpZiAobXNnZmxnKSAg ICAgICAgICAgICAgICAgICAgIC8qIElmIGF0IHRvcCBsZXZlbC4uLiAqLworICAgICAgICAgIHBy aW50ZigiIHB1c2glcyBhdmFpbGFibGVcbiIsIG5vcHVzaCA/ICIgbm90IiA6ICIiKTsKKyAgICAg ICAgZWxzZSBpZiAobm9wdXNoICYmICFiYWNrZ3JkKQorICAgICAgICAgIHByaW50ZigiIENIRUNL OiBwdXNoIG5vdCBhdmFpbGFibGVcbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEgLSBu b3B1c2gpOworICAgIH0KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNpZmRlZiBQSVBFU0VORAorICAg IGlmICghY2tzdHJjbXAobGluZSwicGlwZXMiLChpbnQpc3RybGVuKGxpbmUpLDApKSB7CisgICAg ICAgIGlmIChtc2dmbGcpICAgICAgICAgICAgICAgICAgICAgLyogSWYgYXQgdG9wIGxldmVsLi4u ICovCisgICAgICAgICAgcHJpbnRmKCIgcGlwZXMlcyBhdmFpbGFibGVcbiIsCisgICAgICAgICAg ICAgICAgIChub3B1c2ggfHwgcHJvdG9jb2wgIT0gUFJPVE9fSykgPyAiIG5vdCIgOiAiIik7Cisg ICAgICAgIGVsc2UgaWYgKChub3B1c2ggfHwgcHJvdG9jb2wgIT0gUFJPVE9fSykgJiYgIWJhY2tn cmQpCisgICAgICAgICAgcHJpbnRmKCIgQ0hFQ0s6IHBpcGVzIG5vdCBhdmFpbGFibGVcbiIpOwor ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEgLSBub3B1c2gpOworICAgIH0KKyNlbmRpZiAvKiBQ SVBFU0VORCAqLworICAgIHkgPSBsb29rdXAoZnRydGFiLGxpbmUsbmZ0ciwmeCk7ICAgIC8qIExv b2sgaXQgdXAgKi8KKyAgICBkZWJ1ZyhGMTExLCJkb2NoayIsZnRydGFiW3hdLmt3ZCx5KTsKKyAg ICBpZiAobXNnZmxnKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBhdCB0b3AgbGV2ZWwu Li4gKi8KKyAgICAgIHByaW50ZigiICVzJXMgYXZhaWxhYmxlXG4iLCBmdHJ0YWJbeF0ua3dkLCB5 ID8gIiBub3QiIDogIiIpOworICAgIGVsc2UgaWYgKHkgJiYgIWJhY2tncmQpCisgICAgICBwcmlu dGYoIiBDSEVDSzogJXMgbm90IGF2YWlsYWJsZVxuIiwgZnRydGFiW3hdLmt3ZCk7CisgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxIC0geSk7Cit9CisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIENLTE9H RElBTAorCisvKiBDb25uZWN0aW9uIGxvZyBhbmQgZWxhcHNlZC10aW1lIHJlcG9ydGluZyAqLwor CitleHRlcm4gY2hhciBjeGxvZ2J1ZltdOyAgICAgICAgICAgICAgICAgLyogTG9nIHJlY29yZCBi dWZmZXIgKi8KK2V4dGVybiBjaGFyIGRpYWZpbFtdOyAgICAgICAgICAgICAgICAgICAvKiBMb2cg ZmlsZSBuYW1lICovCitleHRlcm4gaW50IGRpYWxvZywgY3hfYWN0aXZlOyAgICAgICAgICAgLyog RmxhZ3MgKi8KK3N0YXRpYyBsb25nIGN4X3ByZXYgPSAwTDsgICAgICAgICAgICAgICAvKiBFbGFw c2VkIHRpbWUgb2YgcHJldmlvdXMgc2Vzc2lvbiAqLworCisjZW5kaWYgLyogQ0tMT0dESUFMICov CisjZW5kaWYgLyogTk9MT0NBTCAqLworCitWT0lECitkb2xvZ2VuZCgpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogV3JpdGUgcmVjb3JkIHRvIGNvbm5lY3Rpb24gbG9nICovCisjaWZk ZWYgTE9DVVMKKyAgICBleHRlcm4gaW50IGxvY3VzLCBhdXRvbG9jdXM7CisjZW5kaWYgLyogTE9D VVMgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgQ0tMT0dESUFMCisgICAgbG9uZyBkMSwg ZDIsIHQxLCB0MjsKKyAgICBjaGFyIGJ1ZlszMl0sICogcDsKKyNlbmRpZiAvKiBDS0xPR0RJQUwg Ki8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBMT0NVUworICAgIGlmIChhdXRvbG9j dXMpIHsKKyAgICAgICAgaW50IHggPSBsb2N1czsKKyNpZmRlZiBORVdGVFAKKwlkZWJ1ZyhGMTAx LCJkb2xvZ2VuZCBmdHBpc2Nvbm5lY3RlZCIsIiIsZnRwaXNjb25uZWN0ZWQoKSk7CisgICAgICAg IHNldGxvY3VzKGZ0cGlzY29ubmVjdGVkKCkgPyAwIDogMSwgMSk7CisjZWxzZQorICAgICAgICBz ZXRsb2N1cygxLDEpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgIH0KKyNlbmRpZiAvKiBMT0NV UyAqLworCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICBkZWJ1ZyhGMTAx LCJkb2xvZ2VuZCBkaWFsb2ciLCIiLGRpYWxvZyk7CisgICAgZGVidWcoRjEwMSwiZG9sb2dlbmQg Y3hsb2didWZbMF0iLCIiLGN4bG9nYnVmWzBdKTsKKyNpZmRlZiBDS1NZU0xPRworICAgIGRlYnVn KEYxMDEsImRvbG9nZW5kIGNreGxvZ2dpbmciLCIiLGNreGxvZ2dpbmcpOworI2VuZGlmIC8qIENL U1lTTE9HICovCisKKyAgICBpZiAoIWN4X2FjdGl2ZSB8fCAhY3hsb2didWZbMF0pICAgICAvKiBO byBhY3RpdmUgcmVjb3JkICovCisgICAgICByZXR1cm47CisKKyAgICBjeF9hY3RpdmUgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAvKiBSZWNvcmQgaXMgbm90IGFjdGl2ZSAqLworICAgIGRlYnVn KEYxMTEsImRvbG9nZW5kIGN4bG9nYnVmIDEiLGN4bG9nYnVmLGN4X2FjdGl2ZSk7CisKKyAgICBk MSA9IG1qZCgoY2hhciAqKWN4bG9nYnVmKTsgICAgICAgICAvKiBHZXQgc3RhcnQgZGF0ZSBvZiB0 aGlzIHNlc3Npb24gKi8KKyAgICBja3N0cm5jcHkoYnVmLGNrZGF0ZSgpLDMxKTsgICAgICAgICAv KiBHZXQgY3VycmVudCBkYXRlICovCisgICAgZDIgPSBtamQoYnVmKTsgICAgICAgICAgICAgICAg ICAgICAgLyogQ29udmVydCB0aGVtIHRvIG1qZHMgKi8KKyAgICBwID0gY3hsb2didWY7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBHZXQgc3RhcnQgdGltZSAqLworICAgIHBbMTFdID0gTlVMOwor ICAgIHBbMTRdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gc2Vj b25kcyAqLworICAgIHQxID0gYXRvbChwKzkpICogMzYwMEwgKyBhdG9sKHArMTIpICogNjBMICsg YXRvbChwKzE1KTsKKyAgICBwWzExXSA9ICc6JzsKKyAgICBwWzE0XSA9ICc6JzsKKyAgICBwID0g YnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgZW5kIHRpbWUgKi8KKyAgICBw WzExXSA9IE5VTDsKKyAgICBwWzE0XSA9IE5VTDsKKyAgICB0MiA9IGF0b2wocCs5KSAqIDM2MDBM ICsgYXRvbChwKzEyKSAqIDYwTCArIGF0b2wocCsxNSk7CisgICAgdDIgPSAoKGQyIC0gZDEpICog ODY0MDBMKSArICh0MiAtIHQxKTsgLyogQ29tcHV0ZSBlbGFwc2VkIHRpbWUgKi8KKyAgICBkZWJ1 ZyhGMTAxLCJkb2xvZ2VuZCB0MiIsIiIsdDIpOworICAgIGlmICh0MiA+IC0xTCkgeworICAgICAg ICBjeF9wcmV2ID0gdDI7CisgICAgICAgIHAgPSBoaG1tc3ModDIpOworICAgICAgICBkZWJ1ZyhG MTEwLCJkb2xvZ2VuZCBoaG1tc3MiLHAsMCk7CisgICAgICAgIGNrc3RybmNhdChjeGxvZ2J1Ziwi RT0iLENYTE9HQlVGTCk7IC8qIEFwcGVuZCB0byBsb2cgcmVjb3JkICovCisgICAgICAgIGNrc3Ry bmNhdChjeGxvZ2J1ZixwLENYTE9HQlVGTCk7CisgICAgICAgIGRlYnVnKEYxMTAsImRvbG9nZW5k IGN4bG9nYnVmIDIiLGN4bG9nYnVmLDApOworICAgIH0gZWxzZQorICAgICAgY3hfcHJldiA9IDBM OworICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIGN4X3ByZXYiLCIiLGN4X3ByZXYpOworICAgIGlm IChkaWFsb2cpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGxvZ2dpbmcgKi8KKyAgICAg ICAgaW50IHg7CisgICAgICAgIHggPSBkaWFvcG4oZGlhZmlsLDEsMSk7ICAgICAgICAgLyogT3Bl biBsb2cgaW4gYXBwZW5kIG1vZGUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9sb2dlbmQgZGlh b3BuIiwiIix4KTsKKyAgICAgICAgeCA9IHpzb3V0bChaRElGSUwsY3hsb2didWYpOyAgICAvKiBX cml0ZSB0aGUgcmVjb3JkICovCisgICAgICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIHpzb3V0bCIs IiIseCk7CisgICAgICAgIHggPSB6Y2xvc2UoWkRJRklMKTsgICAgICAgICAgICAgLyogQ2xvc2Ug dGhlIGxvZyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2xvZ2VuZCB6Y2xvc2UiLCIiLHgpOwor ICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgIGRlYnVnKEYxMDEsImRvbG9nZW5kIGNreGxvZ2dp bmciLCIiLGNreGxvZ2dpbmcpOworICAgIGlmIChja3hsb2dnaW5nKSB7CisgICAgICAgIGludCB4 OworICAgICAgICB4ID0gY2tpbmRleCgiVD1ESUFMIixjeGxvZ2J1ZiwwLDAsMSk7CisgICAgICAg IGRlYnVnKEYxMTEsImRvbG9nZW5kIGNreHN5c2xvZyIsY3hsb2didWYsY2t4c3lzbG9nKTsKKyAg ICAgICAgZGVidWcoRjExMSwiZG9sb2dlbmQgY2tpbmRleCIsIlQ9RElBTCIseCk7CisgICAgICAg IGlmICh4ID4gMCkgeworICAgICAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19ESSkgewor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImRvbG9nZW5kIHN5c2xvZyIsY3hsb2didWYrMTgs MCk7CisgICAgICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREksMSwiQ09OTkVDVElPTiIsKGNo YXIgKikoY3hsb2didWYrMTgpLCIiKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2t4c3lzbG9n ID49IFNZU0xHX0FDKSB7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9sb2dlbmQgc3lz bG9nIixjeGxvZ2J1ZisxOCwwKTsKKyAgICAgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19BQywx LCJDT05ORUNUSU9OIiwoY2hhciAqKShjeGxvZ2J1ZisxOCksIiIpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisjZW5kaWYgLyogQ0tMT0dE SUFMICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworfQorCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRl ZiBDS0xPR0RJQUwKKworLyogIEQgTyBMIE8gRyBTIEggTyBXICAtLSAgU2hvdyBzZXNzaW9uL2Nv bm5lY3Rpb24gaW5mbyAgKi8KKworLyogQ2FsbCB3aXRoIGZjID09IDEgdG8gc2hvdywgZmMgPT0g MCB0byBvbmx5IGNhbGN1bGF0ZS4gKi8KKy8qIFJldHVybnMgc2Vzc2lvbiBlbGFwc2VkIHRpbWUg aW4gc2Vjb25kcy4gKi8KKy8qIElmIG5vIHNlc3Npb24gYWN0aXZlLCByZXR1cm5zIGVsYXBzZWQg dGltZSBvZiBwcmV2aW91cyBzZXNzaW9uLCBpZiBhbnksICovCisvKiBvdGhlcndpc2UgMCAqLwor Citsb25nCitkb2xvZ3Nob3coZmMpIGludCBmYzsgeyAgICAgICAgICAgICAgICAgLyogU0hPVyAo Y3VycmVudCkgQ09OTkVDVElPTiAqLworICAgIGxvbmcgZDEsIGQyLCB0MSwgdDIgPSAwLCBwcmV2 OworICAgIGNoYXIgYywgYnVmMVszMl0sIGJ1ZjJbMzJdLCAqIGluZm9bMzJdLCAqIHAsICogczsK KyAgICBjaGFyICogeGxvZ2J1ZiwgeGJ1ZltDWExPR0JVRkwrMV07CisgICAgaW50IGksIHggPSAw LCB6LCBmdHAgPSAwLCBhY3RpdmUgPSAwOworCisjaWZkZWYgTkVXRlRQCisgICAgZXh0ZXJuIGNo YXIgZnRwbG9nYnVmW107CisgICAgZXh0ZXJuIGxvbmcgZnRwbG9ncHJldjsKKyAgICBleHRlcm4g aW50IGZ0cGxvZ2FjdGl2ZTsKKyAgICBpZiAoZmMgJiBXX0ZUUCkgeworICAgICAgICBmYyAmPSA2 MzsKKyAgICAgICAgZnRwID0gMTsKKyAgICAgICAgeGxvZ2J1ZiA9IGZ0cGxvZ2J1ZjsKKyAgICAg ICAgcHJldiA9IGZ0cGxvZ3ByZXY7CisgICAgICAgIGFjdGl2ZSA9IGZ0cGxvZ2FjdGl2ZTsKKyAg ICB9IGVsc2UgeworI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgICAgICBmdHAgPSAwOworICAgICAg ICB4bG9nYnVmID0gY3hsb2didWY7CisgICAgICAgIHByZXYgPSBjeF9wcmV2OworICAgICAgICBh Y3RpdmUgPSBjeF9hY3RpdmU7CisjaWZkZWYgTkVXRlRQCisgICAgfQorI2VuZGlmIC8qIE5FV0ZU UCAqLworCisgICAgZGVidWcoRjEwMSwiZG9sb2dzaG93IGxvY2FsIiwiIixsb2NhbCk7CisgICAg ZGVidWcoRjEwMSwiZG9sb2dzaG93IGZ0cCIsIiIsZnRwKTsKKyAgICBkZWJ1ZyhGMTExLCJkb2xv Z3Nob3cgYWN0aXZlIix4bG9nYnVmLGFjdGl2ZSk7CisKKyAgICBpZiAoIXhsb2didWZbMF0pIHsK KyAgICAgICAgaWYgKGZjKSB7CisgICAgICAgICAgICBpZiAoZGlkc2V0bGluIHx8IGZ0cCkKKyAg ICAgICAgICAgICAgcHJpbnRmKCIgJXM6IE5vIHJlY29yZC5cbiIsIGZ0cCA/ICJGVFAiIDogIktl cm1pdCIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIiAlczogTm8g Y29ubmVjdGlvbi5cbiIsIGZ0cCA/ICJGVFAiIDogIktlcm1pdCIpOworICAgICAgICB9CisgICAg ICAgIHJldHVybihwcmV2KTsKKyAgICB9CisKKyNpZmRlZiBORVdGVFAKKyAgICBpZiAoZnRwKSB7 CisgICAgICAgIHogPSBmdHBpc2Nvbm5lY3RlZCgpID8gMSA6IC0xOworICAgIH0gZWxzZSB7Cisj ZW5kaWYgLyogTkVXRlRQICovCisgICAgICAgIGlmIChsb2NhbCkgeyAgICAgICAgICAgICAgICAg ICAgLyogU2VlIGlmIHdlIGhhdmUgYW4gb3BlbiBjb25uZWN0aW9uICovCisgICAgICAgICAgICB6 ID0gdHRjaGsoKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvbG9nc2hvdyB0dGNoayIsIiIs eik7CisgICAgICAgICAgICB6ID0gKHogPiAtMSkgPyAxIDogLTI7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICB6ID0gYWN0aXZlID8gMSA6IC0yOworICAgICAgICB9CisjaWZkZWYgTkVX RlRQCisgICAgfQorI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgIGlmICh6IDwgMEwpIHsKKyAgICAg ICAgaWYgKCFmYykKKyAgICAgICAgICByZXR1cm4ocHJldik7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICB0MiA9IHByZXY7CisgICAgfQorICAgIC8qIE5vdGU6IE5PVCBja3N0cm5jcHkhICovCisg ICAgc3RybmNweShidWYxLHhsb2didWYsMTcpOyAgICAgICAgICAgLyogQ29weSBvZiBqdXN0IHRo ZSB0aW1lc3RhbXAgKi8KKyAgICBidWYxWzE3XSA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAv KiBUZXJtaW5hdGUgaXQgKi8KKyAgICBja3N0cm5jcHkoeGJ1Zix4bG9nYnVmKzE4LENYTE9HQlVG TCk7IC8qIENvcHkgdGhhdCBjYW4gYmUgcG9rZWQgKi8KKyAgICBkZWJ1ZyhGMTExLCJkb2xvZ3No b3cgcHJldiIseGJ1ZixwcmV2KTsKKworICAgIHh3b3Jkcyh4YnVmLDMxLGluZm8sMSk7ICAgICAg ICAgICAgIC8qIEJyZWFrIHVwIGludG8gZmllbGRzICovCisgICAgZDEgPSBtamQoYnVmMSk7ICAg ICAgICAgICAgICAgICAgICAgLyogQ29udmVydCBzdGFydCB0aW1lIHRvIE1KRCAqLworICAgIGNr c3RybmNweShidWYyLGNrZGF0ZSgpLDMxKTsgICAgICAgIC8qIEN1cnJlbnQgZGF0ZSAqLworICAg IGQyID0gbWpkKGJ1ZjIpOyAgICAgICAgICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gTUpEICov CisgICAgcCA9IGJ1ZjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gc3Rh cnQgdGltZSAqLworICAgIHBbMTFdID0gTlVMOworICAgIHBbMTRdID0gTlVMOyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gc2Vjb25kcyAqLworICAgIHQxID0gYXRvbChwKzkp ICogMzYwMEwgKyBhdG9sKHArMTIpICogNjBMICsgYXRvbChwKzE1KTsKKyAgICBwWzExXSA9ICc6 JzsKKyAgICBwWzE0XSA9ICc6JzsKKyAgICBwID0gYnVmMjsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEaXR0byBmb3IgY3VycmVudCB0aW1lICovCisgICAgcFsxMV0gPSBOVUw7CisgICAg cFsxNF0gPSBOVUw7CisgICAgaWYgKHogPiAtMUwpIHsKKyAgICAgICAgdDIgPSBhdG9sKHArOSkg KiAzNjAwTCArIGF0b2wocCsxMikgKiA2MEwgKyBhdG9sKHArMTUpOworICAgICAgICB0MiA9ICgo ZDIgLSBkMSkgKiA4NjQwMEwpICsgKHQyIC0gdDEpOyAvKiBFbGFwc2VkIHRpbWUgc28gZmFyICov CisgICAgfQorICAgIGlmIChmYykgeworICAgICAgICBwID0gTlVMTDsKKyAgICAgICAgaWYgKHQy ID4gLTFMKSAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHNlY29uZHMgdG8gaGg6bW06c3Mg Ki8KKyAgICAgICAgICBwID0gaGhtbXNzKHQyKTsKKyAgICAgICAgaWYgKHogPiAtMSkKKyAgICAg ICAgICBzID0gIkFjdGl2ZSI7CisgICAgICAgIGVsc2UgaWYgKHogPT0gLTIpCisgICAgICAgICAg cyA9ICJDbG9zZWQiOworICAgICAgICBlbHNlCisgICAgICAgICAgcyA9ICJVbmtub3duIjsKKyAg ICAgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAgICAgICAvKiBTaG93IHJlc3VsdHMgKi8K KyAgICAgICAgcHJpbnRmKCIgU3RhdHVzOiAgICAgICAlc1xuIixzKTsKKyAgICAgICAgcHJpbnRm KCIgT3BlbmVkOiAgICAgICAlc1xuIixidWYxKTsKKyAgICAgICAgcHJpbnRmKCIgVXNlcjogICAg ICAgICAlc1xuIixpbmZvWzFdID8gaW5mb1sxXSA6ICIiKTsKKyAgICAgICAgcHJpbnRmKCIgUElE OiAgICAgICAgICAlc1xuIixpbmZvWzJdID8gaW5mb1syXSA6ICIiKTsKKyAgICAgICAgZm9yIChp ID0gMzsgaW5mb1tpXTsgaSsrKSB7CisgICAgICAgICAgICBjID0gaW5mb1tpXVswXTsKKyAgICAg ICAgICAgIHMgPSAoaW5mb1tpXSkgPyBpbmZvW2ldKzIgOiAiIjsKKyAgICAgICAgICAgIHN3aXRj aCAoYykgeworICAgICAgICAgICAgICBjYXNlICdUJzogcHJpbnRmKCIgVHlwZTogICAgICAgICAl c1xuIiwgcyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlICdOJzogcHJpbnRmKCIgVG86ICAg ICAgICAgICAlc1xuIiwgcyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlICdQJzogcHJpbnRm KCIgUG9ydDogICAgICAgICAlc1xuIiwgcyk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlICdI JzogcHJpbnRmKCIgRnJvbTogICAgICAgICAlc1xuIiwgcyk7IGJyZWFrOworICAgICAgICAgICAg ICBjYXNlICdEJzogcHJpbnRmKCIgRGV2aWNlOiAgICAgICAlc1xuIiwgcyk7IGJyZWFrOworICAg ICAgICAgICAgICBjYXNlICdPJzogcHJpbnRmKCIgT3JpZ2luOiAgICAgICAlc1xuIiwgcyk7IGJy ZWFrOworICAgICAgICAgICAgICBjYXNlICdFJzogYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1 bHQ6ICBwcmludGYoIiAlc1xuIixpbmZvW2ldID8gaW5mb1tpXSA6ICIiKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoeiA8IDBMKQorICAgICAgICAgIHByaW50ZigiIEVs YXBzZWQgdGltZTogJXNcbiIsIGhobW1zcyh0MikpOworICAgICAgICBlbHNlCisgICAgICAgICAg cHJpbnRmKCIgRWxhcHNlZCB0aW1lOiAlc1xuIiwgcCA/IHAgOiAiKHVua25vd24pIik7CisgICAg ICAgIHggPSAwOworI2lmZGVmIE5FVENPTk4KKyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgIGlm ICggSVNfU1NIKCkgKSB4Kys7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIENLX0VO Q1JZUFRJT04KKyAgICAgICAgaWYgKGNrX3RuX2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNyeXB0 aW5nKCkpIHgrKzsKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfU1NMCisg ICAgICAgIGlmICh0bHNfYWN0aXZlX2ZsYWcgfHwgc3NsX2FjdGl2ZV9mbGFnKSB4Kys7CisjZW5k aWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NPREUKKyNpZmRlZiBDS19LRVJCRVJPUworI2lm ZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8 IHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB4Kys7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRp ZiAvKiBORVRDT05OICovCisgICAgICAgIGlmICh6ID4gMCkKKyAgICAgICAgICBwcmludGYoIiBF bmNyeXB0ZWQ6ICAgICVzXG4iLCB4ID8gIlllcyIgOiAiTm8iKTsKKyAgICAgICAgcHJpbnRmKCIg TG9nOiAgICAgICAgICAlc1xuIiwgZGlhbG9nID8gZGlhZmlsIDogIihub25lKSIpOworICAgICAg ICBwcmludGYoIlxuIik7CisgICAgfQorICAgIHJldHVybih0MiA+IC0xTCA/IHQyIDogMEwpOwor fQorCitWT0lECitkb2xvZ2xpbmUoKSB7CisgICAgY2hhciAqIHA7CisgICAgaW50IG4sIG0gPSAw OworCisgICAgZG9sb2dlbmQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmlvdXMg c2Vzc2lvbiBub3QgY2xvc2VkIG91dD8gKi8KKyAgICBjeF9hY3RpdmUgPSAxOyAgICAgICAgICAg ICAgICAgICAgICAvKiBSZWNvcmQgaXMgYWN0aXZlICovCisgICAgY3hfcHJldiA9IDBMOworICAg IHAgPSBja2RhdGUoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB0aW1lc3RhbXAgKi8K KyAgICBuID0gY2tzdHJuY3B5KGN4bG9nYnVmLHAsQ1hMT0dCVUZMLTEpOyAvKiBTdGFydCByZWNv cmQgb2ZmIHdpdGggaXQgKi8KKyAgICBpZiAoIXVpZGJ1ZlswXSkgeworICAgICAgICBkZWJ1ZyhG MTAwLCJkb2xvZ2xpbmUgdWlkYnVmIGVtcHR5IiwiIiwwKTsKKyNpZmRlZiBVTklYICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBXaG8gaGFzIHdob2FtaSgpLi4uICovCisgICAgICAgIGNr c3RybmNweSh1aWRidWYsKGNoYXIgKil3aG9hbWkoKSxVSURCVUZMRU4pOworI2Vsc2UKKyNpZmRl ZiBTVFJBVFVTCisgICAgICAgIGNrc3RybmNweSh1aWRidWYsKGNoYXIgKil3aG9hbWkoKSxVSURC VUZMRU4pOworI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwiVU5LTk9XTiIsVUlEQlVG TEVOKTsKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVU5JWCAqLworICAgIH0KKyAg ICBtID0gc3RybGVuKHVpZGJ1ZikgKyBzdHJsZW4obXlob3N0KSArIHN0cmxlbih0dG5hbWUpICsg MzI7CisgICAgaWYgKG4rbSA8IENYTE9HQlVGTC0xKSB7ICAgICAgICAgICAgLyogQWRkIHNlcmlh bCBkZXZpY2UgaW5mbyAqLworICAgICAgICBwID0gY3hsb2didWYrbjsKKyAgICAgICAgc3ByaW50 ZihwLCIgJXMgJXMgVD1TRVJJQUwgSD0lcyBEPSVzICIsIC8qIFNBRkUgKi8KKyAgICAgICAgICAg ICAgICB1aWRidWYsCisgICAgICAgICAgICAgICAgY2tnZXRwaWQoKSwKKyAgICAgICAgICAgICAg ICBteWhvc3QsCisgICAgICAgICAgICAgICAgdHRuYW1lCisgICAgICAgICAgICAgICAgKTsKKyAg ICB9IGVsc2UKKyAgICAgIGNrc3RybmNweShjeGxvZ2J1ZiwiTE9HTElORSBCVUZGRVIgT1ZFUkZM T1ciLENYTE9HQlVGTCk7CisgICAgZGVidWcoRjExMCwiZG9sb2dsaW5lIixjeGxvZ2J1ZiwwKTsK K30KKworI2lmZGVmIE5FVENPTk4KK1ZPSUQKK2RvbG9nbmV0KCkgeworICAgIGNoYXIgKiBwLCAq IHMgPSAiTkVUIiwgKiB1dSA9IHVpZGJ1ZjsKKyAgICBjaGFyICogcG9ydCA9ICIiOworICAgIGlu dCBuLCBtLCB0Y3AgPSAwOworICAgIGNoYXIgKiBoID0gTlVMTDsKKworICAgIGRvbG9nZW5kKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZpb3VzIHNlc3Npb24gbm90IGNsb3NlZCBv dXQ/ICovCisgICAgY3hfcHJldiA9IDBMOworICAgIGN4X2FjdGl2ZSA9IDE7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlY29yZCBpcyBhY3RpdmUgKi8KKyAgICBwID0gY2tkYXRlKCk7CisgICAg biA9IGNrc3RybmNweShjeGxvZ2J1ZixwLENYTE9HQlVGTCk7CisjaWZkZWYgVENQU09DS0VUCisg ICAgaWYgKG5ldHR5cGUgPT0gTkVUX1RDUEIgfHwgbmV0dHlwZSA9PSBORVRfVENQQSkgeworCXRj cCsrOworCXMgPSAiVENQIjsKKyAgICB9IGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1NTSCkgewor CXMgPSAiU1NIIjsKKwl0Y3ArKzsKKyAgICB9CisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZk ZWYgQU5ZWDI1CisgICAgaWYgKG5ldHR5cGUgPT0gTkVUX1NYMjUgfHwgbmV0dHlwZSA9PSBORVRf VlgyNSB8fCBuZXR0eXBlID09IE5FVF9JWDI1KQorICAgICAgcyA9ICJYMjUiOworI2VuZGlmIC8q IEFOWVgyNSAqLworI2lmZGVmIERFQ05FVAorICAgIGlmIChuZXR0eXBlID09IE5FVF9ERUMpCisg ICAgICBzID0gIkRFQ05FVCI7CisjZW5kaWYgLyogREVDTkVUICovCisjaWZkZWYgU1VQRVJMQVQK KyAgICBpZiAobmV0dHlwZSA9PSBORVRfU0xBVCkKKyAgICAgIHMgPSAiU1VQRVJMQVQiOworI2Vu ZGlmIC8qIFNVUEVSTEFUICovCisjaWZkZWYgQ0tfTkVUQklPUworICAgIGlmIChuZXR0eXBlID09 IE5FVF9CSU9TKQorICAgICAgcyA9ICJORVRCSU9TIjsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICov CisKKyAgICBpZiAoIXV1WzBdKSB7CisgICAgICAgIGRlYnVnKEYxMDAsImRvbG9nbmV0IHVpZGJ1 ZiBlbXB0eSIsIiIsMCk7CisjaWZkZWYgT1MyT1JVTklYICAgICAgICAgICAgICAgICAgICAgICAg LyogV2hvIGhhcyB3aG9hbWkoKS4uLiAqLworICAgICAgICB1dSA9IChjaGFyICopd2hvYW1pKCk7 CisjZWxzZQorI2lmZGVmIFNUUkFUVVMKKyAgICAgICAgdXUgPSAoY2hhciAqKXdob2FtaSgpOwor I2Vsc2UKKyAgICAgICAgdXUgPSAiVU5LTk9XTiI7CisjZW5kaWYgLyogU1RSQVRVUyAqLworI2Vu ZGlmIC8qIFVOSVggKi8KKyAgICB9CisjaWZkZWYgVENQU09DS0VUCisgICAgaWYgKHRjcCkgewor CWludCBrOworCW1ha2VzdHIoJmgsbXlob3N0KTsKKwlpZiAoKGsgPSBja2luZGV4KCI6IixoLDAs MCwwKSkgPiAwKSB7CisJICAgIGhbay0xXSA9IE5VTDsKKwkgICAgcG9ydCA9ICZoW2tdOworCX0g ZWxzZSB7CisJICAgIGludCBzdmNudW0gPSBnZXR0Y3Bwb3J0KCk7CisJICAgIGlmIChzdmNudW0g PiAwKQorCSAgICAgIHBvcnQgPSBja2l0b2Eoc3ZjbnVtKTsKKwkgICAgZWxzZQorCSAgICAgIHBv cnQgPSAidW5rIjsKKwl9CisgICAgfQorI2VuZGlmCS8qIFRDUFNPQ0tFVCAqLworICAgIG0gPSBz dHJsZW4odXUpICsgc3RybGVuKG15aG9zdCkgKyBzdHJsZW4odHRuYW1lKSArIHN0cmxlbihzKSAr IDMyOworICAgIGlmIChuK20gPCBDWExPR0JVRkwtMSkgeyAgICAgICAgICAgIC8qIFNBRkUgKi8K KyAgICAgICAgcCA9IGN4bG9nYnVmK247CisgICAgICAgIHNwcmludGYocCwiICVzICVzIFQ9JXMg Tj0lcyBIPSVzIFA9JXMgIiwKKyAgICAgICAgICAgICAgICB1dSwKKyAgICAgICAgICAgICAgICBj a2dldHBpZCgpLAorICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgdHRuYW1lLAor ICAgICAgICAgICAgICAgIG15aG9zdCwKKwkJcG9ydAorICAgICAgICAgICAgICAgICk7CisgICAg fSBlbHNlCisgICAgICBja3N0cm5jcHkoY3hsb2didWYsIkxPR05FVCBCVUZGRVIgT1ZFUkZMT1ci LENYTE9HQlVGTCk7CisgICAgZGVidWcoRjExMCwiZG9sb2duZXQgY3hsb2didWYiLGN4bG9nYnVm LDApOworICAgIGlmIChoKSBtYWtlc3RyKCZoLE5VTEwpOworfQorI2VuZGlmIC8qIE5FVENPTk4g Ki8KKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKworI2lmbmRlZiBOT0RJQUwKKy8qCisgIFBhcnNl IGEgRElBTC1yZWxhdGVkIHN0cmluZywgc3RyaXBwaW5nIGVuY2xvc2luZyBicmFjZXMsIGlmIGFu eS4KKyovCitzdGF0aWMgaW50CitkaWFsc3RyKHAsbXNnKSBjaGFyICoqcDsgY2hhciAqbXNnOyB7 CisgICAgaW50IHg7CisgICAgY2hhciAqczsKKworICAgIGlmICgoeCA9IGNtdHh0KG1zZywgIiIs ICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBzID0gYnJzdHJpcChz KTsgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBicmFjZXMgYXJvdW5kLiAqLworICAgIGRl YnVnKEYxMTAsImRpYWxzdHIiLHMsMCk7CisgICAgbWFrZXN0cihwLCpzP3M6TlVMTCk7CisgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKworVk9JRAoraW5pdG1kbSh4KSBpbnQgeDsgeworICAg IE1ETUlORiAqIHA7CisgICAgaW50IG07CisKKyAgICBtZG10eXAgPSB4OyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXQgZ2xvYmFsIG1vZGVtIHR5cGUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJp bml0bWRtIG1kbXR5cCIsIiIsbWRtdHlwKTsKKyAgICBkZWJ1ZyhGMTAxLCJpbml0bWRtIHVzZXJt ZG0iLCIiLHVzZXJtZG0pOworICAgIGlmICh4IDwgMSkgcmV0dXJuOworCisgICAgbSA9IHVzZXJt ZG0gPyB1c2VybWRtIDogbWRtdHlwOworCisgICAgcCA9IG1vZGVtcFttXTsgICAgICAgICAgICAg ICAgICAgICAgLyogUG9pbnQgdG8gbW9kZW0gaW5mbyBzdHJ1Y3QsIGFuZCAqLworICAgIC8qIGRl YnVnKEYxMDEsImluaXRtZG0gcCIsIiIscCk7ICovCisgICAgaWYgKHApIHsKKyAgICAgICAgZGlh bGVjID0gcC0+Y2FwYXMgJiBDS0RfRUM7ICAgICAvKiBzZXQgRElBTCBFUlJPUi1DT1JSRUNUSU9O LCAqLworICAgICAgICBkaWFsZGMgPSBwLT5jYXBhcyAmIENLRF9EQzsgICAgIC8qIERJQUwgREFU QS1DT01QUkVTU0lPTiwgYW5kICovCisgICAgICAgIG1kbXNwZCA9IHAtPmNhcGFzICYgQ0tEX1NC ID8gMCA6IDE7IC8qIERJQUwgU1BFRUQtTUFUQ0hJTkcgZnJvbSBpdC4gKi8KKyAgICAgICAgZGlh bGZjID0gRkxPX0FVVE87ICAgICAgICAgICAgICAgICAgLyogTW9kZW0ncyBsb2NhbCBmbG93IGNv bnRyb2wuLiAqLworICAgICAgICBkaWFsbWF4ICAgPSBwLT5tYXhfc3BlZWQ7CisgICAgICAgIGRp YWxjYXBhcyA9IHAtPmNhcGFzOworICAgICAgICBkaWFsZXNjICAgPSBwLT5lc2NfY2hhcjsKKyAg ICB9IGVsc2UgaWYgKG1kbXR5cCA+IDApIHsKKyAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiBtb2Rl bSBpbmZvIGZvciBcIiVzXCIgbm90IGZpbGxlZCBpbiB5ZXRcbiIsCisgICAgICAgICAgICAgICBn bWRtdHlwKCkKKyAgICAgICAgICAgICAgICk7CisgICAgfQorCisvKiBSZXNldCBvciBzZXQgdGhl IFNFVCBESUFMIFNUUklORyBpdGVtcyAuLi4gKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZykgeworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxpbmkiLGRpYWxpbmksMCk7 CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbG1zdHIgIixkaWFsbXN0ciwwKTsKKyAg ICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsbXBybXQiLGRpYWxtcHJtdCwwKTsKKyAgICAg ICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsY21kIixkaWFsY21kLDApOworICAgICAgICBkZWJ1 ZyhGMTEwLCJpbml0bWRtIGRpYWxkY29uIixkaWFsZGNvbiwwKTsKKyAgICAgICAgZGVidWcoRjEx MCwiaW5pdG1kbSBkaWFsZGNvZmYiLGRpYWxkY29mZiwwKTsKKyAgICAgICAgZGVidWcoRjExMCwi aW5pdG1kbSBkaWFsZWNvbiIsZGlhbGVjb24sMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRt ZG0gZGlhbGVjb2ZmIixkaWFsZWNvZmYsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0g ZGlhbGhjbWQiLGRpYWxoY21kLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxo d2ZjIixkaWFsaHdmYywwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsc3dmYyIs ZGlhbHN3ZmMsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbG5vZmMiLGRpYWxu b2ZjLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWx0b25lIixkaWFsdG9uZSww KTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFscHVsc2UiLGRpYWxwdWxzZSwwKTsK KyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsbmFtZSIsZGlhbG5hbWUsMCk7CisgICAg ICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbGFhb24iLGRpYWxhYW9uLDApOworICAgICAgICBk ZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWxhYW9mZiIsZGlhbGFhb2ZmLDApOworICAgICAgICBkZWJ1 ZyhGMTEwLCJpbml0bWRtIGRpYWx4MyIsZGlhbHgzLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJp bml0bWRtIGRpYWxzcG9uIixkaWFsc3BvbiwwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1k bSBkaWFsc3BvZmYiLGRpYWxzcG9mZiwwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBk aWFsdm9sMSIsZGlhbHZvbDEsMCk7CisgICAgICAgIGRlYnVnKEYxMTAsImluaXRtZG0gZGlhbHZv bDIiLGRpYWx2b2wyLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJpbml0bWRtIGRpYWx2b2wzIixk aWFsdm9sMywwKTsKKyAgICAgICAgZGVidWcoRjExMCwiaW5pdG1kbSBkaWFsaW5pMiIsZGlhbGlu aTIsMCk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAgICBpZiAodXNlcm1kbSAmJiBw KSB7IC8qIFVTRVItREVGSU5FRDogY29weSBpbmZvIGZyb20gc3BlY2lmaWVkIHRlbXBsYXRlICov CisKKyAgICAgICAgbWFrZXN0cigmZGlhbGluaSAgLHAtPndha2Vfc3RyKTsKKyAgICAgICAgbWFr ZXN0cigmZGlhbG1zdHIgLHAtPmRtb2RlX3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWxtcHJt dCxwLT5kbW9kZV9wcm9tcHQpOworICAgICAgICBtYWtlc3RyKCZkaWFsY21kICAscC0+ZGlhbF9z dHIpOworICAgICAgICBtYWtlc3RyKCZkaWFsZGNvbiAscC0+ZGNfb25fc3RyKTsKKyAgICAgICAg bWFrZXN0cigmZGlhbGRjb2ZmLHAtPmRjX29mZl9zdHIpOworICAgICAgICBtYWtlc3RyKCZkaWFs ZWNvbiAscC0+ZWNfb25fc3RyKTsKKyAgICAgICAgbWFrZXN0cigmZGlhbGVjb2ZmLHAtPmVjX29m Zl9zdHIpOworICAgICAgICBtYWtlc3RyKCZkaWFsaGNtZCAscC0+aHVwX3N0cik7CisgICAgICAg IG1ha2VzdHIoJmRpYWxod2ZjICxwLT5od2ZjX3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWxz d2ZjICxwLT5zd2ZjX3N0cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWxub2ZjICxwLT5ub2ZjX3N0 cik7CisgICAgICAgIG1ha2VzdHIoJmRpYWx0b25lICxwLT50b25lKTsKKyAgICAgICAgbWFrZXN0 cigmZGlhbHB1bHNlLHAtPnB1bHNlKTsKKyAgICAgICAgbWFrZXN0cigmZGlhbG5hbWUgLCJUaGlz IHNwYWNlIGF2YWlsYWJsZSAodXNlIFNFVCBNT0RFTSBOQU1FKSIpOworICAgICAgICBtYWtlc3Ry KCZkaWFsYWFvbiAscC0+YWFfb25fc3RyKTsKKyAgICAgICAgbWFrZXN0cigmZGlhbGFhb2ZmLHAt PmFhX29mZl9zdHIpOworICAgICAgICBtYWtlc3RyKCZkaWFseDMgICAscC0+aWdub3JlZHQpOwor ICAgICAgICBtYWtlc3RyKCZkaWFsc3BvbiAscC0+c3Bfb25fc3RyKTsKKyAgICAgICAgbWFrZXN0 cigmZGlhbHNwb2ZmLHAtPnNwX29mZl9zdHIpOworICAgICAgICBtYWtlc3RyKCZkaWFsdm9sMSAs cC0+dm9sMV9zdHIpOworICAgICAgICBtYWtlc3RyKCZkaWFsdm9sMiAscC0+dm9sMl9zdHIpOwor ICAgICAgICBtYWtlc3RyKCZkaWFsdm9sMyAscC0+dm9sM19zdHIpOworICAgICAgICBtYWtlc3Ry KCZkaWFsaW5pMiAscC0+aW5pMik7CisKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg LyogTm90IHVzZXItZGVmaW5lZCwgc28gd2lwZSBvdXQgb3ZlcnJpZGVzICovCisKKyAgICAgICAg aWYgKGRpYWxpbmkpICAgbWFrZXN0cigmZGlhbGluaSxOVUxMKTsgICAvKiBJbml0LXN0cmluZyAq LworICAgICAgICBpZiAoZGlhbG1zdHIpICBtYWtlc3RyKCZkaWFsbXN0cixOVUxMKTsgIC8qIERp YWwtbW9kZS1zdHIgKi8KKyAgICAgICAgaWYgKGRpYWxtcHJtdCkgbWFrZXN0cigmZGlhbG1wcm10 LE5VTEwpOyAvKiBEaWFsLW1vZGUtcHJvICovCisgICAgICAgIGlmIChkaWFsY21kKSAgIG1ha2Vz dHIoJmRpYWxjbWQsTlVMTCk7ICAgLyogRGlhbC1jb21tYW5kICAqLworICAgICAgICBpZiAoZGlh bGRjb24pICBtYWtlc3RyKCZkaWFsZGNvbixOVUxMKTsgIC8qIERDIE9OIGNvbW1hbmQgKi8KKyAg ICAgICAgaWYgKGRpYWxkY29mZikgbWFrZXN0cigmZGlhbGRjb2ZmLE5VTEwpOyAvKiBEQyBPRkYg Y29tbWFuZCAqLworICAgICAgICBpZiAoZGlhbGVjb24pICBtYWtlc3RyKCZkaWFsZWNvbixOVUxM KTsgIC8qIEVDIE9OIGNvbW1hbmQgKi8KKyAgICAgICAgaWYgKGRpYWxlY29mZikgbWFrZXN0cigm ZGlhbGVjb2ZmLE5VTEwpOyAvKiBFQyBPRkYgY29tbWFuZCAqLworICAgICAgICBpZiAoZGlhbGhj bWQpICBtYWtlc3RyKCZkaWFsaGNtZCxOVUxMKTsgIC8qIEhhbmd1cCBjb21tYW5kICovCisgICAg ICAgIGlmIChkaWFsaHdmYykgIG1ha2VzdHIoJmRpYWxod2ZjLE5VTEwpOyAgLyogRmxvdyBjb250 cm9sLi4uICovCisgICAgICAgIGlmIChkaWFsc3dmYykgIG1ha2VzdHIoJmRpYWxzd2ZjLE5VTEwp OyAgLyogICovCisgICAgICAgIGlmIChkaWFsbm9mYykgIG1ha2VzdHIoJmRpYWxub2ZjLE5VTEwp OyAgLyogICovCisgICAgICAgIGlmIChkaWFsdG9uZSkgIG1ha2VzdHIoJmRpYWx0b25lLE5VTEwp OyAgLyogRGlhbGluZyBtZXRob2QgKi8KKyAgICAgICAgaWYgKGRpYWxwdWxzZSkgbWFrZXN0cigm ZGlhbHB1bHNlLE5VTEwpOyAvKiAgKi8KKyAgICAgICAgaWYgKGRpYWxuYW1lKSAgbWFrZXN0cigm ZGlhbG5hbWUsTlVMTCk7ICAvKiBNb2RlbSBuYW1lICovCisgICAgICAgIGlmIChkaWFsYWFvbikg IG1ha2VzdHIoJmRpYWxhYW9uLE5VTEwpOyAgLyogQXV0b2Fuc3dlciBPbiAqLworICAgICAgICBp ZiAoZGlhbGFhb2ZmKSBtYWtlc3RyKCZkaWFsYWFvZmYsTlVMTCk7IC8qIEF1dG9hbnN3ZXIgT2Zm ICovCisgICAgICAgIGlmIChkaWFseDMpICAgIG1ha2VzdHIoJmRpYWx4MyxOVUxMKTsgICAgLyog SWdub3JlIGRpYWx0b25lICovCisgICAgICAgIGlmIChkaWFsc3BvbikgIG1ha2VzdHIoJmRpYWxz cG9uLE5VTEwpOyAgLyogU3BlYWtlciBPbiAqLworICAgICAgICBpZiAoZGlhbHNwb2ZmKSBtYWtl c3RyKCZkaWFsc3BvZmYsTlVMTCk7IC8qIFNwZWFrZXIgT2ZmICovCisgICAgICAgIGlmIChkaWFs dm9sMSkgIG1ha2VzdHIoJmRpYWx2b2wxLE5VTEwpOyAgLyogTG93IHZvbHVtZSAqLworICAgICAg ICBpZiAoZGlhbHZvbDIpICBtYWtlc3RyKCZkaWFsdm9sMixOVUxMKTsgIC8qIE1lZGl1bSB2b2x1 bWUgKi8KKyAgICAgICAgaWYgKGRpYWx2b2wzKSAgbWFrZXN0cigmZGlhbHZvbDMsTlVMTCk7ICAv KiBIaWdoIHZvbHVtZSAqLworICAgICAgICBpZiAoZGlhbGluaTIpICBtYWtlc3RyKCZkaWFsaW5p MixOVUxMKTsgIC8qIEluaXQgc3RyaW5nIDIgKi8KKyAgICB9CisgICAgaWYgKGF1dG9mbG93KSAg ICAgICAgICAgICAgICAgICAgICAgLyogTWF5YmUgY2hhbmdlIGZsb3cgY29udHJvbCAqLworICAg ICAgc2V0ZmxvdygpOworCisjaWZuZGVmIE1JTklESUFMCisjaWZkZWYgT0xEVEJDT0RFCisgICAg dGJtb2RlbCA9IDA7ICAgICAgICAgICAvKiBJZiBpdCdzIGEgVGVsZWJpdCwgd2UgZG9uJ3Qga25v dyB0aGUgbW9kZWwgeWV0ICovCisjZW5kaWYgLyogT0xEVEJDT0RFICovCisjZW5kaWYgLyogTUlO SURJQUwgKi8KK30KKworI2lmZGVmIENPTU1FTlQKKy8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8K K2ludAorc2V0YW5zd2VyKCkgeworICAgIGludCB4LCB5OworICAgIGV4dGVybiBpbnQgYW5zX2Np ZCwgYW5zX3Jpbmc7CisgICAgaWYgKCh4ID0gY21rZXkoYW5zd2VydGFiLG5hbnN3ZXJ0YWIsIiIs IiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgc3dpdGNoICh4KSB7Cisg ICAgICBjYXNlIFhZQV9DSUQ6CisgICAgICAgIHJldHVybihzZXRvbigmYW5zX2NpZCkpOworICAg ICAgY2FzZSBYWUFfUk5HOgorICAgICAgICB5ID0gY21udW0oIkhvdyBtYW55IHJpbmdzIGJlZm9y ZSBhbnN3ZXJpbmciLCIxIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIHkgPSBzZXRudW0oJmFu c19yaW5ncyx4LHksMjU0KTsKKyAgICAgICAgcmV0dXJuKHkpOworICAgIH0KK30KKyNlbmRpZiAv KiBDT01NRU5UICovCisKK2ludAorc2V0bW9kZW0oKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBNT0RFTSAqLworCisgICAgaW50IHgsIHksIHo7CisgICAgbG9uZyB6ejsKKyAg ICBzdHJ1Y3QgRkRCIGsxLCBrMjsKKyAgICBleHRlcm4gaW50IG1kbXNldDsKKworICAgIGNtZmRi aSgmazEsX0NNS0VZLAorICAgICAgICAgICAiTW9kZW0gcGFyYW1ldGVyIiwiIiwiIixuc2V0bWRt LCAwLCB4eHN0cmluZywgc2V0bWRtLCAmazIpOworICAgIGNtZmRiaSgmazIsX0NNS0VZLCIiLCIi LCIiLG5tZG0sMCx4eHN0cmluZyxtZG10YWIsTlVMTCk7CisgICAgeCA9IGNtZmRiKCZrMSk7Cisg ICAgaWYgKHggPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgKi8KKyAgICAg ICAgaWYgKHggPT0gLTIgfHwgeCA9PSAtOSkKKyAgICAgICAgICBwcmludGYoIj9ObyBrZXl3b3Jk cyBtYXRjaDogXCIlc1wiXG4iLGF0bWJ1Zik7CisgICAgICAgIHJldHVybih4KTsKKyAgICB9Cisg ICAgeSA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgICAgICAgLyogS2V5d29yZCB2YWx1ZSAq LworICAgIGlmIChjbXJlc3VsdC5mZGJhZGRyID09ICZrMikgeyAgICAgIC8qIE1vZGVtLXR5cGUg a2V5d29yZCB0YWJsZSAqLworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAg ICAgcmV0dXJuKHgpOworICAgICAgICB1c2VybWRtID0gMDsKKyAgICAgICAgaW5pdG1kbShjbXJl c3VsdC5ucmVzdWx0KTsgICAgICAvKiBTZXQgdGhlIG1vZGVtIHR5cGUuICovCisgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7ICAgICAgICAgICAgLyogRG9uZSAqLworICAgIH0KKyAgICBzd2l0 Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsgICAgICAgICAvKiBTRVQgTU9ERU0ga2V5d29yZCB0YWJs ZS4gKi8KKyNpZmRlZiBNRE1IVVAKKyAgICAgIGNhc2UgWFlETUhVOiAgICAgICAgICAgICAgICAg ICAgICAvKiBESUFMIE1PREVNLUhBTkdVUCAqLworICAgICAgICBpZiAoKHkgPSBjbWtleShtZG1o YW5nLDQsImhvdyB0byBoYW5nIHVwIG1vZGVtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIm1v ZGVtLWNvbW1hbmQiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg IGRpYWxtaHUgPSB5OworI2lmZGVmIENPTU1FTlQKKy8qIE5vcGUsIEkgZml4ZWQgaXQgKDIwMDEg MTEgMDgpICovCisjaWZkZWYgQ0tfU0NPVjUKKyAgICAgICAgaWYgKGRpYWxtaHUgPT0gMCAmJiAh cXVpZXQpIHsKKyAgICAgICAgICAgIHByaW50ZigKKyJcbiBXQVJOSU5HOiBSUy0yMzIgc2lnbmFs IHNhbXBsaW5nIGFuZCBtYW5pcHVsYXRpb24gZG8gbm90IHdvcmtcbiIKKyAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgIHByaW50ZigKKyIgaW4gdGhlIHN0YW5kYXJkIFNDTyBPU1I1 IHNlcmlhbCBpL28gZHJpdmVycy4gIFNFVCBNT0RFTSBIQU5HVVAtTUVUSE9EXG4iCisgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHByaW50ZigKKyIgTU9ERU0tQ09NTUFORCBpcyBy ZWNvbW1lbmRlZCBmb3IgT1NSNS5cblxuIgorICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICB9CisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogTURNSFVQICovCisKKyAgICAgIGNhc2Ug WFlEQ0FQOgorICAgICAgICB6eiA9IDBMOworICAgICAgICB5ID0gMDsKKyAgICAgICAgd2hpbGUg KHkgIT0gLTMpIHsKKyAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KG1kbWNhcCxubWRtY2FwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhcGFiaWxpdHkgb2YgbW9kZW0iLCAiIiwgeHhz dHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKKyAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHJl dHVybih5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHp6IHw9IHk7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgZGlhbGNhcGFzID0geno7CisgICAgICAgIGRlYnVnKEYxMDEsInNldG1vZGVtIGF1dG9m bG93IiwiIixhdXRvZmxvdyk7CisgICAgICAgIGRlYnVnKEYxMDEsInNldG1vZGVtIGZsb3cgMSIs IiIsZmxvdyk7CisgICAgICAgIGlmIChhdXRvZmxvdykgICAgICAgICAgICAgICAgICAgLyogTWF5 YmUgY2hhbmdlIGZsb3cgY29udHJvbCAqLworICAgICAgICAgIHNldGZsb3coKTsKKyAgICAgICAg ZGVidWcoRjEwMSwic2V0bW9kZW0gZmxvdyAyIiwiIixmbG93KTsKKyAgICAgICAgbWRtc3BkID0g enogJiBDS0RfU0IgPyAwIDogMTsgICAvKiBTZXQgTU9ERU0gU1BFRUQtTUFUQ0hJTkcgZnJvbSBp dC4gKi8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYWURNQVg6 CisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICBpZiAobmV0d29yayAmJiBpc3RuY29tcG9ydCgp KQorICAgICAgICAgIHggPSBjbWtleSh0bnNwZHRhYixudG5zcGQsbGluZSwiIix4eHN0cmluZyk7 CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgICAgICAgeCA9IGNt a2V5KHNwZHRhYixuc3BkLGxpbmUsIiIseHhzdHJpbmcpOworICAgICAgICBpZiAoeCA8IDApIHsK KyAgICAgICAgICAgIGlmICh4ID09IC0zKSBwcmludGYoIj92YWx1ZSByZXF1aXJlZFxuIik7Cisg ICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGRpYWxtYXggPSAobG9uZykgeCAqIDEwTDsKKyAg ICAgICAgaWYgKGRpYWxtYXggPT0gNzApIGRpYWxtYXggPSA3NTsKKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYWURTVFI6ICAgICAgICAgICAgICAgICAgICAgIC8q IFRoZXNlIG1vdmVkIGZyb20gU0VUIERJQUwgKi8KKyAgICAgIGNhc2UgWFlEREM6CisgICAgICBj YXNlIFhZREVDOgorICAgICAgY2FzZSBYWURFU0M6CisgICAgICBjYXNlIFhZREZDOgorICAgICAg Y2FzZSBYWURLU1A6CisgICAgICBjYXNlIFhZRFNQRDoKKyAgICAgIGNhc2UgWFlERElBOgorICAg ICAgICByZXR1cm4oc2V0ZGlhbCh4KSk7CisKKyAgICAgIGNhc2UgWFlEVFlQOgorICAgICAgICBp ZiAoKHkgPSBjbWtleShtZG10YWIsbm1kbSwibW9kZW0gdHlwZSIsIm5vbmUiLCB4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh5ID09IGRpYWx1ZHQpIHsg ICAgICAgICAgICAgLyogVXNlci1kZWZpbmVkIG1vZGVtIHR5cGUgKi8KKyAgICAgICAgICAgIGlm ICgoeCA9IGNta2V5KG1kbXRhYixubWRtLCJiYXNlZCBvbiBleGlzdGluZyBtb2RlbSB0eXBlIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIiwgeHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHogPSBjbWNm bSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICB1c2VybWRtID0gMDsKKyAg ICAgICAgdXNlcm1kbSA9ICh5ID09IGRpYWx1ZHQpID8geCA6IDA7CisgICAgICAgIGluaXRtZG0o eSk7CisgICAgICAgIG1kbXNldCA9IChtZG10eXAgPiAwKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKKworICAgICAgY2FzZSBYWUROQU06CisgICAgICAgIHJldHVybihkaWFsc3RyKCZk aWFsbmFtZSwiRGVzY3JpcHRpdmUgbmFtZSBmb3IgbW9kZW0iKSk7CisKKyAgICAgIGNhc2UgWFlE TUNEOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTU9ERU0gQ0FSUklFUi1XQVRDSCAqLwor ICAgICAgICByZXR1cm4oc2V0ZGNkKCkpOworCisgICAgICBjYXNlIFhZRFNQSzogICAgICAgICAg ICAgICAgICAgICAgLyogU0VUIE1PREVNIFNQRUFLRVIgKi8KKyAgICAgICAgcmV0dXJuKHNldG9u KCZtZG1zcGspKTsKKworICAgICAgY2FzZSBYWURWT0w6ICAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBNT0RFTSBWT0xVTUUgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkodm9sdGFiLDMsIiIs Im1lZGl1bSIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBtZG12 b2wgPSB4OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBkZWZhdWx0Ogor ICAgICAgICBwcmludGYoIlVuZXhwZWN0ZWQgU0VUIE1PREVNIHBhcmFtZXRlclxuIik7CisgICAg ICAgIHJldHVybigtOSk7CisgICAgfQorfQorCitzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogU2V0IERJQUwgY29tbWFuZCBvcHRpb25zICovCitzZXRkaWFsKHkpIGlu dCB5OyB7CisgICAgaW50IHggPSAwLCB6ID0gMDsKKyAgICBjaGFyICpzID0gTlVMTDsKKworICAg IGlmICh5IDwgMCkKKyAgICAgIGlmICgoeSA9IGNta2V5KGRpYWx0YWIsbmRpYWwsIiIsIiIseHhz dHJpbmcpKSA8IDApCisgICAgICAgIHJldHVybih5KTsKKyAgICBzd2l0Y2ggKHkpIHsKKyAgICAg IGNhc2UgWFlESFVQOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIEhBTkdVUCAqLworICAg ICAgICByZXR1cm4oc2V0b24oJmRpYWxobmcpKTsKKyAgICAgIGNhc2UgWFlESU5JOiAgICAgICAg ICAgICAgICAgICAgICAvKiBESUFMIElOSVQtU1RSSU5HICovCisgICAgICAgIHJldHVybihkaWFs c3RyKCZkaWFsaW5pLCJNb2RlbSBpbml0aWFsaXphdGlvbiBzdHJpbmciKSk7CisgICAgICBjYXNl IFhZRE5QUjogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBQUkVGSVggKi8KKyAgICAgICAg cmV0dXJuKGRpYWxzdHIoJmRpYWxucHIsIlRlbGVwaG9uZSBudW1iZXIgcHJlZml4IikpOworICAg ICAgY2FzZSBYWURESUE6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgRElBTC1DT01NQU5E ICovCisgICAgICAgIHggPSBjbXR4dCgiRGlhbGluZyBjb21tYW5kIGZvciBtb2RlbSxcblwKKyBp bmNsdWRlIFwiJXNcIiB0byBzdGFuZCBmb3IgcGhvbmUgbnVtYmVyLFxuXAorIGZvciBleGFtcGxl LCBcInNldCBkaWFsIGRpYWwtY29tbWFuZCBBVERUJXNcXDEzXCIiLAorICAgICAgICAgICAgICAg ICAgIiIsCisgICAgICAgICAgICAgICAgICAmcywKKyAgICAgICAgICAgICAgICAgIHh4c3RyaW5n KTsKKyAgICAgICAgaWYgKHggPCAwICYmIHggIT0gLTMpICAgICAgICAgICAvKiBIYW5kbGUgcGFy c2UgZXJyb3JzICovCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBzID0gYnJzdHJpcChz KTsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIGJyYWNlcyBvciBxdW90ZXMgKi8KKyAgICAgICAg eSA9IHggPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAvKiBHZXQgbGVuZ3RoIG9mIHRleHQgKi8K KyAgICAgICAgaWYgKHkgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBh bnkgdGV4dCAobGVmdCksICovCisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSB7 ICAgLyogbWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQgIiVzIiAqLworICAgICAgICAgICAgICAgIGlm IChzW3hdICE9ICclJykgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHNbeCsxXSA9PSAn cycpIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHggPT0geSkgeworICAg ICAgICAgICAgICAgIHByaW50ZigKKyI/RGlhbC1jb21tYW5kIG11c3QgY29udGFpbiBcIiVjc1wi IGZvciBwaG9uZSBudW1iZXIuXG4iLCclJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZGlhbGNtZCkgeyAgICAgICAg ICAgICAgICAgIC8qIEZyZWUgYW55IHByZXZpb3VzIHN0cmluZy4gKi8KKyAgICAgICAgICAgIGZy ZWUoZGlhbGNtZCk7CisgICAgICAgICAgICBkaWFsY21kID0gKGNoYXIgKikgMDsKKyAgICAgICAg fQorICAgICAgICBpZiAoeSA+IDApIHsKKyAgICAgICAgICAgIGRpYWxjbWQgPSBtYWxsb2MoeSAr IDEpOyAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgaXQgKi8KKyAgICAgICAgICAgIGlmIChkaWFs Y21kKQorICAgICAgICAgICAgICBzdHJjcHkoZGlhbGNtZCxzKTsgICAgICAgIC8qIGFuZCBtYWtl IGEgc2FmZSBjb3B5LiAqLworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 CisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBYWURLU1A6ICAgICAgICAgICAgICAgICAgICAg IC8qIERJQUwgS0VSTUlULVNQT09GICovCisgICAgICAgIHJldHVybihzZXRvbigmZGlhbGtzcCkp OworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgY2FzZSBYWURUTU86ICAgICAgICAgICAgICAg ICAgICAgIC8qIERJQUwgVElNRU9VVCAqLworICAgICAgICB5ID0gY21udW0oIlNlY29uZHMgdG8g d2FpdCBmb3IgY2FsbCBjb21wbGV0aW9uIiwiMCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICBp ZiAoeSA8IDApIHJldHVybih5KTsKKyAgICAgICAgeSA9IGNtbnVtKCJLZXJtaXQvbW9kZW0gdGlt ZW91dCBkaWZmZXJlbnRpYWwiLCIxMCIsMTAsJnoseHhzdHJpbmcpOworICAgICAgICBpZiAoeSA8 IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAg IHJldHVybih5KTsKKyAgICAgICAgZGlhbHRtbyA9IHg7CisgICAgICAgIG1kbXdhaXRkID0gejsK KyAgICAgIGNhc2UgWFlERVNDOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIEVTQ0FQRS1D SEFSQUNURVIgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJBU0NJSSB2YWx1ZSBvZiBjaGFyYWN0ZXIg dG8gZXNjYXBlIGJhY2sgdG8gbW9kZW0iLAorICAgICAgICAgICAgICAgICAgIjQzIiwxMCwmeCx4 eHN0cmluZyk7CisgICAgICAgIHkgPSBzZXRudW0oJmRpYWxlc2MseCx5LDEyOCk7CisgICAgICAg IGlmICh5ID4gLTEgJiYgZGlhbGVzYyA8IDApICAgICAgLyogTm8gZXNjYXBlIGNoYXJhY3RlciAq LworICAgICAgICAgIGRpYWxtaHUgPSAwOyAgICAgICAgICAgICAgICAgIC8qIFNvIG5vIGhhbmd1 cCBieSBtb2RlbSBjb21tYW5kICovCisgICAgICAgIHJldHVybih5KTsKKyAgICAgIGNhc2UgWFlE RFBZOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIERJU1BMQVkgKi8KKyAgICAgICAgcmV0 dXJuKHNldG9uKCZkaWFsZHB5KSk7CisgICAgICBjYXNlIFhZRFNQRDogICAgICAgICAgICAgICAg ICAgICAgLyogRElBTCBTUEVFRC1NQVRDSElORyAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHVzZWQgdG8gYmUgc3BlZWQtY2hhbmdpbmcgKi8KKyAgICAgICAg aWYgKCh5ID0gc2V0b24oJm1kbXNwZCkpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgbWRtc3BkID0gMSAtIG1kbXNwZDsgICAgICAgICAgICAvKiBzbyBoZXJlIHdlIHJl dmVyc2UgdGhlIG1lYW5pbmcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisgICAgICBjYXNlIFhZRE1OUDogICAgICAgICAgICAgICAgICAgICAg LyogRElBTCBNTlAtRU5BQkxFICovCisgICAgICBjYXNlIFhZREVDOiAgICAgICAgICAgICAgICAg ICAgICAgLyogRElBTCBFUlJPUi1DT1JSRUNUSU9OICovCisgICAgICAgIHggPSBzZXRvbigmZGlh bGVjKTsKKyAgICAgICAgaWYgKHggPiAwKQorICAgICAgICAgIGlmICghZGlhbGVjKSBkaWFsZGMg PSAwOyAgICAgIC8qIE9GRiBhbHNvIHR1cm5zIG9mZiBjb21wcmVzc2lvbiAqLworICAgICAgICBy ZXR1cm4oeCk7CisKKyAgICAgIGNhc2UgWFlEREM6ICAgICAgICAgICAgICAgICAgICAgICAvKiBE SUFMIENPTVBSRVNTSU9OICovCisgICAgICAgIHggPSBzZXRvbigmZGlhbGRjKTsKKyAgICAgICAg aWYgKHggPiAwKQorICAgICAgICAgIGlmIChkaWFsZGMpIGRpYWxlYyA9IDE7ICAgICAgIC8qIE9O IGFsc28gdHVybnMgb24gZXJyb3IgY29ycmVjdGlvbiAqLworICAgICAgICByZXR1cm4oeCk7CisK KyNpZmRlZiBNRE1IVVAKKyAgICAgIGNhc2UgWFlETUhVOiAgICAgICAgICAgICAgICAgICAgICAv KiBESUFMIE1PREVNLUhBTkdVUCAqLworICAgICAgICByZXR1cm4oc2V0b24oJmRpYWxtaHUpKTsK KyNlbmRpZiAvKiBNRE1IVVAgKi8KKworI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBYWURESVI6 ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgRElSRUNUT1JZICh6ZXJvIG9yIG1vcmUpICov CisgICAgICAgIHJldHVybihwYXJzZGlyKDApKTsgICAgICAgICAgICAgLyogMCBtZWFucyBESUFM ICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgICAgY2FzZSBYWURTVFI6ICAgICAgICAgICAg ICAgICAgICAgIC8qIERJQUwgU1RSSU5HICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KG1kbWNt ZCxubWRtY21kLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHN3aXRj aCAoeSkgeworICAgICAgICAgIGNhc2UgWFlEU19BTjogICAgICAgICAgICAgICAgIC8qIEF1dG9h bnN3ZXIgT04vT0ZGICovCisgICAgICAgICAgY2FzZSBYWURTX0RDOiAgICAgICAgICAgICAgICAg LyogRGF0YSBjb21wcmVzc2lvbiBPTi9PRkYgKi8KKyAgICAgICAgICBjYXNlIFhZRFNfRUM6ICAg ICAgICAgICAgICAgICAvKiBFcnJvciBjb3JyZWN0aW9uIE9OL09GRiAqLworICAgICAgICAgICAg aWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwiTW9kZW0ncyBjb21t YW5kIHRvICVzYWJsZSAlcyIsIC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgICAgeCA/ICJl biIgOiAiZGlzIiwKKyAgICAgICAgICAgICAgICAgICAgKHkgPT0gWFlEU19EQykgPyAiY29tcHJl c3Npb24iIDoKKyAgICAgICAgICAgICAgICAgICAgKCh5ID09IFhZRFNfRUMpID8gImVycm9yLWNv cnJlY3Rpb24iIDoKKyAgICAgICAgICAgICAgICAgICAgImF1dG9hbnN3ZXIiKQorICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgICAgICBpZiAo eSA9PSBYWURTX0RDKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxkY29u LHRtcGJ1ZikpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHkgPT0gWFlEU19FQykKKyAgICAg ICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsZWNvbix0bXBidWYpKTsKKyAgICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGFhb24s dG1wYnVmKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh5ID09 IFhZRFNfREMpCisgICAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGRjb2ZmLHRt cGJ1ZikpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHkgPT0gWFlEU19FQykKKyAgICAgICAg ICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsZWNvZmYsdG1wYnVmKSk7CisgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxhYW9mZix0 bXBidWYpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFhZRFNfSFU6ICAgICAgICAg ICAgICAgICAvKiAgICBoYW5ndXAgY29tbWFuZCAqLworICAgICAgICAgICAgcmV0dXJuKGRpYWxz dHIoJmRpYWxoY21kLCJNb2RlbSdzIGhhbmd1cCBjb21tYW5kIikpOworICAgICAgICAgIGNhc2Ug WFlEU19IVzogICAgICAgICAgICAgICAgIC8qICAgIGh3ZmMgKi8KKyAgICAgICAgICAgIHJldHVy bihkaWFsc3RyKCZkaWFsaHdmYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb2RlbSdz IGNvbW1hbmQgdG8gZW5hYmxlIGhhcmR3YXJlIGZsb3cgY29udHJvbCIpKTsKKyAgICAgICAgICBj YXNlIFhZRFNfSU46ICAgICAgICAgICAgICAgICAvKiAgICBpbml0ICovCisgICAgICAgICAgICBy ZXR1cm4oZGlhbHN0cigmZGlhbGluaSwiTW9kZW0ncyBpbml0aWFsaXphdGlvbiBzdHJpbmciKSk7 CisgICAgICAgICAgY2FzZSBYWURTX05GOiAgICAgICAgICAgICAgICAgLyogICAgbm8gZmxvdyBj b250cm9sICovCisgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbG5vZmMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAiTW9kZW0ncyBjb21tYW5kIHRvIGRpc2FibGUgbG9jYWwgZmxv dyBjb250cm9sIikpOworICAgICAgICAgIGNhc2UgWFlEU19QWDogICAgICAgICAgICAgICAgIC8q ICAgIHByZWZpeCAqLworICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxucHIsIlRlbGVw aG9uZSBudW1iZXIgcHJlZml4IGZvciBkaWFsaW5nIikpOworICAgICAgICAgIGNhc2UgWFlEU19T VzogICAgICAgICAgICAgICAgIC8qICAgIHN3ZmMgKi8KKyAgICAgICAgICAgIHJldHVybihkaWFs c3RyKCZkaWFsc3dmYywKKyAgICAgICAgICAgICAgICAgICAiTW9kZW0ncyBjb21tYW5kIHRvIGVu YWJsZSBsb2NhbCBzb2Z0d2FyZSBmbG93IGNvbnRyb2wiKSk7CisgICAgICAgICAgY2FzZSBYWURT X0RUOiAgICAgICAgICAgICAgICAgLyogICAgdG9uZSBkaWFsaW5nICovCisgICAgICAgICAgICBy ZXR1cm4oZGlhbHN0cigmZGlhbHRvbmUsCisgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgdG8g Y29uZmlndXJlIG1vZGVtIGZvciB0b25lIGRpYWxpbmciKSk7CisgICAgICAgICAgY2FzZSBYWURT X0RQOiAgICAgICAgICAgICAgICAgLyogICAgcHVsc2UgZGlhbGluZyAqLworICAgICAgICAgICAg cmV0dXJuKGRpYWxzdHIoJmRpYWxwdWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJD b21tYW5kIHRvIGNvbmZpZ3VyZSBtb2RlbSBmb3IgcHVsc2UgZGlhbGluZyIpKTsKKyAgICAgICAg ICBjYXNlIFhZRFNfTVM6ICAgICAgICAgICAgICAgICAvKiAgICBkaWFsIG1vZGUgc3RyaW5nICov CisgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbG1zdHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIkNvbW1hbmQgdG8gZW50ZXIgZGlhbCBtb2RlIikpOworICAgICAgICAgIGNhc2Ug WFlEU19NUDogICAgICAgICAgICAgICAgIC8qICAgIGRpYWwgbW9kZSBwcm9tcHQgKi8KKyAgICAg ICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsbXBybXQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAiTW9kZW0gcmVzcG9uc2UgdXBvbiBlbnRlcmluZyBkaWFsIG1vZGUiKSk7CisgICAgICAg ICAgY2FzZSBYWURTX1NQOiAgICAgICAgICAgICAgICAgLyogU1BFQUtFUiBPRkYgKi8KKyAgICAg ICAgICAgIGlmICgoeCA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0 dXJuKHgpOworICAgICAgICAgICAgaWYgKHgpCisgICAgICAgICAgICAgIHJldHVybihkaWFsc3Ry KCZkaWFsc3BvbiwiQ29tbWFuZCB0byB0dXJuIG1vZGVtIHNwZWFrZXIgb24iKSk7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFsc3BvZmYsIkNvbW1h bmQgdG8gdHVybiBtb2RlbSBzcGVha2VyIG9mZiIpKTsKKworICAgICAgICAgIGNhc2UgWFlEU19W TzogICAgICAgICAgICAgICAgIC8qIFZPTFVNRSBMT1cgKi8KKyAgICAgICAgICAgIGlmICgoeCA9 IGNta2V5KHZvbHRhYiwzLCIiLCJtZWRpdW0iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Cisg ICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAg ICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWx2b2wxLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kIGZvciBsb3cgbW9kZW0gc3Bl YWtlciB2b2x1bWUiKSk7CisgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBy ZXR1cm4oZGlhbHN0cigmZGlhbHZvbDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29t bWFuZCBmb3IgbWVkaXVtIG1vZGVtIHNwZWFrZXIgdm9sdW1lIikpOworCisgICAgICAgICAgICAg IGNhc2UgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHZvbDMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgZm9yIGhpZ2ggbW9kZW0gc3BlYWtl ciB2b2x1bWUiKSk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0 dXJuKC0yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGNhc2UgWFlEU19JRDogICAgICAg ICAgICAgICAgIC8qIElHTk9SRS1ESUFMVE9ORSAqLworICAgICAgICAgICAgcmV0dXJuKGRpYWxz dHIoJmRpYWx4MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21tYW5kIHRvIHRlbGwg bW9kZW0gdG8gaWdub3JlIGRpYWx0b25lIikpOworCisgICAgICAgICAgY2FzZSBYWURTX0kyOiAg ICAgICAgICAgICAgICAgLyogUFJFRElBTC1JTklUICovCisgICAgICAgICAgICByZXR1cm4oZGlh bHN0cigmZGlhbGluaTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCB0byBz ZW5kIHRvIG1vZGVtIGp1c3QgcHJpb3IgdG8gZGlhbGluZyIpKTsKKworICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIFNFVCBESUFMIFNUUklORyBwYXJh bWV0ZXJcbiIpOworICAgICAgICB9CisKKyAgICAgIGNhc2UgWFlERkM6ICAgICAgICAgICAgICAg ICAgICAgICAvKiBESUFMIEZMT1ctQ09OVFJPTCAqLworICAgICAgICBpZiAoKHkgPSBjbWtleShk aWFsX2ZjLDQsIiIsImF1dG8iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBkaWFsZmMgPSB5OworICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZRE1USDogeyAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBNRVRIT0QgKi8KKyAgICAgICAgZXh0ZXJuIGludCBkaWFsbWF1 dG87CisgICAgICAgIGlmICgoeSA9IGNta2V5KGRpYWxfbSxuZGlhbF9tLCIiLCJkZWZhdWx0Iix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmICh5ID09IFhZRE1f QSkgeyAgICAgICAgICAgICAgLyogQVVUTyAqLworICAgICAgICAgICAgZGlhbG1hdXRvID0gMTsg ICAgICAgICAgICAgIC8qIGxvY2FsIGNvdW50cnkgY29kZSwgaWYga25vd24uICovCisgICAgICAg ICAgICBkaWFsbXRoID0gWFlETV9EOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGRpYWxt YXV0byA9IDA7ICAgICAgICAgICAgICAgIC8qIHVzZSB0aGUgbWV0aG9kIHNwZWNpZmllZCAqLwor ICAgICAgICAgIGRpYWxtdGggPSB5OworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7CisgICAgICB9CisgICAgICBjYXNlIFhZRFJUTToKKyAgICAgICAgeSA9IGNtbnVtKCJO dW1iZXIgb2YgdGltZXMgdG8gdHJ5IGRpYWxpbmcgYSBudW1iZXIiLAorICAgICAgICAgICAgICAg ICAgIjEiLDEwLCZ4LHh4c3RyaW5nKTsKKwl6ID0gc2V0bnVtKCZkaWFscnRyLHgseSwtMSk7CisJ aWYgKHogPiAtMSAmJiBkaWFscnRyIDwgMCkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgbmVnYXRp dmUgZGlhbCByZXRyaWVzIG5vdCB2YWxpZDogJWRcbiIsZGlhbHJ0cik7CisJICAgIHJldHVybigt OSk7CisJfQorICAgICAgICByZXR1cm4oeik7CisKKyAgICAgIGNhc2UgWFlESU5UOgorICAgICAg ICB5ID0gY21udW0oIlNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIHJlZGlhbCBhdHRlbXB0cyIsCisg ICAgICAgICAgICAgICAgICAiMzAiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgeiA9IHNldG51 bSgmZGlhbGludCx4LHksLTEpOworCWlmICh6ID4gLTEgJiYgZGlhbGludCA8IDApIHsKKwkgICAg cHJpbnRmKCI/U29ycnksIG5lZ2F0aXZlIGRpYWwgaW50ZXJ2YWwgbm90IHZhbGlkOiAlZFxuIixk aWFsaW50KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgICAgIHJldHVybih6KTsKKworICAg ICAgY2FzZSBYWURMQUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQVJFQS1DT0RFICov CisgICAgICAgIGlmICgoeCA9IGRpYWxzdHIoJmRpYWxsYWMsIkFyZWEgY29kZSB5b3UgYXJlIGNh bGxpbmcgZnJvbSIpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoZGlh bGxhYykgeworICAgICAgICAgICAgaWYgKCFyZGlnaXRzKGRpYWxsYWMpKSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/U29ycnksIGFyZWEgY29kZSBtdXN0IGJlIG51bWVyaWNcbiIpOworICAg ICAgICAgICAgICAgIGlmICgqZGlhbGxhYyA9PSAnKCcpCisgICAgICAgICAgICAgICAgICBwcmlu dGYoIihwbGVhc2Ugb21pdCB0aGUgcGFyZW50aGVzZXMpXG4iKTsKKyAgICAgICAgICAgICAgICBp ZiAoKmRpYWxsYWMgPT0gJy8nKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIobm8gc2xhc2hl cywgcGxlYXNlKVxuIik7CisgICAgICAgICAgICAgICAgaWYgKGRpYWxsYWMpIGZyZWUoZGlhbGxh Yyk7CisgICAgICAgICAgICAgICAgZGlhbGxhYyA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4oeCk7CisK KyAgICAgIGNhc2UgWFlEQ05GOiAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GSVJNQVRJT04g Ki8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmZGlhbGNuZikpOworCisgICAgICBj YXNlIFhZRENWVDogICAgICAgICAgICAgICAgICAgICAgLyogQ09OVkVSVC1ESVJFQ1RPUlkgKi8K KyAgICAgICAgaWYgKCh5ID0gY21rZXkoZGNudnRhYiwzLCIiLCJhc2siLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQor ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgZGlhbGN2dCA9IHk7CisgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlETENDOiAgICAgICAgICAgICAgICAgICAg ICAvKiBESUFMIENPVU5UUlktQ09ERSAqLworICAgICAgICB4ID0gZGlhbHN0cigmZGlhbGxjYywi Q291bnRyeSBjb2RlIHlvdSBhcmUgY2FsbGluZyBmcm9tIik7CisgICAgICAgIGlmICh4IDwgMSkg cmV0dXJuKHgpOworICAgICAgICBpZiAoZGlhbGxjYykgeworICAgICAgICAgICAgaWYgKCFyZGln aXRzKGRpYWxsY2MpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvdW50cnkg Y29kZSBtdXN0IGJlIG51bWVyaWNcbiIpOworICAgICAgICAgICAgICAgIGlmICgqZGlhbGxjYyA9 PSAnKycpCisgICAgICAgICAgICAgICAgICBwcmludGYoIihwbGVhc2Ugb21pdCB0aGUgcGx1cyBz aWduKVxuIik7CisgICAgICAgICAgICAgICAgaWYgKGRpYWxsY2MpIGZyZWUoZGlhbGxjYyk7Cisg ICAgICAgICAgICAgICAgZGlhbGxjYyA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc3RyY21wKGRpYWxsY2MsIjEiKSkg eyAvKiBTZXQgZGVmYXVsdHMgZm9yIFVTQSBhbmQgQ2FuYWRhICovCisgICAgICAgICAgICAgICAg aWYgKCFkaWFsbGRwKSAgICAgICAgICAgLyogTG9uZy1kaXN0YW5jZSBwcmVmaXggKi8KKyAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJmRpYWxsZHAsIjEiKTsKKyAgICAgICAgICAgICAgICBpZiAo IWRpYWxpeHApICAgICAgICAgICAvKiBJbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4ICovCisg ICAgICAgICAgICAgICAgICBtYWtlc3RyKCZkaWFsaXhwLCIwMTEiKTsKKyAgICAgICAgICAgICAg ICBpZiAobnRvbGxmcmVlID09IDApIHsgICAvKiBUb2xsLWZyZWUgYXJlYSBjb2RlcyAqLworICAg ICAgICAgICAgICAgICAgICBpZiAoKGRpYWx0ZmNbMF0gPSBtYWxsb2MoNCkpKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBzdHJjcHkoZGlhbHRmY1swXSwiODAwIik7IC8qIDE5NzAtc29tZXRo aW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICBudG9sbGZyZWUrKzsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgoZGlhbHRmY1sxXSA9IG1hbGxvYyg0KSkpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJjcHkoZGlhbHRmY1sxXSwiODg4Iik7IC8qIDE5OTYgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBudG9sbGZyZWUrKzsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoKGRpYWx0ZmNbMl0gPSBtYWxsb2MoNCkpKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmNweShkaWFsdGZjWzJdLCI4NzciKTsgLyogNSBBcHJpbCAx OTk4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50b2xsZnJlZSsrOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRpYWx0ZmNbM10gPSBtYWxsb2MoNCkp KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkoZGlhbHRmY1sz XSwiODY2Iik7IC8qIDIwMDA/ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBudG9sbGZyZWUrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo IWRpYWx0ZnApICAgICAgICAgICAvKiBUb2xsLWZyZWUgZGlhbGluZyBwcmVmaXggKi8KKyAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJmRpYWx0ZnAsIjEiKTsKKyNpZmRlZiBDT01NRU5UCisvKiBU aGUgdGltZSBmb3IgdGhpcyBpcyBwYXN0ICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAoZGlhbGxjYywiMzU4IikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgKChpbnQpIHN0cmNt cCh6em5kYXRlKCksIjE5OTYxMDExIikgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICApIHsg ICAgICAgICAgICAgIC8qIEZpbmxhbmQgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWRpYWxsZHAp ICAgICAgICAgICAvKiBMb25nLWRpc3RhbmNlIHByZWZpeCAqLworICAgICAgICAgICAgICAgICAg bWFrZXN0cigmZGlhbGxkcCwiOSIpOworICAgICAgICAgICAgICAgIGlmICghZGlhbGl4cCkgICAg ICAgICAgIC8qIEludGVybmF0aW9uYWwgZGlhbGluZyBwcmVmaXggKi8KKyAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJmRpYWxpeHAsIjk5MCIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAg ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBFdmVyeXdoZXJlIGVsc2UgLi4u ICovCisgICAgICAgICAgICAgICAgaWYgKCFkaWFsbGRwKSB7CisgICAgICAgICAgICAgICAgICAg IGlmICgoZGlhbGxkcCA9IG1hbGxvYyg0KSkpCisgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5 KGRpYWxsZHAsIjAiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFk aWFsaXhwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbGl4cCA9IG1hbGxvYyg0KSkp CisgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGRpYWxpeHAsIjAwIik7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzdHJjbXAoZGlhbGxjYywi MzMiKSkgIC8qIEZyYW5jZSAqLworICAgICAgICAgICAgICBkaWFsZmxkID0gMTsgICAgICAgICAg ICAgIC8qIExvbmctZGlzdGFuY2UgZGlhbGluZyBpcyBmb3JjZWQgKi8KKyAgICAgICAgfQorICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZRElYUDogICAgICAgICAg ICAgICAgICAgICAgLyogRElBTCBJTlRMLVBSRUZJWCAqLworICAgICAgICByZXR1cm4oZGlhbHN0 cigmZGlhbGl4cCwiSW50ZXJuYXRpb25hbCBkaWFsaW5nIHByZWZpeCIpKTsKKworICAgICAgY2Fz ZSBYWURJWFM6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgSU5UTC1TVUZGSVggKi8KKyAg ICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxpeHMsIkludGVybmF0aW9uYWwgZGlhbGluZyBzdWZm aXgiKSk7CisKKyAgICAgIGNhc2UgWFlETERQOiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFM IExELVBSRUZJWCAqLworICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbGxkcCwiTG9uZy1kaXN0 YW5jZSBkaWFsaW5nIHByZWZpeCIpKTsKKworICAgICAgY2FzZSBYWURMRFM6ICAgICAgICAgICAg ICAgICAgICAgIC8qIERJQUwgTEQtU1VGRklYICovCisgICAgICAgIHJldHVybihkaWFsc3RyKCZk aWFsbGRzLCJMb25nLWRpc3RhbmNlIGRpYWxpbmcgc3VmZml4IikpOworCisgICAgICBjYXNlIFhZ RExDUDogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBMQy1QUkVGSVggKi8KKyAgICAgICAg cmV0dXJuKGRpYWxzdHIoJmRpYWxsY3AsIkxvY2FsIGRpYWxpbmcgcHJlZml4IikpOworCisgICAg ICBjYXNlIFhZRExDUzogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBMQy1TVUZGSVggKi8K KyAgICAgICAgcmV0dXJuKGRpYWxzdHIoJmRpYWxsY3MsIkxvY2FsIGRpYWxpbmcgc3VmZml4Iikp OworCisjaWZkZWYgQ09NTUVOVAorICAgICAgY2FzZSBYWURQWFg6ICAgICAgICAgICAgICAgICAg ICAgIC8qIERJQUwgUEJYLUVYQ0hBTkdFICovCisgICAgICAgIHJldHVybihkaWFsc3RyKCZkaWFs cHh4LCJFeGNoYW5nZSBvZiBQQlggeW91IGFyZSBjYWxsaW5nIGZyb20iKSk7CisjZW5kaWYgLyog Q09NTUVOVCAqLworCisgICAgICBjYXNlIFhZRFBYSTogeyAgICAgICAgICAgICAgICAgICAgLyog RElBTCBQQlgtSU5URVJOQUwtUFJFRklYICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgIHJl dHVybihkaWFsc3RyKCZkaWFscHhpLAorICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJuYWwt Y2FsbCBwcmVmaXggb2YgUEJYIHlvdSBhcmUgY2FsbGluZyBmcm9tIikpOworI2Vsc2UKKyAgICAg ICAgICBpbnQgeDsKKyAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiSW50ZXJuYWwtY2FsbCBwcmVm aXggb2YgUEJYIHlvdSBhcmUgY2FsbGluZyBmcm9tIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAiIiwmcyxOVUxMKSkgPCAwKSAvKiBEb24ndCBldmFsdWF0ZSAqLworICAgICAgICAgICAgcmV0 dXJuKHgpOworI2lmbmRlZiBOT1NQTAorICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAg ICBjaGFyIGMsICogcCA9IHRtcGJ1ZjsKKyAgICAgICAgICAgICAgaWYgKCpzID09ICdcXCcpIHsK KyAgICAgICAgICAgICAgICAgIGMgPSAqKHMrMSk7CisgICAgICAgICAgICAgICAgICBpZiAoaXN1 cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7CisgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAnZicg JiYKKyAgICAgICAgICAgICAgICAgICAgICBja3N0cmNtcChzLCJcXHYoZCRweCkiLDgsMCkgJiYK KyAgICAgICAgICAgICAgICAgICAgICBja3N0cmNtcChzLCJcXHYoZCRweHgpIiw5LDApICYmCisg ICAgICAgICAgICAgICAgICAgICAgY2tzdHJjbXAocywiXFx2KGQkcCkiLDcsMCkpIHsKKyAgICAg ICAgICAgICAgICAgICAgICB4ID0gVE1QQlVGU0laOworICAgICAgICAgICAgICAgICAgICAgIHp6 c3RyaW5nKHMsJnAsJngpOworICAgICAgICAgICAgICAgICAgICAgIHMgPSB0bXBidWY7CisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisjZW5kaWYgLyog Tk9TUEwgKi8KKyAgICAgICAgICBtYWtlc3RyKCZkaWFscHhpLHMpOworICAgICAgICAgIHJldHVy bigxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAgIGNhc2UgWFlEUFhP OiAgICAgICAgICAgICAgICAgICAgICAvKiBESUFMIFBCWC1PVVRTSURFLVBSRUZJWCAqLworICAg ICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHB4bywKKyAgICAgICAgICAgICAgICAgICAgICAgIk91 dHNpZGUtbGluZSBwcmVmaXggb2YgUEJYIHlvdSBhcmUgY2FsbGluZyBmcm9tIikpOworCisgICAg ICBjYXNlIFhZRFNGWDogICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBJTlRMLVNVRkZJWCAq LworICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHNmeCwiIFRlbGVwaG9uZSBudW1iZXIgc3Vm Zml4IGZvciBkaWFsaW5nIikpOworCisgICAgICBjYXNlIFhZRFNSVDogICAgICAgICAgICAgICAg ICAgICAgLyogRElBTCBTT1JUICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJmRp YWxzcnQpKTsKKworICAgICAgY2FzZSBYWURQWFg6ICAgICAgICAgICAgICAgICAgICAgIC8qIERJ QUwgUEJYLUVYQ0hBTkdFICovCisgICAgICBjYXNlIFhZRFRGQzogeyAgICAgICAgICAgICAgICAg ICAgLyogRElBTCBUT0xMLUZSRUUtQVJFQS1DT0RFICAqLworICAgICAgICAgIGludCBuLCBpOyAg ICAgICAgICAgICAgICAgICAgIC8qICh6ZXJvIG9yIG1vcmUgb2YgdGhlbS4uLikgKi8KKyAgICAg ICAgICBjaGFyICogcFtNQVhUT0xMRlJFRV07ICAgICAgICAvKiBUZW1wb3JhcnkgcG9pbnRlcnMg Ki8KKyAgICAgICAgICBjaGFyICogbTsKKyAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgTUFYVE9M TEZSRUU7IG4rKykgeworICAgICAgICAgICAgICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICAg ICAgICBtID0gKHkgPT0gWFlEVEZDKSA/CisgICAgICAgICAgICAgICAgICAiVG9sbC1mcmVlIGFy ZWEgY29kZShzKSBpbiB0aGUgY291bnRyeSB5b3UgYXJlIGNhbGxpbmcgZnJvbSIKKyAgICAgICAg ICAgICAgICAgICAgOiAiRXhjaGFuZ2Uocykgb2YgUEJYIHlvdSBhcmUgY2FsbGluZyBmcm9tIjsK KyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIG0gPSAoeSA9PSBYWURU RkMpID8KKyAgICAgICAgICAgICAgICAgICAgIkFub3RoZXIgdG9sbC1mcmVlIGFyZWEgY29kZSIK KyAgICAgICAgICAgICAgICAgICAgICA6ICJBbm90aGVyIFBCWCBleGNoYW5nZSI7CisgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQobSwiIiwmcyx4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgaWYgKHMpIHsKKyAg ICAgICAgICAgICAgICAgIGludCBrOworICAgICAgICAgICAgICAgICAgayA9IChpbnQpIHN0cmxl bihzKTsKKyAgICAgICAgICAgICAgICAgIGlmIChrID4gMCkgeworICAgICAgICAgICAgICAgICAg ICAgIGlmICgocFtuXSA9IG1hbGxvYyhrICsgMSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg c3RyY3B5KHBbbl0sIHMpOyAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgICB9IGVsc2UgYnJl YWs7CisgICAgICAgICAgICAgIH0gZWxzZSBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAg aWYgKHggPT0gLTMpIHsgICAgICAgICAgICAgICAgLyogQ29tbWFuZCB3YXMgc3VjY2Vzc2Z1bCAq LworICAgICAgICAgICAgICBpbnQgbTsKKyAgICAgICAgICAgICAgbSA9ICh5ID09IFhZRFRGQykg PyBudG9sbGZyZWUgOiBuZGlhbHB4eDsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgeCA9IDE7Cisg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHsgLyogUmVtb3ZlIG9sZCBsaXN0 LCBpZiBhbnkgKi8KKyAgICAgICAgICAgICAgICAgIGlmICAoeSA9PSBYWURURkMpCisgICAgICAg ICAgICAgICAgICAgIG1ha2VzdHIoJihkaWFsdGZjW2ldKSxOVUxMKTsKKyAgICAgICAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGRpYWxweHhbaV0pLE5VTEwp OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmICAoeSA9PSBYWURURkMpCisgICAg ICAgICAgICAgICAgbnRvbGxmcmVlID0gbjsgICAgICAgICAgLyogTmV3IGNvdW50ICovCisgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZGlhbHB4eCA9IG47CisgICAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsgLyogTmV3IGxpc3QgKi8KKyAgICAgICAgICAg ICAgICAgIGlmICAoeSA9PSBYWURURkMpCisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihk aWFsdGZjW2ldKSxwW2ldKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmKGRpYWxweHhbaV0pLHBbaV0pOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIHggPSAxOworICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bjsgaSsrKQorICAgICAgICAgICAgaWYgKHBbaV0pIGZyZWUocFtpXSk7CisgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgfQorCisgICAgICBjYXNlIFhZRFRGUDogICAgICAgICAgICAgICAgICAg ICAgLyogVE9MTC1GUkVFLVBSRUZJWCAqLworICAgICAgICByZXR1cm4oZGlhbHN0cigmZGlhbHRm cCwKKyAgICAgICAgICAgICAgICAgICAgICAgIiBMb25nLWRpc3RhbmNlIHByZWZpeCBmb3IgdG9s bC1mcmVlIGRpYWxpbmciKSk7CisKKyAgICAgIGNhc2UgWFlEQ09OOiAgICAgICAgICAgICAgICAg ICAgICAvKiBDT05ORUNUICovCisgICAgICAgIHogPSAtMTsKKyAgICAgICAgaWYgKCh5ID0gY21r ZXkoY3JydGFiLG5jcnIsIiIsImF1dG8iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAg ICAgIGlmICh5ICE9IENBUl9PRkYpICAgICAgICAgICAgICAgLyogQVVUTyBvciBPTj8gKi8KKyAg ICAgICAgICBpZiAoKHogPSBjbWtleShxdnRhYixucXZ0LCIiLCJ2ZXJib3NlIix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHopOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKKyAgICAgICAgaWYgKHogPiAtMSkKKyAgICAgICAgICBkaWFsY3EgPSB6OworICAgICAgICBk aWFsY29uID0geTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBY WURSU1RSOiAgICAgICAgICAgICAgICAgICAgIC8qIFJFU1RSSUNUICovCisgICAgICAgIGlmICgo eSA9IGNta2V5KGRyc3RydGFiLDQsIiIsIm5vbmUiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7 CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBkaWFs cnN0ciA9IHk7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlE TExBQzogeyAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBhcmVhLWNvZGUgbGlzdCAgKi8KKyAg ICAgICAgICBpbnQgbiwgaTsgICAgICAgICAgICAgICAgICAgICAvKiAoemVybyBvciBtb3JlIG9m IHRoZW0uLi4pICovCisgICAgICAgICAgY2hhciAqIHBbTUFYTE9DQUxBQ107IC8qIFRlbXBvcmFy eSBwb2ludGVycyAqLworICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBNQVhMT0NBTEFDOyBuKysp IHsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoCisgICAgICAgICAgICAgICAgICAgICJB cmVhIGNvZGUgdG8gd2hpY2ggY2FsbHMgZnJvbSB5b3VyIGFyZWEgYXJlIGxvY2FsIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgIGlmIChzKSB7CisgICAgICAgICAgICAgICAgICBpbnQgazsK KyAgICAgICAgICAgICAgICAgIGsgPSAoaW50KSBzdHJsZW4ocyk7CisgICAgICAgICAgICAgICAg ICBpZiAoayA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKHBbbl0gPSBtYWxsb2Mo ayArIDEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShwW25dLCBzKTsgLyogc2Fm ZSAqLworICAgICAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrOworICAgICAgICAgICAgICB9IGVs c2UgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh4ID09IC0zKSB7ICAgICAgICAg ICAgICAgIC8qIENvbW1hbmQgd2FzIHN1Y2Nlc3NmdWwgKi8KKyAgICAgICAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IG5sb2NhbGFjOyBpKyspIC8qIFJlbW92ZSBvbGQgbGlzdCwgaWYg YW55ICovCisgICAgICAgICAgICAgICAgaWYgKGRpYWxsY2FjW2ldKSB7CisgICAgICAgICAgICAg ICAgICAgIGZyZWUoZGlhbGxjYWNbaV0pOworICAgICAgICAgICAgICAgICAgICBkaWFsbGNhY1tp XSA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBubG9jYWxhYyA9IG47 ICAgICAgICAgICAgIC8qIE5ldyBjb3VudCAqLworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbmxvY2FsYWM7IGkrKykgLyogTmV3IGxpc3QgKi8KKyAgICAgICAgICAgICAgICBkaWFsbGNh Y1tpXSA9IHBbaV07CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgZXJyb3IsIHVuZG8gZXZl cnl0aGluZyAqLworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAg ICAgICAgICAgIGlmIChwW2ldKSBmcmVlKHBbaV0pOworICAgICAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICBjYXNlIFhZREZMRDoKKyAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSBzZXRvbigmZGlhbGZsZCkpOworCisgICAgICBjYXNlIFhZRElEVDogICAg ICAgICAgICAgICAgICAgICAgLyogRElBTCBJR05PUkUtRElBTFRPTkUgKi8KKyAgICAgICAgcmV0 dXJuKHNldG9uKCZkaWFsaWR0KSk7CisKKyAgICAgIGNhc2UgWFlEUEFDOgorICAgICAgICB5ID0g Y21udW0oCisgICAgICAgICAgICAgICJNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0d2VlbiBlYWNo IGNoYXJhY3RlciBzZW50IHRvIGRpYWxlciIsCisgICAgICAgICAgICAgICAgICAiIiwxMCwmeCx4 eHN0cmluZyk7CisgICAgICAgIHJldHVybihzZXRudW0oJmRpYWxwYWNlLHgseSw5OTk5KSk7CisK KyNpZm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgWFlETUFDOgorICAgICAgICBpZiAoKHggPSBjbWZs ZCgiTmFtZSBvZiBtYWNybyB0byBleGVjdXRlIGp1c3QgcHJpb3IgdG8gZGlhbGluZyIsCisgICAg ICAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICBp ZiAoeCA9PSAtMykKKyAgICAgICAgICAgICAgcyA9IE5VTEw7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAocykgeworICAg ICAgICAgICAgaWYgKCEqcykgeworICAgICAgICAgICAgICAgIHMgPSBOVUxMOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 CisgICAgICAgICAgICAgICAgcyA9IGxpbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgbWFrZXN0cigmZGlhbG1hYyxzKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNl bmRpZiAvKiBOT1NQTCAqLworCisgICAgICBjYXNlIFhZRFBVQ0M6ICAgICAgICAgICAgICAgICAg ICAgLyogUHVsc2UgY291bnRyeSBjb2RlcyAqLworICAgICAgY2FzZSBYWURUT0NDOiB7ICAgICAg ICAgICAgICAgICAgIC8qIFRvbmUgY291bnRyeSBjb2RlcyAqLworICAgICAgICAgIGludCBuLCBp OworICAgICAgICAgIGNoYXIgKiBwW01BWFRQQ0NdOworICAgICAgICAgIGNoYXIgKiBtOworICAg ICAgICAgIGZvciAobiA9IDA7IG4gPCBNQVhUUENDOyBuKyspIHsKKyAgICAgICAgICAgICAgaWYg KG4gPT0gMCkgeworICAgICAgICAgICAgICAgICAgbSA9ICh5ID09IFhZRFBVQ0MpID8KKyAgICAg ICAgICAgICAgICAgICJDb3VudHJ5IGNvZGUgd2hlcmUgUHVsc2UgZGlhbGluZyBpcyByZXF1aXJl ZCIKKyAgICAgICAgICAgICAgICAgICAgOiAiQ291bnRyeSBjb2RlIHdoZXJlIFRvbmUgZGlhbGlu ZyBpcyBhdmFpbGFibGUiOworICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBt ID0gIkFub3RoZXIgY291bnRyeSBjb2RlIjsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQo bSwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgaWYgKHMpIHsKKyAgICAgICAgICAgICAgICAgIGludCBrOworICAgICAgICAgICAgICAg ICAgayA9IChpbnQpIHN0cmxlbihzKTsKKyAgICAgICAgICAgICAgICAgIGlmIChrID4gMCkgewor ICAgICAgICAgICAgICAgICAgICAgIGlmICgocFtuXSA9IG1hbGxvYyhrICsgMSkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgc3RyY3B5KHBbbl0sIHMpOyAvKiBzYWZlICovCisgICAgICAgICAg ICAgICAgICB9IGVsc2UgYnJlYWs7CisgICAgICAgICAgICAgIH0gZWxzZSBicmVhazsKKyAgICAg ICAgICB9CisgICAgICAgICAgaWYgKHggPT0gLTMpIHsgICAgICAgICAgICAgICAgLyogQ29tbWFu ZCB3YXMgc3VjY2Vzc2Z1bCAqLworICAgICAgICAgICAgICBpbnQgbTsKKyAgICAgICAgICAgICAg bSA9ICh5ID09IFhZRFBVQ0MpID8gbmRpYWxwdWNjIDogbmRpYWx0b2NjOworICAgICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAg ICAgICAgICAgICB4ID0gMTsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykg eyAvKiBSZW1vdmUgb2xkIGxpc3QsIGlmIGFueSAqLworICAgICAgICAgICAgICAgICAgaWYgKHkg PT0gWFlEUFVDQykKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGRpYWxwdWNjW2ldKSxO VUxMKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmKGRpYWx0b2NjW2ldKSxOVUxMKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBp ZiAoeSA9PSBYWURQVUNDKSB7CisgICAgICAgICAgICAgICAgICBuZGlhbHB1Y2MgPSBuOyAgICAg ICAgICAgICAgICAvKiBOZXcgY291bnQgKi8KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgIG5kaWFsdG9jYyA9IG47CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeyAvKiBOZXcgbGlzdCAqLworICAgICAgICAgICAg ICAgICAgaWYgKHkgPT0gWFlEUFVDQykgeworICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIo JihkaWFscHVjY1tpXSkscFtpXSk7CisgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJihkaWFsdG9jY1tpXSkscFtpXSk7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgeCA9IDE7CisgICAgICAg ICAgfQorICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICBpZiAo cFtpXSkgZnJlZShwW2ldKTsKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICB9CisgICAgICBj YXNlIFhZRFRFU1Q6CisgICAgICAgIHJldHVybihzZXRvbigmZGlhbHRlc3QpKTsKKworICAgICAg ZGVmYXVsdDoKKyAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBTRVQgRElBTCBwYXJhbWV0ZXJc biIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KK30KKworI2lmbmRlZiBOT1NIT1cKK2lu dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIE1PREVNICovCitz aG9tb2RlbSgpIHsKKyAgICBNRE1JTkYgKiBwOworICAgIGludCB4LCBuLCBtZG07CisgICAgY2hh ciBjOworICAgIGxvbmcgeno7CisKKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2VydmVyKSB7Cisg ICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWRcclxuIik7CisgICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7CisgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworICAgIHNobWRt bGluKCk7CisgICAgcHJpbnRmKCJcbiIpOworCisgICAgbWRtID0gKG1kbXR5cCA+IDApID8gbWRt dHlwIDogbWRtc2F2OworICAgIHAgPSAobWRtID4gMCkgPyBtb2RlbXBbbWRtXSA6IE5VTEw7CisK KyAgICBpZiAocCkgeworICAgICAgICBwcmludGYoIiAlc1xuXG4iLCBkaWFsbmFtZSA/IGRpYWxu YW1lIDogcC0+bmFtZSk7CisKKyAgICAgICAgcHJpbnRmKCIgTW9kZW0gY2FwYWJpbGl0aWVzOiAg ICAiKTsKKyAgICAgICAgenogPSBkaWFsY2FwYXMgPyBkaWFsY2FwYXMgOiBwLT5jYXBhczsKKyAg ICAgICAgaWYgKCF6eikgeworICAgICAgICAgICAgcHJpbnRmKCIgKG5vbmUpIik7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoenogJiBDS0RfQVQpIHByaW50ZigiIEFUIik7Cisg ICAgICAgICAgICBpZiAoenogJiBDS0RfVjI1KSBwcmludGYoIiBJVFUiKTsKKyAgICAgICAgICAg IGlmICh6eiAmIENLRF9TQikgcHJpbnRmKCIgU0IiKTsKKyAgICAgICAgICAgIGlmICh6eiAmIENL RF9FQykgcHJpbnRmKCIgRUMiKTsKKyAgICAgICAgICAgIGlmICh6eiAmIENLRF9EQykgcHJpbnRm KCIgREMiKTsKKyAgICAgICAgICAgIGlmICh6eiAmIENLRF9IVykgcHJpbnRmKCIgSFdGQyIpOwor ICAgICAgICAgICAgaWYgKHp6ICYgQ0tEX1NXKSBwcmludGYoIiBTV0ZDIik7CisgICAgICAgICAg ICBpZiAoenogJiBDS0RfS1MpIHByaW50ZigiIEtTIik7CisgICAgICAgICAgICBpZiAoenogJiBD S0RfVEIpIHByaW50ZigiIFRCIik7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiBNb2Rl bSBjYXJyaWVyLXdhdGNoOiAgICAiKTsKKyAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FSX09GRikg cHJpbnRmKCJvZmZcbiIpOworICAgICAgICBlbHNlIGlmIChjYXJyaWVyID09IENBUl9PTikgcHJp bnRmKCJvblxuIik7CisgICAgICAgIGVsc2UgaWYgKGNhcnJpZXIgPT0gQ0FSX0FVVCkgcHJpbnRm KCJhdXRvXG4iKTsKKyAgICAgICAgZWxzZSBwcmludGYoInVua25vd25cbiIpOworCisgICAgICAg IHByaW50ZigiIE1vZGVtIG1heGltdW0tc3BlZWQ6ICAgICIpOworICAgICAgICB6eiA9IChkaWFs bWF4ID4gMEwpID8gZGlhbG1heCA6IHAtPm1heF9zcGVlZDsKKyAgICAgICAgaWYgKHp6ID4gMCkK KyAgICAgICAgICBwcmludGYoIiVsZCBicHNcbiIsIHp6KTsKKyAgICAgICAgZWxzZQorICAgICAg ICAgIHByaW50ZigiKHVua25vd24pXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgTW9kZW0gZXJyb3It Y29ycmVjdGlvbjogJXNcbiIsIGRpYWxlYyA/ICJvbiIgOiAib2ZmIik7CisgICAgICAgIHByaW50 ZigiIE1vZGVtIGNvbXByZXNzaW9uOiAgICAgICVzXG4iLCBkaWFsZGMgPyAib24iIDogIm9mZiIp OworICAgICAgICBwcmludGYoIiBNb2RlbSBzcGVlZC1tYXRjaGluZzogICAlcyIsICAgbWRtc3Bk ID8gIm9uIiA6ICJvZmYiKTsKKyAgICAgICAgcHJpbnRmKCIgKGludGVyZmFjZSBzcGVlZCAlcylc biIsIG1kbXNwZCA/ICJjaGFuZ2VzIiA6ICJpcyBsb2NrZWQiKTsKKyAgICAgICAgcHJpbnRmKCIg TW9kZW0gZmxvdy1jb250cm9sOiAgICAgIik7CisgICAgICAgIGlmIChkaWFsZmMgPT0gRkxPX05P TkUpIHByaW50Zigibm9uZVxuIik7CisgICAgICAgIGVsc2UgaWYgKGRpYWxmYyA9PSBGTE9fWE9O WCkgcHJpbnRmKCJ4b24veG9mZlxuIik7CisgICAgICAgIGVsc2UgaWYgKGRpYWxmYyA9PSBGTE9f UlRTQykgcHJpbnRmKCJydHMvY3RzXG4iKTsKKyAgICAgICAgZWxzZSBpZiAoZGlhbGZjID09IEZM T19BVVRPKSBwcmludGYoImF1dG9cbiIpOworICAgICAgICBwcmludGYoIiBNb2RlbSBoYW5ndXAt bWV0aG9kOiAgICAlc1xuIiwKKyAgICAgICAgICAgICAgIGRpYWxtaHUgPworICAgICAgICAgICAg ICAgIm1vZGVtLWNvbW1hbmQiIDoKKyAgICAgICAgICAgICAgICJyczIzMi1zaWduYWwiCisgICAg ICAgICAgICAgICApOworICAgICAgICBwcmludGYoIiBNb2RlbSBzcGVha2VyOiAgICAgICAgICAl c1xuIiwgc2hvd29mZihtZG1zcGspKTsKKyAgICAgICAgcHJpbnRmKCIgTW9kZW0gdm9sdW1lOiAg ICAgICAgICAgJXNcbiIsCisgICAgICAgICAgICAgICAobWRtdm9sID09IDIpID8gIm1lZGl1bSIg OiAoKG1kbXZvbCA8PSAxKSA/ICJsb3ciIDogImhpZ2giKSk7CisgICAgICAgIHByaW50ZigiIE1v ZGVtIGtlcm1pdC1zcG9vZjogICAgICVzXG4iLCBkaWFsa3NwID8gIm9uIiA6ICJvZmYiKTsKKyAg ICAgICAgYyA9IChjaGFyKSAoeCA9IChkaWFsZXNjID8gZGlhbGVzYyA6IHAtPmVzY19jaGFyKSk7 CisgICAgICAgIHByaW50ZigiIE1vZGVtIGVzY2FwZS1jaGFyYWN0ZXI6ICVkIiwgeCk7CisgICAg ICAgIGlmIChpc3ByaW50KGMpKQorICAgICAgICAgIHByaW50ZigiICg9IFwiJWNcIikiLGMpOwor ICAgICAgICBwcmludGYoCisiXG5cbk1PREVNIENPTU1BTkRzICgqID0gc2V0IGF1dG9tYXRpY2Fs bHkgYnkgU0VUIE1PREVNIFRZUEUpOlxuXG4iKTsKKyAgICAgICAgZGVidWcoRjExMCwic2hvdyBk aWFsaW5pIixkaWFsaW5pLDApOworICAgICAgICBwcmludGYoIiAlYyBJbml0LXN0cmluZzogICAg ICAgICAgIiwgZGlhbGluaSA/ICcgJyA6ICcqJyApOworICAgICAgICBzaG9kcyhkaWFsaW5pID8g ZGlhbGluaSA6IHAtPndha2Vfc3RyKTsKKyAgICAgICAgcHJpbnRmKCIgJWMgRGlhbC1tb2RlLXN0 cmluZzogICAgICIsIGRpYWxtc3RyID8gJyAnIDogJyonICk7CisgICAgICAgIHNob2RzKGRpYWxt c3RyID8gZGlhbG1zdHIgOiBwLT5kbW9kZV9zdHIpOworICAgICAgICBuID0gbG9jYWwgPyAxOSA6 IDIwOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiAlYyBEaWFsLW1vZGUtcHJvbXB0 OiAgICAgIiwgZGlhbG1wcm10ID8gJyAnIDogJyonICk7CisgICAgICAgIHNob2RzKGRpYWxtcHJt dCA/IGRpYWxtcHJtdCA6IHAtPmRtb2RlX3Byb21wdCk7CisgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAg IHByaW50ZigiICVjIERpYWwtY29tbWFuZDogICAgICAgICAiLCBkaWFsY21kID8gJyAnIDogJyon ICk7CisgICAgICAgIHNob2RzKGRpYWxjbWQgPyBkaWFsY21kIDogcC0+ZGlhbF9zdHIpOworICAg ICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBl bHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiAlYyBDb21wcmVzc2lvbiBvbjogICAgICAgIiwg ZGlhbGRjb24gPyAnICcgOiAnKicgKTsKKyAgICAgICAgaWYgKCFkaWFsZGNvbikKKyAgICAgICAg ICBkZWJ1ZyhGMTEwLCJkaWFsZGNvbiIsIihudWxsKSIsMCk7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICBkZWJ1ZyhGMTEwLCJkaWFsZGNvbiIsZGlhbGRjb24sMCk7CisgICAgICAgIHNob2RzKGRp YWxkY29uID8gZGlhbGRjb24gOiBwLT5kY19vbl9zdHIpOworICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAg ICBwcmludGYoIiAlYyBDb21wcmVzc2lvbiBvZmY6ICAgICAgIiwgZGlhbGRjb2ZmID8gJyAnIDog JyonICk7CisgICAgICAgIHNob2RzKGRpYWxkY29mZiA/IGRpYWxkY29mZiA6IHAtPmRjX29mZl9z dHIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiAlYyBFcnJvci1jb3JyZWN0aW9u IG9uOiAgIiwgZGlhbGVjb24gPyAnICcgOiAnKicgKTsKKyAgICAgICAgc2hvZHMoZGlhbGVjb24g PyBkaWFsZWNvbiA6IHAtPmVjX29uX3N0cik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50 ZigiICVjIEVycm9yLWNvcnJlY3Rpb24gb2ZmOiAiLCBkaWFsZWNvZmYgPyAnICcgOiAnKicgKTsK KyAgICAgICAgc2hvZHMoZGlhbGVjb2ZmID8gZGlhbGVjb2ZmIDogcC0+ZWNfb2ZmX3N0cik7Cisg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiICVjIEF1dG9hbnN3ZXIgb246ICAgICAgICAi LCBkaWFsYWFvbiA/ICcgJyA6ICcqJyApOworICAgICAgICBzaG9kcyhkaWFsYWFvbiA/IGRpYWxh YW9uIDogcC0+YWFfb25fc3RyKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJpbnRmKCIgJWMg QXV0b2Fuc3dlciBvZmY6ICAgICAgICIsIGRpYWxhYW9mZiA/ICcgJyA6ICcqJyApOworICAgICAg ICBzaG9kcyhkaWFsYWFvZmYgPyBkaWFsYWFvZmYgOiBwLT5hYV9vZmZfc3RyKTsKKyAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKKworICAgICAgICBwcmludGYoIiAlYyBTcGVha2VyIG9uOiAgICAgICAgICAgIiwgZGlh bHNwb24gPyAnICcgOiAnKicgKTsKKyAgICAgICAgc2hvZHMoZGlhbHNwb24gPyBkaWFsc3BvbiA6 IHAtPnNwX29uX3N0cik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiICVjIFNwZWFr ZXIgb2ZmOiAgICAgICAgICAiLCBkaWFsc3BvZmYgPyAnICcgOiAnKicgKTsKKyAgICAgICAgc2hv ZHMoZGlhbHNwb2ZmID8gZGlhbHNwb2ZmIDogcC0+c3Bfb2ZmX3N0cik7CisgICAgICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7 CisgICAgICAgIHByaW50ZigiICVjIFZvbHVtZSBsb3c6ICAgICAgICAgICAiLCBkaWFsdm9sMSA/ ICcgJyA6ICcqJyApOworICAgICAgICBzaG9kcyhkaWFsdm9sMSA/IGRpYWx2b2wxIDogcC0+dm9s MV9zdHIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiAlYyBWb2x1bWUgbWVkaXVt OiAgICAgICAgIiwgZGlhbHZvbDIgPyAnICcgOiAnKicgKTsKKyAgICAgICAgc2hvZHMoZGlhbHZv bDIgPyBkaWFsdm9sMiA6IHAtPnZvbDJfc3RyKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJp bnRmKCIgJWMgVm9sdW1lIGhpZ2g6ICAgICAgICAgICIsIGRpYWx2b2wzID8gJyAnIDogJyonICk7 CisgICAgICAgIHNob2RzKGRpYWx2b2wzID8gZGlhbHZvbDMgOiBwLT52b2wzX3N0cik7CisgICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisKKyAgICAgICAgcHJpbnRmKCIgJWMgSGFuZ3VwLWNvbW1hbmQ6ICAgICAgICIs IGRpYWxoY21kID8gJyAnIDogJyonICk7CisgICAgICAgIHNob2RzKGRpYWxoY21kID8gZGlhbGhj bWQgOiBwLT5odXBfc3RyKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJpbnRmKCIgJWMgSGFy ZHdhcmUtZmxvdzogICAgICAgICIsIGRpYWxod2ZjID8gJyAnIDogJyonICk7CisgICAgICAgIHNo b2RzKGRpYWxod2ZjID8gZGlhbGh3ZmMgOiBwLT5od2ZjX3N0cik7CisgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Cisg ICAgICAgIHByaW50ZigiICVjIFNvZnR3YXJlLWZsb3c6ICAgICAgICAiLCBkaWFsc3dmYyA/ICcg JyA6ICcqJyApOworICAgICAgICBzaG9kcyhkaWFsc3dmYyA/IGRpYWxzd2ZjIDogcC0+c3dmY19z dHIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiAlYyBOby1mbG93LWNvbnRyb2w6 ICAgICAgIiwgZGlhbG5vZmMgPyAnICcgOiAnKicgKTsKKyAgICAgICAgc2hvZHMoZGlhbG5vZmMg PyBkaWFsbm9mYyA6IHAtPm5vZmNfc3RyKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJpbnRm KCIgJWMgUHVsc2U6ICAgICAgICAgICAgICAgICIsIGRpYWxwdWxzZSA/ICcgJyA6ICcqJyk7Cisg ICAgICAgIHNob2RzKGRpYWxwdWxzZSA/IGRpYWxwdWxzZSA6IHAtPnB1bHNlKTsKKyAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKKyAgICAgICAgcHJpbnRmKCIgJWMgVG9uZTogICAgICAgICAgICAgICAgICIsIGRpYWx0 b25lID8gJyAnIDogJyonKTsKKyAgICAgICAgc2hvZHMoZGlhbHRvbmUgPyBkaWFsdG9uZSA6IHAt PnRvbmUpOworCisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIHByaW50ZigiICVjIElnbm9yZS1kaWFs dG9uZTogICAgICAiLCBkaWFseDMgPyAnICcgOiAnKicpOworICAgICAgICBzaG9kcyhkaWFseDMg PyBkaWFseDMgOiBwLT5pZ25vcmVkdCk7CisKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJpbnRm KCIgJWMgUHJlZGlhbC1pbml0OiAgICAgICAgICIsIGRpYWxpbmkyID8gJyAnIDogJyonKTsKKyAg ICAgICAgc2hvZHMoZGlhbGluaTIgPyBkaWFsaW5pMiA6IHAtPmluaTIpOworCisgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDQpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7CisgICAgICAgIHByaW50ZigiXG4gRm9yIG1vcmUgaW5mbzogU0hPVyBESUFMIGFuZCBTSE9X IENPTU1VTklDQVRJT05TXG4iKTsKKworICAgIH0gZWxzZSBpZiAobWRtID4gMCkgeworICAgICAg ICBwcmludGYoIk1vZGVtIGluZm8gZm9yIFwiJXNcIiBub3QgZmlsbGVkIGluIHlldFxuIiwgZ21k bXR5cCgpKTsKKyAgICB9IGVsc2UgcHJpbnRmKAorIiBObyBtb2RlbSBzZWxlY3RlZCwgc28gRElB TCBhbmQgbW9zdCBTRVQgTU9ERU0gY29tbWFuZHMgaGF2ZSBubyBlZmZlY3QuXG5cCisgVXNlIFNF VCBNT0RFTSBUWVBFIHRvIHNlbGVjdCBhIG1vZGVtLlxuIik7CisgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKK30KKyNlbmRpZiAvKiBOT1NIT1cgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lm ZGVmIENLX1RBUEkKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRBUEkgYWN0aW9uIGNvbW1hbmRzICovCitkb3RhcGkoKSB7CisgICAgaW50IHgseTsK KyAgICBjaGFyICpzOworCisgICAgaWYgKCFUQVBJQXZhaWwpIHsKKyAgICAgICAgcHJpbnRmKCJc blRBUEkgaXMgdW5hdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uXG4iKTsKKyAgICAgICAgcmV0dXJu KC05KTsKKyAgICB9CisgICAgaWYgKCh5ID0gY21rZXkodGFwaXRhYixudGFwaXRhYiwiTVMgVEFQ SSBjb21tYW5kIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih5KTsKKyAgICBzd2l0 Y2ggKHkpIHsKKyAgICAgIGNhc2UgWFlUQVBJX0NGRzogeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRBUEkgQ09ORklHVVJFLUxJTkUgKi8KKyAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRh YiAqIHRhcGlsaW5ldGFiOworICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICogX3RhcGls aW5ldGFiOworICAgICAgICAgIGV4dGVybiBpbnQgbnRhcGlsaW5lOworICAgICAgICAgIGV4dGVy biBpbnQgTGluZURldmljZUlkOworICAgICAgICAgIGludCBsaW5lSUQ9TGluZURldmljZUlkOwor ICAgICAgICAgIGlmIChUQVBJQXZhaWwpCisgICAgICAgICAgICBja3RhcGlCdWlsZExpbmVUYWJs ZSgmdGFwaWxpbmV0YWIsICZfdGFwaWxpbmV0YWIsICZudGFwaWxpbmUpOworICAgICAgICAgIGlm ICh0YXBpbGluZXRhYiAmJiBfdGFwaWxpbmV0YWIgJiYgbnRhcGlsaW5lID4gMCkgeworICAgICAg ICAgICAgICBpbnQgaT0wLCBqID0gOTk5OSwgayA9IC0xOworCisgICAgICAgICAgICAgIGlmICgg TGluZURldmljZUlkID09IC0xICkgeworICAgICAgICAgICAgICAgICAgLyogRmluZCBvdXQgd2hh dCB0aGUgbG93ZXN0IG51bWJlcmVkIFRBUEkgZGV2aWNlIGlzICovCisgICAgICAgICAgICAgICAg ICAvKiBhbmQgdXNlIGl0IGFzIHRoZSBkZWZhdWx0LiAgICAgICAgICAgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGFwaWxpbmU7IGkrKyApIHsKKyAg ICAgICAgICAgICAgICAgICAgICBpZiAodGFwaWxpbmV0YWJbaV0ua3d2YWwgPCBqKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIGsgPSBpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgIC8qIEZpbmQgdGhlIExpbmVEZXZpY2VJZCBpbiB0aGUgdGFibGUgYW5kIHVzZSB0aGF0IGVu dHJ5ICovCisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRhcGlsaW5lOyBpKysg KSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcGlsaW5ldGFiW2ldLmt3dmFsID09IExp bmVEZXZpY2VJZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gaTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChrID49IDAp CisgICAgICAgICAgICAgICAgcyA9IF90YXBpbGluZXRhYltrXS5rd2Q7CisgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICBzID0gIiI7CisKKyAgICAgICAgICAgICAgaWYgKCh5ID0g Y21rZXkoX3RhcGlsaW5ldGFiLG50YXBpbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJUQVBJIGRldmljZSBuYW1lIixzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAg IHJldHVybih5KTsKKyAgICAgICAgICAgICAgbGluZUlEID0geTsKKyAgICAgICAgICB9CisgICAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisjaWZkZWYgSUtTRAorICAg ICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21t YW5kIGRpc2FibGVkXHJcbiIpOworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor ICAgICAgICAgIH0KKyNlbmRpZiAvKiBJU0tEICovCisgICAgICAgICAgY2t0YXBpQ29uZmlndXJl TGluZShsaW5lSUQpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBYWVRB UElfRElBTDogICAgICAgICAgICAgICAgIC8qIFRBUEkgRElBTElORy1QUk9QRVJUSUVTICovCisg ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisjaWZk ZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29y cnksIGNvbW1hbmQgZGlzYWJsZWRcclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOworICAgICAgICB9CisjZW5kaWYgLyogSVNLRCAqLworICAgICAgICBja3RhcGlEaWFsaW5n UHJvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK K30KKworc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBUQVBJ IGNvbW1hbmQgb3B0aW9ucyAqLworc2V0dGFwaSgpIHsKKyAgICBpbnQgeCwgeTsKKyAgICBjaGFy ICpzOworCisgICAgaWYgKCFUQVBJQXZhaWwpIHsKKyAgICAgICAgcHJpbnRmKCJcblRBUEkgaXMg dW5hdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAg ICB9CisgICAgaWYgKCh5ID0gY21rZXkoc2V0dGFwaXRhYixuc2V0dGFwaXRhYiwiTVMgVEFQSSBv cHRpb24iLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworICAgIHN3aXRjaCAo eSkgeworICAgICAgY2FzZSBYWVRBUElfVVNFOgorICAgICAgICByZXR1cm4gKHN1Y2Nlc3MgPSBz ZXRvbigmdGFwaXVzZWNmZykpOworICAgICAgY2FzZSBYWVRBUElfTEdIVDoKKyAgICAgICAgcmV0 dXJuIChzdWNjZXNzID0gc2V0b24oJnRhcGlsaWdodHMpKTsKKyAgICAgIGNhc2UgWFlUQVBJX1BS RToKKyAgICAgICAgcmV0dXJuIChzdWNjZXNzID0gc2V0b24oJnRhcGlwcmV0ZXJtKSk7CisgICAg ICBjYXNlIFhZVEFQSV9QU1Q6CisgICAgICAgIHJldHVybiAoc3VjY2VzcyA9IHNldG9uKCZ0YXBp cG9zdHRlcm0pKTsKKyAgICAgIGNhc2UgWFlUQVBJX0lOQToKKyAgICAgICAgeSA9IGNtbnVtKCJz ZWNvbmRzIG9mIGluYWN0aXZpdHkgYmVmb3JlIGF1dG8tZGlzY29ubmVjdCIsCisgICAgICAgICAg ICAgICAgICAiMCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICByZXR1cm4oc2V0bnVtKCZ0YXBp aW5hY3Rpdml0eSx4LHksNjU1MzUpKTsKKyAgICAgIGNhc2UgWFlUQVBJX0JORzoKKyAgICAgICAg eSA9IGNtbnVtKCJzZWNvbmRzIHRvIHdhaXQgZm9yIGNyZWRpdCBjYXJkIHRvbmUiLAorICAgICAg ICAgICAgICAgICAgIjgiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgcmV0dXJuKHNldG51bSgm dGFwaWJvbmcseCx5LDkwKSk7CisgICAgICBjYXNlIFhZVEFQSV9NQU46CisgICAgICAgIHJldHVy biAoc3VjY2VzcyA9IHNldG9uKCZ0YXBpbWFudWFsKSk7CisgICAgICBjYXNlIFhZVEFQSV9DT046 ICAgICAgICAgICAgICAgICAgLyogVEFQSSBDT05WRVJTSU9OUyAqLworICAgICAgICByZXR1cm4g KHN1Y2Nlc3MgPSBzZXRvbmF1dCgmdGFwaWNvbnYpKTsKKyAgICAgIGNhc2UgWFlUQVBJX0xJTjog ICAgICAgICAgICAgICAgICAvKiBUQVBJIExJTkUgKi8KKyAgICAgICAgeCA9IHNldGxpbihYWVRB UElfTElOLDEsMCk7CisgICAgICAgIGlmICh4ID4gLTEpIGRpZHNldGxpbisrOworICAgICAgICBy ZXR1cm4oeCk7CisgICAgICBjYXNlIFhZVEFQSV9QQVNTOiB7ICAgICAgICAgICAgICAgLyogVEFQ SSBQQVNTVEhST1VHSCAqLworI2lmZGVmIE5PRElBTAorICAgICAgICAgIHByaW50ZigiXG4/TW9k ZW0tZGlhbGluZyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAgICAgICAgICByZXR1cm4oLTkpOworI2Vs c2UgLyogTk9ESUFMICovCisgICAgICAgICAgLyogUGFzc3Rocm91Z2ggYmVjYW1lIE1vZGVtLWRp YWxpbmcgd2hpY2ggaXMgYW4gYW50b255bSAqLworICAgICAgICAgIHN1Y2Nlc3MgPSBzZXRvbigm dGFwaXBhc3MpOworICAgICAgICAgIHRhcGlwYXNzID0gIXRhcGlwYXNzOworICAgICAgICAgIHJl dHVybiAoc3VjY2Vzcyk7CisjZW5kaWYgLyogTk9ESUFMICovICAgICAgICAKKyAgICAgIH0KKyAg ICAgIGNhc2UgWFlUQVBJX0xPQzogeyAgICAgICAgICAgICAgICAvKiBUQVBJIExPQ0FUSU9OICov CisgICAgICAgICAgZXh0ZXJuIGNoYXIgdGFwaWxvY1tdOworICAgICAgICAgIGV4dGVybiBpbnQg dGFwaWxvY2lkOworICAgICAgICAgIGludCBpID0gMCwgaiA9IDk5OTksIGsgPSAtMTsKKworICAg ICAgICAgIGNrdGFwaUJ1aWxkTG9jYXRpb25UYWJsZSgmdGFwaWxvY3RhYiwgJm50YXBpbG9jKTsK KyAgICAgICAgICBpZiAoIXRhcGlsb2N0YWIgfHwgIW50YXBpbG9jKSB7CisgICAgICAgICAgICAg IHByaW50ZigiXG5ObyBUQVBJIExvY2F0aW9ucyBhcmUgY29uZmlndXJlZCBmb3IgdGhpcyBzeXN0 ZW1cbiIpOworICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyAgICAgICAg ICBpZiAodGFwaWxvY2lkID09IC0xKQorICAgICAgICAgICAgdGFwaWxvY2lkID0gY2t0YXBpR2V0 Q3VycmVudExvY2F0aW9uSUQoKTsKKworICAgICAgICAgIC8qIEZpbmQgdGhlIGN1cnJlbnQgdGFw aWxvYyBlbnRyeSAqLworICAgICAgICAgIC8qIGFuZCB1c2UgaXQgYXMgdGhlIGRlZmF1bHQuICov CisgICAgICAgICAgZm9yIChrID0gMDsgayA8IG50YXBpbG9jOyBrKyspIHsKKyAgICAgICAgICAg ICAgaWYgKHRhcGlsb2N0YWJba10ua3d2YWwgPT0gdGFwaWxvY2lkKQorICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoayA+PSAwICYmIGsgPCBudGFwaWxv YykKKyAgICAgICAgICAgIHMgPSB0YXBpbG9jdGFiW2tdLmt3ZDsKKyAgICAgICAgICBlbHNlCisg ICAgICAgICAgICBzID0gIiI7CisKKyAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0YXBpbG9jdGFi LG50YXBpbG9jLCAiVEFQSSBsb2NhdGlvbiIscyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg IHJldHVybih5KTsKKworICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAg ICAgIHJldHVybih4KTsKKyNpZmRlZiBJS1NECisgICAgICAgICAgaWYgKGluc2VydmVyKSB7Cisg ICAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWRcclxuIik7CisgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgfQorI2VuZGlmIC8qIElL U0QgKi8KKyAgICAgICAgICBja3RhcGlGZXRjaExvY2F0aW9uSW5mb0J5SUQoIHkgKTsKKyNpZm5k ZWYgTk9ESUFMCisgICAgICAgICAgQ29weVRhcGlMb2NhdGlvbkluZm9Ub0tlcm1pdERpYWxDbWQo KTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9 CisgICAgcmV0dXJuKHN1Y2Nlc3M9MSk7Cit9CisjZW5kaWYgLyogQ0tfVEFQSSAqLworI2VuZGlm IC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1NQTAorLyogTWV0aG9kIGZvciBldmFsdWF0aW5n IFwleCBhbmQgXCZ4W10gdmFyaWFibGVzICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHZhcmV2 YWx0YWJbXSA9IHsKKyAgICB7ICJyZWN1cnNpdmUiLCAxLCAwIH0sCisgICAgeyAic2ltcGxlIiwg ICAgMCwgMCB9Cit9Oworc3RhdGljIGludCBudmFyZXZhbHRhYiA9IChzaXplb2YodmFyZXZhbHRh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitpbnQKK3NldHZhcmV2YWwoKSB7CisgICAg aW50IHggPSAwLCB5ID0gMDsKKyAgICBleHRlcm4gaW50IHZhcmV2YWw7CisjaWZkZWYgRENNREJV RgorICAgIGV4dGVybiBpbnQgKiB4dmFyZXY7CisjZWxzZQorICAgIGV4dGVybiBpbnQgeHZhcmV2 W107CisjZW5kaWYgLyogRENNREJVRiAqLworCisgICAgaWYgKCh4ID0gY21rZXkodmFyZXZhbHRh YiwKKwkJICAgbnZhcmV2YWx0YWIsIAorCQkgICAiTWV0aG9kIGZvciBldmFsdWF0aW5nIFxcJXgg YW5kIFxcJnhbXSB2YXJpYWJsZXMiLAorCQkgICAiIiwKKwkJICAgeHhzdHJpbmcpKSA8IDApCisg ICAgICByZXR1cm4oeCk7CisgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJu KHkpOworICAgIHh2YXJldltjbWRsdmxdID0geDsKKyAgICB2YXJldmFsID0geDsKKyAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOworfQorCisjaWZkZWYgQ0tfQU5TSUMgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU0VUIEFMQVJNICovCitpbnQKK3NldGFsYXJtKGxvbmcgeHgpCisjZWxzZQoraW50 CitzZXRhbGFybSh4eCkgbG9uZyB4eDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2V0YWxh cm0gKi8geworI2lmZGVmIENPTU1FTlQKKyAgICBpbnQgeXl5eSwgbW0sIGRkLCB4OworICAgIGNo YXIgKnM7CisgICAgbG9uZyB6ejsKKyAgICBjaGFyIGJ1Zls2XTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgbG9uZyBzZWMsIGpkOworICAgIGNoYXIgeGJ1ZlsyMF0sICogcDsKKworICAgIGRl YnVnKEYxMDEsInNldGFsYXJtIHh4IiwiIix4eCk7CisgICAgY2tfYWxhcm0gPSAwTDsgICAgICAg ICAgICAgICAgICAgICAgLyogMCA9IG5vIGFsYXJtIChpbiBjYXNlIG9mIGVycm9yKSAqLworICAg IGlmICh4eCA8IDBMKSB7CisgICAgICAgIHByaW50ZigiJWxkIC0gaWxsZWdhbCB2YWx1ZSwgbXVz dCBiZSAwIG9yIHBvc2l0aXZlXG4iLCB4eCk7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQor ICAgIGlmICh4eCA9PSAwTCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIENMRUFSIEFMQVJNICov CisgICAgICAgIGFscm1fZGF0ZVswXSA9IE5VTDsKKyAgICAgICAgYWxybV90aW1lWzBdID0gTlVM OworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICB4ID0gODsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVudCBkYXRlICovCisgICAg cyA9IGFscm1fZGF0ZTsKKyAgICBpZiAoenpzdHJpbmcoIlxcdihuZGF0ZSkiLCZzLCZ4KSA8IDAp IHsKKyAgICAgICAgcHJpbnRmKCJJbnRlcm5hbCBkYXRlIGVycm9yLCBzb3JyeS5cbiIpOworICAg ICAgICBhbHJtX2RhdGVbMF0gPSBTUDsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAg eCA9IDU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgdGltZSAq LworICAgIHMgPSBhbHJtX3RpbWU7CisgICAgaWYgKHp6c3RyaW5nKCJcXHYobnRpbWUpIiwmcywm eCkgPCAwKSB7CisgICAgICAgIHByaW50ZigiSW50ZXJuYWwgdGltZSBlcnJvciwgc29ycnkuXG4i KTsKKyAgICAgICAgYWxybV90aW1lWzBdID0gU1A7CisgICAgICAgIHJldHVybigtOSk7CisgICAg fQorICAgIHNwcmludGYoYnVmLCIlMDVsZCIsYXRvbChhbHJtX3RpbWUpKTsgLyogU0FGRSAoMjAp ICovCisgICAgY2tzdHJuY3B5KGFscm1fdGltZSxidWYsOCk7CisgICAgZGVidWcoRjExMCwiU0VU IEFMQVJNIGRhdGUgKDEpIixhbHJtX2RhdGUsMCk7CisgICAgZGVidWcoRjExMCwiU0VUIEFMQVJN IHRpbWUgKDEpIixhbHJtX3RpbWUsMCk7CisKKyAgICBpZiAoKHp6ID0gYXRvbChhbHJtX3RpbWUp ICsgeHgpIDwgMEwpIHsKKyAgICAgICAgcHJpbnRmKCJJbnRlcm5hbCB0aW1lIGNvbnZlcnNpb24g ZXJyb3IsIHNvcnJ5LlxuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmICh6 eiA+PSA4NjQwMEwpIHsgICAgICAgICAgICAgICAgIC8qIEFsYXJtIGNyb3NzZXMgbWlkbmlnaHQg Ki8KKyAgICAgICAgY2hhciBkWzEwXTsgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBkYXRl IGJ1ZmZlciAqLworICAgICAgICBpbnQgbGFzdGRheTsgICAgICAgICAgICAgICAgICAgIC8qIExh c3QgZGF5IG9mIHRoaXMgbW9udGggKi8KKworICAgICAgICBja3N0cm5jcHkoZCxhbHJtX2RhdGUs OCk7ICAgICAgIC8qIFdlJ2xsIGhhdmUgdG8gY2hhbmdlIHRoZSBkYXRlICovCisKKyAgICAgICAg eCA9ICh6eiAvIDg2NDAwTCk7ICAgICAgICAgICAgICAvKiBIb3cgbWFueSBkYXlzIGFmdGVyIHRv ZGF5ICovCisKKyAgICAgICAgZGQgPSBhdG9pKChjaGFyICopKGQrNikpOyAgICAgICAvKiBQYXJz ZSB5eXl5bW1kZCAqLworICAgICAgICBkWzZdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgIC8q IGludG8geXl5eSwgbW0sIGRkIC4uLiAqLworICAgICAgICBtbSA9IGF0b2koKGNoYXIgKikoZCs0 KSk7CisgICAgICAgIGRbNF0gPSBOVUw7CisgICAgICAgIHl5eXkgPSBhdG9pKChjaGFyICopZCk7 CisKKyAgICAgICAgLyogSG93IG1hbnkgZGF5cyBpbiB0aGlzIG1vbnRoICovCisKKyAgICAgICAg bGFzdGRheSA9IG1kYXlzW21tXTsKKyAgICAgICAgaWYgKG1tID09IDIgJiYgeXl5eSAlIDQgPT0g MCkgICAvKiBXb3JrcyB0aHJ1IDIwOTkgQUQuLi4gKi8KKyAgICAgICAgICBsYXN0ZGF5Kys7CisK KyAgICAgICAgaWYgKGRkICsgeCA+IGxhc3RkYXkpIHsgICAgICAgICAvKiBEdW1iIGxvb3AgKi8K KyAgICAgICAgICAgIGludCB5OworCisgICAgICAgICAgICB4IC09IChtZGF5c1ttbV0gLSBkZCk7 ICAgICAgLyogRGVkdWN0IHJlc3Qgb2YgdGhpcyBtb250aCdzIGRheXMgKi8KKworICAgICAgICAg ICAgLyogVGhlcmUncyBhIG1vcmUgZWxlZ2FudCB3YXkgdG8gZG8gdGhpcy4uLiAqLworCisgICAg ICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIG1tKys7ICAgICAgICAgICAgICAg ICAgIC8qIE5leHQgbW9udGggKi8KKyAgICAgICAgICAgICAgICBpZiAobW0gPiAxMikgeyAgICAg ICAgICAvKiBXcmFwIGFyb3VuZCAqLworICAgICAgICAgICAgICAgICAgICBtbSA9IDE7ICAgICAg ICAgICAgIC8qIEphbiwgbmV4dCB5ZWFyICovCisgICAgICAgICAgICAgICAgICAgIHl5eXkrKzsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeSA9IG1kYXlzW21tXTsgICAgICAg ICAgLyogRGF5cyBpbiBuZXcgbW9udGggKi8KKyAgICAgICAgICAgICAgICBpZiAobW0gPT0gMiAm JiB5eXl5ICUgNCA9PSAwKSAvKiBGZWIgaW4gbGVhcCB5ZWFyICovCisgICAgICAgICAgICAgICAg ICB5Kys7ICAgICAgICAgICAgICAgICAgLyogV29ya3MgdW50aWwgMjEwMCBBRCAqLworICAgICAg ICAgICAgICAgIGlmICh4IC0geSA8IDEpCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICB4IC09IHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZCA9IHg7ICAg ICAgICAgICAgICAgICAgICAgLyogRGF5IG9mIGFsYXJtIG1vbnRoICovCisgICAgICAgIH0gZWxz ZSBkZCArPSB4OworCisgICAgICAgIHNwcmludGYoYWxybV9kYXRlLCIlMDRkJTAyZCUwMmQiLHl5 eXksbW0sZGQpOyAvKiBTQUZFICgyNCkgKi8KKyAgICAgICAgenogPSB6eiAlIDg2NDAwTDsKKyAg ICB9CisgICAgc3ByaW50ZihhbHJtX3RpbWUsIiVsZCIsenopOyAgICAgICAgLyogU0FGRSAoMjQp ICovCisgICAgZGVidWcoRjExMCwiU0VUIEFMQVJNIGRhdGUgKDIpIixhbHJtX2RhdGUsMCk7Cisg ICAgZGVidWcoRjExMCwiU0VUIEFMQVJNIHRpbWUgKDIpIixhbHJtX3RpbWUsMCk7CisgICAgY2tf YWxhcm0gPSB4eDsKKyNlbHNlCisgICAgLyogSnVsIDE5OTggKi8KKyAgICBja3N0cm5jcHkoeGJ1 Zixja2N2dGRhdGUoIiIsMSksMjApOyAvKiBHZXQgY3VycmVudCBkYXRlIGFuZCB0aW1lICovCisg ICAgcCA9IHhidWY7CisgICAgY2tzdHJuY3B5KGFscm1fZGF0ZSx4YnVmLDEwKTsKKyAgICBhbHJt X2RhdGVbOF0gPSBOVUw7CisgICAgc2VjID0gYXRvbChwKzkpICogMzYwMEwgKyBhdG9sKHArMTIp ICogNjBMICsgYXRvbChwKzE1KTsKKyAgICBkZWJ1ZyhGMTEwLCJTRVQgQUxBUk0gZGF0ZSAoMSki LGFscm1fZGF0ZSwwKTsKKyAgICBkZWJ1ZyhGMTAxLCJTRVQgQUxBUk0gdGltZSAoMSkiLCIiLHNl Yyk7CisgICAgaWYgKChzZWMgKz0geHgpIDwgMEwpIHsKKyAgICAgICAgcHJpbnRmKCJJbnRlcm5h bCB0aW1lIGNvbnZlcnNpb24gZXJyb3IsIHNvcnJ5LlxuIik7CisgICAgICAgIHJldHVybigtOSk7 CisgICAgfQorICAgIGlmIChzZWMgPj0gODY0MDBMKSB7ICAgICAgICAgICAgICAgIC8qIEFsYXJt IGNyb3NzZXMgbWlkbmlnaHQgKi8KKyAgICAgICAgbG9uZyBkYXlzOworICAgICAgICBkYXlzID0g c2VjIC8gODY0MDBMOworICAgICAgICBqZCA9IG1qZChwKSArIGRheXM7ICAgICAgICAgICAgIC8q IEdldCBtb2RpZmllZCBKdWxpYW4gZGF0ZSAqLworICAgICAgICBja3N0cm5jcHkoYWxybV9kYXRl LG1qZDJkYXRlKGpkKSwxMCk7CisgICAgICAgIHNlYyAlPSA4NjQwMEw7CisgICAgfQorICAgIHNw cmludGYoYWxybV90aW1lLCIlMDVsZCIsc2VjKTsgICAgIC8qIFNBRkUgKDI0KSAqLworICAgIGRl YnVnKEYxMTAsIlNFVCBBTEFSTSBkYXRlICgyKSIsYWxybV9kYXRlLDApOworICAgIGRlYnVnKEYx MTAsIlNFVCBBTEFSTSB0aW1lICgyKSIsYWxybV90aW1lLDApOworICAgIGNrX2FsYXJtID0gMTsg ICAgICAgICAgICAgICAgICAgICAgIC8qIEFsYXJtIGlzIHNldCAqLworCisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8K KworI2lmbmRlZiBOT1NFVEtFWQoraW50Citkb3NldGtleSgpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU0VUIEtFWSAqLworICAgIGludCB4LCB5OworICAgIGludCBmbGFnID0gMDsK KyAgICBpbnQga2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXkgY29kZSAqLwor ICAgIGNoYXIgKnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtleSBiaW5kaW5nICov CisjaWZuZGVmIE5PS1ZFUkJTCisgICAgY2hhciAqcDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogV29ya2VyICovCisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyNpZmRlZiBPUzIKKyAgICBl eHRlcm4gaW50IG9zMmdrczsKKyAgICBleHRlcm4gaW50IG1za2tleXM7CisgICAgZXh0ZXJuIGlu dCBpbml0dmlrOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgeF9pZm51bSA9IDE7CisgICAgeSA9 IGNtbnVtKCJudW1lcmljIGtleSBjb2RlLCBvciB0aGUgd29yZCBDTEVBUiwiLCIiLDEwLCZrYyx4 eHN0cmluZyk7CisgICAgeF9pZm51bSA9IDA7CisgICAgaWYgKHkgPCAwKSB7CisgICAgICAgIGRl YnVnKEYxMTEsIlNFVCBLRVkiLGF0bWJ1Zix5KTsKKyAgICAgICAgaWYgKHkgPT0gLTIpIHsgICAg ICAgICAgICAgICAgICAvKiBOb3QgYSB2YWxpZCBudW1iZXIgKi8KKyAgICAgICAgICAgIGlmICgo eSA9IHN0cmxlbihhdG1idWYpKSA8IDApIC8qIENoZWNrIGZvciBTRVQgS0VZIENMRUFSICovCisg ICAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICAgICBpZiAoY2tzdHJjbXAoYXRtYnVm LCJjbGVhciIseSwwKSkKKyAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAg ICAgZm9yICh5ID0gMDsgeSA8IEtNU0laRTsgeSsrKSB7CisgICAgICAgICAgICAgICAga2V5bWFw W3ldID0gKEtFWSkgeTsKKyAgICAgICAgICAgICAgICBtYWNyb3RhYlt5XSA9IE5VTEw7CisgICAg ICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAgICAgICBrZXltYXBpbml0KCk7ICAgICAgICAg ICAgICAgLyogU3BlY2lhbCBPUy8yIGluaXRpYWxpemF0aW9ucyAqLworICAgICAgICAgICAgaW5p dHZpayA9IDE7ICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgVklLIHRhYmxlICovCisjZW5k aWYgLyogT1MyICovCisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0gZWxzZSBpZiAo eSA9PSAtMykgeyAgICAgICAgICAgLyogU0VUIEtFWSA8UmV0dXJuPiAqLworICAgICAgICAgICAg cHJpbnRmKCIgUHJlc3Mga2V5IHRvIGJlIGRlZmluZWQ6ICIpOyAvKiBQcm9tcHQgZm9yIGEga2V5 c3Ryb2tlICovCisjaWZkZWYgVU5JWAorI2lmZGVmIE5PU0VUQlVGCisgICAgICAgICAgICBmZmx1 c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAg ICAgICAgICAgIGNvbmJpbigoY2hhcillc2NhcGUpOyAgICAgICAvKiBQdXQgdGVybWluYWwgaW4g YmluYXJ5IG1vZGUgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIG9zMmdrcyA9IDA7ICAgICAg ICAgICAgICAgICAvKiBUdXJuIG9mZiBLdmVyYiBwcmVwcm9jZXNzaW5nICovCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICBrYyA9IGNvbmdrcygwKTsgICAgICAgICAgICAgLyogR2V0IGNo YXJhY3RlciBvciBzY2FuIGNvZGUgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIG9zMmdrcyA9 IDE7ICAgICAgICAgICAgICAgICAvKiBUdXJuIG9uIEt2ZXJiIHByZXByb2Nlc3NpbmcgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAv KiBSZXN0b3JlIHRlcm1pbmFsIHRvIGNicmVhayBtb2RlICovCisgICAgICAgICAgICBpZiAoa2Mg PCAwKSB7ICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGVycm9yICovCisgICAgICAgICAgICAg ICAgcHJpbnRmKCI/RXJyb3IgcmVhZGluZyBrZXlcbiIpOworICAgICAgICAgICAgICAgIHJldHVy bigwKTsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIHNob2tleWNvZGUo a2MsLTEpOyAgICAgICAgICAvKiBTaG93IGN1cnJlbnQgZGVmaW5pdGlvbiAqLworI2Vsc2UKKyAg ICAgICAgICAgIHNob2tleWNvZGUoa2MpOyAgICAgICAgICAgICAvKiBTaG93IGN1cnJlbnQgZGVm aW5pdGlvbiAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgZmxhZyA9IDE7ICAgICAg ICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGl0J3MgYSBtdWx0aWxpbmUgY29tbWFuZCAqLworICAg ICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAg ICAgcmV0dXJuKHkpOworICAgIH0KKworICAgIC8qIE5vcm1hbCBTRVQgS0VZIDxzY2FuY29kZT4g PHZhbHVlPiBjb21tYW5kLi4uICovCisKKyNpZmRlZiBPUzIKKyAgICBpZiAobXNra2V5cykKKyAg ICAgIGtjID0gbXNrdG9jayhrYyk7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoa2MgPCAw IHx8IGtjID49IEtNU0laRSkgeworICAgICAgICBwcmludGYoIj9rZXkgY29kZSBtdXN0IGJlIGJl dHdlZW4gMCBhbmQgJWRcbiIsIEtNU0laRSAtIDEpOworICAgICAgICByZXR1cm4oLTkpOworICAg IH0KKyAgICBpZiAoa2MgPT0gZXNjYXBlKSB7CisgICAgICAgIHByaW50ZigiU29ycnksICVkIGlz IHRoZSBDT05ORUNULW1vZGUgZXNjYXBlIGNoYXJhY3RlclxuIixrYyk7CisgICAgICAgIHJldHVy bigtOSk7CisgICAgfQorI2lmZGVmIE9TMgorICAgIHdpZGVyZXN1bHQgPSAtMTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICBpZiAoZmxhZykgeworICAgICAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7 CisgICAgICAgIGNtc2V0cCgiIEVudGVyIG5ldyBkZWZpbml0aW9uOiAiKTsKKyAgICAgICAgY21p bmkoY2t4ZWNoKTsKKyAgICAgICAgY21mbGdzID0gMDsKKyAgICAgICAgcHJvbXB0KE5VTEwpOwor ICAgIH0KKyAgZGVmX2FnYWluOgorICAgIGlmIChmbGFnKQorICAgICAgY21yZXMoKTsKKyAgICBp ZiAoKHkgPSBjbXR4dCgia2V5IGRlZmluaXRpb24sXG5cCitvciBDdHJsLUMgdG8gY2FuY2VsIHRo aXMgY29tbWFuZCxcblwKK29yIEVudGVyIHRvIHJlc3RvcmUgZGVmYXVsdCBkZWZpbml0aW9uIiwK KyAgICAgICAgICAgICAgICAgICAiIiwmcyxOVUxMKSkgPCAwKSB7CisgICAgICAgIGlmIChmbGFn KSAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIHBhcnNlIGVycm9ycyAqLworICAgICAg ICAgIGdvdG8gZGVmX2FnYWluOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuKHkpOwor ICAgIH0KKyAgICBzID0gYnJzdHJpcChzKTsKKyNpZm5kZWYgTk9LVkVSQlMKKyAgICBwID0gczsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHRoaXMgcGxhY2UgKi8KKyNlbmRp ZiAvKiBOT0tWRVJCUyAqLworLyoKKyAgSWYgdGhlIGRlZmluaXRpb24gaW5jbHVkZWQgYW55IFxL dmVyYnMsIHF1b3RlIHRoZSBiYWNrc2xhc2ggc28gdGhlIFxLdmVyYgorICB3aWxsIHN0aWxsIGJl IGluIHRoZSBkZWZpbml0aW9uIHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLiAgV2UgZG9uJ3QgZG8g dGhpcworICBpbiB6enN0cmluZygpLCBiZWNhdXNlIFxLdmVyYnMgYXJlIHZhbGlkIG9ubHkgaW4g dGhpcyBjb250ZXh0IGFuZCBub3doZXJlCisgIGVsc2UuCisKKyAgV2UgdXNlIHRoaXMgY29kZSBh Y3RpdmUgZm9yIGFsbCB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQgU0VUIEtFWSwgZXZlbiBpZiB0aGV5 CisgIGRvbid0IHN1cHBvcnQgXEt2ZXJicywgYmVjYXVzZSBvdGhlcndpc2UgXEsgd291bGQgYmVo YXZlIGRpZmZlcmVudGx5IGZvcgorICBkaWZmZXJlbnQgdmVyc2lvbnMuCisqLworICAgIGZvciAo eCA9IDAsIHkgPSAwOyBzW3hdOyB4KyssIHkrKykgeyAvKiBDb252ZXJ0IFxLIHRvIFxcSyAqLwor ICAgICAgICBpZiAoKHggPiAwKSAmJgorICAgICAgICAgICAgKHNbeF0gPT0gJ0snIHx8IHNbeF0g PT0gJ2snKQorICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhdmUg SyAqLworCisgICAgICAgICAgICBpZiAoKHggPT0gMSAmJiBzW3gtMV0gPT0gQ01EUSkgfHwKKyAg ICAgICAgICAgICAgICAoeCA+IDEgJiYgc1t4LTFdID09IENNRFEgJiYgc1t4LTJdICE9IENNRFEp KSB7CisgICAgICAgICAgICAgICAgbGluZVt5KytdID0gQ01EUTsgICAgICAgLyogTWFrZSBpdCBc XEsgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh4ID4gMSAmJiBzW3gtMV0gPT0g J3snICYmIHNbeC0yXSA9PSBDTURRKSB7CisgICAgICAgICAgICAgICAgbGluZVt5LTFdID0gQ01E UTsgICAgICAgLyogSGF2ZSBce0sgKi8KKyAgICAgICAgICAgICAgICBsaW5lW3krK10gPSAneyc7 ICAgICAgICAvKiBNYWtlIGl0IFxce0sgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBsaW5lW3ldID0gc1t4XTsKKyAgICB9CisgICAgbGluZVt5KytdID0gTlVMOyAgICAgICAg ICAgICAgICAgICAgLyogVGVybWluYXRlICovCisgICAgcyA9IGxpbmUgKyB5ICsgMTsgICAgICAg ICAgICAgICAgICAgLyogUG9pbnQgdG8gYWZ0ZXIgaXQgKi8KKyAgICB4ID0gTElOQlVGU0laIC0g KGludCkgc3RybGVuKGxpbmUpIC0gMTsgLyogQ2FsY3VsYXRlIHJlbWFpbmluZyBzcGFjZSAqLwor ICAgIGlmICgoeCA8IChMSU5CVUZTSVogLyAyKSkgfHwKKyAgICAgICAgKHp6c3RyaW5nKGxpbmUs ICZzLCAmeCkgPCAwKSkgeyAvKiBFeHBhbmQgdmFyaWFibGVzLCBldGMuICovCisgICAgICAgIHBy aW50ZigiP0tleSBkZWZpbml0aW9uIHRvbyBsb25nXG4iKTsKKyAgICAgICAgaWYgKGZsYWcpIGNt c2V0cChwc2F2ZSk7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIHMgPSBsaW5lICsg eSArIDE7ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdC4gKi8KKworI2lmbmRl ZiBOT0tWRVJCUworLyoKKyAgU3BlY2lhbCBjYXNlOiBzZWUgaWYgdGhlIGRlZmluaXRpb24gc3Rh cnRzIHdpdGggYSBcS3ZlcmIuCisgIElmIGl0IGRvZXMsIHBvaW50IHRvIGl0IHdpdGggcCwgb3Ro ZXJ3aXNlIHNldCBwIHRvIE5VTEwuCisqLworICAgIHAgPSBzOworICAgIGlmICgqcCsrID09IENN RFEpIHsKKyAgICAgICAgaWYgKCpwID09ICd7JykgcCsrOworICAgICAgICBwID0gKCpwID09ICdr JyB8fCAqcCA9PSAnSycpID8gcCArIDEgOiBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBOT0tWRVJC UyAqLworCisgICAgaWYgKG1hY3JvdGFiW2tjXSkgeyAgICAgICAgICAgICAgICAgLyogUG9zc2li bHkgZnJlZSBvbGQgbWFjcm8gZnJvbSBrZXkuICovCisgICAgICAgIGZyZWUoKGNoYXIgKiltYWNy b3RhYltrY10pOworICAgICAgICBtYWNyb3RhYltrY10gPSBOVUxMOworICAgIH0KKyAgICBzd2l0 Y2ggKHN0cmxlbihzKSkgeyAgICAgICAgICAgICAgICAvKiBBY3Rpb24gZGVwZW5kcyBvbiBsZW5n dGggKi8KKyAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0 byBkZWZhdWx0IGJpbmRpbmcgKi8KKyAgICAgICAga2V5bWFwW2tjXSA9IChLRVkpIGtjOworICAg ICAgICBicmVhazsKKyAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT aW5nbGUgY2hhcmFjdGVyICovCisgICAgICAgIGtleW1hcFtrY10gPSAoQ0hBUikgKnM7CisgICAg ICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENo YXJhY3RlciBzdHJpbmcgKi8KKyNpZm5kZWYgTk9LVkVSQlMKKyAgICAgICAgaWYgKHApIHsKKyAg ICAgICAgICAgIHkgPSB4bG9va3VwKGt2ZXJicyxwLG5rdmVyYnMsJngpOyAvKiBMb29rIGl0IHVw ICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZXQga2V5IGt2ZXJiIGxvb2t1cCIsMCx5KTsg LyogZXhhY3QgbWF0Y2ggcmVxdWlyZWQgKi8KKyAgICAgICAgICAgIGlmICh5ID4gLTEpIHsKKyAg ICAgICAgICAgICAgICBrZXltYXBba2NdID0gRl9LVkVSQiB8IHk7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0tWRVJCUyAqLwor ICAgICAgICBrZXltYXBba2NdID0gKEtFWSkga2M7CisgICAgICAgIG1hY3JvdGFiW2tjXSA9IChN QUNSTykgbWFsbG9jKHN0cmxlbihzKSsxKTsKKyAgICAgICAgaWYgKG1hY3JvdGFiW2tjXSkKKyAg ICAgICAgICBzdHJjcHkoKGNoYXIgKikgbWFjcm90YWJba2NdLCBzKTsgLyogc2FmZSAqLworICAg ICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGZsYWcpIGNtc2V0cChwc2F2ZSk7CisjaWZkZWYg T1MyCisgICAgaW5pdHZpayA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIFZJ SyB0YWJsZSAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAv KiBOT1NFVEtFWSAqLworCisjaWZkZWYgU1RPUEJJVFMKK3N0cnVjdCBrZXl0YWIgc3RvcHRibFtd ID0geworICAgIHsgIjEiLCAxLCAwIH0sCisgICAgeyAiMiIsIDIsIDAgfQorfTsKKyNlbmRpZiAv KiBTVE9QQklUUyAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzZXJ0YmxbXSA9IHsKKyAgICB7 ICI3RTEiLCAwLCAwIH0sCisgICAgeyAiN0UyIiwgMSwgMCB9LAorICAgIHsgIjdNMSIsIDIsIDAg fSwKKyAgICB7ICI3TTIiLCAzLCAwIH0sCisgICAgeyAiN08xIiwgNCwgMCB9LAorICAgIHsgIjdP MiIsIDUsIDAgfSwKKyAgICB7ICI3UzEiLCA2LCAwIH0sCisgICAgeyAiN1MyIiwgNywgMCB9LAor I2lmZGVmIEhXUEFSSVRZCisgICAgeyAiOEUxIiwgOSwgMCB9LAorICAgIHsgIjhFMiIsIDEwLCAw IH0sCisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKyAgICB7ICI4TjEiLCA4LCAwIH0sCisjaWZkZWYg SFdQQVJJVFkKKyAgICB7ICI4TjIiLCAxMSwgMCB9LAorICAgIHsgIjhPMSIsIDEyLCAwIH0sCisg ICAgeyAiOE8yIiwgMTMsIDAgfSwKKyNlbmRpZiAvKiBIV1BBUklUWSAqLworICAgIHsgIiIsIDAs IDAgfQorfTsKK3N0YXRpYyBpbnQgbnNlcnRibCA9IChzaXplb2Yoc2VydGJsKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMgY2hhciAqIHNlcm5hbVtdID0geyAgICAgICAg ICAgICAgLyogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBzZXJ0YmxbXSAqLworICAiN0UxIiwgIjdF MiIsICI3TTEiLCAiN00yIiwgIjdPMSIsICI3TzIiLCAiN1MxIiwgIjdTMiIsCisgICI4TjEiLCAi OEUxIiwgIjhFMiIsICI4TjIiLCAiOE8xIiwgIjhPMiIKK307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5 dGFiIG9wdHN0YWJbXSA9IHsgICAgICAvKiBTRVQgT1BUSU9OUyB0YWJsZSAqLworI2lmbmRlZiBO T0ZSSUxMUworICAgIHsgImRlbGV0ZSIsICAgIFhYREVMLCAgIDB9LCAgICAgICAgICAgIC8qIERF TEVURSAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisgICAgeyAiZGlyZWN0b3J5IiwgWFhESVIs ICAgMH0sICAgICAgICAgLyogRElSRUNUT1JZICovCisjaWZkZWYgQ0tQVVJHRQorICAgIHsgInB1 cmdlIiwgICAgIFhYUFVSR0UsIDB9LCAgICAgICAgIC8qIFBVUkdFICovCisjZW5kaWYgLyogQ0tQ VVJHRSAqLworICAgIHsgInR5cGUiLCAgICAgIFhYVFlQLCAgIDB9LCAgICAgICAgIC8qIFRZUEUg Ki8KKyAgICB7ICIiLCAwLCAwfQorfTsKK3N0YXRpYyBpbnQgbm9wdHN0YWIgPSAgKHNpemVvZihv cHRzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisjaWZuZGVmIE5PWEZFUgor LyoKKyAgUFJPVE9DT0wgU0VMRUNUSU9OLiAgS2VybWl0IGlzIGFsd2F5cyBhdmFpbGFibGUuICBJ ZiBDS19YWVogaXMgZGVmaW5lZCBhdAorICBjb21waWxlIHRpbWUsIHRoZW4gdGhlIG90aGVycyBi ZWNvbWUgc2VsZWN0aW9ucyBhbHNvLiAgSW4gT1MvMiBhbmQKKyAgV2luZG93cywgdGhleSBhcmUg aW50ZWdyYXRlZCBhbmQgdGhlIHZhcmlvdXMgU0VUIGNvbW1hbmRzIChlLmcuICJzZXQgZmlsZQor ICB0eXBlIikgYWZmZWN0IHRoZW0gYXMgdGhleSB3b3VsZCBLZXJtaXQuICBJbiBvdGhlciBPUydz IChVTklYLCBWTVMsIGV0YyksCisgIHRoZXkgYXJlIGV4dGVybmFsIHByb3RvY29scyB3aGljaCBh cmUgcnVuIHZpYSBLZXJtaXQncyBSRURJUkVDVCBtZWNoYW5pc20uCisgIEFsbCB3ZSBkbyBpcyBj b2xsZWN0IGFuZCB2ZXJpZnkgdGhlIGZpbGVuYW1lcyBhbmQgcGFzcyB0aGVtIGFsb25nIHRvIHRo ZQorICBleHRlcm5hbCBwcm90b2NvbC4KKyovCitzdHJ1Y3Qga2V5dGFiIHByb3Rvc1tdID0gewor I2lmZGVmIENLX1hZWgorICAgICJnIiwgICAgICAgICAgUFJPVE9fRywgIENNX0lOViwKKyNlbmRp ZiAvKiBDS19YWVogKi8KKyAgICAia2VybWl0IiwgICAgIFBST1RPX0ssICAwLAorI2lmZGVmIENL X1hZWgorICAgICJvdGhlciIsICAgICAgUFJPVE9fTywgIDAsCisgICAgIngiLCAgICAgICAgICBQ Uk9UT19YLCAgQ01fSU5WfENNX0FCUiwKKyAgICAieG1vZGVtIiwgICAgIFBST1RPX1gsICAwLAor ICAgICJ4bW9kZW0tY3JjIiwgUFJPVE9fWEMsIDAsCisgICAgInkiLCAgICAgICAgICBQUk9UT19Z LCAgQ01fSU5WfENNX0FCUiwKKyAgICAieW1vZGVtIiwgICAgIFBST1RPX1ksICAwLAorICAgICJ5 bW9kZW0tZyIsICAgUFJPVE9fRywgIDAsCisgICAgInptb2RlbSIsICAgICBQUk9UT19aLCAgMAor I2VuZGlmIC8qIENLX1hZWiAqLworfTsKK2ludCBucHJvdG9zID0gIChzaXplb2YocHJvdG9zKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZm5kZWYgWFlaX0lOVEVSTkFMCisjaWZuZGVm IE5PUFVTSAorI2RlZmluZSBFWFBfSEFORExFUiAxCisjZGVmaW5lIEVYUF9TVERFUlIgIDIKKyNk ZWZpbmUgRVhQX1RJTU8gICAgMworCitzdGF0aWMgc3RydWN0IGtleXRhYiBleHRwcm90YWJbXSA9 IHsKKyAgICB7ICJoYW5kbGVyIiwgICAgICAgICAgRVhQX0hBTkRMRVIsIDAgfSwKKyAgICB7ICJy ZWRpcmVjdC1zdGRlcnIiLCAgRVhQX1NUREVSUiwgMCB9LAorICAgIHsgInRpbWVvdXQiLCAgICAg ICAgICBFWFBfVElNTywgMCB9Cit9Oworc3RhdGljIGludCBueHRwcm90YWIgPSAgKHNpemVvZihl eHRwcm90YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZgkvKiBOT1BVU0ggKi8K KyNlbmRpZgkvKiBYWVpfSU5URVJOQUwgKi8KKworI2RlZmluZSBYUENNRExFTiA3MQorCitfUFJP VE9UWVAoc3RhdGljIGludCBwcm90b2ZpZWxkLCAoY2hhciAqLCBjaGFyICosIGNoYXIgKikpOwor X1BST1RPVFlQKHN0YXRpYyBpbnQgc2V0cHJvdG8sICh2b2lkKSk7CisKK3N0YXRpYyBpbnQKK3By b3RvZmllbGQoY3VycmVudCwgaGVscCwgcHgpIGNoYXIgKiBjdXJyZW50LCAqIGhlbHAsICogcHg7 IHsKKworICAgIGNoYXIgKnMsIHRtcGJ1ZltYUENNRExFTisxXTsKKyAgICBpbnQgeDsKKworICAg IGlmIChjdXJyZW50KSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1dCBicmFjZXMgYXJvdW5k IGRlZmF1bHQgKi8KKyAgICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosInsiLGN1cnJlbnQs In0iLE5VTEwpOworICAgIGVsc2UKKyAgICAgIHRtcGJ1ZlswXSA9IE5VTDsKKworICAgIGlmICgo eCA9IGNtZmxkKGhlbHAsIChjaGFyICopdG1wYnVmLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAg ICByZXR1cm4oeCk7CisgICAgaWYgKChpbnQpc3RybGVuKHMpID4gWFBDTURMRU4pIHsKKyAgICAg ICAgcHJpbnRmKCI/U29ycnkgLSBtYXhpbXVtIGxlbmd0aCBpcyAlZFxuIiwgWFBDTURMRU4pOwor ICAgICAgICByZXR1cm4oLTkpOworICAgIH0gZWxzZSBpZiAoKnMpIHsKKyAgICAgICAgc3RyY3B5 KHB4LHMpOyAgICAgICAgICAgICAgICAgICAvKiBzYWZlICovCisgICAgfSBlbHNlIHsKKyAgICAg ICAgcHggPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4oeCk7Cit9CisKK3N0YXRpYyBpbnQKK3Nl dHByb3RvKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3QgYSBmaWxlIHRy YW5zZmVyIHByb3RvY29sICovCisgICAgLyogY2hhciAqIHMgPSBOVUxMOyAqLworICAgIGludCB4 ID0gMCwgeTsKKyAgICBjaGFyIHMxW1hQQ01ETEVOKzFdLCBzMltYUENNRExFTisxXSwgczNbWFBD TURMRU4rMV07CisgICAgY2hhciBzNFtYUENNRExFTisxXSwgczVbWFBDTURMRU4rMV0sIHM2W1hQ Q01ETEVOKzFdLCBzN1tYUENNRExFTisxXTsKKyAgICBjaGFyICogcDEgPSBzMSwgKiBwMiA9IHMy LCAqcDMgPSBzMzsKKyAgICBjaGFyICogcDQgPSBzNCwgKiBwNSA9IHM1LCAqcDYgPSBzNiwgKnA3 ID0gczc7CisKKyNpZmRlZiBYWVpfSU5URVJOQUwKKyAgICBleHRlcm4gaW50IHBfYXZhaWw7Cisj ZWxzZQorI2lmbmRlZiBDS19SRURJUgorICAgIHggPSAxOworI2VuZGlmIC8qIENLX1JFRElSICov CisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisgICAgczFbMF0gPSBOVUw7CisgICAgczJbMF0g PSBOVUw7CisgICAgczNbMF0gPSBOVUw7CisgICAgczRbMF0gPSBOVUw7CisgICAgczVbMF0gPSBO VUw7CisgICAgczZbMF0gPSBOVUw7CisKKyAgICBpZiAoKHkgPSBjbWtleShwcm90b3MsbnByb3Rv cywiIiwia2VybWl0Iix4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih5KTsKKworICAgIGlm ICh4ICYmIHkgIT0gUFJPVE9fSykgeworICAgICAgICBwcmludGYoCisgICAgICAgICAgICI/U29y cnksIFJFRElSRUNUIGNhcGFiaWxpdHkgcmVxdWlyZWQgZm9yIGV4dGVybmFsIHByb3RvY29scy5c biIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoKHggPSBwcm90b2ZpZWxk KHB0YWJbeV0uaF9iX2luaXQsCisgICAgICJPcHRpb25hbCBjb21tYW5kIHRvIHNlbmQgdG8gaG9z dCBwcmlvciB0byB1cGxvYWRpbmcgaW4gYmluYXJ5IG1vZGUiLAorICAgICAgICAgICAgICAgcDEp KSA8IDApIHsKKyAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgIHByb3RvY29sID0g eTsgICAgICAgICAgICAgICAvKiBTZXQgcHJvdG9jb2wgYnV0IGRvbid0IGNoYW5nZSAqLworICAg ICAgICAgICAgcmV0dXJuKDEpOyAgICAgICAgICAgICAgICAgIC8qIGFueXRoaW5nIGVsc2UgKi8K KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuKHgpOworICAgIH0KKyAgICBpZiAoKHgg PSBwcm90b2ZpZWxkKHB0YWJbeV0uaF90X2luaXQsCisgICAgICJPcHRpb25hbCBjb21tYW5kIHRv IHNlbmQgdG8gaG9zdCBwcmlvciB0byB1cGxvYWRpbmcgaW4gdGV4dCBtb2RlIiwKKyAgICAgICAg ICAgICAgIHAyKSkgPCAwKSB7CisgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgIGdvdG8g cHJvdG9leGl0OworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuKHgpOworICAgIH0KKwor ICAgIGlmICh5ID09IFBST1RPX0spIHsKKyAgICAgICAgaWYgKCh4ID0gcHJvdG9maWVsZChwdGFi W3ldLmhfeF9pbml0LAorICAgICAgICAgICAgICAgICAgICAiT3B0aW9uYWwgY29tbWFuZCB0byBz ZW5kIHRvIGhvc3QgdG8gc3RhcnQgS2VybWl0IHNlcnZlciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcDMpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAg ICAgICBnb3RvIHByb3RvZXhpdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICB9CisgICAgfQorCisKKyNpZm5kZWYgWFlaX0lOVEVSTkFMICAgICAg ICAgICAgICAgICAgICAvKiBJZiBYWVpNT0RFTSBhcmUgZXh0ZXJuYWwuLi4gKi8KKworICAgIGlm ICh5ICE9IFBST1RPX0spIHsKKyAgICAgICAgaWYgKCh4ID0gcHJvdG9maWVsZChwdGFiW3ldLnBf Yl9zY21kLAorICAgICAgICAgICAgICAgICAiRXh0ZXJuYWwgY29tbWFuZCB0byBTRU5EIGluIEJJ TkFSWSBtb2RlIHdpdGggdGhpcyBwcm90b2NvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcDQpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgICAgICBn b3RvIHByb3RvZXhpdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICB9CisgICAgICAgIGlmICgoeCA9IHByb3RvZmllbGQocHRhYlt5XS5wX3Rfc2Nt ZCwKKyAgICAgICAgICAgICAgICAgIkV4dGVybmFsIGNvbW1hbmQgdG8gU0VORCBpbiBURVhUIG1v ZGUgd2l0aCB0aGlzIHByb3RvY29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNSkp IDwgMCkgeworICAgICAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAgICAgIGdvdG8gcHJv dG9leGl0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCh4ID0gcHJvdG9maWVsZChwdGFiW3ldLnBfYl9yY21kLAorICAg ICAgICAgICAgICAgIkV4dGVybmFsIGNvbW1hbmQgdG8gUkVDRUlWRSBpbiBCSU5BUlkgbW9kZSB3 aXRoIHRoaXMgcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA2KSkgPCAw KSB7CisgICAgICAgICAgICBpZiAoeCA9PSAtMykKKyAgICAgICAgICAgICAgZ290byBwcm90b2V4 aXQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg fQorICAgICAgICBpZiAoKHggPSBwcm90b2ZpZWxkKHB0YWJbeV0ucF90X3JjbWQsCisgICAgICAg ICAgICAgICAgICJFeHRlcm5hbCBjb21tYW5kIHRvIFJFQ0VJVkUgaW4gVEVYVCBtb2RlIHdpdGgg dGhpcyBwcm90b2NvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDcpKSA8IDApIHsK KyAgICAgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgICAgICBnb3RvIHByb3RvZXhpdDsK KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9Cisg ICAgfQorI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworCisgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSAgICAgICAgICAgICAgLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLworICAgICAgcmV0dXJu KHgpOworCitwcm90b2V4aXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbW9u IGV4aXQgZnJvbSB0aGlzIHJvdXRpbmUgKi8KKworI2lmZGVmIFhZWl9JTlRFUk5BTAorICAgIGlm ICghcF9hdmFpbCkgeworICAgICAgICBibGVlcChCUF9XQVJOKTsKKyAgICAgICAgcHJpbnRmKCJc bj9YLFksIGFuZCBabW9kZW0gYXJlIHVuYXZhaWxhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICovCisKKyAgICBwMSA9 IGJyc3RyaXAocDEpOworICAgIHAyID0gYnJzdHJpcChwMik7CisgICAgcDMgPSBicnN0cmlwKHAz KTsKKyAgICBwNCA9IGJyc3RyaXAocDQpOworICAgIHA1ID0gYnJzdHJpcChwNSk7CisgICAgcDYg PSBicnN0cmlwKHA2KTsKKyAgICBwNyA9IGJyc3RyaXAocDcpOworICAgIGluaXRwcm90byh5LHAx LHAyLHAzLHA0LHA1LHA2LHA3KTsKKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorCisjaWZu ZGVmIE5PUFVTSAorI2lmbmRlZiBYWVpfSU5URVJOQUwKKworI2RlZmluZSBERUZfRVhQX1RJTU8g MTIJIC8qIERlZmF1bHQgdGltZW91dCBmb3IgZXh0ZXJuYWwgcHJvdG9jb2wgKHNlY29uZHMpICov CisKK2ludCBleHBfaGFuZGxlciA9IDA7CQkJLyogVGhlc2UgYXJlIGV4cG9ydGVkICovCitpbnQg ZXhwX3RpbW8gPSBERUZfRVhQX1RJTU87CitpbnQgZXhwX3N0ZGVyciA9IFNFVF9BVVRPOworCitW T0lECitzaG9leHRlcm4oKSB7CQkJCS8qIEludm9rZWQgYnkgU0hPVyBQUk9UT0NPTCAqLworICAg IHByaW50ZigiXG4gRXh0ZXJuYWwtcHJvdG9jb2wgaGFuZGxlcjogICAgICAgICAlc1xuIiwKKwkg ICBleHBfaGFuZGxlciA/IChleHBfaGFuZGxlciA9PSAxID8gInB0eSIgOiAic3lzdGVtIikgOiAi YXV0b21hdGljIik7CisjaWZkZWYgQ09NTUVOVAorICAgIHByaW50ZigiIEV4dGVybmFsLXByb3Rv Y29sIHJlZGlyZWN0LXN0ZGVycjogJXNcbiIsIHNob3dvb2EoZXhwX3N0ZGVycikpOworI2VuZGlm CS8qIENPTU1FTlQgKi8KKyAgICBwcmludGYoIiBFeHRlcm5hbC1wcm90b2NvbCB0aW1lb3V0OiAg ICAgICAgICVkIChzZWMpXG4iLCBleHBfdGltbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IHNldGV4dGVybmhhbmRsZXJbXSA9IHsKKyAgICB7ICJhdXRvbWF0aWMiLCAwLCAwIH0sCisgICAg eyAicHR5IiwgICAgICAgMSwgMCB9LAorICAgIHsgInN5c3RlbSIsICAgIDIsIDAgfQorfTsKKwor aW50CitzZXRleHRlcm4oKSB7CQkJCS8qIFNFVCBFWFRFUk5BTC1QUk9UT0NPTCAqLworICAgIGlu dCB4LCB5OworICAgIGlmICgoeCA9IGNta2V5KGV4dHByb3RhYixueHRwcm90YWIsIiIsIiIseHhz dHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgc3dpdGNoICh4KSB7CisgICAgICBj YXNlIEVYUF9IQU5ETEVSOgorCWlmICgoeCA9IGNta2V5KHNldGV4dGVybmhhbmRsZXIsMywiIiwi YXV0b21hdGljIix4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKwlpZiAoKHkgPSBjbWNm bSgpKSA8IDApCisJICByZXR1cm4oeSk7CisJZXhwX2hhbmRsZXIgPSB4OworCWJyZWFrOworCQor I2lmZGVmIENPTU1FTlQKKyAgICAgIGNhc2UgRVhQX1NUREVSUjoKKwlpZiAoKHggPSBjbWtleShv b2F0YWIsMywiIiwiYXV0b21hdGljIix4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKwlp ZiAoKHkgPSBjbWNmbSgpKSA8IDApCisJICByZXR1cm4oeSk7CisJZXhwX3N0ZGVyciA9IHg7CisJ YnJlYWs7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgICBjYXNlIEVYUF9USU1POgorCXkg PSBjbW51bSgiSW5hY3Rpdml0eSB0aW1lb3V0LCBzZWNvbmRzLCIsY2tpdG9hKERFRl9FWFBfVElN TyksCisJCSAgMTAsJngseHhzdHJpbmcpOworICAgICAgICByZXR1cm4oc2V0bnVtKCZleHBfdGlt byx4LHksLTEpKTsKKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKyNlbmRpZgkv KiBYWVpfSU5URVJOQUwgKi8KKyNlbmRpZgkvKiBOT1BVU0ggKi8KKworaW50CitzZXRkZXN0KCkg eworICAgIGludCB4LCB5OworICAgIGlmICgoeSA9IGNta2V5KGRlc3R0YWIsbmRlc3RzLCIiLCJk aXNrIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOworICAgIGRlc3QgPSB5OworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworI2lmZGVmIERFQ05FVAorc3RydWN0IGtleXRhYiBkbmV0dGFiW10gPSB7 CisjaWZuZGVmIE9TMk9OTFkKKyAgICAiY3Rlcm0iLCBOUF9DVEVSTSwgMCwKKyNlbmRpZiAvKiBP UzJPTkxZICovCisgICAgImxhdCIsICAgTlBfTEFULCAgIDAKK307CitpbnQgbmRuZXQgPSAgKHNp emVvZihkbmV0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogREVDTkVU ICovCisKKy8qICBTIEUgVCBQIFIgSSBOIFQgRSBSICAtLSAgU0VUIFBSSU5URVIgY29tbWFuZCAg Ki8KKworI2lmZGVmIFBSSU5UU1dJCitzdGF0aWMgc3RydWN0IGtleXRhYiBwcm50YWJbXSA9IHsg ICAgICAgLyogU0VUIFBSSU5URVIgc3dpdGNoZXMgKi8KKyAgICAiL2JpZGlyZWN0aW9uYWwiLCAg ICBQUk5fQklELCAwLAorI2lmZGVmIE9TMgorICAgICIvY2hhcmFjdGVyLXNldCIsICAgIFBSTl9D UywgIENNX0FSRywKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAiL2NvbW1hbmQiLCAgICAgICAgICBQ Uk5fUElQLCBDTV9BUkcsCisgICAgIi9kb3MtZGV2aWNlIiwgICAgICAgUFJOX0RPUywgQ01fQVJH LAorICAgICIvZW5kLW9mLWpvYi1zdHJpbmciLFBSTl9UUk0sIENNX0FSRywKKyAgICAiL2ZpbGUi LCAgICAgICAgICAgICBQUk5fRklMLCBDTV9BUkcsCisjaWZkZWYgQlBSSU5UCisgICAgIi9mbG93 LWNvbnRyb2wiLCAgICAgUFJOX0ZMTywgQ01fQVJHLAorI2VuZGlmIC8qIEJQUklOVCAqLworICAg ICIvam9iLWhlYWRlci1maWxlIiwgIFBSTl9TRVAsIENNX0FSRywKKyNpZmRlZiBPUzIKKyAgICAi L2xlbmd0aCIsICAgICAgICAgICBQUk5fTEVOLCBDTV9BUkcsCisjZW5kaWYgLyogT1MyICovCisg ICAgIi9ub25lIiwgICAgICAgICAgICAgUFJOX05PTiwgMCwKKyNpZmRlZiBPUzIKKyAgICAiL25v cG9zdHNjcmlwdCIsICAgICBQUk5fUkFXLCAwLAorICAgICIvbm9wcyIsICAgICAgICAgICAgIFBS Tl9SQVcsIENNX0lOViwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAiL291dHB1dC1vbmx5IiwgICAg ICBQUk5fT1VULCAwLAorI2lmZGVmIEJQUklOVAorICAgICIvcGFyaXR5IiwgICAgICAgICAgIFBS Tl9QQVIsIENNX0FSRywKKyNlbmRpZiAvKiBCUFJJTlQgKi8KKyAgICAiL3BpcGUiLCAgICAgICAg ICAgICBQUk5fUElQLCBDTV9BUkd8Q01fSU5WLAorI2lmZGVmIE9TMgorICAgICIvcG9zdHNjcmlw dCIsICAgICAgIFBSTl9QUywgIDAsCisgICAgIi9wcyIsICAgICAgICAgICAgICAgUFJOX1BTLCAg Q01fSU5WLAorI2VuZGlmIC8qIE9TMiAqLworICAgICIvc2VwYXJhdG9yIiwgICAgICAgIFBSTl9T RVAsIENNX0FSR3xDTV9JTlYsCisjaWZkZWYgQlBSSU5UCisgICAgIi9zcGVlZCIsICAgICAgICAg ICAgUFJOX1NQRCwgQ01fQVJHLAorI2VuZGlmIC8qIEJQUklOVCAqLworICAgICIvdGltZW91dCIs ICAgICAgICAgIFBSTl9UTU8sIENNX0FSRywKKyAgICAiL3Rlcm1pbmF0b3IiLCAgICAgICBQUk5f VFJNLCBDTV9BUkd8Q01fSU5WLAorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisgICAgIi93IiwgICAg ICAgICAgICAgICAgUFJOX1dJTiwgQ01fQVJHfENNX0FCUnxDTV9JTlYsCisgICAgIi93aSIsICAg ICAgICAgICAgICAgUFJOX1dJTiwgQ01fQVJHfENNX0FCUnxDTV9JTlYsCisjZW5kaWYgLyogTlQg Ki8KKyAgICAiL3dpZHRoIiwgICAgICAgICAgICBQUk5fV0lELCBDTV9BUkcsCisjZW5kaWYgLyog T1MyICovCisjaWZkZWYgTlQKKyAgICAiL3dpbmRvd3MtcXVldWUiLCAgICBQUk5fV0lOLCBDTV9B UkcsCisjZW5kaWYgLyogTlQgKi8KKyAgICAiIiwgICAgICAgICAgICAgICAgIDAsICAgICAgMAor fTsKK2ludCBucHJuc3dpID0gIChzaXplb2YocHJudGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSkgLSAxOworI2VuZGlmIC8qIFBSSU5UU1dJICovCisKK3N0YXRpYyBpbnQKK3NldHByaW50ZXIo eHgpIGludCB4eDsgeworICAgIGludCB4LCB5OworICAgIGNoYXIgKiBzOworICAgIGNoYXIgKiBk ZWZuYW1lID0gTlVMTDsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHBybmNzOworI2VuZGlm IC8qIE9TMiAqLworCisjaWZkZWYgQlBSSU5UCisgICAgY2hhciBwb3J0YnVmWzY0XTsKKyAgICBs b25nIHBvcnRzcGVlZCA9IDBMOworICAgIGludCBwb3J0cGFyaXR5ID0gMDsKKyAgICBpbnQgcG9y dGZsb3cgPSAwOworI2VuZGlmIC8qIEJQUklOVCAqLworCisjaWZkZWYgUFJJTlRTV0kKKyAgICBp bnQgYywgaSwgbiwgd2lsZCwgY29uZmlybWVkID0gMDsgICAvKiBXb3JrZXJzICovCisgICAgaW50 IGdldHZhbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBnZXQgc3dpdGNo IHZhbHVlICovCisgICAgc3RydWN0IHN0cmluZ2ludCBwdltQUk5fTUFYKzFdOyAgICAvKiBUZW1w b3JhcnkgYXJyYXkgZm9yIHN3aXRjaCB2YWx1ZXMgKi8KKyAgICBzdHJ1Y3QgRkRCIHN3LCBvZiwg Y207ICAgICAgICAgICAgICAvKiBGREJzIGZvciBlYWNoIHBhcnNlIGZ1bmN0aW9uICovCisgICAg aW50IGhhdmVxdWUgPSAwOworICAgIGludCB0eXBlc2V0ID0gMDsKKyNlbmRpZiAvKiBQUklOVFNX SSAqLworCisjaWZkZWYgTlQKKyAgICBzdHJ1Y3Qga2V5dGFiICogcHJpbnR0YWIgPSBOVUxMLCAq IF9wcmludHRhYiA9IE5VTEw7CisgICAgaW50IG5wcmludCA9IDAsIHByaW50ZGVmPTA7CisjZW5k aWYgLyogTlQgKi8KKworI2lmZGVmIE9TMgorICAgIGRlZm5hbWUgPSAiUFJOIjsgICAgICAgICAg ICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyNlbHNlCisjaWZkZWYgVk1TCisgICAgZGVmbmFtZSA9 ICJMUFQ6IjsKKyNlbHNlCisjaWZkZWYgVU5JWAorICAgIGRlZm5hbWUgPSAifGxwciI7CisjZW5k aWYgLyogVU5JWCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZk ZWYgUFJJTlRTV0kKKyNpZmRlZiBOVAorICAgIGhhdmVxdWUgPSBXaW4zMkVudW1QcnQoJnByaW50 dGFiLCZfcHJpbnR0YWIsJm5wcmludCwmcHJpbnRkZWYpOworICAgIGhhdmVxdWUgPSBoYXZlcXVl ICYmIG5wcmludDsKKyNlbmRpZiAvKiBOVCAqLworCisgICAgZm9yIChpID0gMDsgaSA8PSBQUk5f TUFYOyBpKyspIHsgICAgLyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCisgICAgICAgIHB2 W2ldLnN2YWwgPSBOVUxMOyAgICAgICAgICAgICAgLyogdG8gbnVsbCBwb2ludGVycyAqLworICAg ICAgICBwdltpXS5pdmFsID0gLTE7ICAgICAgICAgICAgICAgIC8qIGFuZCAtMSBpbnQgdmFsdWVz ICovCisgICAgICAgIHB2W2ldLnd2YWwgPSAoQ0tfT0ZGX1QpLTE7CS8qIGFuZCAtMSB3aWRlIHZh bHVlcyAqLworICAgIH0KKyAgICBpZiAoeHggPT0gWFlCRENQKSB7ICAgICAgICAgICAgICAgICAv KiBTRVQgQlBSSU5URVIgPT0gL0JJRElSRUNUSU9OQUwgKi8KKyAgICAgICAgcHZbUFJOX0JJRF0u aXZhbCA9IDE7CisgICAgICAgIHB2W1BSTl9PVVRdLml2YWwgPSAwOworICAgIH0KKworICAgIC8q IEluaXRpYWxpemUgZGVmYXVsdHMgYmFzZWQgdXBvbiBjdXJyZW50IHByaW50ZXIgc2V0dGluZ3Mg Ki8KKyAgICBpZiAocHJpbnRlcm5hbWUpIHsKKyAgICAgICAgZGVmbmFtZSA9IHByaW50ZXJuYW1l OworICAgICAgICBzd2l0Y2ggKHByaW50ZXJ0eXBlKSB7CisgICAgICAgICAgY2FzZSBQUlRfV0lO OiBwdltQUk5fV0lOXS5pdmFsID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUlRfRE9TOiBw dltQUk5fRE9TXS5pdmFsID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUlRfUElQOiBwdltQ Uk5fUElQXS5pdmFsID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUlRfRklMOiBwdltQUk5f RklMXS5pdmFsID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBQUlRfTk9OOiBwdltQUk5fTk9O XS5pdmFsID0gMTsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgQlBSSU5UCisgICAg Lyogb25seSBzZXQgdGhlIEJJREkgZmxhZyBpZiB3ZSBhcmUgYmlkaSAqLworICAgIGlmIChwcmlu dGJpZGkpCisgICAgICAgIHB2W1BSTl9CSURdLml2YWwgPSAxOworCisgICAgLyogc2VyaWFsIHBv cnQgcGFyYW1ldGVycyBtYXkgYmUgc2V0IGZvciBub24tYmlkaSBkZXZpY2VzICovCisgICAgcHZb UFJOX1NQRF0uaXZhbCA9IHBwb3J0c3BlZWQgLyAxMEw7CisgICAgcHZbUFJOX1BBUl0uaXZhbCA9 IHBwb3J0cGFyaXR5OworICAgIHB2W1BSTl9GTE9dLml2YWwgPSBwcG9ydGZsb3c7CisjZW5kaWYg LyogQlBSSU5UICovCisgICAgaWYgKHByaW50dGltbykKKyAgICAgICAgcHZbUFJOX1RNT10uaXZh bCA9IHByaW50dGltbzsKKyAgICBpZiAocHJpbnR0ZXJtKSB7CisgICAgICAgIHB2W1BSTl9UUk1d Lml2YWwgPSAxOworICAgICAgICBtYWtlc3RyKCZwdltQUk5fVFJNXS5zdmFsLHByaW50dGVybSk7 CisgICAgfQorICAgIGlmIChwcmludHNlcCkgeworICAgICAgICBwdltQUk5fU0VQXS5pdmFsID0g MTsKKyAgICAgICAgbWFrZXN0cigmcHZbUFJOX1NFUF0uc3ZhbCxwcmludHNlcCk7CisgICAgfQor ICAgIGlmICh0eHQycHMpIHsKKyAgICAgICAgcHZbUFJOX1BTXS5pdmFsID0gMTsKKyAgICAgICAg cHZbUFJOX1dJRF0uaXZhbCA9IHBzX3dpZHRoOworICAgICAgICBwdltQUk5fTEVOXS5pdmFsID0g cHNfbGVuZ3RoOworICAgIH0gZWxzZSB7CisgICAgICAgIHB2W1BSTl9SQVddLml2YWwgPSAxOwor ICAgIH0KKworICAgIC8qIFNldCB1cCBjaGFpbmVkIHBhcnNlIGZ1bmN0aW9ucy4uLiAqLworCisg ICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29t bWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAg IC8qIGZjb2RlICovCisgICAgICAgICAgICJTd2l0Y2giLCAgICAgICAgICAgICAgICAgICAgLyog aGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVm YXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IHN0cmluZyBkYXRhICovCisgICAgICAgICAgIG5wcm5zd2ksICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgIDQsICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAq LworICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3Npbmcg ZnVuY3Rpb24gKi8KKyAgICAgICAgICAgcHJudGFiLCAgICAgICAgICAgICAgICAgICAgICAvKiBL ZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICZjbSAgICAgICAgICAgICAgICAgICAgICAgICAg LyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOworICAgIGNtZmRiaSgmY20s ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBmZGIgZm9yIGNvbmZpcm1hdGlvbiAq LworICAgICAgICAgICBfQ01DRk0sICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICov CisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxM LAorICAgICAgICAgICAmb2YKKyAgICAgICAgICAgKTsKKyAgICBjbWZkYmkoJm9mLCAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBUaGlyZCBGREIgZm9yIHByaW50ZXIgbmFtZSAqLworICAgICAg ICAgICBfQ01PRkksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAg ICJQcmludGVyIG9yIGZpbGUgbmFtZSIsICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgIGRl Zm5hbWUsICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6 IHRibCBzaXplICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAgICAgICB4eHN0cmluZywg ICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAg TlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nICovCisgICAgICAgICAgIE5V TEwKKyAgICAgICAgICAgKTsKKworICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLworICAgICAgICB4ID0gY21mZGIoJnN3 KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHN3aXRjaCBvciBvdGhlciB0aGluZyAqLworICAg ICAgICBkZWJ1ZyhGMTAxLCJzZXRwcmludGVyIGNtZmRiIiwiIix4KTsKKyAgICAgICAgaWYgKHgg PCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLworICAgICAgICAgIGdvdG8geHNl dHBybjsgICAgICAgICAgICAgICAgIC8qIG9yIHJlcGFyc2UgbmVlZGVkICovCisgICAgICAgIGlm IChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRj aCAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRkciAhPSAm c3cpICAgIC8qIEFkdmFuY2VkIHVzYWdlIDotKSAqLworICAgICAgICAgIGJyZWFrOworICAgICAg ICBjID0gY21nYnJrKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBicmVhayBjaGFyYWN0ZXIg Ki8KKyAgICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsgLyogdG8gc2VlIGhv dyB0aGV5IGVuZGVkIHRoZSBzd2l0Y2ggKi8KKyAgICAgICAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7 ICAgICAgICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1ZSAqLworICAgICAgICBk ZWJ1ZyhGMTAxLCJzZXRwcmludGVyIHN3aXRjaCIsIiIsbik7CisKKyAgICAgICAgc3dpdGNoIChu KSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIHRoZSBzd2l0Y2ggKi8KKyAgICAgICAg ICBjYXNlIFBSTl9QUzogICAgICAgICAgICAgICAgICAvKiBUZXh0IHRvIFBvc3RzY3JpcHQgKi8K KyAgICAgICAgICAgIHB2W1BSTl9QU10uaXZhbCA9IDE7CisgICAgICAgICAgICBwdltQUk5fQklE XS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1BSTl9PVVRdLml2YWwgPSAxOworICAgICAgICAg ICAgcHZbUFJOX1JBV10uaXZhbCA9IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg IGNhc2UgUFJOX1JBVzogICAgICAgICAgICAgICAgIC8qIE5vbi1Qb3N0c2NyaXB0ICovCisgICAg ICAgICAgICBwdltQUk5fUFNdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbUFJOX1JBV10uaXZh bCA9IDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFJOX0JJRDogICAg ICAgICAgICAgICAgIC8qIEJpZGlyZWN0aW9uYWwgKi8KKyAgICAgICAgICAgIHB2W1BSTl9CSURd Lml2YWwgPSAxOworICAgICAgICAgICAgcHZbUFJOX09VVF0uaXZhbCA9IDA7CisgICAgICAgICAg ICBwdltQUk5fUFNdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbUFJOX1JBV10uaXZhbCA9IDE7 CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFJOX09VVDogICAgICAgICAg ICAgICAgIC8qIE91dHB1dC1vbmx5ICovCisgICAgICAgICAgICBwdltQUk5fT1VUXS5pdmFsID0g MTsKKyAgICAgICAgICAgIHB2W1BSTl9CSURdLml2YWwgPSAwOworICAgICAgICAgICAgcHZbUFJO X1BTXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1BSTl9SQVddLml2YWwgPSAxOworICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBSTl9OT046ICAgICAgICAgICAgICAgICAv KiBOT05FICovCisgICAgICAgICAgICB0eXBlc2V0Kys7CisgICAgICAgICAgICBwdltuXS5pdmFs ID0gMTsKKyAgICAgICAgICAgIHB2W1BSTl9TUERdLml2YWwgPSAwOworICAgICAgICAgICAgcHZb UFJOX1BBUl0uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltQUk5fRkxPXS5pdmFsID0gRkxPX0tF RVA7CisgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIFVOSVgKKyAgICAgICAgICBjYXNlIFBS Tl9XSU46CisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAgIGNhc2UgUFJOX0RPUzogICAgICAg ICAgICAgICAgIC8qIERPUyBwcmludGVyIG5hbWUgKi8KKyAgICAgICAgICBjYXNlIFBSTl9GSUw6 ICAgICAgICAgICAgICAgICAvKiBPciBmaWxlbmFtZSAqLworICAgICAgICAgIGNhc2UgUFJOX1BJ UDoKKyAgICAgICAgICAgIHR5cGVzZXQrKzsKKyAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSBm cmVlKHB2W25dLnN2YWwpOworICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7CisgICAgICAg ICAgICBwdltQUk5fTk9OXS5pdmFsID0gMDsgICAgICAgLyogWmVybyBhbnkgcHJldmlvdXMgc2Vs ZWN0aW9ucyAqLworICAgICAgICAgICAgcHZbUFJOX1dJTl0uaXZhbCA9IDA7CisgICAgICAgICAg ICBwdltQUk5fRE9TXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1BSTl9GSUxdLml2YWwgPSAw OworICAgICAgICAgICAgcHZbUFJOX1BJUF0uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltuXS5p dmFsID0gMTsgICAgICAgICAgICAgLyogRmxhZyB0aGlzIG9uZSAqLworICAgICAgICAgICAgaWYg KCFnZXR2YWwpIGJyZWFrOyAgICAgICAgIC8qIE5vIHZhbHVlIHdhbnRlZCAqLworCisgICAgICAg ICAgICBpZiAobiA9PSBQUk5fRklMKSB7ICAgICAgICAgLyogRmlsZSwgY2hlY2sgYWNjZXNzaWJp bGl0eSAqLworICAgICAgICAgICAgICAgIGludCB3aWxkID0gMDsKKyAgICAgICAgICAgICAgICBp ZiAoKHggPSBjbWlvZmkoIkZpbGVuYW1lIiwia2VybWl0LnBybiIsJnMsJndpbGQseHhzdHJpbmcp KTwgMCkKKyAgICAgICAgICAgICAgICAgIGlmICh4ID09IC05KSB7CisgICAgICAgICAgICAgICAg ICAgICAgaWYgKHpjaGtvKHMpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIkNhbid0IGNyZWF0ZSBcIiVzXCJcbiIscyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9 IGVsc2UgZ290byB4c2V0cHJuOworICAgICAgICAgICAgICAgIGlmIChpc3dpbGQocykpIHsKKyAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIpOworICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBwdltQUk5fU1BEXS5pdmFsID0gMDsKKyAgICAgICAgICAgICAgICBwdltQUk5fUEFS XS5pdmFsID0gMDsKKyAgICAgICAgICAgICAgICBwdltQUk5fRkxPXS5pdmFsID0gRkxPX0tFRVA7 CisgICAgICAgICAgICB9IGVsc2UgaWYgKCh4ID0gY21mbGQobiA9PSBQUk5fRE9TID8gLyogVmFs dWUgd2FudGVkIC0gcGFyc2UgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJET1Mg cHJpbnRlciBkZXZpY2UgbmFtZSIgOiAvKiBIZWxwIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIChuID09IFBSTl9QSVAgPworICAgICAgICAgICAgICAgICAgICAgICAgICAg IlByb2dyYW0gbmFtZSIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuYW1lIiks CisgICAgICAgICAgICAgICAgICAgICAgICAgICBuID09IFBSTl9ET1MgPworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBSTiIgOiAgICAgIC8qIERlZmF1bHQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICB4eHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAg KSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47CisgICAgICAgICAgICBzID0gYnJz dHJpcChzKTsgICAgICAgICAgICAgLyogU3RyaXAgZW5jbG9zaW5nIGJyYWNlcyAqLworICAgICAg ICAgICAgd2hpbGUgKCpzID09IFNQKSAgICAgICAgICAgIC8qIFN0cmlwIGxlYWRpbmcgYmxhbmtz ICovCisgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIGlmIChuID09IFBSTl9QSVApIHsg ICAgICAgICAvKiBJZiAvUElQRTogKi8KKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJ3wnKSB7 ICAgICAgICAvKiBzdHJpcCBhbnkgZXh0cmFuZW91cyBwaXBlIHNpZ24gKi8KKyAgICAgICAgICAg ICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApCisgICAg ICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBwdltQUk5fU1BEXS5pdmFsID0gMDsKKyAgICAgICAgICAgICAgICBwdltQUk5fUEFSXS5pdmFs ID0gMDsKKyAgICAgICAgICAgICAgICBwdltQUk5fRkxPXS5pdmFsID0gRkxPX0tFRVA7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHkgPSBzdHJsZW4ocykpID4gMCkgICAgLyogQW55 dGhpbmcgbGVmdD8gKi8KKyAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwgPSAoY2hhciAqKSBt YWxsb2MoeSsxKSkgLyogWWVzLCBrZWVwIGl0ICovCisgICAgICAgICAgICAgICAgc3RyY3B5KHB2 W25dLnN2YWwscyk7ICAgLyogc2FmZSAqLworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgTlQK KyAgICAgICAgICBjYXNlIFBSTl9XSU46ICAgICAgICAgICAgICAgICAvKiBXaW5kb3dzIHF1ZXVl IG5hbWUgKi8KKyAgICAgICAgICAgIHR5cGVzZXQrKzsKKyAgICAgICAgICAgIGlmIChwdltuXS5z dmFsKSBmcmVlKHB2W25dLnN2YWwpOworICAgICAgICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7Cisg ICAgICAgICAgICBwdltQUk5fTk9OXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1BSTl9ET1Nd Lml2YWwgPSAwOworICAgICAgICAgICAgcHZbUFJOX0ZJTF0uaXZhbCA9IDA7CisgICAgICAgICAg ICBwdltuXS5pdmFsID0gMTsKKyAgICAgICAgICAgIHB2W1BSTl9TUERdLml2YWwgPSAwOworICAg ICAgICAgICAgcHZbUFJOX1BBUl0uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltQUk5fRkxPXS5p dmFsID0gRkxPX0tFRVA7CisKKyAgICAgICAgICAgIGlmICghZ2V0dmFsIHx8ICFoYXZlcXVlKQor ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KF9wcmludHRh YixucHJpbnQsIlByaW50IHF1ZXVlIG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg X3ByaW50dGFiW3ByaW50ZGVmXS5rd2QseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAg ICBpZiAoeCAhPSAtMikKKyAgICAgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKKworICAgICAg ICAgICAgICAgIGlmIChwdltQUk5fV0lOXS5zdmFsKSBmcmVlKHB2W1BSTl9XSU5dLnN2YWwpOwor ICAgICAgICAgICAgICAgIHMgPSBhdG1idWY7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gc3Ry bGVuKHMpKSA+IDApCisgICAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCA9IChjaGFyICop bWFsbG9jKHkrMSkpCisgICAgICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAv KiBzYWZlICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwdltQ Uk5fV0lOXS5zdmFsKSBmcmVlKHB2W1BSTl9XSU5dLnN2YWwpOworICAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBucHJpbnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9 PSBwcmludHRhYltpXS5rd3ZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHByaW50 dGFiW2ldLmt3ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoeSA9IHN0 cmxlbihzKSkgPiAwKQorICAgICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwgPSAoY2hhciAq KW1hbGxvYyh5KzEpKQorICAgICAgICAgICAgICAgICAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsg Lyogc2FmZSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyog TlQgKi8KKworICAgICAgICAgIGNhc2UgUFJOX1NFUDogICAgICAgICAgICAgICAgIC8qIC9KT0It SEVBREVSIChzZXBhcmF0b3IpICovCisgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShw dltuXS5zdmFsKTsKKyAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOworICAgICAgICAgICAg cHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAg ICAgICBpZiAoKHggPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47CisgICAgICAgICAgICBpZiAoeSkgeworICAgICAg ICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgICAg ICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKQorICAgICAgICAgICAgICBp ZiAocHZbbl0uc3ZhbCA9IChjaGFyICopIG1hbGxvYyh5KzEpKQorICAgICAgICAgICAgICAgIHN0 cmNweShwdltuXS5zdmFsLHMpOyAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgICAgY2FzZSBQUk5fVE1POiAgICAgICAgICAgICAgICAgLyogL1RJTUVPVVQ6bnVtYmVy ICovCisgICAgICAgICAgICBwdltuXS5pdmFsID0gMDsKKyAgICAgICAgICAgIGlmICghZ2V0dmFs KSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJTZWNvbmRzIiwiMCIsMTAsJnks eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgICAg IGlmICh5ID4gOTk5KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnkgLSA5OTkgaXMg dGhlIG1heGltdW1cbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAg ICBnb3RvIHhzZXRwcm47CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgcHZbbl0u aXZhbCA9IHk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFJOX1RSTTog ICAgICAgICAgICAgICAgIC8qIC9FTkQtT0YtSk9COnN0cmluZyAqLworICAgICAgICAgICAgaWYg KHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7CisgICAgICAgICAgICBwdltuXS5zdmFsID0g TlVMTDsKKyAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlN0cmluZyAoZW5jbG9zZSBp biBicmFjZXMgaWYgaXQgY29udGFpbnMgc3BhY2VzKSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4c2V0cHJuOwor ICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICBpZiAoKHkgPSBzdHJsZW4o cykpID4gMCkKKyAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwgPSAoY2hhciAqKSBtYWxsb2Mo eSsxKSkKKyAgICAgICAgICAgICAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsgICAvKiBzYWZlICov CisgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIEJQUklOVAorICAgICAgICAgIGNhc2UgUFJO X0ZMTzoKKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KGZsb3RhYixuZmxvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNl cmlhbCBwcmludGVyLXBvcnQgZmxvdyBjb250cm9sIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJydHMvY3RzIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4c2V0 cHJuOworICAgICAgICAgICAgcHZbbl0uaXZhbCA9IHg7CisgICAgICAgICAgICBicmVhazsKKwor I2lmbmRlZiBOT0xPQ0FMCisgICAgICAgICAgY2FzZSBQUk5fU1BEOgorICAgICAgICAgICAgaWYg KCFnZXR2YWwpIGJyZWFrOworCisgICAgICAgICAgICAvKiBUTl9DT01QT1JUIGhlcmUgdG9vPyAq LworCisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShzcGR0YWIsICAgICAgLyogU3BlZWQgKG5v IGRlZmF1bHQpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3BkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlNlcmlhbCBwcmludGVyLXBvcnQgaW50ZXJmYWNlIHNwZWVkIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICI5NjAwIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHh4c3RyaW5nKQorICAgICAgICAgICAgICAgICApIDwgMCkKKyAgICAgICAgICAgICAg Z290byB4c2V0cHJuOworICAgICAgICAgICAgcHZbbl0uaXZhbCA9IHg7CisgICAgICAgICAgICBi cmVhazsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyAgICAgICAgICBjYXNlIFBSTl9QQVI6Cisg ICAgICAgICAgICBwdltuXS5pdmFsID0gMDsKKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVh azsKKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHBhcnRibCxucGFyLCJTZXJpYWwgcHJpbnRl ci1wb3J0IHBhcml0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uZSIseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgICAgIHB2W25d Lml2YWwgPSB4OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQlBSSU5UICovCisKKyNp ZmRlZiBPUzIKKyAgICAgICAgICBjYXNlIFBSTl9MRU46CisgICAgICAgICAgICBpZiAoIWdldHZh bCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbW51bSgiUFMgcGFnZSBsZW5ndGgiLCAi NjYiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47Cisg ICAgICAgICAgICBwdltuXS5pdmFsID0geTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg ICAgY2FzZSBQUk5fV0lEOgorICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAg ICAgICAgaWYgKCh4ID0gY21udW0oIlBTIHBhZ2Ugd2lkdGgiLCAiODAiLDEwLCZ5LHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47CisgICAgICAgICAgICBwdltuXS5p dmFsID0geTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQUk5fQ1M6Cisg ICAgICAgICAgICAgIHB2W25dLml2YWwgPSAwOworICAgICAgICAgICAgICBpZiAoIWdldHZhbCkg YnJlYWs7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KAorI2lmZGVmIENLT1VOSQorICAg ICAgICAgICAgICAgICAgICAgICB0eHJ0YWIsbnR4cnRhYiwKKyNlbHNlIC8qIENLT1VOSSAqLwor ICAgICAgICAgICAgICAgICAgICAgICB0dGNzdGFiLG50ZXJtYywKKyNlbmRpZiAvKiBDS09VTkkg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgImF1dG8tcHJpbnQvcHJpbnRzY3JlZW4gY2hhcmFj dGVyLXNldCIsCisgICAgICAgICAgICAgICAgICAgICAgICJjcDQzNyIseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgICAgICBnb3RvIHhzZXRwcm47CisgICAgICAgICAgICAgIHB2W25dLml2 YWwgPSB5OworICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwcmludGYoIj9VbmV4cGVjdGVkIHN3aXRjaCB2YWx1 ZSAtICVkXG4iLGNtcmVzdWx0Lm5yZXN1bHQpOworICAgICAgICAgICAgeCA9IC05OworICAgICAg ICAgICAgZ290byB4c2V0cHJuOworICAgICAgICB9CisgICAgfQorICAgIGxpbmVbMF0gPSBOVUw7 ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgcHJpbnRlciBuYW1lIHZhbHVlICov CisgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeyAgICAgICAgICAgLyogSG93IGRpZCB3ZSBn ZXQgaGVyZT8gKi8KKyAgICAgIGNhc2UgX0NNT0ZJOiAgICAgICAgICAgICAgICAgICAgICAvKiBU aGV5IHR5cGVkIGEgZmlsZW5hbWUgKi8KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQu c3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBOYW1lICovCisgICAgICAgIHdpbGQgPSBjbXJlc3VsdC5u cmVzdWx0OyAgICAgICAgLyogV2lsZCBmbGFnICovCisgICAgICAgIGlmICghdHlwZXNldCkgeyAg ICAgICAgICAgICAgICAgLyogQSBwcmludGVyIG5hbWUgd2l0aG91dCBhIHR5cGUgKi8KKyAgICAg ICAgICAgIHB2W1BSTl9OT05dLml2YWwgPSAwOyAgICAgICAvKiBpcyBzdXBwb3NlZCB0byBiZSB0 cmVhdGVkIGFzICAqLworICAgICAgICAgICAgcHZbUFJOX1dJTl0uaXZhbCA9IDA7ICAgICAgIC8q IGEgRE9TIG9yIFBpcGUgcHJpbnRlci4gIFdlICAgICovCisgICAgICAgICAgICBwdltQUk5fRklM XS5pdmFsID0gMDsgICAgICAgLyogY2xlYXIgYWxsIHRoZSBmbGFncyBhbmQgbGV0ICAgKi8KKyAg ICAgICAgICAgIHB2W1BSTl9QSVBdLml2YWwgPSAwOyAgICAgICAvKiB0aGUgY29kZSBiZWxvdyBk b3BlIG91dCB0aGUgICAqLworICAgICAgICAgICAgcHZbUFJOX0RPU10uaXZhbCA9IDA7ICAgICAg IC8qIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIH0KKyNpZmRlZiBO VAorICAgICAgICBlbHNlIGlmIChwdltQUk5fV0lOXS5pdmFsICYmIGxvb2t1cChfcHJpbnR0YWIs bGluZSxucHJpbnQsJnkpKSB7CisgICAgICAgICAgICAvKiBpbnZhbGlkIFdpbmRvdyBRdWV1ZSBu YW1lICovCisgICAgICAgICAgICBwcmludGYoIj9pbnZhbGlkIFdpbmRvd3MgUHJpbnRlciBRdWV1 ZSBuYW1lOiBcIiVzXCJcclxuIixsaW5lKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAg ICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLwor ICAgICAgICAgIGdvdG8geHNldHBybjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIF9DTUNG TTogICAgICAgICAgICAgICAgICAgICAgLyogVGhleSBlbnRlcmVkIHRoZSBjb21tYW5kICovCisg ICAgICAgIGlmIChwdltQUk5fRE9TXS5pdmFsID4gMCkKKyAgICAgICAgICBja3N0cm5jcHkobGlu ZSxwdltQUk5fRE9TXS5zdmFsID8gcHZbUFJOX0RPU10uc3ZhbCA6ICIiLExJTkJVRlNJWik7Cisg ICAgICAgIGVsc2UgaWYgKHB2W1BSTl9XSU5dLml2YWwgPiAwKQorICAgICAgICAgIGNrc3RybmNw eShsaW5lLHB2W1BSTl9XSU5dLnN2YWwgPyBwdltQUk5fV0lOXS5zdmFsIDogIiIsTElOQlVGU0la KTsKKyAgICAgICAgZWxzZSBpZiAocHZbUFJOX0ZJTF0uaXZhbCA+IDApCisgICAgICAgICAgY2tz dHJuY3B5KGxpbmUscHZbUFJOX0ZJTF0uc3ZhbCA/IHB2W1BSTl9GSUxdLnN2YWwgOiAiIixMSU5C VUZTSVopOworICAgICAgICBlbHNlIGlmIChwdltQUk5fUElQXS5pdmFsID4gMCkKKyAgICAgICAg ICBja3N0cm5jcHkobGluZSxwdltQUk5fUElQXS5zdmFsID8gcHZbUFJOX1BJUF0uc3ZhbCA6ICIi LExJTkJVRlNJWik7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJ5IG1pc3Rha2UgKi8KKyAgICAgICAgcHJpbnRmKCI/VW5leHBlY3Rl ZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7CisgICAgICAgIHggPSAtOTsK KyAgICAgICAgZ290byB4c2V0cHJuOworICAgIH0KKworI2Vsc2UgIC8qIE5vIFBSSU5UU1dJICov CisKKyAgICBpZiAoKHggPSBjbW9maSgiUHJpbnRlciBvciBmaWxlIG5hbWUiLGRlZm5hbWUsJnMs eHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgaWYgKHggPiAxKSB7CisgICAg ICAgIHByaW50ZigiP0RpcmVjdG9yeSBuYW1lcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgIHJl dHVybigtOSk7CisgICAgfQorICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkgcysrOyAg IC8qIFRyaW0gbGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5C VUZTSVopOyAgICAgICAgLyogTWFrZSBhIHRlbXBvcmFyeSBzYWZlIGNvcHkgKi8KKyAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICov CisjZW5kaWYgLyogUFJJTlRTV0kgKi8KKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIg JiYgKGlzZ3Vlc3QKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAgICAgICAgICAgICAgICAgIHx8ICFF TkFCTEVEKGVuX3ByaSkKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworICAgICAgICAgICAgICAgICAg ICAgKSkgeworICAgICAgICBwcmludGYoIlNvcnJ5LCBwcmludGluZyBkaXNhYmxlZFxyXG4iKTsK KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyogSVNLRCAqLwor CisjaWZkZWYgUFJJTlRTV0kKKyNpZmRlZiBCUFJJTlQKKyAgICBpZiAocHJpbnRiaWRpKSB7ICAg ICAgICAgICAgICAgICAgICAvKiBJZiBiaWRpIHByaW50aW5nIGFjdGl2ZSAqLworI2lmbmRlZiBV TklYCisgICAgICAgIGJwcnRzdG9wKCk7ICAgICAgICAgICAgICAgICAgICAgLyogU3RvcCBpdCBi ZWZvcmUgcHJvY2VlZGluZyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgcHJpbnRiaWRp ID0gMDsKKyAgICB9CisgICAgaWYgKHB2W1BSTl9TUERdLml2YWwgPiAwKSB7CisgICAgICAgIHBv cnRzcGVlZCA9IChsb25nKSBwdltQUk5fU1BEXS5pdmFsICogMTBMOworICAgICAgICBpZiAocG9y dHNwZWVkID09IDcwTCkgcG9ydHNwZWVkID0gNzVMOworICAgIH0KKyAgICBpZiAocHZbUFJOX1BB Ul0uaXZhbCA+IDApCisgICAgICAgIHBvcnRwYXJpdHkgPSBwdltQUk5fUEFSXS5pdmFsOworICAg IGlmIChwdltQUk5fRkxPXS5pdmFsID4gMCkKKyAgICAgICAgcG9ydGZsb3cgPSBwdltQUk5fRkxP XS5pdmFsOworI2VuZGlmIC8qIEJQUklOVCAqLworI2VuZGlmIC8qIFBSSU5UU1dJICovCisKKyAg ICBzID0gbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcmludGVyIG5hbWUsIGlm IGdpdmVuICovCisKKyNpZmRlZiBPUzJPUlVOSVgKKyNpZmRlZiBQUklOVFNXSQorICAgIGlmIChw dltQUk5fUElQXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIC9QSVBFIHdhcyBnaXZlbj8gKi8KKyAg ICAgICAgcHJpbnRwaXBlID0gMTsKKyAgICAgICAgbm9wcmludGVyID0gMDsKKyAgICAgICAgaWYg KCpzID09ICAnfCcpIHsgICAgICAgICAgICAgICAvKiBJdCBtaWdodCBzdGlsbCBoYXZlIGEgcGlw ZSBzaWduICovCisgICAgICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogaWYg bmFtZSBnaXZlIGxhdGVyICovCisgICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApICAgICAgICAg ICAgLyogc28gcmVtb3ZlIGl0IGFuZCBzcGFjZXMgKi8KKyAgICAgICAgICAgICAgcysrOworICAg ICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYgLyogUFJJTlRTV0kgKi8KKyAgICAgIGlmICgqcyA9 PSAnfCcpIHsgICAgICAgICAgICAgICAgICAvKiBPciBwaXBlIGltcGxpZWQgYnkgbmFtZT8gKi8K KyAgICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCBwYXN0IHBp cGUgc2lnbiAqLworICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkgICAgICAgICAgICAgIC8qIEdv YmJsZSB3aGl0ZXNwYWNlICovCisgICAgICAgICAgICBzKys7CisgICAgICAgICAgaWYgKCpzKSB7 CisgICAgICAgICAgICAgIHByaW50cGlwZSA9IDE7CisgICAgICAgICAgICAgIG5vcHJpbnRlciA9 IDA7CisgICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwcmludHBpcGUgPSAw OworICAgICAgfQorCisjaWZkZWYgUFJJTlRTV0kKKyNpZmRlZiBCUFJJTlQKKyAgICBpZiAocHJp bnRwaXBlICYmIHB2W1BSTl9CSURdLml2YWwgPiAwKSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5 LCBwaXBlcyBub3QgYWxsb3dlZCBmb3IgYmlkaXJlY3Rpb25hbCBwcmludGVyXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisjZW5kaWYgLyogQlBSSU5UICovCisjZW5kaWYgLyogUFJJ TlRTV0kgKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKworI2lmZGVmIE9TMgorICAgIGlmICgg cHZbUFJOX0NTXS5pdmFsID4gMCApIAorICAgICAgICBwcm5jcyA9IHB2W1BSTl9DU10uaXZhbDsK KworICAgIGlmICggcHZbUFJOX1BTXS5pdmFsID4gMCApIHsKKyAgICAgICAgdHh0MnBzID0gMTsK KyAgICAgICAgcHNfd2lkdGggPSBwdltQUk5fV0lEXS5pdmFsIDw9IDAgPyA4MCA6IHB2W1BSTl9X SURdLml2YWw7CisgICAgICAgIHBzX2xlbmd0aCA9IHB2W1BSTl9MRU5dLml2YWwgPD0gMCA/IDY2 IDogcHZbUFJOX0xFTl0uaXZhbDsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyAgICB5ID0g c3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgbmFtZSBvZiBuZXcg cHJpbnQgZmlsZSAqLworICAgIGlmICh5ID4gMAorI2lmZGVmIE9TMgorICAgICAgICAmJiAoKHkg IT0gMykgfHwgKGNrc3RyY21wKHMsIlBSTiIsMywwKSAhPSAwKSkKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgKSB7CisgICAgICAgIGlmIChwcmludGVybmFtZSkgeyAgICAgICAgICAgICAgLyog SGFkIGEgcHJpbnQgZmlsZSBiZWZvcmU/ICovCisgICAgICAgICAgICBmcmVlKHByaW50ZXJuYW1l KTsgICAgICAgICAgLyogUmVtb3ZlIGl0cyBuYW1lICovCisgICAgICAgICAgICBwcmludGVybmFt ZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRlcm5hbWUgPSAoY2hhciAqKSBtYWxs b2MoeSArIDEpOyAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgaXQgKi8KKyAgICAgICAgaWYgKCFwcmlu dGVybmFtZSkgeworICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVy ZVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIHN0cmNw eShwcmludGVybmFtZSxzKTsgICAgICAgICAgLyogKHNhZmUpIENvcHkgbmV3IG5hbWUgdG8gbmV3 IHNwYWNlICovCisgICAgICAgIGRlYnVnKEYxMTAsInByaW50ZXJuYW1lIixwcmludGVybmFtZSww KTsKKyAgICB9CisKKyNpZmRlZiBQUklOVFNXSQorICAgIC8qIFNldCBwcmludGVyIHR5cGUgZnJv bSBzd2l0Y2hlcyB0aGF0IHdlcmUgZ2l2ZW4gZXhwbGljaXRseSAqLworCisgICAgaWYgKHB2W1BS Tl9OT05dLml2YWwgPiAwKSB7ICAgICAgICAgLyogTm8gcHJpbnRlciAqLworICAgICAgICBwcmlu dGVydHlwZSA9IFBSVF9OT047CisgICAgICAgIG5vcHJpbnRlciA9IDE7CisgICAgICAgIHByaW50 cGlwZSA9IDA7CisgICAgfSBlbHNlIGlmIChwdltQUk5fRklMXS5pdmFsID4gMCkgeyAgLyogRmls ZSAqLworICAgICAgICBwcmludGVydHlwZSA9IFBSVF9GSUw7CisgICAgICAgIG5vcHJpbnRlciA9 IDA7CisgICAgICAgIHByaW50cGlwZSA9IDA7CisgICAgfSBlbHNlIGlmIChwdltQUk5fUElQXS5p dmFsID4gMCkgeyAgLyogUGlwZSAqLworICAgICAgICBwcmludGVydHlwZSA9IFBSVF9QSVA7Cisg ICAgICAgIG5vcHJpbnRlciA9IDA7CisgICAgICAgIHByaW50cGlwZSA9IDE7CisgICAgfSBlbHNl IGlmIChwdltQUk5fV0lOXS5pdmFsID4gMCkgeyAgLyogV2luZG93cyBwcmludCBxdWV1ZSAqLwor ICAgICAgICBwcmludGVydHlwZSA9IFBSVF9XSU47CisgICAgICAgIG5vcHJpbnRlciA9IDA7Cisg ICAgICAgIHByaW50cGlwZSA9IDA7CisgICAgfSBlbHNlIGlmIChwdltQUk5fRE9TXS5pdmFsID4g MCkgeyAgLyogRE9TIGRldmljZSAqLworICAgICAgICBwcmludGVydHlwZSA9IFBSVF9ET1M7Cisg ICAgICAgIG5vcHJpbnRlciA9IDA7CisgICAgICAgIHByaW50cGlwZSA9IDA7CisgICAgfSBlbHNl IGlmIChsaW5lWzBdKSB7ICAgICAgICAgICAgICAgLyogTmFtZSBnaXZlbiB3aXRob3V0IHN3aXRj aGVzICovCisgICAgICAgIG5vcHJpbnRlciA9IDA7CisgICAgICAgIHByaW50ZXJ0eXBlID0gcHJp bnRwaXBlID8gUFJUX1BJUCA6IFBSVF9ET1M7CisjaWZkZWYgTlQKKyAgICAgICAgLyogd2FzIHRo ZSBjb21tYW5kIFNFVCBQUklOVEVSIHdpbmRvd3MtcXVldWUgPyAqLworICAgICAgICB5ID0gbG9v a3VwKF9wcmludHRhYixsaW5lLG5wcmludCwmeCk7CisgICAgICAgIGlmICh5ID49IDApIHsKKyAg ICAgICAgICAgIHByaW50ZXJ0eXBlID0gUFJUX1dJTjsKKyAgICAgICAgICAgIGlmIChwdltQUk5f V0lOXS5zdmFsKSBmcmVlKHB2W1BSTl9XSU5dLnN2YWwpOworICAgICAgICAgICAgaWYgKHByaW50 ZXJuYW1lKSB7ICAgICAgICAgIC8qIEhhZCBhIHByaW50IGZpbGUgYmVmb3JlPyAqLworICAgICAg ICAgICAgICAgIGZyZWUocHJpbnRlcm5hbWUpOyAgICAgIC8qIFJlbW92ZSBpdHMgbmFtZSAqLwor ICAgICAgICAgICAgICAgIHByaW50ZXJuYW1lID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHB2W1BSTl9XSU5dLnN2YWwgPSBOVUxMOworICAgICAgICAgICAgcHZbUFJOX1dJTl0u aXZhbCA9IDE7CisgICAgICAgICAgICBzID0gcHJpbnR0YWJbeF0ua3dkOyAgICAgICAgLyogR2V0 IGZ1bGwgbmV3IG5hbWUgKi8KKyAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSB7 CisgICAgICAgICAgICAgICAgbWFrZXN0cigmcHZbUFJOX1dJTl0uc3ZhbCxzKTsKKyAgICAgICAg ICAgICAgICBtYWtlc3RyKCZwcmludGVybmFtZSxzKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBy aW50ZXJuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0 aW9uIGZhaWx1cmVcbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJwcmludGVybmFtZSIscHJp bnRlcm5hbWUsMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIHkgPT0gLTIg KSB7CisgICAgICAgICAgICAvKiBBbWJpZ3VvdXMgUHJpbnQgUXVldWUgTmFtZSAqLworICAgICAg ICAgICAgcHJpbnRmKCI/QW1iaWd1b3VzIHByaW50ZXIgbmFtZSBwcm92aWRlZC5cbiIpOworICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5UICovCisgICAgfQor CisjaWZkZWYgQlBSSU5UCisgICAgLyogUG9ydCBwYXJhbWV0ZXJzIG1heSBiZSBzZXQgZm9yIG5v bi1iaWRpIG1vZGUgKi8KKworICAgIHBwb3J0c3BlZWQgPSBwb3J0c3BlZWQ7ICAgICAgICAgICAg IC8qIFNldCBwYXJhbWV0ZXJzICovCisgICAgcHBvcnRwYXJpdHkgPSBwb3J0cGFyaXR5OworICAg IHBwb3J0ZmxvdyA9IHBvcnRmbG93OworCisgICAgaWYgKHB2W1BSTl9CSURdLml2YWwgPiAwKSB7 ICAgICAgICAgLyogQmlkaXJlY3Rpb25hbCAqLworI2lmZGVmIFVOSVgKKyAgICAgICAgcHJpbnRi aWRpID0gMTsgICAgICAgICAgICAgICAgICAvKiAoanVzdCB0byB0ZXN0IHBhcnNpbmcuLi4pICov CisjZWxzZQorICAgICAgICBwcmludGJpZGkgPSBicHJ0c3RhcnQoKTsgICAgICAgIC8qIFN0YXJ0 IGJpZGlyZWN0aW9uYWwgcHJpbnRlciAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSBwcmludGJpZGkpOworICAgIH0gZWxzZQorICAgICAgcHJpbnRiaWRpID0g MDsgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBCUFJJTlRFUiwgdW5zZXQgZmxhZyAqLworI2Vu ZGlmIC8qIEJQUklOVCAqLworCisgICAgaWYgKHB2W1BSTl9UTU9dLml2YWwgPiAtMSkgeyAgICAg ICAgLyogVGFrZSBjYXJlIG9mIHRpbWVvdXQgKi8KKyAgICAgICAgcHJpbnR0aW1vID0gcHZbUFJO X1RNT10uaXZhbDsKKyAgICB9CisgICAgaWYgKHB2W1BSTl9UUk1dLml2YWwgPiAwKSB7ICAgICAg ICAgLyogVGVybWluYXRpb24gc3RyaW5nICovCisgICAgICAgIGlmIChwcmludHRlcm0pIHsKKyAg ICAgICAgICAgIGZyZWUocHJpbnR0ZXJtKTsKKyAgICAgICAgICAgIHByaW50dGVybSA9IE5VTEw7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKHB2W1BSTl9UUk1dLnN2YWwpCisgICAgICAgICAgbWFr ZXN0cigmcHJpbnR0ZXJtLHB2W1BSTl9UUk1dLnN2YWwpOworICAgIH0KKyAgICBpZiAocHZbUFJO X1NFUF0uaXZhbCA+IDApIHsgICAgICAgICAvKiBhbmQgc2VwYXJhdG9yIGZpbGUgKi8KKyAgICAg ICAgaWYgKHByaW50c2VwKSB7CisgICAgICAgICAgICBmcmVlKHByaW50c2VwKTsKKyAgICAgICAg ICAgIHByaW50c2VwID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAocHZbUFJOX1NFUF0u c3ZhbCkKKyAgICAgICAgICBtYWtlc3RyKCZwcmludHNlcCxwdltQUk5fU0VQXS5zdmFsKTsKKyAg ICB9CisjZW5kaWYgLyogUFJJTlRTV0kgKi8KKworI2lmZGVmIFVOSVhPUk9TSworICAgIGlmICgh cHJpbnRwaXBlCisjaWZkZWYgUFJJTlRTV0kKKyAgICAgICAgJiYgIW5vcHJpbnRlcgorI2VuZGlm IC8qIFBSSU5UU1dJICovCisgICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmlsZSAtIGNoZWNrIGFjY2VzcyAqLworICAgICAgICBpZiAoemNoa28ocykgPCAwKSB7Cisg ICAgICAgICAgICBwcmludGYoIj9BY2Nlc3MgZGVuaWVkIC0gJXNcbiIscyk7CisgICAgICAgICAg ICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhzZXRwcm47CisgICAgICAgIH0KKyAgICB9Cisj ZW5kaWYgLyogVU5JWE9ST1NLICovCisKKyAgICB4ID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXR1cm4gY29kZSAqLworCisgIHhzZXRwcm46ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ29tbW9uIGV4aXQgKi8KKyNpZmRlZiBQUklOVFNXSQorICAgIGZvciAo aSA9IDA7IGkgPD0gUFJOX01BWDsgaSsrKSB7ICAgIC8qIEZyZWUgbWFsbG9jJ2QgbWVtb3J5ICov CisgICAgICAgIGlmIChwdltpXS5zdmFsKQorICAgICAgICAgIGZyZWUocHZbaV0uc3ZhbCk7Cisg ICAgfQorI2VuZGlmIC8qIFBSSU5UU1dJICovCisgICAgc3VjY2VzcyA9ICh4ID4gMCkgPyAxIDog MDsKKyAgICByZXR1cm4oeCk7Cit9CisKKyNpZmRlZiBBTllTU0gKKy8qIFRoZSBTRVQgU1NIIGNv bW1hbmQgKi8KKworI2RlZmluZSBTU0hfQ01EICAxICAgICAgICAgICAgICAgICAgICAgIC8qIFNF VCBTU0ggQ09NTUFORCAqLworCisjaWZkZWYgU1NIQlVJTFRJTiAgICAgICAgICAgICAgICAgICAg ICAgLyogQnVpbHQtaW4gU0VUIFNTSCBvcHRpb25zICovCisjZGVmaW5lIFNTSF9BREQgIDIgICAg ICAgICAgICAgICAgICAgICAgLyogQWRkICovCisjZGVmaW5lIFNTSF9BRlcgIDMgICAgICAgICAg ICAgICAgICAgICAgLyogQWdlbnQtZm9yd2FyZGluZyAqLworI2RlZmluZSBTU0hfQ0hJICA0ICAg ICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIEhvc3QgSVAgKi8KKyNkZWZpbmUgU1NIX1hGVyAg NSAgICAgICAgICAgICAgICAgICAgICAvKiBYMTEtZm9yd2FyZGluZyAqLworI2RlZmluZSBTU0hf RFlGICA2ICAgICAgICAgICAgICAgICAgICAgIC8qIER5bmFtaWMgZm9yd2FyZGluZyAqLworI2Rl ZmluZSBTU0hfR1dQICA3ICAgICAgICAgICAgICAgICAgICAgIC8qIEdhdGV3YSBwb3J0Z3MgKi8K KyNkZWZpbmUgU1NIX0dTUyAgOCAgICAgICAgICAgICAgICAgICAgICAvKiBHU1NBUEkgKi8KKyNk ZWZpbmUgU1NIX0tCRCAgOSAgICAgICAgICAgICAgICAgICAgICAvKiBLQkQgSW50ZXJhY3RpdmUg RGV2aWNlcyAqLworI2RlZmluZSBTU0hfSzQgIDEwICAgICAgICAgICAgICAgICAgICAgIC8qIEtl cmJlcm9zIDQgKi8KKyNkZWZpbmUgU1NIX0s1ICAxMSAgICAgICAgICAgICAgICAgICAgICAvKiBL ZXJiZXJvcyA1ICovCisjZGVmaW5lIFNTSF9TSEsgMTIgICAgICAgICAgICAgICAgICAgICAgLyog U3RyaWN0IEhvc3QgS2V5IENoZWNrICovCisjZGVmaW5lIFNTSF9WMSAgMTMgICAgICAgICAgICAg ICAgICAgICAgLyogU1NIIFYxICovCisjZGVmaW5lIFNTSF9WMiAgMTQgICAgICAgICAgICAgICAg ICAgICAgLyogU1NIIFYyICovCisjZGVmaW5lIFNTSF9QUlAgMTUgICAgICAgICAgICAgICAgICAg ICAgLyogUHJpdmQgcG9ydCAqLworI2RlZmluZSBTU0hfQ01QIDE2ICAgICAgICAgICAgICAgICAg ICAgIC8qIENvbXByZXNzaW9uICovCisjZGVmaW5lIFNTSF9YQUwgMTcgICAgICAgICAgICAgICAg ICAgICAgLyogWCBBdXRoIExvY2F0aW9uICovCisjZGVmaW5lIFNTSF9TSEggMTggICAgICAgICAg ICAgICAgICAgICAgLyogUXVpZXQgKi8KKyNkZWZpbmUgU1NIX1ZFUiAxOSAgICAgICAgICAgICAg ICAgICAgICAvKiBWZXJzaW9uICovCisjZGVmaW5lIFNTSF9WUkIgMjAgICAgICAgICAgICAgICAg ICAgICAgLyogVmVyYm9zaXR5IGxldmVsICovCisjZGVmaW5lIFNTSF9JREYgMjEgICAgICAgICAg ICAgICAgICAgICAgLyogSWRlbnRpdHkgRmlsZSAqLworI2RlZmluZSBTU0hfQ0ZHIDIyICAgICAg ICAgICAgICAgICAgICAgIC8qIFVzZSBPcGVuU1NIIENvbmZpZyAqLworI2RlZmluZSBTU0hfSEJU IDIzICAgICAgICAgICAgICAgICAgICAgIC8qIEhlYXJ0YmVhdCBJbnRlcnZhbCAqLworI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NodGFiW10gPSB7ICAg ICAgIC8qIFNFVCBTU0ggY29tbWFuZCB0YWJsZSAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICB7 ICJhZ2VudC1mb3J3YXJkaW5nIiwgICAgICAgIFNTSF9BRlcsICAwIH0sCisgICAgeyAiY2hlY2st aG9zdC1pcCIsICAgICAgICAgICBTU0hfQ0hJLCAgMCB9LAorICAgIHsgImNvbXByZXNzaW9uIiwg ICAgICAgICAgICAgU1NIX0NNUCwgIDAgfSwKKyAgICB7ICJkeW5hbWljLWZvcndhcmRpbmciLCAg ICAgIFNTSF9EWUYsICAwIH0sCisgICAgeyAiZ2F0ZXdheS1wb3J0cyIsICAgICAgICAgICBTU0hf R1dQLCAgMCB9LAorICAgIHsgImdzc2FwaSIsICAgICAgICAgICAgICAgICAgU1NIX0dTUywgIDAg fSwKKyAgICB7ICJoZWFydGJlYXQtaW50ZXJ2YWwiLCAgICAgIFNTSF9IQlQsICAwIH0sCisgICAg eyAiaWRlbnRpdHktZmlsZSIsICAgICAgICAgICBTU0hfSURGLCAgMCB9LAorI2lmZGVmIENPTU1F TlQKKyAgICB7ICJrYmQtaW50ZXJhY3RpdmUtZGV2aWNlcyIsIFNTSF9LQkQsICAwIH0sCisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgIHsgIms0IiwgICAgICAgICAgICAgICAgICAgICAgU1NIX0s0 LCBDTV9JTlYgfSwKKyAgICB7ICJrNSIsICAgICAgICAgICAgICAgICAgICAgIFNTSF9LNSwgQ01f SU5WIH0sCisgICAgeyAia2VyYmVyb3M0IiwgICAgICAgICAgICAgICBTU0hfSzQsICAgMCB9LAor ICAgIHsgImtlcmJlcm9zNSIsICAgICAgICAgICAgICAgU1NIX0s1LCAgIDAgfSwKKyAgICB7ICJr cmI0IiwgICAgICAgICAgICAgICAgICAgIFNTSF9LNCwgQ01fSU5WIH0sCisgICAgeyAia3JiNSIs ICAgICAgICAgICAgICAgICAgICBTU0hfSzUsIENNX0lOViB9LAorICAgIHsgInByaXZpbGVnZWQt cG9ydCIsICAgICAgICAgU1NIX1BSUCwgIDAgfSwKKyAgICB7ICJxdWlldCIsICAgICAgICAgICAg ICAgICAgIFNTSF9TSEgsICAwIH0sCisgICAgeyAic3RyaWN0LWhvc3Qta2V5LWNoZWNrIiwgICBT U0hfU0hLLCAgMCB9LAorICAgIHsgInVzZS1vcGVuc3NoLWNvbmZpZyIsICAgICAgU1NIX0NGRywg IDAgfSwKKyAgICB7ICJ2MSIsICAgICAgICAgICAgICAgICAgICAgIFNTSF9WMSwgICAwIH0sCisg ICAgeyAidjIiLCAgICAgICAgICAgICAgICAgICAgICBTU0hfVjIsICAgMCB9LAorICAgIHsgInZl cmJvc2UiLCAgICAgICAgICAgICAgICAgU1NIX1ZSQiwgIDAgfSwKKyAgICB7ICJ2ZXJzaW9uIiwg ICAgICAgICAgICAgICAgIFNTSF9WRVIsICAwIH0sCisgICAgeyAieDExLWZvcndhcmRpbmciLCAg ICAgICAgICBTU0hfWEZXLCAgMCB9LAorICAgIHsgInhhdXRoLWxvY2F0aW9uIiwgICAgICAgICAg U1NIX1hBTCwgIDAgfSwKKyNlbHNlCisjaWZkZWYgU1NIQ01ECisgICAgeyAiY29tbWFuZCIsICAg ICAgICAgICAgICAgICBTU0hfQ01ELCAgMCB9LAorI2VuZGlmIC8qIFNTSENNRCAqLworI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2h0 YWIgPSAoc2l6ZW9mKHNzaHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworI2lm ZGVmIFNTSEJVSUxUSU4KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaHZlcltdID0geyAgICAgICAv KiBTRVQgU1NIIFZFUlNJT04gY29tbWFuZCB0YWJsZSAqLworICAgIHsgIjEiLCAgICAgICAgICAx LCAgMCB9LAorICAgIHsgIjIiLCAgICAgICAgICAyLCAgMCB9LAorICAgIHsgImF1dG9tYXRpYyIs ICAwLCAgMCB9Cit9OworCisjZGVmaW5lIFNTSEFfQ1JTICAgMQorI2RlZmluZSBTU0hBX0RTQSAg IDIKKyNkZWZpbmUgU1NIQV9HU1MgICAzCisjZGVmaW5lIFNTSEFfSE9TICAgNAorI2RlZmluZSBT U0hBX0tCRCAgIDUKKyNkZWZpbmUgU1NIQV9LNCAgICA2CisjZGVmaW5lIFNTSEFfSzUgICAgNwor I2RlZmluZSBTU0hBX1BTVyAgIDgKKyNkZWZpbmUgU1NIQV9QSyAgICA5CisjZGVmaW5lIFNTSEFf U0tFICAxMAorI2RlZmluZSBTU0hBX1RJUyAgMTEKKyNkZWZpbmUgU1NIQV9FWFQgIDEyCisjZGVm aW5lIFNTSEFfU1JQICAxMworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2gyYXV0W10gPSB7ICAg ICAgLyogU0VUIFNTSCBWMiBBVVRIIGNvbW1hbmQgdGFibGUgKi8KKyAgICB7ICJleHRlcm5hbC1r ZXl4IiwgICAgICBTU0hBX0VYVCwgMCB9LAorICAgIHsgImdzc2FwaSIsICAgICAgICAgICAgIFNT SEFfR1NTLCAwIH0sCisgICAgeyAiaG9zdGJhc2VkIiwgICAgICAgICAgU1NIQV9IT1MsIDAgfSwK KyAgICB7ICJrZXlib2FyZC1pbnRlcmFjdGl2ZSIsICBTU0hBX0tCRCwgMCB9LAorICAgIHsgInBh c3N3b3JkIiwgICAgICAgICAgIFNTSEFfUFNXLCAwIH0sCisgICAgeyAicHVibGlja2V5IiwgICAg ICAgICAgU1NIQV9QSywgIDAgfSwKKyAgICB7ICJzcnAtZ2V4LXNoYTEiLCAgICAgICBTU0hBX1NS UCwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNzaDJhdXQgPSAoc2l6 ZW9mKHNzaDJhdXQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKyNkZWZpbmUgU1NI Rl9MQ0wgICAxCisjZGVmaW5lIFNTSEZfUk1UICAgMgorCitzdGF0aWMgc3RydWN0IGtleXRhYiBh ZGRmd2RbXSA9IHsgICAgICAgLyogU0VUIFNTSCBBREQgY29tbWFuZCB0YWJsZSAqLworICAgIHsg ImxvY2FsLXBvcnQtZm9yd2FyZCIsICBTU0hGX0xDTCwgMCB9LAorICAgIHsgInJlbW90ZS1wb3J0 LWZvcndhcmQiLCBTU0hGX1JNVCwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBp bnQgbmFkZGZ3ZCA9IChzaXplb2YoYWRkZndkKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAx OworCisjZGVmaW5lIFNTSDFfQ0lGICAgMQorI2RlZmluZSBTU0gxX0dOSCAgIDIKKyNkZWZpbmUg U1NIMV9VTkggICAzCisjZGVmaW5lIFNTSDFfSzU0ICAgNAorCisjZGVmaW5lIFNTSDJfQ0lGICAg MQorI2RlZmluZSBTU0gyX0dOSCAgIDIKKyNkZWZpbmUgU1NIMl9VTkggICAzCisjZGVmaW5lIFNT SDJfQVJLICAgNAorI2RlZmluZSBTU0gyX0hLQSAgIDUKKyNkZWZpbmUgU1NIMl9NQUMgICA2Cisj ZGVmaW5lIFNTSDJfQVVUICAgNworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2h2MXRhYltdID0g eyAgICAgLyogU0VUIFNTSCBWMSBjb21tYW5kIHRhYmxlICovCisgICAgeyAiY2lwaGVyIiwgICAg ICAgICAgICAgICAgICBTU0gxX0NJRiwgMCB9LAorICAgIHsgImdsb2JhbC1rbm93bi1ob3N0cy1m aWxlIiwgU1NIMV9HTkgsIDAgfSwKKyAgICB7ICJrNS1yZXVzZS1rNC1tZXNzYWdlcyIsICAgIFNT SDFfSzU0LCBDTV9JTlYgfSwKKyAgICB7ICJ1c2VyLWtub3duLWhvc3RzLWZpbGUiLCAgIFNTSDFf VU5ILCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuc3NodjF0YWIgPSAo c2l6ZW9mKHNzaHYxdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMg c3RydWN0IGtleXRhYiBzc2h2MnRhYltdID0geyAgICAgLyogU0VUIFNTSCBWMiBjb21tYW5kIHRh YmxlICovCisgICAgeyAiYXV0aGVudGljYXRpb24iLCAgICAgICAgICBTU0gyX0FVVCwgMCB9LAor ICAgIHsgImF1dG8tcmVrZXkiLCAgICAgICAgICAgICAgU1NIMl9BUkssIDAgfSwKKyAgICB7ICJj aXBoZXJzIiwgICAgICAgICAgICAgICAgIFNTSDJfQ0lGLCAwIH0sCisgICAgeyAiZ2xvYmFsLWtu b3duLWhvc3RzLWZpbGUiLCBTU0gyX0dOSCwgMCB9LAorICAgIHsgImhvc3RrZXktYWxnb3JpdGht cyIsICAgICAgU1NIMl9IS0EsIDAgfSwKKyAgICB7ICJtYWNzIiwgICAgICAgICAgICAgICAgICAg IFNTSDJfTUFDLCAwIH0sCisgICAgeyAidXNlci1rbm93bi1ob3N0cy1maWxlIiwgICBTU0gyX1VO SCwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNzaHYydGFiID0gKHNp emVvZihzc2h2MnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworI2RlZmluZSBT U0hDXzNERVMgMSAgICAgICAgICAgICAgICAgICAgIC8qIDNERVMgKi8KKyNkZWZpbmUgU1NIQ18z Q0JDIDIgICAgICAgICAgICAgICAgICAgICAvKiAzREVTLUNCQyAqLworI2RlZmluZSBTU0hDX0Ex MjggMyAgICAgICAgICAgICAgICAgICAgIC8qIEFFUzEyOC1DQkMgKi8KKyNkZWZpbmUgU1NIQ19B MTkyIDQgICAgICAgICAgICAgICAgICAgICAvKiBBRVMxOTItQ0JDICovCisjZGVmaW5lIFNTSENf QTI1NiA1ICAgICAgICAgICAgICAgICAgICAgLyogQUVTMjU2LUNCQyAqLworI2RlZmluZSBTU0hD X0FSQzQgNiAgICAgICAgICAgICAgICAgICAgIC8qIEFSQ0ZPVVIgKi8KKyNkZWZpbmUgU1NIQ19G SVNIIDcgICAgICAgICAgICAgICAgICAgICAvKiBCTE9XRklTSCAqLworI2RlZmluZSBTU0hDX0JD QkMgOSAgICAgICAgICAgICAgICAgICAgIC8qIEJMT1dGSVNILUNCQyAqLworI2RlZmluZSBTU0hD X0MxMjggOCAgICAgICAgICAgICAgICAgICAgIC8qIENBU1QxMjgtQ0JDICovCisjZGVmaW5lIFNT SENfMURFUyAxMCAgICAgICAgICAgICAgICAgICAgLyogREVTICovCisKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHNzaDFjaXBoZXJzW10gPSB7CisgICAgeyAiM2RlcyIsICAgICAgICAgU1NIQ18zREVT LCAwIH0sCisgICAgeyAiYmxvd2Zpc2giLCAgICAgU1NIQ19GSVNILCAwIH0sCisgICAgeyAiZGVz IiwgICAgICAgICAgU1NIQ18xREVTLCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGlj IGludCBuc3NoMWNpcGhlcnMgPSAoc2l6ZW9mKHNzaDFjaXBoZXJzKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2gyY2lwaGVyc1tdID0geyAg LyogU0VUIFNTSCBWMiBDSVBIRVJTIGNvbW1hbmQgdGFibGUgKi8KKyAgICB7ICIzZGVzLWNiYyIs ICAgICAgICBTU0hDXzNERVMsIDAgfSwKKyAgICB7ICJhZXMxMjgtY2JjIiwgICAgICBTU0hDX0Ex MjgsIDAgfSwKKyAgICB7ICJhZXMxOTItY2JjIiwgICAgICBTU0hDX0ExOTIsIDAgfSwKKyAgICB7 ICJhZXMyNTYtY2JjIiwgICAgICBTU0hDX0EyNTYsIDAgfSwKKyAgICB7ICJhcmNmb3VyIiwgICAg ICAgICBTU0hDX0FSQzQsIDAgfSwKKyAgICB7ICJibG93ZmlzaC1jYmMiLCAgICBTU0hDX0ZJU0gs IDAgfSwKKyAgICB7ICJjYXN0MTI4LWNiYyIsICAgICBTU0hDX0MxMjgsIDAgfSwKKyAgICB7ICJy aWpuZGFlbDEyOC1jYmMiLCBTU0hDX0ExMjgsIDAgfSwKKyAgICB7ICJyaWpuZGFlbDE5Mi1jYmMi LCBTU0hDX0ExOTIsIDAgfSwKKyAgICB7ICJyaWpuZGFlbDI1Ni1jYmMiLCBTU0hDX0EyNTYsIDAg fSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2gyY2lwaGVycyA9IChzaXpl b2Yoc3NoMmNpcGhlcnMpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKyNkZWZpbmUg U1NITV9TSEEgICAgICAgIDEgICAgICAgICAgICAgICAvKiBITUFDLVNIQTEgKi8KKyNkZWZpbmUg U1NITV9TSEFfOTYgICAgIDIgICAgICAgICAgICAgICAvKiBITUFDLVNIQTEtOTYgKi8KKyNkZWZp bmUgU1NITV9NRDUgICAgICAgIDMgICAgICAgICAgICAgICAvKiBITUFDLU1ENSAqLworI2RlZmlu ZSBTU0hNX01ENV85NiAgICAgNCAgICAgICAgICAgICAgIC8qIEhNQUMtTUQ1LTk2ICovCisjZGVm aW5lIFNTSE1fUklQRSAgICAgICA1ICAgICAgICAgICAgICAgLyogSE1BQy1SSVBFTUQxNjAgKi8K Kworc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NoMm1hY3NbXSA9IHsgICAgIC8qIFNFVCBTU0ggVjIg TUFDUyBjb21tYW5kIHRhYmxlICovCisgICAgeyAiaG1hYy1tZDUiLCAgICAgICBTU0hNX01ENSwg ICAgMCB9LAorICAgIHsgImhtYWMtbWQ1LTk2IiwgICAgU1NITV9NRDVfOTYsIDAgfSwKKyAgICB7 ICJobWFjLXJpcGVtZDE2MCIsIFNTSE1fUklQRSwgICAwIH0sCisgICAgeyAiaG1hYy1zaGExIiwg ICAgICBTU0hNX1NIQSwgICAgMCB9LAorICAgIHsgImhtYWMtc2hhMS05NiIsICAgU1NITV9TSEFf OTYsIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2gybWFjcyA9IChz aXplb2Yoc3NoMm1hY3MpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBz dHJ1Y3Qga2V5dGFiIHRndHBhc3NbXSA9IHsKKyAgICB7ICJ0Z3QtcGFzc2luZyIsIDEsIDAsIH0s CisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBudGd0cGFzcyA9IChzaXplb2YodGd0 cGFzcykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBrZXl0 YWIgZ3NzYXBpdGFiW10gPSB7CisgICAgeyAiZGVsZWdhdGUtY3JlZGVudGlhbHMiLCAxLCAwLCB9 LAorICAgIHsgImtleS1leGNoYW5nZSIsICAgICAgICAgMiwgQ01fSU5WLCB9LAorICAgIHsgIiIs IDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmdzc2FwaXRhYiA9IChzaXplb2YoZ3NzYXBpdGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisjZGVmaW5lIEhLQV9SU0EgMQorI2RlZmlu ZSBIS0FfRFNTIDIKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgaGthdGFiW10gPSB7CisgICAgeyAi c3NoLWRzcyIsIEhLQV9EU1MsIDAsIH0sCisgICAgeyAic3NoLXJzYSIsIEhLQV9SU0EsIDAsIH0s CisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuaGthdGFiID0gKHNpemVvZihoa2F0 YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK2ludCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU1NIIHZhcmlhYmxlcyAqLworICBzc2hfYWZ3ID0g MCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFnZW50IGZvcndhcmRpbmcgKi8KKyAgc3No X3hmdyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4MTEgZm9yd2FyZGluZyAgICov CisgIHNzaF9wcnAgPSBTRVRfT0ZGLCAgICAgICAgICAgICAgICAgICAgLyogcHJpdmlsZWdlZCBw b3J0cyAqLworICBzc2hfY21wID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbXBy ZXNzaW9uICovCisgIHNzaF9zaGggPSAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcXVp ZXQgICAgICAgKi8KKyAgc3NoX3ZlciA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBw cm90b2NvbCB2ZXJzaW9uIChhdXRvLDEsMikgKi8KKyAgc3NoX3ZyYiA9IDIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZXBvcnQgZXJyb3JzICovCisgIHNzaF9jaGtpcCA9IDAsICAgICAg ICAgICAgICAgICAgICAgICAgLyogU1NIIENoZWNrIEhvc3QgSVAgZmxhZyAqLworICBzc2hfZ3dw ID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdhdGV3YXkgcG9ydHMgKi8KKyAgc3No X2R5ZiA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkeW5hbWljIGZvcndhcmRpbmcg Ki8KKyAgc3NoX2dzZCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnc3NhcGkgZGVs ZWdhdGUgY3JlZGVudGlhbHMgKi8KKyAgc3NoX2s0dGd0ID0gMCwgICAgICAgICAgICAgICAgICAg ICAgICAvKiBrNCB0Z3QgcGFzc2luZyAqLworICBzc2hfazV0Z3QgPSAwLCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGs1IHRndCBwYXNzaW5nICovCisgIHNzaF9zaGsgPSAyLCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU3RyaWN0IGhvc3Qga2V5IChubywgeWVzLCBhc2spICovCisgIHNz aDJfYXJrID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0byByZS1rZXkgKi8KKyAg c3NoX2NhcyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21tYW5kIGFzIHN1YnN5 cyAqLworICBzc2hfY2ZnID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSBPcGVu U1NIIGNvbmZpZz8gKi8KKyAgc3NoX2dreCA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBnc3NhcGkga2V5IGV4Y2hhbmdlICovCisgIHNzaF9rNV9pc19rNCA9IDEsICAgICAgICAgICAg ICAgICAgICAgLyogc29tZSBTU0ggdjEgdXNlIHNhbWUgY29kZXMgKi8KKyAgc3NoX2hidCA9IDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBoZWFydGJlYXQgKHNlY29uZHMpICovCisgIHNz aF9kdW1teSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYm90dG9tIG9mIGxpc3QgKi8K KworY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dp bmcgYXJlIHRvIGJlIG1hbGxvYydkICovCisgICogc3NoMV9jaWYgPSBOVUxMLCAgICAgICAgICAg ICAgICAgICAgLyogdjEgY2lwaGVyICovCisgICogc3NoMl9jaWYgPSBOVUxMLCAgICAgICAgICAg ICAgICAgICAgLyogdjIgY2lwaGVyIGxpc3QgKi8KKyAgKiBzc2gyX21hYyA9IE5VTEwsICAgICAg ICAgICAgICAgICAgICAvKiB2MiBtYWMgbGlzdCAqLworICAqIHNzaDJfYXV0aCA9IE5VTEwsICAg ICAgICAgICAgICAgICAgIC8qIHYyIGF1dGhlbnRpY2F0aW9uIGxpc3QgKi8KKyAgKiBzc2hfaHN0 ID0gTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBob3N0bmFtZSAqLworICAqIHNzaF9wcnQg PSBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIHBvcnQvc2VydmljZSAqLworICAqIHNzaF9j bWQgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLwor ICAqIHNzaF94YWwgPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIHhhdXRoLWxvY2F0aW9u ICovCisgICogc3NoMV9nbmggPSBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogdjEgZ2xvYmFs IGtub3duIGhvc3RzIGZpbGUgKi8KKyAgKiBzc2gxX3VuaCA9IE5VTEwsICAgICAgICAgICAgICAg ICAgICAvKiB2MSB1c2VyIGtub3duIGhvc3RzIGZpbGUgKi8KKyAgKiBzc2gyX2duaCA9IE5VTEws ICAgICAgICAgICAgICAgICAgICAvKiB2MiBnbG9iYWwga25vd24gaG9zdHMgZmlsZSAqLworICAq IHNzaDJfdW5oID0gTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIHYyIHVzZXIga25vd24gaG9z dHMgZmlsZSAqLworICAqIHNzaDJfaGthID0gTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIEhv c3QgS2V5IEFsZ29yaXRobXMgKi8KKyAgKiB4eHhfZHVtbXkgPSBOVUxMOworCitjaGFyICogc3No X2lkZlszMl0gPSB7ICAgICAgICAgICAgICAgICAgLyogSWRlbnRpdHkgZmlsZSBsaXN0ICovCisg IE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCwKKyAgTlVMTCxOVUxMLE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLAorICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsCisgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVM TAorfTsKK2NoYXIgKiBzc2hfdG1wWzMyXSA9IHsgICAgICAgICAgICAgICAgICAvKiBUZW1wIGlk ZW50aXR5IGZpbGUgbGlzdCAqLworICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxM LE5VTEwsCisgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCwKKyAgTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLAorICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKK307CitpbnQgc3NoX2lkZl9uID0gMDsKKworZXh0ZXJu IGludCAgICBzc2hfcGZfbGNsX24sCisgICAgICAgICAgICAgIHNzaF9wZl9ybXRfbjsKK2V4dGVy biBzdHJ1Y3Qgc3NoX3BmIHNzaF9wZl9sY2xbMzJdOyAgICAvKiBQb3J0IGZvcndhcmRpbmcgc3Ry dWN0cyAqLworZXh0ZXJuIHN0cnVjdCBzc2hfcGYgc3NoX3BmX3JtdFszMl07ICAgIC8qIChkZWNs YXJlZCBpbiBja3V1c3IuYykgKi8KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyNpZmRlZiBT RlRQX0JVSUxUSU4KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNmdHB0YWJbXSA9IHsKKyAgICB7ICJl bmQtb2YtbGluZSIsICAgICAgICAgICAgWFlfU0ZUUF9FT0wsIDAsIH0sCisgICAgeyAicmVtb3Rl LWNoYXJhY3Rlci1zZXQiLCAgIFhZX1NGVFBfUkNTLCAwLCB9LAorICAgIHsgIiIsIDAsIDAgfQor fTsKK3N0YXRpYyBpbnQgbnNmdHB0YWIgPSAoc2l6ZW9mKHNmdHB0YWIpIC8gc2l6ZW9mKHN0cnVj dCBrZXl0YWIpKSAtIDE7CisjZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCisKK1ZPSUQKK3Nob3Nz aCgpIHsKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgaW50IGksIG4gPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgLyogQUREIGFza21vcmUoKSEgKi8KKworICAgIHByaW50ZigiXG5TU0ggaXMgYnVp bHQgaW46XG5cbiIpOworCisgICAgcHJpbnRmKCIgc3NoIGhvc3Q6ICAgICAgICAgICAgICAgICAg ICAgICAgJXNcbiIsc2hvd3N0cmluZyhzc2hfaHN0KSk7CisgICAgcHJpbnRmKCIgc3NoIHBvcnQ6 ICAgICAgICAgICAgICAgICAgICAgICAgJXNcbiIsc2hvd3N0cmluZyhzc2hfcHJ0KSk7CisgICAg cHJpbnRmKCIgc3NoIGNvbW1hbmQ6ICAgICAgICAgICAgICAgICAgICAgJXNcbiIsc2hvd3N0cmlu Zyhzc2hfY21kKSk7CisgICAgcHJpbnRmKCIgc3NoIGFnZW50LWZvcndhcmRpbmc6ICAgICAgICAg ICAgJXNcbiIsc2hvd29mZihzc2hfYWZ3KSk7CisgICAgcHJpbnRmKCIgc3NoIGNoZWNrLWhvc3Qt aXA6ICAgICAgICAgICAgICAgJXNcbiIsc2hvd29mZihzc2hfY2hraXApKTsKKyAgICBwcmludGYo IiBzc2ggY29tcHJlc3Npb246ICAgICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKHNzaF9jbXAp KTsKKyAgICBwcmludGYoIiBzc2ggZHluYW1pYy1mb3J3YXJkaW5nOiAgICAgICAgICAlc1xuIixz aG93b2ZmKHNzaF9keWYpKTsKKyAgICBpZiAoc3NoX3BmX2xjbFswXS5wMSAmJiBzc2hfcGZfbGNs WzBdLmhvc3QgJiYgc3NoX3BmX2xjbFswXS5wMikgeworICAgICAgcHJpbnRmKCIgc3NoIGZvcndh cmQtbG9jYWwtcG9ydDogICAgICAgICAgJWQgJXMgJWRcbiIsCisgICAgICAgICAgICAgc3NoX3Bm X2xjbFswXS5wMSwgc3NoX3BmX2xjbFswXS5ob3N0LCBzc2hfcGZfbGNsWzBdLnAyKTsKKyAgICAg IGZvciAoIG49MTtuPHNzaF9wZl9sY2xfbjtuKysgKQorICAgICAgICBwcmludGYoIiAgICAgICAg ICAgICAgICAgICAgICAgOiAgICAgICAgICAlZCAlcyAlZFxuIiwKKyAgICAgICAgICAgICAgIHNz aF9wZl9sY2xbbl0ucDEsIHNzaF9wZl9sY2xbbl0uaG9zdCwgc3NoX3BmX2xjbFtuXS5wMik7Cisg ICAgfSBlbHNlCisgICAgICBwcmludGYoIiBzc2ggZm9yd2FyZC1sb2NhbC1wb3J0OiAgICAgICAg IChub25lKVxuIik7CisgICAgaWYgKHNzaF9wZl9ybXRbMF0ucDEgJiYgc3NoX3BmX3JtdFswXS5o b3N0ICYmIHNzaF9wZl9ybXRbMF0ucDIpIHsKKyAgICAgIHByaW50ZigiIHNzaCBmb3J3YXJkLXJl bW90ZS1wb3J0OiAgICAgICAgICVkICVzICVkXG4iLAorICAgICAgICAgICAgIHNzaF9wZl9ybXRb MF0ucDEsIHNzaF9wZl9ybXRbMF0uaG9zdCwgc3NoX3BmX3JtdFswXS5wMik7CisgICAgICBmb3Ig KCBuPTE7bjxzc2hfcGZfcm10X247bisrICkKKyAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICAg ICAgICAgICAgICA6ICAgICAgICAgJWQgJXMgJWRcbiIsCisgICAgICAgICAgICAgICBzc2hfcGZf cm10W25dLnAxLCBzc2hfcGZfcm10W25dLmhvc3QsIHNzaF9wZl9ybXRbbl0ucDIpOworICAgIH0g ZWxzZQorICAgICAgcHJpbnRmKCIgc3NoIGZvcndhcmQtcmVtb3RlLXBvcnQ6ICAgICAgICAobm9u ZSlcbiIpOworICAgIHByaW50ZigiIHNzaCBnYXRld2F5LXBvcnRzOiAgICAgICAgICAgICAgICVz XG4iLHNob3dvZmYoc3NoX2d3cCkpOworICAgIHByaW50ZigiIHNzaCBnc3NhcGkgZGVsZWdhdGUt Y3JlZGVudGlhbHM6ICVzXG4iLHNob3dvZmYoc3NoX2dzZCkpOworICAgIHByaW50ZigiIHNzaCBn c3NhcGkga2V5LWV4Y2hhbmdlICAgICAgICA6ICVzXG4iLHNob3dvZmYoc3NoX2dreCkpOworICAg IHByaW50ZigiIHNzaCBpZGVudGl0eS1maWxlOiAgICAgICAgICAgICAgICVkXG4iLHNzaF9pZGZf bik7CisgICAgZm9yIChpID0gMDsgaSA8IHNzaF9pZGZfbjsgaSsrKQorICAgICAgcHJpbnRmKCIg ICUyZC4gJXNcbiIsaSsxLHNob3dzdHJpbmcoc3NoX2lkZltpXSkpOworICAgIHByaW50ZigiIHNz aCBoZWFydGJlYXQgaW50ZXJ2YWw6ICAgICAgICAgICVkXG4iLCBzc2hfaGJ0KTsKKyAgICBwcmlu dGYoIiBzc2ggazQgdGd0LXBhc3Npbmc6ICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKHNzaF9r NHRndCkpOworICAgIHByaW50ZigiIHNzaCBrNSB0Z3QtcGFzc2luZzogICAgICAgICAgICAgICVz XG4iLHNob3dvZmYoc3NoX2s1dGd0KSk7CisKKyAgICBwcmludGYoIiBzc2ggcHJpdmlsZWdlZC1w b3J0OiAgICAgICAgICAgICAlc1xuIixzaG93b29hKHNzaF9wcnApKTsKKyAgICBwcmludGYoIiBz c2ggcXVpZXQ6ICAgICAgICAgICAgICAgICAgICAgICAlc1xuIixzaG93b2ZmKHNzaF9zaGgpKTsK KyAgICBwcmludGYoIiBzc2ggc3RyaWN0LWhvc3Qta2V5LWNoZWNrOiAgICAgICAlZFxuIixzc2hf c2hrKTsKKyAgICBwcmludGYoIiBzc2ggdXNlLW9wZW5zc2gtY29uZmlnOiAgICAgICAgICAlc1xu IixzaG93b2ZmKHNzaF9jZmcpKTsKKyAgICBwcmludGYoIiBzc2ggdmVyYm9zZTogICAgICAgICAg ICAgICAgICAgICAlZFxuIixzc2hfdnJiKTsKKyAgICBwcmludGYoIiBzc2ggdmVyc2lvbjogICAg ICAgICAgICAgICAgICAgICAlc1xuIiwKKyAgICAgICAgICAgc3NoX3ZlciA/IGNraXRvYShzc2hf dmVyKSA6ICJhdXRvbWF0aWMiCisgICAgICAgICAgICk7CisgICAgcHJpbnRmKCIgc3NoIHgxMS1m b3J3YXJkaW5nOiAgICAgICAgICAgICAgJXNcbiIsc2hvd29vYShzc2hfeGZ3KSk7CisgICAgcHJp bnRmKCIgc3NoIHhhdXRoLWxvY2F0aW9uOiAgICAgICAgICAgICAgJXNcbiIsc2hvd3N0cmluZyhz c2hfeGFsKSk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50ZigiIHNzaCB2MSBjaXBoZXI6 ICAgICAgICAgICAgICAgICAgICVzXG4iLHNob3dzdHJpbmcoc3NoMV9jaWYpKTsKKyAgICBwcmlu dGYoIiBzc2ggdjEgZ2xvYmFsLWtub3duLWhvc3RzLWZpbGU6ICAlc1xuIixzaG93c3RyaW5nKHNz aDFfZ25oKSk7CisgICAgcHJpbnRmKCIgc3NoIHYxIHVzZXIta25vd24taG9zdHMtZmlsZTogICAg JXNcbiIsc2hvd3N0cmluZyhzc2gxX3VuaCkpOworICAgIHByaW50ZigiXG4iKTsKKyAgICBwcmlu dGYoIiBzc2ggdjIgYXV0aGVudGljYXRpb246ICAgICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNz aDJfYXV0aCkpOworICAgIHByaW50ZigiIHNzaCB2MiBhdXRvLXJla2V5OiAgICAgICAgICAgICAg ICVzXG4iLHNob3dvZmYoc3NoMl9hcmspKTsKKyAgICBwcmludGYoIiBzc2ggdjIgY2lwaGVyczog ICAgICAgICAgICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNzaDJfY2lmKSk7CisgICAgcHJpbnRm KCIgc3NoIHYyIGNvbW1hbmQtYXMtc3Vic3lzdGVtOiAgICAgJXNcbiIsc2hvd29mZihzc2hfY2Fz KSk7CisgICAgcHJpbnRmKCIgc3NoIHYyIGdsb2JhbC1rbm93bi1ob3N0cy1maWxlOiAgJXNcbiIs c2hvd3N0cmluZyhzc2gyX2duaCkpOworICAgIHByaW50ZigiIHNzaCB2MiBob3N0a2V5LWFsZ29y aXRobXM6ICAgICAgICVzXG4iLHNob3dzdHJpbmcoc3NoMl9oa2EpKTsKKyAgICBwcmludGYoIiBz c2ggdjIgbWFjOiAgICAgICAgICAgICAgICAgICAgICAlc1xuIixzaG93c3RyaW5nKHNzaDJfbWFj KSk7CisgICAgcHJpbnRmKCIgc3NoIHYyIHVzZXIta25vd24taG9zdHMtZmlsZTogICAgJXNcbiIs c2hvd3N0cmluZyhzc2gyX3VuaCkpOworI2Vsc2UKKyNpZmRlZiBTU0hDTUQKKyAgICBleHRlcm4g Y2hhciAqIHNzaGNtZCwgKiBkZWZzc2hjbWQ7CisgICAgY2hhciAqIHM7CisgICAgcyA9IHNzaGNt ZCA/IHNzaGNtZCA6IGRlZnNzaGNtZDsKKyAgICBwcmludGYoIlxuIFNTSCBpcyBleHRlcm5hbC5c blxuIik7CisgICAgcHJpbnRmKCIgc3NoIGNvbW1hbmQ6ICVzXG4iLHNob3dzdHJpbmcocykpOwor I2VuZGlmIC8qIFNTSENNRCAqLworI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKyAgICBwcmludGYo IlxuIik7Cit9CisKK3N0YXRpYyBpbnQKK2Rvc2V0c3NoKCkgeworI2lmZGVmIFNTSENNRAorICAg IGV4dGVybiBjaGFyICogc3NoY21kOworI2VuZGlmIC8qIFNTSENNRCAqLworI2lmZGVmIFNTSEJV SUxUSU4KKyNpZm5kZWYgU1NIVEVTVAorICAgIGV4dGVybiBpbnQgc2xfc3NoX3hmd19zYXZlZCwg c2xfc3NoX3Zlcl9zYXZlZDsKKyNlbmRpZiAvKiBTU0hURVNUICovCisjZW5kaWYgLyogU1NIQlVJ TFRJTiAqLworICAgIGludCBjeCwgeCwgeSwgejsKKyAgICBjaGFyICogczsKKworICAgIGlmICgo Y3ggPSBjbWtleShzc2h0YWIsbnNzaHRhYiwiIiwiY29tbWFuZCIsIHh4c3RyaW5nKSkgPCAwKQor ICAgICAgcmV0dXJuKGN4KTsKKyAgICBzd2l0Y2ggKGN4KSB7CisjaWZkZWYgU1NIQ01ECisgICAg ICBjYXNlIFNTSF9DTUQ6ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCAqLworICAgICAg ICBpZiAoKHggPSBjbXR4dCgiQ29tbWFuZCB0byBzdGFydCBzc2giLCJzc2ggLWUgbm9uZSIsCisg ICAgICAgICAgICAgICAgICAgICAgICZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgbWFrZXN0cigmc3NoY21kLHMpOworICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworI2VuZGlmIC8qIFNTSENNRCAqLworCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAg Y2FzZSBTU0hfQUZXOiAgICAgICAgICAgICAgICAgICAgIC8qIEFnZW50LWZvcndhcmRpbmcgKi8K KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2FmdykpOworCisgICAgICBjYXNl IFNTSF9DSEk6ICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgSG9zdCBJUCAqLworICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfY2hraXApKTsKKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgU1NIX0NNUDogICAgICAgICAgICAgICAgICAgICAvKiBDb21wcmVzc2lvbiAq LworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfY21wKSk7CisKKyAgICAgIGNh c2UgU1NIX0RZRjogICAgICAgICAgICAgICAgICAgICAvKiBEeW5hbWljIEZvcndhcmRpbmcgKi8K KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3NoX2R5ZikpOworCisgICAgICBjYXNl IFNTSF9HV1A6ICAgICAgICAgICAgICAgICAgICAgLyogR2F0ZXdheSBwb3J0cyAqLworICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfZ3dwKSk7CisKKyAgICAgIGNhc2UgU1NIX0dT UzogICAgICAgICAgICAgICAgICAgICAvKiBHU1NBUEkgKi8KKyAgICAgICAgaWYgKCh5ID0gY21r ZXkoZ3NzYXBpdGFiLG5nc3NhcGl0YWIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg IHJldHVybih5KTsKKyAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSAxOiAgICAg ICAgICAgICAgICAgICAgICAgLyogRGVsZWdhdGUgY3JlZGVudGlhbHMgKi8KKyAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gc2V0b24oJnNzaF9nc2QpKTsKKyAgICAgICAgICBjYXNlIDI6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBrZXktZXhjaGFuZ2UgKi8KKyAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gc2V0b24oJnNzaF9na3gpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOworCisjaWZkZWYgQ09NTUVOVAorICAgICAgY2FzZSBTU0hfS0JEOiAgICAgICAg ICAgICAgICAgICAgIC8qIEtiZCBJbnRlcmFjdGl2ZSBEZXZpY2VzICovCisgICAgICAgIGlmICgo eCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIC8qIFRPIEJF IEZJTExFRCBJTiAqLworICAgICAgICByZXR1cm4oLTIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KworICAgICAgY2FzZSBTU0hfSzQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIElW ICovCisgICAgICBjYXNlIFNTSF9LNTogICAgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3Mg ViAqLworICAgICAgICBpZiAoKHkgPSBjbWtleSh0Z3RwYXNzLDEsIiIsInRndC1wYXNzaW5nIiwg eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBzd2l0Y2ggKHkp IHsKKyAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IChjeCA9 PSBTU0hfSzQpID8KKyAgICAgICAgICAgICAgICAgICBzZXRvbigmc3NoX2s0dGd0KSA6IHNldG9u KCZzc2hfazV0Z3QpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworCisg ICAgICBjYXNlIFNTSF9QUlA6ICAgICAgICAgICAgICAgICAgICAgLyogUHJpdmQgcG9ydCAqLwor ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2hfcHJwKSk7CisKKyAgICAgIGNhc2Ug U1NIX1NISDogICAgICAgICAgICAgICAgICAgICAvKiBRdWlldCAqLworICAgICAgICByZXR1cm4o c3VjY2VzcyA9IHNldG9uKCZzc2hfc2hoKSk7CisKKyAgICAgIGNhc2UgU1NIX1NISzogICAgICAg ICAgICAgICAgICAgICAvKiBTdHJpY3QgSG9zdCBLZXkgQ2hlY2sgKi8KKyAgICAgICAgaWYgKCh5 ID0gY21rZXkob29rdGFiLDMsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVy bih5KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgc3NoX3NoayA9IHk7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisK KyAgICAgIGNhc2UgU1NIX0hCVDoKKwl4ID0gY21udW0oIkhlYXJ0YmVhdCBpbnRlcnZhbCwgc2Vj b25kcyIsIjAiLDEwLCZ6LHh4c3RyaW5nKTsKKwlpZiAoeCA8IDApIHJldHVybih4KTsKKwlpZiAo KHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwlzc2hfaGJ0ID0gejsKKwlyZXR1cm4oc3Vj Y2VzcyA9IDEpOworCisgICAgICBjYXNlIFNTSF9WMTogICAgICAgICAgICAgICAgICAgICAgLyog U1NIIFYxICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KHNzaHYxdGFiLG5zc2h2MXRhYiwiIiwi IiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBzd2l0Y2gg KHkpIHsKKyAgICAgICAgICBjYXNlIFNTSDFfSzU0OgorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSBzZXRvbigmc3NoX2s1X2lzX2s0KSk7CisgICAgICAgICAgY2FzZSBTU0gxX0NJRjogICAg ICAgICAgICAgICAgLyogTm90IGEgbGlzdCAqLworICAgICAgICAgICAgaWYgKCh5ID0gY21rZXko c3NoMWNpcGhlcnMsbnNzaDFjaXBoZXJzLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICAgICAgaWYgKHkgIT0gLTMpCisgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoeSA9 PSAtMykgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaDFfY2lmLE5VTEwpOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbnNzaDFjaXBo ZXJzOyB4KyspCisgICAgICAgICAgICAgICAgICBpZiAoc3NoMWNpcGhlcnNbeF0ua3d2YWwgPT0g eSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbWFrZXN0cigm c3NoMV9jaWYsc3NoMWNpcGhlcnNbeF0ua3dkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHJldHVybigxKTsKKyAgICAgICAgICBjYXNlIFNTSDFfR05IOgorICAgICAgICAgIGNhc2UgU1NI MV9VTkg6CisgICAgICAgICAgICBpZiAoKHggPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ6LHh4 c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggIT0gLTMpCisgICAgICAgICAg ICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgICAgICAgICBpZiAoemZucWZw KGxpbmUsVE1QQlVGU0laLHRtcGJ1ZikpCisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkobGlu ZSx0bXBidWYsTElOQlVGU0laKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMgPSAoeCA9 PSAtMykgPyBOVUxMIDogbGluZTsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkK KyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgc3dpdGNoICh5KSB7CisgICAg ICAgICAgICAgIGNhc2UgU1NIMV9HTkg6IG1ha2VzdHIoJnNzaDFfZ25oLHMpOyBicmVhazsKKyAg ICAgICAgICAgICAgY2FzZSBTU0gxX1VOSDogbWFrZXN0cigmc3NoMV91bmgscyk7IGJyZWFrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICB9CisKKyAgICAg IGNhc2UgU1NIX1YyOiAgICAgICAgICAgICAgICAgICAgICAvKiBTU0ggVjIgKi8KKyAgICAgICAg aWYgKCh5ID0gY21rZXkoc3NodjJ0YWIsbnNzaHYydGFiLCIiLCIiLCB4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgIGNh c2UgU1NIMl9BUks6CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzc2gyX2Fy aykpOworICAgICAgICBjYXNlIFNTSDJfQVVUOiB7ICAgICAgICAgICAgICAgICAgICAgICAgLyog QXV0aGVudGljYXRpb24gKi8KKyNkZWZpbmUgVE1QQ05UIDEyCisgICAgICAgICAgICBpbnQgaSwg aiwgdG1wW1RNUENOVF07CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVE1QQ05UOyBpKysp CisgICAgICAgICAgICAgIHRtcFtpXSA9IDA7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg VE1QQ05UOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShzc2gyYXV0LG5z c2gyYXV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdXRoZW50aWNhdGlvbiBt ZXRob2QiLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh5ID09 IC0zKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7 IGogPCBpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcFtqXSA9PSB5KSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG4/Q2hvaWNlIGhhcyBhbHJlYWR5IGJl ZW4gdXNlZC5cclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRt cFtpXSA9IHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybih6KTsKKworICAgICAgICAgICAgaWYgKHNzaDJfYXV0 aCkgeworICAgICAgICAgICAgICAgIGZyZWUoc3NoMl9hdXRoKTsKKyAgICAgICAgICAgICAgICBz c2gyX2F1dGggPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPiAwKSB7 CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChqID0g MDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbnNz aDJhdXQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoc3NoMmF1dFt4XS5rd3ZhbCA9 PSB0bXBbal0gJiYgIXNzaDJhdXRbeF0uZmxncykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICBsZW4gKz0gc3RybGVuKHNzaDJhdXRbeF0ua3dkKSAr IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNzaDJfYXV0aCA9IG1hbGxv YyhsZW4pOworICAgICAgICAgICAgICAgIHNzaDJfYXV0aFswXSA9ICdcMCc7CisgICAgICAgICAg ICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBmb3Ig KHggPSAwOyB4IDwgbnNzaDJhdXQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoc3No MmF1dFt4XS5rd3ZhbCA9PSB0bXBbal0gJiYgIXNzaDJhdXRbeF0uZmxncykKKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoc3NoMl9h dXRoLHNzaDJhdXRbeF0ua3dkLGxlbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgaSAt IDEpCisgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHNzaDJfYXV0aCwiLCIsbGVuKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworI3VuZGVmIFRNUENOVAorICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTU0gy X0NJRjogeworI2RlZmluZSBUTVBDTlQgMTIKKyAgICAgICAgICAgIGludCBpLCBqLCB0bXBbVE1Q Q05UXTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBUTVBDTlQ7IGkrKykKKyAgICAgICAg ICAgICAgdG1wW2ldID0gMDsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFRNUENOVDsg aSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoc3NoMmNpcGhlcnMsbnNzaDJj aXBoZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCIiLCB4eHN0cmluZykp IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykKKyAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmICh0bXBbal0gPT0geSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCJcclxuP0Nob2ljZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXHJcbiIpOworICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0bXBbaV0gPSB5OworICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICBy ZXR1cm4oeik7CisKKyAgICAgICAgICAgIGlmIChzc2gyX2NpZikgeworICAgICAgICAgICAgICAg IGZyZWUoc3NoMl9jaWYpOworICAgICAgICAgICAgICAgIHNzaDJfY2lmID0gTlVMTDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgICAgIGludCBs ZW4gPSAwOworICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqIDwgaTsgaisrKSB7CisgICAgICAg ICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBuc3NoMmNpcGhlcnM7IHgrKykKKyAgICAgICAg ICAgICAgICAgICAgICBpZiAoc3NoMmNpcGhlcnNbeF0ua3d2YWwgPT0gdG1wW2pdICYmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICFzc2gyY2lwaGVyc1t4XS5mbGdzKQorICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGxlbiArPSBzdHJsZW4oc3No MmNpcGhlcnNbeF0ua3dkKSArIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IHNzaDJfY2lmID0gbWFsbG9jKGxlbik7CisgICAgICAgICAgICAgICAgc3NoMl9jaWZbMF0gPSAn XDAnOworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKyAgICAgICAg ICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBuc3NoMmNpcGhlcnM7IHgrKykKKyAgICAgICAgICAg ICAgICAgICAgaWYgKHNzaDJjaXBoZXJzW3hdLmt3dmFsID09IHRtcFtqXSAmJiAhc3NoMmNpcGhl cnNbeF0uZmxncykKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY2F0KHNzaDJfY2lmLHNzaDJjaXBoZXJzW3hdLmt3ZCxsZW4pOworICAgICAg ICAgICAgICAgICAgICBpZiAoaiA8IGkgLSAxKQorICAgICAgICAgICAgICAgICAgICAgIGNrc3Ry bmNhdChzc2gyX2NpZiwiLCIsbGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI3VuZGVmIFRNUENOVAorICAgICAg ICB9CisgICAgICAgIGNhc2UgU1NIMl9NQUM6IHsKKyNkZWZpbmUgVE1QQ05UIDEyCisgICAgICAg ICAgICBpbnQgaSwgaiwgdG1wW1RNUENOVF07CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg VE1QQ05UOyBpKyspCisgICAgICAgICAgICAgIHRtcFtpXSA9IDA7CisKKyAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBUTVBDTlQ7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNt a2V5KHNzaDJtYWNzLG5zc2gybWFjcywiIiwiIiwgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKHkgPT0gLTMpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAgICAgICBp ZiAodG1wW2pdID09IHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbj9D aG9pY2UgaGFzIGFscmVhZHkgYmVlbiB1c2VkLlxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgdG1wW2ldID0geTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeik7CisKKyAg ICAgICAgICAgIGlmIChzc2gyX21hYykgeworICAgICAgICAgICAgICAgIGZyZWUoc3NoMl9tYWMp OworICAgICAgICAgICAgICAgIHNzaDJfbWFjID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgICAgIGludCBsZW4gPSAwOworICAgICAg ICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAg Zm9yICh4ID0gMDsgeCA8IG5zc2gybWFjczsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgIGlm IChzc2gybWFjc1t4XS5rd3ZhbCA9PSB0bXBbal0gJiYgIXNzaDJtYWNzW3hdLmZsZ3MpCisgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgbGVuICs9IHN0 cmxlbihzc2gybWFjc1t4XS5rd2QpICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgc3NoMl9tYWMgPSBtYWxsb2MobGVuKTsKKyAgICAgICAgICAgICAgICBzc2gyX21hY1sw XSA9ICdcMCc7CisgICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBpOyBqKyspIHsKKyAgICAg ICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IG5zc2gybWFjczsgeCsrKQorICAgICAgICAg ICAgICAgICAgICAgIGlmIChzc2gybWFjc1t4XS5rd3ZhbCA9PSB0bXBbal0gJiYgIXNzaDJtYWNz W3hdLmZsZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY2F0KHNzaDJfbWFjLHNzaDJtYWNzW3hdLmt3ZCxsZW4pOworICAgICAgICAg ICAgICAgICAgICBpZiAoaiA8IGkgLSAxKQorICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNh dChzc2gyX21hYywiLCIsbGVuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI3VuZGVmIFRNUENOVAorICAgICAgICAg IH0KKyAgICAgICAgICBjYXNlIFNTSDJfSEtBOiB7CisjZGVmaW5lIFRNUENOVCAxMgorICAgICAg ICAgICAgaW50IGksIGosIHRtcFtUTVBDTlRdOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IFRNUENOVDsgaSsrKQorICAgICAgICAgICAgICB0bXBbaV0gPSAwOworCisgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgVE1QQ05UOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBj bWtleShoa2F0YWIsbmhrYXRhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwi IiwgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHkgPT0gLTMpCisg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHJldHVybih5 KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7 IGorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAodG1wW2pdID09IHkpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbj9DaG9pY2UgaGFzIGFscmVhZHkgYmVlbiB1c2Vk LlxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdG1wW2ldID0g eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAg ICAgICAgICAgICAgcmV0dXJuKHopOworCisgICAgICAgICAgICBpZiAoc3NoMl9oa2EpIHsKKyAg ICAgICAgICAgICAgICBmcmVlKHNzaDJfaGthKTsKKyAgICAgICAgICAgICAgICBzc2gyX2hrYSA9 IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAg ICAgICAgICBpbnQgbGVuID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGo9MDsgaiA8IGk7IGor KykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbmhrYXRhYjsgeCsrKQor ICAgICAgICAgICAgICAgICAgICAgIGlmIChoa2F0YWJbeF0ua3d2YWwgPT0gdG1wW2pdICYmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICFoa2F0YWJbeF0uZmxncykKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBsZW4gKz0gc3RybGVuKGhrYXRh Ylt4XS5rd2QpICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3NoMl9o a2EgPSBtYWxsb2MobGVuKTsKKyAgICAgICAgICAgICAgICBzc2gyX2hrYVswXSA9ICdcMCc7Cisg ICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAg ICAgZm9yICh4ID0gMDsgeCA8IG5oa2F0YWI7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgaWYg KGhrYXRhYlt4XS5rd3ZhbCA9PSB0bXBbal0gJiYgIWhrYXRhYlt4XS5mbGdzKQorICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoc3NoMl9o a2EsaGthdGFiW3hdLmt3ZCxsZW4pOworICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IGkgLSAx KQorICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChzc2gyX2hrYSwiLCIsbGVuKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworI3VuZGVmIFRNUENOVAorICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFNTSDJf R05IOgorICAgICAgICAgIGNhc2UgU1NIMl9VTkg6CisgICAgICAgICAgICBpZiAoKHggPSBjbWlm aSgiRmlsZW5hbWUiLCIiLCZzLCZ6LHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAg aWYgKHggIT0gLTMpCisgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAg ICAgICAgICAgICAgICBpZiAoemZucWZwKGxpbmUsVE1QQlVGU0laLHRtcGJ1ZikpCisgICAgICAg ICAgICAgICAgICBja3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHMgPSAoeCA9PSAtMykgPyBOVUxMIDogbGluZTsKKyAgICAgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgICAgIGNhc2UgU1NIMl9HTkg6IG1ha2VzdHIo JnNzaDJfZ25oLHMpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBTU0gyX1VOSDogbWFrZXN0 cigmc3NoMl91bmgscyk7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oc3Vj Y2VzcyA9IDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIFNTSF9WUkI6ICAgICAgICAgICAgICAgICAgICAg LyogVmVyYm9zaXR5IGxldmVsICovCisgICAgICAgIHkgPSBjbW51bSgiU1NIIHZlcmJvc2l0eSBs ZXZlbCwgMC03IiwiMiIsMTAsJngseHhzdHJpbmcpOworICAgICAgICByZXR1cm4oc2V0bnVtKCZz c2hfdnJiLHgseSw3KSk7CisKKyAgICAgIGNhc2UgU1NIX1ZFUjogICAgICAgICAgICAgICAgICAg ICAvKiBWZXJzaW9uICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KHNzaHZlciwzLCIiLCJhdXRv IiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBzc2hfdmVyID0g eTsgICAgICAgICAgICAgICAgICAgIC8qIDAgPT0gQVVUTyAqLworI2lmbmRlZiBTU0hURVNUCisg ICAgICAgIHNsX3NzaF92ZXJfc2F2ZWQgPSAwOworI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBTU0hfSURGOiB7ICAgICAgICAg ICAgICAgICAgIC8qIElkZW50aXR5IGZpbGUgKi8KKyAgICAgICAgaW50IGksIG47CisgICAgICAg IGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoKHggPSBjbWlmaSgi RmlsZW5hbWUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYg KHggPT0gLTMpCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1 cm4oeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXpmbnFmcChzLExJTkJVRlNJ WixsaW5lKSkKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAg ICAgICAgICAgbWFrZXN0cigmc3NoX3RtcFtpXSxsaW5lKTsKKyAgICAgICAgfQorICAgICAgICBu ID0gaTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSB7CisgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgICBtYWtlc3RyKCYoc3NoX3RtcFtpXSks TlVMTCk7CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICAgICAgICAgIG1ha2VzdHIoJihzc2hfaWRmW2ldKSxO VUxMKTsKKyAgICAgICAgICAgIGlmIChpIDwgbikgeworICAgICAgICAgICAgICAgIHNzaF9pZGZb aV0gPSBzc2hfdG1wW2ldOworICAgICAgICAgICAgICAgIHNzaF90bXBbaV0gPSBOVUxMOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCYoc3NoX3RtcFtpXSks TlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3NoX2lkZl9uID0gbjsK KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgU1NIX1hG VzogICAgICAgICAgICAgICAgICAgICAvKiBYMTEtZm9yd2FyZGluZyAqLworICAgICAgICBzdWNj ZXNzID0gc2V0b24oJnNzaF94ZncpOworI2lmbmRlZiBTU0hURVNUCisgICAgICAgIGlmIChzdWNj ZXNzKQorICAgICAgICAgIHNsX3NzaF94Zndfc2F2ZWQgPSAwOworI2VuZGlmIC8qIFNTSFRFU1Qg Ki8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworCisgICAgICBjYXNlIFNTSF9YQUw6ICAgICAg ICAgICAgICAgICAgICAgLyogU1NIIFhhdXRoIExvY2F0aW9uICovCisgICAgICAgIGlmICgoeCA9 IGNtaWZpKCJQYXRoIHRvIGV4ZWN1dGFibGUiLCAiIiwmcywmeSx4eHN0cmluZykpIDwgMCkgewor ICAgICAgICAgICAgaWYgKHggIT0gLTMpCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAg ICAgICAgICAgIGlmICh6Zm5xZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKSkKKyAgICAgICAgICAg ICAgY2tzdHJuY3B5KGxpbmUsdG1wYnVmLExJTkJVRlNJWik7CisgICAgICAgIH0KKyAgICAgICAg cyA9ICh4ID09IC0zKSA/IE5VTEwgOiBsaW5lOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKKyAgICAgICAgbWFrZXN0cigmc3NoX3hhbCxzKTsKKyAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBTU0hfQ0ZHOiAgICAgICAgICAgICAgICAg ICAgIC8qIFVzZSBPcGVuU1NIIENvbmZpZyAqLworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNl dG9uKCZzc2hfY2ZnKSk7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisgICAgICBkZWZhdWx0 OgorICAgICAgICByZXR1cm4oLTIpOworICAgIH0KK30KKyNlbmRpZiAvKiBBTllTU0ggKi8KKwor I2lmZGVmIFNGVFBfQlVJTFRJTgorc3RhdGljIGludAorZG9zZXRzZnRwKCkgeworICAgIGludCBj eCwgeCwgeSwgejsKKyAgICBjaGFyICogczsKKworICAgIGlmICgoY3ggPSBjbWtleShzZnRwdGFi LG5zZnRwdGFiLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybihjeCk7CisgICAg c3dpdGNoIChjeCkgeworICAgIGNhc2UgWFlfU0ZUUF9FT0w6CisgICAgY2FzZSBYWV9TRlRQX1JD UzoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oLTIpOworICAgIH0KK30KKyNlbmRpZiAv KiBTRlRQX0JVSUxUSU4gKi8KKworI2lmZGVmIEtVSQorI2luY2x1ZGUgImlrdWkuaCIKK2V4dGVy biBVTE9ORyBSR0JUYWJsZVsxNl07CisKKyNkZWZpbmUgR1VJX1JHQiAgMQorI2RlZmluZSBHVUlf V0lOICAyCisjZGVmaW5lIEdVSV9GT04gIDMKKyNkZWZpbmUgR1VJX0RJQSAgNAorI2RlZmluZSBH VUlfVExCICA1CisjZGVmaW5lIEdVSV9NTkIgIDYKKyNkZWZpbmUgR1VJX0NMUyAgNworCisjZGVm aW5lIEdVSVdfUE9TIDEKKyNkZWZpbmUgR1VJV19SRVMgMgorI2RlZmluZSBHVUlXX1JVTiAzCisj ZGVmaW5lIEdVSVdSX05PTiAwCisjZGVmaW5lIEdVSVdSX0ZPTiAxCisjZGVmaW5lIEdVSVdSX0RJ TSAyCisjZGVmaW5lIEdVSVdOX1JFUyAxCisjZGVmaW5lIEdVSVdOX01JTiAyCisjZGVmaW5lIEdV SVdOX01BWCAzCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGd1aXRhYltdID0geworICAgIHsgImNs b3NlIiwgICAgICAgR1VJX0NMUywgIDAgfSwKKyAgICB7ICJkaWFsb2dzIiwgICAgIEdVSV9ESUEs ICAwIH0sCisgICAgeyAiZm9udCIsICAgICAgICBHVUlfRk9OLCAgMCB9LAorICAgIHsgIm1lbnVi YXIiLCAgICAgR1VJX01OQiwgIDAgfSwKKyAgICB7ICJyZ2Jjb2xvciIsICAgIEdVSV9SR0IsICAw IH0sCisgICAgeyAidG9vbGJhciIsICAgICBHVUlfVExCLCAgMCB9LAorICAgIHsgIndpbmRvdyIs ICAgICAgR1VJX1dJTiwgIDAgfSwKKyAgICB7ICIiLCAwLCAwfQorfTsKK3N0YXRpYyBpbnQgbmd1 aXRhYiA9IChzaXplb2YoZ3VpdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRp YyBzdHJ1Y3Qga2V5dGFiIGd1aXd0YWJbXSA9IHsKKyAgICB7ICJwb3NpdGlvbiIsICAgIEdVSVdf UE9TLCAwIH0sCisgICAgeyAicmVzaXplLW1vZGUiLCBHVUlXX1JFUywgMCB9LAorICAgIHsgInJ1 bi1tb2RlIiwgICAgR1VJV19SVU4sIDAgfSwKKyAgICB7ICIiLCAwLCAwfQorfTsKK3N0YXRpYyBp bnQgbmd1aXd0YWIgPSAoc2l6ZW9mKGd1aXd0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK Kworc3RhdGljIHN0cnVjdCBrZXl0YWIgZ3Vpd3J0YWJbXSA9IHsKKyAgICB7ICJjaGFuZ2UtZGlt ZW5zaW9ucyIsICBHVUlXUl9ESU0sIDAgfSwKKyAgICB7ICJub25lIiwgICAgICAgICAgICAgICBH VUlXUl9OT04sIDAgfSwKKyAgICB7ICJzY2FsZS1mb250IiwgICAgICAgICBHVUlXUl9GT04sIDAg fSwKKyAgICB7ICIiLCAwLCAwfQorfTsKK3N0YXRpYyBpbnQgbmd1aXdydGFiID0gKHNpemVvZihn dWl3cnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0IGtleXRh YiBndWl3bnRhYltdID0geworICAgIHsgIm1heGltaXplIiwgIEdVSVdOX01BWCwgMCB9LAorICAg IHsgIm1pbmltaXplIiwgIEdVSVdOX01JTiwgMCB9LAorICAgIHsgInJlc3RvcmUiLCAgIEdVSVdO X1JFUywgMCB9LAorICAgIHsgIiIsIDAsIDB9Cit9Oworc3RhdGljIGludCBuZ3Vpd250YWIgPSAo c2l6ZW9mKGd1aXdudGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1 Y3Qga2V5dGFiIHJnYnRhYltdID0geworICAgIHsgImJsYWNrIiwgICAgICAgICAwLCAwIH0sCisg ICAgeyAiYmx1ZSIsICAgICAgICAgIDEsIDAgfSwKKyAgICB7ICJicm93biIsICAgICAgICAgNiwg MCB9LAorICAgIHsgImN5YW4iLCAgICAgICAgICAzLCAwIH0sCisgICAgeyAiZGFya2dyYXkiLCAg ICAgIDgsIDAgfSwKKyAgICB7ICJkZ3JheSIsICAgICAgICAgOCwgQ01fSU5WIH0sCisgICAgeyAi Z3JlZW4iLCAgICAgICAgIDIsIDAgfSwKKyAgICB7ICJsYmx1ZSIsICAgICAgICAgOSwgQ01fSU5W IH0sCisgICAgeyAibGN5YW4iLCAgICAgICAgMTEsIENNX0lOViB9LAorICAgIHsgImxncmVlbiIs ICAgICAgIDEwLCBDTV9JTlYgfSwKKyAgICB7ICJsZ3JheSIsICAgICAgICAgNywgQ01fSU5WIH0s CisgICAgeyAibGlnaHRibHVlIiwgICAgIDksIDAgfSwKKyAgICB7ICJsaWdodGN5YW4iLCAgICAx MSwgMCB9LAorICAgIHsgImxpZ2h0Z3JlZW4iLCAgIDEwLCAwIH0sCisgICAgeyAibGlnaHRncmF5 IiwgICAgIDcsIDAgfSwKKyAgICB7ICJsaWdodG1hZ2VudGEiLCAxMywgMCB9LAorICAgIHsgImxp Z2h0cmVkIiwgICAgIDEyLCAwIH0sCisgICAgeyAibG1hZ2VudGEiLCAgICAgMTMsIENNX0lOViB9 LAorICAgIHsgImxyZWQiLCAgICAgICAgIDEyLCBDTV9JTlYgfSwKKyAgICB7ICJtYWdlbnRhIiwg ICAgICAgNSwgMCB9LAorICAgIHsgInJlZCIsICAgICAgICAgICA0LCAwIH0sCisgICAgeyAid2hp dGUiLCAgICAgICAgMTUsIDAgfSwKKyAgICB7ICJ5ZWxsb3ciLCAgICAgICAxNCwgMCB9LAorCit9 OworaW50IG5yZ2IgPSAoc2l6ZW9mKHJnYnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwor CitWT0lECitzaG9ndWkoKSB7CisgICAgZXh0ZXJuIGd1aV9kaWFsb2c7CisgICAgZXh0ZXJuIEhX TkQgZ2V0SHduZEtVSSgpOworICAgIHVuc2lnbmVkIGNoYXIgY21kc2F2ID0gY29sb3JjbWQ7Cisg ICAgaW50IGksIHJlZCwgZ3JlZW4sIGJsdWUsIGxpbmVzPTA7CisgICAgY2hhciAqIHM7CisKKwor ICAgIHByaW50ZigiR1VJIHBhcmFtdGVyczpcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAg cHJpbnRmKCIgIERpYWxvZ3M6ICAgICAlc1xuIixzaG93b2ZmKGd1aV9kaWFsb2cpKTsKKyAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNl IGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiICBQb3NpdGlvbjogICAgJWQsJWRcbiIsZ2V0X2d1 aV93aW5kb3dfcG9zX3goKSwKKyAgICAgICAgICAgIGdldF9ndWlfd2luZG93X3Bvc195KCkpOwor ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47 IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgIFJlc29sdXRpb246ICAlZCB4ICVkXG4i LEdldFN5c3RlbU1ldHJpY3MoU01fQ1hTQ1JFRU4pLAorICAgICAgICAgICAgR2V0U3lzdGVtTWV0 cmljcyhTTV9DWVNDUkVFTikpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgIFJ1 bi1tb2RlOiAgICAlc1xuIixJc0ljb25pYyhnZXRId25kS1VJKCkpID8gIm1pbmltaXplZCIgOgor ICAgICAgICAgICAgSXNab29tZWQoZ2V0SHduZEtVSSgpKSA/ICJtYXhpbWl6ZWQiIDogInJlc3Rv cmVkIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBzd2l0Y2ggKCBnZXRfZ3VpX3Jlc2l6ZV9t b2RlKCkgKSB7CisgICAgICBjYXNlIEdVSVdSX05PTjoKKyAgICAgICAgcyA9ICJub25lIjsKKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdVSVdSX0ZPTjoKKyAgICAgICAgcyA9ICJzY2FsZXMg Zm9udCI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHVUlXUl9ESU06CisgICAgICAgIHM9 ICJjaGFuZ2VzIGRpbWVuc2lvbnMiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcHJpbnRm KCIgIFJlc2l6ZS1tb2RlOiAlc1xuIixzKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50 ZigiXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorCisgICAgcHJpbnRmKCJSR0IgQ29sb3IgVGFi bGU6XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiICBDb2xvciAgICAgICAg ICAgICAgUmVkIEdyZWVuIEJsdWVcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRm KCIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBsaW5lcyA9IDA7IH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnJnYjsgaSsrKSB7CisgICAgICAg IGlmICghcmdidGFiW2ldLmZsZ3MpIHsKKyAgICAgICAgICAgIGJsdWUgPSAoUkdCVGFibGVbcmdi dGFiW2ldLmt3dmFsXSAmIDB4MDBGRjAwMDApPj4xNjsKKyAgICAgICAgICAgIGdyZWVuID0gKFJH QlRhYmxlW3JnYnRhYltpXS5rd3ZhbF0gJiAweDAwMDBGRjAwKT4+ODsKKyAgICAgICAgICAgIHJl ZCA9IChSR0JUYWJsZVtyZ2J0YWJbaV0ua3d2YWxdICYgMHgwMDAwMDBGRik7CisgICAgICAgICAg ICBwcmludGYoIiAgJS0xOHMgJTNkICAlM2QgICUzZCAgIixyZ2J0YWJbaV0ua3dkLHJlZCxncmVl bixibHVlKTsKKyAgICAgICAgICAgIGNvbG9yY21kID0gcmdidGFiW2ldLmt3dmFsIDw8IDQ7Cisg ICAgICAgICAgICBwcmludGYoIioqKioqKioqIik7CisgICAgICAgICAgICBjb2xvcmNtZCA9IGNt ZHNhdjsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7CisJCWlmICghYXNrbW9yZSgpKQorCQkgIHJldHVybjsKKwkJZWxz ZQorCQkgIGxpbmVzID0gMDsKKwkgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHByaW50Zigi XG4iKTsKK30KKworaW50CitzZXRyZ2IoKSB7CisgICAgaW50IGN4LCByZWQgPSAwLCBibHVlID0g MCwgZ3JlZW4gPSAwLCB6LCB4OworCisgICAgaWYgKChjeCA9IGNta2V5KHJnYnRhYixucmdiLCIi LCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKGN4KTsKKyAgICBpZiAoKHogPSBjbW51 bSgiUmVkIHZhbHVlLCAwLTI1NSIsIiIsMTAsJnJlZCx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJl dHVybih6KTsKKyAgICBpZiAoKHogPSBjbW51bSgiR3JlZW4gdmFsdWUsIDAtMjU1IiwiIiwxMCwm Z3JlZW4seHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeik7CisgICAgaWYgKCh6ID0gY21u dW0oIkJsdWUgdmFsdWUsIDAtMjU1IiwiIiwxMCwmYmx1ZSx4eHN0cmluZykpIDwgMCkKKyAgICAg IHJldHVybih6KTsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICBp ZiAoY3ggPiAxNSB8fCByZWQgPiAyNTUgfHwgYmx1ZSA+IDI1NSB8fCBncmVlbiA+IDI1NSkKKyAg ICAgIHJldHVybigtMik7CisgICAgUkdCVGFibGVbY3hdID0gKHVuc2lnbmVkKSgoKHVuc2lnbmVk KWJsdWUgPDwgMTYpIHwKKyAgICAgICAgKHVuc2lnbmVkKSgodW5zaWduZWQpZ3JlZW4gPDwgOCkg fAorICAgICAgICAodW5zaWduZWQpcmVkKTsKKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQor CisvKgorICBTZXQgR1VJIHdpbmRvdyBwb3NpdGlvbjogWFkgY29vcmRpbmF0ZXMgb2YgdXBwZXIg bGVmdCBjb3JuZXIsCisgIGV4cHJlc3NlZCBhcyBwaXhlbCBudW1iZXJzIGluIHRoZSBjdXJyZW50 IHNjcmVlbiByZXNvbHV0aW9uLgorICAoMCwwKSBtZWFucyBwdXQgb3Vyc2VsdmVzIGluIHRoZSB1 cHBlciBsZWZ0IGNvcm5lci4KKyAgQ2FuIHdlIGNoZWNrIGZvciBvdXQgb2YgYm91bmRzPworKi8K KworaW50CitzZXRndWl3aW4oKSB7CisgICAgaW50IGN4LCB4LCB5LCB6OworICAgIGlmICgoY3gg PSBjbWtleShndWl3dGFiLG5ndWl3dGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0 dXJuKGN4KTsKKyAgICBzd2l0Y2ggKGN4KSB7CisgICAgICBjYXNlIEdVSVdfUE9TOgorICAgICAg ICBpZiAoKHogPSBjbW51bSgiWCBjb29yZGluYXRlIChwaXhlbCBudW1iZXIpIiwiIiwxMCwmeCx4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgIGlmICgoeiA9IGNt bnVtKCJZIGNvb3JkaW5hdGUgKHBpeGVsIG51bWJlcikiLCIiLDEwLCZ5LHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQor ICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7CisgICAg ICAgICAgICBwcmludGYoIj9Db29yZGluYXRlcyBtdXN0IGJlIDAgb3IgZ3JlYXRlclxuIik7Cisg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGd1aV9wb3NpdGlvbih4 LHkpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgY2FzZSBHVUlXX1JFUzoK KyAgICAgICAgaWYgKCh4ID0gY21rZXkoZ3Vpd3J0YWIsbmd1aXdydGFiLCIiLCIiLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkg PCAwKQorICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgZ3VpX3Jlc2l6ZV9tb2RlKHgpOwor ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgY2FzZSBHVUlXX1JVTjoKKwlpZiAo KHggPSBjbWtleShndWl3bnRhYixuZ3Vpd250YWIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisJICBy ZXR1cm4oeCk7CisJaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorCSAgcmV0dXJuKHopOworCWd1aV93 aW5fcnVuX21vZGUoeCk7CisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIGRlZmF1bHQ6Cisg ICAgICAgIHJldHVybigtMik7CisgICAgfQorfQorCitpbnQKK3NldGd1aWZvbnQoKSB7CQkJCS8q IEFzc3VtZXMgdGhhdCBDS0ZMT0FUIGlzIGRlZmluZWQhICovCisKKyAgICBleHRlcm4gc3RydWN0 IGtleXRhYiAqIHRlcm1fZm9udDsKKyAgICBleHRlcm4gc3RydWN0IGtleXRhYiAqIF90ZXJtX2Zv bnQ7CisgICAgZXh0ZXJuIGludCB0dF9mb250LCB0dF9mb250X3NpemUsIG50ZXJtZm9udDsKKyAg ICBpbnQgeCwgeSwgejsKKyAgICBjaGFyICpzOworCisgICAgaWYgKG50ZXJtZm9udCA9PSAwKQor ICAgICAgQnVpbGRGb250VGFibGUoJnRlcm1fZm9udCwgJl90ZXJtX2ZvbnQsICZudGVybWZvbnQp OworICAgIGlmICghKHRlcm1fZm9udCAmJiBfdGVybV9mb250ICYmIG50ZXJtZm9udCA+IDApKSB7 CisgICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yOiBGYWlsdXJlIHRvIGVudW1lcmF0ZSBm b250c1xuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmICgoeCA9IGNta2V5 KF90ZXJtX2ZvbnQsbnRlcm1mb250LCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJu KHgpOworICAgIGlmICgoeiA9IGNtZmxkKCJIZWlnaHQgb2YgZm9udCBpbiBwb2ludHMiLCIxMiIs JnMseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeik7CisgICAgaWYgKGlzZmxvYXQocyww KSA8IDEpIHsJCS8qIChzZXRzIGZsb2F0dmFsKSAqLworCXByaW50ZigiP0ludGVnZXIgb3IgZmxv YXRpbmctcG9pbnQgbnVtYmVyIHJlcXVpcmVkXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAg ICBpZiAoZmxvYXR2YWwgPCAwLjUpIHsKKwlwcmludGYoIj9Qb3NpdGl2ZSBudW1iZXIgcmVxdWly ZWRcbiIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkK KyAgICAgIHJldHVybih6KTsKKyAgICB0dF9mb250ID0geDsJCQkvKiBGb250IGluZGV4ICovCisg ICAgdHRfZm9udF9zaXplID0gKGludCkoZmxvYXR2YWwgKiAyKTsJLyogRm9udCBzaXplIGluIGhh bGYgcG9pbnRzICovCisgICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fRk9OVCwgKGxvbmcpdHRf Zm9udCwgKGxvbmcpdHRfZm9udF9zaXplKTsKKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQor CitWT0lECitzZXRndWlkaWFsb2coeCkgaW50IHg7Cit7CisgICAgZXh0ZXJuIGludCBndWlfZGlh bG9nOworICAgIGd1aV9kaWFsb2cgPSB4OworICAgIEt1aVNldFByb3BlcnR5KEtVSV9HVUlfRElB TE9HUywgKGxvbmcpeCwgMEwpOworfQorCitWT0lECitzZXRndWltZW51YmFyKHgpIGludCB4Owor eworICAgIEt1aVNldFByb3BlcnR5KEtVSV9HVUlfTUVOVUJBUiwgKGxvbmcpeCwgMEwpOworfQor CitWT0lECitzZXRndWl0b29sYmFyKHgpIGludCB4OworeworICAgIEt1aVNldFByb3BlcnR5KEtV SV9HVUlfVE9PTEJBUiwgKGxvbmcpeCwgMEwpOworfQorCitWT0lECitzZXRndWljbG9zZSh4KSBp bnQgeDsKK3sKKyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfR1VJX0NMT1NFLCAobG9uZyl4LCAwTCk7 Cit9CisKK2ludAorc2V0Z3VpKCkgeworICAgIGludCBjeCwgeCwgcmM7CisgICAgaWYgKChjeCA9 IGNta2V5KGd1aXRhYixuZ3VpdGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJu KGN4KTsKKyAgICBzd2l0Y2ggKGN4KSB7CisgICAgICBjYXNlIEdVSV9ESUE6CisgICAgICAgIHJj ID0gc2V0b24oJngpOworICAgICAgICBpZiAocmMgPj0gMCkKKyAgICAgICAgICBzZXRndWlkaWFs b2coeCk7CisgICAgICAgIHJldHVybihyYyk7CisgICAgICBjYXNlIEdVSV9GT046CisgICAgICAg IHJldHVybihzZXRndWlmb250KCkpOworICAgICAgY2FzZSBHVUlfUkdCOgorICAgICAgICByZXR1 cm4oc2V0cmdiKCkpOworICAgICAgY2FzZSBHVUlfV0lOOgorICAgICAgICByZXR1cm4oc2V0Z3Vp d2luKCkpOworICAgICAgY2FzZSBHVUlfVExCOgorICAgICAgICByYyA9IHNldG9uKCZ4KTsKKyAg ICAgICAgaWYgKHJjID49IDApCisgICAgICAgICAgc2V0Z3VpdG9vbGJhcih4KTsKKyAgICAgICAg cmV0dXJuKHJjKTsKKyAgICAgIGNhc2UgR1VJX01OQjoKKyAgICAgICAgcmMgPSBzZXRvbigmeCk7 CisgICAgICAgIGlmIChyYyA+PSAwKQorICAgICAgICAgIHNldGd1aW1lbnViYXIoeCk7CisgICAg ICAgIHJldHVybihyYyk7CisgICAgICBjYXNlIEdVSV9DTFM6CisgICAgICAgIHJjID0gc2V0b24o JngpOworICAgICAgICBpZiAocmMgPj0gMCkKKyAgICAgICAgICBzZXRndWljbG9zZSh4KTsKKyAg ICAgICAgcmV0dXJuKHJjKTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigtMik7Cisg ICAgfQorfQorI2VuZGlmIC8qIEtVSSAqLworCitWT0lECitzZXRleGl0d2Fybih4KSBpbnQgeDsg Cit7CisgICAgeGl0d2FybiA9IHg7CisjaWZkZWYgS1VJCisgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0VYSVRfV0FSTklORywgKGxvbmcpeCwgMEwpOworI2VuZGlmIC8qIEtVSSAqLworfQorCisjaWZu ZGVmIE5PTE9DQUwKK1ZPSUQKK3NldGRlYnNlcyh4KSBpbnQgeDsgeworI2lmZGVmIE9TMgorICAg IGlmICgoZGVic2VzICE9IDApICYmICh4ID09IDApKQkvKiBJdCB3YXMgb24gYW5kIHdlIHR1cm5l ZCBpdCBvZmY/ICovCisgICAgICBvczJkZWJ1Z29mZigpOwkJCS8qIEZpeCBPUy8yIGNvbG9yYXRp b24gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBkZWJzZXMgPSB4OworI2lmZGVmIEtVSQorICAg IEt1aVNldFByb3BlcnR5KEtVSV9URVJNX0RFQlVHLHgsMCk7CisjZW5kaWYgLyogS1VJICovCit9 CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisvKiAgRCBPIFAgUiBNICAtLSAgU2V0IGEgcGFyYW1l dGVyLiAgKi8KKy8qCisgUmV0dXJuczoKKyAgLTI6IGlsbGVnYWwgaW5wdXQKKyAgLTE6IHJlcGFy c2UgbmVlZGVkCisgICAwOiBzdWNjZXNzCisqLworaW50Citkb3BybSh4eCxybXNmbGcpIGludCB4 eCwgcm1zZmxnOyB7CisgICAgaW50IGkgPSAwLCB4ID0gMCwgeSA9IDAsIHogPSAwOworICAgIGxv bmcgenogPSAwTDsKKyAgICBjaGFyICpzID0gTlVMTCwgKnAgPSBOVUxMOworI2lmZGVmIE9TMgor ICAgIGNoYXIgcG9ydGJ1Zls2NF07CisgICAgbG9uZyBwb3J0c3BlZWQgPSAwTDsKKyAgICBpbnQg cG9ydHBhcml0eSA9IDA7CisgICAgaW50IHBvcnRmbG93ID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8K KworI2lmbmRlZiBOT1NFVEtFWQorI2lmZGVmIE9TMgorICAgIGlmICh4eCA9PSBYWU1TSykKKyAg ICAgIHJldHVybihzZXRtc2soKSk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9TRVRL RVkgKi8KKworICAgIGlmICh4eCA9PSBYWUZMQUcpIHsgICAgICAgICAgICAgICAgIC8qIFNFVCBG TEFHICovCisgICAgICAgIGV4dGVybiBpbnQgb29mbGFnOworICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IHNldG9uKCZvb2ZsYWcpKTsKKyAgICB9CisgICAgaWYgKHh4ID09IFhZUFJUUiAgICAgICAg ICAgICAgICAgICAgLyogU0VUIFBSSU5URVIgKG9yIEJQUklOVEVSKSAqLworI2lmZGVmIEJQUklO VAorICAgICAgICB8fCB4eCA9PSBYWUJEQ1AKKyNlbmRpZiAvKiBCUFJJTlQgKi8KKyAgICAgICAg KQorICAgICAgcmV0dXJuKHNldHByaW50ZXIoeHgpKTsKKworICAgIHN3aXRjaCAoeHgpIHsKKwor I2lmZGVmIEFOWVgyNSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBYMjUgLi4uICov CitjYXNlIFhZWDI1OgorICAgICAgICByZXR1cm4oc2V0eDI1KCkpOworCisjaWZuZGVmIElCTVgy NQorY2FzZSBYWVBBRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBQQUQgLi4u ICovCisgICAgICAgIHJldHVybihzZXRwYWRwKCkpOworI2VuZGlmIC8qIElCTVgyNSAqLworI2Vu ZGlmIC8qIEFOWVgyNSAqLworCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBYWUVPTDogICAg ICAgLyogVGhlc2UgaGF2ZSBhbGwgYmVlbiBtb3ZlZCB0byBzZXQgc2VuZC9yZWNlaXZlLi4uICov CisgICAgICBjYXNlIFhZTEVOOiAgICAgICAvKiBMZXQgdGhlIHVzZXIga25vdyB3aGF0IHRvIGRv LiAqLworICAgICAgY2FzZSBYWU1BUks6CisgICAgICBjYXNlIFhZTlBBRDoKKyAgICAgIGNhc2Ug WFlQQURDOgorICAgICAgY2FzZSBYWVRJTU86CisgICAgICAgIHByaW50ZigiLi4uVXNlIFNFVCBT RU5EIG9yIFNFVCBSRUNFSVZFIGluc3RlYWQuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJUeXBlIEhF TFAgU0VUIFNFTkQgb3IgSEVMUCBTRVQgUkVDRUlWRSBmb3IgbW9yZSBpbmZvLlxuIik7CisgICAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7CisKKyAgICAgIGNhc2UgWFlBVFRSOiAgICAgICAgICAg ICAgICAgICAgICAvKiBGaWxlIEF0dHJpYnV0ZSBwYWNrZXRzICovCisgICAgICAgIHJldHVybihz ZXRhdChybXNmbGcpKTsKKworICAgICAgY2FzZSBYWUlGRDogICAgICAgICAgICAgICAgICAgICAg IC8qIEluY29tcGxldGUgZmlsZSBkaXNwb3NpdGlvbiAqLworICAgICAgICBpZiAoKHkgPSBjbWtl eShpZmRhdGFiLDMsIiIsImF1dG8iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAocm1zZmxnKSB7 CisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIzMTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPT0gMCA/ICIwIiA6 ICh5ID09IDEgPyAiMSIgOiAiMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBz c3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAga2VlcCA9IHk7CisgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICB9CisjZW5kaWYgLyogTk9YRkVSICov CisKKyAgICAgIGNhc2UgWFlNQVRDSDoJCQkvKiBbIFJFTU9URSBdIFNFVCBNQVRDSC4uLiAgKi8K KyNpZm5kZWYgTk9YRkVSCisJaWYgKCh6ID0gY21rZXkobWF0Y2h0YWIsbm1hdGNodGFiLCIiLCIi LHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworCWlmIChybXNmbGcpIHsKKyAgICAgICAg ICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJu KHkpOworCSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwkgICAgc3dpdGNo ICh6KSB7CisJICAgICAgY2FzZSBNQ0hfRE9URjoKKwkJcmV0dXJuKHNzdGF0ZSA9IHNldGdlbign UycsIjMzMCIsIHkgPT0gMCA/ICIwIiA6ICIxIiwgIiIpKTsKKwkgICAgICBjYXNlIE1DSF9GSUZP OgorCQlyZXR1cm4oc3N0YXRlID0gc2V0Z2VuKCdTJywiMzMxIiwgeSA9PSAwID8gIjAiIDogIjEi LCAiIikpOworCSAgICAgIGRlZmF1bHQ6CisJCXJldHVybigtMik7CisJICAgICAgfQorCSAgfQor I2VuZGlmIC8qIE5PWEZFUiAqLworCSAgc3dpdGNoICh6KSB7CisJICAgIGNhc2UgTUNIX0ZJRk86 CisJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmbWF0Y2hmaWZvKSk7CisJICAgIGNhc2Ug TUNIX0RPVEY6CisJICAgICAgeCA9IHNldG9uKCZtYXRjaGRvdCk7IAorCSAgICAgIGlmICh4IDwg MCkgcmV0dXJuKHgpOworCSAgICAgIGRpcl9kb3RzID0gLTE7CisJICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSB4KTsKKwkgICAgZGVmYXVsdDoKKwkgICAgICByZXR1cm4oLTIpOworCSAgfQorCisjaWZu ZGVmIE5PU1BMCisgICAgICBjYXNlIFhZSU5QVTogICAgICAgICAgICAgICAgICAgICAgLyogU0VU IElOUFVUICovCisgICAgICAgIHJldHVybihzZXRpbnAoKSk7CisjZW5kaWYgLyogTk9TUEwgKi8K KworI2lmZGVmIE5FVENPTk4KKyAgICAgIGNhc2UgWFlORVQ6IHsgICAgICAgICAgICAgICAgICAg ICAvKiBTRVQgTkVUV09SSyAqLworCisgICAgICAgICAgc3RydWN0IEZEQiBrMSwgazI7CisKKyAg ICAgICAgICBjbWZkYmkoJmsxLF9DTUtFWSwiIiwiIiwiIixubmV0a2V5LCAwLCB4eHN0cmluZywg bmV0a2V5LCAmazIpOworICAgICAgICAgIGNtZmRiaSgmazIsX0NNS0VZLCIiLCIiLCIiLG5uZXRz LCAgIDAsIHh4c3RyaW5nLCBuZXRjbWQsIE5VTEwpOworCisjaWZkZWYgT1MyICAgICAvKiBIaWRl IG5ldHdvcmstdHlwZSBrZXl3b3JkcyBmb3IgbmV0d29ya3Mgbm90IGluc3RhbGxlZCAqLworICAg ICAgICAgIGZvciAoeiA9IDA7IHogPCBubmV0czsgeisrKSB7CisgICAgICAgICAgICAgIGlmIChu ZXRjbWRbel0ua3d2YWwgPT0gTkVUX1RDUEIgJiYgdGNwX2F2YWlsID09IDApCisgICAgICAgICAg ICAgICAgbmV0Y21kW3pdLmZsZ3MgPSAgQ01fSU5WOworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAg ICAgICAgICAgaWYgKG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRfU1NIICYmCisgICAgICAgICAgICAg ICAgICAgIWNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSkKKyAgICAgICAgICAgICAgICBuZXRjbWRb el0uZmxncyA9ICBDTV9JTlY7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIERFQ05F VAorICAgICAgICAgICAgICBlbHNlIGlmIChuZXRjbWRbel0ua3d2YWwgPT0gTkVUX0RFQyAgJiYg ZG5ldF9hdmFpbCA9PSAwKQorICAgICAgICAgICAgICAgIG5ldGNtZFt6XS5mbGdzID0gIENNX0lO VjsKKyNlbmRpZiAvKiBERUNORVQgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisgICAgICAgICAgICAg IGVsc2UgaWYgKG5ldGNtZFt6XS5rd3ZhbCA9PSBORVRfQklPUyAmJiBuZXRiaW9zQXZhaWwgPT0g MCkKKyAgICAgICAgICAgICAgICBuZXRjbWRbel0uZmxncyA9ICBDTV9JTlY7CisjZW5kaWYgLyog Q0tfTkVUQklPUyAqLworI2lmZGVmIFNVUEVSTEFUCisgICAgICAgICAgICAgIGVsc2UgaWYgKG5l dGNtZFt6XS5rd3ZhbCA9PSBORVRfU0xBVCAgJiYgc2xhdF9hdmFpbCA9PSAwKQorICAgICAgICAg ICAgICAgIG5ldGNtZFt6XS5mbGdzID0gIENNX0lOVjsKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLwor ICAgICAgICAgIH0KKyAgICAgICAgICBpZiAodGNwX2F2YWlsKSAgICAgICAgICAgICAgICAvKiBE ZWZhdWx0IG5ldHdvcmsgdHlwZSAqLworICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZiwidGNw L2lwIixUTVBCVUZTSVopOworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICBlbHNlIGlmICgg Y2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpICkKKyAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYs InNzaCIsVE1QQlVGU0laKTsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYgREVDTkVU CisgICAgICAgICAgZWxzZSBpZiAoZG5ldF9hdmFpbCkKKyAgICAgICAgICAgIGNrc3RybmNweSh0 bXBidWYsImRlY25ldCIsVE1QQlVGU0laKTsKKyNlbmRpZiAvKiBERUNORVQgKi8KKyNpZmRlZiBT VVBFUkxBVAorICAgICAgICAgIGVsc2UgaWYgKHNsYXRfYXZhaWwpCisgICAgICAgICAgICBja3N0 cm5jcHkodG1wYnVmLCJzdXBlcmxhdCIsVE1QQlVGU0laKTsKKyNlbmRpZiAvKiBTVVBFUkxBVCAq LworI2lmZGVmIENLX05FVEJJT1MKKyAgICAgICAgICBlbHNlIGlmIChuZXRiaW9zQXZhaWwpCisg ICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCJuZXRiaW9zIixUTVBCVUZTSVopOworI2VuZGlm IC8qIENLX05FVEJJT1MgKi8KKyAgICAgICAgICBlbHNlIGNrc3RybmNweSh0bXBidWYsIm5hbWVk LXBpcGUiLFRNUEJVRlNJWik7CisjZWxzZSAgLyogT1MyICovCisjaWZkZWYgVENQU09DS0VUCisg ICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZiwidGNwL2lwIixUTVBCVUZTSVopOworI2Vsc2UKKyNp ZmRlZiBBTllYMjUKKyAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCJ4LjI1IixUTVBCVUZTSVop OworI2Vsc2UKKyAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLCIiLFRNUEJVRlNJWik7CisjZW5k aWYgLyogQU5ZWDI1ICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogT1MyICov CisKKyAgICAgICAgICB4ID0gY21mZGIoJmsxKTsKKyAgICAgICAgICBpZiAoeCA8IDApIHsgICAg ICAgICAgICAgICAgICAvKiBFcnJvciAqLworICAgICAgICAgICAgICBpZiAoeCA9PSAtMiB8fCB4 ID09IC05KQorICAgICAgICAgICAgICAgIHByaW50ZigiP05vIGtleXdvcmRzIG1hdGNoOiBcIiVz XCJcbiIsYXRtYnVmKTsKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIH0KKyAg ICAgICAgICB6ID0gY21yZXN1bHQubnJlc3VsdDsgICAgICAgICAvKiBLZXl3b3JkIHZhbHVlICov CisgICAgICAgICAgaWYgKGNtcmVzdWx0LmZkYmFkZHIgPT0gJmsxKSB7IC8qIFdoaWNoIHRhYmxl PyAqLworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBOT0RJQUwKKyAgICAgICAgICAgICAgaWYgKHog PT0gWFlORVRfRCkKKyAgICAgICAgICAgICAgICByZXR1cm4ocGFyc2RpcigxKSk7CisjZW5kaWYg LyogTk9ESUFMICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgaWYgKCh6ID0g Y21rZXkobmV0Y21kLG5uZXRzLCIiLHRtcGJ1Zix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg ICAgICByZXR1cm4oeik7CisgICAgICAgICAgfQorCisjaWZkZWYgTkVUQ01ECisgICAgICAgICAg aWYgKHogPT0gTkVUX0NNRCAmJiBub3B1c2gpIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJcbj9T b3JyeSwgYWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGlzIGRpc2FibGVkXG4iKTsKKyAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICB9CisjZW5kaWYgLyogTkVUQ01EICovCisK KyNpZm5kZWYgTk9QVVNICisjaWZkZWYgTkVUUFRZCisgICAgICAgICAgaWYgKHogPT0gTkVUX1BU WSAmJiBub3B1c2gpIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJcbj9Tb3JyeSwgYWNjZXNzIHRv IGV4dGVybmFsIGNvbW1hbmRzIGlzIGRpc2FibGVkXG4iKTsKKyAgICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgICB9CisjZW5kaWYgLyogTkVUUFRZICovCisjZW5kaWYgLyogTk9QVVNI ICovCisKKyNpZmRlZiBPUzIKKyAgICAgICAgICBpZiAoeiA9PSBORVRfVENQQiAmJiB0Y3BfYXZh aWwgPT0gMCkgeworICAgICAgICAgICAgICBwcmludGYoCisiXG4/U29ycnksIGVpdGhlciBUQ1Av SVAgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHN5c3RlbSBvclxuXAorbmVjZXNzYXJ5IERMTHMg ZGlkIG5vdCBsb2FkLiAgVXNlIFNIT1cgTkVUV09SSyB0byBjaGVjayBuZXR3b3JrIHN0YXR1cy5c biIpOworICAgICAgICAgICAgICByZXR1cm4oLTkpOworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAg ICAgICB9IGVsc2UgaWYgKHogPT0gTkVUX1NTSCAmJiAhY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgp KSB7CisgICAgICAgICAgICBwcmludGYoIlxuP1NvcnJ5LCBTU0ggaXMgbm90IGF2YWlsYWJsZSBv biB0aGlzIHN5c3RlbS5cbiIpIDsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisjZW5kaWYgLyog U1NIQlVJTFRJTiAqLworI2lmZGVmIENLX05FVEJJT1MKKyAgICAgICAgICB9IGVsc2UgaWYgKHog PT0gTkVUX0JJT1MgJiYgbmV0Ymlvc0F2YWlsID09IDApIHsKKyAgICAgICAgICAgICAgcHJpbnRm KCJcbj9Tb3JyeSwgTkVUQklPUyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtLlxuIikg OworICAgICAgICAgICAgICByZXR1cm4oLTkpOworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNp ZmRlZiBERUNORVQKKyAgICAgICAgICB9IGVsc2UgaWYgKHogPT0gTkVUX0RFQyAmJiBkbmV0X2F2 YWlsID09IDApIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJcbj9Tb3JyeSwgREVDbmV0IGlzIG5v dCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0uXG4iKSA7CisgICAgICAgICAgICAgIHJldHVybigt OSk7CisjZW5kaWYgLyogREVDTkVUICovCisjaWZkZWYgU1VQRVJMQVQKKyAgICAgICAgICB9IGVs c2UgaWYgKHogPT0gTkVUX1NMQVQgJiYgc2xhdF9hdmFpbCA9PSAwKSB7CisgICAgICAgICAgICAg IHByaW50ZigiXG4/U29ycnksIFN1cGVyTEFUIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0 ZW0uXG4iKSA7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisjZW5kaWYgLyogU1VQRVJMQVQg Ki8KKyAgICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBOUElQRU9SQklPUwor ICAgICAgICAgIGlmICh6ID09IE5FVF9QSVBFIHx8ICAgICAgICAgIC8qIE5hbWVkIHBpcGUgLS0g YWxzbyBnZXQgcGlwZW5hbWUgKi8KKyAgICAgICAgICAgICAgeiA9PSBORVRfQklPUykgeyAgICAg ICAgICAvKiBORVRCSU9TIC0tIGFsc28gZ2V0IGxvY2FsIG5hbWUgKi8KKyAgICAgICAgICAgICAg Y2hhciAqZGVmbmFtOworI2lmZGVmIENLX05FVEJJT1MKKyAgICAgICAgICAgICAgY2hhciB0bXBu Ym5hbVtORVRCSU9TX05BTUVfTEVOKzFdOworI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyAgICAg ICAgICAgICAgLyogQ29uc3RydWN0IGRlZmF1bHQgbmFtZSAgKi8KKyAgICAgICAgICAgICAgaWYg KHogPT0gTkVUX1BJUEUpIHsgICAgICAvKiBOYW1lZCBwaXBlICovCisgICAgICAgICAgICAgICAg ICBkZWZuYW0gPSAia2VybWl0IjsgICAgLyogRGVmYXVsdCBuYW1lIGlzIGFsd2F5cyAia2VybWl0 IiAqLworICAgICAgICAgICAgICB9IAorI2lmZGVmIENLX05FVEJJT1MKKwkgICAgICBlbHNlIHsJ CQkvKiBOZXRCSU9TICovCisgICAgICAgICAgICAgICAgICBpZiAoTmV0Qmlvc05hbWVbMF0gIT0g U1ApIHsgLyogSWYgdGhlcmUgaXMgYWxyZWFkeSBhIG5hbWUsICovCisgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgaW50IG47ICAgICAg ICAgICAgLyogdXNlIGl0IGFzIHRoZSBkZWZhdWx0LiAqLworICAgICAgICAgICAgICAgICAgICAg IGNrc3RybmNweSh0bXBuYm5hbSxOZXRCaW9zTmFtZSxORVRCSU9TX05BTUVfTEVOKzEpOworICAg ICAgICAgICAgICAgICAgICAgIC8qIGNvbnZlcnQgdHJhaWxpbmcgc3BhY2VzIHRvIE5VTHMgKi8K KyAgICAgICAgICAgICAgICAgICAgICBwID0gJnRtcG5ibmFtW05FVEJJT1NfTkFNRV9MRU4tMV07 CisgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwID09IFNQKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICpwID0gTlVMOworICAgICAgICAgICAgICAgICAgICAgICAgICBwLS07Cisg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGRlZm5hbSA9IHRt cG5ibmFtOworICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgqbXlob3N0KSAgIC8qIE90aGVy d2lzZSB1c2UgdGhpcyBQQydzIGhvc3QgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICBkZWZu YW0gPSAoY2hhciAqKSBteWhvc3Q7CisgICAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAg ICAgICAgLyogT3RoZXJ3aXNlIHVzZSAia2VybWl0IiAqLworICAgICAgICAgICAgICAgICAgICBk ZWZuYW0gPSAia2VybWl0IjsKKyAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX05FVEJJT1Mg Ki8KKyAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoKHogPT0gTkVUX1BJUEUpID8gIm5hbWUg b2YgbmFtZWQtcGlwZSIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwgTkVU QklPUyBuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbmFtLCAmcywgeHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworI2lmZGVmIE5QSVBFCisg ICAgICAgICAgICAgIHBpcGVuYW1lWzBdID0gTlVMOworI2VuZGlmIC8qIE5QSVBFICovCisgICAg ICAgICAgICAgIGlmICgoeSA9IChpbnQpIHN0cmxlbihzKSkgPCAxKSB7CisgICAgICAgICAgICAg ICAgICBwcmludGYoIj9Zb3UgbXVzdCBhbHNvIHNwZWNpZnkgYSAlcyBuYW1lXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgICh6ID09IE5FVF9QSVBFKSA/ICJwaXBlIiA6ICJsb2NhbCBORVRC SU9TIiApOworICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgfQor I2lmZGVmIENLX05FVEJJT1MKKyAgICAgICAgICAgICAgaWYgKHogPT0gTkVUX0JJT1MpIHsKKyAg ICAgICAgICAgICAgICAgIGlmICghbmV0Ymlvc0F2YWlsKSB7CisgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/TkVUQklPUyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtLlxuIikg OworICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBpZiAoeSAtIE5FVEJJT1NfTkFNRV9MRU4gPiAwKSB7CisgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TkVUQklPUyBuYW1lIHRvbyBsb25nLCAlbGQgbWF4 aW11bVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUQklPU19OQU1FX0xFTik7 CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoICFzdHJjbXAocyx0bXBuYm5hbSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAg bmV0dHlwZSA9IHo7ICAgICAgLyogUmV0dXJuaW5nIHRvIG9sZCBjb25uZWN0aW9uLi4uICovCisg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsgLyogRG9uZSAqLworICAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoIiAgICAgICAgICAgICAgICAiLE5ldEJp b3NOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP05FVEJJT1MgbmFtZSBh bHJlYWR5IGFzc2lnbmVkIHRvIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTmV0Qmlvc05hbWUpOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIE5DQiBuY2I7Cisg ICAgICAgICAgICAgICAgICAgICAgQVBJUkVUIHJjOworICAgICAgICAgICAgICAgICAgICAgIGNr c3RybmNweShOZXRCaW9zTmFtZSxzLDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHgg PSB5OyB4IDwgTkVUQklPU19OQU1FX0xFTjsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAg TmV0Qmlvc05hbWVbeF0gPSBTUDsKKyAgICAgICAgICAgICAgICAgICAgICBOZXRCaW9zTmFtZVtO RVRCSU9TX05BTUVfTEVOXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNo ZWNraW5nIFwiJXNcIiBhcyBhIHVuaXF1ZSBOZXRCSU9TIG5hbWUuLi5cbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5ldEJpb3NOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICBy YyA9IE5DQkFkZE5hbWUoIE5ldGJldWlBUEksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZuY2IsIE5ldEJpb3NBZGFwdGVyLCBOZXRCaW9zTmFtZSApOworICAgICAgICAg ICAgICAgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYo CisgICAgICAgICAgICAgICAgIj9Tb3JyeSwgXCIlc1wiIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFu b3RoZXIgTmV0QklPUyBub2RlLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5ldEJpb3NOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8 IE5FVEJJT1NfTkFNRV9MRU47IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRC aW9zTmFtZVt4XSA9IFNQOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgfQorI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKyNpZmRlZiBOUElQRQorICAgICAgICAgICAg ICBpZiAoeiA9PSBORVRfUElQRSkKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkocGlwZW5hbWUs cyxQSVBFTkFNTCk7CisjZW5kaWYgLyogTlBJUEUgKi8KKyAgICAgICAgICB9IGVsc2UKKyNlbmRp ZiAvKiBOUElQRU9SQklPUyAqLworI2lmZGVmIERFQ05FVAorICAgICAgICAgICAgaWYgKHogPT0g TkVUX0RFQykgeworICAgICAgICAgICAgICAgIC8qIERldGVybWluZSBpZiB3ZSBhcmUgdXNpbmcg TEFUIG9yIENURVJNICovCisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoZG5ldHRhYiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZG5ldCwiREVDTkVUIHByb3RvY29sIiwi bGF0Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAg ICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAg ICAgICB0dG5wcm90byA9IHk7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBERUNORVQg Ki8KKyNpZmRlZiBORVRETEwKKyAgICAgICAgICAgICAgaWYgKHogPT0gTkVUX0RMTCkgeworICAg ICAgICAgICAgICAgICAgLyogRmluZCBvdXQgd2hpY2ggRExMIHRoZXkgYXJlIHVzaW5nICovCisg ICAgICAgICAgICAgICAgICBjaGFyIGRsbG5hbWVbMjU2XT0iIjsKKyAgICAgICAgICAgICAgICAg IGNoYXIgKiBwPU5VTEw7CisgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWlmaSgiRHluYW1p YyBsb2FkIGxpYnJhcnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnAs JnkseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykg eworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIERMTCByZXF1aXJl ZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNrc3RybmNweShkbGxuYW1lLHAsMjU2KTsK KyAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCisg ICAgICAgICAgICAgICAgICBpZiAobmV0ZGxsX2xvYWQoZGxsbmFtZSkgPCAwKSAvKiBUcnkgdG8g bG9hZCB0aGUgZGxsICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBuZXR0eXBl ID0gejsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBORVRETEwgKi8K KyAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAg ICAgICBuZXR0eXBlID0gejsKKyAgICAgICAgICBpZiAoCisjaWZkZWYgREVDTkVUCisgICAgICAg ICAgICAgIChuZXR0eXBlICE9IE5FVF9ERUMpICAmJgorI2VuZGlmIC8qIERFQ05FVCAqLworI2lm ZGVmIE5QSVBFCisgICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9QSVBFKSAmJgorI2VuZGlm IC8qIE5QSVBFICovCisjaWZkZWYgQ0tfTkVUQklPUworICAgICAgICAgICAgICAobmV0dHlwZSAh PSBORVRfQklPUykgJiYKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisjaWZkZWYgTkVURklMRQor ICAgICAgICAgICAgICAobmV0dHlwZSAhPSBORVRfRklMRSkgJiYKKyNlbmRpZiAvKiBORVRGSUxF ICovCisjaWZkZWYgTkVUQ01ECisgICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9DTUQpICYm CisjZW5kaWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgICAgICAgICAgIChuZXR0 eXBlICE9IE5FVF9QVFkpICYmCisjZW5kaWYgLyogTkVUUFRZICovCisjaWZkZWYgTkVURExMCisg ICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9ETEwpICYmCisjZW5kaWYgLyogTkVURExMICov CisjaWZkZWYgU1VQRVJMQVQKKyAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX1NMQVQpICYm CisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKyAgICAgICAgICAgICAgKG5ldHR5cGUgIT0gTkVUX1NY MjUpICYmCisgICAgICAgICAgICAgIChuZXR0eXBlICE9IE5FVF9WWDI1KSAmJgorI2lmZGVmIElC TVgyNQorICAgICAgICAgICAgICAobmV0dHlwZSAhPSBORVRfSVgyNSkgJiYKKyNlbmRpZiAvKiBJ Qk1YMjUgKi8KKyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICAgIChuZXR0eXBlICE9IE5F VF9TU0gpICYmCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworICAgICAgICAgICAgICAobmV0dHlw ZSAhPSBORVRfVENQQikpIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCI/TmV0d29yayB0eXBlIG5v dCBzdXBwb3J0ZWRcbiIpOworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICAgICAgfQorICAgICAgfQorCisjaWZuZGVmIE5PVENQT1BUUworI2lmZGVmIFRDUFNPQ0tFVAor ICAgICAgY2FzZSBYWVRDUDogeworICAgICAgICBleHRlcm4gaW50IHR0eWZkOworCisgICAgICAg IGlmICgoeiA9IGNta2V5KHRjcG9wdCxudGNwb3B0LCJUQ1Agb3B0aW9uIiwibm9kZWxheSIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHopOworCisgICAgICAgIHN3aXRjaCAoeikg eworI2lmbmRlZiBOT0hUVFAKKyAgICAgICAgICBjYXNlIFhZVENQX0hUVFBfUFJPWFk6IHsKKwkg ICAgICBzdHJ1Y3QgRkRCIHN3LCB0eDsKKwkgICAgICBpbnQgbiwgeDsKKwkgICAgICBjaGFyIHVi dWZbTE9HSU5MRU4rMV0sIHBidWZbTE9HSU5MRU4rMV0sIGFidWZbMjU2XTsKKwkgICAgICB1YnVm WzBdID0gcGJ1ZlswXSA9IGFidWZbMF0gPSAwOworCisJICAgICAgY21mZGJpKCZzdywJCS8qIEZp cnN0IEZEQiAtIHN3aXRjaGVzICovCisJCSAgICAgX0NNS0VZLAkJLyogZmNvZGUgKi8KKwkJICAg ICAiSFRUUCBwcm94eSBzZXJ2ZXIgaG9zdFs6cG9ydF0gb3Igc3dpdGNoIiwKKwkJICAgICAiIiwJ CS8qIGRlZmF1bHQgKi8KKwkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJCSAg ICAgbnVzZXJwYXNzLAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisJCSAg ICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisJCSAgICAgeHhz dHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisJCSAgICAgdXNlcnBhc3MsCQkvKiBL ZXl3b3JkIHRhYmxlICovCisJCSAgICAgJnR4CQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisJ CSAgICAgKTsKKwkgICAgICBjbWZkYmkoJnR4LAorCQkgICAgIF9DTVRYVCwJCS8qIGZjb2RlICov CisJCSAgICAgIkhUVFAgcHJveHkgc2VydmVyIGhvc3RbOnBvcnRdIiwKKwkJICAgICAiIiwJCS8q IGRlZmF1bHQgKi8KKwkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJCSAgICAg MCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCQkgICAgIDAsCQkJLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDIgKi8KKwkJICAgICB4eHN0cmluZywKKwkJICAgICBOVUxMLAorCQkgICAgIE5V TEwKKwkJICAgICApOworCSAgICAgIHdoaWxlICgxKSB7CisJCSAgaWYgKCh4ID0gY21mZGIoJnN3 KSkgPCAwKSB7CisJCSAgICAgIGlmICh4ID09IC0zKSB7CisJCQkgIHggPSAtOTsKKwkJCSAgcHJp bnRmKCI/SG9zdG5hbWUgcmVxdWlyZWRcbiIpOworCQkgICAgICB9CisJCSAgICAgIHJldHVybih4 KTsKKwkJICB9CisJCSAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkKKwkJICAgIGJyZWFr OworCQkgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OworCQkgIHN3aXRjaCAobikgeworCQkgICAgY2Fz ZSBVUFdfVVNFUjoKKwkJICAgIGNhc2UgVVBXX1BBU1M6CisJCSAgICBjYXNlIFVQV19BR0VOVDoK KwkJICAgICAgaWYgKCh4ID0gY21mbGQoKG4gPT0gVVBXX1VTRVIpID8KKwkJCQkgICAgICJVc2Vy bmFtZSIgOgorCQkJCSAgICAgKChuID09IFVQV19QQVNTKSA/ICJQYXNzd29yZCIgOiAiQWdlbnQi KSwKKwkJCQkgICAgICIiLCAmcywgeHhzdHJpbmcpKSA8IDApIHsKKwkJCSAgaWYgKHggIT0gLTMp CisJCQkgICAgcmV0dXJuKHgpOworCQkgICAgICB9CisJCSAgICAgIGNrc3RybmNweSgobiA9PSBV UFdfVVNFUikgPyB1YnVmIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICgobiA9PSBVUFdfUEFT UykgPyBwYnVmIDogYWJ1ZiksIHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgKG4gPT0gVVBX X0FHRU5UKSA/IDI1NiA6IChMT0dJTkxFTisxKSk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBp ZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNVFhUKQorCQlyZXR1cm4oLTIpOworCSAgICAgIHMgPSBj bXJlc3VsdC5zcmVzdWx0OworCSAgICAgIGlmIChzKSBpZiAoISpzKSBzID0gTlVMTDsKKworI2lm ZGVmIElLU0RDT05GCisJICAgICAgaWYgKGlrc2RjZikKKwkJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyNlbmRpZiAvKiBJS1NEQ09ORiAqLworCSAgICAgIG1ha2VzdHIoJnRjcF9odHRwX3Byb3h5X3Vz ZXIsdWJ1ZlswXT91YnVmOk5VTEwpOworCSAgICAgIG1ha2VzdHIoJnRjcF9odHRwX3Byb3h5X3B3 ZCxwYnVmWzBdP3BidWY6TlVMTCk7CisJICAgICAgbWFrZXN0cigmdGNwX2h0dHBfcHJveHlfYWdl bnQsYWJ1ZlswXT9hYnVmOk5VTEwpOworCSAgICAgIG1ha2VzdHIoJnRjcF9odHRwX3Byb3h5LHMp OworCSAgICAgIG1lbXNldChwYnVmLDAsc2l6ZW9mKHBidWYpKTsKKwkgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworCSAgfQorI2VuZGlmIC8qIE5PSFRUUCAqLworLyoKKyAgSXQgd291bGQgaGF2 ZSBiZWVuIGVhc3kgdG8gY29tYmluZSBYWVRDUF9TT0NLU19TVlIgd2l0aCB0aGUgcHJldmlvdXMK KyAgb25lIGV4Y2VwdCBmb3IgdGhlICNpZmRlZnMuLi4KKyovCisjaWZkZWYgTlQKKyNpZmRlZiBD S19TT0NLUworICAgICAgICAgIGNhc2UgWFlUQ1BfU09DS1NfU1ZSOiB7CisJICAgICAgY2hhciB1 YnVmW0xPR0lOTEVOKzFdLCBwYnVmW0xPR0lOTEVOKzFdOworCSAgICAgIGNoYXIgKiBwID0gZ2V0 ZW52KCJTT0NLU19TRVJWRVIiKTsKKwkgICAgICBzdHJ1Y3QgRkRCIHN3LCB0eDsKKwkgICAgICBp bnQgbiwgeDsKKworCSAgICAgIGlmICghcCkgcCA9ICIiOworCisJICAgICAgY21mZGJpKCZzdywJ CS8qIEZpcnN0IEZEQiAtIHN3aXRjaGVzICovCisJCSAgICAgX0NNS0VZLAkJLyogZmNvZGUgKi8K KwkJICAgICAiU09DS1Mgc2VydmVyIGhvc3RbOnBvcnRdIG9yIHN3aXRjaCIsCisJCSAgICAgIiIs CQkvKiBkZWZhdWx0ICovCisJCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCQkg ICAgIG51c2VycGFzcywJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworCQkg ICAgIDQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworCQkgICAgIHh4 c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworCQkgICAgIHVzZXJwYXNzLAkJLyog S2V5d29yZCB0YWJsZSAqLworCQkgICAgICZ0eAkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwor CQkgICAgICk7CisJICAgICAgY21mZGJpKCZ0eCwKKwkJICAgICBfQ01UWFQsCQkvKiBmY29kZSAq LworCQkgICAgICJTT0NLUyBzZXJ2ZXIgaG9zdFs6cG9ydF0iLAorCQkgICAgIHAsCQkJLyogZGVm YXVsdCAqLworCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJICAgICAwLAkJ CS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJCSAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmlj IGRhdGEgMiAqLworCQkgICAgIHh4c3RyaW5nLAorCQkgICAgIE5VTEwsCisJCSAgICAgTlVMTAor CQkgICAgICk7CisJICAgICAgd2hpbGUgKDEpIHsKKwkJICBpZiAoKHggPSBjbWZkYigmc3cpKSA8 IDApIHsKKwkJICAgICAgaWYgKHggPT0gLTMpIHsKKwkJCSAgeCA9IC05OworCQkJICBwcmludGYo Ij9Ib3N0bmFtZSByZXF1aXJlZFxuIik7CisJCSAgICAgIH0KKwkJICAgICAgcmV0dXJuKHgpOwor CQkgIH0KKwkJICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQorCQkgICAgYnJlYWs7CisJ CSAgbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisJCSAgc3dpdGNoIChuKSB7CisJCSAgICBjYXNlIFVQ V19VU0VSOgorCQkgICAgY2FzZSBVUFdfUEFTUzoKKwkJICAgICAgaWYgKCh4ID0gY21mbGQoKG4g PT0gVVBXX1VTRVIpID8gIlVzZXJuYW1lIiA6ICJQYXNzd29yZCIsCisJCQkJICAgICAiIiwgJnMs IHh4c3RyaW5nKSkgPCAwKSB7CisJCQkgIGlmICh4ICE9IC0zKQorCQkJICAgIHJldHVybih4KTsK KwkJICAgICAgfQorCQkgICAgICBja3N0cm5jcHkoKG4gPT0gVVBXX1VTRVIpID8gdWJ1ZiA6IHBi dWYsIHMsIExPR0lOTEVOKzEpOworCQkgIH0KKwkgICAgICB9CisJICAgICAgaWYgKGNtcmVzdWx0 LmZjb2RlICE9IF9DTVRYVCkKKwkJcmV0dXJuKC0yKTsKKwkgICAgICBzID0gY21yZXN1bHQuc3Jl c3VsdDsKKwkgICAgICBpZiAocykgaWYgKCEqcykgcyA9IE5VTEw7CisKKyNpZmRlZiBJS1NEQ09O RgorCSAgICAgIGlmIChpa3NkY2YpCisJCXJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyog SUtTRENPTkYgKi8KKwkgICAgICBtYWtlc3RyKCZ0Y3Bfc29ja3NfdXNlcix1YnVmKTsKKyAgICAg ICAgICAgICAgbWVtc2V0KHBidWYsMCxzaXplb2YocGJ1ZikpOworCSAgICAgIG1ha2VzdHIoJnRj cF9zb2Nrc19zdnIscyk7CisJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwkgIH0KKworI2lm ZGVmIENLX1NPQ0tTX05TCisgICAgICAgICAgY2FzZSBYWVRDUF9TT0NLU19OUzogeworICAgICAg ICAgICAgY2hhciAqIHAgPSBnZXRlbnYoIlNPQ0tTX05TIik7CisgICAgICAgICAgICBpZiAoIXAp IHAgPSAiIjsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJob3N0bmFtZSBvciBJUCBvZiBT T0NLUyBOYW1lIFNlcnZlciIscCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcyx4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisjaWZkZWYgSUtTRENPTkYK KyAgICAgICAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAv KiBJS1NEQ09ORiAqLworICAgICAgICAgICAgICBpZiAodGNwX3NvY2tzX25zKSB7CisgICAgICAg ICAgICAgICAgICBmcmVlKHRjcF9zb2Nrc19ucyk7ICAgLyogRnJlZSBhbnkgcHJldmlvdXMgc3Rv cmFnZSAqLworICAgICAgICAgICAgICAgICAgdGNwX3NvY2tzX25zID0gTlVMTDsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICBpZiAocyA9PSBOVUxMIHx8ICpzID09IE5VTCkgeyAvKiBJ ZiBub25lIGdpdmVuICovCisgICAgICAgICAgICAgICAgICB0Y3Bfc29ja3NfbnMgPSBOVUxMOyAg LyogcmVtb3ZlIHRoZSBvdmVycmlkZSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRjcF9zb2Nrc19ucyA9 IG1hbGxvYyhzdHJsZW4ocykrMSkpKSB7CisgICAgICAgICAgICAgICAgICBzdHJjcHkodGNwX3Nv Y2tzX25zLHMpOworICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAg ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAg ICAgICAgICB9CisjZW5kaWYgLyogQ0tfU09DS1NfTlMgKi8KKyNlbmRpZiAvKiBDS19TT0NLUyAq LworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgY2FzZSBYWVRDUF9BRERSRVNTOgorICAgICAg ICAgICAgaWYgKCh5ID0gY210eHQoInByZWZlcnJlZCBJUCBBZGRyZXNzIGZvciBUQ1AgY29ubmVj dGlvbnMiLCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgIHJldHVybih5KTsKKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAgICAg aWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLwor ICAgICAgICAgICAgaWYgKHRjcF9hZGRyZXNzKSB7CisgICAgICAgICAgICAgICAgZnJlZSh0Y3Bf YWRkcmVzcyk7ICAgICAgLyogRnJlZSBhbnkgcHJldmlvdXMgc3RvcmFnZSAqLworICAgICAgICAg ICAgICAgIHRjcF9hZGRyZXNzID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChzID09IE5VTEwgfHwgKnMgPT0gTlVMKSB7IC8qIElmIG5vbmUgZ2l2ZW4gKi8KKyAgICAgICAg ICAgICAgICB0Y3BfYWRkcmVzcyA9IE5VTEw7ICAgICAvKiByZW1vdmUgdGhlIG92ZXJyaWRlIHN0 cmluZyAqLworICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAg ICB9IGVsc2UgaWYgKCh0Y3BfYWRkcmVzcyA9IG1hbGxvYyhzdHJsZW4ocykrMSkpKSB7CisgICAg ICAgICAgICAgICAgc3RyY3B5KHRjcF9hZGRyZXNzLHMpOworICAgICAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKKyNpZmRlZiBTT19LRUVQQUxJVkUKKyAgICAgICAgICBjYXNlIFhZVENQ X0tFRVBBTElWRToKKyAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4 eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOworICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7CisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAgICAgIGlmIChpa3NkY2Yp IHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyNpZmRlZiBTU0hC VUlMVElOCisgICAgICAgICAgICBpZiAobmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TU0ggJiYg c3NoX3NvY2sgIT0gLTEpCisgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBrZWVwYWxpdmUoc3NoX3Nv Y2sseik7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCSAgICAg IHN1Y2Nlc3MgPSBrZWVwYWxpdmUodHR5ZmQseik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyk7CisjZW5kaWYgLyogU09fS0VFUEFMSVZFICovCisjaWZkZWYgU09fRE9OVFJPVVRFCisgICAg ICAgICAgY2FzZSBYWVRDUF9ET05UUk9VVEU6CisgICAgICAgICAgICBpZiAoKHogPSBjbWtleShv bm9mZiwyLCIiLCJvZmYiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBJS1NEQ09ORgorICAgICAg ICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBJS1NEQ09O RiAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIG5ldHR5 cGUgPT0gTkVUX1NTSCAmJiBzc2hfc29jayAhPSAtMSkKKyAgICAgICAgICAgICAgc3VjY2VzcyA9 IGRvbnRyb3V0ZShzc2hfc29jayx6KTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBTU0hC VUlMVElOICovCisJICAgICAgc3VjY2VzcyA9IGRvbnRyb3V0ZSh0dHlmZCx6KTsKKyAgICAgICAg ICAgIHJldHVybihzdWNjZXNzKTsKKyNlbmRpZiAvKiBTT19ET05UUk9VVEUgKi8KKyNpZmRlZiBU Q1BfTk9ERUxBWQorICAgICAgICAgIGNhc2UgWFlUQ1BfTk9ERUxBWToKKyAgICAgICAgICAgIGlm ICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9mZiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsK KyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVmIElL U0RDT05GCisgICAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworI2Vu ZGlmIC8qIElLU0RDT05GICovCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgaWYgKG5l dHdvcmsgJiYgbmV0dHlwZSA9PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQorICAgICAgICAg ICAgICBzdWNjZXNzID0gbm9fZGVsYXkoc3NoX3NvY2sseik7CisgICAgICAgICAgICBlbHNlCisj ZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCSAgICAgIHN1Y2Nlc3MgPSBub19kZWxheSh0dHlmZCx6 KTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzKTsKKyAgICAgICAgICBjYXNlIFhZVENQX05B R0xFOiAgICAgICAgICAgICAvKiBUaGUgaW52ZXJzZSBvZiBOT0RFTEFZICovCisgICAgICAgICAg ICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6 KTsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVm IElLU0RDT05GCisgICAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOwor I2VuZGlmIC8qIElLU0RDT05GICovCisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgaWYg KG5ldHdvcmsgJiYgbmV0dHlwZSA9PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQorICAgICAg ICAgICAgICBzdWNjZXNzID0gbm9fZGVsYXkoc3NoX3NvY2sseik7CisgICAgICAgICAgICBlbHNl CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCSAgICAgIHN1Y2Nlc3MgPSBub19kZWxheSh0dHlm ZCwheik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2Vzcyk7CisjZW5kaWYgLyogVENQX05PREVM QVkgKi8KKyNpZmRlZiBTT19MSU5HRVIKKyAgICAgICAgICBjYXNlIFhZVENQX0xJTkdFUjoKKyAg ICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgaWYgKHopIHsgICAgICAgICAg ICAgICAgICAgIC8qIGlmIG9uLCB3ZSBuZWVkIGEgdGltZW91dCB2YWx1ZSAqLworICAgICAgICAg ICAgICAgIGlmICgoeCA9IGNtbnVtKCJMaW5nZXIgdGltZW91dCBpbiAxMHRoIG9mIGEgbWlsbGlz ZWNvbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwxMCwmeSx4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIH0gZWxz ZQorICAgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworI2lmZGVmIElLU0RDT05GCisgICAgICAgICAg ICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIElLU0RDT05GICov CisjaWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgbmV0dHlwZSA9 PSBORVRfU1NIICYmIHNzaF9zb2NrICE9IC0xKQorICAgICAgICAgICAgICBzdWNjZXNzID0gY2tf bGluZ2VyKHNzaF9zb2NrLHoseSk7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogU1NIQlVJ TFRJTiAqLworCSAgICAgIHN1Y2Nlc3MgPSBja19saW5nZXIodHR5ZmQseix5KTsKKyAgICAgICAg ICAgIHJldHVybihzdWNjZXNzKTsKKyNlbmRpZiAvKiBTT19MSU5HRVIgKi8KKyNpZmRlZiBTT19T TkRCVUYKKyAgICAgICAgICBjYXNlIFhZVENQX1NFTkRCVUY6CisgICAgICAgICAgICB4ID0gY21u dW0oIlNlbmQgYnVmZmVyIHNpemUsIGJ5dGVzIiwiODE5MiIsMTAsJnoseHhzdHJpbmcpOworICAg ICAgICAgICAgaWYgKHggPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAgICAgaWYgKGlr c2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworI2lmZGVm IFNTSEJVSUxUSU4KKyAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIG5ldHR5cGUgPT0gTkVUX1NT SCAmJiBzc2hfc29jayAhPSAtMSkKKyAgICAgICAgICAgICAgc3VjY2VzcyA9IHNlbmRidWYoc3No X3NvY2sseik7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCSAg ICAgIHN1Y2Nlc3MgPSBzZW5kYnVmKHR0eWZkLHopOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MpOworI2VuZGlmIC8qIFNPX1NOREJVRiAqLworI2lmZGVmIFNPX1JDVkJVRgorICAgICAgICAg IGNhc2UgWFlUQ1BfUkVDVkJVRjoKKyAgICAgICAgICAgIHggPSBjbW51bSgiUmVjZWl2ZSBidWZm ZXIgc2l6ZSwgYnl0ZXMiLCI4MTkyIiwxMCwmeix4eHN0cmluZyk7CisgICAgICAgICAgICBpZiAo eCA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOworI2lmZGVmIElLU0RDT05GCisgICAgICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4o c3VjY2VzcyA9IDApOworI2VuZGlmIC8qIElLU0RDT05GICovCisKKy8qIE5vdGU6IFRoZSBmb2xs b3dpbmcgaXMgbm90IDE2LWJpdCBzYWZlICovCisKKyNpZm5kZWYgUU5YMTYKKyAgICAgICAgICAg IGlmICh4ID4gNTIyNDgpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9XYXJuaW5nOiByZWNl aXZlIGJ1ZmZlcnMgbGFyZ2VyIHRoYW4gNTIyNDggYnl0ZXNcbiIpOworICAgICAgICAgICAgICAg IHByaW50ZigiIG1heSBub3QgYmUgdW5kZXJzdG9vZCBieSBhbGwgaG9zdHMuICBQZXJmb3JtYW5j ZVxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgbWF5IHN1ZmZlci5cbiIpOworICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogUU5YMTYgKi8K KyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICBpZiAobmV0d29yayAmJiBuZXR0eXBlID09 IE5FVF9TU0ggJiYgc3NoX3NvY2sgIT0gLTEpCisgICAgICAgICAgICAgIHN1Y2Nlc3MgPSByZWN2 YnVmKHNzaF9zb2NrLHopOworICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIFNTSEJVSUxUSU4g Ki8KKwkgICAgICBzdWNjZXNzID0gcmVjdmJ1Zih0dHlmZCx6KTsKKyAgICAgICAgICAgIHJldHVy bihzdWNjZXNzKTsKKyNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KKworI2lmZGVmIFZNUworI2lmZGVm IERFQ19UQ1BJUAorICAgICAgICAgIGNhc2UgWFlUQ1BfVUNYOiB7ICAgICAgICAgICAgIC8qIFVD WCAyLjAgcG9ydCBzd2FiYmluZyBidWcgKi8KKyAgICAgICAgICAgICAgZXh0ZXJuIGludCB1Y3hf cG9ydF9idWc7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnVjeF9wb3J0 X2J1ZykpOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKworICAgICAgICAgIGNhc2UgWFlUQ1BfUkROUzogeworICAgICAgICAgICAgICBleHRl cm4gaW50IHRjcF9yZG5zOworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uYXV0 KCZ0Y3BfcmRucykpOworICAgICAgICAgIH0KKworI2lmZGVmIENLX0ROU19TUlYKKyAgICAgICAg ICBjYXNlIFhZVENQX0ROU19TUlY6IHsKKyAgICAgICAgICAgICAgZXh0ZXJuIGludCB0Y3BfZG5z X3NydjsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdGNwX2Ruc19zcnYp KTsKKyAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfRE5TX1NSViAqLworCisgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworI2VuZGlmIC8qIE5FVENP Tk4gKi8KKyAgICB9CisKKyAgICBzd2l0Y2ggKHh4KSB7CisKKyNpZm5kZWYgTk9MT0NBTAorI2lm ZGVmIE5FVENPTk4KKyAgICAgIGNhc2UgWFlIT1NUOiB7ICAgICAgICAgICAgICAgICAgICAvKiBT RVQgSE9TVCAqLworICAgICAgICAgIHogPSB0dG5wcm90bzsgICAgICAgICAgICAgICAgIC8qIFNh dmUgcHJvdG9jb2wgaW4gY2FzZSBvZiBmYWlsdXJlICovCisjaWZkZWYgREVDTkVUCisgICAgICAg ICAgaWYgKG5ldHR5cGUgIT0gTkVUX0RFQykKKyNlbmRpZiAvKiBERUNORVQgKi8KKyAgICAgICAg ICAgIHR0bnByb3RvID0gTlBfTk9ORTsKKyAgICAgICAgICBpZiAoKHkgPSBzZXRsaW4oWFlIT1NU LDEsMCkpIDw9IDApIHsgLyogU2V0cyBzdWNjZXNzIHRvIDEgKi8KKyAgICAgICAgICAgICAgZGVi dWcoRjEwMSwiU0VUIEhPU1QgZmFpbCBtZG10eXAiLCIiLG1kbXR5cCk7CisgICAgICAgICAgICAg IHR0bnByb3RvID0gejsgICAgICAgICAgICAgLyogRmFpbGVkLCByZXN0b3JlIHByb3RvY29sICov CisgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBkaWRz ZXRsaW4rKzsKKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgSE9TVCBPSyBtZG10eXAiLCIiLG1k bXR5cCk7CisgICAgICAgICAgZGVidWcoRjEwMSwiU0VUIEhPU1QgcmVsaWFibGUiLCIiLHJlbGlh YmxlKTsKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAq LworCisgICAgICBjYXNlIFhZTElORTogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIExJTkUg KD0gU0VUIFBPUlQpICovCisgICAgICAgIGRlYnVnKEYxMDEsInNldGxpbiBmbG93IDEiLCIiLGZs b3cpOworICAgICAgICB4ID0gc2V0bGluKHh4LDEsMCk7CisgICAgICAgIGlmICh4ID4gLTEpIGRp ZHNldGxpbisrOworICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgTElORSBzZXRsaW4iLCIiLHgpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJTRVQgTElORSBmbG93IiwiIixmbG93KTsKKyAgICAgICAgZGVi dWcoRjEwMSwiU0VUIExJTkUgbG9jYWwiLCIiLGxvY2FsKTsKKyAgICAgICAgZGVidWcoRjEwMSwi U0VUIExJTkUgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKKyAgICAgICAgcmV0dXJuKHgpOworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1NFVEtFWQorICAgICAgY2FzZSBYWUtFWTog ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBLRVkgKi8KKyAgICAgICAgcmV0dXJuKGRvc2V0 a2V5KCkpOworI2VuZGlmIC8qIE5PU0VUS0VZICovCisKKyNpZm5kZWYgTk9DU0VUUworICAgICAg Y2FzZSBYWUxBTkc6ICAgICAgICAgICAgICAgICAgICAgIC8qIExhbmd1YWdlICovCisgICAgICAg IGlmICgoeSA9IGNta2V5KGxuZ3RhYixubG5nLCIiLCJub25lIix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOworCisgICAgICAgIC8qIExvb2sgdXAgbGFuZ3VhZ2UgYW5kIGdldCBhc3NvY2lhdGVkIGNo YXJhY3RlciBzZXRzICovCisgICAgICAgIGZvciAoaSA9IDA7IChpIDwgbmxhbmdzKSAmJiAobGFu Z3NbaV0uaWQgIT0geSk7IGkrKykgOworICAgICAgICBpZiAoaSA+PSBubGFuZ3MpIHsKKyAgICAg ICAgICAgIHByaW50ZigiP2ludGVybmFsIGVycm9yLCBzb3JyeVxuIik7CisgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9IC8qICAqLworICAgICAgICBsYW5ndWFnZSA9 IGk7ICAgICAgICAgICAgICAgICAgIC8qIEFsbCBnb29kLCBzZXQgdGhlIGxhbmd1YWdlLCAqLwor ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lm bmRlZiBNQUMKKyAgICAgIGNhc2UgWFlCQUNLOiAgICAgICAgICAgICAgICAgICAgICAvKiBCQUNL R1JPVU5EICovCisgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIiIseHhzdHJpbmcp KSA8IDApIHJldHVybih6KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eSk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBiZ3NldCA9IHo7ICAgICAgICAgICAgICAgICAg ICAgIC8qIDAgPSBvZmYgKGZvcmVncm91bmQpICovCisjaWZkZWYgVk1TICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMSA9IG9uIChiYWNrZ3JvdW5kKSAqLworICAgICAgICBpZiAoYmF0 Y2ggJiYgYmdzZXQgPT0gMCkgICAgICAgIC8qIFRvIGVuYWJsZSBlY2hvaW5nIG9mIGNvbW1hbmRz ICovCisgICAgICAgICAgY2t4ZWNoID0gMTsgICAgICAgICAgICAgICAgICAgLyogaW4gVk1TIGJh dGNoIGxvZ3MgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbHNlICAvKiBDT01NRU5UICovCisgICAg ICAgIGlmICh6KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSA9IEJhY2tncm91bmQgKi8K KyAgICAgICAgICAgIGJnc2V0ID0gMTsKKyAgICAgICAgICAgIGJhY2tncmQgPSAxOworI2lmZGVm IFZNUworICAgICAgICAgICAgYmF0Y2ggPSAxOworI2VuZGlmIC8qIFZNUyAqLworICAgICAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPSBGb3JlZ3JvdW5kICovCisgICAg ICAgICAgICBiZ3NldCA9IDA7CisgICAgICAgICAgICBiYWNrZ3JkID0gMDsKKyNpZmRlZiBWTVMK KyAgICAgICAgICAgIGJhdGNoID0gMDsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgfQorI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgc3VjY2VzcyA9IDE7CisgICAgICAgIGJnY2hrKCk7 CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKyNlbmRpZiAvKiBNQUMgKi8KKworICAgICAgY2Fz ZSBYWVFVSUU6IHsgICAgICAgICAgICAgICAgICAgIC8qIFFVSUVUICovCisjaWZkZWYgRENNREJV RgorICAgICAgICAgIGV4dGVybiBpbnQgKiB4cXVpZXQ7CisjZWxzZQorICAgICAgICAgIGV4dGVy biBpbnQgeHF1aWV0W107CisjZW5kaWYgLyogRENNREJVRiAqLworICAgICAgICAgIHggPSBzZXRv bigmcXVpZXQpOworICAgICAgICAgIGlmICh4IDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgIHhx dWlldFtjbWRsdmxdID0gcXVpZXQ7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB4KTsKKyAg ICAgIH0KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgWFlCVUY6IHsgICAgICAgICAgICAg ICAgICAgICAvKiBCVUZGRVJTICovCisjaWZkZWYgRFlOQU1JQworICAgICAgICAgIGludCBzYiwg cmI7CisgICAgICAgICAgaWYgKCh5ID0gY21udW0oIlNlbmQgYnVmZmVyIHNpemUiLCIiLDEwLCZz Yix4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICBpZiAoeSA9PSAtMykgcHJpbnRmKCI/ QnVmZmVyIHNpemUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAg ICAgICAgfQorICAgICAgICAgIGlmIChzYiA8IDApIHsKKyAgICAgICAgICAgICAgaWYgKCphdG1i dWYgPT0gJy0nKQorICAgICAgICAgICAgICAgIHByaW50ZigiP05lZ2F0aXZlIG51bWJlcnMgY2Fu J3QgYmUgdXNlZCBoZXJlXG4iKTsKKyAgICAgICAgICAgICAgZWxzZSBwcmludGYoIj9JbnRlZ2Vy IG92ZXJmbG93LCB1c2UgYSBzbWFsbGVyIG51bWJlciBwbGVhc2VcbiIpOworICAgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICAgIH0gZWxzZSBpZiAoc2IgPCA4MCkgeworICAgICAgICAg ICAgICBwcmludGYoIj9Ub28gc21hbGxcbiIpOworICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKHk9Y21udW0oIlJlY2VpdmUgYnVmZmVyIHNpemUi LGNraXRvYShzYiksMTAsJnJiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkp OworICAgICAgICAgIGlmIChyYiA8IDApIHsKKyAgICAgICAgICAgICAgaWYgKCphdG1idWYgPT0g Jy0nKQorICAgICAgICAgICAgICAgIHByaW50ZigiP05lZ2F0aXZlIG51bWJlcnMgY2FuJ3QgYmUg dXNlZCBoZXJlXG4iKTsKKyAgICAgICAgICAgICAgZWxzZSBwcmludGYoIj9JbnRlZ2VyIG92ZXJm bG93LCB1c2UgYSBzbWFsbGVyIG51bWJlciBwbGVhc2VcbiIpOworICAgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICAgIH0gZWxzZSBpZiAocmIgPCA4MCkgeworICAgICAgICAgICAgICBw cmludGYoIj9Ub28gc21hbGxcbiIpOworICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgIH0KKyAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAg ICAgICBpZiAoKHkgPSBpbmlidWZzKHNiLHJiKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAg eSA9IGFkanBrbCh1cnBzaXosd3Nsb3RyLGJpZ3Jic2l6KTsgLyogTWF5YmUgYWRqdXN0IHBhY2tl dCBzaXplcyAqLworICAgICAgICAgIGlmICh5ICE9IHVycHNpeikgdXJwc2l6ID0geTsKKyAgICAg ICAgICB5ID0gYWRqcGtsKHNwc2l6LHdzbG90cixiaWdzYnNpeik7CisgICAgICAgICAgaWYgKHkg IT0gc3BzaXopIHNwc2l6ID0gc3BtYXggPSBzcHNpenIgPSB5OworICAgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7CisjZWxzZQorICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBub3QgYXZhaWxh YmxlXG4iKTsKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIERZTkFN SUMgKi8KKyAgICAgIH0KKworICAgICAgY2FzZSBYWUNIS1Q6ICAgICAgICAgICAgICAgICAgICAg IC8qIEJMT0NLLUNIRUNLICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KGNoa3RhYixuY2hrdCwi IiwiMyIseHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7CisJaWYgKHggPT0gNSkgeworCSAgICBiY3RmID0gMTsKKyNpZmRl ZiBDT01NRU5UCisJICAgIHByaW50ZigiPzUgLSBOb3QgaW1wbGVtZW50ZWQgeWV0XG4iKTsKKwkg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZgkvKiBDT01NRU5UICovCisJfQorICAgICAg ICBiY3RyID0geDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBsb2NhbCB0b28gZXZlbiBp ZiBSRU1PVEUgU0VUICovCisKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgaWYg KHggPT0gNCkgeworICAgICAgICAgICAgICAgIHRtcGJ1ZlswXSA9ICdCJzsKKyAgICAgICAgICAg ICAgICB0bXBidWZbMV0gPSAnXDAnOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg IGNrc3RybmNweSh0bXBidWYsY2tpdG9hKHgpLFRNUEJVRlNJWik7CisgICAgICAgICAgICBzc3Rh dGUgPSBzZXRnZW4oJ1MnLCAiNDAwIiwgdG1wYnVmLCAiIik7CisgICAgICAgICAgICByZXR1cm4o KGludCkgc3N0YXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0xP Q0FMCisjaWZuZGVmIE1BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIE1hYyBo YXMgbm8gUlMtMjMyICovCitjYXNlIFhZQ0FSUjogICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ0FSUklFUi1XQVRDSCAqLworICAgICAgICByZXR1cm4oc2V0ZGNkKCkpOworI2VuZGlmIC8q IE1BQyAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB9CisKKyNpZmRlZiBUTkNPREUKKyAg ICBzd2l0Y2ggKHh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBdm9pZCBsb25nIHN3aXRj aCBzdGF0ZW1lbnRzLi4uICovCisgICAgICBjYXNlIFhZVEVMT1A6IHsKKyAgICAgICAgICBpbnQg YywgbjsgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXJzICovCisgICAgICAgICAgaW50IGdl dHZhbCA9IDA7ICAgICAgICAgICAgICAgLyogV2hldGhlciB0byBnZXQgc3dpdGNoIHZhbHVlICov CisgICAgICAgICAgaW50IHRuc2VydmVyID0gMDsgICAgICAgICAgICAgLyogQ2xpZW50IGJ5IGRl ZmF1bHQgKi8KKyAgICAgICAgICBpbnQgb3B0ID0gLTE7ICAgICAgICAgICAgICAgICAvKiBUZWxu ZXQgT3B0aW9uICovCisgICAgICAgICAgc3RydWN0IEZEQiBzdywgb3A7ICAgICAgICAgICAgLyog RkRCcyBmb3IgZWFjaCBwYXJzZSBmdW5jdGlvbiAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9O CisgICAgICAgICAgZXh0ZXJuIGludCBzbF90b3B0X2Ffc19zYXZlZDsKKyAgICAgICAgICBleHRl cm4gaW50IHNsX3RvcHRfYV9jX3NhdmVkOworICAgICAgICAgIGV4dGVybiBpbnQgc2xfdG9wdF9l X3Nfc2F2ZWQ7CisgICAgICAgICAgZXh0ZXJuIGludCBzbF90b3B0X2VfY19zYXZlZDsKKyNlbmRp ZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIElLU0QKKyAgICAgICAgICBpZiAoaW5z ZXJ2ZXIpICAgICAgICAgICAgICAgICAvKiBTZXJ2ZXIgYnkgZGVmYXVsdCB3aGVuIElLU0QgKi8K KyAgICAgICAgICAgIHRuc2VydmVyID0gMTsKKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICAgICAg ICAvKiBTZXQgdXAgY2hhaW5lZCBwYXJzZSBmdW5jdGlvbnMuLi4gKi8KKworICAgICAgICAgIGNt ZmRiaSgmb3AsICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IGZkYiAtIHRlbG9wdHMqLworICAg ICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAg ICAgICAgICAgICIvY2xpZW50LCAvc2VydmVyIG9yIiwgLyogaGxwbXNnICovCisgICAgICAgICAg ICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAg ICAgICAgICAgICAgIG50bm9wdCwgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRh IDEgKi8KKyAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBu dW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAgICAg ICAgICAgdG5vcHR0YWIsCisgICAgICAgICAgICAgICAgICZzdworICAgICAgICAgICAgICAgICAp OworICAgICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgIC8qIFNlY29uZCBGREIg LSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAg ICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgbnRub3B0c3csICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgICAg ICAgNCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNt c3dpICovCisgICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgLyogUHJvY2Vz c2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICB0bm9wdHN3LCAgICAgICAgICAgICAg IC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAg ICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICAgICAgICk7CisKKyAg ICAgICAgICB3aGlsZSAob3B0IDwgMCkgeyAgICAgICAgICAgICAvKiBQYXJzZSAwIG9yIG1vcmUg c3dpdGNoZXMgKi8KKyAgICAgICAgICAgICAgeCA9IGNtZmRiKCZvcCk7ICAgICAgICAgICAvKiBQ YXJzZSBzd2l0Y2ggb3Igb3RoZXIgdGhpbmcgKi8KKyAgICAgICAgICAgICAgZGVidWcoRjEwMSwi WFlURUxPUCBjbWZkYiIsIiIseCk7CisgICAgICAgICAgICAgIGlmICh4IDwgMCkgICAgICAgICAg ICAgICAgLyogRXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7ICAgICAgICAgICAg ICAvKiBvciByZXBhcnNlIG5lZWRlZCAqLworICAgICAgICAgICAgICBpZiAoY21yZXN1bHQuZmNv ZGUgIT0gX0NNS0VZKSAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNoICovCisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAgICAgLyog R2V0IGJyZWFrIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICBnZXR2YWwgPSAoYyA9PSAnOicg fHwgYyA9PSAnPScpOyAvKiBzZWUgaG93IHN3aXRjaCBlbmRlZCAqLworICAgICAgICAgICAgICBp ZiAoZ2V0dmFsICYmICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgeworICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOwor ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICB6ID0gY21yZXN1bHQubnJlc3VsdDsgICAgIC8qIE51bWVyaWMgcmVzdWx0ID0gc3dpdGNo IHZhbHVlICovCisgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlhZVEVMT1Agc3dpdGNoIiwiIix6 KTsKKworICAgICAgICAgICAgICBzd2l0Y2ggKHopIHsgICAgICAgICAgICAgIC8qIFByb2Nlc3Mg dGhlIHN3aXRjaCAqLworICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fQ0xJRU5UOgorICAgICAg ICAgICAgICAgICAgdG5zZXJ2ZXIgPSAwOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgY2FzZSBDS19UTl9TRVJWRVI6CisgICAgICAgICAgICAgICAgICB0bnNlcnZl ciA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug Q0tfVE5fRUM6CisgICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfRUNITzsKKyAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fVFQ6CisgICAgICAg ICAgICAgICAgICBvcHQgPSBURUxPUFRfVFRZUEU7CisgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICBjYXNlIENLX1ROX0JNOgorICAgICAgICAgICAgICAgICAgb3B0ID0g VEVMT1BUX0JJTkFSWTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IGNhc2UgQ0tfVE5fRU5WOgorICAgICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX05FV0VOVklS T047CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENLX1RO X0xPQzoKKyAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9QVF9TTkRMT0M7CisgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENLX1ROX0FVOgorICAgICAgICAg ICAgICAgICAgb3B0ID0gVEVMT1BUX0FVVEhFTlRJQ0FUSU9OOworICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9GWDoKKyAgICAgICAgICAgICAgICAg IG9wdCA9IFRFTE9QVF9GT1JXQVJEX1g7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICBjYXNlIENLX1ROX0VOQzoKKyAgICAgICAgICAgICAgICAgIG9wdCA9IFRFTE9Q VF9FTkNSWVBUSU9OOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg Y2FzZSBDS19UTl9JS1M6CisgICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfS0VSTUlUOwor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9UTFM6 CisgICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfU1RBUlRfVExTOworICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9YRDoKKyAgICAgICAgICAg ICAgICAgIG9wdCA9IFRFTE9QVF9YRElTUExPQzsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fTkFXUzoKKyAgICAgICAgICAgICAgICAgIG9wdCA9 IFRFTE9QVF9OQVdTOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg Y2FzZSBDS19UTl9TR0E6CisgICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfU0dBOworICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDS19UTl9QSFI6Cisg ICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfUFJBR01BX0hFQVJUQkVBVDsKKyAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fUFNQOgorICAgICAg ICAgICAgICAgICAgb3B0ID0gVEVMT1BUX1NTUElfTE9HT047CisgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENLX1ROX1BMRzoKKyAgICAgICAgICAgICAgICAg IG9wdCA9IFRFTE9QVF9QUkFHTUFfTE9HT047CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICBjYXNlIENLX1ROX1NBSzoKKyAgICAgICAgICAgICAgICAgIG9wdCA9IFRF TE9QVF9JQk1fU0FLOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg Y2FzZSBDS19UTl9DUEM6CisgICAgICAgICAgICAgICAgICBvcHQgPSBURUxPUFRfQ09NUE9SVDsK KyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fTE9H OgorICAgICAgICAgICAgICAgICAgb3B0ID0gVEVMT1BUX0xPR09VVDsKKyAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ0tfVE5fRkxXOgorICAgICAgICAgICAg ICAgICAgb3B0ID0gVEVMT1BUX0xGTE9XOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiP1VuZXhwZWN0 ZWQgdmFsdWUgLSAlZFxuIix6KTsKKyAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgIGlmIChjbXJlc3VsdC5m ZGJhZGRyID09ICZvcCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgICAgfQorICAgICAgICAgIHN3aXRjaCAob3B0KSB7CisgICAgICAgICAgICBj YXNlIFRFTE9QVF9FQ0hPOiAgICAgICAgICAgLyogT3B0aW9ucyBvbmx5IHRoZSBTZXJ2ZXIgV0lM TCAqLworICAgICAgICAgICAgY2FzZSBURUxPUFRfRk9SV0FSRF9YOgorICAgICAgICAgICAgY2Fz ZSBURUxPUFRfU0VORF9VUkw6CisgICAgICAgICAgICBjYXNlIFRFTE9QVF9JQk1fU0FLOgorICAg ICAgICAgICAgY2FzZSBURUxPUFRfTE9HT1VUOgorICAgICAgICAgICAgICBpZiAoKHggPSBjbWtl eSh0bm5lZ3RhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRubmVndGFiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzaXJlZCBzZXJ2ZXIgc3RhdGUiLAorICAgVEVM T1BUX01PREUodG5zZXJ2ZXI/VEVMT1BUX0RFRl9TX01FX01PREUob3B0KTpURUxPUFRfREVGX0Nf VV9NT0RFKG9wdCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykKKyAg ICAgICAgICAgICAgICAgICApIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVy bih6KTsKKyAgICAgICAgICAgICAgaWYgKHRuc2VydmVyKSB7CisgICAgICAgICAgICAgICAgICBU RUxPUFRfREVGX1NfTUVfTU9ERShvcHQpID0geDsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9N RV9NT0RFKG9wdCkgPSB4OworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgVEVMT1BUX0RFRl9DX1VfTU9ERShvcHQpID0geDsKKyAgICAgICAgICAgICAgICAgIFRFTE9Q VF9VX01PREUob3B0KSA9IHg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgICAgIGNhc2UgVEVMT1BUX1RUWVBFOiAgICAgICAgICAvKiBPcHRpb25zIG9u bHkgdGhlIENsaWVudCBXSUxMICovCisgICAgICAgICAgICBjYXNlIFRFTE9QVF9ORVdFTlZJUk9O OgorICAgICAgICAgICAgY2FzZSBURUxPUFRfU05ETE9DOgorICAgICAgICAgICAgY2FzZSBURUxP UFRfQVVUSEVOVElDQVRJT046CisgICAgICAgICAgICBjYXNlIFRFTE9QVF9TVEFSVF9UTFM6Cisg ICAgICAgICAgICBjYXNlIFRFTE9QVF9YRElTUExPQzoKKyAgICAgICAgICAgIGNhc2UgVEVMT1BU X05BV1M6CisgICAgICAgICAgICBjYXNlIFRFTE9QVF9MRkxPVzoKKyAgICAgICAgICAgIGNhc2Ug VEVMT1BUX0NPTVBPUlQ6CisgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRubmVndGFiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudG5uZWd0YWIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJkZXNpcmVkIGNsaWVudCBzdGF0ZSIsCisgICAgVEVMT1BUX01PREUoIXRu c2VydmVyP1RFTE9QVF9ERUZfU19VX01PREUob3B0KTpURUxPUFRfREVGX0NfTUVfTU9ERShvcHQp KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpCisgICAgICAgICAgICAg ICAgICAgKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICBp ZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAg ICAgICAgICBpZiAodG5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19V X01PREUob3B0KSA9IHg7CisgICAgICAgICAgICAgICAgICBURUxPUFRfVV9NT0RFKG9wdCkgPSB4 OworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgICAgICAgICBpZiAob3B0ID09 IFRFTE9QVF9BVVRIRU5USUNBVElPTikKKyAgICAgICAgICAgICAgICAgICAgc2xfdG9wdF9hX3Nf c2F2ZWQgPSAwOworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShvcHQpID0g eDsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9NRV9NT0RFKG9wdCkgPSB4OworI2lmZGVmIENL X0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9BVVRI RU5USUNBVElPTikKKyAgICAgICAgICAgICAgICAgICAgc2xfdG9wdF9hX2Nfc2F2ZWQgPSAwOwor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KHRubmVndGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudG5uZWd0 YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuc2VydmVyID8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImRlc2lyZWQgc2VydmVyIHN0YXRlIiA6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJkZXNpcmVkIGNsaWVudCBzdGF0ZSIsCisgICAgVEVMT1BUX01PREUo dG5zZXJ2ZXI/VEVMT1BUX0RFRl9TX01FX01PREUob3B0KTpURUxPUFRfREVGX0NfTUVfTU9ERShv cHQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICkgPCAwKQorICAgICAgICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkodG5uZWd0YWIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50bm5lZ3RhYiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIXRuc2VydmVyID8gImRlc2lyZWQgc2VydmVyIHN0YXRlIiA6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNpcmVkIGNsaWVudCBzdGF0ZSIsCisgICAgVEVM T1BUX01PREUoIXRuc2VydmVyP1RFTE9QVF9ERUZfU19VX01PREUob3B0KTpURUxPUFRfREVGX0Nf VV9NT0RFKG9wdCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgKSA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgp KSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgICBpZiAodG5z ZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKG9wdCkgPSB4 OworICAgICAgICAgICAgICAgICAgVEVMT1BUX01FX01PREUob3B0KSA9IHg7CisgICAgICAgICAg ICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKG9wdCkgPSB5OworICAgICAgICAgICAgICAgICAg VEVMT1BUX1VfTU9ERShvcHQpID0geTsKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAg ICAgICAgICBpZiAob3B0ID09IFRFTE9QVF9FTkNSWVBUSU9OKQorICAgICAgICAgICAgICAgICAg ICBzbF90b3B0X2Vfc19zYXZlZCA9IDA7CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01FX01P REUob3B0KSA9IHg7CisgICAgICAgICAgICAgICAgICBURUxPUFRfTUVfTU9ERShvcHQpID0geDsK KyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUob3B0KSA9IHk7CisgICAgICAg ICAgICAgICAgICBURUxPUFRfVV9NT0RFKG9wdCkgPSB5OworI2lmZGVmIENLX0VOQ1JZUFRJT04K KyAgICAgICAgICAgICAgICAgIGlmIChvcHQgPT0gVEVMT1BUX0VOQ1JZUFRJT04pCisgICAgICAg ICAgICAgICAgICAgIHNsX3RvcHRfZV9jX3NhdmVkID0gMDsKKyNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKworICAgICAgY2FzZSBYWVRFTDogICAgICAgICAgICAgICAg ICAgICAgIC8qIFRFTE5FVCAqLworICAgICAgICBpZiAoKHogPSBjbWtleSh0bnRhYixudG4sInBh cmFtZXRlciBmb3IgVEVMTkVUIG5lZ290aWF0aW9ucyIsICIiLAorICAgICAgICAgICAgICAgICAg ICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgIHN3aXRj aCAoeikgeworICAgICAgICAgIGNhc2UgQ0tfVE5fRUM6ICAgICAgICAgICAgICAgIC8qIEVDSE8g Ki8KKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHJsdGFiLG5ybHQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAiaW5pdGlhbCBURUxORVQgZWNob2luZyBzdGF0ZSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAibG9jYWwiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICBy ZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsK KyAgICAgICAgICAgIHRuX2R1cGxleCA9IHg7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworCisgICAgICAgICAgY2FzZSBDS19UTl9SRTogICAgICAgICAgICAgICAgLyogUkVNT1RF LUVDSE8gKi8KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0b24oJnRuX3JlbV9lY2hv KSk7CisKKyAgICAgICAgICBjYXNlIENLX1ROX0RCOiAgICAgICAgICAgICAgICAvKiBERUJVRyAq LworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmdG5fZGViKSk7CisKKyAgICAg ICAgICBjYXNlIENLX1ROX1RUOiAgICAgICAgICAgICAgICAvKiBURVJNSU5BTCBUWVBFICovCisg ICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgidGVybWluYWwgdHlwZSBmb3IgVEVMTkVUIGNvbm5l Y3Rpb25zIiwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAodG5fdGVybSkgewor ICAgICAgICAgICAgICAgIGZyZWUodG5fdGVybSk7ICAgICAgICAgIC8qIEZyZWUgYW55IHByZXZp b3VzIHN0b3JhZ2UgKi8KKyAgICAgICAgICAgICAgICB0bl90ZXJtID0gTlVMTDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChzID09IE5VTEwgfHwgKnMgPT0gTlVMKSB7IC8qIElmIG5v bmUgZ2l2ZW4gKi8KKyAgICAgICAgICAgICAgICB0bl90ZXJtID0gTlVMTDsgICAgICAgICAvKiBy ZW1vdmUgdGhlIG92ZXJyaWRlIHN0cmluZyAqLworICAgICAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCh0bl90ZXJtID0gbWFsbG9jKHN0cmxl bihzKSsxKSkpIHsKKyAgICAgICAgICAgICAgICBzdHJjcHkodG5fdGVybSxzKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgfSBlbHNlIHJldHVybihz dWNjZXNzID0gMCk7CisKKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICAgICAgICBjYXNlIENLX1RO X0ZYOiAgICAgICAgICAgICAgICAvKiBGT1JXQVJELVggKi8KKyAgICAgICAgICAgIGlmICgoeD1j bWtleSh0bmZ3ZHh0YWIsbnRuZndkeCwiIiwieGF1dGhvcml0eS1maWxlIix4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgc3dpdGNoICh4KSB7Cisg ICAgICAgICAgICAgIGNhc2UgMDogeyAgICAgICAgICAgICAgICAgLyogWGF1dGhvcml0eS1GaWxl ICovCisgICAgICAgICAgICAgICAgICB4ID0gY21pZmkoIkZ1bGwgcGF0aCBvZiAuWGF1dGhvcml0 eSBmaWxlIiwiIiwmcywmeSx4eHN0cmluZyk7CisgICAgICAgICAgICAgICAgICBpZiAoeCA8IDAg JiYgeCAhPSAtMykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmdG5fZndkeF94YXV0aG9yaXR5LHMpOworICAgICAgICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBjYXNl IDE6IHsgICAgICAgICAgICAgICAgIC8qIE5vLUVuY3J5cHRpb24gKi8KKyAgICAgICAgICAgICAg ICAgIGV4dGVybiBpbnQgZndkeF9ub19lbmNyeXB0OworICAgICAgICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSBzZXRvbigmZndkeF9ub19lbmNyeXB0KSk7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyog Q0tfRk9SV0FSRF9YICovCisKKyAgICAgICAgICBjYXNlIENLX1ROX05MOiAgICAgICAgICAgICAg ICAvKiBURUxORVQgTkVXTElORS1NT0RFICovCisgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0 bl9ubG10YWIsbnRuX25sbSwiIiwibnZ0Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKHggPT0gVE5fTkxfQklOKSB7CisgICAgICAgICAg ICAgIGlmICgoeCA9IGNta2V5KHRubG10YWIsbnRubG0sIiIsInJhdyIseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICB0bl9i X25sbSA9IHg7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAg fSBlbHNlIGlmICh4ID09IFROX05MX05WVCkgeworICAgICAgICAgICAgICBpZiAoKHggPSBjbWtl eSh0bmxtdGFiLG50bmxtLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICB0bl9ubG0gPSB4OworICAgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7Cisg ICAgICAgICAgICAgIHRuX25sbSA9IHg7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7CisgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ0tfVE5fWEY6ICAgICAgICAgICAgICAg ICAgLyogQklOQVJZLVRSQU5TRkVSLU1PREUgKi8KKyAgICAgICAgICAgIGlmICgoeiA9IGNta2V5 KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOworICAgICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICB0bl9iX3hmZXIg PSB6OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgICBjYXNlIENL X1ROX05FOiAgICAgICAgICAgICAgICAgIC8qIE5PLUVOQ1JZUFQtRFVSSU5HLVhGRVIgKi8KKyAg ICAgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkg cmV0dXJuKHopOworICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 CisjaWZkZWYgQ0tfQVBDCisgICAgICAgICAgICAvKiBEb24ndCBsZXQgdGhpcyBiZSBzZXQgcmVt b3RlbHkgKi8KKyAgICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAg ICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBD X1VOQ0gpKSkKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBD S19BUEMgKi8KKyAgICAgICAgICAgIHRuX25vX2VuY3J5cHRfeGZlciA9IHo7CisgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICAgICAgY2FzZSBDS19UTl9CTTogICAgICAg ICAgICAgICAgLyogQklOQVJZLU1PREUgKi8KKyAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHRu bmVndGFiLG50bm5lZ3RhYiwiIiwicmVmdXNlZCIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAg ICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgVEVMT1BUX0RFRl9TX01FX01PREUoVEVM T1BUX0JJTkFSWSkgPSB4OworICAgICAgICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRf QklOQVJZKSA9IHg7CisgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQklO QVJZKSA9IHg7CisgICAgICAgICAgICBURUxPUFRfREVGX0NfVV9NT0RFKFRFTE9QVF9CSU5BUlkp ID0geDsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZmRlZiBJS1NfT1BU SU9OCisgICAgICAgICAgY2FzZSBDS19UTl9JS1M6ICAgICAgICAgICAgICAgLyogS0VSTUlUICov CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsIkRPIiwiYWNj ZXB0Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAg ICAgaWYgKCh5ID0gY21rZXkodG5uZWd0YWIsbnRubmVndGFiLCJXSUxMIiwiYWNjZXB0Iix4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKCh6 ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICBU RUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfS0VSTUlUKSA9IHk7CisgICAgICAgICAgICBURUxP UFRfREVGX1NfVV9NT0RFKFRFTE9QVF9LRVJNSVQpID0geDsKKyAgICAgICAgICAgIFRFTE9QVF9E RUZfQ19NRV9NT0RFKFRFTE9QVF9LRVJNSVQpID0geTsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZf Q19VX01PREUoVEVMT1BUX0tFUk1JVCkgPSB4OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisKKyNpZmRlZiBDS19TU0wKKyAgICAgICAg ICBjYXNlIENLX1ROX1RMUzogICAgICAgICAgICAgICAvKiBTVEFSVF9UTFMgKi8KKyAgICAgICAg ICAgIGlmICgoeCA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwibWUiLCJhY2NlcHQiLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoKHkg PSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsInUiLCJhY2NlcHQiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfU19N RV9NT0RFKFRFTE9QVF9TVEFSVF9UTFMpID0geDsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfU19V X01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSB5OworICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01F X01PREUoVEVMT1BUX1NUQVJUX1RMUykgPSB4OworICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1Vf TU9ERShURUxPUFRfU1RBUlRfVExTKSA9IHk7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworI2VuZGlmIC8qIENLX1NTTCAqLworCisjaWZkZWYgQ0tfTkFXUworICAgICAgICAgIGNh c2UgQ0tfVE5fTkFXUzogICAgICAgICAgICAgIC8qIE5BV1MgKi8KKyAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KHRubmVndGFiLG50bm5lZ3RhYiwibWUiLCJhY2NlcHQiLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0 bm5lZ3RhYixudG5uZWd0YWIsInUiLCJhY2NlcHQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAg ICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RFKFRF TE9QVF9OQVdTKSA9IHg7CisgICAgICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9O QVdTKSA9IHk7CisgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfTkFXUykg PSB4OworICAgICAgICAgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfTkFXUykgPSB5Owor ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBDS19OQVdTICovCisK KyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgICAgIGNhc2UgQ0tfVE5fQVU6ICAgICAg ICAgICAgICAgIC8qIEFVVEhFTlRJQ0FUSU9OICovCisgICAgICAgICAgICBpZiAoKHggPSBjbWtl eSh0bmF1dGh0YWIsbnRuYXV0aCwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKHggPT0gVE5fQVVfRldEKSB7CisgICAgICAgICAg ICAgICAgZXh0ZXJuIGludCBmb3J3YXJkX2ZsYWc7CisgICAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSBzZXRvbigmZm9yd2FyZF9mbGFnKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHgg PT0gVE5fQVVfVFlQKSB7CisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBhdXRoX3R5cGVfdXNl cltdOworICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgc2xfYXV0aF90eXBlX3VzZXJbXTsKKyAg ICAgICAgICAgICAgICBleHRlcm4gaW50IHNsX2F1dGhfc2F2ZWQ7CisgICAgICAgICAgICAgICAg aW50IGksIGosIGF0eXBlc1tBVVRIVFlQTFNUU1pdOworCisgICAgICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IEFVVEhUWVBMU1RTWjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgo eSA9IGNta2V5KGF1dHlwdGFiLG5hdXR5cCwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaSA9PSAwID8gImF1dG9tYXRpYyIgOiAiIiAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoeSA9PSAtMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmICh5ID09IEFVVEhUWVBFX0FVVE8gfHwgeSA9PSBB VVRIVFlQRV9OVUxMKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAg ICAgICAgICAgICAgICAgICAgIlxyXG4/Q2hvaWNlIG1heSBvbmx5IGJlIHVzZWQgaW4gZmlyc3Qg cG9zaXRpb24uXHJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg aTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR5cGVzW2pdID09IHkpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxyXG4/Q2hvaWNlIGhhcyBhbHJl YWR5IGJlZW4gdXNlZC5cclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICBhdHlwZXNbaV0gPSB5OworICAgICAgICAgICAgICAgICAgICBp ZiAoeSA9PSBBVVRIVFlQRV9OVUxMIHx8IHkgPT0gQVVUSFRZUEVfQVVUTykgeworICAgICAgICAg ICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg KGkgPCBBVVRIVFlQTFNUU1opCisgICAgICAgICAgICAgICAgICBhdHlwZXNbaV0gPSBBVVRIVFlQ RV9OVUxMOworICAgICAgICAgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAg ICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgICAgICBzbF9hdXRoX3NhdmVkID0gMDsK KyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVVUSFRZUExTVFNaOyBpKyspIHsKKyAg ICAgICAgICAgICAgICAgICAgYXV0aF90eXBlX3VzZXJbaV0gPSBhdHlwZXNbaV07CisgICAgICAg ICAgICAgICAgICAgIHNsX2F1dGhfdHlwZV91c2VyW2ldID0gMDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gVE5fQVVfSE9XKSB7CisgICAgICAgICAgICAg ICAgaWYgKCh5ID0gY21rZXkoYXVob3d0YWIsbmF1aG93LCIiLCJhbnkiLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgIGlmICgoeiA9 IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAg ICAgICB0bl9hdXRoX2hvdyA9IHk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gVE5fQVVf RU5DKSB7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYXVlbmN0YWIsbmF1ZW5jLCIi LCJlbmNyeXB0Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsK KyAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAg ICByZXR1cm4oeik7CisgICAgICAgICAgICAgICAgdG5fYXV0aF9lbmMgPSB5OworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAg ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgVEVMT1BUX0RFRl9DX01F X01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IHg7CisgICAgICAgICAgICAgICAgVEVMT1BU X0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0geDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogQ0tfQVVUSEVOVElD QVRJT04gKi8KKworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICBjYXNlIENLX1ROX0VO QzogeyAgICAgICAgICAgICAvKiBFTkNSWVBUSU9OICovCisgICAgICAgICAgICAgIGludCBjLCB0 bXAgPSAtMTsKKyAgICAgICAgICAgICAgaW50IGdldHZhbCA9IDA7CisgICAgICAgICAgICAgIHN0 YXRpYyBzdHJ1Y3Qga2V5dGFiICogdG5ldGJsID0gTlVMTDsKKyAgICAgICAgICAgICAgc3RhdGlj IGludCBudG5ldGJsID0gMDsKKworICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0bmVuY3Rh YixudG5lbmMsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHkp OworICAgICAgICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFROX0VO X1RZUDoKKyAgICAgICAgICAgICAgICAgIHggPSBja19nZXRfY3J5cHRfdGFibGUoJnRuZXRibCwm bnRuZXRibCk7CisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19nZXRfY3J5cHRfdGFi bGUgeCIsIiIseCk7CisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja19nZXRfY3J5cHRf dGFibGUgbiIsIiIsbnRuZXRibCk7CisgICAgICAgICAgICAgICAgICBpZiAoeCA8IDEgfHwgIXRu ZXRibCB8fCBudG5ldGJsIDwgMSkgLyogRGlkbid0IGdldCBpdCAqLworICAgICAgICAgICAgICAg ICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgIGlmICgheCkgeworICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP09vcHMsIHR5cGVzIG5vdCBsb2FkZWRcbiIpOworICAgICAgICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICBpZiAoKHggPSBjbWtleSh0bmV0YmwsbnRuZXRibCwidHlwZSBvZiBlbmNyeXB0aW9uIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMiLHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICBp ZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybih6KTsKKyAg ICAgICAgICAgICAgICAgIGN4X3R5cGUgPSB4OworICAgICAgICAgICAgICAgICAgc2xfY3hfdHlw ZSA9IDA7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRO X0VOX1NUQVJUOgorICAgICAgICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAg ICAgICAgICAgICAgICAgICByZXR1cm4oeik7CisjaWZkZWYgQ0tfQVBDCisgICAgICAgICAgICAg ICAgICAvKiBEb24ndCBsZXQgdGhpcyBiZSBzZXQgcmVtb3RlbHkgKi8KKyAgICAgICAgICAgICAg ICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAgICAgICAgICAgICAgICAgICAg YXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpCisgICAg ICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogQ0tfQVBDICov CisgICAgICAgICAgICAgICAgICBja190bl9lbmNfc3RhcnQoKTsKKyAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVE5fRU5fU1RPUDoKKyAgICAgICAgICAgICAg ICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHop OworI2lmZGVmIENLX0FQQworICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgbGV0IHRoaXMgYmUg c2V0IHJlbW90ZWx5ICovCisgICAgICAgICAgICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19M T0NBTCB8fAorICAgICAgICAgICAgICAgICAgICAgIGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYm ICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworICAgICAgICAgICAgICAgICAgY2tfdG5f ZW5jX3N0b3AoKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAg ICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19N RV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHk7CisgICAgICAgICAgICAgICAgICBURUxPUFRf REVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IHk7CisgICAgICAgICAgICAgICAgICBU RUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSB5OworICAgICAgICAgICAg ICAgICAgVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSB5OworICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAg fQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKworICAgICAgICAgIGNhc2UgQ0tfVE5fQlVH OiAgICAgICAgICAgICAgIC8qIEJVRyAqLworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodG5i dWd0YWIsNCwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnktbWUtbWVhbnMt dS10b28iLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg ICAgICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCIiLCJvZmYiLHh4c3RyaW5nKSkgPCAwKSByZXR1 cm4oeik7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAg ICAgICAgdG5fYl9tZXUgPSB6OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICBjYXNlIDE6CisgICAgICAgICAgICAgICAgdG5fYl91bWUgPSB6OworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgdG5faW5maW5p dGUgPSB6OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6Cisg ICAgICAgICAgICAgICAgdG5fc2JfYnVnID0gejsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIHRuX2F1dGhfa3JiNV9kZXNfYnVn ID0gejsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZmRlZiBDS19FTlZJUk9OTUVOVAorICAgICAgICAg IGNhc2UgQ0tfVE5fWEQ6ICAgICAgICAgICAgICAgIC8qIFhESVNQTE9DICovCisgICAgICAgICAg ICBpZiAoKHggPSBjbWtleSh0bm5lZ3RhYixudG5uZWd0YWIsIm1lIiwiYWNjZXB0Iix4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKCh5ID0g Y21rZXkodG5uZWd0YWIsbnRubmVndGFiLCJ1IiwiYWNjZXB0Iix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICBURUxPUFRfREVGX1NfTUVf TU9ERShURUxPUFRfWERJU1BMT0MpID0geDsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfU19VX01P REUoVEVMT1BUX1hESVNQTE9DKSA9IHk7CisgICAgICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9E RShURUxPUFRfWERJU1BMT0MpID0geDsKKyAgICAgICAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUo VEVMT1BUX1hESVNQTE9DKSA9IHk7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor CisgICAgICAgICAgY2FzZSBDS19UTl9FTlY6IHsKKyAgICAgICAgICAgICAgY2hhciAqIG1zZyA9 ICJ2YWx1ZSBvZiB0ZWxuZXQgZW52aXJvbm1lbnQgdmFyaWFibGUiOworICAgICAgICAgICAgICBl eHRlcm4gaW50IHRuX2Vudl9mbGc7CisgICAgICAgICAgICAgIGV4dGVybiBjaGFyIHRuX2Vudl9h Y2N0W10sIHRuX2Vudl9kaXNwW10sIHRuX2Vudl9qb2JbXSwKKyAgICAgICAgICAgICAgdG5fZW52 X3BybnRbXSwgdG5fZW52X3N5c1tdOworICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIHRuX2xv YzsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkodG5lbnZ0YWIsbnRuZW52LCIiLCIiLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAg aWYgKHggPT0gVE5fRU5WX1VWQVIpIHsgICAvKiBVc2VyIHZhcmlhYmxlcyAqLworICAgICAgICAg ICAgICAgICAgY2hhciAqIHV2YXI9TlVMTDsKKyAgICAgICAgICAgICAgICAgIGNoYXIgKiB1dmFs PU5VTEw7CisgICAgICAgICAgICAgICAgICBjaGFyICogZW52OworICAgICAgICAgICAgICAgICAg ZXh0ZXJuIGNoYXIgKiB0bl9lbnZfdXNlcnZhcls4XVsyXTsKKworICAgICAgICAgICAgICAgICAg LyogR2V0IHRoZSB1c2VyIHZhcmlhYmxlIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgIGlmICgo eCA9IGNtZmxkKCJOYW1lIG9mIEVudmlyb25tZW50IFZhcmlhYmxlIiwiIiwmcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ1dmFyLHMpOworCisg ICAgICAgICAgICAgICAgICBlbnYgPSBnZXRlbnYodXZhcik7CisgICAgICAgICAgICAgICAgICBp ZiAoIWVudikgZW52ID0gIiI7CisKKyAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJW YWx1ZSBvZiBFbnZpcm9ubWVudCBWYXJpYWJsZSIsZW52LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICAgICAgICAgIGlmICgqcykKKyAgICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmdXZhbCxzKTsKKworICAgICAgICAgICAgICAgICAgLyogTm93IHRoYXQgd2UgaGF2ZSB0 aGUgdmFyaWFibGUgYW5kIHBlcmhhcHMgYSB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgLyog dGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXM6ICgxKSBuZXcgdmFyaWFibGUgICAqLworICAg ICAgICAgICAgICAgICAgLyogYW5kIGFzc29jaWF0ZWQgdmFsdWU7ICgyKSB2YXJpYWJsZSBhbHJl YWR5IGV4aXN0cyAqLworICAgICAgICAgICAgICAgICAgLyogYnV0IHdlIGhhdmUgYSBuZXcgdmFs dWU7ICgzKSB2YXJpYWJsZSBhbHJlYWR5ICAgICAqLworICAgICAgICAgICAgICAgICAgLyogZXhp c3RzIGJ1dCBubyBuZXcgdmFsdWUgdGhlcmVmb3JlIHRoZSB1c2VyIHdhbnRzICAqLworICAgICAg ICAgICAgICAgICAgLyogdG8gY2xlYXIgdmFyaWFibGUuICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZmluZCBhbiBleGlzdGlu ZyB2YXJpYWJsZSAqLworICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IDg7IHgrKykg eworICAgICAgICAgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAodG5fZW52X3VzZXJ2YXJbeF1b MF0sdXZhciwtMSwwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXZhbCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh0bl9lbnZfdXNlcnZhclt4XVsxXSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSA9IHV2 YWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHV2YXIpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUo dG5fZW52X3VzZXJ2YXJbeF1bMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5f ZW52X3VzZXJ2YXJbeF1bMF0gPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnJlZSh0bl9lbnZfdXNlcnZhclt4XVsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0bl9lbnZfdXNlcnZhclt4XVsxXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmcmVlKHV2YXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgLyogQ291 bGRuJ3QgZmluZCBvbmU7IGxvb2sgZm9yIGVtcHR5IGxvY2F0aW9uIHRvIGluc2VydCAqLworICAg ICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgeworICAgICAgICAgICAgICAg ICAgICAgIGlmICghdG5fZW52X3VzZXJ2YXJbeF1bMF0pIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgdG5fZW52X3VzZXJ2YXJbeF1bMF0gPSB1dmFyOworICAgICAgICAgICAgICAgICAgICAg ICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSA9IHV2YWw7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5vIHNwYWNl IGZvciB2YXJpYWJsZS5cbiIpOworICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoeCA9PSBUTl9FTlZfT0ZGIHx8 IHggPT0gVE5fRU5WX09OKSB7CisgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKKyNpZmRlZiBJS1NECisgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ2 ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNh YmxlZC5cclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgICAgICAg ICB0bl9lbnZfZmxnID0geCA9PSBUTl9FTlZfT0ZGID8gMCA6IDE7CisgICAgICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg LyogTm90IE9OL09GRiAtIEdldCB0aGUgdmFsdWUgKi8KKyAgICAgICAgICAgICAgeiA9IGNtZGdx dW8oKTsKKyAgICAgICAgICAgICAgY21kc3F1bygwKTsKKyAgICAgICAgICAgICAgaWYgKCh5ID0g Y210eHQobXNnLCAiIiwgJnMsIHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICBj bWRzcXVvKHopOworICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIGNtZHNxdW8oeik7CisjaWZkZWYgSUtTRAorICAgICAgICAgICAgICBp ZiAoaW5zZXJ2ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRp ZiAvKiBJS1NEICovCisgICAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbihzKSA+IDYzKSB7Cisg ICAgICAgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCB0b28gbG9uZ1xuIik7CisgICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHN3aXRj aCAoeCkgeworICAgICAgICAgICAgICAgIGNhc2UgVE5fRU5WX1VTUjoKKyAgICAgICAgICAgICAg ICAgIGNrc3RybmNweSh1aWRidWYscyxVSURCVUZMRU4pOworICAgICAgICAgICAgICAgICAgc2xf dWlkX3NhdmVkID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg IGNhc2UgVE5fRU5WX0FDQ1Q6CisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodG5fZW52X2Fj Y3Qscyw2NCk7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl IFROX0VOVl9ESVNQOgorICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRuX2Vudl9kaXNwLHMs NjQpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUTl9F TlZfSk9COgorICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRuX2Vudl9qb2Iscyw2NCk7Cisg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFROX0VOVl9QUk5U OgorICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRuX2Vudl9wcm50LHMsNjQpOworICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUTl9FTlZfU1lTOgorICAg ICAgICAgICAgICAgICAgY2tzdHJuY3B5KHRuX2Vudl9zeXMscyw2NCk7CisgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFROX0VOVl9MT0M6CisgICAgICAgICAg ICAgICAgICBpZiAoISpzKSBzID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnRu X2xvYyxzKTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug VE5fRU5WX1VWQVI6CisgICAgICAgICAgICAgICAgICBwcmludGYoIlxuP05vdCB5ZXQgaW1wbGVt ZW50ZWRcbiIpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICB9CisjZW5kaWYgLyog Q0tfRU5WSVJPTk1FTlQgKi8KKworI2lmZGVmIENLX1NORExPQworICAgICAgICAgIGNhc2UgQ0tf VE5fTE9DOiB7ICAgICAgICAgICAgIC8qIExPQ0FUSU9OICovCisgICAgICAgICAgICAgIGV4dGVy biBjaGFyICogdG5fbG9jOworICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiTG9jYXRpb24g c3RyaW5nIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7 CisgICAgICAgICAgICAgIGlmICghKnMpIHMgPSBOVUxMOworICAgICAgICAgICAgICBtYWtlc3Ry KCZ0bl9sb2Mscyk7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAg ICAgfQorI2VuZGlmIC8qIENLX1NORExPQyAqLworICAgICAgICAgIGNhc2UgQ0tfVE5fU0ZVOiAg ICAgICAgICAgICAgIC8qIE1pY3Jvc29mdCBTRlUgY29tcGF0aWJpbGl0eSAqLworICAgICAgICAg ICAgaWYgKCh6ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eik7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAg ICAgICAgIHRuX3NmdSA9IHo7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIENLX1ROX1dBSVQ6ICAgICAgICAgICAg ICAvKiBXQUlULUZPUi1ORUdPVElBVElPTlMgKi8KKyAgICAgICAgICAgIGlmICgoeiA9IGNta2V5 KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOworICAgICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZkZWYgSUtTRAorICAgICAgICAg ICAgaWYgKGluc2VydmVyICYmCisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAgICAgICAgICBpa3Nk Y2YKKyNlbHNlCisgICAgICAgICAgICAgICAgMQorI2VuZGlmIC8qIElLU0RDT05GICovCisgICAg ICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQg ZGlzYWJsZWQuXHJcbiIpOworICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgICAgdG5fd2FpdF9mbGcg PSB6OworICAgICAgICAgICAgc2xfdG5fc2F2ZWQgPSAwOworICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKworICAgICAgICAgIGNhc2UgQ0tfVE5fREw6ICAgICAgICAgICAgICAgIC8q IERFTEFZIFNVQk5FR09USUFUSU9OUyAqLworICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkob25v ZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBJS1NECisgICAgICAgICAgICBp ZiAoaW5zZXJ2ZXIgJiYKKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAgICAgICAgIGlrc2RjZgor I2Vsc2UKKyAgICAgICAgICAgICAgICAxCisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyAgICAgICAg ICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNh YmxlZC5cclxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAg ICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgICB0bl9kZWxheV9zYiA9IHo7 CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICAgICAgY2FzZSBDS19U Tl9QVUlEOiB7ICAgICAgICAgICAgLyogUFJPTVBULUZPUi1VU0VSSUQgKi8KKyAgICAgICAgICAg ICAgaW50IGksbGVuOworICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiUHJvbXB0IHN0cmlu ZyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworCSAg ICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAgICAvKiB3ZSBtdXN0IGNoZWNrIHRvIG1h a2Ugc3VyZSB0aGVyZSBhcmUgbm8gJSBmaWVsZHMgKi8KKyAgICAgICAgICAgICAgbGVuID0gc3Ry bGVuKHMpOworICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAg ICAgICAgICAgICAgIGlmIChzW2ldID09ICclJykgeworICAgICAgICAgICAgICAgICAgICAgIGlm IChzW2krMV0gIT0gJyUnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJSUg ZmllbGRzIGFyZSBub3QgdXNlZCBpbiB0aGlzIGNvbW1hbmQuXG4iKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIG1ha2VzdHIoJnRuX3ByX3VpZCxzKTsKKyAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogVE5DT0RFICov CisKKyAgICBzd2l0Y2ggKHh4KSB7CisjaWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFhZQ09VTjog ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIENPVU5UICovCisgICAgICAgIHggPSBjbW51bSgi UG9zaXRpdmUgbnVtYmVyIiwiMCIsMTAsJnoseHhzdHJpbmcpOworICAgICAgICBpZiAoeCA8IDAp IHJldHVybih4KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Cisg ICAgICAgIGlmICh6IDwgMCkgeworICAgICAgICAgICAgcHJpbnRmKCI/QSBwb3NpdGl2ZSBudW1i ZXIsIHBsZWFzZVxuIik7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAg ICAgZGVidWcoRjEwMSwiWFlDT1VOOiB6IiwiIix6KTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSBzZXRudW0oJmNvdW50W2NtZGx2bF0seiwwLDEwMDAwKSk7CisjZW5kaWYgLyogTk9TUEwgKi8K KworI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBYWUNBU0U6CisgICAgICAgIHJldHVybihzdWNj ZXNzID0gc2V0b24oJmlucGNhc1tjbWRsdmxdKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAg ICAgY2FzZSBYWUNNRDogICAgICAgICAgICAgICAgICAgICAgIC8qIENPTU1BTkQgLi4uICovCisg ICAgICAgIGlmICgoeSA9IGNta2V5KHNjbWR0YWIsbmJ5dHQsIiIsIiIseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBj YXNlIFNDTURfQ0JSOgorICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAg ICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOworICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgICAgIGNhc2UgU0NNRF9CU1o6 CisgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiYnl0ZXNpemUgZm9yIGNvbW1hbmQgY2hhcmFj dGVycywgNyBvciA4IiwiNyIsMTAsJngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKHgg IT0gNyAmJiB4ICE9IDgpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuP1RoZSBjaG9pY2Vz IGFyZSA3IGFuZCA4XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eSk7CisgICAgICAgICAgICBpZiAoeCA9PSA3KSBjbWRtc2sgPSAwMTc3OworICAgICAgICAgICAg ZWxzZSBpZiAoeCA9PSA4KSBjbWRtc2sgPSAwMzc3OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICAgICAgICBjYXNlIFNDTURfUkNMOgorICAg ICAgICAgICAgaWYgKCh5ID0gY21udW0oIm1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmRzIGluIHJl Y2FsbCBidWZmZXIiLCIxMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCwmeCx4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IGNtcmluaSh4KSk7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisjaWZkZWYgQ0tfUkVDQUxMCisg ICAgICAgICAgY2FzZSBTQ01EX1JUUjoKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0 b24oJmNtX3JldHJ5KSk7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgICAgICAgY2FzZSBT Q01EX01PUjogICAgICAgICAgICAgICAgLyogTW9yZS1wcm9tcHRpbmcgKi8KKyAgICAgICAgICAg IHN1Y2Nlc3MgPSBzZXRvbigmeGFza21vcmUpOworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCisg ICAgICAgICAgICAgIHNhdmVhc2sgPSB4YXNrbW9yZTsKKyAgICAgICAgICAgIHJldHVybihzdWNj ZXNzKTsKKyAgICAgICAgICBjYXNlIFNDTURfUVVPOgorICAgICAgICAgICAgaWYgKCh4ID0gc2V0 b24oJnkpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgIGNtZHNxdW8oeSk7ICAgICAgICAg ICAgICAgICAvKiBEbyBpdCB0aGUgcmlnaHQgd2F5ICovCisgICAgICAgICAgICBjbWRfcXVvdGlu ZyA9IHk7ICAgICAgICAgICAgLyogQWxzbyBrZWVwIGEgZ2xvYmFsIGNvcHkgKi8KKyAgICAgICAg ICAgIC8qIFNldCBzdHJpbmctcHJvY2Vzc2luZyBmdW5jdGlvbiAqLworI2lmZGVmIGRhdGFnZW5l cmFsCisgICAgICAgICAgICB4eHN0cmluZyA9IHkgPyB6enN0cmluZyA6ICh4eF9zdHJwKSBOVUxM OworI2Vsc2UKKyNpZmRlZiBDS19BTlNJQworICAgICAgICAgICAgeHhzdHJpbmcgPSB5ID8genpz dHJpbmcgOiAoeHhfc3RycCkgTlVMTDsKKyNlbHNlCisgICAgICAgICAgICB4eHN0cmluZyA9IHkg PyB6enN0cmluZyA6ICh4eF9zdHJwKSBOVUxMOworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisK KyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICAgIGNhc2UgU0NNRF9DT0w6IHsg ICAgICAgICAgICAgIC8qIENvbW1hbmQtc2NyZWVuIGNvbG9ycyAqLworICAgICAgICAgICAgICBp bnQgZmcsIGJnOworICAgICAgICAgICAgICBmZyA9IGNta2V5KHR0eWNscnRhYiwgbmNscnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgImZvcmVncm91bmQgY29sb3IgYW5kIHRoZW4gYmFja2dy b3VuZCBjb2xvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIndoaXRlIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICB4eHN0cmluZyk7CisgICAgICAgICAgICAgIGlmIChmZyA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuKGZnKTsKKyAgICAgICAgICAgICAgaWYgKChiZyA9IGNta2V5 KHR0eWNscnRhYixuY2xycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrZ3Jv dW5kIGNvbG9yIiwiYmxhY2siLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVy bihiZyk7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAg ICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgIGNvbG9yY21kID0gZmcgfCBiZyA8PCA0Owor ICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgIH0KKyAgICAgICAg ICBjYXNlIFNDTURfU0NSOiAgICAgICAgICAgICAgICAvKiBDb21tYW5kIFNjcm9sbGJhY2sgc2l6 ZSAqLworICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIkNPTU1BTkQgc2Nyb2xsYmFjayBidWZm ZXIgc2l6ZSwgbGluZXMiLCI1MTIiLDEwLCZ4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIC8q IFRoZSBtYXggbnVtYmVyIG9mIGxpbmVzIGlzIHRoZSBSQU0gICovCisgICAgICAgICAgICAvKiB3 ZSBjYW4gYWN0dWFsbHkgZGVkaWNhdGUgdG8gYSAgICAgICAqLworICAgICAgICAgICAgLyogc2Ny b2xsYmFjayBidWZmZXIgZ2l2ZW4gdGhlIG1heGltdW0gKi8KKyAgICAgICAgICAgIC8qIHByb2Nl c3MgbWVtb3J5IHNwYWNlIG9mIDUxMk1CICAgICAgICovCisgICAgICAgICAgICBpZiAoeCA8IDI1 NiB8fCB4ID4gMjAwMDAwMEwpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuP1RoZSBzaXpl IG11c3QgYmUgYmV0d2VlbiAyNTYgYW5kIDIsMDAwLDAwMC5cbiIpOworICAgICAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgIHR0X3NjcnNpemVbVkNNRF0g PSB4OworICAgICAgICAgICAgVnNjcm5Jbml0KCBWQ01EICk7CisgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworCisgICAgICAgICAgY2FzZSBTQ01EX1dJRDogeworICAgICAgICAgICAg ICBpZiAoKHkgPSBjbW51bSgiTnVtYmVyIG9mIGNvbHVtbnMgaW4gZGlzcGxheSB3aW5kb3ciLAor ICAgICAgICAgICAgICAgICAgICAgICAgICI4MCIsMTAsJngseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKKworICAgICAgICAgICAgICBvczJfc2V0Y21kd2lkdGgoeCk7CisgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgfQorICAgICAgICAgIGNh c2UgU0NNRF9ISUc6CisgICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiTnVtYmVyIG9mIHJvd3Mg aW4gZGlzcGxheSB3aW5kb3ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjI0IiwxMCwm eCx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICBvczJfc2V0Y21k aGVpZ2h0KHgpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgICAg IGNhc2UgU0NNRF9TVEE6IHsKKyAgICAgICAgICAgICAgZXh0ZXJuIGludCBtYXJnaW5ib3Q7Cisg ICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwg MCkgcmV0dXJuKHkpOworICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKKyAgICAgICAgICAgICAgaWYgKHkgIT0gdHRfc3RhdHVzW1ZDTURdKSB7CisgICAgICAg ICAgICAgICAgICAvKiBNaWdodCBuZWVkIHRvIGZpeHVwIHRoZSBtYXJnaW5zICovCisgICAgICAg ICAgICAgICAgICB0dF9zdGF0dXNbVkNNRF0gPSB5OworICAgICAgICAgICAgICAgICAgaWYgKHkp IHsKKyAgICAgICAgICAgICAgICAgICAgICB0dF9zemNobmdbVkNNRF0gPSAyOworICAgICAgICAg ICAgICAgICAgICAgIHR0X3Jvd3NbVkNNRF0tLTsKKyAgICAgICAgICAgICAgICAgICAgICBjbWRf cm93cy0tOworICAgICAgICAgICAgICAgICAgICAgIFZzY3JuSW5pdChWQ01EKTsgIC8qIEhlaWdo dCBzZXQgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgdHRfc3pjaG5nW1ZD TURdID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICB0dF9yb3dzW1ZDTURdKys7CisgICAgICAg ICAgICAgICAgICAgICAgY21kX3Jvd3MrKzsKKyAgICAgICAgICAgICAgICAgICAgICBWc2Nybklu aXQoVkNNRCk7ICAvKiBIZWlnaHQgc2V0IGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAg ICAgIH0KKworICAgICAgICAgIGNhc2UgU0NNRF9DVVI6IHsKKyAgICAgICAgICAgICAgaW50IHJv dywgY29sOworICAgICAgICAgICAgICBwb3NpdGlvbiAqIHBwb3M7CisKKyAgICAgICAgICAgICAg cHBvcyA9IFZzY3JuR2V0Q3VyUG9zKFZDTUQpOworI2lmZGVmIE5UCisjZGVmaW5lIGl0b2EgX2l0 b2EKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICBpdG9hKHBwb3MtPnkrMSwgdG1wYnVm LCAxMCk7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJyb3cgKDEtYmFzZWQpIix0bXBi dWYsMTAsJnJvdyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisK KyAgICAgICAgICAgICAgaXRvYShwcG9zLT54KzEsIHRtcGJ1ZiwgMTApOworICAgICAgICAgICAg ICBpZiAoKHkgPSBjbW51bSgiY29sICgxLWJhc2VkKSIsdG1wYnVmLDEwLCZjb2wseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKworICAgICAgICAgICAgICBsZ290b3h5KCBWQ01E LCBjb2wsIHJvdyApIDsKKyAgICAgICAgICAgICAgVnNjcm5Jc0RpcnR5KCBWQ01EICk7CisgICAg ICAgICAgICAgIHJldHVybihzdWNjZXNzPTEpOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT0xP Q0FMICovCisjZWxzZQorICAgICAgICAgIGNhc2UgU0NNRF9XSUQ6CisgICAgICAgICAgICB5ID0g Y21udW0oIkNvbW1hbmQgc2NyZWVuIHdpZHRoLCBjaGFyYWN0ZXJzIiwiODAiLDEwLCZ4LHh4c3Ry aW5nKTsKKyAgICAgICAgICAgIHJldHVybihzZXRudW0oJmNtZF9jb2xzLHgseSwxMDI0KSk7CisK KyAgICAgICAgICBjYXNlIFNDTURfSElHOgorICAgICAgICAgICAgeSA9IGNtbnVtKCJDb21tYW5k IHNjcmVlbiBoZWlnaHQsIHJvd3MiLCIyNCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICAgICAg cmV0dXJuKHNldG51bSgmY21kX3Jvd3MseCx5LDEwMjQpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwor ICAgICAgICAgIGNhc2UgU0NNRF9JTlQ6CisgICAgICAgICAgICByZXR1cm4oc2V0b24oJmNtZGlu dCkpOworCisjaWZkZWYgQ0tfQVVUT0RMCisgICAgICAgICAgY2FzZSBTQ01EX0FETDoKKyAgICAg ICAgICAgIHJldHVybihzZXRvbigmY21kYWRsKSk7CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisK KyNpZmRlZiBET1VCTEVRVU9USU5HCisgICAgICAgICAgY2FzZSBTQ01EX0RCUTogeworICAgICAg ICAgICAgICBleHRlcm4gaW50IGRibHF1bzsKKyAgICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZk YmxxdW8pKTsKKyAgICAgICAgICB9CisjZW5kaWYgLyogRE9VQkxFUVVPVElORyAqLworCisJICBj YXNlIFNDTURfRVJSOgorICAgICAgICAgICAgeSA9IGNtbnVtKCJFcnJvciBtZXNzYWdlIHZlcmJv c2l0eSBsZXZlbCwgMC0zIiwiMSIsMTAsJngseHhzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJu KHNldG51bSgmY21kX2Vycix4LHksMykpOworCisJICBjYXNlIFNDTURfVkFSOgorCSAgICByZXR1 cm4oc2V0dmFyZXZhbCgpKTsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1 cm4oLTIpOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoICh4eCkgeworCisgICAgICBj YXNlIFhZREZMVDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIERFRkFVTFQgPSBDRCAqLwor ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IGRvY2QoWFhDV0QpKTsKKworY2FzZSBYWURFQlU6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBERUJVRyB7IG9uLCBvZmYsIHNlc3Npb24g fSAqLworICAgICAgICBpZiAoKHkgPSBjbWtleShkYmd0YWIsbmRiZywiIiwiIix4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh5ID09IERFQl9USU0pCisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgIHJldHVybihzZXRvbigmZGVidGltKSA8IDAgPyB4IDog KHN1Y2Nlc3MgPSAxKSk7CisjZWxzZQorICAgICAgICAgIC8qIHdoeSB0aGlzIGNoYW5nZT8gKi8K KyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZkZWJ0aW0pKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisKKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0 KSB7CisgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7 CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBJS1NE ICovCisKKyAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSBERUJfTEVOOgorICAg ICAgICAgICAgeSA9IGNtbnVtKCJNYXggbGVuZ3RoIGZvciBkZWJ1ZyBsb2cgc3RyaW5ncyIsIiIs MTAsJngseHhzdHJpbmcpOworICAgICAgICAgICAgaWYgKCh6ID0gc2V0bnVtKCZkZWJ4bGVuLHgs eSwtMSkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICAgICAgY2FzZSBERUJfT0ZGOgorICAgICAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisjaWZu ZGVmIE5PTE9DQUwKKyAgICAgICAgICAgIHNldGRlYnNlcygwKTsKKyNlbmRpZiAvKiBOT0xPQ0FM ICovCisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChkZWJsb2cpIGRvY2xzbG9nKExPR0Qp OworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor CisgICAgICAgICAgY2FzZSBERUJfT046CisgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyNpZmRlZiBERUJVRworICAgICAgICAgICAg ZGVibG9nID0gZGVib3BuKCJkZWJ1Zy5sb2ciLCAwKTsKKyAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gZGVibG9nID8gMSA6IDApOworI2Vsc2UKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5 LCBkZWJ1ZyBsb2cgZmVhdHVyZSBub3QgZW5hYmxlZFxuIik7CisgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDApOworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgY2FzZSBERUJfU0VT OgorICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICByZXR1 cm4oeCk7CisjaWZuZGVmIE5PTE9DQUwKKyAgICAgICAgICAgIHNldGRlYnNlcygxKTsKKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisJICBj YXNlIERFQl9NU0c6CQkJLyogRGVidWcgbWVzc2FnZXMgMjAxMC8wMy8xMiAqLworCSAgICBpZiAo KHkgPSBjbWtleShvb2V0YWIsbm9vZXRhYiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eSk7CisJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCSAgICBkZWJtc2cg PSB5OworCSAgICByZXR1cm4oMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyNpZm5k ZWYgTk9YRkVSCisgICAgICBjYXNlIFhZREVMQTogICAgICAgICAgICAgICAgICAgICAgLyogU0VU IERFTEFZICovCisgICAgICAgIHkgPSBjbW51bSgiTnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHN0 YXJ0aW5nIHRvIHNlbmQiLAorICAgICAgICAgICAgICAgICAgIjUiLDEwLCZ4LHh4c3RyaW5nKTsK KyAgICAgICAgaWYgKHggPCAwKSB4ID0gMDsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRu dW0oJmNrZGVsYXkseCx5LDk5OSkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgICBkZWZh dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHh4KSB7CisjaWZkZWYg Q0tfVEFQSQorICAgICAgY2FzZSBYWVRBUEk6CisgICAgICAgIHJldHVybihzZXR0YXBpKCkpOwor I2VuZGlmIC8qIENLX1RBUEkgKi8KKyNpZm5kZWYgTk9ESUFMCisgICAgICBjYXNlIFhZRElBTDog ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIE1PREVNIG9yIFNFVCBESUFMICovCisgICAgICAg IHJldHVybihzZXRkaWFsKC0xKSk7CisgICAgICBjYXNlIFhZTU9ETToKKyAgICAgICAgcmV0dXJu KHNldG1vZGVtKCkpOworI2lmZGVmIENPTU1FTlQKKyAgICAgIC8qIG5vdCBpbXBsZW1lbnRlZCB5 ZXQgKi8KKyAgICAgIGNhc2UgWFlBTlNXRVI6ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQU5T V0VSICovCisgICAgICAgIHJldHVybihzZXRhbnN3ZXIoKSk7CisjZW5kaWYgLyogQ09NTUVOVCAq LworI2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAgIGNhc2UgWFlE VVBMOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRFVQTEVYICovCisgICAgICAgIGlmICgo eSA9IGNta2V5KGRweHRhYiwyLCIiLCJmdWxsIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwor ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgZHVwbGV4 ID0geTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYWUxDTEU6 ICAgICAgICAgICAgICAgICAgICAgIC8qIExPQ0FMLUVDSE8gKD0gRFVQTEVYKSAqLworICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZkdXBsZXgpKTsKKworICAgICAgY2FzZSBYWUVTQzog ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBFU0NBUEUgKi8KKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSBzZXRjYyhja2l0b2EoREZFU0MpLCZlc2NhcGUpKTsKKyNlbmRpZiAvKiBOT0xPQ0FM ICovCisKKyAgICAgIGNhc2UgWFlFWElUOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRVhJ VCAqLworICAgICAgICBpZiAoKHogPSBjbWtleSh4aXR0YWIsbmV4aXQsIiIsIiIseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICBzd2l0Y2ggKHopIHsKKyAgICAg ICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTVEFUVVMgKi8KKyAgICAgICAg ICAgIHkgPSBjbW51bSgiRVhJVCBzdGF0dXMgY29kZSIsIiIsMTAsJngseHhzdHJpbmcpOworICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRudW0oJnhpdHN0YSx4LHksLTEpKTsKKyAgICAg ICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAvKiBXQVJOSU5HICovCisgICAgICAg ICAgICBpZiAoKHogPSBjbWtleSh4aXR3dGFiLG5leGl0dywiIiwiIix4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICBzZXRleGl0d2Fybih6KTsKKyAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgc3Vj Y2VzcyA9IHNldG9uKCZleGl0b25jbG9zZSk7CisjaWZkZWYgVENQU09DS0VUCisgICAgICAgICAg ICBpZiAoc3VjY2VzcykgdG5fZXhpdCA9IGV4aXRvbmNsb3NlOworI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOworICAgICAgICAgIGNhc2UgMzogewor ICAgICAgICAgICAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7CisgICAgICAgICAgICAgIHJldHVy bigoc3VjY2VzcyA9IHNldG9uKCZleGl0aGFuZ3VwKSkpOworICAgICAgICAgIH0KKyAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfSAvKiBFbmQgb2Yg U0VUIEVYSVQgc3dpdGNoKCkgKi8KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg IH0KKworICAgIHN3aXRjaCAoeHgpIHsKKworICAgICAgY2FzZSBYWUZJTEU6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFNFVCBGSUxFICovCisgICAgICAgIHJldHVybihzZXRmaWwocm1zZmxnKSk7 CisKKyAgICAgIGNhc2UgWFlGTE9XOiB7ICAgICAgICAgICAgICAgICAgICAvKiBGTE9XLUNPTlRS T0wgKi8KKyAgICAgICAgICBleHRlcm4gaW50IGN4Zmxvd1tdOworICAgICAgICAgIHN0cnVjdCBG REIgazEsIGsyOworICAgICAgICAgIGludCB0bmNvbXBvcnQgPSAwOworICAgICAgICAgIGNoYXIg KiBtOworCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICAgIGlmIChuZXR3b3JrICYmIGlzdG5j b21wb3J0KCkpCisgICAgICAgICAgICB0bmNvbXBvcnQgPSAxOworI2VuZGlmIC8qIFROX0NPTVBP UlQgKi8KKworICAgICAgICAgIGlmICh0bmNvbXBvcnQpIHsKKyAgICAgICAgICAgICAgbSA9ICJG bG93IGNvbnRyb2wgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cCisgICBkdHIvY2QgICAg ZHRyL2N0cyAgIGtlZXAgICAgbm9uZSAgICBydHMvY3RzICAgeG9uL3hvZmZcblwKKyBvciBjb25u ZWN0aW9uIHR5cGUiOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgLyogQWxsIHRoaXMg aXMgYmVjYXVzZSBjaGFpbmVkIEZEQidzIGRvbid0IGdpdmUgY2hhaW5lZCBoZWxwIHlldCAqLwor ICAgICAgICAgICAgICBtID0KKyNpZmRlZiBQbGFuOQorI2lmZGVmIENLX1JUU0NUUworICAgICAg ICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXAorICAga2Vl cCAgIG5vbmUgICAgcnRzL2N0c1xuXAorIG9yIGNvbm5lY3Rpb24gdHlwZSIsCisjZWxzZQorICAg ICAgICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXAorICAg a2VlcCAgIG5vbmVcblwKKyBvciBjb25uZWN0aW9uIHR5cGUiOworI2VuZGlmIC8qIENLX1JUU0NU UyAqLworI2Vsc2UKKyNpZmRlZiBDS19SVFNDVFMKKyNpZmRlZiBDS19EVFJDRAorI2lmZGVmIENL X0RUUkNUUworICAgICAgICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93 aW5nOlxuXAorICAgZHRyL2NkICAgIGR0ci9jdHMgICBrZWVwICAgIG5vbmUgICAgcnRzL2N0cyAg IHhvbi94b2ZmXG5cCisgb3IgY29ubmVjdGlvbiB0eXBlIjsKKyNlbHNlIC8qIENLX0RUUkNUUyAq LworICAgICAgICAgICAiRmxvdyBjb250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxu XAorICAgZHRyL2NkICAgIGtlZXAgICAgbm9uZSAgICBydHMvY3RzICAgeG9uL3hvZmZcblwKKyAg ICAgICAgICAgIG9yIGNvbm5lY3Rpb24gdHlwZSI7CisjZW5kaWYgLyogQ0tfRFRSQ1RTICovCisj ZWxzZSAvKiBDS19EVFJDRCAqLworI2lmZGVmIENLX0RUUkNUUworICAgICAgICAgICAiRmxvdyBj b250cm9sIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuXAorICAgZHRyL2N0cyAgIGtlZXAg ICBub25lICAgIHJ0cy9jdHMgICB4b24veG9mZlxuXAorIG9yIGNvbm5lY3Rpb24gdHlwZSI7Cisj ZWxzZSAvKiBDS19EVFJDVFMgKi8KKyAgICAgICAgICAgIkZsb3cgY29udHJvbCB0eXBlLCBvbmUg b2YgdGhlIGZvbGxvd2luZzpcblwKKyAgIGtlZXAgICBub25lICAgIHJ0cy9jdHMgICB4b24veG9m ZlxuXAorIG9yIGNvbm5lY3Rpb24gdHlwZSI7CisjZW5kaWYgLyogQ0tfRFRSQ1RTICovCisjZW5k aWYgLyogQ0tfRFRSQ0QgKi8KKyNlbHNlCisgICAgICAgICAgICJGbG93IGNvbnRyb2wgdHlwZSwg b25lIG9mIHRoZSBmb2xsb3dpbmc6XG5cCisgICBrZWVwICAgbm9uZSAgICB4b24veG9mZlxuXAor IG9yIGNvbm5lY3Rpb24gdHlwZSI7CisjZW5kaWYgLyogQ0tfUlRTQ1RTICovCisjZW5kaWYgLyog UGxhbjkgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgY21mZGJpKCZrMSxfQ01LRVksbSwiIiwi IixuY3h0eXBlc3csIDQsIHh4c3RyaW5nLCBjeHR5cGVzdywgJmsyKTsKKyAgICAgICAgICBjbWZk YmkoJmsyLAorICAgICAgICAgICAgICAgICBfQ01LRVksCisgICAgICAgICAgICAgICAgICIiLAor ICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgIiIsCisjaWZkZWYgVE5fQ09N UE9SVAorICAgICAgICAgICAgICAgICAodG5jb21wb3J0ID8gbnRuZmxvIDogbmZsbyksCisjZWxz ZQorICAgICAgICAgICAgICAgICBuZmxvLAorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICAg ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgeHhzdHJpbmcsCisjaWZkZWYgVE5fQ09N UE9SVAorICAgICAgICAgICAgICAgICAodG5jb21wb3J0ID8gdG5mbG90YWIgOiBmbG90YWIpLAor I2Vsc2UKKyAgICAgICAgICAgICAgICAgZmxvdGFiLAorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K KyAgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICApOworICAgICAgICAgIHgg PSBjbWZkYigmazEpOworICAgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAgIC8q IEVycm9yICovCisgICAgICAgICAgICAgIGlmICh4ID09IC0yIHx8IHggPT0gLTkpCisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/Tm8ga2V5d29yZHMgb3Igc3dpdGNoZXMgbWF0Y2g6IFwiJXNcIlxu IixhdG1idWYpOworICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgfQorICAgICAg ICAgIHogPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgIC8qIEtleXdvcmQgdmFsdWUgKi8KKyAg ICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRkciA9PSAmazIpIHsgLyogRmxvdy1jb250cm9sIHR5 cGUga2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp ICAgIC8qIFNldCBpdCBpbW1lZGlhdGVseSAqLworICAgICAgICAgICAgICAgIHJldHVybih4KTsK KyAgICAgICAgICAgICAgZmxvdyA9IHo7CisgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInNldCBm bG93IiwiIixmbG93KTsKKyNpZmRlZiBDS19TUEVFRAorICAgICAgICAgICAgICBpZiAoZmxvdyA9 PSBGTE9fWE9OWCkgICAgIC8qIFhvbi9Yb2ZmIGZvcmNlcyBwcmVmaXhpbmcgKi8KKyAgICAgICAg ICAgICAgICBjdGxwW1hPTl0gPSBjdGxwW1hPRkZdID0gY3RscFtYT04rMTI4XSA9IGN0bHBbWE9G RisxMjhdID0gMTsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworICAgICAgICAgICAgICBhdXRvZmxv dyA9IChmbG93ID09IEZMT19BVVRPKTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsgICAgICAvKiBEb25lICovCisgICAgICAgICAgfQorICAgICAgICAgIGRlYnVnKEYxMDEsInNl dCBmbG93IC9ibGFoIDEiLCIiLHopOyAvKiBTRVQgRkxPVyAvZm9yLXdoYXQgKi8KKyAgICAgICAg ICBpZiAoKHkgPSBjbWtleShmbG90YWIsbmZsbywiRmxvdyBjb250cm9sIHR5cGUiLCJub25lIix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgZGVidWco RjEwMSwic2V0IGZsb3cgL2JsYWggMiIsIiIseSk7CisgICAgICAgICAgaWYgKHkgPT0gRkxPX0FV VE8pIHsKKyAgICAgICAgICAgICAgcHJpbnRmKAorICAiP1NvcnJ5LCBcImF1dG9tYXRpY1wiIGNh biBub3QgYmUgYXNzaWduZWQgdG8gYSBjb25uZWN0aW9uIHR5cGUuXG4iKTsKKyAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHogPj0gMCAmJiB6IDw9IENYVF9N QVgpCisgICAgICAgICAgICBjeGZsb3dbel0gPSB5OworICAgICAgICAgIGRlYnVnKEYxMDEsInNl dCBmbG93IiwiIixmbG93KTsKKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJzZXQgZmxvdyBhdXRvZmxv dyIsIiIsYXV0b2Zsb3cpOworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9 CisKKyAgICAgIGNhc2UgWFlIQU5EOiAgICAgICAgICAgICAgICAgICAgICAvKiBIQU5EU0hBS0Ug Ki8KKyAgICAgICAgaWYgKCh5ID0gY21rZXkoaHNodGFiLG5oc2gsIiIsIm5vbmUiLHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmICh5ID09IDk5OCkgeworICAgICAgICAgICAg aWYgKCh4ID0gY21udW0oIkFTQ0lJIHZhbHVlIiwiIiwxMCwmeSx4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKCh5IDwgMSkgfHwgKCh5ID4g MzEpICYmICh5ICE9IDEyNykpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hhcmFjdGVy IG11c3QgYmUgaW4gQVNDSUkgY29udHJvbCByYW5nZVxuIik7CisgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgdHVybiA9ICh5ID4gMDEyNykgPyAwIDogMTsK KyAgICAgICAgdHVybmNoID0geTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworI2lm bmRlZiBOT1NQTAorICAgICAgY2FzZSBYWU1BQ1I6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNF VCBNQUNSTyAqLworICAgICAgICBpZiAoKHkgPSBjbWtleShzbWFjdGFiLDIsIiIsIiIseHhzdHJp bmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2Fz ZSAwOiByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZtZWNobykpOworICAgICAgICAgIGNhc2UgMTog cmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmbWVycm9yW2NtZGx2bF0pKTsKKyAgICAgICAgICBkZWZh dWx0OiByZXR1cm4oLTIpOworICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgICAg Y2FzZSBYWU1TR1M6CisjaWZkZWYgVk1TCisgICAgICAgIGlmICgoeiA9IGNta2V5KG9ub2ZmLDIs IiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHZtc19tc2dzID0gejsKKyAgICAgICAgcHJpbnRm KCJTb3JyeSwgU0VUIE1FU1NBR0VTIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIpOworICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIFZNUyAqLworICAgICAgZGVmYXVsdDoKKyAg ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoICh4eCkgeworCisgICAgICBjYXNlIFhZ UEFSSTogICAgICAgICAgICAgICAgICAgICAgLyogUEFSSVRZICovCisgICAgICAgIGlmICgoeSA9 IGNta2V5KHBhcnRibCxucGFyLCIiLCJub25lIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICBy ZXR1cm4oeSk7CisKKyAgICAgICAgLyogSWYgcGFyaXR5IG5vdCBub25lLCB0aGVuIHdlIGFsc28g d2FudCA4dGgtYml0IHByZWZpeGluZyAqLworCisjaWZkZWYgSFdQQVJJVFkKKyAgICAgICAgaWYg KHkgPT0gJ0gnKSB7ICAgICAgICAgICAgICAgICAvKiBIYXJkd2FyZSAqLworICAgICAgICAgICAg aWYgKCh4ID0gY21rZXkoaHdwYXJ0Ymwsbmh3cGFyLCIiLCJldmVuIix4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisjZW5kaWYgLyogSFdQQVJJVFkg Ki8KKworICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHop OworCisjaWZkZWYgSFdQQVJJVFkKKyAgICAgICAgaWYgKHkgPT0gJ0gnKSB7ICAgICAgICAgICAg ICAgICAvKiA4IGRhdGEgYml0cyBwbHVzIGhhcmR3YXJlIHBhcml0eSAqLworICAgICAgICAgICAg cGFyaXR5ID0gMDsKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgICAgICBlYnFmbGcgPSAwOworI2Vu ZGlmIC8qIE5PWEZFUiAqLworICAgICAgICAgICAgaHdwYXJpdHkgPSB4OworICAgICAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcgZGF0YSBiaXRzICsgc29mdHdhcmUgcGFy aXR5ICovCisgICAgICAgICAgICBod3Bhcml0eSA9IDA7CisjZW5kaWYgLyogSFdQQVJJVFkgKi8K KyAgICAgICAgICAgIHBhcml0eSA9IHk7CisjaWZuZGVmIE5PWEZFUgorICAgICAgICAgICAgZWJx ZmxnID0gKHBhcml0eSkgPyAxIDogMDsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZmRlZiBIV1BB UklUWQorICAgICAgICB9CisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKworI2lmZGVmIFROX0NPTVBP UlQKKyAgICAgICAgaWYgKG5ldHdvcmsgJiYgaXN0bmNvbXBvcnQoKSkKKyAgICAgICAgICB0bnNl dHRpbmdzKHBhcml0eSwgMCk7CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCisgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICAgIGNhc2UgWFlQUk9N OiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUFJPTVBUICovCisvKgorICBOb3RlOiB4eHN0 cmluZyBub3QgaW52b2tlZCBoZXJlLiAgSW5zdGVhZCwgaXQgaXMgaW52b2tlZCBldmVyeSB0aW1l IHRoZQorICBwcm9tcHQgaXMgaXNzdWVkLiAgVGhpcyBhbGxvd3MgdGhlIHByb21wdCBzdHJpbmcg dG8gY29udGFpbiB2YXJpYWJsZXMKKyAgdGhhdCBjYW4gY2hhbmdlLCBsaWtlIFx2KGRpciksIFx2 KHRpbWUpLCBldGMuCisqLworICAgICAgICBja21ha21zZyhsaW5lLCAgICAgICAgICAgICAgICAg IC8qIERlZmF1bHQgbWlnaHQgaGF2ZSB0cmFpbGluZyBzcGFjZSAqLworICAgICAgICAgICAgICAg ICBMSU5CVUZTSVosCisgICAgICAgICAgICAgICAgICJ7IiwKKyAgICAgICAgICAgICAgICAgaW5z ZXJ2ZXIgPyBpa3Byb21wdCA6IGNrcHJvbXB0LAorICAgICAgICAgICAgICAgICAifSIsCisgICAg ICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKCh4ID0g Y210eHQoIlByb2dyYW0ncyBjb21tYW5kIHByb21wdCIsbGluZSwmcyxOVUxMKSkgPCAwKQorICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgcyA9IGJyc3RyaXAocyk7ICAgICAgICAgICAgICAg ICAvKiBSZW1vdmUgZW5jbG9zaW5nIGJyYWNlcywgaWYgYW55ICovCisgICAgICAgIGNtc2V0cChz KTsgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBwcm9tcHQgKi8KKyAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PWEZF UgorICAgICAgY2FzZSBYWVJFVFI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFJFVFJZOiBwZXIt cGFja2V0IHJldHJ5IGxpbWl0ICovCisgICAgICAgIHkgPSBjbW51bSgiTWF4aW11bSByZXRyaWVz IHBlciBwYWNrZXQiLCIxMCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICBpZiAoeCA8IDApIHgg PSAwOworICAgICAgICBpZiAoKHggPSBzZXRudW0oJm1heHRyeSx4LHksOTk5KSkgPCAwKSByZXR1 cm4oeCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAobWF4dHJ5IDw9IHdzbG90cikgewor ICAgICAgICAgICAgcHJpbnRmKCI/UmV0cnkgbGltaXQgbXVzdCBiZSBncmVhdGVyIHRoYW4gd2lu ZG93IHNpemVcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAg fQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAg ICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQwMyIsIGNraXRvYShtYXh0cnkpLCAiIik7CisgICAg ICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfSBlbHNlIHJldHVybihzdWNj ZXNzID0geCk7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAg IGNhc2UgWFlTRVJWOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU0VSVkVSIGl0ZW1zICov CisgICAgICAgIGlmICgoeSA9IGNta2V5KHNydnRhYixuc3J2dCwiIiwiIix4eHN0cmluZykpIDwg MCkgcmV0dXJuKHkpOworICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBjYXNlIFhZU0VS SToKKyAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJOdW1iZXIgb2Ygc2Vjb25kcywgb3IgMCBm b3Igbm8gaWRsZSB0aW1lb3V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiwxMCwm eCx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg aWYgKHggPCAwKQorICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworI2lmbmRlZiBPUzIKKyAgICAg ICAgICAgIHNydnRpbSA9IDA7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICBzcnZpZGwg PSB4OworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICBjYXNlIFhZ U0VSVDoKKyAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJJbnRlcnZhbCBmb3Igc2VydmVyIE5B S3MsIDAgPSBub25lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShEU1JWVElN KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLCZ4LCB4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAg ICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICAgICJcbj9TcGVjaWZ5IGEgcG9zaXRp dmUgbnVtYmVyLCBvciAwIGZvciBubyBzZXJ2ZXIgTkFLc1xuIik7CisgICAgICAgICAgICAgICAg cmV0dXJuKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICAg ICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQwNCIsIGNraXRvYSh4KSwgIiIpOworICAgICAgICAg ICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyNpZm5k ZWYgT1MyCisgICAgICAgICAgICAgICAgc3J2aWRsID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgICAgICAgICAgICBzcnZ0aW0gPSB4OyAgICAgICAgICAgICAvKiBTZXQgdGhlIHNlcnZlciB0 aW1lb3V0IHZhcmlhYmxlICovCisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFhZU0VSRDogICAgICAgICAgICAgICAgICAv KiBTRVJWRVIgRElTUExBWSAqLworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigm c3J2ZGlzKSk7IC8qIE9OIG9yIE9GRi4uLiAqLworCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAg Y2FzZSBYWVNFUlA6ICAgICAgICAgICAgICAgICAgLyogU0VSVkVSIEdFVC1QQVRIICovCisgICAg ICAgICAgICByZXR1cm4ocGFyc2RpcigyKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgICAg ICAgIGNhc2UgWFlTRVJMOiAgICAgICAgICAgICAgICAgIC8qIFNFUlZFUiBMT0dJTiAqLworICAg ICAgICAgICAgcmV0dXJuKGNrbG9naW4oKSk7CisKKyAgICAgICAgICBjYXNlIFhZU0VSQzogICAg ICAgICAgICAgICAgICAvKiBTRVJWRVIgQ0QtTUVTU0FHRSAqLworICAgICAgICAgICAgeCA9IHJt c2ZsZyA/CisgICAgICAgICAgICAgIGNta2V5KG9ub2ZmLDIsIiIsIiIseHhzdHJpbmcpIDoKKyAg ICAgICAgICAgICAgICBjbWtleShjZG1zZywzLCIiLCIiLHh4c3RyaW5nKTsKKyAgICAgICAgICAg IGlmICh4IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKHgg PT0gMikgeyAgICAgICAgICAgICAgIC8qIENELU1FU1NBR0UgRklMRSAqLworICAgICAgICAgICAg ICAgIGlmICgoeCA9IGNtdHh0KCJOYW1lIG9mIGZpbGUiLCIiLCZzLE5VTEwpKSA8IDApCisgICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgaWYgKCEqcykgeworICAg ICAgICAgICAgICAgICAgICBzID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgc3J2Y2Rtc2cg PSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZjZG1zZ3N0 cixzKTsKKyAgICAgICAgICAgICAgICBtYWtlbGlzdChjZG1zZ3N0cixjZG1zZ2ZpbGUsOCk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAgICAvKiBDRC1NRVNTQUdFIE9OL09GRiAq LworICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAocm1zZmxnKSB7Cisg ICAgICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQyMCIsIHggPyAiMSIgOiAiMCIs ICIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHggPiAwKQorICAgICAgICAgICAgICAgICAg c3J2Y2Rtc2cgfD0gMTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBz cnZjZG1zZyAmPSAyOworICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgY2FzZSBYWVNFUks6ICAgICAgICAgICAgICAgICAgLyogU0VS VkVSIEtFRVBBTElWRSAqLworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3J2 cGluZykpOyAvKiBPTiBvciBPRkYuLi4gKi8KKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKyAgICB9 CisKKyAgICBzd2l0Y2ggKHh4KSB7CisjaWZkZWYgVU5JWAorI2lmbmRlZiBOT0pDCisgICAgICBj YXNlIFhZU1VTUDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNVU1BFTkQgKi8KKyAgICAg ICAgc2V0b24oJnhzdXNwZW5kKTsJCS8qIG9uIG9yIG9mZi4uLiAqLworICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIE5PSkMgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyAg ICAgIGNhc2UgWFlUQUtFOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEFLRSAqLworICAg ICAgICBpZiAoKHkgPSBjbWtleSh0YWt0YWIsNCwiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJu KHkpOworICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICBjYXNlIDA6IHJldHVybihzdWNj ZXNzID0gc2V0b24oJnRlY2hvKSk7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgY2FzZSAxOiBy ZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZ0YWtlcnJbY21kbHZsXSkpOworI2Vsc2UKKyAgICAgICAg ICBjYXNlIDE6IHJldHVybihzdWNjZXNzID0gc2V0b24oJnRha2Vyclt0bGV2ZWxdKSk7CisjZW5k aWYgLyogTk9TUEwgKi8KKyAgICAgICAgICBjYXNlIDI6IHRlY2hvID0gMDsgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsgLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCAqLworICAgICAgICAgIGNhc2UgMzog dGVjaG8gPSAxOyByZXR1cm4oc3VjY2VzcyA9IDEpOyAvKiBNUy1ET1MgS2VybWl0ICovCisgICAg ICAgICAgZGVmYXVsdDogcmV0dXJuKC0yKTsKKyAgICAgICAgfQorCisjaWZuZGVmIE5PU0NSSVBU CisgICAgICBjYXNlIFhZU0NSSTogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNDUklQVCAq LworICAgICAgICBpZiAoKHkgPSBjbWtleShzY3J0YWIsMSwiIiwiZWNobyIseHhzdHJpbmcpKSA8 IDApIHJldHVybih5KTsKKyAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSAwOiBy ZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZzZWNobykpOworICAgICAgICAgIGRlZmF1bHQ6IHJldHVy bigtMik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NDUklQVCAqLworCisgICAgICBkZWZhdWx0 OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyNpZm5kZWYgTk9MT0NBTAorICAgIHN3aXRjaCAo eHgpIHsKKyAgICAgIGNhc2UgWFlURVJNOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVS TUlOQUwgKi8KKyAgICAgICAgeCA9IHNldHRybSgpOworICAgICAgICBzdWNjZXNzID0gKHggPiAw KSA/IDEgOiAwOworICAgICAgICByZXR1cm4oeCk7CisKKyNpZmRlZiBOVAorICAgICAgY2FzZSBY WVdJTjk1OiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBXSU45NSB3b3JrYXJvdW5kcyAqLwor ICAgICAgICB4ID0gc2V0d2luOTUoKTsKKyAgICAgICAgc3VjY2VzcyA9ICh4ID4gMCA/IDEgOiAw KTsKKyAgICAgICAgcmV0dXJuKHgpOworI2VuZGlmIC8qIE5UICovCisKKyNpZmRlZiBPUzIKKyAg ICAgIGNhc2UgWFlETFI6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRElBTEVSIHdvcmth cm91bmRzICovCisgICAgICAgIHggPSBzZXRkaWFsZXIoKTsKKyAgICAgICAgc3VjY2VzcyA9ICh4 ID4gMCA/IDEgOiAwKTsKKyAgICAgICAgcmV0dXJuKHgpOworCisgICAgICBjYXNlIFhZVElUTEU6 ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRJVExFIG9mIHdpbmRvdyAqLworICAgICAgICB4 ID0gc2V0dGl0bGUoKTsKKyAgICAgICAgc3VjY2VzcyA9ICh4ID4gMCA/IDEgOiAwKTsKKyAgICAg ICAgcmV0dXJuKHgpOworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgT1MyTU9VU0UKKyAgICAg IGNhc2UgWFlNT1VTRTogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgTU9VU0UgKi8KKyAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRtb3UoKSk7CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKwor ICAgICAgY2FzZSBYWUJFTEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBCRUxMICovCisg ICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0YmVsbCgpKTsKKworI2lmZGVmIE9TMgorICAgICAg Y2FzZSBYWVBSVFk6CisgICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0cHJ0eSgpICk7CisjZW5k aWYgLyogT1MyICovCisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyNl bmRpZiAvKiBOT0xPQ0FMICovCisKKyAgICBzd2l0Y2ggKHh4KSB7CisKKy8qIFNFVCBTRU5EL1JF Q0VJVkUgcHJvdG9jb2wgcGFyYW1ldGVycy4gKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNh c2UgWFlSRUNWOgorICAgICAgY2FzZSBYWVNFTkQ6CisgICAgICAgIHJldHVybihzZXRzcih4eCxy bXNmbGcpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisgICAgICBj YXNlIFhZU0VTUzogICAgICAgICAgICAgICAgICAgICAgLyogU0VTU0lPTi1MT0cgKi8KKyAgICAg ICAgaWYgKCh4ID0gY21rZXkoc2Z0dGFiLG5zZnR0YWIsInR5cGUgb2YgZmlsZSIsCisjaWZkZWYg T1MyCisgICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnkiLAorI2Vsc2UgLyogT1MyICovCisg ICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgICkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHggPT0gOTk5KSB7 ICAgICAgICAgICAgICAgICAvKiBUSU1FU1RBTVBFRC1URVhUICovCisgICAgICAgICAgICBzZXNz ZnQgPSBYWUZUX1Q7ICAgICAgICAgICAgLyogSW1wbGllcyB0ZXh0ICovCisgICAgICAgICAgICBz bG9ndHMgPSAxOyAgICAgICAgICAgICAgICAgLyogYW5kIHRpbWVzdGFtcHMgKi8KKwl9IGVsc2Ug aWYgKHggPT0gOTk4KSB7CQkvKiBOVUxMLVBBRERFRC1MSU5FUyAqLworICAgICAgICAgICAgc2xv Z251bCA9IDE7CQkvKiBhZGRzIE5VTCBhZnRlciBeSiAqLworICAgICAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEEgcmVndWxhciB0eXBlICovCisgICAgICAgICAgICBzZXNz ZnQgPSB4OyAgICAgICAgICAgICAgICAgLyogVGhlIHR5cGUgKi8KKyAgICAgICAgICAgIHNsb2d0 cyA9IDA7ICAgICAgICAgICAgICAgICAvKiBObyB0aW1lc3RhbXBlcyAqLworICAgICAgICB9Cisg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlTUEVFOiAgICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgU1BFRUQgKi8KKyAgICAgICAgbHAgPSBsaW5lOworICAgICAg ICBpZiAobG9jYWwgJiYgIW5ldHdvcmspIHsKKyAgICAgICAgICBja21ha21zZyhscCwKKyAgICAg ICAgICAgICAgICAgICBMSU5CVUZTSVosCisgICAgICAgICAgICAgICAgICAgIlRyYW5zbWlzc2lv biByYXRlIGZvciAiLAorICAgICAgICAgICAgICAgICAgIHR0bmFtZSwKKyAgICAgICAgICAgICAg ICAgICAiIChiaXRzIHBlciBzZWNvbmQpIiwKKyAgICAgICAgICAgICAgICAgICBOVUxMCisgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBja3N0cm5jcHko bHAsCisgICAgICAgICAgICAgICAgICAgICJTZXJpYWwtcG9ydCBzcGVlZCAoYml0cyBwZXIgc2Vj b25kKSIsCisgICAgICAgICAgICAgICAgICAgIExJTkJVRlNJWgorICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICB9CisgICAgICAgIHp6ID0gLTFMOworCisjaWZkZWYgVE5fQ09NUE9SVAor ICAgICAgICBpZiAobmV0d29yayAmJiBpc3RuY29tcG9ydCgpKQorICAgICAgICAgIHggPSBjbWtl eSh0bnNwZHRhYixudG5zcGQsbGluZSwiIix4eHN0cmluZyk7CisgICAgICAgIGVsc2UKKyNlbmRp ZiAvKiBUTl9DT01QT1JUICovCisgICAgICAgICAgeCA9IGNta2V5KHNwZHRhYixuc3BkLGxpbmUs IiIseHhzdHJpbmcpOworICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgIGlmICh4ID09 IC0zKSBwcmludGYoIj92YWx1ZSByZXF1aXJlZFxuIik7CisjaWZkZWYgVVNFVENTRVRTUEVFRAor ICAgICAgICAgICAgLyogSW4gdGhpcyBjYXNlLCBhbnkgbnVtYmVyIGNhbiBiZSB0cmllZCAqLwor ICAgICAgICAgICAgLyogVGhlcmUncyBhIHBhcnNlIGVycm9yIG1lc3NhZ2UgYnV0IHRoZSByZXF1 ZXN0IHN0aWxsIGdvZXMgdGhydSAqLworICAgICAgICAgICAgaWYgKHJkaWdpdHMoYXRtYnVmKSkK KyAgICAgICAgICAgICAgenogPSBhdG9sKGF0bWJ1Zik7CisgICAgICAgICAgICBlbHNlCisjZW5k aWYgLyogVVNFVENTRVRTUEVFRCAqLworICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZkZWYgSUtT RAorICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBj b21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIGlmICghbG9jYWwpIHsKKyAg ICAgICAgICAgIHByaW50ZigiP1NFVCBTUEVFRCBoYXMgbm8gZWZmZWN0IHdpdGhvdXQgcHJpb3Ig U0VUIExJTkVcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAg fSBlbHNlIGlmIChuZXR3b3JrCisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAgICAgICAgICAgICAg ICYmICFpc3RuY29tcG9ydCgpCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAgICAgICAgICAg ICAgICAgICkgeworICAgICAgICAgICAgcHJpbnRmKCJcbj9TcGVlZCBjYW5ub3QgYmUgc2V0IGZv ciBuZXR3b3JrIGNvbm5lY3Rpb25zXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MCk7CisgICAgICAgIH0KKworLyoKKyAgTm90ZTogVGhpcyB3YXkgb2YgaGFuZGxpbmcgc3BlZWRz IGlzIG5vdCAxNi1iaXQgc2FmZSBmb3Igc3BlZWRzIGdyZWF0ZXIKKyAgdGhhbiAyMzA0MDAuICBU aGUgYXJndW1lbnQgdG8gdHRzc3BkKCkgc2hvdWxkIGhhdmUgYmVlbiBhIGxvbmcuCisqLworI2lm ZGVmIFVTRVRDU0VUU1BFRUQKKyAgICAgICAgaWYgKHp6ID4gLTFMKQorICAgICAgICAgIHggPSB6 eiAvIDEwTDsKKyNlbmRpZiAvKiBVU0VUQ1NFVFNQRUVEICovCisgICAgICAgIHp6ID0gKGxvbmcp IHggKiAxMEw7CisgICAgICAgIGlmICh6eiA9PSAxMzBMKSB6eiA9IDEzNEw7CisgICAgICAgIGlm ICh6eiA9PSA3MEwpIHp6ID0gNzVMOyAgICAgICAgLyogKHNlZSBzcGR0YWJbXSBkZWZpbml0aW9u KSAqLworICAgICAgICBpZiAodHRzc3BkKHgpIDwgMCkgIHsgICAgICAgICAgIC8qIENhbGwgdHRz c3BkIHdpdGggY3BzLCBub3QgYnBzISAqLworICAgICAgICAgICAgcHJpbnRmKCI/VW5zdXBwb3J0 ZWQgbGluZSBzcGVlZCAtICVsZFxuIix6eik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOworICAgICAgICB9IGVsc2UgeworI2lmZGVmIENLX1RBUEkKKyAgICAgICAgICAgIGlmICgh dHR0YXBpIHx8IHRhcGlwYXNzKQorICAgICAgICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOyAgICAg ICAgIC8qIFJlYWQgaXQgYmFjayAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBz cGVlZCA9IHp6OworI2Vsc2UgLyogQ0tfVEFQSSAqLworICAgICAgICAgICAgc3BlZWQgPSB0dGdz cGQoKTsgICAgICAgICAgIC8qIFJlYWQgaXQgYmFjayAqLworI2VuZGlmIC8qIENLX1RBUEkgKi8K KyAgICAgICAgICAgIGlmIChzcGVlZCAhPSB6eikgIHsgICAgICAgICAvKiBDYWxsIHR0c3NwZCB3 aXRoIGNwcywgbm90IGJwcyEgKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIj9TRVQgU1BFRUQg ZmFpbHMsIHNwZWVkIGlzICVsZFxuIixzcGVlZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwZmxhZyAmJiAheGNt ZHNyYykgeworICAgICAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKQorICAgICAgICAgICAg ICAgICAgcHJpbnRmKCIlcywgNzUvMTIwMCBicHNcbiIsdHRuYW1lKTsKKyAgICAgICAgICAgICAg ICBlbHNlIGlmIChzcGVlZCA9PSAxMzQpCisgICAgICAgICAgICAgICAgICBwcmludGYoIiVzLCAx MzQuNSBicHNcbiIsdHRuYW1lKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgICBwcmludGYoIiVzLCAlbGQgYnBzXG4iLHR0bmFtZSxzcGVlZCk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICB9CisjZW5kaWYgLyog Tk9MT0NBTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBYWVhGRVI6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFNFVCBUUkFOU0ZFUiAqLworICAgICAgICBpZiAoKHkgPSBjbWtleShy bXNmbGcgPyBydHN0YWIgOiB0c3RhYiwgLyogKG9yIFJFTU9URSBTRVQgVFJBTlNGRVIpICovCisg ICAgICAgICAgICAgICAgICAgICAgIHJtc2ZsZyA/IG5ydHMgOiBudHMsCisgICAgICAgICAgICAg ICAgICAgICAgICIiLCJjaGFyYWN0ZXItc2V0Iix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOwor ICAgICAgICBzd2l0Y2ggKHkpIHsKKyNpZmRlZiBYRlJDQU4KKyAgICAgICAgICBjYXNlIFhZWF9D QU46ICAgICAgICAgICAgICAgICAvKiBDQU5DRUxMQVRJT04gKi8KKyAgICAgICAgICAgIGlmICgo eiA9IGNta2V5KG9ub2ZmLDIsIiIsIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsKKyAgICAg ICAgICAgIGlmICh6ID09IDApIHsgICAgICAgICAgICAgICAvKiBPRkYgKi8KKyAgICAgICAgICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICB4 ZnJjYW4gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkg PSBjbW51bSgiQVNDSUkgY29kZSBmb3IgY2FuY2VsbGF0aW9uIGNoYXJhY3RlciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIjMiLDEwLCZ4LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwor ICAgICAgICAgICAgICAgIGlmICh4ID4gMzEgJiYgeCAhPSAxMjcpIHsKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJDYW5jZWwgY2hhcmFjdGVyIG11c3QgYmUgMC0zMSBvciAxMjdcbiIpOwor ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiSG93IG1hbnkgcmVxdWlyZWQgdG8gY2F1c2UgY2Fu Y2VsbGF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIsMTAsJnosIHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAg ICAgIGlmICh6IDwgMikgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIk51bWJlciBtdXN0 IGJlIDIgb3IgZ3JlYXRlclxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHkpOworICAgICAgICAgICAgICAgIHhmcmNhbiA9IDE7ICAgICAgICAgICAgIC8qIENB TkNFTExBVElPTiBPTiAqLworICAgICAgICAgICAgICAgIHhmcmNociA9IHg7ICAgICAgICAgICAg IC8qIFVzaW5nIHRoaXMgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgeGZybnVtID0gejsg ICAgICAgICAgICAgLyogTmVlZGluZyB0aGlzIG1hbnkgb2YgdGhlbSAqLworICAgICAgICAgICAg fQorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBYRlJDQU4gKi8K KworI2lmbmRlZiBOT0NTRVRTCisgICAgICAgICAgY2FzZSBYWVhfQ1NFOiAgICAgICAgICAgICAg ICAgLyogQ0hBUkFDVEVSLVNFVCAqLworICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkodGNzdGFi LG50Y3MsIiIsInRyYW5zcGFyZW50Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0 dXJuKHkpOworICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Cisg ICAgICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2Vu KCdTJywgIjQwNSIsIHRjc2luZm9beV0uZGVzaWduYXRvciwgIiIpOworICAgICAgICAgICAgICAg IHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBleHRlcm4gaW50IHNfY3NldCwgZmNoYXJzZXQsIGF4Y3NldFtdLCB0Y3Nfc2F2ZTsKKyAg ICAgICAgICAgICAgICB0c2xldmVsID0gKHkgPT0gVENfVFJBTlNQKSA/IDAgOiAxOyAvKiB0cmFu c2ZlciBzeW50YXggbGV2ZWwgKi8KKwkJeGZyeGxhID0gdHNsZXZlbDsKKyAgICAgICAgICAgICAg ICB0Y2hhcnNldCA9IHk7ICAgICAgICAgICAvKiB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0ICovCisg ICAgICAgICAgICAgICAgLyogU0VORCBDSEFSQUNURVItU0VUIEFVVE8gKi8KKyAgICAgICAgICAg ICAgICBpZiAodHNsZXZlbCA+IDAgJiYgc19jc2V0ID09IFhNT0RFX0EpCisgICAgICAgICAgICAg ICAgICBpZiAoeSA+IC0xICYmIHkgPD0gTUFYVENTRVRTKQorICAgICAgICAgICAgICAgICAgICBp ZiAoYXhjc2V0W3ldID4gLTEgJiYgYXhjc2V0W3ldID4gTUFYRkNTRVRTKQorICAgICAgICAgICAg ICAgICAgICAgIGZjaGFyc2V0ID0gYXhjc2V0W3ldOyAvKiBBdXRvLXBpY2sgZmlsZSBjaGFyc2V0 ICovCisgICAgICAgICAgICAgICAgc2V0eGxhdHlwZSh0Y2hhcnNldCxmY2hhcnNldCk7IC8qIFRy YW5zbGF0aW9uIHR5cGUgKi8KKwkJdGNzX3NhdmUgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwor ICAgICAgICAgIGNhc2UgWFlYX0xTSDogICAgICAgICAgICAgICAgIC8qIExPQ0tJTkctU0hJRlQg Ki8KKyAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGxzdGFiLG5scywiIiwib24iLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgIGxzY2FwciA9ICh5ID09IDEpID8g MSA6IDA7ICAvKiBPTjogcmVxdWVzdGVkID0gMSAqLworICAgICAgICAgICAgbHNjYXB1ID0gKHkg PT0gMikgPyAyIDogMDsgIC8qIEZPUkNFRDogIHVzZWQgPSAxICovCisgICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOworCisvKiAjaWZkZWYgQ0tfWFlaICovCisgICAgICAgICAgY2FzZSBY WVhfUFJPOiAgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgKi8KKyNpZm5kZWYgT1MyCisgICAg ICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwg b25seSBLZXJtaXQgcHJvdG9jb2wgaXMgYXZhaWxhYmxlXG4iKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAg cmV0dXJuKHNldHByb3RvKCkpOworLyogI2VuZGlmICovIC8qIENLX1hZWiAqLworCisgICAgICAg ICAgY2FzZSBYWVhfTU9EOiAgICAgICAgICAgICAgICAgLyogTW9kZSAqLworICAgICAgICAgICAg aWYgKCh5ID0gY21rZXkoeGZybXRhYiwyLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKKyAgICAgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgICAg ICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiNDEwIiwgeSA9PSBYTU9ERV9BID8gIjAiIDogIjEiLCAi Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuKChpbnQpc3N0YXRlKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGdfeGZlcm1vZGUgPSB5OworICAgICAgICAgICAgeGZlcm1vZGUgPSB5Owor I2lmZGVmIE5FV0ZUUAorCSAgICBpZiAoZnRwaXNvcGVuKCkpIHsJCS8qIElmIGFuIEZUUCBjb25u ZWN0aW9uIGlzIG9wZW4gKi8KKwkJZXh0ZXJuIGludCBmdHBfeGZlcm1vZGU7IC8qIGNoYW5nZSBp dHMgdHJhbnNmZXIgbW9kZSB0b28gKi8KKwkJZnRwX3hmZXJtb2RlID0geGZlcm1vZGU7CisJICAg IH0JICAgICAgCisjZW5kaWYJLyogTkVXRlRQICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAgICAgICBjYXNlIFhZWF9ESVM6ICAgICAg ICAgICAgICAgICAvKiBEaXNwbGF5ICovCisgICAgICAgICAgICByZXR1cm4oZG94ZGlzKDEpKTsJ CS8qIDEgPT0gS2VybWl0ICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisgICAgICAgICAgY2Fz ZSBYWVhfU0xPOiAgICAgICAgICAgICAgICAgLyogU2xvdy1zdGFydCAqLworICAgICAgICAgICAg cmV0dXJuKHNldG9uKCZzbG9zdGFydCkpOworCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgY2Fz ZSBYWVhfQ1JDOiAgICAgICAgICAgICAgICAgLyogQ1JDICovCisgICAgICAgICAgICByZXR1cm4o c2V0b24oJmRvY3JjKSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgICAgICAgIGNhc2UgWFlY X0JFTDogICAgICAgICAgICAgICAgIC8qIEJlbGwgKi8KKyAgICAgICAgICAgIHJldHVybihzZXRv bigmeGZyYmVsKSk7CisKKyNpZmRlZiBQSVBFU0VORAorICAgICAgICAgIGNhc2UgWFlYX1BJUDog ICAgICAgICAgICAgICAgIC8qIFBpcGVzICovCisjaWZuZGVmIE5PUFVTSAorICAgICAgICAgICAg aWYgKG5vcHVzaCkgeworI2VuZGlmIC8qIE5PUFVTSCAqLworICAgICAgICAgICAgICAgIHByaW50 ZigiU29ycnksIGFjY2VzcyB0byBwaXBlcyBpcyBkaXNhYmxlZFxuIik7CisgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyNpZm5kZWYgTk9QVVNICisgICAgICAgICAgICB9IGVsc2UKKyNlbmRp ZiAvKiBOT1BVU0ggKi8KKyAgICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZ1c2VwaXBlcykpOwor I2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyAgICAgICAgICBjYXNlIFhZWF9JTlQ6ICAgICAgICAg ICAgICAgICAvKiBJbnRlcnJ1cHRpb24gKi8KKyAgICAgICAgICAgIHJldHVybihzZXRvbigmeGZy aW50KSk7CisKKyAgICAgICAgICBjYXNlIFhZWF9YTEE6CisgICAgICAgICAgICByZXR1cm4oc2V0 b24oJnhmcnhsYSkpOyAgICAgLyogVHJhbnNsYXRpb24gKi8KKworICAgICAgICAgIGNhc2UgWFlY X01TRzogeworICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIHhmcm1zZzsKKyAgICAgICAgICAg ICAgaWYgKCh4ID0gY210eHQoIlByb21wdCBzdHJpbmciLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgaWYgKCEqcykgcyA9IE5V TEw7CisgICAgICAgICAgICAgIG1ha2VzdHIoJnhmcm1zZyxzKTsKKyAgICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKworCSAgfQorCSAgY2FzZSBYWVhfUlBUOiB7CisJICAgICAgZXh0 ZXJuIGludCB3aGVyZWZsZzsKKwkgICAgICByZXR1cm4oc2V0b24oJndoZXJlZmxnKSk7CisgICAg ICAgICAgfQorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAg ICAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgfQorCisgICAgc3dpdGNoICh4eCkgewor CisjaWZuZGVmIE5PWE1JVAorICAgICAgY2FzZSBYWVhNSVQ6ICAgICAgICAgICAgICAgICAgICAg IC8qIFNFVCBUUkFOU01JVCAqLworICAgICAgICByZXR1cm4oc2V0eG1pdCgpKTsKKyNlbmRpZiAv KiBOT1hNSVQgKi8KKworI2lmbmRlZiBOT1hGRVIKKyNpZm5kZWYgTk9DU0VUUworICAgICAgY2Fz ZSBYWVVOQ1M6ICAgICAgICAgICAgICAgICAgICAgIC8qIFVOS05PV04tQ0hBUkFDVEVSLVNFVCAq LworICAgICAgICBpZiAoKHkgPSBjbWtleShpZmR0YWIsMiwiIiwiZGlzY2FyZCIseHhzdHJpbmcp KSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7CisgICAgICAgIHVua2NzID0geTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNl bmRpZiAvKiBOT0NTRVRTICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9QVVNI CisjaWZkZWYgVU5JWAorICAgICAgY2FzZSBYWVdJTEQ6ICAgICAgICAgICAgICAgICAgICAgIC8q IFdJTERDQVJELUVYUEFOU0lPTiAqLworICAgICAgICBpZiAoKHkgPSBjbWtleSh3aWxkdGFiLG53 aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAiV2lsZGNhcmQgZXhwYW5zaW9uIG9wdGlvbiIs Im9uIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICgo eiA9IGNta2V5KHdkb3R0YWIsCisgICAgICAgICAgICAgICAgICAgICAgIDIsCisgICAgICAgICAg ICAgICAgICAgICAgICJ3aGV0aGVyIHRvIG1hdGNoIGZpbGVuYW1lcyB0aGF0IHN0YXJ0IHdpdGgg XCIuXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAiL25vLW1hdGNoLWRvdC1maWxlcyIsCisg ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKQorICAgICAgICAgICAgICkgPCAwKQorICAg ICAgICAgIHJldHVybih6KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eCk7CisgICAgICAgIGlmIChub3B1c2gpIHsKKyAgICAgICAgICAgIGlmICh5ID4gMCkgeworICAg ICAgICAgICAgICAgIHByaW50ZigiU2hlbGwgZXhwYW5zaW9uIGlzIGRpc2FibGVkXG4iKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgfQorICAgICAg ICB9CisJc3dpdGNoICh5KSB7CisJICBjYXNlIFdJTERfT046CisJICAgIHdpbGRlbmEgPSAxOyAK KwkgICAgYnJlYWs7CisJICBjYXNlIFdJTERfT0ZGOgorCSAgICB3aWxkZW5hID0gMDsgCisJICAg IGJyZWFrOworCSAgY2FzZSBXSUxEX0tFUjoKKwkgICAgd2lsZHhwYW5kID0gMDsgCQkvKiBUaGVz ZSBhcmUgdGhlIHByZXZpb3VzICovCisJICAgIGJyZWFrOwkJCS8qIGhhcmR3aXJlZCB2YWx1ZXMg Ki8KKwkgIGNhc2UgV0lMRF9TSEU6CisJICAgIHdpbGR4cGFuZCA9IDE7IAorCSAgICBicmVhazsK Kwl9CisgICAgICAgIG1hdGNoZG90ID0gejsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZm5kZWYgTk9YRkVS CisgICAgICBjYXNlIFhZV0lORDogICAgICAgICAgICAgICAgICAgICAgLyogV0lORE9XLVNMT1RT ICovCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICB5ID0g Y21udW0oIldpbmRvdyBzaXplIGZvciBLZXJtaXQgcHJvdG9jb2wsIDEgdG8gMzIiLAorICAgICAg ICAgICAgICAgICAgICAgICIxIiwgMTAsICZ4LCB4eHN0cmluZyk7CisgICAgICAgICAgICB5ID0g c2V0bnVtKCZ6LHgseSxNQVhXUyk7ICAgLyogPT0gMzIgKi8KKyAgICAgICAgfQorI2lmZGVmIENL X1hZWgorICAgICAgICBlbHNlIGlmIChwcm90b2NvbCA9PSBQUk9UT19aKSB7CisgICAgICAgICAg ICB5ID0gY21udW0oIldpbmRvdyBzaXplIGZvciBaTU9ERU0gcHJvdG9jb2wsIDAgdG8gNjU1MzUi LAorICAgICAgICAgICAgICAgICAgICAgICIwIiwgMTAsICZ4LCB4eHN0cmluZyk7CisgICAgICAg ICAgICB5ID0gc2V0bnVtKCZ6LHgseSw2NTUzNSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19Y WVogKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB5ID0gY21udW0oIldpbmRvdyBzaXpl IGZvciBjdXJyZW50IHByb3RvY29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAiIiwgMTAsICZ4 LCB4eHN0cmluZyk7CisgICAgICAgICAgICB5ID0gc2V0bnVtKCZ6LHgseSw2NTQ3Mik7ICAgLyog RG9lc24ndCBtYXR0ZXIgLSB3ZSB3b24ndCB1c2UgaXQgKi8KKyAgICAgICAgfQorICAgICAgICBp ZiAoeSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsK KyAgICAgICAgICAgIGlmICh6IDwgMSkKKyAgICAgICAgICAgICAgeiA9IDE7CisgICAgICAgIH0K KyNpZmRlZiBDS19YWVoKKyAgICAgICAgZWxzZSBpZiAocHJvdG9jb2wgPT0gUFJPVE9fWikgewor ICAgICAgICAgICAgLyogWm1vZGVtIHdpbmRvd2luZyBpcyBjbG9zZXIgdG8gS2VybWl0IHBhY2tl dCBsZW5ndGggKi8KKyAgICAgICAgICAgIC8qIHRoYW4gS2VybWl0IHdpbmRvdyBzaXplLiAgSWYg V2luZG93IHNpemUgaXMgemVybyAgICovCisgICAgICAgICAgICAvKiBhbiBlbmQgb2YgZnJhbWUg YW5kIENSQyBpcyBzZW50IG9ubHkgYXQgdGhlIGVuZCBvZiAqLworICAgICAgICAgICAgLyogdGhl IGZpbGUgKGRlZmF1bHQpLiAgT3RoZXJ3aXNlLCBhbiBFbmQgb2YgRnJhbWUgICAgKi8KKyAgICAg ICAgICAgIC8qIGFuZCBDUkMgYXJlIHNlbnQgYWZ0ZXIgV2luZG93IFNpemUgbnVtYmVyIG9mIGJ5 dGVzICovCisgICAgICAgICAgICBpZiAoeiA8IDApICAgICAgICAgICAgICAgICAgLyogRGlzYWJs ZSB3aW5kb3dpbmcgICovCisgICAgICAgICAgICAgIHogPSAwOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgcHJpbnRmKCI/U0VUIFdJTkRPVyBkb2VzIG5vdCBhcHBseSB0byAlcyBwcm90 b2NvbFxuIiwKKyAgICAgICAgICAgICAgICAgICBwdGFiW3Byb3RvY29sXS5wX25hbWUKKyAgICAg ICAgICAgICAgICAgICApOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfWFlaICovCisKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgIC8qIFRoaXMgaXMgdGFrZW4gY2FyZSBvZiBhdXRvbWF0aWNhbGx5 IG5vdyBpbiBwcm90b2NvbCBuZWdvdGlhdGlvbiAqLworICAgICAgICBpZiAobWF4dHJ5IDwgeikg eworICAgICAgICAgICAgcHJpbnRmKCI/V2luZG93IHNsb3RzIG11c3QgYmUgbGVzcyB0aGFuIHJl dHJ5IGxpbWl0XG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAg IH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19L ICYmIHJtc2ZsZykgeyAvKiBTZXQgcmVtb3RlIHdpbmRvdyBzaXplICovCisgICAgICAgICAgICB3 c2xvdHIgPSB6OyAgICAgICAgICAgICAgICAgLyogU2V0IGxvY2FsIHdpbmRvdyBzaXplIHRvbyAq LworICAgICAgICAgICAgcHRhYltwcm90b2NvbF0ud2luc2l6ZSA9IHdzbG90cjsKKyAgICAgICAg ICAgIHNzdGF0ZSA9IHNldGdlbignUycsICI0MDYiLCBja2l0b2EoeiksICIiKTsKKyAgICAgICAg ICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9CisgICAgICAgIHdzbG90ciA9IHo7 ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHJlcXVlc3RlZCB3aW5kb3cgc2l6ZSBoZXJlICov CisgICAgICAgIHB0YWJbcHJvdG9jb2xdLndpbnNpemUgPSB3c2xvdHI7IC8qIGFuZCBpbiBwcm90 b2NvbC1zcGVjaWZpYyB0YWJsZSAqLworICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykg eyAgICAgIC8qIEFuZCBmb3IgS2VybWl0IG9ubHkuLi4gKi8KKyAgICAgICAgICAgIHN3Y2FwciA9 ICh3c2xvdHIgPiAxKSA/IDEgOiAwOyAvKiBzZXQgd2luZG93IGJpdCBpbiBjYXBhcyB3b3JkICov CisgICAgICAgICAgICBpZiAod3Nsb3RyID4gMSkgeyAgICAgICAgICAgLyogV2luZG93IHNpemUg PiAxPyAqLworICAgICAgICAgICAgICAgIC8qIE1heWJlIGFkanVzdCBwYWNrZXQgc2l6ZSAqLwor ICAgICAgICAgICAgICAgIHkgPSBhZGpwa2wodXJwc2l6LHdzbG90cixiaWdyYnNpeik7CisgICAg ICAgICAgICAgICAgaWYgKHkgIT0gdXJwc2l6KSB7ICAgICAgLyogRGlkIGl0IGNoYW5nZT8gKi8K KyAgICAgICAgICAgICAgICAgICAgdXJwc2l6ID0geTsKKyAgICAgICAgICAgICAgICAgICAgaWYg KG1zZ2ZsZykKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisiIEFkanVzdGluZyByZWNl aXZlIHBhY2tldC1sZW5ndGggdG8gJWQgZm9yICVkIHdpbmRvdyBzbG90c1xuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdXJwc2l6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3c2xvdHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB9CisKKyAgICBzd2l0Y2ggKHh4KSB7CisKKyNp Zm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgWFlPVVRQOiAgICAgICAgICAgICAgICAgICAgICAvKiBP VVRQVVQgY29tbWFuZCBwYXJhbWV0ZXJzICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KG91dHB0 YWIsbm91dHB0YWIsIk9VVFBVVCBjb21tYW5kIHBhcmFtZXRlciIsInBhY2luZyIsCisgICAgICAg ICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAg ICAgICAgc3dpdGNoKHkpIHsgICAgICAgICAgICAgICAgICAgICAvKiBXaGljaCBwYXJhbWV0ZXIg Ki8KKyAgICAgICAgICBjYXNlIE9VVF9QQUM6ICAgICAgICAgICAgICAgICAvKiBQQUNJTkcgKi8K KyAgICAgICAgICAgIHkgPSBjbW51bSgiTWlsbGlzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4gZWFj aCBPVVRQVVQgY2hhcmFjdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiMTAwIiwgMTAsJngs eHhzdHJpbmcpOworICAgICAgICAgICAgeSA9IHNldG51bSgmeix4LHksMTYzODMpOyAgIC8qIFZl cmlmeSBhbmQgZ2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgICAgICAgaWYgKHkgPCAwKSByZXR1 cm4oeSk7CisgICAgICAgICAgICBpZiAoeiA8IDApIHogPSAwOyAgICAgICAgICAgLyogKHNhdmUg c29tZSBzcGFjZSkgKi8KKyAgICAgICAgICAgIHBhY2luZyA9IHo7CisgICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgIGNhc2UgT1VUX0VTQzogICAgICAgICAgICAgICAg IC8qIFNwZWNpYWwtZXNjYXBlcyAqLworICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZvdXRlc2Mp KTsKKyAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiAoc2hvdWxkbid0 IGhhcHBlbikgKi8KKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyNlbmRpZiAv KiBOT1NQTCAqLworCisjaWZkZWYgQ0tfU1BFRUQKKyAgICAgIGNhc2UgWFlRQ1RMOiB7CisgICAg ICAgICAgc2hvcnQgKnA7CisgICAgICAgICAgaW50IHp6OworICAgICAgICAgIGlmICgoeiA9IGNt a2V5KGN0bHRhYiwyLCAiY29udHJvbC1jaGFyYWN0ZXIgcHJlZml4aW5nIG9wdGlvbiIsIiIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1 cm4oeik7CisgICAgICAgICAgLyogTWFrZSBzcGFjZSBmb3IgYSB0ZW1wb3JhcnkgY29weSBvZiB0 aGUgcHJlZml4aW5nIHRhYmxlICovCisKKyAgICAgICAgICBwID0gKHNob3J0ICopbWFsbG9jKDI1 NiAqIHNpemVvZihzaG9ydCkpOworICAgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgICBw cmludGYoIj9JbnRlcm5hbCBlcnJvciAtIG1hbGxvYyBmYWlsdXJlXG4iKTsKKyAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgICB9CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1 NjsgaSsrKSBwW2ldID0gY3RscFtpXTsgLyogQ29weSBjdXJyZW50IHRhYmxlICovCisKKyAgICAg ICAgICBzd2l0Y2ggKHopIHsKKyAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAg ICAvKiBVTlBSRUZJWEVEIGNvbnRyb2wgY2hhcmFjdGVyICovCisgICAgICAgICAgICBjYXNlIDE6 ICAgICAgICAgICAgICAgICAgICAgLyogUFJFRklYRUQgY29udHJvbCBjaGFyYWN0ZXIgKi8KKyAg ICAgICAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAvKiBDb2xsZWN0IGEgbGlzdCBv ZiBudW1iZXJzICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgICAgICB4X2lmbnVtID0g MTsgICAgICAgICAgLyogVHVybiBvZmYgY29tcGxhaW50cyBmcm9tIGV2YWwoKSAqLworI2VuZGlm IC8qIE5PU1BMICovCisgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbW51bSgoeiA9PSAwKSA/ CisiXG4gTnVtZXJpYyBBU0NJSSB2YWx1ZSBvZiBjb250cm9sIGNoYXJhY3RlciB0aGF0IG5lZWRz IE5PIHByZWZpeCxcblwKKyBvciB0aGUgd29yZCBcImFsbFwiLCBvciBjYXJyaWFnZSByZXR1cm4g dG8gY29tcGxldGUgdGhlIGxpc3QiIDoKKyJcbiBOdW1lcmljIEFTQ0lJIHZhbHVlIG9mIGNvbnRy b2wgY2hhcmFjdGVyIHRoYXQgTVVTVCBCRSBwcmVmaXhlZCxcblwKKyBvciB0aGUgd29yZCBcImFs bFwiLCBvciBjYXJyaWFnZSByZXR1cm4gdG8gY29tcGxldGUgdGhlIGxpc3QiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIiIsMTAsJnkseHhzdHJpbmcKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkpIDwgMCkgeworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAg ICAgICAgICAgIHhfaWZudW0gPSAwOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICAg ICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBpZiAo eCA9PSAtMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgeyBmcmVlKChjaGFy ICopcCk7IHAgPSBOVUxMOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs IlNFVCBDT05UUk9MIGF0bWJ1ZiIsYXRtYnVmLDApOworICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIWNrc3RyY21wKGF0bWJ1ZiwiYWxsIiwzLDApIHx8IC8qICJBTEwiICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoYXRtYnVmLCJhbCIsMiwwKSB8fAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGF0bWJ1ZiwiYSIsMSwwKSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAvKiBH ZXQgY29uZmlybWF0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bih4KTsKKwkJCSAgICAgIHByZWZpeGluZyA9IHogPyBQWF9BTEwgOiBQWF9OT047CisJCQkgICAg ICBzZXRwcmVmaXgocHJlZml4aW5nKTsKKwkJCSAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CS8qIE5vdCBudW1iZXIsIG5vdCBBTEwg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICI/UGxlYXNlIHNwZWNpZnkgYSBudW1iZXIgb3IgdGhlIHdvcmQg QUxMXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCkgZnJlZSgoY2hhciAqKXApOworICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgfQorI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgICAgICAgeF9p Zm51bSA9IDA7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBVTlBSRUZJWFpFUk8KKyAgICAg ICAgICAgICAgICAgIHp6ID0gMDsKKyNlbHNlCisjaWZuZGVmIE9TMgorICAgICAgICAgICAgICAg ICAgenogPSAxIC0gejsKKyNlbHNlCisgICAgICAgICAgICAgICAgICB6eiA9IDA7ICAgICAgICAg ICAgICAgLyogQWxsb3cgMCAoYnV0IG9ubHkgZm9yIFptb2RlbSkgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKyNlbmRpZiAvKiBVTlBSRUZJWFpFUk8gKi8KKworICAgICAgICAgICAgLyogcHJpbnRmKCJ4 ID0gJWQsIHkgPSAlZCwgeiA9ICVkLCB6eiA9ICVkXG4iLCB4LHkseix6eik7ICovCisKKyAgICAg ICAgICAgICAgICAgIGlmICgoeSA+ICAzMSAmJiB5IDwgMTI3KSB8fCAvKiBBIHNwZWNpZmljIG51 bWVyaWMgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAoeSA+IDE1OSAmJiB5IDwgMjU1 KSB8fCAvKiBDaGVjayB0aGF0IGl0IGlzIGEgdmFsaWQgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAoeSA8IHp6KSB8fCAgICAgICAvKiBjb250cm9sIGNvZGUuICovCisgICAgICAgICAgICAgICAg ICAgICAgKHkgPiAyNTUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VmFsdWVz IGFsbG93ZWQgYXJlOiAlZC0zMSwgMTI3LTE1OSwgMjU1XG4iLHp6KTsKKyAgICAgICAgICAgICAg ICAgICAgICBpZiAocCkgZnJlZSgoY2hhciAqKXApOworICAgICAgICAgICAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB4ID0geSAm IDEyNzsgICAgICAgICAgLyogR2V0IDctYml0IHZhbHVlICovCisgICAgICAgICAgICAgICAgICBp ZiAoeiA9PSAwKSB7ICAgICAgICAgLyogSWYgdGhleSBhcmUgc2F5aW5nIGl0IGlzIHNhZmUuLi4g Ki8KKyAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmbG93IGNvbnRyb2wgaXMgWG9uL1hvZmYg Ki8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKChmbG93ID09IEZMT19YT05YKSAmJgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogWE9OICYgWE9GRiBjaGFycyBub3Qgc2FmZS4gKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICh4ID09IFhPTiB8fCB4ID09IFhPRkYpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KG1zZ2ZsZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiU29ycnksIG5vdCB3aGlsZSBYb24vWG9mZiBpcyBpbiBlZmZl Y3QuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHApIGZyZWUoKGNoYXIgKilw KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAg ICAgICAgICB9CisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo bmV0d29yayAmJiBJU19URUxORVQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm ICh5ID09IENSIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l ZCkgeSA9PSAodW5zaWduZWQpIDI1NSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KG1zZ2ZsZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBub3Qg b24gYSBURUxORVQgY29ubmVjdGlvbi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAocCkgZnJlZSgoY2hhciAqKXApOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHBbeV0gPSAoY2hhcikgejsgICAgICAv KiBBbGwgT0ssIHNldCBmbGFnICovCisgICAgICAgICAgICAgIH0gLyogRW5kIG9mIHdoaWxlIGxv b3AgKi8KKy8qCisgIEdldCBoZXJlIG9ubHkgaWYgdGhleSBoYXZlIG1hZGUgbm8gbWlzdGFrZXMu ICBDb3B5IHRlbXBvcmFyeSB0YWJsZSBiYWNrIHRvCisgIHBlcm1hbmVudCBvbmUsIHRoZW4gZnJl ZSB0ZW1wb3JhcnkgdGFibGUgYW5kIHJldHVybiBzdWNjZXNzZnVsbHkuCisqLworICAgICAgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIGN0bHBbaV0gPSBwW2ldOworICAgICAgICAg ICAgICBpZiAocCkgZnJlZSgoY2hhciAqKXApOworICAgICAgICAgICAgICBpZiAoeiA+IDApIGNs ZWFycnEgPSAwOyAgIC8qIDE5OSAoc2VlIFNFVCBQUkVGSVhJTkcpICovCisgICAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg ICByZXR1cm4oLTIpOworICAgICAgICAgIH0KKyAgICAgIH0KKyNlbmRpZiAvKiBDS19TUEVFRCAq LworICAgIH0KKworICAgIHN3aXRjaCAoeHgpIHsKKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNh c2UgWFlSRVBUOgorICAgICAgICBpZiAoKHkgPSBjbWtleShycHR0YWIsMiwKKyAgICAgICAgICAg ICAgICAgICAgICAgInJlcGVhdC1jb3VudCBjb21wcmVzc2lvbiBwYXJhbWV0ZXIiLCIiLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgc3dpdGNoKHkpIHsKKyAg ICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNldG9uKCZycHRl bmEpKTsgLyogUkVQRUFUIENPVU5UUyA9IE9OLCBPRkYgKi8KKyAgICAgICAgICBjYXNlIDE6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBSRVBFQVQgTUlOSU5VTSBudW1iZXIgKi8KKyAgICAgICAg ICAgIHByaW50ZigiKG5vdCBpbXBsZW1lbnRlZCB5ZXQsIG5vdGhpbmcgaGFwcGVucylcbiIpOwor ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAg ICAgICAgICAvKiBSRVBFQVQgUFJFRklYIGNoYXIgKi8KKyAgICAgICAgICAgIGlmICgoeCA9IGNt bnVtKCJBU0NJSSB2YWx1ZSIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAg IHJldHVybih4KTsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OworICAgICAgICAgICAgaWYgKCh6ID4gMzIgJiYgeiA8IDYzKSB8fCAoeiA+IDk1ICYmIHogPCAx MjcpKSB7CisgICAgICAgICAgICAgICAgaWYgKHkgPT0gMSkgcnB0bWluID0gKENIQVIpIHo7IGVs c2UgbXlycHRxID0gKENIQVIpIHo7CisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/SWxsZWdh bCB2YWx1ZSBmb3IgcHJlZml4IGNoYXJhY3RlclxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisj aWZuZGVmIE5PU1BMCisgICAgICBjYXNlIFhZQUxSTTogeworI2lmbmRlZiBDT01NRU5UCisgICAg ICAgICAgaW50IHl5OworICAgICAgICAgIGxvbmcgeno7CisgICAgICAgICAgenogPSAtMUw7Cisg ICAgICAgICAgeXkgPSB4X2lmbnVtOworICAgICAgICAgIHhfaWZudW0gPSAxOyAgICAgICAgICAg ICAgICAgIC8qIFR1cm4gb2ZmIGludGVybmFsIGNvbXBsYWludHMgKi8KKyAgICAgICAgICB5ID0g Y21udW0oIlNlY29uZHMgZnJvbSBub3csIG9yIHRpbWUgb2YgZGF5IGFzIGhoOm1tOnNzIiwKKyAg ICAgICAgICAgICAgICAgICAgIjAiICwxMCwgJngsIHh4c3RyaW5nKTsKKyAgICAgICAgICB4X2lm bnVtID0geXk7CisgICAgICAgICAgaWYgKHkgPCAwKSB7CisgICAgICAgICAgICAgIGlmICh5ID09 IC0yKSB7ICAgICAgICAgICAgLyogSW52YWxpZCBudW1iZXIgb3IgZXhwcmVzc2lvbiAqLworICAg ICAgICAgICAgICAgICAgenogPSB0b2Qyc2VjKGF0bWJ1Zik7IC8qIENvbnZlcnQgdG8gc2VjcyBz aW5jZSBtaWRuaWdodCAqLworICAgICAgICAgICAgICAgICAgaWYgKHp6IDwgMEwpIHsKKyAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9OdW1iZXIsIGV4cHJlc3Npb24sIG9yIHRpbWUgb2Yg ZGF5IHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyIG5vd1sz Ml07ICAgICAvKiBDdXJyZW50IHRpbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICpw OworICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdG5vdzsKKyAgICAgICAgICAgICAgICAgICAg ICBwID0gbm93OworICAgICAgICAgICAgICAgICAgICAgIHp0aW1lKCZwKTsKKyAgICAgICAgICAg ICAgICAgICAgICB0bm93ID0gYXRvbChwKzExKSAqIDM2MDBMICsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOworICAgICAgICAgICAgICAgICAg ICAgIGlmICh6eiA8IHRub3cpICAgIC8qIFVzZXIncyB0aW1lIGJlZm9yZSBub3cgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIHp6ICs9IDg2NDAwTDsgICAvKiBTbyBtYWtlIGl0IHRvbW9ycm93 ICovCisgICAgICAgICAgICAgICAgICAgICAgenogLT0gdG5vdzsgICAgICAgLyogU2Vjb25kcyBm cm9tIG5vdy4gKi8KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBlbHNlCisg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoeCA8 IDApIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCI/QWxhcm0gdGltZSBpcyBpbiB0aGUgcGFzdC5c biIpOworICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyAgICAgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICBpZiAoenogPiAtMUwp IHsgICAgICAgICAgICAgICAvKiBUaW1lIG9mIGRheSBnaXZlbj8gKi8KKyAgICAgICAgICAgICAg eCA9IHp6OworICAgICAgICAgICAgICBpZiAoenogIT0gKGxvbmcpIHgpIHsKKyAgICAgICAgICAg ICAgICAgIHByaW50ZigKKyJTb3JyeSwgYXJpdGhtZXRpYyBvdmVyZmxvdyAtIGhoOm1tOnNzIG5v dCB1c2FibGUgb24gdGhpcyBwbGF0Zm9ybS5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgfQorICAgICAg ICAgIH0KKyAgICAgICAgICByZXR1cm4oc2V0YWxhcm0oKGxvbmcpeCkpOworICAgICAgfQorI2Vs c2UKKy8qCisgIFRoaXMgaXMgdG8gYWxsb3cgbG9uZyB2YWx1ZXMgd2hlcmUgaW50IGFuZCBsb25n IGFyZSBub3QgdGhlIHNhbWUsIGUuZy4KKyAgb24gMTYtYml0IHN5c3RlbXMuICBCdXQgc29tZXRo aW5nIGlzIHdyb25nIHdpdGggaXQuCisqLworICAgICAgICBpZiAoKHkgPSBjbXR4dCgic2Vjb25k cyBmcm9tIG5vdyIsICIwIiwgJnMsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5 KTsKKyAgICAgICAgaWYgKHJkaWdpdHMocykpIHsKKyAgICAgICAgICAgIHJldHVybihzZXRhbGFy bShhdG9sKHMpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoIiVzIC0g bm90IGEgbnVtYmVyXG4iLHMpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZF UgorICAgICAgY2FzZSBYWVBST1RPOgorICAgICAgICByZXR1cm4oc2V0cHJvdG8oKSk7CisjZW5k aWYgLyogTk9YRkVSICovCisKKy8qCisgIEMtS2VybWl0IHVucHJlZml4ZXMgY29udHJvbCBjaGFy YWN0ZXJzIGF1dG9tYXRpY2FsbHkgb24gbmV0d29yayBjb25uZWN0aW9ucworICBpZiBDTEVBUi1D SEFOTkVMIGlzIE9OLCB3aGljaCBpdCBpcyBieSBkZWZhdWx0LiAgQnV0IG5vdCBhbGwgbmV0d29y aworICBjb25uZWN0aW9ucyBhcmUgdHJhbnNwYXJlbnQgdG8gYWxsIGNvbnRyb2wgY2hhcmFjdGVy cy4gIEZvciBleGFtcGxlLCB0aGUKKyAgREVDLTIwLCBldmVuIHdoZW4geW91IFRFTE5FVCB0byBp dCwgaXMgc2Vuc2l0aXZlIHRvIEN0cmwtTyBhbmQgQ3RybC1ULgorICBJZiB5b3UgdGVsbCBDLUtl cm1pdCB0byBTRVQgQ09OVFJPTCBQUkVGSVggMTUgYW5kL29yIDIwLCBpdCBkb2Vzbid0IGhlbHAK KyAgYmVjYXVzZSBDTEVBUi1DSEFOTkVMIGlzIHN0aWxsIGluIGVmZmVjdC4gIElmIHRoZSB1c2Vy IGdvZXMgdG8gdGhlIHRyb3VibGUKKyAgdG8gc2V0IHVwIHNvbWUgcHJlZml4aW5nLCB0aGVuIEtl cm1pdCBzaG91bGQgZG8gd2hhdCB0aGUgdXNlciBzYWlkLiAgSW4KKyAgQy1LZXJtaXQgNy4xIEFs cGhhLjAzIHdlIGNoYW5nZSB0aGUgY29kZSB0byBzZXQgY2xlYXJycSB0byAwIGlmIHRoZSB1c2Vy CisgIGdpdmVzIGEgU0VUIFBSRUZJWElORyBvciBTRVQgQ09OVFJPTCBQUkVGSVggY29tbWFuZC4K KyovCisKKyNpZmRlZiBDS19TUEVFRAorICAgICAgY2FzZSBYWVBSRUZJWDogeworI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICBleHRlcm4gaW50IGNsZWFycnE7CisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgICAgICAgIGlmICgoeiA9IGNta2V5KHBmeHRhYiwgNCwgImNvbnRyb2wtY2hhcmFjdGVy IHByZWZpeGluZyBvcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICIiLCB4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICBjbGVhcnJxID0gMDsgICAgICAgICAgICAg ICAgICAvKiAxOTkgKi8KKyAgICAgICAgICBzZXRwcmVmaXgoeik7CisjaWZkZWYgQ09NTUVOVAor ICAgICAgICAgIGlmIChoaW50cyAmJiAoeiA9PSBQWF9BTEwgfHwgeiA9PSBQWF9DQVUpICYmIGNs ZWFycnEpIHsKKyAgICAgICAgcHJpbnRmKCJIaW50OiBVc2UgU0VUIENMRUFSLUNIQU5ORUwgT0ZG IHRvIGRpc2FibGUgbmVnb3RpYXRpb24gb2ZcbiIpOworICAgICAgICBwcmludGYoIiAgICAgIFNF VCBQUkVGSVhJTkcgTk9ORSBkdXJpbmcgZmlsZSB0cmFuc2ZlcnMgb24gcmVsaWFibGVcbiIpOwor ICAgICAgICBwcmludGYoIiAgICAgIGNvbm5lY3Rpb25zLlxuIik7CisgICAgICAgICAgfQorI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAg fQorI2VuZGlmIC8qIENLX1NQRUVEICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgWFlM T0dJTjoKKyAgICAgICAgaWYgKCh6ID0gY21rZXkobG9naW50YWIsIDMsICJ2YWx1ZSBmb3IgbG9n aW4gc2NyaXB0IiwidXNlcmlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICB4ID0gY21kZ3F1bygpOworICAgICAg ICBpZiAoeiA9PSBMT0dJX1BTVykKKyAgICAgICAgICBjbWRzcXVvKDApOworICAgICAgICBpZiAo KHkgPSBjbXR4dCgidGV4dCIsIiIsICZzLCBOVUxMKSkgPCAwKSB7CisgICAgICAgICAgICBjbWRz cXVvKHgpOworICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICB9CisgICAgICAgIGNtZHNx dW8oeCk7CisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIHMgPSBicnN0cmlw KHMpOworICAgICAgICBpZiAoKGludClzdHJsZW4ocykgPiA2MykgeworICAgICAgICAgICAgcHJp bnRmKCJTb3JyeSwgdG9vIGxvbmdcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAg ICAgfQorICAgICAgICBzd2l0Y2goeikgeworICAgICAgICAgIGNhc2UgTE9HSV9VSUQ6CisgICAg ICAgICAgICBja3N0cm5jcHkodWlkYnVmLHMsVUlEQlVGTEVOKTsKKyAgICAgICAgICAgIHNsX3Vp ZF9zYXZlZCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIExPR0lfUFNX OgorICAgICAgICAgICAgY2tzdHJuY3B5KHB3YnVmLHMsUFdCVUZMKTsKKyAgICAgICAgICAgIGlm IChwd2J1ZlswXSkgeworICAgICAgICAgICAgICAgIHB3ZmxnID0gMTsKKyNpZmRlZiBPUzIKKyAg ICAgICAgICAgICAgICBwd2NyeXB0ID0gMTsKKyNlbHNlIC8qIE9TMiAqLworICAgICAgICAgICAg ICAgIHB3Y3J5cHQgPSAwOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgfQorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBMT0dJX1BSTToKKyAgICAgICAgICAgIGNrc3Ry bmNweShwcm1idWYscyxQV0JVRkwpOworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB9CisKKyAgICBzd2l0Y2ggKHh4KSB7CisK KyAgICAgIGNhc2UgWFlTVEFSVFVQOgorICAgICAgICBpZiAoKHkgPSBjbWtleShpZmR0YWIsMiwi IiwiZGlzY2FyZCIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIERlbGV0ZVN0YXJ0dXBGaWxlID0gKHkg IT0gMCkgPyAwIDogMTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2Fz ZSBYWVRNUERJUjoKKyAgICAgICAgeCA9IGNtZGlyKCJOYW1lIG9mIHRlbXBvcmFyeSBkaXJlY3Rv cnkiLCIiLCZzLHh4c3RyaW5nKTsKKyAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAgcyA9 ICIiOworICAgICAgICBlbHNlIGlmICh4IDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBtYWtlc3RyKCZ0 ZW1wZGlyLHMpOworICAgICAgICByZXR1cm4odGVtcGRpciA/IDEgOiAwKTsKKworI2lmbmRlZiBO T1hGRVIKKyAgICAgIGNhc2UgWFlERVNUOiAgICAgICAgICAgICAgICAgICAgICAvKiBERVNUSU5B VElPTiAqLworICAgICAgICByZXR1cm4oc2V0ZGVzdCgpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8K KworI2lmbmRlZiBOT1BVU0gKKyNpZm5kZWYgTk9GUklMTFMKKworLyogRWRpdG9yLCBCcm93c2Vy LCBhbmQgRlRQIENsaWVudCAqLworCisgICAgICBjYXNlIFhZRURJVDogICAgICAgICAgICAgICAg ICAgICAgLyogRURJVE9SICovCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsK KyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NE ICovCisjaWZkZWYgQ0tfQVBDCisgICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJlIHNldCByZW1v dGVseSAqLworICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAorICAgICAgICAg ICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkK KyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworCisj aWZkZWYgT1MyT1JVTklYCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKnAgPSBnZXRlbnYo IlBBVEgiKTsKKyAgICAgICAgICAgIGNoYXIgKmU7CisgICAgICAgICAgICBlID0gZWRpdG9yWzBd ID8gKGNoYXIgKikgZWRpdG9yIDogZ2V0ZW52KCJFRElUT1IiKTsKKyAgICAgICAgICAgIGlmICgh ZSkgZSA9ICIiOworICAgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAgIHggPSBjbWlmaXAo Ik5hbWUgb2YgcHJlZmVycmVkIGVkaXRvciIsZSwmcywmeSwwLHAseHhzdHJpbmcpOworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICB4ID0gY21pZmkoIkZ1bGwgcGF0aCBvZiBwcmVmZXJy ZWQgZWRpdG9yIixlLCZzLCZ5LHh4c3RyaW5nKTsKKyAgICAgICAgICAgIGlmICh4IDwgMCAmJiB4 ICE9IC0zKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyNlbHNlCisjaWZk ZWYgVk1TCisgICAgICAgIGlmICgoeSA9IGNtdHh0KCJEQ0wgY29tbWFuZCBmb3IgZWRpdGluZyIs ICJlZGl0IiwgJnMsIE5VTEwpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh4ICE9IC0zKQorICAg ICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGlmICgoeCA9 IGNtaWZpKCJGdWxsIHBhdGggb2YgcHJlZmVycmVkIGVkaXRvciIsIiIsJnMsJnkseHhzdHJpbmcp KTwwKSB7CisgICAgICAgICAgICBpZiAoeCAhPSAtMykKKyAgICAgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisj aWZkZWYgVk1TCisgICAgICAgIGNrc3RybmNweShlZGl0b3IscyxDS01BWFBBVEgpOworICAgICAg ICBlZGl0b3B0c1swXSA9IE5VTDsKKyNlbHNlCisgICAgICAgIGlmICh5ICE9IDApIHsKKyAgICAg ICAgICAgIHByaW50ZigiP0Egc2luZ2xlIGZpbGUgcGxlYXNlXG4iKTsKKyAgICAgICAgICAgIHJl dHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVop OworICAgICAgICBpZiAoKHggPSBjbXR4dCgiZWRpdG9yIGNvbW1hbmQtbGluZSBvcHRpb25zIiwi IiwmcyxOVUxMKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgY2tzdHJuY3B5 KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHopOworICAgICAgICBpZiAobGluZVswXSkgeworICAgICAgICAgICAgemZucWZwKGxpbmUs Q0tNQVhQQVRILGVkaXRvcik7CisgICAgICAgICAgICBja3N0cm5jcHkoZWRpdG9wdHMsdG1wYnVm LDEyOCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlZGl0b3JbMF0gPSBOVUw7Cisg ICAgICAgICAgICBlZGl0b3B0c1swXSA9IE5VTDsKKyAgICAgICAgfQorI2VuZGlmIC8qIFZNUyAq LworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisjaWZuZGVmIE5PRlRQCisjaWZuZGVm IFNZU0ZUUAorI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgY2FzZSBYWUZUUFg6CisgICAgICAgIHJl dHVybihkb3NldGZ0cCgpKTsgICAgICAgICAgICAgLyogU0VUIEZUUCAqLworI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworI2VuZGlmIC8qIFNZU0ZUUCAqLworI2VuZGlmIC8qIE5PRlRQICovCisKKyNp ZmRlZiBCUk9XU0VSCisjaWZuZGVmIE5PRlRQCisjaWZkZWYgU1lTRlRQCisgICAgICBjYXNlIFhZ RlRQOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIEZUUC1DTElFTlQgKi8KKyNlbmRpZiAv KiBTWVNGVFAgKi8KKyNlbmRpZiAvKiBOT0ZUUCAqLworICAgICAgY2FzZSBYWUJST1dTRTogICAg ICAgICAgICAgICAgICAgIC8qIFNFVCBCUk9XU0VSICovCisgICAgICAgIHsKKyAgICAgICAgICAg IGNoYXIgKnAgPSBnZXRlbnYoIlBBVEgiKTsKKyAgICAgICAgICAgIGNoYXIgKmFwcCA9IChjaGFy ICopIGJyb3dzZXIsICpvcHRzID0gKGNoYXIgKikgYnJvd3NvcHRzOworI2lmbmRlZiBOT0ZUUAor I2lmZGVmIFNZU0ZUUAorICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZnRwYXBwW10sIGZ0cG9wdHNb XTsKKyAgICAgICAgICAgIGlmICh4eCA9PSBYWUZUUCkgeworICAgICAgICAgICAgICAgIGFwcCA9 IChjaGFyICopZnRwYXBwOworICAgICAgICAgICAgICAgIG9wdHMgPSAoY2hhciAqKWZ0cG9wdHM7 CisgICAgICAgICAgICB9CisjZW5kaWYgLyogU1lTRlRQICovCisjZW5kaWYgLyogTk9GVFAgKi8K KyNpZmRlZiBJS1NECisgICAgICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICov CisjaWZkZWYgQ0tfQVBDCisgICAgICAgICAgICAvKiBEb24ndCBsZXQgdGhpcyBiZSBzZXQgcmVt b3RlbHkgKi8KKyAgICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAg ICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBD X1VOQ0gpKSkKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBD S19BUEMgKi8KKyNpZmRlZiBPUzJPUlVOSVgKKyAgICAgICAgICAgIGlmIChwKQorICAgICAgICAg ICAgICB4ID0gY21pZmlwKHh4ID09IFhZQlJPV1NFID8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAiTmFtZSBvZiBwcmVmZXJyZWQgYnJvd3NlciIgOgorICAgICAgICAgICAgICAgICAgICAgICAg ICJOYW1lIG9mIHByZWZlcnJlZCBmdHAgY2xpZW50IiwKKyNpZmRlZiBPUzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICB4eCA9PSBYWUZUUCA/ICJmdHAuZXhlIiA6ICIiCisjZWxzZQorICAgICAg ICAgICAgICAgICAgICAgICAgIHh4ID09IFhZRlRQID8gImZ0cCIgOiAiIgorI2VuZGlmIC8qIE9T MiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICwmcywmeSwwLHAseHhzdHJpbmcKKyAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB4 ID0gY21pZmkoeHggPT0gWFlCUk9XU0UgPworICAgICAgICAgICAgICAgICAgICAgICAgIkZ1bGwg cGF0aCBvZiBwcmVmZXJyZWQgYnJvd3NlciIgOgorICAgICAgICAgICAgICAgICAgICAgICAgIkZ1 bGwgcGF0aCBvZiBwcmVmZXJyZWQgZnRwIGNsaWVudCIsCisgICAgICAgICAgICAgICAgICAgICAg ICAiIiwmcywmeSx4eHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIGlmICh4IDwgMCAmJiB4ICE9IC0zKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisjZWxz ZQorI2lmZGVmIFZNUworICAgICAgICAgICAgaWYgKCh4ID0gY210eHQoIkRDTCBjb21tYW5kIHRv IHN0YXJ0IHlvdXIgcHJlZmVycmVkIFdlYiBicm93c2VyIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICIiLCAmcywgTlVMTCkpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ICE9IC0z KQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgfQorI2Vsc2UKKyAg ICAgICAgICAgIGlmICgoeCA9IGNtaWZpKCJGdWxsIHBhdGggb2YgcHJlZmVycmVkIGJyb3dzZXIi LCIiLCZzLCZ5LHh4c3RyaW5nKQorICAgICAgICAgICAgICAgICApIDwgMCkgeworICAgICAgICAg ICAgICAgIGlmICh4ICE9IC0zKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworI2lmZGVm IFZNUworICAgICAgICAgICAgY2tzdHJuY3B5KGFwcCxzLENLTUFYUEFUSCk7CisgICAgICAgICAg ICAqb3B0cyA9IE5VTDsKKyNlbHNlCisgICAgICAgICAgICBpZiAoeSAhPSAwKSB7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/QSBzaW5nbGUgZmlsZSBwbGVhc2VcbiIpOworICAgICAgICAgICAg ICAgIHJldHVybigtMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7CisgICAgICAgICAgICBpZiAoKHggPSBjbXR4dCh4eCA9PSBYWUJST1dT RSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJvd3NlciBjb21tYW5kLWxpbmUgb3B0 aW9ucyIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImZ0cCBjbGllbnQgY29tbWFuZC1s aW5lIG9wdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMsTlVMTCkKKyAg ICAgICAgICAgICAgICAgKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg ICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOworICAgICAgICAgICAgaWYgKCh6ID0g Y21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAgICBpZiAobGluZVswXSkgeworICAg ICAgICAgICAgICAgIHpmbnFmcChsaW5lLENLTUFYUEFUSCxhcHApOworICAgICAgICAgICAgICAg IGNrc3RybmNweShvcHRzLCB0bXBidWYsIDEyOCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICphcHAgPSBOVUw7CisgICAgICAgICAgICAgICAgKm9wdHMgPSBOVUw7Cisg ICAgICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworICAgICAgICB9CisjZW5kaWYgLyogQlJPV1NFUiAqLworI2VuZGlmIC8qIE5PRlJJ TExTICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZmRlZiBDS19DVFJMWgorICAgICAgY2Fz ZSBYWUVPRjogeyAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBFT0YgKi8KKyAgICAgICAgICBl eHRlcm4gaW50IGVvZm1ldGhvZDsgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZW9mdGFiW107CisgICAg ICAgICAgaWYgKCh4ID0gY21rZXkoZW9mdGFiLDMsImVuZC1vZi1maWxlIGRldGVjdGlvbiBtZXRo b2QiLCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICBlb2ZtZXRob2QgPSB4OworICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogQ0tfQ1RSTFogKi8KKworI2lm ZGVmIFNFU0xJTUlUCisgICAgICBjYXNlIFhZTElNSVQ6IHsgIC8qIFNlc3Npb24tTGltaXQgKGxl bmd0aCBvZiBzZXNzaW9uIGluIHNlY29uZHMpICovCisgICAgICAgICAgZXh0ZXJuIGludCBzZXNs aW1pdDsKKyNpZmRlZiBPUzIKKyAgICAgICAgICBleHRlcm4gaW50IGRvd25sb2FkZWQ7CisjZW5k aWYgLyogT1MyICovCisgICAgICAgICAgeSA9IGNtbnVtKCJNYXhpbXVtIGxlbmd0aCBvZiBzZXNz aW9uLCBzZWNvbmRzIiwiMCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICAgIGlmIChpbnNlcnZl ciAmJgorI2lmZGVmIElLU0RDT05GCisgICAgICAgICAgICAgIGlrc2RjZgorI2Vsc2UKKyAgICAg ICAgICAgICAgMQorI2VuZGlmIC8qIElLU0RDT05GICovCisjaWZkZWYgT1MyCisgICAgICAgICAg ICAgICB8fCBkb3dubG9hZGVkCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICkgewor ICAgICAgICAgICAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0 dXJuKHopOworICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5c clxuIik7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgfQor ICAgICAgICAgIHJldHVybihzZXRudW0oJnNlc2xpbWl0LHgseSw4NjQwMCkpOworICAgICAgfQor I2VuZGlmIC8qIFNFU0xJTUlUICovCisKKyAgICAgIGNhc2UgWFlSRUxZOiB7ICAgICAgICAgICAg ICAgICAgICAvKiBTRVQgUkVMSUFCTEUgKi8KKyAgICAgICAgICBpZiAoKHggPSBjbWtleShvb2F0 YWIsMywiIiwiYXV0b21hdGljIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAg ICByZWxpYWJsZSA9IHg7CisgICAgICAgICAgc2V0cmVsaWFibGUgPSAoeCAhPSBTRVRfQVVUTyk7 CisgICAgICAgICAgZGVidWcoRjEwMSwiU0VUIFJFTElBQkxFIHJlbGlhYmxlIiwiIixyZWxpYWJs ZSk7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKworI2lmZGVmIFNU UkVBTUlORworICAgICAgY2FzZSBYWVNUUkVBTTogeyAgICAgICAgICAgICAgICAgIC8qIFNFVCBT VFJFQU1JTkcgKi8KKyAgICAgICAgICBleHRlcm4gaW50IHN0cmVhbXJxOworICAgICAgICAgIGlm ICgoeCA9IGNta2V5KG9vYXRhYiwzLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHkpOworICAgICAgICAgIHN0cmVhbXJxID0geDsKKyAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworICAgICAgfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisjaWZkZWYgQ0tTWVNM T0cKKyAgICAgIGNhc2UgWFlTWVNMOiB7CisgICAgICAgICAgaWYgKCh4ID0gY21rZXkoc3lzbG9n dGFiLG5zeXNsb2csIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZkZWYgSUtT RAorICAgICAgICAgIGlmIChpbnNlcnZlciAmJgorI2lmZGVmIElLU0RDT05GCisgICAgICAgICAg ICAgIGlrc2RjZgorI2Vsc2UKKyAgICAgICAgICAgICAgMQorI2VuZGlmIC8qIElLU0RDT05GICov CisgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29tbWFu ZCBkaXNhYmxlZC5cbiIpOworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAg ICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgQ0tfQVBDCisgICAgICAgICAgLyog RG9uJ3QgbGV0IHRoaXMgYmUgc2V0IHJlbW90ZWx5ICovCisgICAgICAgICAgaWYgKGFwY2FjdGl2 ZSA9PSBBUENfTE9DQUwgfHwKKyAgICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RF ICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisjZW5kaWYgLyogQ0tfQVBDICovCisgICAgICAgICAgY2t4c3lzbG9nID0geDsKKyAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9H ICovCisKKyNpZmRlZiBUTE9HCisgICAgICBjYXNlIFhZVExPRzogeyAgICAgICAgICAgICAgICAg ICAgLyogU0VUIFRSQU5TQUNUSU9OLUxPRyAqLworICAgICAgICAgIGV4dGVybiBpbnQgdGxvZ3Nl cDsKKyAgICAgICAgICBpZiAoKHggPSBjbWtleSh2YnRhYixudmIsIiIsInZlcmJvc2UiLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICh4ID09IDAp IHsKKyAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoImZpZWxkIHNlcGFyYXRvciIsIiwiLCZz LE5VTEwpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7Cisg ICAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgICAgICAgaWYgKHNbMV0pIHsKKyAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9BIHNpbmdsZSBjaGFyYWN0ZXIsIHBsZWFzZS5c biIpOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKCgqcyA+PSAnMCcgJiYgKnMgPD0gJzknKSB8fAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoKnMgPj0gJ0EnICYmICpzIDw9ICdaJykgfHwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCpzID49ICdhJyAmJiAqcyA8PSAneicpKSB7CisgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCI/QSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlciwgcGxlYXNlLlxu Iik7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAg IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0bG9nc2VwID0gKnM7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKKyAgICAgICAgICB9CisjaWZkZWYgSUtTRAorICAgICAgICAgIGlmIChp bnNlcnZlciAmJiBpc2d1ZXN0KSB7CisgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21t YW5kIGRpc2FibGVkLlxuIik7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBDS19BUEMKKyAgICAgICAgICAv KiBEb24ndCBsZXQgdGhpcyBiZSBzZXQgcmVtb3RlbHkgKi8KKyAgICAgICAgICBpZiAoYXBjYWN0 aXZlID09IEFQQ19MT0NBTCB8fAorICAgICAgICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1P VEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKQorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyAgICAgICAgICB0bG9nZm10ID0geDsKKyAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorI2VuZGlmIC8qIFRMT0cgKi8K KworICAgICAgY2FzZSBYWUNMRUFSOiB7ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBDTEVBUkNI QU5ORUwgKi8KKyAgICAgICAgICBpZiAoKHggPSBjbWtleShvb2F0YWIsMywiIiwiYXV0b21hdGlj Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICBjbGVhcnJxID0geDsKKyAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorCisjaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KKyAgICAgIGNhc2UgWFlBVVRIOiB7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQg QVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICAgIGludCBrdiA9 IDA7CisgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7CisjZW5kaWYg LyogQ0tfS0VSQkVST1MgKi8KKyAgICAgICAgICBjaGFyICogcCA9IE5VTEw7CisgICAgICAgICAg aWYgKCh4ID0KKyAgICAgICAgICAgICAgIGNta2V5KHNldGF1dGgsbnNldGF1dGgsImF1dGhlbnRp Y2F0aW9uIHR5cGUiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICAgIHN3aXRjaCAoeCkgeworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgICAgICAgICBj YXNlIEFVVEhfS1JCNDoga3YgPSA0OyBicmVhazsgLyogRG9uJ3QgYXNzdW1lIHZhbHVlcyBhcmUg c2FtZSAqLworICAgICAgICAgICAgY2FzZSBBVVRIX0tSQjU6IGt2ID0gNTsgYnJlYWs7CisjZW5k aWYgLyogQ0tfS0VSQkVST1MgKi8KKyNpZmRlZiBDS19TUlAKKyAgICAgICAgICAgIGNhc2UgQVVU SF9TUlA6IGJyZWFrOworI2VuZGlmIC8qIENLX1NSUCAqLworI2lmZGVmIENLX1NTTAorICAgICAg ICAgICAgY2FzZSBBVVRIX1NTTDoKKyAgICAgICAgICAgIGNhc2UgQVVUSF9UTFM6CisgICAgICAg ICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgICAgcHJpbnRmKCI/QXV0aG9yaXphdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQg eWV0IC0gXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICAgYXRtYnVmKTsKKyAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICB9CisjaWZkZWYgSUtTRAorICAgICAgICAgIGlm IChpbnNlcnZlciAmJgorI2lmZGVmIElLU0RDT05GCisgICAgICAgICAgICAgIGlrc2RjZgorI2Vs c2UKKyAgICAgICAgICAgICAgMQorI2VuZGlmIC8qIElLU0RDT05GICovCisgICAgICAgICAgICAg ICkgeworICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXG4iKTsKKyAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICB9CisjZW5kaWYgLyogSUtT RCAqLworI2lmZGVmIENLX0FQQworICAgICAgICAgIC8qIERvbid0IGxldCB0aGlzIGJlIHNldCBy ZW1vdGVseSAqLworICAgICAgICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAg ICAgICAgICAgIGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VO Q0gpKSB7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwor ICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgIH0KKyNlbmRpZiAv KiBDS19BUEMgKi8KKworICAgICAgICAgIHN3aXRjaCh4KSB7CisjaWZkZWYgQ0tfS0VSQkVST1MK KyAgICAgICAgICAgIGNhc2UgQVVUSF9LUkI0OgorICAgICAgICAgICAgY2FzZSBBVVRIX0tSQjU6 IHsKKyAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleShrdiA9PSA0ID8gazR0YWIgOiBrNXRh YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdiA9PSA0ID8gbms0dGFiIDogbms1 dGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLZXJiZXJvcyBwYXJhbWV0ZXIi LCIiLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcyA9ICIiOworICAgICAgICAgICAgICAg IHN3aXRjaCAoeCkgeworI2lmZGVmIEtSQjQKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJE Qkc6CisgICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKHkgPSBzZXRvbigmazRkZWJ1ZykpIDwgMCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKHkpOworI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgICAgICAgICBj a19rcmI0X2RlYnVnKGs0ZGVidWcpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEtS QjQgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJMSUY6CisgICAgICAgICAgICAgICAg ICAgIGlmICgoeSA9IGNtbnVtKCJUR1QgbGlmZXRpbWUiLCI2MDAiLDEwLCZ6LHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCUFJFOgorICAgICAgICAgICAg ICAgICAgICBpZiAoa3YgPT0gNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0g c2V0b24oJmtyYjRfZF9wcmVhdXRoKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQklOUzoKKyAgICAgICAg ICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIkluc3RhbmNlIG5hbWUiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCRldEOgorICAgICAgICAg ICAgICAgICAgICBpZiAoa3YgPT0gNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5 ID0gc2V0b24oJmtyYjVfZF9mb3J3YXJkYWJsZSkpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJQUlg6Cisg ICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKHkgPSBzZXRvbigma3JiNV9kX3Byb3hpYWJsZSkpIDwgMCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJS Tlc6CisgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJUR1QgcmVuZXdhYmxlIGxp ZmV0aW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiLDEwLCZ6LHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCQURSOgorICAg ICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCh5ID0gc2V0b24oJmtyYjVfY2hlY2thZGRycykpIDwgMCkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjRfY2hlY2thZGRycykpIDwgMCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBY WUtSQk5BRDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDUpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgoeSA9IHNldG9uKCZrcmI1X2Rfbm9fYWRkcmVzc2VzKSkgPCAwKQor ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZ S1JCQUREOgorICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqIHRtcGFkZHJzW0tSQjVfTlVNX09GX0FERFJTXTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBLUkI1X05VTV9PRl9BRERSUzsgaSsrKQor ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBhZGRyc1tpXSA9IE5VTEw7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmICgoeSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNt ZmxkKCJMaXN0IG9mIElQIGFkZHJlc3NlcyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h a2VsaXN0KHMsdG1wYWRkcnMsS1JCNV9OVU1fT0ZfQUREUlMpOworICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJTOyBpKyspIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcGFkZHJzW2ldICE9IE5VTEwpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh0bXBhZGRyc1tpXSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo aSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPCBLUkI1X05VTV9PRl9BRERS UyAmJiB0bXBhZGRyc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZXRfYWRkcih0bXBhZGRyc1tpXSkgPT0g MHhmZmZmZmZmZikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImlu dmFsaWQgaXAgYWRkcmVzczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0bXBhZGRyc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBLUkI1X05VTV9PRl9BRERSUzsgaSsrKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAodG1wYWRkcnNbaV0gIT0gTlVMTCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSh0bXBhZGRyc1tpXSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpIDwgS1JCNV9OVU1fT0ZfQUREUlMgJiYga3JiNV9kX2Fk ZHJzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKyspIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoa3JiNV9kX2FkZHJzW2ldKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZnJlZShrcmI1X2RfYWRkcnNbaV0pOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGtyYjVfZF9hZGRyc1tpXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpIDwgS1JCNV9OVU1fT0ZfQUREUlMgJiYgdG1wYWRkcnNbaV07CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGtyYjVfZF9hZGRyc1tpXSA9IHRtcGFkZHJzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRtcGFkZHJzW2ldID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgIGtyYjVfZF9hZGRyc1tpXSA9IE5VTEw7CisgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JC R0VUOgorICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjVfYXV0b2dldCkpIDwgMCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjRfYXV0b2dldCkpIDwg MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz ZSBYWUtSQkRFTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh6ID0gY21rZXkoa2Rlc3RhYixu a2Rlc3RhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF1dG8gRGVzdHJv eSBUaWNrZXRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldmVyIix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQlBSOgorICAg ICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiVXNlciBJRCIsdWlkYnVmLCZzLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCUkw6CisgICAgICAg ICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJOYW1lIG9mIHJlYWxtIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtSQktUQjoKKyAgICAgICAg ICAgICAgICAgICAgeSA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJnoseHhzdHJpbmcpOworICAg ICAgICAgICAgICAgICAgICBpZiAoeSAhPSAtMykgeworICAgICAgICAgICAgICAgICAgICAgICBp ZiAoeSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgICAgICAgICAgICBpZiAoeikgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigi P1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBYWUtS QkNDOgorICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbW9maSgiRmlsZW5hbWUiLCIiLCZz LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCU1JWOgor ICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiTmFtZSBvZiBzZXJ2aWNlIHRvIHVz ZSBpbiB0aWNrZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa3YgPT0g NCA/ICJyY21kIiA6ICJob3N0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSA8IDApCisgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGNhc2UgWFlLUkJLNUs0OgorICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJmtyYjVfZF9nZXRrNCkpIDwg MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgIGNhc2UgWFlLUkJQUk06ICAgICAgICAvKiBQcm9tcHQgKi8KKyAgICAgICAgICAgICAg ICAgICAgaWYgKCh6ID0gY21rZXkoa3JicHJtdGFiLDIsIiIsIiIseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgICAgICAgICAgICBpZiAo KHkgPSBjbXR4dCgoeiA9PSBLUkJfUFdfUFJNKSA/CisgICJUZXh0IG9mIHByb21wdDtcbm1heSBj b250YWluIFwiJXNcIiB0byBiZSByZXBsYWNlZCBieSBwcmluY2lwYWwgbmFtZSIgOgorICAiVGV4 dCBvZiBwcm9tcHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCkKKyAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAg ICAgICAgICAgICAgcyA9IGxpbmU7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworI2lmZGVmIElLU0QKKyAgICAgICAg ICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYKKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAgICAgICAg ICAgICBpa3NkY2YKKyNlbHNlIC8qIElLU0RDT05GICovCisgICAgICAgICAgICAgICAgICAgIDEK KyNlbmRpZiAvKiBJS1NEQ09ORiAqLworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIElLU0QgKi8KKworICAgICAg ICAgICAgICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgIC8qIENvcHkgdmFsdWUgdG8gcmlnaHQg cGxhY2UgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJMSUY6ICAgICAgICAvKiBMaWZl dGltZSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkKKyAgICAgICAgICAgICAg ICAgICAgICBrcmI0X2RfbGlmZXRpbWUgPSB6OworICAgICAgICAgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgICAgICAga3JiNV9kX2xpZmV0aW1lID0gejsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCUk5XOgorICAgICAgICAg ICAgICAgICAgICBpZiAoa3YgPT0gNSkKKyAgICAgICAgICAgICAgICAgICAgICBrcmI1X2RfcmVu ZXdhYmxlID0gejsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICBjYXNlIFhZS1JCUFI6ICAgICAgICAgLyogUHJpbmNpcGFsICovCisgICAgICAgICAgICAgICAg ICAgIHMgPSBicnN0cmlwKHMpOwkvKiBTdHJpcCBicmFjZXMgYXJvdW5kLiAqLworICAgICAgICAg ICAgICAgICAgICBpZiAoa3YgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZr cmI0X2RfcHJpbmNpcGFsLHMpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigma3JiNV9kX3ByaW5jaXBhbCxzKTsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCSU5TOiAgICAgICAgLyog SW5zdGFuY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDQpCisgICAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigma3JiNF9kX2luc3RhbmNlLHMpOworICAgICAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigma3JiNV9kX2luc3RhbmNl LHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug WFlLUkJSTDogICAgICAgICAvKiBSZWFsbSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoa3Yg PT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI0X2RfcmVhbG0scyk7Cisg ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZr cmI1X2RfcmVhbG0scyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgY2FzZSBYWUtSQktUQjogICAgICAgIC8qIEtleSBUYWJsZSAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoa3YgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrNF9r ZXl0YWIscyk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg ICBtYWtlc3RyKCZrNV9rZXl0YWIscyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgY2FzZSBYWUtSQkNDOiAgICAgICAgIC8qIENyZWRlbnRpYWxzIGNhY2hl ICovCisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjVfZF9jYyxzKTsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZS1JCU1JWOiAgICAg ICAgLyogU2VydmljZSBOYW1lICovCisgICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA0KQor ICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmtyYjRfZF9zcnYscyk7CisgICAgICAgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZrcmI1X2Rfc3J2 LHMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug WFlLUkJERUw6CisgICAgICAgICAgICAgICAgICAgIGlmIChrdiA9PSA1KQorICAgICAgICAgICAg ICAgICAgICAgIGtyYjVfYXV0b2RlbCA9IHo7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICAgICAgICBrcmI0X2F1dG9kZWwgPSB6OworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlLUkJQUk06ICAgICAgICAvKiBQcm9t cHQgKi8KKwkJICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KHopIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtSQl9QV19QUk06IHsgLyogUGFzc3dv cmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCB0aGVyZSBhcmUg bm8gbW9yZSB0aGFuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHR3byAlIGZpZWxk cyBhbmQgJSBtdXN0IGZvbGxvd2VkIGJ5ICdzJy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGksbixsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0cmxlbihz KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbiA9IDA7IGkgPCBsZW47 IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0gJyUnKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaSsxXSAhPSAnJScpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaSsxXSAhPSAncycp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25seSAlJXMgZmllbGRz IGFyZSBwZXJtaXR0ZWQuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbiA+IDIpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9ubHkgdHdvICUlcyBmaWVsZHMgYXJlIHBlcm1p dHRlZC5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGt2ID09IDUp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmazVwd3Byb21wdCxzKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1ha2VzdHIoJms0cHdwcm9tcHQscyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtS Ql9QUl9QUk06IHsgLyogUHJpbmNpcGFsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IENoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gJSBmaWVsZHMgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGksbGVuOworICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4g PSBzdHJsZW4ocyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0gJyUn KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaSsxXSAhPSAnJScp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlJSBmaWVsZHMgYXJlIG5vdCB1c2VkIGluIHRo aXMgY29tbWFuZC5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGt2ID09IDUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm azVwcnByb21wdCxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJms0cHJwcm9tcHQscyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2lmZGVmIENLX1NSUAorICAg ICAgICAgICAgY2FzZSBBVVRIX1NSUDogeworICAgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5 KHNycHRhYiwgbnNycHRhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1JQIHBh cmFtZXRlciIsIiIseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzID0gIiI7CisgICAgICAg ICAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZU1JQUFJNOiAg ICAgICAgLyogUHJvbXB0ICovCisgICAgICAgICAgICAgICAgICAgIGlmICgoeiA9IGNta2V5KHNy cHBybXRhYiwxLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJl dHVybih6KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoCisgICJUZXh0IG9m IHByb21wdDtcbm1heSBjb250YWluIG9uZSBcIiVzXCIgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIHVz ZXJuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4eHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp CisgICAgICAgICAgICAgICAgICAgICAgICAgKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICAg ICAgICAgIHMgPSBsaW5lOworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK KyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHgp IHsgICAgICAgICAgICAvKiBDb3B5IHZhbHVlIHRvIHJpZ2h0IHBsYWNlICovCisgICAgICAgICAg ICAgICAgICBjYXNlIFhZU1JQUFJNOiAgICAgICAgLyogUHJvbXB0ICovCisJCSAgICBzID0gYnJz dHJpcChzKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh6KSB7CisgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBTUlBfUFdfUFJNOiB7IC8qIFBhc3N3b3JkICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENoZWNrICVzIGZpZWxkcyAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgaSxuLGxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuID0gc3RybGVu KHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBuID0gMDsgaSA8IGxl bjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpXSA9PSAnJScp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFdICE9ICclJykg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1tpKzFdICE9ICdz JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9ubHkgJSVzIGZpZWxk cyBhcmUgcGVybWl0dGVkLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK24gPiAxKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT25seSBvbmUgJSVzIGZpZWxkIGlz IHBlcm1pdHRlZC5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmc3JwcHdwcm9tcHQscyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBD S19TUlAgKi8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIGNhc2UgQVVUSF9TU0w6CisgICAg ICAgICAgICBjYXNlIEFVVEhfVExTOiB7CisgICAgICAgICAgICAgICAgaWYgKCh6ID0gY21rZXko c3NsdGFiLCBuc3NsdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHggPT0gQVVUSF9T U0wgPyAiU1NMIHBhcmFtZXRlciIgOiAiVExTIHBhcmFtZXRlciIpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4o eik7CisgICAgICAgICAgICAgICAgcyA9ICIiOworICAgICAgICAgICAgICAgIHN3aXRjaCAoeikg eworICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTFJDRkw6ICAgICAgIC8qIFNTTC9UTFMgUlNB IENlcnRzIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xSQ0NGOiAgICAgICAv KiBTU0wvVExTIFJTQSBDZXJ0cyBDaGFpbiBmaWxlICovCisgICAgICAgICAgICAgICAgICBjYXNl IFhZU1NMUktGTDogICAgICAgLyogU1NML1RMUyBSU0EgS2V5IEZpbGUgKi8KKyAgICAgICAgICAg ICAgICAgIGNhc2UgWFlTU0xEQ0ZMOiAgICAgICAvKiBTU0wvVExTIERTQSBDZXJ0cyBmaWxlICov CisgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMRENDRjogICAgICAgLyogU1NML1RMUyBEU0Eg Q2VydHMgQ2hhaW4gZmlsZSAqLworICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTERLRkw6ICAg ICAgIC8qIFNTTC9UTFMgREggS2V5IEZpbGUgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlT U0xEUEZMOiAgICAgICAvKiBTU0wvVExTIERIIFBhcmFtIEZpbGUgKi8KKyAgICAgICAgICAgICAg ICAgIGNhc2UgWFlTU0xDUkw6ICAgICAgICAvKiBTU0wvVExTIENSTCBGaWxlICovCisgICAgICAg ICAgICAgICAgICBjYXNlIFhZU1NMVlJGRjogICAgICAgLyogU1NML1RMUyBWZXJpZnkgRmlsZSAq LworICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTFJORDogICAgICAgIC8qIFNTTC9UTFMgUmFu ZG9tIEZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgeSA9IGNtaWZpKCJGaWxlbmFtZSIsIiIs JnMsJngseHhzdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBpZiAoeSAhPSAtMykgeworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAgICAgICAgICAgICAgIHMgPSBsaW5lOwor ICAgICAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsK KyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh6KSB7CisgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBYWVNTTFJDRkw6ICAgLyogU1NML1RMUyBSU0EgQ2VydHMgZmlsZSAqLworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCFzWzBdICYmIHNzbF9yc2FfY2VydF9maWxlKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xfcnNhX2NlcnRfZmlsZSk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3NsX3JzYV9jZXJ0X2ZpbGUgPSBOVUxMOworICAgICAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIGlmIChzWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmc3NsX3JzYV9jZXJ0X2ZpbGUscyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFzc2xfcnNhX2tleV9maWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmc3NsX3JzYV9rZXlfZmlsZSxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg IGNhc2UgWFlTU0xSQ0NGOiAgIC8qIFNTTC9UTFMgUlNBIENlcnRzIENoYWluIGZpbGUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzWzBdICYmIHNzbF9yc2FfY2VydF9jaGFpbl9m aWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9yc2FfY2VydF9j aGFpbl9maWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9yc2FfY2VydF9j aGFpbl9maWxlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChz WzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfcnNhX2Nl cnRfY2hhaW5fZmlsZSxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NM UktGTDogICAvKiBTU0wvVExTIFJTQSBLZXkgRmlsZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFzWzBdICYmIHNzbF9yc2Ffa2V5X2ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmcmVlKHNzbF9yc2Ffa2V5X2ZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNzbF9yc2Ffa2V5X2ZpbGUgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfSBl bHNlIGlmIChzWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3Ns X3JzYV9rZXlfZmlsZSxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xEQ0ZM OiAgIC8qIFNTTC9UTFMgRFNBIENlcnRzIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IGlmICghc1swXSAmJiBzc2xfZHNhX2NlcnRfZmlsZSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyZWUoc3NsX2RzYV9jZXJ0X2ZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNzbF9kc2FfY2VydF9maWxlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoc1swXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNz bF9kc2FfY2VydF9maWxlLHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Ns X2RoX2tleV9maWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3Ns X2RoX2tleV9maWxlLHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTERDQ0Y6 ICAgLyogU1NML1RMUyBEU0EgQ2VydHMgQ2hhaW4gZmlsZSAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZyZWUoc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2RzYV9jZXJ0X2NoYWluX2ZpbGUgPSBOVUxM OworICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9kc2FfY2VydF9jaGFpbl9maWxlLHMp OworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xES0ZMOiAgIC8qIFNTTC9U TFMgREggS2V5IEZpbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc1swXSAmJiBz c2xfZGhfa2V5X2ZpbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9k aF9rZXlfZmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2RoX2tleV9maWxl ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc1swXSkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzbF9kaF9rZXlfZmlsZSxzKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xEUEZMOiAgIC8qIFNTTC9UTFMgREggUGFy YW0gRmlsZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzWzBdICYmIHNzbF9kaF9w YXJhbV9maWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xfZGhfcGFy YW1fZmlsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2RoX3BhcmFtX2ZpbGUg PSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzWzBdKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX2RoX3BhcmFtX2ZpbGUscyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMQ1JMOiAgICAvKiBTU0wvVExTIENSTCBG aWxlICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX2NybF9maWxl KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xfY3JsX2ZpbGUpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jcmxfZmlsZSA9IE5VTEw7CisgICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZzc2xfY3JsX2ZpbGUscyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj YXNlIFhZU1NMVlJGRjogICAvKiBTU0wvVExTIFZlcmlmeSBGaWxlICovCisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3NsX3ZlcmlmeV9maWxlKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZnJlZShzc2xfdmVyaWZ5X2ZpbGUpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNzbF92ZXJpZnlfZmlsZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKHNbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2xfdmVyaWZ5X2ZpbGUscyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NM Uk5EOiAgICAvKiBTU0wvVExTIFJhbmRvbSBGaWxlICovCisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIXNbMF0gJiYgc3NsX3JuZF9maWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnJlZShzc2xfcm5kX2ZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9y bmRfZmlsZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0p IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2xfcm5kX2ZpbGUscyk7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICAgICAgICAgICAgY2FzZSBYWVNTTENSTEQ6CisgICAgICAgICAgICAgICAgICBjYXNl IFhZU1NMVlJGRDogeworICAgICAgICAgICAgICAgICAgICBjaGFyICogZCA9IE5VTEw7CisgICAg ICAgICAgICAgICAgICAgIGlmICh6ID09IFhZU1NMVlJGRCkKKyAgICAgICAgICAgICAgICAgICAg ICBkPSBnZXRlbnYoIlNTTF9DRVJUX0RJUiIpOworICAgICAgICAgICAgICAgICAgICBpZiAoZCA9 PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgZCA9ICIiOworICAgICAgICAgICAgICAg ICAgICBpZiAoKHkgPSBjbWRpcigiRGlyZWN0b3J5IixkLCZzLHh4c3RyaW5nKSkgPCAwKQorCQkg ICAgICBpZiAoeSAhPSAtMykKKwkJCXJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICAgICAgICAgICAgICBzID0gbGluZTsK KyAgICAgICAgICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICAgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7 CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh6KSB7CisgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBYWVNTTENSTEQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNbMF0gJiYgc3Ns X2NybF9kaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHNzbF9jcmxfZGly KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfY3JsX2RpciA9IE5VTEw7CisgICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNbMF0pIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2xfY3JsX2RpcixzKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgWFlTU0xWUkZEOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzWzBdICYm IHNzbF92ZXJpZnlfZGlyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShzc2xf dmVyaWZ5X2Rpcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcmlmeV9kaXIg PSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzWzBdKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NsX3ZlcmlmeV9kaXIscyk7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xDT0s6ICAgICAgICAvKiBT U0wvVExTIENlcnRzLU9rIGZsYWcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0 b24oJnNzbF9jZXJ0c29rX2ZsYWcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug WFlTU0xEQkc6ICAgICAgICAgICAgICAgIC8qIFNTTC9UTFMgRGVidWcgZmxhZyAqLworICAgICAg ICAgICAgICAgICAgICBpZiAoKHkgPSBzZXRvbigmc3NsX2RlYnVnX2ZsYWcpKSA8IDApCisgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xPTjogICAgICAgICAvKiBTU0wvVExTIE9ubHkg ZmxhZyAqLworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAg ICAgICAgICBjYXNlIEFVVEhfU1NMOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0g c2V0b24oJnNzbF9vbmx5X2ZsYWcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgQVVUSF9UTFM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBz ZXRvbigmdGxzX29ubHlfZmxhZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKHkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl IFhZU1NMVlJCOiAgICAgICAgLyogU1NML1RMUyBWZXJib3NlIGZsYWcgKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKCh5ID0gc2V0b24oJnNzbF92ZXJib3NlX2ZsYWcpKSA8IDApCisgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgIGNhc2UgWFlTU0xWUkY6ICAgICAgICAvKiBTU0wvVExTIFZlcmlmeSBm bGFnICovCisgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHNzbHZlcnRhYiwgbnNz bHZlcnRhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTC9UTFMgdmVy aWZ5IG1vZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVlci1jZXJ0 Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJpZnlfZmxhZyA9IHg7 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBYWVNT TERVTToKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gc2V0b24oJnNzbF9kdW1teV9mbGFn KSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFhZU1NMQ0w6IHsgICAgICAgICAg ICAgICAvKiBTU0wvVExTIENpcGhlciBMaXN0ICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAg ICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgY29sb24gZGVs aW1pdGVkICovCisgICAgICAgICAgICAgICAgICAgICAgLyogbGlzdCBvZiB0aGUgY2lwaGVycyBj dXJyZW50bHkgaW4gdXNlIHRvIGJlIHVzZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAvKiBh cyB0aGUgZGVmYXVsdCBmb3IgY210eHQoKS4gIEhvd2V2ZXIsIGEgYmV0dGVyICAqLworICAgICAg ICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgaXMgc2ltcGx5IHRoZSBtYWdpYyBrZXl3b3JkICJB TEwiLiAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgQ0hBUiBkZWZbMTAyNF0gPSAiIjsK KyAgICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX2NvbiAhPSBOVUxMKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIENIQVIgKiBwID0gTlVMTCwgKnEgPSBkZWY7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBpLCBsZW47CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y IChpID0gMDsgOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQ0hB UiAqKSBTU0xfZ2V0X2NpcGhlcl9saXN0KHNzbF9jb24saSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHN0cmxlbihwKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxK2xlbisxID49IGRlZisxMDI0KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpxKysgPSAnOic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHkocSxwKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgKz0gbGVuOworICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAgICAgICAgICAgICAgICAgICBjaGFyICogcCA9IGdldGVudigiU1NMX0NJUEhFUiIp OworICAgICAgICAgICAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICAgICAgICAg IHAgPSAiQUxMIjsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgKKyAgICAg ICAgICAgICAgICAgICAgIkNvbG9uLWRlbGltaXRlZCBsaXN0IG9mIGNpcGhlcnMgb3IgQUxMIChj YXNlLXNlbnNpdGl2ZSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgICBtYWtl c3RyKCZzc2xfY2lwaGVyX2xpc3Qscyk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHNzbF9j b24gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfbGlicmFyeV9pbml0 KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jdHggPSAoU1NMX0NUWCAqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9DVFhfbmV3KChTU0xfTUVUSE9EICopVExTdjFf bWV0aG9kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3NsX2N0eCAhPSBOVUxM KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jb249IChTU0wgKikgU1NMX25ldyhz c2xfY3R4KTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg aWYgKHNzbF9jb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX3NldF9jaXBoZXJf bGlzdChzc2xfY29uLHNzbF9jaXBoZXJfbGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRp ZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICAgIGNh c2UgWFlGVU5DOgorICAgICAgICBpZiAoKHggPSBjbWtleShmdW5jdGFiLG5mdW5jdGFiLCIiLCJk aWFnbm9zdGljcyIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICBjYXNlIEZVTkNfREk6IHJldHVybihzZXRvbigmZm5k aWFncykpOworICAgICAgICAgIGNhc2UgRlVOQ19FUjogcmV0dXJuKHNldG9uKCZmbmVycm9yKSk7 CisgICAgICAgICAgZGVmYXVsdDogICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisjZW5kaWYg LyogTk9TUEwgKi8KKworICAgICAgY2FzZSBYWVNMRUVQOiAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBTTEVFUCAvIFBBVVNFICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KHNsZWVwdGFiLDEs IiIsImNhbmNlbGxhdGlvbiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICByZXR1cm4oc2V0b24oJnNsZWVwY2FuKSk7CisKKyAgICAgIGNhc2UgWFlDRDogICAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQ0QgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXko Y2R0YWIsbmNkdGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsK KyAgICAgICAgc3dpdGNoICh4KSB7CisJICBjYXNlIFhZQ0RfSDogewkJLyogU0VUIENEIEhPTUUg Ki8KKwkgICAgICBleHRlcm4gY2hhciAqIG15aG9tZTsKKwkgICAgICBpZiAoKHkgPSBjbWRpcigi RGlyZWN0b3J5IG5hbWUiLHpob21lKCksJnMseHhzdHJpbmcpKSA8IDApCisJCXJldHVybih5KTsK KwkgICAgICBtYWtlc3RyKCZteWhvbWUscyk7CisJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KwkgIH0KKyAgICAgICAgICBjYXNlIFhZQ0RfTTogICAgICAgICAgICAgICAgICAvKiBTRVQgQ0Qg TUVTU0FHRSAqLworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoY2Rtc2csbmNkbXNnLCIiLCIi LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBp ZiAoeCA9PSAyKSB7ICAgICAgICAgICAgICAgLyogQ0QgTUVTU0FHRSBGSUxFICovCisgICAgICAg ICAgICAgICAgaWYgKCh4ID0gY210eHQoIk5hbWUgb2YgZmlsZSIsIiIsJnMsTlVMTCkpIDwgMCkK KyAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICBpZiAoISpzKSB7 CisgICAgICAgICAgICAgICAgICAgIHMgPSBOVUxMOworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAg ICAgICAgICAgICAgc3J2Y2Rtc2cgPSAwOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZjZG1zZ3N0cixzKTsKKyAgICAgICAg ICAgICAgICBtYWtlbGlzdChjZG1zZ3N0cixjZG1zZ2ZpbGUsOCk7CisgICAgICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7IC8qIENELU1FU1NBR0UgT04vT0ZGICovCisjaWZu ZGVmIE5PWEZFUgorICAgICAgICAgICAgaWYgKHggPiAwKQorICAgICAgICAgICAgICBzcnZjZG1z ZyB8PSAyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzcnZjZG1zZyAmPSAxOwor I2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKwor ICAgICAgICAgIGNhc2UgWFlDRF9QOiB7ICAgICAgICAgICAgICAgIC8qIFNFVCBDRCBQQVRIICov CisgICAgICAgICAgICAgIGV4dGVybiBjaGFyICogY2tjZHBhdGg7CisgICAgICAgICAgICAgIGlm ICgoeCA9IGNtdHh0KCJDRCBQQVRIIHN0cmluZyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICBtYWtlc3RyKCZja2NkcGF0aCxz KTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICB9CisgICAg ICAgIH0KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgU1RPUEJJVFMKKyAgICAgIGNhc2UgWFlT VE9QOiAgICAgICAgICAgICAgICAgICAgICAvKiBTVE9QLUJJVFMgKi8KKyAgICAgICAgaWYgKCh4 ID0gY21rZXkoc3RvcHRibCwyLCJTdG9wIGJpdHMgZm9yIHNlcmlhbCBkZXZpY2UiLCIiLAorICAg ICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7Cisg ICAgICAgIGlmICh4ID4gMCAmJiB4IDwgMykgeworICAgICAgICAgICAgc3RvcGJpdHMgPSB4Owor I2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIGlzdG5jb21wb3J0 KCkpIHsKKyAgICAgICAgICAgICAgICB0bnNldHRpbmdzKC0xLCB4KTsKKyAgICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIFROX0NPTVBP UlQgKi8KKyNpZmRlZiBIV1BBUklUWQorICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsK KyNlbHNlIC8qIEhXUEFSSVRZICovCisgICAgICAgICAgICByZXR1cm4oLTIpOworI2VuZGlmIC8q IEhXUEFSSVRZICovCisgICAgICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybigtMik7CisjZW5k aWYgLyogU1RPUEJJVFMgKi8KKworICAgICAgY2FzZSBYWURJU0M6IHsKKyAgICAgICAgICBleHRl cm4gaW50IGNsc29uZGlzYzsKKyAgICAgICAgICByZXR1cm4oc2V0b24oJmNsc29uZGlzYykpOwor ICAgICAgfQorCisgICAgICBjYXNlIFhZU0VSSUFMOiB7CisgICAgICAgICAgLyogY2hhciBjOyAq LworICAgICAgICAgIGV4dGVybiBpbnQgY21hc2s7CisgICAgICAgICAgaWYgKCh4ID0gY21rZXko c2VydGJsLG5zZXJ0YmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNlcmlhbCBkZXZpY2Ug Y2hhcmFjdGVyIHNpemUsIHBhcml0eSwgYW5kIHN0b3AgYml0cyIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIjhOMSIsIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICAgIGNrc3RybmNweShsaW5lLGF0bWJ1ZixMSU5CVUZTSVopOyAvKiBBc3NvY2lhdGVk IGtleXdvcmQgc3RyaW5nICovCisgICAgICAgICAgcyA9IGxpbmU7CisgICAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgIGNrc3Ry bmNweShsaW5lLHNlcm5hbVt4XSxMSU5CVUZTSVopOworICAgICAgICAgIHMgPSBsaW5lOworICAg ICAgICAgIGlmIChzWzBdICE9ICc4JyAmJiBzWzBdICE9ICc3JykgLyogQ2hhciBzaXplICovCisg ICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHogPSBz WzBdIC0gJzAnOworICAgICAgICAgIGlmIChpc3VwcGVyKHNbMV0pKSAgICAgICAgICAgIC8qIFBh cml0eSAqLworICAgICAgICAgICAgc1sxXSA9IHRvbG93ZXIoc1sxXSk7CisgICAgICAgICAgaWYg KHNbMl0gIT0gJzEnICYmIHNbMl0gIT0gJzInKSAvKiBTdG9wIGJpdHMgKi8KKyAgICAgICAgICAg IHJldHVybigtMik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RvcGJpdHMgPSBzWzJd IC0gJzAnOworICAgICAgICAgIGlmICh6ID09IDgpIHsgICAgICAgICAgICAgICAgIC8qIDggYml0 cyArIHBhcml0eSAob3Igbm90KSAqLworICAgICAgICAgICAgICBwYXJpdHkgPSAwOyAgICAgICAg ICAgICAgIC8qIFNldCBwYXJpdHkgKi8KKyAgICAgICAgICAgICAgaHdwYXJpdHkgPSAoc1sxXSA9 PSAnbicpID8gMCA6IHNbMV07CisgICAgICAgICAgICAgIHNldGNtYXNrKDgpOyAgICAgICAgICAg ICAgLyogQWxzbyBzZXQgVEVSTSBCWVRFU0laRSB0byA4ICovCisgICAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAgICAgICAgICAgLyogNyBiaXRzIHBsdXMgcGFyaXR5ICovCisgICAgICAgICAg ICAgIHBhcml0eSA9IChzWzFdID09ICduJykgPyAwIDogc1sxXTsKKyAgICAgICAgICAgICAgaHdw YXJpdHkgPSAwOworICAgICAgICAgICAgICBzZXRjbWFzayg3KTsgICAgICAgICAgICAgIC8qIEFs c28gc2V0IFRFUk0gQllURVNJWkUgdG8gNyAqLworICAgICAgICAgIH0KKyNpZmRlZiBUTl9DT01Q T1JUCisgICAgICAgICAgaWYgKG5ldHdvcmsgJiYgIWlzdG5jb21wb3J0KCkpCisgICAgICAgICAg ICB0bnNldHRpbmdzKHBhcml0eSwgc3RvcGJpdHMpOworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K KworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAgICAgICAgIC8qIGZyb20gU0VUIFNF UklBTCAqLworICAgICAgfQorCisgICAgICBjYXNlIFhZT1BUUzogeyAgICAgICAgICAgICAgICAg ICAgLyogU0VUIE9QVElPTlMgKi8KKyAgICAgICAgICBleHRlcm4gaW50IHNldGRpcm9wdHMoKTsK KyAgICAgICAgICBleHRlcm4gaW50IHNldHR5cG9wdHMoKTsKKyNpZmRlZiBDS1BVUkdFCisgICAg ICAgICAgZXh0ZXJuIGludCBzZXRwdXJnb3B0cygpOworI2VuZGlmIC8qIENLUFVSR0UgKi8KKyAg ICAgICAgICBpZiAoKHggPSBjbWtleShvcHRzdGFiLG5vcHRzdGFiLCJmb3IgY29tbWFuZCIsIiIs IHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIHN3aXRj aCAoeCkgeworI2lmbmRlZiBOT0ZSSUxMUworICAgICAgICAgICAgY2FzZSBYWERFTDoKKyAgICAg ICAgICAgICAgcmV0dXJuKHNldGRlbG9wdHMoKSk7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyAg ICAgICAgICAgIGNhc2UgWFhESVI6CisgICAgICAgICAgICAgIHJldHVybihzZXRkaXJvcHRzKCkp OworICAgICAgICAgICAgY2FzZSBYWFRZUDoKKyAgICAgICAgICAgICAgcmV0dXJuKHNldHR5cG9w dHMoKSk7CisjaWZkZWYgQ0tQVVJHRQorICAgICAgICAgICAgY2FzZSBYWFBVUkdFOgorICAgICAg ICAgICAgICByZXR1cm4oc2V0cHVyZ29wdHMoKSk7CisjZW5kaWYgLyogQ0tQVVJHRSAqLworICAg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgICB9 CisgICAgICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNh c2UgWFlROEZMRzogeworICAgICAgICAgIGV4dGVybiBpbnQgcThmbGFnOworICAgICAgICAgIHJl dHVybihzZXRvbigmcThmbGFnKSk7CisgICAgICB9CisgICAgICBjYXNlIFhZVElNRVI6IHsKKyAg ICAgICAgICBleHRlcm4gaW50IGFza3RpbWVyOworICAgICAgICAgIHkgPSBjbW51bSgiVGltZSBs aW1pdCBmb3IgQVNLIGNvbW1hbmQsIHNlY29uZHMiLCIwIiwxMCwmeCx4eHN0cmluZyk7CisjaWZk ZWYgUU5YMTYKKyAgICAgICAgICByZXR1cm4oc2V0bnVtKCZhc2t0aW1lcix4LHksMzI3NjcpKTsK KyNlbHNlCisgICAgICAgICAgcmV0dXJuKHNldG51bSgmYXNrdGltZXIseCx5LDg2NDAwKSk7Cisj ZW5kaWYgLyogUU5YMTYgKi8KKyAgICAgIH0KKyAgICAgIGNhc2UgWFlGQUNLQjogeworICAgICAg ICAgIGV4dGVybiBpbnQgZmFja2J1ZzsKKyAgICAgICAgICByZXR1cm4oc2V0b24oJmZhY2tidWcp KTsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgICAgY2FzZSBYWUhJTlRTOgor ICAgICAgICByZXR1cm4oc2V0b24oJmhpbnRzKSk7CisKKyNpZm5kZWYgTk9TUEwKKyAgICAgIGNh c2UgWFlFVkFMOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBvbGRldmFsOworICAgICAgICAgIGlm ICgoeCA9IGNta2V5KG9sZG5ldywyLCIiLCIiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg IHJldHVybih4KTsKKyAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAg ICByZXR1cm4oeSk7CisgICAgICAgICAgb2xkZXZhbCA9IHg7CisgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZF UgorICAgICAgY2FzZSBYWUZBQ0tQOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBmYWNrcGF0aDsK KyAgICAgICAgICByZXR1cm4oc2V0b24oJmZhY2twYXRoKSk7CisgICAgICB9CisjZW5kaWYgLyog Tk9YRkVSICovCisKKyAgICAgIGNhc2UgWFlRTlhQTDogeworICAgICAgICAgIGV4dGVybiBpbnQg cW54cG9ydGxvY2s7CisgICAgICAgICAgcmV0dXJuKHNldG9uKCZxbnhwb3J0bG9jaykpOworICAg ICAgfQorCisjaWZuZGVmIE5PQ01ETAorI2lmZGVmIElLU0QKKyAgICAgIGNhc2UgWFlJS1M6IHsK KyAgICAgICAgICBpbnQgc2V0aWtzKCk7CisgICAgICAgICAgcmV0dXJuKHNldGlrcygpKTsKKyAg ICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisjZW5kaWYgLyogTk9DTURMICovCisKKyNpZmRlZiBD S1JPT1QKKyAgICAgIGNhc2UgWFlST09UOgorICAgICAgICByZXR1cm4oZG9jaHJvb3QoKSk7Cisj ZW5kaWYgLyogQ0tST09UICovCisKKyNpZm5kZWYgTk9TUEwKKyNpZm5kZWYgTk9TRVhQCisgICAg ICBjYXNlIFhZU0VYUDogeworICAgICAgICAgIGlmICgoeCA9IGNta2V5KHNleHB0YWIsMywiIiwi IiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgc3dp dGNoICh4KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgIGlmICgoeCA9IGNt a2V5KG9vYXRhYiwzLCIiLCJhdXRvbWF0aWMiLCB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAg ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgIHNleHBlY2hvID0geDsKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6IHsKKyAgICAgICAgICAgICAg ICBpbnQgaSwgeHg7CisgICAgICAgICAgICAgICAgeHggPSBzZXhwbWF4ZGVwOworICAgICAgICAg ICAgICAgIGlmICgoeSA9IGNtbnVtKCJNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIjEwMDAiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorICAg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgIHogPSBzZXRudW0oJnNl eHBtYXhkZXAseCx5LC0xKTsKKyAgICAgICAgICAgICAgICBpZiAoeiA8IDApCisgICAgICAgICAg ICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICAgICAgaWYgKHN4cmVzdWx0KSB7ICAgICAg ICAgLyogRnJlZSBvbGQgc3RhY2sgaWYgYWxsb2NhdGVkICovCisgICAgICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCB4eDsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgIGlmIChzeHJl c3VsdFtpXSkgZnJlZShzeHJlc3VsdFtpXSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUoKGNo YXIgKilzeHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzeHJsZW4pIGZyZWUoKGNo YXIgKilzeHJsZW4pOworICAgICAgICAgICAgICAgICAgICBzeHJlc3VsdCA9IE5VTEw7CisgICAg ICAgICAgICAgICAgICAgIHN4cmxlbiA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCSAgICBjYXNlIDI6CisJICAgICAgcmV0 dXJuKHNldG9uKCZzZXhwdHJ1bmMpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT1NFWFBMICovCisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmZGVmIE5FV0ZUUAorICAgICAgY2FzZSBYWUdQUjogeworICAgICAgICAgIGV4 dGVybiBzdHJ1Y3Qga2V5dGFiIGdwcnRhYltdOworICAgICAgICAgIGV4dGVybiBpbnQgZnRwZ2V0 OworICAgICAgICAgIGlmICgoeCA9IGNta2V5KGdwcnRhYiwzLCIiLCJrZXJtaXQiLCB4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgZnRwZ2V0ID0geDsK KyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorI2VuZGlmIC8qIE5FV0ZU UCAqLworCisjaWZkZWYgQU5ZU1NICisgICAgICBjYXNlIFhZU1NIOgorICAgICAgICByZXR1cm4o ZG9zZXRzc2goKSk7CisjZW5kaWYgLyogQU5ZU0hIICovCisKKyNpZmRlZiBTRlRQX0JVSUxUSU4K KyAgICAgIGNhc2UgWFlTRlRQOgorICAgICAgICByZXR1cm4oZG9zZXRzZnRwKCkpOworI2VuZGlm IC8qIFNGVFBfQlVJTFRJTiAqLworCisjaWZkZWYgTE9DVVMKKyAgICAgIGNhc2UgWFlMT0NVUzoK KyAgICAgICAgICBpZiAoKHggPSBjbWtleShsb2N1c3RhYixubG9jdXN0YWIsIiIsCisjaWZkZWYg S1VJCisJCQkgImFzayIKKyNlbHNlCisJCQkgImF1dG8iCisjZW5kaWYgLyogS1VJICovCisJCQkg LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICBpZiAo eCA9PSAyIHx8IHggPT0gMykgewkvKiBBVVRPIG9yIEFTSyAqLworICAgICAgICAgICAgICBzZXRh dXRvbG9jdXMoeCAtIDEpOwkvKiBUd28gZm9ybXMgb2YgYXV0b21hdGljIGxvY3VzaW5nICovCisJ ICAgICAgLyogc2V0bG9jdXMoMSwwKTsgKi8gICAgICAvKiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhl IGxvY3VzIGhlcmUgKi8KKyAgICAgICAgICB9IGVsc2UgewkJCS8qIExPQ0FMIG9yIFJFTU9URSAq LworICAgICAgICAgICAgICBzZXRhdXRvbG9jdXMoMCk7CQkvKiBObyBhdXRvbWF0aWMgTG9jdXMg Y2hhbmdpbmcgKi8KKyAgICAgICAgICAgICAgc2V0bG9jdXMoeCwwKTsJCS8qIFNldCBMb2N1cyBh cyByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKyNlbmRpZiAvKiBMT0NVUyAqLworCisjaWZkZWYgS1VJCisgICAgICBjYXNlIFhZR1VJOgor ICAgICAgICByZXR1cm4oc2V0Z3VpKCkpOworI2VuZGlmIC8qIEtVSSAqLworCisjaWZuZGVmIE5P RlJJTExTCisjaWZuZGVmIE5PUkVOQU1FCisgICAgICBjYXNlIFhZX1JFTjoJCQkvKiBTRVQgUkVO QU1FICovCisJcmV0dXJuKHNldHJlbmFtZSgpKTsKKyNlbmRpZgkvKiBOT1JFTkFNRSAqLworI2Vu ZGlmCS8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9QVVNICisjaWZkZWYgQ0tfUkVESVIKKyNp Zm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFhZRVhUUk46CQkJLyogU0VUIEVYVEVSTkFMLVBST1RP Q09MICovCisJcmV0dXJuKHNldGV4dGVybigpKTsKKyNlbmRpZgkvKiBOT1hGRVIgKi8KKyNlbmRp ZgkvKiBDS19SRURJUiAqLworI2VuZGlmCS8qIE5PUFVTSCAqLworCisjaWZuZGVmIE5PU1BMCisg ICAgICBjYXNlIFhZVkFSRVY6CQkJLyogU0VUIFZBUklBQkxFLUVWQUxVQVRJT04gKi8KKwlyZXR1 cm4oc2V0dmFyZXZhbCgpKTsKKyNlbmRpZgkvKiBOT1NQTCAqLworCisgICAgICBkZWZhdWx0Ogor ICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICBwcmlu dGYoIk5vdCBpbXBsZW1lbnRlZCAtICVzXG4iLGNtZGJ1Zik7CisgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDApOworICAgIH0KK30KKworLyoKKyAgSCBVIFAgTyBLICAtLSAgSXMgSGFuZ3VwIE9L PworCisgIElzc3VlcyBhIHdhcm5pbmcgYW5kIGdldHMgT0sgZnJvbSB1c2VyIGRlcGVuZGluZyBv biB3aGV0aGVyIGEgY29ubmVjdGlvbgorICBzZWVtcyB0byBiZSBvcGVuIGFuZCB3aGF0IHRoZSBT RVQgRVhJVCBXQVJOSU5HIHNldHRpbmcgaXMuICBSZXR1cm5zOgorICAgIDAgaWYgbm90IE9LIHRv IGhhbmcgdXAgb3IgZXhpdCAoaS5lLiB1c2VyIHNhaWQgTm8pOworICAgIG5vbnplcm8gaWYgT0su CisgIEFyZ3VtZW50IHggaXMgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBFWElUIGNvbW1hbmQg ZnJvbSBTRVQgTElORSAvIEhPU1QuCisqLworaW50CitodXBvayh4KSBpbnQgeDsgeyAgICAgICAg ICAgICAgICAgICAgICAgLyogUmV0dXJucyAxIGlmIE9LLCAwIGlmIG5vdCBPSyAqLworICAgIGlu dCB5LCB6ID0gMTsKKyAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7CisjaWZkZWYgVk1TCisgICAg ZXh0ZXJuIGludCBiYXRjaDsKKworICAgIGlmIChiYXRjaCkgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE5vIHdhcm5pbmdzIGluIGJhdGNoICovCisgICAgICByZXR1cm4oMSk7CisjZWxzZQor I2lmZGVmIFVOSVgKKyAgICBpZiAoYmFja2dyZCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBO byB3YXJuaW5ncyBpbiBiYWNrZ3JvdW5kICovCisgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyog VU5JWCAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZuZGVmIEs5NUcKKyAgICBkZWJ1ZyhGMTAx LCJodXBvayBsb2NhbCIsIiIsbG9jYWwpOworCisgICAgaWYgKCFsb2NhbCkgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm8gd2FybmluZ3MgaW4gcmVtb3RlIG1vZGUgKi8KKyAgICAgIHJldHVy bigxKTsKKyNlbmRpZiAvKiBLOTVHICovCisKKyAgICBpZiAoeCA9PSAwICYmIGV4aXRoYW5ndXAg PT0gMCkgICAgICAvKiBFWElUIGFuZCBFWElUIEhBTkdVUCBpcyBPRkYgKi8KKyAgICAgIHJldHVy bigxKTsKKworICAgIGRlYnVnKEYxMDEsImh1cG9rIHgiLCIiLHgpOworICAgIGRlYnVnKEYxMDEs Imh1cG9rIHhpdHdhcm4iLCIiLHhpdHdhcm4pOworICAgIGRlYnVnKEYxMDEsImh1cG9rIG5ldHdv cmsiLCIiLG5ldHdvcmspOworICAgIGRlYnVnKEYxMDEsImh1cG9rIGhhdmVsaW5lIiwiIixoYXZl bGluZSk7CisKKyAgICBpZiAoKGxvY2FsICYmIHhpdHdhcm4pIHx8ICAgICAgICAgICAvKiBJcyBh IGNvbm5lY3Rpb24gb3Blbj8gKi8KKyAgICAgICAgKCF4ICYmIHhpdHdhcm4gPT0gMikpIHsgICAg ICAgICAvKiBPciBBbHdheXMgZ2l2ZSB3YXJuaW5nIG9uIEVYSVQgKi8KKyAgICAgICAgaW50IG5l ZWR3YXJuID0gMDsKKyAgICAgICAgY2hhciB3YXJuaW5nWzI1Nl07CisKKyAgICAgICAgaWYgKG5l dHdvcmspIHsKKyAgICAgICAgICAgIGlmICh0dGNoaygpID49IDApCisgICAgICAgICAgICAgIG5l ZWR3YXJuID0gMTsKKyAgICAgICAgICAgIC8qIEEgY29ubmVjdGlvbiBzZWVtcyB0byBiZSBvcGVu IGJ1dCBpdCBjYW4ndCBwb3NzaWJseSBiZSAqLworICAgICAgICAgICAgaWYgKCFoYXZlbGluZSkK KyAgICAgICAgICAgICAgbmVlZHdhcm4gPSAwOworICAgICAgICAgICAgaWYgKG5lZWR3YXJuKSB7 CisgICAgICAgICAgICAgICAgaWYgKHN0cmNtcCh0dG5hbWUsIioiKSkKKyAgICAgICAgICAgICAg ICAgICAgY2ttYWttc2cod2FybmluZywyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIEEgbmV0d29yayBjb25uZWN0aW9uIHRvICIsdHRuYW1lLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIiBtaWdodCBzdGlsbCBiZSBhY3RpdmUuXG4iLE5VTEwpOworICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh3YXJuaW5nLAorICAgICAg ICAgICAgICAgICAgICIgQW4gaW5jb21pbmcgbmV0d29yayBjb25uZWN0aW9uIG1pZ2h0IHN0aWxs IGJlIGFjdGl2ZS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CisgICAg ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2Vy aWFsIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgIGlmIChjYXJyaWVyID09IENBUl9PRkYpICAg ICAvKiBTRVQgQ0FSUklFUiBPRkYgKi8KKyAgICAgICAgICAgICAgbmVlZHdhcm4gPSAwOyAgICAg ICAgICAgICAvKiBzbyB3ZSBkb24ndCBjYXJlIGFib3V0IGNhcnJpZXIuICovCisgICAgICAgICAg ICBlbHNlIGlmICgoeSA9IHR0Z21kbSgpKSA+PSAwKSAvKiBlbHNlLCBnZXQgbW9kZW0gc2lnbmFs cyAqLworICAgICAgICAgICAgICBuZWVkd2FybiA9ICh5ICYgQk1fRENEKTsgIC8qIENoZWNrIGZv ciBjYXJyaWVyICovCisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyog SWYgd2UgY2FuJ3QgZ2V0IG1vZGVtIHNpZ25hbHMuLi4gKi8KKyAgICAgICAgICAgICAgbmVlZHdh cm4gPSAodHRjaGsoKSA+PSAwKTsKKyAgICAgICAgICAgIC8qIEEgY29ubmVjdGlvbiBzZWVtcyB0 byBiZSBvcGVuIGJ1dCBpdCBjYW4ndCBwb3NzaWJseSBiZSAqLworICAgICAgICAgICAgaWYgKCFo YXZlbGluZSB8fCAhZXhpdGhhbmd1cCkKKyAgICAgICAgICAgICAgbmVlZHdhcm4gPSAwOworICAg ICAgICAgICAgaWYgKG5lZWR3YXJuKQorICAgICAgICAgICAgICAgIGNrbWFrbXNnKHdhcm5pbmcs MjU2LAorICAgICAgICAgICAgICAgICAgICAgIiBBIHNlcmlhbCBjb25uZWN0aW9uIG1pZ2h0IHN0 aWxsIGJlIGFjdGl2ZSBvbiAiLAorICAgICAgICAgICAgICAgICAgICAgdHRuYW1lLCIuXG4iLE5V TEwpOworICAgICAgICB9CisKKy8qIElmIGEgd2FybmluZyB3YXMgaXNzdWVkLCBnZXQgdXNlcidz IHBlcm1pc3Npb24gdG8gRVhJVC4gKi8KKworICAgICAgICBpZiAobmVlZHdhcm4gfHwgKCF4ICYm IHhpdHdhcm4gPT0gMgorI2lmbmRlZiBLOTVHCisJCQkmJiBsb2NhbAorI2VuZGlmIC8qIEs5NUcg Ki8KKwkJCSApKSB7CisgICAgICAgICAgICBpZiAoICFuZWVkd2FybiApCisgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KHdhcm5pbmcsICJObyBhY3RpdmUgY29ubmVjdGlvbnMiLCAyNTYpOworCisj aWZkZWYgQ09NTUVOVAorCSAgICBwcmludGYoIiVzIix3YXJuaW5nKTsKKyAgICAgICAgICAgIHog PSBnZXR5ZXNubyh4ID8gIk9LIHRvIGNsb3NlPyAiIDogIk9LIHRvIGV4aXQ/ICIsMCk7CisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJodXBvayBnZXR5ZXNubyIsIiIseik7CisgICAgICAgICAgICBp ZiAoeiA8IC0zKSB6ID0gMDsKKyNlbHNlCisJICAgIHogPSB1cV9vayh3YXJuaW5nLAorCQkgICAg ICB4ID8gIk9LIHRvIGNsb3NlPyAiIDogIk9LIHRvIGV4aXQ/ICIsCisJCSAgICAgIDMsCisJCSAg ICAgIE5VTEwsCisJCSAgICAgIDAKKwkJICAgICAgKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs Imh1cG9rIHVxX29rIiwiIix6KTsKKwkgICAgaWYgKHogPCAwKSB6ID0gMDsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKHopOworfQorCisjaWZuZGVm IE5PU0hPVworVk9JRAorc2hvY3RsKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNIT1cgQ09OVFJPTC1QUkVGSVhJTkcgKi8KKyNpZmRlZiBDS19TUEVFRAorICAgIGludCBpOwor I2lmZGVmIE9TMgorICAgIGludCB6ZXJvOworI2VuZGlmIC8qIE9TMiAqLworICAgIHByaW50ZigK KyJcbmNvbnRyb2wgcXVvdGUgPSAlZCwgYXBwbGllZCB0byAoMCA9IHVucHJlZml4ZWQsIDEgPSBw cmVmaXhlZCk6XG5cbiIsCisgICAgICAgICAgIG15Y3RscSk7CisjaWZkZWYgT1MyCisjaWZuZGVm IFVOUFJFRklYWkVSTworICAgIHplcm8gPSBjdGxwWzBdOworICAgIGlmIChwcm90b2NvbCA9PSBQ Uk9UT19LKSAgICAgICAgICAgIC8qIFplcm8gY2FuJ3QgYmUgdW5wcmVmaXhlZCAqLworICAgICAg Y3RscFswXSA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBLZXJtaXQgKi8KKyNlbmRp ZiAvKiBVTlBSRUZJWFpFUk8gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBmb3IgKGkgPSAwOyBp IDwgMTY7IGkrKykgeworICAgICAgICBwcmludGYoIiAgJTNkOiAlZCAgICUzZDogJWQgIixpLGN0 bHBbaV0sIGkrMTYsIGN0bHBbaSsxNl0pOworICAgICAgICBpZiAoaSA9PSAxNSkKKyAgICAgICAg ICBwcmludGYoIiAgMTI3OiAlZCIsY3RscFsxMjddKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg IHByaW50ZigiICAgICAgICAiKTsKKyAgICAgICAgcHJpbnRmKCIgICUzZDogJWQgICAlM2Q6ICVk ICIsaSsxMjgsY3RscFtpKzEyOF0sIGkrMTQ0LCBjdGxwW2krMTQ0XSk7CisgICAgICAgIGlmIChp ID09IDE1KSAgcHJpbnRmKCIgIDI1NTogJWQiLGN0bHBbMjU1XSk7CisgICAgICAgIHByaW50Zigi XG4iKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworI2lmbmRlZiBVTlBSRUZJWFpFUk8KKyNp ZmRlZiBPUzIKKyAgICBjdGxwWzBdID0gemVybzsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAv KiBVTlBSRUZJWFpFUk8gKi8KKworI2VuZGlmIC8qIENLX1NQRUVEICovCit9CisKKyNpZm5kZWYg Tk9YRkVSCitWT0lECitzaG9kYmwoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U0hPVyBET1VCTEUvSUdOT1JFICovCisjaWZkZWYgQ0tYWENIQVIKKyAgICBpbnQgaSwgbiA9IDA7 CisgICAgcHJpbnRmKCJcblNFVCBTRU5EIERPVUJMRSBjaGFyYWN0ZXJzOlxuIik7CisgICAgZm9y IChpID0gMDsgaSA8IDI1NTsgaSsrKSB7CisgICAgICAgIGlmIChkYmx0W2ldICYgMikgeworICAg ICAgICAgICAgbisrOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBpKTsKKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAobiA9PSAwKQorICAgICAgcHJpbnRmKCIgKG5vbmUpIik7CisgICAgbiA9 IDA7CisgICAgcHJpbnRmKCJcblNFVCBSRUNFSVZFIElHTk9SRSBjaGFyYWN0ZXJzOlxuIik7Cisg ICAgZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKSB7CisgICAgICAgIGlmIChkYmx0W2ldICYgMSkg eworICAgICAgICAgICAgbisrOworICAgICAgICAgICAgcHJpbnRmKCIgJWQiLCBpKTsKKyAgICAg ICAgfQorICAgIH0KKyAgICBpZiAobiA9PSAwKQorICAgICAgcHJpbnRmKCIgKG5vbmUpIik7Cisg ICAgcHJpbnRmKCJcblxuIik7CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KK30KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKyNlbmRpZiAvKiBOT1NIT1cgKi8KKworI2lmbmRlZiBOT1BVU0gKKyNpZmRlZiBD S19SRVhYCisvKgorICBSZXh4IGNvbW1hbmQuICBOb3RlLCB0aGlzIGlzIG5vdCBPUy8yLXNwZWNp ZmljLCBiZWNhdXNlIFJleHggYWxzbyBydW5zCisgIG9uIG90aGVyIHN5c3RlbXMgd2hlcmUgQy1L ZXJtaXQgYWxzbyBydW5zLCBsaWtlIHRoZSBBbWlnYS4KKyovCisjZGVmaW5lIFJFWEJVRkwgMTAw ICAgICAgICAgICAgICAgICAgICAgLyogQ2hhbmdlIHRoaXMgaWYgbmVjY2Vzc2FyeSAqLworY2hh ciByZXh4YnVmW1JFWEJVRkxdID0geyAnXDAnIH07ICAgICAgIC8qIFJleHgncyByZXR1cm4gdmFs dWUgKHN0cmluZykgKi8KKworaW50Citkb3JleHgoKSB7CisgICAgaW50IHgsIHk7CisgICAgY2hh ciAqcmV4eGNtZDsKKworICAgICAgICBpZiAoKHggPSBjbXR4dCgiUmV4eCBjb21tYW5kIiwiIiwm cmV4eGNtZCx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisKKyNpZmRlZiBJ S1NECisgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5k IGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9Cisj ZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIENLX0FQQworICAgIC8qIERvbid0IGxldCB0aGlzIGJl IHNldCByZW1vdGVseSAqLworICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAg ICAgIGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKQor ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKworICAgICAg ICBja3N0cm5jcHkobGluZSxyZXh4Y21kLExJTkJVRlNJWik7CisgICAgICAgIHJleHhjbWQgPSBs aW5lOworI2lmZGVmIE9TMgorICAgICAgICByZXR1cm4ob3MycmV4eChyZXh4Y21kLHJleHhidWYs UkVYQlVGTCkpOworI2Vsc2UgLyogIU9TMiAqLworICAgICAgICBwcmludGYoIlNvcnJ5LCBub3Ro aW5nIGhhcHBlbnMuXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAv KiBPUzIgKi8KK30KKyNlbmRpZiAvKiBDS19SRVhYICovCisjZW5kaWYgLyogTk9QVVNIICovCisj ZWxzZSAgLyogTk9JQ1AgKi8KK1ZPSUQKK2RvbG9nZW5kKCkgeworICAgIC8qIER1bW15IHdyaXRl IHJlY29yZCB0byBjb25uZWN0aW9uIGxvZyAqLworfQorI2VuZGlmIC8qIE5PSUNQICovCgpkaWZm IC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czQuYyBi L2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM0LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2NjAzYQotLS0gL2Rldi9udWxsCisrKyBiL2Nr ZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM0LmMKQEAgLTAsMCArMSwx NTA4NyBAQAorI2luY2x1ZGUgImNrY3N5bS5oIgorCisvKiAgQyBLIFUgVSBTIDQgLS0gICJVc2Vy IEludGVyZmFjZSIgZm9yIEMtS2VybWl0LCBwYXJ0IDQgICovCisKKy8qCisgIEF1dGhvcnM6Cisg ICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUgS2VybWl0IFBy b2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBKZWZmcmV5IEUg QWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBv aW50cyBJbmMuLCBOZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDExLAor ICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlv cmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5U WFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxl IGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qCisgIEZpbGUgY2t1dXM0 LmMgLS0gRnVuY3Rpb25zIG1vdmVkIGZyb20gb3RoZXIgY2t1dXMqLmMgbW9kdWxlcyB0byBldmVu CisgIG91dCB0aGVpciBzaXplcy4KKyovCisjaW5jbHVkZSAiY2tjZGViLmgiCisjaW5jbHVkZSAi Y2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5jbHVkZSAiY2tjbmV0LmgiICAgICAg ICAgICAgICAgICAgICAgLyogTmV0d29yayBzeW1ib2xzICovCisjaW5jbHVkZSAiY2t1dXNyLmgi CisjaW5jbHVkZSAiY2t1dmVyLmgiCisjaW5jbHVkZSAiY2tjeGxhLmgiICAgICAgICAgICAgICAg ICAgICAgLyogQ2hhcmFjdGVyIHNldHMgKi8KKworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisj aW5jbHVkZSAiY2t1YXRoLmgiCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRl ZiBDS19TU0wKKyNpbmNsdWRlICJja19zc2wuaCIKKyNlbmRpZiAvKiBDS19TU0wgKi8KKworI2lm ZGVmIFZNUworI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBc dihlcnJubykgKi8KK2V4dGVybiBjaGFyICogY2t2bXNlcnJzdHIodW5zaWduZWQgbG9uZyk7Cisj aWZuZGVmIE9MRF9WTVMKKyNpbmNsdWRlIDxsaWIkcm91dGluZXMuaD4gICAgICAgICAgICAgICAv KiBOb3QgZm9yIFZBWCBDIDIuNCAqLworI2Vsc2UKKyNpbmNsdWRlIDxsaWJkZWYuaD4KKyNlbmRp ZiAvKiBPTERfVk1TICovCitfUFJPVE9UWVAoaW50IHZtc3R0eWZkLCAodm9pZCkgKTsKKyNlbmRp ZiAvKiBWTVMgKi8KKworI2lmZGVmIE9TMgorI2lmbmRlZiBOVAorI2RlZmluZSBJTkNMX05PUE0K KyNkZWZpbmUgSU5DTF9WSU8gICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgZm9yIGNr b2Nvbi5oICovCisjaW5jbHVkZSA8b3MyLmg+CisjdW5kZWYgQ09NTUVOVAorI2Vsc2UKKyNpbmNs dWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbnRhcC5oIgor I2RlZmluZSBBUElSRVQgVUxPTkcKKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImNrb2Nvbi5o IgorI2luY2x1ZGUgImNrb2V0Yy5oIgoraW50IFN0YXJ0ZWRGcm9tRGlhbGVyID0gMDsKK0hXTkQg aHduZERpYWxlciA9IDA7CitMT05HIEtlcm1pdERpYWxlcklEID0gMDsKKyNpZmRlZiBwdXRjaGFy CisjdW5kZWYgcHV0Y2hhcgorI2VuZGlmIC8qIHB1dGNoYXIgKi8KKyNkZWZpbmUgcHV0Y2hhcih4 KSBjb25vYyh4KQorI2lmZGVmIENLX1BJRAorI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyNlbmRpZiAv KiBDS19QSUQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIEtVSQorZXh0ZXJuIHN0cnVj dCBrZXl0YWIgKiB0ZXJtX2ZvbnQ7CitleHRlcm4gaW50IG50ZXJtZm9udCwgdHRfZm9udCwgdHRf Zm9udF9zaXplOworI2VuZGlmIC8qIEtVSSAqLworCitleHRlcm4geHhfc3RycCB4eHN0cmluZzsK KworI2lmZGVmIERFQ19UQ1BJUAorI2luY2x1ZGUgPGRlc2NyaXA+CisjaW5jbHVkZSA8ZHZpZGVm PgorI2luY2x1ZGUgPGRjZGVmPgorI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworCisjaWZkZWYgRk5G TE9BVAorI2luY2x1ZGUgPG1hdGguaD4gICAgICAgICAgICAgICAgICAgICAgIC8qIEZsb2F0aW5n LXBvaW50IGZ1bmN0aW9ucyAqLworI2VuZGlmIC8qIEZORkxPQVQgKi8KKworZXh0ZXJuIGludCBx dWlldCwgbmV0d29yaywgeGl0c3RhLCBlc2NhcGUsIG5vcHVzaCwgeGZlcnN0YXQsCisgIGV4aXRv bmNsb3NlLCB0bl9leGl0LCB0dG5wcm90bywgYXV0b2RsLCBmbG93LCBieXRlb3JkZXIsIHdoYXQs IGxhc3R4ZmVyOworCitleHRlcm4gaW50IGZpbGVwZWVrLCBuc2NhbmZpbGUsIG1ha2VzdHJsZW47 CitleHRlcm4gY2hhciAqIGtfaW5mb19kaXI7CisKKyNpZm5kZWYgTUFDCisjaWZuZGVmIEFNSUdB CitleHRlcm4gaW50IHR0eWZkOworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIEFNSUdBICov CisKKyNpZmRlZiBUTkNPREUKK2V4dGVybiBpbnQgdG5fbmxtLCB0bl9iX25sbSwgdG5fYl94ZmVy LCB0bl9zYl9idWc7CitleHRlcm4gaW50IHRuX3JlbV9lY2hvOworZXh0ZXJuIGludCB0bl9iX21l dSwgdG5fYl91bWUsIHRuX2F1dGhfa3JiNV9kZXNfYnVnOworI2VuZGlmIC8qIFROQ09ERSAqLwor CitzdGF0aWMgY2hhciAqIGxhc3Rrd3ZhbCA9IE5VTEw7CisKK2NoYXIgKiB4ZmVyZmlsZSA9IE5V TEw7CitpbnQgeGZlcmxvZyA9IDA7CisKK2V4dGVybiBpbnQgbG9jYWwsIHhhcmdjLCBzdGF5Zmxn LCByY2ZsYWcsIGJnc2V0LCBiYWNrZ3JkLCBjZmlsZWYsCisgIGluc2VydmVyLCBzcnZjZG1zZywg c3VjY2VzczsKKworI2lmZGVmIFZNUworZXh0ZXJuIGludCBiYXRjaDsKKyNlbmRpZiAvKiBWTVMg Ki8KKworZXh0ZXJuIGNoYXIgY21kZmlsW10sICp2ZXJzaW8sICpja3hzeXMsICoqeGFyZ3Y7Cisj aWZkZWYgREVCVUcKK2V4dGVybiBjaGFyIGRlYmZpbFtdOyAgICAgICAgICAgICAgICAgICAvKiBE ZWJ1ZyBsb2cgZmlsZSBuYW1lICovCitleHRlcm4gaW50IGRlYnRpbTsKKyNlbmRpZiAvKiBERUJV RyAqLworCitleHRlcm4gaW50IG5vaW5pdDsKKworc3RhdGljIGNoYXIgbmRhdGJ1ZlsxMF07CisK K2NoYXIgKm1vbnRoc1tdID0geworICAgICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5 IiwgIkp1biIsCisgICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgor fTsKKworY2hhciAqCit6em5kYXRlKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmV0dXJucyB0b2RheSdzIGRhdGUgYXMgeXl5eW1tZGQgKi8KKyAgICBjaGFyICogcCA9IE5VTEw7 CisgICAgaW50IHg7CisKKy8qIFdBUk5JTkcgLSBUaGlzIHdpbGwgZmFpbCBpZiBhc2N0aW1lKCkg cmV0dXJucyBub24tRW5nbGlzaCBtb250aCBuYW1lcyAqLworCisgICAgenRpbWUoJnApOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogR2V0ICJhc2N0aW1lIiBzdHJpbmcgKi8KKyAgICBpZiAo cCA9PSBOVUxMIHx8ICpwID09IE5VTCkgcmV0dXJuKCIiKTsKKyAgICBmb3IgKHggPSAyMDsgeCA8 IDI0OyB4KyspICAgICAgICAgICAvKiB5eXl5ICovCisgICAgICBuZGF0YnVmW3ggLSAyMF0gPSBw W3hdOworICAgIG5kYXRidWZbNl0gPSAoY2hhcikgKChwWzhdID09ICcgJykgPyAnMCcgOiBwWzhd KTsKKyAgICBuZGF0YnVmWzddID0gcFs5XTsgICAgICAgICAgICAgICAgICAvKiBkZCAqLworICAg IGZvciAoeCA9IDA7IHggPCAxMjsgeCsrKSAgICAgICAgICAgIC8qIG1tICovCisgICAgICBpZiAo IXN0cm5jbXAocCs0LG1vbnRoc1t4XSwzKSkgYnJlYWs7CisgICAgaWYgKHggPT0gMTIpIHsKKyAg ICAgICAgbmRhdGJ1Zls0XSA9IG5kYXRidWZbNV0gPSAnPyc7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgeCsrOworICAgICAgICBuZGF0YnVmWzRdID0gKGNoYXIpICgoeCA8IDEwKSA/ICcwJyA6ICcx Jyk7CisgICAgICAgIG5kYXRidWZbNV0gPSAoY2hhcikgKCh4ICUgMTApICsgNDgpOworICAgIH0K KyAgICBuZGF0YnVmWzhdID0gTlVMOworICAgIGRlYnVnKEYxMTAsInp6bmRhdGUgcmV0dXJuIixu ZGF0YnVmLDApOworICAgIHJldHVybigoY2hhciAqKW5kYXRidWYpOworfQorCisjaWZkZWYgRENN REJVRgorZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0azsKK2V4dGVybiBjaGFyICpsaW5lLCAq dG1wYnVmOworI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgY21kcHRyIGNtZHN0a1tdOworZXh0ZXJuIGNo YXIgbGluZVtdLCB0bXBidWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisKKyNpZmRlZiBPUzIK K2V4dGVybiBjaGFyIGV4ZWRpcltdOworI2Vsc2UKK2V4dGVybiBjaGFyICogZXhlZGlyOworI2Vu ZGlmIC8qIE9TMiAqLworCitleHRlcm4gaW50IG5ldHR5cGU7CisKKyNpZm5kZWYgTk9JQ1AgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBNb3N0IG9mIHRoaXMgZmlsZS4uLiAqLworI2lmZGVm IENLTE9HRElBTAorZXh0ZXJuIGNoYXIgZGlhZmlsW107CisjZW5kaWYgLyogQ0tMT0dESUFMICov CisKKyNpZm5kZWYgQU1JR0EKKyNpZm5kZWYgTUFDCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5k aWYgLyogTUFDICovCisjZW5kaWYgLyogQU1JR0EgKi8KKworI2lmZGVmIFNWNjgJCQkJLyogSnVs eSAyMDA2IGJlbGlldmUgaXQgb3Igbm90ICovCisjaWZuZGVmIFNFRUtfQ1VSCisjaW5jbHVkZSA8 dW5pc3RkLmg+CisjZW5kaWYJLyogU0VFS19DVVIgKi8KKyNlbmRpZgkvKiBTVjY4ICovCisKKyNp ZmRlZiBTQ08zMgkJCQkvKiBKdW5lIDIwMTEgYmVsaWV2ZSBpdCBvciBub3QuLi4gKi8KKyNpZmRl ZiBYRU5JWAorI2lmbmRlZiBTRUVLX0NVUgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCS8q IFNFRUtfQ1VSICovCisjZW5kaWYJLyogWEVOSVggKi8KKyNlbmRpZgkvKiBTQ08zMiAqLworCisj aWZkZWYgU1RSQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RyYXR1cyBDb21wdXRl ciwgSW5jLiAgVk9TICovCisjaWZkZWYgcHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAv KiBwdXRjaGFyICovCisjZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKKyNpZmRlZiBnZXRjaGFy CisjdW5kZWYgZ2V0Y2hhcgorI2VuZGlmIC8qIGdldGNoYXIgKi8KKyNkZWZpbmUgZ2V0Y2hhcih4 KSBjb25pbmMoMCkKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKworI2lmZGVmIEFOWVgyNQorZXh0 ZXJuIGludCByZXZjYWxsLCBjbG9zZ3IsIGN1ZGF0YTsKK2ludCB4MjV2ZXI7CitleHRlcm4gY2hh ciB1ZGF0YVtdOworI2lmbmRlZiBJQk1YMjUKK2V4dGVybiBpbnQgbnBhZHgzOworZXh0ZXJuIENI QVIgcGFkcGFybXNbXTsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHBhZHgzdGFiW107CisjZW5kaWYg LyogIUlCTVgyNSAqLworI2lmZGVmIElCTVgyNQorLyogZ2xvYmFsIHZhcmlhYmxlcyBvbmx5IGF2 YWlsYWJsZSBmb3IgSUJNIFguMjUgLSBwb3NzaWJseSBpbnRlcmVzdGluZyBmb3IKKyAqIG90aGVy IGltcGxlbWVudGF0aW9ucworICovCitleHRlcm4geDI1YWRkcl90IGxvY2FsX251YTsKK2V4dGVy biB4MjVhZGRyX3QgcmVtb3RlX251YTsKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNlbmRpZiAvKiBB TllYMjUgKi8KKworI2lmZGVmIE5FVENPTk4KKyNpZm5kZWYgTk9ESUFMCitleHRlcm4gaW50IG5u ZXRkaXI7CitleHRlcm4gY2hhciAqbmV0ZGlyW107CisjZW5kaWYgLyogTk9ESUFMICovCitleHRl cm4gY2hhciBpcGFkZHJbXTsKKworI2lmZGVmIENLX05FVEJJT1MKK2V4dGVybiB1bnNpZ25lZCBz aG9ydCBuZXRiaW9zQXZhaWw7CitleHRlcm4gdW5zaWduZWQgbG9uZyBOZXRiZXVpQVBJOworZXh0 ZXJuIHVuc2lnbmVkIGNoYXIgTmV0Qmlvc05hbWVbXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIE5l dEJpb3NBZGFwdGVyOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgTmV0Qmlvc0xTTjsKKyNlbmRpZiAv KiBDS19ORVRCSU9TICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKK2V4dGVybiBjaGFyIG15aXBhZGRy W107CitleHRlcm4gaW50IHRjcF9yZG5zOworI2lmZGVmIENLX0ROU19TUlYKK2V4dGVybiBpbnQg dGNwX2Ruc19zcnY7CisjZW5kaWYgLyogQ0tfRE5TX1NSViAqLworZXh0ZXJuIGNoYXIgKiB0Y3Bf YWRkcmVzczsKKyNpZm5kZWYgTk9IVFRQCitleHRlcm4gY2hhciAqIHRjcF9odHRwX3Byb3h5Owor I2VuZGlmIC8qIE5PSFRUUCAqLworI2lmZGVmIE5UCisjaWZkZWYgQ0tfU09DS1MKK2V4dGVybiBj aGFyICogdGNwX3NvY2tzX3N2cjsKKyNpZmRlZiBDS19TT0NLU19OUworZXh0ZXJuIGNoYXIgKiB0 Y3Bfc29ja3NfbnM7CisjZW5kaWYgLyogQ0tfU09DS1NfTlMgKi8KKyNlbmRpZiAvKiBDS19TT0NL UyAqLworI2VuZGlmIC8qIE5UICovCisKKyNpZm5kZWYgTk9UQ1BPUFRTCisjaWZkZWYgU09MX1NP Q0tFVAorI2lmZGVmIFNPX0xJTkdFUgorZXh0ZXJuIGludCB0Y3BfbGluZ2VyOworZXh0ZXJuIGlu dCB0Y3BfbGluZ2VyX3RtbzsKKyNlbmRpZiAvKiBTT19MSU5HRVIgKi8KKyNpZmRlZiBTT19ET05U Uk9VVEUKK2V4dGVybiBpbnQgdGNwX2RvbnRyb3V0ZTsKKyNlbmRpZiAvKiBTT19ET05UUk9VVEUg Ki8KKyNpZmRlZiBUQ1BfTk9ERUxBWQorZXh0ZXJuIGludCB0Y3Bfbm9kZWxheTsKKyNlbmRpZiAv KiBUQ1BfTk9ERUxBWSAqLworI2lmZGVmIFNPX1NOREJVRgorZXh0ZXJuIGludCB0Y3Bfc2VuZGJ1 ZjsKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KKyNpZmRlZiBTT19SQ1ZCVUYKK2V4dGVybiBpbnQg dGNwX3JlY3ZidWY7CisjZW5kaWYgLyogU09fUkNWQlVGICovCisjaWZkZWYgU09fS0VFUEFMSVZF CitleHRlcm4gaW50IHRjcF9rZWVwYWxpdmU7CisjZW5kaWYgLyogU09fS0VFUEFMSVZFICovCisj ZW5kaWYgLyogU09MX1NPQ0tFVCAqLworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworZXh0ZXJuIGNoYXIgKiBmbG9u YW1lW107CisKKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgdmFyZXZhbDsJCQkvKiBWYXJpYWJs ZSBldmFsdWF0aW9uIG1ldGhvZCAqLworZXh0ZXJuIGludCBmbmRpYWdzOyAgICAgICAgICAgICAg ICAgICAgIC8qIEZ1bmN0aW9uIGRpYWdub3N0aWNzIG9uL29mZiAqLworZXh0ZXJuIGludCBkaXZi eXplcm87CitpbnQgaXRzYXBhdHRlcm4gPSAwOworaW50IGlzaW5idWZsZW4gPSAwOworaW50IGlz am9pbiA9IDA7CisjaWZkZWYgQ0tfQVBDCitleHRlcm4gaW50IGFwY2FjdGl2ZTsgICAgICAgICAg ICAgICAgICAgLyogTm9uemVybyA9IEFQQyBjb21tYW5kIHdhcyByZWMnZCAqLworZXh0ZXJuIGlu dCBhcGNzdGF0dXM7ICAgICAgICAgICAgICAgICAgIC8qIEFyZSBBUEMgY29tbWFuZHMgYmVpbmcg cHJvY2Vzc2VkPyAqLworI2lmZGVmIERDTURCVUYKK2V4dGVybiBjaGFyICphcGNidWY7ICAgICAg ICAgICAgICAgICAgICAvKiBBUEMgY29tbWFuZCBidWZmZXIgKi8KKyNlbHNlCitleHRlcm4gY2hh ciBhcGNidWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisjZW5kaWYgLyogQ0tfQVBDICovCisK K2V4dGVybiBjaGFyIGV2YWxidWZbXTsgICAgICAgICAgICAgICAgICAvKiBFVkFMVUFURSByZXN1 bHQgKi8KK2V4dGVybiBjaGFyIHVpZGJ1ZltdLCBwd2J1ZltdLCBwcm1idWZbXTsKK19QUk9UT1RZ UCggc3RhdGljIGNoYXIgKiBmbmV2YWwsIChjaGFyICosIGNoYXIgKiBbXSwgaW50LCBjaGFyICog KSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBteWZsc2gsICh2b2lkKSApOworX1BST1RPVFlQ KCBzdGF0aWMgY2hhciAqIGdldGlwLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgZGVsdGEy c2VjLCAoY2hhciAqLCBsb25nICopICk7CisKKyNpZmRlZiBORVdGVFAKK19QUk9UT1RZUCggY2hh ciAqIGZ0cF9jcGxfbW9kZSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBmdHBfZHBsX21v ZGUsICh2b2lkKSApOworX1BST1RPVFlQKCBjaGFyICogZnRwX2F1dGh0eXBlLCAodm9pZCkgKTsK KyNlbmRpZiAvKiBORVdGVFAgKi8KKworI2lmbmRlZiBOT0hUVFAKK19QUk9UT1RZUCggY2hhciAq IGh0dHBfaG9zdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBodHRwX2lzY29ubmVjdGVkLCAo dm9pZCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGh0dHBfc2VjdXJpdHksICh2b2lkKSApOworI2Vu ZGlmIC8qIE5PSFRUUCAqLworCisjaWZuZGVmIE5PU0VYUAorX1BST1RPVFlQKCBjaGFyICogZG9z ZXhwLCAoY2hhciAqKSApOworaW50IGZzZXhwZmxhZyA9IDA7CisjZW5kaWYgLyogTk9TRVhQICov CisKK3N0YXRpYyBjaGFyIGhleGRpZ2l0c1sxNl0gPSB7CisgICAgJzAnLCcxJywnMicsJzMnLCc0 JywnNScsJzYnLCc3JywnOCcsJzknLCdBJywnQicsJ0MnLCdEJywnRScsJ0YnCit9OworZXh0ZXJu IGNoYXIgKiB0ZW1wZGlyOworCisjaWZkZWYgQ0tfUkVYWAorZXh0ZXJuIGNoYXIgcmV4eGJ1Zltd OworI2VuZGlmIC8qIENLX1JFWFggKi8KKworZXh0ZXJuIGludCB0ZmxpbmVbXTsKKworY2hhciAq d2tkYXlzW10gPSB7CisgICAgIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJp IiwgIlNhdCIKK307CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIE9TMgorZXh0ZXJuIGNo YXIgc3RhcnR1cGRpcltdLCBpbmlkaXJbXTsKKyNlbHNlCisjaWZkZWYgVk1TT1JVTklYCitleHRl cm4gY2hhciBzdGFydHVwZGlyW107CisjZW5kaWYgLyogVk1TT1JVTklYICovCisjZW5kaWYgLyog T1MyICovCisKKyNpZmRlZiBPUzIKK19QUk9UT1RZUCAoaW50IG9zMmdldGNwLCAodm9pZCkgKTsK KyNpZmRlZiBUQ1BTT0NLRVQKK2V4dGVybiBjaGFyIHRjcG5hbWVbXTsKKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KK2V4dGVybiBpbnQgdGNwX2F2YWlsOworI2lmZGVmIERFQ05FVAorZXh0ZXJuIGlu dCBkbmV0X2F2YWlsOworI2VuZGlmIC8qIERFQ05FVCAqLworI2lmZGVmIFNVUEVSTEFUCitleHRl cm4gaW50IHNsYXRfYXZhaWw7CisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKworI2lmbmRlZiBOT1RF Uk0KK2V4dGVybiBpbnQgdHRfdHlwZSwgbWF4X3R0OworZXh0ZXJuIHN0cnVjdCB0dF9pbmZvX3Jl YyB0dF9pbmZvW107CisjZW5kaWYgLyogTk9URVJNICovCitleHRlcm4gaW50IHR0X3Jvd3NbXSwg dHRfY29sc1tdOworI2Vsc2UgLyogT1MyICovCitleHRlcm4gaW50IHR0X3Jvd3MsIHR0X2NvbHM7 CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19UQVBJCitleHRlcm4gaW50IHR0dGFwaTsK K2V4dGVybiBpbnQgdGFwaXBhc3M7CitleHRlcm4gc3RydWN0IGtleXRhYiAqIHRhcGlsaW5ldGFi OworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgKiBfdGFwaWxpbmV0YWI7CitleHRlcm4gaW50IG50YXBp bGluZTsKKyNlbmRpZiAvKiBDS19UQVBJICovCisKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGNvbHh0 YWJbXTsKK2V4dGVybiBpbnQgbmNvbHg7CisKK2V4dGVybiBjaGFyIHR0bmFtZVtdLCAqemlucHRy LCAqa2VybXJjOworZXh0ZXJuIGNoYXIgaW5pZGlyW107CisKK2V4dGVybiBpbnQgYWN0aXZlY21k LCByZW1vbmx5LCBjbWRfcm93cywgY21kX2NvbHMsIHBhcml0eSwgc2VzbG9nLAorICBzZXNzZnQs IHNvc2ksIGh3cGFyaXR5LCB0c2VjcywgeGFyZ3MsIHppbmNudCwgdGxldmVsLCBpbnNpbGVuY2Us IGNtZG1zaywKKyAgdGltaW50LCB0aW1lZiwgaW5idWZzaXplLCBkaWFsb2csIGJpbmFyeSwgY2Fy cmllciwgY2R0aW1vLCBjbWFzaywgZHVwbGV4LAorICBmbWFzaywgaW5lY2hvLCBubWFjLCB0dXJu Y2gsIHR1cm4sIGtiY2hhcjsKKworI2lmbmRlZiBOT1hGRVIKK2V4dGVybiBDSEFSIGVvbCwgIG15 cGFkYywgbXlzdGNoLCBwYWRjaCwgc2VvbCwgc3RjaHIsICogZXBrdG1zZywgZmVvbDsKK2V4dGVy biBjaGFyICpja3N5c2lkOworZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKK2V4dGVybiBpbnQK KyAgcHJvdG9jb2wsIHByZWZpeGluZywgeGZyYmVsLCB4ZnJjYW4sIHhmcmludCwgeGZyY2hyLCB4 ZnJudW0sIHBrdHBhdXMsCisgIGxzY2FwciwgbHNjYXB1LCB4ZmVybW9kZSwgZGVzdCwgc2xvc3Rh cnQsIG1heHJwcywgbWF4c3BzLCBtYXh0cnksIG15cGFkbiwKKyAgbnBhZCwgcGt0dGltLCBiaWdy YnNpeiwgYmlnc2JzaXosIGtlZXAsIGF0Y2FwciwgYXV0b3BhciwgYmN0ciwgYmN0dSwKKyAgY3J1 bmNoZWQsIGNrZGVsYXksIGVicSwgZWJxZmxnLCBwa3Rsb2csIHJldHJhbnMsIHJwYWNrZXRzLCBy cHRmbGcsIHJwdHEsCisgIHJ0aW1vLCBzcGFja2V0cywgc3BzaXosIHNwc2l6Ziwgc3BzaXpyLCB0 aW1lb3V0cywgZm5jYWN0LCBmbmNudiwgdXJwc2l6LAorICB3bWF4LCB3c2xvdG4sIHdzbG90ciwg ZmRpc3BsYSwgc3BtYXgsIGZucnBhdGgsIGZuc3BhdGgsIGNyYzE2OworI2VuZGlmIC8qIE5PWEZF UiAqLworCisjaWZkZWYgT1MyCitleHRlcm4gaW50IHp4cG47CitleHRlcm4gaW50IHZpZXdvbmx5 OworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIEdGVElNRVIKK2V4 dGVybiBDS0ZMT0FUIGZwdHNlY3MsIGZweGZzZWNzOworI2VuZGlmIC8qIEdGVElNRVIgKi8KK2V4 dGVybiBsb25nIHhmc2VjcywgdGZjcHM7CisKKyNpZmRlZiBDS19UTVBESVIKK2V4dGVybiBjaGFy ICpkbGRpcjsKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwor I2lmZGVmIFJFQ1VSU0lWRQorZXh0ZXJuIGludCByZWN1cnNpdmU7CisjZW5kaWYgLyogUkVDVVJT SVZFICovCisKKyNpZmRlZiBWTVMKK2V4dGVybiBpbnQgZnJlY2w7CisjZW5kaWYgLyogVk1TICov CisKK2V4dGVybiBDS19PRkZfVCBmZmMsIHRmYywgdGxjaSwgdGxjbzsKK2V4dGVybiBsb25nIGZp bGNudCwgcnB0biwgc3BlZWQsICBjY3UsIGNjcCwgdmVybnVtLCB4dmVybnVtOworCisjaWZuZGVm IE5PU1BMCitleHRlcm4gY2hhciBmc3BlY1tdLCBteWhvc3RbXTsKKyNlbmRpZiAvKiBOT1NQTCAq LworCitleHRlcm4gY2hhciAqdGZuYW1bXTsgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBm aWxlIG5hbWVzICovCisKK2V4dGVybiBjaGFyIHBrdGZpbFtdLCAgICAgICAgICAgICAgICAgICAv KiBQYWNrZXQgbG9nIGZpbGUgbmFtZSAqLworI2lmZGVmIFRMT0cKKyAgdHJhZmlsW10sICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBsb2cgZmlsZSBuYW1lICovCisj ZW5kaWYgLyogVExPRyAqLworICBzZXNmaWxbXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNlc3Npb24gbG9nIGZpbGUgbmFtZSAqLworCisjaWZuZGVmIE5PWE1JVCAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVFJBTlNNSVQgY29tbWFuZCB2YXJpYWJsZXMgKi8KK2V4dGVybiBj aGFyIHhtaXRidWZbXTsKK2V4dGVybiBpbnQgeG1pdGYsIHhtaXRsLCB4bWl0eCwgeG1pdHMsIHht aXR3LCB4bWl0dDsKKyNlbmRpZiAvKiBOT1hNSVQgKi8KKworZXh0ZXJuIGludCBjbWRsdmw7CisK KyNpZm5kZWYgTk9TUEwKKy8qIFNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZSBpdGVtcyAqLwor ZXh0ZXJuIGNoYXIgKiphX3B0cltdOyAgICAgICAgICAgICAgICAgIC8qIEFycmF5cyAqLworZXh0 ZXJuIGludCBhX2RpbVtdOworc3RhdGljIGNoYXIgKiBpbnBtYXRjaCA9IE5VTEw7CisjaWZkZWYg Q0tGTE9BVAorY2hhciAqIGlucHNjYWxlID0gTlVMTDsKKyNlbmRpZgkvKiBDS0ZMT0FUICovCitl eHRlcm4gY2hhciAqIGlucGJ1ZiwgaW5jaGFyW107ICAgICAgICAgLyogQnVmZmVycyBmb3IgSU5Q VVQgYW5kIFJFSU5QVVQgKi8KK2V4dGVybiBjaGFyICppbnBicDsgICAgICAgICAgICAgICAgICAg ICAvKiBBbmQgcG9pbnRlciB0byBzYW1lICovCitzdGF0aWMgY2hhciAqcjMgPSAoY2hhciAqKTA7 CitleHRlcm4gaW50IGluY291bnQ7ICAgICAgICAgICAgICAgICAgICAgLyogSU5QVVQgY2hhcmFj dGVyIGNvdW50ICovCitleHRlcm4gaW50IG1fZm91bmQ7ICAgICAgICAgICAgICAgICAgICAgLyog TUlOUFVUIHJlc3VsdCAqLworZXh0ZXJuIGludCBtYWNsdmw7ICAgICAgICAgICAgICAgICAgICAg IC8qIE1hY3JvIGludm9jYXRpb24gbGV2ZWwgKi8KK2V4dGVybiBzdHJ1Y3QgbXRhYiAqbWFjdGFi OyAgICAgICAgICAgICAvKiBNYWNybyB0YWJsZSAqLworZXh0ZXJuIGNoYXIgKm1ydmFsW107Citl eHRlcm4gaW50IG1hY2FyZ2NbXSwgdG9wYXJnYzsKKworI2lmZGVmIENPTU1FTlQKK2V4dGVybiBj aGFyICptX2xpbmVbXTsKK2V4dGVybiBjaGFyICp0b3BsaW5lOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworZXh0ZXJuIGNoYXIgKm1fYXJnW01BQ0xFVkVMXVsxMF07IC8qIFlvdSBoYXZlIHRvIHB1 dCBpbiB0aGUgZGltZW5zaW9ucyAqLworZXh0ZXJuIGNoYXIgKmdfdmFyW0dWQVJTXTsgICAgICAg IC8qIGZvciBleHRlcm5hbCAyLWRpbWVuc2lvbmFsIGFycmF5cy4gKi8KKyNpZmRlZiBEQ01EQlVG CitleHRlcm4gaW50ICpjb3VudCwgKmlucGNhczsKKyNlbHNlCitleHRlcm4gaW50IGNvdW50W10s IGlucGNhc1tdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisj aWZkZWYgVU5JWAorZXh0ZXJuIGludCBoYXNsb2NrOyAgICAgICAgICAgICAgICAgICAgIC8qIEZv ciBVVUNQIGxvY2tzICovCitleHRlcm4gY2hhciBmbGZuYW1bXTsKKyNpZm5kZWYgVVNFVFRZTE9D SworZXh0ZXJuIGNoYXIgbG9jazJbXTsKKyNlbmRpZiAvKiBVU0VUVFlMT0NLICovCisjZW5kaWYg LyogVU5JWCAqLworCisjaWZkZWYgT1MyT1JVTklYCitleHRlcm4gaW50IG1heG5hbSwgbWF4cGF0 aDsgICAgICAgICAgICAgLyogTG9uZ2VzdCBuYW1lLCBwYXRoIGxlbmd0aCAqLworI2VuZGlmIC8q IE9TMk9SVU5JWCAqLworCitleHRlcm4gaW50IG1kbXR5cCwgbWRtc2F2OworCisjaWZuZGVmIE5P RElBTAorLyogRElBTC1yZWxhdGVkIHZhcmlhYmxlcyAqLworZXh0ZXJuIGNoYXIgbW9kZW1tc2db XTsKK2V4dGVybiBNRE1JTkYgKm1vZGVtcFtdOyAgICAgICAgICAgICAgICAvKiBQb2ludGVycyB0 byBtb2RlbSBpbmZvIHN0cnVjdHMgKi8KK2V4dGVybiBpbnQgbm1kbSwgZGlhbGhuZywgZGlhbHRt bywgZGlhbGtzcCwgZGlhbGRweSwgZGlhbHNydCwgZGlhbHN0YTsKK2V4dGVybiBpbnQgZGlhbHJ0 ciwgZGlhbGludCwgZGlhbHJzdHIsIGRpYWxjb24sIGRpYWxjcSwgZGlhbGZsZDsKK2V4dGVybiBp bnQgbWRtc3BkLCBkaWFsZWMsIGRpYWxkYywgZGlhbG10aCwgZGlhbG1hdXRvLCBkaWFsZXNjOwor ZXh0ZXJuIGNoYXIgKmRpYWxudW0sICAgKmRpYWxpbmksICAqZGlhbGRpcltdLCAqZGlhbGNtZCwg ICpkaWFsbnByLAorICpkaWFsZGNvbiwgKmRpYWxkY29mZiwgKmRpYWxlY29uLCAqZGlhbGVjb2Zm LCAqZGlhbGhjbWQsICpkaWFsbGFjLAorICpkaWFsaHdmYywgKmRpYWxzd2ZjLCAgKmRpYWxub2Zj LCAqZGlhbHB1bHNlLCAqZGlhbHRvbmUsICpkaWFsbmFtZSwKKyAqZGlhbGFhb24sICpkaWFsYWFv ZmYsICpkaWFsbWFjOworZXh0ZXJuIGNoYXIgKmRpYWxsY2MsICAgKmRpYWxpeHAsICAqZGlhbGl4 cywgICAqZGlhbGxkcCwgICpkaWFsbGRzLAorICpkaWFscHhpLCAgKmRpYWxweG8sICAgKmRpYWxz ZngsICAqZGlhbHRmcDsKK2V4dGVybiBjaGFyICpkaWFsbGNwLCAgICpkaWFsbGNzOworZXh0ZXJu IGludCBudG9sbGZyZWUsIG5kaWFscHh4LCBubG9jYWxhYzsKK2V4dGVybiBjaGFyICpkaWFsdGZj W10sICpkaWFsbGNhY1tdLCAqZGlhbHB4eFtdLCAqbWF0Y2hweHg7CitleHRlcm4gaW50IG5kaWFs cHVjYywgbmRpYWx0b2NjOworZXh0ZXJuIGNoYXIgKmRpYWx0b2NjW10sICpkaWFscHVjY1tdOwor ZXh0ZXJuIGludCBuZGlhbGRpciwgZGlhbGNuZiwgZGlhbGN2dCwgZGlhbGlkdCwgZGlhbHBhY2U7 CitleHRlcm4gbG9uZyBkaWFsbWF4LCBkaWFsY2FwYXM7CisKK2V4dGVybiBzdHJ1Y3Qga2V5dGFi IG1kbXRhYltdOworCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgQVJHQlVGU0laIDgxOTEKKyNl bHNlCisjZGVmaW5lIEFSR0JVRlNJWiAxMDIzCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKworI2lm ZGVmIEJJR0JVRk9LCitleHRlcm4gY2hhciAqIGRpYWxtc2dbXTsKKyNlbmRpZiAvKiBCSUdCVUZP SyAqLworCisjZW5kaWYgLyogTk9ESUFMICovCisKKyNpZm5kZWYgTk9DU0VUUworLyogVHJhbnNs YXRpb24gc3R1ZmYgKi8KK2V4dGVybiBpbnQgbmZpbGM7CitleHRlcm4gc3RydWN0IGtleXRhYiBm Y3N0YWJbXTsKK2V4dGVybiBpbnQgZmNoYXJzZXQsIHRjaGFyc2V0LCB0c2xldmVsLCBsYW5ndWFn ZSwgbmxuZywgdGNzciwgdGNzbDsKK2V4dGVybiBpbnQgZGNzZXQ3LCBkY3NldDg7CitleHRlcm4g c3RydWN0IGtleXRhYiBsbmd0YWJbXTsKK2V4dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2luZm9bXSwg dGNzaW5mb1tdOworZXh0ZXJuIHN0cnVjdCBsYW5naW5mbyBsYW5nc1tdOworI2lmZGVmIENLX0FO U0lDCitleHRlcm4gQ0hBUiAoKnhsc1tNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsg LyogQ2hhcmFjdGVyIHNldCAqLworZXh0ZXJuIENIQVIgKCp4bHJbTUFYVENTRVRTKzFdW01BWEZD U0VUUysxXSkoQ0hBUik7IC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLworI2Vsc2UKK2V4dGVy biBDSEFSICgqeGxzW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7IC8qIENoYXJhY3RlciBz ZXQgKi8KK2V4dGVybiBDSEFSICgqeGxyW01BWFRDU0VUUysxXVtNQVhGQ1NFVFMrMV0pKCk7IC8q IHRyYW5zbGF0aW9uIGZ1bmN0aW9ucy4gKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2lmZGVm IFVOSUNPREUKKyAgICBleHRlcm4gaW50IHVjc2JvbSwgdWNzb3JkZXI7CisjZW5kaWYgLyogVU5J Q09ERSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBOT1NQTAorLyogQnVpbHQt aW4gdmFyaWFibGUgbmFtZXMsIG1heGltdW0gbGVuZ3RoIFZOQU1MICgyMCBjaGFyYWN0ZXJzKSAq LworCitzdHJ1Y3Qga2V5dGFiIHZhcnRhYltdID0geworICAgIHsgIl9saW5lIiwgICAgIFZOX1RG TE4sICBDTV9JTlZ9LCAgIC8qIDE5MiAqLworI2lmZGVmIE9TMgorICAgIHsgIl9yZWduYW1lIiwg IFZOX1JFR04sICBDTV9JTlZ9LCAgIC8qIDEuMS4xMiAqLworICAgIHsgIl9yZWdvcmciLCAgIFZO X1JFR08sICBDTV9JTlZ9LCAgIC8qIDEuMS4xMiAqLworICAgIHsgIl9yZWdudW0iLCAgIFZOX1JF R1MsICBDTV9JTlZ9LCAgIC8qIDEuMS4xMiAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHsgImFw Y2FjdGl2ZSIsIFZOX0FQQywgICBDTV9JTlZ9LCAgIC8qIDE5MiAqLworI2lmZGVmIE5UCisgICAg eyAiYXBwZGF0YSIsICAgVk5fQVBQREFUQSwgMH0sICAgICAgLyogMjAxICovCisjZW5kaWYgLyog TlQgKi8KKyAgICB7ICJhcmdjIiwgICAgICBWTl9BUkdDLCAgMH0sCisgICAgeyAiYXJncyIsICAg ICAgVk5fQVJHUywgIDB9LAorICAgIHsgImF1dGhuYW1lIiwgIFZOX0FVVEhOLCAwfSwgICAgICAg IC8qIDE5NiAqLworICAgIHsgImF1dGhzdGF0ZSIsIFZOX0FVVEhTLCAwfSwgICAgICAgIC8qIDE5 NSAqLworICAgIHsgImF1dGh0eXBlIiwgIFZOX0FVVEhULCAwfSwgICAgICAgIC8qIDE5NSAqLwor ICAgIHsgImJpdHMiLCAgICAgIFZOX0JJVFMsICAwfSwgICAgICAgIC8qIDIxMiAqLworICAgIHsg ImJsb2NrY2hlY2siLFZOX0JMSywgICAwfSwgICAgICAgIC8qIDE5NSAqLworI2lmZGVmIEJST1dT RVIKKyAgICB7ICJicm93c2VyIiwgICBWTl9CUk9XU1IsMH0sICAgICAgICAvKiAxOTMgKi8KKyAg ICB7ICJicm93c29wdHMiLCBWTl9CUk9QVCwgMH0sICAgICAgICAvKiAxOTMgKi8KKyAgICB7ICJi cm93c3VybCIsICBWTl9VUkwsICAgMH0sICAgICAgICAvKiAxOTMgKi8KKyAgICB7ICJidWlsZGlk IiwgICBWTl9CVUlMRCwgMH0sICAgICAgICAvKiAxOTkgKi8KKyNlbmRpZiAvKiBCUk9XU0VSICov CisgICAgeyAiYnl0ZW9yZGVyIiwgVk5fQllURSwgIDB9LCAgICAgICAgLyogMTk1ICovCisjaWZu ZGVmIE5PQ1NFVFMKKyAgICB7ICJjaGFyc2V0IiwgICBWTl9DU0VULCAgMH0sICAgICAgICAvKiAx OTIgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAiY21kYnVmc2l6ZSIsVk5fQ01EQkws IDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAiY21kZmlsZSIsICAgVk5fQ01ERiwgIDB9LAor ICAgIHsgImNtZGxldmVsIiwgIFZOX0NNREwsICAwfSwKKyAgICB7ICJjbWRzb3VyY2UiLCBWTl9D TURTLCAgMH0sCisgICAgeyAiY29scyIsICAgICAgVk5fQ09MUywgIDB9LCAgICAgICAgLyogMTkw ICovCisjaWZkZWYgTlQKKyAgICB7ICJjb21tb24iLCAgICBWTl9DT01NT04sIDB9LCAgICAgICAv KiAyMDEgKi8KKyNlbmRpZiAvKiBOVCAqLworICAgIHsgImNvbm5lY3Rpb24iLFZOX0NPTk4sICAw fSwgICAgICAgIC8qIDE5MCAqLworICAgIHsgImNvdW50IiwgICAgIFZOX0NPVU4sICAwfSwKKyNp Zm5kZWYgTk9YRkVSCisgICAgeyAiY3BzIiwgICAgICAgVk5fQ1BTLCAgIDB9LCAgICAgICAgLyog MTkwICovCisjZW5kaWYgLyogTk9YRkVSICovCisgICAgeyAiY3B1IiwgICAgICAgVk5fQ1BVLCAg IDB9LAorI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJjcmMxNiIsICAgICBWTl9DUkMxNiwgMH0sICAg ICAgICAvKiAxOTIgKi8KKyAgICB7ICJjdHR5IiwgICAgICBWTl9UVFlOQU0sMH0sICAgICAgICAv KiAxOTYgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYgTk9MT0dESUFMCisjaWZuZGVm IE5PTE9DQUwKKyAgICB7ICJjeF90aW1lIiwgICBWTl9DWFRJTUUsMH0sICAgICAgICAvKiAxOTUg Ki8KKyAgICB7ICJjeF9zdGF0dXMiLCBWTl9DWF9TVEEsMH0sICAgICAgICAvKiAxOTkgKi8KKyNl bmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYgLyogTk9MT0dESUFMICovCisjaWZuZGVmIE5PRElB TAorICAgIHsgImQkYWMiLCAgICAgIFZOX0RfQUMsICAwfSwgICAgICAgIC8qIDE5MiAqLworICAg IHsgImQkY2MiLCAgICAgIFZOX0RfQ0MsICAwfSwgICAgICAgIC8qIDE5MiAqLworICAgIHsgImQk aXAiLCAgICAgIFZOX0RfSVAsICAwfSwgICAgICAgIC8qIDE5MiAqLworICAgIHsgImQkbGMiLCAg ICAgIFZOX0RfTENQLCAwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsgImQkbGNwIiwgICAgIFZO X0RfTENQLCBDTV9JTlZ9LCAgIC8qIDE5MyAqLworICAgIHsgImQkbHAiLCAgICAgIFZOX0RfTFAs ICAwfSwgICAgICAgIC8qIDE5MiAqLworICAgIHsgImQkcHgiLCAgICAgIFZOX0RfUFhYLCAwfSwg ICAgICAgIC8qIDE5NSAqLworICAgIHsgImQkcHh4IiwgICAgIFZOX0RfUFhYLCBDTV9JTlZ9LCAg IC8qIDE5NSAqLworI2VuZGlmIC8qIE5PRElBTCAqLworICAgIHsgImRhdGUiLCAgICAgIFZOX0RB VEUsICAwfSwKKyAgICB7ICJkYXkiLCAgICAgICBWTl9EQVksICAgMH0sCisjaWZkZWYgTlQKKyAg ICB7ICJkZXNrdG9wIiwgICBWTl9ERVNLVE9QLCAwfSwgICAgIC8qIDIwMSAqLworI2VuZGlmIC8q IE5UICovCisjaWZuZGVmIE5PRElBTAorICAgIHsgImRpYWxjb3VudCIsIFZOX0RSVFIsICAwfSwg ICAgICAgIC8qIDE5NSAqLworICAgIHsgImRpYWxtZXNzYWdlIixWTl9ETVNHLCAwfSwJLyogMjEy ICovCisgICAgeyAiZGlhbG51bWJlciIsVk5fRE5VTSwgIDB9LCAgICAgICAgLyogMTkyICovCisg ICAgeyAiZGlhbHJlc3VsdCIsVk5fTURNU0csIDB9LCAgICAgICAgLyogMTkyICovCisgICAgeyAi ZGlhbHN0YXR1cyIsVk5fRElBTCwgIDB9LCAgICAgICAgLyogMTkwICovCisgICAgeyAiZGlhbHN1 ZmZpeCIsVk5fUERTRlgsIDB9LCAgICAgICAgLyogMTkzICovCisgICAgeyAiZGlhbHR5cGUiLCAg Vk5fRFRZUEUsIDB9LCAgICAgICAgLyogMTkzICovCisjZW5kaWYgLyogTk9ESUFMICovCisgICAg eyAiZGlyZWN0b3J5IiwgVk5fRElSRSwgIDB9LAorI2lmbmRlZiBOT0RJQUwKKyAgICB7ICJkbV9o ZiIsICAgICBWTl9ETV9IRiwgMH0sICAgICAgICAvKiAxOTkgKi8KKyAgICB7ICJkbV9scCIsICAg ICBWTl9ETV9MUCwgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJkbV9zcCIsICAgICBWTl9E TV9TUCwgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJkbV9wZCIsICAgICBWTl9ETV9QRCwg MH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJkbV90ZCIsICAgICBWTl9ETV9URCwgMH0sICAg ICAgICAvKiAxOTUgKi8KKyAgICB7ICJkbV93YSIsICAgICBWTl9ETV9XQSwgMH0sICAgICAgICAv KiAxOTUgKi8KKyAgICB7ICJkbV93YiIsICAgICBWTl9ETV9XQiwgMH0sICAgICAgICAvKiAxOTkg Ki8KKyAgICB7ICJkbV93ZCIsICAgICBWTl9ETV9XRCwgMH0sICAgICAgICAvKiAxOTUgKi8KKyAg ICB7ICJkbV9yYyIsICAgICBWTl9ETV9SQywgMH0sICAgICAgICAvKiAxOTUgKi8KKyNlbmRpZiAv KiBOT0RJQUwgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgeyAiZG93bmxvYWQiLCAgVk5fRExESVIs IDB9LCAgICAgICAgLyogMTkyICovCisjZW5kaWYgLyogTk9YRkVSICovCisgICAgeyAiZWRpdG9y IiwgICAgVk5fRURJVE9SLDB9LAorICAgIHsgImVkaXRmaWxlIiwgIFZOX0VERklMRSwwfSwKKyAg ICB7ICJlZGl0b3B0cyIsICBWTl9FRE9QVCwgMH0sCisgICAgeyAiZXJybm8iLCAgICAgVk5fRVJS Tk8sIDB9LCAgICAgICAgLyogMTkyICovCisgICAgeyAiZXJyc3RyaW5nIiwgVk5fRVJTVFIsIDB9 LCAgICAgICAgLyogMTkyICovCisgICAgeyAiZXNjYXBlIiwgICAgVk5fRVNDLCAgIDB9LCAgICAg ICAgLyogMTkzICovCisgICAgeyAiZXZhbHVhdGUiLCAgVk5fRVZBTCwgIDB9LCAgICAgICAgLyog MTkwICovCisjaWZkZWYgT1MyT1JVTklYCisgICAgeyAiZXhlZGlyIiwgICAgVk5fRVhFRElSLDB9 LCAgICAgICAgLyogMTkyICovCisjZW5kaWYgLyogT1MyT1JVTklYICovCisgICAgeyAiZXhpdHN0 YXR1cyIsVk5fRVhJVCwgIDB9LAorI2lmZGVmIENLQ0hBTk5FTElPCisgICAgeyAiZl9jb3VudCIs ICAgVk5fRkNPVSwgIDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAiZl9lcnJvciIsICAgVk5f RkVSUiwgIDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAiZl9tYXgiLCAgICAgVk5fRk1BWCwg IDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAiZmlsZWVycm9yIiwgVk5fRkVSUiwgIENNX0lO Vn0sICAgLyogMTk1ICovCisgICAgeyAiZmlsZW1heCIsICAgVk5fRkVSUiwgIENNX0lOVn0sICAg LyogMTk1ICovCisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKyAgICB7ICJmaWxlbmFtZSIsICBW Tl9GTkFNLCAgMH0sICAgICAgICAvKiAxOTMgKi8KKyAgICB7ICJmaWxlbnVtYmVyIixWTl9GTlVN LCAgMH0sICAgICAgICAvKiAxOTMgKi8KKyAgICB7ICJmaWxlc3BlYyIsICBWTl9GSUxFLCAgMH0s CisgICAgeyAiZnNpemUiLCAgICAgVk5fRkZDLCAgIDB9LCAgICAgICAgLyogMTkwICovCisjaWZk ZWYgR0ZUSU1FUgorICAgIHsgImZ0aW1lIiwgICAgIFZOX0ZUSU1FLCAwfSwgICAgICAgIC8qIDE5 OSAqLworI2Vsc2UKKyAgICB7ICJmdGltZSIsICAgICBWTl9OVElNLCAgQ01fSU5WfSwKKyNlbmRp ZiAvKiBHRlRJTUVSICovCisjaWZuZGVmIE5PRlRQCisjaWZuZGVmIFNZU0ZUUAorICAgIHsgImZ0 cF9jb2RlIiwgICAgICAgICBWTl9GVFBfQywgMH0sIC8qIDE5OSAqLworICAgIHsgImZ0cF9jcGwi LCAgICAgICAgICBWTl9GVFBfQiwgMH0sIC8qIDE5OSAqLworICAgIHsgImZ0cF9jb25uZWN0ZWQi LCAgICBWTl9GVFBfWCwgMH0sIC8qIDE5OSAqLworICAgIHsgImZ0cF9kcGwiLCAgICAgICAgICBW Tl9GVFBfRCwgMH0sIC8qIDE5OSAqLworICAgIHsgImZ0cF9nZXRwdXRyZW1vdGUiLCBWTl9GVFBf RywgMH0sIC8qIDE5OSAqLworICAgIHsgImZ0cF9ob3N0IiwgICAgICAgICBWTl9GVFBfSCwgMH0s IC8qIDE5OSAqLworICAgIHsgImZ0cF9sb2dnZWRpbiIsICAgICBWTl9GVFBfTCwgMH0sIC8qIDE5 OSAqLworICAgIHsgImZ0cF9tZXNzYWdlIiwgICAgICBWTl9GVFBfTSwgMH0sIC8qIDE5OSAqLwor ICAgIHsgImZ0cF9tc2ciLCAgICAgICAgICBWTl9GVFBfTSwgQ01fSU5WfSwgLyogMTk5ICovCisg ICAgeyAiZnRwX3NlY3VyaXR5IiwgICAgIFZOX0ZUUF9aLCAwfSwgLyogMTk5ICovCisgICAgeyAi ZnRwX3NlcnZlciIsICAgICAgIFZOX0ZUUF9TLCAwfSwgLyogMTk5ICovCisjZW5kaWYgLyogU1lT RlRQICovCisjZW5kaWYgLyogTk9GVFAgKi8KKyAgICB7ICJmdHlwZSIsICAgICBWTl9NT0RFLCAg MH0sICAgICAgICAvKiAxOTAgKi8KKyNpZmRlZiBLVUkKKyAgICB7ICJndWlfZm9udG5hbWUiLCBW Tl9HVUlfRk5NLCAwfSwJLyogMjA1ICovCisgICAgeyAiZ3VpX2ZvbnRzaXplIiwgVk5fR1VJX0ZT WiwgMH0sCS8qIDIwNSAqLworICAgIHsgImd1aV9ydW5tb2RlIiwgVk5fR1VJX1JVTiwgMH0sICAg IC8qIDIwNSAqLworICAgIHsgImd1aV94cG9zIiwgICAgVk5fR1VJX1hQLCAgMH0sICAgIC8qIDIw NSAqLworICAgIHsgImd1aV94cmVzIiwgICAgVk5fR1VJX1hSLCAgMH0sICAgIC8qIDIwNSAqLwor ICAgIHsgImd1aV95cG9zIiwgICAgVk5fR1VJX1lQLCAgMH0sICAgIC8qIDIwNSAqLworICAgIHsg Imd1aV95cmVzIiwgICAgVk5fR1VJX1lSLCAgMH0sICAgIC8qIDIwNSAqLworI2VuZGlmIC8qIEtV SSAqLworICAgIHsgImhlcmFsZCIsICAgIFZOX0hFUkFMRCwgMH0sCisgICAgeyAiaG9tZSIsICAg ICAgVk5fSE9NRSwgICAwfSwKKyAgICB7ICJob3N0IiwgICAgICBWTl9IT1NULCAgIDB9LAorICAg IHsgImhvdXIiLCAgICAgIFZOX0hPVVIsICAgMH0sICAgICAgIC8qIDIwMCAqLworI2lmbmRlZiBO T0hUVFAKKyAgICB7ICJodHRwX2NvZGUiLCAgICAgIFZOX0hUVFBfQywgMH0sICAvKiAxOTkgKi8K KyAgICB7ICJodHRwX2Nvbm5lY3RlZCIsIFZOX0hUVFBfTiwgMH0sICAvKiAxOTkgKi8KKyAgICB7 ICJodHRwX2hvc3QiLCAgICAgIFZOX0hUVFBfSCwgMH0sICAvKiAxOTkgKi8KKyAgICB7ICJodHRw X21lc3NhZ2UiLCAgIFZOX0hUVFBfTSwgMH0sICAvKiAxOTkgKi8KKyAgICB7ICJodHRwX3NlY3Vy aXR5IiwgIFZOX0hUVFBfUywgMH0sICAvKiAxOTkgKi8KKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyAg ICB7ICJod3Bhcml0eSIsICBWTl9IV1BBUiwgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJp bnB1dCIsICAgICBWTl9JQlVGLCAgMH0sCisgICAgeyAiaW5jaGFyIiwgICAgVk5fSUNIUiwgIDB9 LAorICAgIHsgImluY291bnQiLCAgIFZOX0lDTlQsICAwfSwKKyAgICB7ICJpbmlkaXIiLCAgICBW Tl9JTkksICAgMH0sICAgICAgICAvKiAxOTIgKi8KKyAgICB7ICJpbm1hdGNoIiwgICBWTl9NQVRD SCwgMH0sICAgICAgICAvKiAxOTYgKi8KKyAgICB7ICJpbm1lc3NhZ2UiLCBWTl9JTlBNU0csMH0s ICAgICAgICAvKiAyMTIgKi8KKyAgICB7ICJpbnNjYWxlIiwgICBWTl9JU0NBTEUsMH0sICAgICAg ICAvKiAyMTAgKi8KKyAgICB7ICJpbnN0YXR1cyIsICBWTl9JU1RBVCwgMH0sICAgICAgICAvKiAx OTIgKi8KKyAgICB7ICJpbnRpbWUiLCAgICBWTl9JTlRJTUUsMH0sICAgICAgICAvKiAxOTMgKi8K KyAgICB7ICJpbndhaXQiLCAgICBWTl9JTlRNTywgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7 ICJpcCIsICAgICAgICBWTl9JUEFERFIsIENNX0FCUnxDTV9JTlZ9LAorICAgIHsgImlwYWRkcmVz cyIsIFZOX0lQQUREUiwwfSwgICAgICAgIC8qIDE5MiAqLworICAgIHsgImlwcm9tcHQiLCAgIFZO X1BST01QVCwwfSwgICAgICAgIC8qIDE5OSAqLworICAgIHsgImtiY2hhciIsICAgIFZOX0tCQ0hB UiwwfSwgICAgICAgIC8qIDE5NiAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAg eyAia2V5Ym9hcmQiLCAgVk5fS0VZQiwgIDB9LAorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IE5PTE9DQUwgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworICAgIHsgImtyYjRlcnJtc2ciLCAgICBW Tl9LNEVNU0csMH0sCisgICAgeyAia3JiNGVycm5vIiwgICAgIFZOX0s0RU5PLCAwfSwKKyAgICB7 ICJrcmI0cHJpbmNpcGFsIiwgVk5fSzRQUk4sIDB9LAorICAgIHsgImtyYjRyZWFsbSIsICAgICBW Tl9LNFJMTSwgMH0sCisgICAgeyAia3JiNHNlcnZpY2UiLCAgIFZOX0s0U1JWLCAwfSwKKyAgICB7 ICJrcmI1Y2MiLCAgICAgICAgVk5fSzVDQywgIDB9LAorICAgIHsgImtyYjVlcnJtc2ciLCAgICBW Tl9LNUVNU0csMH0sCisgICAgeyAia3JiNWVycm5vIiwgICAgIFZOX0s1RU5PLCAwfSwKKyAgICB7 ICJrcmI1cHJpbmNpcGFsIiwgVk5fSzVQUk4sIDB9LAorICAgIHsgImtyYjVyZWFsbSIsICAgICBW Tl9LNVJMTSwgMH0sCisgICAgeyAia3JiNXNlcnZpY2UiLCAgIFZOX0s1U1JWLCAwfSwKKyNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLworICAgIHsgImxhc3Rjb21tYW5kIiwgICBWTl9QUkVWQ01ELCAw fSwJLyogMjk5ICovCisjaWZuZGVmIE5PTEFTVEZJTEUKKyAgICB7ICJsYXN0ZmlsZXNwZWMiLCAg Vk5fTEFTVEZJTCwgMH0sCS8qIDIxMiAqLworI2VuZGlmCS8qIE5PTEFTVEZJTEUgKi8KKyAgICB7 ICJsYXN0a2V5d29yZHZhbHVlIiwgIFZOX0xBU1RLV1YsIDB9LCAvKiAyMTIgKi8KKyAgICB7ICJs YXN0a3d2YWx1ZSIsICAgVk5fTEFTVEtXViwgQ01fQUJSfENNX0lOVn0sIC8qIDIxMiAqLworICAg IHsgImxpbmUiLCAgICAgICAgICBWTl9MSU5FLCAgMH0sCisgICAgeyAibG9jYWwiLCAgICAgICAg IFZOX0xDTCwgICAwfSwKKyNpZmRlZiBVTklYCisgICAgeyAibG9ja2RpciIsICAgICAgIFZOX0xD S0RJUiwwfSwJLyogMTk1ICovCisgICAgeyAibG9ja3BpZCIsICAgICAgIFZOX0xDS1BJRCwwfSwJ LyogMTk1ICovCisjZW5kaWYgLyogVU5JWCAqLworICAgIHsgImxvZ19jb25uZWN0aW9uIiwgVk5f TE9HX0NPTiwgMH0sIC8qIDIwNiAqLworICAgIHsgImxvZ19kZWJ1ZyIsIFZOX0xPR19ERUIsIDB9 LCAgICAgIC8qIDIwNiAqLworICAgIHsgImxvZ19wYWNrZXQiLCBWTl9MT0dfUEtULCAwfSwgICAg IC8qIDIwNiAqLworICAgIHsgImxvZ19zZXNzaW9uIiwgVk5fTE9HX1NFUywgMH0sICAgIC8qIDIw NiAqLworICAgIHsgImxvZ190cmFuc2FjdGlvbiIsIFZOX0xPR19UUkEsIDB9LC8qIDIwNiAqLwor ICAgIHsgIm1hY2xldmVsIiwgIFZOX01BQ0xWTCwwfSwgICAgICAgIC8qIDE5NSAqLworICAgIHsg Im1hY3JvIiwgICAgIFZOX01BQywgICAwfSwKKyNpZmRlZiBGTkZMT0FUCisgICAgeyAibWF0aF9l IiwgICAgVk5fTUFfRSwgIDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAibWF0aF9waSIsICAg Vk5fTUFfUEksIDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAibWF0aF9wcmVjaXNpb24iLCBW Tl9NQV9QUiwgMH0sICAgLyogMTk1ICovCisjZW5kaWYgLyogRk5GTE9BVCAqLworICAgIHsgIm1p bnB1dCIsICAgIFZOX01JTlAsICAwfSwgICAgICAgIC8qIDE5MiAqLworICAgIHsgIm1vZGVsIiwg ICAgIFZOX01PREwsICAwfSwgICAgICAgIC8qIDE5MyAqLworICAgIHsgIm1vZGVtIiwgICAgIFZO X01ETSwgICAwfSwKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIHsgIm1vdXNlY3Vy eCIsIFZOX01PVV9YLCAwfSwgICAgICAgIC8qIEs5NSAxLjEuMTQgKi8KKyAgICB7ICJtb3VzZWN1 cnkiLCBWTl9NT1VfWSwgMH0sICAgICAgICAvKiBLOTUgMS4xLjE0ICovCisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT0RJQUwKKyAgICB7ICJtX2FhX29m ZiIsICBWTl9NX0FBWCwgMH0sICAgICAgICAvKiBhbGwgMTkyLi4uICovCisgICAgeyAibV9hYV9v biIsICAgVk5fTV9BQU8sIDB9LAorICAgIHsgIm1fZGNfb2ZmIiwgIFZOX01fRENYLCAwfSwKKyAg ICB7ICJtX2RjX29uIiwgICBWTl9NX0RDTywgMH0sCisgICAgeyAibV9kaWFsIiwgICAgVk5fTV9E Q00sIDB9LAorICAgIHsgIm1fZWNfb2ZmIiwgIFZOX01fRUNYLCAwfSwKKyAgICB7ICJtX2VjX29u IiwgICBWTl9NX0VDTywgMH0sCisgICAgeyAibV9mY19odyIsICAgVk5fTV9IV0YsIDB9LAorICAg IHsgIm1fZmNfbm8iLCAgIFZOX01fTkZDLCAwfSwKKyAgICB7ICJtX2ZjX3N3IiwgICBWTl9NX1NX RiwgMH0sCisgICAgeyAibV9odXAiLCAgICAgVk5fTV9IVVAsIDB9LAorICAgIHsgIm1faW5pdCIs ICAgIFZOX01fSU5JLCAwfSwKKyAgICB7ICJtX25hbWUiLCAgICBWTl9NX05BTSwgMH0sICAgICAg ICAvKiAxOTUgKi8KKyAgICB7ICJtX3B1bHNlIiwgICBWTl9NX1BETSwgMH0sCisgICAgeyAibV9z aWdfY2QiLCAgVk5fTVNfQ0QsIDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAibV9zaWdfY3Rz IiwgVk5fTVNfQ1RTLDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAibV9zaWdfZHNyIiwgVk5f TVNfRFNSLDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAibV9zaWdfZHRyIiwgVk5fTVNfRFRS LDB9LCAgICAgICAgLyogMTk1ICovCisgICAgeyAibV9zaWdfcmkiLCAgVk5fTVNfUkksIDB9LCAg ICAgICAgLyogMTk1ICovCisgICAgeyAibV9zaWdfcnRzIiwgVk5fTVNfUlRTLDB9LCAgICAgICAg LyogMTk1ICovCisgICAgeyAibV90b25lIiwgICAgVk5fTV9URE0sIDB9LAorI2VuZGlmIC8qIE5P RElBTCAqLworICAgIHsgIm5hbWUiLCAgICAgIFZOX05BTUUsICAwfSwKKyAgICB7ICJuZGF0ZSIs ICAgICBWTl9OREFULCAgMH0sCisgICAgeyAibmRheSIsICAgICAgVk5fTkRBWSwgIDB9LAorICAg IHsgIm5ld2xpbmUiLCAgIFZOX05FV0wsICAwfSwKKyAgICB7ICJudGltZSIsICAgICBWTl9OVElN LCAgMH0sCisgICAgeyAib3NuYW1lIiwgICAgVk5fT1NOQU0sIDB9LCAgICAgICAgLyogMTkzICov CisgICAgeyAib3NyZWxlYXNlIiwgVk5fT1NSRUwsIDB9LCAgICAgICAgLyogMTkzICovCisgICAg eyAib3N2ZXJzaW9uIiwgVk5fT1NWRVIsIDB9LCAgICAgICAgLyogMTkzICovCisjaWZuZGVmIE5P WEZFUgorICAgIHsgInBhY2tldGxlbiIsIFZOX1JQU0laLCAwfSwgICAgICAgIC8qIDE5MiAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHsgInBhcml0eSIsICAgIFZOX1BSVFksICAwfSwgICAg ICAgIC8qIDE5MCAqLworICAgIHsgInBhc3N3b3JkIiwgIFZOX1BXRCwgICBDTV9JTlZ9LCAgIC8q IDE5MiAqLworI2lmZGVmIE5UCisgICAgeyAicGVyc29uYWwiLCAgVk5fUEVSU09OQUwsIDB9LCAg ICAgLyogMjAxICovCisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBQRVhJVFNUQVQKKyAgICB7ICJw ZXhpdHN0YXQiLCBWTl9QRVhJVCwgMH0sICAgICAgICAvKiAxOTMgKi8KKyNlbmRpZiAvKiBQRVhJ VFNUQVQgKi8KKyNpZmRlZiBDS19QSUQKKyAgICB7ICJwaWQiLCAgICAgICBWTl9QSUQsICAgMH0s ICAgICAgICAvKiAxOTMgKi8KKyNlbmRpZiAvKiBDS19QSUQgKi8KKyAgICB7ICJwbGF0Zm9ybSIs ICBWTl9TWVNWLCAgMH0sCisgICAgeyAicHJpbnRlciIsICAgVk5fUFJJTlQsIDB9LCAgICAgICAg LyogMTkzICovCisgICAgeyAicHJvZ3JhbSIsICAgVk5fUFJPRywgIDB9LAorICAgIHsgInByb21w dCIsICAgIFZOX1BSTSwgICBDTV9JTlZ9LCAgIC8qIDE5MiAqLworI2lmbmRlZiBOT1hGRVIKKyAg ICB7ICJwcm90b2NvbCIsICBWTl9QUk9UTywgMH0sICAgICAgICAvKiAxOTIgKi8KKyAgICB7ICJw XzhiaXQiLCAgICBWTl9QXzhCSVQsMH0sICAgICAgICAvKiAxOTMgKi8KKyAgICB7ICJwX2N0bCIs ICAgICBWTl9QX0NUTCwgMH0sICAgICAgICAvKiAxOTMgKi8KKyAgICB7ICJwX3JwdCIsICAgICBW Tl9QX1JQVCwgMH0sICAgICAgICAvKiAxOTMgKi8KKyAgICB7ICJxdWVyeSIsICAgICBWTl9RVUUs ICAgMH0sICAgICAgICAvKiAxOTAgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJyZW1v dGVpcCIsICBWTl9IT1NUSVAsMH0sCS8qIDIxMiAqLworICAgIHsgInJldHVybiIsICAgIFZOX1JF VCwgICAwfSwKKyNpZmRlZiBDS19SRVhYCisgICAgeyAicmV4eCIsICAgICAgVk5fUkVYWCwgIDB9 LCAgICAgICAgLyogMTkwICovCisjZW5kaWYgLyogQ0tfUkVYWCAqLworI2lmZGVmIFROX0NPTVBP UlQKKyAgICB7ICJyZmMyMjE3X3NpZ25hdHVyZSIsIFZOX1ROQ19TSUcsIDB9LCAvKiAyMDEgKi8K KyAgICB7ICJyZmMyNzE3X3NpZ25hdHVyZSIsIFZOX1ROQ19TSUcsIENNX0lOVn0sIC8qIDIwMiAq LworI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8KKyAgICB7ICJyb3dzIiwgICAgICBWTl9ST1dTLCAg MH0sICAgICAgICAvKiAxOTAgKi8KKyNpZm5kZWYgTk9TRVhQCisgICAgeyAic2RlcHRoIiwgICAg Vk5fTFNFWFAsMH0sICAgICAgICAgLyogMTk5ICovCisjZW5kaWYgLyogTk9TRVhQICovCisgICAg eyAic2VjdXJlIiwgICAgVk5fU0VDVVJFLCAwfSwgICAgICAgLyogMTk5ICovCisjaWZuZGVmIE5P TE9DQUwKKyNpZmRlZiBPUzIKKyAgICB7ICJzZWxlY3QiLCAgICBWTl9TRUxDVCwgMH0sICAgICAg ICAvKiAxOTIgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAg eyAic2VuZGxpc3QiLCAgVk5fU05ETCwgIDB9LAorICAgIHsgInNlcmlhbCIsICAgIFZOX1NFUklB TCwwfSwgICAgICAgIC8qIDE5NSAqLworICAgIHsgInNldGxpbmVtc2ciLFZOX1NMTVNHLCAwfSwg ICAgICAgIC8qIDE5NSAqLworI2lmbmRlZiBOT1NFWFAKKyAgICB7ICJzZXhwcmVzc2lvbiIsVk5f U0VYUCwgMH0sICAgICAgICAvKiAxOTkgKi8KKyNlbmRpZiAvKiBOT1NFWFAgKi8KKyAgICB7ICJz cGVlZCIsICAgICBWTl9TUEVFLCAgMH0sCisjaWZkZWYgT1MyCisgICAgeyAic3BhY2UiLCAgICAg Vk5fU1BBLCAgIDB9LAorICAgIHsgInN0YXJ0dXAiLCAgIFZOX1NUQVIsICAwfSwgICAgICAgIC8q IDE5MCAqLworI2Vsc2UKKyNpZmRlZiBVTklYCisgICAgeyAic3RhcnR1cCIsICAgVk5fU1RBUiwg IDB9LCAgICAgICAgLyogMTkzICovCisjZWxzZQorI2lmZGVmIFZNUworICAgIHsgInN0YXJ0dXAi LCAgIFZOX1NUQVIsICAwfSwgICAgICAgIC8qIDE5MyAqLworI2VuZGlmIC8qIFZNUyAqLworI2Vu ZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICJzdGF0dXMiLCAgICBWTl9T VUNDLCAgMH0sCisjaWZuZGVmIE5PU0VYUAorICAgIHsgInN2YWx1ZSIsICAgIFZOX1ZTRVhQLCAw fSwgICAgICAgIC8qIDE5OSAqLworI2VuZGlmIC8qIE5PU0VYUCAqLworI2lmbmRlZiBOT1hGRVIK KyAgICB7ICJzeXNpZCIsICAgICBWTl9TWVNJLCAgMH0sCisjZW5kaWYgLyogTk9YRkVSICovCisg ICAgeyAic3lzdGVtIiwgICAgVk5fU1lTVCwgIDB9LAorICAgIHsgInRlcm1pbmFsIiwgIFZOX1RU WVAsICAwfSwKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9LVkVSQlMKKyAgICB7ICJ0ZXJta2V5Iiwg ICBWTl9UUk1LLCAgQ01fSU5WfSwgICAvKiAxOTIgKi8KKyNlbmRpZiAvKiBOT0tWRVJCUyAqLwor I2VuZGlmIC8qIE9TMiAqLworICAgIHsgInRlc3QiLCAgICAgIFZOX1RFU1QsICAwfSwgICAgICAg IC8qIDE5MyAqLworICAgIHsgInRleHRkaXIiLCAgIFZOX1RYVERJUiwwfSwgICAgICAgIC8qIDE5 NSAqLworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJ0ZnNpemUiLCAgICBWTl9URkMsICAgMH0sCisg ICAgeyAidGZ0aW1lIiwgICAgVk5fVEZUSU0sIDB9LCAgICAgICAgLyogMTk1ICovCisjZW5kaWYg LyogTk9YRkVSICovCisgICAgeyAidGltZSIsICAgICAgVk5fVElNRSwgIDB9LAorICAgIHsgInRp bWVzdGFtcCIsIFZOX05PVywgICAwfSwgICAgICAgIC8qIDIwMCAqLworICAgIHsgInRtcGRpciIs ICAgIFZOX1RFTVAsICAwfSwgICAgICAgIC8qIDE5MiAqLworI2lmZGVmIENLX1RSSUdHRVIKKyAg ICB7ICJ0cmlnZ2VyIiwgICBWTl9UUklHLCAgMH0sICAgICAgICAvKiAxOTMgKi8KKyNlbmRpZiAv KiBDS19UUklHR0VSICovCisjaWZkZWYgQ0tfVFRZRkQKKyAgICB7ICJ0dHlmZCIsICAgICBWTl9U VFlGLCAgMH0sCisjZW5kaWYgLyogQ0tfVFRZRkQgKi8KKyAgICB7ICJ0eV9sbiIsICAgICBWTl9U WV9MTiwgMH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJ0eV9sYyIsICAgICBWTl9UWV9MQywg MH0sICAgICAgICAvKiAxOTUgKi8KKyAgICB7ICJ0eV9sbSIsICAgICBWTl9UWV9MTSwgMH0sICAg ICAgICAvKiAxOTUgKi8KKyNpZmRlZiBCUk9XU0VSCisgICAgeyAidXJsIiwgICAgICAgVk5fVVJM LCAgIENNX0lOVn0sICAgLyogMTkzICovCisjZW5kaWYgLyogQlJPV1NFUiAqLworICAgIHsgInVz ZXJpZCIsICAgIFZOX1VJRCwgICAwfSwgICAgICAgIC8qIDE5MiAqLworICAgIHsgInZhcmV2YWwi LCAgIFZOX1ZBUkVWQUwsIDB9LAkvKiAyMTIgKi8KKyAgICB7ICJ2ZXJzaW9uIiwgICBWTl9WRVJT LCAgMH0sCisjaWZuZGVmIE5PWEZFUgorICAgIHsgIndpbmRvdyIsICAgIFZOX1dJTkRPLCAwfSwg ICAgICAgIC8qIDE5MiAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmZGVmIElCTVgyNQorICAg IHsgIngyNWxvY2FsX251YSIsIFZOX1gyNUxBLCAwfSwgICAgIC8qIDE5MyAqLworICAgIHsgIngy NXJlbW90ZV9udWEiLCBWTl9YMjVSQSwgMH0sICAgIC8qIDE5MyAqLworI2VuZGlmIC8qIElCTVgy NSAqLworI2lmZGVmIENLX1NTTAorICAgIHsgIng1MDlfaXNzdWVyIiwgIFZOX1g1MDlfSSwgMH0s CisgICAgeyAieDUwOV9zdWJqZWN0IiwgVk5fWDUwOV9TLCAwfSwKKyNlbmRpZiAvKiBDS19TU0wg Ki8KKyNpZm5kZWYgTk9YRkVSCisgICAgeyAieGZlcnN0YXR1cyIsVk5fWEZTVEFULDB9LCAgICAg ICAgLyogMTkzICovCisgICAgeyAieGZlcm1zZyIsICAgVk5fWEZNU0csIDB9LCAgICAgICAgLyog MTkzICovCisgICAgeyAieGZlcl9iYWRwYWNrZXRzIiwgVk5fWEZfQkMsIDB9LCAgLyogMTk1ICov CisgICAgeyAieGZlcl90aW1lb3V0cyIsICAgVk5fWEZfVE0sIDB9LCAgLyogMTk1ICovCisgICAg eyAieGZlcl9yZXRyYW5zbWl0cyIsVk5fWEZfUlgsIDB9LCAgLyogMTk1ICovCisjZW5kaWYgLyog Tk9YRkVSICovCisgICAgeyAieHByb2dyYW0iLCAgVk5fWFBST0csIDB9LCAgICAgICAgLyogMTkz ICovCisgICAgeyAieHZlcnNpb24iLCAgVk5fWFZOVU0sIDB9ICAgICAgICAgLyogMTkyICovCit9 OworaW50IG52YXJzID0gKHNpemVvZih2YXJ0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsK KyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU1BMCitzdHJ1Y3Qga2V5dGFiIGZuY3Rh YltdID0geyAgICAgICAgICAgICAgLyogRnVuY3Rpb24gbmFtZXMgKi8KKyNpZmRlZiBPUzIKKyAg ICB7ICIub294IiwgICAgICAgRk5fT09YLCBDTV9JTlZ9LCAgICAvKiAuLi4gKi8KKyNlbmRpZiAv KiBPUzIgKi8KKworI2lmZGVmIENLQ0hBTk5FTElPCisgICAgeyAiX2VvZiIsICAgICAgIEZOX0ZF T0YsICAgMH0sCisgICAgeyAiX2Vycm1zZyIsICAgIEZOX0ZFUk1TRywgMH0sCisgICAgeyAiX2dl dGJsb2NrIiwgIEZOX0ZHQkxLLCAgMH0sCisgICAgeyAiX2dldGNoYXIiLCAgIEZOX0ZHQ0hBUiwg MH0sCisgICAgeyAiX2dldGxpbmUiLCAgIEZOX0ZHTElORSwgMH0sCisgICAgeyAiX2hhbmRsZSIs ICAgIEZOX0ZJTE5PLCAgMH0sCisgICAgeyAiX2xpbmUiLCAgICAgIEZOX05MSU5FLCAgMH0sCisg ICAgeyAiX3BvcyIsICAgICAgIEZOX0ZQT1MsICAgMH0sCisgICAgeyAiX3B1dGJsb2NrIiwgIEZO X0ZQQkxLLCAgMH0sCisgICAgeyAiX3B1dGNoYXIiLCAgIEZOX0ZQQ0hBUiwgMH0sCisgICAgeyAi X3B1dGxpbmUiLCAgIEZOX0ZQTElORSwgMH0sCisgICAgeyAiX3N0YXR1cyIsICAgIEZOX0ZTVEFU LCAgMH0sCisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworICAgIHsgImFhY29udmVydCIsICBG Tl9BQURVTVAsIDB9LCAgICAgIC8qIEFzc29jaWF0aXZlIEFycmF5IGNvbnZlcnNpb24gKi8KKyAg ICB7ICJhYnNvbHV0ZSIsICAgRk5fQUJTLCAgMH0sICAgICAgICAvKiBBYnNvbHV0ZSB2YWx1ZSAq LworI2lmZGVmIFRDUFNPQ0tFVAorICAgIHsgImFkZHIybmFtZSIsICBGTl9IU1RBREQsQ01fSU5W fSwgIC8qIElQIEFkZHJlc3MgdG8gSG9zdG5hbWUgKi8KKyAgICB7ICJhZGRydG9uYW1lIiwgRk5f SFNUQURELENNX0lOVn0sICAvKiBJUCBBZGRyZXNzIHRvIEhvc3RuYW1lICovCisjZW5kaWYgLyog VENQU09DS0VUICovCisgICAgeyAiYXJyYXlsb29rIiwgIEZOX0FMT09LLDB9LCAgICAgICAgLyog QXJyYXkgbG9va3VwICovCisgICAgeyAiYjY0ZGVjb2RlIiwgIEZOX0ZNQjY0LDB9LCAgICAgICAg LyogQmFzZS02NCBjb252ZXJzaW9uICovCisgICAgeyAiYjY0ZW5jb2RlIiwgIEZOX1RPQjY0LDB9 LCAgICAgICAgLyogLi4uICovCisgICAgeyAiYmFzZW5hbWUiLCAgIEZOX0JTTiwgIDB9LCAgICAg ICAgLyogQmFzZW5hbWUgKi8KKyAgICB7ICJicmVhayIsICAgICAgRk5fQlJLLCAgMH0sICAgICAg ICAvKiBCcmVhayAoYXMgaW4gU25vYm9sKSAqLworICAgIHsgImNhIiwgICAgICAgICBGTl9DQVAs ICBDTV9JTlZ8Q01fQUJSfSwgLyogQWJicmV2aWF0aW9uIGZvciBjYXBpdGFibGl6ZSAqLworICAg IHsgImNhcCIsICAgICAgICBGTl9DQVAsICBDTV9JTlZ8Q01fQUJSfSwgLyogQWJicmV2aWF0aW9u IGZvciBjYXBpdGFibGl6ZSAqLworICAgIHsgImNhcGl0YWxpemUiLCBGTl9DQVAsICAwfSwgICAg ICAgIC8qIEZpcnN0IExldHRlciAtPiB1cHBlcmNhc2UgKi8KKyAgICB7ICJjYXBzIiwgICAgICAg Rk5fQ0FQLCAgQ01fSU5WfSwgICAvKiBkaXR0byAqLworICAgIHsgImNoYXJhY3RlciIsICBGTl9D SFIsICAwfSwgICAgICAgIC8qIENoYXJhY3RlciBmcm9tIGNvZGUgKi8KKyAgICB7ICJjaGVja3N1 bSIsICAgRk5fQ0hLLCAgMH0sICAgICAgICAvKiBDaGVja3N1bSAqLworICAgIHsgImNtZHN0YWNr IiwgICBGTl9DTURTVEssMH0sICAgICAgIC8qIENvbW1hbmQgc3RhY2sgKi8KKyAgICB7ICJjbXBk YXRlcyIsICAgRk5fQ01QREFURSwwfSwgICAgICAvKiBDb21wYXJlIGRhdGVzICovCisgICAgeyAi Y29kZSIsICAgICAgIEZOX0NPRCwgIDB9LCAgICAgICAgLyogQ29kZSBmcm9tIGNoYXJhY3RlciAq LworI2lmbmRlZiBOT1BVU0gKKyAgICB7ICJjb21tYW5kIiwgICAgRk5fQ01ELCAgMH0sICAgICAg ICAvKiBPdXRwdXQgZnJvbSBhIGNvbW1hbmQgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICB7 ICJjb250ZW50cyIsICAgRk5fQ09OLCAgMH0sICAgICAgICAvKiBEZWZpbml0aW9uIChjb250ZW50 cykgb2YgdmFyaWFibGUgKi8KKyAgICB7ICJjb3VudCIsICAgICAgRk5fQ09VTlQsIDB9LCAgICAg ICAvKiBPY2N1cnJlbmNlcyBvZiBzdHJpbmcgaW4gc3RyaW5nICovCisgICAgeyAiY3JjMTYiLCAg ICAgIEZOX0NSQywgIDB9LCAgICAgICAgLyogQ1JDLTE2ICovCisjaWZkZWYgT1MyCisgICAgeyAi Y3J5cHQiLCAgICAgIEZOX0NSWSwgQ01fSU5WfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICJj dnRjc2V0IiwgICAgRk5fWExBVEUsIDB9LAkvKiBDb252ZXJ0IGNoYXJhY3RlciBzZXQgKi8KKyAg ICB7ICJjdnRkYXRlIiwgICAgRk5fRFRJTSwgMH0sICAgICAgICAvKiBDb252ZXJ0IGZyZWUgZGF0 ZS90aW1lIHRvIHN0ZCAqLworI2lmZGVmIFpGQ0RBVAorICAgIHsgImRhdGUiLCAgICAgICBGTl9G RCwgICAwfSwgICAgICAgIC8qIEZpbGUgbW9kaWZpY2F0aW9uL2NyZWF0aW9uIGRhdGUgKi8KKyNl bmRpZiAvKiBaRkNEQVQgKi8KKyAgICB7ICJkYXkiLCAgICAgICAgRk5fREFZLCAgMH0sICAgICAg ICAvKiBEYXkgb2Ygd2VlayAqLworICAgIHsgImRheW9meWVhciIsICBGTl9KREFURSwwfSwgICAg ICAgIC8qIERhdGUgdG8gRGF5IG9mIFllYXIgKi8KKyAgICB7ICJkZWNvZGVoZXgiLCAgRk5fVU5Q Q1QsIDB9LAkvKiBEZWNvZGUgc3RyaW5nIHdpdGggaGV4IGVzY2FwZXMgKi8KKyAgICB7ICJkZWZp bml0aW9uIiwgRk5fREVGLCAgMH0sICAgICAgICAvKiBSZXR1cm4gZGVmaW5pdGlvbiBvZiBnaXZl biBtYWNybyAqLworICAgIHsgImRlbHRhMnNlY3MiLCBGTl9ERUxTRUMsIDB9LCAgICAgIC8qIERl bHRhIHRpbWUgdG8gc2Vjb25kcyAqLworICAgIHsgImRlbHRhdG9zZWNzIiwgRk5fREVMU0VDLCBD TV9JTlZ9LCAvKiBEZWx0YSB0aW1lIHRvIHNlY29uZHMgKi8KKyNpZm5kZWYgTk9ESUFMCisgICAg eyAiZGlhbGNvbnZlcnQiLEZOX1BOQ1ZULDB9LCAgICAgICAgLyogQ29udmVydCBwb3J0YWJsZSBw aG9uZSBudW1iZXIgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAgICB7ICJkaWZmZGF0ZXMiLCAg Rk5fRElGREFURSwwfSwgICAgICAvKiBEaWZmZXJlbmNlIG9mIHR3byBkYXRlLXRpbWVzICovCisg ICAgeyAiZGltZW5zaW9uIiwgIEZOX0RJTSwgIDB9LCAgICAgICAgLyogRGltZW5zaW9uIG9mIGFy cmF5ICovCisgICAgeyAiZGlyIiwgICAgICAgIEZOX0RJUiwgIENNX0lOVnxDTV9BQlJ9LCAvKiBB YmJyZXZpYXRpb24gZm9yIGRpcmVjdC4uICovCisgICAgeyAiZGlyZSIsICAgICAgIEZOX0RJUiwg IENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRpb24gZm9yIGRpcmVjdC4uICovCisgICAgeyAi ZGlyZWMiLCAgICAgIEZOX0RJUiwgIENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRpb24gZm9y IGRpcmVjdC4uICovCisgICAgeyAiZGlyZWN0IiwgICAgIEZOX0RJUiwgIENNX0lOVnxDTV9BQlJ9 LCAvKiBBYmJyZXZpYXRpb24gZm9yIGRpcmVjdC4uICovCisgICAgeyAiZGlyZWN0byIsICAgIEZO X0RJUiwgIENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRpb24gZm9yIGRpcmVjdC4uICovCisg ICAgeyAiZGlyZWN0b3IiLCAgIEZOX0RJUiwgIENNX0lOVnxDTV9BQlJ9LCAvKiBBYmJyZXZpYXRp b24gZm9yIGRpcmVjdC4uICovCisgICAgeyAiZGlyZWN0b3JpZXMiLEZOX0RJUiwgIDB9LCAgICAg ICAgLyogTGlzdCBvZiBkaXJlY3RvcmllcyAqLworICAgIHsgImRpcmVjdG9yeSIsICBGTl9ESVIs ICBDTV9JTlZ9LAkvKiBMaXN0IG9mIGRpcmVjdG9yaWVzICovCisgICAgeyAiZGlybmFtZSIsICAg IEZOX0ROQU0sIDB9LCAgICAgICAgLyogRGlyZWN0b3J5IHBhcnQgb2YgZmlsZW5hbWUgKi8KKyAg ICB7ICJkb3MydW5peHBhdGgiLEZOX1BDX0RVLCB9LCAgICAgICAvKiBET1MgdG8gVU5JWCBwYXRo ICovCisgICAgeyAiZG9zdG91bml4cGF0aCIsRk5fUENfRFUsIENNX0lOVn0sIC8qIERPUyB0byBV TklYIHBhdGggKi8KKyAgICB7ICJkb3kiLCAgICAgICAgRk5fSkRBVEUsQ01fSU5WfSwgICAvKiBE YXRlIHRvIERheSBvZiBZZWFyICovCisgICAgeyAiZG95MmRhdGUiLCAgIEZOX0RBVEVKLDB9LCAg ICAgICAgLyogRGF5IG9mIFllYXIgdG8gZGF0ZSAqLworICAgIHsgImRveXRvZGF0ZSIsICBGTl9E QVRFSixDTV9JTlZ9LCAgIC8qIERheSBvZiBZZWFyIHRvIGRhdGUgKi8KKyAgICB7ICJlbWFpbGFk ZHJlc3MiLEZOX0VNQUlMLCAwfSwJLyogRW1haWwgYWRkcmVzcyAqLworI2lmZGVmIEZOX0VSUk1T RworICAgIHsgImVycnN0cmluZyIsICBGTl9FUlJNU0csMH0sICAgICAgIC8qIEVycm9yIGNvZGUg dG8gbWVzc2FnZSAqLworI2VuZGlmIC8qIEZOX0VSUk1TRyAqLworICAgIHsgImV2YWx1YXRlIiwg ICBGTl9FVkEsICAwfSwgICAgICAgIC8qIEV2YWx1YXRlIGdpdmVuIGFyaXRoIGV4cHJlc3Npb24g Ki8KKyAgICB7ICJleGVjdXRlIiwgICAgRk5fRVhFLCAgMH0sICAgICAgICAvKiBFeGVjdXRlIGdp dmVuIG1hY3JvICovCisgICAgeyAiZmlsZXMiLCAgICAgIEZOX0ZDLCAgIDB9LCAgICAgICAgLyog RmlsZSBjb3VudCAqLworI2lmZGVmIEZORkxPQVQKKyAgICB7ICJmcGFic29sdXRlIiwgRk5fRlBB QlMsIDB9LCAgICAgICAvKiBGbG9hdGluZy1wb2ludCBhYnNvbHV0ZSB2YWx1ZSAqLworICAgIHsg ImZwYWRkIiwgICAgICBGTl9GUEFERCwgMH0sICAgICAgIC8qIEZQIGFkZCAqLworICAgIHsgImZw Y29zaW5lIiwgICBGTl9GUENPUywgMH0sICAgICAgIC8qIEZQIGNvc2luZSAqLworICAgIHsgImZw ZGl2aWRlIiwgICBGTl9GUERJViwgMH0sICAgICAgIC8qIEZQIGRpdmlkZSAqLworICAgIHsgImZw ZXhwIiwgICAgICBGTl9GUEVYUCwgMH0sICAgICAgIC8qIEZQIGUgdG8gdGhlIHggKi8KKyAgICB7 ICJmcGludCIsICAgICAgRk5fRlBJTlQsIDB9LCAgICAgICAvKiBGUCB0byBpbnRlZ2VyICovCisg ICAgeyAiZnBsb2cxMCIsICAgIEZOX0ZQTE9HLCAwfSwgICAgICAgLyogRlAgYmFzZS0xMCBsb2dh cml0aG0gKi8KKyAgICB7ICJmcGxvZ24iLCAgICAgRk5fRlBMTiwgIDB9LCAgICAgICAvKiBGUCBu YXR1cmFsIGxvZ2FyaXRobSAqLworICAgIHsgImZwbWF4aW11bSIsICBGTl9GUE1BWCwgMH0sICAg ICAgIC8qIEZQIG1heGludW0gKi8KKyAgICB7ICJmcG1pbmltdW0iLCAgRk5fRlBNSU4sIDB9LCAg ICAgICAvKiBGUCBtaW5pbnVtICovCisgICAgeyAiZnBtb2R1bHVzIiwgIEZOX0ZQTU9ELCAwfSwg ICAgICAgLyogRlAgbW9kdWx1cyAqLworICAgIHsgImZwbXVsdGlwbHkiLCBGTl9GUE1VTCwgMH0s ICAgICAgIC8qIEZQIG11bHRpcGx5ICovCisgICAgeyAiZnByYWlzZSIsICAgIEZOX0ZQUE9XLCAw fSwgICAgICAgLyogRlAgcmFpc2UgdG8gYSBwb3dlciAqLworICAgIHsgImZwcm91bmQiLCAgICBG Tl9GUFJPVSwgMH0sICAgICAgIC8qIEZQIHJvdW5kICovCisgICAgeyAiZnBzaW5lIiwgICAgIEZO X0ZQU0lOLCAwfSwgICAgICAgLyogRlAgc2luZSAqLworICAgIHsgImZwc3FydCIsICAgICBGTl9G UFNRUiwgMH0sICAgICAgIC8qIEZQIHNxdWFyZSByb290ICovCisgICAgeyAiZnBzdWJ0cmFjdCIs IEZOX0ZQU1VCLCAwfSwgICAgICAgLyogRlAgc3VidHJhY3QgKi8KKyAgICB7ICJmcHRhbmdlbnQi LCAgRk5fRlBUQU4sIDB9LCAgICAgICAvKiBGUCB0YW5nZW50ICovCisjZW5kaWYgLyogRk5GTE9B VCAqLworICAgIHsgImZ1bmN0aW9uIiwgICBGTl9GVU5DLCAwIH0sICAgICAgIC8qIFRlc3QgZm9y IGV4aXN0ZW5jZSBvZiBhIGZ1bmN0aW9uICovCisgICAgeyAiZ2V0cGlkaW5mbyIsIEZOX1BJRCwg MCAgfSwgICAgICAgLyogR2V0IFBJRCBpbmZvICovCisgICAgeyAiaGV4MmlwIiwgICAgIEZOX0hF WDJJUCwwfSwgICAgICAgLyogSGV4IHRvIElQIGFkZHJlc3MgKi8KKyAgICB7ICJoZXh0b2lwIiwg ICAgRk5fSEVYMklQLENNX0lOVn0sICAvKiBIZXggdG8gSVAgYWRkcmVzcyAqLworICAgIHsgImhl eDJuIiwgICAgICBGTl9IRVgyTiwgQ01fSU5WfSwgIC8qIEhleCB0byBkZWNpbWFsIG51bWJlciAq LworICAgIHsgImhleGlmeSIsICAgICBGTl9IRVgsICAgMH0sICAgICAgIC8qIEhleGlmeSAoc3Ry aW5nKSAqLworICAgIHsgImluZGV4IiwgICAgICBGTl9JTkQsICAgMH0sICAgICAgIC8qIEluZGV4 IChzdHJpbmcgc2VhcmNoKSAqLworICAgIHsgImlwMmhleCIsICAgICBGTl9JUDJIRVgsMH0sICAg ICAgIC8qIElQIGFkZHJlc3MgdG8gaGV4ICovCisgICAgeyAiaXB0b2hleCIsICAgIEZOX0lQMkhF WCxDTV9JTlZ9LCAgLyogSVAgYWRkcmVzcyB0byBoZXggKi8KKyAgICB7ICJpcGFkZHJlc3MiLCAg Rk5fSVBBLCAgIDB9LCAgICAgICAvKiBGaW5kIGFuZCByZXR1cm4gSVAgYWRkcmVzcyAqLworICAg IHsgImpkYXRlIiwgICAgICBGTl9KREFURSwgQ01fSU5WfSwgIC8qIERhdGUgdG8gRGF5IG9mIFll YXIgKi8KKyAgICB7ICJqb2luIiwgICAgICAgRk5fSk9JTiwgIDB9LCAgICAgICAvKiBKb2luIGFy cmF5IGVsZW1lbnRzICovCisgICAgeyAia2V5d29yZHZhbHVlIiwgIEZOX0tXVkFMLCAwfSwgICAg LyogS2V5d29yZD1WYWx1ZSAqLworI2lmZGVmIENLX0tFUkJFUk9TCisgICAgeyAia3JiZmxhZ3Mi LCAgICAgIEZOX0tSQl9GRywgMH0sICAgLyogS2VyYmVyb3MgZnVuY3Rpb25zICovCisgICAgeyAi a3JiaXN2YWxpZCIsICAgIEZOX0tSQl9JViwgMH0sCisgICAgeyAia3JibmV4dHRpY2tldCIsIEZO X0tSQl9OWCwgMH0sCisgICAgeyAia3JidGlja2V0cyIsICAgIEZOX0tSQl9USywgMH0sCisgICAg eyAia3JidGltZWxlZnQiLCAgIEZOX0tSQl9UVCwgMH0sCisjZW5kaWYgLyogQ0tfS0VSQkVST1Mg Ki8KKyAgICB7ICJrd3ZhbHVlIiwgICAgRk5fS1dWQUwsIENNX0lOVn0sCS8qIEtleXdvcmQ9VmFs dWUgKi8KKyAgICB7ICJsZWZ0IiwgICAgICAgRk5fTEVGLCAgMH0sICAgICAgICAvKiBMZWZ0bW9z dCBuIGNoYXJhY3RlcnMgb2Ygc3RyaW5nICovCisgICAgeyAibGVuZ3RoIiwgICAgIEZOX0xFTiwg IDB9LCAgICAgICAgLyogUmV0dXJuIGxlbmd0aCBvZiBhcmd1bWVudCAqLworICAgIHsgImxpdGVy YWwiLCAgICBGTl9MSVQsICAwfSwgICAgICAgIC8qIFJldHVybiBhcmd1bWVudCBsaXRlcmFsbHkg Ki8KKyNpZmRlZiBOVAorICAgIHsgImxvbmdwYXRobmFtZSIsRk5fTE5BTUUsMH0sCS8qIEdldExv bmdQYXRoTmFtZSgpICovCisjZWxzZQorICAgIHsgImxvbmdwYXRobmFtZSIsRk5fRkZOLENNX0lO Vn0sCisjZW5kaWYgLyogTlQgKi8KKyAgICB7ICJsb3AiLCAgICAgICAgRk5fU1RMLCAgMH0sICAg ICAgICAvKiBMb3AgKi8KKyAgICB7ICJsb3B4IiwgICAgICAgRk5fTE9QWCwgMH0sICAgICAgICAv KiBMb3B4ICovCisgICAgeyAibG93ZXIiLCAgICAgIEZOX0xPVywgIDB9LCAgICAgICAgLyogUmV0 dXJuIGxvd2VyY2FzZWQgYXJndW1lbnQgKi8KKyAgICB7ICJscGFkIiwgICAgICAgRk5fTFBBLCAg MH0sICAgICAgICAvKiBSZXR1cm4gbGVmdC1wYWRkZWQgYXJndW1lbnQgKi8KKyAgICB7ICJsdHJp bSIsICAgICAgRk5fTFRSLCAgMH0sICAgICAgICAvKiBMZWZ0LVRyaW0gKi8KKyAgICB7ICJtYXhp bXVtIiwgICAgRk5fTUFYLCAgMH0sICAgICAgICAvKiBSZXR1cm4gbWF4aW11bSBvZiB0d28gYXJn dW1lbnRzICovCisgICAgeyAibWluaW11bSIsICAgIEZOX01JTiwgIDB9LCAgICAgICAgLyogUmV0 dXJuIG1pbmltdW0gb2YgdHdvIGFyZ3VtZW50cyAqLworICAgIHsgIm1qZCIsICAgICAgICBGTl9N SkQsICAwfSwgICAgICAgIC8qIERhdGUgdG8gTW9kaWZpZWQgSnVsaWFuIERhdGUgKi8KKyAgICB7 ICJtamQyZGF0ZSIsICAgRk5fTUpEMiwgMH0sICAgICAgICAvKiBNSkQgdG8gRGF0ZSAqLworICAg IHsgIm1qZHRvZGF0ZSIsICBGTl9NSkQyLCBDTV9JTlZ9LCAgIC8qIE1KRCB0byBEYXRlICovCisg ICAgeyAibW9kdWx1cyIsICAgIEZOX01PRCwgIDB9LCAgICAgICAgLyogUmV0dXJuIG1vZHVsdXMg b2YgdHdvIGFyZ3VtZW50cyAqLworI2lmZGVmIENPTU1FTlQKKyAgICB7ICJtc2xlZXAiLCAgICAg Rk5fTVNMRUVQLDB9LCAgICAgICAvKiBTbGVlcCBmb3IgbiBtaWxsaXNlY29uZHMgKi8KKyNlbmRp ZiAvKiBDT01NRU5UICovCisgICAgeyAibjJoZXgiLCAgICAgIEZOXzJIRVgsIENNX0lOVn0sICAg LyogTnVtYmVyIHRvIGhleCAqLworICAgIHsgIm4yb2N0YWwiLCAgICBGTl8yT0NULCBDTV9JTlZ9 LCAgIC8qIE51bWJlciB0byBvY3RhbCAqLworICAgIHsgIm4ydGltZSIsICAgICBGTl9OMlRJTSww fSwgICAgICAgIC8qIE51bWJlciB0byBoaDptbTpzcyAqLworI2lmZGVmIFRDUFNPQ0tFVAorICAg IHsgIm5hbWUyYWRkciIsICBGTl9IU1ROQU0sQ01fSU5WfSwgIC8qIEhvc3RuYW1lIHRvIElQIEFk ZHJlc3MgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICB7ICJuZGF5IiwgICAgICAgRk5f TkRBWSwgMH0sICAgICAgICAvKiBOdW1lcmljIGRheSBvZiB3ZWVrICovCisgICAgeyAibmV4dGZp bGUiLCAgIEZOX0ZJTCwgIDB9LCAgICAgICAgLyogTmV4dCBmaWxlIGluIGxpc3QgKi8KKyAgICB7 ICJudGltZSIsICAgICAgRk5fTlRJTSwgMH0sICAgICAgICAvKiBUaW1lIHRvIHNlY29uZHMgc2lu Y2UgbWlkbmlnaHQgKi8KKyAgICB7ICJudG9oZXgiLCAgICAgRk5fMkhFWCwgQ01fSU5WfSwgICAv KiBOdW1iZXIgdG8gaGV4ICovCisgICAgeyAibnRvb2N0YWwiLCAgIEZOXzJPQ1QsIENNX0lOVn0s ICAgLyogTnVtYmVyIHRvIG9jdGFsICovCisgICAgeyAibnRvdGltZSIsICAgIEZOX04yVElNLENN X0lOVn0sICAgLyogTnVtYmVyIHRvIGhoOm1tOnNzICovCisgICAgeyAib2N0Mm4iLCAgICAgIEZO X09DVDJOLENNX0lOVn0sICAgLyogT2N0YWwgdG8gZGVjaW1hbCBudW1iZXIgKi8KKyAgICB7ICJv Y3R0b24iLCAgICAgRk5fT0NUMk4sQ01fSU5WfSwgICAvKiBPY3RhbCB0byBkZWNpbWFsIG51bWJl ciAqLworICAgIHsgInBhdGhuYW1lIiwgICBGTl9GRk4sICAwfSwgICAgICAgIC8qIEZ1bGwgZmls ZSBuYW1lICovCisgICAgeyAicGF0dGVybiIsICAgIEZOX1BBVFRFUk4sIDB9LCAgICAgLyogUGF0 dGVybiAoZm9yIElOUFVUKSAqLworI2lmZGVmIENLX1BFUk1TCisgICAgeyAicGVybWlzc2lvbnMi LEZOX1BFUk0sIDB9LCAgICAgICAgLyogUGVybWlzc2lvbnMgb2YgZmlsZSAqLworI2Vsc2UKKyAg ICB7ICJwZXJtaXNzaW9ucyIsRk5fUEVSTSwgQ01fSU5WfSwgICAvKiBQZXJtaXNzaW9ucyBvZiBm aWxlICovCisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyNpZmRlZiBTRUVLX0NVUgorICAgIHsgInBp Y3R1cmVpbmZvIixGTl9QSUNUVVJFLCAwIH0sCS8qIFBpY3R1cmUgb3JpZW50YXRpb24vZGltZW5z aW9ucyAqLworI2VuZGlmCS8qIFNFRUtfQ1VSICovCisgICAgeyAicmFkaXgiLCAgICAgIEZOX1JB RElYLCAwIH0sCS8qIFJhZGl4IGNvbnZlcnNpb24gKi8KKyNpZm5kZWYgTk9SQU5ET00KKyAgICB7 ICJyYW5kb20iLCAgICAgRk5fUkFORCwgMH0sICAgICAgICAvKiBSYW5kb20gbnVtYmVyICovCisj ZW5kaWYgLyogTk9SQU5ET00gKi8KKyNpZm5kZWYgTk9QVVNICisgICAgeyAicmF3Y29tbWFuZCIs IEZOX1JBVywgIDB9LCAgICAgICAgLyogT3V0cHV0IGZyb20gYSBjb21tYW5kIChyYXcpICovCisj ZW5kaWYgLyogTk9QVVNIICovCisjaWZkZWYgUkVDVVJTSVZFCisgICAgeyAicmRpcmVjdG9yaWVz IiwgRk5fUkRJUiwgMH0sICAgICAgLyogUmVjdXJzaXZlIGRpcmVjdG9yeSBsaXN0ICovCisjZW5k aWYgLyogUkVDVVJTSVZFICovCisgICAgeyAicmVjdXJzZSIsICAgIEZOX1JFQ1VSU0UsIDB9LAkv KiBSZWN1cnNpdmUgdmFyaWFibGUgZXZhbHVhdGlvbiAqLworI2lmZGVmIFJFQ1VSU0lWRQorICAg IHsgInJmaWxlcyIsICAgICAgIEZOX1JGSUwsIDB9LCAgICAgIC8qIFJlY3Vyc2l2ZSBmaWxlIGxp c3QgKi8KKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICB7ICJyZXAiLCAgICAgICAgRk5fUkVQ LCBDTV9JTlZ8Q01fQUJSfSwKKyAgICB7ICJyZXBlYXQiLCAgICAgRk5fUkVQLCAgMH0sICAgICAg ICAvKiBSZXBlYXQgYXJndW1lbnQgZ2l2ZW4gIyBvZiB0aW1lcyAqLworICAgIHsgInJlcGxhY2Ui LCAgICBGTl9SUEwsICAwfSwgICAgICAgIC8qIFJlcGxhY2UgY2hhcmFjdGVycyBpbiBzdHJpbmcg Ki8KKyAgICB7ICJyZXZlcnNlIiwgICAgRk5fUkVWLCAgMH0sICAgICAgICAvKiBSZXZlcnNlIHRo ZSBhcmd1bWVudCBzdHJpbmcgKi8KKyAgICB7ICJyaWdodCIsICAgICAgRk5fUklHLCAgMH0sICAg ICAgICAvKiBSaWdodG1vc3QgbiBjaGFyYWN0ZXJzIG9mIHN0cmluZyAqLworICAgIHsgInJpbmRl eCIsICAgICBGTl9SSVgsICAwfSwgICAgICAgIC8qIFJpZ2h0IGluZGV4ICovCisgICAgeyAicnBh ZCIsICAgICAgIEZOX1JQQSwgIDB9LCAgICAgICAgLyogUmlnaHQtcGFkIHRoZSBhcmd1bWVudCAq LworICAgIHsgInJzZWFyY2giLCAgICBGTl9SU0VBUkNILCAwfSwgICAgIC8qIFItTCBTZWFyY2gg Zm9yIHBhdHRlcm4gaW4gc3RyaW5nICovCisjaWZkZWYgT1MyCisgICAgeyAic2NybmN1cngiLCAg IEZOX1NDUk5fQ1gsICAwfSwgICAgLyogU2NyZWVuIEN1cnNvciBYIFBvcyAqLworICAgIHsgInNj cm5jdXJ5IiwgICBGTl9TQ1JOX0NZLCAgMH0sICAgIC8qIFNjcmVlbiBDdXJzb3IgWSBQb3MgKi8K KyAgICB7ICJzY3Juc3RyIiwgICAgRk5fU0NSTl9TVFIsIDB9LCAgICAvKiBTY3JlZW4gU3RyaW5n ICovCisjZW5kaWYgLyogT1MyICovCisgICAgeyAic2VhcmNoIiwgICAgIEZOX1NFQVJDSCwgMH0s ICAgICAgLyogTC1SIFNlYXJjaCBmb3IgcGF0dGVybiBpbiBzdHJpbmcgKi8KKyNpZm5kZWYgTk9T RVhQCisgICAgeyAic2V4cHJlc3Npb24iLEZOX1NFWFAsIDB9LCAgICAgICAgLyogUy1FeHByZXNz aW9uICovCisjZW5kaWYgLyogTk9TRVhQICovCisjaWZkZWYgTlQKKyAgICB7ICJzaG9ydHBhdGhu YW1lIixGTl9TTkFNRSwwfSwJLyogR2V0U2hvcnRQYXRoTmFtZSgpICovCisjZWxzZQorICAgIHsg InNob3J0cGF0aG5hbWUiLEZOX0ZGTixDTV9JTlZ9LAorI2VuZGlmIC8qIE5UICovCisgICAgeyAi c2l6ZSIsICAgICAgIEZOX0ZTLCAgIDB9LCAgICAgICAgLyogRmlsZSBzaXplICovCisjaWZkZWYg Q09NTUVOVAorICAgIHsgInNsZWVwIiwgICAgICBGTl9TTEVFUCwwfSwgICAgICAgIC8qIFNsZWVw IGZvciBuIHNlY29uZHMgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeyAic3BhbiIsICAg ICAgIEZOX1NQTiwgIDB9LCAgICAgICAgLyogU3BhbiAtIGxpa2UgU25vYm9sICovCisgICAgeyAi c3BsaXQiLCAgICAgIEZOX1NQTElULDB9LCAgICAgICAgLyogU3BsaXQgc3RyaW5nIGludG8gd29y ZHMgKi8KKyAgICB7ICJzcXVlZXplIiwgICAgRk5fU1FVRUVaRSwwfSwJLyogU3F1ZWV6ZSB3aGl0 ZXNwYWNlIGluIHN0cmluZyAqLworICAgIHsgInN0cmNtcCIsICAgICBGTl9TVFJDTVAsMH0sCS8q IFN0cmluZyBjb21wYXJpc29uICovCisgICAgeyAic3RyaW5ndHlwZSIsIEZOX1NUUklOR1QsMH0s CS8qIFN0cmluZyB0eXBlICg3LWJpdCwgOC1iaXQsIFVURi04KSAqLworICAgIHsgInN0cmlwYiIs ICAgICBGTl9TVEIsICAwfSwgICAgICAgIC8qIFN0cmlwIGVuY2xvc2luZyBicmFjZXMvYnJhY2tl dHMgKi8KKyAgICB7ICJzdHJpcG4iLCAgICAgRk5fU1ROLCAgMH0sICAgICAgICAvKiBTdHJpcCBu IGNoYXJzICovCisgICAgeyAic3RyaXB4IiwgICAgIEZOX1NUWCwgIDB9LCAgICAgICAgLyogU3Ry aXAgc3VmZml4ICovCisgICAgeyAic3UiLCAgICAgICAgIEZOX1NVQiwgIENNX0lOVnxDTV9BQlJ9 LAorICAgIHsgInN1YiIsICAgICAgICBGTl9TVUIsICBDTV9JTlZ8Q01fQUJSfSwKKyAgICB7ICJz dWJzIiwgICAgICAgRk5fU1VCLCAgQ01fSU5WfENNX0FCUn0sCisgICAgeyAic3Vic3QiLCAgICAg IEZOX1NVQiwgIENNX0lOVnxDTV9BQlJ9LAorICAgIHsgInN1YnN0aXR1dGUiLCBGTl9TVUJTVCww fSwgICAgICAgIC8qIFN1YnN0aXR1dGUgY2hhcnMgKi8KKyAgICB7ICJzdWJzdHJpbmciLCAgRk5f U1VCLCAgMH0sICAgICAgICAvKiBFeHRyYWN0IHN1YnN0cmluZyBmcm9tIGFyZ3VtZW50ICovCisg ICAgeyAidGFibGVsb29rIiwgIEZOX1RMT09LLDB9LCAgICAgICAgLyogVGFibGUgbG9va3VwICov CisgICAgeyAidGltZSIsICAgICAgIEZOX1RJTUUsIDB9LCAgICAgICAgLyogRnJlZS1mb3JtYXQg dGltZSB0byBoaDptbTpzcyAqLworICAgIHsgInRvZDJzZWNzIiwgICBGTl9OVElNLCBDTV9JTlZ9 LCAgIC8qIFRpbWUtb2YtZGF5LXRvLXNlY3Mtc2luY2UtbWlkbml0ZSAqLworICAgIHsgInRvZHRv c2VjcyIsICBGTl9OVElNLCBDTV9JTlZ9LCAgIC8qIFRpbWUtb2YtZGF5LXRvLXNlY3Mtc2luY2Ut bWlkbml0ZSAqLworICAgIHsgInRyaW0iLCAgICAgICBGTl9UUk0sICAwfSwgICAgICAgIC8qIFRy aW0gKi8KKyAgICB7ICJ1bmhleGlmeSIsICAgRk5fVU5ILCAgMH0sICAgICAgICAvKiBVbmhleGlm eSAqLworICAgIHsgInVuaXgyZG9zcGF0aCIsRk5fUENfVUQsIDB9LCAgICAgIC8qIFVOSVggdG8g RE9TIHBhdGggKi8KKyAgICB7ICJ1bml4dG9kb3NwYXRoIixGTl9QQ19VRCwgQ01fSU5WfSwgLyog VU5JWCB0byBET1MgcGF0aCAqLworICAgIHsgInVudGFiaWZ5IiwgICBGTl9VTlRBQiwwfSwgICAg ICAgIC8qIFVudGFiaWZ5ICovCisgICAgeyAidXBwZXIiLCAgICAgIEZOX1VQUCwgIDB9LCAgICAg ICAgLyogUmV0dXJuIHVwcGVyY2FzZWQgYXJndW1lbnQgKi8KKyAgICB7ICJ1dGNkYXRlIiwgICAg Rk5fVE9HTVQsMH0sICAgICAgICAvKiBEYXRlLXRpbWUgdG8gVVRDIChHTVQpICovCisgICAgeyAi dmVyaWZ5IiwgICAgIEZOX1ZFUiwgIDB9LCAgICAgICAgLyogVmVyaWZ5ICovCisgICAgeyAid29y ZCIsICAgICAgIEZOX1dPUkQsIDB9LCAgICAgICAgLyogRXh0cmFjdCBhIHdvcmQgKi8KKyAgICB7 ICIiLCAwLCAwfQorfTsKK2ludCBuZnVuY3MgPSAoc2l6ZW9mKGZuY3RhYikgLyBzaXplb2Yoc3Ry dWN0IGtleXRhYikpIC0gMTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU1BMICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciBleHBhbnNpb24gb2YgKi8KKyNp ZmRlZiBCSUdCVUZPSyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBidWlsdC1pbiB2YXJpYWJs ZXMuICovCisjZGVmaW5lIFZWQlVGTCAxMDI0CisjZWxzZQorI2RlZmluZSBWVkJVRkwgMjU2Cisj ZW5kaWYgLyogQklHQlVGT0sgKi8KK2NoYXIgdnZidWZbVlZCVUZMKzFdOworI2VuZGlmIC8qIE5P U1BMICovCisKK3N0cnVjdCBrZXl0YWIgZGlzcHRiW10gPSB7ICAgICAgICAgICAgICAvKiBMb2cg ZmlsZSBkaXNwb3NpdGlvbiAqLworICAgIHsgImFwcGVuZCIsICAgIDEsICAwfSwKKyAgICB7ICJu ZXciLCAgICAgICAwLCAgMH0KK307CisKKyNpZmRlZiBDS0ZMT0FUCisKKy8qIEkgTiBJIFQgRiBM IE8gQSBUICAtLSAgRGVkdWNlIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbiBieSBpbnNwZWN0aW9u ICovCisKK2ludCBmcF9yb3VuZGluZyA9IDA7ICAgICAgICAgICAgICAgIC8qIE5vbnplcm8gaWYg cHJpbnRmKCIlZiIpIHJvdW5kcyAqLworaW50IGZwX2RpZ2l0cyA9IDA7ICAgICAgICAgICAgICAg ICAgLyogRGlnaXRzIG9mIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbiAqLworCisjaWZkZWYgQ09N TUVOVAorLyogRm9yIGxvb2tpbmcgYXQgaW50ZXJuYWwgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50 YXRpb25zICovCitzdGF0aWMgY2hhciBmcF94YnVmWzEyOF07CitzdGF0aWMgY2hhciAqCit0b2hl eChzLCBuKSBDSEFSICogczsgaW50IG47IHsKKyAgICBpbnQgeDsKKyAgICBjaGFyICogcCA9IGZw X3hidWY7CisgICAgd2hpbGUgKG4tLSA+IDApIHsKKyAgICAgICAgeCA9ICgqcyA+PiA0KSAmIDB4 MGY7CisgICAgICAgICpwKysgPSBoZXhkaWdpdHNbeF07CisgICAgICAgIHggPSAqcysrICYgMHgw ZjsKKyAgICAgICAgKnArKyA9IGhleGRpZ2l0c1t4XTsKKyAgICB9CisgICAgKnAgPSBOVUw7Cisg ICAgcmV0dXJuKChjaGFyICopZnBfeGJ1Zik7Cit9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCitj aGFyIG1hdGhfcGlbXSA9ICIzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUiOworY2hh ciBtYXRoX2VbXSA9ICAiMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI3IjsKKworVk9J RAoraW5pdGZsb2F0KCkgeworICAgIGNoYXIgKiBidWYgPSBOVUxMOworICAgIGludCBpLCB4LCB5 OworLyoKKyAgV2UgbWFsbG9jIGEgYmlnIHRlbXBvcmFyeSBidWZmZXIgZm9yIHNwcmludGYoKSB0 byBtaW5pbWl6ZSBsaWtlbGlob29kIG9mCisgIChhbmQgZGFtYWdlIGZyb20pIHNwcmludGYgYnVm ZmVyIG92ZXJmbG93cy4gIEluIGFueSBjYXNlLCB0aGUgb25seSB3YXkgdGhpcworICBjb3VsZCBo YXBwZW4gd291bGQgYmUgaWYgc3ByaW50ZigpIGl0c2VsZiBoYWQgYnVncywgc2luY2UgdGhlIGZv cm1hdAorICBkZXNjcmlwdG9yIHNheXMgdG8gY3V0IGl0IG9mZiBhdCAyNTAgZGVjaW1hbCBwbGFj ZXMuCisqLworICAgIGlmICgoYnVmID0gKGNoYXIgKiltYWxsb2MoNDA5NikpKSB7CisgICAgICAg IHNwcmludGYoYnVmLCIlMC4yNTBmIiwoMTAuMCAvIDMuMCkpOworICAgICAgICBmb3IgKGkgPSAy OyBpIDwgMjUwICYmIGJ1ZltpXSA9PSAnMyc7IGkrKykgOworICAgICAgICB4ID0gaSAtIDE7Cisg ICAgICAgIGRlYnVnKEYxMTEsImluaXRmbG9hdCAxMC4wLzMuMCIsYnVmLHgpOworICAgICAgICBz cHJpbnRmKGJ1ZiwiJTAuMjUwZiIsKDQuMCAvIDkuMCkpOworICAgICAgICBmb3IgKGkgPSAyOyBp IDwgMjUwICYmIGJ1ZltpXSA9PSAnNCc7IGkrKykgOworICAgICAgICB5ID0gaSAtIDE7CisgICAg ICAgIGRlYnVnKEYxMTEsImluaXRmbG9hdCA0LjAvOS4wIixidWYseSk7CisgICAgICAgIGZwX2Rp Z2l0cyA9ICh4IDwgeSkgPyB4IDogeTsKKyAgICAgICAgaWYgKGZwX2RpZ2l0cyA8IHNpemVvZiht YXRoX3BpKSAtIDEpIHsKKyAgICAgICAgICAgIG1hdGhfcGlbZnBfZGlnaXRzKzFdID0gTlVMOwor ICAgICAgICAgICAgbWF0aF9lW2ZwX2RpZ2l0cysxXSA9IE5VTDsKKyAgICAgICAgfQorICAgICAg ICBzcHJpbnRmKGJ1ZiwiJTAuNmYiLCg3LjAgLyA5LjApKTsKKyAgICAgICAgaWYgKGJ1Zls3XSA9 PSAnOCcpIGZwX3JvdW5kaW5nID0gMTsKKyAgICAgICAgZGVidWcoRjExMSwiaW5pdGZsb2F0IDcu MC85LjAiLGJ1ZixmcF9yb3VuZGluZyk7CisgICAgICAgIGRlYnVnKEYxMDEsImluaXRmbG9hdCBw cmVjaXNpb24iLCIiLGZwX2RpZ2l0cyk7CisgICAgICAgIGZyZWUoYnVmKTsKKyAgICB9Cit9Cisj ZW5kaWYgLyogQ0tGTE9BVCAqLworCisvKgorICBQIFIgRSBTIEMgQSBOIC0tIEEgcXVpY2sgbG9v ayB0aHJvdWdoIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBmb3IKKyAgaXRlbXMgdGhhdCBtdXN0 IGJlIGhhbmRsZWQgYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIGlzIGV4ZWN1dGVkLgor Ki8KKyNpZmRlZiBOVAorZXh0ZXJuIGludCBTdGFydGVkRnJvbURpYWxlcjsKKyNlbmRpZiAvKiBO VCAqLworI2lmZGVmIE9TMgorZXh0ZXJuIGludCBrOTVzdGRpbzsKK3Vuc2lnbmVkIGxvbmcgc3Rh cnRmbGFncyA9IDBMOworI2VuZGlmIC8qIE9TMiAqLworCitzdGF0aWMgY2hhciAqCitmaW5kaW5w YXRoKGFyZykgY2hhciAqIGFyZzsgeworI2lmZGVmIE9TMgorICAgIGNoYXIgKiBzY3JpcHRlbnYs ICoga2V5bWFwZW52OworICAgIGludCBsZW47CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgRENN REJVRgorICAgIGV4dGVybiBjaGFyICogY21kYnVmOworI2Vsc2UKKyAgICBleHRlcm4gY2hhciBj bWRidWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisgICAgY2hhciB0YWtlcGF0aFs0MDk2XTsK KyAgICBjaGFyICogczsKKyAgICBpbnQgeCwgejsKKworICAgIC8qIFNldCB1cCBzZWFyY2ggcGF0 aC4uLiAqLworI2lmZGVmIE9TMgorICAgIGNoYXIgKiBhcHBkYXRhMCA9IE5VTEwsICphcHBkYXRh MSA9IE5VTEw7CisjaWZkZWYgTlQKKyAgICBzY3JpcHRlbnYgPSBnZXRlbnYoIks5NVNDUklQVFMi KTsKKyAgICBrZXltYXBlbnYgPSBnZXRlbnYoIks5NUtFWU1BUFMiKTsKKyAgICBtYWtlc3RyKCZh cHBkYXRhMCwoY2hhciAqKUdldEFwcERhdGEoMCkpOworICAgIG1ha2VzdHIoJmFwcGRhdGExLChj aGFyICopR2V0QXBwRGF0YSgxKSk7CisjZWxzZSAvKiBOVCAqLworICAgIHNjcmlwdGVudiA9IGdl dGVudigiSzJTQ1JJUFRTIik7CisgICAga2V5bWFwZW52ID0gZ2V0ZW52KCJLMktFWU1BUFMiKTsK KyNlbmRpZiAvKiBOVCAqLworICAgIGlmICghc2NyaXB0ZW52KQorICAgICAgc2NyaXB0ZW52ID0g Z2V0ZW52KCJDS19TQ1JJUFRTIik7CisgICAgaWYgKCFzY3JpcHRlbnYpCisgICAgICBzY3JpcHRl bnYgPSAiIjsKKyAgICBpZiAoIWtleW1hcGVudikKKyAgICAgIGtleW1hcGVudiA9IGdldGVudigi Q0tfS0VZTUFQUyIpOworICAgIGlmICgha2V5bWFwZW52KQorICAgICAga2V5bWFwZW52ID0gIiI7 CisKKyAgICBkZWJ1ZyhGMTEwLCJzdGFydHVwZGlyIixzdGFydHVwZGlyLDApOworICAgIGRlYnVn KEYxMTAsImNvbW1vbiBhcHBkYXRhIGRpcmVjdG9yeSIsYXBwZGF0YTEsMCk7CisgICAgZGVidWco RjExMCwiYXBwZGF0YSBkaXJlY3RvcnkiLGFwcGRhdGEwLDApOworICAgIGRlYnVnKEYxMTAsImlu aWRpciIsaW5pZGlyLDApOworICAgIGRlYnVnKEYxMTAsImhvbWUiLHpob21lKCksMCk7CisgICAg ZGVidWcoRjExMCwiZXhlZGlyIixleGVkaXIsMCk7CisKKyAgICBsZW4gPSBzdHJsZW4oc2NyaXB0 ZW52KSArIHN0cmxlbihrZXltYXBlbnYpICsgMypzdHJsZW4oc3RhcnR1cGRpcikKKyAgICAgICAg KyAzKnN0cmxlbihpbmlkaXIpICsgMypzdHJsZW4oemhvbWUoKSkgKyAzKnN0cmxlbihleGVkaXIp CisgICAgICAgICsgKGFwcGRhdGEwID8gMypzdHJsZW4oYXBwZGF0YTApIDogMCkgCisgICAgICAg ICsgKGFwcGRhdGExID8gMypzdHJsZW4oYXBwZGF0YTEpIDogMCkKKyAgICAgICAgKyA2KnN0cmxl bigiU0NSSVBUUy8iKSArIDYqc3RybGVuKCJLRVlNQVBTLyIpICsgMTY7CisKKyAgICBpZiAobGVu ID49IDQwOTYpIHsgICAgICAgICAgICAgICAgICAvKiBTQUZFIChsZW5ndGggaXMgY2hlY2tlZCkg Ki8KKyAgICAgICAgdGFrZXBhdGhbMF0gPSAnXDAnOworICAgICAgICBkZWJ1ZyhGMTExLCJmaW5k aW5wYXRoIGVycm9yIC0gcGF0aCBsZW5ndGggdG9vIGxvbmciLCJsZW4iLGxlbik7CisgICAgfSBl bHNlCisgICAgICBzcHJpbnRmKHRha2VwYXRoLAorICAgICAgICAgICAgICAvKiBzZW1pY29sb24t c2VwYXJhdGVkIHBhdGggbGlzdCAqLworICAgICIlcyVzJXMlcyVzOyVzJXM7JXMlczslcyVzJXMl cyVzJXMlcyVzJXMlcyVzJXMlczslcyVzOyVzJXM7JXM7JXMlczslcyVzIiwKKyAgICAgICAgICAg ICAgc2NyaXB0ZW52LAorICAgICAgICAgICAgICAoc2NyaXB0ZW52WzBdICYmIHNjcmlwdGVudltz dHJsZW4oc2NyaXB0ZW52KS0xXT09JzsnKT8iIjoiOyIsCisgICAgICAgICAgICAgIGtleW1hcGVu diwKKyAgICAgICAgICAgICAgKGtleW1hcGVudlswXSAmJiBrZXltYXBlbnZbc3RybGVuKGtleW1h cGVudiktMV09PSc7Jyk/IiI6IjsiLAorICAgICAgICAgICAgICBzdGFydHVwZGlyLAorICAgICAg ICAgICAgICBzdGFydHVwZGlyLCAiU0NSSVBUUy8iLAorICAgICAgICAgICAgICBzdGFydHVwZGly LCAiS0VZTUFQUy8iLAorICAgICAgICAgICAgICBhcHBkYXRhMSA/IGFwcGRhdGExIDogIiIsIAor ICAgICAgICAgICAgICBhcHBkYXRhMSA/ICJLZXJtaXQgOTU7IiA6ICIiLAorICAgICAgICAgICAg ICBhcHBkYXRhMSA/IGFwcGRhdGExIDogIiIsCisgICAgICAgICAgICAgIGFwcGRhdGExID8gIktl cm1pdCA5NS9TQ1JJUFRTLzsiIDogIiIsCisgICAgICAgICAgICAgIGFwcGRhdGExID8gYXBwZGF0 YTEgOiAiIiwKKyAgICAgICAgICAgICAgYXBwZGF0YTEgPyAiS2VybWl0IDk1L0tFWU1BUFMvOyIg OiAiIiwKKyAgICAgICAgICAgICAgYXBwZGF0YTAgPyBhcHBkYXRhMCA6ICIiLAorICAgICAgICAg ICAgICBhcHBkYXRhMCA/ICJLZXJtaXQgOTU7IiA6ICIiLAorICAgICAgICAgICAgICBhcHBkYXRh MCA/IGFwcGRhdGEwIDogIiIsCisgICAgICAgICAgICAgIGFwcGRhdGEwID8gIktlcm1pdCA5NS9T Q1JJUFRTLzsiIDogIiIsCisgICAgICAgICAgICAgIGFwcGRhdGEwID8gYXBwZGF0YTAgOiAiIiwK KyAgICAgICAgICAgICAgYXBwZGF0YTAgPyAiS2VybWl0IDk1L0tFWU1BUFMvOyIgOiAiIiwKKyAg ICAgICAgICAgICAgaW5pZGlyLAorICAgICAgICAgICAgICBpbmlkaXIsICJTQ1JJUFRTLyIsCisg ICAgICAgICAgICAgIGluaWRpciwgIktFWU1BUFMvIiwKKyAgICAgICAgICAgICAgemhvbWUoKSwK KyAgICAgICAgICAgICAgemhvbWUoKSwgIlNDUklQVFMvIiwKKyAgICAgICAgICAgICAgemhvbWUo KSwgIktFWU1BUFMvIiwKKyAgICAgICAgICAgICAgZXhlZGlyLAorICAgICAgICAgICAgICBleGVk aXIsICJTQ1JJUFRTLyIsCisgICAgICAgICAgICAgIGV4ZWRpciwgIktFWU1BUFMvIgorICAgICAg ICAgICAgICApOworICAgIGRlYnVnKEYxMTAsImZpbmRpbnBhdGggdGFrZXBhdGgiLHRha2VwYXRo LDApOworI2lmZGVmIE5UCisgICAgbWFrZXN0cigmYXBwZGF0YTAsTlVMTCk7CisgICAgbWFrZXN0 cigmYXBwZGF0YTEsTlVMTCk7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIG5vdCBPUzIgKi8K KyNpZm5kZWYgTk9TUEwKKyAgICB6ID0gMTAyNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMb29rIGluIGhvbWUgZGlyZWN0b3J5ICovCisgICAgcyA9IHRha2VwYXRoOworICAgIHp6c3Ry aW5nKCJcXHYoaG9tZSkiLCZzLCZ6KTsKKyNlbHNlCisgICAgdGFrZXBhdGhbMF0gPSAnXDAnOwor I2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogT1MyICovCisvKgorICBBbGwgdGhlIGxvZ2lj IGZvciBzZWFyY2hpbmcgdGhlIHRha2UgcGF0aCBpcyBpbiB0aGUgY29tbWFuZCBwYXJzZXIuCisg IFNvIGV2ZW4gdGhvdWdoIHdlIGFyZW4ndCBwYXJzaW5nIGNvbW1hbmRzLCB3ZSBpbml0aWFsaXpl IGFuZCBjYWxsIHRoZQorICBwYXJzZXIgZnJvbSBoZXJlLCB3aXRoIHRoZSBwdXJwb3J0ZWQgZmls ZW5hbWUgc3R1ZmZlZCBpbnRvIHRoZSBjb21tYW5kCisgIGJ1ZmZlciwgZm9sbG93ZWQgYnkgc29t ZSBjYXJyaWFnZSByZXR1cm5zIHRvIG1ha2UgdGhlIHBhcnNlciByZXR1cm4uCisgIElmIHRoZSBm aWxlIGlzIG5vdCBmb3VuZCwgb3Igb3RoZXJ3aXNlIG5vdCBhY2Nlc3NpYmxlLCB0aGUgcGFyc2Vy IHByaW50cworICBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlLCBhbmQgdGhlbiB3ZSBqdXN0IGV4aXQu CisqLworICAgIGNtZGluaSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRl IGNvbW1hbmQgYnVmZmVycyBldGMgKi8KKyAgICBjbWluaSgwKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBJbml0aWFsaXplIHRoZW0gKi8KKyAgICAvKiBTdHVmZiBmaWxlbmFtZSBpbnRv IGNvbW1hbmQgYnVmIHdpdGggYnJhY2VzIGluIGNhc2Ugb2Ygc3BhY2VzICovCisgICAgY2ttYWtt c2coY21kYnVmLENNREJMLCJ7IixhcmcsIn0iLE5VTEwpOworICAgIGRlYnVnKEYxMTAsImZpbmRp bnBhdGggY21kYnVmIixjbWRidWYsMCk7CisgICAgY2tzdHJuY2F0KGNtZGJ1ZiwiXHJcciIsQ01E QkwpOyAgICAgLyogQW5kIHNvbWUgY2FycmlhZ2UgcmV0dXJucyAqLworICAgIGlmIChjbWlmaXAo IiIsIiIsJnMsJngsMCx0YWtlcGF0aCx4eHN0cmluZykgPCAwKQorICAgICAgcmV0dXJuKE5VTEwp OworICAgIGNtcmVzKCk7CisgICAgcmV0dXJuKHMpOworfQorCitzdGF0aWMgaW50IHRyX2ludDsg ICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBpZiBUUkFOU01JVCBpbnRlcnJ1cHRlZCAqLwor CisjaWZuZGVmIE1BQworU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK3RydHJhcChpbnQgZm9vKSAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUUkFOU01JVCBpbnRlcnJ1cHQgdHJhcCAqLworI2Vs c2UKK3RydHJhcChmb28pIGludCBmb287ICAgICAgICAgICAgICAgICAgICAvKiBUUkFOU01JVCBp bnRlcnJ1cHQgdHJhcCAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB0cnRyYXAgKi8gewor I2lmZGVmIF9fRU1YX18KKyAgICBzaWduYWwoU0lHSU5ULCBTSUdfQUNLKTsKKyNlbmRpZgorICAg IHRyX2ludCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChOZWVkIGFyZyBmb3IgQU5T SSBDKSAqLworICAgIFNJR1JFVFVSTjsKK30KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBO T0lDUCAqLworCisjaWZkZWYgVU5JWAorVk9JRAorZ2V0ZXhlZGlyKCkgeworICAgIGV4dGVybiBj aGFyICogeGFyZzA7CisgICAgbG9uZyB4eDsKKyAgLyoKKyAgICBVbml4IHByb3ZpZGVzIG5vIHN0 YW5kYXJkIHNlcnZpY2UgZm9yIHRoaXMuICBXZSBsb29rIGluIGFyZ3ZbMF0sIGFuZCBpZgorICAg IHdlJ3JlIGx1Y2t5IHRoZXJlJ3MgYSBmdWxsIHBhdGhuYW1lLiAgSWYgbm90IHdlIGRvIGEgUEFU SCBzZWFyY2guCisgICovCisgICAgaWYgKGNrc3RyY2hyKHhhcmcwLCcvJykpIHsgICAgICAgICAg LyogR2xvYmFsIGNvcHkgb2YgYXJndlswXSAqLworICAgICAgICBpbnQgaSwgazsKKyAgICAgICAg Y2hhciAqIHAgPSBOVUxMOworICAgICAgICBpZiAoKGsgPSBja3N0cm5jcHkodG1wYnVmLHhhcmcw LFRNUEJVRlNJWi0yKSkgPiAwKSB7CisgICAgICAgICAgICBwID0gdG1wYnVmOworICAgICAgICAg ICAgLyogQ29udmVydCB0byBmdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgKi8KKyAgICAgICAgICAg IGlmICh0bXBidWZbMF0pIGlmICh0bXBidWZbMF0gIT0gJy8nKSB7CisgICAgICAgICAgICAgICAg bGluZVswXSA9IE5VTDsKKyAgICAgICAgICAgICAgICB6Zm5xZnAodG1wYnVmLExJTkJVRlNJWi0y LChjaGFyICopbGluZSk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVbMF0pCisgICAgICAgICAg ICAgICAgICBwID0gbGluZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHh4ID0gemNoa2ko cCk7CisgICAgICAgICAgICBpZiAoeHggPiAtMSkgewkJLyogSXMgdGhlIHJlc3VsdCBhbiBleGlz dGluZyBmaWxlPyAqLworICAgICAgICAgICAgICAgIGsgPSBzdHJsZW4ocCk7CisgICAgICAgICAg ICAgICAgZm9yIChpID0gay0xOyBpID4gMDsgaS0tKSB7IC8qIFllcywgc3RyaXAgbmFtZSBwYXJ0 ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwW2ldID09ICcvJykgeworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGkgPCBrLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBbaSsx XSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCSAgICBtYWtlc3RyKCZl eGVkaXIscCk7CQkvKiBTYXZlIHRoZSByZXN1bHQgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoIWV4ZWRpciAmJiB4YXJnMCkgeyAgICAgICAgICAgICAvKiBOb3QgZm91bmQ/ICovCisgICAg ICAgIGNoYXIgKiBwOworICAgICAgICBwID0gZ2V0ZW52KCJQQVRIIik7ICAgICAgICAgICAgIC8q IFNlYXJjaCB0aGUgUEFUSCAqLworICAgICAgICBpZiAocCkgeyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIElmIHRoZXJlIGlzIG9uZS4uLiAqLworICAgICAgICAgICAgY2hhciAqIHEsICogUEFU SCA9IE5VTEw7CisgICAgICAgICAgICBpbnQgazsKKyAgICAgICAgICAgIG1ha2VzdHIoJlBBVEgs cCk7ICAgICAgICAgICAvKiBQb2tlYWJsZSBjb3B5IG9mIFBBVEggc3RyaW5nICovCisgICAgICAg ICAgICBpZiAoUEFUSCkgeyAgICAgICAgICAgICAgICAgLyogSWYgbWFsbG9jIHN1Y2NlZWRlZC4u LiAqLworICAgICAgICAgICAgICAgIHAgPSBQQVRIOworICAgICAgICAgICAgICAgIHdoaWxlIChw ICYmICpwKSB7ICAgICAgICAvKiBMb29wIHRocm91Z2ggc2VnbWVudHMgKi8KKyAgICAgICAgICAg ICAgICAgICAgcSA9IGNrc3RyY2hyKHAsJzonKTsgLyogRW5kIG9mIHRoaXMgc2VnbWVudCAqLwor ICAgICAgICAgICAgICAgICAgICBpZiAocSA9PSBwKSB7ICAgICAgIC8qIE51bGwgUEFUSCBzZWdt ZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICBwKys7ICAgICAgICAgICAgLyogU2tpcCBv dmVyIGNvbG9uICovCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocSkgICAgICAgICAgICAgIC8q IElmIG5vdCBhdCBlbmQgb2YgUEFUSCBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAq cSsrID0gTlVMOyAgICAgICAvKiB6ZXJvIG91dCB0aGUgY29sb24gKi8KKyAgICAgICAgICAgICAg ICAgICAgaWYgKChrID0gY2tzdHJuY3B5KHRtcGJ1ZixwLFRNUEJVRlNJWikpID4gMCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcGJ1ZltrLTFdICE9ICcvJykgeyAvKiBDb3B5IHRo aXMgUEFUSCBzZWdtZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wYnVmW2sr K10gPSAnLyc7ICAgIC8qIEFwcGVuZCAnLycgaWYgbmVlZGVkICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdG1wYnVmW2tdID0gTlVMOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXBwZW5kIHRoZSBhcmd2WzBdIHZhbHVlICovCisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2tzdHJuY3B5KCZ0bXBidWZba10seGFyZzAsVE1Q QlVGU0laKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoemNoa2kodG1w YnVmKSA+IC0xKSB7IC8qIEZpbGUgZXhpc3RzPyAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0bXBidWZba10gPSBOVUw7ICAgICAgLyogWWVzLCB3ZSdyZSBkb25lICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmbnFmcCh0bXBidWYsTElOQlVGU0laLChjaGFy ICopbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmV4ZWRp cixsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIHAgPSBxOyAgICAgICAgICAgICAgLyogTm90IGZvdW5kLCBnbyB0byBuZXh0IHNlZ21lbnQg ICovCisgICAgICAgICAgICAgICAgfSAvKiB3aGlsZSAqLworICAgICAgICAgICAgICAgIGZyZWUo UEFUSCk7ICAgICAgICAgICAgIC8qIEZyZWUgUEFUSCBjb3B5ICovCisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCFleGVkaXIpIHsgICAgICAgICAgICAgICAgICAvKiBTdGls bCBub3RoaW5nPyAqLworICAgICAgICAgICAgaWYgKHpjaGtpKHhhcmcwKSA+IC0xKSB7ICAgIC8q IE1heWJlIGl0J3MgaW4gdGhlIGN1cnJlbnQgZGlyICovCisgICAgICAgICAgICAgICAgemZucWZw KHpndGRpcigpLExJTkJVRlNJWiwoY2hhciAqKWxpbmUpOworICAgICAgICAgICAgICAgIG1ha2Vz dHIoJmV4ZWRpcixsaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoIWV4ZWRpcikgeyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGlsbCBub3RoaW5nPyAqLwor ICAgICAgICBtYWtlc3RyKCZleGVkaXIsIi8iKTsgICAgICAgICAgIC8qIEZha2UgaXQgd2l0aCB3 aXRoIHJvb3QuICovCisgICAgfQorfQorI2VuZGlmIC8qIFVOSVggKi8KKworaW50IGFyZ194ID0g MDsKK3N0YXRpYyBpbnQgeF9wcmVzY2FuID0gMDsKKworLyoKKyAgVGhlIGFyZ3VtZW50IHkgb25j ZSBtZWFudCBzb21ldGhpbmcgYnV0IEkgY2FuJ3QgaW1hZ2luZSB3aGF0IHNvIG5vdworICBpdCdz IGlnbm9yZWQuICAoUHJpb3IgdG8gMjIgQXVnIDk4LCBwcmVzY2FuKCkgd2FzIGNhbGxlZCB0d2lj ZSBieSBtYWluKCksCisgIGFuZCB0aGUgYXJnIGRpZmZlcmVudGlhdGVkIHRoZSB0d28gY2FsbHMu ICBCdXQgdGhpcyBjYXVzZWQgYWxsIHNvcnRzIG9mCisgIHByb2JsZW1zICYgY29uZnVzaW9uLCBz byBJIGNvbW1lbnRlZCBvdXQgdGhlIHNlY29uZCBjYWxsLiAgVGhpcyBpc3N1ZSBtaWdodAorICBu ZWVkIHRvIGJlIHJldmlzaXRlZC4pCisqLworVk9JRAorcHJlc2NhbihkdW1teSkgaW50IGR1bW15 OyB7ICAgICAgICAgICAgIC8qIEFyZyBpcyBpZ25vcmVkLiAqLworICAgIGV4dGVybiBpbnQgaG93 Y2FsbGVkOworICAgIGludCB5YXJnYzsgY2hhciAqKnlhcmd2OworICAgIGNoYXIgeDsKKyAgICBj aGFyICp5cCwgKnl5OworI2lmZGVmIERFQlVHCisgICAgaW50IGRlYmNvdW50ID0gMDsKKyNlbmRp ZiAvKiBERUJVRyAqLworICAgIGludCB6OworCisgICAgaWYgKHhfcHJlc2NhbikgICAgICAgICAg ICAgICAgICAgICAgLyogT25seSBydW4gb25jZSAqLworICAgICAgcmV0dXJuOworICAgIHhfcHJl c2NhbiA9IDE7CisKKyAgICB5YXJnYyA9IHhhcmdjOyAgICAgICAgICAgICAgICAgICAgICAvKiBN YWtlIGNvcHkgb2YgYXJnIHZlY3RvciAqLworICAgIHlhcmd2ID0geGFyZ3Y7CisKKyNpZm5kZWYg Tk9JQ1AKKyNpZmRlZiBEQ01EQlVGCisgICAgaWYgKCFrZXJtcmMpCisgICAgICBpZiAoIShrZXJt cmMgPSAoY2hhciAqKSBtYWxsb2MoS0VSTVJDTCsxKSkpCisgICAgICAgIGZhdGFsKCJwcmVzY2Fu OiBubyBtZW1vcnkgZm9yIGtlcm1yYyIpOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyAgICBja3N0 cm5jcHkoa2VybXJjLEtFUk1SQyxLRVJNUkNMKTsgICAvKiBEZWZhdWx0IGluaXQgZmlsZSBuYW1l ICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmZGVmIE9TMgorICAgIHlwID0gZ2V0ZW52KCJL OTVTVEFSVEZMQUdTIik7CisgICAgaWYgKHlwKSB7CisgICAgICAgIHN0YXJ0ZmxhZ3MgPSBhdG9p KHlwKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBJS1NECisgICAgaWYgKGhv d2NhbGxlZCA9PSBJX0FNX0lLU0QpICAgICAgICAgLyogSW50ZXJuZXQgS2VybWl0IFNlcnZpY2Ug ZGFlbW9uICovCisgICAgICBpbnNlcnZlciA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogKFNl ZSBpbnNlcnZlciBzZWN0aW9uIG9mIGNrY21haSkgKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKy8q IENvbW1hbmQgbGluZSBvcHRpb25zIGZvciBLZXJtaXQgKi8KKworI2lmbmRlZiBOT0NNREwKKyAg ICBpZiAoeWFyZ2MgPiAxCisgICAgICAgICYmICp5YXJndlsxXSAhPSAnLScKKyAgICAgICAgJiYg KHlhcmd2WzFdWzBdICE9ICc9JykKKyNpZmRlZiBLRVJCQU5HCisgICAgICAgICYmICh5YXJndlsx XVswXSAhPSAnKycpCisjZW5kaWYgLyogS0VSQkFORyAqLworI2lmZGVmIElLU0QKKyAgICAgICAg JiYgKGhvd2NhbGxlZCAhPSBJX0FNX0lLU0QpCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIGFzIDFzdCBhcmd1bWVu dCAqLworI2lmbmRlZiBOT0lDUAorICAgICAgICBjaGFyICpzOworI2VuZGlmIC8qIE5PSUNQICov CisjaWZuZGVmIE5PVVJMCisgICAgICAgIGV4dGVybiBpbnQgaGF2ZXVybDsKKyAgICAgICAgZXh0 ZXJuIHN0cnVjdCB1cmxkYXRhIGdfdXJsOworICAgICAgICBpZiAodXJscGFyc2UoeWFyZ3ZbMV0s JmdfdXJsKSkgeworICAgICAgICAgICAgaWYgKCFja3N0cmNtcChnX3VybC5zdmMsImZ0cCIsLTEs MCkgfHwKKyAgICAgICAgICAgICAgICAhY2tzdHJjbXAoZ191cmwuc3ZjLCJmdHBzIiwtMSwwKSkg eworICAgICAgICAgICAgICAgIGhhdmV1cmwgPSAxOworICAgICAgICAgICAgICAgIGhvd2NhbGxl ZCA9IElfQU1fRlRQOworICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoZ191cmwuc3Zj LCJ0ZWxuZXQiLC0xLDApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcChnX3Vy bC5zdmMsInRlbG5ldHMiLC0xLDApKSB7CisgICAgICAgICAgICAgICAgaGF2ZXVybCA9IDE7Cisg ICAgICAgICAgICAgICAgaG93Y2FsbGVkID0gSV9BTV9URUxORVQ7CisgICAgICAgICAgICB9IGVs c2UgaWYgKCFja3N0cmNtcChnX3VybC5zdmMsInNzaCIsLTEsMCkpIHsKKyAgICAgICAgICAgICAg ICBoYXZldXJsID0gMTsKKyAgICAgICAgICAgICAgICBob3djYWxsZWQgPSBJX0FNX1NTSDsKKyAg ICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGdfdXJsLnN2YywiaWtzZCIsLTEsMCkgfHwK KyAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGdfdXJsLnN2Yywia2VybWl0IiwtMSww KSkgeworICAgICAgICAgICAgICAgIGhhdmV1cmwgPSAxOworICAgICAgICAgICAgICAgIGhvd2Nh bGxlZCA9IElfQU1fS0VSTUlUOworICAgICAgICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAoZ191 cmwuc3ZjLCJodHRwIiwtMSwwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAo Z191cmwuc3ZjLCJodHRwcyIsLTEsMCkpIHsKKyAgICAgICAgICAgICAgICBoYXZldXJsID0gMTsK KyAgICAgICAgICAgICAgICBob3djYWxsZWQgPSBJX0FNX0hUVFA7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAoaGF2ZXVybCkgeworICAgICAgICAgICAgICAgIHdoaWxlICgtLXlhcmdj ID4gMCkgeyAgIC8qIEdvIHRocm91Z2ggY29tbWFuZC1saW5lIGFyZ3MgKi8KKyAgICAgICAgICAg ICAgICAgICAgeWFyZ3YrKzsgICAgICAgICAgICAvKiBsb29raW5nIGZvciAtWSBhbmQgLWQgKi8K KyAgICAgICAgICAgICAgICAgICAgeXAgPSAqeWFyZ3YrMTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKCoqeWFyZ3YgPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gKigqeWFy Z3YrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgeworI2lmbmRlZiBOT0lDUAorCQkJICAgICAgY2Fz ZSAnKyc6CisJCQkgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGRveGFyZyh5YXJndiwxKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZhdGFsKCJFeHRlbmRlZCBhcmd1bWVudCBlcnJvciIpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlw ID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IE5PSUNQICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdZJzoKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9pbml0Kys7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl ICdxJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9p bml0ID0gMTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dGFydGZsYWdzIHw9IDI7ICAgIC8qIE5vIG5ldHdvcmsgRExMcyAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gNDsgICAgLyogTm8gVEFQSSBETExzICov CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSA4OyAgICAv KiBObyBTZWN1cml0eSBETExzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RhcnRmbGFncyB8PSAxNjsgICAvKiBObyBabW9kZW0gRExMcyAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gMzI7ICAgLyogU3RkaW4gKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9IDY0OyAgIC8qIFN0ZG91 dCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6IC8qID0gU0VU IERFQlVHIE9OICovCisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGRlYmNvdW50KysgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlYnRpbSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVibG9n KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYmxvZyA9IGRlYm9wbigiZGVi dWcubG9nIiwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgJ1cnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKih5cCsxKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVu dCBidW5kbGluZyBhZnRlciAtVyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5 YXJndisrLCB5YXJnYy0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeWFy Z2MgPCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJXaW5kb3cg aGFuZGxlIG1pc3NpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHduZERp YWxlciA9IChIV05EKSBhdG9sKCp5YXJndik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFN0YXJ0ZWRGcm9tRGlhbGVyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeWFyZ3YrKywgeWFyZ2MtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2Vy bWl0RGlhbGVySUQgPSBhdG9sKCp5YXJndikgOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyMnOiAvKiBL OTUgaW5pdGlhbGl6YXRpb24gb3B0aW9ucyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoKih5cCsxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZmF0YWwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5 YXJnYy0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeWFyZ2MgPCAxKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCItIyBhcmd1bWVudCBtaXNz aW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gYXRv bCgqeWFyZ3YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCF5cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAqKyt5cDsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgLyogYWZ0ZXIgdGhpcyBwb2ludCBub24tS2VybWl0IHBlcnNvbmFsaXRpZXMgbXVzdCByZXR1 cm4gKi8KKyAgICAgICAgc3dpdGNoIChob3djYWxsZWQpIHsKKwkgIGNhc2UgSV9BTV9LRVJNSVQ6 CisJICBjYXNlIElfQU1fSUtTRDoKKwkgIGNhc2UgSV9BTV9TU0hTVUI6CisgICAgICAgICAgICBi cmVhazsKKwkgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRp ZiAvKiBOT1VSTCAqLworCisjaWZuZGVmIE5PSUNQCisgICAgICAgIC8qIElmIGl0IGlzIG5vdCBh IFVSTCB0aGF0IHdlIHJlY29nbml6ZSwgdHJ5IHRvIHRyZWF0IGl0IGFzIGEgZmlsZSAqLworCisg ICAgICAgIGlmICghaXNhYnNvbHV0ZSh5YXJndlsxXSkpICAgICAgLyogSWYgbm90IGFic29sdXRl ICovCisgICAgICAgICAgcyA9IGZpbmRpbnBhdGgoeWFyZ3ZbMV0pOyAgICAgLyogTG9vayBpbiBQ QVRIICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICBzID0geWFyZ3ZbMV07CisgICAgICAgIGlm ICghcykKKyAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQseGl0c3RhKTsKKyAgICAgICAgemZucWZw KHMsQ0tNQVhQQVRILGNtZGZpbCk7ICAgICAvKiBJbiBjYXNlIG9mIENEIGluIGZpbGUgKi8KKyAg ICAgICAgeWFyZ2MgLT0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIHBhc3QgdGhlIGZp bGVuYW1lICovCisgICAgICAgIHlhcmd2ICs9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogT3Ro ZXJ3aXNlIHdlJ2xsIGdldCBhbiBlcnJvciAqLworI2VuZGlmIC8qIE5PSUNQICovCisgICAgfQor CisjaWZuZGVmIE5PQ01ETAorI2lmZGVmIE5FV0ZUUAorICAgIGlmIChob3djYWxsZWQgPT0gSV9B TV9GVFApIHsgICAgICAgIC8qIEtlcm1pdCdzIEZUUCBjbGllbnQgcGVyc29uYWxpdHkgKi8KKyAg ICAgICAgd2hpbGUgKC0teWFyZ2MgPiAwKSB7ICAgICAgICAgICAvKiBHbyB0aHJvdWdoIGNvbW1h bmQtbGluZSBhcmdzICovCisgICAgICAgICAgICB5YXJndisrOyAgICAgICAgICAgICAgICAgICAg LyogbG9va2luZyBmb3IgLVkgYW5kIC1kICovCisgICAgICAgICAgICB5cCA9ICp5YXJndisxOwor ICAgICAgICAgICAgaWYgKCoqeWFyZ3YgPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgeCA9ICoo Knlhcmd2KzEpOworICAgICAgICAgICAgICAgIHdoaWxlICh4KSB7CisgICAgICAgICAgICAgICAg ICAgIHN3aXRjaCAoeCkgeworI2lmbmRlZiBOT0lDUAorCQkgICAgICBjYXNlICcrJzoKKwkJICAg ICAgY2FzZSAnLSc6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG94YXJnKHlhcmd2LDEp IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJFeHRlbmRlZCBhcmd1 bWVudCBlcnJvciIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgeXAgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIE5PSUNQICovCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnWSc6CisgICAgICAgICAg ICAgICAgICAgICAgICBub2luaXQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICAgICAgICAgICAg ICAgIHF1aWV0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgICAgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vaW5p dCA9IDE7CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGZsYWdzIHw9 IDI7ICAgIC8qIE5vIG5ldHdvcmsgRExMcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3Rh cnRmbGFncyB8PSA0OyAgICAvKiBObyBUQVBJIERMTHMgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIHN0YXJ0ZmxhZ3MgfD0gODsgICAgLyogTm8gU2VjdXJpdHkgRExMcyAqLworICAgICAgICAg ICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSAxNjsgICAvKiBObyBabW9kZW0gRExMcyAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSAzMjsgICAvKiBTdGRpbiAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8PSA2NDsgICAvKiBTdGRvdXQgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiAgICAgICAgICAgICAvKiA9IFNFVCBERUJVRyBPTiAq LworI2lmZGVmIERFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGViY291bnQrKyA+ IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnRpbSA9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoIWRlYmxvZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVibG9n ID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICBj YXNlICdXJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqKHlwKzEpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICBmYXRhbCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAt VyIpOworICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmICh5YXJnYyA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAg IGZhdGFsKCJXaW5kb3cgaGFuZGxlIG1pc3NpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGh3bmREaWFsZXIgPSAoSFdORCkgYXRvbCgqeWFyZ3YpOworICAgICAgICAgICAgICAgICAgICAg ICAgU3RhcnRlZEZyb21EaWFsZXIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3Yr KywgeWFyZ2MtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEtlcm1pdERpYWxlcklEID0gYXRv bCgqeWFyZ3YpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgJyMnOiAgICAgICAgIC8qIEs5NSBpbml0aWFsaXphdGlvbiBvcHRpb25z ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKih5cCsxKSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5 YXJnYy0tOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHlhcmdjIDwgMSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZmF0YWwoIi0jIGFyZ3VtZW50IG1pc3NpbmciKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gYXRvbCgqeWFyZ3YpOworICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCF5cCkKKyAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgeCA9ICorK3lwOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm IC8qIE5FV0ZUUCAqLworI2VuZGlmIC8qIE5PQ01ETCAqLworCisgICAgd2hpbGUgKC0teWFyZ2Mg PiAwKSB7ICAgICAgICAgICAgICAgLyogR28gdGhyb3VnaCBjb21tYW5kLWxpbmUgYXJncyAqLwor ICAgICAgICB5YXJndisrOworICAgICAgICB5cCA9ICp5YXJndisxOyAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgZm9yIGJ1bmRsZWQgYXJncyAqLworICAgICAgICBpZiAoKip5YXJndiA9PSAn PScpICAgICAgICAgICAgIC8qIFNhbWUgcnVsZXMgYXMgY21kbGluKCkuLi4gKi8KKyAgICAgICAg ICByZXR1cm47CisgICAgICAgIGRlYnVnKEYxMTAsInByZXNjYW4gKnlhcmd2IiwqeWFyZ3YsMCk7 CisKKyNpZm5kZWYgTk9JQ1AKKyNpZmRlZiBLRVJCQU5HCisgICAgICAgIHl5ID0gKnlhcmd2Owor ICAgICAgICBpZiAoIXN0cmNtcCh5eSwiKyIpIHx8ICgqeXkgPT0gJysnICYmICooeXkrMSkgPCAo Y2hhcikzMykpIHsKKyAgICAgICAgICAgIGNoYXIgKiBzOworICAgICAgICAgICAgeWFyZ3YrKzsK KyAgICAgICAgICAgIG5vaW5pdCA9IDE7CisgICAgICAgICAgICBpZiAoISp5YXJndikKKyAgICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2ZpbGVmID0gMTsKKyAgICAgICAgICAgIHMg PSBmaW5kaW5wYXRoKCp5YXJndik7CisgICAgICAgICAgICBpZiAocykgeworICAgICAgICAgICAg ICAgIHpmbnFmcChzLENLTUFYUEFUSCxjbWRmaWwpOworICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQseGl0c3Rh KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEtFUkJBTkcgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLwor ICAgICAgICBpZiAoIXN0cmNtcCgqeWFyZ3YsIi0tIikpICAgICAgIC8qIGdldG9wdCgpIGNvbmZv cm1hbmNlICovCisgICAgICAgICAgcmV0dXJuOworI2lmZGVmIFZNUworICAgICAgICBlbHNlIGlm ICgqKnlhcmd2ID09ICcvJykKKyAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBWTVMgKi8K KyAgICAgICAgZWxzZSBpZiAoKip5YXJndiA9PSAnLScpIHsgICAgICAvKiBHb3QgYW4gb3B0aW9u IChiZWdpbnMgd2l0aCBkYXNoKSAqLworICAgICAgICAgICAgeCA9ICooKnlhcmd2KzEpOyAgICAg ICAgICAgIC8qIEdldCBvcHRpb24gbGV0dGVyICovCisgICAgICAgICAgICB3aGlsZSAoeCkgeyAg ICAgICAgICAgICAgICAgLyogQWxsb3cgZm9yIGJ1bmRsZWQgb3B0aW9ucyAqLworICAgICAgICAg ICAgICAgIGRlYnVnKEYwMDAsInByZXNjYW4gYXJnIiwiIix4KTsKKyAgICAgICAgICAgICAgICBz d2l0Y2ggKHgpIHsKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgICAgICAgICAgIGNhc2UgJysnOgor ICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICAgICAgICAgIGlmIChkb3hh cmcoeWFyZ3YsMSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCgiRXh0ZW5k ZWQgYXJndW1lbnQgZXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorI2lmbmRlZiBDT01N RU5UCQkJCS8qIEplZmYgMjggQXByIDIwMDMgKi8KKyAgICAgICAgICAgICAgICAgICAgeXAgPSBO VUxMOwkJLyogKG5vdCAiIikgKi8KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIHlhcmd2Kyss IHlhcmdjLS07CisgICAgICAgICAgICAgICAgICAgIHlwID0gKnlhcmd2OworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9JQ1AgKi8K KworICAgICAgICAgICAgICAgICAgY2FzZSAnNyc6ICAgICAgICAgICAgIC8qIFVuZG9jdW1lbnRl ZC4uLiAqLworICAgICAgICAgICAgICAgICAgICBzc3RlbG5ldCA9IDE7ICAgICAgIC8qIChiZWNh dXNlIGl0IGRvZXNuJ3Qgd29yaykgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZk ZWYgSUtTRAorICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IHsKKyAgICAgICAgICAgICAgICAg ICAgICBjaGFyICogcDsKKyAgICAgICAgICAgICAgICAgICAgICBpbnNlcnZlciA9IDE7ICAgICAv KiBGbGFnIHRoYXQgd2UgYXJlIGRvaW5nIHRoaXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICBz cnZjZG1zZyA9IDI7ICAgICAvKiBQcmVzZXQgdGhpcyAqLworICAgICAgICAgICAgICAgICAgICAg IC8qIFNlZSBpbnNlcnZlciBzZWN0aW9uIG9mIGNrY21haS5jIGZvciBtb3JlIHNldHRpbmdzICov CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCooeXArMSkpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgZmF0YWwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0 ZXIgLUEiKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgTlQKKyAgICAgICAgICAg ICAgICAgICAgICAvKiBTdXBwb3J0IGZvciBQcmFnbWEgU3lzdGVtcyBUZWxuZXQvVGVybWluYWwg U2VydmVycyAqLworICAgICAgICAgICAgICAgICAgICAgIHAgPSBnZXRlbnYoIlBSQUdNQVNZU19J TkVURF9TT0NLIik7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgJiYgYXRvaShwKSAhPSAw KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHR0bmFtZVswXSA9ICckJzsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KCZ0dG5hbWVbMV0scCxUVE5BTUxFTi0xKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgICAgICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsK KyAgICAgICAgICAgICAgICAgICAgICBpZiAoeWFyZ2MgPCAxIHx8ICoqeWFyZ3YgPT0gJy0nKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCItQSBhcmd1bWVudCBtaXNzaW5nIik7 CisgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgdHRuYW1lWzBdID0gJyQnOworICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHko JnR0bmFtZVsxXSwqeWFyZ3YsVFROQU1MRU4tMSk7CisgICAgICAgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIE9TMgorICAgICAgICAgICAg ICAgICAgY2FzZSAnVyc6CisgICAgICAgICAgICAgICAgICAgIGlmICgqKHlwKzEpKQorICAgICAg ICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVyIC1X Iik7CisgICAgICAgICAgICAgICAgICAgIHlhcmd2KyssIHlhcmdjLS07CisgICAgICAgICAgICAg ICAgICAgIGlmICh5YXJnYyA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgZmF0YWwoIldpbmRv dyBoYW5kbGUgbWlzc2luZyIpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAg aWYgKGR1bW15KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5YXJnYy0tOwor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaHduZERp YWxlciA9IChIV05EKSBhdG9sKCp5YXJndik7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGFy dGVkRnJvbURpYWxlciA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5YXJn Yy0tOworICAgICAgICAgICAgICAgICAgICAgICAgS2VybWl0RGlhbGVySUQgPSBhdG9sKCp5YXJn dikgOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg IGNhc2UgJyMnOiAgICAgICAgICAgICAvKiBLOTUgaW5pdGlhbGl6YXRpb24gb3B0aW9ucyAqLwor ICAgICAgICAgICAgICAgICAgICBpZiAoKih5cCsxKSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgZmF0YWwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB5YXJndisrLCB5YXJnYy0tOworICAgICAgICAgICAg ICAgICAgICBpZiAoeWFyZ2MgPCAxKQorICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCItIyBh cmd1bWVudCBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZmxhZ3MgfD0gYXRv bCgqeWFyZ3YpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBPUzIgKi8K KworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgICAgICAgY2FzZSAnTSc6ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBNeSBVc2VyIE5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAg aWYgKCooeXArMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsKCJpbnZhbGlkIGFy Z3VtZW50IGJ1bmRsaW5nIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgeWFyZ3YrKywgeWFyZ2MtLTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5YXJnYyA8 IDEpIHx8ICgqKnlhcmd2ID09ICctJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFs KCJtaXNzaW5nIHVzZXJuYW1lIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgaWYgKChpbnQpc3RybGVuKCp5YXJndikgPiBVSURCVUZMRU4pIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZhdGFsKCJ1c2VybmFtZSB0b28gbG9uZyIpOworICAgICAgICAgICAg ICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgVGhpcyBjYW4ndCB3b3JrLiAgdWlkYnVm IGlzIG92ZXJ3cml0dGVuIGluIHN5c2luaXQoKSB3aGljaCBoYXMgeWV0IHRvIGJlCisgIGNhbGxl ZC4gIFRoaXMgY2Fubm90IGJlIHNldCBpbiBwcmVzY2FuKCkuCisqLworI2lmZGVmIElLU0QKKyAg ICAgICAgICAgICAgICAgICAgaWYgKCFpbnNlcnZlcikKKyNlbmRpZiAvKiBJS1NEICovCisgICAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHVpZGJ1ZiwqeWFyZ3YsVUlEQlVGTEVOKTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IE5PU1BMICovCisgICAgICAgICAgICAgICAgICBjYXNlICdSJzogICAgICAgICAgICAgLyogUmVt b3RlLW9ubHkgYWR2aXNvcnkgKi8KKyNpZmRlZiBDS19JRlJPCisgICAgICAgICAgICAgICAgICAg IHJlbW9ubHkgPSAxOworI2VuZGlmIC8qIENLX0lGUk8gKi8KKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgLyogU1RBWSAq LworICAgICAgICAgICAgICAgICAgICBzdGF5ZmxnID0gMTsKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICAgICAg bm9pbml0ID0gMTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRmbGFncyB8 PSAyOyAgICAvKiBObyBuZXR3b3JrIERMTHMgKi8KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRm bGFncyB8PSA0OyAgICAvKiBObyBUQVBJIERMTHMgKi8KKyAgICAgICAgICAgICAgICAgICAgc3Rh cnRmbGFncyB8PSA4OyAgICAvKiBObyBTZWN1cml0eSBETExzICovCisgICAgICAgICAgICAgICAg ICAgIHN0YXJ0ZmxhZ3MgfD0gMTY7ICAgLyogTm8gWm1vZGVtIERMTHMgKi8KKyAgICAgICAgICAg ICAgICAgICAgc3RhcnRmbGFncyB8PSAzMjsgICAvKiBTdGRpbiAqLworICAgICAgICAgICAgICAg ICAgICBzdGFydGZsYWdzIHw9IDY0OyAgIC8qIFN0ZG91dCAqLworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgICAgICAg ICAgIGNhc2UgJ1knOiAgICAgICAgICAgICAvKiBObyBpbml0IGZpbGUgKi8KKyAgICAgICAgICAg ICAgICAgICAgbm9pbml0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogTk9JQ1AgKi8KKworICAgICAgICAgICAgICAgICAgY2FzZSAncSc6CisgICAgICAgICAgICAg ICAgICAgICAgcXVpZXQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgICAgICAgICAgICBjYXNlICdkJzogICAgICAgICAgICAgLyogPSBTRVQgREVCVUcgT04gKi8K KyNpZmRlZiBERUJVRworICAgICAgICAgICAgICAgICAgICBpZiAoZGViY291bnQrKyA+IDApCisg ICAgICAgICAgICAgICAgICAgICAgZGVidGltID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYg KCFkZWJsb2cpCisgICAgICAgICAgICAgICAgICAgICAgZGVibG9nID0gZGVib3BuKCJkZWJ1Zy5s b2ciLDApOworI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgICAgICAgICBjYXNlICd4JzogICAgICAgICAgICAgLyogU2VydmVyICovCisg ICAgICAgICAgICAgICAgICAgIGFyZ194ID0gMTsgICAgICAgICAgLyogTm90ZSBpbiBhZHZhbmNl ICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBOT0lDUAorICAgICAgICAg ICAgICAgICAgY2FzZSAneSc6ICAgICAgICAgICAgIC8qIEFsdGVybmF0aXZlIGluaXQgZmlsZSAq LworICAgICAgICAgICAgICAgICAgICBub2luaXQgPSAwOworICAgICAgICAgICAgICAgICAgICB5 YXJndisrLCB5YXJnYy0tOworICAgICAgICAgICAgICAgICAgICBpZiAoeWFyZ2MgPCAxKSBmYXRh bCgibWlzc2luZyBuYW1lIGluIC15Iik7CisgICAgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2Ug aW5pdCBmaWxlIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGtlcm1yYywq eWFyZ3YsS0VSTVJDTCk7CisgICAgICAgICAgICAgICAgICAgIHJjZmxhZyA9IDE7ICAgICAgICAg LyogRmxhZyB0aGF0IHRoaXMgaGFzIGJlZW4gZG9uZSAqLworICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJwcmVzY2FuIGtlcm1yYyIsa2VybXJjLHJjZmxhZyk7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PSUNQICovCisgICAgICAgICAgICAgICAgICBjYXNl ICd6JzogICAgICAgICAgICAgLyogPSBTRVQgQkFDS0dST1VORCBPRkYgKi8KKyAgICAgICAgICAg ICAgICAgICAgYmdzZXQgPSAwOworICAgICAgICAgICAgICAgICAgICBiYWNrZ3JkID0gMDsKKyNp ZmRlZiBWTVMKKyAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAwOworI2VuZGlmIC8qIFZNUyAq LworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSAn Qic6ICAgICAgICAgICAgIC8qIEZvcmNlIGJhY2tncm91bmQgKGJhdGNoKSAqLworICAgICAgICAg ICAgICAgICAgICBiZ3NldCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJhY2tncmQgPSAxOwor I2lmZGVmIFZNUworICAgICAgICAgICAgICAgICAgICBiYXRjaCA9IDE7CisjZW5kaWYgLyogVk1T ICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ0tfTkVUQklPUworICAg ICAgICAgICAgICAgICAgY2FzZSAnTic6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGludCBuIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHlhcmd2Kyss IHlhcmdjLS07CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkp CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oKnlhcmd2KSAhPSAxIHx8ICgqeWFy Z3YpWzBdID09ICdYJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldEJpb3NBZGFw dGVyID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG4gPSBhdG9pKCp5YXJndik7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKG4gPj0gMCAmJiBuIDw9IDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOZXRCaW9zQWRhcHRlciA9IG47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0Qmlvc0FkYXB0ZXIgPSAtMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisgICAgICAgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgaWYgKCF5cCkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIHggPSAqKyt5cDsgICAgICAgICAgICAgIC8qIFNlZSBpZiBvcHRpb25zIGFy ZSBidW5kbGVkICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyog Tk9DTURMICovCit9CisKKy8qICBHIEUgVCBUIEMgUyAgLS0gIEdldCBUcmFuc2ZlciAoSW50ZXJt ZWRpYXRlKSBDaGFyYWN0ZXIgU2V0ICAqLworCisvKgorICBHaXZlbiB0d28gZmlsZSBjaGFyYWN0 ZXIgc2V0cywgdGhpcyByb3V0aW5lIHBpY2tzIG91dCB0aGUgYXBwcm9wcmlhdGUKKyAgInRyYW5z ZmVyIiBjaGFyYWN0ZXIgc2V0IHRvIHVzZSBmb3IgdHJhbnNsYXRpbmcgYmV0d2VlbiB0aGVtLgor ICBUaGUgdHJhbnNmZXIgY2hhcmFjdGVyIHNldCBudW1iZXIgaXMgcmV0dXJuZWQuCisKKyAgVHJh bnNsYXRpb24gYmV0d2VlbiB0d28gZmlsZSBjaGFyYWN0ZXIgc2V0cyBpcyBkb25lLCBmb3IgZXhh bXBsZSwKKyAgYnkgdGhlIENPTk5FQ1QsIFRSQU5TTUlULCBhbmQgVFJBTlNMQVRFIGNvbW1hbmRz LgorCisgIFRyYW5zbGF0aW9uIGJldHdlZW4gS2FuamkgY2hhcmFjdGVyIHNldHMgaXMgbm90IHll dCBzdXBwb3J0ZWQuCisqLworaW50CitnZXR0Y3MoY3MxLGNzMikgaW50IGNzMSwgY3MyOyB7Cisj aWZkZWYgTk9DU0VUUyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gY2hhcmFjdGVyLXNl dCBzdXBwb3J0ICovCisgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog c28gbm8gdHJhbnNsYXRpb24gKi8KKyNlbHNlCisgICAgaW50IHRjcyA9IFRDX1RSQU5TUDsKKyNp ZmRlZiBLQU5KSQorLyogS2Fuamkgbm90IHN1cHBvcnRlZCB5ZXQgKi8KKyAgICBpZiAoZmNzaW5m b1tjczFdLmFscGhhYmV0ID09IEFMX0pBUEFOIHx8CisgICAgICAgIGZjc2luZm9bY3MyXS5hbHBo YWJldCA9PSBBTF9KQVBBTiApCisgICAgICB0Y3MgPSBUQ19UUkFOU1A7CisgICAgZWxzZQorI2Vu ZGlmIC8qIEtBTkpJICovCisjaWZkZWYgQ1lSSUxMSUMKKy8qCisgIEkgY2FuJ3QgcmVtZW1iZXIg d2h5IHdlIGRvbid0IHRlc3QgYm90aCBzZXRzIGhlcmUsIGJ1dCBJIHRoaW5rIHRoZXJlCisgIG11 c3QgaGF2ZSBiZWVuIGEgcmVhc29uLi4uCisqLworICAgICAgaWYgKGZjc2luZm9bY3MyXS5hbHBo YWJldCA9PSBBTF9DWVJJTCkKKyAgICAgICAgdGNzID0gVENfQ1lSSUxMOworICAgICAgZWxzZQor I2VuZGlmIC8qIENZUklMTElDICovCisjaWZkZWYgSEVCUkVXCisgICAgICAgICAgaWYgKGZjc2lu Zm9bY3MxXS5hbHBoYWJldCA9PSBBTF9IRUJSRVcgfHwKKyAgICAgICAgICAgICAgZmNzaW5mb1tj czJdLmFscGhhYmV0ID09IEFMX0hFQlJFVyApCisgICAgICAgICAgICB0Y3MgPSBUQ19IRUJSRVc7 CisgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIEhFQlJFVyAqLworI2lmZGVmIEdSRUVLCisgICAg ICAgICAgaWYgKGZjc2luZm9bY3MxXS5hbHBoYWJldCA9PSBBTF9HUkVFSyB8fAorICAgICAgICAg ICAgICBmY3NpbmZvW2NzMl0uYWxwaGFiZXQgPT0gQUxfR1JFRUsgKQorICAgICAgICAgICAgdGNz ID0gVENfR1JFRUs7CisgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIEdSRUVLICovCisKKyAgICAg ICAgICAgIC8qIFJvbWFuIHNldHMgLi4uICovCisKKyNpZmRlZiBMQVRJTjIgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBFYXN0IEV1cm9wZWFuICovCisgICAgICAgIGlmIChjczEgPT0gRkNf MkxBVElOICB8fCBjczIgPT0gRkNfMkxBVElOIHx8IC8qIExhdGluLTIgKi8KKyAgICAgICAgICAg IGNzMSA9PSBGQ19DUDg1MiAgIHx8IGNzMiA9PSBGQ19DUDg1MiAgfHwgLyogQ1A4NTIgKi8KKyAg ICAgICAgICAgIGNzMSA9PSBGQ19DUDEyNTAgIHx8IGNzMiA9PSBGQ19DUDEyNTAgfHwgLyogV2lu ZG93cyBMYXRpbi0yICovCisgICAgICAgICAgICBjczEgPT0gRkNfTUFaT1ZJQSB8fCBjczIgPT0g RkNfTUFaT1ZJQSkgIC8qIFBvbGlzaCBNYXpvdmlhICovCisgICAgICAgICAgdGNzID0gVENfMkxB VElOOworICAgICAgICBlbHNlCisjZW5kaWYgLyogTEFUSU4yICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2VzdCBFdXJvcGVhbiBFdXJvLWF3YXJlICovCisg ICAgICAgICAgaWYgKGNzMSA9PSBGQ19DUDg1OCB8fCBjczEgPT0gRkNfOUxBVElOIHx8CisgICAg ICAgICAgICAgIGNzMiA9PSBGQ19DUDg1OCB8fCBjczIgPT0gRkNfOUxBVElOKQorICAgICAgICAg ICAgdGNzID0gVENfOUxBVElOOworICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRyYWRpdGlvbmFsIFdlc3QgRXVyb3BlYW4gKi8KKyAgICAgICAgICAgIHRjcyA9IFRD XzFMQVRJTjsKKyAgICByZXR1cm4odGNzKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCit9CisKKyNp Zm5kZWYgTk9MT0NBTAorLyogIEQgTyBDIE8gTiBFIEMgVCAgLS0gIERvIHRoZSBjb25uZWN0IGNv bW1hbmQgICovCisvKgorICBxID0gMCBtZWFucyBpc3N1ZSBub3JtYWwgaW5mb3JtYXRpb25hbCBt ZXNzYWdlIGFib3V0IGhvdyB0byBnZXQgYmFjaywgZXRjLgorICBxICE9IDAgbWVhbnMgdG8gc2tp cCB0aGUgbWVzc2FnZS4KKyovCisKK2ludAorZG9jb25lY3QocSxhc3luYykgaW50IHEsIGFzeW5j OyB7CisgICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNv ZGUgKi8KKyNpZmRlZiBDS19BVVRPREwKKyAgICBleHRlcm4gQ0hBUiBrc2J1ZltdOworI2VuZGlm IC8qIENLX0FVVE9ETCAqLworI2lmbmRlZiBOT0tWRVJCUyAgICAgICAgICAgICAgICAgICAgICAg IC8qIEtleWJvYXJkIG1hY3JvIG1hdGVyaWFsICovCisgICAgZXh0ZXJuIGludCBrZXltYWMsIGtl eW1hY3g7CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyAgICBleHRlcm4gaW50IGp1c3RvbmUsIGFk bF9lcnI7CisgICAgaW50IHFzYXZlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIHJl bWVtYmVyaW5nICJxdWlldCIgdmFsdWUgKi8KKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50IHRl cm1faW87CisgICAgZXh0ZXJuIGludCBkaXNwbGF5X2RlbW87CisgICAgaW50IHRlcm1faW9fc2F2 ZTsKKyNpZmRlZiBLVUkKKyAgICBleHRlcm4gaW50IGt1aV9hc3luYzsKKyNlbmRpZiAvKiBLVUkg Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBpbnQgaXNfdG4gPSAwOworCisjaWZkZWYgSUtTRAor ICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgIHByaW50 ZigiP1NvcnJ5LCBJS1NEIGNhbm5vdCBDT05ORUNULlxyXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgaXNfdG4gPQorI2lm ZGVmIFROQ09ERQorICAgICAgKGxvY2FsICYmIG5ldHdvcmsgJiYgSVNfVEVMTkVUKCkpIHx8ICgh bG9jYWwgJiYgc3N0ZWxuZXQpCisjZWxzZQorICAgICAgICAwCisjZW5kaWYgLyogVE5DT0RFICov CisgICAgICAgICAgOworLyoKKyAgU2F2aW5nLCBjaGFuZ2luZywgYW5kIHJlc3RvcmluZyB0aGUg Z2xvYmFsICJxdWlldCIgdmFyaWFibGUgYXJvdW5kIGNhbGxzCisgIHRvIGNvbmVjdCgpIHRvIGNv bnRyb2wgd2hldGhlciB0aGUgdmVyYm9zZSBDT05ORUNUIG1lc3NhZ2UgaXMgcHJpbnRlZCBpcwor ICBvYnZpb3VzbHkgbGVzcyBlbGVnYW50IHRoYW4gcGFzc2luZyBhIHBhcmFtZXRlciB0byBjb25l Y3QoKSwgYnV0IHdlIGRvIGl0CisgIHRoaXMgd2F5IHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNoYW5n ZSBhbGwgb2YgdGhlIGNrP2Nvbi5jIG1vZHVsZXMuICBOT1RFOgorICBpdCBpcyBpbXBvcnRhbnQg dG8gcmVzdG9yZSB0aGUgdmFsdWUgaW1tZWRpYXRlbHkgdXBvbiByZXR1cm4gaW4gY2FzZSB0aGVy ZQorICBpcyBhbiBhdXRvZG93bmxvYWQgb3IgQVBDLgorKi8KKyAgICBxc2F2ZSA9IHF1aWV0OyAg ICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIGl0ICovCisgICAgaWYgKCFxdWlldCAmJiBxID4g LTEpCisgICAgICBxdWlldCA9IHE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIGFyZ3Vt ZW50IHRlbXBvcmFyaWx5ICovCisgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUHV0IGNvbnNvbGUgYmFjayB0byBub3JtYWwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJkb2Nv bmVjdCBqdXN0b25lIDEiLCIiLGp1c3RvbmUpOworI2lmZGVmIENLX0FVVE9ETAorICAgIGtzYnVm WzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9kb3dubG9hZCBwYWNrZXQgYnVm ZmVyICovCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisjaWZkZWYgT1MyCisgICAgZGlzcGxheV9k ZW1vID0gMTsgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdG8gZGlzcGxheSBkZW1vICov CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgaWYgKGlzX3RuICYm IFRFTE9QVF9VKFRFTE9QVF9LRVJNSVQpICYmIHR0Y2hrKCkgPj0gMAorI2lmZGVmIE9TMgorICAg ICAgICYmICF2aWV3b25seQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICApIHsKKyAgICAgICAg LyogSWYgdGhlIHJlbW90ZSBzaWRlIGlzIGluIGEgc3RhdGUgb2YgSUtTIFNUQVJULVNFUlZFUiAg ICAqLworICAgICAgICAvKiB3ZSByZXF1ZXN0IHRoYXQgdGhlIHN0YXRlIGJlIGNoYW5nZWQuICBX ZSB3aWxsIGRldGVjdCAgICovCisgICAgICAgIC8qIGEgZmFpbHVyZSB0byBhZGhlcmUgdG8gdGhl IHJlcXVlc3Qgd2hlbiB3ZSBjYWxsIHR0aW5jKCkgKi8KKyAgICAgICAgaWYgKCFpa3Nfd2FpdChL RVJNSVRfUkVRX1NUT1AsMCkgJiYgIXRjcF9pbmNvbWluZykgeworICAgICAgICAgICAgaWYgKCFx dWlldCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiXHJcbkVudGVyIENsaWVudC9TZXJ2ZXIg TW9kZS4uLiAgVXNlOlxyXG5cclxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorIiBSRU1P VEUgTE9HSU4gPHVzZXI+IDxwYXNzd29yZD4gdG8gbG9nIGluIHRvIHRoZSBzZXJ2ZXIgaWYgbmVj ZXNzYXJ5LlxyXG4iKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiBTRU5EIGFuZCBHRVQgZm9y IGZpbGUgdHJhbnNmZXIuXHJcbiIpOworICAgICAgICAgICAgICAgIHByaW50ZigiIFJFTU9URSBj b21tYW5kcyBmb3IgZmlsZSBtYW5hZ2VtZW50LlxyXG4iKTsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIiBGSU5JU0ggdG8gdGVybWluYXRlIENsaWVudC9TZXJ2ZXIgbW9kZS5cclxuIik7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCIgQllFIHRvIHRlcm1pbmF0ZSBhbmQgY2xvc2UgY29ubmVjdGlv bi5cclxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgUkVNT1RFIEhFTFAgZm9yIGFkZGl0 aW9uYWwgaW5mb3JtYXRpb24uXHJcblxyXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHF1aWV0ID0gcXNhdmU7CisgICAgICAgICAgICByZXR1cm4oMCk7ICAgICAgLyogRmFpbHVyZSAq LworICAgICAgICB9CisgICAgfQorCisgICAgLyogTGV0IG91ciBwZWVyIGtub3cgb3VyIHN0YXRl LiAqLworI2lmZGVmIENLX0FVVE9ETAorICAgIGlmIChpc190biAmJiBURUxPUFRfTUUoVEVMT1BU X0tFUk1JVCkKKyNpZmRlZiBPUzIKKyAgICAgICAgJiYgIXZpZXdvbmx5CisjZW5kaWYgLyogT1My ICovCisgICAgICAgICApIHsKKyAgICAgICAgaWYgKGF1dG9kbCAmJiAhVEVMT1BUX1NCKFRFTE9Q VF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkgeworICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRf U1RBUlQpOyAgICAgIC8qIFNlbmQgS2VybWl0LVNlcnZlciBTdGFydCAqLworICAgICAgICB9IGVs c2UgaWYgKCFhdXRvZGwgJiYgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFy dCkgeworICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CisgICAgICAgIH0KKyAgICB9 CisjZWxzZSAvKiBDS19BVVRPREwgKi8KKyAgICBpZiAoaXNfdG4gJiYgVEVMT1BUX01FKFRFTE9Q VF9LRVJNSVQpICYmCisJVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkK KyAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisj ZW5kaWYgLyogSUtTX09QVElPTiAqLworCisgICAgZGVidWcoRjEwMSwiZG9jb25lY3QgZmxvdyIs IiIsZmxvdyk7CisjaWZkZWYgT1MyCisgICAgZGVidWcoRjEwMSwiZG9jb25lY3QgYXN5bmMiLCIi LGFzeW5jKTsKKyNpZmRlZiBLVUkKKyAgICBpZiAoa3VpX2FzeW5jKQorICAgICAgYXN5bmMgPSAx OzsKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICB4ID0gY29uZWN0KGFzeW5jKTsgICAgICAgICAgICAg ICAgICAvKiBDb25uZWN0IHRoZSBmaXJzdCB0aW1lICovCisjZWxzZSAvKiBPUzIgKi8KKyAgICB4 ID0gY29uZWN0KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgZGVib2sgPSAxOworCisjaWZkZWYg SUtTX09QVElPTgorICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJgorICAgICAgICBU RUxPUFRfU0IoVEVMT1BUX0tFUk1JVCkua2VybWl0LnVfc3RhcnQgJiYKKyAgICAgICAgIXRjcF9p bmNvbWluZyAmJiAhcXVpZXQgJiYgdHRjaGsoKSA+PSAwCisgICAgICAgICkgeworICAgICAgICBw cmludGYoIlxyXG5FbnRlciBDbGllbnQvU2VydmVyIE1vZGUuLi4gIFVzZTpcclxuXHJcbiIpOwor ICAgICAgICBwcmludGYoCisiIFJFTU9URSBMT0dJTiA8dXNlcj4gPHBhc3N3b3JkPiB0byBsb2cg aW4gdG8gdGhlIHNlcnZlciBpZiBuZWNlc3NhcnkuXHJcbiIpOworICAgICAgICBwcmludGYoIiBT RU5EIGFuZCBHRVQgZm9yIGZpbGUgdHJhbnNmZXIuXHJcbiIpOworICAgICAgICBwcmludGYoIiBS RU1PVEUgY29tbWFuZHMgZm9yIGZpbGUgbWFuYWdlbWVudC5cclxuIik7CisgICAgICAgIHByaW50 ZigiIEZJTklTSCB0byB0ZXJtaW5hdGUgQ2xpZW50L1NlcnZlciBtb2RlLlxyXG4iKTsKKyAgICAg ICAgcHJpbnRmKCIgQllFIHRvIHRlcm1pbmF0ZSBhbmQgY2xvc2UgY29ubmVjdGlvbi5cclxuIik7 CisgICAgICAgIHByaW50ZigiIFJFTU9URSBIRUxQIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9u LlxyXG5cclxuIik7CisgICAgfQorI2VuZGlmIC8qIElLU19PUFRJT04gKi8KKworICAgIHF1aWV0 ID0gcXNhdmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgInF1aWV0IiB2YWx1ZSAq LworICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IGp1c3RvbmUgMiIsIiIsanVzdG9uZSk7CisKKyNp ZmRlZiBORVRDT05OCisgICAgaWYgKG5ldHdvcmsgJiYgdG5fZXhpdCAmJiB0dGNoaygpIDwgMCkK KyAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgICAgICAgICAvKiBFeGl0IHdpdGggZ29v ZCBzdGF0dXMgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRlZiBPUzJPUlVOSVgKKyAg ICAvKiBFeGl0IG9uIGRpc2Nvbm5lY3QgaWYgdGhlIHBvcnQgaXMgbm90IG9wZW4gb3IgY2Fycmll ciBkZXRlY3QgKi8KKyAgICBpZiAoZXhpdG9uY2xvc2UgJiYgKHR0Y2hrKCkgPCAwKSkKKyAgICAg IGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKworI2lm ZGVmIENLQ09OSU5UQjRDQgorICAgIC8qIFRoZSBvcmRlciBtYWtlcyBhIGRpZmZlcmVuY2UgaW4g SFAtVVggOC4wMC4gKi8KKyAgICAvKiBUaGUgb3RoZXIgb3JkZXIgbWFrZXMgaXQgdGhpbmsgaXQn cyBpbiB0aGUgYmFja2dyb3VuZCB3aGVuIGl0ICovCisgICAgLyogcmV0dXJucyBmcm9tIENPTk5F Q1QgKEFwciAxOTk5KS4gKi8KKyAgICBzZXRpbnQoKTsKKyAgICBjb25jYigoY2hhcillc2NhcGUp OyAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGNvbnNvbGUgZm9yIGNvbW1hbmRzICovCisjZWxz ZQorICAgIC8qIFRoaXMgaXMgaG93IGl0IGhhcyBhbHdheXMgYmVlbiBzbyBiZXR0ZXIgbGVhdmUg aXQgKi8KKyAgICAvKiB0aGlzIHdheSBmb3IgYWxsIG5vbi1IUC1VWC04LjAwIGJ1aWxkcy4gKi8K KyAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGNvbnNv bGUgZm9yIGNvbW1hbmRzICovCisgICAgc2V0aW50KCk7CisjZW5kaWYgLyogQ0tDT05JTlRCNENC ICovCisKKyNpZmRlZiBPUzIKKyAgICBpZiAoIWFzeW5jKSB7CisgICAgICAgIHRlcm1faW9fc2F2 ZSA9IHRlcm1faW87ICAgICAgICAgLyogRGlzYWJsZSBJL08gYnkgZW11bGF0b3IgKi8KKyAgICAg ICAgdGVybV9pbyA9IDA7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19BUEMKKy8qCisg IElmIGFuIEFQQyBjb21tYW5kIHdhcyByZWNlaXZlZCBkdXJpbmcgQ09OTkVDVCBtb2RlLCB3ZSBk ZWZpbmUgaXQgbm93CisgIGFzIGEgbWFjcm8sIGV4ZWN1dGUgdGhlIG1hY3JvLCBhbmQgdGhlbiBy ZXR1cm4gdG8gQ09OTkVDVCBtb2RlLgorICBXZSBkbyB0aGlzIGluIGEgV0hJTEUgbG9vcCBpbiBj YXNlIGFkZGl0aW9uYWwgQVBDcyBjb21lIGR1cmluZyBzdWJzZXF1ZW50CisgIENPTk5FQ1Qgc2Vz c2lvbnMuCisqLworICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBhcGNhY3RpdmUiLCIiLGFw Y2FjdGl2ZSk7CisgICAgICAgIGRlYnVnKEYxMDEsImRvY29uZWN0IHN1Y2Nlc3MiLCIiLHN1Y2Nl c3MpOworCisgICAgICAgIHdoaWxlICh4ID4gMCAmJiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8 fAorICAgICAgICAgICAgICAgICAgICAgICAgIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiBh cGNzdGF0dXMgIT0gQVBDX09GRikpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVj dCBqdXN0b25lIDMiLCIiLGp1c3RvbmUpOworICAgICAgICAgICAgaWYgKG1sb29rKG1hY3RhYiwi X2FwY19jb21tYW5kcyIsbm1hYykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJkb2NvbmVjdCBhYm91dCB0byBleGVjdXRlIEFQQyIsYXBjYnVmLDApOworICAgICAgICAgICAg ICAgIGRvbWFjKCJfYXBjX2NvbW1hbmRzIixhcGNidWYsY21kc3RrW2NtZGx2bF0uY2NmbGdzfENG X0FQQyk7CisgICAgICAgICAgICAgICAgZGVsbWFjKCJfYXBjX2NvbW1hbmRzIiwxKTsKKyNpZmRl ZiBERUJVRworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAw LCJkb2NvbmVjdCBBUEMgaW4gcHJvZ3Jlc3MiLCIiLDApOworI2VuZGlmIC8qIERFQlVHICovCisg ICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBhcGNhY3RpdmUg YWZ0ZXIgZG9tYWMiLCIiLGFwY2FjdGl2ZSk7CisgICAgICAgICAgICBpZiAoIWFwY2FjdGl2ZSkg eyAgICAgICAgICAgICAgIC8qIEluIGNhc2UgQ0xFQVIgQVBDIHdhcyBpbiBBUEMgKi8KKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBxdWl0IEFQQyBsb29wOiBhcGNhY3RpdmUi LCIiLGFwY2FjdGl2ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICAvKiBBbHNvIGRvbid0IHJlY29ubmVjdCBpZiBhdXRvZG93bmxvYWQgZmFpbGVk IC0gdmVyeSBjb25mdXNpbmchICovCisgICAgICAgICAgICAvKiBMZXQgdGhlbSB2aWV3IHRoZSBs b2NhbCBzY3JlZW4gdG8gc2VlIHdoYXQgaGFwcGVuZWQuIC0gZmRjICovCisKKyAgICAgICAgICAg IC8qIFRoaXMgc2hvdWxkIGJlIGNvbmRpdGlvbmFsLiAgSWYgc29tZW9uZSBpcyByZWx5aW5nIG9u IHRoZSAqLworICAgICAgICAgICAgLyogY29ubmVjdCBtb2RlIGF1dG9kb3dubG9hZCBmb3IgdGhl IGtlcm1pdCBzZXJ2ZXIgdG8gdXNlIHdpdGggKi8KKyAgICAgICAgICAgIC8qIGEgcmVtb3RlbHkg ZXhlY3V0ZWQgc2NyaXB0IHdlIHNob3VsZCBiZSBhYmxlIHRvIHJldHVybiB0byAqLworICAgICAg ICAgICAgLyogY29ubmVjdCBtb2RlIG9uIHRoZSBmYWlsdXJlLiAgV2hhdCB3ZSByZWFsbHkgbmVl ZCB0byBkbyBpcyAqLworICAgICAgICAgICAgLyogcmVwb3J0IHRoZSBzdGF0dXMgb2YgdGhlIHRy YW5zZmVyIGFuZCB0aGVuIHJldHVybiB0byBDT05ORUNULiAqLworICAgICAgICAgICAgLyogSW4g dW5peCB0aGlzIHdvdWxkIHNpbXBseSBiZSBhIHByaW50ZigpLCBidXQgaW4gSzk1IGl0IGNvdWxk ICovCisgICAgICAgICAgICAvKiB1c2UgYSBwb3B1cCBkaWFsb2cgdG8gcmVwb3J0IHRoZSBzdGF0 dXMuIC0gSmVmZiAqLworCisjaWZuZGVmIE5PWEZFUgorICAgICAgICAgICAgZGVidWcoRjEwMSwi ZG9jb25lY3QgeGZlcnN0YXQiLCIiLHhmZXJzdGF0KTsKKyAgICAgICAgICAgIGlmIChhcGNhY3Rp dmUgPT0gQVBDX0xPQ0FMICYmICF4ZmVyc3RhdCAmJiBhZGxfZXJyICE9IDApIHsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJkb2NvbmVjdCBxdWl0IEFQQyBsb29wOiB4ZmVyc3RhdCIsIiIs eGZlcnN0YXQpOworICAgICAgICAgICAgICAgIGFwY2FjdGl2ZSA9IEFQQ19JTkFDVElWRTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8K KyNpZmRlZiBPUzIKKyAgICAgICAgICAgIG1zbGVlcCgyNTApOworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9jb25lY3QganVzdG9uZSA0IiwiIixqdXN0b25lKTsK KyAgICAgICAgICAgIHFzYXZlID0gcXVpZXQ7ICAgICAgICAgICAgICAvKiBEbyB0aGlzIGFnYWlu Li4uICovCisgICAgICAgICAgICBpZiAoIXF1aWV0ICYmIHEgPiAtMSkKKyAgICAgICAgICAgICAg cXVpZXQgPSBxOworI2lmZGVmIENLX0FVVE9ETAorICAgICAgICAgICAga3NidWZbMF0gPSBOVUw7 CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisjaWZkZWYgSUtTX09QVElPTgorI2lmZGVmIENLX0FV VE9ETAorICAgICAgICAgICAgaWYgKGlzX3RuICYmCisgICAgICAgICAgICAgICAgVEVMT1BUX01F KFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgICAgICAgICAgIVRFTE9QVF9TQihURUxPUFRfS0VS TUlUKS5rZXJtaXQubWVfc3RhcnQgJiYKKyAgICAgICAgICAgICAgICBhdXRvZGwKKyNpZmRlZiBD S19BUEMKKyAgICAgICAgICAgICAgICAmJiAhYXBjYWN0aXZlCisjZW5kaWYgLyogQ0tfQVBDICov CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgJiYgIXZpZXdvbmx5CisjZW5kaWYgLyogT1My ICovCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgdG5fc2lrcyhLRVJNSVRf U1RBUlQpOyAgLyogU2VuZCBLZXJtaXQtU2VydmVyIFN0YXJ0ICovCisgICAgICAgICAgICB9Cisj ZW5kaWYgLyogQ0tfQVVUT0RMICovCisjZW5kaWYgLyogSUtTX09QVElPTiAqLworI2lmbmRlZiBP UzIKKyAgICAgICAgICAgIHggPSBjb25lY3QoKTsgICAgICAgICAgICAgICAvKiBSZS1DT05ORUNU LiAqLworI2Vsc2UgLyogT1MyICovCisgICAgICAgICAgICB4ID0gY29uZWN0KDApOworICAgICAg ICAgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg ICAgIGRlYm9rID0gMTsKKyAgICAgICAgICAgIHF1aWV0ID0gcXNhdmU7CisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJkb2NvbmVjdCBqdXN0b25lIDUiLCIiLGp1c3RvbmUpOworI2lmZGVmIE5FVENP Tk4KKyAgICAgICAgICAgIGlmIChuZXR3b3JrICYmIHR0Y2hrKCkgPCAwKSB7CisgICAgICAgICAg ICAgICAgaWYgKHRuX2V4aXQgfHwgZXhpdG9uY2xvc2UpCisgICAgICAgICAgICAgICAgICBkb2V4 aXQoR09PRF9FWElULHhpdHN0YSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZk ZWYgT1MyT1JVTklYCisgICAgICAgICAgICAvKiBJZiBjb25uZWN0aW9uIGRyb3BwZWQgKi8KKyAg ICAgICAgICAgIGlmICh0dGNoaygpIDwgMCkgeworICAgICAgICAgICAgICAgIGNvbmNiKChjaGFy KWVzY2FwZSk7ICAgIC8qIFJlc3RvcmUgY29uc29sZS4gKi8KKyAgICAgICAgICAgICAgICBpZiAo ZXhpdG9uY2xvc2UpCisgICAgICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULHhpdHN0YSk7 CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisjZW5kaWYgLyogT1MyT1JVTklYICovCisgICAgICAgIH0gLyogTG9vcCBiYWNrIGZv ciBtb3JlLiAqLworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZuZGVmIE5PS1ZFUkJTCisgICAg ICAgIGlmICgoa2V5bWFjID4gMCkgJiYgKGtleW1hY3ggPiAtMSkpIHsgLyogRXhlY3V0aW5nIGEg a2V5Ym9hcmQgbWFjcm8/ICovCisgICAgICAgICAgICAvKiBTZXQgdXAgdGhlIG1hY3JvIGFuZCBy ZXR1cm4gKi8KKyAgICAgICAgICAgIC8qIERvIG5vdCBjbGVhciB0aGUga2V5bWFjIGZsYWcgKi8K KyNpZmRlZiBPUzIKKwkgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAgICAgICAgIHJldHVybihkb2RvKGtleW1hY3gsTlVMTCxDRl9LTUFDfGNtZHN0a1tj bWRsdmxdLmNjZmxncykpOworICAgICAgICB9CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyNpZmRl ZiBPUzIKKyAgICAgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2ZTsKKyAgICB9IC8qIGlmICghYXN5 bmMpICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS0NPTklOVEI0Q0IKKyAgICAvKiBU aGUgb3JkZXIgbWFrZXMgYSBkaWZmZXJlbmNlIGluIEhQLVVYIDguMDAuICovCisgICAgLyogVGhl IG90aGVyIG9yZGVyIG1ha2VzIGl0IHRoaW5rIGl0J3MgaW4gdGhlIGJhY2tncm91bmQgd2hlbiBp dCAqLworICAgIC8qIHJldHVybnMgZnJvbSBDT05ORUNUIChBcHIgMTk5OSkuICovCisgICAgc2V0 aW50KCk7CisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAgICAgLyogUmVzdG9y ZSBjb25zb2xlIGZvciBjb21tYW5kcyAqLworI2Vsc2UKKyAgICAvKiBUaGlzIGlzIGhvdyBpdCBo YXMgYWx3YXlzIGJlZW4gc28gYmV0dGVyIGxlYXZlIGl0ICovCisgICAgLyogdGhpcyB3YXkgZm9y IGFsbCBub24tSFAtVVgtOC4wMCBidWlsZHMuICovCisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsg ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xlIGZvciBjb21tYW5kcyAqLworICAgIHNl dGludCgpOworI2VuZGlmIC8qIENLQ09OSU5UQjRDQiAqLworI2lmZGVmIE9TMgorICAgIGlmICgh YXN5bmMpCisjZW5kaWYgLyogT1MyICovCisgICAgICB3aGF0ID0gV19DT01NQU5EOyAgICAgICAg ICAgICAgICAgLyogQmFjayBpbiBjb21tYW5kIG1vZGUuICovCisgICAgcmV0dXJuKHgpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KK30KKyNlbmRpZiAvKiBOT0xPQ0FMICov CisKKyNpZm5kZWYgTk9JQ1AKKyNpZmRlZiBDT01NRU5UCisvKgorICBJdCBzZWVtZWQgdGhhdCB0 aGlzIHdhcyBuZWVkZWQgZm9yIE9TLzIsIGluIHdoaWNoIFx2KGNtZGZpbGUpIGFuZCBvdGhlcgor ICBmaWxlLW9yaWVudGVkIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgY2FuIHJldHVybiBmaWxlbmFt ZXMgY29udGFpbmluZworICBiYWNrc2xhc2hlcywgd2hpY2ggYXJlIHN1YnNlcXVlbnRseSBpbnRl cnByZXRlZCBhcyBxdW90ZXMgcmF0aGVyIHRoYW4KKyAgZGlyZWN0b3J5IHNlcGFyYXRvcnMgKGUu Zy4gc2VlIGNvbW1lbnRlZCBzZWN0aW9uIGZvciBWTl9DTURGIGJlbG93KS4KKyAgQnV0IHRoZSBw cm9ibGVtIGNhbid0IGJlIGN1cmVkIGF0IHRoaXMgbGV2ZWwuICBFeGFtcGxlOgorCisgICAgdHlw ZSBcdihjbWRmaWxlKQorCisgIFdpdGhvdXQgZG91YmxpbmcsIHRoZSBmaWxlbmFtZSBpcyBwYXJz ZWQgY29ycmVjdGx5LCBidXQgdGhlbiB3aGVuIHBhc3NlZAorICB0byBVTklYICdjYXQnIHRocm91 Z2ggdGhlIHNoZWxsLCB0aGUgYmFja3NsYXNoIGlzIHJlbW92ZWQsIGFuZCB0aGVuIGNhdAorICBj YW4ndCBvcGVuIHRoZSBmaWxlLiAgV2l0aCBkb3VibGluZywgdGhlIGZpbGVuYW1lIGlzIG5vdCBw YXJzZWQgY29ycmVjdGx5CisgIGFuZCB0aGUgVFlQRSBjb21tYW5kIGZhaWxzIGltbWVkaWF0ZWx5 IHdpdGggYSAiZmlsZSBub3QgZm91bmQiIGVycm9yLgorKi8KKy8qCisgIFV0aWxpdHkgcm91dGlu ZSB0byBkb3VibGUgYWxsIGJhY2tzbGFzaGVzIGluIGEgc3RyaW5nLgorICBzMSBpcyBwb2ludGVy IHRvIHNvdXJjZSBzdHJpbmcsIHMyIGlzIHBvaW50ZXIgdG8gZGVzdGluYXRpb24gc3RyaW5nLAor ICBuIGlzIGxlbmd0aCBvZiBkZXN0aW5hdGlvbiBzdHJpbmcsIGJvdGggTlVMLXRlcm1pbmF0ZWQu CisgIFJldHVybnMgMCBpZiBPSywgLTEgaWYgbm90IE9LIChkZXN0aW5hdGlvbiBzdHJpbmcgdG9v IHNob3J0KS4KKyovCitpbnQKK2RibGJzKHMxLHMyLG4pIGNoYXIgKnMxLCAqczI7IGludCBuOyB7 CisgICAgaW50IGkgPSAwOworICAgIHdoaWxlICgqczEpIHsKKyAgICAgICAgaWYgKCpzMSA9PSAn XFwnKSB7CisgICAgICAgICAgICBpZiAoKytpID4gbikgcmV0dXJuKC0xKTsKKyAgICAgICAgICAg ICpzMisrID0gJ1xcJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoKytpID4gbikgcmV0dXJuKC0x KTsKKyAgICAgICAgKnMyKysgPSAqczErKzsKKyAgICB9CisgICAgKnMyID0gTlVMOworICAgIHJl dHVybigwKTsKK30KKyNlbmRpZiAvKiBDT01NRU5UICovCisKK2NoYXIgKgorZ21kbXR5cCgpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBtb2RlbSB0eXBlICovCisjaWZuZGVm IE5PRElBTAorICAgIGludCBpLCB4OworCisgICAgZGVidWcoRjExMSwiZ21kbXR5cCIsIm1kbXR5 cCIsbWRtdHlwKTsKKyAgICBkZWJ1ZyhGMTExLCJnbWRtdHlwIiwibWRtc2F2IixtZG1zYXYpOwor CisgICAgeCA9IG1kbXR5cDsKKyAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBJbiBjYXNlIG9mIG5ldHdvcmsgZGlhbGluZyAqLworICAgICAgeCA9IG1kbXNhdjsKKyAg ICBpZiAoeCA8IDEpCisgICAgICByZXR1cm4oIm5vbmUiKTsKKyAgICBlbHNlCisgICAgICBmb3Ig KGkgPSAwOyBpIDwgbm1kbTsgaSsrKQorICAgICAgICBpZiAoKG1kbXRhYltpXS5rd3ZhbCA9PSB4 KSAmJiAobWRtdGFiW2ldLmZsZ3MgPT0gMCkpCisgICAgICAgICAgcmV0dXJuKG1kbXRhYltpXS5r d2QpOworI2VuZGlmIC8qIE5PRElBTCAqLworICAgIHJldHVybigibm9uZSIpOworfQorCisjaWZu ZGVmIE5PWE1JVAorI2lmbmRlZiBOT0xPQ0FMCisvKiAgVCBSIEEgTiBTIE0gSSBUICAtLSAgUmF3 IHVwbG9hZCAgKi8KKworLyogIE9iZXkgY3VycmVudCBsaW5lLCBkdXBsZXgsIHBhcml0eSwgZmxv dywgdGV4dC9iaW5hcnkgc2V0dGluZ3MuICovCisvKiAgUmV0dXJucyAwIHVwb24gYXBwYXJlbnQg c3VjY2VzcywgMSBvbiBvYnZpb3VzIGZhaWx1cmUuICAqLworCisvKioqCisgVGhpbmdzIHRvIGFk ZDoKKyAuIE1ha2UgYm90aCB0ZXh0IGFuZCBiaW5hcnkgbW9kZSBvYmV5IHNldCBmaWxlIGJ5dGVz aXplLgorIC4gTWF5YmUgYWxsb3cgdXNlciB0byBzcGVjaWZ5IHRlcm1pbmF0b3JzIG90aGVyIHRo YW4gQ1I/CisgLiBNYXliZSBhbGxvdyB1c2VyIHRvIHNwZWNpZnkgcHJvbXB0cyBvdGhlciB0aGFu IHNpbmdsZSBjaGFyYWN0ZXJzPworIC4gTWFrZSBTVEFUSVNUSUNTIGFsc28gd29yayBmb3IgVFJB TlNNSVQuCisgLiBJZiBUUkFOU01JVCBpcyBkb25lIHdpdGhvdXQgZWNobywgbWFrZSBzb21lIGtp bmQgb2YgKG9wdGlvbmFsKSBkaXNwbGF5LgorIC4gTWFrZSB0aGUgc2FtZSBvcHRpbWl6YXRpb24g Zm9yIGJpbmFyeS1tb2RlIHRyYW5zbWl0IHRoYXQgd2FzIGRvbmUgZm9yCisgICB0ZXh0LW1vZGUg KGluIHRoZSBuby1lY2hvIC8gbm8tcHJvbXB0IC8gbm8tcGF1c2UgY2FzZSkuCisqKiovCisKKy8q ICBUIFIgQSBOIFMgTSBJIFQgIC0tICBSYXcgdXBsb2FkICAqLworCisvKiAgcyBpcyB0aGUgZmls ZW5hbWUsIHQgaXMgdGhlIHR1cm5hcm91bmQgKHByb21wdCkgY2hhcmFjdGVyICAqLworCisvKgor ICBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJ1ZmZlci4KKyAgTXVzdCBiZSBsZXNz IHRoYW4gTElOQlVGU0laCisqLworI2lmZGVmIE9TMgorI2RlZmluZSBYTUJVRlMgNDA5NiAgICAg ICAgICAgICAgICAgICAgIC8qIEZvciBjb21wYXRpYmlsaXR5IHdpdGggWFlabW9kZW0gKi8KKyNl bHNlIC8qIE9TMiAqLworI2RlZmluZSBYTUJVRlMgMTAyNAorI2VuZGlmIC8qIE9TMiAqLworCisj aWZkZWYgVE5DT0RFCisjaWZuZGVmIElBQworI2RlZmluZSBJQUMgMjU1CisjZW5kaWYgLyogSUFD ICovCisjZW5kaWYgLyogVE5DT0RFICovCisKKyNkZWZpbmUgT1VUWEJVRlNJWiAxNQorc3RhdGlj IENIQVIgaW54YnVmW09VVFhCVUZTSVorMV07ICAgICAgIC8qIEhvc3QtdG8tc2NyZWVuIGV4cGFu c2lvbiBidWZmZXIgKi8KK3N0YXRpYyBpbnQgaW54Y291bnQgPSAwOyAgICAgICAgICAgICAgICAv KiBhbmQgY291bnQgKi8KK3N0YXRpYyBDSEFSIG91dHhidWZbT1VUWEJVRlNJWisxXTsgICAgICAv KiBLZXlib2FyZC10by1ob3N0IGV4cGFuc2lvbiBidWYgKi8KK3N0YXRpYyBpbnQgb3V0eGNvdW50 ID0gMDsgICAgICAgICAgICAgICAvKiBhbmQgY291bnQgKi8KKworLyogIFQgUiBBIE4gUyBNIEkg VCAgLS0gIFVuZ3VhcmRlZCBub24tcHJvdG9jb2wgZmlsZSB0cmFuc21pc3Npb24gICovCisvKgor ICBDYWxsIHdpdGg6CisgICAgY2hhciAqIHM6ICAgTmFtZSBvZiBmaWxlIHRvIHRyYW5zbWl0Lgor ICAgIGNoYXIgdDogICAgIFR1cm5hcm91bmQgY2hhciBmb3IgdGV4dC1tb2RlIHRyYW5zbWlzc2lv biAobm9ybWFsbHkgTEYpLgorICAgIGludCB4bGF0ZTogIG5vbnplcm8gPSBjaGFyc2V0IHRyYW5z bGF0aW9uIGZvciB0ZXh0LW1vZGUgeGZlciwgMCA9IHNraXAuCisgICAgaW50IGJpbmFyeTogbm9u emVybyA9IHRyYW5zbWl0IGluIGJpbmFyeSBtb2RlLCAwID0gaW4gdGV4dCBtb2RlLgorKi8KKyNk ZWZpbmUgWEJCVUZTSVogNTA4CQkJLyogRm9yIGJpbmFyeSBibGFzdGluZyAqLworc3RhdGljIENI QVIgeGJidWZbWEJCVUZTSVorNF07CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit0cmFuc21pdChj aGFyICogcywgY2hhciB0LCBpbnQgeGxhdGUsIGludCBiaW5hcnksIGludCB4eGVjaG8pCisjZWxz ZQordHJhbnNtaXQocyx0LHhsYXRlLGJpbmFyeSx4eGVjaG8pIGNoYXIgKnM7IGNoYXIgdDsgaW50 IHhsYXRlLCBiaW5hcnksIHh4ZWNobzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdHJhbnNt aXQgKi8geworI2lmZGVmIE1BQworICAgIGV4dGVybiBjaGFyIHNzdGF0ZTsKKyAgICBpbnQgY291 bnQgPSAxMDA7CisjZWxzZQorICAgIGludCBjb3VudCA9IDA7CisjaWZkZWYgT1MyCisjaWZkZWYg TlQKKyAgICBTSUdUWVAgKCogb2xkc2lnKShpbnQpOyAgICAgICAgICAgICAvKiBGb3Igc2F2aW5n IG9sZCBpbnRlcnJ1cHQgdHJhcC4gKi8KKyNlbHNlIC8qIE5UICovCisgICAgU0lHVFlQICgqIHZv bGF0aWxlIG9sZHNpZykoaW50KTsKKyNlbmRpZiAvKiBOVCAqLworCisjZWxzZSAvKiBPUzIgKi8K KyAgICBTSUdUWVAgKCogb2xkc2lnKSgpOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE1B QyAqLworICAgIGludCBlb2YgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBG aWxlIGZsYWcgKi8KKyAgICBpbnQgZW9sID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBF bmQgb2YgTGluZSBmbGFnICovCisgICAgaW50IHJjID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUmV0dXJuIGNvZGUuIDA9ZmFpbCwgMT1zdWNjZWVkLiAqLworICAgIGludCBteWZsb3c7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGNvcHkgb2YgZ2xvYmFsIGZsb3cuLi4g Ki8KKyAgICBpbnQgaXNfdG4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBEbyBUZWxuZXQg bmVnb3RpYXRpb25zICovCisgICAgaW50IHhidWZzaXogPSBYTUJVRlM7ICAgICAgICAgICAgICAg LyogU2l6ZSBvZiBUUkFOU01JVCBidWZmZXIgKi8KKyAgICBpbnQgeCwgeSwgYywgaTsgICAgICAg ICAgICAgICAgICAgICAvKiBJbnQgd29ya2Vycy4uLiAqLworICAgIGludCBjb250cm9sID0gMDsg ICAgICAgICAgICAgICAgICAgIC8qIEVjaG8gbG9vcCBjb250cm9sICovCisgICAgbG9uZyBuYnl0 ZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBieXRlIGNvdW50ICovCisgICAgbG9u ZyB6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9uZyB3b3JrZXIgKi8KKyAgICBj aGFyICpwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyICogd29ya2VyICovCisK KyNpZmRlZiBQSVBFU0VORAorICAgIGV4dGVybiBpbnQgcGlwZXNlbmQ7CisjZW5kaWYgLyogUElQ RVNFTkQgKi8KKworI2lmbmRlZiBOT0NTRVRTCisgICAgaW50IHRjcyA9IFRDX1RSQU5TUDsgICAg ICAgICAgICAgICAgLyogSW50ZXJtZWRpYXRlICh4ZmVyKSBjaGFyIHNldCAqLworICAgIGludCBs YW5nc3YgPSBMX1VTQVNDSUk7ICAgICAgICAgICAgIC8qIFNhdmUgY3VycmVudCBsYW5ndWFnZSAq LworICAgIGludCB1bmljb2RlID0gMDsKKyAgICBpbnQgdGNzc2l6ZSA9IDA7CisKKyNpZmRlZiBD S19BTlNJQyAvKiBBTlNJIEMgcHJvdG90eXBlcy4uLiAqLworICAgIENIQVIgKCpzeG8pKENIQVIp OworICAgIENIQVIgKCpyeG8pKENIQVIpOworICAgIENIQVIgKCpzeGkpKENIQVIpOworICAgIENI QVIgKCpyeGkpKENIQVIpOworI2Vsc2UgLyogTm90IEFOU0kgQy4uLiAqLworICAgIENIQVIgKCpz eG8pKCk7CisgICAgQ0hBUiAoKnJ4bykoKTsKKyAgICBDSEFSICgqc3hpKSgpOworICAgIENIQVIg KCpyeGkpKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNpZmRlZiBVTklDT0RFCisgICAgdW5p b24gY2tfc2hvcnQgdWM7CisgICAgaW50IGJvbW9yZGVyID0gMDsKKyNpZmRlZiBDS19BTlNJQwor ICAgIGV4dGVybiBpbnQgKCp4bF91ZmNbTUFYRkNTRVRTKzFdKShVU0hPUlQpOyAgLyogVW5pY29k ZSB0byBGQ1MgKi8KKyAgICBleHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysxXSkoQ0hB Uik7IC8qIEZDUyB0byBVbmljb2RlICovCisgICAgZXh0ZXJuIGludCAoKnh1ZikoVVNIT1JUKTsK KyAgICBleHRlcm4gVVNIT1JUICgqeGZ1KShDSEFSKTsKKyNlbHNlCisgICAgZXh0ZXJuIGludCAo KnhsX3VmY1tNQVhGQ1NFVFMrMV0pKCk7CisgICAgZXh0ZXJuIFVTSE9SVCAoKnhsX2ZjdVtNQVhG Q1NFVFMrMV0pKCk7CisgICAgZXh0ZXJuIGludCAoKnh1ZikoKTsKKyAgICBleHRlcm4gVVNIT1JU ICgqeGZ1KSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogVU5JQ09ERSAqLwor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworICAgIGRlYnVnKEYxMDEsInhtaXQgdCIsIiIsdCk7Cisg ICAgZGVidWcoRjEwMSwieG1pdCB4bGF0ZSIsIiIseGxhdGUpOworICAgIGRlYnVnKEYxMDEsInht aXQgYmluYXJ5IiwiIixiaW5hcnkpOworCisjaWZkZWYgUElQRVNFTkQKKyAgICBpZiAocGlwZXNl bmQpIHsKKyAgICAgICAgaWYgKG5vcHVzaCkgcmV0dXJuKC0yKTsKKyAgICAgICAgaWYgKHp4Y21k KFpJRklMRSxzKSA8IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IHN0YXJ0IGNvbW1h bmQ6ICVzXG4iLHMpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgfSBl bHNlCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyAgICBpZiAoem9wZW5pKFpJRklMRSxzKSA9PSAw KSB7ICAgICAgICAvKiBPcGVuIHRoZSBmaWxlIHRvIGJlIHRyYW5zbWl0dGVkICovCisgICAgICAg IHByaW50ZigiP0Nhbid0IG9wZW4gZmlsZSAlc1xuIixzKTsKKyAgICAgICAgcmV0dXJuKDApOwor ICAgIH0KKyAgICB4ID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVuIHRo ZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgKi8KKyAgICBpZiAodHRvcGVuKHR0bmFtZSwmeCxtZG10 eXAsY2R0aW1vKSA8IDApIHsgIC8qIChubyBoYXJtIGlmIGFscmVhZHkgb3BlbikgKi8KKyAgICAg ICAgcHJpbnRmKCJDYW4ndCBvcGVuIGRldmljZSAlc1xuIix0dG5hbWUpOworICAgICAgICByZXR1 cm4oMCk7CisgICAgfQorICAgIHp6ID0geCA/IHNwZWVkIDogLTFMOworICAgIGlmIChiaW5hcnkp IHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEJpbmFyeSBmaWxlIHRyYW5zbWlzc2lvbiAqLwor ICAgICAgICBteWZsb3cgPSAoZmxvdyA9PSBGTE9fWE9OWCkgPyBGTE9fTk9ORSA6IGZsb3c7CisK KyAgICAgICAgaWYgKHR0dnQoenosbXlmbG93KSA8IDApIHsgICAgICAvKiBTbyBubyBYb24vWG9m ZiEgKi8KKyAgICAgICAgICAgIHByaW50ZigiQ2FuJ3QgY29uZGl0aW9uIGxpbmVcbiIpOworICAg ICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg KHR0cGt0KHp6LGZsb3cscGFyaXR5KSA8IDApIHsgLyogUHV0IHRoZSBsaW5lIGluICJwYWNrZXQg bW9kZSIgKi8KKyAgICAgICAgICAgIHByaW50ZigiQ2FuJ3QgY29uZGl0aW9uIGxpbmVcbiIpOyAv KiBzbyBYb24vWG9mZiB3aWxsIHdvcmssIGV0Yy4gKi8KKyAgICAgICAgICAgIHJldHVybigwKTsK KyAgICAgICAgfQorICAgIH0KKyAgICBpc190biA9CisjaWZkZWYgVE5DT0RFCisgICAgICAobG9j YWwgJiYgbmV0d29yayAmJiBJU19URUxORVQoKSkgfHwgKCFsb2NhbCAmJiBzc3RlbG5ldCkKKyNl bHNlCisgICAgICAgIDAKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAgICAgICA7CisKKyNpZm5k ZWYgTk9DU0VUUworLyogU2V0IHVwIGNoYXJhY3RlciBzZXQgdHJhbnNsYXRpb25zICovCisKKyAg ICB0Y3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAiVHJhbnNmZXIiIG9yICJP dGhlciIgY2hhcnNldCAqLworICAgIHN4byA9IHJ4byA9IE5VTEw7ICAgICAgICAgICAgICAgICAg IC8qIEluaXRpYWxpemUgYnl0ZS10by1ieXRlIGZ1bmN0aW9ucyAqLworICAgIHN4aSA9IHJ4aSA9 IE5VTEw7CisgICAgdW5pY29kZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1l IFVuaWNvZGUgd29uJ3QgYmUgaW52b2x2ZWQgKi8KKyAgICBpZiAoIWJpbmFyeSAmJiB4bGF0ZSkg eyAgICAgICAgICAgICAvKiBTZXQgdXAgY2hhcnNldCB0cmFuc2xhdGlvbnMgKi8KKy8qCisgIElu IHRoZSBTRU5ESU5HIGRpcmVjdGlvbiwgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSB0aGUgbG9jYWwg ZmlsZSdzCisgIGNoYXJhY3Rlci1zZXQgKGZjaGFyc2V0KSB0byB0aGUgcmVtb3RlIHRlcm1pbmFs IGNoYXJzZXQgKHRjc3IpLiAgSW4gdGhlCisgIFJFQ0VJVklORyBkaXJlY3Rpb24gKGVjaG9pbmcp IHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gdGhlIHJlbW90ZSBlbmQgb2YgdGhlCisgIHRlcm1pbmFs IGNoYXJzZXQgKHRjc3IpIHRvIGl0cyBsb2NhbCBlbmQgKHRjc2wpLCB3aGljaCBpcyBub3QgbmVj ZXNzYXJpbHkKKyAgdGhlIHNhbWUgYXMgdGhlIGZpbGUgY2hhcmFjdGVyLXNldC4gIEVzcGVjaWFs bHkgd2hlbiB0aGUgZmlsZSBjaGFyYWN0ZXIKKyAgc2V0IGlzIFVDUy0yLCB3aGljaCBpcyBub3Qg YSB2YWxpZCB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0LiAgVGhlIHZhcmlvdXMKKyAgY29tYmluYXRp b25zIGFyZSByZXByZXNlbnRlZCBpbiB0aGlzIHRhYmxlOgorCisgIEZDUyA9IEZpbGUgQ2hhcmFj dGVyIFNldAorICBSQ1MgPSBSZW1vdGUgVGVybWluYWwgQ2hhcmFjdGVyIFNldAorICBDQ1MgPSBD b25zb2xlIChMb2NhbCBUZXJtaW5hbCkgQ2hhcmFjdGVyIFNldAorCisgICA4ICAgNCAgIDIgICAx CisgIEZDUyBGQ1MgUkNTIENDUworICBVQ1MgVVRGIFVURiBVVEYKKyAgIDAgICAwICAgMCAgIDAg ICA9ICAgMCAgID0gICBObyB0cmFuc2xhdGlvbgorICAgMCAgIDAgICAwICAgMSAgID0gICAxICAg PSAgIEZDUyAtPiBSQ1MsIEVjaG8gUkNTIC0+IFVURgorICAgMCAgIDAgICAxICAgMCAgID0gICAy ICAgPSAgIEZDUyAtPiBVVEYsIEVjaG8gVVRGIC0+IENDUworICAgMCAgIDAgICAxICAgMSAgID0g ICAzICAgPSAgIEZDUyAtPiBVVEYsIEVjaG8gbm8gdHJhbnNsYXRpb24KKworICAgMCAgIDEgICAw ICAgMCAgID0gICA0ICAgPSAgIFVURiAtPiBSQ1MsIEVjaG8gUkNTIC0+IENDUworICAgMCAgIDEg ICAwICAgMSAgID0gICA1ICAgPSAgIFVURiAtPiBSQ1MsIEVjaG8gUkNTIC0+IFVURgorICAgMCAg IDEgICAxICAgMCAgID0gICA2ICAgPSAgIFVURiAtPiBVVEYsIEVjaG8gVVRGIC0+IENDUworICAg MCAgIDEgICAxICAgMSAgID0gICA3ICAgPSAgIE5vIHRyYW5zbGF0aW9uCisKKyAgIDEgICAwICAg MCAgIDAgICA9ICAgOCAgID0gICBVQ1MgLT4gUkNTLCBFY2hvIFJDUyAtPiBDQ1MKKyAgIDEgICAw ICAgMCAgIDEgICA9ICAgOSAgID0gICBVQ1MgLT4gUkNTLCBFY2hvIFJDUyAtPiBVVEYKKyAgIDEg ICAwICAgMSAgIDAgICA9ICAxMCAgID0gICBVQ1MgLT4gVVRGLCBFY2hvIFVURiAtPiBDQ1MKKyAg IDEgICAwICAgMSAgIDEgICA9ICAxMSAgID0gICBVQ1MgLT4gVVRGLCBFY2hvIG5vIHRyYW5zbGF0 aW9uCisqLworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgeGZ1ID0gTlVMTDsgICAgICAgICAgICAg ICAgICAgICAvKiBVbmljb2RlIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLworICAgICAgICB4dWYg PSBOVUxMOworICAgICAgICBib21vcmRlciA9IHVjc29yZGVyOyAgICAgICAgICAgIC8qIFVDUy0y IGJ5dGUgb3JkZXIgKi8KKworICAgICAgICBpZiAoZmNoYXJzZXQgPT0gRkNfVUNTMikgICAgICAg IC8qIEZpbGUgY2hhcnNldCBpcyBVQ1MtMiAqLworICAgICAgICAgIHVuaWNvZGUgfD0gODsKKyAg ICAgICAgZWxzZSBpZiAoZmNoYXJzZXQgPT0gRkNfVVRGOCkgICAvKiBGaWxlIGNoYXJzZXQgaXMg VVRGLTggKi8KKyAgICAgICAgICB1bmljb2RlIHw9IDQ7CisgICAgICAgIGlmICh0Y3NyID09IEZD X1VURjgpICAgICAgICAgICAgLyogUmVtb3RlIHRlcm0gY2hhcnNldCBpcyBVVEYtOCAqLworICAg ICAgICAgIHVuaWNvZGUgfD0gMjsKKyAgICAgICAgaWYgKHRjc2wgPT0gRkNfVVRGOCkgICAgICAg ICAgICAvKiBMb2NhbCB0ZXJtIGNoYXJzZXQgaXMgVVRGLTggKi8KKyAgICAgICAgICB1bmljb2Rl IHw9IDE7CisjZW5kaWYgLyogVU5JQ09ERSAqLworLyoKKyAgV2hlbiBVbmljb2RlIG5vdCBpbnZv bHZlZCAtLSBUQ1MgaXMgdGhlIGludGVybWVkaWF0ZSAoeGZlcikgc2V0LCBhbmQ6CisgIHN4byA9 IEZpbGUtdG8tSW50ZXJtZWRpYXRlIGNoYXJzZXQgZnVuY3Rpb24KKyAgcnhvID0gSW50ZXJtZWRp YXRlLXRvLVJlbW90ZS1UZXJtaW5hbCBjaGFyc2V0IGZ1bmN0aW9uCisgIHN4aSA9IFJlbW90ZS1U ZXJtaW5hbC10by1JbnRlcm1lZGlhdGUKKyAgcnhpID0gSW50ZXJtZWRpYXRlLXRvLUxvY2FsLVRl cm1pbmFsCisqLworICAgICAgICB0Y3MgPSBnZXR0Y3ModGNzcixmY2hhcnNldCk7ICAgIC8qIEdl dCBpbnRlcm1lZGlhdGUgc2V0LiAqLworICAgICAgICBzeG8gPSB4bHNbdGNzXVtmY2hhcnNldF07 ICAgICAgIC8qIHRyYW5zbGF0aW9uIGZ1bmN0aW9uICovCisgICAgICAgIHJ4byA9IHhsclt0Y3Nd W3Rjc3JdOyAgICAgICAgICAgLyogcG9pbnRlcnMgZm9yIG91dHB1dCBmdW5jdGlvbnMgKi8KKyAg ICAgICAgc3hpID0geGxzW3Rjc11bdGNzcl07ICAgICAgICAgICAvKiBhbmQgZm9yIGlucHV0IGZ1 bmN0aW9ucy4gKi8KKyAgICAgICAgcnhpID0geGxyW3Rjc11bdGNzbF07CisvKgorICBBdCB0aGlz IHBvaW50IHdlIGhhdmUgdW5pY29kZSBub256ZXJvIGlmIFVuaWNvZGUgaXMgaW52b2x2ZWQgaW4g dGhlCisgIGNvbnZlcnNpb24sIGFuZCB0byAwIGlmIGl0IGlzIG5vdC4KKyAgVGhlIGZvbGxvd2lu ZyBpcyB0byBwcmV2ZW50IHVzZSBvZiB6bXN0dWZmKCkgYW5kIHpkc3R1ZmYoKSBieSB0cmFuc2xh dGlvbgorICBmdW5jdGlvbnMgKHN0dWZmaW5nIHdvcmtzIHdpdGggZmlsZSBpL28sIG5vdCB3aXRo IGNvbW11bmljYXRpb24gaS9vKS4KKyovCisgICAgICAgIGxhbmdzdiA9IGxhbmd1YWdlOyAgICAg ICAgICAgICAgLyogU2F2ZSBjdXJyZW50IFNFVCBMQU5HVUFHRSAqLworICAgICAgICBsYW5ndWFn ZSA9IExfVVNBU0NJSTsgICAgICAgICAgIC8qIE5vIGxhbmd1YWdlLXNwZWNpZmljIHRyYW5zbGF0 aW9ucyAqLworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBpID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBCZWdpbm5pbmcgb2YgYnVmZmVyLiAqLworI2lmbmRl ZiBNQUMKKyNpZm5kZWYgQU1JR0EKKyAgICBvbGRzaWcgPSBzaWduYWwoU0lHSU5ULCB0cnRyYXAp OyAgICAvKiBTYXZlIGN1cnJlbnQgaW50ZXJydXB0IHRyYXAuICovCisjZW5kaWYgLyogQU1JR0Eg Ki8KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICB0cl9pbnQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBIYXZlIG5vdCBiZWVuIGludGVycnVwdGVkICh5ZXQpLiAqLworICAgIHJjID0gMTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlIHByZXN1bWVkIGdvb2Qu ICovCisjaWZkZWYgVk1TCisgICAgY29ucmVzKCk7CisjZW5kaWYgLyogVk1TICovCisKKyNpZm5k ZWYgTk9DU0VUUworICAgIGRlYnVnKEYxMDEsIlhNSVQgdW5pY29kZSIsIiIsdW5pY29kZSk7Cisj aWZkZWYgVU5JQ09ERQorICAgIGRlYnVnKEYxMDEsIlhNSVQgYm9tb3JkZXIiLCIiLGJvbW9yZGVy KTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAgYyA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbCBjb25kaXRpb24gKi8K KyAgICB3aGlsZSAoYyA+IC0xICYmICFlb2YpIHsgICAgICAgICAgICAvKiBMb29wIGZvciBhbGwg Y2hhcmFjdGVycyBpbiBmaWxlICovCisgICAgICAgIGVvbCA9IDA7CisjaWZkZWYgTUFDCisgICAg ICAgIC8qCisgICAgICAgICAqIEl0IGlzIGV4cGVuc2l2ZSB0byBydW4gdGhlIG1pbmlwYXJzZXIg c28gZG9uJ3QgZG8gaXQgZm9yCisgICAgICAgICAqIGV2ZXJ5IGNoYXJhY3Rlci4KKyAgICAgICAg ICovCisgICAgICAgIGlmICgtLWNvdW50IDwgMCkgeworICAgICAgICAgICAgY291bnQgPSAxMDA7 CisgICAgICAgICAgICBtaW5pcGFyc2VyKDEpOworICAgICAgICAgICAgaWYgKHNzdGF0ZSA9PSAn YScpIHsKKyAgICAgICAgICAgICAgICBzc3RhdGUgPSAnXDAnOworICAgICAgICAgICAgICAgIGdv dG8geG1pdGZhaWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbHNlIC8qIE5vdCBNQUMg Ki8KKyAgICAgICAgaWYgKHRyX2ludCkgeyAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRl ZD8gKi8KKyAgICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAvKiBQcmludCBt ZXNzYWdlICovCisgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOworICAgICAgICB9CisjZW5kaWYg LyogTUFDICovCisgICAgICAgIGMgPSB6bWluY2hhcigpOyAgICAgICAgICAgICAgICAgLyogR2V0 IGEgZmlsZSBjaGFyYWN0ZXIgKi8KKyNpZmRlZiBDT01NRU5UCisvKiB0b28gbXVjaCAqLworI2lm ZGVmIERFQlVHCisgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAgIGlmIChjIDwgMCkK KyAgICAgICAgICAgICAgZGVidWcoRjEwMSwiWE1JVCB6bWluY2hhciIsIiIsYyk7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgIGRlYnVnKEYwMDAsIlhNSVQgem1pbmNoYXIiLCIiLGMp OworICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgICAgIGlmIChjIDwgLTEpIHsgICAgICAgICAgICAgICAgICAgLyogT3RoZXIgZXJyb3IgKi8K KyAgICAgICAgICAgIHByaW50ZigiP1RSQU5TTUlUIGZpbGUgcmVhZCBlcnJvcjogJXNcbiIsY2tf ZXJyc3RyKCkpOworICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKKyAgICAgICAgfSBlbHNlIGlm IChjID4gLTEpIHsKKyAgICAgICAgICAgIG5ieXRlcysrOworICAgICAgICAgICAgYyAmPSBmbWFz azsgICAgICAgICAgICAgICAgIC8qIEFwcGx5IFNFVCBGSUxFIEJZVEVTSVpFIG1hc2sgKi8KKyAg ICAgICAgfSBlbHNlIGlmIChjID09IC0xKSB7CisgICAgICAgICAgICBlb2YgPSAxOworICAgICAg ICAgICAgZGVidWcoRjEwMSwiWE1JVCBlb2YiLCIiLGVvZik7CisgICAgICAgIH0KKyAgICAgICAg aWYgKGJpbmFyeSkgeyAgICAgICAgICAgICAgICAgICAvKiBCaW5hcnkuLi4gKi8KKyAgICAgICAg ICAgIGlmIChjID09IC0xKSB7ICAgICAgICAgICAgICAvKiBJZiBFT0YgKi8KKyAgICAgICAgICAg ICAgICByYyA9IDE7ICAgICAgICAgICAgICAgICAvKiBTdWNjZXNzICovCisgICAgICAgICAgICAg ICAgZW9mID0gMTsKKyAgICAgICAgICAgICAgICBnb3RvIHhtaXRleGl0OyAgICAgICAgICAvKiBE b25lICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXhtaXR3ICYmICF4eGVjaG8p IHsgICAgLyogU3BlY2lhbCAiYmxhc3QiIG1vZGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoY291 bnQgPT0gWEJCVUZTSVopIHsgLyogRmlsZSBpbnB1dCBidWZmZXIgZnVsbC4uLiAqLworICAgICAg ICAgICAgICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBlcnJubyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gdHRvbCh4YmJ1Zixjb3Vu dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IDApIHsgICAgLyogdHJ5IHRvIHNl bmQgaXQuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/VFJBTlNNSVQg b3V0cHV0IGVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2tfZXJyc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlhN SVQgYmluYXJ5IHR0b2wgZXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNrX2VycnN0cigpLGVycm5vKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA8IDApIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgY291bnQgLT0geTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIHhiYnVmW2NvdW50KytdID0gYzsKKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAgICAg ICBpZiAoYyA9PSBJQUMgJiYgaXNfdG4pICAvKiBUZWxuZXQgSUFDICovCisgICAgICAgICAgICAg ICAgICB4YmJ1Zltjb3VudCsrXSA9IElBQzsgLyogbXVzdCBiZSBkb3VibGVkICovCisjZW5kaWYg LyogVE5DT0RFICovCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAodHRvYyhkb3BhcigoY2hhcikgYykpIDwgMCkgeyAvKiBlbHNlIGp1c3Qg c2VuZCB0aGUgY2hhciAqLworICAgICAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IHRyYW5zbWl0 IGNoYXJhY3RlclxuIik7CisgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKKyAgICAgICAg ICAgIH0KKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAgIGlmIChjID09IElBQyAmJiBpc190bikg ICAgICAvKiBRdW90ZSBUZWxuZXQgSUFDICovCisgICAgICAgICAgICAgIHR0b2MoKGNoYXIpSUFD KTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworICAgICAgICAgICAgaWYgKHhtaXR3KSAgICAgICAg ICAgICAgICAgIC8qIFBhdXNlIGlmIHJlcXVlc3RlZCAqLworICAgICAgICAgICAgICBtc2xlZXAo eG1pdHcpOworCisgICAgICAgICAgICBpZiAoeHhlY2hvKSB7ICAgICAgICAgICAgICAgLyogU0VU IFRSQU5TTUlUIEVDSE8gT04/ICovCisgICAgICAgICAgICAgICAgaWYgKGR1cGxleCkgeyAgICAg ICAgICAgLyogWWVzLCBmb3IgaGFsZiBkdXBsZXggKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVm IE9TMgorICAgICAgICAgICAgICAgICAgICAvKiBFY2hvIHRvIGVtdWxhdG9yICovCisgICAgICAg ICAgICAgICAgICAgIHNjcmlwdHdydGJ1ZigoVVNIT1JUKShjICYgY21kbXNrKSk7CisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgICAgICAgICBpZiAo Y29ub2MoKGNoYXIpKGMgJiBjbWRtc2spKSA8IDApIC8qIGVjaG8gbG9jYWxseS4gKi8KKyAgICAg ICAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgIC8qIEZvciBmdWxsIGR1cGxleCwgKi8KKyAgICAgICAgICAgICAgICAg ICAgaW50IGksIG47ICAgICAgICAgICAvKiBkaXNwbGF5IHdoYXRldmVyIGlzIHRoZXJlLiAqLwor ICAgICAgICAgICAgICAgICAgICBuID0gdHRjaGsoKTsgICAgICAgIC8qIFNlZSBob3cgbWFueSBj aGFycyBhcmUgd2FpdGluZyAqLworICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDApIHsgICAg ICAgIC8qIENvbm5lY3Rpb24gZHJvcHBlZD8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiP0Nvbm5lY3Rpb24gbG9zdFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHhtaXRmYWlsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBuOyBpKyspIHsgLyogUmVhZCBhbmQgZWNobyB0aGF0IG1hbnkuICovCisg ICAgICAgICAgICAgICAgICAgICAgICB4ID0gdHRpbmMoeG1pdHQpOyAvKiBUaW1lZCByZWFkIGp1 c3QgaW4gY2FzZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gLTEpIHsgICAv KiBJZiBubyB0aW1lb3V0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcml0 eSkgeCAmPSAweDdmOyAvKiBkaXNwbGF5IHRoZSBjaGFyLCAqLworI2lmbmRlZiBOT0xPQ0FMCisj aWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRWNobyB0byBlbXVsYXRv ciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdHdydGJ1ZigoVVNIT1JUKXgp OworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoY29ub2MoKGNoYXIpKHggJiBjbWRtc2spKSA8IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/T3V0cHV0IGVycm9yXG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHgg PT0gLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNvbm5lY3Rpb24g Y2xvc2VkLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDEpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7CisgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlc3Npb24gTGltaXQgZXhj ZWVkZWQgLSBjbG9zaW5nIGNvbm5lY3Rpb24uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDEpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8geG1pdGZhaWw7CisgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Nv bW11bmljYXRpb25zIGVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHhtaXRmYWlsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHR0Zmx1aSgpOyAgICAg ICAgICAgIC8qIE5vdCBlY2hvaW5nLCBqdXN0IGZsdXNoIGlucHV0LiAqLworCisgICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBtb2RlLCBsaW5lIGF0IGEgdGlt ZS4gKi8KKyNpZmRlZiBVTklDT0RFCisgICAgICAgICAgICBpZiAoZmNoYXJzZXQgPT0gRkNfVUNT MiAmJiB4bGF0ZSkgeyAvKiBTcGVjaWFsIGZvciBVQ1MtMiAqLworICAgICAgICAgICAgICAgIGNo YXIgeGJ1Zls4XTsKKyAgICAgICAgICAgICAgICB4ID0gMSAtIChuYnl0ZXMgJiAxKTsgICAvKiBP ZGQgb3IgZXZlbiBieXRlICovCisgICAgICAgICAgICAgICAgaWYgKHggPT0gMCkgICAgICAgICAg ICAgLyogTm90ZTogMSA9IHRoZSAxc3QsIDAgPSAybmQsIGV0YyAqLworICAgICAgICAgICAgICAg ICAgdWMueF9zaG9ydCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGJvbW9yZGVyKSAgICAgICAg ICAgLyogTGl0dGxlIEVuZGlhbiAqLworICAgICAgICAgICAgICAgICAgeCA9IDEgLSB4OyAgICAg ICAgICAgIC8qIFNhdmUgYnl0ZSBpbiBhcHByb3ByaWF0ZSBoYWxmICovCisgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiWE1JVCBVQ1MyIHgiLCIiLHgpOworICAgICAgICAgICAgICAgIHVjLnhf Y2hhclt4XSA9IChDSEFSKSAoYyAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGlmIChuYnl0ZXMg JiAxKSAgICAgICAgIC8qIEZpcnN0IGJ5dGUsIGdvIGJhY2sgZm9yIG5leHQgKi8KKyAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChuYnl0ZXMgPT0gMikgeyAg ICAgIC8qIFVDUy0yIEJ5dGUgT3JkZXIgTWFyayAqLworICAgICAgICAgICAgICAgICAgICBpZiAo dWMueF9zaG9ydCA9PSAoVVNIT1JUKSAweGZlZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMDAsIlhNSVQgVUNTMiBCT00gRkVGRiIsIiIsYm9tb3JkZXIpOworICAgICAgICAg ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo dWMueF9zaG9ydCA9PSAoVVNIT1JUKSAweGZmZmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJvbW9yZGVyID0gMSAtIGJvbW9yZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWco RjEwMCwiWE1JVCBVQ1MyIEJPTSBGRkZFIChzd2FwKSIsIiIsYm9tb3JkZXIpOworICAgICAgICAg ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgc3ByaW50Zih4YnVmLCIlMDRYIix1Yy54X3Nob3J0 KTsgLyogU0FGRSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlhNSVQgVUNTMiIseGJ1 Zix1Yy54X3Nob3J0KTsKKyAgICAgICAgICAgICAgICBpZiAobmJ5dGVzICYgMSkgICAgICAgICAv KiBTcGVjaWFsIGVvbCB0ZXN0IGZvciBVQ1MtMiAqLworICAgICAgICAgICAgICAgICAgaWYgKHVj Lnhfc2hvcnQgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgZW9sID0gMTsKKyNpZmRlZiBD T01NRU5UCisgICAgICAgICAgICAgICAgaWYgKHVjLnhfc2hvcnQgPT0gMHgyMDI4IHx8IHVjLnhf c2hvcnQgPT0gMHgyMDI5KQorICAgICAgICAgICAgICAgICAgICBlb2wgPSAxOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAg ICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykgeyAgICAgICAgICAvKiBOb3JtYWwgZW9sIHRlc3Qg b3RoZXJ3aXNlICovCisgICAgICAgICAgICAgICAgICBlb2wgPSAxOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKGVvbCkgeyAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiBsaW5lPyAq LworICAgICAgICAgICAgICAgIGludCBzdHVmZiA9IC0xOworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsIlhNSVQgZW9sIGxlbmd0aCIsIiIsaSk7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0g MCkgeyAgICAgICAgICAgLyogQmxhbmsgbGluZT8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYg KHhtaXRmKSAgICAgICAgICAvKiBZZXMsIGluc2VydCBmaWxsIGlmIGFza2VkLiAqLworICAgICAg ICAgICAgICAgICAgICAgIGxpbmVbaSsrXSA9IGRvcGFyKChjaGFyKSB4bWl0Zik7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpID09IDAgfHwgKChjaGFyKSBsaW5lW2kt MV0pICE9ICgoY2hhcikgZG9wYXIoQ1IpKSkKKyAgICAgICAgICAgICAgICAgIGxpbmVbaSsrXSA9 IGRvcGFyKENSKTsgLyogVGVybWluYXRlIGl0IHdpdGggQ1IgKi8KKyAgICAgICAgICAgICAgICBp ZiAoeG1pdGwpIHsKKyAgICAgICAgICAgICAgICAgICAgc3R1ZmYgPSBMRjsKKyNpZmRlZiBUTkNP REUKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzX3RuICYmICh0bl9ubG0gIT0gVE5MX0NS KSkgeworICAgICAgICAgICAgICAgICAgICAvKiBURUxORVQgTkVXTElORSBPTi9PRkYvUkFXICov CisgICAgICAgICAgICAgICAgICAgIHN0dWZmID0gKHRuX25sbSA9PSBUTkxfQ1JMRikgPyBMRiA6 IE5VTDsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgaWYgKHN0dWZmID4gLTEpCisgICAgICAgICAgICAgICAgICBsaW5lW2krK10gPSBkb3Bh cigoY2hhcilzdHVmZik7CisgICAgICAgICAgICAgICAgbGluZVtpXSA9IE5VTDsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJYTUlUIGVvbCBsaW5lIixsaW5lLGkpOworCisgICAgICAgICAg ICB9IGVsc2UgaWYgKGMgIT0gLTEpIHsgICAgICAgLyogTm90IGEgbmV3bGluZSwgcmVndWxhciBj aGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICBpbnQgaywgeDsKKyAgICAgICAgICAgICAgICBv dXR4YnVmWzBdID0gYzsgICAgICAgICAvKiBJbiBjYXNlIG9mIG5vIHRyYW5zbGF0aW9uICovCisg ICAgICAgICAgICAgICAgb3V0eGNvdW50ID0gMTsgICAgICAgICAgLyogQXNzdW1lIHJlc3VsdCBp cyBvbmUgYnl0ZSAqLworI2lmbmRlZiBOT0NTRVRTCisgICAgICAgICAgICAgICAgc3dpdGNoICh1 bmljb2RlKSB7CisgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgLyogTm8g VW5pY29kZSBpbnZvbHZlZCAqLworICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg ICAgICAgICAgICBpZiAoeGxhdGUpIHsgICAgICAgIC8qIElmIG5vdCAvVFJBTlNQQVJFTlQgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsLXRvLWludGVybWVkaWF0ZSAqLworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHN4bykgYyA9ICgqc3hvKSgoY2hhciljKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEludGVybWVkaWF0ZS10by1yZW1vdGUgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChyeG8pIGMgPSAoKnJ4bykoKGNoYXIpYyk7CisgICAgICAgICAg ICAgICAgICAgICAgICBvdXR4YnVmWzBdID0gYzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBVTklDT0RFCisgICAgICAgICAgICAgICAg ICBjYXNlIDI6ICAgICAgICAgICAgICAgLyogTG9jYWwgYnl0ZSB0byBVVEYtOCAqLworICAgICAg ICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICB4ZnUgPSB4bF9mY3VbZmNo YXJzZXRdOworICAgICAgICAgICAgICAgICAgICB0Y3NzaXplID0gZmNzaW5mb1tmY2hhcnNldF0u c2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0eGNvdW50ID0KKyAgICAgICAgICAgICAgICAg ICAgICBiX3RvX3UoKENIQVIpYyxvdXR4YnVmLE9VVFhCVUZTSVosdGNzc2l6ZSk7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAg ICAgIC8qIExvY2FsIFVURi04IHRvIHJlbW90ZSBieXRlICovCisgICAgICAgICAgICAgICAgICBj YXNlIDU6CisgICAgICAgICAgICAgICAgICAgIHh1ZiA9IHhsX3VmY1t0Y3NyXTsKKyAgICAgICAg ICAgICAgICAgICAgeCA9IHVfdG9fYigoQ0hBUiljKTsgLyogQ29udmVydCB0byBieXRlICovCisg ICAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0xKSB7ICAgICAgLyogSWYgbW9yZSBpbnB1dCBi eXRlcyBuZWVkZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAv KiBnbyBiYWNrIGFuZCBnZXQgdGhlbSAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHggPT0gLTIpIHsgLyogTFMgb3IgUFMgKHNob3VsZG4ndCBoYXBwZW4pICovCisgICAgICAgICAg ICAgICAgICAgICAgICBvdXR4YnVmWzBdID0gQ1I7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoeCA9PSAtOSkgeyAvKiBVVEYtOCBlcnJvciAqLworICAgICAgICAgICAgICAgICAgICAg ICAgb3V0eGJ1ZlswXSA9ICc/JzsgLyogSW5zZXJ0IGVycm9yIGNoYXIgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIG91dHhidWZbMV0gPSB1X3RvX2IyKCk7IC8qIEluc2VydCBuZXh0IGNoYXIg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHhjb3VudCA9IDI7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXR4YnVmWzBdID0gICAg LyogT3RoZXJ3aXNlIHN0b3JlIHJlc3VsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAo dW5zaWduZWQpKHggJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAv KiBVVEYtOCB0byBVVEYtOCAqLworICAgICAgICAgICAgICAgICAgY2FzZSA3OgorICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgODogICAgICAgICAgICAg ICAvKiBVQ1MtMiB0byBieXRlICovCisgICAgICAgICAgICAgICAgICBjYXNlIDk6CisgICAgICAg ICAgICAgICAgICAgIHh1ZiA9IHhsX3VmY1t0Y3NyXTsKKyAgICAgICAgICAgICAgICAgICAgb3V0 eGJ1ZlswXSA9ICgqeHVmKSh1Yy54X3Nob3J0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgICAgY2FzZSAxMTog eyAgICAgICAgICAgIC8qIFVDUy0yIHRvIFVURi04ICovCisgICAgICAgICAgICAgICAgICAgICAg aW50IGo7CisgICAgICAgICAgICAgICAgICAgICAgQ0hBUiAqIGJ1ZiA9IE5VTEw7CisgICAgICAg ICAgICAgICAgICAgICAgeCA9IHVjczJfdG9fdXRmOCh1Yy54X3Nob3J0LCZidWYpOworICAgICAg ICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBv dXR4YnVmWzBdID0gMHhmZjsgLyogKD0gVStGRkZEKSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICBvdXR4YnVmWzFdID0gMHhiZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDI7 CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9 IDA7IGogPCB4OyBqKyspCisgICAgICAgICAgICAgICAgICAgICAgICBvdXR4YnVmW2pdID0gYnVm W2pdOworICAgICAgICAgICAgICAgICAgICAgIG91dHhjb3VudCA9IHg7CisgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAq LworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgICAgICAgICAg ICAgb3V0eGJ1ZltvdXR4Y291bnRdID0gTlVMOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEs IlhNSVQgb3V0eGJ1ZiIsb3V0eGJ1ZixvdXR4Y291bnQpOworLyoKKyAgTm93IHRoZSBpbnB1dCBj aGFyYWN0ZXIgKDEgb3IgbW9yZSBieXRlcykgaXMgdHJhbnNsYXRlZCBpbnRvIHRoZSBvdXRwdXQK KyAgZXhwYW5zaW9uIGJ1ZmZlciAoMSBvciBtb3JlIGJ5dGVzKTsgb3V0eGNvdW50ID0gbnVtYmVy IG9mIGJ5dGVzIHRvIGFkZCB0bworICB0aGUgVFJBTlNNSVQgbGluZSBidWZmZXIsIHdoaWNoIHdl IGRvIGhlcmUsIHRha2luZyBjYXJlIG9mIHBhcml0eSwgU0kvU08KKyAgcHJvY2Vzc2luZywgYW5k IHF1b3RpbmcgVGVsbmV0IElBQ3MuCisqLworICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsg PCBvdXR4Y291bnQ7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBjID0gb3V0eGJ1ZltrXTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKHhtaXRzICYmIHBhcml0eSAmJiAoYyAmIDAyMDApKSB7 IC8qIElmIHNoaWZ0aW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lW2krK10gPSBk b3BhcihTTyk7IC8qIG5lZWRzIHRvIGJlIGRvbmUsICovCisgICAgICAgICAgICAgICAgICAgICAg ICBsaW5lW2krK10gPSBkb3BhcigoY2hhciljKTsgLyogZG8gaXQgaGVyZSwgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIGxpbmVbaSsrXSA9IGRvcGFyKFNJKTsgLyogY3J1ZGVseS4gKi8KKyAg ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVb aSsrXSA9IGRvcGFyKChjaGFyKWMpOworI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGMgPT0gKENIQVIpSUFDICYmIGlzX3RuKQorICAgICAgICAgICAgICAgICAgICAg ICAgICBsaW5lW2krK10gPSAoQ0hBUilJQUM7CisjZW5kaWYgLyogVE5DT0RFICovCisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisvKgorICBT ZW5kIGNoYXJhY3RlcnMgaWYgYnVmZmVyIGZ1bGwsIG9yIGF0IGVuZCBvZiBsaW5lLCBvciBhdCBl bmQgb2YgZmlsZS4KKyAgKEVuZCBvZiBsaW5lIG9ubHkgaWYgZWNob2luZywgd2FpdGluZyBmb3Ig YSBwcm9tcHQsIG9yIHBhdXNpbmcuKQorKi8KKyAgICAgICAgICAgIGRlYnVnKEYwMDAsIlhNSVQg YyIsY2tpdG9hKGkpLGMpOworICAgICAgICAgICAgaWYgKGkgPj0geGJ1ZnNpeiB8fCBlb2YgfHwg KGVvbCAmJiAoeHhlY2hvIHx8IHhtaXR3IHx8IHQpKSkgeworICAgICAgICAgICAgICAgIHAgPSBs aW5lOworICAgICAgICAgICAgICAgIGxpbmVbaV0gPSAnXDAnOworICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsInRyYW5zbWl0IGJ1ZiIscCxpKTsKKyAgICAgICAgICAgICAgICBpZiAodHRvbCgo Q0hBUiAqKXAsaSkgPCAwKSB7IC8qIHRyeSB0byBzZW5kIGl0LiAqLworICAgICAgICAgICAgICAg ICAgICBwcmludGYoIj9UUkFOU01JVCBvdXRwdXQgZXJyb3I6ICVzXG4iLGNrX2VycnN0cigpKTsK KyAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaSA9IDA7ICAgICAgICAgICAgICAg ICAgLyogUmVzZXQgYnVmZmVyIHBvaW50ZXIuICovCisvKgorICBOb3cgd2UgaGFuZGxlIHRoZSBl Y2hvLiAgSWYgdGhlIHVzZXIgd2FudHMgdG8gc2VlIGl0LCBvciBpZiB3ZSBoYXZlIHRvCisgIHdh aXQgZm9yIHRoZSB0dXJuYXJvdW5kIGNoYXJhY3RlciwgdC4gIElmIHRoZSBlY2hvIGlzIGJlaW5n IGRpc3BsYXllZCwKKyAgYW5kIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb24gaXMg cmVxdWlyZWQsIHdlIGRvIGl0IGhlcmUuCisqLworICAgICAgICAgICAgICAgIGlmIChkdXBsZXgg JiYgeHhlY2hvKSB7ICAvKiBJZiBsb2NhbCBlY2hvLCBlY2hvIGl0ICovCisgICAgICAgICAgICAg ICAgICAgIGlmIChwYXJpdHkgfHwgY21kbXNrID09IDB4N2YpIHsgLyogU3RyaXAgaGkgYml0cyAq LworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3MgPSBsaW5lOyAgICAgICAgICAgICAv KiBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqc3MpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3MgJj0gMHg3ZjsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzcysrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAg ICAgICAgeyAgICAgICAgICAgICAgICAgICAvKiBFY2hvIHRvIGVtdWxhdG9yICovCisgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICpzcyA9IHA7CisgICAgICAgICAgICAgICAgICAgICAgICB3 aGlsZSAoKnNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0d3J0YnVmKChV U0hPUlQpKnNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcysrOworICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogT1MyICov CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoY29ub2xsKHAp IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhtaXRmYWlsOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoeG1pdHcpICAgICAgICAgICAgICAvKiBTbGVlcCBU UkFOU01JVCBQQVVTRSBpbnRlcnZhbCAqLworICAgICAgICAgICAgICAgICAgbXNsZWVwKHhtaXR3 KTsKKworICAgICAgICAgICAgICAgIGNvbnRyb2wgPSAwOyAgICAgICAgICAgIC8qIFJlYWRiYWNr IGxvb3AgY29udHJvbCAqLworICAgICAgICAgICAgICAgIGlmICh0ICE9IDAgJiYgZW9sKSAgICAg IC8qIFRSQU5TTUlUIFBST01QVCBnaXZlbiBhbmQgYXQgRU9MICovCisgICAgICAgICAgICAgICAg ICBjb250cm9sIHw9IDE7CisgICAgICAgICAgICAgICAgaWYgKHh4ZWNobyAmJiAhZHVwbGV4KSAg IC8qIEVjaG8gZGVzaXJlZCBhbmQgaXMgcmVtb3RlICovCisgICAgICAgICAgICAgICAgICBjb250 cm9sIHw9IDI7CisKKyAgICAgICAgICAgICAgICBpZiAoY29udHJvbCkgeyAgICAgICAgICAvKiBE byB0aGlzIGlmIHJlYWRpbmcgYmFjayB0aGUgZWNobyAqLworICAgICAgICAgICAgICAgICAgICBp bnQgbjsKKyAgICAgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdo aWxlICgxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCAmIDEpIHsgLyog VGVybWluYXRpb24gY3JpdGVyaW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHggPT0gdCkgICAgLyogZm9yIHR1cm5hcm91bmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9s ICYgMikgeyAvKiBBbmQgZm9yIGVjaG9pbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoKG4gPSB0dGNoaygpKSA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg IGlmICgoeCA9IHR0aW5jKHhtaXR0KSkgPCAwKSB7IC8qIFJlYWQgd2l0aCB0aW1lb3V0ICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh4KSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIC0yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIkNvbm5lY3Rpb24gY2xvc2VkLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR0Y2xvcygxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4 bWl0ZmFpbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTM6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJTZXNzaW9uIExpbWl0IGV4Y2VlZGVkIC0gY2xvc2luZyBjb25uZWN0aW9uLlxuIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHRjbG9zKDEpOyAvKiBmdWxsIHRocnUuLi4gKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ290byB4bWl0ZmFpbDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiP1RpbWVvdXRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IHhtaXRmYWlsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gLTEgJiYgKGNvbnRy b2wgJiAyKSkgeyAvKiBFY2hvIGFueSBlY2hvZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAocGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCAmPSAweDdm OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB4OworI2lmbmRlZiBOT0xPQ0FMCisj aWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0d3J0YnVmKChVU0hP UlQpeCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlueGJ1ZlswXSA9IGM7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW54Y291bnQgPSAxOworI2lmbmRlZiBOT0NTRVRTCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3dpdGNoICh1bmljb2RlICYgMykgeyAvKiBSZW1vdGUgYml0cyAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoeGxhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIChzeGkpIGMgPSAoKnN4aSkoKENIQVIpYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAocnhpKSBjID0gKCpyeGkpKChDSEFSKWMpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW54YnVmWzBdID0gYzsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNp ZmRlZiBVTklDT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6ICAgLyog UmVtb3RlIEJ5dGUgdG8gbG9jYWwgVVRGLTggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeGZ1ID0geGxfZmN1W3Rjc3JdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0Y3NzaXplID0gZmNzaW5mb1t0Y3NyXS5zaXplOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnhjb3VudCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYl90 b191KChDSEFSKWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu eGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUWEJVRlNJ WiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNzc2l6ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgMjogICAvKiBSZW1vdGUgVVRGLTggdG8gbG9jYWwgQnl0ZSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB4dWYgPSB4bF91ZmNbdGNzbF07CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHggPSB1X3RvX2IoKENIQVIpYyk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW54YnVmWzBdID0gKHVu c2lnbmVkKSh4ICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgIC8qIFVURi04IHRvIFVU Ri04ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IFVOSUNPREUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9D U0VUUyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlueGJ1Zltpbnhjb3VudF0gPSBO VUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnhvKGlueGNvdW50LChjaGFy ICopaW54YnVmKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhtaXRm YWlsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgLyogTm90IGVjaG9pbmcgKi8K KyAgICAgICAgICAgICAgICAgIHR0Zmx1aSgpOyAgICAgICAgICAgICAvKiBKdXN0IGZsdXNoIGlu cHV0IGJ1ZmZlciAqLworICAgICAgICAgICAgfSAvKiBFbmQgb2YgYnVmZmVyLWR1bXBpbmcgYmxv Y2sgKi8KKyAgICAgICAgfSAvKiBFbmQgb2YgdGV4dCBtb2RlICovCisgICAgICAgIGlmIChlb2Yp IHsKKyAgICAgICAgICAgIHJjID0gMTsKKyAgICAgICAgICAgIGdvdG8geG1pdGV4aXQ7CisgICAg ICAgIH0KKyAgICB9IC8qIEVuZCBvZiBjaGFyYWN0ZXItcmVhZGluZyBsb29wICovCisKKyAgeG1p dGZhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYWlsdXJlIGV4aXQgcG9pbnQg Ki8KKyAgICByYyA9IDA7CisKKyAgeG1pdGV4aXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBHZW5lcmFsIGV4aXQgcG9pbnQgKi8KKyAgICBpZiAocmMgPiAwKSB7CisgICAgICAgIGlm IChiaW5hcnkgJiYgIXhtaXR3ICYmICF4eGVjaG8pIHsgLyogImJsYXN0aW5nIj8gKi8KKyAgICAg ICAgICAgIHdoaWxlIChjb3VudCA+IDApIHsgICAgICAgICAgICAvKiBQYXJ0aWFsIGJ1ZmZlciBz dGlsbCB0byBnbz8gKi8KKyAgICAgICAgICAgICAgICBlcnJubyA9IDA7CisgICAgICAgICAgICAg ICAgeSA9IHR0b2woeGJidWYsY291bnQpOworICAgICAgICAgICAgICAgIGlmICh5IDwgMCkgewor ICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9UUkFOU01JVCBvdXRwdXQgZXJyb3I6ICVzXG4i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tfZXJyc3RyKCkpOworICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJYTUlUIGJpbmFyeSBlb2YgdHRvbCBlcnJvciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGNrX2VycnN0cigpLGVycm5vKTsKKyAgICAgICAgICAgICAgICAg ICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgY291bnQgLT0geTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl bHNlIGlmICghYmluYXJ5ICYmICp4bWl0YnVmKSB7IC8qIEFueXRoaW5nIHRvIHNlbmQgYXQgRU9G PyAqLworICAgICAgICAgICAgcCA9IHhtaXRidWY7ICAgICAgICAgICAgICAgIC8qIFllcywgcG9p bnQgdG8gc3RyaW5nLiAqLworICAgICAgICAgICAgd2hpbGUgKCpwKSAgICAgICAgICAgICAgICAg IC8qIFNlbmQgaXQuICovCisgICAgICAgICAgICAgIHR0b2MoZG9wYXIoKnArKykpOyAgICAgICAg LyogRG9uJ3Qgd29ycnkgYWJvdXQgZWNobyBoZXJlLiAqLworICAgICAgICB9CisgICAgfQorCisj aWZuZGVmIEFNSUdBCisjaWZuZGVmIE1BQworICAgIHNpZ25hbChTSUdJTlQsb2xkc2lnKTsgICAg ICAgICAgICAgIC8qIFB1dCBvbGQgc2lnbmFsIGFjdGlvbiBiYWNrLiAqLworI2VuZGlmIC8qIE1B QyAqLworI2VuZGlmIC8qIEFNSUdBICovCisjaWZkZWYgVk1TCisgICAgY29uY2IoZXNjYXBlKTsg ICAgICAgICAgICAgICAgICAgICAgLyogUHV0IHRlcm1pbmFsIGJhY2ssICovCisjZW5kaWYgLyog Vk1TICovCisgICAgemNsb3NlKFpJRklMRSk7ICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2Ug ZmlsZSwgKi8KKyNpZm5kZWYgTk9DU0VUUworICAgIGxhbmd1YWdlID0gbGFuZ3N2OyAgICAgICAg ICAgICAgICAgIC8qIHJlc3RvcmUgbGFuZ3VhZ2UsICovCisjZW5kaWYgLyogTk9DU0VUUyAqLwor ICAgIHR0cmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCB0ZXJtaW5hbCBt b2RlcywgKi8KKyAgICByZXR1cm4ocmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQg cmV0dXJuIHN1Y2Nlc3NmdWxseS4gKi8KK30KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYg LyogTk9YTUlUICovCisKKyNpZm5kZWYgTk9DU0VUUworCitfUFJPVE9UWVAoIENIQVIgKCpzeHgp LCAoQ0hBUikgKTsgICAgICAgLyogTG9jYWwgdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KK19QUk9U T1RZUCggQ0hBUiAoKnJ4eCksIChDSEFSKSApOyAgICAgICAvKiBMb2NhbCB0cmFuc2xhdGlvbiBm dW5jdGlvbiAqLworX1BST1RPVFlQKCBDSEFSIHpsMWFzLCAoQ0hBUikgKTsgICAgICAgIC8qIExh dGluLTEgdG8gYXNjaWkgKi8KK19QUk9UT1RZUCggQ0hBUiB4bDFhcywgKENIQVIpICk7ICAgICAg ICAvKiBkaXR0byAqLworCisvKiAgWCBMIEEgVCBFICAtLSAgVHJhbnNsYXRlIGEgbG9jYWwgZmls ZSBmcm9tIG9uZSBjaGFyYWN0ZXIgc2V0IHRvIGFub3RoZXIgKi8KKworLyoKKyAgVHJhbnNsYXRl cyBpbnB1dCBmaWxlIChmaW4pIGZyb20gY2hhcmFjdGVyIHNldCBjc2luIHRvIGNoYXJhY3RlciBz ZXQgY3NvdXQKKyAgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiB0aGUgb3V0cHV0IGZpbGUgKGZvdXQp LiAgVGhlIHR3byBjaGFyYWN0ZXIgc2V0cyBhcmUKKyAgZmlsZSBjaGFyYWN0ZXIgc2V0cyBmcm9t IGZjc3RhYi4KKyovCisKK2ludAoreGxhdGUoZmluLCBmb3V0LCBjc2luLCBjc291dCkgY2hhciAq ZmluLCAqZm91dDsgaW50IGNzaW4sIGNzb3V0OyB7CisKKyNpZm5kZWYgTUFDCisjaWZkZWYgT1My CisgICAgZXh0ZXJuIGludCBrOTVzdGRvdXQ7CisgICAgZXh0ZXJuIGludCB3aGVyZXhbXSwgd2hl cmV5W107CisgICAgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgY29sb3JjbWQ7CisjaWZkZWYgTlQKKyAg ICBTSUdUWVAgKCogb2xkc2lnKShpbnQpOyAgICAgICAgICAgICAvKiBGb3Igc2F2aW5nIG9sZCBp bnRlcnJ1cHQgdHJhcC4gKi8KKyNlbHNlIC8qIE5UICovCisgICAgU0lHVFlQICgqIHZvbGF0aWxl IG9sZHNpZykoaW50KTsgICAgLyogRm9yIHNhdmluZyBvbGQgaW50ZXJydXB0IHRyYXAuICovCisj ZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLworICAgIFNJR1RZUCAoKiBvbGRzaWcpKCk7 CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTUFDICovCisjaWZkZWYgQ0tfQU5TSUMKKyAg ICBpbnQgKCpmbikoY2hhcik7ICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgZnVuY3Rpb24g cG9pbnRlciAqLworI2Vsc2UKKyAgICBpbnQgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworICAgIGV4dGVybiBpbnQgeGxhdHlwZTsKKyAgICBpbnQgZmlsZWNvZGU7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb2RlIGZvciBvdXRwdXQgZmlsZSAqLworICAgIGludCBzY3JuZmxnID0g MDsKKworICAgIGludCB6ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBj b2RlLiAqLworICAgIGludCB4LCBjLCBjMjsgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtl cnMgKi8KKyNpZm5kZWYgVU5JQ09ERQorICAgIGludCB0Y3M7CisjZW5kaWYgLyogVU5JQ09ERSAq LworCisgICAgZmZjID0gMEw7CisKKyAgICBpZiAoem9wZW5pKFpJRklMRSxmaW4pID09IDApIHsg ICAgICAvKiBPcGVuIHRoZSBmaWxlIHRvIGJlIHRyYW5zbGF0ZWQgKi8KKyNpZmRlZiBDT01NRU5U CisgICAgICAgIC8qIEFuIGVycm9yIG1lc3NhZ2Ugd2FzIGFscmVhZHkgcHJpbnRlZCBieSB6b3Bl bmkoKSAqLworICAgICAgICBwcmludGYoIj9DYW4ndCBvcGVuIGlucHV0IGZpbGUgJXNcbiIsZmlu KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIHJldHVybigwKTsKKyAgICB9CisjaWZk ZWYgTUFDCisvKgorICBJZiB1c2VyIHNwZWNpZmllZCBubyBvdXRwdXQgZmlsZSwgaXQgZ29lcyB0 byB0aGUgc2NyZWVuLiAgRm9yIHRoZSBNYWMsCisgIHRoaXMgbXVzdCBiZSBkb25lIGEgc3BlY2lh bCB3YXkgKHJlc3VsdCBnb2VzIHRvIGEgbmV3IHdpbmRvdyk7IHRoZSBNYWMKKyAgZG9lc24ndCBo YXZlIGEgImNvbnRyb2xsaW5nIHRlcm1pbmFsIiBkZXZpY2UgbmFtZS4KKyovCisgICAgZmlsZWNv ZGUgPSAhc3RyY21wKGZvdXQsQ1RUTkFNKSA/IFpDVEVSTSA6IFpPRklMRTsKKyNlbHNlCisjaWZk ZWYgVk1TCisgICAgZmlsZWNvZGUgPSAhc3RyY21wKGZvdXQsQ1RUTkFNKSA/IFpDVEVSTSA6IFpN RklMRTsKKyNlbHNlCisjaWZkZWYgT1MyCisgICAgZmlsZWNvZGUgPSAoIXN0cmljbXAoZm91dCwi Y29uIikgfHwgIXN0cmljbXAoZm91dCwiY29uOiIpKSA/CisgICAgICAgIFpDVEVSTSA6IFpNRklM RTsKKyAgICBpZiAoKGZpbGVjb2RlID09IFpDVEVSTSkgJiYgIWs5NXN0ZG91dCAmJiAhaW5zZXJ2 ZXIpCisgICAgICAgIGNzb3V0ID0gRkNfVUNTMjsKKyNlbHNlIC8qIE9TMiAqLworICAgIGZpbGVj b2RlID0gWk9GSUxFOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlm IC8qIE1BQyAqLworICAgIGlmICh6b3Blbm8oZmlsZWNvZGUsZm91dCxOVUxMLE5VTEwpID09IDAp IHsgLyogQW5kIHRoZSBvdXRwdXQgZmlsZSAqLworICAgICAgICBwcmludGYoIj9DYW4ndCBvcGVu IG91dHB1dCBmaWxlICVzXG4iLGZvdXQpOworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2lm bmRlZiBBTUlHQQorI2lmbmRlZiBNQUMKKyAgICBvbGRzaWcgPSBzaWduYWwoU0lHSU5ULCB0cnRy YXApOyAgICAvKiBTYXZlIGN1cnJlbnQgaW50ZXJydXB0IHRyYXAuICovCisjZW5kaWYgLyogTUFD ICovCisjZW5kaWYgLyogQU1JR0EgKi8KKworICAgIHNjcm5mbGcgPSAoZmlsZWNvZGUgPT0gWkNU RVJNKTsgICAgIC8qIFNldCBvdXRwdXQgZnVuY3Rpb24gKi8KKyAgICBpZiAoc2NybmZsZykKKyAg ICAgIGZuID0gTlVMTDsKKyAgICBlbHNlIGlmIChmaWxlY29kZSA9PSBaTUZJTEUpCisgICAgICBm biA9IHB1dG1maWw7CisgICAgZWxzZQorICAgICAgZm4gPSBwdXRmaWw7CisKKyAgICB0cl9pbnQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIG5vdCBiZWVuIGludGVycnVwdGVk ICh5ZXQpLiAqLworICAgIHogPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl dHVybiBjb2RlIHByZXN1bWVkIGdvb2QuICovCisKKyAgICBpZiAoIXNjcm5mbGcgJiYgIXF1aWV0 KQorICAgICAgcHJpbnRmKCIgJXMgKCVzKSA9PiAlcyAoJXMpXG4iLCAgIC8qIFNheSB3aGF0IHdl J3JlIGRvaW5nLiAqLworICAgICAgICAgICAgIGZpbiwgZmNzaW5mb1tjc2luXS5rZXl3b3JkLAor ICAgICAgICAgICAgIGZvdXQsZmNzaW5mb1tjc291dF0ua2V5d29yZAorICAgICAgICAgICAgICk7 CisKKyNpZm5kZWYgVU5JQ09ERQorLyoKKyAgTm9uLVVuaWNvZGUgcGlja3MgdGhlICJtb3N0IGFw cHJvcHJpYXRlIiB0cmFuc2ZlciBjaGFyYWN0ZXIgc2V0IGFzIHRoZQorICBpbnRlcm1lZGlhdGUg c2V0LCB3aGljaCByZXN1bHRzIGluIGxvc3Mgb2YgYW55IGNoYXJhY3RlcnMgdGhhdCB0aGUgc291 cmNlCisgIGFuZCB0YXJnZXQgc2V0cyBoYXZlIGluIGNvbW1vbiwgYnV0IGFyZSBsYWNraW5nIGZy b20gdGhlIGludGVybWVkaWF0ZSBzZXQuCisqLworI2lmZGVmIEtBTkpJCisgICAgLyogU3BlY2lh bCBoYW5kbGluZyBmb3IgSmFwYW5lc2UuLi4gKi8KKworICAgIGlmIChmY3NpbmZvW2NzaW5dLmFs cGhhYmV0ID09IEFMX0pBUEFOIHx8CisgICAgICAgICBmY3NpbmZvW2Nzb3V0XS5hbHBoYWJldCA9 PSBBTF9KQVBBTikgeworICAgICAgICBVU0hPUlQgZXU7CisgICAgICAgIGludCBjLCB4LCB5Owor CisgICAgICAgIHhwbmJ5dGUoLTEsMCwwLE5VTEwpOyAgICAgICAgICAgLyogUmVzZXQgb3V0cHV0 IG1hY2hpbmUgKi8KKyAgICAgICAgeGxhdHlwZSA9IFhMQV9KQVBBTjsKKworICAgICAgICB3aGls ZSAoKGMgPSB4Z25ieXRlKEZDX0pFVUMsY3NpbixOVUxMKSkgPiAtMSkgeyAvKiBHZXQgYW4gRVVD IGJ5dGUgKi8KKyAgICAgICAgICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAvKiBJbnRl cnJ1cHRlZD8gKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAvKiBQ cmludCBtZXNzYWdlICovCisgICAgICAgICAgICAgICAgeiA9IDA7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBTZW5kIEVVQyBieXRlIHRvIG91 dHB1dCBtYWNoaW5lICovCisgICAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGMsVENfSkVVQyxj c291dCxmbikpIDwgMCkgeworICAgICAgICAgICAgICAgIHogPSAtMTsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnb3RvIHh4bGF0ZTsK KyAgICB9CisjZW5kaWYgLyogS0FOSkkgKi8KKworICAgIC8qIFJlZ3VsYXIgYnl0ZXdpc2UgY29u dmVyc2lvbi4uLiAqLworCisgICAgdGNzID0gZ2V0dGNzKGNzaW4sY3NvdXQpOyAgICAgICAgICAg LyogR2V0IGludGVybWVkaWF0ZSBzZXQuICovCisgICAgaWYgKGNzaW4gPT0gY3NvdXQpIHsgICAg ICAgICAgICAgICAgLyogSW5wdXQgYW5kIG91dHB1dCBzZXRzIHRoZSBzYW1lPyAqLworICAgICAg ICBzeHggPSByeHggPSBOVUxMOyAgICAgICAgICAgICAgIC8qIElmIHNvLCBubyB0cmFuc2xhdGlv bi4gKi8KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndp c2UsIHNldCB1cCAqLworICAgICAgICBpZiAodGNzIDwgMCB8fCB0Y3MgPiBNQVhUQ1NFVFMgfHwK KyAgICAgICAgICAgIGNzaW4gPCAwIHx8IGNzaW4gPiBNQVhGQ1NFVFMgfHwKKyAgICAgICAgICAg IGNzb3V0IDwgMCB8fCBjc291dCA+IE1BWEZDU0VUUykgeworICAgICAgICAgICAgZGVidWcoRjEw MCwiWExBVEUgY3NldHMgb3V0IG9mIHJhbmdlIiwiIiwwKTsKKyAgICAgICAgICAgIHN4eCA9IHJ4 eCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzeHggPSB4bHNbdGNzXVtj c2luXTsgICAgICAgLyogdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KKyAgICAgICAgICAgIHJ4eCA9 IHhsclt0Y3NdW2Nzb3V0XTsgICAgICAvKiBwb2ludGVycy4gKi8KKyAgICAgICAgICAgIGlmIChy eHggPT0gemwxYXMpIHJ4eCA9IHhsMWFzOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICgo YyA9IHptaW5jaGFyKCkpICE9IC0xKSB7IC8qIExvb3AgZm9yIGFsbCBjaGFyYWN0ZXJzIGluIGZp bGUgKi8KKyAgICAgICAgaWYgKHRyX2ludCkgeyAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1 cHRlZD8gKi8KKyAgICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAvKiBQcmlu dCBtZXNzYWdlICovCisgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisgICAgICAgIGlmIChzeHgpIGMgPSAoKnN4eCkoKENIQVIpYyk7ICAgLyogRnJvbSBm Y3MxIHRvIHRjcyAqLworICAgICAgICBpZiAocnh4KSBjID0gKCpyeHgpKChDSEFSKWMpOyAgIC8q IGZyb20gdGNzIHRvIGZjczIgKi8KKyAgICAgICAgaWYgKHpjaG91dChmaWxlY29kZSwoY2hhcilj KSA8IDApIHsgLyogT3V0cHV0IHhsYXRlZCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIHogPSAt MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGdvdG8geHhsYXRl OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCisKKyNlbHNlICAvKiBVTklDT0RF ICovCisvKgorICAgVXNlIFVuaWNvZGUgYXMgdGhlIGludGVybWVkaWF0ZSBjaGFyYWN0ZXIgc2V0 LiAgSXQncyBzaW1wbGUgYW5kIGdpdmVzCisgICBsaXR0bGUgb3Igbm8gbG9zcywgYnV0IHRoZSBv dmVyaGVhZCBpcyBhIGJpdCBoaWdoZXIuCisqLworICAgIGluaXR4bGF0ZShjc2luLGNzb3V0KTsg ICAgICAgICAgICAgIC8qIFNldCB1cCB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgKi8KKworICAgIGlm ICh4bGF0eXBlID09IFhMQV9OT05FKSB7CisgICAgICAgIHdoaWxlICgoYyA9IHptaW5jaGFyKCkp ICE9IC0xKSB7IC8qIExvb3AgZm9yIGFsbCBjaGFyYWN0ZXJzIGluIGZpbGUgKi8KKyAgICAgICAg ICAgIGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZD8gKi8KKyAgICAg ICAgICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAvKiBQcmludCBtZXNzYWdlICovCisg ICAgICAgICAgICAgICAgeiA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoemNob3V0KGZpbGVjb2RlLChjaGFyKWMpIDwgMCkgeyAvKiBP dXRwdXQgeGxhdGVkIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgIHogPSAtMTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnb3Rv IHh4bGF0ZTsgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICovCisgICAgfQorCisKKyNpZm5k ZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIGlmIChjc291dCA9PSBGQ19VQ1MyICYmICAgICAg ICAgICAgIC8qIHdlJ3JlIHRyYW5zbGF0aW5nIHRvIFVDUy0yICovCisgICAgICAgIGZpbGVjb2Rl ID09IFpDVEVSTSAmJiAgICAgICAgICAgLyogZm9yIHRoZSByZWFsIHNjcmVlbi4uLiAqLworICAg ICAgICAhazk1c3Rkb3V0ICYmICFpbnNlcnZlcgorICAgICAgICApIHsKKyAgICAgICAgdW5pb24g eworICAgICAgICAgICAgVVNIT1JUIHVjczI7CisgICAgICAgICAgICBVQ0hBUiAgYnl0ZXNbMl07 CisgICAgICAgIH0gb3V0cHV0OworCisgICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAg ICAgICAgLyogSW4gdGhpcyBjYXNlIHdlIGdvIHR3by1ieS10d28uICovCisgICAgICAgICAgICBp ZiAoKGMgPSB4Z25ieXRlKEZDX1VDUzIsY3NpbixOVUxMKSkgPCAwKQorICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIG91dHB1dC5ieXRlc1swXSA9IGM7CisgICAgICAgICAgICBpZiAo KGMgPSB4Z25ieXRlKEZDX1VDUzIsY3NpbixOVUxMKSkgPCAwKQorICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIG91dHB1dC5ieXRlc1sxXSA9IGM7CisKKyAgICAgICAgICAgIGlmICh0 cl9pbnQpIHsgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZD8gKi8KKyAgICAgICAgICAgICAg ICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAvKiBQcmludCBtZXNzYWdlICovCisgICAgICAgICAg ICAgICAgeiA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIFZzY3JuV3J0VUNTMlN0ckF0dChWQ01ELAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZvdXRwdXQudWNzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJleVtWQ01EXSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3aGVyZXhbVkNNRF0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmNvbG9yY21kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgfQorICAgIH0gZWxzZQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9D QUwgKi8KKworICAgICAgLyogR2VuZXJhbCBjYXNlOiBHZXQgbmV4dCBieXRlIHRyYW5zbGF0ZWQg ZnJvbSBmY3MgdG8gVUNTLTIgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAgIHdoaWxlICgoYyA9 IHhnbmJ5dGUoRkNfVUNTMixjc2luLE5VTEwpKSA+IC0xICYmCisgICAgICAgICAgICAgIChjMiA9 IHhnbmJ5dGUoRkNfVUNTMixjc2luLE5VTEwpKSA+IC0xKSB7CisgICAgICAgICAgZXh0ZXJuIGlu dCBmaWxlb3JkZXI7CisKKyAgICAgICAgICBpZiAodHJfaW50KSB7ICAgICAgICAgICAgICAgICAv KiBJbnRlcnJ1cHRlZD8gKi8KKyAgICAgICAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAg ICAvKiBQcmludCBtZXNzYWdlICovCisgICAgICAgICAgICAgIHogPSAwOworICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgZGVidWcoRjAwMSwiWExBVEUgYyIsIiIs Yyk7CisgICAgICAgICAgZGVidWcoRjAwMSwiWExBVEUgYzIiLCIiLGMyKTsKKworICAgICAgICAg IC8qIEFuZCB0aGVuIHNlbmQgVUNTLTIgYnl0ZSB0byB0cmFuc2xhdGUtYW5kLW91dHB1dCBtYWNo aW5lICovCisKKyAgICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGZpbGVvcmRlcj9jMjpjLFRDX1VD UzIsY3NvdXQsZm4pKSA8IDApIHsKKyAgICAgICAgICAgICAgeiA9IC0xOworICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCh4ID0geHBuYnl0ZShmaWxlb3Jk ZXI/YzpjMixUQ19VQ1MyLGNzb3V0LGZuKSkgPCAwKSB7CisgICAgICAgICAgICAgIHogPSAtMTsK KyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorI2Vsc2UKKyAgICB3 aGlsZSAoKGMgPSB4Z25ieXRlKEZDX1VDUzIsY3NpbixOVUxMKSkgPiAtMSkgeworICAgICAgICAg IGlmICh0cl9pbnQpIHsgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkPyAqLworICAgICAg ICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgIC8qIFByaW50IG1lc3NhZ2UgKi8KKyAg ICAgICAgICAgICAgeiA9IDA7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg ICAgICAgICBpZiAoKHggPSB4cG5ieXRlKGMsVENfVUNTMixjc291dCxmbikpIDwgMCkgeworICAg ICAgICAgICAgICB6ID0gLTE7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAg ICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyAg eHhsYXRlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tb24gZXhpdCBwb2lu dCAqLworCisjaWZuZGVmIEFNSUdBCisjaWZuZGVmIE1BQworICAgIHNpZ25hbChTSUdJTlQsb2xk c2lnKTsgICAgICAgICAgICAgIC8qIFB1dCBvbGQgc2lnbmFsIGFjdGlvbiBiYWNrLiAqLworI2Vu ZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIEFNSUdBICovCisgICAgdHJfaW50ID0gMDsKKyAgICBp ZiAoeiA8IDApIHsKKyAgICAgICAgaWYgKHogPT0gLTEpCisgICAgICAgICAgcHJpbnRmKCI/Rmls ZSBvdXRwdXQgZXJyb3I6ICVzXG4iLGNrX2VycnN0cigpKTsKKyAgICAgICAgeiA9IDA7CisgICAg fQorICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGZpbGVz ICovCisgICAgemNsb3NlKGZpbGVjb2RlKTsgICAgICAgICAgICAgICAgICAgLyogLi4uICovCisg ICAgcmV0dXJuKHN1Y2Nlc3MgPSB6KTsgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiBzdGF0 dXMuICovCit9CisKK2ludAorZG94bGF0ZSgpIHsKKyNpZmRlZiBPUzJPTkxZCisgICAgZXh0ZXJu IGludCB0dF9mb250OworI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNpZmRlZiBVTklYCisgICAgZXh0 ZXJuIGNoYXIgKiogbXRjaHM7ICAgICAgICAgICAgICAgLyogenhwYW5kKCkgZmlsZSBsaXN0ICov CisjZW5kaWYgLyogVU5JWCAqLworICAgIGludCB4LCB5LCBpbmNzLCBvdXRjcywgbXVsdGlwbGUg PSAwLCB3aWxkID0gMCwgZmMgPSAwLCBsZW4gPSAwOworICAgIGludCBvZmlzZGlyID0gMDsKKyAg ICBjaGFyICogcywgKiB0b2NzID0gIiI7CisKKyAgICBpZiAoKHggPSBjbWlmaSgiRmlsZShzKSB0 byB0cmFuc2xhdGUiLCIiLCZzLCZ3aWxkLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgIGlmICh4 ID09IC0zKSB7CisgICAgICAgICAgICBwcmludGYoIj9OYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGVc biIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg cmV0dXJuKHgpOworICAgIH0KKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAgICAg ICAvKiBTYXZlIGNvcHkgb2Ygc3RyaW5nIGp1c3QgcGFyc2VkLiAqLworCisgICAgaWYgKChpbmNz ID0gY21rZXkoZmNzdGFiLG5maWxjLCJmcm9tIGNoYXJhY3Rlci1zZXQiLCIiLHh4c3RyaW5nKSkg PCAwKQorICAgICAgcmV0dXJuKGluY3MpOworCisjaWZkZWYgT1MyCisgICAgaWYgKGlzdW5pY29k ZSgpKQorICAgICAgdG9jcyA9ICJ1Y3MyIjsKKyAgICBlbHNlCisjZW5kaWYgLyogT1MyICovCisg ICAgICB0b2NzID0gZ2V0ZGNzZXQoKTsKKworICAgIGlmICgob3V0Y3MgPSBjbWtleShmY3N0YWIs bmZpbGMsInRvIGNoYXJhY3Rlci1zZXQiLHRvY3MseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1 cm4ob3V0Y3MpOworICAgIGlmICgoeCA9IGNtb2ZpKCJvdXRwdXQgZmlsZSIsQ1RUTkFNLCZzLHh4 c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7CisgICAgaWYgKHggPiAxKQorICAgICAgb2Zpc2RpciA9 IDE7CisKKyAgICBsZW4gPSBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICov CisKKyAgICBpZiAobGVuIDwgMSkKKyAgICAgIHJldHVybigtMik7CisKKyAgICBpZiAob2Zpc2Rp cikKKyAgICAgIG11bHRpcGxlID0gMjsKKyAgICBlbHNlIGlmICh3aWxkKSB7CisgICAgICAgIGlm IChpc2Rpcih0bXBidWYpKQorICAgICAgICAgIG11bHRpcGxlID0gMjsKKyAgICAgICAgZWxzZSBp ZiAoIXN0cmNtcCh0bXBidWYsQ1RUTkFNKSkKKyAgICAgICAgICBtdWx0aXBsZSA9IDE7CisjaWZk ZWYgT1MyCisgICAgICAgIGVsc2UgaWYgKCFzdHJpY21wKHRtcGJ1ZiwiY29uIikgfHwgIXN0cmlj bXAodG1wYnVmLCJjb246IikpCisgICAgICAgICAgbXVsdGlwbGUgPSAxOworI2Vsc2UKKyNpZmRl ZiBVTklYT1JPU0sKKyAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAodG1wYnVmLCIvZGV2LyIsNCkp CisgICAgICAgICAgbXVsdGlwbGUgPSAxOworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworI2VuZGlm IC8qIE9TMiAqLworICAgICAgICBpZiAoIW11bHRpcGxlKSB7CisgICAgICAgICAgICBwcmludGYo Ij9BIHNpbmdsZSBmaWxlIHBsZWFzZVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICB9CisgICAgfQorICAgIGlmICghbXVsdGlwbGUpIHsgICAgICAgICAgICAgICAgICAgIC8q IEp1c3Qgb25lIGZpbGUgKi8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB4bGF0ZShsaW5lLHRt cGJ1ZixpbmNzLG91dGNzKSk7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogVHJhbnNsYXRlIG11bHRpcGxlIGZpbGVzICovCisgICAgICAgIGNoYXIgZGlyYnVmW0NL TUFYUEFUSCs0XTsKKyAgICAgICAgaW50IGs7CisjaWZuZGVmIFpYUkVXSU5ECisgICAgICAgIGlu dCBmbGFncyA9IFpYX0ZJTE9OTFk7CisjZW5kaWYgLyogWlhSRVdJTkQgKi8KKworICAgICAgICBp ZiAobXVsdGlwbGUgPT0gMikgeyAgICAgICAgICAgIC8qIFRhcmdldCBpcyBhIGRpcmVjdG9yeSAq LworICAgICAgICAgICAgayA9IGNrc3RybmNweShkaXJidWYsdG1wYnVmLENLTUFYUEFUSCsxKSAt IDE7CisgICAgICAgICAgICBpZiAoayA8IDApCisgICAgICAgICAgICAgIHJldHVybigtMik7Cisj aWZkZWYgT1MyT1JVTklYCisgICAgICAgICAgICBpZiAoZGlyYnVmW2tdICE9ICcvJykgeworICAg ICAgICAgICAgICAgIGRpcmJ1ZltrKzFdID0gJy8nOworICAgICAgICAgICAgICAgIGRpcmJ1Zltr KzJdID0gTlVMOworICAgICAgICAgICAgfQorI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICAgICAgICAg IGlmIChkaXJidWZba10gIT0gJy8nKSB7CisgICAgICAgICAgICAgICAgZGlyYnVmW2srMV0gPSAn Lyc7CisgICAgICAgICAgICAgICAgZGlyYnVmW2srMl0gPSBOVUw7CisgICAgICAgICAgICB9Cisj ZWxzZQorI2lmZGVmIFZNUworICAgICAgICAgICAgaWYgKGNrbWF0Y2goIiouRElSOzEiLHMsMCww KSkKKyAgICAgICAgICAgICAgayA9IGN2dGRpcih0bXBidWYsZGlyYnVmLFRNUEJVRlNJWik7Cisg ICAgICAgICAgICBpZiAoZGlyYnVmW2tdICE9ICddJyAmJgorICAgICAgICAgICAgICAgIGRpcmJ1 ZltrXSAhPSAnPicgJiYKKyAgICAgICAgICAgICAgICBkaXJidWZba10gIT0gJzonKQorICAgICAg ICAgICAgICByZXR1cm4oLTIpOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAg ICAgaWYgKGRpcmJ1ZltrXSAhPSAnOicpIHsKKyAgICAgICAgICAgICAgICBkaXJidWZbaysxXSA9 ICc6JzsKKyAgICAgICAgICAgICAgICBkaXJidWZbaysyXSA9IE5VTDsKKyAgICAgICAgICAgIH0K KyNlbHNlCisjaWZkZWYgU1RSQVRVUworICAgICAgICAgICAgaWYgKGRpcmJ1ZltrXSAhPSAnPicp IHsKKyAgICAgICAgICAgICAgICBkaXJidWZbaysxXSA9ICc+JzsKKyAgICAgICAgICAgICAgICBk aXJidWZbaysyXSA9IE5VTDsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBTVFJBVFVTICovCisj ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPU0sg Ki8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICAgICAgfQorCisjaWZkZWYgWlhSRVdJTkQK KyAgICAgICAgZmMgPSB6eHJld2luZCgpOyAgICAgICAgICAgICAgICAvKiBSZXdpbmQgdGhlIGZp bGUgbGlzdCAqLworI2Vsc2UKKyAgICAgICAgaWYgKG1hdGNoZG90KSAgZmxhZ3MgfD0gWlhfTUFU Q0hET1Q7CisgICAgICAgIGZjID0gbnp4cGFuZChsaW5lLGZsYWdzKTsKKyNlbmRpZiAvKiBaWFJF V0lORCAqLworCisgICAgICAgIGlmIChmYyA8IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1dp bGRjYXJkIGV4cGFuc2lvbiBlcnJvclxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICB9CisjaWZkZWYgVU5JWAorICAgICAgICBzaF9zb3J0KG10Y2hzLE5VTEwsZmMsMCwwLGZp bGVjYXNlKTsgLyogU29ydCB0aGUgZmlsZSBsaXN0ICovCisjZW5kaWYgLyogVU5JWCAqLworCisg ICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCB0aHJvdWdoIHRo ZSBmaWxlcyAqLworICAgICAgICAgICAgem5leHQobGluZSk7CisgICAgICAgICAgICBpZiAoIWxp bmVbMF0pCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG11bHRpcGxlID09 IDIpCisgICAgICAgICAgICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosZGlyYnVmLGxpbmUs TlVMTCxOVUxMKTsKKyAgICAgICAgICAgIGlmICh4bGF0ZShsaW5lLHRtcGJ1ZixpbmNzLG91dGNz KSA8IDEpCisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyAg ICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKyNlbmRpZiAvKiBOT0NTRVRTICovCisK K3N0YXRpYyBjaGFyIGhvbXB0aGJ1ZltDS01BWFBBVEgrMV07CisKK2NoYXIgKgoraG9tZXBhdGgo KSB7CisgICAgaW50IHg7CisgICAgZXh0ZXJuIGNoYXIgKiBteWhvbWU7CisgICAgY2hhciAqIGg7 CisKKyAgICBoID0gbXlob21lID8gbXlob21lIDogemhvbWUoKTsKKyAgICBob21wdGhidWZbMF0g PSBOVUw7CisjaWZkZWYgVU5JWE9ST1NLCisgICAgeCA9IGNrc3RybmNweShob21wdGhidWYsaCxD S01BWFBBVEgrMSk7CisgICAgaWYgKHggPD0gMCkgeworICAgICAgICBob21wdGhidWZbMF0gPSAn Lyc7CisgICAgICAgIGhvbXB0aGJ1ZlsxXSA9IE5VTDsKKyAgICB9IGVsc2UgaWYgKHggPCBDS01B WFBBVEggLSAyICYmIGhvbXB0aGJ1Zlt4LTFdICE9ICcvJykgeworICAgICAgICBob21wdGhidWZb eF0gPSAnLyc7CisgICAgICAgIGhvbXB0aGJ1Zlt4KzFdID0gTlVMOworICAgIH0KKyAgICByZXR1 cm4oaG9tcHRoYnVmKTsKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworICAgIGlmIChzdHJsZW4oaCkg PCBDS01BWFBBVEgpCisgICAgICBzcHJpbnRmKGhvbXB0aGJ1ZiwiJXM+IixoKTsJLyogU0FGRSAq LworICAgIHJldHVybihob21wdGhidWYpOworI2Vsc2UKKyAgICByZXR1cm4oaCk7CisjZW5kaWYg LyogU1RSQVRVUyAqLworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworfQorCisvKiAgRCBPIEwgTyBH ICAtLSAgRG8gdGhlIGxvZyBjb21tYW5kICAqLworCitpbnQKK2RvbG9nKHgpIGludCB4OyB7Cisg ICAgaW50IHksIGRpc3A7IGNoYXIgKnMgPSBOVUxMLCAqIHAgPSBOVUxMLCAqIHEgPSBOVUxMOwor ICAgIGV4dGVybiBpbnQgaXNndWVzdDsKKyNpZmRlZiBaRk5RRlAKKyAgICBzdHJ1Y3QgemZuZnAg KiBmbnA7CisjZW5kaWYgLyogWkZOUUZQICovCisKKyAgICBpZiAoaXNndWVzdCkgeworICAgICAg ICBwcmludGYoIj9Bbm9ueW1vdXMgbG9nIGNyZWF0aW9uIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogV2hpY2ggbG9nLi4uICovCisKKyNpZmRlZiBERUJVRworICAgICAgY2FzZSBMT0dE OgorICAgICAgICBxID0gImRlYnVnLmxvZyI7CisgICAgICAgIHkgPSBjbW9maSgiTmFtZSBvZiBk ZWJ1Z2dpbmcgbG9nIGZpbGUiLHEsJnMseHhzdHJpbmcpOworICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBERUJVRyAqLworCisgICAgICBjYXNlIExPR1A6CisgICAgICAgIHEgPSAicGFja2V0Lmxv ZyI7CisgICAgICAgIHkgPSBjbW9maSgiTmFtZSBvZiBwYWNrZXQgbG9nIGZpbGUiLHEsJnMseHhz dHJpbmcpOworICAgICAgICBicmVhazsKKworI2lmbmRlZiBOT0xPQ0FMCisgICAgICBjYXNlIExP R1M6CisgICAgICAgIHEgPSAic2Vzc2lvbi5sb2ciOworICAgICAgICB5ID0gY21vZmkoIk5hbWUg b2Ygc2Vzc2lvbiBsb2cgZmlsZSIscSwmcyx4eHN0cmluZyk7CisgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIFRMT0cKKyAgICAgIGNhc2UgTE9HVDoKKyAgICAg ICAgcSA9ICJ0cmFuc2FjdC5sb2ciOworICAgICAgICB5ID0gY21vZmkoIk5hbWUgb2YgdHJhbnNh Y3Rpb24gbG9nIGZpbGUiLHEsJnMseHhzdHJpbmcpOworICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBUTE9HICovCisKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICAgIGNhc2UgTE9HTTogeworICAgICAg ICAgIGludCBtLCBuOworICAgICAgICAgIGNoYXIgbXlwYXRoW0NLTUFYUEFUSCsxXTsKKyAgICAg ICAgICBxID0gQ1hMT0dGSUxFOworICAgICAgICAgIG0gPSBja3N0cm5jcHkobXlwYXRoLGhvbWVw YXRoKCksQ0tNQVhQQVRIKTsKKyAgICAgICAgICBuID0gc3RybGVuKENYTE9HRklMRSk7CisgICAg ICAgICAgaWYgKG0gKyBuIDwgQ0tNQVhQQVRIKQorICAgICAgICAgICAgY2tzdHJuY2F0KG15cGF0 aCxDWExPR0ZJTEUsQ0tNQVhQQVRIKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBja3N0 cm5jcHkobXlwYXRoLENYTE9HRklMRSxDS01BWFBBVEgpOworICAgICAgICAgIHkgPSBjbW9maSgi TmFtZSBvZiBjb25uZWN0aW9uIGxvZyBmaWxlIixteXBhdGgsJnMseHhzdHJpbmcpOworICAgICAg ICAgIGJyZWFrOworICAgICAgfQorI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisgICAgICBkZWZh dWx0OgorICAgICAgICBwcmludGYoIlxuP1Vua25vd24gbG9nIGRlc2lnbmF0b3IgLSAlZFxuIix4 KTsKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9CisgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7 CisgICAgaWYgKHkgPT0gMikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhleSBnYXZl IGEgZGlyZWN0b3J5IG5hbWUgKi8KKyAgICAgICAgaW50IGs7CisgICAgICAgIGNoYXIgKiBkcyA9 ICIvIjsKKyAgICAgICAgayA9IHN0cmxlbihzKTsKKyAgICAgICAgaWYgKGsgPiAwICYmIHNbay0x XSA9PSAnLycpIGRzID0gIiI7CisgICAgICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVoscyxk cyxxLE5VTEwpOworICAgICAgICBzID0gdG1wYnVmOworICAgIH0KKyNpZmRlZiBaRk5RRlAKKyNp ZmRlZiBPUzJPUlVOSVgKKyAgICBpZiAoKnMgIT0gJ3wnKSAgICAgICAgICAgICAgICAgICAgICAv KiBBbGxvdyBmb3IgcGlwZXMgKi8KKyNlbHNlCisjaWZkZWYgT1NLCisgICAgaWYgKCpzICE9ICd8 JykKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICAgIGlmICgo Zm5wID0gemZucWZwKHMsVE1QQlVGU0laIC0gMSx0bXBidWYpKSkgeworICAgICAgICAgIGlmIChm bnAtPmZwYXRoKQorICAgICAgICAgICAgaWYgKChpbnQpIHN0cmxlbihmbnAtPmZwYXRoKSA+IDAp CisgICAgICAgICAgICAgIHMgPSBmbnAtPmZwYXRoOworICAgICAgfSAvKiBlbHNlIGlmIGVycm9y IGtlZXAgb3JpZ2luYWwgc3RyaW5nICovCisjZW5kaWYgLyogWkZOUUZQICovCisKKyAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgcyA9IGxpbmU7CisjaWZkZWYgTUFDCisgICAg eSA9IDA7CisjZWxzZQorCisgICAgcCA9ICJuZXciOworI2lmZGVmIFRMT0cKKyAgICBpZiAoKHgg PT0gTE9HVCAmJiB0bG9nZm10ID09IDIpIHx8IHggPT0gTE9HTSkKKyAgICAgIHAgPSAiYXBwZW5k IjsKKyNlbmRpZiAvKiBUTE9HICovCisKKyAgICBpZiAoKHkgPSBjbWtleShkaXNwdGIsMiwiRGlz cG9zaXRpb24iLHAseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisjZW5kaWYgLyog TUFDICovCisgICAgZGlzcCA9IHk7CisgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eSk7CisKKyAgICBzd2l0Y2ggKHgpIHsKKworI2lmZGVmIERFQlVHCisgICAgICBjYXNlIExPR0Q6 CisgICAgICAgIHJldHVybihkZWJsb2cgPSBkZWJvcG4ocyxkaXNwKSk7CisjZW5kaWYgLyogREVC VUcgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgTE9HUDoKKyAgICAgICAgcmV0dXJu KHBrdGxvZyA9IHBrdG9wbihzLGRpc3ApKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRl ZiBOT0xPQ0FMCisgICAgICBjYXNlIExPR1M6CisgICAgICAgIHNldHNlc2xvZyhzZXNvcG4ocyxk aXNwKSk7CisgICAgICAgIHJldHVybihzZXNsb2cpOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKwor I2lmZGVmIFRMT0cKKyAgICAgIGNhc2UgTE9HVDoKKyAgICAgICAgcmV0dXJuKHRyYWxvZyA9IHRy YW9wbihzLGRpc3ApKTsKKyNlbmRpZiAvKiBUTE9HICovCisKKyNpZmRlZiBDS0xPR0RJQUwKKyAg ICAgIGNhc2UgTE9HTToKKyAgICAgICAgcmV0dXJuKGRpYWxvZyA9IGRpYW9wbihzLGRpc3AsMCkp OworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1 cm4oLTIpOworICAgIH0KK30KKworI2lmbmRlZiBOT1hGRVIKK2ludAorcGt0b3BuKHMsZGlzcCkg Y2hhciAqczsgaW50IGRpc3A7IHsKKyAgICBzdGF0aWMgc3RydWN0IGZpbGluZm8geHg7CisKKyAg ICBpZiAoIXMpCisgICAgICBzID0gIiI7CisgICAgaWYgKCEqcykKKyAgICAgIHJldHVybigwKTsK KworICAgIGRlYnVnKEYxMTEsInBrdG9wbiIscyxkaXNwKTsKKworICAgIHpjbG9zZShaUEZJTEUp OworCisjaWZkZWYgT1MyT1JVTklYCisgICAgaWYgKHNbMF0gPT0gJ3wnKSB7ICAgICAgICAgICAg ICAgICAgLyogUGlwZSAqLworICAgICAgICBjaGFyICogcCA9IHMgKyAxOworICAgICAgICBkZWJ1 ZyhGMTEwLCJwa3RvcG4gcCIscCwwKTsKKyAgICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAg ICBpZiAoKnAgIT0gJyAnKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsInBrdG9w biBwaXBlIixwLDApOworICAgICAgICBwa3Rsb2cgPSB6eGNtZChaUEZJTEUscCk7CisgICAgICAg IGRlYnVnKEYxMDEsInBrdG9wbiBzZXNsb2ciLCIiLHNlc2xvZyk7CisgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAq LworICAgICAgICBpZiAoZGlzcCkgeworICAgICAgICAgICAgeHguYnMgPSAwOyB4eC5jcyA9IDA7 IHh4LnJsID0gMDsgeHgub3JnID0gMDsgeHguY2MgPSAwOworICAgICAgICAgICAgeHgudHlwID0g MDsgeHguZHNwID0gWFlGWl9BOyB4eC5vc19zcGVjaWZpYyA9ICIiOworICAgICAgICAgICAgeHgu bGJsb3B0cyA9IDA7CisgICAgICAgICAgICBwa3Rsb2cgPSB6b3Blbm8oWlBGSUxFLHMsTlVMTCwm eHgpOworICAgICAgICB9IGVsc2UgcGt0bG9nID0gem9wZW5vKFpQRklMRSxzLE5VTEwsTlVMTCk7 CisgICAgICAgIGlmICghcGt0bG9nICYmICFxdWlldCkKKyAgICAgICAgICBwcmludGYoIj8lcyAt ICVzXG4iLHMsY2tfZXJyc3RyKCkpOworI2lmZGVmIE9TMk9SVU5JWAorICAgIH0KKyNlbmRpZiAv KiBPUzJPUlVOSVggKi8KKyAgICBpZiAocGt0bG9nID4gMCkKKyAgICAgIGNrc3RybmNweShwa3Rm aWwscyxDS01BWFBBVEgrMSk7CisgICAgZWxzZQorICAgICAgKnBrdGZpbCA9ICdcMCc7CisgICAg cmV0dXJuKHBrdGxvZyk7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisKK2ludAordHJhb3BuKHMs ZGlzcCkgY2hhciAqczsgaW50IGRpc3A7IHsKKyNpZmRlZiBUTE9HCisgICAgc3RhdGljIHN0cnVj dCBmaWxpbmZvIHh4OworCisgICAgaWYgKCFzKQorICAgICAgcyA9ICIiOworICAgIGlmICghKnMp CisgICAgICByZXR1cm4oMCk7CisKKyAgICBkZWJ1ZyhGMTExLCJ0cmFvcG4iLHMsZGlzcCk7Cisg ICAgZGVidWcoRjEwMSwidHJhb3BuIHRsb2dmbXQiLCIiLHRsb2dmbXQpOworCisgICAgemNsb3Nl KFpURklMRSk7CisKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICBpZiAodGxvZ2ZtdCA9PSAyKSB7ICAg ICAgICAgICAgICAgICAvKiBGVFAgZm9ybWF0IGlzIHNwZWNpYWwuLi4gKi8KKyAgICAgICAgVk9J RCBkb2lrbG9nKCk7CisgICAgICAgIGlmICghZGlzcCkgICAgICAgICAgICAgICAgICAgICAgLyog QXBwZW5kPyAqLworICAgICAgICAgIGlmICh6Y2hraShzKSA+IC0xKSAgICAgICAgICAgIC8qIE5v IC0gZG9lcyBmaWxlIGV4aXN0PyAqLworICAgICAgICAgICAgKFZPSUQpIHpkZWxldChzKTsgICAg ICAgICAgIC8qIFllcyAtIGRlbGV0ZSBpdC4gKi8KKyAgICAgICAgeGZlcmxvZyA9IDE7CisgICAg ICAgIGNrc3RybmNweSh0cmFmaWwscyxDS01BWFBBVEgpOworICAgICAgICBtYWtlc3RyKCZ4ZmVy ZmlsZSxzKTsKKyAgICAgICAgZG9pa2xvZygpOworICAgICAgICByZXR1cm4oMSk7CisgICAgfQor ICAgIGlmIChzWzBdID09ICd8JykgeyAgICAgICAgICAgICAgICAgIC8qIFBpcGUgKi8KKyAgICAg ICAgY2hhciAqIHAgPSBzICsgMTsKKyAgICAgICAgZGVidWcoRjExMCwidHJhb3BuIHAiLHAsMCk7 CisgICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgaWYgKCpwICE9ICcgJykKKyAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHArKzsKKyAg ICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJ0cmFvcG4gcGlwZSIscCwwKTsKKyAgICAgICAg dHJhbG9nID0genhjbWQoWlRGSUxFLHApOworICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmFvcG4gdHJh bG9nIiwiIix0cmFsb2cpOworICAgIH0KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKworICAgIGlm IChzWzBdICE9ICd8JykgeyAgICAgICAgICAgICAgICAgIC8qIEZpbGUgKi8KKyAgICAgICAgaWYg KGRpc3ApIHsKKyAgICAgICAgICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4eC5ybCA9IDA7IHh4 Lm9yZyA9IDA7IHh4LmNjID0gMDsKKyAgICAgICAgICAgIHh4LnR5cCA9IDA7IHh4LmRzcCA9IFhZ RlpfQTsgeHgub3Nfc3BlY2lmaWMgPSAiIjsKKyAgICAgICAgICAgIHh4LmxibG9wdHMgPSAwOwor ICAgICAgICAgICAgdHJhbG9nID0gem9wZW5vKFpURklMRSxzLE5VTEwsJnh4KTsKKyAgICAgICAg fSBlbHNlIHRyYWxvZyA9IHpvcGVubyhaVEZJTEUscyxOVUxMLE5VTEwpOworICAgIH0KKyAgICBp ZiAoIXRyYWxvZyAmJiAhcXVpZXQpCisgICAgICBwcmludGYoIj8lcyAtICVzXG4iLHMsY2tfZXJy c3RyKCkpOworICAgIGlmICh0cmFsb2cgPiAwICYmIHRsb2dmbXQgPiAwKSB7CisgICAgICAgIGNr c3RybmNweSh0cmFmaWwscyxDS01BWFBBVEgpOworICAgICAgICB0bG9nKEYxMTAsIlRyYW5zYWN0 aW9uIExvZzoiLHZlcnNpbywwTCk7CisjaWZuZGVmIE1BQworICAgICAgICB0bG9nKEYxMDAsY2t4 c3lzLCIiLDBMKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgenRpbWUoJnMpOworICAgICAg ICB0bG9nKEYxMDAscywiIiwwTCk7CisgICAgfSBlbHNlCisgICAgICAqdHJhZmlsID0gJ1wwJzsK KyAgICByZXR1cm4odHJhbG9nKTsKKyNlbHNlCisgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIFRM T0cgKi8KK30KKworI2lmbmRlZiBOT0xPQ0FMCitpbnQKK3Nlc29wbihzLGRpc3ApIGNoYXIgKiBz OyBpbnQgZGlzcDsgeworICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyB4eDsKKyAgICBleHRlcm4g aW50IHRzc3RhdGU7CisKKyAgICB0c3N0YXRlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAv KiBTZXNzaW9uIGxvZyB0aW1lc3RhbXAgc3RhdGUgKi8KKworICAgIGlmICghcykKKyAgICAgIHMg PSAiIjsKKyAgICBpZiAoISpzKQorICAgICAgcmV0dXJuKDApOworCisgICAgZGVidWcoRjExMSwi c2Vzb3BuIixzLGRpc3ApOworCisgICAgemNsb3NlKFpTRklMRSk7CisKKyNpZmRlZiBPUzJPUlVO SVgKKyAgICBpZiAoc1swXSA9PSAnfCcpIHsgICAgICAgICAgICAgICAgICAvKiBQaXBlICovCisg ICAgICAgIGNoYXIgKiBwID0gcyArIDE7CisgICAgICAgIGRlYnVnKEYxMTAsInNlc29wbiBwIixw LDApOworICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgIGlmICgqcCAhPSAnICcpCisg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwKys7 CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwic2Vzb3BuIHBpcGUiLHAsMCk7CisgICAg ICAgIHNldHNlc2xvZyh6eGNtZChaU0ZJTEUscCkpOworICAgICAgICBkZWJ1ZyhGMTAxLCJzZXNv cG4gc2VzbG9nIiwiIixzZXNsb2cpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGUgKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICAgICAgaWYgKGRp c3ApIHsKKyAgICAgICAgICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4eC5ybCA9IDA7IHh4Lm9y ZyA9IDA7IHh4LmNjID0gMDsKKyAgICAgICAgICAgIHh4LnR5cCA9IDA7IHh4LmRzcCA9IFhZRlpf QTsgeHgub3Nfc3BlY2lmaWMgPSAiIjsKKyAgICAgICAgICAgIHh4LmxibG9wdHMgPSAwOworICAg ICAgICAgICAgc2V0c2VzbG9nKHpvcGVubyhaU0ZJTEUscyxOVUxMLCZ4eCkpOworICAgICAgICB9 IGVsc2UKKyAgICAgICAgICBzZXRzZXNsb2coem9wZW5vKFpTRklMRSxzLE5VTEwsTlVMTCkpOwor ICAgICAgICBpZiAoIXNlc2xvZyAmJiAhcXVpZXQpCisgICAgICAgICAgcHJpbnRmKCI/JXMgLSAl c1xuIixzLGNrX2VycnN0cigpKTsKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICB9CisjZW5kaWYgLyog T1MyT1JVTklYICovCisgICAgaWYgKHNlc2xvZyA+IDApCisgICAgICBja3N0cm5jcHkoc2VzZmls LHMsQ0tNQVhQQVRIKzEpOworICAgIGVsc2UKKyAgICAgICpzZXNmaWwgPSAnXDAnOworICAgIHJl dHVybihzZXNsb2cpOworfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBOT0lDUCAq LworCitpbnQKK2RlYm9wbihzLGRpc3ApIGNoYXIgKnM7IGludCBkaXNwOyB7CisjaWZkZWYgREVC VUcKKyNpZmRlZiBDS19VVFNOQU1FCisgICAgZXh0ZXJuIGNoYXIgdW5tX21jaFtdLCB1bm1fbmFt W10sIHVubV9yZWxbXSwgdW5tX3ZlcltdLCB1bm1fbW9kW107CisjZW5kaWYgLyogQ0tfVVRTTkFN RSAqLworI2lmZGVmIE9TMgorICAgIGV4dGVybiBjaGFyIGNreHN5c3RlbVtdOworI2VuZGlmIC8q IE9TMiAqLworICAgIGNoYXIgKnRwOworICAgIHN0YXRpYyBzdHJ1Y3QgZmlsaW5mbyB4eDsKKwor ICAgIGlmICghcykKKyAgICAgIHMgPSAiIjsKKyAgICBpZiAoISpzKQorICAgICAgcmV0dXJuKDAp OworCisgICAgemNsb3NlKFpERklMRSk7CisKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICBpZiAoc1sw XSA9PSAnfCcpIHsgICAgICAgICAgICAgICAgICAvKiBQaXBlICovCisgICAgICAgIGNoYXIgKiBw ID0gcyArIDE7CisgICAgICAgIGRlYnVnKEYxMTAsImRlYm9wbiBwIixwLDApOworICAgICAgICB3 aGlsZSAoKnApIHsKKyAgICAgICAgICAgIGlmICgqcCAhPSAnICcpCisgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAg ICAgICAgZGVidWcoRjExMCwiZGVib3BuIHBpcGUiLHAsMCk7CisgICAgICAgIGRlYmxvZyA9IHp4 Y21kKFpERklMRSxwKTsKKyAgICAgICAgZGVidWcoRjEwMSwiZGVib3BuIGRlYmxvZyIsIiIsZGVi bG9nKTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlICov CisjZW5kaWYgLyogT1MyT1JVTklYICovCisgICAgICAgIGlmIChkaXNwKSB7CisgICAgICAgICAg ICB4eC5icyA9IDA7IHh4LmNzID0gMDsgeHgucmwgPSAwOyB4eC5vcmcgPSAwOyB4eC5jYyA9IDA7 CisgICAgICAgICAgICB4eC50eXAgPSAwOyB4eC5kc3AgPSBYWUZaX0E7IHh4Lm9zX3NwZWNpZmlj ID0gIiI7CisgICAgICAgICAgICB4eC5sYmxvcHRzID0gMDsKKyAgICAgICAgICAgIGRlYmxvZyA9 IHpvcGVubyhaREZJTEUscyxOVUxMLCZ4eCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIGRl YmxvZyA9IHpvcGVubyhaREZJTEUscyxOVUxMLE5VTEwpOworICAgICAgICBpZiAoIWRlYmxvZyAm JiAhcXVpZXQpCisgICAgICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixzLGNrX2VycnN0cigpKTsK KyNpZmRlZiBPUzJPUlVOSVgKKyAgICB9CisjZW5kaWYgLyogT1MyT1JVTklYICovCisgICAgaWYg KGRlYmxvZyA+IDApIHsKKyAgICAgICAgY2tzdHJuY3B5KGRlYmZpbCxzLENLTUFYUEFUSCsxKTsK KyAgICAgICAgZGVidWcoRjExMCwiRGVidWcgTG9nICIsdmVyc2lvLDApOworI2lmbmRlZiBNQUMK KyNpZmRlZiBPUzIKKyAgICAgICAgZGVidWcoRjExMCxja3hzeXMsY2t4c3lzdGVtLDApOworI2Vs c2UgLyogT1MyICovCisgICAgICAgIGRlYnVnKEYxMDAsY2t4c3lzLCIiLDApOworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIE1BQyAqLworI2lmZGVmIENLX1VUU05BTUUKKyAgICAgICAgaWYg KHVubV9tY2hbMF0pIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInVuYW1lIG1hY2hpbmUiLHVu bV9tY2gsMCk7CisgICAgICAgICAgICBpZiAodW5tX21vZFswXSkKKyAgICAgICAgICAgICAgZGVi dWcoRjExMCwidW5hbWUgbW9kZWwgICIsdW5tX21vZCwwKTsKKyAgICAgICAgICAgIGRlYnVnKEYx MTAsInVuYW1lIHN5c25hbWUiLHVubV9uYW0sMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ1 bmFtZSByZWxlYXNlIix1bm1fcmVsLDApOworICAgICAgICAgICAgZGVidWcoRjExMCwidW5hbWUg dmVyc2lvbiIsdW5tX3ZlciwwKTsKKyAgICAgICAgfQorI2lmZGVmIEtUQVJHRVQKKyAgICAgICAg eworICAgICAgICAgICAgY2hhciAqIHM7ICAgICAgICAgICAgICAgICAgIC8qIE1ha2VmaWxlIHRh cmdldCAqLworICAgICAgICAgICAgcyA9IEtUQVJHRVQ7CisgICAgICAgICAgICBpZiAoIXMpIHMg PSAiIjsKKyAgICAgICAgICAgIGlmICghKnMpIHMgPSAiKHVua25vd24pIjsKKyAgICAgICAgICAg IGRlYnVnKEYxMTAsImJ1aWxkIHRhcmdldCIscywwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEtU QVJHRVQgKi8KKyAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgenRpbWUoJnRwKTsKKyAgICAg ICAgZGVibG9nID0gMTsKKyAgICAgICAgZGVidWcoRjEwMCx0cCwiIiwwKTsKKyNlbmRpZiAvKiBV VFNOQU1FICovCisgICAgICAgIGRlYnVnKEYxMDEsImJ5dGVvcmRlciIsIiIsYnl0ZW9yZGVyKTsK KyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICBpZiAobG9jYWwpIHsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsIkFjdGl2ZSBjb25uZWN0aW9uOiAiLHR0bmFtZSwwKTsKKyAg ICAgICAgICAgIGlmICghbmV0d29yaykgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNw ZWVkIiwiIixzcGVlZCk7CisgICAgICAgICAgICAgICAgaWYgKGh3cGFyaXR5KQorICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiUGFyaXR5W2hhcmR3YXJlXSIscGFybmFtKChjaGFyKWh3cGFy aXR5KSwwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJQYXJpdHkiLHBhcm5hbSgoY2hhcilwYXJpdHkpLDApOworICAgICAgICAgICAgICAgIGRl YmxvZyA9IDA7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiTW9kZW0iLGdtZG10eXAoKSww KTsKKyAgICAgICAgICAgICAgICBkZWJsb2cgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMCwiQWN0aXZlIGNvbm5lY3Rpb246ICIsIm5v bmUiLDApOworICAgICAgICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE5PSUNQ ICovCisgICAgfSBlbHNlICpkZWJmaWwgPSAnXDAnOworICAgIHJldHVybihkZWJsb2cpOworI2Vs c2UKKyAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogTUFDICovCit9CisKKworLyogIEMgSyBEIEEg VCBFICAtLSAgUmV0dXJucyBjdXJyZW50IGRhdGUvdGltZSBpbiBzdGFuZGFyZCBmb3JtYXQgICov CisKK3N0YXRpYyBjaGFyIG5vd2J1ZlsxOF07CisKK2NoYXIgKgorY2tkYXRlKCkgeworICAgIGV4 dGVybiBzdHJ1Y3Qga2V5dGFiIGNtb250aHNbXTsKKyAgICBpbnQgeDsKKyAgICBjaGFyICogdDsg ICAgICAgICAgICAgICAgICAgLyogU3Vic3RpdHV0ZSB0b2RheSdzIGRhdGUgKi8KKyAgICBjaGFy IGRidWZbMzJdOworICAgIHp0aW1lKCZ0KTsKKworLyogIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy MyAqLworLyogIFNhdCBKdWwgIDQgMTI6MTY6NDMgMTk5OCAqLworCisgICAgY2tzdHJuY3B5KGRi dWYsdCwzMik7CisgICAgdCA9IGRidWY7CisgICAgZGVidWcoRjExMCwiY2tkYXRlIGRidWYiLGRi dWYsMCk7CisgICAgbm93YnVmWzBdID0gdFsyMF07CisgICAgbm93YnVmWzFdID0gdFsyMV07Cisg ICAgbm93YnVmWzJdID0gdFsyMl07CisgICAgbm93YnVmWzNdID0gdFsyM107CisKKyAgICBub3di dWZbNF0gPSBOVUw7CisgICAgZGVidWcoRjExMCwiY2tkYXRlIG5vd2J1ZiIsbm93YnVmLDApOwor CisgICAgdFs3XSA9IE5VTDsKKyAgICBpZiAoKHggPSBsb29rdXAoY21vbnRocyx0KzQsMTIsTlVM TCkpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJja2RhdGUgYmFkIG1vbnRoIix0LDApOwor ICAgICAgICByZXR1cm4oIjxCQURfTU9OVEg+Iik7CisgICAgfQorICAgIHNwcmludGYobm93YnVm KzQsIiUwMmQiLHgpOyAgICAgICAgIC8qIFNBRkUgKi8KKyAgICBub3didWZbNl0gPSAodFs4XSA9 PSBTUCkgPyAnMCcgOiB0WzhdOworICAgIG5vd2J1Zls3XSA9IHRbOV07CisgICAgbm93YnVmWzhd ID0gJyAnOworCisgICAgbm93YnVmWzldID0gTlVMOworICAgIGRlYnVnKEYxMTAsImNrZGF0ZSBu b3didWYiLG5vd2J1ZiwwKTsKKworICAgIGZvciAoeCA9IDExOyB4IDwgMTk7IHgrKykgbm93YnVm W3gtMl0gPSB0W3hdOworICAgIG5vd2J1ZlsxN10gPSBOVUw7CisgICAgZGVidWcoRjExMCwiY2tk YXRlIG5vd2J1ZiIsbm93YnVmLDApOworCisgICAgcmV0dXJuKChjaGFyICopbm93YnVmKTsKK30K KworI2lmbmRlZiBOT0lDUAorI2lmZGVmIENLTE9HRElBTAorCisvKgorICBmYyA9IDAgZm9yIGlu aXRpYWwgb3BlbiwgbWVhbmluZyBvcGVuLCB0aGVuIGNsb3NlIGltbWVkaWF0ZWx5LgorICBmYyA+ IDAgZm9yIHN1YnNlcXVlbnQgb3BlbnMsIG1lYW5pbmcgb3BlbiBmb3IgdXNlLCBsZWF2ZSBvcGVu LgorKi8KK2ludAorZGlhb3BuKHMsZGlzcCxmYykgY2hhciAqczsgaW50IGRpc3AsIGZjOyB7Cisg ICAgc3RhdGljIHN0cnVjdCBmaWxpbmZvIHh4OworCisgICAgaWYgKCFzKQorICAgICAgcyA9ICIi OworICAgIGlmICghKnMpCisgICAgICByZXR1cm4oMCk7CisKKyAgICBkZWJ1ZyhGMTEwLCJkaWFv cG4gbG9nIixzLDApOworICAgIGRlYnVnKEYxMDEsImRpYW9wbiBmYyIscyxmYyk7CisgICAgZGVi dWcoRjEwMSwiZGlhb3BuIGRpc3AgMSIscyxkaXNwKTsKKyAgICBpZiAoZmMpIGRpc3AgPSAxOyAg ICAgICAgICAgICAgICAgICAvKiBGb3JjZSBhcHBlbmQgaWYgb3BlbiBmb3IgdXNlICovCisgICAg ZGVidWcoRjEwMSwiZGlhb3BuIGRpc3AgMiIscyxkaXNwKTsKKworICAgIHpjbG9zZShaRElGSUwp OyAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2UgYSBsb2cgd2FzIGFscmVhZHkgb3BlbiAq LworCisjaWZkZWYgT1MyT1JVTklYCisgICAgaWYgKHNbMF0gPT0gJ3wnKSB7ICAgICAgICAgICAg ICAgICAgLyogUGlwZSAqLworICAgICAgICBjaGFyICogcCA9IHMgKyAxOworICAgICAgICBkZWJ1 ZyhGMTEwLCJkaWFvcG4gcCIscCwwKTsKKyAgICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAg ICBpZiAoKnAgIT0gJyAnKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTAsImRpYW9w biBwaXBlIixwLDApOworICAgICAgICBkaWFsb2cgPSB6eGNtZChaRElGSUwscCk7CisgICAgICAg IGRlYnVnKEYxMDEsImRpYW9wbiBkaWFsb2ciLCIiLGRpYWxvZyk7CisgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAq LworICAgICAgICBpZiAoZGlzcCkgeworICAgICAgICAgICAgeHguYnMgPSAwOyB4eC5jcyA9IDA7 IHh4LnJsID0gMDsgeHgub3JnID0gMDsgeHguY2MgPSAwOworICAgICAgICAgICAgeHgudHlwID0g MDsgeHguZHNwID0gWFlGWl9BOyB4eC5vc19zcGVjaWZpYyA9ICIiOworICAgICAgICAgICAgeHgu bGJsb3B0cyA9IDA7CisgICAgICAgICAgICBkaWFsb2cgPSB6b3Blbm8oWkRJRklMLHMsTlVMTCwm eHgpOworICAgICAgICB9IGVsc2UgZGlhbG9nID0gem9wZW5vKFpESUZJTCxzLE5VTEwsTlVMTCk7 CisgICAgICAgIGlmICghZGlhbG9nKQorICAgICAgICAgIHByaW50ZigiPyVzIC0gJXNcbiIscyxj a19lcnJzdHIoKSk7CisjaWZkZWYgT1MyT1JVTklYCisgICAgfQorI2VuZGlmIC8qIE9TMk9SVU5J WCAqLworICAgIGlmIChkaWFsb2cgPiAwKQorICAgICAgY2tzdHJuY3B5KGRpYWZpbCxzLENLTUFY UEFUSCsxKTsKKyAgICBlbHNlCisgICAgICAqZGlhZmlsID0gJ1wwJzsKKyAgICBpZiAoZmMgPT0g MCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsIG9wZW4gKi8KKyAgICAgIHpjbG9z ZShaRElGSUwpOyAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBpdCAqLworICAgIHJldHVybihk aWFsb2cpOworfQorI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZuZGVmIE5PU0hPVworCisv KiAgU0hPVyBjb21tYW5kIHJvdXRpbmVzICovCisKK2NoYXIgKgorc2hveG0oKSB7CisgICAgY2hh ciAqIHM7CisgICAgc3dpdGNoIChiaW5hcnkpIHsKKyAgICAgIGNhc2UgWFlGVF9UOiBzID0gInRl eHQiOyAgICAgICAgIGJyZWFrOworI2lmZGVmIFZNUworICAgICAgY2FzZSBYWUZUX0I6IHMgPSAi YmluYXJ5IGZpeGVkIjsgYnJlYWs7CisgICAgICBjYXNlIFhZRlRfSTogcyA9ICJpbWFnZSI7ICAg ICAgICBicmVhazsKKyAgICAgIGNhc2UgWFlGVF9MOiBzID0gImxhYmVsZWQiOyAgICAgIGJyZWFr OworICAgICAgY2FzZSBYWUZUX1U6IHMgPSAiYmluYXJ5IHVuZGVmIjsgYnJlYWs7CisjZWxzZQor I2lmZGVmIE1BQworICAgICAgY2FzZSBYWUZUX0I6IHMgPSAiYmluYXJ5IjsgICAgICAgYnJlYWs7 CisgICAgICBjYXNlIFhZRlRfTTogcyA9ICJtYWNiaW5hcnkiOyAgICBicmVhazsKKyNlbHNlCisg ICAgICBjYXNlIFhZRlRfQjogcyA9ICJiaW5hcnkiOyAgICAgICBicmVhazsKKyNpZmRlZiBDS19M QUJFTEVECisgICAgICBjYXNlIFhZRlRfTDogcyA9ICJsYWJlbGVkIjsgICAgICBicmVhazsKKyNl bmRpZiAvKiBDS19MQUJFTEVEICovCisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogVk1TICov CisgICAgICBkZWZhdWx0OiBzID0gInVua25vd24iOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJu KHMpOworfQorCisjaWZuZGVmIE5PWEZFUgorVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNIT1cgVFJBTlNGRVIgKi8KK3Nob3hmZXIoKSB7CisgICAgZXh0ZXJuIGlu dCBkb2NyYywgdXNlcGlwZXMsIHhmcnhsYSwgd2hlcmVmbGc7CisgICAgZXh0ZXJuIGNoYXIgKiB4 ZnJtc2c7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50ZigiIFRyYW5zZmVyIEJlbGw6ICVz XG4iLHNob3dvZmYoeGZyYmVsKSk7CisgICAgcHJpbnRmKCIgVHJhbnNmZXIgSW50ZXJydXB0aW9u OiAlc1xuIixzaG93b2ZmKHhmcmludCkpOworICAgIHByaW50ZigiIFRyYW5zZmVyIENhbmNlbGxh dGlvbjogJXNcbiIsc2hvd29mZih4ZnJjYW4pKTsKKyNpZm5kZWYgTk9DU0VUUworICAgIHByaW50 ZigiIFRyYW5zZmVyIFRyYW5zbGF0aW9uOiAgJXNcbiIsc2hvd29mZih4ZnJ4bGEpKTsKKyAgICBw cmludGYoIiBUcmFuc2ZlciBDaGFyYWN0ZXItc2V0OiAiKTsKKyAgICBpZiAodGNoYXJzZXQgPT0g VENfVFJBTlNQKQorICAgICAgcHJpbnRmKCJUcmFuc3BhcmVudFxuIik7CisgICAgZWxzZQorICAg ICAgcHJpbnRmKCIlc1xuIix0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKKyNlbmRpZiAvKiBO T0NTRVRTICovCisgICAgcHJpbnRmKCIgVHJhbnNmZXIgQ1JDLWNhbGN1bGF0aW9uOiAlc1xuIixz aG93b2ZmKGRvY3JjKSk7CisgICAgcHJpbnRmKCIgVHJhbnNmZXIgRGlzcGxheTogIik7CisgICAg c3dpdGNoIChmZGlzcGxhKSB7CisgICAgICBjYXNlIFhZRkRfTjogcHJpbnRmKCIlc1xuIiwibm9u ZSIpOyBicmVhazsKKyAgICAgIGNhc2UgWFlGRF9SOiBwcmludGYoIiVzXG4iLCJzZXJpYWwiKTsg YnJlYWs7CisgICAgICBjYXNlIFhZRkRfQzogcHJpbnRmKCIlc1xuIiwiZnVsbHNjcmVlbiIpOyBi cmVhazsKKyAgICAgIGNhc2UgWFlGRF9TOiBwcmludGYoIiVzXG4iLCJjcnQiKTsgYnJlYWs7Cisg ICAgICBjYXNlIFhZRkRfQjogcHJpbnRmKCIlc1xuIiwiYnJpZWYiKTsgYnJlYWs7CisgICAgICBj YXNlIFhZRkRfRzogcHJpbnRmKCIlc1xuIiwiZ3VpIik7IGJyZWFrOworICAgIH0KKyAgICBwcmlu dGYoIiBUcmFuc2ZlciBNZXNzYWdlOiAlc1xuIiwgeGZybXNnID8geGZybXNnIDogIihub25lKSIp OworICAgIHByaW50ZigiIFRyYW5zZmVyIExvY2tpbmctc2hpZnQ6ICIpOworICAgIGlmIChsc2Nh cHUgPT0gMikgeworICAgICAgICBwcmludGYoImZvcmNlZCIpOworICAgIH0gZWxzZSB7CisgICAg ICAgIHByaW50ZigiJXMiLCAobHNjYXByID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOworICAg ICAgICBpZiAobHNjYXByKSBwcmludGYoIiwlcyVzIiwgKGxzY2FwdSA/ICIgIiA6ICIgbm90ICIp LCAidXNlZCIpOworICAgIH0KKyAgICBwcmludGYoIlxuIFRyYW5zZmVyIE1vZGU6ICVzXG4iLAor ICAgICAgICAgICB4ZmVybW9kZSA9PSBYTU9ERV9BID8KKyAgICAgICAgICAgImF1dG9tYXRpYyIg OgorICAgICAgICAgICAibWFudWFsIgorICAgICAgICAgICApOworICAgIHByaW50ZigiIFRyYW5z ZmVyIFBpcGVzOiAlc1xuIiwgc2hvd29mZih1c2VwaXBlcykpOworICAgIHByaW50ZigiIFRyYW5z ZmVyIFByb3RvY29sOiAlc1xuIixwdGFiW3Byb3RvY29sXS5wX25hbWUpOworICAgIHByaW50Zigi IFRyYW5zZmVyIFJlcG9ydDogJXNcbiIsc2hvd29mZih3aGVyZWZsZykpOworICAgIHByaW50Zigi IFRyYW5zZmVyIFNsb3ctc3RhcnQ6ICVzXG4iLHNob3dvZmYoc2xvc3RhcnQpKTsKKyAgICBwcmlu dGYoIlxuIik7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisKK1ZPSUQKK3Nob2Zsb3coKSB7Cisg ICAgaW50IGksIHg7CisgICAgZXh0ZXJuIGludCBjeGZsb3dbXSwgY3h0eXBlLCBuY3huYW1lLCBu ZmxvbmFtZSwgYXV0b2Zsb3c7CisgICAgZXh0ZXJuIGNoYXIgKiBjeG5hbWVbXTsKKyAgICBwcmlu dGYoIlxuQ29ubmVjdGlvbiB0eXBlOiAgICAgICAgJXNcbiIsY3huYW1lW2N4dHlwZV0pOworICAg IGlmIChhdXRvZmxvdykgeworICAgICAgICBwcmludGYoIkN1cnJlbnQgZmxvdy1jb250cm9sOiAg ICVzXG4iLCBmbG9uYW1lW2N4Zmxvd1tjeHR5cGVdXSk7CisgICAgICAgIHByaW50ZigiU3dpdGNo ZXMgYXV0b21hdGljYWxseTogeWVzXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYo IkN1cnJlbnQgZmxvdy1jb250cm9sOiAgICVzXG4iLCBmbG9uYW1lW2Zsb3ddKTsKKyAgICAgICAg cHJpbnRmKCJTd2l0Y2hlcyBhdXRvbWF0aWNhbGx5OiBub1xuIik7CisgICAgfQorICAgIHByaW50 ZigiXG5EZWZhdWx0cyBieSBjb25uZWN0aW9uIHR5cGU6XG4iKTsKKyAgICBkZWJ1ZyhGMTExLCJz aG9mbG93IGN4dHlwZSIsY3huYW1lW2N4dHlwZV0sY3h0eXBlKTsKKyAgICBkZWJ1ZyhGMTAxLCJz aG9mbG93IGZsb3ciLCIiLGZsb3cpOworICAgIGZvciAoaSA9IDA7IGkgPCBuY3huYW1lOyBpKysp IHsKKyNpZmRlZiBOT0xPQ0FMCisgICAgICAgIGlmIChpID4gMCkgYnJlYWs7CisjZW5kaWYgLyog Tk9MT0NBTCAqLworI2lmbmRlZiBORVRDT05OCisgICAgICAgIGlmIChpID4gMikgYnJlYWs7Cisj ZW5kaWYgLyogTkVUQ09OTiAqLworI2lmbmRlZiBERUNORVQKKyAgICAgICAgaWYgKGkgPT0gQ1hU X0RFQ05FVCkgY29udGludWU7CisjZW5kaWYgLyogREVDTkVUICovCisjaWZuZGVmIERFQ05FVAor I2lmbmRlZiBTVVBFUkxBVAorICAgICAgICBpZiAoaSA9PSBDWFRfTEFUKSBjb250aW51ZTsKKyNl bmRpZiAvKiBTVVBFUkxBVCAqLworI2VuZGlmIC8qIERFQ05FVCAqLworI2lmbmRlZiBDS19ORVRC SU9TCisgICAgICAgIGlmIChpID09IENYVF9ORVRCSU9TKSBjb250aW51ZTsKKyNlbmRpZiAvKiBD S19ORVRCSU9TICovCisjaWZuZGVmIE5QSVBFCisgICAgICAgIGlmIChpID09IENYVF9OUElQRSkg Y29udGludWU7CisjZW5kaWYgLyogTlBJUEUgKi8KKyNpZm5kZWYgTkVUQ01ECisgICAgICAgIGlm IChpID09IENYVF9QSVBFKSBjb250aW51ZTsKKyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZm5kZWYg QU5ZWDI1CisgICAgICAgIGlmIChpID09IENYVF9YMjUpIGNvbnRpbnVlOworI2VuZGlmIC8qIEFO WVgyNSAqLworICAgICAgICB4ID0gY3hmbG93W2ldOworICAgICAgICBkZWJ1ZyhGMTAxLCJzaG9m bG93IHgiLCIiLHgpOworICAgICAgICBpZiAoeCA8IG5mbG9uYW1lKQorICAgICAgICAgIHByaW50 ZigiICAlLTE0czogJXNcbiIsY3huYW1lW2ldLGZsb25hbWVbeF0pOworICAgICAgICBlbHNlCisg ICAgICAgICAgcHJpbnRmKCIgICUtMTRzOiAoJWQpXG4iLGN4bmFtZVtpXSx4KTsKKyAgICB9Cisg ICAgcHJpbnRmKCJcbiIpOworfQorCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBBTllYMjUKK2lu dAorc2hveDI1KG4pIGludCBuOyB7CisgICAgaWYgKG5ldHR5cGUgPT0gTkVUX1NYMjUpIHsKKyAg ICAgICAgcHJpbnRmKCJTdW5MaW5rIFguMjUgViVkLiVkIix4MjV2ZXIgLyAxMCx4MjV2ZXIgJSAx MCk7CisgICAgICAgIGlmICh0dG5wcm90byA9PSBOUF9YMykgcHJpbnRmKCIsIFBBRCBYLjMsIFgu MjgsIFguMjkgcHJvdG9jb2wsIik7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9 IDA7CisgICAgICAgIHByaW50ZigiIFJldmVyc2UgY2hhcmdlIGNhbGwgJXMiLAorICAgICAgICAg ICAgICAgcmV2Y2FsbCA/ICJzZWxlY3RlZCIgOiAibm90IHNlbGVjdGVkIik7CisgICAgICAgIHBy aW50ZiAoIiwgQ2xvc2VkIHVzZXIgZ3JvdXAgIik7CisgICAgICAgIGlmIChjbG9zZ3IgPiAtMSkK KyAgICAgICAgICBwcmludGYgKCIlZCIsY2xvc2dyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg IHByaW50ZiAoIm5vdCBzZWxlY3RlZCIpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNl IG4gPSAwOworICAgICAgICBwcmludGYoIiBDYWxsIHVzZXIgZGF0YSAlcy5cbiIsIGN1ZGF0YSA/ IHVkYXRhIDogIm5vdCBzZWxlY3RlZCIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICB9IGVsc2UgaWYg KG5ldHR5cGUgPT0gTkVUX1ZYMjUpIHsKKyAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1gzKSBw cmludGYoIiwgUEFEIFguMywgWC4yOCwgWC4yOSBwcm90b2NvbCwiKTsKKyAgICAgICAgcHJpbnRm KCJcbiIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICAgICAgcHJpbnRmKCIgUmV2ZXJzZSBjaGFyZ2Ug Y2FsbCAlcyIsCisgICAgICAgICAgICAgICByZXZjYWxsID8gInNlbGVjdGVkIiA6ICJub3Qgc2Vs ZWN0ZWQiKTsKKyAgICAgICAgcHJpbnRmICgiLCBDbG9zZWQgdXNlciBncm91cCBbdW5zdXBwb3J0 ZWRdIik7CisgICAgICAgIGlmIChjbG9zZ3IgPiAtMSkKKyAgICAgICAgICBwcmludGYgKCIlZCIs Y2xvc2dyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZiAoIm5vdCBzZWxlY3RlZCIp OworICAgICAgICBwcmludGYgKCIsIik7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2Ug biA9IDA7CisgICAgICAgIHByaW50ZigiIENhbGwgdXNlciBkYXRhICVzLlxuIiwgY3VkYXRhID8g dWRhdGEgOiAibm90IHNlbGVjdGVkIik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAgIH0gZWxzZSBpZiAo bmV0dHlwZSA9PSBORVRfSVgyNSkgeworICAgICAgICBwcmludGYoIkFJWCBOUEkgWC4yNVxuIik7 CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o LTEpOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIlxuIFJldmVyc2UgY2hhcmdlIGNhbGwg JXMiLAorICAgICAgICAgICAgICAgcmV2Y2FsbCA/ICJzZWxlY3RlZCIgOiAibm90IHNlbGVjdGVk Iik7CisgICAgICAgIHByaW50ZiAoIiwgQ2xvc2VkIHVzZXIgZ3JvdXAgW3Vuc3VwcG9ydGVkXSIp OworICAgICAgICBpZiAoY2xvc2dyID4gLTEpCisgICAgICAgICAgcHJpbnRmICgiJWQiLGNsb3Nn cik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYgKCJub3Qgc2VsZWN0ZWQiKTsKKyAg ICAgICAgcHJpbnRmICgiLCIpOworICAgICAgICBwcmludGYoIlxuIENhbGwgdXNlciBkYXRhICVz LlxuIiwgY3VkYXRhID8gdWRhdGEgOiAibm90IHNlbGVjdGVkIik7CisgICAgfQorICAgIHJldHVy bihuKTsKK30KKworI2lmbmRlZiBJQk1YMjUKK2ludAorc2hvcGFkKG4pIGludCBuOyB7CisgICAg aW50IGk7CisgICAgcHJpbnRmKCJcblguMyBQQUQgUGFyYW1ldGVyczpcbiIpOworICAgIGlmICgr K24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAw OworICAgIGZvciAoaSA9IDA7IGkgPCBucGFkeDM7IGkrKykgeworICAgICAgICBwcmludGYoIiBb JWRdICVzICVkXG4iLHBhZHgzdGFiW2ldLmt3dmFsLHBhZHgzdGFiW2ldLmt3ZCwKKyAgICAgICAg ICAgICAgIHBhZHBhcm1zW3BhZHgzdGFiW2ldLmt3dmFsXSk7CisgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAg IH0KKyAgICByZXR1cm4obik7Cit9CisjZW5kaWYgLyogSUJNWDI1ICovCisjZW5kaWYgLyogQU5Z WDI1ICovCisKK1ZPSUQKK3Nob3BhcmMoKSB7CisgICAgZXh0ZXJuIGludCByZWxpYWJsZSwgc3Rv cGJpdHMsIGNsc29uZGlzYzsKKyAgICBpbnQgaTsgY2hhciAqczsKKyAgICBsb25nIHp6OworCisj aWZkZWYgTkVXRlRQCisgICAgaWYgKGZ0cGlzY29ubmVjdGVkKCkpIHsKKyAgICAgICAgc2hvZnRw KDEpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorI2VuZGlmIC8qIE5FV0ZUUCAqLwor CisgICAgcHJpbnRmKCJDb21tdW5pY2F0aW9ucyBQYXJhbWV0ZXJzOlxuIik7CisKKyAgICBpZiAo bmV0d29yaworI2lmZGVmIElLU0QKKyAgICAgICAgIHx8IGluc2VydmVyCisjZW5kaWYgLyogSUtT RCAqLworICAgICAgICAgKSB7CisgICAgICAgIHByaW50ZigiIE5ldHdvcmsgSG9zdDogJXMlcyIs dHRuYW1lLAorICAgICAgICAgICAgICAgKHJlbGlhYmxlID09IFNFVF9PTiB8fCAocmVsaWFibGUg PT0gU0VUX0FVVE8gJiYgIWxvY2FsKQorI2lmZGVmIFROX0NPTVBPUlQKKyAgICAgICAgICAgICAg ICYmICFpc3RuY29tcG9ydCgpCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworI2lmZGVmIElLU0QK KyAgICAgICAgICAgICAgIHx8IGluc2VydmVyCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAg ICAgICAgKSA/ICIgKHJlbGlhYmxlKSIgOiAiIik7CisjaWZkZWYgVE5fQ09NUE9SVAorICAgICAg ICBpZiAoaXN0bmNvbXBvcnQoKSkgeworICAgICAgICAgICAgaW50IG1vZGVtc3RhdGU7CisgICAg ICAgICAgICBjaGFyICogb2Zsb3csICogaWZsb3cgPSAiIiwgKiBwYXJpdHksICogc3RvcHNpemUs ICogc2lnbmF0dXJlOworICAgICAgICAgICAgaW50IGJhdWQgPSB0bmNfZ2V0X2JhdWQoKTsKKwor ICAgICAgICAgICAgc3dpdGNoICh0bmNfZ2V0X29mbG93KCkpIHsKKyAgICAgICAgICAgICAgY2Fz ZSBUTkNfQ1RMX09GTE9XX05PTkU6CisgICAgICAgICAgICAgICAgb2Zsb3cgPSAibm9uZSI7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19Y T05fWE9GRjoKKyAgICAgICAgICAgICAgICBvZmxvdyA9ICJ4b24veG9mZiI7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVE5DX0NUTF9PRkxPV19SVFNfQ1RTOgor ICAgICAgICAgICAgICAgIG9mbG93ID0gInJ0cy9jdHMiOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICBjYXNlIFROQ19DVExfT0ZMT1dfRENEOgorICAgICAgICAgICAgICAg IG9mbG93ID0gImRjZCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh c2UgVE5DX0NUTF9PRkxPV19EU1I6CisgICAgICAgICAgICAgICAgb2Zsb3cgPSAiZHNyIjsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg ICAgICBvZmxvdyA9ICIodW5rbm93bikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dp dGNoICh0bmNfZ2V0X2lmbG93KCkpIHsKKyAgICAgICAgICAgICAgY2FzZSBUTkNfQ1RMX0lGTE9X X05PTkU6CisgICAgICAgICAgICAgICAgaWZsb3cgPSAibm9uZSI7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVE5DX0NUTF9JRkxPV19YT05fWE9GRjoKKyAgICAg ICAgICAgICAgICBpZmxvdyA9ICJ4b24veG9mZiI7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgVE5DX0NUTF9JRkxPV19SVFNfQ1RTOgorICAgICAgICAgICAgICAg IGlmbG93ID0gInJ0cy9jdHMiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICBjYXNlIFROQ19DVExfSUZMT1dfRFRSOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmbG93ID0gb2Zsb3c7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKHRuY19nZXRfcGFyaXR5KCkpIHsKKyAgICAgICAg ICAgICAgY2FzZSBUTkNfUEFSX05PTkU6CisgICAgICAgICAgICAgICAgcGFyaXR5ID0gIm5vbmUi OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFROQ19QQVJfT0RE OgorICAgICAgICAgICAgICAgIHBhcml0eSA9ICJvZGQiOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICBjYXNlIFROQ19QQVJfRVZFTjoKKyAgICAgICAgICAgICAgICBwYXJp dHkgPSAiZXZlbiI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug VE5DX1BBUl9NQVJLOgorICAgICAgICAgICAgICAgIHBhcml0eSA9ICJtYXJrIjsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUTkNfUEFSX1NQQUNFOgorICAgICAg ICAgICAgICAgIHBhcml0eSA9ICJzcGFjZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcGFyaXR5ID0gIih1bmtub3duKSI7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzd2l0Y2ggKHRuY19nZXRfc3RvcHNpemUoKSkg eworICAgICAgICAgICAgICBjYXNlIFROQ19TQl8xOgorICAgICAgICAgICAgICAgIHN0b3BzaXpl ID0gIjEiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFROQ19T Ql8xXzU6CisgICAgICAgICAgICAgICAgc3RvcHNpemUgPSAiMS41IjsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUTkNfU0JfMjoKKyAgICAgICAgICAgICAgICBz dG9wc2l6ZSA9ICIyIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgICAgICBzdG9wc2l6ZSA9ICIodW5rbm93bikiOworICAgICAgICAg ICAgfQorCSAgICBzaWduYXR1cmUgPSAoY2hhciAqKXRuY19nZXRfc2lnbmF0dXJlKCk7CisgICAg ICAgICAgICBwcmludGYoIlxuICBTaWduYXR1cmUgICAgICAgICAgICA6ICVzXG4iLHNpZ25hdHVy ZT9zaWduYXR1cmU6IiIpOworICAgICAgICAgICAgaWYgKGJhdWQgPD0gMCkKKyAgICAgICAgICAg ICAgcHJpbnRmKCIgIFNwZWVkICAgICAgICAgICAgICAgIDogKHVua25vd24pXG4iKTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIgIFNwZWVkICAgICAgICAgICAgICAg IDogJWRcbiIsIGJhdWQpOworICAgICAgICAgICAgcHJpbnRmKCIgIE91dGJvdW5kIEZsb3cgQ29u dHJvbDogJXNcbiIsIG9mbG93KTsKKyAgICAgICAgICAgIHByaW50ZigiICBJbmJvdW5kIEZsb3cg Q29udHJvbCA6ICVzXG4iLCBpZmxvdyk7CisgICAgICAgICAgICBwcmludGYoIiAgUGFyaXR5ICAg ICAgICAgICAgICAgOiAlc1xuIiwgcGFyaXR5KTsKKyAgICAgICAgICAgIHByaW50ZigiICBEYXRh IFNpemUgICAgICAgICAgICA6ICVkXG4iLCB0bmNfZ2V0X2RhdGFzaXplKCkpOworICAgICAgICAg ICAgcHJpbnRmKCIgIFN0b3AgQml0cyAgICAgICAgICAgIDogJXNcbiIsIHN0b3BzaXplKTsKKyAg ICAgICAgICAgIHByaW50ZigiICBEVFIgU2lnbmFsICAgICAgICAgICA6ICVkXG4iLCB0bmNfZ2V0 X2R0cl9zdGF0ZSgpKTsKKyAgICAgICAgICAgIHByaW50ZigiICBSVFMgU2lnbmFsICAgICAgICAg ICA6ICVkXG4iLCB0bmNfZ2V0X3J0c19zdGF0ZSgpKTsKKyAgICAgICAgICAgIHByaW50ZigiICBN b2RlbSBTdGF0ZTpcbiIpOworICAgICAgICAgICAgbW9kZW1zdGF0ZSA9IHRuY19nZXRfbXMoKTsK KyAgICAgICAgICAgIGlmIChtb2RlbXN0YXRlICYgVE5DX01TX0VER0VfUklORykKKyAgICAgICAg ICAgICAgcHJpbnRmKCIgICAgVHJhaWxpbmcgRWRnZSBSaW5nIERldGVjdG9yIE9uXG4iKTsKKyAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIgICAgVHJhaWxpbmcgRWRnZSBS aW5nIERldGVjdG9yIE9mZlxuIik7CisgICAgICAgICAgICBpZiAobW9kZW1zdGF0ZSAmIFROQ19N U19DVFNfU0lHKQorICAgICAgICAgICAgICBwcmludGYoIiAgICBDVFMgU2lnbmFsIE9uXG4iKTsK KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIgICAgQ1RTIFNpZ25hbCBP ZmZcbiIpOworICAgICAgICAgICAgaWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfRFNSX1NJRykKKyAg ICAgICAgICAgICAgcHJpbnRmKCIgICAgRFNSIFNpZ25hbCBPblxuIik7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIHByaW50ZigiICAgIERTUiBTaWduYWwgT2ZmXG4iKTsKKyAgICAg ICAgICAgIGlmIChtb2RlbXN0YXRlICYgVE5DX01TX1JJX1NJRykKKyAgICAgICAgICAgICAgcHJp bnRmKCIgICAgUmluZyBJbmRpY2F0b3IgT25cbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICBwcmludGYoIiAgICBSaW5nIEluZGljYXRvciBPZmZcbiIpOworICAgICAgICAgICAg aWYgKG1vZGVtc3RhdGUgJiBUTkNfTVNfUkxTRF9TSUcpCisgICAgICAgICAgICAgIHByaW50Zigi ICAgIFJMU0QgKENEKSBTaWduYWwgT25cbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICBwcmludGYoIiAgICBSTFNEIChDRCkgU2lnbmFsIE9mZlxuIik7CisgICAgICAgICAgICBw cmludGYoIlxuIik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgfSBl bHNlIHsKKworICAgICAgICBwcmludGYoIiAlczogJXMlcywgc3BlZWQ6ICIsCisjaWZkZWYgT1My CisgICAgICAgICAgICAgICAiUG9ydCIsCisjZWxzZQorICAgICAgICAgICAgICAgIkxpbmUiLAor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgdHRuYW1lLAorI2lmZGVmIENLX1RUWUZE CisgICAgICAgICAgICAgICAobG9jYWwgJiYKKyNpZmRlZiBWTVMKKyAgICAgICAgICAgICAgICB2 bXN0dHlmZCgpIDwgMAorI2Vsc2UKKyAgICAgICAgICAgICAgICB0dHlmZCA9PSAtMQorI2VuZGlm IC8qIFZNUyAqLworICAgICAgICAgICAgICAgICkgPworICAgICAgICAgICAgICAgICAiIChjbG9z ZWQpIiA6CisgICAgICAgICAgICAgICAgICAgKHJlbGlhYmxlID09IFNFVF9PTiA/ICIgKHJlbGlh YmxlKSIgOiAiIikKKyNlbHNlCisgICAgICAgICAgICAgICAiIgorI2VuZGlmIC8qIENLX1RUWUZE ICovCisgICAgICAgICAgICAgICApOworICAgICAgICBpZiAoCisjaWZkZWYgQ0tfVFRZRkQKKyNp ZmRlZiBWTVMKKyAgICAgICAgICAgIHZtc3R0eWZkKCkgPCAwCisjZWxzZQorICAgICAgICAgICAg dHR5ZmQgPT0gLTEKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAgIHx8CisjZW5kaWYgLyog Q0tfVFRZRkQgKi8KKyAgICAgICAgICAgICh6eiA9IHR0Z3NwZCgpKSA8IDApIHsKKyAgICAgICAg ICAgIHByaW50ZigidW5rbm93biIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg KHNwZWVkID09IDg4ODApIHByaW50ZigiNzUvMTIwMCIpOworICAgICAgICAgICAgZWxzZSBpZiAo c3BlZWQgPT0gMTM0KSBwcmludGYoIjEzNC41Iik7CisgICAgICAgICAgICBlbHNlIHByaW50Zigi JWxkIix6eik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5ldHdvcmsKKyNpZmRlZiBJS1NE CisgICAgICAgICB8fCBpbnNlcnZlcgorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICkKKyAg ICAgIHByaW50ZigiXG4gTW9kZTogIik7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCIsIG1vZGU6 ICIpOworICAgIGlmIChsb2NhbCkgcHJpbnRmKCJsb2NhbCIpOyBlbHNlIHByaW50ZigicmVtb3Rl Iik7CisgICAgaWYgKG5ldHdvcmsgPT0gMAorI2lmZGVmIElLU0QKKyAgICAgICAgICYmICFpbnNl cnZlcgorI2VuZGlmLyogSUtTRCAqLworICAgICAgICAgKSB7CisjaWZkZWYgQ0tfVEFQSQorICAg ICAgICBpZiAodHR0YXBpICYmICF0YXBpcGFzcyApCisgICAgICAgICAgcHJpbnRmKCIsIG1vZGVt OiAlcyIsIlRBUEkiKTsKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIENLX1RBUEkgKi8KKyAgICAg ICAgcHJpbnRmKCIsIG1vZGVtOiAlcyIsZ21kbXR5cCgpKTsKKyAgICB9IGVsc2UgeworI2lmZGVm IE5FVENPTk4KKyAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQQSkgcHJpbnRmKCIsIFRDUC9J UCIpOworICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9UQ1BCKSBwcmludGYoIiwgVENQL0lQIik7 CisgICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX0RFQykgeworICAgICAgICAgICBpZiAodHRucHJv dG8gPT0gTlBfTEFUKSBwcmludGYoIiwgREVDbmV0IExBVCIpOworICAgICAgICAgICBlbHNlIGlm ICggdHRucHJvdG8gPT0gTlBfQ1RFUk0gKSBwcmludGYoIiwgREVDbmV0IENURVJNIik7CisgICAg ICAgICAgIGVsc2UgcHJpbnRmKCIsIERFQ25ldCIpOworICAgICAgIH0KKyAgICAgICBpZiAobmV0 dHlwZSA9PSBORVRfU0xBVCkgcHJpbnRmKCIsIE1lcmlkaWFuIFRlY2hub2xvZ2llcycgU3VwZXJM QVQiKTsKKyNpZmRlZiBORVRGSUxFCisgICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX0ZJTEUpIHBy aW50ZigiLCBsb2NhbCBmaWxlIik7CisjZW5kaWYgLyogTkVURklMRSAqLworI2lmZGVmIE5FVENN RAorICAgICAgIGlmIChuZXR0eXBlID09IE5FVF9DTUQpIHByaW50ZigiLCBwaXBlIik7CisjZW5k aWYgLyogTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgICAgaWYgKG5ldHR5cGUgPT0gTkVU X1BUWSkgcHJpbnRmKCIsIHBzZXVkb3Rlcm1pbmFsIik7CisjZW5kaWYgLyogTkVUUFRZICovCisj aWZkZWYgTkVURExMCisgICAgICAgaWYgKG5ldHR5cGUgPT0gTkVUX0RMTCkgcHJpbnRmKCIsIGR5 bmFtaWMgbG9hZCBsaWJyYXJ5Iik7CisjZW5kaWYgLyogTkVURExMICovCisgICAgICAgaWYgKG5l dHR5cGUgPT0gTkVUX1BJUEUpIHByaW50ZigiLCBOYW1lZCBQaXBlcyIpOworI2lmZGVmIFNTSEJV SUxUSU4KKyAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfU1NIKQorICAgICAgICAgcHJpbnRmKCIs IFNlY3VyZSBTaGVsbCBwcm90b2NvbCAoU0VDVVJFKSIpOworI2VuZGlmIC8qIFNTSEJVSUxUSU4g Ki8KKyNpZmRlZiBBTllYMjUKKyAgICAgICBpZiAoc2hveDI1KDApIDwgMCkgcmV0dXJuOworI2Vu ZGlmIC8qIEFOWVgyNSAqLworICAgICAgIGlmIChJU19URUxORVQoKSkgeworICAgICAgICAgICBw cmludGYoIiwgdGVsbmV0IHByb3RvY29sIik7CisgICAgICAgICAgIGlmICgwCisjaWZkZWYgQ0tf RU5DUllQVElPTgorICAgICAgICAgICAgICAgfHwgY2tfdG5fZW5jcnlwdGluZygpICYmIGNrX3Ru X2RlY3J5cHRpbmcoKQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNpZmRlZiBDS19TU0wK KyAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxhZyB8fCBzc2xfYWN0aXZlX2ZsYWcKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICBwcmludGYo IiAoU0VDVVJFKSIpOworICAgICAgIH0KKyNpZmRlZiBSTE9HQ09ERQorICAgICAgIGVsc2UgaWYg KHR0bnByb3RvID09IE5QX1JMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9LNExPR0lOIHx8CisgICAg ICAgICAgICAgICAgdHRucHJvdG8gPT0gTlBfSzVMT0dJTikKKyAgICAgICAgIHByaW50ZigiLCBy bG9naW4gcHJvdG9jb2wiKTsKKyAgICAgICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJ TiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTikKKyAgICAgICAgIHByaW50ZigiLCBybG9naW4g cHJvdG9jb2wgKFNFQ1VSRSkiKTsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIENLX0tF UkJFUk9TCisjaWZkZWYgS1JCNQorICAgICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0s1VTJV KQorICAgICAgICAgcHJpbnRmKCIsIEtlcmJlcm9zIDUgVXNlciB0byBVc2VyIHByb3RvY29sIChT RUNVUkUpIik7CisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisj ZW5kaWYgLyogTkVUQ09OTiAqLworICAgIH0KKyAgICBwcmludGYoIlxuIik7CisgICAgaWYgKGh3 cGFyaXR5ICYmIGxvY2FsICYmICFuZXR3b3JrKQorICAgICAgcyA9IHBhcm5hbSgoY2hhcilod3Bh cml0eSk7CisgICAgZWxzZQorICAgICAgcyA9IHBhcm5hbSgoY2hhcilwYXJpdHkpOworICAgIHBy aW50ZigiIFBhcml0eTogJXMlcyIsaHdwYXJpdHkgPyAiaGFyZHdhcmUgIiA6ICIiLCBzKTsKKyNp Zm5kZWYgTk9MT0NBTAorICAgIGlmIChsb2NhbCAmJiAhbmV0d29yaykgeworICAgICAgICBpbnQg c2I7CisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgYyA9IHNbMF07CisgICAgICAgIGlmIChpc2xv d2VyKGMpKSBjID0gdG91cHBlcihjKTsKKyAgICAgICAgc2IgPSBzdG9wYml0czsKKyAgICAgICAg aWYgKHNiIDwgMSkgeworICAgICAgICAgICAgc2IgPSAoc3BlZWQgPiAwICYmIHNwZWVkIDw9IDEx MEwpID8gMiA6IDE7CisgICAgICAgICAgICBwcmludGYoIiwgc3RvcC1iaXRzOiAoZGVmYXVsdCki KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiLCBzdG9wLWJpdHM6ICVk IixzYik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGh3cGFyaXR5KQorICAgICAgICAgIHByaW50 ZigiICg4JWMlZCkiLGMsc2IpOworICAgICAgICBlbHNlIGlmIChwYXJpdHkpCisgICAgICAgICAg cHJpbnRmKCIgKDclYyVkKSIsYyxzYik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYo IiAoOE4lZCkiLHNiKTsKKyAgICAgICAgcHJpbnRmKCJcbiBEIik7CisgICAgfSBlbHNlCisgICAg ICBwcmludGYoIiwgZCIpOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworICAgIHByaW50ZigidXBs ZXg6ICVzLCAiLCBkdXBsZXggPyAiaGFsZiIgOiAiZnVsbCIpOworICAgIGRlYnVnKEYxMDEsInNo b3BhcnAgZmxvdyIsIiIsZmxvdyk7CisgICAgcHJpbnRmKCJmbG93OiAlcyIsIGZsb25hbWVbZmxv d10pOworICAgIHByaW50ZigiLCBoYW5kc2hha2U6ICIpOworICAgIGlmICh0dXJuKSBwcmludGYo IiVkXG4iLHR1cm5jaCk7IGVsc2UgcHJpbnRmKCJub25lXG4iKTsKKyNpZmRlZiBDT01NRU5UCisg ICAgaWYgKGxvY2FsICYmICFuZXR3b3JrKSB7ICAgICAgICAgICAgLyogU0VUIENBUlJJRVItV0FU Q0ggKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlmIChjYXJyaWVyID09IENBUl9P RkYpIHMgPSAib2ZmIjsKKyAgICAgICAgZWxzZSBpZiAoY2FycmllciA9PSBDQVJfT04pIHMgPSAi b24iOworICAgICAgICBlbHNlIGlmIChjYXJyaWVyID09IENBUl9BVVQpIHMgPSAiYXV0byI7Cisg ICAgICAgIGVsc2UgcyA9ICJ1bmtub3duIjsKKyAgICAgICAgcHJpbnRmKCIgQ2Fycmllci13YXRj aDogJXMiLCBzKTsKKyAgICAgICAgaWYgKGNhcnJpZXIgPT0gQ0FSX09OKSB7CisgICAgICAgICAg ICBpZiAoY2R0aW1vKSBwcmludGYoIiwgdGltZW91dDogJWQgc2VjIiwgY2R0aW1vKTsKKyAgICAg ICAgICAgIGVsc2UgcHJpbnRmKCIsIHRpbWVvdXQ6IG5vbmUiKTsKKyAgICAgICAgfQorI2lmZGVm IENPTU1FTlQKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHByaW50ZigiLCBjbG9z ZS1vbi1kaXNjb25uZWN0OiAlc1xuIixzaG93b2ZmKGNsc29uZGlzYykpOworCisjaWZkZWYgVU5J WCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVVDUCBsb2NrZmlsZSwgVU5JWCBvbmx5 ICovCisgICAgaWYgKGxvY2FsKSB7CisjaWZuZGVmIE5PVVVDUAorICAgICAgICBpZiAoIW5ldHdv cmsgJiYgaGFzbG9jayAmJiAqZmxmbmFtKQorICAgICAgICAgIHByaW50ZigiIExvY2tmaWxlOiAl cyIsZmxmbmFtKTsKKyNpZm5kZWYgVVNFVFRZTE9DSworICAgICAgICBpZiAoIW5ldHdvcmsgJiYg aGFzbG9jayAmJiBsb2NrMlswXSkKKyAgICAgICAgICBwcmludGYoIlxuIFNlY29uZGFyeSBsb2Nr ZmlsZTogJXMiLGxvY2syKTsKKyNlbmRpZiAvKiBVU0VUVFlMT0NLICovCisjZWxzZQorI2lmZGVm IFFOWAorICAgICAgICB7CisgICAgICAgICAgICBleHRlcm4gaW50IHFueHBvcnRsb2NrLCBxbnhv cGVuY291bnQoKTsKKyAgICAgICAgICAgIGlmIChsb2NhbCkKKyAgICAgICAgICAgICAgcHJpbnRm KCIgUW54LXBvcnQtbG9jazogJXMsIE9wZW4gY291bnQ6ICVkIiwKKyAgICAgICAgICAgICAgICAg ICAgIHNob3dvZmYocW54cG9ydGxvY2spLAorICAgICAgICAgICAgICAgICAgICAgcW54b3BlbmNv dW50KCkKKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgIHByaW50ZigiIFFueC1wb3J0LWxvY2s6ICVzIiwgc2hvd29mZihxbnhwb3J0bG9jaykp OworICAgICAgICB9CisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogTk9VVUNQICovCisgICAg ICAgIHByaW50ZigiXG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyICogczsKKyAgICAg ICAgcyA9IHR0Z2xja2RpcigpOworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgcHJp bnRmKCIgTG9ja2ZpbGUgZGlyZWN0b3J5OiAlc1xuIiwgKnMgPyBzIDogIihub25lKSIpOworICAg IH0KKyNlbmRpZiAvKiBVTklYICovCisjaWZuZGVmIE1BQ09TWAorICAgIGlmICghbG9jYWwpIHsK KyAgICAgICAgcHJpbnRmKCIgVHlwaWNhbCBwb3J0IGRldmljZSBuYW1lOiAlc1xuIix0dGd0cG4o KSk7CisgICAgfQorI2VuZGlmCS8qIE1BQ09TWCAqLworICAgIGlmIChsb2NhbCkgeworICAgICAg ICBpbnQgaTsKKyAgICAgICAgaSA9IHBhcml0eSA/IDcgOiA4OworICAgICAgICBpZiAoaSA9PSA4 KSBpID0gKGNtYXNrID09IDAxNzcpID8gNyA6IDg7CisgICAgICAgIHByaW50ZigiIFRlcm1pbmFs IGJ5dGVzaXplOiAlZCwiLGkpOworICAgICAgICBwcmludGYoIiBlc2NhcGUgY2hhcmFjdGVyOiAl ZCAoXiVjKVxuIixlc2NhcGUsY3RsKGVzY2FwZSkpOworICAgIH0KK30KKworaW50CitzaG90Y3Ao bikgaW50IG47IHsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQ QSB8fCBuZXR0eXBlID09IE5FVF9UQ1BCKSB7CisgICAgICAgIHByaW50ZigiU0VUIFRDUCBwYXJh bWV0ZXJzOlxuIik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiBSZXZlcnNlIERO UyBsb29rdXA6ICVzXG4iLCBzaG93b29hKHRjcF9yZG5zKSk7CisgICAgICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisKKyNp ZmRlZiBDS19ETlNfU1JWCisgICAgICAgIHByaW50ZigiIEROUyBTZXJ2aWNlIFJlY29yZHMgbG9v a3VwOiAlc1xuIiwgc2hvd29vYSh0Y3BfZG5zX3NydikpOworICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2VuZGlm IC8qIENLX0ROU19TUlYgKi8KKworI2lmbmRlZiBOT1RDUE9QVFMKKyNpZmRlZiBTT0xfU09DS0VU CisjaWZkZWYgU09fS0VFUEFMSVZFCisgICAgICAgIHByaW50ZigiIEtlZXBhbGl2ZTogJXNcbiIs IHNob3dvZmYodGNwX2tlZXBhbGl2ZSkpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIFNPX0tF RVBBTElWRSAqLworCisjaWZkZWYgU09fTElOR0VSCisgICAgICAgIHByaW50ZigiIExpbmdlcjog JXMiLCB0Y3BfbGluZ2VyID8gIm9uLCAiIDogIm9mZlxuIiApOworICAgICAgICBpZiAodGNwX2xp bmdlcikgeworICAgICAgICAgICAgaWYgKHRjcF9saW5nZXJfdG1vKQorICAgICAgICAgICAgICBw cmludGYoIiVkIHggMTAgbWlsbGlzZWNvbmRzXG4iLHRjcF9saW5nZXJfdG1vKTsKKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCJubyB0aW1lb3V0XG4iKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIFNPX0xJTkdFUiAqLworCisjaWZkZWYgU09fRE9O VFJPVVRFCisgICAgICAgIHByaW50ZigiIERvbnRSb3V0ZTogJXNcbiIsIHRjcF9kb250cm91dGUg PyAib24iIDogIm9mZiIgKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBTT19ET05UUk9VVEUg Ki8KKworI2lmZGVmIFRDUF9OT0RFTEFZCisgICAgICAgIHByaW50ZigiIE5vZGVsYXk6ICVzXG4i LCBzaG93b2ZmKHRjcF9ub2RlbGF5KSk7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogVENQX05P REVMQVkgKi8KKworI2lmZGVmIFNPX1NOREJVRgorICAgICAgICBpZiAodGNwX3NlbmRidWYgPD0g MCkKKyAgICAgICAgICBwcmludGYoIiBTZW5kIGJ1ZmZlcjogKGRlZmF1bHQgc2l6ZSlcbiIpOwor ICAgICAgICBlbHNlCisgICAgICAgICAgcHJpbnRmKCIgU2VuZCBidWZmZXI6ICVkIGJ5dGVzXG4i LCB0Y3Bfc2VuZGJ1Zik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogU09fU05EQlVGICovCisj aWZkZWYgU09fUkNWQlVGCisgICAgICAgIGlmICh0Y3BfcmVjdmJ1ZiA8PSAwKQorICAgICAgICAg IHByaW50ZigiIFJlY2VpdmUgYnVmZmVyOiAoZGVmYXVsdCBzaXplKVxuIik7CisgICAgICAgIGVs c2UKKyAgICAgICAgICBwcmludGYoIiBSZWNlaXZlIGJ1ZmZlcjogJWQgYnl0ZXNcbiIsIHRjcF9y ZWN2YnVmKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KKyNlbmRpZiAv KiBTT0xfU09DS0VUICovCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisgICAgICAgIHByaW50Zigi IGFkZHJlc3M6ICVzXG4iLHRjcF9hZGRyZXNzID8gdGNwX2FkZHJlc3MgOiAiKG5vbmUpIik7Cisg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOworI2lmbmRlZiBOT0hUVFAKKyAgICAgICAgcHJpbnRmKCIgaHR0cC1wcm94 eTogJXNcbiIsdGNwX2h0dHBfcHJveHkgPyB0Y3BfaHR0cF9wcm94eSA6ICIobm9uZSkiKTsKKyAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7 IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogTk9IVFRQICovCisjaWZkZWYgTlQKKyNpZmRlZiBDS19T T0NLUworICAgICAgICBwcmludGYoIiBzb2Nrcy1zZXJ2ZXI6ICVzXG4iLHRjcF9zb2Nrc19zdnIg PyB0Y3Bfc29ja3Nfc3ZyIDogIihub25lKSIpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyNpZmRlZiBDS19T T0NLU19OUworICAgICAgICBwcmludGYoIiBzb2Nrcy1uYW1lLXNlcnZlcjogJXNcbiIsCisgICAg ICAgICAgICAgICB0Y3Bfc29ja3NfbnMgPyB0Y3Bfc29ja3NfbnMgOiAiKG5vbmUpIik7CisgICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBl bHNlIG4gPSAwOworI2VuZGlmIC8qIENLX1NPQ0tTX05TICovCisjZW5kaWYgLyogQ0tfU09DS1Mg Ki8KKyNlbmRpZiAvKiBOVCAqLworICAgIH0KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICBy ZXR1cm4obik7Cit9CisKKyNpZmRlZiBUTkNPREUKK2ludAorc2hvdG9wdChuKSBpbnQgbjsgewor ICAgIGludCBvcHQ7CisKKyAgICBwcmludGYoIiUtMjFzICUxMnMgJTEycyAlMTJzICUxMnNcblxu IiwKKyAgICAgICAgICAgIlRlbG5ldCBPcHRpb24iLCJNZSAoY2xpZW50KSIsIlUgKGNsaWVudCki LAorICAgICAgICAgICAiTWUgKHNlcnZlcikiLCJVIChzZXJ2ZXIpIik7CisgICAgbiArPSAyOwor ICAgIGlmIChuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxz ZSBuID0gMDsKKworICAgIGZvciAoIG9wdCA9IFRFTE9QVF9GSVJTVDsgb3B0IDw9IFRFTE9QVF9M QVNUOyBvcHQrKykgeworICAgICAgICBzd2l0Y2ggKG9wdCkgeworICAgICAgICAgIGNhc2UgVEVM T1BUX0FVVEhFTlRJQ0FUSU9OOgorICAgICAgICAgIGNhc2UgVEVMT1BUX0VOQ1JZUFRJT046Cisg ICAgICAgICAgY2FzZSBURUxPUFRfVFRZUEU6CisgICAgICAgICAgY2FzZSBURUxPUFRfTkFXUzoK KyAgICAgICAgICBjYXNlIFRFTE9QVF9CSU5BUlk6CisgICAgICAgICAgY2FzZSBURUxPUFRfTkVX RU5WSVJPTjoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9TTkRMT0M6CisgICAgICAgICAgY2FzZSBU RUxPUFRfWERJU1BMT0M6CisgICAgICAgICAgY2FzZSBURUxPUFRfU0dBOgorICAgICAgICAgIGNh c2UgVEVMT1BUX0VDSE86CisgICAgICAgICAgY2FzZSBURUxPUFRfS0VSTUlUOgorICAgICAgICAg IGNhc2UgVEVMT1BUX1NUQVJUX1RMUzoKKyAgICAgICAgICBjYXNlIFRFTE9QVF9GT1JXQVJEX1g6 CisgICAgICAgICAgY2FzZSBURUxPUFRfQ09NUE9SVDoKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg ICBwcmludGYoIiUwM2QgJS0xN3MgIiwKKyAgICAgICAgICAgICAgIG9wdCwgVEVMT1BUKG9wdCkK KyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigiJTEycyAlMTJzICIsCisgICAgICAg ICAgICAgICBURUxPUFRfTU9ERShURUxPUFRfREVGX0NfTUVfTU9ERShvcHQpKSwKKyAgICAgICAg ICAgICAgIFRFTE9QVF9NT0RFKFRFTE9QVF9ERUZfQ19VX01PREUob3B0KSkKKyAgICAgICAgICAg ICAgICk7CisgICAgICAgIHByaW50ZigiJTEycyAlMTJzXG4iLAorICAgICAgICAgICAgICAgVEVM T1BUX01PREUoVEVMT1BUX0RFRl9TX01FX01PREUob3B0KSksCisgICAgICAgICAgICAgICBURUxP UFRfTU9ERShURUxPUFRfREVGX1NfVV9NT0RFKG9wdCkpCisgICAgICAgICAgICAgICApOworCisg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEp OyBlbHNlIG4gPSAwOworICAgICAgICBpZiAoc3N0ZWxuZXQpCisgICAgICAgICAgcHJpbnRmKCIl MjFzICUxMnMgJTEycyAlMTJzICUxMnNcbiIsCisgICAgICAgICAgICAgICAgICIiLAorICAgICAg ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgIChU RUxPUFRfTUUob3B0KT8iV0lMTCI6IldPTlQiKSwKKyAgICAgICAgICAgICAgICAgKFRFTE9QVF9V KG9wdCk/IkRPIjoiRE9OVCIpCisgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICBwcmludGYoIiUyMXMgJTEycyAlMTJzICUxMnMgJTEyc1xuIiwKKyAgICAgICAgICAg ICAgICAgIiIsCisgICAgICAgICAgICAgICAgIChURUxPUFRfTUUob3B0KT8iV0lMTCI6IldPTlQi KSwKKyAgICAgICAgICAgICAgICAgKFRFTE9QVF9VKG9wdCk/IkRPIjoiRE9OVCIpLAorICAgICAg ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgIiIKKyAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigt MSk7IGVsc2UgbiA9IDA7CisgICAgfQorICAgIHJldHVybihuKTsKK30KKworaW50CitzaG90ZWwo bikgaW50IG47IHsKKyAgICBleHRlcm4gaW50IHRuX2R1cGxleDsKKyNpZmRlZiBDS19FTlZJUk9O TUVOVAorICAgIGV4dGVybiBpbnQgdG5fZW52X2ZsZzsKKyAgICBleHRlcm4gY2hhciB0bl9lbnZf YWNjdFtdOworICAgIGV4dGVybiBjaGFyIHRuX2Vudl9qb2JbXTsKKyAgICBleHRlcm4gY2hhciB0 bl9lbnZfcHJudFtdOworICAgIGV4dGVybiBjaGFyIHRuX2Vudl9zeXNbXTsKKyAgICBleHRlcm4g Y2hhciAqIHRuX2Vudl91c2VydmFyWzhdWzJdOworICAgIGludCB4OworI2VuZGlmIC8qIENLX0VO VklST05NRU5UICovCisjaWZkZWYgQ0tfU05ETE9DCisgICAgZXh0ZXJuIGNoYXIgKiB0bl9sb2M7 CisjZW5kaWYgLyogQ0tfU05ETE9DICovCisgICAgcHJpbnRmKCJTRVQgVEVMTkVUIHBhcmFtZXRl cnM6XG4gZWNobzogJXNcbiBOVlQgbmV3bGluZS1tb2RlOiAiLAorICAgICAgICAgICB0bl9kdXBs ZXggPyAibG9jYWwiIDogInJlbW90ZSIpOworICAgIHN3aXRjaCAodG5fbmxtKSB7CisgICAgICBj YXNlIFROTF9DUk5VTDogcHJpbnRmKCIlc1xuIiwib2ZmIChjci1udWwpIik7IGJyZWFrOworICAg ICAgY2FzZSBUTkxfQ1JMRjogIHByaW50ZigiJXNcbiIsIm9uIChjci1sZikiKTsgYnJlYWs7Cisg ICAgICBjYXNlIFROTF9DUjogICAgcHJpbnRmKCIlc1xuIiwicmF3IChjcikiKTsgYnJlYWs7Cisg ICAgICBjYXNlIFROTF9MRjogICAgcHJpbnRmKCIlc1xuIiwiKGxmKSIpOyBicmVhazsKKyAgICB9 CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7 IGVsc2UgbiA9IDA7CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICB7CisgICAgICAgIGlu dCB0eXBlID0gY2tfdG5fYXV0aGVudGljYXRlZCgpOworICAgICAgICBwcmludGYoIiBhdXRoZW50 aWNhdGlvbjogIik7CisgICAgICAgIHN3aXRjaCAoc3N0ZWxuZXQgPworICAgICAgICAgICAgICAg IFRFTE9QVF9VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA6CisgICAgICAgICAgICAgICAg IFRFTE9QVF9NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikKKyAgICAgICAgICAgICAgICAp IHsKKyAgICAgICAgICBjYXNlIFROX05HX0FDOiBwcmludGYoICJhY2NlcHRlZCAiICk7IGJyZWFr OworICAgICAgICAgIGNhc2UgVE5fTkdfUkY6IHByaW50ZiggInJlZnVzZWQgICIgKTsgYnJlYWs7 CisgICAgICAgICAgY2FzZSBUTl9OR19SUTogcHJpbnRmKCAicmVxdWVzdGVkIik7IGJyZWFrOwor ICAgICAgICAgIGNhc2UgVE5fTkdfTVU6IHByaW50ZiggInJlcXVpcmVkICIpOyBicmVhazsKKyAg ICAgICAgfQorCisjaWZkZWYgQ0tfU1NMCisgICAgICAgIGlmICgoc3NsX2FjdGl2ZV9mbGFnIHx8 IHRsc19hY3RpdmVfZmxhZykgJiYKKyAgICAgICAgICAgICBja190bl9hdXRoX3ZhbGlkKCkgPT0g QVVUSF9WQUxJRCAmJgorICAgICAgICAgICAgICghVEVMT1BUX1UoVEVMT1BUX0FVVEhFTlRJQ0FU SU9OKSB8fAorICAgICAgICAgICAgICAgdHlwZSA9PSBBVVRIVFlQRV9OVUxMIHx8CisgICAgICAg ICAgICAgICB0eXBlID09IEFVVEhUWVBFX0FVVE8pKQorICAgICAgICAgICAgcHJpbnRmKCIgICBp biB1c2U6IFguNTA5IGNlcnRpZmljYXRlXG4iKTsKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIENL X1NTTCAqLworICAgICAgICAgIHByaW50ZigiICAgaW4gdXNlOiAlc1xuIixBVVRIVFlQRV9OQU1F KHR5cGUpKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAgICAgIGlmIChmb3J3YXJkX2ZsYWcpCisgICAg ICAgICAgcHJpbnRmKCIgIGNyZWRlbnRpYWxzIGZvcndhcmRpbmcgcmVxdWVzdGVkICVzXG4iLAor ICAgICAgICAgICAgICAgICBmb3J3YXJkZWRfdGlja2V0cyA/ICJhbmQgY29tcGxldGVkIiA6Cisg ICAgICAgICAgICAgICAgICJidXQgbm90IGNvbXBsZXRlZCIpOworICAgICAgICBlbHNlCisgICAg ICAgICAgcHJpbnRmKCIgIGNyZWRlbnRpYWxzIGZvcndhcmRpbmcgZGlzYWJsZWRcbiIpOworICAg ICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsg ZWxzZSBuID0gMDsKKyAgICB9CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgeworICAgICAgICBpbnQgaSx4OworICAgICAgICBpbnQgZV90 eXBlID0gY2tfdG5fZW5jcnlwdGluZygpOworICAgICAgICBpbnQgZF90eXBlID0gY2tfdG5fZGVj cnlwdGluZygpOworICAgICAgICBjaGFyICogZV9zdHIgPSBOVUxMLCAqIGRfc3RyID0gTlVMTDsK KyAgICAgICAgc3RhdGljIHN0cnVjdCBrZXl0YWIgKiB0bmV0YmwgPSBOVUxMOworICAgICAgICBz dGF0aWMgaW50IG50bmV0YmwgPSAwOworCisgICAgICAgIHggPSBja19nZXRfY3J5cHRfdGFibGUo JnRuZXRibCwmbnRuZXRibCk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG50bmV0Ymw7IGkr KykgeworICAgICAgICAgICAgaWYgKGVfdHlwZSA9PSB0bmV0YmxbaV0ua3d2YWwpCisgICAgICAg ICAgICAgIGVfc3RyID0gdG5ldGJsW2ldLmt3ZDsKKyAgICAgICAgICAgIGlmIChkX3R5cGUgPT0g dG5ldGJsW2ldLmt3dmFsKQorICAgICAgICAgICAgICBkX3N0ciA9IHRuZXRibFtpXS5rd2Q7Cisg ICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCIgZW5jcnlwdGlvbjogIik7CisgICAgICAgIHN3aXRj aCAoVEVMT1BUX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pKSB7CisgICAgICAgICAgLyogVGhp cyBzaG91bGQgYmUgY2hhbmdlZCB0byByZXBvcnQgYm90aCBNRSBhbmQgVSBtb2RlcyAqLworICAg ICAgICAgIGNhc2UgVE5fTkdfQUM6IHByaW50ZiggImFjY2VwdGVkICIgKTsgYnJlYWs7CisgICAg ICAgICAgY2FzZSBUTl9OR19SRjogcHJpbnRmKCAicmVmdXNlZCAgIiApOyBicmVhazsKKyAgICAg ICAgICBjYXNlIFROX05HX1JROiBwcmludGYoICJyZXF1ZXN0ZWQiKTsgYnJlYWs7CisgICAgICAg ICAgY2FzZSBUTl9OR19NVTogcHJpbnRmKCAicmVxdWlyZWQgIik7IGJyZWFrOworICAgICAgICB9 CisgICAgICAgIHByaW50ZigiICAgICAgIGluIHVzZTogIik7CisgICAgICAgIHN3aXRjaCAoKGVf dHlwZSA/IDEgOiAwKSB8IChkX3R5cGUgPyAyIDogMCkpIHsKKyAgICAgICAgICBjYXNlIDA6Cisg ICAgICAgICAgICBwcmludGYoInBsYWluIHRleHQgaW4gYm90aCBkaXJlY3Rpb25zIik7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBwcmludGYoIiVz IG91dHB1dCwgcGxhaW4gdGV4dCBpbnB1dCIsZV9zdHIpOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcHJpbnRmKCJwbGFpbiB0ZXh0IG91dHB1dCwg JXMgaW5wdXQiLGRfc3RyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzoK KyAgICAgICAgICAgIHByaW50ZigiJXMgb3V0cHV0LCAlcyBpbnB1dCIsZV9zdHIsZF9zdHIpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAg ICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsg ZWxzZSBuID0gMDsKKyAgICB9CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2lmZGVmIElL U19PUFRJT04KKyAgICBwcmludGYoIiBrZXJtaXQ6ICIpOworICAgIHN3aXRjaCAoVEVMT1BUX1Vf TU9ERShURUxPUFRfS0VSTUlUKSkgeworICAgICAgY2FzZSBUTl9OR19BQzogcHJpbnRmKCAidSwg YWNjZXB0ZWQ7ICAiICk7IGJyZWFrOworICAgICAgY2FzZSBUTl9OR19SRjogcHJpbnRmKCAidSwg cmVmdXNlZDsgICAiICk7IGJyZWFrOworICAgICAgY2FzZSBUTl9OR19SUTogcHJpbnRmKCAidSwg cmVxdWVzdGVkOyAiKTsgYnJlYWs7CisgICAgICBjYXNlIFROX05HX01VOiBwcmludGYoICJ1LCBy ZXF1aXJlZDsgICIpOyBicmVhazsKKyAgICB9CisgICAgc3dpdGNoIChURUxPUFRfTUVfTU9ERShU RUxPUFRfS0VSTUlUKSkgeworICAgICAgY2FzZSBUTl9OR19BQzogcHJpbnRmKCAibWUsIGFjY2Vw dGVkOyAgIiApOyBicmVhazsKKyAgICAgIGNhc2UgVE5fTkdfUkY6IHByaW50ZiggIm1lLCByZWZ1 c2VkOyAgICIgKTsgYnJlYWs7CisgICAgICBjYXNlIFROX05HX1JROiBwcmludGYoICJtZSwgcmVx dWVzdGVkOyAiKTsgYnJlYWs7CisgICAgICBjYXNlIFROX05HX01VOiBwcmludGYoICJtZSwgcmVx dWlyZWQ7ICAiKTsgYnJlYWs7CisgICAgfQorICAgIGlmIChURUxPUFRfVShURUxPUFRfS0VSTUlU KSkKKyAgICAgIHByaW50ZigiIHUsICVzIiwKKyAgICAgICAgICAgICBURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0LnVfc3RhcnQgPworICAgICAgICAgICAgICJzdGFydGVkIiA6CisgICAg ICAgICAgICAgInN0b3BwZWQiCisgICAgICAgICAgICAgKTsKKyAgICBlbHNlCisgICAgICBwcmlu dGYoIiB1LCBuL2EiKTsKKyAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpKQorICAgICAg cHJpbnRmKCIgbWUsICVzOyIsCisgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQp Lmtlcm1pdC5tZV9zdGFydCA/CisgICAgICAgICAgICAgInN0YXJ0ZWQiIDoKKyAgICAgICAgICAg ICAic3RvcHBlZCIKKyAgICAgICAgICAgICApOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiIG1l LCBuL2E7Iik7CisgICAgcHJpbnRmKCJcbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIElLU19P UFRJT04gKi8KKyAgICBwcmludGYoIiBCSU5BUlkgbmV3bGluZS1tb2RlOiAiKTsKKyAgICBzd2l0 Y2ggKHRuX2JfbmxtKSB7CisgICAgICBjYXNlIFROTF9DUk5VTDogcHJpbnRmKCIlc1xuIiwib2Zm IChjci1udWwpIik7IGJyZWFrOworICAgICAgY2FzZSBUTkxfQ1JMRjogIHByaW50ZigiJXNcbiIs Im9uIChjci1sZikiKTsgYnJlYWs7CisgICAgICBjYXNlIFROTF9DUjogICAgcHJpbnRmKCIlc1xu IiwicmF3IChjcikiKTsgYnJlYWs7CisgICAgICBjYXNlIFROTF9MRjogICAgcHJpbnRmKCIlc1xu IiwiKGxmKSIpOyBicmVhazsKKyAgICB9CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgYmluYXJ5 LW1vZGU6ICIpOworICAgIHN3aXRjaCAoVEVMT1BUX1VfTU9ERShURUxPUFRfQklOQVJZKSkgewor ICAgICAgY2FzZSBUTl9OR19BQzogcHJpbnRmKCAidSwgYWNjZXB0ZWQ7ICAiICk7IGJyZWFrOwor ICAgICAgY2FzZSBUTl9OR19SRjogcHJpbnRmKCAidSwgcmVmdXNlZDsgICAiICk7IGJyZWFrOwor ICAgICAgY2FzZSBUTl9OR19SUTogcHJpbnRmKCAidSwgcmVxdWVzdGVkOyAiKTsgYnJlYWs7Cisg ICAgICBjYXNlIFROX05HX01VOiBwcmludGYoICJ1LCByZXF1aXJlZDsgICIpOyBicmVhazsKKyAg ICB9CisgICAgc3dpdGNoIChURUxPUFRfTUVfTU9ERShURUxPUFRfQklOQVJZKSkgeworICAgICAg Y2FzZSBUTl9OR19BQzogcHJpbnRmKCAibWUsIGFjY2VwdGVkOyAiICk7IGJyZWFrIDsKKyAgICAg IGNhc2UgVE5fTkdfUkY6IHByaW50ZiggIm1lLCByZWZ1c2VkOyAiICk7IGJyZWFrOworICAgICAg Y2FzZSBUTl9OR19SUTogcHJpbnRmKCAibWUsIHJlcXVlc3RlZDsgIik7IGJyZWFrOworICAgICAg Y2FzZSBUTl9OR19NVTogcHJpbnRmKCAibWUsIHJlcXVpcmVkOyAgIik7IGJyZWFrOworICAgIH0K KyAgICBwcmludGYoInUsICVzOyBtZSwgJXNcbiIsCisgICAgICAgICAgIFRFTE9QVF9VKFRFTE9Q VF9CSU5BUlkpID8gIkJJTkFSWSIgOiAiTlZUIiwKKyAgICAgICAgICAgVEVMT1BUX01FKFRFTE9Q VF9CSU5BUlkpID8gIkJJTkFSWSIgOiAiTlZUIgorICAgICAgICAgICApOworICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOwor ICAgIHByaW50ZigiIGJpbmFyeS10cmFuc2Zlci1tb2RlOiAlc1xuIixzaG93b2ZmKHRuX2JfeGZl cikpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o LTEpOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIGJ1ZyBiaW5hcnktbWUtbWVhbnMtdS10b286 ICVzXG4iLHNob3dvZmYodG5fYl9tZXUpKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBidWcg YmluYXJ5LXUtbWVhbnMtbWUtdG9vOiAlc1xuIixzaG93b2ZmKHRuX2JfdW1lKSk7CisgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9 IDA7CisgICAgcHJpbnRmKCIgYnVnIHNiLWltcGxpZXMtd2lsbC1kbzogJXNcbiIsc2hvd29mZih0 bl9zYl9idWcpKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBidWcgYXV0aC1rcmI1LWRlczog JXNcbiIsc2hvd29mZih0bl9hdXRoX2tyYjVfZGVzX2J1ZykpOworICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAgIHBy aW50ZigiIHRlcm1pbmFsLXR5cGU6ICIpOworICAgIGlmICh0bl90ZXJtKSB7CisgICAgICAgIHBy aW50ZigiJXNcbiIsdG5fdGVybSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciAqcDsKKyNp ZmRlZiBPUzIKKyAgICAgICAgcCA9ICh0dF90eXBlID49IDAgJiYgdHRfdHlwZSA8PSBtYXhfdHQp ID8KKyAgICAgICAgICB0dF9pbmZvW3R0X3R5cGVdLnhfbmFtZSA6CisgICAgICAgICAgICAiVU5L Tk9XTiI7CisjZWxzZQorICAgICAgICBwID0gZ2V0ZW52KCJURVJNIik7CisjZW5kaWYgLyogT1My ICovCisgICAgICAgIGlmIChwKQorICAgICAgICAgIHByaW50Zigibm9uZSAoJXMgd2lsbCBiZSB1 c2VkKVxuIixwKTsKKyAgICAgICAgZWxzZSBwcmludGYoIm5vbmVcbiIpOworICAgIH0KKyAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBu ID0gMDsKKyNpZmRlZiBDS19FTlZJUk9OTUVOVAorICAgIHByaW50ZigiIGVudmlyb25tZW50OiAl c1xuIiwgc2hvd29mZih0bl9lbnZfZmxnKSk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgICBB Q0NPVU5UOiAlc1xuIix0bl9lbnZfYWNjdCk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgICBE SVNQTEFZOiAlc1xuIiwoY2hhciAqKXRuX2dldF9kaXNwbGF5KCkgPworICAgICAgICAgICAgKGNo YXIgKil0bl9nZXRfZGlzcGxheSgpIDogIiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiICAg Sk9CICAgIDogJXNcbiIsdG5fZW52X2pvYik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgICBQ UklOVEVSOiAlc1xuIix0bl9lbnZfcHJudCk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVsc2UgbiA9IDA7CisjaWZuZGVmIE5PU1BMCisg ICAgcHJpbnRmKCIgICBVU0VSICAgOiAlc1xuIix1aWRidWYpOworICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworI2VuZGlm IC8qIE5PU1BMICovCisgICAgcHJpbnRmKCIgICBTWVNURU0gOiAlc1xuIix0bl9lbnZfc3lzKTsK KyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsg ZWxzZSBuID0gMDsKKyAgICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisgICAgICAgIGlmICh0 bl9lbnZfdXNlcnZhclt4XVswXSAmJiB0bl9lbnZfdXNlcnZhclt4XVsxXSkgeworICAgICAgICAg ICAgcHJpbnRmKCIgICAlLTdzOiAlc1xuIix0bl9lbnZfdXNlcnZhclt4XVswXSwKKyAgICAgICAg ICAgICAgICAgICB0bl9lbnZfdXNlcnZhclt4XVsxXSk7CisgICAgICAgICAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAg ICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworI2lmZGVmIENLX1NO RExPQworICAgIHByaW50ZigiICBMT0NBVElPTjogJXNcbiIsIHRuX2xvYyA/IHRuX2xvYyA6ICIi KTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0x KTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBDS19TTkRMT0MgKi8KKyNpZmRlZiBDS19GT1JXQVJE X1gKKyAgICBwcmludGYoIiAuWGF1dGhvcml0eS1maWxlOiAlc1xuIiwgKGNoYXIgKilYYXVGaWxl TmFtZSgpID8KKyAgICAgICAgICAgIChjaGFyICopWGF1RmlsZU5hbWUoKSA6ICIobm9uZSkiKTsK KyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsg ZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyAgICByZXR1cm4obik7Cit9 CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZmRlZiBDS19ORVRCSU9TCitzdGF0aWMgaW50Citz aG9uYihuKSBpbnQgbjsgeworICAgIHByaW50ZigiTkVUQklPUyBwYXJhbWV0ZXJzOlxuIik7Cisg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigtMSk7IGVs c2UgbiA9IDA7CisgICAgcHJpbnRmKCIgQVBJICAgICAgIDogJXNcbiIsCisgICAgICAgICAgIE5l dGJldWlBUEkgPworICAgICAgICAgICAiTkVUQVBJLkRMTCAtIElCTSBFeHRlbmRlZCBTZXJ2aWNl cyBvciBOb3ZlbGwgTmV0d2FyZSBSZXF1ZXN0ZXIiCisgICAgICAgICAgIDogIkFDU05FVEIuRExM IC0gSUJNIE5ldHdvcmsgVHJhbnNwb3J0IFNlcnZpY2VzLzIiICkgOworICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4gPSAwOworICAg IHByaW50ZigiIExvY2FsIE5hbWU6IFslc11cbiIsIE5ldEJpb3NOYW1lKTsKKyAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsK KyAgICBwcmludGYoIiBBZGFwdGVyICAgOiAlZFxuIiwgTmV0Qmlvc0FkYXB0ZXIpOworICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oLTEpOyBlbHNlIG4g PSAwOworICAgIGlmIChOZXRCaW9zTFNOID4gMHhGRikgeworICAgICAgICBwcmludGYoIiBTZXNz aW9uICAgOiAlZFxuIiwgTmV0Qmlvc0xTTik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRm KCIgU2Vzc2lvbiAgIDogbm9uZSBhY3RpdmVcbiIpOworICAgIH0KKyAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsgZWxzZSBuID0gMDsKKyAgICBy ZXR1cm4obik7Cit9CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworCisjaWZuZGVmIE5PTkVUCitp bnQKK3Nob25ldCgpIHsKKworI2lmbmRlZiBORVRDT05OCisgICAgcHJpbnRmKCJcbk5vIG5ldHdv cmtzIGFyZSBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0XG4iKTsKKworI2Vs c2UKKyNpZmRlZiBOT0xPQ0FMCisgICAgcHJpbnRmKCJcbk5vIG5ldHdvcmtzIGFyZSBzdXBwb3J0 ZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0XG4iKTsKKworI2Vsc2UgLyogcmVzdCBvZiB0 aGlzIHJvdXRpbmUgKi8KKworICAgIGludCBpLCBuID0gNDsKKworI2lmbmRlZiBOT0RJQUwKKyAg ICBpZiAobm5ldGRpciA8PSAxKSB7CisgICAgICAgIHByaW50ZigiXG5OZXR3b3JrIGRpcmVjdG9y eTogJXNcbiIsbmV0ZGlyWzBdID8gbmV0ZGlyWzBdIDogIihub25lKSIpOworICAgICAgICBuKys7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHByaW50ZigiXG5OZXR3b3Jr IGRpcmVjdG9yaWVzOlxuIik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBubmV0ZGlyOyBpKysp IHsKKyAgICAgICAgICAgIHByaW50ZigiJTJkLiAlc1xuIixpLG5ldGRpcltpXSk7CisgICAgICAg ICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBl bHNlIG4gPSAwOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZk ZWYgU1NIQ01ECisgICAgeworICAgICAgICBleHRlcm4gY2hhciAqIHNzaGNtZDsKKyAgICAgICAg cHJpbnRmKCJTU0ggQ09NTUFORDogJXNcbiIsc3NoY21kID8gc3NoY21kIDogInNzaCAtZSBub25l Iik7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgfQorI2VuZGlmIC8qIFNTSENNRCAqLworCisjaWZkZWYg T1MyCisgICAgcHJpbnRmKCJcbk5ldHdvcmsgYXZhaWxhYmlsaXR5OlxuIik7CisjZWxzZQorICAg IHByaW50ZigiXG5TdXBwb3J0ZWQgbmV0d29ya3M6XG4iKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworCisjaWZkZWYgVk1TCisKKyNpZmRlZiBUQ1BXQVJFCisgICAgcHJpbnRmKCIgUHJv Y2VzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbiBUQ1B3YXJlIGZvciBPcGVuVk1TIik7CisjZWxzZQor I2lmZGVmIE1VTFRJTkVUCisgICAgcHJpbnRmKCIgVEdWIE11bHRpTmV0IFRDUC9JUCIpOworI2Vs c2UKKyNpZmRlZiBXSU5UQ1AKKyAgICBwcmludGYoIiBXT0xMT05HT05HIFdJTi9UQ1AiKTsKKyNl bHNlCisjaWZkZWYgREVDX1RDUElQCisgICAgeworICAgICAgICBzdGF0aWMgJERFU0NSSVBUT1Io dGNwX2Rlc2MsIl9UQ1AwOiIpOworICAgICAgICBpbnQgc3RhdHVzOworICAgICAgICBsb25nIGRl dmNsYXNzOworICAgICAgICBzdGF0aWMgaW50IGl0bWNvZCA9IERWSSRfREVWQ0xBU1M7CisKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgIHN0YXR1cyA9IExJQiRHRVREVkkoJml0bWNvZCwgMCwgJnRj cF9kZXNjLCAmZGV2Y2xhc3MpOworI2Vsc2UKKyAgICAgICAgLyogTWFydGluIFppbnNlciA5Lzk2 ICovCisgICAgICAgIHN0YXR1cyA9IGxpYiRnZXRkdmkoJml0bWNvZCwgMCwgJnRjcF9kZXNjLCAm ZGV2Y2xhc3MpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKChzdGF0dXMgJiAx KSAmJiAoZGV2Y2xhc3MgPT0gREMkX1NDT00pKQorICAgICAgICAgIHByaW50ZigiIFByb2Nlc3Mg U29mdHdhcmUgQ29ycG9yYXRpb24gVENQd2FyZSBmb3IgT3BlblZNUyIpOworICAgICAgICBlbHNl CisjaWZkZWYgVUNYNTAKKyAgICAgICAgICBwcmludGYoIiBERUMgVENQL0lQIFNlcnZpY2VzIGZv ciAoT3BlbilWTVMgNS4wIik7CisjZWxzZQorICAgICAgICAgIHByaW50ZigiIERFQyBUQ1AvSVAg U2VydmljZXMgZm9yIChPcGVuKVZNUyIpOworI2VuZGlmIC8qIFVDWDUwICovCisgICAgfQorI2Vs c2UKKyNpZmRlZiBDTVVfVENQSVAKKyAgICBwcmludGYoIiBDTVUtT3BlblZNUy9JUCIpOworI2Vs c2UKKyAgICBwcmludGYoIiBOb25lIik7CisjZW5kaWYgLyogQ01VX1RDUElQICovCisjZW5kaWYg LyogREVDX1RDUElQICovCisjZW5kaWYgLyogV0lOVENQICovCisjZW5kaWYgLyogTVVMVElORVQg Ki8KKyNlbmRpZiAvKiBUQ1BXQVJFICovCisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNpZmRlZiBUTkNPREUKKyAgICBw cmludGYoIiwgVEVMTkVUIHByb3RvY29sXG5cbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgbiA9IHNob3Rl bChuKTsKKyAgICBpZiAobiA8IDApIHJldHVybigwKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIFRO Q09ERSAqLworICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiXG4iKTsK KyAgICBuID0gc2hvdGNwKCsrbik7CisgICAgaWYgKG4gPCAwKSByZXR1cm4oMCk7CisjZWxzZSAv KiBOb3QgVk1TICovCisKKyNpZmRlZiBTVU5YMjUKKyAgICBwcmludGYoIiBTdW5MaW5rIFguMjVc biIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogU1VOWDI1ICovCisKKyNpZmRlZiBTVFJBVFVTWDI1 CisgICAgcHJpbnRmKCIgU3RyYXR1cyBWT1MgWC4yNVxuIik7CisgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAv KiBTVFJBVFVTWDI1ICovCisKKyNpZmRlZiBJQk1YMjUKKyAgICBwcmludGYoIiBJQk0gQUlYIFgu MjVcbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogSUJNWDI1ICovCisKKyNpZmRlZiBIUFgyNQor ICAgIHByaW50ZigiIEhQLVVYIFguMjVcbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogSFBYMjUg Ki8KKworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgp KQorICAgICAgICBwcmludGYoIiBTU0ggVjEgYW5kIFYyIHByb3RvY29sc1xuIik7CisgICAgZWxz ZQorICAgICAgICBwcmludGYoIiBTU0ggVjEgYW5kIFYyIHByb3RvY29scyAtIG5vdCBhdmFpbGFi bGVcbiIpOworI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVmIERFQ05FVAorI2lmZGVm IE9TMgorI2lmZGVmIE5UCisgICAgaWYgKGRuZXRfYXZhaWwpCisgICAgICBwcmludGYoIiBERUNu ZXQsIExBVCBhbmQgQ1RFUk0gcHJvdG9jb2xzXG4iKTsKKyAgICBlbHNlCisgICAgICBwcmludGYo IiBERUNuZXQsIExBVCBhbmQgQ1RFUk0gcHJvdG9jb2xzIC0gbm90IGF2YWlsYWJsZVxuIik7Cisg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKKyNlbHNlIC8qIE5UICovCisgICAgaWYgKGRuZXRfYXZhaWwpCisgICAgICBwcmlu dGYoIiBERUNuZXQsIExBVCBwcm90b2NvbFxuIik7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCIg REVDbmV0LCBMQVQgcHJvdG9jb2wgLSBub3QgYXZhaWxhYmxlXG4iKTsKKyAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2Vu ZGlmIC8qIE5UICovCisjZWxzZQorICAgIHByaW50ZigiIERFQ25ldFxuIik7CisgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBERUNORVQgKi8KKworI2lmZGVmIE5QSVBFCisg ICAgcHJpbnRmKCIgTmFtZWQgUGlwZXNcbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogTlBJUEUg Ki8KKworI2lmZGVmIENLX05FVEJJT1MKKyAgICBpZiAobmV0Ymlvc0F2YWlsKQorICAgICAgcHJp bnRmKCIgTkVUQklPU1xuIik7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCIgTkVUQklPUyAtIG5v dCBhdmFpbGFibGVcbiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworCisj aWZkZWYgU1VQRVJMQVQKKyAgICBpZiAoc2xhdF9hdmFpbCkKKyAgICAgIHByaW50ZigiIFN1cGVy TEFUXG4iKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIiBTdXBlckxBVCAtIG5vdCBhdmFpbGFi bGVcbiIpIDsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIFNVUEVSTEFUICovCisKKyNpZmRlZiBUQ1BT T0NLRVQKKyAgICBpZiAoCisjaWZkZWYgT1MyCisgICAgICAgIHRjcF9hdmFpbAorI2Vsc2UKKyAg ICAgICAgMQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICApIHsKKyAgICAgICAgY2hhciBpcGFk ZHJbMTZdOworCisgICAgICAgIGlmIChnZXRsb2NhbGlwYWRkcnMoaXBhZGRyLDE2LDApIDwgMCkg eworI2lmZGVmIE9TMk9OTFkKKyAgICAgICAgICAgIHByaW50ZigiIFRDUC9JUCB2aWEgJXNcbiIs IHRjcG5hbWUpOworI2Vsc2UKKyAgICAgICAgICAgIHByaW50ZigiIFRDUC9JUFxuIik7CisjZW5k aWYgLyogT1MyT05MWSAqLworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYg KCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGludCBpID0gMTsKKyNpZmRlZiBPUzJPTkxZCisgICAgICAgICAgcHJpbnRmKCIg VENQL0lQIFslMTZzXSB2aWEgJXNcbiIsIGlwYWRkciwgdGNwbmFtZSk7CisjZWxzZQorICAgICAg ICAgIHByaW50ZigiIFRDUC9JUCBbJTE2c11cbiIsaXBhZGRyKTsKKyNlbmRpZiAvKiBPUzJPTkxZ ICovCisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworCisgICAgICAgICAgICB3aGlsZSAoZ2V0bG9jYWxpcGFk ZHJzKGlwYWRkciwxNixpKyspID49IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgICAg ICAgWyUxNnNdXG4iLGlwYWRkcik7CisgICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBpZiAobmV0dHlwZSA9PSBORVRfVENQQikgeworICAgICAg ICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgbiA9IHNob3RjcCgrK24pOworICAgICAg ICAgICAgaWYgKG4gPCAwKSByZXR1cm4oMCk7CisjaWZkZWYgVE5DT0RFCisgICAgICAgICAgICBw cmludGYoIlxuIik7CisgICAgICAgICAgICBuID0gc2hvdGVsKCsrbik7CisgICAgICAgICAgICBp ZiAobiA8IDApIHJldHVybigwKTsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYo IiBUQ1AvSVAgLSBub3QgYXZhaWxhYmxlJXNcbiIsdGNwbmFtZVswXSA/IHRjcG5hbWUgOiAiIiAp OworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOworI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KKworI2lmZGVmIENLX05FVEJJT1MKKyAgICBpZiAobmV0Ymlvc0F2YWlsICYmIG5l dHR5cGUgPT0gTkVUX0JJT1MpIHsKKyAgICAgICBwcmludGYoIlxuIikgOworICAgICAgIGlmICgo biA9IHNob25iKCsrbikpIDwgMCkgcmV0dXJuKDApOworICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgfQorI2Vu ZGlmIC8qIENLX05FVEJJT1MgKi8KKworI2VuZGlmIC8qIFZNUyAqLworCisgICAgcHJpbnRmKCJc bkFjdGl2ZSBuZXR3b3JrIGNvbm5lY3Rpb246XG4iKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworCisgICAgaWYgKG5l dHdvcmspIHsKKyAgICAgICAgcHJpbnRmKCIgSG9zdDogJXMiLHR0bmFtZSk7CisgICAgICAgIGlm ICgobmV0dHlwZSA9PSBORVRfVENQQSB8fCBuZXR0eXBlID09IE5FVF9UQ1BCKSAmJiAqaXBhZGRy KQorICAgICAgICAgIHByaW50ZigiIFslc10iLGlwYWRkcik7CisgICAgfSBlbHNlCisgICAgICBw cmludGYoIiBIb3N0OiBub25lIik7CisgICAgcHJpbnRmKCIsIHZpYTogIik7CisgICAgaWYgKG5l dHR5cGUgPT0gTkVUX1RDUEEgfHwgbmV0dHlwZSA9PSBORVRfVENQQikKKyAgICAgIHByaW50Zigi dGNwL2lwXG4iKTsKKyAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9TWDI1KQorICAgICAgcHJp bnRmKCJTdW5MaW5rIFguMjVcbiIpOworICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1ZYMjUp CisgICAgICBwcmludGYoIlN0cmF0dXMgVk9TIFguMjVcbiIpOworICAgIGVsc2UgaWYgKG5ldHR5 cGUgPT0gTkVUX0lYMjUpCisgICAgICBwcmludGYoIklCTSBBSVggWC4yNVxuIik7CisgICAgZWxz ZSBpZiAobmV0dHlwZSA9PSBORVRfSFgyNSkKKyAgICAgIHByaW50ZigiSFAtVVggWC4yNVxuIik7 CisgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfREVDKSB7CisgICAgICAgIGlmICggdHRucHJv dG8gPT0gTlBfTEFUICkKKyAgICAgICAgICBwcmludGYoIkRFQ25ldCBMQVRcbiIpOworICAgICAg ICBlbHNlIGlmICggdHRucHJvdG8gPT0gTlBfQ1RFUk0gKQorICAgICAgICAgIHByaW50ZigiREVD bmV0IENURVJNXG4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZigiREVDbmV0XG4i KTsKKyAgICB9IGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX1BJUEUpCisgICAgICBwcmludGYoIk5h bWVkIFBpcGVzXG4iKTsKKyAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9CSU9TKQorICAgICAg cHJpbnRmKCJOZXRCSU9TXG4iKTsKKyAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9TTEFUKQor ICAgICAgcHJpbnRmKCJTdXBlckxBVFxuIik7CisKKyNpZmRlZiBORVRGSUxFCisgICAgZWxzZSBp ZiAoIG5ldHR5cGUgPT0gTkVUX0ZJTEUgKQorICAgICAgcHJpbnRmKCJsb2NhbCBmaWxlXG4iKTsK KyNlbmRpZiAvKiBORVRGSUxFICovCisjaWZkZWYgTkVUQ01ECisgICAgZWxzZSBpZiAoIG5ldHR5 cGUgPT0gTkVUX0NNRCApCisgICAgICBwcmludGYoInBpcGVcbiIpOworI2VuZGlmIC8qIE5FVENN RCAqLworI2lmZGVmIE5FVFBUWQorICAgIGVsc2UgaWYgKCBuZXR0eXBlID09IE5FVF9QVFkgKQor ICAgICAgICBwcmludGYoInBzZXVkb3Rlcm1pbmFsXG4iKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8K KyNpZmRlZiBORVRETEwKKyAgICBlbHNlIGlmICggbmV0dHlwZSA9PSBORVRfRExMICkKKyAgICAg IHByaW50ZigiZHluYW1pYyBsaW5rIGxpYnJhcnlcbiIpOworI2VuZGlmIC8qIE5FVERMTCAqLwor ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisKKyNpZmRlZiBBTllYMjUKKyAgICBpZiAoKG5ldHR5cGUgPT0gTkVUX1NYMjUp IHx8CisgICAgICAgIChuZXR0eXBlID09IE5FVF9WWDI1KSB8fAorICAgICAgICAobmV0dHlwZSA9 PSBORVRfSVgyNSkpCisgICAgICBpZiAoKG4gPSBzaG94MjUobikpIDwgMCkgcmV0dXJuKDApOwor I2VuZGlmIC8qIEFOWVgyNSAqLworCisjaWZkZWYgU1NIQlVJTFRJTgorICAgIGlmIChuZXR0eXBl ID09IE5FVF9TU0gpIHsKKyAgICAgICAgcHJpbnRmKCJTZWN1cmUgU2hlbGwgcHJvdG9jb2xcbiIp OworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOworICAgIH0KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyAgICBp ZiAobmV0dHlwZSA9PSBORVRfVENQQSB8fCBuZXR0eXBlID09IE5FVF9UQ1BCKSB7CisjaWZkZWYg UkxPR0NPREUKKyAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1JMT0dJTikgeworICAgICAgICAg ICAgcHJpbnRmKCIgTE9HSU4gKHJsb2dpbikgcHJvdG9jb2xcbiIpOworICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKKyAgICAgICAgfQorI2lmZGVmIENLX0tFUkJFUk9TCisgICAgICAgIGVsc2UgaWYgKHR0bnBy b3RvID09IE5QX0s0TE9HSU4pIHsKKyAgICAgICAgICAgIHByaW50ZigiIEtlcmJlcm9zIDQgTE9H SU4gKGtsb2dpbikgcHJvdG9jb2xcbiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9FSzRMT0dJTikgeworICAgICAgICAgICAg cHJpbnRmKCIgRW5jcnlwdGVkIEtlcmJlcm9zIDQgTE9HSU4gKGVrbG9naW4pIHByb3RvY29sXG4i KTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHRucHJv dG8gPT0gTlBfSzVMT0dJTikgeworICAgICAgICAgICAgcHJpbnRmKCIgS2VyYmVyb3MgNSBMT0dJ TiAoa2xvZ2luKSBwcm90b2NvbFxuIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKSB7CisgICAgICAgICAgICBw cmludGYoIiBFbmNyeXB0ZWQgS2VyYmVyb3MgNSBMT0dJTiAoZWtsb2dpbikgcHJvdG9jb2xcbiIp OworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICov CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICBpZiAo dHRucHJvdG8gPT0gTlBfSzVVMlUpIHsKKyAgICAgICAgICAgIHByaW50ZigiIEtlcmJlcm9zIDUg VXNlciB0byBVc2VyIHByb3RvY29sXG4iKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgIH0K KyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZkZWYgVE5DT0RFCisgICAgICAgIGlmIChJ U19URUxORVQoKSkgeworICAgICAgICAgICAgcHJpbnRmKCIgVEVMTkVUIHByb3RvY29sXG4iKTsK KyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBFY2hvaW5nIGlzIGN1cnJl bnRseSAlc1xuIixkdXBsZXggPyAibG9jYWwiIDogInJlbW90ZSIpOworICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKKyAgICAgICAgfQorI2VuZGlmIC8qIFROQ09ERSAqLworICAgICAgICBpZiAodHRucHJvdG8g PT0gTlBfVENQUkFXKSB7CisgICAgICAgICAgICBwcmludGYoIiBSYXcgVENQIHNvY2tldFxuIik7 CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICB9CisgICAgfQorICAgIHByaW50ZigiXG4iKTsK KyNlbmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgIHJldHVybigw KTsKK30KKyNlbmRpZiAvKiBOT05FVCAqLworCisjaWZuZGVmIE5PRElBTAorVk9JRAorc2hvZGlh bCgpIHsKKyAgICBpZiAobWRtdHlwID49IDAgfHwgbG9jYWwgIT0gMCkgZG9zaG9kaWFsKCk7Cit9 CisKK1ZPSUQKK3Nob2RzKHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAgICAgICAvKiBTaG93 IGEgZGlhbC1yZWxhdGVkIHN0cmluZyAqLworICAgIGNoYXIgYzsKKyAgICBpZiAocyA9PSBOVUxM IHx8ICEoKnMpKSB7ICAgICAgICAgICAvKiBFbXB0eT8gKi8KKyAgICAgICAgcHJpbnRmKCIobm9u ZSlcbiIpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBl bXB0eS4gKi8KKyAgICAgICAgd2hpbGUgKChjID0gKnMrKykpICAgICAgICAgICAgICAvKiBDYW4g Y29udGFpbiBjb250cm9scyAqLworICAgICAgICAgIGlmIChjID09ICdcXCcpICAgICAgICAgICAg ICAgIC8qIGEgYmFja3NsYXNoICovCisgICAgICAgICAgICBwcmludGYoIlxcXFwiKTsKKyAgICAg ICAgICBlbHNlIGlmIChjID4gMzEgJiYgYyA8IDEyNykgeworICAgICAgICAgICAgICBwdXRjaGFy KGMpOworICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJcXHslZH0iLGMpOwor ICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQorfQorCitpbnQKK2Rvc2hvZGlhbCgpIHsKKwor ICAgIGludCBpLCBuID0gMjsKKworICAgIHByaW50ZigiIERpYWwgc3RhdHVzOiAgJWQiLCBkaWFs c3RhKTsKKworI2lmZGVmIEJJR0JVRk9LCisgICAgaWYgKGRpYWxzdGEgPiA5MCkKKyAgICAgIHBy aW50ZigiID0gVW5rbm93biBlcnJvciIpOworICAgIGVsc2UgaWYgKGRpYWxzdGEgPCAwKQorICAg ICAgcHJpbnRmKCIgPSAobm9uZSkiKTsKKyAgICBlbHNlIGlmIChkaWFsc3RhIDwgMzUgJiYgZGlh bG1zZ1tkaWFsc3RhXSkKKyAgICAgIHByaW50ZigiID0gJXMiLCBkaWFsbXNnW2RpYWxzdGFdKTsK KyNlbmRpZiAvKiBCSUdCVUZPSyAqLworICAgIG4rKzsKKyAgICBpZiAobmRpYWxkaXIgPD0gMSkg eworICAgICAgICBwcmludGYoIlxuIERpYWwgZGlyZWN0b3J5OiAlc1xuIixkaWFsZGlyWzBdID8g ZGlhbGRpclswXSA6ICIobm9uZSkiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgaTsKKyAg ICAgICAgcHJpbnRmKCJcbiBEaWFsIGRpcmVjdG9yaWVzOlxuIik7CisgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBuZGlhbGRpcjsgaSsrKQorICAgICAgICAgIHByaW50ZigiJTJkLiAlc1xuIixpKzEs ZGlhbGRpcltpXSk7CisgICAgICAgIG4gKz0gbmRpYWxkaXI7CisgICAgfQorICAgIHByaW50Zigi IERpYWwgbWV0aG9kOiAgIik7CisgICAgaWYgICAgICAoZGlhbG1hdXRvKSAgICAgICAgIHByaW50 ZigiYXV0byAgICIpOworICAgIGVsc2UgaWYgKGRpYWxtdGggPT0gWFlETV9EKSBwcmludGYoImRl ZmF1bHQiKTsKKyAgICBlbHNlIGlmIChkaWFsbXRoID09IFhZRE1fUCkgcHJpbnRmKCJwdWxzZSAg Iik7CisgICAgZWxzZSBpZiAoZGlhbG10aCA9PSBYWURNX1QpIHByaW50ZigidG9uZSAgICIpOwor ICAgIHByaW50ZigiICAgICAgICAgRGlhbCBzb3J0OiAlc1xuIixkaWFsc3J0ID8gIm9uIiA6ICJv ZmYiKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJu KDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIERpYWwgaGFuZ3VwOiAgJXMgICAgICAgICAg ICAgRGlhbCBkaXNwbGF5OiAlc1xuIiwKKyAgICAgICAgICAgZGlhbGhuZyA/ICJvbiAiIDogIm9m ZiIsIGRpYWxkcHkgPyAib24iIDogIm9mZiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgaWYgKGRpYWxydHIg PiAwKSB7CisgICAgICAgIHByaW50ZigiIERpYWwgcmV0cmllczogJS0xMmQgICAgRGlhbCBpbnRl cnZhbDogJWRcbiIsCisgICAgICAgICAgICAgICBkaWFscnRyLCBkaWFsaW50KTsKKyAgICB9IGVs c2UgeworICAgICAgICBwcmludGYoIiBEaWFsIHJldHJpZXM6IChhdXRvKSAgICAgICAgICBEaWFs IGludGVydmFsOiAlZFxuIiwgZGlhbGludCk7CisgICAgfQorICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRm KCIgRGlhbCB0aW1lb3V0OiAiKTsKKyNpZmRlZiBDS19UQVBJCisgICAgaWYgKHR0dGFwaSAmJiAh dGFwaXBhc3MpCisgICAgICAgIHByaW50ZigiKHRhcGkpIik7CisgICAgZWxzZQorI2VuZGlmIC8q IENLX1RBUEkgKi8KKyAgICBpZiAoZGlhbHRtbyA+IDApCisgICAgICBwcmludGYoIiU0ZCBzZWMi LCBkaWFsdG1vKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIjAgKGF1dG8pIik7CisgICAgcHJp bnRmKCIgICAgICAgIFJlZGlhbCBudW1iZXI6ICVzXG4iLGRpYWxudW0gPyBkaWFsbnVtIDogIihu b25lKSIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgRGlhbCBjb25maXJtYXRpb246ICVzICAg ICAgICBEaWFsIGNvbnZlcnQtZGlyZWN0b3J5OiAlc1xuIiwKKyAgICAgICAgICAgZGlhbGNuZiA/ ICJvbiAiIDogIm9mZiIsCisgICAgICAgICAgIGRpYWxjdnQgPyAoKGRpYWxjdnQgPT0gMSkgPyAi b24iIDogImFzayIpIDogIm9mZiIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgRGlhbCBpZ25v cmUtZGlhbHRvbmU6ICVzIiwgZGlhbGlkdCA/ICJvbiAiIDogIm9mZiIpOworICAgIHByaW50Zigi ICAgICBEaWFsIHBhY2luZzogJWRcbiIsZGlhbHBhY2UpOworICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRm KAorIiBEaWFsIHByZWZpeDogICAgICAgICAgICAgICAgICAlc1xuIiwgZGlhbG5wciA/IGRpYWxu cHIgOiAiKG5vbmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoCisiIERpYWwgc3VmZml4OiAg ICAgICAgICAgICAgICAgICVzXG4iLCBkaWFsc2Z4ID8gZGlhbHNmeCA6ICIobm9uZSkiKTsKKyAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworICAgIHByaW50ZigKKyIgRGlhbCBjb3VudHJ5LWNvZGU6ICAgICAgICAgICAgJS0x MnMiLCBkaWFsbGNjID8gZGlhbGxjYyA6ICIobm9uZSkiKTsKKyAgICBwcmludGYoIkRpYWwgY29u bmVjdDogICVzIiwgZGlhbGNvbiA/ICgoZGlhbGNvbiA9PSAxKSA/ICJvbiIgOiAiYXV0byIpCisg ICAgICAgICAgIDogIm9mZiIpOworICAgIGlmIChkaWFsY29uICE9IENBUl9PRkYpCisgICAgICBw cmludGYoIiAlcyIsIGRpYWxjcSA/ICJxdWlldCIgOiAidmVyYm9zZSIpOworICAgIHByaW50ZigK KyJcbiBEaWFsIGFyZWEtY29kZTogICAgICAgICAgICAgICAlLTEycyIsIGRpYWxsYWMgPyBkaWFs bGFjIDogIihub25lKSIpOworICAgIG4rKzsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiRGlhbCBy ZXN0cmljdDogIik7CisgICAgaWYgKGRpYWxyc3RyID09IDUpIHByaW50ZigiaW50ZXJuYXRpb25h bFxuIik7CisgICAgZWxzZSBpZiAoZGlhbHJzdHIgPT0gNCkgcHJpbnRmKCJsb25nLWRpc3RhbmNl XG4iKTsKKyAgICBlbHNlIGlmIChkaWFscnN0ciA9PSAyKSBwcmludGYoImxvY2FsXG4iKTsKKyAg ICBlbHNlIGlmIChkaWFscnN0ciA9PSA2KSBwcmludGYoIm5vbmVcbiIpOworICAgIGVsc2UgcHJp bnRmKCI/XG4iKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIERpYWwgbGMtYXJlYS1jb2Rlczog ICAgICAgICAgICIpOworICAgIGlmIChubG9jYWxhYyA9PSAwKQorICAgICAgcHJpbnRmKCIobm9u ZSkiKTsKKyAgICBlbHNlCisgICAgICBmb3IgKGkgPSAwOyBpIDwgbmxvY2FsYWM7IGkrKykKKyAg ICAgICAgcHJpbnRmKCIlcyAiLCBkaWFsbGNhY1tpXSk7CisgICAgcHJpbnRmKAorIlxuIERpYWwg bGMtcHJlZml4OiAgICAgICAgICAgICAgICVzXG4iLCBkaWFsbGNwID8gZGlhbGxjcCA6ICIobm9u ZSkiKTsKKyAgICBuKys7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoCisiIERpYWwgbGMtc3VmZml4 OiAgICAgICAgICAgICAgICVzXG4iLCBkaWFsbGNzID8gZGlhbGxjcyA6ICIobm9uZSkiKTsKKyAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworICAgIHByaW50ZigKKyIgRGlhbCBsZC1wcmVmaXg6ICAgICAgICAgICAgICAgJXNc biIsIGRpYWxsZHAgPyBkaWFsbGRwIDogIihub25lKSIpOworICAgIGlmICgrK24gPiBjbWRfcm93 cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRm KAorIiBEaWFsIGxkLXN1ZmZpeDogICAgICAgICAgICAgICAlc1xuIiwgZGlhbGxkcyA/IGRpYWxs ZHMgOiAiKG5vbmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoCisiIERpYWwgZm9yY2UtbG9u Zy1kaXN0YW5jZSAgICAgICVzXG4iLCBzaG93b2ZmKGRpYWxmbGQpKTsKKyAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAg IHByaW50ZigKKyIgRGlhbCBpbnRsLXByZWZpeDogICAgICAgICAgICAgJXNcbiIsIGRpYWxpeHAg PyBkaWFsaXhwIDogIihub25lKSIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKAorIiBEaWFsIGlu dGwtc3VmZml4OiAgICAgICAgICAgICAlc1xuIiwgZGlhbGl4cyA/IGRpYWxpeHMgOiAiKG5vbmUp Iik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoCisiIERpYWwgdG9sbC1mcmVlLWFyZWEtY29kZTog ICAgICIpOworICAgIGlmIChudG9sbGZyZWUgPT0gMCkKKyAgICAgIHByaW50ZigiKG5vbmUpIik7 CisgICAgZWxzZQorICAgICAgZm9yIChpID0gMDsgaSA8IG50b2xsZnJlZTsgaSsrKQorICAgICAg ICBwcmludGYoIiVzICIsIGRpYWx0ZmNbaV0pOworICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OworCisgICAgcHJpbnRmKAorIiBEaWFsIHB1bHNlLWNvdW50cmllczogICAgICAgICAiKTsKKyAg ICBpZiAobmRpYWxwdWNjID09IDApCisgICAgICBwcmludGYoIihub25lKSIpOworICAgIGVsc2UK KyAgICAgIGZvciAoaSA9IDA7IGkgPCBuZGlhbHB1Y2M7IGkrKykKKyAgICAgICAgcHJpbnRmKCIl cyAiLCBkaWFscHVjY1tpXSk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisKKyAgICBw cmludGYoCisiIERpYWwgdG9uZS1jb3VudHJpZXM6ICAgICAgICAgICIpOworICAgIGlmIChuZGlh bHRvY2MgPT0gMCkKKyAgICAgIHByaW50ZigiKG5vbmUpIik7CisgICAgZWxzZQorICAgICAgZm9y IChpID0gMDsgaSA8IG5kaWFsdG9jYzsgaSsrKQorICAgICAgICBwcmludGYoIiVzICIsIGRpYWx0 b2NjW2ldKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKworICAgIHByaW50ZigKKwki IERpYWwgdG9sbC1mcmVlLXByZWZpeDogICAgICAgICVzXG4iLAorCWRpYWx0ZnAgPyBkaWFsdGZw IDoKKwkoZGlhbGxkcCA/IGRpYWxsZHAgOiAiKG5vbmUpIikKKwkpOworICAgIGlmICgrK24gPiBj bWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAg cHJpbnRmKCIgRGlhbCBwYngtZXhjaGFuZ2U6ICAgICAgICAgICAgIik7CisgICAgaWYgKG5kaWFs cHh4ID09IDApCisgICAgICBwcmludGYoIihub25lKSIpOworICAgIGVsc2UKKyAgICAgIGZvciAo aSA9IDA7IGkgPCBuZGlhbHB4eDsgaSsrKQorICAgICAgICBwcmludGYoIiVzICIsIGRpYWxweHhb aV0pOworICAgIHByaW50ZigiXG4iKTsKKworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKAorIiBEaWFs IHBieC1pbnNpZGUtcHJlZml4OiAgICAgICAlc1xuIiwgZGlhbHB4aSA/IGRpYWxweGkgOiAiKG5v bmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoCisiIERpYWwgcGJ4LW91dHNpZGUtcHJlZml4 OiAgICAgICVzXG4iLCBkaWFscHhvID8gZGlhbHB4byA6ICIobm9uZSkiKTsKKyAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwor ICAgIHByaW50ZigKKyIgRGlhbCBtYWNybzogICAgICAgICAgICAgICAgICAgJXNcbiIsIGRpYWxt YWMgPyBkaWFsbWFjIDogIihub25lKSIpOworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBO T0RJQUwgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKy8qICBTaG93IEZpbGUgUGFyYW1ldGVy cyAqLworCitzdGF0aWMgY2hhciAqCitwYXRodmFsKHgpIGludCB4OyB7CisgICAgc3dpdGNoICh4 KSB7CisgICAgICBjYXNlIFBBVEhfT0ZGOiAgcmV0dXJuKCJvZmYiKTsKKyAgICAgIGNhc2UgUEFU SF9BQlM6ICByZXR1cm4oImFic29sdXRlIik7CisgICAgICBjYXNlIFBBVEhfUkVMOiAgcmV0dXJu KCJyZWxhdGl2ZSIpOworICAgICAgY2FzZSBQQVRIX0FVVE86IHJldHVybigiYXV0byIpOworICAg ICAgZGVmYXVsdDogcmV0dXJuKCJ1bmtub3duIik7CisgICAgfQorfQorCitWT0lECitzaG9maWwo KSB7CisgICAgY2hhciAqczsgaW50IGkgPSAwLCBuID0gMTsKKyAgICBleHRlcm4gY2hhciAqIGlm ZG5hbVtdOworICAgIGV4dGVybiBpbnQgd2lsZGVuYTsKKyNpZmRlZiBVTklYCisgICAgZXh0ZXJu IGludCB3aWxkeHBhbmQ7CisjZW5kaWYgLyogVU5JWCAqLworICAgIGV4dGVybiBjaGFyICogc25k X21vdmUsICogc25kX3JlbmFtZSwgKiByY3ZfbW92ZSwgKiByY3ZfcmVuYW1lOworI2lmZGVmIFBB VFRFUk5TCisgICAgZXh0ZXJuIGludCBwYXR0ZXJuczsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLwor ICAgIGV4dGVybiBjaGFyICogcmZzcGVjLCAqIHNmc3BlYzsKKyNpZmRlZiBVTklYCisgICAgZXh0 ZXJuIGludCB6b2J1ZnNpemUsIHpvZmJ1ZmZlciwgem9mYmxvY2s7CisjZW5kaWYgLyogVU5JWCAq LworI2lmZGVmIENLX0NUUkxaCisgICAgZXh0ZXJuIGludCBlb2ZtZXRob2Q7CisjZW5kaWYgLyog Q0tfQ1RSTFogKi8KKworICAgIHByaW50ZigiXG4iKTsKKworI2lmZGVmIFZNUworICAgIHByaW50 ZigiIEZpbGUgcmVjb3JkLUxlbmd0aDogICAgICAlNWRcbiIsZnJlY2wpOworICAgIG4rKzsKKyNl bmRpZiAvKiBWTVMgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICBwcmludGYoIiBUcmFuc2ZlciBt b2RlOiAgICAgICAgICAgJXNcbiIsCisgICAgICAgICAgIHhmZXJtb2RlID09IFhNT0RFX0EgPwor ICAgICAgICAgICAiYXV0b21hdGljIiA6CisgICAgICAgICAgICJtYW51YWwiCisgICAgICAgICAg ICk7CisgICAgbisrOworI2lmZGVmIFBBVFRFUk5TCisgICAgcHJpbnRmKCIgRmlsZSBwYXR0ZXJu czogICAgICAgICAgICVzIiwgc2hvd29vYShwYXR0ZXJucykpOworICAgIGlmICh4ZmVybW9kZSA9 PSBYTU9ERV9NICYmIHBhdHRlcm5zKQorICAgICAgcHJpbnRmKCIgKGJ1dCBkaXNhYmxlZCBieSBU UkFOU0ZFUi1NT0RFIE1BTlVBTCkiKTsKKyAgICBlbHNlIGlmIChwYXR0ZXJucykKKyAgICAgIHBy aW50ZigiIChTSE9XIFBBVFRFUk5TIGZvciBsaXN0KSIpOworICAgIHByaW50ZigiXG4iKTsKKyAg ICBuKys7CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyAgICBpZiAoZmlsZXBlZWspCisgICAgICBw cmludGYoIiBGaWxlIHNjYW46ICAgICAgICAgICAgICAgb24gJWRcbiIsIG5zY2FuZmlsZSk7Cisg ICAgZWxzZQorICAgICAgcHJpbnRmKCIgRmlsZSBzY2FuOiAgICAgICAgICAgICAgIG9mZlxuIik7 CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBuID0gMDsKKyAgICBpZiAoeGZlcm1vZGUgPT0gWE1PREVfQSkKKyAgICAgIHByaW50ZigiIERl ZmF1bHQgZmlsZSB0eXBlOiAgICAgICAlc1xuIixzaG94bSgpKTsKKyAgICBlbHNlCisgICAgICBw cmludGYoIiBGaWxlIHR5cGU6ICAgICAgICAgICAgICAgJXNcbiIsc2hveG0oKSk7CisgICAgbisr OworICAgIGlmIChmbmNudiA9PSBYWUZOX0wpCisgICAgICBzID0gImxpdGVyYWwiOworICAgIGVs c2UgaWYgKGZuY252ID09IFhZRk5fQykKKyAgICAgIHMgPSAiY29udmVydGVkIjsKKyAgICBlbHNl CisgICAgICBzID0gIih1bmtub3duKSI7CisgICAgcHJpbnRmKCIgRmlsZSBuYW1lczogICAgICAg ICAgICAgICVzXG4iLHMpOworICAgIG4rKzsKKyAgICBwcmludGYoIiBTZW5kIHBhdGhuYW1lczog ICAgICAgICAgJXNcbiIsIHBhdGh2YWwoZm5zcGF0aCkpOworICAgIG4rKzsKKyAgICBwcmludGYo IiBSZWNlaXZlIHBhdGhuYW1lczogICAgICAgJXNcbiIsIHBhdGh2YWwoZm5ycGF0aCkpOworICAg IG4rKzsKKyNpZmRlZiBVTklYT1JPU0sKKyAgICBwcmludGYoIiBNYXRjaCBkb3QgZmlsZXM6ICAg ICAgICAgJXNcbiIsIG1hdGNoZG90ID8gInllcyIgOiAibm8iKTsKKyAgICBuKys7CisjaWZkZWYg VU5JWAorICAgIHByaW50ZigiIFdpbGRjYXJkLWV4cGFuc2lvbjogICAgICAlcyAoJXMpXG4iLCBz aG93b2ZmKHdpbGRlbmEpLAorCSAgIHdpbGR4cGFuZCA/ICJzaGVsbCIgOiAia2VybWl0Iik7Cisg ICAgbisrOworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyAgICBw cmludGYoIiBGaWxlIGNvbGxpc2lvbjogICAgICAgICAgIik7CisgICAgZm9yIChpID0gMDsgaSA8 IG5jb2x4OyBpKyspCisgICAgICBpZiAoY29seHRhYltpXS5rd3ZhbCA9PSBmbmNhY3QpIGJyZWFr OworICAgIHByaW50ZigiJXNcbiIsIChpID09IG5jb2x4KSA/ICJ1bmtub3duIiA6IGNvbHh0YWJb aV0ua3dkKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIEZpbGUgZGVzdGluYXRpb246ICAgICAgICAl c1xuIiwKKyAgICAgICAgICAgKGRlc3QgPT0gREVTVF9EKSA/ICJkaXNrIiA6CisgICAgICAgICAg ICgoZGVzdCA9PSBERVNUX1MpID8gInNjcmVlbiIgOgorICAgICAgICAgICAgKChkZXN0ID09IERF U1RfTikgPyAibm93aGVyZSIgOgorICAgICAgICAgICAgInByaW50ZXIiKSkKKyAgICAgICAgICAg KTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIG4gPSAwOworICAgIHMgPSAoa2VlcCA+PSAwICYmIGtlZXAgPD0gMikgPyBpZmRuYW1ba2Vl cF0gOiAia2VlcCI7CisgICAgcHJpbnRmKCIgRmlsZSBpbmNvbXBsZXRlOiAgICAgICAgICVzXG4i LHMpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47 IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgRmlsZSBieXRlc2l6ZTogICAgICAgICAgICVkXG4i LChmbWFzayA9PSAwMTc3KSA/IDcgOiA4KTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworI2lmbmRlZiBOT0NTRVRTCisgICAg cHJpbnRmKCIgRmlsZSBjaGFyYWN0ZXItc2V0OiAgICAgICVzXG4iLGZjc2luZm9bZmNoYXJzZXRd LmtleXdvcmQpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm47IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgRmlsZSBkZWZhdWx0IDctYml0OiAgICAg ICVzXG4iLGZjc2luZm9bZGNzZXQ3XS5rZXl3b3JkKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIEZp bGUgZGVmYXVsdCA4LWJpdDogICAgICAlc1xuIixmY3NpbmZvW2Rjc2V0OF0ua2V5d29yZCk7Cisg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBu ID0gMDsKKyNpZmRlZiBVTklDT0RFCisgICAgcHJpbnRmKCIgRmlsZSBVQ1MgYm9tOiAgICAgICAg ICAgICVzXG4iLHNob3dvZmYodWNzYm9tKSk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBGaWxlIFVD UyBieXRlLW9yZGVyOiAgICAgJXMtZW5kaWFuXG4iLAorICAgICAgICAgICB1Y3NvcmRlciA/ICJs aXR0bGUiIDogImJpZyIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgQ29tcHV0ZXIgYnl0ZW9yZGVy OiAgICAgICVzLWVuZGlhblxuIiwKKyAgICAgICAgICAgYnl0ZW9yZGVyID8gImxpdHRsZSIgOiAi YmlnIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bjsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBVTklDT0RFICovCisjZW5kaWYgLyogTk9DU0VUUyAq LworCisgICAgcHJpbnRmKCIgRmlsZSBlbmQtb2YtbGluZTogICAgICAgICIpOworICAgIGkgPSBm ZW9sOworICAgIHN3aXRjaCAoZmVvbCkgeworICAgICAgY2FzZSBYWUZBX0M6IHByaW50ZigiJXNc biIsImNyIik7IGJyZWFrOworICAgICAgY2FzZSBYWUZBX0w6IHByaW50ZigiJXNcbiIsImxmIik7 IGJyZWFrOworICAgICAgY2FzZSBYWUZBXzI6IHByaW50ZigiJXNcbiIsImNybGYiKTsgYnJlYWs7 CisgICAgICBkZWZhdWx0OiBwcmludGYoIiVkXG4iLGkpOworICAgIH0KKyAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tfQ1RSTFoKKyAgICBwcmludGYoIiBGaWxlIGVvZjog ICAgICAgICAgICAgICAgJXNcbiIsIGVvZm1ldGhvZCA/ICJjdHJsLXoiIDogImxlbmd0aCIpOwor ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2Ug biA9IDA7CisjZW5kaWYgLyogQ0tfQ1RSTFogKi8KKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tf VE1QRElSCisgICAgcHJpbnRmKCIgRmlsZSBkb3dubG9hZC1kaXJlY3Rvcnk6ICVzXG4iLCBkbGRp ciA/IGRsZGlyIDogIihub25lKSIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisjaWZkZWYgQ09NTUVOVAorICAgIGkgPSAy NTY7CisgICAgcyA9IGxpbmU7CisgICAgenpzdHJpbmcoIlxcdih0bXBkaXIpIiwmcywmaSk7Cisg ICAgcHJpbnRmKCIgVGVtcG9yYXJ5IGRpcmVjdG9yeTogICAgICVzXG4iLCBsaW5lKTsKKyAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAw OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyNpZmRlZiBW TVMKKyAgICB7CisgICAgICAgIGV4dGVybiBpbnQgdm1zc3ZlcnNpb25zLCB2bXNydmVyc2lvbnM7 CisgICAgICAgIHByaW50ZigiIFNlbmQgdmVyc2lvbi1udW1iZXJzOiAgICAlc1xuIixzaG93b2Zm KHZtc3N2ZXJzaW9ucykpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworICAgICAgICBwcmludGYoIiBSZWNlaXZlIHZl cnNpb24tbnVtYmVyczogJXNcbiIsc2hvd29mZih2bXNydmVyc2lvbnMpKTsKKyAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsK KyAgICB9CisjZW5kaWYgLyogVk1TICovCisgICAgcHJpbnRmKCIgU2VuZCBtb3ZlLXRvOiAgICAg ICAgICAgICVzXG4iLAorICAgICAgICAgICBzbmRfbW92ZSA/IHNuZF9tb3ZlIDogIihub25lKSIp OworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVs c2UgbiA9IDA7CisgICAgcHJpbnRmKCIgU2VuZCByZW5hbWUtdG86ICAgICAgICAgICVzXG4iLAor ICAgICAgICAgICBzbmRfcmVuYW1lID8gc25kX3JlbmFtZSA6ICIobm9uZSkiKTsKKyAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOwor ICAgIHByaW50ZigiIFJlY2VpdmUgbW92ZS10bzogICAgICAgICAlc1xuIiwKKyAgICAgICAgICAg cmN2X21vdmUgPyByY3ZfbW92ZSA6ICIobm9uZSkiKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIFJl Y2VpdmUgcmVuYW1lLXRvOiAgICAgICAlc1xuIiwKKyAgICAgICAgICAgcmN2X3JlbmFtZSA/IHJj dl9yZW5hbWUgOiAiKG5vbmUpIik7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZmRl ZiBLRVJNUkMKKyAgICBwcmludGYoIiBJbml0aWFsaXphdGlvbiBmaWxlOiAgICAgJXNcbiIsIG5v aW5pdCA/ICIobm9uZSkiIDoKKyNpZmRlZiBDS19TWVNJTkkKKyAgICAgICAgICAgQ0tfU1lTSU5J CisjZWxzZQorICAgICAgICAgICBrZXJtcmMKKyNlbmRpZiAvKiBDS19TWVNJTkkgKi8KKyAgICAg ICAgICAgKTsKKyNlbmRpZiAvKiBLRVJNUkMgKi8KKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworCisgICAgaWYgKGtfaW5mb19k aXIpIHsKKyAgICAgICAgcHJpbnRmKCIgS2VybWl0IGRvYyBmaWxlczogICAgICAgICVzXG4iLCBr X2luZm9fZGlyKTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyAgICB9CisKKyNpZmRlZiBDS1JPT1QKKyAgICBzID0g emdldHJvb3QoKTsKKyAgICBwcmludGYoIiBSb290IHNldDogICAgICAgICAgICAgICAgJXNcbiIs IHMgPyBzIDogIihub25lKSIpOworI2VuZGlmIC8qIENLUk9PVCAqLworCisjaWZkZWYgVU5JWAor ICAgIHByaW50ZigiIERpc2sgb3V0cHV0IGJ1ZmZlcjogICAgICAlZCAod3JpdGVzIGFyZSAlcywg JXMpXG4iLAorICAgICAgICAgICB6b2J1ZnNpemUsCisgICAgICAgICAgIHpvZmJ1ZmZlciA/ICJi dWZmZXJlZCIgOiAidW5idWZmZXJlZCIsCisgICAgICAgICAgIHpvZmJsb2NrID8gImJsb2NraW5n IiA6ICJub25ibG9ja2luZyIKKyAgICAgICAgICAgKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3Mg LSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworI2lmZGVmIERZTkFNSUMK KyAgICBwcmludGYoIiBTdHJpbmdzcGFjZTogICAgICAgICAgICAgJWRcbiIsIHpzZXRmaWwoMCwy KSk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsg ZWxzZSBuID0gMDsKKyAgICBwcmludGYoIiBMaXN0c2l6ZTogICAgICAgICAgICAgICAgJWRcbiIs IHpzZXRmaWwoMCw0KSk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisjZW5kaWYgLyog VU5JWCAqLworI2lmZGVmIE9TMk9SVU5JWAorICAgIHByaW50ZigiIExvbmdlc3QgZmlsZW5hbWU6 ICAgICAgICAlZFxuIiwgbWF4bmFtKTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworICAgIHByaW50ZigiIExvbmdlc3QgcGF0 aG5hbWU6ICAgICAgICAlZFxuIiwgbWF4cGF0aCk7CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBPUzJPUlVO SVggKi8KKworICAgIHByaW50ZigiIExhc3QgZmlsZSBzZW50OiAgICAgICAgICAlc1xuIiwgc2Zz cGVjID8gc2ZzcGVjIDogIihub25lKSIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlm ICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAgcHJpbnRmKCIgTGFzdCBmaWxl IHJlY2VpdmVkOiAgICAgICVzXG4iLCByZnNwZWMgPyByZnNwZWMgOiAiKG5vbmUpIik7CisgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0g MDsKKyAgICBwcmludGYoIlxuIEFsc28gc2VlOlxuIik7CisgICAgbisrOworICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAg cHJpbnRmKCIgU0hPVyBQUk9UT0NPTCwgU0hPVyBYRkVSIik7CisjaWZkZWYgQ0tfTEFCRUxFRAor ICAgIHByaW50ZigiLCBTSE9XIExBQkVMRUQiKTsKKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisj aWZkZWYgUEFUVEVSTlMKKyAgICBwcmludGYoIiwgU0hPVyBQQVRURVJOUyIpOworI2VuZGlmIC8q IFBBVFRFUk5TICovCisjaWZkZWYgU1RSRUFNSU5HCisgICAgcHJpbnRmKCIsIFNIT1cgU1RSRUFN SU5HIik7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBwcmlu dGYoIiwgU0hPVyBDSEFSQUNURVItU0VUUyIpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICBw cmludGYoIlxuXG4iKTsKK30KKworI2lmbmRlZiBOT1hGRVIKK1ZPSUQKK3Nob3BhcnAoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCAqLworICAgIGV4dGVybiBpbnQg ZG9jcmMsIHNraXBidXA7CisgICAgY2hhciAqczsKKworI2lmZGVmIENLX1RJTUVSUworICAgIGV4 dGVybiBpbnQgcnR0ZmxnOworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCisgICAgcHJpbnRmKCJQ cm90b2NvbDogJXNcbiIscHRhYltwcm90b2NvbF0ucF9uYW1lKTsKKworICAgIGlmIChwcm90b2Nv bCA9PSBQUk9UT19LKSB7CisgICAgICAgIHByaW50ZigiXG5Qcm90b2NvbCBQYXJhbWV0ZXJzOiAg IFNlbmQgICAgUmVjZWl2ZSIpOworICAgICAgICBpZiAodGltZWYpCisgICAgICAgICAgcHJpbnRm KCJcbiBUaW1lb3V0ICh1c2VkPSUyZCk6JTdkKiU4ZCAiLCB0aW1pbnQsIHJ0aW1vLCBwa3R0aW0p OworICAgICAgICBlbHNlCisgICAgICAgICAgcHJpbnRmKCJcbiBUaW1lb3V0ICh1c2VkPSUyZCk6 JTdkJTlkICIsICB0aW1pbnQsIHJ0aW1vLCBwa3R0aW0pOworI2lmZGVmIFhGUkNBTgorICAgICAg ICBwcmludGYoIiAgICAgICBDYW5jZWxsYXRpb246ICAgICVzIixzaG93b2ZmKHhmcmNhbikpOwor ICAgICAgICBpZiAoeGZyY2FuKQorICAgICAgICAgIHByaW50ZigiICVkICVkIiwgeGZyY2hyLCB4 ZnJudW0pOworI2VuZGlmIC8qIFhGUkNBTiAqLworICAgICAgICBwcmludGYoIlxuIFBhZGRpbmc6 ICAgICAgJTExZCU5ZCIsIG5wYWQsICAgbXlwYWRuKTsKKyAgICAgICAgaWYgKGJjdHIgPT0gNCkK KyAgICAgICAgICBwcmludGYoIiAgICAgICAgQmxvY2sgQ2hlY2s6IGJsYW5rLWZyZWUtMlxuIik7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIiAgICAgICAgQmxvY2sgQ2hlY2s6ICU2 ZFxuIixiY3RyKTsKKyAgICAgICAgcHJpbnRmKCAgIiBQYWQgQ2hhcmFjdGVyOiUxMWQlOWQiLCBw YWRjaCwgIG15cGFkYyk7CisgICAgICAgIHByaW50ZigiICAgICAgICBEZWxheTogICAgICAgJTZk XG4iLGNrZGVsYXkpOworICAgICAgICBwcmludGYoICAiIFBhdXNlOiAgICAgICAgJTExZCU5ZCIs IHBrdHBhdXMsIHBrdHBhdXMpOworICAgICAgICBwcmludGYoIiAgICAgICAgQXR0cmlidXRlczog ICAgICAlc1xuIixzaG93b2ZmKGF0Y2FwcikpOworICAgICAgICBwcmludGYoICAiIFBhY2tldCBT dGFydDogJTExZCU5ZCIsIG15c3RjaCwgc3RjaHIpOworICAgICAgICBwcmludGYoIiAgICAgICAg TWF4IFJldHJpZXM6ICU2ZCVzXG4iLAorICAgICAgICAgICAgICAgbWF4dHJ5LAorICAgICAgICAg ICAgICAgKG1heHRyeSA9PSAwKSA/ICIgKHVubGltaXRlZCkiIDogIiIKKyAgICAgICAgICAgICAg ICk7CisgICAgICAgIHByaW50ZiggICIgUGFja2V0IEVuZDogICAlMTFkJTlkIiwgc2VvbCwgICBl b2wpOworICAgICAgICBpZiAoZWJxZmxnKQorICAgICAgICAgIHByaW50ZigiICAgICAgICA4dGgt Qml0IFByZWZpeDogJyVjJyIsZWJxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50Zigi ICAgICAgICA4dGgtQml0IFByZWZpeDogKCclYycgYnV0IG5vdCB1c2VkKSIsZWJxKTsKKyAgICAg ICAgcHJpbnRmKCAgIlxuIFBhY2tldCBMZW5ndGg6JTExZCAiLCBzcG1heCk7CisgICAgICAgIHBy aW50ZigiJThkICAgICAiLCAgdXJwc2l6KTsKKyAgICAgICAgaWYgKHJwdGZsZykKKyAgICAgICAg ICBwcmludGYoIiAgIFJlcGVhdCBQcmVmaXg6ICAnJWMnIixycHRxKTsKKyAgICAgICAgZWxzZQor ICAgICAgICAgIHByaW50ZigiICAgUmVwZWF0IFByZWZpeDogICgnJWMnIGJ1dCBub3QgdXNlZCki LHJwdHEpOworICAgICAgICBwcmludGYoICAiXG4gTWF4aW11bSBMZW5ndGg6ICU5ZCU5ZCIsIG1h eHNwcywgbWF4cnBzKTsKKyAgICAgICAgcHJpbnRmKCIgICAgICAgIFdpbmRvdyBTaXplOiU3ZCBz ZXQsICVkIHVzZWRcbiIsd3Nsb3RyLHdtYXgpOworICAgICAgICBwcmludGYoICAgICIgQnVmZmVy IFNpemU6ICAlMTFkJTlkIiwgYmlnc2JzaXosIGJpZ3Jic2l6KTsKKyAgICAgICAgcHJpbnRmKCIg ICAgICAgIExvY2tpbmctU2hpZnQ6ICAgICIpOworICAgICAgICBpZiAobHNjYXB1ID09IDIpIHsK KyAgICAgICAgICAgIHByaW50ZigiZm9yY2VkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBwcmludGYoIiVzIiwgKGxzY2FwciA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKKyAg ICAgICAgICAgIGlmIChsc2NhcHIpIHByaW50ZigiLCVzJXMiLCAobHNjYXB1ID8gIiAiIDogIiBu b3QgIiksICJ1c2VkIik7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcblxuIik7CisKKyAg ICAgICAgaWYgKCEocyA9IHB0YWJbcHJvdG9jb2xdLmhfYl9pbml0KSkgcyA9ICIiOworICAgICAg ICBwcmludGYoIiBBdXRvLXVwbG9hZCBjb21tYW5kIChiaW5hcnkpOiAiKTsKKyAgICAgICAgaWYg KCpzKSB7CisgICAgICAgICAgICBzaG9zdHJkZWYoKENIQVIgKilzKTsKKyAgICAgICAgICAgIHBy aW50ZigiXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiKG5vbmUp XG4iKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShzID0gcHRhYltwcm90b2NvbF0uaF90X2lu aXQpKSBzID0gIiI7CisgICAgICAgIHByaW50ZigiIEF1dG8tdXBsb2FkIGNvbW1hbmQgKHRleHQp OiAgICIpOworICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgIHNob3N0cmRlZigoQ0hBUiAq KXMpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgcHJpbnRmKCIobm9uZSlcbiIpOworICAgICAgICB9CisgICAgICAgIGlmICghKHMgPSBw dGFiW3Byb3RvY29sXS5oX3hfaW5pdCkpIHMgPSAiIjsKKyAgICAgICAgcHJpbnRmKCIgQXV0by1z ZXJ2ZXIgY29tbWFuZDogICAgICAgICAgIik7CisgICAgICAgIGlmICgqcykgeworICAgICAgICAg ICAgc2hvc3RyZGVmKChDSEFSICopcyk7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGYoIihub25lKVxuIik7CisgICAgICAgIH0K KyAgICAgICAgdG1wYnVmWzBdID0gTlVMOworI2lmZGVmIENLX1RJTUVSUworICAgICAgICBpZiAo cnR0ZmxnKSB7CisgICAgICAgICAgICBleHRlcm4gaW50IG1pbnRpbWUsIG1heHRpbWU7CisgICAg ICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwiIFBhY2tldCB0aW1lb3V0czogZHluYW1pYyAlZDolZCIs IC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgICAgbWludGltZSwKKyAgICAgICAgICAgICAg ICAgICAgbWF4dGltZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcHJpbnRmKHRt cGJ1ZiwiIFBhY2tldCB0aW1lb3V0czogZml4ZWQiKTsgLyogU0FGRSAqLworICAgICAgICB9Cisj ZW5kaWYgLyogQ0tfVElNRVJTICovCisgICAgICAgIGlmICh0bXBidWZbMF0pCisgICAgICAgICAg cHJpbnRmKCIlLTMxcyIsdG1wYnVmKTsKKyAgICAgICAgcHJpbnRmKCJTZW5kIGJhY2t1cDogJXNc biIsc2hvd29mZighc2tpcGJ1cCkpOworCisgICAgICAgIHByaW50ZigiIFRyYW5zZmVyIG1vZGU6 ICAgJXMiLCB4ZmVybW9kZSA9PSBYTU9ERV9BID8KKyAgICAgICAgICAgICAgICJhdXRvbWF0aWMg ICAiIDoKKyAgICAgICAgICAgICAgICJtYW51YWwgICAgICAiCisgICAgICAgICAgICAgICApOwor ICAgICAgICBwcmludGYoIiBUcmFuc2ZlciBzbG93LXN0YXJ0OiAlcywgY3JjOiAlc1xuIiwKKyAg ICAgICAgICAgICAgIHNob3dvZmYoc2xvc3RhcnQpLAorICAgICAgICAgICAgICAgc2hvd29mZihk b2NyYykKKyAgICAgICAgICAgICAgICk7CisjaWZkZWYgUElQRVNFTkQKKyAgICAgICAgeworICAg ICAgICAgICAgZXh0ZXJuIGludCB1c2VwaXBlczsKKyAgICAgICAgICAgIHByaW50ZigiIFRyYW5z ZmVyIHBpcGVzOiAgJXMgICAgICAgICAiLHVzZXBpcGVzID8gIm9uICIgOiAib2ZmIik7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmbmRlZiBOT0NTRVRTCisgICAgICAgIHBy aW50ZigiIFRyYW5zZmVyIGNoYXJhY3Rlci1zZXQ6ICIpOworICAgICAgICBpZiAodGNoYXJzZXQg PT0gVENfVFJBTlNQKQorICAgICAgICAgIHByaW50ZigidHJhbnNwYXJlbnRcbiIpOworICAgICAg ICBlbHNlCisgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29y ZCApOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZmRlZiBQSVBFU0VORAorICAgICAgICB7Cisg ICAgICAgICAgICBleHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0ZXI7CisgICAgICAg ICAgICBwcmludGYoIiBTZW5kIGZpbHRlcjogICAgICVzXG4iLCBzbmRmaWx0ZXIgPyBzbmRmaWx0 ZXIgOiAiKG5vbmUpIik7CisgICAgICAgICAgICBwcmludGYoIiBSZWNlaXZlIGZpbHRlcjogICVz XG4iLCByY3ZmaWx0ZXIgPyByY3ZmaWx0ZXIgOiAiKG5vbmUpIik7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBQSVBFU0VORCAqLworICAgICAgICBwcmludGYoIlxuQWxzbyBzZWU6XG4iKTsKKyAgICAg ICAgcHJpbnRmKCIgU0hPVyBGSUxFLCBTSE9XIFhGRVIiKTsKKworI2lmZGVmIENLX0xBQkVMRUQK KyAgICAgICAgcHJpbnRmKCIsIFNIT1cgTEFCRUxFRCIpOworI2VuZGlmIC8qIENLX0xBQkVMRUQg Ki8KKyNpZmRlZiBQQVRURVJOUworICAgICAgICBwcmludGYoIiwgU0hPVyBQQVRURVJOUyIpOwor I2VuZGlmIC8qIFBBVFRFUk5TICovCisjaWZkZWYgU1RSRUFNSU5HCisgICAgICAgIHByaW50Zigi LCBTSE9XIFNUUkVBTUlORyIpOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworI2lmbmRlZiBOT0NT RVRTCisgICAgICAgIHByaW50ZigiLCBTSE9XIENIQVJBQ1RFUi1TRVRTIik7CisjZW5kaWYgLyog Tk9DU0VUUyAqLworICAgIH0KKworI2lmZGVmIENLX1hZWgorI2lmZGVmIFhZWl9JTlRFUk5BTAor ICAgIGlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7CisgICAgICAgIGludCBpOworICAgICAgICBp bnQgeDsKKyAgICAgICAgcHJpbnRmKCIgRmlsZSB0eXBlOiAlc1xuIiwgYmluYXJ5ID8gImJpbmFy eSIgOiAidGV4dCIpOworICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fWikgeyAgICAgICAg ICAgICAgLyogWm1vZGVtICovCisgICAgICAgICAgICBwcmludGYoIiBXaW5kb3cgc2l6ZTogICAi KTsKKyAgICAgICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS53aW5zaXplIDwgMSkKKyAgICAgICAg ICAgICAgcHJpbnRmKCJub25lXG4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg cHJpbnRmKCIlZFxuIix3c2xvdHIpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHByaW50 ZigiIFBhY2tldCAoZnJhbWUpIGxlbmd0aDogIik7CisgICAgICAgICAgICBpZiAocHRhYltwcm90 b2NvbF0uc3BrdGxlbiA8IDApCisgICAgICAgICAgICAgIHByaW50Zigibm9uZVxuIik7CisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByaW50ZigiJWRcbiIsc3BtYXgpOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChwdGFiW3By b3RvY29sXS5zcGt0bGVuID49IDEwMDApCisgICAgICAgICAgICAgIHByaW50ZigiIDFLIHBhY2tl dHNcbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIiAxMjgtYnl0 ZSBwYWNrZXRzXG4iKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIiBQYXRobmFtZSBzdHJp cHBpbmcgd2hlbiBzZW5kaW5nOiAgICVzXG4iLAorICAgICAgICAgICAgICAgc2hvd29mZihwdGFi W3Byb3RvY29sXS5mbnNwKQorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCIgUGF0 aG5hbWUgc3RyaXBwaW5nIHdoZW4gcmVjZWl2aW5nOiAlc1xuIiwKKyAgICAgICAgICAgICAgIHNo b3dvZmYocHRhYltwcm90b2NvbF0uZm5ycCkKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHBy aW50ZigiIEZpbGVuYW1lIGNvbGxpc2lvbiBhY3Rpb246ICAgICAgICAgIik7CisgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBuY29seDsgaSsrKQorICAgICAgICAgIGlmIChjb2x4dGFiW2ldLmt3dmFs ID09IGZuY2FjdCkgYnJlYWs7CisgICAgICAgIHByaW50ZigiJS0xMnMiLCAoaSA9PSBuY29seCkg PyAidW5rbm93biIgOiBjb2x4dGFiW2ldLmt3ZCk7CisKKyAgICAgICAgcHJpbnRmKCJcbiBFc2Nh cGUgY29udHJvbCBjaGFyYWN0ZXJzOiAgICAgICAgICAiKTsKKyAgICAgICAgeCA9IHB0YWJbcHJv dG9jb2xdLnByZWZpeDsKKyAgICAgICAgaWYgKHggPT0gUFhfQUxMKQorICAgICAgICAgIHByaW50 ZigiYWxsXG4iKTsKKyAgICAgICAgZWxzZSBpZiAoeCA9PSBQWF9DQVUgfHwgeD09UFhfV0lMKQor ICAgICAgICAgIHByaW50ZigibWluaW1hbFxuIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBw cmludGYoIm5vbmVcbiIpOworICAgICAgICBpZiAoIShzID0gcHRhYltwcm90b2NvbF0uaF9iX2lu aXQpKQorICAgICAgICAgIHMgPSAiIjsKKyAgICAgICAgcHJpbnRmKCIgQXV0b3JlY2VpdmUgY29t bWFuZCAoYmluYXJ5KTogJXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsKKyAgICAgICAgaWYgKCEo cyA9IHB0YWJbcHJvdG9jb2xdLmhfdF9pbml0KSkKKyAgICAgICAgICBzID0gIiI7CisgICAgICAg IHByaW50ZigiIEF1dG9yZWNlaXZlIGNvbW1hbmQgKHRleHQpOiAgICVzXG4iLCAqcyA/IHMgOiAi KG5vbmUpIik7CisgICAgfQorI2Vsc2UKKyNpZm5kZWYgTk9QVVNICisgICAgaWYgKHByb3RvY29s ICE9IFBST1RPX0spIHsKKwlfUFJPVE9UWVAoIFZPSUQgc2hvZXh0ZXJuLCAodm9pZCkgKTsKKyAg ICAgICAgcHJpbnRmKCJcbkV4ZWN1dGVkIGJ5IGV4dGVybmFsIGNvbW1hbmRzOlxuXG4iKTsKKyAg ICAgICAgcyA9IHB0YWJbcHJvdG9jb2xdLnBfYl9zY21kOworICAgICAgICBpZiAoIXMpIHMgPSAi IjsKKyAgICAgICAgcHJpbnRmKCIgU0VORCBjb21tYW5kIChiaW5hcnkpOiAgICAgICAgJXNcbiIs ICpzID8gcyA6ICIobm9uZSkiKTsKKyAgICAgICAgcyA9IHB0YWJbcHJvdG9jb2xdLnBfdF9zY21k OworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgcHJpbnRmKCIgU0VORCBjb21tYW5k ICh0ZXh0KTogICAgICAgICAgJXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsKKyAgICAgICAgcyA9 IHB0YWJbcHJvdG9jb2xdLnBfYl9yY21kOworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAg ICAgcHJpbnRmKCIgUkVDRUlWRSBjb21tYW5kIChiaW5hcnkpOiAgICAgJXNcbiIsICpzID8gcyA6 ICIobm9uZSkiKTsKKyAgICAgICAgcyA9IHB0YWJbcHJvdG9jb2xdLnBfdF9yY21kOworICAgICAg ICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgcHJpbnRmKCIgUkVDRUlWRSBjb21tYW5kICh0ZXh0 KTogICAgICAgJXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsKKyAgICAgICAgcyA9IHB0YWJbcHJv dG9jb2xdLmhfYl9pbml0OworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgcHJpbnRm KCIgQXV0b3JlY2VpdmUgY29tbWFuZCAoYmluYXJ5KTogJXNcbiIsICpzID8gcyA6ICIobm9uZSki KTsKKyAgICAgICAgcyA9IHB0YWJbcHJvdG9jb2xdLmhfdF9pbml0OworICAgICAgICBpZiAoIXMp IHMgPSAiIjsKKyAgICAgICAgcHJpbnRmKCIgQXV0b3JlY2VpdmUgY29tbWFuZCAodGV4dCk6ICAg JXNcbiIsICpzID8gcyA6ICIobm9uZSkiKTsKKwkoVk9JRCkgc2hvZXh0ZXJuKCk7CisgICAgfQor I2VuZGlmIC8qIE5PUFVTSCAqLworI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAqLworI2VuZGlmIC8q IENLX1hZWiAqLworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PQ1NFVFMKKy8q IENoYXJhY3Rlci1zZXQgaXRlbXMgKi8KKworZXh0ZXJuIGludCBzX2NzZXQsIHJfY3NldCwgYXhj c2V0W10sIGFmY3NldFtdOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgeGZybXRhYltdOworCitWT0lE CitzaG9wYXJsKCkgeworI2lmZGVmIENPTU1FTlQKKyAgICBpbnQgaTsKKy8qIE1pc2xlYWRpbmcu Li4gKi8KKyAgICBwcmludGYoIlxuQXZhaWxhYmxlIExhbmd1YWdlczpcbiIpOworICAgIGZvciAo aSA9IDA7IGkgPCBNQVhMQU5HOyBpKyspIHsKKyAgICAgICAgcHJpbnRmKCIgJXNcbiIsbGFuZ3Nb aV0uZGVzY3JpcHRpb24pOworICAgIH0KKyNlbHNlCisgICAgcHJpbnRmKCJcbkxhbmd1YWdlLXNw ZWNpZmljIHRyYW5zbGF0aW9uIHJ1bGVzOiAlc1xuIiwKKyAgICAgICAgICAgbGFuZ3VhZ2UgPT0g TF9VU0FTQ0lJID8gIm5vbmUiIDogbGFuZ3NbbGFuZ3VhZ2VdLmRlc2NyaXB0aW9uKTsKKyAgICBz aG9jaGFyc2V0KCk7CisgICAgcHJpbnRmKCJcblxuIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor fQorCitWT0lECitzaG9jaGFyc2V0KCkgeworICAgIGludCB4OworI2lmZGVmIENPTU1FTlQKKyAg ICBjaGFyICogcyA9ICJVbmtub3duIjsKKyAgICBleHRlcm4gaW50IHhsYXR5cGU7CisjZW5kaWYg LyogQ09NTUVOVCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGV4dGVybiBpbnQgeGZyeGxhOwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgZGVidWcoRjEwMSwiU0hPVyBGSUxFIENIQVIiLCIi LGZjaGFyc2V0KTsKKyAgICBwcmludGYoIlxuIik7CisjaWZuZGVmIE5PWEZFUgorICAgIHByaW50 ZigiIFRyYW5zZmVyIFRyYW5zbGF0aW9uOiAlc1xuIiwgc2hvd29mZih4ZnJ4bGEpKTsKKyAgICBp ZiAoIXhmcnhsYSkgeworICAgICAgICBwcmludGYoCisgICAgICAiIEJlY2F1c2UgdHJhbnNmZXIg dHJhbnNsYXRpb24gaXMgb2ZmLCB0aGUgZm9sbG93aW5nIGFyZSBpZ25vcmVkOlxuXG4iKTsKKyAg ICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgcHJpbnRmKCIgRmlsZSBDaGFyYWN0ZXItU2V0 OiAlcyAoJXMpLCAiLAorICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkLAorICAg ICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5uYW1lCisgICAgICAgICAgICk7CisgICAgaWYgKCh4 ID0gZmNzaW5mb1tmY2hhcnNldF0uc2l6ZSkgPT0gMTI4KQorICAgICAgcHJpbnRmKCI3LWJpdCIp OworICAgIGVsc2UgaWYgKHggPT0gMjU2KQorICAgICAgcHJpbnRmKCI4LWJpdCIpOworICAgIGVs c2UKKyAgICAgIHByaW50ZigibXVsdGlieXRlIik7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHBy aW50ZigiIEZpbGUgU2NhbjogJXNcbiIsc2hvd29mZihmaWxlcGVlaykpOworICAgIHByaW50Zigi ICAgRGVmYXVsdCA3Yml0LUNoYXJhY3Rlci1TZXQ6ICVzXG4iLGZjc2luZm9bZGNzZXQ3XS5rZXl3 b3JkKTsKKyAgICBwcmludGYoIiAgIERlZmF1bHQgOGJpdC1DaGFyYWN0ZXItU2V0OiAlc1xuIixm Y3NpbmZvW2Rjc2V0OF0ua2V5d29yZCk7CisgICAgcHJpbnRmKCIgVHJhbnNmZXIgQ2hhcmFjdGVy LVNldCIpOworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAodHNsZXZlbCA9PSBUU19MMikKKyAgICAg IHByaW50ZigiOiAoaW50ZXJuYXRpb25hbCkiKTsKKyAgICBlbHNlCisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgIGlmICh0Y2hhcnNldCA9PSBUQ19UUkFOU1ApCisgICAgICBwcmludGYoIjogVHJh bnNwYXJlbnQiKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIjogJXMgKCVzKSIsdGNzaW5mb1t0 Y2hhcnNldF0ua2V5d29yZCwgdGNzaW5mb1t0Y2hhcnNldF0ubmFtZSk7CisgICAgcHJpbnRmKCJc biIpOworI2lmZGVmIENPTU1FTlQKKyAgICBzd2l0Y2ggKHhsYXR5cGUpIHsKKyAgICAgIGNhc2Ug WExBX05PTkU6IHMgPSAiTm9uZSI7IGJyZWFrOworICAgICAgY2FzZSBYTEFfQllURTogcyA9ICJC eXRlIjsgYnJlYWs7CisgICAgICBjYXNlIFhMQV9KQVBBTjogcyA9ICJKYXBhbmVzZSI7IGJyZWFr OworICAgICAgY2FzZSBYTEFfVU5JQ09ERTogcyA9ICJVbmljb2RlIjsgYnJlYWs7CisgICAgfQor ICAgIHByaW50ZigiXG4gVHJhbnNsYXRpb24gdHlwZTogJXNcbiIscyk7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgIHByaW50ZigiIFNFTkQgY2hhcmFjdGVyLXNldC1zZWxlY3Rpb246ICVzXG4i LHhmcm10YWJbc19jc2V0XS5rd2QpOworICAgIHByaW50ZigiIFJFQ0VJVkUgY2hhcmFjdGVyLXNl dC1zZWxlY3Rpb246ICVzXG4iLHhmcm10YWJbcl9jc2V0XS5rd2QpOworICAgIGlmIChzX2NzZXQg PT0gWE1PREVfQSB8fCByX2NzZXQgPT0gWE1PREVfQSkKKyAgICAgIHByaW50ZigKKyAgICAgICIg KFVzZSBTSE9XIEFTU09DSUFUSU9OUyB0byBsaXN0IGF1dG9tYXRpYyBjaGFyYWN0ZXItc2V0IHNl bGVjdGlvbnMuKVxuIgorICAgICAgICAgICAgICk7Cit9CisKK1ZPSUQKK3Nob3dhc3NvYygpIHsK KyAgICBpbnQgaSwgaywgbiA9IDQ7CisgICAgY2hhciAqIHM7CisgICAgcHJpbnRmKCJcbkZvciBp bmNvbWluZyBmaWxlczpcblxuIik7CisgICAgcHJpbnRmKCJUcmFuc2ZlciBDaGFyYWN0ZXItU2V0 ICAgRmlsZSBDaGFyYWN0ZXItU2V0XG4iKTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IE1BWFRDU0VU UzsgaSsrKSB7CisgICAgICAgIGsgPSBheGNzZXRbaV07CisgICAgICAgIGlmIChrIDwgMCB8fCBr ID4gTUFYRkNTRVRTKQorICAgICAgICAgIHMgPSAiKG5vbmUpIjsKKyAgICAgICAgZWxzZQorICAg ICAgICAgIHMgPSBmY3NpbmZvW2tdLmtleXdvcmQ7CisgICAgICAgIGlmICghcykgcyA9ICIiOwor ICAgICAgICBpZiAoISpzKSBzID0gIihub25lKSI7CisgICAgICAgIHByaW50ZigiICUtMjVzJXNc biIsdGNzaW5mb1tpXS5rZXl3b3JkLHMpOworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIG4gPSAwOworICAgIH0KKyAgICBwcmludGYo IlxuRm9yIG91dGJvdW5kIGZpbGVzOlxuXG4iKTsKKyAgICBuICs9IDI7CisgICAgaWYgKCsrbiA+ IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBuID0gMDsKKyAgICBw cmludGYoIkZpbGUgQ2hhcmFjdGVyLVNldCAgICAgICBUcmFuc2ZlciBDaGFyYWN0ZXItU2V0XG4i KTsKKyAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIG4gPSAwOworICAgIGZvciAoaSA9IDA7IGkgPD0gTUFYRkNTRVRTOyBpKyspIHsKKyAgICAg ICAgayA9IGFmY3NldFtpXTsKKyAgICAgICAgaWYgKGsgPCAwIHx8IGsgPiBNQVhUQ1NFVFMpCisg ICAgICAgICAgcyA9ICIobm9uZSkiOworICAgICAgICBlbHNlCisgICAgICAgICAgcyA9IHRjc2lu Zm9ba10ua2V5d29yZDsKKyAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgIGlmICghKnMp IHMgPSAiKG5vbmUpIjsKKyAgICAgICAgcHJpbnRmKCIgJS0yNXMlc1xuIixmY3NpbmZvW2ldLmtl eXdvcmQscyk7CisgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm47IGVsc2UgbiA9IDA7CisgICAgfQorfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKwor Vk9JRAorc2hvcGFyKCkgeworICAgIHByaW50ZigiU2hvdyB3aGF0PyAgKFR5cGUgXCJzaG93ID9c IiBmb3IgYSBsaXN0IG9mIHBvc3NpYmlsaXRpZXMuKVxuIik7Cit9CisjZW5kaWYgLyogTk9TSE9X ICovCisKKyNpZm5kZWYgTk9YRkVSCisvKiAgRCBPIFMgVCBBIFQgIC0tICBEaXNwbGF5IGZpbGUg dHJhbnNmZXIgc3RhdGlzdGljcy4gICovCisKK2ludAorZG9zdGF0KGJyaWVmKSBpbnQgYnJpZWY7 IHsKKyAgICBleHRlcm4gbG9uZyBmaWxyZWosIHBlYWtjcHM7CisgICAgZXh0ZXJuIGludCBsYXN0 c3BtYXgsIHN0cmVhbWVkLCBjbGVhcmVkLCBzdHJlYW1vazsKKyAgICBleHRlcm4gY2hhciB3aG9h cmV1W107CisgICAgaW50IG4gPSAwLCBmdHAgPSAwOworICAgIGV4dGVybiBpbnQgZG9jcmMsIGlu dGVycnVwdGVkLCBmYXRhbGlvOworCisgICAgZnRwID0gbGFzdHhmZXIgJiBXX0ZUUDsKKworI2lm ZGVmIENLX1RUR1dTSVoKKyNpZmRlZiBPUzIKKyAgICBpZiAodHRfY29sc1tWVEVSTV0gPCAwIHx8 IHR0X3Jvd3NbVlRFUk1dIDwgMCkKKyAgICAgIHR0Z3dzaXooKTsKKyNlbHNlIC8qIE9TMiAqLwor ICAgIGlmICh0dGd3c2l6KCkgPiAwKSB7CisgICAgICAgIGlmICh0dF9yb3dzID4gMCAmJiB0dF9j b2xzID4gMCkgeworICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOworICAgICAgICAgICAg Y21kX2NvbHMgPSB0dF9jb2xzOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAgIGRlYnVnKEYxMDEsImRvc3RhdCB4ZmVyc3Rh dCIsIiIseGZlcnN0YXQpOworICAgIGlmICh4ZmVyc3RhdCA8IDApIHsKKyAgICAgICAgcHJpbnRm KCIgTm8gZmlsZSB0cmFuc2ZlcnMgeWV0LlxuIik7CisgICAgICAgIHJldHVybigxKTsKKyAgICB9 CisgICAgbiA9IDA7CisgICAgaWYgKGJyaWVmKSB7IHByaW50ZigiXG4iKTsgbisrOyB9OworICAg IHByaW50ZigiIHByb3RvY29sICAgICAgICAgICAgICAgOiAlc1xuIiwKKyAgICAgICAgICAgZnRw ID8gImZ0cCIgOiBwdGFiW3Byb3RvY29sXS5wX25hbWUpOworICAgIG4rKzsKKyAgICBwcmludGYo IiBzdGF0dXMgICAgICAgICAgICAgICAgIDogIik7CisgICAgaWYgKHhmZXJzdGF0KSBwcmludGYo IlNVQ0NFU1NcbiIpOworICAgIGVsc2UgaWYgKGludGVycnVwdGVkKSBwcmludGYoIkZBSUxVUkUg KGludGVycnVwdGVkKVxuIik7CisgICAgZWxzZSBpZiAoZmF0YWxpbykgcHJpbnRmKCJGQUlMVVJF IChpL28gZXJyb3IpXG4iKTsKKyAgICBlbHNlIHByaW50ZigiRkFJTFVSRVxuIik7CisjaWZuZGVm IFhZWl9JTlRFUk5BTAorICAgIGlmICghZnRwICYmIHByb3RvY29sICE9IFBST1RPX0spIHsKKyAg ICAgICAgcHJpbnRmKCJcbiBleHRlcm5hbCBwcm90b2NvbCBzdGF0aXN0aWNzIG5vdCBhdmFpbGFi bGVcbiIpOworICAgICAgICByZXR1cm4oMSk7CisgICAgfQorI2VuZGlmIC8qIFhZWl9JTlRFUk5B TCAqLworICAgIG4rKzsKKyAgICBpZiAoIWZ0cCkgeworICAgICAgICBpZiAoIXhmZXJzdGF0ID4g MCkgeworICAgICAgICAgICAgaWYgKGRvY3JjKQorICAgICAgICAgICAgICBwcmludGYoIiBjcmMt MTYgb2YgZmlsZShzKSAgICAgIDogJWxkXG4iLCBjcmMxNik7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHByaW50ZigiIGNyYy0xNiBvZiBmaWxlKHMpICAgICAgOiAoZGlzYWJsZWQp XG4iKTsKKyAgICAgICAgICAgIG4rKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXhmZXJzdGF0 ICYmICplcGt0bXNnKSB7CisgICAgICAgICAgICBwcmludGYoIiByZWFzb24gICAgICAgICAgICAg ICAgIDogJXNcbiIsIGVwa3Rtc2cpOworICAgICAgICAgICAgbisrOworICAgICAgICB9CisgICAg fQorICAgIGlmICghYnJpZWYpIHsKKyNpZmRlZiBORVdGVFAKKyAgICAgICAgaWYgKGZ0cCkgewor ICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZnRwX3NydnR5cFtdOworICAgICAgICAgICAgcHJpbnRm KCIgcmVtb3RlIHN5c3RlbSB0eXBlICAgICA6ICVzXG4iLGZ0cF9zcnZ0eXApOworICAgICAgICB9 IGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAgICBpZiAod2hvYXJldVswXSkgewor ICAgICAgICAgICAgcHJpbnRmKCIgcmVtb3RlIHN5c3RlbSB0eXBlICAgICA6ICVzXG4iLAorICAg ICAgICAgICAgICAgICAgIGdldHN5c2lkKChjaGFyICopd2hvYXJldSkpOworICAgICAgICAgICAg bisrOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiIGZpbGVzIHRyYW5zZmVycmVkICAgICAg OiAlbGRcbiIsZmlsY250IC0gZmlscmVqKTsKKyAgICAgICAgaWYgKCFmdHApCisgICAgICAgICAg cHJpbnRmKCIgZmlsZXMgbm90IHRyYW5zZmVycmVkICA6ICVsZFxuIixmaWxyZWopOworICAgICAg ICBwcmludGYoIiBjaGFyYWN0ZXJzIGxhc3QgZmlsZSAgIDogJXNcbiIsY2tmc3RvYShmZmMpKTsK KyAgICAgICAgcHJpbnRmKCIgdG90YWwgZmlsZSBjaGFyYWN0ZXJzICA6ICVzXG4iLGNrZnN0b2Eo dGZjKSk7CisgICAgICAgIG4gKz0gZnRwID8gMyA6IDQ7CisgICAgICAgIGlmICghZnRwKSB7Cisg ICAgICAgICAgICBwcmludGYoIiBjb21tdW5pY2F0aW9uIGxpbmUgaW4gIDogJXNcbiIsY2tmc3Rv YSh0bGNpKSk7CisgICAgICAgICAgICBwcmludGYoIiBjb21tdW5pY2F0aW9uIGxpbmUgb3V0IDog JXNcbiIsY2tmc3RvYSh0bGNvKSk7CisgICAgICAgICAgICBwcmludGYoIiBwYWNrZXRzIHNlbnQg ICAgICAgICAgIDogJWRcbiIsIHNwYWNrZXRzKTsKKyAgICAgICAgICAgIHByaW50ZigiIHBhY2tl dHMgcmVjZWl2ZWQgICAgICAgOiAlZFxuIiwgcnBhY2tldHMpOworICAgICAgICAgICAgbiArPSA0 OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmdHApIGdvdG8gZG90aW1lczsKKworICAgIHBy aW50ZigiIGRhbWFnZWQgcGFja2V0cyByZWMnZCAgOiAlZFxuIiwgY3J1bmNoZWQpOworICAgIHBy aW50ZigiIHRpbWVvdXRzICAgICAgICAgICAgICAgOiAlZFxuIiwgdGltZW91dHMpOworICAgIHBy aW50ZigiIHJldHJhbnNtaXNzaW9ucyAgICAgICAgOiAlZFxuIiwgcmV0cmFucyk7CisgICAgbiAr PSAzOworCisgICAgaWYgKCFicmllZikgeworICAgICAgICBpZiAoZmlsY250ID4gMCkgeworICAg ICAgICAgICAgcHJpbnRmKCIgcGFyaXR5ICAgICAgICAgICAgICAgICA6ICVzIixwYXJuYW0oKGNo YXIpcGFyaXR5KSk7CisgICAgICAgICAgICBuKys7CisgICAgICAgICAgICBpZiAoYXV0b3Bhcikg eyBwcmludGYoIiAoZGV0ZWN0ZWQgYXV0b21hdGljYWxseSkiKTsgbisrOyB9CisgICAgICAgICAg ICBwcmludGYoCisgICAgICAgICAgICAgICAgICJcbiBjb250cm9sIGNoYXJhY3RlcnMgICAgIDog JWxkIHByZWZpeGVkLCAlbGQgdW5wcmVmaXhlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBjY3As IGNjdSk7CisgICAgICAgICAgICBuKys7CisgICAgICAgICAgICBwcmludGYoIiA4dGggYml0IHBy ZWZpeGluZyAgICAgIDogIik7CisgICAgICAgICAgICBuKys7CisgICAgICAgICAgICBpZiAoZWJx ZmxnKSBwcmludGYoInllcyBbJWNdXG4iLGVicSk7IGVsc2UgcHJpbnRmKCJub1xuIik7CisgICAg ICAgICAgICBuKys7CisgICAgICAgICAgICBwcmludGYoIiBsb2NraW5nIHNoaWZ0cyAgICAgICAg IDogJXNcbiIsIGxzY2FwdSA/ICJ5ZXMiIDogIm5vIik7CisgICAgICAgICAgICBuKys7CisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9CisgICAgaWYgKHN0cmVhbWVkID4gMCkKKyAgICAg IHByaW50ZigiIHdpbmRvdyBzbG90cyB1c2VkICAgICAgOiAoc3RyZWFtaW5nKVxuIik7CisgICAg ZWxzZQorICAgICAgcHJpbnRmKCIgd2luZG93IHNsb3RzIHVzZWQgICAgICA6ICVkIG9mICVkXG4i LCB3bWF4LCB3c2xvdHIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsgfQorICAgIHByaW50ZigiIHJlbGlhYmxlOiAg ICAgICAgICAgICAgOiAlcyVzXG4iLAorICAgICAgICAgICBzdHJlYW1vayA/ICIiIDogIm5vdCAi LCAibmVnb3RpYXRlZCIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsgfQorICAgIHByaW50ZigiIGNsZWFyY2hhbm5l bDogICAgICAgICAgOiAlcyVzXG4iLAorICAgICAgICAgICBjbGVhcmVkICA/ICIiIDogIm5vdCAi LCAibmVnb3RpYXRlZCIpOworICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBuID0gMDsgfQorCisgICAgaWYgKCFicmllZikgeworICAg ICAgICBwcmludGYoIiBwYWNrZXQgbGVuZ3RoICAgICAgICAgIDogJWQgKHNlbmQpLCAlZCAocmVj ZWl2ZSlcbiIsCisgICAgICAgICAgICAgICBsYXN0c3BtYXgsIHVycHNpeik7CisgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBu ID0gMDsgfQorICAgICAgICBwcmludGYoIiBjb21wcmVzc2lvbiAgICAgICAgICAgIDogIik7Cisg ICAgICAgIGlmIChycHRmbGcpCisgICAgICAgICAgcHJpbnRmKCJ5ZXMgWyVjXSAoJWxkKVxuIiwo Y2hhcikgcnB0cSxycHRuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50Zigibm9cbiIp OworICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMSk7IGVsc2UgbiA9IDA7IH0KKyAgICAgICAgaWYgKGJjdHUgPT0gNCkKKyAgICAgICAgICBw cmludGYoIiBibG9jayBjaGVjayB0eXBlIHVzZWQgIDogYmxhbmstZnJlZS0yXG4iKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgIHByaW50ZigiIGJsb2NrIGNoZWNrIHR5cGUgdXNlZCAgOiAlZFxu IixiY3R1KTsKKyAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIG4gPSAwOyB9CisgICAgfQorCisgIGRvdGltZXM6CisKKyNpZmRl ZiBHRlRJTUVSCisjaWZkZWYgQ09NTUVOVAorICAgIHByaW50ZigiIGVsYXBzZWQgdGltZSAgICAg ICAgICAgOiAlMC4zZiBzZWMsICVzXG4iLCBmcHRzZWNzLGhobW1zcyh0c2VjcykpOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICBwcmludGYoIiBlbGFwc2VkIHRpbWUgICAgICAgICAgIDogJXMg KCUwLjNmIHNlYylcbiIsCisgICAgICAgICAgIGhobW1zcygobG9uZykoZnB0c2VjcyArIDAuNSkp LGZwdHNlY3MpOworI2Vsc2UKKyNpZmRlZiBDT01NRU5UCisgICAgcHJpbnRmKCIgZWxhcHNlZCB0 aW1lICAgICAgICAgICA6ICVzICglZCBzZWMpXG4iLGhobW1zcyh0c2VjcyksdHNlY3MpOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICBwcmludGYoIiBlbGFwc2VkIHRpbWUgICAgICAgICAgIDog JWQgc2VjLCAlc1xuIix0c2VjcyxoaG1tc3ModHNlY3MpKTsKKyNlbmRpZiAvKiBHRlRJTUVSICov CisgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEp OyBlbHNlIG4gPSAwOyB9CisgICAgaWYgKCFmdHAgJiYgbG9jYWwgJiYgIW5ldHdvcmsgJiYgIWJy aWVmKSB7CisgICAgICAgIGlmIChzcGVlZCA8PSAwTCkgc3BlZWQgPSB0dGdzcGQoKTsKKyAgICAg ICAgaWYgKHNwZWVkID4gMEwpIHsKKyAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKQorICAg ICAgICAgICAgICBwcmludGYoIiB0cmFuc21pc3Npb24gcmF0ZSAgICAgIDogNzUvMTIwMCBicHNc biIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIiB0cmFuc21pc3Np b24gcmF0ZSAgICAgIDogJWxkIGJwc1xuIixzcGVlZCk7CisgICAgICAgICAgICBpZiAoKytuID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbiA9IDA7IH0K KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZ0cCAmJiBsb2NhbCAmJiAhbmV0d29yayAmJiAg ICAvKiBPbmx5IG1ha2VzIHNlbnNlIGZvciAqLworICAgICAgICBtZG10eXAgPT0gMCAmJiAgICAg ICAgICAgICAgICAgIC8qIGRpcmVjdCBzZXJpYWwgY29ubmVjdGlvbnMgKi8KKyAgICAgICAgc3Bl ZWQgPiA5OUwgJiYgICAgICAgICAgICAgICAgICAvKiB3aGVuIHdlIHJlYWxseSBrbm93IHRoZSBz cGVlZCAqLworICAgICAgICBzcGVlZCAhPSA4ODgwTAorICAgICAgICApIHsKKyAgICAgICAgaW50 IGVmZjsKKyAgICAgICAgZWZmID0gKCgodGZjcHMgKiAxMDBMKSAvIChzcGVlZCAvIDEwMEwpKSAr IDVMKSAvIDEwTDsKKyAgICAgICAgcHJpbnRmKCIgZWZmZWN0aXZlIGRhdGEgcmF0ZSAgICA6ICVs ZCBjcHMgKCVkJSUpXG4iLHRmY3BzLGVmZik7CisgICAgfSBlbHNlCisgICAgICBwcmludGYoIiBl ZmZlY3RpdmUgZGF0YSByYXRlICAgIDogJWxkIGNwc1xuIiwgdGZjcHMpOworICAgIGlmICghZnRw ICYmIHBlYWtjcHMgPiAwTCAmJiBwZWFrY3BzID4gdGZjcHMpCisgICAgICBwcmludGYoIiBwZWFr IGRhdGEgcmF0ZSAgICAgICAgIDogJWxkIGNwc1xuIiwgcGVha2Nwcyk7CisgICAgaWYgKGJyaWVm KQorICAgICAgcHJpbnRmKCJcblVzZSBTVEFUSVNUSUNTIC9WRVJCT1NFIGZvciBncmVhdGVyIGRl dGFpbC5cblxuIik7CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisj aWZuZGVmIE5PU1BMCisKKy8qIFRoZSBJTlBVVCBjb21tYW5kICovCisKKy8qCisgIE5PVEU6IEFu IElOUFVUIHRpbWVvdXQgb2YgMCBtZWFucyB0byBwZXJmb3JtIGEgbm9uYmxvY2tpbmcgcmVhZCBv ZiB0aGUKKyAgbWF0ZXJpYWwgdGhhdCBoYXMgYWxyZWFkeSBhcnJpdmVkIGFuZCBpcyB3YWl0aW5n IHRvIGJlIHJlYWQsIGFuZCBwZXJmb3JtCisgIG1hdGNoZXMgYWdhaW5zdCBpdCwgd2l0aG91dCBk b2luZyBhbnkgZnVydGhlciByZWFkcy4gIEl0IHNob3VsZCBzdWNjZWVkCisgIG9yIGZhaWwgaW5z dGFudGFuZW91c2x5LgorKi8KKworLyogT3V0cHV0IGJ1ZmZlcmluZyBmb3IgImRvaW5wdXQiICov CisKKyNpZmRlZiBwZHAxMQorI2RlZmluZSBNQVhCVVJTVCAxNiAgICAgICAgICAgICAvKiBNYXhp bXVtIHNpemUgb2YgaW5wdXQgYnVyc3QgKi8KKyNlbHNlCisjZGVmaW5lIE1BWEJVUlNUIDEwMjQK KyNlbmRpZiAvKiBwZHAxMSAqLworI2lmZGVmIE9TSworc3RhdGljIENIQVIgKmNvbmJ1ZjsgICAg ICAgICAgICAvKiBCdWZmZXIgdG8gaG9sZCBvdXRwdXQgZm9yIGNvbnNvbGUgKi8KKyNlbHNlCitz dGF0aWMgQ0hBUiBjb25idWZbTUFYQlVSU1RdOyAgIC8qIEJ1ZmZlciB0byBob2xkIG91dHB1dCBm b3IgY29uc29sZSAqLworI2VuZGlmIC8qIE9TSyAqLworc3RhdGljIGludCBjb25jbnQgPSAwOyAg ICAgICAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyBidWZmZXJlZCAqLworI2lmZGVmIE9TSwor c3RhdGljIENIQVIgKnNlc2J1ZjsgICAgICAgICAgICAvKiBCdWZmZXIgdG8gaG9sZCBvdXRwdXQg Zm9yIHNlc3Npb24gbG9nICovCisjZWxzZQorc3RhdGljIENIQVIgc2VzYnVmW01BWEJVUlNUXTsg ICAvKiBCdWZmZXIgdG8gaG9sZCBvdXRwdXQgZm9yIHNlc3Npb24gbG9nICovCisjZW5kaWYgLyog T1NLICovCitzdGF0aWMgaW50IHNlc2NudCA9IDA7ICAgICAgICAgIC8qIE51bWJlciBvZiBjaGFy YWN0ZXJzIGJ1ZmZlcmVkICovCisKK2V4dGVybiBpbnQgZGVic2VzOyAgICAgICAgICAgICAgICAg ICAgICAvKiBURVJNSU5BTCBERUJVRyBPTi9PRkYgKi8KKworc3RhdGljIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIElOUFVUIGVjaG9pbmcgKi8KK215ZmxzaCgpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgc2Vzc2lvbiBsb2cgb3V0cHV0LiAq LworICAgIGlmIChjb25jbnQgPiAwKSB7CisgICAgICAgIGlmIChkZWJzZXMpIHsgICAgICAgICAg ICAgICAgICAgLyogVGVybWluYWwgZGVidWdnaW5nPyAqLworICAgICAgICAgICAgaW50IGk7Cisg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uY250OyBpKyspCisgICAgICAgICAgICAgIGNv bm9sKGRiY2hyKGNvbmJ1ZltpXSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICBjb254byhj b25jbnQsIChjaGFyICopIGNvbmJ1Zik7CisgICAgICAgIGNvbmNudCA9IDA7CisgICAgfQorICAg IGlmIChzZXNjbnQgPiAwKSB7CisgICAgICAgIGxvZ3N0cigoY2hhciAqKSBzZXNidWYsIHNlc2Nu dCk7CisgICAgICAgIHNlc2NudCA9IDA7CisgICAgfQorfQorCisvKiBFeGVjdXRlIHRoZSBJTlBV VCBhbmQgTUlOUFVUIGNvbW1hbmRzICovCisKK2ludCBpbnN0YXR1cyA9IC0xOworbG9uZyBpbmV0 aW1lID0gLTFMOworaW50IGlud2FpdCA9IDA7CitpbnQgbm93cmFwID0gMDsKKworLyogRm9yIHJl dHVybmluZyB0aGUgaW5wdXQgc2VxdWVuY2UgdGhhdCBtYXRjaGVkICovCisKKyNpZmRlZiBCSUdC VUZPSworI2RlZmluZSBNQVRDSEJVRlNJWiA4MTkxCisjZWxzZQorI2RlZmluZSBNQVRDSEJVRlNJ WiAxMDIzCisjZW5kaWYgLyogQklHQlVGT0sgKi8KK3N0YXRpYyBjaGFyICogbWF0Y2hidWYgPSBO VUxMOworc3RhdGljIGludCBtYXRjaGluZGV4ID0gMDsKK3N0YXRpYyBpbnQgYnVyc3QgPSAwOyAg ICAgICAgICAgICAgICAgICAgICAvKiBDaGFycyByZW1haW5pbmcgaW4gaW5wdXQgYnVyc3QgKi8K Ky8qCisgIHRpbW8gPSBIb3cgbG9uZyB0byB3YWl0OgorICAgICAgICAgPCAwID0gV2FpdCBmb3Jl dmVyCisgICAgICAgICAgIDAgPSBEb24ndCB3YWl0IGF0IGFsbCAtIG1hdGVyaWFsIG11c3QgYWxy ZWFkeSBoYXZlIGFycml2ZWQKKyAgICAgICAgID4gMCA9IFdhaXQgdGhpcyBtYW55IHNlY29uZHMK KyAgbXMgICA9IEFycmF5IG9mIHN0cmluZ3MgdG8gd2FpdCBmb3IuCisgIG1wICAgPSBBcnJheSBv ZiBmbGFncy4KKyAgICAgICAgIElmIG1wW2ldID09IDAsIG1zW2ldIGlzIGxpdGVyYWwsIGVsc2Ug aXQncyBhIHBhdHRlcm4uCisgIGZsYWdzID0gYml0IG1hc2sKKyAgICBJTlBTV19OT00gPSAvTk9N QVRDSCA9IDEKKyAgICBJTlBTV19DTFIgPSAvQ0xFQVIgICA9IDIKKyAgICBJTlBTV19OT1cgPSAv Tk9XUkFQICA9IDQKKyAgICBJTlBTV19DT1UgPSAvQ09VTlQgICA9IDgKKyAgY291bnQgPSAvQ09V TlQ6IHZhbHVlIGlmIGEgL0NPVU5UIHN3aXRjaCB3YXMgZ2l2ZW4uCisKKyBSZXR1cm5zOgorICAg IDAgb24gZmFpbHVyZSwgMSBvbiBzdWNjZXNzLgorKi8KKyNpZm5kZWYgRVNfTk9STUFMCisjZGVm aW5lIEVTX05PUk1BTCAwCisjZW5kaWYJLyogRVNfTk9STUFMICovCitleHRlcm4gaW50IGluZXNj W10sIG9sZGVzY1tdOworCitpbnQKK2RvaW5wdXQodGltbyxtcyxtcCxmbGFncyxjb3VudCkKKyAg ICBpbnQgdGltbzsgY2hhciAqbXNbXTsgaW50IG1wW107IGludCBmbGFnczsgaW50IGNvdW50OyB7 CisgICAgZXh0ZXJuIGludCBpbmludHI7CisjaWZkZWYgQ0tfQVVUT0RMCisgICAgZXh0ZXJuIGlu dCBpbmF1dG9kbDsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyAgICBpbnQgeCwgeSwgaSwgdCwg cnQsIGljbiwgYW55Y2hhciA9IDAsIG1pW01JTlBNQVhdOworI2lmZGVmIEdGVElNRVIKKyAgICBD S0ZMT0FUIGZwdCA9IDAuMDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgaW50IHNhdmVjb3Vu dCA9IDA7CisgICAgaW50IG5vbWF0Y2ggPSAwOworICAgIGludCBjbGVhcmZpcnN0ID0gMDsKKyAg ICBpbnQgbGFzdGNoYXIgPSAwOworICAgIGludCB3YWl0aW5nID0gMDsKKyAgICBpbnQgaW1hc2sg PSAwOworICAgIGNoYXIgY2gsICp4cCwgKnM7CisgICAgQ0hBUiBjOworI2lmbmRlZiBOT0xPQ0FM CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB0ZXJtX2lvOworICAgIGludCB0ZXJtX2lvX3Nh dmU7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIFROQ09E RQorICAgIHN0YXRpYyBpbnQgY3IgPSAwOworI2VuZGlmIC8qIFROQ09ERSAqLworICAgIGludCBp c190biA9IDA7CisjaWZkZWYgU1NIQlVJTFRJTgorICAgIGV4dGVybiBpbnQgc3NoX2NhczsKKyAg ICBleHRlcm4gY2hhciAqIHNzaF9jbWQ7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworICAgIGlu dCBub2VzY3NlcSA9IDA7CQkJLyogRmlsdGVyIGVzY2FwZSBzZXF1ZW5jZXMgKi8KKworICAgIGRl YnVnKEYxMDEsImlucHV0IGNvdW50IiwiIixjb3VudCk7CisgICAgZGVidWcoRjEwMSwiaW5wdXQg ZmxhZ3MiLCIiLGZsYWdzKTsKKworLyoKKyAgQ0tfQlVSU1QgZW5hYmxlcyB0aGUgSU5QVVQgc3Bl ZWR1cCBjb2RlLCB3aGljaCBkZXBlbmRzIG9uIHR0Y2hrKCkgcmV0dXJuaW5nCisgIGFjY3VyYXRl IGluZm9ybWF0aW9uLiAgSWYgSU5QVVQgZmFpbHMgd2l0aCB0aGlzIGNvZGUgZW5hYmxlZCwgY2hh bmdlIHRoZQorICBhYm92ZSAiI2RlZmluZSIgdG8gIiN1bmRlZiIuCisqLworI2RlZmluZSBDS19C VVJTVAorCisvKioqKiogQ0hBTkdFIFRISVMgVE8gQSBTRVQgSU5QVVQgUEFSQU1FVEVSICoqKioq LworCisgICAgbm9lc2NzZXEgPSAoc2Vzc2Z0ID09IFhZRlRfVCk7CS8qIEZpbHRlciBlc2NhcGUg c2VxdWVuY2VzICovCisKKyAgICBpbWFzayA9IGNtYXNrOworICAgIGlmIChwYXJpdHkpIGltYXNr ID0gMHg3ZjsKKyAgICBpbndhaXQgPSB0aW1vOyAgICAgICAgICAgICAgICAgICAgICAvKiBGb3Ig XHYoaW53YWl0KSAqLworCisgICAgLyogT3B0aW9ucyBmcm9tIGNvbW1hbmQgc3dpdGNoZXMgKi8K KworICAgIG5vd3JhcCA9IGZsYWdzICYgSU5QU1dfTk9XOwkJLyogNCA9IC9OT1dSQVAgKi8KKyAg ICBub21hdGNoID0gZmxhZ3MgJiBJTlBTV19OT007CS8qIDEgPSAvTk9NQVRDSCAqLworICAgIGNs ZWFyZmlyc3QgPSBmbGFncyAmIElOUFNXX0NMUjsJLyogMiA9IC9DTEVBUiAqLworICAgIHNhdmVj b3VudCA9IGNvdW50OworCisgICAgbWFrZXN0cigmaW5wbWF0Y2gsTlVMTCk7CisgICAgaWYgKCFt YXRjaGJ1ZikgeworICAgICAgICBtYXRjaGJ1ZiA9IG1hbGxvYyhNQVRDSEJVRlNJWisxKTsKKyAg ICAgICAgbWF0Y2hidWZbMF0gPSBOVUw7CisgICAgfQorICAgIG1hdGNoaW5kZXggPSAwOworCisg ICAgLyogSWYgbGFzdCB0aW1lIHRocm91Z2ggd2UgcmV0dXJuZWQgYmVjYXVzZSBvZiAvTk9XUkFQ IGFuZCBidWZmZXIgZnVsbCAqLworICAgIC8qIG5vdyB3ZSBoYXZlIHRvIGNsZWFyIHRoZSBidWZm ZXIgdG8gbWFrZSByb29tIGZvciBhbm90aGVyIGxvYWQuICovCisKKyAgICBpZiAobm93cmFwICYm IGluc3RhdHVzID09IElOUF9CRikKKyAgICAgIGNsZWFyZmlyc3QgPSAxOworCisgICAgaWYgKGNs ZWFyZmlyc3QpIHsJCQkvKiBJTlBVVCAvQ0xFQVIgKi8KKwlpbnQgaTsKKwlteWZsc2goKTsJCQkv KiBGbHVzaCBzY3JlZW4gYW5kIGxvZyBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IGluYnVm c2l6ZTsgaSsrKQorCSAgaW5wYnVmW2ldID0gTlVMOworCWlucGJwID0gaW5wYnVmOworICAgIH0K KyAgICBpc190biA9CisjaWZkZWYgVE5DT0RFCisgICAgICAgIChsb2NhbCAmJiBuZXR3b3JrICYm IElTX1RFTE5FVCgpKSB8fCAoIWxvY2FsICYmIHNzdGVsbmV0KQorI2Vsc2UKKyAgICAgICAgIDAK KyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAgICAgICA7CisKKyNpZmRlZiBDS19TU0wKKyAgICBp ZiAoaXNfdG4pIGlmIChzc2xfcmF3X2ZsYWcgfHwgdGxzX3Jhd19mbGFnKSBpc190biA9IDA7Cisj ZW5kaWYJLyogQ0tfU1NMICovCisKKyAgICBpbnN0YXR1cyA9IElOUF9JRTsgICAgICAgICAgICAg ICAgICAvKiAzID0gaW50ZXJuYWwgZXJyb3IgKi8KKyAgICBrYmNoYXIgPSAwOworCisjaWZkZWYg T1NLCisgICAgaWYgKGNvbmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIGlmICgoY29uYnVmID0gKENI QVIgKiltYWxsb2MoTUFYQlVSU1QqMikpID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgfQorICAgICAgICBzZXNidWYgPSBjb25idWYgKyBNQVhCVVJTVDsKKyAgICB9 CisjZW5kaWYgLyogT1NLICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgIGlmIChsb2NhbCkgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGxvY2FsIG1vZGUuLi4gKi8KKyAgICAgICAgaWYg KCh3YWl0aW5nID0gdHRjaGsoKSkgPCAwKSB7ICAvKiBjaGVjayB0aGF0IGNvbm5lY3Rpb24gaXMg b3BlbiAqLworCSAgICBpZiAoIXF1aWV0KSB7CisJCWlmICgoIW5ldHdvcmsgCisjaWZkZWYgVE5f Q09NUE9SVAorCQkgICAgICB8fCBpc3RuY29tcG9ydCgpCisjZW5kaWYgLyogVE5fQ09NUE9SVCAq LworCQkgICAgICApICYmIGNhcnJpZXIgIT0gQ0FSX09GRikKKwkJICAgIHByaW50ZigiP0NhcnJp ZXIgZGV0ZWN0IGZhaWx1cmUgb24gJXMuXG4iLCB0dG5hbWUpOworCQllbHNlCisJCSAgICBwcmlu dGYoIj9Db25uZWN0aW9uICVzICVzIGlzIG5vdCBvcGVuLlxuIiwKKwkJICAgICAgIG5ldHdvcmsg PyAidG8iIDogIm9uIiwKKwkJICAgICAgIHR0bmFtZQorCQkgICAgICAgKTsKKwkgICAgfQorICAg ICAgICAgICAgaW5zdGF0dXMgPSBJTlBfSU87CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAg ICAgIH0KKyAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCB3YWl0aW5nIiwiIix3YWl0aW5nKTsK KyAgICAgICAgeSA9IHR0dnQoc3BlZWQsZmxvdyk7ICAgICAgICAgICAvKiBQdXQgbGluZSBpbiAi dHR2dCIgbW9kZSAqLworICAgICAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgICAgIHByaW50Zigi P0lOUFVUIGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKyAgICAgICAgICAgIGluc3RhdHVzID0g SU5QX0lPOworICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgIC8qIFdhdGNo IG91dCBmb3IgZmFpbHVyZS4gKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT0xPQ0FM ICovCisKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgaWYgKCBuZXR3b3JrICYmIG5ldHR5cGUgPT0g TkVUX1NTSCAmJiBzc2hfY2FzICYmIHNzaF9jbWQgJiYgCisgICAgICAgICAhKHN0cmNtcChzc2hf Y21kLCJrZXJtaXQiKSAmJiBzdHJjbXAoc3NoX2NtZCwic2Z0cCIpKSkgeworICAgICAgICBpZiAo IXF1aWV0KQorCSAgcHJpbnRmKCI/U1NIIFN1YnN5c3RlbSBhY3RpdmU6ICVzXG4iLCBzc2hfY21k KTsKKyAgICAgICAgaW5zdGF0dXMgPSBJTlBfSUtTOworICAgICAgICByZXR1cm4oMCk7CisgICAg fQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworICAgIGRlYnVnKEYxMTEsImRvaW5wdXQgbXNb MF0iLG1zWzBdLHdhaXRpbmcpOworCisgICAgaWYgKCFtc1swXSB8fCBpc2VtcHR5c3RyaW5nKG1z WzBdKSkgeyAvKiBObyBzZWFyY2ggc3RyaW5nIHdhcyBnaXZlbiBub3IgKi8KKwlpZiAoY291bnQg PCAyKQkJCSAgLyogYSAvQ09VTlQ6IHN3aXRjaCBzbyB3ZSBqdXN0ICovCisJICBhbnljaGFyID0g MTsJCQkgIC8qIHdhaXQgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIgKi8KKyAgICB9CisgICAgaWYg KG5vbWF0Y2gpIGFueWNoYXIgPSAwOwkJLyogRG9uJ3QgbWF0Y2ggYW55dGhpbmcgKi8KKworICAg IGlmICghYW55Y2hhciAmJiB3YWl0aW5nID09IDAgJiYgdGltbyA9PSAwKQorICAgICAgcmV0dXJu KDApOworCisjaWZuZGVmIE5PREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGNoYXIg eGJ1ZlsyNF07CisgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgYW55Y2hhciIsIiIsYW55Y2hh cik7CisgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgdGltbyIsIiIsdGltbyk7CisgICAgICAg IGRlYnVnKEYxMDEsImRvaW5wdXQgZWNobyIsIiIsaW5lY2hvKTsKKyNpZmRlZiBDS19CVVJTVAor ICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IGJ1cnN0IiwiIixidXJzdCk7CisjZW5kaWYJLyog Q0tfQlVSU1QgKi8KKyAgICAgICAgeSA9IC0xOworICAgICAgICB3aGlsZSAobXNbKyt5XSkgewor ICAgICAgICAgICAgc3ByaW50Zih4YnVmLCJkb2lucHV0IHN0cmluZyAlMmQiLHkpOyAvKiBTQUZF ICgyNCkgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEseGJ1Zixtc1t5XSxtcFt5XSk7CisgICAg ICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9ERUJVRyAqLworCisjaWZkZWYgSUtTX09QVElPTgor ICAgIGlmIChpc190bikgeworICAgICAgICAvKiBJZiB0aGUgcmVtb3RlIHNpZGUgaXMgaW4gYSBz dGF0ZSBvZiBJS1MgU1RBUlQtU0VSVkVSICAgICovCisgICAgICAgIC8qIHdlIHJlcXVlc3QgdGhh dCB0aGUgc3RhdGUgYmUgY2hhbmdlZC4gIFdlIHdpbGwgZGV0ZWN0ICAgKi8KKyAgICAgICAgLyog YSBmYWlsdXJlIHRvIGFkaGVyZSB0byB0aGUgcmVxdWVzdCB3aGVuIHdlIGNhbGwgdHRpbmMoKSAq LworICAgICAgICBpZiAoVEVMT1BUX1UoVEVMT1BUX0tFUk1JVCkgJiYKKyAgICAgICAgICAgIFRF TE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCkKKyAgICAgICAgICBpa3Nfd2Fp dChLRVJNSVRfUkVRX1NUT1AsMCk7ICAvKiBTZW5kIFJlcXVlc3QtU3RvcCAqLworI2lmZGVmIENL X0FVVE9ETAorICAgICAgICAvKiBJZiB3ZSBhcmUgcHJvY2Vzc2luZyBwYWNrZXRzIGR1cmluZyBJ TlBVVCBhbmQgd2UgaGF2ZSBub3QgKi8KKyAgICAgICAgLyogc2VudCBhIFNUQVJUIG1lc3NhZ2Us IGRvIHNvIG5vdy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmIChpbmF1 dG9kbCAmJiBURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkgJiYKKwkJCSFURUxPUFRfU0IoVEVMT1BU X0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0KSB7CisgICAgICAgICAgICB0bl9zaWtzKEtFUk1JVF9T VEFSVCk7ICAgICAgLyogU2VuZCBLZXJtaXQtU2VydmVyIFN0YXJ0ICovCisgICAgICAgIH0KKyNl bmRpZiAvKiBDS19BVVRPREwgKi8KKyAgICB9CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworICAg IHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBjb2RlLCBhc3N1 bWUgZmFpbHVyZSAqLworICAgIGluc3RhdHVzID0gSU5QX1RPOyAgICAgICAgICAgICAgICAgIC8q IFN0YXR1cywgYXNzdW1lIHRpbWVvdXQgKi8KKworICAgIGZvciAoeSA9IDA7IHkgPCBNSU5QTUFY OyB5KyspCS8qIEluaXRpYWxpemUuLi4gKi8KKyAgICAgIG1pW3ldID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAvKiAgLi5zdHJpbmcgcGF0dGVybiBtYXRjaCBwb3NpdGlvbiAqLworCisgICAg aWYgKCFpbnBjYXNbY21kbHZsXSkgeyAgICAgICAgICAgICAgLyogSU5QVVQgQ0FTRSA9IElHTk9S RT8gICovCisgICAgICAgIHkgPSAtMTsKKyAgICAgICAgd2hpbGUgKCh4cCA9IG1zWysreV0pKSB7 CS8qIENvbnZlcnQgZWFjaCB0YXJnZXQgdG8gbG93ZXJjYXNlICovCisgICAgICAgICAgICB3aGls ZSAoKnhwKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoKnhwKSkgKnhwID0gKGNoYXIp IHRvbG93ZXIoKnhwKTsKKyAgICAgICAgICAgICAgICB4cCsrOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorICAgIHJ0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlc2V0IHRpbWVyLiAqLworI2lmZGVmIEdGVElNRVIKKyAgICByZnRpbWVyKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBGbG9hdGluZy1wb2ludCB0aW1lciB0b28uICovCisjZW5kaWYg LyogR0ZUSU1FUiAqLworICAgIGluZXRpbWUgPSAtMUw7ICAgICAgICAgICAgICAgICAgICAgIC8q IEluaXRpYWxpemUgZWxhcHNlZCB0aW1lLiAqLworICAgIHQgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFRpbWUgbm93IGlzIDAuICovCisgICAgbV9mb3VuZCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCB0byB0aW1lZC1vdXQgKi8KKyAgICBpbmNvdW50 ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgY291bnRlciAqLworICAg IHJ0ID0gKHRpbW8gPT0gMCkgPyAwIDogMTsgICAgICAgICAgIC8qIENoYXJhY3Rlci1yZWFkIHRp bWVvdXQgaW50ZXJ2YWwgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgdGVy bV9pb19zYXZlID0gdGVybV9pbzsgICAgICAgICAgICAgLyogRGlzYWJsZSBJL08gYnkgZW11bGF0 b3IgKi8KKyAgICB0ZXJtX2lvID0gMDsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xP Q0FMICovCisKKyAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFy YWN0ZXItZ2V0dGluZyBsb29wICovCisjaWZkZWYgQ0tfQVBDCisgICAgICAgIC8qIENoZWNrIHRv IHNlZSBpZiB0aGVyZSBpcyBhbiBBdXRvZG93biBvciBvdGhlciBBUEMgY29tbWFuZCAqLworICAg ICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAorICAgICAgICAgICAgKGFwY2FjdGl2 ZSA9PSBBUENfUkVNT1RFICYmIGFwY3N0YXR1cyAhPSBBUENfT0ZGKSkgeworICAgICAgICAgICAg aWYgKG1sb29rKG1hY3RhYiwiX2FwY19jb21tYW5kcyIsbm1hYykgPT0gLTEpIHsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJkb2lucHV0IGFib3V0IHRvIGV4ZWN1dGUgQVBDIixhcGNidWYs MCk7CisgICAgICAgICAgICAgICAgZG9tYWMoIl9hcGNfY29tbWFuZHMiLGFwY2J1ZixjbWRzdGtb Y21kbHZsXS5jY2ZsZ3N8Q0ZfQVBDKTsKKyAgICAgICAgICAgICAgICBkZWxtYWMoIl9hcGNfY29t bWFuZHMiLDEpOworICAgICAgICAgICAgICAgIGFwY2FjdGl2ZSA9IEFQQ19JTkFDVElWRTsKKyNp ZmRlZiBERUJVRworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAwLCJkb2lucHV0IEFQQyBpbiBwcm9ncmVzcyIsIiIsMCk7CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIENLX0FQQyAqLworCisgICAgICAg IGlmICh0aW1vID09IDAgJiYgd2FpdGluZyA8IDEpIHsgLyogU3BlY2lhbCBleGl0IGNyaXRlcmlv biAqLworICAgICAgICAgICAgaW5zdGF0dXMgPSBJTlBfVE87ICAgICAgICAgIC8qIGZvciB0aW1l b3V0ID09IDAgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChs b2NhbCkgeyAgICAgICAgICAgICAgICAgICAgLyogT25lIGNhc2UgZm9yIGxvY2FsICovCisgICAg ICAgICAgICB5ID0gdHRpbmMocnQpOyAgICAgICAgICAgICAgLyogR2V0IGNoYXJhY3RlciBmcm9t IGNvbW0gZGV2aWNlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2lucHV0IHR0aW5jKHJ0 KSByZXR1cm5zIiwiIix5KTsKKyAgICAgICAgICAgIGlmICh5IDwgLTEpIHsgICAgICAgICAgICAg ICAvKiBDb25uZWN0aW9uIGZhaWxlZC4gKi8KKyAgICAgICAgICAgICAgICBpbnN0YXR1cyA9IElO UF9JTzsgICAgICAvKiBTdGF0dXMgPSBpL28gZXJyb3IgKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lm ZGVmIE9TMgorICAgICAgICAgICAgICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7CisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgICAgIHN3aXRjaCAo eSkgeworICAgICAgICAgICAgICAgICAgY2FzZSAtMjogICAgICAgICAgICAgIC8qIENvbm5lY3Rp b24gbG9zdCAqLworICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWwgJiYgIW5ldHdvcmsgJiYg Y2FycmllciAhPSBDQVJfT0ZGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2xvZ2VuZCgp OworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDb25uZWN0aW9uIGNsb3NlZC5cbiIp OworICAgICAgICAgICAgICAgICAgICAgICAgdHRjbG9zKDEpOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAt MzoKKyAgICAgICAgICAgICAgICAgICAgZG9sb2dlbmQoKTsKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCJTZXNzaW9uIExpbWl0IGV4Y2VlZGVkIC0gY2xvc2luZyBjb25uZWN0aW9uLlxuIik7 CisgICAgICAgICAgICAgICAgICAgIHR0Y2xvcygxKTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2lucHV0IENvbm5lY3Rpb24gZmFpbGVkIiwicmV0dXJu aW5nIDAiLHkpOworICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmIChpbmludHIpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2lu cHV0IiwiaW5pbnRyIixpbmludHIpOworICAgICAgICAgICAgICAgIGlmICgoaWNuID0gY29uY2hr KCkpID4gMCkgeyAvKiBJbnRlcnJ1cHRlZCBmcm9tIGtleWJvYXJkPyAqLworICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBpbnRlcnJ1cHRlZCBmcm9tIGtleWJvYXJkIiwiIixp Y24pOworICAgICAgICAgICAgICAgICAgICBrYmNoYXIgPSBjb25pbmMoMCk7CisgICAgICAgICAg ICAgICAgICAgIGlmIChrYmNoYXIgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2hp bGUgKC0taWNuID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs ImRvaW5wdXQiLCJhYnNvcmJpbmciLDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bmluYygwKTsgICAgICAvKiBZZXMsIGFic29yYiB3aGF0IHdhcyB0eXBlZC4gKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhdHVzID0gSU5Q X1VJOyAgLyogRmFpbCBhbmQgcmVtZW1iZXIgd2h5LiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5v dGhlciBmb3IgcmVtb3RlICovCisgICAgICAgICAgICB5ID0gY29uaW5jKHJ0KTsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgY29uaW5jKHJ0KSByZXR1cm5zIiwiIix5KTsKKyAgICAg ICAgfQorICAgICAgICBpZiAoeSA+IC0xKSB7ICAgICAgICAgICAgICAgICAgIC8qIEEgY2hhcmFj dGVyIGFycml2ZWQgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvaW5wdXQiLCJhIGNoYXJh Y3RlciBhcnJpdmVkIix5KTsKKyAgICAgICAgICAgIGlmICh0aW1vID09IDApCisgICAgICAgICAg ICAgIHdhaXRpbmctLTsKKyNpZm5kZWYgT1MyCisjZGVmaW5lIFROX05PTE8KKyNlbmRpZiAvKiBP UzIgKi8KKyNpZmRlZiBOT0xPQ0FMCisjZGVmaW5lIFROX05PTE8KKyNlbmRpZiAvKiBOT0xPQ0FM ICovCisKKyNpZmRlZiBUTl9OT0xPCisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJkb2lucHV0IFRO X05PTE8iLCIiLDApOworI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHRl bG5ldCBwcm90b2NvbCBuZWdvdGlhdGlvbiAqLworICAgICAgICAgICAgaWYgKGlzX3RuKSB7Cisg ICAgICAgICAgICAgICAgc3dpdGNoICh5ICYgMHhmZikgeworICAgICAgICAgICAgICAgICAgY2Fz ZSBJQUM6CisgICAgICAgICAgICAgICAgICAgIGNyID0gMDsKKyAgICAgICAgICAgICAgICAgICAg bXlmbHNoKCk7ICAgLyogQnJlYWsgZnJvbSBpbnB1dCBidXJzdCBmb3IgdG5fZG9vcCgpICovCisj aWZkZWYgQ0tfQlVSU1QKKyAgICAgICAgICAgICAgICAgICAgYnVyc3QgPSAwOworI2VuZGlmIC8q IENLX0JVUlNUICovCisgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgLT0gMjsgICAgICAgLyog KG5vdCBuZWNlc3NhcmlseS4uLikgKi8KKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0bl9k b29wKChDSEFSKSh5ICYgMHhmZiksZHVwbGV4LHR0aW5jKSkgeworICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgMjogZHVwbGV4ID0gMDsgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAg Y2FzZSAxOiBkdXBsZXggPSAxOyBjb250aW51ZTsKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAg ICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9Q VF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQudV9zdGFydCAmJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAhdGNwX2luY29taW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5zdGF0dXMgPSBJTlBfSUtTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigK KyAiIEludGVybmV0IEtlcm1pdCBTZXJ2aWNlIGluIFNFUlZFUiBtb2RlLlxuIFBsZWFzZSB1c2Ug UkVNT1RFIGNvbW1hbmRzLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYgLyogSUtT X09QVElPTiAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAgIC8qIFRF TE5FVCBETyBMT0dPVVQgcmVjZWl2ZWQgKi8KKwkJCWNvbnRpbnVlOworCQkgICAgICBjYXNlIDc6 CisJCSAgICAgIGNhc2UgMzoJCS8qIEEgcXVvdGVkIElBQyAqLworCQkJYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICBjYXNlIENSOgorICAgICAgICAgICAgICAgICAgICBjciA9 IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBO VUw6CisgICAgICAgICAgICAgICAgICAgIGlmICghVEVMT1BUX1UoVEVMT1BUX0JJTkFSWSkgJiYg Y3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNyID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIGNyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBjciA9IDA7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIC8qIEknbSBlY2hvaW5nIHJlbW90ZSBjaGFycyAqLworICAgICAg ICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX0VDSE8pICYmIHRuX3JlbV9lY2hvKQorICAg ICAgICAgICAgICAgICAgdHRvYygoY2hhcil5KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBU TkNPREUgKi8KKyNpZmRlZiBDS19BVVRPREwKKyAgICAgICAgICAgIC8qIENoZWNrIGZvciBmaWxl IHRyYW5zZmVyIHBhY2tldHMgKi8KKyAgICAgICAgICAgIGlmIChpbmF1dG9kbCkgYXV0b2Rvd24o eSk7CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisjZWxzZSAgLyogVE5fTk9MTyAqLworICAgICAg ICAgICAgZGVidWcoRjEwMCwiZG9pbnB1dCAhVE5fTk9MTyIsIiIsMCk7CisjaWZkZWYgVE5DT0RF CisgICAgICAgICAgICAvKiBDaGVjayBmb3IgdGVsbmV0IHByb3RvY29sIG5lZ290aWF0aW9uICov CisgICAgICAgICAgICBpZiAoaXNfdG4pIHsKKyAgICAgICAgICAgICAgICBpbnQgdHg7CisgICAg ICAgICAgICAgICAgc3dpdGNoICh5ICYgMHhmZikgeworICAgICAgICAgICAgICAgICAgY2FzZSBJ QUM6CisgICAgICAgICAgICAgICAgICAgIG15ZmxzaCgpOyAgIC8qIEJyZWFrIGZyb20gaW5wdXQg YnVyc3QgZm9yIHRuX2Rvb3AoKSAqLworI2lmZGVmIENLX0JVUlNUCisgICAgICAgICAgICAgICAg ICAgIGJ1cnN0ID0gMDsKKyNlbmRpZiAvKiBDS19CVVJTVCAqLworI2lmZGVmIElLU19PUFRJT04K KyAgICAgICAgICAgICAgICAgICAgdHggPSBzY3JpcHR3cnRidWYoKFVTSE9SVCl5KTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHR4ID09IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm IChURUxPUFRfVShURUxPUFRfS0VSTUlUKSAmJiAKKwkJCSAgICBURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0LnVfc3RhcnQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGNw X2luY29taW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5zdGF0dXMgPSBJTlBfSUtTOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigKKyAgIiBJbnRlcm5ldCBLZXJtaXQgU2VydmljZSBpbiBTRVJWRVIgbW9k ZS5cbiBQbGVhc2UgdXNlIFJFTU9URSBjb21tYW5kcy5cbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0 eCA9PSA2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBURUxORVQgRE8gTE9HT1VUIHJl Y2VpdmVkICovCisKKyAgICAgICAgICAgICAgICAgICAgfQorI2Vsc2UgLyogSUtTX09QVElPTiAq LworICAgICAgICAgICAgICAgICAgICAvKiBIYW5kbGVzIFRlbG5ldCBuZWdvdGlhdGlvbnMgKi8K KyAgICAgICAgICAgICAgICAgICAgdHggPSBzY3JpcHR3cnRidWYoKFVTSE9SVCl5KTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHR4ID09IDYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFRFTE5FVCBETyBMT0dPVVQgcmVjZWl2ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIElLU19PUFRJT04gKi8KKyAgICAgICAgICAgICAgICAgICAgd2FpdGluZyAtPSAyOyAg ICAgICAvKiAobm90IG5lY2Vzc2FyaWx5Li4uKSAqLworICAgICAgICAgICAgICAgICAgICBjciA9 IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgLyogYW5kIGF1dG9k b3dubG9hZCBjaGVjayAqLworICAgICAgICAgICAgICAgICAgY2FzZSBDUjoKKyAgICAgICAgICAg ICAgICAgICAgY3IgPSAxOworICAgICAgICAgICAgICAgICAgICB0eCA9IHNjcmlwdHdydGJ1Zigo VVNIT1JUKXkpOworICAgICAgICAgICAgICAgICAgICBpZiAodHggPT0gNikgeworICAgICAgICAg ICAgICAgICAgICAgICAgLyogVEVMTkVUIERPIExPR09VVCByZWNlaXZlZCAqLworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgY2FzZSBOVUw6CisgICAgICAgICAgICAgICAgICAgIGNyID0gMDsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKCFURUxPUFRfVShURUxPUFRfQklOQVJZKSAmJiBjcikKKyAgICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgdHggPSBzY3JpcHR3cnRidWYo KFVTSE9SVCl5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR4ID09IDYpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBETyBMT0dPVVQgcmVjZWl2ZWQgKi8KKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGNyID0gMDsKKyAgICAgICAgICAgICAg ICAgICAgdHggPSBzY3JpcHR3cnRidWYoKFVTSE9SVCl5KTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKHR4ID09IDYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRFTE5FVCBETyBMT0dP VVQgcmVjZWl2ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAvKiBJJ20gZWNob2luZyByZW1vdGUgY2hhcnMgKi8KKyAgICAgICAg ICAgICAgICBpZiAoVEVMT1BUX01FKFRFTE9QVF9FQ0hPKSAmJiB0bl9yZW1fZWNobykKKyAgICAg ICAgICAgICAgICAgIHR0b2MoKENIQVIpeSk7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAv KiBUTkNPREUgKi8KKyAgICAgICAgICAgICAgLyogSGFuZGxlcyB0ZXJtaW5hbCBlbXVsYXRpb24g cmVzcG9uc2VzICovCisgICAgICAgICAgICAgIHNjcmlwdHdydGJ1ZigoVVNIT1JUKXkpOworI2Vu ZGlmIC8qIFROX05PTE8gKi8KKworICAgICAgICAgICAgLyogUmVhbCBpbnB1dCBjaGFyYWN0ZXIg dG8gYmUgY2hlY2tlZCAqLworCisjaWZkZWYgQ0tfQlVSU1QKKyAgICAgICAgICAgIGJ1cnN0LS07 ICAgICAgICAgICAgICAgICAgICAvKiBPbmUgbGVzcyBjaGFyYWN0ZXIgd2FpdGluZyAqLworICAg ICAgICAgICAgZGVidWcoRjEwMSwiZG9pbnB1dCBidXJzdCIsIiIsYnVyc3QpOworI2VuZGlmIC8q IENLX0JVUlNUICovCisgICAgICAgICAgICBjID0gKENIQVIpIChpbWFzayAmIChDSEFSKSB5KTsg LyogTWFzayBvZmYgYW55IHBhcml0eSAqLworICAgICAgICAgICAgaW5jaGFyWzBdID0gYzsgICAg ICAgICAgICAgIC8qIFJlbWVtYmVyIGNoYXJhY3RlciBmb3IgXHYoaW5jaGFyKSAqLworI2lmZGVm IENPTU1FTlQKKyNpZmRlZiBDS19CVVJTVAorICAgICAgICAgICAgLyogVXBkYXRlICJsYXN0Y2hh ciIgdGltZSBvbmx5IG9uY2UgZHVyaW5nIGlucHV0IGJ1cnN0ICovCisgICAgICAgICAgICBpZiAo YnVyc3QgPD0gMCkKKyNlbmRpZiAvKiBDS19CVVJTVCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICAgICAgICAgICAgbGFzdGNoYXIgPSBndGltZXIoKTsgICAgICAvKiBSZW1lbWJlciB3aGVu IGl0IGNhbWUgKi8KKworICAgICAgICAgICAgaWYgKGMgPT0gJ1wwJykgeyAgICAgICAgICAgIC8q IE5VTCwgd2UgY2FuJ3QgdXNlIGl0ICovCisgICAgICAgICAgICAgICAgaWYgKGFueWNoYXIpIHsg ICAgICAgICAgLyogRXhjZXB0IGlmIGFueSBjaGFyYWN0ZXIgd2lsbCBkbz8gKi8KKyAgICAgICAg ICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgICAvKiBZZXMsIGRvbmUuICovCisJCSAgICBp bnN0YXR1cyA9IElOUF9PSzsKKyAgICAgICAgICAgICAgICAgICAgaW5jb3VudCA9IDE7ICAgICAg ICAvKiBUaGlzIG11c3QgYmUgdGhlIGZpcnN0IGFuZCBvbmx5LiAqLworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgZ290byByZWZpbGw7CS8qIE90aGVy d2lzZSBjb250aW51ZSBJTlBVVHRpbmcgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpp bnBicCsrID0gYzsgICAgICAgICAgICAgICAvKiBTdG9yZSBjaGFyIGluIGNpcmN1bGFyIGJ1ZmZl ciAqLworICAgICAgICAgICAgaW5jb3VudCsrOyAgICAgICAgICAgICAgICAgIC8qIENvdW50IGl0 IGZvciBcdihpbmNvdW50KSAqLworCisJICAgIGlmIChmbGFncyAmIElOUFNXX0NPVSkgewkvKiBJ TlBVVCAvQ09VTlQgKi8KKwkJaWYgKC0tY291bnQgPCAxKSB7CisJCSAgICB4ID0gMTsKKwkJICAg IGluc3RhdHVzID0gSU5QX09LOworICAgICAgICAgICAgICAgICAgICBpbmNvdW50ID0gc2F2ZWNv dW50OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJfQorCSAgICB9CisgICAgICAgICAg ICBpZiAobWF0Y2hidWYpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmRleCA8IE1BVENI QlVGU0laKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoYnVmW21hdGNoaW5kZXgrK10gPSBj OworICAgICAgICAgICAgICAgICAgICBtYXRjaGJ1ZlttYXRjaGluZGV4XSA9IE5VTDsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjaWZkZWYgTUFDCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKnR0ZXJtdzsgICAgLyogZmFrZSBwb2ludGVyIGNh c3QgKi8KKyAgICAgICAgICAgICAgICBpZiAoaW5lY2hvKSB7CisgICAgICAgICAgICAgICAgICAg IG91dGNoYXIodHRlcm13LCBjKTsgLyogZWNobyB0byB0ZXJtaW5hbCB3aW5kb3cgKi8KKyAgICAg ICAgICAgICAgICAgICAgLyogdGhpcyBtaWdodCBiZSB0b28gbXVjaCBvdmVyaGVhZCB0byBkbyBo ZXJlID8gKi8KKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlY29tbWFuZCh0dGVybXcpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbHNlIC8qIE5vdCBNQUMgKi8KKyAgICAg ICAgICAgIGlmIChpbmVjaG8pIHsgICAgICAgICAgICAgICAvKiBCdWZmZXIgY29uc29sZSBvdXRw dXQgKi8KKyAgICAgICAgICAgICAgICBjb25idWZbY29uY250KytdID0gYzsKKyAgICAgICAgICAg IH0KKyNlbmRpZiAvKiBNQUMgKi8KKyNpZm5kZWYgT1MyCisgICAgICAgICAgICBpZiAoc2VzbG9n KSB7CisJCWludCBkdW1teSA9IDAsIHNraXAgPSAwOworI2lmbmRlZiBOT0xPQ0FMCisJCWlmIChu b2VzY3NlcSkgeworCQkgICAgZHVtbXkgPSBjaGthZXMoYywwKTsKKwkJICAgIGlmIChpbmVzY1sw XSAhPSBFU19OT1JNQUwgfHwgb2xkZXNjWzBdICE9IEVTX05PUk1BTCkKKwkJICAgICAgc2tpcCA9 IDE7CisJCX0KKyNlbmRpZgkvKiBOT0xPQ0FMICovCisjaWZkZWYgVU5JWE9ST1NLCisJCWlmIChz ZXNzZnQgPT0gWFlGVF9UKSB7CisjaWZkZWYgVU5JWAorCQkgICAgaWYgKGMgPT0gJ1xyJykKKyNl bHNlCisjaWZkZWYgT1NLCisJCSAgICBpZiAoYyA9PSAnXDAxMicpCisjZW5kaWYgLyogT1NLICov CisjZW5kaWYgLyogVU5JWCAqLworCQkgICAgICBza2lwID0gMTsKKwkJfQorI2VuZGlmCS8qIFVO SVhPUk9TSyAqLworCQlpZiAoIXNraXApCisgICAgICAgICAgICAgICAgICBzZXNidWZbc2VzY250 KytdID0gYzsgLyogQnVmZmVyIHNlc3Npb24gbG9nIG91dHB1dCAqLworICAgICAgICAgICAgfQor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgaWYgKGFueWNoYXIpIHsgICAgICAgICAgICAg IC8qIEFueSBjaGFyYWN0ZXIgd2lsbCBkbz8gKi8KKyAgICAgICAgICAgICAgICB4ID0gMTsKKwkJ aW5zdGF0dXMgPSBJTlBfT0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKSB7ICAgICAgLyogSWdub3JlIGFscGhh YmV0aWMgY2FzZT8gKi8KKyAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgICAgICAgICAv KiBZZXMsIGNvbnZlcnQgaW5wdXQgY2hhciB0byBsb3dlciAqLworICAgICAgICAgICAgICAgICAg YyA9IChDSEFSKSB0b2xvd2VyKGMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWco RjAwMCwiZG9pbnB1dCBjaGFyIiwiIixjKTsKKworICAgICAgICAgICAgLyogSGVyZSBpcyB0aGUg bWF0Y2hpbmcgc2VjdGlvbiAqLworCisgICAgICAgICAgICB5ID0gLTE7ICAgICAgICAgICAgICAg ICAgICAgLyogTG9vcCB0aHJ1IHNlYXJjaCBzdHJpbmdzICovCisgICAgICAgICAgICB3aGlsZSAo IW5vbWF0Y2ggJiYgKHMgPSBtc1srK3ldKSkgewkvKiAuLi5hcyBtYW55IGFzIHdlIGhhdmUuICov CisgICAgICAgICAgICAgICAgaWYgKG1wW3ldKSB7ICAgICAgICAgICAgLyogUGF0dGVybiBtYXRj aD8gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgIGludCBqOworICAgICAg ICAgICAgICAgICAgICAvKiBUaGlzIGlzIGdyb3NzIGJ1dCBpdCB3b3Jrcy4uLiAqLworICAgICAg ICAgICAgICAgICAgICAvKiBXZSBjb3VsZCBqdXN0IGFzIGVhc2lseSBoYXZlIHByZXBlbmRlZCAn KicgdG8gdGhlICAqLworICAgICAgICAgICAgICAgICAgICAvKiBwYXR0ZXJuIGFuZCBza2lwcGVk IHRoZSBsb29wLCBleGNlcHQgdGhlbiB3ZSB3b3VsZCAqLworICAgICAgICAgICAgICAgICAgICAv KiBub3QgaGF2ZSBhbnkgd2F5IHRvIGlkZW50aWZ5IHRoZSBtYXRjaGluZyBzdHJpbmcuICAqLwor ICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbWF0Y2hpbmRleDsgaisrKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaChzLCZtYXRjaGJ1ZltqXSwxLDEpKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmRleCA9IGo7CisJCQkgICAgaW5z dGF0dXMgPSBJTlBfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDE7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPiAwKQor ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAg LyogSnVseSAyMDAxIC0gY2ttYXRjaCgpIHJldHVybnMgbWF0Y2ggcG9zaXRpb24uICovCisgICAg ICAgICAgICAgICAgICAgIC8qIEl0IHdvcmtzIGFuZCBpdCdzIG5vdCBncm9zcy4gKi8KKwkJICAg IC8qICg0ID0gZmxvYXRpbmcgcGF0dGVybikgKi8KKyAgICAgICAgICAgICAgICAgICAgeCA9IGNr bWF0Y2gocyxtYXRjaGJ1ZixpbnBjYXNbY21kbHZsXSwxKzQpOworICAgICAgICAgICAgICAgICAg ICBpZiAoeCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5kZXggPSB4IC0g MTsKKwkJCWluc3RhdHVzID0gSU5QX09LOworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDE7 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogTGl0ZXJhbCBtYXRjaC4gKi8K KyAgICAgICAgICAgICAgICBpID0gbWlbeV07ICAgICAgICAgICAgICAvKiBNYXRjaC1wb3NpdGlv biBpbiBzZWFyY2ggc3RyaW5nLiAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYwMDAsImNvbXBh cmUgY2hhciIsIiIsKENIQVIpc1tpXSk7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gKENIQVIp IHNbaV0pIHsgLyogQ2hlY2sgZm9yIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgIGkrKzsg ICAgICAgICAgICAgICAgLyogR290IG9uZSwgZ28gdG8gbmV4dCBjaGFyYWN0ZXIgKi8KKyAgICAg ICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBEb24ndCBoYXZlIGEgbWF0Y2gg Ki8KKyAgICAgICAgICAgICAgICAgICAgaW50IGo7CisgICAgICAgICAgICAgICAgICAgIGZvciAo aiA9IGk7IGkgPiAwOyApIHsgLyogQmFjayB1cCBpbiBzZWFyY2ggc3RyaW5nICovCisgICAgICAg ICAgICAgICAgICAgICAgICBpLS07IC8qIChEbyB0aGlzIGhlcmUgdG8gcHJldmVudCBjb21waWxl ciBmb3VsdXApICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBqIGlzIHRoZSBsZW5ndGgg b2YgdGhlIHN1YnN0cmluZyB0aGF0IG1hdGNoZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChjID09IChDSEFSKSBzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCFzdHJuY21wKHMsJnNbai1pXSxpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpKys7ICAgICAgICAgIC8qIGMgYWN0dWFsbHkgbWF0Y2hlcyAtLSBjZmsgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoQ0hBUikgc1tpXSA9PSAoQ0hB UikgJ1wwJykgeyAvKiBNYXRjaGVkIHRvIGVuZD8gKi8KKyAgICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KG1hdGNoYnVmLG1zW3ldLE1BVENIQlVGU0laKTsKKyAgICAgICAgICAgICAgICAgICAg bWF0Y2hpbmRleCA9IDA7CisJCSAgICBpbnN0YXR1cyA9IElOUF9PSzsgIC8qIFllcywgKi8KKyAg ICAgICAgICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg IGJyZWFrOyAgICAgICAgICAgICAgLyogZG9uZS4gKi8KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgbWlbeV0gPSBpOyAgICAgICAgICAgICAgLyogTm8sIHJlbWVtYmVyIG1hdGNo LXBvc2l0aW9uICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeCA9PSAxKSB7ICAg ICAgICAgICAgICAgLyogU2V0IFx2KG1pbnB1dCkgcmVzdWx0ICovCisJCWluc3RhdHVzID0gSU5Q X09LOworICAgICAgICAgICAgICAgIG1fZm91bmQgPSB5ICsgMTsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbnBicCA+PSBpbnBidWYgKyBp bmJ1ZnNpemUpIHsgLyogUmVhY2hlZCBlbmQgb2YgYnVmZmVyPyAqLworCQlpZiAobm93cmFwKSB7 CQkvKiBJZiAvTk9XUkFQLi4uKi8KKwkJICAgIGluc3RhdHVzID0gSU5QX0JGOwkvKiAuLi5yZXR1 cm4gaW5kaWNhdGluZyBidWZmZXIgZnVsbC4gKi8KKwkJICAgICppbnBicCA9IE5VTDsKKwkJICAg IGdvdG8geGlucHV0OworCQl9CisgICAgICAgICAgICAgICAgKmlucGJwID0gTlVMOyAgICAgICAg ICAgLyogTWFrZSBpdCBudWxsLXRlcm1pbmF0ZWQgKi8KKyAgICAgICAgICAgICAgICBpbnBicCA9 IGlucGJ1ZjsgICAgICAgICAvKiBZZXMuICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNp ZmRlZiBDS19CVVJTVAorICAgICAgICBlbHNlIGlmICh5IDw9IC0xICYmIGJ1cnN0ID4gMCkgewor ICAgICAgICAgICAgZGVidWcoRjExMSwiZG9pbnB1dCAoeTw9LTEmJmJ1cnN0PjApIiwiYnVyc3Qi LGJ1cnN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBIHRp bWVvdXQgb2NjdXJyZWQgc28gdGhlcmUgY2FuJ3QgKi8KKyAgICAgICAgICAgIGJ1cnN0ID0gMDsg ICAgICAgICAgICAgICAgICAvKiBiZSBkYXRhIHdhaXRpbmc7IG11c3QgY2hlY2sgdGltbyAqLwor ICAgICAgICB9CisgICAgICByZWZpbGw6CisgICAgICAgIGlmIChidXJzdCA8PSAwKSB7ICAgICAg ICAgICAgICAgLyogTm8gYnVmZmVyZWQgY2hhcnMgcmVtYWluaW5nLi4uICovCisgICAgICAgICAg ICBteWZsc2goKTsgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggYnVmZmVyZWQgb3V0cHV0ICov CisgICAgICAgICAgICBpZiAobG9jYWwpIHsgICAgICAgICAgICAgICAgLyogR2V0IHNpemUgb2Yg bmV4dCBpbnB1dCBidXJzdCAqLworICAgICAgICAgICAgICAgIGJ1cnN0ID0gdHRjaGsoKTsKKyAg ICAgICAgICAgICAgICBpZiAoYnVyc3QgPCAwKSB7ICAgICAgICAvKiB0dGNoaygpIHNheXMgY29u bmVjdGlvbiBpcyBjbG9zZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgaW5zdGF0dXMgPSBJTlBf SU87ICAvKiBTdGF0dXMgPSBpL28gZXJyb3IgKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9T MgorICAgICAgICAgICAgICAgICAgICB0ZXJtX2lvID0gdGVybV9pb19zYXZlOworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworCQkgICAgaWYgKCghbmV0d29yayAKKyNp ZmRlZiBUTl9DT01QT1JUCisJCSAgICAgICAgIHx8IGlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBU Tl9DT01QT1JUICovCisJCQkgKSAmJiBjYXJyaWVyICE9IENBUl9PRkYpIHsKKwkvKiBUaGUgdGVz dCBpcyB3cml0dGVuIHRoaXMgd2F5IGJlY2F1c2UgdGhlIE1pY3Jvc29mdCBjb21waWxlcgorCSAq IGlzIHByb2R1Y2luZyBiYWQgY29kZSBpZiB3cml0dGVuOgorCSAqCisJICogIGlmIChuZXR3b3Jr ICYmICghaXN0bmNvbXBvcnQoKSB8fCBjYXJyaWVyID09IENBUl9PRkYpICkKKwkgKi8KKwkJCWJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkJCSBwcmludGYoIkZhdGFsIGVy cm9yIC0gZGlzY29ubmVjdGVkLlxuIik7CisJCQkgdHRjbG9zKDEpOworCQkJIGJyZWFrOworCQkg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGluaW50cikgewor ICAgICAgICAgICAgICAgICAgICBpZiAoKGljbiA9IGNvbmNoaygpKSA+IDApIHsgLyogSW50ZXJy dXB0IGZyb20ga2V5Ym9hcmQ/ICovCisgICAgICAgICAgICAgICAgICAgICAgICBrYmNoYXIgPSBj b25pbmMoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpbnB1dCBpbnRl cnJ1cHRlZCBmcm9tIGtleWJvYXJkIiwiIixpY24pOworICAgICAgICAgICAgICAgICAgICAgICAg d2hpbGUgKC0taWNuID4gMCkgY29uaW5jKDApOyAvKiBZZXMsIGFic29yYiBjaGFycy4gKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBBbmQgZmFpbC4gKi8KKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgYnVyc3QgPSBjb25jaGsoKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQgYnVyc3QiLCIiLGJ1cnN0KTsKKyAgICAgICAg ICAgIC8qIFByZXZlbnQgb3ZlcmZsb3cgb2YgImNvbmJ1ZiIgYW5kICJzZXNidWYiICovCisgICAg ICAgICAgICBpZiAoYnVyc3QgPiBNQVhCVVJTVCkKKyAgICAgICAgICAgICAgYnVyc3QgPSBNQVhC VVJTVDsKKworICAgICAgICAgICAgLyogRGlkIG5vdCBtYXRjaCwgdGltZXIgZXhjZWVkZWQ/ICov CisgICAgICAgICAgICB0ID0gZ3RpbWVyKCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2lu cHV0IGd0aW1lciIsImJ1cnN0Iix0KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRvaW5wdXQg dGltbyIsIiIsdGltbyk7CisgICAgICAgICAgICBpZiAoKHQgPj0gdGltbykgJiYgKHRpbW8gPiAw KSkKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbHNlIGlmIChpbnNpbGVuY2Ug PiAwICYmICh0IC0gbGFzdGNoYXIpID4gaW5zaWxlbmNlKQorICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvaW5wdXQgKGJ1cnN0 ID4gMCkiLCJidXJzdCIsYnVyc3QpOworICAgICAgICB9CisjZWxzZSAgLyogQ0tfQlVSU1QgKi8K KyAgICAgIHJlZmlsbDoKKyAgICAgICAgbXlmbHNoKCk7ICAgICAgICAgICAgICAgICAgICAgICAv KiBGbHVzaCBidWZmZXJlZCBvdXRwdXQgKi8KKyAgICAgICAgLyogRGlkIG5vdCBtYXRjaCwgdGlt ZXIgZXhjZWVkZWQ/ICovCisgICAgICAgIHQgPSBndGltZXIoKTsKKyAgICAgICAgZGVidWcoRjEx MSwiZG9pbnB1dCBndGltZXIiLCJubyBidXJzdCIsdCk7CisgICAgICAgIGRlYnVnKEYxMDEsImRv aW5wdXQgdGltbyIsIiIsdGltbyk7CisgICAgICAgIGlmICgodCA+PSB0aW1vKSAmJiAodGltbyA+ IC0xKSkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoaW5zaWxlbmNlID4gMCAm JiAodCAtIGxhc3RjaGFyKSA+IGluc2lsZW5jZSkKKyAgICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBDS19CVVJTVCAqLworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0aWxsIGhhdmUgdGltZSBsZWZ0LCBjb250aW51ZS4gKi8KKyAgeGlucHV0OgorICAgIG15Zmxz aCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIGJ1ZmZlcmVkIG91dHB1dCAq LworICAgIGlmIChpbnN0YXR1cyA9PSBJTlBfQkYpIHsJCS8qIEJ1ZmZlciBmdWxsIGFuZCAvTk9X QUlUICovCisJeCA9IDA7CQkJCS8qIE11c3Qgbm90IHN1Y2NlZWQgKi8KKyAgICB9IGVsc2UgewkJ CQkvKiBCdWZmZXIgZnVsbCBhbmQgL05PV0FJVCAqLworCWlmIChub21hdGNoKSB4ID0gMTsJCS8q IFN1Y2NlZWQgaWYgbm9tYXRjaCBhbmQgdGltZWQgb3V0ICovCisJaWYgKHggPiAwICYmICFub21h dGNoKQorCSAgaW5zdGF0dXMgPSAwOworICAgIH0KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9T MgorICAgIHRlcm1faW8gPSB0ZXJtX2lvX3NhdmU7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogTk9MT0NBTCAqLworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBJS1NfT1BUSU9OCisjaWZkZWYg Q0tfQVVUT0RMCisgICAgaWYgKGlzX3RuICYmIFRFTE9QVF9NRShURUxPUFRfS0VSTUlUKSAmJiBp bmF1dG9kbCkgeworICAgICAgICB0bl9zaWtzKEtFUk1JVF9TVE9QKTsgICAgICAgICAgIC8qIFNl bmQgS2VybWl0LVNlcnZlciBTdG9wICovCisgICAgfQorI2VuZGlmIC8qIENLX0FVVE9ETCAqLwor I2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBH RlRJTUVSCisgICAgZnB0ID0gZ2Z0aW1lcigpOyAgICAgICAgICAgICAgICAgICAgLyogR2V0IGVs YXBzZWQgdGltZSAqLworCisvKiBJZiBhIGxvbmcgaXMgMzIgYml0cywgaXQgd291bGQgdGFrZSBh Ym91dCA1MCBkYXlzIGZvciB0aGlzIHRvIG92ZXJmbG93LiAqLworCisgICAgaW5ldGltZSA9IChp bnQpKGZwdCAqIChDS0ZMT0FUKTEwMDAuMCk7CisjZWxzZQorICAgIGluZXRpbWUgPSAoaW50KShn dGltZXIoKSAqIDEwMDApOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworICAgIGlmICh4ID4gMCkK KyAgICAgIG1ha2VzdHIoJmlucG1hdGNoLCZtYXRjaGJ1ZlttYXRjaGluZGV4XSk7IC8qIFx2KGlu bWF0Y2gpICovCisgICAgcmV0dXJuKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0 dXJuIHRoZSByZXR1cm4gY29kZS4gKi8KK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVm IE5PU1BMCisvKiBSRUlOUFVUIENvbW1hbmQgKi8KKworLyoKKyAgTm90ZSwgdGhlIHRpbWVvdXQg cGFyYW1ldGVyIGlzIHJlcXVpcmVkLCBidXQgaWdub3JlZC4gIFN5bnRheCBpcyBjb21wYXRpYmxl CisgIHdpdGggTVMtRE9TIEtlcm1pdCBleGNlcHQgdGltZW91dCBjYW4ndCBiZSBvbWl0dGVkLiAg VGhpcyBmdW5jdGlvbiBvbmx5CisgIGxvb2tzIGF0IHRoZSBjaGFyYWN0ZXJzIGFscmVhZHkgcmVj ZWl2ZWQgYW5kIGRvZXMgbm90IHJlYWQgYW55IG5ldworICBjaGFyYWN0ZXJzIGZyb20gdGhlIGNv bm5lY3Rpb24uCisqLworaW50Citkb3JlaW5wKHRpbW8scyxwYXQpIGludCB0aW1vOyBjaGFyICpz OyBpbnQgcGF0OyB7CisgICAgaW50IHgsIHksIGk7CisgICAgY2hhciAqeHgsICp4cCwgKnhxID0g KGNoYXIgKikwOworICAgIENIQVIgYzsKKworICAgIGlmICghcykgcyA9ICIiOworICAgIGRlYnVn KEYxMDEsImRvcmVpbnB1dCBwYXQiLCIiLHBhdCk7CisKKyAgICB5ID0gKGludClzdHJsZW4ocyk7 CisgICAgZGVidWcoRjExMSwiZG9yZWlucHV0IHNlYXJjaCIscyx5KTsKKworICAgIGlmICh5ID4g aW5idWZzaXplKSB7ICAgICAgICAgICAgICAgIC8qIElmIHNlYXJjaCBzdHJpbmcgbG9uZ2VyIHRo YW4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9yZWlucHV0IGluYnVmc2l6ZSIsIiIsaW5idWZz aXplKTsKKyAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBpbnB1dCBi dWZmZXIsIGZhaWwuICovCisgICAgfQorICAgIG1ha2VzdHIoJmlucG1hdGNoLE5VTEwpOworICAg IGlmICghbWF0Y2hidWYpCisgICAgICBtYXRjaGJ1ZiA9IG1hbGxvYyhNQVRDSEJVRlNJWisxKTsK KyAgICBtYXRjaGluZGV4ID0gMDsKKworICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJldHVybiBjb2RlLCBhc3N1bWUgZmFpbHVyZSAqLworICAgIGkgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0cmluZyBwYXR0ZXJuIG1hdGNoIHBvc2l0aW9u ICovCisKKyAgICBpZiAoIWlucGNhc1tjbWRsdmxdKSB7ICAgICAgICAgICAgICAvKiBJTlBVVCBD QVNFID0gSUdOT1JFPyAgKi8KKyAgICAgICAgeHAgPSBtYWxsb2MoeSsyKTsgICAgICAgICAgICAg ICAvKiBNYWtlIGEgc2VwYXJhdGUgY29weSBvZiB0aGUgKi8KKyAgICAgICAgaWYgKCF4cCkgeyAg ICAgICAgICAgICAgICAgICAgICAvKiBzZWFyY2ggc3RyaW5nLiAqLworICAgICAgICAgICAgcHJp bnRmKCI/bWFsbG9jIGVycm9yIDZcbiIpOworICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAg ICB9IGVsc2UgeHEgPSB4cDsgICAgICAgICAgICAgICAgIC8qIEtlZXAgcG9pbnRlciB0byBiZWdp bm5pbmcuICovCisgICAgICAgIHdoaWxlICgqcykgeyAgICAgICAgICAgICAgICAgICAgLyogWWVz LCBjb252ZXJ0IHRvIGxvd2VyY2FzZSAqLworICAgICAgICAgICAgKnhwID0gKnM7CisgICAgICAg ICAgICBpZiAoaXN1cHBlcigqeHApKSAqeHAgPSAoY2hhcikgdG9sb3dlcigqeHApOworICAgICAg ICAgICAgeHArKzsgcysrOworICAgICAgICB9CisgICAgICAgICp4cCA9IE5VTDsgICAgICAgICAg ICAgICAgICAgICAgLyogVGVybWluYXRlIGl0ISAqLworICAgICAgICBzID0geHE7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE1vdmUgc2VhcmNoIHBvaW50ZXIgdG8gaXQuICovCisgICAgfQor ICAgIHh4ID0gKmlucGJwID8gaW5wYnAgOiBpbnBidWY7ICAgICAgIC8qIEN1cnJlbnQgSU5QVVQg YnVmZmVyIHBvaW50ZXIgKi8KKyAgICBkbyB7CisgICAgICAgIGMgPSAqeHgrKzsgICAgICAgICAg ICAgICAgICAgICAgLyogR2V0IG5leHQgY2hhcmFjdGVyICovCisgICAgICAgIGlmICghYykgYnJl YWs7CisgICAgICAgIGlmICh4eCA+PSBpbnBidWYgKyBpbmJ1ZnNpemUpICAgLyogV3JhcCBhcm91 bmQgaWYgbmVjZXNzYXJ5ICovCisgICAgICAgICAgeHggPSBpbnBidWY7CisgICAgICAgIGlmICgh aW5wY2FzW2NtZGx2bF0pIHsgICAgICAgICAgLyogSWdub3JlIGFscGhhYmV0aWMgY2FzZT8gKi8K KyAgICAgICAgICAgIGlmIChpc3VwcGVyKGMpKSBjID0gKENIQVIpIHRvbG93ZXIoYyk7IC8qIFll cyAqLworICAgICAgICB9CisgICAgICAgIGlmIChwYXQpIHsKKyAgICAgICAgICAgIGludCBqOwor ICAgICAgICAgICAgaWYgKG1hdGNoYnVmKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5k ZXggPCBNQVRDSEJVRlNJWikgeworICAgICAgICAgICAgICAgICAgICBtYXRjaGJ1ZlttYXRjaGlu ZGV4KytdID0gYzsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hidWZbbWF0Y2hpbmRleF0gPSBO VUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBt YXRjaGluZGV4OyBqKyspIHsgLyogR3Jvc3MgYnV0IGVmZmVjdGl2ZSAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoY2ttYXRjaChzLCZtYXRjaGJ1ZltqXSwxLDEpKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJHT1QgSVQiLCIiLGopOworICAgICAgICAgICAgICAgICAg ICAgICAgbWF0Y2hpbmRleCA9IGo7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHggPiAwKQorICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg ICAgIGRlYnVnKEYwMDAsImRvcmVpbnAgY2hhciIsIiIsYyk7CisgICAgICAgIGRlYnVnKEYwMDAs ImNvbXBhcmUgY2hhciIsIiIsKENIQVIpIHNbaV0pOworICAgICAgICBpZiAoKChjaGFyKSBjKSA9 PSAoKGNoYXIpIHNbaV0pKSB7IC8qIENoZWNrIGZvciBtYXRjaCAqLworICAgICAgICAgICAgaSsr OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdvdCBvbmUsIGdvIHRvIG5leHQgY2hhcmFjdGVy ICovCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgaGF2 ZSBhIG1hdGNoICovCisgICAgICAgICAgICBpbnQgajsKKyAgICAgICAgICAgIGZvciAoaiA9IGk7 IGkgPiAwOyApIHsgICAgICAvKiBbanJzXSBzZWFyY2ggYmFja3dhcmRzIGZvciBpdCAgKi8KKyAg ICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgICAgaWYgKCgoY2hhcikgYykgPT0gKChj aGFyKSBzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cm5jbXAocywmc1tqLWld LGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBb anJzXSBvciByZXR1cm4gdG8gemVybyBmcm9tIC0xICovCisgICAgICAgIGlmIChzW2ldID09ICdc MCcpIHsgICAgICAgICAgICAgLyogTWF0Y2hlZCBhbGwgdGhlIHdheSB0byBlbmQ/ICovCisgICAg ICAgICAgICBja3N0cm5jcHkobWF0Y2hidWYscyxNQVRDSEJVRlNJWik7CisgICAgICAgICAgICBt YXRjaGluZGV4ID0gMDsKKyAgICAgICAgICAgIHggPSAxOyAgICAgICAgICAgICAgICAgICAgICAv KiBZZXMsICovCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogZG9u ZS4gKi8KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHh4ICE9IGlucGJwICYmIHggPCAxKTsgICAg IC8qIFVudGlsIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZC4gKi8KKworICAgIGlmICghaW5wY2FzW2Nt ZGx2bF0pIGlmICh4cSkgZnJlZSh4cSk7IC8qIEZyZWUgdGhpcyBpZiBpdCB3YXMgbWFsbG9jJ2Qu ICovCisgICAgbWFrZXN0cigmaW5wbWF0Y2gsJm1hdGNoYnVmW21hdGNoaW5kZXhdKTsgLyogXHYo aW5tYXRjaCkgKi8KKyAgICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXR1cm4gc2VhcmNoIHJlc3VsdC4gKi8KK30KKworLyogIFggWCBTIFQgUiBJIE4gRyAgLS0gIElu dGVycHJldCBzdHJpbmdzIGNvbnRhaW5pbmcgYmFja3NsYXNoIGVzY2FwZXMgICovCisvKiAgWiBa IFMgVCBSIEkgTiBHICAtLSAgKG5ldyBuYW1lLi4uKSAgKi8KKy8qCisgQ29waWVzIHJlc3VsdCB0 byBuZXcgc3RyaW5nLgorICBzdHJpcHMgZW5jbG9zaW5nIGJyYWNlcyBvciBkb3VibGVxdW90ZXMu CisgIGludGVycHJldHMgYmFja3NsYXNoIGVzY2FwZXMuCisgIHJldHVybnMgMCBvbiBzdWNjZXNz LCBub256ZXJvIG9uIGZhaWx1cmUuCisgIHRyaWVzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBNUy1E T1MgS2VybWl0LgorCisgU3ludGF4IG9mIGlucHV0IHN0cmluZzoKKyAgc3RyaW5nID0gY2hhcnMg fCAiY2hhcnMiIHwge2NoYXJzfQorICBjaGFycyA9IChjKmUqKSoKKyAgd2hlcmUgYyA9IGFueSBw cmludGFibGUgY2hhcmFjdGVyLCBhc2NpaSAzMi0xMjYKKyAgYW5kIGUgPSBhIGJhY2tzbGFzaCBl c2NhcGUKKyAgYW5kICogbWVhbnMgMCBvciBtb3JlIHJlcGV0aXRpb25zIG9mIHByZWNlZGluZyBx dWFudGl0eQorICBiYWNrc2xhc2ggZXNjYXBlID0gXG9wZXJhbmQKKyAgb3BlcmFuZCA9IHtudW1i ZXJ9IHwgbnVtYmVyIHwgZm5hbWUob3BlcmFuZCkgfCB2KG5hbWUpIHwgJChuYW1lKSB8IG0obmFt ZSkKKyAgbnVtYmVyID0gW3JdbltuW25dXV0sIGkuZS4gYW4gb3B0aW9uYWwgcmFkaXggY29kZSBm b2xsb3dlZCBieSAxLTMgZGlnaXRzCisgIHJhZGl4IGNvZGUgaXMgb08gKG9jdGFsKSwgeFggKGhl eCksIGREIG9yIG5vbmUgKGRlY2ltYWwpIChzZWUgeHhlc2MoKSkuCisqLworCisjaWZuZGVmIE5P RlJJTExTCitpbnQKK3l5c3RyaW5nKHMsczIpIGNoYXIgKnM7IGNoYXIgKipzMjsgeyAgICAvKiBS ZXZlcnNlIGEgc3RyaW5nICovCisgICAgaW50IHg7CisgICAgc3RhdGljIGNoYXIgKm5ldzsKKyAg ICBuZXcgPSAqczI7CisgICAgaWYgKCFzIHx8ICFuZXcpIHJldHVybigtMSk7ICAgICAgICAgLyog V2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXJzLiAqLworICAgIGlmICgoeCA9IChpbnQpc3RybGVu KHMpKSA9PSAwKSB7ICAgIC8qIFJlY3Vyc2lvbiBkb25lLiAqLworICAgICAgICAqbmV3ID0gJ1ww JzsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICB4LS07ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGNhbGwgc2VsZiAqLworICAgICpuZXcrKyA9IHNb eF07ICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHJldmVyc2UgcmVzdCBvZiBzdHJpbmcuICov CisgICAgc1t4XSA9IDA7CisgICAgcmV0dXJuKHl5c3RyaW5nKHMsJm5ldykpOworfQorI2VuZGlm IC8qIE5PRlJJTExTICovCisKK3N0YXRpYyBjaGFyIGlwYWJ1ZlsxNl0gPSB7IE5VTCB9OyAgICAg ICAvKiBJUCBhZGRyZXNzIGJ1ZmZlciAqLworCitzdGF0aWMgY2hhciAqCitnZXRpcChzKSBjaGFy ICpzOyB7CisgICAgY2hhciBjPU5VTDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2Vy cy4uLiAqLworICAgIGludCBpPTAsIHA9MCwgZD0wOworICAgIGludCBzdGF0ZSA9IDA7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFN0YXRlIG9mIDItc3RhdGUgRlNBICovCisKKyAgICB3aGlsZSAo KGMgPSAqcysrKSkgeworICAgICAgICBzd2l0Y2goc3RhdGUpIHsKKyAgICAgICAgICBjYXNlIDA6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIGZpcnN0IGRpZ2l0ICovCisgICAgICAgICAg ICBpID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGJ1ZmZlciBpbmRleCAqLwor ICAgICAgICAgICAgaXBhYnVmW2ldID0gTlVMOyAgICAgICAgICAgIC8qIEluaXRpYWxpemUgb3V0 cHV0IGJ1ZmZlciAqLworICAgICAgICAgICAgcCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8q IFBlcmlvZCBjb3VudGVyICovCisgICAgICAgICAgICBkID0gMDsgICAgICAgICAgICAgICAgICAg ICAgLyogRGlnaXQgY291bnRlciAqLworICAgICAgICAgICAgaWYgKGlzZGlnaXQoYykpIHsgICAg ICAgICAgIC8qIEhhdmUgZmlyc3QgZGlnaXQgKi8KKyAgICAgICAgICAgICAgICBkID0gMTsgICAg ICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLworICAgICAgICAgICAgICAgIGlwYWJ1ZltpKytd ID0gYzsgICAgICAgIC8qIENvcHkgaXQgKi8KKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDE7ICAg ICAgICAgICAgICAvKiBDaGFuZ2Ugc3RhdGUgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGJyZWFrOworCisgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgLyogSW4g bnVtZXJpYyBmaWVsZCAqLworICAgICAgICAgICAgaWYgKGlzZGlnaXQoYykpIHsgICAgICAgICAg IC8qIEhhdmUgZGlnaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoKytkID4gMykgICAgICAgICAg ICAvKiBUb28gbWFueSAqLworICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwOyAgICAgICAgICAg IC8qIFN0YXJ0IG92ZXIgKi8KKyAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAg ICAvKiBOb3QgdG9vIG1hbnkgKi8KKyAgICAgICAgICAgICAgICAgIGlwYWJ1ZltpKytdID0gYzsg ICAgICAvKiBLZWVwIGl0ICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJy4nICYmIHAg PCAzKSB7IC8qIEhhdmUgYSBwZXJpb2QgKi8KKyAgICAgICAgICAgICAgICBwKys7ICAgICAgICAg ICAgICAgICAgICAvKiBDb3VudCBpdCAqLworICAgICAgICAgICAgICAgIGlmIChkID09IDApICAg ICAgICAgICAgIC8qIE5vdCBwcmVjZWRlZCBieSBhIGRpZ2l0ICovCisgICAgICAgICAgICAgICAg ICBzdGF0ZSA9IDA7ICAgICAgICAgICAgLyogU3RhcnQgb3ZlciAqLworICAgICAgICAgICAgICAg IGVsc2UgICAgICAgICAgICAgICAgICAgIC8qIE9LICovCisgICAgICAgICAgICAgICAgICBpcGFi dWZbaSsrXSA9IGM7ICAgICAgLyogS2VlcCBpdCAqLworICAgICAgICAgICAgICAgIGQgPSAwOyAg ICAgICAgICAgICAgICAgIC8qIFJlc2V0IGRpZ2l0IGNvdW50ZXIgKi8KKyAgICAgICAgICAgIH0g ZWxzZSBpZiAocCA9PSAzICYmIGQgPiAwKSB7IC8qIE5vdCBwYXJ0IG9mIGFkZHJlc3MgKi8KKyAg ICAgICAgICAgICAgICBpcGFidWZbaV0gPSBOVUw7ICAgICAgICAvKiBJZiB3ZSBoYXZlIGZ1bGwg SVAgYWRkcmVzcyAqLworICAgICAgICAgICAgICAgIHJldHVybigoY2hhciAqKWlwYWJ1Zik7IC8q IFJldHVybiBpdCAqLworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8q IE90aGVyd2lzZSAqLworICAgICAgICAgICAgICAgIHN0YXRlID0gMDsgICAgICAgICAgICAgIC8q IFN0YXJ0IG92ZXIgKi8KKyAgICAgICAgICAgICAgICBpcGFidWZbMF0gPSBOVUw7ICAgICAgICAv KiAoaW4gY2FzZSBubyBtb3JlIGNoYXJzIGxlZnQpICovCisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYWxsIHRocnUg YXQgZW5kIG9mIHN0cmluZyAqLworICAgIGlwYWJ1ZltpXSA9IE5VTDsgICAgICAgICAgICAgICAg ICAgIC8qIE1heWJlIHdlIGhhdmUgb25lICovCisgICAgcmV0dXJuKChwID09IDMgJiYgZCA+IDAp ID8gKGNoYXIgKilpcGFidWYgOiAiIik7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8KKworLyogRGF0 ZSBSb3V0aW5lcyAqLworCisvKiBaIEogRCBBIFQgRSAgLS0gIENvbnZlcnQgeXl5eW1tZGQgZGF0 ZSB0byBEYXkgb2YgWWVhciAqLworCitzdGF0aWMgaW50IGpkYXlzWzEyXSA9IHsgIDAsMzEsNTks OTAsMTIwLDE1MSwxODEsMjEyLDI0MywyNzMsMzA0LDMzNCB9Oworc3RhdGljIGludCBsZGF5c1sx Ml0gPSB7ICAwLDMxLDYwLDkxLDEyMSwxNTIsMTgyLDIxMywyNDQsMjc0LDMwNSwzMzUgfTsKK3N0 YXRpYyBjaGFyIHpqZGJ1ZlsxMl0gPSB7IE5VTCwgTlVMIH07CisvKgorICBEZWluZGUsIG5lIGlu IHBvc3RlcnVtIGEgWElJIGthbGVuZGFzIGFwcmlsaXMgYWVxdWlub2N0aXVtIHJlY2VkYXQsCisg IHN0YXR1aW11cyBiaXNzZXh0dW0gcXVhcnRvIHF1b3F1ZSBhbm5vICh1dGkgbW9zIGVzdCkgY29u dGludWFyaSBkZWJlcmUsCisgIHByYWV0ZXJxdWFtIGluIGNlbnRlc2ltaXMgYW5uaXM7IHF1aSwg cXVhbXZpcyBiaXNzZXh0aWxlcyBhbnRlYSBzZW1wZXIKKyAgZnVlcmludCwgcXVhbGVtIGV0aWFt IGVzc2Ugdm9sdW11cyBhbm51bSBNREMsIHBvc3QgZXVtIHRhbWVuIHF1aSBkZWluY2VwcworICBj b25zZXF1ZW50dXIgY2VudGVzaW1pIG5vbiBvbW5lcyBiaXNzZXh0aWxlcyBzaW50LCBzZWQgaW4g cXVhZHJpbmdlbnRpcworICBxdWlidXNxdWUgYW5uaXMgcHJpbWkgcXVpcXVlIHRyZXMgY2VudGVz aW1pIHNpbmUgYmlzc2V4dG8gdHJhbnNpZ2FudHVyLAorICBxdWFydHVzIHZlcm8gcXVpc3F1ZSBj ZW50ZXNpbXVzIGJpc3NleHRpbGlzIHNpdCwgaXRhIHV0IGFubnVzIE1EQ0MsIE1EQ0NDLAorICBN RENDQ0MgYmlzc2V4dGlsZXMgbm9uIHNpbnQuIEFubm8gdmVybyBNTSwgbW9yZSBjb25zdWV0byBk aWVzIGJpc3NleHR1cworICBpbnRlcmNhbGV0dXIsIGZlYnJ1YXJpbyBkaWVzIFhYSVggY29udGlu ZW50ZSwgaWRlbXF1ZSBvcmRvIGludGVybWl0dGVuZGkKKyAgaW50ZXJjYWxhbmRpcXVlIGJpc3Nl eHR1bSBkaWVtIGluIHF1YWRyaW5nZW50aXMgcXVpYnVzcXVlIGFubmlzIHBlcnBldHVvCisgIGNv bnNlcnZldHVyLiAgLSBHcmVnb3JpdXMgWElJSSwgQW5ubyBEb21pbmkgTURMWFhYSUkuCisqLwor Y2hhciAqCit6amRhdGUoZGF0ZSkgY2hhciAqIGRhdGU7IHsgICAgICAgICAgICAgLyogZGF0ZSA9 IHl5eXltbWRkICovCisgICAgY2hhciB5ZWFyWzVdOworICAgIGNoYXIgbW9udGhbM107CisgICAg Y2hhciBkYXlbM107CisgICAgaW50IGQsIG0sIHgsIHk7CisgICAgaW50IGxlYXBkYXksIGo7Cisg ICAgY2hhciAqIHRpbWUgPSBOVUxMOworCisgICAgaWYgKCFkYXRlKSBkYXRlID0gIiI7ICAgICAg ICAgICAgICAgLyogVmFsaWRhdGUgYXJnICovCisgICAgeCA9IHN0cmxlbihkYXRlKTsKKyAgICBp ZiAoeCA8IDEpIHJldHVybigiMCIpOworICAgIGlmICh4IDwgOCkgcmV0dXJuKCItMSIpOworICAg IGZvciAoeCA9IDA7IHggPCA4OyB4KyspCisgICAgICBpZiAoIWlzZGlnaXQoZGF0ZVt4XSkpCisg ICAgICAgIHJldHVybigiLTEiKTsKKworICAgIGlmIChkYXRlWzhdKSBpZiAoZGF0ZVs5XSkKKyAg ICAgIHRpbWUgPSBkYXRlICsgOTsKKworICAgIHllYXJbMF0gPSBkYXRlWzBdOyAgICAgICAgICAg ICAgICAgIC8qIElzb2xhdGUgeWVhciAqLworICAgIHllYXJbMV0gPSBkYXRlWzFdOworICAgIHll YXJbMl0gPSBkYXRlWzJdOworICAgIHllYXJbM10gPSBkYXRlWzNdOworICAgIHllYXJbNF0gPSAn XDAnOworCisgICAgbW9udGhbMF0gPSBkYXRlWzRdOyAgICAgICAgICAgICAgICAgLyogTW9udGgg Ki8KKyAgICBtb250aFsxXSA9IGRhdGVbNV07CisgICAgbW9udGhbMl0gPSAnXDAnOzsKKworICAg IGRheVswXSA9IGRhdGVbNl07ICAgICAgICAgICAgICAgICAgIC8qIEFuZCBkYXkgKi8KKyAgICBk YXlbMV0gPSBkYXRlWzddOworICAgIGRheVsyXSA9ICdcMCc7CisKKyAgICBsZWFwZGF5ID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgbm8gbGVhcCBkYXkgKi8KKyAgICB5ID0g YXRvaSh5ZWFyKTsKKyAgICBtID0gYXRvaShtb250aCk7CisgICAgZCA9IGF0b2koZGF5KTsKKyAg ICBpZiAobSA+IDIpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBMZWFwIGRheSBiZWZv cmUgTWFyY2ggKi8KKyAgICAgICAgaWYgKHkgJSA0ID09IDApIHsgICAgICAgICAgICAgICAvKiBJ ZiB5ZWFyIGlzIGRpdmlzaWJsZSBieSA0ICovCisgICAgICAgICAgICBsZWFwZGF5ID0gMTsgICAg ICAgICAgICAgICAgLyogSXQncyBhIExlYXAgeWVhciAqLworICAgICAgICAgICAgaWYgKHkgJSAx MDAgPT0gMCkgeyAgICAgICAgIC8qIEV4Y2VwdCBpZiBkaXZpc2libGUgYnkgMTAwICovCisgICAg ICAgICAgICAgICAgaWYgKHkgJSA0MDAgIT0gMCkgICAgICAgLyogYnV0IG5vdCBieSA0MDAgKi8K KyAgICAgICAgICAgICAgICAgIGxlYXBkYXkgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgfQorICAgIGogPSBqZGF5c1ttIC0gMV0gKyBkICsgbGVhcGRheTsgICAgIC8qIERheSBv ZiB5ZWFyICovCisgICAgaWYgKHRpbWUpCisgICAgICBzcHJpbnRmKHpqZGJ1ZiwiJTA0ZCUwM2Qg JXMiLHksaix0aW1lKTsgLyogU0FGRSAqLworICAgIGVsc2UKKyAgICAgIHNwcmludGYoempkYnVm LCIlMDRkJTAzZCIseSxqKTsgICAvKiBTQUZFICovCisgICAgcmV0dXJuKChjaGFyICopempkYnVm KTsKK30KKworc3RhdGljIGNoYXIganpkYnVmWzMyXTsKKworLyogSiBaIEQgQSBUIEUgIC0tICBD b252ZXJ0IERheSBvZiBZZWFyIHRvIHl5eXlkZG1tIGRhdGUgKi8KKworY2hhciAqCitqemRhdGUo ZGF0ZSkgY2hhciAqIGRhdGU7IHsgICAgICAgICAgICAgLyogZGF0ZSA9IHl5eXlkZGQgKi8KKyAg ICBjaGFyIHllYXJbNV07ICAgICAgICAgICAgICAgICAgICAgICAvKiB3aXRoIG9wdGlvbmFsIHRp bWUgKi8KKyAgICBjaGFyIGRheVs0XTsKKyAgICBjaGFyICogdGltZSA9IE5VTEwsICogcDsKKyAg ICBpbnQgZCwgbSwgeCwgeTsKKyAgICBpbnQgbGVhcGRheSwgajsKKyAgICBpbnQgKiB6ejsKKwor ICAgIGlmICghZGF0ZSkgZGF0ZSA9ICIiOyAgICAgICAgICAgICAgIC8qIFZhbGlkYXRlIGFyZyAq LworICAgIHggPSBzdHJsZW4oZGF0ZSk7CisKKyAgICBkZWJ1ZyhGMTExLCJqemRhdGUgbGVuIixk YXRlLHgpOworCisgICAgaWYgKHggPCAxKSByZXR1cm4oIjAiKTsKKyAgICBpZiAoeCA8IDcpIHJl dHVybigiLTEiKTsKKyAgICBpZiAoeCA+IDgpIHRpbWUgPSBkYXRlICsgODsKKworICAgIGZvciAo eCA9IDA7IHggPCA3OyB4KyspCisgICAgICBpZiAoIWlzZGlnaXQoZGF0ZVt4XSkpCisgICAgICAg IHJldHVybigiLTEiKTsKKworICAgIHllYXJbMF0gPSBkYXRlWzBdOyAgICAgICAgICAgICAgICAg IC8qIElzb2xhdGUgeWVhciAqLworICAgIHllYXJbMV0gPSBkYXRlWzFdOworICAgIHllYXJbMl0g PSBkYXRlWzJdOworICAgIHllYXJbM10gPSBkYXRlWzNdOworICAgIHllYXJbNF0gPSAnXDAnOwor CisgICAgZGVidWcoRjExMCwianpkYXRlIHllYXIiLHllYXIsMCk7CisKKyAgICBkYXlbMF0gPSBk YXRlWzRdOyAgICAgICAgICAgICAgICAgICAvKiBBbmQgZGF5ICovCisgICAgZGF5WzFdID0gZGF0 ZVs1XTsKKyAgICBkYXlbMl0gPSBkYXRlWzZdOworICAgIGRheVszXSA9ICdcMCc7CisKKyAgICBk ZWJ1ZyhGMTEwLCJqemRhdGUgZGF5IixkYXksMCk7CisKKyAgICBqID0gYXRvaShkYXkpOworICAg IGlmIChqID4gMzY2KQorICAgICAgcmV0dXJuKCItMSIpOworCisgICAgbGVhcGRheSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIG5vIGxlYXAgZGF5ICovCisgICAgeSA9IGF0 b2koeWVhcik7CisgICAgaWYgKHkgJSA0ID09IDApIHsgICAgICAgICAgICAgICAgICAgLyogSWYg eWVhciBpcyBkaXZpc2libGUgYnkgNCAqLworICAgICAgICBsZWFwZGF5ID0gMTsgICAgICAgICAg ICAgICAgICAgIC8qIEl0J3MgYSBMZWFwIHllYXIgKi8KKyAgICAgICAgaWYgKHkgJSAxMDAgPT0g MCkgeyAgICAgICAgICAgICAvKiBFeGNlcHQgaWYgZGl2aXNpYmxlIGJ5IDEwMCAqLworICAgICAg ICAgICAgaWYgKHkgJSA0MDAgIT0gMCkgICAgICAgICAgIC8qIGJ1dCBub3QgYnkgNDAwICovCisg ICAgICAgICAgICAgIGxlYXBkYXkgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYx MDEsImp6ZGF0ZSBsZWFwZGF5IiwiIixsZWFwZGF5KTsKKyAgICB6eiA9IGxlYXBkYXkgPyBsZGF5 cyA6IGpkYXlzOworCisgICAgZm9yICh4ID0gMDsgeCA8IDExOyB4KyspCisgICAgICBpZiAoaiA+ IHp6W3hdICYmIGogPD0genpbeCsxXSkKKyAgICAgICAgYnJlYWs7CisgICAgbSA9IHggKyAxOwor CisgICAgZGVidWcoRjEwMSwianpkYXRlIG0iLCIiLG0pOworCisgICAgZCA9IGogLSB6elt4XTsK KworICAgIGRlYnVnKEYxMDEsImp6ZGF0ZSBkIiwiIixkKTsKKworICAgIGlmICh0aW1lKQorICAg ICAgc3ByaW50ZihqemRidWYsIiUwNGQlMDJkJTAyZCAlcyIseSxtLGQsdGltZSk7IC8qIFNBRkUg Ki8KKyAgICBlbHNlCisgICAgICBzcHJpbnRmKGp6ZGJ1ZiwiJTA0ZCUwMmQlMDJkIix5LG0sZCk7 IC8qIFNBRkUgKi8KKworICAgIGRlYnVnKEYxMDEsImp6ZGF0ZSBqemRidWYiLGp6ZGJ1ZiwwKTsK KworICAgIHAgPSBja2N2dGRhdGUoKGNoYXIgKilqemRidWYsIDApOyAgIC8qIENvbnZlcnQgdG8g c3RhbmRhcmQgZm9ybSAqLworICAgIGNrc3RybmNweShqemRidWYscCwzMik7CisgICAgaWYgKCF0 aW1lKSBqemRidWZbOF0gPSBOVUw7ICAgICAgICAgLyogUmVtb3ZlIHRpbWUgaWYgbm90IHdhbnRl ZCAqLworICAgIHJldHVybigoY2hhciAqKWp6ZGJ1Zik7Cit9CisKKy8qIE0gSiBEICAtLSAgTW9k aWZpZWQgSnVsaWFuIERhdGUgKi8KKy8qCisgIENhbGwgd2l0aDoKKyAgICBTdGFuZGFyZC1mb3Jt YXQgZGF0ZS10aW1lIHN0cmluZzogeXl5eW1tZGRbIGhoOm1tOnNzXS4KKyAgICBUaGUgdGltZSwg aWYgYW55LCBpcyBpZ25vcmVkLgorCisgIFJldHVybnM6CisgICAgLTFMIG9uIGVycm9yLCBvdGhl cndpc2U6CisgICAgVGhlIG51bWJlciBvZiBkYXlzIHNpbmNlIDE3IE5vdiAxODU4IGFzIGEgd2hv bGUgbnVtYmVyOgorICAgIDE2IE5vdiAxODU4ID0gLTEsIDE3IE5vdiAxODU4ID0gMCwgMTggTm92 IDE4NTggPSAxLCAxOSBOb3YgMTg1OCA9IDIsIC4uLgorCisgIFRoZSBNb2RpZmllZCBKdWxpYW4g RGF0ZSBpcyBkZWZpbmVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsIEFzdHJvbm9taWNhbAorICBVbmlv biBhcyB0aGUgdHJ1ZSBKdWxpYW4gZGF0ZSBtaW51cyAyNDAwMDAwLjUgZGF5cy4gIFRoZSB0cnVl IEp1bGlhbgorICBkYXRlIGlzIHRoZSBudW1iZXIgZGF5cyBzaW5jZSBzaW5jZSBub29uIG9mIDEg SmFudWFyeSA0NzEzIEJDRSBvZiB0aGUKKyAgSnVsaWFuIHByb2xlcHRpYyBjYWxlbmRhci4gIENv bnZlcnNpb25zIGJldHdlZW4gY2FsZW5kYXIgZGF0ZXMgYW5kCisgIEp1bGlhbiBkYXRlcywgaG93 ZXZlciwgYXNzdW1lIEdyZWdvcmlhbiBkYXRpbmcuCisqLworbG9uZworbWpkKGRhdGUpIGNoYXIg KiBkYXRlOyB7CisgICAgY2hhciB5ZWFyWzVdOworICAgIGNoYXIgbW9udGhbM107CisgICAgY2hh ciBkYXlbM107CisgICAgaW50IHgsIGEsIGQsIG0sIHk7CisgICAgbG9uZyB6OworCisgICAgaWYg KCFkYXRlKSBkYXRlID0gIiI7ICAgICAgICAgICAgICAgLyogVmFsaWRhdGUgYXJnICovCisgICAg eCA9IHN0cmxlbihkYXRlKTsKKyAgICBpZiAoeCA8IDEpIHJldHVybigwTCk7CisgICAgaWYgKHgg PCA4KSByZXR1cm4oLTFMKTsKKyAgICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKQorICAgICAgaWYg KCFpc2RpZ2l0KGRhdGVbeF0pKQorICAgICAgICByZXR1cm4oLTFMKTsKKworICAgIHllYXJbMF0g PSBkYXRlWzBdOyAgICAgICAgICAgICAgICAgIC8qIElzb2xhdGUgeWVhciAqLworICAgIHllYXJb MV0gPSBkYXRlWzFdOworICAgIHllYXJbMl0gPSBkYXRlWzJdOworICAgIHllYXJbM10gPSBkYXRl WzNdOworICAgIHllYXJbNF0gPSAnXDAnOworCisgICAgbW9udGhbMF0gPSBkYXRlWzRdOyAgICAg ICAgICAgICAgICAgLyogTW9udGggKi8KKyAgICBtb250aFsxXSA9IGRhdGVbNV07CisgICAgbW9u dGhbMl0gPSAnXDAnOzsKKyAgICBtID0gYXRvaShtb250aCk7CisKKyAgICBkYXlbMF0gPSBkYXRl WzZdOyAgICAgICAgICAgICAgICAgICAvKiBBbmQgZGF5ICovCisgICAgZGF5WzFdID0gZGF0ZVs3 XTsKKyAgICBkYXlbMl0gPSAnXDAnOworICAgIGQgPSBhdG9pKGRheSk7CisKKyAgICBhID0gKDE0 LW0pLzEyOyAgICAgICAgICAgICAgICAgICAgICAvKiBDYWxjdWxhdGUgdHJ1ZSBKdWxpYW4gZGF0 ZSAqLworICAgIHkgPSBhdG9pKHllYXIpICsgNDgwMCAtIGE7CisgICAgbSA9IG0gKyAxMiAqIGEg LSAzOworICAgIHogPSBkICsgKGxvbmcpKDMwNiptKzUpLzEwICsgKGxvbmcpKHkqMzY1KSArIHkv NCAtIHkvMTAwICsgeS80MDAgLSAzMjA0NUw7CisKKyAgICB6IC09IDI0MDAwMDFMOyAgICAgICAg ICAgICAgICAgICAgICAvKiBDb252ZXJ0IEpEIHRvIE1KRCAqLworCisgICAgcmV0dXJuKHopOwor fQorCitzdGF0aWMgY2hhciBtamQyZGJ1ZlszMl07CisKKy8qICBNIEogRCAyIEQgQSBUIEUgIC0t ICBDb252ZXJ0cyBNSkQgdG8geXl5eW1tZGQgICovCisKK2NoYXIgKgorI2lmZGVmIENLX0FOU0lD CittamQyZGF0ZShsb25nIG1qZCkKKyNlbHNlCittamQyZGF0ZShtamQpIGxvbmcgbWpkOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisvKiBtamQyZGF0ZSAqLyB7CisgICAgbG9uZyBqZCwgbCwgbjsK KyAgICBpbnQgZCwgbSwgeTsKKyAgICBqZCA9IChsb25nKShtamQgKyAyNDAwMDAxTCk7CisgICAg bCA9IGpkICsgNjg1Njk7CisgICAgbiA9IDQgKiBsIC8gMTQ2MDk3TDsKKyAgICBsID0gbCAtICgx NDYwOTcgKiBuICsgMykgLyA0OworICAgIHkgPSA0MDAwICogKGwgKyAxKSAvIDE0NjEwMDFMOwor ICAgIGwgPSBsIC0gMTQ2MSAqIHkgLyA0ICsgMzE7CisgICAgbSA9IDgwICogbCAvIDI0NDc7Cisg ICAgZCA9IGwgLSAyNDQ3ICogbSAvIDgwOworICAgIGwgPSBtIC8gMTE7CisgICAgbSA9IG0gKyAy IC0gMTIgKiBsOworICAgIHkgPSAxMDAgKiAobiAtIDQ5KSArIHkgKyBsOworICAgIHNwcmludGYo bWpkMmRidWYsIiUwNGQlMDJkJTAyZCIseSxtLGQpOyAvKiBTQUZFICovCisgICAgcmV0dXJuKChj aGFyICopbWpkMmRidWYpOworfQorCisjaWZuZGVmIE5PU1BMCitzdGF0aWMgY2hhciAqKiBmbGlz dCA9IChjaGFyICoqKSBOVUxMOyAgLyogRmlsZSBsaXN0IGZvciBcZm5leHRmaWxlKCkgKi8KK3N0 YXRpYyBpbnQgZmxpc3RuID0gMDsgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgaXRlbXMg aW4gZmlsZSBsaXN0ICovCisKKy8qCisgIFRoZSBmdW5jdGlvbiByZXR1cm4tdmFsdWUgYnVmZmVy IG11c3QgYmUgZ2xvYmFsLCBzaW5jZSBmbmV2YWwoKSByZXR1cm5zIGEKKyAgcG9pbnRlciB0byBp dC4gIGZuZXZhbCgpIGlzIGNhbGxlZCBvbmx5IGJ5IHp6c3RyaW5nKCksIHdoaWNoIGFsd2F5cyBj b3BpZXMKKyAgdGhlIHJlc3VsdCBvdXQgb2YgdGhpcyBidWZmZXIgdG8gc29tZXdoZXJlIGVsc2Us IHNvIGl0J3MgT0sgdG8gaGF2ZSBvbmx5CisgIG9uZSBidWZmZXIgZm9yIHRoaXMgaW4gbW9zdCBj YXNlcy4gIEhvd2V2ZXIsIHNpbmNlIGZ1bmN0aW9uIGNhbGxzIGNhbiBiZQorICBuZXN0ZWQgLS0g ZS5nLiBmdW5jdGlvbnMgd2hvc2UgYXJndW1lbnRzIGFyZSBmdW5jdGlvbnMsIG9yIHJlY3Vyc2l2 ZQorICBmdW5jdGlvbnMsIGF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIGNvbnZlcnQgdGhpcyB0byBh biBhcnJheSBvZiBidWZmZXJzLAorICBpbmRleGVkIGJ5IGZ1bmN0aW9uIGRlcHRoICh3aGljaCBt aWdodCBvciBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCisgICJkZXB0aCIgdmFyaWFibGUp LiAgQWxzbywgc2luY2UgZnVuY3Rpb24gcmVzdWx0cyBhcmUgcG90ZW50aWFsbHkgcXVpdGUgYmln LAorICB3ZSdkIG5lZWQgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgZHluYW1pY2FsbHkgYXMg d2UgZGVzY2VuZCBhbmQgYXNjZW5kCisgIGZ1bmN0aW9uIGRlcHRoLiAgTGVmdCBmb3IgYSBmdXR1 cmUgcmVsZWFzZS4uLgorKi8KK2NoYXIgZm52YWxbRk5WQUxMKzJdOyAgICAgICAgICAgICAgICAg ICAvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgICovCitzdGF0aWMgaW50IGZuZGVwdGggPSAwOyAg ICAgICAgICAgICAgICAgLyogKHdlIGRvbid0IGFjdHVhbGx5IHVzZSB0aGlzIHlldCkgKi8KK2lu dCBmbnN1Y2Nlc3MgPSAxOworZXh0ZXJuIGludCBmbmVycm9yOworCisvKiBmIHAgZiBvIHIgbSBh IHQgIC0tICBGbG9hdGluZy1wb2ludCBudW1iZXIgbmljZWx5IGZvcm1hdHRlZC4gICovCisvKgor ICAgUmV0dXJucyByZXN1bHRzIGZyb20gYSBjaXJjdWxhciAxSyBidWZmZXIuCisgICBEb24ndCBj b3VudCBvbiB0b28gbWFueSByZXN1bHRzIHJlbWFpbmluZyBhdmFpbGFibGUgYXQgb25jZTsgaXQg Y291bGQKKyAgIGJlIGFueXdoZXJlIGZyb20gNSB0byBtYXliZSAxMDAsIGRlcGVuZGluZyBvbiB0 aGUgc2l6ZXMgb2YgdGhlIHJlc3VsdHMuCisqLworI2lmZGVmIENLRkxPQVQKKyNkZWZpbmUgRlBG TVRTSVogMTAyNAorc3RhdGljIGNoYXIgZnBmbXRidWZbRlBGTVRTSVpdID0geyBOVUwsIE5VTCB9 Oworc3RhdGljIGludCBmcGZidWZwb3MgPSAwOyAgICAgICAgICAgICAgIC8qICh3aHkgd2FzIHRo aXMgY2hhciBiZWZvcmU/KSAqLworCitjaGFyICoKK2ZwZm9ybWF0KGZwcmVzdWx0LHBsYWNlcyxy b3VuZCkgQ0tGTE9BVCBmcHJlc3VsdDsgaW50IHBsYWNlcywgcm91bmQ7IHsKKyAgICBjaGFyIGZi dWZbMTZdOyAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgY3JlYXRpbmcgcHJpbnRmIGZvcm1h dCAqLworICAgIGludCBuaW5lcyA9IDAsIHNpZ24gPSAwLCB4LCB5LCBpLCBqLCBzaXplID0gMDsK KyAgICBjaGFyICogYnVmOworICAgIENLRkxPQVQgZnRtcDsKKworICAgIHggPSBwbGFjZXMgPyBw bGFjZXMgOiAoZnBfZGlnaXRzID8gZnBfZGlnaXRzIDogNik7CisKKyAgICBkZWJ1ZyhGMTAxLCJm cGZvcm1hdCBmcHJlc3VsdCIsIiIsZnByZXN1bHQpOworICAgIGRlYnVnKEYxMDEsImZwZm9ybWF0 IHBsYWNlcyIsIiIscGxhY2VzKTsKKyAgICBkZWJ1ZyhGMTAxLCJmcGZvcm1hdCBmcGZidWZwb3Mg MSIsIiIsZnBmYnVmcG9zKTsKKworICAgIGZ0bXAgPSBmcHJlc3VsdDsKKyAgICBpZiAoZnRtcCA8 IDAuMCkgZnRtcCA9IDAuMCAtIGZwcmVzdWx0OworCisjaWZkZWYgRk5GTE9BVAorICAgIGlmICgh ZnBfcm91bmRpbmcgJiYgICAgICAgICAgICAgICAgIC8qIElmIHByaW50ZiBkb2Vzbid0IHJvdW5k LCAqLworICAgICAgICAocGxhY2VzID4gMCB8fCAgICAgICAgICAgICAgICAgIC8qIHJvdW5kIHJl c3VsdCB0byBkZWNpbWFsIHBsYWNlcy4gKi8KKyAgICAgICAgIChwbGFjZXMgPT0gMCAmJiByb3Vu ZCkpKQorICAgICAgZnByZXN1bHQgKz0gKDAuNSAvIHBvdygxMC4wLChDS0ZMT0FUKXBsYWNlcykp OworICAgIHkgPSAoZnRtcCA9PSAwLjApID8gMSA6IChpbnQpbG9nMTAoZnRtcCk7CisgICAgc2l6 ZSA9IHkgKyB4ICsgMzsgICAgICAgICAgICAgICAgICAgLyogRXN0aW1hdGVkIGxlbmd0aCBvZiBy ZXN1bHQgKi8KKyAgICBpZiAoZnByZXN1bHQgPCAwLjApIHNpemUrKzsKKyNlbHNlCisgICAgc2l6 ZSA9IDIwMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2F5IHRvIGVzdGltYXRlLCBi ZSBnZW5lcm91cyAqLworI2VuZGlmIC8qIEZORkxPQVQgKi8KKworICAgIGRlYnVnKEYxMDEsImZw Zm9ybWF0IHNpemUiLCIiLHNpemUpOworCisgICAgaWYgKGZwZmJ1ZnBvcyA+IChGUEZNVFNJWiAt IHNpemUpKSAgLyogV3JhcCBhcm91bmQgaWYgbmVjZXNzYXJ5ICovCisgICAgICBmcGZidWZwb3Mg PSAwOworICAgIGRlYnVnKEYxMDEsImZwZm9ybWF0IGZwZmJ1ZnBvcyAxIiwiIixmcGZidWZwb3Mp OworCisgICAgYnVmID0gJmZwZm10YnVmW2ZwZmJ1ZnBvc107CisKKyAgICBpZiAocGxhY2VzID4g MCkgeyAgICAgICAgICAgICAgICAgICAvKiBJZiBwbGFjZXMgc3BlY2lmaWVkICovCisgICAgICAg IC8qIHVzZSBzcGVjaWZpZWQgcGxhY2VzIHRvIHdyaXRlIGdpdmVuIG51bWJlciBvZiBkaWdpdHMg Ki8KKyAgICAgICAgc3ByaW50ZihmYnVmLCIlJTAuJWRmIixwbGFjZXMpOyAvKiBTQUZFICovCisg ICAgICAgIHNwcmludGYoYnVmLGZidWYsZnByZXN1bHQpOyAgICAgLyogU0FGRSAqLworICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZS4uLiAqLworICAg ICAgICAvKiBHbyBmb3IgbWF4IHByZWNpc2lvbiAqLworICAgICAgICBzcHJpbnRmKGZidWYsIiUl MC4lZGYiLGZwX2RpZ2l0cyk7IC8qIFNBRkUgKi8KKyAgICAgICAgc3ByaW50ZihidWYsZmJ1Zixm cHJlc3VsdCk7ICAgICAvKiBTQUZFICovCisgICAgfQorICAgIGlmIChidWZbMF0gPT0gJy0nKSBz aWduID0gMTsKKyAgICBkZWJ1ZyhGMTExLCJmcHJlc3VsdCAxIGVycm5vIixidWYsZXJybm8pOyAv KiBDaGVjayBmb3Igb3Zlci91bmRlcmZsb3cgKi8KKyAgICBkZWJ1ZyhGMTExLCJmcHJlc3VsdCAx IGZwZmJ1ZnBvcyIsYnVmLGZwZmJ1ZnBvcyk7CisgICAgLyogR2l2ZSByZXF1ZXN0ZWQgZGVjaW1h bCBwbGFjZXMgKi8KKyAgICBmb3IgKGkgPSBzaWduOyBpIDwgRlBGTVRTSVogJiYgYnVmW2ldOyBp KyspIHsKKyAgICAgICAgaWYgKGJ1ZltpXSA9PSAnLicpICAgICAgICAgICAgICAvKiBGaXJzdCBm aW5kIHRoZSBkZWNpbWFsIHBvaW50ICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2Ug aWYgKGkgPiBmcF9kaWdpdHMgKyBzaWduIC0gMSkgLyogcmVwbGFjaW5nIGdhcmJhZ2UgKi8KKyAg ICAgICAgICBidWZbaV0gPSAnMCc7ICAgICAgICAgICAgICAgICAvKiBkaWdpdHMgd2l0aCAwLi4u ICovCisgICAgfQorICAgIGlmIChidWZbaV0gPT0gJy4nKSB7ICAgICAgICAgICAgICAgIC8qIEhh dmUgZGVjaW1hbCBwb2ludCAqLworICAgICAgICBpbnQgZ290ZW5kID0gMDsKKyAgICAgICAgLyog cGxhY2VzIDwgMCBzbyB0cnVuY2F0ZSBmcmFjdGlvbiAqLworICAgICAgICBpZiAocGxhY2VzIDwg MCB8fCAocGxhY2VzID09IDAgJiYgcm91bmQpKSB7CisgICAgICAgICAgICBidWZbaV0gPSBOVUw7 CisgICAgICAgIH0gZWxzZSBpZiAocGxhY2VzID4gMCkgeyAgICAgICAgLyogZCA+IDAgc28gdGhp cyBtYW55IGRlY2ltYWwgcGxhY2VzICovCisgICAgICAgICAgICBpKys7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmlyc3QgZGlnaXQgYWZ0ZXIgZGVjaW1hbCAqLworICAgICAgICAgICAg Zm9yIChqID0gMDsgaiA8IHBsYWNlczsgaisrKSB7IC8qIFRydW5jYXRlIGFmdGVyIGQgZGVjaW1h bCAqLworICAgICAgICAgICAgICAgIGlmICghYnVmW2oraV0pICAgICAgICAvKiBwbGFjZXMgb3Ig ZXh0ZW5kIHRvIGQgICovCisgICAgICAgICAgICAgICAgICBnb3RlbmQgPSAxOyAgICAgICAgICAg ICAgLyogZGVjaW1hbCBwbGFjZXMuICovCisgICAgICAgICAgICAgICAgaWYgKGdvdGVuZCB8fCBq K2krc2lnbiA+IGZwX2RpZ2l0cykKKyAgICAgICAgICAgICAgICAgIGJ1ZltqK2ldID0gJzAnOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmW2oraV0gPSBOVUw7CisgICAgICAgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogcGxhY2VzID09IDAgc28gRG8gVGhlIFJpZ2h0 IFRoaW5nICovCisgICAgICAgICAgICBmb3IgKGogPSAoaW50KXN0cmxlbihidWYpIC0gMTsgaiA+ IGkrMTsgai0tKSB7CisgICAgICAgICAgICAgICAgaWYgKChqIC0gc2lnbikgPiBmcF9kaWdpdHMp CisgICAgICAgICAgICAgICAgICBidWZbal0gPSAnMCc7CisgICAgICAgICAgICAgICAgaWYgKGJ1 ZltqXSA9PSAnMCcpCisgICAgICAgICAgICAgICAgICBidWZbal0gPSBOVUw7IC8qIFN0cmlwIHVz ZWxlc3MgdHJhaWxpbmcgMCdzLiAqLworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZwZm10 YnVmW0ZQRk1UU0laLTFdID0gTlVMOworICAgIGogPSBzdHJsZW4oYnVmKTsKKyAgICBzaWduID0g MDsKKyAgICBmb3IgKGkgPSBqLTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGlmIChidWZbaV0g PT0gJzknKQorICAgICAgICAgIG5pbmVzKys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBicmVh azsKKyAgICB9CisgICAgLyogRG8gc29tZXRoaW5nIGFib3V0IHh4Lnh4OTk5OTk5OTkuLi4gKi8K KyAgICBpZiAobmluZXMgPiA1KSB7CisgICAgICAgIGlmIChpc2RpZ2l0KGJ1ZltpXSkgJiYgaSA8 IEZQRk1UU0laIC0gMikgeworICAgICAgICAgICAgYnVmW2ldID0gYnVmW2ldICsgMTsKKyAgICAg ICAgICAgIGJ1ZltpKzFdID0gJzAnOworICAgICAgICAgICAgYnVmW2krMl0gPSAnXDAnOworICAg ICAgICB9CisgICAgfQorICAgIGlmICghc3RybmNtcChidWYsIi0wLjAiLEZQRk1UU0laKSkKKyAg ICAgIGNrc3RybmNweShidWYsIjAuMCIsRlBGTVRTSVopOworICAgIGZwZmJ1ZnBvcyArPSAoaW50 KXN0cmxlbihidWYpICsgMTsKKyAgICByZXR1cm4oKGNoYXIgKilidWYpOworfQorI2VuZGlmIC8q IENLRkxPQVQgKi8KKworc3RhdGljIFZPSUQKK2V2YWxlcnIoZm4pIGNoYXIgKiBmbjsgeworICAg IGlmIChmbmRpYWdzKSB7CisgICAgICAgIGlmIChkaXZieXplcm8pCisgICAgICAgICAgY2ttYWtt c2coZm52YWwsRk5WQUxMLCI8RVJST1I6RElWSURFX0JZX1pFUk86XFxmIixmbiwiKCk+IixOVUxM KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9S OkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgIH0KK30KKworCitzdGF0 aWMgaW50Citja2NpbmRleChjLHMpIGNoYXIgYywgKnM7IHsKKyAgICBpbnQgcmM7CisgICAgaWYg KCFjIHx8ICFzKSByZXR1cm4oMCk7CisgICAgZm9yIChyYyA9IDA7IHNbcmNdOyByYysrKSB7CisJ aWYgKGMgPT0gc1tyY10pIHJldHVybihyYysxKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQor CitzdGF0aWMgY2hhciAqCitkb2t3dmFsKHMsc2VwKSBjaGFyICogcywgKiBzZXA7IHsKKyAgICBj aGFyIGMgPSAnXDAnLCAqIHAsICoga3cgPSBOVUxMLCAqIHZwID0gTlVMTDsKKyAgICBjaGFyICog cmMgPSAiMCI7CQkJLyogUmV0dXJuIGNvZGUgKi8KKyAgICBpbnQgeCA9IDA7CisgICAgaWYgKCFz KSByZXR1cm4ocmMpOworICAgIGlmICghKnMpIHJldHVybihyYyk7CisgICAgZGVidWcoRjExMCwi a3d2YWwgYXJnIixzLDApOworICAgIGRlYnVnKEYxMTAsImt3dmFsIHNlcCIsc2VwLDApOworICAg IHAgPSAoY2hhciAqKW1hbGxvYygoaW50KXN0cmxlbihzKSsxKTsKKyAgICBpZiAoIXApIGdvdG8g eGRva3d2YWw7CisgICAgc3RyY3B5KHAscyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0FG RSAqLworICAgIHMgPSBwOworICAgIHdoaWxlICgqcyA8ICchJyAmJiAqcyA+ICdcMCcpICAgICAg IC8qIEdldCBmaXJzdCBub25ibGFuayAqLworICAgICAgcysrOworICAgIGlmICghKnMpIGdvdG8g eGRva3d2YWw7CisgICAgaWYgKGNrY2luZGV4KCpzLHNlcCkpCQkvKiBTZXBhcmF0b3IgYnV0IG5v IGtleXdvcmQgKi8KKyAgICAgIGdvdG8geGRva3d2YWw7CisgICAga3cgPSBzOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCAqLworICAgIHdoaWxlICgqcyA+ICcgJykgewor CWlmIChja2NpbmRleCgqcyxzZXApKSB7CQkvKiBrZXl3b3JkPS4uLiAqLworICAgICAgICAgICAg YyA9ICpzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcysrOworICAg IH0KKyAgICBpZiAoKmt3KSByYyA9ICIxIjsJCQkvKiBIYXZlIGtleXdvcmQsIHByb21vdGUgcmV0 dXJuIGNvZGUgKi8KKyAgICAqcysrID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU ZXJtaW5hdGUga2V5d29yZCAqLworICAgIHdoaWxlICgqcyA8ICchJyAmJiAqcyA+ICdcMCcpICAg ICAgIC8qIFNraXAgYmxhbmtzICovCisgICAgICBzKys7CisgICAgaWYgKCFjICYmIGNrY2luZGV4 KCpzLHNlcCkpIHsKKyAgICAgICAgYyA9ICpzKys7ICAgICAgICAgICAgICAgICAgICAgICAvKiBI YXZlIHNlcGFyYXRvciAqLworICAgICAgICB3aGlsZSAoKnMgPCAnIScgJiYgKnMgPiAnXDAnKSAg IC8qIFNraXAgYmxhbmtzICovCisgICAgICAgICAgcysrOworICAgIH0KKyAgICBpZiAoYykgewor ICAgICAgICB2cCA9IHM7CisJaWYgKCp2cCkgcmMgPSAiMiI7CQkvKiBIYXZlIHZhbHVlLCBhbm90 aGVyIHByb21vdGlvbiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgd2hpbGUgKCpzID4gJyAn KSAgICAgICAgICAgICAgICAvKiBTa2lwIHRvIGVuZCAqLworICAgICAgICAgIHMrKzsKKyAgICAg ICAgKnMgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdmFsdWUgKi8K KyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgfQorICAgIGRlYnVnKEYxMTAsImt3dmFsIGMiLGNr Y3RvYShjKSwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJrd3ZhbCBrZXl3b3JkIixrdywwKTsKKyAgICBk ZWJ1ZyhGMTEwLCJrd3ZhbCB2YWx1ZSIsdnAsMCk7CisgICAgbWFrZXN0cigmbGFzdGt3dmFsLGt3 KTsKKyAgICB2cCA9IGJyc3RyaXAodnApOworICAgIGRlYnVnKEYxMTAsImt3dmFsIHZhbHVlIix2 cCwwKTsKKyAgICB4ID0gYWRkbWFjKGt3LHZwKTsKKyAgICBkZWJ1ZyhGMTExLCJrd3ZhbCBhZGRt YWMiLGt3LHgpOworICB4ZG9rd3ZhbDogCisgICAgaWYgKHApIGZyZWUocCk7CisgICAgcmV0dXJu KCh4IDwgMCkgPyAiLTEiIDogcmMpOworfQorCitzdGF0aWMgaW50Citpc2FhcnJheShzKSBjaGFy ICogczsgewkJCS8qIElzIHMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgZWxlbWVudCAqLworICAgIGlu dCBzdGF0ZSA9IDA7CisgICAgQ0hBUiBjOworICAgIGlmICghcykgcmV0dXJuKDApOworICAgIHdo aWxlICgoYyA9ICpzKyspKSB7CisJaWYgKCFpc3ByaW50KGMpKSB7CisJICAgIHJldHVybigwKTsK Kwl9IGVsc2UgaWYgKGMgPT0gJzwnKSB7CisJICAgIGlmIChzdGF0ZSAhPSAwKQorCSAgICAgIHJl dHVybigwKTsKKwkgICAgc3RhdGUgPSAxOworCX0gZWxzZSBpZiAoYyA9PSAnPicpIHsKKwkgICAg cmV0dXJuKChzdGF0ZSAhPSAxIHx8ICpzKSA/IDAgOiAxKTsKKwl9CisgICAgfQorICAgIHJldHVy bigwKTsKK30KKworc3RhdGljIGNoYXIgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV2 YWx1YXRlIGJ1aWx0aW4gZnVuY3Rpb25zICovCitmbmV2YWwoZm4sYXJncCxhcmduLHhwKSBjaGFy ICpmbiwgKmFyZ3BbXTsgaW50IGFyZ247IGNoYXIgKiB4cDsgeworICAgIGludCBpPTAsIGo9MCwg az0wLCBsZW4xPTAsIGxlbjI9MCwgbGVuMz0wLCBuPTAsIHQ9MCwgeD0wLCB5PTA7CisgICAgaW50 IGN4LCBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUsIDAgPSBvayAq LworICAgIGxvbmcgeiA9IDBMOworICAgIGNoYXIgKmJwW0ZOQVJHUyArIDFdOyAgICAgICAgICAg ICAgIC8qIFBvaW50ZXJzIHRvIG1hbGxvYydkIHN0cmluZ3MgKi8KKyAgICBjaGFyIGMgPSBOVUw7 CisgICAgY2hhciAqcCA9IE5VTEwsICpzID0gTlVMTDsKKyAgICBjaGFyICp2YWwxID0gTlVMTCwg KnZhbDIgPSBOVUxMOyAgICAvKiBQb2ludGVycyB0byBudW1lcmljIHN0cmluZyB2YWx1ZXMgKi8K KworI2lmZGVmIFJFQ1VSU0lWRQorICAgIGludCByc2F2ZSA9IHJlY3Vyc2l2ZTsKKyNlbmRpZiAv KiBSRUNVUlNJVkUgKi8KKyNpZmRlZiBPUzIKKyAgICBpbnQgenNhdmUgPSB6eHBuOworI2VuZGlm IC8qIE9TMiAqLworCisgICAgaWYgKCFmbikgZm4gPSAiIjsgICAgICAgICAgICAgICAgICAgLyog UHJvdGVjdCBhZ2FpbnN0IG51bGwgcG9pbnRlcnMgKi8KKyAgICBpZiAoISpmbikgcmV0dXJuKCIi KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBGTkFSR1M7IGkrKykgICAgICAgIC8qIEluaXRpYWxp emUgYXJndW1lbnQgcG9pbnRlcnMgKi8KKyAgICAgIGJwW2ldID0gTlVMTDsKKy8qCisgIElNUE9S VEFOVDogTm90ZSB0aGF0IGFyZ24gaXMgbm90IGFuIGFjY3VyYXRlIGNvdW50IG9mIHRoZSBudW1i ZXIgb2YKKyAgYXJndW1lbnRzLiAgV2UgY2FuJ3QgcmVhbGx5IHRlbGwgaWYgYW4gYXJndW1lbnQg aXMgbnVsbCB1bnRpbCBhZnRlciB3ZQorICBleGVjdXRlIHRoZSBjb2RlIGJlbG93LiAgU28gYXJn biBpcyByZWFsbHkgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cworICB3ZSBtaWdodCBo YXZlLiAgQXJnbiBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IDEsIGV2ZW4gaWYgdGhlIGZ1bmN0 aW9uIGlzCisgIGNhbGxlZCB3aXRoIGVtcHR5IHBhcmVudGhlc2VzIChidXQgZG9uJ3QgY291bnQg b24gaXQpLgorKi8KKyAgICBkZWJ1ZyhGMTExLCJmbmV2YWwiLGZuLGFyZ24pOworICAgIGRlYnVn KEYxMTAsImZuZXZhbCIsYXJncFswXSwwKTsKKyAgICBpZiAoYXJnbiA+IEZOQVJHUykgICAgICAg ICAgICAgICAgICAvKiBEaXNjYXJkIGV4Y2VzcyBhcmd1bWVudHMgKi8KKyAgICAgIGFyZ24gPSBG TkFSR1M7CisKKyAgICBmbmRlcHRoKys7CisgICAgZGVidWcoRjEwMSwiZm5ldmFsIGZuZGVwdGgi LCIiLGZuZGVwdGgpOworICAgIHAgPSBmbnZhbDsKKyAgICBmbnZhbFswXSA9IE5VTDsKKyAgICB5 ID0gbG9va3VwKGZuY3RhYixmbixuZnVuY3MsJngpOyAgICAvKiBMb29rIHVwIHRoZSBmdW5jdGlv biBuYW1lICovCisgICAgY3ggPSB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmVj YXVzZSB5IGlzIHRvbyBnZW5lcmljLi4uICovCisgICAgaWYgKGN4IDwgMCkgeyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vdCBmb3VuZCAqLworICAgICAgICBmYWlsZWQgPSAxOworICAgICAg ICBpZiAoZm5kaWFncykgeyAgICAgICAgICAgICAgICAgIC8qIEZVTkNUSU9OIERJQUdOT1NUSUMg T04gKi8KKyAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAgeCA9IHN0cmxlbihmbik7Cisg ICAgICAgICAgICAvKiBUaGUgZm9sbG93aW5nIHNwcmludGYncyBhcmUgc2FmZSAqLworICAgICAg ICAgICAgc3dpdGNoIChjeCkgeworICAgICAgICAgICAgICBjYXNlIC0xOgorICAgICAgICAgICAg ICAgIGlmICh4ICsgMzIgPCBGTlZBTEwpCisgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFs LCI8RVJST1I6Tk9fU1VDSF9GVU5DVElPTjpcXGYlcygpPiIsZm4pOworICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIjxFUlJPUjpOT19TVUNIX0ZV TkNUSU9OPiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIC0y OgorICAgICAgICAgICAgICAgIGlmICh4ICsgMjYgPCBGTlZBTEwpCisgICAgICAgICAgICAgICAg ICBzcHJpbnRmKGZudmFsLCI8RVJST1I6TkFNRV9BTUJJR1VPVVM6XFxmJXMoKT4iLGZuKTsKKyAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCI8RVJS T1I6TkFNRV9BTUJJR1VPVVM+Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgLTM6CisgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiPEVSUk9SOkZVTkNU SU9OX05BTUVfTUlTU0lORzpcXGYoKT4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoeCArIDI2IDwgRk5WQUxMKQor ICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiPEVSUk9SOkxPT0tVUF9GQUlMVVJFOlxc ZiVzKCk+Iixmbik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgc3By aW50ZihmbnZhbCwiPEVSUk9SOkxPT0tVUF9GQUlMVVJFPiIpOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdvdG8gZm5lbmQ7ICAgICAg ICAgICAgICAgICAgICAgLyogQWx3YXlzIGxlYXZlIHZpYSBjb21tb24gZXhpdCAqLworICAgIH0K KyAgICBmbiA9IGZuY3RhYlt4XS5rd2Q7ICAgICAgICAgICAgICAgICAvKiBGdWxsIG5hbWUgb2Yg ZnVuY3Rpb24gKi8KKworICAgIGlmIChhcmduIDwgMCkgeworICAgICAgICBmYWlsZWQgPSAxOwor ICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgIHNwcmlu dGYoZm52YWwsIjxFUlJPUjpNSVNTSU5HX0FSRzpcXGYlcygpPiIsZm4pOworICAgICAgICBnb3Rv IGZuZW5kOworICAgIH0KKyAgICBpZiAoY3ggPT0gRk5fTElUKSB7ICAgICAgICAgICAgICAgICAv KiBsaXRlcmFsKGFyZzEpICovCisgICAgICAgIGRlYnVnKEYwMTAsImZsaXQiLHhwLDApOworICAg ICAgICBwID0geHAgPyB4cCA6ICIiOyAgICAgICAgICAgICAgIC8qIFJldHVybiBhIHBvaW50ZXIg dG8gYXJnIGl0c2VsZiAqLworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKworI2lmZGVmIERF QlVHCisgICAgaWYgKGRlYmxvZykgeworICAgICAgICBpbnQgajsKKyAgICAgICAgZm9yIChqID0g MDsgaiA8IGFyZ247IGorKykKKwkgIGRlYnVnKEYxMTEsImZuZXZhbCBhcmciLGFyZ3Bbal0saik7 CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgZm9yIChqID0gYXJnbi0xOyBqID49IDA7 IGotLSkgeyAgICAgLyogVW5jb3VudCBlbXB0eSB0cmFpbGluZyBhcmdzICovCisgICAgICAgIGlm ICghYXJncFtqXSkKKyAgICAgICAgICBhcmduLS07CisgICAgICAgIGVsc2UgaWYgKCEqKGFyZ3Bb al0pKQorICAgICAgICAgIGFyZ24tLTsKKyAgICAgICAgZWxzZSBicmVhazsKKyAgICB9CisgICAg ZGVidWcoRjExMSwiZm5ldmFsIGFyZ24iLGZuLGFyZ24pOworLyoKKyAgXGZsaXRlcmFsKCkgYW5k IFxmY29udGVudHMoKSBhcmUgc3BlY2lhbCBmdW5jdGlvbnMgdGhhdCBkbyBub3QgZXZhbHVhdGUK KyAgdGhlaXIgYXJndW1lbnRzLCBhbmQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5IGhlcmUuICBBZnRl ciB0aGVzZSBjb21lIHRoZQorICBmdW5jdGlvbnMgd2hvc2UgYXJndW1lbnRzIGFyZSBldmFsdWF0 ZWQgaW4gdGhlIG5vcm1hbCB3YXkuCisqLworI2lmZGVmIENPTU1FTlQKKyAgICAvKiAobW92ZWQg dXApICovCisgICAgaWYgKGN4ID09IEZOX0xJVCkgeyAgICAgICAgICAgICAgICAgLyogbGl0ZXJh bChhcmcxKSAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJmbGl0Iix4cCwwKTsKKyAgICAgICAgcCA9 IHhwID8geHAgOiAiIjsgICAgICAgICAgICAgICAvKiBSZXR1cm4gYSBwb2ludGVyIHRvIGFyZyBp dHNlbGYgKi8KKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgIGlmIChjeCA9PSBGTl9DT04pIHsgICAgICAgICAgICAgICAgIC8qIENvbnRlbnRzIG9m IHZhcmlhYmxlLCB1bmV4cGFuZGVkLiAqLworICAgICAgICBjaGFyIGM7CisgICAgICAgIGludCBz dWJzY3JpcHQgPSAwOyAgICAgICAgCisgICAgICAgIGlmICghKHAgPSBhcmdwWzBdKSB8fCAhKnAp IHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBwID0gZm52YWw7CisgICAg ICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiPEVSUk9S Ok1JU1NJTkdfQVJHOlxcZmNvbnRlbnRzKCk+Iik7CisgICAgICAgICAgICBnb3RvIGZuZW5kOwor ICAgICAgICB9CisgICAgICAgIHAgPSBicnN0cmlwKHApOworICAgICAgICBpZiAoKnAgPT0gQ01E USkgcCsrOworICAgICAgICBpZiAoKGMgPSAqcCkgPT0gJyUnKSB7ICAgICAgICAgIC8qIFNjYWxh ciB2YXJpYWJsZS4gKi8KKyAgICAgICAgICAgIGMgPSAqKytwOyAgICAgICAgICAgICAgICAgICAv KiBHZXQgSUQgY2hhcmFjdGVyLiAqLworICAgICAgICAgICAgcCA9ICIiOyAgICAgICAgICAgICAg ICAgICAgIC8qIEFzc3VtZSBkZWZpbml0aW9uIGlzIGVtcHR5ICovCisgICAgICAgICAgICBpZiAo IWMpIHsgICAgICAgICAgICAgICAgICAgLyogRG91YmxlIHBhcmFub2lhICovCisgICAgICAgICAg ICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAg ICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCI8RVJS T1I6QVJHX0JBRF9WQVJJQUJMRTpcXGZjb250ZW50cygpPiIpOworICAgICAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8 PSAnOScpIHsgLyogRGlnaXQgZm9yIG1hY3JvIGFyZyAqLworICAgICAgICAgICAgICAgIGlmICht YWNsdmwgPCAwKSAgICAgICAgIC8qIERpZ2l0IHZhcmlhYmxlcyBhcmUgZ2xvYmFsICovCisgICAg ICAgICAgICAgICAgICBwID0gZ192YXJbY107ICAgICAgICAgLyogaWYgbm8gbWFjcm8gaXMgYWN0 aXZlICovCisgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3 aXNlICovCisgICAgICAgICAgICAgICAgICBwID0gbV9hcmdbbWFjbHZsXVtjIC0gJzAnXTsgLyog dGhleSdyZSBvbiB0aGUgc3RhY2sgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnKicp IHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgcCA9IChtYWNsdmwgPiAtMSkgPyBt X2xpbmVbbWFjbHZsXSA6IHRvcGxpbmU7CisgICAgICAgICAgICAgICAgaWYgKCFwKSBwID0gIiI7 CisjZWxzZQorICAgICAgICAgICAgICAgIGludCBueCA9IEZOVkFMTDsKKyAgICAgICAgICAgICAg ICBjaGFyICogc3ggPSBmbnZhbDsKKyAgICAgICAgICAgICAgICBwID0gZm52YWw7CisjaWZkZWYg Q09NTUVOVAorICAgICAgICAgICAgICAgIGlmIChjbWRzcmMoKSA9PSAwICYmIHRvcGxpbmUpCisg ICAgICAgICAgICAgICAgICBwID0gdG9wbGluZTsKKyAgICAgICAgICAgICAgICBlbHNlCisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgaWYgKHp6c3RyaW5nKCJcXGZqb2lu KCZfW10seyB9LDEpIiwmc3gsJm54KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVk ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgICAgICAg ICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCI8RVJS T1I6T1ZFUkZMT1c6XFxmY29udGVudHMoKT4iKTsKKwkJICAgIGRlYnVnKEYxMTAsInp6c3RyaW5n IGZjb250ZW50cyhcXCUqKSIscCwwKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXN1cHBl cihjKSkgYyAtPSAoJ2EnLSdBJyk7CisgICAgICAgICAgICAgICAgcCA9IGdfdmFyW2NdOyAgICAg ICAgICAgLyogTGV0dGVyIGZvciBnbG9iYWwgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICghcCkgcCA9ICIiOworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAg ICAgfSBlbHNlIGlmIChjID09ICcmJykgeyAgICAgICAgICAvKiBBcnJheSByZWZlcmVuY2UuICov CisgICAgICAgICAgICBpbnQgdmJpLCBkOworICAgICAgICAgICAgaWYgKGFycmF5bmFtKHAsJnZi aSwmZCkgPCAwKSB7IC8qIEdldCBuYW1lIGFuZCBzdWJzY3JpcHQgKi8KKyAgICAgICAgICAgICAg ICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgICAg ICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIjxFUlJPUjpB UkdfQkFEX0FSUkFZOlxcZmNvbnRlbnRzKCk+Iik7CisgICAgICAgICAgICAgICAgZ290byBmbmVu ZDsKKyAgICAgICAgICAgIH0KKwkgICAgc3Vic2NyaXB0ID0gY2hrYXJyYXkodmJpLGQpOyAvKiBD aGVjayB0aGUgYXJyYXkgKi8KKyAgICAgICAgICAgIGlmIChzdWJzY3JpcHQgPj0gMCkgewkvKiBB cnJheSBpcyBkZWNsYXJlZD8gKi8KKyAgICAgICAgICAgICAgICB2YmkgLT0gQVJSQVlCQVNFOyAg ICAgICAvKiBDb252ZXJ0IG5hbWUgdG8gaW5kZXggKi8KKyAgICAgICAgICAgICAgICBpZiAoYV9k aW1bdmJpXSA+PSBkKSB7ICAvKiBJZiBzdWJzY3JpcHQgaW4gcmFuZ2UgKi8KKyAgICAgICAgICAg ICAgICAgICAgY2hhciAqKmFwOworICAgICAgICAgICAgICAgICAgICBhcCA9IGFfcHRyW3ZiaV07 ICAgIC8qIGdldCBkYXRhIHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwKSB7 ICAgICAgICAgICAvKiBhbmQgaWYgdGhlcmUgaXMgb25lICovCisgICAgICAgICAgICAgICAgICAg ICAgICBwID0gYXBbZF07CS8qIHJldHVybiBpdCAqLworICAgICAgICAgICAgICAgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0gZWxzZSB7CQkJLyogQXJyYXkgbm90IGRlY2xhcmVkIG9yIGVsZW1lbnQgKi8K KyAgICAgICAgICAgICAgICBmbnZhbFswXSA9IE5VTDsJCS8qIG91dCBvZiByYW5nZSAtIHJldHVy biBudWxsIHN0cmluZyAqLworICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsJCS8qIGZkYyAyMDEw LTEyLTMwICovCisgICAgICAgICAgICAgICAgZ290byBmbmVuZDsJCisgICAgICAgICAgICB9Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgcCA9 IGZudmFsOworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgIHNwcmludGYo Zm52YWwsIjxFUlJPUjpBUkdfTk9UX1ZBUklBQkxFOlxcZmNvbnRlbnRzKCk+Iik7CisgICAgICAg ICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgfQorICAgIHAgPSBmbnZhbDsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgcmVzdWx0IHBvaW50ZXIgKi8KKyAgICBmbnZh bFswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHJlc3VsdCA9IGVtcHR5 IHN0cmluZyAqLworCisgICAgZm9yIChpID0gMDsgaSA8IGFyZ247IGkrKykgeyAgICAgICAgLyog TG9vcCB0byBleHBhbmQgZWFjaCBhcmd1bWVudCAqLworICAgICAgICBuID0gTUFYQVJHTEVOOyAg ICAgICAgICAgICAgICAgIC8qIEFsbG93IHBsZW50eSBvZiBzcGFjZSAqLworICAgICAgICBicFtp XSA9IHMgPSBtYWxsb2MobisxKTsgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGlzIGFy Z3VtZW50ICovCisgICAgICAgIGlmIChicFtpXSA9PSBOVUxMKSB7ICAgICAgICAgICAgLyogSGFu ZGxlIGZhaWx1cmUgdG8gZ2V0IHNwYWNlICovCisgICAgICAgICAgICBmYWlsZWQgPSAxOworICAg ICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFM TCwiPEVSUk9SOk1BTExPQ19GQUlMVVJFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAg ICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgICAgIHAgPSBhcmdwW2ldID8gYXJncFtpXSA6 ICIiOyAgICAgLyogUG9pbnQgdG8gdGhpcyBhcmd1bWVudCAqLworCisvKgorICBUcmltIGxlYWRp bmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBmcm9tIHRoZSBvcmlnaW5hbCBhcmd1bWVudCwgYmVmb3Jl CisgIGV2YWx1YXRpb24uICBUaGlzIGNvZGUgbmV3IHRvIGVkaXQgMTg0LiAgRml4ZWQgaW4gZWRp dCAxOTkgdG8gdHJpbQorICBibGFua3MgQkVGT1JFIHN0cmlwcGluZyBicmFjZXMuCisKKyovCisg ICAgICAgIHsKKyAgICAgICAgICAgIGludCB4LCBqOworICAgICAgICAgICAgeCA9IHN0cmxlbihw KTsKKyAgICAgICAgICAgIGogPSB4IC0gMTsgICAgICAgICAgICAgICAgICAvKiBUcmltIHRyYWls aW5nIHdoaXRlc3BhY2UgKi8KKyAgICAgICAgICAgIHdoaWxlIChqID4gMCAmJiAoKihwICsgaikg PT0gU1AgfHwgKihwICsgaikgPT0gSFQpKQorICAgICAgICAgICAgICAqKHAgKyBqLS0pID0gTlVM OworICAgICAgICAgICAgd2hpbGUgKCpwID09IFNQIHx8ICpwID09IEhUKSAvKiBTdHJpcCBsZWFk aW5nIHdoaXRlc3BhY2UgKi8KKyAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgeCA9IHN0 cmxlbihwKTsKKyAgICAgICAgICAgIGlmICgqcCA9PSAneycgJiYgKihwK3gtMSkgPT0gJ30nKSB7 IC8qIE5PVyBzdHJpcCBicmFjZXMgKi8KKyAgICAgICAgICAgICAgICBwW3gtMV0gPSBOVUw7Cisg ICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgIHggLT0gMjsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorCisvKiBOb3cgZXZhbHVhdGUgdGhlIGFyZ3VtZW50ICovCisKKyAgICAg ICAgZGVidWcoRjExMSwiZm5ldmFsIGNhbGxpbmcgenpzdHJpbmciLHAsbik7CisgICAgICAgIHQg PSB6enN0cmluZyhwLCZzLCZuKTsgICAgICAgICAgLyogRXhwYW5kIGFyZyBpbnRvIG5ldyBzcGFj ZSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJmbmV2YWwgenpzdHJpbmciLCIiLHQpOworICAgICAg ICBkZWJ1ZyhGMTAxLCJmbmV2YWwgenpzdHJpbmciLCIiLG4pOworICAgICAgICBpZiAodCA8IDAp IHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImZuZXZhbCB6enN0cmluZyBmYWlscywgYXJnIiwi IixpKTsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykg eworICAgICAgICAgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICAgICAgICBja21ha21z ZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19U T09fTE9ORzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICI8RVJST1I6QVJHX0VWQUxfRkFJTFVSRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAgICAgICBk ZWJ1ZyhGMTExLCJmbmV2YWwgYXJnIixicFtpXSxpKTsKKyAgICB9CisKKyNpZmRlZiBERUJVRwor ICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgaW50IGo7CisgICAgICAgIGZvciAoaiA9IDA7IGog PCBhcmduOyBqKyspIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZuZXZhbCBhcmcgcG9zdCBl dmFsIixhcmdwW2pdLGopOworICAgICAgICAgICAgZGVidWcoRjExMSwiZm5ldmFsIGV2YWx1YXRl ZCBhcmciLGJwW2pdLGopOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisg ICAgeworCS8qIEFkanVzdCBhcmduIGZvciBlbXB0eSB0cmFpbGluZyBhcmd1bWVudHMuICovCisJ LyogRm9yIGV4YW1wbGUgd2hlbiBhbiBhcmcgaXMgYSB2YXJpYWJsZSBuYW1lIGJ1dCB0aGUgKi8K KwkvKiB2YXJpYWJsZSBoYXMgbm8gdmFsdWUuICAgSnVseSAyMDA2LiAqLworCWludCBqLCBvbGQ7 IGNoYXIgKnA7CisJb2xkID0gYXJnbjsKKwlmb3IgKGogPSBhcmduIC0gMTsgaiA+PSAwOyBqLS0p IHsKKwkgICAgcCA9IGJwW2pdOworCSAgICBpZiAoIXApCisJICAgICAgYXJnbi0tOworCSAgICBl bHNlIGlmICghKnApCisJICAgICAgYXJnbi0tOworCSAgICBlbHNlCisJICAgICAgYnJlYWs7CisJ fQorI2lmZGVmIERFQlVHCisJaWYgKGFyZ24gIT0gb2xkKQorCSAgZGVidWcoRjEwMSwiZm5ldmFs IGFkanVzdGVkIGFyZ24iLCIiLGFyZ24pOworI2VuZGlmCS8qIERFQlVHICovCisgICAgfQkKKwor LyoKKyAgRnJvbSB0aGlzIHBvaW50IG9uLCBicFswLi5hcmduLTFdIGFyZSBub3QgTlVMTCBhbmQg YWxsIG11c3QgYmUgZnJlZWQKKyAgYmVmb3JlIHJldHVybmluZy4KKyovCisgICAgaWYgKGFyZ24g PCAxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQ2F0Y2ggcmVxdWlyZWQgYXJncyBtaXNzaW5n ICovCisgICAgICAgIHN3aXRjaCAoY3gpIHsKKyAgICAgICAgICBjYXNlIEZOX0RFRjoKKyAgICAg ICAgICBjYXNlIEZOX0VWQToKKyAgICAgICAgICBjYXNlIEZOX0VYRToKKyAgICAgICAgICBjYXNl IEZOX0NIUjoKKyAgICAgICAgICBjYXNlIEZOX0NPRDoKKyAgICAgICAgICBjYXNlIEZOX01BWDoK KyAgICAgICAgICBjYXNlIEZOX01JTjoKKyAgICAgICAgICBjYXNlIEZOX01PRDoKKyAgICAgICAg ICBjYXNlIEZOX0ZEOgorICAgICAgICAgIGNhc2UgRk5fRlM6CisgICAgICAgICAgY2FzZSBGTl9U T0Q6CisgICAgICAgICAgY2FzZSBGTl9GRk46CisgICAgICAgICAgY2FzZSBGTl9CU046CisgICAg ICAgICAgY2FzZSBGTl9SQVc6CisgICAgICAgICAgY2FzZSBGTl9DTUQ6CisgICAgICAgICAgY2Fz ZSBGTl8ySEVYOgorICAgICAgICAgIGNhc2UgRk5fMk9DVDoKKyAgICAgICAgICBjYXNlIEZOX0RO QU06CisjaWZkZWYgRk5fRVJSTVNHCisgICAgICAgICAgY2FzZSBGTl9FUlJNU0c6CisjZW5kaWYg LyogRk5fRVJSTVNHICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAgICAgICBjYXNlIEZOX0tS Ql9USzoKKyAgICAgICAgICBjYXNlIEZOX0tSQl9OWDoKKyAgICAgICAgICBjYXNlIEZOX0tSQl9J VjoKKyAgICAgICAgICBjYXNlIEZOX0tSQl9UVDoKKyAgICAgICAgICBjYXNlIEZOX0tSQl9GRzoK KyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgICAgICAgIGNhc2UgRk5fTUpEMjoKKyAgICAg ICAgICBjYXNlIEZOX04yVElNOgorICAgICAgICAgIGNhc2UgRk5fRElNOgorICAgICAgICAgIGNh c2UgRk5fREFURUo6CisgICAgICAgICAgY2FzZSBGTl9QTkNWVDoKKyAgICAgICAgICBjYXNlIEZO X1BFUk06CisgICAgICAgICAgY2FzZSBGTl9BTE9PSzoKKyAgICAgICAgICBjYXNlIEZOX1RMT09L OgorICAgICAgICAgIGNhc2UgRk5fQUJTOgorICAgICAgICAgIGNhc2UgRk5fQUFEVU1QOgorICAg ICAgICAgIGNhc2UgRk5fSk9JTjoKKyNpZmRlZiBDS0ZMT0FUCisgICAgICAgICAgY2FzZSBGTl9G UEFCUzoKKyAgICAgICAgICBjYXNlIEZOX0ZQRVhQOgorICAgICAgICAgIGNhc2UgRk5fRlBMT0c6 CisgICAgICAgICAgY2FzZSBGTl9GUExOOgorICAgICAgICAgIGNhc2UgRk5fRlBNT0Q6CisgICAg ICAgICAgY2FzZSBGTl9GUFNRUjoKKyAgICAgICAgICBjYXNlIEZOX0ZQQUREOgorICAgICAgICAg IGNhc2UgRk5fRlBESVY6CisgICAgICAgICAgY2FzZSBGTl9GUE1VTDoKKyAgICAgICAgICBjYXNl IEZOX0ZQUE9XOgorICAgICAgICAgIGNhc2UgRk5fRlBTVUI6CisgICAgICAgICAgY2FzZSBGTl9G UElOVDoKKyAgICAgICAgICBjYXNlIEZOX0ZQUk9VOgorICAgICAgICAgIGNhc2UgRk5fRlBTSU46 CisgICAgICAgICAgY2FzZSBGTl9GUENPUzoKKyAgICAgICAgICBjYXNlIEZOX0ZQVEFOOgorI2Vu ZGlmIC8qIENLRkxPQVQgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgICBjYXNlIEZOX0hT VEFERDoKKyAgICAgICAgICBjYXNlIEZOX0hTVE5BTToKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8K KyAgICAgICAgICBjYXNlIEZOX0RFTFNFQzoKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgY2Fz ZSBGTl9LV1ZBTDoKKyAgICAgICAgICBjYXNlIEZOX1NMRUVQOgorICAgICAgICAgIGNhc2UgRk5f TVNMRUVQOgorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBOVAorICAgICAgICAgIGNhc2Ug Rk5fU05BTUU6CisgICAgICAgICAgY2FzZSBGTl9MTkFNRToKKyNlbmRpZiAvKiBOVCAqLworICAg ICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAg IGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJP UjpNSVNTSU5HX0FSRzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgZ290byBmbmVu ZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXNldCB0aGVzZSBhZ2Fpbi4gKi8KKyAgICBmbnZhbFswXSA9IE5VTDsKKworICAg IHN3aXRjaCAoY3gpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIERvIGZ1bmN0aW9uIG9uIGV4 cGFuZGVkIGFyZ3MuICovCisjaWZkZWYgVENQU09DS0VUCisgICAgICBjYXNlIEZOX0hTVEFERDoK KyAgICAgICAgcCA9IGNrYWRkcjJuYW1lKGJwWzBdKTsKKyAgICAgICAgZ290byBmbmVuZDsKKyAg ICAgIGNhc2UgRk5fSFNUTkFNOgorICAgICAgICBwID0gY2tuYW1lMmFkZHIoYnBbMF0pOworICAg ICAgICBnb3RvIGZuZW5kOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisgICAgICBjYXNlIEZO X0RFRjogICAgICAgICAgICAgICAgICAgICAgLyogXGZkZWZpbml0aW9uKGFyZzEpICovCisgICAg ICAgIGsgPSBpc2FhcnJheShicFswXSkgPworCSAgICBteHhsb29rKG1hY3RhYixicFswXSxubWFj KSA6CisJCW14bG9vayhtYWN0YWIsYnBbMF0sbm1hYyk7CisgICAgICAgIHAgPSAoayA+IC0xKSA/ IG1hY3RhYltrXS5tdmFsIDogIiI7CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2Ug Rk5fRVZBOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmV2YWx1YXRlKGFyZzEpICovCisgICAg ICAgIHAgPSAqKGJwWzBdKSA/IGV2YWx4KGJwWzBdKSA6ICIiOworICAgICAgICBpZiAoISpwICYm IGZuZGlhZ3MpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBwID0gZm52 YWw7CisgICAgICAgICAgICBldmFsZXJyKGZuKTsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGZu ZW5kOworCisgICAgICBjYXNlIEZOX0VYRTogICAgICAgICAgICAgICAgICAgICAgLyogXGZleGVj dXRlKGFyZzEpICovCisgICAgICAgIGogPSAoaW50KXN0cmxlbihzID0gYnBbMF0pOyAgICAgLyog TGVuZ3RoIG9mIG1hY3JvIGludm9jYXRpb24gKi8KKyAgICAgICAgcCA9ICIiOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHJldHVybiB2YWx1ZSB0byBudWxsICovCisgICAg ICAgIGlmIChqKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlcmUgaXMgYSBtYWNy byB0byBleGVjdXRlICovCisgICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApIHMrKyxqLS07ICAg Lyogc3RyaXAgbGVhZGluZyBzcGFjZXMgKi8KKyAgICAgICAgICAgIHAgPSBzOyAgICAgICAgICAg ICAgICAgICAgICAvKiByZW1lbWJlciBiZWdpbm5pbmcgb2YgbWFjcm8gbmFtZSAqLworICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgeyAgIC8qIGZpbmQgZW5kIG9mIG1hY3JvIG5h bWUgKi8KKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gU1ApCisgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoKnMgPT0gU1ApICAgICAgIHsgICAgICAgLyogaWYgdGhlcmUgd2FzIGEgc3BhY2UgYWZ0ZXIg Ki8KKyAgICAgICAgICAgICAgICAqcysrID0gTlVMOyAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUg dGhlIG1hY3JvIG5hbWUgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKnMgPT0gU1ApIHMrKzsg ICAvKiBza2lwIHBhc3QgYW55IGV4dHJhIHNwYWNlcyAqLworICAgICAgICAgICAgfSBlbHNlCisg ICAgICAgICAgICAgIHMgPSAiIjsgICAgICAgICAgICAgICAgICAgLyogbWF5YmUgdGhlcmUgYXJl IG5vIGFyZ3VtZW50cyAqLworICAgICAgICAgICAgaWYgKHAgJiYgKnApIHsKKyAgICAgICAgICAg ICAgICBrID0gbWxvb2sobWFjdGFiLHAsbm1hYyk7IC8qIExvb2sgdXAgdGhlIG1hY3JvIG5hbWUg Ki8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmZXhlYyBtbG9vayIscCxrKTsKKyAgICAg ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBrID0gLTE7CisgICAgICAgICAgICBpZiAoayA8 IDApIHsKKyAgICAgICAgICAgICAgICBjaGFyICogcDIgPSBwOworICAgICAgICAgICAgICAgIGZh aWxlZCA9IDE7CisgICAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgICAgIGlm IChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGZudmFsLEZOVkFMTCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOk5PX1NVQ0hfTUFDUk86XFxmIixmbiwi KCIscDIsIik+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAg ICAgICAgfQorLyoKKyAgVGhpcyBpcyBqdXN0IGEgV0VFIGJpdCBkYW5nZXJvdXMgYmVjYXVzZSB3 ZSBhcmUgY29weWluZyB1cCB0byA5IGFyZ3VtZW50cworICBpbnRvIHRoZSBzcGFjZSByZXNlcnZl ZCBmb3Igb25lLiAgSXQgd29uJ3Qgb3ZlcnJ1biB0aGUgYnVmZmVyLCBidXQgaWYgdGhlcmUKKyAg YXJlIGxvdHMgb2YgbG9uZyBhcmd1bWVudHMgd2UgbWlnaHQgbG9zZSBzb21lLiAgVGhlIG90aGVy IHByb2JsZW0gaXMgdGhhdCBpZgorICB0aGUgbWFjcm8gaGFzIG1vcmUgdGhhbiAzIGFyZ3VtZW50 cywgdGhlIDR0aCB0aHJvdWdoIGxhc3QgYXJlIGFsbAorICBjb25jYXRlbmF0ZWQgb250byB0aGUg dGhpcmQuICAoVGhlIHdvcmthcm91bmQgaXMgdG8gdXNlIHNwYWNlcyByYXRoZXIgdGhhbgorICBj b21tYXMgdG8gc2VwYXJhdGUgdGhlbS4pICBMZWF2aW5nIGl0IGxpa2UgdGhpcyB0byBhdm9pZCBo YXZpbmcgdG8gYWxsb2NhdGUKKyAgdG9ucyBtb3JlIGJ1ZmZlcnMuCisqLworICAgICAgICAgICAg aWYgKGFyZ24gPiAxKSB7ICAgICAgICAgICAgIC8qIENvbW1hcyB1c2VkIGluc3RlYWQgb2Ygc3Bh Y2VzICovCisgICAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgICAgY2hhciAqcCA9 IGJwWzBdOyAgICAgICAgLyogUmV1c2UgdGhpcyBzcGFjZSAqLworICAgICAgICAgICAgICAgICpw ID0gTlVMOyAgICAgICAgICAgICAgIC8qIE1ha2UgaW50byBkb2RvKCkgYXJnIGxpc3QgKi8KKyAg ICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJnbjsgaSsrKSB7CisgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdChwLGJwW2ldLE1BWEFSR0xFTik7CisgICAgICAgICAgICAgICAgICAg IGNrc3RybmNhdChwLCIgIixNQVhBUkdMRU4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBzID0gYnBbMF07ICAgICAgICAgICAgICAvKiBQb2ludCB0byBuZXcgbGlzdCAqLwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcCA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8q IEluaXRpYWxpemUgcmV0dXJuIHZhbHVlICovCisgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAg ICAgICAgICAgICAgLyogSWYgbWFjcm8gZm91bmQgaW4gdGFibGUgKi8KKyAgICAgICAgICAgICAg ICAvKiBHbyBzZXQgaXQgdXAgKGxpa2UgRE8gY21kKSAqLworICAgICAgICAgICAgICAgIGlmICgo aiA9IGRvZG8oayxzLGNtZHN0a1tjbWRsdmxdLmNjZmxncykpID4gMCkgeworICAgICAgICAgICAg ICAgICAgICBpZiAoY21wdXNoKCkgPiAtMSkgeyAvKiBQdXNoIGNvbW1hbmQgcGFyc2VyIHN0YXRl ICovCisgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IGlmYzsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGludCBpZmNzYXYgPSBpZmM7IC8qIFB1c2ggSUYgY29uZGl0aW9uIG9uIHN0 YWNrICovCisgICAgICAgICAgICAgICAgICAgICAgICBrID0gcGFyc2VyKDEpOyAgLyogQ2FsbCBw YXJzZXIgdG8gZXhlY3V0ZSB0aGUgbWFjcm8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNt cG9wKCk7ICAgICAgICAvKiBQb3AgY29tbWFuZCBwYXJzZXIgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmYyA9IGlmY3NhdjsgICAvKiBSZXN0b3JlIElGIGNvbmRpdGlvbiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkgeyAgIC8qIE5vIGVycm9ycywgaWdub3JlIGFj dGlvbiBjbWRzLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBtcnZhbFttYWNs dmwrMV07IC8qIElmIE9LLCBzZXQgcmV0dXJuIHZhbHVlLiAqLworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChwID09IE5VTEwpIHAgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAvKiBDYW4ndCBwdXNo IGFueSBtb3JlICovCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJ6enN0cmlu ZyBmbmV2YWwgZmV4ZWMgZmFpbHVyZSIsIiIsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIlxuP1xcZmV4ZWMoKSB0b28gZGVlcGx5IG5lc3RlZFxuIik7CisgICAgICAgICAgICAg ICAgICAgICAgICB3aGlsZSAoY21wb3AoKSA+IC0xKSA7CisgICAgICAgICAgICAgICAgICAgICAg ICBwID0gIiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwienpzdHJpbmcgZm5ldmFs IGZleGVjdXRlIGZpbmFsIHAiLHAsMCk7CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyNpZmRlZiBS RUNVUlNJVkUKKyAgICAgIGNhc2UgRk5fUkRJUjogICAgICAgICAgICAgICAgICAgICAvKiBcZnJk aXIuLigpIC0gUmVjdXJzaXZlIGRpciBjb3VudCAqLworICAgICAgY2FzZSBGTl9SRklMOiAgICAg ICAgICAgICAgICAgICAgIC8qIFxmcmZpbGVzKCkgLSBSZWN1cnNpdmUgZmlsZSBjb3VudCAqLwor ICAgICAgICAvKiByZWN1cnNpdmUgPSAyOyAqLyAgICAgICAgICAgIC8qIGZhbGwgdGhydS4uLiAq LworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgICAgY2FzZSBGTl9GQzogICAgICAgICAgICAg ICAgICAgICAgIC8qIFxmZmlsZXMoKSAtIEZpbGUgY291bnQuICovCisgICAgICBjYXNlIEZOX0RJ UjogeyAgICAgICAgICAgICAgICAgICAgLyogXGZmZGlyLigpIC0gRGlyZWN0b3J5IGNvdW50LiAq LworICAgICAgICAgIGNoYXIgYWJ1ZlsxNl0sICpzOworICAgICAgICAgIGNoYXIgKiogYXAgPSBO VUxMOworICAgICAgICAgIGludCB4LCB4ZmxhZ3MgPSAwOworICAgICAgICAgIGlmIChtYXRjaGRv dCkKKyAgICAgICAgICAgIHhmbGFncyB8PSBaWF9NQVRDSERPVDsKKyAgICAgICAgICBpZiAoY3gg PT0gRk5fUkRJUiB8fCBjeCA9PSBGTl9SRklMKSB7CisgICAgICAgICAgICAgIHhmbGFncyB8PSBa WF9SRUNVUlNFOworI2lmZGVmIENLU1lNTElOSworICAgICAgICAgICAgICAvKiBSZWN1cnNpdmUg LSBkb24ndCBmb2xsb3cgc3ltbGlua3MgKi8KKyAgICAgICAgICAgICAgeGZsYWdzIHw9IFpYX05P TElOS1M7CisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisgICAgICAgICAgfQorICAgICAgICAgIGZh aWxlZCA9IDA7CisgICAgICAgICAgaWYgKGFyZ24gPCAxKSB7CisgICAgICAgICAgICAgIHAgPSAi MCI7CisgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgfQorICAgICAgICAgIGlm IChjeCA9PSBGTl9ESVIgfHwgY3ggPT0gRk5fUkRJUikgeyAvKiBPbmx5IGxpc3QgZGlyZWN0b3Jp ZXMgKi8KKwkgICAgICBkZWJ1ZyhGMTAwLCJGTl9ESVIgb3IgRk5fUkRJUiIsIiIsMCk7CisgICAg ICAgICAgICAgIHhmbGFncyB8PSBaWF9ESVJPTkxZOworI2lmZGVmIE9TMgorICAgICAgICAgICAg ICB6eHBuID0gMTsgICAgICAgICAgICAgICAgIC8qIFVzZSB0aGUgYWx0ZXJuYXRlIGxpc3QgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAvKiBMaXN0IG9ubHkgZmlsZXMgKi8KKwkgICAgICBkZWJ1ZyhGMTAwLCJOb3QgRk5fRElSIG9y IEZOX1JESVIiLCIiLDApOworICAgICAgICAgICAgICB4ZmxhZ3MgfD0gWlhfRklMT05MWTsKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgICAgenhwbiA9IDE7ICAgICAgICAgICAgICAgICAvKiBVc2Ug dGhlIGFsdGVybmF0ZSBsaXN0ICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgfQorICAg ICAgICAgIGlmICgqKGJwWzBdKSkgeworICAgICAgICAgICAgICBrID0gbnp4cGFuZChicFswXSx4 ZmxhZ3MpOworICAgICAgICAgICAgICBpZiAoayA8IDApIGsgPSAwOworICAgICAgICAgICAgICBz cHJpbnRmKGZudmFsLCIlZCIsayk7ICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgcCA9IGZu dmFsOworICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcCA9ICIwIjsKKworICAgICAgICAg IGlmIChhcmduID4gMSkgeyAgICAgICAgICAgICAgIC8qIEFzc2lnbiBsaXN0IHRvIGFycmF5ICov CisgICAgICAgICAgICAgIGZudmFsWzBdID0gTlVMOyAgICAgICAgICAgLyogSW5pdGlhbCByZXR1 cm4gdmFsdWUgKi8KKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnBbMV0sMTYpOyAvKiBH ZXQgYXJyYXkgcmVmZXJlbmNlICovCisgICAgICAgICAgICAgIHMgPSBhYnVmOworICAgICAgICAg ICAgICBpZiAoKnMgPT0gQ01EUSkgcysrOworICAgICAgICAgICAgICBmYWlsZWQgPSAxOyAgICAg ICAgICAgICAgIC8qIEFzc3VtZSBpdCdzIGJhZCAqLworICAgICAgICAgICAgICBwID0gZm52YWw7 ICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIHJlc3VsdCAqLworICAgICAgICAgICAgICBpZiAo Zm5kaWFncykgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICov CisgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICI8RVJST1I6QVJHX0JBRF9BUlJBWTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAg ICAgICAgICAgICBpZiAoc1swXSAhPSAnJicpICAgICAgICAgIC8qICJBZGRyZXNzIiBvZiBhcnJh eSAqLworICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgIGlmIChzWzJd KQorICAgICAgICAgICAgICAgIGlmIChzWzJdICE9ICdbJyB8fCBzWzNdICE9ICddJykKKyAgICAg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgIGlmIChzWzFdID49IDY0ICYm IHNbMV0gPCA5MSkgLyogQ29udmVydCB1cHBlciB0byBsb3dlciAqLworICAgICAgICAgICAgICAg IHNbMV0gKz0gMzI7CisgICAgICAgICAgICAgIGlmICgoeCA9IGRjbGFycmF5KHNbMV0saykpIDwg MCkgLyogRmlsZSBsaXN0IHBsdXMgY291bnQgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZuZW5k OworICAgICAgICAgICAgICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgIC8qIFVuc2V0IGZhaWx1 cmUgZmxhZyAqLworICAgICAgICAgICAgICBhcCA9IGFfcHRyW3hdOyAgICAgICAgICAgIC8qIFBv aW50IHRvIGFycmF5IHdlIGp1c3QgZGVjbGFyZWQgKi8KKyAgICAgICAgICAgICAgc3ByaW50Zihm bnZhbCwiJWQiLGspOyAgICAvKiBTQUZFICovCisgICAgICAgICAgfQorI2lmZGVmIE9TMgorICAg ICAgICAgIGlmIChhcCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBtYWtpbmcgYW4g YXJyYXkgKi8KKyAgICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICAgIGNoYXIgdG1wWzE2 XTsKKyAgICAgICAgICAgICAgYXBbMF0gPSBOVUxMOyAgICAgICAgICAgICAvKiBDb250YWluaW5n IG51bWJlciBvZiBmaWxlcyAgICAqLworICAgICAgICAgICAgICBtYWtlc3RyKCYoYXBbMF0pLGNr aXRvYShrKSk7CisKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcCxmbnZhbCwxNik7ICAvKiBT YXZlIHJldHVybiB2YWx1ZSAqLworCisgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gazsg aSsrKSB7IC8qIEZpbGwgaXQgKi8KKyAgICAgICAgICAgICAgICAgIGFwW2ldID0gTlVMTDsKKyAg ICAgICAgICAgICAgICAgIHpuZXh0KGZudmFsKTsgICAgICAgICAvKiBOZXh0IGZpbGVuYW1lICov CisgICAgICAgICAgICAgICAgICBpZiAoISpmbnZhbCkgICAgICAgICAgLyogTm8gbW9yZSwgZG9u ZSAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIEluIGNhc2Ug YSBwcmVtYXR1cmUgZW5kICovCisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoYXBbaV0pLGZu dmFsKTsKKyAgICAgICAgICAgICAgfQorI2lmZGVmIFpYUkVXSU5ECisgICAgICAgICAgICAgIGsg PSB6eHJld2luZCgpOyAgICAgICAgICAgLyogUmVzZXQgdGhlIGZpbGUgZXhwYW5zaW9uICovCisj ZWxzZQorICAgICAgICAgICAgICBrID0gbnp4cGFuZChicFswXSx4ZmxhZ3MpOworI2VuZGlmIC8q IFpYUkVXSU5EICovCisgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCx0bXAsRk5WQUxMKTsg LyogUmVzdG9yZSByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgICB9CisjZWxzZSAvKiBPUzIgKi8K KyAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIGNvcGllcyBv ZiB0aGUgbGlzdCAqLworICAgICAgICAgICAgICBpbnQgaTsgY2hhciB0bXBbMTZdOworICAgICAg ICAgICAgICBpZiAoZmxpc3QpIHsgICAgICAgICAgICAgIC8qIEZyZWUgb2xkIGZpbGUgbGlzdCwg aWYgYW55ICovCisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBmbGlzdFtpXTsgaSsrKSB7 IC8qIGFuZCBlYWNoIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgIGZyZWUoZmxpc3Rb aV0pOworICAgICAgICAgICAgICAgICAgICAgIGZsaXN0W2ldID0gTlVMTDsKKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGZyZWUoKGNoYXIgKilmbGlzdCk7CisgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgY2tzdHJuY3B5KHRtcCxmbnZhbCwxNik7ICAvKiBTYXZl IG91ciByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgICAgICAgZmxpc3QgPSAoY2hhciAqKikgbWFs bG9jKChrKzEpICogc2l6ZW9mKGNoYXIgKikpOyAvKiBOZXcgYXJyYXkgKi8KKyAgICAgICAgICAg ICAgaWYgKGZsaXN0KSB7CisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGs7IGkr KykgeyAvKiBGaWxsIGl0ICovCisgICAgICAgICAgICAgICAgICAgICAgZmxpc3RbaV0gPSBOVUxM OworICAgICAgICAgICAgICAgICAgICAgIHpuZXh0KGZudmFsKTsgICAgIC8qIE5leHQgZmlsZW5h bWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoISpmbnZhbCkgICAgICAvKiBObyBtb3Jl LCBkb25lICovCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCYoZmxpc3RbaV0pLGZudmFsKTsKKyAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgIGlmIChhcCkgeyAgICAgICAgICAgICAvKiBJZiBhcnJheSBwb2lu dGVyIGdpdmVuICovCisgICAgICAgICAgICAgICAgICAgICAgYXBbMF0gPSBOVUxMOworICAgICAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJihhcFswXSksY2tpdG9hKGspKTsKKyAgICAgICAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7IC8qIENvcHkgZmlsZSBsaXN0IHRv IGFycmF5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFwW2krMV0gPSBOVUxMOworICAg ICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoYXBbaSsxXSksZmxpc3RbaV0pOworICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsdG1wLEZOVkFMTCk7IC8qIFJlc3RvcmUg cmV0dXJuIHZhbHVlICovCisgICAgICAgICAgICAgIGZsaXN0biA9IDA7ICAgICAgICAgICAgICAg LyogUmVzZXQgZ2xvYmFsIGxpc3QgcG9pbnRlciAqLworICAgICAgICAgIH0KKyNlbmRpZiAvKiBP UzIgKi8KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICAgICAgICByZWN1cnNpdmUgPSByc2F2ZTsKKyNl bmRpZiAvKiBSRUNVUlNJVkUgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICB6eHBuID0genNhdmU7 CisjZW5kaWYgLyogT1MyICovCisgICAgICB9CisgICAgICBnb3RvIGZuZW5kOworCisgICAgICBj YXNlIEZOX0ZJTDogICAgICAgICAgICAgICAgICAgICAgLyogXGZuZXh0ZmlsZSgpIC0gTmV4dCBm aWxlIGluIGxpc3QuICovCisgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgICAg LyogKG5vIGFyZ3MpICovCisgICAgICAgICpwID0gTlVMOworI2lmZGVmIE9TMgorICAgICAgICB6 eHBuID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgLSB1c2UgdGhlIGFsdGVybmF0 ZSBsaXN0ICovCisgICAgICAgIHpuZXh0KHApOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ2Fs bCBzeXN0ZW0tZGVwZW5kZW50IGZ1bmN0aW9uICovCisgICAgICAgIHp4cG4gPSB6c2F2ZTsgICAg ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBsaXN0ICovCisjZWxzZQorICAgICAg ICBpZiAoZmxpc3QpICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVycywgdXNlIG91ciBvd24g bGlzdC4gKi8KKyAgICAgICAgICBpZiAoZmxpc3RbZmxpc3RuXSkKKwkgICAgcCA9IGZsaXN0W2Zs aXN0bisrXTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgZ290byBmbmVuZDsKKworICAgIH0g LyogQnJlYWsgdXAgYmlnIHN3aXRjaC4uLiAqLworCisgICAgc3dpdGNoIChjeCkgeworICAgICAg Y2FzZSBGTl9JTkQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmaW5kZXgoczEsczIsc3RhcnQs b2NjdXJyZW5jZSkgKi8KKyAgICAgIGNhc2UgRk5fUklYOiAgICAgICAgICAgICAgICAgICAgICAv KiBcZnJpbmRleChzMSxzMixzdGFydCxvY2N1cnJlbmNlKSAqLworICAgICAgY2FzZSBGTl9TRUFS Q0g6ICAgICAgICAgICAgICAgICAgIC8qIFxmc2VhcmNoKHBhdCxzdHJpbmcsc3RhcnQsb2NjKSAq LworICAgICAgY2FzZSBGTl9SU0VBUkNIOgkJCS8qIFxmcnNlYXJjaChwYXQsc3RyaW5nLHN0YXJ0 LG9jYykgKi8KKyAgICAgIGNhc2UgRk5fQ09VTlQ6IHsJCQkvKiBcZmNvdW50KHMxLHMyLHN0YXJ0 KSAqLworCWludCBpID0gMCwgcmlnaHQgPSAwLCBzZWFyY2ggPSAwLCBjb3VudCA9IDA7CisJaW50 IGRlc2lyZWQgPSAxOworICAgICAgICByaWdodCA9IChjeCA9PSBGTl9SSVggfHwgY3ggPT0gRk5f UlNFQVJDSCk7CisgICAgICAgIHNlYXJjaCA9IChjeCA9PSBGTl9TRUFSQ0ggfHwgY3ggPT0gRk5f UlNFQVJDSCk7CisJY291bnQgPSAoY3ggPT0gRk5fQ09VTlQpOworICAgICAgICBwID0gIjAiOwor ICAgICAgICBpZiAoYXJnbiA+IDEpIHsgICAgICAgICAgICAgICAgIC8qIE9ubHkgd29ya3MgaWYg d2UgaGF2ZSAyIG9yIDMgYXJncyAqLworICAgICAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAg ICAgICAgIGNoYXIgKiBwYXQgPSBOVUxMOworICAgICAgICAgICAgbGVuMSA9IChpbnQpc3RybGVu KHBhdCA9IGJwWzBdKTsgLyogbGVuZ3RoIG9mIHN0cmluZyB0byBsb29rIGZvciAqLworICAgICAg ICAgICAgbGVuMiA9IChpbnQpc3RybGVuKHMgPSBicFsxXSk7IC8qIGxlbmd0aCBvZiBzdHJpbmcg dG8gbG9vayBpbiAqLworICAgICAgICAgICAgaWYgKGxlbjEgPCAxIHx8IGxlbjIgPCAxKSAgIC8q IFdhdGNoIG91dCBmb3IgZW1wdHkgc3RyaW5ncyAqLworICAgICAgICAgICAgICBnb3RvIGZuZW5k OworICAgICAgICAgICAgc3RhcnQgPSByaWdodCA/IC0xIDogMDsgICAgIC8qIERlZmF1bHQgc3Rh cnRpbmcgcG9zaXRpb24gKi8KKyAgICAgICAgICAgIGlmIChhcmduID4gMikgeworICAgICAgICAg ICAgICAgIHZhbDEgPSAqKGJwWzJdKSA/IGV2YWx4KGJwWzJdKSA6ICIxIjsKKwkJaWYgKGFyZ24g PiAzKSB7CisJCSAgICB2YWwyID0gKihicFszXSkgPyBldmFseChicFszXSkgOiAiMSI7CisJCSAg ICBpZiAoY2hrbnVtKHZhbDIpKSBkZXNpcmVkID0gYXRvaSh2YWwyKTsKKwkJICAgIGlmIChkZXNp cmVkICogbGVuMSA+IGxlbjIpIGdvdG8gZm5lbmQ7CisJCX0KKyAgICAgICAgICAgICAgICBpZiAo Y2hrbnVtKHZhbDEpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB0OworICAgICAgICAgICAg ICAgICAgICB0ID0gYXRvaSh2YWwxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2gp IHsgICAgICAvKiBJbmRleCBvciBSaW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGog PSBsZW4yIC0gbGVuMTsgLyogTGVuZ3RoIGRpZmZlcmVuY2UgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIHQtLTsgICAgICAgICAgICAgLyogQ29udmVydCBwb3NpdGlvbiB0byAwLWJhc2VkICov CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8IDApIHQgPSAwOworICAgICAgICAgICAg ICAgICAgICAgICAgc3RhcnQgPSB0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyaWdo dCAmJiBzdGFydCA8IDApIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsg ICAgICAgICAgICAvKiBTZWFyY2ggb3IgUnNlYXJjaCAqLworICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHg7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8IDApIHQgPSAwOworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7ICAgIC8qIFJpZ2h0IHRvIGxlZnQgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+IGxlbjIpIHQgPSBsZW4yOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGVuMiAtIHQgLSAxOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IDApCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBsZW4y IC0gdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW3hdID0gTlVMOworICAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgIC8qIExlZnQgdG8gcmlnaHQgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHQgLSAxOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoc3RhcnQgPj0gbGVuMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmYWls ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBldmFsZXJyKGZuKTsKKyAgICAgICAgICAgICAg ICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwkgICAgaWYgKGNvdW50KSB7CQkvKiBcZmNvdW50 KCkgKi8KKwkJaW50IGo7CisJCWZvciAoaSA9IDA7IHN0YXJ0IDwgbGVuMjsgaSsrKSB7CisJCSAg ICBqID0gY2tpbmRleChwYXQsYnBbMV0sc3RhcnQsMCxpbnBjYXNbY21kbHZsXSk7CisJCSAgICBp ZiAoaiA9PSAwKSBicmVhazsKKwkJICAgIHN0YXJ0ID0gajsKKwkJfQorCisJICAgIH0gZWxzZSBp ZiAoc2VhcmNoKSB7CS8qIFxmc2VhcmNoKCkgb3IgXGZyc2VhcmNoKCkgKi8KKworICAgICAgICAg ICAgICAgIGlmIChyaWdodCAmJiBwYXRbMF0gPT0gJ14nKSB7CisgICAgICAgICAgICAgICAgICAg IHJpZ2h0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAwOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHsJCS8qIEZyb20gcmlnaHQgKi8KKwkJ ICAgIGludCBrLCBqID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkKKwkJ ICAgICAgc3RhcnQgPSBsZW4yIC0gMTsKKwkJICAgIGkgPSAwOworCQkgICAgd2hpbGUgKHN0YXJ0 ID49IDAgJiYgaiA8PSBkZXNpcmVkKSB7CisJCQlmb3IgKGkgPSBzdGFydDsKKwkJCSAgICAgKGkg Pj0gMCkgJiYgCisJCQkJICEoayA9IGNrbWF0Y2gocGF0LHMraSxpbnBjYXNbY21kbHZsXSwxKzQp KTsKKwkJCSAgICAgaS0tKSA7CisJCQlpZiAoayA8IDEpIHsJLyogTm8gbWF0Y2ggKi8KKwkJCSAg ICBpID0gMDsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWlmIChqID09IGRlc2lyZWQpIHsgLyog VGhlIG1hdGNoIHdlIHdhbnQ/ICovCisJCQkgICAgaSArPSBrOwkvKiBZZXMsIHJldHVybiBzdHJp bmcgaW5kZXggKi8KKwkJCSAgICBicmVhazsKKwkJCX0KKwkJCWorKzsJCS8qIE5vLCBjb3VudCB0 aGlzIG1hdGNoICovCisJCQlzW2ldID0gTlVMOwkvKiBudWxsIGl0IG91dCAqLworCQkJc3RhcnQg PSBpLTE7CS8qIG1vdmUgbGVmdCBhbmQgbG9vayBhZ2FpbiAqLworCQkgICAgfQorCisgICAgICAg ICAgICAgICAgfSBlbHNlIHsJCS8qIEZyb20gbGVmdCAqLworCQkgICAgaW50IGo7CisJCSAgICBp ID0gMDsKKwkJICAgIGZvciAoaiA9IDE7IGogPD0gZGVzaXJlZCAmJiBzdGFydCA8IGxlbjI7IGor KykgeworCQkJaSA9IGNrbWF0Y2gocGF0LCZzW3N0YXJ0XSxpbnBjYXNbY21kbHZsXSwxKzQpOwor CQkJaWYgKGkgPT0gMCB8fCBqID09IGRlc2lyZWQpIGJyZWFrOworCQkJc3RhcnQgKz0gaSArIDE7 CisJCSAgICB9CQkJCisJCSAgICBpZiAoaiA9PSBkZXNpcmVkICYmIGkgIT0gMCkKKwkJICAgICAg aSArPSBzdGFydDsKKwkJICAgIGVsc2UKKwkJICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBpbmRleCBvciByaW5kZXggKi8KKwkJaW50IGog PSAwOworCQlpID0gMDsKKwkJZm9yIChqID0gMTsgaiA8PSBkZXNpcmVkICYmIHN0YXJ0IDwgbGVu MjsgaisrKSB7CisJCSAgICBpID0gY2tpbmRleChwYXQsYnBbMV0sc3RhcnQscmlnaHQsaW5wY2Fz W2NtZGx2bF0pOworCQkgICAgaWYgKGkgPT0gMCB8fCBqID09IGRlc2lyZWQpIGJyZWFrOworCQkg ICAgc3RhcnQgPSAocmlnaHQpID8gbGVuMiAtIGkgKyAxIDogaTsKKwkJfQorCQlpZiAoaiAhPSBk ZXNpcmVkKQorCQkgIGkgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ByaW50Zihm bnZhbCwiJWQiLGkpOyAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAg ICAgICAgfQorICAgICAgICBnb3RvIGZuZW5kOworICAgICAgfQorCisgICAgICBjYXNlIEZOX1JQ TDogICAgICAgICAgICAgICAgICAgICAgLyogXGZyZXBsYWNlKHMxLHMyLHMzKSAqLworICAgICAg LyoKKyAgICAgICAgcyA9IGJwWzBdID0gc291cmNlIHN0cmluZworICAgICAgICAgICAgYnBbMV0g PSBtYXRjaCBzdHJpbmcKKyAgICAgICAgICAgIGJwWzJdID0gcmVwbGFjZW1lbnQgc3RyaW5nCisg ICAgICAgICAgICBicFszXSA9IHdoaWNoIG9jY3VycmVuY2UgKGRlZmF1bHQgPSBhbGwpOworICAg ICAgICBwID0gZm52YWwgPSBkZXN0aW5hdGlvbiAocmVzdWx0KSBzdHJpbmcKKyAgICAgICovCisg ICAgICAgIGlmIChhcmduIDwgMSkgICAgICAgICAgICAgICAgICAgLyogTm90aGluZyAqLworICAg ICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIGlmIChhcmduIDwgMikgeyAgICAgICAgICAgICAg ICAgLyogT25seSB3b3JrcyBpZiB3ZSBoYXZlIDIgb3IgMyBhcmdzICovCisgICAgICAgICAgICBj a3N0cm5jcHkocCxicFswXSxGTlZBTEwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aW50IG9jY3VyID0gMCwgeHggPSAwLCBqMjsKKyAgICAgICAgICAgIGxlbjEgPSAoaW50KXN0cmxl bihicFswXSk7ICAvKiBsZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sgaW4gKi8KKyAgICAgICAgICAg IGxlbjIgPSAoaW50KXN0cmxlbihicFsxXSk7ICAvKiBsZW5ndGggb2Ygc3RyaW5nIHRvIGxvb2sg Zm9yICovCisgICAgICAgICAgICBsZW4zID0gKGFyZ24gPCAzKSA/IDAgOiAoaW50KXN0cmxlbihi cFsyXSk7IC8qIExlbiBvZiByZXBsYWNlbW50ICovCisgICAgICAgICAgICBqID0gbGVuMSAtIGxl bjIgKyAxOworICAgICAgICAgICAgajIgPSBqOworICAgICAgICAgICAgaWYgKGFyZ24gPiAzKSB7 CisgICAgICAgICAgICAgICAgaWYgKGNoa251bShicFszXSkpIHsKKyAgICAgICAgICAgICAgICAg ICAgb2NjdXIgPSBhdG9pKGJwWzNdKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFn cykKKyAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwi KCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBJZiBhcmdzIG91dCBvZiB3aGFj ay4uLiAqLworICAgICAgICAgICAgaWYgKGogPCAxIHx8IGxlbjEgPT0gMCB8fCBsZW4yID09IDAp IHsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkocCxicFswXSxGTlZBTEwpOyAvKiBqdXN0IHJl dHVybiBvcmlnaW5hbCBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICBwW0ZOVkFMTF0gPSBOVUw7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByYWdhaW46CisgICAgICAgICAg ICAgICAgcyA9IGJwWzBdOyAgICAgICAgICAgICAgLyogUG9pbnQgdG8gYmVnaW5uaW5nIG9mIHN0 cmluZyAqLworICAgICAgICAgICAgICAgIHdoaWxlIChqLS0gPiAwKSB7ICAgICAgIC8qIEZvciBl YWNoIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGJwWzFd LHMsbGVuMixpbnBjYXNbY21kbHZsXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChvY2N1 ciA9PSAwIHx8IG9jY3VyID09ICsreHgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo bGVuMykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShwLGJwWzJdLEZO VkFMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBsZW4zOworICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBsZW4yOyAgICAg IC8qIGFuZCBza2lwIHBhc3QgaXQuICovCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgLyogTm8sICovCisgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gKnMrKzsg ICAgLyoganVzdCBjb3B5IHRoaXMgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnAgPSBOVUw7CisgICAgICAgICAg ICAgICAgd2hpbGUgKCgqcCsrID0gKnMrKykpOworICAgICAgICAgICAgICAgIGlmIChvY2N1ciA8 IDApIHsgICAgICAgIC8qIGNoZWFwLi4uICovCisgICAgICAgICAgICAgICAgICAgIG9jY3VyID0g eHggKyBvY2N1ciArIDE7CisgICAgICAgICAgICAgICAgICAgIHh4ID0gMDsKKyAgICAgICAgICAg ICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgICAgICAgICBqID0gajI7CisgICAgICAg ICAgICAgICAgICAgIGlmIChvY2N1ciA+IDApCisgICAgICAgICAgICAgICAgICAgICAgZ290byBy YWdhaW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9DSFI6 ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmY2hhcmFjdGVyKGFyZzEpICovCisgICAgICAgIHZh bDEgPSAqKGJwWzBdKSA/IGV2YWx4KGJwWzBdKSA6ICIiOworICAgICAgICBpZiAoY2hrbnVtKHZh bDEpKSB7ICAgICAgICAgICAgIC8qIE11c3QgYmUgbnVtZXJpYyAqLworICAgICAgICAgICAgaSA9 IGF0b2kodmFsMSk7CisgICAgICAgICAgICBpZiAoaSA+PSAwICYmIGkgPCAyNTYpIHsgICAgLyog TXVzdCBiZSBhbiA4LWJpdCB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAg ICAgICAgICAgICAgICAqcCsrID0gKGNoYXIpIGk7CisgICAgICAgICAgICAgICAgKnAgPSBOVUw7 CisgICAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAg ICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmYWlsZWQgPSAxOwor ICAgICAgICAgICAgZXZhbGVycihmbik7CisgICAgICAgIH0KKyAgICAgICAgZ290byBmbmVuZDsK KworICAgICAgY2FzZSBGTl9DT0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmY29kZShjaGFy KSAqLworICAgICAgICBpZiAoKGludClzdHJsZW4oYnBbMF0pID4gMCkgeworICAgICAgICAgICAg cCA9IGZudmFsOworICAgICAgICAgICAgaSA9ICpicFswXTsKKyAgICAgICAgICAgIHNwcmludGYo cCwiJWQiLChpICYgMHhmZikpOyAvKiBTQUZFICovCisgICAgICAgIH0gZWxzZSBwID0gIjAiOwkJ CS8qIENhbid0IGhhcHBlbiAqLworICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZO X0xFTjogICAgICAgICAgICAgICAgICAgICAgLyogXGZsZW5ndGgoYXJnMSkgKi8KKyAgICAgICAg aWYgKGFyZ24gPiAwKSB7CisgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICBzcHJp bnRmKHAsIiVkIiwoaW50KXN0cmxlbihicFswXSkpOyAvKiBTQUZFICovCisgICAgICAgIH0gZWxz ZSBwID0gIjAiOworICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX0xPVzogICAg ICAgICAgICAgICAgICAgICAgLyogXGZsb3dlcihhcmcxKSAqLworICAgICAgICBzID0gYnBbMF0g PyBicFswXSA6ICIiOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIHdoaWxlICgqcykgewor ICAgICAgICAgICAgaWYgKGlzdXBwZXIoKnMpKQorICAgICAgICAgICAgICAqcCA9IChjaGFyKSB0 b2xvd2VyKCpzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgKnAgPSAqczsKKyAg ICAgICAgICAgIHArKzsgcysrOworICAgICAgICB9CisgICAgICAgICpwID0gTlVMOworICAgICAg ICBwID0gZm52YWw7CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fTUFYOiAg ICAgICAgICAgICAgICAgICAgICAvKiBcZm1heChhcmcxLGFyZzIpICovCisgICAgICBjYXNlIEZO X01JTjogICAgICAgICAgICAgICAgICAgICAgLyogXGZtaW4oYXJnMSxhcmcyKSAqLworICAgICAg Y2FzZSBGTl9NT0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmbW9kKGFyZzEsYXJnMikgKi8K KyAgICAgICAgdmFsMSA9ICooYnBbMF0pID8gZXZhbHgoYnBbMF0pIDogIiI7CisjaWZkZWYgQ09N TUVOVAorICAgICAgICAvKiBObyBsb25nZXIgbmVjZXNzYXJ5IGJlY2F1c2UgZXZhbHgoKSBubyBs b25nZXIgb3ZlcndyaXRlcyBpdHMgKi8KKyAgICAgICAgLyogcmVzdWx0IGV2ZXJ5IHRpbWUgaXQn cyBjYWxsZWQgKDIwMDAvMDkvMjMpLiAqLworICAgICAgICBmcmVlKGJwWzBdKTsKKyAgICAgICAg YnBbMF0gPSBOVUxMOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgaWYgKGFyZ24gPiAx KSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgLyogRGl0dG8uLi4gKi8KKyAgICAgICAg ICAgIGJwWzBdID0gbWFsbG9jKChpbnQpc3RybGVuKHZhbDEpKzEpOworICAgICAgICAgICAgaWYg KGJwWzBdKQorICAgICAgICAgICAgICBzdHJjcHkoYnBbMF0sdmFsMSk7ICAgICAgIC8qIHNhZmUg Ki8KKyAgICAgICAgICAgIHZhbDEgPSBicFswXTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAg ICAgICAgICB2YWwyID0gKihicFsxXSkgPyBldmFseChicFsxXSkgOiAiIjsKKyAgICAgICAgICAg IGlmIChjaGtudW0odmFsMSkgJiYgY2hrbnVtKHZhbDIpKSB7CisgICAgICAgICAgICAgICAgaSA9 IGF0b2kodmFsMSk7CisgICAgICAgICAgICAgICAgaiA9IGF0b2kodmFsMik7CisgICAgICAgICAg ICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIEZOX01BWDoKKyAgICAg ICAgICAgICAgICAgICAgaWYgKGogPCBpKSBqID0gaTsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEZOX01JTjoKKyAgICAgICAgICAgICAgICAgICAg aWYgKGogPiBpKSBqID0gaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICBjYXNlIEZOX01PRDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGogPT0gMCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZh bCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6RElW SURFX0JZX1pFUk86XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm52YWxbMF0gPSBOVUw7CisgICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UK KyAgICAgICAgICAgICAgICAgICAgICBqID0gaSAlIGo7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHAsIiVkIixq KTsgICAgICAvKiBTQUZFICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgZXZhbGVycihmbik7CisgICAgICAgICAgICB9 CisgICAgICAgIH0gZWxzZSBwID0gdmFsMTsKKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9IC8q IEJyZWFrIHVwIGJpZyBzd2l0Y2guLi4gKi8KKworICAgIHN3aXRjaCAoeSkgeworICAgICAgY2Fz ZSBGTl9TVUI6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmc3Vic3RyKGFyZzEsYXJnMixhcmcz KSAqLworICAgICAgY2FzZSBGTl9SSUc6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmcmlnaHQo YXJnMSxhcmcyKSAqLworICAgICAgY2FzZSBGTl9MRUY6ICAgICAgICAgICAgICAgICAgICAgIC8q IFxmbGVmdChhcmcxLGFyZzIpICovCisgICAgICAgIGlmIChhcmduIDwgMSkKKyAgICAgICAgICBn b3RvIGZuZW5kOworICAgICAgICB2YWwxID0gIiI7CisgICAgICAgIGlmIChhcmduID4gMSkKKyAg ICAgICAgICBpZiAoKihicFsxXSkpCisgICAgICAgICAgICB2YWwxID0gIGV2YWx4KGJwWzFdKTsK KyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmIChicFsxXSkgZnJlZShicFsxXSk7ICAgICAgICAg LyogSGF2ZSB0byBjb3B5IHRoaXMgKi8KKyAgICAgICAgYnBbMV0gPSBtYWxsb2MoKGludClzdHJs ZW4odmFsMSkrMSk7CisgICAgICAgIGlmICghYnBbMV0pIHsKKyAgICAgICAgICAgIGZhaWxlZCA9 IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykgeworICAgICAgICAgICAgICAgIHAgPSBmbnZh bDsKKyAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIjxFUlJPUjpNQUxMT0NfRkFJTFVSRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAgICAg ICBzdHJjcHkoYnBbMV0sdmFsMSk7ICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgdmFs MSA9IGJwWzFdOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgdmFsMiA9ICIiOworICAg ICAgICBpZiAoYXJnbiA+IDIpCisgICAgICAgICAgaWYgKCooYnBbMl0pKQorICAgICAgICAgICAg dmFsMiA9IGV2YWx4KGJwWzJdKTsKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgKChhcmduID4g MSkgJiYgKGludClzdHJsZW4odmFsMSkgJiYgIXJkaWdpdHModmFsMSkpIHx8CisgICAgICAgICAg ICAoKGN4ID09IEZOX1NVQikgJiYKKyAgICAgICAgICAgICAgKChhcmduID4gMikgJiYgKGludClz dHJsZW4odmFsMikgJiYgIXJkaWdpdHModmFsMikpKQorICAgICAgICAgICAgKSB7CisgICAgICAg ICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgZXZhbGVycihmbik7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBpbnQgbHg7CisgICAgICAgICAgICBwID0gZm52YWw7ICAgICAgICAg ICAgICAgICAgLyogcG9pbnRlciB0byByZXN1bHQgKi8KKyAgICAgICAgICAgIGx4ID0gc3RybGVu KGJwWzBdKTsgICAgICAgICAvKiBsZW5ndGggb2YgYXJnMSAqLworICAgICAgICAgICAgaWYgKGN4 ID09IEZOX1NVQikgeyAgICAgICAgIC8qIHN1YnN0cmluZyAqLworICAgICAgICAgICAgICAgIGsg PSAoYXJnbiA+IDIpID8gYXRvaSh2YWwyKSA6IE1BWEFSR0xFTjsgLyogbGVuZ3RoICovCisgICAg ICAgICAgICAgICAgaiA9IChhcmduID4gMSkgPyBhdG9pKHZhbDEpIDogMTsgLyogc3RhcnQgcG9z IGZvciBzdWJzdHIgKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gRk5fTEVGKSB7ICAv KiBsZWZ0ICovCisgICAgICAgICAgICAgICAgayA9IChhcmduID4gMSkgPyBhdG9pKHZhbDEpIDog bHg7CisgICAgICAgICAgICAgICAgaiA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogcmlnaHQgKi8KKyAgICAgICAgICAgICAgICBrID0gKGFy Z24gPiAxKSA/IGF0b2kodmFsMSkgOiBseDsgLyogbGVuZ3RoICovCisgICAgICAgICAgICAgICAg aiA9IGx4IC0gayArIDE7ICAgICAgICAgICAgICAgICAgLyogc3RhcnQgcG9zIGZvciByaWdodCAq LworICAgICAgICAgICAgICAgIGlmIChqIDwgMSkgaiA9IDE7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoayA+IDAgJiYgaiA8PSBseCkgeyAgICAgICAgICAgICAgLyogaWYgc3RhcnQg cG9zIGluIHJhbmdlICovCisgICAgICAgICAgICAgICAgcyA9IGJwWzBdK2otMTsgICAgICAgICAg ICAgICAgICAgLyogcG9pbnQgdG8gc291cmNlIHN0cmluZyAqLworICAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IChpIDwgaykgJiYgKCpwKysgPSAqcysrKTsgaSsrKSA7ICAvKiBjb3B5ICovCisg ICAgICAgICAgICB9CisgICAgICAgICAgICAqcCA9IE5VTDsgICAgICAgICAgICAgICAgICAgLyog dGVybWluYXRlIHRoZSByZXN1bHQgKi8KKyAgICAgICAgICAgIHAgPSBmbnZhbDsgICAgICAgICAg ICAgICAgICAvKiBhbmQgcG9pbnQgdG8gaXQuICovCisgICAgICAgIH0KKyAgICAgICAgZ290byBm bmVuZDsKKworICAgICAgY2FzZSBGTl9VUFA6ICAgICAgICAgICAgICAgICAgICAgIC8qIFxmdXBw ZXIoYXJnMSkgKi8KKyAgICAgICAgcyA9IGJwWzBdID8gYnBbMF0gOiAiIjsKKyAgICAgICAgcCA9 IGZudmFsOworICAgICAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgICAgIGlmIChpc2xvd2VyKCpz KSkKKyAgICAgICAgICAgICAgKnAgPSAoY2hhcikgdG91cHBlcigqcyk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICpwID0gKnM7CisgICAgICAgICAgICBwKys7IHMrKzsKKyAgICAg ICAgfQorICAgICAgICAqcCA9IE5VTDsKKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3Rv IGZuZW5kOworCisgICAgICBjYXNlIEZOX1JFUDogICAgICAgICAgICAgICAgICAgICAgLyogXGZy ZXBlYXQodGV4dCxudW1iZXIpICovCisgICAgICAgIGlmIChhcmduIDwgMSkKKyAgICAgICAgICBn b3RvIGZuZW5kOworICAgICAgICB2YWwxID0gIjEiOworICAgICAgICBpZiAoYXJnbiA+IDEpCisg ICAgICAgICAgaWYgKCooYnBbMV0pKQorICAgICAgICAgICAgdmFsMSA9IGV2YWx4KGJwWzFdKTsK KyAgICAgICAgaWYgKGNoa251bSh2YWwxKSkgeyAgICAgICAgICAgICAvKiBSZXBlYXQgY291bnQg Ki8KKyAgICAgICAgICAgIG4gPSBhdG9pKHZhbDEpOworICAgICAgICAgICAgZGVidWcoRjExMSwi U1VOREFZIGZyZXBlYXQgbiIsdmFsMSxuKTsKKyAgICAgICAgICAgIGlmIChuID4gMCkgeyAgICAg ICAgICAgICAgICAvKiBNYWtlIG4gY29waWVzICovCisgICAgICAgICAgICAgICAgcCA9IGZudmFs OworICAgICAgICAgICAgICAgICpwID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBrID0gKGludClz dHJsZW4oYnBbMF0pOyAvKiBNYWtlIHN1cmUgc3RyaW5nIGhhcyBzb21lIGxlbmd0aCAqLworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsIlNVTkRBWSBmcmVwZWF0IGsiLCIiLGspOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMTEsIlNVTkRBWSBmcmVwZWF0IEZOVkFMTCIsIiIsRk5WQUxMKTsK KyAgICAgICAgICAgICAgICBpZiAoayAqIG4gPj0gRk5WQUxMKSB7ICAvKiBCdXQgbm90IHRvbyBt dWNoLi4uICovCisgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAg ICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOlJFU1VMVF9U T09fTE9ORzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgICAgICAgZm52YWxbMF0gPSBOVUw7CisgICAgICAgICAgICAgICAgICAg IHAgPSBmbnZhbDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGsgPiAwKSB7ICAgICAgICAgICAgLyogSWYgdGhl cmUgaXMgc29tZXRoaW5nIHRvIGNvcHkgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IG47IGkrKykgeyAvKiBDb3B5IGxvb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IHMgPSBicFswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBrOyBq KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHAgLSBmbnZhbCkgPj0gRk5W QUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgIC8qIHNob3VsZG4n dCBoYXBwZW4uLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gKnMrKzsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcCA9IE5V TDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgZXZhbGVycihmbik7CisgICAgICAg IH0KKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOworCisjaWZuZGVmIE5P RlJJTExTCisgICAgICBjYXNlIEZOX1JFVjogICAgICAgICAgICAgICAgICAgICAgLyogXGZyZXZl cnNlKCkgKi8KKyAgICAgICAgaWYgKGFyZ24gPCAxKQorICAgICAgICAgIGdvdG8gZm5lbmQ7Cisg ICAgICAgIHl5c3RyaW5nKGJwWzBdLCZwKTsKKyAgICAgICAgZ290byBmbmVuZDsKKyNlbmRpZiAv KiBOT0ZSSUxMUyAqLworCisgICAgICBjYXNlIEZOX1JQQTogICAgICAgICAgICAgICAgICAgICAg LyogXGZycGFkKCkgYW5kIFxmbHBhZCgpICovCisgICAgICBjYXNlIEZOX0xQQToKKyAgICAgICAg aWYgKGFyZ24gPCAxKQorICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIHZhbDEgPSAiIjsK KyAgICAgICAgaWYgKGFyZ24gPiAxKQorICAgICAgICAgIGlmICgqKGJwWzFdKSkKKyAgICAgICAg ICAgIHZhbDEgPSBldmFseChicFsxXSk7CisgICAgICAgIGlmIChhcmduID09IDEpIHsgICAgICAg ICAgICAgICAgLyogSWYgYSBudW1iZXIgd2Fzbid0IGdpdmVuICovCisgICAgICAgICAgICBwID0g Zm52YWw7ICAgICAgICAgICAgICAgICAgLyoganVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmlu ZyAqLworICAgICAgICAgICAgY2tzdHJuY3B5KHAsYnBbMF0sRk5WQUxMKTsKKyAgICAgICAgfSBl bHNlIGlmIChhcmduID4gMSAmJiAgISp2YWwxKSB7CisgICAgICAgICAgICBmYWlsZWQgPSAxOwor ICAgICAgICAgICAgZXZhbGVycihmbik7CisgICAgICAgIH0gZWxzZSAvKiBpZiAoY2hrbnVtKHZh bDEpKSAqLyB7IC8qIFJlcGVhdCBjb3VudCAqLworICAgICAgICAgICAgY2hhciBwYzsKKyAgICAg ICAgICAgIG4gPSBhdG9pKHZhbDEpOworICAgICAgICAgICAgaWYgKG4gPj0gMCkgeworICAgICAg ICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgICAgICBrID0gKGludClzdHJsZW4oYnBb MF0pOyAvKiBMZW5ndGggb2Ygc3RyaW5nIHRvIGJlIHBhZGRlZCAqLworICAgICAgICAgICAgICAg IGlmIChrID49IG4pIHsgICAgICAgICAgIC8qIEl0J3MgYWxyZWFkeSBsb25nIGVub3VnaCAqLwor ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkocCxicFswXSxGTlZBTEwpOworICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuICsgayA8PSBGTlZBTEwp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBjID0gKGNoYXIpICgoYXJnbiA8IDMpID8gU1Ag OiAqYnBbMl0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYykgcGMgPSBTUDsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChjeCA9PSBGTl9SUEEpIHsgLyogUlBBRCAqLworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkocCxicFswXSxrKTsgLyogKGxlYXZlIGl0 IGxpa2UgdGhpcykgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW2tdID0gTlVMOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gazsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3IgKGkgPSBrOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKnArKyA9IHBjOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAg IC8qIExQQUQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuIC09IGs7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpwKysgPSBwYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJuY3B5KHAsYnBbMF0sayk7IC8qIChsZWF2ZSBpdCBsaWtlIHRoaXMpICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcFtrXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwICs9IGs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKnAgPSBOVUw7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290 byBmbmVuZDsKKworI2lmZGVmIFpGQ0RBVAorICAgICAgY2FzZSBGTl9GRDogICAgICAgICAgICAg ICAgICAgICAgIC8qIFxmZGF0ZShmaWxlbmFtZSkgKi8KKyAgICAgICAgcCA9IGZudmFsOworICAg ICAgICBzID0gemZjZGF0KGJwWzBdKTsKKyAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAg IGlmICghKnMpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5k aWFncykKKyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6RklMRV9O T1RfRk9VTkQ6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7Cisg ICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KGZudmFsLHMsRk5WQUxMKTsKKyNlbmRpZiAvKiBa RkNEQVQgKi8KKyAgICAgICAgZ290byBmbmVuZDsKKworICAgIH0gLyogQnJlYWsgdXAgYmlnIHN3 aXRjaC4uLiAqLworCisgICAgc3dpdGNoICh5KSB7CisgICAgICBjYXNlIEZOX0ZTOiB7CQkJLyog XGZzaXplKGZpbGVuYW1lKSAqLworCSAgQ0tfT0ZGX1QgejsKKwkgIHAgPSBmbnZhbDsKKwkgIHog PSB6Y2hraShicFswXSk7CisJICBpZiAoeiA8IChDS19PRkZfVCkwKSB7CisJICAgICAgZmFpbGVk ID0gMTsKKwkgICAgICBpZiAoZm5kaWFncykgeworCQkgIGlmICh6ID09IChDS19PRkZfVCktMSkK KwkJICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKwkJCSAgICAgIjxFUlJPUjpGSUxFX05PVF9G T1VORDpcXGYiLGZuLCIoKT4iLE5VTEwpOworCQkgIGVsc2UgaWYgKHogPT0gKENLX09GRl9UKS0y KQorCQkgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorCQkJICAgICAiPEVSUk9SOkZJTEVfTk9U X1JFQURBQkxFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJCSAgZWxzZSBpZiAoeiA9PSAoQ0tfT0ZG X1QpLTMpCisJCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisJCQkgICAgICI8RVJST1I6RklM RV9OT1RfQUNDRVNTSUJMRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworCQkgIGVsc2UKKwkJICAgIGNr bWFrbXNnKGZudmFsLEZOVkFMTCwKKwkJCSAgICAgIjxFUlJPUjpGSUxFX0VSUk9SOlxcZiIsZm4s IigpPiIsTlVMTCk7CisJICAgICAgfQorCSAgICAgIGdvdG8gZm5lbmQ7CisJICB9CisJICBja3N0 cm5jcHkoZm52YWwsY2tmc3RvYSh6KSxGTlZBTEwpOworCSAgZ290byBmbmVuZDsKKyAgICAgIH0K KyAgICAgIGNhc2UgRk5fVkVSOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZnZlcmlmeSgpICov CisJcCA9ICItMSI7CisJaWYgKGFyZ24gPT0gMSkJCQkvKiBObyBzZWNvbmQgYXJnICovCisJICBn b3RvIGZuZW5kOworCWVsc2UgaWYgKCFicFsxXSkJCS8qIE9yIHNlY29uZCBhcmcgbnVsbCAqLwor CSAgZ290byBmbmVuZDsKKwllbHNlIGlmICghKihicFsxXSkpCQkvKiBvciBlbXB0eS4gKi8KKwkg IGdvdG8gZm5lbmQ7CisgICAgICAgIHAgPSAiMCI7CisgICAgICAgIGlmIChhcmduID4gMSkgeyAg ICAgICAgICAgICAgICAgLyogT25seSB3b3JrcyBpZiB3ZSBoYXZlIDIgb3IgMyBhcmdzICovCisg ICAgICAgICAgICBpbnQgc3RhcnQ7CisgICAgICAgICAgICBjaGFyICpzMiwgY2gxLCBjaDI7Cisg ICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgICAgICBpZiAoYXJnbiA+IDIpIHsgICAgICAg ICAgICAgLyogU3RhcnRpbmcgcG9zaXRpb24gc3BlY2lmaWVkICovCisgICAgICAgICAgICAgICAg dmFsMSA9ICooYnBbMl0pID8gZXZhbHgoYnBbMl0pIDogIjAiOworICAgICAgICAgICAgICAgIGlm IChjaGtudW0odmFsMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBhdG9pKHZhbDEp IC8qIC0gMSAqLzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAw OworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPiAoaW50KXN0cmxlbihicFsxXSkpCisg ICAgICAgICAgICAgICAgICAgICAgZ290byB2ZXJmaW47CisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAg ZXZhbGVycihmbik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IHN0YXJ0OworICAgICAgICAg ICAgcCA9ICIwIjsKKyAgICAgICAgICAgIGZvciAocyA9IGJwWzFdICsgc3RhcnQ7ICpzOyBzKyss aSsrKSB7CisgICAgICAgICAgICAgICAgY2gxID0gKnM7CisgICAgICAgICAgICAgICAgaWYgKCFp bnBjYXNbY21kbHZsXSkgaWYgKGlzbG93ZXIoY2gxKSkgY2gxID0gdG91cHBlcihjaDEpOworICAg ICAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgIGZvciAoczIgPSBicFswXTsgKnMy OyBzMisrKSB7CisgICAgICAgICAgICAgICAgICAgIGNoMiA9ICpzMjsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkgaWYgKGlzbG93ZXIoY2gyKSkgY2gyID0gdG91cHBl cihjaDIpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2gxID09IGNoMikgeworICAgICAgICAg ICAgICAgICAgICAgICAgaiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp ZiAoaiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIixpKzEp OyAvKiBTQUZFICovCisgICAgICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICB2ZXJmaW46CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5f SVBBOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIGFuZCByZXR1cm4gSVAgYWRkcmVzcyAq LworICAgICAgICBpZiAoYXJnbiA+IDApIHsgICAgICAgICAgICAgICAgIC8qIGluIGFyZ3VtZW50 IHN0cmluZy4gKi8KKyAgICAgICAgICAgIGludCBzdGFydCA9IDA7CisgICAgICAgICAgICBpZiAo YXJnbiA+IDEpIHsgICAgICAgICAgICAgLyogU3RhcnRpbmcgcG9zaXRpb24gc3BlY2lmaWVkICov CisgICAgICAgICAgICAgICAgaWYgKGNoa251bShicFsxXSkpIHsKKyAgICAgICAgICAgICAgICAg ICAgc3RhcnQgPSBhdG9pKGJwWzFdKSAtIDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFy dCA8IDApIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAg ICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixO VUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwID0gZ2V0aXAoYnBbMF0rc3RhcnQpOworICAg ICAgICB9IGVsc2UgcCA9ICIiOworICAgICAgICBnb3RvIGZuZW5kOworCisjaWZkZWYgT1MyCisg ICAgICBjYXNlIEZOX0NSWToKKyAgICAgICAgcCA9ICIiOworICAgICAgICBpZiAoYXJnbiA+IDAp IHsKKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgIGNrc3RybmNweShwLGJwWzBd LEZOVkFMTCk7CisgICAgICAgICAgICBja19lbmNyeXB0KHApOworICAgICAgICB9CisgICAgICAg IGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fT09YOgorICAgICAgICBwID0gIiI7CisgICAg ICAgIGlmIChhcmduID4gMCkKKyAgICAgICAgICBwID0gKGNoYXIgKikgY2tfb294KGJwWzBdLCAo YXJnbiA+IDEpID8gYnBbMV0gOiAiIik7CisgICAgICAgIGdvdG8gZm5lbmQ7CisjZW5kaWYgLyog T1MyICovCisKKyAgICAgIGNhc2UgRk5fSEVYOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmhl eGlmeShhcmcxKSAqLworICAgICAgICBpZiAoYXJnbiA8IDEpCisgICAgICAgICAgZ290byBmbmVu ZDsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKGJwWzBdKSA8IChGTlZBTEwgLyAyKSkgeworICAg ICAgICAgICAgcyA9IGJwWzBdOworICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAg d2hpbGUgKCpzKSB7CisgICAgICAgICAgICAgICAgeCA9ICgqcyA+PiA0KSAmIDB4MGY7CisgICAg ICAgICAgICAgICAgKnArKyA9IGhleGRpZ2l0c1t4XTsKKyAgICAgICAgICAgICAgICB4ID0gKnMr KyAmIDB4MGY7CisgICAgICAgICAgICAgICAgKnArKyA9IGhleGRpZ2l0c1t4XTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICpwID0gTlVMOworICAgICAgICAgICAgcCA9IGZudmFsOworICAg ICAgICB9CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fVU5UQUI6CQkJLyog XGZ1bnRhYihhcmcxKSAqLworCWlmIChhcmduIDwgMSkKKwkgIGdvdG8gZm5lbmQ7CisJaWYgKChp bnQpc3RybGVuKGJwWzBdKSA8IChGTlZBTEwgKiAyKSkgeworCSAgICBzID0gYnBbMF07CisJICAg IHAgPSBmbnZhbDsKKwkgICAgaWYgKHVudGFiaWZ5KGJwWzBdLHAsRk5WQUxMKSA8IDApIHsKKwkJ ZmFpbGVkID0gMTsKKwkJaWYgKGZuZGlhZ3MpCisJCSAgY2ttYWttc2coZm52YWwsRk5WQUxMLAor CQkJICAgIjxFUlJPUjpPVkVSRkxPVzpcXGYiLGZuLCIoKT4iLE5VTEwpOworCSAgICB9CisJICAg IGdvdG8gZm5lbmQ7CisJfQorCisgICAgICBjYXNlIEZOX1VOSDogeyAgICAgICAgICAgICAgICAg ICAgLyogXGZ1bmhleChhcmcxKSAqLworICAgICAgICAgIGludCBjWzJdLCBpOworICAgICAgICAg IGlmIChhcmduIDwgMSkKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgaWYgKChp bnQpc3RybGVuKGJwWzBdKSA8IChGTlZBTEwgKiAyKSkgeworICAgICAgICAgICAgICBzID0gYnBb MF07CisgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgICAgd2hpbGUgKCpzKSB7 CisgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAg ICAgICAgICAgICAgY1tpXSA9ICpzKys7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjW2ld KSB7IHAgPSAiIjsgZ290byB1bmhleGZpbjsgfQorICAgICAgICAgICAgICAgICAgICAgIGlmIChp c2xvd2VyKGNbaV0pKSBjW2ldID0gdG91cHBlcihjW2ldKTsKKyAgICAgICAgICAgICAgICAgICAg ICBpZiAoY1tpXSA+PSAnMCcgJiYgY1tpXSA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgY1tpXSAtPSAweDMwOworICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY1tp XSA+PSAnQScgJiYgY1tpXSA8PSAnRicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY1tp XSAtPSAweDM3OworICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChm bmRpYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZOVkFMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiKCk+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAqcCsrID0gKChjWzBd IDw8IDQpICYgMHhmMCkgfCAoY1sxXSAmIDB4MGYpOworICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICpwID0gTlVMOworICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgfQor ICAgICAgICB1bmhleGZpbjoKKyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgfQorCisgICAg ICBjYXNlIEZOX0JSSzogeyAgICAgICAgICAgICAgICAgICAgLyogXGZicmVhaygpICovCisgICAg ICAgICAgY2hhciAqIGM7ICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVycyB0byBicmVh ayBvbiAqLworICAgICAgICAgIGNoYXIgYzIsIHMyOworICAgICAgICAgIGludCBzdGFydCA9IDA7 CisgICAgICAgICAgaW50IGRvbmUgPSAwOworICAgICAgICAgIGlmIChhcmduIDwgMSkKKyAgICAg ICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgaWYgKGFyZ24gPiAyKSB7CisgICAgICAgICAg ICAgIHMgPSBicFsyXSA/IGJwWzJdIDogIjAiOworICAgICAgICAgICAgICBpZiAoY2hrbnVtKHMp KSB7CisgICAgICAgICAgICAgICAgICBzdGFydCA9IGF0b2kocyk7CisgICAgICAgICAgICAgICAg ICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7CisgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQg PiAoaW50KXN0cmxlbihicFswXSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gYnJrZmluOwor ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAg ICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgICBja21ha21z ZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJH X05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICBnb3Rv IGZuZW5kOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHMgPSBicFsw XSArIHN0YXJ0OyAgICAgICAgICAgIC8qIFNvdXJjZSBwb2ludGVyICovCisKKyAgICAgICAgICB3 aGlsZSAoKnMgJiYgIWRvbmUpIHsKKyAgICAgICAgICAgICAgczIgPSAqczsKKyAgICAgICAgICAg ICAgaWYgKCFpbnBjYXNbY21kbHZsXSAmJiBpc2xvd2VyKHMyKSkgczIgPSB0b3VwcGVyKHMyKTsK KyAgICAgICAgICAgICAgYyA9IGJwWzFdID8gYnBbMV0gOiAiIjsgICAvKiBDaGFyYWN0ZXIgdG8g YnJlYWsgb24gKi8KKyAgICAgICAgICAgICAgd2hpbGUgKCpjKSB7CisgICAgICAgICAgICAgICAg ICBjMiA9ICpjOworICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSAmJiBpc2xv d2VyKGMyKSkgYzIgPSB0b3VwcGVyKGMyKTsKKyAgICAgICAgICAgICAgICAgIGlmIChjMiA9PSBz MikgeworICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYysrOwor ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChkb25lKSBicmVhazsKKyAgICAgICAg ICAgICAgKnArKyA9ICpzKys7CisgICAgICAgICAgfQorICAgICAgICAgICpwID0gTlVMOyAgICAg ICAgICAgICAgICAgICAgIC8qIHRlcm1pbmF0ZSB0aGUgcmVzdWx0ICovCisgICAgICAgICAgcCA9 IGZudmFsOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50IHRvIGl0LiAqLworICAgICAg ICBicmtmaW46CisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgIH0KKworICAgICAgY2FzZSBG Tl9TUE46IHsgICAgICAgICAgICAgICAgICAgIC8qIFxmc3BhbigpICovCisgICAgICAgICAgY2hh ciAqcTsKKyAgICAgICAgICBjaGFyIGMxLCBjMjsKKyAgICAgICAgICBpbnQgc3RhcnQgPSAwOwor ICAgICAgICAgIGlmIChhcmduIDwgMSkKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAg ICAgaWYgKGFyZ24gPiAyKSB7ICAgICAgICAgICAgICAgLyogU3RhcnRpbmcgcG9zaXRpb24gKi8K KyAgICAgICAgICAgICAgcyA9IGJwWzJdID8gYnBbMl0gOiAiMCI7CisgICAgICAgICAgICAgIGlm IChjaGtudW0ocykpIHsKKyAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gYXRvaShzKTsKKyAgICAg ICAgICAgICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgICBp ZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYi LGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBzID0gYnBbMF0gKyBzdGFydDsgICAgICAg ICAgICAvKiBTb3VyY2UgcG9pbnRlciAqLworICAgICAgICAgIGlmIChhcmduID4gMSAmJgorICAg ICAgICAgICAgICAoaW50KXN0cmxlbihicFsxXSkgPiAwICYmCisgICAgICAgICAgICAgIHN0YXJ0 IDw9IChpbnQpc3RybGVuKGJwWzBdKSkgeworICAgICAgICAgICAgICB3aGlsZSAoKnMpIHsgICAg ICAgICAgICAgIC8qIExvb3AgdGhydSBzb3VyY2Ugc3RyaW5nICovCisgICAgICAgICAgICAgICAg ICBxID0gYnBbMV07ICAgICAgICAgICAgLyogU3BhbiBzdHJpbmcgKi8KKyAgICAgICAgICAgICAg ICAgIGMxID0gKnM7CisgICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKQorICAg ICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihjMSkpIGMxID0gdG91cHBlcihjMSk7CisgICAg ICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgIHdoaWxlICgoYzIgPSAqcSsr KSkgeworICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5wY2FzW2NtZGx2bF0pCisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihjMikpIGMyID0gdG91cHBlcihjMik7CisgICAg ICAgICAgICAgICAgICAgICAgaWYgKGMxID09IGMyKSB7IHggPSAxOyBicmVhazsgfQorICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgaWYgKCF4KSBicmVhazsKKyAgICAgICAg ICAgICAgICAgICpwKysgPSAqcysrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICpw ID0gTlVMOyAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIGFuZCByZXR1cm4gdGhlIHJlc3Vs dCAqLworICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgfQorICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICB9CisgICAgfSAvKiBCcmVhayB1cCBiaWcgc3dpdGNoLi4uICovCisK KyAgICBzd2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgRk5fVFJNOiAgICAgICAgICAgICAgICAgICAg ICAvKiBcZnRyaW0oczFbLHMyXSkgKi8KKyAgICAgIGNhc2UgRk5fTFRSOiAgICAgICAgICAgICAg ICAgICAgICAvKiBcZmx0cmltKHMxWyxzMl0pICovCisgICAgICAgIGlmIChhcmduIDwgMSkKKyAg ICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICBpZiAoKGxlbjEgPSAoaW50KXN0cmxlbihicFsw XSkpID4gMCkgeworICAgICAgICAgICAgaWYgKGxlbjEgPiBGTlZBTEwpCisgICAgICAgICAgICAg IGxlbjEgPSBGTlZBTEw7CisgICAgICAgICAgICBzID0gIiBcdFxyXG4iOworICAgICAgICAgICAg aWYgKGFyZ24gPiAxKSAgICAgICAgICAgICAgIC8qIFRyaW0gbGlzdCBnaXZlbiAqLworICAgICAg ICAgICAgICBzID0gYnBbMV07CisgICAgICAgICAgICBsZW4yID0gKGludClzdHJsZW4ocyk7Cisg ICAgICAgICAgICBpZiAobGVuMiA8IDEpIHsgICAgICAgICAgICAgLyogb3Igbm90Li4uICovCisg ICAgICAgICAgICAgICAgcyA9ICIgXHRcclxuIjsgICAgICAgICAgLyogRGVmYXVsdCBpcyB0byB0 cmltIHdoaXRlc3BhY2UgKi8KKyAgICAgICAgICAgICAgICBsZW4yID0gMjsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChjeCA9PSBGTl9UUk0pIHsgICAgICAgICAvKiBUcmltIGZyb20g cmlnaHQgKi8KKyAgICAgICAgICAgICAgICBjaGFyICogcSwgcDIsIHEyOworICAgICAgICAgICAg ICAgIGNrc3RybmNweShmbnZhbCxicFswXSxGTlZBTEwpOyAvKiBDb3B5IHN0cmluZyB0byBvdXRw dXQgKi8KKyAgICAgICAgICAgICAgICBwID0gZm52YWwgKyBsZW4xIC0gMTsgICAvKiBQb2ludCB0 byBsYXN0IGNoYXJhY3RlciAqLworCisgICAgICAgICAgICAgICAgd2hpbGUgKHAgPj0gKGNoYXIg KilmbnZhbCkgeyAvKiBHbyBiYWNrd2FyZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgcSA9IHM7 ICAgICAgICAgICAgICAvKiBQb2ludCB0byB0cmltIGxpc3QgKi8KKyAgICAgICAgICAgICAgICAg ICAgcDIgPSAqcDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkKKyAg ICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihwMikpIHAyID0gdG91cHBlcihwMik7Cisg ICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcSkgeyAgICAgICAgLyogSXMgdGhpcyBjaGFyIGlu IHRyaW0gbGlzdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHEyID0gKnE7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIWlucGNhc1tjbWRsdmxdKQorICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoaXNsb3dlcihxMikpIHEyID0gdG91cHBlcihxMik7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAocDIgPT0gcTIpIHsgLyogWWVzLCBudWxsIGl0IG91dCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpwID0gTlVMOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgcSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm ICghKnEpICAgICAgICAgICAgLyogVHJpbSBsaXN0IGV4aGF1c3RlZCAqLworICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIC8qIFNvIHdlJ3JlIGRvbmUuICovCisgICAgICAg ICAgICAgICAgICAgIHAtLTsgICAgICAgICAgICAgICAgLyogRWxzZSBrZWVwIHRyaW1taW5nICov CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgIC8qIFRyaW0gZnJvbSBsZWZ0ICovCisgICAgICAgICAgICAgICAgY2hhciAqIHEsIHAyLCBx MjsKKyAgICAgICAgICAgICAgICBwID0gYnBbMF07ICAgICAgICAgICAgICAvKiBTb3VyY2UgKi8K KyAgICAgICAgICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgICAgICAgICAgcDIgPSAq cDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkKKyAgICAgICAgICAg ICAgICAgICAgICBpZiAoaXNsb3dlcihwMikpIHAyID0gdG91cHBlcihwMik7CisgICAgICAgICAg ICAgICAgICAgIHEgPSBzOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnEpIHsgICAgICAg IC8qIElzIHRoaXMgY2hhciBpbiB0cmltIGxpc3Q/ICovCisgICAgICAgICAgICAgICAgICAgICAg ICBxMiA9ICpxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnBjYXNbY21kbHZsXSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIocTIpKSBxMiA9IHRvdXBwZXIo cTIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAyID09IHEyKSB7IC8qIFllcywgcG9p bnQgcGFzdCBpdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsgICAgICAgIC8q IGFuZCB0cnkgbmV4dCBzb3VyY2UgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICBxKys7ICAgICAgICAgICAgLyogTm8sIHRyeSBuZXh0IHRyaW0gY2hhcmFjdGVyICov CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEqcSkgICAg ICAgICAgICAvKiBUcmltIGxpc3QgZXhoYXVzdGVkICovCisgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7ICAgICAgICAgICAgLyogU28gd2UncmUgZG9uZS4gKi8KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHAsRk5WQUxMKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgfSBlbHNlIHAgPSAiIjsKKyAgICAg ICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9DQVA6ICAgICAgICAgICAgICAgICAgICAg IC8qIFxmY2FwaXRhbGl6ZShhcmcxKSAqLworICAgICAgICBpZiAoYXJnbiA8IDEpCisgICAgICAg ICAgZ290byBmbmVuZDsKKyAgICAgICAgcyA9IGJwWzBdOworICAgICAgICBwID0gZm52YWw7Cisg ICAgICAgIHggPSAwOworICAgICAgICB3aGlsZSAoKGMgPSAqcysrKSkgeworICAgICAgICAgICAg aWYgKGlzYWxwaGEoYykpIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSAwKSB7CisgICAgICAg ICAgICAgICAgICAgIHggPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNsb3dlcihjKSkK KyAgICAgICAgICAgICAgICAgICAgICBjID0gdG91cHBlcihjKTsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKGlzdXBwZXIoYykpCisgICAgICAgICAgICAgICAgICBjID0gdG9sb3dlcihjKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpwKysgPSBjOworICAgICAgICB9CisgICAgICAg ICpwID0gTlVMOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyNp ZmRlZiBDT01NRU5UCisgICAgICBjYXNlIEZOX1RPRDogICAgICAgICAgICAgICAgICAgICAgLyog VGltZSBvZiBkYXkgdG8gc2VjcyBzaW5jZSBtaWRuaXRlICovCisgICAgICAgIHNwcmludGYoZm52 YWwsIiVsZCIsdG9kMnNlYyhicFswXSkpOyAvKiBTQUZFICovCisgICAgICAgIGdvdG8gZm5lbmQ7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgICBjYXNlIEZOX0ZGTjogICAgICAgICAgICAg ICAgICAgICAgLyogRnVsbCBwYXRobmFtZSBvZiBmaWxlICovCisgICAgICAgIHpmbnFmcChicFsw XSxGTlZBTEwscCk7CisgICAgICAgIGlmICghcCkgcCA9ICIiOworICAgICAgICBnb3RvIGZuZW5k OworCisgICAgICBjYXNlIEZOX0NISzogeyAgICAgICAgICAgICAgICAgICAgLyogXGZjaGVja3N1 bSgpICovCisgICAgICAgICAgbG9uZyBjaGsgPSAwOworICAgICAgICAgIHAgPSAoYXJnbiA+IDAp ID8gYnBbMF0gOiAiIjsKKyAgICAgICAgICB3aGlsZSAoKnApIGNoayArPSAqcCsrOworICAgICAg ICAgIHNwcmludGYoZm52YWwsIiVsdSIsY2hrKTsgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICBw ID0gZm52YWw7CisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgIH0KKworI2lmbmRlZiBOT1hG RVIKKyAgICAgIGNhc2UgRk5fQ1JDOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmNyYzE2KCkg Ki8KKyAgICAgICAgaWYgKGFyZ24gPiAwKQorICAgICAgICAgIHNwcmludGYoZm52YWwsIiV1Iiwg ICAgICAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgIGNoazMoKENIQVIgKilicFsw XSwoaW50KXN0cmxlbihicFswXSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHAgPSAiMCI7 CisgICAgICAgIGdvdG8gZm5lbmQ7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICAgIGNhc2Ug Rk5fQlNOOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZmJhc2VuYW1lKCkgKi8KKyAgICAgICAg enN0cmlwKGJwWzBdLCZwKTsKKyAgICAgICAgZ290byBmbmVuZDsKKworI2lmbmRlZiBOT0xPQ0FM CisjaWZkZWYgT1MyCisgICAgICBjYXNlIEZOX1NDUk5fQ1g6ICAgICAgICAgICAgICAgICAgLyog XGZzY3JuY3VyeCgpICovCisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgc3ByaW50ZihwLCIl ZCIsKGludClWc2NybkdldEN1clBvcyhWVEVSTSktPngpOyAvKiBTQUZFICovCisgICAgICAgIGdv dG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fU0NSTl9DWTogICAgICAgICAgICAgICAgICAvKiBc ZnNjcm5jdXJ5KCkgKi8KKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBzcHJpbnRmKHAsIiVk IiwoaW50KVZzY3JuR2V0Q3VyUG9zKFZURVJNKS0+eSk7IC8qIFNBRkUgKi8KKyAgICAgICAgZ290 byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9TQ1JOX1NUUjogeyAgICAgICAgICAgICAgIC8qIFxm c2NybnN0cigpICovCisgICAgICAgICAgdmlkZW9saW5lICogbGluZSA9IE5VTEw7CisgICAgICAg ICAgdmlvY2VsbCAqIGNlbGxzID0gTlVMTDsKKyAgICAgICAgICBpbnQgcm93ID0gMCwgY29sID0g MCwgbGVuID0gMDsKKyAgICAgICAgICAvKiBOT1RFOiBPbiBVbmljb2RlIHN5c3RlbXMsIHRoZSBz Y3JlZW4gY29udGVudHMgYXJlIHN0b3JlZCBpbiAqLworICAgICAgICAgIC8qIGluIFVuaWNvZGUu ICBUaGVyZWZvcmUsIHdlIHNob3VsZCByZWFsbHkgYmUgcGVyZm9ybWluZyBhICAgICovCisgICAg ICAgICAgLyogY29udmVyc2lvbiB0byB0aGUgbG9jYWwgY2hhcmFjdGVyIHNldC4gICAgICAgICAg ICAgICAgICAgICAgKi8KKworICAgICAgICAgIC8qIDYvMTgvMjAwMCAtIGFkZGVkIHRoZSB0cmFu c2xhdGlvbiB0byBsY3MgKi8KKworICAgICAgICAgIGlmIChicFswXSA9PSBOVUxMIHx8IGJwWzBd WzBdID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgcm93ID0gMDsKKyAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICBpZiAoY2hrbnVtKGJwWzBdKSkgeworICAgICAgICAgICAgICAgICAg cm93ID0gYXRvaShicFswXSk7CisgICAgICAgICAgICAgICAgICBpZiAocm93IDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgcm93ID0gMDsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAg ICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwp OworICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgfQorICAgICAg ICAgIH0KKyAgICAgICAgICBsaW5lID0gVnNjcm5HZXRMaW5lRnJvbVRvcCggVlRFUk0sIChVU0hP UlQpIHJvdyApOworICAgICAgICAgIGlmIChsaW5lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAg aWYgKGJwWzFdID09IE5VTEwgfHwgYnBbMV1bMF0gPT0gJ1wwJykKKyAgICAgICAgICAgICAgICBj b2wgPSAwOworICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGlmIChjaGtu dW0oYnBbMF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgY29sID0gYXRvaShicFsxXSk7Cisg ICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCA8IDAgfHwgY29sID49IGxpbmUtPndpZHRoKQor ICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gMDsKKyAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFs LEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05P VF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgZ290 byBmbmVuZDsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICBpZiAoYnBbMl0gPT0gTlVMTCB8fCBicFsyXVswXSA9PSAnXDAnKSB7CisgICAgICAgICAg ICAgICAgICBsZW4gPSBsaW5lLT53aWR0aCAtIChjb2wrMSk7CisgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICBpZiAoIWNoa251bShicFsyXSkpIHsKKyAgICAgICAgICAg ICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdz KQorICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixm biwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgbGVuID0gYXRvaShicFsyXSk7CisgICAg ICAgICAgICAgICAgICBpZiAobGVuIDwgMCB8fCBsZW4gPiBsaW5lLT53aWR0aCkKKyAgICAgICAg ICAgICAgICAgICAgbGVuID0gbGluZS0+d2lkdGg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgY2VsbHMgPSBsaW5lLT5jZWxsczsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gaSArIGNvbDsKKyAgICAg ICAgICAgICAgICAgIGlmIChwb3MgPCBsaW5lLT53aWR0aCkgeworICAgICAgICAgICAgICAgICAg ICAgIGlmIChpc3VuaWNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZudmFsW2ldID0g KENIQVIpIHV0b2x4bGF0KGNlbGxzW3Bvc10uYyk7CisgICAgICAgICAgICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICAgICAgICAgICAgZm52YWxbaV0gPSAoQ0hBUikgKGNlbGxzW3Bvc10u YyAmIDB4RkYpOworICAgICAgICAgICAgICAgICAgICAgIGlmIChmbnZhbFtpXSA9PSAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgZm52YWxbaV0gPSBTUDsKKyAgICAgICAgICAgICAgICAgIH0g ZWxzZQorICAgICAgICAgICAgICAgICAgICBmbnZhbFtpXSA9IFNQOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIGZudmFsW2ldID0gJ1wwJzsKKyAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICBmbnZhbFswXSA9ICdcMCc7CisgICAgICAgICAgfQorICAgICAgICAgIHAgPSBm bnZhbDsKKyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1BVU0gKKyAgICAgIGNhc2UgRk5fUkFX OiAgICAgICAgICAgICAgICAgICAgICAvKiBcZnJhd2NvbW1hbmQoKSAqLworICAgICAgY2FzZSBG Tl9DTUQ6IHsgICAgICAgICAgICAgICAgICAgIC8qIFxmY29tbWFuZCgpICovCisgICAgICAgICAg aW50IHgsIGMsIG4gPSBGTlZBTEw7CisgICAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ29tcGxldGlvbiBmbGFnICovCisvKgorICBaSUZJTEUgY2FuIGJlIHNhZmVseSB1 c2VkIGJlY2F1c2Ugd2UgY2FuJ3QgcG9zc2libHkgYmUgdHJhbnNmZXJyaW5nIGEgZmlsZQorICB3 aGlsZSBleGVjdXRpbmcgdGhpcyBmdW5jdGlvbi4KKyovCisgICAgICAgICAgaWYgKCFub3B1c2gg JiYgenhjbWQoWklGSUxFLGJwWzBdKSA+IDApIHsgLyogT3BlbiB0aGUgY29tbWFuZCAqLworICAg ICAgICAgICAgICB3aGlsZSAobi0tID4gLTEpIHsgICAgICAgIC8qIFJlYWQgZnJvbSBpdCAqLwor ICAgICAgICAgICAgICAgICAgaWYgKChjID0gem1pbmNoYXIoKSkgPCAwKSB7CisgICAgICAgICAg ICAgICAgICAgICAgeCA9IDE7ICAgICAgICAgICAgIC8qIEVPRiAtIHNldCBjb21wbGV0aW9uIGZs YWcgKi8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoY3ggPT0gRk5fQ01EKSB7IC8qIElmIG5v dCAicmF3Y29tbWFuZCIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcC0tOyAgICAgICAg ICAgLyogcmVtb3ZlIHRyYWlsaW5nIG5ld2xpbmVzICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHdoaWxlICgqcCA9PSBDUiB8fCAqcCA9PSBMRikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgKnAgPSBOVUw7ICAgICAgICAgLyogVGVy bWluYXRlIHRoZSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHN0aWxsIHJ1bm5p bmcgKi8KKyAgICAgICAgICAgICAgICAgICAgKnArKyA9IGM7ICAgICAgICAgICAvKiBDb3B5IHRo ZSBieXRlcyAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHpjbG9zZShaSUZJTEUp OyAgICAgICAgICAgLyogQ2xvc2UgdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgICB9CisgICAgICAg ICAgLyogUmV0dXJuIG51bGwgc3RyaW5nIGlmIGNvbW1hbmQncyBvdXRwdXQgd2FzIHRvbyBsb25n LiAqLworICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICBpZiAoIXgpIHsKKyAgICAgICAg ICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAg ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8 RVJST1I6UkVTVUxUX1RPT19MT05HOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgfQor ICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICB9CisjZW5kaWYgLyogTk9QVVNIICovCisgICAg fSAvKiBCcmVhayB1cCBiaWcgc3dpdGNoLi4uICovCisKKyAgICBzd2l0Y2ggKHkpIHsKKyAgICAg IGNhc2UgRk5fU1RYOiAgICAgICAgICAgICAgICAgICAgICAvKiBcZnN0cmlweChzdHJpbmcsYykg Ki8KKyAgICAgICAgaWYgKCEocyA9IGJwWzBdKSkgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUg dGhlcmUgaXMgYSBzdHJpbmcgKi8KKyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICBjID0g Jy4nOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciB0byBzdHJpcCBmcm9tICov CisgICAgICAgIGlmIChhcmduID4gMSkgaWYgKCpicFsxXSkgYyA9ICpicFsxXTsKKyAgICAgICAg biA9IGNrc3RybmNweShmbnZhbCxicFswXSxGTlZBTEwpOworICAgICAgICB3aGlsZSAoLS1uID49 IDApIHsKKyAgICAgICAgICAgIGlmIChmbnZhbFtuXSA9PSBjKSB7CisgICAgICAgICAgICAgICAg Zm52YWxbbl0gPSBOVUw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOworCisgICAg ICBjYXNlIEZOX1NUTDogICAgICAgICAgICAgICAgICAgICAgLyogXGZsb3Aoc3RyaW5nLGMpICov CisgICAgICBjYXNlIEZOX0xPUFg6IHsJCQkvKiBcZmxvcHgoc3RyaW5nLGMpICovCisJICBpbnQg biA9IDE7CisJICBpZiAoIShzID0gYnBbMF0pKQkJLyogTWFrZSBzdXJlIHRoZXJlIGlzIGEgc3Ry aW5nICovCisJICAgIGdvdG8gZm5lbmQ7CisJICBjID0gJy4nOwkJCS8qIENoYXJhY3RlciB0byBz dHJpcCB0byAqLworCSAgaWYgKGFyZ24gPiAxKSBpZiAoKmJwWzFdKSBjID0gKmJwWzFdOworCSAg aWYgKGFyZ24gPiAyKSBpZiAoKmJwWzJdKSB7CisjaWZuZGVmIE5PRkxPQVQKKwkgICAgICBuID0g MDsKKwkgICAgICBpZiAoaXNmbG9hdChicFsyXSwwKSkgeworCQkgIG4gPSAoaW50KWZsb2F0dmFs OworCQkgIGlmIChuIDwgMCkgbiA9IDA7CisJICAgICAgfSBlbHNlCisjZW5kaWYJLyogTk9GTE9B VCAqLworCQluID0gYXRvaShicFsyXSk7CisJICB9CisJICB4ID0gMDsKKwkgIGlmIChjeCA9PSBG Tl9MT1BYKSB7CQkvKiBMb3B4IChmcm9tIHJpZ2h0KSAqLworCSAgICAgIGlmIChuID09IDApCisJ CWdvdG8gZm5lbmQ7CisJICAgICAgcyArPSBzdHJsZW4ocykgLSAxOwkvKiBXZSBhbHJlYWR5IGtu b3cgaXQncyA+IDAgKi8KKwkgICAgICB3aGlsZSAocy0tID49IGJwWzBdKSB7CisJCSAgaWYgKCpz ID09IGMpIHsKKwkJICAgICAgbi0tOworCQkgICAgICBpZiAobiA9PSAwKSB7CisJCQkgIHMrKzsK KwkJCSAgeCA9IDE7CisJCQkgIGJyZWFrOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0KKwkg ICAgICBpZiAoIXgpIHMgPSAiIjsKKwkgIH0gZWxzZSB7CQkJLyogTG9wIChmcm9tIGxlZnQpICov CisJICAgICAgaWYgKG4gPT0gMCkgeworCQkgIHAgPSBicFswXTsKKwkJICBnb3RvIGZuZW5kOwor CSAgICAgIH0KKwkgICAgICB3aGlsZSAoKnMrKykgeworCQkgIGlmICgqKHMtMSkgPT0gYykgewor CQkgICAgICBpZiAoLS1uID09IDApIHsKKwkJCSAgeCA9IDE7CisJCQkgIGJyZWFrOworCQkgICAg ICB9CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBpZiAoIXgpIHMgPSBicFswXTsKKwkgIH0KKwkg IGNrc3RybmNweShmbnZhbCxzLEZOVkFMTCk7CisJICBwID0gZm52YWw7CisJICBnb3RvIGZuZW5k OworICAgICAgfQorICAgICAgY2FzZSBGTl9TVE46ICAgICAgICAgICAgICAgICAgICAgIC8qIFxm c3RyaXBuKHN0cmluZyxuKSAqLworICAgICAgICBpZiAoYXJnbiA8IDEpICAgICAgICAgICAgICAg ICAgIC8qIFJlbW92ZSBuIGNoYXJzIGZyb20gcmlnaHQgKi8KKyAgICAgICAgICBnb3RvIGZuZW5k OworICAgICAgICB2YWwxID0gIjAiOworICAgICAgICBpZiAoYXJnbiA+IDEpCisgICAgICAgICAg aWYgKCooYnBbMV0pKQorICAgICAgICAgICAgdmFsMSA9IGV2YWx4KGJwWzFdKTsKKyAgICAgICAg aWYgKCFjaGtudW0odmFsMSkpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAg ICBldmFsZXJyKGZuKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAg ICAgbiA9IGF0b2kodmFsMSk7CisgICAgICAgIGlmIChuIDwgMCkgbiA9IDA7CisgICAgICAgIGsg PSAoaW50KXN0cmxlbihzID0gYnBbMF0pIC0gbjsKKyAgICAgICAgaWYgKGsgPCAwKSBrID0gMDsK KyAgICAgICAgcCA9IGZudmFsOworICAgICAgICB3aGlsZSAoay0tID4gMCkKKyAgICAgICAgICAq cCsrID0gKnMrKzsKKyAgICAgICAgKnAgPSBOVUw7CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAg ICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9TVEI6IHsgICAgICAgICAgICAgICAgICAg IC8qIFxmc3RyaXBiKHN0cmluZyxjKSAqLworICAgICAgICAgIGNoYXIgYzIgPSBOVUw7CisgICAg ICAgICAgaW50IGksIGsgPSAwOworICAgICAgICAgIGNoYXIgKiBncl9vcG4gPSAiXCJ7JyhbPCI7 ICAgIC8qIEdyb3VwIG9wZW4gYnJhY2tldHMgKi8KKyAgICAgICAgICBjaGFyICogZ3JfY2xzID0g IlwifScpXT4iOyAgICAvKiBHcm91cCBjbG9zZSBicmFja2V0cyAqLworCisgICAgICAgICAgcCA9 IGZudmFsOworICAgICAgICAgICpwID0gTlVMOworICAgICAgICAgIGlmICghKHMgPSBicFswXSkp ICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHN0cmluZyAqLworICAgICAgICAg ICAgZ290byBmbmVuZDsKKyAgICAgICAgICBpZiAoKHggPSBzdHJsZW4ocykpIDwgMSkKKyAgICAg ICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgYyA9IE5VTDsgICAgICAgICAgICAgICAgICAg ICAgLyogQnJhY2UvYnJhY2tldCBraW5kICovCisgICAgICAgICAgaWYgKGFyZ24gPiAxKSB7Cisg ICAgICAgICAgICAgIGlmICgqYnBbMV0pIHsKKyAgICAgICAgICAgICAgICAgIGlmIChjaGtudW0o YnBbMV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgayA9IGF0b2koYnBbMV0pOworICAgICAg ICAgICAgICAgICAgICAgIGlmIChrIDwgMCkgayA9IDYzOworICAgICAgICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGsgJiAoMTw8aSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzWzBdID09 IGdyX29wbltpXSAmJiBzW3gtMV0gPT0gZ3JfY2xzW2ldKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLHMrMSxGTlZBTEwpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZudmFsW3gtMl0gPSBOVUw7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwscyxGTlZBTEwpOyAvKiBO byBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisJICBjID0gIWJwWzFdID8g MCA6ICpicFsxXTsKKyAgICAgICAgICBpZiAoIWMpIGMgPSBzWzBdOworICAgICAgICAgIGlmIChh cmduID4gMikgaWYgKCpicFsyXSkgYzIgPSAqYnBbMl07CisgICAgICAgICAgaWYgKCpzID09IGMp IHsKKyAgICAgICAgICAgICAgaWYgKCFjMikgeworICAgICAgICAgICAgICAgICAgc3dpdGNoIChj KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOiBjMiA9ICcpJzsgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIGNhc2UgJ1snOiBjMiA9ICddJzsgYnJlYWs7CisgICAgICAgICAgICAg ICAgICAgIGNhc2UgJ3snOiBjMiA9ICd9JzsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh c2UgJzwnOiBjMiA9ICc+JzsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJyInOiBj MiA9ICciJzsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6ICBjMiA9IDM5OyAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgOTY6ICBjMiA9IDM5OyAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGFy Z24gPT0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IGM7CisgICAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNweShm bnZhbCxzLHgpOyAvKiBMZWF2ZSBpdCBsaWtlIHRoaXMgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgZm52YWxbeF0gPSBOVUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5l bmQ7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzW3gtMV0gPT0gYzIpIHsKKyAgICAgICAgICAg ICAgICAgIHN0cm5jcHkoZm52YWwscysxLHgtMik7IC8qIExlYXZlIGl0IGxpa2UgdGhpcyAqLwor ICAgICAgICAgICAgICAgICAgZm52YWxbeC0yXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgc3RybmNw eShmbnZhbCxzLHgpOworICAgICAgICAgIGZudmFsW3hdID0gTlVMOworICAgICAgICAgIGdvdG8g Zm5lbmQ7CisgICAgICB9CisKKyAgICAgIGNhc2UgRk5fMkhFWDogICAgICAgICAgICAgICAgICAg ICAvKiBOdW1iZXIgdG8gaGV4ICovCisgICAgICBjYXNlIEZOXzJPQ1Q6ICAgICAgICAgICAgICAg ICAgICAgLyogTnVtYmVyIHRvIG9jdGFsICovCisgICAgICAgIHZhbDEgPSBldmFseChicFswXSk7 CisgICAgICAgIGlmICghKnZhbDEpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAg ICAgICBldmFsZXJyKGZuKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAg ICAgICAgc3ByaW50ZihmbnZhbCwgY3ggPT0gRk5fMkhFWCA/ICIlbHgiIDogIiVsbyIsIGF0b2wo dmFsMSkpOyAvKiBTQUZFICovCisgICAgICAgIGlmIChjeCA9PSBGTl8ySEVYICYmIChpbnQpKHN0 cmxlbihmbnZhbCkmMSkpCisgICAgICAgICAgc3ByaW50ZihmbnZhbCwiMCVseCIsYXRvbCh2YWwx KSk7IC8qIFNBRkUgKi8KKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOwor CisgICAgICBjYXNlIEZOX0ROQU06IHsgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5IHBh cnQgb2YgZmlsZSBuYW1lICovCisgICAgICAgICAgY2hhciAqczsKKyAgICAgICAgICB6Zm5xZnAo YnBbMF0sRk5WQUxMLHApOyAgICAgICAvKiBHZXQgZnVsbCBuYW1lICovCisgICAgICAgICAgaWYg KCFpc2RpcihwKSkgeyAgICAgICAgICAgICAgLyogSXMgaXQgYWxyZWFkeSBhIGRpcmVjdG9yeT8g Ki8KKyAgICAgICAgICAgICAgenN0cmlwKHAsJnMpOyAgICAgICAgICAgICAvKiBObyBnZXQgYmFz ZW5hbWUgKi8KKyAgICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAgICB4ID0g Y2tpbmRleChzLHAsMCwwLDApOyAvKiBQb3Mgb2YgbGF0dGVyIGluIGZvcm1lciAqLworICAgICAg ICAgICAgICAgICAgaWYgKHggPiAwKSBwW3gtMV0gPSBOVUw7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICB9CisgICAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgICAgZ290byBmbmVu ZDsKKyAgICAgIH0KKworI2lmbmRlZiBOT1JBTkRPTQorICAgICAgY2FzZSBGTl9SQU5EOiAgICAg ICAgICAgICAgICAgICAgIC8qIFJhbmRvbSBudW1iZXIgKi8KKyNpZmRlZiBDS19TU0wKKyAgICAg ICAgaWYgKFJBTkRfYnl0ZXMoKHVuc2lnbmVkIGNoYXIgKikmayxzaXplb2YoaykpIDwgMCkKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICBrID0gcmFuZCgpOworICAgICAgICB4ID0gMDsK KyAgICAgICAgaWYgKGFyZ24gPiAwKSB7CisgICAgICAgICAgICBpZiAoIWNoa251bShicFswXSkp IHsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIGlmIChmbmRp YWdzKQorICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixO VUxMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgeCA9IGF0b2koYnBbMF0pOworICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAg ICBzcHJpbnRmKGZudmFsLCIlZCIsICh4ID4gMCAmJiBrID4gMCkgfHwgKHggPCAwICYmIGsgPCAw KSA/IGsgJSB4IDogCisgICAgICAgICAgICAgICAgKHggPT0gMCA/IDAgOiAoMCAtIChrICUgKC14 KSkpKSk7CisjZWxzZQorICAgICAgICBkZWJ1ZyhGMTExLCJyYW5kIixja2l0b2EoeCksayk7Cisj aWZkZWYgU1VOT1M0CisvKiBUaGlzIGlzIHJlYWxseSBzdHJhbmdlIGJ1dCBvbiBTdW5PUywgaWYg d2UgYXJlIHJlcXVlc3RpbmcgcmFuZG9tIG51bWJlcnMgKi8KKy8qIGJldHdlZW4gMCBhbmQgNCBv ciBsZXNzLCB0aGV5IGFsd2F5cyBjb21lIG91dCBpbiBzZXF1ZW5jZTogMCAxIDIgMyAwIDEgMiAq LworLyogU2hpZnRpbmcgdGhlIHJlc3VsdCBvZiByYW5kKCkgaW4gdGhpcyBjYXNlIGdpdmVzIGEg bW9yZSByYW5kb20gcmVzdWx0LiAgICovCisgICAgICAgIGlmICh4IDwgNSkKKyAgICAgICAgICBr ID0gayA+PiA1OworI2VuZGlmIC8qIFNVTk9TNCAqLworICAgICAgICBpZiAoKHggPiAwICYmIGsg PiAwKSB8fCAoeCA8IDAgJiYgayA8IDApKQorICAgICAgICAgIHggPSBrICUgeDsKKyAgICAgICAg ZWxzZSBpZiAoeCA9PSAwKQorICAgICAgICAgIHggPSAwOworICAgICAgICBlbHNlCisgICAgICAg ICAgeCA9IDAgLSAoayAlICgteCkpOworICAgICAgICBkZWJ1ZyhGMTAxLCJyYW5kIHgiLCIiLHgp OworICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsIHgpOyAgICAgICAgIC8qIFNBRkUgKi8KKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290byBmbmVu ZDsKKyNlbmRpZiAvKiBOT1JBTkRPTSAqLworICAgIH0gLyogQnJlYWsgdXAgYmlnIHN3aXRjaC4u LiAqLworCisgICAgc3dpdGNoICh5KSB7CisgICAgICBjYXNlIEZOX1NQTElUOiAgICAgICAgICAg ICAgICAgICAgLyogXGZzcGxpdChzMSxhLHMyLHMzLG1hc2spICovCisgICAgICBjYXNlIEZOX1dP UkQ6IHsgICAgICAgICAgICAgICAgICAgLyogXGZ3b3JkKHMxLG4sczIsczMsbWFzaykgKi8KKyAg ICAgICAgICBpbnQgd29yZG51bSA9IDA7CisgICAgICAgICAgaW50IHNwbGl0dGluZyA9IDA7Cisg ICAgICAgICAgaW50IHg7CisgICAgICAgICAgaW50IGFycmF5ID0gMDsKKyAgICAgICAgICBpbnQg Z3JvdXBpbmcgPSAwOworICAgICAgICAgIGludCBub2NvbGxhcHNlID0gMDsKKyAgICAgICAgICBj aGFyICogc2VwID0gIiI7CisgICAgICAgICAgY2hhciAqIG5vdHNlcCA9ICIiOworICAgICAgICAg IGNoYXIgKiBicDAgPSBOVUxMOworICAgICAgICAgIGNoYXIgKiBicDEgPSBOVUxMOworICAgICAg ICAgIGNoYXIgICBhYnVmWzE2XTsKKyAgICAgICAgICBzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxID0g TlVMTDsKKworICAgICAgICAgIHNwbGl0dGluZyA9IChjeCA9PSBGTl9TUExJVCk7IC8qIE91ciBq b2IgKi8KKwkgIGRlYnVnKEYxMDEsIkZOX1NQTElUIHNwbGl0dGluZyIsIiIsc3BsaXR0aW5nKTsK KworICAgICAgICAgIGZudmFsWzBdID0gc3BsaXR0aW5nID8gJzAnIDogTlVMOyAvKiBJbml0aWFs IHJldHVybiB2YWx1ZSAqLworICAgICAgICAgIGZudmFsWzFdID0gTlVMOworICAgICAgICAgIHAg PSBmbnZhbDsKKyAgICAgICAgICBicDAgPSBicFswXTsgICAgICAgICAgICAgICAgICAvKiBTb3Vy Y2Ugc3RyaW5nICovCisgICAgICAgICAgaWYgKCFicDApIGJwMCA9ICIiOworICAgICAgICAgIGRl YnVnKEYxMTEsImZzcGxpdCBicFswXSIsYnAwLGFyZ24pOworICAgICAgICAgIGlmIChhcmduIDwg MSB8fCAhKmJwMCkgICAgICAgIC8qIElmIG5vbmUsIHJldHVybiBkZWZhdWx0IHZhbHVlICovCisg ICAgICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICAgICAgYnAxID0gYnBbMV07ICAgICAgICAg ICAgICAgICAgLyogRnVuY3Rpb24tZGVwZW5kZW50IGFyZyAqLworICAgICAgICAgIGlmICghYnAx KSBicDEgPSAiIjsgICAgICAgICAgIC8qIChhcnJheSBvciBudW1iZXIpICovCisgICAgICAgICAg ZGVidWcoRjExMCwiZnNwbGl0IGJwWzFdIixicDEsMCk7CisgICAgICAgICAgaWYgKGJwWzVdKSB7 CisgICAgICAgICAgICAgIGlmICghY2hrbnVtKGJwWzVdKSkgeworICAgICAgICAgICAgICAgICAg ZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4s IigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIHggPSBhdG9pKGJwWzVdKTsKKyAgICAgICAgICAgICAgbm9jb2xs YXBzZSA9IHg7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICghc3BsaXR0aW5nKSB7ICAgICAg ICAgICAgIC8qIFxmd29yZCgpOiBuID0gZGVzaXJlZCB3b3JkIG51bWJlciAqLworICAgICAgICAg ICAgICB2YWwxID0gIjEiOyAgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgZmlyc3Qgd29yZCAq LworICAgICAgICAgICAgICBpZiAoYXJnbiA+IDEpICAgICAgICAgICAgIC8qIFdvcmQgbnVtYmVy IHN1cHBsaWVkICovCisgICAgICAgICAgICAgICAgaWYgKCpicDEpCisgICAgICAgICAgICAgICAg ICB2YWwxID0gZXZhbHgoYnAxKTsKKyAgICAgICAgICAgICAgaWYgKCFjaGtudW0odmFsMSkpIHsK KyAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgICBja21ha21z ZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19O T1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgICAgZ290byBm bmVuZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBuID0gYXRvaSh2YWwxKTsKKyAg ICAgICAgICB9IGVsc2UgaWYgKGFyZ24gPiAxICYmICpicDEpIHsgLyogXGZzcGxpdCgpOiBuID0g d29yZCBjb3VudCAqLworICAgICAgICAgICAgICBja3N0cm5jcHkoYWJ1ZixicDEsMTYpOyAgIC8q IEdldCBhcnJheSByZWZlcmVuY2UgKi8KKyAgICAgICAgICAgICAgZGVidWcoRjExMCwiZnNwbGl0 IGFidWYgMSIsYWJ1ZiwwKTsKKyAgICAgICAgICAgICAgZmFpbGVkID0gMTsgICAgICAgICAgICAg ICAvKiBBc3N1bWUgaXQncyBiYWQgKi8KKyAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAg ICAgICAgICAvKiBEZWZhdWx0IGlzIHRoaXMgZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPEVS Uk9SOkFSR19CQURfQVJSQVk6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgaWYg KGFidWZbMF0gIT0gJyYnKSAgICAgICAvKiAiQWRkcmVzcyIgb2YgYXJyYXkgKi8KKyAgICAgICAg ICAgICAgICBnb3RvIGZuZW5kOyAgICAgICAgICAgICAvKiBJdCdzIGJhZCAqLworICAgICAgICAg ICAgICBpZiAoYWJ1ZlsyXSkgeyAgICAgICAgICAgIC8qIENoZWNrIGZvciBicmFja2V0cyAqLwor ICAgICAgICAgICAgICAgICAgaWYgKGFidWZbMl0gIT0gJ1snIHx8IGFidWZbM10gIT0gJ10nKSB7 CisgICAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsgICAgICAgLyogQmFkICovCisgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZGVidWcoRjEx MCwiZnNwbGl0IGFidWYgMiIsYWJ1ZiwwKTsKKyAgICAgICAgICAgICAgaWYgKGFidWZbMV0gPiA2 NCAmJiBhYnVmWzFdIDwgOTEpIC8qIENvbnZlcnQgdXBwZXIgdG8gbG93ZXIgKi8KKyAgICAgICAg ICAgICAgICBhYnVmWzFdICs9IDMyOworICAgICAgICAgICAgICBpZiAoYWJ1ZlsxXSA8IDk3IHx8 IGFidWZbMV0gPiAxMjIpIHsgLyogQ2hlY2sgZm9yIGEteiAqLworICAgICAgICAgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJm c3BsaXQgYWJ1ZiAzIixhYnVmLDApOworICAgICAgICAgICAgICBhcnJheSA9IDE7CisgICAgICAg ICAgICAgIGZudmFsWzBdID0gTlVMOyAgICAgICAgICAgLyogTm8gZXJyb3IsIGVyYXNlIG1lc3Nh Z2UgKi8KKyAgICAgICAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAvKiBVbnNldCBm YWlsdXJlIGZsYWcgKi8KKyAgICAgICAgICAgICAgbiA9IDA7ICAgICAgICAgICAgICAgICAgICAv KiBJbml0aWFsaXplIHdvcmQgY291bnRlciAqLworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAo YXJnbiA+IDIpICAgICAgICAgICAgICAgICAvKiBIYXZlIGJyZWFrIHNldD8gKi8KKyAgICAgICAg ICAgIHNlcCA9IGJwWzJdOworICAgICAgICAgIGRlYnVnKEYxMTEsImZzcGxpdCBzZXAiLHNlcCxh cmduKTsKKyAgICAgICAgICBpZiAoYXJnbiA+IDMpICAgICAgICAgICAgICAgICAvKiBIYXZlIGlu Y2x1ZGUgc2V0PyAqLworICAgICAgICAgICAgbm90c2VwID0gYnBbM107CisgICAgICAgICAgZGVi dWcoRjExMSwiZnNwbGl0IG5vdHNlcCIsbm90c2VwLGFyZ24pOworICAgICAgICAgIGlmIChhcmdu ID4gNCkgeyAgICAgICAgICAgICAgIC8qIEhhdmUgZ3JvdXBpbmcgc2V0PyAqLworICAgICAgICAg ICAgICBjaGFyICogYnA0ID0gYnBbNF07CisgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImZzcGxp dCBicDQiLGJwNCxhcmduKTsKKyAgICAgICAgICAgICAgaWYgKCFicDQpIGJwNCA9ICIwIjsKKyAg ICAgICAgICAgICAgaWYgKCEqYnA0KSBicDQgPSAiMCI7CisgICAgICAgICAgICAgIGlmIChjaGtu dW0oYnA0KSkgeworICAgICAgICAgICAgICAgICAgZ3JvdXBpbmcgPSBhdG9pKGJwNCk7CisgICAg ICAgICAgICAgICAgICBpZiAoZ3JvdXBpbmcgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGdy b3VwaW5nID0gMTI3OworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAg ICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAg ICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg ICAgICAgIC8qIEFyZ3MgcGFyc2VkLCBub3cgZG8gdGhlIHdvcmsgKi8KKworICAgICAgICAgIGRl YnVnKEYxMTEsImZzcGxpdCBicDAiLGJwMCxuKTsKKyAgICAgICAgICBxID0gY2tzcGxpdChzcGxp dHRpbmcsbixicDAsc2VwLG5vdHNlcCxncm91cGluZywwLG5vY29sbGFwc2UpOworCisgICAgICAg ICAgd29yZG51bSA9IHEgPyBxLT5hX3NpemUgOiAtMTsgLyogQ2hlY2sgcmVzdWx0ICovCisgICAg ICAgICAgaWYgKHdvcmRudW0gPCAwKSB7CisgICAgICAgICAgICAgIGZhaWxlZCA9IDE7ICAgICAg ICAgICAgICAgLyogRmFpbHVyZSAqLworICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAg ICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgKHdvcmRudW0gPT0gLTEpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOk1B TExPQ19GQUlMVVJFOlxcZiIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6VE9P X01BTllfV09SRFM6XFxmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAiKCk+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMCisg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAg ICAgICAgICB9CisgICAgICAgICAgaWYgKHNwbGl0dGluZykgeyAgICAgICAgICAgICAgLyogXGZz cGxpdCgpIHJlc3VsdCAqLworICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsY2tpdG9hKHdv cmRudW0pLEZOVkFMTCk7CisgICAgICAgICAgICAgIGlmIChhcnJheSkgeyAgICAgICAgICAgICAg LyogQXJyYXkgd2FzIG5vdCBkZWNsYXJlZC4gKi8KKyAgICAgICAgICAgICAgICAgIGludCBpOwor ICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gZGNsYXJyYXkoYWJ1ZlsxXSx3b3JkbnVtKSkgPCAw KSB7IC8qIERlY2xhcmUgaXQuICovCisgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICI8RVJST1I6TUFMTE9DX0ZBSUxVUkU6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgZm9yIChpID0gMTsgaSA8PSB3b3JkbnVtOyBpKyspIHsgLyogQ29weSByZXN1bHRz ICovCisgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKGFfcHRyW3hdW2ldKSxxLT5hX2hl YWRbaV0pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYV9wdHJbeF1b MF0gPSBOVUxMOyAgIC8qIEFycmF5IGlzIDEtYmFzZWQgKi8KKyAgICAgICAgICAgICAgICAgIG1h a2VzdHIoJihhX3B0clt4XVswXSksZm52YWwpOyAvKiBFbGVtZW50ID0gc2l6ZSAqLworICAgICAg ICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogXGZ3 b3JkKCkgcmVzdWx0ICovCisgICAgICAgICAgICAgIGNoYXIgKiBzOworICAgICAgICAgICAgICBz ID0gcS0+YV9oZWFkWzFdOworICAgICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAg ICAgICAgY2tzdHJuY3B5KGZudmFsLHMsRk5WQUxMKTsKKyAgICAgICAgICB9CisgICAgICAgICAg Z290byBmbmVuZDsgICAgICAgICAgICAgICAgICAgLyogRG9uZSAqLworICAgICAgfQorCisgICAg fSAvKiBCcmVhayB1cCBiaWcgc3dpdGNoLi4uICovCisKKyAgICBzd2l0Y2ggKHkpIHsKKworI2lm ZGVmIENLX0tFUkJFUk9TCisgICAgICBjYXNlIEZOX0tSQl9USzogICAgICAgICAgICAgICAgICAg LyogS2VyYmVyb3MgdGlja2V0cyAqLworICAgICAgY2FzZSBGTl9LUkJfTlg6ICAgICAgICAgICAg ICAgICAgIC8qIEtlcmJlcm9zIG5leHQgdGlja2V0ICovCisgICAgICBjYXNlIEZOX0tSQl9JVjog ICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgdGlja2V0IGlzIHZhbGlkICovCisgICAgICBj YXNlIEZOX0tSQl9GRzogICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgVGlja2V0IGZsYWdz ICovCisgICAgICBjYXNlIEZOX0tSQl9UVDogeyAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3Mg dGlja2V0IHRpbWUgKi8KKyAgICAgICAgICBpbnQga3YgPSAwOyAgICAgICAgICAgICAgICAgICAv KiBLZXJiZXJvcyB2ZXJzaW9uICovCisgICAgICAgICAgaW50IG4gPSAwOworICAgICAgICAgIGNo YXIgKiBzID0gTlVMTDsKKyAgICAgICAgICBpZiAocmRpZ2l0cyhicFswXSkpIHsKKyAgICAgICAg ICAgICAga3YgPSBhdG9pKGJwWzBdKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAg ICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJP UjpBUkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgZ290 byBmbmVuZDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKGt2ICE9IDQgJiYga3YgIT0gNSkg eworICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICBpZiAoZm5kaWFncykK KyAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICgoY3gg PT0gRk5fS1JCX0lWIHx8IGN4ID09IEZOX0tSQl9UVCB8fCBjeCA9PSBGTl9LUkJfRkcpICYmCisg ICAgICAgICAgICAgICBhcmduIDwgMikgeworICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAg ICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxG TlZBTEwsIjxFUlJPUjpNSVNTSU5HX0FSRzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAg ICAgICBnb3RvIGZuZW5kOworICAgICAgICAgIH0KKyAgICAgICAgICBzd2l0Y2ggKHkpIHsKKyAg ICAgICAgICAgIGNhc2UgRk5fS1JCX1RLOiAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgS2VyYmVy b3MgdGlja2V0cyAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgICAgIHN3 aXRjaCAoa3YpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICBu ID0gY2tfa3JiNF9nZXRfdGt0cygpOworICAgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwg IiVkIiwgKG4gPj0gMCkgPyBuIDogMCk7IC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgY2FzZSA1OiB7CisgICAgICAgICAgICAgICAgICAg IGV4dGVybiBjaGFyICoga3JiNV9kX2NjOworICAgICAgICAgICAgICAgICAgICBuID0gY2tfa3Ji NV9nZXRfdGt0cyhrcmI1X2RfY2MpOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFs LCAiJWQiLCAobiA+PSAwKSA/IG4gOiAwKTsgLyogU0FGRSAqLworICAgICAgICAgICAgICAgICAg ICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorI2Vsc2UK KyAgICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLDApOyAgICAvKiBTQUZFICovCisjZW5k aWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKwor ICAgICAgICAgICAgY2FzZSBGTl9LUkJfTlg6ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIG5leHQg dGlja2V0ICovCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICAgICAgICAgICAgc3dpdGNo IChrdikgeworICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgIHMgPSBj a19rcmI0X2dldF9uZXh0X3RrdCgpOworICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFs LCBzID8gcyA6ICIiLEZOVkFMTCk7CisgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAg ICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgIHMgPSBja19rcmI1X2dldF9u ZXh0X3RrdCgpOworICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLCBzID8gcyA6ICIi LEZOVkFMTCk7CisgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICB9 CisjZWxzZQorICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCJrJWQgbmV4dC10aWNrZXQtc3Ry aW5nIixrdik7IC8qIFNBRkUgKi8KKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAg ICAgICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICAgICAgICBjYXNlIEZOX0tSQl9JVjogICAg ICAgICAgICAgLyogS2VyYmVyb3MgdGlja2V0IGlzIHZhbGlkICovCisjaWZkZWYgQ0tfQVVUSEVO VElDQVRJT04KKyAgICAgICAgICAgICAgLyogUmV0dXJuIDEgaWYgdmFsaWQsIDAgaWYgbm90ICov CisgICAgICAgICAgICAgIHN3aXRjaCAoa3YpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6Cisg ICAgICAgICAgICAgICAgICBuID0gY2tfa3JiNF90a3RfaXN2YWxpZChicFsxXSk7CisgICAgICAg ICAgICAgICAgICBzcHJpbnRmKGZudmFsLCAiJWQiLCBuID4gMCA/IDEgOiAwKTsgLyogU0FWRSAq LworICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICBjYXNlIDU6 IHsKKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7CisgICAgICAg ICAgICAgICAgICAgIG4gPSBja19rcmI1X3RrdF9pc3ZhbGlkKGtyYjVfZF9jYyxicFsxXSk7Cisg ICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIiwgbiA+IDAgPyAxIDogMCk7IC8q IFNBRkUgKi8KKyAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgIHNwcmludGYoZm52YWws IiVkIiwwKTsgICAgLyogU0FGRSAqLworI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgICAgICAgIGNhc2UgRk5fS1JCX1RUOiAg ICAgICAgICAgICAvKiBLZXJiZXJvcyB0aWNrZXQgdGltZSAqLworI2lmZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCisgICAgICAgICAgICAgIHN3aXRjaCAoa3YpIHsKKyAgICAgICAgICAgICAgICBjYXNl IDQ6CisgICAgICAgICAgICAgICAgICBuID0gY2tfa3JiNF90a3RfdGltZShicFsxXSk7CisgICAg ICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsIG4gPj0gMCA/IG4gOiAwKTsgLyogU0FG RSAqLworICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICBjYXNl IDU6IHsKKyAgICAgICAgICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfY2M7CisgICAg ICAgICAgICAgICAgICAgIG4gPSBja19rcmI1X3RrdF90aW1lKGtyYjVfZF9jYyxicFsxXSk7Cisg ICAgICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIiwgbiA+PSAwID8gbiA6IDApOyAv KiBTQUZFICovCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICBja3N0cm5jcHkoZm52 YWwsIjYwMCIsRk5WQUxMKTsgLyogU29tZSB0aW1lICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElD QVRJT04gKi8KKyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgICAgICAgY2FzZSBG Tl9LUkJfRkc6ICAgICAgICAgICAgIC8qIEtlcmJlcm9zIHRpY2tldCBmbGFncyAqLworI2lmZGVm IENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgICAgICAgIHN3aXRjaCAoa3YpIHsKKyAgICAgICAg ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICBmbnZhbFswXSA9ICdcMCc7CisgICAg ICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgIGNhc2UgNTogeworICAg ICAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKKyAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KGZudmFsLGNrX2tyYjVfdGt0X2ZsYWdzKGtyYjVfZF9jYyxicFsxXSks Rk5WQUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgIGZudmFsWzBdID0gJ1ww JzsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworICAgICAgICAgICAgICBnb3RvIGZu ZW5kOworICAgICAgICAgIH0KKyAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgZ290byBm bmVuZDsKKyAgICAgIH0KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZkZWYgRk5fRVJS TVNHCisgICAgICBjYXNlIEZOX0VSUk1TRzoKKyAgICAgICAgaWYgKHJkaWdpdHMoYnBbMF0pKSB7 CisgICAgICAgICAgICBrID0gYXRvaShicFswXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAg Y2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigp PiIsTlVMTCk7CisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisjaWZkZWYgVk1T CisgICAgICAgIGNrc3RybmNweShmbnZhbCxja3Ztc2VycnN0cihrKSxGTlZBTEwpOworI2Vsc2UK KyAgICAgICAgeCA9IGVycm5vOworICAgICAgICBlcnJubyA9IGs7CisgICAgICAgIGNrc3RybmNw eShmbnZhbCxja19lcnJzdHIoKSxGTlZBTEwpOworICAgICAgICBlcnJubyA9IHg7CisjZW5kaWYg LyogVk1TICovCisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290byBmbmVuZDsKKyNlbmRp ZiAvKiBGTl9FUlJNU0cgKi8KKworICAgICAgY2FzZSBGTl9ESU06IHsKKyAgICAgICAgICBpbnQg bWF4OworICAgICAgICAgIGNoYXIgYWJ1ZlsxNl0sICpzOworICAgICAgICAgIGZudmFsWzBdID0g TlVMOyAgICAgICAgICAgICAgIC8qIEluaXRpYWwgcmV0dXJuIHZhbHVlICovCisgICAgICAgICAg Y2tzdHJuY3B5KGFidWYsYnBbMF0sMTYpOyAgICAgLyogR2V0IGFycmF5IHJlZmVyZW5jZSAqLwor ICAgICAgICAgIHMgPSBhYnVmOworICAgICAgICAgIGlmICgqcyA9PSBDTURRKSBzKys7CisgICAg ICAgICAgZmFpbGVkID0gMTsgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGl0J3MgYmFkICov CisgICAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVz dWx0ICovCisgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAgICAgLyogRGVmYXVs dCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZO VkFMTCwiPEVSUk9SOkFSR19CQURfQVJSQVk6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAg ICBpZiAoc1swXSAhPSAnJicpIHsgICAgICAgICAgICAvKiAiQWRkcmVzcyIgb2YgYXJyYXkgKi8K KyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHNb Ml0pIHsKKyAgICAgICAgICAgICAgaWYgKHNbMl0gIT0gJ1snIHx8IHNbM10gIT0gJ10nKSB7Cisg ICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICB9CisgICAgICAgICAg fQorICAgICAgICAgIGlmIChzWzFdID49IDY0ICYmIHNbMV0gPCA5MSkgIC8qIENvbnZlcnQgdXBw ZXIgdG8gbG93ZXIgKi8KKyAgICAgICAgICAgIHNbMV0gKz0gMzI7CisgICAgICAgICAgaWYgKHNb MV0gPCA5NSB8fCBzWzFdID4gMTIyKSB7IC8qIENoZWNrIGZvciBhLXogKi8KKyAgICAgICAgICAg ICAgZ290byBmbmVuZDsJIAkgLyogQmFkICovCisgICAgICAgICAgfQorICAgICAgICAgIGlmICgo bWF4ID0gY2hrYXJyYXkoc1sxXSwxKSkgPCAxKSAvKiAoc2Vjb25kIGFyZyB3YXMgMSkgKi8KKyAg ICAgICAgICAgIG1heCA9IDA7CisgICAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAg ICAgLyogVW5zZXQgZmFpbHVyZSBmbGFnICovCisgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWQi LG1heCk7ICAgICAgLyogU0FGRSAqLworICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICB9CisK KyAgICB9IC8qIEJyZWFrIHVwIGJpZyBzd2l0Y2guLi4gKi8KKworICAgIHN3aXRjaCAoeSkgewor ICAgICAgY2FzZSBGTl9KREFURToKKyAgICAgICAgaWYgKGFyZ24gPCAxKSAgICAgICAgICAgICAg ICAgICAvKiBDaGVjayBudW1iZXIgb2YgYXJncyAqLworICAgICAgICAgIHAgPSBja2RhdGUoKTsg ICAgICAgICAgICAgICAgIC8qIE5vbmUsIGdldCB0b2RheSdzIGRhdGUtdGltZSAqLworICAgICAg ICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgKi8KKyAgICAgICAgICBw ID0gYnBbMF07ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZmlyc3QgKi8KKyAgICAgICAgcCA9 IGNrY3Z0ZGF0ZShwLDApOyAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIHN0YW5kYXJkIGZvcm0g Ki8KKyAgICAgICAgY2tzdHJuY3B5KGZudmFsLHpqZGF0ZShwKSxGTlZBTEwpOyAvKiBDb252ZXJ0 IHRvIEp1bGlhbiAqLworICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAgIC8q IFBvaW50IHRvIHJlc3VsdCAqLworICAgICAgICBmYWlsZWQgPSAwOworICAgICAgICBpZiAoKnAg PT0gJy0nKSB7CisgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgaWYgKGZuZGlh Z3MpICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCisg ICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfREFURTpc XGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICB9CisgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAg ICAgIGNhc2UgRk5fREFURUo6CisgICAgICAgIGNrc3RybmNweShmbnZhbCxqemRhdGUoYnBbMF0p LEZOVkFMTCk7IC8qIENvbnZlcnQgdG8geXl5eTxkYXlvZnllYXI+ICovCisgICAgICAgIHAgPSBm bnZhbDsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0ICovCisgICAgICAg IGZhaWxlZCA9IDA7CisgICAgICAgIGlmICgqcCA9PSAnLScpIHsKKyAgICAgICAgICAgIGZhaWxl ZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAgICAgLyogRGVmYXVs dCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWws Rk5WQUxMLCI8RVJST1I6QVJHX0JBRF9EQVRFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAg IH0KKyAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9EVElNOiAgICAgICAgICAg ICAgICAgICAgIC8qIFxmY3Z0ZGF0ZSgpICovCisgICAgICBjYXNlIEZOX1RJTUU6ICAgICAgICAg ICAgICAgICAgICAgLyogRnJlZS1mb3JtYXQgdGltZSB0byBoaDptbTpzcyAqLworICAgICAgY2Fz ZSBGTl9OVElNOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgdG8gc2VjIHNpbmNlIG1pZG5p Z2h0ICovCisgICAgICAgIHMgPSAoYXJnbiA+IDApID8gYnBbMF0gOiAiIjsKKyAgICAgICAgaWYg KCFzKSBzID0gIiI7CisgICAgICAgIGlmICghKnMpCisgICAgICAgICAgcCA9IGNrZGF0ZSgpOyAg ICAgICAgICAgICAgICAgLyogTm9uZSwgZ2V0IHRvZGF5J3MgZGF0ZSAqLworICAgICAgICBlbHNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgKi8KKyAgICAgICAgICBwID0gYnBb MF07ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgZmlyc3QgKi8KKwl7CisJICAgIGNoYXIgKiBz OworCSAgICBzID0gcDsKKwkgICAgd2hpbGUgKCpzKSB7CisJCWlmICgqcyA8IDMyKSB7CisJCSAg ICAqcyA9IE5VTDsKKwkJICAgIGJyZWFrOworCQl9CisJCXMrKzsKKwkgICAgfQorCSAgICAvKiBk byB7IGlmICgqcyA8ICchJykgKnMgPSBOVUw7IGJyZWFrOyB9IHdoaWxlICgqcysrKTsgKi8KKwl9 CisgICAgICAgIHAgPSBja2N2dGRhdGUocCwyKTsgICAgICAgICAgICAgLyogQ29udmVydCB0byBz dGFuZGFyZCBmb3JtICovCisgICAgICAgIGlmICgqcCA9PSAnPCcpIHsKKyAgICAgICAgICAgIGZh aWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAgICAgLyogRGVm YXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19CQURfREFURV9P Ul9USU1FOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICBwID0gZm52YWw7CisgICAg ICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgICAgIGlmIChhcmduID4gMSkgewkJ CS8qIEZvcm1hdCBjb2RlICovCisgICAgICAgICAgICBzID0gYnBbMV07CisgICAgICAgICAgICBp ZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgICAgIGlmICghKnMpIHMgPSAiMCI7CisgICAgICAgICAg ICBpZiAoIWNoa251bShzKSkgeworICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAg ICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxG TlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJ QzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgIHAgPSBmbnZhbDsKKyAgICAg ICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeCA9IGF0 b2kocyk7CisgICAgICAgICAgICAvKiBpZiAoeCkgKi8gcCA9IHNodWZmbGVkYXRlKHAseCk7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGN4ID09IEZOX1RJTUUpIHsKKyAgICAgICAgICAgIHAgKz0g OTsKKyAgICAgICAgfSBlbHNlIGlmIChjeCA9PSBGTl9OVElNKSB7CisgICAgICAgICAgICBsb25n IHNlYyA9IDBMOworICAgICAgICAgICAgcFsxMV0gPSBOVUw7CisgICAgICAgICAgICBwWzE0XSA9 IE5VTDsKKyAgICAgICAgICAgIHNlYyA9IGF0b2wocCs5KSAqIDM2MDBMICsgYXRvbChwKzEyKSAq IDYwTCArIGF0b2wocCsxNSk7CisgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlbGQiLHNlYyk7 ICAgLyogU0FGRSAqLworICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICB9CisgICAgICAg IGdvdG8gZm5lbmQ7CisKKyAgICAgIGNhc2UgRk5fTUpEOiAgICAgICAgICAgICAgICAgICAgICAv KiBNb2RpZmllZCBKdWxpYW4gRGF0ZSAqLworICAgICAgICBpZiAoYXJnbiA8IDEpICAgICAgICAg ICAgICAgICAgIC8qIENoZWNrIG51bWJlciBvZiBhcmdzICovCisgICAgICAgICAgcCA9IHp6bmRh dGUoKTsgICAgICAgICAgICAgICAgLyogTm9uZSwgZ2V0IHRvZGF5J3MgZGF0ZS10aW1lICovCisg ICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU29tZSAqLworICAgICAg ICAgIHAgPSBicFswXTsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSBmaXJzdCAqLworICAgICAg ICBwID0gY2tjdnRkYXRlKHAsMCk7ICAgICAgICAgICAgIC8qIENvbnZlcnQgdG8gc3RhbmRhcmQg Zm9ybSAqLworICAgICAgICBpZiAoKnAgPT0gJy0nKSB7CisgICAgICAgICAgICBmYWlsZWQgPSAx OworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgaXMg dGhpcyBlcnJvciBtZXNzYWdlICovCisgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFM TCwiPEVSUk9SOkFSR19CQURfREFURTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAg Z290byBmbmVuZDsKKyAgICAgICAgfQorICAgICAgICAvKiBDb252ZXJ0IHRvIG1vZGlmaWVkIEp1 bGlhbiBkYXRlICovCisgICAgICAgIHNwcmludGYoZm52YWwsIiVsZCIsbWpkKHApKTsgICAgLyog U0FGRSAqLworICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50 IHRvIHJlc3VsdCAqLworICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICBjYXNlIEZOX01KRDI6 IHsKKyAgICAgICAgICBsb25nIGsgPSAwTDsKKyAgICAgICAgICBpbnQgbiA9IDA7CisgICAgICAg ICAgcCA9IGV2YWx4KGJwWzBdKTsKKyAgICAgICAgICBpZiAoKnAgPT0gJy0nKSB7CisgICAgICAg ICAgICAgIHArKzsKKyAgICAgICAgICAgICAgbiA9IDE7CisgICAgICAgICAgfQorICAgICAgICAg IGlmICghcmRpZ2l0cyhwKSkgeworICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAg ICAgICBldmFsZXJyKGZuKTsKKyAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgICAg ICBnb3RvIGZuZW5kOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGsgPSBhdG9s KHApOworICAgICAgICAgICAgICBpZiAobikgayA9IC1rOworICAgICAgICAgIH0KKyAgICAgICAg ICBja3N0cm5jcHkoZm52YWwsbWpkMmRhdGUoayksRk5WQUxMKTsgLyogQ29udmVydCB0byBEYXRl ICovCisgICAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8g cmVzdWx0ICovCisgICAgICAgICAgZmFpbGVkID0gMDsKKyAgICAgICAgICBnb3RvIGZuZW5kOwor ICAgICAgfQorCisjaWZuZGVmIE5PRElBTAorICAgICAgY2FzZSBGTl9QTkNWVDogeyAgICAgICAg ICAgICAgICAgIC8qIENvbnZlcnQgcGhvbmUgbnVtYmVyICovCisgICAgICAgICAgZXh0ZXJuIGNo YXIgKiBwbmN2dCgpOworICAgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgICAgcCA9IHBuY3Z0 KGJwWzBdKTsKKyAgICAgICAgICBpZiAoIXApIHAgPSAiIjsKKyAgICAgICAgICBpZiAoISpwKSB7 CisgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAg ICAgICAgICAgIC8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCisgICAgICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJP UjpBUkdfQkFEX1BIT05FTlVNOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgIH0KKyAgICAg ICAgZ290byBmbmVuZDsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworICAgICAgY2Fz ZSBGTl9EQVk6CisgICAgICBjYXNlIEZOX05EQVk6CisgICAgICAgIGlmIChhcmduIDwgMSkgICAg ICAgICAgICAgICAgICAgLyogQ2hlY2sgbnVtYmVyIG9mIGFyZ3MgKi8KKyAgICAgICAgICBwID0g enpuZGF0ZSgpOyAgICAgICAgICAgICAgICAvKiBOb25lLCBnZXQgdG9kYXkncyBkYXRlLXRpbWUg Ki8KKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTb21lICovCisg ICAgICAgICAgcCA9IGJwWzBdOyAgICAgICAgICAgICAgICAgICAgLyogVXNlIGZpcnN0ICovCisg ICAgICAgIHAgPSBja2N2dGRhdGUocCwwKTsgICAgICAgICAgICAgLyogQ29udmVydCB0byBzdGFu ZGFyZCBmb3JtICovCisgICAgICAgIGlmICgqcCA9PSAnLScpIHsKKyAgICAgICAgICAgIGZhaWxl ZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykgICAgICAgICAgICAgICAgLyogRGVmYXVs dCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWws Rk5WQUxMLCI8RVJST1I6QVJHX0JBRF9EQVRFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAg ICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAg IHogPSBtamQocCk7ICAgICAgICAgICAgICAgICAgICAgLyogQ29udmVydCB0byBtb2RpZmllZCBK dWxpYW4gZGF0ZSAqLworICAgICAgICB6ID0geiAlIDdMOworICAgICAgICBpZiAoeiA8IDApIHsK KyAgICAgICAgICAgIHogPSAwIC0gejsKKyAgICAgICAgICAgIGsgPSA2IC0gKChpbnQpeiArIDMp ICUgNzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGsgPSAoKGludCl6ICsgMykgJSA3 OwkvKiBEYXkgb2Ygd2VlayAqLworICAgICAgICB9CisgICAgICAgIHAgPSBmbnZhbDsgICAgICAg ICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0ICovCisgICAgICAgIGlmIChjeCA9PSBG Tl9OREFZKQorICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIixrKTsgICAgICAgIC8qIFNBRkUg Ki8KKyAgICAgICAgZWxzZQorICAgICAgICAgIGNrc3RybmNweShmbnZhbCx3a2RheXNba10sRk5W QUxMKTsKKyAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9OMlRJTTogeyAgICAg ICAgICAgICAgICAgIC8qIFNlYyBzaW5jZSBtaWRuaWdodCB0byBoaDptbTpzcyAqLworICAgICAg ICAgIGxvbmcgayA9IDBMOworICAgICAgICAgIGludCBuID0gMCwgaGgsIG1tLCBzczsKKyAgICAg ICAgICBjaGFyICogcyA9IGJwWzBdOworICAgICAgICAgIGlmIChhcmduIDwgMSkgICAgICAgICAg ICAgICAgIC8qIElmIG5vIGFyZyBzdWJzdGl0dXRlIDAgKi8KKyAgICAgICAgICAgIHMgPSAiMCI7 CisgICAgICAgICAgcCA9IGV2YWx4KHMpOyAgICAgICAgICAgICAgICAgLyogRXZhbHVhdGUgZXhw cmVzc2lvbiBzaWxlbnRseSAqLworICAgICAgICAgIGlmICgqcCA9PSAnLScpIHsgICAgICAgICAg ICAgIC8qIENoZWNrIHJlc3VsdCBmb3IgbWludXMgc2lnbiAqLworICAgICAgICAgICAgICBwKys7 CisgICAgICAgICAgICAgIG4gPSAxOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIXJkaWdp dHMocCkpIHsgLyogQ2hlY2sgZm9yIG51bWVyaWMgKi8KKyAgICAgICAgICAgICAgZmFpbGVkID0g MTsKKyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAg ICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgayA9IGF0b2wocCk7CisgICAgICAgICAgICAgIGlm IChuKSBrID0gLWs7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChrIDwgMCkgeyAgICAgICAg ICAgICAgICAgIC8qIENoZWNrIGZvciBuZWdhdGl2ZSAqLworICAgICAgICAgICAgICBmYWlsZWQg PSAxOworICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICBja21ha21z ZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfT1VU X09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgIHAgPSBmbnZhbDsK KyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICB9CisgICAgICAgICAgaGggPSBr IC8gMzYwMEw7ICAgICAgICAgICAgICAgLyogSGF2ZSBwb3NpdGl2ZSBudW1iZXIgKi8KKyAgICAg ICAgICBtbSA9IChrICUgMzYwMEwpIC8gNjBMOyAgICAgICAvKiBicmVhayBpdCBkb3duLi4uICov CisgICAgICAgICAgc3MgPSAoKGsgJSAzNjAwTCkgJSA2MEwpOworCisgICAgICAgICAgc3ByaW50 ZihmbnZhbCwiJTAyZDolMDJkOiUwMmQiLGhoLG1tLHNzKTsgLyogU0FGRSAqLworICAgICAgICAg IHAgPSBmbnZhbDsKKyAgICAgICAgICBmYWlsZWQgPSAwOworICAgICAgICAgIGdvdG8gZm5lbmQ7 CisgICAgICB9CisKKyAgICAgIGNhc2UgRk5fUEVSTTogeyAgICAgICAgICAgICAgICAgICAvKiBG aWxlIHBlcm1pc3Npb25zICovCisgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAgIHogPSB6 Y2hraShicFswXSk7CisgICAgICAgICAgaWYgKHogPCAwKSB7CisgICAgICAgICAgICAgIGZhaWxl ZCA9IDE7CisgICAgICAgICAgICAgIGlmIChmbmRpYWdzKSB7CisgICAgICAgICAgICAgICAgICBp ZiAoeiA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkZJTEVfTk9UX0ZPVU5EOlxcZiIs Zm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmICh6ID09IC0yKQorICAg ICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICI8RVJST1I6RklMRV9OT1RfUkVBREFCTEU6XFxmIixmbiwiKCk+IixOVUxM KTsKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHogPT0gLTMpCisgICAgICAgICAgICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IjxFUlJPUjpGSUxFX05PVF9BQ0NFU1NJQkxFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFM TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpGSUxFX0VSUk9SOlxcZiIs Zm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZ290byBmbmVu ZDsKKyAgICAgICAgICB9CisjaWZkZWYgQ0tfUEVSTVMKKyAgICAgICAgICBja3N0cm5jcHkoZm52 YWwsemlwZXJtKGJwWzBdKSxGTlZBTEwpOworI2Vsc2UKKyAgICAgICAgICBja3N0cm5jcHkoZm52 YWwsIih1bmtub3duKSIsRk5WQUxMKTsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworICAgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgICB9CisgICAgICBjYXNlIEZOX1RMT09LOiAgICAgICAgICAgICAg ICAgICAgLyogdGFibGVsb29rKCkgKi8KKyAgICAgIGNhc2UgRk5fQUxPT0s6IHsgICAgICAgICAg ICAgICAgICAvKiBhcnJheWxvb2soKSAqLworICAgICAgICAgIGludCBpLCB4LCBoaSwgbG8sIG1h eCwgY21kbGVuOworICAgICAgICAgIGNoYXIgYWJ1ZlsxNl0sICpzLCAqcGF0OworICAgICAgICAg IGNoYXIga3didWZbMjU2XTsKKyAgICAgICAgICBjaGFyIGRlbGltID0gJzonOworICAgICAgICAg IGZhaWxlZCA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBmYWlsdXJlICovCisgICAg ICAgICAgY2tzdHJuY3B5KGZudmFsLCItMSIsRk5WQUxMKTsKKyAgICAgICAgICBwYXQgPSBicFsw XTsgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBzZWFyY2ggcGF0dGVybiAqLworICAgICAg ICAgIGlmICghcGF0KSBwYXQgPSAiIjsgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgTlVMTCBw b2ludGVyICovCisgICAgICAgICAgY21kbGVuID0gc3RybGVuKHBhdCk7ICAgICAgICAgLyogR2V0 IHBhdHRlcm4gbGVuZ3RoICovCisgICAgICAgICAgaWYgKGFyZ24gPCAyIC8qIHx8IGNtZGxlbiA8 IDEgKi8gKSB7IC8qIE5lZWQgdHdvIGFyZ3MgKi8KKyAgICAgICAgICAgICAgaWYgKGZuZGlhZ3Mp CisgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6TUlTU0lOR19B Ukc6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAg ICAgICB9CisgICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnBbMV0sMTYpOyAgICAgLyogR2V0IGFy cmF5IHJlZmVyZW5jZSAqLworICAgICAgICAgIGlmIChhcmduID4gMikKKyAgICAgICAgICAgIGRl bGltID0gKihicFsyXSk7CisgICAgICAgICAgcyA9IGFidWY7CisgICAgICAgICAgaWYgKCh4ID0g YXJyYXlib3VuZHMocywmbG8sJmhpKSkgPCAwKSB7IC8qIEdldCBpbmRleCBhbmQgYm91bmRzICov CisgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLCI8RVJST1I6QVJHX0JBRF9BUlJBWTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAg ICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgIH0KKyAgICAgICAgICBwID0gZm52YWw7 ICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byByZXN1bHQgKi8KKyAgICAgICAgICBtYXgg PSBhX2RpbVt4XTsgICAgICAgICAgICAgICAvKiBTaXplIG9mIGFycmF5ICovCisgICAgICAgICAg aWYgKGxvIDwgMCkgbG8gPSAwOyAgICAgICAgICAgLyogVXNlIGdpdmVuIHJhbmdlIGlmIGFueSAq LworICAgICAgICAgIGlmIChsbyA+IG1heCkgbG8gPSBtYXg7CisgICAgICAgICAgaWYgKGhpIDwg MCkgaGkgPSBtYXg7CisgICAgICAgICAgaWYgKGhpID4gbWF4KSBoaSA9IG1heDsKKyAgICAgICAg ICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBVbnNldCBmYWlsdXJlIGZsYWcgKi8K KyAgICAgICAgICBpZiAobWF4IDwgMSkKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAg ICAga3didWZbMjU1XSA9IE5VTDsKKyAgICAgICAgICBmb3IgKGkgPSBsbzsgaSA8PSBoaTsgaSsr KSB7CisgICAgICAgICAgICAgIGlmICghYV9wdHJbeF1baV0pCisgICAgICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgICAgICAgIGlmIChjeCA9PSBGTl9BTE9PSykgeworICAgICAgICAgICAg ICAgICAgaWYgKGNrbWF0Y2gocGF0LGFfcHRyW3hdW2ldLGlucGNhc1tjbWRsdmxdLDErNCkpIHsK KyAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsaSk7IC8qIFNBRkUgKi8K KyAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN4ID09IEZOX1RMT09LKSB7CisgICAgICAgICAgICAg ICAgICBjaGFyICogYWE7CisgICAgICAgICAgICAgICAgICBpbnQgaiA9IDAsIHYgPSAwLCBsZW47 CisgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBoaSkKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICBhYSA9IGFfcHRyW3hdW2ldOyAgICAgLyogUG9pbnQgdG8g dGhpcyBhcnJheSBlbGVtZW50ICovCisgICAgICAgICAgICAgICAgICBpZiAoIWFhKSBhYSA9ICIi OworICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCAyNTQgJiYgKmFhKSB7IC8qIElzb2xhdGUg a2V5d29yZCAqLworICAgICAgICAgICAgICAgICAgICAgIGlmICgqYWEgPT0gZGVsaW0pCisgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBrd2J1Zltq KytdID0gKmFhKys7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBrd2J1 ZltqXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgIGxlbiA9IGo7CisgICAgICAgICAgICAgICAg ICB2ID0gMDsKKyAgICAgICAgICAgICAgICAgIGlmICgobGVuID09IGNtZGxlbiAmJiAhY2tzdHJj bXAoa3didWYscGF0LGxlbiwwKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoKHYgPSAhY2tz dHJjbXAoa3didWYscGF0LGNtZGxlbiwwKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgY2tz dHJjbXAoYV9wdHJbeF1baSsxXSxwYXQsY21kbGVuLDApKSkgeworICAgICAgICAgICAgICAgICAg ICAgIHNwcmludGYoZm52YWwsIiVkIixpKTsgLyogU0FGRSAqLworICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBp ZiAodikgeyAgICAgICAgICAgICAgLyogQW1iaWd1b3VzICovCisgICAgICAgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KGZudmFsLCItMiIsRk5WQUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICBn b3RvIGZuZW5kOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAg ICAgfQorICAgICAgICAgIGlmIChjeCA9PSBGTl9UTE9PSykgeyAgICAgICAgIC8qIHRhYmxlbG9v aygpIGxhc3QgZWxlbWVudCAqLworICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwsIi0xIixG TlZBTEwpOworICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGFfcHRyW3hdW2hpXSxwYXQsY21k bGVuLDApKQorICAgICAgICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIixoaSk7IC8qIFNBRkUg Ki8KKyAgICAgICAgICB9CisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgIH0KKyAgICAgIGNh c2UgRk5fVE9CNjQ6ICAgICAgICAgICAgICAgICAgICAvKiBCYXNlLTY0IGNvbnZlcnNpb24gKi8K KyAgICAgIGNhc2UgRk5fRk1CNjQ6CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgKnAgPSBO VUw7CisgICAgICAgIGlmIChhcmduIDwgMSkKKyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAg ICBpZiAoY3ggPT0gRk5fVE9CNjQpIHsKKyAgICAgICAgICAgIHggPSBiOHRvYjY0KGJwWzBdLC0x LGZudmFsLEZOVkFMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4ID0gc3RybGVu KGJwWzBdKTsKKyAgICAgICAgICAgIGlmICh4ICUgNCkgeyAgICAgICAgICAgICAgICAvKiBsZW5n dGggbXVzdCBiZSBtdWx0aXBsZSBvZiA0ICovCisgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsK KyAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIjxFUlJPUjpBUkdfSU5DT01QTEVURTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAg ICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiNjR0 b2I4KE5VTEwsMCxOVUxMLDApOyAgICAgLyogUmVzZXQgKi8KKyAgICAgICAgICAgIHggPSBiNjR0 b2I4KGJwWzBdLC0xLGZudmFsLEZOVkFMTCk7CisgICAgICAgICAgICBiNjR0b2I4KE5VTEwsMCxO VUxMLDApOyAgICAgLyogUmVzZXQgYWdhaW4gKi8KKyAgICAgICAgfQorICAgICAgICBpZiAoeCA8 IDApIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykg eworICAgICAgICAgICAgICAgIGNoYXIgKiBtID0gIklOVEVSTkFMX0VSUk9SIjsKKyAgICAgICAg ICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgLTE6IG0gPSAiQVJH X1RPT19MT05HIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIC0yOiBtID0gIkFSR19P VVRfT0ZfUkFOR0UiOyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg aWYgKGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOiIsbSwiXFxmIixmbikgPiAwKQorICAg ICAgICAgICAgICAgICAgY2tzdHJuY2F0KGZudmFsLCIoKT4iLEZOVkFMTCk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgZ290byBmbmVuZDsKKworICAgICAgY2FzZSBGTl9BQlM6 IHsKKyAgICAgICAgICBjaGFyICogczsKKyAgICAgICAgICBzID0gYnBbMF07CisgICAgICAgICAg aWYgKCpzID09ICctJyB8fCAqcyA9PSAnKycpCisgICAgICAgICAgICBzKys7CisgICAgICAgICAg aWYgKCFyZGlnaXRzKHMpKSB7CisgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAg ICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAi PEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAg ICBnb3RvIGZuZW5kOworICAgICAgICAgIH0KKyAgICAgICAgICBja3N0cm5jcHkoZm52YWwscyxG TlZBTEwpOworICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICB9CisKKyAgICAgIGNhc2UgRk5f QUFEVU1QOiB7CisgICAgICAgICAgY2hhciBhYnVmWzE2XSwgKnMgPSBOVUxMLCAqKmFwID0gTlVM TCwgKip2cCA9IE5VTEw7CisgICAgICAgICAgY2hhciBwYXR0ZXJuW1ZOQU1MXTsKKyAgICAgICAg ICBpbnQgc2xlbiwgaSwgaiwgaywgZmlyc3QgPSAtMTsKKyAgICAgICAgICBleHRlcm4gaW50IHhk ZWxtYWMoKTsKKyAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgaWYgKGFyZ24gPCAyKSB7 CisgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZu dmFsLEZOVkFMTCwiPEVSUk9SOk1JU1NJTkdfQVJHMjpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAg ICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgIH0KKyAgICAgICAgICBkZWJ1ZyhGMTAx LCJhYWNvbnZlcnQgYXJnbiIsIiIsYXJnbik7CisgICAgICAgICAgcyA9IGJwWzBdOworICAgICAg ICAgIHNsZW4gPSBzdHJsZW4ocyk7CisKKyAgICAgICAgICAvKiBDb3VudCBlbGVtZW50cyBzbyB3 ZSBjYW4gY3JlYXRlIHRoZSBhcnJheSAqLworCisgICAgICAgICAgY2ttYWttc2cocGF0dGVybixW TkFNTCxzLCI8Kj4iLE5VTEwsTlVMTCk7CisgICAgICAgICAgZm9yIChrID0gMCwgaSA9IDA7IGkg PCBubWFjOyBpKyspIHsKKyAgICAgICAgICAgICAgaWYgKGNrbWF0Y2gocGF0dGVybixtYWN0YWJb aV0ua3dkLDAsMSkpIHsKKyAgICAgICAgICAgICAgICAgIGlmIChmaXJzdCA8IDApICAgICAgICAv KiBSZW1lbWJlciBsb2NhdGlvbiBvZiBmaXJzdCBtYXRjaCAqLworICAgICAgICAgICAgICAgICAg ICBmaXJzdCA9IGk7CisgICAgICAgICAgICAgICAgICBrKys7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICB9CisgICAgICAgICAgZGVidWcoRjEwMSwiYWFjb252ZXJ0IG1hdGNoZXMiLCIiLGsp OworICAgICAgICAgIGRlYnVnKEYxMDEsImFhY29udmVydCBmaXJzdCIsIiIsZmlyc3QpOworICAg ICAgICAgIGZudmFsWzBdID0gTlVMOyAgICAgICAgICAgICAgIC8qIEluaXRpYWwgcmV0dXJuIHZh bHVlICovCisgICAgICAgICAgY2tzdHJuY3B5KGFidWYsYnBbMV0sMTYpOyAgICAgLyogR2V0IGFy cmF5IHJlZmVyZW5jZSAqLworICAgICAgICAgIHMgPSBhYnVmOworICAgICAgICAgIGlmICgqcyA9 PSBDTURRKSBzKys7CisgICAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgLyog UG9pbnQgdG8gcmVzdWx0ICovCisgICAgICAgICAgaWYgKGZuZGlhZ3MpICAgICAgICAgICAgICAg ICAgLyogRGVmYXVsdCBpcyB0aGlzIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkFSR19CQURfQVJSQVk6XFxmIixmbiwiKCk+IixOVUxM KTsKKyAgICAgICAgICBpZiAoc1swXSAhPSAnJicpICAgICAgICAgICAgICAvKiBBZGRyZXNzIG9m IGFycmF5ICovCisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgIGlmIChzWzJdKQor ICAgICAgICAgICAgaWYgKHNbMl0gIT0gJ1snIHx8IHNbM10gIT0gJ10nKQorICAgICAgICAgICAg ICBnb3RvIGZuZW5kOworICAgICAgICAgIGlmIChzWzFdID49IDY0ICYmIHNbMV0gPCA5MSkgIC8q IENvbnZlcnQgdXBwZXIgdG8gbG93ZXIgKi8KKyAgICAgICAgICAgIHNbMV0gKz0gMzI7CisgICAg ICAgICAgaWYgKCh4ID0gZGNsYXJyYXkoc1sxXSxrKSkgPCAwKSAvKiBEZWNsYXJlIGFycmF5IHRv IHNpemUgKi8KKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgYXAgPSBhX3B0clt4 XTsgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gYXJyYXkgd2UganVzdCBkZWNsYXJlZCAqLwor ICAgICAgICAgIC8qIGRlYnVnKEYxMTEsImFhY29udmVydCBhcnJheSAxIixhYnVmLGFwKTsgKi8K KyAgICAgICAgICBhYnVmWzBdID0gTlVMOworICAgICAgICAgIGlmIChhcmduID4gMikgeworICAg ICAgICAgICAgICBja3N0cm5jcHkoYWJ1ZixicFsyXSwxNik7IC8qIEdldCB2YWx1ZSBhcnJheSBy ZWZlcmVuY2UgKi8KKyAgICAgICAgICAgICAgcyA9IGFidWY7CisgICAgICAgICAgICAgIGlmICgq cyA9PSBDTURRKSBzKys7CisgICAgICAgICAgICAgIGlmIChzWzBdICE9ICcmJykgICAgICAgICAg LyogQWRkcmVzcyBvZiBhcnJheSAqLworICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAg ICAgICAgICAgIGlmIChzWzJdKQorICAgICAgICAgICAgICAgIGlmIChzWzJdICE9ICdbJyB8fCBz WzNdICE9ICddJykKKyAgICAgICAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAg IGlmIChzWzFdID49IDY0ICYmIHNbMV0gPCA5MSkgLyogQ29udmVydCB1cHBlciB0byBsb3dlciAq LworICAgICAgICAgICAgICAgIHNbMV0gKz0gMzI7CisgICAgICAgICAgICAgIGlmICgoeCA9IGRj bGFycmF5KHNbMV0saykpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAg ICAgICAgICB2cCA9IGFfcHRyW3hdOyAgICAgICAgICAgIC8qIFBvaW50IHRvIGFycmF5IHdlIGp1 c3QgZGVjbGFyZWQgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgLyogZGVidWcoRjExMSwiYWFj b252ZXJ0IGFycmF5IDIiLGFidWYsdnApOyAqLworICAgICAgICAgIG1ha2VzdHIoJmFwWzBdLGNr aXRvYShrKSk7CisgICAgICAgICAgaWYgKHZwKSBtYWtlc3RyKCZ2cFswXSxja2l0b2EoaykpOwor ICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEws IjxFUlJPUjpBU1NPQ0lBVElWRV9BUlJBWTpcXGYiLGZuLCIoKT4iLE5VTEwpOworCisgICAgICAg ICAgLyogQ29weSBtYWNybyBpbmRleCAmIHZhbHVlIHRvIHRoZSBhcnJheXMgYW5kIHRoZW4gcmVt b3ZlIHRoZSAqLworICAgICAgICAgIC8qIG1hY3JvLCBzbyB0aGUgJ2ZpcnN0JyBwb2ludGVyIGtl ZXBzIGluZGljYXRpbmcgdGhlIG5leHQgb25lLiAqLworICAgICAgICAgIC8qIFdlIGNvdWxkIGNv bWJpbmUgdGhlIGluaXRpYWwgY291bnRpbmcgbG9vcCB3aXRoIHRoaXMgb25lIGJ1dCAqLworICAg ICAgICAgIC8qIHRoZW4gaXQgd291bGQgYmUgaGFyZGVyIHRvIGNyZWF0ZSB0aGUgYXJyYXkgYW5k IGFueXdheSB0aGlzICovCisgICAgICAgICAgLyogZnVuY3Rpb24gaXMgcGxlbnR5IGZhc3QgYXMg aXQgaXMuICovCisKKyAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IGs7ICkgeworICAgICAgICAg ICAgICBpZiAoIWNrbWF0Y2gocGF0dGVybixtYWN0YWJbZmlyc3RdLmt3ZCwwLDEpKSB7CisgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJhYWNvbnZlcnQgb2RkYmFsbCIsbWFjdGFiW2ZpcnN0 XS5rd2QsZmlyc3QpOworICAgICAgICAgICAgICAgICAgZmlyc3QrKzsKKyAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGNrc3RybmNweSh0 bXBidWYsbWFjdGFiW2ZpcnN0XS5rd2QsVE1QQlVGU0laKTsgLyogTWFjcm8gbmFtZSAqLworICAg ICAgICAgICAgICBzID0gdG1wYnVmOyAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSB3cml0 ZWFibGUgY29weSAqLworICAgICAgICAgICAgICBzICs9IHNsZW47ICAgICAgICAgICAgICAgICAg ICAgICAgLyogSXNvbGF0ZSAiaW5kZXgiICovCisgICAgICAgICAgICAgIGogPSBzdHJsZW4ocykg LSAxOworICAgICAgICAgICAgICBpZiAoKnMgIT0gJzwnIHx8ICoocytqKSAhPSAnPicpIHsgLyog Q2hlY2sgc3ludGF4ICovCisgICAgICAgICAgICAgICAgICAvKiBUaGlzIHNob3VsZG4ndCBoYXBw ZW4gKi8KKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImFhY29udmVydCBFUlJPUiIsbWFj dGFiW2ZpcnN0XS5rd2QsZmlyc3QpOworICAgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAqKHMraikgPSBOVUw7ICAgICAgICAgICAgIC8q IFJlbW92ZSBmaW5hbCAnPicgKi8KKyAgICAgICAgICAgICAgZGVidWcoRjExMSwiYWFjb252ZXJ0 IixzKzEsaSk7CisgICAgICAgICAgICAgIG1ha2VzdHIoJihhcFtpXSkscysxKTsgICAgLyogU2V0 IGZpcnN0IGFycmF5IHRvIGluZGV4ICovCisgICAgICAgICAgICAgIGlmICh2cCkKKyAgICAgICAg ICAgICAgICBtYWtlc3RyKCYodnBbaV0pLG1hY3RhYltmaXJzdF0ubXZhbCk7IC8qIDJuZCB0byB2 YWx1ZSAqLworICAgICAgICAgICAgICBpZiAoeGRlbG1hYyhmaXJzdCkgPCAwKQorICAgICAgICAg ICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICB9CisgICAg ICAgICAgc3ByaW50ZihmbnZhbCwiJWQiLGspOyAgICAgICAgLyogU0FGRSAqLworICAgICAgICAg IHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBzaXplIG9mIGFycmF5ICov CisgICAgICAgICAgZGVidWcoRjExMCwiYWFjb252ZXJ0IHJldHVybiIscCwwKTsKKyAgICAgICAg ICBmYWlsZWQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBVbnNldCBmYWlsdXJlIGZsYWcgKi8K KyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgfQorCisgICAgfSAvKiBFbmQgb2Ygc3dpdGNo KCkgKi8KKworI2lmZGVmIEZORkxPQVQKKy8qCisgIEZsb2F0aW5nLXBvaW50IGZ1bmN0aW9ucy4g IFRvIGJlIGluY2x1ZGVkIG9ubHkgaWYgRk5GTE9BVCBpcyBkZWZpbmVkLCB3aGljaAorICBzaG91 bGQgaGFwcGVuIG9ubHkgaWYgQ0tGTE9BVCBpcyBhbHNvIGRlZmluZWQsIGFuZCBpZiB0aGUgbWF0 aCBsaWJyYXJ5IGlzCisgIGxpbmtlZCBpbi4gIEV2ZW4gdGhlbiwgd2UgbWlnaHQgaGF2ZSBmbG9h dC12cy1kb3VibGUgY29uZnVzaW9uIGFzIHdlbGwgYXMKKyAgY29uZnVzaW9uIGFib3V0IHdoYXQg dGhlIGZpbmFsICIlZiIgZm9ybWF0IGVmZmVjdG9yIGlzIHN1cHBvc2VkIHRvIHJlZmVyZW5jZQor ICAoMzIgYml0cywgNjQgYml0cywgZXRjKS4gIEV4cGVjdCB0cm91YmxlIGlmIENLRkxPQVQgZG9l cyBub3QgbWF0Y2ggdGhlIGRhdGEKKyAgdHlwZSBvZiBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zIG9y IGFyZ3MuCisqLworICAgIGlmIChjeCA9PSBGTl9GUEFCUyB8fCAgICAgICAgICAgICAgIC8qIEZs b2F0aW5nLXBvaW50IGZ1bmN0aW9ucyAqLworICAgICAgICBjeCA9PSBGTl9GUEFERCB8fAorICAg ICAgICBjeCA9PSBGTl9GUERJViB8fAorICAgICAgICBjeCA9PSBGTl9GUEVYUCB8fAorICAgICAg ICBjeCA9PSBGTl9GUExPRyB8fAorICAgICAgICBjeCA9PSBGTl9GUExOICB8fAorICAgICAgICBj eCA9PSBGTl9GUE1PRCB8fAorICAgICAgICBjeCA9PSBGTl9GUE1BWCB8fAorICAgICAgICBjeCA9 PSBGTl9GUE1JTiB8fAorICAgICAgICBjeCA9PSBGTl9GUE1VTCB8fAorICAgICAgICBjeCA9PSBG Tl9GUFBPVyB8fAorICAgICAgICBjeCA9PSBGTl9GUFNRUiB8fAorICAgICAgICBjeCA9PSBGTl9G UElOVCB8fAorICAgICAgICBjeCA9PSBGTl9GUFNVQiB8fAorICAgICAgICBjeCA9PSBGTl9GUFJP VSB8fAorICAgICAgICBjeCA9PSBGTl9GUFNJTiB8fAorICAgICAgICBjeCA9PSBGTl9GUENPUyB8 fAorICAgICAgICBjeCA9PSBGTl9GUFRBTikgeworICAgICAgICBDS0ZMT0FUIGZhcmdbMl0sIGZw cmVzdWx0ID0gMC4wOworICAgICAgICBjaGFyIGZwYnVmWzY0XSwgKiBicDA7CisgICAgICAgIGRv dWJsZSBkdW1teTsKKyAgICAgICAgLyogaW50IHNpZ24gPSAwOyAqLworICAgICAgICBpbnQgaSwg aiwgcGxhY2VzID0gMDsKKyAgICAgICAgaW50IGFyZ2NvdW50ID0gMTsKKworICAgICAgICBmYWls ZWQgPSAxOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGJwMCA9IGJwWzBdOworICAgICAg ICBpZiAoIWJwMCkKKyAgICAgICAgICBicDAgPSAiMCI7CisgICAgICAgIGVsc2UgaWYgKCEqYnAw KQorICAgICAgICAgIGJwMCA9ICIwIjsKKyAgICAgICAgaWYgKCFpc2Zsb2F0KGJwMCwwKSkgewor ICAgICAgICAgICAgayA9IG14bG9vayhtYWN0YWIsYnAwLG5tYWMpOworICAgICAgICAgICAgYnAw ID0gKGsgPiAtMSkgPyBtYWN0YWJba10ubXZhbCA6IE5VTEw7CisgICAgICAgICAgICBpZiAoYnAw KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc2Zsb2F0KGJwMCwwKSkgeworICAgICAgICAgICAg ICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZh bCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9U X0ZMT0FUOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZm5l bmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGlmIChjeCA9PSBGTl9GUElOVCkgeyAgICAgICAgICAgLyogRmxvYXQgdG8gaW50ICovCisgICAg ICAgICAgICBmYWlsZWQgPSAwOworICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLGJwMCxGTlZB TEwpOworICAgICAgICAgICAgZm9yIChpID0gMDsgZm52YWxbaV07IGkrKykgeworICAgICAgICAg ICAgICAgIGlmIChmbnZhbFtpXSA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgZm52YWxb aV0gPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAg ICAgc3dpdGNoICh5KSB7ICAgICAgICAgICAgICAgICAgICAvKiBUaGVzZSBuZWVkIDIgYXJncyAq LworICAgICAgICAgIGNhc2UgRk5fRlBBREQ6CisgICAgICAgICAgY2FzZSBGTl9GUERJVjoKKyAg ICAgICAgICBjYXNlIEZOX0ZQTU9EOgorICAgICAgICAgIGNhc2UgRk5fRlBNQVg6CisgICAgICAg ICAgY2FzZSBGTl9GUE1JTjoKKyAgICAgICAgICBjYXNlIEZOX0ZQTVVMOgorICAgICAgICAgIGNh c2UgRk5fRlBQT1c6CisgICAgICAgICAgY2FzZSBGTl9GUFNVQjoKKyAgICAgICAgICAgIGFyZ2Nv dW50ID0gMjsKKyAgICAgICAgfQorICAgICAgICAvKiBNaXNzaW5nIGFyZ3VtZW50cyBhcmUgc3Vw cGxpZWQgYXMgMC4wICovCisKKyAgICAgICAgZGVidWcoRjExMSxmbiwiYXJnY291bnQiLGFyZ2Nv dW50KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2NvdW50OyBpKyspIHsgLyogR2V0IGZs b2F0aW5nLXBvaW50IGFyZ3MgKi8KKyNpZmRlZiBERUJVRworICAgICAgICAgICAgaWYgKGRlYmxv ZykgeworICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZwYnVmLAorICAgICAgICAgICAgICAgICAg ICAgICAgIDY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJicFsiLAorICAgICAgICAgICAg ICAgICAgICAgICAgIGNraXRvYShpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBicFtpXSA/ IGJwW2ldIDogIihudWxsKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl0iCisgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLGZwYnVmLCIi LDApOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgICAgICBpZiAo IWJwW2ldKSB7CisgICAgICAgICAgICAgICAgZmFyZ1tpXSA9IDAuMDsKKyAgICAgICAgICAgIH0g ZWxzZSBpZiAoISooYnBbaV0pKSB7CisgICAgICAgICAgICAgICAgZmFyZ1tpXSA9IDAuMDsKKyAg ICAgICAgICAgIH0gZWxzZSBpZiAoIWlzZmxvYXQoYnBbaV0sMCkpIHsKKyAgICAgICAgICAgICAg ICBjaGFyICogdG1wOworICAgICAgICAgICAgICAgIGsgPSBteGxvb2sobWFjdGFiLGJwW2ldLG5t YWMpOworICAgICAgICAgICAgICAgIHRtcCA9IChrID4gLTEpID8gbWFjdGFiW2tdLm12YWwgOiBO VUxMOworICAgICAgICAgICAgICAgIGlmICh0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KCFpc2Zsb2F0KHRtcCwwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3Mp CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpBUkdfTk9UX0ZMT0FUOlxcZiIs Zm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgZmFyZ1tpXSA9IGZsb2F0dmFsOworCisjaWZkZWYgREVCVUcKKyAgICAgICAgICAg IGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGZwYnVmLCJmYXJnWyVkXT0l ZiIsaSxmYXJnW2ldKTsgLyogU0FGRSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsZnBi dWYsIiIsMCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgfQor ICAgICAgICBpZiAoYnBbYXJnY291bnRdKSB7ICAgICAgICAgICAgIC8qIEdldCBkZWNpbWFsIHBs YWNlcyAqLworICAgICAgICAgICAgY2hhciAqIHM7CisgICAgICAgICAgICBzID0gYnBbYXJnY291 bnRdOworICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgICAgICBpZiAoISpzKSBz ID0gIjAiOworICAgICAgICAgICAgcyA9IGV2YWx4KHMpOworICAgICAgICAgICAgaWYgKCFzKSBz ID0gIiI7CisgICAgICAgICAgICBpZiAoISpzKSB7CisgICAgICAgICAgICAgICAgZXZhbGVycihm bik7CisgICAgICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHBsYWNlcyA9IGF0b2kocyk7CisgICAgICAgIH0KKyAgICAgICAgZXJybm8gPSAwOworICAg ICAgICBmYWlsZWQgPSAwOworICAgICAgICBzd2l0Y2ggKHkpIHsgICAgICAgICAgICAgICAgICAg IC8qIE5vdyBkbyB0aGUgcmVxdWVzdGVkIGZ1bmN0aW9uICovCisgICAgICAgICAgY2FzZSBGTl9G UEFCUzogICAgICAgICAgICAgICAgLyogRmxvYXRpbmctcG9pbnQgYWJzb2x1dGUgdmFsdWUgKi8K KyNpZm5kZWYgQ09NTUVOVAorICAgICAgICAgICAgZnByZXN1bHQgPSBmYWJzKGZhcmdbMF0pOwor I2Vsc2UKKyAgICAgICAgICAgIGlmIChmYXJnWzBdIDwgMC4wKQorICAgICAgICAgICAgICBmcHJl c3VsdCA9IDAuMCAtIGZhcmdbMF07CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBGTl9GUEFERDogICAgICAgICAgICAgICAgLyogRlAgYWRk ICovCisgICAgICAgICAgICBmcHJlc3VsdCA9IGZhcmdbMF0gKyBmYXJnWzFdOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBGTl9GUERJVjogICAgICAgICAgICAgICAgLyogRlAg ZGl2aWRlICovCisgICAgICAgICAgY2FzZSBGTl9GUE1PRDogICAgICAgICAgICAgICAgLyogRlAg bW9kdWx1cyAqLworICAgICAgICAgICAgaWYgKCFmYXJnWzFdKSB7CisgICAgICAgICAgICAgICAg ZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI8 RVJST1I6RElWSURFX0JZX1pFUk86XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIH0g ZWxzZQorICAgICAgICAgICAgICBmcHJlc3VsdCA9IChjeCA9PSBGTl9GUERJVikgPworICAgICAg ICAgICAgICAgIChmYXJnWzBdIC8gZmFyZ1sxXSkgOgorICAgICAgICAgICAgICAgICAgZm1vZChm YXJnWzBdLGZhcmdbMV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBGTl9G UEVYUDogICAgICAgICAgICAgICAgLyogRlAgZSB0byB0aGUgeCAqLworICAgICAgICAgICAgZnBy ZXN1bHQgPSAoQ0tGTE9BVCkgZXhwKGZhcmdbMF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBGTl9GUExPRzogICAgICAgICAgICAgICAgLyogRlAgYmFzZS0xMCBsb2dhcml0 aG0gKi8KKyAgICAgICAgICBjYXNlIEZOX0ZQTE46ICAgICAgICAgICAgICAgICAvKiBGUCBuYXR1 cmFsIGxvZ2FyaXRobSAqLworICAgICAgICAgICAgaWYgKGZhcmdbMF0gPCAwLjApIHsKKyAgICAg ICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAg ICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIjxFUlJPUjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7Cisg ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgZnByZXN1bHQgPSAoY3ggPT0gRk5fRlBM T0cpID8gbG9nMTAoZmFyZ1swXSkgOiBsb2coZmFyZ1swXSk7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlIEZOX0ZQTVVMOiAgICAgICAgICAgICAgICAvKiBGUCBtdWx0aXBseSAq LworICAgICAgICAgICAgZnByZXN1bHQgPSBmYXJnWzBdICogZmFyZ1sxXTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgRk5fRlBQT1c6ICAgICAgICAgICAgICAgIC8qIEZQIHJh aXNlIHRvIGEgcG93ZXIgKi8KKyAgICAgICAgICAgIGZwcmVzdWx0ID0gbW9kZihmYXJnWzFdLCZk dW1teSk7CisgICAgICAgICAgICBpZiAoKCFmYXJnWzBdICYmIGZhcmdbMV0gPD0gMC4wKSB8fAor ICAgICAgICAgICAgICAgIChmYXJnWzBdIDwgMC4wICYmIGZwcmVzdWx0KSkgeworICAgICAgICAg ICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAg ICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAg ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICBmcHJlc3VsdCA9IHBvdyhmYXJnWzBdLGZhcmdb MV0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBGTl9GUFNRUjogICAgICAg ICAgICAgICAgLyogRlAgc3F1YXJlIHJvb3QgKi8KKyAgICAgICAgICAgIGlmIChmYXJnWzBdIDwg MC4wKSB7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICBpZiAo Zm5kaWFncykKKyAgICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIo KT4iLE5VTEwpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIGZwcmVzdWx0ID0g c3FydChmYXJnWzBdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRk5fRlBT VUI6ICAgICAgICAgICAgICAgIC8qIEZQIHN1YnRyYWN0ICovCisgICAgICAgICAgICBmcHJlc3Vs dCA9IGZhcmdbMF0gLSBmYXJnWzFdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBGTl9GUFJPVTogICAgICAgICAgICAgICAgLyogRlAgcm91bmQgKi8KKyAgICAgICAgICAgIGZw cmVzdWx0ID0gZmFyZ1swXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRk5f RlBTSU46ICAgICAgICAgICAgICAgIC8qIEZQIHNpbmUgKi8KKyAgICAgICAgICAgIGZwcmVzdWx0 ID0gKENLRkxPQVQpIHNpbihmYXJnWzBdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IGNhc2UgRk5fRlBDT1M6ICAgICAgICAgICAgICAgIC8qIEZQIGNvc2luZSAqLworICAgICAgICAg ICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgY29zKGZhcmdbMF0pOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBGTl9GUFRBTjogICAgICAgICAgICAgICAgLyogRlAgdGFuZ2VudCAq LworICAgICAgICAgICAgZnByZXN1bHQgPSAoQ0tGTE9BVCkgdGFuKGZhcmdbMF0pOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBGTl9GUE1BWDoKKyAgICAgICAgICAgIGZwcmVz dWx0ID0gKGZhcmdbMF0gPiBmYXJnWzFdKSA/IGZhcmdbMF0gOiBmYXJnWzFdOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBGTl9GUE1JTjoKKyAgICAgICAgICAgIGZwcmVzdWx0 ID0gKGZhcmdbMF0gPCBmYXJnWzFdKSA/IGZhcmdbMF0gOiBmYXJnWzFdOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBHZXQgaGVyZSB3aXRoIGZwcmVzdWx0ID0g ZnVuY3Rpb24gcmVzdWx0ICovCisKKyAgICAgICAgaWYgKGVycm5vKSB7ICAgICAgICAgICAgICAg ICAgICAvKiBJZiByYW5nZSBvciBkb21haW4gZXJyb3IgKi8KKyAgICAgICAgICAgIGZhaWxlZCA9 IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgY2ttYWttc2coZm52 YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkZMT0FUSU5HLVBPSU5U LU9QOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhaWxlZCkg ICAgICAgICAgICAgICAgICAgICAvKiBhbmQvb3IgYW55IG90aGVyIGtpbmQgb2YgZXJyb3IsICov CisgICAgICAgICAgZ290byBmbmVuZDsgICAgICAgICAgICAgICAgICAgLyogZmFpbC4gKi8KKyNp Zm5kZWYgQ09NTUVOVAorICAgICAgICAvKiBDYWxsIHJvdXRpbmUgY29udGFpbmluZyBjb2RlIHRo YXQgd2FzIGZvcm1lcmx5IGlubGluZSAqLworICAgICAgICBja3N0cm5jcHkoZm52YWwsZnBmb3Jt YXQoZnByZXN1bHQscGxhY2VzLGN4ID09IEZOX0ZQUk9VKSxGTlZBTEwpOworI2Vsc2UKKyAgICAg ICAgeworICAgICAgICAgICAgY2hhciBmYnVmWzE2XTsgICAgICAgICAgICAgIC8qIEZvciBjcmVh dGluZyBwcmludGYgZm9ybWF0ICovCisgICAgICAgICAgICBpZiAoIWZwX3JvdW5kaW5nICYmICAg ICAgICAgLyogSWYgcHJpbnRmIGRvZXNuJ3Qgcm91bmQsICovCisgICAgICAgICAgICAgICAgKHBs YWNlcyA+IDAgfHwgICAgICAgICAgLyogcm91bmQgcmVzdWx0IHRvIGRlY2ltYWwgcGxhY2VzLiAq LworICAgICAgICAgICAgICAgICAocGxhY2VzID09IDAgJiYgY3ggPT0gRk5fRlBST1UpKSkKKyAg ICAgICAgICAgICAgZnByZXN1bHQgKz0gKDAuNSAvIHBvdygxMC4wLChDS0ZMT0FUKXBsYWNlcykp OworICAgICAgICAgICAgaWYgKHBsYWNlcyA+IDApIHsgICAgICAgICAgICAgICAgICAgLyogSWYg cGxhY2VzIHNwZWNpZmllZCAqLworICAgICAgICAgICAgICAgIC8qIHVzZSBzcGVjaWZpZWQgcGxh Y2VzIHRvIHdyaXRlIGdpdmVuIG51bWJlciBvZiBkaWdpdHMgKi8KKyAgICAgICAgICAgICAgICBz cHJpbnRmKGZidWYsIiUlMC4lZGYiLHBsYWNlcyk7IC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAg ICBzcHJpbnRmKGZudmFsLGZidWYsZnByZXN1bHQpOyAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZS4uLiAqLwor I2lmZGVmIENPTU1FTlQKKy8qCisgIEhlcmUgd2Ugd2FudCB0byBwcmludCBleGFjdGx5IGZwX2Rp Z2l0cyBzaWduaWZpY2FudCBkaWdpdHMsIG5vIG1hdHRlciB3aGljaAorICBzaWRlIG9mIHRoZSBk ZWNpbWFsIHBvaW50IHRoZXkgYXJlIG9uLiAgVGhhdCBpcywgd2Ugd2FudCB3YW50IHRoZSBkZWZh dWx0CisgIGZvcm1hdCB0byBzaG93IHRoZSBtYXhpbXVtIG51bWJlciBvZiBub24tZ2FyYmFnZSBk aWdpdHMsIEFORCB3ZSB3YW50IHRoZSBsYXN0CisgIHN1Y2ggZGlnaXQgdG8gYmUgcm91bmRlZC4g IE9mIGNvdXJzZSB0aGVyZSBpcyBubyB3YXkgdG8gZG8gdGhhdCwgc2luY2UgdGhlCisgIGRpZ2l0 IGFmdGVyIHRoZSBsYXN0IG5vbi1nYXJiYWdlIGRpZ2l0IGlzLCB3ZWxsLCBnYXJiYWdlLiAgU28g dGhlIGZvbGxvd2luZworICBjbGV2ZXIgcnVzZSBkb2VzIG5vIGdvb2QuCisqLworICAgICAgICAg ICAgICAgIGludCBzaWduID0gMCwgbSA9IDA7CisgICAgICAgICAgICAgICAgc3ByaW50ZihmbnZh bCwiJWYiLGZwcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoZm52YWxbMF0gPT0gJy0nKSBz aWduID0gMTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSBzaWduOyBpIDwgRk5WQUxMOyBpKysp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoZm52YWxbaV0pKQorICAgICAgICAg ICAgICAgICAgICAgIG0rKzsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo bSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGQgPSBmcF9kaWdpdHMgLSBtOworICAg ICAgICAgICAgICAgICAgICBpZiAoZCA8IDEpIGQgPSAxOworICAgICAgICAgICAgICAgICAgICBz cHJpbnRmKGZidWYsIiUlJWQuJWRmIixmcF9kaWdpdHMrc2lnbisxLGQpOworICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZmJ1ZiwiJSUwLiVkZiIs ZnBfZGlnaXRzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3ByaW50Zihm bnZhbCxmYnVmLGZwcmVzdWx0KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgLyogR28gZm9yIG1h eCBwcmVjaXNpb24gKi8KKyAgICAgICAgICAgICAgICBzcHJpbnRmKGZidWYsIiUlMC4lZGYiLGZw X2RpZ2l0cyk7IC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLGZidWYs ZnByZXN1bHQpOyAvKiBTQUZFICovCisKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoZm52YWxbMF0gPT0gJy0nKSBzaWduID0gMTsKKyAgICAgICAg fQorICAgICAgICBkZWJ1ZyhGMTExLCJmcHJlc3VsdCAxIixmbnZhbCxlcnJubyk7IC8qIENoZWNr IGZvciBvdmVyL3VuZGVyZmxvdyAqLworICAgICAgICBmb3IgKGkgPSBzaWduOyBmbnZhbFtpXTsg aSsrKSB7IC8qIEdpdmUgcmVxdWVzdGVkIGRlY2ltYWwgcGxhY2VzICovCisgICAgICAgICAgICBp ZiAoZm52YWxbaV0gPT0gJy4nKSAgICAgICAgLyogRmlyc3QgZmluZCB0aGUgZGVjaW1hbCBwb2lu dCAqLworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGkgPiBmcF9k aWdpdHMgKyBzaWduIC0gMSkgLyogcmVwbGFjaW5nIGdhcmJhZ2UgKi8KKyAgICAgICAgICAgICAg Zm52YWxbaV0gPSAnMCc7ICAgICAgICAgICAvKiBkaWdpdHMgd2l0aCAwLi4uICovCisgICAgICAg IH0KKyAgICAgICAgaWYgKGZudmFsW2ldID09ICcuJykgeyAgICAgICAgICAvKiBIYXZlIGRlY2lt YWwgcG9pbnQgKi8KKyAgICAgICAgICAgIGludCBnb3RlbmQgPSAwOworICAgICAgICAgICAgLyog ZCA8IDAgc28gdHJ1bmNhdGUgZnJhY3Rpb24gKi8KKyAgICAgICAgICAgIGlmIChwbGFjZXMgPCAw IHx8IChwbGFjZXMgPT0gMCAmJiBjeCA9PSBGTl9GUFJPVSkpIHsKKyAgICAgICAgICAgICAgICBm bnZhbFtpXSA9IE5VTDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGxhY2VzID4gMCkgeyAgICAv KiBkID4gMCBzbyB0aGlzIG1hbnkgZGVjaW1hbCBwbGFjZXMgKi8KKyAgICAgICAgICAgICAgICBp Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgZGlnaXQgYWZ0ZXIgZGVjaW1h bCAqLworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwbGFjZXM7IGorKykgeyAvKiBU cnVuY2F0ZSBhZnRlciBkIGRlY2ltYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmbnZh bFtqK2ldKSAgICAgICAgICAgLyogcGxhY2VzIG9yIGV4dGVuZCB0byBkICAqLworICAgICAgICAg ICAgICAgICAgICAgIGdvdGVuZCA9IDE7ICAgICAgICAgICAgICAvKiBkZWNpbWFsIHBsYWNlcy4g Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGdvdGVuZCB8fCBqK2krc2lnbiA+IGZwX2RpZ2l0 cykKKyAgICAgICAgICAgICAgICAgICAgICBmbnZhbFtqK2ldID0gJzAnOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBmbnZhbFtqK2ldID0gTlVMOworICAgICAgICAgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIGQgPT0gMCBzbyBEbyBUaGUgUmlnaHQgVGhpbmcg Ki8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAoaW50KXN0cmxlbihmbnZhbCkgLSAxOyBqID4g aSsxOyBqLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChqIC0gc2lnbikgPiBmcF9kaWdp dHMpCisgICAgICAgICAgICAgICAgICAgICAgZm52YWxbal0gPSAnMCc7CisgICAgICAgICAgICAg ICAgICAgIGlmIChmbnZhbFtqXSA9PSAnMCcpCisgICAgICAgICAgICAgICAgICAgICAgZm52YWxb al0gPSBOVUw7ICAgLyogU3RyaXAgdXNlbGVzcyB0cmFpbGluZyAwJ3MuICovCisgICAgICAgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgICAgIGRlYnVnKEYxMTEsImZwcmVzdWx0IDIiLGZudmFsLGVycm5vKTsKKyAgICAgICAgZ290 byBmbmVuZDsKKworICAgIH0KKyNlbmRpZiAvKiBGTkZMT0FUICovCisKKyNpZmRlZiBDS0NIQU5O RUxJTworICAgIGlmIChjeCA9PSBGTl9GU1RBVCAgfHwgICAgICAgICAgICAgIC8qIEZpbGUgZnVu Y3Rpb25zICovCisgICAgICAgIGN4ID09IEZOX0ZQT1MgICB8fAorICAgICAgICBjeCA9PSBGTl9G RU9GICAgfHwKKyAgICAgICAgY3ggPT0gRk5fRkdDSEFSIHx8CisgICAgICAgIGN4ID09IEZOX0ZH TElORSB8fAorICAgICAgICBjeCA9PSBGTl9GR0JMSyAgfHwKKyAgICAgICAgY3ggPT0gRk5fRlBD SEFSIHx8CisgICAgICAgIGN4ID09IEZOX0ZQTElORSB8fAorICAgICAgICBjeCA9PSBGTl9GUEJM SyAgfHwKKyAgICAgICAgY3ggPT0gRk5fTkxJTkUgIHx8CisgICAgICAgIGN4ID09IEZOX0ZFUk1T RyB8fAorICAgICAgICBjeCA9PSBGTl9GSUxOTykgeworICAgICAgICBpbnQgeCA9IDAsIHQgPSAw LCBjaGFubmVsOworICAgICAgICBsb25nIHo7CisgICAgICAgIGV4dGVybiBpbnQgel9tYXhjaGFu OworCisgICAgICAgIGZhaWxlZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIGZh aWx1cmUgKi8KKyAgICAgICAgcCA9IGZudmFsOyAgICAgICAgICAgICAgICAgICAgICAvKiB1bnRp bCB3ZSB2YWxpZGF0ZSBhcmdzICovCisgICAgICAgIGlmIChjeCA9PSBGTl9GRVJNU0cpIHsKKyAg ICAgICAgICAgIGV4dGVybiBpbnQgel9lcnJvcjsKKyAgICAgICAgICAgIGlmIChhcmduIDwgMSkg eworICAgICAgICAgICAgICAgIHggPSB6X2Vycm9yOworICAgICAgICAgICAgfSBlbHNlIGlmIChj aGtudW0oYnBbMF0pKSB7CisgICAgICAgICAgICAgICAgeCA9IGF0b2koYnBbMF0pOworICAgICAg ICAgICAgfSBlbHNlIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxG TlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxc ZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICBmYWlsZWQgPSAwOworICAgICAgICAgICAg Y2tzdHJuY3B5KGZudmFsLGNrZmVycm9yKHgpLEZOVkFMTCk7CisgICAgICAgICAgICBnb3RvIGZu ZW5kOworICAgICAgICB9CisgICAgICAgIGlmIChhcmduIDwgMSkgeyAgICAgICAgICAgICAgICAg LyogQWxsIGZpbGUgZnVuY3Rpb25zIG5lZWQgY2hhbm5lbCAqLworCSAgICBpZiAoY3ggPT0gRk5f RlNUQVQpIHsJLyogRXhjZXB0IGZfc3RhdHVzKCksIGUuZy4gd2hlbiAqLworCQlmbnZhbFswXSA9 ICcwJzsJCS8qIGNhbGxlZCB3aXRoIGEgdmFyaWFibGUgdGhhdCAqLworCQlmbnZhbFsxXSA9IE5V TDsJCS8qIGhhc24ndCBiZWVuIGRlZmluZWQgeWV0LiAqLworCQlmYWlsZWQgPSAwOworCSAgICB9 IGVsc2UgeworCQlpZiAoZm5kaWFncykKKwkJIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9S Ok1JU1NJTkdfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJICAgIH0KKyAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJkaWdpdHMoYnBbMF0pKSB7ICAgICAg ICAgICAvKiBDaGFubmVsIG11c3QgYmUgbnVtZXJpYyAqLworICAgICAgICAgICAgY2hhbm5lbCA9 IGF0b2koYnBbMF0pOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IEZhaWwgaWYgaXQgaXNuJ3QgKi8KKyAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAg ICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICI8RVJS T1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICBnb3Rv IGZuZW5kOworICAgICAgICB9CisgICAgICAgIGlmIChjaGFubmVsIDwgMCB8fCBjaGFubmVsID4g el9tYXhjaGFuKSB7IC8qIENoZWNrIGNoYW5uZWwgcmFuZ2UgKi8KKyAgICAgICAgICAgIGlmIChm bmRpYWdzKQorICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAg ICAgICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwp OworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAgICAgICB4ID0gel9nZXRt b2RlKGNoYW5uZWwpOyAgICAgICAgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBjaGFubmVsICovCisK KyAgICAgICAgZmFpbGVkID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgc3VjY2Vz cyBmcm9tIGhlcmUgZG93biAqLworICAgICAgICBpZiAoY3ggPT0gRk5fRlNUQVQpIHsgICAgICAg ICAgIC8qIFN0YXR1cyAvIG1vZGVzIG9mIGNoYW5uZWwgKi8KKyAgICAgICAgICAgIGlmICh4ID4g LTEpCisgICAgICAgICAgICAgIHggJj0gRk1fUldCOyAgICAgICAgICAgICAgLyogTWFzayBvdXQg aXJyZWxldmFudCBiaXRzICovCisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAg ICAgLyogSW4gdGhpcyBjYXNlIG5vdCBvcGVuIGlzIE9LICovCisgICAgICAgICAgICAgIHggPSAw OyAgICAgICAgICAgICAgICAgICAgLyogMCBpZiBub3Qgb3BlbiwgMS03IGlmIG9wZW4gKi8KKyAg ICAgICAgICAgIHNwcmludGYoZm52YWwsIiVkIix4KTsgICAgICAvKiBTQUZFICovCisgICAgICAg ICAgICBnb3RvIGZuZW5kOworICAgICAgICB9IGVsc2UgaWYgKHggPCAxKSB7ICAgICAgICAgICAg IC8qIE5vdCBcZl9zdGF0dXMoKSBzbyBtdXN0IGJlIG9wZW4gKi8KKyAgICAgICAgICAgIGZhaWxl ZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgY2ttYWttc2co Zm52YWwsRk5WQUxMLCI8RVJST1I6RklMRV9OT1RfT1BFTjpcXGYiLGZuLCIoKT4iLE5VTEwpOwor ICAgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHkpIHsg ICAgICAgICAgICAgICAgICAgIC8qIERvIHRoZSByZXF1ZXN0ZWQgZnVuY3Rpb24gKi8KKyAgICAg ICAgICBjYXNlIEZOX0ZQT1M6ICAgICAgICAgICAgICAgICAvKiBHZXQgcG9zaXRpb24gKi8KKyAg ICAgICAgICAgIHogPSB6X2dldHBvcyhjaGFubmVsKTsJLyogRklYIFRISVMgKi8KKyAgICAgICAg ICAgIHNwcmludGYoZm52YWwsIiVsZCIseik7ICAgICAvKiBTQUZFICovCisgICAgICAgICAgICBn b3RvIGZuZW5kOworCisgICAgICAgICAgY2FzZSBGTl9OTElORTogICAgICAgICAgICAgICAgLyog R2V0IGxpbmUgbnVtYmVyICovCisgICAgICAgICAgICB6ID0gel9nZXRsaW5lKGNoYW5uZWwpOwkv KiBGSVggVEhJUyAqLworICAgICAgICAgICAgc3ByaW50ZihmbnZhbCwiJWxkIix6KTsgICAgIC8q IFNBRkUgKi8KKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisKKyAgICAgICAgICBjYXNlIEZOX0ZF T0Y6ICAgICAgICAgICAgICAgICAvKiBDaGVjayBFT0YgKi8KKyAgICAgICAgICAgIHQgPSAwOwor ICAgICAgICAgICAgaWYgKHggJiBGTV9FT0YpIHQgPSAxOworICAgICAgICAgICAgc3ByaW50Zihm bnZhbCwiJWQiLHQpOyAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisK KyAgICAgICAgICBjYXNlIEZOX0ZJTE5POiAgICAgICAgICAgICAgICAvKiBHZXQgZmlsZSBoYW5k bGUgKi8KKyAgICAgICAgICAgIHggPSB6X2dldGZudW0oY2hhbm5lbCk7CisgICAgICAgICAgICBz cHJpbnRmKGZudmFsLCIlZCIseCk7ICAgICAgLyogU0FGRSAqLworICAgICAgICAgICAgZ290byBm bmVuZDsKKworICAgICAgICAgIGNhc2UgRk5fRlBCTEs6ICAgICAgICAgICAgICAgIC8qIFJlYWQg b3Igd3JpdGUgYmxvY2sgKi8KKyAgICAgICAgICBjYXNlIEZOX0ZHQkxLOgorICAgICAgICAgICAg aWYgKGFyZ24gPCAyKSB7CisgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAg ICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAiPEVSUk9SOk1JU1NJTkdfQVJHOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAg ICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZGlnaXRzKGJw WzFdKSkgeworICAgICAgICAgICAgICAgIHQgPSBhdG9pKGJwWzFdKTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9S OkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBGTl9GR0NIQVI6ICAgICAg ICAgICAgICAgLyogUmVhZCBvciB3cml0ZSBjaGFyYWN0ZXIgb3IgbGluZSAqLworICAgICAgICAg IGNhc2UgRk5fRlBDSEFSOgorICAgICAgICAgIGNhc2UgRk5fRkdMSU5FOgorICAgICAgICAgIGNh c2UgRk5fRlBMSU5FOgorICAgICAgICAgICAgZm52YWxbMF0gPSBOVUw7CisgICAgICAgICAgICBz d2l0Y2ggKHkpIHsKKyAgICAgICAgICAgICAgY2FzZSBGTl9GR0NIQVI6IHQgPSB6X2luKGNoYW5u ZWwsZm52YWwsRk5WQUxMLDEsMSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEZOX0ZHTElO RTogdCA9IHpfaW4oY2hhbm5lbCxmbnZhbCxGTlZBTEwsRk5WQUxMLTEsMCk7IGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIEZOX0ZHQkxLOgorICAgICAgICAgICAgICAgIGlmICh0ID49IEZOVkFM TCkgdCA9IEZOVkFMTCAtIDE7CisgICAgICAgICAgICAgICAgdCA9IHpfaW4oY2hhbm5lbCxmbnZh bCxGTlZBTEwsdCwxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz ZSBGTl9GUENIQVI6IHQgPSB6X291dChjaGFubmVsLGJwWzFdLDEsMSk7ICBicmVhazsKKyAgICAg ICAgICAgICAgY2FzZSBGTl9GUExJTkU6IHQgPSB6X291dChjaGFubmVsLGJwWzFdLC0xLDApOyBi cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBGTl9GUEJMSzogIHQgPSB6X291dChjaGFubmVsLGJw WzFdLC0xLDEpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0IDwgMCkg eyAgICAgICAgICAgICAgICAvKiBIYW5kbGUgcmVhZC93cml0ZSBlcnJvciAqLworICAgICAgICAg ICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MgJiYgdCAhPSBG WF9FT0YpCisgICAgICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkZJTEVfRVJST1JfJWQ6XFxmIixmbiwiKCk+IixO VUxMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKGN4ID09IEZOX0ZHQ0hBUikgICAgICAgIC8qIE51bGwgdGVybWluYXRlIGNoYXIg Ki8KKyAgICAgICAgICAgICAgZm52YWxbMV0gPSBOVUw7CisgICAgICAgICAgICAvKiBXcml0ZSAo cHV0KSBmdW5jdGlvbnMgcmV0dXJuIG51bWVyaWMgc3RhdHVzIGNvZGUgKi8KKyAgICAgICAgICAg IGlmIChjeCA9PSBGTl9GUENIQVIgfHwgY3ggPT0gRk5fRlBMSU5FIHx8IGN4ID09IEZOX0ZQQkxL KQorICAgICAgICAgICAgICBzcHJpbnRmKGZudmFsLCIlZCIsdCk7ICAgIC8qIFNBRkUgKi8KKyAg ICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tDSEFO TkVMSU8gKi8KKworICAgIGlmIChjeCA9PSBGTl9TUVVFRVpFKSB7CQkvKiBTdHJpbmcgZnVuY3Rp b24gXGZzcXVlZXplKCkgKi8KKwkvKiBTcXVlZXplIG91dCB3aGl0ZXNwYWNlICovCisJLyogQWRk IG9wdGlvbnMgbGF0ZXIgZm9yIHdoZXRoZXIgdG8gdHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyBi bGFua3MgKi8KKyAgICAgICAgLyogYW5kIHdoYXQgdG8gZG8gYWJvdXQgY29udHJvbCBjaGFyYWN0 ZXJzLCA4LWJpdCB3aGl0ZXNwYWNlLCBldGMgKi8KKwlpbnQgc3RhcnRlZCA9IDA7CQkvKiBGbGFn IGZvciBmaXJzdCBub24td2hpdGVzcGFjZSAqLworCWludCBuID0gMDsJCQkvKiBCbGFuay9UYWIg Y291bnRlciAqLworICAgICAgICBzID0gYnBbMF0gPyBicFswXSA6ICIiOworICAgICAgICBwID0g Zm52YWw7CQkJLyogUmVzdWx0IGJ1ZmZlciAqLworCXdoaWxlICgqcykgewkJCS8qIFdoaWxlIHRo ZXJlIGlzIGlucHV0ICovCisJICAgIGlmICghc3RhcnRlZCAmJiAoKnMgPT0gJyAnIHx8ICpzID09 ICdcMDExJykpIHsKKwkJcysrOwkJCS8qIFNraXAgcGFzdCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8K KwkJY29udGludWU7CisJICAgIH0KKwkgICAgc3RhcnRlZCsrOwkJCS8qIExlYWRpbmcgd2hpdGVz cGFjZSB3YXMgc2tpcHBlZCAqLworCSAgICBpZiAoKnMgIT0gJyAnICYmICpzICE9ICdcMDExJykg eyAvKiBIYXZlIGEgbm9uc3BhY2UgY2hhciAqLworCQluID0gMDsJCQkvKiByZXNldCBzcGFjZSBj b3VudGVyICovCisJCSpwKysgPSAqcysrOwkJLyogY29weSBjaGFyIHRvIGRlc3RpbmF0aW9uICov CisJCWNvbnRpbnVlOworCSAgICB9CQkgICAgCisJICAgIGlmIChuKysgPiAwKSB7CQkvKiBIYXZl IGJsYW5rIG9yIHRhYiAqLworCQlzKys7CQkJLyogZG9uJ3QgY29weSBtb3JlIHRoYW4gb25lICov CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgICpwKysgPSAnICc7CQkJLyogRGVwb3NpdCBvbmUg c3BhY2UgKi8KKwkgICAgcysrOwkJCS8qIGFuZCBnbyB0byBuZXh0IHNvdXJjZSBjaGFyICovCisJ fQorCWlmICgqKHAtMSkgPT0gJyAnKSBwLS07CQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8K KyAgICAgICAgKnAgPSBOVUw7CQkJLyogVGVybWluYXRlIHN0cmluZyAqLworICAgICAgICBwID0g Zm52YWw7CQkJLyogcG9pbnQgdG8gYmVnaW5uaW5nICovCisgICAgICAgIGdvdG8gZm5lbmQ7CQkJ LyogRG9uZS4gKi8KKyAgICB9CisgICAgaWYgKGN4ID09IEZOX1BBVFRFUk4pIHsgICAgICAgICAg ICAgLyogXGZwYXR0ZXJuKCkgZm9yIElOUFVUICovCisgICAgICAgIGl0c2FwYXR0ZXJuID0gMTsK KyAgICAgICAgaWYgKGFyZ24gPiAwKSB7CisgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAg ICAgICBja3N0cm5jcHkoZm52YWwsYnBbMF0sRk5WQUxMKTsKKyAgICAgICAgfSBlbHNlIHAgPSAi IjsKKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9CisgICAgaWYgKGN4ID09IEZOX0hFWDJOIHx8 IGN4ID09IEZOX09DVDJOKSB7IC8qIFxmaGV4Mm4oKSwgXGZvY3QybigpICovCisgICAgICAgIHAg PSAiMCI7CisgICAgICAgIGlmIChhcmduIDwgMSkKKyAgICAgICAgICBnb3RvIGZuZW5kOworICAg ICAgICBwID0gY2tyYWRpeChicFswXSwgKChjeCA9PSBGTl9IRVgyTikgPyAxNiA6IDgpLCAxMCk7 CisgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJP UjpBUkdfT1VUX09GX1JBTkdFOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICBnb3Rv IGZuZW5kOworICAgICAgICB9CisgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgIGNrc3RybmNw eShmbnZhbCxwLEZOVkFMTCk7CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290byBmbmVu ZDsKKyAgICB9CisKKyAgICBpZiAoY3ggPT0gRk5fSEVYMklQKSB7CisgICAgICAgIGludCBjWzJd LCBpcFs0XSwgaSwgazsKKyAgICAgICAgcCA9ICIwIjsKKyAgICAgICAgaWYgKGFyZ24gPCAxKQor ICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIHMgPSBicFswXTsKKyAgICAgICAgaWYgKChp bnQpc3RybGVuKHMpICE9IDgpIHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAg ICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAg ICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+ IixOVUxMKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgcCA9 IGZudmFsOworICAgICAgICBmb3IgKGsgPSAwOyBrIDwgODsgayArPSAyKSB7CisgICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgY1tpXSA9ICpzKys7 CisgICAgICAgICAgICAgICAgaWYgKGlzbG93ZXIoY1tpXSkpIGNbaV0gPSB0b3VwcGVyKGNbaV0p OworICAgICAgICAgICAgICAgIGlmIChjW2ldID49ICcwJyAmJiBjW2ldIDw9ICc5JykgeworICAg ICAgICAgICAgICAgICAgICBjW2ldIC09IDB4MzA7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm IChjW2ldID49ICdBJyAmJiBjW2ldIDw9ICdGJykgeworICAgICAgICAgICAgICAgICAgICBjW2ld IC09IDB4Mzc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ZmFpbGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAg ICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICI8RVJST1I6QVJHX09VVF9PRl9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOwor ICAgICAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBpcFtrLzJdID0gY1swXSA8PCA0IHwgY1sxXTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHNwcmludGYocCwiJWQuJWQuJWQuJWQiLGlwWzBdLGlwWzFdLGlwWzJdLGlwWzNd KTsgLyogU0FGRSAqLworICAgICAgICB9CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQorICAg IGlmIChjeCA9PSBGTl9JUDJIRVgpIHsKKyAgICAgICAgaW50IGlwWzRdLCBpOworICAgICAgICBj aGFyICogcTsKKyAgICAgICAgcCA9ICIwMDAwMDAwMCI7CisgICAgICAgIGlmIChhcmduIDwgMSkK KyAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICBzID0gYnBbMF07CisgICAgICAgIHAgPSBm bnZhbDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgcSA9 IGNrc3RyY2hyKHMsJy4nKTsKKyAgICAgICAgICAgIGlmIChxKSB7CisgICAgICAgICAgICAgICAg KnErKyA9IE5VTDsKKyAgICAgICAgICAgICAgICBpcFtpXSA9IGF0b2kocyk7CisgICAgICAgICAg ICAgICAgcyA9IHE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZhaWxl ZCA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9S OkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICBn b3RvIGZuZW5kOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlwWzNdID0gYXRv aShzKTsKKyAgICAgICAgc3ByaW50ZihwLCIlMDJ4JTAyeCUwMnglMDJ4IixpcFswXSxpcFsxXSxp cFsyXSxpcFszXSk7IC8qIFNBRkUgKi8KKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9CisgICAg aWYgKGN4ID09IEZOX1JBRElYKSB7CisgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgIHAgPSBm bnZhbDsKKyAgICAgICAgaWYgKGFyZ24gPCAzKSB7CisgICAgICAgICAgICBpZiAoZm5kaWFncykK KyAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6TUlTU0lOR19BUkc6 XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCFyZGlnaXRzKGJwWzFdKSB8fCAhcmRpZ2l0cyhicFsyXSkpIHsKKyAgICAg ICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEws CisgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJHX05PVF9OVU1FUklDOlxcZiIsZm4s IigpPiIsTlVMTCk7CisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAgICAg IHAgPSBja3JhZGl4KGJwWzBdLGF0b2koYnBbMV0pLGF0b2koYnBbMl0pKTsKKyAgICAgICAgaWYg KCFwKSB7CisgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgY2ttYWttc2co Zm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAiPEVSUk9SOkFSR19PVVRfT0Zf UkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7CisgICAg ICAgIH0KKyAgICAgICAgZmFpbGVkID0gMDsKKyAgICAgICAgY2tzdHJuY3B5KGZudmFsLHAsRk5W QUxMKTsKKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyAg ICBpZiAoY3ggPT0gRk5fSk9JTikgeworICAgICAgICBpbnQgaSwgeCwgeSwgeiwgZmxhZywgZmxh ZzIsIGhpLCBsbywgbWF4LCBzZXBsZW4sIGdyb3VwaW5nID0gMDsKKyAgICAgICAgY2hhciBhYnVm WzE2XSwgYywgKnMsICpxLCAqc2VwID0gTlVMTDsKKyAgICAgICAgY2hhciAqIGdyX29wbiA9ICJc InsnKFs8IjsgICAgICAvKiBHcm91cCBvcGVuIGJyYWNrZXRzICovCisgICAgICAgIGNoYXIgKiBn cl9jbHMgPSAiXCJ9JyldPiI7ICAgICAgLyogR3JvdXAgY2xvc2UgYnJhY2tldHMgKi8KKyAgICAg ICAgY2hhciBsYlsyXSwgcmJbMl07ICAgICAgICAgICAgICAvKiBTZWxlY3RlZCBsZWZ0IGFuZCBy aWdodCBicmFja2V0cyAqLworCWludCBjc3YgPSAwLCB0c3YgPSAwOwkJLyogRnVuY3Rpb24gZmxh Z3MgKi8KKwljaGFyIHNwZWNpYWxjaGFyID0gMDsJCS8qIEZpZWxkIGNoYXIgdGhhdCB0cmlnZ2Vy cyBncm91cGluZyAqLworCWNoYXIgKnMyID0gTlVMTDsJCS8qIEFkZHJlc3Mgb2YgbWFsbG9jJ2Qg c3RvcmFnZSAqLworCisgICAgICAgIGZhaWxlZCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyog QXNzdW1lIGZhaWx1cmUgKi8KKyAgICAgICAgZm52YWxbMF0gPSBOVUw7CisgICAgICAgIGRlYnVn KEYxMDEsIkZOSk9JTiBBUkdOIiwiIixhcmduKTsKKworICAgICAgICBja3N0cm5jcHkoYWJ1Zixi cFswXSwxNik7ICAgICAgIC8qIEdldCBhcnJheSByZWZlcmVuY2UgKi8KKyAgICAgICAgcyA9IGFi dWY7CisgICAgICAgIGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJmxvLCZoaSkpIDwgMCkgeyAgLyog R2V0IGluZGV4IGFuZCBib3VuZHMgKi8KKyAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAg ICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpBUkdfQkFEX0FSUkFZOlxcZiIs Zm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICB9CisgICAg ICAgIHAgPSBmbnZhbDsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0ICov CisgICAgICAgIG1heCA9IGFfZGltW3hdOyAgICAgICAgICAgICAgICAgLyogU2l6ZSBvZiBhcnJh eSAqLworICAgICAgICBpZiAobG8gPCAwKSBsbyA9IDE7ICAgICAgICAgICAgIC8qIFVzZSBnaXZl biByYW5nZSBpZiBhbnkgKi8KKyAgICAgICAgaWYgKGxvID4gbWF4KSBsbyA9IG1heDsKKyNpZmRl ZiBDT01NRU5UCisJaGkgPSBtYXg7CisjZWxzZQorLyoKKyAgVGhpcyBpcyBhIHdvcmthcm91bmQg Zm9yIHRoZSBwcm9ibGVtIGluIHdoaWNoIHRoZSBkaW1lbnNpb24gb2YgdGhlIFwmX1tdCisgIGFy cmF5IChidXQgbm90IGl0cyBjb250ZW50cykgZ3Jvd3MgdXBvbiBlbnRyeSB0byBhIFNXSVRDSCBi bG9jay4gIEJ1dCB0aGlzCisgIGNvZGUgcHJldmVudHMgdGhlIGRpbWVuc2lvbiBmcm9tIGdyb3dp bmcuICBHbyBmaWd1cmUuCisqLworICAgICAgICBpZiAoaGkgPCAwKSB7CQkJLyogQm91bmRzIG5v dCBnaXZlbiAqLworICAgICAgICAgICAgaWYgKHgpCQkJLyogUmVndWxhciBhcnJheSAqLworCSAg ICAgIGhpID0gbWF4OworCSAgICBlbHNlCQkJLyogQXJndW1lbnQgdmVjdG9yIGFycmF5ICovCisJ ICAgICAgZm9yIChoaSA9IG1heDsgaGkgPj0gbG87IGhpLS0pIHsgLyogaWdub3JlIGFueSB0cmFp bGluZyAqLworCQkgIGlmICghYV9wdHJbeF1baGldKSBjb250aW51ZTsgLyogZW1wdHkgZWxlbWVu dHMgKi8KKwkJICBpZiAoISooYV9wdHJbeF1baGldKSkgY29udGludWU7CisJCSAgYnJlYWs7CisJ ICAgICAgfQorCX0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlmIChoaSA+IG1heCkg aGkgPSBtYXg7CisgICAgICAgIGZhaWxlZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogVW5z ZXQgZmFpbHVyZSBmbGFnICovCisgICAgICAgIGlmIChtYXggPCAxKQorICAgICAgICAgIGdvdG8g Zm5lbmQ7CisgICAgICAgIHNlcCA9ICIgIjsgICAgICAgICAgICAgICAgICAgICAgLyogU2VwYXJh dG9yICovCisgICAgICAgIGxiWzBdID0gTlVMOwkJCS8qIEdyb3VwIHN0YXJ0IGNoYXIgKGFzIHN0 cmluZykgKi8KKyAgICAgICAgcmJbMF0gPSBOVUw7CisgICAgICAgIGxiWzFdID0gTlVMOwkJCS8q IEdyb3VwIGVuZCBjaGFyIGFzIHN0cmluZyAqLworICAgICAgICByYlsxXSA9IE5VTDsKKworICAg ICAgICBpZiAoYXJnbiA+IDEpIHsKKwkgICAgaWYgKGJwWzFdKSBpZiAoKmJwWzFdKSB7CS8qIElm IGFyZzEgZ2l2ZW4gYW5kIG5vdCBlbXB0eSAqLworCQlpZiAoIXN0cmNtcChicFsxXSwiQ1NWIikp IHsgLyogU3BlY2lhbCAiQ1NWIiBzeW1ib2xpYyBhcmcgKi8KKwkJICAgIGNzdisrOwkJLyogTWFr ZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0ICovCisJCSAgICBzZXAgPSAiLCI7CQkvKiBDb21tYSAq LworCQkgICAgc3BlY2lhbGNoYXIgPSAqc2VwOwkvKiBTZXBhcmF0b3IgaXMgc3BlY2lhbCBjaGFy YWN0ZXIgKi8KKwkJICAgIGdyb3VwaW5nID0gMTsJLyogR3JvdXAgd2l0aCBkb3VibGVxdW90ZXMg Ki8KKwkJICAgIGxiWzBdID0gJyInOwkvKiBhbmQgaGVyZSAqLworCQkgICAgcmJbMF0gPSAnIic7 CS8qIHRoZXkgYXJlICovCisJCX0gZWxzZSBpZiAoIXN0cmNtcChicFsxXSwiVFNWIikpIHsgLyog IlRTViIgc3ltYm9saWMgYXJnICovCisJCSAgICB0c3YrKzsJCS8qIE1ha2UgYSBUYWIgc2VwYXJh dGVkIGxpc3QgKi8KKwkJICAgIHNlcCA9ICJcMDExIjsJLyogVGFiICovCisJCSAgICBzcGVjaWFs Y2hhciA9ICpzZXA7CisJCSAgICBncm91cGluZyA9IDA7CS8qIE5vIGdyb3VwaW5nICovCisJCX0g ZWxzZQkJCS8qIE5vcm1hbCBjYXNlICovCisJCSAgc2VwID0gYnBbMV07CQkvKiB1c2UgdGhlIHNl cGFyYXRvciBjaGFyIHNwZWNpZmllZCAqLworCSAgICB9CisJfQorICAgICAgICBpZiAoYXJnbiA+ IDIgJiYgIWNzdiAmJiAhdHN2KSB7CS8qIEdyb3VwaW5nPyAqLworICAgICAgICAgICAgY2hhciAq IGJwMiA9IGJwWzJdOworICAgICAgICAgICAgaWYgKCFicDIpIGJwMiA9ICIwIjsKKyAgICAgICAg ICAgIGlmICghKmJwMikgYnAyID0gIjAiOworICAgICAgICAgICAgaWYgKGNoa251bShicDIpKSB7 CisgICAgICAgICAgICAgICAgZ3JvdXBpbmcgPSBhdG9pKGJwMik7CisgICAgICAgICAgICAgICAg aWYgKGdyb3VwaW5nIDwgMCB8fCBncm91cGluZyA+IDYzKQorICAgICAgICAgICAgICAgICAgZ3Jv dXBpbmcgPSAxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmYWlsZWQg PSAxOworICAgICAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICAgICAgY2tt YWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpB UkdfTk9UX05VTUVSSUM6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICBnb3Rv IGZuZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGdyb3VwaW5nKSB7ICAgICAg ICAgICAgIC8qIFRha2UgbG93ZXN0LW9yZGVyIG9uZSAqLworICAgICAgICAgICAgICAgIGludCBq LCBrOyAgICAgICAgICAgICAgIC8qIGFuZCBzZXQgdGhlIG90aGVycyB0byAwICovCisgICAgICAg ICAgICAgICAgZm9yIChrID0gMDsgayA8IDY7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBq ID0gMSA8PCBrOworICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBpbmcgJiBqKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBsYlswXSA9IGdyX29wbltrXTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJiWzBdID0gZ3JfY2xzW2tdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKwlpZiAoIWNzdiAmJiAhdHN2KSB7CQkvKiBOb3JtYWwgY2FzZSwgbm90IENT ViBvciBUU1YgKi8KKwkgICAgc3BlY2lhbGNoYXIgPSBTUDsJCS8qIFNwZWNpYWwgY2hhcmFjdGVy IGlzIHNwYWNlICovCisJICAgIGlmIChhcmduID4gMykJCS8qIE5vbnplcm8gNHRoIGFyZyBmb3Ig bm8gc2VwYXJhdG9yICovCisJICAgICAgaWYgKGNoa251bShicFszXSkpCisJCWlmIChhdG9pKGJw WzNdKSA+IDApCisJCSAgc2VwID0gTlVMTDsKKwkgICAgaWYgKCFzZXApIHsKKwkJc2VwID0gIiI7 CisJCXNlcGxlbiA9IDA7CisJICAgIH0gZWxzZQorCSAgICAgIHNlcGxlbiA9IHN0cmxlbihzZXAp OworCX0KKyAgICAgICAgZm9yIChpID0gbG87IGkgPD0gaGk7IGkrKykgeyAgICAvKiBMb29wIHRo cnUgc2VsZWN0ZWQgYXJyYXkgZWxlbWVudHMgKi8KKyAgICAgICAgICAgIHMgPSBhX3B0clt4XVtp XTsgICAgICAgICAgICAvKiBHZXQgbmV4dCBlbGVtZW50ICovCisgICAgICAgICAgICBpZiAoIXMp CisgICAgICAgICAgICAgIHMgPSAiIjsKKyAgICAgICAgICAgIGZsYWcgPSAwOyAgICAgICAgICAg ICAgICAgICAvKiBGbGFnIHRvIGluZGljYXRlIGdyb3VwaW5nIG5lZWRlZCAqLworCSAgICBmbGFn MiA9IDA7CQkJLyogRmxhZyBmb3IgaW50ZXJuYWwgZG91YmxlcXVvdGVzICovCisgICAgICAgICAg ICBpZiAoZ3JvdXBpbmcpIHsgICAgICAgICAgICAgLyogRG9lcyB0aGlzIGVsZW1lbnQgbmVlZCBx dW90aW5nPyAqLworICAgICAgICAgICAgICAgIHEgPSBzOyAgICAgICAgICAgICAgICAgIC8qIExv b2sgZm9yIHNwZWNpYWwgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgd2hpbGUgKChjID0g KnErKykpIHsJLyogSWYgZm91bmQgKi8KKwkJICAgIGlmIChjID09IHNwZWNpYWxjaGFyKSAvKiBn cm91cGluZyBpcyByZXF1aXJlZCAqLworCQkgICAgICBmbGFnKys7CisJCSAgICBpZiAoY3N2ICYm IChjID09ICciJykpIC8qIENoYXJhY3RlciB0aGF0IG5lZWRzIGRvdWJsaW5nICovCisJCSAgICAg IGZsYWcyKys7CQkgICAvKiBpbiBjb21tYS1zZXBhcmF0ZWQgbGlzdCAqLworCQkgICAgaWYgKGZs YWcgJiYgIWNzdikJLyogRXhpdCBlYXJseSBpZiBubyBtb3JlIHRvIGRvICovCisJCSAgICAgIGJy ZWFrOworCQl9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB5ID0gc3RybGVuKHMpOyAgICAg ICAgICAgICAgLyogR2V0IGxlbmd0aCBvZiB0aGlzIGVsZW1lbnQgKi8KKwkgICAgaWYgKCh5ID4g MCkgJiYgY3N2ICYmICFmbGFnKSB7IC8qIENTViBpdGVtIG5lZWRzIGdyb3VwaW5nICovCisJCWlm IChzWzBdID09IFNQIHx8IHNbeS0xXSA9PSBTUCB8fCAvKiBpZiBpdCBoYXMgbGVhZGluZyAqLwor CQkgICAgc1swXSA9PSBIVCB8fCBzW3ktMV0gPT0gSFQpCS8qIG9yIHRyYWlsaW5nIHdoaXRlc3Bh Y2UgKi8KKwkJICBmbGFnKys7CQkvKiB0aGVuIGl0IG5lZWRzIGdyb3VwaW5nICovCisJICAgIH0K KwkgICAgaWYgKGZsYWcgfHwgZmxhZzIpIHsJLyogU3RyaW5nIG5lZWRzIGdyb3VwaW5nIG9yIHF1 b3RpbmcgKi8KKwkJY2hhciAqc3MgPSBzOworICAgICAgICAgICAgICAgIHEgPSAoY2hhciAqKW1h bGxvYyh5ICsgZmxhZzIgKyAzKTsgLyogTWFrZSBuZXcgYnVmZmVyICovCisJCWlmIChxKSB7CisJ CSAgICBzMiA9IHE7CQkvKiBhbmQgdGhpcyBpcyB3aGF0IHRvIGZyZWUgKi8KKwkJICAgIGlmIChm bGFnKQkJLyogSWYgZ3JvdXBpbmcgKi8KKwkJICAgICAgKnErKyA9IGxiWzBdOwkvKiBwdXQgb3Bl bmluZyBncm91cCBxdW90ZSAqLworCQkgICAgd2hpbGUgKCpzcykgewkvKiBMb29wIHRocm91Z2gg c3RyaW5nICovCisJCQlpZiAoZmxhZzIgJiYgKCpzcyA9PSAnIicpKSAvKiBJZiBDU1YgYW5kIHRo aXMgYSAnIicgKi8KKwkJCSAgKnErKyA9ICpzczsJICAgICAgICAgICAvKiBkb3VibGUgaXQuICov CisJCQkqcSsrID0gKnNzKys7CS8qIENvcHkgdGhlIGNoYXJhY3RlciAqLworCQkgICAgfQorCQkg ICAgaWYgKGZsYWcpCQkvKiBJZiBncm91cGluZyAqLworCQkgICAgICAqcSsrID0gcmJbMF07CS8q IGFkZCBjbG9zaW5nIGdyb3VwIHF1b3RlICovCisJCSAgICAqcSA9IE5VTDsJCS8qIHRlcm1pbmF0 ZSB0aGUgcmVzdWx0LiAqLworCQkgICAgcyA9IHMyOworCQkgICAgeSA9IHN0cmxlbihzKTsKKwkJ fQorCSAgICB9CisgICAgICAgICAgICB6ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogTnVt YmVyIG9mIGNoYXJzIGNvcGllZCAqLworICAgICAgICAgICAgZmxhZyA9IDA7ICAgICAgICAgICAg ICAgICAgIC8qIGZsYWcgaXMgbm93IGJ1ZmZlci1vdmVycnVuIGZsYWcgKi8KKyAgICAgICAgICAg IGlmICh5ID4gMCkgICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIHN0cmluZyBpcyBub3QgZW1w dHkgKi8KKyAgICAgICAgICAgICAgeiA9IGNrc3RybmNhdChmbnZhbCxzLEZOVkFMTCk7IC8qIGNv cHkgaXQuICovCisJICAgIGlmIChzMikgZnJlZShzMik7CQkvKiBGcmVlIHRlbXAgc3RvcmFnZSAq LworICAgICAgICAgICAgaWYgKHogPCB5KSAgICAgICAgICAgICAgICAgIC8qIE5vdyBjaGVjayBm b3IgYnVmZmVyIG92ZXJydW4uICovCisgICAgICAgICAgICAgIGZsYWcrKzsKKyAgICAgICAgICAg IGlmICghZmxhZyAmJiAqc2VwICYmIGkgPCBoaSkgeyAvKiBJZiBidWZmZXIgc3RpbGwgaGFzIHJv b20gKi8KKyAgICAgICAgICAgICAgICB6ID0gY2tzdHJuY2F0KGZudmFsLHNlcCxGTlZBTEwpOyAv KiBjb3B5IGRlbGltaXRlciAqLworICAgICAgICAgICAgICAgIGlmICh6IDwgc2VwbGVuKQorICAg ICAgICAgICAgICAgICAgZmxhZysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZs YWcpIHsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAgIGlmIChm bmRpYWdzKQorICAgICAgICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIjxFUlJPUjpSRVNVTFRfVE9PX0xPTkc6XFxmIixmbiwiKCk+ IixOVUxMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZuZW5kOworICAgICAgICAgICAgfQorICAg ICAgICB9CisJaXNqb2luID0gMTsKKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9CisgICAgaWYg KGN4ID09IEZOX1NVQlNUKSB7ICAgICAgICAgICAgICAgLyogXGZzdWJzdGl0dXRlKCkgKi8KKyAg ICAgICAgQ0hBUiBjLCAqIHMsICogciwgKiB0cFsyXSwgYnVmMVsyNTZdLCBidWYyWzI1Nl0sIGJ1 ZjNbMjU2XTsKKyAgICAgICAgaW50IGxlbiwgaSwgaiwgc3RhdGUgPSAwLCBsbyA9IDAsIGhpID0g MDsKKworICAgICAgICBmYWlsZWQgPSAwOworICAgICAgICBwID0gZm52YWw7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlc3VsdCBwb2ludGVyICovCisgICAgICAgICpwID0gTlVMOworICAgICAg ICBpZiAoIWJwWzBdKSAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHRhcmdldCwgbm8gcmVzdWx0 Ki8KKyAgICAgICAgICBnb3RvIGZuZW5kOworCisgICAgICAgIGxlbiA9IHN0cmxlbihicFswXSk7 ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHNvdXJjZSAqLworICAgICAgICBpZiAobGVuID09IDAp CisgICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgaWYgKGxlbiA+IEZOVkFMTCkgeworICAg ICAgICAgICAgZmFpbGVkID0gMTsKKyAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAg ICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICI8RVJS T1I6UkVTVUxUX1RPT19MT05HOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICBnb3Rv IGZuZW5kOworICAgICAgICB9CisgICAgICAgIGlmICghYnBbMV0pIHsKKyAgICAgICAgICAgIGNr c3RybmNweShicFswXSxmbnZhbCxGTlZBTEwpOworICAgICAgICAgICAgZ290byBmbmVuZDsKKyAg ICAgICAgfQorICAgICAgICB0cFswXSA9IGJ1ZjE7ICAgICAgICAgICAgICAgICAgIC8qIEZvciBz Mi1zMyBpbnRlcnByZXRhdGlvbiBsb29wICovCisgICAgICAgIHRwWzFdID0gYnVmMjsKKworICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsgICAgIC8qIEluaXRpYWxpemUgd29ya2lu ZyBidWZmZXJzICovCisgICAgICAgICAgICBidWYxW2ldID0gMDsgICAgICAgICAgICAgICAgLyog czIgZXhwYW5zaW9uIGJ1ZmZlciAqLworICAgICAgICAgICAgYnVmMltpXSA9IDA7ICAgICAgICAg ICAgICAgIC8qIHMzIGV4cGFuc2lvbiBidWZmZXIgKi8KKyAgICAgICAgICAgIGJ1ZjNbaV0gPSBp OyAgICAgICAgICAgICAgICAvKiBUcmFuc2xhdGlvbiB0YWJsZSAqLworICAgICAgICB9CisgICAg ICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsgICAgICAgLyogSW50ZXJwcmV0IHMyIGFuZCBz MyAqLworICAgICAgICAgICAgcyA9IChDSEFSICopYnBbaSsxXTsgICAgICAgIC8qIEFyZyBwb2lu dGVyICovCisgICAgICAgICAgICBpZiAoIXMpIHMgPSAoQ0hBUiAqKSIiOworICAgICAgICAgICAg ciA9IHRwW2ldOyAgICAgICAgICAgICAgICAgIC8qIFRvIGNvbnN0cnVjdCBpbnRlcnByZXRlZCBh cmcgKi8KKyAgICAgICAgICAgIGogPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQg YnVmIHBvaW50ZXIgKi8KKyAgICAgICAgICAgIHN0YXRlID0gMDsgICAgICAgICAgICAgICAgICAv KiBJbml0aWFsIHN0YXRlICovCisgICAgICAgICAgICB3aGlsZSAoYyA9ICpzKyspIHsgICAgICAg ICAgLyogTG9vcCB0aHJ1IGFyZyBjaGFycyAqLworICAgICAgICAgICAgICAgIGlmIChqID4gMjU1 KSAgICAgICAgICAgIC8qIE91dHB1dCBidWYgZnVsbCAqLworICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICAgICAgICAgICAg Y2FzZSAwOiAgICAgICAgICAgICAgIC8qIE5vcm1hbCBzdGF0ZSAqLworICAgICAgICAgICAgICAg ICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6ICAgICAg ICAvKiBIYXZlIHF1b3RlICovCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl ICdbJzogICAgICAgICAvKiBIYXZlIHJhbmdlIHN0YXJ0ZXIgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXRlID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIHJbaisrXSA9IGM7CisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAvKiBRdW90ZWQg Y2hhciAqLworICAgICAgICAgICAgICAgICAgICByW2orK10gPSBjOworICAgICAgICAgICAgICAg ICAgICBzdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgIC8qIFJhbmdlIGJvdHRvbSAqLworICAgICAg ICAgICAgICAgICAgICBsbyA9IGM7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlKys7CisgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAg ICAgICAgICAgIC8qIFJhbmdlIHNlcGFyYXRlciAqLworICAgICAgICAgICAgICAgICAgICBpZiAo YyAhPSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiPEVSUk9SOkJBRF9SQU5HRTpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBmbmVuZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBzdGF0ZSsrOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAvKiBSYW5nZSB0b3AgKi8KKyAgICAgICAg ICAgICAgICAgICAgaGkgPSBjOworICAgICAgICAgICAgICAgICAgICBzdGF0ZSsrOworICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNTogICAgICAg ICAgICAgICAvKiBSYW5nZSBlbmQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gJ10n KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGZuZGlhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNrbWFrbXNn KGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxFUlJP UjpCQURfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg Zm9yIChrID0gbG87IGsgPD0gaGkgJiYgaiA8IDI1NTsgaysrKSAvKiBGaWxsIGluICovCisgICAg ICAgICAgICAgICAgICAgICAgcltqKytdID0gazsKKyAgICAgICAgICAgICAgICAgICAgbG8gPSAw OyBoaSA9IDA7ICAgICAvKiBSZXNldCAqLworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7 CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2ICYmIGJ1ZjFb aV07IGkrKykgeyAgLyogQ3JlYXRlIHRyYW5zbGF0aW9uIHRhYmxlICovCisgICAgICAgICAgICBr ID0gKHVuc2lnbmVkKWJ1ZjFbaV07CisgICAgICAgICAgICBidWYzW2tdID0gYnVmMltpXTsKKyAg ICAgICAgfQorICAgICAgICBzID0gKENIQVIgKilicFswXTsgICAgICAgICAgICAgIC8qIFBvaW50 IHRvIHNvdXJjZSBzdHJpbmcgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7 ICAgICAvKiBUcmFuc2xhdGlvbiBsb29wICovCisgICAgICAgICAgICBrID0gKHVuc2lnbmVkKXNb aV07ICAgICAgICAgLyogR2V0IG5leHQgY2hhciAqLworICAgICAgICAgICAgaWYgKCFidWYzW2td KSAgICAgICAgICAgICAgIC8qIFJlbW92ZSB0aGlzIGNoYXIgKi8KKyAgICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgICAgICAqcCsrID0gYnVmM1trXTsgICAgICAgICAgICAgLyogU3Vic3Rp dHV0ZSB0aGlzIGNoYXIgKi8KKyAgICAgICAgfQorICAgICAgICAqcCA9IE5VTDsKKyAgICAgICAg cCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKworI2lmbmRlZiBOT1NFWFAK KyAgICBpZiAoY3ggPT0gRk5fU0VYUCkgeyAgICAgICAgICAgICAgICAvKiBcZnNleHByZXNzaW9u KGFyZzEpICovCisgICAgICAgIGNoYXIgKiBwMjsKKyAgICAgICAgZnNleHBmbGFnKys7CisgICAg ICAgIHAgPSAoYXJnbiA+IDApID8gZG9zZXhwKGJwWzBdKSA6ICIiOworICAgICAgICBmc2V4cGZs YWctLTsKKyAgICAgICAgcDIgPSBmbnZhbDsKKyAgICAgICAgd2hpbGUgKCgqcDIrKyA9ICpwKysp KSA7CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9CisjZW5k aWYgLyogTk9TRVhQICovCisKKyAgICBpZiAoY3ggPT0gRk5fQ01EU1RLKSB7ICAgICAgICAgICAg ICAvKiBcZmNtZHN0YWNrKG4xLG4yKSAqLworICAgICAgICBpbnQgaSwgaiwgazsKKyAgICAgICAg Y2hhciAqIHM7CisKKyAgICAgICAgaWYgKGJwWzBdKQorICAgICAgICAgIHZhbDEgPSAqKGJwWzBd KSA/IGV2YWx4KGJwWzBdKSA6IGNraXRvYShjbWRsdmwpOworICAgICAgICBlbHNlCisgICAgICAg ICAgdmFsMSA9IGNraXRvYShjbWRsdmwpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgZnJlZShi cFswXSk7ICAgICAgICAgICAgICAgICAgICAvKiAoZXZhbHgoKSBhbHdheXMgdXNlcyBzYW1lIGJ1 ZmZlcikgKi8KKyAgICAgICAgYnBbMF0gPSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiAobm90 IGFueSBtb3JlISkgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGZhaWxlZCA9IDE7 CisgICAgICAgIGlmIChhcmduID4gMSkgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIG1h a2VzdHIoJihicFswXSksdmFsMSk7CisgICAgICAgICAgICB2YWwxID0gYnBbMF07CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICAgICAgdmFsMiA9ICooYnBbMV0pID8gZXZhbHgoYnBbMV0p IDogIjAiOworICAgICAgICAgICAgaWYgKCEoY2hrbnVtKHZhbDEpICYmIGNoa251bSh2YWwyKSkp IHsKKyAgICAgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAgICAgICAgICAgICAgIGNrbWFr bXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICI8RVJST1I6QVJH X05PVF9OVU1FUklDOlxcZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgZ290byBm bmVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbDEg PSBja2l0b2EoY21kbHZsKTsKKyAgICAgICAgICAgIHZhbDIgPSAiMCI7CisgICAgICAgIH0KKyAg ICAgICAgaSA9IGF0b2kodmFsMSk7ICAgICAgICAgICAgICAgICAvKiBMZXZlbCAqLworICAgICAg ICBqID0gYXRvaSh2YWwyKTsgICAgICAgICAgICAgICAgIC8qIEZsYWdzICovCisgICAgICAgIGlm IChpIDwgMCB8fCBpID4gY21kbHZsKSB7CisgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAgICAg ICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAi PEVSUk9SOkFSR19PVVRfT0ZfUkFOR0U6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgZmFpbGVkID0gMDsKKyAgICAgICAgcCA9 IGZudmFsOworICAgICAgICBrID0gY21kc3RrW2ldLnNyYzsgICAgICAgICAgICAgIC8qIFdoYXQg KHByb21wdCwgZmlsZSwgbWFjcm8pICovCisgICAgICAgIGlmIChqKSB7CisgICAgICAgICAgICBj a3N0cm5jcHkoZm52YWwsY2tpdG9hKGspLEZOVkFMTCk7CisgICAgICAgICAgICBnb3RvIGZuZW5k OworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoaykgeworICAgICAgICAgIGNhc2UgQ01EX0tC OgorICAgICAgICAgICAgY2tzdHJuY3B5KGZudmFsLCIocHJvbXB0KSIsRk5WQUxMKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgQ01EX1RGOgorICAgICAgICAgICAgcyA9IHRm bmFtW2NtZHN0a1tpXS5sdmxdOworICAgICAgICAgICAgaWYgKCF6Zm5xZnAocyxGTlZBTEwsZm52 YWwpKQorICAgICAgICAgICAgICBja3N0cm5jcHkoZm52YWwscyxGTlZBTEwpOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBDTURfTUQ6CisgICAgICAgICAgICBja3N0cm5jcHko Zm52YWwsbV9hcmdbY21kc3RrW2ldLmx2bF1bMF0sRk5WQUxMKTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQorI2lmZGVmIENLRkxPQVQK KyAgICBpZiAoY3ggPT0gRk5fRElGREFURSkgeyAgICAgICAgICAgICAvKiBcZmRpZmZkYXRlcyhk MSxkMikgKi8KKyAgICAgICAgY2hhciAqIGQxLCAqIGQyOworICAgICAgICBkMSA9IGJwWzBdID8g YnBbMF0gOiBja2RhdGUoKTsKKyAgICAgICAgZDIgPSBicFsxXSA/IGJwWzFdIDogY2tkYXRlKCk7 CisgICAgICAgIHAgPSAoY2hhciAqKWNtZGlmZmRhdGUoZDEsZDIpOworICAgICAgICBpZiAoIXAp IHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykgewor ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOkJBRF9EQVRFOlxc ZiIsZm4sIigpPiIsTlVMTCk7CisgICAgICAgICAgICAgICAgcCA9IGZudmFsOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGdvdG8gZm5lbmQ7CisgICAgfQorI2VuZGlmIC8qIENL RkxPQVQgKi8KKyAgICBpZiAoY3ggPT0gRk5fQ01QREFURSkgeyAgICAgICAgICAgICAvKiBcZmNt ZGRhdGVzKGQxLGQyKSAqLworICAgICAgICBpbnQgeCA9IDA7CisgICAgICAgIGNoYXIgZDFbMThd LCBkMlsxOF0sICogZHA7CisgICAgICAgIGZhaWxlZCA9IDA7CisgICAgICAgIGQxWzBdID0gTlVM OworICAgICAgICBkMlswXSA9IE5VTDsKKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBkcCA9 IGNtY3Z0ZGF0ZShicFswXSwxKTsKKyAgICAgICAgaWYgKGRwKSB7CisgICAgICAgICAgICBja3N0 cm5jcHkoZDEsZHAsMTgpOworICAgICAgICAgICAgaWYgKChkcCA9IGNtY3Z0ZGF0ZShicFsxXSwx KSkpIHsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoZDIsZHAsMTgpOworICAgICAgICAgICAg ICAgIHggPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh4ID09IDAp IHsKKyAgICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykKKyAg ICAgICAgICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6QkFEX0RBVEU6XFxmIixm biwiKCk+IixOVUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHggPSBzdHJjbXAo ZDEsZDIpOworICAgICAgICAgICAgaWYgKHggPiAwKQorICAgICAgICAgICAgICB4ID0gMTsKKyAg ICAgICAgICAgIGVsc2UgaWYgKHggPCAwKQorICAgICAgICAgICAgICB4ID0gLTE7CisgICAgICAg ICAgICBzcHJpbnRmKGZudmFsLCIlZCIseCk7CisgICAgICAgIH0KKyAgICAgICAgZ290byBmbmVu ZDsKKyAgICB9CisgICAgaWYgKGN4ID09IEZOX1RPR01UKSB7ICAgICAgICAgICAgICAgLyogXGZ1 dGNkYXRlKGQxKSAqLworICAgICAgICBjaGFyICogZDEsICogZHA7CisgICAgICAgIGNoYXIgZGF0 ZWJ1ZlszMl07CisgICAgICAgIGNoYXIgZDJbMzJdOworICAgICAgICBwID0gZm52YWw7CisgICAg ICAgIGZhaWxlZCA9IDE7CisgICAgICAgIGlmICgoZHAgPSBjbWN2dGRhdGUoYnBbMF0sMSkpKSB7 IC8qIFRoZSBnaXZlbiBkYXRlICovCisgICAgICAgICAgICBja3N0cm5jcHkoZGF0ZWJ1ZixkcCwx OCk7CisgICAgICAgICAgICBja3N0cm5jcHkoZDIsZHAsMTgpOyAgICAgICAgLyogbG9jYWwgdGlt ZSAqLworICAgICAgICAgICAgY2tzdHJuY2F0KGRhdGVidWYsIloiLDE5KTsgIC8qIFNhbWUgdGlt ZSBHTVQgKi8KKyAgICAgICAgICAgIGlmICgoZHAgPSBjbWN2dGRhdGUoZGF0ZWJ1ZiwxKSkpIC8q IGNvbnZlcnRlZCB0byBsb2NhbCB0aW1lICovCisgICAgICAgICAgICAgIGNrc3RybmNweShkYXRl YnVmLGRwLDE4KTsKKyAgICAgICAgICAgIGlmICgocCA9IChjaGFyICopY21kaWZmZGF0ZShkMixk YXRlYnVmKSkpIHsgLyogR2V0IG9mZnNldCAqLworICAgICAgICAgICAgICAgIGNrc3RybmNhdChk MixwLDMyKTsgICAgIC8qIEFwcGVuZCBvZmZzZXQgdG8gbG9jYWwgdGltZSAqLworICAgICAgICAg ICAgICAgIGlmICgoZHAgPSBjbWN2dGRhdGUoZDIsMSkpKSB7CisgICAgICAgICAgICAgICAgICAg IGZhaWxlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShmbnZhbCxkcCxGTlZB TEwpOworICAgICAgICAgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmYWlsZWQgJiYgZm5kaWFncykK KyAgICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpCQURfREFURTpcXGYiLGZu LCIoKT4iLE5VTEwpOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyAgICBpZiAoY3ggPT0g Rk5fREVMU0VDKSB7ICAgICAgICAgICAgICAvKiBcZmRlbHRhMnNlY3MoZGVsdGEtdGltZSkgKi8K KyAgICAgICAgbG9uZyBzZWNzOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGlmICgoeCA9 IGRlbHRhMnNlYyhicFswXSwmc2VjcykpIDwgMCkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsK KyAgICAgICAgICAgIGlmIChmbmRpYWdzKQorICAgICAgICAgICAgICBja21ha21zZyhmbnZhbCxG TlZBTEwsCisgICAgICAgICAgICAgICAgICAgICAgICh4ID09IC0xKSA/CisgICAgICAgICAgICAg ICAgICAgICAgICAgIjxFUlJPUjpCQURfREVMVEFfVElNRTpcXGYiIDoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiPEVSUk9SOk9WRVJGTE9XOlxcZiIsCisgICAgICAgICAgICAgICAgICAgICAg IGZuLAorICAgICAgICAgICAgICAgICAgICAgICAiKCk+IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgZ290byBmbmVu ZDsKKyAgICAgICAgfQorICAgICAgICBzcHJpbnRmKHAsIiVsZCIsc2Vjcyk7CisgICAgICAgIGdv dG8gZm5lbmQ7CisgICAgfQorICAgIGlmIChjeCA9PSBGTl9QQ19EVSkgeworICAgICAgICBjaGFy IGMsICogcyA9IGJwWzBdOworICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgcCA9IGZu dmFsOworICAgICAgICB3aGlsZSAoKGMgPSAqcysrKSkgeworICAgICAgICAgICAgaWYgKGMgPT0g JzonKSB7CisgICAgICAgICAgICAgICAgaWYgKCpzICE9ICdcXCcpCisgICAgICAgICAgICAgICAg ICAqcCsrID0gJy8nOworICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICdcXCcpIHsKKyAgICAg ICAgICAgICAgICAqcCsrID0gJy8nOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAqcCsrID0gYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAqcCA9IE5V TDsKKyAgICAgICAgcCA9IGZudmFsOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyAgICBp ZiAoY3ggPT0gRk5fUENfVUQpIHsgICAgICAgICAgICAgICAvKiBVbml4IHRvIERPUyBwYXRoICov CisgICAgICAgIGNoYXIgYywgKiBzID0gYnBbMF07CisgICAgICAgIGlmICghcykgcyA9ICIiOwor ICAgICAgICBpZiAoKnMgPT0gJ34nKSB7ICAgICAgICAgICAgICAgIC8qIFNraXAgbGVhZGluZyB0 aWxkZSAqLworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgaWYgKCpzID09ICcvJykKKyAg ICAgICAgICAgICAgcysrOworICAgICAgICB9CisgICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAg d2hpbGUgKChjID0gKnMrKykpCisgICAgICAgICAgKnAgKysgPSAoYyA9PSAnLycpID8gJ1xcJyA6 IGM7CisgICAgICAgICpwID0gTlVMOworICAgICAgICBwID0gZm52YWw7CisgICAgICAgIGdvdG8g Zm5lbmQ7CisgICAgfQorICAgIGlmIChjeCA9PSBGTl9LV1ZBTCkgeyAgICAgICAgICAgICAgIC8q IEtleXdvcmQ9VmFsdWUgKi8KKyAgICAgICAgcCA9IGRva3d2YWwoYnBbMF0sYnBbMV0/YnBbMV06 Ij0iKTsKKyAgICAgICAgZ290byBmbmVuZDsKKyAgICB9CisjaWZkZWYgQ09NTUVOVAorLyogQ3V0 ZSBpZGVhIGJ1dCBkb2Vzbid0IHdvcmsgKi8KKyAgICBpZiAoY3ggPT0gRk5fU0xFRVAgfHwgY3gg PT0gRk5fTVNMRUVQKSB7CisgICAgICAgIHAgPSAiIjsKKyAgICAgICAgaWYgKGNoa251bShicFsw XSkpIHsKKyAgICAgICAgICAgIHggPSBhdG9pKGJwWzBdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGZhaWxlZCA9IDE7CisgICAgICAgICAgICBpZiAoZm5kaWFncykgeworICAgICAg ICAgICAgICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAiPEVSUk9SOkFSR19OT1RfTlVNRVJJQzpcXGYiLGZuLCIoKT4iLE5VTEwpOworICAgICAgICAg ICAgICAgIHAgPSBmbnZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gZm5lbmQ7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN4ID09IEZOX1NMRUVQKQorICAgICAgICAgIHggKj0g MTAwMDsKKyAgICAgICAgbXNsZWVwKHgpOworICAgICAgICBnb3RvIGZuZW5kOworICAgIH0KKyNl bmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBOVAorICAgIGlmIChjeCA9PSBGTl9TTkFNRSkg eworICAgICAgICBHZXRTaG9ydFBhdGhOYW1lKGJwWzBdLGZudmFsLEZOVkFMTCk7CisgICAgICAg IGdvdG8gZm5lbmQ7CisgICAgfQorICAgIGlmIChjeCA9PSBGTl9MTkFNRSkgeworICAgICAgICBj a0dldExvbmdQYXRoTmFtZShicFswXSxmbnZhbCxGTlZBTEwpOworICAgICAgICBnb3RvIGZuZW5k OworICAgIH0KKyNlbmRpZiAvKiBOVCAqLworCisvKgorICBcZmVtYWlsYWRkcmVzcygpOgorICBQ aWNrcyB0aGUgZW1haWwgYWRkcmVzcyBvdXQgb2YgYW4gUkZDIDI4MjIgRnJvbTogb3IgU2VuZGVy OiBoZWFkZXIuCisgIEFkZGVkIDI2IE5vdiAyMDA1LiAgSGFuZGxlcyBhbGwgY29tbW9uLCBhbmQg c29tZSB1bmNvbW1vbiwgY2FzZXMgYnV0CisgIGRvZXNuJ3QgdG90YWxseSBib3RoZXIgYWJvdXQg bmVzdGVkIGNvbW1lbnRzLiAgTmVlZGVkIHRoaXMgZm9yIGZldGNoaW5nCisgIGVtYWlsIGZyb20g YSBQT1Agc2VydmVyIGFuZCB0aGVuIGNvbnN0cnVjdGluZyB0aGUgQlNEICJGcm9tICIgbGluZS4K KyAgV29ya3Mgd2l0aCBvciB3aXRob3V0IHRoZSAiRnJvbTogIiBvciAiU2VuZGVyOiAiIHRhZy4K KyovCisgICAgaWYgKGN4ID09IEZOX0VNQUlMKSB7CisgICAgICAgIGNoYXIgYywgKiBzID0gYnBb MF0sICogczIsICogczMsICogYXAgPSAiIjsKKwlpbnQgaywgc3RhdGUgPSAwLCBxdW90ZSA9IDAs IGluZmllbGQgPSAwOworCWludCBwYyA9IDA7CQkJLyogRm9yIG5lc3RlZCBjb21tZW50cyAqLwor ICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKwlpZiAoISpzKSBnb3RvIHhlbWFpbDsKKworCWlmIChj a2luZGV4KCJGcm9tOiAiLHMsMCwwLDApID09IDEpIHMgKz0gNTsKKwlpZiAoY2tpbmRleCgiU2Vu ZGVyOiAiLHMsMCwwLDApID09IDEpIHMgKz0gNzsKKworCWsgPSBzdHJsZW4ocyk7CQkJLyogU3Ry aXAganVuayBmcm9tIGVuZCAqLworCWlmIChrIDwgMSkgZ290byB4ZW1haWw7CisJay0tOworCXdo aWxlIChrID49IDAgJiYgc1trXSA9PSBDUiB8fCBzW2tdID09IExGKQorCSAgc1trLS1dID0gTlVM OworCXdoaWxlIChrID49IDAgJiYgc1trXSA9PSBTUCB8fCBzW2tdID09IEhUKQorCSAgc1trLS1d ID0gTlVMOworCWlmIChrID09IDApCisJICBnb3RvIHhlbWFpbDsKKworI2lmbmRlZiBDT01NRU5U CQkJICAgICAvKiBTaW1wbGUgbWV0aG9kIGlmIG5vdCAxMDAlIGZvb2xwcm9vZiAqLworCWsgPSAw OworCWZvciAoczIgPSBzOyAqczI7IHMyKyspIHsJLyogRmluZCBhdC1zaWduICovCisJICAgIGlm ICgqczIgPT0gJ0AnKSB7CisJCWsrKzsJCQkvKiBJZiBtb3JlIHRoYW4gb25lIHVzZSByaWdodG1v c3QgKi8KKwkJczMgPSBzMjsKKwkgICAgfQorCX0KKwlpZiAoayA8IDEpCQkJLyogTm8gYXQtc2ln biAqLworCSAgZ290byB4ZW1haWw7CisKKwlmb3IgKGFwID0gczMtMTsgYXAgPj0gczsgYXAtLSkg eyAvKiBCYWNrIHVwIHRvIGJlZ2lubmluZyBvZiBhZGRyZXNzICovCisJICAgIGlmIChpc3NwYWNl KCphcCkgfHwgKmFwID09ICc8JykgeworCQlhcCsrOworIAkJYnJlYWs7CisJICAgIH0KKwkgICAg aWYgKGFwID09IHMpCisJICAgICAgYnJlYWs7CisJfQorCWZvciAoczIgPSBzMysxOyAqczI7IHMy KyspIHsJLyogRmluZCBlbmQgb2YgYWRkcmVzcyAqLworCSAgICBpZiAoaXNzcGFjZSgqczIpIHx8 ICpzMiA9PSAnPicpCisJICAgICAgYnJlYWs7CisJfQorCSpzMi0tID0gTlVMOworCWlmICgqYXAg PT0gJ1snICYmICpzMiA9PSAnXScpIHsJLyogSGFuZGxlIFtibGFoQGJsYWguYmxhaF0gKi8KKwkg ICAgYXArKzsKKwkgICAgKnMyID0gTlVMOworCX0KKwlpZiAoIWNrc3RyY21wKGFwLCJtYWlsdG86 Iiw3LDApKSAvKiBIYW5kbGUgbWFpbHRvOiBVUkxzICovCisJICBhcCArPSA3OworCisjZWxzZSAg LyogVG9vIGNvbXBsaWNhdGVkIGFuZCBlcnJvci1wcm9uZSAqLworCisJayA9IDA7CisJZm9yIChz MiA9IHM7ICpzMjsgczIrKykgewkvKiBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwkgICAg aWYgKCpzMiA9PSBTUCB8fCAqczIgPT0gSFQpIHsKKwkJayA9IDE7CisJCWJyZWFrOworCSAgICB9 CisJfQorCWlmICghaykgewkJCS8qIFNpbXBsZSBhZGRyZXNzICovCisJICAgIGFwID0gczsKKwkg ICAgZ290byB4ZW1haWw7CisJfQorCWRvIHsJCQkJLyogTm90IHNpbXBsZSwgaGF2ZSB0byBleHRy YWN0IGl0ICovCisJICAgIGlmIChxdW90ZSkgeworCQlxdW90ZSA9IDA7CisJCWNvbnRpbnVlOwor CSAgICB9IGVsc2UgaWYgKCpzID09ICdcXCcpIHsKKwkJcXVvdGUgPSAxOworCQljb250aW51ZTsK KwkgICAgfQorCSAgICBzd2l0Y2ggKHN0YXRlKSB7CisJICAgICAgY2FzZSAwOgorCQlpZiAoIWlu ZmllbGQgJiYgKnMgPT0gJyInKSB7IC8qIFF1b3RlZCBzdHJpbmcgKi8KKwkJICAgIGluZmllbGQg PSAxOworCQkgICAgYyA9ICciJzsKKwkJICAgIHN0YXRlID0gMTsKKwkJfSBlbHNlIGlmICghaW5m aWVsZCAmJiAqcyA9PSAnKCcpIHsgLyogQ29tbWVudCBpbiBwYXJlbnMgKi8KKwkJICAgIHBjKys7 CisJCSAgICBpbmZpZWxkID0gMTsKKwkJICAgIGMgPSAnKSc7CisJCSAgICBpZiAoKmFwKSAqcyA9 IE5VTDsKKwkJICAgIHN0YXRlID0gMTsKKwkJfSBlbHNlIGlmICghaW5maWVsZCAmJiAqcyA9PSAn PCcpIHsgLyogQWRkcmVzcyAqLworCQkgICAgaW5maWVsZCA9IDE7CisJCSAgICBjID0gJz4nOwor CQkgICAgYXAgPSBzKzE7CisJCSAgICBzdGF0ZSA9IDI7CisJCX0gZWxzZSBpZiAoaW5maWVsZCAm JiAoKnMgPT0gU1AgfHwgKnMgPT0gSFQpKSB7CisJCSAgICBpbmZpZWxkID0gMDsKKwkJfSBlbHNl IHsJCS8qIE9uZSBvciBtb3JlIGJhcmUgd29yZHMgKi8KKwkJICAgIGluZmllbGQgPSAxOwkvKiBD b3VsZCBiZSBhbiBhZGRyZXNzICovCisJCSAgICBpZiAoISphcCkgYXAgPSBzOwkvKiBDb3VsZCBi ZSBjb21tZW50cyAqLworCQl9CisJCWNvbnRpbnVlOworCSAgICAgIGNhc2UgMToJCQkvKiBJbiBR dW90ZWQgc3RyaW5nIG9yIENvbW1lbnQgKi8KKwkJaWYgKGluZmllbGQgJiYgKnMgPT0gYykgeyAv KiBMb29rIGZvciBlbmQgKi8KKwkJICAgIGluZmllbGQgPSAwOworCQkgICAgKnMrKyA9IE5VTDsK KwkJICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkgcysrOworCQkgICAgaWYgKCEqYXAp CisJCSAgICAgIGFwID0gczsKKwkJICAgIHN0YXRlID0gMDsKKwkJfQorCQljb250aW51ZTsKKwkg ICAgICBjYXNlIDI6CQkJLyogSW4gYWRkcmVzcyAqLworCQlpZiAoaW5maWVsZCAmJiAqcyA9PSBj KSB7IC8qIExvb2tpbmcgZm9yIGVuZCAqLworCQkgICAgaW5maWVsZCA9IDA7CisJCSAgICAqcyA9 IE5VTDsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9IHdoaWxlICgqcysrKTsKKworICAg ICAgeGVtYWlsOgorCWlmICgqYXApIHsKKwkgICAgd2hpbGUgKCphcCA9PSBTUCB8fCAqYXAgPT0g SFQpIGFwKys7CisJfQorCWsgPSBzdHJsZW4oYXApIC0gMTsKKwl3aGlsZSAoayA+PSAwICYmIChh cFtrXSA9PSBTUCB8fCBhcFtrXSA9PSBIVCkpCisJICBhcFtrLS1dID0gTlVMOworCWlmICgqYXAp IHsKKwkgICAgZmFpbGVkID0gMDsKKwkgICAgaWYgKCphcCA9PSAnPCcpIHsKKwkJayA9IHN0cmxl bihhcCk7CisJCWlmICgqKGFwK2stMSkgPT0gJz4nKSB7CisJCSAgICBhcFtrLTFdID0gTlVMOwor CQkgICAgYXArKzsKKwkJfQorCSAgICB9CisJfSBlbHNlCisJICBmYWlsZWQgPSAxOworCS8qIEhl cmUgd2UgbWlnaHQgYWxzbyB3YW50IGNoZWNrIGFnYWluc3QgIipAKi4qIiAqLworI2VuZGlmCS8q IENPTU1FTnQgKi8KKyAgICAgIHhlbWFpbDoKKwlja3N0cm5jcHkoZm52YWwsYXAsRk5WQUxMKTsK Kwlnb3RvIGZuZW5kOworICAgIH0KKworI2lmZGVmIFNFRUtfQ1VSCisvKgorICAgXGZwaWN0dXJl KCk6ICAgR2V0IGRpbWVuc2lvbnMgb2YgR0lGIG9yIEpQRyBpbWFnZS4KKyAgIGZkYyBKdW5lIDIw MDYKKyovCisgICAgaWYgKGN4ID09IEZOX1BJQ1RVUkUpIHsKKwlGSUxFICpmcCA9IE5VTEw7CisJ aW50IGMsIHgsIHcgPSAwLCBoID0gMCwgZW9mID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsK Kwl1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKwljaGFyIGFidWZbMTZdLCAqIHAsICogczsKKwlj aGFyICoqIGFwID0gTlVMTDsKKworCXAgPSBmbnZhbDsJCQkvKiBQb2ludCB0byByZXN1bHQgKi8K KwlmYWlsZWQgPSAxOwkJCS8qIEFzc3VtZSBmYWlsdXJlICovCisJaWYgKGFyZ24gPiAxKSB7CisJ ICAgIGludCB4aTsKKwkgICAgY2tzdHJuY3B5KGFidWYsYnBbMV0sMTYpOwkvKiBHZXQgYXJyYXkg cmVmZXJlbmNlICovCisJICAgIHMgPSBhYnVmOworCSAgICBpZiAoKnMgPT0gQ01EUSkgcysrOwor CSAgICBpZiAoZm5kaWFncykJCS8qIERlZmF1bHQgaXMgdGhpcyBlcnJvciBtZXNzYWdlICovCisJ ICAgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLAorCQkgICAgICAgIjxFUlJPUjpBUkdfQkFEX0FS UkFZOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJICAgIGlmIChzWzBdICE9ICcmJykJCS8qICJBZGRy ZXNzIiBvZiBhcnJheSAqLworCSAgICAgIGdvdG8gZm5lbmQ7CisJICAgIGlmIChzWzJdKQorCSAg ICAgIGlmIChzWzJdICE9ICdbJyB8fCBzWzNdICE9ICddJykKKwkJZ290byBmbmVuZDsKKwkgICAg aWYgKHNbMV0gPj0gNjQgJiYgc1sxXSA8IDkxKSAvKiBDb252ZXJ0IHVwcGVyIHRvIGxvd2VyICov CisJICAgICAgc1sxXSArPSAzMjsKKwkgICAgaWYgKCh4aSA9IGRjbGFycmF5KHNbMV0sMikpIDwg MCkgLyogVHdvIGVsZW1lbnRzICovCisJICAgICAgZ290byBmbmVuZDsKKwkgICAgYXAgPSBhX3B0 clt4aV07CQkvKiBQb2ludCB0byBhcnJheSB3ZSBqdXN0IGRlY2xhcmVkICovCisJfQorCXMgPSBi cFswXTsJCQkvKiBGaWxlbmFtZSAqLworCWZhaWxlZCA9IDA7CQkJLyogRnJvbSBoZXJlIG9uIHdl IGRvbid0IGZhaWwgKi8KKwlwWzBdID0gJzAnOwkJCS8qIERlZmF1bHQgcmV0dXJuIHZhbHVlICov CisJcFsxXSA9IE5VTDsKKwlpZiAoIWNrbWF0Y2goIioue2pwZyxqcGVnLGdpZn0kIixzLDAsMSs0 KSkgLyogQXBwcm9wcmlhdGUgbmFtZT8gKi8KKwkgIGdvdG8gZm5lbmQ7CQkJLyogTm8sIGZhaWwg Ki8KKwlmcCA9IGZvcGVuKHMsICJyIik7CQkvKiBPcGVuIGl0ICovCisJaWYgKGZwID09IE5VTEwp IHsJCS8qIENhbid0LCBmYWlsICovCisJICAgIHBbMF0gPSAnLSc7CisJICAgIHBbMV0gPSAnMSc7 CisJICAgIHBbMl0gPSBOVUw7CQkJLyogUmV0dXJuIC0xICovCisJICAgIGdvdG8gZm5lbmQ7CisJ fQorCWsgPSBzdHJsZW4ocyk7CisJaWYgKCFja3N0cmNtcCgmc1trLTRdLCIuZ2lmIiw0LDApKSB7 IC8qIEdJRiBmaWxlICovCisJICAgIGlmIChmcmVhZChidWYsMSwxMCxmcCkgIT0gMTApIHsKKwkJ ZmNsb3NlKGZwKTsKKwkJZ290byBmbmVuZDsKKwkgICAgfQorCSAgICAvKiBDaGVjayBzaWduYXR1 cmUgKi8KKwkgICAgaWYgKGNrc3RyY21wKChjaGFyICopYnVmLCJHSUY4N2EiLDYsMCkgJiYKKwkJ Y2tzdHJjbXAoKGNoYXIgKilidWYsIkdJRjg5YSIsNiwwKSkgeworCQlmY2xvc2UoZnApOworCQln b3RvIGZuZW5kOworCSAgICB9CisJICAgIHcgPSBidWZbNl0gKyAyNTYgKiBidWZbN107CisJICAg IGggPSBidWZbOF0gKyAyNTYgKiBidWZbOV07CisJICAgIGdvdG8gcGljZW5kOworCX0gZWxzZSBp ZiAoIWNrc3RyY21wKCZzW2stNF0sIi5qcGciLDQsMCkgfHwgLyogSlBFRyBmaWxlICovCisJCSAg ICFja3N0cmNtcCgmc1trLTVdLCIuanBlZyIsNSwwKSkgeworCSAgICBpZiAoZnJlYWQoYnVmLDEs MixmcCkgIT0gMikgeworCQlmY2xvc2UoZnApOworCQlnb3RvIGZuZW5kOworCSAgICB9CisJICAg IGlmIChidWZbMF0gIT0gMHhmZiB8fCBidWZbMV0gIT0gMHhkOCkgeyAvKiBDaGVjayBzaWduYXR1 cmUgKi8KKwkJZmNsb3NlKGZwKTsKKwkJZ290byBmbmVuZDsKKwkgICAgfQorCSAgICBlb2YgPSAw OworCSAgICB3aGlsZSAoIWVvZikgewkJLyogTG9vcCBmb3IgZWFjaCBtYXJrZXIgKi8KKwkJd2hp bGUgKCFlb2YpIHsJCS8qIEZpbmQgbmV4dCBtYXJrZXIgKi8KKwkJICAgIGMgPSBnZXRjKGZwKTsK KwkJICAgIGlmIChjID09ICh1bnNpZ25lZCBpbnQpRU9GKSB7CisJCQllb2YrKzsKKwkJCWJyZWFr OworCQkgICAgfQorCQkgICAgaWYgKGMgPT0gMHhmZikgeworCQkJYnVmWzBdID0gYzsKKwkJCWMg PSBnZXRjKGZwKTsKKwkJCWlmIChjID09ICh1bnNpZ25lZCBpbnQpRU9GKSB7CisJCQkgICAgZW9m Kys7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlidWZbMV0gPSBjOworCQkJaWYgKGMgPT0gMHhk OSkKKwkJCSAgZW9mKys7CisJCQlpZiAoYyA+PSAweGMwICYmIGMgPD0gMHhmZSkKKwkJCSAgYnJl YWs7CisJCSAgICB9CisJCX0KKwkJaWYgKGVvZikgYnJlYWs7CisJCXggPSBidWZbMV07CisJCWlm ICh4ID09IDB4YzAgfHwgeCA9PSAweGMxIHx8IHggPT0gMHhjMiB8fCB4ID09IDB4YzMgfHwKKwkJ ICAgIHggPT0gMHhjOSB8fCB4ID09IDB4Y2EgfHwgeCA9PSAweGNiKSB7CisJCSAgICBpZiAoZnJl YWQoYnVmLDEsNyxmcCkgIT0gNykgeworCQkJZmNsb3NlKGZwKTsKKwkJCWdvdG8gZm5lbmQ7CisJ CSAgICB9CisJCSAgICBoID0gYnVmWzNdICogMjU2ICsgYnVmWzRdOworCQkgICAgdyA9IGJ1Zls1 XSAqIDI1NiArIGJ1Zls2XTsKKwkJICAgIGdvdG8gcGljZW5kOworCQl9IGVsc2UgewkJLyogTm90 IGEgZGVzaXJlZCBmaWVsZCAqLworCQkgICAgaWYgKGZlb2YoZnApKSB7CisJCQllb2YrKzsKKwkJ CWJyZWFrOworCQkgICAgfQorCQkgICAgaWYgKGZyZWFkKGJ1ZiwxLDIsZnApICE9IDIpIHsgLyog TGVuZ3RoIG9mIHRoaXMgZmllbGQgKi8KKwkJCWZjbG9zZShmcCk7CisJCQlnb3RvIGZuZW5kOwor CQkgICAgfQorCQkgICAgaiA9IDI1NiAqIGJ1ZlswXSArIGJ1ZlsxXSAtIDI7IC8qIFNraXAgbmV4 dCBmaWVsZCAqLworCQkgICAgaWYgKENLRlNFRUsoZnAsKENLX09GRl9UKWosU0VFS19DVVIpICE9 IDApIHsKKwkJCWZjbG9zZShmcCk7CisJCQlnb3RvIGZuZW5kOworCQkgICAgfQorCQl9CisJICAg IH0gCisJfQorICAgICAgcGljZW5kOgorCWZjbG9zZShmcCk7CisJaWYgKGFwKSB7CisJICAgIG1h a2VzdHIoJihhcFswXSksIjIiKTsKKwkgICAgbWFrZXN0cigmKGFwWzFdKSxja2l0b2EodykpOwor CSAgICBtYWtlc3RyKCYoYXBbMl0pLGNraXRvYShoKSk7CisJfQorCWlmICh3ID4gMCAmJiBoID4g MCkgeworCSAgICBpZiAodyA+IGgpIHBbMF0gPSAnMSc7CisJICAgIGlmIChoID49IHcpIHBbMF0g PSAnMic7CisJfQorCWdvdG8gZm5lbmQ7CisgICAgfQorI2VuZGlmCS8qIFNFRUtfQ1VSICovCisK KyAgICBpZiAoY3ggPT0gRk5fUElEKSB7CisJaW50IHggPSAtMTsKKwlpZiAoY2hrbnVtKGJwWzBd KSkgewkJLyogTmVlZCBudW1lcmljIGFyZ3VtZW50ICovCisJICAgIGludCBwaWQ7CisJICAgIHBp ZCA9IGF0b2koYnBbMF0pOwkJLyogQ29udmVydCB0byBpbnQgKi8KKyNpZmRlZiBVTklYCisJICAg IGlmIChraWxsKHBpZCwwKSA8IDApIHsJLyogVGVzdCBpdCAqLworCQlpZiAoZXJybm8gPT0KKyNp ZmRlZiBFU1JDSAorCQkgICAgRVNSQ0gJCS8qIE5vIHN1Y2ggcHJvY2VzcyAqLworI2Vsc2UKKwkJ ICAgIDMKKyNlbmRpZgkvKiBFU1JDSCAqLworCQkgICAgKQorCQkgIHggPSAwOworCSAgICB9IGVs c2UJCQkvKiBQcm9jZXNzIGV4aXN0cyAqLworCSAgICAgIHggPSAxOworI2VuZGlmCS8qIFVOSVgg Ki8KKwl9CisJc3ByaW50ZihmbnZhbCwiJWQiLHgpOwkJLyogU0FGRSAqLworCWdvdG8gZm5lbmQ7 CisgICAgfQorCisgICAgaWYgKGN4ID09IEZOX0ZVTkMpIHsKKwljaGFyICogcyA9IGJwWzBdOwor CXAgPSAiMCI7CisgICAgICAgIGRlYnVnKEYxMTEsImZmdW5jIixzLGFyZ24pOworCWlmIChhcmdu ID4gMCkgeworCSAgICBpbnQgeCwgeTsKKwkgICAgZm9yIChwID0gczsgKnA7IHArKykgewkvKiBD aG9wIG9mZiB0cmFpbGluZyBwYXJlbnMgaWYgYW55ICovCisJCWlmICgqcCA9PSAnKCcpIHsKKwkJ ICAgICpwID0gTlVMOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCSAgICAvKiBDaG9wIG9m ZiBsZWFkaW5nICJcXGYiIG9yICJcZiIgb3IgImYiICovCisJICAgIHAgPSBzOworCSAgICBpZiAo KnAgPT0gQ01EUSkJCS8qIEFsbG93IGZvciBcXGYuLi4gKi8KKwkgICAgICBwKys7CisJICAgIGlm ICgqcCA9PSBDTURRICYmICgqKHArMSkgPT0gJ2YnIHx8ICoocCsxKSA9PSAnRicpKSB7IC8qIG9y IFxmICovCisJCXAgKz0gMjsKKwkgICAgfSBlbHNlIGlmICgqcCA9PSAnZicgfHwgKnAgPT0gJ0Yn KSB7IC8qIG9yIGp1c3QgZiAqLworCQlwKys7CisJICAgIH0KKwkgICAgeSA9IGxvb2t1cChmbmN0 YWIscCxuZnVuY3MsJngpOyAvKiBMb29rIHVwIHRoZSByZXN1bHQgKi8KKwkgICAgZGVidWcoRjEx MSwiZmZ1bmMiLHAseSk7CisJICAgIHAgPSAoeSA+IC0xKSA/ICIxIiA6ICIwIjsKKwl9CisJZ290 byBmbmVuZDsKKyAgICB9CisgICAgaWYgKGN4ID09IEZOX1JFQ1VSU0UpIHsKKwlpbnQgdCwgbjsK KwljaGFyICogczsKKwlmbnZhbFswXSA9IE5VTDsJCQkvKiBEZWZhdWx0IHJlc3VsdCBpcyBlbXB0 eSBzdHJpbmcgKi8KKwlzID0gYnBbMF07CQkJLyogQ2hlY2sgZm9yIG51bGwgYXJndW1lbnQgKi8K KwlpZiAoIXMpIHMgPSAiIjsJCQkvKiBvciBlbXB0eSBhcmd1bWVudCAqLworCWlmICghKnMpIGdv dG8gZm5lbmQ7CQkvKiBpbiB3aGljaCBjYXNlIHJldHVybiBlbXB0eSBzdHJpbmcgKi8KKyAgICAg ICAgbiA9IEZOVkFMTDsJCQkvKiBOb3QgZW1wdHksIG1heCBzaXplIGZvciByZXN1bHQgKi8KKyAg ICAgICAgcyA9IGZudmFsOwkJCS8qIExvY2F0aW9uIG9mIHJlc3VsdCAqLworCXsKKwkgICAgLyog Rm9yY2UgVkFSSUFCTEUtRVZBTFVBVElPTiBTSU1QTEUgUkVDVVJTSVZFICovCisJICAgIC8qIE5P VEU6IFRoaXMgaXMgdnVsbmVyYWJsZSB0byBTSUdJTlQgYW5kIHdoYXRub3QuLi4gKi8KKwkgICAg aW50IHRtcCA9IHZhcmV2YWw7CQkvKiBTYXZlIFZBUklBQkxFLUVWQUxVQVRJT04gc2V0dGluZyAq LworCSAgICB2YXJldmFsID0gMTsJCS8qIEZvcmNlIGl0IHRvIFJFQ1VSU0lWRSAqLworCSAgICB6 enN0cmluZyhicFswXSwmcywmbik7CS8qIEV4cGFuZCBhcmcgaW50byByZXN1bHQgc3BhY2UgKi8g CisJICAgIHZhcmV2YWwgPSB0bXA7CQkvKiBSZXN0b3JlIFZBUklBQkxFLUVWQUxVQVRJT04gKi8K Kwl9CisJZ290byBmbmVuZDsKKyAgICB9CisKKyAgICBpZiAoY3ggPT0gRk5fWExBVEUpIHsJCS8q IGZfY3Z0Y3NldCgpICovCisjaWZkZWYgTk9GUklMTFMKKwlja3N0cm5jcHkoZm52YWwsYnBbMF0s Rk5WQUxMKTsJCisjZWxzZQorI2lmbmRlZiBOT1VOSUNPREUKKwlfUFJPVE9UWVAoIGNoYXIgKiBj dnRzdHJpbmcsIChjaGFyICosIGludCwgaW50KSApOworICAgICAgICBjaGFyICogc3RyaW5nLCAq IGNzZXQxLCAqIGNzZXQyOworCWludCBpZDEsIGlkMjsKKyNlbmRpZgkvKiBOT1VOSUNPREUgKi8K KyAgICAgICAgZm52YWxbMF0gPSBOVUw7CQorI2lmZGVmIE5PVU5JQ09ERQorCWNrc3RybmNweShm bnZhbCxicFswXSxGTlZBTEwpOwkKKyNlbHNlCisgICAgICAgIHN0cmluZyA9IGJwWzBdID8gYnBb MF0gOiAiIjsJLyogU3RyaW5nIHRvIGNvbnZlcnQgKi8KKwlpZiAoISpzdHJpbmcpIGdvdG8gZm5l bmQ7CS8qIEl0J3MgZW1wdHkgKi8KKworICAgICAgICBjc2V0MSA9IGJwWzFdID8gYnBbMV0gOiAi YXNjaWkiOyAvKiBDdXJyZW50IGNoYXJzZXQgb2Ygc3RyaW5nICovCisgICAgICAgIGNzZXQyID0g YnBbMl0gPyBicFsyXSA6ICJhc2NpaSI7IC8qIENoYXJzZXQgdG8gY29udmVydCB0byAqLworCisJ aWQxID0gbG9va3VwKGZjc3RhYixjc2V0MSxuZmlsYyxOVUxMKTsgLyogTG9va3VwICdmcm9tJyBz ZXQgKi8KKwlpZiAoaWQxIDwgMCkgeworICAgICAgICAgICAgZmFpbGVkID0gMTsKKwkgICAgY2tt YWttc2coZm52YWwsRk5WQUxMLCI8RVJST1I6VU5LTk9XTl9DSEFSU0VUOlxcZiIsZm4sIigpPiIs TlVMTCk7CisJICAgIGdvdG8gZm5lbmQ7CisgICAgICAgIH0KKwlpZDIgPSBsb29rdXAoZmNzdGFi LGNzZXQyLG5maWxjLE5VTEwpOyAvKiBMb29rdXAgJ3RvJyBzZXQgKi8KKwlpZiAoaWQyIDwgMCkg eworICAgICAgICAgICAgZmFpbGVkID0gMTsKKwkgICAgY2ttYWttc2coZm52YWwsRk5WQUxMLCI8 RVJST1I6VU5LTk9XTl9DSEFSU0VUOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJICAgIGdvdG8gZm5l bmQ7CisgICAgICAgIH0KKwlzdHJpbmcgPSBjdnRzdHJpbmcoc3RyaW5nLGlkMSxpZDIpOworCWNr c3RybmNweShmbnZhbCxzdHJpbmcsRk5WQUxMKTsKKyNlbmRpZgkvKiBOT1VOSUNPREUgKi8KKyNl bmRpZgkvKiBOT0ZSSUxMUyAqLworCWdvdG8gZm5lbmQ7CisgICAgfQorCisvKiBEZWNvZGUgc3Ry aW5ncyBjb250YWluaW5nIGhleCBlc2NhcGVzICovCisKKyAgICBpZiAoY3ggPT0gRk5fVU5QQ1Qp IHsJCS8qIFxmZGVjb2RlaGV4KCkgKi8KKyAgICAgICAgY2hhciAqczEsICpzMjsKKwljaGFyICpw cmVmaXg7CQkJLyogQ2FuIGJlIDEgb3IgMiBjaGFycyAqLworCWNoYXIgYnVmWzNdOworCWludCBu ID0gMCwgazsKKworCXAgPSBmbnZhbDsKKwkqcCA9IE5VTDsKKyAgICAgICAgaWYgKGFyZ24gPCAx KSBnb3RvIGZuZW5kOwkvKiBFbXB0eSBzdHJpbmcgKi8KKworCXMxID0gYnBbMF0gPyBicFswXSA6 ICIiOwkvKiBPcmlnaW5hbCBzdHJpbmcgKi8KKwlwcmVmaXggPSBicFsxXSA/IGJwWzFdIDogIiUl IjsJLyogSGV4IGJ5dGUgcHJlZml4ICovCisJbiA9IChpbnQpc3RybGVuKHByZWZpeCk7CS8qIExl bmd0aCBvZiBwcmVmaXggKi8KKwlpZiAobiA8IDEgfHwgbiA+IDIpIHsJCS8qIG11c3QgYmUgMSBv ciAyICovCisJICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwKKwkJICAgICAgICI8RVJST1I6SU5W QUxJRF9IRVhfUFJFRklYOlxcZiIsZm4sIigpPiIsTlVMTCk7CisJICAgIGdvdG8geHVucGN0Owor CX0KKyAgICAgICAgd2hpbGUgKCpzMSkgeworCSAgICBpZiAoIWNrc3RyY21wKHMxLHByZWZpeCxu LDApKSB7IC8qIENhc2UtaW5kZXBlbmRlbnQgKi8KKwkJaWYgKCEqKHMxK24pKSB7CisJCSAgICBj a21ha21zZyhmbnZhbCxGTlZBTEwsCisJCQkgICAgICI8RVJST1I6SU5DT01QTEVURV9TRVFVRU5D RTpcXGYiLGZuLCIoKT4iLE5VTEwpOworCQkgICAgZ290byB4dW5wY3Q7CisJCX0KKwkJYnVmWzBd ID0gKihzMStuKTsJLyogRmlyc3QgaGV4IGNoYXJhY3RlciAqLworCQlidWZbMV0gPSAqKHMxK24r MSk7CS8qIFNlY29uZCBoZXggY2hhcmFjdGVyICovCisJCWJ1ZlsyXSA9IE5VTDsKKwkJaWYgKChr ID0gY2toZXhieXRldG9pbnQoKGNoYXIgKilidWYpKSA+IC0xKSB7CisJCSAgICAqcCsrID0gKGNo YXIpIGs7CS8qIERlcG9zaXQgZGVjb2RlZCByZXN1bHQgKi8KKwkJICAgIHMxICs9IDIrbjsJCS8q IGFuZCBhZHZhbmNlIHRoZSBzb3VyY2UgcG9pbnRlciAqLworCQl9IGVsc2UgewkJLyogRmFpbCBv biBjb252ZXJzaW9uIGVycm9yICovCisJCSAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsCisJCQkg ICAgICI8RVJST1I6Tk9OX0hFWF9DSEFSUzpcXGYiLGZuLCIoKT4iLE5VTEwpOworCQkgICAgZ290 byB4dW5wY3Q7CisJCX0KKwkgICAgfSBlbHNlIHsJCQkvKiBOb3QgYSBoZXggZXNjYXBlIHNlcXVl bmNlICovCisJCSpwKysgPSAqczErKzsJCS8qIEp1c3QgY29weSB0aGUgY2hhcmFjdGVyICovCisJ ICAgIH0KKyAgICAgICAgfQorCSpwID0gTlVMOwkJCS8qIFRlcm1pbmF0ZSB0aGUgcmVzdWx0IHN0 cmluZyAqLworICAgICAgICBmYWlsZWQgPSAwOwkJCS8qIFNheSB3ZSBkaWRuJ3QgZmFpbCAqLwor ICAgICAgICBwID0gZm52YWw7CQkJLyogU2V0IHVwIHJlc3VsdCBwb2ludGVyICovCisgICAgICAg IGdvdG8gZm5lbmQ7CQkJLyogYW5kIGZpbmlzaCAqLworCisgICAgICB4dW5wY3Q6CQkJCS8qIEVy cm9yIGV4aXQgKi8KKwlwID0gZm52YWw7CisJZmFpbGVkID0gMTsKKwlnb3RvIGZuZW5kOworICAg IH0KKworLyogQ2hlY2sgYSBzdHJpbmcgZm9yIGVuY29kaW5nIGZhbWlseSAqLworCisgICAgaWYg KGN4ID09IEZOX1NUUklOR1QpIHsJCS8qIFxmc3RyaW5ndHlwZSgpICovCisJcCA9ICJVTksiOwor CXN3aXRjaCAoc2NhbnN0cmluZyhicFswXSkpIHsKKwkgIGNhc2UgRlRfN0JJVDogcCA9ICI3QklU IjsgYnJlYWs7CisJICBjYXNlIEZUXzhCSVQ6IHAgPSAiOEJJVCI7IGJyZWFrOworCSAgY2FzZSBG VF9VVEY4OiBwID0gIlVURjgiOyBicmVhazsKKwkgIGNhc2UgRlRfVUNTMjogcCA9ICJVQ1MyIjsg YnJlYWs7CisJICBjYXNlIEZUX1RFWFQ6IHAgPSAiVEVYVCI7IGJyZWFrOworCSAgY2FzZSBGVF9C SU46ICBwID0gIkJJTkFSWSI7IGJyZWFrOworCX0KKwlja3N0cm5jcHkoZm52YWwscCxGTlZBTEwp OworCXAgPSBmbnZhbDsKKwlnb3RvIGZuZW5kOworICAgIH0KKworLyogU3RyaW5nIGNvbXBhcmUg czEsIHMyLCBbIGNhc2UgXSwgWyBzdGFydCBdICwgWyBsZW4gXSAqLworCisgICAgaWYgKGN4ID09 IEZOX1NUUkNNUCkgeworICAgICAgICBpbnQgZG9jYXNlID0gMDsJCQkvKiBDYXNlIG1hdHRlcnMg b3Igbm90ICovCisgICAgICAgIGludCBzdGFydCA9IDA7CQkJLyogU3RhcnQgb2Ygc3Vic3RyaW5n ICovCisJaW50IGxlbiA9IC0xOwkJCS8qIExlbmd0aCBvZiBzdWJzdHJpbmcgdG8gY29tcGFyZSAq LworCWludCB4OyBjaGFyICogczEsICogczI7CQkvKiB3b3JrZXJzICovCisKKyAgICAgICAgcCA9 ICIwIjsJCQkvKiBSZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgaWYgKGFyZ24gPT0gMCkgewkJLyog VHdvIG51bGwgc3RyaW5ncyBhcmUgZXF1YWwgKi8KKwkgICAgY2tzdHJuY3B5KGZudmFsLHAsRk5W QUxMKTsKKwkgICAgcCA9IGZudmFsOworCSAgICBnb3RvIGZuZW5kOworCX0KKyAgICAgICAgaWYg KGFyZ24gPT0gMSkgewkJLyogTm9uLW51bGwgc3RyaW5nID4gbnVsbCBzdHJpbmcgKi8KKwkgICAg cCA9ICIxIjsKKwkgICAgY2tzdHJuY3B5KGZudmFsLHAsRk5WQUxMKTsKKwkgICAgcCA9IGZudmFs OworCSAgICBnb3RvIGZuZW5kOworCX0KKwlpZiAoYXJnbiA+IDIpIHsKKwkgICAgcyA9ICooYnBb Ml0pID8gZXZhbHgoYnBbMl0pIDogIjAiOyAvKiAwID0gY2FzZWxlc3MgKi8KKwkgICAgaWYgKGNo a251bShzKSkgZG9jYXNlID0gYXRvaShzKTsKKwkgICAgaWYgKGFyZ24gPiAzKSB7CisJCXMgPSAq KGJwWzNdKSA/IGV2YWx4KGJwWzNdKSA6ICIxIjsgLyogc3RhcnQgaXMgMS1iYXNlZCAqLworCQlp ZiAoY2hrbnVtKHMpKSBzdGFydCA9IGF0b2kocyk7CisJCWlmIChhcmduID4gNCkgeworCQkgICAg cyA9ICooYnBbNF0pID8gZXZhbHgoYnBbNF0pIDogIi0xIjsJLyogLTEgPSB3aG9sZSB0aGluZyAq LworCQkgICAgaWYgKGNoa251bShzKSkgbGVuID0gYXRvaShzKTsKKwkJfQkJCisJICAgIH0gICAg ICAgIAorCX0KKwlpZiAoc3RhcnQgPiAwKSBzdGFydC0tOyAJLyogc3RhcnQgaXMgMC1iYXNlZCBp bnRlcm5hbGx5ICovCisJczEgPSBicFswXTsJCQkvKiBHZXQgbGVuZ3RoIG9mIGZpcnN0IGFyZyAq LworCXggPSAoaW50KXN0cmxlbihzMSk7CisJaWYgKHggPiBzdGFydCkJCQkvKiBQb2ludCB0byBz dGFydCBwb3NpdGlvbiBvZiBzMSAqLworCSAgczEgKz0gc3RhcnQ7CisJZWxzZQorCSAgczEgPSAi IjsKKwlzMiA9IGJwWzFdOwkJCS8qIEdldCBsZW5ndGggb2Ygc2Vjb25kIGFyZyAqLworCXggPSAo aW50KXN0cmxlbihzMik7CisJaWYgKHggPiBzdGFydCkJCQkvKiBQb2ludCB0byBzdGFydCBwb3Np dGlvbiBvZiBzMiAqLworCSAgczIgKz0gc3RhcnQ7CisJZWxzZQorCSAgczIgPSAiIjsKKwl4ID0g Y2tzdHJjbXAocyxzMixsZW4sZG9jYXNlKTsKKwlwID0gY2tpdG9hKHgpOworCWNrc3RybmNweShm bnZhbCxwLEZOVkFMTCk7CisJcCA9IGZudmFsOworCWdvdG8gZm5lbmQ7CisgICAgfQorCisvKiBO b3RlOiB3aGVuIGFkZGluZyBuZXcgZnVuY3Rpb25zIHJlbWVtYmVyIHRvIHVwZGF0ZSBkb2hmdW5j IGluIGNrdXVzMi5jLiAqLworCisgICAgZmFpbGVkID0gMTsKKyAgICBpZiAoZm5kaWFncykKKyAg ICAgIGNrbWFrbXNnKGZudmFsLEZOVkFMTCwiPEVSUk9SOlVOS05PV05fRlVOQ1RJT046XFxmIixm biwiKCk+IixOVUxMKTsKKworICBmbmVuZDoKKyAgICAvKiBGcmVlIHRlbXBvcmFyeSBzdG9yYWdl IGZvciBhZ3VtZW50cyAqLworICAgIGZvciAoayA9IDA7IGsgPCBhcmduOyBrKyspIGlmIChicFtr XSkgZnJlZShicFtrXSk7CisgICAgZm5kZXB0aC0tOworICAgIGlmIChmYWlsZWQpIHsgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBmYWlsdXJlICovCisgICAgICAgIGRlYnVnKEYxMTEs ImZuZW5kIixmbnZhbCxlcnJubyk7CisgICAgICAgIGlmICghcCkgcCA9ICIiOworICAgICAgICBp ZiAocFswXSkgeworICAgICAgICAgICAgLyogSW4gY2FzZSB0aGlzIHdhc24ndCBjYXVnaHQgYWJv dmUuLi4gKi8KKyAgICAgICAgICAgIGsgPSBzdHJsZW4ocCk7CisgICAgICAgICAgICBpZiAocFsw XSAhPSAnPCcgJiYgcFtrLTFdICE9ICc+JykgeworICAgICAgICAgICAgICAgIGNrbWFrbXNnKGZu dmFsLEZOVkFMTCwiPEVSUk9SOkJBRF9BUkc6XFxmIixmbiwiKCk+IixOVUxMKTsKKyAgICAgICAg ICAgICAgICBwID0gZm52YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBja21ha21zZyhmbnZhbCxGTlZBTEwsIjxFUlJPUjpVTktOT1dOOlxcZiIsZm4sIigp PiIsTlVMTCk7CisgICAgICAgICAgICBwID0gZm52YWw7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGZuZXJyb3IpICAgICAgICAgICAgICAgICAgICAvKiBTRVQgRlVOQ1RJT04gRVJST1IgT04gKi8K KyAgICAgICAgICBmbnN1Y2Nlc3MgPSAwOyAgICAgICAgICAgICAgICAvKiBNYWtlIGNvbW1hbmQg ZmFpbCAoc2VlIGNrdXVzNS5jKSAqLworICAgICAgICBkZWJ1ZyhGMTExLCJmbmV2YWwgZmFpbGVk IixwLGZuc3VjY2Vzcyk7CisgICAgICAgIGlmIChmbmRpYWdzKSAgICAgICAgICAgICAgICAgICAg LyogU0VUIEZVTkNUSU9OIERJQUdOT1NUSUNTIE9OICovCisgICAgICAgICAgcHJpbnRmKCI/JXNc biIscCk7ICAgICAgICAgICAgLyogUHJpbnQgZXJyb3IgbWVzc2FnZSBub3cuICovCisgICAgICAg IGVsc2UKKyAgICAgICAgICByZXR1cm4oIiIpOyAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4g bm90aGluZy4gKi8KKyAgICB9CisgICAgcmV0dXJuKHApOworfQorI2VuZGlmIC8qIE5PU1BMICov CisKK3N0YXRpYyBjaGFyIGNrcGlkYnVmWzMyXSA9ICI/Pz8/IjsKKworI2lmZGVmIFZNUworX1BS T1RPVFlQKGxvbmcgemdwaWQsKHZvaWQpKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworY2hhciAqCitj a2dldHBpZCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHBpZCBhcyBz dHJpbmcgKi8KKyNpZmRlZiBDS19QSUQKKyNpZmRlZiBPUzIKKyNkZWZpbmUgZ2V0cGlkIF9nZXRw aWQKKyAgICB1bnNpZ25lZCBsb25nIHp6OworI2Vsc2UKKyAgICBsb25nIHp6OworI2VuZGlmIC8q IE9TMiAqLworI2lmZGVmIFZNUworICAgIHp6ID0gemdwaWQoKTsKKyNlbHNlCisgICAgenogPSBn ZXRwaWQoKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBzcHJpbnRmKGNrcGlkYnVmLCIlbGQiLHp6 KTsgICAgICAgICAvKiBTQUZFICovCisjZW5kaWYgLyogQ0tfUElEICovCisgICAgcmV0dXJuKChj aGFyICopY2twaWRidWYpOworfQorCisjaWZuZGVmIE5PU1BMCisjZGVmaW5lIEVNQlVGTEVOIDEy OCAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSBidWZmZXIgbGVuZ3RoICovCisK K3N0YXRpYyBjaGFyIGVtYnVmW0VNQlVGTEVOKzFdOworCitjaGFyICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRXZhbHVhdGUgYnVpbHRpbiB2YXJpYWJsZSAqLworbnZsb29r KHMpIGNoYXIgKnM7IHsKKyAgICBpbnQgeCwgeSwgY3g7CisgICAgbG9uZyB6OworICAgIGNoYXIg KnA7CisjaWZuZGVmIE5PRElBTAorICAgIE1ETUlORiAqIG07CisjZW5kaWYgLyogTk9ESUFMICov CisjaWZuZGVmIE5PS1ZFUkJTICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V5Ym9hcmQgbWFj cm8gbWF0ZXJpYWwgKi8KKyAgICBleHRlcm4gaW50IGtleW1hYywga2V5bWFjeDsKKyNlbmRpZiAv KiBOT0tWRVJCUyAqLworI2lmZGVmIENLX0xPR0lOCisgICAgZXh0ZXJuIGludCBpc2d1ZXN0Owor I2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgeCA9IHN0cmxl bihzKTsKKyAgICBpZiAoZm5kaWFncykgeyAgICAgICAgICAgICAgICAgICAgICAvKiBGVU5DVElP TiBESUFHTk9TVElDIE9OICovCisgICAgICAgIGlmICh4ICsgMzIgPCBFTUJVRkxFTikKKyAgICAg ICAgICBzcHJpbnRmKGVtYnVmLCI8RVJST1I6Tk9fU1VDSF9WQVJJQUJMRTpcXHYoJXMpPiIscyk7 IC8qIFNBRkUgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIHNwcmludGYoZW1idWYsIjxFUlJP UjpOT19TVUNIX1ZBUklBQkxFPiIpOyAvKiBTQUZFICovCisgICAgfSBlbHNlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRlVOQ1RJT04gRElBR05PU1RJQyBPRkYgKi8KKyAgICAgIGVt YnVmWzBdID0gTlVMOworICAgIHggPSBWVkJVRkw7CisgICAgcCA9IHZ2YnVmOworICAgIGlmICh6 enN0cmluZyhzLCZwLCZ4KSA8IDApIHsgICAgICAgIC8qIGUuZy4gZm9yIFx2KFwlYSkgKi8KKyAg ICAgICAgeSA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIHMgPSB2dmJ1ZjsKKyAgICAgICAg eSA9IGxvb2t1cCh2YXJ0YWIscyxudmFycywmeCk7CisgICAgfQorICAgIGN4ID0geTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHkgaXMgdG9vIGdlbmVyaWMgKi8KKyNpZm5kZWYgTk9E SUFMCisgICAgbSA9IChtZG10eXAgPiAwKSA/IG1vZGVtcFttZG10eXBdIDogTlVMTDsgLyogRm9y IFx2KG1feHh4KSB2YXJpYWJsZXMgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworICAgIGRlYnVn KEYxMDEsIm52bG9vayB5IiwiIix5KTsKKworICAgIHN3aXRjaCAoeSkgeworICAgICAgY2FzZSBW Tl9BUkdDOiAgICAgICAgICAgICAgICAgICAgIC8qIEFSR0MgKi8KKyAgICAgICAgc3ByaW50Zih2 dmJ1ZiwiJWQiLG1hY2x2bCA8IDAgPyB0b3BhcmdjIDogbWFjYXJnY1ttYWNsdmxdKTsgLyogU0FG RSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNlIFZOX0FSR1M6ICAgICAg ICAgICAgICAgICAgICAgLyogQVJHUyAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIseGFy Z3MpOyAgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2Fz ZSBWTl9DT1VOOiAgICAgICAgICAgICAgICAgICAgIC8qIENPVU5UICovCisgICAgICAgIHNwcmlu dGYodnZidWYsIiVkIixjb3VudFtjbWRsdmxdKTsgLyogU0FGRSAqLworICAgICAgICByZXR1cm4o dnZidWYpOworCisgICAgICBjYXNlIFZOX0RBVEU6ICAgICAgICAgICAgICAgICAgICAgLyogREFU RSAqLworICAgICAgICB6dGltZSgmcCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCAiYXNj dGltZSIgc3RyaW5nICovCisgICAgICAgIGlmIChwID09IE5VTEwgfHwgKnAgPT0gTlVMKSByZXR1 cm4oTlVMTCk7CisgICAgICAgIHZ2YnVmWzBdID0gcFs4XTsgICAgICAgICAgICAgICAgLyogZGQg Ki8KKyAgICAgICAgdnZidWZbMV0gPSBwWzldOworICAgICAgICB2dmJ1ZlsyXSA9IFNQOworICAg ICAgICB2dmJ1ZlszXSA9IHBbNF07ICAgICAgICAgICAgICAgIC8qIG1tbSAqLworICAgICAgICB2 dmJ1Zls0XSA9IHBbNV07CisgICAgICAgIHZ2YnVmWzVdID0gcFs2XTsKKyAgICAgICAgdnZidWZb Nl0gPSBTUDsKKyAgICAgICAgZm9yICh4ID0gMjA7IHggPCAyNDsgeCsrKSAgICAgICAvKiB5eXl5 ICovCisgICAgICAgICAgdnZidWZbeCAtIDEzXSA9IHBbeF07CisgICAgICAgIHZ2YnVmWzExXSA9 IE5VTDsKKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9OREFUOiAgICAg ICAgICAgICAgICAgICAgIC8qIE51bWVyaWMgZGF0ZSAqLworICAgICAgICBja3N0cm5jcHkodnZi dWYsenpuZGF0ZSgpLFZWQlVGTCk7CisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNh c2UgVk5fRElSRTogICAgICAgICAgICAgICAgICAgICAvKiBESVJFQ1RPUlkgKi8KKyAgICAgICAg cyA9IHpndGRpcigpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgY3VycmVudCBkaXJlY3Rvcnkg Ki8KKyAgICAgICAgaWYgKCFzKQorI2lmZGVmIFVOSVhPUk9TSworICAgICAgICAgIHMgPSAiLi8i OworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAgICAgICBzID0gIltdIjsKKyNlbHNlCisgICAgICAg ICAgcyA9ICIiOworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAg ICAgICBja3N0cm5jcHkodnZidWYscyxWVkJVRkwpOworICAgICAgICBzID0gdnZidWY7CisjaWZk ZWYgVU5JWE9ST1NLCisgICAgICAgIHggPSBzdHJsZW4ocyk7CisgICAgICAgIGlmICh4IDwgVlZC VUZMIC0gMSkgeworICAgICAgICAgICAgaWYgKHNbeC0xXSAhPSAnLycpIHsKKyAgICAgICAgICAg ICAgICBzW3hdID0gJy8nOworICAgICAgICAgICAgICAgIHNbeCsxXSA9IE5VTDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgICAgICByZXR1cm4o cyk7CisKKyAgICAgIGNhc2UgVk5fRklMRTogICAgICAgICAgICAgICAgICAgICAvKiBmaWxlc3Bl YyAqLworICAgICAgICByZXR1cm4oZnNwZWMpOworCisgICAgICBjYXNlIFZOX0hPU1Q6ICAgICAg ICAgICAgICAgICAgICAgLyogaG9zdCBuYW1lICovCisgICAgICAgIGlmICgqbXlob3N0KSB7ICAg ICAgICAgICAgICAgICAgLyogSWYga25vd24gKi8KKyAgICAgICAgICAgIHJldHVybihteWhvc3Qp OyAgICAgICAgICAgICAvKiByZXR1cm4gaXQuICovCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlICovCisgICAgICAgICAgICBja3N0cm5jcHkodnZi dWYsInVua25vd24iLFZWQlVGTCk7IC8qIGp1c3Qgc2F5ICJ1bmtub3duIiAqLworICAgICAgICAg ICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIFZOX1NZU1Q6ICAgICAg ICAgICAgICAgICAgICAgLyogU3lzdGVtIHR5cGUgKi8KKyNpZmRlZiBVTklYCisgICAgICAgIGNr c3RybmNweSh2dmJ1ZiwiVU5JWCIsVlZCVUZMKTsKKyNlbHNlCisjaWZkZWYgVk1TCisgICAgICAg IGNrc3RybmNweSh2dmJ1ZiwiVk1TIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJPUzkvNjhLIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBBTUlH QQorICAgICAgICBja3N0cm5jcHkodnZidWYsIkFtaWdhIixWVkJVRkwpOworI2Vsc2UKKyNpZmRl ZiBNQUMKKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJNYWNpbnRvc2giLFZWQlVGTCk7CisjZWxz ZQorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiV0lOMzIi LFZWQlVGTCkgOworI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJPUy8y IixWVkJVRkwpOworI2VuZGlmIC8qIE5UICovCisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisg ICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiQU9TL1ZTIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBH RU1ET1MKKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJBdGFyaV9TVCIsVlZCVUZMKTsKKyNlbHNl CisjaWZkZWYgU1RSQVRVUworICAgICAgICBja3N0cm5jcHkodnZidWYsIlN0cmF0dXNfVk9TIixW VkJVRkwpOworI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJ1bmtub3duIixWVkJVRkwp OworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlm IC8qIEFNSUdBICovCisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYg LyogVU5JWCAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNlIFZOX1NZU1Y6 ICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIGhlcmFsZCAqLworI2lmZGVmIElLU0QKKyNp ZmRlZiBDS19MT0dJTgorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkKKyAgICAgICAg ICByZXR1cm4oIiIpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLwor ICAgICAgICBmb3IgKHggPSB5ID0gMDsgeCA8IFZWQlVGTDsgeCsrKSB7CisgICAgICAgICAgICBp ZiAoY2t4c3lzW3hdID09IFNQICYmIHkgPT0gMCkgY29udGludWU7CisgICAgICAgICAgICB2dmJ1 Zlt5KytdID0gKGNoYXIpICgoY2t4c3lzW3hdID09IFNQKSA/ICdfJyA6IGNreHN5c1t4XSk7Cisg ICAgICAgIH0KKyAgICAgICAgdnZidWZbeV0gPSBOVUw7CisgICAgICAgIHJldHVybih2dmJ1Zik7 CisgICAgfSAvKiBCcmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCisKKyAgICBz d2l0Y2goeSkgeworICAgICAgY2FzZSBWTl9USU1FOiAgICAgICAgICAgICAgICAgICAgIC8qIFRJ TUUuIEFzc3VtZXMgdGhhdCB6dGltZSByZXR1cm5zICovCisgICAgICAgIHp0aW1lKCZwKTsgICAg ICAgICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6MDA6MDAgMTk5MCIgKi8KKyAgICAg ICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpICAgICAvKiBsaWtlIGFzY3RpbWUoKSEgKi8K KyAgICAgICAgICByZXR1cm4oIiIpOworICAgICAgICBmb3IgKHggPSAxMTsgeCA8IDE5OyB4Kysp ICAgICAgIC8qIGNvcHkgaGg6bW06c3MgKi8KKyAgICAgICAgICB2dmJ1Zlt4IC0gMTFdID0gcFt4 XTsgICAgICAgICAvKiB0byB2dmJ1ZiAqLworICAgICAgICB2dmJ1Zls4XSA9IE5VTDsgICAgICAg ICAgICAgICAgIC8qIHRlcm1pbmF0ZSAqLworICAgICAgICByZXR1cm4odnZidWYpOyAgICAgICAg ICAgICAgICAgIC8qIGFuZCByZXR1cm4gaXQgKi8KKworICAgICAgY2FzZSBWTl9OVElNOiAgICAg ICAgICAgICAgICAgICAgIC8qIE51bWVyaWMgdGltZSAqLworICAgICAgICB6dGltZSgmcCk7ICAg ICAgICAgICAgICAgICAgICAgIC8qICJUaHUgRmViICA4IDEyOjAwOjAwIDE5OTAiICovCisgICAg ICAgIGlmIChwID09IE5VTEwgfHwgKnAgPT0gTlVMKSAgICAgLyogbGlrZSBhc2N0aW1lKCkhICov CisgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICB6ID0gYXRvbChwKzExKSAqIDM2MDBM ICsgYXRvbChwKzE0KSAqIDYwTCArIGF0b2wocCsxNyk7CisgICAgICAgIHNwcmludGYodnZidWYs IiVsZCIseik7ICAgICAgICAgLyogU0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisj aWZkZWYgQ0tfVFRZRkQKKyAgICAgIGNhc2UgVk5fVFRZRjogICAgICAgICAgICAgICAgICAgICAv KiBUVFkgZmlsZSBkZXNjcmlwdG9yICovCisgICAgICAgIHNwcmludGYodnZidWYsIiVkIiwgICAg ICAgICAgICAgLyogU0FGRSAqLworI2lmZGVmIFZNUworICAgICAgICAgICAgICAgIHZtc3R0eWZk KCkKKyNlbHNlCisgICAgICAgICAgICAgICAgdHR5ZmQKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAg ICAgICAgICAgICApOworICAgICAgICByZXR1cm4odnZidWYpOworI2VuZGlmIC8qIENLX1RUWUZE ICovCisKKyAgICAgIGNhc2UgVk5fVkVSUzogICAgICAgICAgICAgICAgICAgICAvKiBOdW1lcmlj IEtlcm1pdCB2ZXJzaW9uIG51bWJlciAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlbGQiLHZl cm51bSk7ICAgIC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2Fz ZSBWTl9YVk5VTTogICAgICAgICAgICAgICAgICAgIC8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lv biBudW1iZXIgKi8KKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxkIix4dmVybnVtKTsgICAvKiBT QUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fSE9NRTogICAg ICAgICAgICAgICAgICAgICAvKiBIb21lIGRpcmVjdG9yeSAqLworICAgICAgICByZXR1cm4oaG9t ZXBhdGgoKSk7CisKKyAgICAgIGNhc2UgVk5fSUJVRjogICAgICAgICAgICAgICAgICAgICAvKiBJ TlBVVCBidWZmZXIgKi8KKyAgICAgICAgcmV0dXJuKChjaGFyICopaW5wYnVmKTsKKworICAgICAg Y2FzZSBWTl9JQ0hSOiAgICAgICAgICAgICAgICAgICAgIC8qIElOUFVUIGNoYXJhY3RlciAqLwor ICAgICAgICBpbmNoYXJbMV0gPSBOVUw7CisgICAgICAgIHJldHVybigoY2hhciAqKWluY2hhcik7 CisKKyAgICAgIGNhc2UgVk5fSUNOVDogICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBjaGFy YWN0ZXIgY291bnQgKi8KKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGluY291bnQpOyAgICAv KiBTQUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fU1BFRTog eyAgICAgICAgICAgICAgICAgICAvKiBUcmFuc21pc3Npb24gU1BFRUQgKi8KKyAgICAgICAgICBs b25nIHQ7CisgICAgICAgICAgdCA9IHR0Z3NwZCgpOworICAgICAgICAgIGlmICh0IDwgMEwpCisg ICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCJ1bmtub3duIik7ICAgLyogU0FGRSAqLworICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIHNwcmludGYodnZidWYsIiVsZCIsdCk7ICAgICAvKiBTQUZF ICovCisgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIH0KKworICAgICAgY2FzZSBWTl9T VUNDOiAgICAgICAgICAgICAgICAgICAgIC8qIFNVQ0NFU1MgZmxhZyAqLworICAgICAgICAvKiBO b3RlIGludmVydGVkIHNlbnNlICovCisgICAgICAgIHNwcmludGYodnZidWYsIiVkIiwoc3VjY2Vz cyA9PSAwKSA/IDEgOiAwKTsgLyogU0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisg ICAgICBjYXNlIFZOX0xJTkU6IHsgICAgICAgICAgICAgICAgICAgLyogTElORSAqLworI2lmZGVm IERFQlVHCisgICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJcXHYobGluZSkgbG9jYWwiLHR0bmFtZSxsb2NhbCk7CisgICAgICAgICAgICAgIGRlYnVnKEYx MTEsIlxcdihsaW5lKSBpbnNlcnZlciIsIiIsaW5zZXJ2ZXIpOworI2lmZGVmIFROQ09ERQorICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJcXHYobGluZSkgdGNwX2luY29taW5nIiwiIix0Y3BfaW5j b21pbmcpOworI2VuZGlmIC8qIFROQ09ERSAqLworI2lmZGVmIENLX1RBUEkKKyAgICAgICAgICAg ICAgZGVidWcoRjExMSwiXFx2KGxpbmUpIHR0dGFwaSIsIiIsdHR0YXBpKTsKKyNlbmRpZiAvKiBD S19UQVBJICovCisgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBDS19U QVBJCisgICAgICAgICAgaWYgKHR0dGFwaSkgeyAgICAgICAgICAgICAgICAgLyogSWYgSSBoYXZl IG1hZGUgYSBUQVBJIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgICAgaW50IGk7ICAgICAgICAg ICAgICAgICAgICAvKiByZXR1cm4gdGhlIFRBUEkgZGV2aWNlIG5hbWUgKi8KKyAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IG50YXBpbGluZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICBp ZiAoIXN0cmNtcCh0dG5hbWUsdGFwaWxpbmV0YWJbaV0ua3dkKSkgeworICAgICAgICAgICAgICAg ICAgICAgIHAgPSBfdGFwaWxpbmV0YWJbaV0ua3dkOworICAgICAgICAgICAgICAgICAgICAgIHJl dHVybihwKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAg IH0KKyNlbmRpZiAvKiBDS19UQVBJICovCisjaWZuZGVmIE5PWEZFUgorICAgICAgICAgIGlmIChp bnNlcnZlciAgICAgICAgICAgICAgICAgIC8qIElmIEkgYW0gYSBUQ1Agc2VydmVyICovCisjaWZk ZWYgVE5DT0RFCisgICAgICAgICAgICAgIHx8IHRjcF9pbmNvbWluZworI2VuZGlmIC8qIFROQ09E RSAqLworICAgICAgICAgICAgICApCisjaWZkZWYgVENQU09DS0VUCisgICAgICAgICAgICBwID0g Y2tnZXRwZWVyKCk7ICAgICAgICAgICAgLyogcmV0dXJuIHBlZXIgbmFtZSAqLworICAgICAgICAg IGVsc2UKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAg ICAgICBpZiAobG9jYWwpICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgaWYgaW4gbG9j YWwgbW9kZSAqLworICAgICAgICAgICAgcCA9IChjaGFyICopIHR0bmFtZTsgICAgICAgIC8qIHJl dHVybiBTRVQgTElORSAvIFNFVCBIT1NUIG5hbWUgKi8KKyAgICAgICAgICBlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgKi8KKyAgICAgICAgICAgIHAgPSAiIjsgICAg ICAgICAgICAgICAgICAgICAvKiByZXR1cm4gZW1wdHkgc3RyaW5nICovCisgICAgICAgICAgaWYg KCFwKSAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSBja2dldHBlZXIoKSByZXR1cm5z ICovCisgICAgICAgICAgICBwID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyogbnVsbCBwb2lu dGVyLi4uICovCisgICAgICAgICAgZGVidWcoRjExMCwiXFx2KGxpbmUpIHAiLHAsMCk7CisgICAg ICAgICAgaWYgKCEqcCkKKyAgICAgICAgICAgIHAgPSAoY2hhciAqKSB0dG5hbWU7CisgICAgICAg ICAgcmV0dXJuKHApOworICAgICAgfQorICAgICAgY2FzZSBWTl9QUk9HOiAgICAgICAgICAgICAg ICAgICAgIC8qIFByb2dyYW0gbmFtZSAqLworICAgICAgICByZXR1cm4oIkMtS2VybWl0Iik7CisK KyAgICB9IC8qIEJyZWFrIHVwIGxvbmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KKworICAgIHN3 aXRjaCh5KSB7CisgICAgICBjYXNlIFZOX1JFVDogICAgICAgICAgICAgICAgICAgICAgLyogVmFs dWUgb2YgbW9zdCByZWNlbnQgUkVUVVJOICovCisgICAgICAgIGRlYnVnKEYxMTEsIlxcdihyZXR1 cm4pIixtcnZhbFttYWNsdmwrMV0sbWFjbHZsKzEpOworICAgICAgICBwID0gbXJ2YWxbbWFjbHZs KzFdOworICAgICAgICBpZiAocCA9PSBOVUxMKSBwID0gIiI7CisgICAgICAgIHJldHVybihwKTsK KworICAgICAgY2FzZSBWTl9GRkM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNpemUgb2YgbW9z dCByZWNlbnQgZmlsZSAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJXMiLCBja2ZzdG9hKGZm YykpOyAvKiBTQUZFICovCisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5f VEZDOiAgICAgICAgICAgICAgICAgICAgICAvKiBTaXplIG9mIG1vc3QgcmVjZW50IGZpbGUgZ3Jv dXAgKi8KKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVzIiwgY2tmc3RvYSh0ZmMpKTsgLyogU0FG RSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNlIFZOX0NQVTogICAgICAg ICAgICAgICAgICAgICAgLyogQ1BVIHR5cGUgKi8KKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9H SU4KKyAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCisgICAgICAgICAgcmV0dXJuKCIi KTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBPUzIK KyAgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKiBnZXRjcHUodm9pZCkgOworICAgICAgICAg ICAgcmV0dXJuIGdldGNwdSgpOworICAgICAgICAgfQorI2Vsc2UgLyogT1MyICovCisjaWZkZWYg Q0tDUFUKKyAgICAgICAgcmV0dXJuKENLQ1BVKTsgICAgICAgICAgICAgICAgICAvKiBUcmFkaXRp b25hbGx5LCBjb21waWxlLXRpbWUgdmFsdWUgKi8KKyNlbHNlCisjaWZkZWYgQ0tfVVRTTkFNRQor ICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1dCBpZiBub25lLCB0 cnkgcnVudGltZSB2YWx1ZSAqLworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgdW5tX21jaFtdOwor ICAgICAgICAgICAgcmV0dXJuKChjaGFyICopdW5tX21jaCk7CisgICAgICAgIH0KKyNlbHNlCisg ICAgICAgIHAgPSBnZXRlbnYoIkhPU1RUWVBFIik7CQkvKiAyMDA5MTExNiAqLworCWlmIChwKSBp ZiAoKnApIHJldHVybihwKTsKKyAgICAgICAgcmV0dXJuKCJ1bmtub3duIik7CisjZW5kaWYgLyog Q0tfVVRTTkFNRSAqLworI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogT1MyICovCisKKyAg ICAgIGNhc2UgVk5fQ01ETDogICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIGxldmVsICov CisgICAgICAgIHNwcmludGYodnZidWYsICIlZCIsIGNtZGx2bCk7ICAgLyogU0FGRSAqLworICAg ICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNlIFZOX0RBWTogICAgICAgICAgICAgICAg ICAgICAgLyogRGF5IG9mIHdlZWsgKi8KKyAgICAgICAgenRpbWUoJnApOworICAgICAgICBpZiAo cCAhPSBOVUxMICYmICpwICE9IE5VTCkgICAgIC8qIHp0aW1lKCkgc3VjY2VlZGVkLiAqLworICAg ICAgICAgIGNrc3RybmNweSh2dmJ1ZixwLDQpOworICAgICAgICBlbHNlCisgICAgICAgICAgdnZi dWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgLyogenRpbWUoKSBmYWlsZWQuICovCisgICAgICAg IHJldHVybih2dmJ1Zik7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHdoYXQgd2UgZ290LiAq LworCisgICAgICBjYXNlIFZOX05EQVk6IHsgICAgICAgICAgICAgICAgICAgLyogTnVtZXJpYyBk YXkgb2Ygd2VlayAqLworICAgICAgICAgIGxvbmcgazsKKyAgICAgICAgICB6ID0gbWpkKHp6bmRh dGUoKSk7ICAgICAgICAgICAvKiBHZXQgbW9kaWZpZWQgSnVsaWFuIGRhdGUgKi8KKyAgICAgICAg ICBrID0gKCgoaW50KSh6ICUgN0wpKSArIDMpICUgNzsgLyogR2V0IGRheSBudW1iZXIgKi8KKyAg ICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlbGQiLGspOyAgICAgICAvKiBTQUZFICovCisgICAgICAg ICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIH0KKworICAgICAgY2FzZSBWTl9MQ0w6ICAgICAgICAg ICAgICAgICAgICAgIC8qIExvY2FsICh2cyByZW1vdGUpIG1vZGUgKi8KKyAgICAgICAgY2tzdHJu Y3B5KHZ2YnVmLCBsb2NhbCA/ICIxIiA6ICIwIixWVkJVRkwpOworICAgICAgICByZXR1cm4odnZi dWYpOworCisgICAgICBjYXNlIFZOX0NNRFM6ICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFu ZCBzb3VyY2UgKi8KKyAgICAgICAgaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfS0IpCisg ICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJwcm9tcHQiLFZWQlVGTCk7CisgICAgICAgIGVsc2Ug aWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQpCisgICAgICAgICAgY2tzdHJuY3B5KHZ2 YnVmLCJtYWNybyIsVlZCVUZMKTsKKyAgICAgICAgZWxzZSBpZiAoY21kc3RrW2NtZGx2bF0uc3Jj ID09IENNRF9URikKKyAgICAgICAgICBja3N0cm5jcHkodnZidWYsImZpbGUiLFZWQlVGTCk7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICBja3N0cm5jcHkodnZidWYsInVua25vd24iLFZWQlVGTCk7 CisgICAgICAgIHJldHVybih2dmJ1Zik7CisKKyAgICAgIGNhc2UgVk5fQ01ERjogICAgICAgICAg ICAgICAgICAgICAvKiBDdXJyZW50IGNvbW1hbmQgZmlsZSBuYW1lICovCisjaWZkZWYgQ09NTUVO VCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKHNlZSBjb21tZW50cyBhYm92ZSkgKi8KKyAg ICAgICAgaWYgKHRmbmFtW3RsZXZlbF0pIHsgICAgICAgICAgICAvKiAobmVhciBkYmxicyBkZWNs YXJhdGlvbikgKi8KKyAgICAgICAgICAgIGRibGJzKHRmbmFtW3RsZXZlbF0sdnZidWYsVlZCVUZM KTsKKyAgICAgICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICAgIH0gZWxzZSByZXR1cm4oIiIp OworI2Vsc2UKKyAgICAgICAgaWYgKHRsZXZlbCA8IDApCisgICAgICAgICAgcmV0dXJuKCIiKTsK KyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybih0Zm5hbVt0bGV2ZWxdID8gdGZuYW1bdGxl dmVsXSA6ICIiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAgIGNhc2UgVk5fTUFDOiAg ICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IG1hY3JvIG5hbWUgKi8KKyAgICAgICAgcmV0 dXJuKChtYWNsdmwgPiAtMSkgPyBtX2FyZ1ttYWNsdmxdWzBdIDogIiIpOworCisgICAgICBjYXNl IFZOX0VYSVQ6CisgICAgICAgIHNwcmludGYodnZidWYsIiVkIix4aXRzdGEpOyAgICAgLyogU0FG RSAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgfSAvKiBCcmVhayB1cCBsb25nIHN3 aXRjaCBzdGF0ZW1lbnRzLi4uICovCisKKyAgICBzd2l0Y2goeSkgeworICAgICAgY2FzZSBWTl9Q UlRZOiB7ICAgICAgICAgICAgICAgICAgIC8qIFBhcml0eSAqLworICAgICAgICAgIGNoYXIgKnNz OworICAgICAgICAgIHN3aXRjaCAocGFyaXR5KSB7CisgICAgICAgICAgICBjYXNlIDA6ICAgc3Mg PSAibm9uZSI7ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2UnOiBzcyA9ICJldmVuIjsgIGJy ZWFrOworICAgICAgICAgICAgY2FzZSAnbSc6IHNzID0gIm1hcmsiOyAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlICdvJzogc3MgPSAib2RkIjsgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3Mn OiBzcyA9ICJzcGFjZSI7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogIHNzID0gInVua25v d24iOyBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHNzLFZW QlVGTCk7CisgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIH0KKworICAgICAgY2FzZSBW Tl9ESUFMOgorICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsICAgICAgICAgICAgIC8qIFNBRkUg Ki8KKyNpZm5kZWYgTk9ESUFMCisgICAgICAgICAgICAgICAgZGlhbHN0YQorI2Vsc2UKKyAgICAg ICAgICAgICAgICAtMQorI2VuZGlmIC8qIE5PRElBTCAqLworICAgICAgICAgICAgICAgICk7Cisg ICAgICAgIHJldHVybih2dmJ1Zik7CisKKyNpZm5kZWYgTk9ESUFMCisgICAgICBjYXNlIFZOX0RN U0c6CisjaWZkZWYgQklHQlVGT0sKKwlja3N0cm5jcHkodnZidWYsZGlhbG1zZ1tkaWFsc3RhXSxW VkJVRkwpOyAvKiBTYWZlIGlmIHNyYyA9PSBOVUxMICovCisjZW5kaWYJLyogQklHQlVGT0sgKi8K KwlyZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisjZW5kaWYJLyogTk9ESUFMICovCisKKyNpZmRlZiBP UzIKKyAgICAgIGNhc2UgVk5fS0VZQjoKKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGNvbmtiZygp LFZWQlVGTCk7CisgICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICBjYXNlIFZOX1NFTENUOiB7 CisjaWZuZGVmIE5PTE9DQUwKKyAgICAgICAgICBjb25zdCBjaGFyICogc2VsZWN0aW9uID0gR2V0 U2VsZWN0aW9uKCk7CisgICAgICAgICAgcmV0dXJuKCAoY2hhciAqKSAoc2VsZWN0aW9uID8gc2Vs ZWN0aW9uIDogIiIgKSkgOworI2Vsc2UKKyAgICAgICAgICByZXR1cm4oIiIpOworI2VuZGlmIC8q IE5PTE9DQUwgKi8KKyAgICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBOT1hGRVIK KyAgICAgIGNhc2UgVk5fQ1BTOgorICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlbGQiLHRmY3BzKTsg ICAgIC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyNlbmRpZiAvKiBOT1hGRVIg Ki8KKworICAgICAgY2FzZSBWTl9NT0RFOiAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJh bnNmZXIgbW9kZSAqLworICAgICAgICBzd2l0Y2ggKGJpbmFyeSkgeworICAgICAgICAgIGNhc2Ug WFlGVF9UOiBja3N0cm5jcHkodnZidWYsInRleHQiLFZWQlVGTCk7IGJyZWFrOworICAgICAgICAg IGNhc2UgWFlGVF9COgorICAgICAgICAgIGNhc2UgWFlGVF9VOiBja3N0cm5jcHkodnZidWYsImJp bmFyeSIsVlZCVUZMKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWUZUX0k6IGNrc3RybmNweSh2 dmJ1ZiwiaW1hZ2UiLFZWQlVGTCk7IGJyZWFrOworICAgICAgICAgIGNhc2UgWFlGVF9MOiBja3N0 cm5jcHkodnZidWYsImxhYmVsZWQiLFZWQlVGTCk7IGJyZWFrOworICAgICAgICAgIGNhc2UgWFlG VF9NOiBja3N0cm5jcHkodnZidWYsIm1hY2JpbmFyeSIsVlZCVUZMKTsgYnJlYWs7CisgICAgICAg ICAgZGVmYXVsdDogICAgIGNrc3RybmNweSh2dmJ1ZiwidW5rbm93biIsVlZCVUZMKTsKKyAgICAg ICAgfQorICAgICAgICByZXR1cm4odnZidWYpOworCisjaWZkZWYgQ0tfUkVYWAorICAgICAgY2Fz ZSBWTl9SRVhYOgorICAgICAgICByZXR1cm4ocmV4eGJ1Zik7CisjZW5kaWYgLyogQ0tfUkVYWCAq LworCisgICAgICBjYXNlIFZOX05FV0w6ICAgICAgICAgICAgICAgICAgICAgLyogU3lzdGVtIG5l d2xpbmUgY2hhciBvciBzZXF1ZW5jZSAqLworI2lmZGVmIFVOSVgKKyAgICAgICAgY2tzdHJuY3B5 KHZ2YnVmLCJcbiIsVlZCVUZMKTsKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAg Y2tzdHJuY3B5KHZ2YnVmLCJcbiIsVlZCVUZMKTsKKyNlbHNlCisjaWZkZWYgT1NLCisgICAgICAg IGNrc3RybmNweSh2dmJ1ZiwiXDE1IixWVkJVRkwpOyAgLyogUmVtZW1iZXIsIHRoZXNlIGFyZSBv Y3RhbC4uLiAqLworI2Vsc2UKKyNpZmRlZiBNQUMKKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJc MTUiLFZWQlVGTCk7CisjZWxzZQorI2lmZGVmIE9TMgorICAgICAgICBja3N0cm5jcHkodnZidWYs IlwxNVwxMiIsVlZCVUZMKTsKKyNlbHNlCisjaWZkZWYgU1RSQVRVUworICAgICAgICBja3N0cm5j cHkodnZidWYsIlxuIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAgICAgY2tzdHJu Y3B5KHZ2YnVmLCJcMTVcMTIiLFZWQlVGTCk7CisjZWxzZQorI2lmZGVmIEFNSUdBCisgICAgICAg IGNrc3RybmNweSh2dmJ1ZiwiXG4iLFZWQlVGTCk7CisjZWxzZQorI2lmZGVmIEdFTURPUworICAg ICAgICBja3N0cm5jcHkodnZidWYsIlxuIixWVkJVRkwpOworI2Vsc2UKKyAgICAgICAgY2tzdHJu Y3B5KHZ2YnVmLCJcbiIsVlZCVUZMKTsKKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyNlbmRpZiAvKiBB TUlHQSAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsK KworICAgICAgY2FzZSBWTl9ST1dTOiAgICAgICAgICAgICAgICAgICAgIC8qIFJPV1MgKi8KKyAg ICAgIGNhc2UgVk5fQ09MUzogICAgICAgICAgICAgICAgICAgICAvKiBDT0xTICovCisgICAgICAg IGNrc3RybmNweSh2dmJ1ZiwoY3ggPT0gVk5fUk9XUykgPyAiMjQiIDogIjgwIixWVkJVRkwpOyAv KiBEZWZhdWx0ICovCisjaWZkZWYgQ0tfVFRHV1NJWgorI2lmZGVmIE9TMgorICAgICAgICBpZiAo dHRfY29sc1tWVEVSTV0gPCAwIHx8IHR0X3Jvd3NbVlRFUk1dIDwgMCkKKyAgICAgICAgICB0dGd3 c2l6KCk7CisgICAgICAgIHNwcmludGYodnZidWYsIiVkIiwgICAgICAgICAgICAgLyogU0FGRSAq LworICAgICAgICAgICAgICAgIChjeCA9PSBWTl9ST1dTKSA/IHR0X3Jvd3NbVlRFUk1dIDogdHRf Y29sc1tWVEVSTV0pOworI2Vsc2UgLyogT1MyICovCisgICAgICAgIGlmICh0dGd3c2l6KCkgPiAw KSAgICAgICAgICAgICAgLyogR2V0IHdpbmRvdyBzaXplICovCisgICAgICAgICAgaWYgKHR0X2Nv bHMgPiAwICYmIHR0X3Jvd3MgPiAwKSAvKiBzZXRzIHR0X3Jvd3MsIHR0X2NvbHMgKi8KKyAgICAg ICAgICAgIHNwcmludGYodnZidWYsIiVkIiwgICAgICAgICAvKiBTQUZFICovCisgICAgICAgICAg ICAgICAgICAgIChjeCA9PSBWTl9ST1dTKSA/IHR0X3Jvd3MgOiB0dF9jb2xzKTsKKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgICAgIHJldHVybih2dmJ1Zik7 CisKKyAgICAgIGNhc2UgVk5fVFRZUDoKKyNpZmRlZiBOT1RFUk0KKyAgICAgICAgY2tzdHJuY3B5 KHZ2YnVmLCJ1bmtub3duIixWVkJVRkwpOworI2Vsc2UKKyNpZmRlZiBPUzIKKyAgICAgICAgc3By aW50Zih2dmJ1ZiwgIiVzIiwgICAgICAgICAgICAvKiBTQUZFICovCisgICAgICAgICAgICAgICAg KHR0X3R5cGUgPj0gMCAmJiB0dF90eXBlIDw9IG1heF90dCkgPworICAgICAgICAgICAgICAgIHR0 X2luZm9bdHRfdHlwZV0ueF9uYW1lIDoKKyAgICAgICAgICAgICAgICAidW5rbm93biIKKyAgICAg ICAgICAgICAgICApOworI2Vsc2UKKyNpZmRlZiBNQUMKKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVm LCJ2dDMyMCIsVlZCVUZMKTsKKyNlbHNlCisgICAgICAgIHAgPSBnZXRlbnYoIlRFUk0iKTsKKyAg ICAgICAgY2tzdHJuY3B5KHZ2YnVmLHAgPyBwIDogInVua25vd24iLFZWQlVGTCsxKTsKKyNlbmRp ZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT1RFUk0gKi8KKyAgICAg ICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9NSU5QOiAgICAgICAgICAgICAgICAg ICAgIC8qIE1JTlBVVCAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQiLCBtX2ZvdW5kKTsg IC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICB9IC8qIEJyZWFrIHVwIGxv bmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KKworICAgIHN3aXRjaCh5KSB7CisgICAgICBjYXNl IFZOX0NPTk46ICAgICAgICAgICAgICAgICAgICAgLyogQ09OTkVDVElPTiAqLworICAgICAgICBp ZiAoIWxvY2FsKSB7CisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJyZW1vdGUiLFZWQlVGTCk7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW5ldHdvcmspCisgICAgICAgICAg ICAgIGNrc3RybmNweSh2dmJ1Ziwic2VyaWFsIixWVkJVRkwpOworI2lmZGVmIFRDUFNPQ0tFVAor ICAgICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfVENQQiB8fCBuZXR0eXBlID09IE5F VF9UQ1BBKSB7CisgICAgICAgICAgICAgICAgaWYgKHR0bnByb3RvID09IE5QX1RFTE5FVCkKKyAg ICAgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwidGNwL2lwX3RlbG5ldCIsVlZCVUZMKTsK KyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0dG5wcm90byA9PSBOUF9T U0wgfHwgdHRucHJvdG8gPT0gTlBfU1NMX1JBVykKKyAgICAgICAgICAgICAgICAgIGNrc3RybmNw eSh2dmJ1ZiwidGNwL2lwX3NzbCIsVlZCVUZMKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0 dG5wcm90byA9PSBOUF9UTFMgfHwgdHRucHJvdG8gPT0gTlBfU1NMX1JBVykKKyAgICAgICAgICAg ICAgICAgIGNrc3RybmNweSh2dmJ1ZiwidGNwL2lwX3RscyIsVlZCVUZMKTsKKyNlbmRpZiAvKiBD S19TU0wgKi8KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBja3N0cm5j cHkodnZidWYsInRjcC9pcCIsVlZCVUZMKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KKyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBl ID09IE5FVF9TU0gpCisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsInRjcC9pcF9z c2giLFZWQlVGTCk7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIEFOWVgyNQorICAg ICAgICAgICAgZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfU1gyNSB8fAorICAgICAgICAgICAgICAg ICAgICAgbmV0dHlwZSA9PSBORVRfVlgyNSB8fAorICAgICAgICAgICAgICAgICAgICAgbmV0dHlw ZSA9PSBORVRfSVgyNQorICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICBja3N0 cm5jcHkodnZidWYsInguMjUiLFZWQlVGTCk7CisjZW5kaWYgLyogQU5ZWDI1ICovCisjaWZkZWYg REVDTkVUCisgICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9ERUMpIHsKKyAgICAg ICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfTEFUKQorICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KHZ2YnVmLCJkZWNuZXRfbGF0IixWVkJVRkwpOworICAgICAgICAgICAgICAgIGVsc2Ug aWYgKCB0dG5wcm90byA9PSBOUF9DVEVSTSApCisgICAgICAgICAgICAgICAgICBja3N0cm5jcHko dnZidWYsImRlY25ldF9jdGVybSIsVlZCVUZMKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsImRlY25ldCIsVlZCVUZMKTsKKyAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBERUNORVQgKi8KKyNpZmRlZiBTVVBFUkxBVAorICAgICAgICAgICAg ZWxzZSBpZiAobmV0dHlwZSA9PSBORVRfU0xBVCkKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2 YnVmLCJzdXBlcmxhdCIsVlZCVUZMKTsKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworI2lmZGVmIE5F VEZJTEUKKyAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0ZJTEUpCisgICAgICAg ICAgICAgIGNrc3RybmNweSh2dmJ1ZiwibG9jYWxfZmlsZSIsVlZCVUZMKTsKKyNlbmRpZiAvKiBO RVRGSUxFICovCisjaWZkZWYgTkVUQ01ECisgICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBlID09 IE5FVF9DTUQpCisgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwicGlwZSIsVlZCVUZMKTsK KyNlbmRpZiAvKiBORVRDTUQgKi8KKyNpZmRlZiBORVRQVFkKKyAgICAgICAgICAgIGVsc2UgaWYg KG5ldHR5cGUgPT0gTkVUX1BUWSkKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCJwc2V1 ZG90ZXJtaW5hbCIsVlZCVUZMKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNpZmRlZiBORVRETEwK KyAgICAgICAgICAgIGVsc2UgaWYgKG5ldHR5cGUgPT0gTkVUX0RMTCkKKyAgICAgICAgICAgICAg Y2tzdHJuY3B5KHZ2YnVmLCJkeW5hbWljX2xpbmtfbGlicmFyeSIsVlZCVUZMKTsKKyNlbmRpZiAv KiBORVRETEwgKi8KKworI2lmZGVmIE5QSVBFCisgICAgICAgICAgICBlbHNlIGlmIChuZXR0eXBl ID09IE5FVF9QSVBFKQorICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsIm5hbWVkX3BpcGUi LFZWQlVGTCk7CisjZW5kaWYgLyogTlBJUEUgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisgICAgICAg ICAgICBlbHNlIGlmIChuZXR0eXBlID09IE5FVF9CSU9TKQorICAgICAgICAgICAgICBja3N0cm5j cHkodnZidWYsIm5ldGJpb3MiLFZWQlVGTCk7CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsInVua25vd24iLFZW QlVGTCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworI2lmbmRlZiBOT1hG RVIKKyAgICAgIGNhc2UgVk5fU1lTSTogICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0gSUQs IEtlcm1pdCBjb2RlICovCisgICAgICAgIHJldHVybigoY2hhciAqKWNrc3lzaWQpOworI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZkZWYgT1MyCisgICAgICBjYXNlIFZOX1NQQTogeworICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgc3BhY2UgPSB6ZHNrc3BhY2UoMCk7CisgICAgICAgICAgaWYgKHNw YWNlID4gMCAmJiBzcGFjZSA8IDEwMjQpCisgICAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCItMSIp OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNwcmludGYodnZidWYsIiVsdSIsc3BhY2Up OyAvKiBTQUZFICovCisgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIH0KKyNlbmRpZiAv KiBPUzIgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgVk5fUVVFOiB7CisgICAgICAg ICAgZXh0ZXJuIGNoYXIgcXVlcnlidWZbXTsKKyAgICAgICAgICByZXR1cm4ocXVlcnlidWYpOwor ICAgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgIGNh c2UgVk5fQ1NFVDoKKyNpZmRlZiBPUzIKKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiY3AlZCIsb3My Z2V0Y3AoKSk7IC8qIFNBRkUgKi8KKyNlbHNlCisgICAgICAgIGNrc3RybmNweSh2dmJ1ZixmY3Np bmZvW2ZjaGFyc2V0XS5rZXl3b3JkLFZWQlVGTCsxKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgcmV0dXJuKHZ2YnVmKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZmRlZiBPUzIKKyAg ICAgIGNhc2UgVk5fRVhFRElSOgorICAgICAgICByZXR1cm4oZXhlZGlyKTsKKyAgICAgIGNhc2Ug Vk5fU1RBUjoKKyAgICAgICAgcmV0dXJuKHN0YXJ0dXBkaXIpOworI2Vsc2UKKyAgICAgIGNhc2Ug Vk5fRVhFRElSOgorICAgICAgICByZXR1cm4oZXhlZGlyID8gZXhlZGlyIDogIiIpOworI2lmZGVm IFZNU09SVU5JWAorICAgICAgY2FzZSBWTl9TVEFSOgorICAgICAgICByZXR1cm4oc3RhcnR1cGRp cik7CisjZW5kaWYgLyogVk1TT1JVTklYICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICAgIGNh c2UgVk5fSU5JOgorICAgICAgICByZXR1cm4oaW5pZGlyKTsKKworICAgICAgY2FzZSBWTl9NRE06 CisgICAgICAgIHJldHVybihnbWRtdHlwKCkpOworCisgICAgICBjYXNlIFZOX0VWQUw6CisgICAg ICAgIHJldHVybihldmFsYnVmKTsKKworI2lmbmRlZiBOT0RJQUwKKyAgICAgIGNhc2UgVk5fRF9D QzogICAgICAgICAgICAgICAgICAgICAvKiBESUFMIENPVU5UUlktQ09ERSAqLworICAgICAgICBy ZXR1cm4oZGlhbGxjYyA/IGRpYWxsY2MgOiAiIik7CisKKyAgICAgIGNhc2UgVk5fRF9BQzogICAg ICAgICAgICAgICAgICAgICAvKiBESUFMIEFSRUEtQ09ERSAqLworICAgICAgICByZXR1cm4oZGlh bGxhYyA/IGRpYWxsYWMgOiAiIik7CisKKyAgICAgIGNhc2UgVk5fRF9JUDogICAgICAgICAgICAg ICAgICAgICAvKiBESUFMIElOVEVSTkFUSU9OQUwtUFJFRklYICovCisgICAgICAgIHJldHVybihk aWFsaXhwID8gZGlhbGl4cCA6ICIiKTsKKworICAgICAgY2FzZSBWTl9EX0xQOiAgICAgICAgICAg ICAgICAgICAgIC8qIERJQUwgTEQtUFJFRklYICovCisgICAgICAgIHJldHVybihkaWFsbGRwID8g ZGlhbGxkcCA6ICIiKTsKKworICAgICAgY2FzZSBWTl9EX0xDUDogICAgICAgICAgICAgICAgICAg IC8qIERJQUwgTE9DQUwtUFJFRklYICovCisgICAgICAgIHJldHVybihkaWFsbGNwID8gZGlhbGxj cCA6ICIiKTsKKworICAgICAgY2FzZSBWTl9EX1BYWDogICAgICAgICAgICAgICAgICAgIC8qIERJ QUwgUEJYLUVYQ0hBTkdFIHRoYXQgbWF0Y2hlZCAqLworICAgICAgICByZXR1cm4obWF0Y2hweHgg PyBtYXRjaHB4eCA6ICIiKTsKKyNlbHNlCisgICAgICBjYXNlIFZOX0RfQ0M6ICAgICAgICAgICAg ICAgICAgICAgLyogRElBTCBDT1VOVFJZLUNPREUgKi8KKyAgICAgIGNhc2UgVk5fRF9BQzogICAg ICAgICAgICAgICAgICAgICAvKiBESUFMIEFSRUEtQ09ERSAqLworICAgICAgY2FzZSBWTl9EX0lQ OiAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgSU5URVJOQVRJT05BTC1QUkVGSVggKi8KKyAg ICAgIGNhc2UgVk5fRF9MUDogICAgICAgICAgICAgICAgICAgICAvKiBESUFMIExELVBSRUZJWCAq LworICAgICAgY2FzZSBWTl9EX0xDUDogICAgICAgICAgICAgICAgICAgIC8qIERJQUwgTE9DQUwt UFJFRklYICovCisgICAgICBjYXNlIFZOX0RfUFhYOiAgICAgICAgICAgICAgICAgICAgLyogRElB TCBQQlgtRVhDSEFOR0UgKi8KKyAgICAgICAgcmV0dXJuKCIiKTsKKyNlbmRpZiAvKiBOT0RJQUwg Ki8KKyAgICAgIGNhc2UgVk5fVUlEOgorI2lmZGVmIFVOSVgKKyAgICAgICAgeworI2lmZGVmIElL U0QKKyAgICAgICAgICAgIGlmIChpbnNlcnZlcikKKyAgICAgICAgICAgICAgcmV0dXJuKChjaGFy ICopdWlkYnVmKTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAg ICAgICAgIGlmICh1aWRidWZbMF0pCisgICAgICAgICAgICAgICAgcmV0dXJuKChjaGFyICopdWlk YnVmKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybih3aG9hbWko KSk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHJldHVybigoY2hhciAqKXVpZGJ1Zik7Cisj ZW5kaWYgLyogVU5JWCAqLworICAgIH0gLyogQnJlYWsgdXAgbG9uZyBzd2l0Y2ggc3RhdGVtZW50 cy4uLiAqLworCisgICAgc3dpdGNoKHkpIHsKKyAgICAgIGNhc2UgVk5fUFdEOgorI2lmZGVmIE9T MgorICAgICAgICBpZiAoYWN0aXZlY21kID09IFhYT1VUIHx8IGFjdGl2ZWNtZCA9PSBYWExOT1VU KSB7CisgICAgICAgICAgICBja3N0cm5jcHkodnZidWYscHdidWYsVlZCVUZMKTsKKyAgICAgICAg ICAgIGNrX2VuY3J5cHQoKGNoYXIgKil2dmJ1Zik7CisgICAgICAgICAgICByZXR1cm4oKGNoYXIg Kil2dmJ1Zik7CisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgIHJl dHVybigoY2hhciAqKXB3YnVmKTsKKworICAgICAgY2FzZSBWTl9QUk06CisgICAgICAgIHJldHVy bigoY2hhciAqKXBybWJ1Zik7CisKKyAgICAgIGNhc2UgVk5fUFJPVE86CisjaWZkZWYgTk9YRkVS CisgICAgICAgIHJldHVybigibm9uZSIpOworI2Vsc2UKKyNpZmRlZiBDS19YWVoKKyAgICAgICAg cmV0dXJuKHB0YWJbcHJvdG9jb2xdLnBfbmFtZSk7CisjZWxzZQorICAgICAgICByZXR1cm4oImtl cm1pdCIpOworI2VuZGlmIC8qIENLX1hZWiAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZu ZGVmIE5PWEZFUgorI2lmZGVmIENLX1RNUERJUgorICAgICAgY2FzZSBWTl9ETERJUjoKKyAgICAg ICAgcmV0dXJuKGRsZGlyID8gZGxkaXIgOiAiIik7CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisj ZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9ESUFMCisgICAgICBjYXNlIFZOX01fSU5J OiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gaW5pdCBzdHJpbmcgKi8KKyAgICAgICAgcmV0 dXJuKGRpYWxpbmkgPyBkaWFsaW5pIDogKG0gPyBtLT53YWtlX3N0ciA6ICIiKSk7CisKKyAgICAg IGNhc2UgVk5fTV9EQ006ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBkaWFsIGNvbW1hbmQg Ki8KKyAgICAgICAgcmV0dXJuKGRpYWxjbWQgPyBkaWFsY21kIDogKG0gPyBtLT5kaWFsX3N0ciA6 ICIiKSk7CisKKyAgICAgIGNhc2UgVk5fTV9EQ086ICAgICAgICAgICAgICAgICAgICAvKiBNb2Rl bSBkYXRhIGNvbXByZXNzaW9uIG9uICovCisgICAgICAgIHJldHVybihkaWFsZGNvbiA/IGRpYWxk Y29uIDogKG0gPyBtLT5kY19vbl9zdHIgOiAiIikpOworCisgICAgICBjYXNlIFZOX01fRENYOiAg ICAgICAgICAgICAgICAgICAgLyogTW9kZW0gZGF0YSBjb21wcmVzc2lvbiBvZmYgKi8KKyAgICAg ICAgcmV0dXJuKGRpYWxkY29mZiA/IGRpYWxkY29mZiA6IChtID8gbS0+ZGNfb2ZmX3N0ciA6ICIi KSk7CisKKyAgICAgIGNhc2UgVk5fTV9FQ086ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBl cnJvciBjb3JyZWN0aW9uIG9uICovCisgICAgICAgIHJldHVybihkaWFsZWNvbiA/IGRpYWxlY29u IDogKG0gPyBtLT5lY19vbl9zdHIgOiAiIikpOworCisgICAgICBjYXNlIFZOX01fRUNYOiAgICAg ICAgICAgICAgICAgICAgLyogTW9kZW0gZXJyb3IgY29ycmVjdGlvbiBvZmYgKi8KKyAgICAgICAg cmV0dXJuKGRpYWxlY29mZiA/IGRpYWxlY29mZiA6IChtID8gbS0+ZWNfb2ZmX3N0ciA6ICIiKSk7 CisKKyAgICAgIGNhc2UgVk5fTV9BQU86ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBhdXRv YW5zd2VyIG9uICovCisgICAgICAgIHJldHVybihkaWFsYWFvbiA/IGRpYWxhYW9uIDogKG0gPyBt LT5hYV9vbl9zdHIgOiAiIikpOworCisgICAgICBjYXNlIFZOX01fQUFYOiAgICAgICAgICAgICAg ICAgICAgLyogTW9kZW0gYXV0b2Fuc3dlciBvZmYgKi8KKyAgICAgICAgcmV0dXJuKGRpYWxhYW9m ZiA/IGRpYWxhYW9mZiA6IChtID8gbS0+YWFfb2ZmX3N0ciA6ICIiKSk7CisKKyAgICAgIGNhc2Ug Vk5fTV9IVVA6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBoYW5ndXAgY29tbWFuZCAqLwor ICAgICAgICByZXR1cm4oZGlhbGhjbWQgPyBkaWFsaGNtZCA6IChtID8gbS0+aHVwX3N0ciA6ICIi KSk7CisKKyAgICAgIGNhc2UgVk5fTV9IV0Y6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBo YXJkd2FyZSBmbG93IGNvbW1hbmQgKi8KKyAgICAgICAgcmV0dXJuKGRpYWxod2ZjID8gZGlhbGh3 ZmMgOiAobSA/IG0tPmh3ZmNfc3RyIDogIiIpKTsKKworICAgICAgY2FzZSBWTl9NX1NXRjogICAg ICAgICAgICAgICAgICAgIC8qIE1vZGVtIHNvZnR3YXJlIGZsb3cgY29tbWFuZCAqLworICAgICAg ICByZXR1cm4oZGlhbHN3ZmMgPyBkaWFsc3dmYyA6IChtID8gbS0+c3dmY19zdHIgOiAiIikpOwor CisgICAgICBjYXNlIFZOX01fTkZDOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gbm8gZmxv dy1jb250cm9sIGNvbW1hbmQgKi8KKyAgICAgICAgcmV0dXJuKGRpYWxub2ZjID8gZGlhbG5vZmMg OiAobSA/IG0tPm5vZmNfc3RyIDogIiIpKTsKKworICAgICAgY2FzZSBWTl9NX1BETTogICAgICAg ICAgICAgICAgICAgIC8qIE1vZGVtIHB1bHNlIGRpYWxpbmcgbW9kZSAqLworICAgICAgICByZXR1 cm4oZGlhbHB1bHNlID8gZGlhbHB1bHNlIDogKG0gPyBtLT5wdWxzZSA6ICIiKSk7CisKKyAgICAg IGNhc2UgVk5fTV9URE06ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSB0b25lIGRpYWxpbmcg bW9kZSAqLworICAgICAgICByZXR1cm4oZGlhbHRvbmUgPyBkaWFsdG9uZSA6IChtID8gbS0+dG9u ZSA6ICIiKSk7CisKKyAgICAgIGNhc2UgVk5fTV9OQU06ICAgICAgICAgICAgICAgICAgICAvKiBN b2RlbSBmdWxsIG5hbWUgKi8KKyAgICAgICAgcmV0dXJuKGRpYWxuYW1lID8gZGlhbG5hbWUgOiAo bSA/IG0tPm5hbWUgOiAiIikpOworI2Vsc2UKKyAgICAgIGNhc2UgVk5fTV9JTkk6ICAgICAgICAg ICAgICAgICAgICAvKiBNb2RlbSBpbml0IHN0cmluZyAqLworICAgICAgY2FzZSBWTl9NX0RDTTog ICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGRpYWwgY29tbWFuZCAqLworICAgICAgY2FzZSBW Tl9NX0RDTzogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGRhdGEgY29tcHJlc3Npb24gb24g Ki8KKyAgICAgIGNhc2UgVk5fTV9EQ1g6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBkYXRh IGNvbXByZXNzaW9uIG9mZiAqLworICAgICAgY2FzZSBWTl9NX0VDTzogICAgICAgICAgICAgICAg ICAgIC8qIE1vZGVtIGVycm9yIGNvcnJlY3Rpb24gb24gKi8KKyAgICAgIGNhc2UgVk5fTV9FQ1g6 ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBlcnJvciBjb3JyZWN0aW9uIG9mZiAqLworICAg ICAgY2FzZSBWTl9NX0FBTzogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIGF1dG9hbnN3ZXIg b24gKi8KKyAgICAgIGNhc2UgVk5fTV9BQVg6ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBh dXRvYW5zd2VyIG9mZiAqLworICAgICAgY2FzZSBWTl9NX0hVUDogICAgICAgICAgICAgICAgICAg IC8qIE1vZGVtIGhhbmd1cCBjb21tYW5kICovCisgICAgICBjYXNlIFZOX01fSFdGOiAgICAgICAg ICAgICAgICAgICAgLyogTW9kZW0gaGFyZHdhcmUgZmxvdyBjb21tYW5kICovCisgICAgICBjYXNl IFZOX01fU1dGOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gc29mdHdhcmUgZmxvdyBjb21t YW5kICovCisgICAgICBjYXNlIFZOX01fTkZDOiAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0g bm8gZmxvdy1jb250cm9sIGNvbW1hbmQgKi8KKyAgICAgIGNhc2UgVk5fTV9QRE06ICAgICAgICAg ICAgICAgICAgICAvKiBNb2RlbSBwdWxzZSBkaWFsaW5nIG1vZGUgKi8KKyAgICAgIGNhc2UgVk5f TV9URE06ICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSB0b25lIGRpYWxpbmcgbW9kZSAqLwor ICAgICAgY2FzZSBWTl9NX05BTToKKyAgICAgICAgcmV0dXJuKCIiKTsKKyNlbmRpZiAvKiBOT0RJ QUwgKi8KKworICAgICAgY2FzZSBWTl9JU1RBVDogICAgICAgICAgICAgICAgICAgIC8qIElOUFVU IHN0YXR1cyAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCAiJWQiLCBpbnN0YXR1cyk7IC8qIFNB RkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9URU1QOiAgICAg ICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KKyAgICAgICAgaWYgKHRl bXBkaXIpIHsKKyAgICAgICAgICAgIHAgPSB0ZW1wZGlyOworICAgICAgICB9IGVsc2UgeworI2lm ZGVmIE9TMgorI2lmZGVmIE5UCisgICAgICAgICAgICBwID0gZ2V0ZW52KCJLOTVUTVAiKTsKKyNl bHNlCisgICAgICAgICAgICBwID0gZ2V0ZW52KCJLMlRNUCIpOworI2VuZGlmIC8qIE5UICovCisg ICAgICAgICAgICBpZiAoICFwICkKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgcCA9 IGdldGVudigiQ0tfVE1QIik7CisgICAgICAgICAgICBpZiAoIXApIHAgPSBnZXRlbnYoIlRNUERJ UiIpOworICAgICAgICAgICAgaWYgKCFwKSBwID0gZ2V0ZW52KCJURU1QIik7CisgICAgICAgICAg ICBpZiAoIXApIHAgPSBnZXRlbnYoIlRNUCIpOworCisjaWZkZWYgT1MyT1JVTklYCisgICAgICAg ICAgICBpZiAocCkgeworICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4ocCk7CisgICAg ICAgICAgICAgICAgaWYgKHBbbGVuLTFdICE9ICcvJworI2lmZGVmIE9TMgorICAgICAgICAgICAg ICAgICAgICAmJiBwW2xlbi0xXSAhPSAnXFwnCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAg ICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgZm9vW0NLTUFY UEFUSF07CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShmb28scCxDS01BWFBBVEgpOwor ICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQoZm9vLCIvIixDS01BWFBBVEgpOworICAgICAg ICAgICAgICAgICAgICBwID0gZm9vOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g ZWxzZQorI2Vsc2UgLyogT1MyT1JVTklYICovCisgICAgICAgICAgICBpZiAoIXApCisjZW5kaWYg LyogT1MyT1JVTklYICovCisjaWZkZWYgVU5JWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU3lzdGVtcyB0aGF0IGhhdmUgYSBzdGFuZGFyZCAqLworICAgICAgICAgICAgICBwID0gIi90 bXAvIjsgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSBkaXJlY3RvcnkuLi4gKi8KKyNlbHNlCisj aWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgICAgICAgcCA9ICI6VE1QOiI7CisjZWxzZQorICAg ICAgICAgICAgICBwID0gIiI7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBV TklYICovCisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHAsVlZCVUZMKTsKKyAg ICAgICAgcCA9IHZ2YnVmOworCisvKiBUaGlzIG5lZWRzIGdlbmVyYWxpemluZyBmb3IgVk9TLCBB T1MvVlMsIGV0Yy4uLiAqLworCisgICAgICAgIHdoaWxlICgqcCkgeworI2lmZGVmIE9TMgorICAg ICAgICAgICAgaWYgKCpwID09ICdcXCcpICpwID0gJy8nOworI2VuZGlmIC8qIE9TMiAqLworICAg ICAgICAgICAgcCsrOworICAgICAgICB9CisjaWZuZGVmIFZNUworICAgICAgICBpZiAocCA+IHZ2 YnVmKSB7CisgICAgICAgICAgICBjaGFyIGMgPSAgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0 b3J5IHRlcm1pbmF0aW9uIGNoYXJhY3RlciAqLworI2lmZGVmIE1BQworICAgICAgICAgICAgICAn OicKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgICAgICAgJzonCisjZWxzZQor I2lmZGVmIFNUUkFUVVMKKyAgICAgICAgICAgICAgJz4nCisjZWxzZQorICAgICAgICAgICAgICAn LycKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRp ZiAvKiBNQUMgKi8KKyAgICAgICAgICAgICAgICA7CisKKyAgICAgICAgICAgIGlmICgqKHAtMSkg IT0gYykgeworICAgICAgICAgICAgICAgICpwKysgPSBjOworICAgICAgICAgICAgICAgICpwID0g TlVMOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisgICAgICAg IHJldHVybih2dmJ1Zik7CisgICAgfSAvKiBCcmVhayB1cCBsb25nIHN3aXRjaCBzdGF0ZW1lbnRz Li4uICovCisKKyAgICBzd2l0Y2goeSkgeworICAgICAgY2FzZSBWTl9FUlJOTzogICAgICAgICAg ICAgICAgICAgIC8qIEVycm9yIG51bWJlciAqLworI2lmZGVmIFZNUworICAgICAgICB7CisgICAg ICAgICAgICBleHRlcm4gaW50IHZtc19sYXN0ZXJyOworICAgICAgICAgICAgc3ByaW50Zih2dmJ1 ZiwgIiVkIiwgdm1zX2xhc3RlcnIpOyAvKiBTQUZFICovCisgICAgICAgIH0KKyNlbHNlCisgICAg ICAgIHNwcmludGYodnZidWYsICIlZCIsIGVycm5vKTsgICAgLyogU0FGRSAqLworI2VuZGlmIC8q IFZNUyAqLworICAgICAgICByZXR1cm4odnZidWYpOworCisgICAgICBjYXNlIFZOX0VSU1RSOiAg ICAgICAgICAgICAgICAgICAgLyogRXJyb3Igc3RyaW5nICovCisgICAgICAgIGNrc3RybmNweSh2 dmJ1Zixja19lcnJzdHIoKSxWVkJVRkwpOworICAgICAgICByZXR1cm4odnZidWYpOworCisjaWZu ZGVmIE5PWEZFUgorICAgICAgY2FzZSBWTl9SUFNJWjogICAgICAgICAgICAgICAgICAgIC8qIFJF Q0VJVkUgcGFja2V0LWxlbmd0aCAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsdXJwc2l6 KTsgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAgY2FzZSBW Tl9XSU5ETzogICAgICAgICAgICAgICAgICAgIC8qIFdJTkRPVyBzbG90cyAqLworICAgICAgICBz cHJpbnRmKHZ2YnVmLCIlZCIsd3Nsb3RyKTsgICAgIC8qIFNBRkUgKi8KKyAgICAgICAgcmV0dXJu KHZ2YnVmKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgICAgY2FzZSBWTl9URkxOOiAgICAg ICAgICAgICAgICAgICAgIC8qIFRBS0UtZmlsZSBsaW5lIG51bWJlciAqLworICAgICAgICBpZiAo dGxldmVsID4gLTEpIHsKKyAgICAgICAgICAgIHNwcmludGYodnZidWYsICIlZCIsIHRmbGluZVt0 bGV2ZWxdKTsgLyogU0FGRSAqLworICAgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgICAg fSBlbHNlCisgICAgICAgICAgcmV0dXJuKCIwIik7CisKKyAgICAgIGNhc2UgVk5fTURNU0c6ICAg ICAgICAgICAgICAgICAgICAvKiBESUFMUkVTVUxUICovCisjaWZuZGVmIE5PRElBTAorICAgICAg ICByZXR1cm4oKGNoYXIgKiltb2RlbW1zZyk7CisjZWxzZQorICAgICAgICByZXR1cm4oIiIpOwor I2VuZGlmIC8qIE5PRElBTCAqLworCisgICAgICBjYXNlIFZOX0ROVU06ICAgICAgICAgICAgICAg ICAgICAgLyogRElBTE5VTUJFUiAqLworI2lmbmRlZiBOT0RJQUwKKyAgICAgICAgcmV0dXJuKGRp YWxudW0gPyAoY2hhciAqKSBkaWFsbnVtIDogIiIpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuKCIi KTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworICAgICAgY2FzZSBWTl9BUEM6CisgICAgICAgIHNw cmludGYodnZidWYsICIlZCIsICAgICAgICAgICAgLyogU0FGRSAqLworI2lmZGVmIENLX0FQQwor ICAgICAgICAgICAgICAgIGFwY2FjdGl2ZQorI2Vsc2UKKyAgICAgICAgICAgICAgICAwCisjZW5k aWYgLyogQ0tfQVBDICovCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuKChjaGFy ICopdnZidWYpOworCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PS1ZFUkJTCisgICAgICBjYXNlIFZO X1RSTUs6CisgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwgIiVkIiwga2V5bWFjKTsgLyogU0FGRSAq LworICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisjZW5kaWYgLyogTk9LVkVSQlMgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgY2FzZSBWTl9JUEFERFI6CisjaWZkZWYgVENQU09D S0VUCisjaWZuZGVmIE9TSworICAgICAgLyogVGhpcyBkdW1wcyBjb3JlIG9uIE9TLTkgZm9yIHNv bWUgcmVhc29uLCBidXQgb25seSBpZiBleGVjdXRlZCAqLworICAgICAgLyogYmVmb3JlIHdlIGhh dmUgbWFkZSBhIFRDUCBjb25uZWN0aW9uLiAgVGhpcyBpcyBvYnZpb3VzbHkgbm90ICovCisgICAg ICAvKiB0aGUgaWRlYWwgZml4LiAqLworICAgICAgICBpZiAoIW15aXBhZGRyWzBdKQorICAgICAg ICAgIGdldGxvY2FsaXBhZGRyKCk7CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogVENQU09D S0VUICovCisgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAg ICAgICAgICAgICAoY2hhciAqKW15aXBhZGRyLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAiIiwK KyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICAgICAgICAgICAgICBWVkJVRkwpOworICAgICAg ICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFZO X0NSQzE2OiAgICAgICAgICAgICAgICAgICAgLyogQ1JDLTE2IG9mIG1vc3QgcmVjZW50IHRyYW5z ZmVyICovCisgICAgICAgIHNwcmludGYodnZidWYsIiVkIixjcmMxNik7ICAgICAgLyogU0FGRSAq LworICAgICAgICByZXR1cm4odnZidWYpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYg Q0tfUElECisgICAgICBjYXNlIFZOX1BJRDoKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4K KyAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCisgICAgICAgICAgcmV0dXJuKCIiKTsK KyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgcmV0dXJu KGNrZ2V0cGlkKCkpOworI2VuZGlmIC8qIENLX1BJRCAqLworCisjaWZuZGVmIE5PWEZFUgorICAg ICAgY2FzZSBWTl9GTkFNOiB7ICAgICAgICAgICAgICAgICAgIC8qIFx2KGZpbGVuYW1lKSAqLwor ICAgICAgICAgIGV4dGVybiBjaGFyIGZpbG5hbVtdLCBvZm4xW10sICpzZnNwZWMsICpycmZzcGVj OworICAgICAgICAgIGNoYXIgKiB0bXA7CisgICAgICAgICAgc3dpdGNoICh3aGF0KSB7ICAgICAg ICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBpcyBpbiBwcm9ncmVzcyAqLworI2lmZGVmIE5FV0ZU UAorICAgICAgICAgICAgY2FzZSAoV19GVFB8V19SRUNWKToKKyAgICAgICAgICAgIGNhc2UgKFdf RlRQfFdfU0VORCk6CisgICAgICAgICAgICAgIHJldHVybigoY2hhciAqKWZpbG5hbSk7CisjZW5k aWYgLyogTkVXRlRQICovCisgICAgICAgICAgICBjYXNlIFdfUkVDVjoKKyAgICAgICAgICAgIGNh c2UgV19SRU1POgorICAgICAgICAgICAgICByZXR1cm4oKGNoYXIgKilvZm4xKTsKKyAgICAgICAg ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAvKiBNb3N0IHJlY2VudCBmaWxlIHRyYW5z ZmVycmVkICovCisgICAgICAgICAgICAgIGlmIChmaWxuYW1bMF0pIHsgICAgICAgICAgLyogKGlm IGFueSkgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybigoY2hhciAqKWZpbG5hbSk7CisgICAg ICAgICAgICAgIH0gZWxzZSBpZiAobGFzdHhmZXIgJiBXX1NFTkQgJiYgc2ZzcGVjKSB7CisgICAg ICAgICAgICAgICAgICBpZiAoZm5zcGF0aCA9PSBQQVRIX09GRikKKyAgICAgICAgICAgICAgICAg ICAgenN0cmlwKHNmc3BlYywmdG1wKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICAgICAgdG1wID0gc2ZzcGVjOworICAgICAgICAgICAgICAgICAgcmV0dXJuKHRtcCk7 CisgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdHhmZXIgJiBXX1JFQ1YgJiYgcnJmc3BlYykg eworICAgICAgICAgICAgICAgICAgaWYgKGZucnBhdGggPT0gUEFUSF9PRkYpCisgICAgICAgICAg ICAgICAgICAgIHpzdHJpcChycmZzcGVjLCZ0bXApOworICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICB0bXAgPSBycmZzcGVjOworICAgICAgICAgICAgICAgICAgcmV0 dXJuKHRtcCk7CisgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybigi Iik7CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgY2FzZSBWTl9GTlVNOiAgICAgICAgICAg ICAgICAgICAgIC8qIFx2KGZpbGVudW0pICovCisgICAgICAgIHNwcmludGYodnZidWYsIiVsZCIs ZmlsY250KTsgICAgLyogU0FGRSAqLworICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Cisj ZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBQRVhJVFNUQVQKKyAgICAgIGNhc2UgVk5fUEVY SVQ6IHsKKyAgICAgICAgICBleHRlcm4gaW50IHBleGl0c3RhdDsKKyAgICAgICAgICBzcHJpbnRm KHZ2YnVmLCIlZCIscGV4aXRzdGF0KTsgLyogU0FGRSAqLworICAgICAgICAgIHJldHVybigoY2hh ciAqKXZ2YnVmKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBQRVhJVFNUQVQgKi8KKworI2lmbmRlZiBO T1hGRVIKKyAgICAgIGNhc2UgVk5fUF84QklUOgorICAgICAgICB2dmJ1ZlswXSA9IHBhcml0eSA/ IGVicSA6IE5VTDsKKyAgICAgICAgdnZidWZbMV0gPSBOVUw7CisgICAgICAgIHJldHVybigoY2hh ciAqKXZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9QX0NUTDogeworICAgICAgICAgIGV4dGVybiBD SEFSIG15Y3RscTsKKyAgICAgICAgICB2dmJ1ZlswXSA9IG15Y3RscTsKKyAgICAgICAgICB2dmJ1 ZlsxXSA9IE5VTDsKKyAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgICB9Cisg ICAgICBjYXNlIFZOX1BfUlBUOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBycHRlbmE7CisgICAg ICAgICAgdnZidWZbMF0gPSBycHRlbmEgPyBycHRxIDogTlVMOworICAgICAgICAgIHZ2YnVmWzFd ID0gTlVMOworICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIE9TMgorICAgICAgY2FzZSBWTl9SRUdOOgorICAgICAg ICByZXR1cm4oZ2V0X3JlZ19uYW1lKCkpOworICAgICAgY2FzZSBWTl9SRUdPOgorICAgICAgICBy ZXR1cm4oZ2V0X3JlZ19jb3JwKCkpOworICAgICAgY2FzZSBWTl9SRUdTOgorICAgICAgICByZXR1 cm4oZ2V0X3JlZ19zbigpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9IC8qIEJyZWFrIHVwIGxv bmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KKworICAgIHN3aXRjaCh5KSB7CisgICAgICBjYXNl IFZOX1hQUk9HOgorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjaWZkZWYgS1VJCisgICAgICAgIHJl dHVybigiSy05NUciKTsKKyNlbHNlCisgICAgICAgIHJldHVybigiSy05NSIpOworI2VuZGlmIC8q IEtVSSAqLworI2Vsc2UKKyAgICAgICAgcmV0dXJuKCJLLzIiKTsKKyNlbmRpZiAvKiBOVCAqLwor I2Vsc2UKKyAgICAgICAgcmV0dXJuKCJDLUtlcm1pdCIpOworI2VuZGlmIC8qIE9TMiAqLworCisg ICAgICBjYXNlIFZOX0VESVRPUjoKKyNpZmRlZiBOT0ZSSUxMUworICAgICAgICByZXR1cm4oIiIp OworI2Vsc2UKKyNpZmRlZiBOT1BVU0gKKyAgICAgICAgcmV0dXJuKCIiKTsKKyNlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICAgIGV4dGVybiBjaGFyIGVkaXRvcltdOworICAgICAgICAgICAgY2hh ciAqc3M7CisgICAgICAgICAgICBpZiAoIWVkaXRvclswXSkgeworICAgICAgICAgICAgICAgIHNz ID0gZ2V0ZW52KCJFRElUT1IiKTsKKyAgICAgICAgICAgICAgICBpZiAoc3MpIHsKKyAgICAgICAg ICAgICAgICAgICAgY2tzdHJuY3B5KGVkaXRvcixzcyxDS01BWFBBVEgpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsIlxcdihlZGl0b3Ip IixlZGl0b3IsMCk7CisgICAgICAgICAgICByZXR1cm4oZWRpdG9yWzBdID8gKGNoYXIgKillZGl0 b3IgOiAiIik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRpZiAvKiBOT0ZS SUxMUyAqLworCisgICAgICBjYXNlIFZOX0VET1BUOgorI2lmZGVmIE5PRlJJTExTCisgICAgICAg IHJldHVybigiIik7CisjZWxzZQorI2lmZGVmIE5PUFVTSAorICAgICAgICByZXR1cm4oIiIpOwor I2Vsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZWRpdG9wdHNbXTsKKyAg ICAgICAgICAgIHJldHVybihlZGl0b3B0c1swXSA/IChjaGFyICopZWRpdG9wdHMgOiAiIik7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisg ICAgICBjYXNlIFZOX0VERklMRToKKyNpZmRlZiBOT0ZSSUxMUworICAgICAgICByZXR1cm4oIiIp OworI2Vsc2UKKyNpZmRlZiBOT1BVU0gKKyAgICAgICAgcmV0dXJuKCIiKTsKKyNlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICAgIGV4dGVybiBjaGFyIGVkaXRmaWxlW107CisgICAgICAgICAgICBy ZXR1cm4oZWRpdGZpbGVbMF0gPyAoY2hhciAqKWVkaXRmaWxlIDogIiIpOworICAgICAgICB9Cisj ZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmZGVmIEJST1dT RVIKKyAgICAgIGNhc2UgVk5fQlJPV1NSOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgYnJvd3Nl cltdOworICAgICAgICAgIGlmICghYnJvd3NlclswXSkgeworICAgICAgICAgICAgICBzID0gZ2V0 ZW52KCJCUk9XU0VSIik7CisgICAgICAgICAgICAgIGlmIChzKSBja3N0cm5jcHkoYnJvd3Nlcixz LENLTUFYUEFUSCk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybihicm93c2VyWzBdID8g KGNoYXIgKilicm93c2VyIDogIiIpOworICAgICAgfQorICAgICAgY2FzZSBWTl9CUk9QVDogewor ICAgICAgICAgIGV4dGVybiBjaGFyIGJyb3dzb3B0c1tdOworICAgICAgICAgIHJldHVybihicm93 c29wdHNbMF0gPyAoY2hhciAqKWJyb3dzb3B0cyA6ICIiKTsKKyAgICAgIH0KKyAgICAgIGNhc2Ug Vk5fVVJMOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgYnJvd3N1cmxbXTsKKyAgICAgICAgICBy ZXR1cm4oYnJvd3N1cmxbMF0gPyAoY2hhciAqKWJyb3dzdXJsIDogIiIpOworICAgICAgfQorI2Vu ZGlmIC8qIEJST1dTRVIgKi8KKyAgICAgIGNhc2UgVk5fSEVSQUxEOgorICAgICAgICByZXR1cm4o KGNoYXIgKil2ZXJzaW8pOworCisgICAgICBjYXNlIFZOX1RFU1Q6IHsgICAgICAgICAgICAgICAg ICAgLyogdGVzdCAqLworICAgICAgICAgIGV4dGVybiBjaGFyICogY2tfc190ZXN0LCAqIGNrX3Nf dHZlcjsKKyAgICAgICAgICBpZiAoIWNrX3NfdGVzdCkgY2tfc190ZXN0ID0gIiI7CisgICAgICAg ICAgaWYgKCFja19zX3R2ZXIpIGNrX3NfdHZlciA9ICIiOworICAgICAgICAgIGlmICgqY2tfc190 ZXN0KSB7CisgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixja19zX3Rlc3QsVlZCVUZMKTsK KyAgICAgICAgICAgICAgaWYgKCpja19zX3R2ZXIpIHsKKyAgICAgICAgICAgICAgICAgIGNrc3Ry bmNhdCh2dmJ1ZiwiLiIsVlZCVUZMKTsKKyAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh2dmJ1 Zixja19zX3R2ZXIsVlZCVUZMKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZQor ICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLCIwIixWVkJVRkwpOworICAgICAgICAgIHJldHVy bigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2Ug Vk5fWEZTVEFUOiAgICAgICAgICAgICAgICAgICAvKiB4ZmVyc3RhdHVzICovCisgICAgICAgIHgg PSB4ZmVyc3RhdDsgICAgICAgICAgICAgICAgICAgLyogTGlrZSBzdWNjZXNzICovCisgICAgICAg IGlmICh4ID4gLTEpIHggPSAoeCA9PSAwKSA/IDEgOiAwOyAvKiBFeHRlcm5hbCB2YWx1ZSBpcyBy ZXZlcnNlZCAqLworICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIseCk7ICAgICAgICAgIC8qIFNB RkUgKi8KKyAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX1hG TVNHOiAgICAgICAgICAgICAgICAgICAgLyogeGZlcm1zZyAqLworICAgICAgICByZXR1cm4oKGNo YXIgKillcGt0bXNnKTsKKworI2lmbmRlZiBOT01TRU5ECisgICAgICBjYXNlIFZOX1NOREw6IHsg ICAgICAgICAgICAgICAgICAgLyogc2VuZGxpc3QgKi8KKyAgICAgICAgICBleHRlcm4gaW50IGZp bGVzaW5saXN0OworICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIixmaWxlc2lubGlzdCk7IC8q IFNBRkUgKi8KKyAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgICB9CisjZW5k aWYgLyogTk9NU0VORCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tfVFJJR0dF UgorICAgICAgY2FzZSBWTl9UUklHOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiB0cmlnZ2Vy dmFsOworICAgICAgICAgIHJldHVybih0cmlnZ2VydmFsID8gdHJpZ2dlcnZhbCA6ICIiKTsKKyAg ICAgIH0KKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisjaWZkZWYgT1MyTU9VU0UKKyNpZmRlZiBP UzIKKyAgICAgIGNhc2UgVk5fTU9VX1g6IHsKKyAgICAgICAgICBleHRlcm4gaW50IE1vdXNlQ3Vy WDsKKyAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsTW91c2VDdXJYKTsgLyogU0FGRSAqLwor ICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5f TU9VX1k6IHsKKyAgICAgICAgICBleHRlcm4gaW50IE1vdXNlQ3VyWTsKKyAgICAgICAgICBzcHJp bnRmKHZ2YnVmLCIlZCIsTW91c2VDdXJZKTsgLyogU0FGRSAqLworICAgICAgICAgIHJldHVybigo Y2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBPUzJN T1VTRSAqLworICAgICAgY2FzZSBWTl9QUklOVDogeworICAgICAgICAgIGV4dGVybiBpbnQgcHJp bnRwaXBlOworICAgICAgICAgIGV4dGVybiBjaGFyICogcHJpbnRlcm5hbWU7CisjaWZkZWYgUFJJ TlRTV0kKKyAgICAgICAgICBleHRlcm4gaW50IG5vcHJpbnRlcjsKKyAgICAgICAgICBpZiAobm9w cmludGVyKSByZXR1cm4oIiIpOworI2VuZGlmIC8qIFBSSU5UU1dJICovCisgICAgICAgICAgY2tt YWttc2codnZidWYsVlZCVUZMLAorICAgICAgICAgICAgICAgICAgIHByaW50cGlwZSA/ICJ8IiA6 ICIiLAorICAgICAgICAgICAgICAgICAgIHByaW50ZXJuYW1lID8gcHJpbnRlcm5hbWUgOgorI2lm ZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICJQUk4iLAorI2Vsc2UKKyAgICAgICAgICAgICAg ICAgICAiKGRlZmF1bHQpIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICBO VUxMLAorICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyAgICB9IC8qIEJyZWFrIHVw IGxvbmcgc3dpdGNoIHN0YXRlbWVudHMuLi4gKi8KKworICAgIHN3aXRjaCh5KSB7CisgICAgICBj YXNlIFZOX0VTQzogICAgICAgICAgICAgICAgICAgICAgLyogRXNjYXBlIGNoYXJhY3RlciAqLwor ICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsZXNjYXBlKTsgICAgIC8qIFNBRkUgKi8KKyAgICAg ICAgcmV0dXJuKChjaGFyICopdnZidWYpOworCisgICAgICBjYXNlIFZOX0lOVElNRToKKyAgICAg ICAgc3ByaW50Zih2dmJ1ZiwiJWxkIixpbmV0aW1lKTsgICAvKiBTQUZFICovCisgICAgICAgIHJl dHVybigoY2hhciAqKXZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9JTlRNTzoKKyAgICAgICAgc3By aW50Zih2dmJ1ZiwiJWQiLGlud2FpdCk7ICAgICAvKiBTQUZFICovCisgICAgICAgIHJldHVybigo Y2hhciAqKXZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9TRUNVUkU6CisgICAgICAgIGlmICgwCisj aWZkZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgfHwgSVNfU1NIKCkKKyNlbmRpZiAvKiBTU0hC VUlMVElOICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgfHwgY2tfdG5fZW5j cnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxhZyB8fCBzc2xf YWN0aXZlX2ZsYWcKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAgICAgICAgICkKKyAgICAgICAg ICByZXR1cm4oIjEiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybigiMCIpOworCisg ICAgICBjYXNlIFZOX0FVVEhOOgorI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgIHsK KyAgICAgICAgICAgIGV4dGVybiBjaGFyIHN6VXNlck5hbWVBdXRoZW50aWNhdGVkW107CisgICAg ICAgICAgICByZXR1cm4oKGNoYXIgKilzelVzZXJOYW1lQXV0aGVudGljYXRlZCk7CisgICAgICAg IH0KKyNlbHNlIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisgICAgICAgIHJldHVybigoY2hhciAq KSIiKTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisgICAgICBjYXNlIFZOX0FV VEhTOgorI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgICAgIHN3aXRjaCAoY2tfdG5fYXV0 aF92YWxpZCgpKSB7CisgICAgICAgICAgY2FzZSBBVVRIX1VOS05PV046CisgICAgICAgICAgICBy ZXR1cm4oKGNoYXIgKikidW5rbm93biIpOworICAgICAgICAgIGNhc2UgQVVUSF9PVEhFUjoKKyAg ICAgICAgICAgIHJldHVybigoY2hhciAqKSJvdGhlciIpOworICAgICAgICAgIGNhc2UgQVVUSF9V U0VSOgorICAgICAgICAgICAgcmV0dXJuKChjaGFyICopInVzZXIiKTsKKyAgICAgICAgICBjYXNl IEFVVEhfVkFMSUQ6CisgICAgICAgICAgICByZXR1cm4oKGNoYXIgKikidmFsaWQiKTsKKyAgICAg ICAgICBjYXNlIEFVVEhfUkVKRUNUOgorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy ZXR1cm4oKGNoYXIgKikicmVqZWN0ZWQiKTsKKyAgICAgICAgfQorI2Vsc2UgLyogQ0tfQVVUSEVO VElDQVRJT04gKi8KKyAgICAgICAgcmV0dXJuKChjaGFyICopInJlamVjdGVkIik7CisjZW5kaWYg LyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKworICAgICAgY2FzZSBWTl9BVVRIVDoKKyNpZmRlZiBD S19BVVRIRU5USUNBVElPTgorI2lmZGVmIENLX1NTTAorICAgICAgICBpZiAoKHNzbF9hY3RpdmVf ZmxhZyB8fCB0bHNfYWN0aXZlX2ZsYWcpICYmCisgICAgICAgICAgICBja190bl9hdXRoX3ZhbGlk KCkgPT0gQVVUSF9WQUxJRCAmJgorICAgICAgICAgICAgKHNzdGVsbmV0ID8gKCFURUxPUFRfVShU RUxPUFRfQVVUSEVOVElDQVRJT04pKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAoIVRFTE9Q VF9NRShURUxPUFRfQVVUSEVOVElDQVRJT04pKSkgfHwKKyAgICAgICAgICAgICBja190bl9hdXRo ZW50aWNhdGVkKCkgPT0gQVVUSFRZUEVfTlVMTCB8fAorICAgICAgICAgICAgIGNrX3RuX2F1dGhl bnRpY2F0ZWQoKSA9PSBBVVRIVFlQRV9BVVRPKQorICAgICAgICAgIHJldHVybigiWF81MDlfQ0VS VElGSUNBVEUiKTsKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIENLX1NTTCAqLworICAgICAgICAg IHJldHVybihBVVRIVFlQRV9OQU1FKGNrX3RuX2F1dGhlbnRpY2F0ZWQoKSkpOworI2Vsc2UgLyog Q0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICAgICAgcmV0dXJuKChjaGFyICopIk5VTEwiKTsKKyNl bmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAg IGNhc2UgVk5fSzRQUk46IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjRfZF9wcmluY2lw YWw7CisgICAgICAgICAgaWYgKGtyYjRfZF9wcmluY2lwYWwpCisgICAgICAgICAgICBja3N0cm5j cHkodnZidWYsa3JiNF9kX3ByaW5jaXBhbCxWVkJVRkwrMSk7CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgKnZ2YnVmID0gTlVMOworICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsK KyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSzVQUk46IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAq IGtyYjVfZF9wcmluY2lwYWw7CisgICAgICAgICAgaWYgKGtyYjVfZF9wcmluY2lwYWwpCisgICAg ICAgICAgICBja3N0cm5jcHkodnZidWYsa3JiNV9kX3ByaW5jaXBhbCxWVkJVRkwrMSk7CisgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgKnZ2YnVmID0gTlVMOworICAgICAgICAgIHJldHVybigo Y2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSzRSTE06IHsKKyAgICAgICAg ICBleHRlcm4gY2hhciAqIGtyYjRfZF9yZWFsbTsKKyAgICAgICAgICBpZiAoa3JiNF9kX3JlYWxt KSB7CisgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixrcmI0X2RfcmVhbG0sVlZCVUZMKzEp OworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIGNoYXIgKiBzID0gY2tfa3JiNF9n ZXRyZWFsbSgpOworICAgICAgICAgICAgICBja3N0cm5jcHkodnZidWYscyA/IHMgOiAiIixWVkJV RkwrMSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAg ICAgIH0KKyAgICAgIGNhc2UgVk5fSzRTUlY6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIGty YjRfZF9zcnY7CisgICAgICAgICAgaWYgKGtyYjRfZF9zcnYpCisgICAgICAgICAgICBja3N0cm5j cHkodnZidWYsa3JiNF9kX3NydixWVkJVRkwrMSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgY2tzdHJuY3B5KHZ2YnVmLCJyY21kIixWVkJVRkwpOworICAgICAgICAgIHJldHVybigoY2hh ciAqKXZ2YnVmKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSzVSTE06IHsKKyAgICAgICAgICBl eHRlcm4gY2hhciAqIGtyYjVfZF9yZWFsbTsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVf ZF9jYzsKKyAgICAgICAgICBpZiAoa3JiNV9kX3JlYWxtKSB7CisgICAgICAgICAgICAgIGNrc3Ry bmNweSh2dmJ1ZixrcmI1X2RfcmVhbG0sVlZCVUZMKzEpOworICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgIGNoYXIgKiBzID0gY2tfa3JiNV9nZXRyZWFsbShrcmI1X2RfY2MpOworICAg ICAgICAgICAgICBja3N0cm5jcHkodnZidWYscyxWVkJVRkwrMSk7CisgICAgICAgICAgfQorICAg ICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSzVD QzogeworICAgICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9kX2NjOworICAgICAgICAgIGlmIChr cmI1X2RfY2MpCisgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsa3JiNV9kX2NjLFZWQlVGTCsx KTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsY2tfa3JiNV9n ZXRfY2NfbmFtZSgpLFZWQlVGTCsxKTsKKyAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7 CisgICAgICB9CisgICAgICBjYXNlIFZOX0s1U1JWOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIg KiBrcmI1X2Rfc3J2OworICAgICAgICAgIGlmIChrcmI1X2Rfc3J2KQorICAgICAgICAgICAgY2tz dHJuY3B5KHZ2YnVmLGtyYjVfZF9zcnYsVlZCVUZMKzEpOworICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiaG9zdCIsVlZCVUZMKTsKKyAgICAgICAgICByZXR1cm4o KGNoYXIgKil2dmJ1Zik7CisgICAgICB9CisgICAgICBjYXNlIFZOX0s0RU5POiB7CisgICAgICAg IGV4dGVybiBpbnQga3JiNF9lcnJubzsKKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGtyYjRf ZXJybm8pOyAvKiBTQUZFICovCisgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAg IH0KKyAgICAgIGNhc2UgVk5fSzVFTk86IHsKKyAgICAgICAgZXh0ZXJuIGludCBrcmI1X2Vycm5v OworICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsa3JiNV9lcnJubyk7IC8qIFNBRkUgKi8KKyAg ICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorICAgICAgY2FzZSBWTl9LNEVN U0c6IHsKKyAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI0X2Vycm1zZzsKKyAgICAgICAgY2tzdHJu Y3B5KHZ2YnVmLGtyYjRfZXJybXNnP2tyYjRfZXJybXNnOiIiLFZWQlVGTCsxKTsKKyAgICAgICAg cmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorICAgICAgY2FzZSBWTl9LNUVNU0c6IHsK KyAgICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2Vycm1zZzsKKyAgICAgICAgY2tzdHJuY3B5KHZ2 YnVmLGtyYjVfZXJybXNnLFZWQlVGTCsxKTsKKyAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYp OworICAgICAgfQorI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjaWZkZWYgQ0tfU1NMCisgICAg ICBjYXNlIFZOX1g1MDlfUzoKKyAgICAgICAgaWYgKHNzbF9hY3RpdmVfZmxhZykKKyAgICAgICAg ICBja3N0cm5jcHkodnZidWYsc3NsX2dldF9zdWJqZWN0X25hbWUoc3NsX2NvbiksVlZCVUZMKzEp OworICAgICAgICBlbHNlIGlmICh0bHNfYWN0aXZlX2ZsYWcpCisgICAgICAgICAgY2tzdHJuY3B5 KHZ2YnVmLHNzbF9nZXRfc3ViamVjdF9uYW1lKHRsc19jb24pLFZWQlVGTCsxKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZiwiIixWVkJVRkwrMSk7CisgICAgICAgIHJl dHVybigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIGNhc2UgVk5fWDUwOV9JOgorICAgICAgICBpZiAo c3NsX2FjdGl2ZV9mbGFnKQorICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixzc2xfZ2V0X2lzc3Vl cl9uYW1lKHNzbF9jb24pLFZWQlVGTCsxKTsKKyAgICAgICAgZWxzZSBpZiAodGxzX2FjdGl2ZV9m bGFnKQorICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixzc2xfZ2V0X2lzc3Vlcl9uYW1lKHRsc19j b24pLFZWQlVGTCsxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNrc3RybmNweSh2dmJ1Ziwi IixWVkJVRkwrMSk7CisgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyNlbmRpZiAvKiBD S19TU0wgKi8KKworICAgICAgY2FzZSBWTl9PU05BTToKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tf TE9HSU4KKyAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCisgICAgICAgICAgcmV0dXJu KCIiKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBD S19VVFNOQU1FCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4dGVybiBjaGFyIHVubV9uYW1bXTsK KyAgICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV9uYW0pOworICAgICAgICB9CisjZWxzZQor ICAgICAgICBmb3IgKHggPSB5ID0gMDsgeCA8IFZWQlVGTDsgeCsrKSB7CisgICAgICAgICAgICBp ZiAoY2t4c3lzW3hdID09IFNQICYmIGN4ID09IDApIGNvbnRpbnVlOworICAgICAgICAgICAgdnZi dWZbeSsrXSA9IChjaGFyKSAoKGNreHN5c1t4XSA9PSBTUCkgPyAnXycgOiBja3hzeXNbeF0pOwor ICAgICAgICB9CisgICAgICAgIHZ2YnVmW3ldID0gTlVMOworICAgICAgICByZXR1cm4odnZidWYp OworI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KKworICAgICAgY2FzZSBWTl9PU1ZFUjogeworI2lm ZGVmIENLX1VUU05BTUUKKyAgICAgICAgICBleHRlcm4gY2hhciB1bm1fdmVyW107CisjaWZkZWYg SUtTRAorI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3Qp CisgICAgICAgICAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYg LyogSUtTRCAqLworICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV92ZXIpOworI2Vsc2UKKyAg ICAgICAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KKyAgICAgIH0KKwor ICAgICAgY2FzZSBWTl9PU1JFTDogeworI2lmZGVmIENLX1VUU05BTUUKKyAgICAgICAgICBleHRl cm4gY2hhciB1bm1fcmVsW107CisjaWZkZWYgSUtTRAorI2lmZGVmIENLX0xPR0lOCisgICAgICAg ICAgaWYgKGluc2VydmVyICYmIGlzZ3Vlc3QpCisgICAgICAgICAgICByZXR1cm4oIiIpOworI2Vu ZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgIHJldHVybigo Y2hhciAqKXVubV9yZWwpOworI2Vsc2UKKyAgICAgICAgICByZXR1cm4oIiIpOworI2VuZGlmIC8q IENLX1VUU05BTUUgKi8KKyAgICAgIH0KKyAgICB9IC8qIEJyZWFrIHVwIGxvbmcgc3dpdGNoIHN0 YXRlbWVudHMuLi4gKi8KKworICAgIHN3aXRjaCh5KSB7CisgICAgICBjYXNlIFZOX05BTUU6IHsK KyAgICAgICAgICBleHRlcm4gY2hhciAqIG15bmFtZTsKKyAgICAgICAgICByZXR1cm4obXluYW1l KTsKKyAgICAgIH0KKworICAgICAgY2FzZSBWTl9NT0RMOiB7CisjaWZkZWYgQ0tfVVRTTkFNRQor ICAgICAgICAgIGV4dGVybiBjaGFyIHVubV9tb2RbXSwgdW5tX21jaFtdOworICAgICAgICAgIGlu dCB5ID0gVlZCVUZMIC0gMTsKKyAgICAgICAgICBjaGFyICogcyA9IHVubV9tb2Q7CisjZW5kaWYg LyogQ0tfVVRTTkFNRSAqLworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgICAgICAg IGlmIChpbnNlcnZlciAmJiBpc2d1ZXN0KQorICAgICAgICAgICAgcmV0dXJuKCIiKTsKKyNlbmRp ZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworI2lmZGVmIENPTU1FTlQgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHdhcyBIUFVYICovCisgICAgICAgICAgaWYgKCF1bm1f bW9kWzBdICYmICFub3B1c2gpCisgICAgICAgICAgICB6enN0cmluZygiXFxmY29tbWFuZChtb2Rl bCkiLCZzLCZ5KTsKKy8qCisgICBBbm90aGVyIHBvc3NpYmlsaXR5IHdvdWxkIGJlOgorICAgICAi XFxmY29tbWFuZChrc2ggLWMgJ3doZW5jZSBtb2RlbCAxPiYtICYmIG1vZGVsIHx8IHVuYW1lIC1t JykiCisgICBCdXQgdGhhdCB3b3VsZCBkZXBlbmQgb24gaGF2aW5nIGtzaC4KKyovCisjZWxzZQor I2lmZGVmIE9TRjMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpZ2l0YWwgVU5JWCAz LjIgYW5kIGhpZ2hlci4uLiAqLworLyogTm90ZTogVWx0cml4IGhhcyAvZXRjL3NpemVyLCBidXQg aXQgaXMgbm90IHB1YmxpY2x5IGV4ZWN1dGFibGUuICovCisvKiBzaXplciAtYyBvdXRwdXRzICdj cHU6PHRhYj48dGFiPiJERUN4eHh4IicgKi8KKyAgICAgICAgICBpZiAoIXVubV9tb2RbMF0pIHsK KyAgICAgICAgICAgICAgY2hhciAqIHA7CisgICAgICAgICAgICAgIGludCBmbGFnID0gMDsKKyAg ICAgICAgICAgICAgenpzdHJpbmcoIlxcZmNvbW1hbmQoL3Vzci9zYmluL3NpemVyIC1jKSIsJnMs JnkpOworICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJEVSBtb2RlbCIsdW5tX21vZCwwKTsKKyAg ICAgICAgICAgICAgcyA9IHVubV9tb2Q7CisgICAgICAgICAgICAgIHAgPSB1bm1fbW9kOworICAg ICAgICAgICAgICB3aGlsZSAoKnApIHsgICAgICAgICAgICAgIC8qIEV4dHJhY3QgdGhlIHBhcnQg aW4gcXVvdGVzICovCisgICAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJyInKSB7CisgICAgICAg ICAgICAgICAgICAgICAgaWYgKGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBw Kys7CisgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBpZiAoZmxhZykKKyAgICAgICAgICAgICAgICAgICAgKnMrKyA9 ICpwOworICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICpzID0gTlVMOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBPU0YzMiAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworI2lmZGVmIENLX1VUU05BTUUKKyAgICAgICAgICBpZiAodW5tX21vZFsw XSkKKyAgICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV9tb2QpOworICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgIHJldHVybigoY2hhciAqKXVubV9tY2gpOworI2Vsc2UKKyAgICAgICAgICBy ZXR1cm4oIiIpOworI2VuZGlmIC8qIENLX1VUU05BTUUgKi8KKyAgICAgIH0KKworI2lmZGVmIElC TVgyNQorICAgICAgLyogWC4yNSB2YXJpYWJsZXMgKGxvY2FsIGFuZCByZW1vdGUgYWRkcmVzcykg Ki8KKyAgICAgIGNhc2UgVk5fWDI1TEE6CisgICAgICAgIGlmICghbG9jYWxfbnVhWzBdICYmICF4 MjVsb2NhbF9udWEobG9jYWxfbnVhKSkKKyAgICAgICAgICAqdnZidWYgPSBOVUxMOworICAgICAg ICBlbHNlCisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGxvY2FsX251YSxWVkJVRkwrMSk7Cisg ICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9YMjVSQToKKyAg ICAgICAgaWYgKCFyZW1vdGVfbnVhWzBdKQorICAgICAgICAgICp2dmJ1ZiA9IE5VTEw7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICBja3N0cm5jcHkodnZidWYscmVtb3RlX251YSxWVkJVRkwrMSk7 CisgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKwor I2lmbmRlZiBOT0RJQUwKKyAgICAgIGNhc2UgVk5fUERTRlg6IHsKKyAgICAgICAgICBleHRlcm4g Y2hhciBwZHNmeFtdOworICAgICAgICAgIHJldHVybigoY2hhciAqKXBkc2Z4KTsKKyAgICAgIH0K KyAgICAgIGNhc2UgVk5fRFRZUEU6IHsKKyAgICAgICAgICBleHRlcm4gaW50IGRpYWx0eXBlOwor ICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIixkaWFsdHlwZSk7IC8qIFNBRkUgKi8KKyAgICAg ICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgICB9CisjZW5kaWYgLyogTk9ESUFMICov CisKKyNpZmRlZiBVTklYCisgICAgICBjYXNlIFZOX0xDS1BJRDogeworICAgICAgICAgIGV4dGVy biBjaGFyIGxvY2twaWRbXTsKKyAgICAgICAgICByZXR1cm4oKGNoYXIgKilsb2NrcGlkKTsKKyAg ICAgIH0KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFZO X0JMSzoKKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGJjdHIpOyAgICAgICAvKiBTQUZFICov CisgICAgICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9URlRJTToK KyAgICAgICAgc3ByaW50Zih2dmJ1ZiwgICAgICAgICAgICAgICAgICAvKiBTQUZFICovCisjaWZk ZWYgR0ZUSU1FUgorICAgICAgICAgICAgICAgICIlbGQiLCAobG9uZykoZnB0c2VjcyArIDAuNSkK KyNlbHNlCisgICAgICAgICAgICAgICAgIiVkIiwgdHNlY3MKKyNlbmRpZiAvKiBHRlRJTUVSICov CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworI2Vu ZGlmIC8qIE5PWEZFUiAqLworCisgICAgICBjYXNlIFZOX0hXUEFSOgorICAgICAgY2FzZSBWTl9T RVJJQUw6IHsKKyAgICAgICAgICBpbnQgc2I7CisgICAgICAgICAgY2hhciBjLCAqIHNzOworICAg ICAgICAgIGV4dGVybiBpbnQgc3RvcGJpdHM7CisgICAgICAgICAgdnZidWZbMF0gPSBOVUw7Cisg ICAgICAgICAgaWYgKGh3cGFyaXR5ICYmIGxvY2FsICYmICFuZXR3b3JrKQorICAgICAgICAgICAg c3MgPSBwYXJuYW0oKGNoYXIpaHdwYXJpdHkpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg IHNzID0gcGFybmFtKChjaGFyKXBhcml0eSk7CisgICAgICAgICAgaWYgKGN4ID09IFZOX0hXUEFS KSB7CisgICAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixzcyxWVkJVRkwpOworICAgICAgICAg ICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgICAgICAgfQorICAgICAgICAgIGMgPSBz c1swXTsKKyAgICAgICAgICBpZiAoaXNsb3dlcihjKSkgYyA9IHRvdXBwZXIoYyk7CisgICAgICAg ICAgc2IgPSBzdG9wYml0czsKKyAgICAgICAgICBpZiAoc2IgPCAxKQorICAgICAgICAgICAgc2Ig PSAoc3BlZWQgPiAwICYmIHNwZWVkIDw9IDExMEwpID8gMiA6IDE7CisgICAgICAgICAgaWYgKGh3 cGFyaXR5KQorICAgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiIDglYyVkIixjLHNiKTsgLyogU0FG RSAqLworICAgICAgICAgIGVsc2UgaWYgKHBhcml0eSkKKyAgICAgICAgICAgIHNwcmludGYodnZi dWYsIiA3JWMlZCIsYyxzYik7IC8qIFNBRkUgKi8KKyAgICAgICAgICBlbHNlCisgICAgICAgICAg ICBzcHJpbnRmKHZ2YnVmLCIgOE4lZCIsc2IpOyAgLyogU0FGRSAqLworICAgICAgICAgIHJldHVy bigoY2hhciAqKXZ2YnVmKTsKKyAgICAgIH0KKworI2lmZGVmIFVOSVgKKyAgICAgIGNhc2UgVk5f TENLRElSOiB7CisjaWZuZGVmIE5PVVVDUAorICAgICAgICAgIGV4dGVybiBjaGFyICogdXVjcGxv Y2tkaXI7CisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLHV1Y3Bsb2NrZGlyLFZWQlVGTCk7Cisg ICAgICAgICAgeCA9IHN0cmxlbih2dmJ1Zik7CisgICAgICAgICAgaWYgKHggPiAwKSB7CisgICAg ICAgICAgICAgIGlmICh2dmJ1Zlt4LTFdICE9ICcvJykgeworICAgICAgICAgICAgICAgICAgdnZi dWZbeF0gPSAnLyc7CisgICAgICAgICAgICAgICAgICB2dmJ1Zlt4KzFdID0gTlVMOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICB2dmJ1ZlswXSA9IE5VTDsK KyNlbmRpZiAvKiBOT1VVQ1AgKi8KKyAgICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7Cisg ICAgICB9CisjZW5kaWYgLyogVU5JWCAqLworICAgIH0gLyogQnJlYWsgdXAgbG9uZyBzd2l0Y2gg c3RhdGVtZW50cy4uLiAqLworCisgICAgc3dpdGNoKHkpIHsKKyNpZm5kZWYgTk9ESUFMCisgICAg ICBjYXNlIFZOX0RNX0xQOgorICAgICAgY2FzZSBWTl9ETV9TUDoKKyAgICAgIGNhc2UgVk5fRE1f UEQ6CisgICAgICBjYXNlIFZOX0RNX1REOgorICAgICAgY2FzZSBWTl9ETV9XQToKKyAgICAgIGNh c2UgVk5fRE1fV0Q6CisgICAgICBjYXNlIFZOX0RNX0hGOgorICAgICAgY2FzZSBWTl9ETV9XQjoK KyAgICAgIGNhc2UgVk5fRE1fUkM6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIGdldGRtKCk7 CisgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGdldGRtKHkpLFZWQlVGTCk7CisgICAgICAgICAg cmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorI2VuZGlmIC8qIE5PRElBTCAqLworCisg ICAgICBjYXNlIFZOX1RZX0xOOgorICAgICAgY2FzZSBWTl9UWV9MQzogeworICAgICAgICAgIGV4 dGVybiBpbnQgdHlwX2xpbmVzOworICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIix0eXBfbGlu ZXMpOyAvKiBTQUZFICovCisgICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAg fQorICAgICAgY2FzZSBWTl9UWV9MTTogeworICAgICAgICAgIGV4dGVybiBpbnQgdHlwX210Y2hz OworICAgICAgICAgIHNwcmludGYodnZidWYsIiVkIix0eXBfbXRjaHMpOyAvKiBTQUZFICovCisg ICAgICAgICAgcmV0dXJuKChjaGFyICopdnZidWYpOworICAgICAgfQorICAgICAgY2FzZSBWTl9N QUNMVkw6CisgICAgICAgIHNwcmludGYodnZidWYsIiVkIixtYWNsdmwpOyAgICAgLyogU0FGRSAq LworICAgICAgICByZXR1cm4oKGNoYXIgKil2dmJ1Zik7CisgICAgfSAvKiBCcmVhayB1cCBsb25n IHN3aXRjaCBzdGF0ZW1lbnRzLi4uICovCisKKyAgICBzd2l0Y2goeSkgeworI2lmbmRlZiBOT0xB U1RGSUxFCisgICAgICBjYXNlIFZOX0xBU1RGSUw6IHsKKwkgIGV4dGVybiBjaGFyICogbGFzdGZp bGU7CisJICByZXR1cm4obGFzdGZpbGUgPyBsYXN0ZmlsZSA6ICIiKTsKKyAgICAgIH0KKyNlbmRp ZgkvKiBOT0xBU1RGSUxFICovCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBWTl9YRl9CQzoK KyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGNydW5jaGVkKTsgICAvKiBTQUZFICovCisgICAg ICAgIHJldHVybigoY2hhciAqKXZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9YRl9UTToKKyAgICAg ICAgc3ByaW50Zih2dmJ1ZiwiJWQiLHRpbWVvdXRzKTsgICAvKiBTQUZFICovCisgICAgICAgIHJl dHVybigoY2hhciAqKXZ2YnVmKTsKKworICAgICAgY2FzZSBWTl9YRl9SWDoKKyAgICAgICAgc3By aW50Zih2dmJ1ZiwiJWQiLHJldHJhbnMpOyAgICAvKiBTQUZFICovCisgICAgICAgIHJldHVybigo Y2hhciAqKXZ2YnVmKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgICAgY2FzZSBWTl9NU19D RDogICAgICAgICAgICAgICAgICAgIC8qIE1vZGVtIHNpZ25hbHMgKi8KKyAgICAgIGNhc2UgVk5f TVNfQ1RTOgorICAgICAgY2FzZSBWTl9NU19EU1I6CisgICAgICBjYXNlIFZOX01TX0RUUjoKKyAg ICAgIGNhc2UgVk5fTVNfUkk6CisgICAgICBjYXNlIFZOX01TX1JUUzogeworICAgICAgICAgIGlu dCB4LCB6ID0gLTE7CisgICAgICAgICAgeCA9IHR0Z21kbSgpOyAgICAgICAgICAgICAgICAgLyog VHJ5IHRvIGdldCB0aGVtICovCisgICAgICAgICAgaWYgKHggPiAtMSkgeworICAgICAgICAgICAg ICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZOX01TX0NEOiAgeiA9ICh4ICYg Qk1fRENEKSA/IDEgOiAwOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZOX01TX0RTUjog eiA9ICh4ICYgQk1fRFNSKSA/IDEgOiAwOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZO X01TX0NUUzogeiA9ICh4ICYgQk1fQ1RTKSA/IDEgOiAwOyBicmVhazsKKyNpZmRlZiBNQUMKKyAg ICAgICAgICAgICAgICBjYXNlIFZOX01TX0RUUjogeiA9ICh4ICYgQk1fRFRSKSA/IDEgOiAwOyBi cmVhazsKKyNlbHNlCisjaWZuZGVmIFNUUkFUVVMKKyAgICAgICAgICAgICAgICBjYXNlIFZOX01T X1JJOiAgeiA9ICh4ICYgQk1fUk5HKSA/IDEgOiAwOyBicmVhazsKKyNpZm5kZWYgTlQKKyAgICAg ICAgICAgICAgICBjYXNlIFZOX01TX0RUUjogeiA9ICh4ICYgQk1fRFRSKSA/IDEgOiAwOyBicmVh azsKKyAgICAgICAgICAgICAgICBjYXNlIFZOX01TX1JUUzogeiA9ICh4ICYgQk1fUlRTKSA/IDEg OiAwOyBicmVhazsKKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRp ZiAvKiBNQUMgKi8KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBzcHJp bnRmKHZ2YnVmLCIlZCIseik7ICAgICAgICAvKiBTQUZFICovCisgICAgICAgICAgcmV0dXJuKChj aGFyICopdnZidWYpOworICAgICAgfQorICAgICAgY2FzZSBWTl9NQVRDSDogICAgICAgICAgICAg ICAgICAgIC8qIElOUFVUIE1BVENIICovCisgICAgICAgIHJldHVybihpbnBtYXRjaCA/IGlucG1h dGNoIDogIiIpOworCisjaWZkZWYgQ0tGTE9BVAorICAgICAgY2FzZSBWTl9JU0NBTEU6CQkJLyog SU5QVVQgU0NBTEUtRkFDVE9SICovCisgICAgICAgIHJldHVybihpbnBzY2FsZSA/IGlucHNjYWxl IDogIjEuMCIpOworI2VuZGlmCS8qIENLRkxPQVQgKi8KKworICAgICAgY2FzZSBWTl9TTE1TRzog eyAgICAgICAgICAgICAgICAgIC8qIFNFVCBMSU5FIC8gSE9TVCBtZXNzYWdlICovCisgICAgICAg ICAgZXh0ZXJuIGNoYXIgKiBzbG1zZzsKKyAgICAgICAgICB2dmJ1ZlswXSA9IE5VTDsKKyAgICAg ICAgICBpZiAoc2xtc2cpCisgICAgICAgICAgICBja3N0cm5jcHkodnZidWYsc2xtc2csVlZCVUZM KTsKKyAgICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICB9CisKKyAgICAgIGNhc2UgVk5fVFhU RElSOiAgICAgICAgICAgICAgICAgICAvKiBURVhURElSICovCisgICAgICAgIHJldHVybihrX2lu Zm9fZGlyID8ga19pbmZvX2RpciA6ICIiKTsKKworI2lmZGVmIEZORkxPQVQKKyAgICAgIGNhc2Ug Vk5fTUFfUEk6CisgICAgICAgIHJldHVybihtYXRoX3BpKTsKKworICAgICAgY2FzZSBWTl9NQV9F OgorICAgICAgICByZXR1cm4obWF0aF9lKTsKKworICAgICAgY2FzZSBWTl9NQV9QUjoKKyAgICAg ICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGZwX2RpZ2l0cyk7ICAvKiBTQUZFICovCisgICAgICAgIHJl dHVybih2dmJ1Zik7CisjZW5kaWYgLyogRk5GTE9BVCAqLworCisgICAgICBjYXNlIFZOX0NNREJM OgorICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsQ01EQkwpOyAgICAgIC8qIFNBRkUgKi8KKyAg ICAgICAgcmV0dXJuKHZ2YnVmKTsKKworI2lmZGVmIENLQ0hBTk5FTElPCisgICAgICBjYXNlIFZO X0ZFUlI6IHsKKyAgICAgICAgICBleHRlcm4gaW50IHpfZXJyb3I7CisgICAgICAgICAgc3ByaW50 Zih2dmJ1ZiwiJWQiLHpfZXJyb3IpOyAgLyogU0FGRSAqLworICAgICAgICAgIHJldHVybih2dmJ1 Zik7CisgICAgICB9CisgICAgICBjYXNlIFZOX0ZNQVg6IHsKKyAgICAgICAgICBleHRlcm4gaW50 IHpfbWF4Y2hhbjsKKyAgICAgICAgICBzcHJpbnRmKHZ2YnVmLCIlZCIsel9tYXhjaGFuKTsgLyog U0FGRSAqLworICAgICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICB9CisgICAgICBjYXNlIFZO X0ZDT1U6IHsKKyAgICAgICAgICBleHRlcm4gaW50IHpfZmlsY291bnQ7CisgICAgICAgICAgc3By aW50Zih2dmJ1ZiwiJWQiLHpfZmlsY291bnQpOyAvKiBTQUZFICovCisgICAgICAgICAgcmV0dXJu KHZ2YnVmKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCisjaWZuZGVmIE5P RElBTAorICAgICAgY2FzZSBWTl9EUlRSOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBkaWFsY291 bnQ7CisgICAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWQiLGRpYWxjb3VudCk7IC8qIFNBRkUgKi8K KyAgICAgICAgICByZXR1cm4odnZidWYpOworICAgICAgfQorI2VuZGlmIC8qIE5PRElBTCAqLwor CisjaWZuZGVmIE5PTE9HRElBTAorI2lmbmRlZiBOT0xPQ0FMCisgICAgICBjYXNlIFZOX0NYVElN RToKKyAgICAgICAgc3ByaW50Zih2dmJ1ZiwiJWxkIixkb2xvZ3Nob3coMCkpOyAvKiBTQUZFICov CisgICAgICAgIHJldHVybih2dmJ1Zik7CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8q IE5PTE9HRElBTCAqLworCisgICAgICBjYXNlIFZOX0JZVEU6CisgICAgICAgIHNwcmludGYodnZi dWYsIiVkIixieXRlb3JkZXIpOyAgLyogU0FGRSAqLworICAgICAgICByZXR1cm4odnZidWYpOwor CisgICAgICBjYXNlIFZOX0tCQ0hBUjoKKyAgICAgICAgdnZidWZbMF0gPSBOVUw7CisgICAgICAg IHZ2YnVmWzFdID0gTlVMOworICAgICAgICBpZiAoa2JjaGFyID4gMCkKKyAgICAgICAgICB2dmJ1 ZlswXSA9IChrYmNoYXIgJiAweGZmKTsKKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKworICAgICAg Y2FzZSBWTl9UVFlOQU06IHsKKyNpZmRlZiBIQVZFQ1RUTkFNCisgICAgICAgICAgZXh0ZXJuIGNo YXIgY3R0bmFtW107CisgICAgICAgICAgcmV0dXJuKChjaGFyICopY3R0bmFtKTsKKyNlbHNlCisg ICAgICAgICAgcmV0dXJuKENUVE5BTSk7CisjZW5kaWYgLyogSEFWRUNUVE5BTSAqLworICAgICAg fQorCisgICAgICBjYXNlIFZOX1BST01QVDoKKyAgICAgICAgcmV0dXJuKGNtZ2V0cCgpKTsKKwor ICAgICAgY2FzZSBWTl9CVUlMRDogeworICAgICAgICAgIGV4dGVybiBjaGFyICogYnVpbGRpZDsK KyAgICAgICAgICByZXR1cm4oYnVpbGRpZCk7CisgICAgICB9CisKKyNpZm5kZWYgTk9TRVhQCisg ICAgICBjYXNlIFZOX1NFWFA6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIGxhc3RzZXhwOwor ICAgICAgICAgIHJldHVybihsYXN0c2V4cCA/IGxhc3RzZXhwIDogIiIpOworICAgICAgfQorICAg ICAgY2FzZSBWTl9WU0VYUDogeworICAgICAgICAgIGV4dGVybiBjaGFyICogc2V4cHZhbDsKKyAg ICAgICAgICByZXR1cm4oc2V4cHZhbCA/IHNleHB2YWwgOiAiIik7CisgICAgICB9CisgICAgICBj YXNlIFZOX0xTRVhQOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBzZXhwZGVwOworICAgICAgICAg IGNrc3RybmNweSh2dmJ1Zixja2l0b2Eoc2V4cGRlcCksVlZCVUZMKTsKKyAgICAgICAgICByZXR1 cm4odnZidWYpOworICAgICAgfQorI2VuZGlmIC8qIE5PU0VYUCAqLworCisjaWZkZWYgR0ZUSU1F UgorICAgICAgY2FzZSBWTl9GVElNRTogeworICAgICAgICAgIENLRkxPQVQgZjsKKyAgICAgICAg ICB6dGltZSgmcCk7CisgICAgICAgICAgaWYgKHAgPT0gTlVMTCB8fCAqcCA9PSBOVUwpCisgICAg ICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgeiA9IGF0b2wocCsxMSkgKiAzNjAwTCAr IGF0b2wocCsxNCkgKiA2MEwgKyBhdG9sKHArMTcpOworICAgICAgICAgIGYgPSAoQ0tGTE9BVCl6 ICsgKChDS0ZMT0FUKXp0dXNlYykgLyAxMDAwMDAwLjA7CisgICAgICAgICAgc3ByaW50Zih2dmJ1 ZiwiJWYiLGYpOyAgICAgICAgLyogU0FGRSAqLworICAgICAgICAgIHJldHVybih2dmJ1Zik7Cisg ICAgICB9CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisjaWZuZGVmIE5PSFRUUAorICAgICAgY2Fz ZSBWTl9IVFRQX0M6IHsgICAgICAgICAgICAgICAgIC8qIEhUVFAgQ29kZSAqLworICAgICAgICAg IGV4dGVybiBpbnQgaHR0cF9jb2RlOworICAgICAgICAgIHJldHVybihja2l0b2EoaHR0cF9jb2Rl KSk7CisgICAgICB9CisgICAgICBjYXNlIFZOX0hUVFBfTjogICAgICAgICAgICAgICAgICAgLyog SFRUUCBDb25uZWN0ZWQgKi8KKyAgICAgICAgcmV0dXJuKCBodHRwX2lzY29ubmVjdGVkKCkgPyAi MSIgOiAiMCIpOworICAgICAgY2FzZSBWTl9IVFRQX0g6ICAgICAgICAgICAgICAgICAgIC8qIEhU VFAgSG9zdCAqLworICAgICAgICByZXR1cm4oIChjaGFyICopaHR0cF9ob3N0KCkgKTsKKyAgICAg IGNhc2UgVk5fSFRUUF9NOiB7ICAgICAgICAgICAgICAgICAvKiBIVFRQIE1lc3NhZ2UgKi8KKyAg ICAgICAgICBleHRlcm4gY2hhciBodHRwX3JlcGx5X3N0cltdOworICAgICAgICAgIHJldHVybigo Y2hhciAqKWh0dHBfcmVwbHlfc3RyKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSFRUUF9TOiAg ICAgICAgICAgICAgICAgICAvKiBIVFRQIFNlY3VyaXR5ICovCisgICAgICAgIHJldHVybigoY2hh ciAqKWh0dHBfc2VjdXJpdHkoKSk7CisjZW5kaWYgLyogTk9IVFRQICovCisKKyNpZmRlZiBORVdG VFAKKyAgICAgIGNhc2UgVk5fRlRQX0I6CisgICAgICAgIHJldHVybigoY2hhciAqKWZ0cF9jcGxf bW9kZSgpKTsKKyAgICAgIGNhc2UgVk5fRlRQX0Q6CisgICAgICAgIHJldHVybigoY2hhciAqKWZ0 cF9kcGxfbW9kZSgpKTsKKyAgICAgIGNhc2UgVk5fRlRQX1o6CisgICAgICAgIHJldHVybigoY2hh ciAqKWZ0cF9hdXRodHlwZSgpKTsKKyAgICAgIGNhc2UgVk5fRlRQX0M6IHsKKyAgICAgICAgICBl eHRlcm4gaW50IGZ0cGNvZGU7CisgICAgICAgICAgcmV0dXJuKGNraXRvYShmdHBjb2RlKSk7Cisg ICAgICB9CisgICAgICBjYXNlIFZOX0ZUUF9NOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgZnRw X3JlcGx5X3N0cltdOworICAgICAgICAgIGlmIChpc2RpZ2l0KGZ0cF9yZXBseV9zdHJbMF0pICYm CisgICAgICAgICAgICAgIGlzZGlnaXQoZnRwX3JlcGx5X3N0clsxXSkgJiYKKyAgICAgICAgICAg ICAgaXNkaWdpdChmdHBfcmVwbHlfc3RyWzJdKSAmJgorICAgICAgICAgICAgICBmdHBfcmVwbHlf c3RyWzNdID09ICcgJykKKyAgICAgICAgICAgIHJldHVybigmZnRwX3JlcGx5X3N0cls0XSk7Cisg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuKGZ0cF9yZXBseV9zdHIpOworICAgICAg fQorICAgICAgY2FzZSBWTl9GVFBfUzogeworICAgICAgICAgIGV4dGVybiBjaGFyIGZ0cF9zcnZ0 eXBbXTsKKyAgICAgICAgICByZXR1cm4oKGNoYXIgKilmdHBfc3J2dHlwKTsKKyAgICAgIH0KKyAg ICAgIGNhc2UgVk5fRlRQX0g6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIGZ0cF9ob3N0Owor ICAgICAgICAgIHJldHVybihmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpOworICAgICAgfQorICAg ICAgY2FzZSBWTl9GVFBfWDogeyAgICAgICAgICAgICAgICAgIC8qIEZUUCBDb25uZWN0ZWQgKi8K KyAgICAgICAgICByZXR1cm4oZnRwaXNjb25uZWN0ZWQoKSA/ICIxIiA6ICIwIik7CisgICAgICB9 CisgICAgICBjYXNlIFZOX0ZUUF9MOiB7ICAgICAgICAgICAgICAgICAgLyogRlRQIExvZ2dlZCBp biAqLworICAgICAgICAgIHJldHVybihmdHBpc2xvZ2dlZGluKCkgPyAiMSIgOiAiMCIpOworICAg ICAgfQorICAgICAgY2FzZSBWTl9GVFBfRzogeyAgICAgICAgICAgICAgICAgIC8qIEZUUCBHRVQt UFVULVJFTU9URSAqLworICAgICAgICAgIGV4dGVybiBpbnQgZnRwZ2V0OworICAgICAgICAgIGNo YXIgKiBzID0gIiI7CisgICAgICAgICAgc3dpdGNoIChmdHBnZXQpIHsKKyAgICAgICAgICAgIGNh c2UgMDogcyA9ICJrZXJtaXQiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTogcyA9ICJmdHAi OyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjogcyA9ICJhdXRvIjsgYnJlYWs7CisgICAgICAg ICAgfQorICAgICAgICAgIHJldHVybihzKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBORVdGVFAgKi8K KworI2lmbmRlZiBOT0xPQ0FMCisgICAgICBjYXNlIFZOX0NYX1NUQTogeyAgICAgICAgICAgICAg ICAgLyogQ09OTkVDVCBzdGF0dXMgKi8KKyAgICAgICAgICBleHRlcm4gaW50IGN4X3N0YXR1czsK KyAgICAgICAgICByZXR1cm4oY2tpdG9hKGN4X3N0YXR1cykpOworICAgICAgfQorI2VuZGlmIC8q IE5PTE9DQUwgKi8KKyAgICAgIGNhc2UgVk5fTk9XOiAgICAgICAgICAgICAgICAgICAgICAvKiBU aW1lc3RhbXAgKi8KKyAgICAgICAgcmV0dXJuKGNrY3Z0ZGF0ZShwLDApKTsKKworICAgICAgY2Fz ZSBWTl9IT1VSOiAgICAgICAgICAgICAgICAgICAgIC8qIEhvdXIgb2YgdGhlIGRheSAqLworICAg ICAgICB6dGltZSgmcCk7ICAgICAgICAgICAgICAgICAgICAgIC8qICJUaHUgRmViICA4IDEyOjAw OjAwIDE5OTAiICovCisgICAgICAgIGlmICghcCkgcCA9ICIiOworICAgICAgICBpZiAoISpwKSBy ZXR1cm4ocCk7CisgICAgICAgIHZ2YnVmWzBdID0gcFsxMV07CisgICAgICAgIHZ2YnVmWzFdID0g cFsxMl07CisgICAgICAgIHZ2YnVmWzJdID0gTlVMOworICAgICAgICByZXR1cm4odnZidWYpOyAg ICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gaXQgKi8KKworICAgICAgY2FzZSBWTl9CSVRT OgkJCS8qIEJpdHMgKDE2LCAzMiwgNjQpICovCisJaWYgKHNpemVvZihsb25nKSA+IDQpCisJICBy ZXR1cm4oY2tpdG9hKDgqc2l6ZW9mKGxvbmcpKSk7CisJZWxzZQorCSAgcmV0dXJuKGNraXRvYSg4 KnNpemVvZihpbnQpKSk7CisKKyAgICAgIGNhc2UgVk5fTEFTVEtXVjoJCQkvKiAyMTIgKi8KKwly ZXR1cm4obGFzdGt3dmFsID8gbGFzdGt3dmFsIDogIiIpOworCisgICAgICBjYXNlIFZOX0hPU1RJ UDogewkJCS8qIDIxMiAqLworI2lmZGVmIFRDUFNPQ0tFVAorCSAgZXh0ZXJuIGNoYXIgaG9zdGlw YWRkcltdOworCSAgcmV0dXJuKChjaGFyICopaG9zdGlwYWRkcik7CisjZWxzZQorCSAgcmV0dXJu KCIiKTsKKyNlbmRpZgkvKiBUQ1BTT0NLRVQgKi8KKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fSU5Q TVNHOgorCXN3aXRjaCAoaW5zdGF0dXMpIHsKKwkgIGNhc2UgSU5QX09LOiAgcmV0dXJuKCJTVUND RVNTIik7CisJICBjYXNlIElOUF9UTzogIHJldHVybigiVGltZWQgb3V0Iik7CisJICBjYXNlIElO UF9VSTogIHJldHVybigiS2V5Ym9hcmQgaW50ZXJydXB0Iik7CisJICBjYXNlIElOUF9JRTogIHJl dHVybigiSW50ZXJuYWwgZXJyb3IiKTsKKwkgIGNhc2UgSU5QX0lPOiAgcmV0dXJuKCJJL08gZXJy b3Igb3IgY29ubmVjdGlvbiBsb3N0Iik7CisJICBjYXNlIElOUF9JS1M6IHJldHVybigiSU5QVVQg ZGlzYWJsZWQiKTsKKwkgIGNhc2UgSU5QX0JGOiAgcmV0dXJuKCJCdWZmZXIgZmlsbGVkIGFuZCAv Tk9XUkFQIHNldCIpOworCSAgZGVmYXVsdDogICAgICByZXR1cm4oIlVua25vd24iKTsKKwl9CisK KyAgICAgIGNhc2UgVk5fVkFSRVZBTDoJCQkvKiAyMTIgKi8KKwlyZXR1cm4odmFyZXZhbCA/ICJy ZWN1cnNpdmUiIDogInNpbXBsZSIpOworCisgICAgICBjYXNlIFZOX0xPR19DT046CQkJLyogXHYo Li4uKSBmb3IgbG9nIGZpbGVzICovCisjaWZkZWYgQ0tMT0dESUFMCisgICAgICAgIHJldHVybihk aWFmaWwpOworI2Vsc2UgCisgICAgICAgIHJldHVybigiIik7CisjZW5kaWYKKyAgICAgIGNhc2Ug Vk5fTE9HX1BLVDoKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgIHJldHVybihwa3RmaWwpOworI2Vs c2UKKyAgICAgICAgcmV0dXJuKCIiKTsKKyNlbmRpZgorICAgICAgY2FzZSBWTl9MT0dfU0VTOgor I2lmbmRlZiBOT0xPQ0FMCisgICAgICAgIHJldHVybihzZXNmaWwpOworI2Vsc2UKKyAgICAgICAg cmV0dXJuKCIiKTsKKyNlbmRpZgorICAgICAgY2FzZSBWTl9MT0dfVFJBOgorI2lmZGVmIFRMT0cK KyAgICAgICAgcmV0dXJuKHRyYWZpbCk7CisjZWxzZQorICAgICAgICByZXR1cm4oIiIpOworI2Vu ZGlmCisgICAgICBjYXNlIFZOX0xPR19ERUI6CisjaWZkZWYgREVCVUcKKyAgICAgICAgcmV0dXJu KGRlYmZpbCk7CisjZWxzZQorICAgICAgICByZXR1cm4oIiIpOworI2VuZGlmCisgICAgICBjYXNl IFZOX1BSRVZDTUQ6IHsKKwkgIGV4dGVybiBjaGFyICogcHJldmNtZDsKKwkgIHJldHVybihwcmV2 Y21kID8gIHByZXZjbWQgOiAiIik7CisgICAgICB9CisgICAgfQorCisjaWZuZGVmIE5PRElBTAor ICAgIHN3aXRjaCAoeSkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGxlciBJRCB2YWx1 ZXMgKi8KKyAgICAgIGV4dGVybiBjaGFyCisgICAgICAgICogY2FsbGlkX2RhdGUsICogY2FsbGlk X3RpbWUsICogY2FsbGlkX25hbWUsCisgICAgICAgICogY2FsbGlkX25tYnIsICogY2FsbGlkX21l c2c7CisKKyAgICAgIGNhc2UgVk5fQ0lfREE6CisgICAgICAgIHJldHVybihjYWxsaWRfZGF0ZSA/ IGNhbGxpZF9kYXRlIDogIiIpOworCisgICAgICBjYXNlIFZOX0NJX1RJOgorICAgICAgICByZXR1 cm4oY2FsbGlkX3RpbWUgPyBjYWxsaWRfdGltZSA6ICIiKTsKKworICAgICAgY2FzZSBWTl9DSV9O QToKKyAgICAgICAgcmV0dXJuKGNhbGxpZF9uYW1lID8gY2FsbGlkX25hbWUgOiAiIik7CisKKyAg ICAgIGNhc2UgVk5fQ0lfTlU6CisgICAgICAgIHJldHVybihjYWxsaWRfbm1iciA/IGNhbGxpZF9u bWJyIDogIiIpOworCisgICAgICBjYXNlIFZOX0NJX01FOgorICAgICAgICByZXR1cm4oY2FsbGlk X21lc2cgPyBjYWxsaWRfbWVzZyA6ICIiKTsKKworICAgIH0gLyogRW5kIG9mIHZhcmlhYmxlLW5h bWUgc3dpdGNoZXMgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmZGVmIE5UCisgICAgc3dp dGNoICh5KSB7CisgICAgICBjYXNlIFZOX1BFUlNPTkFMOgorICAgICAgICBwID0gKGNoYXIgKilH ZXRQZXJzb25hbCgpOworICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgR2V0U2hvcnRQYXRo TmFtZShwLHZ2YnVmLFZWQlVGTCk7CisgICAgICAgICAgICByZXR1cm4odnZidWYpOworICAgICAg ICB9CisgICAgICAgIHJldHVybigiIik7CisgICAgICBjYXNlIFZOX0RFU0tUT1A6CisgICAgICAg ICAgcCA9IChjaGFyICopR2V0RGVza3RvcCgpOworICAgICAgICAgIGlmIChwKSB7CisgICAgICAg ICAgICAgIEdldFNob3J0UGF0aE5hbWUocCx2dmJ1ZixWVkJVRkwpOworICAgICAgICAgICAgICBy ZXR1cm4odnZidWYpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oIiIpOworICAgICAg Y2FzZSBWTl9DT01NT046CisgICAgICAgIHAgPSAoY2hhciAqKUdldEFwcERhdGEoMSk7CisgICAg ICAgIGlmIChwKSB7CisgICAgICAgICAgICBja21ha21zZyh2dmJ1ZixWVkJVRkwscCwiS2VybWl0 IDk1LyIsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgIEdldFNob3J0UGF0aE5hbWUodnZidWYsdnZi dWYsVlZCVUZMKTsKKyAgICAgICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuKCIiKTsKKyAgICAgIGNhc2UgVk5fQVBQREFUQToKKyAgICAgICAgcCA9IChjaGFy ICopR2V0QXBwRGF0YSgwKTsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIGNrbWFrbXNn KHZ2YnVmLFZWQlVGTCxwLCJLZXJtaXQgOTUvIixOVUxMLE5VTEwpOworICAgICAgICAgICAgR2V0 U2hvcnRQYXRoTmFtZSh2dmJ1Zix2dmJ1ZixWVkJVRkwpOworICAgICAgICAgICAgcmV0dXJuKHZ2 YnVmKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oIiIpOworICAgIH0KKyNlbmRpZiAvKiBO VCAqLworCisjaWZkZWYgVE5fQ09NUE9SVAorICAgIHN3aXRjaCAoeSkgeworICAgICAgY2FzZSBW Tl9UTkNfU0lHOiB7CisgICAgICAgIHAgPSAoY2hhciAqKSB0bmNfZ2V0X3NpZ25hdHVyZSgpOwor ICAgICAgICBja3N0cm5jcHkodnZidWYscCA/IHAgOiAiIixWVkJVRkwpOworICAgICAgICByZXR1 cm4odnZidWYpOworICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisKKyNp ZmRlZiBLVUkKKyAgICBzd2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgVk5fR1VJX1JVTjogeworCSAg ZXh0ZXJuIEhXTkQgZ2V0SHduZEtVSSgpOworCSAgaWYgKCBJc0ljb25pYyhnZXRId25kS1VJKCkp ICkKKyAgICAgICAgICAgIHJldHVybigibWluaW1pemVkIik7CisJICBpZiAoIElzWm9vbWVkKGdl dEh3bmRLVUkoKSkgKQorICAgICAgICAgICAgcmV0dXJuKCJtYXhpbWl6ZWQiKTsKKwkgIHJldHVy bigicmVzdG9yZWQiKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgVk5fR1VJX1hQOgorICAgICAgICBz cHJpbnRmKHZ2YnVmLCIlZCIsZ2V0X2d1aV93aW5kb3dfcG9zX3goKSk7ICAvKiBTQUZFICovCisg ICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICBjYXNlIFZOX0dVSV9ZUDoKKyAgICAgICAgc3By aW50Zih2dmJ1ZiwiJWQiLGdldF9ndWlfd2luZG93X3Bvc195KCkpOyAgLyogU0FGRSAqLworICAg ICAgICByZXR1cm4odnZidWYpOworICAgICAgY2FzZSBWTl9HVUlfWFI6CisgICAgICAgIHNwcmlu dGYodnZidWYsIiVkIixHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYU0NSRUVOKSk7ICAvKiBTQUZFICov CisgICAgICAgIHJldHVybih2dmJ1Zik7CisgICAgICBjYXNlIFZOX0dVSV9ZUjoKKyAgICAgICAg c3ByaW50Zih2dmJ1ZiwiJWQiLEdldFN5c3RlbU1ldHJpY3MoU01fQ1lTQ1JFRU4pKTsgIC8qIFNB RkUgKi8KKyAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgIGNhc2UgVk5fR1VJX0ZOTToKKyAg ICAgICAgICBpZiAoIG50ZXJtZm9udCA+IDAgKSB7CisgICAgICAgICAgICAgIGludCBpOworICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnRlcm1mb250OyBpKyspIHsKKyAgICAgICAgICAg ICAgICAgIGlmICh0dF9mb250ID09IHRlcm1fZm9udFtpXS5rd3ZhbCkgeworICAgICAgICAgICAg ICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zix0ZXJtX2ZvbnRbaV0ua3dkLFZWQlVGTCk7CisgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKHZ2YnVmKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oIih1bmtub3duKSIp OworICAgICAgY2FzZSBWTl9HVUlfRlNaOgorICAgICAgICAgIGNrc3RybmNweSh2dmJ1Zixja2l0 b2EodHRfZm9udF9zaXplLzIpLFZWQlVGTCk7CisgICAgICAgICAgaWYgKCB0dF9mb250X3NpemUg JSAyICkKKyAgICAgICAgICAgICAgY2tzdHJuY2F0KHZ2YnVmLCIuNSIsVlZCVUZMKTsKKyAgICAg ICAgICByZXR1cm4odnZidWYpOworICAgIH0KKyNlbmRpZiAvKiBLVUkgKi8KKworICAgIGZuc3Vj Y2VzcyA9IDA7CisgICAgaWYgKGZuZXJyb3IpIHsKKyAgICAgICAgZm5zdWNjZXNzID0gMDsKKyAg ICB9CisgICAgaWYgKGZuZGlhZ3MpIHsKKyAgICAgICAgaWYgKCFlbWJ1ZlswXSkKKyAgICAgICAg ICBja3N0cm5jcHkoZW1idWYsIjxFUlJPUjpOT19TVUNIX1ZBUklBQkxFPiIsRU1CVUZMRU4pOwor ICAgICAgICBwcmludGYoIj8lc1xuIixlbWJ1Zik7CisgICAgICAgIHJldHVybigoY2hhciAqKWVt YnVmKTsKKyAgICB9IGVsc2UKKyAgICAgIHJldHVybigiIik7Cit9CisjZW5kaWYgLyogTk9TUEwg Ki8KKworCisvKgorICBYIFggUyBUIFIgSSBOIEcgIC0tICBFeHBhbmQgdmFyaWFibGVzIGFuZCBi YWNrc2xhc2ggY29kZXMuCisKKyAgICBpbnQgeHh0c3RyaW5nKHMsJnMyLCZuKTsKKworICBFeHBh bmRzIFwgZXNjYXBlcyB2aWEgcmVjdXJzaXZlIGRlc2NlbnQuCisgIEFyZ3VtZW50IHMgaXMgYSBw b2ludGVyIHRvIHN0cmluZyB0byBleHBhbmQgKHNvdXJjZSkuCisgIEFyZ3VtZW50IHMyIGlzIHRo ZSBhZGRyZXNzIG9mIHdoZXJlIHRvIHB1dCByZXN1bHQgKGRlc3RpbmF0aW9uKS4KKyAgQXJndW1l bnQgbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBkZXN0aW5hdGlvbiBzdHJpbmcgKHRvIHByZXZlbnQg b3ZlcnJ1bnMpLgorICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIDAgb24gc3VjY2VzcywKKyAgICB3 aXRoIGRlc3RpbmF0aW9uIHN0cmluZyBudWxsLXRlcm1pbmF0ZWQgYW5kIHMyIHBvaW50aW5nIHRv IHRoZQorICAgIHRlcm1pbmF0aW5nIG51bGwsIHNvIHRoYXQgc3Vic2VxdWVudCBjaGFyYWN0ZXJz IGNhbiBiZSBhZGRlZC4KKyAgICBGYWlsdXJlIHJlYXNvbnMgaW5jbHVkZSBkZXN0aW5hdGlvbiBi dWZmZXIgaXMgZmlsbGVkIHVwLgorKi8KKworI2RlZmluZSBYWERFUExJTSAxMDAgICAgICAgICAg ICAgICAgICAgIC8qIFJlY3Vyc2lvbiBkZXB0aCBsaW1pdCAqLworLyoKKyAgSW4gV2luZG93cyB0 aGUgc3RhY2sgaXMgbGltaXRlZCB0byAyNTZLIHNvIGJpZyBjaGFyYWN0ZXIgYXJyYXlzIGxpa2UK KyAgdm5hbWJ1ZiBjYW4ndCBiZSBvbiB0aGUgc3RhY2sgaW4gcmVjdXJzaXZlIGZ1bmN0aW9ucyBs aWtlIHp6c3RyaW5nKCkuCisgIEJ1dCB0aGF0J3Mgbm8gcmVhc29uIHVzZSBtYWxsb2MoKSBpbiBV bml4IG9yIFZNUywgd2hpY2ggZG9uJ3QgaGF2ZQorICB0aGlzIGtpbmQgb2YgcmVzdHJpY3Rpb24u CisqLworI2lmZGVmIERWTkFNQlVGCQkJCS8qIER5bmFtaWMgdm5hbWJ1ZltdICovCisjdW5kZWYg RFZOQU1CVUYJCQkJLyogQ2xlYW4gc2xhdGUgKi8KKyNlbmRpZiAvKiBEVk5BTUJVRiAqLworCisj aWZuZGVmIE5PU1BMCQkJCS8qIE9ubHkgaWYgU1BMIGluY2x1ZGVkICovCisjaWZkZWYgT1MyCQkJ CS8qIE9ubHkgZm9yIEs5NSAqLworI2RlZmluZSBEVk5BTUJVRgorI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIE5PU1BMICovCisKK2ludAorenpzdHJpbmcocyxzMixuKSBjaGFyICpzOyBjaGFy ICoqczI7IGludCAqbjsgeworICAgIGludCB4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEN1cnJlbnQgY2hhcmFjdGVyICovCisgICAgICAgIHksICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogV29ya2VyICovCisgICAgICAgIHBwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUGFyZW4gbGV2ZWwgKi8KKyAgICAgICAga3AsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBCcmFjZSBsZXZlbCAqLworICAgICAgICBhcmduLCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEZ1bmN0aW9uIGFyZ3VtZW50IGNvdW50ZXIgKi8KKyAgICAgICAgbjIsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBjb3B5IG9mIG4gKi8KKyAgICAgICAg ZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSBkaW1lbnNpb24gKi8KKyAg ICAgICAgdmJpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWYXJpYWJsZSBpZCAoaW50 ZWdlciBmb3JtKSAqLworICAgICAgICBhcmdsLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0cmluZyBhcmd1bWVudCBsZW5ndGggKi8KKyAgICAgICAgbngsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTYXZlIG9yaWdpbmFsIGxlbmd0aCAqLworCXF1b3RpbmcgPSAwOwkJCS8q IDI5OSAqLworCisgICAgY2hhciB2YiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVmFy aWFibGUgaWQgKGNoYXIgZm9ybSkgKi8KKyAgICAgICAgKnZwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludGVyIHRvIHZhcmlhYmxlIGRlZmluaXRpb24gKi8KKyAgICAgICAgKm5l dywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2NhbCBwb2ludGVyIHRvIHRhcmdldCBz dHJpbmcgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICpvbGQsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogU2F2ZSBvcmlnaW5hbCB0YXJnZXQgcG9pbnRlciAqLworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgKnAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3Jr ZXIgKi8KKyAgICAgICAgKnEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIg Ki8KKyAgICAgICAgKnMzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIgKi8K KyAgICBpbnQgIHgzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIgKi8KKyAg ICBjaGFyICpyICA9IChjaGFyICopMDsgICAgICAgICAgICAgICAvKiBGb3IgaG9sZGluZyBmdW5j dGlvbiBhcmdzICovCisgICAgY2hhciAqcjIgPSAoY2hhciAqKTA7CisgICAgY2hhciAqcjNwOwor CisjaWZuZGVmIE5PU1BMCisjaWZkZWYgRFZOQU1CVUYKKyAgICBjaGFyICogdm5hbWJ1ZiA9IE5V TEw7ICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIHZhcmlhYmxlL2Z1bmN0aW9uIG5hbWUgKi8K KyNlbHNlIC8qIERWTkFNQlVGICovCisgICAgY2hhciB2bmFtYnVmW1ZOQU1MXTsgICAgICAgICAg ICAgICAgLyogQnVmZmVyIGZvciB2YXJpYWJsZS9mdW5jdGlvbiBuYW1lICovCisjZW5kaWYgLyog RFZOQU1CVUYgKi8KKyAgICBjaGFyICphcmdwW0ZOQVJHU107ICAgICAgICAgICAgICAgICAvKiBQ b2ludGVycyB0byBmdW5jdGlvbiBhcmdzICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIHN0 YXRpYyBpbnQgZGVwdGggPSAwOyAgICAgICAgICAgICAgIC8qIENhbGwgZGVwdGgsIGF2b2lkIG92 ZXJmbG93ICovCisKKyAgICBuMiA9ICpuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBN YWtlIGxvY2FsIGNvcGllcyBvZiBhcmdzICovCisgICAgbnggPSBuMjsKKworI2lmZGVmIENPTU1F TlQKKyAgICAvKiBUaGlzIGlzIGFsd2F5cyAzMksgaW4gQklHQlVGT0sgYnVpbGRzICovCisgICAg aWYgKGRlcHRoID09IDApCisgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyB0b3AtbGV2ZWwgbiIs IiIsbjIpOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKworICAgIG5ldyA9ICpzMjsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGZvciBvbmUgbGVzcyBsZXZlbCBvZiBpbmRpcmVjdGlvbiAqLwor I2lmZGVmIENPTU1FTlQKKyAgICBvbGQgPSBuZXc7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisj aWZuZGVmIE5PU1BMCisgICAgaXRzYXBhdHRlcm4gPSAwOwkJCS8qIEZvciBcZnBhdHRlcm4oKSAq LworICAgIGlzam9pbiA9IDA7CQkJCS8qIEZvciBcZmpvaW4oKSAqLworI2VuZGlmIC8qIE5PU1BM ICovCisgICAgZGVwdGgrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2luayB0byBh IG5ldyBkZXB0aCAqLworICAgIGlmIChkZXB0aCA+IFhYREVQTElNKSB7ICAgICAgICAgICAgIC8q IFRvbyBkZWVwPyAqLworICAgICAgICBwcmludGYoIj9kZWZpbml0aW9uIGlzIGNpcmN1bGFyIG9y IHRvbyBkZWVwXG4iKTsKKyAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgZmFpbCIsIiIsZGVw dGgpOworICAgICAgICBkZXB0aCA9IDA7CisgICAgICAgICpuZXcgPSBOVUw7CisgICAgICAgIHJl dHVybigtMSk7CisgICAgfQorICAgIGlmICghcyB8fCAhbmV3KSB7ICAgICAgICAgICAgICAgICAg IC8qIFdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVycyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ6 enN0cmluZyBmYWlsIDIiLCIiLGRlcHRoKTsKKyAgICAgICAgaWYgKG5ldykKKyAgICAgICAgICAq bmV3ID0gTlVMOworICAgICAgICBkZXB0aCA9IDA7CisgICAgICAgIHJldHVybigtMSk7CisgICAg fQorICAgIHMzID0gczsKKyAgICBhcmdsID0gMDsKKyAgICB3aGlsZSAoKnMzKyspIGFyZ2wrKzsg ICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2Ygc291cmNlIHN0cmluZyAqLworICAgIGRlYnVn KEYwMTAsInp6c3RyaW5nIGVudHJ5IixzLDApOworICAgIGlmIChhcmdsID09IDApIHsgICAgICAg ICAgICAgICAgICAgIC8qIEVtcHR5IHN0cmluZyAqLworICAgICAgICBkZWJ1ZyhGMTExLCJ6enN0 cmluZyBlbXB0eSBhcmciLHMsYXJnbCk7CisgICAgICAgIGRlcHRoID0gMDsKKyAgICAgICAgKm5l dyA9IE5VTDsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoYXJnbCA8IDApIHsg ICAgICAgICAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIGdhcmJhZ2UgKi8KKyAgICAgICAg ZGVidWcoRjEwMSwienpzdHJpbmcgZmFpbCAzIiwiIixkZXB0aCk7CisgICAgICAgICpuZXcgPSBO VUw7CisgICAgICAgIGRlcHRoID0gMDsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisjaWZk ZWYgRFZOQU1CVUYKKyAgICBkZWJ1ZyhGMTAwLCJ2bmFtYnVmIG1hbGxvYy4uLiIsIiIsMCk7Cisg ICAgdm5hbWJ1ZiA9IG1hbGxvYyhWTkFNTCk7CisgICAgaWYgKHZuYW1idWYgPT0gTlVMTCkgewor ICAgICAgICBwcmludGYoIj9PdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorICAgIGRlYnVnKEYxMDAsInZuYW1idWYgbWFsbG9jIG9rIiwiIiwwKTsKKyNlbmRpZiAv KiBEVk5BTUJVRiAqLworCisgICAgd2hpbGUgKCh4ID0gKnMpKSB7ICAgICAgICAgICAgICAgICAg LyogTG9vcCBmb3IgYWxsIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgaWYgKHggIT0gQ01EUSkgeyAg ICAgICAgICAgICAgICAvKiBJcyBpdCB0aGUgY29tbWFuZC1xdW90ZSBjaGFyPyAqLworICAgICAg ICAgICAgKm5ldysrID0gKnMrKzsgICAgICAgICAgICAgIC8qIE5vLCBub3JtYWwgY2hhciwganVz dCBjb3B5ICovCisgICAgICAgICAgICBpZiAoLS1uMiA8IDApIHsgICAgICAgICAgICAgLyogYW5k IGNvdW50IGl0LCBjYXJlZnVsIG9mIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgZGVidWco RjEwMSwienpzdHJpbmcgb3ZlcmZsb3cgMSIsIiIsZGVwdGgpOworICAgICAgICAgICAgICAgIGRl cHRoID0gMDsKKyNpZmRlZiBEVk5BTUJVRgorICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBm cmVlKHZuYW1idWYpOworI2VuZGlmIC8qIERWTkFNQlVGICovCisgICAgICAgICAgICAgICAgcmV0 dXJuKC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9 CisKKy8qIFdlIGhhdmUgdGhlIGNvbW1hbmQtcXVvdGUgY2hhcmFjdGVyLiAqLworCisgICAgICAg IHggPSAqKHMrMSk7ICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSBmb2xsb3dpbmcgY2hh cmFjdGVyLiAqLworICAgICAgICBpZiAoaXN1cHBlcih4KSkgeCA9IHRvbG93ZXIoeCk7CisgICAg ICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgLyogQWN0IGFjY29yZGluZyB0byB2 YXJpYWJsZSB0eXBlICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgY2FzZSAwOiAgICAgICAg ICAgICAgICAgICAgICAgLyogSXQncyBhIGxvbmUgYmFja3NsYXNoICovCisgICAgICAgICAgICAq bmV3KysgPSAqcysrOworICAgICAgICAgICAgaWYgKC0tbjIgPCAwKSB7CisgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwienpzdHJpbmcgb3ZlcmZsb3cgMiIsIiIsMCk7CisjaWZkZWYgRFZOQU1C VUYKKyAgICAgICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAv KiBEVk5BTUJVRiAqLworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICclJzogICAgICAgICAgICAgICAg ICAgICAvKiBWYXJpYWJsZSAqLworICAgICAgICAgICAgcyArPSAyOyAgICAgICAgICAgICAgICAg ICAgIC8qIEdldCB0aGUgbGV0dGVyIG9yIGRpZ2l0ICovCisgICAgICAgICAgICB2YiA9ICpzKys7 ICAgICAgICAgICAgICAgICAgLyogYW5kIG1vdmUgc291cmNlIHBvaW50ZXIgcGFzdCBpdCAqLwor ICAgICAgICAgICAgdnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIEFzc3VtZSBkZWZpbml0 aW9uIGlzIGVtcHR5ICovCisgICAgICAgICAgICBpZiAodmIgPj0gJzAnICYmIHZiIDw9ICc5Jykg eyAvKiBEaWdpdCBmb3IgbWFjcm8gYXJnICovCisgICAgICAgICAgICAgICAgaWYgKG1hY2x2bCA8 IDApICAgICAgICAgLyogRGlnaXQgdmFyaWFibGVzIGFyZSBnbG9iYWwgKi8KKyAgICAgICAgICAg ICAgICAgIHZwID0gZ192YXJbdmJdOyAgICAgICAvKiBpZiBubyBtYWNybyBpcyBhY3RpdmUgKi8K KyAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8K KyAgICAgICAgICAgICAgICAgIHZwID0gbV9hcmdbbWFjbHZsXVt2YiAtICcwJ107IC8qIHRoZXkn cmUgb24gdGhlIHN0YWNrICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKHZiID09ICcqJykgeyAg ICAgLyogTWFjcm8gYXJncyBzdHJpbmcgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAg ICAgLyogVGhpcyBkb2Vzbid0IHRha2UgY2hhbmdlcyBpbnRvIGFjY291bnQgKi8KKyAgICAgICAg ICAgICAgICB2cCA9IChtYWNsdmwgPj0gMCkgPyBtX2xpbmVbbWFjbHZsXSA6IHRvcGxpbmU7Cisg ICAgICAgICAgICAgICAgaWYgKCF2cCkgdnAgPSAiIjsKKyNlbHNlCisJCWNoYXIgKiBzcyA9IG5l dzsKKyAgICAgICAgICAgICAgICBpZiAoenpzdHJpbmcoIlxcZmpvaW4oJl9bXSwsMSkiLCZuZXcs Jm4yKSA8IDApIHsKKyNpZmRlZiBEVk5BTUJVRgorCQkgICAgaWYgKHZuYW1idWYpIGZyZWUodm5h bWJ1Zik7CisjZW5kaWYgLyogRFZOQU1CVUYgKi8KKwkJICAgIHJldHVybigtMSk7CisJCX0KKwkJ ZGVidWcoRjExMCwienpzdHJpbmcgXFwlKiIsc3MsMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBpZiAoaXN1cHBlcih2YikpIHZiICs9ICgnYSctJ0EnKTsKKyAgICAgICAgICAgICAgICB2 cCA9IGdfdmFyW3ZiXTsgICAgICAgICAvKiBMZXR0ZXIgZm9yIGdsb2JhbCB2YXJpYWJsZSAqLwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF2cCkgdnAgPSAiIjsKKyNpZmRlZiBDT01N RU5UCisgICAgICAgICAgICBpZiAodnApIHsgICAgICAgICAgICAgICAgICAgLyogSWYgZGVmaW5p dGlvbiBub3QgZW1wdHkgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJCWlmICh2YXJldmFsKSB7 CisJCSAgICBkZWJ1ZyhGMDEwLCJ6enN0cmluZyAlbiB2cCIsdnAsMCk7CisJCSAgICAvKiBjYWxs IHNlbGYgdG8gZXZhbHVhdGUgaXQgKi8KKwkJICAgIGlmICh6enN0cmluZyh2cCwmbmV3LCZuMikg PCAwKSB7CisJCQlkZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIDYiLCIiLGRlcHRoKTsKKyNpZmRl ZiBEVk5BTUJVRgorCQkJaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7CisjZW5kaWYgLyogRFZO QU1CVUYgKi8KKwkJCXJldHVybigtMSk7CS8qIFBhc3MgYWxvbmcgZmFpbHVyZSAqLworCQkgICAg fQorCQl9IGVsc2UgeworCQkgICAgd2hpbGUgKCgqbmV3KysgPSAqdnArKykpIC8qIGNvcHkgaXQg dG8gb3V0cHV0IHN0cmluZy4gKi8KKwkJICAgICAgaWYgKC0tbjIgPCAwKSB7CisJCQkgIGlmIChx KSBmcmVlKHEpOworCQkJICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBvdmVyZmxvdyA0LjUiLCIiLGRl cHRoKTsKKyNpZmRlZiBEVk5BTUJVRgorCQkJICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsK KyNlbmRpZiAvKiBEVk5BTUJVRiAqLworCQkJICByZXR1cm4oLTEpOworCQkgICAgICB9CisJCSAg ICBuZXctLTsJCS8qIEJhY2sgdXAgb3ZlciB0ZXJtaW5hdGluZyBudWxsICovCisJCSAgICBuMisr OwkJLyogdG8gYWxsb3cgZm9yIGZ1cnRoZXIgZGVwb3NpdHMuICovCisJCX0KKyNpZmRlZiBDT01N RU5UCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsInp6 c3RyaW5nICVuIHZwIiwiKE5VTEwpIiwwKTsKKyAgICAgICAgICAgICAgICBuMiA9IG54OworICAg ICAgICAgICAgICAgIG5ldyA9IG9sZDsKKyAgICAgICAgICAgICAgICAqbmV3ID0gTlVMOworICAg ICAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgJyYnOiAgICAgICAgICAgICAgICAgICAgIC8qIEFuIGFycmF5IHJlZmVyZW5j ZSAqLworICAgICAgICAgICAgeCA9IGFycmF5bmFtKHMsJnZiaSwmZCk7ICAgIC8qIEdldCBuYW1l IGFuZCBzdWJzY3JpcHQgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInp6c3RyaW5nIGFycmF5 bmFtIixzLHgpOworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAgICAgICAgICAgICAgZGVi dWcoRjEwMSwienpzdHJpbmcgZmFpbCA3IiwiIixkZXB0aCk7CisjaWZkZWYgRFZOQU1CVUYKKyAg ICAgICAgICAgICAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAvKiBEVk5B TUJVRiAqLworICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBwcCA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogQnJhY2tldCBjb3VudGVyICov CisgICAgICAgICAgICB3aGlsZSAoKnMpIHsgICAgICAgICAgICAgICAgLyogQWR2YW5jZSBzb3Vy Y2UgcG9pbnRlci4uLiAqLworICAgICAgICAgICAgICAgIGlmICgqcyA9PSAnWycpIHBwKys7Cisg ICAgICAgICAgICAgICAgaWYgKCpzID09ICddJyAmJiAtLXBwID09IDApIGJyZWFrOworICAgICAg ICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqcyA9PSAnXScp IHMrKzsgICAgICAgICAvKiAuLi5wYXN0IHRoZSBjbG9zaW5nIGJyYWNrZXQuICovCisKKyAgICAg ICAgICAgIHggPSBjaGthcnJheSh2YmksZCk7ICAgICAgICAvKiBBcnJheSBpcyBkZWNsYXJlZD8g Ki8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIGNoa2FycmF5IiwiIix4KTsKKyAg ICAgICAgICAgIGlmICh4ID4gLTEpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAg Y2hhciAqIHMxID0gTlVMTDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAg dmJpIC09IEFSUkFZQkFTRTsgICAgICAgLyogQ29udmVydCBuYW1lIHRvIGluZGV4ICovCisKKyAg ICAgICAgICAgICAgICAgIGlmIChhX2RpbVt2YmldID49IGQpIHsgLyogSWYgc3Vic2NyaXB0IGlu IHJhbmdlICovCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKiphcDsKKyAgICAgICAgICAgICAg ICAgICAgYXAgPSBhX3B0clt2YmldOyAgICAvKiBnZXQgZGF0YSBwb2ludGVyICovCisgICAgICAg ICAgICAgICAgICAgIGlmIChhcCkgeyAgICAgICAgICAgLyogYW5kIGlmIHRoZXJlIGlzIG9uZSAq LworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwW2RdKSB7ICAgIC8qIElmIGRlZmluaXRp b24gbm90IGVtcHR5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMSwi enpzdHJpbmcgYXBbZF0iLGFwW2RdLGQpOworCQkJICAgIGlmICh2YXJldmFsKSB7CisJCQkJaWYg KHp6c3RyaW5nKGFwW2RdLCZuZXcsJm4yKSA8IDApIHsKKwkJCQkgICAgZGVidWcoRjEwMSwienpz dHJpbmcgZmFpbCA4IiwiIixkZXB0aCk7CisjaWZkZWYgRFZOQU1CVUYKKwkJCQkgICAgaWYgKHZu YW1idWYpIGZyZWUodm5hbWJ1Zik7CisjZW5kaWYgLyogRFZOQU1CVUYgKi8KKwkJCQkgICAgcmV0 dXJuKC0xKTsgLyogUGFzcyBhbG9uZyBmYWlsdXJlICovCisJCQkJfQorCQkJICAgIH0gZWxzZSB7 CisJCQkJdnAgPSBhcFtkXTsKKwkJCQl3aGlsZSAoKCpuZXcrKyA9ICp2cCsrKSkgLyogY29weSB0 byByZXN1bHQgKi8KKwkJCQkgIGlmICgtLW4yIDwgMCkgeworCQkJCSAgICAgIGlmIChxKSBmcmVl KHEpOworCQkJCSAgICAgIGRlYnVnKEYxMDEsCisJCQkJCSAgICAienpzdHJpbmcgb3ZlcmZsb3cg OC41IiwiIixkZXB0aCk7CisjaWZkZWYgRFZOQU1CVUYKKwkJCQkgICAgICBpZiAodm5hbWJ1Zikg ZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAvKiBEVk5BTUJVRiAqLworCQkJCSAgICAgIHJldHVybigt MSk7CisJCQkJICB9CisJCQkJbmV3LS07CS8qIEJhY2sgdXAgb3ZlciB0ZXJtaW5hdGluZyBudWxs ICovCisJCQkJbjIrKzsJLyogdG8gYWxsb3cgZm9yIGZ1cnRoZXIgZGVwb3NpdHMuICovCisJCQkg ICAgfQorCQkJfQorCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAvKiBvbGQgPSBuZXc7ICovCisgICAgICAgICAgICAgICAgICAgICAgICBuMiA9 IG54OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCSAgICB9Cisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ2YnOiAgICAgICAgICAgICAgICAg ICAgIC8qIEEgYnVpbHRpbiBmdW5jdGlvbiAqLworICAgICAgICAgICAgcSA9IHZuYW1idWY7ICAg ICAgICAgICAgICAgIC8qIENvcHkgdGhlIG5hbWUgKi8KKyAgICAgICAgICAgIHkgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAvKiBpbnRvIGEgc2VwYXJhdGUgYnVmZmVyICovCisgICAgICAgICAg ICBzICs9IDI7ICAgICAgICAgICAgICAgICAgICAgLyogcG9pbnQgcGFzdCAnRicgKi8KKyAgICAg ICAgICAgIHdoaWxlICh5KysgPCBWTkFNTCkgeworICAgICAgICAgICAgICAgIGlmICgqcyA9PSAn KCcpIHsgcysrOyBicmVhazsgfSAvKiBMb29rIGZvciBvcGVuIHBhcmVuICovCisgICAgICAgICAg ICAgICAgaWYgKCgqcSA9ICpzKSA9PSBOVUwpIGJyZWFrOyAgIC8qIG9yIGVuZCBvZiBzdHJpbmcg Ki8KKyAgICAgICAgICAgICAgICBzKys7IHErKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICpxID0gTlVMOyAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgZnVuY3Rpb24gbmFtZSAq LworICAgICAgICAgICAgaWYgKHkgPj0gVk5BTUwpIHsgICAgICAgICAgIC8qIEhhbmRsZSBwYXRo b2xvZ2ljYWwgY2FzZSAqLworICAgICAgICAgICAgICAgIHdoaWxlICgqcyAmJiAoKnMgIT0gJygn KSkgLyogb2YgdmVyeSBsb25nIHN0cmluZyBlbnRlcmVkICovCisgICAgICAgICAgICAgICAgICBz Kys7ICAgICAgICAgICAgICAgICAgICAvKiBhcyBmdW5jdGlvbiBuYW1lLiAqLworICAgICAgICAg ICAgICAgIGlmICgqcyA9PSAnKScpIHMrKzsgICAgICAgLyogU2tpcCBwYXN0IGl0LiAqLworICAg ICAgICAgICAgfQorICAgICAgICAgICAgciA9IHIyID0gbWFsbG9jKGFyZ2wrMik7ICAgIC8qIEFu ZCBtYWtlIGEgcGxhY2UgdG8gY29weSBhcmdzICovCisgICAgICAgICAgICAvKiBkZWJ1ZyhGMTAx LCJ6enN0cmluZyByMiIsIiIscjIpOyAqLworICAgICAgICAgICAgaWYgKCFyMikgeyAgICAgICAg ICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgbWFsbG9jIGZhaWx1cmUgKi8KKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBmYWlsIDkiLCIiLGRlcHRoKTsKKyAgICAgICAgICAg ICAgICAqbmV3ID0gTlVMOworICAgICAgICAgICAgICAgIGRlcHRoID0gMDsKKyNpZmRlZiBEVk5B TUJVRgorICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOworI2VuZGlm IC8qIERWTkFNQlVGICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChyMykgZnJlZShyMyk7IC8qIEFuZCBhbm90aGVyIHRvIGNvcHkg bGl0ZXJhbCBhcmcgc3RyaW5nICovCisgICAgICAgICAgICByMyA9IG1hbGxvYyhhcmdsKzIpOwor ICAgICAgICAgICAgLyogZGVidWcoRjEwMSwienpzdHJpbmcgcjMiLCIiLHIzKTsgKi8KKyAgICAg ICAgICAgIGlmICghcjMpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBm YWlsIDEwIiwiIixkZXB0aCk7CisgICAgICAgICAgICAgICAgZGVwdGggPSAwOworICAgICAgICAg ICAgICAgICpuZXcgPSBOVUw7CisgICAgICAgICAgICAgICAgaWYgKHIyKSBmcmVlKHIyKTsKKyNp ZmRlZiBEVk5BTUJVRgorICAgICAgICAgICAgICAgIGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYp OworI2VuZGlmIC8qIERWTkFNQlVGICovCisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAg ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICByM3AgPSByMzsKKyAgICAgICAgICAgIGFy Z24gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBBcmd1bWVudCBjb3VudGVyICovCisgICAgICAg ICAgICBhcmdwW2FyZ24rK10gPSByOyAgICAgICAgICAgLyogUG9pbnQgdG8gZmlyc3QgYXJndW1l bnQgKi8KKyAgICAgICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBDb21wbGV0 aW9uIGZsYWcgKi8KKyAgICAgICAgICAgIHBwID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBQ YXJlbiBsZXZlbCAoYWxyZWFkeSBoYXZlIG9uZSkuICovCisgICAgICAgICAgICBrcCA9IDA7Cisg ICAgICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgLyogQ29weSBlYWNoIGFyZ3Vt ZW50LCBjaGFyIGJ5IGNoYXIuICovCisgICAgICAgICAgICAgICAgKnIzcCsrID0gKnM7ICAgICAg ICAgICAgLyogVGhpcyBpcyBhIGxpdGVyYWwgY29weSBmb3IgXGZsaXQgKi8KKyAgICAgICAgICAg ICAgICBpZiAoISpzKSBicmVhazsKKworICAgICAgICAgICAgICAgIGlmICgqcyA9PSAneycpIHsg ICAgICAgIC8qIExlZnQgYnJhY2UgKi8KKyAgICAgICAgICAgICAgICAgICAga3ArKzsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCpzID09ICd9JykgeyAgICAgICAgLyog UmlnaHQgYnJhY2UgKi8KKyAgICAgICAgICAgICAgICAgICAga3AtLTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgaWYgKCpzID09ICcoJyAmJiBrcCA8PSAwKSB7IC8qIE9wZW4g cGFyZW4gbm90IGluIGJyYWNlICovCisgICAgICAgICAgICAgICAgICAgIHBwKys7ICAgICAgICAg ICAgICAgLyogQ291bnQgaXQgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg KnIgPSAqczsgICAgICAgICAgICAgICAgLyogTm93IGNvcHkgcmVzdWx0aW5nIGJ5dGUgKi8KKyAg ICAgICAgICAgICAgICBpZiAoISpyKSAgICAgICAgICAgICAgICAvKiBJZiBOVUwsIGRvbmUuICov CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoKnIgPT0gJykn ICYmIGtwIDw9IDApIHsgLyogQ2xvc2luZyBwYXJlbiwgY291bnQgaXQuICovCisgICAgICAgICAg ICAgICAgICAgIGlmICgtLXBwID09IDApIHsgICAgLyogRmluYWwgb25lPyAqLworICAgICAgICAg ICAgICAgICAgICAgICAgKnIgPSBOVUw7ICAgICAgIC8qIE1ha2UgaXQgYSB0ZXJtaW5hdGluZyBu dWxsICovCisgICAgICAgICAgICAgICAgICAgICAgICAqKHIzcCAtIDEpID0gTlVMOworICAgICAg ICAgICAgICAgICAgICAgICAgcysrOyAgICAgICAgICAgIC8qIFBvaW50IHBhc3QgaXQgaW4gc291 cmNlIHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDE7ICAgICAgICAgIC8q IEZsYWcgd2UndmUgZ290IGFsbCB0aGUgYXJncyAqLworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7ICAgICAgICAgIC8qIERvbmUgd2l0aCB3aGlsZSBsb29wICovCisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCpyID09ICcs JyAmJiBrcCA8PSAwKSB7IC8qIENvbW1hICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwcCA9 PSAxKSB7ICAgICAgICAgIC8qIElmIG5vdCB3aXRoaW4gKCkncywgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChhcmduID49IEZOQVJHUykgeyAvKiBUb28gbWFueSBhcmdzICovCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcysrOyByKys7ICAgLyogS2VlcCBjb2xsZWN0aW5nIGZs aXQoKSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpyID0gTlVM OyAgICAgICAgICAgLyogTmV3IGFyZywgc2tpcCBwYXN0IGNvbW1hICovCisgICAgICAgICAgICAg ICAgICAgICAgICBhcmdwW2FyZ24rK10gPSByKzE7IC8qIEluIHJhbmdlLCBwb2ludCB0byBuZXcg YXJnICovCisgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3 aXNlIGp1c3Qgc2tpcCBwYXN0ICAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBzKys7IHIrKzsgICAgICAgICAgICAgICAvKiBBZHZhbmNlIHBvaW50ZXJzICovCisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoIXkpICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2Ug ZGlkbid0IGZpbmQgY2xvc2luZyBwYXJlbiAqLworICAgICAgICAgICAgICBhcmduID0gLTE7Cisj aWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAgICAgICBj aGFyIGJ1ZlsyNF07CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwienpzdHJpbmcgZnVuY3Rp b24gbmFtZSIsdm5hbWJ1Zix5KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMDEwLCJ6enN0cmlu ZyBmdW5jdGlvbiByMyIscjMsMCk7CisgICAgICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGFy Z247IHkrKykgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwiYXJnICUyZCAiLHkp OworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMDEwLGJ1ZixhcmdwW3ldLDApOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCSAgICB7CisJ ICAgICAvKiBJbiBjYXNlIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyBjb25zdHJ1Y3RlZCAq LworCQljaGFyIGJ1Zls2NF07IGNoYXIgKiBwID0gYnVmOyBpbnQgbiA9IDY0OyAKKwkJaWYgKHp6 c3RyaW5nKHZuYW1idWYsJnAsJm4pID4gLTEpCisJCSAgY2tzdHJuY3B5KHZuYW1idWYsYnVmLDY0 KTsKKwkgICAgfQorICAgICAgICAgICAgdnAgPSBmbmV2YWwodm5hbWJ1ZixhcmdwLGFyZ24scjMp OyAvKiBFdmFsdWF0ZSB0aGUgZnVuY3Rpb24uICovCisgICAgICAgICAgICBpZiAodnApIHsgICAg ICAgICAgICAgICAgICAgICAgLyogSWYgZGVmaW5pdGlvbiBub3QgZW1wdHkgKi8KKyAgICAgICAg ICAgICAgICB3aGlsZSAoKCpuZXcrKyA9ICp2cCsrKSkgeyAvKiBjb3B5IGl0IHRvIG91dHB1dCBz dHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKC0tbjIgPCAwKSB7ICAgICAgICAvKiB3 YXRjaCBvdXQgZm9yIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTAxLCJ6enN0cmluZyBmYWlsIDEyIiwiIixkZXB0aCk7CisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAocjIpIHsgZnJlZShyMik7IHIyID0gTlVMTDsgfQorICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHIzKSB7IGZyZWUocjMpOyByMyA9IE5VTEw7IH0KKyNpZmRlZiBEVk5BTUJVRgorICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7CisjZW5kaWYg LyogRFZOQU1CVUYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV3 LS07ICAgICAgICAgICAgICAgICAgLyogQmFjayB1cCBvdmVyIHRlcm1pbmF0aW5nIG51bGwgKi8K KyAgICAgICAgICAgICAgICBuMisrOyAgICAgICAgICAgICAgICAgICAvKiB0byBhbGxvdyBmb3Ig ZnVydGhlciBkZXBvc2l0cy4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyMikg eyBmcmVlKHIyKTsgcjIgPSBOVUxMOyB9CisgICAgICAgICAgICBpZiAocjMpIHsgZnJlZShyMyk7 IHIzID0gTlVMTDsgfQorICAgICAgICAgICAgYnJlYWs7CisJICBjYXNlICdxJzoJCQkvKiAyOTkg U3RyaW5nIHRvIGJlIHRha2UgbGl0ZXJhbGx5ICovCisJICAgIHF1b3RpbmcgPSAxOwkJLyogMjk5 ICovCisgICAgICAgICAgY2FzZSAnJCc6ICAgICAgICAgICAgICAgICAgICAgLyogQW4gZW52aXJv bm1lbnQgdmFyaWFibGUgKi8KKyAgICAgICAgICBjYXNlICd2JzogICAgICAgICAgICAgICAgICAg ICAvKiBPciBhIG5hbWVkIGJ1aWx0aW4gdmFyaWFibGUuICovCisgICAgICAgICAgY2FzZSAnbSc6 ICAgICAgICAgICAgICAgICAgICAgLyogT3IgYSBtYWNybyAvbG9uZyB2YXJpYWJsZSAqLworICAg ICAgICAgIGNhc2UgJ3MnOiAgICAgICAgICAgICAgICAgICAgIC8qIDE5NiBNYWNybyBzdWJzdHJp bmcgKi8KKyAgICAgICAgICBjYXNlICc6JzogICAgICAgICAgICAgICAgICAgICAvKiAxOTYgXC12 YXJpYWJsZSBzdWJzdHJpbmcgKi8KKyAgICAgICAgICAgIHBwID0gMDsKKyAgICAgICAgICAgIHAg PSBzKzI7ICAgICAgICAgICAgICAgICAgICAvKiAkL1YvTSBtdXN0IGJlIGZvbGxvd2VkIGJ5IChu YW1lKSAqLworICAgICAgICAgICAgaWYgKCpwICE9ICcoJykgeyAgICAgICAgICAgIC8qIGFzIGlu IFwkKEhPTUUpIG9yIFxWKGNvdW50KSAqLworICAgICAgICAgICAgICAgICpuZXcrKyA9ICpzKys7 ICAgICAgICAgIC8qIElmIG5vdCwganVzdCBjb3B5IGl0ICovCisgICAgICAgICAgICAgICAgaWYg KC0tbjIgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIG92 ZXJmbG93IDMiLCIiLGRlcHRoKTsKKyNpZmRlZiBEVk5BTUJVRgorICAgICAgICAgICAgICAgICAg ICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAvKiBEVk5BTUJVRiAqLworICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBwKys7CisgICAgICAg ICAgICBwKys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gMXN0IGNoYXIgb2Yg bmFtZSAqLworICAgICAgICAgICAgcSA9IHZuYW1idWY7ICAgICAgICAgICAgICAgIC8qIENvcHkg dGhlIG5hbWUgKi8KKyAgICAgICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBp bnRvIGEgc2VwYXJhdGUgYnVmZmVyICovCisJICAgIGRlYnVnKEYxMTAsIj4+Pj4gXFxxKEFSRyki LHAsMCk7CisgICAgICAgICAgICB3aGlsZSAoeSsrIDwgVk5BTUwpIHsgICAgICAgLyogV2F0Y2gg b3V0IGZvciBuYW1lIHRvbyBsb25nICovCisgICAgICAgICAgICAgICAgaWYgKCpwID09ICcoJykg eyAgICAgICAgLyogUGFyZW5zIGNhbiBiZSBuZXN0ZWQuLi4gKi8KKwkJICAgIGlmICgqKHAtMSkg IT0gQ01EUSkJLyogMjk5ICovCisJCSAgICAgIHBwKys7CisgICAgICAgICAgICAgICAgfSBlbHNl IGlmICgqcCA9PSAnKScpIHsgLyogTmFtZSBwcm9wZXJseSB0ZXJtaW5hdGVkIHdpdGggJyknICov CisJCSAgICBpZiAoKihwLTEpICE9IENNRFEpCS8qIDI5OSAqLworCQkgICAgICBwcC0tOworICAg ICAgICAgICAgICAgICAgICBpZiAocHAgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg cCsrOyAgICAgICAgICAgIC8qIE1vdmUgc291cmNlIHBvaW50ZXIgcGFzdCAnKScgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoKnEgPSAqcCkgPT0gTlVMKSAgIC8qIFN0 cmluZyBlbmRzIGJlZm9yZSAnKScgKi8KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIHArKzsgcSsrOyAgICAgICAgICAgICAgIC8qIEFkdmFuY2UgcG9pbnRlcnMgKi8K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpxID0gTlVMOyAgICAgICAgICAgICAgICAgICAv KiBUZXJtaW5hdGUgdGhlIHZhcmlhYmxlIG5hbWUgKi8KKyAgICAgICAgICAgIGlmICh5ID49IFZO QU1MKSB7ICAgICAgICAgICAvKiBIYW5kbGUgcGF0aG9sb2dpY2FsIGNhc2UgKi8KKyAgICAgICAg ICAgICAgICB3aGlsZSAoKnAgJiYgKCpwICE9ICcpJykpIC8qIG9mIHZlcnkgbG9uZyBzdHJpbmcg ZW50ZXJlZCAqLworICAgICAgICAgICAgICAgICAgcCsrOyAgICAgICAgICAgICAgICAgICAgLyog YXMgdmFyaWFibGUgbmFtZS4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKnAgPT0gJyknKSBwKys7 ICAgICAgIC8qIFNraXAgYWhlYWQgdG8gdGhlIGVuZCBvZiBpdC4gKi8KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHMgPSBwOyAgICAgICAgICAgICAgICAgICAgICAvKiBBZGp1c3QgZ2xvYmFs IHNvdXJjZSBwb2ludGVyICovCisgICAgICAgICAgICBzMyA9IHZuYW1idWY7CisgICAgICAgICAg ICB4MyA9IDA7CisgICAgICAgICAgICB3aGlsZSAoKnMzKyspIHgzKys7CisgICAgICAgICAgICBw ID0gbWFsbG9jKHgzICsgMSk7ICAgICAgICAgLyogTWFrZSB0ZW1wb3Jhcnkgc3BhY2UgKi8KKyAg ICAgICAgICAgIGlmIChwICYmICFxdW90aW5nKSB7CS8qIElmIHdlIGdvdCB0aGUgc3BhY2UgKi8K KyAgICAgICAgICAgICAgICB2cCA9IHZuYW1idWY7ICAgICAgICAgICAvKiBQb2ludCB0byBvcmln aW5hbCAqLworICAgICAgICAgICAgICAgIHN0cmNweShwLHZwKTsgICAgICAgICAgIC8qIChzYWZl KSBNYWtlIGEgY29weSBvZiBpdCAqLworICAgICAgICAgICAgICAgIHkgPSBWTkFNTDsgICAgICAg ICAgICAgIC8qIExlbmd0aCBvZiBuYW1lIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgIHp6c3Ry aW5nKHAsJnZwLCZ5KTsgICAgIC8qIEV2YWx1YXRlIHRoZSBjb3B5ICovCisgICAgICAgICAgICAg ICAgZnJlZShwKTsgICAgICAgICAgICAgICAgLyogRnJlZSB0aGUgdGVtcG9yYXJ5IHNwYWNlICov CisgICAgICAgICAgICAgICAgcCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJ6enN0cmluZyB2bmFtZSIsdm5hbWJ1ZiwwKTsKKyAgICAgICAgICAgIHEgPSBO VUxMOworCSAgICBpZiAoeCA9PSAncScpIHsJCS8qIDI5OSBRdW90aW5nIHRoaXMgc3RyaW5nICov CisJCXZwID0gdm5hbWJ1ZjsJCS8qIDI5OSAqLworCQlkZWJ1ZyhGMTEwLCI+Pj4gVlAiLHZwLDAp OworCSAgICB9IGVsc2UgaWYgKHggPT0gJyQnKSB7CS8qIExvb2sgdXAgaXRzIHZhbHVlICovCisg ICAgICAgICAgICAgICAgdnAgPSBnZXRlbnYodm5hbWJ1Zik7ICAgLyogVGhpcyB3YXkgZm9yIGVu dmlyb25tZW50IHZhcmlhYmxlICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0gJ20nIHx8 IHggPT0gJ3MnIHx8IHggPT0gJzonKSB7IC8qIE1hY3JvIC8gc3Vic3RyICovCisgICAgICAgICAg ICAgICAgaW50IGssIHgxID0gLTEsIHgyID0gLTE7CisJCWNoYXIgYyA9IE5VTDsgCisgICAgICAg ICAgICAgICAgayA9IHN0cmxlbih2bmFtYnVmKTsKKyAgICAgICAgICAgICAgICAvKiBccyhuYW1l W246bV0pIC0tIENvbXBhY3Qgc3Vic3RyaW5nIG5vdGF0aW9uICovCisgICAgICAgICAgICAgICAg aWYgKCh4ID09ICdzJyB8fCB4ID09ICc6JykgJiYgKGsgPiAxKSkgeyAvKiBTdWJzdHJpbmcgd2Fu dGVkICovCisJCSAgICBpbnQgYnByYzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZuYW1idWZb ay0xXSA9PSAnXScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGstMTsgaSsrKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHZuYW1idWZbaV0gPT0gJ1snKSB7CisJCQkJYnByYyA9IGJvdW5k c3BhaXIodm5hbWJ1ZiwiOl8uIiwmeDEsJngyLCZjKTsKKwkJCQlkZWJ1ZyhGMTExLCJ6enN0cmlu ZyBib3VuZHNwYWlyIix2bmFtYnVmLGJwcmMpOworCQkJCWRlYnVnKEYwMDAsInp6c3RyaW5nIGJv dW5kc3BhaXIgYyIsIiIsYyk7CisJCQkJaWYgKGJwcmMgPiAtMSkgeworCQkJCSAgICB2bmFtYnVm W2ldID0gTlVMOworCQkJCSAgICBpZiAoeDEgPCAxKQorCQkJCSAgICAgIHgxID0gMTsKKwkJCQkg ICAgeDEtLTsJLyogQWRqdXN0IHRvIDAtYmFzZSAqLworCQkJCX0KKwkJCQlicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisJCSAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh4ID09ICc6JykgewkJ LyogVmFyaWFibGUgdHlwZSAocyBvciA6KSAqLworICAgICAgICAgICAgICAgICAgICB2cCA9IHZu YW1idWY7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkJICAgIHkgPSBpc2FhcnJheSh2bmFt YnVmKSA/CisJCQlteHhsb29rKG1hY3RhYix2bmFtYnVmLG5tYWMpIDoKKwkJCW14bG9vayhtYWN0 YWIsdm5hbWJ1ZixubWFjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHkgPiAtMSkgewkvKiBH b3QgZGVmaW5pdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgdnAgPSBtYWN0YWJbeV0u bXZhbDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHZwID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KwkJZGVidWcoRjExMSwienpzdHJpbmcgdnAiLHZwLCh2cD09TlVMTCk/MDpzdHJsZW4odnApKTsK KworICAgICAgICAgICAgICAgIGlmICh2cCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHgg PT0gJ3MnIHx8IHggPT0gJzonKSAmJiAoayA+IDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHgyID09IDApIHsgIC8qIExlbmd0aCAqLworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZwID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeDEgPiAt MSkgeyAvKiBTdGFydCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBzdHJsZW4o dnApOworCQkJICAgIGRlYnVnKEYxMDEsIj4+PiBrIiwiIixrKTsKKwkJCSAgICAvKiBJZiBpdCdz IG9mZiB0aGUgZW5kLCByZXN1bHQgaXMgZW1wdHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoeDEgPiBrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwID0g TlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGsgPiAwKSB7CisJ CQkJLyogU3RheSBpbiBib3VuZHMgKi8KKwkJCQlpZiAoYyA9PSAnXycgJiYgeDIgPiBrKQkvKiBz dGFydHBvc19lbmRwb3MgKi8KKwkJCQkgIHgyID0gazsKKwkJCQlpZiAoYyA9PSAnOicgJiYgeDEg KyB4MiA+IGspIC8qIHN0YXJ0Omxlbmd0aCAqLworCQkJCSAgeDIgPSAtMTsKKwkJCQlkZWJ1ZyhG MTAxLCI+Pj4geDIiLCIiLHgyKTsKKwkJCQlkZWJ1ZyhGMDAwLCI+Pj4gYyIsIiIsYyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocSA9IG1hbGxvYyhrKzEpKSkgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KHEsdnApOyAvKiBzYWZlICov CisJCQkJICAgIGlmIChjID09ICcuJykgeworCQkJCQlxW3gxKzFdID0gTlVMOworCQkJCQlkZWJ1 ZyhGMDAwLCJYWFguIHEiLHEsYyk7CisJCQkJICAgIH0KKwkJCQkgICAgaWYgKGMgPT0gJzonKSB7 IC8qIHN0YXJ0Omxlbmd0aCAqLworCQkJCQlpZiAoKHgyID4gLTEpICYmICgoeDEgKyB4MikgPD0g aykpIHsKKwkJCQkJICAgIHFbeDEreDJdID0gTlVMOworCQkJCQl9CisJCQkJCWRlYnVnKEYwMDAs IlhYWDogcSIscSxjKTsKKwkJCQkgICAgfSBlbHNlIGlmIChjID09ICdfJykgeyAvKiBzdGFydF9l bmRwb3MgKi8KKwkJCQkJaWYgKHgxID49IHgyKSB7CisJCQkJCSAgICBxW3gxID0gMF0gPSBOVUw7 CisJCQkJCX0gZWxzZSBpZiAoeDIgPCBrICYmIHgyID4gLTEpIHsKKwkJCQkJICAgIHFbeDJdID0g TlVMOworCQkJCQl9CisJCQkJCWRlYnVnKEYwMDAsIlhYWF8gcSIscSxjKTsKKwkJCQkgICAgfQor CQkJCSAgICB2cCA9IHEreDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB2cCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHZwID0gTlVM TDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworCQkJZGVidWcoRjExMCwiWFhYIHZuYW1i dWYiLHZuYW1idWYsMCk7CisJCQlkZWJ1ZyhGMDAwLCJYWFggYyIsIiIsYyk7CisJCQlkZWJ1ZyhG MTAxLCJYWFggeDEiLCIiLHgxKTsKKwkJCWRlYnVnKEYxMDEsIlhYWCB4MiIsIiIseDIpOworCQkJ ZGVidWcoRjExMCwiWFhYIHJlc3VsdCIsdnAsMCk7CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIXZwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgayA9IHN0cmxlbih2cCk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVH ICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogb3IgKi8KKyAgICAgICAgICAgICAgICB2 cCA9IG52bG9vayh2bmFtYnVmKTsgICAvKiB0aGlzIHdheSBmb3IgYnVpbHRpbiB2YXJpYWJsZSAq LworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZwKSB7ICAgICAgICAgICAgICAgICAg IC8qIElmIGRlZmluaXRpb24gbm90IGVtcHR5ICovCisgICAgICAgICAgICAgICAgd2hpbGUgKCgq bmV3KysgPSAqdnArKykpIC8qIGNvcHkgaXQgdG8gb3V0cHV0IHN0cmluZy4gKi8KKyAgICAgICAg ICAgICAgICAgIGlmICgtLW4yIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChxKSBm cmVlKHEpOworICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIG92ZXJm bG93IDQiLCIiLGRlcHRoKTsKKyNpZmRlZiBEVk5BTUJVRgorICAgICAgICAgICAgICAgICAgICAg IGlmICh2bmFtYnVmKSBmcmVlKHZuYW1idWYpOworI2VuZGlmIC8qIERWTkFNQlVGICovCisgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBuZXctLTsgICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgdGVybWlu YXRpbmcgbnVsbCAqLworICAgICAgICAgICAgICAgIG4yKys7ICAgICAgICAgICAgICAgICAgIC8q IHRvIGFsbG93IGZvciBmdXJ0aGVyIGRlcG9zaXRzLiAqLworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKHEpIHsKKyAgICAgICAgICAgICAgICBmcmVlKHEpOworICAgICAgICAgICAgICAg IHEgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyog Tk9TUEwgKi8gICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIFxubm4gZXZlbiBpZiBOT1NQ TC4gKi8KKworI2lmbmRlZiBOT0tWRVJCUworICAgICAgICBjYXNlICdLJzoKKyAgICAgICAgY2Fz ZSAnayc6IHsKKyAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOworICAg ICAgICAgICAgZXh0ZXJuIGludCBua3ZlcmJzOworI2RlZmluZSBLX0JVRkxFTiAzMAorICAgICAg ICAgICAgY2hhciBrYnVmW0tfQlVGTEVOICsgMV07ICAgIC8qIEtleSB2ZXJiIG5hbWUgYnVmZmVy ICovCisgICAgICAgICAgICBpbnQgeCwgeSwgeiwgYnJhY2UgPSAwOworICAgICAgICAgICAgcyAr PSAyOworLyoKKyAgV2UgYXNzdW1lIHRoYXQgdGhlIHZlcmIgbmFtZSBpcyB7YnJhY2VkfSwgb3Ig aXQgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZQorICBzdHJpbmcsIHMsIG9yIGl0IGVuZHMgd2l0 aCBhIHNwYWNlLCBjb250cm9sIGNoYXJhY3Rlciwgb3IgYmFja3NsYXNoLgorKi8KKyAgICAgICAg ICAgIHAgPSBrYnVmOyAgICAgICAgICAgICAgICAgICAvKiBDb3B5IHZlcmIgbmFtZSBpbnRvIGxv Y2FsIGJ1ZmZlciAqLworICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICBpZiAoKnMgPT0g J3snKSAgeworICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICBicmFjZSsrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKCh4KysgPCBLX0JVRkxFTikgJiYgKCpz ID4gU1ApICYmICgqcyAhPSBDTURRKSkgeworICAgICAgICAgICAgICAgIGlmIChicmFjZSAmJiAq cyA9PSAnfScpIHsKKyAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnArKyA9ICpzKys7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmFjZSA9IDA7CisgICAgICAgICAgICAqcCA9 IE5VTDsgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlLiAqLworICAgICAgICAgICAgcCA9 IGtidWY7ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IGJhY2sgdG8gYmVnaW5uaW5nICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ6enN0cmluZyBrdmVyYiIscCwwKTsKKyAgICAgICAgICAg IHkgPSB4bG9va3VwKGt2ZXJicyxwLG5rdmVyYnMsJngpOyAvKiBMb29rIGl0IHVwICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJ6enN0cmluZyBsb29rdXAiLDAseSk7CisgICAgICAgICAgICBp ZiAoeSA+IC0xKSB7CisgICAgICAgICAgICAgICAgZG9rdmVyYihWQ01ELHkpOworI2lmbmRlZiBO T1NQTAorICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIElzIGl0IGEg bWFjcm8/ICovCisgICAgICAgICAgICAgICAgeSA9IG14bG9vayhtYWN0YWIscCxubWFjKTsKKyAg ICAgICAgICAgICAgICBpZiAoeSA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYx MTEsInp6c3RyaW5nIG14bG9vayIscCx5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh6ID0g ZG9kbyh5LE5VTEwsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSkgPiAwKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoY21wdXNoKCkgPiAtMSkgeyAgLyogUHVzaCBjb21tYW5kIHBhcnNlciBz dGF0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgaWZjOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZmNzYXYgPSBpZmM7IC8qIFB1c2ggSUYgY29u ZGl0aW9uIG9uIHN0YWNrICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHBhcnNl cigxKTsgICAgLyogTmV3IHBhcnNlciB0byBleGVjdXRlIG1hY3JvICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY21wb3AoKTsgICAgICAgICAgLyogUG9wIGNvbW1hbmQgcGFyc2VyICov CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZjID0gaWZjc2F2OyAgICAgLyogUmVzdG9y ZSBJRiBjb25kaXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeSA9PSAw KSB7ICAgICAvKiBObyBlcnJvcnMsIGlnbm9yZSBhY3Rpb25zICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHAgPSBtcnZhbFttYWNsdmwrMV07IC8qIElmIE9LIHNldCByZXR1cm4g dmFsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IE5VTEwpIHAg PSAiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBDYW4ndCBwdXNoIGFueSBtb3JlICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgcHVzaGVkIHRv byBkZWVwIiwiIixkZXB0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbj9JbnRlcm5hbCBlcnJvcjogenpzdHJp bmcgc3RhY2sgb3ZlcmZsb3dcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY21wb3AoKSA+IC0xKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyog Tk9TUEwgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisj ZW5kaWYgLyogTk9LVkVSQlMgKi8KKworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE1heWJlIGl0J3MgYSBiYWNrc2xhc2ggY29kZSAqLworICAgICAgICAgIHkgPSB4 eGVzYygmcyk7ICAgICAgICAgICAgICAgIC8qIEdvIGludGVycHJldCBpdCAqLworICAgICAgICAg IGlmICh5IDwgMCkgeyAgICAgICAgICAgICAgICAgIC8qIFVwb24gZmFpbHVyZSAqLworICAgICAg ICAgICAgICAqbmV3KysgPSAoY2hhcikgeDsgICAgICAgIC8qIEp1c3QgcXVvdGUgdGhlIG5leHQg Y2hhcmFjdGVyICovCisgICAgICAgICAgICAgIHMgKz0gMjsgICAgICAgICAgICAgICAgICAgLyog TW92ZSBwYXN0IHRoZSBwYWlyICovCisgICAgICAgICAgICAgIG4yIC09IDI7CisgICAgICAgICAg ICAgIGlmIChuMiA8IDApIHsKKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsInp6c3RyaW5n IG92ZXJmbG93IDUiLCIiLGRlcHRoKTsKKyNpZmRlZiBEVk5BTUJVRgorICAgICAgICAgICAgICAg ICAgaWYgKHZuYW1idWYpIGZyZWUodm5hbWJ1Zik7CisjZW5kaWYgLyogRFZOQU1CVUYgKi8KKyAg ICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgY29udGludWU7ICAgICAgICAgICAgICAgICAvKiBhbmQgZ28gYmFjayBmb3IgbW9yZSAqLwor ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICpuZXcrKyA9IChjaGFyKSB5OyAgICAg ICAgLyogZWxzZSBkZXBvc2l0IGludGVycHJldGVkIHZhbHVlICovCisgICAgICAgICAgICAgIGlm ICgtLW4yIDwgMCkgeworICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwienpzdHJpbmcgb3Zl cmZsb3cgNiIsIiIsZGVwdGgpOworI2lmZGVmIERWTkFNQlVGCisgICAgICAgICAgICAgICAgICBp ZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAvKiBEVk5BTUJVRiAqLworICAgICAg ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKyAgICAqbmV3ID0gTlVMOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBUZXJtaW5hdGUgdGhlIG5ldyBzdHJpbmcgKi8KKyAgICBkZWJ1ZyhGMDEwLCJ6enN0cmluZyB3 aGlsZSBleGl0IiwqczIsMCk7CisKKyAgICBkZXB0aC0tOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBBZGp1c3Qgc3RhY2sgZGVwdGggZ2F1Z2UgKi8KKyAgICAqczIgPSBuZXc7ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb3B5IHJlc3VsdHMgYmFjayBpbnRvICovCisgICAgKm4g PSBuMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGFyZ3VtZW50IGFkZHJlc3Nl cyAqLworICAgIGRlYnVnKEYxMDEsInp6c3RyaW5nIG9rIiwiIixkZXB0aCk7CisjaWZkZWYgRFZO QU1CVUYKKyAgICBpZiAodm5hbWJ1ZikgZnJlZSh2bmFtYnVmKTsKKyNlbmRpZiAvKiBEVk5BTUJV RiAqLworICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1 cm4uICovCit9CisjZW5kaWYgLyogTk9JQ1AgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNS5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja3V1czUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jNGM4NzgyCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2Nr ZXJtaXQtOS4wLjMwMi9ja3V1czUuYwpAQCAtMCwwICsxLDEyNDI3IEBACisjaW5jbHVkZSAiY2tj c3ltLmgiCisKK2ludCB4Y21kc3JjID0gMDsKKworI2lmZGVmIE5PSUNQCitpbnQgY21kc3JjKCkg eyByZXR1cm4oMCk7IH0KKyNlbmRpZiAvKiBOT0lDUCAqLworCisvKiAgQyBLIFUgVSBTIDUgLS0g ICJVc2VyIEludGVyZmFjZSIgZm9yIEMtS2VybWl0LCBwYXJ0IDUgICovCisKKy8qCisgIEF1dGhv cnM6CisgICAgRnJhbmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUgS2Vy bWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBKZWZm cmV5IEUgQWx0bWFuIDxqYWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJl IEVuZHBvaW50cyBJbmMuLCBOZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAy MDExLAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2Yg TmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09Q WUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMg bW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisKKy8qIEluY2x1ZGVz ICovCisKKyNpbmNsdWRlICJja2NkZWIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRl ICJja2NrZXIuaCIKKyNpbmNsdWRlICJja3V1c3IuaCIKKworI2lmZGVmIERDTURCVUYKK2NoYXIg KmxpbmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgYnVmZmVyIGZv ciBhbnl0aGluZyAqLworY2hhciAqdG1wYnVmOworI2Vsc2UKK2NoYXIgbGluZVtMSU5CVUZTSVor MV07CitjaGFyIHRtcGJ1ZltUTVBCVUZTSVorMV07ICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5 IGJ1ZmZlciAqLworI2VuZGlmIC8qIERDTURCVUYgKi8KKworI2lmbmRlZiBOT0lDUAorCisjaW5j bHVkZSAiY2tjbmV0LmgiCisjaWZuZGVmIE5PQ1NFVFMKKyNpbmNsdWRlICJja2N4bGEuaCIKKyNl bmRpZiAvKiBOT0NTRVRTICovCisjaWZkZWYgTUFDCisjaW5jbHVkZSAiY2ttYXNtLmgiCisjZW5k aWYgLyogTUFDICovCisjaWZkZWYgQ0tfU1NMCisjaW5jbHVkZSAiY2tfc3NsLmgiCisjZW5kaWYg LyogQ0tfU1NMICovCisKK2V4dGVybiBjaGFyICogY2tfY3J5ZWFyOyAgICAgICAvKiAoY2tjbWFp LmMpIExhdGVzdCBDLUtlcm1pdCBjb3B5cmlnaHQgeWVhciAqLworCisjaWZkZWYgT1MyCisjaW5j bHVkZSAiY2tvZXRjLmgiCisjaWZuZGVmIE5UCisjZGVmaW5lIElOQ0xfTk9QTQorI2RlZmluZSBJ TkNMX1ZJTyAvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCisjaW5jbHVkZSA8b3MyLmg+CisjdW5k ZWYgQ09NTUVOVAorI2Vsc2UgLyogTlQgKi8KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5l IFRBUElfQ1VSUkVOVF9WRVJTSU9OIDB4MDAwMTAwMDQKKyNpbmNsdWRlIDx0YXBpLmg+CisjaW5j bHVkZSA8bWN4Lmg+CisjaW5jbHVkZSAiY2tudGFwLmgiCisjZGVmaW5lIEFQSVJFVCBVTE9ORwor ZXh0ZXJuIGludCBEaWFsZXJIYW5kbGU7CitleHRlcm4gaW50IFN0YXJ0ZWRGcm9tRGlhbGVyOwor I2VuZGlmIC8qIE5UICovCisjaW5jbHVkZSAiY2tvY29uLmgiCisjaW5jbHVkZSAiY2tva2V5Lmgi CisjaWZkZWYgS1VJCisjaW5jbHVkZSAiaWt1aS5oIgorI2VuZGlmIC8qIEtVSSAqLworI2lmZGVm IHB1dGNoYXIKKyN1bmRlZiBwdXRjaGFyCisjZW5kaWYgLyogcHV0Y2hhciAqLworI2RlZmluZSBw dXRjaGFyKHgpIGNvbm9jKHgpCitleHRlcm4gaW50IGN1cnNvcl9zYXZlIDsKK2V4dGVybiBib29s IGN1cnNvcmVuYVtdIDsKKyNlbmRpZiAvKiBPUzIgKi8KKworLyogMjAxMC0wMy0wOSBTTVMuICBW QVggQyBWMy4xLTA1MSBuZWVkcyA8c3RhdC5oPiBmb3Igb2ZmX3QuICovCisjaWZkZWYgVk1TCisj aW5jbHVkZSA8c3RhdC5oPgorI2VuZGlmIC8qIGRlZiBWTVMgKi8KKworLyogRm9yIGZvcm1hdHRl ZCBzY3JlZW5zLCAibW9yZT8iIHByb21wdGluZywgZXRjLiAqLworCisjaWZkZWYgRlQxOAorI2Rl ZmluZSBpc3hkaWdpdChjKSBpc2RpZ2l0KGMpCisjZW5kaWYgLyogRlQxOCAqLworCisjaWZkZWYg U1RSQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RyYXR1cyBDb21wdXRlciwgSW5j LiAgVk9TICovCisjaWZkZWYgcHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRj aGFyICovCisjZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKKyNpZmRlZiBnZXRjaGFyCisjdW5k ZWYgZ2V0Y2hhcgorI2VuZGlmIC8qIGdldGNoYXIgKi8KKyNkZWZpbmUgZ2V0Y2hhcih4KSBjb25p bmMoMCkKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKy8qIEV4dGVybmFsIHZhcmlhYmxlcyAqLwor CitleHRlcm4gaW50IGNhcnJpZXIsIGNkdGltbywgbG9jYWwsIHF1aWV0LCBiYWNrZ3JkLCBiZ3Nl dCwgc29zaSwgeHN1c3BlbmQsCisgIGJpbmFyeSwgZXNjYXBlLCB4YXJncywgZmxvdywgY21kbXNr LCBkdXBsZXgsIGNreGVjaCwgc2VzbG9nLCB3aGF0LAorICBpbnNlcnZlciwgZGlyYWN0aXZlLCB0 bGV2ZWwsIGN3ZGYsIG5mdW5jcywgbXNnZmxnLCByZW1hcHBkLCBoaW50cywgbWRtdHlwLAorICB6 aW5jbnQsIGNtYXNrLCByY2ZsYWcsIHN1Y2Nlc3MsIHhpdHN0YSwgcGZsYWcsIHRubG0sIHRuX25s bSwgeGl0d2FybiwKKyAgZGVic2VzLCB4YXNrbW9yZSwgcGFyaXR5LCBzYXZlYXNrLCB3YXNjbG9z ZWQsIHdoeWNsb3NlZCwgY2RhY3RpdmUsCisgIHJjZGFjdGl2ZSwga2VlcGFsbGNoYXJzLCBjbWRf ZXJyOworCisjaWZkZWYgTE9DVVMKK2V4dGVybiBpbnQgbG9jdXMsIGF1dG9sb2N1czsKKyNlbmRp ZiAvKiBMT0NVUyAqLworCisjaWZuZGVmIE5PTVNFTkQKK2V4dGVybiBpbnQgYWRkbGlzdDsKKyNl bmRpZiAvKiBOT01TRU5EICovCisKKyNpZmRlZiBDS19TUEVFRAorZXh0ZXJuIGludCBwcmVmaXhp bmc7CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworZXh0ZXJuIGludCBnX21hdGNoZG90OworCisj aWZkZWYgUkVDVVJTSVZFCitleHRlcm4gaW50IHJlY3Vyc2l2ZTsKKyNlbmRpZiAvKiBSRUNVUlNJ VkUgKi8KK2V4dGVybiBpbnQgeGZpbGV0eXBlOworCisjaWZkZWYgSUtTRENPTkYKK2V4dGVybiBj aGFyICogaWtzZGNvbmY7CitleHRlcm4gaW50IGlrc2RjZjsKKyNlbmRpZiAvKiBJS1NEQ09ORiAq LworCisjaWZkZWYgQ0tfUkVDQUxMCitleHRlcm4gaW50IG9uX3JlY2FsbDsKKyNlbmRpZiAvKiBD S19SRUNBTEwgKi8KKworZXh0ZXJuIGludCBuZ2V0cGF0aCwgZXhpdG9uY2xvc2U7CitleHRlcm4g Y2hhciAqIGdldHBhdGhbXTsKK2V4dGVybiBDSEFSICogZXBrdG1zZzsKKworZXh0ZXJuIGNoYXIg KiBzbmRfbW92ZTsKK2V4dGVybiBjaGFyICogc25kX3JlbmFtZTsKK2V4dGVybiBjaGFyICogcmN2 X21vdmU7CitleHRlcm4gY2hhciAqIHJjdl9yZW5hbWU7CitleHRlcm4gY2hhciAqIGdfc25kX21v dmU7CitleHRlcm4gY2hhciAqIGdfc25kX3JlbmFtZTsKK2V4dGVybiBjaGFyICogZ19yY3ZfbW92 ZTsKK2V4dGVybiBjaGFyICogZ19yY3ZfcmVuYW1lOworCitleHRlcm4gY2hhciAqIG5tW107CisK KyNpZmRlZiBDS19VVFNOQU1FCitleHRlcm4gY2hhciB1bm1fbWNoW107CitleHRlcm4gY2hhciB1 bm1fbW9kW107CitleHRlcm4gY2hhciB1bm1fbmFtW107CitleHRlcm4gY2hhciB1bm1fcmVsW107 CitleHRlcm4gY2hhciB1bm1fdmVyW107CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworCisjaWZu ZGVmIE5PUFVTSAorI2lmbmRlZiBOT0ZSSUxMUworZXh0ZXJuIGNoYXIgZWRpdG9yW107CitleHRl cm4gY2hhciBlZGl0ZmlsZVtdOworZXh0ZXJuIGNoYXIgZWRpdG9wdHNbXTsKKyNpZmRlZiBCUk9X U0VSCitleHRlcm4gY2hhciBicm93c2VyW107CitleHRlcm4gY2hhciBicm93c29wdHNbXTsKK2V4 dGVybiBjaGFyIGJyb3dzdXJsW107CisjZW5kaWYgLyogQlJPV1NFUiAqLworI2VuZGlmIC8qICBO T0ZSSUxMUyAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworCisjaWZuZGVmIE5PRlJJTExTCisjaWZu ZGVmIE5PUkVOQU1FCitfUFJPVE9UWVAoVk9JRCBzaG9yZW5hbWUsICh2b2lkKSk7CisjZW5kaWYJ LyogTk9SRU5BTUUgKi8KKyNlbmRpZgkvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PU0VSVkVS CitleHRlcm4gY2hhciAqIHhfdXNlciwgKiB4X3Bhc3N3ZCwgKiB4X2FjY3Q7CisjZW5kaWYgLyog Tk9TRVJWRVIgKi8KKworI2lmZGVmIENLTE9HRElBTAorZXh0ZXJuIGludCBkaWFsb2c7CitleHRl cm4gY2hhciBkaWFmaWxbXTsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKworI2lmZGVmIENLUk9P VAorZXh0ZXJuIGludCBja3Jvb3RlcnI7CisjZW5kaWYgLyogQ0tST09UICovCisKKyNpZm5kZWYg Tk9TUEwKK2V4dGVybiBpbnQgY2ZpbGVmLCB4eGRvdCwgdmFyZXZhbDsKK2V4dGVybiBjaGFyIGNt ZGZpbFtdOworCitzdHJ1Y3QgbG9jYWx2YXIgKiBsb2NhbGhlYWRbQ01EU1RLTF07CitzdHJ1Y3Qg bG9jYWx2YXIgKiBsb2NhbHRhaWwgPSBOVUxMOworc3RydWN0IGxvY2FsdmFyICogbG9jYWxuZXh0 ID0gTlVMTDsKKworX1BST1RPVFlQKCBWT0lEIHNob3NleHAsICh2b2lkKSApOworX1BST1RPVFlQ KCBzdGF0aWMgVk9JRCBzaG9pbnB1dCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBjaGFy IGdldHRvaywgICAodm9pZCkgKTsKK19QUk9UT1RZUCggc3RhdGljIFZPSUQgZmFjdG9yLCAgICh2 b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCB0ZXJtLCAgICAgKHZvaWQpICk7CitfUFJP VE9UWVAoIHN0YXRpYyBWT0lEIHRlcm1wLCAgICAodm9pZCkgKTsKK19QUk9UT1RZUCggc3RhdGlj IFZPSUQgZXhwcnAsICAgICh2b2lkKSApOworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBleHByLCAg ICAgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIHNpbXBsZSwgICAodm9pZCkgKTsK K19QUk9UT1RZUCggc3RhdGljIFZPSUQgc2ltcGxlciwgICh2b2lkKSApOworX1BST1RPVFlQKCBz dGF0aWMgVk9JRCBzaW1wbGVzdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIHN0YXRpYyBDS19PRkZf VCB4cGFyc2UsICAgKHZvaWQpICk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9TSE9X CitfUFJPVE9UWVAoIGludCBzaG9faWtzLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBOT1NIT1cgKi8K KworI2lmZGVmIE1BQworY2hhciAqIGNrcHJvbXB0ID0gIk1hYy1LZXJtaXQ+IjsgICAgICAgIC8q IERlZmF1bHQgcHJvbXB0IGZvciBNYWNpbnRvc2ggKi8KK2NoYXIgKiBpa3Byb21wdCA9ICJJS1NE PiI7CisjZWxzZSAgLyogTm90IE1BQyAqLworI2lmZGVmIE5PU1BMCisjaWZkZWYgT1MyCitjaGFy ICogY2twcm9tcHQgPSAiSy05NT4gIjsgICAgICAgICAgICAgLyogRGVmYXVsdCBwcm9tcHQgZm9y IFdpbjMyICovCitjaGFyICogaWtwcm9tcHQgPSAiSUtTRD4gIjsKKyNlbHNlCitjaGFyICogY2tw cm9tcHQgPSAiQy1LZXJtaXQ+IjsKK2NoYXIgKiBpa3Byb21wdCA9ICJJS1NEPiI7CisjZW5kaWYg LyogTlQgKi8KKyNlbHNlICAvKiBOT1NQTCAqLworI2lmZGVmIE9TMgorLyogRGVmYXVsdCBwcm9t cHQgZm9yIE9TLzIgYW5kIFdpbjMyICovCisjaWZkZWYgTlQKK2NoYXIgKiBja3Byb21wdCA9ICJb XFxmcmVwbGFjZShcXGZsb25ncGF0aChcXHYoZGlyKSksLyxcXFxcKV0gSy05NT4gIjsKK2NoYXIg KiBpa3Byb21wdCA9ICJbXFxmcmVwbGFjZShcXGZsb25ncGF0aChcXHYoZGlyKSksLyxcXFxcKV0g SUtTRD4gIjsKKyNlbHNlICAvKiBOVCAqLworY2hhciAqIGNrcHJvbXB0ID0gIltcXGZyZXBsYWNl KFxcdihkaXIpLC8sXFxcXCldIEstOTU+ICI7CitjaGFyICogaWtwcm9tcHQgPSAiW1xcZnJlcGxh Y2UoXFx2KGRpciksLyxcXFxcKV0gSUtTRD4gIjsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgIC8q IE9TMiAqLworI2lmZGVmIFZNUworY2hhciAqIGNrcHJvbXB0ID0gIlxcdihkaXIpIEMtS2VybWl0 PiI7IC8qIERlZmF1bHQgcHJvbXB0IFZNUyAqLworY2hhciAqIGlrcHJvbXB0ID0gIlxcdihkaXIp IElLU0Q+IjsKKyNlbHNlCitjaGFyICogY2twcm9tcHQgPSAiKFxcdihkaXIpKSBDLUtlcm1pdD4i OyAvKiBEZWZhdWx0IHByb21wdCBmb3Igb3RoZXJzICovCitjaGFyICogaWtwcm9tcHQgPSAiKFxc dihkaXIpKSBJS1NEPiI7CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogTlQgKi8KKyNlbmRp ZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE1BQyAqLworCisjaWZuZGVmIENDSE1BWFBBVEgKKyNk ZWZpbmUgQ0NITUFYUEFUSCAyNTcKKyNlbmRpZiAvKiBDQ0hNQVhQQVRIICovCitjaGFyIGluaWRp cltDQ0hNQVhQQVRIXSA9IHsgTlVMLCBOVUwgfTsgLyogRGlyZWN0b3J5IElOSSBmaWxlIGV4ZWN1 dGVkIGZyb20gKi8KKworI2lmZGVmIFROQ09ERQorZXh0ZXJuIGludCB0bl9iX25sbTsgICAgICAg ICAgICAgICAgICAgIC8qIFRFTE5FVCBCSU5BUlkgbmV3bGluZSBtb2RlICovCisjZW5kaWYgLyog VE5DT0RFICovCisKKyNpZm5kZWYgTk9LVkVSQlMKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJi c1tdOyAgICAgICAgICAvKiBUYWJsZSBvZiBcS3ZlcmJzICovCitleHRlcm4gaW50IG5rdmVyYnM7 ICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIFxLdmVyYnMgKi8KKyNlbmRpZiAvKiBO T0tWRVJCUyAqLworCisjaWZuZGVmIE5PUFVTSAorZXh0ZXJuIGludCBub3B1c2g7CisjZW5kaWYg LyogTk9QVVNIICovCisKKyNpZmRlZiBDS19SRUNBTEwKK2V4dGVybiBpbnQgY21fcmVjYWxsOwor I2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCitleHRlcm4gY2hhciAqY2NudGFiW107CisKKy8qIFBy aW50ZXIgc3R1ZmYgKi8KKworZXh0ZXJuIGNoYXIgKnByaW50ZXJuYW1lOworZXh0ZXJuIGludCBw cmludHBpcGU7CisjaWZkZWYgQlBSSU5UCitleHRlcm4gaW50IHByaW50YmlkaSwgcHBvcnRwYXJp dHksIHBwb3J0ZmxvdzsKK2V4dGVybiBsb25nIHBwb3J0c3BlZWQ7CisjZW5kaWYgLyogQlBSSU5U ICovCisKKyNpZmRlZiBPUzIKK19QUk9UT1RZUCAoaW50IG9zMmdldGNwLCAodm9pZCkgKTsKK19Q Uk9UT1RZUCAoaW50IG9zMmdldGNwbGlzdCwgKGludCAqLCBpbnQpICk7CisjaWZkZWYgT1MyTU9V U0UKK2V4dGVybiBpbnQgdHRfbW91c2U7CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KK2V4dGVybiBp bnQgdHRfdXBkYXRlLCB0dF91cGRtb2RlLCB1cGRtb2RlLCB0dF91dGY4OworI2lmbmRlZiBJS1NE T05MWQorZXh0ZXJuIGludCB0dF9zdGF0dXNbXTsKKyNlbmRpZiAvKiBJS1NET05MWSAqLworI2lm ZGVmIFBDRk9OVFMKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHRlcm1fZm9udFtdOworI2Vsc2UKKyNp ZmRlZiBLVUkKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiICogdGVybV9mb250OworI2VuZGlmIC8qIEtV SSAqLworI2VuZGlmIC8qIFBDRk9OVFMgKi8KK2V4dGVybiBpbnQgbnRlcm1mb250LCB0dF9mb250 LCB0dF9mb250X3NpemU7CitleHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcm5vcm1hbCwgY29sb3J1 bmRlcmxpbmUsIGNvbG9yc3RhdHVzLAorICAgIGNvbG9yaGVscCwgY29sb3JzZWxlY3QsIGNvbG9y Ym9yZGVyLCBjb2xvcmdyYXBoaWMsIGNvbG9yZGVidWcsCisgICAgY29sb3JyZXZlcnNlLCBjb2xv cmNtZCwgY29sb3JpdGFsaWM7CitleHRlcm4gaW50IHByaW9yaXR5OworZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgcHJ0eXRhYltdOworZXh0ZXJuIGludCBucHJ0eTsKK2NoYXIgKiBjbWRtYWMgPSBOVUxM OworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgVk1TCitfUFJPVE9UWVAgKGludCB6a2VybWlu aSwgKGNoYXIgKiwgaW50LCBjaGFyICopICk7CisjZW5kaWYgLyogVk1TICovCisKK2V4dGVybiBs b25nIHZlcm51bTsKK2V4dGVybiBpbnQgaW5lY2hvLCBpbnNpbGVuY2UsIGluYnVmc2l6ZSwgbnZh cnMsIGluaW50cjsKK2V4dGVybiBjaGFyICpwcm90diwgKmZuc3YsICpjbWR2LCAqdXNlcnYsICpj a3h2LCAqY2t6diwgKmNrenN5cywgKnhsYXYsCisgKmNrbmV0diwgKmNsY21kczsKKyNpZmRlZiBP UzIKK2V4dGVybiBjaGFyICpja3l2OworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX0FVVEhF TlRJQ0FUSU9OCitleHRlcm4gY2hhciAqIGNrYXRodjsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNB VElPTiAqLworI2lmZGVmIENLX1NTTAorZXh0ZXJuIGNoYXIgKiBja3NzbHY7CisjZW5kaWYgLyog Q0tfU1NMICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorI2lmbmRlZiBDUllQVF9ETEwKK2V4dGVy biBjaGFyICogY2tjcnB2OworI2VuZGlmIC8qIENSWVBUX0RMTCAqLworI2VuZGlmIC8qIENLX0VO Q1JZUFRJT04gKi8KKworI2lmZGVmIFNTSEJVSUxUSU4KK2V4dGVybiBjaGFyICpja3NzaHY7Cisj aWZkZWYgU0ZUUF9CVUlMVElOCitleHRlcm4gY2hhciAqY2tzZnRwdjsKKyNlbmRpZiAvKiBTRlRQ X0JVSUxUSU4gKi8KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyNpZmRlZiBUTkNPREUKK2V4 dGVybiBjaGFyICpja3RlbHY7CisjZW5kaWYgLyogVE5DT0RFICovCisjaWZuZGVmIE5PRlRQCisj aWZuZGVmIFNZU0ZUUAorZXh0ZXJuIGNoYXIgKiBja2Z0cHY7CisjZW5kaWYgLyogU1lTRlRQICov CisjZW5kaWYgLyogTk9GVFAgKi8KKworZXh0ZXJuIGludCBzcnZpZGw7CisKKyNpZmRlZiBPUzIK K2V4dGVybiBjaGFyICpja29uZXR2OworZXh0ZXJuIGludCBpbnRlcm07CisjaWZkZWYgQ0tfTkVU QklPUworZXh0ZXJuIGNoYXIgKmNrb25iaXY7CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworI2lm ZGVmIE9TMk1PVVNFCitleHRlcm4gY2hhciAqY2tvbW91djsKKyNlbmRpZiAvKiBPUzJNT1VTRSAq LworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PTE9DQUwKK2V4dGVybiBjaGFyICpjb25u djsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZuZGVmIE5PRElBTAorZXh0ZXJuIGNoYXIgKmRp YWx2OworI2VuZGlmIC8qIE5PRElBTCAqLworI2lmbmRlZiBOT1NDUklQVAorZXh0ZXJuIGNoYXIg KmxvZ2ludjsKK2V4dGVybiBpbnQgc2VjaG87CisjZW5kaWYgLyogTk9TQ1JJUFQgKi8KKworI2lm bmRlZiBOT0RJQUwKK2V4dGVybiBpbnQgbm1kbSwgZGlybGluZTsKK2V4dGVybiBzdHJ1Y3Qga2V5 dGFiIG1kbXRhYltdOworI2VuZGlmIC8qIE5PRElBTCAqLworCitleHRlcm4gaW50IG5ldHdvcmss IG5ldHR5cGUsIHR0bnByb3RvOworCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PVEVSTQorLyogU0VU IFRFUk1JTkFMIGl0ZW1zLi4uICovCitleHRlcm4gaW50IHR0X3R5cGUsIHR0X2Fycm93LCB0dF9r ZXlwYWQsIHR0X3dyYXAsIHR0X2Fuc3dlciwgdHRfc2Nyc2l6ZVtdOworZXh0ZXJuIGludCB0dF9i ZWxsLCB0dF9yb2xsW10sIHR0X2N0c3RtbywgdHRfY3Vyc29yLCB0dF9wYWNpbmcsIHR0X3R5cGVf bW9kZTsKK2V4dGVybiBjaGFyIGFuc3dlcmJhY2tbXTsKK2V4dGVybiBzdHJ1Y3QgdHRfaW5mb19y ZWMgdHRfaW5mb1tdOyAgICAvKiBJbmRleGVkIGJ5IHRlcm1pbmFsIHR5cGUgKi8KK2V4dGVybiBp bnQgbWF4X3R0OworI2VuZGlmIC8qIE5PVEVSTSAqLworI2VuZGlmIC8qIE9TMiAqLworCitfUFJP VE9UWVAoIFZPSUQgc2hvdHJtLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNob2ZlYSwgKHZv aWQpICk7CisKKyNpZmRlZiBPUzIKK2V4dGVybiBpbnQgdHRfcm93c1tdLCB0dF9jb2xzW107Cisj ZWxzZSAvKiBPUzIgKi8KK2V4dGVybiBpbnQgdHRfcm93cywgdHRfY29sczsKKyNlbmRpZiAvKiBP UzIgKi8KK2V4dGVybiBpbnQgY21kX3Jvd3MsIGNtZF9jb2xzOworCisjaWZkZWYgQ0tfVE1QRElS CitleHRlcm4gaW50IGZfdG1wZGlyOyAgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5IGNo YW5nZWQgdGVtcG9yYXJpbHkgKi8KK2V4dGVybiBjaGFyIHNhdmRpcltdOyAgICAgICAgICAgICAg ICAgICAvKiBUZW1wb3JhcnkgZGlyZWN0b3J5ICovCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisK KyNpZm5kZWYgTk9MT0NBTAorZXh0ZXJuIGludCB0dF9jcmQsIHR0X2xmZCwgdHRfZXNjYXBlOwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT0NTRVRTCitleHRlcm4gaW50IGxhbmd1 YWdlLCBuZmlsYywgdGNzciwgdGNzbCwgdGNzX3RyYW5zcCwgZmNoYXJzZXQ7CitleHRlcm4gc3Ry dWN0IGtleXRhYiBmY3N0YWJbXTsKK2V4dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2luZm9bXTsKKyNp Zm5kZWYgTUFDCitleHRlcm4gc3RydWN0IGtleXRhYiB0dGNzdGFiW107CisjZW5kaWYgLyogTUFD ICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCitleHRlcm4gbG9uZyBzcGVlZDsKKworI2lmbmRl ZiBOT1hNSVQKK2V4dGVybiBpbnQgeG1pdGYsIHhtaXRsLCB4bWl0cCwgeG1pdHgsIHhtaXRzLCB4 bWl0dywgeG1pdHQ7CitleHRlcm4gY2hhciB4bWl0YnVmW107CisjZW5kaWYgLyogTk9YTUlUICov CisKK2V4dGVybiBjaGFyICoqeGFyZ3YsICp2ZXJzaW8sICpja3hzeXMsICpkZnR0eSwgKmxwOwor CisjaWZkZWYgRENNREJVRgorZXh0ZXJuIGNoYXIgKmNtZGJ1ZiwgKmF0bWJ1ZjsgICAgICAgICAg IC8qIENvbW1hbmQgYnVmZmVycyAqLworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGNoYXIgKnNhdmJ1 ZjsgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVycyAqLworI2VuZGlmIC8qIE5P U1BMICovCisjZWxzZQorZXh0ZXJuIGNoYXIgY21kYnVmW10sIGF0bWJ1ZltdOyAgICAgICAgIC8q IENvbW1hbmQgYnVmZmVycyAqLworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGNoYXIgc2F2YnVmW107 ICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVycyAqLworI2VuZGlmIC8qIE5PU1BM ICovCisjZW5kaWYgLyogRENNREJVRiAqLworCitleHRlcm4gY2hhciB0b2t0YWJbXSwgdHRuYW1l W10sIHBzYXZlW107CitleHRlcm4gQ0hBUiBzc3RhdGUsIGZlb2w7CitleHRlcm4gaW50IGNtZmxn cywgdGVjaG8sIHJlcGFycywgbmNtZDsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGNtZHRhYltdOwor CisjaWZuZGVmIE5PU0VUS0VZCitLRVkgKmtleW1hcDsKKyNpZm5kZWYgT1MyCisjZGVmaW5lIG1h cGtleSh4KSBrZXltYXBbeF0KKyNlbmRpZiAvKiBPUzIgKi8KK01BQ1JPICptYWNyb3RhYjsKK19Q Uk9UT1RZUCggVk9JRCBzaG9zdHJkZWYsIChDSEFSICopICk7CisjZW5kaWYgLyogTk9TRVRLRVkg Ki8KKworZXh0ZXJuIGludCBjbWRsdmw7CisKKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBzdHJ1Y3Qg bXRhYiAqbWFjdGFiOworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgbWFja2V5W107CitleHRlcm4gc3Ry dWN0IGtleXRhYiB2YXJ0YWJbXSwgZm5jdGFiW10sIGlmdGFiW107CitleHRlcm4gaW50IG1hY2x2 bCwgbm1hYywgbWVjaG8sIGZuZGlhZ3MsIGZuZXJyb3IsIGZuc3VjY2VzcywgbmlmOworI2VuZGlm IC8qIE5PU1BMICovCisKK0ZJTEUgKnRmaWxlW01BWFRBS0VdOyAgICAgICAgICAgICAgICAgICAv KiBUQUtFIGZpbGUgc3RhY2sgKi8KK2NoYXIgKnRmbmFtW01BWFRBS0VdOworaW50IHRmbGluZVtN QVhUQUtFXTsKKworaW50IHRvcGNtZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNt ZHRhYiBpbmRleCBvZiBjdXJyZW50IGNvbW1hbmQgKi8KK2ludCBoYXZldG9rZW4gPSAwOworZXh0 ZXJuIGludCBkYmxxdW87ICAgICAgICAgICAgICAgICAgICAgIC8qIERvdWJsZXF1b3RpbmcgZW5h YmxlZCAqLworCisjaWZkZWYgRENNREJVRiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5p dGlhbGl6YXRpb24gZmlsZXNwZWMgKi8KK2NoYXIgKmtlcm1yYyA9IE5VTEw7CisjZWxzZQorY2hh ciBrZXJtcmNiW0tFUk1SQ0xdOworY2hhciAqa2VybXJjID0ga2VybXJjYjsKKyNlbmRpZiAvKiBE Q01EQlVGICovCisKK2ludCBub2hlcmFsZCA9IDA7CitpbnQgY21fcmV0cnkgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29tbWFuZCByZXRyeSBlbmFibGVkICovCit4eF9zdHJwIHh4c3Ry aW5nID0genpzdHJpbmc7CisKKyNpZm5kZWYgTk9YRkVSCitleHRlcm4gaW50IGRpc3BsYSwgYnll X2FjdGl2ZSwgcHJvdG9jb2wsIHBrdGxvZywgcmVtZmlsZSwgcmVtcGlwZSwgdW5rY3MsCisgIGtl ZXAsIGxmX29wdHMsIGZuY252LCBwa3RwYXVzLCBhdXRvZGwsIHhmcmNhbiwgeGZyY2hyLCB4ZnJu dW0sIHNydnRpbSwKKyAgc3J2ZGlzLCBxdWVyeSwgcmV0cmFucywgc3RyZWFtZWQsIHJlbGlhYmxl LCBjcnVuY2hlZCwgdGltZW91dHMsCisgIGZucnBhdGgsIGF1dG9wYXRoLCBycGFja2V0cywgc3Bh Y2tldHMsIGVwa3RyY3ZkLCBzcnZwaW5nOworCisjaWZkZWYgQ0tfQVVUT0RMCitleHRlcm4gaW50 IGluYXV0b2RsLCBjbWRhZGw7CisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisKKyNpZm5kZWYgTk9T RVJWRVIKK2V4dGVybiBpbnQgZW5fYXNnLCBlbl9jd2QsIGVuX2NweSwgZW5fZGVsLCBlbl9kaXIs IGVuX2ZpbiwgZW5fYnllLCBlbl9yZXQsCisgIGVuX2dldCwgZW5faG9zLCBlbl9xdWUsIGVuX3Jl biwgZW5fc2VuLCBlbl9zZXQsIGVuX3NwYSwgZW5fdHlwLCBlbl93aG8sCisgIGVuX21haSwgZW5f cHJpLCBlbl9ta2QsIGVuX3JtZCwgZW5feGl0LCBlbl9lbmE7CisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KKworZXh0ZXJuIGludCBhdGNhcHIsCisgIGF0ZW5jaSwgYXRlbmNvLCBhdGRhdGksIGF0ZGF0 bywgYXRsZW5pLCBhdGxlbm8sIGF0YmxraSwgYXRibGtvLAorICBhdHR5cGksIGF0dHlwbywgYXRz aWRpLCBhdHNpZG8sIGF0c3lzaSwgYXRzeXNvLCBhdGRpc2ksIGF0ZGlzbzsKKworI2lmZGVmIFNU UkFUVVMKK2V4dGVybiBpbnQgYXRmcm1pLCBhdGZybW8sIGF0Y3JlaSwgYXRjcmVvLCBhdGFjdGks IGF0YWN0bzsKKyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBDS19QRVJNUworZXh0ZXJu IGludCBhdGxwcmksIGF0bHBybywgYXRncHJpLCBhdGdwcm87CisjZW5kaWYgLyogQ0tfUEVSTVMg Ki8KKworI2lmZGVmIENLX0xPR0lOCitleHRlcm4gY2hhciAqIGFub25maWxlOyAgICAgICAgICAg ICAgICAgLyogQW5vbnltb3VzIGxvZ2luIGluaXQgZmlsZSAqLworZXh0ZXJuIGNoYXIgKiBhbm9u cm9vdDsgICAgICAgICAgICAgICAgIC8qIEFub255bW91cyBmaWxlLXN5c3RlbSByb290ICovCitl eHRlcm4gY2hhciAqIHVzZXJmaWxlOyAgICAgICAgICAgICAgICAgLyogRm9yYmlkZGVuIHVzZXIg ZmlsZSAqLworZXh0ZXJuIGludCBpc2d1ZXN0OyAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg Zm9yIGFub255bW91cyB1c2VyICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworI2lmZGVmIERDTURCVUYKK2ludCAqeHF1aWV0ID0gTlVMTDsKK2ludCAqeHZh cmV2ID0gTlVMTDsKKyNlbHNlCitpbnQgeHF1aWV0W0NNRFNUS0xdOworaW50IHh2YXJldltDTURT VEtMXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisKK2NoYXIgKiBwcnN0cmluZ1tDTURTVEtMXTsK KworI2lmbmRlZiBOT1NQTAorCitleHRlcm4gbG9uZyBja19hbGFybTsKK2V4dGVybiBjaGFyIGFs cm1fZGF0ZVtdLCBhbHJtX3RpbWVbXTsKKworLyogTG9jYWwgZGVjbGFyYXRpb25zICovCisKK3N0 YXRpYyBpbnQgbnVsY21kID0gMDsgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBuZXh0IGNt ZCB0byBiZSBpZ25vcmVkICovCisKKy8qIERlZmluaXRpb25zIGZvciBwcmVkZWZpbmVkIG1hY3Jv cyAqLworCisvKiBGaXJzdCwgdGhlIHNpbmdsZS1saW5lIG1hY3JvcywgaW5zdGFsbGVkIHdpdGgg YWRkbWFjKCkuLi4gKi8KKworLyogSUJNLUxJTkVNT0RFIG1hY3JvICovCitjaGFyICptX2libSA9 ICJzZXQgcGFyaXR5IG1hcmssIHNldCBkdXBsIGhhbGYsIHNldCBoYW5kc2ggeG9uLCBzZXQgZmxv dyBub25lIjsKKworLyogRkFUQUwgbWFjcm8gKi8KK2NoYXIgKm1fZmF0ID0gImlmIGRlZiBcXCUx IGVjaG8gXFwlMSwgaWYgbm90ID0gXFx2KGxvY2FsKSAwIGhhbmd1cCwgc3RvcCAxIjsKKworI2lm ZGVmIENLX1NQRUVECisjaWZkZWYgSVJJWDY1CitjaGFyICptX2Zhc3QgPSAic2V0IHdpbiAzMCwg c2V0IHJlYyBwYWNrIDQwMDAsIHNldCBwcmVmaXggY2F1dGlvdXMiOworI2Vsc2UKKyNpZmRlZiBJ UklYCisvKiBCZWNhdXNlIG9mIGJ1ZyBpbiB0ZWxuZXQgc2VydmVyICovCitjaGFyICptX2Zhc3Qg PSAic2V0IHdpbmRvdyAzMCwgc2V0IHJlYyBwYWNrIDQwMDAsIHNldCBzZW5kIHBhY2sgNDAwMCxc Cisgc2V0IHByZWYgY2F1dGlvdXMiOworI2Vsc2UKKyNpZmRlZiBwZHAxMQorY2hhciAqbV9mYXN0 ID0gInNldCB3aW4gMywgc2V0IHJlYyBwYWNrIDEwMjQsIHNldCBwcmVmaXggY2F1dGlvdXMiOwor I2Vsc2UKKyNpZmRlZiBCSUdCVUZPSworY2hhciAqbV9mYXN0ID0gInNldCB3aW4gMzAsIHNldCBy ZWMgcGFjayA0MDAwLCBzZXQgcHJlZml4IGNhdXRpb3VzIjsKKyNlbHNlCitjaGFyICptX2Zhc3Qg PSAic2V0IHdpbiA0LCBzZXQgcmVjIHBhY2sgMjIwMCwgc2V0IHByZWZpeCBjYXV0aW91cyI7Cisj ZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBJUklYICovCisjZW5kaWYgLyogSVJJWDY1 ICovCisjZW5kaWYgLyogcGRwMTEgKi8KKyNpZmRlZiBwZHAxMQorY2hhciAqbV9jYXV0aW91cyA9 ICJzZXQgd2luIDIsIHNldCByZWMgcGFjayA1MTIsIHNldCBwcmVmaXhpbmcgY2F1dGlvdXMiOwor I2Vsc2UKK2NoYXIgKm1fY2F1dGlvdXMgPSAic2V0IHdpbiA0LCBzZXQgcmVjIHBhY2sgMTAwMCwg c2V0IHByZWZpeGluZyBjYXV0aW91cyI7CisjZW5kaWYgLyogcGRwMTEgKi8KK2NoYXIgKm1fcm9i dXN0ID0gInNldCB3aW4gMSwgc2V0IHJlYyBwYWNrIDkwLCBzZXQgcHJlZml4aW5nIGFsbCwgXAor c2V0IHJlbGlhYmxlIG9mZiwgc2V0IGNsZWFyY2hhbm5lbCBvZmYiOworI2Vsc2UKKyNpZmRlZiBC SUdCVUZPSworI2lmZGVmIElSSVg2NQorY2hhciAqbV9mYXN0ID0gInNldCB3aW4gMzAsIHNldCBy ZWMgcGFjayA0MDAwIjsKKyNlbHNlCisjaWZkZWYgSVJJWAorY2hhciAqbV9mYXN0ID0gInNldCB3 aW4gMzAsIHNldCByZWMgcGFjayA0MDAwLCBzZXQgc2VuZCBwYWNrIDQwMDAiOworI2Vsc2UKK2No YXIgKm1fZmFzdCA9ICJzZXQgd2luIDMwLCBzZXQgcmVjIHBhY2sgNDAwMCI7CisjZW5kaWYgLyog SVJJWCAqLworI2VuZGlmIC8qIElSSVg2NSAqLworI2Vsc2UgLyogTm90IEJJR0JVRk9LICovCitj aGFyICptX2Zhc3QgPSAic2V0IHdpbiA0LCBzZXQgcmVjIHBhY2sgMjIwMCI7CisjZW5kaWYgLyog QklHQlVGT0sgKi8KK2NoYXIgKm1fY2F1dGlvdXMgPSAic2V0IHdpbiA0LCBzZXQgcmVjIHBhY2sg MTAwMCI7CitjaGFyICptX3JvYnVzdCA9ICJzZXQgd2luIDEsIHNldCByZWMgcGFjayA5MCwgc2V0 IHJlbGlhYmxlIG9mZiI7CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworI2lmZGVmIFZNUworY2hh ciAqbV9wdXJnZSA9ICJydW4gcHVyZ2UgXFwlKiI7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRl ZiBPUzIKK2NoYXIgKm1fbWFudWFsID0gImJyb3dzZSBcXHYoZXhlZGlyKWRvY3MvbWFudWFsL2tl cm1pdDk1Lmh0bSI7CisjZW5kaWYgLyogT1MyICovCisKKy8qIE5vdyB0aGUgbXVsdGlsaW5lIG1h Y3JvcywgZGVmaW5lZCB3aXRoIGFkZG1tYWMoKS4uLiAqLworCisvKiBGT1IgbWFjcm8gZm9yIFwl aS1zdHlsZSBsb29wIHZhcmlhYmxlcyAoc2VlIGRvZm9yKCkuLi4pICovCisKK2NoYXIgKmZvcl9k ZWZbXSA9IHsgIl9hc3NpZ24gX2ZvclxcdihjbWRsZXZlbCkgeyBfZ2V0YXJncywiLAorImRlZiBc XFxcXFwlMSBcXGZldmFsKFxcJTIpLDpfLi50b3AsaWYgXFwlNSBcXFxcXFwlMSBcXCUzIGdvdG8g Xy4uYm90LCIsCisiXFwlNiw6Xy4uaW5jLGluY3IgXFxcXFxcJTEgXFwlNCxnb3RvIF8uLnRvcCw6 Xy4uYm90LF9wdXRhcmdzfSwiLAorImRlZiBicmVhayBnb3RvIF8uLmJvdCwgZGVmIGNvbnRpbnVl IGdvdG8gXy4uaW5jLCIsCisiZG8gX2ZvclxcdihjbWRsZXZlbCkgXFwlMSBcXCUyIFxcJTMgXFwl NCB7IFxcJTUgfSxfYXNzaWduIF9mb3JcXHYoY21kbGV2ZWwpIiwKKyIifTsKKworLyogVGhpcyBp cyB0aGUgRk9SIG1hY3JvIHdoZW4gdGhlIGxvb3AgdmFyaWFibGUgaXMgaXRzZWxmIGEgbWFjcm8g Ki8KKworY2hhciAqZm96X2RlZltdID0geyAiX2Fzc2lnbiBfZm9yXFx2KGNtZGxldmVsKSB7IF9n ZXRhcmdzLCIsCisiZGVmIFxcJTEgXFxmZXZhbChcXCUyKSw6Xy4udG9wLGlmIFxcJTUgXFwlMSBc XCUzIGdvdG8gXy4uYm90LCIsCisiXFwlNiw6Xy4uaW5jLGluY3IgXFwlMSBcXCU0LGdvdG8gXy4u dG9wLDpfLi5ib3QsX3B1dGFyZ3N9LCIsCisiZGVmIGJyZWFrIGdvdG8gXy4uYm90LCBkZWYgY29u dGludWUgZ290byBfLi5pbmMsIiwKKyJkbyBfZm9yXFx2KGNtZGxldmVsKSBcXCUxIFxcJTIgXFwl MyBcXCU0IHsgXFwlNSB9LF9hc3NpZ24gX2ZvclxcdihjbWRsZXZlbCkiLAorIiJ9OworCisvKiBX SElMRSBtYWNybyAqLworY2hhciAqd2hpbF9kZWZbXSA9IHsgIl9hc3NpZ24gX3doaVxcdihjbWRs ZXZlbCkge19nZXRhcmdzLCIsCisiOl8uLmluYyxcXCUxLFxcJTIsZ290byBfLi5pbmMsOl8uLmJv dCxfcHV0YXJnc30sIiwKKyJfZGVmIGJyZWFrIGdvdG8gXy4uYm90LCBfZGVmIGNvbnRpbnVlIGdv dG8gXy4uaW5jLCIsCisiZG8gX3doaVxcdihjbWRsZXZlbCksX2Fzc2lnbiBfd2hpXFx2KGNtZGxl dmVsKSIsCisiIn07CisKKy8qIFNXSVRDSCBtYWNybyAqLworY2hhciAqc3dfZGVmW10gPSB7ICJf YXNzaWduIF9zd19cXHYoY21kbGV2ZWwpIHtfZ2V0YXJncywiLAorIl9mb3J3YXJkIHtcXCUxfSxc XCUyLDpkZWZhdWx0LDpfLi5ib3QsX3B1dGFyZ3N9LF9kZWYgYnJlYWsgZ290byBfLi5ib3QsIiwK KyJkbyBfc3dfXFx2KGNtZGxldmVsKSxfYXNzaWduIF9zd19cXHYoY21kbGV2ZWwpIiwKKyIifTsK KworLyogWElGIG1hY3JvICovCitjaGFyICp4aWZfZGVmW10gPSB7CisiX2Fzc2lnbiBfaWZcXHYo Y21kbGV2ZWwpIHtfZ2V0YXJncyxcXCUxLF9wdXRhcmdzfSwiLAorImRvIF9pZlxcdihjbWRsZXZl bCksX2Fzc2lnbiBfaWZcXHYoY21kbGV2ZWwpIiwKKyIifTsKKworLyoKKyAgVmFyaWFibGVzIGRl Y2xhcmVkIGhlcmUgZm9yIHVzZSBieSBvdGhlciBja3V1cyouYyBtb2R1bGVzLgorICBTcGFjZSBp cyBhbGxvY2F0ZWQgaGVyZSB0byBzYXZlIHJvb20gaW4gY2t1dXNyLmMuCisqLworI2lmZGVmIERD TURCVUYKK3N0cnVjdCBjbWRwdHIgKmNtZHN0azsKK2ludAorICAqaWZjbWQgID0gTlVMTCwKKyAg KmNvdW50ICA9IE5VTEwsCisgICppZnRlc3QgPSBOVUxMLAorICAqaW50aW1lID0gTlVMTCwKKyAg KmlucGNhcyA9IE5VTEwsCisgICp0YWtlcnIgPSBOVUxMLAorICAqbWVycm9yID0gTlVMTDsKKyNl bHNlCitzdHJ1Y3QgY21kcHRyIGNtZHN0a1tDTURTVEtMXTsKK2ludCBpZmNtZFtDTURTVEtMXSwg Y291bnRbQ01EU1RLTF0sIGlmdGVzdFtDTURTVEtMXSwgaW50aW1lW0NNRFNUS0xdLAorICBpbnBj YXNbQ01EU1RLTF0sIHRha2VycltDTURTVEtMXSwgbWVycm9yW0NNRFNUS0xdOworI2VuZGlmIC8q IERDTURCVUYgKi8KKworLyogTWFjcm8gc3RhY2sgKi8KKworI2lmZGVmIENPTU1FTlQKK2NoYXIg KnRvcGxpbmUgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiBQcm9ncmFtIGludm9jYXRpb24g YXJnIGxpbmUgKi8KK2NoYXIgKm1fbGluZVtNQUNMRVZFTF0gPSB7IE5VTEwsIE5VTEwgfTsgLyog U3RhY2sgb2YgbWFjcm8gaW52b2NhdGlvbiBsaW5lcyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KworY2hhciAqKm1feGFyZ1tNQUNMRVZFTF07ICAgICAgICAgICAgICAgIC8qIFBvaW50ZXJzIHRv IGFyZyB2ZWN0b3IgYXJyYXlzICovCitpbnQgbl94YXJnW01BQ0xFVkVMXTsgICAgICAgICAgICAg ICAgICAgLyogU2l6ZXMgb2YgYXJnIHZlY3RvciBhcnJheXMgKi8KK2NoYXIgKm1fYXJnW01BQ0xF VkVMXVtOQVJHU107ICAgICAgICAgICAvKiBBcmdzIG9mIGVhY2ggbGV2ZWwgKi8KK2ludCBtYWNh cmdjW01BQ0xFVkVMXTsgICAgICAgICAgICAgICAgICAvKiBBcmdjIG9mIGVhY2ggbGV2ZWwgKi8K K2NoYXIgKm1hY3BbTUFDTEVWRUxdOyAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHBvc2l0 aW9uIGluIGVhY2ggbWFjcm8gKi8KK2NoYXIgKm1hY3hbTUFDTEVWRUxdOyAgICAgICAgICAgICAg ICAgICAvKiBCZWdpbm5pbmcgb2YgZWFjaCBtYWNybyBkZWYgKi8KK2NoYXIgKm1ydmFsW01BQ0xF VkVMXTsgICAgICAgICAgICAgICAgICAvKiBSRVRVUk4gdmFsdWUgYXQgZWFjaCBsZXZlbCAqLwor aW50IGxhc3RjbWRbTUFDTEVWRUxdOyAgICAgICAgICAgICAgICAgIC8qIExhc3QgY29tbWFuZCBh dCBlYWNoIGxldmVsICovCitpbnQgdG9wYXJnYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg LyogQXJnYyBhdCB0b3AgbGV2ZWwgKi8KK2NoYXIgKip0b3B4YXJnID0gTlVMTDsgICAgICAgICAg ICAgICAgICAvKiBBcmd2IGF0IHRvcCBsZXZlbCAqLworY2hhciAqdG9wYXJnW01BWEFSR0xJU1Qr Ml07CisKKy8qIEdsb2JhbCBWYXJpYWJsZXMgKi8KKworY2hhciAqZ192YXJbR1ZBUlMrMV07ICAg ICAgICAgICAgICAgICAgIC8qIEdsb2JhbCBcJWEuLnogcG9pbnRlcnMgKi8KK2V4dGVybiBjaGFy IHZhcm5hbVtdOyAgICAgICAgICAgICAgICAgICAvKiBcJXggdmFyaWFibGUgbmFtZSBidWZmZXIg Ki8KKworLyogQXJyYXlzIC0tIERpbWVuc2lvbiBtdXN0IGJlICd6JyAtIEFSUkFZQkFTRSArIDEg Ki8KKy8qIE5vdGU6IGFfbGlua1t4XSA8IDAgbWVhbnMgbm8gbGluazsgPj0gMCBpcyBhIGxpbmsg Ki8KKworY2hhciAqKmFfcHRyWzMyXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFycmF5IHBv aW50ZXJzLCBmb3IgYXJyYXlzIGEteiAqLworaW50IGFfZGltWzMyXTsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERpbWVuc2lvbnMgZm9yIGVhY2ggYXJyYXkgKi8KK2ludCBhX2xpbmtbMzJd OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaW5rIChpbmRleCBvZiBsaW5rZWQtdG8tYXJy YXkpICovCisKK2NoYXIgKiphYV9wdHJbQ01EU1RLTF1bMzJdOyAgICAgICAgICAgICAvKiBBcnJh eSBzdGFjayBmb3IgYXV0b21hdGljIGFycmF5cyAqLworaW50IGFhX2RpbVtDTURTVEtMXVszMl07 ICAgICAgICAgICAgICAgIC8qIERpbWVuc2lvbnMgZm9yIGVhY2ggYXJyYXkgKi8KKworLyogSU5Q VVQgY29tbWFuZCBidWZmZXJzIGFuZCB2YXJpYWJsZXMgKi8KKworY2hhciAqIGlucGJ1ZiA9IE5V TEw7ICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgSU5QVVQgYW5kIFJFSU5QVVQgKi8K K2V4dGVybiBjaGFyICogaW5wYnA7ICAgICAgICAgICAgICAgICAgICAvKiBHbG9iYWwvc3RhdGlj IHBvaW50ZXIgdG8gaXQgICovCitjaGFyIGluY2hhclsyXSA9IHsgTlVMLCBOVUwgfTsgICAgICAg ICAgLyogTGFzdCBjaGFyYWN0ZXIgdGhhdCB3YXMgSU5QVVQgKi8KK2ludCAgaW5jb3VudCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBjaGFyYWN0ZXIgY291bnQgKi8KK2V4dGVy biBpbnQgaW5zdGF0dXM7ICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBzdGF0dXMgKi8KK3N0 YXRpYyBjaGFyICogaV90ZXh0W10gPSB7ICAgICAgICAgICAgICAvKiBJTlBVVCBzdGF0dXMgdGV4 dCAqLworICAgICJzdWNjZXNzIiwgInRpbWVvdXQiLCAiaW50ZXJydXB0ZWQiLCAiaW50ZXJuYWwg ZXJyb3IiLCAiaS9vIGVycm9yIgorfTsKKworY2hhciBsYmxidWZbTEJMU0laXTsgICAgICAgICAg ICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgbGFiZWxzICovCisKKyNlbHNlICAvKiBOT1NQTCAqLwor CitpbnQgdGFrZXJyW01BWFRBS0VdOworI2VuZGlmIC8qIE5PU1BMICovCisKK3N0YXRpYyBjaGFy ICpwcmV2ZGlyID0gTlVMTDsKKworaW50IHBhY2luZyA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE9VVFBVVCBwYWNpbmcgKi8KKworY2hhciAqdHA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFRlbXBvcmFyeSBidWZmZXIgcG9pbnRlciAqLworCitpbnQgdGltZWxpbWl0 ID0gMCwgYXNrdGltZXIgPSAwOyAgICAgICAgLyogVGltZXJzIGZvciB0aW1lLWxpbWl0ZWQgY29t bWFuZHMgKi8KKworI2lmZGVmIENLX0FQQyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFw cGxpY2F0aW9uIFByb2dyYW0gQ29tbWFuZCAoQVBDKSAqLworaW50IGFwY2FjdGl2ZSA9IEFQQ19J TkFDVElWRTsKK2ludCBhcGNzdGF0dXMgPSBBUENfT0ZGOyAgICAgICAgICAgICAgICAvKiBPRkYg YnkgZGVmYXVsdCBldmVyeXdoZXJlICovCisjaWZkZWYgRENNREJVRgorY2hhciAqYXBjYnVmOwor I2Vsc2UKK2NoYXIgYXBjYnVmW0FQQ0JVRkxFTl07CisjZW5kaWYgLyogRENNREJVRiAqLworI2Vu ZGlmIC8qIENLX0FQQyAqLworCitleHRlcm4gY2hhciBwa3RmaWxbXSwKKyNpZmRlZiBERUJVRwor ICBkZWJmaWxbXSwKKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIFRMT0cKKyAgdHJhZmlsW10s CisjZW5kaWYgLyogVExPRyAqLworICBzZXNmaWxbXTsKKworI2lmbmRlZiBOT0ZSSUxMUworZXh0 ZXJuIGludCBybWFpbGYsIHJwcmludGY7ICAgICAgICAgICAgIC8qIFJFTU9URSBNQUlMICYgUFJJ TlQgaXRlbXMgKi8KK2V4dGVybiBjaGFyIG9wdGJ1ZltdOworI2VuZGlmIC8qIE5PRlJJTExTICov CisKK2V4dGVybiBpbnQgbm9pbml0OwkJCS8qIEZsYXQgdG8gc2tpcCBpbml0IGZpbGUgKi8KKwor I2lmbmRlZiBOT1NQTAorc3RhdGljIHN0cnVjdCBrZXl0YWIga2NkdGFiW10gPSB7CS8qIFN5bWJv bGljIGRpcmVjdG9yeSBuYW1lcyAqLworI2lmZGVmIE5UCisgICAgeyAiYXBwZGF0YSIsICBWTl9B UFBEQVRBLCAgIDAgfSwKKyAgICB7ICJjb21tb24iLCAgIFZOX0NPTU1PTiwgICAgMCB9LAorICAg IHsgImRlc2t0b3AiLCAgVk5fREVTS1RPUCwgICAwIH0sCisjZW5kaWYgLyogTlQgKi8KKyAgICB7 ICJkb3dubG9hZCIsIFZOX0RMRElSLCAgICAgMCB9LAorI2lmZGVmIE9TMk9SVU5JWAorICAgIHsg ImV4ZWRpciIsICAgVk5fRVhFRElSLCAgICAwIH0sCisjZW5kaWYgLyogT1MyT1JVTklYICovCisg ICAgeyAiaG9tZSIsICAgICBWTl9IT01FLCAgICAgIDAgfSwKKyAgICB7ICJpbmlkaXIiLCAgIFZO X0lOSSwgICAgICAgMCB9LAorI2lmZGVmIFVOSVgKKyAgICB7ICJsb2NrZGlyIiwgIFZOX0xDS0RJ UiwgICAgMCB9LAorI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBOVAorICAgIHsgIm15X2RvY3Vt ZW50cyIsVk5fUEVSU09OQUwsICAwIH0sCisgICAgeyAicGVyc29uYWwiLCBWTl9QRVJTT05BTCwg IENNX0lOViB9LAorI2VuZGlmIC8qIE5UICovCisgICAgeyAic3RhcnR1cCIsICBWTl9TVEFSLCAg ICAgIDAgfSwKKyAgICB7ICJ0ZXh0ZGlyIiwgIFZOX1RYVERJUiwgICAgMCB9LAorICAgIHsgInRt cGRpciIsICAgVk5fVEVNUCwgICAgICAwIH0KK307CitzdGF0aWMgaW50IG5rY2R0YWIgPSAoc2l6 ZW9mKGtjZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIE5PU1BMICov CisKKyNpZm5kZWYgTk9TUEwKK19QUk9UT1RZUCggVk9JRCBmcmVlbG9jYWwsIChpbnQpICk7Citf UFJPVE9UWVAoIHN0YXRpYyBDS19PRkZfVCBleHBvbiwgKENLX09GRl9ULCBDS19PRkZfVCkgKTsK K19QUk9UT1RZUCggc3RhdGljIENLX09GRl9UIGdjZCwgKENLX09GRl9ULCBDS19PRkZfVCkgKTsK K19QUk9UT1RZUCggc3RhdGljIENLX09GRl9UIGZhY3QsIChDS19PRkZfVCkgKTsKKworaW50ICAg ICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBtYWNybyBkYXRhIHN0cnVjdHVyZXMuICov CittYWNpbmkoKSB7ICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBtYWN0YWIgYW5kIHByZXNldCB0 aGUgZmlyc3QgZWxlbWVudC4gKi8KKyAgICBpbnQgaTsKKyAgICBpZiAoIShtYWN0YWIgPSAoc3Ry dWN0IG10YWIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRhYikgKiBNQUNfTUFYKSkpCisgICAg ICByZXR1cm4oLTEpOworICAgIG1hY3RhYlswXS5rd2QgPSBOVUxMOworICAgIG1hY3RhYlswXS5t dmFsID0gTlVMTDsKKyAgICBtYWN0YWJbMF0uZmxncyA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8 IE1BQ0xFVkVMOyBpKyspCisgICAgICBsb2NhbGhlYWRbaV0gPSBOVUxMOworICAgIHJldHVybigw KTsKK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCisvKiAgQyBNIEQgUyBSIEMgIC0tICBSZXR1cm5z IGN1cnJlbnQgY29tbWFuZCBzb3VyY2UgICovCisKKy8qICAwID0gdG9wIGxldmVsLCAxID0gZmls ZSwgMiA9IG1hY3JvLCAtMSA9IGVycm9yIChzaG91bGRuJ3QgaGFwcGVuKSAqLworCisvKgorICBB cyBvZiAxOSBBdWcgMjAwMCB0aGlzIHJvdXRpbmUgaXMgb2Jzb2xldGUuICBUaGUgc2NhbGFyIGds b2JhbCB2YXJpYWJsZQorICB4Y21kc3JjIGNhbiBiZSBjaGVja2VkIGluc3RlYWQgdG8gc2F2ZSB0 aGUgb3ZlcmhlYWQgb2YgYSBmdW5jdGlvbiBjYWxsLgorKi8KK2ludAorY21kc3JjKCkgeworI2lm ZGVmIENPTU1FTlQKKyAgICByZXR1cm4oeGNtZHNyYyk7CisjZWxzZQorI2lmbmRlZiBOT1NQTAor ICAgIGlmIChjbWRsdmwgPT0gMCkKKyAgICAgIHJldHVybigwKTsKKyAgICBlbHNlIGlmIChjbWRz dGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKQorICAgICAgcmV0dXJuKDIpOworICAgIGVsc2UgaWYg KGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfVEYpCisgICAgICByZXR1cm4oMSk7CisgICAgZWxz ZQorICAgICAgcmV0dXJuKC0xKTsKKyNlbHNlCisgICAgaWYgKHRsZXZlbCA8IDApCisgICAgICBy ZXR1cm4oMCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIE5PU1BMICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorCisvKiAgQyBNIEQgSSBOIEkgIC0tICBJbml0aWFs aXplIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciAgKi8KKworc3RhdGljIGludCBjbWRp bml0ZWQgPSAwOyAgICAgICAgICAgICAgIC8qIENvbW1hbmQgcGFyc2VyIGluaXRpYWxpemVkICov CitleHRlcm4gaW50IGNtZGludDsgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0cyBh cmUgYWxsb3dlZCAqLworI2lmZGVmIENLX0FVVE9ETAoraW50IGNtZGFkbCA9IDE7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEF1dG9kb3dubG9hZCAqLworI2Vsc2UKK2ludCBjbWRhZGwgPSAw OworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworCitjaGFyICoga19pbmZvX2RpciA9IE5VTEw7ICAg ICAgICAgICAgICAgLyogV2hlcmUgdG8gZmluZCB0ZXh0IGZpbGVzICovCisjaWZkZWYgVU5JWAor c3RhdGljIGNoYXIgKiB0eHRkaXJbXSA9IHsKKyAgICAiL3Vzci9sb2NhbC9kb2MvIiwgICAgICAg ICAgICAgICAgICAvKiBMaW51eCwgU3VuT1MsIC4uLiAqLworICAgICIvdXNyL3NoYXJlL2xpYi8i LCAgICAgICAgICAgICAgICAgIC8qIEhQLVVYIDEwLnh4Li4uICovCisgICAgIi91c3Ivc2hhcmUv ZG9jLyIsICAgICAgICAgICAgICAgICAgLyogT3RoZXIgcG9zc2liaWxpdGllcy4uLiAqLworICAg ICIvdXNyL2xvY2FsL2xpYi8iLCAgICAgICAgICAgICAgICAgIC8qIE5PVEU6IEVhY2ggb2YgdGhl c2UgaXMgdHJpZWQgKi8KKyAgICAiL3Vzci9sb2NhbC9zaGFyZS8iLCAgICAgICAgICAgICAgICAv KiBhcyBpcywgYW5kIGFsc28gd2l0aCBhIGtlcm1pdCAqLworICAgICIvdXNyL2xvY2FsL3NoYXJl L2RvYy8iLCAgICAgICAgICAgIC8qIHN1YmRpcmVjdG9yeS4gKi8KKyAgICAiL3Vzci9sb2NhbC9z aGFyZS9saWIvIiwKKyAgICAiL29wdC9rZXJtaXQvIiwgICAgICAgICAgICAgICAgICAgICAvKiBT b2xhcmlzICovCisgICAgIi9vcHQva2VybWl0L2RvYy8iLAorICAgICIvb3B0LyIsCisgICAgIi91 c3IvZG9jLyIsCisgICAgIi9kb2MvIiwKKyAgICAiIgorfTsKKyNlbmRpZiAvKiBVTklYICovCisK Ky8qCisgIGxvb2t1cCgpIGNhY2hlIHRvIHNwZWVkIHVwIHNjcmlwdCBleGVjdXRpb24uCisKKyAg VGhpcyBpcyBhIHN0YXRpYyBjYWNoZS4gIEl0ZW1zIGFyZSBzdG9yZWQgaW4gZGVjcmVhc2luZyBm cmVxdWVuY3kgb2YKKyAgcmVmZXJlbmNlIGJhc2VkIG9uIHN0YXRpc3RpY3MgZnJvbSBhIHJhbmdl IG9mIHNjcmlwdHMuICBUaGlzIGdpdmVzCisgIGJldHRlciBwZXJmb3JtYW5jZSB0aGFuIGEgZHlu YW1pYyBjYWNoZSwgd2hpY2ggd291bGQgcmVxdWlyZSBhIGxvdCBtb3JlCisgIGNvZGUgYW5kIGFs c28gd291bGQgcmVxdWlyZSBzeXN0ZW0tZGVwZW5kZW50IGVsZW1lbnRzIGluY2x1ZGluZyBzeXN0 ZW0KKyAgY2FsbHMgKGUuZy4gdG8gZ2V0IHN1YnNlY29uZCB0aW1lcyBmb3IgZW50cnkgYWdpbmcp LgorKi8KKyNpZmRlZiBVU0VfTFVDQUNIRSAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgaW4g Y2t1dXNyLmggKi8KKyNkZWZpbmUgTFVDQUNIRSAzMiAgICAgICAgICAgICAgICAgICAgICAvKiBD aGFuZ2UgdGhpcyB0byByZWR1Y2UgY2FjaGUgc2l6ZSAqLworaW50IGx1c2l6ZSA9IDA7CitjaGFy ICogbHVjbWRbTFVDQUNIRV07CitpbnQgbHV2YWxbTFVDQUNIRV07CitpbnQgbHVpZHhbTFVDQUNI RV07CitzdHJ1Y3Qga2V5dGFiICogbHV0YWJbTFVDQUNIRV07CisjZW5kaWYgLyogVVNFX0xVQ0FD SEUgKi8KKworc3RhdGljIFZPSUQKK2x1aW5pdCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJbml0aWFsaXplIGxvb2t1cCgpIGNhY2hlICovCisgICAgaW50IHgsIHk7CisKKyNp ZmRlZiBVU0VfTFVDQUNIRQorICAgIHggPSBsb29rdXAoY21kdGFiLCJpZiIsbmNtZCwmeSk7Cisg ICAgbHVjbWRbbHVzaXplXSA9ICJpZiI7CisgICAgbHV2YWxbbHVzaXplXSA9IHg7CisgICAgbHVp ZHhbbHVzaXplXSA9IHk7CisgICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKKyAgICBpZiAoKyts dXNpemUgPiBMVUNBQ0hFKSByZXR1cm47CisKKyAgICB4ID0gbG9va3VwKGlmdGFiLCJub3QiLG5p ZiwmeSk7CisgICAgbHVjbWRbbHVzaXplXSA9ICJub3QiOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4 OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5OworICAgIGx1dGFiW2x1c2l6ZV0gPSBpZnRhYjsKKyAg ICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47CisKKyAgICB4ID0gbG9va3VwKHZhcnRh YiwiY21kbGV2ZWwiLG52YXJzLCZ5KTsKKyAgICBsdWNtZFtsdXNpemVdID0gImNtZGxldmVsIjsK KyAgICBsdXZhbFtsdXNpemVdID0geDsKKyAgICBsdWlkeFtsdXNpemVdID0geTsKKyAgICBsdXRh YltsdXNpemVdID0gdmFydGFiOworICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsK KworICAgIHggPSBsb29rdXAoY21kdGFiLCJnb3RvIixuY21kLCZ5KTsKKyAgICBsdWNtZFtsdXNp emVdID0gImdvdG8iOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAgIGx1aWR4W2x1c2l6ZV0g PSB5OworICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7CisgICAgaWYgKCsrbHVzaXplID4gTFVD QUNIRSkgcmV0dXJuOworCisgICAgeCA9IGxvb2t1cChpZnRhYiwiPiIsbmlmLCZ5KTsKKyAgICBs dWNtZFtsdXNpemVdID0gIj4iOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAgIGx1aWR4W2x1 c2l6ZV0gPSB5OworICAgIGx1dGFiW2x1c2l6ZV0gPSBpZnRhYjsKKyAgICBpZiAoKytsdXNpemUg PiBMVUNBQ0hFKSByZXR1cm47CisKKyAgICB4ID0gbG9va3VwKGNtZHRhYiwiaW5jciIsbmNtZCwm eSk7CisgICAgbHVjbWRbbHVzaXplXSA9ICJpbmNyIjsKKyAgICBsdXZhbFtsdXNpemVdID0geDsK KyAgICBsdWlkeFtsdXNpemVdID0geTsKKyAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOworICAg IGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKKworICAgIHggPSBsb29rdXAoY21kdGFi LCJkZWYiLG5jbWQsJnkpOworICAgIGx1Y21kW2x1c2l6ZV0gPSAiZGVmIjsKKyAgICBsdXZhbFts dXNpemVdID0geDsKKyAgICBsdWlkeFtsdXNpemVdID0geTsKKyAgICBsdXRhYltsdXNpemVdID0g Y21kdGFiOworICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKKworICAgIHggPSBs b29rdXAoY21kdGFiLCJfYXNzaWduIixuY21kLCZ5KTsKKyAgICBsdWNtZFtsdXNpemVdID0gIl9h c3NpZ24iOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5Owor ICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7CisgICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkg cmV0dXJuOworCisgICAgeCA9IGxvb2t1cChjbWR0YWIsImVjaG8iLG5jbWQsJnkpOworICAgIGx1 Y21kW2x1c2l6ZV0gPSAiZWNobyI7CisgICAgbHV2YWxbbHVzaXplXSA9IHg7CisgICAgbHVpZHhb bHVzaXplXSA9IHk7CisgICAgbHV0YWJbbHVzaXplXSA9IGNtZHRhYjsKKyAgICBpZiAoKytsdXNp emUgPiBMVUNBQ0hFKSByZXR1cm47CisKKyAgICB4ID0gbG9va3VwKGZuY3RhYiwiZXZhbCIsbmZ1 bmNzLCZ5KTsKKyAgICBsdWNtZFtsdXNpemVdID0gImV2YWwiOworICAgIGx1dmFsW2x1c2l6ZV0g PSB4OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5OworICAgIGx1dGFiW2x1c2l6ZV0gPSBmbmN0YWI7 CisgICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOworCisgICAgeCA9IGxvb2t1cChm bmN0YWIsImxpdCIsbmZ1bmNzLCZ5KTsKKyAgICBsdWNtZFtsdXNpemVdID0gImxpdCI7CisgICAg bHV2YWxbbHVzaXplXSA9IHg7CisgICAgbHVpZHhbbHVzaXplXSA9IHk7CisgICAgbHV0YWJbbHVz aXplXSA9IGZuY3RhYjsKKyAgICBpZiAoKytsdXNpemUgPiBMVUNBQ0hFKSByZXR1cm47CisKKyAg ICB4ID0gbG9va3VwKGNtZHRhYiwiZG8iLG5jbWQsJnkpOworICAgIGx1Y21kW2x1c2l6ZV0gPSAi ZG8iOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAgIGx1aWR4W2x1c2l6ZV0gPSB5OworICAg IGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7CisgICAgaWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0 dXJuOworCisgICAgeCA9IGxvb2t1cChjbWR0YWIsIl9nZXRhcmdzIixuY21kLCZ5KTsKKyAgICBs dWNtZFtsdXNpemVdID0gIl9nZXRhcmdzIjsKKyAgICBsdXZhbFtsdXNpemVdID0geDsKKyAgICBs dWlkeFtsdXNpemVdID0geTsKKyAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOworICAgIGlmICgr K2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKKworICAgIHggPSBsb29rdXAoaWZ0YWIsIjwiLG5p ZiwmeSk7CisgICAgbHVjbWRbbHVzaXplXSA9ICI8IjsKKyAgICBsdXZhbFtsdXNpemVdID0geDsK KyAgICBsdWlkeFtsdXNpemVdID0geTsKKyAgICBsdXRhYltsdXNpemVdID0gaWZ0YWI7CisgICAg aWYgKCsrbHVzaXplID4gTFVDQUNIRSkgcmV0dXJuOworCisgICAgeCA9IGxvb2t1cChjbWR0YWIs Il9wdXRhcmdzIixuY21kLCZ5KTsKKyAgICBsdWNtZFtsdXNpemVdID0gIl9wdXRhcmdzIjsKKyAg ICBsdXZhbFtsdXNpemVdID0geDsKKyAgICBsdWlkeFtsdXNpemVdID0geTsKKyAgICBsdXRhYlts dXNpemVdID0gY21kdGFiOworICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUpIHJldHVybjsKKwor ICAgIHggPSBsb29rdXAoY21kdGFiLCJhc2ciLG5jbWQsJnkpOworICAgIGx1Y21kW2x1c2l6ZV0g PSAiYXNnIjsKKyAgICBsdXZhbFtsdXNpemVdID0geDsKKyAgICBsdWlkeFtsdXNpemVdID0geTsK KyAgICBsdXRhYltsdXNpemVdID0gY21kdGFiOworICAgIGlmICgrK2x1c2l6ZSA+IExVQ0FDSEUp IHJldHVybjsKKworICAgIHggPSBsb29rdXAoY21kdGFiLCJlbHNlIixuY21kLCZ5KTsKKyAgICBs dWNtZFtsdXNpemVdID0gImVsc2UiOworICAgIGx1dmFsW2x1c2l6ZV0gPSB4OworICAgIGx1aWR4 W2x1c2l6ZV0gPSB5OworICAgIGx1dGFiW2x1c2l6ZV0gPSBjbWR0YWI7CisjZW5kaWYgLyogVVNF X0xVQ0FDSEUgKi8KK30KKworVk9JRAorY21kaW5pKCkgeworICAgIGludCBpID0gMCwgeCA9IDAs IHkgPSAwLCB6ID0gMCwgc2tpcCA9IDA7CisgICAgY2hhciAqIHA7CisjaWZkZWYgVFRTUERMSVNU CisgICAgbG9uZyAqIHNzID0gTlVMTDsKKyAgICBleHRlcm4gaW50IG5zcGQ7CisgICAgZXh0ZXJu IHN0cnVjdCBrZXl0YWIgKiBzcGR0YWI7CisjZW5kaWYgLyogVFRTUERMSVNUICovCisKKyNpZm5k ZWYgTk9TUEwKKy8qCisgIE9uIHN0YWNrIHRvIGFsbG93IHJlY3Vyc2lvbiEKKyovCisgICAgY2hh ciB2bmFtYnVmW1ZOQU1MXTsgICAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciB2YXJpYWJsZSBu YW1lcyAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICBpZiAoY21kaW5pdGVkKSAgICAgICAg ICAgICAgICAgICAgICAvKiBBbHJlYWR5IGluaXRpYWxpemVkICovCisgICAgICByZXR1cm47ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgZG8gaXQgYWdhaW4gKi8KKworICAgIGZv ciAoaSA9IDA7IGkgPCBDTURTVEtMOyBpKyspICAgICAgIC8qIFByb21wdCBzdHJpbmdzIGZvciBl YWNoICovCisgICAgICBwcnN0cmluZ1tpXSA9IE5VTEw7ICAgICAgICAgICAgICAgLyogY29tbWFu ZCBsZXZlbCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBwID0gZ2V0ZW52KCJLX0NIQVJTRVQi KTsgICAgICAgICAgICAvKiBTZXQgZGVmYXVsdCBmaWxlIGNoYXJhY3RlciBzZXQgKi8KKyAgICBp ZiAocCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcm9tIGVudmlyb25tZW50ICov CisgICAgICAgIHggPSBsb29rdXAoZmNzdGFiLHAsbmZpbGMsJnkpOworICAgICAgICBpZiAoeCA+ IC0xKQorICAgICAgICAgIGZjaGFyc2V0ID0geDsKKyAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAq LworCisgICAgcCA9IGdldGVudigiS19JTkZPX0RJUkVDVE9SWSIpOyAgICAgLyogRmluZCBLZXJt aXQgaW5mbyBkaXJlY3RvcnkgKi8KKyAgICBpZiAocCAmJiAqcCAmJiBzdHJsZW4ocCkgPD0gQ0tN QVhQQVRIKQorICAgICAgbWFrZXN0cigma19pbmZvX2RpcixwKTsKKyAgICBpZiAoIWtfaW5mb19k aXIpIHsKKyAgICAgICAgcCA9IGdldGVudigiS19JTkZPX0RJUiIpOworICAgICAgICBpZiAocCAm JiAqcCAmJiBzdHJsZW4ocCkgPD0gQ0tNQVhQQVRIKQorICAgICAgICAgIG1ha2VzdHIoJmtfaW5m b19kaXIscCk7CisgICAgfQorI2lmZGVmIFVOSVgKKyAgICBpZiAoa19pbmZvX2RpcikgeyAgICAg ICAgICAgICAgICAgICAvKiBMb29rIGZvciBLZXJtaXQgZG9jcyBkaXJlY3RvcnkgKi8KKyAgICAg ICAgaWYgKHpjaGtpKGtfaW5mb19kaXIpID09IC0yKSB7CisgICAgICAgICAgICBjaGFyIHhidWZb Q0tNQVhQQVRIKzMyXSwgKnMgPSAiIjsKKyAgICAgICAgICAgIGlmIChja3JjaGFyKGtfaW5mb19k aXIpICE9ICcvJykKKyAgICAgICAgICAgICAgcyA9ICIvIjsKKyAgICAgICAgICAgIGNrbWFrbXNn KHhidWYsQ0tNQVhQQVRIKzMyLGtfaW5mb19kaXIscywiY2t1YndyLnR4dCIsTlVMTCk7CisgICAg ICAgICAgICBpZiAoemNoa2koeGJ1ZikgPCAwKQorICAgICAgICAgICAgICBtYWtlc3RyKCZrX2lu Zm9fZGlyLE5VTEwpOworICAgICAgICB9CisgICAgfQorICAgIGlmICgha19pbmZvX2Rpcikgewor ICAgICAgICBjaGFyIHhidWZbQ0tNQVhQQVRIKzMyXTsKKyAgICAgICAgaW50IGk7CisgICAgICAg IGZvciAoaSA9IDA7ICoodHh0ZGlyW2ldKTsgaSsrKSB7CisgICAgICAgICAgICBja21ha21zZyh4 YnVmLENLTUFYUEFUSCszMix0eHRkaXJbaV0sImNrdWJ3ci50eHQiLE5VTEwsTlVMTCk7CisgICAg ICAgICAgICBpZiAoemNoa2koeGJ1ZikgPiAwKSB7CisgICAgICAgICAgICAgICAgbWFrZXN0cigm a19pbmZvX2Rpcix0eHRkaXJbaV0pOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImtfaW5m b19kaXIgMSIsa19pbmZvX2RpciwwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGNrbWFrbXNnKHhidWYsQ0tNQVhQQVRIKzMyLAorICAgICAgICAg ICAgICAgICAgICAgdHh0ZGlyW2ldLCJrZXJtaXQvIiwiY2t1YndyLnR4dCIsTlVMTCk7CisgICAg ICAgICAgICBpZiAoemNoa2koeGJ1ZikgPiAwKSB7CisgICAgICAgICAgICAgICAgY2ttYWttc2co eGJ1ZixDS01BWFBBVEgrMzIsdHh0ZGlyW2ldLCJrZXJtaXQvIixOVUxMLE5VTEwpOworICAgICAg ICAgICAgICAgIG1ha2VzdHIoJmtfaW5mb19kaXIseGJ1Zik7CisgICAgICAgICAgICAgICAgZGVi dWcoRjExMCwia19pbmZvX2RpciAyIixrX2luZm9fZGlyLDApOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ttYWttc2coeGJ1ZixDS01BWFBBVEgr MzIsCisgICAgICAgICAgICAgICAgICAgICB0eHRkaXJbaV0sImNrZXJtaXQvIiwiY2t1YndyLnR4 dCIsTlVMTCk7CisgICAgICAgICAgICBpZiAoemNoa2koeGJ1ZikgPiAwKSB7CisgICAgICAgICAg ICAgICAgY2ttYWttc2coeGJ1ZixDS01BWFBBVEgrMzIsdHh0ZGlyW2ldLCJja2VybWl0LyIsTlVM TCxOVUxMKTsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZrX2luZm9fZGlyLHhidWYpOworICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImtfaW5mb19kaXIgMyIsa19pbmZvX2RpciwwKTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp ZiAoa19pbmZvX2RpcikgeyAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBpdCBlbmRzIHdpdGgg Ii8iICovCisgICAgICAgICAgICBpZiAoY2tyY2hhcihrX2luZm9fZGlyKSAhPSAnLycpIHsKKyAg ICAgICAgICAgICAgICBjaGFyIHhidWZbQ0tNQVhQQVRIKzMyXTsKKyAgICAgICAgICAgICAgICBj a21ha21zZyh4YnVmLENLTUFYUEFUSCszMixrX2luZm9fZGlyLCIvIixOVUxMLE5VTEwpOworICAg ICAgICAgICAgICAgIG1ha2VzdHIoJmtfaW5mb19kaXIseGJ1Zik7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICB9CisjZWxzZQorI2lmZGVmIE9TMgorICAgIHsKKyAgICAgICAgY2hhciB4 ZGlyW0NLTUFYUEFUSCs4XSwgKnMgPSAiIjsKKyAgICAgICAgZXh0ZXJuIGNoYXIgc3RhcnR1cGRp cltdOworICAgICAgICB4ZGlyWzBdID0gTlVMOworICAgICAgICBpZiAoY2tyY2hhcihzdGFydHVw ZGlyKSAhPSAnLycpCisgICAgICAgICAgcyA9ICIvIjsKKyAgICAgICAgaWYgKHN0cmxlbihzKSAr IHN0cmxlbihzdGFydHVwZGlyKSArIDUgPCBDS01BWFBBVEggKyA4ICkKKyAgICAgICAgICBja21h a21zZyh4ZGlyLENLTUFYUEFUSCs4LHMsc3RhcnR1cGRpciwiRE9DLyIsTlVMTCk7CisgICAgICAg IG1ha2VzdHIoJmtfaW5mb19kaXIseGRpcik7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIFRUU1BETElTVAorICAgIGlmICghc3BkdGFiICYmIChz cyA9IHR0c3BkbGlzdCgpKSkgeyAvKiBHZXQgc3BlZWQgbGlzdCBpZiBuZWNlc3NhcnkgKi8KKyAg ICAgICAgaW50IGosIGssIG0gPSAwLCBuOyAgICAgICAgICAgICAvKiBDcmVhdGUgc29ydGVkIGtl eXdvcmQgdGFibGUgKi8KKyAgICAgICAgY2hhciBidWZbMTZdOworICAgICAgICBjaGFyICogcDsK KyAgICAgICAgaWYgKChzcGR0YWIgPQorICAgICAgICAgICAgIChzdHJ1Y3Qga2V5dGFiICopIG1h bGxvYyhzaXplb2Yoc3RydWN0IGtleXRhYikgKiBzc1swXSkpKSB7CisgICAgICAgICAgICBmb3Ig KGkgPSAxOyBpIDw9IHNzWzBdOyBpKyspIHsgLyogc3NbMF0gPSBudW1iZXIgb2YgZWxlbWVudHMg Ki8KKyAgICAgICAgICAgICAgICBpZiAoc3NbaV0gPCAxTCkgYnJlYWs7ICAgICAvKiBTaG91bGRu J3QgaGFwcGVuICovCisgICAgICAgICAgICAgICAgYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAg LyogTWFrZSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwiJWxkIixzc1tp XSk7ICAvKiBTQUZFICovCisgICAgICAgICAgICAgICAgaWYgKHNzW2ldID09IDg4ODBMKQorICAg ICAgICAgICAgICAgICAgY2tzdHJuY3B5KGJ1ZiwiNzUvMTIwMCIsc2l6ZW9mKGJ1ZikpOworICAg ICAgICAgICAgICAgIGlmIChzc1tpXSA9PSAxMzRMKQorICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KGJ1ZiwiLjUiLDE2KTsKKyAgICAgICAgICAgICAgICBuID0gc3RybGVuKGJ1Zik7CisgICAg ICAgICAgICAgICAgaWYgKChuID4gMCkgJiYgKHAgPSAoY2hhciAqKW1hbGxvYyhuKzEpKSkgewor ICAgICAgICAgICAgICAgICAgICBpZiAobSA+IDApIHsgICAgICAgIC8qIEhhdmUgYXQgbGVhc3Qg b25lIGluIGxpc3QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7ICAgICAv KiBGaW5kIHNsb3QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA8IG0gJiYgc3Ry Y21wKGJ1ZixzcGR0YWJbal0ua3dkKSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGorKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgbSkgeyAgICAvKiBNdXN0 IGluc2VydCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IG0tMTsgayA+ PSBqOyBrLS0pIHsgLyogTW92ZSBvdGhlcnMgZG93biAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzcGR0YWJbaysxXS5rd2QgPSBzcGR0YWJba10ua3dkOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzcGR0YWJbaysxXS5mbGdzID0gc3BkdGFiW2tdLmZsZ3M7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZHRhYltrKzFdLmt3dmFsID0gc3BkdGFi W2tdLmt3dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAvKiBG aXJzdCBvbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KHAsYnVmLG4rMSk7IC8qIEFkZCBuZXcgc3BlZWQgKi8KKyAgICAgICAg ICAgICAgICAgICAgc3BkdGFiW2pdLmt3ZCA9IHA7CisgICAgICAgICAgICAgICAgICAgIHNwZHRh YltqXS5mbGdzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3BkdGFiW2pdLmt3dmFsID0gKGlu dCkgc3NbaV0gLyAxMDsKKyAgICAgICAgICAgICAgICAgICAgbSsrOyAgICAgICAgICAgICAgICAv KiBDb3VudCB0aGlzIG9uZSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBuc3BkID0gbTsKKyAgICB9CisjZW5kaWYgLyogVFRTUERMSVNUICov CisKKyNpZm5kZWYgTk9TUEwKKyAgICAvKiBBbGxvY2F0ZSBJTlBVVCBjb21tYW5kIGJ1ZmZlciAq LworICAgIGlmICghaW5wYnVmKSB7CisgICAgICAgIGlmICghKGlucGJ1ZiA9IChjaGFyICopIG1h bGxvYyhJTlBCVUZTSVorOCkpKQorICAgICAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBm b3IgSU5QVVQgYnVmZmVyIik7CisgICAgfQorICAgIGZvciAoeCA9IDA7IHggPCBJTlBCVUZTSVo7 IHgrKykgICAgIC8qIEluaXRpYWxpemUgaXQgKi8KKyAgICAgIGlucGJ1Zlt4XSA9IE5VTDsKKyAg ICBpbnBicCA9IGlucGJ1ZjsgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHBvaW50 ZXIgKi8KKyAgICBpbmJ1ZnNpemUgPSBJTlBCVUZTSVo7ICAgICAgICAgICAgICAvKiBhbmQgc2l6 ZS4gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgRENNREJVRgorICAgIGlmIChjbXNl dHVwKCkgPCAwKSBmYXRhbCgiQ2FuJ3QgYWxsb2NhdGUgY29tbWFuZCBidWZmZXJzISIpOworCisj aWZuZGVmIE5PU1BMCisgICAgLyogQWxsb2NhdGUgY29tbWFuZCBzdGFjayBhbGxvd2luZyBjb21t YW5kIHBhcnNlciB0byBjYWxsIGl0c2VsZiAqLworCisgICAgaWYgKCEoY21kc3RrID0gKHN0cnVj dCBjbWRwdHIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgY21kcHRyKSpDTURTVEtMKSkpCisgICAg ICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIGNtZHN0ayIpOworICAgIGlmICghKGlmY21k ID0gKGludCAqKSBtYWxsb2Moc2l6ZW9mKGludCkqQ01EU1RLTCkpKQorICAgICAgZmF0YWwoImNt ZGluaTogbm8gbWVtb3J5IGZvciBpZmNtZCIpOworICAgIGlmICghKGNvdW50ID0gKGludCAqKSBt YWxsb2Moc2l6ZW9mKGludCkqQ01EU1RLTCkpKQorICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVt b3J5IGZvciBjb3VudCIpOworICAgIGlmICghKGlmdGVzdCA9IChpbnQgKikgbWFsbG9jKHNpemVv ZihpbnQpKkNNRFNUS0wpKSkKKyAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgaWZ0 ZXN0Iik7CisgICAgaWYgKCEoaW50aW1lID0gKGludCAqKSBtYWxsb2Moc2l6ZW9mKGludCkqQ01E U1RLTCkpKQorICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciBpbnRpbWUiKTsKKyAg ICBpZiAoIShpbnBjYXMgPSAoaW50ICopIG1hbGxvYyhzaXplb2YoaW50KSpDTURTVEtMKSkpCisg ICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkgZm9yIGlucGNhcyIpOworICAgIGlmICghKHRh a2VyciA9IChpbnQgKikgbWFsbG9jKHNpemVvZihpbnQpKkNNRFNUS0wpKSkKKyAgICAgIGZhdGFs KCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgdGFrZXJyIik7CisgICAgaWYgKCEobWVycm9yID0gKGlu dCAqKSBtYWxsb2Moc2l6ZW9mKGludCkqQ01EU1RLTCkpKQorICAgICAgZmF0YWwoImNtZGluaTog bm8gbWVtb3J5IGZvciBtZXJyb3IiKTsKKyAgICBpZiAoISh4cXVpZXQgPSAoaW50ICopIG1hbGxv YyhzaXplb2YoaW50KSpDTURTVEtMKSkpCisgICAgICBmYXRhbCgiY21kaW5pOiBubyBtZW1vcnkg Zm9yIHhxdWlldCIpOworICAgIGlmICghKHh2YXJldiA9IChpbnQgKikgbWFsbG9jKHNpemVvZihp bnQpKkNNRFNUS0wpKSkKKyAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3IgeHZhcmV2 Iik7CisgICAgaWYgKCFrZXJtcmMpCisgICAgICBpZiAoIShrZXJtcmMgPSAoY2hhciAqKSBtYWxs b2MoS0VSTVJDTCsxKSkpCisgICAgICAgIGZhdGFsKCJjbWRpbmk6IG5vIG1lbW9yeSBmb3Iga2Vy bXJjIik7CisjaWZkZWYgQ0tfQVBDCisvKiBBcHBsaWNhdGlvbiBQcm9ncmFtIENvbW1hbmQgYnVm ZmVyICovCisgICAgaWYgKCEoYXBjYnVmID0gbWFsbG9jKEFQQ0JVRkxFTiArIDEpKSkKKyAgICAg ICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciBhcGNidWYiKTsKKyNlbmRpZiAvKiBDS19B UEMgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisvKiBsaW5lW10gYW5kIHRtcGJ1ZltdIGFyZSB0 aGUgdHdvIHN0cmluZyBidWZmZXJzIHVzZWQgYnkgdGhlIGNvbW1hbmQgcGFyc2VyICovCisKKyAg ICBpZiAoIShsaW5lID0gbWFsbG9jKExJTkJVRlNJWiArIDEpKSkKKyAgICAgICAgZmF0YWwoImNt ZGluaTogbm8gbWVtb3J5IGZvciBsaW5lIik7CisgICAgaWYgKCEodG1wYnVmID0gbWFsbG9jKExJ TkJVRlNJWiArIDEpKSkKKyAgICAgICAgZmF0YWwoImNtZGluaTogbm8gbWVtb3J5IGZvciB0bXBi dWYiKTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisKKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBDS19N SU5QVVQKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFs aXplIE1JTlBVVCBwb2ludGVycyAqLworICAgICAgICBpbnQgaTsKKyAgICAgICAgZXh0ZXJuIGNo YXIgKm1zW107CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBNSU5QTUFYOyBpKyspCisgICAgICAg ICAgbXNbaV0gPSBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBDS19NSU5QVVQgKi8KKworICAgIGlm IChtYWNpbmkoKSA8IDApICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1hY3JvIGJ1ZmZl cnMgKi8KKyAgICAgIGZhdGFsKCJDYW4ndCBhbGxvY2F0ZSBtYWNybyBidWZmZXJzISIpOworCisg ICAgaWZjbWRbMF0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZC1sZXZlbCBy ZWxhdGVkIHZhcmlhYmxlcy4gKi8KKyAgICBpZnRlc3RbMF0gPSAwOyAgICAgICAgICAgICAgICAg ICAgICAvKiBJbml0aWFsaXplIHZhcmlhYmxlcyBhdCB0b3AgbGV2ZWwgKi8KKyAgICBjb3VudFsw XSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBvZiBzdGFjay4uLiAqLworICAgIGludGlt ZVswXSA9IDA7CisgICAgaW5wY2FzWzBdID0gMDsKKyAgICB0YWtlcnJbMF0gPSAwOworICAgIG1l cnJvclswXSA9IDA7CisgICAgeHF1aWV0WzBdID0gcXVpZXQ7CisgICAgeHZhcmV2WzBdID0gdmFy ZXZhbDsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU1BMCisgICAgY21kbHZsID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCBzdGFj ayAqLworICAgIHhjbWRzcmMgPSBDTURfS0I7CisgICAgY21kc3RrW2NtZGx2bF0uc3JjID0gQ01E X0tCOyAgICAgICAgLyogU291cmNlIGlzIGNvbnNvbGUgKi8KKyAgICBjbWRzdGtbY21kbHZsXS5s dmwgPSAwOyAgICAgICAgICAgICAvKiBMZXZlbCBpcyAwICovCisgICAgY21kc3RrW2NtZGx2bF0u Y2NmbGdzID0gMDsgICAgICAgICAgLyogTm8gZmxhZ3MgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLwor CisgICAgdGxldmVsID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFrZSBmaWxlIGxl dmVsID0ga2V5Ym9hcmQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYVEFLRTsgaSsrKSAgICAg ICAvKiBJbml0aWFsaXplIGNvbW1hbmQgZmlsZSBuYW1lcyAqLworICAgICAgdGZuYW1baV0gPSBO VUxMOworCisgICAgY21zZXRwKGNrcHJvbXB0KTsgICAgICAgICAgICAgICAgICAgLyogU2V0IHVw IEMtS2VybWl0J3MgcHJvbXB0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ2FuJ3Qgc2V0IElLU0QgcHJvbXB0IGhlcmUgc2luY2UgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZSBkbyBub3QgeWV0IGtub3cgaWYgd2Ug YXJlIElLU0QgKi8KKyNpZm5kZWYgTk9TUEwKKworICAgIGluaXRtYWMoKTsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbWFjcm8gdGFibGUgKi8KKworLyogUHJlZGVmaW5l IGJ1aWx0LWluIG9uZS1saW5lIG1hY3JvcyAqLworCisgICAgYWRkbWFjKCJpYm0tbGluZW1vZGUi LG1faWJtKTsgICAgICAgLyogSUJNLUxJTkVNT0RFICovCisgICAgYWRkbWFjKCJmYXRhbCIsbV9m YXQpOyAgICAgICAgICAgICAgLyogRkFUQUwgbWFjcm8gKi8KKyAgICB5ID0gYWRkbWFjKCJmYXN0 IixtX2Zhc3QpOyAgICAgICAgICAvKiBGQVNUIG1hY3JvICovCisgICAgYWRkbWFjKCJjYXV0aW91 cyIsbV9jYXV0aW91cyk7ICAgICAgLyogQ0FVVElPVVMgbWFjcm8gKi8KKyAgICBhZGRtYWMoInJv YnVzdCIsbV9yb2J1c3QpOyAgICAgICAgICAvKiBST0JVU1QgbWFjcm8gKi8KKyNpZmRlZiBPUzIK KyAgICBhZGRtYWMoIm1hbnVhbCIsbV9tYW51YWwpOyAgICAgICAgICAvKiBNQU5VQUwgbWFjcm8g Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBWTVMKKyAgICBhZGRtYWMoInB1cmdlIixtX3B1 cmdlKTsgICAgICAgICAgICAvKiBQVVJHRSBtYWNybyAqLworI2VuZGlmIC8qIFZNUyAqLworCisv KgorICBQcmVkZWZpbmUgYnVpbHQtaW4gbXVsdGlsaW5lIG1hY3JvczsgdGhlc2UgYXJlIHRvcC1s ZXZlbCBjb21tYW5kcworICB0aGF0IGFyZSBpbXBsZW1lbnRlZCBpbnRlcm5hbGx5IGFzIG1hY3Jv cy4gIE5PVEU6IFdoZW4gYWRkaW5nIGEgbmV3CisgIG9uZSBvZiB0aGVzZSwgcmVtZW1iZXIgdG8g dXBkYXRlIHRoZSBFTkQgYW5kIFJFVFVSTiBjb21tYW5kcyB0bworICBhY2NvdW50IGZvciBpdCwg b3IgZWxzZSBFTkQgYW5kIFJFVFVSTiBmcm9tIHdpdGhpbiBpdCB3b24ndCB3b3JrIHJpZ2h0Lgor Ki8KKyAgICB4ID0gYWRkbW1hYygiX2ZvcngiLGZvcl9kZWYpOyAgICAgICAvKiBGT1IgbWFjcm8g Ki8KKyAgICBpZiAoeCA+IC0xKSBtYWN0YWJbeF0uZmxncyA9IENNX0lOVjsKKyAgICB4ID0gYWRk bW1hYygiX2ZvcnoiLGZvel9kZWYpOyAgICAgICAvKiBPdGhlciBGT1IgbWFjcm8gKi8KKyAgICBp ZiAoeCA+IC0xKSBtYWN0YWJbeF0uZmxncyA9IENNX0lOVjsKKyAgICB4ID0gYWRkbW1hYygiX3hp ZiIseGlmX2RlZik7ICAgICAgICAvKiBYSUYgbWFjcm8gKi8KKyAgICBpZiAoeCA+IC0xKSBtYWN0 YWJbeF0uZmxncyA9IENNX0lOVjsKKyAgICB4ID0gYWRkbW1hYygiX3doaWxlIix3aGlsX2RlZik7 ICAgICAvKiBXSElMRSBtYWNybyAqLworICAgIGlmICh4ID4gLTEpIG1hY3RhYlt4XS5mbGdzID0g Q01fSU5WOworICAgIHggPSBhZGRtbWFjKCJfc3dpdHgiLHN3X2RlZik7ICAgICAgIC8qIFNXSVRD SCBtYWNybyAqLworICAgIGlmICh4ID4gLTEpIG1hY3RhYlt4XS5mbGdzID0gQ01fSU5WOworCisv KiBGaWxsIGluIGNvbW1hbmQtbGluZSBhcmd1bWVudCB2ZWN0b3IgKi8KKworICAgIHNwcmludGYo dm5hbWJ1ZiwiXFwmQFslZF0iLHhhcmdzKTsgIC8qIFNBRkUgKi8KKyAgICBpZiAoaW5zZXJ2ZXIp IHsgICAgICAgICAgICAgICAgICAgICAvKiBCdXQgaGlkZGVuIGluIElLU0QgKi8KKyAgICAgICAg eSA9IC0xOworICAgICAgICB4YXJncyA9IDA7CisgICAgfSBlbHNlCisgICAgICB5ID0gYXJyYXlu YW0odm5hbWJ1ZiwmeCwmeik7ICAgICAgLyogZ29lcyBpbiBhcnJheSBcJkBbXSAqLworCisgICAg dG1wYnVmWzBdID0gTlVMOworICAgIGlmICh5ID4gLTEpIHsKKyAgICAgICAgaW50IGogPSAtMTsK KyAgICAgICAgaW50IHl5ID0gMDsKKyAgICAgICAgZGNsYXJyYXkoKGNoYXIpeCx6KTsgICAgICAg ICAgICAvKiBEZWNsYXJlIHRoZSBhcnJheSAqLworI2lmbmRlZiBOT1RBS0VBUkdTCisgICAgICAg IC8qIE1hY3JvIGFyZ3VtZW50IHZlY3RvciAqLworICAgICAgICBzcHJpbnRmKHZuYW1idWYsIlxc Jl9bJWRdIix6KTsgIC8qIFNBRkUgKi8KKyAgICAgICAgeXkgPSBhcnJheW5hbSh2bmFtYnVmLCZ4 LCZ6KTsgICAvKiBnb2VzIGluIGFycmF5IFwmX1tdICovCisgICAgICAgIGlmICh5eSA+IC0xKSAg ICAgICAgICAgICAgICAgICAgLyogTmFtZSBpcyBPSyAqLworICAgICAgICAgIGRjbGFycmF5KChj aGFyKXgseik7ICAgICAgICAgIC8qIERlY2xhcmUgdGhlIGFycmF5ICovCisjZW5kaWYgLyogTk9U QUtFQVJHUyAqLworICAgICAgICBza2lwID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHhh cmdzOyBpKyspIHsgICAvKiBGaWxsIHRoZSBhcnJheXMgKi8KKyAgICAgICAgICAgIHNwcmludGYo dm5hbWJ1ZiwiXFwmQFslZF0iLGkpOyAvKiBTQUZFICovCisgICAgICAgICAgICBhZGRtYWModm5h bWJ1Zix4YXJndltpXSk7CisgICAgICAgICAgICBpZiAoY2ZpbGVmICYmIGkgPT0gMCkKKyAgICAg ICAgICAgICAgY29udGludWU7CisjaWZkZWYgS0VSQkFORworICAgICAgICAgICAgaWYgKHNraXAp IHsKKyAgICAgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgICAgICBza2lwID0gMDsKKyAg ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBLRVJCQU5H ICovCisgICAgICAgICAgICBpZiAoaiA8IDAgJiYgICAgICAgICAgICAgICAgLyogQXNzaWduIGl0 ZW1zIGFmdGVyICI9IiBvciAiLS0iKi8KKyAgICAgICAgICAgICAgICAoIXN0cmNtcCh4YXJndltp XSwiPSIpIHx8ICFzdHJjbXAoeGFyZ3ZbaV0sIi0tIikpCisgICAgICAgICAgICAgICAgKSB7Cisg ICAgICAgICAgICAgICAgaiA9IDA7ICAgICAgICAgICAgICAgICAgLyogdG8gXCUxLi5cJTkgKi8K KyNpZmRlZiBLRVJCQU5HCisgICAgICAgICAgICB9IGVsc2UgaWYgKGogPCAwICYmCisgICAgICAg ICAgICAgICAgICAgICAgICghc3RyY21wKHhhcmd2W2ldLCIrIikgfHwKKyAgICAgICAgICAgICAg ICAgICAgICAgICFzdHJuY21wKHhhcmd2W2ldLCIrICIsMikgfHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICFzdHJuY21wKHhhcmd2W2ldLCIrXHQiLDIpKQorICAgICAgICAgICAgICAgICAgICAg ICAgKSB7CisgICAgICAgICAgICAgICAgc2tpcCA9IDE7CisgICAgICAgICAgICAgICAgY29udGlu dWU7CisjZW5kaWYgLyogS0VSQkFORyAqLworICAgICAgICAgICAgfSBlbHNlIGlmIChqID4gLTEp IHsKKyAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICAgICAgaWYgKGogPD0gOSkgewor ICAgICAgICAgICAgICAgICAgICB2bmFtYnVmWzBdID0gJ1xcJzsKKyAgICAgICAgICAgICAgICAg ICAgdm5hbWJ1ZlsxXSA9ICclJzsKKyAgICAgICAgICAgICAgICAgICAgdm5hbWJ1ZlsyXSA9IChj aGFyKShqKycwJyk7CisgICAgICAgICAgICAgICAgICAgIHZuYW1idWZbM10gPSBOVUw7CisgICAg ICAgICAgICAgICAgICAgIGFkZG1hYyh2bmFtYnVmLHhhcmd2W2ldKTsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgaWYgKHl5ID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAg Y2hhciBjLCAqIHA7CisgICAgICAgICAgICAgICAgICAgIGludCBmbGFnID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgcCA9IHhhcmd2W2ldOworICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYo dG9wYXJnW2pdKSxwKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjID0gKnArKykpIHsg aWYgKGMgPT0gU1ApIHsgZmxhZysrOyBicmVhazsgfSB9CisgICAgICAgICAgICAgICAgICAgIGlm IChmbGFnKQorICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdCh0bXBidWYsIlwiIixUTVBC VUZTSVopOworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodG1wYnVmLHhhcmd2W2ldLFRN UEJVRlNJWik7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnKQorICAgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh0bXBidWYsIlwiIixUTVBCVUZTSVopOworICAgICAgICAgICAgICAg ICAgICBja3N0cm5jYXQodG1wYnVmLCIgIixUTVBCVUZTSVopOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY2ZpbGVmKSB7CisgICAgICAg ICAgICBhZGRtYWMoIlxcJTAiLGNtZGZpbCk7CisgICAgICAgICAgICBpZiAoeXkgPiAtMSkKKyAg ICAgICAgICAgICAgbWFrZXN0cigmKHRvcGFyZ1swXSksY21kZmlsKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIGFkZG1hYygiXFwlMCIseGFyZ3ZbMF0pOworICAgICAgICAgICAgaWYg KHl5ID4gLTEpCisgICAgICAgICAgICAgIG1ha2VzdHIoJih0b3BhcmdbMF0pLHhhcmd2WzBdKTsK KyAgICAgICAgfQorICAgICAgICBpZiAoeXkgPiAtMSkgeworICAgICAgICAgICAgdG9wYXJnYyA9 IChqIDwgMCkgPyAxIDogaiArIDE7CisgICAgICAgICAgICB0b3B4YXJnID0gdG9wYXJnOworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgIC8qIFRoaXMgbmVlZHMgd29yayAqLworICAgICAgICAg ICAgaWYgKCFjZmlsZWYpCisgICAgICAgICAgICAgIG1ha2VzdHIoJnRvcGxpbmUsdG1wYnVmKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0b3Bh cmdjID0gMDsKKyAgICAgICAgICAgIHRvcHhhcmcgPSBOVUxMOworICAgICAgICB9CisgICAgICAg IGFfZGltWzBdID0gdG9wYXJnYyAtIDE7CisgICAgICAgIGFfcHRyWzBdID0gdG9weGFyZzsKKwlk ZWJ1ZyhGMTExLCJhX2RpbVswXSIsIkEiLGFfZGltWzBdKTsKKyAgICB9CisgICAgKnZuYW1idWYg PSBOVUw7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIGx1aW5pdCgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbG9va3VwKCkgY2FjaGUgKi8KKworLyogR2V0IG91 ciBob21lIGRpcmVjdG9yeSBub3cuICBUaGlzIG5lZWRlZCBpbiBsb3RzIG9mIHBsYWNlcy4gKi8K KworICAgIGNtZGluaXRlZCA9IDE7Cit9CisKKyNpZmRlZiBOVAorX1BST1RPVFlQKGNoYXIgKiBH ZXRBcHBEYXRhLChpbnQpKTsKKyNlbmRpZiAvKiBOVCAqLworCitWT0lECitkb2luaXQoKSB7Cisj aWZkZWYgQ0tST09UCitleHRlcm4gaW50IGNrcm9vdGVycjsKKyNlbmRpZiAvKiBDS1JPT1QgKi8K KyAgICBpbnQgeCA9IDAsIG9rID0gMDsKKyNpZmRlZiBPUzIKKyAgICBjaGFyICogcHRyID0gMDsK KyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICghY21kaW5pdGVkKQorICAgICAgY21kaW5pKCk7 CisKKyNpZmRlZiBNQUMKKyAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBNYWMgS2VybWl0IGhhcyBubyBpbml0IGZpbGUgKi8KKworI2Vsc2UgLyogIU1BQyAqLworCisv KiBJZiBza2lwcGluZyBpbml0IGZpbGUgKCctWScgb24gS2VybWl0IGNvbW1hbmQgbGluZSksIHJl dHVybiBub3cuICovCisKKyAgICBpZiAobm9pbml0KSB7CisgICAgICAgIGtlcm1yY1swXSA9ICdc MCc7CisgICAgICAgIGluaWRpclswXSA9ICdcMCc7CisvKgorICBCdXQgcmV0dXJuaW5nIGZyb20g aGVyZSByZXN1bHRzIGluIGluaWRpcltdIG5ldmVyIGJlaW5nIHNldCB0byBhbnl0aGluZy4KKyAg SW5zdGVhZCBpdCBzaG91bGQgYmUgc2V0IHRvIHdoZXJldmVyIHRoZSBpbml0IGZpbGUgKndvdWxk KiBoYXZlIGJlZW4KKyAgZXhlY3V0ZWQgZnJvbS4gIFNvIHRoaXMgYml0IG9mIGNvZGUgc2hvdWxk IGJlIHJlbW92ZWQsIGFuZCB0aGVuIHdlIHNob3VsZAorICBzcHJpbmtsZSAiaWYgKG5vaW5pdCki IHRlc3RzIHRocm91Z2hvdXQgdGhlIGZvbGxvd2luZyBjb2RlIHVudGlsIHdlIGhhdmUKKyAgc2V0 IGluaWRpcltdLCBhbmQgdGhlbiByZXR1cm4gd2l0aG91dCBhY3R1YWxseSB0YWtpbmcgdGhlIGlu aXQgZmlsZS4KKyovCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZmRlZiBPUzIKKy8qCisg IFRoZSAteSBpbml0IGZpbGUgbXVzdCBiZSBmdWxseSBzcGVjaWZpZWQgb3IgaW4gdGhlIGN1cnJl bnQgZGlyZWN0b3J5LgorICBLRVJNUkMgaXMgbG9va2VkIGZvciB2aWEgSU5JVCwgRFBBVEggYW5k IFBBVEggaW4gdGhhdCBvcmRlci4gIEZpbmFsbHksIG91cgorICBvd24gZXhlY3V0YWJsZSBmaWxl IHBhdGggaXMgdGFrZW4gYW5kIHRoZSAuRVhFIHN1ZmZpeCBpcyByZXBsYWNlZCBieSAuSU5JCisg IGFuZCB0aGlzIGlzIHRyaWVkIGFzIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlLgorKi8KKyNpZmRl ZiBDS19MT0dJTgorICAgIGRlYnVnKEYxMDEsImRvaW5pdCBpbnNlcnZlciIsIiIsaW5zZXJ2ZXIp OworICAgIGRlYnVnKEYxMDEsImRvaW5pdCBpc2d1ZXN0IiwiIixpc2d1ZXN0KTsKKyAgICBkZWJ1 ZyhGMTEwLCJkb2luaXQgYW5vbmZpbGUiLGFub25maWxlLDApOworCisgICAgaWYgKGlzZ3Vlc3Qg JiYgYW5vbmZpbGUpIHsKKyAgICAgIGNrc3RybmNweShsaW5lLCBhbm9uZmlsZSwgTElOQlVGU0la KzEpOworICAgIH0gZWxzZQorI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICBpZiAocmNmbGFn KSB7CisgICAgICAgICAgY2tzdHJuY3B5KGxpbmUsa2VybXJjLExJTkJVRlNJWisxKTsKKyNpZmRl ZiBDS19MT0dJTgorICAgICAgfSBlbHNlIGlmIChpbnNlcnZlcikgeworICAgICAgICAgIGNoYXIg KiBhcHBkYXRhID0gTlVMTDsKKyNpZmRlZiBOVAorICAgICAgICAgIGFwcGRhdGEgPSBHZXRBcHBE YXRhKDEpOworICAgICAgICAgIGlmICggYXBwZGF0YSApIHsKKyAgICAgICAgICAgICAgY2ttYWtt c2cobGluZSxMSU5CVUZTSVorMSxhcHBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIktl cm1pdCA5NS9rOTUuaW5pIixOVUxMLE5VTEwpOworICAgICAgICAgICAgICBpZiAoIHpjaGtpKGxp bmUpIDwgMCApCisgICAgICAgICAgICAgICAgICBsaW5lWzBdID0gJ1wwJzsKKyAgICAgICAgICB9 CisgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkgeworICAgICAgICAgICAgICBhcHBkYXRhID0g R2V0QXBwRGF0YSgwKTsKKyAgICAgICAgICAgICAgaWYgKCBhcHBkYXRhICkgeworICAgICAgICAg ICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVorMSxhcHBkYXRhLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJLZXJtaXQgOTUvazk1LmluaSIsTlVMTCxOVUxMKTsKKyAgICAgICAg ICAgICAgICAgIGlmICggemNoa2kobGluZSkgPCAwICkKKyAgICAgICAgICAgICAgICAgICAgICBs aW5lWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyNlbmRpZiAvKiBO VCAqLworICAgICAgICAgIGlmIChsaW5lWzBdID09IDApIHsKKyAgICAgICAgICAgICAgYXBwZGF0 YSA9IHpob21lKCk7CisgICAgICAgICAgICAgIGlmICggYXBwZGF0YSApIHsKKyAgICAgICAgICAg ICAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laKzEsYXBwZGF0YSwKKyNpZmRlZiBOVAorICAg ICAgICAgICAgICAgICAgICAgICAgICAiazk1LmluaSIsCisjZWxzZSAvKiBOVCAqLworICAgICAg ICAgICAgICAgICAgICAgICAgICAiazIuaW5pIiwKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICAgIGlmICggemNo a2kobGluZSkgPCAwICkKKyAgICAgICAgICAgICAgICAgICAgICBsaW5lWzBdID0gJ1wwJzsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb2luaXQg aW5zZXJ2ZXIgaW5pZmlsZSIsbGluZSwwKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIH0g ZWxzZSB7CisgICAgICAgIGNoYXIgKiBlbnYgPSAwOworI2lmZGVmIE5UCisgICAgICAgIGVudiA9 IGdldGVudigiSzk1LktTQyIpOworI2Vsc2UKKyAgICAgICAgZW52ID0gZ2V0ZW52KCJLMi5LU0Mi KTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICBpZiAoIWVudikgeworI2lmZGVmIE5UCisgICAg ICAgICAgICBlbnYgPSBnZXRlbnYoIks5NS5JTkkiKTsKKyNlbHNlCisgICAgICAgICAgICBlbnYg PSBnZXRlbnYoIksyLklOSSIpOworI2VuZGlmIC8qIE5UICovCisgICAgICAgIH0KKyAgICAgICAg aWYgKCFlbnYpCisgICAgICAgICAgZW52ID0gZ2V0ZW52KCJDS0VSTUlULklOSSIpOworICAgICAg ICBpZiAoIWVudikKKyAgICAgICAgICBlbnYgPSBnZXRlbnYoIkNLRVJNSVRfSU5JIik7CisgICAg ICAgIGxpbmVbMF0gPSAnXDAnOworCisgICAgICAgIGRlYnVnKEYxMTAsImRvaW5pdCBlbnYiLGVu diwwKTsKKyAgICAgICAgaWYgKGVudikKKyAgICAgICAgICBja3N0cm5jcHkobGluZSxlbnYsTElO QlVGU0laKzEpOworCisjaWZkZWYgTlQKKyAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkgeworICAg ICAgICAgICAgZW52ID0gR2V0QXBwRGF0YSgxKTsKKyAgICAgICAgICAgIGlmICggZW52ICkgewor ICAgICAgICAgICAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laKzEsZW52LCJLZXJtaXQgOTUv azk1LmluaSIsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoIHpjaGtpKGxpbmUpIDwg MCApCisgICAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSAnXDAnOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIGlmIChsaW5lWzBdID09IDApIHsKKyAgICAgICAgICAgIGVudiA9 IEdldEFwcERhdGEoMCk7CisgICAgICAgICAgICBpZiAoIGVudiApIHsKKyAgICAgICAgICAgICAg ICBja21ha21zZyhsaW5lLExJTkJVRlNJWisxLGVudiwiS2VybWl0IDk1L2s5NS5pbmkiLE5VTEws TlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKCB6Y2hraShsaW5lKSA8IDAgKQorICAgICAgICAg ICAgICAgICAgICBsaW5lWzBdID0gJ1wwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vu ZGlmIC8qIE5UICovCisKKyAgICAgICAgaWYgKGxpbmVbMF0gPT0gMCkgeworICAgICAgICAgICAg ZW52ID0gemhvbWUoKTsKKyAgICAgICAgICAgIGlmICggZW52ICkgeworICAgICAgICAgICAgICAg IGNrbWFrbXNnKGxpbmUsTElOQlVGU0laKzEsZW52LAorI2lmZGVmIE5UCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJrOTUuaW5pIiwKKyNlbHNlIC8qIE5UICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICJrMi5pbmkiLAorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKCB6Y2hraShsaW5lKSA8IDAg KQorICAgICAgICAgICAgICAgICAgICBsaW5lWzBdID0gJ1wwJzsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIGlmIChsaW5lWzBdID09IDApCisgICAgICAgICAgX3NlYXJjaGVu dihrZXJtcmMsIklOSVQiLGxpbmUpOworICAgICAgICBpZiAobGluZVswXSA9PSAwKQorICAgICAg ICAgIF9zZWFyY2hlbnYoa2VybXJjLCJEUEFUSCIsbGluZSk7CisgICAgICAgIGlmIChsaW5lWzBd ID09IDApCisgICAgICAgICAgX3NlYXJjaGVudihrZXJtcmMsIlBBVEgiLGxpbmUpOworICAgICAg ICBpZiAobGluZVswXSA9PSAwKSB7CisgICAgICAgICAgICBjaGFyICpwZ21wdHIgPSBHZXRMb2Fk UGF0aCgpOworICAgICAgICAgICAgaWYgKHBnbXB0ciAmJiBzdHJsZW4ocGdtcHRyKSA8IExJTkJV RlNJWi04KSB7CisgICAgICAgICAgICAgICAgbHAgPSBzdHJyY2hyKHBnbXB0ciwgJ1xcJyk7Cisg ICAgICAgICAgICAgICAgaWYgKGxwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkobGlu ZSwgcGdtcHRyLCBscCAtIHBnbXB0cik7CisjaWZkZWYgTlQKKyAgICAgICAgICAgICAgICAgICAg c3RyY3B5KGxpbmUgKyAobHAgLSBwZ21wdHIpLCAiL2s5NS5pbmkiKTsKKyNlbHNlIC8qIE5UICov CisgICAgICAgICAgICAgICAgICAgIHN0cmNweShsaW5lICsgKGxwIC0gcGdtcHRyKSwgIi9rMi5p bmkiKTsKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIGxwID0gc3RycmNocihwZ21wdHIsICcuJyk7CisgICAgICAgICAgICAgICAg ICAgIGlmIChscCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNweShsaW5lLCBwZ21w dHIsIGxwIC0gcGdtcHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShsaW5lICsg KGxwIC0gcGdtcHRyKSwgIi5pbmkiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIENLUk9P VAorICAgIGlmICghemlucm9vdChsaW5lKSkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJkb2luaXQg c2V0cm9vdCB2aW9sYXRpb24iLGxpbmUsMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k aWYgLyogQ0tST09UICovCisKKyAgICBkZWJ1ZyhGMTEwLCJkb2luaXQgZm9wZW4oKSIsbGluZSww KTsKKyAgICBpZiAoKHRmaWxlWzBdID0gZm9wZW4obGluZSwiciIpKSAhPSBOVUxMKSB7CisgICAg ICAgIG9rID0gMTsKKyAgICAgICAgdGxldmVsID0gMDsKKyAgICAgICAgdGZsaW5lW3RsZXZlbF0g PSAwOworICAgICAgICBpZiAodGZuYW1bdGxldmVsXSA9IG1hbGxvYyhzdHJsZW4obGluZSkrMSkp CisgICAgICAgICAgc3RyY3B5KHRmbmFtW3RsZXZlbF0sbGluZSk7ICAgLyogc2FmZSAqLworI2lm bmRlZiBOT1NQTAorICAgICAgICBjbWRsdmwrKzsKKyAgICAgICAgeGNtZHNyYyA9IENNRF9URjsK KyAgICAgICAgY21kc3RrW2NtZGx2bF0uc3JjID0gQ01EX1RGOworICAgICAgICBjbWRzdGtbY21k bHZsXS5sdmwgPSB0bGV2ZWw7CisgICAgICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxncyA9IDA7Cisg ICAgICAgIGlmY21kW2NtZGx2bF0gPSAwOworICAgICAgICBpZnRlc3RbY21kbHZsXSA9IDA7Cisg ICAgICAgIGNvdW50W2NtZGx2bF0gPSAgY291bnRbY21kbHZsLTFdOyAvKiBJbmhlcml0IGZyb20g cHJldmlvdXMgbGV2ZWwgKi8KKyAgICAgICAgaW50aW1lW2NtZGx2bF0gPSBpbnRpbWVbY21kbHZs LTFdOworICAgICAgICBpbnBjYXNbY21kbHZsXSA9IGlucGNhc1tjbWRsdmwtMV07CisgICAgICAg IHRha2VycltjbWRsdmxdID0gdGFrZXJyW2NtZGx2bC0xXTsKKyAgICAgICAgbWVycm9yW2NtZGx2 bF0gPSBtZXJyb3JbY21kbHZsLTFdOworICAgICAgICB4cXVpZXRbY21kbHZsXSA9IHF1aWV0Owor ICAgICAgICB4dmFyZXZbY21kbHZsXSA9IHZhcmV2YWw7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAg ICAgICAgZGVidWcoRjExMCwiZG9pbml0IGluaXQgZmlsZSIsbGluZSwwKTsKKyAgICB9IGVsc2Ug eworICAgICAgICBkZWJ1ZyhGMTAwLCJkb2luaXQgbm8gaW5pdCBmaWxlIiwiIiwwKTsKKyAgICB9 CisgICAgY2tzdHJuY3B5KGtlcm1yYyxsaW5lLEtFUk1SQ0wpOworICAgIGZvciAocHRyID0ga2Vy bXJjOyAqcHRyOyBwdHIrKykgICAgIC8qIENvbnZlcnQgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyAq LworICAgICAgIGlmICgqcHRyID09ICdcXCcpCisgICAgICAgICAqcHRyID0gJy8nOworI2Vsc2Ug Lyogbm90IE9TMiAqLworICAgIGxwID0gbGluZTsKKyAgICBscFswXSA9ICdcMCc7CisgICAgZGVi dWcoRjEwMSwiZG9pbml0IHJjZmxhZyIsIiIscmNmbGFnKTsKKyNpZmRlZiBHRU1ET1MKKyAgICB6 a2VybWluaShsaW5lLCByY2ZsYWcsIGtlcm1yYyk7CisjZWxzZQorI2lmZGVmIFZNUworICAgIHsK KwlpbnQgeDsKKwl4ID0gemtlcm1pbmkobGluZSxMSU5CVUZTSVosa2VybXJjKTsKKwlkZWJ1ZyhG MTExLCJDVVNUT00gemtlcm1pbmkiLGxpbmUseCk7CisJaWYgKHggPT0gMCkKKwkgIGxpbmVbMF0g PSBOVUw7CisgICAgfQorI2Vsc2UgLyogbm90IFZNUyAqLworI2lmZGVmIENLX0xPR0lOCisgICAg ZGVidWcoRjEwMSwiZG9pbml0IGlzZ3Vlc3QiLCIiLGlzZ3Vlc3QpOworICAgIGlmIChpc2d1ZXN0 KQorICAgICAgY2tzdHJuY3B5KGxwLCBhbm9uZmlsZSA/IGFub25maWxlIDoga2VybXJjLCBMSU5C VUZTSVopOworICAgIGVsc2UKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgICAgaWYgKHJjZmxh ZykgeyAgICAgICAgICAgICAgICAgICAgIC8qIElmIGluaXQgZmlsZSBuYW1lIGZyb20gY21kIGxp bmUgKi8KKyAgICAgICAgICBja3N0cm5jcHkobHAsa2VybXJjLExJTkJVRlNJWik7IC8qIHVzZSBp dCwgKi8KKyAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndp c2UuLi4gKi8KKyNpZmRlZiBDS19JTklfQSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3 ZSd2ZSBhIHN5c3RlbS13aWRlIGluaXQgZmlsZSAqLworICAgICAgICAgIC8qIEFuZCBpdCB0YWtl cyBwcmVjZWRlbmNlIG92ZXIgdGhlIHVzZXIncy4uLiAqLworICAgICAgICAgIGNrc3RybmNweShs cCxDS19TWVNJTkksS0VSTVJDTCk7IC8qIFVzZSBpdCAqLworICAgICAgICAgIGlmICh6Y2hraShs cCkgPCAwKSB7ICAgICAgICAgIC8qIChpZiBpdCBleGlzdHMuLi4pICovCisjZW5kaWYgLyogQ0tf SU5JX0EgKi8KKyAgICAgICAgICAgICAgY2hhciAqIGhvbWRpcjsKKyAgICAgICAgICAgICAgY2hh ciAqIGVudiA9IDA7CisgICAgICAgICAgICAgIGxpbmVbMF0gPSBOVUw7CisKKyAgICAgICAgICAg ICAgLyogQWRkIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlICovCisgICAgICAgICAg ICAgIGVudiA9IGdldGVudigiQ0tFUk1JVC5JTkkiKTsKKyAgICAgICAgICAgICAgaWYgKCFlbnYp CisgICAgICAgICAgICAgICAgZW52ID0gZ2V0ZW52KCJDS0VSTUlUX0lOSSIpOworICAgICAgICAg ICAgICBpZiAoZW52KQorICAgICAgICAgICAgICAgIGNrc3RybmNweShscCxlbnYsS0VSTVJDTCk7 CisKKyAgICAgICAgICAgICAgaWYgKGxwWzBdID09IDApIHsKKyAgICAgICAgICAgICAgICAgIGhv bWRpciA9IHpob21lKCk7CisgICAgICAgICAgICAgICAgICBpZiAoaG9tZGlyKSB7ICAgICAgICAg LyogSG9tZSBkaXJlY3RvcnkgZm9yIGluaXQgZmlsZS4gKi8KKyAgICAgICAgICAgICAgICAgICAg ICBja3N0cm5jcHkobHAsaG9tZGlyLEtFUk1SQ0wpOworI2lmZGVmIFNUUkFUVVMKKyAgICAgICAg ICAgICAgICAgICAgICBja3N0cm5jYXQobHAsIj4iLEtFUk1SQ0wpOy8qIFZPUyBkaXJzZXAgKi8K KyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGxwWzBdID09ICcvJykgY2tzdHJuY2F0 KGxwLCIvIixLRVJNUkNMKTsKKyNlbmRpZiAvKiBTVFJBVFVTICovCisgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobHAsa2VybXJjLEtFUk1SQ0wpOy8qIEFw cGVuZCBkZWZhdWx0IGZpbGUgbmFtZSAqLworICAgICAgICAgICAgICB9CisjaWZkZWYgQ0tfSU5J X0EKKyAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfSU5JX0EgKi8KKyNpZmRlZiBDS19JTklfQiAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0td2lkZSBpbml0IGRlZmluZWQ/ICovCisg ICAgICAgICAgLyogQnV0IHVzZXIncyBpbmkgZmlsZSB0YWtlcyBwcmVjZWRlbmNlICovCisgICAg ICAgICAgaWYgKHpjaGtpKGxwKSA8IDApICAgICAgICAgICAgLyogSWYgdXNlciBkb2Vzbid0IGhh dmUgaGVyIG93biwgKi8KKyAgICAgICAgICAgIGNrc3RybmNweShscCxDS19TWVNJTkksS0VSTVJD TCk7IC8qIHVzZSBzeXN0ZW0td2lkZSBvbmUuICovCisjZW5kaWYgLyogQ0tfSU5JX0IgKi8KKyAg ICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKworI2lmZGVmIEFN SUdBCisgICAgcmVxb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBy ZXF1ZXN0b3JzICovCisjZW5kaWYgLyogQU1JR0EgKi8KKworI2lmZGVmIFVTRV9DVVNUT00KKyAg ICAvKiBJZiBubyBpbml0IGZpbGUgd2FzIGZvdW5kLCBleGVjdXRlIHRoZSBjdXN0b21pemF0aW9u IGZpbGUgKi8KKyAgICBkZWJ1ZyhGMTExLCJDVVNUT00gMSIsbGluZSxyY2ZsYWcpOworICAgIGlm ICgoIWxpbmVbMF0gfHwgemNoa2kobGluZSkgPCAwKSAmJiAhcmNmbGFnKSB7CisJaW50IHg7Cisj aWZkZWYgT1MyCisJeCA9IGNrbWFrZXN0cihsaW5lLExJTkJVRlNJWixHZXRBcHBEYXRhKDEpLCIv IiwiSzk1Q1VTVE9NLklOSSIsTlVMTCk7CisJZGVidWcoRjExMSwiQ1VTVE9NIDIiLGxpbmUseCk7 CisJaWYgKHpjaGtpKGxpbmUpIDwgMCkgeworCSAgICB4ID0gY2ttYWtlc3RyKGxpbmUsTElOQlVG U0laLEdldEFwcERhdGEoMCksIi8iLCJLOTVVU0VSLklOSSIsTlVMTCk7CisJICAgIGRlYnVnKEYx MTEsIkNVU1RPTSAzIixsaW5lLHgpOworCX0KKyNlbHNlICAvKiBPUzIgKi8KKwl4ID0gY2tzdHJu Y3B5KGxpbmUsemhvbWUoKSxMSU5CVUZTSVopOworI2lmbmRlZiBWTVMKKwkvKiBWTVMgemhvbWUo KSByZXR1cm5zICJTWVMkTE9HSU46IiAqLworCWlmIChsaW5lW3gtMV0gIT0gRElSU0VQKSB7CisJ ICAgIGxpbmVbeCsrXSA9IERJUlNFUDsKKwkgICAgbGluZVt4XSA9IE5VTDsKKwl9CisjZW5kaWYg LyogVk1TICovCisJeCA9IGNrc3RybmNhdChsaW5lLE1ZQ1VTVE9NLExJTkJVRlNJWik7CisJZGVi dWcoRjExMSwiQ1VTVE9NIDQiLGxpbmUseCk7CisjZW5kaWYgLyogT1MyICovCisgICAgfQorICAg IGRlYnVnKEYxMTAsIkNVU1RPTSA1IixsaW5lLDApOworI2VuZGlmIC8qIFVTRV9DVVNUT00gKi8K KworI2lmZGVmIENLUk9PVAorICAgIGlmICghemlucm9vdChsaW5lKSkgeworICAgICAgICBkZWJ1 ZyhGMTEwLCJkb2luaXQgc2V0cm9vdCB2aW9sYXRpb24iLGxpbmUsMCk7CisgICAgICAgIHJldHVy bjsKKyAgICB9CisjZW5kaWYgLyogQ0tST09UICovCisKKyAgICBkZWJ1ZyhGMTEwLCJkb2luaXQg aW5pIGZpbGUgaXMiLGxpbmUsMCk7CisgICAgaWYgKCh0ZmlsZVswXSA9IGZvcGVuKGxpbmUsInIi KSkgIT0gTlVMTCkgeyAvKiBUcnkgdG8gb3BlbiBpbml0IGZpbGUuICovCisgICAgICAgIG9rID0g MTsKKyAgICAgICAgdGxldmVsID0gMDsKKyAgICAgICAgdGZsaW5lW3RsZXZlbF0gPSAwOworICAg ICAgICBpZiAoKHRmbmFtW3RsZXZlbF0gPSBtYWxsb2Moc3RybGVuKGxpbmUpKzEpKSkKKyAgICAg ICAgICBzdHJjcHkodGZuYW1bdGxldmVsXSxsaW5lKTsgICAvKiBzYWZlICovCisKKyAgICAgICAg Y2tzdHJuY3B5KGtlcm1yYyxsaW5lLEtFUk1SQ0wpOworCisjaWZuZGVmIE5PU1BMCisgICAgICAg IGNtZGx2bCsrOworICAgICAgICBpZmNtZFtjbWRsdmxdID0gMDsKKyAgICAgICAgaWZ0ZXN0W2Nt ZGx2bF0gPSAwOworICAgICAgICBjb3VudFtjbWRsdmxdID0gIGNvdW50W2NtZGx2bC0xXTsgLyog SW5oZXJpdCBmcm9tIHByZXZpb3VzIGxldmVsICovCisgICAgICAgIGludGltZVtjbWRsdmxdID0g aW50aW1lW2NtZGx2bC0xXTsKKyAgICAgICAgaW5wY2FzW2NtZGx2bF0gPSBpbnBjYXNbY21kbHZs LTFdOworICAgICAgICB0YWtlcnJbY21kbHZsXSA9IHRha2VycltjbWRsdmwtMV07CisgICAgICAg IG1lcnJvcltjbWRsdmxdID0gbWVycm9yW2NtZGx2bC0xXTsKKyAgICAgICAgeHF1aWV0W2NtZGx2 bF0gPSBxdWlldDsKKyAgICAgICAgeHZhcmV2W2NtZGx2bF0gPSB2YXJldmFsOworICAgICAgICBk ZWJ1ZyhGMTAxLCJkb2luaXQgb3BlbiBvayIsIiIsY21kbHZsKTsKKyAgICAgICAgeGNtZHNyYyA9 IENNRF9URjsKKyAgICAgICAgY21kc3RrW2NtZGx2bF0uc3JjID0gQ01EX1RGOworICAgICAgICBj bWRzdGtbY21kbHZsXS5sdmwgPSB0bGV2ZWw7CisgICAgICAgIGNtZHN0a1tjbWRsdmxdLmNjZmxn cyA9IDA7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB9IGVsc2UgaWYgKHJjZmxhZykgeworICAg ICAgICAvKiBQcmludCBhbiBlcnJvciBtZXNzYWdlIG9ubHkgaWYgYSBzcGVjaWZpYyBmaWxlIHdh cyBhc2tlZCBmb3IuICovCisgICAgICAgIHByaW50ZigiPyVzIC0gJXNcbiIsIGNrX2VycnN0cigp LCBsaW5lKTsKKyAgICB9CisKKyNpZmRlZiBkYXRhZ2VuZXJhbAorLyogSWYgQ0tFUk1JVC5JTkkg bm90IGZvdW5kIGluIGhvbWUgZGlyZWN0b3J5LCBsb29rIGluIHNlYXJjaGxpc3QgKi8KKyAgICBp ZiAoLyogaG9tZGlyICYmICovICh0bGV2ZWwgPCAwKSkgeworICAgICAgICBja3N0cm5jcHkobHAs a2VybXJjLExJTkJVRlNJWik7CisgICAgICAgIGlmICgodGZpbGVbMF0gPSBmb3BlbihsaW5lLCJy IikpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgICAgIHRsZXZlbCA9 IDA7CisgICAgICAgICAgICB0ZmxpbmVbdGxldmVsXSA9IDA7CisgICAgICAgICAgICBpZiAodGZu YW1bdGxldmVsXSA9IG1hbGxvYyhzdHJsZW4obGluZSkrMSkpCisgICAgICAgICAgICAgIHN0cmNw eSh0Zm5hbVt0bGV2ZWxdLGxpbmUpOyAvKiBzYWZlICovCisjaWZuZGVmIE5PU1BMCisgICAgICAg ICAgICBjbWRsdmwrKzsKKyAgICAgICAgICAgIHhjbWRzcmMgPSBDTURfVEY7CisgICAgICAgICAg ICBjbWRzdGtbY21kbHZsXS5zcmMgPSBDTURfVEY7CisgICAgICAgICAgICBjbWRzdGtbY21kbHZs XS5sdmwgPSB0bGV2ZWw7CisgICAgICAgICAgICBjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgPSAwOwor ICAgICAgICAgICAgaWZjbWRbY21kbHZsXSA9IDA7CisgICAgICAgICAgICBpZnRlc3RbY21kbHZs XSA9IDA7CisgICAgICAgICAgICBjb3VudFtjbWRsdmxdID0gIGNvdW50W2NtZGx2bC0xXTsgLyog SW5oZXJpdCBmcm9tIHByZXZpb3VzIGxldmVsICovCisgICAgICAgICAgICBpbnRpbWVbY21kbHZs XSA9IGludGltZVtjbWRsdmwtMV07CisgICAgICAgICAgICBpbnBjYXNbY21kbHZsXSA9IGlucGNh c1tjbWRsdmwtMV07CisgICAgICAgICAgICB0YWtlcnJbY21kbHZsXSA9IHRha2VycltjbWRsdmwt MV07CisgICAgICAgICAgICBtZXJyb3JbY21kbHZsXSA9IG1lcnJvcltjbWRsdmwtMV07CisgICAg ICAgICAgICB4cXVpZXRbY21kbHZsXSA9IHF1aWV0OworCSAgICB4dmFyZXZbY21kbHZsXSA9IHZh cmV2YWw7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworCisjaWZkZWYgQU1JR0EgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQW1pZ2EuLi4gKi8KKyAgICByZXFwb3AoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBSZXN0b3JlIHJlcXVlc3RvcnMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworI2VuZGlmIC8qIE9T MiAqLworI2VuZGlmIC8qIE1BQyAqLworCisgICAgLyogQXNzaWduIHZhbHVlIHRvIGluaWRpciAq LworCisgICAgaWYgKCFvaykgeworICAgICAgICBpbmlkaXJbMF0gPSBOVUw7CisgICAgfSBlbHNl IHsKKyAgICAgICAgY2tzdHJuY3B5KGluaWRpciwga2VybXJjLCBDQ0hNQVhQQVRIKTsKKyAgICAg ICAgeCA9IHN0cmxlbihpbmlkaXIpOworICAgICAgICBpZiAoeCA+IDApIHsKKyAgICAgICAgICAg IGludCBpOworICAgICAgICAgICAgZm9yIChpID0geCAtIDE7IGkgPiAwOyBpLS0gKSB7CisgICAg ICAgICAgICAgICAgaWYgKElTRElSU0VQKGluaWRpcltpXSkpIHsKKyAgICAgICAgICAgICAgICAg ICAgaW5pZGlyW2krMV0gPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIE5UCisgICAgICAg IEdldFNob3J0UGF0aE5hbWUoaW5pZGlyLGluaWRpcixDQ0hNQVhQQVRIKTsKKyNlbmRpZiAvKiBO VCAqLworICAgIH0KK30KKworVk9JRAorZG9pa3NkaW5pdCgpIHsKKyNpZmRlZiBDS19TU0wKKyAg ICAvKiBJS1NEIGRvZXNuJ3QgcmVxdWVzdCBjbGllbnQgY2VydHMgKi8KKyAgICBzc2xfdmVyaWZ5 X2ZsYWcgPSBTU0xfVkVSSUZZX05PTkU7CisjZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAo IWNtZGluaXRlZCkKKyAgICAgIGNtZGluaSgpOworCisjaWZkZWYgSUtTRENPTkYKKyNpZmRlZiBP UzIKKyAgICBsaW5lWzBdID0gJ1wwJzsKKyAgICBfc2VhcmNoZW52KGlrc2Rjb25mLCJJTklUIixs aW5lKTsKKyAgICBpZiAobGluZVswXSA9PSAwKQorICAgICAgX3NlYXJjaGVudihpa3NkY29uZiwi RFBBVEgiLGxpbmUpOworICAgIGlmIChsaW5lWzBdID09IDApCisgICAgICBfc2VhcmNoZW52KGlr c2Rjb25mLCJQQVRIIixsaW5lKTsKKyAgICBpZiAobGluZVswXSA9PSAwKSB7CisgICAgICAgIGNo YXIgKnBnbXB0ciA9IEdldExvYWRQYXRoKCk7CisgICAgICAgIGlmIChwZ21wdHIgJiYgc3RybGVu KHBnbXB0cikgPCBMSU5CVUZTSVotOCkgeworICAgICAgICAgICAgbHAgPSBzdHJyY2hyKHBnbXB0 ciwgJ1xcJyk7CisgICAgICAgICAgICBpZiAobHApIHsKKyAgICAgICAgICAgICAgICBzdHJuY3B5 KGxpbmUsIHBnbXB0ciwgbHAgLSBwZ21wdHIpOworICAgICAgICAgICAgICAgIHN0cmNweShsaW5l ICsgKGxwIC0gcGdtcHRyKSwgIlxcIik7CisgICAgICAgICAgICAgICAgc3RyY3B5KGxpbmUgKyAo bHAgLSBwZ21wdHIgKyAxKSwgaWtzZGNvbmYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICBscCA9IHN0cnJjaHIocGdtcHRyLCAnLicpOworICAgICAgICAgICAgICAgIGlm IChscCkgeworICAgICAgICAgICAgICAgICAgICBzdHJuY3B5KGxpbmUsIHBnbXB0ciwgbHAgLSBw Z21wdHIpOworICAgICAgICAgICAgICAgICAgICBzdHJjcHkobGluZSArIChscCAtIHBnbXB0ciks ICIua3NjIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorICAgIGRlYnVnKEYxMTAsImRvaWtzZGluaXQoKSBsaW5lIixsaW5lLDApOworICAgIHRm aWxlWzBdID0gZm9wZW4obGluZSwiciIpOworI2Vsc2UgLyogT1MyICovCisgICAgdGZpbGVbMF0g PSBmb3Blbihpa3NkY29uZiwiciIpOworI2VuZGlmIC8qIE9TMiAqLworICAgIGlmICh0ZmlsZVsw XSAhPSBOVUxMKSB7CisgICAgICAgIHRsZXZlbCA9IDA7CisgICAgICAgIHRmbGluZVt0bGV2ZWxd ID0gMDsKKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKHRmbmFtW3RsZXZlbF0gPSBtYWxsb2Moc3Ry bGVuKGxpbmUpKzEpKQorICAgICAgICAgIHN0cmNweSh0Zm5hbVt0bGV2ZWxdLGxpbmUpOworI2Vs c2UgLyogT1MyICovCisgICAgICAgIGlmICgodGZuYW1bdGxldmVsXSA9IG1hbGxvYyhzdHJsZW4o aWtzZGNvbmYpKzEpKSkKKyAgICAgICAgICBzdHJjcHkodGZuYW1bdGxldmVsXSxpa3NkY29uZik7 CisjZW5kaWYgLyogT1MyICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgIGNtZGx2bCsrOworICAg ICAgICB4Y21kc3JjID0gQ01EX1RGOworICAgICAgICBjbWRzdGtbY21kbHZsXS5zcmMgPSBDTURf VEY7CisgICAgICAgIGNtZHN0a1tjbWRsdmxdLmx2bCA9IHRsZXZlbDsKKyAgICAgICAgY21kc3Rr W2NtZGx2bF0uY2NmbGdzID0gMDsKKyAgICAgICAgaWZjbWRbY21kbHZsXSAgPSAwOworICAgICAg ICBpZnRlc3RbY21kbHZsXSA9IDA7CisgICAgICAgIGNvdW50W2NtZGx2bF0gID0gY291bnRbY21k bHZsLTFdOyAvKiBJbmhlcml0IGZyb20gcHJldmlvdXMgbGV2ZWwgKi8KKyAgICAgICAgaW50aW1l W2NtZGx2bF0gPSBpbnRpbWVbY21kbHZsLTFdOworICAgICAgICBpbnBjYXNbY21kbHZsXSA9IGlu cGNhc1tjbWRsdmwtMV07CisgICAgICAgIHRha2VycltjbWRsdmxdID0gdGFrZXJyW2NtZGx2bC0x XTsKKyAgICAgICAgbWVycm9yW2NtZGx2bF0gPSBtZXJyb3JbY21kbHZsLTFdOworICAgICAgICB4 cXVpZXRbY21kbHZsXSA9IHF1aWV0OworCXh2YXJldltjbWRsdmxdID0gdmFyZXZhbDsKKyNlbmRp ZiAvKiBOT1NQTCAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJkb2lrc2Rpbml0IGZpbGUgb2siLHRm bmFtW3RsZXZlbF0sMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoRjExMCwiZG9pa3Nk aW5pdCBvcGVuIGZhaWxlZCIsdGZuYW1bdGxldmVsXSwwKTsKKyAgICB9CisjZW5kaWYgLyogSUtT RENPTkYgKi8KK30KKworI2lmbmRlZiBOT1NQTAorLyoKKyAgRyBFIFQgTiBDIE0KKworICBHZXQg bmV4dCBjb21tYW5kIGZyb20gY3VycmVudCBtYWNybyBkZWZpbml0aW9uLiAgQ29tbWFuZCBpcyBj b3BpZWQKKyAgaW50byBzdHJpbmcgcG9pbnRlZCB0byBieSBhcmd1bWVudCBzLCBtYXggbGVuZ3Ro IG4uICAgUmV0dXJuczoKKyAgIDAgaWYgYSBzdHJpbmcgd2FzIGNvcGllZDsKKyAgLTEgaWYgdGhl cmUgd2FzIG5vIHN0cmluZyB0byBjb3B5LgorKi8KK2ludAorZ2V0bmNtKHMsbikgY2hhciAqczsg aW50IG47IHsKKyAgICBpbnQgeSA9IDA7CQkJCS8qIENoYXJhY3RlciBjb3VudGVyICovCisgICAg aW50IHF1b3RlID0gMDsKKyAgICBpbnQga3AgPSAwOwkJCQkvKiBCcmFjZSB1cC1kb3duIGNvdW50 ZXIgKi8KKyAgICBpbnQgcHAgPSAwOwkJCQkvKiBQYXJlbnRoZXNpcyB1cC1kb3duIGNvdW50ZXIg Ki8KKyNpZm5kZWYgTk9EUU1BQ1JPCisgICAgaW50IGRxID0gMDsJCQkJLyogRG91YmxlcXVvdGUg Y291bnRlciAqLworI2VuZGlmIC8qIE5PRFFNQUNSTyAqLworICAgIGNoYXIgKnMyOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENvcHkgb2YgZGVzdGluYXRpb24gcG9pbnRlciAqLworCisg ICAgczIgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBzdHJp bmcgcG9pbnRlcnMgKi8KKyAgICAqcyA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhbmQgZGVzdGluYXRpb24gYnVmZmVyICovCisKKyAgICAvKiBkZWJ1ZyhGMDEwLCJnZXRuY20g ZW50cnkiLG1hY3BbbWFjbHZsXSwwKTsgKi8KKworICAgIGZvciAoeSA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExvb3AgZm9yIG4gYnl0ZXMgbWF4ICovCisgICAgICAgICBtYWNwW21h Y2x2bF0gJiYgKm1hY3BbbWFjbHZsXSAmJiB5IDwgbjsKKyAgICAgICAgIHkrKywgcysrLCBtYWNw W21hY2x2bF0rKykgeworCisgICAgICAgICpzID0gKm1hY3BbbWFjbHZsXTsgICAgICAgICAgICAg LyogR2V0IG5leHQgY2hhciBmcm9tIG1hY3JvIGRlZiAqLworCisjaWZuZGVmIENPTU1FTlQKKy8q CisgIFRoaXMgaXMgdG8gYWxsb3cgcXVvdGluZyBvZiBwYXJlbnRoZXNlcywgY29tbWFzLCBldGMs IGluIGZ1bmN0aW9uCisgIGFyZ3VtZW50cywgYnV0IGl0IGJyZWFrcyBqdXN0IGFib3V0IGV2ZXJ5 dGhpbmcgZWxzZS4gIERPTidUIFJFTU9WRSBUSElTCisgIENPTU1FTlQhICAoT3RoZXJ3aXNlIHlv dSdsbCB3aW5kIHVwIGFkZGluZyB0aGUgc2FtZSBjb2RlIGFnYWluIGFuZCBicmVha2luZworICBl dmVyeXRoaW5nIGFnYWluLikgIDwtLSBUaGUgcHJlY2VkaW5nIHdhcm5pbmcgc2hvdWxkIGJlIG9i c29sZXRlIHNpbmNlIHRoZQorICBzdGF0ZW1lbnRzIGJlbG93IGhhdmUgYmVlbiBmaXhlZCwgYnV0 IGluIGNhc2Ugb2YgZmlyZSwgcmVtb3ZlIHRoZSAibiIgZnJvbQorICB0aGUgPCM+aWZuZGVmIGFi b3ZlLiAgTkVXIFdBUk5JTkc6IGNvZGUgYWRkZWQgMTIgQXByIDIwMDIgdG8gZXhlbXB0IHRoZQor ICBvcGVuaW5nIGJyYWNlIGluIFx7bm5ufSBmcm9tIGJlaW5nIHRyZWF0ZWQgYXMgYSBxdW90ZWQg YnJhY2UuCisqLworICAgICAgICBpZiAoIXF1b3RlICYmICpzID09IENNRFEpIHsKKyAgICAgICAg ICAgIHF1b3RlID0gMTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg IGlmIChxdW90ZSkgeworCSAgICBpbnQgbm90cXVvdGUgPSAwOworICAgICAgICAgICAgcXVvdGUg PSAwOworCSAgICBpZiAoKnMgPT0gJ3snKSB7CQkvKiBDaGVjayBmb3IgXHtubm59ICg4LjAuMjAz KSAqLworCQljaGFyIGMsICogcDsKKwkJcCA9IG1hY3BbbWFjbHZsXSArIDE7CisJCXdoaWxlICgo YyA9ICpwKyspKSB7CisJCSAgICBpZiAoaXNkaWdpdChjKSkKKwkJICAgICAgY29udGludWU7CisJ CSAgICBlbHNlIGlmIChjID09ICd9JykgeworCQkJbm90cXVvdGUrKzsKKwkJCWJyZWFrOworCQkg ICAgfSBlbHNlIHsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgaWYgKG5v dHF1b3RlID09IDApCisJICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01N RU5UICovCisKKy8qCisgIEFsbG93IGJyYWNlcyBhcm91bmQgbWFjcm8gZGVmaW5pdGlvbiB0byBw cmV2ZW50IGNvbW1hcyBmcm9tIGJlaW5nIHR1cm5lZCB0bworICBlbmQtb2YtbGluZXMgYW5kIGFs c28gdHJlYXQgYW55IGNvbW1hcyB3aXRoaW4gcGFyZW5zIGFzIHRleHQgc28gdGhhdAorICBtdWx0 aXBsZS1hcmd1bWVudCBmdW5jdGlvbnMgd29uJ3QgY2F1c2UgdGhlIGNvbW1hbmQgdG8gYnJlYWsg cHJlbWF0dXJlbHkuCisgIDE5IE9jdCAyMDAxOiBTaW1pbGFyIHRyZWF0bWVudCB3YXMgYWRkZWQg Zm9yIGRvdWJsZXF1b3Rlcywgc28KKworICAgICBkZWZpbmUgZm9vIHsgZWNobyAib25lLCB0d28s IHRocmVlIiB9CisKKyAgd291bGQgd29yayBhcyBleHBlY3RlZC4gIFRoaXMgZG9lc24ndCBzZWVt IHRvIGhhdmUgYnJva2VuIGFueXRoaW5nIGJ1dAorICBpZiBzb21ldGhpbmcgY29tZXMgdXAgbGF0 ZXIsIHJlYnVpbGQgd2l0aCBOT0RRTUFDUk8gZGVmaW5lZC4KKyovCisgICAgICAgIGlmICgqcyA9 PSAneycpIGtwKys7ICAgICAgICAgICAgLyogQ291bnQgYnJhY2VzICovCisgICAgICAgIGlmICgq cyA9PSAnfScgJiYga3AgPiAwKSBrcC0tOworICAgICAgICBpZiAoKnMgPT0gJygnKSBwcCsrOyAg ICAgICAgICAgIC8qIENvdW50IHBhcmVudGhlc2VzLiAqLworICAgICAgICBpZiAoKnMgPT0gJykn ICYmIHBwID4gMCkgcHAtLTsKKyNpZm5kZWYgTk9EUU1BQ1JPCisjaWZuZGVmIENPTU1FTlQKKwkv KiBUb28gbWFueSBmYWxzZSBwb3NpdGl2ZXMgKi8KKwkvKiBObywgbm90IHJlYWxseSAtLSB0aGlz IGlzIGluZGVlZCB0aGUgYmVzdCB3ZSBjYW4gZG8gKi8KKwkvKiBSZXZlcnRlZCB0byB0aGlzIG1l dGhvZCBTdW4gTWF5IDExIDE4OjQzOjQ1IDIwMDMgKi8KKwlpZiAoKnMgPT0gJyInKSBkcSA9IDEg LSBkcTsgICAgIC8qIEFjY291bnQgZm9yIGRvdWJsZXF1b3RlcyAqLworI2Vsc2UgIC8qIEZyaSBB cHIgIDQgMTM6MjE6MjkgMjAwMyAqLworCS8qIFRoZSBjb2RlIGJlbG93IGJyZWFrcyB0aGUgU1dJ VENIIHN0YXRlbWVudCAqLworCS8qIFRoZXJlIGlzIG5vIHdheSB0byBtYWtlIHRoaXMgd29yayAt LSBpdCB3b3VsZCByZXF1aXJlICovCisJLyogYnVpbGRpbmcgaW4gYWxsIHRoZSBrbm93bGVkZ2Ug b2YgY29tbWFuZCBwYXJzZXIuICovCisgICAgICAgIGlmIChkYmxxdW8gJiYgKCpzID09ICciJykp IHsgICAgLyogSGF2ZSBkb3VibGVxdW90ZSAqLworICAgICAgICAgICAgaWYgKGRxID09IDEpIHsJ CS8qIENsb3NlIHF1b3RlIG9ubHkgaWYuLi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKCoobWFj cFttYWNsdmxdKzEpID09IFNQKSB8fCAvKiBmb2xsb3dlZCBieSBzcGFjZSBvci4uLiAqLworCQkg ICAgKCEqKG1hY3BbbWFjbHZsXSsxKSkgfHwgICAgICAvKiBhdCBlbmQgb3IgLi4uICovCisJCSAg ICAvKiBOZXh0IGNoYXIgaXMgY29tbWFuZCBzZXBhcmF0b3IuLi4gKi8KKwkJICAgIC8qIFN1biBN YXkgMTEgMTc6MjQ6MTIgMjAwMyAqLworCQkgICAgKGtwIDwgMSAmJiBwcCA8IDEgJiYgKCoobWFj cFttYWNsdmxdKzEpID09ICcsJykpCisJCSAgICApCQkgICAgIAorICAgICAgICAgICAgICAgICAg ZHEgPSAwOwkJLyogQ2xvc2UgdGhlIHF1b3RlICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGRx ID09IDApIHsKKyAgICAgICAgICAgICAgICAvKiBPcGVuIHF1b3RlIG9ubHkgaWYgYXQgYmVnaW5u aW5nIG9yIHByZWNlZGVkIGJ5IHNwYWNlICovCisgICAgICAgICAgICAgICAgaWYgKHMgPiBzMikg eworICAgICAgICAgICAgICAgICAgICBpZiAoKihzLTEpID09IFNQKQorICAgICAgICAgICAgICAg ICAgICAgIGRxID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMgPT0gczIpIHsKKyAg ICAgICAgICAgICAgICAgICAgICBkcSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIE5PRFFNQUNS TyAqLworICAgICAgICBpZiAoKnMgPT0gJywnICYmIHBwIDw9IDAgJiYga3AgPD0gMAorI2lmbmRl ZiBOT0RRTUFDUk8KKyAgICAgICAgICAgICYmIGRxID09IDAKKyNlbmRpZiAvKiBOT0RRTUFDUk8g Ki8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgbWFjcFttYWNsdmxdKys7ICAgICAgICAg ICAgIC8qIENvbW1hIG5vdCBpbiB7fSBvciAoKSAqLworICAgICAgICAgICAgLyogZGVidWcoRjEx MCwibmV4dCBjbWQiLHMsMCk7ICovCisgICAgICAgICAgICBrcCA9IHBwID0gMDsgICAgICAgICAg ICAgICAgLyogc28gd2UgaGF2ZSB0aGUgbmV4dCBjb21tYW5kICovCisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlYWNoZWQgZW5kLiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBET04nVCBETyBUSElTIC0g SVQgQlJFQUtTIEVWRVJZVEhJTkcgKi8KKyAgICAqcyA9IE5VTDsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgaWYgKCpzMiA9PSBOVUwpIHsgICAgICAgICAgICAgICAgICAgLyogSWYgbm90aGlu ZyB3YXMgY29waWVkLCAqLworICAgICAgICAvKiBkZWJ1ZyhGMTAwLCJYWFggZ2V0bmNtIGVvbSIs IiIsMCk7ICovCisgICAgICAgIHBvcGNsdmwoKTsgICAgICAgICAgICAgICAgICAgICAgLyogcG9w IGNvbW1hbmQgbGV2ZWwuICovCisgICAgICAgIHJldHVybigtMSk7CisgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlLCB0YWNrIENSIG9udG8gZW5kICov CisgICAgICAgICpzKysgPSBDUjsKKyAgICAgICAgKnMgPSAnXDAnOworICAgICAgICAvKiBkZWJ1 ZyhGMTEwLCJYWFggZ2V0bmNtIE9LIixzLDApOyAqLworICAgICAgICBpZiAobWVjaG8gJiYgcGZs YWcpICAgICAgICAgICAgIC8qIElmIE1BQ1JPIEVDSE8gT04sIGVjaG8gdGhlIGNtZCAqLworICAg ICAgICAgIHByaW50ZigiJXNcbiIsczIpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8q ICBEIE8gTSBBIEMgIC0tICBEZWZpbmUgYW5kIHRoZW4gZXhlY3V0ZSBhIG1hY3JvICovCisKK2lu dAorZG9tYWMobmFtZSwgZGVmLCBmbGFncykgY2hhciAqbmFtZSwgKmRlZjsgaW50IGZsYWdzOyB7 CisgICAgaW50IHgsIG07CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4g aW50IHRlcm1faW87CisgICAgaW50IHRlcm1faW9fc2F2ID0gdGVybV9pbzsKKyAgICB0ZXJtX2lv ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIFRlcm1pbmFsIEVtdWxhdG9y IEkvTyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICBtID0g bWFjbHZsOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IG1hY3JvIHN0YWNrIGxl dmVsICovCisgICAgeCA9IGFkZG1hYyhuYW1lLCBkZWYpOyAgICAgICAgICAgICAgLyogRGVmaW5l IGEgbmV3IG1hY3JvICovCisgICAgaWYgKHggPiAtMSkgeyAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgc3VjY2Vzc2Z1bCwgKi8KKyAgICAgICAgZG9kbyh4LE5VTEwsZmxhZ3MpOyAgICAgICAg ICAgICAvKiBzdGFydCBpdCAoaW5jcmVtZW50cyBtYWNsdmwpLiAqLworICAgICAgICB3aGlsZSAo bWFjbHZsID4gbSkgeyAgICAgICAgICAgIC8qIEtlZXAgZ29pbmcgdGlsbCBkb25lIHdpdGggaXQs ICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb21hYyBsb29wIG1hY2x2bCAxIiwiIixtYWNs dmwpOworICAgICAgICAgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigxKTsgIC8qIHBhcnNpbmcg JiBleGVjdXRpbmcgZWFjaCBjb21tYW5kLCAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwiZG9t YWMgbG9vcCBtYWNsdmwgMiIsIiIsbWFjbHZsKTsKKyAgICAgICAgICAgIGlmIChzc3RhdGUpIHBy b3RvKCk7ICAgICAgICAvKiBpbmNsdWRpbmcgcHJvdG9jb2wgY29tbWFuZHMuICovCisgICAgICAg IH0KKyAgICAgICAgZGVidWcoRjEwMSwiZG9tYWMgbG9vcCBleGl0IG1hY2x2bCIsIiIsbWFjbHZs KTsKKyAgICB9CisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICB0ZXJtX2lvID0gdGVy bV9pb19zYXY7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHJl dHVybihzdWNjZXNzKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCisvKgorICBHIEUgVCBOIEMg VAorCisgIEdldCBuZXh0IGNvbW1hbmQgZnJvbSBUQUtFIChjb21tYW5kKSBmaWxlLgorCisgIENh bGwgd2l0aDoKKyAgIHMgICAgIFBvaW50ZXIgdG8gYnVmZmVyIHRvIHJlYWQgaW50bworICAgbiAg ICAgTGVuZ3RoIG9mIGJ1ZmZlcgorICAgZiAgICAgRmlsZSBkZXNjcmlwdG9yIG9mIGZpbGUgdG8g cmVhZCBmcm9tCisgICBmbGFnICAwID09IGtlZXAgbGluZSB0ZXJtaW5hdG9yIG9uIGFuZCBhbGxv dyBjb250aW51YXRpb24KKyAgICAgICAgIDEgPT0gZGlzY2FyZCBsaW5lIHRlcm1pbmF0b3IgYW5k IGRvbid0IGFsbG93IGNvbnRpbnVhdGlvbgorCisgIENhbGwgd2l0aCBmbGFnID09IDAgdG8gcmVh ZCBhIGNvbW1hbmQgZnJvbSBhIFRBS0UgZmlsZTsKKyAgQ2FsbCB3aXRoIGZsYWcgIT0gMCB0byBy ZWFkIGEgbGluZSBmcm9tIGEgZGlhbGluZyBvciBuZXR3b3JrIGRpcmVjdG9yeS4KKworICBJbiBi b3RoIGNhc2VzLCB0cmFpbGluZyBjb21tZW50cyBhbmQvb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBp cy9hcmUgc3RyaXBwZWQuCisgIElmIGZsYWcgPT0gMCwgY29udGludWVkIGxpbmVzIGFyZSBjb21i aW5lZCBpbnRvIG9uZSBsaW5lLiAgQSBjb250aW51ZWQgbGluZQorICBpcyBvbmUgdGhhdCBlbmRz IGluIGh5cGVuLCBvciBhbnkgbGluZSBpbiBhICJibG9jayIsIHdoaWNoIHN0YXJ0cyB3aXRoICJ7 IgorICBhdCB0aGUgZW5kIG9mIGEgbGluZSBhbmQgZW5kcyB3aXRoIGEgbWF0Y2hpbmcgIn0iIGF0 IHRoZSBiZWdpbm5pbmcgb2YgYQorICBzdWJzZXF1ZW50IGxpbmU7IGJsb2NrcyBtYXkgYmUgbmVz dGVkLgorCisgIFJldHVybnM6CisgICAwIGlmIGEgc3RyaW5nIHdhcyBjb3BpZWQsCisgIC0xIG9u IEVPRiwKKyAgLTIgb24gbWFsbG9jIGZhaWx1cmUKKyAgLTMgaWYgbGluZSBpcyBub3QgcHJvcGVy bHkgdGVybWluYXRlZAorICAtNCBpZiAocG9zc2libHkgY29udGludWVkKSBsaW5lIGlzIHRvbyBs b25nLgorKi8KK3N0YXRpYyBpbnQgbHB4bGVuID0gMDsKKworaW50CitnZXRuY3QocyxuLGYsZmxh ZykgY2hhciAqczsgaW50IG47IEZJTEUgKmY7IGludCBmbGFnOyB7CisgICAgaW50IGkgPSAwLCBs ZW4gPSAwLCBidWZsZW4gPSAwOworICAgIGNoYXIgYyA9IE5VTCwgY2MgPSBOVUwsIGNjbCA9IE5V TCwgY2N4ID0gTlVMLCAqczIgPSBOVUxMOworICAgIGNoYXIgKmxwID0gTlVMTCwgKmxweCA9IE5V TEwsICpscDIgPSBOVUxMLCAqbHAzID0gTlVMTCwgKmxhc3Rjb21tYSA9IE5VTEw7CisgICAgY2hh ciAqIHByZXYgPSBOVUxMOworICAgIGludCBiYyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEJsb2NrIGNvdW50ZXIgKi8KKworICAgIHMyID0gczsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlbWVtYmVyIG9yaWdpbmFsIHBvaW50ZXIgKi8KKyAgICBwcmV2ID0gczI7CQkJ CS8qIEhlcmUgdG9vICovCisgICAgYnVmbGVuID0gbjsgICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVtZW1iZXIgb3JpZ2luYWwgYnVmZmVyIGxlbmd0aCAqLworCisgICAgaWYgKG4gPCAwKQor ICAgICAgcmV0dXJuKC0yKTsKKworICAgIC8qIEFsbG9jYXRlIGEgbGluZSBidWZmZXIgb25seSBp ZiB3ZSBkb24ndCBoYXZlIG9uZSB0aGF0J3MgYmlnIGVub3VnaCAqLworCisgICAgZGVidWcoRjEx MSwiZ2V0bmN0Iixja2l0b2EobHB4bGVuKSxuKTsKKworICAgIGlmIChscHggJiYgKG4gPiBscHhs ZW4pKSB7ICAgICAgICAgIC8qIEhhdmUgb25lIGFscmVhZHkgKi8KKyAgICAgICAgZGVidWcoRjEw MSwiZ2V0bmN0IG5ldyBidWZmZXIiLCIiLGxweGxlbik7CisgICAgICAgIGZyZWUobHB4KTsgICAg ICAgICAgICAgICAgICAgICAgLyogQnV0IGl0J3Mgbm90IGJpZyBlbm91Z2ggKi8KKyAgICAgICAg bHB4ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAvKiBGcmVlIGN1cnJlbnQgb25lICovCisg ICAgICAgIGxweGxlbiA9IDA7CisgICAgfQorICAgIGlmICghbHB4KSB7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEdldCBuZXcgb25lICovCisgICAgICAgIGlmICghKGxweCA9IChjaGFyICop IG1hbGxvYyhuKSkpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldG5jdCBtYWxsb2MgZmFp bHVyZSIsIiIsMCk7CisgICAgICAgICAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBmYWls dXJlIFtnZXRuY3Q6JWRdXG4iLG4pOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAg fQorICAgICAgICBscHhsZW4gPSBuOworICAgIH0KKyAgICBscDIgPSBscHg7CisjaWZkZWYgS0xV REdFCisgICAgLyogTk9URTogTm8gbG9uZ2VyIHVzZWQgYXMgb2YgMTQgQXVnIDIwMDAgKi8KKyAg ICBscDIrKzsKKyNlbmRpZiAvKiBLTFVER0UgKi8KKworICAgIHdoaWxlICgxKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIExvb3AgdG8gcmVhZCBsaW5lcyBmcm9tIGZpbGUgKi8KKyAgICAg ICAgZGVidWcoRjEwMSwiZ2V0bmN0IHdoaWxlICgxKSIsIiIsbik7CisgICAgICAgIGlmIChmZ2V0 cyhscDIsbixmKSA9PSBOVUxMKSB7ICAgLyogUmVhZCBhIGxpbmUgaW50byBscDIgKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsImdldG5jdCBFT0YiLHMyLDApOyAvKiBFT0YgKi8KKyAgICAgICAg ICAgIGZyZWUobHB4KTsgICAgICAgICAgICAgICAgICAvKiBGcmVlIHRlbXBvcmFyeSBzdG9yYWdl ICovCisgICAgICAgICAgICBscHggPSBOVUxMOworICAgICAgICAgICAgKnMgPSBOVUw7ICAgICAg ICAgICAgICAgICAgIC8qIE1ha2UgZGVzdGluYXRpb24gYmUgZW1wdHkgKi8KKyAgICAgICAgICAg IHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gZmFpbHVyZSBjb2RlICovCisg ICAgICAgIH0KKworI2lmbmRlZiBOT0RJQUwKKyAgICAgICAgaWYgKGZsYWcpICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb3VudCB0aGlzIGxpbmUgKi8KKyAgICAgICAgICBkaXJsaW5lKys7Cisg ICAgICAgIGVsc2UKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAgICAgICAgICB0ZmxpbmVbdGxldmVs XSsrOworICAgICAgICBsZW4gPSBzdHJsZW4obHAyKSAtIDE7ICAgICAgICAgIC8qIFBvc2l0aW9u IG9mIGxpbmUgdGVybWluYXRvciAqLworICAgICAgICBpZiAobGVuID09IDAgJiYgbHAyWzBdICE9 ICdcbicpIHsgLyogTGFzdCBsaW5lIGluIGZpbGUgaGFzIG9uZSBjaGFyICovCisgICAgICAgICAg ICBscDJbKytsZW5dID0gJ1xuJzsgICAgICAgICAgLyogdGhhdCBpcyBub3QgYSBuZXdsaW5lICov CisgICAgICAgICAgICBscDJbbGVuXSA9IE5VTDsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhG MDEwLCJnZXRuY3QiLGxwMiwwKTsKKyAgICAgICAgaWYgKGxlbiA8IDApCisgICAgICAgICAgbGVu ID0gMDsKKyAgICAgICAgaWYgKHRlY2hvICYmIHBmbGFnKSAgICAgICAgICAgICAvKiBJZiBUQUtF IEVDSE8gT04sICovCisgICAgICAgICAgcHJpbnRmKCIlM2QuICVzIiwgICAgICAgICAgICAgLyog ZWNobyBpdCB0aGlzIGxpbmUuICovCisjaWZuZGVmIE5PRElBTAorICAgICAgICAgICAgICAgICBm bGFnID8gZGlybGluZSA6CisjZW5kaWYgLyogTk9ESUFMICovCisgICAgICAgICAgICAgICAgIHRm bGluZVt0bGV2ZWxdLAorICAgICAgICAgICAgICAgICBscDIKKyAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgbHAzID0gbHAyOyAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JraW5nIHBvaW50 ZXIgKi8KKyAgICAgICAgaSA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgZmly c3Qgbm9ud2hpdGVzcGFjZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgd2hpbGUgKGkgPiAwICYmICgq bHAzID09IFNQIHx8ICpscDMgPT0gSFQpKSB7CisgICAgICAgICAgICBpLS07CisgICAgICAgICAg ICBscDMrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSAwICYmIGJjID4gMCkgICAgICAg ICAgIC8qIEJsYW5rIGxpbmUgaW4gey4uLn0gYmxvY2sgKi8KKyAgICAgICAgICBjb250aW51ZTsK KworICAgICAgICAvKiBJc29sYXRlLCByZW1vdmUsIGFuZCBjaGVjayB0ZXJtaW5hdG9yICovCisK KyAgICAgICAgYyA9IGxwMltsZW5dOyAgICAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiBsaW5l IHRlcm1pbmF0b3IgKi8KKyAgICAgICAgLyogZGVidWcoRjEwMSwiZ2V0bmN0IHRlcm1pbmF0b3Ii LCIiLGMpOyAqLworICAgICAgICBpZiAoYyA8IExGIHx8IGMgPiBDUikgeyAgICAgICAgIC8qIEl0 J3Mgbm90IGEgdGVybWluYXRvciAqLworICAgICAgICAgICAgLyogZGVidWcoRjExMSwiZ2V0bmN0 IGJhZCBsaW5lIixscDIsYyk7ICovCisgICAgICAgICAgICBpZiAoZmVvZihmKSAmJiBsZW4gPiAw ICYmIGxlbiA8IG4pIHsKKyAgICAgICAgICAgICAgICAvKiBLbHVkZ2UgQWxlcnQuLi4gKi8KKyAg ICAgICAgICAgICAgICBpZiAoIXF1aWV0KQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCJXQVJO SU5HOiBMYXN0IGxpbmUgb2YgJXMgbGFja3MgdGVybWluYXRvclxuIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBzMiA9PSBjbWRidWYgPyAiY29tbWFuZCBmaWxlIiA6ICJkaXJlY3RvcnkgZmls ZSIpOworICAgICAgICAgICAgICAgIGMgPSBscDJbKytsZW5dID0gJ1xuJzsgIC8qIE5vIGJpZyBk ZWFsIC0gc3VwcGx5IG9uZS4gKi8KKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAvKiBTb21ldGhpbmcncyB3cm9uZywgZmFpbC4gKi8KKyAgICAgICAgICAgICAgICBmcmVl KGxweCk7CisgICAgICAgICAgICAgICAgbHB4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1 cm4oLTMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIFRyaW0gdHJhaWxp bmcgd2hpdGVzcGFjZSAqLworCisgICAgICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPiAtMSAmJiBs cDJbaV0gPD0gU1A7IGktLSkgLyogVHJpbSAqLworICAgICAgICAgIDsKKyAgICAgICAgLyogZGVi dWcoRjEwMSwiZ2V0bmN0IGkiLCIiLGkpOyAqLworICAgICAgICBscDJbaSsxXSA9IE5VTDsgICAg ICAgICAgICAgICAgIC8qIFRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisgICAgICAgIC8qIGRlYnVn KEYxMTAsImdldG5jdCBscDIiLGxwMiwwKTsgKi8KKyAgICAgICAgbHAgPSBscDI7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBNYWtlIGEgd29ya2luZyBwb2ludGVyICovCisKKyAgICAgICAgLyog UmVtb3ZlIHRyYWlsaW5nIG9yIGZ1bGwtbGluZSBjb21tZW50ICovCisKKyAgICAgICAgd2hpbGUg KChjYyA9ICpscCkpIHsKKyAgICAgICAgICAgIGlmIChjYyA9PSAnOycgfHwgY2MgPT0gJyMnKSB7 IC8qIENvbW1lbnQgaW50cm9kdWNlcj8gKi8KKyAgICAgICAgICAgICAgICBpZiAobHAgPT0gbHAy KSB7ICAgICAgICAvKiBGaXJzdCBjaGFyIG9uIGxpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAg KmxwID0gTlVMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKCoobHAgLSAxKSA9PSBTUCB8fCAqKGxwIC0gMSkgPT0gSFQpIHsKKyAgICAgICAg ICAgICAgICAgICAgbHAtLTsKKyAgICAgICAgICAgICAgICAgICAgKmxwID0gTlVMOyAgLyogT3Ig cHJlY2VkZWQgYnkgd2hpdGVzcGFjZSAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBscCsrOworICAgICAg ICB9CisgICAgICAgIGlmIChscCA+IGxwMikKKyAgICAgICAgICBscC0tOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgdGhlIE5VTCAqLworCisgICAgICAgIC8qIE5vdyB0 cmltIGFueSBzcGFjZSB0aGF0IHByZWNlZGVkIHRoZSBjb21tZW50ICovCisKKyAgICAgICAgd2hp bGUgKCgqbHAgPT0gU1AgfHwgKmxwID09IEhUKSAmJiBscCA+PSBscDIpIHsKKyAgICAgICAgICAg ICpscCA9IE5VTDsKKyAgICAgICAgICAgIGlmIChscCA8PSBscDIpCisgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgbHAtLTsKKyAgICAgICAgfQorICAgICAgICAvKiBkZWJ1ZyhGMTEw LCJnZXRuY3QgY29tbWVudCB0cmltbWVkIixscDIsMCk7ICovCisKKyAgICAgICAgbGVuID0gc3Ry bGVuKGxwMik7ICAgICAgICAgICAgICAvKiBMZW5ndGggYWZ0ZXIgdHJpbW1pbmcgKi8KKworICAg ICAgICBpZiAobiAtIGxlbiA8IDIpIHsgICAgICAgICAgICAgIC8qIENoZWNrIHJlbWFpbmluZyBz cGFjZSAqLworICAgICAgICAgICAgZGVidWcoRjExMSwiZ2V0bmN0IGNvbW1hbmQgdG9vIGxvbmci LHMyLGJ1Zmxlbik7CisgICAgICAgICAgICBwcmludGYoIj9MaW5lIHRvbyBsb25nLCBtYXhpbXVt IGxlbmd0aDogJWQuXG4iLGJ1Zmxlbik7CisgICAgICAgICAgICBmcmVlKGxweCk7CisgICAgICAg ICAgICByZXR1cm4oLTQpOworICAgICAgICB9CisgICAgICAgIGNjbCA9IChsZW4gPiAwKSA/IGxw MltsZW4tMV0gOiAwOyAgICAgLyogTGFzdCBjaGFyYWN0ZXIgaW4gbGluZSAqLworICAgICAgICBj Y3ggPSAobGVuID4gMSkgPyBscDJbbGVuLTJdIDogMDsgICAgIC8qIFBlbnVsdGltYXRlIGNoYXIg aW4gbGluZSAqLworCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAvKiBMaW5lIGNvbnRhaW5pbmcg b25seSB3aGl0ZXNwYWNlIGFuZCAsLSAqLworICAgICAgICBpZiAoKGxlbiA+IDEpICYmIChscDMg PT0gbHAyK2xlbi0yKSAmJiAoY2NsID09ICctJykgJiYgKGNjeCA9PSAnLCcpKQorICAgICAgICAg IGNvbnRpbnVlOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIEtMVURHRQorLyoKKyAg SWYgaXQgaXMgYSBjb21tYW5kIGFuZCBpdCBiZWdpbnMgd2l0aCBhIHRva2VuIChsaWtlICEgb3Ig LikgdGhhdCBpcyBub3QKKyAgZm9sbG93ZWQgYnkgYSBzcGFjZSwgaW5zZXJ0IGEgc3BhY2Ugbm93 OyBvdGhlcndpc2UgY21rZXkoKSBjYW4gZ2V0IG1pZ2h0eQorICBjb25mdXNlZC4KKyovCisgICAg ICAgIGlmIChzID09IHMyICYmICFmbGFnKSB7CisgICAgICAgICAgICBjaGFyICpwID0gdG9rdGFi OworICAgICAgICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAgICAgICAgaWYgKCpwID09ICps cDMgJiYgKihwKzEpICE9IFNQKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImdl dG5jdCB0b2tlbiIscCwwKTsKKyAgICAgICAgICAgICAgICAgICAgKmxwMy0tID0gU1A7CisgICAg ICAgICAgICAgICAgICAgICpscDMgPSAqcDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxwMyA8 IGxwMikgeworICAgICAgICAgICAgICAgICAgICAgICAgbHAyLS07CisgICAgICAgICAgICAgICAg ICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgIHArKzsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIEtMVURHRSAqLworICAgICAgICBs cCA9IGxwMjsKKworICAgICAgICB3aGlsZSAoKCpzKysgPSAqbHArKykpICAgICAgICAgIC8qIENv cHkgcmVzdWx0IHRvIHRhcmdldCBidWZmZXIgKi8KKyAgICAgICAgICBuLS07ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhY2NvdW50aW5nIGZvciBsZW5ndGggKi8KKyAgICAgICAgcy0tOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgdGhlIE5VTCAqLworCisg ICAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhpcyBsaW5lIGlzIGNvbnRpbnVlZCAqLworCisgICAg ICAgIGlmIChmbGFnKSAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbGluZSBjb250aW51YXRp b24gd2hlbiBmbGFnPTEgKi8KKyAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTbyBicmVhayBvdXQgb2YgcmVhZC1saW5lcyBsb29wICovCisKKyNpZmRlZiBDT01NRU5U CisgICAgICAgIGRlYnVnKEYwMDAsImdldG5jdCBmaXJzdCBjaGFyIiwiIiwqbHAzKTsKKyAgICAg ICAgZGVidWcoRjAwMCwiZ2V0bmN0IGxhc3QgY2hhciIsIiIsY2NsKTsKKyAgICAgICAgZGVidWco RjAwMCwiZ2V0bmN0IG5leHQtdG8tbGFzdCBjaGFyIiwiIixjY3gpOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKworICAgICAgICBpZiAoYmMgPiAwICYmICpscDMgPT0gJ30nKSB7ICAgIC8qIEZpcnN0 IGNoYXIgb24gbGluZSBpcyAnfScgKi8KKyAgICAgICAgICAgIGJjLS07CQkJLyogRGVjcmVtZW50 IGJsb2NrIGNvdW50ZXIgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYyA9PSAwICYmICAg ICAgICAgICAgICAgICAgLyogTGluZSBpcyBjb250aW51ZWQgaWYgYmMgPiAwICovCisjaWZkZWYg Q09NTUVOVAorICAgICAgICAgICAgLyogTm90IHN1cHBvcnRlZCBhcyBvZiBDLUtlcm1pdCA2LjAg Ki8KKyAgICAgICAgICAgIGNjbCAhPSBDTURRICYmICAgICAgICAgICAgICAvKiBvciBsaW5lIGVu ZHMgd2l0aCBDTURRICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2NsICE9 ICctJyAgJiYgICAgICAgICAgICAgIC8qIG9yIGxpbmUgZW5kcyB3aXRoIGRhc2ggKi8KKyAgICAg ICAgICAgIGNjbCAhPSAneycpICAgICAgICAgICAgICAgICAvKiBvciBsaW5lIGVuZHMgd2l0aCBv cGVuaW5nIGJyYWNlICovCisgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg LyogTm9uZSBvZiB0aG9zZSwgd2UncmUgZG9uZS4gKi8KKworICAgICAgICBpZiAoY2NsID09ICct JyB8fCBjY2wgPT0gJ3snKSAgIC8qIENvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKi8KKyAgICAgICAg ICBpZiAoY2N4ID09IENNRFEpICAgICAgICAgICAgICAvKiBCdXQgaXQncyBxdW90ZWQgKi8KKyAg ICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiBzbyBpZ25vcmUgaXQgKi8K KworICAgICAgICBpZiAoY2NsID09ICd7JykgeyAgICAgICAgICAgICAgIC8qIExhc3QgY2hhciBv biBsaW5lIGlzICd7Jz8gKi8KKyAgICAgICAgICAgIGJjKys7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBDb3VudCB0aGUgYmxvY2sgb3BlbmVyLiAqLworICAgICAgICB9IGVsc2UgaWYgKGNjbCA9 PSAnLScpIHsgICAgICAgIC8qIEV4cGxpY2l0IGNvbnRpbnVlPyAqLworICAgICAgICAgICAgY2hh ciBjLCAqIHNzOworICAgICAgICAgICAgaW50IHN0YXRlID0gMCwgbm47CisgICAgICAgICAgICBz LS07ICAgICAgICAgICAgICAgICAgICAgICAgLyogWWVzLCBiYWNrIHVwIG92ZXIgdGVybWluYXRv cnMgKi8KKyAgICAgICAgICAgIG4rKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgb3Zl ciBjb250aW51YXRpb24gY2hhcmFjdGVyICovCisgICAgICAgICAgICBubiA9IG47ICAgICAgICAg ICAgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IGNvdW50ICovCisgICAgICAgICAgICBzcyA9IHM7 ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHBvaW50ZXIgKi8KKyAgICAgICAgICAgIHMtLTsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWNrIHVwIG92ZXIgZGFzaCAqLworICAgICAgICAg ICAgbisrOworICAgICAgICAgICAgd2hpbGUgKHN0YXRlIDwgMiAmJiBzID49IHByZXYpIHsgLyog Q2hlY2sgZm9yICJ7LC0iICovCisgICAgICAgICAgICAgICAgbisrOworICAgICAgICAgICAgICAg IGMgPSAqcy0tOworICAgICAgICAgICAgICAgIGlmIChjIDw9IFNQKQorICAgICAgICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGMgIT0gJywnICYmIGMgIT0gJ3snKQor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkg eworICAgICAgICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgIC8qIExvb2tpbmcgZm9y IGNvbW1hICovCisgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICcsJykKKyAgICAgICAgICAg ICAgICAgICAgICBzdGF0ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgIC8qIExvb2tpbmcgZm9yIGxlZnQgYnJh Y2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ3snKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBzdGF0ZSA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBzICs9IDI7Cisg ICAgICAgICAgICAgICAgICAgICAgICAqcyA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJjKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXRl ICE9IDIpIHsgcyA9IHNzOyBuID0gbm47IH0KKyAgICAgICAgICAgICpzID0gTlVMOworICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vbmUgb2YgdGhvc2UgYnV0IChi YyA+IDApICovCisgICAgICAgICAgICBsYXN0Y29tbWEgPSBzOworICAgICAgICAgICAgKnMrKyA9 ICcsJzsgICAgICAgICAgICAgICAgIC8qIGFuZCBpbnNlcnQgYSBjb21tYSAqLworICAgICAgICAg ICAgbi0tOworICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBkZWJ1ZyhGMTAxLCJn ZXRuY3QgYmMiLCIiLGJjKTsKKyAgICAgICAgZGVidWcoRjEwMCwiZ2V0bmN0IGNvbnRpbnVlZCIs IiIsMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgICAgICpzID0gTlVMOworICAgICAg ICBwcmV2ID0gczsKKworICAgIH0gLyogcmVhZC1saW5lcyB3aGlsZSBsb29wICovCisKKyAgICBp ZiAobGFzdGNvbW1hKQorICAgICAgKmxhc3Rjb21tYSA9IFNQOworICAgIGlmICghZmxhZykgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRhY2sgbGluZSB0ZXJtaW5hdG9yIGJhY2sgb24gKi8K KyAgICAgICpzKysgPSBjOworICAgICpzKysgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRlcm1pbmF0ZSB0aGUgc3RyaW5nICovCisgICAgdW50YWIoczIpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRG9uZSwgY29udmVydCB0YWJzIHRvIHNwYWNlcyAqLworI2lmZGVmIERF QlVHCisgICAgaWYgKCFmbGFnKSB7CisgICAgICAgIGRlYnVnKEYwMTAsIkNNRChGKSIsczIsMCk7 CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgZnJlZShscHgpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRnJlZSB0ZW1wb3Jhcnkgc3RvcmFnZSAqLworICAgIHJldHVybigwKTsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBzdWNjZXNzICovCit9CisKK1ZPSUQK K3Nob3N0YWNrKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEdW1wIHRoZSBjb21t YW5kIHN0YWNrICovCisgICAgaW50IGk7CisgICAgY2hhciAqcDsKKyNpZm5kZWYgTk9TUEwKKyAg ICBmb3IgKGkgPSBjbWRsdmw7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgaWYgKGNtZHN0a1tpXS5z cmMgPT0gQ01EX1RGKSB7CisgICAgICAgICAgICBwID0gdGZuYW1bY21kc3RrW2ldLmx2bF07Cisg ICAgICAgICAgICBpZiAoemZucWZwKHAsVE1QQlVGU0laLHRtcGJ1ZikpCisgICAgICAgICAgICAg IHAgPSB0bXBidWY7CisgICAgICAgICAgICBwcmludGYoIiAlMmQuIEZpbGUgIDogJXMgKGxpbmUg JWQpXG4iLAorICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgcCwKKyAg ICAgICAgICAgICAgICAgICB0ZmxpbmVbY21kc3RrW2ldLmx2bF0KKyAgICAgICAgICAgICAgICAg ICApOworICAgICAgICB9IGVsc2UgaWYgKGNtZHN0a1tpXS5zcmMgPT0gQ01EX01EKSB7CisgICAg ICAgICAgICBjaGFyICogbTsKKyAgICAgICAgICAgIG0gPSBtX2FyZ1tjbWRzdGtbaV0ubHZsXVsw XTsgLyogTmFtZSBvZiB0aGlzIG1hY3JvICovCisgICAgICAgICAgICBpZiAoaSA+IDApIHsgICAg ICAgICAgICAgICAgIC8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIDItbGV2ZWwgKi8KKyAgICAgICAg ICAgICAgICBjaGFyICpzOyAgICAgICAgICAgICAgICAgLyogYnVpbHQtaW4gbWFjcm9zLi4uICov CisgICAgICAgICAgICAgICAgcyA9IG1fYXJnW2NtZHN0a1tpLTFdLmx2bF1bMF07IC8qIE5hbWUg bmV4dCBsZXZlbCB1cCAqLworICAgICAgICAgICAgICAgIGlmIChzICYmIGNtZHN0a1tpLTFdLnNy YyA9PSBDTURfTUQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAocywiX2Zvcngi KSkKKyAgICAgICAgICAgICAgICAgICAgICBtID0gIkZPUiI7CisgICAgICAgICAgICAgICAgICAg IGVsc2UgaWYgKCFzdHJjbXAocywiX3hpZiIpKQorICAgICAgICAgICAgICAgICAgICAgIG0gPSAi WElGIjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcChzLCJfd2hpbGUiKSkK KyAgICAgICAgICAgICAgICAgICAgICBtID0gIldISUxFIjsKKyAgICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAoIXN0cmNtcChzLCJfc3dpdHgiKSkKKyAgICAgICAgICAgICAgICAgICAgICBtID0g IlNXSVRDSCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg cHJpbnRmKCIgJTJkLiBNYWNybyA6ICVzXG4iLGksbSk7CisgICAgICAgIH0gZWxzZSBpZiAoY21k c3RrW2ldLnNyYyA9PSBDTURfS0IpIHsKKyAgICAgICAgICAgIHByaW50ZigiICUyZC4gUHJvbXB0 OlxuIixpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiICUyZC4gRVJS T1IgOiBDb21tYW5kIHNvdXJjZSB1bmtub3duXG4iLGkpOworICAgICAgICB9CisgICAgfQorI2Vs c2UKKyAgICBmb3IgKGkgPSB0bGV2ZWw7IGkgPiAtMTsgaS0tKSB7CisgICAgICAgIHAgPSB0Zm5h bVtpXTsKKyAgICAgICAgaWYgKHpmbnFmcChwLFRNUEJVRlNJWix0bXBidWYpKQorICAgICAgICAg IHAgPSB0bXBidWY7CisgICAgICAgIHByaW50ZigiICUyZC4gRmlsZSAgOiAlcyAobGluZSAlZClc biIsCisgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgcCwKKyAgICAgICAgICAgICAg IHRmbGluZVtpXQorICAgICAgICAgICAgICAgKTsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8K KyAgICBpZiAoaSA9PSAwKQorICAgICAgcHJpbnRmKCIgJTJkLiBQcm9tcHQ6ICh0b3AgbGV2ZWwp XG4iLDApOworfQorCisvKiBGb3IgY29tbWFuZCBlcnJvciBtZXNzYWdlcyAtIGF2b2lkIGR1bXBp bmcgb3V0IHRoZSBjb250ZW50cyBvZiBzb21lICovCisvKiBzb21lIGh1Z2UgRk9SIGxvb3AgaWYg aXQgY29udGFpbnMgYSBzeW50YXggZXJyb3IuICovCisKK3N0YXRpYyBjaGFyICoKK2NtZGRpc3Bs YXkocywgY3gpIGNoYXIgKiBzOyBpbnQgY3g7IHsKKyAgICBzdGF0aWMgY2hhciBidWZbODBdOwor ICAgIGlmICgoaW50KXN0cmxlbihzKSA+IDcwKSB7CisJc3ByaW50ZihidWYsIiUuNjRzLi4uIixz KTsJLyogU0FGRSAqLworCXMgPSBidWY7CisgICAgfQorICAgIHJldHVybihzKTsKK30KKworc3Rh dGljIFZPSUQKK2NtZGVycigpIHsKKyAgICBpZiAoeGNtZHNyYyA+IDApIHsKKwlzd2l0Y2ggKGNt ZF9lcnIpIHsJCS8qIFNFVCBDT01NQU5EIEVSUk9SLURJU1BMQVkgKi8KKwkgIGNhc2UgMDoKKwkg ICAgYnJlYWs7CisJICBjYXNlIDE6CisJICBjYXNlIDI6CisJICAgIGlmICh0bGV2ZWwgPiAtMSkg eworI2lmbmRlZiBOT1NQTAorCQlpZiAoeGNtZHNyYyA9PSAyKQorCQkgIHByaW50ZigKKyJJbiBt YWNybyBvciBibG9jayBkZWZpbmVkIGluIGZpbGU6ICVzIHN0YXJ0aW5nIGFib3V0IGxpbmUgJWRc biIsCisJCQkgdGZuYW1bdGxldmVsXSA/IHRmbmFtW3RsZXZlbF0gOiAiIiwgdGZsaW5lW3RsZXZl bF0KKwkJCSApOworCQllbHNlCisjZW5kaWYgLyogTk9TUEwgKi8KKwkJICBwcmludGYoIkZpbGU6 ICVzLCBMaW5lOiAlZFxuIiwKKwkJCSB0Zm5hbVt0bGV2ZWxdID8gdGZuYW1bdGxldmVsXSA6ICIi LCB0ZmxpbmVbdGxldmVsXQorCQkJICk7CisJICAgIH0KKyNpZm5kZWYgTk9TUEwKKwkgICAgaWYg KGNtZF9lcnIgPT0gMikgeworCQlpZiAoY21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9NRCkgeyAv KiBFeGVjdXRpbmcgYSBtYWNybz8gKi8KKwkJICAgIGludCBtOworCQkgICAgbSA9IGNtZHN0a1tj bWRsdmxdLmx2bDsKKwkJICAgIGlmIChtbG9vayhtYWN0YWIsbV9hcmdbbV1bMF0sbm1hYykgPj0g MCkKKwkJICAgICAgcHJpbnRmKCJNYWNybyBuYW1lOiAlc1xuIiwgbV9hcmdbbV1bMF0pOworCQl9 CisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCSAgICBicmVhazsKKworCSAgY2FzZSAzOgor CSAgICBwcmludGYoIkNvbW1hbmQgc3RhY2s6XG4iKTsKKwkgICAgc2hvc3RhY2soKTsJCQkgICAg CisJfQorICAgIH0KK30KKworLyogIFAgQSBSIFMgRSBSICAtLSAgVG9wLWxldmVsIGludGVyYWN0 aXZlIGNvbW1hbmQgcGFyc2VyLiAgKi8KKworLyoKKyAgQ2FsbCB3aXRoOgorICAgIG0gPSAwIGZv ciBub3JtYWwgYmVoYXZpb3I6IGtlZXAgcGFyc2luZyBhbmQgZXhlY3V0aW5nIGNvbW1hbmRzCisg ICAgICAgICAgdW50aWwgYW4gYWN0aW9uIGNvbW1hbmQgaXMgcGFyc2VkLCB0aGVuIHJldHVybiB3 aXRoIGEKKyAgICAgICAgICBLZXJtaXQgc3RhcnQtc3RhdGUgYXMgdGhlIHZhbHVlIG9mIHRoaXMg ZnVuY3Rpb24uCisgICAgbSA9IDEgdG8gcGFyc2Ugb25seSBvbmUgY29tbWFuZCwgY2FuIGFsc28g YmUgdXNlZCB0byBjYWxsIHBhcnNlcigpCisgICAgICAgICAgcmVjdXJzaXZlbHkuCisgICAgbSA9 IDIgdG8gcmVhZCBidXQgZG8gbm90IGV4ZWN1dGUgb25lIGNvbW1hbmQuCisgIEluIGFsbCBjYXNl cywgcGFyc2VyKCkgcmV0dXJuczoKKyAgICAwICAgICBpZiBubyBLZXJtaXQgcHJvdG9jb2wgYWN0 aW9uIHJlcXVpcmVkCisgICAgPiAwICAgd2l0aCBhIEtlcm1pdCBwcm90b2NvbCBzdGFydC1zdGF0 ZS4KKyAgICA8IDAgICB1cG9uIGVycm9yLgorKi8KK2ludAorcGFyc2VyKG0pIGludCBtOyB7Cisg ICAgaW50IHRmY29kZSwgeHgsIHl5LCB6ejsgICAgICAgICAgICAgLyogV29ya2VycyAqLworICAg IGludCBpc190biA9IDA7CisgICAgaW50IGNkbG9zdCA9IDA7CisKKyNpZm5kZWYgTk9TUEwKKyAg ICBpbnQgaW5sZXZlbDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZXZlbCB3ZSB3ZXJlIGNh bGxlZCBhdCAqLworICAgIGV4dGVybiBpbnQgYXNrZmxhZywgZWNob3N0YXJzOworI2VuZGlmIC8q IE5PU1BMICovCisgICAgY2hhciAqY2JwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29t bWFuZCBidWZmZXIgcG9pbnRlciAqLworI2lmZGVmIE1BQworICAgIGV4dGVybiBjaGFyICpsZmls ZXM7ICAgICAgICAgICAgICAgIC8qIEZha2UgZXh0ZXJuIGNhc3QgKi8KKyNlbmRpZiAvKiBNQUMg Ki8KKyAgICBleHRlcm4gaW50IGludGVycnVwdGVkOworI2lmbmRlZiBOT1hGRVIKKyAgICBleHRl cm4gaW50IHNuZGNtZCwgZ2V0Y21kLCBmYXRhbGlvLCBjbGVhcnJxOworI2VuZGlmIC8qIE5PWEZF UiAqLworCisjaWZkZWYgQU1JR0EKKyAgICByZXFyZXMoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXN0b3JlIEFtaWdhRE9TIHJlcXVlc3RvcnMgKi8KKyNlbmRpZiAvKiBBTUlHQSAq LworCisjaWZkZWYgT1MyCisgICAgaWYgKGN1cnNvcl9zYXZlID4gLTEpIHsgICAgICAgICAgICAg LyogUmVzdG9yZSBjdXJzb3IgaWYgaXQgd2FzICovCisgICAgICAgIGN1cnNvcmVuYVtWQ01EXSA9 IGN1cnNvcl9zYXZlOyAgLyogdHVybmVkIG9mZiBkdXJpbmcgZmlsZSB0cmFuc2ZlciAqLworICAg ICAgICBjdXJzb3Jfc2F2ZSA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVm IElLU0RCCisgICAgaWYgKGlrZGJvcGVuKSBzbG90c3RhdGUod2hhdCwiQ09NTUFORCBQUk9NUFQi LCIiLCIiKTsgLyogSUtTRCBkYXRhYmFzZSAqLworI2VuZGlmIC8qIElLU0RCICovCisKKyAgICBp c190biA9IChsb2NhbCAmJiBuZXR3b3JrICYmIElTX1RFTE5FVCgpKSB8fAorICAgICAgKCFsb2Nh bCAmJiBzc3RlbG5ldCk7CisKKyAgICBpZiAoIXhjbWRzcmMpICAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiBhdCB0b3AgKGludGVyYWN0aXZlKSBsZXZlbCAuLi4gKi8KKyAgICAgIGNvbmNiKChj aGFyKWVzY2FwZSk7ICAgICAgICAgICAgICAvKiBwdXQgY29uc29sZSBpbiAnY2JyZWFrJyBtb2Rl LiAqLworCisjaWZkZWYgQ0tfVE1QRElSCisvKiBJZiB3ZSB3ZXJlIGNkJ2QgdGVtcG9yYXJpbHkg dG8gYW5vdGhlciBkZXZpY2Ugb3IgZGlyZWN0b3J5IC4uLiAqLworICAgIGlmIChmX3RtcGRpcikg eworICAgICAgICBpbnQgeDsKKyAgICAgICAgeCA9IHpjaGRpcigoY2hhciAqKSBzYXZkaXIpOyAg ICAvKiAuLi4gcmVzdG9yZSBwcmV2aW91cyBkaXJlY3RvcnkgKi8KKyAgICAgICAgZl90bXBkaXIg PSAwOyAgICAgICAgICAgICAgICAgICAvKiBhbmQgcmVtZW1iZXIgd2UgZGlkIGl0LiAqLworICAg ICAgICBkZWJ1ZyhGMTExLCJwYXJzZXIgdG1wZGlyIHJlc3RvcmluZyIsc2F2ZGlyLHgpOworICAg IH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIGlubGV2ZWwg PSBjbWRsdmw7ICAgICAgICAgICAvKiBDdXJyZW50IG1hY3JvIGxldmVsICovCisjaWZkZWYgREVC VUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGRlYnVnKEYxMDEsIiZwYXJzZXIgZW50cnkg bWFjbHZsIiwiIixtYWNsdmwpOworICAgICAgICBkZWJ1ZyhGMTAxLCImcGFyc2VyIGVudHJ5IGlu bGV2ZWwiLCIiLGlubGV2ZWwpOworICAgICAgICBkZWJ1ZyhGMTAxLCImcGFyc2VyIGVudHJ5IHRs ZXZlbCIsIiIsdGxldmVsKTsKKyAgICAgICAgZGVidWcoRjEwMSwiJnBhcnNlciBlbnRyeSBjbWRs dmwiLCIiLGNtZGx2bCk7CisgICAgICAgIGRlYnVnKEYxMDEsIiZwYXJzZXIgZW50cnkgbSIsIiIs bSk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lm bmRlZiBOT1hGRVIKKyAgICBmdHJlc2V0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCBnbG9iYWwgZmlsZSBzZXR0aW5ncyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworLyoKKyAg c3N0YXRlIGJlY29tZXMgbm9uemVybyB3aGVuIGEgY29tbWFuZCBoYXMgYmVlbiBwYXJzZWQgdGhh dCByZXF1aXJlcyBzb21lCisgIGFjdGlvbiBmcm9tIHRoZSBwcm90b2NvbCBtb2R1bGUuICBBbnkg bm9uLXByb3RvY29sIGFjdGlvbnMsIHN1Y2ggYXMgbG9jYWwKKyAgZGlyZWN0b3J5IGxpc3Rpbmcg b3IgdGVybWluYWwgZW11bGF0aW9uLCBhcmUgaW52b2tlZCBkaXJlY3RseSBmcm9tIGJlbG93Lgor Ki8KKyAgICBzc3RhdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCB3aXRo IG5vIHN0YXJ0IHN0YXRlLiAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT1NQTAorICAg IHF1ZXJ5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFFVRVJZIG5vdCBhY3RpdmUg Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT0hJTlRTCisgICAgaWYgKCFzdWNjZXNz KSB7CisgICAgICAgIGlmIChsb2NhbCAmJiAhbmV0d29yayAmJiBjYXJyaWVyICE9IENBUl9PRkYp IHsKKyAgICAgICAgICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAvKiBTZXJpYWwgY29u bmVjdGlvbiAqLworICAgICAgICAgICAgeCA9IHR0Z21kbSgpOyAgICAgICAgICAgICAgIC8qIHdp dGggY2FycmllciBjaGVja2luZyAqLworICAgICAgICAgICAgaWYgKHggPiAtMSkgeworICAgICAg ICAgICAgICAgIGlmICghKHggJiBCTV9EQ0QpKSB7CisgICAgICAgICAgICAgICAgICAgIGNkbG9z dCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGZhdGFsaW8gPSAxOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlm IChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIHRvcCB3aGF0IiwiIix3aGF0 KTsKKyAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIHRvcCBpbnRlcnJ1cHRlZCIsIiIsaW50ZXJy dXB0ZWQpOworICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgdG9wIGNkbG9zdCIsIiIsY2Rsb3N0 KTsKKyAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIHRvcCBzbmRjbWQiLCIiLHNuZGNtZCk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciB0b3AgZ2V0Y21kIiwiIixnZXRjbWQpOworICAgIH0K KyNlbmRpZiAvKiBERUJVRyAqLworICAgIGlmIChjZGxvc3QgJiYgIWludGVycnVwdGVkICYmIChz bmRjbWQgfHwgZ2V0Y21kKSkgeworICAgICAgICBwcmludGYoIj9Db25uZWN0aW9uIGJyb2tlbiAo Y2FycmllciBzaWduYWwgbG9zdClcbiIpOworICAgIH0KKyAgICBpZiAoc25kY21kICYmIHByb3Rv Y29sID09IFBST1RPX0sgJiYKKwkhc3VjY2VzcyAmJiBoaW50cyAmJiAhaW50ZXJydXB0ZWQgJiYg IWZhdGFsaW8gJiYgIXhjbWRzcmMpIHsKKyAgICAgICAgaW50IHggPSAwLCBuID0gMDsKKyAgICAg ICAgcHJpbnRmKCJcbioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworICAgICAgICBwcmlu dGYoIlNFTkQtY2xhc3MgY29tbWFuZCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgUGFj a2V0cyBzZW50OiAlZFxuIiwgc3BhY2tldHMpOworICAgICAgICBwcmludGYoIiBSZXRyYW5zbWlz c2lvbnM6ICVkXG4iLHJldHJhbnMpOworICAgICAgICBwcmludGYoIiBUaW1lb3V0czogJWRcbiIs IHRpbWVvdXRzKTsKKyAgICAgICAgcHJpbnRmKCIgRGFtYWdlZCBwYWNrZXRzOiAlZFxuIiwgY3J1 bmNoZWQpOworICAgICAgICBpZiAoZXBrdHJjdmQpIHsKKyAgICAgICAgICAgIHByaW50ZigiIFRy YW5zZmVyIGNhbmNlbGVkIGJ5IHJlY2VpdmVyLlxuIik7CisgICAgICAgICAgICBwcmludGYoIiBS ZWNlaXZlcidzIG1lc3NhZ2U6IFwiJXNcIlxuIiwoY2hhciAqKWVwa3Rtc2cpOworICAgICAgICAg ICAgbisrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGVwa3Rtc2cpIGlmICgq ZXBrdG1zZykgeworICAgICAgICAgICAgICAgIHByaW50ZigiIEZhdGFsIEtlcm1pdCBQcm90b2Nv bCBFcnJvcjogJXNcbiIsZXBrdG1zZyk7CisgICAgICAgICAgICAgICAgbisrOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChsb2NhbCAmJiAhbmV0d29yayAmJiBjYXJyaWVy ICE9IENBUl9PRkYpIHsKKyAgICAgICAgICAgIGludCB4eDsgICAgICAgICAgICAgICAgICAgICAv KiBTZXJpYWwgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgeHggPSB0dGdtZG0oKTsgICAgICAg ICAgICAgIC8qIHdpdGggY2FycmllciBjaGVja2luZyAqLworICAgICAgICAgICAgaWYgKHh4ID4g LTEpIHsKKyAgICAgICAgICAgICAgICBpZiAoISh4eCAmIEJNX0RDRCkpCisgICAgICAgICAgICAg ICAgICBjZGxvc3QgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyNpZmRlZiBVTklY CisgICAgICAgIGlmIChlcnJubyAhPSAwKQorI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgICB7 CisgICAgICAgICAgICAgIHByaW50ZigiIE1vc3QgcmVjZW50IGxvY2FsIE9TIGVycm9yOiBcIiVz XCJcbiIsY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgfQorICAg ICAgICBwcmludGYoCisgICAiXG5ISU5UUy4uLiBJZiB0aGUgcHJlY2VkaW5nIGVycm9yIG1lc3Nh Z2UlcyBub3QgZXhwbGFpbiB0aGUgZmFpbHVyZTpcbiIsCisgICAgICAgICAgICAgICAobiA+IDEp ID8gInMgZG8iIDogIiBkb2VzIgorICAgICAgICAgICAgICAgKTsKKyNpZm5kZWYgTk9MT0NBTAor ICAgICAgICBpZiAobG9jYWwpIHsKKyAgICAgICAgICAgIGlmIChycGFja2V0cyA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCIgLiBEaWQgeW91IHN0YXJ0IGEgS2VybWl0IHJlY2VpdmVy IG9uIHRoZSBmYXIgZW5kP1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIHByaW50ZigKKyAgICAgICAgICAgICAgICAiIC4gVHJ5IGNoYW5naW5nIHRoZSByZW1vdGUg S2VybWl0J3MgRkxPVy1DT05UUk9MIHNldHRpbmcuXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAo IW5ldHdvcmsgJiYgbWRtdHlwID4gMCkKKyAgICAgICAgICAgICAgICAgIGlmICgoMyAqIGNydW5j aGVkKSA+IHNwYWNrZXRzKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAgICAgICAg ICAgICAgIiAuIFRyeSBwbGFjaW5nIGEgbmV3IGNhbGwgdG8gZ2V0IGEgY2xlYW5lciBjb25uZWN0 aW9uLlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocnBhY2tldHMgPiAw KSB7CisgICAgICAgICAgICBpZiAoZmxvdyA9PSBGTE9fTk9ORSkKKyAgICAgICAgICAgICBwcmlu dGYoIiAuIEdpdmUgbWUgYSBTRVQgRkxPVyBYT04vWE9GRiBjb21tYW5kIGFuZCB0cnkgYWdhaW4u XG4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBwcmludGYoIiAuIEdpdmUgbWUg YSBTRVQgRkxPVyBOT05FIGNvbW1hbmQgYW5kIHRyeSBhZ2Fpbi5cbiIpOworICAgICAgICB9Cisg ICAgICAgIHgrKzsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyAgICAgICAgaWYgKCgzICogdGlt ZW91dHMpID4gc3BhY2tldHMpCisgICAgICAgICAgcHJpbnRmKCIgLiBBZGp1c3QgdGhlIHRpbWVv dXQgbWV0aG9kIChzZWUgSEVMUCBTRVQgU0VORCkuXG4iKTsKKyAgICAgICAgaWYgKCgzICogcmV0 cmFucykgPiBzcGFja2V0cykKKyAgICAgICAgICBwcmludGYoIiAuIEluY3JlYXNlIHRoZSByZXRy eSBsaW1pdCAoc2VlIEhFTFAgU0VUIFJFVFJZKS5cbiIpOworCisjaWZkZWYgQ0tfU1BFRUQKKyAg ICAgICAgaWYgKHByZWZpeGluZyAhPSBQWF9BTEwgJiYgcnBhY2tldHMgPiAyKSB7CisgICAgICAg ICAgICBwcmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBTRVQgUFJFRklYSU5HIEFMTFxuIik7 CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworI2lm ZGVmIFNUUkVBTUlORworICAgICAgICBpZiAoc3RyZWFtZWQpIHsKKyAgICAgICAgICAgIHByaW50 ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBTVFJFQU1JTkcgT0ZGXG4iKTsKKyAgICAgICAg ICAgIHgrKzsKKyAgICAgICAgfSBlbHNlIGlmIChyZWxpYWJsZSkgeworICAgICAgICAgICAgcHJp bnRmKCIgLiBUcnkgaXQgYWdhaW4gd2l0aDogU0VUIFJFTElBQkxFIE9GRlxuIik7CisgICAgICAg ICAgICB4Kys7CisgICAgICAgIH0KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKworI2lmZGVmIENL X1NQRUVECisgICAgICAgIGlmIChjbGVhcnJxID4gMCAmJiBwcmVmaXhpbmcgPT0gUFhfTk9OKSB7 CisgICAgICAgICAgICBwcmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBTRVQgQ0xFQVItQ0hB Tk5FTCBPRkZcbiIpOworICAgICAgICAgICAgeCsrOworICAgICAgICB9CisjZW5kaWYgLyogQ0tf U1BFRUQgKi8KKyAgICAgICAgaWYgKCFwYXJpdHkpIHsKKyAgICAgICAgICAgIHByaW50ZigiIC4g VHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBQQVJJVFkgU1BBQ0VcbiIpOworICAgICAgICAgICAgeCsr OworICAgICAgICB9CisgICAgICAgIHByaW50ZigiIC4gJXNpdmUgYSBST0JVU1QgY29tbWFuZCBh bmQgdHJ5IGFnYWluLlxuIiwKKyAgICAgICAgICAgICAgICh4ID4gMCkgPyAiQXMgYSBsYXN0IHJl c29ydCwgZyIgOiAiRyIKKyAgICAgICAgICAgICAgICk7CisgICAgICAgIHByaW50ZigiQWxzbzpc biIpOworICAgICAgICBwcmludGYoIiAuIEJlIHN1cmUgdGhlIHNvdXJjZSBmaWxlIGhhcyByZWFk IHBlcm1pc3Npb24uXG4iKTsKKyAgICAgICAgcHJpbnRmKCIgLiBCZSBzdXJlIHRoZSB0YXJnZXQg ZGlyZWN0b3J5IGhhcyB3cml0ZSBwZXJtaXNzaW9uLlxuIik7CisvKgorICAgICAgICBpZiB0aGUg ZmlsZSB3YXMgMkcgb3IgbGFyZ2VyIG1ha2Ugc3VyZSBvdGhlciBLZXJtaXQgc3VwcG9ydHMgTEZz Li4uCisqLworICAgICAgICBwcmludGYoIiAuIEJlIHN1cmUgdGhlIHRhcmdldCBkaXNrIGhhcyBz dWZmaWNpZW50IHNwYWNlLlxuIik7CisgICAgICAgIHByaW50ZigiKFVzZSBTRVQgSElOVFMgT0ZG IHRvIHN1cHByZXNzIGhpbnRzLilcbiIpOworICAgICAgICBwcmludGYoIioqKioqKioqKioqKioq KioqKioqKioqKipcblxuIik7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInRvcGNtZCIsIiIsdG9w Y21kKTsKKyAgICBpZiAoZ2V0Y21kICYmIHByb3RvY29sID09IFBST1RPX0sgJiYKKwkhc3VjY2Vz cyAmJiBoaW50cyAmJiAhaW50ZXJydXB0ZWQgJiYgIWZhdGFsaW8gJiYgIXhjbWRzcmMpIHsKKyAg ICAgICAgaW50IHggPSAwOworICAgICAgICBleHRlcm4gaW50IHVycHNpeiwgd3Nsb3RyOworICAg ICAgICBwcmludGYoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgICAgIHBy aW50ZigiUkVDRUlWRS0gb3IgR0VULWNsYXNzIGNvbW1hbmQgZmFpbGVkLlxuIik7CisgICAgICAg IHByaW50ZigiIFBhY2tldHMgcmVjZWl2ZWQ6ICVkXG4iLCBycGFja2V0cyk7CisgICAgICAgIHBy aW50ZigiIERhbWFnZWQgcGFja2V0czogJWRcbiIsIGNydW5jaGVkKTsKKyAgICAgICAgcHJpbnRm KCIgVGltZW91dHM6ICVkXG4iLCB0aW1lb3V0cyk7CisgICAgICAgIGlmIChycGFja2V0cyA+IDAp CisgICAgICAgICAgcHJpbnRmKCIgUGFja2V0IGxlbmd0aDogJWRcbiIsIHVycHNpeik7CisgICAg ICAgIGlmIChlcGt0cmN2ZCkgeworICAgICAgICAgICAgcHJpbnRmKCIgVHJhbnNmZXIgY2FuY2Vs ZWQgYnkgc2VuZGVyLlxuIik7CisgICAgICAgICAgICBwcmludGYoIiBTZW5kZXIncyBtZXNzYWdl OiBcIiVzXCJcbiIsKGNoYXIgKillcGt0bXNnKTsKKyAgICAgICAgfQorI2lmZGVmIFVOSVgKKyAg ICAgICAgaWYgKGVycm5vICE9IDApCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAgIHByaW50 ZigiIE1vc3QgcmVjZW50IGxvY2FsIGVycm9yOiBcIiVzXCJcbiIsY2tfZXJyc3RyKCkpOworICAg ICAgICBwcmludGYoCisgICAiXG5ISU5UUy4uLiBJZiB0aGUgcHJlY2VkaW5nIGVycm9yIG1lc3Nh Z2UlcyBub3QgZXhwbGFpbiB0aGUgZmFpbHVyZTpcbiIsCisgICAgICAgICAgICAgICBlcGt0cmN2 ZCA/ICJzIGRvIiA6ICIgZG9lcyIKKyAgICAgICAgICAgICAgICk7CisjaWZuZGVmIE5PTE9DQUwK KyAgICAgICAgaWYgKGxvY2FsKSB7CisgICAgICAgICAgICBpZiAodG9wY21kID09IFhYR0VUKQor ICAgICAgICAgICAgICBwcmludGYoIiAuIERpZCB5b3Ugc3RhcnQgYSBLZXJtaXQgU0VSVkVSIG9u IHRoZSBmYXIgZW5kP1xuIik7CisgICAgICAgICAgICBpZiAocnBhY2tldHMgPT0gMCkgeworICAg ICAgICAgICAgICAgIGlmICh0b3BjbWQgIT0gWFhHRVQpCisgICAgICAgICAgICAgICAgICBwcmlu dGYoIiAuIERpZCB5b3Ugc3RhcnQgYSBLZXJtaXQgU0VORGVyIG9uIHRoZSBmYXIgZW5kP1xuIik7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAg ICAgICAgICAiIC4gQ2hvb3NlIGEgZGlmZmVyZW50IEZMT1ctQ09OVFJPTCBzZXR0aW5nIGFuZCB0 cnkgYWdhaW4uXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0b3BjbWQg PT0gWFhHRVQpCisgICAgICAgICAgcHJpbnRmKCIgLiBJcyB0aGUgb3RoZXIgS2VybWl0IGluIChv ciBkb2VzIGl0IGhhdmUpIFNFUlZFUiBtb2RlP1xuIik7CisgICAgICAgIGlmIChycGFja2V0cyA+ IDAgJiYgdXJwc2l6ID4gOTApCisgICAgICAgICAgcHJpbnRmKCIgLiBUcnkgc21hbGxlciBwYWNr ZXRzIChTRVQgUkVDRUlWRSBQQUNLRVQtTEVOR1RIKS5cbiIpOworICAgICAgICBpZiAocnBhY2tl dHMgPiAwICYmIHdzbG90ciA+IDEgJiYgIXN0cmVhbWVkKQorICAgICAgICAgIHByaW50ZigiIC4g VHJ5IGEgc21hbGxlciB3aW5kb3cgc2l6ZSAoU0VUIFdJTkRPVykuXG4iKTsKKyAgICAgICAgaWYg KCFsb2NhbCAmJiBycGFja2V0cyA+IDApIHsKKyAgICAgICAgICAgIGlmIChmbG93ID09IEZMT19O T05FKQorICAgICAgICAgICAgIHByaW50ZigiIC4gR2l2ZSBtZSBhIFNFVCBGTE9XIFhPTi9YT0ZG IGNvbW1hbmQgYW5kIHRyeSBhZ2Fpbi5cbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgIHByaW50ZigiIC4gR2l2ZSBtZSBhIFNFVCBGTE9XIE5PTkUgY29tbWFuZCBhbmQgdHJ5IGFn YWluLlxuIik7CisgICAgICAgIH0KKyAgICAgICAgeCsrOworI2VuZGlmIC8qIE5PTE9DQUwgKi8K KyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgaWYgKHN0cmVhbWVkKSB7CisgICAgICAgICAgICBw cmludGYoIiAuIFRyeSBpdCBhZ2FpbiB3aXRoOiBTRVQgU1RSRUFNSU5HIE9GRlxuIik7CisgICAg ICAgICAgICB4Kys7CisgICAgICAgIH0gZWxzZSBpZiAocmVsaWFibGUgJiYgbG9jYWwpIHsKKyAg ICAgICAgICAgIHByaW50ZigiIC4gVHJ5IGl0IGFnYWluIHdpdGg6IFNFVCBSRUxJQUJMRSBPRkZc biIpOworICAgICAgICAgICAgeCsrOworICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBTVFJFQU1J TkcgKi8KKyAgICAgICAgaWYgKCFwYXJpdHkpIHsKKyAgICAgICAgICAgIHByaW50ZigiIC4gVHJ5 IGl0IGFnYWluIHdpdGg6IFNFVCBQQVJJVFkgU1BBQ0VcbiIpOworICAgICAgICAgICAgeCsrOwor ICAgICAgICB9CisgICAgICAgIHByaW50ZigoeCA+IDApID8KKyAgICAgICAgICAgICAgICIgLiBB cyBhIGxhc3QgcmVzb3J0LCBnaXZlIGEgUk9CVVNUIGNvbW1hbmQgYW5kIHRyeSBhZ2Fpbi5cbiIg OgorICAgICAgICAgICAgICAgIiAuIEdpdmUgYSBST0JVU1QgY29tbWFuZCBhbmQgdHJ5IGFnYWlu LlxuIgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCJBbHNvOlxuIik7CisgICAg ICAgIHByaW50ZigiIC4gQmUgc3VyZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBoYXMgd3JpdGUgcGVy bWlzc2lvbi5cbiIpOworICAgICAgICBwcmludGYoIiAuIEJlIHN1cmUgdGhlIHRhcmdldCBkaXNr IGhhcyBzdWZmaWNpZW50IHNwYWNlLlxuIik7CisgICAgICAgIHByaW50ZigiIC4gVHJ5IHRlbGxp bmcgdGhlICVzIHRvIFNFVCBQUkVGSVhJTkcgQUxMLlxuIiwKKyAgICAgICAgICAgICAgIHRvcGNt ZCA9PSBYWEdFVCA/ICJzZXJ2ZXIiIDogInNlbmRlciIKKyAgICAgICAgICAgICAgICk7CisgICAg ICAgIHByaW50ZigiIC4gVHJ5IGdpdmluZyBhIFJPQlVTVCBjb21tYW5kIHRvIHRoZSAlcy5cbiIs CisgICAgICAgICAgICAgICB0b3BjbWQgPT0gWFhHRVQgPyAic2VydmVyIiA6ICJzZW5kZXIiCisg ICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYoIihVc2UgU0VUIEhJTlRTIE9GRiB0byBz dXBwcmVzcyBoaW50cy4pXG4iKTsKKyAgICAgICAgcHJpbnRmKCIqKioqKioqKioqKioqKioqKioq KioqKioqXG5cbiIpOworICAgIH0KKyNlbmRpZiAvKiBOT0hJTlRTICovCisgICAgZ2V0Y21kID0g MDsKKyAgICBzbmRjbWQgPSAwOworICAgIGludGVycnVwdGVkID0gMDsKKyNlbmRpZiAvKiBOT1hG RVIgKi8KKworICAgIHdoaWxlIChzc3RhdGUgPT0gMCkgeyAgICAgICAgICAgICAgIC8qIFBhcnNl IGNtZHMgdW50aWwgYWN0aW9uIHJlcXVlc3RlZCAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJwYXJz ZSB0b3AiLCIiLDApOworCXdoYXQgPSBXX0NPTU1BTkQ7CQkvKiBOb3cgd2UncmUgcGFyc2luZyBj b21tYW5kcy4gKi8KKwlyY2RhY3RpdmUgPSAwOwkJCS8qIFJFTU9URSBDRCBub3QgYWN0aXZlICov CisJa2VlcGFsbGNoYXJzID0gMDsJCS8qIE1JTlBVVCBub3QgYWN0aXZlICovCisKKyNpZmRlZiBP UzIKKyAgICAgICAgaWYgKGFwY2FjdGl2ZSA9PSBBUENfSU5BQ1RJVkUpCisgICAgICAgICAgV2Fp dENvbW1hbmRNb2RlU2VtKC0xKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBJS1NfT1BUSU9O CisgICAgICAgIGlmICgobG9jYWwgJiYKKyAgICAgICAgICAgICAheGNtZHNyYyAmJgorICAgICAg ICAgICAgIGlzX3RuICYmCisgICAgICAgICAgICAgVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYm CisgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkg fHwKKyAgICAgICAgICAgICghbG9jYWwgJiYKKyAgICAgICAgICAgICAhY21kYWRsICYmCisgICAg ICAgICAgICAgVEVMT1BUX01FKFRFTE9QVF9LRVJNSVQpICYmCisgICAgICAgICAgICAgVEVMT1BU X1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCkKKyAgICAgICAgICAgICkgeworICAg ICAgICAgICAgdG5fc2lrcyhLRVJNSVRfU1RPUCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgIGlmIChhdXRvcGF0aCkgeworICAg ICAgICAgICAgZm5ycGF0aCA9IFBBVEhfQVVUTzsKKyAgICAgICAgICAgIGF1dG9wYXRoID0gMDsK KyAgICAgICAgfQorICAgICAgICByZW1maWxlID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIENs ZWFyIHRoZXNlIGluIGNhc2UgUkVNT1RFICovCisgICAgICAgIHJlbWFwcGQgPSAwOyAgICAgICAg ICAgICAgICAgICAgLyogY29tbWFuZCB3YXMgaW50ZXJydXB0ZWQuLi4gKi8KKyAgICAgICAgcmVt cGlwZSA9IDA7CisgICAgICAgIG1ha2VzdHIoJnNuZF9tb3ZlLGdfc25kX21vdmUpOyAgLyogUmVz dG9yZSB0aGVzZSAqLworICAgICAgICBtYWtlc3RyKCZyY3ZfbW92ZSxnX3Jjdl9tb3ZlKTsKKyAg ICAgICAgbWFrZXN0cigmc25kX3JlbmFtZSxnX3NuZF9yZW5hbWUpOworICAgICAgICBtYWtlc3Ry KCZyY3ZfcmVuYW1lLGdfcmN2X3JlbmFtZSk7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICAv KiBUYWtlIHJlcXVlc3RlZCBhY3Rpb24gaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSBwcmV2 aW91cyBjb21tYW5kICovCisKKyAgICAgICAgc2V0aW50KCk7CisgICAgICAgIGRlYnVnKEYxMDEs InBhcnNlciB0bGV2ZWwiLCIiLHRsZXZlbCk7CisgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciBj bWRfcm93cyIsIiIsY21kX3Jvd3MpOworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAgICAgZGVidWco RjEwMSwicGFyc2VyIHdhc2Nsb3NlZCIsIiIsd2FzY2xvc2VkKTsKKyAgICAgICAgaWYgKHdhc2Ns b3NlZCkgeyAgICAgICAgICAgICAgICAvKiBJZiBjb25uZWN0aW9uIHdhcyBqdXN0IGNsb3NlZCAq LworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICBrID0gbWxv b2sobWFjdGFiLCJvbl9jbG9zZSIsbm1hYyk7IC8qIExvb2sgdXAgIm9uX2Nsb3NlIiAqLworICAg ICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworICAg ICAgICAgICAgICAgIC8qIHByaW50ZigiT05fQ0xPU0UgQ01EIExPT1BcbiIpOyAqLworICAgICAg ICAgICAgICAgIGRvZG8oayxja2l0b2Eod2h5Y2xvc2VkKSwwKTsgLyogU2V0IGl0IHVwICovCisg ICAgICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgIHdoeWNsb3NlZCA9 IFdDX1JFTU87CisgICAgICAgICAgICB3YXNjbG9zZWQgPSAwOworICAgICAgICB9CisjZW5kaWYg LyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PU1BMCisgICAgICAgIHh4ZG90ID0gMDsgICAgICAg ICAgICAgICAgICAgICAgLyogQ2xlYXIgdGhpcy4uLiAqLworCisgICAgICAgIGRlYnVnKEYxMDEs InBhcnNlciBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKyAgICAgICAgaWYgKHN1Y2Nlc3MgPT0gMCkg eworICAgICAgICAgICAgaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfVEYgJiYgdGFrZXJy W2NtZGx2bF0pIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkNvbW1hbmQgZmlsZSB0ZXJtaW5h dGVkIGJ5IGVycm9yLlxuIik7CisgICAgICAgICAgICAgICAgcG9wY2x2bCgpOworICAgICAgICAg ICAgICAgIGlmIChjbWRsdmwgPT0gMCkgcmV0dXJuKDApOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKGNtZHN0a1tjbWRsdmxdLnNyYyA9PSBDTURfTUQgJiYgbWVycm9yW2NtZGx2bF0p IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkNvbW1hbmQgZXJyb3I6IG1hY3JvIHRlcm1pbmF0 ZWQuXG4iKTsKKyAgICAgICAgICAgICAgICBwb3BjbHZsKCk7CisgICAgICAgICAgICAgICAgaWYg KG0gJiYgKGNtZGx2bCA8IGlubGV2ZWwpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKChpbnQp IHNzdGF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbnVsY21kID0gKG0g PT0gMik7CisgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciBudWxjbWQiLCIiLG51bGNtZCk7Cisj ZWxzZQorICAgICAgICBpZiAoc3VjY2VzcyA9PSAwICYmIHRsZXZlbCA+IC0xICYmIHRha2Vyclt0 bGV2ZWxdKSB7CisgICAgICAgICAgICBwcmludGYoIkNvbW1hbmQgZmlsZSB0ZXJtaW5hdGVkIGJ5 IGVycm9yLlxuIik7CisgICAgICAgICAgICBwb3BjbHZsKCk7CisgICAgICAgICAgICBjbWluaShj a3hlY2gpOyAgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIGNtZCBidWZmZXIuICovCisgICAgICAg ICAgICBpZiAodGxldmVsIDwgMCkgICAgICAgICAgICAgLyogSnVzdCBwb3BwZWQgb3V0IG9mIGNt ZCBmaWxlcz8gKi8KKyAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAvKiBF bmQgb2YgaW5pdCBmaWxlIG9yIHdoYXRldmVyLiAqLworICAgICAgICB9CisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmZGVmIE1BQworICAgICAgICAvKiBDaGVjayBmb3IgVEFLRSBpbml0aWF0ZWQg YnkgbWVudS4gKi8KKyAgICAgICAgaWYgKCh0bGV2ZWwgPT0gLTEpICYmIGxmaWxlcykKKyAgICAg ICAgICAgIHN0YXJ0bGZpbGUoKTsKKyNlbmRpZiAvKiBNQUMgKi8KKworICAgICAgICAvKiBJZiBp biBUQUtFIGZpbGUsIGNoZWNrIGZvciBFT0YgKi8KKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBNQUMK KyAgICAgICAgaWYKKyNlbHNlCisgICAgICAgIHdoaWxlCisjZW5kaWYgLyogTUFDICovCisgICAg ICAgICAgKChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX1RGKSAgLyogSWYgZW5kIG9mIHRha2Ug ZmlsZSAqLworICAgICAgICAgICAgICAgJiYgKHRsZXZlbCA+IC0xKQorICAgICAgICAgICAgICAg JiYgZmVvZih0ZmlsZVt0bGV2ZWxdKSkgeworICAgICAgICAgICAgcG9wY2x2bCgpOyAgICAgICAg ICAgICAgICAgIC8qIHBvcCBjb21tYW5kIGxldmVsICovCisgICAgICAgICAgICBjbWluaShja3hl Y2gpOyAgICAgICAgICAgICAgLyogYW5kIGNsZWFyIHRoZSBjbWQgYnVmZmVyLiAqLworICAgICAg ICAgICAgaWYgKGNtZGx2bCA9PSAwKSB7ICAgICAgICAgIC8qIEp1c3QgcG9wcGVkIG91dCBvZiBh bGwgY21kIGZpbGVzPyAqLworICAgICAgICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAg IC8qIEVuZCBvZiBpbml0IGZpbGUgb3Igd2hhdGV2ZXIuICovCisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyNpZmRlZiBNQUMKKyAgICAgICAgbWluaXBhcnNlcigxKTsKKyAgICAgICAgaWYgKHNz dGF0ZSA9PSAnYScpIHsgICAgICAgICAgICAvKiBpZiBjbWQtLiBjYW5jZWwgKi8KKyAgICAgICAg ICAgIGRlYnVnKEYxMDAsICJwYXJzZXI6IGNhbmNlbCB0YWtlIGR1ZSB0byBzc3RhdGUiLCAiIiwg c3N0YXRlKTsKKyAgICAgICAgICAgIHNzdGF0ZSA9ICdcMCc7CisgICAgICAgICAgICBkb3N0b3Ao KTsKKyAgICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgaW5p dCBmaWxlIG9yIHdoYXRldmVyLiAqLworICAgICAgICB9CisjZW5kaWYgLyogIE1BQyAqLworCisj ZWxzZSAvKiBOT1NQTCAqLworICAgICAgICBpZiAoKHRsZXZlbCA+IC0xKSAmJiBmZW9mKHRmaWxl W3RsZXZlbF0pKSB7IC8qIElmIGVuZCBvZiB0YWtlICovCisgICAgICAgICAgICBwb3BjbHZsKCk7 ICAgICAgICAgICAgICAgICAgLyogUG9wIHVwIG9uZSBsZXZlbC4gKi8KKyAgICAgICAgICAgIGNt aW5pKGNreGVjaCk7ICAgICAgICAgICAgICAvKiBhbmQgY2xlYXIgdGhlIGNtZCBidWZmZXIuICov CisgICAgICAgICAgICBpZiAodGxldmVsIDwgMCkgICAgICAgICAgICAgLyogSnVzdCBwb3BwZWQg b3V0IG9mIGNtZCBmaWxlcz8gKi8KKyAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAg ICAgICAvKiBFbmQgb2YgaW5pdCBmaWxlIG9yIHdoYXRldmVyLiAqLworICAgICAgICB9CisjZW5k aWYgLyogTk9TUEwgKi8KKworCisjaWZuZGVmIE5PU1BMCisgICAgICAgIGRlYnVnKEYxMDEsInBh cnNlciBjbWRsdmwiLCIiLGNtZGx2bCk7CisgICAgICAgIGRlYnVnKEYxMDEsInBhcnNlciBjbWRz cmMiLCIiLGNtZHN0a1tjbWRsdmxdLnNyYyk7CisKKyAgICAgICAgaWYgKGNtZHN0a1tjbWRsdmxd LnNyYyA9PSBDTURfTUQpIHsgLyogRXhlY3V0aW5nIGEgbWFjcm8/ICovCisgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJwYXJzZXIgbWFjcm8iLCIiLDApOworICAgICAgICAgICAgbWFjbHZsID0gY21k c3RrW2NtZGx2bF0ubHZsOyAvKiBHZXQgY3VycmVudCBsZXZlbCAqLworICAgICAgICAgICAgZGVi dWcoRjEwMSwicGFyc2VyIG1hY2x2bCIsIiIsbWFjbHZsKTsKKyAgICAgICAgICAgIGNicCA9IGNt ZGJ1ZjsgICAgICAgICAgICAgICAvKiBDb3B5IG5leHQgY21kIHRvIGNvbW1hbmQgYnVmZmVyLiAq LworICAgICAgICAgICAgKmNicCA9IE5VTDsKKyAgICAgICAgICAgIGlmICgqc2F2YnVmKSB7ICAg ICAgICAgICAgICAvKiBJbiBjYXNlIHRoZW4tcGFydCBvZiAnaWYnIGNvbW1hbmQgKi8KKyAgICAg ICAgICAgICAgICBja3N0cm5jcHkoY2JwLHNhdmJ1ZixDTURCTCk7IC8qIHdhcyBzYXZlZCwgcmVz dG9yZSBpdC4gKi8KKyAgICAgICAgICAgICAgICAqc2F2YnVmID0gJ1wwJzsKKyAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBFbHNlIGdldCBuZXh0IGNtZCBmcm9tIG1h Y3JvIGRlZiAqLworICAgICAgICAgICAgICAgIGlmIChnZXRuY20oY2JwLENNREJMKSA8IDApIHsK KyNpZmRlZiBERUJVRworICAgICAgICAgICAgICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgZW5kIG9mIG1hY3JvIG0iLCIiLG0p OworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwicGFyc2VyIGVuZCBvZiBtYWNy byBjbWRsdmwiLCIiLGNtZGx2bCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJwYXJzZXIgZW5kIG9mIG1hY3JvIGlubGV2ZWwiLCIiLGlubGV2ZWwpOworICAgICAgICAgICAg ICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKG0g JiYgKGNtZGx2bCA8IGlubGV2ZWwpKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybigoaW50 KSBzc3RhdGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIC8qIGlmICghbSkgKi8gY29udGlu dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWco RjAxMCwiQ01EKE0pIixjbWRidWYsMCk7CisKKyAgICAgICAgfSBlbHNlIGlmIChjbWRzdGtbY21k bHZsXS5zcmMgPT0gQ01EX1RGKQorI2Vsc2UKKyAgICAgICAgICBpZiAodGxldmVsID4gLTEpCisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICB7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJwYXJzZXIgc2F2YnVmIixzYXZidWYsdGxldmVsKTsKKyAgICAgICAgICAg IGlmICgqc2F2YnVmKSB7ICAgICAgICAgICAgICAvKiBJbiBjYXNlIFRIRU4tcGFydCBvZiBJRiBj b21tYW5kICovCisgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGNtZGJ1ZixzYXZidWYsQ01EQkwp OyAvKiB3YXMgc2F2ZWQsIHJlc3RvcmUgaXQuICovCisgICAgICAgICAgICAgICAgKnNhdmJ1ZiA9 ICdcMCc7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgICAg ICAgICAgIC8qIEdldCBuZXh0IGxpbmUgZnJvbSBUQUtFIGZpbGUgKi8KKworICAgICAgICAgICAg ICBpZiAoKHRmY29kZSA9IGdldG5jdChjbWRidWYsQ01EQkwsdGZpbGVbdGxldmVsXSwwKSkgPCAw KSB7CisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJwYXJzZXIgdGZjb2RlIix0ZmlsZVt0 bGV2ZWxdLHRmY29kZSk7CisgICAgICAgICAgICAgICAgICBpZiAodGZjb2RlIDwgLTEpIHsgICAg LyogRXJyb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9FcnJvciBpbiBUQUtF IGNvbW1hbmQgZmlsZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZmNv ZGUgPT0gLTIpID8gIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiIDoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkxpbmUgdG9vIGxvbmcgb3IgY29udGFpbnMgTlVMIGNoYXJhY3RlcnMi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAg ZG9zdG9wKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51 ZTsgICAgICAgICAgICAgLyogLTEgbWVhbnMgRU9GICovCisgICAgICAgICAgICAgIH0KKworICAg ICAgICAvKiBJZiBpbnRlcmFjdGl2ZSwgZ2V0IG5leHQgY29tbWFuZCBmcm9tIHVzZXIuICovCisK KyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2VyIHR5cGVzIGl0 IGluLiAqLworICAgICAgICAgICAgaWYgKHBmbGFnKSBwcm9tcHQoeHhzdHJpbmcpOworICAgICAg ICAgICAgY21pbmkoY2t4ZWNoKTsKKyAgICAgICAgfQorCisgICAgLyogTm93IHdlIGtub3cgd2hl cmUgbmV4dCBjb21tYW5kIGlzIGNvbWluZyBmcm9tLiBQYXJzZSBhbmQgZXhlY3V0ZSBpdC4gKi8K KworICAgICAgICByZXBhcnMgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIDEgPSBjb21tYW5k IG5lZWRzIHBhcnNpbmcgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgICAgIGRpc3BsYSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIG5vIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgICAgIHdoaWxlIChyZXBhcnMpIHsgICAgICAgICAg ICAgICAgLyogUGFyc2UgdGhpcyBjbWQgdW50aWwgZW50ZXJlZC4gKi8KKworICAgICAgICAgICAg ZGVidWcoRjEwMSwicGFyc2VyIHRvcCBvZiB3aGlsZSBsb29wIiwiIiwwKTsKKwkgICAgeGFza21v cmUgPSBzYXZlYXNrOwkJLyogUmVzdG9yZSBnbG9iYWwgbW9yZS1wcm9tcHRpbmcgKi8KKwkgICAg ZGlyYWN0aXZlID0gMDsJCS8qIERJUiBjb21tYW5kIG5vdCBhY3RpdmUgKi8KKwkgICAgY2RhY3Rp dmUgPSAwOwkJLyogQ0QgY29tbWFuZCBub3QgYWN0aXZlICovCisjaWZuZGVmIE5PU1BMCisJICAg IGFza2ZsYWcgPSAwOwkJLyogQVNLIGNvbW1hbmQgbm90IGFjdGl2ZSAqLworCSAgICBlY2hvc3Rh cnMgPSAwOwkJLyogTm9yIEFTS1EgKi8KKwkgICAgZGVib2sgPSAxOwkJCS8qIFVuZGlzYWJsZSBk ZWJ1Z2dpbmcgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgUkVDVVJTSVZFCisgICAg ICAgICAgICAvKiBJbiBjYXNlIG9mICJzZW5kIC9yZWN1cnNpdmUgLi8/PEN0cmwtVT4iIGV0YyAq LworICAgICAgICAgICAgcmVjdXJzaXZlID0gMDsgICAgICAgICAgICAgIC8qIFRoaXMgaXMgbmV2 ZXIgc3RpY2t5ICovCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgICAgICAgICB4ZmlsZXR5 cGUgPSAtMTsgICAgICAgICAgICAgLyogUmVzZXQgdGhpcyBiZXR3ZWVuIGVhY2ggY29tbWFuZCAq LworI2lmbmRlZiBOT01TRU5ECisgICAgICAgICAgICBhZGRsaXN0ID0gMDsKKyNlbmRpZiAvKiBO T01TRU5EICovCisjaWZkZWYgQ0tfUkVDQUxMCisgICAgICAgICAgICBvbl9yZWNhbGwgPSAxOwor I2VuZGlmIC8qIENLX1JFQ0FMTCAqLworICAgICAgICAgICAgLyogVGhpcyBtaWdodCBoYXZlIGJl ZW4gY2hhbmdlZCBieSBhIHN3aXRjaCAqLworICAgICAgICAgICAgaWYgKGdfbWF0Y2hkb3QgPiAt MSkgeworICAgICAgICAgICAgICAgIG1hdGNoZG90ID0gZ19tYXRjaGRvdDsKKyAgICAgICAgICAg ICAgICBnX21hdGNoZG90ID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbXJlcygp OyAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgYnVmZmVyIHBvaW50ZXJzLiAqLworCisjaWZk ZWYgT1MyCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgLyogd2UgY2hlY2sgdG8gc2VlIGlm IGEgbWFjcm8gaXMgd2FpdGluZyB0byBiZSBleGVjdXRlZCAqLworICAgICAgICAgICAgLyogaWYg c28sIHdlIGNhbGwgZG9tYWMgb24gaXQgKi8KKyAgICAgICAgICAgIGlmIChjbWRtYWMpIHsKKyAg ICAgICAgICAgICAgICBja3N0cm5jcHkoY21kYnVmLCBjbWRtYWMsIENNREJMKTsKKyAgICAgICAg ICAgICAgICBmcmVlKGNtZG1hYyk7CisgICAgICAgICAgICAgICAgY21kbWFjID0gTlVMTDsKKyAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogT1MyICovCisjaWZu ZGVmIE5PWEZFUgorICAgICAgICAgICAgYnllX2FjdGl2ZSA9IDA7CisjZW5kaWYgLyogTk9YRkVS ICovCisgICAgICAgICAgICBoYXZldG9rZW4gPSAwOworICAgICAgICAgICAgeHggPSBjbWtleTIo Y21kdGFiLG5jbWQsIkNvbW1hbmQiLCIiLHRva3RhYix4eHN0cmluZywxKTsKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsInRvcC1sZXZlbCBjbWtleTIiLCIiLHh4KTsKKyAgICAgICAgICAgIGlmICh4 eCA9PSAtNSkgeworICAgICAgICAgICAgICAgIHl5ID0gY2hrdG9rKHRva3RhYik7CisgICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwidG9wLWxldmVsIGNta2V5IHRva2VuIiwiIix5eSk7CisjaWZu ZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAvKiBFaXRoZXIgd2F5IG1ha2VzIGFic29sdXRl bHkgbm8gZGlmZmVyZW5jZSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIk5PIFVOR1dP UkQiLGF0bWJ1ZiwwKTsKKyAgICAgICAgICAgICAgICAvKiB1bmd3b3JkKCk7ICovCisjZWxzZQor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsIlRPS0VOIFVOR1dPUkQiLGF0bWJ1ZiwwKTsKKyAg ICAgICAgICAgICAgICB1bmd3b3JkKCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAg ICAgICAgIHN3aXRjaCAoeXkpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJyMnOiB4eCA9IFhY Q09NOyBicmVhazsgLyogQ29tbWVudCAqLworICAgICAgICAgICAgICAgICAgY2FzZSAnOyc6IHh4 ID0gWFhDT007IGJyZWFrOyAvKiBDb21tZW50ICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAg ICAgICAgICBjYXNlICcuJzogeHggPSBYWERFRjsgeHhkb3QgPSAxOyBicmVhazsgLyogQXNzaWdu bWVudCAqLworICAgICAgICAgICAgICAgICAgY2FzZSAnOic6IHh4ID0gWFhMQkw7IGJyZWFrOyAv KiBHT1RPIGxhYmVsICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1BVU0gKKyNp ZmRlZiBDS19SRURJUgorICAgICAgICAgICAgICAgICAgY2FzZSAnPCc6CisjZW5kaWYgLyogQ0tf UkVESVIgKi8KKyAgICAgICAgICAgICAgICAgIGNhc2UgJ0AnOgorICAgICAgICAgICAgICAgICAg Y2FzZSAnISc6CisgICAgICAgICAgICAgICAgICAgIGlmIChub3B1c2gpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKnM7IGludCB4OworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCh4ID0gY210eHQoIlRleHQgdG8gYmUgaWdub3JlZCIsIiIsJnMsTlVMTCkpIDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgICAgICAgICAg c3VjY2VzcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB4eCA9IFhYQ09NOworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHl5 KSB7CisjaWZkZWYgQ0tfUkVESVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnPCc6 IHh4ID0gWFhGVU47IGJyZWFrOyAvKiBSRURJUkVDVCAqLworI2VuZGlmIC8qIENLX1JFRElSICov CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0AnOgorICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlICchJzogeHggPSBYWFNIRTsgYnJlYWs7IC8qIFNoZWxsIGVzY2FwZSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PUFVTSCAqLworI2lmZGVmIENLX1JFQ0FM TAorICAgICAgICAgICAgICAgICAgY2FzZSAnXic6IHh4ID0gWFhSRURPOyAgYnJlYWs7CisjZW5k aWYgLyogQ0tfUkVDQUxMICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgICAgICBjYXNl ICd7JzogeHggPSBYWE1BQ1JPOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgJygnOiB4 eCA9IFhYU0VYUDsgIGJyZWFrOworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmICghcXVpZXQgJiYgIWNtZF9lcnIp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4/SW52YWxpZCAtIFwiJXNcIlxu IiwKKwkJCSAgICAgICBjbWRkaXNwbGF5KChjaGFyICopY21kYnVmLHh4KQorCQkJICAgICAgICk7 CisJCQljbWRlcnIoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB4eCA9IC0yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYXZldG9rZW4g PSAxOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIkhBVkUgVE9LRU4iLCIiLHh4KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh4eCA+IC0xKSB7CisgICAgICAgICAgICAgICAg dG9wY21kID0geHg7ICAgICAgICAgICAgLyogVG9wLWxldmVsIGNvbW1hbmQgaW5kZXggKi8KKyNp Zm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgICBpZiAobWFjbHZsID4gLTEpCisgICAgICAgICAg ICAgICAgICBsYXN0Y21kW21hY2x2bF0gPSB4eDsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsInRvcGNtZCIsIiIsdG9wY21kKTsKKyAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJjbWZsZ3MiLCIiLGNtZmxncyk7CisgICAgICAgICAgICB9CisKKyNpZm5k ZWYgTk9TUEwKKyAgICAgICAgICAgIC8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIElGLi5FTFNFICov CisKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImNtZGx2bCIsIiIsY21kbHZsKTsKKyAgICAgICAg ICAgIGRlYnVnKEYxMDEsImlmY21kW2NtZGx2bF0iLCIiLGlmY21kW2NtZGx2bF0pOworCisgICAg ICAgICAgICBpZiAoaWZjbWRbY21kbHZsXSkgICAgICAgICAgLyogQ291bnQgc3RtdHMgYWZ0ZXIg SUYgKi8KKyAgICAgICAgICAgICAgaWZjbWRbY21kbHZsXSsrOworICAgICAgICAgICAgaWYgKGlm Y21kW2NtZGx2bF0gPiAyICYmIHh4ICE9IFhYRUxTICYmIHh4ICE9IFhYQ09NKQorICAgICAgICAg ICAgICBpZmNtZFtjbWRsdmxdID0gMDsKKworICAgICAgICAgICAgLyogRXhlY3V0ZSB0aGUgY29t bWFuZCBhbmQgdGFrZSBhY3Rpb24gYmFzZWQgb24gcmV0dXJuIGNvZGUuICovCisKKyAgICAgICAg ICAgIGlmIChudWxjbWQpIHsgICAgICAgICAgICAgICAvKiBJZ25vcmluZyB0aGlzIGNvbW1hbmQ/ ICovCisgICAgICAgICAgICAgICAgeHggPSBYWENPTTsgICAgICAgICAgICAgLyogTWFrZSB0aGlz IGNvbW1hbmQgYSBjb21tZW50LiAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm5zdWNj ZXNzID0gMTsgICAgICAgICAgICAgIC8qIEZvciBjYXRjaGluZyBcZnVuY3Rpb24oKSBlcnJvcnMg Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjYWxsaW5n IGRvY21kKCkiLCIiLHh4KTsKKyAgICAgICAgICAgIHp6ID0gZG9jbWQoeHgpOyAgICAgICAgICAg ICAvKiBQYXJzZSByZXN0IG9mIGNvbW1hbmQgJiBleGVjdXRlLiAqLworCisjaWZuZGVmIE5PU1BM CisJICAgIHsJCQkJLyogRm9yIFx2KGxhc3Rjb21tYW5kKSAqLworCQlleHRlcm4gY2hhciAqIHBy ZXZjbWQ7CisJCS8qIFRoZSBleGNlcHRpb24gbGlzdCBraW5kIG9mIGEgaGFjayBidXQgbGV0J3Mg dHJ5IGl0Li4uICovCisJCWlmIChja3N0cmNtcChjbWRidWYsIl9nZXRhcmciLDcsMCkgJiYKKwkJ ICAgIGNrc3RyY21wKGNtZGJ1ZiwiaWYgIiwzLDApICYmCisJCSAgICBja3N0cmNtcChjbWRidWYs InhpZiAiLDQsMCkgJiYKKwkJICAgIGNrc3RyY21wKGNtZGJ1ZiwiZG8gX2lmIiw2LDApICYmCisJ CSAgICBja3N0cmNtcChjbWRidWYsIl9hc3NpZ24gX2lmIiwxMSwwKSkKKwkJICBja3N0cm5jcHko cHJldmNtZCxjbWRidWYsQ01EQkwpOworCSAgICB9CisjZW5kaWYJLyogTk9TUEwgKi8KKworI2lm bmRlZiBOT1NQTAorICAgICAgICAgICAgaWYgKGZuZXJyb3IgJiYgIWZuc3VjY2VzcykKKyAgICAg ICAgICAgICAgc3VjY2VzcyA9IDA7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMDEsImRvY21kIHJldHVybnMiLCIiLHp6KTsKKyAgICAgICAgICAgIC8qIGRlYnVnKEYw MTEsImNtZGJ1ZiIsY21kYnVmLDMwKTsgKi8KKyAgICAgICAgICAgIC8qIGRlYnVnKEYwMTEsImF0 bWJ1ZiIsYXRtYnVmLDMwKTsgKi8KKyNpZmRlZiBNQUMKKyAgICAgICAgICAgIGlmICh0bGV2ZWwg PiAtMSkgeworICAgICAgICAgICAgICAgIGlmIChzc3RhdGUgPT0gJ2EnKSB7ICAgIC8qIGlmIGNt ZC0uIGNhbmNlbCAqLworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCAicGFyc2VyOiBj YW5jZWwgdGFrZSwgc3N0YXRlOiIsICJhIiwgMCk7CisgICAgICAgICAgICAgICAgICAgIHNzdGF0 ZSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgIGRvc3RvcCgpOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4oMCk7ICAgICAgICAgIC8qIEVuZCBvZiBpbml0IGZpbGUgb3Igd2hhdGV2ZXIu ICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIE1BQyAqLwor ICAgICAgICAgICAgc3dpdGNoICh6eikgeworICAgICAgICAgICAgICBjYXNlIC00OiAgICAgICAg ICAgICAgICAgIC8qIEVPRiAoZS5nLiBvbiByZWRpcmVjdGVkIHN0ZGluKSAqLworICAgICAgICAg ICAgICAgIGRvZXhpdChHT09EX0VYSVQseGl0c3RhKTsgLyogLi4uZXhpdCBzdWNjZXNzZnVsbHkg Ki8KKyAgICAgICAgICAgICAgY2FzZSAtMTogICAgICAgICAgICAgICAgICAvKiBSZXBhcnNlIG5l ZWRlZCAqLworICAgICAgICAgICAgICAgIHJlcGFycyA9IDE7ICAgICAgICAgICAgIC8qIEp1c3Qg c2V0IHJlcGFyc2UgZmxhZyBhbmQuLi4gKi8KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgICAgY2FzZSAtNzogICAgICAgICAgICAgICAgICAvKiBUaGV5 IHR5cGVkIGEgZGlzayBsZXR0ZXIgKi8KKyAgICAgICAgICAgICAgICBpZiAoIXpjaGRpcigoY2hh ciAqKWNtZGJ1ZikpIHsKKyAgICAgICAgICAgICAgICAgICAgcGVycm9yKChjaGFyICopY21kYnVm KTsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7CisgICAgICAgICAgICAgICAgfSBl bHNlIHN1Y2Nlc3MgPSAxOworICAgICAgICAgICAgICAgIHJlcGFycyA9IDA7CisgICAgICAgICAg ICAgICAgY29udGludWU7CisKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgY2FzZSAt NjogICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkIGNvbW1hbmQgZ2l2ZW4gdy9ubyBhcmdzICov CisgICAgICAgICAgICAgIGNhc2UgLTI6IHsJCS8qIEludmFsaWQgY29tbWFuZCBnaXZlbiB3L2Fy Z3MgKi8KKwkJICBpbnQgeCA9IDA7CisJCSAgY2hhciAqIGVvbCA9ICIiOworCQkgIHggPSBzdHJs ZW4oY21kYnVmKTsJLyogQXZvaWQgYmxhbmsgbGluZSAqLworCQkgIGlmICh4ID4gMCkgeworCQkg ICAgICBpZiAoY21kYnVmW3gtMV0gIT0gTEYpCisJCQllb2wgPSAiXG4iOworCQkgICAgICBwcmlu dGYoIj9JbnZhbGlkOiAlcyVzIiwKKwkJCSAgICAgY21kZGlzcGxheShjbWRidWYseHgpLGVvbAor CQkJICAgICApOworCQkgIH0gZWxzZQorCQkgICAgcHJpbnRmKCI/SW52YWxpZFxuIik7CisJICAg ICAgfQorCSAgICAgIGNhc2UgLTk6CQkJLyogQmFkLCBlcnJvciBtZXNzYWdlIGFscmVhZHkgZG9u ZSAqLworCQlzdWNjZXNzID0gMDsKKwkJZGVidWcoRjExMCwidG9wLWxldmVsIGNta2V5IGZhaWxl ZCIsY21kYnVmLDApOworCQkvKiBJZiBpbiBiYWNrZ3JvdW5kIHcvIGNvbW1hbmRzIGNvbWluZyBz dGRpbiwgdGVybWluYXRlICovCisJCWlmIChwZmxhZyA9PSAwICYmIHRsZXZlbCA8IDApCisJCSAg ZmF0YWwoIktlcm1pdCBjb21tYW5kIGVycm9yIGluIGJhY2tncm91bmQgZXhlY3V0aW9uIik7Cisv KgorICBDb21tYW5kIHJldHJ5IGZlYXR1cmUsIGVkaXQgMTkwLiAgSWYgd2UncmUgYXQgaW50ZXJh Y3RpdmUgcHJvbXB0aW5nIGxldmVsLAorICByZXByb21wdCB0aGUgdXNlciB3aXRoIGFzIG11Y2gg b2YgdGhlIGNvbW1hbmQgYXMgZGlkbid0IGZhaWwuCisqLworI2lmZGVmIENLX1JFQ0FMTAorCQlp ZiAoY21fcmV0cnkgJiYgIXhjbWRzcmMpIHsgLyogSWYgYXQgdG9wIGxldmVsICovCisJCSAgICBp bnQgbGVuOworCQkgICAgY2hhciAqcCwgKnM7CisJCSAgICBsZW4gPSBzdHJsZW4oY21kYnVmKTsg LyogTGVuZ3RoIG9mIGNvbW1hbmQgYnVmZmVyICovCisJCSAgICBwID0gbWFsbG9jKGxlbiArIDEp OyAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIGNvcHkgKi8KKwkJICAgIGlmIChwKSB7ICAgICAgICAg ICAgICAvKiBJZiB3ZSBnb3QgdGhlIHNwYWNlIGNvcHkgKi8KKwkJCXN0cmNweShwLGNtZGJ1Zik7 IC8qIHRoZSBjb21tYW5kIGJ1ZmZlciAoU0FGRSkuICovCisJCQkvKiBDaG9wIG9mZiBmaW5hbCBm aWVsZCwgdGhlIG9uZSB0aGF0IGZhaWxlZC4gKi8KKwkJCXMgPSBwICsgbGVuIC0gMTsgICAgICAg ICAgLyogUG9pbnQgdG8gZW5kICovCisJCQl3aGlsZSAoKnMgPT0gU1AgJiYgcyA+IHApIC8qIFRy aW0gYmxhbmtzICovCisJCQkgIHMtLTsKKwkJCXdoaWxlICgqcyAhPSBTUCAmJiBzID4gcCkgLyog VHJpbSBsYXN0IGZpZWxkICovCisJCQkgIHMtLTsKKwkJCWlmIChzID4gcCkgICAgICAgIC8qIEtl ZXAgdGhlIHNwYWNlICovCisJCQkgIHMrKzsgICAgICAgICAgICAvKiBhZnRlciBsYXN0IGdvb2Qg ZmllbGQgKi8KKwkJCWlmIChzID49IHApICAgICAgIC8qIEN1dCBvZmYgcmVtYWluZGVyICovCisJ CQkgICpzID0gTlVMOworCQkJY21pbmkoY2t4ZWNoKTsgICAgLyogUmVpbml0aWFsaXplIHRoZSBw YXJzZXIgKi8KKwkJCWNrc3RybmNweShjbWRidWYscCxDTURCTCk7IC8qIENvcHkgcmVzdWx0IGJh Y2sgKi8KKwkJCWZyZWUocCk7ICAgICAgICAgIC8qIEZyZWUgdGVtcG9yYXJ5IHN0b3JhZ2UgKi8K KwkJCXAgPSBOVUxMOworCQkJcHJvbXB0KHh4c3RyaW5nKTsgLyogUmVwcmludCB0aGUgcHJvbXB0 ICovCisJCQlwcmludGYoIiVzIixjbWRidWYpOyAvKiBSZXByaW50IHBhcnRpYWwgY29tbWFuZCAq LworCQkJcmVwYXJzID0gMTsgICAgICAgICAgLyogRm9yY2UgcmVwYXJzZSAqLworCQkJY29udGlu dWU7CisJCSAgICB9CisJCX0gZWxzZQorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCQkgIGNtZGVy cigpOworCisJCWNtaW5pKGNreGVjaCk7CQkvKiAoZmFsbCB0aHJ1KSAqLworCisJICAgICAgY2Fz ZSAtMzoJCQkvKiBFbXB0eSBjb21tYW5kIE9LIGF0IHRvcCBsZXZlbCAqLworCQlyZXBhcnMgPSAw OwkJLyogRG9uJ3QgbmVlZCB0byByZXBhcnNlLiAqLworCQljb250aW51ZTsJCS8qIEdvIGJhY2sg YW5kIGdldCBhbm90aGVyIGNvbW1hbmQuICovCisKKwkgICAgICBkZWZhdWx0OgkJCS8qIENvbW1h bmQgd2FzIHN1Y2Nlc3NmdWwuICovCisjaWZuZGVmIE5PU1BMCisJCWRlYnVnKEYxMDEsInBhcnNl ciBwcmVwYXJpbmcgdG8gY29udGludWUiLCIiLG1hY2x2bCk7CisjZW5kaWYgLyogTk9TUEwgKi8K KwkJZGVidWcoRjEwMSwicGFyc2VyIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOworCQlyZXBhcnMgPSAw OwkJLyogRG9uJ3QgbmVlZCB0byByZXBhcnNlLiAqLworCQljb250aW51ZTsJCS8qIEdvIGJhY2sg YW5kIGdldCBhbm90aGVyIGNvbW1hbmQuICovCisJICAgIH0KKyAgICAgICAgfQorI2lmbmRlZiBO T1NQTAorICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXIgYnJlYWtzIG91dCBvZiB3aGlsZSBsb29w IiwiIixtYWNsdmwpOworICAgICAgICBpZiAobSAmJiAoY21kbHZsIDwgaW5sZXZlbCkpICByZXR1 cm4oKGludCkgc3N0YXRlKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIH0KKworLyogR290IGFu IGFjdGlvbiBjb21tYW5kLCByZXR1cm4gc3RhcnQgc3RhdGUuICovCisKKyAgICByZXR1cm4oKGlu dCkgc3N0YXRlKTsKK30KKworI2lmbmRlZiBOT1NQTAorLyoKKyAgT1VUUFVUIGNvbW1hbmQuCisg IEJ1ZmZlcmluZyBhbmQgcGFjaW5nIGFkZGVkIGJ5IEwuSS4gS2lyYnksIDVBKDE4OSksIEp1bmUg MTk5My4KKyovCisjZGVmaW5lIE9CU0laRSA4MCAgICAgICAgICAgICAgICAgICAgICAgLyogU2l6 ZSBvZiBsb2NhbCBjaGFyYWN0ZXIgYnVmZmVyICovCisKK3N0YXRpYyBpbnQgb2JuOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBCdWZmZXIgb2Zmc2V0IChoaWdoIHdhdGVyIG1hcmspICovCitz dGF0aWMgY2hhciBvYnVmW09CU0laRSsxXTsgICAgICAgICAgICAgLyogT1VUUFVUIGJ1ZmZlci4g Ki8KK3N0YXRpYyBjaGFyICpvYnA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRv IG91dHB1dCBidWZmZXIuICovCitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgb2JvYywgKGNoYXIpICk7 CitfUFJPVE9UWVAoIHN0YXRpYyBpbnQgeHhvdXQsIChjaGFyICosIGludCkgKTsKKworc3RhdGlj IGludAorI2lmZGVmIENLX0FOU0lDCit4eG91dChjaGFyICpvYnVmLCBpbnQgb2JzaXplKQorI2Vs c2UKK3h4b3V0KG9idWYsIG9ic2l6ZSkgY2hhciAqb2J1ZjsgaW50IG9ic2l6ZTsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworLyogeHhvdXQgKi8geyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IE9VVFBVVCBjb21tYW5kJ3Mgb3V0cHV0IGZ1bmN0aW9uICovCisgICAgaW50IGksIHJjOworCisg ICAgZGVidWcoRjEwMSwieHhvdXQgb2JzaXplIiwiIixvYnNpemUpOworICAgIGRlYnVnKEYxMDEs Inh4b3V0IHBhY2luZyIsIiIscGFjaW5nKTsKKyAgICBkZWJ1ZyhGMTExLCJ4eG91dCBzdHJpbmci LG9idWYsc3RybGVuKG9idWYpKTsKKworICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEluaXRpYWwgcmV0dXJuIGNvZGUuICovCisgICAgaWYgKCFvYnVmIHx8IChvYnNp emUgPD0gMCkpICAgICAgICAgLyogTm90aGluZyB0byBvdXRwdXQuICovCisgICAgICBnb3RvIHh4 b3V0X3g7ICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHN1Y2Nlc3NmdWxseSAqLworCisg ICAgcmMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3cgYXNzdW1lIGZh aWx1cmUgKi8KKyAgICBpZiAocGFjaW5nID09IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIElz IHBhY2luZyBlbmFibGVkPyAqLworICAgICAgICBpZiAoKGxvY2FsID8gICAgICAgICAgICAgICAg ICAgICAgLyogTm8sIHdyaXRlIGVudGlyZSBzdHJpbmcgYXQgb25jZSAqLworICAgICAgICAgICAg IHR0b2woKENIQVIgKilvYnVmLCBvYnNpemUpIDogLyogdG8gY29tbXVuaWNhdGlvbnMgZGV2aWNl ICovCisgICAgICAgICAgICAgY29ueG8ob2JzaXplLCBvYnVmKSkgICAgICAgICAvKiBvciB0byBj b25zb2xlICovCisgICAgICAgICAgICAhPSBvYnNpemUpCisgICAgICAgICAgZ290byB4eG91dF94 OworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvYnNpemU7IGkrKykgeyAg LyogV3JpdGUgaW5kaXZpZHVhbCBjaGFycyAqLworICAgICAgICAgICAgaWYgKChsb2NhbCA/IHR0 b2Mob2J1ZltpXSkgOiBjb25vYyhvYnVmW2ldKSkgPCAwKQorICAgICAgICAgICAgICBnb3RvIHh4 b3V0X3g7CisgICAgICAgICAgICBtc2xlZXAocGFjaW5nKTsKKyAgICAgICAgfQorICAgIH0KKyAg ICBpZiAoZHVwbGV4KSB7CisjaWZkZWYgT1MyCisgICAgICAgIGlmIChpbmVjaG8gJiYgbG9jYWwp IHsKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9ic2l6ZTsg aSsrKSB7IC8qIFdyaXRlIHRvIGVtdWxhdG9yICovCisgICAgICAgICAgICAgICAgc2NyaXB0d3J0 YnVmKChVU0hPUlQpb2J1ZltpXSk7IC8qIHdoaWNoIGFsc28gbG9ncyBzZXNzaW9uICovCisgICAg ICAgICAgICB9CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgICAgICAgICAgY29ueG8ob2JzaXpl LG9idWYpOworICAgICAgICB9IGVsc2UgaWYgKHNlc2xvZykgeyAgICAgICAgICAgIC8qIG9yIGxv ZyBzZXNzaW9uIGhlcmUgKi8KKyAgICAgICAgICAgIGxvZ3N0cigoY2hhciAqKSBvYnVmLCBvYnNp emUpOworICAgICAgICB9CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgaWYgKHNlc2xvZykgewor ICAgICAgICAgICAgbG9nc3RyKChjaGFyICopIG9idWYsIG9ic2l6ZSk7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKGluZWNobyAmJiBsb2NhbCkgeworICAgICAgICAgICAgY29ueG8ob2JzaXplLG9i dWYpOworICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgfQorICAgIHJjID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgeHhvdXRfeDoKKyAgICBv Ym4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBjb3VudCAqLworICAg IG9icCA9IG9idWY7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb2ludGVycyAqLwor ICAgIHJldHVybihyYyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBvdXIgcmV0 dXJuIGNvZGUgKi8KK30KKworI2lmZGVmIENPTU1FTlQKKy8qCisgIE1hY3JvcyBmb3IgT1VUUFVU IGNvbW1hbmQgZXhlY3V0aW9uLCB0byBtYWtlIGl0IGdvIGZhc3Rlci4KKyovCisjZGVmaW5lIG9i ZmxzKCkgKCh4eG91dChvYnVmLG9ibik8MCk/LTE6MCkKKyNkZWZpbmUgb2JvYyhjKSAoKCpvYnAr Kz0oY2hhcikoYykpLCpvYnA9MCwoKCgrK29ibik+PU9CU0laRSk/b2JmbHMoKTowKSkKKworI2Vs c2UgLyogVGhlIG1hY3JvcyBjYXVzZSBzb21lIGNvbXBpbGVycyB0byBnZW5lcmF0ZSBiYWQgY29k ZS4gKi8KKworc3RhdGljIGludAorI2lmZGVmIENLX0FOU0lDCitvYm9jKGNoYXIgYykKKyNlbHNl CitvYm9jKGMpIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogb2JvYyAqLyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9VVFBVVCBjb21tYW5kJ3Mgb3V0cHV0IGZ1bmN0 aW9uICovCisKKyAgICAqb2JwKysgPSBjOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZXBv c2l0IGNoYXJhY3RlciAqLworICAgICpvYnAgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEZsdXNoIGJ1ZmZlciBpZiBpdCdzIG5vdyBmdWxsICovCisKKyAgICByZXR1cm4oKCgrK29i bikgPj0gT0JTSVpFKSA/IHh4b3V0KG9idWYsb2JuKSA6IDApOworfQorI2VuZGlmIC8qIENPTU1F TlQgKi8KKworLyogIFJvdXRpbmVzIGZvciBoYW5kbGluZyBsb2NhbCB2YXJpYWJsZXMgLS0gYWxz byBzZWUgcG9wY2x2bCgpLiAgKi8KKworVk9JRAorZnJlZWxvY2FsKG0pIGludCBtOyB7ICAgICAg ICAgICAgICAgICAgIC8qIEZyZWUgbG9jYWwgdmFyaWFibGVzICovCisgICAgc3RydWN0IGxvY2Fs dmFyICogdiwgKiB0djsgICAgICAgICAgLyogYXQgbWFjcm8gbGV2ZWwgbS4uLiAqLworICAgIGRl YnVnKEYxMDEsImZyZWVsb2NhbCBsZXZlbCIsIiIsbSk7CisgICAgaWYgKG0gPCAwKSByZXR1cm47 CisgICAgdiA9IGxvY2FsaGVhZFttXTsgICAgICAgICAgICAgICAgICAgLyogTGlzdCBoZWFkIGZv ciBsZXZlbCBtICovCisgICAgd2hpbGUgKHYpIHsKKyAgICAgICAgaWYgKHYtPmx2X25hbWUpICAg ICAgICAgICAgICAgICAvKiBWYXJpYWJsZSBuYW1lICovCisgICAgICAgICAgZnJlZSh2LT5sdl9u YW1lKTsKKyAgICAgICAgaWYgKHYtPmx2X3ZhbHVlKSAgICAgICAgICAgICAgICAvKiBWYWx1ZSAq LworICAgICAgICAgIGZyZWUodi0+bHZfdmFsdWUpOworICAgICAgICB0diA9IHY7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNhdmUgcG9pbnRlciB0byB0aGlzIG5vZGUgKi8KKyAgICAgICAg diA9IHYtPmx2X25leHQ7ICAgICAgICAgICAgICAgICAvKiBHZXQgbmV4dCBvbmUgKi8KKyAgICAg ICAgaWYgKHR2KSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGcmVlIHRoaXMgb25lICovCisg ICAgICAgICAgZnJlZSgoY2hhciAqKXR2KTsKKyAgICB9CisgICAgbG9jYWxoZWFkW21dID0gKHN0 cnVjdCBsb2NhbHZhciAqKSBOVUxMOyAvKiBEb25lLCBzZXQgbGlzdCBoZWFkIHRvIE5VTEwgKi8K K30KKworI2RlZmluZSBNQVhMT0NBTFZBUiA2NAorCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRo ZSBkZWZpbml0aW9uIG9mIGEgdXNlci1kZWZpbmVkIHZhcmlhYmxlICovCisKK3N0YXRpYyBjaGFy ICoKK3ZhcmRlZihzLGlzYXJyYXkseDEseDIpIGNoYXIgKiBzOyBpbnQgKiBpc2FycmF5LCAqIHgx LCAqIHgyOyB7CisgICAgY2hhciAqIHA7CisgICAgY2hhciBjOworICAgICppc2FycmF5ID0gMDsK KyAgICBpZiAoIXMpIHJldHVybihOVUxMKTsKKyAgICBpZiAoISpzKSByZXR1cm4oTlVMTCk7Cisg ICAgcCA9IHM7CisgICAgaWYgKCpzID09IENNRFEpIHsKKyAgICAgICAgcCsrOworICAgICAgICBp ZiAoISpwKQorICAgICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgaWYgKChjID0gKnApID09 ICclJykgeyAgICAgICAgICAvKiBTY2FsYXIgdmFyaWFibGUuICovCisgICAgICAgICAgICBjID0g KisrcDsgICAgICAgICAgICAgICAgICAgLyogR2V0IElEIGNoYXJhY3Rlci4gKi8KKyAgICAgICAg ICAgIHAgPSAiIjsgICAgICAgICAgICAgICAgICAgICAvKiBBc3N1bWUgZGVmaW5pdGlvbiBpcyBl bXB0eSAqLworICAgICAgICAgICAgaWYgKCFjKQorICAgICAgICAgICAgICByZXR1cm4oTlVMTCk7 CisgICAgICAgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsgLyogRGlnaXQgZm9yIG1h Y3JvIGFyZyAqLworICAgICAgICAgICAgICAgIGlmIChtYWNsdmwgPCAwKSAgICAgICAgIC8qIERp Z2l0IHZhcmlhYmxlcyBhcmUgZ2xvYmFsICovCisgICAgICAgICAgICAgICAgICByZXR1cm4oZ192 YXJbY10pOyAgICAgLyogaWYgbm8gbWFjcm8gaXMgYWN0aXZlICovCisgICAgICAgICAgICAgICAg ZWxzZSAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlICovCisgICAgICAgICAgICAgICAg ICByZXR1cm4obV9hcmdbbWFjbHZsXVtjIC0gJzAnXSk7IC8qIHRoZXkncmUgb24gdGhlIHN0YWNr ICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzYWxwaGEoYykpIHsKKyAgICAgICAgICAgICAg ICBpZiAoaXN1cHBlcihjKSkgYyAtPSAoJ2EnLSdBJyk7CisgICAgICAgICAgICAgICAgcmV0dXJu KGdfdmFyW2NdKTsgICAgICAgICAgIC8qIExldHRlciBmb3IgZ2xvYmFsIHZhcmlhYmxlICovCisg ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgICAgICB9 IGVsc2UgaWYgKGMgPT0gJyYnKSB7ICAgICAgICAgIC8qIEFycmF5IHJlZmVyZW5jZS4gKi8KKyAg ICAgICAgICAgIGludCB4LCB2YmksIGQ7CisgICAgICAgICAgICB4ID0gYXJyYXluYW0ocCwmdmJp LCZkKTsgICAgLyogR2V0IG5hbWUgYW5kIHN1YnNjcmlwdCAqLworICAgICAgICAgICAgaWYgKHgg PiAtMSB8fCBkID09IC0xNykgeworICAgICAgICAgICAgICAgICppc2FycmF5ID0gMTsKKyAgICAg ICAgICAgICAgICAqeDEgPSB2Ymk7CisgICAgICAgICAgICAgICAgKngyID0gKGQgPT0gLTE3KSA/ IDAgOiBkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAg ICAgICByZXR1cm4oTlVMTCk7CisgICAgICAgICAgICBpZiAoY2hrYXJyYXkodmJpLGQpID49IDAp IHsJLyogQXJyYXkgaXMgZGVjbGFyZWQ/ICovCisgICAgICAgICAgICAgICAgdmJpIC09IEFSUkFZ QkFTRTsgICAgICAgLyogQ29udmVydCBuYW1lIHRvIGluZGV4ICovCisgICAgICAgICAgICAgICAg aWYgKGFfZGltW3ZiaV0gPj0gZCkgeyAgLyogSWYgc3Vic2NyaXB0IGluIHJhbmdlICovCisgICAg ICAgICAgICAgICAgICAgIGNoYXIgKiphcDsKKyAgICAgICAgICAgICAgICAgICAgYXAgPSBhX3B0 clt2YmldOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oKGFwKSA/IGFwW2RdIDogTlVMTCk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybihOVUxMKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgazsKKyAgICAgICAgayA9IG14 bG9vayhtYWN0YWIscyxubWFjKTsKKyAgICAgICAgcmV0dXJuKChrID4gLTEpID8gbWFjdGFiW2td Lm12YWwgOiBOVUxMKTsKKyAgICB9Cit9CisKKworaW50CithZGRsb2NhbChwKSBjaGFyICogcDsg eworICAgIGludCB4LCB6LCBpc2FycmF5ID0gMDsKKyAgICBjaGFyICogczsKKyAgICBzdHJ1Y3Qg bG9jYWx2YXIgKiB2LCAqcHJldiA9IChzdHJ1Y3QgbG9jYWx2YXIgKilOVUxMOworICAgIGV4dGVy biBpbnQgdHJhX2FzZzsgaW50IHRyYV90bXA7CisKKyAgICB0cmFfdG1wID0gdHJhX2FzZzsKKwor ICAgIHMgPSB2YXJkZWYocCwmaXNhcnJheSwmeCwmeik7ICAgICAgIC8qIEdldCBkZWZpbml0aW9u IG9mIHZhcmlhYmxlICovCisgICAgaWYgKGlzYXJyYXkpIHsgICAgICAgICAgICAgICAgICAgICAg LyogQXJyYXlzIGFyZSBoYW5kbGVkIHNwZWNpYWxseSAqLworICAgICAgICBwdXNoYXJyYXkoeCx6 KTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBp ZiAoKHYgPSBsb2NhbGhlYWRbY21kbHZsXSkpIHsgICAgICAvKiBBbHJlYWR5IGhhdmUgc29tZSBh dCB0aGlzIGxldmVsPyAqLworICAgICAgICB3aGlsZSAodikgeyAgICAgICAgICAgICAgICAgICAg IC8qIEZpbmQgZW5kIG9mIGxpc3QgKi8KKyAgICAgICAgICAgIHByZXYgPSB2OworICAgICAgICAg ICAgdiA9IHYtPmx2X25leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgdiA9IChzdHJ1Y3QgbG9j YWx2YXIgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG9jYWx2YXIpKTsKKyAgICBpZiAoIXYpIHsK KyAgICAgICAgcHJpbnRmKCI/RmFpbHVyZSB0byBhbGxvY2F0ZSBzdG9yYWdlIGZvciBsb2NhbCB2 YXJpYWJsZXMiKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKCFsb2NhbGhl YWRbY21kbHZsXSkgICAgICAgICAgICAgLyogSWYgZmlyc3QsIHNldCBsaXN0IGhlYWQgKi8KKyAg ICAgIGxvY2FsaGVhZFtjbWRsdmxdID0gdjsKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBPdGhlcndpc2UgbGluayBwcmV2aW91cyB0byB0aGlzICovCisgICAgICBw cmV2LT5sdl9uZXh0ID0gdjsKKyAgICBwcmV2ID0gdjsgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBBbmQgbWFrZSB0aGlzIHByZXZpb3VzICovCisgICAgdi0+bHZfbmV4dCA9IChzdHJ1Y3Qg bG9jYWx2YXIgKikgTlVMTDsgLyogTm8gbmV4dCB5ZXQgKi8KKworICAgIGlmICghKHYtPmx2X25h bWUgPSAoY2hhciAqKSBtYWxsb2MoKGludCkgc3RybGVuKHApICsgMSkpKQorICAgICAgcmV0dXJu KC0xKTsKKyAgICBzdHJjcHkodi0+bHZfbmFtZSwgcCk7ICAgICAgICAgICAgICAvKiBDb3B5IG5h bWUgaW50byBuZXcgbm9kZSAoU0FGRSkgKi8KKworICAgIGlmICgqcykgeworICAgICAgICBpZiAo ISh2LT5sdl92YWx1ZSA9IChjaGFyICopIG1hbGxvYygoaW50KSBzdHJsZW4ocykgKyAxKSkpCisg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgc3RyY3B5KHYtPmx2X3ZhbHVlLCBzKTsgICAg ICAgICAvKiBDb3B5IHZhbHVlIGludG8gbmV3IG5vZGUgKFNBRkUpICovCisgICAgfSBlbHNlCisg ICAgICB2LT5sdl92YWx1ZSA9IE5VTEw7CisKKyAgICB0cmFfYXNnID0gMDsKKyAgICBkZWxtYWMo cCwxKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxldGUgdGhlIG9yaWdpbmFsIG1hY3Jv ICovCisgICAgdHJhX2FzZyA9IHRyYV90bXA7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2Rv bG9jYWwoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEbyB0aGUgTE9DQUwgY29t bWFuZCAqLworICAgIGludCBpLCB4OworICAgIGNoYXIgKiBzOworICAgIGNoYXIgKiBsaXN0W01B WExPQ0FMVkFSKzJdOyAgICAgICAgIC8qIFVwIHRvIDY0IHZhcmlhYmxlcyBwZXIgbGluZSAqLwor CisgICAgaWYgKCh4ID0gY210eHQoIlZhcmlhYmxlIG5hbWUocykiLCIiLCZzLE5VTEwpKSA8IDAp CisgICAgICByZXR1cm4oeCk7CisKKyAgICB4d29yZHMocyxNQVhMT0NBTFZBUixsaXN0LDApOyAg ICAgICAvKiBCcmVhayB1cCBsaW5lIGludG8gIndvcmRzIiAqLworCisgICAgLyogTm90ZTogQXJy YXlzIGRvIG5vdCB1c2UgdGhlIGxvY2FsaGVhZCBsaXN0LCBidXQgaGF2ZSB0aGVpciBvd24gc3Rh Y2sgKi8KKworICAgIGZvciAoaSA9IDE7IGkgPCBNQVhMT0NBTFZBUiAmJiBsaXN0W2ldOyBpKysp IHsgLyogR28gdGhyb3VnaCB0aGUgbGlzdCAqLworICAgICAgICBpZiAoYWRkbG9jYWwobGlzdFtp XSkgPCAwKQorICAgICAgICAgIGdvdG8gbG9jYWxiYWQ7CisgICAgfQorICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisKKyAgbG9jYWxiYWQ6CisgICAgcHJpbnRmKCI/RmFpbHVyZSB0byBhbGxvY2F0 ZSBzdG9yYWdlIGZvciBsb2NhbCB2YXJpYWJsZXMiKTsKKyAgICBmcmVlbG9jYWwoY21kbHZsKTsK KyAgICByZXR1cm4oLTkpOworfQorCisvKiAgRCBPIE8gVSBUIFAgVSBUICAtLSAgUmV0dXJucyAw IG9uIGZhaWx1cmUsIDEgb24gc3VjY2VzcyAqLworCisjaWZuZGVmIE5PS1ZFUkJTCisjZGVmaW5l IEtfQlVGTEVOIDMwCisjZGVmaW5lIFNFTkRfQlVGTEVOIDI1NQorI2RlZmluZSBzZW5kYnVmZCh4 KSB7IG9zZW5kYnVmW3NlbmRuZHgrK10gPSB4O1wKKyBpZiAoc2VuZG5keCA9PSBTRU5EX0JVRkxF Tikge2Rvb3V0cHV0KHMsY3gpOyBzZW5kbmR4ID0gMDt9fQorI2VuZGlmIC8qIE5PS1ZFUkJTICov CisKK2ludCBvdXRlc2MgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIHNw ZWNpYWwgT1VUUFVUIGVzY2FwZXMgKi8KKworaW50Citkb291dHB1dChzLCBjeCkgY2hhciAqczsg aW50IGN4OyB7CisjaWZkZWYgU1NIQlVJTFRJTgorICAgIGV4dGVybiBpbnQgc3NoX2NhczsKKyAg ICBleHRlcm4gY2hhciAqIHNzaF9jbWQ7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworICAgIGlu dCB4LCB4eCwgeSwgcXVvdGU7ICAgICAgICAgICAgICAgIC8qIFdvcmtlcnMgKi8KKyAgICBpbnQg aXNfdG4gPSAwOworCisgICAgaXNfdG4gPSAobG9jYWwgJiYgbmV0d29yayAmJiBJU19URUxORVQo KSkgfHwKKyAgICAgICghbG9jYWwgJiYgc3N0ZWxuZXQpOworCisgICAgZGVidWcoRjExMSwiZG9v dXRwdXQgcyIscywoaW50KXN0cmxlbihzKSk7CisKKyAgICBpZiAobG9jYWwpIHsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDb25kaXRpb24gZXh0ZXJuYWwgbGluZSAqLworI2lmZGVmIE5PTE9D QUwKKyAgICAgICAgZ290byBvdXRlcnI7CisjZWxzZQorCWlmICh0dGNoaygpIDwgMCkgeworCSAg ICBpZiAoIW5ldHdvcmspIHsKKwkJaWYgKGNhcnJpZXIgIT0gQ0FSX09GRikgeworCQkgICAgaW50 IHg7CisJCSAgICB4ID0gdHRnbWRtKCk7CisJCSAgICBpZiAoKHggPiAtMSkgJiYgKCh4ICYgQk1f RENEKSA9PSAwKSkgeworCQkJcHJpbnRmKAorIj9DYXJyaWVyIHNpZ25hbCByZXF1aXJlZCBidXQg bm90IHByZXNlbnQgLSBUcnkgU0VUIENBUlJJRVItV0FUQ0ggT0ZGLlxuIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKwkJCXJldHVybigwKTsKKwkJICAgIH0KKwkJfSBlbHNlIHsK KwkJICAgIHByaW50ZigKKyI/UHJvYmxlbSB3aXRoIHNlcmlhbCBwb3J0IG9yIG1vZGVtIG9yIGNh YmxlIC0gVHJ5IFNIT1cgQ09NTVVOSUNBVElPTlMuXG4iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisJCSAgICByZXR1cm4oMCk7CisJCX0KKwkgICAgfQorCSAgICBwcmludGYoIj9Db25u ZWN0aW9uICVzICVzIGlzIG5vdCBvcGVuIG9yIG5vdCBmdW5jdGlvbmluZy5cbiIsCisJCSAgIG5l dHdvcmsgPyAidG8iIDogIm9uIiwKKwkJICAgdHRuYW1lCisJCSAgICk7CisJICAgIHJldHVybigw KTsKKwl9CisgICAgICAgIGlmICh0dHZ0KHNwZWVkLGZsb3cpIDwgMCkgeworICAgICAgICAgICAg cHJpbnRmKCI/T1VUUFVUIGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKyAgICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB9CisjaWZkZWYg U1NIQlVJTFRJTgorICAgIGlmICggbmV0d29yayAmJiBuZXR0eXBlID09IE5FVF9TU0ggJiYgc3No X2NhcyAmJiBzc2hfY21kICYmIAorICAgICAgICAgIShzdHJjbXAoc3NoX2NtZCwia2VybWl0Iikg JiYgc3RyY21wKHNzaF9jbWQsInNmdHAiKSkpIHsKKyAgICAgICAgaWYgKCFxdWlldCkKKyAgICAg ICAgICAgIHByaW50ZigiP1NTSCBTdWJzeXN0ZW0gYWN0aXZlOiAlc1xuIiwgc3NoX2NtZCk7Cisg ICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisgICAg aWYgKCFjbWRncXVvKCkpIHsgICAgICAgICAgICAgICAgICAgLyogQ09NTUFORCBRVU9USU5HIE9G RiAqLworICAgICAgICB4ID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgIC8qIEp1c3Qgc2Vu ZCB0aGUgc3RyaW5nIGxpdGVyYWxseSAqLworICAgICAgICB4eCA9IGxvY2FsID8gdHRvbCgoQ0hB UiAqKXMseCkgOiBjb254byh4LHMpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9ICh4eCA9PSB4 KSA/IDEgOiAwKTsKKyAgICB9CisgICAgcXVvdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSW5pdGlhbGl6ZSBiYWNrc2xhc2ggKFwpIHF1b3RlICovCisgICAgb2JuID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgY291bnQgKi8KKyAgICBvYnAgPSBvYnVm OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgcG9pbnRlcnMgKi8KKworICBvdXRhZ2Fp bjoKKyAgICB3aGlsZSAoKHggPSAqcysrKSkgeyAgICAgICAgICAgICAgICAvKiBMb29wIHRocm91 Z2ggdGhlIHN0cmluZyAqLworICAgICAgICB5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEVycm9yIGNvZGUsIDAgPSBubyBlcnJvci4gKi8KKyAgICAgICAgZGVidWcoRjAwMCwiZG9v dXRwdXQiLCIiLHgpOworICAgICAgICBpZiAocXVvdGUpIHsgICAgICAgICAgICAgICAgICAgIC8q IFRoaXMgY2hhcmFjdGVyIGlzIHF1b3RlZCAqLworI2lmbmRlZiBOT0tWRVJCUworICAgICAgICAg ICBpZiAoeCA9PSAnaycgfHwgeCA9PSAnSycpIHsgIC8qIFxrIG9yIFxLICovCisgICAgICAgICAg ICAgICBleHRlcm4gc3RydWN0IGtleXRhYiBrdmVyYnNbXTsKKyAgICAgICAgICAgICAgIGV4dGVy biBpbnQgbmt2ZXJiczsKKyAgICAgICAgICAgICAgIGV4dGVybiBjaGFyICoga2V5ZGVmcHRyOwor ICAgICAgICAgICAgICAgZXh0ZXJuIGludCBrZXltYWM7CisgICAgICAgICAgICAgICBleHRlcm4g aW50IGtleW1hY3g7CisgICAgICAgICAgICAgICBpbnQgeCwgeSwgYnJhY2UgPSAwOworICAgICAg ICAgICAgICAgaW50IHBhdXNlOworICAgICAgICAgICAgICAgY2hhciAqIHAsICogYjsKKyAgICAg ICAgICAgICAgIGNoYXIga2J1ZltLX0JVRkxFTiArIDFdOyAvKiBLZXkgdmVyYiBuYW1lIGJ1ZmZl ciAqLworICAgICAgICAgICAgICAgY2hhciBvc2VuZGJ1ZltTRU5EX0JVRkxFTiArMV07CisgICAg ICAgICAgICAgICBpbnQgIHNlbmRuZHggPSAwOworCisgICAgICAgICAgICAgICBpZiAoeHhvdXQo b2J1ZixvYm4pIDwgMCkgLyogRmx1c2ggYnVmZmVyICovCisgICAgICAgICAgICAgICAgIGdvdG8g b3V0ZXJyOworICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiT1VUUFVUIEtWRVJCIiwiIiwwKTsg LyogU2VuZCBhIEtWRVJCICovCisgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg ICAgLyogSGF2ZSBLIHZlcmI/ICovCisgICAgICAgICAgICAgICAgICAgaWYgKCEqcykgeworICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICB9CisvKgorICBX ZSBhc3N1bWUgdGhhdCB0aGUgdmVyYiBuYW1lIGlzIHticmFjZWR9LCBvciBpdCBleHRlbmRzIHRv IHRoZSBlbmQgb2YgdGhlCisgIHN0cmluZywgcywgb3IgaXQgZW5kcyB3aXRoIGEgc3BhY2UsIGNv bnRyb2wgY2hhcmFjdGVyLCBvciBiYWNrc2xhc2guCisqLworICAgICAgICAgICAgICAgICAgIHAg PSBrYnVmOyAgICAgICAgICAgIC8qIENvcHkgdmVyYiBuYW1lIGludG8gbG9jYWwgYnVmZmVyICov CisgICAgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICAgICAgICAgd2hpbGUgKCh4 KysgPCBLX0JVRkxFTikgJiYgKCpzID4gU1ApICYmICgqcyAhPSBDTURRKSkgeworICAgICAgICAg ICAgICAgICAgICAgICBpZiAoYnJhY2UgJiYgKnMgPT0gJ30nKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAqcCsrID0gKnMrKzsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgaWYgKCpzICYmICFicmFjZSkgICAgLyogSWYgd2UgYnJva2UgYmVjYXVzZSBvZiBc LCBldGMsICovCisgICAgICAgICAgICAgICAgICAgICBzLS07ICAgICAgICAgICAgICAgLyogIGJh Y2sgdXAgc28gd2UgZ2V0IGFub3RoZXIgbG9vay4gKi8KKyAgICAgICAgICAgICAgICAgICBicmFj ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgKnAgPSBOVUw7ICAgICAgICAgICAgLyogVGVybWlu YXRlLiAqLworICAgICAgICAgICAgICAgICAgIHAgPSBrYnVmOyAgICAgICAgICAgIC8qIFBvaW50 IGJhY2sgdG8gYmVnaW5uaW5nICovCisgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiZG9v dXRwdXQga3ZlcmIiLHAsMCk7CisgICAgICAgICAgICAgICAgICAgeSA9IHhsb29rdXAoa3ZlcmJz LHAsbmt2ZXJicywmeCk7IC8qIExvb2sgaXQgdXAgKi8KKyAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJkb291dHB1dCBsb29rdXAiLDAseSk7CisgICAgICAgICAgICAgICAgICAgaWYgKHkg PiAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VuZG5keCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgZG9vdXRwdXQob3NlbmRidWYsY3gpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VuZG5keCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgZG9rdmVyYihWQ01ELHkpOworI2lmbmRlZiBOT1NQTAorICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgIC8qIElzIGl0IGEgbWFjcm8/ICovCisg ICAgICAgICAgICAgICAgICAgICAgIHkgPSBteGxvb2sobWFjdGFiLHAsbm1hYyk7CisgICAgICAg ICAgICAgICAgICAgICAgIGlmICh5ID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGNtcHVzaCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bWFjID0gMTsgIC8qIEZs YWcgZm9yIGtleSBtYWNybyBhY3RpdmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eW1hY3ggPSB5OyAvKiBLZXkgbWFjcm8gaW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIGtleWRlZnB0ciA9IHM7IC8qIFdoZXJlIHRvIHJlc3VtZSBuZXh0IHRpbWUgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvb3V0cHV0IG14bG9vayIsa2V5ZGVm cHRyLHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyKDEpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgY21wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgcXVvdGUgPSAwOworICAgICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PS1ZFUkJTICovCisgICAgICAgICAgICAgaWYgKG91 dGVzYyAmJiAoeCA9PSAnbicgfHwgeCA9PSAnTicpKSB7IC8qIFxuIG9yIFxOICovCisgICAgICAg ICAgICAgICAgIGlmICh4eG91dChvYnVmLG9ibikgPCAwKSAvKiBGbHVzaCBidWZmZXIgKi8KKyAg ICAgICAgICAgICAgICAgICBnb3RvIG91dGVycjsKKyAgICAgICAgICAgICAgICAgZGVidWcoRjEw MCwiT1VUUFVUIE5VTCIsIiIsMCk7IC8qIFNlbmQgYSBOVUwgKi8KKyAgICAgICAgICAgICAgICAg aWYgKGxvY2FsKQorICAgICAgICAgICAgICAgICAgIHR0b2MoTlVMKTsKKyAgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgIGNvbm9jKE5VTCk7CisgICAgICAgICAgICAgICAg IHF1b3RlID0gMDsKKyAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICB9 IGVsc2UgaWYgKG91dGVzYyAmJiAoeCA9PSAnYicgfHwgeCA9PSAnQicpKSB7IC8qIFxiIG9yIFxC ICovCisKKyAgICAgICAgICAgICAgICBpZiAoeHhvdXQob2J1ZixvYm4pIDwgMCkgLyogRmx1c2gg YnVmZmVyIGZpcnN0ICovCisgICAgICAgICAgICAgICAgICBnb3RvIG91dGVycjsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAwLCJPVVRQVVQgQlJFQUsiLCIiLDApOworI2lmbmRlZiBOT0xPQ0FM CisgICAgICAgICAgICAgICAgdHRzbmRiKCk7ICAgICAgICAgICAgICAgLyogU2VuZCBCUkVBSyBz aWduYWwgKi8KKyNlbHNlCisgICAgICAgICAgICAgICAgIGlmIChsb2NhbCkKKyAgICAgICAgICAg ICAgICAgICB0dG9jKE5VTCk7CisgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICAgICBjb25vYyhOVUwpOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICAgICAgICAgICAgICBx dW90ZSA9IDA7ICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBxdW90ZSBmbGFnICovCisgICAgICAg ICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgLyogYW5kIG5vdCB0aGUgYiBvciBCICov CisjaWZkZWYgQ0tfTEJSSworICAgICAgICAgICAgIH0gZWxzZSBpZiAob3V0ZXNjICYmICh4ID09 ICdsJyB8fCB4ID09ICdMJykpIHsgLyogXGwgb3IgXEwgKi8KKyAgICAgICAgICAgICAgICAgaWYg KHh4b3V0KG9idWYsb2JuKSA8IDApIC8qIEZsdXNoIGJ1ZmZlciBmaXJzdCAqLworICAgICAgICAg ICAgICAgICAgIGdvdG8gb3V0ZXJyOworICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJPVVRQ VVQgTG9uZyBCUkVBSyIsIiIsMCk7CisjaWZuZGVmIE5PTE9DQUwKKyAgICAgICAgICAgICAgICAg dHRzbmRsYigpOyAgICAgICAgICAgICAvKiBTZW5kIExvbmcgQlJFQUsgc2lnbmFsICovCisjZWxz ZQorICAgICAgICAgICAgICAgICBpZiAobG9jYWwpCisgICAgICAgICAgICAgICAgICAgdHRvYyhO VUwpOworICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgY29ub2MoTlVM KTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgICAgICAgICAgICAgIHF1b3RlID0gMDsgICAg ICAgICAgICAgLyogVHVybiBvZmYgcXVvdGUgZmxhZyAqLworICAgICAgICAgICAgICAgICBjb250 aW51ZTsgICAgICAgICAgICAgIC8qIGFuZCBub3QgdGhlIGwgb3IgTCAqLworI2VuZGlmIC8qIENL X0xCUksgKi8KKworICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBDTURRKSB7ICAgIC8qIEJh Y2tzbGFzaCBpdHNlbGYgKi8KKyAgICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiT1VUUFVUIENN RFEiLCIiLDApOworICAgICAgICAgICAgICAgICB4eCA9IG9ib2MoZG9wYXIoQ01EUSkpOyAvKiBP dXRwdXQgdGhlIGJhY2tzbGFzaC4gKi8KKyAgICAgICAgICAgICAgICAgaWYgKHh4IDwgMCkKKyAg ICAgICAgICAgICAgICAgICBnb3RvIG91dGVycjsKKyAgICAgICAgICAgICAgICAgcXVvdGUgPSAw OworICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgIC8qIGlmIFwgbm90IGZvbGxvd2VkIGJ5IHNwZWNpYWwgZXNjICovCisg ICAgICAgICAgICAgICAgLyogTm90ZTogQXRhcmkgU1QgY29tcGlsZXIgd29uJ3QgYWxsb3cgbWFj cm8gY2FsbCBpbiAiaWYgKCkiICovCisgICAgICAgICAgICAgICAgIHh4ID0gb2JvYyhkb3BhcihD TURRKSk7IC8qIE91dHB1dCB0aGUgYmFja3NsYXNoLiAqLworICAgICAgICAgICAgICAgICBpZiAo eHggPCAwKQorICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0ZXJyOworICAgICAgICAgICAgICAg ICBxdW90ZSA9IDA7ICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIHF1b3RlIGZsYWcgKi8KKyAgICAg ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBDTURRKSB7ICAgICAgICAgLyogVGhp cyBpcyB0aGUgcXVvdGUgY2hhcmFjdGVyICovCisgICAgICAgICAgICBxdW90ZSA9IDE7ICAgICAg ICAgICAgICAgICAgLyogR28gYmFjayBhbmQgZ2V0IG5leHQgY2hhcmFjdGVyICovCisgICAgICAg ICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgLyogd2hpY2ggaXMgcXVvdGVkICovCisg ICAgICAgIH0KKyAgICAgICAgeHggPSBvYm9jKGRvcGFyKChjaGFyKXgpKTsgICAgICAvKiBPdXRw dXQgdGhpcyBjaGFyYWN0ZXIgKi8KKyAgICAgICAgZGVidWcoRjExMSwiZG9vdXRwdXQiLG9idWYs b2JuKTsKKyAgICAgICAgaWYgKHh4IDwgMCkKKyAgICAgICAgICBnb3RvIG91dGVycjsKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgIGlmIChzZXNsb2cgJiYgZHVwbGV4KSB7ICAgICAgICAgLyogTG9n IHRoZSBjaGFyYWN0ZXIgaWYgbG9nIGlzIG9uICovCisgICAgICAgICAgICBsb2djaGFyKChjaGFy KXgpOworICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBpZiAoeCA9PSAn XDAxNScpIHsgICAgICAgICAgICAgIC8qIFN0cmluZyBjb250YWlucyBjYXJyaWFnZSByZXR1cm4g Ki8KKyAgICAgICAgICAgIGludCBzdHVmZiA9IC0xLCBzdHVmZjIgPSAtMTsKKyAgICAgICAgICAg IGlmICh0bmxtKSB7ICAgICAgICAgICAgICAgICAvKiBURVJNSU5BTCBORVdMSU5FIE9OICovCisg ICAgICAgICAgICAgICAgc3R1ZmYgPSBMRjsgICAgICAgICAgICAgLyogU3R1ZmYgTEYgKi8KKyAg ICAgICAgICAgIH0KKyNpZmRlZiBUTkNPREUKKyAgICAgICAgICAgIC8qIFRFTE5FVCBORVdMSU5F IE9OL09GRi9SQVcgKi8KKyAgICAgICAgICAgIGlmIChpc190bikgeworICAgICAgICAgICAgICAg IHN3aXRjaCAoVEVMT1BUX01FKFRFTE9QVF9CSU5BUlkpID8gLyogTlZUIG9yIEJJTkFSWSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgdG5fYl9ubG0gOgorICAgICAgICAgICAgICAgICAgICAg ICAgdG5fbmxtCisgICAgICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAg IGNhc2UgVE5MX0NSOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgIGNhc2UgVE5MX0NSTlVMOgorICAgICAgICAgICAgICAgICAgICBzdHVmZjIgPSBzdHVmZjsK KyAgICAgICAgICAgICAgICAgICAgc3R1ZmYgID0gTlVMOworICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVE5MX0NSTEY6CisgICAgICAgICAgICAgICAg ICAgIHN0dWZmMiA9IHN0dWZmOworICAgICAgICAgICAgICAgICAgICBzdHVmZiA9IExGOworICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisjZW5kaWYgLyogVE5DT0RFICovCisgICAgICAgICAgICBpZiAoc3R1ZmYgPiAtMSkgeyAgICAg ICAgICAgLyogU3R1ZmZpbmcgYW5vdGhlciBjaGFyYWN0ZXIuLi4gKi8KKyAgICAgICAgICAgICAg ICB4eCA9IG9ib2MoZG9wYXIoKENIQVIpc3R1ZmYpKTsKKyAgICAgICAgICAgICAgICBpZiAoeHgg PCAwKQorICAgICAgICAgICAgICAgICAgZ290byBvdXRlcnI7CisjaWZkZWYgQ09NTUVOVAorICAg ICAgICAgICAgICAgIGlmIChzZXNsb2cgJiYgZHVwbGV4KSB7IC8qIExvZyBzdHVmZmVkIGNoYXIg aWYgYXBwcm9wcmlhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgbG9nY2hhcigoY2hhcilzdHVm Zik7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChzdHVmZjIgPiAtMSkgeyAgICAgICAgICAvKiBTdHVmZmluZyBh bm90aGVyIGNoYXJhY3Rlci4uLiAqLworICAgICAgICAgICAgICAgIHh4ID0gb2JvYyhkb3Bhcigo Q0hBUilzdHVmZjIpKTsKKyAgICAgICAgICAgICAgICBpZiAoeHggPCAwKQorICAgICAgICAgICAg ICAgICAgZ290byBvdXRlcnI7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgIGlmIChz ZXNsb2cgJiYgZHVwbGV4KSB7IC8qIExvZyBzdHVmZmVkIGNoYXIgaWYgYXBwcm9wcmlhdGUgKi8K KyAgICAgICAgICAgICAgICAgICAgbG9nY2hhcigoY2hhcilzdHVmZjIpOworICAgICAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoeHhvdXQob2J1ZixvYm4pIDwgMCkgICAgLyogRmx1c2hpbmcgaXMgcmVxdWlyZWQgaGVyZSEg Ki8KKyAgICAgICAgICAgICAgZ290byBvdXRlcnI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg KGN4ID09IFhYTE5PVVQpIHsKKyAgICAgICAgcyA9ICJcMDE1IjsKKyAgICAgICAgY3ggPSAwOwor ICAgICAgICBnb3RvIG91dGFnYWluOworICAgIH0KKyAgICBpZiAocXVvdGUgPT0gMSkgICAgICAg ICAgICAgICAgICAgICAvKiBTdHJpbmcgZW5kZWQgd2l0aCBiYWNrc2xhc2ggKi8KKyAgICAgIHh4 ID0gb2JvYyhkb3BhcihDTURRKSk7CisKKyAgICBpZiAob2JuID4gMCkgICAgICAgICAgICAgICAg ICAgICAgICAvKiBPVVRQVVQgZG9uZSAqLworICAgICAgaWYgKHh4b3V0KG9idWYsb2JuKSA8IDAp ICAgICAgICAgIC8qIEZsdXNoIHRoZSBidWZmZXIgaWYgbmVjZXNzYXJ5LiAqLworICAgICAgICBn b3RvIG91dGVycjsKKyAgICByZXR1cm4oMSk7CisKK291dGVycjogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPVVRQVVQgY29tbWFuZCBlcnJvciBoYW5kbGVyICovCisgICAgaWYg KG1zZ2ZsZykgcHJpbnRmKCI/T1VUUFVUIGV4ZWN1dGlvbiBlcnJvclxuIik7CisgICAgcmV0dXJu KDApOworCisvKiBSZW1vdmUgImxvY2FsIiBPVVRQVVQgbWFjcm8gZGVmaW5pbml0aW9ucyAqLwor CisjaWZkZWYgQ09NTUVOVAorLyogTm8gbW9yZSBtYWNyb3MgLi4uICovCisjdW5kZWYgb2JvYwor I3VuZGVmIG9iZmxzCisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorI2VuZGlmIC8qIE5PU1BMICov CisKKy8qIERpc3BsYXkgdmVyc2lvbiBoZXJhbGQgYW5kIGluaXRpYWwgcHJvbXB0ICovCisKK1ZP SUQKK2hlcmFsZCgpIHsKKyAgICBpbnQgeCA9IDAsIGk7CisgICAgZXh0ZXJuIGludCBzcnZjZG1z ZzsKKyAgICBleHRlcm4gY2hhciAqIGNkbXNnZmlsZVtdOworICAgIGNoYXIgKiBzc2w7CisgICAg Y2hhciAqIGtyYjQ7CisgICAgY2hhciAqIGtyYjU7CisKKyNpZm5kZWYgTk9DTURMCisgICAgZXh0 ZXJuIGNoYXIgKiBiYW5uZXJmaWxlOworICAgIGRlYnVnKEYxMTAsImhlcmFsZCBiYW5uZXJmaWxl IixiYW5uZXJmaWxlLDApOworICAgIGlmIChiYW5uZXJmaWxlKSB7CisgICAgICAgIGNvbmNiKChj aGFyKWVzY2FwZSk7CisgICAgICAgIGlmIChkb3R5cGUoYmFubmVyZmlsZSwxLDAsMCxOVUxMLDAs TlVMTCwwLDAsTlVMTCwwKSA+IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImhlcmFsZCIs InNydmNkbXNnIixzcnZjZG1zZyk7CisgICAgICAgICAgICBpZiAoc3J2Y2Rtc2cpIHsKKyAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg IGRlYnVnKEYxMTEsImhlcmFsZCBjZG1zZ2ZpbGVbaV0iLGNkbXNnZmlsZVtpXSxpKTsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHpjaGtpKGNkbXNnZmlsZVtpXSkgPiAtMSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZG90 eXBlKGNkbXNnZmlsZVtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YXNrbW9y ZSwwLDAsTlVMTCwwLE5VTEwsMCwwLE5VTEwsMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBO T0NNREwgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBUaGUgZm9sbG93aW5nIGdlbmVyYXRl cyBiYWQgY29kZSBpbiBTQ08gY29tcGlsZXJzLiAqLworICAgIC8qIE9ic2VydmVkIGluIGJvdGgg T1NSNSBhbmQgVW5peHdhcmUgMiAtLSBhZnRlciBleGVjdXRpbmcgdGhpcyAqLworICAgIC8qIHN0 YXRlbWVudCB3aGVuIGFsbCBjb25kaXRpb25zIGFyZSBmYWxzZSwgeCBoYXMgYSB2YWx1ZSBvZiAt MzIuICovCisgICAgaWYgKG5vaGVyYWxkIHx8IHF1aWV0IHx8IGJnc2V0ID4gMCB8fCAoYmdzZXQg IT0gMCAmJiBiYWNrZ3JkICE9IDApKQorICAgICAgeCA9IDE7CisjZWxzZQorICAgIHggPSAwOwor ICAgIGlmIChub2hlcmFsZCB8fCBxdWlldCkKKyAgICAgIHggPSAxOworICAgIGVsc2UgaWYgKGJn c2V0ID4gMCkKKyAgICAgIHggPSAxOworICAgIGVsc2UgaWYgKGJnc2V0IDwgMCAmJiBiYWNrZ3Jk ID4gMCkKKyAgICAgIHggPSAxOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIHNzbCA9ICIi OworICAgIGtyYjQgPSAiIjsKKyAgICBrcmI1ID0gIiI7CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJ T04KKyNpZmRlZiBDS19TU0wgICAgCisgICAgc3NsID0gIitTU0wiOworI2VuZGlmCS8qIENLX1NT TCAqLworI2lmZGVmIEtSQjQKKyAgICBrcmI0ID0gIitLUkI0IjsKKyNlbmRpZgkvKiBLUkI0ICov CisjaWZkZWYgS1JCNQorICAgIGtyYjUgPSAiK0tSQjUiOworI2VuZGlmCS8qIEtSQjUgKi8KKyNl bmRpZgkvKiBDS19BVVRIRU5USUNBVElPTiAqLworCisgICAgaWYgKHggPT0gMCkgeworI2lmZGVm IGRhdGFnZW5lcmFsCisgICAgICAgIHByaW50ZigiJXMsIGZvciVzXG4iLHZlcnNpbyxja3hzeXMp OworI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICAgICAgcHJpbnRmKCIlcywgZm9yJXNcbiIsdmVyc2lv LGNreHN5cyk7CisjZWxzZQorI2lmZGVmIENLXzY0QklUCisgICAgICAgIHByaW50ZigiJXMsIGZv ciVzJXMlcyVzICg2NC1iaXQpXG5cciIsdmVyc2lvLGNreHN5cyxzc2wsa3JiNCxrcmI1KTsKKyNl bHNlCisgICAgICAgIHByaW50ZigiJXMsIGZvciVzJXMlcyVzXG5cciIsdmVyc2lvLGNreHN5cyxz c2wsa3JiNCxrcmI1KTsKKyNlbmRpZi8qIENLXzY0QklUICovCisjZW5kaWYgLyogT1NLICovCisj ZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICAgICAgcHJpbnRmKCIgQ29weXJpZ2h0IChDKSAx OTg1LCAlcyxcbiIsIGNrX2NyeWVhcik7CisgICAgICAgIHByaW50ZigiICBUcnVzdGVlcyBvZiBD b2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLlxuIik7CisjaWZkZWYg T1MyCisgICAgICAgc2hvcmVnKCk7CisjZW5kaWYgLyogT1MyICovCisKKyAgICAgICAgaWYgKCFx dWlldCAmJiAhYmFja2dyZCkgeworI2lmZGVmIENPTU1FTlQKKy8qICJEZWZhdWx0IGZpbGUtdHJh bnNmZXIgbW9kZSBpcyBBVVRPTUFUSUMiIGlzIHVzZWxlc3MgaW5mb3JtYXRpb24uLi4gKi8KKyAg ICAgICAgICAgIGNoYXIgKiBzOworICAgICAgICAgICAgZXh0ZXJuIGludCB4ZmVybW9kZTsKKyNp ZmRlZiBWTVMKKyAgICAgICAgICAgIHMgPSAiQVVUT01BVElDIjsKKyNlbHNlCisgICAgICAgICAg ICBpZiAoeGZlcm1vZGUgPT0gWE1PREVfQSkgeworICAgICAgICAgICAgICAgIHMgPSAiQVVUT01B VElDIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcyA9IGdmbW9kZShi aW5hcnksMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyNl bmRpZiAvKiBWTVMgKi8KKyAgICAgICAgICAgIGlmICgqcykKKyAgICAgICAgICAgICAgcHJpbnRm KCJEZWZhdWx0IGZpbGUtdHJhbnNmZXIgbW9kZSBpcyAlc1xuIiwgcyk7CisjZW5kaWYgLyogQ09N TUVOVCAqLworCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJoZXJhbGQiLCJzcnZjZG1zZyIsc3J2 Y2Rtc2cpOworICAgICAgICAgICAgaWYgKHNydmNkbXNnKSB7CisgICAgICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJo ZXJhbGQgY2Rtc2dmaWxlW2ldIixjZG1zZ2ZpbGVbaV0saSk7CisgICAgICAgICAgICAgICAgICAg IGlmICh6Y2hraShjZG1zZ2ZpbGVbaV0pID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdHlwZShjZG1zZ2ZpbGVb aV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGFza21vcmUsMCwwLE5VTEwsMCxO VUxMLDAsMCxOVUxMLDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBwcmludGYoIlR5cGUgPyBvciBIRUxQIGZvciBoZWxwLlxuIik7CisgICAgICAgIH0KKyAg ICB9Cit9CisKKy8qICBHIEYgTSBPIEQgRSAgLS0gIEdldCBGaWxlICh0cmFuc2ZlcikgTW9kZSAg Ki8KKworY2hhciAqCitnZm1vZGUoYmluYXJ5LHVwY2FzZSkgaW50IGJpbmFyeSwgdXBjYXNlOyB7 CisgICAgY2hhciAqIHM7CisgICAgc3dpdGNoIChiaW5hcnkpIHsKKyAgICAgIGNhc2UgWFlGVF9U OiBzID0gdXBjYXNlID8gIlRFWFQiIDogInRleHQiOyBicmVhazsKKyNpZmRlZiBWTVMKKyAgICAg IGNhc2UgWFlGVF9COiBzID0gdXBjYXNlID8gIkJJTkFSWSBGSVhFRCIgOiAiYmluYXJ5IGZpeGVk IjsgYnJlYWs7CisgICAgICBjYXNlIFhZRlRfSTogcyA9IHVwY2FzZSA/ICJJTUFHRSIgOiAiaW1h Z2UiOyBicmVhazsKKyAgICAgIGNhc2UgWFlGVF9MOiBzID0gdXBjYXNlID8gIkxBQkVMRUQiIDog ImxhYmVsZWQiOyBicmVhazsKKyAgICAgIGNhc2UgWFlGVF9VOiBzID0gdXBjYXNlID8gIkJJTkFS WSBVTkRFRiIgOiAiYmluYXJ5IHVuZGVmIjsgYnJlYWs7CisjZWxzZQorI2lmZGVmIE1BQworICAg ICAgY2FzZSBYWUZUX0I6IHMgPSB1cGNhc2UgPyAiQklOQVJZIiA6ICJiaW5hcnkiOyBicmVhazsK KyAgICAgIGNhc2UgWFlGVF9NOiBzID0gdXBjYXNlID8gIk1BQ0JJTkFSWSIgOiAibWFjYmluYXJ5 IjsgYnJlYWs7CisjZWxzZQorICAgICAgY2FzZSBYWUZUX0I6IHMgPSB1cGNhc2UgPyAiQklOQVJZ IiA6ICJiaW5hcnkiOyBicmVhazsKKyNpZmRlZiBDS19MQUJFTEVECisgICAgICBjYXNlIFhZRlRf TDogcyA9IHVwY2FzZSA/ICJMQUJFTEVEIiA6ICJsYWJlbGVkIjsgYnJlYWs7CisjZW5kaWYgLyog Q0tfTEFCRUxFRCAqLworI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIFZNUyAqLworICAgICAg Y2FzZSBYWUZUX1g6IHMgPSB1cGNhc2UgPyAiVEVORVgiIDogInRlbmV4IjsgYnJlYWs7CisgICAg ICBkZWZhdWx0OiBzID0gIiI7CisgICAgfQorICAgIHJldHVybihzKTsKK30KKworI2lmbmRlZiBO T1NQTAorc3RhdGljIGludAoraXNhYShzKSBjaGFyICogczsgeyAgICAgICAgICAgICAgICAgICAg IC8qIElzIGFzc29jaWF0aXZlIGFycmF5ICovCisgICAgY2hhciBjOworICAgIGludCB4OworICAg IGlmICghcykgcyA9ICIiOworICAgIGlmICghKnMpIHJldHVybigwKTsKKyAgICBzKys7CisgICAg d2hpbGUgKChjID0gKnMrKykpIHsKKyAgICAgICAgaWYgKGMgPT0gJzwnKSB7CisgICAgICAgICAg ICB4ID0gc3RybGVuKHMpOworICAgICAgICAgICAgcmV0dXJuICgoKihzK3gtMSkgPT0gJz4nKSA/ IDEgOiAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBNIEwg TyBPIEsgIC0tICBMb29rdXAgdGhlIG1hY3JvIG5hbWUgaW4gdGhlIG1hY3JvIHRhYmxlICAqLwor CisvKgorICBDYWxsIHRoaXMgd2F5OiAgdiA9IG1sb29rKHRhYmxlLHdvcmQsbik7CisKKyAgICB0 YWJsZSAtIGEgJ3N0cnVjdCBtdGFiJyB0YWJsZS4KKyAgICB3b3JkICAtIHRoZSB0YXJnZXQgc3Ry aW5nIHRvIGxvb2sgdXAgaW4gdGhlIHRhYmxlLgorICAgIG4gICAgIC0gdGhlIG51bWJlciBvZiBl bGVtZW50cyBpbiB0aGUgdGFibGUuCisKKyAgVGhlIGtleXdvcmQgdGFibGUgbXVzdCBiZSBhcnJh bmdlZCBpbiBhc2NlbmRpbmcgYWxwaGFiZXRpY2FsIG9yZGVyLCBhbmQKKyAgYWxsIGxldHRlcnMg bXVzdCBiZSBsb3dlcmNhc2UuCisKKyAgUmV0dXJucyB0aGUgdGFibGUgaW5kZXgsIDAgb3IgZ3Jl YXRlciwgaWYgdGhlIG5hbWUgd2FzIGZvdW5kLCBvcjoKKworICAgLTMgaWYgbm90aGluZyB0byBs b29rIHVwICh0YXJnZXQgd2FzIG51bGwpLAorICAgLTIgaWYgYW1iaWd1b3VzLAorICAgLTEgaWYg bm90IGZvdW5kLgorCisgIEEgbWF0Y2ggaXMgc3VjY2Vzc2Z1bCBpZiB0aGUgdGFyZ2V0IG1hdGNo ZXMgYSBrZXl3b3JkIGV4YWN0bHksIG9yIGlmCisgIHRoZSB0YXJnZXQgaXMgYSBwcmVmaXggb2Yg ZXhhY3RseSBvbmUga2V5d29yZC4gIEl0IGlzIGFtYmlndW91cyBpZiB0aGUKKyAgdGFyZ2V0IG1h dGNoZXMgdHdvIG9yIG1vcmUga2V5d29yZHMgZnJvbSB0aGUgdGFibGUuCisqLworaW50CittbG9v ayh0YWJsZSxjbWQsbikgc3RydWN0IG10YWIgdGFibGVbXTsgY2hhciAqY21kOyBpbnQgbjsgewor ICAgIHJlZ2lzdGVyIGludCBpOworICAgIGludCB2LCB3LCBjbWRsZW4gPSAwOworICAgIGNoYXIg YyA9IDAsIGMxLCAqIHM7CisgICAgaWYgKCFjbWQpIGNtZCA9ICIiOworCisgICAgZm9yIChzID0g Y21kOyAqczsgcysrKSBjbWRsZW4rKzsgICAgLyogKGluc3RlYWQgb2Ygc3RybGVuKSAqLworICAg IGRlYnVnKEYxMTEsIk1MT09LIixjbWQsY21kbGVuKTsKKworICAgIGMxID0gKmNtZDsKKyAgICBp ZiAoaXN1cHBlcihjMSkpCisgICAgICBjMSA9IHRvbG93ZXIoYzEpOworICAgIGlmIChjbWRsZW4g PCAxKQorICAgICAgcmV0dXJuKC0zKTsKKworLyogTm90IG51bGwsIGxvb2sgaXQgdXAgKi8KKwor ICAgIGlmIChuIDwgMTIpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCB3b3J0aCBpdCBm b3Igc21hbGwgdGFibGVzICovCisgICAgICAgIGkgPSAwOworICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEJpbmFyeSBzZWFyY2ggZm9yIHdoZXJlIHRvIHN0YXJ0ICov CisgICAgICAgIGludCBsbyA9IDA7CisgICAgICAgIGludCBoaSA9IG47CisgICAgICAgIGludCBj b3VudCA9IDA7CisgICAgICAgIHdoaWxlIChsbysyIDwgaGkgJiYgKytjb3VudCA8IDEyKSB7Cisg ICAgICAgICAgICBpID0gbG8gKyAoKGhpIC0gbG8pIC8gMik7CisgICAgICAgICAgICBjID0gKih0 YWJsZVtpXS5rd2QpOworICAgICAgICAgICAgaWYgKGlzdXBwZXIoYykpIGMgPSB0b2xvd2VyKGMp OworICAgICAgICAgICAgaWYgKGMgPCBjMSkgeworICAgICAgICAgICAgICAgIGxvID0gaTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGkgPSBpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIGkgPSAoYyA8IGMxKSA/IGxvKzEgOiBsbzsKKyAgICB9Cisg ICAgZm9yICggOyBpIDwgbi0xOyBpKyspIHsKKyAgICAgICAgcyA9IHRhYmxlW2ldLmt3ZDsKKyAg ICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgIGlmICghKnMpIGNvbnRpbnVlOyAgICAgICAg ICAgICAgLyogRW1wdHkgdGFibGUgZW50cnkgKi8KKyAgICAgICAgYyA9ICpzOworICAgICAgICBp ZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7CisgICAgICAgIGlmIChjMSAhPSBjKSBjb250 aW51ZTsgICAgICAgICAgLyogRmlyc3QgY2hhciBkb2Vzbid0IG1hdGNoICovCisgICAgICAgIGlm ICghY2tzdHJjbXAocyxjbWQsLTEsMCkpICAgICAgLyogSGF2ZSBleGFjdCBtYXRjaD8gKi8KKyAg ICAgICAgICByZXR1cm4oaSk7CisgICAgICAgIHYgPSAhY2tzdHJjbXAocyxjbWQsY21kbGVuLDAp OworICAgICAgICB3ID0gY2tzdHJjbXAodGFibGVbaSsxXS5rd2QsY21kLGNtZGxlbiwwKTsKKyAg ICAgICAgaWYgKHYgJiYgdykgICAgICAgICAgICAgICAgICAgICAvKiBIYXZlIGFiYnJldmlhdGVk IG1hdGNoPyAqLworICAgICAgICAgIHJldHVybihpKTsKKyAgICAgICAgaWYgKHYpICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBBbWJpZ3VvdXM/ICovCisgICAgICAgICAgcmV0dXJuKC0yKTsK KyAgICAgICAgaWYgKHcgPiAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBQYXN0IG91ciBhbHBo YWJldGljIGFyZWE/ICovCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisKKy8qIExhc3Qg KG9yIG9ubHkpIGVsZW1lbnQgKi8KKworICAgIGlmICghY2tzdHJjbXAodGFibGVbbi0xXS5rd2Qs Y21kLGNtZGxlbiwwKSkKKyAgICAgIHJldHVybihuLTEpOworCisgICAgcmV0dXJuKC0xKTsKK30K KworLyogbXhsb29rIGlzIGxpa2UgbWxvb2ssIGJ1dCBhbiBleGFjdCBmdWxsLWxlbmd0aCBtYXRj aCBpcyByZXF1aXJlZCAqLworCitpbnQKK214bG9vayh0YWJsZSxjbWQsbikgY2hhciAqY21kOyBz dHJ1Y3QgbXRhYiB0YWJsZVtdOyBpbnQgbjsgeworICAgIHJlZ2lzdGVyIGludCBpOworICAgIGlu dCB3LCBjbWRsZW4gPSAwLCBvbmUgPSAwOworICAgIHJlZ2lzdGVyIGNoYXIgYyA9IDAsIGMxLCAq IHM7CisKKyAgICBpZiAoIWNtZCkgY21kID0gIiI7ICAgICAgICAgICAgICAgICAvKiBDaGVjayBh cmdzICovCisKKyAgICBmb3IgKHMgPSBjbWQ7ICpzOyBzKyspIGNtZGxlbisrOyAgICAvKiAoaW5z dGVhZCBvZiBzdHJsZW4pICovCisgICAgZGVidWcoRjExMSwiTVhMT09LIixjbWQsY21kbGVuKTsK KworICAgIGMxID0gKmNtZDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IGNoYXIg b2Ygc3RyaW5nIHRvIGxvb2sgdXAgKi8KKyAgICBpZiAoaXN1cHBlcihjMSkpCisgICAgICBjMSA9 IHRvbG93ZXIoYzEpOworICAgIGlmICghKihjbWQrMSkpICAgICAgICAgICAgICAgICAgICAgIC8q IFNwZWNpYWwgaGFuZGxpbmcgZm9yIDEtY2hhciBuYW1lcyAqLworICAgICAgb25lID0gMTsKKwor ICAgIGlmIChjbWRsZW4gPCAxKSAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gbG9v ayB1cCAqLworICAgICAgcmV0dXJuKC0zKTsKKworICAgIGlmIChuIDwgMTIpIHsgICAgICAgICAg ICAgICAgICAgICAgIC8qIE5vdCB3b3J0aCBpdCBmb3Igc21hbGwgdGFibGVzICovCisgICAgICAg IGkgPSAwOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJpbmFy eSBzZWFyY2ggZm9yIHdoZXJlIHRvIHN0YXJ0ICovCisgICAgICAgIGludCBsbyA9IDA7CisgICAg ICAgIGludCBoaSA9IG47CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChs bysyIDwgaGkgJiYgKytjb3VudCA8IDEyKSB7CisgICAgICAgICAgICBpID0gbG8gKyAoKGhpIC0g bG8pIC8gMik7CisgICAgICAgICAgICBjID0gKih0YWJsZVtpXS5rd2QpOworICAgICAgICAgICAg aWYgKGlzdXBwZXIoYykpIGMgPSB0b2xvd2VyKGMpOworICAgICAgICAgICAgaWYgKGMgPCBjMSkg eworICAgICAgICAgICAgICAgIGxvID0gaTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgaGkgPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGkgPSAo YyA8IGMxKSA/IGxvKzEgOiBsbzsKKyAgICB9CisgICAgZm9yICggOyBpIDwgbjsgaSsrKSB7ICAg ICAgICAgICAgICAgLyogTG9vayB0aHJ1IHRhYmxlICovCisgICAgICAgIHMgPSB0YWJsZVtpXS5r d2Q7ICAgICAgICAgICAgICAgLyogVGhpcyBlbnRyeSAqLworICAgICAgICBpZiAoIXMpIHMgPSAi IjsKKyAgICAgICAgaWYgKCEqcykgY29udGludWU7ICAgICAgICAgICAgICAvKiBFbXB0eSB0YWJs ZSBlbnRyeSAqLworICAgICAgICBjID0gKnM7CisgICAgICAgIGlmIChpc3VwcGVyKGMpKSBjID0g dG9sb3dlcihjKTsKKyAgICAgICAgaWYgKGMxICE9IGMpIGNvbnRpbnVlOyAgICAgICAgICAvKiBG aXJzdCBjaGFyIGRvZXNuJ3QgbWF0Y2ggKi8KKyAgICAgICAgaWYgKG9uZSkgeyAgICAgICAgICAg ICAgICAgICAgICAvKiBOYW1lIGlzIG9uZSBjaGFyIGxvbmcgKi8KKyAgICAgICAgICAgIGlmICgh KihzKzEpKQorICAgICAgICAgICAgICByZXR1cm4oaSk7ICAgICAgICAgICAgICAgIC8qIFNvIGlz IHRhYmxlIGVudHJ5ICovCisgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmICgo KGludClzdHJsZW4ocykgPT0gY21kbGVuKSAmJgorICAgICAgICAgICAgKCFja3N0cmNtcChzLGNt ZCxjbWRsZW4sMCkpKSByZXR1cm4oaSk7CisjZWxzZQorICAgICAgICB3ID0gY2tzdHJjbXAocyxj bWQsLTEsMCk7CisgICAgICAgIGlmICghdykgcmV0dXJuKGkpOworICAgICAgICBpZiAodyA+IDAp IHJldHVybigtMSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICByZXR1cm4oLTEp OworfQorCisvKiBteHhsb29rIGlzIGxpa2UgbXhsb29rLCBidXQgY2FzZS1zZW5zaXRpdmUgKi8K KworaW50CitteHhsb29rKHRhYmxlLGNtZCxuKSBjaGFyICpjbWQ7IHN0cnVjdCBtdGFiIHRhYmxl W107IGludCBuOyB7CisgICAgaW50IGksIGNtZGxlbjsKKyAgICBpZiAoIWNtZCkgY21kID0gIiI7 CisgICAgaWYgKCgoY21kbGVuID0gc3RybGVuKGNtZCkpIDwgMSkgfHwgKG4gPCAxKSkgcmV0dXJu KC0zKTsKKyAgICAvKiBkZWJ1ZyhGMTExLCJteHhsb29rIHRhcmdldCIsY21kLG4pOyAqLworICAg IGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgaWYgKCgoaW50KXN0cmxlbih0YWJs ZVtpXS5rd2QpID09IGNtZGxlbikgJiYKKyAgICAgICAgICAgICghc3RybmNtcCh0YWJsZVtpXS5r d2QsY21kLGNtZGxlbikpKQorICAgICAgICAgIHJldHVybihpKTsKKyAgICB9CisgICAgcmV0dXJu KC0xKTsKK30KKworc3RhdGljIGludAordHJhY2V2YWwobmFtLCB2YWwpIGNoYXIgKiBuYW0sICog dmFsOyB7IC8qIEZvciBUUkFDRSBjb21tYW5kICovCisgICAgaWYgKHZhbCkKKyAgICAgIHByaW50 ZigiPj4+ICVzOiBcIiVzXCJcbiIsIG5hbSwgdmFsKTsKKyAgICBlbHNlCisgICAgICBwcmludGYo Ij4+PiAlczogKHVuZGVmKVxuIiwgbmFtKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBV U0VfVkFSTEVOICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgdXNlZCAqLworCisvKiAgViBB IFIgTCBFIE4gIC0tICBHZXQgbGVuZ3RoIG9mIHZhcmlhYmxlJ3MgdmFsdWUuCisKKyAgR2l2ZW4g YSB2YXJpYWJsZSBuYW1lLCByZXR1cm4gdGhlIGxlbmd0aCBvZiBpdHMgZGVmaW5pdGlvbiBvciAw IGlmIHRoZQorICB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZC4gIElmIGl0IGlzIGRlZmluZWQsIHNl dCBhcmd1bWVudCBzIHRvIHBvaW50IHRvIGl0cworICBkZWZpbml0aW9uLiAgT3RoZXJ3aXNlIHNl dCBzIHRvIE5VTEwuCisqLworaW50Cit2YXJsZW4obmFtLHMpIGNoYXIgKm5hbTsgY2hhciAqKnM7 IHsgICAgLyogTGVuZ3RoIG9mIHZhbHVlIG9mIHZhcmlhYmxlICovCisgICAgaW50IHgsIHo7Cisg ICAgY2hhciAqcCA9IE5VTEwsIGM7CisKKyAgICAqcyA9IE5VTEw7CisgICAgaWYgKCFuYW0pIHJl dHVybigwKTsgICAgICAgICAgICAgICAgLyogV2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXIgKi8K KyAgICBpZiAoKm5hbSA9PSBDTURRKSB7CisgICAgICAgIG5hbSsrOworICAgICAgICBpZiAoKm5h bSA9PSAnJScpIHsgICAgICAgICAgICAgIC8qIElmIGl0J3MgYSB2YXJpYWJsZSBuYW1lICovCisg ICAgICAgICAgICBpZiAoIShjID0gKihuYW0rMSkpKSByZXR1cm4oMCk7IC8qIEdldCBsZXR0ZXIg b3IgZGlnaXQgKi8KKyAgICAgICAgICAgIHAgPSAoY2hhciAqKTA7ICAgICAgICAgICAgICAvKiBJ bml0aWFsaXplIHZhbHVlIHBvaW50ZXIgKi8KKyAgICAgICAgICAgIGlmIChtYWNsdmwgPiAtMSAm JiBjID49ICcwJyAmJiBjIDw9ICc5JykgeyAvKiBEaWdpdD8gKi8KKyAgICAgICAgICAgICAgICBw ID0gbV9hcmdbbWFjbHZsXVtjIC0gJzAnXTsgLyogUG9pbnRlciBmcm9tIG1hY3JvLWFyZyB0YWJs ZSAqLworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBn bG9iYWwgdmFyaWFibGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoYyA8IDMzIHx8IGMgPiBHVkFS UykgcmV0dXJuKDApOworICAgICAgICAgICAgICAgIHAgPSBnX3ZhcltjXTsgICAgICAgICAgIC8q IEdldCBwb2ludGVyIGZyb20gZ2xvYmFsLXZhciB0YWJsZSAqLworICAgICAgICAgICAgfQorICAg ICAgICB9IGVsc2UgaWYgKCpuYW0gPT0gJyYnKSB7ICAgICAgICAgICAgICAgLyogQW4gYXJyYXkg cmVmZXJlbmNlPyAqLworICAgICAgICAgICAgY2hhciAqKnE7CisgICAgICAgICAgICBpZiAoYXJy YXluYW0obmFtLCZ4LCZ6KSA8IDApIC8qIElmIHN5bnRheCBpcyBiYWQgKi8KKyAgICAgICAgICAg ICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAvKiByZXR1cm4gLTEuICovCisgICAgICAgICAg ICB4IC09IEFSUkFZQkFTRTsgICAgICAgICAgICAgLyogQ29udmVydCBuYW1lIHRvIG51bWJlci4g Ki8KKyAgICAgICAgICAgIGlmICgocSA9IGFfcHRyW3hdKSA9PSBOVUxMKSAvKiBJZiBhcnJheSBu b3QgZGVjbGFyZWQsICovCisgICAgICAgICAgICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAg LyogcmV0dXJuIC0yLiAqLworICAgICAgICAgICAgaWYgKHogPiBhX2RpbVt4XSkgICAgICAgICAg IC8qIElmIHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UsICovCisgICAgICAgICAgICAgIHJldHVybigw KTsgICAgICAgICAgICAgICAgLyogcmV0dXJuIC0zLiAqLworICAgICAgICAgICAgcCA9IHFbel07 CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBN YWNybyAqLworICAgICAgICB6ID0gaXNhYShuYW0pOworICAgICAgICB4ID0geiA/IG14eGxvb2so bWFjdGFiLG5hbSxubWFjKSA6IG1sb29rKG1hY3RhYixuYW0sbm1hYyk7CisgICAgICAgIGlmICh4 IDwgMCkKKyAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIHAgPSBtYWN0YWJbeF0ubXZhbDsK KyAgICB9CisgICAgaWYgKHApCisgICAgICAqcyA9IHA7CisgICAgZWxzZQorICAgICAgcCA9ICIi OworICAgIHJldHVybigoaW50KXN0cmxlbihwKSk7Cit9CisjZW5kaWYgLyogVVNFX1ZBUkxFTiAq LworCisvKgorICBUaGlzIHJvdXRpbmUgaXMgZm9yIHRoZSBiZW5lZml0IG9mIHRob3NlIGNvbXBp bGVycyB0aGF0IGNhbid0IGhhbmRsZQorICBsb25nIHN0cmluZyBjb25zdGFudHMgb3IgY29udGlu dWVkIGxpbmVzIHdpdGhpbiB0aGVtLiAgTG9uZyBwcmVkZWZpbmVkCisgIG1hY3JvcyBsaWtlIEZP UiwgV0hJTEUsIGFuZCBYSUYgaGF2ZSB0aGVpciBjb250ZW50cyBicm9rZW4gdXAgaW50bworICBh cnJheXMgb2Ygc3RyaW5nIHBvaW50ZXJzLiAgVGhpcyByb3V0aW5lIGNvbmNhdGVuYXRlcyB0aGVt IGJhY2sgaW50byBhCisgIHNpbmdsZSBzdHJpbmcgYWdhaW4sIGFuZCB0aGVuIGNhbGxzIHRoZSBy ZWFsIGFkZG1hYygpIHJvdXRpbmUgdG8gZW50ZXIKKyAgdGhlIGRlZmluaXRpb24gaW50byB0aGUg bWFjcm8gdGFibGUuCisqLworaW50CithZGRtbWFjKG5hbSxzKSBjaGFyICpuYW0sICpzW107IHsg ICAgICAgLyogQWRkIGEgbXVsdGlsaW5lIG1hY3JvIGRlZmluaXRpb24gKi8KKyAgICBpbnQgaSwg eCwgeTsgY2hhciAqcDsKKyAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBMZW5ndGggY291bnRlciAqLworICAgIGZvciAoaSA9IDA7ICh5ID0gKGludClzdHJsZW4oc1tp XSkpID4gMDsgaSsrKSB7IC8qIEFkZCB1cCB0b3RhbCBsZW5ndGggKi8KKyAgICAgICAgZGVidWco RjExMSwiYWRkbW1hYyBsaW5lIixzW2ldLHkpOworICAgICAgICB4ICs9IHk7CisgICAgfQorICAg IGRlYnVnKEYxMDEsImFkZG1tYWMgbGluZXMiLCIiLGkpOworICAgIGRlYnVnKEYxMDEsImFkZG1t YWMgbG9vcCBleGl0IiwiIix5KTsKKyAgICBkZWJ1ZyhGMTExLCJhZGRtbWFjIGxlbmd0aCIsbmFt LHgpOworICAgIGlmICh4IDwgMCkgcmV0dXJuKC0xKTsKKworICAgIHAgPSBtYWxsb2MoeCsxKTsg ICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBhbGwgb2YgaXQuICovCisg ICAgaWYgKCFwKSB7CisgICAgICAgIHByaW50ZigiP2FkZG1tYWMgbWFsbG9jIGVycm9yOiAlc1xu IixuYW0pOworICAgICAgICBkZWJ1ZyhGMTEwLCJhZGRtbWFjIG1hbGxvYyBlcnJvciIsbmFtLDAp OworICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAqcCA9ICdcMCc7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTdGFydCBvZmYgd2l0aCBudWxsIHN0cmluZy4gKi8KKyAgICBmb3Ig KGkgPSAwOyAqc1tpXTsgaSsrKSAgICAgICAgICAgICAvKiBDb25jYXRlbmF0ZSB0aGVtIGFsbCB0 b2dldGhlci4gKi8KKyAgICAgIGNrc3RybmNhdChwLHNbaV0seCsxKTsKKyAgICB5ID0gKGludClz dHJsZW4ocCk7ICAgICAgICAgICAgICAgICAvKiBGaW5hbCBwcmVjYXV0aW9uLiAqLworICAgIGRl YnVnKEYxMTEsImFkZG1tYWMgY29uc3RydWN0ZWQgc3RyaW5nIixwLHkpOworICAgIGlmICh5ID09 IHgpIHsKKyAgICAgICAgeSA9IGFkZG1hYyhuYW0scCk7ICAgICAgICAgICAgICAvKiBBZGQgcmVz dWx0IHRvIHRoZSBtYWNybyB0YWJsZS4gKi8KKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZyhG MTAwLCJhZGRtbWFjIGxlbmd0aCBtaXNtYXRjaCIsIiIsMCk7CisgICAgICAgIHByaW50ZigiXG4h YWRkbW1hYyBpbnRlcm5hbCBlcnJvciFcbiIpOworICAgICAgICB5ID0gLTE7CisgICAgfQorICAg IGZyZWUocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIHRlbXBvcmFy eSBjb3B5LiAqLworICAgIHJldHVybih5KTsKK30KKworLyogSGVyZSBpcyB0aGUgcmVhbCBhZGRt YWMgcm91dGluZS4gKi8KKworLyogUmV0dXJucyAtMSBvbiBmYWlsdXJlLCBtYWNybyB0YWJsZSBp bmRleCA+PSAwIG9uIHN1Y2Nlc3MuICovCisKK2ludCBtdGNoYW5nZWQgPSAwOworCitpbnQKK2Fk ZG1hYyhuYW0sZGVmKSBjaGFyICpuYW0sICpkZWY7IHsgICAgICAvKiBBZGQgYSBtYWNybyB0byB0 aGUgbWFjcm8gdGFibGUgKi8KKyAgICBpbnQgaSwgeCwgeSwgeiwgbmFtbGVuLCBkZWZsZW4sIGZs YWcgPSAwOworICAgIGludCByZXBsYWNpbmcgPSAwLCBkZWxldGluZyA9IDA7CisgICAgY2hhciAq IHAgPSBOVUxMLCBjLCAqczsKKyAgICBleHRlcm4gaW50IHRyYV9hc2c7IGludCB0cmFfdG1wOwor CisgICAgaWYgKCFuYW0pIHJldHVybigtMSk7CisgICAgaWYgKCEqbmFtKSByZXR1cm4oLTEpOwor CisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJgorI2lmZGVmIElLU0RDT05GCisgICAg ICAgIGlrc2RjZgorI2Vsc2UgLyogSUtTRENPTkYgKi8KKyAgICAgICAgMQorI2VuZGlmIC8qIElL U0RDT05GICovCisgICAgICAgICkgeworICAgICAgICBpZiAoIWNrc3RyY21wKCJvbl9leGl0Iixu YW0sLTEsMCkgfHwKKyAgICAgICAgICAgICFja3N0cmNtcCgib25fbG9nb3V0IixuYW0sLTEsMCkp CisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAg bmFtbGVuID0gMDsKKyAgICBwID0gbmFtOworICAgIHdoaWxlICgqcCsrKSBuYW1sZW4rKzsgICAg ICAgICAgICAgIC8qIChpbnN0ZWFkIG9mIHN0cmxlbikgKi8KKworICAgIHRyYV90bXAgPSB0cmFf YXNnOyAgICAgICAgICAgICAgICAgIC8qIHRyYWNlLi4uICovCisgICAgZGVidWcoRjExMSwiYWRk bWFjIG5hbSIsbmFtLG5hbWxlbik7CisgICAgaWYgKCFkZWYpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogV2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXIgKi8KKyAgICAgICAgZGVmbGVuID0g MDsKKyAgICAgICAgZGVidWcoRjExMSwiYWRkbWFjIGRlZiIsIihudWxsIHBvaW50ZXIpIixkZWZs ZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlZmxlbiA9IDA7CisgICAgICAgIHAgPSBkZWY7 CisgICAgICAgIHdoaWxlICgqcCsrKSBkZWZsZW4rKzsgICAgICAgICAgLyogKGluc3RlYWQgb2Yg c3RybGVuKSAqLworICAgICAgICBkZWJ1ZyhGMDEwLCJhZGRtYWMgZGVmIixkZWYsMCk7CisgICAg fQorI2lmZGVmIFVTRV9WQVJMRU4gICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVCBVU0VEICov CisgICAgLyogVGhpcyBkb2VzIG5vdCBib29zdCBwZXJmb3JtYW5jZSBtdWNoIGJlY2F1c2UgdmFy bGVuKCkgZG9lcyBhIGxvdCAqLworICAgIHggPSB2YXJsZW4obmFtLCZzKTsKKyAgICBpZiAoeCA+ IDAgJiYgeCA+PSBkZWZsZW4pIHsKKyAgICAgICAgc3RyY3B5KHMsZGVmKTsgICAgICAgICAgICAg ICAgICAvKiBOT1QgVVNFRCAqLworICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgcCA9IHM7Cisg ICAgfQorI2VuZGlmIC8qIFVTRV9WQVJMRU4gKi8KKworICAgIGlmICgqbmFtID09IENNRFEpIG5h bSsrOyAgICAgICAgICAgIC8qIEJhY2tzbGFzaCBxdW90ZT8gKi8KKyAgICBpZiAoKm5hbSA9PSAn JScpIHsgICAgICAgICAgICAgICAgICAvKiBZZXMsIGlmIGl0J3MgYSB2YXJpYWJsZSBuYW1lLCAq LworICAgICAgICBpZiAoIShjID0gKihuYW0gKyAxKSkpIHJldHVybigtMSk7IC8qIFZhcmlhYmxl IG5hbWUgbGV0dGVyIG9yIGRpZ2l0ICovCisgICAgICAgIGlmICghZmxhZykgeworICAgICAgICAg ICAgdHJhX2FzZyA9IDA7CisgICAgICAgICAgICBkZWxtYWMobmFtLDApOyAgICAgICAgICAgICAg LyogRGVsZXRlIGFueSBvbGQgdmFsdWUuICovCisgICAgICAgICAgICB0cmFfYXNnID0gdHJhX3Rt cDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVmbGVuIDwgMSkgeyAgICAgICAgICAgICAgIC8q IE51bGwgZGVmaW5pdGlvbiAqLworICAgICAgICAgICAgcCA9IE5VTEw7ICAgICAgICAgICAgICAg ICAgIC8qIEJldHRlciBub3QgbWFsbG9jIG9yIHN0cmNweSEgKi8KKyAgICAgICAgfSBlbHNlIGlm ICghZmxhZykgeyAgICAgICAgICAgICAvKiBBIHN1YnN0YW50aWFsIGRlZmluaXRpb24gKi8KKyAg ICAgICAgICAgIHAgPSBtYWxsb2MoZGVmbGVuICsgMSk7ICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBm b3IgaXQgKi8KKyAgICAgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgICAgIHByaW50Zigi P2FkZG1hYyBtYWxsb2MgZXJyb3IgMlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsK KyAgICAgICAgICAgIH0gZWxzZSBzdHJjcHkocCxkZWYpOyAgICAgICAvKiBDb3B5IGRlZiBpbnRv IG5ldyBzcGFjZSAoU0FGRSkgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qIE5vdyBwIHBvaW50 cyB0byB0aGUgZGVmaW5pdGlvbiwgb3IgaXMgYSBudWxsIHBvaW50ZXIgKi8KKworICAgICAgICBp ZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsgICAgIC8qIFwlMC05IHZhcmlhYmxlICovCisgICAg ICAgICAgICBpZiAobWFjbHZsIDwgMCkgeyAgICAgICAgICAgLyogQXJlIHdlIGNhbGxpbmcgb3Ig aW4gYSBtYWNybz8gKi8KKyAgICAgICAgICAgICAgICBnX3ZhcltjXSA9IHA7ICAgICAgICAgICAv KiBObywgaXQncyB0b3AgbGV2ZWwgb25lICovCisgICAgICAgICAgICAgICAgbWFrZXN0cigmKHRv cGFyZ1tjIC0gJzAnXSkscCk7IC8qIFRha2UgY2FyZSBcJl9bXSB0b28gKi8KKyAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBZZXMsIGl0J3MgYSBtYWNybyBhcmd1bWVu dCAqLworICAgICAgICAgICAgICAgIG1fYXJnW21hY2x2bF1bYyAtICcwJ10gPSBwOyAvKiBBc3Np Z24gdGhlIHZhbHVlICovCisgICAgICAgICAgICAgICAgbWFrZXN0cigmKG1feGFyZ1ttYWNsdmxd W2MgLSAnMCddKSxwKTsgLyogQW5kIGEgY29weSBoZXJlICovCisgICAgICAgICAgICB9CisgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSXQncyBhIFwlYS16IHZhcmlh YmxlICovCisgICAgICAgICAgICBpZiAoYyA8IDMzIHx8ICh1bnNpZ25lZCBpbnQpYyA+IEdWQVJT KSByZXR1cm4oLTEpOworICAgICAgICAgICAgaWYgKGlzdXBwZXIoYykpIGMgPSAoY2hhcikgdG9s b3dlcihjKTsKKyAgICAgICAgICAgIGdfdmFyW2NdID0gcDsgICAgICAgICAgICAgICAvKiBQdXQg cG9pbnRlciBpbiBnbG9iYWwtdmFyIHRhYmxlICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHRy YV9hc2cpIHRyYWNldmFsKG5hbSxwKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0gZWxzZSBp ZiAoKm5hbSA9PSAnJicpIHsgICAgICAgICAgIC8qIEFuIGFycmF5IHJlZmVyZW5jZT8gKi8KKyAg ICAgICAgY2hhciAqKnEgPSBOVUxMOworICAgICAgICBpbnQgcmMgPSAwOworICAgICAgICBpZiAo KHkgPSBhcnJheW5hbShuYW0sJngsJnopKSA8IDApIC8qIElmIHN5bnRheCBpcyBiYWQgKi8KKyAg ICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gLTEuICovCisg ICAgICAgIGlmIChjaGthcnJheSh4LHopIDwgMCkgICAgICAgICAgLyogSWYgYXJyYXkgbm90IGRl Y2xhcmVkIG9yICovCisgICAgICAgICAgcmMgPSAtMjsgICAgICAgICAgICAgICAgICAgICAgLyog c3Vic2NyaXB0IG91dCBvZiByYW5nZSwgcmV0IC0yICovCisgICAgICAgIGlmICghZmxhZykgewor ICAgICAgICAgICAgdHJhX2FzZyA9IDA7CisgICAgICAgICAgICBkZWxtYWMobmFtLDApOyAgICAg ICAgICAgICAgLyogRGVsZXRlIGFueSBvbGQgdmFsdWUuICovCisgICAgICAgICAgICB0cmFfYXNn ID0gdHJhX3RtcDsKKyAgICAgICAgfQorICAgICAgICB4IC09IEFSUkFZQkFTRTsgICAgICAgICAg ICAgICAgIC8qIENvbnZlcnQgbmFtZSBsZXR0ZXIgdG8gaW5kZXguICovCisgICAgICAgIGlmICh4 ID4gJ3onIC0gQVJSQVlCQVNFICsgMSkKKyAgICAgICAgICByYyA9IC0xOworICAgICAgICBpZiAo cmMgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmICgocSA9IGFfcHRyW3hdKSA9PSBOVUxMKSAvKiBJ ZiBhcnJheSBub3QgZGVjbGFyZWQsICovCisgICAgICAgICAgICAgIHJldHVybigtMyk7ICAgICAg ICAgICAgICAgLyogcmV0dXJuIC0zLiAqLworICAgICAgICB9CisgICAgICAgIGlmIChyYyA8IDAp CisgICAgICAgICAgcmV0dXJuKHJjKTsKKyAgICAgICAgaWYgKCFmbGFnKSB7CisgICAgICAgICAg ICBpZiAoZGVmbGVuID4gMCkgeworICAgICAgICAgICAgICAgIGlmICgocCA9IG1hbGxvYyhkZWZs ZW4rMSkpID09IE5VTEwpIHsgLyogQWxsb2NhdGUgc3BhY2UgKi8KKyAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCJhZGRtYWMgbWFjcm8gZXJyb3IgNzogJXNcbiIsbmFtKTsKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuKC00KTsgICAgICAgICAvKiBmb3IgbmV3IGRlZiwgcmV0dXJuIC00IG9u IGZhaWwuICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0cmNweShwLGRl Zik7ICAgICAgICAgIC8qIENvcHkgZGVmIGludG8gbmV3IHNwYWNlIChTQUZFKS4gKi8KKyAgICAg ICAgICAgIH0gZWxzZSBwID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBxW3pdID0gcDsgICAg ICAgICAgICAgICAgICAgICAgIC8qIFN0b3JlIHBvaW50ZXIgdG8gaXQuICovCisgICAgICAgIGlm ICh4ID09IDApIHsgICAgICAgICAgICAgICAgICAgLyogQXJnIHZlY3RvciBhcnJheSAqLworICAg ICAgICAgICAgaWYgKHogPj0gMCAmJiB6IDw9IDkpIHsgICAgIC8qIENvcHkgdmFsdWVzIHRvIGNv cnJlc3BvbmRpbmcgICovCisgICAgICAgICAgICAgICAgaWYgKG1hY2x2bCA8IDApIHsgICAgICAg LyogXCUxLi45IHZhcmlhYmxlcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmKHRv cGFyZ1t6XSkscCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmKG1fYXJnW21hY2x2bF1bel0pLHApOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodHJhX2FzZykgdHJhY2V2YWwobmFt LHApOworICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIERvbmUuICov CisgICAgfQorCisvKiBOb3QgYSBtYWNybyBhcmd1bWVudCBvciBhIHZhcmlhYmxlLCBzbyBpdCdz IGEgbWFjcm8gZGVmaW5pdGlvbiAqLworCisjaWZkZWYgVVNFX1ZBUkxFTgorICAgIGlmIChmbGFn KSB7CisgICAgICAgIGlmICh0cmFfYXNnKSB0cmFjZXZhbChuYW0scCk7CisgICAgICAgIHJldHVy bigwKTsKKyAgICB9CisjZW5kaWYgLyogVVNFX1ZBUkxFTiAqLworICAgIHggPSBpc2FhKG5hbSkg PyAgICAgICAgICAgICAgICAgICAgIC8qIElmIGl0J3MgYW4gYXNzb2NpYXRpdmUgYXJyYXkgKi8K KyAgICAgIG14eGxvb2sobWFjdGFiLG5hbSxubWFjKSA6ICAgICAgICAvKiBsb29rIGl0IHVwIHRo aXMgd2F5ICovCisgICAgICAgIG14bG9vayhtYWN0YWIsbmFtLG5tYWMpOyAgICAgICAgLyogb3Ro ZXJ3aXNlIHRoaXMgd2F5LiAqLworICAgIGlmICh4ID4gLTEpIHsgICAgICAgICAgICAgICAgICAg ICAgIC8qIElmIGZvdW5kLi4uICovCisgICAgICAgIGlmIChkZWZsZW4gPiAwKSAgICAgICAgICAg ICAgICAgLyogYW5kIGEgbmV3IGRlZmluaXRpb24gd2FzIGdpdmVuICovCisgICAgICAgICAgcmVw bGFjaW5nID0gMTsgICAgICAgICAgICAgICAgLyogd2UncmUgcmVwbGFjaW5nICovCisgICAgICAg IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlICovCisgICAgICAg ICAgZGVsZXRpbmcgPSAxOyAgICAgICAgICAgICAgICAgLyogd2UncmUgZGVsZXRpbmcgKi8KKyAg ICB9CisgICAgaWYgKGRlbGV0aW5nKSB7ICAgICAgICAgICAgICAgICAgICAgLyogRGVsZXRpbmcu Li4gKi8KKyAgICAgICAgaWYgKGRlbG1hYyhuYW0sMCkgPCAwKQorICAgICAgICAgIHJldHVybigt MSk7CisgICAgICAgIG10Y2hhbmdlZCsrOworICAgICAgICBpZiAodHJhX2FzZykgdHJhY2V2YWwo bmFtLHApOworICAgICAgICByZXR1cm4oMCk7CisgICAgfSBlbHNlIGlmIChkZWZsZW4gPCAxKSAg ICAgICAgICAgICAgLyogTmV3IG1hY3JvIHdpdGggbm8gZGVmaW5pdGlvbiAqLworICAgICAgcmV0 dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8uICovCisKKyAg ICBpZiAocmVwbGFjaW5nKSB7ICAgICAgICAgICAgICAgICAgICAvKiBSZXBsYWNpbmcgYW4gZXhp c3RpbmcgbWFjcm8gKi8KKyAgICAgICAgaWYgKG1hY3RhYlt4XS5tdmFsKSB7ICAgICAgICAgICAv KiBJZiBpdCBjdXJyZW50bHkgaGFzIGEgZGVmaW5pdGlvbiwgKi8KKyAgICAgICAgICAgIGZyZWUo bWFjdGFiW3hdLm12YWwpOyAgICAgICAvKiBmcmVlIGl0LiAqLworICAgICAgICAgICAgbWFjdGFi W3hdLm12YWwgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIG10Y2hhbmdlZCsrOworICAgICAg ICB5ID0geDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlcGxhY2VtZW50IGluZGV4LiAq LworCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRkaW5nIGEg bmV3IG1hY3JvLi4uICovCisgICAgICAgIGNoYXIgYzEsIGMyOyAgICAgICAgICAgICAgICAgICAg LyogVXNlIGZhc3QgbG9va3VwIHRvIGZpbmQgdGhlICovCisgICAgICAgIGMxID0gKm5hbTsgICAg ICAgICAgICAgICAgICAgICAgLyogYWxwaGFiZXRpY2FsIHNsb3QuICovCisgICAgICAgIGlmIChp c3VwcGVyKGMxKSkgYzEgPSAoY2hhcikgdG9sb3dlcihjMSk7CisKKyAgICAgICAgaWYgKG5tYWMg PCA1KSB7ICAgICAgICAgICAgICAgICAvKiBOb3Qgd29ydGggaXQgZm9yIHNtYWxsIHRhYmxlcyAq LworICAgICAgICAgICAgeSA9IDA7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmlyc3QgYmluYXJ5IHNlYXJjaCB0byBmaW5kICovCisgICAgICAgICAgICBpbnQg bG8gPSAwOyAgICAgICAgICAgICAgICAgLyogd2hlcmUgdG8gc3RhcnQgKi8KKyAgICAgICAgICAg IGludCBoaSA9IG5tYWM7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAg Y2hhciBjID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChsbysyIDwgaGkgJiYgKytjb3VudCA8IDEy KSB7CisgICAgICAgICAgICAgICAgeSA9IGxvICsgKChoaSAtIGxvKSAvIDIpOworICAgICAgICAg ICAgICAgIGMgPSAqKG1hY3RhYlt5XS5rd2QpOworICAgICAgICAgICAgICAgIGlmIChpc3VwcGVy KGMpKSBjID0gKGNoYXIpIHRvbG93ZXIoYyk7CisgICAgICAgICAgICAgICAgaWYgKGMgPCBjMSkg eworICAgICAgICAgICAgICAgICAgICBsbyA9IHk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgaGkgPSB5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHkgPSAoYyA8IGMxKSA/IGxvKzEgOiBsbzsKKyAgICAgICAgfQor ICAgICAgICAvKiBOb3cgc2VhcmNoIGxpbmVhcmx5IGZyb20gc3RhcnRpbmcgbG9jYXRpb24gKi8K KyAgICAgICAgZm9yICggOyB5IDwgTUFDX01BWCAmJiBtYWN0YWJbeV0ua3dkICE9IE5VTEw7IHkr KykgeworICAgICAgICAgICAgYzIgPSAqKG1hY3RhYlt5XS5rd2QpOworICAgICAgICAgICAgaWYg KGlzdXBwZXIoYzIpKSBjMiA9IChjaGFyKSB0b2xvd2VyKGMyKTsKKyAgICAgICAgICAgIGlmIChj MSA+IGMyKQorICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjMSA8IGMy KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChja3N0cmNtcChuYW0sbWFj dGFiW3ldLmt3ZCwtMSwwKSA8PSAwKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgICAgICBpZiAoeSA9PSBNQUNfTUFYKSB7ICAgICAgICAgICAgIC8qIE1hY3JvIHRhYmxlIGlz IGZ1bGwuICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJhZGRtYWMgdGFibGUgb3ZlcmZsb3ci LCIiLHkpOworICAgICAgICAgICAgcHJpbnRmKCI/TWFjcm8gdGFibGUgb3ZlcmZsb3dcbiIpOwor ICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWFjdGFiW3ld Lmt3ZCAhPSBOVUxMKSB7ICAgIC8qIE11c3QgaW5zZXJ0ICovCisgICAgICAgICAgICBmb3IgKGkg PSBubWFjOyBpID4geTsgaS0tKSB7IC8qIE1vdmUgdGhlIHJlc3QgZG93biBvbmUgc2xvdCAqLwor ICAgICAgICAgICAgICAgIG1hY3RhYltpXS5rd2QgPSBtYWN0YWJbaS0xXS5rd2Q7CisgICAgICAg ICAgICAgICAgbWFjdGFiW2ldLm12YWwgPSBtYWN0YWJbaS0xXS5tdmFsOworICAgICAgICAgICAg ICAgIG1hY3RhYltpXS5mbGdzID0gbWFjdGFiW2ktMV0uZmxnczsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBtdGNoYW5nZWQrKzsKKyAgICAgICAgcCA9IG1hbGxvYyhuYW1sZW4g KyAxKTsgICAgICAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgbmFtZSAqLworICAgICAgICBpZiAo IXApIHsKKyAgICAgICAgICAgIHByaW50ZigiP0FkZG1hYzogT3V0IG9mIG1lbW9yeSAtIFwiJXNc IlxuIixuYW0pOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgfQorICAgICAgICBz dHJjcHkocCxuYW0pOyAgICAgICAgICAgICAgICAgIC8qIENvcHkgbmFtZSBpbnRvIG5ldyBzcGFj ZSAoU0FGRSkgKi8KKyAgICAgICAgbWFjdGFiW3ldLmt3ZCA9IHA7ICAgICAgICAgICAgICAvKiBB ZGQgcG9pbnRlciB0byB0YWJsZSAqLworICAgIH0KKyAgICBpZiAoZGVmbGVuID4gMCkgeyAgICAg ICAgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGEgZGVmaW5pdGlvbiAqLworICAgICAgICBwID0g bWFsbG9jKGRlZmxlbiArIDEpOyAgICAgICAgIC8qIEdldCBzcGFjZSAqLworICAgICAgICBpZiAo cCA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIj9TcGFjZSBleGhhdXN0ZWQgLSBcIiVz XCJcbiIsIG5hbSk7CisgICAgICAgICAgICBpZiAobWFjdGFiW3ldLmt3ZCkgeworICAgICAgICAg ICAgICAgIGZyZWUobWFjdGFiW3ldLmt3ZCk7CisgICAgICAgICAgICAgICAgbWFjdGFiW3ldLmt3 ZCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgc3RyY3B5KHAsZGVmKTsgICAgICAgICAgICAgIC8qIENv cHkgdGhlIGRlZmluaXRpb24gKFNBRkUpICovCisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbml0aW9uIGlzIGVtcHR5ICovCisgICAgICAg IHAgPSBOVUxMOworICAgIH0KKyAgICBtYWN0YWJbeV0ubXZhbCA9IHA7ICAgICAgICAgICAgICAg ICAvKiBNYWNybyBwb2ludHMgdG8gZGVmaW5pdGlvbiAqLworICAgIG1hY3RhYlt5XS5mbGdzID0g MDsgICAgICAgICAgICAgICAgIC8qIE5vIGZsYWdzICovCisgICAgaWYgKCFyZXBsYWNpbmcpICAg ICAgICAgICAgICAgICAgICAgLyogSWYgbmV3IG1hY3JvICovCisgICAgICBubWFjKys7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogY291bnQgaXQgKi8KKyAgICBpZiAodHJhX2FzZykgdHJh Y2V2YWwobmFtLHApOworICAgIHJldHVybih5KTsKK30KKworaW50Cit4ZGVsbWFjKHgpIGludCB4 OyB7ICAgICAgICAgICAgICAgICAgICAgLyogRGVsZXRlIGEgbWFjcm8gZ2l2ZW4gaXRzIGluZGV4 ICovCisgICAgaW50IGk7CisgICAgZXh0ZXJuIGludCB0cmFfYXNnOworICAgIGlmICh4IDwgMCkg cmV0dXJuKHgpOworICAgIGlmICh0cmFfYXNnKQorICAgICAgdHJhY2V2YWwobWFjdGFiW3hdLmt3 ZCxOVUxMKTsKKworICAgIGlmIChtYWN0YWJbeF0ua3dkKSB7ICAgICAgICAgICAgICAgIC8qIEZy ZWUgdGhlIHN0b3JhZ2UgZm9yIHRoZSBuYW1lICovCisgICAgICAgIGZyZWUobWFjdGFiW3hdLmt3 ZCk7CisgICAgICAgIG1hY3RhYlt4XS5rd2QgPSBOVUxMOworICAgIH0KKyAgICBpZiAobWFjdGFi W3hdLm12YWwpIHsgICAgICAgICAgICAgICAvKiBhbmQgZm9yIHRoZSBkZWZpbml0aW9uICovCisg ICAgICAgIGZyZWUobWFjdGFiW3hdLm12YWwpOworICAgICAgICBtYWN0YWJbeF0ubXZhbCA9IE5V TEw7CisgICAgfQorICAgIGZvciAoaSA9IHg7IGkgPCBubWFjOyBpKyspIHsgICAgICAgIC8qIE5v dyBtb3ZlIHVwIHRoZSBvdGhlcnMuICovCisgICAgICAgIG1hY3RhYltpXS5rd2QgPSBtYWN0YWJb aSsxXS5rd2Q7CisgICAgICAgIG1hY3RhYltpXS5tdmFsID0gbWFjdGFiW2krMV0ubXZhbDsKKyAg ICAgICAgbWFjdGFiW2ldLmZsZ3MgPSBtYWN0YWJbaSsxXS5mbGdzOworICAgIH0KKyAgICBubWFj LS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbmUgbGVzcyBtYWNybyAqLworCisg ICAgbWFjdGFiW25tYWNdLmt3ZCA9IE5VTEw7ICAgICAgICAgICAgLyogRGVsZXRlIGxhc3QgaXRl bSBmcm9tIHRhYmxlICovCisgICAgbWFjdGFiW25tYWNdLm12YWwgPSBOVUxMOworICAgIG1hY3Rh YltubWFjXS5mbGdzID0gMDsKKyAgICBtdGNoYW5nZWQrKzsKKyAgICByZXR1cm4oMCk7Cit9CisK K2ludAorZGVsbWFjKG5hbSxleGFjdCkgY2hhciAqbmFtOyBpbnQgZXhhY3Q7IHsgLyogRGVsZXRl IHRoZSBuYW1lZCBtYWNybyAqLworICAgIGludCB4LCB6OworICAgIGNoYXIgKnAsIGM7CisgICAg ZXh0ZXJuIGludCB0cmFfYXNnOworCisgICAgaWYgKCFuYW0pIHJldHVybigwKTsgICAgICAgICAg ICAgICAgLyogV2F0Y2ggb3V0IGZvciBudWxsIHBvaW50ZXIgKi8KKyAgICBkZWJ1ZyhGMTEwLCJk ZWxtYWMgbmFtIixuYW0sMCk7CisjaWZkZWYgSUtTRAorICAgIGlmICggaW5zZXJ2ZXIgJiYKKyNp ZmRlZiBJS1NEQ09ORgorICAgICAgICBpa3NkY2YKKyNlbHNlIC8qIElLU0RDT05GICovCisgICAg ICAgIDEKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworICAgICAgICApIHsKKyAgICAgICAgaWYgKCFj a3N0cmNtcCgib25fZXhpdCIsbmFtLC0xLDApIHx8CisgICAgICAgICAgICAhY2tzdHJjbXAoIm9u X2xvZ291dCIsbmFtLC0xLDApKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgfQorI2VuZGlm IC8qIElLU0QgKi8KKworICAgIGlmICgqbmFtID09IENNRFEpIG5hbSsrOworICAgIGlmICgqbmFt ID09ICclJykgeyAgICAgICAgICAgICAgICAgIC8qIElmIGl0J3MgYSB2YXJpYWJsZSBuYW1lICov CisgICAgICAgIGlmICghKGMgPSAqKG5hbSsxKSkpIHJldHVybigwKTsgLyogR2V0IHZhcmlhYmxl IG5hbWUgbGV0dGVyIG9yIGRpZ2l0ICovCisgICAgICAgIHAgPSAoY2hhciAqKTA7ICAgICAgICAg ICAgICAgICAgLyogSW5pdGlhbGl6ZSB2YWx1ZSBwb2ludGVyICovCisgICAgICAgIGlmIChtYWNs dmwgPCAwICYmIGMgPj0gJzAnICYmIGMgPD0gJzknKSB7IC8qIFRvcC1sZXZlbCBkaWdpdD8gKi8K KyAgICAgICAgICAgIHAgPSB0b3BhcmdbYyAtICcwJ107CisgICAgICAgICAgICBpZiAocCkgaWYg KHAgIT0gZ192YXJbY10pIHsKKyAgICAgICAgICAgICAgICBmcmVlKHApOworICAgICAgICAgICAg ICAgIHRvcGFyZ1tjIC0gJzAnXSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBw ID0gZ192YXJbY107CisgICAgICAgICAgICBnX3ZhcltjXSA9IE5VTEw7ICAgICAgICAgICAgLyog WmVybyB0aGUgdGFibGUgZW50cnkgKi8KKyAgICAgICAgfSBlbHNlIGlmIChtYWNsdmwgPiAtMSAm JiBjID49ICcwJyAmJiBjIDw9ICc5JykgeyAvKiBEaWdpdD8gKi8KKyAgICAgICAgICAgIHAgPSBt X3hhcmdbbWFjbHZsXVtjIC0gJzAnXTsKKyAgICAgICAgICAgIGlmIChwKSBpZiAocCAhPSBnX3Zh cltjXSkgeworICAgICAgICAgICAgICAgIGZyZWUocCk7CisgICAgICAgICAgICAgICAgbV94YXJn W21hY2x2bF1bYyAtICcwJ10gPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcCA9 IG1fYXJnW21hY2x2bF1bYyAtICcwJ107IC8qIEdldCBwb2ludGVyIGZyb20gbWFjcm8tYXJnIHRh YmxlICovCisgICAgICAgICAgICBtX2FyZ1ttYWNsdmxdW2MgLSAnMCddID0gTlVMTDsgLyogWmVy byB0aGUgdGFibGUgcG9pbnRlciAqLworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEl0J3MgYSBnbG9iYWwgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIGlmIChjIDwg MzMgfHwgKHVuc2lnbmVkIGludCljID4gR1ZBUlMpIHJldHVybigwKTsKKyAgICAgICAgICAgIHAg PSBnX3ZhcltjXTsgICAgICAgICAgICAgICAvKiBHZXQgcG9pbnRlciBmcm9tIGdsb2JhbC12YXIg dGFibGUgKi8KKyAgICAgICAgICAgIGdfdmFyW2NdID0gTlVMTDsgICAgICAgICAgICAvKiBaZXJv IHRoZSB0YWJsZSBlbnRyeSAqLworICAgICAgICB9CisgICAgICAgIGlmIChwKSB7CisgICAgICAg ICAgICBkZWJ1ZyhGMDEwLCJkZWxtYWMgZGVmIixwLDApOworICAgICAgICAgICAgZnJlZShwKTsg ICAgICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIHN0b3JhZ2UgKi8KKyAgICAgICAgICAgIHAg PSBOVUxMOworICAgICAgICB9IGVsc2UgZGVidWcoRjExMCwiZGVsbWFjIGRlZiIsIihudWxsIHBv aW50ZXIpIiwwKTsKKyAgICAgICAgaWYgKHRyYV9hc2cpIHRyYWNldmFsKG5hbSxOVUxMKTsKKyAg ICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoKm5hbSA9PSAnJicpIHsgICAgICAgICAg ICAgICAgICAvKiBBbiBhcnJheSByZWZlcmVuY2U/ICovCisgICAgICAgIGNoYXIgKipxOworICAg ICAgICBpZiAoYXJyYXluYW0obmFtLCZ4LCZ6KSA8IDApICAgIC8qIElmIHN5bnRheCBpcyBiYWQg Ki8KKyAgICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gLTEu ICovCisgICAgICAgIHggLT0gQVJSQVlCQVNFOyAgICAgICAgICAgICAgICAgLyogQ29udmVydCBu YW1lIHRvIG51bWJlci4gKi8KKyAgICAgICAgaWYgKChxID0gYV9wdHJbeF0pID09IE5VTEwpICAg ICAvKiBJZiBhcnJheSBub3QgZGVjbGFyZWQsICovCisgICAgICAgICAgcmV0dXJuKC0yKTsgICAg ICAgICAgICAgICAgICAgLyogcmV0dXJuIC0yLiAqLworICAgICAgICBpZiAoeiA+IGFfZGltW3hd KSAgICAgICAgICAgICAgIC8qIElmIHN1YnNjcmlwdCBvdXQgb2YgcmFuZ2UsICovCisgICAgICAg ICAgcmV0dXJuKC0zKTsgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIC0zLiAqLworICAgICAg ICBpZiAocVt6XSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGFuIG9sZCB2 YWx1ZSwgKi8KKyAgICAgICAgICAgIGRlYnVnKEYwMTAsImRlbG1hYyBkZWYiLHFbel0sMCk7Cisg ICAgICAgICAgICBpZiAoeCAhPSAwKSAgICAgICAgICAgICAgICAgLyogTWFjcm8gYXJnIHZlY3Rv ciBpcyBqdXN0IGEgY29weSAqLworICAgICAgICAgICAgICBmcmVlKHFbel0pOyAgICAgICAgICAg ICAgIC8qIE90aGVycyBhcmUgcmVhbCBzbyBmcmVlIHRoZW0gKi8KKyAgICAgICAgICAgIHFbel0g PSBOVUxMOworICAgICAgICAgICAgaWYgKHggPT0gMCkgeyAgICAgICAgICAgICAgIC8qIEFyZyB2 ZWN0b3IgYXJyYXkgKi8KKyAgICAgICAgICAgICAgICBpZiAoeiA+PSAwICYmIHogPD0gOSkgeyAv KiBDb3B5IHZhbHVlcyB0byBjb3JyZXNwb25kaW5nICAqLworICAgICAgICAgICAgICAgICAgICBp ZiAobWFjbHZsIDwgMCkgeyAgIC8qIFwlMS4uOSB2YXJpYWJsZXMuICovCisgICAgICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCYodG9wYXJnW3pdKSxOVUxMKTsKKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihtX2FyZ1ttYWNs dmxdW3pdKSxOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0cmFfYXNnKSB0cmFjZXZhbChuYW0sTlVM TCk7CisgICAgICAgIH0gZWxzZSBkZWJ1ZyhGMDEwLCJkZWxtYWMgZGVmIiwiKG51bGwgcG9pbnRl cikiLDApOworICAgIH0KKworICAgLyogTm90IGEgdmFyaWFibGUgb3IgYW4gYXJyYXksIHNvIGl0 IG11c3QgYmUgYSBtYWNyby4gKi8KKworICAgIHogPSBpc2FhKG5hbSk7CisgICAgZGVidWcoRjEx MSwiZGVsbWFjIGlzYWEiLG5hbSx6KTsKKyAgICBkZWJ1ZyhGMTExLCJkZWxtYWMgZXhhY3QiLG5h bSxleGFjdCk7CisgICAgeCA9IHogPyBteHhsb29rKG1hY3RhYixuYW0sbm1hYykgOgorICAgICAg ZXhhY3QgPyBteGxvb2sobWFjdGFiLG5hbSxubWFjKSA6CisgICAgICAgIG1sb29rKG1hY3RhYixu YW0sbm1hYyk7CisgICAgaWYgKHggPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImRlbG1hYyBt bG9vayIsbmFtLHgpOworICAgICAgICByZXR1cm4oeCk7CisgICAgfQorICAgIHJldHVybih4ZGVs bWFjKHgpKTsKK30KKworVk9JRAoraW5pdG1hYygpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEluaXQgbWFjcm8gJiB2YXJpYWJsZSB0YWJsZXMgKi8KKyAgICBpbnQgaSwgaiwgeDsK KworICAgIG5tYWMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1hY3JvcyAq LworICAgIGZvciAoaSA9IDA7IGkgPCBNQUNfTUFYOyBpKyspIHsgICAgIC8qIEluaXRpYWxpemUg dGhlIG1hY3JvIHRhYmxlICovCisgICAgICAgIG1hY3RhYltpXS5rd2QgPSBOVUxMOworICAgICAg ICBtYWN0YWJbaV0ubXZhbCA9IE5VTEw7CisgICAgICAgIG1hY3RhYltpXS5mbGdzID0gMDsKKyAg ICB9CisgICAgbXRjaGFuZ2VkKys7CisgICAgeCA9IChNQVhBUkdMSVNUICsgMSkgKiBzaXplb2Yo Y2hhciAqKik7CisgICAgZm9yIChpID0gMDsgaSA8IE1BQ0xFVkVMOyBpKyspIHsgICAgLyogSW5p dCB0aGUgbWFjcm8gYXJndW1lbnQgdGFibGVzICovCisgICAgICAgIG1feGFyZ1tpXSA9IChjaGFy ICoqKSBtYWxsb2MoeCk7CisgICAgICAgIG1ydmFsW2ldID0gTlVMTDsgICAgICAgICAgICAgICAg LyogTWFjcm8gcmV0dXJuIHZhbHVlICovCisgICAgICAgIC8qIFBvaW50ZXIgdG8gZW50aXJlIGFy Z3VtZW50IHZlY3RvciwgbGV2ZWwgaSwgZm9yIFwmX1tdIGFycmF5ICovCisgICAgICAgIGZvciAo aiA9IDA7IGogPD0gTUFYQVJHTElTVDsgaisrKSB7IC8qIE1hY3JvIGFyZ3VtZW50IGxpc3QgKi8K KyAgICAgICAgICAgIGlmIChqIDwgMTApICAgICAgICAgICAgICAgICAvKiBGb3IgdGhlIFwlMC4u XCU5IHZhcmlhYmxlcyAqLworICAgICAgICAgICAgICBtX2FyZ1tpXVtqXSA9IE5VTEw7ICAgICAg IC8qIFBvaW50ZXIgdG8gYXJnIGosIGxldmVsIGkuICovCisgICAgICAgICAgICBpZiAobV94YXJn W2ldKSAgICAgICAgICAgICAgLyogRm9yIFwmX1tdIC0gYWxsIGFyZ3MuICovCisgICAgICAgICAg ICAgIG1feGFyZ1tpXVtqXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChpID0g MDsgaSA8IEdWQVJTOyBpKyspIHsgICAgICAgLyogQW5kIHRoZSBnbG9iYWwgdmFyaWFibGVzIHRh YmxlICovCisgICAgICAgIGdfdmFyW2ldID0gTlVMTDsKKyAgICB9CisgICAgLyogQW5kIHRoZSB0 YWJsZSBvZiBhcnJheXMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgJ3onIC0gQVJSQVlC QVNFICsgMTsgaSsrKSB7CisgICAgICAgIGFfcHRyW2ldID0gKGNoYXIgKiopIE5VTEw7ICAgICAg LyogTnVsbCBwb2ludGVyIGZvciBlYWNoICovCisgICAgICAgIGFfZGltW2ldID0gMDsgICAgICAg ICAgICAgICAgICAgLyogYW5kIGEgZGltZW5zaW9uIG9mIHplcm8gKi8KKyAgICAgICAgYV9saW5r W2ldID0gLTE7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBDTURTVEtMOyBqKyspIHsKKyAgICAg ICAgICAgIGFhX3B0cltqXVtpXSA9IChjaGFyICoqKSBOVUxMOworICAgICAgICAgICAgYWFfZGlt W2pdW2ldID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworaW50Citwb3BjbHZsKCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9wIGNvbW1hbmQgbGV2ZWwsIHJldHVybiBjbWRs dmwgKi8KKyAgICBleHRlcm4gaW50IHRyYV9jbWQ7CisgICAgc3RydWN0IGxvY2FsdmFyICogdjsK KyAgICBpbnQgaSwgdG9wY21kOworICAgIGRlYnVnKEYxMDEsInBvcGNsdmwgY21kbHZsIiwiIixj bWRsdmwpOworICAgIGlmIChjbWRsdmwgPiAwKSB7CisgICAgICAgIGlmICgodiA9IGxvY2FsaGVh ZFtjbWRsdmxdKSkgeyAgLyogRGlkIHdlIHNhdmUgYW55IHZhcmlhYmxlcz8gKi8KKyAgICAgICAg ICAgIHdoaWxlICh2KSB7ICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KKyAgICAgICAgICAgICAg ICBpZiAodi0+bHZfdmFsdWUpICAgICAgICAvKiBDb3B5IG9sZCBvbmVzIGJhY2sgKi8KKyAgICAg ICAgICAgICAgICAgIGFkZG1hYyh2LT5sdl9uYW1lLHYtPmx2X3ZhbHVlKTsKKyAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBkZWxtYWModi0+bHZfbmFtZSwxKTsKKyAgICAg ICAgICAgICAgICB2ID0gdi0+bHZfbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZy ZWVsb2NhbChjbWRsdmwpOyAgICAgICAgICAvKiBGcmVlIGxvY2FsIHN0b3JhZ2UgKi8KKyAgICAg ICAgfQorICAgICAgICAvKiBBdXRvbWF0aWMgYXJyYXlzIGRvIG5vdCB1c2UgdGhlIGxvY2FsaGVh ZCBsaXN0ICovCisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI4OyBpKyspIHsgICAgICAvKiBG cmVlIGFueSBsb2NhbCBhcnJheXMgKi8KKyAgICAgICAgICAgIGlmIChhYV9wdHJbY21kbHZsXVtp XSkgewkvKiBEb2VzIHRoaXMgb25lIGV4aXN0PyAqLworICAgICAgICAgICAgICAgIGRjbGFycmF5 KChjaGFyKShpK0FSUkFZQkFTRSksLTEpOyAvKiBEZXN0cm95IGdsb2JhbCBvbmUgKi8KKyAgICAg ICAgICAgICAgICBhX3B0cltpXSA9IGFhX3B0cltjbWRsdmxdW2ldOworICAgICAgICAgICAgICAg IGFfZGltW2ldID0gYWFfZGltW2NtZGx2bF1baV07CisgICAgICAgICAgICAgICAgYWFfcHRyW2Nt ZGx2bF1baV0gPSAoY2hhciAqKilOVUxMOworICAgICAgICAgICAgICAgIGFhX2RpbVtjbWRsdmxd W2ldID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYWFfZGltW2NtZGx2bF1baV0gPT0gLTIz KSB7IC8qIFNlY3JldCBjb2RlICovCisgICAgICAgICAgICAgICAgZGNsYXJyYXkoKGNoYXIpKGkr QVJSQVlCQVNFKSwtMSk7IC8qIChzZWUgcHVzaGFycmF5KCkpICovCisgICAgICAgICAgICAgICAg YWFfcHRyW2NtZGx2bF1baV0gPSAoY2hhciAqKilOVUxMOworICAgICAgICAgICAgICAgIGFhX2Rp bVtjbWRsdmxdW2ldID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogT3RoZXJ3 aXNlIGRvIG5vdGhpbmcgLSBpdCBpcyBhIGxvY2FsIGFycmF5IHRoYXQgd2FzIGRlY2xhcmVkICov CisgICAgICAgICAgICAvKiBhdCBhIGxldmVsIGFib3ZlIHRoaXMgb25lIHNvIGxlYXZlIGl0IGFs b25lLiAqLworICAgICAgICB9CisgICAgfQorICAgIGlmIChjbWRsdmwgPCAxKSB7ICAgICAgICAg ICAgICAgICAgIC8qIElmIHdlJ3JlIGFscmVhZHkgYXQgdG9wIGxldmVsICovCisgICAgICAgIGNt ZGx2bCA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyoganVzdCBtYWtlIHN1cmUgYWxsIHRoZSAq LworICAgICAgICB0bGV2ZWwgPSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIHN0YWNrIHBvaW50 ZXJzIGFyZSBzZXQgcmlnaHQgKi8KKyAgICAgICAgbWFjbHZsID0gLTE7ICAgICAgICAgICAgICAg ICAgICAvKiBhbmQgcmV0dXJuICovCisgICAgfSBlbHNlIGlmIChjbWRzdGtbY21kbHZsXS5zcmMg PT0gQ01EX1RGKSB7IC8qIFJlYWRpbmcgZnJvbSBUQUtFIGZpbGU/ICovCisgICAgICAgIGRlYnVn KEYxMDEsInBvcGNsdmwgdGxldmVsIiwiIix0bGV2ZWwpOworICAgICAgICBpZiAodGxldmVsID4g LTEpIHsgICAgICAgICAgICAgIC8qIFllcywgKi8KKyAgICAgICAgICAgIGZjbG9zZSh0ZmlsZVt0 bGV2ZWxdKTsgICAgICAvKiBjbG9zZSBpdCAqLworCisgICAgICAgICAgICBpZiAodHJhX2NtZCkK KyAgICAgICAgICAgICAgcHJpbnRmKCJbJWRdIC1GOiBcIiVzXCJcbiIsY21kbHZsLHRmbmFtW3Rs ZXZlbF0pOworICAgICAgICAgICAgZGVidWcoRjExMSwiQ01EIC1GIix0Zm5hbVt0bGV2ZWxdLGNt ZGx2bCk7CisgICAgICAgICAgICBpZiAodGZuYW1bdGxldmVsXSkgeyAgICAgICAgLyogZnJlZSBz dG9yYWdlIGZvciBuYW1lICovCisgICAgICAgICAgICAgICAgZnJlZSh0Zm5hbVt0bGV2ZWxdKTsK KyAgICAgICAgICAgICAgICB0Zm5hbVt0bGV2ZWxdID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIHRsZXZlbC0tOyAgICAgICAgICAgICAgICAgICAvKiBhbmQgcG9wIHRha2UgbGV2 ZWwgKi8KKyAgICAgICAgICAgIGNtZGx2bC0tOyAgICAgICAgICAgICAgICAgICAvKiBhbmQgY29t bWFuZCBsZXZlbCAqLworICAgICAgICAgICAgcXVpZXQgPSB4cXVpZXRbY21kbHZsXTsKKyAgICAg ICAgICAgIHZhcmV2YWwgPSB4dmFyZXZbY21kbHZsXTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg ICAgdGxldmVsID0gLTE7CisgICAgfSBlbHNlIGlmIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01E X01EKSB7IC8qIEluIGEgbWFjcm8/ICovCisgICAgICAgIHRvcGNtZCA9IGxhc3RjbWRbbWFjbHZs XTsKKyAgICAgICAgZGVidWcoRjEwMSwicG9wY2x2bCBtYWNsdmwiLCIiLG1hY2x2bCk7CisgICAg ICAgIGlmIChtYWNsdmwgPiAtMSkgeyAgICAgICAgICAgICAgLyogWWVzLCAqLworI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgY2hhciAqKnE7CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICAgICAgbWFjcFttYWNsdmxdID0gIiI7ICAgICAgICAgIC8q IHNldCBtYWNybyBwb2ludGVyIHRvIG51bGwgc3RyaW5nICovCisgICAgICAgICAgICAqY21kYnVm ID0gJ1wwJzsgICAgICAgICAgICAgLyogY2xlYXIgdGhlIGNvbW1hbmQgYnVmZmVyICovCisKKyAg ICAgICAgICAgIGlmICgobWFjbHZsID4gMCkgJiYgICAgICAgICAvKiAyIE1heSAxOTk5ICovCisg ICAgICAgICAgICAgICAgKG1fYXJnW21hY2x2bC0xXVswXSkgJiYKKyAgICAgICAgICAgICAgICAo IXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfeGlmIiw0KSB8fAorICAgICAgICAgICAgICAg ICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9mb3IiLDQpIHx8CisgICAgICAgICAgICAg ICAgICFzdHJuY21wKG1fYXJnW21hY2x2bC0xXVswXSwiX3N3aSIsNCkgfHwKKyAgICAgICAgICAg ICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfd2hpIiw0KSkgJiYKKyAgICAgICAg ICAgICAgICBtcnZhbFttYWNsdmwrMV0pIHsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCYobXJ2 YWxbbWFjbHZsLTFdKSxtcnZhbFttYWNsdmwrMV0pOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKG1hY2x2bCsxIDwgTUFDTEVWRUwpIHsKKyAgICAgICAgICAgICAgICBpZiAobXJ2YWxb bWFjbHZsKzFdKSB7ICAvKiBGcmVlIGFueSBkZWVwZXIgcmV0dXJuIHZhbHVlcy4gKi8KKyAgICAg ICAgICAgICAgICAgICAgZnJlZShtcnZhbFttYWNsdmwrMV0pOworICAgICAgICAgICAgICAgICAg ICBtcnZhbFttYWNsdmwrMV0gPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmICh0cmFfY21kKQorICAgICAgICAgICAgICBwcmludGYoIlslZF0g LU06IFwiJXNcIlxuIixjbWRsdmwsbV9hcmdbY21kc3RrW2NtZGx2bF0ubHZsXVswXSk7CisgICAg ICAgICAgICBkZWJ1ZyhGMTExLCJDTUQgLU0iLG1fYXJnW2NtZHN0a1tjbWRsdmxdLmx2bF1bMF0s Y21kbHZsKTsKKworICAgICAgICAgICAgbWFjbHZsLS07ICAgICAgICAgICAgICAgICAgIC8qIFBv cCBtYWNybyBsZXZlbCAqLworICAgICAgICAgICAgY21kbHZsLS07ICAgICAgICAgICAgICAgICAg IC8qIGFuZCBjb21tYW5kIGxldmVsICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJwb3BjbHZs IG1hYyBuZXcgbWFjbHZsIiwiIixtYWNsdmwpOworICAgICAgICAgICAgZGVidWcoRjAxMCwicG9w Y2x2bCBtYWMgbXJ2YWxbbWFjbHZsKzFdIixtcnZhbFttYWNsdmwrMl0sMCk7CisKKyAgICAgICAg ICAgIHF1aWV0ID0geHF1aWV0W2NtZGx2bF07CisJICAgIHZhcmV2YWwgPSB4dmFyZXZbY21kbHZs XTsKKyAgICAgICAgICAgIGlmIChtYWNsdmwgPiAtMSkgeworICAgICAgICAgICAgICAgIGFfcHRy WzBdID0gbV94YXJnW21hY2x2bF07CisgICAgICAgICAgICAgICAgYV9kaW1bMF0gPSBuX3hhcmdb bWFjbHZsXSAtIDE7CisJCWRlYnVnKEYxMTEsImFfZGltWzBdIiwiQiIsYV9kaW1bMF0pOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhX3B0clswXSA9IHRvcHhhcmc7Cisg ICAgICAgICAgICAgICAgYV9kaW1bMF0gPSB0b3BhcmdjIC0gMTsKKwkJZGVidWcoRjExMSwiYV9k aW1bMF0iLCJDIixhX2RpbVswXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBtYWNsdmwgPSAtMTsKKyAgICAgICAgfQorI2lmbmRlZiBOT1NFWFAKKyAgICAg ICAgZGVidWcoRjEwMSwicG9wY2x2bCB0b3BjbWQiLCIiLHRvcGNtZCk7CisgICAgICAgIGlmICh0 b3BjbWQgPT0gWFhTRVhQKSB7CisgICAgICAgICAgICBleHRlcm4gY2hhciAqIHNleHB2YWw7Cisg ICAgICAgICAgICBtYWtlc3RyKCYobXJ2YWxbbWFjbHZsKzFdKSxzZXhwdmFsKTsKKyAgICAgICAg fQorI2VuZGlmIC8qIE5PU0VYUCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGNtZGx2bC0tOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJwb3BjbHZsIGNtZGx2bCIsIiIsY21kbHZsKTsKKyAgICBp ZiAocHJzdHJpbmdbY21kbHZsXSkgeworICAgICAgICBjbXNldHAocHJzdHJpbmdbY21kbHZsXSk7 CisgICAgICAgIG1ha2VzdHIoJihwcnN0cmluZ1tjbWRsdmxdKSxOVUxMKTsKKyAgICB9CisjaWZu ZGVmIE1BQworICAgIGlmIChjbWRsdmwgPCAxIHx8IHhjbWRzcmMgPT0gQ01EX0tCKSB7IC8qIElm IGF0IHByb21wdCAqLworICAgICAgICBzZXRpbnQoKTsKKyAgICAgICAgY29uY2IoKGNoYXIpZXNj YXBlKTsgICAgICAgICAgICAvKiBHbyBpbnRvIGNicmVhayBtb2RlICovCisgICAgfQorI2VuZGlm IC8qIE1BQyAqLworICAgIHhjbWRzcmMgPSBjbWRzdGtbY21kbHZsXS5zcmM7CisgICAgZGVidWco RjEwMSwicG9wY2x2bCB4Y21kc3JjIiwiIix4Y21kc3JjKTsKKyAgICBkZWJ1ZyhGMTAxLCJwb3Bj bHZsIHRsZXZlbCIsIiIsdGxldmVsKTsKKyAgICByZXR1cm4oY21kbHZsIDwgMSA/IDAgOiBjbWRs dmwpOyAgICAvKiBSZXR1cm4gY29tbWFuZCBsZXZlbCAqLworfQorI2Vsc2UgLyogTm8gc2NyaXB0 IHByb2dyYW1taW5nIGxhbmd1YWdlICovCitpbnQgcG9wY2x2bCgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSnVzdCBjbG9zZSBjdXJyZW50IHRha2UgZmlsZS4gKi8KKyAgICBpZiAodGxl dmVsID4gLTEpIHsgICAgICAgICAgICAgICAgICAvKiBpZiBhbnkuLi4gKi8KKyAgICAgICAgaWYg KHRmbmFtW3RsZXZlbF0pIHsKKyAgICAgICAgICAgIGZyZWUodGZuYW1bdGxldmVsXSk7CisgICAg ICAgICAgICB0Zm5hbVt0bGV2ZWxdID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2Uo dGZpbGVbdGxldmVsLS1dKTsKKyAgICB9CisgICAgaWYgKHRsZXZlbCA9PSAtMSkgeyAgICAgICAg ICAgICAgICAgLyogQW5kIGlmIGJhY2sgYXQgdG9wIGxldmVsICovCisgICAgICAgIHNldGludCgp OworICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIGFuZCBnbyBiYWNr IGludG8gY2JyZWFrIG1vZGUuICovCisgICAgfQorICAgIHhjbWRzcmMgPSB0bGV2ZWwgPiAtMSA/ IENNRF9URiA6IDA7CisgICAgcmV0dXJuKHRsZXZlbCArIDEpOworfQorI2VuZGlmIC8qIE5PU1BM ICovCisKKworI2lmbmRlZiBOT1NQTAorc3RhdGljIGludAoraXNlb20obSkgY2hhciAqIG07IHsg ICAgICAgICAgICAgICAgICAgIC8qIFRlc3QgaWYgYXQgZW5kIG9mIG1hY3JvIGRlZiAqLworICAg IGlmICghbSkKKyAgICAgIG0gPSAiIjsKKyAgICBkZWJ1ZyhGMTExLCJpc2VvbSIsbSxtYWNsdmwp OworICAgIHdoaWxlICgqbSkgeworICAgICAgICAvKiBBbnl0aGluZyBidXQgU3BhY2UgYW5kIENv bW1hIG1lYW5zIG1vcmUgbWFjcm8gaXMgbGVmdCAqLworICAgICAgICBpZiAoKCptID4gU1ApICYm ICgqbSAhPSAnLCcpKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJpc2VvbSByZXR1cm4iLG0s MCk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgbSsrOworICAg IH0KKyAgICBkZWJ1ZyhGMTExLCJpc2VvbSByZXR1cm4iLG0sMSk7CisgICAgcmV0dXJuKDEpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90aGluZyBsZWZ0ICovCit9CisjZW5kaWYgLyog Tk9TUEwgKi8KKworLyogUG9wIGFsbCBjb21tYW5kIGxldmVscyB0aGF0IGNhbiBiZSBwb3BwZWQg Ki8KKworaW50CitwcmVwb3AoKSB7CisgICAgaWYgKGNtZGx2bCA+IDApIHsgICAgICAgICAgICAg ICAgICAgLyogSWYgY29tbWFuZCBsZXZlbCBpcyA+IDAgYW5kLi4uICovCisgICAgICAgIHdoaWxl ICgKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgICgoY21kc3RrW2NtZGx2bF0uc3JjID09 IENNRF9URikgJiYgLyogQ29tbWFuZCBzb3VyY2UgaXMgZmlsZSAqLworI2VuZGlmIC8qIE5PU1BM ICovCisgICAgICAgICAgICAodGxldmVsID4gLTEpICYmCisgICAgICAgICAgICBmZW9mKHRmaWxl W3RsZXZlbF0pKSAgICAgICAgLyogQW5kIGF0IGVuZCBvZiBmaWxlLi4uICovCisjaWZuZGVmIE5P U1BMCisgICAgICAgICAgICAgICAvKiBPciBjb21tYW5kIHNvdXJjZSBpcyBtYWNyby4uLiAqLwor ICAgICAgICAgICAgICAgfHwgKChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKSAmJgorICAg ICAgICAgICAgICAgIChtYWNsdmwgPiAtMSkgJiYKKyAgICAgICAgICAgICAgICBpc2VvbShtYWNw W21hY2x2bF0pKSkgIC8qIGFuZCBhdCBlbmQgb2YgbWFjcm8sIHRoZW4uLi4gKi8KKyNlbmRpZiAv KiBOT1NQTCAqLworICAgICAgICB7CisgICAgICAgICAgICAgIHBvcGNsdmwoKTsgICAgICAgICAg ICAgICAgLyogcG9wIGNvbW1hbmQgbGV2ZWwuICovCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0 dXJuKGNtZGx2bCA8IDEgPyAwIDogY21kbHZsKTsgICAgLyogUmV0dXJuIGNvbW1hbmQgbGV2ZWwg Ki8KK30KKworLyogU1RPUCAtIGdldCBiYWNrIHRvIEMtS2VybWl0IHByb21wdCwgbm8gbWF0dGVy IHdoZXJlIGZyb20uICovCisKK2ludAorZG9zdG9wKCkgeworICAgIGV4dGVybiBpbnQgY21kZGVw OworICAgIHdoaWxlIChwb3BjbHZsKCkpIDsgICAgICAgICAvKiBQb3AgYWxsIG1hY3JvcyAmIHRh a2UgZmlsZXMgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoY21kZGVwID4gLTEpICAgICAgICAg ICAgLyogQW5kIGFsbCByZWN1cnNpdmUgY21kIHBrZyBpbnZvY2F0aW9ucyAqLworICAgICAgd2hp bGUgKGNtcG9wKCkgPiAtMSkgOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgY21pbmkoY2t4ZWNo KTsgICAgICAgICAgICAgIC8qIENsZWFyIHRoZSBjb21tYW5kIGJ1ZmZlci4gKi8KKyAgICByZXR1 cm4oMCk7Cit9CisKKy8qIENsb3NlIHRoZSBnaXZlbiBsb2cgKi8KKworaW50Citkb2Nsc2xvZyh4 KSBpbnQgeDsgeworICAgIGludCB5OworICAgIHN3aXRjaCAoeCkgeworI2lmZGVmIERFQlVHCisg ICAgICBjYXNlIExPR0Q6CisgICAgICAgIGlmIChkZWJsb2cgPD0gMCkgeworICAgICAgICAgICAg cHJpbnRmKCI/RGVidWdnaW5nIGxvZyB3YXNuJ3Qgb3BlblxuIik7CisgICAgICAgICAgICByZXR1 cm4oMCk7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjEwMCwiRGVidWcgTG9nIENsb3NlZCIs IiIsMEwpOworICAgICAgICAqZGViZmlsID0gJ1wwJzsKKyAgICAgICAgZGVibG9nID0gMDsKKyAg ICAgICAgcmV0dXJuKHpjbG9zZShaREZJTEUpKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZu ZGVmIE5PWEZFUgorICAgICAgY2FzZSBMT0dQOgorICAgICAgICBpZiAocGt0bG9nIDw9IDApIHsK KyAgICAgICAgICAgIHByaW50ZigiP1BhY2tldCBsb2cgd2Fzbid0IG9wZW5cbiIpOworICAgICAg ICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgICAgICpwa3RmaWwgPSAnXDAnOworICAg ICAgICBwa3Rsb2cgPSAwOworICAgICAgICByZXR1cm4oemNsb3NlKFpQRklMRSkpOworI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICAgIGNhc2UgTE9HUzoKKyAgICAg ICAgaWYgKHNlc2xvZyA8PSAwKSB7CisgICAgICAgICAgICBwcmludGYoIj9TZXNzaW9uIGxvZyB3 YXNuJ3Qgb3BlblxuIik7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICAg ICAgKnNlc2ZpbCA9ICdcMCc7CisgICAgICAgIHNldHNlc2xvZygwKTsKKyAgICAgICAgcmV0dXJu KHpjbG9zZShaU0ZJTEUpKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBUTE9HCisg ICAgICBjYXNlIExPR1Q6IHsKKyNpZmRlZiBJS1NECisgICAgICAgICAgZXh0ZXJuIGludCBpa2xv Z29wZW4sIHhmZXJsb2c7CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICAgIGlmICh0cmFsb2cg PD0gMAorI2lmZGVmIElLU0QKKyAgICAgICAgICAgICAgJiYgIWlrbG9nb3BlbgorI2VuZGlmIC8q IElLU0QgKi8KKyAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgIGlmIChtc2dmbGcpCisg ICAgICAgICAgICAgICAgcHJpbnRmKCI/VHJhbnNhY3Rpb24gbG9nIHdhc24ndCBvcGVuXG4iKTsK KyAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgIH0KKyNpZmRlZiBJS1NECisgICAg ICAgICAgaWYgKGlrbG9nb3BlbiAmJiAhaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgY2xvc2Uo eGZlcmxvZyk7CisgICAgICAgICAgICAgIGlrbG9nb3BlbiA9IDA7CisgICAgICAgICAgfQorI2Vu ZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICBpZiAodHJhbG9nKSB7CisgICAgICAgICAgICAgIHRs b2coRjEwMCwiVHJhbnNhY3Rpb24gTG9nIENsb3NlZCIsIiIsMEwpOworICAgICAgICAgICAgICB6 Y2xvc2UoWlRGSUxFKTsKKyAgICAgICAgICB9CisgICAgICAgICAgKnRyYWZpbCA9ICdcMCc7Cisg ICAgICAgICAgdHJhbG9nID0gMDsKKyAgICAgICAgICByZXR1cm4oMSk7CisgICAgICB9CisjZW5k aWYgLyogVExPRyAqLworCisjaWZkZWYgQ0tMT0dESUFMCisgICAgICBjYXNlIExPR006CisgICAg ICAgIGlmIChkaWFsb2cgPD0gMCkgeworICAgICAgICAgICAgaWYgKG1zZ2ZsZykgcHJpbnRmKCI/ Q29ubmVjdGlvbiBsb2cgd2Fzbid0IG9wZW5cbiIpOworICAgICAgICAgICAgcmV0dXJuKDApOwor ICAgICAgICB9CisgICAgICAgICpkaWFmaWwgPSAnXDAnOworICAgICAgICBkaWFsb2cgPSAwOwor ICAgICAgICByZXR1cm4oemNsb3NlKFpESUZJTCkpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLwor CisjaWZuZGVmIE5PU1BMCisgICAgICBjYXNlIExPR1c6ICAgICAgICAgICAgICAgICAgICAgICAg LyogV1JJVEUgZmlsZSAqLworICAgICAgY2FzZSBMT0dSOiAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJFQUQgZmlsZSAqLworICAgICAgICB5ID0gKHggPT0gTE9HUikgPyBaUkZJTEUgOiBaV0ZJ TEU7CisgICAgICAgIGlmIChjaGtmbih5KSA8IDEpICAgICAgICAgICAgICAgLyogSWYgbm8gZmls ZSB0byBjbG9zZSAqLworICAgICAgICAgIHJldHVybigxKTsgICAgICAgICAgICAgICAgICAgIC8q IHN1Y2NlZWQgc2lsZW50bHkuICovCisgICAgICAgIHJldHVybih6Y2xvc2UoeSkpOyAgICAgICAg ICAgICAgLyogT3RoZXJ3aXNlLCBjbG9zZSB0aGUgZmlsZS4gKi8KKyNlbmRpZiAvKiBOT1NQTCAq LworCisgICAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIlxuP1VuZXhwZWN0ZWQgbG9nIGRl c2lnbmF0b3IgLSAlZFxuIiwgeCk7CisgICAgICAgIHJldHVybigwKTsKKyAgICB9Cit9CisKK3N0 YXRpYyBpbnQgc2xjID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gbGluZSBjb3Vu dCAqLworCitjaGFyICoKK3Nob3dzdHJpbmcocykgY2hhciAqIHM7IHsKKyAgICByZXR1cm4ocyA/ IHMgOiAiKG51bGwpIik7Cit9CisKK2NoYXIgKgorc2hvd29mZih4KSBpbnQgeDsgeworICAgIHJl dHVybih4ID8gIm9uIiA6ICJvZmYiKTsKK30KKworY2hhciAqCitzaG93b29hKHgpIGludCB4OyB7 CisgICAgc3dpdGNoICh4KSB7CisgICAgICBjYXNlIFNFVF9PRkY6ICByZXR1cm4oIm9mZiIpOwor ICAgICAgY2FzZSBTRVRfT046ICAgcmV0dXJuKCJvbiIpOworICAgICAgY2FzZSBTRVRfQVVUTzog cmV0dXJuKCJhdXRvbWF0aWMiKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgIHJldHVybigiKHVua25v d24pIik7CisgICAgfQorfQorCisjaWZkZWYgR0VNRE9TCitpc3hkaWdpdChjKSBpbnQgYzsgewor ICAgIHJldHVybihpc2RpZ2l0KGMpIHx8CisgICAgICAgICAgIChjID49ICdhJyAmJiBjIDw9ICdm JykgfHwKKyAgICAgICAgICAgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKSk7Cit9CisjZW5kaWYgLyog R0VNRE9TICovCisKKyNpZm5kZWYgTk9TRVRLRVkKKyNpZmRlZiBPUzIKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHNob2tleXRhYltdID0geyAgICAvKiBTSE9XIEtFWSBtb2RlcyAqLworICAgICJhbGwi LCAgICAxLCAwLAorICAgICJvbmUiLCAgICAwLCAwCit9Oworc3RhdGljIGludCBuc2hva2V5ID0g KHNpemVvZihzaG9rZXl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2RlZmluZSBT SEtFWURFRiBUVF9NQVgrNQorc3RydWN0IGtleXRhYiBzaG9rZXltdGFiW10gPSB7CisgICAgImFh YSIsICAgICAgIFRUX0FBQSwgICAgIENNX0lOViwgICAgLyogQW5uQXJib3IgKi8KKyAgICAiYWRt M2EiLCAgICAgVFRfQURNM0EsICAgMCwgICAgICAgICAvKiBMU0kgQURNLTNBICovCisgICAgImFk bTUiLCAgICAgIFRUX0FETTUsICAgIDAsICAgICAgICAgLyogTFNJIEFETS01ICovCisgICAgImFp eHRlcm0iLCAgIFRUX0FJWFRFUk0sIDAsICAgICAgICAgLyogSUJNIEFJWHRlcm0gKi8KKyAgICAi YW5uYXJib3IiLCAgVFRfQUFBLCAgICAgMCwgICAgICAgICAvKiBBbm5BcmJvciAqLworICAgICJh bnNpLWJicyIsICBUVF9BTlNJLCAgICAwLCAgICAgICAgIC8qIEFOU0kuU1lTIChCQlMpICovCisg ICAgImF0Mzg2IiwgICAgIFRUX0FUMzg2LCAgIDAsICAgICAgICAgLyogVW5peHdhcmUgQU5TSSAq LworICAgICJhdmF0YXIvMCsiLCBUVF9BTlNJLCAgICAwLCAgICAgICAgIC8qIEFWQVRBUi8wKyAq LworICAgICJiYTgwIiwgICAgICBUVF9CQTgwLCAgICAwLCAgICAgICAgIC8qIE5peGRvcmYgQkE4 MCAqLworICAgICJiZSIsICAgICAgICBUVF9CRU9TLCAgICBDTV9JTlZ8Q01fQUJSLAorICAgICJi ZW9zLWFuc2kiLCBUVF9CRU9TLCAgICBDTV9JTlYsICAgIC8qIEJlT1MgQU5TSSAqLworICAgICJi ZXRlcm0iLCAgICBUVF9CRU9TLCAgICAwLCAgICAgICAgIC8qIEJlT1MgQ29uc29sZSAqLworICAg ICJkMjAwIiwgICAgICBUVF9ERzIwMCwgICBDTV9JTlZ8Q01fQUJSLCAvKiBEYXRhIEdlbmVyYWwg REFTSEVSIDIwMCAqLworICAgICJkMjEwIiwgICAgICBUVF9ERzIxMCwgICBDTV9JTlZ8Q01fQUJS LCAvKiBEYXRhIEdlbmVyYWwgREFTSEVSIDIxMCAqLworICAgICJkMjE3IiwgICAgICBUVF9ERzIx NywgICBDTV9JTlZ8Q01fQUJSLCAvKiBEYXRhIEdlbmVyYWwgREFTSEVSIDIxNyAqLworICAgICJk ZWZhdWx0IiwgICBTSEtFWURFRiwgICAwLAorICAgICJkZzIwMCIsICAgICBUVF9ERzIwMCwgICAw LCAgICAgICAgIC8qIERhdGEgR2VuZXJhbCBEQVNIRVIgMjAwICovCisgICAgImRnMjEwIiwgICAg IFRUX0RHMjEwLCAgIDAsICAgICAgICAgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMTAgKi8KKyAg ICAiZGcyMTciLCAgICAgVFRfREcyMTcsICAgMCwgICAgICAgICAvKiBEYXRhIEdlbmVyYWwgREFT SEVSIDIxNyAqLworICAgICJlbWFjcyIsICAgICBUVF9LQk1fRU1BQ1MsICAgMCwgICAgIC8qIEVt YWNzIG1vZGUgKi8KKyAgICAiaDE5IiwgICAgICAgVFRfSDE5LCAgICAgQ01fSU5WLCAgICAvKiBI ZWF0aC0xOSAqLworICAgICJoZWF0aDE5IiwgICBUVF9IMTksICAgICAwLCAgICAgICAgIC8qIEhl YXRoLTE5ICovCisgICAgImhlYnJldyIsICAgIFRUX0tCTV9IRUJSRVcsIDAsICAgICAgLyogSGVi cmV3IG1vZGUgKi8KKyAgICAiaGZ0IiwgICAgICAgVFRfSEZULCAgICAgMCwgICAgICAgICAvKiBJ Qk0gSEZUICovCisgICAgImhwMjYyMWEiLCAgIFRUX0hQMjYyMSwgIDAsICAgICAgICAgLyogSFAg MjYyMUEgKi8KKyAgICAiaHB0ZXJtIiwgICAgVFRfSFBURVJNLCAgMCwgICAgICAgICAvKiBIUCBU RVJNICovCisgICAgImh6MTUwMCIsICAgIFRUX0haTDE1MDAsIDAsICAgICAgICAgLyogSGF6ZWx0 aW5lIDE1MDAgKi8KKyAgICAiaWJtMzE1MSIsICAgVFRfSUJNMzEsICAgMCwgICAgICAgICAvKiBJ Qk0gMzEwMS14eCwzMTYxICovCisgICAgImxpbnV4IiwgICAgIFRUX0xJTlVYLCAgIDAsICAgICAg ICAgLyogTGludXggKi8KKyAgICAicWFuc2kiLCAgICAgVFRfUUFOU0ksICAgMCwgICAgICAgICAv KiBRTlggQU5TSSAqLworICAgICJxbngiLCAgICAgICBUVF9RTlgsICAgICAwLCAgICAgICAgIC8q IFFOWCAqLworICAgICJydXNzaWFuIiwgICBUVF9LQk1fUlVTU0lBTiwgMCwgICAgIC8qIFJ1c3Np YW4gbW9kZSAqLworICAgICJzY29hbnNpIiwgICBUVF9TQ09BTlNJLCAwLCAgICAgICAgIC8qIFND TyBBTlNJICovCisgICAgInNuaS05NzgwMSIsIFRUXzk3ODAxLCAgIDAsICAgICAgICAgLyogU2lu aXggOTc4MDEgKi8KKyAgICAic3VuIiwgICAgICAgVFRfU1VOLCAgICAgMCwgICAgICAgICAvKiBT dW4gQ29uc29sZSAqLworI2lmZGVmIE9TMlBNCisjaWZkZWYgQ09NTUVOVAorICAgICJ0ZWs0MDE0 IiwgVFRfVEVLNDAsIDAsCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIE9TMlBNICov CisgICAgInR0eSIsICAgICBUVF9OT05FLCAgMCwKKyAgICAidHZpOTEwKyIsIFRUX1RWSTkxMCwg MCwKKyAgICAidHZpOTI1IiwgIFRUX1RWSTkyNSwgMCwKKyAgICAidHZpOTUwIiwgIFRUX1RWSTk1 MCwgMCwKKyAgICAidmM0MDQiLCAgIFRUX1ZDNDQwNCwgMCwKKyAgICAidmM0NDA0IiwgIFRUX1ZD NDQwNCwgQ01fSU5WLAorICAgICJ2aXA3ODA5IiwgVFRfVklQNzgwOSwgMCwKKyAgICAidnQxMDAi LCAgIFRUX1ZUMTAwLCAwLAorICAgICJ2dDEwMiIsICAgVFRfVlQxMDIsIDAsCisgICAgInZ0MjIw IiwgICBUVF9WVDIyMCwgMCwKKyAgICAidnQyMjBwYyIsIFRUX1ZUMjIwUEMsIDAsCisgICAgInZ0 MzIwIiwgICBUVF9WVDMyMCwgMCwKKyAgICAidnQzMjBwYyIsIFRUX1ZUMzIwUEMsIDAsCisgICAg InZ0NTIiLCAgICBUVF9WVDUyLCAgMCwKKyAgICAid3AiLCAgICAgIFRUX0tCTV9XUCwgMCwKKyAg ICAid3kxNjAiLCAgIFRUX1dZMTYwLCAgMCwKKyAgICAid3kzMCIsICAgIFRUX1dZMzAsICAwLAor ICAgICJ3eTM3MCIsICAgVFRfV1kzNzAsIDAsCisgICAgInd5NTAiLCAgICBUVF9XWTUwLCAgMCwK KyAgICAid3k2MCIsICAgIFRUX1dZNjAsICAwLAorICAgICJ3eXNlMzAiLCAgVFRfV1kzMCwgIENN X0lOViwKKyAgICAid3lzZTM3MCIsIFRUX1dZMzcwLCBDTV9JTlYsCisgICAgInd5c2U1MCIsICBU VF9XWTUwLCAgQ01fSU5WLAorICAgICJ3eXNlNjAiLCAgVFRfV1k2MCwgIENNX0lOVgorfTsKK2lu dCBuc2hva2V5bSA9IChzaXplb2Yoc2hva2V5bXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikp OworI2VuZGlmIC8qIE9TMiAqLworCitWT0lECisjaWZkZWYgT1MyCitzaG9rZXljb2RlKGMsbSkg aW50IGMsIG07CisjZWxzZQorc2hva2V5Y29kZShjKSBpbnQgYzsKKyNlbmRpZgorLyogc2hva2V5 Y29kZSAqLyB7CisgICAgS0VZIGNoOworICAgIENIQVIgKnM7CisjaWZkZWYgT1MyCisgICAgaW50 IGk7CisgICAgY29uX2V2ZW50IGttOworI2Vsc2UgLyogT1MyICovCisgICAgaW50IGttOworI2Vu ZGlmIC8qIE9TMiAqLworCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBtc2trZXlzOworICAg IGNoYXIgKiBtc3RyID0gIiI7CisKKyAgICBpZiAoYyA+PSBLTVNJWkUpIHsKKyAgICAgICAgYmxl ZXAoQlBfRkFJTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvKiBPUzIgKi8KKyAg ICBwcmludGYoIiBLZXkgY29kZSBcXCVkID0+ICIsIGMpOworI2VuZGlmIC8qIE9TMiAqLworCisj aWZuZGVmIE9TMgorICAgIGttID0gbWFwa2V5KGMpOworCisjaWZuZGVmIE5PS1ZFUkJTCisgICAg aWYgKElTX0tWRVJCKGttKSkgeyAgICAgICAgICAgICAgICAgLyogXEt2ZXJiPyAqLworICAgICAg ICBpbnQgaSwga3Y7CisgICAgICAgIGt2ID0ga20gJiB+KEZfS1ZFUkIpOworICAgICAgICBwcmlu dGYoIlZlcmI6ICIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmt2ZXJiczsgaSsrKQorICAg ICAgICAgIGlmIChrdmVyYnNbaV0ua3d2YWwgPT0ga3YpIHsKKyAgICAgICAgICAgICAgcHJpbnRm KCJcXEslcyIsa3ZlcmJzW2ldLmt3ZCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IH0KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PS1ZFUkJT ICovCisgICAgICBpZiAoSVNfQ1NJKGttKSkgeworICAgICAgICAgIGludCB4a20gPSBrbSAmIDB4 RkY7CisgICAgICAgICAgaWYgKHhrbSA8PSAzMiB8fCB4a20gPj0gMTI3KQorICAgICAgICAgICAg cHJpbnRmKCJTdHJpbmc6IFxcezI3fVtcXHslZH1cbiIseGttKTsKKyAgICAgICAgICBlbHNlCisg ICAgICAgICAgICBwcmludGYoIlN0cmluZzogXFx7Mjd9WyVjXG4iLHhrbSk7CisgICAgICB9IGVs c2UgaWYgKElTX0VTQyhrbSkpIHsKKyAgICAgICAgICBpbnQgeGttID0ga20gJiAweEZGOworICAg ICAgICAgIGlmICh4a20gPD0gMzIgfHwgeGttID49IDEyNykKKyAgICAgICAgICAgIHByaW50Zigi U3RyaW5nOiBcXHsyN31cXHslZH1cbiIseGttKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAg ICBwcmludGYoIlN0cmluZzogXFx7Mjd9JWNcbiIseGttKTsKKyAgICAgIH0gZWxzZSBpZiAobWFj cm90YWJbY10pIHsgICAgICAgICAvKiBTZWUgaWYgdGhlcmUncyBhIG1hY3JvICovCisgICAgICAg ICAgcHJpbnRmKCJTdHJpbmc6ICIpOyAgICAgICAgICAgLyogSWYgc28sIGRpc3BsYXkgaXRzIGRl ZmluaXRpb24gKi8KKyAgICAgICAgICBzID0gbWFjcm90YWJbY107CisgICAgICAgICAgc2hvc3Ry ZGVmKHMpOworICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNpZm5kZWYgTk9LVkVSQlMKKyAgICB9 IGVsc2UgaWYgKGttID49IDB4MTAwKSB7ICAgICAgICAgICAvKiBUaGlzIG1lYW5zICJ1bmRlZmlu ZWQiICovCisgICAgICAgIHByaW50ZigiVW5kZWZpbmVkXG4iKTsKKyNlbmRpZiAvKiBOT0tWRVJC UyAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1hY3Jv LCBzaG93IHNpbmdsZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgcHJpbnRmKCJDaGFyYWN0ZXI6ICIp OworICAgICAgICBjaCA9IGttOworICAgICAgICBpZiAoY2ggPCAzMiB8fCBjaCA9PSAxMjcKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgIHx8IGNoID4gMjU1CisjZW5kaWYgLyogT1MyICovCisjaWZu ZGVmIE5FWFQKKyNpZm5kZWYgQVVYCisjaWZuZGVmIFhFTklYCisjaWZuZGVmIE9TMgorICAgICAg ICAgICAgfHwgKGNoID4gMTI3ICYmIGNoIDwgMTYwKQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlm IC8qIFhFTklYICovCisjZW5kaWYgLyogQVVYICovCisjZW5kaWYgLyogTkVYVCAqLworICAgICAg ICAgICAgKQorLyoKKyAgVGhlc2UgdXNlZCB0byBiZSAlZCwgYnV0IGdjYyAxLjkzICYgbGF0ZXIg Y29tcGxhaW4gYWJvdXQgdHlwZSBtaXNtYXRjaGVzLgorICAldSBpcyBzdXBwb3NlZCB0byBiZSB0 b3RhbGx5IHBvcnRhYmxlLgorKi8KKyAgICAgICAgICBwcmludGYoIlxcJXUiLCh1bnNpZ25lZCBp bnQpIGNoKTsKKyAgICAgICAgZWxzZSBwcmludGYoIiVjIFxcJXUiLChDSEFSKSAoY2ggJiAweGZm KSwodW5zaWduZWQgaW50KSBjaCk7CisgICAgICAgIGlmIChjaCA9PSAoS0VZKSBjKQorICAgICAg ICAgIHByaW50ZigiIChzZWxmLCBubyB0cmFuc2xhdGlvbilcbiIpOworICAgICAgICBlbHNlCisg ICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKyNlbHNlIC8qIE9TMiAqLworICAgIGlmICht IDwgMCkgeworICAgICAgICBrbSA9IG1hcGtleShjKTsKKyAgICAgICAgbXN0ciA9ICJkZWZhdWx0 IjsKKyAgICB9IGVsc2UgeworICAgICAgICBrbSA9IG1hcHRlcm1rZXkoYyxtKTsKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IG5zaG9rZXltOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtID09IHNo b2tleW10YWJbaV0ua3d2YWwpIHsKKyAgICAgICAgICAgICAgICBtc3RyID0gc2hva2V5bXRhYltp XS5rd2Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisgICAgcyA9IGtleW5hbWUoYyk7CisgICAgZGVidWcoRjExMSwic2hva2V5Y29kZSBt c3RyIixtc3RyLG0pOworICAgIGRlYnVnKEYxMTEsInNob2tleWNvZGUga2V5bmFtZSIscyxjKTsK KyAgICBwcmludGYoIiAlc0tleSBjb2RlIFxcJWQgJXMgKCVzKSA9PiAiLAorICAgICAgICAgICAg bXNra2V5cyA/ICJtc2tlcm1pdCAiIDogIiIsCisgICAgICAgICAgICBtc2trZXlzID8gY2t0b21z ayhjKSA6IGMsCisgICAgICAgICAgICBzID09IE5VTEwgPyAiIiA6IHMsIG1zdHIpOworCisgICAg c3dpdGNoIChrbS50eXBlKSB7CisjaWZuZGVmIE5PS1ZFUkJTCisgICAgICBjYXNlIGt2ZXJiOiB7 CisgICAgICAgICAgaW50IGksIGt2OworICAgICAgICAgIGt2ID0ga20ua3ZlcmIuaWQgJiB+KEZf S1ZFUkIpOworICAgICAgICAgIHByaW50ZigiVmVyYjogIik7CisgICAgICAgICAgZm9yIChpID0g MDsgaSA8IG5rdmVyYnM7IGkrKykgeworICAgICAgICAgICAgICBpZiAoa3ZlcmJzW2ldLmt3dmFs ID09IGt2KSB7CisgICAgICAgICAgICAgICAgICBwcmludGYoIlxcSyVzIixrdmVyYnNbaV0ua3dk KTsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAg fQorICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyNl bmRpZiAvKiBOT0tWRVJCUyAqLworICAgICAgY2FzZSBjc2k6IHsKKyAgICAgICAgICBpbnQgeGtt ID0ga20uY3NpLmtleSAmIDB4RkY7CisgICAgICAgICAgaWYgKHhrbSA8PSAzMiB8fCB4a20gPj0g MTI3KQorICAgICAgICAgICAgcHJpbnRmKCJTdHJpbmc6IFxcezI3fVtcXHslZH1cbiIseGttKTsK KyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoIlN0cmluZzogXFx7Mjd9WyVjXG4i LHhrbSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIGVzYzogeworICAg ICAgICAgIGludCB4a20gPSBrbS5lc2Mua2V5ICYgMHhGRjsKKyAgICAgICAgICBpZiAoeGttIDw9 IDMyIHx8IHhrbSA+PSAxMjcpCisgICAgICAgICAgICBwcmludGYoIlN0cmluZzogXFx7JWR9XFx7 JWR9XG4iLElTREcyMDAodHRfdHlwZSk/MzA6MjcseGttKTsKKyAgICAgICAgICBlbHNlCisgICAg ICAgICAgICBwcmludGYoIlN0cmluZzogXFx7JWR9JWNcbiIsSVNERzIwMCh0dF90eXBlKT8zMDoy Nyx4a20pOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBtYWNybzogewor ICAgICAgICAgIHByaW50ZigiU3RyaW5nOiAiKTsgICAgICAgICAgIC8qIE1hY3JvLCBkaXNwbGF5 IGl0cyBkZWZpbml0aW9uICovCisgICAgICAgICAgc2hvc3RyZGVmKGttLm1hY3JvLnN0cmluZyk7 CisgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAg ICAgY2FzZSBsaXRlcmFsOiB7CisgICAgICAgICAgcHJpbnRmKCJMaXRlcmFsIHN0cmluZzogIik7 ICAgLyogTGl0ZXJhbCwgZGlzcGxheSBpdHMgZGVmaW5pdGlvbiAqLworICAgICAgICAgIHNob3N0 cmRlZihrbS5saXRlcmFsLnN0cmluZyk7CisgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAg ICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBlcnJvcjogeworICAgICAgICAgIGlmIChj ID49IDB4MTAwKSB7CisgICAgICAgICAgICAgIHByaW50ZigiVW5kZWZpbmVkXG4iKTsKKyAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBwcmludGYoIkNoYXJhY3RlcjogIik7CisgICAg ICAgICAgICAgIGNoID0gYzsKKyAgICAgICAgICAgICAgaWYgKGNoIDwgMzIgfHwgY2ggPT0gMTI3 IHx8IGNoID4gMjU1CisjaWZuZGVmIE5FWFQKKyNpZm5kZWYgQVVYCisjaWZuZGVmIFhFTklYCisj aWZuZGVmIE9TMgorICAgICAgICAgICAgICAgICAgIHx8IChjaCA+IDEyNyAmJiBjaCA8IDE2MCkK KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBYRU5JWCAqLworI2VuZGlmIC8qIEFVWCAqLwor I2VuZGlmIC8qIE5FWFQgKi8KKyAgICAgICAgICAgICAgICAgICApCisvKgorICBUaGVzZSB1c2Vk IHRvIGJlICVkLCBidXQgZ2NjIDEuOTMgJiBsYXRlciBjb21wbGFpbiBhYm91dCB0eXBlIG1pc21h dGNoZXMuCisgICV1IGlzIHN1cHBvc2VkIHRvIGJlIHRvdGFsbHkgcG9ydGFibGUuCisqLworICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJcXCV1IiwodW5zaWduZWQgaW50KSBjaCk7CisgICAgICAg ICAgICAgIGVsc2UgcHJpbnRmKCIlYyBcXCV1IiwoQ0hBUikgKGNoICYgMHhmZiksKHVuc2lnbmVk IGludCkgY2gpOworICAgICAgICAgICAgICBwcmludGYoIiAoc2VsZiwgbm8gdHJhbnNsYXRpb24p XG4iKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNl IGtleTogeworICAgICAgICAgIHByaW50ZigiQ2hhcmFjdGVyOiAiKTsKKyAgICAgICAgICBjaCA9 IGttLmtleS5zY2FuY29kZTsKKyAgICAgICAgICBpZiAoY2ggPCAzMiB8fCBjaCA9PSAxMjcgfHwg Y2ggPiAyNTUKKyNpZm5kZWYgTkVYVAorI2lmbmRlZiBBVVgKKyNpZm5kZWYgWEVOSVgKKyNpZm5k ZWYgT1MyCisgICAgICAgICAgICAgIHx8IChjaCA+IDEyNyAmJiBjaCA8IDE2MCkKKyNlbHNlCisg ICAgICAgICAgICAgICB8fCAoY2ggPiAxMjcpCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyog WEVOSVggKi8KKyNlbmRpZiAvKiBBVVggKi8KKyNlbmRpZiAvKiBORVhUICovCisgICAgICAgICAg ICAgICkKKy8qCisgIFRoZXNlIHVzZWQgdG8gYmUgJWQsIGJ1dCBnY2MgMS45MyAmIGxhdGVyIGNv bXBsYWluIGFib3V0IHR5cGUgbWlzbWF0Y2hlcy4KKyAgJXUgaXMgc3VwcG9zZWQgdG8gYmUgdG90 YWxseSBwb3J0YWJsZS4KKyovCisgICAgICAgICAgICBwcmludGYoIlxcJXUiLCh1bnNpZ25lZCBp bnQpIGNoKTsKKyAgICAgICAgICBlbHNlIHByaW50ZigiJWMgXFwldSIsKENIQVIpIChjaCAmIDB4 ZmYpLCh1bnNpZ25lZCBpbnQpIGNoKTsKKyAgICAgICAgICBpZiAoY2ggPT0gKEtFWSkgYykKKyAg ICAgICAgICAgIHByaW50ZigiIChzZWxmLCBubyB0cmFuc2xhdGlvbilcbiIpOworICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICBicmVhazsKKyAgICAg IH0KKyAgICB9CisjZW5kaWYgLyogT1MyICovCit9CisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKwor Vk9JRAorc2hvc3RyZGVmKHMpIENIQVIgKiBzOyB7CisgICAgQ0hBUiBjaDsKKyAgICBpZiAoIXMp IHMgPSAoQ0hBUiAqKSIiOworICAgIHdoaWxlICgoY2ggPSAqcysrKSkgeworICAgICAgICBpZiAo Y2ggPCAzMiB8fCBjaCA9PSAxMjcgfHwgY2ggPT0gMjU1CisvKgorICBTeXN0ZW1zIHdob3NlIG5h dGl2ZSBjaGFyYWN0ZXIgc2V0cyBoYXZlIGdyYXBoaWMgY2hhcmFjdGVycyBpbiBDMS4uLgorKi8K KyNpZm5kZWYgTkVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZVhUICovCisjaWZu ZGVmIEFVWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFjaW50b3NoICovCisjaWZu ZGVmIFhFTklYICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSUJNIFBDICovCisjaWZkZWYg T1MyCisvKgorICBJdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIHRoZSBsb2NhbCBob3N0IGNhbiBk aXNwbGF5IDgtYml0IGNoYXJhY3RlcnM7CisgIHRoZXkgYXJlIG5vdCBwb3J0YWJsZSBhbW9uZyBj aGFyYWN0ZXItc2V0cyBhbmQgZm9udHMuICBXaG8ga25vd3Mgd2hhdAorICB3b3VsZCBiZSBkaXNw bGF5ZWQuLi4KKyovCisgICAgICAgICAgICB8fCAoY2ggPiAxMjcpCisjZWxzZSAvKiBPUzIgKi8K KyAgICAgICAgICAgIHx8IChjaCA+IDEyNyAmJiBjaCA8IDE2MCkKKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBYRU5JWCAqLworI2VuZGlmIC8qIEFVWCAqLworI2VuZGlmIC8qIE5FWFQgKi8K KyAgICAgICAgICAgICkKKyAgICAgICAgICBwcmludGYoIlxceyVkfSIsY2gpOyAgICAgICAgICAv KiBEaXNwbGF5IGNvbnRyb2wgY2hhcmFjdGVycyAqLworICAgICAgICBlbHNlIHB1dGNoYXIoKGNo YXIpIGNoKTsgICAgICAgIC8qIGluIGJhY2tzbGFzaCBub3RhdGlvbiAqLworICAgIH0KK30KKwor I2RlZmluZSB4eGRpZmYodixzeXMpIHN0cm5jbXAodixzeXMsc3RybGVuKHN5cykpCisKKyNpZm5k ZWYgTk9TSE9XCitWT0lECitzaG92ZXIoKSB7CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGNoYXIg Y2t4c3lzdGVtW107CisjZW5kaWYgLyogT1MyICovCisgICAgZXh0ZXJuIGNoYXIgKmNrX3BhdGNo LCAqIGNrbGlidjsKKyAgICBwcmludGYoIlxuVmVyc2lvbnM6XG4gJXNcbiIsdmVyc2lvKTsKKyAg ICBwcmludGYoIiBOdW1lcmljOiAlbGRcbiIsdmVybnVtKTsKKyNpZmRlZiBPUzIKKyAgICBwcmlu dGYoIiBPcGVyYXRpbmcgU3lzdGVtOiAlc1xuIiwgY2t4c3lzdGVtKTsKKyNlbHNlIC8qIE9TMiAq LworICAgIHByaW50ZigiIEJ1aWx0IGZvcjogJXNcbiIsIGNreHN5cyk7CisjaWZkZWYgQ0tfVVRT TkFNRQorICAgIGlmICh1bm1fbmFtWzBdKQorICAgICAgcHJpbnRmKCIgUnVubmluZyBvbjogJXMg JXMgJXMgJXNcbiIsIHVubV9uYW0sdW5tX3Zlcix1bm1fcmVsLHVubV9tY2gpOworI2VuZGlmIC8q IENLX1VUU05BTUUgKi8KKyAgICBwcmludGYoIiBQYXRjaGVzOiAlc1xuIiwgKmNrX3BhdGNoID8g Y2tfcGF0Y2ggOiAiKG5vbmUpIik7CisjZW5kaWYgLyogT1MyICovCisgICAgaWYgKHh4ZGlmZihj a3h2LGNreHN5cykpCisgICAgICBwcmludGYoIiAlcyBmb3Ilc1xuIixja3h2LGNreHN5cyk7Cisg ICAgZWxzZQorICAgICAgcHJpbnRmKCIgJXNcbiIsY2t4dik7CisgICAgaWYgKHh4ZGlmZihja3p2 LGNrenN5cykpCisgICAgICBwcmludGYoIiAlcyBmb3Ilc1xuIixja3p2LGNrenN5cyk7CisgICAg ZWxzZQorICAgICAgcHJpbnRmKCIgJXNcbiIsY2t6dik7CisgICAgcHJpbnRmKCIgJXNcbiIsY2ts aWJ2KTsKKyAgICBwcmludGYoIiAlc1xuIixwcm90dik7CisgICAgcHJpbnRmKCIgJXNcbiIsZm5z dik7CisgICAgcHJpbnRmKCIgJXNcbiAlc1xuIixjbWR2LHVzZXJ2KTsKKyNpZm5kZWYgTk9DU0VU UworICAgIHByaW50ZigiICVzXG4iLHhsYXYpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZm5k ZWYgTUFDCisjaWZuZGVmIE5PTE9DQUwKKyAgICBwcmludGYoIiAlc1xuIixjb25udik7CisjaWZk ZWYgT1MyCisgICAgcHJpbnRmKCIgJXNcbiIsY2t5dik7CisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE1BQyAqLworI2lmbmRlZiBOT0RJQUwKKyAgICBw cmludGYoIiAlc1xuIixkaWFsdik7CisjZW5kaWYgLyogTk9ESUFMICovCisjaWZuZGVmIE5PU0NS SVBUCisgICAgcHJpbnRmKCIgJXNcbiIsbG9naW52KTsKKyNlbmRpZiAvKiBOT1NDUklQVCAqLwor I2lmZGVmIE5FVENPTk4KKyAgICBwcmludGYoIiAlc1xuIixja25ldHYpOworI2lmZGVmIE9TMgor ICAgIHByaW50ZigiICVzXG4iLGNrb25ldHYpOworI2lmZGVmIENLX05FVEJJT1MKKyAgICBwcmlu dGYoIiAlc1xuIixja29uYml2KTsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworI2lmZGVmIFROQ09ERQorICAgIHByaW50Zigi ICVzXG4iLGNrdGVsdik7CisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgU1NIQlVJTFRJTgor ICAgIHByaW50ZigiICVzXG4iLGNrc3Nodik7CisjaWZkZWYgU0ZUUF9CVUlMVElOCisgICAgcHJp bnRmKCIgJXNcbiIsY2tzZnRwdik7CisjZW5kaWYgLyogU0ZUUF9CVUlMVElOICovCisjZW5kaWYg LyogU1NIQlVJTFRJTiAqLworI2lmZGVmIE9TMgorI2lmZGVmIE9TMk1PVVNFCisgICAgcHJpbnRm KCIgJXNcbiIsY2tvbW91dik7CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKyNpZmRlZiBORVdGVFAKKyAgICBwcmludGYoIiAlc1xuIixja2Z0cHYpOworI2VuZGlmIC8q IE5FV0ZUUCAqLworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgcHJpbnRmKCIgJXNcbiIs Y2thdGh2KTsKKyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX0VOQ1JZ UFRJT04KKyNpZmRlZiBDUllQVF9ETEwKKyAgICBwcmludGYoIiAlc1xuIixja19jcnlwdF9kbGxf dmVyc2lvbigpKTsKKyNlbHNlIC8qIENSWVBUX0RMTCAqLworICAgIHByaW50ZigiICVzXG4iLGNr Y3Jwdik7CisjZW5kaWYgLyogQ1JZUFRfRExMICovCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAq LworI2lmZGVmIENLX1NTTAorICAgIHByaW50ZigiICVzXG4iLGNrc3Nsdik7CisjZW5kaWYgLyog Q0tfU1NMICovCisgICAgcHJpbnRmKCJcbiIpOworfQorCisjaWZkZWYgQ0tfTEFCRUxFRAorVk9J RAorc2hvbGJsKCkgeworI2lmZGVmIFZNUworICAgIHByaW50ZigiVk1TIExhYmVsZWQgRmlsZSBG ZWF0dXJlczpcbiIpOworICAgIHByaW50ZigiIGFjbCAlcyAoQUNMIGluZm8gJXMpXG4iLAorICAg ICAgICAgICBzaG93b2ZmKGxmX29wdHMgJiBMQkxfQUNMKSwKKyAgICAgICAgICAgbGZfb3B0cyAm IExCTF9BQ0wgPyAicHJlc2VydmVkIiA6ICJkaXNjYXJkZWQiKTsKKyAgICBwcmludGYoIiBiYWNr dXAtZGF0ZSAlcyAoYmFja3VwIGRhdGUvdGltZSAlcylcbiIsCisgICAgICAgICAgIHNob3dvZmYo bGZfb3B0cyAmIExCTF9CQ0spLAorICAgICAgICAgICBsZl9vcHRzICYgTEJMX0JDSyA/ICJwcmVz ZXJ2ZWQiIDogImRpc2NhcmRlZCIpOworICAgIHByaW50ZigiIG5hbWUgJXMgKG9yaWdpbmFsIGZp bGVuYW1lICVzKVxuIiwKKyAgICAgICAgICAgc2hvd29mZihsZl9vcHRzICYgTEJMX05BTSksCisg ICAgICAgICAgIGxmX29wdHMgJiBMQkxfTkFNID8gInByZXNlcnZlZCIgOiAiZGlzY2FyZGVkIik7 CisgICAgcHJpbnRmKCIgb3duZXIgJXMgKG9yaWdpbmFsIGZpbGUgb3duZXIgaWQgJXMpXG4iLAor ICAgICAgICAgICBzaG93b2ZmKGxmX29wdHMgJiBMQkxfT1dOKSwKKyAgICAgICAgICAgbGZfb3B0 cyAmIExCTF9PV04gPyAicHJlc2VydmVkIiA6ICJkaXNjYXJkZWQiKTsKKyAgICBwcmludGYoIiBw YXRoICVzIChvcmlnaW5hbCBmaWxlJ3MgZGlzazpbZGlyZWN0b3J5XSAlcylcbiIsCisgICAgICAg ICAgIHNob3dvZmYobGZfb3B0cyAmIExCTF9QVEgpLAorICAgICAgICAgICBsZl9vcHRzICYgTEJM X1BUSCA/ICJwcmVzZXJ2ZWQiIDogImRpc2NhcmRlZCIpOworI2Vsc2UKKyNpZmRlZiBPUzIKKyAg ICBwcmludGYoIk9TLzIgTGFiZWxlZCBGaWxlIGZlYXR1cmVzIChhdHRyaWJ1dGVzKTpcbiIpOwor ICAgIHByaW50ZigiIGFyY2hpdmU6ICAgJXNcbiIsIHNob3dvZmYobGZfb3B0cyAmIExCTF9BUkMp KTsKKyAgICBwcmludGYoIiBleHRlbmRlZDogICVzXG4iLCBzaG93b2ZmKGxmX29wdHMgJiBMQkxf RVhUKSk7CisgICAgcHJpbnRmKCIgaGlkZGVuOiAgICAlc1xuIiwgc2hvd29mZihsZl9vcHRzICYg TEJMX0hJRCkpOworICAgIHByaW50ZigiIHJlYWQtb25seTogJXNcbiIsIHNob3dvZmYobGZfb3B0 cyAmIExCTF9STyApKTsKKyAgICBwcmludGYoIiBzeXN0ZW06ICAgICVzXG4iLCBzaG93b2ZmKGxm X29wdHMgJiBMQkxfU1lTKSk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1TICovCit9 CisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLworCitWT0lECitzaG90Y3MoY3NsLGNzcikgaW50IGNz bCwgY3NyOyB7ICAgICAgICAgLyogU2hvdyB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0ICovCisjaWZu ZGVmIE5PQ1NFVFMKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9URVJNCisgICAgZXh0ZXJuIHN0cnVj dCBfdnRHIEdbNF0sICpHTCwgKkdSOworICAgIGV4dGVybiBpbnQgZGVjbnJjbSwgc25pX2NoY29k ZTsKKyAgICBleHRlcm4gaW50IHR0X3V0ZjgsIGRlY19ucmMsIGRlY19rYmQsIGRlY19sYW5nOwor ICAgIGV4dGVybiBwcm5jczsKKworICAgIHByaW50ZigiIFRlcm1pbmFsIGNoYXJhY3Rlci1zZXRz OlxuIik7CisgICAgaWYgKElTOTc4MDEodHRfdHlwZV9tb2RlKSkgeworICAgICAgICBpZiAoY21h c2sgPT0gMDM3NykKKyAgICAgICAgICBwcmludGYoIiAgICAgTW9kZTogOC1iaXQgTW9kZVxuIik7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIiAgICAgTW9kZTogNy1iaXQgTW9kZVxu Iik7CisgICAgICAgIHByaW50ZigiICAgICBDSC5DT0RFIGlzICVzXG4iLHNuaV9jaGNvZGU/Ik9u IjoiT2ZmIik7CisgICAgfSBlbHNlIGlmIChJU1ZUMTAwKHR0X3R5cGVfbW9kZSkpIHsKKyAgICAg ICAgaWYgKGRlY25yY20pCisgICAgICAgICAgcHJpbnRmKCIgICAgIE1vZGU6IDctYml0IE5hdGlv bmFsIE1vZGVcbiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgcHJpbnRmKCIgICAgIE1vZGU6 IDgtYml0IE11bHRpbmF0aW9uYWwgTW9kZVxuIik7CisgICAgfQorICAgIGlmICggaXN1bmljb2Rl KCkgKQorICAgICAgICBwcmludGYoIiAgICBMb2NhbDogVW5pY29kZSBkaXNwbGF5IC8gJXMgaW5w dXRcbiIsCisgICAgICAgICAgICAgICAgY3NsID09IFRYX1RSQU5TUCA/ICJ0cmFuc3BhcmVudCIg OgorICAgICAgICAgICAgICAgIGNzbCA9PSBUWF9VTkRFRiA/ICJ1bmRlZmluZWQiIDogdHhyaW5m b1tjc2xdLT5rZXl3ZCk7CisgICAgZWxzZQorICAgICAgICBwcmludGYoIiAgICBMb2NhbDogJXNc biIsCisgICAgICAgICAgICAgICAgY3NsID09IFRYX1RSQU5TUCA/ICJ0cmFuc3BhcmVudCIgOgor ICAgICAgICAgICAgICAgIGNzbCA9PSBUWF9VTkRFRiA/ICJ1bmRlZmluZWQiIDogdHhyaW5mb1tj c2xdLT5rZXl3ZCk7CisKKyAgICBpZiAoIHR0X3V0ZjggKSB7CisgICAgICAgIHByaW50ZigiICAg UmVtb3RlOiBVVEYtOFxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCIgICBSZW1v dGU6ICVzRzA6ICVzICglcylcbiIsCisgICAgICAgICAgIEdMID09ICZHWzBdID8gIkdMLT4iIDog R1IgPT0gJkdbMF0gPyAiR1ItPiIgOiAiICAgICIsCisgICAgICAgICAgIHR4cmluZm9bR1swXS5k ZXNpZ25hdGlvbl0tPmtleXdkLAorICAgICAgICAgICBHWzBdLmRlc2lnbmF0aW9uID09IFRYX1RS QU5TUCA/ICIiIDoKKyAgICAgICAgICAgR1swXS5zaXplID09IGNzOTQgPyAiOTQgY2hhcnMiIDoK KyAgICAgICAgICAgR1swXS5zaXplID09IGNzOTYgPyAiOTYgY2hhcnMiIDogIm11bHRpLWJ5dGUi KTsKKyAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICVzRzE6ICVzICglcylcbiIsCisgICAgICAg ICAgIEdMID09ICZHWzFdID8gIkdMLT4iIDogR1IgPT0gJkdbMV0gPyAiR1ItPiIgOiAiICAgICIs CisgICAgICAgICAgIHR4cmluZm9bR1sxXS5kZXNpZ25hdGlvbl0tPmtleXdkLAorICAgICAgICAg ICBHWzFdLmRlc2lnbmF0aW9uID09IFRYX1RSQU5TUCA/ICIiIDoKKyAgICAgICAgICAgR1sxXS5z aXplID09IGNzOTQgPyAiOTQgY2hhcnMiIDoKKyAgICAgICAgICAgR1sxXS5zaXplID09IGNzOTYg PyAiOTYgY2hhcnMiIDogIm11bHRpLWJ5dGUiKTsKKyAgICAgICAgcHJpbnRmKCIgICAgICAgICAg ICVzRzI6ICVzICglcylcbiIsCisgICAgICAgICAgIEdMID09ICZHWzJdID8gIkdMLT4iIDogR1Ig PT0gJkdbMl0gPyAiR1ItPiIgOiAiICAgICIsCisgICAgICAgICAgIHR4cmluZm9bR1syXS5kZXNp Z25hdGlvbl0tPmtleXdkLAorICAgICAgICAgICBHWzJdLmRlc2lnbmF0aW9uID09IFRYX1RSQU5T UCA/ICIiIDoKKyAgICAgICAgICAgR1syXS5zaXplID09IGNzOTQgPyAiOTQgY2hhcnMiIDoKKyAg ICAgICAgICAgR1syXS5zaXplID09IGNzOTYgPyAiOTYgY2hhcnMiIDogIm11bHRpLWJ5dGUiKTsK KyAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICVzRzM6ICVzICglcylcbiIsCisgICAgICAgICAg IEdMID09ICZHWzNdID8gIkdMLT4iIDogR1IgPT0gJkdbM10gPyAiR1ItPiIgOiAiICAgICIsCisg ICAgICAgICAgIHR4cmluZm9bR1szXS5kZXNpZ25hdGlvbl0tPmtleXdkLAorICAgICAgICAgICBH WzNdLmRlc2lnbmF0aW9uID09IFRYX1RSQU5TUCA/ICIiIDoKKyAgICAgICAgICAgR1szXS5zaXpl ID09IGNzOTQgPyAiOTQgY2hhcnMiIDoKKyAgICAgICAgICAgR1szXS5zaXplID09IGNzOTYgPyAi OTYgY2hhcnMiIDogIm11bHRpLWJ5dGUiKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOworICAg IHByaW50ZigiIEtleWJvYXJkIGNoYXJhY3Rlci1zZXRzOlxuIik7CisgICAgcHJpbnRmKCIgICBN dWx0aW5hdGlvbmFsOiAlc1xuIix0eHJpbmZvW2RlY19rYmRdLT5rZXl3ZCk7CisgICAgcHJpbnRm KCIgICAgICAgIE5hdGlvbmFsOiAlc1xuIix0eHJpbmZvW2RlY19ucmNdLT5rZXl3ZCk7CisgICAg cHJpbnRmKCJcbiIpOworICAgIHByaW50ZigiIFByaW50ZXIgY2hhcmFjdGVyLXNldDogJXNcbiIs dHhyaW5mb1twcm5jc10tPmtleXdkKTsKKyNlbmRpZiAvKiBOT1RFUk0gKi8KKyNlbHNlIC8qIE9T MiAqLworI2lmbmRlZiBNQUMKKyAgICBjaGFyICpzOworCisgICAgZGVidWcoRjEwMSwiVEVSTSBM T0NBTCBDU0VUIiwiIixjc2wpOworICAgIGRlYnVnKEYxMDEsIlRFUk0gUkVNT1RFIENTRVQiLCIi LGNzcik7CisgICAgcHJpbnRmKCIgVGVybWluYWwgY2hhcmFjdGVyLXNldDogIik7CisgICAgaWYg KHRjc190cmFuc3ApIHsgICAgICAgICAgICAgICAgICAgLyogTm8gdHJhbnNsYXRpb24gKi8KKyAg ICAgICAgcHJpbnRmKCJ0cmFuc3BhcmVudFxuIik7CisgICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVHJhbnNsYXRpb24gKi8KKyAgICAgICAgcHJpbnRmKCIlcyAocmVt b3RlKSAlcyAobG9jYWwpXG4iLAorICAgICAgICAgICAgICAgZmNzaW5mb1tjc3JdLmtleXdvcmQs ZmNzaW5mb1tjc2xdLmtleXdvcmQpOworICAgICAgICBpZiAoY3NyICE9IGNzbCkgeworICAgICAg ICAgICAgc3dpdGNoKGdldHRjcyhjc3IsY3NsKSkgeworICAgICAgICAgICAgICBjYXNlIFRDX1VT QVNDSUk6ICBzID0gImFzY2lpIjsgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRD XzFMQVRJTjogICBzID0gImxhdGluMS1pc28iOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl IFRDXzJMQVRJTjogICBzID0gImxhdGluMi1pc28iOyAgIGJyZWFrOworICAgICAgICAgICAgICBj YXNlIFRDX0NZUklMTDogICBzID0gImN5cmlsbGljLWlzbyI7IGJyZWFrOworICAgICAgICAgICAg ICBjYXNlIFRDX0pFVUM6ICAgICBzID0gImphcGFuZXNlLWV1YyI7IGJyZWFrOworICAgICAgICAg ICAgICBjYXNlIFRDX0hFQlJFVzogICBzID0gImhlYnJldy1pc28iOyAgIGJyZWFrOworICAgICAg ICAgICAgICBjYXNlIFRDX0dSRUVLOiAgICBzID0gImdyZWVrLWlzbyI7ICAgIGJyZWFrOworICAg ICAgICAgICAgICBjYXNlIFRDXzlMQVRJTjogICBzID0gImxhdGluOS1pc28iOyAgIGJyZWFrOwor ICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICBzID0gInRyYW5zcGFyZW50IjsgIGJyZWFr OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cmNtcChzLGZjc2luZm9bY3NsXS5r ZXl3b3JkKSAmJgorICAgICAgICAgICAgICAgIHN0cmNtcChzLGZjc2luZm9bY3NyXS5rZXl3b3Jk KSkKKyAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICAgICAgICAgICAgICAgKHZpYSAl cylcbiIscyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworfQorCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRl ZiBPUzIKK2V4dGVybiBjaGFyIGh0YWJbXTsKK1ZPSUQKK3Nob3RhYnMoKSB7CisgICAgaW50IGks aixrLG47CisKKyAgICBwcmludGYoIlRhYiBTdG9wczpcblxuIik7CisgICAgZm9yIChpID0gMCwg aiA9IDEsIGsgPSBWc2NybkdldFdpZHRoKFZDTUQpOyBpIDwgTUFYVEVSTUNPTDsgKSB7CisgICAg ICAgIGRvIHsKKyAgICAgICAgICAgIHByaW50ZigiJWMiLGh0YWJbKytpXT09J1QnPydUJzonLScp OworICAgICAgICB9IHdoaWxlIChpICUgayAmJiBpIDwgTUFYVEVSTUNPTCk7CisgICAgICAgIHBy aW50ZigiXG4iKTsKKyAgICAgICAgZm9yICggOyBqIDw9IGk7IGorKykgeworICAgICAgICAgICAg c3dpdGNoICggaiUxMCApIHsKKwkgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcHJpbnRm KCIlYyIsaiA9PSAxID8gJzEnIDogJy4nKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAg ICBjYXNlIDI6CisJICAgICAgY2FzZSAzOgorCSAgICAgIGNhc2UgNDoKKwkgICAgICBjYXNlIDU6 CisJICAgICAgY2FzZSA2OgorCSAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICAgICBwcmludGYo IiVjIiwnLicpOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgIGNhc2UgODoKKyAgICAg ICAgICAgICAgICBuID0gKGorMikvMTAwOworICAgICAgICAgICAgICAgIGlmIChuKQorCQkgIHBy aW50ZigiJWQiLG4pOworICAgICAgICAgICAgICAgIGVsc2UgCisJCSAgcHJpbnRmKCIlYyIsJy4n KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICBjYXNlIDk6CisgICAgICAgICAgICAg ICAgbiA9IChqKzEpJTEwMC8xMDsKKyAgICAgICAgICAgICAgICBpZiAobikKKwkJICBwcmludGYo IiVkIixuKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChqPjkwKQorCQkgIHByaW50ZigiMCIp OworICAgICAgICAgICAgICAgIGVsc2UgCisJCSAgcHJpbnRmKCIlYyIsJy4nKTsKKyAgICAgICAg ICAgICAgICBicmVhazsKKwkgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgcHJpbnRmKCIw Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcHJpbnRmKCJcbiIpOworICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgZm9yIChpID0g MTsgaSA8PSA3MDsgaSsrKQorICAgICAgcHJpbnRmKCIlYyIsaHRhYltpXT09J1QnPydUJzonLScp OworICAgIHByaW50ZigiXG4xLi4uLi4uLjEwLi4uLi4uLi4yMC4uLi4uLi4uMzAuLi4uLi4uLjQw Li4uLi4uLi41MC4uLi4uLi4uNjBcCisuLi4uLi4uLjcwXG5cbiIpOworICAgIGZvciAoOyBpIDw9 IDE0MDsgaSsrKQorICAgICAgcHJpbnRmKCIlYyIsaHRhYltpXT09J1QnPydUJzonLScpOworICAg IHByaW50ZigiXG4uLi4uLi4uLjgwLi4uLi4uLi45MC4uLi4uLi4xMDAuLi4uLi4uMTEwLi4uLi4u LjEyMC4uLi4uLi4xMzBcCisuLi4uLi4uMTQwXG5cbiIpOworICAgIGZvciAoOyBpIDw9IDIxMDsg aSsrKQorICAgICAgcHJpbnRmKCIlYyIsaHRhYltpXT09J1QnPydUJzonLScpOworICAgIHByaW50 ZigiXG4uLi4uLi4uMTUwLi4uLi4uLjE2MC4uLi4uLi4xNzAuLi4uLi4uMTgwLi4uLi4uLjE5MC4u Li4uLi4yMDBcCisuLi4uLi4uMjEwXG5cbiIpOworICAgIGZvciAoOyBpIDw9IDI1NTsgaSsrKQor ICAgICAgcHJpbnRmKCIlYyIsaHRhYltpXT09J1QnPydUJzonLScpOworICAgIHByaW50ZigiXG4u Li4uLi4uMjIwLi4uLi4uLjIzMC4uLi4uLi4yNDAuLi4uLi4uMjUwLi4yNTVcbiIpOworI2VuZGlm CisKK30KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBP UzJNT1VTRQorVk9JRAorc2hvbW91KCkgeworICAgIGludCBidXR0b24sIGV2ZW50LCBpZCwgaTsK KyAgICBjaGFyICogbmFtZSA9ICIiOworCisgICAgcHJpbnRmKCJNb3VzZSBzZXR0aW5nczpcbiIp OworICAgIHByaW50ZigiICAgQnV0dG9uIENvdW50OiAgICVkXG4iLG1vdXNlYnV0dG9uY291bnQo KSk7CisgICAgcHJpbnRmKCIgICBBY3RpdmU6ICAgICAgICAgJXNcblxuIixzaG93b2ZmKHR0X21v dXNlKSk7CisKKyAgICBmb3IgKGJ1dHRvbiA9IDA7IGJ1dHRvbiA8IE1NQlVUVE9OTUFYOyBidXR0 b24rKykKKyAgICAgIGZvciAoZXZlbnQgPSAwOyBldmVudCA8IE1NRVZFTlRTSVpFOyBldmVudCsr KQorICAgICAgICBpZiAobW91c2VtYXBbYnV0dG9uXVtldmVudF0udHlwZSAhPSBlcnJvcikKKyAg ICAgICAgICBzd2l0Y2ggKG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLnR5cGUpIHsKKyAgICAgICAg ICAgIGNhc2Uga2V5OgorICAgICAgICAgICAgICBwcmludGYoIiAgICVzID0gQ2hhcmFjdGVyOiAl YyBcXCVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgbW91c2VuYW1lKGJ1dHRvbixldmVudCks CisgICAgICAgICAgICAgICAgICAgICBtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5rZXkuc2NhbmNv ZGUsCisgICAgICAgICAgICAgICAgICAgICBtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5rZXkuc2Nh bmNvZGUgKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGt2ZXJiOgor ICAgICAgICAgICAgICBpZCA9IG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLmt2ZXJiLmlkICYgfihG X0tWRVJCKTsKKyAgICAgICAgICAgICAgaWYgKGlkICE9IEtfSUdOT1JFKSB7CisgICAgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpPCBua3ZlcmJzOyBpKyspCisgICAgICAgICAgICAgICAgICAg IGlmIChpZCA9PSBrdmVyYnNbaV0ua3d2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5h bWUgPSBrdmVyYnNbaV0ua3dkOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgJXMgPSBLdmVy YjogXFxLJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VuYW1lKGJ1dHRvbixl dmVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZQorICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICBjYXNlIG1hY3JvOgorICAgICAgICAgICAgICBwcmludGYoIiAgICVzID0gTWFjcm86ICIs CisgICAgICAgICAgICAgICAgICAgICBtb3VzZW5hbWUoYnV0dG9uLGV2ZW50KSApOworICAgICAg ICAgICAgICBzaG9zdHJkZWYobW91c2VtYXBbYnV0dG9uXVtldmVudF0ubWFjcm8uc3RyaW5nKTsK KyAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICB9Cit9CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKworI2lmbmRlZiBOT0xPQ0FMCitWT0lE CitzaG90cm0oKSB7CisgICAgY2hhciAqczsKKyAgICBleHRlcm4gY2hhciAqIGdldGlhY3QoKTsK KyAgICBleHRlcm4gaW50IHR0X3ByaW50LCBhZGxfZXJyOworI2lmbmRlZiBOT1RSSUdHRVIKKyAg ICBleHRlcm4gY2hhciAqIHR0X3RyaWdnZXJbXTsKKyNlbmRpZiAvKiBOT1RSSUdHRVIgKi8KKyNp ZmRlZiBDS1RJRExFCisgICAgZXh0ZXJuIGNoYXIgKiB0dF9pZGxlc25kX3N0cjsKKyAgICBleHRl cm4gaW50IHR0X2lkbGVzbmRfdG1vOworICAgIGV4dGVybiBpbnQgdHRfaWRsZWxpbWl0LCB0dF9p ZGxlYWN0OworI2VuZGlmIC8qIENLVElETEUgKi8KKyNpZmRlZiBPUzIKKyAgICBleHRlcm4gaW50 IHd5X2F1dG9wYWdlLCBhdXRvc2Nyb2xsLCBzZ3Jjb2xvcnMsIGNvbG9ycmVzZXQsIHVzZXJfZXJh c2Vtb2RlLAorICAgICAgZGVjc2NubSwgZGVjc2NubV91c3IsIHR0X2RpZmZfdXBkLCB0dF9zZW5k ZGF0YSwKKyAgICAgIHd5X2Jsb2NrZW5kLCBtYXJnaW5iZWxsLCBtYXJnaW5iZWxsY29sLCB0dF9t b2RlY2hnLCBkZ3VuaXg7CisgICAgaW50IGxpbmVzID0gMDsKKyNpZmRlZiBLVUkKKyAgICBleHRl cm4gQ0tGTE9BVCB0dF9saW5lc3BhY2luZ1tdOworICAgIGV4dGVybiB0dF9jdXJzb3JfYmxpbms7 CisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgUENGT05UUworICAgIGludCBpOworICAgIGNoYXIg KmZvbnQ7CisKKyAgICBpZiAoSXNPUzJGdWxsU2NyZWVuKCkpIHsgICAgICAgICAgICAvKiBEZXRl cm1pbmUgdGhlIGZvbnQgbmFtZSAqLworICAgICAgICBpZiAoIW9zMkxvYWRQQ0ZvbnRzKCkpIHsK KyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudGVybWZvbnQ7IGkrKykgeworICAgICAgICAg ICAgICAgIGlmICh0dF9mb250ID09IHRlcm1fZm9udFtpXS5rd3ZhbCkgeworICAgICAgICAgICAg ICAgICAgICBmb250ID0gdGVybV9mb250W2ldLmt3ZDsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgZm9udCA9ICIoRExMIG5vdCBhdmFpbGFibGUpIjsKKyAgICAgICAgfQorICAg IH0gZWxzZSB7CisgICAgICAgIGZvbnQgPSAgICAgIihmdWxsIHNjcmVlbiBvbmx5KSI7CisgICAg fQorI2VuZGlmIC8qIFBDRk9OVFMgKi8KKyNpZmRlZiBLVUkKKyAgICBjaGFyIGZvbnRbNjRdID0g Iih1bmtub3duKSI7CisgICAgaWYgKCBudGVybWZvbnQgPiAwICkgeworICAgICAgICBpbnQgaTsK KyAgICAgICAgZm9yIChpID0gMDsgaSA8IG50ZXJtZm9udDsgaSsrKSB7CisgICAgICAgICAgICBp ZiAodHRfZm9udCA9PSB0ZXJtX2ZvbnRbaV0ua3d2YWwpIHsKKyAgICAgICAgICAgICAgICBja3N0 cm5jcHkoZm9udCx0ZXJtX2ZvbnRbaV0ua3dkLDU5KTsKKyAgICAgICAgICAgICAgICBja3N0cm5j YXQoZm9udCwiICIsNjQpOworICAgICAgICAgICAgICAgIGNrc3RybmNhdChmb250LGNraXRvYSh0 dF9mb250X3NpemUvMiksNjQpOworICAgICAgICAgICAgICAgIGlmICggdHRfZm9udF9zaXplICUg MiApCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNhdChmb250LCIuNSIsNjQpOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlm IC8qIEtVSSAqLworCisgICAgcHJpbnRmKCJUZXJtaW5hbCBwYXJhbWV0ZXJzOlxuIik7CisgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiAlMTlzOiAlMWQlLTEycyAgJTEzczogJTFkJS0x NHNcbiIsCisgICAgICAgICAgICJCeXRlc2l6ZTogQ29tbWFuZCIsCisgICAgICAgICAgIChjbWRt c2sgPT0gMDM3NykgPyA4IDogNywKKyAgICAgICAgICAgIiBiaXRzIiwiVGVybWluYWwiLAorICAg ICAgICAgICAoY21hc2sgPT0gMDM3NykgPyA4IDogNywiIGJpdHMiKTsKKyAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0g MDsgfQorICAgIHByaW50ZigiICUxOXM6ICUtMTNzIiwiVHlwZSIsCisgICAgICAgICAgICh0dF90 eXBlID49IDAgJiYgdHRfdHlwZSA8PSBtYXhfdHQpID8KKyAgICAgICAgICAgdHRfaW5mb1t0dF90 eXBlXS54X25hbWUgOgorICAgICAgICAgICAidW5rbm93biIgKTsKKyAgICBpZiAodHRfdHlwZSA+ PSAwICYmIHR0X3R5cGUgPD0gbWF4X3R0KQorICAgICAgaWYgKHN0cmxlbih0dF9pbmZvW3R0X3R5 cGVdLnhfaWQpKQorICAgICAgICBwcmludGYoIiAgJTEzczogPEVTQz4lcyIsIklEIix0dF9pbmZv W3R0X3R5cGVdLnhfaWQpOworICAgIHByaW50ZigiXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQor ICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiRWNobyIsCisgICAgICAg ICAgIGR1cGxleCA/ICJsb2NhbCIgOiAicmVtb3RlIiwiTG9ja2luZy1zaGlmdCIsc2hvd29mZihz b3NpKSk7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEz czogJS0xNXNcbiIsIk5ld2xpbmUtbW9kZSIsIHNob3dvZmYodG5sbSksCisJICAgIkNyLWRpc3Bs YXkiLHR0X2NyZCA/ICJjcmxmIiA6ICJub3JtYWwiKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAg IHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiQ3Vyc29yIiwKKyNpZmRlZiBL VUkKKwkgICAgKHR0X2N1cnNvciA9PSAyKSA/ICh0dF9jdXJzb3JfYmxpbmsgPyAKKwkJCQkgImZ1 bGwgKCopIiA6ICJmdWxsICguKSIpIDoKKwkgICAgKHR0X2N1cnNvciA9PSAxKSA/ICh0dF9jdXJz b3JfYmxpbmsgPyAKKwkJCQkgImhhbGYgKCopIiA6ICJoYWxmICguKSIpIDoKKwkgICAgKHR0X2N1 cnNvcl9ibGluayA/ICJ1bmRlcmxpbmUgKCopIiA6ICJ1bmRlcmxpbmUgKC4pIiksCisjZWxzZSAv KiBLVUkgKi8KKyAgICAgICAgICAgKHR0X2N1cnNvciA9PSAyKSA/ICJmdWxsIiA6CisgICAgICAg ICAgICh0dF9jdXJzb3IgPT0gMSkgPyAiaGFsZiIgOiAidW5kZXJsaW5lIiwKKyNlbmRpZiAvKiBL VUkgKi8KKyNpZmRlZiBDS19BVVRPREwKKyAgICAgICAgICAgImF1dG9kb3dubG9hZCIsYXV0b2Rs ID09IFRBRF9PTiA/CisgICAgICAgICAgIChhZGxfZXJyID8gIm9uLCBlcnJvciBzdG9wIiA6ICJv biwgZXJyb3IgY29udGludWUiKSA6IAorICAgICAgICAgICBhdXRvZGwgPT0gVEFEX0FTSyA/IAor ICAgICAgICAgICAoYWRsX2VyciA/ICJhc2ssIGVycm9yIHN0b3AiIDogImFzaywgZXJyb3IgY29u dGludWUiKSA6CisgICAgICAgICAgICJvZmYiCisjZWxzZSAvKiBDS19BVVRPREwgKi8KKyAgICAg ICAgICAgIiIsICIiCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisgICAgICAgICAgICk7CisgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIs IkFycm93LWtleXMiLAorICAgICAgICAgICB0dF9hcnJvdyA/ICJhcHBsaWNhdGlvbiIgOiAiY3Vy c29yIiwKKyAgICAgICAgICAgIktleXBhZC1tb2RlIiwgdHRfa2V5cGFkID8gImFwcGxpY2F0aW9u IiA6ICJudW1lcmljIgorICAgICAgICAgICApOworCisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93 cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKworICAg IC8qIEp1c3QgdG8gbWFrZSBzdXJlIHdlIGFyZSB1c2luZyBjdXJyZW50IGluZm8gKi8KKyAgICB1 cGRhbnN3ZXJiaygpOworCisgICAgLyoKKyAgICAgICBUaGlzIGxpbmUgZG9lc24ndCBlbmQgd2l0 aCAnXG4nIGJlY2F1c2UgdGhlIGFuc3dlcmJhY2sgc3RyaW5nCisgICAgICAgaXMgdGVybWluYXRl ZCB3aXRoIGEgbmV3bGluZQorICAgICovCisgICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6 ICUtMTVzIiwiQW5zd2VyYmFjayIsCisgICAgICAgICAgIHNob3dvZmYodHRfYW5zd2VyKSwicmVz cG9uc2UiLGFuc3dlcmJhY2spOworICAgIHN3aXRjaCAodHRfYmVsbCkgeworICAgICAgY2FzZSBY WUJfTk9ORToKKyAgICAgICAgcyA9ICJub25lIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IFhZQl9WSVM6CisgICAgICAgIHM9ICJ2aXNpYmxlIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBj YXNlIFhZQl9BVUQgfCBYWUJfQkVFUDoKKyAgICAgICAgcz0iYmVlcCI7CisgICAgICAgIGJyZWFr OworICAgICAgY2FzZSBYWUJfQVVEIHwgWFlCX1NZUzoKKyAgICAgICAgcz0ic3lzdGVtIHNvdW5k cyI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcz0iKHVua25vd24p IjsKKyAgICB9CisgICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICUtMTVzXG4iLCJCZWxs IixzLAorICAgICAgICAgICAiV3JhcCIsc2hvd29mZih0dF93cmFwKSk7CisgICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9 IDA7IH0KKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIkF1dG9wYWdl IixzaG93b2ZmKHd5X2F1dG9wYWdlKSwKKyAgICAgICAgICAgIkF1dG9zY3JvbGwiLHNob3dvZmYo YXV0b3Njcm9sbCkpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNr bW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgJTE5czogJS0x M3MgICUxM3M6ICUtMTVzXG4iLCJTR1IgQ29sb3JzIixzaG93b2ZmKHNncmNvbG9ycyksCisgICAg ICAgICAgICJFU0NbMG0gY29sb3IiLGNvbG9ycmVzZXQ/ImRlZmF1bHQtY29sb3IiOiJjdXJyZW50 LWNvbG9yIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAg JTEzczogJS0xNXNcbiIsCisgICAgICAgICAgICAiRXJhc2UgY29sb3IiLHVzZXJfZXJhc2Vtb2Rl PyJkZWZhdWx0LWNvbG9yIjoiY3VycmVudC1jb2xvciIsCisgICAgICAgICAgICJTY3JlZW4gbW9k ZSIsZGVjc2NubT8icmV2ZXJzZSI6Im5vcm1hbCIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisKKyAg ICBwcmludGYoIiAlMTlzOiAlLTEzZCAgJTEzczogJS0xNWRcbiIsIlRyYW5zbWl0LXRpbWVvdXQi LHR0X2N0c3RtbywKKyAgICAgICAgICAgIk91dHB1dC1wYWNpbmciLHR0X3BhY2luZyk7CisgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxz ZSBsaW5lcyA9IDA7IH0KKworICAgIHByaW50ZigiICUxOXM6ICUtMTNkICAlMTNzOiAlc1xuIiwi SWRsZS10aW1lb3V0Iix0dF9pZGxlbGltaXQsCisgICAgICAgICAgICJJZGxlLWFjdGlvbiIsIGdl dGlhY3QoKSk7CisKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiICUxOXM6ICUtMTNz ICAlMTNzOiAlLTE1c1xuIiwiU2VuZCBkYXRhIiwKKyAgICAgICAgICBzaG93b2ZmKHR0X3NlbmRk YXRhKSwiRW5kIG9mIEJsb2NrIiwgd3lfYmxvY2tlbmQ/ImNybGYvZXR4IjoidXMvY3IiKTsKKyAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIGxpbmVzID0gMDsgfQorI2lmbmRlZiBOT1RSSUdHRVIKKyAgICBwcmludGYoIiAlMTlzOiAl LTEzcyAgJTEzczogJWQgc2Vjb25kc1xuIiwiQXV0by1leGl0IHRyaWdnZXIiLAorICAgICAgICAg ICB0dF90cmlnZ2VyWzBdLCJPdXRwdXQgcGFjaW5nIix0dF9wYWNpbmcgKTsKKyAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVz ID0gMDsgfQorI2VuZGlmIC8qIE5PVFJJR0dFUiAqLworICAgIHByaW50ZigiICUxOXM6ICUtMTNz ICAlMTNzOiAlLTE1ZFxuIiwiTWFyZ2luIGJlbGwiLAorICAgICAgICAgICBzaG93b2ZmKG1hcmdp bmJlbGwpLCJhdCBjb2x1bW4iLCBtYXJnaW5iZWxsY29sKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQor ICAgIHN3aXRjaCAodHRfbW9kZWNoZykgeworICAgICAgY2FzZSBUVkNfRElTOiBzID0gImRpc2Fi bGVkIjsgYnJlYWs7CisgICAgICBjYXNlIFRWQ19FTkE6IHMgPSAiZW5hYmxlZCI7ICBicmVhazsK KyAgICAgIGNhc2UgVFZDX1c5NTogcyA9ICJ3aW45NS1yZXN0cmljdGVkIjsgYnJlYWs7CisgICAg ICBkZWZhdWx0OiBzID0gIih1bmtub3duKSI7CisgICAgfQorICAgIHByaW50ZigiICUxOXM6ICUt MTNzICAlMTNzOiAlLTE1c1xuIiwiREcgVW5peCBtb2RlIiwKKyAgICAgICAgICAgc2hvd29mZihk Z3VuaXgpLCJWaWRlbyBjaGFuZ2UiLCBzKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorCisjaWZkZWYg Q0tfQVBDCisgICAgaWYgKGFwY3N0YXR1cyA9PSBBUENfT04pIHMgPSAib24iOworICAgIGVsc2Ug aWYgKGFwY3N0YXR1cyA9PSBBUENfT0ZGKSBzID0gIm9mZiI7CisgICAgZWxzZSBpZiAoYXBjc3Rh dHVzID09IEFQQ19PTnxBUENfVU5DSCkgcyA9ICJ1bmNoZWNrZWQiOworICAgIGVsc2UgaWYgKGFw Y3N0YXR1cyA9PSBBUENfT058QVBDX05PSU5QKSBzID0gIm5vLWlucHV0IjsKKyAgICBlbHNlIGlm IChhcGNzdGF0dXMgPT0gQVBDX09OfEFQQ19VTkNIfEFQQ19OT0lOUCkgcyA9ICJ1bmNoZWNrZWQt bm8taW5wdXQiOworICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwKKyAg ICAgICAgICAgIkFQQyIsIHMsCisjaWZkZWYgUENGT05UUworICAgICAgICAgICAiRm9udCAoVkdB KSIsZm9udAorI2Vsc2UgLyogUENGT05UUyAqLworI2lmZGVmIEtVSQorICAgICAgICAgICAiRm9u dCIsZm9udAorI2Vsc2UKKyAgICAgICAgICAgIkZvbnQiLCIobm90IHN1cHBvcnRlZCkiCisjZW5k aWYgLyogS1VJICovCisjZW5kaWYgLyogUENGT05UUyAqLworCisgICAgICAgICAgICk7CisjZW5k aWYgLyogQ0tfQVBDICovCisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFh c2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKworI2lmZGVmIENLX1RUR1dTSVog ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnNvbGUgdGVybWluYWwgc2NyZWVuIHNpemUgKi8K KyAgICBpZiAodHRfY29sc1tWVEVSTV0gPCAwIHx8IHR0X3Jvd3NbVlRFUk1dIDwgMCkKKyAgICAg IHR0Z3dzaXooKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZ2V0IGxhdGVzdCBz aXplICovCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgIHByaW50ZigiICUxOXM6ICUtMTNk ICAlMTNzOiAlLTE1ZFxuIiwiSGVpZ2h0Iix0dF9yb3dzW1ZURVJNXSwKKyAgICAgICAgICAgIldp ZHRoIix0dF9jb2xzW1ZURVJNXSk7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyNpZmRlZiBLVUkKKyAg ICBwcmludGYoIiAlMTlzOiAlLTEyZiAgJTE0czogJS0xNWRcbiIsIkxpbmUgc3BhY2luZyIsdHRf bGluZXNwYWNpbmdbVlRFUk1dLAorICAgICAgICAgICAiRGlzcGxheSBIZWlnaHQiLFZzY3JuR2V0 RGlzcGxheUhlaWdodChWVEVSTSkpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogS1VJ ICovCisgICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUxM3M6ICVkIGxpbmVzXG4iLCJSb2xsLW1v ZGUiLAorICAgICAgICAgIHR0X3JvbGxbVlRFUk1dPyJpbnNlcnQiOiJvdmVyd3JpdGUiLCJTY3Jv bGxiYWNrIiwgdHRfc2Nyc2l6ZVtWVEVSTV0pOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisKKyAgICBp ZiAodXBkbW9kZSA9PSB0dF91cGRtb2RlKQorICAgICAgaWYgKHVwZG1vZGUgPT0gVFRVX0ZBU1Qp CisgICAgICAgIHMgPSAiZmFzdCAoZmFzdCkiOworICAgICAgZWxzZQorICAgICAgICBzID0gInNt b290aCAoc21vb3RoKSI7CisgICAgZWxzZQorICAgICAgaWYgKHVwZG1vZGUgPT0gVFRVX0ZBU1Qp CisgICAgICAgIHMgPSAiZmFzdCAoc21vb3RoKSI7CisgICAgICBlbHNlCisgICAgICAgIHMgPSAi c21vb3RoIChmYXN0KSI7CisKKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJWQgbXNc biIsIlNjcmVlbi11cGRhdGU6IG1vZGUiLHMsCisgICAgICAgICAgICJpbnRlcnZhbCIsdHRfdXBk YXRlKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkg cmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiICUxOXM6ICUtMTNzICAlMTNz OiAlLTE1c1xuIiwKKyAgICAgICAgICAgIlNjcmVlbi1vcHRpbWl6YXRpb24iLHNob3dvZmYodHRf ZGlmZl91cGQpLAorICAgICAgICAgICAiU3RhdHVzIGxpbmUiLHNob3dvZmYodHRfc3RhdHVzW1ZU RVJNXSkpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgJTE5czogJS0xM3MgICUx M3M6ICUtMTVzXG4iLCJEZWJ1ZyIsCisgICAgICAgICAgIHNob3dvZmYoZGVic2VzKSwiU2Vzc2lv biBsb2ciLCBzZXNsb2c/IHNlc2ZpbCA6ICIobm9uZSkiICk7CisgICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0K KworICAgIC8qIERpc3BsYXkgY29sb3JzIChzaG91bGQgYmVjb21lIFNIT1cgQ09MT1JTKSAqLwor ICAgIHsKKyAgICAgICAgVVNIT1JUIHJvdywgY29sOworICAgICAgICBjaGFyICogY29sb3JzWzE2 XSA9IHsKKyAgICAgICAgICAgICJibGFjayIsImJsdWUiLCJncmVlbiIsImN5YW4iLCJyZWQiLCJt YWdlbnRhIiwiYnJvd24iLCJsZ3JheSIsCisgICAgICAgICAgICAiZGdyYXkiLCJsYmx1ZSIsImxn cmVlbiIsImxjeWFuIiwibHJlZCIsImxtYWdlbnQiLCJ5ZWxsb3ciLCJ3aGl0ZSIKKyAgICAgICAg fTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorCisgICAg ICAgIHByaW50ZigiIENvbG9yOiIpOworI2lmbmRlZiBPTkVURVJNVVBECisgICAgICAgIEdldEN1 clBvcygmcm93LCAmY29sKTsKKyAgICAgICAgV3J0Q2hhclN0ckF0dCgiYm9yZGVyIiwgICAgNiwg cm93LCA5LCAmY29sb3Jib3JkZXIgKTsKKyAgICAgICAgV3J0Q2hhclN0ckF0dCgiZGVidWciLCAg ICAgNSwgcm93LCAxNywgJmNvbG9yZGVidWcgKTsKKyAgICAgICAgV3J0Q2hhclN0ckF0dCgiaGVs cHRleHQiLCAgOCwgcm93LCAyNSwgJmNvbG9yaGVscCApOworICAgICAgICBXcnRDaGFyU3RyQXR0 KCJyZXZlcnNlIiwgICA3LCByb3csIDM0LCAmY29sb3JyZXZlcnNlICk7CisgICAgICAgIFdydENo YXJTdHJBdHQoInNlbGVjdCIsICAgIDYsIHJvdywgNDIsICZjb2xvcnNlbGVjdCApOworICAgICAg ICBXcnRDaGFyU3RyQXR0KCJzdGF0dXMiLCAgICA2LCByb3csIDUwLCAmY29sb3JzdGF0dXMgKTsK KyAgICAgICAgV3J0Q2hhclN0ckF0dCgidGVybWluYWwiLCAgOCwgcm93LCA1OCwgJmNvbG9ybm9y bWFsICk7CisgICAgICAgIFdydENoYXJTdHJBdHQoInVuZGVybGluZSIsIDksIHJvdywgNjcsICZj b2xvcnVuZGVybGluZSApOworI2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8KKyAgICAgICAgcm93ID0g VnNjcm5HZXRDdXJQb3MoVkNNRCktPnkrMTsKKyAgICAgICAgVnNjcm5XcnRDaGFyU3RyQXR0KFZD TUQsICJib3JkZXIiLCAgICA2LCByb3csIDksICZjb2xvcmJvcmRlciApOworICAgICAgICBWc2Ny bldydENoYXJTdHJBdHQoVkNNRCwgImRlYnVnIiwgICAgIDUsIHJvdywgMTcsICZjb2xvcmRlYnVn ICk7CisgICAgICAgIFZzY3JuV3J0Q2hhclN0ckF0dChWQ01ELCAiaGVscHRleHQiLCAgOCwgcm93 LCAyNSwgJmNvbG9yaGVscCApOworICAgICAgICBWc2NybldydENoYXJTdHJBdHQoVkNNRCwgInJl dmVyc2UiLCAgIDcsIHJvdywgMzQsICZjb2xvcnJldmVyc2UgKTsKKyAgICAgICAgVnNjcm5XcnRD aGFyU3RyQXR0KFZDTUQsICJzZWxlY3QiLCAgICA2LCByb3csIDQyLCAmY29sb3JzZWxlY3QgKTsK KyAgICAgICAgVnNjcm5XcnRDaGFyU3RyQXR0KFZDTUQsICJzdGF0dXMiLCAgICA2LCByb3csIDUw LCAmY29sb3JzdGF0dXMgKTsKKyAgICAgICAgVnNjcm5XcnRDaGFyU3RyQXR0KFZDTUQsICJ0ZXJt aW5hbCIsICA4LCByb3csIDU4LCAmY29sb3Jub3JtYWwgKTsKKyAgICAgICAgVnNjcm5XcnRDaGFy U3RyQXR0KFZDTUQsICJ1bmRlcmxpbmUiLCAgOSwgcm93LCA2NywgJmNvbG9ydW5kZXJsaW5lICk7 CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKworICAgICAg ICAvKiBGb3JlZ3JvdW5kIGNvbG9yIG5hbWVzICovCisgICAgICAgIHByaW50ZigiJTZzOiAlLThz JS04cyUtOXMlLThzJS04cyUtOHMlLTlzJS05c1xuIiwiZm9yZSIsCisgICAgICAgICAgICAgICAg IiIsCisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yZGVidWcmMHgwRl0sCisgICAgICAgICAg ICAgICAgY29sb3JzW2NvbG9yaGVscCYweDBGXSwKKyAgICAgICAgICAgICAgICBjb2xvcnNbY29s b3JyZXZlcnNlJjB4MEZdLAorICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcnNlbGVjdCYweDBG XSwKKyAgICAgICAgICAgICAgICBjb2xvcnNbY29sb3JzdGF0dXMmMHgwRl0sCisgICAgICAgICAg ICAgICAgY29sb3JzW2NvbG9ybm9ybWFsJjB4MEZdLAorICAgICAgICAgICAgICAgIGNvbG9yc1tj b2xvcnVuZGVybGluZSYweDBGXSk7CisgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisKKyAgICAgICAg LyogQmFja2dyb3VuZCBjb2xvciBuYW1lcyAqLworICAgICAgICBwcmludGYoIiU2czogJS04cyUt OHMlLTlzJS04cyUtOHMlLThzJS05cyUtOXNcbiIsImJhY2siLAorICAgICAgICAgICAgICAgIGNv bG9yc1tjb2xvcmJvcmRlcl0sCisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yZGVidWc+PjRd LAorICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcmhlbHA+PjRdLAorICAgICAgICAgICAgICAg IGNvbG9yc1tjb2xvcnJldmVyc2U+PjRdLAorICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcnNl bGVjdD4+NF0sCisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yc3RhdHVzPj40XSwKKyAgICAg ICAgICAgICAgICBjb2xvcnNbY29sb3Jub3JtYWw+PjRdLAorICAgICAgICAgICAgICAgIGNvbG9y c1tjb2xvcnVuZGVybGluZT4+NF0gKTsKKyAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICAgICAg cHJpbnRmKCJcbiIpOworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAo IWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQorICAgICAgICBwcmludGYoIiBD b2xvcjoiKTsKKyNpZm5kZWYgT05FVEVSTVVQRAorICAgICAgICBHZXRDdXJQb3MoJnJvdywgJmNv bCk7CisgICAgICAgIFdydENoYXJTdHJBdHQoImdyYXBoaWMiLCAgIDcsIHJvdywgOSwgJmNvbG9y Z3JhcGhpYyApOworICAgICAgICBXcnRDaGFyU3RyQXR0KCJjb21tYW5kIiwgICA3LCByb3csIDE3 LCAmY29sb3JjbWQgKTsKKyAgICAgICAgV3J0Q2hhclN0ckF0dCgiaXRhbGljIiwgICAgNiwgcm93 LCAyNiwgJmNvbG9yaXRhbGljICk7CisjZW5kaWYgLyogT05FVEVSTVVQRCAqLworICAgICAgICBy b3cgPSBWc2NybkdldEN1clBvcyhWQ01EKS0+eSsxOworICAgICAgICBWc2NybldydENoYXJTdHJB dHQoVkNNRCwgImdyYXBoaWMiLCAgIDcsIHJvdywgOSwgICZjb2xvcmdyYXBoaWMgKTsKKyAgICAg ICAgVnNjcm5XcnRDaGFyU3RyQXR0KFZDTUQsICJjb21tYW5kIiwgICA3LCByb3csIDE3LCAmY29s b3JjbWQgKTsKKyAgICAgICAgVnNjcm5XcnRDaGFyU3RyQXR0KFZDTUQsICJpdGFsaWMiLCAgICA2 LCByb3csIDI2LCAmY29sb3JpdGFsaWMgKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAg ICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBl bHNlIGxpbmVzID0gMDsgfQorCisgICAgICAgIC8qIEZvcmVncm91bmQgY29sb3IgbmFtZXMgKi8K KyAgICAgICAgcHJpbnRmKCIlNnM6ICUtOHMlLThzJS04c1xuIiwiZm9yZSIsCisgICAgICAgICAg ICAgICAgY29sb3JzW2NvbG9yZ3JhcGhpYyYweDBGXSwKKyAgICAgICAgICAgICAgICBjb2xvcnNb Y29sb3JjbWQmMHgwRl0sCisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yaXRhbGljJjB4MEZd KTsKKyAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKworICAgICAgICAvKiBCYWNrZ3JvdW5kIGNvbG9y IG5hbWVzICovCisgICAgICAgIHByaW50ZigiJTZzOiAlLThzJS04cyUtOHNcbiIsImJhY2siLAor ICAgICAgICAgICAgICAgIGNvbG9yc1tjb2xvcmdyYXBoaWM+PjRdLAorICAgICAgICAgICAgICAg IGNvbG9yc1tjb2xvcmNtZD4+NF0sCisgICAgICAgICAgICAgICAgY29sb3JzW2NvbG9yaXRhbGlj Pj40XSk7CisgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgfQorICAgIHByaW50ZigiXG4iKTsK KyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJu OyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHsKKyAgICAgICAgZXh0ZXJuIGludCB0cnVlYmxpbmss IHRydWVkaW0sIHRydWVyZXZlcnNlLCB0cnVldW5kZXJsaW5lLCB0cnVlaXRhbGljOworICAgICAg ICBwcmludGYoCisJICAgICIgQXR0cmlidXRlOiAgXAorYmxpbms6ICUtM3MgIGRpbTogJS0zcyAg aXRhbGljOiAlLTNzICByZXZlcnNlOiAlLTNzICB1bmRlcmxpbmU6ICUtM3NcbiIsCisJICAgIHRy dWVibGluaz8ib24iOiJvZmYiLCB0cnVlZGltPyJvbiI6Im9mZiIsIHRydWVpdGFsaWM/Im9uIjoi b2ZmIiwgCisJICAgIHRydWVyZXZlcnNlPyJvbiI6Im9mZiIsIHRydWV1bmRlcmxpbmU/Im9uIjoi b2ZmIik7CisgICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm47IGVsc2UgbGluZXMgPSAwOyB9CisgICAgfQorICAgIHsKKyAgICAgICAgZXh0 ZXJuIHZ0YXR0cmliIFdQYXR0cmliOworICAgICAgICBwcmludGYoIiBBU0NJSSBQcm90ZWN0ZWQg Y2hhcnM6ICVzJXMlcyVzJXMlcyVzXG4iLAorICAgICAgICAgICAgICAgIFdQYXR0cmliLmJsaW5r aW5nPyJibGluayAiOiIiLAorICAgICAgICAgICAgICAgIFdQYXR0cmliLml0YWxpYz8iaXRhbGlj ICI6IiIsCisgICAgICAgICAgICAgICAgV1BhdHRyaWIucmV2ZXJzZWQ/InJldmVyc2UgIjoiIiwK KyAgICAgICAgICAgICAgICBXUGF0dHJpYi51bmRlcmxpbmVkPyJ1bmRlcmxpbmUgIjoiIiwKKyAg ICAgICAgICAgICAgICBXUGF0dHJpYi5ib2xkPyJib2xkICI6IiIsCisgICAgICAgICAgICAgICAg V1BhdHRyaWIuZGltPyJkaW0gIjoiIiwKKyAgICAgICAgICAgICAgICBXUGF0dHJpYi5pbnZpc2li bGU/ImludmlzaWJsZSAiOiIiKTsKKyAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICB9CisKKyAg ICBwcmludGYoIlxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFh c2ttb3JlKCkpIHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICAoVk9JRCkgc2hvZXNjKGVz Y2FwZSk7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybjsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiBTZWUgU0hPVyBDSEFSQUNU RVItU0VUUyBmb3IgY2hhcmFjdGVyLXNldCBpbmZvXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuOyBlbHNlIGxpbmVzID0gMDsgfQor CisjZWxzZSAvKiBPUzIgKi8gICAvKiBCZWdpbm5pbmcgb2YgbmV3IG5vbi1PUzIgdmVyc2lvbiAq LworCisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50ZigiVGVybWluYWwgcGFyYW1ldGVyczpc biIpOworICAgIHByaW50ZigiICUxOXM6ICUxZCUtMTJzICAlMTNzOiAlMWQlLTE0c1xuIiwKKyAg ICAgICAgICAgIkJ5dGVzaXplOiBDb21tYW5kIiwKKyAgICAgICAgICAgKGNtZG1zayA9PSAwMzc3 KSA/IDggOiA3LAorICAgICAgICAgICAiIGJpdHMiLCJUZXJtaW5hbCIsCisgICAgICAgICAgIChj bWFzayA9PSAwMzc3KSA/IDggOiA3LCIgYml0cyIpOworICAgIHMgPSBnZXRlbnYoIlRFUk0iKTsK KyNpZmRlZiBYUFJJTlQKKyAgICBwcmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIs CisgICAgICAgICAgICJUeXBlIiwKKyAgICAgICAgICAgcyA/IHMgOiAiKHVua25vd24pIiwKKyAg ICAgICAgICAgIlByaW50IiwKKyAgICAgICAgICAgc2hvd29mZih0dF9wcmludCkKKyAgICAgICAg ICAgKTsKKyNlbHNlCisgICAgcHJpbnRmKCIgJTE5czogJS0xM3NcbiIsIlR5cGUiLCBzID8gcyA6 ICIodW5rbm93bikiKTsKKyNlbmRpZiAvKiBYUFJJTlQgKi8KKyAgICBwcmludGYoIiAlMTlzOiAl LTEzcyAgJTEzczogJS0xNXNcbiIsIkVjaG8iLAorICAgICAgICAgICBkdXBsZXggPyAibG9jYWwi IDogInJlbW90ZSIsIkxvY2tpbmctc2hpZnQiLHNob3dvZmYoc29zaSkpOworICAgIHByaW50Zigi ICUxOXM6ICUtMTNzICAlMTNzOiAlLTE1c1xuIiwiTmV3bGluZS1tb2RlIiwKKyAgICAgICAgICAg c2hvd29mZih0bmxtKSwiQ3ItZGlzcGxheSIsdHRfY3JkID8gImNybGYiIDogIm5vcm1hbCIpOwor CisjaWZkZWYgQ0tfQVBDCisgICAgaWYgKGFwY3N0YXR1cyA9PSBBUENfT04pIHMgPSAib24iOwor ICAgIGVsc2UgaWYgKGFwY3N0YXR1cyA9PSBBUENfT0ZGKSBzID0gIm9mZiI7CisgICAgZWxzZSBp ZiAoYXBjc3RhdHVzID09IChBUENfT058QVBDX1VOQ0gpKSBzID0gInVuY2hlY2tlZCI7CisgICAg ZWxzZSBpZiAoYXBjc3RhdHVzID09IChBUENfT058QVBDX05PSU5QKSkgcyA9ICJuby1pbnB1dCI7 CisgICAgZWxzZSBpZiAoYXBjc3RhdHVzID09IChBUENfT058QVBDX1VOQ0h8QVBDX05PSU5QKSkK KyAgICAgIHMgPSAidW5jaGVja2VkLW5vLWlucHV0IjsKKyAgICBwcmludGYoIiAlMTlzOiAlLTEz cyAgJTEzczogJS0xNXNcbiIsCisgICAgICAgICAgICJBUEMiLCBzLAorI2lmZGVmIENLX0FVVE9E TAorICAgICAgICAgICAiQXV0b2Rvd25sb2FkIiwgYXV0b2RsID8KKyAgICAgICAgICAgKGFkbF9l cnIgPyAib24sIGVycm9yIHN0b3AiIDogIm9uLCBlcnJvciBjb250aW51ZSIpIDogIm9mZiIKKyNl bHNlCisgICAgICAgICAgICIiLCIiCisjZW5kaWYgLyogQ0tfQVVUT0RMICovCisgICAgICAgICAg ICk7CisjZW5kaWYgLyogQ0tfQVBDICovCisKKyNpZmRlZiBDS19UVEdXU0laICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb25zb2xlIHRlcm1pbmFsIHNjcmVlbiBzaXplICovCisgICAgdHRnd3Np eigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGdldCBsYXRlc3Qgc2l6ZSAq LworICAgIHByaW50ZigiICUxOXM6ICUtMTNkICAlMTNzOiAlLTE1ZFxuIiwiSGVpZ2h0Iix0dF9y b3dzLCAiV2lkdGgiLCB0dF9jb2xzKTsKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisKKyAgICBw cmludGYoIiAlMTlzOiAlLTEzcyAgJTEzczogJS0xNXNcbiIsIkRlYnVnIiwKKyAgICAgICAgICAg c2hvd29mZihkZWJzZXMpLCJTZXNzaW9uIGxvZyIsIHNlc2xvZz8gc2VzZmlsIDogIihub25lKSIg KTsKKworI2lmZGVmIENLVElETEUKKyAgICBwcmludGYoIiAlMTlzOiAlLTEzZCAgJTEzczogJXNc biIsIklkbGUtdGltZW91dCIsdHRfaWRsZWxpbWl0LAorICAgICAgICAgICAiSWRsZS1hY3Rpb24i LCBnZXRpYWN0KCkpOworI2VuZGlmIC8qIENLVElETEUgKi8KKworICAgIHByaW50ZigiICUxOXM6 ICUtMTNzICAiLCJMZi1kaXNwbGF5IiwgdHRfbGZkID8gImNybGYiIDogIm5vcm1hbCIpOworI2lm ZGVmIFVOSVgKKyNpZm5kZWYgTk9KQworICAgIHByaW50ZigiJTEzczogJS0xNXMiLCJTdXNwZW5k Iiwgc2hvd29mZih4c3VzcGVuZCkpOworI2VuZGlmIC8qIE5PSkMgKi8KKyNlbmRpZiAvKiBVTklY ICovCisgICAgcHJpbnRmKCJcbiIpOworCisjaWZuZGVmIE5PVFJJR0dFUgorICAgIHByaW50Zigi ICUxOXM6ICUtMTNzXG4iLCJUcmlnZ2VyIiwKKyAgICAgICAgICAgdHRfdHJpZ2dlclswXSA/IHR0 X3RyaWdnZXJbMF0gOiAiKG5vbmUpIik7CisjZW5kaWYgLyogTk9UUklHR0VSICovCisgICAgcHJp bnRmKCJcbiIpOworCisgICAgKFZPSUQpIHNob2VzYyhlc2NhcGUpOworI2lmbmRlZiBOT0NTRVRT CisgICAgc2hvdGNzKHRjc2wsdGNzcik7ICAgICAgICAgIC8qIFNob3cgdGVybWluYWwgY2hhcmFj dGVyIHNldHMgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNlbmRpZiAvKiBPUzIgKi8KK30K KworVk9JRAorc2htZG1saW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJyaWVm bHkgc2hvdyBtb2RlbSAmIGxpbmUgKi8KKyNpZm5kZWYgTk9ESUFMCisjaWZuZGVmIE1JTklESUFM CisjaWZkZWYgT0xEVEJDT0RFCisgICAgZXh0ZXJuIGludCB0Ym1vZGVsOworICAgIF9QUk9UT1RZ UCggY2hhciAqIGd0Ym1vZGVsLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBPTERUQkNPREUgKi8KKyNl bmRpZiAvKiBNSU5JRElBTCAqLworI2VuZGlmIC8qIE5PRElBTCAqLworICAgIGlmIChsb2NhbCkK KyNpZmRlZiBPUzIKKyAgICAgIHByaW50ZigiIFBvcnQ6ICVzLCBNb2RlbSB0eXBlOiAiLHR0bmFt ZSk7CisjZWxzZQorICAgICAgcHJpbnRmKCIgTGluZTogJXMsIE1vZGVtIHR5cGU6ICIsdHRuYW1l KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBlbHNlCisgICAgICBwcmludGYoCisjaWZkZWYgT1My CisiIENvbW11bmljYXRpb24gZGV2aWNlIG5vdCB5ZXQgc2VsZWN0ZWQgd2l0aCBTRVQgUE9SVFxu IE1vZGVtIHR5cGU6ICIKKyNlbHNlCisiIENvbW11bmljYXRpb24gZGV2aWNlIG5vdCB5ZXQgc2Vs ZWN0ZWQgd2l0aCBTRVQgTElORVxuIE1vZGVtIHR5cGU6ICIKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgICAgICAgICApOworI2lmbmRlZiBOT0RJQUwKKyAgICBwcmludGYoIiVzIixnbWRtdHlwKCkp OworI2lmbmRlZiBNSU5JRElBTAorI2lmZGVmIE9MRFRCQ09ERQorICAgIGlmICh0Ym1vZGVsKSBw cmludGYoIiAoJXMpIixndGJtb2RlbCgpKTsgLyogVGVsZWJpdCBtb2RlbCBpbmZvICovCisjZW5k aWYgLyogT0xEVEJDT0RFICovCisjZW5kaWYgLyogTUlOSURJQUwgKi8KKyNlbHNlCisgICAgcHJp bnRmKCIoZGlzYWJsZWQpIik7CisjZW5kaWYgLyogTk9ESUFMICovCit9CisKKyNpZmRlZiBDS19U QVBJCit2b2lkCitzaG90YXBpKGludCBvcHRpb24pIHsKKyAgICBpbnQgcmM9MCxrIDsKKyAgICBj aGFyICpzPU5VTEw7CisgICAgTFBERVZDRkcgICAgICAgIGxwRGV2Q2ZnID0gTlVMTDsKKyAgICBM UENPTU1DT05GSUcgICAgbHBDb21tQ29uZmlnID0gTlVMTDsKKyAgICBMUE1PREVNU0VUVElOR1Mg bHBNb2RlbVNldHRpbmdzID0gTlVMTDsKKyAgICBEQ0IgKiAgICAgICAgICAgbHBEQ0IgPSBOVUxM OworICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICogdGFwaWxvY3RhYjsgIC8qIE1pY3Jvc29mdCBU QVBJIExvY2F0aW9ucyAqLworICAgIGV4dGVybiBpbnQgbnRhcGlsb2M7CisgICAgZXh0ZXJuIHN0 cnVjdCBrZXl0YWIgKiB0YXBpbGluZXRhYjsgLyogTWljcm9zb2Z0IFRBUEkgTGluZSBEZXZpY2Vz ICovCisgICAgZXh0ZXJuIGludCBudGFwaWxpbmU7CisgICAgZXh0ZXJuIGludCB0dHRhcGk7ICAg ICAgICAgICAgICAgICAgLyogVEFQSSBpbiB1c2UgKi8KKyAgICBleHRlcm4gaW50IHRhcGlwYXNz OyAgICAgICAgICAgICAgICAvKiBUQVBJIFBhc3N0aHJvdWdoIG1vZGUgKi8KKyAgICBleHRlcm4g aW50IHRhcGljb252OyAgICAgICAgICAgICAgICAvKiBUQVBJIENvbnZlcnNpb24gbW9kZSAqLwor ICAgIGV4dGVybiBpbnQgdGFwaWxpZ2h0czsKKyAgICBleHRlcm4gaW50IHRhcGlwcmV0ZXJtOwor ICAgIGV4dGVybiBpbnQgdGFwaXBvc3R0ZXJtOworICAgIGV4dGVybiBpbnQgdGFwaW1hbnVhbDsK KyAgICBleHRlcm4gaW50IHRhcGlpbmFjdGl2aXR5OworICAgIGV4dGVybiBpbnQgdGFwaWJvbmc7 CisgICAgZXh0ZXJuIGludCB0YXBpdXNlY2ZnOworICAgIGV4dGVybiBjaGFyIHRhcGlsb2NbXTsK KyAgICBleHRlcm4gaW50IHRhcGlsb2NpZDsKKyAgICBleHRlcm4gaW50IFRBUElBdmFpbDsKKwor ICAgIGlmICghVEFQSUF2YWlsKSB7CisgICAgICAgIHByaW50ZigiVEFQSSBTdXBwb3J0IG5vdCBl bmFibGVkXHJcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAob3B0aW9u KSB7CisgICAgICBjYXNlIDA6CisgICAgICAgIHByaW50ZigiVEFQSSBTZXR0aW5nczpcbiIpOwor ICAgICAgICBwcmludGYoIiAgTGluZTogICAgICAgICAgICAgICAgICAgICAgJXNcbiIsCisgICAg ICAgICAgICAgICB0dHRhcGkgPyB0dG5hbWUgOiAiKG5vbmUgaW4gdXNlKSIpOworCisgICAgICAg IGNrdGFwaUJ1aWxkTG9jYXRpb25UYWJsZSgmdGFwaWxvY3RhYiwgJm50YXBpbG9jKTsKKyAgICAg ICAgaWYgKHRhcGlsb2NpZCA9PSAtMSkKKyAgICAgICAgICB0YXBpbG9jaWQgPSBja3RhcGlHZXRD dXJyZW50TG9jYXRpb25JRCgpOworCisgICAgICAgIC8qIEZpbmQgdGhlIGN1cnJlbnQgdGFwaWxv YyBlbnRyeSAqLworICAgICAgICAvKiBhbmQgdXNlIGl0IGFzIHRoZSBkZWZhdWx0LiAqLworICAg ICAgICBmb3IgKGsgPSAwOyBrIDwgbnRhcGlsb2M7IGsrKykgeworICAgICAgICAgICAgaWYgKHRh cGlsb2N0YWJba10ua3d2YWwgPT0gdGFwaWxvY2lkKQorICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgICAgICBpZiAoayA+PSAwICYmIGsgPCBudGFwaWxvYykKKyAgICAgICAgICBz ID0gdGFwaWxvY3RhYltrXS5rd2Q7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzID0gIih1bmtu b3duKSI7CisgICAgICAgIHByaW50ZigiICBMb2NhdGlvbjogICAgICAgICAgICAgICAgICAlc1xu IixzKTsKKyAgICAgICAgcHJpbnRmKCIgIE1vZGVtLWRpYWxpbmc6ICAgICAgICAgICAgICVzXG4i LHRhcGlwYXNzPyJvZmYiOiJvbiIpOworICAgICAgICBwcmludGYoIiAgUGhvbmUtbnVtYmVyLWNv bnZlcnNpb25zOiAgJXNcbiIsCisgICAgICAgICAgICAgICAgdGFwaWNvbnY9PUNLX09OPyJvbiI6 dGFwaWNvbnY9PUNLX0FVVE8/ImF1dG8iOiJvZmYiKTsKKyAgICAgICAgcHJpbnRmKCIgIE1vZGVt LWxpZ2h0czogICAgICAgICAgICAgICVzICVzXG4iLHRhcGlsaWdodHM/Im9uICI6Im9mZiIsCisg ICAgICAgICAgICAgICAgdGFwaXBhc3M/IihuL2EpIjoiIik7CisgICAgICAgIHByaW50ZigiICBQ cmVkaWFsLXRlcm1pbmFsOiAgICAgICAgICAlcyAlc1xuIix0YXBpcHJldGVybT8ib24gIjoib2Zm IiwKKyAgICAgICAgICAgICAgICB0YXBpcGFzcz8iKG4vYSkiOiIiKTsKKyAgICAgICAgcHJpbnRm KCIgIFBvc3RkaWFsLXRlcm1pbmFsOiAgICAgICAgICVzICVzXG4iLHRhcGlwb3N0dGVybT8ib24g Ijoib2ZmIiwKKyAgICAgICAgICAgICAgICB0YXBpcGFzcz8iKG4vYSkiOiIiKTsKKyAgICAgICAg cHJpbnRmKCIgIE1hbnVhbC1kaWFsOiAgICAgICAgICAgICAgICVzICVzXG4iLHRhcGltYW51YWw/ Im9uICI6Im9mZiIsCisgICAgICAgICAgICAgICAgdGFwaXBhc3M/IihuL2EpIjoiIik7CisgICAg ICAgIHByaW50ZigiICBJbmFjdGl2aXR5LXRpbWVvdXQ6ICAgICAgICAlZCBzZWNvbmRzICVzXG4i LHRhcGlpbmFjdGl2aXR5LAorICAgICAgICAgICAgICAgIHRhcGlwYXNzPyIobi9hKSI6IiIpOwor ICAgICAgICBwcmludGYoIiAgV2FpdC1mb3ItYm9uZzogICAgICAgICAgICAgJWQgc2Vjb25kcyAl c1xuIix0YXBpYm9uZywKKyAgICAgICAgICAgICAgICB0YXBpcGFzcz8iKG4vYSkiOiIiKTsKKyAg ICAgICAgcHJpbnRmKCIgIFVzZS13aW5kb3dzLWNvbmZpZ3VyYXRpb246ICVzICVzXG4iLAorICAg ICAgICAgICAgICAgIHRhcGl1c2VjZmc/Im9uICI6Im9mZiIsIHRhcGlwYXNzPyIobi9hKSI6IiIp OworICAgICAgICBwcmludGYoIlxuIik7CisKKyNpZmRlZiBCRVRBVEVTVAorICAgICAgICBpZiAo dGFwaXBhc3MpIHsKK3ByaW50ZigiSy05NSB1c2VzIHRoZSBUQVBJIExpbmUgaW4gYW4gZXhjbHVz aXZlIG1vZGUuICBPdGhlciBhcHBsaWNhdGlvbnNcbiIpOworcHJpbnRmKCJtYXkgb3BlbiB0aGUg ZGV2aWNlIGJ1dCBtYXkgbm90IHBsYWNlIGNhbGxzIG5vciBhbnN3ZXIgY2FsbHMuXG4iKTsKK3By aW50ZigiRGlhbGluZyBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIEstOTUgZGlhbGluZyBwcm9jZWR1 cmVzLiAgU0VUIE1PREVNXG4iKTsKK3ByaW50ZigiVFlQRSBUQVBJIGFmdGVyIHRoZSBTRVQgVEFQ SSBMSU5FIGNvbW1hbmQgdG8gYWN0aXZhdGUgdGhlIG1vZGVtXG4iKTsKK3ByaW50ZigiZGVmaW5p dGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGFjdGl2ZSBUQVBJIExJTkUgZGV2aWNlLlxuXG4iKTsK KworICAgICAgICB9IGVsc2UgeworCitwcmludGYoIkstOTUgdXNlcyB0aGUgVEFQSSBMaW5lIGlu IGEgY29vcGVyYXRpdmUgbW9kZS4gIE90aGVyIGFwcGxpY2F0aW9uc1xuIik7CitwcmludGYoIm1h eSBvcGVuIHRoZSBkZXZpY2UsIHBsYWNlIGFuZCBhbnN3ZXIgY2FsbHMuICBEaWFsaW5nIGlzIHBl cmZvcm1lZFxuIik7CitwcmludGYoImJ5IFRBUEkuICBLLTk1IFNFVCBNT0RFTSBjb21tYW5kcyBh cmUgbm90IHVzZWQuXG5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRhcGljb252ID09 IENLX09OIHx8CisgICAgICAgICAgICB0YXBpY29udiA9PSBDS19BVVRPICYmICF0YXBpcGFzcykg eworcHJpbnRmKAorIlBob25lIG51bWJlcnMgYXJlIGNvbnZlcnRlZCBmcm9tIGNhbm9uaWNhbCB0 byBkaWFsYWJsZSBmb3JtIGJ5IFRBUElcbiIpOworcHJpbnRmKCJ1c2luZyB0aGUgZGlhbGluZyBy dWxlcyBzcGVjaWZpZWQgaW4gdGhlIFRBUEkgRGlhbGluZyBQcm9wZXJ0aWVzXG4iKTsKK3ByaW50 ZigiZGlhbG9nLlxuXG4iKTsKKworICAgICAgICB9IGVsc2UgeworCitwcmludGYoCisiUGhvbmUg bnVtYmVycyBhcmUgY29udmVydGVkIGZyb20gY2Fub25pY2FsIHRvIGRpYWxhYmxlIGZvcm0gYnkg Sy05NVxuIik7CitwcmludGYoCisidXNpbmcgdGhlIGRpYWxpbmcgcnVsZXMgc3BlY2lmaWVkIHdp dGggdGhlIFNFVCBESUFMIGNvbW1hbmRzLiAgVEFQSVxuIik7CitwcmludGYoCisiRGlhbGluZyBQ cm9wZXJ0aWVzIGFyZSBpbXBvcnRlZCBhdXRvbWF0aWNseSB1cG9uIHN0YXJ0dXAgYW5kIHdoZW5l dmVyXG4iKTsKK3ByaW50ZigidGhlIFRBUEkgRGlhbGluZyBQcm9wZXJ0aWVzIGFyZSBhbHRlcmVk IG9yIHdoZW4gdGhlIFRBUEkgTG9jYXRpb25cbiIpOworcHJpbnRmKCJpcyBjaGFuZ2VkLlxuXG4i KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIEJFVEFURVNUICovCisKKyAgICAgICAgaWYgKHRhcGlw YXNzKSB7CisgICAgICAgICAgICBwcmludGYoIlR5cGUgU0hPVyBNT0RFTSB0byBzZWUgTU9ERU0g Y29uZmlndXJhdGlvbi5cbiIpOworICAgICAgICAgICAgaWYgKHRhcGljb252ID09IENLX09OKQor ICAgICAgICAgICAgICBwcmludGYoIlR5cGUgU0hPVyBESUFMIHRvIHNlZSBESUFMLXJlbGF0ZWQg aXRlbXMuXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0YXBpY29udiA9 PSBDS19PTiB8fCB0YXBpY29udiA9PSBDS19BVVRPKQorICAgICAgICAgICAgICBwcmludGYoIlR5 cGUgU0hPVyBESUFMIHRvIHNlZSBESUFMLXJlbGF0ZWQgaXRlbXMuXG4iKTsKKyAgICAgICAgfQor ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMToKKyAgICAgICAgY2t0YXBpRGlzcGxheVRhcGlM b2NhdGlvbkluZm8oKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDI6CisgICAgICAgIHJj ID0gY2t0YXBpR2V0TW9kZW1TZXR0aW5ncygmbHBEZXZDZmcsJmxwTW9kZW1TZXR0aW5ncywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHBDb21tQ29uZmlnLCZscERDQik7 CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgY2t0YXBpRGlzcGxheU1vZGVtU2V0dGlu Z3MobHBEZXZDZmcsbHBNb2RlbVNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBscENvbW1Db25maWcsbHBEQ0IpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIHJldHJpZXZlIE1vZGVtIFNldHRpbmdzXG4iKTsK KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMzogeworICAgICAgICAgIEhB TkRMRSBoTW9kZW0gPSBHZXRNb2RlbUhhbmRsZUZyb21MaW5lKChITElORSkwKTsKKyAgICAgICAg ICBpZiAoaE1vZGVtKQorICAgICAgICAgICAgRGlzcGxheUNvbW1Qcm9wZXJ0aWVzKGhNb2RlbSk7 CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCI/VW5hYmxlIHRvIHJldHJpZXZl IGEgdmFsaWQgTW9kZW0gSGFuZGxlXG4iKTsKKyAgICAgICAgICBDbG9zZUhhbmRsZShoTW9kZW0p OworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBwcmludGYoIlxuIik7Cit9 CisjZW5kaWYgLyogQ0tfVEFQSSAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIFBB VFRFUk5TCitzdGF0aWMgVk9JRAorc2hvcGF0KCkgeworICAgIGV4dGVybiBjaGFyICogYmlucGF0 dGVybnNbXSwgKiB0eHRwYXR0ZXJuc1tdOworICAgIGV4dGVybiBpbnQgcGF0dGVybnMsIGZpbGVw ZWVrOworICAgIGNoYXIgKipwLCAqczsKKyAgICBpbnQgaSwgaiwgaywgbiwgZmxhZywgd2lkdGg7 CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgIHR0Z3dzaXooKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRyeSB0byBnZXQgbGF0ZXN0IHNpemUgKi8KKyNpZmRlZiBPUzIKKyAgICB3aWR0aCA9 IHR0X2NvbHNbVkNNRF07CisjZWxzZSAvKiBPUzIgKi8KKyAgICB3aWR0aCA9IHR0X2NvbHM7Cisj ZW5kaWYgLyogT1MyICovCisgICAgaWYgKHdpZHRoIDwgMSkKKyNlbmRpZiAvKiBDS19UVEdXU0la ICovCisgICAgICB3aWR0aCA9IDgwOworICAgIHByaW50ZigiXG4iKTsKKyAgICBwcmludGYoIiBT ZXQgZmlsZSB0eXBlOiAgICAgICAgICAgICVzXG4iLGdmbW9kZShiaW5hcnksMSkpOworICAgIHBy aW50ZigiIFNldCBmaWxlIHBhdHRlcm5zOiAgICAgICAgJXMiLCBzaG93b29hKHBhdHRlcm5zKSk7 CisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIGlmIChiaW5hcnkgPT0gWFlGVF9MKQorICAgICAgcHJp bnRmKCIgKGJ1dCBTRVQgRklMRSBUWVBFIExBQkVMRUQgb3ZlcnJpZGVzKVxuIik7CisgICAgZWxz ZQorI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKyNpZmRlZiBWTVMKKyAgICBpZiAoYmluYXJ5ID09 IFhZRlRfSSkKKyAgICAgIHByaW50ZigiIChidXQgU0VUIEZJTEUgVFlQRSBJTUFHRSBvdmVycmlk ZXMpXG4iKTsKKyAgICBlbHNlCisjZW5kaWYgLyogVk1TICovCisgICAgaWYgKGZpbGVwZWVrKQor ICAgICAgcHJpbnRmKCIgKGJ1dCBTRVQgRklMRSBTQ0FOIE9OIG92ZXJyaWRlcylcbiIpOworICAg IGVsc2UKKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICBwcmludGYoIiBNYXhpbXVtIHBhdHRlcm5z IGFsbG93ZWQ6ICVkXG4iLCBGVFBBVFRFUk5TKTsKKyAgICBmb3IgKGsgPSAwOyBrIDwgMjsgaysr KSB7ICAgICAgICAgICAvKiBGb3IgZWFjaCBraW5kIG9mIHBhdHRlciAqLworICAgICAgICBwcmlu dGYoIlxuIik7CisgICAgICAgIGlmIChrID09IDApIHsgICAgICAgICAgICAgICAgICAgLyogYmlu YXJ5Li4uICovCisgICAgICAgICAgICBwcmludGYoIiBGaWxlIGJpbmFyeS1wYXR0ZXJuczogIik7 CisgICAgICAgICAgICBwID0gYmlucGF0dGVybnM7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogdGV4dC4uLiAqLworICAgICAgICAgICAgcHJpbnRmKCIgRmlsZSB0 ZXh0LXBhdHRlcm5zOiAgICIpOworICAgICAgICAgICAgcCA9IHR4dHBhdHRlcm5zOworICAgICAg ICB9CisgICAgICAgIGlmICghcFswXSkgeworICAgICAgICAgICAgcHJpbnRmKCIobm9uZSlcbiIp OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJcbiAiKTsKKyAgICAgICAg ICAgIG4gPSAyOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykg eyAvKiBGb3IgZWFjaCBwYXR0ZXJuICovCisgICAgICAgICAgICAgICAgaWYgKCFwW2ldKSAgICAg ICAgICAgICAgLyogRG9uZSAqLworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgcyA9IHBbaV07ICAgICAgICAgICAgICAgLyogTG9vayBmb3IgZW1iZWRkZWQgc3BhY2Ug Ki8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBmbGFnID0gMTsgKnM7IHMrKywgaisrKSAv KiBhbmQgYWxzbyBnZXQgbGVuZ3RoICovCisgICAgICAgICAgICAgICAgICBpZiAoKnMgPT0gU1Ap CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAzOworICAgICAgICAgICAgICAgIG4gKz0gaiAr IGZsYWc7ICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGlzIGxpbmUgKi8KKyAgICAgICAgICAgICAg ICBpZiAobiA+PSB3aWR0aCAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiAi KTsKKyAgICAgICAgICAgICAgICAgICAgbiA9IGorMjsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgcHJpbnRmKGZsYWcgPT0gMyA/ICIgeyVzfSIgOiAiICVzIiwgcFtpXSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobiA+IDIpCisgICAgICAgICAgICAgIHByaW50 ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGYoIlxuIik7Cit9CisjZW5kaWYg LyogUEFUVEVSTlMgKi8KKworI2lmbmRlZiBOT1NQTAorc3RhdGljIFZPSUQKK3Nob291dHB1dCgp IHsKKyAgICBwcmludGYoIiBPdXRwdXQgcGFjaW5nOiAgICAgICAgICAlZCAobWlsbGlzZWNvbmRz KVxuIixwYWNpbmcpOworICAgIHByaW50ZigiIE91dHB1dCBzcGVjaWFsLWVzY2FwZXM6ICVzXG4i LCBzaG93b2ZmKG91dGVzYykpOworfQorCitzdGF0aWMgVk9JRAorc2hvaW5wdXQoKSB7CisjaWZk ZWYgQ0tGTE9BVAorICAgIGV4dGVybiBjaGFyICogaW5wc2NhbGU7CisjZW5kaWYJLyogQ0tGTE9B VCAqLworCisjaWZkZWYgQ0tfQVVUT0RMCisgICAgcHJpbnRmKCIgSW5wdXQgYXV0b2Rvd25sb2Fk OiAgICAgJXNcbiIsIHNob3dvZmYoaW5hdXRvZGwpKTsKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8K KyAgICBwcmludGYoIiBJbnB1dCBjYW5jZWxsYXRpb246ICAgICAlc1xuIiwgc2hvd29mZihpbmlu dHIpKTsKKyAgICBwcmludGYoIiBJbnB1dCBjYXNlOiAgICAgICAgICAgICAlc1xuIiwgaW5wY2Fz W2NtZGx2bF0gPworICAgICAgICAgICAib2JzZXJ2ZSIgOiAiaWdub3JlIik7CisgICAgcHJpbnRm KCIgSW5wdXQgYnVmZmVyLWxlbmd0aDogICAgJWRcbiIsIGluYnVmc2l6ZSk7CisgICAgcHJpbnRm KCIgSW5wdXQgZWNobzogICAgICAgICAgICAgJXNcbiIsIHNob3dvZmYoaW5lY2hvKSk7CisgICAg cHJpbnRmKCIgSW5wdXQgc2lsZW5jZTogICAgICAgICAgJWQgKHNlY29uZHMpXG4iLCBpbnNpbGVu Y2UpOworI2lmZGVmIE9TMgorICAgIHByaW50ZigiIElucHV0IHRlcm1pbmFsOiAgICAgICAgICVz XG4iLCBzaG93b2ZmKGludGVybSkpOworI2VuZGlmIC8qIE9TMiAqLworICAgIHByaW50ZigiIElu cHV0IHRpbWVvdXQ6ICAgICAgICAgICVzXG4iLCBpbnRpbWVbY21kbHZsXSA/CisgICAgICAgICAg ICJxdWl0IiA6ICJwcm9jZWVkIik7CisjaWZkZWYgQ0tGTE9BVAorICAgIHByaW50ZigiIElucHV0 IHNjYWxlLWZhY3RvcjogICAgICVzXG4iLCBpbnBzY2FsZSA/IGlucHNjYWxlIDogIjEuMCIpOwor I2VuZGlmCS8qIENLRkxPQVQgKi8KKworICAgIGlmIChpbnN0YXR1cyA8IDApCisgICAgICBwcmlu dGYoIiBMYXN0IElOUFVUOiAgICAgICAgICAgICAtMSAoSU5QVVQgY29tbWFuZCBub3QgeWV0IGdp dmVuKVxuIik7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCIgTGFzdCBJTlBVVDogICAgICAgICAg ICAgJWQgKCVzKVxuIiwgaW5zdGF0dXMsaV90ZXh0W2luc3RhdHVzXSk7Cit9CisjZW5kaWYgLyog Tk9TUEwgKi8KKworI2lmbmRlZiBOT1NQTAoraW50CitzaG93YXJyYXkoKSB7CisjaWZkZWYgQ09N TUVOVAorICAgIGNoYXIgKiBwLCAqIHEsICoqIGFwOworICAgIGludCBpOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICBjaGFyICpzOyBpbnQgeCA9IDAsIHk7CisgICAgaW50IHJhbmdlWzJdOwor CisgICAgaWYgKCh5ID0gY21mbGQoIkFycmF5IG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApCisgICAg ICBpZiAoeSAhPSAtMykKKyAgICAgICAgcmV0dXJuKHkpOworICAgIGNrc3RybmNweShsaW5lLHMs TElOQlVGU0laKTsKKyAgICBzID0gbGluZTsKKyAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisg ICAgICByZXR1cm4oeSk7CisgICAgaWYgKCpzKSB7CisgICAgICAgIGNoYXIgKiogYXA7CisgICAg ICAgIGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJihyYW5nZVswXSksJihyYW5nZVsxXSkpKSA8IDAp IHsKKyAgICAgICAgICAgIHByaW50ZigiP0JhZCBhcnJheTogJXNcbiIscyk7CisgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGFwID0gYV9wdHJbeF07CisgICAgICAg IGlmICghYXApIHsKKyAgICAgICAgICAgIHByaW50ZigiQXJyYXkgbm90IGRlY2xhcmVkOiAlc1xu Iiwgcyk7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgaW50IGksIG4sIG1heDsKKyAgICAgICAgICAgIG1heCA9IChyYW5nZVsx XSA+IDApID8KKyAgICAgICAgICAgICAgcmFuZ2VbMV0gOgorICAgICAgICAgICAgICAgICgocmFu Z2VbMF0gPiAwKSA/IHJhbmdlWzBdIDogYV9kaW1beF0pOworICAgICAgICAgICAgaWYgKHJhbmdl WzBdIDwgMCkKKyAgICAgICAgICAgICAgcmFuZ2VbMF0gPSAwOworICAgICAgICAgICAgaWYgKG1h eCA+IGFfZGltW3hdKQorICAgICAgICAgICAgICBtYXggPSBhX2RpbVt4XTsKKyAgICAgICAgICAg IG4gPSAxOworICAgICAgICAgICAgcHJpbnRmKCJcXCYlY1tdOiBEaW1lbnNpb24gPSAlZCIsYXJy YXlpdG9hKHgpLGFfZGltW3hdKTsKKyAgICAgICAgICAgIGlmIChhX2xpbmtbeF0gPiAtMSkKKyAg ICAgICAgICAgICAgcHJpbnRmKCIgKExpbmsgdG8gXFwmJWNbXSkiLGFycmF5aXRvYShhX2xpbmtb eF0pKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIGZvciAoaSA9IHJh bmdlWzBdOyBpIDw9IG1heDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGFwW2ldKSB7Cisg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTNkLiAlc1xuIixpLGFwW2ldKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKHhhc2ttb3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo Y21kX2NvbHMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHN0cmxlbihh cFtpXSkgKyA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAoeCAlIGNtZF9jb2xz KSA/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gKHggLyBjbWRfY29s cykgKyB5OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAobiA+IChjbWRfcm93cyAtIDMpKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICByZXR1cm4oMSk7CisgICAgfQorCisgICAgLyogQWxsIGFycmF5cyAtIGp1 c3Qgc2hvdyBuYW1lIGFuZCBkaW1lbnNpb24gKi8KKworICAgIGZvciAoeSA9IDA7IHkgPCAoaW50 KSAneicgLSBBUlJBWUJBU0UgKyAxOyB5KyspIHsKKyAgICAgICAgaWYgKGFfcHRyW3ldKSB7Cisg ICAgICAgICAgICBpZiAoeCA9PSAwKSBwcmludGYoIkRlY2xhcmVkIGFycmF5czpcbiIpOworICAg ICAgICAgICAgeCA9IDE7CisgICAgICAgICAgICBwcmludGYoIiBcXCYlY1slZF0iLAorICAgICAg ICAgICAgICAgICAgICh5ID09IDEpID8gNjQgOiB5ICsgQVJSQVlCQVNFLCBhX2RpbVt5XSk7Cisg ICAgICAgICAgICBpZiAoYV9saW5rW3ldID4gLTEpCisgICAgICAgICAgICAgIHByaW50ZigiID0+ IFxcJiVjW10iLGFycmF5aXRvYShhX2xpbmtbeV0pKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4i KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXgpIHByaW50ZigiIE5vIGFycmF5cyBkZWNsYXJl ZFxuIik7CisgICAgfQorICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAqLworCitp bnQKK2Rvc2hvdyh4KSBpbnQgeDsgeworICAgIGludCB5LCB6LCBpOyBsb25nIHp6OworICAgIGV4 dGVybiBpbnQgb3B0bGluZXM7CisgICAgY2hhciAqczsKKyNpZmRlZiBPUzIKKyAgICBleHRlcm4g aW50IG9zMmdrczsKKyAgICBleHRlcm4gaW50IHR0X2tiX21vZGU7CisjZW5kaWYgLyogT1MyICov CisgICAgZXh0ZXJuIGludCBzcnZjZG1zZzsKKyAgICBleHRlcm4gY2hhciAqIGNkbXNnc3RyLCAq IGNrY2RwYXRoOworCisjaWZuZGVmIE5PU0VUS0VZCisgICAgaWYgKHggPT0gU0hLRVkpIHsgICAg ICAgICAgICAgICAgICAgLyogU0hPVyBLRVkgKi8KKyAgICAgICAgaW50IGM7CisjaWZkZWYgT1My CisgICAgICAgIGlmICgoeCA9IGNta2V5KHNob2tleXRhYixuc2hva2V5LCJIb3cgbWFueSBrZXlz IHNob3VsZCBiZSBzaG93bj8iLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9uZSIseHhzdHJp bmcpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgc3dpdGNoICh0dF9rYl9tb2RlKSB7CisgICAg ICAgICAgY2FzZSBLQk1fRU06CisgICAgICAgICAgICBzID0gImVtYWNzIjsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgS0JNX0hFOgorICAgICAgICAgICAgcyA9ICJoZWJyZXci OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBLQk1fUlU6CisgICAgICAgICAg ICBzID0gInJ1c3NpYW4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBLQk1f RU46CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHMgPSAiZGVmYXVsdCI7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHogPSBjbWtleShzaG9rZXlt dGFiLG5zaG9rZXltLCJXaGljaCBkZWZpbml0aW9uIHNob3VsZCBiZSBzaG93bj8iLAorICAgICAg ICAgICAgICAgICAgICAgICAgcyx4eHN0cmluZykpIDwgMCkgcmV0dXJuKHopOworICAgICAgICBp ZiAoeiA9PSBTSEtFWURFRikKKyAgICAgICAgICB6ID0gLTE7CisjZW5kaWYgLyogT1MyICovCisg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVmIElLU0QKKyAg ICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5k IGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyNpZmRlZiBNQUMKKyAgICAgICAgcHJpbnRmKCJO b3QgaW1wbGVtZW50ZWRcbiIpOworICAgICAgICByZXR1cm4oMCk7CisjZWxzZSAvKiBOb3QgTUFD ICovCisjaWZkZWYgT1MyCisgICAgICAgIGlmICh4KSB7CisgICAgICAgICAgICBjb25fZXZlbnQg ZXZ0OworICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IEtNU0laRTsgYysrKSB7CisgICAgICAg ICAgICAgICAgZXZ0ID0gKHogPCAwKSA/IG1hcGtleShjKSA6IG1hcHRlcm1rZXkoYyx6KTsKKyAg ICAgICAgICAgICAgICBpZiAoZXZ0LnR5cGUgIT0gZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAg ICAgc2hva2V5Y29kZShjLHopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHByaW50ZigiIFBy ZXNzIGtleTogIik7CisjaWZkZWYgVU5JWAorI2lmZGVmIE5PU0VUQlVGCisgICAgICAgICAgICBm Zmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworI2VuZGlmIC8qIFVOSVggKi8K KyAgICAgICAgICAgIGNvbmJpbigoY2hhcillc2NhcGUpOyAgICAgICAvKiBQdXQgdGVybWluYWwg aW4gYmluYXJ5IG1vZGUgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIG9zMmdrcyA9IDA7ICAg ICAgICAgICAgICAgICAvKiBSYXcgc2NhbmNvZGUgcHJvY2Vzc2luZyAqLworI2VuZGlmIC8qIE9T MiAqLworICAgICAgICAgICAgYyA9IGNvbmdrcygwKTsgICAgICAgICAgICAgIC8qIEdldCBjaGFy YWN0ZXIgb3Igc2NhbiBjb2RlICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICBvczJna3MgPSAx OyAgICAgICAgICAgICAgICAgLyogQ29va2VkIHNjYW5jb2RlIHByb2Nlc3NpbmcgKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAvKiBS ZXN0b3JlIHRlcm1pbmFsIHRvIGNicmVhayBtb2RlICovCisgICAgICAgICAgICBpZiAoYyA8IDAp IHsgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGVycm9yICovCisgICAgICAgICAgICAgICAg cHJpbnRmKCI/RXJyb3IgcmVhZGluZyBrZXlcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgICAgIH0KKyNpZm5kZWYgT1MyCisvKgorICBEbyBOT1QgbWFzayB3aGVuIGl0 IGNhbiBiZSBhIHJhdyBzY2FuIGNvZGUsIHBlcmhhcHMgPiAyNTUKKyovCisgICAgICAgICAgICBj ICY9IGNtZG1zazsgICAgICAgICAgICAgICAgLyogQXBwbHkgY29tbWFuZCBtYXNrICovCisjZW5k aWYgLyogT1MyICovCisgICAgICAgICAgICBwcmludGYoIlxuIik7CisjaWZkZWYgT1MyCisgICAg ICAgICAgICBzaG9rZXljb2RlKGMseik7CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgICAgIHNo b2tleWNvZGUoYyk7CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgT1MyCisgICAgICAgIH0KKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIE1BQyAqLworICAg IH0KKyNpZm5kZWYgTk9LVkVSQlMKKyAgICBpZiAoeCA9PSBTSEtWQikgeyAgICAgICAgICAgICAg ICAgICAvKiBTSE9XIEtWRVJCUyAqLworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJl dHVybih5KTsKKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAg ICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAg ICBwcmludGYoIlxuVGhlIGZvbGxvd2luZyAlZCBrZXlib2FyZCB2ZXJicyBhcmUgYXZhaWxhYmxl OlxuXG4iLG5rdmVyYnMpOworICAgICAgICBrd2RoZWxwKGt2ZXJicyxua3ZlcmJzLCIiLCJcXEsi LCIiLDMsMCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAg IH0KKyNpZmRlZiBPUzIKKyAgICBpZiAoeCA9PSBTSFVESykgeyAgICAgICAgICAgICAgICAgICAv KiBTSE9XIFVES3MgKi8KKyAgICAgICAgZXh0ZXJuIHZvaWQgc2hvd3Vkayh2b2lkKTsKKyAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZkZWYgSUtTRAorICAgICAg ICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlz YWJsZWQuXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAg fQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgc2hvd3VkaygpOworICAgICAgICByZXR1cm4o MSk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PS1ZFUkJTICovCisjZW5k aWYgLyogTk9TRVRLRVkgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIGlmICh4ID09IFNITUFDKSB7 ICAgICAgICAgICAgICAgICAgIC8qIFNIT1cgTUFDUk8gKi8KKyAgICAgICAgc3RydWN0IEZEQiBr dywgZmwsIGNtOworICAgICAgICBpbnQgaSwgaywgbiA9IDAsIGxlZnQsIGZsYWcsIGNvbmZpcm1l ZCA9IDA7CisgICAgICAgIGNoYXIgKiBwLCAqcVs2NF07CisgICAgICAgIGZvciAoaSA9IDA7IGkg PCBubWFjOyBpKyspIHsgICAgLyogY29weSB0aGUgbWFjcm8gdGFibGUgKi8KKyAgICAgICAgICAg IG1hY2tleVtpXS5rd2QgPSBtYWN0YWJbaV0ua3dkOyAvKiBpbnRvIGEgcmVndWxhciBrZXl3b3Jk IHRhYmxlICovCisgICAgICAgICAgICBtYWNrZXlbaV0ua3d2YWwgPSBpOyAgICAgICAgLyogd2l0 aCB2YWx1ZSA9IHBvaW50ZXIgdG8gbWFjcm8gdGJsICovCisgICAgICAgICAgICBtYWNrZXlbaV0u ZmxncyA9IG1hY3RhYltpXS5mbGdzOworICAgICAgICB9CisgICAgICAgIHAgPSBsaW5lOworICAg ICAgICBsZWZ0ID0gTElOQlVGU0laOworICAgICAgICB3aGlsZSAoIWNvbmZpcm1lZCAmJiBuIDwg NjQpIHsKKyAgICAgICAgICAgIGNtZmRiaSgma3csICAgICAgICAgICAgICAgICAvKiBGaXJzdCBG REIgLSBtYWNybyB0YWJsZSAqLworICAgICAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAg ICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAgICAgIk1hY3JvIG5hbWUiLCAgICAgICAg LyogaGxwbXNnICovCisgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgLyog ZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAgICAgbm1hYywgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgICAgICAg ICAgMCwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3 aSAqLworICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgIC8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICBtYWNrZXksICAgICAgICAgICAgICAv KiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICAgICAgICAgJmZsICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICBjbWZkYmkoJmZsLCAgICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIHNvbWV0aGlu ZyBub3QgaW4gbWFjdGFiICovCisgICAgICAgICAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAg ICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAv KiBobHBtc2cgKi8KKyAgICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAvKiBk ZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAgICAgICAgIDAsICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgICAgICAg ICAgeHhzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAmY20KKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY21mZGJpKCZjbSwgICAg ICAgICAgICAgICAgIC8qIDNyZCBGREIgLSBDb25maXJtYXRpb24gKi8KKyAgICAgICAgICAgICAg ICAgICBfQ01DRk0sICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgICAg ICIiLCAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAgICAgICAgICIi LCAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAg ICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRh IDIgKi8KKyAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgIE5VTEws CisgICAgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICB4ID0gY21mZGIoJmt3KTsgICAgICAgICAgICAgLyogUGFyc2Ugc29tZXRoaW5nICovCisg ICAgICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg ICAgIHMgPSBhdG1idWY7ICAgICAgICAgICAgICAgICAvKiBXaGF0IHRoZSB1c2VyIHR5cGVkICov CisgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7CisgICAgICAgICAgICAgIGNh c2UgX0NNS0VZOiAgICAgICAgICAgICAgLyogSWYgaXQgd2FzIGEga2V5d29yZCAqLworICAgICAg ICAgICAgICAgIHkgPSBtbG9vayhtYWN0YWIsYXRtYnVmLG5tYWMpOyAvKiBnZXQgZnVsbCBuYW1l ICovCisgICAgICAgICAgICAgICAgaWYgKHkgPiAtMSkKKyAgICAgICAgICAgICAgICAgIHMgPSBt YWN0YWJbeV0ua3dkOyAgICAvKiAoZmFsbCB0aHJ1IG9uIHB1cnBvc2UuLi4pICovCisgICAgICAg ICAgICAgIGNhc2UgX0NNRkxEOgorICAgICAgICAgICAgICAgIGsgPSBja3N0cm5jcHkocCxzLGxl ZnQpICsgMTsgLyogQ29weSByZXN1bHQgdG8gbGlzdCAqLworICAgICAgICAgICAgICAgIGxlZnQg LT0gazsKKyAgICAgICAgICAgICAgICBpZiAobGVmdCA8PSAwKSB7CisgICAgICAgICAgICAgICAg ICAgICpwID0gTlVMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgcVtuKytdID0gcDsgICAgICAgICAgICAgLyogUG9pbnQgdG8g dGhpcyBpdGVtICovCisgICAgICAgICAgICAgICAgcCArPSBrOyAgICAgICAgICAgICAgICAgLyog TW92ZSBidWZmZXIgcG9pbnRlciBwYXN0IGl0ICovCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgX0NNQ0ZNOiAgICAgICAgICAgICAgLyogRW5kIG9mIGNvbW1hbmQg Ki8KKyAgICAgICAgICAgICAgICBjb25maXJtZWQrKzsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICBwcmludGYoIk1hY3JvczpcbiIpOworICAgICAg ICAgICAgc2xjID0gMTsKKyAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBubWFjOyB5KyspCisg ICAgICAgICAgICAgIGlmIChzaG9tYWMobWFjdGFiW3ldLmt3ZCxtYWN0YWJbeV0ubXZhbCkgPCAw KSBicmVhazsKKyAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAgICAgfQorICAgICAgICBzbGMg PSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBmbGFn ID0gMDsKKyAgICAgICAgICAgIHMgPSBxW2ldOworICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7 CisgICAgICAgICAgICBpZiAoISpzKSBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChpc3dpbGQo cykpIHsgICAgICAgICAgICAvKiBQYXR0ZXJuIG1hdGNoICovCisgICAgICAgICAgICAgICAgZm9y IChrID0gMCwgeCA9IDA7IHggPCBubWFjOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KGNrbWF0Y2gocyxtYWN0YWJbeF0ua3dkLDAsMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHNob21hYyhtYWN0YWJbeF0ua3dkLG1hY3RhYlt4XS5tdmFsKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGsrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBpZiAoIWspCisgICAgICAgICAgICAgICAgICB4ID0gLTE7CisgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogRXhhY3QgbWF0Y2ggKi8KKyAgICAgICAgICAg ICAgICB4ID0gbXhsb29rKG1hY3RhYixzLG5tYWMpOworICAgICAgICAgICAgICAgIGZsYWcgPSAx OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZsYWcgJiYgeCA9PSAtMSkKKyAgICAg ICAgICAgICAgeCA9IG1sb29rKG1hY3RhYixzLG5tYWMpOworICAgICAgICAgICAgc3dpdGNoICh4 KSB7CisgICAgICAgICAgICAgIGNhc2UgLTM6ICAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0 byBsb29rIHVwICovCisgICAgICAgICAgICAgIGNhc2UgLTE6ICAgICAgICAgICAgICAgICAgLyog Tm90IGZvdW5kICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyAtIChub3QgZGVmaW5lZClc biIscyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgLTI6ICAg ICAgICAgICAgICAgICAgLyogQW1iaWd1b3VzLCBtYXRjaGVzIG1vcmUgdGhhbiBvbmUgKi8KKyAg ICAgICAgICAgICAgICBwcmludGYoIiVzIC0gYW1iaWd1b3VzXG4iLHMpOworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIC8qIE1h dGNoZXMgb25lIGV4YWN0bHkgKi8KKyAgICAgICAgICAgICAgICBzaG9tYWMobWFjdGFiW3hdLmt3 ZCxtYWN0YWJbeF0ubXZhbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAq LworCisvKgorICBPdGhlciBTSE9XIGNvbW1hbmRzIG9ubHkgaGF2ZSB0d28gZmllbGRzLiAgR2V0 IGNvbW1hbmQgY29uZmlybWF0aW9uIGhlcmUsCisgIHRoZW4gaGFuZGxlIHdpdGggYmlnIHN3aXRj aCgpIHN0YXRlbWVudC4KKyovCisjaWZuZGVmIE5PU1BMCisgICAgaWYgKHggIT0gU0hCVUkgJiYg eCAhPSBTSEFSUikKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKQorICAgICAgICByZXR1cm4oeSk7CisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogVGhpcyBy ZXN0cmljdGlvbiBpcyB0b28gZ2VuZXJhbC4gKi8KKyNpZmRlZiBJS1NECisgICAgaWYgKGluc2Vy dmVyICYmCisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgaXNndWVzdAorI2Vsc2UKKyAgICAgICAg MAorI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICAgICkgeworICAgICAgICBwcmludGYoIlNv cnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAg IHN3aXRjaCAoeCkgeworCisjaWZkZWYgQU5ZWDI1CisjaWZuZGVmIElCTVgyNQorICAgICAgY2Fz ZSBTSFBBRDoKKyAgICAgICAgc2hvcGFkKDApOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBJ Qk1YMjUgKi8KKyNlbmRpZiAvKiBBTllYMjUgKi8KKworICAgICAgY2FzZSBTSE5FVDoKKyNpZmRl ZiBOT0xPQ0FMCisgICAgICAgIHByaW50ZigiIE5vIG5ldHdvcmsgc3VwcG9ydCBpbiB0aGlzIHZl cnNpb24gb2YgQy1LZXJtaXQuXG4iKTsKKyNlbHNlCisjaWZuZGVmIE5FVENPTk4KKyAgICAgICAg cHJpbnRmKCIgTm8gbmV0d29yayBzdXBwb3J0IGluIHRoaXMgdmVyc2lvbiBvZiBDLUtlcm1pdC5c biIpOworI2Vsc2UKKyAgICAgICAgc2hvbmV0KCk7CisjZW5kaWYgLyogTkVUQ09OTiAqLworI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0hQQVI6Cisg ICAgICAgIHNob3BhcigpOworICAgICAgICBicmVhazsKKworI2lmbmRlZiBOT1hGRVIKKyAgICAg IGNhc2UgU0hBVFQ6CisgICAgICAgIHNob2F0dCgpOworICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBTSENPVToKKyAgICAgICAg cHJpbnRmKCIgJWRcbiIsY291bnRbY21kbHZsXSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8q IE5PU1BMICovCisKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAgIGNhc2UgU0hTRVI6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBTaG93IFNlcnZlciAqLworICAgICAgICBpID0gMDsKKyNpZm5kZWYg Tk9GUklMTFMKKyAgICAgICAgcHJpbnRmKCJGdW5jdGlvbjogICAgICAgICAgU3RhdHVzOlxuIik7 CisgICAgICAgIGkrKzsKKyAgICAgICAgcHJpbnRmKCIgR0VUICAgICAgICAgICAgICAgICVzXG4i LG5tW2VuX2dldF0pOworICAgICAgICBpKys7CisgICAgICAgIHByaW50ZigiIFNFTkQgICAgICAg ICAgICAgICAlc1xuIixubVtlbl9zZW5dKTsKKyAgICAgICAgaSsrOworICAgICAgICBwcmludGYo IiBNQUlMICAgICAgICAgICAgICAgJXNcbiIsbm1baW5zZXJ2ZXIgPyAwIDogZW5fbWFpXSk7Cisg ICAgICAgIGkrKzsKKyAgICAgICAgcHJpbnRmKCIgUFJJTlQgICAgICAgICAgICAgICVzXG4iLG5t W2luc2VydmVyID8gMCA6IGVuX3ByaV0pOworICAgICAgICBpKys7CisjaWZuZGVmIE5PU1BMCisg ICAgICAgIHByaW50ZigiIFJFTU9URSBBU1NJR04gICAgICAlc1xuIixubVtlbl9hc2ddKTsKKyAg ICAgICAgaSsrOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgIHByaW50ZigiIFJFTU9URSBD RC9DV0QgICAgICAlc1xuIixubVtlbl9jd2RdKTsKKyAgICAgICAgaSsrOworI2lmZGVmIFpDT1BZ CisgICAgICAgIHByaW50ZigiIFJFTU9URSBDT1BZICAgICAgICAlc1xuIixubVtlbl9jcHldKTsK KyAgICAgICAgaSsrOworI2VuZGlmIC8qIFpDT1BZICovCisgICAgICAgIHByaW50ZigiIFJFTU9U RSBERUxFVEUgICAgICAlc1xuIixubVtlbl9kZWxdKTsKKyAgICAgICAgcHJpbnRmKCIgUkVNT1RF IERJUkVDVE9SWSAgICVzXG4iLG5tW2VuX2Rpcl0pOworICAgICAgICBwcmludGYoIiBSRU1PVEUg SE9TVCAgICAgICAgJXNcbiIsbm1baW5zZXJ2ZXIgPyAwIDogZW5faG9zXSk7CisgICAgICAgIGkg Kz0gMzsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgcHJpbnRmKCIgUkVNT1RFIFFVRVJZICAgICAg ICVzXG4iLG5tW2VuX3F1ZV0pOworICAgICAgICBpKys7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAg ICAgICAgcHJpbnRmKCIgUkVNT1RFIE1LRElSICAgICAgICVzXG4iLG5tW2VuX21rZF0pOworICAg ICAgICBwcmludGYoIiBSRU1PVEUgUk1ESVIgICAgICAgJXNcbiIsbm1bZW5fcm1kXSk7CisgICAg ICAgIHByaW50ZigiIFJFTU9URSBSRU5BTUUgICAgICAlc1xuIixubVtlbl9yZW5dKTsKKyAgICAg ICAgcHJpbnRmKCIgUkVNT1RFIFNFVCAgICAgICAgICVzXG4iLG5tW2VuX3NldF0pOworICAgICAg ICBwcmludGYoIiBSRU1PVEUgU1BBQ0UgICAgICAgJXNcbiIsbm1bZW5fc3BhXSk7CisgICAgICAg IHByaW50ZigiIFJFTU9URSBUWVBFICAgICAgICAlc1xuIixubVtlbl90eXBdKTsKKyAgICAgICAg cHJpbnRmKCIgUkVNT1RFIFdITyAgICAgICAgICVzXG4iLG5tW2luc2VydmVyID8gMCA6IGVuX3do b10pOworICAgICAgICBwcmludGYoIiBCWUUgICAgICAgICAgICAgICAgJXNcbiIsbm1bZW5fYnll XSk7CisgICAgICAgIHByaW50ZigiIEZJTklTSCAgICAgICAgICAgICAlc1xuIixubVtlbl9maW5d KTsKKyAgICAgICAgcHJpbnRmKCIgRVhJVCAgICAgICAgICAgICAgICVzXG4iLG5tW2VuX3hpdF0p OworICAgICAgICBwcmludGYoIiBFTkFCTEUgICAgICAgICAgICAgJXNcbiIsbm1bZW5fZW5hXSk7 CisgICAgICAgIGkgKz0gMTE7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyAgICAgICAgaWYgKGkg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBpID0gMDsg fQorICAgICAgICBwcmludGYoIlNlcnZlciB0aW1lb3V0OiAgICAgICVkXG4iLHNydnRpbSk7Cisg ICAgICAgIGlmICgrK2kgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBpID0gMDsgfQorICAgICAgICBwcmludGYoIlNlcnZlciBpZGxlLXRpbWVvdXQ6ICVk XG4iLHNydmlkbCk7CisgICAgICAgIGlmICgrK2kgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBpID0gMDsgfQorICAgICAgICBwcmludGYoIlNlcnZlciBr ZWVwYWxpdmUgICAgICVzXG4iLCBzaG93b2ZmKHNydnBpbmcpKTsKKyAgICAgICAgaWYgKCsraSA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkgPSAwOyB9 CisgICAgICAgIHByaW50ZigiU2VydmVyIGNkLW1lc3NhZ2UgICAgJXNcbiIsIHNob3dvZmYoc3J2 Y2Rtc2cpKTsKKyAgICAgICAgaWYgKHNydmNkbXNnICYmIGNkbXNnc3RyKQorICAgICAgICAgIHBy aW50ZigiU2VydmVyIGNkLW1lc3NhZ2UgICAgJXNcbiIsIGNkbXNnc3RyKTsKKyAgICAgICAgaWYg KCsraSA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGkg PSAwOyB9CisgICAgICAgIHByaW50ZigiU2VydmVyIGRpc3BsYXk6ICAgICAgJXNcbiIsIHNob3dv ZmYoc3J2ZGlzKSk7CisgICAgICAgIGlmICgrK2kgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBpID0gMDsgfQorICAgICAgICBwcmludGYoIlNlcnZlciBs b2dpbjogICAgICAgICIpOworICAgICAgICBpZiAoIXhfdXNlcikgeworICAgICAgICAgICAgcHJp bnRmKCIobm9uZSlcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJc IiVzXCIsIFwiJXNcIiwgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgIHhfdXNlciwKKyAg ICAgICAgICAgICAgICAgICB4X3Bhc3N3ZCA/IHhfcGFzc3dkIDogIiIsCisgICAgICAgICAgICAg ICAgICAgeF9hY2N0ID8geF9hY2N0IDogIiIKKyAgICAgICAgICAgICAgICAgICApOworICAgICAg ICB9CisgICAgICAgIGlmICgrK2kgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigxKTsgZWxzZSBpID0gMDsgfQorICAgICAgICBwcmludGYoIlNlcnZlciBnZXQtcGF0aDog Iik7CisgICAgICAgIGlmIChuZ2V0cGF0aCA9PSAwKSB7CisgICAgICAgICAgICBwcmludGYoIiAg ICAobm9uZSlcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCJcbiIp OworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IG5nZXRw YXRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0cGF0aFt4XSkgcHJpbnRmKCIgJWQu ICVzXG4iLCB4LCBnZXRwYXRoW3hdKTsKKyAgICAgICAgICAgICAgICBpZiAoKytpID4gKGNtZF9y b3dzIC0gMykpIHsgLyogTW9yZSB0aGFuIGEgc2NyZWVuZnVsLi4uICovCisgICAgICAgICAgICAg ICAgICAgIGlmICghYXNrbW9yZSgpKQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyAgICAgIGNhc2UgU0hTVEE6ICAgICAgICAgICAgICAg ICAgICAgICAvKiBTdGF0dXMgb2YgbGFzdCBjb21tYW5kICovCisgICAgICAgIHByaW50ZigiICVz XG4iLCBzdWNjZXNzID8gIlNVQ0NFU1MiIDogIkZBSUxVUkUiKTsKKyAgICAgICAgcmV0dXJuKDAp OyAgICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBjaGFuZ2UgaXQgKi8KKworICAgICAgY2Fz ZSBTSFNUSzogeyAgICAgICAgICAgICAgICAgICAgIC8qIFN0YWNrIGZvciBNQUMgZGVidWdnaW5n ICovCisjaWZkZWYgTUFDCisgICAgICAgICAgbG9uZyBzcDsKKyAgICAgICAgICBzcCA9IC0xOwor ICAgICAgICAgIGxvYWRBMCAoKGNoYXIgKikmc3ApOyAgICAgICAgIC8qIHNldCBkZXN0aW5hdGlv biBhZGRyZXNzICovCisgICAgICAgICAgU1B0b2FBMCgpOyAgICAgICAgICAgICAgICAgICAgLyog bW92ZSBTUCB0byBkZXN0aW5hdGlvbiAqLworICAgICAgICAgIHByaW50ZigiU3RhY2sgYXQgMHgl eFxuIiwgc3ApOworICAgICAgICAgIHNob3dfcXVldWUoKTsgICAgICAgICAgICAgICAgIC8qIG1v cmUgZGVidWdnaW5nICovCisgICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICAgIHNob3N0 YWNrKCk7CisjZW5kaWYgLyogTUFDICovCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisKKwor I2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgICBjYXNlIFNIVEFCOiAgICAgICAgICAg ICAgICAgICAgICAgLyogU0hPVyBUQUJTICovCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5z ZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJc biIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorI2VuZGlm IC8qIElLU0QgKi8KKyAgICAgICAgc2hvdGFicygpOworICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBPUzIgKi8KKworICAgICAgY2FzZSBTSFRFUjogICAgICAgICAgICAgICAgICAgICAgIC8qIFNI T1cgVEVSTUlOQUwgKi8KKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAg ICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLwor ICAgICAgICBzaG90cm0oKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBPUzIKKyAgICAgIGNh c2UgU0hWU0NSTjogICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIFZpcnR1YWwgU2NyZWVuIC0g Zm9yIGRlYnVnICovCisgICAgICAgIHNob3ZzY3JuKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE9TMk1PVVNFCisgICAg ICBjYXNlIFNITU9VOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0hPVyBNT1VTRSAqLworI2lm ZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgICAgICBwcmludGYoIlNv cnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIHNob21vdSgpOwor ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworCisjaWZuZGVmIE5PRlJJTExT CisgICAgICBjYXNlIFNIVkVSOgorICAgICAgICBzaG92ZXIoKTsKKyAgICAgICAgYnJlYWs7Cisj ZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBTSEJVSTog ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1aWx0LWluIHZhcmlhYmxlcyAqLworCWxpbmVbMF0g PSBOVUw7CisgICAgICAgIGlmICgoeSA9IGNtdHh0KCJWYXJpYWJsZSBuYW1lIG9yIHBhdHRlcm4i LCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgY2tz dHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICAvKiBpZiAobGluZVswXSkgY2tzdHJu Y2F0KGxpbmUsIioiLExJTkJVRlNJWik7ICovCisKKyAgICAgIGNhc2UgU0hGVU46ICAgICAgICAg ICAgICAgICAgICAgICAvKiBvciBidWlsdC1pbiBmdW5jdGlvbnMgKi8KKyNpZmRlZiBDS19UVEdX U0laCisjaWZkZWYgT1MyCisgICAgICAgIGlmICh0dF9jb2xzW1ZURVJNXSA8IDAgfHwgdHRfcm93 c1tWVEVSTV0gPCAwKQorICAgICAgICAgIHR0Z3dzaXooKTsKKyNlbHNlIC8qIE9TMiAqLworICAg ICAgICBpZiAodHRnd3NpeigpID4gMCkgeyAgICAgICAgICAgIC8qIEdldCBjdXJyZW50IHNjcmVl biBzaXplICovCisgICAgICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsK KyAgICAgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7CisgICAgICAgICAgICAgICAgY21k X2NvbHMgPSB0dF9jb2xzOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworCisgICAgICAgIGlmICh4ID09IFNIRlVOKSB7 ICAgICAgICAgICAgICAgLyogRnVuY3Rpb25zICovCisgICAgICAgICAgICBwcmludGYoIlxuVGhl IGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZTpcblxuIik7CisgICAgICAgICAgICBr d2RoZWxwKGZuY3RhYixuZnVuY3MsIiIsIlxcRiIsIigpIiwzLDApOworICAgICAgICAgICAgcHJp bnRmKCJcbiIpOworI2lmbmRlZiBOT0hFTFAKKyAgICAgICAgICAgIHByaW50ZigKKyJIRUxQIEZV TkNUSU9OIDxuYW1lPiBnaXZlcyB0aGUgY2FsbGluZyBjb252ZW50aW9ucyBvZiB0aGUgZ2l2ZW4g ZnVuY3Rpb24uXG5cbiIKKyAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIE5PSEVMUCAq LworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogVmFyaWFibGVzICovCisJICAgIGludCBqLCBmbGFnID0gMCwgaGF2ZWFyZyA9IDA7 CisJICAgIHN0cnVjdCBzdHJpbmdhcnJheSAqIHEgPSBOVUxMOworCSAgICBjaGFyICoqIHBwOwor CSAgICBpZiAobGluZVswXSkgewkJLyogSGF2ZSBzb21ldGhpbmcgdG8gc2VhcmNoIGZvciAqLwor CQloYXZlYXJnID0gMTsJCS8qIE1heWJlIGEgbGlzdCBvZiB0aGluZ3MgKi8KKwkJcSA9IGNrc3Bs aXQoMSwwLGxpbmUsTlVMTCwiXy1eJCo/W117fSIsMCwwLDApOworCQlpZiAoIXEpIGJyZWFrOwor CQlwcCA9IHEtPmFfaGVhZDsKKwkgICAgfQorCSAgICBpID0gMDsKKwkgICAgZm9yICh5ID0gMDsg eSA8IG52YXJzOyB5KyspIHsKKwkJaWYgKCh2YXJ0YWJbeV0uZmxncyAmIENNX0lOVikpCisJCSAg Y29udGludWU7CisJCWlmIChoYXZlYXJnKSB7CQkvKiBJZiBJIGhhdmUgc29tZXRoaW5nIHRvIG1h dGNoICovCisJCSAgICBjaGFyICogczI7CisJCSAgICBmb3IgKGZsYWcgPSAwLCBqID0gMTsgaiA8 PSBxLT5hX3NpemUgJiYgIWZsYWc7IGorKykgeworCQkJczIgPSBwcFtqXSA/IHBwW2pdIDogIiI7 CisjaWZkZWYgQ09NTUVOVAorLyogVGhpcyBpcyBub3QgbmVlZGVkIGJlY2F1c2UgaXQncyB3aGF0 IHRoZSA0IGFyZyBkb2VzIGluIGNrbWF0Y2goKSAqLworCQkJbGVuID0gc3RybGVuKHMyKTsKKwkJ CWlmIChsZW4gPiAwKSB7CisJCQkgICAgaWYgKHMyW2xlbi0xXSAhPSAnJCcpIHsvKiBUbyBhbGxv dyBhbmNob3JzICovCisJCQkJY2ttYWttc2cobGluZSxMSU5CVUZTSVoscHBbal0sIioiLE5VTEws TlVMTCk7CisJCQkJczIgPSBsaW5lOworCQkJICAgIH0KKwkJCX0KKyNlbmRpZiAvKiBDT01NRU5U ICovCisJCQlpZiAoY2ttYXRjaChzMix2YXJ0YWJbeV0ua3dkLDAsNCkgPiAwKSB7CisJCQkgICAg ZmxhZyA9IDE7CS8qIE1hdGNoZXMgKi8KKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJ ICAgIGlmICghZmxhZykJCS8qIERvZXNuJ3QgbWF0Y2ggKi8KKwkJICAgICAgY29udGludWU7CisJ CX0KKwkJcyA9IG52bG9vayh2YXJ0YWJbeV0ua3dkKTsKKwkJcHJpbnRmKCIgXFx2KCVzKSA9ICIs dmFydGFiW3ldLmt3ZCk7CisJCWlmICh2YXJ0YWJbeV0ua3d2YWwgPT0gVk5fTkVXTCkgeyAvKiBc dihuZXdsaW5lKSAqLworCQkgICAgd2hpbGUgKCpzKQkJLyogU2hvdyBjb250cm9sIGNoYXJzIHN5 bWJvbGljYWxseSAqLworCQkgICAgICBwcmludGYoIlxceyVkfSIsKnMrKyk7CisJCSAgICBwcmlu dGYoIlxuIik7CisJCX0gZWxzZSBpZiAodmFydGFiW3ldLmt3dmFsID09IFZOX0lCVUYgIHx8IC8q IFx2KGlucHV0KSAqLworCQkJICAgdmFydGFiW3ldLmt3dmFsID09IFZOX1FVRSAgIHx8IC8qIFx2 KHF1ZXJ5KSAqLworI2lmZGVmIE9TMgorCQkJICAgdmFydGFiW3ldLmt3dmFsID09IFZOX1NFTENU IHx8IC8qIFx2KHNlbGVjdCkgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwkJCSAgICh2YXJ0YWJbeV0u a3d2YWwgPj0gVk5fTV9BQUEgJiYgLyogbW9kZW0gb25lcyAqLworCQkJICAgIHZhcnRhYlt5XS5r d3ZhbCA8PSBWTl9NX1paWikKKwkJCSAgICkgeworCQkgICAgaW50IHIgPSAxMjsJCS8qIFRoaXMg b25lIGNhbiB3cmFwIGFyb3VuZCAqLworCQkgICAgY2hhciBidWZbMTBdOworCQkgICAgd2hpbGUg KCpzKSB7CisJCQlpZiAoaXNwcmludCgqcykpIHsKKwkJCSAgICBidWZbMF0gPSAqczsKKwkJCSAg ICBidWZbMV0gPSBOVUw7CisJCQkgICAgcisrOworCQkJfSBlbHNlIHsKKwkJCSAgICBzcHJpbnRm KGJ1ZiwiXFx7JWR9Iiwqcyk7IC8qIFNBRkUgKi8KKwkJCSAgICByICs9IChpbnQpIHN0cmxlbihi dWYpOworCQkJfQorCQkJaWYgKHIgPj0gY21kX2NvbHMgLSAxKSB7CisJCQkgICAgcHJpbnRmKCJc biIpOworCQkJICAgIHIgPSAwOworCQkJICAgIGkrKzsKKwkJCX0KKwkJCXByaW50ZigiJXMiLGJ1 Zik7CisJCQlzKys7CisJCSAgICB9CisJCSAgICBwcmludGYoIlxuIik7CisJCX0gZWxzZQorCQkg IHByaW50ZigiJXNcbiIscyk7CisJCWlmICgrK2kgPiAoY21kX3Jvd3MgLSAzKSkgeyAvKiBNb3Jl IHRoYW4gYSBzY3JlZW5mdWwuLi4gKi8KKwkJICAgIGlmICgoeSA+PSBudmFycyAtIDEpIHx8ICFh c2ttb3JlKCkpCisJCSAgICAgIGJyZWFrOworCQkgICAgZWxzZQorCQkgICAgICBpID0gMDsKKwkJ fQorCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0hWQVI6 ICAgICAgICAgICAgICAgICAgICAgICAvKiBHbG9iYWwgdmFyaWFibGVzICovCisgICAgICAgIHgg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVmFyaWFibGUgY291bnQgKi8KKyAgICAg ICAgc2xjID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gbGluZSBjb3VudCBm b3IgIm1vcmU/IiAqLworICAgICAgICBmb3IgKHkgPSAzMzsgeSA8IEdWQVJTOyB5KyspCisgICAg ICAgICAgaWYgKGdfdmFyW3ldKSB7CisgICAgICAgICAgICAgIGlmICh4KysgPT0gMCkgcHJpbnRm KCJHbG9iYWwgdmFyaWFibGVzOlxuIik7CisgICAgICAgICAgICAgIHNwcmludGYobGluZSwiIFxc JSUlYyIseSk7IC8qIFNBRkUgKi8KKyAgICAgICAgICAgICAgaWYgKHNob21hYyhsaW5lLGdfdmFy W3ldKSA8IDApIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKCF4KSBwcmludGYoIiBO byB2YXJpYWJsZXMgZGVmaW5lZFxuIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFNI QVJHOiB7ICAgICAgICAgICAgICAgICAgICAgLyogQXJncyAqLworICAgICAgICAgIGNoYXIgKiBz MSwgKiBzMjsKKyAgICAgICAgICBpZiAobWFjbHZsID4gLTEpIHsKKyAgICAgICAgICAgICAgcHJp bnRmKCJNYWNybyBhcmd1bWVudHMgYXQgbGV2ZWwgJWQgKFxcdihhcmdjKSA9ICVkKTpcbiIsCisg ICAgICAgICAgICAgICAgICAgICBtYWNsdmwsCisgICAgICAgICAgICAgICAgICAgICBtYWNhcmdj W21hY2x2bF0KKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgIGZvciAoeSA9 IDA7IHkgPCBtYWNhcmdjW21hY2x2bF07IHkrKykgeworICAgICAgICAgICAgICAgICAgczEgPSBt X2FyZ1ttYWNsdmxdW3ldOworICAgICAgICAgICAgICAgICAgaWYgKCFzMSkgczEgPSAiKE5VTEwp IjsKKyAgICAgICAgICAgICAgICAgIHMyID0gbV94YXJnW21hY2x2bF1beV07CisgICAgICAgICAg ICAgICAgICBpZiAoIXMyKSBzMiA9ICIoTlVMTCkiOworICAgICAgICAgICAgICAgICAgaWYgKHkg PCAxMCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgXFwlJSVkID0gJXNcbiIseSxzMSk7 CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIFxc Jl9bJWRdID0gJXNcbiIseSxzMik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICBwcmludGYoIlRvcC1sZXZlbCBhcmd1bWVudHMgKFxcdihhcmdjKSA9 ICVkKTpcbiIsIHRvcGFyZ2MpOworICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgdG9wYXJn YzsgeSsrKSB7CisgICAgICAgICAgICAgICAgICBzMSA9IGdfdmFyW3kgKyAnMCddOworICAgICAg ICAgICAgICAgICAgaWYgKCFzMSkgczEgPSAiKE5VTEwpIjsKKyAgICAgICAgICAgICAgICAgIHMy ID0gdG9wYXJnW3ldOworICAgICAgICAgICAgICAgICAgaWYgKCFzMikgczIgPSAiKE5VTEwpIjsK KyAgICAgICAgICAgICAgICAgIGlmICh5IDwgMTAgJiYgZ192YXJbeV0pCisgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiIFxcJSUlZCA9ICVzXG4iLHksczEpOworICAgICAgICAgICAgICAgICAg aWYgKHRvcGFyZ1t5XSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgXFwmX1slZF0gPSAl c1xuIix5LHMyKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBTSEFSUjogICAgICAgICAgICAgICAgICAgICAgIC8q IEFycmF5cyAqLworICAgICAgICByZXR1cm4oc2hvd2FycmF5KCkpOworI2VuZGlmIC8qIE5PU1BM ICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFNIUFJPOiAgICAgICAgICAgICAgICAg ICAgICAgLyogUHJvdG9jb2wgcGFyYW1ldGVycyAqLworICAgICAgICBzaG9wYXJwKCk7CisgICAg ICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9YRkVSICovCisK KyNpZm5kZWYgTk9MT0NBTAorICAgICAgY2FzZSBTSENPTTogICAgICAgICAgICAgICAgICAgICAg IC8qIENvbW11bmljYXRpb24gcGFyYW1ldGVycyAqLworICAgICAgICBwcmludGYoIlxuIik7Cisg ICAgICAgIHNob3BhcmMoKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgeworICAgICAgICAgICAgaW50 IGk7CisgICAgICAgICAgICBjaGFyICpzID0gIih1bmtub3duKSI7CisgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgbnBydHk7IGkrKykKKyAgICAgICAgICAgICAgaWYgKHBydHl0YWJbaV0ua3d2 YWwgPT0gcHJpb3JpdHkpIHsKKyAgICAgICAgICAgICAgICAgIHMgPSBwcnR5dGFiW2ldLmt3ZDsK KyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBw cmludGYoIiBQcmlvcml0eTogJXNcbiIsIHMgKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAq LworCisgICAgICAgIHByaW50ZigiXG4iKTsKKyNpZmRlZiBORVRDT05OCisgICAgICAgIGlmICgh bmV0d29yaworI2lmZGVmIElLU0QKKyAgICAgICAgICAgICAmJiAhaW5zZXJ2ZXIKKyNlbmRpZiAv KiBJS1NEICovCisgICAgICAgICAgICAgKSB7CisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgICAg ICAgICAgc2hvbWRtKCk7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisjaWZkZWYgTkVUQ09O TgorICAgICAgICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZuZGVmIE5PRElBTAorI2lm ZGVmIElLU0QKKyAgICAgICAgaWYgKCAhaW5zZXJ2ZXIgKQorI2VuZGlmIC8qIElLU0QgKi8KKyAg ICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJUeXBlIFNIT1cgRElBTCB0byBzZWUgRElBTC1y ZWxhdGVkIGl0ZW1zLlxuIik7CisgICAgICAgICAgICBwcmludGYoIlR5cGUgU0hPVyBNT0RFTSB0 byBzZWUgbW9kZW0tcmVsYXRlZCBpdGVtcy5cbiIpOworI2lmZGVmIENLX1RBUEkKKyAgICAgICAg ICAgIHByaW50ZigiVHlwZSBTSE9XIFRBUEkgdG8gc2VlIFRBUEktcmVsYXRlZCBpdGVtcy5cbiIp OworI2VuZGlmIC8qIENLX1RBUEkgKi8KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIE5PRElBTCAqLworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0xP Q0FMICovCisKKyAgICAgIGNhc2UgU0hGSUw6ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl IHBhcmFtZXRlcnMgKi8KKyAgICAgICAgc2hvZmlsKCk7CisgICAgICAgIC8qIHByaW50ZigiXG4i KTsgKi8gICAgICAgICAgICAgLyogKG91dCBvJyBzcGFjZSkgKi8KKyAgICAgICAgYnJlYWs7CisK KyNpZm5kZWYgTk9DU0VUUworICAgICAgY2FzZSBTSExORzogICAgICAgICAgICAgICAgICAgICAg IC8qIExhbmd1YWdlcyAqLworICAgICAgICBzaG9wYXJsKCk7CisgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBTSFNDUjogICAg ICAgICAgICAgICAgICAgICAgIC8qIFNjcmlwdHMgKi8KKyAgICAgICAgcHJpbnRmKCIgQ29tbWFu ZCBxdW90aW5nOiAgICAgICAgJXNcbiIsIHNob3dvZmYoY21kZ3F1bygpKSk7CisgICAgICAgIHBy aW50ZigiIFRha2UgIGVjaG86ICAgICAgICAgICAgICVzXG4iLCBzaG93b2ZmKHRlY2hvKSk7Cisg ICAgICAgIHByaW50ZigiIFRha2UgIGVycm9yOiAgICAgICAgICAgICVzXG4iLCBzaG93b2ZmKHRh a2VycltjbWRsdmxdKSk7CisgICAgICAgIHByaW50ZigiIE1hY3JvIGVjaG86ICAgICAgICAgICAg ICVzXG4iLCBzaG93b2ZmKG1lY2hvKSk7CisgICAgICAgIHByaW50ZigiIE1hY3JvIGVycm9yOiAg ICAgICAgICAgICVzXG4iLCBzaG93b2ZmKG1lcnJvcltjbWRsdmxdKSk7CisgICAgICAgIHByaW50 ZigiIFF1aWV0OiAgICAgICAgICAgICAgICAgICVzXG4iLCBzaG93b2ZmKHF1aWV0KSk7CisgICAg ICAgIHByaW50ZigiIFZhcmlhYmxlIGV2YWx1YXRpb246ICAgICVzIFtcXCUleCBhbmQgXFwmeFtd IHZhcmlhYmxlc11cbiIsCisJICAgICAgIHZhcmV2YWwgPyAicmVjdXJzaXZlIiA6ICJzaW1wbGUi KTsKKyAgICAgICAgcHJpbnRmKCIgRnVuY3Rpb24gZGlhZ25vc3RpY3M6ICAgJXNcbiIsIHNob3dv ZmYoZm5kaWFncykpOworICAgICAgICBwcmludGYoIiBGdW5jdGlvbiBlcnJvcjogICAgICAgICAl c1xuIiwgc2hvd29mZihmbmVycm9yKSk7CisjaWZkZWYgQ0tMRUFSTgorICAgICAgICB7CisgICAg ICAgICAgICBleHRlcm4gY2hhciAqIGxlYXJuZmlsZTsKKyAgICAgICAgICAgIGV4dGVybiBpbnQg bGVhcm5pbmc7CisgICAgICAgICAgICBpZiAobGVhcm5maWxlKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCIgTEVBUk4gZmlsZTogICAgICAgICAgICAgJXMgKCVzKVxuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgbGVhcm5maWxlLAorICAgICAgICAgICAgICAgICAgICAgICBsZWFybmluZyA/ ICJPTiIgOiAiT0ZGIgorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICAgIHByaW50ZigiIExFQVJOIGZpbGU6ICAgICAgICAgICAgIChub25l KVxuIik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS0xFQVJOICovCisgICAgICAgIHNob2lucHV0 KCk7CisgICAgICAgIHNob291dHB1dCgpOworI2lmbmRlZiBOT1NDUklQVAorICAgICAgICBwcmlu dGYoIiBTY3JpcHQgZWNobzogICAgICAgICAgICAlc1xuIiwgc2hvd29mZihzZWNobykpOworI2Vu ZGlmIC8qIE5PU0NSSVBUICovCisgICAgICAgIHByaW50ZigiIENvbW1hbmQgYnVmZmVyIGxlbmd0 aDogICVkXG4iLCBDTURCTCk7CisgICAgICAgIHByaW50ZigiIEF0b20gYnVmZmVyIGxlbmd0aDog ICAgICVkXG4iLCBBVE1CTCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZm5kZWYgTk9YTUlUCisgICAgICBjYXNlIFNIWE1JOgorICAgICAgICBwcmludGYoIlxuIik7 CisgICAgICAgIHByaW50ZigiIEZpbGUgdHlwZTogICAgICAgICAgICAgICAgICAgICAgICVzXG4i LAorICAgICAgICAgICAgICAgYmluYXJ5ID8gImJpbmFyeSIgOiAidGV4dCIpOworI2lmbmRlZiBO T0NTRVRTCisgICAgICAgIHByaW50ZigiIEZpbGUgY2hhcmFjdGVyLXNldDogICAgICAgICAgICAg ICVzXG4iLAorICAgICAgICAgICAgICAgZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7CisjaWZk ZWYgT1MyCisgICAgICAgIGlmICggaXN1bmljb2RlKCkgKSB7CisgICAgICAgIHByaW50ZigiIFRl cm1pbmFsIENoYXJhY3RlciAocmVtb3RlKTogICAgICVzXG4iLAorICAgICAgICAgICAgICB0dF91 dGY4ID8gInV0Zi04IiA6IHRjc3IgPT0gVFhfVFJBTlNQID8gInRyYW5zcGFyZW50IiA6CisgICAg ICAgICAgICAgIHRjc3IgPT0gVFhfVU5ERUYgPyAidW5kZWZpbmVkIiA6IHR4cmluZm9bdGNzcl0t PmtleXdkKTsKKyAgICAgICAgcHJpbnRmKCIgVGVybWluYWwgQ2hhcmFjdGVyIChsb2NhbCk6ICAg ICAgJXNcbiIsCisgICAgICAgICAgICAgIHRjc2wgPT0gVFhfVFJBTlNQID8gInRyYW5zcGFyZW50 IiA6CisgICAgICAgICAgICAgIHRjc2wgPT0gVFhfVU5ERUYgPyAidW5kZWZpbmVkIiA6IHR4cmlu Zm9bdGNzbF0tPmtleXdkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCIgVGVy bWluYWwgQ2hhcmFjdGVyIChyZW1vdGUpOiAgICAgJXNcbiIsCisgICAgICAgICAgICAgIHR0X3V0 ZjggPyAidXRmLTgiIDogdGNzciA9PSBUWF9UUkFOU1AgPyAidHJhbnNwYXJlbnQiIDoKKyAgICAg ICAgICAgICAgdGNzciA9PSBUWF9VTkRFRiA/ICJ1bmRlZmluZWQiIDogdHhyaW5mb1t0Y3NyXS0+ a2V5d2QpOworICAgICAgICBwcmludGYoIiBUZXJtaW5hbCBDaGFyYWN0ZXIgKGxvY2FsKTogICAg ICAlc1xuIiwKKyAgICAgICAgICAgICAgdGNzbCA9PSBUWF9UUkFOU1AgPyAidHJhbnNwYXJlbnQi IDoKKyAgICAgICAgICAgICAgdGNzbCA9PSBUWF9VTkRFRiA/ICJ1bmRlZmluZWQiIDogdHhyaW5m b1t0Y3NsXS0+a2V5d2QpOworICAgICAgICB9CisjZWxzZSAvKiBPUzIgKi8KKyAgICAgICAgcHJp bnRmKCIgVGVybWluYWwgY2hhcmFjdGVyLXNldCAocmVtb3RlKTogJXNcbiIsCisgICAgICAgICAg ICAgICBmY3NpbmZvW3Rjc3JdLmtleXdvcmQpOworICAgICAgICBwcmludGYoIiBUZXJtaW5hbCBj aGFyYWN0ZXItc2V0IChsb2NhbCk6ICAlc1xuIiwKKyAgICAgICAgICAgICAgIGZjc2luZm9bdGNz bF0ua2V5d29yZCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAg ICAgICBwcmludGYoIiBUZXJtaW5hbCBieXRlc2l6ZTogICAgICAgICAgICAgICAlZFxuIiwKKyAg ICAgICAgICAgICAgIChjbWFzayA9PSAweGZmKSA/IDggOiA3KTsKKyAgICAgICAgcHJpbnRmKCIg VGVybWluYWwgZWNobzogICAgICAgICAgICAgICAgICAgJXNcbiIsCisgICAgICAgICAgICAgICBk dXBsZXggPyAibG9jYWwiIDogInJlbW90ZSIpOworICAgICAgICBwcmludGYoIiBUcmFuc21pdCBF T0Y6ICAgICAgICAgICAgICAgICAgICAiKTsKKyAgICAgICAgaWYgKCp4bWl0YnVmID09IE5VTCkg eworICAgICAgICAgICAgcHJpbnRmKCIobm9uZSlcbiIpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgY2hhciAqcDsKKyAgICAgICAgICAgIHAgPSB4bWl0YnVmOworICAgICAgICAgICAg d2hpbGUgKCpwKSB7CisgICAgICAgICAgICAgICAgaWYgKCpwIDwgU1ApCisgICAgICAgICAgICAg ICAgICBwcmludGYoIl4lYyIsY3RsKCpwKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIlYyIsKnApOworICAgICAgICAgICAgICAgIHArKzsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoeG1pdGYpCisgICAgICAgICAgcHJpbnRmKCIgVHJhbnNtaXQgRmlsbDogICAgICAgICAgICAg ICAgICAgJWRcbiIsIHhtaXRmKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHByaW50ZigiIFRy YW5zbWl0IEZpbGw6ICAgICAgICAgICAgICAgICAgIChub25lKVxuIik7CisgICAgICAgIHByaW50 ZigiIFRyYW5zbWl0IExpbmVmZWVkOiAgICAgICAgICAgICAgICVzXG4iLHNob3dvZmYoeG1pdGwp KTsKKyAgICAgICAgaWYgKHhtaXRwKQorICAgICAgICAgIHByaW50ZigiIFRyYW5zbWl0IFByb21w dDogICAgICAgICAgICAgICAgICVkICglcylcbiIsCisgICAgICAgICAgICAgICAgIHhtaXRwLAor ICAgICAgICAgICAgICAgICBjaGFydG9zdHIoeG1pdHApCisgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIiBUcmFuc21pdCBQcm9tcHQ6ICAgICAgICAg ICAgICAgICAobm9uZSlcbiIpOworICAgICAgICBwcmludGYoIiBUcmFuc21pdCBFY2hvOiAgICAg ICAgICAgICAgICAgICAlc1xuIiwgc2hvd29mZih4bWl0eCkpOworICAgICAgICBwcmludGYoIiBU cmFuc21pdCBMb2NraW5nLVNoaWZ0OiAgICAgICAgICAlc1xuIiwgc2hvd29mZih4bWl0cykpOwor ICAgICAgICBwcmludGYoIiBUcmFuc21pdCBQYXVzZTogICAgICAgICAgICAgICAgICAlZCAobWls bGlzZWNvbmQlcylcbiIsCisgICAgICAgICAgICAgICB4bWl0dywKKyAgICAgICAgICAgICAgICh4 bWl0dyA9PSAxKSA/ICIiIDogInMiCisgICAgICAgICAgICAgICApOworICAgICAgICBwcmludGYo IiBUcmFuc21pdCBUaW1lb3V0OiAgICAgICAgICAgICAgICAlZCAoc2Vjb25kJXMpXG4iLAorICAg ICAgICAgICAgICAgeG1pdHQsCisgICAgICAgICAgICAgICAoeG1pdHQgPT0gMSkgPyAiIiA6ICJz IgorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBicmVh azsKKyNlbmRpZiAvKiBOT1hNSVQgKi8KKworI2lmbmRlZiBOT0RJQUwKKyAgICAgIGNhc2UgU0hN T0Q6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIE1PREVNICovCisjaWZkZWYgSUtTRAor ICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1h bmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAg ICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgc2hvbW9kZW0oKTsgICAgICAgICAg ICAgICAgICAgICAvKiBTaG93IFNFVCBNT0RFTSBpdGVtcyAqLworICAgICAgICBicmVhazsKKyNl bmRpZiAvKiBOT0RJQUwgKi8KKworI2lmbmRlZiBNQUMKKyAgICAgIGNhc2UgU0hERkxUOgorICAg ICAgICBwcmludGYoIiVzXG4iLHpndGRpcigpKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyog TUFDICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgY2FzZSBTSEVTQzoKKyNpZmRlZiBJS1NE CisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29t bWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor ICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICByZXR1cm4oc2hvZXNjKGVzY2Fw ZSkpOworCisjaWZuZGVmIE5PRElBTAorICAgICAgY2FzZSBTSERJQTogICAgICAgICAgICAgICAg ICAgICAgIC8qIFNIT1cgRElBTCAqLworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVy KSB7CisgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsK KyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJ S1NEICovCisgICAgICAgIHNobWRtbGluKCk7CisgICAgICAgIHByaW50ZigiLCBzcGVlZDogIik7 CisgICAgICAgIGlmICgoenogPSB0dGdzcGQoKSkgPCAwKSB7CisgICAgICAgICAgICBwcmludGYo InVua25vd24iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh6eiA9PSA4ODgw KSBwcmludGYoIjc1LzEyMDAiKTsgZWxzZSBwcmludGYoIiVsZCIsenopOworICAgICAgICB9Cisg ICAgICAgIGlmIChjYXJyaWVyID09IENBUl9PRkYpIHMgPSAib2ZmIjsKKyAgICAgICAgZWxzZSBp ZiAoY2FycmllciA9PSBDQVJfT04pIHMgPSAib24iOworICAgICAgICBlbHNlIGlmIChjYXJyaWVy ID09IENBUl9BVVQpIHMgPSAiYXV0byI7CisgICAgICAgIGVsc2UgcyA9ICJ1bmtub3duIjsKKyAg ICAgICAgcHJpbnRmKCIsIGNhcnJpZXI6ICVzIiwgcyk7CisgICAgICAgIGlmIChjYXJyaWVyID09 IENBUl9PTikgeworICAgICAgICAgICAgaWYgKGNkdGltbykgcHJpbnRmKCIsIHRpbWVvdXQ6ICVk IHNlYyIsIGNkdGltbyk7CisgICAgICAgICAgICBlbHNlIHByaW50ZigiLCB0aW1lb3V0OiBub25l Iik7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBkb3Nob2RpYWwo KTsKKyAgICAgICAgaWYgKGxvY2FsCisjaWZkZWYgTkVUQ09OTgorICAgICAgICAgICAgJiYgIW5l dHdvcmsKKyNlbmRpZiAvKiBORVRDT05OICovCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAg IHByaW50ZigiVHlwZSBTSE9XIE1PREVNIHRvIHNlZSBtb2RlbSBzZXR0aW5ncy5cbiIpOworI2lm ZGVmIENLX1RBUEkKKyAgICAgICAgICAgIHByaW50ZigiVHlwZSBTSE9XIFRBUEkgdG8gc2VlIFRB UEktcmVsYXRlZCBpdGVtc1xuIik7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworICAgICAgICAgICAg cHJpbnRmKCJUeXBlIFNIT1cgQ09NTVVOSUNBVElPTlMgdG8gc2VlIG1vZGVtIHNpZ25hbHMuXG4i KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfTEFCRUxFRAorICAg ICAgY2FzZSBTSExCTDogICAgICAgICAgICAgICAgICAgICAgIC8qIExhYmVsZWQgZmlsZSBpbmZv ICovCisgICAgICAgIHNob2xibCgpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19MQUJF TEVEICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICAgIGNhc2UgU0hDU0U6ICAgICAgICAg ICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0cyAqLworI2lmZGVmIE5PQ1NFVFMKKyAgICAg ICAgcHJpbnRmKAorIiBDaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQg aW4gdGhpcyB2ZXJzaW9uIG9mIEMtS2VybWl0XG4iKTsKKyNlbHNlCisgICAgICAgIHNob2NoYXJz ZXQoKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgIHByaW50ZigiXG4gVW5rbm93bi1DaGFyLVNl dDogJXNcbiIsCisgICAgICAgICAgICAgICB1bmtjcyA/ICJLZWVwIiA6ICJEaXNjYXJkIik7Cisj ZW5kaWYgLyogTk9YRkVSICovCisjaWZkZWYgT1MyCisgICAgICAgIHByaW50ZigiXG4iKTsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgc2hvdGNzKHRjc2wsdGNzcik7CisgICAgICAgIHByaW50 ZigiXG4iKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgLyogUEMgQ29kZSBQYWdlIGluZm9ybWF0aW9u ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgY3BidWZbMTI4XTsKKyAgICAgICAgICAg IGludCBjcGxpc3RbMTZdLCBjcHM7CisgICAgICAgICAgICBpbnQgYWN0aXZlY3A7CisgICAgICAg ICAgICBjcHMgPSBvczJnZXRjcGxpc3QoY3BsaXN0LCBzaXplb2YoY3BsaXN0KSk7CisKKyAgICAg ICAgICAgIHNwcmludGYoY3BidWYsICAgICAgICAgICAgICAvKiBTQUZFICovCisgICAgICAgICAg ICAgICAgICAgICIlM2QsJTNkLCUzZCwlM2QsJTNkLCUzZCwlM2QsJTNkLCUzZCwlM2QsJTNkLCUz ZCIsCisgICAgICAgICAgICAgICAgICAgICBjcHMgPiAxID8gY3BsaXN0WzFdIDogMCwKKyAgICAg ICAgICAgICAgICAgICAgIGNwcyA+IDIgPyBjcGxpc3RbMl0gOiAwLCBjcHMgPiAzID8gY3BsaXN0 WzNdIDogMCwKKyAgICAgICAgICAgICAgICAgICAgIGNwcyA+IDQgPyBjcGxpc3RbNF0gOiAwLCBj cHMgPiA1ID8gY3BsaXN0WzVdIDogMCwKKyAgICAgICAgICAgICAgICAgICAgIGNwcyA+IDYgPyBj cGxpc3RbNl0gOiAwLCBjcHMgPiA3ID8gY3BsaXN0WzddIDogMCwKKyAgICAgICAgICAgICAgICAg ICAgIGNwcyA+IDggPyBjcGxpc3RbOF0gOiAwLCBjcHMgPiA5ID8gY3BsaXN0WzldIDogMCwKKyAg ICAgICAgICAgICAgICAgICAgIGNwcyA+IDEwID8gY3BsaXN0WzEwXSA6IDAsIGNwcyA+IDExID8g Y3BsaXN0WzExXSA6IDAsCisgICAgICAgICAgICAgICAgICAgICBjcHMgPiAxMiA/IGNwbGlzdFsx Ml0gOiAwCisgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcHJpbnRmKCIgQ29k ZSBQYWdlczpcbiIpOworICAgICAgICAgICAgYWN0aXZlY3AgPSBvczJnZXRjcCgpOworICAgICAg ICAgICAgaWYgKCBhY3RpdmVjcCApIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCIgICAgIEFjdGl2 ZTogJWRcbiIsYWN0aXZlY3ApOworICAgICAgICAgICAgICBpZiAoIWlzV2luOTUoKSkKKyAgICAg ICAgICAgICAgICBwcmludGYoIiAgQXZhaWxhYmxlOiAlc1xuIixjcGJ1Zik7CisgICAgICAgICAg ICB9IGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCIgICAgIEFjdGl2ZTogbi9hXG4iKTsKKyAg ICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgU0hGRUE6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBGZWF0dXJlcyAqLworICAgICAgICBzaG9mZWEoKTsKKyAg ICAgICAgYnJlYWs7CisKKyNpZmRlZiBDS19TUEVFRAorICAgICAgY2FzZSBTSENUTDogICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbnRyb2wtUHJlZml4IHRhYmxlICovCisgICAgICAgIHNob2N0 bCgpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisgICAgICBjYXNl IFNIRVhJOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBleGl0aGFuZ3VwOworICAgICAgICAgIHBy aW50ZigiXG4gRXhpdCB3YXJuaW5nICVzXG4iLCB4aXR3YXJuID8KKyAgICAgICAgICAgICAgICAg KHhpdHdhcm4gPT0gMSA/ICJvbiIgOiAiYWx3YXlzIikgOiAib2ZmIik7CisgICAgICAgICAgcHJp bnRmKCIgRXhpdCBvbi1kaXNjb25uZWN0OiAlc1xuIiwgc2hvd29mZihleGl0b25jbG9zZSkpOwor ICAgICAgICAgIHByaW50ZigiIEV4aXQgaGFuZ3VwOiAlc1xuIiwgc2hvd29mZihleGl0aGFuZ3Vw KSk7CisgICAgICAgICAgcHJpbnRmKCIgQ3VycmVudCBleGl0IHN0YXR1czogJWRcblxuIiwgeGl0 c3RhKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgU0hQUlQ6IHsKKyNp ZmRlZiBQUklOVFNXSQorICAgICAgICAgIGV4dGVybiBpbnQgcHJpbnR0aW1vLCBwcmludGVydHlw ZSwgbm9wcmludGVyOworICAgICAgICAgIGV4dGVybiBjaGFyICogcHJpbnR0ZXJtLCAqIHByaW50 c2VwOworICAgICAgICAgIGV4dGVybiBpbnQgcHJuY3M7CisjaWZkZWYgQlBSSU5UCisgICAgICAg ICAgZXh0ZXJuIGludCBwcmludGJpZGk7CisjZW5kaWYgLyogQlBSSU5UICovCisjZW5kaWYgLyog UFJJTlRTV0kgKi8KKworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyICYmCisjaWZk ZWYgQ0tfTE9HSU4KKyAgICAgICAgICAgIGlzZ3Vlc3QKKyNlbHNlIC8qIENLX0xPR0lOICovCisg ICAgICAgICAgICAwCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgICAgICApIHsKKyAg ICAgICAgICAgIHByaW50ZigiU29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8K KyNpZmRlZiBQUklOVFNXSQorICAgICAgICAgIGlmIChub3ByaW50ZXIpIHsKKyAgICAgICAgICAg ICAgcHJpbnRmKCJQcmludGVyOiAobm9uZSlcblxuIik7CisgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIH0KKyNlbmRpZiAvKiBQUklOVFNXSSAqLworCisgICAgICAgICAgcHJpbnRmKCJQ cmludGVyOiAlcyVzXG4iLAorCisgICAgICAgICAgICAgICAgIHByaW50cGlwZSA/ICJ8ICIgOiAi IiwKKyAgICAgICAgICAgICAgICAgcHJpbnRlcm5hbWUgPyBwcmludGVybmFtZSA6CisjaWZkZWYg T1MyCisgICAgICAgICAgICAgICAgICJQUk4iCisjZWxzZQorICAgICAgICAgICAgICAgICAiKGRl ZmF1bHQpIgorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgICApOworI2lmZGVmIFBS SU5UU1dJCisjaWZkZWYgQlBSSU5UCisgICAgICAgICAgaWYgKHByaW50YmlkaSkgeworICAgICAg ICAgICAgICBwcmludGYoIiAvQklESVJFQ1RJT05BTFxuIik7CisgICAgICAgICAgICAgIGlmIChw cG9ydHNwZWVkID4gMCkKKyAgICAgICAgICAgICAgICBwcmludGYoIiAvU1BFRUQ6JWxkXG4iLHBw b3J0c3BlZWQpOworICAgICAgICAgICAgICBwcmludGYoIiAvUEFSSVRZOiVzXG4iLHBhcm5hbSgo Y2hhcilwcG9ydHBhcml0eSkpOworICAgICAgICAgICAgICBwcmludGYoIiAvRkxPVzolc1xuIiwK KyAgICAgICAgICAgICAgICAgICAgIHBwb3J0ZmxvdyA9PSBGTE9fTk9ORSA/ICJOT05FIiA6Cisg ICAgICAgICAgICAgICAgICAgICAocHBvcnRmbG93ID09IEZMT19SVFNDID8gIlJUUy9DVFMiIDog IlhPTi9YT0ZGIikKKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgfSBlbHNlCisg ICAgICAgICAgICBwcmludGYoIiAvT1VUUFVULU9OTFlcbiIpOworI2VuZGlmIC8qIEJQUklOVCAq LworICAgICAgICAgIHN3aXRjaCAocHJpbnRlcnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgUFJU X05PTjogcHJpbnRmKCIgL05PTkVcbiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUFJUX0ZJ TDogcHJpbnRmKCIgL0ZJTEVcbiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUFJUX1BJUDog cHJpbnRmKCIgL1BJUEVcbiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUFJUX0RPUzogcHJp bnRmKCIgL0RPUy1ERVZJQ0VcbiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUFJUX1dJTjog cHJpbnRmKCIgL1dJTkRPV1MtUVVFVUVcbiIpOyBicmVhazsKKyAgICAgICAgICB9CisgICAgICAg ICAgcHJpbnRmKCIgL1RJTUVPVVQ6JWRcbiIscHJpbnR0aW1vKTsKKyAgICAgICAgICBpZiAocHJp bnR0ZXJtKSB7CisgICAgICAgICAgICAgIHByaW50ZigiIC9FTkQtT0YtSk9CLVNUUklORzoiKTsK KyAgICAgICAgICAgICAgc2hvc3RyZGVmKHByaW50dGVybSk7CisgICAgICAgICAgICAgIHByaW50 ZigiXG4iKTsKKyAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiIC9FTkQtT0Yt Sk9CLVNUUklORzoobm9uZSlcbiIpOworICAgICAgICAgIHByaW50ZigiIC9KT0ItSEVBREVSLUZJ TEU6JXNcbiIscHJpbnRzZXAgPyBwcmludHNlcCA6ICIobm9uZSkiKTsKKyAgICAgICAgICBwcmlu dGYoIiAvQ0hBUkFDVEVSLVNFVDogJXNcbiIsdHhyaW5mb1twcm5jc10tPmtleXdkKTsKKyNlbmRp ZiAvKiBQUklOVFNXSSAqLworICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICBicmVh azsKKyAgICAgIH0KKworICAgICAgY2FzZSBTSENNRDogeworI2lmZGVmIERPVUJMRVFVT1RJTkcK KyAgICAgICAgICBleHRlcm4gaW50IGRibHF1bzsKKyNlbmRpZiAvKiBET1VCTEVRVU9USU5HICov CisjaWZkZWYgQ0tfQVVUT0RMCisgICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBhdXRvZG93bmxv YWQ6ICVzXG4iLHNob3dvZmYoY21kYWRsKSk7CisjZWxzZQorICAgICAgICAgIHByaW50ZigiIENv bW1hbmQgYXV0b2Rvd25sb2FkOiAobm90IGF2YWlsYWJsZSlcbiIpOworI2VuZGlmIC8qIENLX0FV VE9ETCAqLworICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgYnl0ZXNpemU6ICVkIGJpdHNcbiIs IChjbWRtc2sgPT0gMDM3NykgPyA4IDogNyk7CisgICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBl cnJvci1kaXNwbGF5OiAlZFxuIiwgY21kX2Vycik7CisjaWZkZWYgQ0tfUkVDQUxMCisgICAgICAg ICAgcHJpbnRmKCIgQ29tbWFuZCByZWNhbGwtYnVmZmVyLXNpemU6ICVkXG4iLGNtX3JlY2FsbCk7 CisjZWxzZQorICAgICAgICAgIHByaW50ZigiIENvbW1hbmQgcmVjYWxsLWJ1ZmZlciBub3QgYXZh aWxhYmxlIGluIHRoaXMgdmVyc2lvblxuIik7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisjaWZk ZWYgQ0tfUkVDQUxMCisgICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCByZXRyeTogJXNcbiIsc2hv d29mZihjbV9yZXRyeSkpOworI2Vsc2UKKyAgICAgICAgICBwcmludGYoIiBDb21tYW5kIHJldHJ5 IG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uXG4iKTsKKyNlbmRpZiAvKiBDS19SRUNBTEwg Ki8KKyAgICAgICAgICBwcmludGYoIiBDb21tYW5kIGludGVycnVwdGlvbjogJXNcbiIsIHNob3dv ZmYoY21kaW50KSk7CisgICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBxdW90aW5nOiAlc1xuIiwg c2hvd29mZihjbWRncXVvKCkpKTsKKyNpZmRlZiBET1VCTEVRVU9USU5HCisgICAgICAgICAgcHJp bnRmKCIgQ29tbWFuZCBkb3VibGVxdW90aW5nOiAlc1xuIiwgc2hvd29mZihkYmxxdW8pKTsKKyNl bmRpZiAvKiBET1VCTEVRVU9USU5HICovCisgICAgICAgICAgcHJpbnRmKCIgQ29tbWFuZCBtb3Jl LXByb21wdGluZzogJXNcbiIsIHNob3dvZmYoeGFza21vcmUpKTsKKyAgICAgICAgICBwcmludGYo IiBDb21tYW5kIGhlaWdodDogJWRcbiIsIGNtZF9yb3dzKTsKKyAgICAgICAgICBwcmludGYoIiBD b21tYW5kIHdpZHRoOiAgJWRcbiIsIGNtZF9jb2xzKTsKKyNpZm5kZWYgSUtTRE9OTFkKKyNpZmRl ZiBPUzIKKyAgICAgICAgICBwcmludGYoIiBDb21tYW5kIHN0YXR1c2xpbmU6ICVzXG4iLHNob3dv ZmYodHRfc3RhdHVzW1ZDTURdKSk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogSUtTRE9O TFkgKi8KKyNpZmRlZiBMT0NVUworICAgICAgICAgIHByaW50ZigiIExvY3VzOiAgICAgICAgICAl cyIsCisgICAgICAgICAgICAgICAgIGF1dG9sb2N1cyA/IChhdXRvbG9jdXMgPT0gMiA/ICJhc2si IDogImF1dG8iKSA6CisJCSAobG9jdXMgPyAibG9jYWwiIDogInJlbW90ZSIpKTsKKyAgICAgICAg ICBpZiAoYXV0b2xvY3VzKQorICAgICAgICAgICAgcHJpbnRmKCIgKCVzKSIsIGxvY3VzID8gImxv Y2FsIiA6ICJyZW1vdGUiKTsKKyAgICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYgLyogTE9D VVMgKi8KKyAgICAgICAgICBwcmludGYoIiBIaW50czogICAgICAgICAgJXNcbiIsIHNob3dvZmYo aGludHMpKTsKKyAgICAgICAgICBwcmludGYoIiBRdWlldDogICAgICAgICAgJXNcbiIsIHNob3dv ZmYocXVpZXQpKTsKKyAgICAgICAgICBwcmludGYoIiBNYXhpbXVtIGNvbW1hbmQgbGVuZ3RoOiAl ZFxuIiwgQ01EQkwpOworI2lmbmRlZiBOT1NQTAorICAgICAgICAgIHsKKyAgICAgICAgICAgICAg Y2hhciAqIHM7CisgICAgICAgICAgICAgIGludCBrOworICAgICAgICAgICAgICBwcmludGYoIiBN YXhpbXVtIG51bWJlciBvZiBtYWNyb3M6ICVkXG4iLCBNQUNfTUFYKTsKKyAgICAgICAgICAgICAg cHJpbnRmKCIgTWFjcm9zIGRlZmluZWQ6ICVkXG4iLCBubWFjKTsKKyAgICAgICAgICAgICAgcHJp bnRmKCIgTWF4aW11bSBtYWNybyBkZXB0aDogJWRcbiIsIE1BQ0xFVkVMKTsKKyAgICAgICAgICAg ICAgcHJpbnRmKCIgTWF4aW11bSBUQUtFIGRlcHRoOiAlZFxuIiwgTUFYVEFLRSk7CisgICAgICAg ICAgICAgIHMgPSAiKG5vdCBkZWZpbmVkKSI7CisgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0 YWIsIm9uX3Vua25vd25fY29tbWFuZCIsbm1hYyk7CisgICAgICAgICAgICAgIGlmIChrID4gLTEp IGlmIChtYWN0YWJba10ubXZhbCkgcyA9IG1hY3RhYltrXS5tdmFsOworICAgICAgICAgICAgICBw cmludGYoIiBPTl9VTktOT1dOX0NPTU1BTkQ6ICVzXG4iLHMpOworICAgICAgICAgIH0KKyNlbmRp ZiAvKiBOT1NQTCAqLworI2lmZGVmIFVOSVgKKyNpZm5kZWYgTk9KQworICAgICAgICAgIHByaW50 ZigiIFN1c3BlbmQ6ICVzXG4iLCBzaG93b2ZmKHhzdXNwZW5kKSk7CisjZW5kaWYgLyogTk9KQyAq LworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgICBwcmludGYoIiBBY2Nlc3MgdG8gZXh0ZXJu YWwgY29tbWFuZHMgYW5kIHByb2dyYW1zJXMgYWxsb3dlZFxuIiwKKyNpZm5kZWYgTk9QVVNICisg ICAgICAgICAgICAgICAgICFub3B1c2ggPyAiIiA6CisjZW5kaWYgLyogTk9QVVNIICovCisgICAg ICAgICAgICAgICAgICAiIG5vdCIpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisjaWZu ZGVmIE5PU1BMCisgICAgICBjYXNlIFNIQUxSTToKKyAgICAgICAgaWYgKGNrX2FsYXJtKQorICAg ICAgICAgIHByaW50ZigiQWxhcm0gYXQgJXMgJXNcbiIsYWxybV9kYXRlLGFscm1fdGltZSk7Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYoIihubyBhbGFybSBzZXQpXG4iKTsKKyAgICAg ICAgYnJlYWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT01TRU5ECisgICAgICBj YXNlIFNIU0ZMOiB7CisgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBmaWxlbGlzdCAqIGZpbGVoZWFk OworICAgICAgICAgIGlmICghZmlsZWhlYWQpIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJzZW5k LWxpc3QgaXMgZW1wdHlcbiIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHN0 cnVjdCBmaWxlbGlzdCAqIGZscDsKKyAgICAgICAgICAgICAgY2hhciAqIHM7CisgICAgICAgICAg ICAgIGZscCA9IGZpbGVoZWFkOworICAgICAgICAgICAgICB3aGlsZSAoZmxwKSB7CisgICAgICAg ICAgICAgICAgICBzID0gZmxwLT5mbF9hbGlhczsKKyAgICAgICAgICAgICAgICAgIGlmICghcykg cyA9ICIobm9uZSkiOworICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcywgbW9kZTogJXMsIGFs aWFzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmbHAtPmZsX25hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgZ2Ztb2RlKGZscC0+ZmxfbW9kZSwwKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBzCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg ICAgICAgIGZscCA9IGZscC0+ZmxfbmV4dDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0K KyAgICAgIH0KKyAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworI2lmZGVmIENL WFhDSEFSCisgICAgICBjYXNlIFNIREJMOgorICAgICAgICBzaG9kYmwoKTsKKyAgICAgICAgYnJl YWs7CisjZW5kaWYgLyogQ0tYWENIQVIgKi8KKworI2lmbmRlZiBOT1BVU0gKKyNpZm5kZWYgTk9G UklMTFMKKyAgICAgIGNhc2UgU0hFRElUOgorICAgICAgICBpZiAoIWVkaXRvclswXSkgeworICAg ICAgICAgICAgcyA9IGdldGVudigiRURJVE9SIik7CisgICAgICAgICAgICBpZiAocykgY2tzdHJu Y3B5KGVkaXRvcixzLENLTUFYUEFUSCk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiBl ZGl0b3I6ICAlc1xuIiwgZWRpdG9yWzBdID8gZWRpdG9yIDogIihub25lKSIpOworICAgICAgICBp ZiAoZWRpdG9yWzBdKSB7CisgICAgICAgICAgICBwcmludGYoIiBvcHRpb25zOiAlc1xuIiwgZWRp dG9wdHNbMF0gPyBlZGl0b3B0cyA6ICIobm9uZSkiKTsKKyAgICAgICAgICAgIHByaW50ZigiIGZp bGU6ICAgICVzXG4iLCBlZGl0ZmlsZVswXSA/IGVkaXRmaWxlIDogIihub25lKSIpOworICAgICAg ICB9CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBCUk9X U0VSCisgICAgICBjYXNlIFNIQlJPV1NFOgorICAgICAgICBpZiAoIWJyb3dzZXJbMF0pIHsKKyAg ICAgICAgICAgIHMgPSBnZXRlbnYoIkJST1dTRVIiKTsKKyAgICAgICAgICAgIGlmIChzKSBja3N0 cm5jcHkoYnJvd3NlcixzLENLTUFYUEFUSCk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJc biBicm93c2VyOiAlc1xuIiwgYnJvd3NlclswXSA/IGJyb3dzZXIgOiAiKG5vbmUpIik7CisgICAg ICAgIGlmIChicm93c2VyWzBdKSB7CisgICAgICAgICAgICBwcmludGYoIiBvcHRpb25zOiAlc1xu IiwgYnJvd3NvcHRzWzBdID8gYnJvd3NvcHRzIDogIihub25lKSIpOworICAgICAgICAgICAgcHJp bnRmKCIgdXJsOiAgICAgJXNcbiIsIGJyb3dzdXJsWzBdID8gYnJvd3N1cmwgOiAiKG5vbmUpIik7 CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBCUk9XU0VSICovCisjZW5kaWYgLyogIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9QVVNI ICovCisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIENLX1RBUEkKKyAgICAgIGNhc2UgU0hUQVBJ OiAgICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIG9wdGlvbnMgKi8KKyNpZmRlZiBJS1NECisg ICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFu ZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAg ICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICBzaG90YXBpKDApOworICAgICAgICBi cmVhazsKKyAgICAgIGNhc2UgU0hUQVBJX0w6ICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIExv Y2F0aW9ucyAqLworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAg ICAgICBwcmludGYoIlNvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAg ICAgIHNob3RhcGkoMSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTSFRBUElfTTogICAg ICAgICAgICAgICAgICAgIC8qIFRBUEkgTW9kZW0gKi8KKyNpZmRlZiBJS1NECisgICAgICAgIGlm IChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwgY29tbWFuZCBkaXNhYmxl ZC5cclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9Cisj ZW5kaWYgLyogSUtTRCAqLworICAgICAgICBzaG90YXBpKDIpOworICAgICAgICBicmVhazsKKyAg ICAgIGNhc2UgU0hUQVBJX0M6ICAgICAgICAgICAgICAgICAgICAvKiBUQVBJIENvbW0gKi8KKyNp ZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgcHJpbnRmKCJT b3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDApOworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICBzaG90YXBpKDMp OworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19UQVBJICovCisKKyAgICAgIGNhc2UgU0hU Q1A6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9UQ1AgKi8KKyAgICAgICAgcHJpbnRmKCJc biIpOworICAgICAgICBzaG90Y3AoMCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAg YnJlYWs7CisKKyNpZmRlZiBUTkNPREUKKyAgICAgIGNhc2UgU0hURUw6ICAgICAgICAgICAgICAg ICAgICAgICAvKiBURUxORVQgKi8KKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBzaG90 ZWwoMCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh c2UgU0hUT1BUOiAgICAgICAgICAgICAgICAgICAgICAvKiBURUxORVQgT1BUSU9OUyAqLworICAg ICAgICBwcmludGYoIlxuIik7CisgICAgICAgIHNob3RvcHQoMCk7CisgICAgICAgIHByaW50Zigi XG4iKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZmRlZiBDS19U UklHR0VSCisgICAgICBjYXNlIFNIVFJJRzogeworICAgICAgICAgIGV4dGVybiBjaGFyICogdHRf dHJpZ2dlcltdLCAqIHRyaWdnZXJ2YWw7CisgICAgICAgICAgaW50IGk7CisgICAgICAgICAgaWYg KCF0dF90cmlnZ2VyWzBdKSB7CisgICAgICAgICAgICAgIHByaW50ZigiIFRyaWdnZXJzOiAobm9u ZSlcbiIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHByaW50ZigiIFRyaWdn ZXJzOlxuIik7CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBUUklHR0VSUzsgaSsrKSB7 CisgICAgICAgICAgICAgICAgICBpZiAoIXR0X3RyaWdnZXJbaV0pCisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgIFwiJXNcIlxuIix0dF90cmln Z2VyW2ldKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBwcmludGYoIiBNb3N0IHJl Y2VudCB0cmlnZ2VyIGVuY291bnRlcmVkOiAiKTsKKyAgICAgICAgICAgICAgaWYgKHRyaWdnZXJ2 YWwpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJcIiVzXCJcbiIsdHJpZ2dlcnZhbCk7CisgICAg ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIihub25lKVxuIik7CisgICAg ICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorI2VuZGlmIC8qIENLX1RSSUdHRVIg Ki8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICAgIGNhc2UgU0hJ TlA6CisgICAgICAgIHNob2lucHV0KCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PU1BM ICovCisKKyAgICAgIGNhc2UgU0hMT0c6IHsKKyNpZm5kZWYgTUFDCisjaWZkZWYgSUtTRAorICAg ICAgICAgIGlmIChpbnNlcnZlciAmJgorI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgICAgIGlz Z3Vlc3QKKyNlbHNlIC8qIENLX0xPR0lOICovCisgICAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBD S19MT0dJTiAqLworICAgICAgICAgICAgICkgeworICAgICAgICAgICAgcHJpbnRmKCJTb3JyeSwg Y29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIERFQlVHCisgICAgICAgICAg cHJpbnRmKCJcbiBEZWJ1ZyBsb2c6ICAgICAgICVzIiwgZGVibG9nID8gZGViZmlsIDogIihub25l KSIpOworCSAgeworCSAgICAgIGV4dGVybiBpbnQgZGVidGltOworCSAgICAgIGlmIChkZWJ0aW0p IHByaW50ZigiICh0aW1lc3RhbXBzKSIpOworCSAgICAgIHByaW50ZigiXG4iKTsKKwkgIH0KKyNl bmRpZiAvKiBERUJVRyAqLworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgICBwcmludGYoIiBQYWNr ZXQgbG9nOiAgICAgICVzXG4iLCAgIHBrdGxvZyA/IHBrdGZpbCA6ICIobm9uZSkiKTsKKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICAgIHByaW50ZigiIFNlc3Np b24gbG9nOiAgICAgJXMiLCAgIHNlc2xvZyA/IHNlc2ZpbCA6ICIobm9uZSkiKTsKKwkgIHsKKwkg ICAgICBleHRlcm4gaW50IHNlc3NmdCwgc2xvZ3RzLCBzbG9nbnVsOworCSAgICAgIHN3aXRjaCAo c2Vzc2Z0KSB7CisJCWNhc2UgWFlGVF9UOiBwcmludGYoIiAodGV4dCkiKTsgYnJlYWs7CisJCWNh c2UgWFlGVF9COiBwcmludGYoIiAoYmluYXJ5KSIpOyBicmVhazsKKwkJY2FzZSBYWUZUX0Q6IHBy aW50ZigiIChkZWJ1ZykiKTsgYnJlYWs7CisJICAgICAgfQorCSAgICAgIGlmIChzbG9ndHMpIHBy aW50ZigiKHRpbWVzdGFtcGVkKSIpOworCSAgICAgIGlmIChzbG9nbnVsKSBwcmludGYoIihudWxs LXBhZGRlZCkiKTsKKwkgICAgICBwcmludGYoIlxuIik7CisJICB9CisKKyNlbmRpZiAvKiBOT0xP Q0FMICovCisjaWZkZWYgVExPRworICAgICAgICAgIHByaW50ZigiIFRyYW5zYWN0aW9uIGxvZzog JXMgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgKHRyYWxvZyA/ICgqdHJhZmlsID8gdHJhZmls IDogIihub25lKSIpIDogIihub25lKSIpLAorICAgICAgICAgICAgICAgICAodGxvZ2ZtdCA/ICgo dGxvZ2ZtdCA9PSAyKSA/ICJmdHAiIDogInZlcmJvc2UiKSA6ICJicmllZiIpCisgICAgICAgICAg ICAgICAgICk7CisjZW5kaWYgLyogVExPRyAqLworI2lmZGVmIENLTE9HRElBTAorICAgICAgICAg ICAgcHJpbnRmKCIgQ29ubmVjdGlvbiBsb2c6ICAlc1xuIiwgZGlhbG9nID8gZGlhZmlsIDogIihu b25lKSIpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworICAgICAgICAgIHByaW50ZigiXG4iKTsK KyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKworI2lmbmRlZiBO T1NQTAorICAgICAgY2FzZSBTSE9VVFA6ICAgICAgICAgICAgICAgICAgICAgIC8qIE9VVFBVVCAq LworICAgICAgICBzaG9vdXRwdXQoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9TUEwg Ki8KKworI2lmZGVmIFBBVFRFUk5TCisgICAgICBjYXNlIFNIT1BBVDogICAgICAgICAgICAgICAg ICAgICAgLyogUEFUVEVSTlMgKi8KKyAgICAgICAgc2hvcGF0KCk7CisgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgIGNhc2UgU0hP U1RSOiB7ICAgICAgICAgICAgICAgICAgICAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgICBleHRl cm4gaW50IHN0cmVhbXJxLCBjbGVhcnJxLCBjbGVhcmVkOworICAgICAgICAgIGV4dGVybiBsb25n IHRmY3BzOworICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT1cgUkVMSUFCTEUgcmVsaWFibGUiLCIi LHJlbGlhYmxlKTsKKyAgICAgICAgICBwcmludGYoIlxuIFJlbGlhYmxlOiAgICAgJXNcbiIsc2hv d29vYShyZWxpYWJsZSkpOworICAgICAgICAgIHByaW50ZigiIENsZWFyY2hhbm5lbDogJXNcbiIs c2hvd29vYShjbGVhcnJxKSk7CisgICAgICAgICAgcHJpbnRmKCIgU3RyZWFtaW5nOiAgICAlc1xu XG4iLHNob3dvb2Eoc3RyZWFtcnEpKTsKKyAgICAgICAgICBpZiAoKCFsb2NhbCAmJiAoc3RyZWFt cnEgPT0gU0VUX09OKSkgfHwKKyAgICAgICAgICAgICAgKHN0cmVhbXJxID09IFNFVF9BVVRPICYm IHJlbGlhYmxlKSkKKyAgICAgICAgICAgIHByaW50ZigiIFN0cmVhbWluZyB3aWxsIGJlIGRvbmUg aWYgcmVxdWVzdGVkLlxuIik7CisgICAgICAgICAgZWxzZSBpZiAoKHN0cmVhbXJxID09IFNFVF9P RkYpIHx8CisgICAgICAgICAgICAgICAgICAgKChzdHJlYW1ycSA9PSBTRVRfQVVUTykgJiYgIXJl bGlhYmxlKSkKKyAgICAgICAgICAgIHByaW50ZigiIFN0cmVhbWluZyB3aWxsIG5vdCBiZSByZXF1 ZXN0ZWQgYW5kIHdpbGwgbm90IGJlIGRvbmUuXG4iKTsKKyAgICAgICAgICBlbHNlIGlmICgoc3Ry ZWFtcnEgPT0gU0VUX09OKSB8fAorICAgICAgICAgICAgICAgICAgICgoc3RyZWFtcnEgPT0gU0VU X0FVVE8pICYmIHJlbGlhYmxlKSkKKyAgICAgICAgICAgIHByaW50ZigKKyIgU3RyZWFtaW5nIHdp bGwgYmUgcmVxdWVzdGVkIGFuZCB3aWxsIGJlIGRvbmUgaWYgdGhlIG90aGVyIEtlcm1pdCBhZ3Jl ZXMuXG4iKTsKKyAgICAgICAgICBwcmludGYoIiBMYXN0IHRyYW5zZmVyOiAlc3N0cmVhbWluZyVz LCAlbGQgY3BzLlxuIiwKKyAgICAgICAgICAgICAgICAgc3RyZWFtZWQgPiAwID8gIiIgOiAibm8g IiwKKyAgICAgICAgICAgICAgICAgY2xlYXJlZCA/ICIsIGNsZWFyY2hhbm5lbCIgOiAiIiwKKyAg ICAgICAgICAgICAgICAgdGZjcHMKKyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICBwcmlu dGYoIlxuIik7CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisjZW5kaWYgLyogU1RSRUFNSU5H ICovCisKKyAgICAgIGNhc2UgU0hPSUtTOgorICAgICAgICByZXR1cm4oc2hvX2lrcygpKTsKKyAg ICAgICAgYnJlYWs7CisKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgICAgY2FzZSBTSE9B VVRIOgorICAgICAgICByZXR1cm4oc2hvX2F1dGgoMCkpOworI2VuZGlmIC8qIENLX0FVVEhFTlRJ Q0FUSU9OICovCisKKyNpZm5kZWYgTk9GVFAKKyAgICAgIGNhc2UgU0hPRlRQOiB7CisjaWZkZWYg SUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnks IGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBTWVNGVFAKKyAgICAgICAg eworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgZnRwYXBwW10sIGZ0cG9wdHNbXTsKKyAgICAgICAg ICAgIHByaW50ZigiIGZ0cC1jbGllbnQ6ICAlc1xuIiwgZnRwYXBwWzBdID8gZnRwYXBwIDogIihu b25lKSIpOworICAgICAgICAgICAgaWYgKGZ0cGFwcFswXSkKKyAgICAgICAgICAgICAgcHJpbnRm KCIgZnRwIG9wdGlvbnM6ICVzXG4iLCBmdHBvcHRzWzBdID8gZnRwb3B0cyA6ICIobm9uZSkiKTsK KyAgICAgICAgfQorI2Vsc2UKKyNpZmRlZiBORVdGVFAKKyAgICAgICAgc2hvZnRwKDApOworI2Vs c2UKKyAgICAgICAgcHJpbnRmKCIoTm8gRlRQIGNsaWVudCBpbmNsdWRlZCBpbiB0aGlzIHZlcnNp b24gb2YgS2VybWl0LilcbiIpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworI2VuZGlmIC8qIFNZU0ZU UCAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT0ZUUCAqLworCisjaWZu ZGVmIE5PQ01ETAorICAgICAgY2FzZSBTSFhPUFQ6IHsKKyNpZmRlZiBJS1NEQgorICAgICAgICAg IGV4dGVybiBpbnQgZGJlbmFibGVkOworICAgICAgICAgIGV4dGVybiBjaGFyICogZGJmaWxlLCAq IGRiZGlyOworI2VuZGlmIC8qIElLU0RCICovCisjaWZkZWYgQ0tXVE1QCisgICAgICAgICAgZXh0 ZXJuIGludCBja3h3dG1wOworICAgICAgICAgIGV4dGVybiBjaGFyICogd3RtcGZpbGU7CisjZW5k aWYgLyogQ0tXVE1QICovCisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICBleHRlcm4gaW50IGNr eGFub24sIHhmZXJsb2csIGxvZ2ludGltbzsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIHhmZXJm aWxlOworI2lmZGVmIFVOSVgKKyAgICAgICAgICBleHRlcm4gaW50IGNreHByaXY7CisjZW5kaWYg LyogVU5JWCAqLworI2lmZGVmIENLX1BFUk1TCisgICAgICAgICAgZXh0ZXJuIGludCBja3hwZXJt czsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICAg ICAgZXh0ZXJuIGNoYXIgKiBiYW5uZXJmaWxlLCAqIGhlbHBmaWxlOworCisjaWZkZWYgSUtTRAor ICAgICAgICAgIGlmIChpbnNlcnZlciAmJgorI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgICAg IGlzZ3Vlc3QKKyNlbHNlIC8qIENLX0xPR0lOICovCisgICAgICAgICAgICAgIDAKKyNlbmRpZiAv KiBDS19MT0dJTiAqLworICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJT b3JyeSwgY29tbWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMCk7CisgICAgICAgICAgfQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICAgICAgICBwcmlu dGYoIlxuIik7CisgICAgICAgICAgaWYgKCFjbWRpbnQpCisgICAgICAgICAgICBwcmludGYoIiAt LW5vaW50ZXJydXB0c1xuIik7CisgICAgICAgICAgcHJpbnRmKCIgLS1iYW5uZXJmaWxlPSVzXG4i LGJhbm5lcmZpbGUgPyBiYW5uZXJmaWxlIDogIihudWxsKSIpOworICAgICAgICAgIHByaW50Zigi IC0tY2RmaWxlOiVzXG4iLGNkbXNnc3RyID8gY2Rtc2dzdHIgOiAiKG51bGwpIik7CisgICAgICAg ICAgcHJpbnRmKCIgLS1jZG1lc3NhZ2U6JWRcbiIsc3J2Y2Rtc2cpOworICAgICAgICAgIHByaW50 ZigiIC0taGVscGZpbGU6JWRcbiIsaGVscGZpbGUpOworICAgICAgICAgIGlmIChpbnNlcnZlcikg eworICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIH0KKyNpZmRlZiBDS1NZU0xPRworI2lmZGVmIFNZU0xPR0xFVkVMCisgICAgICAgICAg cHJpbnRmKCIgLS1zeXNsb2c6JWQgKGZvcmNlZClcbiIsY2t4c3lzbG9nKTsKKyNlbHNlCisgICAg ICAgICAgcHJpbnRmKCIgLS1zeXNsb2c6JWRcbiIsY2t4c3lzbG9nKTsKKyNlbmRpZiAvKiBTWVNM T0dMRVZFTCAqLworI2VuZGlmIC8qIENLU1lTTE9HICovCisjaWZkZWYgQ0tXVE1QCisgICAgICAg ICAgcHJpbnRmKCIgLS13dG1wbG9nOiVkXG4iLGNreHd0bXApOworICAgICAgICAgIHByaW50Zigi IC0td3RtcGZpbGU9JXNcbiIsd3RtcGZpbGUgPyB3dG1wZmlsZSA6ICIobnVsbCkiKTsKKyNlbmRp ZiAvKiBDS1dUTVAgKi8KKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICBw cmludGYoIiAtLWFub255bW91czolZFxuIixja3hhbm9uKTsKKyNpZmRlZiBVTklYCisgICAgICAg ICAgcHJpbnRmKCIgLS1wcml2aWQ6JWRcbiIsY2t4cHJpdik7CisjZW5kaWYgLyogVU5JWCAqLwor I2lmZGVmIENLX1BFUk1TCisgICAgICAgICAgcHJpbnRmKCIgLS1wZXJtaXNzaW9uOiUwNG9cbiIs Y2t4cGVybXMpOworI2VuZGlmIC8qIENLX1BFUk1TICovCisgICAgICAgICAgcHJpbnRmKCIgLS1p bml0ZmlsZTolc1xuIixhbm9uZmlsZSA/IGFub25maWxlIDogIihudWxsKSIpOworICAgICAgICAg IHByaW50ZigiIC0tdXNlcmZpbGU6JXNcbiIsdXNlcmZpbGUgPyB1c2VyZmlsZSA6ICIobnVsbCki KTsKKyAgICAgICAgICBwcmludGYoIiAtLXJvb3Q6JXNcbiIsYW5vbnJvb3QgPyBhbm9ucm9vdCA6 ICIobnVsbCkiKTsKKyAgICAgICAgICBwcmludGYoIiAtLXhmZXJsb2c9JWRcbiIseGZlcmxvZyk7 CisgICAgICAgICAgcHJpbnRmKCIgLS14ZmVyZmlsZT0lc1xuIix4ZmVyZmlsZSA/IHhmZXJmaWxl IDogIihudWxsKSIpOworICAgICAgICAgIHByaW50ZigiIC0tdGltZW91dD0lZFxuIixsb2dpbnRp bW8pOworI2VuZGlmIC8qIENLX0xPR0lOICovCisjaWZkZWYgSUtTREIKKyAgICAgICAgICBwcmlu dGYoIiAtLWRhdGFiYXNlPSVkXG4iLGRiZW5hYmxlZCk7CisgICAgICAgICAgcHJpbnRmKCIgLS1k YmZpbGU9JXNcbiIsZGJmaWxlID8gZGJmaWxlIDogIihudWxsKSIpOworICAgICAgICAgIGlmIChk YmRpcikKKyAgICAgICAgICAgIHByaW50ZigiICAgKGRiIGRpcmVjdG9yeT1bJXNdKVxuIixkYmRp cik7CisjZW5kaWYgLyogSUtTREIgKi8KKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAgIHByaW50 ZigiIElLU0QgY29uZj0lc1xuIixpa3NkY29uZik7CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyNl bmRpZiAvKiBJS1NEICovCisgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgIGJyZWFr OworICAgICAgfQorI2VuZGlmIC8qIE5PQ01ETCAqLworCisgICAgICBjYXNlIFNIQ0Q6IHsKKwkg IGV4dGVybiBjaGFyICogbXlob21lOworCSAgcyA9IGdldGVudigiQ0RQQVRIIik7CisJICBpZiAo IXMpIHMgPSAiKG5vbmUpIjsKKwkgIHByaW50ZigiXG4gY3VycmVudCBkaXJlY3Rvcnk6ICAlc1xu Iiwgemd0ZGlyKCkpOworCSAgcHJpbnRmKCIgcHJldmlvdXMgZGlyZWN0b3J5OiAlc1xuIiwgcHJl dmRpciA/IHByZXZkaXIgOiAiKG5vbmUpIik7CisJICBwcmludGYoIiBjZCBob21lOiAgICAgICAg ICAgICVzXG4iLCBob21lcGF0aCgpKTsKKwkgIHByaW50ZigiIGNkIHBhdGg6ICAgICAgICAgICAg JXNcbiIsIGNrY2RwYXRoID8gY2tjZHBhdGggOiBzKTsKKwkgIHByaW50ZigiIGNkIG1lc3NhZ2U6 ICAgICAgICAgJXNcbiIsIHNob3dvZmYoc3J2Y2Rtc2cgJiAyKSk7CisJICBwcmludGYoIiBzZXJ2 ZXIgY2QtbWVzc2FnZTogICVzXG4iLCBzaG93b2ZmKHNydmNkbXNnICYgMSkpOworCSAgcHJpbnRm KCIgY2QgbWVzc2FnZSBmaWxlOiAgICAlc1xuXG4iLGNkbXNnc3RyID8gY2Rtc2dzdHIgOiAiKG5v bmUpIik7CisJICBicmVhazsKKyAgICAgIH0KKyNpZm5kZWYgTk9DU0VUUworICAgICAgY2FzZSBT SEFTU09DOgorICAgICAgICAoVk9JRCkgc2hvd2Fzc29jKCk7CisgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIENLTE9HRElBTAorICAgICAgY2FzZSBTSENPTk5Y OgorI2lmZGVmIE5FV0ZUUAorICAgICAgICBpZiAoZnRwaXNjb25uZWN0ZWQoKSkgeworICAgICAg ICAgICAgZXh0ZXJuIGNoYXIgY3hsb2didWZbXTsKKyAgICAgICAgICAgIGRvbG9nc2hvdyhXX0ZU UCB8IDEpOworICAgICAgICAgICAgaWYgKGN4bG9nYnVmWzBdKQorICAgICAgICAgICAgICBkb2xv Z3Nob3coMSk7CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAg ICAgICBkb2xvZ3Nob3coMSk7CisjaWZkZWYgTkVXRlRQCisgICAgICAgIH0KKyNlbmRpZiAvKiBO RVdGVFAgKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyAgICAg IGNhc2UgU0hPUFRTOgorICAgICAgICBvcHRsaW5lcyA9IDA7CisjaWZuZGVmIE5PRlJJTExTCisg ICAgICAgIChWT0lEKSBzaG93ZGVsb3B0cygpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisjaWZk ZWYgRE9NWURJUgorICAgICAgICAoVk9JRCkgc2hvd2Rpcm9wdHMoKTsKKyNlbmRpZiAvKiBET01Z RElSICovCisjaWZkZWYgQ0tQVVJHRQorICAgICAgICAoVk9JRCkgc2hvd3B1cmdvcHRzKCk7Cisj ZW5kaWYgLyogQ0tQVVJHRSAqLworICAgICAgICAoVk9JRCkgc2hvd3R5cG9wdHMoKTsKKyAgICAg ICAgYnJlYWs7CisKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgY2FzZSBTSE9GTE86CisgICAgICAg IChWT0lEKSBzaG9mbG93KCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PTE9DQUwgKi8K KworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgU0hPWEZFUjoKKyAgICAgICAgKFZPSUQpIHNo b3hmZXIoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZmRlZiBD S19SRUNBTEwKKyAgICAgIGNhc2UgU0hISVNUT1JZOgorICAgICAgICAoVk9JRCkgY21oaXN0b3J5 KCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCisjaWZuZGVmIE5P U0VYUAorI2lmbmRlZiBOT1NQTAorICAgICAgY2FzZSBTSFNFWFA6CisgICAgICAgIChWT0lEKSBz aG9zZXhwKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyog Tk9TRVhQICovCisKKyNpZmRlZiBBTllTU0gKKyAgICAgIGNhc2UgU0hPU1NIOgorICAgICAgICAo Vk9JRCkgc2hvc3NoKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEFOWVNTSCAqLworCisj aWZkZWYgS1VJCisgICAgICBjYXNlIFNIT0dVSToKKyAgICAgICAgKFZPSUQpIHNob2d1aSgpOwor ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBLVUkgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworI2lm bmRlZiBOT1JFTkFNRQorICAgICAgY2FzZSBTSE9SRU46CisgICAgICAgIChWT0lEKSBzaG9yZW5h bWUoKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYJLyogTk9SRU5BTUUgKi8KKyNlbmRpZgkvKiBO T0ZSSUxMUyAqLworCisgICAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIlxuTm90aGluZyB0 byBzaG93Li4uXG4iKTsKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9CisgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKK30KKworI2lmbmRlZiBOT1hGRVIKK2ludAorc2hvYXR0KCkgeworICAgIHBy aW50ZigiQXR0cmlidXRlczogJXNcbiIsIHNob3dvZmYoYXRjYXByKSk7CisgICAgaWYgKCFhdGNh cHIpIHJldHVybigwKTsKKyAgICBwcmludGYoIiBCbG9ja3NpemU6ICVzXG4iLCBzaG93b2ZmKGF0 YmxraSkpOworICAgIHByaW50ZigiIERhdGU6ICVzXG4iLCBzaG93b2ZmKGF0ZGF0aSkpOworICAg IHByaW50ZigiIERpc3Bvc2l0aW9uOiAlc1xuIiwgc2hvd29mZihhdGRpc2kpKTsKKyAgICBwcmlu dGYoIiBFbmNvZGluZyAoQ2hhcmFjdGVyIFNldCk6ICVzXG4iLCBzaG93b2ZmKGF0ZW5jaSkpOwor ICAgIHByaW50ZigiIExlbmd0aDogJXNcbiIsIHNob3dvZmYoYXRsZW5pKSk7CisgICAgcHJpbnRm KCIgVHlwZSAodGV4dC9iaW5hcnkpOiAlc1xuIiwgc2hvd29mZihhdHR5cGkpKTsKKyAgICBwcmlu dGYoIiBTeXN0ZW0gSUQ6ICVzXG4iLCBzaG93b2ZmKGF0c2lkaSkpOworICAgIHByaW50ZigiIFN5 c3RlbSBJbmZvOiAlc1xuIiwgc2hvd29mZihhdHN5c2kpKTsKKyNpZmRlZiBDS19QRVJNUworICAg IHByaW50ZigiIFBlcm1pc3Npb25zIEluOiAgJXNcbiIsIHNob3dvZmYoYXRscHJpKSk7CisgICAg cHJpbnRmKCIgUGVybWlzc2lvbnMgT3V0OiAlc1xuIiwgc2hvd29mZihhdGxwcm8pKTsKKyNlbmRp ZiAvKiBDS19QRVJNUyAqLworI2lmZGVmIFNUUkFUVVMKKyAgICBwcmludGYoIiBGb3JtYXQ6ICVz XG4iLCBzaG93b2ZmKGF0ZnJtaSkpOworICAgIHByaW50ZigiIENyZWF0b3I6ICVzXG4iLCBzaG93 b2ZmKGF0Y3JlaSkpOworICAgIHByaW50ZigiIEFjY291bnQ6ICVzXG4iLCBzaG93b2ZmKGF0YWN0 aSkpOworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyog Tk9YRkVSICovCisKKyNpZm5kZWYgTk9TUEwKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTSE9XIE1BQ1JPUyAqLworc2hvbWFjKHMxLCBzMikgY2hhciAqczEsICpz MjsgeworICAgIGludCB4LCBuLCBwcDsKKyAgICBwcCA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBQYXJlbnRoZXNpcyBjb3VudGVyICovCisKKyAgICBkZWJ1ZyhGMTEwLCJzaG9t YWMgczEiLHMxLDApOworICAgIGRlYnVnKEYxMTAsInNob21hYyBzMiIsczIsMCk7CisKKyNpZmRl ZiBJS1NECisgICAgaWYgKCBpbnNlcnZlciAmJgorI2lmZGVmIElLU0RDT05GCisgICAgICAgIGlr c2RjZgorI2Vsc2UgLyogSUtTRENPTkYgKi8KKyAgICAgICAgMQorI2VuZGlmIC8qIElLU0RDT05G ICovCisgICAgICAgICkgeworICAgICAgICBpZiAoIWNrc3RyY21wKCJvbl9leGl0IixzMSwtMSww KSB8fAorICAgICAgICAgICAgIWNrc3RyY21wKCJvbl9sb2dvdXQiLHMxLC0xLDApKQorICAgICAg ICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgaWYgKCFzMSkK KyAgICAgIHJldHVybigwKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIiVzID0gIixzMSk7ICAg ICAgICAgICAgICAgLyogUHJpbnQgYmxhbmsgbGluZSBhbmQgbWFjcm8gbmFtZSAqLworICAgIG4g PSAoaW50KXN0cmxlbihzMSkgKyA0OyAgICAgICAgICAgIC8qIFdpZHRoIG9mIGN1cnJlbnQgbGlu ZSAqLworICAgIGlmICghczIpIHMyID0gIihub3QgZGVmaW5lZCkiOworCisgICAgd2hpbGUgKCh4 ID0gKnMyKyspKSB7ICAgICAgICAgICAgICAgLyogTG9vcCB0aHJ1IGRlZmluaXRpb24gKi8KKyAg ICAgICAgaWYgKHggPT0gJygnKSBwcCsrOyAgICAgICAgICAgICAvKiBUcmVhdCBjb21tYXMgd2l0 aGluIHBhcmVucyAqLworICAgICAgICBpZiAoeCA9PSAnKScpIHBwLS07ICAgICAgICAgICAgIC8q IGFzIG9yZGluYXJ5IHRleHQgKi8KKyAgICAgICAgaWYgKHBwIDwgMCkgcHAgPSAwOyAgICAgICAg ICAgICAvKiBPdXRzaWRlIHBhcmVucywgKi8KKyAgICAgICAgaWYgKHggPT0gJywnICYmIHBwID09 IDApIHsgICAgICAvKiBjb21tYSBiZWNvbWVzIGNvbW1hLWRhc2gtTkwuICovCisgICAgICAgICAg ICBwdXRjaGFyKCcsJyk7CisgICAgICAgICAgICBwdXRjaGFyKCctJyk7CisgICAgICAgICAgICB4 ID0gJ1xuJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgKHggPT0gJ1xuJykp ICAgIC8qIFNlbmQgQ1IgYmVmb3JlIExGICovCisgICAgICAgICAgcHV0Y2hhcihDUik7CisgICAg ICAgIHB1dGNoYXIoKENIQVIpeCk7ICAgICAgICAgICAgICAgLyogT3V0cHV0IHRoZSBjaGFyYWN0 ZXIgKi8KKyAgICAgICAgaWYgKHggPT0gJ1xuJykgeyAgICAgICAgICAgICAgICAvKiBJZiBpdCB3 YXMgYSBuZXdsaW5lICovCisjaWZkZWYgVU5JWAorI2lmZGVmIE5PU0VUQlVGCisgICAgICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworI2VuZGlmIC8qIFVOSVgg Ki8KKyAgICAgICAgICAgIHB1dGNoYXIoJyAnKTsgICAgICAgICAgICAgICAvKiBJbmRlbnQgdGhl IG5leHQgbGluZSAxIHNwYWNlICovCisgICAgICAgICAgICB3aGlsZSgqczIgPT0gJyAnKSBzMisr OyAgICAgLyogc2tpcCBwYXN0IGxlYWRpbmcgYmxhbmtzICovCisgICAgICAgICAgICBuID0gMjsg ICAgICAgICAgICAgICAgICAgICAgLyogcmVzdGFydCB0aGUgY2hhcmFjdGVyIGNvdW50ZXIgKi8K KyAgICAgICAgICAgIHNsYysrOyAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgaW5jcmVtZW50 IHRoZSBsaW5lIGNvdW50ZXIuICovCisgICAgICAgIH0gZWxzZSBpZiAoKytuID4gKGNtZF9jb2xz IC0gMSkpIHsgLyogSWYgbGluZSBpcyB0b28gd2lkZSAqLworICAgICAgICAgICAgcHV0Y2hhcign LScpOyAgICAgICAgICAgICAgIC8qIG91dHB1dCBhIGRhc2ggKi8KKyAgICAgICAgICAgIGlmIChp bnNlcnZlcikKKyAgICAgICAgICAgICAgcHV0Y2hhcihDUik7ICAgICAgICAgICAgICAvKiBhbmQg YSBjYXJyaWFnZSByZXR1cm4gKi8KKyAgICAgICAgICAgIHB1dGNoYXIoTkwpOyAgICAgICAgICAg ICAgICAvKiBhbmQgYSBuZXdsaW5lICovCisjaWZkZWYgVU5JWAorI2lmZGVmIE5PU0VUQlVGCisg ICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworI2VuZGlm IC8qIFVOSVggKi8KKyAgICAgICAgICAgIG4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBh bmQgcmVzdGFydCB0aGUgY2hhciBjb3VudGVyICovCisgICAgICAgICAgICBzbGMrKzsgICAgICAg ICAgICAgICAgICAgICAgLyogYW5kIGluY3JlbWVudCB0aGUgbGluZSBjb3VudGVyICovCisgICAg ICAgIH0KKyAgICAgICAgaWYgKG4gPCAzICYmIHNsYyA+IChjbWRfcm93cyAtIDMpKSB7IC8qIElm IG5ldyBsaW5lIGFuZCBzY3JlZW4gZnVsbCAqLworICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkp IHJldHVybigtMSk7IC8qIGFzayBpZiB0aGV5IHdhbnQgbW9yZS4gKi8KKyAgICAgICAgICAgIG4g PSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBUaGV5IGRvLCBzdGFydCBhIG5ldyBsaW5lICov CisgICAgICAgICAgICBzbGMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJlc3RhcnQg bGluZSBjb3VudGVyICovCisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGluc2VydmVyKQorICAg ICAgcHV0Y2hhcihDUik7CisgICAgcHV0Y2hhcihOTCk7ICAgICAgICAgICAgICAgICAgICAgICAg LyogRW5kIG9mIGRlZmluaXRpb24gKi8KKyAgICBpZiAoKytzbGMgPiAoY21kX3Jvd3MgLSAzKSkg eworICAgICAgICBpZiAoIWFza21vcmUoKSkgcmV0dXJuKC0xKTsKKyAgICAgICAgc2xjID0gMDsK KyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyog Tk9TSE9XICovCisKK2ludCB4X2lmbnVtID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBJRiBOVU1FUklDIGFjdGl2ZSAqLworCisjaWZuZGVmIE5PU1BMCisvKiBFdmFsdWF0 ZSBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24uICovCisvKiBDb2RlIGFkYXB0ZWQgZnJvbSBldiwg YnkgSG93aWUgS2F5ZSBvZiBDb2x1bWJpYSBVICYgb3RoZXJzLiAqLworCitzdGF0aWMgaW50IHhl cnJvciA9IDA7CitpbnQgZGl2Ynl6ZXJvID0gMDsKK3N0YXRpYyBjaGFyICpjcDsKK3N0YXRpYyBD S19PRkZfVCB0b2t2YWw7CitzdGF0aWMgY2hhciBjdXJ0b2s7CitzdGF0aWMgQ0tfT0ZGX1QgZXhw dmFsOworCisjZGVmaW5lIExPTkdCSVRTICg4KnNpemVvZiAoQ0tfT0ZGX1QpKQorI2RlZmluZSBO VU1CRVIgJ04nCisjZGVmaW5lIE5fRU9UICdFJworCisvKgorIFJlcGxhY2VtZW50IGZvciBzdHJj aHIoKSBhbmQgaW5kZXgoKSwgbmVpdGhlciBvZiB3aGljaCBzZWVtIHRvIGJlIHVuaXZlcnNhbC4K KyovCisKK3N0YXRpYyBjaGFyICoKKyNpZmRlZiBDS19BTlNJQword2luZGV4KGNoYXIgKiBzLCBj aGFyIGMpCisjZWxzZQord2luZGV4KHMsYykgY2hhciAqcywgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogd2luZGV4ICovIHsKKyAgICB3aGlsZSAoKnMgIT0gTlVMICYmICpzICE9IGMpIHMr KzsKKyAgICBpZiAoKnMgPT0gYykgcmV0dXJuKHMpOyBlbHNlIHJldHVybihOVUxMKTsKK30KKwor CisvKgorIGcgZSB0IHQgbyBrCisKKyBSZXR1cm5zIHRoZSBuZXh0IHRva2VuLiAgSWYgdG9rZW4g aXMgYSBOVU1CRVIsIHNldHMgdG9rdmFsIGFwcHJvcHJpYXRlbHkuCisqLworc3RhdGljIGNoYXIK K2dldHRvaygpIHsKKyAgICBjaGFyIHRidWZbODBdIC8qICwqdHAgKi8gOyAgICAgICAgICAvKiBC dWZmZXIgdG8gYWNjdW11bGF0ZSBudW1iZXIgKi8KKworICAgIHdoaWxlIChpc3NwYWNlKCpjcCkp ICAgICAgICAgICAgICAgIC8qIFNraXAgcGFzdCBsZWFkaW5nIHNwYWNlcyAqLworICAgICAgY3Ar KzsKKworICAgIGRlYnVnKEYxMTAsIkdFVFRPSyIsY3AsMCk7CisKKyAgICBzd2l0Y2ggKCpjcCkg eworICAgICAgY2FzZSAnJCc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qID8/PyAqLworICAg ICAgY2FzZSAnKyc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkZCAqLworICAgICAgY2Fz ZSAnLSc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1YnRyYWN0IG9yIE5lZ2F0ZSAqLwor ICAgICAgY2FzZSAnQCc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyZWF0ZXN0IENvbW1v biBEaXZpc29yICovCisgICAgICBjYXNlICcqJzogICAgICAgICAgICAgICAgICAgICAgICAgLyog TXVsdGlwbHkgKi8KKyAgICAgIGNhc2UgJy8nOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBE aXZpZGUgKi8KKyAgICAgIGNhc2UgJyUnOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2R1 bHVzICovCisgICAgICBjYXNlICc8JzogICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVmdCBz aGlmdCAqLworICAgICAgY2FzZSAnPic6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJpZ2h0 IHNoaWZ0ICovCisgICAgICBjYXNlICcmJzogICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5k ICovCisgICAgICBjYXNlICd8JzogICAgICAgICAgICAgICAgICAgICAgICAgLyogT3IgKi8KKyAg ICAgIGNhc2UgJyMnOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGNsdXNpdmUgT3IgKi8K KyAgICAgIGNhc2UgJ34nOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgKi8KKyAgICAg IGNhc2UgJ14nOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeHBvbmVudCAqLworICAgICAg Y2FzZSAnISc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhY3RvcmlhbCAqLworICAgICAg Y2FzZSAnKCc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcmVucyBmb3IgZ3JvdXBpbmcg Ki8KKyAgICAgIGNhc2UgJyknOiByZXR1cm4oKmNwKyspOyAgICAgICAgICAvKiBvcGVyYXRvciwg anVzdCByZXR1cm4gaXQgKi8KKyAgICAgIGNhc2UgJ1xuJzoKKyAgICAgIGNhc2UgJ1wwJzogcmV0 dXJuKE5fRU9UKTsgICAgICAgICAvKiBFbmQgb2YgbGluZSwgcmV0dXJuIHRoYXQgKi8KKyAgICB9 CisjaWZkZWYgQ09NTUVOVAorLyogVGhpcyBpcyB0aGUgb3JpZ2luYWwgY29kZSwgd2hpY2ggYWxs b3dzIG9ubHkgaW50ZWdlciBudW1iZXJzLiAqLworCisgICAgaWYgKGlzeGRpZ2l0KCpjcCkpIHsg ICAgICAgICAgICAgICAgLyogRGlnaXQsIG11c3QgYmUgYSBudW1iZXIgKi8KKyAgICAgICAgaW50 IHJhZGl4ID0gMTA7ICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHJhZGl4ICovCisgICAgICAg IGZvciAodHAgPSB0YnVmOyBpc3hkaWdpdCgqY3ApOyBjcCsrKQorICAgICAgICAgICp0cCsrID0g KGNoYXIpIChpc3VwcGVyKCpjcCkgPyB0b2xvd2VyKCpjcCkgOiAqY3ApOworICAgICAgICAqdHAg PSAnXDAnOyAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBudW1iZXIgKi8KKyAgICAgICAgc3dp dGNoKGlzdXBwZXIoKmNwKSA/IHRvbG93ZXIoKmNwKSA6ICpjcCkgeyAvKiBFeGFtaW5lIGJyZWFr IGNoYXIgKi8KKyAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICBjYXNlICd4JzogcmFkaXgg PSAxNjsgY3ArKzsgYnJlYWs7IC8qIGlmIHJhZGl4IHNpZ25pZmllci4uLiAqLworICAgICAgICAg IGNhc2UgJ28nOgorICAgICAgICAgIGNhc2UgJ3EnOiByYWRpeCA9IDg7IGNwKys7IGJyZWFrOwor ICAgICAgICAgIGNhc2UgJ3QnOiByYWRpeCA9IDI7IGNwKys7IGJyZWFrOworICAgICAgICB9Cisg ICAgICAgIGZvciAodHAgPSB0YnVmLCB0b2t2YWwgPSAwOyAqdHAgIT0gJ1wwJzsgdHArKykgIHsK KyAgICAgICAgICAgIGludCBkaWc7CisgICAgICAgICAgICBkaWcgPSAqdHAgLSAnMCc7ICAgICAg ICAgICAgLyogQ29udmVydCBudW1iZXIgKi8KKyAgICAgICAgICAgIGlmIChkaWcgPiAxMCkgZGln IC09ICdhJy0nMCctMTA7CisgICAgICAgICAgICBpZiAoZGlnID49IHJhZGl4KSB7CisgICAgICAg ICAgICAgICAgaWYgKGNtZGx2bCA9PSAwICYmICF4X2lmbnVtICYmICF4ZXJyb3IpCisgICAgICAg ICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIGRpZ2l0ICclYycgaW4gbnVtYmVyXG4iLCp0cCk7 CisgICAgICAgICAgICAgICAgeGVycm9yID0gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4oTlVN QkVSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRva3ZhbCA9IHJhZGl4KnRva3ZhbCAr IGRpZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oTlVNQkVSKTsKKyAgICB9CisgICAgaWYg KGNtZGx2bCA9PSAwICYmICF4X2lmbnVtICYmICF4ZXJyb3IpCisgICAgICBwcmludGYoIkludmFs aWQgY2hhcmFjdGVyICclYycgaW4gaW5wdXRcbiIsKmNwKTsKKyAgICB4ZXJyb3IgPSAxOworICAg IGNwKys7CisgICAgcmV0dXJuKGdldHRvaygpKTsKKyNlbHNlCisvKiBUaGlzIGNvZGUgYWxsb3dz IG5vbi1udW1iZXJzIHRvIGJlIHRyZWF0ZWQgYXMgbWFjcm8gbmFtZXMgKi8KKyAgICB7CisgICAg ICAgIGludCBpLCB4OworICAgICAgICBjaGFyICogcywgKiBjcDE7CisgICAgICAgIGNwMSA9IGNw OworICAgICAgICB0cCA9IHRidWY7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4MDsgaSsrKSB7 CisgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIG5leHQgYnJlYWsgY2hhcmFjdGVyICovCisg ICAgICAgICAgICAvKiBwcmV0dHkgbXVjaCBhbnl0aGluZyB0aGF0IGlzIG5vdCBpbiB0aGUgc3dp dGNoKCkgYWJvdmUuICovCisgICAgICAgICAgICBpZiAoaXNhbHBoYSgqY3ApIHx8IGlzZGlnaXQo KmNwKSB8fAorICAgICAgICAgICAgICAgICpjcCA9PSAnXycgfHwgKmNwID09ICc6JyB8fCAqY3Ag PT0gJy4nIHx8CisgICAgICAgICAgICAgICAgKmNwID09ICdbJyB8fCAqY3AgPT0gJ10nIHx8Cisg ICAgICAgICAgICAgICAgKmNwID09ICd7JyB8fCAqY3AgPT0gJ30nCisgICAgICAgICAgICAgICAg KQorICAgICAgICAgICAgICB0YnVmW2ldID0gKmNwKys7CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChpID49IDgwKSB7CisgICAg ICAgICAgICBwcmludGYoIlRvbyBsb25nIC0gXCIlc1wiXG4iLCBjcDEpOworICAgICAgICAgICAg eGVycm9yID0gMTsKKyAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICByZXR1cm4oZ2V0dG9r KCkpOworICAgICAgICB9CisgICAgICAgIGlmICh4ZXJyb3IpIHJldHVybihOVU1CRVIpOworCisg ICAgICAgIHRidWZbaV0gPSBOVUw7CisgICAgICAgIHMgPSB0YnVmOworICAgICAgICBpZiAoIWlz ZGlnaXQodGJ1ZlswXSkpIHsKKyAgICAgICAgICAgIGNoYXIgKiBzMiA9IE5VTEw7CisgICAgICAg ICAgICB4ID0gbXhsb29rKG1hY3RhYix0YnVmLG5tYWMpOworICAgICAgICAgICAgZGVidWcoRjEx MSwiZ2V0dG9rIG14bG9vayIsdGJ1Zix4KTsKKyAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAg ICAgICAgICAgICAgIGlmIChjbWRsdmwgPT0gMCAmJiAheF9pZm51bSAmJiAheGVycm9yKQorICAg ICAgICAgICAgICAgICAgcHJpbnRmKCJCYWQgbnVtYmVyIC0gXCIlc1wiXG4iLHRidWYpOworICAg ICAgICAgICAgICAgIHhlcnJvciA9IDE7CisgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAg ICAgICAgICByZXR1cm4oZ2V0dG9rKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgczIg PSBtYWN0YWJbeF0ubXZhbDsKKyAgICAgICAgICAgIGlmICghczIpIHMyID0gIiI7CisgICAgICAg ICAgICBpZiAoKnMyKSBzID0gczI7CisgICAgICAgIH0KKyNpZmRlZiBDS0ZMT0FUCisgICAgICAg IHggPSBpc2Zsb2F0KHMsMCk7CisjZWxzZQorICAgICAgICB4ID0gY2hrbnVtKHMpOworI2VuZGlm IC8qIENLRkxPQVQgKi8KKyAgICAgICAgaWYgKHggPiAwKSB7CisgICAgICAgICAgICB0b2t2YWwg PSBja2F0b2ZzKHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGNtZGx2bCA9 PSAwICYmICF4X2lmbnVtICYmICF4ZXJyb3IpCisgICAgICAgICAgICAgIHByaW50ZigiQmFkIG51 bWJlciAtIFwiJXNcIlxuIix0YnVmKTsKKyAgICAgICAgICAgIHhlcnJvciA9IDE7CisgICAgICAg ICAgICBjcCsrOworICAgICAgICAgICAgcmV0dXJuKGdldHRvaygpKTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4oTlVNQkVSKTsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorCitz dGF0aWMgQ0tfT0ZGX1QKKyNpZmRlZiBDS19BTlNJQworZXhwb24oQ0tfT0ZGX1QgeCwgQ0tfT0ZG X1QgeSkKKyNlbHNlCitleHBvbih4LHkpIENLX09GRl9UIHgseTsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworLyogZXhwb24gKi8geworICAgIENLX09GRl9UIHJlc3VsdCA9IDE7CisgICAgaW50IHNp Z24gPSAxOworICAgIGlmICh5IDwgMCkgcmV0dXJuKDApOworICAgIGlmICh4IDwgMCkgeworICAg ICAgICB4ID0gLXg7CisgICAgICAgIGlmICh5ICYgMSkgc2lnbiA9IC0xOworICAgIH0KKyAgICB3 aGlsZSAoeSAhPSAwKSB7CisgICAgICAgIGlmICh5ICYgMSkgcmVzdWx0ICo9IHg7CisgICAgICAg IHkgPj49IDE7CisgICAgICAgIGlmICh5ICE9IDApIHggKj0geDsKKyAgfQorICByZXR1cm4ocmVz dWx0ICogc2lnbik7Cit9CisKKy8qCisgKiBmYWN0b3IgOjo9IHNpbXBsZSB8IHNpbXBsZSBeIGZh Y3RvcgorICoKKyAqLworc3RhdGljIFZPSUQKK2ZhY3RvcigpIHsKKyAgICBDS19PRkZfVCBvbGR2 YWw7CisgICAgc2ltcGxlKCk7CisgICAgaWYgKGN1cnRvayA9PSAnXicpIHsKKyAgICAgICAgb2xk dmFsID0gZXhwdmFsOworICAgICAgICBjdXJ0b2sgPSBnZXR0b2soKTsKKyAgICAgICAgZmFjdG9y KCk7CisgICAgICAgIGV4cHZhbCA9IGV4cG9uKG9sZHZhbCxleHB2YWwpOworICAgIH0KK30KKwor LyoKKyAqIHRlcm1wIDo6PSBOVUxMIHwgeyosLywlLCZ9IGZhY3RvciB0ZXJtcAorICoKKyAqLwor c3RhdGljIFZPSUQKK3Rlcm1wKCkgeworICAgIHdoaWxlIChjdXJ0b2sgPT0gJyonIHx8IGN1cnRv ayA9PSAnLycgfHwgY3VydG9rID09ICclJyB8fCBjdXJ0b2sgPT0gJyYnKSB7CisgICAgICAgIENL X09GRl9UIG9sZHZhbDsKKyAgICAgICAgY2hhciBvcDsKKyAgICAgICAgb3AgPSBjdXJ0b2s7Cisg ICAgICAgIGN1cnRvayA9IGdldHRvaygpOyAgICAgICAgICAgICAgLyogc2tpcCBwYXN0IG9wZXJh dG9yICovCisgICAgICAgIG9sZHZhbCA9IGV4cHZhbDsKKyAgICAgICAgZmFjdG9yKCk7CisgICAg ICAgIHN3aXRjaChvcCkgeworICAgICAgICAgIGNhc2UgJyonOiBleHB2YWwgPSBvbGR2YWwgKiBl eHB2YWw7IGJyZWFrOworICAgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAgIGNhc2UgJyUnOgor ICAgICAgICAgICAgaWYgKGV4cHZhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCF4X2lm bnVtKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RGl2aWRlIGJ5IHplcm9cbiIpOworICAg ICAgICAgICAgICAgIHhlcnJvciA9IDE7CisgICAgICAgICAgICAgICAgZGl2Ynl6ZXJvID0gMTsK KyAgICAgICAgICAgICAgICBleHB2YWwgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg ICAgICAgICBleHB2YWwgPSAob3AgPT0gJy8nKSA/IChvbGR2YWwgLyBleHB2YWwpIDogKG9sZHZh bCAlIGV4cHZhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICcmJzoKKyAg ICAgICAgICAgIGV4cHZhbCA9IG9sZHZhbCAmIGV4cHZhbDsgYnJlYWs7CisgICAgICAgIH0KKyAg ICB9Cit9CisKK3N0YXRpYyBDS19PRkZfVAorI2lmZGVmIENLX0FOU0lDCitmYWN0KENLX09GRl9U IHgpCisjZWxzZQorZmFjdCh4KSBDS19PRkZfVCB4OworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiBmYWN0ICovIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmFjdG9yaWFsICovCisg ICAgQ0tfT0ZGX1QgcmVzdWx0ID0gMTsKKyAgICB3aGlsZSAoeCA+IDEpCisgICAgICByZXN1bHQg Kj0geC0tOworICAgIHJldHVybihyZXN1bHQpOworfQorCisvKgorICogdGVybSA6Oj0gZmFjdG9y IHRlcm1wCisgKgorICovCitzdGF0aWMgVk9JRAordGVybSgpIHsKKyAgICBmYWN0b3IoKTsKKyAg ICB0ZXJtcCgpOworfQorCitzdGF0aWMgQ0tfT0ZGX1QKKyNpZmRlZiBDS19BTlNJQworZ2NkKENL X09GRl9UIHgsIENLX09GRl9UIHkpCisjZWxzZQorZ2NkKHgseSkgQ0tfT0ZGX1QgeCx5OworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisvKiBnY2QgKi8geyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogR3JlYXRlc3QgQ29tbW9uIERpdmlzb3IgKi8KKyAgICBpbnQgbnNoaWZ0ID0gMDsKKyAg ICBpZiAoeCA8IDApIHggPSAteDsKKyAgICBpZiAoeSA8IDApIHkgPSAteTsgICAgICAgICAgICAg ICAgICAvKiB2YWxpZGF0ZSBhcmd1bWVudHMgKi8KKyAgICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkg cmV0dXJuKHggKyB5KTsgICAgLyogdGhpcyBpcyBib2d1cyAqLworCisgICAgd2hpbGUgKCEoKHgg JiAxKSB8ICh5ICYgMSkpKSB7ICAgICAgLyogZ2V0IHJpZCBvZiBwb3dlcnMgb2YgMiAqLworICAg ICAgICBuc2hpZnQrKzsKKyAgICAgICAgeCA+Pj0gMTsKKyAgICAgICAgeSA+Pj0gMTsKKyAgICB9 CisgICAgd2hpbGUgKHggIT0gMSAmJiB5ICE9IDEgJiYgeCAhPSAwICYmIHkgIT0gMCkgeworICAg ICAgICB3aGlsZSAoISh4ICYgMSkpIHggPj49IDE7ICAgICAgIC8qIGVsaW1pbmF0ZSB1bm5lY2Vz c2FyeSAqLworICAgICAgICB3aGlsZSAoISh5ICYgMSkpIHkgPj49IDE7ICAgICAgIC8qIHBvd2Vy cyBvZiAyICovCisgICAgICAgIGlmICh4IDwgeSkgeyAgICAgICAgICAgICAgICAgICAgLyogZm9y Y2UgeCB0byBiZSBsYXJnZXIgKi8KKyAgICAgICAgICAgIENLX09GRl9UIHQ7CisgICAgICAgICAg ICB0ID0geDsKKyAgICAgICAgICAgIHggPSB5OworICAgICAgICAgICAgeSA9IHQ7CisgICAgICAg IH0KKyAgICAgICAgeCAtPSB5OworICAgIH0KKyAgICBpZiAoeCA9PSAwIHx8IHkgPT0gMCkgcmV0 dXJuKCh4ICsgeSkgPDwgbnNoaWZ0KTsgLyogZ2NkIGlzIG5vbi16ZXJvIG9uZSAqLworICAgIGVs c2UgcmV0dXJuKChDS19PRkZfVCkgMSA8PCBuc2hpZnQpOyAgICAvKiBlbHNlIGdjZCBpcyAxICov Cit9CisKKy8qCisgKiBleHBycCA6Oj0gTlVMTCB8IHsrLC0sfCwuLi59IHRlcm0gZXhwcnAKKyAq CisgKi8KK3N0YXRpYyBWT0lECitleHBycCgpIHsKKyAgICB3aGlsZSAod2luZGV4KCIrLXw8PiNA IixjdXJ0b2spICE9IE5VTEwpIHsKKyAgICAgICAgQ0tfT0ZGX1Qgb2xkdmFsOworICAgICAgICBj aGFyIG9wOworICAgICAgICBvcCA9IGN1cnRvazsKKyAgICAgICAgY3VydG9rID0gZ2V0dG9rKCk7 ICAgICAgICAgICAgICAvKiBza2lwIHBhc3Qgb3BlcmF0b3IgKi8KKyAgICAgICAgb2xkdmFsID0g ZXhwdmFsOworICAgICAgICB0ZXJtKCk7CisgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAg IGNhc2UgJysnIDogZXhwdmFsID0gb2xkdmFsICsgZXhwdmFsOyBicmVhazsKKyAgICAgICAgICBj YXNlICctJyA6IGV4cHZhbCA9IG9sZHZhbCAtIGV4cHZhbDsgYnJlYWs7CisgICAgICAgICAgY2Fz ZSAnfCcgOiBleHB2YWwgPSBvbGR2YWwgfCBleHB2YWw7IGJyZWFrOworICAgICAgICAgIGNhc2Ug JyMnIDogZXhwdmFsID0gb2xkdmFsIF4gZXhwdmFsOyBicmVhazsKKyAgICAgICAgICBjYXNlICdA JyA6IGV4cHZhbCA9IGdjZChvbGR2YWwsZXhwdmFsKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAn PCcgOiBleHB2YWwgPSBvbGR2YWwgPDwgZXhwdmFsOyBicmVhazsKKyAgICAgICAgICBjYXNlICc+ JyA6IGV4cHZhbCA9IG9sZHZhbCA+PiBleHB2YWw7IGJyZWFrOworICAgICAgICB9CisgICAgfQor fQorCisvKgorICogZXhwciA6Oj0gdGVybSBleHBycAorICoKKyAqLworc3RhdGljIFZPSUQKK2V4 cHIoKSB7CisgICAgdGVybSgpOworICAgIGV4cHJwKCk7Cit9CisKK3N0YXRpYyBDS19PRkZfVAor eHBhcnNlKCkgeworICAgIGN1cnRvayA9IGdldHRvaygpOworICAgIGV4cHIoKTsKKyNpZmRlZiBD T01NRU5UCisgICAgaWYgKGN1cnRvayA9PSAnJCcpIHsKKyAgICAgICAgY3VydG9rID0gZ2V0dG9r KCk7CisgICAgICAgIGlmIChjdXJ0b2sgIT0gTlVNQkVSKSB7CisgICAgICAgICAgICBpZiAoY21k bHZsID09IDAgJiYgIXhfaWZudW0pCisgICAgICAgICAgICAgIHByaW50ZigiP0lsbGVnYWwgcmFk aXhcbiIpOworICAgICAgICAgICAgeGVycm9yID0gMTsKKyAgICAgICAgICAgIHJldHVybigwKTsK KyAgICAgICAgfQorICAgICAgICBjdXJ0b2sgPSBnZXR0b2soKTsKKyAgICB9CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIGlmIChjdXJ0b2sgIT0gTl9FT1QpIHsKKyAgICAgICAgaWYgKGNtZGx2 bCA9PSAwICYmICF4X2lmbnVtICYmICF4ZXJyb3IpCisgICAgICAgICAgcHJpbnRmKCI/RXh0cmEg Y2hhcmFjdGVycyBhZnRlciBleHByZXNzaW9uXG4iKTsKKyAgICAgICAgeGVycm9yID0gMTsKKyAg ICB9CisgICAgcmV0dXJuKGV4cHZhbCk7Cit9CisKK2NoYXIgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTaWxlbnQgZnJvbnQgZW5kIGZvciBldmFsYSgpICovCitldmFseChz KSBjaGFyICpzOyB7CisgICAgY2hhciAqIHA7CisgICAgaW50IHQ7CisgICAgdCA9IHhfaWZudW07 CisgICAgeF9pZm51bSA9IDE7CisgICAgcCA9IGV2YWxhKHMpOworICAgIHhfaWZudW0gPSB0Owor ICAgIHJldHVybihwKTsKK30KKworY2hhciAqCitldmFsYShzKSBjaGFyICpzOyB7CisgICAgQ0tf T0ZGX1QgdjsJCQkJLyogTnVtZXJpYyB2YWx1ZSAqLworICAgIGlmICghcykgcmV0dXJuKCIiKTsK KyAgICB4ZXJyb3IgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvdXQgd2l0 aCBubyBlcnJvciAqLworICAgIGRpdmJ5emVybyA9IDA7CisgICAgY3AgPSBzOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTWFrZSB0aGUgYXJndW1lbnQgZ2xvYmFsICovCisgICAgdiA9 IHhwYXJzZSgpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgdGhlIHN0cmluZyAqLwor ICAgIHJldHVybih4ZXJyb3IgPyAiIiA6IGNrZnN0b2EodikpOwkvKiBSZXR1cm4gZW1wdHkgc3Ry aW5nIG9uIGVycm9yICovCit9CisKKy8qCisgKiBzaW1wbGVzdCA6Oj0gTlVNQkVSIHwgKCBleHBy ICkKKyAqCisgKi8KK3N0YXRpYyBWT0lECitzaW1wbGVzdCgpIHsKKyAgICBjaGFyICogcDsKKyAg ICBwID0gY3A7CisgICAgaWYgKGN1cnRvayA9PSBOVU1CRVIpCisgICAgICBleHB2YWwgPSB0b2t2 YWw7CisgICAgZWxzZSBpZiAoY3VydG9rID09ICcoJykgeworICAgICAgICBjdXJ0b2sgPSBnZXR0 b2soKTsgICAgICAgICAgICAgIC8qIHNraXAgb3ZlciBwYXJlbiAqLworICAgICAgICBleHByKCk7 CisgICAgICAgIGlmIChjdXJ0b2sgIT0gJyknKSB7CisgICAgICAgICAgICBpZiAoY21kbHZsID09 IDAgJiYgIXhfaWZudW0gJiYgIXhlcnJvcikKKyAgICAgICAgICAgICAgcHJpbnRmKCI/TWlzc2lu ZyByaWdodCBwYXJlbnRoZXNpc1xuIik7CisgICAgICAgICAgICB4ZXJyb3IgPSAxOworICAgICAg ICB9CisgICAgICAgIGRlYnVnKEYxMTAsIkdFVFRPSyBTSU1QTEVTVCAoKSIscCwwKTsKKworICAg IH0gZWxzZSB7CisgICAgICAgIGlmIChjbWRsdmwgPT0gMCAmJiAheF9pZm51bSAmJiAheGVycm9y KQorICAgICAgICAgIHByaW50ZigiP09wZXJhdG9yIHVuZXhwZWN0ZWRcbiIpOworICAgICAgICB4 ZXJyb3IgPSAxOworICAgIH0KKyAgICBjdXJ0b2sgPSBnZXR0b2soKTsKK30KKworLyoKKyAqIHNp bXBsZXIgOjo9IHNpbXBsZXN0IHwgc2ltcGxlc3QgIQorICoKKyAqLworc3RhdGljIFZPSUQKK3Np bXBsZXIoKSB7CisgICAgc2ltcGxlc3QoKTsKKyAgICBpZiAoY3VydG9rID09ICchJykgeworICAg ICAgICBjdXJ0b2sgPSBnZXR0b2soKTsKKyAgICAgICAgZXhwdmFsID0gZmFjdChleHB2YWwpOwor ICAgIH0KK30KKworLyoKKyAqIHNpbXBsZSA6Oj0gey0sfiwhfSBzaW1wbGVyIHwgc2ltcGxlcgor ICoKKyAqLworCitzdGF0aWMgVk9JRAorc2ltcGxlKCkgeworICAgIGlmIChjdXJ0b2sgPT0gJy0n IHx8IGN1cnRvayA9PSAnficgfHwgY3VydG9rID09ICchJyB8fCBjdXJ0b2sgPT0gJysnKSB7Cisg ICAgICAgIGludCBvcCA9IGN1cnRvazsKKyAgICAgICAgY3VydG9rID0gZ2V0dG9rKCk7ICAgICAg ICAgICAgICAvKiBza2lwIG92ZXIgLSBzaWduICovCisgICAgICAgIHNpbXBsZXIoKTsgICAgICAg ICAgICAgICAgICAgICAgLyogcGFyc2UgdGhlIGZhY3RvciBhZ2FpbiAqLworICAgICAgICBpZiAo b3AgIT0gJysnKQorICAgICAgICAgIGV4cHZhbCA9IChvcCA9PSAnLScpID8gLWV4cHZhbCA6ICgo b3AgPT0gJyEnKSA/ICFleHB2YWwgOiB+ZXhwdmFsKTsKKyAgICB9IGVsc2Ugc2ltcGxlcigpOwor fQorCisvKiAgRCBDIEwgQSBSIFIgQSBZICAtLSAgRGVjbGFyZSBhbiBhcnJheSAgKi8KKy8qCisg IENhbGwgd2l0aDoKKyAgIGNoYXIgYSA9IHNpbmdsZSBjaGFyYWN0ZXIgZGVzaWduYXRvciBmb3Ig dGhlIGFycmF5LCBlLmcuICJhIi4KKyAgIGludCAgbiA9IHNpemUgb2YgYXJyYXkuICAtMSBtZWFu cyB0byB1bmRlY2xhcmUgdGhlIGFycmF5LgorICBSZXR1cm5zOgorICAgMCBvciBncmVhdGVyIG9u IHN1Y2Nlc3MsIGhhdmluZyBjcmVhdGVkIHRoZSByZXF1ZXN0ZWQgYXJyYXkgd2l0aAorICAgICB3 aXRoIG4rMSBlbGVtZW50cywgMC4ubi4gIElmIGFuIGFycmF5IG9mIHRoZSBzYW1lIG5hbWUgZXhp c3RlZAorICAgICBwcmV2aW91c2x5LCBpdCBpcyBkZXN0cm95ZWQuICBUaGUgbmV3IGFycmF5IGhh cyBhbGwgaXRzIGVsZW1lbnRzCisgICAgIGluaXRpYWxpemVkIHRvIE5VTEwgcG9pbnRlcnMuICBX aGVuIGFuIGFycmF5IGlzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLAorICAgICB0aGUgcmV0dXJuIHZh bHVlIGlzIGl0cyBpbmRleCAoMCA9ICdhJywgMSA9ICdiJywgYW5kIHNvIG9uLikKKyAgLTEgb24g ZmFpbHVyZSAoYmVjYXVzZSAnYScgb3V0IG9mIHJhbmdlIG9yIG1hbGxvYyBmYWlsdXJlKS4KKyov CitpbnQKKyNpZmRlZiBDS19BTlNJQworZGNsYXJyYXkoY2hhciBhLCBpbnQgbikKKyNlbHNlCitk Y2xhcnJheShhLG4pIGNoYXIgYTsgaW50IG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRj bGFycmF5ICovIHsKKyAgICBjaGFyIGMsICoqcDsgaW50IGksIG4yLCByYzsKKworICAgIGlmIChh ID4gNjMgJiYgYSA8IDkxKSBhICs9IDMyOyAgICAgIC8qIENvbnZlcnQgbGV0dGVycyB0byBsb3dl cmNhc2UgKi8KKyAgICBpZiAoYSA8IEFSUkFZQkFTRSB8fCBhID4gMTIyKSAgICAgICAvKiBWZXJp ZnkgbmFtZSAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmIChuIDwgMCkgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENoZWNrIGFyZyAqLworICAgICAgcmV0dXJuKC0xKTsKKyAgICBp ZiAobisxIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBNQVhJTlQrMSB3cmFwcyBhcm91 bmQgKi8KKyAgICAgIHJldHVybigtMSk7CisKKyAgICBjID0gYTsKKyAgICBhIC09IEFSUkFZQkFT RTsgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IG5hbWUgdG8gbnVtYmVyICovCisgICAg cmMgPSBhOwkJCQkvKiBBcnJheSBpbmRleCB3aWxsIGJlIHJldHVybiBjb2RlICovCisgICAgaWYg KChwID0gYV9wdHJbYV0pICE9IE5VTEwpIHsgICAgICAgLyogRGVsZXRlIG9sZCBhcnJheSBvZiBz YW1lIG5hbWUgKi8KKyAgICAgICAgaWYgKGFfbGlua1thXSA+IC0xKSB7ICAgICAgICAgICAvKiBJ cyBpdCBhIGxpbms/ICovCisgICAgICAgICAgICBpZiAobiA9PSAwKSB7ICAgICAgICAgICAgICAg LyogSWYgd2UncmUganVzdCBkZWxldGluZyBpdCAqLworICAgICAgICAgICAgICAgIGFfcHRyW2Fd ID0gKGNoYXIgKiopIE5VTEw7IC8qIGNsZWFyIGFsbCB0aGUgaW5mby4gKi8KKyAgICAgICAgICAg ICAgICBhX2RpbVthXSA9IDA7CisgICAgICAgICAgICAgICAgYV9saW5rW2FdID0gLTE7CisgICAg ICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE5vdCBkZWxldGluZyAqLworICAgICAgICAgICAgYSA9IGFfbGlua1thXTsgICAg ICAgICAgICAgIC8qIFN3aXRjaCB0byBsaW5rZWQtdG8gYXJyYXkgKi8KKyAgICAgICAgfQorICAg ICAgICBuMiA9IGFfZGltW2FdOyAgICAgICAgICAgICAgICAgIC8qIFJlYWwgYXJyYXkgKi8KKyAg ICAgICAgZm9yIChpID0gMDsgaSA8PSBuMjsgaSsrKSB7ICAgICAvKiBGaXJzdCBkZWxldGUgaXRz IGVsZW1lbnRzICovCisgICAgICAgICAgICBpZiAocFtpXSkgeworICAgICAgICAgICAgICAgIGZy ZWUocFtpXSk7CisgICAgICAgICAgICAgICAgcFtpXSA9IE5VTEw7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgZnJlZSgoY2hhciAqKWFfcHRyW2FdKTsgICAgICAgICAvKiBUaGVu IHRoZSBlbGVtZW50IGxpc3QgKi8KKyAgICAgICAgaWYgKG4gPT0gMCkgeyAgICAgICAgICAgICAg ICAgICAvKiBJZiB1bmRlY2xhcmluZyB0aGlzIGFycmF5Li4uICovCisgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgMTIyIC0gQVJSQVlCQVNFOyBpKyspIHsgLyogQW55IGxpbmtlZCBhcnJheXM/ ICovCisgICAgICAgICAgICAgICAgaWYgKGkgIT0gYSAmJiBhX2xpbmtbaV0gPT0gYSkgeyAgICAg LyogRmluZCB0aGVtICovCisgICAgICAgICAgICAgICAgICAgIGFfcHRyW2ldID0gKGNoYXIgKiop IE5VTEw7ICAgICAgLyogYW5kIHJlbW92ZSB0aGVtICovCisgICAgICAgICAgICAgICAgICAgIGFf ZGltW2ldID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYV9saW5rW2ldID0gLTE7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFfcHRyW2FdID0g KGNoYXIgKiopIE5VTEw7ICAgICAgLyogUmVtb3ZlIHBvaW50ZXIgdG8gZWxlbWVudCBsaXN0ICov CisgICAgICAgIGFfZGltW2FdID0gMDsgICAgICAgICAgICAgICAgICAgLyogU2V0IGRpbWVuc2lv biBhdCB6ZXJvLiAqLworICAgICAgICBhX2xpbmtbYV0gPSAtMTsgICAgICAgICAgICAgICAgIC8q IFVuc2V0IGxpbmsgd29yZCAqLworICAgIH0KKyAgICBpZiAobiA8IDApCQkJCS8qIElmIG9ubHkg dW5kZWNsYXJpbmcsICovCisgICAgICByZXR1cm4oMCk7CQkJLyogIHdlJ3JlIGRvbmUuICovCisg ICAgcCA9IChjaGFyICoqKSBtYWxsb2MoKG4rMSkgKiBzaXplb2YoY2hhciAqKikpOyAvKiBBbGxv Y2F0ZSBmb3IgbmV3IGFycmF5ICovCisgICAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuKC0xKTsgICAg ICAgICAgLyogQ2hlY2sgKi8KKyAgICBhX3B0clthXSA9IHA7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBTYXZlIHBvaW50ZXIgdG8gbWVtYmVyIGxpc3QgKi8KKyAgICBhX2RpbVthXSA9IG47ICAg ICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIGRpbWVuc2lvbiAqLworICAgIGZvciAoaSA9IDA7 IGkgPD0gbjsgaSsrKSAgICAgICAgICAgIC8qIEluaXRpYWxpemUgbWVtYmVycyB0byBudWxsICov CisgICAgICBwW2ldID0gTlVMTDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgJ3onIC0gQVJS QVlCQVNFOyBpKyspIHsgLyogQW55IGxpbmtlZCBhcnJheXM/ICovCisgICAgICAgIGlmIChpICE9 IGEgJiYgYV9saW5rW2ldID09IGEpIHsgLyogRmluZCBhbmQgdXBkYXRlIHRoZW0gKi8KKyAgICAg ICAgICAgIGFfcHRyW2ldID0gcDsKKyAgICAgICAgICAgIGFfZGltW2ldID0gbjsKKyAgICAgICAg fQorICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCisvKiAgWCBBIFIgUiBBIFkgIC0tIENvbnZl cnQgYXJyYXkgbmFtZSB0byBhcnJheSBpbmRleCAgKi8KKworaW50Cit4YXJyYXkocykgY2hhciAq IHM7IHsKKyAgICBjaGFyIGJ1Zls4XTsKKyAgICBpbnQgeDsKKyAgICBjaGFyIGM7CisKKyAgICBp ZiAoIXMpIHMgPSAiIjsKKyAgICBkZWJ1ZyhGMTEwLCJ4YXJyYXkiLHMsMCk7CisgICAgaWYgKCEq cykKKyAgICAgIHJldHVybigtMSk7CisgICAgeCA9IHN0cmxlbihzKTsKKworICAgIGJ1ZlswXSA9 IE5VTDsKKyAgICBidWZbMV0gPSBOVUw7CisgICAgYnVmWzJdID0gc1swXTsKKyAgICBidWZbM10g PSAoeCA+IDApID8gc1sxXSA6IE5VTDsKKyAgICBidWZbNF0gPSAoeCA+IDEpID8gc1syXSA6IE5V TDsKKyAgICBidWZbNV0gPSAoeCA+IDIpID8gc1szXSA6IE5VTDsKKyAgICBidWZbNl0gPSBOVUw7 CisgICAgZGVidWcoRjExMCwieGFycmF5IGJ1ZlszXSIsJmJ1ZlszXSwwKTsKKyAgICBzID0gYnVm KzI7CisgICAgaWYgKCpzID09ICcmJykgeworICAgICAgICBidWZbMV0gPSBDTURROworICAgICAg ICBzLS07CisgICAgfSBlbHNlIGlmICgqcyAhPSBDTURRKSB7CisgICAgICAgIGJ1ZlswXSA9IENN RFE7CisgICAgICAgIGJ1ZlsxXSA9ICcmJzsKKyAgICAgICAgcyA9IGJ1ZjsKKyAgICB9CisgICAg ZGVidWcoRjExMCwieGFycmF5IHMiLHMsMCk7CisgICAgYyA9ICoocysyKTsKKyAgICBpZiAoaXN1 cHBlcihjKSkKKyAgICAgIGMgPSB0b2xvd2VyKGMpOworICAgIGlmIChjID09ICdAJykKKyAgICAg IGMgPSA5NjsKKyAgICB4ID0gKGludCljIC0gQVJSQVlCQVNFOworICAgIGlmICgqKHMrMykgPT0g J1snKQorICAgICAgKihzKzMpID0gTlVMOworICAgIGlmICh4IDwgMCkgeworCXJldHVybigtMSk7 CisgICAgfQorICAgIGlmICh4ID4gKCd6JyAtIEFSUkFZQkFTRSkpIHsKKwlkZWJ1ZyhGMTAxLCJ4 YXJyYXkgeCBvdXQgb2YgcmFuZ2UiLCIiLHgpOworCXJldHVybigtMSk7CisgICAgfQorICAgIGlm ICgqKHMrMykpIHsKKwlkZWJ1ZyhGMTEwLCJ4YXJyYXkgc3ludGF4IixzLDApOworCXJldHVybigt MSk7CisgICAgfQorICAgIHJldHVybih4KTsKK30KKworLyoKKyAgYm91bmRzcGFpcigpIC0tIHBh cnNlcyBibGFoW246bV0KKworICBGb3IgdXNlIHdpdGggYXJyYXkgc2VnbWVudCBzcGVjaWZpZXJz IGFuZCBjb21wYWN0IHN1YnN0cmluZyBub3RhdGlvbi4KKyAgSWdub3JlcyB0aGUgImJsYWgiIHBh cnQsIGdldHMgdGhlIHZhbHVlcyBvZiBuIGFuZCBtLCB3aGljaCBjYW4gYmUKKyAgbnVtYmVycywg dmFyaWFibGVzLCBvciBhcml0aG1ldGljIGV4cHJlc3Npb25zOyBhbnl0aGluZyB0aGF0IHJlc29s dmVzCisgIHRvIGEgbnVtYmVyLgorCisgIENhbGwgd2l0aDoKKyAgIHMgICAgLSBzdHJpbmcgdG8g cGFyc2UKKyAgIHNlcCAgLSBhcnJheSBvZiBwZXJtaXNzaWJsZSBib3VuZHMgc2VwYXJhdG9yIGNo YXJzCisgICBsbyAgIC0gcG9pbnRlciB0byBsb3ctYm91bmQgcmVzdWx0IChvciAtMSkKKyAgIGhp ICAgLSBwb2ludGVyIHRvIGhpLWJvdW5kIHJlc3VsdCAob3IgLTEpCisgICB6eiAgIC0gcG9pbnRl ciB0byBzZXBhcmF0b3IgY2hhciB0aGF0IHdhcyBlbmNvdW50ZXJlZCAob3IgTlVMKQorICBSZXR1 cm5zOgorICAgLTEgb24gZmFpbHVyZQorICAgIDAgb24gc3VjY2VzcworKi8gICAgICAKKworaW50 CisjaWZkZWYgQ0tfQU5TSUMKK2JvdW5kc3BhaXIoY2hhciAqcywgY2hhciAqc2VwLCBpbnQgKmxv LCBpbnQgKmhpLCBjaGFyICp6eikKKyNlbHNlCitib3VuZHNwYWlyKHMsc2VwLGxvLGhpLHp6KSBj aGFyICpzLCAqc2VwLCAqeno7IGludCAqbG8sICpoaTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eworICAgIGludCBpLCB4LCB5LCByYW5nZVsyXSwgYmMgPSAwOworICAgIGNoYXIgYyA9IE5VTCwg KnMyID0gTlVMTCwgYnVmWzI1Nl0sICpwLCAqcSwgKnIsICplWzJdLCAqdG1wID0gTlVMTDsKKwor ICAgIGRlYnVnKEYxMTAsImJvdW5kc3BhaXIgcyIscywwKTsKKyAgICBkZWJ1ZyhGMTEwLCJib3Vu ZHNwYWlyIHNlcCIsc2VwLDApOworCisgICAgKmxvID0gLTE7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRGVmYXVsdCBib3VuZHMgKi8KKyAgICAqaGkgPSAtMTsKKyAgICAqenogPSAwOwkJ CQkvKiBEZWZhdWx0IGJvdW5kcyBzZXBhcmF0b3IgKi8KKworICAgIHJhbmdlWzBdID0gLTE7ICAg ICAgICAgICAgICAgICAgICAgIC8qIEl0J3MgT0sgLS0gZ2V0IGNvbnRlbnRzICovCisgICAgcmFu Z2VbMV0gPSAtMTsgICAgICAgICAgICAgICAgICAgICAgLyogb2Ygc3Vic2NyaXB0IGJyYWNrZXRz ICovCisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgaWYgKCEqcykKKyAgICAgIHJldHVybigtMSk7 CisgICAgbWFrZXN0cigmdG1wLHMpOyAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBhIHBva2Vh YmxlIGNvcHkgKi8KKyAgICBwID0gdG1wOworICAgIHEgPSBOVUxMOworICAgIHIgPSBOVUxMOwor ICAgIGZvciAocCA9IHM7ICpwOyBwKyspIHsJCS8qIEdldCB0aGUgdHdvIGVsZW1lbnRzICovCisJ aWYgKCpwID09ICdbJykgeworCSAgICBiYysrOwkJCS8qIEJyYWNrZXQgY291bnRlciAqLworCSAg ICBpZiAoYmMgPT0gMSAmJiAhcSkgcSA9IHArMTsKKwl9IGVsc2UgaWYgKCpwID09ICddJykgewor CSAgICBiYy0tOworCSAgICBpZiAoYmMgPT0gMCAmJiBxKSAqcCA9IE5VTDsKKwl9IGVsc2UgaWYg KGJjID09IDEpIHsJCS8qIElmIHdpdGhpbiBicmFja2VycyAqLworCSAgICBzMiA9IGNrc3RyY2hy KHNlcCwqcCk7CS8qIENoZWNrIGZvciBzZXBhcmF0b3IgKi8KKwkgICAgaWYgKHMyKSB7CisJCWRl YnVnKEYwMDAsImJvdW5kc3BhaXIgKnMyIiwiIiwqczIpOworCQlpZiAoYykgeyAgICAgICAgCisJ CSAgICBkZWJ1ZyhGMDAwLCJib3VuZHNwYWlyIiwiVG9vIG1hbnkgc2VwYXJhdG9ycyIsKnMyKTsK KwkJICAgIG1ha2VzdHIoJnRtcCxOVUxMKTsKKwkJICAgIHJldHVybigtMSk7CisJCX0KKwkJYyA9 ICpzMjsJCS8qIFNlcGFyYXRvciBjaGFyYWN0ZXIgKi8KKwkJKnAgPSBOVUw7CisJCXIgPSBwKzE7 CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChiYyA9PSAwICYmICFxKSB7CisJLyogVGhpcyBh bGxvd3Mgc3VjaCBjb25zdHJ1Y3Rpb25zIGFzICJzaG93IGFycmF5IGEiICovCisJZGVidWcoRjEx MCwiYm91bmRzcGFpciIsIm5vIGJyYWNrZXRzIiwwKTsKKwltYWtlc3RyKCZ0bXAsTlVMTCk7CisJ cmV0dXJuKDApOworICAgIH0KKyAgICBpZiAoYmMgIT0gMCB8fCAhcSkgeworCWRlYnVnKEYxMTAs ImJvdW5kc3BhaXIiLCJ1bmJhbGFuY2VkIG9yIG1pc3NpbmcgYnJhY2tldHMiLDApOworCW1ha2Vz dHIoJnRtcCxOVUxMKTsKKwlyZXR1cm4oLTEpOworICAgIH0KKyAgICBpZiAoIXEpIHEgPSAiIjsK KyAgICBpZiAoISpxKSBxID0gIi0xIjsKKyAgICBpZiAoIXIpIHIgPSAiIjsKKyAgICBpZiAoISpy KSByID0gIi0xIjsKKworICAgIGVbMF0gPSBxOworICAgIGVbMV0gPSByOworCisgICAgZGVidWco RjAwMCwiYm91bmRzcGFpciBjIiwiIixjKTsKKyAgICBkZWJ1ZyhGMTEwLCJib3VuZHNwYWlyIHEi LHEsMCk7CisgICAgZGVidWcoRjExMCwiYm91bmRzcGFpciByIixyLDApOworCisgICAgZm9yIChp ID0gMDsgaSA8IDIgJiYgZVtpXTsgaSsrKSB7CisJeSA9IDI1NTsJCQkvKiBFeHBhbmQgdmFyaWFi bGVzLCBldGMuICovCisJcyA9IGJ1ZjsKKwl6enN0cmluZyhlW2ldLCZzLCZ5KTsKKwlzID0gZXZh bHgoYnVmKTsJCQkvKiBFdmFsdWF0ZSBpdCBhcml0aG1ldGljYWxseSAqLworCWlmIChzKSBpZiAo KnMpCisJICBja3N0cm5jcHkoYnVmLHMsMjU2KTsKKwlpZiAoIWNoa251bShidWYpKSB7CQkvKiBE aWQgd2UgZ2V0IGEgbnVtYmVyPyAqLworCSAgICBkZWJ1ZyhGMTEwLCJib3VuZHNwYWlyIGVsZW1l bnQgbm90IG51bWVyaWMiLGJ1ZiwwKTsKKwkgICAgbWFrZXN0cigmdG1wLE5VTEwpOwkJLyogTm8s IGZhaWwuICovCisJICAgIHJldHVybigtMSk7CisJfQorCXJhbmdlW2ldID0gYXRvaShidWYpOwor ICAgIH0KKyAgICBtYWtlc3RyKCZ0bXAsTlVMTCk7ICAgICAgICAgICAgICAgICAvKiBGcmVlIHRl bXBvcmFyeSBwb2tlZCBzdHJpbmcgKi8KKyAgICAqbG8gPSByYW5nZVswXTsgICAgICAgICAgICAg ICAgICAgICAvKiBSZXR1cm4gd2hhdCB3ZSBnb3QgKi8KKyAgICAqaGkgPSByYW5nZVsxXTsKKyAg ICAqenogPSBjOworICAgIGRlYnVnKEYxMDEsImJvdW5kc3BhaXIgbG8iLCIiLCpsbyk7CisgICAg ZGVidWcoRjEwMSwiYm91bmRzcGFpciBoaSIsIiIsKmhpKTsKKyAgICByZXR1cm4oMCk7Cit9CisK Ky8qICBBIFIgUiBBIFkgQiBPIFUgTiBEIFMgIC0tICBQYXJzZSBhcnJheSBzZWdtZW50IG5vdGF0 aW9uIFwmYVtuOm1dICAqLworCisvKgorICBDYWxsIHdpdGggcyA9IGFycmF5IHJlZmVyZW5jZSwg cGx1cyB0d28gcG9pbnRlcnMgdG8gaW50cy4KKyAgUmV0dXJucyAtMSBvbiBlcnJvciwgb3IgYXJy YXkgaW5kZXgsIHdpdGggdGhlIHR3byBpbnRzIHNldCBhcyBmb2xsb3dzOgorICAgXCZhW10gICAg IC0xLCAtMQorICAgXCZhWzNdICAgICAzLCAtMQorICAgXCZhWzM6MTddICAzLCAxNworICBUaGUg YXJyYXkgbmVlZCBub3QgYmUgZGVjbGFyZWQgLS0gdGhpcyByb3V0aW5lIGlzIGp1c3QgZm9yIHBh cnNpbmcuCisqLworaW50CithcnJheWJvdW5kcyhzLGxvLGhpKSBjaGFyICogczsgaW50ICogbG8s ICogaGk7IHsKKyAgICBpbnQgaSwgeCwgeSwgcmFuZ2VbMl07CisgICAgY2hhciB6eiwgYnVmWzI1 Nl0sICogcCwgKiBxOworICAgIGNoYXIgKiB0bXAgPSBOVUxMOworCisgICAgKmxvID0gLTE7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBib3VuZHMgKi8KKyAgICAqaGkgPSAt MTsKKworICAgIGlmICghcykgcyA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIERlZmVuc2Ug ZGUgbnVsbCBhcmdzICovCisgICAgaWYgKCEqcykKKyAgICAgIHJldHVybigtMSk7CisKKyAgICB4 ID0geGFycmF5KHMpOyAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYXNpYyBzdHJ1Y3R1 cmUgKi8KKyAgICBkZWJ1ZyhGMTExLCJhcnJheWJvdW5kcyB4YXJyYXkiLHMseCk7CisgICAgaWYg KHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IE9LLCBmYWlsLiAqLworICAg ICAgcmV0dXJuKC0xKTsKKyAgICB5ID0gYm91bmRzcGFpcihzLCI6IixsbyxoaSwmenopOworICAg IGRlYnVnKEYxMTEsImFycmF5Ym91bmRzIGJvdW5kc3BhaXIiLHMseSk7CisgICAgZGVidWcoRjEw MSwiYXJyYXlib3VuZHMgbG8iLCIiLCpsbyk7CisgICAgZGVidWcoRjEwMSwiYXJyYXlib3VuZHMg aGkiLCIiLCpoaSk7CisgICAgaWYgKHkgPCAwKQkJCQkvKiBHZXQgYm91bmRzICovCisgICAgICBy ZXR1cm4oLTEpOworICAgIHJldHVybih4KTsKK30KKworLyogIEEgUiBSIEEgWSBOIEEgTSAgLS0g IFBhcnNlIGFuIGFycmF5IG5hbWUgICovCisKKy8qCisgIENhbGwgd2l0aCBwb2ludGVyIHRvIHN0 cmluZyB0aGF0IHN0YXJ0cyB3aXRoIHRoZSBhcnJheSByZWZlcmVuY2UuCisgIFN0cmluZyBtYXkg YmVnaW4gd2l0aCBlaXRoZXIgXCYgb3IganVzdCAmLgorICBPbiBzdWNjZXNzLAorICAgIFJldHVy bnMgbGV0dGVyIElEIChhbHdheXMgbG93ZXJjYXNlKSBpbiBhcmd1bWVudCBjLAorICAgICAgd2hp Y2ggY2FuIGFsc28gYmUgYWNjZW50IGdyYXZlIChgID0gOTY7ICdAJyBpcyBjb252ZXJ0ZWQgdG8g Z3JhdmUpOworICAgIERpbWVuc2lvbiBvciBzdWJzY3JpcHQgaW4gYXJndW1lbnQgbjsKKyAgICBJ TVBPUlRBTlQ6IFRoZXNlIGFyZ3VtZW50cyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIg YXMgYWRkcmVzc2VzCisgICAgb2YgaW50cyAobm90IGNoYXJzKSwgZm9yIGV4YW1wbGU6CisgICAg ICBjaGFyICpzOyBpbnQgeCwgeTsKKyAgICAgIGFycmF5bmFtKHMsJngsJnkpOworICBPbiBmYWls dXJlLCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCB3aXRoIGFyZ3MgbiBhbmQgYyBzZXQgdG8g emVyby4KKyovCitpbnQKK2FycmF5bmFtKHNzLGMsbikgY2hhciAqc3M7IGludCAqYzsgaW50ICpu OyB7CisgICAgaW50IGksIHksIHBwLCBsZW47CisgICAgY2hhciB4OworICAgIGNoYXIgKnMsICpw LCAqc3gsICp2bnA7CisgICAgLyogT24gc3RhY2sgdG8gYWxsb3cgZm9yIHJlY3Vyc2l2ZSBjYWxs cy4uLiAqLworICAgIGNoYXIgdm5idWZbQVJSQVlSRUZMRU4rMV07ICAgICAgICAgIC8qIEVudGly ZSBhcnJheSByZWZlcmVuY2UgKi8KKyAgICBjaGFyIHNzYnVmW0FSUkFZUkVGTEVOKzFdOyAgICAg ICAgICAvKiBTdWJzY3JpcHQgaW4gInBsYWluIHRleHQiICovCisgICAgY2hhciBzeGJ1ZlsxNl07 ICAgICAgICAgICAgICAgICAgICAgLyogRXZhbHVhdGVkIHN1YnNjcmlwdCAqLworCisgICAgKmMg PSAqbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSByZXR1cm4gdmFs dWVzICovCisgICAgbGVuID0gc3RybGVuKHNzKTsKKyAgICBmb3IgKHBwID0gMCxpID0gMDsgaSA8 IGxlbjsgaSsrKSB7ICAgICAgICAgIC8qIENoZWNrIGxlbmd0aCAqLworICAgICAgICBpZiAoc3Nb aV0gPT0gJ1snKSB7CisgICAgICAgICAgICBwcCsrOworICAgICAgICB9IGVsc2UgaWYgKHNzW2ld ID09ICddJykgeworICAgICAgICAgICAgaWYgKC0tcHAgPT0gMCkKKyAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGkgPiBBUlJBWVJFRkxFTikgeworICAgICAg ICBwcmludGYoIj9BcnJheSByZWZlcmVuY2UgdG9vIGxvbmcgLSAlc1xuIixzcyk7CisgICAgICAg IHJldHVybigtOSk7CisgICAgfQorICAgIGNrc3RybmNweSh2bmJ1ZixzcyxBUlJBWVJFRkxFTik7 CisgICAgdm5wID0gdm5idWY7CisgICAgaWYgKHZuYnVmWzBdID09IENNRFEgJiYgdm5idWZbMV0g PT0gJyYnKSB2bnArKzsKKyAgICBpZiAoKnZucCAhPSAnJicpIHsKKyAgICAgICAgcHJpbnRmKCI/ Tm90IGFuIGFycmF5IC0gJXNcbiIsdm5idWYpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0K KyAgICB4ID0gKih2bnAgKyAxKTsgICAgICAgICAgICAgICAgICAgICAvKiBGb2xkIGNhc2Ugb2Yg YXJyYXkgbmFtZSAqLworCisgICAgLyogV2UgZG9uJ3QgdXNlIGlzdXBwZXIgJiB0b2xvd2VyIGhl cmUgb24gcHVycG9zZSBiZWNhdXNlIHRoZXNlICovCisgICAgLyogd291bGQgcHJvZHVjZSB1bmRl c2lyZWQgZWZmZWN0cyB3aXRoIGFjY2VudGVkIGxldHRlcnMuICovCisgICAgaWYgKHggPiA2MyAm JiB4IDwgOTEpIHggID0gKih2bnAgKyAxKSA9IChjaGFyKSAoeCArIDMyKTsKKyAgICBpZiAoKHgg PCBBUlJBWUJBU0UpIHx8ICh4ID4gMTIyKSB8fCAoKih2bnArMikgIT0gJ1snKSkgeworICAgICAg ICBpZiAobXNnZmxnKSB7CisgICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIGZvcm1hdCBmb3Ig YXJyYXkgbmFtZSAtICVzXG4iLHZuYnVmKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybigtMik7CisgICAgfQorICAgICpjID0geDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgYXJyYXkgbmFtZSAqLworICAg IHMgPSB2bnArMzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBkaW1lbnNpb24gKi8K KyAgICBwID0gc3NidWY7CisgICAgcHAgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQnJhY2tldCBjb3VudGVyICovCisgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZUkVGTEVOICYm ICpzICE9IE5VTDsgaSsrKSB7IC8qIENvcHkgdXAgdG8gXSAqLworICAgICAgICBpZiAoKnMgPT0g J1snKSBwcCsrOworICAgICAgICBpZiAoKnMgPT0gJ10nICYmIC0tcHAgPT0gMCkgYnJlYWs7Cisg ICAgICAgICpwKysgPSAqcysrOworICAgIH0KKyAgICBpZiAoKnMgIT0gJ10nKSB7CisgICAgICAg IHByaW50ZigiP05vIGNsb3NpbmcgYnJhY2tldCBvbiBhcnJheSBkaW1lbnNpb24gLSAlc1xuIix2 bmJ1Zik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIHAtLTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFRyaW0gd2hpdGVzcGFjZSBmcm9tIGVuZCAqLworICAgIHdo aWxlICgqcCA9PSBTUCB8fCAqcCA9PSBIVCkKKyAgICAgIHAtLTsKKyAgICBwKys7CisgICAgKnAg PSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlIHN1YnNjcmlwdCB3 aXRoIG51bGwgKi8KKyAgICBwID0gc3NidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludCB0byBiZWdpbm5pbmcgb2Ygc3Vic2NyaXB0ICovCisgICAgd2hpbGUgKCpwID09IFNQIHx8 ICpwID09IEhUKSAgICAgICAgLyogVHJpbSB3aGl0ZXNwYWNlIGZyb20gYmVnaW5uaW5nICovCisg ICAgICBwKys7CisgICAgc3ggPSBzeGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2hl cmUgdG8gcHV0IGV4cGFuZGVkIHN1YnNjcmlwdCAqLworICAgIHkgPSAxNjsKKyAgICB7CisJLyog RXZlbiBpZiBWQVJJQUJMRS1FVkFMVUFUSU9OIFNJTVBMRSB1c2UgUkVDVVJTSVZFIGZvciBzdWJz Y3JpcHRzICovCisJLyogTk9URTogVGhpcyBpcyB2dWxuZXJhYmxlIHRvIFNJR0lOVCBhbmQgd2hh dG5vdC4uLiAqLworCWludCB0bXAgPSB2YXJldmFsOwkJLyogU2F2ZSBWQVJJQUJMRS1FVkFMVUFU SU9OIHNldHRpbmcgKi8KKwl2YXJldmFsID0gMTsJCQkvKiBGb3JjZSBpdCB0byBSRUNVUlNJVkUg Ki8KKwl6enN0cmluZyhwLCZzeCwmeSk7CQkvKiBDb252ZXJ0IHZhcmlhYmxlcywgZXRjLiAqLwor CXZhcmV2YWwgPSB0bXA7CQkJLyogUmVzdG9yZSBWQVJJQUJMRS1FVkFMVUFUSU9OICovCisgICAg fQorICAgIHN4ID0gc3hidWY7CisgICAgd2hpbGUgKCpzeCA9PSBTUCkgc3grKzsKKyAgICAvKiBk ZWJ1ZyhGMTEwLCJhcnJheW5hbSBzeCIsIiIsc3gpOyAqLworICAgIGlmICghKnN4KSB7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEVtcHR5IGJyYWNrZXRzLi4uICovCisgICAgICAgICpuID0g LTE3OyAgICAgICAgICAgICAgICAgICAgICAgLyogKFNlY3JldCBjb2RlIDotKSAqLworICAgICAg ICByZXR1cm4oLTIpOworICAgIH0KKyAgICBwID0gZXZhbGEoc3gpOyAgICAgICAgICAgICAgICAg ICAgICAvKiBSdW4gaXQgdGhydSBcZm5ldmFsKCkuLi4gKi8KKyAgICBpZiAocCkgaWYgKCpwKSBj a3N0cm5jcHkoc3hidWYscCwxNik7IC8qIFdlIGtub3cgaXQgaGFzIHRvIGJlIGEgbnVtYmVyLiAq LworCisgICAgaWYgKCFjaGtudW0oc3hidWYpKSB7ICAgICAgICAgICAgICAgLyogTWFrZSBzdXJl IGl0J3MgYWxsIGRpZ2l0cyAqLworICAgICAgICBpZiAobXNnZmxnKSB7CisgICAgICAgICAgICBw cmludGYoIj9BcnJheSBkaW1lbnNpb24gb3Igc3Vic2NyaXB0IG1pc3Npbmcgb3Igbm90IG51bWVy aWNcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg ICAgcmV0dXJuKC0yKTsKKyAgICB9CisgICAgaWYgKCh5ID0gYXRvaShzeGJ1ZikpIDwgMCkgewor ICAgICAgICBpZiAoY21mbGdzID09IDApIHByaW50ZigiXG4iKTsKKyAgICAgICAgaWYgKG1zZ2Zs ZykgeworICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgZGltZW5zaW9uIG9yIHN1YnNjcmlwdCBu b3QgcG9zaXRpdmUgb3IgemVyb1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICAqbiA9IHk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gdGhlIHN1YnNjcmlwdCBvciBkaW1lbnNp b24gKi8KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qIGNoa2FycmF5IHJldHVybnMgMCBvciBncmVh dGVyIGlmIGFycmF5IGV4aXN0cywgbmVnYXRpdmUgb3RoZXJ3aXNlICovCisKK2ludAorY2hrYXJy YXkoYSxpKSBpbnQgYSwgaTsgeyAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIGFycmF5IGlzIGRl Y2xhcmVkICovCisgICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5k IGlmIHN1YnNjcmlwdCBpcyBpbiByYW5nZSAqLworICAgIGlmIChhID09IDY0KSBhID0gOTY7ICAg ICAgICAgICAgICAgIC8qIENvbnZlcnQgYXRzaWduIHRvIGdyYXZlIGFjY2VudCAqLworICAgIHgg PSBhIC0gQVJSQVlCQVNFOyAgICAgICAgICAgICAgICAgIC8qIFZhbHVlcyBtdXN0IGJlIGluIHJh bmdlIDk1LTEyMiAqLworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoeCA9PSAwICYmIG1hY2x2bCA8 IDApICAgICAgICAgICAvKiBNYWNybyBhcmcgdmVjdG9yIGJ1dCBubyBtYWNybyAqLworICAgICAg cmV0dXJuKDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAoeCA8IDAgfHwgeCA+ICd6 JyAtIEFSUkFZQkFTRSkgICAvKiBOb3QgaW4gcmFuZ2UgKi8KKyAgICAgIHJldHVybigtMik7Cisg ICAgaWYgKGFfcHRyW3hdID09IE5VTEwpIHJldHVybigtMSk7ICAgLyogTm90IGRlY2xhcmVkICov CisgICAgaWYgKGkgPiBhX2RpbVt4XSkgcmV0dXJuKC0yKTsgICAgICAgLyogRGVjbGFyZWQgYnV0 IG91dCBvZiByYW5nZS4gKi8KKyAgICByZXR1cm4oYV9kaW1beF0pOyAgICAgICAgICAgICAgICAg ICAvKiBBbGwgb2ssIHJldHVybiBkaW1lbnNpb24gKi8KK30KKworI2lmZGVmIENPTU1FTlQgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaXNuJ3QgdXNlZC4gKi8KK2NoYXIgKgorYXJy YXl2YWwoYSxpKSBpbnQgYSwgaTsgeyAgICAgICAgICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiBc JmFbaV0gKi8KKyAgICBpbnQgeDsgY2hhciAqKnA7ICAgICAgICAgICAgICAgICAgICAvKiAocG9z c2libHkgTlVMTCkgKi8KKyAgICBpZiAoYSA9PSA2NCkgYSA9IDk2OyAgICAgICAgICAgICAgICAv KiBDb252ZXJ0IGF0c2lnbiB0byBncmF2ZSBhY2NlbnQgKi8KKyAgICB4ID0gYSAtIEFSUkFZQkFT RTsgICAgICAgICAgICAgICAgICAvKiBWYWx1ZXMgbXVzdCBiZSBpbiByYW5nZSA5NS0xMjIgKi8K KyAgICBpZiAoeCA8IDAgfHwgeCA+IDI3KSByZXR1cm4oTlVMTCk7ICAvKiBOb3QgaW4gcmFuZ2Ug Ki8KKyAgICBpZiAoKHggPiAwKSAmJiAocCA9IGFfcHRyW3hdKSA9PSBOVUxMKSAvKiBBcnJheSBu b3QgZGVjbGFyZWQgKi8KKyAgICAgIHJldHVybihOVUxMKTsKKyAgICBpZiAoaSA+IGFfZGltW3hd KSAgICAgICAgICAgICAgICAgICAvKiBTdWJzY3JpcHQgb3V0IG9mIHJhbmdlLiAqLworICAgICAg cmV0dXJuKE5VTEwpOworICAgIHJldHVybihwW2ldKTsgICAgICAgICAgICAgICAgICAgICAgIC8q IEFsbCBvaywgcmV0dXJuIHBvaW50ZXIgdG8gdmFsdWUuICovCit9CisjZW5kaWYgLyogQ09NTUVO VCAqLworCisvKgorICBwdXNoYXJyYXkoKSBpcyBjYWxsZWQgd2hlbiBhbiBhcnJheSBuYW1lIGlz IGluY2x1ZGVkIGluIGEgTE9DQUwgc3RhdGVtZW50LgorICBJdCBtb3ZlcyB0aGUgcG9pbnRlcnMg ZnJvbSB0aGUgZ2xvYmFsIGRlZmluaXRpb24gdG8gdGhlIHN0YWNrLCBhbmQgcmVtb3ZlcworICB0 aGUgZ2xvYmFsIGRlZmluaXRpb24uICBMYXRlciwgaWYgdGhlIHNhbWUgYXJyYXkgaXMgZGVjbGFy ZWQgaW4gdGhlIGxvY2FsCisgIGNvbnRleHQsIGl0IG9jY3VwaWVzIHRoZSBnbG9iYWwgZGVmaW5p dGlvbiBpbiB0aGUgbm9ybWFsIHdheS4gIEJ1dCB3aGVuCisgIHBvcGNsdmwoKSBpcyBjYWxsZWQs IGl0IHJlcGxhY2VzIHRoZSBnbG9iYWwgZGVmaW5pdGlvbiB3aXRoIHRoZSBvbmUgc2F2ZWQKKyAg aGVyZS4gIFRoZSAic2VjcmV0IGNvZGUiIGlzIHVzZWQgdG8gaW5kaWNhdGUgdG8gcG9wY2x2KCkg dGhhdCBpdCBzaG91bGQKKyAgcmVtb3ZlIHRoZSBnbG9iYWwgYXJyYXkgd2hlbiBwb3BwaW5nIHRo cm91Z2ggdGhpcyBsZXZlbCAtLSBvdGhlcndpc2UgaWYgYQorICBsb2NhbCBhcnJheSB3ZXJlIGRl Y2xhcmVkIHRoYXQgaGFkIG5vIGNvdW50ZXJwYXJ0IGF0IGFueSBoaWdoZXIgbGV2ZWwsIGl0Cisg IHdvdWxkIG5ldmVyIGJlIGRlbGV0ZWQuICBUaGlzIGFsbG93cyBBbGdvbC1saWtlIGluaGVyaXRh bmNlIHRvIHdvcmsgYm90aAorICBvbiB0aGUgd2F5IGRvd24gYW5kIG9uIHRoZSB3YXkgYmFjayB1 cC4KKyovCitpbnQKK3B1c2hhcnJheSh4LHopIGludCB4LCB6OyB7CisgICAgaW50IHk7CisgICAg ZGVidWcoRjAwMCwicHVzaGFycmF5IHgiLCIiLHgpOworICAgIGRlYnVnKEYxMDEsInB1c2hhcnJh eSB6IiwiIix6KTsKKyAgICB5ID0gY2hrYXJyYXkoeCx6KTsKKyAgICBkZWJ1ZyhGMTAxLCJwdXNo YXJyYXkgeSIsIiIseSk7CisgICAgeCAtPSBBUlJBWUJBU0U7ICAgICAgICAgICAgICAgICAgICAg LyogQ29udmVydCBuYW1lIGxldHRlciB0byBpbmRleC4gKi8KKyAgICBpZiAoeCA8IDAgfHwgeCA+ IDI3KQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgYWFfcHRy W2NtZGx2bF1beF0gPSAoY2hhciAqKikgTlVMTDsKKyAgICAgICAgYWFfZGltW2NtZGx2bF1beF0g PSAtMjM7ICAgICAgICAvKiBTZWNyZXQgY29kZSAoc2VlIHBvcGNsdmwoKSkgKi8KKyAgICB9IGVs c2UgeworICAgICAgICBhYV9wdHJbY21kbHZsXVt4XSA9IGFfcHRyW3hdOworICAgICAgICBhYV9k aW1bY21kbHZsXVt4XSA9IHk7CisgICAgfQorICAgIGFfcHRyW3hdID0gKGNoYXIgKiopIE5VTEw7 CisgICAgYV9kaW1beF0gPSAwOworICAgIHJldHVybigwKTsKK30KKworLyogIFAgQSBSIFMgRSBW IEEgUiAgLS0gIFBhcnNlIGEgdmFyaWFibGUgbmFtZSBvciBhcnJheSByZWZlcmVuY2UuICAqLwor LyoKKyBDYWxsIHdpdGg6CisgICBzICA9IHBvaW50ZXIgdG8gY2FuZGlkYXRlIHZhcmlhYmxlIG5h bWUgb3IgYXJyYXkgcmVmZXJlbmNlLgorICAgKmMgPSBhZGRyZXNzIG9mIGludGVnZXIgaW4gd2hp Y2ggdG8gcmV0dXJuIHZhcmlhYmxlIElELgorICAgKmkgPSBhZGRyZXNzIG9mIGludGVnZXIgaW4g d2hpY2ggdG8gcmV0dXJuIGFycmF5IHN1YnNjcmlwdC4KKyBSZXR1cm5zOgorICAgLTI6ICBzeW50 YXggZXJyb3IgaW4gdmFyaWFibGUgbmFtZSBvciBhcnJheSByZWZlcmVuY2UuCisgICAgMTogIHN1 Y2Nlc3NmdWwgcGFyc2Ugb2YgYSBzaW1wbGUgdmFyaWFibGUsIHdpdGggSUQgaW4gYy4KKyAgICAy OiAgc3VjY2Vzc2Z1bCBwYXJzZSBvZiBhbiBhcnJheSByZWZlcmVuY2UsIHcvSUQgaW4gYyBhbmQg c3Vic2NyaXB0IGluIGkuCisqLworaW50CitwYXJzZXZhcihzLGMsaSkgY2hhciAqczsgaW50ICpj LCAqaTsgeworICAgIGNoYXIgKnA7CisgICAgaW50IHgseSx6OworCisgICAgcCA9IHM7CisgICAg aWYgKCpzID09IENNRFEpIHMrKzsgICAgICAgICAgICAgICAgLyogUG9pbnQgYWZ0ZXIgYmFja3Ns YXNoICovCisKKyAgICBpZiAoKnMgIT0gJyUnICYmICpzICE9ICcmJykgeyAgICAgICAvKiBNYWtl IHN1cmUgaXQncyAlIG9yICYgKi8KKyAgICAgICAgcHJpbnRmKCI/Tm90IGEgdmFyaWFibGUgbmFt ZSAtICVzXG4iLHApOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoKGludClz dHJsZW4ocykgPCAyKSB7CisgICAgICAgIHByaW50ZigiP0luY29tcGxldGUgdmFyaWFibGUgbmFt ZSAtICVzXG4iLHApOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoKnMgPT0g JyUnICYmICoocysyKSAhPSAnXDAnKSB7CisgICAgICAgIHByaW50ZigiP09ubHkgb25lIGNoYXJh Y3RlciBhZnRlciAnJSUnIGluIHZhcmlhYmxlIG5hbWUsIHBsZWFzZVxuIik7CisgICAgICAgIHJl dHVybigtOSk7CisgICAgfQorICAgIGlmICgqcyA9PSAnJicgJiYgKihzKzIpICE9ICdbJykgewor ICAgICAgICBwcmludGYoIj9BcnJheSBzdWJzY3JpcHQgZXhwZWN0ZWQgLSAlc1xuIixwKTsKKyAg ICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKCpzID09ICclJykgeyAgICAgICAgICAg ICAgICAgICAgLyogU2ltcGxlIHZhcmlhYmxlLiAqLworICAgICAgICB5ID0gKihzKzEpOyAgICAg ICAgICAgICAgICAgICAgIC8qIEdldCB2YXJpYWJsZSBJRCBsZXR0ZXIvY2hhciAqLworICAgICAg ICBpZiAoaXN1cHBlcih5KSkgeSAtPSAoJ2EnLSdBJyk7IC8qIENvbnZlcnQgdXBwZXIgdG8gbG93 ZXIgY2FzZSAqLworICAgICAgICAqYyA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNl dCB0aGUgcmV0dXJuIHZhbHVlcy4gKi8KKyAgICAgICAgKmkgPSAtMTsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBObyBhcnJheSBzdWJzY3JpcHQuICovCisgICAgICAgIHJldHVybigxKTsgICAg ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIDEgPSBzaW1wbGUgdmFyaWFibGUgKi8KKyAgICB9 CisgICAgaWYgKCpzID09ICcmJykgeyAgICAgICAgICAgICAgICAgICAgLyogQXJyYXkgcmVmZXJl bmNlLiAqLworICAgICAgICB5ID0gYXJyYXluYW0ocywmeCwmeik7ICAgICAgICAgIC8qIEdvIHBh cnNlIGl0LiAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJwYXJzZXZhciBhcnJheW5hbSIsIiIseSk7 CisgICAgICAgIGlmICgoeSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAtMikKKyAgICAg ICAgICAgICAgcmV0dXJuKHB1c2hhcnJheSh4LHopKTsKKyAgICAgICAgICAgIGlmICh5ICE9IC05 KQorICAgICAgICAgICAgICBwcmludGYoIj9JbnZhbGlkIGFycmF5IHJlZmVyZW5jZSAtICVzXG4i LHApOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hr YXJyYXkoeCx6KSA8IDApIHsgICAgICAgIC8qIENoZWNrIGlmIGRlY2xhcmVkLCBldGMuICovCisg ICAgICAgICAgICBwcmludGYoIj9BcnJheSBub3QgZGVjbGFyZWQgb3Igc3Vic2NyaXB0IG91dCBv ZiByYW5nZVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAg ICpjID0geDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGFycmF5IGxldHRlciAq LworICAgICAgICAqaSA9IHo7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBzdWJzY3Jp cHQuICovCisgICAgICAgIHJldHVybigyKTsKKyAgICB9CisgICAgcmV0dXJuKC0yKTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm9uZSBvZiB0aGUgYWJvdmUuICovCit9CisKKworI2RlZmlu ZSBWQUxOIDMyCisKKy8qIEdldCB0aGUgbnVtZXJpYyB2YWx1ZSBvZiBhIHZhcmlhYmxlICovCisv KgorICBDYWxsIHdpdGggcG9pbnRlciB0byB2YXJpYWJsZSBuYW1lLCBwb2ludGVyIHRvIGludCBm b3IgcmV0dXJuIHZhbHVlLgorICBSZXR1cm5zOgorICAgIDAgb24gc3VjY2VzcyB3aXRoIHNlY29u ZCBhcmcgY29udGFpbmluZyB0aGUgdmFsdWUuCisgICAtMSBvbiBmYWlsdXJlIChiYWQgdmFyaWFi bGUgc3ludGF4LCB2YXJpYWJsZSBub3QgZGVmaW5lZCBvciBub3QgbnVtZXJpYykuCisqLworaW50 Cit2YXJ2YWwocyx2KSBjaGFyICpzOyBDS19PRkZfVCAqdjsgeworICAgIGNoYXIgdmFsYnVmW1ZB TE4rMV07ICAgICAgICAgICAgICAgIC8qIHMgaXMgcG9pbnRlciB0byB2YXJpYWJsZSBuYW1lICov CisgICAgY2hhciBuYW1lWzI1Nl07CisgICAgY2hhciAqcDsKKyAgICBpbnQgeTsKKworICAgIGlm ICgqcyAhPSBDTURRKSB7ICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBtYWNybyBuYW1lcyB0 b28gKi8KKyAgICAgICAgY2ttYWttc2cobmFtZSwyNTYsIlxcbSgiLHMsIikiLE5VTEwpOworICAg ICAgICBzID0gbmFtZTsKKyAgICB9CisgICAgcCA9IHZhbGJ1ZjsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRXhwYW5kIHZhcmlhYmxlIGludG8gdmFsYnVmLiAqLworICAgIHkgPSBWQUxOOwor ICAgIGlmICh6enN0cmluZyhzLCZwLCZ5KSA8IDApIHJldHVybigtMSk7CisgICAgcCA9IHZhbGJ1 ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHZhbHVlIGlzIG51bWVyaWMg ICovCisgICAgaWYgKCEqcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmUgbmljZSAt LSBsZXQgYW4gdW5kZWZpbmVkICovCisgICAgICAgIHZhbGJ1ZlswXSA9ICcwJzsgICAgICAgICAg ICAgICAgLyogdmFyaWFibGUgYmUgdHJlYXRlZCBhcyAwLiAgICovCisgICAgICAgIHZhbGJ1Zlsx XSA9IE5VTDsKKyAgICB9CisgICAgaWYgKGNoa251bShwKSkgeyAgICAgICAgICAgICAgICAgICAg LyogQ29udmVydCBudW1lcmljIHN0cmluZyB0byBpbnQgKi8KKyAgICAgICAgKnYgPSBja2F0b2Zz KHApOwkJLyogT0sgKi8KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBOb3QgT0sgKi8KKyAgICAgICAgcCA9IGV2YWxhKHApOyAgICAgICAgICAgICAgICAgICAvKiBN YXliZSBpdCdzIGFuIGV4cHJlc3Npb24gKi8KKyAgICAgICAgaWYgKCFjaGtudW0ocCkpICAgICAg ICAgICAgICAgICAvKiBEaWQgaXQgZXZhbHVhdGU/ICovCisgICAgICAgICAgcmV0dXJuKC0xKTsg ICAgICAgICAgICAgICAgICAgLyogTm8sIGZhaWx1cmUuICovCisgICAgICAgIGVsc2UgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogWWVzLCAqLworICAgICAgICAgICp2ID0gY2thdG9mcyhw KTsJCS8qIHN1Y2Nlc3MgKi8KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisvKiBJbmNyZW1l bnQgb3IgZGVjcmVtZW50IGEgdmFyaWFibGUgKi8KKy8qIFJldHVybnMgLTEgb24gZmFpbHVyZSwg MCBvbiBzdWNjZXNzICovCisKK2ludAoraW5jdmFyKHMseCx6KSBjaGFyICpzOyBDS19PRkZfVCB4 OyBpbnQgejsgeyAgLyogSW5jcmVtZW50IGEgbnVtZXJpYyB2YXJpYWJsZSAqLworICAgIENLX09G Rl9UIG47CQkJCS8qIHMgaXMgcG9pbnRlciB0byB2YXJpYWJsZSBuYW1lICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeCBpcyBhbW91bnQgdG8gaW5jcmVtZW50 IGJ5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeiAhPSAw IG1lYW5zIGFkZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHogPSAwIG1lYW5zIHN1YnRyYWN0ICovCisgICAgaWYgKHZhcnZhbChzLCZuKSA8IDApICAgICAg ICAgICAgICAgLyogQ29udmVydCBudW1lcmljIHN0cmluZyB0byBpbnQgKi8KKyAgICAgIHJldHVy bigtMSk7CisgICAgaWYgKHopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jcmVt ZW50IGl0IGJ5IHRoZSBnaXZlbiBhbW91bnQgKi8KKyAgICAgIG4gKz0geDsKKyAgICBlbHNlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvciBkZWNyZW1lbnQgYXMgcmVxdWVzdGVk LiAqLworICAgICAgbiAtPSB4OworICAgIGFkZG1hYyhzLGNrZnN0b2EobikpOwkJLyogUmVwbGFj ZSBvbGQgdmFyaWFibGUgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qIEQgTyBEIE8gIC0tICBE byBhIG1hY3JvICovCisKKy8qCisgIENhbGwgd2l0aCB4ID0gbWFjcm8gdGFibGUgaW5kZXgsIHMg PSBwb2ludGVyIHRvIGFyZ3VtZW50cy4KKyAgUmV0dXJucyAwIG9uIGZhaWx1cmUsIDEgb24gc3Vj Y2Vzcy4KKyovCisKK2ludAorZG9kbyh4LHMsZmxhZ3MpIGludCB4OyBjaGFyICpzOyBpbnQgZmxh Z3M7IHsKKyAgICBpbnQgeTsKKyAgICBleHRlcm4gaW50IHRyYV9hc2csIHRyYV9jbWQ7IGludCB0 cmFfdG1wOworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB0ZXJt X2lvOworICAgIGludCB0ZXJtX2lvX3NhdiA9IHRlcm1faW87CisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogTk9MT0NBTCAqLworCisgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogSXQgY2FuIGhhcHBlbiEgKi8KKyAgICAgIHJldHVybigtMSk7CisKKyAgICB0cmFf dG1wID0gdHJhX2FzZzsKKworICAgIGlmICgrK21hY2x2bCA+PSBNQUNMRVZFTCkgeyAgICAgICAg IC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHN0b3JhZ2UgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9k byBtYWNsdmwgdG9vIGRlZXAiLCIiLG1hY2x2bCk7CisgICAgICAgIC0tbWFjbHZsOworICAgICAg ICBwcmludGYoIk1hY3JvcyBuZXN0ZWQgdG9vIGRlZXBseVxuIik7CisgICAgICAgIHJldHVybigw KTsKKyAgICB9CisgICAgbWFjcFttYWNsdmxdID0gbWFjdGFiW3hdLm12YWw7ICAgICAgLyogUG9p bnQgdG8gdGhlIG1hY3JvIGJvZHkgKi8KKyAgICBtYWN4W21hY2x2bF0gPSBtYWN0YWJbeF0ubXZh bDsgICAgICAvKiBSZW1lbWJlciB3aGVyZSB0aGUgYmVnaW5uaW5nIGlzICovCisKKyNpZmRlZiBD T01NRU5UCisgICAgbWFrZXN0cigmKG1fbGluZVttYWNsdmxdKSxzKTsgICAgICAgLyogRW50aXJl IGFyZyBzdHJpbmcgZm9yICJcJSoiICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgY21k bHZsKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW50ZXJpbmcgYSBuZXcgY29tbWFu ZCBsZXZlbCAqLworICAgIGlmIChjbWRsdmwgPj0gQ01EU1RLTCkgeyAgICAgICAgICAgIC8qIFRv byBtYW55IG1hY3JvcyArIFRBS0UgZmlsZXM/ICovCisgICAgICAgIGRlYnVnKEYxMDEsImRvZG8g Y21kbHZsIHRvbyBkZWVwIiwiIixjbWRsdmwpOworICAgICAgICBjbWRsdmwtLTsKKyAgICAgICAg cHJpbnRmKCI/VEFLRSBmaWxlcyBhbmQgRE8gY29tbWFuZHMgbmVzdGVkIHRvbyBkZWVwbHlcbiIp OworICAgICAgICByZXR1cm4oMCk7CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxv ZykgeworICAgICAgICBkZWJ1ZyhGMTExLCJDTUQgK00iLG1hY3RhYlt4XS5rd2QsY21kbHZsKTsK KyAgICAgICAgZGVidWcoRjAxMCwiQ01EIC0+IixzLDApOworICAgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworCisjaWZkZWYgVk1TCisgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogU28gQ3RybC1DLCBldGMsIHdpbGwgd29yay4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNp Zm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIHRlcm1faW8gPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERpc2FibGUgdGVybWluYWwgZW11bGF0b3IgSS9PICovCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIGlmY21kW2NtZGx2bF0gPSAwOworICAg IGlmdGVzdFtjbWRsdmxdID0gMDsKKyAgICBjb3VudFtjbWRsdmxdID0gY291bnRbY21kbHZsLTFd OyAgICAvKiBJbmhlcml0IENPVU5UIGZyb20gcHJldmlvdXMgbGV2ZWwgKi8KKyAgICBpbnRpbWVb Y21kbHZsXSA9IGludGltZVtjbWRsdmwtMV07ICAvKiBJbmhlcml0IHByZXZpb3VzIElOUFVUIFRJ TUVPVVQgKi8KKyAgICBpbnBjYXNbY21kbHZsXSA9IGlucGNhc1tjbWRsdmwtMV07ICAvKiAgIGFu ZCBJTlBVVCBDQVNFICovCisgICAgdGFrZXJyW2NtZGx2bF0gPSB0YWtlcnJbY21kbHZsLTFdOyAg LyogICBhbmQgVEFLRSBFUlJPUiAqLworICAgIG1lcnJvcltjbWRsdmxdID0gbWVycm9yW2NtZGx2 bC0xXTsgIC8qICAgYW5kIE1BQ1JPIEVSUk9SICovCisgICAgeHF1aWV0W2NtZGx2bF0gPSBxdWll dDsKKyAgICB4dmFyZXZbY21kbHZsXSA9IHZhcmV2YWw7CisgICAgeGNtZHNyYyA9IENNRF9NRDsK KyAgICBjbWRzdGtbY21kbHZsXS5zcmMgPSBDTURfTUQ7ICAgICAgICAvKiBTYXkgd2UncmUgaW4g YSBtYWNybyAqLworICAgIGNtZHN0a1tjbWRsdmxdLmx2bCA9IG1hY2x2bDsgICAgICAgIC8qIGFu ZCByZW1lbWJlciB0aGUgbWFjcm8gbGV2ZWwgKi8KKyAgICBjbWRzdGtbY21kbHZsXS5jY2ZsZ3Mg PSBmbGFncyAmIH5DRl9JTUFDOyAvKiBTZXQgZmxhZ3MgKi8KKworICAgIC8qIEluaXRpYWxpemUg cmV0dXJuIHZhbHVlIGV4Y2VwdCBpbiBGT1IsIFdISUxFLCBJRiwgYW5kIFNXSVRDSCBtYWNyb3Mg Ki8KKworICAgIGlmICghKGZsYWdzICYgQ0ZfSU1BQykgJiYgbXJ2YWxbbWFjbHZsXSkgeworICAg ICAgICBmcmVlKG1ydmFsW21hY2x2bF0pOworICAgICAgICBtcnZhbFttYWNsdmxdID0gTlVMTDsK KyAgICB9CisKKyAgICAvKiBDbGVhciBvbGQgJTAuLiU5IGFyZ3VtZW50cyAqLworCisgICAgYWRk bWFjKCIlMCIsbWFjdGFiW3hdLmt3ZCk7ICAgICAgICAgLyogRGVmaW5lICUwID0gbmFtZSBvZiBt YWNybyAqLworICAgIG1ha2VzdHIoJihtX3hhcmdbbWFjbHZsXVswXSksbWFjdGFiW3hdLmt3ZCk7 CisgICAgdmFybmFtWzBdID0gJyUnOworICAgIHZhcm5hbVsyXSA9ICdcMCc7CisgICAgdHJhX2Fz ZyA9IDA7CisgICAgZm9yICh5ID0gMTsgeSA8IDEwOyB5KyspIHsgICAgICAgICAgLyogQ2xlYXIg YXJncyAlMS4uJTkgKi8KKyAgICAgICAgaWYgKG1fYXJnW21hY2x2bF1beV0pIHsgICAgICAgICAv KiBEb24ndCBjYWxsIGRlbG1hYygpIHVubGVzcyAqLworICAgICAgICAgICAgdmFybmFtWzFdID0g KGNoYXIpICh5ICsgJzAnKTsgLyogd2UgaGF2ZSB0by4uLiAqLworICAgICAgICAgICAgZGVsbWFj KHZhcm5hbSwwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0cmFfYXNnID0gdHJhX3RtcDsKKwor LyogQXNzaWduIHRoZSBuZXcgYXJncyBvbmUgd29yZCBwZXIgYXJnLCBhbGxvd2luZyBicmFjZXMg dG8gZ3JvdXAgd29yZHMgKi8KKworICAgIHh3b3JkcyhzLE1BWEFSR0xJU1QsTlVMTCwwKTsKKwor I2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2Owor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICBpZiAodHJhX2NtZCkK KyAgICAgIHByaW50ZigiWyVkXSArTTogXCIlc1wiXG4iLGNtZGx2bCxtYWN0YWJbeF0ua3dkKTsK KyAgICByZXR1cm4oMSk7Cit9CisKKy8qIEluc2VydCAibGl0ZXJhbCIgcXVvdGUgYXJvdW5kIGVh Y2ggY29tbWEtc2VwYXJhdGVkIGNvbW1hbmQgdG8gcHJldmVudCAqLworLyogaXRzIHByZW1hdHVy ZSBleHBhbnNpb24uICBPbmx5IGRvIHRoaXMgaWYgb2JqZWN0IGNvbW1hbmQgaXMgc3Vycm91bmRl ZCAqLworLyogYnkgYnJhY2VzLiAqLworCitzdGF0aWMgY2hhciogZmxpdCA9ICJcXGZsaXQoIjsK KworaW50CitsaXRjbWQoc3JjLGRlc3QsbikgY2hhciAqKnNyYywgKipkZXN0OyBpbnQgbjsgewor ICAgIGludCBiYyA9IDAsIHBwID0gMDsKKyAgICBjaGFyIGMsICpzLCAqbHAsICpzczsKKworICAg IHMgPSAqc3JjOworICAgIGxwID0gKmRlc3Q7CisKKyAgICBkZWJ1ZyhGMDEwLCJsaXRjbWQiLHMs MCk7CisKKyAgICB3aGlsZSAoKnMgPT0gU1ApIHMrKzsgICAgICAgICAgICAgICAvKiBTdHJpcCBl eHRyYSBsZWFkaW5nIHNwYWNlcyAqLworCisgICAgaWYgKCpzID09ICd7JykgeyAgICAgICAgICAg ICAgICAgICAgLyogU3RhcnRzIHdpdGggYnJhY2UgKi8KKyAgICAgICAgcHAgPSAwOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQYXJlbiBjb3VudGVyICovCisgICAgICAgIGJjID0gMTsgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgbGVhZGluZyBicmFjZSAqLworICAgICAgICAq bHArKyA9ICpzKys7ICAgICAgICAgICAgICAgICAgIC8qIENvcHkgaXQgKi8KKyAgICAgICAgaWYg KC0tbiA8IDEpIHJldHVybigtMSk7ICAgICAgICAvKiBDaGVjayBzcGFjZSAqLworICAgICAgICB3 aGlsZSAoKnMgPT0gU1ApIHMrKzsgICAgICAgICAgIC8qIFN0cmlwIGludGVyaW9yIGxlYWRpbmcg c3BhY2VzICovCisgICAgICAgIHNzID0gZmxpdDsgICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnQgdG8gIlxmbGl0KCIgKi8KKyAgICAgICAgd2hpbGUgKCgqbHArKyA9ICpzcysrKSkgICAgICAg ICAvKiBDb3B5IGl0ICovCisgICAgICAgICAgaWYgKC0tbiA8IDEpICAgICAgICAgICAgICAgICAg LyogYW5kIGNoZWNrIHNwYWNlICovCisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICBs cC0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2sgdXAgb3ZlciBudWxsICovCisK KyAgICAgICAgd2hpbGUgKCpzKSB7ICAgICAgICAgICAgICAgICAgICAvKiBHbyB0aHJ1IHJlc3Qg b2YgdGV4dCAqLworICAgICAgICAgICAgYyA9ICpzOworICAgICAgICAgICAgaWYgKGMgPT0gJ3sn KSBiYysrOyAgICAgICAgIC8qIENvdW50IGJyYWNrZXRzICovCisgICAgICAgICAgICBpZiAoYyA9 PSAnKCcpIHBwKys7ICAgICAgICAgLyogYW5kIHBhcmVucyAqLworICAgICAgICAgICAgaWYgKGMg PT0gJyknKSB7ICAgICAgICAgICAgIC8qIFJpZ2h0IHBhcmVudGhlc2lzLiAqLworICAgICAgICAg ICAgICAgIHBwLS07ICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGl0LiAqLworICAgICAgICAg ICAgICAgIGlmIChwcCA8IDApIHsgICAgICAgICAgIC8qIEFuIHVuYmFsYW5jZWQgcmlnaHQgcGFy ZW4uLi4gKi8KKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQg Ilx7IiBhcHBlYXJzIHRvIGJlIGEgcXVvdGVkIGJyYWNlIGFuZCB0aGVyZWZvcmUKKyAgaXNuJ3Qg Y291bnRlZDsgdGhlbiB0aGUgIn0iIG1hdGNoZXMgYW4gZWFybGllciBvcGVuaW5nIGJyYWNlLCBj YXVzaW5nCisgIChlLmcuKSB0cnVuY2F0aW9uIG9mIG1hY3JvcyBieSBnZXRuY20oKS4KKyovCisg ICAgICAgICAgICAgICAgICAgIGlmIChuIDwgNSkgICAgICAgICAgLyogT3V0IG9mIHNwYWNlIGlu IGRlc3QgYnVmZmVyPyAqLworICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7ICAgICAg IC8qIElmIHNvLCBnaXZlIHVwLiAqLworICAgICAgICAgICAgICAgICAgICAqbHArKyA9IENNRFE7 ICAgICAgIC8qIE11c3QgYmUgcXVvdGVkIHRvIHByZXZlbnQgKi8KKyAgICAgICAgICAgICAgICAg ICAgKmxwKysgPSAnfSc7ICAgICAgICAvKiBwcmVtYXR1cmUgdGVybWluYXRpb24gb2YgKi8KKyAg ICAgICAgICAgICAgICAgICAgKmxwKysgPSAnNCc7ICAgICAgICAvKiBcZmxpdCguLi4pICovCisg ICAgICAgICAgICAgICAgICAgICpscCsrID0gJzEnOworICAgICAgICAgICAgICAgICAgICAqbHAr KyA9ICd9JzsKKyAgICAgICAgICAgICAgICAgICAgbiAtPSA1OworI2Vsc2UKKy8qIEhlcmUgd2Ug cmVseSBvbiB0aGUgZmFjdCB0aGUgXG5ubiBuZXZlciB0YWtlcyBtb3JlIHRoYW4gMyBkaWdpdHMg Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKG4gPCA0KSAgICAgICAgICAvKiBPdXQgb2Ygc3Bh Y2UgaW4gZGVzdCBidWZmZXI/ICovCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsg ICAgICAgLyogSWYgc28sIGdpdmUgdXAuICovCisgICAgICAgICAgICAgICAgICAgICpscCsrID0g Q01EUTsgICAgICAgLyogTXVzdCBiZSBxdW90ZWQgdG8gcHJldmVudCAqLworICAgICAgICAgICAg ICAgICAgICAqbHArKyA9ICcwJzsgICAgICAgIC8qIHByZW1hdHVyZSB0ZXJtaW5hdGlvbiBvZiAq LworICAgICAgICAgICAgICAgICAgICAqbHArKyA9ICc0JzsgICAgICAgIC8qIFxmbGl0KC4uLikg Ki8KKyAgICAgICAgICAgICAgICAgICAgKmxwKysgPSAnMSc7CisgICAgICAgICAgICAgICAgICAg IG4gLT0gNDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgICAgIHBwKys7 ICAgICAgICAgICAgICAgLyogVW5jb3VudCBpdC4gKi8KKyAgICAgICAgICAgICAgICAgICAgcysr OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSAnfScpIHsgICAgICAgICAgICAgLyogQ2xv c2luZyBicmFjZS4gKi8KKyAgICAgICAgICAgICAgICBpZiAoLS1iYyA9PSAwKSB7ICAgICAgICAv KiBGaW5hbCBvbmU/ICovCisgICAgICAgICAgICAgICAgICAgICpscCsrID0gJyknOyAgICAgICAg LyogQWRkIGNsb3NpbmcgcGFyZW4gZm9yICJcZmxpdCgpIiAqLworICAgICAgICAgICAgICAgICAg ICBpZiAoLS1uIDwgMSkgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgKmxwKysgPSBj OworICAgICAgICAgICAgICAgICAgICBpZiAoLS1uIDwgMSkgcmV0dXJuKC0xKTsKKyAgICAgICAg ICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqbHArKyA9IGM7ICAgICAgICAgICAg ICAgICAgLyogR2VuZXJhbCBjYXNlICovCisgICAgICAgICAgICBpZiAoLS1uIDwgMSkgcmV0dXJu KC0xKTsKKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgfQorICAgICAgICAqbHAgPSBOVUw7Cisg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gYnJhY2tldHMgYXJv dW5kLCAqLworICAgICAgICB3aGlsZSAoKCpscCsrID0gKnMrKykpICAgICAgICAgIC8qIGp1c3Qg Y29weS4gKi8KKyAgICAgICAgICBpZiAoLS1uIDwgMSkKKyAgICAgICAgICAgIHJldHVybigtMSk7 CisgICAgICAgIGxwLS07CisgICAgfQorICAgICpzcmMgPSBzOyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJldHVybiB1cGRhdGVkIHNvdXJjZSAqLworICAgICpkZXN0ID0gbHA7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBkZXN0aW5hdGlvbiBwb2ludGVycyAqLworICAgIGlm IChiYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZhaWwgaWYgYnJhY2VzIHVuYmFs YW5jZWQgKi8KKyAgICAgIHJldHVybigtMSk7CisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHN1Y2NlZWQuICovCisgICAgICByZXR1cm4oMCk7Cit9 CisjZW5kaWYgLyogTk9TUEwgKi8KKworLyogRnVuY3Rpb25zIG1vdmVkIGhlcmUgZnJvbSBja3V1 c3IuYyB0byBldmVuIG91dCB0aGUgbW9kdWxlIHNpemVzLi4uICovCisKKy8qCisgIEJyZWFrcyB1 cCBzdHJpbmcgcyAtLSBJTiBQTEFDRSEgLS0gaW50byBhIGxpc3Qgb2YgdXAgdG8gbWF4IHdvcmRz LgorICBQb2ludGVycyB0byBlYWNoIHdvcmQgZ28gaW50byB0aGUgYXJyYXkgbGlzdFtdLgorICBt YXggaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdvcmRzIChwb2ludGVycykuCisgIElmIGxpc3Qg aXMgTlVMTCwgdGhlbiB0aGV5IGFyZSBhZGRlZCB0byB0aGUgbWFjcm8gdGFibGUuCisgIGZsYWcg PSAwIG1lYW5zIHRoZSBsYXN0IGZpZWxkIGlzIHRvIGJlIG9uZSB3b3JkLCBsaWtlIGFsbCB0aGUg b3RoZXIgZmllbGRzLAorICAgICAgICAgc28gYW55dGhpbmcgYWZ0ZXIgaXQgaXMgZGlzY2FyZGVk LgorICBmbGFnID0gMSBtZWFucyB0aGUgbGFzdCBmaWVsZCBleHRlbmRzIHRvIHRoZSBlbmQgb2Yg dGhlIHN0cmluZywgZXZlbiBpZgorICAgICAgICAgdGhlcmUgYXJlIGxvdHMgb2Ygd29yZHMgbGVm dCwgc28gdGhlIGxhc3QgZmllbGQgY29udGFpbnMgdGhlCisgICAgICAgICByZW1haW5kZXIgb2Yg dGhlIHN0cmluZy4KKyovCitWT0lECit4d29yZHMocyxtYXgsbGlzdCxmbGFnKSBjaGFyICpzOyBp bnQgbWF4OyBjaGFyICpsaXN0W107IGludCBmbGFnOyB7CisgICAgY2hhciAqcDsKKyAgICBpbnQg YiwgaSwgaywgcSwgeSwgejsKKyNpZm5kZWYgTk9TUEwKKyAgICBpbnQgbWFjcm87CisgICAgbWFj cm8gPSAobGlzdCA9PSBOVUxMKTsKKyAgICBkZWJ1ZyhGMDEwLCJ4d29yZHMiLHMsMCk7CisjZW5k aWYgLyogTk9TUEwgKi8KKworI2lmZGVmIFhXT1JEU0RFQlVHCisgICAgcHJpbnRmKCJYV09SRFMg c3RyaW5nPSVzXG4iLHMpOworICAgIHByaW50ZigiWFdPUkRTIG1heD0lZFxuIixtYXgpOworI2Vu ZGlmIC8qIFhXT1JEU0RFQlVHICovCisgICAgcCA9IHM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUG9pbnRlciB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nICovCisgICAgcSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZG91YmxlcXVvdGUgcmVtb3Zh bCAqLworICAgIGIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9y IG91dGVyIGJyYWNlIHJlbW92YWwgKi8KKyAgICBrID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBGbGFnIGZvciBpbi13b3JkICovCisgICAgeSA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQnJhY2UgbmVzdGluZyBsZXZlbCAqLworICAgIHogPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJXb3JkIiBjb3VudGVyLCAwIHRocnUgbWF4ICov CisKKyAgICBpZiAobGlzdCkKKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gbWF4OyBpKyspICAgICAg ICAvKiBJbml0aWFsaXplIHBvaW50ZXJzICovCisgICAgICAgIGxpc3RbaV0gPSBOVUxMOworCisg ICAgaWYgKGZsYWcpIG1heC0tOworCisgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogR28gdGhydSB3b3JkIGxpc3QgKi8KKyAgICAgICAgaWYgKCFzIHx8ICgqcyA9PSAn XDAnKSkgeyAgICAgICAvKiBObyBtb3JlIGNoYXJhY3RlcnM/ICovCisgICAgICAgICAgICBpZiAo ayAhPSAwKSB7ICAgICAgICAgICAgICAgLyogV2FzIEkgaW4gYSB3b3JkPyAqLworICAgICAgICAg ICAgICAgIGlmICh6ID09IG1heCkgYnJlYWs7ICAgIC8qIFllcywgb25seSBnbyB1cCB0byBtYXgu ICovCisgICAgICAgICAgICAgICAgeisrOyAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhp cyB3b3JkLiAqLworI2lmZGVmIFhXT1JEU0RFQlVHCisgICAgICAgICAgICAgICAgcHJpbnRmKCIx IHorKyA9ICVkXG4iLCB6KTsKKyNlbmRpZiAvKiBYV09SRFNERUJVRyAqLworI2lmbmRlZiBOT1NQ TAorICAgICAgICAgICAgICAgIGlmIChtYWNybykgeyAgICAgICAgICAgIC8qIERvaW5nIG1hY3Jv IGFyZ3MgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHogPCAxMCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgdmFybmFtWzFdID0gKGNoYXIpICh6ICsgJzAnKTsgLyogQXNzaWduIGxhc3Qg YXJnICovCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRtYWModmFybmFtLHApOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh6IDw9IG1heCkgeworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYWNsdmwgPCAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgICBhZGRtYWModmFybmFtLHApOworICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmKG1feGFyZ1ttYWNsdmxdW3pdKSxwKTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIE5vdCBkb2lu ZyBtYWNybyBhcmdzICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICAgICAg bGlzdFt6XSA9IHA7ICAgICAgICAvKiBBc3NpZ24gcG9pbnRlci4gKi8KKyNpZmRlZiBYV09SRFNE RUJVRworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlsxXUxJU1RbJWRdPVwiJXNcIlxuIix6 LGxpc3Rbel0pOworI2VuZGlmIC8qIFhXT1JEU0RFQlVHICovCisjaWZuZGVmIE5PU1BMCisgICAg ICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICAgICAgYnJlYWs7 ICAgICAgICAgICAgICAgICAgLyogQW5kIGdldCBvdXQuICovCisgICAgICAgICAgICB9IGVsc2Ug YnJlYWs7ICAgICAgICAgICAgICAgLyogV2FzIG5vdCBpbiBhIHdvcmQgKi8KKyAgICAgICAgfQor ICAgICAgICBpZiAoayA9PSAwICYmICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkpIHsgLyogRWF0IGxl YWRpbmcgYmxhbmtzICovCisgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgfSBlbHNlIGlmIChxID09IDAgJiYgKnMgPT0gJ3snKSB7IC8qIEFuIG9wZW5pbmcg YnJhY2UgKi8KKyAgICAgICAgICAgIGlmIChrID09IDAgJiYgeSA9PSAwKSB7ICAgICAvKiBJZiBs ZWFkaW5nIGJyYWNlICovCisgICAgICAgICAgICAgICAgcCA9IHMrMTsgICAgICAgICAgICAgICAg LyogcG9pbnQgcGFzdCBpdCAqLworICAgICAgICAgICAgICAgIGIgPSAxOyAgICAgICAgICAgICAg ICAgIC8qIGFuZCBmbGFnIHRoYXQgd2UgZGlkIHRoaXMgKi8KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGsgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIHRoYXQgd2UncmUgaW4g YSB3b3JkICovCisgICAgICAgICAgICB5Kys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291 bnQgdGhlIGJyYWNlLiAqLworICAgICAgICB9IGVsc2UgaWYgKHEgPT0gMCAmJiAqcyA9PSAnfScp IHsgLyogQSBjbG9zaW5nIGJyYWNlLiAqLworICAgICAgICAgICAgeS0tOyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENvdW50IGl0LiAqLworICAgICAgICAgICAgaWYgKHkgPD0gMCAmJiBiICE9 IDApIHsgICAgIC8qIElmIGl0IG1hdGNoZXMgdGhlIGxlYWRpbmcgYnJhY2UgKi8KKyAgICAgICAg ICAgICAgICBjaGFyIGM7CisgICAgICAgICAgICAgICAgYyA9ICoocysxKTsKKyAgICAgICAgICAg ICAgICBpZiAoIWMgfHwgYyA9PSBTUCB8fCBjID09IEhUKSB7IC8qIGF0IEVPTCBvciBmb2xsb3dl ZCBieSBTUCAqLworICAgICAgICAgICAgICAgICAgICAqcyA9IFNQOyAgICAgICAgICAgIC8qIGNo YW5nZSBpdCB0byBhIHNwYWNlICovCisgICAgICAgICAgICAgICAgICAgIGIgPSAwOyAgICAgICAg ICAgICAgLyogYW5kIHdlJ3JlIG5vdCBpbiBicmFjZXMgYW55IG1vcmUgKi8KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisjaWZkZWYgRE9VQkxFUVVPVElORworICAgICAgICAvKiBP cGVuaW5nIGRvdWJsZXF1b3RlICovCisgICAgICAgIH0gZWxzZSBpZiAoayA9PSAwICYmIGIgPT0g MCAmJiAqcyA9PSAnIicgJiYgZGJscXVvKSB7CisgICAgICAgICAgICB5Kys7CisgICAgICAgICAg ICBwID0gcysxOyAgICAgICAgICAgICAgICAgICAgLyogcG9pbnQgcGFzdCBpdCAqLworICAgICAg ICAgICAgcSA9IDE7ICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBmbGFnIHRoYXQgd2UgZGlk IHRoaXMgKi8KKyAgICAgICAgICAgIGsgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IHRoYXQgd2UncmUgaW4gYSB3b3JkICovCisgICAgICAgIC8qIENsb3NpbmcgZG91YmxlIHF1b3Rl ICovCisgICAgICAgIH0gZWxzZSBpZiAocSA+IDAgJiYgayA+IDAgJiYgYiA9PSAwICYmICpzID09 ICciJyAmJiBkYmxxdW8pIHsKKyAgICAgICAgICAgIGNoYXIgYzsKKyAgICAgICAgICAgIGMgPSAq KHMrMSk7CisgICAgICAgICAgICBpZiAoIWMgfHwgYyA9PSBTUCB8fCBjID09IEhUKSB7IC8qIGF0 IEVPTCBvciBmb2xsb3dlZCBieSBTUCAqLworICAgICAgICAgICAgICAgIHktLTsKKyAgICAgICAg ICAgICAgICAqcyA9IFNQOyAgICAgICAgICAgICAgICAvKiBjaGFuZ2UgaXQgdG8gYSBzcGFjZSAq LworICAgICAgICAgICAgICAgIHEgPSAwOyAgICAgICAgICAgICAgICAgIC8qIGFuZCB3ZSdyZSBu b3QgaW4gcXVvdGVzIGFueSBtb3JlICovCisgICAgICAgICAgICB9CisjZW5kaWYgLyogRE9VQkxF UVVPVElORyAqLworCisgICAgICAgIH0gZWxzZSBpZiAoKnMgIT0gU1AgJiYgKnMgIT0gSFQpIHsg LyogTm9uc3BhY2UgbWVhbnMgd2UncmUgaW4gYSB3b3JkICovCisgICAgICAgICAgICBpZiAoayA9 PSAwKSB7ICAgICAgICAgICAgICAgLyogSWYgd2Ugd2VyZW4ndCBpbiBhIHdvcmQgYmVmb3JlLCAq LworICAgICAgICAgICAgICAgIHAgPSBzOyAgICAgICAgICAgICAgICAgIC8qIE1hcmsgdGhlIGJl Z2lubmluZyAqLworICAgICAgICAgICAgICAgIGlmIChmbGFnICYmIHogPT0gbWF4KSB7IC8qIFdh bnQgbGFzdCB3b3JkIHRvIGJlIHJlbWFpbmRlcj8gKi8KKyAgICAgICAgICAgICAgICAgICAgeisr OworI2lmZGVmIFhXT1JEU0RFQlVHCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiMSB6Kysg PSAlZFxuIiwgeik7CisjZW5kaWYgLyogWFdPUkRTREVCVUcgKi8KKyAgICAgICAgICAgICAgICAg ICAgbGlzdFt6XSA9IHA7ICAgICAgICAvKiBZZXMsIHBvaW50IHRvIGl0ICovCisjaWZkZWYgWFdP UkRTREVCVUcKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJbNF1MSVNUWyVkXT1cIiVzXCJc biIseixsaXN0W3pdKTsKKyNlbmRpZiAvKiBYV09SRFNERUJVRyAqLworICAgICAgICAgICAgICAg ICAgICBicmVhazsgICAgICAgICAgICAgIC8qIGFuZCBxdWl0ICovCisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIGsgPSAxOyAgICAgICAgICAgICAgICAgIC8qIFNldCBpbi13b3Jk IGZsYWcgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBJZiB3ZSdyZSBu b3QgaW5zaWRlIGEgYnJhY2VkIHF1YW50aXR5LCBhbmQgd2UgYXJlIGluIGEgd29yZCwgYW5kICov CisgICAgICAgIC8qIHdlIGhhdmUgaGl0IHdoaXRlc3BhY2UsIHRoZW4gd2UgaGF2ZSBhIHdvcmQu ICovCisgICAgICAgIGlmICgoeSA8IDEpICYmIChrICE9IDApICYmICgqcyA9PSBTUCB8fCAqcyA9 PSBIVCkgJiYgIWIpIHsKKyAgICAgICAgICAgIGlmICghZmxhZyB8fCB6IDwgbWF4KSAgICAgICAv KiBpZiB3ZSBkb24ndCB3YW50IHRvIGtlZXAgcmVzdCAqLworICAgICAgICAgICAgICAqcyA9ICdc MCc7ICAgICAgICAgICAgICAgIC8qIHRlcm1pbmF0ZSB0aGUgYXJnIHdpdGggbnVsbCAqLworICAg ICAgICAgICAgayA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNheSB3ZSdyZSBub3QgaW4g YSB3b3JkIGFueSBtb3JlICovCisgICAgICAgICAgICB5ID0gMDsgICAgICAgICAgICAgICAgICAg ICAgLyogc3RhcnQgYnJhY2VzIG9mZiBjbGVhbiBhZ2FpbiAqLworICAgICAgICAgICAgaWYgKHog PT0gbWF4KSBicmVhazsgICAgICAgIC8qIE9ubHkgZ28gdXAgdG8gbWF4LiAqLworICAgICAgICAg ICAgeisrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IHRoaXMgYXJnICovCisjaWZk ZWYgWFdPUkRTREVCVUcKKyAgICAgICAgICAgIHByaW50ZigiMSB6KysgPSAlZFxuIiwgeik7Cisj ZW5kaWYgLyogWFdPUkRTREVCVUcgKi8KKworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgaWYg KG1hY3JvKSB7CisgICAgICAgICAgICAgICAgaWYgKHogPCAxMCkgeworICAgICAgICAgICAgICAg ICAgICB2YXJuYW1bMV0gPSAoY2hhcikgKHogKyAnMCcpOyAvKiBjb21wdXRlIGl0cyBuYW1lICov CisgICAgICAgICAgICAgICAgICAgIGFkZG1hYyh2YXJuYW0scCk7ICAgLyogYWRkIGl0IHRvIHRo ZSBtYWNybyB0YWJsZSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo eiA8PSBtYXgpIHsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgIGlmIChtYWNs dmwgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIGFkZG1hYyh2YXJuYW0scCk7CisgICAgICAg ICAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAg ICAgICAgbWFrZXN0cigmKG1feGFyZ1ttYWNsdmxdW3pdKSxwKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UgeworI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICAg ICAgbGlzdFt6XSA9IHA7CisjaWZkZWYgWFdPUkRTREVCVUcKKyAgICAgICAgICAgICAgICBwcmlu dGYoIlsyXUxJU1RbJWRdPVwiJXNcIlxuIix6LGxpc3Rbel0pOworI2VuZGlmIC8qIFhXT1JEU0RF QlVHICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8K KyAgICAgICAgICAgIHAgPSBzKzE7CisgICAgICAgIH0KKyAgICAgICAgcysrOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQb2ludCBwYXN0IHRoaXMgY2hhcmFjdGVyICovCisgICAgfQor ICAgIGlmICgoeiA9PSAwKSAmJiAoeSA+IDEpKSB7ICAgICAgICAgIC8qIEV4dHJhIGNsb3Npbmcg YnJhY2UocykgYXQgZW5kICovCisgICAgICAgIHorKzsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAg aWYgKG1hY3JvKSB7CisgICAgICAgICAgICBpZiAoeiA8IDEwKSB7CisgICAgICAgICAgICAgICAg dmFybmFtWzFdID0geiArICcwJzsgICAgLyogY29tcHV0ZSBpdHMgbmFtZSAqLworICAgICAgICAg ICAgICAgIGFkZG1hYyh2YXJuYW0scCk7ICAgICAgIC8qIEFkZCByZXN0IG9mIGxpbmUgdG8gbGFz dCBhcmcgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh6IDw9IG1heCkgeworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICBpZiAobWFjbHZsIDwgMCkKKyAgICAgICAgICAg ICAgICAgIGFkZG1hYyh2YXJuYW0scCk7CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJihtX3hhcmdbbWFjbHZsXVt6 XSkscCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYgLyogTk9TUEwg Ki8KKyAgICAgICAgICAgIGxpc3Rbel0gPSBwOworI2lmZGVmIFhXT1JEU0RFQlVHCisgICAgICAg ICAgICBwcmludGYoIlszXUxJU1RbJWRdPVwiJXNcIlxuIix6LGxpc3Rbel0pOworI2VuZGlmIC8q IFhXT1JEU0RFQlVHICovCisjaWZuZGVmIE5PU1BMCisgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQ TCAqLworICAgIH0KKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAobWFjcm8pIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNYWNybyAqLworICAgICAgICBpZiAobWFjbHZsIDwgMCkgeworICAgICAg ICAgICAgYV9kaW1bMF0gPSB6OyAgICAgICAgICAgICAgIC8qIEFycmF5IGRpbWVuc2lvbiBpcyBv bmUgbGVzcyAqLworICAgICAgICAgICAgdG9wYXJnYyA9IHogKyAxOyAgICAgICAgICAgIC8qIHRo YW4gXHYoYXJnYykgKi8KKwkgICAgZGVidWcoRjExMSwiYV9kaW1bMF0iLCJEIixhX2RpbVswXSk7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYWNhcmdjW21hY2x2bF0gPSB6ICsgMTsg ICAgLyogU2V0IFx2KGFyZ2MpIHZhcmlhYmxlICovCisgICAgICAgICAgICBuX3hhcmdbbWFjbHZs XSA9IHogKyAxOyAgICAgLyogVGhpcyBpcyB0aGUgYWN0dWFsIG51bWJlciAqLworICAgICAgICAg ICAgYV9wdHJbMF0gPSBtX3hhcmdbbWFjbHZsXTsgIC8qIFBvaW50IFwmX1tdIGF0IHRoZSBhcmdz ICovCisgICAgICAgICAgICBhX2RpbVswXSA9IHo7ICAgICAgICAgICAgICAgLyogQW5kIGdpdmUg aXQgdGhpcyBkaW1lbnNpb24gKi8KKwkgICAgZGVidWcoRjExMSwiYV9kaW1bMF0iLCJFIixhX2Rp bVswXSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICByZXR1cm47 Cit9CisKKyNpZm5kZWYgTk9TUEwKKworLyogIEQgTyBTIEggSSBGIFQgIC0tICBEbyB0aGUgU0hJ RlQgQ29tbWFuZDsgc2hpZnQgbWFjcm8gYXJncyBsZWZ0IGJ5IG4gKi8KKworLyogIE5vdGU6IGF0 IHNvbWUgcG9pbnQgbGV0J3MgY29uc29saWRhdGUgbV9hcmdbXVtdIGFuZCBtX3hhcmdbXVtdLiAq LworCitpbnQKK2Rvc2hpZnQobikgaW50IG47IHsgICAgICAgICAgICAgICAgICAgICAvKiBuID0g c2hpZnQgY291bnQgKi8KKyAgICBpbnQgaSwgdG9wLCBsZXZlbDsKKyAgICBjaGFyIC8qICpzLCAq bSwgKi8gYnVmWzZdOyAgICAgICAgICAvKiBCdWZmZXIgdG8gYnVpbGQgc2NhbGFyIG5hbWVzICov CisgICAgY2hhciAqIHN4ID0gdG1wYnVmOworICAgIGludCBueCA9IFRNUEJVRlNJWjsKKworICAg IGRlYnVnKEYxMDEsIlNISUZUIGNvdW50IiwiIixuKTsKKyAgICBkZWJ1ZyhGMTAxLCJTSElGVCB0 b3BhcmdjIiwiIix0b3BhcmdjKTsKKworICAgIGlmIChuIDwgMSkgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFN0YXkgaW4gcmFuZ2UgKi8KKyAgICAgIHJldHVybihuID09IDAgPyAxIDogMCk7 CisKKyAgICBsZXZlbCA9IG1hY2x2bDsKKyAgICB0b3AgPSAobGV2ZWwgPCAwKSA/IHRvcGFyZ2Mg OiBtYWNhcmdjW2xldmVsXTsKKworICAgIGlmIChuID49IHRvcCkKKyAgICAgIG4gPSB0b3AgLSAx OworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGRlYnVnKEYxMDEs IlNISUZUIGNvdW50IDIiLCIiLG4pOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSElGVCBsZXZlbCIs IiIsbGV2ZWwpOworICAgICAgICBpZiAobGV2ZWwgPiAtMSkKKyAgICAgICAgICBkZWJ1ZyhGMTAx LCJTSElGVCBtYWNhcmdjW2xldmVsXSIsIiIsbWFjYXJnY1tsZXZlbF0pOworICAgIH0KKyNlbmRp ZiAvKiBERUJVRyAqLworCisgICAgYnVmWzBdID0gJ1xcJzsgICAgICAgICAgICAgICAgICAgICAg LyogSW5pdGlhbGl6ZSBuYW1lIHRlbXBsYXRlICovCisgICAgYnVmWzFdID0gJyUnOworICAgIGJ1 ZlsyXSA9IE5VTDsKKyAgICBidWZbM10gPSBOVUw7CisKKyAgICBmb3IgKGkgPSAxOyBpIDw9IG47 IGkrKykgeyAgICAgICAgICAvKiBGcmVlIHNoaWZ0ZWQtb3ZlciBhcmdzICovCisgICAgICAgIGlm IChsZXZlbCA8IDApIHsKKyAgICAgICAgICAgIG1ha2VzdHIoJih0b3BhcmdbaV0pLE5VTEwpOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWFrZXN0cigmKG1feGFyZ1tsZXZlbF1baV0p LE5VTEwpOworICAgICAgICB9CisgICAgICAgIGlmIChpIDwgMTApIHsgICAgICAgICAgICAgICAg ICAgLyogSXMgdGhpcyBuZWNlc3Nhcnk/ICovCisgICAgICAgICAgICBidWZbMl0gPSAoY2hhciko aSsnMCcpOworICAgICAgICAgICAgZGVsbWFjKGJ1ZiwwKTsKKyAgICAgICAgfQorICAgIH0KKyAg ICBmb3IgKGkgPSAxOyBpIDw9IHRvcC1uOyBpKyspIHsgICAgICAvKiBTaGlmdCByZW1haW5pbmcg YXJncyAqLworICAgICAgICBpZiAobGV2ZWwgPCAwKSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAg ICAgICAgdG9wYXJnW2ldID0gdG9wYXJnW2krbl07ICAgIC8qIEZ1bGwgdmVjdG9yICovCisjZWxz ZQorICAgICAgICAgICAgbWFrZXN0cigmKHRvcGFyZ1tpXSksdG9wYXJnW2krbl0pOyAvKiBGdWxs IHZlY3RvciAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGlmIChpIDwgMTAp ICAgICAgICAgICAgICAgICAvKiBTY2FsYXJzLi4uICovCisgICAgICAgICAgICAgIG1ha2VzdHIo JihnX3ZhcltpKycwJ10pLHRvcGFyZ1tpK25dKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBD T01NRU5UCisgICAgICAgICAgICBtX3hhcmdbbGV2ZWxdW2ldID0gbV94YXJnW2xldmVsXVtpK25d OworI2Vsc2UKKyAgICAgICAgICAgIG1ha2VzdHIoJihtX3hhcmdbbGV2ZWxdW2ldKSxtX3hhcmdb bGV2ZWxdW2krbl0pOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGlmIChpIDwg MTApIHsKKyAgICAgICAgICAgICAgICBidWZbMl0gPSAoY2hhcikoaSsnMCcpOworICAgICAgICAg ICAgICAgIGRlYnVnKEYwMTAsIlNISUZUIGJ1ZiIsYnVmLDApOworICAgICAgICAgICAgICAgIGFk ZG1hYyhidWYsbV94YXJnW2xldmVsXVtpK25dKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KKyAgICBmb3IgKGkgPSB0b3AtbjsgaSA8PSB0b3A7IGkrKykgeyAgICAvKiBDbGVhciBu IGFyZ3MgZnJvbSB0aGUgZW5kICovCisgICAgICAgIGlmIChsZXZlbCA8IDApIHsKKyNpZmRlZiBD T01NRU5UCisgICAgICAgICAgICB0b3BhcmdbaV0gPSBOVUxMOworI2Vsc2UKKyAgICAgICAgICAg IG1ha2VzdHIoJih0b3BhcmdbaV0pLE5VTEwpOworI2VuZGlmIC8qIENPTU1FTnQgKi8KKyAgICAg ICAgICAgIGlmIChpIDwgMTApCisgICAgICAgICAgICAgIG1ha2VzdHIoJihnX3ZhcltpKycwJ10p LE5VTEwpOworICAgICAgICB9IGVsc2UgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIG1f eGFyZ1tsZXZlbF1baV0gPSBOVUxMOworI2Vsc2UKKyAgICAgICAgICAgIG1ha2VzdHIoJihtX3hh cmdbbGV2ZWxdW2ldKSxOVUxMKTsKKyNlbmRpZiAvKiBDT01NRU50ICovCisgICAgICAgICAgICBp ZiAoaSA8IDEwKSB7CisgICAgICAgICAgICAgICAgYnVmWzJdID0gKGNoYXIpKGkrJzAnKTsKKyAg ICAgICAgICAgICAgICBkZWxtYWMoYnVmLDApOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorICAgIGlmIChsZXZlbCA+IC0xKSB7ICAgICAgICAgICAgICAgICAgIC8qIE1hY3JvIGFy Z3MgKi8KKyAgICAgICAgbWFjYXJnY1tsZXZlbF0gLT0gbjsgICAgICAgICAgICAvKiBBZGp1c3Qg Y291bnQgKi8KKyAgICAgICAgbl94YXJnW21hY2x2bF0gPSBtYWNhcmdjW2xldmVsXTsgLyogSGVy ZSB0b28gKi8KKyAgICAgICAgYV9kaW1bMF0gPSBtYWNhcmdjW2xldmVsXSAtIDE7ICAvKiBBZGp1 c3QgYXJyYXkgZGltZW5zaW9uICovCisJZGVidWcoRjExMSwiYV9kaW1bMF0iLCJGIixhX2RpbVsw XSk7CisgICAgICAgIHp6c3RyaW5nKCJcXGZqb2luKCZfW10seyB9LDEpIiwmc3gsJm54KTsgLyog SGFuZGxlIFwlKiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgbWFrZXN0cigmKG1fbGluZVts ZXZlbF0pLHRtcGJ1Zik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0gZWxzZSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERpdHRvIGZvciB0b3AgbGV2ZWwgKi8KKyAgICAgICAg dG9wYXJnYyAtPSBuOworICAgICAgICBhX2RpbVswXSA9IHRvcGFyZ2MgLSAxOworCWRlYnVnKEYx MTEsImFfZGltWzBdIiwiRyIsYV9kaW1bMF0pOworICAgICAgICB6enN0cmluZygiXFxmam9pbigm X1tdLHsgfSwxKSIsJnN4LCZueCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBtYWtlc3RyKCZ0 b3BsaW5lLHRtcGJ1Zik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICByZXR1cm4o MSk7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8KKworaW50Citkb2NkKGN4KSBpbnQgY3g7IHsgICAg ICAgICAgICAgICAgICAgICAgLyogRG8gdGhlIENEIGNvbW1hbmQgKi8KKyAgICBpbnQgeDsKKyAg ICBleHRlcm4gaW50IHNlcnZlciwgc3J2Y2Rtc2csIGNkYWN0aXZlOworICAgIGV4dGVybiBjaGFy ICogY2Rtc2dmaWxlW10sICogY2tjZHBhdGg7CisgICAgY2hhciAqcywgKnA7CisjaWZkZWYgTUFD CisgICAgY2hhciB0ZW1wWzM0XTsKKyNlbmRpZiAvKiBNQUMgKi8KKyNpZmRlZiBJS1NEQ09ORgor ZXh0ZXJuIGludCBpa3NkY2Y7CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKworI2lmbmRlZiBOT0ZS SUxMUworICAgIGlmIChjeCA9PSBYWEJBQ0spIHsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQorICAgICAgICBjd2RmID0gMTsKKyAgICAgICAgaWYgKHByZXZkaXIpIHsKKyAgICAgICAg ICAgIHMgPSB6Z3RkaXIoKTsKKyAgICAgICAgICAgIGlmICghemNoZGlyKHByZXZkaXIpKSB7Cisg ICAgICAgICAgICAgICAgY3dkZiA9IDA7CisgICAgICAgICAgICAgICAgcGVycm9yKHMpOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZwcmV2ZGlyLHMpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybihjd2RmKTsKKyAgICB9Cisj ZW5kaWYgLyogTk9GUklMTFMgKi8KKworICAgIGlmIChjeCA9PSBYWENEVVApIHsKKyNpZmRlZiBW TVMKKyAgICAgICAgcyA9ICJbLV0iOworI2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAg ICBzID0gIl4iOworI2Vsc2UKKyAgICAgICAgcyA9ICIuLiI7CisjZW5kaWYgLyogZGF0YWdlbmVy YWwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOworICAgICAgICBnb3RvIGdvY2Q7CisgICAgfQorI2lmbmRlZiBOT1NQTAorICAgIGlmIChj eCA9PSBYWEtDRCkgewkJCS8qIFN5bWJvbGljIChLZXJtaXQpIENEICovCisJY2hhciAqIHA7CisJ aW50IG4sIGs7CisJeCA9IGNta2V5KGtjZHRhYixua2NkdGFiLCJTeW1ib2xpYyBkaXJlY3Rvcnkg bmFtZSIsImhvbWUiLHh4c3RyaW5nKTsKKwlpZiAoeCA8IDApCisJICByZXR1cm4oeCk7CisJeCA9 IGxvb2t1cChrY2R0YWIsYXRtYnVmLG5rY2R0YWIsJmspOyAvKiBHZXQgY29tcGxldGUga2V5d29y ZCAqLworCWlmICh4IDwgMCkgeworCSAgICBwcmludGYoIj9Mb29rdXAgZXJyb3JcbiIpOwkvKiBz aG91bGRuJ3QgaGFwcGVuICovCisJICAgIHJldHVybigtOSk7CisJfQorICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApCisJICByZXR1cm4oeCk7CisJaWYgKGsgPT0gVk5fSE9NRSkgewkJLyog SE9NRTogYWxsb3cgU0VUIEhPTUUgdG8gb3ZlcnJpZGUgKi8KKwkgICAgY2tzdHJuY3B5KGxpbmUs aG9tZXBhdGgoKSxMSU5CVUZTSVopOworCX0gZWxzZSB7CQkJLyogT3RoZXIgc3ltYm9saWMgbmFt ZSAqLworCSAgICAvKiBDb252ZXJ0IHRvIHZhcmlhYmxlIHN5bnRheCAqLworCSAgICBja21ha21z Zyh0bXBidWYsVE1QQlVGU0laLCJcXHYoIixrY2R0YWJba10ua3dkLCIpIixOVUxMKTsKKwkgICAg cCA9IGxpbmU7CQkJLyogRXhwYW5kIHRoZSB2YXJpYWJsZSAqLworCSAgICBuID0gTElOQlVGU0la OworCSAgICB6enN0cmluZyh0bXBidWYsJnAsJm4pOworCSAgICBpZiAoIWxpbmVbMF0pIHsJCS8q IEZhaWwgaWYgdmFyaWFibGUgbm90IGRlZmluZWQgKi8KKwkJcHJpbnRmKCI/JXMgLSBub3QgZGVm aW5lZFxuIix0bXBidWYpOworCQlyZXR1cm4oc3VjY2VzcyA9IDApOworCSAgICB9CisJfQorCXMg PSBsaW5lOwkJCS8qIEFsbCBPSywgZ28gdHJ5IHRvIENELi4uICovCisJZ290byBnb2NkOworICAg IH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgY2RhY3RpdmUgPSAxOworI2lmZGVmIEdFTURP UworICAgIGlmICgoeCA9IGNtZGlyKCJOYW1lIG9mIGxvY2FsIGRpcmVjdG9yeSwgb3IgY2Fycmlh Z2UgcmV0dXJuIiwKKyAgICAgICAgICAgICAgICAgICBob21lcGF0aCgpLAorICAgICAgICAgICAg ICAgICAgICZzLAorICAgICAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgICAp CisgICAgICAgICApIDwgMCApCisgICAgICByZXR1cm4oeCk7CisjZWxzZQorI2lmZGVmIE9TMgor ICAgIGlmICgoeCA9IGNtZGlycCgiTmFtZSBvZiBQQyBkaXNrIGFuZC9vciBkaXJlY3RvcnksXG5c CisgICAgICAgb3IgcHJlc3MgdGhlIEVudGVyIGtleSBmb3IgdGhlIGRlZmF1bHQiLAorICAgICAg ICAgICAgICAgICAgICBob21lcGF0aCgpLAorICAgICAgICAgICAgICAgICAgICAmcywKKyAgICAg ICAgICAgICAgICAgICAgY2tjZHBhdGggPyBja2NkcGF0aCA6IGdldGVudigiQ0RQQVRIIiksCisg ICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAg ICAgICkgPCAwICkKKyAgICAgIHJldHVybih4KTsKKyNlbHNlCisjaWZkZWYgTUFDCisgICAgeCA9 IGNrc3RybmNweSh0ZW1wLGhvbWVwYXRoKCksMzIpOworICAgIGlmICh4ID4gMCkgaWYgKHRlbXBb eC0xXSAhPSAnOicpIHsgdGVtcFt4XSA9ICc6JzsgdGVtcFt4KzFdID0gTlVMOyB9CisgICAgaWYg KCh4ID0gY210eHQoIk5hbWUgb2YgTWFjaW50b3NoIHZvbHVtZSBhbmQvb3IgZm9sZGVyLFxuXAor IG9yIHByZXNzIHRoZSBSZXR1cm4ga2V5IGZvciB0aGUgZGVza3RvcCBvbiB0aGUgYm9vdCBkaXNr IiwKKyAgICAgICAgICAgICAgICAgICB0ZW1wLCZzLCB4eHN0cmluZykpIDwgMCApCisgICAgICBy ZXR1cm4oeCk7CisjZWxzZQorICAgIGlmICgoeCA9IGNtZGlycCgiQ2FycmlhZ2UgcmV0dXJuIGZv ciBob21lIGRpcmVjdG9yeSxcblwKK29yIG5hbWUgb2YgZGlyZWN0b3J5IG9uIHRoaXMgY29tcHV0 ZXIiLAorI2lmZGVmIFZNUworICAgICAgICAgICAgICAgICAgICAiU1lTJExPR0lOIiwgICAgICAg IC8qIFdpdGggbm8gY29sb24gKi8KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGhvbWVwYXRo KCksCQkvKiBJbiBWTVMgdGhpcyBpcyAiU1lTJExPR0lOOiIgKi8KKyNlbmRpZiAvKiBWTVMgKi8K KyAgICAgICAgICAgICAgICAgICAgJnMsCisgICAgICAgICAgICAgICAgICAgIGNrY2RwYXRoID8g Y2tjZHBhdGggOiBnZXRlbnYoIkNEUEFUSCIpLAorICAgICAgICAgICAgICAgICAgICB4eHN0cmlu ZworICAgICAgICAgICAgICAgICAgICApKSA8IDApCisgICAgICByZXR1cm4oeCk7CisjZW5kaWYg LyogTUFDICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogR0VNRE9TICovCisgICAgY2tz dHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOyAgICAgICAgLyogTWFrZSBhIHNhZmUgY29weSAqLwor ICAgIHMgPSBsaW5lOworI2lmZGVmIFZNUworICAgIGlmIChja21hdGNoKCIqLkRJUjsxJCIscyww LDApKQorICAgICAgaWYgKGN2dGRpcihzLHRtcGJ1ZixUTVBCVUZTSVopID4gMCkKKyAgICAgICAg cyA9IHRtcGJ1ZjsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBkZWJ1ZyhGMTEwLCJkb2NkIixzLDAp OworI2lmbmRlZiBNQUMKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApICAgICAgICAgICAgICAv KiBHZXQgY29uZmlybWF0aW9uICovCisgICAgICByZXR1cm4oeCk7CisjZW5kaWYgLyogTUFDICov CisKKyAgZ29jZDoKKworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgeCA9IHN0cmxlbihsaW5lKTsg ICAgICAgICAgICAgICAgICAgLyogaG9tZGlyIGVuZHMgaW4gY29sb24sICovCisgICAgaWYgKHgg PiAxICYmIGxpbmVbeC0xXSA9PSAnOicpICAgICAgLyogYW5kICJkaXIiIGRvZXNuJ3QgbGlrZSB0 aGF0Li4uICovCisgICAgICBsaW5lW3gtMV0gPSBOVUw7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KKworI2lmZGVmIE1BQworICAgIGN3ZGYgPSAxOworICAgIGlmICghemNoZGlyKHMpKSB7Cisg ICAgICAgIGN3ZGYgPSAwOworICAgICAgICBpZiAoKnMgIT0gJzonKSB7ICAgICAgICAgICAgICAg IC8qIElmIGl0IGZhaWxlZCwgKi8KKyAgICAgICAgICAgIGNoYXIgKnA7ICAgICAgICAgICAgICAg ICAgICAvKiBzdXBwbHkgbGVhZGluZyBjb2xvbiAqLworICAgICAgICAgICAgaW50IGxlbiA9IChp bnQpc3RybGVuKHMpICsgMjsKKyAgICAgICAgICAgIHAgPSBtYWxsb2MobGVuKTsgICAgICAgICAg ICAvKiBhbmQgdHJ5IGFnYWluLi4uICovCisgICAgICAgICAgICBpZiAocCkgeworICAgICAgICAg ICAgICAgIHN0cmNweShwLCI6Iik7ICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAg ICBzdHJjYXQocCxzKTsgICAgICAgICAgICAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgaWYg KHpjaGRpcihwKSkKKyAgICAgICAgICAgICAgICAgIGN3ZGYgPSAxOworICAgICAgICAgICAgICAg IGZyZWUocCk7CisgICAgICAgICAgICAgICAgcCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisgICAgaWYgKCFjd2RmKQorICAgICAgcGVycm9yKHMpOworI2Vsc2UKKyAg ICBwID0gemd0ZGlyKCk7CisgICAgaWYgKCF6Y2hkaXIocykpIHsKKyAgICAgICAgY3dkZiA9IDA7 CisjaWZkZWYgQ0tST09UCisgICAgICAgIGlmIChja3Jvb3RlcnIpCisgICAgICAgICAgcHJpbnRm KCI/T2ZmIGxpbWl0czogXCIlc1wiXG4iLHMpOworICAgICAgICBlbHNlCisjZW5kaWYgLyogQ0tS T09UICovCisgICAgICAgICAgcGVycm9yKHMpOworICAgIH0gZWxzZSBjd2RmID0gMTsKKyNlbmRp ZiAvKiBNQUMgKi8KKworICAgIHggPSAwOworICAgIGlmIChjd2RmKSB7CisgICAgICAgIG1ha2Vz dHIoJnByZXZkaXIscCk7CisgICAgICAgIGRlYnVnKEYxMTEsImRvY2QiLCJzcnZjZG1zZyIsc3J2 Y2Rtc2cpOworICAgICAgICBpZiAoc3J2Y2Rtc2cKKyNpZmRlZiBJS1NEQ09ORgorICAgICAgICAg ICAgJiYgIShpbnNlcnZlciAmJiAhaWtzZGNmKQorI2VuZGlmIC8qIElLU0RDT05GICovCisgICAg ICAgICAgICApIHsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IDg7IGkrKykgeworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImRvY2QgY2Rtc2dmaWxl W2ldIixjZG1zZ2ZpbGVbaV0saSk7CisgICAgICAgICAgICAgICAgaWYgKHpjaGtpKGNkbXNnZmls ZVtpXSkgPiAtMSkgeworICAgICAgICAgICAgICAgICAgICB4ID0gMTsKKyAgICAgICAgICAgICAg ICAgICAgZG90eXBlKGNkbXNnZmlsZVtpXSx4YXNrbW9yZSwwLDAsTlVMTCwwLE5VTEwsMCwwLE5V TEwsMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKy8qIHhkb2NkOiAqLworICAgIGlmICgheCAm JiBzcnZjZG1zZyAmJiAhc2VydmVyCisjaWZkZWYgSUtTRENPTkYKKyAgICAgICAgJiYgIShpbnNl cnZlciAmJiAhaWtzZGNmKQorI2VuZGlmIC8qIElLU0RDT05GICovCisgICAgICAgICYmICFxdWll dCAmJiAheGNtZHNyYykKKyAgICAgIHByaW50ZigiJXNcbiIsIHpndGRpcigpKTsKKworICAgIHJl dHVybihjd2RmKTsKK30KKworc3RhdGljIGludCBvbl9jdHJsYyA9IDA7CisKK1ZPSUQKK2ZpeGNt ZCgpIHsgICAgICAgICAgICAgICAgICAgICAgLyogRml4IGNvbW1hbmQgcGFyc2VyIGFmdGVyIGlu dGVycnVwdGlvbiAqLworI2lmbmRlZiBOT1NQTAorI2lmbmRlZiBOT09OQ1RSTEMKKyAgICBpZiAo bm1hYykgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICov CisgICAgICAgIGludCBrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWWVzICovCisgICAg ICAgIGNoYXIgKiBzID0gIm9uX2N0cmxjIjsgICAgICAgICAgLyogTmFtZSBvZiBDdHJsLUMgaGFu ZGxpbmcgbWFjcm8gKi8KKyAgICAgICAgayA9IG1sb29rKG1hY3RhYixzLG5tYWMpOyAgICAgICAv KiBMb29rIGl0IHVwLiAqLworICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAg IC8qIElmIGZvdW5kLCAqLworICAgICAgICAgICAgaWYgKG9uX2N0cmxjKysgPT0gMCkgeyAgICAg IC8qIGlmIG5vdCBhbHJlYWR5IGV4ZWN1dGluZywgKi8KKyAgICAgICAgICAgICAgICBpZiAoZG9k byhrLCIiLDApID4gLTEpICAvKiBzZXQgaXQgdXAsICovCisgICAgICAgICAgICAgICAgICBwYXJz ZXIoMSk7ICAgICAgICAgICAgLyogZXhlY3V0ZSBpdCwgKi8KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGRlbG1hYyhzLDEpOyAgICAgICAgICAgICAgICAvKiBhbmQgdW5kZWZpbmUgaXQuICov CisgICAgICAgIH0KKyAgICB9CisgICAgb25fY3RybGMgPSAwOworI2VuZGlmIC8qIE5PT05DVFJM QyAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAgZG9zdG9wKCk7ICAgICAgICAgICAgICAgICAg IC8qIEJhY2sgdG8gdG9wIGxldmVsIChhbHNvIGNhbGxzIGNvbmludCgpKS4gKi8KKyAgICBiZ2No aygpOyAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KKyAg ICBpZiAoKnBzYXZlKSB7ICAgICAgICAgICAgICAgLyogSWYgb2xkIHByb21wdCBzYXZlZCwgKi8K KyAgICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgLyogcmVzdG9yZSBpdC4gKi8KKyAgICAg ICAgKnBzYXZlID0gTlVMOworICAgIH0KKyAgICBzdWNjZXNzID0gMDsgICAgICAgICAgICAgICAg LyogVGVsbCBwYXJzZXIgbGFzdCBjb21tYW5kIGZhaWxlZCAqLworfQorCisjaWZuZGVmIE5PU0hP VyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0hPVyBGRUFUVVJFUyAqLworLyoKKyAgTm90 ZSwgcHJlc2VudGx5IG9wdGxpc3RbXSBpbmRleCBvdmVyZmxvdyBpcyBub3QgY2hlY2tlZC4KKyAg VGhlcmUgaXMgcGxlbnR5IG9mIHJvb20gKGxlc3MgdGhhbiAzNjAgZW50cmllcyBmb3IgMTAwMCBz bG90cykuCisgIFdoZW4gc3BhY2Ugc3RhcnRzIHRvIGdldCB0aWdodCwgY2hlY2sgZm9yIG5vcHRs aXN0ID49IE5PUFRMSVNUCisgIGV2ZXJ5IHRpbWUgbm9wdGxpc3QgaXMgaW5jcmVtZW50ZWQuCisq LworI2RlZmluZSBOT1BUTElTVCAxMDI0CitzdGF0aWMgaW50IG5vcHRsaXN0ID0gMDsKK3N0YXRp YyBjaGFyICogb3B0bGlzdFtOT1BUTElTVCsxXTsKK3N0YXRpYyBpbnQgaHBvcyA9IDA7CisKK2lu dAorcHJ0b3B0KGxpbmVzLHMpIGludCAqIGxpbmVzOyBjaGFyICpzOyB7IC8qIFByaW50IGFuIG9w dGlvbiAqLworICAgIGludCB5LCBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMg d29yZCB3cmFwLiAqLworICAgIGlmICghcykgcyA9ICIiOworICAgIGkgPSAqbGluZXM7CisgICAg aWYgKCEqcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgYXJndW1lbnQgKi8K KyAgICAgICAgaWYgKGhwb3MgPiAwKSB7ICAgICAgICAgICAgICAgICAvKiBtZWFucyB0byBlbmQg dGhpcyBsaW5lLiAqLworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAgIC8q IE5vdCBuZWVkZWQgaWYgYWxyZWFkeSBhdCAqLworICAgICAgICAgICAgaWYgKCsraSA+IChjbWRf cm93cyAtIDMpKSB7IC8qIGJlZ2lubmluZyBvZiBuZXcgbGluZS4gKi8KKyAgICAgICAgICAgICAg ICBpZiAoIWFza21vcmUoKSkKKyAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAgICAgIC8qIEFuZCB0 aGVuIG1ha2UgYSBibGFuayBsaW5lICovCisgICAgICAgIGlmICgrK2kgPiAoY21kX3Jvd3MgLSAz KSkgeworICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpCisgICAgICAgICAgICAgIHJldHVybigw KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0KKyAg ICAgICAgaHBvcyA9IDA7CisgICAgICAgICpsaW5lcyA9IGk7CisgICAgICAgIHJldHVybigxKTsK KyAgICB9CisgICAgeSA9IChpbnQpc3RybGVuKHMpICsgMTsKKyAgICBocG9zICs9IHk7CisgICAg ZGVidWcoRjEwMSwicHJ0b3B0IGhwb3MiLCIiLGhwb3MpOworICAgIGRlYnVnKEYxMDEsInBydG9w dCBjbWRfY29scyIsIiIsY21kX2NvbHMpOworCisgICAgaWYgKAorI2lmZGVmIE9TMgorICAgICAg ICBocG9zID4gKChjbWRfY29scyA+IDQwKSA/IChjbWRfY29scyAtIDEpIDogNzkpCisjZWxzZSAv KiBPUzIgKi8KKyAgICAgICAgaHBvcyA+ICgodHRfY29scyA+IDQwKSA/ICh0dF9jb2xzIC0gMSkg OiA3OSkKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgKSB7CisgICAgICAgIHByaW50ZigiXG4i KTsKKyAgICAgICAgaWYgKCsraSA+IChjbWRfcm93cyAtIDMpKSB7CisgICAgICAgICAgICBpZiAo IWFza21vcmUoKSkKKyAgICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIiAlcyIscyk7 CisgICAgICAgIGhwb3MgPSB5OworICAgIH0gZWxzZQorICAgICAgcHJpbnRmKCIgJXMiLHMpOwor ICAgICpsaW5lcyA9IGk7CisgICAgcmV0dXJuKDEpOworfQorCitzdGF0aWMgVk9JRAoraW5pdG9w dGxpc3QoKSB7CisgICAgaW50IGk7CisgICAgaWYgKG5vcHRsaXN0ID4gMCkKKyAgICAgIHJldHVy bjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTk9QVExJU1Q7IGkrKykKKyAgICAgIG9wdGxpc3RbaV0g PSBOVUxMOworCisjaWZkZWYgTUFDCisjaWZkZWYgTVBXCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJNUFciKTsKKyNlbmRpZiAvKiBNUFcgKi8KKyNlbmRpZiAvKiBNQUMgKi8K KworI2lmZGVmIE1BQworI2lmZGVmIFRISU5LX0MKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIlRISU5LX0MiKTsKKyNlbmRpZiAvKiBUSElOS19DICovCisjZW5kaWYgLyogTUFD ICovCisKKyNpZmRlZiBfXzM4Nl9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJfXzM4Nl9fIik7CisjZW5kaWYgLyogX18zODZfXyAqLworCisvKiBNZW1vcnkgbW9kZWxzLi4u ICovCisKKyNpZmRlZiBfX0ZMQVRfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiX19GTEFUX18iKTsKKyNlbmRpZiAvKiBfX0ZMQVRfXyAqLworI2lmZGVmIF9fU01BTExfXwor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19TTUFMTF9fIik7CisjZW5kaWYg LyogX19TTUFMTF9fICovCisjaWZkZWYgX19NRURJVU1fXworICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiX19NRURJVU1fXyIpOworI2VuZGlmIC8qIF9fTUVESVVNX18gKi8KKyNp ZmRlZiBfX0NPTVBBQ1RfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19D T01QQUNUX18iKTsKKyNlbmRpZiAvKiBfX0NPTVBBQ1RfXyAqLworI2lmZGVmIF9fTEFSR0VfXwor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19MQVJHRV9fIik7CisjZW5kaWYg LyogX19MQVJHRV9fICovCisKKyNpZmRlZiBERUJVRworI2lmZGVmIElGREVCVUcKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIklGREVCVUciKTsKKyNlbHNlCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJERUJVRyIpOworI2VuZGlmIC8qIElGREVCVUcgKi8K KyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIFRMT0cKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIlRMT0ciKTsKKyNlbmRpZiAvKiBUTE9HICovCisjaWZkZWYgQklHQlVGT0sK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkJJR0JVRk9LIik7CisjZW5kaWYg LyogQklHQlVGT0sgKi8KKyNpZmRlZiBJTlBCVUZTSVoKKyAgICBzcHJpbnRmKGxpbmUsIklOUEJV RlNJWj0lZCIsSU5QQlVGU0laKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBJTlBCVUZTSVpFICovCisjaWZkZWYgTElOQlVG U0laCisgICAgc3ByaW50ZihsaW5lLCJMSU5CVUZTSVo9JWQiLExJTkJVRlNJWik7IC8qIFNBRkUg Ki8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyog TElOQlVGU0laRSAqLworI2lmZGVmIElOQlVGU0laRQorICAgIHNwcmludGYobGluZSwiSU5CVUZT SVpFPSVkIixJTkJVRlNJWkUpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIElOQlVGU0laRSAqLworI2lmZGVmIE9CVUZTSVpF CisgICAgc3ByaW50ZihsaW5lLCJPQlVGU0laRT0lZCIsT0JVRlNJWkUpOyAvKiBTQUZFICovCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIE9CVUZT SVpFICovCisjaWZkZWYgRkRfU0VUU0laRQorICAgIHNwcmludGYobGluZSwiRkRfU0VUU0laRT0l ZCIsRkRfU0VUU0laRSk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7CisjZW5kaWYgLyogRkRfU0VUU0laRSAqLworI2lmZGVmIFhGUkNBTgorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiWEZSQ0FOIik7CisjZW5kaWYgLyogWEZS Q0FOICovCisjaWZkZWYgWFBSSU5UCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJYUFJJTlQiKTsKKyNlbmRpZiAvKiBYUFJJTlQgKi8KKyNpZmRlZiBQSVBFU0VORAorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUElQRVNFTkQiKTsKKyNlbmRpZiAvKiBQSVBF U0VORCAqLworI2lmZGVmIENLX1NQRUVECisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJDS19TUEVFRCIpOworI2VuZGlmIC8qIENLX1NQRUVEICovCisjaWZkZWYgQ0tfRkFTVAor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfRkFTVCIpOworI2VuZGlmIC8q IENLX0ZBU1QgKi8KKyNpZmRlZiBDS19BUEMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkNLX0FQQyIpOworI2VuZGlmIC8qIENLX0FQQyAqLworI2lmZGVmIENLX0FVVE9ETAor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfQVVUT0RMIik7CisjZW5kaWYg LyogQ0tfQVVUT0RMICovCisjaWZkZWYgQ0tfTUtESVIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkNLX01LRElSIik7CisjZW5kaWYgLyogQ0tfTUtESVIgKi8KKyNpZmRlZiBO T01LRElSCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT01LRElSIik7Cisj ZW5kaWYgLyogTk9NS0RJUiAqLworI2lmZGVmIENLX0xBQkVMRUQKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkNLX0xBQkVMRUQiKTsKKyNlbmRpZiAvKiBDS19MQUJFTEVEICov CisjaWZkZWYgTk9ESUFMCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0RJ QUwiKTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZmRlZiBNSU5JRElBTAorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiTUlOSURJQUwiKTsKKyNlbmRpZiAvKiBNSU5JRElBTCAq LworI2lmZGVmIFdIQVRBTUkKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIldI QVRBTUkiKTsKKyNlbmRpZiAvKiBXSEFUQU1JICovCisjaWZkZWYgRFlOQU1JQworICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiRFlOQU1JQyIpOworI2VuZGlmIC8qIERZTkFNSUMg Ki8KKyNpZm5kZWYgTk9TUEwKKyAgICBzcHJpbnRmKGxpbmUsIkNNRERFUD0lZCIsQ01EREVQKTsg ICAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwor I2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBNQVhQQVRITEVOCisgICAgc3ByaW50ZihsaW5l LCJNQVhQQVRITEVOPSVkIixNQVhQQVRITEVOKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBNQVhQQVRITEVOICovCisKKyNp ZmRlZiBERVZOQU1MRU4KKyAgICBzcHJpbnRmKGxpbmUsIkRFVk5BTUxFTj0lZCIsREVWTkFNTEVO KTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsK KyNlbmRpZiAvKiBERVZOQU1MRU4gKi8KKworI2lmZGVmIE5PX1BBUkFNX0gKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PX1BBUkFNX0giKTsKKyNlbmRpZiAvKiBOT19QQVJB TV9IICovCisKKyNpZmRlZiBJTkNMX1BBUkFNX0gKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIklOQ0xfUEFSQU1fSCIpOworI2VuZGlmIC8qIElOQ0xfUEFSQU1fSCAqLworCisg ICAgc3ByaW50ZihsaW5lLCJDS01BWFBBVEg9JWQiLENLTUFYUEFUSCk7IC8qIFNBRkUgKi8KKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisKKyAgICBzcHJpbnRmKGxp bmUsIkNLTUFYT1BFTj0lZCIsQ0tNQVhPUEVOKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKworICAgIHNwcmludGYobGluZSwiWl9NQVhDSEFO PSVkIixaX01BWENIQU4pOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLGxpbmUpOworCisjaWZkZWYgT1BFTl9NQVgKKyAgICBzcHJpbnRmKGxpbmUsIk9QRU5f TUFYPSVkIixPUEVOX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogT1BFTl9NQVggKi8KKworI2lmZGVmIF9QT1NJWF9P UEVOX01BWAorICAgIHNwcmludGYobGluZSwiX1BPU0lYX09QRU5fTUFYPSVkIixfUE9TSVhfT1BF Tl9NQVgpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOworI2VuZGlmIC8qIF9QT1NJWF9PUEVOX01BWCAqLworCisjaWZkZWYgQ0tDSEFOTkVMSU8K KyAgICB7CisgICAgICAgIGV4dGVybiBpbnQgel9tYXhjaGFuOworI2lmZGVmIFVOSVgKKyAgICAg ICAgZXh0ZXJuIGludCBja21heGZpbGVzOworICAgICAgICBzcHJpbnRmKGxpbmUsImNrbWF4Zmls ZXM9JWQiLGNrbWF4ZmlsZXMpOyAvKiBTQUZFICovCisgICAgICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgIHNwcmludGYo bGluZSwiel9tYXhjaGFuPSVkIix6X21heGNoYW4pOyAvKiBTQUZFICovCisgICAgICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyAgICB9CisjZW5kaWYgLyogQ0tDSEFO TkVMSU8gKi8KKworI2lmZGVmIEZPUEVOX01BWAorICAgIHNwcmludGYobGluZSwiRk9QRU5fTUFY PSVkIixGT1BFTl9NQVgpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLGxpbmUpOworI2VuZGlmIC8qIEZPUEVOX01BWCAqLworCisjaWZkZWYgTUFYR0VUUEFU SAorICAgIHNwcmludGYobGluZSwiTUFYR0VUUEFUSD0lZCIsTUFYR0VUUEFUSCk7IC8qIFNBRkUg Ki8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyog TUFYR0VUUEFUSCAqLworCisjaWZkZWYgQ01EQkwKKyAgICBzcHJpbnRmKGxpbmUsIkNNREJMPSVk IixDTURCTCk7ICAgICAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLGxpbmUpOworI2VuZGlmIC8qIENNREJMICovCisKKyNpZmRlZiBWTkFNTAorICAgIHNwcmlu dGYobGluZSwiVk5BTUw9JWQiLFZOQU1MKTsgICAgIC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogVk5BTUwgKi8KKworI2lmZGVm IEFSUkFZUkVGTEVOCisgICAgc3ByaW50ZihsaW5lLCJBUlJBWVJFRkxFTj0lZCIsQVJSQVlSRUZM RU4pOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUp OworI2VuZGlmIC8qIEFSUkFZUkVGTEVOICovCisKKyNpZmRlZiBVSURCVUZMRU4KKyAgICBzcHJp bnRmKGxpbmUsIlVJREJVRkxFTj0lZCIsVUlEQlVGTEVOKTsgLyogU0FGRSAqLworICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBVSURCVUZMRU4gKi8K KworI2lmZGVmIEZPUkRFUFRICisgICAgc3ByaW50ZihsaW5lLCJGT1JERVBUSD0lZCIsRk9SREVQ VEgpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUp OworI2VuZGlmIC8qIEZPUkRFUFRIICovCisKKyNpZmRlZiBNQVhUQUtFCisgICAgc3ByaW50Zihs aW5lLCJNQVhUQUtFPSVkIixNQVhUQUtFKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBNQVhUQUtFICovCisKKyNpZmRlZiBN QUNMRVZFTAorICAgIHNwcmludGYobGluZSwiTUFDTEVWRUw9JWQiLE1BQ0xFVkVMKTsgLyogU0FG RSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAv KiBNQUNMRVZFTCAqLworCisjaWZkZWYgTUFDX01BWAorICAgIHNwcmludGYobGluZSwiTUFDX01B WD0lZCIsTUFDX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksbGluZSk7CisjZW5kaWYgLyogTUFDX01BWCAqLworCisjaWZkZWYgX0xBUkdFRklMRV9T T1VSQ0UKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9MQVJHRUZJTEVfU09V UkNFIik7CisjZW5kaWYJLyogX0xBUkdFRklMRV9TT1VSQ0UgKi8KKworI2lmZGVmIF9GSUxFX09G RlNFVF9CSVRTCisgICAgc3ByaW50ZihsaW5lLCJfRklMRV9PRkZTRVRfQklUUz0lZCIsX0ZJTEVf T0ZGU0VUX0JJVFMpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLGxpbmUpOworI2VuZGlmCS8qIF9GSUxFX09GRlNFVF9CSVRTICovCisKKyNpZmRlZiBfX1VT RV9GSUxFX09GRlNFVDY0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1VT RV9GSUxFX09GRlNFVDY0Iik7CisjZW5kaWYJLyogX19VU0VfRklMRV9PRkZTRVQ2NCAqLworCisj aWZkZWYgX19VU0VfTEFSR0VGSUxFNjQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIl9fVVNFX0xBUkdFRklMRTY0Iik7CisjZW5kaWYJLyogX19VU0VfTEFSR0VGSUxFNjQgKi8K KworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBDSEFSX01BWAorICAgIHNwcmludGYobGluZSwiQ0hB Ul9NQVg9JWxseCIsQ0hBUl9NQVgpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIENIQVJfTUFYICovCisjaWZkZWYgVUNIQVJf TUFYCisgICAgc3ByaW50ZihsaW5lLCJVQ0hBUl9NQVg9JWxseCIsVUNIQVJfTUFYKTsgLyogU0FG RSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAv KiBVQ0hBUl9NQVggKi8KKyNpZmRlZiBTSFJUX01BWAorICAgIHNwcmludGYobGluZSwiU0hSVF9N QVg9JWxseCIsU0hSVF9NQVgpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIFNIUlRfTUFYICovCisjaWZkZWYgVVNIUlRfTUFY CisgICAgc3ByaW50ZihsaW5lLCJVU0hSVF9NQVg9JWxseCIsVVNIUlRfTUFYKTsgLyogU0FGRSAq LworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBV U0hSVF9NQVggKi8KKyNpZmRlZiBJTlRfTUFYCisgICAgc3ByaW50ZihsaW5lLCJJTlRfTUFYPSVs bHgiLElOVF9NQVgpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLGxpbmUpOworI2VuZGlmIC8qIElOVF9NQVggKi8KKyNpZmRlZiBVSU5UX01BWAorICAgIHNw cmludGYobGluZSwiVUlOVF9NQVg9JWxseCIsVUlOVF9NQVgpOyAvKiBTQUZFICovCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIFVJTlRfTUFYICov CisjaWZkZWYgTUFYX0xPTkcKKyAgICBzcHJpbnRmKGxpbmUsIk1BWF9MT05HPSVsbHgiLE1BWF9M T05HKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5l KTsKKyNlbmRpZiAvKiBNQVhfTE9ORyAqLworI2lmZGVmIExPTkdfTUFYCisgICAgc3ByaW50Zihs aW5lLCJMT05HX01BWD0lbGx4IixMT05HX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogTE9OR19NQVggKi8KKyNpZmRl ZiBVTE9OR19NQVgKKyAgICBzcHJpbnRmKGxpbmUsIlVMT05HX01BWD0lbGx4IixVTE9OR19NQVgp OyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOwor I2VuZGlmIC8qIFVMT05HX01BWCAqLworI2lmZGVmIE1BWElOVAorICAgIHNwcmludGYobGluZSwi TUFYSU5UPSVsbHgiLE1BWElOVCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogTUFYSU5UICovCisjaWZkZWYgTUFYTE9ORwor ICAgIHNwcmludGYobGluZSwiTUFYTE9ORz0lbGx4IixNQVhMT05HKTsgLyogU0FGRSAqLworICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBNQVhMT05H ICovCisjaWZkZWYgTlQKKyNpZmRlZiBMTE9OR19NQVgKKyAgICBzcHJpbnRmKGxpbmUsIkxMT05H X01BWD0lSTY0eCIsTExPTkdfTUFYKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBMTE9OR19NQVggKi8KKyNpZmRlZiBVTExP TkdfTUFYCisgICAgc3ByaW50ZihsaW5lLCJVTExPTkdfTUFYPSVJNjR4IixVTExPTkdfTUFYKTsg LyogU0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNl bmRpZiAvKiBVTExPTkdfTUFYICovCisjaWZkZWYgTUFYTE9OR0xPTkcKKyAgICBzcHJpbnRmKGxp bmUsIk1BWExPTkdMT05HPSVJNjR4IixNQVhMT05HTE9ORyk7ICAvKiBTQUZFICovCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2VuZGlmIC8qIE1BWExPTkdMT05H ICovCisjZWxzZQorI2lmZGVmIExMT05HX01BWAorICAgIHNwcmludGYobGluZSwiTExPTkdfTUFY PSVsbHgiLExMT05HX01BWCk7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogTExPTkdfTUFYICovCisjaWZkZWYgVUxMT05HX01B WAorICAgIHNwcmludGYobGluZSwiVUxMT05HX01BWD0lbGx4IixVTExPTkdfTUFYKTsgLyogU0FG RSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAv KiBVTExPTkdfTUFYICovCisjaWZkZWYgTUFYTE9OR0xPTkcKKyAgICBzcHJpbnRmKGxpbmUsIk1B WExPTkdMT05HPSVsbHgiLE1BWExPTkdMT05HKTsgIC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogTUFYTE9OR0xPTkcgKi8KKyNl bmRpZgorI2lmZGVmIF9JTlRFR1JBTF9NQVhfQklUUworICAgIHNwcmludGYobGluZSwiX0lOVEVH UkFMX01BWF9CSVRTPSVkIixfSU5URUdSQUxfTUFYX0JJVFMpOyAgLyogU0FGRSAqLworICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBfSU5URUdSQUxf TUFYX0JJVFMgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyNpZmRlZiBNSU5QVVRNQVgKKyAg ICBzcHJpbnRmKGxpbmUsIk1JTlBVVE1BWD0lZCIsTUlOUFVUTUFYKTsgLyogU0FGRSAqLworICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBNSU5QVVRN QVggKi8KKworI2lmZGVmIE1BWFdMRAorICAgIHNwcmludGYobGluZSwiTUFYV0xEPSVkIixNQVhX TEQpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUp OworI2Vsc2UKKyNpZmRlZiBPUzIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks Ik1BWFdMRD11bmxpbWl0ZWQiKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBNQVhXTEQg Ki8KKworI2lmZGVmIE1TRU5ETUFYCisgICAgc3ByaW50ZihsaW5lLCJNU0VORE1BWD0lZCIsTVNF TkRNQVgpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxp bmUpOworI2VuZGlmIC8qIE1TRU5ETUFYICovCisKKyNpZmRlZiBNQVhERElSCisgICAgc3ByaW50 ZihsaW5lLCJNQVhERElSPSVkIixNQVhERElSKTsgLyogU0FGRSAqLworICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAvKiBNQVhERElSICovCisKKyNpZmRl ZiBNQVhETlVNUworICAgIHNwcmludGYobGluZSwiTUFYRE5VTVM9JWQiLE1BWEROVU1TKTsgLyog U0FGRSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRp ZiAvKiBNQVhETlVNUyAqLworCisjaWZkZWYgVU5JWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiVU5JWCIpOworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIFZNUworICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVk1TIik7CisjaWZkZWYgX19WTVNfVkVS CisgICAgc3ByaW50ZihsaW5lLCJfX1ZNU19WRVI9JWQiLF9fVk1TX1ZFUik7IC8qIFNBRkUgKi8K KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogX19W TVNfVkVSICovCisjaWZkZWYgVk1TVjcwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJWTVNWNzAiKTsKKyNlbmRpZiAvKiBWTVNWNzAgKi8KKyNpZmRlZiBPTERfVk1TCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJPTERfVk1TIik7CisjZW5kaWYgLyogT0xE X1ZNUyAqLworI2lmZGVmIHZtcworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi dm1zIik7CisjZW5kaWYgLyogdm1zICovCisjaWZkZWYgVk1TVjYwCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJWTVNWNjAiKTsKKyNlbmRpZiAvKiBWTVNWNjAgKi8KKyNpZmRl ZiBWTVNWODAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlZNU1Y4MCIpOwor I2VuZGlmIC8qIFZNU1Y4MCAqLworI2lmZGVmIFZNU1NIQVJFCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJWTVNTSEFSRSIpOworI2VuZGlmIC8qIFZNU1NIQVJFICovCisjaWZk ZWYgTk9WTVNTSEFSRQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9WTVNT SEFSRSIpOworI2VuZGlmIC8qIE5PVk1TU0hBUkUgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lm ZGVmIGRhdGFnZW5lcmFsCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJkYXRh Z2VuZXJhbCIpOworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjaWZkZWYgYXBvbGxvCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJhcG9sbG8iKTsKKyNlbmRpZiAvKiBhcG9s bG8gKi8KKyNpZmRlZiBhZWdpcworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi YWVnaXMiKTsKKyNlbmRpZiAvKiBhZWdpcyAqLworI2lmZGVmIEE5ODYKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIkE5ODYiKTsKKyNlbmRpZiAvKiBBOTg2ICovCisjaWZkZWYg QU1JR0EKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFNSUdBIik7CisjZW5k aWYgLyogQU1JR0EgKi8KKyNpZmRlZiBDT05WRVg5CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJDT05WRVg5Iik7CisjZW5kaWYgLyogQ09OVkVYOSAqLworI2lmZGVmIENPTlZF WDEwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDT05WRVgxMCIpOworI2Vu ZGlmIC8qIENPTlZFWDkgKi8KKyNpZmRlZiBNQUMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIk1BQyIpOworI2VuZGlmIC8qIE1BQyAqLworI2lmZGVmIEFVWAorICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQVVYIik7CisjZW5kaWYgLyogQVVYICovCisKKyNp ZmRlZiBPUzIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk9TMiIpOworI2lm ZGVmIE5UCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOVCIpOworI2VuZGlm IC8qIE5UICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBPU0sKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIk9TOSIpOworI2VuZGlmIC8qIE9TSyAqLworCisjaWZkZWYg TVNET1MKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1TRE9TIik7CisjZW5k aWYgLyogTVNET1MgKi8KKworI2lmZGVmIERJUkVOVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiRElSRU5UIik7CisjZW5kaWYgLyogRElSRU5UICovCisKKyNpZmRlZiBTRElS RU5UCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTRElSRU5UIik7CisjZW5k aWYgLyogU0RJUkVOVCAqLworCisjaWZkZWYgTkRJUgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTkRJUiIpOworI2VuZGlmIC8qIE5ESVIgKi8KKworI2lmZGVmIFhORElSCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJYTkRJUiIpOworI2VuZGlmIC8qIFhO RElSICovCisKKyNpZmRlZiBTQVZFRFVJRAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiU0FWRURVSUQiKTsKKyNlbmRpZiAvKiBTQVZFRFVJRCAqLworCisjaWZkZWYgUkVOQU1F CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJSRU5BTUUiKTsKKyNlbmRpZiAv KiBSRU5BTUUgKi8KKworI2lmZGVmIENLX1RNUERJUgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiQ0tfVE1QRElSIik7CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKKyNpZmRl ZiBOT0NDVFJBUAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9DQ1RSQVAi KTsKKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworCisjaWZkZWYgTk9DT1RGTUMKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PQ09URk1DIik7CisjZW5kaWYgLyogTk9DT1RGTUMg Ki8KKworI2lmZGVmIE5PRlJJTExTCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJOT0ZSSUxMUyIpOworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZmRlZiBQQVJTRU5TRQor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUEFSU0VOU0UiKTsKKyNlbmRpZiAv KiBQQVJTRU5TRSAqLworCisjaWZkZWYgVElNRUgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIlRJTUVIIik7CisjZW5kaWYgLyogVElNRUggKi8KKworI2lmZGVmIE5PVElNRUgK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlRJTUVIIik7CisjZW5kaWYgLyog Tk9USU1FSCAqLworCisjaWZkZWYgU1lTVElNRUgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIlNZU1RJTUVIIik7CisjZW5kaWYgLyogU1lTVElNRUggKi8KKworI2lmZGVmIE5P U1lTVElNRUgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNZU1RJTUVIIik7 CisjZW5kaWYgLyogTk9TWVNUSU1FSCAqLworCisjaWZkZWYgU1lTVElNRUJICisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTWVNUSU1FQkgiKTsKKyNlbmRpZiAvKiBTWVNUSU1F QkggKi8KKworI2lmZGVmIE5PU1lTVElNRUJICisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJTWVNUSU1FQkgiKTsKKyNlbmRpZiAvKiBOT1NZU1RJTUVCSCAqLworCisjaWZkZWYg VVRJTUVICisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVVElNRUgiKTsKKyNl bmRpZiAvKiBVVElNRUggKi8KKworI2lmZGVmIFNZU1VUSU1FSAorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiU1lTVVRJTUVIIik7CisjZW5kaWYgLyogU1lTVVRJTUVIICovCisK KyNpZmRlZiBDS19ORUVEX1NJRworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi Q0tfTkVFRF9TSUciKTsKKyNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLworCisjaWZkZWYgQ0tfVFRZ RkQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1RUWUZEIik7CisjZW5k aWYgLyogQ0tfVFRZRkQgKi8KKworI2lmZGVmIE5FVENPTk4KKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk5FVENPTk4iKTsKKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRl ZiBUQ1BTT0NLRVQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlRDUFNPQ0tF VCIpOworI2lmZGVmIE5PVENQT1BUUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTk9UQ1BPUFRTIik7CisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisjaWZkZWYgQ0tfRE5TX1NS VgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfRE5TX1NSViIpOworI2Vu ZGlmIC8qIENLX0ROU19TUlYgKi8KKyNpZmRlZiBOT19ETlNfU1JWCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJOT19ETlNfU1JWIik7CisjZW5kaWYgLyogTk9fRE5TX1NSViAq LworI2lmZGVmIENLR0hOTEhPU1QKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IkNLR0hOTEhPU1QiKTsKKyNlbmRpZiAvKiBDS0dITkxIT1NUICovCisjaWZkZWYgTk9MSVNURU4K KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PTElTVEVOIik7CisjZW5kaWYg LyogTk9MSVNURU4gKi8KKyNpZmRlZiBTT0xfU09DS0VUCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJTT0xfU09DS0VUIik7CisjZW5kaWYgLyogU09MX1NPQ0tFVCAqLworI2lm ZGVmIFNPX09PQklOTElORQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09f T09CSU5MSU5FIik7CisjZW5kaWYgLyogU09fT09CSU5MTkUgKi8KKyNpZmRlZiBTT19ET05UUk9V VEUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNPX0RPTlRST1VURSIpOwor I2VuZGlmIC8qIFNPX0RPTlRST1VURSAqLworI2lmZGVmIFNPX0tFRVBBTElWRQorICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09fS0VFUEFMSVZFIik7CisjZW5kaWYgLyogU09f S0VFUEFMSVZFICovCisjaWZkZWYgU09fTElOR0VSCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJTT19MSU5HRVIiKTsKKyNlbmRpZiAvKiBTT19MSU5HRVIgKi8KKyNpZmRlZiBU Q1BfTk9ERUxBWQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVENQX05PREVM QVkiKTsKKyNlbmRpZiAvKiBUQ1BfTk9ERUxBWSAqLworI2lmZGVmIFNPX1NOREJVRgorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09fU05EQlVGIik7CisjZW5kaWYgLyogU09f U05EQlVGICovCisjaWZkZWYgU09fUkNWQlVGCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJTT19SQ1ZCVUYiKTsKKyNlbmRpZiAvKiBTT19SQ1ZCVUYgKi8KKyNpZmRlZiBoX2Fk ZHIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImhfYWRkciIpOworI2VuZGlm IC8qIGhfYWRkciAqLworI2lmZGVmIEhBRERSTElTVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiSEFERFJMSVNUIik7CisjZW5kaWYgLyogSEFERFJMSVNUICovCisjaWZkZWYg Q0tfU09DS1MKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1NPQ0tTIik7 CisjaWZkZWYgQ0tfU09DS1M1CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJD S19TT0NLUzUiKTsKKyNlbmRpZiAvKiBDS19TT0NLUzUgKi8KKyNpZmRlZiBDS19TT0NLU19OUwor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfU09DS1NfTlMiKTsKKyNlbmRp ZiAvKiBDS19TT0NLU19OUyAqLworI2VuZGlmIC8qIENLX1NPQ0tTICovCisjaWZkZWYgUkxPR0NP REUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlJMT0dDT0RFIik7CisjZW5k aWYgLyogUkxPR0NPREUgKi8KKyNpZmRlZiBORVRDTUQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIk5FVENNRCIpOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5PTkVU Q01ECisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT05FVENNRCIpOworI2Vu ZGlmIC8qIE5PTkVUQ01EICovCisjaWZkZWYgTkVUUFRZCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJORVRQVFkiKTsKKyNlbmRpZiAvKiBORVRQVFkgKi8KKyNpZmRlZiBDS19F TlZJUk9OTUVOVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfRU5WSVJP Tk1FTlQiKTsKKyNlbmRpZiAvKiBDS19FTlZJUk9OTUVOVCAqLworI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworI2lmZGVmIFROQ09ERQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi VE5DT0RFIik7CisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19GT1JXQVJEX1giKTsKKyNlbmRpZiAv KiBDS19GT1JXQVJEX1ggKi8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJUTl9DT01QT1JUIik7CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLwor I2lmZGVmIE1VTFRJTkVUCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNVUxU SU5FVCIpOworI2VuZGlmIC8qIE1VTFRJTkVUICovCisjaWZkZWYgREVDX1RDUElQCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJERUNfVENQSVAiKTsKKyNlbmRpZiAvKiBERUNf VENQSVAgKi8KKyNpZmRlZiBUQ1BXQVJFCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJUQ1BXQVJFIik7CisjZW5kaWYgLyogVENQV0FSRSAqLworI2lmZGVmIFVDWDUwCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVQ1g1MCIpOworI2VuZGlmIC8qIFVDWDUw ICovCisjaWZkZWYgQ01VX1RDUElQCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJDTVVfVENQSVAiKTsKKyNlbmRpZiAvKiBDTVVfVENQSVAgKi8KKyNpZmRlZiBUVExFQlVGCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJUVExFQlVGIik7CisjZW5kaWYgLyog VFRMRUJVRiAqLworI2lmZGVmIE5FVExFQlVGCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJORVRMRUJVRiIpOworI2VuZGlmIC8qIE5FVExFQlVGICovCisjaWZkZWYgSUtTX09Q VElPTgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSUtTX09QVElPTiIpOwor I2VuZGlmIC8qIElLU19PUFRJT04gKi8KKyNpZmRlZiBJS1NEQgorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiSUtTREIiKTsKKyNlbmRpZiAvKiBJS1NEQiAqLworI2lmZGVmIElL U0RDT05GCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJJS1NEQ09ORiIpOwor I2VuZGlmIC8qIElLU0RDT05GICovCisjaWZkZWYgQ0tfTE9HSU4KKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkNLX0xPR0lOIik7CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNp ZmRlZiBDS19QQU0KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1BBTSIp OworI2VuZGlmIC8qIENLX1BBTSAqLworI2lmZGVmIENLX1NIQURPVworICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfU0hBRE9XIik7CisjZW5kaWYgLyogQ0tfU0hBRE9XICov CisjaWZkZWYgQ09OR1NQRAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ09O R1NQRCIpOworI2VuZGlmIC8qIENPTkdTUEQgKi8KKyNpZmRlZiBTVU5YMjUKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNVTlgyNSIpOworI2VuZGlmIC8qIFNVTlgyNSAqLwor I2lmZGVmIElCTVgyNQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSUJNWDI1 Iik7CisjZW5kaWYgLyogSUJNWDI1ICovCisjaWZkZWYgSFBYMjUKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkhQWDI1Iik7CisjZW5kaWYgLyogSFBYMjUgKi8KKyNpZmRlZiBE RUNORVQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRFQ05FVCIpOworI2Vu ZGlmIC8qIERFQ05FVCAqLworI2lmZGVmIFNVUEVSTEFUCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJTVVBFUkxBVCIpOworI2VuZGlmIC8qIFNVUEVSTEFUICovCisjaWZkZWYg TlBJUEUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5QSVBFIik7CisjZW5k aWYgLyogTlBJUEUgKi8KKyNpZmRlZiBDS19ORVRCSU9TCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJDS19ORVRCSU9TIik7CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworI2lm ZGVmIEFUVDczMDAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFUVDczMDAi KTsKKyNlbmRpZiAvKiBBVFQ3MzAwICovCisjaWZkZWYgQVRUNjMwMAorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQVRUNjMwMCIpOworI2VuZGlmIC8qIEFUVDYzMDAgKi8KKyNp ZmRlZiBIREJVVUNQCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIREJVVUNQ Iik7CisjZW5kaWYgLyogSERCVVVDUCAqLworI2lmZGVmIFVTRVRUWUxPQ0sKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVTRVRUWUxPQ0siKTsKKyNlbmRpZiAvKiBVU0VUVFlM T0NLICovCisjaWZkZWYgVVNFX1VVX0xPQ0sKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlVTRV9VVV9MT0NLIik7CisjZW5kaWYgLyogVVNFX1VVX0xPQ0sgKi8KKyNpZmRlZiBI QVZFX0xPQ0tERVYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhBVkVfTE9D S0RFViIpOworI2VuZGlmIC8qIEhBVkVfTE9DS0RFViAqLworI2lmZGVmIEhBVkVfQkFVREJPWQor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSEFWRV9CQVVEQk9ZIik7CisjZW5k aWYgLyogSEFWRV9CQVVEQk9ZICovCisjaWZkZWYgSEFWRV9PUEVOUFRZCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJIQVZFX09QRU5QVFkiKTsKKyNlbmRpZiAvKiBIQVZFX09Q RU5QVFkgKi8KKyNpZmRlZiBUVFBUWUNNRAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiVFRQVFlDTUQiKTsKKyNlbmRpZiAvKiBUVFBUWUNNRCAqLworI2lmZGVmIE5PVVVDUAor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9VVUNQIik7CisjZW5kaWYgLyog Tk9VVUNQICovCisjaWZkZWYgTE9OR0ZOCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJMT05HRk4iKTsKKyNlbmRpZiAvKiBMT05HRk4gKi8KKyNpZmRlZiBSRENISworICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUkRDSEsiKTsKKyNlbmRpZiAvKiBSRENISyAq LworI2lmZGVmIFNFTEVDVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU0VM RUNUIik7CisjZW5kaWYgLyogU0VMRUNUICovCisjaWZkZWYgVVNMRUVQCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVU0xFRVAiKTsKKyNlbmRpZiAvKiBVU0xFRVAgKi8KKyNp ZmRlZiBOQVAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5BUCIpOworI2Vu ZGlmIC8qIE5BUCAqLworI2lmZGVmIE5BUEhBQ0sKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIk5BUEhBQ0siKTsKKyNlbmRpZiAvKiBOQVBIQUNLICovCisjaWZkZWYgQ0tfUE9M TAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfUE9MTCIpOworI2VuZGlm IC8qIENLX1BPTEwgKi8KKyNpZmRlZiBOT0lFWFRFTgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTk9JRVhURU4iKTsKKyNlbmRpZiAvKiBOT0lFWFRFTiAqLworI2lmZGVmIEVY Q0VMQU4KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkVYQ0VMQU4iKTsKKyNl bmRpZiAvKiBFWENFTEFOICovCisjaWZkZWYgSU5URVJMQU4KKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIklOVEVSTEFOIik7CisjZW5kaWYgLyogSU5URVJMQU4gKi8KKyNpZmRl ZiBOT0ZJTEVICisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT0ZJTEVIIik7 CisjZW5kaWYgLyogTk9GSUxFSCAqLworI2lmZGVmIE5PU1lTSU9DVExICisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1NZU0lPQ1RMSCIpOworI2VuZGlmIC8qIE5PU1lTSU9D VExIICovCisjaWZkZWYgRENMUE9QRU4KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkRDTFBPUEVOIik7CisjZW5kaWYgLyogRENMUE9QRU4gKi8KKyNpZmRlZiBOT1NFVEJVRgor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9TRVRCVUYiKTsKKyNlbmRpZiAv KiBOT1NFVEJVRiAqLworI2lmZGVmIE5PWEZFUgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiTk9YRkVSIik7CisjZW5kaWYgLyogTk9YRkVSICovCisjaWZkZWYgTk9DVVJTRVMK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PQ1VSU0VTIik7CisjZW5kaWYg LyogTk9DVVJTRVMgKi8KKyNpZmRlZiBOT1NFUlZFUgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTk9TRVJWRVIiKTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworI2lmZGVmIE5P UEFUVEVSTlMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PUEFUVEVSTlMi KTsKKyNlbHNlCisjaWZkZWYgUEFUVEVSTlMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlBBVFRFUk5TIik7CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyNlbmRpZiAvKiBOT1BB VFRFUk5TICovCisjaWZkZWYgTk9DS0VYRUMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIk5PQ0tFWEVDIik7CisjZWxzZQorI2lmZGVmIENLRVhFQworICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiQ0tFWEVDIik7CisjZW5kaWYgLyogQ0tFWEVDICovCisjZW5k aWYgLyogTk9DS0VYRUMgKi8KKyNpZmRlZiBOT0FVVE9ETAorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiTk9BVVRPREwiKTsKKyNlbmRpZiAvKiBOT0FVVE9ETCAqLworI2lmZGVm IE5PTVNFTkQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PTVNFTkQiKTsK KyNlbmRpZiAvKiBOT01TRU5EICovCisjaWZkZWYgTk9GRFpFUk8KKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIk5PRkRaRVJPIik7CisjZW5kaWYgLyogTk9GRFpFUk8gKi8KKyNp ZmRlZiBOT1BPUEVOCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJOT1BPUEVO Iik7CisjZW5kaWYgLyogTk9QT1BFTiAqLworI2lmZGVmIE5PUEFSVElBTAorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9QQVJUSUFMIik7CisjZW5kaWYgLyogTk9QQVJUSUFM ICovCisjaWZkZWYgTk9LVkVSQlMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks Ik5PS1ZFUkJTIik7CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyNpZmRlZiBOT1NFVFJFVQorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9TRVRSRVUiKTsKKyNlbmRpZiAvKiBO T1NFVFJFVSAqLworI2lmZGVmIExDS0RJUgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiTENLRElSIik7CisjZW5kaWYgLyogTENLRElSICovCisjaWZkZWYgQUNVQ05UUkwKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFDVUNOVFJMIik7CisjZW5kaWYgLyog QUNVQ05UUkwgKi8KKyNpZmRlZiBCU0Q0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJCU0Q0Iik7CisjZW5kaWYgLyogQlNENCAqLworI2lmZGVmIEJTRDQ0CisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJCU0Q0NCIpOworI2VuZGlmIC8qIEJTRDQ0ICovCisj aWZkZWYgQlNENDEKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkJTRDQxIik7 CisjZW5kaWYgLyogQlNENDEgKi8KKyNpZmRlZiBCU0Q0MworICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiQlNENDMiKTsKKyNlbmRpZiAvKiBCU0Q0MyAqLworI2lmZGVmIEJTRDI5 CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJCU0QyOSIpOworI2VuZGlmIC8q IEJTRDI5ICovCisjaWZkZWYgQlNESQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiQlNESSIpOworI2VuZGlmIC8qIEJTREkgKi8KKyNpZmRlZiBfX2JzZGlfXworICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19ic2RpX18iKTsKKyNlbmRpZiAvKiBfX2JzZGlf XyAqLworI2lmZGVmIF9fTmV0QlNEX18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIl9fTmV0QlNEX18iKTsKKyNlbmRpZiAvKiBfX05ldEJTRF9fICovCisjaWZkZWYgX19PcGVu QlNEX18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fT3BlbkJTRF9fIik7 CisjZW5kaWYgLyogX19PcGVuQlNEX18gKi8KKyNpZmRlZiBfX0ZyZWVCU0RfXworICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19GcmVlQlNEX18iKTsKKyNlbmRpZiAvKiBfX0Zy ZWVCU0RfXyAqLworI2lmZGVmIEZSRUVCU0Q0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJGUkVFQlNENCIpOworI2VuZGlmIC8qIEZSRUVCU0Q0ICovCisjaWZkZWYgRlJFRUJT RDgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkZSRUVCU0Q4Iik7CisjZW5k aWYgLyogRlJFRUJTRDggKi8KKyNpZmRlZiBGUkVFQlNEOQorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiRlJFRUJTRDkiKTsKKyNlbmRpZiAvKiBGUkVFQlNEOSAqLworI2lmZGVm IF9fbGludXhfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19saW51eF9f Iik7CisjZW5kaWYgLyogX19saW51eF9fICovCisjaWZkZWYgTElOVVhfSElfU1BECisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJMSU5VWF9ISV9TUEQiKTsKKyNlbmRpZiAvKiBM SU5VWF9ISV9TUEQgKi8KKyNpZmRlZiBMWU5YT1MKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIkxZTlhPUyIpOworI2VuZGlmIC8qIExZTlhPUyAqLworI2lmZGVmIFY3CisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJWNyIpOworI2VuZGlmIC8qIFY3ICovCisj aWZkZWYgQUlYMzcwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBSVgzNzAi KTsKKyNlbmRpZiAvKiBBSVgzNzAgKi8KKyNpZmRlZiBSVEFJWAorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiUlRBSVgiKTsKKyNlbmRpZiAvKiBSVEFJWCAqLworI2lmZGVmIEhQ VVgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhQVVgiKTsKKyNlbmRpZiAv KiBIUFVYICovCisjaWZkZWYgSFBVWDkKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkhQVVg5Iik7CisjZW5kaWYgLyogSFBVWDkgKi8KKyNpZmRlZiBIUFVYMTAKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhQVVgxMCIpOworI2VuZGlmIC8qIEhQVVgxMCAq LworI2lmZGVmIEhQVVgxMDAwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJI UFVYMTAwMCIpOworI2VuZGlmIC8qIEhQVVgxMDAwICovCisjaWZkZWYgSFBVWDExMDAKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkhQVVgxMTAwIik7CisjZW5kaWYgLyogSFBV WDExMDAgKi8KKyNpZmRlZiBIUFVYUFJFNjUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkhQVVhQUkU2NSIpOworI2VuZGlmIC8qIEhQVVhQUkU2NSAqLworI2lmZGVmIERHVVgK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkRHVVgiKTsKKyNlbmRpZiAvKiBE R1VYICovCisjaWZkZWYgREdVWDQzMAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiREdVWDQzMCIpOworI2VuZGlmIC8qIERHVVg0MzAgKi8KKyNpZmRlZiBER1VYNTQwCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJER1VYNTQwIik7CisjZW5kaWYgLyogREdV WDU0MCAqLworI2lmZGVmIERHVVg1NDMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkRHVVg1NDMiKTsKKyNlbmRpZiAvKiBER1VYNTQzICovCisjaWZkZWYgREdVWDU0NDEwCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJER1VYNTQ0MTAiKTsKKyNlbmRpZiAv KiBER1VYNTQ0MTAgKi8KKyNpZmRlZiBER1VYNTQ0MTEKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIkRHVVg1NDQxMSIpOworI2VuZGlmIC8qIERHVVg1NDQxMSAqLworI2lmZGVm IHNvbnlfbmV3cworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic29ueV9uZXdz Iik7CisjZW5kaWYgLyogc29ueV9uZXdzICovCisjaWZkZWYgQ0lFCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJDSUUiKTsKKyNlbmRpZiAvKiBDSUUgKi8KKyNpZmRlZiBYRU5J WAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiWEVOSVgiKTsKKyNlbmRpZiAv KiBYRU5JWCAqLworI2lmZGVmIFNDT19YRU5JWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiU0NPX1hFTklYIik7CisjZW5kaWYgLyogU0NPX1hFTklYICovCisjaWZkZWYgSVNJ SUkKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIklTSUlJIik7CisjZW5kaWYg LyogSVNJSUkgKi8KKyNpZmRlZiBJMzg2SVgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkkzODZJWCIpOworI2VuZGlmIC8qIEkzODZJWCAqLworI2lmZGVmIFJUVQorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUlRVIik7CisjZW5kaWYgLyogUlRVICovCisj aWZkZWYgUFJPVlgxCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJQUk9WWDEi KTsKKyNlbmRpZiAvKiBQUk9WWDEgKi8KKyNpZmRlZiBQWVJBTUlECisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJQWVJBTUlEIik7CisjZW5kaWYgLyogUFlSQU1JRCAqLworI2lm ZGVmIFRPV0VSMQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVE9XRVIxIik7 CisjZW5kaWYgLyogVE9XRVIxICovCisjaWZkZWYgVVRFSworICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiVVRFSyIpOworI2VuZGlmIC8qIFVURUsgKi8KKyNpZmRlZiBaSUxPRwor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiWklMT0ciKTsKKyNlbmRpZiAvKiBa SUxPRyAqLworI2lmZGVmIFRSUzE2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJUUlMxNiIpOworI2VuZGlmIC8qIFRSUzE2ICovCisjaWZkZWYgTUlOSVgKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1JTklYIik7CisjZW5kaWYgLyogTUlOSVggKi8KKyNp ZmRlZiBNSU5JWDIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1JTklYMiIp OworI2VuZGlmIC8qIE1JTklYMiAqLworI2lmZGVmIE1JTklYMworICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiTUlOSVgzIik7CisjZW5kaWYgLyogTUlOSVgzICovCisjaWZkZWYg TUlOSVgzMTUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1JTklYMzE1Iik7 CisjZW5kaWYgLyogTUlOSVgzMTUgKi8KKyNpZmRlZiBDNzAKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIkM3MCIpOworI2VuZGlmIC8qIEM3MCAqLworI2lmZGVmIEFJWFBTMgor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQUlYUFMyIik7CisjZW5kaWYgLyog QUlYUFMyICovCisjaWZkZWYgQUlYUlMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkFJWFJTIik7CisjZW5kaWYgLyogQUlYUlMgKi8KKyNpZmRlZiBVVFNWCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVVFNWIik7CisjZW5kaWYgLyogVVRTViAqLworI2lm ZGVmIEFUVFNWCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBVFRTViIpOwor I2VuZGlmIC8qIEFUVFNWICovCisjaWZkZWYgU1ZSMworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiU1ZSMyIpOworI2VuZGlmIC8qIFNWUjMgKi8KKyNpZmRlZiBTVlI0CisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTVlI0Iik7CisjZW5kaWYgLyogU1ZSNCAq LworI2lmZGVmIERFTExfU1ZSNAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi REVMTF9TVlI0Iik7CisjZW5kaWYgLyogREVMTF9TVlI0ICovCisjaWZkZWYgSUNMX1NWUjQKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIklDTF9TVlI0Iik7CisjZW5kaWYgLyog SUNMX1NWUjQgKi8KKyNpZmRlZiBPU0YKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIk9TRiIpOworI2VuZGlmIC8qIE9TRiAqLworI2lmZGVmIE9TRjEKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIk9TRjEiKTsKKyNlbmRpZiAvKiBPU0YxICovCisjaWZkZWYg X19PU0YKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fT1NGIik7CisjZW5k aWYgLyogX19PU0YgKi8KKyNpZmRlZiBfX09TRl9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJfX09TRl9fIik7CisjZW5kaWYgLyogX19PU0ZfXyAqLworI2lmZGVmIF9fb3Nm X18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fb3NmX18iKTsKKyNlbmRp ZiAvKiBfX29zZl9fICovCisjaWZkZWYgX19PU0YxCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJfX09TRjEiKTsKKyNlbmRpZiAvKiBfX09TRjEgKi8KKyNpZmRlZiBfX09TRjFf XworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19PU0YxX18iKTsKKyNlbmRp ZiAvKiBfX09TRjFfXyAqLworI2lmZGVmIFBUWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiUFRYIik7CisjZW5kaWYgLyogUFRYICovCisjaWZkZWYgUE9TSVgKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlBPU0lYIik7CisjZW5kaWYgLyogUE9TSVggKi8K KyNpZmRlZiBCU0Q0NE9SUE9TSVgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSks IkJTRDQ0T1JQT1NJWCIpOworI2VuZGlmIC8qIEJTRDQ0T1JQT1NJWCAqLworI2lmZGVmIFNWT1JQ T1NJWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1ZPUlBPU0lYIik7Cisj ZW5kaWYgLyogU1ZPUlBPU0lYICovCisjaWZkZWYgU1ZSNE9SUE9TSVgKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlNWUjRPUlBPU0lYIik7CisjZW5kaWYgLyogU1ZSNE9SUE9T SVggKi8KKyNpZmRlZiBPUzJPUlZNUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiT1MyT1JWTVMiKTsKKyNlbmRpZiAvKiBPUzJPUlZNUyAqLworI2lmZGVmIE9TMk9SVU5JWAor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiT1MyT1JVTklYIik7CisjZW5kaWYg LyogT1MyT1JVTklYICovCisjaWZkZWYgVk1TT1JVTklYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJWTVNPUlVOSVgiKTsKKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKyNpZmRl ZiBWTVM2NEJJVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVk1TNjRCSVQi KTsJLyogVk1TIG9uIEFscGhhIG9yIElBNjQgKi8KKyNlbmRpZiAvKiBWTVM2NEJJVCAqLworI2lm ZGVmIFZNU0k2NAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiVk1TSTY0Iik7 IC8qIFZNUyBvbiBJQTY0ICovCisjZW5kaWYgLyogVk1TSTY0ICovCisjaWZkZWYgX1BPU0lYX1NP VVJDRQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX1BPU0lYX1NPVVJDRSIp OworI2VuZGlmIC8qIF9QT1NJWF9TT1VSQ0UgKi8KKyNpZmRlZiBfWE9QRU5fU09VUkNFCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfWE9QRU5fU09VUkNFIik7CisjZW5kaWYK KyNpZmRlZiBfQUxMX1NPVVJDRQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X0FMTF9TT1VSQ0UiKTsKKyNlbmRpZgorI2lmZGVmIF9TVklEMworICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiX1NWSUQzIik7CisjZW5kaWYgLyogX1NWSUQzICovCisjaWZkZWYg UGxhbjkKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlBsYW45Iik7CisjZW5k aWYgLyogUGxhbjkgKi8KKyNpZmRlZiBTT0xBUklTCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJTT0xBUklTIik7CisjaWZkZWYgU09MQVJJUzI0CisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJTT0xBUklTMjQiKTsKKyNlbmRpZiAvKiBTT0xBUklTMjQgKi8K KyNpZmRlZiBTT0xBUklTMjUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNP TEFSSVMyNSIpOworI2VuZGlmIC8qIFNPTEFSSVMyNSAqLworI2lmZGVmIFNPTEFSSVMyNgorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09MQVJJUzI2Iik7CisjZW5kaWYgLyog U09MQVJJUzI2ICovCisjaWZkZWYgU09MQVJJUzcKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIlNPTEFSSVM3Iik7CisjZW5kaWYgLyogU09MQVJJUzcgKi8KKyNpZmRlZiBTT0xB UklTOAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU09MQVJJUzgiKTsKKyNl bmRpZiAvKiBTT0xBUklTOCAqLworI2lmZGVmIFNPTEFSSVM5CisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJTT0xBUklTOSIpOworI2VuZGlmIC8qIFNPTEFSSVM5ICovCisjaWZk ZWYgU09MQVJJUzEwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJTT0xBUklT MTAiKTsKKyNlbmRpZiAvKiBTT0xBUklTMTAgKi8KKyNlbmRpZiAvKiBTT0xBUklTICovCisKKyNp ZmRlZiBTVU5PUzQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNVTk9TNCIp OworI2VuZGlmIC8qIFNVTk9TNCAqLworI2lmZGVmIFNVTjRTNQorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiU1VONFM1Iik7CisjZW5kaWYgLyogU1VONFM1ICovCisjaWZkZWYg SVJJWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiSVJJWCIpOworI2VuZGlm IC8qIElSSVggKi8KKyNpZmRlZiBFTkNPUkUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIkVOQ09SRSIpOworI2VuZGlmIC8qIEVOQ09SRSAqLworI2lmZGVmIHVsdHJpeAorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwidWx0cml4Iik7CisjZW5kaWYKKyNpZmRl ZiBzeGFFNTAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksInN4YUU1MCIpOwor I2VuZGlmCisjaWZkZWYgbWlwcworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi bWlwcyIpOworI2VuZGlmCisjaWZkZWYgTUlQUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiTUlQUyIpOworI2VuZGlmCisjaWZkZWYgdmF4CisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJ2YXgiKTsKKyNlbmRpZgorI2lmZGVmIFZBWAorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiVkFYIik7CisjZW5kaWYKKyNpZmRlZiBhbHBoYQorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiYWxwaGEiKTsKKyNlbmRpZgorI2lmZGVm IEFMUEhBCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJBTFBIQSIpOworI2Vu ZGlmCisjaWZkZWYgX19BTFBIQQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19BTFBIQSIpOworI2VuZGlmCisjaWZkZWYgX19hbHBoYQorICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSwiX19hbHBoYSIpOworI2VuZGlmCisjaWZkZWYgX19BWFAKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fQVhQIik7CisjZW5kaWYKKyNpZmRlZiBBWFAK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkFYUCIpOworI2VuZGlmCisjaWZk ZWYgYXhwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJheHAiKTsKKyNlbmRp ZgorI2lmZGVmIF9fQUxQSEFfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19BTFBIQV9fIik7CisjZW5kaWYKKyNpZmRlZiBfX2FscGhhX18KKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIl9fYWxwaGFfXyIpOworI2VuZGlmCisjaWZkZWYgc3VuCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJzdW4iKTsKKyNlbmRpZgorI2lmZGVmIHN1 bjMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksInN1bjMiKTsKKyNlbmRpZgor I2lmZGVmIHN1bjM4NgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic3VuMzg2 Iik7CisjZW5kaWYKKyNpZmRlZiBfU1VOCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJfU1VOIik7CisjZW5kaWYKKyNpZmRlZiBzdW40CisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJzdW40Iik7CisjZW5kaWYKKyNpZmRlZiBzcGFyYworICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwic3BhcmMiKTsKKyNlbmRpZgorI2lmZGVmIF9DUkFZCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfQ1JBWSIpOworI2VuZGlmIC8qIF9D UkFZICovCisjaWZkZWYgTkVYVDMzCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJORVhUMzMiKTsKKyNlbmRpZgorI2lmZGVmIE5FWFQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIk5FWFQiKTsKKyNlbmRpZgorI2lmZGVmIE5lWFQKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIk5lWFQiKTsKKyNlbmRpZgorI2lmZGVmIE1BQ0gKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1BQ0giKTsKKyNlbmRpZgorCisjaWZkZWYg TUFDT1NYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNQUNPU1giKTsKKyNl bmRpZgorI2lmZGVmIE1BQ09TWDEwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJNQUNPU1gxMCIpOworI2VuZGlmCisjaWZkZWYgTUFDT1NYMTAzCisgICAgbWFrZXN0cigmKG9w dGxpc3Rbbm9wdGxpc3QrK10pLCJNQUNPU1gxMGUiKTsKKyNlbmRpZgorI2lmZGVmIENPTU1FTlQK Ky8qIG5vdCB1c2VkICovCisjaWZkZWYgTUFDT1NYMTAzCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJNQUNPU1gxMDMiKTsKKyNlbmRpZgorI2VuZGlmCS8qIENPTU1FTlQgKi8K KworI2lmZGVmIHNnaQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic2dpIik7 CisjZW5kaWYKKyNpZmRlZiBNX1NZUzUKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIk1fU1lTNSIpOworI2VuZGlmCisjaWZkZWYgX19TWVNURU1fRklWRQorICAgIG1ha2VzdHIo JihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19TWVNURU1fRklWRSIpOworI2VuZGlmCisjaWZkZWYg c3lzVgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwic3lzViIpOworI2VuZGlm CisjaWZkZWYgTV9YRU5JWCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0NPIFhlbml4IFYg YW5kIFVOSVgvMzg2ICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNX1hF TklYIik7CisjZW5kaWYKKyNpZmRlZiBNX1VOSVggICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTQ08gVU5JWCAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV9VTklY Iik7CisjZW5kaWYKKyNpZmRlZiBfTV9VTklYICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBT Q08gVU5JWCAzLjJ2NCA9IE9EVCAyLjAgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIl9NX1VOSVgiKTsKKyNlbmRpZgorI2lmZGVmIENLX1NDT1Y1CisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19TQ09WNSIpOworI2VuZGlmCisjaWZkZWYgU0NPX09T UjUwNAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU0NPX09TUjUwNCIpOwor I2VuZGlmCisjaWZkZWYgTV9JQTY0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10p LCJNX0lBNjQiKTsKKyNlbmRpZgorI2lmZGVmIF9NX0lBNjQKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9NX0lBNjQiKTsKKyNlbmRpZgorI2lmZGVmIGlhNjQKKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImlhNjQiKTsKKyNlbmRpZgorI2lmZGVmIF9pYTY0 CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfaWE2NCIpOworI2VuZGlmCisj aWZkZWYgX2lhNjRfCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfaWE2NF8i KTsKKyNlbmRpZgorI2lmZGVmIF9faWE2NAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiX19pYTY0Iik7CisjZW5kaWYKKyNpZmRlZiBNX0k2ODYKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIk1fSTY4NiIpOworI2VuZGlmCisjaWZkZWYgX01fSTY4NgorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX01fSTY4NiIpOworI2VuZGlmCisjaWZk ZWYgaTY4NgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaTY4NiIpOworI2Vu ZGlmCisjaWZkZWYgTV9JNTg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJN X0k1ODYiKTsKKyNlbmRpZgorI2lmZGVmIF9NX0k1ODYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIl9NX0k1ODYiKTsKKyNlbmRpZgorI2lmZGVmIGk1ODYKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksImk1ODYiKTsKKyNlbmRpZgorI2lmZGVmIE1fSTQ4Ngor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTV9JNDg2Iik7CisjZW5kaWYKKyNp ZmRlZiBfTV9JNDg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfTV9JNDg2 Iik7CisjZW5kaWYKKyNpZmRlZiBpNDg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJpNDg2Iik7CisjZW5kaWYKKyNpZmRlZiBNX0kzODYKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIk1fSTM4NiIpOworI2VuZGlmCisjaWZkZWYgX01fSTM4NgorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX01fSTM4NiIpOworI2VuZGlmCisjaWZkZWYg aTM4NgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiaTM4NiIpOworI2VuZGlm CisjaWZkZWYgX19pMzg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2kz ODYiKTsKKyNlbmRpZgorI2lmZGVmIF9feDg2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJfX3g4NiIpOworI2VuZGlmCisjaWZkZWYgX19hbWQ2NAorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiX19hbWQ2NCIpOworI2VuZGlmCisjaWZkZWYgX0lMUDMyCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfSUxQMzIiKTsKKyNlbmRpZgorI2lm ZGVmIF9JTFA2NAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0lMUDY0Iik7 CisjZW5kaWYKKyNpZmRlZiBfTFAzMgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiX0xQMzIiKTsKKyNlbmRpZgorI2lmZGVmIF9MUDY0CisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfTFA2NCIpOworI2VuZGlmCisjaWZkZWYgX19MUDMyX18KKyAgICBtYWtl c3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fTFAzMl9fIik7CisjZW5kaWYKKyNpZmRlZiBf X0xQNjRfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19MUDY0X18iKTsK KyNlbmRpZgorI2lmZGVmIF9YR1A0XzIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIl9YR1A0XzIiKTsKKyNlbmRpZgorI2lmZGVmIF9fcHBjX18KKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIl9fcHBjX18iKTsKKyNlbmRpZgorI2lmZGVmIF9fcHBjMzJfXwor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19wcGMzMl9fIik7CisjZW5kaWYK KyNpZmRlZiBfX3BwYzY0X18KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9f cHBjNjRfXyIpOworI2VuZGlmCisjaWZkZWYgQ0tfNjRCSVQKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIkNLXzY0QklUIik7CisjZW5kaWYKKyNpZmRlZiBpMjg2CisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJpMjg2Iik7CisjZW5kaWYKKyNpZmRlZiBNX0ky ODYKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk1fSTI4NiIpOworI2VuZGlm CisjaWZkZWYgX19zcGFyYworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19z cGFyYyIpOworI2VuZGlmCisjaWZkZWYgX19zcGFyY3Y4CisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJfX3NwYXJjdjgiKTsKKyNlbmRpZgorI2lmZGVmIF9fc3BhcmN2OQorICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19zcGFyY3Y5Iik7CisjZW5kaWYKKyNp ZmRlZiBtYzY4MDAwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJtYzY4MDAw Iik7CisjZW5kaWYKKyNpZmRlZiBtYzY4MDEwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJtYzY4MDEwIik7CisjZW5kaWYKKyNpZmRlZiBtYzY4MDIwCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJtYzY4MDIwIik7CisjZW5kaWYKKyNpZmRlZiBtYzY4MDMw CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJtYzY4MDMwIik7CisjZW5kaWYK KyNpZmRlZiBtYzY4MDQwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJtYzY4 MDQwIik7CisjZW5kaWYKKyNpZmRlZiBNXzY4MDAwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJNXzY4MDAwIik7CisjZW5kaWYKKyNpZmRlZiBNXzY4MDEwCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNXzY4MDEwIik7CisjZW5kaWYKKyNpZmRlZiBNXzY4 MDIwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNXzY4MDIwIik7CisjZW5k aWYKKyNpZmRlZiBNXzY4MDMwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJN XzY4MDMwIik7CisjZW5kaWYKKyNpZmRlZiBNXzY4MDQwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJNXzY4MDQwIik7CisjZW5kaWYKKyNpZmRlZiBtNjhrCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJtNjhrIik7CisjZW5kaWYKKyNpZmRlZiBtODhrCisg ICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJtODhrIik7CisjZW5kaWYKKyNpZmRl ZiBwZHAxMQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwicGRwMTEiKTsKKyNl bmRpZgorI2lmZGVmIGlBUFgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksImlB UFgiKTsKKyNlbmRpZgorI2lmZGVmIGhwdXgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksImhwdXgiKTsKKyNlbmRpZgorI2lmZGVmIF9faHB1eAorICAgIG1ha2VzdHIoJihvcHRs aXN0W25vcHRsaXN0KytdKSwiX19ocHV4Iik7CisjZW5kaWYKKyNpZmRlZiBfX2hwOTAwMHM4MDAK KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9faHA5MDAwczgwMCIpOworI2Vu ZGlmCisjaWZkZWYgX19ocDkwMDBzNzAwCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJfX2hwOTAwMHM3MDAiKTsKKyNlbmRpZgorI2lmZGVmIF9faHA5MDAwczUwMAorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19ocDkwMDBzNTAwIik7CisjZW5kaWYKKyNp ZmRlZiBfX2hwOTAwMHMzMDAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9f aHA5MDAwczMwMCIpOworI2VuZGlmCisjaWZkZWYgX19ocDkwMDBzMjAwCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX2hwOTAwMHMyMDAiKTsKKyNlbmRpZgorI2lmZGVmIEFJ WAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQUlYIik7CisjZW5kaWYKKyNp ZmRlZiBfQUlYRlMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9BSVhGUyIp OworI2VuZGlmCisjaWZkZWYgdTM3MAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwidTM3MCIpOworI2VuZGlmCisjaWZkZWYgdTNiCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJ1M2IiKTsKKyNlbmRpZgorI2lmZGVmIHUzYjIKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksInUzYjIiKTsKKyNlbmRpZgorI2lmZGVmIG11bHRpbWF4CisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJtdWx0aW1heCIpOworI2VuZGlmCisjaWZk ZWYgYmFsYW5jZQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiYmFsYW5jZSIp OworI2VuZGlmCisjaWZkZWYgaWJtcnQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksImlibXJ0Iik7CisjZW5kaWYKKyNpZmRlZiBfSUJNUlQKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIl9JQk1SVCIpOworI2VuZGlmCisjaWZkZWYgaWJtcnM2MDAwCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJpYm1yczYwMDAiKTsKKyNlbmRpZgorI2lm ZGVmIF9BSVgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9BSVgiKTsKKyNl bmRpZiAvKiBfQUlYICovCisjaWZkZWYgX0lCTVIyCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJfSUJNUjIiKTsKKyNlbmRpZgorI2lmZGVmIFVOSVhXQVJFCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJVTklYV0FSRSIpOworI2VuZGlmCisjaWZkZWYgUU5Y CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJRTlgiKTsKKyNpZmRlZiBfX1FO WF9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1FOWF9fIik7CisjaWZk ZWYgX18xNkJJVF9fCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfXzE2QklU X18iKTsKKyNlbmRpZgorI2lmZGVmIENLX1FOWDE2CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9w dGxpc3QrK10pLCJDS19RTlgxNiIpOworI2VuZGlmCisjaWZkZWYgX18zMkJJVF9fCisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfXzMyQklUX18iKTsKKyNlbmRpZgorI2lmZGVm IENLX1FOWDMyCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19RTlgzMiIp OworI2VuZGlmCisjZW5kaWYgLyogX19RTlhfXyAqLworI2VuZGlmIC8qIFFOWCAqLworCisjaWZk ZWYgUU5YNgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiUU5YNiIpOworI2Vu ZGlmIC8qIFFOWDYgKi8KKworI2lmZGVmIE5FVVRSSU5PCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJORVVUUklOTyIpOworI2VuZGlmIC8qIE5FVVRSSU5PICovCisKKyNpZmRl ZiBfX1NUUklDVF9CU0RfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19T VFJJQ1RfQlNEX18iKTsKKyNlbmRpZgorI2lmZGVmIF9fU1RSSUNUX0FOU0lfXworICAgIG1ha2Vz dHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX19TVFJJQ1RfQU5TSV9fIik7CisjZW5kaWYKKyNp ZmRlZiBfQU5TSV9DX1NPVVJDRQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X0FOU0lfQ19TT1VSQ0UiKTsKKyNlbmRpZgorI2lmZGVmIF9fU1REQ19fCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX1NURENfXyIpOworI2VuZGlmCisjaWZkZWYgY3BsdXNw bHVzCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJjcGx1c3BsdXMiKTsKKyNl bmRpZgorI2lmZGVmIF9fREVDQworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi X19ERUNDIik7CisjaWZkZWYgX19ERUNDX1ZFUgorICAgIHNwcmludGYobGluZSwiX19ERUNDX1ZF Uj0lZCIsX19ERUNDX1ZFUik7IC8qIFNBRkUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksbGluZSk7CisjZW5kaWYgLyogX19ERUNDX1ZFUiAqLworI2VuZGlmIC8qIF9fREVD QyAqLworI2lmZGVmIF9fQ1JUTF9WRVIKKyAgICBzcHJpbnRmKGxpbmUsIl9fQ1JUTF9WRVI9JWQi LF9fQ1JUTF9WRVIpOyAvKiBTQUZFICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLGxpbmUpOworI2VuZGlmIC8qIF9fQ1JUTF9WRVIgKi8KKyNpZmRlZiBfX0dOVUNfXyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBnY2MgaW4gYW5zaSBtb2RlICovCisgICAgbWFrZXN0cigm KG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0dOVUNfXyIpOworI2VuZGlmCisjaWZkZWYgR05VQyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2NjIGluIHRyYWRpdGlvbmFsIG1vZGUgKi8K KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkdOVUMiKTsKKyNlbmRpZgorI2lm ZGVmIF9fRUdDU19fICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVnY3MgaW4gYW5zaSBtb2Rl ICovCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0VHQ1NfXyIpOworI2Vu ZGlmCisjaWZkZWYgX19lZ2NzX18gICAgICAgICAgICAgICAgICAgICAgICAgLyogZWdjcyBpbiBh bnNpIG1vZGUgKi8KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fZWdjc19f Iik7CisjZW5kaWYKKyNpZmRlZiBfX1dBVENPTUNfXworICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiX19XQVRDT01DX18iKTsKKyNlbmRpZgorI2lmZGVmIENLX0FOU0lDCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19BTlNJQyIpOworI2VuZGlmCisjaWZk ZWYgQ0tfQU5TSUxJQlMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0FO U0lMSUJTIik7CisjZW5kaWYKKyNpZmRlZiBDS0NPTklOVEI0Q0IKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkNLQ09OSU5UQjRDQiIpOworI2VuZGlmIC8qIENLQ09OSU5UQjRD QiAqLworI2lmZGVmIE5PVEVSTUNBUAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiTk9URVJNQ0FQIik7CisjZW5kaWYgLyogTk9URVJNQ0FQICovCisjaWZkZWYgX19HTElCQ19f CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJfX0dMSUJDX18iKTsKKyNlbmRp ZgorI2lmZGVmIF9TQ19KT0JfQ09OVFJPTAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiX1NDX0pPQl9DT05UUk9MIik7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfSk9CX0NPTlRS T0wKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9QT1NJWF9KT0JfQ09OVFJP TCIpOworI2VuZGlmCisjaWZkZWYgU0lHX0kKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIlNJR19JIik7CisjZW5kaWYgLyogU0lHX0kgKi8KKyNpZmRlZiBTSUdfVgorICAgIG1h a2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU0lHX1YiKTsKKyNlbmRpZiAvKiBTSUdfViAq LworI2lmZGVmIENLX1BPU0lYX1NJRworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiQ0tfUE9TSVhfU0lHIik7CisjZW5kaWYKKyNpZmRlZiBTVlIzSkMKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIlNWUjNKQyIpOworI2VuZGlmCisjaWZkZWYgXzM4NkJTRAor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiXzM4NkJTRCIpOworI2VuZGlmCisj aWZkZWYgX0JTRAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiX0JTRCIpOwor I2VuZGlmCisjaWZkZWYgVVNFX01FTUNQWQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0 KytdKSwiVVNFX01FTUNQWSIpOworI2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KKyNpZmRlZiBVU0Vf TFNUQVQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlVTRV9MU1RBVCIpOwor I2VuZGlmIC8qIFVTRV9MU1RBVCAqLworI2lmZGVmIFRFUk1JT1gKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIlRFUk1JT1giKTsKKyNlbmRpZiAvKiBURVJNSU9YICovCisjaWZk ZWYgU1RFUk1JT1gKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlNURVJNSU9Y Iik7CisjZW5kaWYgLyogU1RFUk1JT1ggKi8KKyNpZmRlZiBDS19DVVJTRVMKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0NVUlNFUyIpOworI2VuZGlmIC8qIENLX0NVUlNF UyAqLworI2lmZGVmIENLX05FV1RFUk0KKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkNLX05FV1RFUk0iKTsKKyNlbmRpZiAvKiBDS19ORVdURVJNICovCisjaWZkZWYgQ0tfV1JF RlJFU0gKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1dSRUZSRVNIIik7 CisjZW5kaWYgLyogQ0tfV1JFRlJFU0ggKi8KKyNpZmRlZiBDS19QQ1RfQkFSCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19QQ1RfQkFSIik7CisjZW5kaWYgLyogQ0tfUENU X0JBUiAqLworI2lmZGVmIENLX0RUUkNECisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJDS19EVFJDRCIpOworI2VuZGlmIC8qIENLX0RUUkNEICovCisjaWZkZWYgQ0tfRFRSQ1RT CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19EVFJDVFMiKTsKKyNlbmRp ZiAvKiBDS19EVFJDVFMgKi8KKyNpZmRlZiBDS19SVFNDVFMKKyAgICBtYWtlc3RyKCYob3B0bGlz dFtub3B0bGlzdCsrXSksIkNLX1JUU0NUUyIpOworI2VuZGlmIC8qIENLX1JUU0NUUyAqLworI2lm ZGVmIFBPU0lYX0NSVFNDVFMKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlBP U0lYX0NSVFNDVFMiKTsKKyNlbmRpZiAvKiBQT1NJWF9DUlRTQ1RTICovCisjaWZkZWYgRklYQ1JU U0NUUworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiRklYQ1JUU0NUUyIpOwor I2VuZGlmIC8qIEZJWENSVFNDVFMgKi8KKyNpZmRlZiBIV1BBUklUWQorICAgIG1ha2VzdHIoJihv cHRsaXN0W25vcHRsaXN0KytdKSwiSFdQQVJJVFkiKTsKKyNlbmRpZiAvKiBIV1BBUklUWSAqLwor I2lmZGVmIENLX1NZU0lOSQorI2lmZGVmIENLX0lOSV9BCisgICAgbWFrZXN0cigmKG9wdGxpc3Rb bm9wdGxpc3QrK10pLCJDS19JTklfQSIpOworICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJD S19TWVNJTkk9XCIiLENLX1NZU0lOSSwiXCIiLE5VTEwpOworICAgIG1ha2VzdHIoJihvcHRsaXN0 W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbHNlCisjaWZkZWYgQ0tfSU5JX0IKKyAgICBtYWtlc3Ry KCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX0lOSV9CIik7CisgICAgY2ttYWttc2cobGluZSxM SU5CVUZTSVosIkNLX1NZU0lOST1cIiIsQ0tfU1lTSU5JLCJcIiIsTlVMTCk7CisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLGxpbmUpOworI2Vsc2UKKyAgICBtYWtlc3RyKCYob3B0 bGlzdFtub3B0bGlzdCsrXSksIkNLX1NZU0lOSSIpOworI2VuZGlmIC8qIENLX0lOSV9CICovCisj ZW5kaWYgLyogQ0tfSU5JX0EgKi8KKyNlbmRpZiAvKiBDS19EU1lTSU5JICovCisjaWZkZWYgQ0tf RFNZU0lOSQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tfRFNZU0lOSSIp OworI2VuZGlmIC8qIENLX0RTWVNJTkkgKi8KKyNpZmRlZiBDS19UVEdXU0laCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19UVEdXU0laIik7CisjZW5kaWYgLyogQ0tfVFRH V1NJWiAqLworI2lmZGVmIENLX05BV1MKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkNLX05BV1MiKTsKKyNlbmRpZiAvKiBDS19OQVdTICovCisjaWZkZWYgTURNSFVQCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJNRE1IVVAiKTsKKyNlbmRpZiAvKiBNRE1I VVAgKi8KKyNpZmRlZiBIVVBfQ0xPU0VfUE9TSVgKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIkhVUF9DTE9TRV9QT1NJWCIpOworI2VuZGlmIC8qIEhVUF9DTE9TRV9QT1NJWCAq LworI2lmZGVmIE5PX0hVUF9DTE9TRV9QT1NJWAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiTk9fSFVQX0NMT1NFX1BPU0lYIik7CisjZW5kaWYgLyogTk9fSFVQX0NMT1NFX1BP U0lYICovCisjaWZkZWYgRENNREJVRgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0Kytd KSwiRENNREJVRiIpOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyNpZmRlZiBDS19SRUNBTEwKKyAg ICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1JFQ0FMTCIpOworI2VuZGlmIC8q IENLX1JFQ0FMTCAqLworI2lmZGVmIEJST1dTRVIKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0 bGlzdCsrXSksIkJST1dTRVIiKTsKKyNlbmRpZiAvKiBCUk9XU0VSICovCisjaWZkZWYgQ0xTT1BO CisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDTFNPUE4iKTsKKyNlbmRpZiAv KiBDTFNPUE4gKi8KKyNpZmRlZiBTVFJBVFVTCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJTVFJBVFVTIik7CisjZW5kaWYgLyogU1RSQVRVUyAqLworI2lmZGVmIF9fVk9TX18K KyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIl9fVk9TX18iKTsKKyNlbmRpZiAv KiBfX1ZPU19fICovCisjaWZkZWYgU1RSQVRVU1gyNQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiU1RSQVRVU1gyNSIpOworI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KKyNpZmRl ZiBPUzJNT1VTRQorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiT1MyTU9VU0Ui KTsKKyNlbmRpZiAvKiBPUzJNT1VTRSAqLworI2lmZGVmIENLX1JFWFgKKyAgICBtYWtlc3RyKCYo b3B0bGlzdFtub3B0bGlzdCsrXSksIkNLX1JFWFgiKTsKKyNlbmRpZiAvKiBDS19SRVhYICovCisj aWZkZWYgQ0tfVElNRVJTCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19U SU1FUlMiKTsKKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKyNpZmRlZiBUVFNQRExJU1QKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIlRUU1BETElTVCIpOworI2VuZGlmIC8qIFRU U1BETElTVCAqLworI2lmZGVmIENLX1BFUk1TCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxp c3QrK10pLCJDS19QRVJNUyIpOworI2VuZGlmIC8qIENLX1BFUk1TICovCisjaWZkZWYgQ0tUVU5J TkcKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLVFVOSU5HIik7CisjZW5k aWYgLyogQ0tUVU5JTkcgKi8KKyNpZmRlZiBORVdGVFAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtu b3B0bGlzdCsrXSksIk5FV0ZUUCIpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworI2lmZGVmIFNZU0ZU UAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1lTRlRQIik7CisjZW5kaWYg LyogU1lTRlRQICovCisjaWZkZWYgTk9GVFAKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlz dCsrXSksIk5PRlRQIik7CisjZW5kaWYgLyogTk9GVFAgKi8KKyNpZmRlZiBDS0hUVFAKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIkNLSFRUUCIpOworI2VuZGlmIC8qIENLSFRU UCAqLworI2lmZGVmIE5PSFRUUAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwi Tk9IVFRQIik7CisjZW5kaWYgLyogTk9IVFRQICovCisjaWZkZWYgQ0tST09UCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS1JPT1QiKTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8K KyNpZmRlZiBDS1JFQUxQQVRICisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJD S1JFQUxQQVRIIik7CisjZW5kaWYgLyogQ0tSRUFMUEFUSCAqLworI2lmZGVmIFNUUkVBTUlORwor ICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1RSRUFNSU5HIik7CisjZW5kaWYg LyogU1RSRUFNSU5HICovCisjaWZkZWYgVU5QUkVGSVhaRVJPCisgICAgbWFrZXN0cigmKG9wdGxp c3Rbbm9wdGxpc3QrK10pLCJVTlBSRUZJWFpFUk8iKTsKKyNlbmRpZiAvKiBVTlBSRUZJWFpFUk8g Ki8KKyNpZmRlZiBDS1JFR0VYCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJD S1JFR0VYIik7CisjZW5kaWYgLyogQ0tSRUdFWCAqLworI2lmZGVmIFpYUkVXSU5ECisgICAgbWFr ZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJaWFJFV0lORCIpOworI2VuZGlmIC8qIFpYUkVX SU5EICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkNLU1lTTE9HIik7CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZmRlZiBTWVNMT0dMRVZF TAorICAgIHNwcmludGYobGluZSwiU1lTTE9HTEVWRUw9JWQiLFNZU0xPR0xFVkVMKTsgLyogU0FG RSAqLworICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbmRpZiAv KiBTWVNMT0dMRVZFTCAqLworI2lmZGVmIE5PU0VYUAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25v cHRsaXN0KytdKSwiTk9TRVhQIik7CisjZW5kaWYgLyogTk9TRVhQICovCisjaWZkZWYgQ0tMRUFS TgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiQ0tMRUFSTiIpOworI2Vsc2UK KyNpZmRlZiBOT0xPRUFSTgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiTk9M T0VBUk4iKTsKKyNlbmRpZiAvKiBOT0xPRUFSTiAqLworI2VuZGlmIC8qIENLTEVBUk4gKi8KKwor I2lmZGVmIE5PRkxPQVQKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksIk5PRkxP QVQiKTsKKyNlbHNlCisjaWZkZWYgRk5GTE9BVAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRs aXN0KytdKSwiRk5GTE9BVCIpOworI2VuZGlmIC8qIEZORkxPQVQgKi8KKyNpZmRlZiBDS0ZMT0FU CisjaWZkZWYgR0ZUSU1FUgorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiR0ZU SU1FUiIpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyNpZmRlZiBDS0ZMT0FUX1MKKyAgICBja21h a21zZyhsaW5lLExJTkJVRlNJWiwiQ0tGTE9BVD0iLENLRkxPQVRfUyxOVUxMLE5VTEwpOworICAg IG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSxsaW5lKTsKKyNlbHNlCisgICAgbWFrZXN0 cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS0ZMT0FUIik7CisjZW5kaWYgLyogQ0tGTE9BVF9T ICovCisjZW5kaWYgLyogQ0tGTE9BVCAqLworI2VuZGlmIC8qIE5PRkxPQVQgKi8KKworI2lmZGVm IFNTSAorICAgIG1ha2VzdHIoJihvcHRsaXN0W25vcHRsaXN0KytdKSwiU1NIIik7CisjZW5kaWYg LyogU1NIICovCisjaWZkZWYgTkVURExMCisgICAgbWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3Qr K10pLCJORVRETEwiKTsKKyNlbmRpZiAvKiBORVRETEwgKi8KKyNpZmRlZiBORVRGSUxFCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJORVRGSUxFIik7CisjZW5kaWYgLyogTkVU RklMRSAqLworI2lmZGVmIENLX1RBUEkKKyAgICBtYWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsr XSksIkNLX1RBUEkiKTsKKyNlbmRpZiAvKiBDS19UQVBJICovCisjaWZkZWYgQ0tfU1NMCisgICAg bWFrZXN0cigmKG9wdGxpc3Rbbm9wdGxpc3QrK10pLCJDS19TU0wiKTsKKyNpZmRlZiBPUEVOU1NM X1ZFUlNJT05fVEVYVAorICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLAorCSAgICAgIk9QRU5T U0xfVkVSU0lPTl9URVhUPSIsIlwiIixPUEVOU1NMX1ZFUlNJT05fVEVYVCwiXCIiKTsKKyAgICBt YWtlc3RyKCYob3B0bGlzdFtub3B0bGlzdCsrXSksbGluZSk7CisjZW5kaWYJLyogT1BFTlNTTF9W RVJTSU9OX1RFWFQgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICBkZWJ1ZyhGMTAxLCJpbml0 b3B0bGlzdCBub3B0bGlzdCIsIiIsbm9wdGxpc3QpOworICAgIHNoX3NvcnQob3B0bGlzdCxOVUxM LG5vcHRsaXN0LDAsMCwwKTsKK30KKworaW50CitzaG9mZWEoKSB7CisgICAgaW50IGk7CisgICAg aW50IGZsYWcgPSAwOworICAgIGludCBsaW5lcyA9IDE7CisjaWZkZWYgRk5GTE9BVAorICAgIGV4 dGVybiBpbnQgZnBfZGlnaXRzLCBmcF9yb3VuZGluZzsKKyNlbmRpZiAvKiBGTkZMT0FUICovCisg ICAgZXh0ZXJuIGludCBieXRlb3JkZXI7CisgICAgcHJpbnRmKCIlc1xuIix2ZXJzaW8pOworICAg IGlmIChpbnNlcnZlcikKKyAgICAgIHJldHVybigxKTsKKworICAgIGRlYnVnKEYxMDEsInNob2Zl YSBOT1BUTElTVCIsIiIsTk9QVExJU1QpOworICAgIGluaXRvcHRsaXN0KCk7CisgICAgZGVidWco RjEwMSwic2hvZmVhIG5vcHRsaXN0IiwiIixub3B0bGlzdCk7CisjaWZkZWYgT1MyCisjaWZkZWYg TlQKKyNpZmRlZiBfTV9BTFBIQQorICAgIHByaW50ZigiTWljcm9zb2Z0IFdpbmRvd3MgT3BlcmF0 aW5nIFN5c3RlbXMgZm9yIEFscGhhIENQVXMuXG4iKTsKKyNlbHNlIC8qIF9NX0FMUEhBICovCisj aWZkZWYgX01fUFBDCisgICAgcHJpbnRmKCJNaWNyb3NvZnQgV2luZG93cyBPcGVyYXRpbmcgU3lz dGVtcyBmb3IgUG93ZXJQQyBDUFVzLlxuIik7CisjZWxzZSAvKiBfTV9QUEMgKi8KKyNpZmRlZiBf TV9NUlgwMDAKKyAgICBwcmludGYoIk1pY3Jvc29mdCBXaW5kb3dzIE9wZXJhdGluZyBTeXN0ZW1z IGZvciBNSVBTIENQVXMuXG4iKTsKKyNlbHNlIC8qIF9NX01SWDAwMCAqLworI2lmZGVmIF9NX0lY ODYKKyAgICBwcmludGYoIk1pY3Jvc29mdCBXaW5kb3dzIE9wZXJhdGluZyBTeXN0ZW1zIGZvciAz Mi1iaXQgSW50ZWwgQ1BVcy5cbiIpOworI2Vsc2UgLyogX01fSVg4NiAqLworICAgIFVOS05PV04g V0lORE9XUyBQTEFURk9STQorI2VuZGlmIC8qIF9NX0lYODYgKi8KKyNlbmRpZiAvKiBfTV9NUlgw MDAgKi8KKyNlbmRpZiAvKiBfTV9QUEMgKi8KKyNlbmRpZiAvKiBfTV9BTFBIQSAqLworI2Vsc2Ug LyogTlQgKi8KKyNpZmRlZiBNX0kyODYKKyAgICBwcmludGYoIklCTSBPUy8yIDE2LWJpdC5cbiIp OworI2Vsc2UKKyAgICBwcmludGYoIklCTSBPUy8yIDMyLWJpdC5cbiIpOworI2VuZGlmIC8qIE1f STI4NiAqLworI2VuZGlmIC8qIE5UICovCisgICAgbGluZXMrKzsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICBwcmludGYoIlxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIk1h am9yIG9wdGlvbmFsIGZlYXR1cmVzIGluY2x1ZGVkOlxuIik7CisgICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KKworICAgIGlmIChzaXplb2YoQ0tfT0ZGX1QpID09IDgpIHsKKwlwcmludGYoIiBMYXJnZSBm aWxlcyBhbmQgbGFyZ2UgaW50ZWdlcnMgKDY0IGJpdHMpXG4iKTsKKyAgICAgICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsKKwkgICAgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7CisJfQorICAgIH0KKyNpZmRlZiBORVRDT05OCisgICAgcHJpbnRmKCIgTmV0 d29yayBzdXBwb3J0ICh0eXBlIFNIT1cgTkVUIGZvciBmdXJ0aGVyIGluZm8pXG4iKTsKKyAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQorI2lmZGVmIElLU19PUFRJT04KKyAgICBwcmludGYoIiBUZWxuZXQg S2VybWl0IE9wdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBJS1Nf T1BUSU9OICovCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICBwcmludGYoIiBUZWxuZXQg QXV0aGVudGljYXRpb24gT3B0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2lmZGVm IENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNAorI2lmZGVmIEtSQjUKKyAgICBwcmludGYoIiBLZXJi ZXJvcyhUTSkgSVYgYW5kIEtlcmJlcm9zIFYgYXV0aGVudGljYXRpb25cbiIpOworICAgIGlmICgr K2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2Ug bGluZXMgPSAwOyB9CisjZWxzZSAvKiBLUkI1ICovCisgICAgcHJpbnRmKCIgS2VyYmVyb3MoVE0p IElWIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8q IEtSQjUgKi8KKyNlbHNlIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisgICAgcHJpbnRmKCIgS2Vy YmVyb3MoVE0pIFYgYXV0aGVudGljYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisj ZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIEtSQjQgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJP UyAqLworI2lmZGVmIENLX1NSUAorICAgIHByaW50ZigiIFNSUChUTSkgKFNlY3VyZSBSZW1vdGUg UGFzc3dvcmQpIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2Vu ZGlmIC8qIENLX1NSUCAqLworI2lmZGVmIENLX1NTTAorICAgIHByaW50ZigiIFNlY3VyZSBTb2Nr ZXRzIExheWVyIChTU0wpXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50Zigi IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKVxuIik7CisgICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBTU0hCVUlMVElOCisgICAgcHJpbnRmKCIg U2VjdXJlIFNoZWxsIChTU0gpIFtpbnRlcm5hbF1cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2lmZGVmIFNTSENNRAorICAgIHByaW50ZigiIFNl Y3VyZSBTaGVsbCAoU1NIKSBbZXh0ZXJuYWxdXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQor I2VuZGlmIC8qIFNTSENNRCAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICBwcmludGYoIiBU ZWxuZXQgRW5jcnlwdGlvbiBPcHRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjaWZk ZWYgQ0tfREVTCisgICAgcHJpbnRmKCIgVGVsbmV0IERFUyBFbmNyeXB0aW9uXG4iKTsKKyAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIENLX0RFUyAqLworI2lmZGVmIENLX0NBU1QKKyAg ICBwcmludGYoIiBUZWxuZXQgQ0FTVCBFbmNyeXB0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQorI2VuZGlmIC8qIENLX0NBU1QgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYg S1JCNQorI2lmZGVmIEFMTE9XX0tSQl8zREVTX0VOQ1JZUFQKKyAgICBwcmludGYoIiBLZXJiZXJv cyAzREVTL0FFUyBUZWxuZXQgRW5jcnlwdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K KyNlbmRpZiAvKiBBTExPV19LUkJfM0RFU19FTkNSWVBUICovCisjZW5kaWYgLyogS1JCNSAqLwor I2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisj ZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDS19GT1JXQVJEX1gKKyAgICBw cmludGYoIiBYIFdpbmRvd3MgZm9yd2FyZGluZ1xuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K KyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyNpZmRlZiBUTl9DT01QT1JUCisgICAgcHJpbnRm KCIgVGVsbmV0IFJlbW90ZSBDb20gUG9ydCBDb250cm9sIE9wdGlvblxuIik7CisgICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisjaWZkZWYgQ0tfU09DS1MKKyNp ZmRlZiBDS19TT0NLUzUKKyAgICBwcmludGYoIiBTT0NLUyA1XG4iKTsKKyAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQorI2Vsc2UgLyogQ0tfU09DS1M1ICovCisgICAgcHJpbnRmKCIgU09DS1MgNFxuIik7 CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBDS19TT0NLUzUgKi8KKyNlbmRpZiAv KiBDS19TT0NLUyAqLworI2lmZGVmIE5FV0ZUUAorICAgIHByaW50ZigiIEJ1aWx0LWluIEZUUCBj bGllbnRcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogTkVXRlRQICovCisj aWZkZWYgQ0tIVFRQCisgICAgcHJpbnRmKCIgQnVpbHQtaW4gSFRUUCBjbGllbnRcbiIpOworICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogQ0tIVFRQICovCisjZW5kaWYgLyogTkVUQ09O TiAqLworCisjaWZkZWYgQ0tfUlRTQ1RTCisgICAgcHJpbnRmKCIgSGFyZHdhcmUgZmxvdyBjb250 cm9sXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIENLX1JUU0NUUyAqLwor CisjaWZkZWYgQ0tfWFlaCisjaWZkZWYgWFlaX0lOVEVSTkFMCisgICAgcHJpbnRmKCIgQnVpbHQt aW4gWFlaTU9ERU0gcHJvdG9jb2xzXG4iKTsKKyNlbHNlCisgICAgcHJpbnRmKCIgRXh0ZXJuYWwg WFlaTU9ERU0gcHJvdG9jb2wgc3VwcG9ydFxuIik7CisjZW5kaWYgLyogWFlaX0lOVEVSTkFMICov CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBDS19YWVogKi8KKworI2lmbmRlZiBO T0NTRVRTCisgICAgcHJpbnRmKCIgTGF0aW4tMSAoV2VzdCBFdXJvcGVhbikgY2hhcmFjdGVyLXNl dCB0cmFuc2xhdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNpZmRlZiBMQVRJTjIK KyAgICBwcmludGYoIiBMYXRpbi0yIChFYXN0IEV1cm9wZWFuKSBjaGFyYWN0ZXItc2V0IHRyYW5z bGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIExBVElOMiAqLwor I2lmZGVmIENZUklMTElDCisgICAgcHJpbnRmKCIgQ3lyaWxsaWMgKFJ1c3NpYW4sIFVrcmFpbmlh biwgZXRjKSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQorI2VuZGlmIC8qIENZUklMTElDICovCisjaWZkZWYgR1JFRUsKKyAgICBwcmludGYoIiBH cmVlayBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQorI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgSEVCUkVXCisgICAgcHJpbnRmKCIgSGVicmV3 IGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisj ZW5kaWYgLyogSEVCUkVXICovCisjaWZkZWYgS0FOSkkKKyAgICBwcmludGYoIiBKYXBhbmVzZSBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2Vu ZGlmIC8qIEtBTkpJICovCisjaWZkZWYgVU5JQ09ERQorICAgIHByaW50ZigiIFVuaWNvZGUgY2hh cmFjdGVyLXNldCB0cmFuc2xhdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAt IDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRp ZiAvKiBVTklDT0RFICovCisjaWZkZWYgQ0tPVU5JCisgICAgaWYgKGlzdW5pY29kZSgpKQorICAg ICAgcHJpbnRmKCIgVW5pY29kZSBzdXBwb3J0IGZvciBJU08tMjAyMiBUZXJtaW5hbCBFbXVsYXRp b25cbiIpOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiIFVuaWNvZGUgdHJhbnNsYXRpb24gZm9y IFRlcm1pbmFsIENoYXJhY3Rlci1TZXRzXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2Vu ZGlmIC8qIENLT1VOSSAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIE5FVFBUWQor ICAgIHByaW50ZigiIFBzZXVkb3Rlcm1pbmFsIGNvbnRyb2xcbiIpOworICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9CisjZW5kaWYgLyogTkVUUFRZICovCisKKyNpZmRlZiBDS19SRURJUgorICAgIHByaW50 ZigiIFJFRElSRUNUIGNvbW1hbmRcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYg LyogQ0tfUkVESVIgKi8KKworI2lmZGVmIENLX1JFU0VORAorICAgIHByaW50ZigiIFJFU0VORCBj b21tYW5kXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIENLX1JFU0VORCAq LworCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIENLX0NVUlNFUworICAgIHByaW50ZigiIEZ1bGxz Y3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQor I2VuZGlmIC8qIENLX0NVUlNFUyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tf U1BFRUQKKyAgICBwcmludGYoIiBDb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZ1xuIik7Cisg ICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigx KTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisjaWZkZWYgU1RS RUFNSU5HCisgICAgcHJpbnRmKCIgU3RyZWFtaW5nXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworCisjaWZkZWYgQ0tfQVVUT0RMCisgICAgcHJpbnRm KCIgQXV0b2Rvd25sb2FkXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIENL X0FVVE9ETCAqLworCisjaWZkZWYgT1MyTU9VU0UKKyAgICBwcmludGYoIiBNb3VzZSBzdXBwb3J0 XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIE9TMk1PVVNFICovCisKKyNp ZmRlZiBDS19SRVhYCisgICAgcHJpbnRmKCIgUkVYWCBzY3JpcHQgbGFuZ3VhZ2UgaW50ZXJmYWNl XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIENLX1JFWFggKi8KKworI2lm ZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgIHByaW50ZigiIEludGVybmV0IEtlcm1pdCBT ZXJ2aWNlIHdpdGggdXNlciBsb2dpbiBzdXBwb3J0XG4iKTsKKyNlbHNlIC8qIENLX0xPR0lOICov CisgICAgcHJpbnRmKCIgSW50ZXJuZXQgS2VybWl0IFNlcnZpY2Ugd2l0aG91dCB1c2VyIGxvZ2lu IHN1cHBvcnRcbiIpOworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgaWYgKCsrbGluZXMgPiBj bWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 IH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBwcmludGYoIlxuIik7CisgICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KKyAgICBwcmludGYoIk1ham9yIG9wdGlvbmFsIGZlYXR1cmVzIG5vdCBpbmNsdWRl ZDpcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisKKyAgICBpZiAoc2l6ZW9mKENLX09GRl9U KSA8PSA0KSB7CisJcHJpbnRmKCIgTm8gbGFyZ2UgZmlsZXMgb3IgbGFyZ2UgaW50ZWdlcnNcbiIp OworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeworCSAgICBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsKKwl9CisgICAgfQorCisjaWZkZWYgTk9Y RkVSCisgICAgcHJpbnRmKCIgTm8gZmlsZS10cmFuc2ZlciBwcm90b2NvbHNcbiIpOworICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZWxzZQorI2lmbmRlZiBDS19DVVJTRVMK KyNpZm5kZWYgTUFDCisgICAgcHJpbnRmKCIgTm8gZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRp c3BsYXlcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYg LyogTUFDICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKyNpZmRlZiBOT1NFUlZFUgorICAg IHByaW50ZigiIE5vIHNlcnZlciBtb2RlXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAg IGZsYWcgPSAxOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyNpZm5kZWYgQ0tfU1BFRUQKKyAg ICBwcmludGYoIiBObyBjb250cm9sLWNoYXJhY3RlciB1bnByZWZpeGluZ1xuIik7CisgICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworCisj aWZuZGVmIFNUUkVBTUlORworICAgIHByaW50ZigiIE5vIHN0cmVhbWluZ1xuIik7CisgICAgaWYg KCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxz ZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKwor I2lmbmRlZiBDS19BVVRPREwKKyAgICBwcmludGYoIiBObyBhdXRvZG93bmxvYWRcbiIpOworICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogQ0tfQVVUT0RMICov CisKKyNpZm5kZWYgQ0tfWFlaCisgICAgcHJpbnRmKCIgTm8gYnVpbHQtaW4gWFlaTU9ERU0gcHJv dG9jb2xzXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlm IC8qIENLX1hZWiAqLworCisjaWZkZWYgTk9GTE9BVAorICAgIHByaW50ZigiIE5vIGZsb2F0aW5n LXBvaW50IGFyaXRobWV0aWNcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9 IDE7CisgICAgcHJpbnRmKCIgTm8gUy1FeHByZXNzaW9ucyAoTElTUCBpbnRlcnByZXRlcilcbiIp OworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZWxzZQorI2lmZGVmIE5P U0VYUAorICAgIHByaW50ZigiIE5vIFMtRXhwcmVzc2lvbnMgKExJU1AgaW50ZXJwcmV0ZXIpXG4i KTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmCS8qIE5PU0VY UCAqLworI2VuZGlmCS8qIE5PRkxPQVQgKi8KKworI2lmZGVmIE5PVExPRworICAgIHByaW50Zigi IE5vIHRyYW5zYWN0aW9uIGxvZ1xuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMp IHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFn ID0gMTsKKyNlbmRpZiAvKiBOT1RMT0cgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVm IE5PREVCVUcKKyAgICBwcmludGYoIiBObyBkZWJ1Z2dpbmdcbiIpOworICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTk9ERUJVRyAqLworCisjaWZkZWYgTk9I RUxQCisgICAgcHJpbnRmKCIgTm8gYnVpbHQtaW4gaGVscFxuIik7CisgICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBOT0hFTFAgKi8KKworI2lmZGVmIE5PTE9D QUwKKyAgICBwcmludGYoIiBObyBtYWtpbmcgY29ubmVjdGlvbnNcbiIpOworICAgIGlmICgrK2xp bmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGlu ZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZWxzZQorI2lmbmRlZiBORVRDT05OCisgICAgcHJp bnRmKCIgTm8gbmV0d29yayBzdXBwb3J0XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAg IGZsYWcgPSAxOworI2Vsc2UgLyogTkVUQ09OTiAqLworI2lmbmRlZiBJS1NfT1BUSU9OCisgICAg cHJpbnRmKCIgTm8gVGVsbmV0IEtlcm1pdCBPcHRpb25cbiIpOworICAgIGlmICgrK2xpbmVzID4g Y21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAw OyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogSUtTX09QVElPTiAqLworI2VuZGlmIC8qIE5F VENPTk4gKi8KKworI2lmZGVmIE5PU1NICisgICAgcHJpbnRmKCIgTm8gU2VjdXJlIFNoZWxsIChT U0gpXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIE5PU1NIICovCisjaWZu ZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgcHJpbnRmKCIgTm8gS2VyYmVyb3MoVE0pIGF1dGhl bnRpY2F0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiIE5vIFNS UChUTSkgKFNlY3VyZSBSZW1vdGUgUGFzc3dvcmQpIHByb3RvY29sXG4iKTsKKyAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxp bmVzID0gMDsgfQorICAgIHByaW50ZigiIE5vIFNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpIHBy b3RvY29sXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21v cmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiIE5vIFRyYW5z cG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBwcm90b2NvbFxuIik7CisgICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KKyAgICBwcmludGYoIiBObyBlbmNyeXB0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQorICAgIGZsYWcgPSAxOworI2Vsc2UgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZm5k ZWYgQ0tfS0VSQkVST1MKKyAgICBwcmludGYoIiBObyBLZXJiZXJvcyhUTSkgYXV0aGVudGljYXRp b25cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZWxzZSAvKiBD S19LRVJCRVJPUyAqLworI2lmbmRlZiBLUkI0CisgICAgcHJpbnRmKCIgTm8gS2VyYmVyb3MoVE0p IElWIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcg PSAxOworI2VuZGlmIC8qIEtSQjQgKi8KKyNpZm5kZWYgS1JCNQorICAgIHByaW50ZigiIE5vIEtl cmJlcm9zKFRNKSBWIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9y b3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQor ICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAq LworI2lmbmRlZiBDS19TUlAKKyAgICBwcmludGYoIiBObyBTUlAoVE0pIChTZWN1cmUgUmVtb3Rl IFBhc3N3b3JkKSBhdXRoZW50aWNhdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93 cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAg ICBmbGFnID0gMTsKKyNlbmRpZiAvKiBDS19TUlAgKi8KKyNpZm5kZWYgQ0tfU1NMCisgICAgcHJp bnRmKCIgTm8gU2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTCkgcHJvdG9jb2xcbiIpOworICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCIgTm8gVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5 IChUTFMpIHByb3RvY29sXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAx OworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmbmRlZiBDS19FTkNSWVBUSU9OCisgICAgcHJpbnRm KCIgTm8gVGVsbmV0IEVuY3J5cHRpb24gT3B0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQorICAgIGZsYWcgPSAxOworI2Vsc2UgLyogQ0tfRU5DUllQVElPTiAqLworI2lmbmRlZiBPUzIK KyNpZm5kZWYgQ0tfREVTCisgICAgcHJpbnRmKCIgTm8gVGVsbmV0IERFUyBlbmNyeXB0aW9uXG4i KTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIENLX0RF UyAqLworI2lmbmRlZiBDS19DQVNUCisgICAgcHJpbnRmKCIgTm8gVGVsbmV0IENBU1QgZW5jcnlw dGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAv KiBDS19DQVNUICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRl ZiBLUkI1CisjaWZuZGVmIEFMTE9XX0tSQl8zREVTX0VOQ1JZUFQKKyAgICBwcmludGYoIiBObyBL ZXJiZXJvcyAzREVTL0FFUyBUZWxuZXQgRW5jcnlwdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KKyNlbmRpZiAvKiBBTExPV19LUkJfM0RFU19FTkNSWVBUICovCisjZW5kaWYgLyogS1JC NSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisj ZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENL X0FVVEhFTlRJQ0FUSU9OICovCisjaWZuZGVmIENLX0ZPUldBUkRfWAorICAgIHByaW50ZigiIE5v IFggV2luZG93cyBmb3J3YXJkaW5nXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0g MykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlm IC8qIENLX0ZPUldBUkRfWCAqLworI2lmbmRlZiBUTl9DT01QT1JUCisgICAgcHJpbnRmKCIgTm8g VGVsbmV0IFJlbW90ZSBDb20gUG9ydCBDb250cm9sIE9wdGlvblxuIik7CisgICAgaWYgKCsrbGlu ZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5l cyA9IDA7IH0KKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisjaWZuZGVmIENLX1NPQ0tTCisgICAg cHJpbnRmKCIgTm8gU09DS1NcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7 IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyog Q0tfU09DS1MgKi8KKyNpZm5kZWYgTkVXRlRQCisgICAgcHJpbnRmKCIgTm8gYnVpbHQtaW4gRlRQ IGNsaWVudFxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2tt b3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBORVdGVFAgKi8K KyNpZmRlZiBOT0hUVFAKKyAgICBwcmludGYoIiBObyBidWlsdC1pbiBIVFRQIGNsaWVudFxuIik7 CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyNlbmRpZiAvKiBOT0hUVFAgKi8KKworI2lmZGVmIE5P RElBTAorICAgIHByaW50ZigiIE5vIERJQUwgY29tbWFuZFxuIik7CisgICAgaWYgKCsrbGluZXMg PiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9 IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbHNlCisjaWZkZWYgTUlOSURJQUwKKyAgICBwcmludGYo IiBTdXBwb3J0IGZvciBtb3N0IG1vZGVtIHR5cGVzIGV4Y2x1ZGVkXG4iKTsKKyAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxp bmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIE1JTklESUFMICovCisjZW5kaWYg LyogTk9ESUFMICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIENLX1JUU0NUUwor I2lmbmRlZiBNQUMKKyAgICBwcmludGYoIiBObyBoYXJkd2FyZSBmbG93IGNvbnRyb2xcbiIpOwor ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4o MSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTUFDICovCisj ZW5kaWYgLyogQ0tfUlRTQ1RTICovCisKKyNpZmRlZiBOT1hNSVQKKyAgICBwcmludGYoIiBObyBU UkFOU01JVCBjb21tYW5kXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAx OworI2VuZGlmIC8qIE5PWE1JVCAqLworCisjaWZkZWYgTk9TQ1JJUFQKKyAgICBwcmludGYoIiBO byBTQ1JJUFQgY29tbWFuZFxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsg aWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0g MTsKKyNlbmRpZiAvKiBOT1NDUklQVCAqLworCisjaWZkZWYgTk9TUEwKKyAgICBwcmludGYoIiBO byBzY3JpcHQgcHJvZ3JhbW1pbmcgZmVhdHVyZXNcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21k X3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9 CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIE5PQ1NFVFMKKyAg ICBwcmludGYoIiBObyBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKyts aW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxp bmVzID0gMDsgfQorICAgIGZsYWcgPSAxOworI2Vsc2UKKworI2lmbmRlZiBMQVRJTjIKKyAgICBw cmludGYoIiBObyBMYXRpbi0yIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVs c2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTEFUSU4yICovCisKKyNp ZmRlZiBOT0dSRUVLCisgICAgcHJpbnRmKCIgTm8gR3JlZWsgY2hhcmFjdGVyLXNldCB0cmFuc2xh dGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAv KiBOT0dSRUVLICovCisKKyNpZmRlZiBOT0hFQlJFVworICAgIHByaW50ZigiIE5vIEhlYnJldyBj aGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dz IC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAg IGZsYWcgPSAxOworI2VuZGlmIC8qIE5PSEVCUkVXICovCisKKyNpZmRlZiBOT1VOSUNPREUKKyAg ICBwcmludGYoIiBObyBVbmljb2RlIGNoYXJhY3Rlci1zZXQgdHJhbnNsYXRpb25cbiIpOworICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogTk9VTklDT0RFICov CisKKyNpZmRlZiBOT0NZUklMCisgICAgcHJpbnRmKCIgTm8gQ3lyaWxsaWMgY2hhcmFjdGVyLXNl dCB0cmFuc2xhdGlvblxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsK KyNlbmRpZiAvKiBOT0NZUklMICovCisKKyNpZm5kZWYgS0FOSkkKKyAgICBwcmludGYoIiBObyBL YW5qaSBjaGFyYWN0ZXItc2V0IHRyYW5zbGF0aW9uXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNt ZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsg fQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIEtBTkpJICovCisjZW5kaWYgLyogTk9DU0VUUyAq LworCisjaWZkZWYgTk9DTURMCisgICAgcHJpbnRmKCIgTm8gY29tbWFuZC1saW5lIGFyZ3VtZW50 c1xuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBO T0NNREwgKi8KKworI2lmZGVmIE5PUFVTSAorICAgIHByaW50ZigiIE5vIGVzY2FwZSB0byBzeXN0 ZW1cbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyog Tk9QVVNIICovCisKKyNpZmRlZiBOT0pDCisjaWZkZWYgVU5JWAorICAgIHByaW50ZigiIE5vIFVO SVggam9iIGNvbnRyb2xcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7 CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE5PSkMgKi8KKworI2lmZGVmIE5PU0VUS0VZ CisgICAgcHJpbnRmKCIgTm8gU0VUIEtFWSBjb21tYW5kXG4iKTsKKyAgICBpZiAoKytsaW5lcyA+ IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0g MDsgfQorICAgIGZsYWcgPSAxOworI2VuZGlmIC8qIE5PU0VUS0VZICovCisKKyNpZm5kZWYgQ0tf UkVESVIKKyAgICBwcmludGYoIiBObyBSRURJUkVDVCBvciBQSVBFIGNvbW1hbmRcbiIpOworICAg IGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7 IGVsc2UgbGluZXMgPSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogQ0tfUkVESVIgKi8K KworI2lmZGVmIFVOSVgKKyNpZm5kZWYgTkVUUFRZCisgICAgcHJpbnRmKCIgTm8gcHNldWRvdGVy bWluYWwgY29udHJvbFxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYg KCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsK KyNlbmRpZiAvKiBORVRQVFkgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZm5kZWYgQ0tfUkVT RU5ECisgICAgcHJpbnRmKCIgTm8gUkVTRU5EIGNvbW1hbmRcbiIpOworICAgIGlmICgrK2xpbmVz ID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMg PSAwOyB9CisgICAgZmxhZyA9IDE7CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisKKyNpZmRlZiBP UzIKKyNpZmRlZiBfXzMyQklUX18KKyNpZm5kZWYgT1MyTU9VU0UKKyAgICBwcmludGYoIiBObyBN b3VzZSBzdXBwb3J0XG4iKTsKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIGZsYWcgPSAxOwor I2VuZGlmIC8qIF9fMzJCSVRfXyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE9TMk1P VVNFICovCisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTlQKKyNpZm5kZWYgQ0tfUkVYWAorICAgIHBy aW50ZigiIE5vIFJFWFggc2NyaXB0IGxhbmd1YWdlIGludGVyZmFjZVxuIik7CisgICAgaWYgKCsr bGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBs aW5lcyA9IDA7IH0KKyAgICBmbGFnID0gMTsKKyNlbmRpZiAvKiBDS19SRVhYICovCisjZW5kaWYg LyogTlQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBJS1NECisgICAgcHJpbnRmKCIg Tm8gSW50ZXJuZXQgS2VybWl0IFNlcnZpY2VcbiIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jv d3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9Cisg ICAgZmxhZyA9IDE7CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgaWYgKGZsYWcgPT0gMCkgewor ICAgICAgICBwcmludGYoIiBOb25lXG4iKTsKKyAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93 cyAtIDMpCisgICAgICAgICAgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQorICAgIH0KKyAgICBwcmludGYoIlxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRf cm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0K KworI2lmZGVmIENLX1VUU05BTUUKKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50Zigi SG9zdCBpbmZvOlxuIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFh c2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiBNYWNo aW5lOiAgICAlc1xuIix1bm1fbWNoWzBdID8gdW5tX21jaCA6ICIodW5rbm93bikiKTsKKyAgICBp ZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBl bHNlIGxpbmVzID0gMDsgfQorICAgIHByaW50ZigiIE1vZGVsOiAgICAgICVzXG4iLHVubV9tb2Rb MF0gPyB1bm1fbW9kIDogIih1bmtub3duKSIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3Mg LSAzKSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAg cHJpbnRmKCIgT1M6ICAgICAgICAgJXNcbiIsdW5tX25hbVswXSA/IHVubV9uYW0gOiAiKHVua25v d24pIik7CisgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsgaWYgKCFhc2ttb3JlKCkp IHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7IH0KKyAgICBwcmludGYoIiBPUyBSZWxlYXNlOiAl c1xuIix1bm1fcmVsWzBdID8gdW5tX3JlbCA6ICIodW5rbm93bikiKTsKKyAgICBpZiAoKytsaW5l cyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVz ID0gMDsgfQorICAgIHByaW50ZigiIE9TIFZlcnNpb246ICVzXG4iLHVubV92ZXJbMF0gPyB1bm1f dmVyIDogIih1bmtub3duKSIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlm ICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisgICAgcHJpbnRmKCJc biIpOworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7IGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisjZW5kaWYgLyogQ0tfVVRTTkFNRSAqLworCisv KgorICBQcmludCBjb21waWxlLXRpbWUgKC1EKSBvcHRpb25zLCBhcyB3ZWxsIGFzIEMgcHJlcHJv Y2Vzc29yCisgIHByZWRlZmluZWQgc3ltYm9scyB0aGF0IG1pZ2h0IGFmZmVjdCB1cy4uLgorKi8K KyNpZmRlZiBLVEFSR0VUCisgICAgeworICAgICAgICBjaGFyICogczsgICAgICAgICAgICAgICAg ICAgICAgIC8qIE1ha2VmaWxlIHRhcmdldCAqLworICAgICAgICBzID0gS1RBUkdFVDsKKyAgICAg ICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgIGlmICghKnMpIHMgPSAiKHVua25vd24pIjsKKyAg ICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykg eworICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIHJldHVybigxKTsgZWxzZSBsaW5lcyA9IDA7 CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJUYXJnZXQ6ICVzXG4iLCBzKTsKKyAgICAgICAg aWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAgIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IEtUQVJHRVQgKi8KKworI2lmZGVmIF9fVkVSU0lPTl9fCisjaWZkZWYgX19HTlVDX18KKyAgICBw cmludGYoIkdDQyB2ZXJzaW9uOiAlc1xuIiwgX19WRVJTSU9OX18pOworI2Vsc2UKKyAgICBwcmlu dGYoIkNvbXBpbGVyIHZlcnNpb246ICVzXG4iLCBfX1ZFUlNJT05fXyk7CisjZW5kaWYgLyogX19H TlVDX18gKi8KKyAgICBpZiAoKytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeyBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDEpOyBlbHNlIGxpbmVzID0gMDsgfQorI2VuZGlmIC8qIF9fVkVSU0lPTl9fICov CisKKyNpZmRlZiBfX0RBVEVfXyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHTlUgYW5kIG90 aGVyIEFOU0kgKi8KKyNpZmRlZiBfX1RJTUVfXworICAgIHByaW50ZigiQ29tcGlsZWQgJXMgJXMs IG9wdGlvbnM6XG4iLCBfX0RBVEVfXywgX19USU1FX18pOworI2Vsc2UKKyAgICBwcmludGYoIkNv bXBpbGVkICVzLCBvcHRpb25zOlxuIiwgX19EQVRFX18pOworI2VuZGlmIC8qIF9fVElNRV9fICov CisjZWxzZSAvKiAhX19EQVRFX18gKi8KKyAgICBwcmludGYoIkNvbXBpbGVyIG9wdGlvbnM6XG4i KTsKKyNlbmRpZiAvKiBfX0RBVEVfXyAqLworICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAz KSB7IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMSk7IGVsc2UgbGluZXMgPSAwOyB9CisKKyAgICBm b3IgKGkgPSAwOyBpIDwgbm9wdGxpc3Q7IGkrKykgICAgICAvKiBQcmludCBzb3J0ZWQgb3B0aW9u IGxpc3QgKi8KKyAgICAgIGlmICghcHJ0b3B0KCZsaW5lcyxvcHRsaXN0W2ldKSkKKyAgICAgICAg cmV0dXJuKDApOworCisgICAgaWYgKCFwcnRvcHQoJmxpbmVzLCIiKSkgcmV0dXJuKDApOyAgLyog U3RhcnQgYSBuZXcgc2VjdGlvbiAqLworCisvKiBTaXplcyBvZiBkYXRhIHR5cGVzICovCisKKyAg ICBja21ha21zZyhsaW5lLAorICAgICAgICAgICAgIExJTkJVRlNJWiwKKyAgICAgICAgICAgICAi Ynl0ZSBvcmRlcjogIiwKKyAgICAgICAgICAgICBieXRlb3JkZXIgPyAibGl0dGxlIiA6ICJiaWci LAorICAgICAgICAgICAgICIgZW5kaWFuIiwKKyAgICAgICAgICAgICBOVUxMCisgICAgICAgICAg ICAgKTsKKyAgICB7CisvKiBXaGV0aGVyIHRvIHVzZSAlZCBvciAlbGQgd2l0aCBzaXplb2YgaXMg YSBwb3J0YWJpbGl0eSBpc3N1ZSwgc28uLi4gKi8KKwlpbnQgc2l6ZSA9IDA7CisKKwlpZiAoIXBy dG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKKwlpZiAoIXBydG9wdCgmbGluZXMsIiIpKSBy ZXR1cm4oMCk7ICAvKiBTdGFydCBhIG5ldyBzZWN0aW9uICovCisKKwlzaXplID0gKGludClzaXpl b2YoaW50KTsKKwlzcHJpbnRmKGxpbmUsInNpemVvZnM6IGludD0lZCIsc2l6ZSk7IC8qIFNBRkUg Ki8KKwlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKKworCXNpemUgPSAoaW50 KXNpemVvZihsb25nKTsKKwlzcHJpbnRmKGxpbmUsImxvbmc9JWQiLHNpemUpOyAvKiBTQUZFICov CisJaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7CisKKyNpZm5kZWYgT1MyCisJ LyogV2luZG93cyBkb2Vzbid0IGhhdmUgb2ZmX3QgKi8KKwlzaXplID0gKGludClzaXplb2Yob2Zm X3QpOworCXNwcmludGYobGluZSwib2ZmX3Q9JWQiLHNpemUpOyAvKiBTQUZFICovCisJaWYgKCFw cnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7CisjZW5kaWYgLyogT1MyICovCisKKwlzaXpl ID0gKGludClzaXplb2YoQ0tfT0ZGX1QpOworCXNwcmludGYobGluZSwiQ0tfT0ZGX1Q9JWQiLHNp emUpOyAvKiBTQUZFICovCisJaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7CisK KyNpZmRlZiBCSUdCVUZPSworCXNpemUgPSAoaW50KXNpemVvZihzaXplX3QpOworCXNwcmludGYo bGluZSwic2l6ZV90PSVkIixzaXplKTsgLyogU0FGRSAqLworCWlmICghcHJ0b3B0KCZsaW5lcyxs aW5lKSkgcmV0dXJuKDApOworI2VuZGlmIC8qIEJJR0JVRk9LICovCisKKwlzaXplID0gKGludClz aXplb2Yoc2hvcnQpOworCXNwcmludGYobGluZSwic2hvcnQ9JWQiLHNpemUpOyAvKiBTQUZFICov CisJaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7CisKKwlzaXplID0gKGludClz aXplb2YoY2hhcik7CisJc3ByaW50ZihsaW5lLCJjaGFyPSVkIixzaXplKTsgLyogU0FGRSAqLwor CWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOworCisJc2l6ZSA9IChpbnQpc2l6 ZW9mKGNoYXIgKik7CisJc3ByaW50ZihsaW5lLCJjaGFyKj0lZCIsc2l6ZSk7IC8qIFNBRkUgKi8K KwlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKKworCXNpemUgPSAoaW50KXNp emVvZihmbG9hdCk7CisJc3ByaW50ZihsaW5lLCJmbG9hdD0lZCIsc2l6ZSk7IC8qIFNBRkUgKi8K KwlpZiAoIXBydG9wdCgmbGluZXMsbGluZSkpIHJldHVybigwKTsKKworCXNpemUgPSAoaW50KXNp emVvZihkb3VibGUpOworCXNwcmludGYobGluZSwiZG91YmxlPSVkIixzaXplKTsgLyogU0FGRSAq LworCWlmICghcHJ0b3B0KCZsaW5lcyxsaW5lKSkgcmV0dXJuKDApOworICAgIH0KKworI2lmZGVm IEZORkxPQVQKKyAgICBpZiAoIXBydG9wdCgmbGluZXMsIiIpKSByZXR1cm4oMCk7ICAvKiBTdGFy dCBhIG5ldyBzZWN0aW9uICovCisgICAgaWYgKCFwcnRvcHQoJmxpbmVzLCJmbG9hdGluZy1wb2lu dDoiKSkgcmV0dXJuKDApOworICAgIHNwcmludGYobGluZSwicHJlY2lzaW9uPSVkIixmcF9kaWdp dHMpOyAvKiBTQUZFICovCisgICAgaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7 CisgICAgc3ByaW50ZihsaW5lLCJyb3VuZGluZz0lZCIsZnBfcm91bmRpbmcpOyAvKiBTQUZFICov CisgICAgaWYgKCFwcnRvcHQoJmxpbmVzLGxpbmUpKSByZXR1cm4oMCk7CisjZW5kaWYgLyogRk5G TE9BVCAqLworCisgICAgcHJ0b3B0KCZsaW5lcywiIik7CisgICAgcmV0dXJuKDApOworfQorI2Vu ZGlmIC8qIE5PU0hPVyAqLworI2VuZGlmIC8qIE5PSUNQICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1p dC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1czYuYyBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYTQ5OTBjNgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1i dWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM2LmMKQEAgLTAsMCArMSwxMjAwOSBAQAorI2luY2x1 ZGUgImNrY3N5bS5oIgorI2lmbmRlZiBOT0lDUAorCisvKgorICBBdXRob3JzOgorICAgIEZyYW5r IGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBD b2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5CisgICAgSmVmZnJleSBFIEFsdG1hbiA8 amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5j LiwgTmV3IFlvcmsgQ2l0eQorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKKyAgICBUcnVz dGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAg IEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUg b3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlz Y2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKiBJbmNsdWRlcyAqLworCisjaW5jbHVk ZSAiY2tjZGViLmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2VyLmgiCisj aW5jbHVkZSAiY2t1dXNyLmgiCisjaW5jbHVkZSAiY2tjeGxhLmgiCisjaW5jbHVkZSAiY2tjbmV0 LmgiICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBzeW1ib2xzICovCisjaW5jbHVkZSA8 c2lnbmFsLmg+CisKKyNpZm5kZWYgTk9TVEFUCisjaWZkZWYgVk1TCisvKiAyMDEwLTAzLTA5IFNN Uy4gIFZBWCBDIG5lZWRzIGhlbHAgdG8gZmluZCAic3lzIi4gIEl0J3MgZWFzaWVyIG5vdCB0byB0 cnkuICovCisjaW5jbHVkZSA8c3RhdC5oPgorI2Vsc2UgLyogZGVmIFZNUyAqLworI2luY2x1ZGUg PHN5cy9zdGF0Lmg+CisjZW5kaWYgLyogZGVmIFZNUyBbZWxzZV0gKi8KKyNlbmRpZiAvKiBOT1NU QVQgKi8KKworI2lmZGVmIFZNUworI2lmbmRlZiBUQ1BTT0NLRVQKKyNpbmNsdWRlIDxlcnJuby5o PgorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgZGF0 YWdlbmVyYWwKKyNkZWZpbmUgZmdldHMoc3RyaW5nYnVmLG1heCxmZCkgZGdfZmdldHMoc3RyaW5n YnVmLG1heCxmZCkKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisjaWZkZWYgUU5YNgorI2Rl ZmluZSByZWFkYmxvY2sga3JlYWRibG9jaworI2VuZGlmIC8qIFFOWDYgKi8KKworLyogRXh0ZXJu YWwgS2VybWl0IFZhcmlhYmxlcywgc2VlIGNrbWFpbi5jIGZvciBkZXNjcmlwdGlvbi4gKi8KKwor ZXh0ZXJuIHh4X3N0cnAgeHhzdHJpbmc7CisKK2V4dGVybiBpbnQgbG9jYWwsIHhpdHN0YSwgYmlu YXJ5LCBwYXJpdHksIGVzY2FwZSwgZmxvdywgY21kX3Jvd3MsIHR1cm4sCisgIHR1cm5jaCwgZHVw bGV4LCBja3hlY2gsIHNlc2xvZywgZGZsb2MsIGNuZmxnLCB0bGV2ZWwsIHBmbGFnLCBtc2dmbGcs IG1kbXR5cCwKKyAgemluY250LCBxdWlldCwgcmVwYXJzLCB0ZWNobywgbmV0d29yaywgbnp4b3B0 cywgd2hhdCwgZmlsZXBlZWssIHJlY3Vyc2l2ZTsKKworZXh0ZXJuIGludCB4YXNrbW9yZSwgdHRf cm93cywgdHRfY29scywgY21kX2NvbHMsIGdfbWF0Y2hkb3QsIGRpcmFjdGl2ZSwKKyAgeGNtZHNy YywgbnNjYW5maWxlLCByZWxpYWJsZSwgbm9saW5rcywgY21mbGdzOworCisjaWZkZWYgVk1TT1JV TklYCitleHRlcm4gaW50IHpnZnNfZGlyLCB6Z2ZzX2xpbms7CisjZW5kaWYgLyogVk1TT1JVTklY ICovCisKKyNpZmRlZiBDS19JRlJPCisgIGV4dGVybiBpbnQgcmVtb25seTsKKyNlbmRpZiAvKiBD S19JRlJPICovCisKKyNpZmRlZiBPUzIKK2V4dGVybiBpbnQgU3RhcnRlZEZyb21EaWFsZXIgOwor ZXh0ZXJuIGludCB2bW9kZTsKK2V4dGVybiBpbnQgazk1c3Rkb3V0OworI2lmbmRlZiBOVAorI2Rl ZmluZSBJTkNMX05PUE0KKyNkZWZpbmUgSU5DTF9WSU8gICAgICAgICAgICAgICAgICAgICAgICAv KiBOZWVkZWQgZm9yIGNrb2Nvbi5oICovCisjaW5jbHVkZSA8b3MyLmg+CisjdW5kZWYgQ09NTUVO VAorI2Vsc2UKKyNkZWZpbmUgQVBJUkVUIFVMT05HCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lu Y2x1ZGUgPHRhcGkuaD4KKyNpbmNsdWRlICJja250YXAuaCIKKyNlbmRpZiAvKiBOVCAqLworI2lu Y2x1ZGUgImNrb2Nvbi5oIgorI2VuZGlmIC8qIE9TMiAqLworCitleHRlcm4gbG9uZyB2ZXJudW0s IHNwZWVkOworZXh0ZXJuIGNoYXIgKnZlcnNpbywgKnByb3R2LCAqY2t4diwgKmNrenYsICpmbnN2 LCAqY29ubnYsICpkZnR0eSwgKmNtZHY7CitleHRlcm4gY2hhciAqZGlhbHYsICpsb2dpbnYsICpm b3JfZGVmW10sICp3aGlsX2RlZltdLCAqeGlmX2RlZltdLCAqc3dfZGVmW107CitleHRlcm4gY2hh ciAqZm96X2RlZltdOworZXh0ZXJuIGNoYXIgKmNreHN5cywgKmNrenN5czsKKyNpZm5kZWYgT1My CitleHRlcm4gY2hhciAqRElSQ01EOworI2lmbmRlZiBVTklYCitleHRlcm4gY2hhciAqREVMQ01E OworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KK2V4dGVybiBjaGFyIHR0bmFt ZVtdLCBmaWxuYW1bXTsKK2V4dGVybiBDSEFSIHNzdGF0ZSwgZmVvbDsKK2V4dGVybiBjaGFyICp6 aW5wdHI7CisKKyNpZmRlZiBVTklYCitleHRlcm4gY2hhciAqKiBtdGNoczsgICAgICAgICAgICAg ICAgICAgLyogenhwYW5kKCkgZmlsZSBsaXN0ICovCisjZW5kaWYgLyogVU5JWCAqLworCisjaWZu ZGVmIE5PWEZFUgorZXh0ZXJuIGludCBvb3B0cywgb21vZGUsIG9uYW1lLCBvcGF0aDsgIC8qIE8t UGFja2V0IG9wdGlvbnMgKi8KKworZXh0ZXJuIGludCBzdGRpbmYsIHNuZHNyYywgc2l6ZSwgcnBz aXosIHVycHNpeiwgZm5jbnYsIGZucnBhdGgsIGRpc3BsYSwKKyAgc3Rkb3VmLCBpc2d1ZXN0LCBw a3Rsb2csIG5maWxzLCBrZWVwLCBtYXhycHMsIGZibGtzaXosIGZyZWNsLCBmcmVjZm0sCisgIGF0 Y2FwciwgYXRkaXNvLCBzcHNpemYsIHNwc2l6LCBzcHNpenIsIHNwbWF4LCB3c2xvdHIsIHByZWZp eGluZywKKyAgZm5jYWN0LCBmbnNwYXRoLCBucHJvdG9zLCBnX3Byb3RvLCBnX3VycHNpeiwgZ19z cHNpemYsCisgIGdfc3BzaXosIGdfc3BzaXpyLCBnX3NwbWF4LCBnX3dzbG90ciwgZ19wcmVmaXhp bmcsIGdfZm5jYWN0LCBnX2ZuY252LAorICBnX2Zuc3BhdGgsIGdfZm5ycGF0aCwgeGZyeGxhLCBn X3hmcnhsYTsKKworZXh0ZXJuIGNoYXIgKmNtYXJnLCAqY21hcmcyOworCisjaWZuZGVmIE5PTVNF TkQgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVsdGlwbGUgU0VORCAqLworZXh0ZXJuIGNo YXIgKm1zZmlsZXNbXTsKKyNlbmRpZiAvKiBOT01TRU5EICovCitleHRlcm4gY2hhciBmc3BlY1td OyAgICAgICAgICAgICAgICAgICAgLyogTW9zdCByZWNlbnQgZmlsZXNwZWMgKi8KK2V4dGVybiBp bnQgZnNwZWNsZW47CisKKyNpZmRlZiBDS19UTVBESVIKK2V4dGVybiBpbnQgZl90bXBkaXI7ICAg ICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgY2hhbmdlZCB0ZW1wb3JhcmlseSAqLworZXh0 ZXJuIGNoYXIgc2F2ZGlyW107ICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgY3VycmVu dCBkaXJlY3RvcnkgKi8KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworZXh0ZXJuIHN0cnVjdCBr ZXl0YWIgcHJvdG9zW107ICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzICovCitl eHRlcm4gc3RydWN0IGNrX3AgcHRhYltOUFJPVE9TXTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwor I2lmZGVmIERDTURCVUYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlY2xhcmF0aW9ucyBm cm9tIGNtZCBwYWNrYWdlICovCitleHRlcm4gY2hhciAqY21kYnVmLCAqYXRtYnVmOyAgICAgICAg ICAgLyogQ29tbWFuZCBidWZmZXJzICovCisjZWxzZQorZXh0ZXJuIGNoYXIgY21kYnVmW10sIGF0 bWJ1ZltdOyAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVycyAqLworI2VuZGlmIC8qIERDTURCVUYg Ki8KKworZXh0ZXJuIGludCBub3B1c2g7CisKKyNpZm5kZWYgTk9TUEwKK2ludCBhc2tmbGFnID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBBU0stY2xhc3MgY29tbWFuZCBhY3RpdmUgKi8K K2ludCBlY2hvc3RhcnMgPSAwOwkJCS8qIEFTS1Egc2hvdWxkIGVjaG8gYXN0ZXJpc2tzICovCitl eHRlcm4gY2hhciAqKmFfcHRyW107CitleHRlcm4gaW50IGFfZGltW107CitleHRlcm4gY2hhciAq Km1feGFyZ1tdOworZXh0ZXJuIGludCBuX3hhcmdbXTsKK2V4dGVybiBzdHJ1Y3QgbXRhYiAqbWFj dGFiOworZXh0ZXJuIGludCBubWFjOworZXh0ZXJuIGxvbmcgY2tfYWxhcm07CitleHRlcm4gY2hh ciBhbHJtX2RhdGVbXSwgYWxybV90aW1lW107CitleHRlcm4gaW50IHhfaWZudW07CisjZW5kaWYg LyogTk9TUEwgKi8KKworZXh0ZXJuIGludCBpbnNlcnZlcjsgICAgICAgICAgICAgICAgICAgIC8q IEkgYW0gSUtTRCAqLworZXh0ZXJuIGludCBiYWNrZ3JkOyAgICAgICAgICAgICAgICAgICAgIC8q IEtlcm1pdCBleGVjdXRpbmcgaW4gYmFja2dyb3VuZCAqLworZXh0ZXJuIGNoYXIgcHNhdmVbXTsg ICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgJiByZXN0b3JpbmcgcHJvbXB0ICovCitl eHRlcm4gY2hhciAqdHA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGJ1ZmZl ciAqLworCitpbnQgcmVhZGJsb2NrID0gNDA5NjsgICAgICAgICAgICAgICAgICAgLyogUkVBRCBi dWZmZXIgc2l6ZSAqLworQ0hBUiAqIHJlYWRidWYgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8q IFBvaW50ZXIgdG8gcmVhZCBidWZmZXIgKi8KK2ludCByZWFkc2l6ZSA9IDA7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBOdW1iZXIgb2YgY2hhcnMgYWN0dWFsbHkgcmVhZCAqLworaW50IGdldGNt ZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVC1jbGFzcyBjb21tYW5kIHdhcyBn aXZlbiAqLworCitleHRlcm4gaW50IHpjaGtvZCwgemNoa2lkOworCisvKiAgQyBLIFUgVSBTIDYg LS0gICJVc2VyIEludGVyZmFjZSIgZm9yIFVuaXggS2VybWl0IChQYXJ0IDYpICAqLworCitzdHJ1 Y3Qga2V5dGFiIGRlbHRhYltdID0geyAgICAgICAgICAgICAgLyogREVMRVRFIENvbW1hbmQgT3B0 aW9ucyAqLworICAgIHsgIi9hbGwiLCAgICAgICAgICAgREVMX0FMTCwgIENNX0lOViB9LAorICAg IHsgIi9hZnRlciIsICAgICAgICAgREVMX0FGVCwgIENNX0FSRyB9LAorICAgIHsgIi9hc2siLCAg ICAgICAgICAgREVMX0FTSywgIDAgfSwKKyAgICB7ICIvYmVmb3JlIiwgICAgICAgIERFTF9CRUYs ICBDTV9BUkcgfSwKKyAgICB7ICIvZGlyZWN0b3JpZXMiLCAgIERFTF9ESVIsICAwIH0sCisgICAg eyAiL2RvdGZpbGVzIiwgICAgICBERUxfRE9ULCAgMCB9LAorICAgIHsgIi9leGNlcHQiLCAgICAg ICAgREVMX0VYQywgIENNX0FSRyB9LAorICAgIHsgIi9oZWFkaW5nIiwgICAgICAgREVMX0hERywg IDAgfSwKKyAgICB7ICIvbCIsICAgICAgICAgICAgIERFTF9MSVMsICBDTV9JTlZ8Q01fQUJSIH0s CisgICAgeyAiL2xhcmdlci10aGFuIiwgICBERUxfTEFSLCAgQ01fQVJHIH0sCisgICAgeyAiL2xp c3QiLCAgICAgICAgICBERUxfTElTLCAgMCB9LAorICAgIHsgIi9sb2ciLCAgICAgICAgICAgREVM X0xJUywgIENNX0lOViB9LAorICAgIHsgIi9ub2FzayIsICAgICAgICAgREVMX05BUywgIDAgfSwK KyAgICB7ICIvbm9kb3RmaWxlcyIsICAgIERFTF9OT0QsICAwIH0sCisgICAgeyAiL25vaGVhZGlu ZyIsICAgICBERUxfTk9ILCAgMCB9LAorICAgIHsgIi9ub2wiLCAgICAgICAgICAgREVMX05PTCwg IENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICIvbm9saXN0IiwgICAgICAgIERFTF9OT0wsICAwIH0s CisgICAgeyAiL25vbG9nIiwgICAgICAgICBERUxfTk9MLCAgQ01fSU5WIH0sCisgICAgeyAiL25v cGFnZSIsICAgICAgICBERUxfTk9QLCAgMCB9LAorICAgIHsgIi9ub3QtYWZ0ZXIiLCAgICAgREVM X05BRiwgIENNX0FSRyB9LAorICAgIHsgIi9ub3QtYmVmb3JlIiwgICAgREVMX05CRiwgIENNX0FS RyB9LAorICAgIHsgIi9ub3Qtc2luY2UiLCAgICAgREVMX05BRiwgIENNX0lOVnxDTV9BUkcgfSwK KyAgICB7ICIvcGFnZSIsICAgICAgICAgIERFTF9QQUcsICAwIH0sCisgICAgeyAiL3F1aWV0Iiwg ICAgICAgICBERUxfUVVJLCAgQ01fSU5WIH0sCisgICAgeyAiL3JlY3Vyc2l2ZSIsICAgICBERUxf UkVDLCAgMCB9LAorICAgIHsgIi9zaW11bGF0ZSIsICAgICAgREVMX1NJTSwgIDAgfSwKKyAgICB7 ICIvc2luY2UiLCAgICAgICAgIERFTF9BRlQsICBDTV9BUkd8Q01fSU5WIH0sCisgICAgeyAiL3Nt YWxsZXItdGhhbiIsICBERUxfU01BLCAgQ01fQVJHIH0sCisgICAgeyAiL3N1bW1hcnkiLCAgICAg ICBERUxfU1VNLCAgMCB9LAorICAgIHsgIi90cmVlIiwgICAgICAgICAgREVMX0FMTCwgIDAgfSwK KyAgICB7ICIvdHlwZSIsICAgICAgICAgIERFTF9UWVAsICBDTV9BUkcgfSwKKyAgICB7ICIvdmVy Ym9zZSIsICAgICAgIERFTF9WUkIsICBDTV9JTlYgfQorfTsKK2ludCBuZGVsdGFiID0gc2l6ZW9m KGRlbHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCisvKiAvUVVJRVQtL1ZFUkJPU0UgKC9M SVNULS9OT0xJU1QpICgvTE9HLS9OT0xPRykgdGFibGUgKi8KKworc3RydWN0IGtleXRhYiBxdnN3 dGFiW10gPSB7CisgICAgeyAiL2wiLCAgICAgICAgICAgREVMX0xJUywgIENNX0lOVnxDTV9BQlIg fSwKKyAgICB7ICIvbGlzdCIsICAgICAgICBERUxfTElTLCAgMCB9LAorICAgIHsgIi9sb2ciLCAg ICAgICAgIERFTF9MSVMsICBDTV9JTlYgfSwKKyAgICB7ICIvbm9sIiwgICAgICAgICBERUxfTk9M LCAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIi9ub2xpc3QiLCAgICAgIERFTF9OT0wsICAwIH0s CisgICAgeyAiL25vbG9nIiwgICAgICAgREVMX05PTCwgIENNX0lOViB9LAorICAgIHsgIi9xdWll dCIsICAgICAgIERFTF9RVUksICBDTV9JTlYgfSwKKyAgICB7ICIvdmVyYm9zZSIsICAgICBERUxf VlJCLCAgQ01fSU5WIH0KK307CitpbnQgbnF2c3d0YWIgPSBzaXplb2YocXZzd3RhYikvc2l6ZW9m KHN0cnVjdCBrZXl0YWIpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiByZW5hbXN3W10gPSB7Cisg ICAgeyAiL2NvbGxpc2lvbiIsICAgUkVOX09WVywgIENNX0FSRyB9LAorI2lmbmRlZiBOT1VOSUNP REUKKyAgICB7ICIvY29udmVydCIsICAgICBSRU5fWExBLCAgQ01fQVJHIH0sCisjZW5kaWYJLyog Tk9VTklDT0RFICovCisgICAgeyAiL2ZpeHNwYWNlcyIsICAgUkVOX1NQQSwgIENNX0FSRyB9LAor ICAgIHsgIi9sIiwgICAgICAgICAgIERFTF9MSVMsICBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAi L2xpc3QiLCAgICAgICAgREVMX0xJUywgIDAgICAgICB9LAorICAgIHsgIi9sb2ciLCAgICAgICAg IERFTF9MSVMsICBDTV9JTlYgfSwKKyAgICB7ICIvbG93ZXIiLCAgICAgICBSRU5fTE9XLCAgQ01f QVJHIH0sCisgICAgeyAiL25vbCIsICAgICAgICAgREVMX05PTCwgIENNX0lOVnxDTV9BQlIgfSwK KyAgICB7ICIvbm9saXN0IiwgICAgICBERUxfTk9MLCAgMCAgICAgIH0sCisgICAgeyAiL25vbG9n IiwgICAgICAgREVMX05PTCwgIENNX0lOViB9LAorICAgIHsgIi9xdWlldCIsICAgICAgIERFTF9R VUksICBDTV9JTlYgfSwKKyAgICB7ICIvcmVwbGFjZSIsICAgICBSRU5fUlBMLCAgQ01fQVJHIH0s CisgICAgeyAiL3NpbXVsYXRlIiwgICAgREVMX1NJTSwgIDAgICAgICB9LAorICAgIHsgIi91cHBl ciIsICAgICAgIFJFTl9VUFAsICBDTV9BUkcgfSwKKyAgICB7ICIvdmVyYm9zZSIsICAgICBERUxf VlJCLCAgQ01fSU5WIH0KK307CitzdGF0aWMgaW50IG5yZW5hbXN3ID0gc2l6ZW9mKHJlbmFtc3cp L3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgcmVuYW1zZXRb XSA9IHsKKyAgICB7ICJjb2xsaXNpb24iLCAgICBSRU5fT1ZXLCAgMCB9LAorICAgIHsgImxpc3Qi LCAgICAgICAgIERFTF9MSVMsICAwIH0KK307CitzdGF0aWMgaW50IG5yZW5hbXNldCA9IHNpemVv ZihyZW5hbXNldCkvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCisvKiBBcmdzIGZvciBSRU5BTUUg L0xPV0VSOiBhbmQgL1VQUEVSOiAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiByX3VwcGVyW10g PSB7CisgICAgeyAiYWxsIiwgICAxLCAwIH0sCisgICAgeyAibG93ZXIiLCAwLCAwIH0KK307CisK K3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJfbG93ZXJbXSA9IHsKKyAgICB7ICJhbGwiLCAgIDEsIDAg fSwKKyAgICB7ICJ1cHBlciIsIDAsIDAgfQorfTsKKworLyogQXJncyBmb3IgUkVOQU1FIC9DT0xM SVNJT04uLi4gKi8KKworI2RlZmluZSBSRU5YX0ZBSUwgMAorI2RlZmluZSBSRU5YX09WV1IgMQor I2RlZmluZSBSRU5YX1NLSVAgMgorCitzdGF0aWMgc3RydWN0IGtleXRhYiByX2NvbGxpc2lvbltd ID0geworICAgIHsgImZhaWwiLCAgICAgIFJFTlhfRkFJTCwgMCB9LAorICAgIHsgIm92ZXJ3cml0 ZSIsIFJFTlhfT1ZXUiwgMCB9LAorICAgIHsgInByb2NlZWQiLCAgIFJFTlhfU0tJUCwgQ01fSU5W IH0sCisgICAgeyAic2tpcCIsICAgICAgUkVOWF9TS0lQLCAwIH0KK307CitzdGF0aWMgaW50IG5y X2NvbGxpc2lvbiA9IHNpemVvZihyX2NvbGxpc2lvbikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwor CitzdHJ1Y3Qga2V5dGFiIGNvcHl0YWJbXSA9IHsKKyAgICB7ICIvYXBwZW5kIiwgICAgICA5OTgs ICAgICAgMCB9LAorI2lmbmRlZiBOT1NQTAorICAgIHsgIi9mcm9tYjY0IiwgICAgIDk5NywgICAg ICAwIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICIvbCIsICAgICAgICAgICBERUxfTElT LCAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIi9saXN0IiwgICAgICAgIERFTF9MSVMsICAwIH0s CisgICAgeyAiL2xvZyIsICAgICAgICAgREVMX0xJUywgIENNX0lOViB9LAorICAgIHsgIi9ub2wi LCAgICAgICAgIERFTF9OT0wsICBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL25vbGlzdCIsICAg ICAgREVMX05PTCwgIDAgfSwKKyAgICB7ICIvbm9sb2ciLCAgICAgICBERUxfTk9MLCAgQ01fSU5W IH0sCisgICAgeyAiL292ZXJ3cml0ZSIsICAgOTk0LCAgICAgIENNX0FSRyB9LAorI2lmbmRlZiBO T1hGRVIKKyAgICB7ICIvcHJlc2VydmUiLCAgICA5OTUsICAgICAgMCB9LAorI2VuZGlmCS8qIE5P WEZFUiAqLworICAgIHsgIi9xdWlldCIsICAgICAgIERFTF9RVUksICBDTV9JTlYgfSwKKyAgICB7 ICIvc3dhcC1ieXRlcyIsICA5OTksICAgICAgMCB9LAorI2lmbmRlZiBOT1NQTAorICAgIHsgIi90 b2I2NCIsICAgICAgIDk5NiwgICAgICAwIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICIv dmVyYm9zZSIsICAgICBERUxfVlJCLCAgQ01fSU5WIH0KK307CitpbnQgbmNvcHl0YWIgPSBzaXpl b2YoY29weXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCisjZGVmaW5lIE9WV19BTFdBWVMg MAorI2RlZmluZSBPVldfTkVWRVIgIDEKKyNkZWZpbmUgT1ZXX09MREVSICAyCisjZGVmaW5lIE9W V19ORVdFUiAgMworCitzdGF0aWMgc3RydWN0IGtleXRhYiBvdnd0YWJbXSA9IHsKKyAgICB7ICJh bHdheXMiLCBPVldfQUxXQVlTLCAwIH0sCisgICAgeyAibmV2ZXIiLCAgT1ZXX05FVkVSLCAwIH0s CisgICAgeyAibmV3ZXIiLCAgT1ZXX05FV0VSLCAwIH0sCisgICAgeyAib2xkZXIiLCAgT1ZXX09M REVSLCAwIH0KK307CitzdGF0aWMgaW50IG5vdnd0YWIgPSA0OworCisjaWZuZGVmIE5PWEZFUgor c3RhdGljIHN0cnVjdCBrZXl0YWIgZ2V0dGFiW10gPSB7ICAgICAgIC8qIEdFVCBvcHRpb25zICov CisgICAgeyAiL2FzLW5hbWUiLCAgICAgICAgIFNORF9BU04sIENNX0FSRyB9LAorICAgIHsgIi9i aW5hcnkiLCAgICAgICAgICBTTkRfQklOLCAwIH0sCisjaWZkZWYgQ0FMSUJSQVRFCisgICAgeyAi L2NhbGlicmF0ZSIsICAgICAgIFNORF9DQUwsIENNX0lOViB9LAorI2VuZGlmIC8qIENBTElCUkFU RSAqLworI2lmZGVmIFBJUEVTRU5ECisgICAgeyAiL2NvbW1hbmQiLCAgICAgICAgIFNORF9DTUQs IENNX1BTSCB9LAorI2VuZGlmIC8qIFBJUEVTRU5EICovCisgICAgeyAiL2RlbGV0ZSIsICAgICAg ICAgIFNORF9ERUwsIDAgfSwKKyAgICB7ICIvZXhjZXB0IiwgICAgICAgICAgU05EX0VYQywgQ01f QVJHIH0sCisgICAgeyAiL2ZpbGVuYW1lcyIsICAgICAgIFNORF9OQU0sIENNX0FSRyB9LAorI2lm ZGVmIFBJUEVTRU5ECisgICAgeyAiL2ZpbHRlciIsICAgICAgICAgIFNORF9GTFQsIENNX0FSR3xD TV9QU0ggfSwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmZGVmIFZNUworICAgIHsgIi9pbWFn ZSIsICAgICAgICAgICBTTkRfSU1HLCAwIH0sCisgICAgeyAiL2xhYmVsZWQiLCAgICAgICAgIFNO RF9MQkwsIDAgfSwKKyNlbHNlCisgICAgeyAiL2ltYWdlIiwgICAgICAgICAgIFNORF9CSU4sIENN X0lOViB9LAorI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIENLX1RNUERJUgorICAgIHsgIi9tb3Zl LXRvIiwgICAgICAgICBTTkRfTU9WLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8K KyAgICB7ICIvcGF0aG5hbWVzIiwgICAgICAgU05EX1BUSCwgQ01fQVJHIH0sCisgICAgeyAiL3Bp cGVzIiwgICAgICAgICAgIFNORF9QSVAsIENNX0FSR3xDTV9QU0ggfSwKKyAgICB7ICIvcXVpZXQi LCAgICAgICAgICAgU05EX1NISCwgMCB9LAorI2lmZGVmIENLX1JFU0VORAorICAgIHsgIi9yZWNv dmVyIiwgICAgICAgICBTTkRfUkVTLCAwIH0sCisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAg eyAiL3JlY3Vyc2l2ZSIsICAgICAgIFNORF9SRUMsIDAgfSwKKyAgICB7ICIvcmVuYW1lLXRvIiwg ICAgICAgU05EX1JFTiwgQ01fQVJHIH0sCisjaWZkZWYgQ09NTUVOVAorICAgIHsgIi9zbWFsbGVy LXRoYW4iLCAgICBTTkRfU01BLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAg eyAiL3N1YmRpcmVjdG9yaWVzIiwgIFNORF9SRUMsIENNX0lOViB9LAorICAgIHsgIi90ZXh0Iiwg ICAgICAgICAgICBTTkRfVFhULCAwIH0sCisgICAgeyAiL3RyYW5zcGFyZW50IiwgICAgIFNORF9Y UEEsIDAgfQorfTsKKyNkZWZpbmUgTkdFVFRBQiBzaXplb2YoZ2V0dGFiKS9zaXplb2Yoc3RydWN0 IGtleXRhYikKK3N0YXRpYyBpbnQgbmdldHRhYiA9IE5HRVRUQUI7CisKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIHJjdnRhYltdID0geyAgICAgICAvKiBSRUNFSVZFIG9wdGlvbnMgKi8KKyAgICB7ICIv YXMtbmFtZSIsICAgICAgICAgU05EX0FTTiwgQ01fQVJHIH0sCisgICAgeyAiL2JpbmFyeSIsICAg ICAgICAgIFNORF9CSU4sIDAgfSwKKyNpZmRlZiBDQUxJQlJBVEUKKyAgICB7ICIvY2FsaWJyYXRl IiwgICAgICAgU05EX0NBTCwgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisjaWZk ZWYgUElQRVNFTkQKKyAgICB7ICIvY29tbWFuZCIsICAgICAgICAgU05EX0NNRCwgQ01fUFNIIH0s CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyAgICB7ICIvZXhjZXB0IiwgICAgICAgICAgU05EX0VY QywgQ01fQVJHIH0sCisgICAgeyAiL2ZpbGVuYW1lcyIsICAgICAgIFNORF9OQU0sIENNX0FSRyB9 LAorI2lmZGVmIFBJUEVTRU5ECisgICAgeyAiL2ZpbHRlciIsICAgICAgICAgIFNORF9GTFQsIENN X0FSR3xDTV9QU0ggfSwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmZGVmIFZNUworICAgIHsg Ii9pbWFnZSIsICAgICAgICAgICBTTkRfSU1HLCAwIH0sCisgICAgeyAiL2xhYmVsZWQiLCAgICAg ICAgIFNORF9MQkwsIDAgfSwKKyNlbHNlCisgICAgeyAiL2ltYWdlIiwgICAgICAgICAgIFNORF9C SU4sIENNX0lOViB9LAorI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIENLX1RNUERJUgorICAgIHsg Ii9tb3ZlLXRvIiwgICAgICAgICBTTkRfTU9WLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDS19UTVBE SVIgKi8KKyAgICB7ICIvcGF0aG5hbWVzIiwgICAgICAgU05EX1BUSCwgQ01fQVJHIH0sCisgICAg eyAiL3BpcGVzIiwgICAgICAgICAgIFNORF9QSVAsIENNX0FSR3xDTV9QU0ggfSwKKyNpZmRlZiBD S19YWVoKKyAgICB7ICIvcHJvdG9jb2wiLCAgICAgICAgU05EX1BSTywgQ01fQVJHIH0sCisjZWxz ZQorICAgIHsgIi9wcm90b2NvbCIsICAgICAgICBTTkRfUFJPLCBDTV9BUkd8Q01fSU5WIH0sCisj ZW5kaWYgLyogQ0tfWFlaICovCisgICAgeyAiL3F1aWV0IiwgICAgICAgICAgIFNORF9TSEgsIDAg fSwKKyAgICB7ICIvcmVjdXJzaXZlIiwgICAgICAgU05EX1JFQywgMCB9LAorICAgIHsgIi9yZW5h bWUtdG8iLCAgICAgICBTTkRfUkVOLCBDTV9BUkcgfSwKKyAgICB7ICIvdGV4dCIsICAgICAgICAg ICAgU05EX1RYVCwgMCB9LAorICAgIHsgIi90cmFuc3BhcmVudCIsICAgICBTTkRfWFBBLCAwIH0K K307CisjZGVmaW5lIE5SQ1ZUQUIgc2l6ZW9mKHJjdnRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIp CitzdGF0aWMgaW50IG5yY3Z0YWIgPSBOUkNWVEFCOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisv KiBXQUlUIHRhYmxlICovCisKKyNkZWZpbmUgV0FJVF9GSUwgOTk3CisjZGVmaW5lIFdBSVRfTURN IDk5OAorCitzdHJ1Y3Qga2V5dGFiIHdhaXR0YWJbXSA9IHsKKyAgICB7ICJjZCIsICAgICAgICAg ICAgQk1fRENELCAgIENNX0lOViB9LCAvKiAoQ2FycmllciBEZXRlY3QpICovCisgICAgeyAiY3Rz IiwgICAgICAgICAgIEJNX0NUUywgICBDTV9JTlYgfSwgLyogKENsZWFyIFRvIFNlbmQpICAqLwor ICAgIHsgImRzciIsICAgICAgICAgICBCTV9EU1IsICAgQ01fSU5WIH0sIC8qIChEYXRhIFNldCBS ZWFkeSkgKi8KKyAgICB7ICJmaWxlIiwgICAgICAgICAgV0FJVF9GSUwsIDAgfSwgICAgICAvKiBO ZXcgY2F0ZWdvcnkgc2VsZWN0b3Iga2V5d29yZHMgKi8KKyAgICB7ICJtb2RlbS1zaWduYWxzIiwg V0FJVF9NRE0sIDAgfSwgICAgICAvKiAuLi4gKi8KKyAgICB7ICJyaSIsICAgICAgICAgICAgQk1f Uk5HLCAgIENNX0lOViB9ICAvKiAoUmluZyBJbmRpY2F0b3IpICovCit9OworaW50IG53YWl0dGFi ID0gKHNpemVvZih3YWl0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKy8qIE1vZGVt IHNpZ25hbCB0YWJsZSAqLworCitzdHJ1Y3Qga2V5dGFiIG1zdGFiW10gPSB7CisgICAgeyAiY2Qi LCAgICBCTV9EQ0QsIDAgfSwgICAgICAgICAgICAgLyogQ2FycmllciBEZXRlY3QgKi8KKyAgICB7 ICJjdHMiLCAgIEJNX0NUUywgMCB9LCAgICAgICAgICAgICAvKiBDbGVhciBUbyBTZW5kICAqLwor ICAgIHsgImRzciIsICAgQk1fRFNSLCAwIH0sICAgICAgICAgICAgIC8qIERhdGEgU2V0IFJlYWR5 ICovCisgICAgeyAicmkiLCAgICBCTV9STkcsIDAgfSAgICAgICAgICAgICAgLyogUmluZyBJbmRp Y2F0b3IgKi8KK307CitpbnQgbm1zID0gKHNpemVvZihtc3RhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOworCisjZGVmaW5lIFdGX01PRCAxCisjZGVmaW5lIFdGX0RFTCAyCisjZGVmaW5lIFdG X0NSRSAzCisKK3N0cnVjdCBrZXl0YWIgd2Zzd2lbXSA9IHsgICAgICAgICAgICAgICAvKiBXQUlU IEZJTEUgc3dpdGNoZXMgKi8KKyAgICB7ICJjcmVhdGlvbiIsICAgICBXRl9DUkUsIDAgfSwgICAg ICAvKiBXYWl0IGZvciBmaWxlIHRvIGJlIGNyZWF0ZWQgKi8KKyAgICB7ICJkZWxldGlvbiIsICAg ICBXRl9ERUwsIDAgfSwgICAgICAvKiBXYWl0IGZvciBmaWxlIHRvIGJlIGRlbGV0ZWQgKi8KKyAg ICB7ICJtb2RpZmljYXRpb24iLCBXRl9NT0QsIDAgfSAgICAgICAvKiBXYWl0IGZvciBmaWxlIHRv IGJlIG1vZGlmaWVkICovCit9OworaW50IG53ZnN3aSA9IChzaXplb2Yod2Zzd2kpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsKKworI2lmbmRlZiBOT1NQTAorc3RydWN0IGtleXRhYiBhc2d0YWJb XSA9IHsgICAgICAgICAgICAgIC8qIEFzc2lnbm1lbnQgb3BlcmF0b3JzIGZvciAiLiIgKi8KKyAg ICB7ICI6Oj0iLCAyLCAwIH0sICAgICAgICAgICAgICAgICAgICAvKiBBU1NJR04gYW5kIEVWQUxV QVRFICovCisgICAgeyAiOj0iLCAgMSwgMCB9LCAgICAgICAgICAgICAgICAgICAgLyogQVNTSUdO ICovCisgICAgeyAiPSIsICAgMCwgMCB9ICAgICAgICAgICAgICAgICAgICAgLyogREVGSU5FICov Cit9OworaW50IG5hc2d0YWIgPSAoc2l6ZW9mKGFzZ3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOworCitzdHJ1Y3Qga2V5dGFiIG9wbnRhYltdID0geworI2lmbmRlZiBOT1BVU0gKKyAgICB7 ICIhcmVhZCIsICBPUE5fUElfUiwgQ01fSU5WIH0sCisgICAgeyAiIXdyaXRlIiwgT1BOX1BJX1cs IENNX0lOViB9LAorI2VuZGlmIC8qIE5PUFVTSCAqLworICAgIHsgImFwcGVuZCIsIE9QTl9GSV9B LCAwIH0sCisgICAgeyAiaG9zdCIsICAgT1BOX05FVCwgIDAgfSwKKyNpZmRlZiBPUzIKKyAgICB7 ICJsaW5lIiwgICBPUE5fU0VSLCAgQ01fSU5WIH0sCisgICAgeyAicG9ydCIsICAgT1BOX1NFUiwg IDAgfSwKKyNlbHNlCisgICAgeyAibGluZSIsICAgT1BOX1NFUiwgIDAgfSwKKyAgICB7ICJwb3J0 IiwgICBPUE5fU0VSLCAgQ01fSU5WIH0sCisjZW5kaWYgLyogT1MyICovCisgICAgeyAicmVhZCIs ICAgT1BOX0ZJX1IsIDAgfSwKKyAgICB7ICJ3cml0ZSIsICBPUE5fRklfVywgMCB9Cit9OworaW50 IG5vcG4gPSAoc2l6ZW9mKG9wbnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisvKiBJ RiBjb25kaXRpb25zICovCisKKyNkZWZpbmUgIFhYSUZDTyAwICAgICAgIC8qIElGIENPVU5UICov CisjZGVmaW5lICBYWElGRVIgMSAgICAgICAvKiBJRiBFUlJPUkxFVkVMICovCisjZGVmaW5lICBY WElGRVggMiAgICAgICAvKiBJRiBFWElTVCAqLworI2RlZmluZSAgWFhJRkZBIDMgICAgICAgLyog SUYgRkFJTFVSRSAqLworI2RlZmluZSAgWFhJRlNVIDQgICAgICAgLyogSUYgU1VDQ0VTUyAqLwor I2RlZmluZSAgWFhJRk5PIDUgICAgICAgLyogSUYgTk9UICovCisjZGVmaW5lICBYWElGREUgNiAg ICAgICAvKiBJRiBERUZJTkVEICovCisjZGVmaW5lICBYWElGRVEgNyAgICAgICAvKiBJRiBFUVVB TCAoc3RyaW5ncykgKi8KKyNkZWZpbmUgIFhYSUZBRSA4ICAgICAgIC8qIElGID0gKG51bWJlcnMp ICovCisjZGVmaW5lICBYWElGTFQgOSAgICAgICAvKiBJRiA8IChudW1iZXJzKSAqLworI2RlZmlu ZSAgWFhJRkdUIDEwICAgICAgLyogSUYgPiAobnVtYmVycykgKi8KKyNkZWZpbmUgIFhYSUZMTCAx MSAgICAgIC8qIElGIExleGljYWxseSBMZXNzIFRoYW4gKHN0cmluZ3MpICovCisjZGVmaW5lICBY WElGTEcgMTIgICAgICAvKiBJRiBMZXhpY2FsbHkgR3JlYXRlciBUaGFuIChzdHJpbmdzKSAqLwor I2RlZmluZSAgWFhJRkVPIDEzICAgICAgLyogSUYgRU9GIChSRUFEIGZpbGUpICovCisjZGVmaW5l ICBYWElGQkcgMTQgICAgICAvKiBJRiBCQUNLR1JPVU5EICovCisjZGVmaW5lICBYWElGTlUgMTUg ICAgICAvKiBJRiBOVU1FUklDICovCisjZGVmaW5lICBYWElGRkcgMTYgICAgICAvKiBJRiBGT1JF R1JPVU5EICovCisjZGVmaW5lICBYWElGREkgMTcgICAgICAvKiBJRiBESVJFQ1RPUlkgKi8KKyNk ZWZpbmUgIFhYSUZORSAxOCAgICAgIC8qIElGIE5FV0VSICovCisjZGVmaW5lICBYWElGUk8gMTkg ICAgICAvKiBJRiBSRU1PVEUtT05MWSAqLworI2RlZmluZSAgWFhJRkFMIDIwICAgICAgLyogSUYg QUxBUk0gKi8KKyNkZWZpbmUgIFhYSUZTRCAyMSAgICAgIC8qIElGIFNUQVJURUQtRlJPTS1ESUFM RVIgKi8KKyNkZWZpbmUgIFhYSUZUUiAyMiAgICAgIC8qIElGIFRSVUUgKi8KKyNkZWZpbmUgIFhY SUZOVCAyMyAgICAgIC8qIElGIEZBTFNFICovCisjZGVmaW5lICBYWElGVE0gMjQgICAgICAvKiBJ RiBURVJNSU5BTC1NQUNSTyAqLworI2RlZmluZSAgWFhJRkVNIDI1ICAgICAgLyogSUYgRU1VTEFU SU9OICovCisjZGVmaW5lICBYWElGT1AgMjYgICAgICAvKiBJRiBPUEVOICovCisjZGVmaW5lICBY WElGTEUgMjcgICAgICAvKiBJRiA8PSAqLworI2RlZmluZSAgWFhJRkdFIDI4ICAgICAgLyogSUYg Pj0gKi8KKyNkZWZpbmUgIFhYSUZJUCAyOSAgICAgIC8qIElGIElOUEFUSCAqLworI2RlZmluZSAg WFhJRlRBIDMwICAgICAgLyogSUYgVEFQSSAqLworI2RlZmluZSAgWFhJRk1BIDMxICAgICAgLyog SUYgTUFUQ0ggKi8KKyNkZWZpbmUgIFhYSUZGTCAzMiAgICAgIC8qIElGIEZMQUcgKi8KKyNkZWZp bmUgIFhYSUZBQiAzMyAgICAgIC8qIElGIEFCU09MVVRFICovCisjZGVmaW5lICBYWElGQVYgMzQg ICAgICAvKiBJRiBBVkFJTEFCTEUgKi8KKyNkZWZpbmUgIFhYSUZBVCAzNSAgICAgIC8qIElGIEFT S1RJTUVPVVQgKi8KKyNkZWZpbmUgIFhYSUZSRCAzNiAgICAgIC8qIElGIFJFQURBQkxFICovCisj ZGVmaW5lICBYWElGV1IgMzcgICAgICAvKiBJRiBXUklURUFCTEUgKi8KKyNkZWZpbmUgIFhYSUZB TiAzOCAgICAgIC8qIElGIC4uLiBBTkQgLi4uICovCisjZGVmaW5lICBYWElGT1IgMzkgICAgICAv KiBJRiAuLi4gT1IgLi4uICovCisjZGVmaW5lICBYWElGTFAgNDAgICAgICAvKiBJRiBsZWZ0IHBh cmVudGhlc2lzICovCisjZGVmaW5lICBYWElGUlAgNDEgICAgICAvKiBJRiByaWdodCBwYXJlbnRo ZXNpcyAqLworI2RlZmluZSAgWFhJRk5RIDQyICAgICAgLyogSUYgIT0gKD09ICJOT1QgPSIpICov CisjZGVmaW5lICBYWElGUVUgNDMgICAgICAvKiBJRiBRVUlFVCAqLworI2RlZmluZSAgWFhJRkNL IDQ0ICAgICAgLyogSUYgQy1LRVJNSVQgKi8KKyNkZWZpbmUgIFhYSUZLOSA0NSAgICAgIC8qIElG IEstOTUgKi8KKyNkZWZpbmUgIFhYSUZNUyA0NiAgICAgIC8qIElGIE1TLUtFUk1JVCAqLworI2Rl ZmluZSAgWFhJRldJIDQ3ICAgICAgLyogSUYgV0lMRCAqLworI2RlZmluZSAgWFhJRkxPIDQ4ICAg ICAgLyogSUYgTE9DQUwgKi8KKyNkZWZpbmUgIFhYSUZDTSA0OSAgICAgIC8qIElGIENPTU1BTkQg Ki8KKyNkZWZpbmUgIFhYSUZGUCA1MCAgICAgIC8qIElGIEZMT0FUICovCisjZGVmaW5lICBYWElG SUsgNTEgICAgICAvKiBJRiBJS1MgKi8KKyNkZWZpbmUgIFhYSUZLQiA1MiAgICAgIC8qIElGIEtC SElUICovCisjZGVmaW5lICBYWElGS0cgNTMgICAgICAvKiBJRiBLRVJCQU5HICovCisjZGVmaW5l ICBYWElGVkUgNTQgICAgICAvKiBJRiBWRVJTSU9OICovCisjZGVmaW5lICBYWElGREMgNTUgICAg ICAvKiBJRiBERUNMQVJFRCAqLworI2RlZmluZSAgWFhJRkdVIDU2ICAgICAgLyogSUYgR1VJICov CisjZGVmaW5lICBYWElGTE4gNTcJLyogSUYgTElOSyAqLworI2RlZmluZSAgWFhJRkRCIDU4CS8q IElGIERFQlVHICovCisKK3N0cnVjdCBrZXl0YWIgaWZ0YWJbXSA9IHsgICAgICAgICAgICAgICAv KiBJRiBjb21tYW5kcyAqLworICAgIHsgIiEiLCAgICAgICAgICBYWElGTk8sIDAgfSwKKyAgICB7 ICIhPSIsICAgICAgICAgWFhJRk5RLCAwIH0sCisgICAgeyAiJiYiLCAgICAgICAgIFhYSUZBTiwg MCB9LAorICAgIHsgIigiLCAgICAgICAgICBYWElGTFAsIDAgfSwKKyAgICB7ICIpIiwgICAgICAg ICAgWFhJRlJQLCAwIH0sCisgICAgeyAiPCIsICAgICAgICAgIFhYSUZMVCwgMCB9LAorICAgIHsg Ijw9IiwgICAgICAgICBYWElGTEUsIDAgfSwKKyAgICB7ICI9IiwgICAgICAgICAgWFhJRkFFLCAw IH0sCisgICAgeyAiPT0iLCAgICAgICAgIFhYSUZBRSwgQ01fSU5WIH0sCisgICAgeyAiPiIsICAg ICAgICAgIFhYSUZHVCwgMCB9LAorICAgIHsgIj49IiwgICAgICAgICBYWElGR0UsIDAgfSwKKyAg ICB7ICJhYnNvbHV0ZSIsICAgWFhJRkFCLCAwIH0sCisgICAgeyAiYWxhcm0iLCAgICAgIFhYSUZB TCwgMCB9LAorICAgIHsgImFuZCIsICAgICAgICBYWElGQU4sIDAgfSwKKyAgICB7ICJhc2t0aW1l b3V0IiwgWFhJRkFULCAwIH0sCisgICAgeyAiYXZhaWxhYmxlIiwgIFhYSUZBViwgMCB9LAorICAg IHsgImJhY2tncm91bmQiLCBYWElGQkcsIDAgfSwKKyAgICB7ICJjLWtlcm1pdCIsICAgWFhJRkNL LCAwIH0sCisgICAgeyAiY29tbWFuZCIsICAgIFhYSUZDTSwgMCB9LAorICAgIHsgImNvdW50Iiwg ICAgICBYWElGQ08sIDAgfSwKKyAgICB7ICJkY2wiLCAgICAgICAgWFhJRkRDLCBDTV9JTlYgfSwK KyAgICB7ICJkZWJ1ZyIsICAgICAgWFhJRkRCLCAwIH0sCisgICAgeyAiZGVjbGFyZWQiLCAgIFhY SUZEQywgMCB9LAorICAgIHsgImRlZmluZWQiLCAgICBYWElGREUsIDAgfSwKKyNpZmRlZiBDS19U TVBESVIKKyAgICB7ICJkaXJlY3RvcnkiLCAgWFhJRkRJLCAwIH0sCisjZW5kaWYgLyogQ0tfVE1Q RElSICovCisgICAgeyAiZW11bGF0aW9uIiwgIFhYSUZFTSwgMCB9LAorI2lmZGVmIENPTU1FTlQK KyAgICB7ICJlb2YiLCAgICAgICAgWFhJRkVPLCAwIH0sCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIHsgImVxdWFsIiwgICAgICBYWElGRVEsIDAgfSwKKyAgICB7ICJlcnJvciIsICAgICAgWFhJ RkZBLCBDTV9JTlYgfSwKKyAgICB7ICJleGlzdCIsICAgICAgWFhJRkVYLCAwIH0sCisgICAgeyAi ZmFpbHVyZSIsICAgIFhYSUZGQSwgMCB9LAorICAgIHsgImZhbHNlIiwgICAgICBYWElGTlQsIDAg fSwKKyAgICB7ICJmbGFnIiwgICAgICAgWFhJRkZMLCAwIH0sCisjaWZkZWYgQ0tGTE9BVAorICAg IHsgImZsb2F0IiwgICAgICBYWElGRlAsIDAgfSwKKyNlbmRpZiAvKiBDS0ZMT0FUICovCisgICAg eyAiZm9yZWdyb3VuZCIsIFhYSUZGRywgMCB9LAorI2lmZGVmIE9TMgorICAgIHsgImd1aSIsICAg ICAgICBYWElGR1UsIDAgfSwKKyNlbHNlCisgICAgeyAiZ3VpIiwgICAgICAgIFhYSUZHVSwgQ01f SU5WIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgSUtTRAorICAgIHsgImlrc2QiLCAgICAg ICBYWElGSUssIDAgfSwKKyNlbHNlCisgICAgeyAiaWtzZCIsICAgICAgIFhYSUZJSywgQ01fSU5W IH0sCisjZW5kaWYgLyogSUtTRCAqLworICAgIHsgImludGVnZXIiLCAgICBYWElGTlUsIENNX0lO ViB9LAorICAgIHsgImstOTUiLCAgICAgICBYWElGSzksIDAgfSwKKyAgICB7ICJrYmhpdCIsICAg ICAgWFhJRktCLCAwIH0sCisjaWZkZWYgVU5JWAorICAgIHsgImtlcmJhbmciLCAgICBYWElGS0cs IDAgfSwKKyNlbHNlCisgICAgeyAia2VyYmFuZyIsICAgIFhYSUZLRywgQ01fSU5WIH0sCisjZW5k aWYgLyogVU5JWCAqLworICAgIHsgImxndCIsICAgICAgICBYWElGTEcsIDAgfSwKKyNpZmRlZiBV TklYCisgICAgeyAibGluayIsICAgICAgIFhYSUZMTiwgMCB9LAorI2VuZGlmIC8qIFVOSVggKi8K KyAgICB7ICJsbHQiLCAgICAgICAgWFhJRkxMLCAwIH0sCisgICAgeyAibG9jYWwiLCAgICAgIFhY SUZMTywgMCB9LAorICAgIHsgIm1hdGNoIiwgICAgICBYWElGTUEsIDAgfSwKKyAgICB7ICJtcy1r ZXJtaXQiLCAgWFhJRk1TLCBDTV9JTlYgfSwKKyNpZmRlZiBaRkNEQVQKKyAgICB7ICJuZXdlciIs ICAgICAgWFhJRk5FLCAwIH0sCisjZW5kaWYgLyogWkZDREFUICovCisgICAgeyAibm90IiwgICAg ICAgIFhYSUZOTywgMCB9LAorICAgIHsgIm51bWVyaWMiLCAgICBYWElGTlUsIDAgfSwKKyAgICB7 ICJvayIsICAgICAgICAgWFhJRlNVLCBDTV9JTlYgfSwKKyAgICB7ICJvcGVuIiwgICAgICAgWFhJ Rk9QLCAwIH0sCisgICAgeyAib3IiLCAgICAgICAgIFhYSUZPUiwgMCB9LAorICAgIHsgInF1aWV0 IiwgICAgICBYWElGUVUsIDAgfSwKKyAgICB7ICJyZWFkYWJsZSIsICAgWFhJRlJELCAwIH0sCisg ICAgeyAicmVtb3RlLW9ubHkiLFhYSUZSTywgMCB9LAorICAgIHsgInN0YXJ0ZWQtZnJvbS1kaWFs ZXIiLFhYSUZTRCwgQ01fSU5WIH0sCisgICAgeyAic3VjY2VzcyIsICAgIFhYSUZTVSwgMCB9LAor ICAgIHsgInRhcGkiLCAgICAgICBYWElGVEEsIDAgfSwKKyNpZmRlZiBPUzIKKyAgICB7ICJ0ZXJt aW5hbC1tYWNybyIsIFhYSUZUTSwgMCB9LAorI2Vsc2UKKyAgICB7ICJ0ZXJtaW5hbC1tYWNybyIs IFhYSUZUTSwgQ01fSU5WIH0sCisjZW5kaWYgLyogT1MyICovCisgICAgeyAidHJ1ZSIsICAgICAg IFhYSUZUUiwgMCB9LAorICAgIHsgInZlcnNpb24iLCAgICBYWElGVkUsIDAgfSwKKyAgICB7ICJ3 aWxkIiwgICAgICAgWFhJRldJLCAwIH0sCisgICAgeyAid3JpdGVhYmxlIiwgIFhYSUZXUiwgMCB9 LAorICAgIHsgInx8IiwgICAgICAgICBYWElGT1IsIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307 CitpbnQgbmlmID0gKHNpemVvZihpZnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK Kworc3RydWN0IGtleXRhYiBpb3RhYltdID0geyAgICAgICAgICAgICAgIC8qIEtleXdvcmRzIGZv ciBJRiBPUEVOICovCisgICAgeyAiIXJlYWQtZmlsZSIsICAgICAgWlJGSUxFLCBDTV9JTlYgfSwK KyAgICB7ICIhd3JpdGUtZmlsZSIsICAgICBaV0ZJTEUsIENNX0lOViB9LAorICAgIHsgImFwcGVu ZC1maWxlIiwgICAgIFpXRklMRSwgQ01fSU5WIH0sCisgICAgeyAiY29ubmVjdGlvbiIsICAgICAg ODg4OCwgICAwIH0sCisjaWZkZWYgQ0tMT0dESUFMCisgICAgeyAiY3gtbG9nIiwgICAgICAgICAg Nzc3NywgICAwIH0sCisjZW5kaWYgLyogQ0tMT0dESUFMICovCisgICAgeyAiZGVidWctbG9nIiwg ICAgICAgWkRGSUxFLCAwIH0sCisgICAgeyAiZXJyb3IiLCAgICAgICAgICAgOTk5OSwgICAwIH0s CisgICAgeyAicGFja2V0LWxvZyIsICAgICAgWlBGSUxFLCAwIH0sCisgICAgeyAicmVhZC1maWxl IiwgICAgICAgWlJGSUxFLCAwIH0sCisgICAgeyAic2NyZWVuIiwgICAgICAgICAgWlNURElPLCAw IH0sCisgICAgeyAic2Vzc2lvbi1sb2ciLCAgICAgWlNGSUxFLCAwIH0sCisgICAgeyAidHJhbnNh Y3Rpb24tbG9nIiwgWlRGSUxFLCAwIH0sCisgICAgeyAid3JpdGUtZmlsZSIsICAgICAgWldGSUxF LCAwIH0KK307CitpbnQgbmlvdCA9IChzaXplb2YoaW90YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisvKiBWYXJpYWJsZXMgYW5kIHByb3RvdHlwZXMg Ki8KKworX1BST1RPVFlQKHN0YXRpYyBpbnQgZG95bWRpciwoaW50KSk7CitfUFJPVE9UWVAoc3Rh dGljIGludCByZW5hbWVvbmUsKGNoYXIgKixjaGFyICosCisJCQkJaW50LGludCxpbnQsaW50LGlu dCxpbnQsaW50LGludCxpbnQsaW50LGludCkpOworCisjaWZkZWYgTkVUQ09OTgorZXh0ZXJuIGlu dCBubmV0ZGlyOyAgICAgICAgICAgICAgICAgICAgIC8qIEhvdyBtYW55IG5ldHdvcmsgZGlyZWN0 b3JpZXMgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisjaWZkZWYgQ0tfU0VDVVJJVFkKK19QUk9U T1RZUChpbnQgY2tfa3JiNF9pc19pbnN0YWxsZWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgY2tf a3JiNV9pc19pbnN0YWxsZWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgY2tfbnRsbV9pc19pbnN0 YWxsZWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgY2tfc3JwX2lzX2luc3RhbGxlZCwodm9pZCkp OworX1BST1RPVFlQKGludCBja19zc2xlYXlfaXNfaW5zdGFsbGVkLCh2b2lkKSk7CitfUFJPVE9U WVAoaW50IGNrX3NzaF9pc19pbnN0YWxsZWQsKHZvaWQpKTsKK19QUk9UT1RZUChpbnQgY2tfY3J5 cHRfaXNfaW5zdGFsbGVkLCh2b2lkKSk7CisjZWxzZQorI2RlZmluZSBja19rcmI0X2lzX2luc3Rh bGxlZCgpICgwKQorI2RlZmluZSBja19rcmI1X2lzX2luc3RhbGxlZCgpICgwKQorI2RlZmluZSBj a19udGxtX2lzX2luc3RhbGxlZCgpICgwKQorI2RlZmluZSBja19zcnBfaXNfaW5zdGFsbGVkKCkg KDApCisjZGVmaW5lIGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKSAoMCkKKyNkZWZpbmUgY2tfc3No X2lzX2luc3RhbGxlZCgpICgwKQorI2RlZmluZSBja19jcnlwdF9pc19pbnN0YWxsZWQoKSAoMCkK KyNlbmRpZiAvKiBDS19TRUNVUklUWSAqLworCisjZGVmaW5lIEFWX0tSQjQgICAxCisjZGVmaW5l IEFWX0tSQjUgICAyCisjZGVmaW5lIEFWX05UTE0gICAzCisjZGVmaW5lIEFWX1NSUCAgICA0Cisj ZGVmaW5lIEFWX1NTTCAgICA1CisjZGVmaW5lIEFWX0NSWVBUTyA2CisjZGVmaW5lIEFWX1NTSCAg ICA3CisKK3N0cnVjdCBrZXl0YWIgYXZhaWx0YWJbXSA9IHsgICAgICAgICAgICAgLyogQXZhaWxh YmxlIGF1dGhlbnRpY2F0aW9uIHR5cGVzICovCisgICAgeyAiY3J5cHRvIiwgICAgIEFWX0NSWVBU TywgQ01fSU5WIH0sIC8qIGFuZCBlbmNyeXB0aW9uICovCisgICAgeyAiZW5jcnlwdGlvbiIsIEFW X0NSWVBUTywgMCB9LAorICAgIHsgIms0IiwgICAgICAgICBBVl9LUkI0LCAgIENNX0lOViB9LAor ICAgIHsgIms1IiwgICAgICAgICBBVl9LUkI1LCAgIENNX0lOViB9LAorICAgIHsgImtlcmJlcm9z NCIsICBBVl9LUkI0LCAgIDAgfSwKKyAgICB7ICJrZXJiZXJvczUiLCAgQVZfS1JCNSwgICAwIH0s CisgICAgeyAia3JiNCIsICAgICAgIEFWX0tSQjQsICAgQ01fSU5WIH0sCisgICAgeyAia3JiNSIs ICAgICAgIEFWX0tSQjUsICAgQ01fSU5WIH0sCisgICAgeyAibnRsbSIsICAgICAgIEFWX05UTE0s ICAgMCB9LAorICAgIHsgInNycCIsICAgICAgICBBVl9TUlAsICAgIDAgfSwKKyAgICB7ICJzc2gi LCAgICAgICAgQVZfU1NILCAgICAwIH0sCisgICAgeyAic3NsIiwgICAgICAgIEFWX1NTTCwgICAg MCB9LAorICAgIHsgInRscyIsICAgICAgICBBVl9TU0wsICAgIDAgfSwKKyAgICB7ICIiLCAgICAg ICAgICAgMCwgICAgICAgICAwIH0KK307CitpbnQgYXZhaWx0YWJuID0gc2l6ZW9mKGF2YWlsdGFi KS9zaXplb2Yoc3RydWN0IGtleXRhYiktMTsKKworI2lmbmRlZiBOT0RJQUwKK19QUk9UT1RZUChz dGF0aWMgaW50IGRkY3Z0LCAoY2hhciAqLCBGSUxFICosIGludCkgKTsKK19QUk9UT1RZUChzdGF0 aWMgaW50IGRuY3Z0LCAoaW50LCBpbnQsIGludCwgaW50KSApOworX1BST1RPVFlQKGNoYXIgKiBn ZXRkbmFtZSwgKHZvaWQpICk7CisKK3N0YXRpYyBpbnQgcGFydGlhbCAgPSAwOyAgICAgICAgICAg ICAgICAvKiBGb3IgcGFydGlhbCBkaWFsICovCitzdGF0aWMgY2hhciAqZHNjb3B5ID0gTlVMTDsK K2ludCBkaWFsdHlwZSA9IC0xOworCitjaGFyICpkaWFsbnVtID0gKGNoYXIgKikwOyAgICAgICAg ICAgICAgLyogUmVtZW1iZXIgRElBTCBudW1iZXIgZm9yIFJFRElBTCAqLworaW50IGRpcmxpbmUg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpYWwgZGlyZWN0b3J5IGxpbmUgbnVtYmVy ICovCitleHRlcm4gY2hhciAqIGRpYWxkaXJbXTsgICAgICAgICAgICAgICAgLyogRGlhbCBkaXJl Y3RvcnkgZmlsZSBuYW1lcyAqLworZXh0ZXJuIGludCBkaWFsZHB5OyAgICAgICAgICAgICAgICAg ICAgIC8qIERJQUwgRElTUExBWSBvbi9vZmYgKi8KK2V4dGVybiBpbnQgbmRpYWxkaXI7ICAgICAg ICAgICAgICAgICAgICAvKiBIb3cgbWFueSBkaWFsIGRpcmVjdG9yaWVzICovCitleHRlcm4gaW50 IG50b2xsZnJlZTsgICAgICAgICAgICAgICAgICAgLyogVG9sbC1mcmVlIGNhbGwgaW5mbyAqLwor ZXh0ZXJuIGludCBuZGlhbHB4eDsgICAgICAgICAgICAgICAgICAgIC8qIExpc3Qgb2YgUEJYIGV4 Y2hhbmdlcyAqLworZXh0ZXJuIGNoYXIgKmRpYWx0ZmNbXTsKK2NoYXIgKiBtYXRjaHB4eCA9IE5V TEw7ICAgICAgICAgICAgICAgICAvKiBQQlggZXhjaGFuZ2UgdGhhdCBtYXRjaGVkICovCitleHRl cm4gaW50IG5sb2NhbGFjOyAgICAgICAgICAgICAgICAgICAgLyogTG9jYWwgYXJlYS1jb2RlIGxp c3QgKi8KK2V4dGVybiBjaGFyICogZGlhbGxjYWNbXTsKK2V4dGVybiBpbnQgdHR0YXBpOworI2lm ZGVmIENLX1RBUEkKK2V4dGVybiBpbnQgdGFwaWNvbnY7ICAgICAgICAgICAgICAgICAgICAvKiBU QVBJIENvbnZlcnNpb25zICovCitleHRlcm4gaW50IHRhcGlwYXNzOyAgICAgICAgICAgICAgICAg ICAgLyogVEFQSSBQYXNzdGhyb3VnaCAqLworI2VuZGlmIC8qIENLX1RBUEkgKi8KK2V4dGVybiBp bnQgZGlhbGF0bW87CitleHRlcm4gY2hhciAqIGRpYWxucHIsICogZGlhbHNmeDsKK2V4dGVybiBj aGFyICogZGlhbGl4cCwgKiBkaWFsaXhzLCAqIGRpYWxtYWM7CitleHRlcm4gY2hhciAqIGRpYWxs ZHAsICogZGlhbGxkcywgKiBkaWFsdGZwOworZXh0ZXJuIGNoYXIgKiBkaWFscHhpLCAqIGRpYWxw eG8sICogZGlhbGxhYzsKK2V4dGVybiBjaGFyICogZGlhbGxjcCwgKiBkaWFsbGNzLCAqIGRpYWxs Y2M7CitleHRlcm4gY2hhciAqIGRpYWxweHhbXTsKKworZXh0ZXJuIGludCBkaWFsY25mOyAgICAg ICAgICAgICAgICAgICAgIC8qIERJQUwgQ09ORklSTUFUSU9OICovCitpbnQgZGlhbGZsZCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBGT1JDRS1MT05HLURJU1RBTkNFICovCitp bnQgZGlhbHNydCA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBTT1JUIE9OICov CitpbnQgZGlhbHJzdHIgPSA2OyAgICAgICAgICAgICAgICAgICAgICAgLyogRElBTCBSRVNUUklD VElPTiAqLworaW50IGRpYWx0ZXN0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwg VEVTVCAqLworaW50IGRpYWxjb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFx2KGRp YWxjb3VudCkgKi8KKworZXh0ZXJuIGludCBkaWFsc3RhOyAgICAgICAgICAgICAgICAgICAgIC8q IERpYWwgc3RhdHVzICovCitpbnQgZGlhbHJ0ciA9IC0xLCAgICAgICAgICAgICAgICAgICAgICAg LyogRGlhbCByZXRyaWVzICovCisgICAgZGlhbGludCA9IDEwOyAgICAgICAgICAgICAgICAgICAg ICAgLyogRGlhbCByZXRyeSBpbnRlcnZhbCAqLworZXh0ZXJuIGxvbmcgZGlhbGNhcGFzOyAgICAg ICAgICAgICAgICAgIC8qIE1vZGVtIGNhcGFiaWxpdGllcyAqLworZXh0ZXJuIGludCBkaWFsY3Z0 OyAgICAgICAgICAgICAgICAgICAgIC8qIERJQUwgQ09OVkVSVC1ESVJFQ1RPUlkgKi8KKyNlbmRp ZiAvKiBOT0RJQUwgKi8KKworI2lmbmRlZiBOT1NQTAorI2RlZmluZSBJRkNPTkRMRU4gMjU2Citp bnQgaWZjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSUYgY2FzZSAqLworICAg IG5vdCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIElGIE5PVCAq LworICAgIGlmYXJncyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IG9mIElG IGNvbmRpdGlvbiB3b3JkcyAqLworY2hhciBpZmNvbmRbSUZDT05ETEVOXTsgICAgICAgICAgICAg ICAgIC8qIElGIGNvbmRpdGlvbiB0ZXh0ICovCitjaGFyICppZmNwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnRlciB0byBJRiBjb25kaXRpb24gdGV4dCAqLworZXh0ZXJuIGlu dCB2YXJldmFsOworI2lmZGVmIERDTURCVUYKK2V4dGVybiBpbnQKKyAqaWZjbWQsICAqY291bnQs ICAqaWZ0ZXN0LCAqaW50aW1lLAorICAgICppbnBjYXMsICp0YWtlcnIsICptZXJyb3IsICp4cXVp ZXQsICp4dmFyZXY7CisjZWxzZQorZXh0ZXJuIGludCBpZmNtZFtdOyAgICAgICAgICAgICAgICAg ICAgIC8qIExhc3QgY29tbWFuZCB3YXMgSUYgKi8KK2V4dGVybiBpbnQgaWZ0ZXN0W107ICAgICAg ICAgICAgICAgICAgICAvKiBMYXN0IElGIHdhcyB0cnVlICovCitleHRlcm4gaW50IGNvdW50W107 ICAgICAgICAgICAgICAgICAgICAgLyogRm9yIElGIENPVU5ULCBvbmUgZm9yIGVhY2ggY21kbHZs ICovCitleHRlcm4gaW50IGludGltZVtdOyAgICAgICAgICAgICAgICAgICAgLyogRGl0dG8gZm9y IG90aGVyIHN0YWNrYWJsZXMuLi4gKi8KK2V4dGVybiBpbnQgaW5wY2FzW107CitleHRlcm4gaW50 IHRha2VycltdOworZXh0ZXJuIGludCBtZXJyb3JbXTsKK2V4dGVybiBpbnQgeHF1aWV0W107Citl eHRlcm4gaW50IHh2YXJldltdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyNlbHNlCitleHRlcm4g aW50IHRha2VycltdOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBEQ01EQlVGCitleHRl cm4gY2hhciAqbGluZTsgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIGJ1ZmZlciBm b3IgYW55dGhpbmcgKi8KK2V4dGVybiBjaGFyICp0bXBidWY7CisjZWxzZQorZXh0ZXJuIGNoYXIg bGluZVtdLCB0bXBidWZbXTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCitleHRlcm4gY2hhciAqbHA7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBsaW5lIGJ1ZmZlciAqLworCitp bnQgY3dkZiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1dEIGhhcyBiZWVuIGRv bmUgKi8KKworLyogRmxhZ3MgZm9yIEVOQUJMRS9ESVNBQkxFICovCitleHRlcm4gaW50IGVuX2N3 ZCwgZW5fY3B5LCBlbl9kZWwsIGVuX2RpciwgZW5fZmluLAorICAgZW5fZ2V0LCBlbl9ob3MsIGVu X3JlbiwgZW5fc2VuLCBlbl9zZXQsIGVuX3NwYSwgZW5fdHlwLCBlbl93aG8sIGVuX2J5ZSwKKyAg IGVuX2FzZywgZW5fcXVlLCBlbl9yZXQsIGVuX21haSwgZW5fcHJpLCBlbl9ta2QsIGVuX3JtZCwg ZW5feGl0LCBlbl9lbmE7CisKK2V4dGVybiBGSUxFICp0ZmlsZVtdOyAgICAgICAgICAgICAgICAg ICAvKiBGaWxlIHBvaW50ZXJzIGZvciBUQUtFIGNvbW1hbmQgKi8KK2V4dGVybiBjaGFyICp0Zm5h bVtdOyAgICAgICAgICAgICAgICAgICAvKiBOYW1lcyBvZiBUQUtFIGZpbGVzICovCitleHRlcm4g aW50IHRmbGluZVtdOyAgICAgICAgICAgICAgICAgICAgLyogVEFLRS1maWxlIGxpbmUgbnVtYmVy ICovCisKK2V4dGVybiBpbnQgc3VjY2VzczsgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5k IHN1Y2Nlc3MvZmFpbHVyZSBmbGFnICovCitleHRlcm4gaW50IGNtZGx2bDsgICAgICAgICAgICAg ICAgICAgICAgLyogQ3VycmVudCBwb3NpdGlvbiBpbiBjb21tYW5kIHN0YWNrICovCisKKyNpZm5k ZWYgTk9TUEwKK2V4dGVybiBpbnQgbWFjbHZsOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNy byB0byBleGVjdXRlICovCitleHRlcm4gY2hhciAqbWFjeFtdOyAgICAgICAgICAgICAgICAgICAg LyogSW5kZXggb2YgY3VycmVudCBtYWNybyAqLworZXh0ZXJuIGNoYXIgKm1ydmFsW107ICAgICAg ICAgICAgICAgICAgIC8qIE1hY3JvIHJldHVybiB2YWx1ZSAqLworZXh0ZXJuIGNoYXIgKm1hY3Bb XTsgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbWFjcm8gKi8KK2V4dGVybiBpbnQg bWFjYXJnY1tdOyAgICAgICAgICAgICAgICAgICAvKiBBUkdDIGZyb20gbWFjcm8gaW52b2NhdGlv biAqLworCisjaWZkZWYgQ09NTUVOVAorZXh0ZXJuIGNoYXIgKm1fbGluZVtdOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKworZXh0ZXJuIGNoYXIgKm1fYXJnW01BQ0xFVkVMXVtOQVJHU107ICAgIC8q IFN0YWNrIG9mIG1hY3JvIGFyZ3VtZW50cyAqLworZXh0ZXJuIGNoYXIgKmdfdmFyW107ICAgICAg ICAgICAgICAgICAgIC8qIEdsb2JhbCB2YXJpYWJsZXMgJWEsICViLCBldGMgKi8KKworI2lmZGVm IERDTURCVUYKK2V4dGVybiBzdHJ1Y3QgY21kcHRyICpjbWRzdGs7ICAgICAgICAgICAvKiBUaGUg Y29tbWFuZCBzdGFjayBpdHNlbGYgKi8KKyNlbHNlCitleHRlcm4gc3RydWN0IGNtZHB0ciBjbWRz dGtbXTsgICAgICAgICAgLyogVGhlIGNvbW1hbmQgc3RhY2sgaXRzZWxmICovCisjZW5kaWYgLyog RENNREJVRiAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNkZWZpbmUgeHN5c3RlbShzKSB6c3lz Y21kKHMpCisKK3N0YXRpYyBpbnQgeCwgeSwgeiA9IDA7CitzdGF0aWMgY2hhciAqcywgKnA7CisK KyNpZmRlZiBPUzIKK19QUk9UT1RZUCggaW50IG9zMnNldHRpdGxlLCAoY2hhciAqLCBpbnQpICk7 CisjZW5kaWYgLyogT1MyICovCisKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHllc25vW10sIG9ub2Zm W10sIGZudGFiW107CitleHRlcm4gaW50IG55ZXNubywgbmZudGFiOworCisjaWZuZGVmIE5PU1BM CisKKy8qIERvIHRoZSBBU0ssIEFTS1EsIEdFVE9LLCBhbmQgUkVBRCBjb21tYW5kcyAqLworCitp bnQgYXNrdGltZWRvdXQgPSAwOworCisjZGVmaW5lIEFTS19QVVAgMQorI2RlZmluZSBBU0tfVE1P IDIKKyNkZWZpbmUgQVNLX0dVSSAzCisjZGVmaW5lIEFTS19RVUkgNAorI2RlZmluZSBBU0tfREVG IDUKKyNkZWZpbmUgQVNLX0VDSCA2CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGFza3RhYltdID0g eworICAgIHsgICIvZGVmYXVsdCIsIEFTS19ERUYsIENNX0FSRyB9LAorICAgIHsgICIvZ3VpIiwg ICAgIEFTS19HVUksICAgICAgCisjaWZkZWYgS1VJCisgICAgICAgICAgIDAKKyNlbHNlIC8qIEtV SSAqLworICAgICAgICAgICBDTV9JTlYKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICB9LAorICAgIHsg Ii9wb3B1cCIsICAgIEFTS19QVVAsICAgCisjaWZkZWYgT1MyCisgICAgICAgICAgIDAKKyNlbHNl IC8qIE9TMiAqLworICAgICAgICAgICBDTV9JTlYKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9LAor ICAgIHsgIi9xdWlldCIsICAgIEFTS19RVUksIDAgfSwKKyAgICB7ICIvdGltZW91dCIsICBBU0tf VE1PLCBDTV9BUkcgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5hc2t0YWIg PSBzaXplb2YoYXNrdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYiktMTsKKworc3RhdGljIHN0cnVj dCBrZXl0YWIgYXNrcXRhYltdID0geworICAgIHsgIi9kZWZhdWx0IiwgIEFTS19ERUYsIENNX0FS RyB9LAorICAgIHsgIi9lY2hvIiwgICAgIEFTS19FQ0gsIENNX0FSRyB9LAorICAgIHsgIi9ndWki LCAgICAgIEFTS19HVUksICAgICAgCisjaWZkZWYgS1VJCisgICAgICAgICAgIDAKKyNlbHNlIC8q IEtVSSAqLworICAgICAgICAgICBDTV9JTlYKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICB9LAorICAg IHsgIi9ub2VjaG8iLCAgIEFTS19RVUksIENNX0lOViB9LAorICAgIHsgIi9wb3B1cCIsICAgIEFT S19QVVAsICAgCisjaWZkZWYgT1MyCisgICAgICAgICAgIDAKKyNlbHNlIC8qIE9TMiAqLworICAg ICAgICAgICBDTV9JTlYKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9LAorICAgIHsgIi9xdWlldCIs ICAgIEFTS19RVUksIDAgfSwKKyAgICB7ICIvdGltZW91dCIsICBBU0tfVE1PLCBDTV9BUkcgfSwK KyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5hc2txdGFiID0gc2l6ZW9mKGFza3F0 YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKS0xOworCitpbnQKK2RvYXNrKGN4KSBpbnQgY3g7IHsK KyAgICBleHRlcm4gaW50IGFza3RpbWVyLCB0aW1lbGltaXQ7CisjaWZkZWYgQ0tfUkVDQUxMCisg ICAgZXh0ZXJuIGludCBvbl9yZWNhbGw7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgaW50 IGVjaG9jaGFyID0gMDsKKyAgICBpbnQgcG9wdXBmbGcgPSAwOworICAgIGludCBndWlmbGcgPSAw OworICAgIGludCBub21zZyA9IDA7CisgICAgaW50IG15dGltZXIgPSAwOworI2lmZGVmIENLX0FQ QworICAgIGV4dGVybiBpbnQgYXBjYWN0aXZlLCBhcGNzdGF0dXM7CisjZW5kaWYgLyogQ0tfQVBD ICovCisKKyAgICBjaGFyIGRmYnVmWzEwMjRdOwkJCS8qIEJ1ZmZlciBmb3IgZGVmYXVsdCBhbnN3 ZXIgKi8KKyAgICBjaGFyICogZGZhbnN3ZXIgPSBOVUxMOwkJLyogUG9pbnRlciB0byBpdCAqLwor CisgICAgY2hhciB2bmFtYnVmW1ZOQU1MKzFdOyAgICAgICAgICAgICAgLyogQnVmZmVyIGZvciB2 YXJpYWJsZSBuYW1lcyAqLworICAgIGNoYXIgKnZucCA9IE5VTEw7ICAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgdG8gc2FtZSAqLworICAgIAorICAgIGRmYnVmWzBdID0gTlVMOworICAgIHZu YW1idWZbMF0gPSBOVUw7CisKKyNpZmRlZiBDS19BUEMKKyAgICBpZiAoIGFwY2FjdGl2ZSAhPSBB UENfSU5BQ1RJVkUgJiYgKGFwY3N0YXR1cyAmIEFQQ19OT0lOUCkgKSB7CisgICAgICAgIHJldHVy bihzdWNjZXNzID0gMCk7CisgICAgfQorI2VuZGlmIC8qIENLX0FQQyAqLworCisgICAgbXl0aW1l ciA9IGFza3RpbWVyOyAgICAgICAgICAgICAgICAgLyogSW5oZXJpdCBnbG9iYWwgQVNLIHRpbWVy ICovCisgICAgZWNob3N0YXJzID0gMDsJCQkvKiBGb3IgQVNLUSAqLworCisgICAgaWYgKGN4ID09 IFhYQVNLIHx8IGN4ID09IFhYQVNLUSkgeworICAgICAgICBzdHJ1Y3QgRkRCIHN3LCBmbDsKKyAg ICAgICAgaW50IGdldHZhbDsKKyAgICAgICAgY2hhciBjOworICAgICAgICBpZiAoY3ggPT0gWFhB U0tRKSAgICAgICAgICAgICAgIC8qIERvbid0IGxvZyBBU0tRIHJlc3BvbnNlICovCisgICAgICAg ICAgZGVib2sgPSAwOworICAgICAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgIC8q IEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgICAgIF9DTUtFWSwg ICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgIlZhcmlhYmxlIG5h bWUgb3Igc3dpdGNoIiwKKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAgKChjeCA9PSBYWEFTSykgPyBuYXNrdGFiIDog bmFza3F0YWIpLCAvKiBUYWJsZSBzaXplICovCisgICAgICAgICAgICAgICA0LCAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAg ICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24g Ki8KKwkgICAgICAgKChjeCA9PSBYWEFTSykgPyBhc2t0YWIgOiBhc2txdGFiKSwgLyogS2V5d29y ZCB0YWJsZSAqLworICAgICAgICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAgIC8qIFBv aW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGNtZmRiaSgm ZmwsICAgICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNoICov CisgICAgICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAg ICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K KyAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMSAqLworICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAg ICAgTlVMTCwKKyAgICAgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICk7CisgICAgICAg IHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgMCBvciBtb3JlIHN3aXRj aGVzICovCisgICAgICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgLyogUGFyc2Ug c29tZXRoaW5nICovCisgICAgICAgICAgICBpZiAoeCA8IDApCisgICAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpIC8qIEJyZWFr IG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICBjID0gY21nYnJrKCk7CisgICAgICAgICAgICBpZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBj ID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh Z2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAoY21yZXN1 bHQubnJlc3VsdCkgeworCSAgICAgIGNhc2UgQVNLX1FVSToKKwkJbm9tc2cgPSAxOworCQlpZiAo Y3ggPT0gWFhBU0tRKQorCQkgIGVjaG9zdGFycyA9IDA7CisJCWJyZWFrOworICAgICAgICAgICAg ICBjYXNlIEFTS19QVVA6CisgICAgICAgICAgICAgICAgcG9wdXBmbGcgPSAxOworICAgICAgICAg ICAgICAgIGJyZWFrOworCSAgICAgIGNhc2UgQVNLX0dVSToKKwkJZ3VpZmxnID0gMTsKKwkJYnJl YWs7CisgICAgICAgICAgICAgIGNhc2UgQVNLX1RNTzogeworICAgICAgICAgICAgICAgICAgaWYg KCh5ID0gY21udW0oInNlY29uZHMiLCIxIiwxMCwmeCx4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICAgICAgaWYgKHggPCAwKQorICAg ICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgIG15dGltZXIgPSB4Owor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg Y2FzZSBBU0tfRUNIOiB7CisgICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWZsZCgiQ2hhcmFj dGVyIHRvIGVjaG8iLCIqIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuKHkpOworCQkgIGVjaG9jaGFyID0gKnM7CisgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBjYXNlIEFTS19ERUY6IHsKKyAgICAgICAg ICAgICAgICAgIGlmICgoeSA9IGNtZmxkKCJUZXh0IHRvIHN1cHBseSBpZiByZXBseSBpcyBlbXB0 eSIsCisJCQkJICIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeSk7CisJCSAgY2tzdHJuY3B5KGRmYnVmLHMsMTAyNCk7CisJCSAgZGZhbnN3ZXIgPSBkZmJ1 ZjsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIGRlZmF1bHQ6IHJldHVybigtMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgLyogSGF2ZSB2YXJpYWJsZSBuYW1lLCBtYWtlIGNvcHkuICovCisgICAgICAgIGNrc3RybmNw eSh2bmFtYnVmLGNtcmVzdWx0LnNyZXN1bHQsVk5BTUwpOworICAgICAgICB2bnAgPSB2bmFtYnVm OworICAgICAgICBpZiAodm5hbWJ1ZlswXSA9PSBDTURRICYmCisgICAgICAgICAgICAodm5hbWJ1 ZlsxXSA9PSAnJScgfHwgdm5hbWJ1ZlsxXSA9PSAnJicpKQorICAgICAgICAgIHZucCsrOworICAg ICAgICB5ID0gMDsKKyAgICAgICAgaWYgKCp2bnAgPT0gJyUnIHx8ICp2bnAgPT0gJyYnKSB7Cisg ICAgICAgICAgICBpZiAoKHkgPSBwYXJzZXZhcih2bnAsJngsJnopKSA8IDApCisJICAgICAgcmV0 dXJuKHkpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjeCAhPSBYWEdPSyAmJiBjeCAhPSBY WFJEQkwpIHsgLyogR2V0IHZhcmlhYmxlIG5hbWUgKi8KKyAgICAgICAgaWYgKCh5ID0gY21mbGQo IlZhcmlhYmxlIG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09 IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VmFyaWFibGUgbmFtZSByZXF1aXJlZFxu Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0gZWxzZSByZXR1 cm4oeSk7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KHZuYW1idWYscyxWTkFNTCk7ICAg ICAvKiBNYWtlIGEgY29weS4gKi8KKyAgICAgICAgdm5wID0gdm5hbWJ1ZjsKKyAgICAgICAgaWYg KHZuYW1idWZbMF0gPT0gQ01EUSAmJgorICAgICAgICAgICAgKHZuYW1idWZbMV0gPT0gJyUnIHx8 IHZuYW1idWZbMV0gPT0gJyYnKSkKKyAgICAgICAgICB2bnArKzsKKyAgICAgICAgeSA9IDA7Cisg ICAgICAgIGlmICgqdm5wID09ICclJyB8fCAqdm5wID09ICcmJykgeworICAgICAgICAgICAgaWYg KCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZ6KSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7 CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGN4ID09IFhYUkVBIHx8IGN4ID09IFhYUkRCTCkg eyAgLyogUkVBRCBvciBSRUFEQkxPQ0sgY29tbWFuZCAqLworICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApICAgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KKyAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgIGlmIChjaGtmbihaUkZJTEUpIDwgMSkgeyAgICAgICAgLyogRmlsZSBv cGVuPyAqLworICAgICAgICAgICAgcHJpbnRmKCI/UmVhZCBmaWxlIG5vdCBvcGVuXG4iKTsKKyAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEo cyA9IChjaGFyICopcmVhZGJ1ZikpIHsgICAgICAgICAgIC8qIFdoZXJlIHRvIHJlYWQgaW50by4g Ki8KKyAgICAgICAgICAgIHByaW50ZigiP09vcHMsIG5vIFJFQUQgYnVmZmVyIVxuIik7CisgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9CisgICAgICAgIHkgPSB6c2lu bChaUkZJTEUsIHMsIHJlYWRibG9jayk7IC8qIFJlYWQgYSBsaW5lLiAqLworICAgICAgICBkZWJ1 ZyhGMTExLCJyZWFkIHpzaW5sIixzLHkpOworICAgICAgICBpZiAoeSA8IDApIHsgICAgICAgICAg ICAgICAgICAgIC8qIE9uIEVPRiBvciBvdGhlciBlcnJvciwgKi8KKyAgICAgICAgICAgIHpjbG9z ZShaUkZJTEUpOyAgICAgICAgICAgICAvKiBjbG9zZSB0aGUgZmlsZSwgKi8KKyAgICAgICAgICAg IGRlbG1hYyh2bnAsMCk7ICAgICAgICAgICAgICAvKiBkZWxldGUgdGhlIHZhcmlhYmxlLCAqLwor ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsgICAgICAgIC8qIGFuZCByZXR1cm4gZmFp bHVyZS4gKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFk IHdhcyBPSy4gKi8KKyAgICAgICAgICAgIHJlYWRzaXplID0gKGludCkgc3RybGVuKHMpOworICAg ICAgICAgICAgc3VjY2VzcyA9IChhZGRtYWModm5wLHMpIDwgMCA/IDAgOiAxKTsgLyogRGVmaW5l IHZhcmlhYmxlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJyZWFkIGFkZG1hYyIsdm5wLHN1 Y2Nlc3MpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MpOyAgICAgICAgICAgIC8qIFJldHVy biBzdWNjZXNzLiAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyogQVNLLCBBU0tRLCBHRVRP Sywgb3IgR0VUQyAqLworCisgICAgaWYgKGN4ID09IFhYR09LKSB7CQkJLyogR0VUT0sgY2FuIHRh a2Ugc3dpdGNoZXMgKi8KKyAgICAgICAgc3RydWN0IEZEQiBzdywgZmw7CisgICAgICAgIGludCBn ZXR2YWw7CisgICAgICAgIGNoYXIgYzsKKyAgICAgICAgY21mZGJpKCZzdywgICAgICAgICAgICAg ICAgICAgICAvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgICAg ICBfQ01LRVksICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICJW YXJpYWJsZSBuYW1lIG9yIHF1ZXN0aW9uIHByb21wdCIsCisgICAgICAgICAgICAgICAiIiwgICAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICBu YXNrdGFiLCAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXpl ICovCisgICAgICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAgICAgICAgICAgeHhzdHJpbmcsICAgICAg ICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgIGFza3Rh YiwgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICAgICAm ZmwgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAgICAgICAvKiBB bnl0aGluZyB0aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgIF9DTVRYVCwgICAg ICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAgICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAg ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgTlVM TAorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAg ICAgICAvKiBQYXJzZSAwIG9yIG1vcmUgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgIHggPSBjbWZk Yigmc3cpOyAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgICAgIGlm ICh4IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKGNtcmVz dWx0LmZjb2RlICE9IF9DTUtFWSkgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLworICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGMgPSBjbWdicmsoKTsKKyAgICAgICAgICAg IGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAm IENNX0FSRykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5v dCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFnZXR2YWwgJiYgKGNtZ2t3ZmxncygpICYgQ01f QVJHKSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFu IGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7CisgICAgICAgICAgICAg IGNhc2UgQVNLX1BVUDoKKyAgICAgICAgICAgICAgICBwb3B1cGZsZyA9IDE7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisJICAgICAgY2FzZSBBU0tfR1VJOgorCQlndWlmbGcgPSAxOworCQlicmVh azsKKyAgICAgICAgICAgICAgY2FzZSBBU0tfVE1POiB7CisgICAgICAgICAgICAgICAgICBpZiAo KHkgPSBjbW51bSgic2Vjb25kcyIsIjEiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApCisgICAg ICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICAgICAgbXl0aW1lciA9IHg7Cisg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBj YXNlIEFTS19ERUY6IHsKKyAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtZmxkKCJUZXh0IHRv IHN1cHBseSBpZiByZXBseSBpcyBlbXB0eSIsCisJCQkJICIiLCZzLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisJCSAgY2tzdHJuY3B5KGRmYnVmLHMsMTAy NCk7CisJCSAgZGZhbnN3ZXIgPSBkZmJ1ZjsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICB9CisJICAgICAgY2FzZSBBU0tfUVVJOgorCQlub21zZyA9IDE7CisJCWJyZWFr OworICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4oLTIpOworICAgICAgICAgICAgfQorCX0K KwlwID0gY21yZXN1bHQuc3Jlc3VsdDsKKyAgICB9IGVsc2UKKyAgICAgIGlmICgoeSA9IGNtdHh0 KAorIlByb21wdCxcblwKKyBlbmNsb3NlIGluIHsgYnJhY2VzIH0gb3IgXCIgcXVvdGVzIFwiIHRv IHByZXNlcnZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cCisgc3BhY2VzLCBwcmVjZWRlIHF1ZXN0 aW9uIG1hcmsgd2l0aCBiYWNrc2xhc2ggKFxcKS4iLAorICAgICAgICAgICAgICAgICAgICIiLCZw LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICByZXR1cm4oeSk7CisKKyAgICBpZiAoIXApIHAgPSAi IjsKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIGlmIChwb3B1cGZsZykgeyAgICAg ICAgICAgICAgICAgICAgIC8qIFBvcHVwIHJlcXVlc3RlZCAqLworICAgICAgICBpbnQgbGVuID0g LTE7CisgICAgICAgIGNrc3RybmNweSh0bXBidWYsYnJzdHJpcChwKSxUTVBCVUZTSVopOworICAg ICAgICBwID0gdG1wYnVmOworICAgICAgICBpZiAoY3ggPT0gWFhBU0sgfHwgY3ggPT0gWFhBU0tR KSB7CisgICAgICAgICAgICBpZiAoY3ggPT0gWFhBU0spCisgICAgICAgICAgICAgIGxlbiA9IHBv cHVwX3JlYWR0ZXh0KHZtb2RlLE5VTEwscCxsaW5lLExJTkJVRlNJWixteXRpbWVyKTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgbGVuID0gcG9wdXBfcmVhZHBhc3Modm1vZGUsTlVM TCxwLGxpbmUsTElOQlVGU0laLG15dGltZXIpOworICAgICAgICAgICAgYXNrdGltZWRvdXQgPSAo IGxlbiA8IDAgJiYgbXl0aW1lciApOworICAgICAgICB9IGVsc2UgaWYgKGN4ID09IFhYR09LKSB7 CisJICAgIHByaW50ZigiP1NvcnJ5LCBHRVRPSyAvUE9QVVAgbm90IGltcGxlbWVudGVkIHlldFxu Iik7CisJICAgIHRpbWVsaW1pdCA9IDA7CisJICAgIHJldHVybigtOSk7CisJfQorICAgICAgICBp ZiAobGVuID49IDApIHsKKwkgICAgeSA9IGFkZG1hYyh2bnAsKGNoYXIgKilsaW5lKTsgLyogQWRk IGl0IHRvIHRoZSBtYWNybyB0YWJsZS4gKi8KKyAgICAgICAgfSBlbHNlIGlmICggYXNrdGltZWRv dXQgJiYgZGZhbnN3ZXIgKSB7CisgICAgICAgICAgICB5ID0gYWRkbWFjKHZucCxkZmFuc3dlcik7 CSAgICAvKiBBZGQgaXQgdG8gdGhlIG1hY3JvIHRhYmxlLiAqLworICAgICAgICAgICAgYXNrdGlt ZWRvdXQgPSAwOworICAgICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgfQorICAgICAgICB0aW1l bGltaXQgPSAwOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9ICgobGVuID49IDApICYmICh5ID49 IDApKSAmJiAhYXNrdGltZWRvdXQpOworICAgIH0KKyNpZmRlZiBLVUkKKyAgICBpZiAoZ3VpZmxn KSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBHVUkgcmVxdWVzdGVkICovCisgICAgICAgIGlu dCByYywgbjsKKwljaGFyICogczE7CisJczEgPSB0bXBidWY7CisJbiA9IFRNUEJVRlNJWi0xOwor CXp6c3RyaW5nKGJyc3RyaXAocCksJnMxLCZuKTsKKyAgICAgICAgcCA9IHRtcGJ1ZjsKKyAgICAg ICAgaWYgKGN4ID09IFhYQVNLIHx8IGN4ID09IFhYQVNLUSkgeworICAgICAgICAgICAgcmMgPSBn dWlfdHh0X2RpYWxvZyhOVUxMLHAsKGN4ID09IFhYQVNLKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGluZSxMSU5CVUZTSVosZGZhbnN3ZXIsbXl0aW1lcik7CisgICAgICAgICAg ICBhc2t0aW1lZG91dCA9IChyYyA9PSAtMSAmJiBteXRpbWVyKTsKKyAgICAgICAgICAgIGlmIChy YyA9PSAxKSB7CisgICAgICAgICAgICAgICAgeSA9IGFkZG1hYyh2bnAsKGNoYXIgKilsaW5lKTsg LyogQWRkIGl0IHRvIHRoZSBtYWNybyB0YWJsZS4gKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo IGFza3RpbWVkb3V0ICYmIGRmYW5zd2VyICkgeworICAgICAgICAgICAgICAgIHkgPSBhZGRtYWMo dm5wLGRmYW5zd2VyKTsgLyogQWRkIGRlZmF1bHQgdG8gbWFjcm8gdGFibGUuICovCisgICAgICAg ICAgICAgICAgYXNrdGltZWRvdXQgPSAwOworICAgICAgICAgICAgICAgIHJjID0gMTsKKyAgICAg ICAgICAgIH0KKwkgICAgdGltZWxpbWl0ID0gMDsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAocmMg PT0gMSAmJiAoeSA+PSAwKSkgJiYgIWFza3RpbWVkb3V0KTsKKwl9IGVsc2UgaWYgKGN4ID09IFhY R09LKSB7CisJICAgIGludCB4OworCSAgICB4ID0gbG9va3VwKHllc25vLGRmYW5zd2VyLG55ZXNu byxOVUxMKTsKKwkgICAgaWYgKHggIT0gMSkgeCA9IDI7CisJICAgIHJjID0gdXFfb2soTlVMTCwg cCwgMywgTlVMTCwgeCk7CisJICAgIHJldHVybihzdWNjZXNzID0gKHJjID09IDEpKTsKKwl9Cisg ICAgfQorI2VuZGlmIC8qIEtVSSAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9D QUwgKi8KKworICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgICAgIC8qIEVudGVy IENCUkVBSyBtb2RlICovCisgICAgY21zYXZwKHBzYXZlLFBST01QVEwpOyAgICAgICAgICAgICAg LyogU2F2ZSBvbGQgcHJvbXB0ICovCisgICAgY21zZXRwKGJyc3RyaXAocCkpOyAgICAgICAgICAg ICAgICAgLyogTWFrZSBuZXcgcHJvbXB0ICovCisKK3JlcHJvbXB0OgorICAgIGlmIChjeCA9PSBY WEFTS1EpIHsgICAgICAgICAgICAgICAgIC8qIEZvciBBU0tRLCAqLworICAgICAgICBjbWluaSgw KTsgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vLWVjaG8gbW9kZS4gKi8KKwlpZiAoZWNob2No YXIpCisJICBlY2hvc3RhcnMgPSBlY2hvY2hhcjsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGb3Igb3RoZXJzLCByZWd1bGFyIGVjaG9pbmcuICovCisgICAgICAg IGNtaW5pKGNreGVjaCk7CisJZWNob3N0YXJzID0gMDsKKyAgICB9CisgICAgYXNrZmxhZyA9IDE7 CisgICAgeCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBtZWFucyB0 byByZXBhcnNlLiAqLworICAgIGNtZmxncyA9IDA7CisgICAgaWYgKHBmbGFnKQorICAgICAgcHJv bXB0KHh4c3RyaW5nKTsgICAgICAgICAgICAgICAgIC8qIElzc3VlIHByb21wdC4gKi8KKworICAg IGFza3RpbWVkb3V0ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSB0aW1lZCByZXNw b25zZXMuICovCisgICAgdGltZWxpbWl0ID0gbXl0aW1lcjsKK3JlcGFyc2U6CisgICAgY21yZXMo KTsKKyAgICBpZiAoY3ggPT0gWFhHT0spIHsgICAgICAgICAgICAgICAgICAvKiBHRVRPSyAqLwor I2lmZGVmIENLX1JFQ0FMTAorICAgICAgICBvbl9yZWNhbGwgPSAwOworI2VuZGlmIC8qIENLX1JF Q0FMTCAqLworICAgICAgICBhc2tmbGFnID0gMDsKKwkvKiBHRVRPSyB1c2VzIGtleXdvcmQgdGFi bGUgKi8KKyAgICAgICAgeCA9IGNta2V5KHllc25vLG55ZXNubywiIixkZmFuc3dlcix4eHN0cmlu Zyk7CisgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgZXJy b3IgKi8KKyAgICAgICAgICAgIGlmICh4ID09IC0xMCkgeworCQljaGFyICogZHM7CisJCWRzID0g ZGZhbnN3ZXIgPyBkZmFuc3dlciA6ICJObyI7CisJCWlmICghbm9tc2cpCisJCSAgcHJpbnRmKCI/ VGltZWQgb3V0LCBhc3N1bWluZyBcIiVzXCIiLGRzKTsKKwkJcHJpbnRmKCJcbiIpOworICAgICAg ICAgICAgICAgIGFza3RpbWVkb3V0ID0gMTsKKwkJeCA9IGxvb2t1cCh5ZXNubyxkcyxueWVzbm8s TlVMTCk7CisJCWlmICh4ICE9IDEpIHggPSAwOworICAgICAgICAgICAgICAgIGdvdG8gZ29rZG9u ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAtMykgeyAgICAgICAvKiBObyBhbnN3ZXI/ ICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQbGVhc2UgcmVzcG9uZCBZZXMgb3IgTm9cbiIp OyAvKiBNYWtlIHRoZW0gYW5zd2VyICovCisgICAgICAgICAgICAgICAgY21pbmkoY2t4ZWNoKTsK KyAgICAgICAgICAgICAgICBnb3RvIHJlcHJvbXB0OworICAgICAgICAgICAgfSBlbHNlIGlmICh4 ID09IC0xKSB7CisgICAgICAgICAgICAgICAgZ290byByZXBhcnNlOworICAgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICAgIGdvdG8gcmVwcm9tcHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGNtY2ZtKCkgPCAwKSAgICAgICAgICAgICAgICAvKiBHZXQgY29uZmlybWF0aW9uICovCisgICAg ICAgICAgZ290byByZXBhcnNlOworICBnb2tkb25lOgorICAgICAgICBhc2tmbGFnID0gMDsKKyAg ICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIHByb21wdCAq LworI2lmZGVmIFZNUworICAgICAgICBpZiAoY21kbHZsID4gMCkgICAgICAgICAgICAgICAgIC8q IEluIFZNUyBhbmQgbm90IGF0IHRvcCBsZXZlbCwgKi8KKyAgICAgICAgICBjb25yZXMoKTsgICAg ICAgICAgICAgICAgICAgICAvKiAgcmVzdG9yZSBjb25zb2xlIGFnYWluLiAqLworI2VuZGlmIC8q IFZNUyAqLworICAgICAgICB0aW1lbGltaXQgPSAwOworICAgICAgICByZXR1cm4oeCk7ICAgICAg ICAgICAgICAgICAgICAgIC8qIFJldHVybiBzdWNjZXNzIG9yIGZhaWx1cmUgKi8KKyAgICB9IGVs c2UgaWYgKGN4ID09IFhYR0VUQyAgICAgICAgICAgICAvKiBHRVRDICovCisjaWZkZWYgT1MyCisg ICAgICAgICAgICAgICB8fCBjeCA9PSBYWEdFVEsgICAgICAgICAgLyogb3IgR0VUS0VZQ09ERSAq LworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAg ICAgIC8qIEdFVEMgKi8KKyAgICAgICAgY2hhciB0bXBbMTZdOworICAgICAgICBjb25iaW4oKGNo YXIpZXNjYXBlKTsgICAgICAgICAgIC8qIFB1dCBrZXlib2FyZCBpbiByYXcgbW9kZSAqLworI2lm bmRlZiBOT1NFVEtFWQorI2lmZGVmIE9TMgorICAgICAgICBpZiAoY3ggPT0gWFhHRVRLKSB7ICAg ICAgICAgICAgIC8qIEdFVEtFWUNPREUgKi8KKyAgICAgICAgICAgIGV4dGVybiBpbnQgb3MyZ2tz OworICAgICAgICAgICAgaW50IHQ7CisgICAgICAgICAgICB0ID0gb3MyZ2tzOyAgICAgICAgICAg ICAgICAgLyogVHVybiBvZmYga3ZlcmIgcmVjb2duaXRpb24gKi8KKyAgICAgICAgICAgIG9zMmdr cyA9IDA7CisgICAgICAgICAgICB4ID0gY29uZ2tzKHRpbWVsaW1pdCk7ICAgICAgLyogUmVhZCBh IGtleSBldmVudCwgYmxvY2tpbmcgKi8KKyAgICAgICAgICAgIG9zMmdrcyA9IHQ7ICAgICAgICAg ICAgICAgICAvKiBQdXQgYmFjayBrdmVyYiByZWNvZ25pdGlvbiAqLworICAgICAgICB9IGVsc2Ug ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVEMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBOT1NFVEtFWSAqLworICAgICAgICB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJH RVRDIGNvbmNoayIsIiIsY29uY2hrKCkpOworICAgICAgICAgICAgeCA9IGNvbmluYyh0aW1lbGlt aXQpOyAgICAgIC8qIEp1c3QgcmVhZCBvbmUgY2hhcmFjdGVyICovCisgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJHRVRDIGNvbmluYyIsIiIseCk7CisgICAgICAgIH0KKyAgICAgICAgY29uY2IoKGNo YXIpZXNjYXBlKTsgICAgICAgICAgICAvKiBQdXQga2V5Ym9hcmQgYmFjayBpbiBjYnJlYWsgbW9k ZSAqLworICAgICAgICBpZiAoeCA+IC0xKSB7CisgICAgICAgICAgICBpZiAoeGNtZHNyYyA9PSAw KQorICAgICAgICAgICAgICBwcmludGYoIlxyXG4iKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAg IGlmIChjeCA9PSBYWEdFVEspIHsgICAgICAgICAvKiBHRVRLRVlDT0RFICovCisgICAgICAgICAg ICAgICAgc3ByaW50Zih0bXAsIiVkIix4KTsgICAgLyogU0FGRSAqLworICAgICAgICAgICAgfSBl bHNlIHsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICB0bXBbMF0gPSAoY2hhcikg KHggJiAweGZmKTsKKyAgICAgICAgICAgICAgICB0bXBbMV0gPSBOVUw7CisjaWZkZWYgT1MyCisg ICAgICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICB5ID0gYWRkbWFjKHZu cCx0bXApOyAgICAgICAgLyogQWRkIGl0IHRvIHRoZSBtYWNybyB0YWJsZS4gKi8KKyAgICAgICAg ICAgIGRlYnVnKEYxMTEsImdldGMvZ2V0ayBhZGRtYWMiLHZucCx5KTsKKyAgICAgICAgfSBlbHNl IHkgPSAtMTsKKyAgICAgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAvKiBSZXN0 b3JlIG9sZCBwcm9tcHQuICovCisgICAgICAgIGlmICh4IDwgLTEpIHsKKyAgICAgICAgICAgIGFz a3RpbWVkb3V0ID0gMTsKKyAgICAgICAgICAgIGlmICghcXVpZXQgJiYgIW5vbXNnKQorICAgICAg ICAgICAgICBwcmludGYoIj9UaW1lZCBvdXQiKTsKKwkgICAgcHJpbnRmKCJcbiIpOworICAgICAg ICB9CisgICAgICAgIHRpbWVsaW1pdCA9IDA7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gKCh5 IDwgMCA/IDAgOiAxKSAmJiAoYXNrdGltZWRvdXQgPT0gMCkpKTsKKyAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBBU0sgb3IgQVNLUSAqLworI2lmZGVmIENLX1JFQ0FM TAorICAgICAgICBvbl9yZWNhbGwgPSAwOwkJCS8qIERvbid0IHB1dCByZXNwb25zZSBpbiByZWNh bGwgYnVmICovCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisJYXNrZmxhZyA9IDE7CQkJLyogQVNL W1FdIGFsd2F5cyBnb2VzIHRvIHRlcm1pbmFsICovCisgICAgICAgIHkgPSBjbWRncXVvKCk7ICAg ICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgcXVvdGluZyAqLworICAgICAgICBjbWRzcXVv KDApOyAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIHF1b3RpbmcgKi8KKyAgICAgICAg d2hpbGUgKHggPT0gLTEpIHsgICAgICAgICAgICAgICAvKiBQcm9tcHQgdGlsbCB0aGV5IGFuc3dl ciAqLworICAgICAgICAgICAgeCA9IGNtdHh0KCJQbGVhc2UgcmVzcG9uZC4iLGRmYW5zd2VyLCZz LE5VTEwpOworICAgICAgICAgICAgZGVidWcoRjExMSwiQVNLIGNtdHh0IixzLHgpOworICAgICAg ICAgICAgY21yZXMoKTsKKyAgICAgICAgfQorICAgICAgICBjbWRzcXVvKHkpOyAgICAgICAgICAg ICAgICAgICAgIC8qIFJlc3RvcmUgcHJldmlvdXMgcXVvdGluZyAqLworICAgICAgICBpZiAoY3gg PT0gWFhBU0tRKSAgICAgICAgICAgICAgIC8qIEFTS1EgbXVzdCBlY2hvIENSTEYgaGVyZSAqLwor ICAgICAgICAgIHByaW50ZigiXHJcbiIpOworCWlmICh4ID09IC0xMCAmJiBkZmFuc3dlcikgewkv KiBEb24ndCBmYWlsIG9uIHRpbWVvdXQgaWYgKi8KKwkgICAgcyA9IGRmYW5zd2VyOwkJLyogYSBk ZWZhdWx0IHdhcyBzcGVjaWZpZWQgKi8KKwkgICAgYXNrdGltZWRvdXQgPSAwOwkJLyogYW5kIGRv bid0IGZhaWwgKi8KKwkgICAgeCA9IDA7CisJfQorICAgICAgICBpZiAoeCA8IDApIHsgICAgICAg ICAgICAgICAgICAgIC8qIElmIGNtdHh0IHBhcnNlIGVycm9yLCAqLworICAgICAgICAgICAgY21z ZXRwKHBzYXZlKTsgICAgICAgICAgICAgIC8qIHJlc3RvcmUgb3JpZ2luYWwgcHJvbXB0ICovCisj aWZkZWYgVk1TCisgICAgICAgICAgICBpZiAoY21kbHZsID4gMCkgICAgICAgICAgICAgLyogSW4g Vk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLworICAgICAgICAgICAgICBjb25yZXMoKTsgICAg ICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUgYWdhaW4uICovCisjZW5kaWYgLyogVk1T ICovCisgICAgICAgICAgICBpZiAoeCA9PSAtMTApIHsJCS8qIFRpbWVkIG91dCB3aXRoIG5vIHJl c3BvbnNlICovCisJCWlmICghbm9tc2cpCisJCSAgcHJpbnRmKCI/VGltZWQgb3V0Iik7CisJCXBy aW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgICBhc2t0aW1lZG91dCA9IDE7CisJCWlmIChkZmFu c3dlcikJCS8qIFN1cHBseSBkZWZhdWx0IGFuc3dlciBpZiBhbnkgKi8KKwkJICBzID0gZGZhbnN3 ZXI7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHggPSAwOwkvKiAod2FzICJ4ID0gLTk7Iikg Ki8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRpbWVsaW1pdCA9IDA7CisgICAgICAgICAg ICByZXR1cm4oeCk7ICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiBjbXR4dCdzIGVycm9y IGNvZGUuICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzIHx8ICpzID09IE5VTCkgewkJLyog SWYgdXNlciB0eXBlZCBhIGJhcmUgQ1IsICovCisgICAgICAgICAgICBjbXNldHAocHNhdmUpOyAg ICAgICAgICAgICAgLyogUmVzdG9yZSBvbGQgcHJvbXB0LCAqLworICAgICAgICAgICAgZGVsbWFj KHZucCwwKTsgICAgICAgICAgICAgIC8qIGRlbGV0ZSB2YXJpYWJsZSBpZiBpdCBleGlzdHMsICov CisjaWZkZWYgVk1TCisgICAgICAgICAgICBpZiAoY21kbHZsID4gMCkgICAgICAgICAgICAgLyog SW4gVk1TIGFuZCBub3QgYXQgdG9wIGxldmVsLCAqLworICAgICAgICAgICAgICBjb25yZXMoKTsg ICAgICAgICAgICAgICAgIC8qICByZXN0b3JlIGNvbnNvbGUgYWdhaW4uICovCisjZW5kaWYgLyog Vk1TICovCisgICAgICAgICAgICB0aW1lbGltaXQgPSAwOworICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsgICAgICAgIC8qIGFuZCByZXR1cm4uICovCisgICAgICAgIH0KKyAgICAgICAg eSA9IGFkZG1hYyh2bnAscyk7ICAgICAgICAgICAgICAvKiBBZGQgaXQgdG8gdGhlIG1hY3JvIHRh YmxlLiAqLworICAgICAgICBkZWJ1ZyhGMTExLCJhc2sgYWRkbWFjIix2bnAseSk7CisgICAgICAg IGNtc2V0cChwc2F2ZSk7ICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBvbGQgcHJvbXB0LiAq LworI2lmZGVmIFZNUworICAgICAgICBpZiAoY21kbHZsID4gMCkgICAgICAgICAgICAgICAgIC8q IEluIFZNUyBhbmQgbm90IGF0IHRvcCBsZXZlbCwgKi8KKyAgICAgICAgICBjb25yZXMoKTsgICAg ICAgICAgICAgICAgICAgICAvKiAgcmVzdG9yZSBjb25zb2xlIGFnYWluLiAqLworI2VuZGlmIC8q IFZNUyAqLworICAgICAgICB0aW1lbGltaXQgPSAwOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9 ICh5IDwgMCA/IDAgOiAxKSAmJiAoYXNrdGltZWRvdXQgPT0gMCkpOworICAgIH0KK30KKyNlbmRp ZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU1BMCitpbnQKK2RvaW5jcihjeCkgaW50IGN4OyB7 ICAgICAgICAgICAgICAgICAgICAvKiBJTkNSRU1FTlQsIERFQ1JFTUVOVCAqLworICAgIGNoYXIg dm5hbWJ1ZltWTkFNTCsxXTsgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3IgdmFyaWFibGUgbmFt ZXMgKi8KKyAgICBpbnQgZXZhbCA9IDA7CisgICAgQ0tfT0ZGX1QgeDsKKyAgICBldmFsID0gKGN4 ID09IFhYX0RFQ1IgfHwgY3ggPT0gWFhfSU5DUik7CisKKyAgICBpZiAoKHkgPSBjbWZsZCgiVmFy aWFibGUgbmFtZSIsIiIsJnMsIGV2YWwgPyB4eHN0cmluZyA6IE5VTEwpKSA8IDApIHsKKyAgICAg ICAgaWYgKHkgPT0gLTMpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1ZhcmlhYmxlIG5hbWUgcmVx dWlyZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfSBlbHNlIHJldHVy bih5KTsKKyAgICB9CisgICAgY2tzdHJuY3B5KHZuYW1idWYscyxWTkFNTCk7CisgICAgaWYgKCh5 ID0gY21udW13KCJieSBhbW91bnQiLCIxIiwxMCwmeCx4eHN0cmluZykpIDwgMCkKKyAgICAgIHJl dHVybih5KTsKKyAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisK KyAgICB6ID0gKGN4ID09IFhYX0lOQ1IgfHwgY3ggPT0gWFhJTkMpID8gMSA6IDA7IC8qIEluY3Jl bWVudCBvciBkZWNyZW1lbnQ/ICovCisKKyAgICBpZiAoaW5jdmFyKHZuYW1idWYseCx6KSA8IDAp IHsKKyAgICAgICAgcHJpbnRmKCI/VmFyaWFibGUgJXMgbm90IGRlZmluZWQgb3Igbm90IG51bWVy aWNcbiIsdm5hbWJ1Zik7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgfQorICAg IHJldHVybihzdWNjZXNzID0gMSk7Cit9CisKKy8qIFVzZWQgYnkgZG91bmRlZigpICovCitzdGF0 aWMgaW50Cit4eHVuZGVmKHMsdmVyYm9zZSxzaW11bGF0ZSkgY2hhciAqIHM7IGludCB2ZXJib3Nl LCBzaW11bGF0ZTsgeworICAgIGludCByYyA9IDA7CisgICAgaWYgKCFzKSByZXR1cm4oMCk7Cisg ICAgaWYgKCpzID09IENNRFEgJiYgKihzKzEpID09ICclJykgeworICAgICAgICBjaGFyIGMgPSAq KHMrMiksICogcCA9IE5VTEw7CisgICAgICAgIGlmIChjID49ICcwJyAmJiBjIDw9ICc5Jykgewor ICAgICAgICAgICAgaWYgKG1hY2x2bCA8IDApCisgICAgICAgICAgICAgIHAgPSBnX3ZhcltjXTsK KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcCA9IG1fYXJnW21hY2x2bF1bYyAtICcw J107CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgYyArPSAo J2EnLSdBJyk7CisgICAgICAgICAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpCisgICAgICAg ICAgICAgIHAgPSBnX3ZhcltjXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXApIHJldHVybigt MSk7CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAgICAgcHJpbnRmKCIgJXMgIixzKTsKKyAg ICBpZiAoc2ltdWxhdGUpIHsKKyAgICAgICAgcHJpbnRmKCIoU0VMRUNURUQpXG4iKTsKKyAgICB9 IGVsc2UgaWYgKCh4ID0gZGVsbWFjKHMsMSkpID4gLTEpIHsgLyogRnVsbCBuYW1lIHJlcXVpcmVk ICovCisgICAgICAgIHJjID0gMTsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHByaW50ZigiKE9LKVxu Iik7CisgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgcHJpbnRmKCIoRkFJTEVEKVxuIik7 CisgICAgcmV0dXJuKHJjKTsKK30KKworLyogRG8gdGhlIChfKURFRklORSwgKF8pQVNTSUdOLCBh bmQgVU5ERUZJTkUgY29tbWFuZHMgKi8KKworI2RlZmluZSBVTkRfTUFUIDEKKyNkZWZpbmUgVU5E X1ZSQiAyCisjZGVmaW5lIFVORF9FWEMgMworI2RlZmluZSBVTkRfU0lNIDMKKworc3RhdGljIHN0 cnVjdCBrZXl0YWIgdW5kZWZzd2lbXSA9IHsKKyAgICB7ICIvbGlzdCIsICAgICBVTkRfVlJCLCAw IH0sCisjaWZkZWYgQ09NTUVOVAorICAgIHsgIi9leGNlcHQiLCAgIFVORF9FWEMsIENNX0FSRyB9 LAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICIvbWF0Y2hpbmciLCBVTkRfTUFULCAwIH0s CisgICAgeyAiL3NpbXVsYXRlIiwgVU5EX1NJTSwgMCB9LAorICAgIHsgIi92ZXJib3NlIiwgIFVO RF9WUkIsIENNX0lOViB9Cit9Oworc3RhdGljIGludCBudW5kZWZzd2kgPSBzaXplb2YodW5kZWZz d2kpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCisjZGVmaW5lIFVOREVGTUFYIDY0CitzdGF0 aWMgY2hhciAqKiB1bmRlZmxpc3QgPSBOVUxMOworaW50Citkb3VuZGVmKGN4KSBpbnQgY3g7IHsg ICAgICAgICAgICAgICAgICAgLyogVU5ERUYsIF9VTkRFRiAqLworICAgIGludCBpLCBqLCBuLCBy YyA9IDAsIGFycmF5bXNnID0gMDsKKyAgICBpbnQgZG9tYXRjaCA9IDAsIHZlcmJvc2UgPSAwLCBl cnJvcnMgPSAwLCBzaW11bGF0ZSA9IDAsIGZsYWcgPSAwOworICAgIGNoYXIgKnZucCwgdm5idWZb NF07CisjaWZkZWYgQ09NTUVOVAorICAgIGNoYXIgKmV4Y2VwdCA9IE5VTEw7CisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgIHN0cnVjdCBGREIgc3csIGZsOworICAgIGludCBnZXR2YWw7CisgICAg Y2hhciBjOworCisgICAgaWYgKCF1bmRlZmxpc3QpIHsgICAgICAgICAgICAgICAgICAgLyogQWxs b2NhdGUgbGlzdCBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgdW5kZWZsaXN0ID0gKGNoYXIgKiop bWFsbG9jKFVOREVGTUFYICogc2l6ZW9mKGNoYXIgKikpOworICAgICAgICBpZiAoIXVuZGVmbGlz dCkgeworICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7 CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBVTkRFRk1BWDsgaSsrKQorICAgICAgICAgIHVuZGVmbGlzdFtpXSA9IE5VTEw7CisgICAg fQorICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAt IGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAg ICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAiVmFyaWFibGUgbmFtZSBvciBzd2l0Y2giLAor ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAg ICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0 YSAqLworICAgICAgICAgICBudW5kZWZzd2ksICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51 bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKyAgICAgICAg ICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICov CisgICAgICAgICAgIHVuZGVmc3dpLCAgICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJs ZSAqLworICAgICAgICAgICAmZmwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgKTsKKyAgICBjbWZkYmkoJmZsLCAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBBbnl0aGluZyB0aGF0IGRvZXNuJ3QgbWF0Y2ggKi8KKyAgICAgICAg ICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICov CisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDIgKi8KKyAgICAgICAgICAgKGN4ID09IFhYVU5ERUYpID8gTlVMTCA6IHh4c3RyaW5n LAorICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMCisgICAgICAgICAgICk7CisgICAg d2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgMCBvciBtb3JlIHN3 aXRjaGVzICovCisgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAgICAgLyogUGFy c2Ugc29tZXRoaW5nICovCisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpICAgLyogQnJlYWsgb3V0IGlm IG5vdCBhIHN3aXRjaCAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICBjID0gY21nYnJrKCk7 CisgICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdr d2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRv ZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgfQorICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAgICBj YXNlIFVORF9NQVQ6IGRvbWF0Y2ggID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBVTkRfU0lN OiBzaW11bGF0ZSA9IDE7IC8qIGZhbGwgdGhydSBvbiBwdXJwb3NlICovCisgICAgICAgICAgY2Fz ZSBVTkRfVlJCOiB2ZXJib3NlICA9IDE7IGJyZWFrOworCisjaWZkZWYgQ09NTUVOVAorICAgICAg ICAgIGNhc2UgVU5EX0VYQzoKKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAg ICAgICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewor ICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgICAgICB4ID0gLTk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBtYWtlc3RyKCZleGNlcHQsY21yZXN1bHQuc3Jlc3VsdCk7CisgICAg ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBuID0gMDsK KyAgICBtYWtlc3RyKCYodW5kZWZsaXN0W24rK10pLGNtcmVzdWx0LnNyZXN1bHQpOworICAgIGZv ciAoaSA9IDE7IGkgPCBVTkRFRk1BWDsgaSsrKSB7CisgICAgICAgIHggPSBjbWZsZCgiTWFjcm8g b3IgdmFyaWFibGUgbmFtZSIsIiIsJnMsCisgICAgICAgICAgICAgICAgICAoKGN4ID09IFhYVU5E RUYpID8gTlVMTCA6IHh4c3RyaW5nKQorICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYg KHggPT0gLTMpIHsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAg ICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAo eSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgfQorICAgICAgICBtYWtl c3RyKCYodW5kZWZsaXN0W24rK10pLHMpOworICAgIH0KKyAgICAvKiBOb3cgd2UgaGF2ZSBhIGxp c3Qgb2YgbiB2YXJpYWJsZXMgb3IgcGF0dGVybnMgdG8gdW5kZWZpbmUgKi8KKworICAgIGZvciAo aSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgZmxhZyA9IDA7CisgICAgICAgIGlmICghKHZu cCA9IHVuZGVmbGlzdFtpXSkpCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICh2bnBb MF0gPT0gQ01EUSAmJiAodm5wWzFdID09ICclJyB8fCB2bnBbMV0gPT0gJyYnKSkgeworICAgICAg ICAgICAgZmxhZysrOworICAgICAgICAgICAgdm5wKys7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCFkb21hdGNoKSB7ICAgICAgICAgICAgICAgICAvKiBQYXR0ZXJuIG1hdGNoIG5vdCByZXF1ZXN0 ZWQgKi8KKyAgICAgICAgICAgIGlmIChmbGFnKSB7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0g cGFyc2V2YXIodm5wLCZ4LCZ6KSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZucC0tOwor ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgcHJpbnRmKCIgJXMuLi5lcnJvclxuIix2 bnApOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgdm5wLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4ID0geHh1 bmRlZih2bnAsdmVyYm9zZSxzaW11bGF0ZSk7CisgICAgICAgICAgICBpZiAoeCA+IC0xKSB7Cisg ICAgICAgICAgICAgICAgaWYgKCF4ICYmICFzaW11bGF0ZSkgZXJyb3JzKys7CisgICAgICAgICAg ICAgICAgcmMgKz0geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICB9CisgICAgICAgIC8qIFBhdHRlcm4gbWF0Y2ggcmVxdWVzdGVkICovCisKKyAgICAgICAg aWYgKCFmbGFnKSB7ICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIGEgbWFjcm8gKi8KKyAgICAg ICAgICAgIGZvciAoaiA9IDA7IGogPCBubWFjOyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAo Y2ttYXRjaCh2bnAsbWFjdGFiW2pdLmt3ZCwwLDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHgg PSB4eHVuZGVmKG1hY3RhYltqXS5rd2QsdmVyYm9zZSxzaW11bGF0ZSk7CisgICAgICAgICAgICAg ICAgICAgIGlmICh4ID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjICs9IHg7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXgpIGVycm9ycysrOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghc2ltdWxhdGUpCisgICAgICAgICAgICAg ICAgICAgICAgai0tOyAgICAgICAgICAgICAgLyogQmVjYXVzZSBtYWN0YWIgc2hpZnRlZCB1cCAq LworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh2 bnBbMF0gPT0gJyUnKSB7ICAgICAvKiBJdCdzIGEgXCV4IHZhcmlhYmxlICovCisgICAgICAgICAg ICB2bmJ1ZlswXSA9IENNRFE7CisgICAgICAgICAgICB2bmJ1ZlsxXSA9ICclJzsKKyAgICAgICAg ICAgIHZuYnVmWzNdID0gTlVMOworICAgICAgICAgICAgZm9yIChqID0gJzAnOyBqIDw9ICd6Jzsg aisrKSB7IC8qIDAuLjkgYS4ueiAqLworICAgICAgICAgICAgICAgIHZuYnVmWzJdID0gajsKKyAg ICAgICAgICAgICAgICBpZiAoY2ttYXRjaCh2bnAsJnZuYnVmWzFdLDAsMSkpIHsKKyAgICAgICAg ICAgICAgICAgICAgeCA9IHh4dW5kZWYodm5idWYsdmVyYm9zZSxzaW11bGF0ZSk7CisgICAgICAg ICAgICAgICAgICAgIGlmICh4ID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh eCkgZXJyb3JzKys7CisgICAgICAgICAgICAgICAgICAgICAgICByYyArPSB4OworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChqID09 ICc5JykgaiA9IChpbnQpJ2EnIC0gMTsgLyogOSAtPiBhICovCisgICAgICAgICAgICB9CisgICAg ICAgIH0gZWxzZSBpZiAodm5wWzBdID09ICcmJykgeworICAgICAgICAgICAgaWYgKCFhcnJheW1z ZyAmJiAhcXVpZXQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9VTkRFRklORSAvTUFUQ0gg Y2FuJ3QgYmUgdXNlZCB3aXRoIGFycmF5cy5cbiIpOworICAgICAgICAgICAgICAgIHByaW50Zigi KFR5cGUgSEVMUCBBUlJBWSB0byBzZWUgb3RoZXIgbWV0aG9kcy4pXG4iKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGFycmF5bXNnKys7CisgICAgICAgICAgICBlcnJvcnMrKzsKKyAgICAg ICAgfQorICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgIHByaW50ZigidW5kZWZpbmVkOiAl ZCwgZXJyb3JzOiAlZFxuIixyYyxlcnJvcnMpOworCisgICAgZm9yIChpID0gMDsgaSA8IFVOREVG TUFYOyBpKyspIHsgICAgLyogQ2hlY2sgdGhlbSBhbGwgKi8KKyAgICAgICAgaWYgKHVuZGVmbGlz dFtpXSkgeyAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHdlcmUgaW50ZXJydXB0ZWQgKi8KKyAg ICAgICAgICAgIGZyZWUodW5kZWZsaXN0W2ldKTsgICAgICAgICAvKiBwcmV2aW91c2x5Li4uICov CisgICAgICAgICAgICB1bmRlZmxpc3RbaV0gPSBOVUxMOworICAgICAgICB9CisgICAgfQorICAg IHJldHVybihzdWNjZXNzID0gKGVycm9ycyA9PSAwKSA/IDEgOiAwKTsKK30KKworaW50Citkb2Rl ZihjeCkgaW50IGN4OyB7CisgICAgZXh0ZXJuIGludCB4eGRvdDsKKyAgICBleHRlcm4gY2hhciBw cHZuYW1idWZbXTsKKyAgICBpbnQgZG9ldmFsID0gMDsKKyAgICBjaGFyIHZuYW1idWZbVk5BTUwr MV07ICAgICAgICAgICAgICAvKiBCdWZmZXIgZm9yIHZhcmlhYmxlIG5hbWVzICovCisgICAgY2hh ciAqdm5wOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBzYW1lICovCisg ICAgaW50IGssIG15ZG90OworICAgIG15ZG90ID0geHhkb3Q7ICAgICAgICAgICAgICAgICAgICAg IC8qIENvcHkgKi8KKyAgICB4eGRvdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBh bmQgcmVzZXQgKi8KKy8qCisgIEluIGNhc2Ugd2UgZ290IGhlcmUgZnJvbSBhIGNvbW1hbmQgdGhh dCBiZWdpbnMgbGlrZSAiLlwlYSIsIGNta2V5KCkgaGFzCisgIGFscmVhZHkgZXZhbHVhdGVkIFwl YSwgYnV0IHdlIGRvbid0IHdhbnQgdGhhdCwgc28gd2UgcmV0cmlldmUgdGhlIHZhcmlhYmxlCisg IG5hbWUgZnJvbSBhIHNwZWNpYWwgcHJlLWV2YWx1YXRpb24gYnVmZmVyIGluIHRoZSBjb21tYW5k IG1vZHVsZSwgYW5kIHdlCisgIHVuZG8gdGhlICJ1bmdldCB3b3JkIiB0aGF0IHdvdWxkIGJlIGRv bmUgYmVjYXVzZSBvZiB0aGUgdG9rZW4sIGJlY2F1c2UgaWYKKyAgdGhlIHZhcmlhYmxlIHdhcyBk ZWZpbmVkLCBpdCB3aWxsIHVuZ2V0IGl0cyB2YWx1ZSByYXRoZXIgdGhhbiBpdHMgbmFtZS4KKyov CisgICAgcyA9IE5VTEw7CisKKyAgICBpZiAobXlkb3QgJiYgcHB2bmFtYnVmWzBdID09ICcuJyAm JiBwcHZuYW1idWZbMV0pIHsKKyAgICAgICAgcyA9IHBwdm5hbWJ1ZisxOworICAgICAgICB1bnVu Z3coKTsKKyAgICB9CisgICAgaWYgKCFzKSB7CisgICAgICAgIGlmIChjeCA9PSBYWERGWCB8fCBj eCA9PSBYWEFTWCkKKyAgICAgICAgICAvKiBFdmFsdWF0ZSB2YXJpYWJsZSBuYW1lICovCisgICAg ICAgICAgeSA9IGNtZmxkKCJNYWNybyBvciB2YXJpYWJsZSBuYW1lIiwiIiwmcyx4eHN0cmluZyk7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAvKiBEb24ndCBldmFsdWF0ZSB0aGUgdmFyaWFibGUg bmFtZSAqLworICAgICAgICAgIHkgPSBjbWZsZCgiTWFjcm8gb3IgdmFyaWFibGUgbmFtZSIsIiIs JnMsTlVMTCk7CisgICAgICAgIGlmICh5IDwgMCkgeworICAgICAgICAgICAgaWYgKHkgPT0gLTMp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9WYXJpYWJsZSBuYW1lIHJlcXVpcmVkXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfSBlbHNlIHJldHVybih5 KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBrID0gc3RybGVuKHMpOworICAgIGlmIChrID4gVk5B TUwpIHsKKyAgICAgICAgcHJpbnRmKCI/TmFtZSB0b28gbG9uZzogXCIlc1wiXG4iLHMpOworICAg ICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBja3N0cm5jcHkodm5hbWJ1ZixzLFZOQU1MKTsK KyAgICB2bmFtYnVmW1ZOQU1MXSA9IE5VTDsKKyAgICB2bnAgPSB2bmFtYnVmOworICAgIGlmICh2 bmFtYnVmWzBdID09IENNRFEgJiYgKHZuYW1idWZbMV0gPT0gJyUnIHx8IHZuYW1idWZbMV0gPT0g JyYnKSkgdm5wKys7CisgICAgaWYgKCp2bnAgPT0gJyUnIHx8ICp2bnAgPT0gJyYnKSB7CisgICAg ICAgIGlmICgoeSA9IHBhcnNldmFyKHZucCwmeCwmeikpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgaWYgKGN4ID09IFhYVU5ERUYpIHsgICAgICAgICAgICAvKiBVbmRl ZmluZSAqLworICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIlRleHQgdG8gYmUgaWdub3JlZCIs IiIsJnMsTlVMTCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgZGVsbWFjKHZucCwwKTsK KyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgIGRlYnVnKEYxMDEsImRvZGVmIHBhcnNldmFyIHgiLCIiLHgpOwor ICAgICAgICBpZiAobXlkb3QpIHsKKyAgICAgICAgICAgIGlmICgoZG9ldmFsID0gY21rZXkoYXNn dGFiLG5hc2d0YWIsIm9wZXJhdG9yIiwiPSIsTlVMTCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0 dXJuKGRvZXZhbCk7CisgICAgICAgICAgICBpZiAoZG9ldmFsID4gMCkgICAgICAgICAgICAgLyog VHlwZSBvZiBhc3NpZ25tZW50ICovCisgICAgICAgICAgICAgIGN4ID0gWFhBU1M7CisgICAgICAg IH0KKyAgICAgICAgaWYgKHkgPT0gMSkgeyAgICAgICAgICAgICAgICAgICAvKiBTaW1wbGUgdmFy aWFibGUgKi8KKyAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJEZWZpbml0aW9uIG9mIHZhcmlh YmxlIiwiIiwmcyxOVUxMKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAg ICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInh4ZGVmIHZhciBu YW1lIix2bnAsMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGRlZiB2YXIgZGVmIixzLDAp OworICAgICAgICB9IGVsc2UgaWYgKHkgPT0gMikgeyAgICAgICAgICAgIC8qIEFycmF5IGVsZW1l bnQgKi8KKyAgICAgICAgICAgIGlmICgoeSA9IGFycmF5bmFtKHZucCwmeCwmeikpIDwgMCkgcmV0 dXJuKHkpOworICAgICAgICAgICAgaWYgKHggPT0gOTYpIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIj9Bcmd1bWVudCB2ZWN0b3IgYXJyYXkgaXMgcmVhZC1vbmx5XG4iKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoa2FycmF5 KHgseikgPCAwKSByZXR1cm4oLTIpOworICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIkRlZmlu aXRpb24gb2YgYXJyYXkgZWxlbWVudCIsIiIsJnMsTlVMTCkpIDwgMCkKKyAgICAgICAgICAgICAg cmV0dXJuKHkpOworICAgICAgICAgICAgZGVidWcoRjExMCwieHhkZWYgYXJyYXkgcmVmIix2bnAs MCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGRlZiBhcnJheSBkZWYiLHMsMCk7CisgICAg ICAgIH0KKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWNybyAq LworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKGN4ID09IFhYVU5ERUYpIHsgICAgICAgICAg ICAvKiBVbmRlZmluZSAqLworICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIlRleHQgdG8gYmUg aWdub3JlZCIsIiIsJnMsTlVMTCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgZGVsbWFj KHZucCwwKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIH0KKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlmIChteWRvdCkgeworICAgICAgICAgICAgaWYg KChkb2V2YWwgPSBjbWtleShhc2d0YWIsbmFzZ3RhYiwib3BlcmF0b3IiLCI9IixOVUxMKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oZG9ldmFsKTsKKyAgICAgICAgICAgIGlmIChkb2V2YWwg PiAwKQorICAgICAgICAgICAgICBjeCA9IFhYQVNTOworICAgICAgICB9CisgICAgICAgIGlmICgo eSA9IGNtdHh0KCJEZWZpbml0aW9uIG9mIG1hY3JvIiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4o eSk7CisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgZGVi dWcoRjExMCwieHhkZWYgbWFjcm8gbmFtZSIsdm5wLDApOworICAgICAgICAgICAgZGVidWcoRjAx MCwieHhkZWYgbWFjcm8gZGVmIixzLDApOworICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgfQorICAgIGlmICgqcyA9PSBOVUwpIHsgICAg ICAgICAgICAgICAgICAgIC8qIE5vIGFyZyBnaXZlbiwgdW5kZWZpbmUgKi8KKyAgICAgICAgZGVs bWFjKHZucCwxKTsgICAgICAgICAgICAgICAgICAvKiBzaWxlbnRseS4uLiAqLworICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOyAgICAgICAgICAgIC8qIGV2ZW4gaWYgaXQgZG9lc24ndCBleGlz dC4uLiAqLworICAgIH0KKyAgICAvKiBEZWZpbmluZyBhIG5ldyBtYWNybyBvciB2YXJpYWJsZSAq LworCisgICAgaWYgKGN4ID09IFhYQVNTIHx8IGN4ID09IFhYQVNYKSB7ICAgLyogQVNTSUdOIHJh dGhlciB0aGFuIERFRklORT8gKi8KKyAgICAgICAgaW50IHQ7CisgICAgICAgIHQgPSBMSU5CVUZT SVotMTsKKyAgICAgICAgbHAgPSBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBzbywg ZXhwYW5kIGl0cyB2YWx1ZSBub3cgKi8KKyAgICAgICAgenpzdHJpbmcocywmbHAsJnQpOworICAg ICAgICBzID0gbGluZTsKKyAgICB9CisgICAgaWYgKGRvZXZhbCA9PSAyKSB7ICAgICAgICAgICAg ICAgICAgLyogQXJpdGhtZXRpYyBldmFsdWF0aW9uIHdhbnRlZCB0b28/ICovCisgICAgICAgIGNr c3RybmNweShsaW5lLGV2YWxhKHMpLExJTkJVRlNJWik7CisgICAgICAgIGxpbmVbTElOQlVGU0la XSA9IE5VTDsKKyAgICB9CisgICAgLyogZGVidWcoRjExMSwiY2FsbGluZyBhZGRtYWMiLHMsKGlu dClzdHJsZW4ocykpOyAqLworCisgICAgeSA9IGFkZG1hYyh2bnAscyk7ICAgICAgICAgICAgICAg ICAgLyogQWRkIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSB0YWJsZS4gKi8KKyAgICBpZiAoeSA8IDAp IHsKKyAgICAgICAgcHJpbnRmKCI/JXMgZmFpbGVkXG4iLChjeCA9PSBYWEFTUyB8fCBjeCA9PSBY WEFTWCkgPworICAgICAgICAgICAgICAgIkFTU0lHTiIgOiAiREVGSU5FIik7CisgICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7CisgICAgfSBlbHNlIGlmIChjeCA9PSBYWEFTWCB8fCBjeCA9PSBY WERGWCkgLyogRm9yIF9BU0cgb3IgX0RFRiwgKi8KKyAgICAgIHJldHVybigxKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBkb24ndCBjaGFuZ2Ugc3VjY2VzcyB2YXJpYWJsZSAqLworICAg IGVsc2UKKyAgICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisjZW5kaWYgLyogTk9TUEwgKi8K KworCisjaWZuZGVmIE5PRElBTAorLyoKKyAgIEwgVSBEIEkgQSBMICAtLSAgTG9va3VwIHVwIGRp YWxpbmcgZGlyZWN0b3J5IGVudHJ5LgorCisgICBDYWxsIHdpdGggc3RyaW5nIHRvIGxvb2sgdXAg YW5kIGZpbGUgZGVzY3JpcHRvciBvZiBvcGVuIGRpYWxpbmcgZGlyZWN0b3J5CisgICBmaWxlLiAg T24gc3VjY2VzcywgcmV0dXJucyBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZCwgd2l0aCBudW1iZXJz IHN0b3JlZAorICAgaW4gYW4gYXJyYXkgYWNjZXNzaWJsZSB2aWEgZ2V0ZG51bSgpLgorKi8KK3N0 YXRpYyBjaGFyICpkbl9wW01BWEROVU1TICsgMV07ICAgICAgICAvKiBEaWFsIE51bWJlciBwb2lu dGVycyAqLworc3RhdGljIGNoYXIgKmRuX3AyW01BWEROVU1TICsgMV07ICAgICAgIC8qIENvbnZl cnRlZCBkaWFsIG51bWJlciBwb2ludGVycyAqLworc3RhdGljIGludCBkbl94W01BWEROVU1TICsg MV07ICAgICAgICAgIC8qIFR5cGUgb2YgY2FsbCAqLworc3RhdGljIGludCBkbmNvdW50ID0gMDsK K2NoYXIgKiBkX25hbWUgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAvKiBEaWFsIG5hbWUgcG9p bnRlciAqLworCitjaGFyICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0 IGRpYWwgZGlyZWN0b3J5IGVudHJ5IG5hbWUgKi8KK2dldGRuYW1lKCkgeworICAgIHJldHVybihk X25hbWUgPyBkX25hbWUgOiAiIik7Cit9CisKK2NoYXIgKgorZ2V0ZG51bShuKSBpbnQgbjsgeyAg ICAgICAgICAgICAgICAgICAgIC8qIEdldCBkaWFsIG51bWJlciBuIGZyb20gZGlyZWN0b3J5ICov CisgICAgaWYgKG4gPCAwIHx8IG4gPiBkbmNvdW50IHx8IG4gPiBNQVhETlVNUykKKyAgICAgIHJl dHVybigiIik7CisgICAgZWxzZQorICAgICAgcmV0dXJuKGRuX3Bbbl0pOworfQorCitjaGFyICog ICAgICAgICAgICAgICAgICAvKiBDaGVjayBhcmVhIGNvZGUgZm9yIHNwdXJpb3VzIGxlYWRpbmcg ZGlnaXQgKi8KK2Noa19hYyhpLGJ1ZikgaW50IGk7IGNoYXIgYnVmW107IHsKKyAgICBjaGFyICpw OworICAgIGlmICghYnVmKQorICAgICAgcmV0dXJuKCIiKTsKKyAgICBwID0gKGNoYXIgKikgYnVm OyAgICAgICAgICAgICAgICAgICAvKiBDb3VudHJ5IHdlIGFyZSBjYWxsaW5nOiAqLworICAgIGlm IChpID09ICA0NCB8fCAgICAgICAgICAgICAgICAgICAgIC8qIFVLICovCisgICAgICAgIGkgPT0g IDQ5IHx8ICAgICAgICAgICAgICAgICAgICAgLyogR2VybWFueSAqLworICAgICAgICBpID09ICAz OSB8fCAgICAgICAgICAgICAgICAgICAgIC8qIEl0YWx5ICovCisgICAgICAgIGkgPT0gIDMxIHx8 ICAgICAgICAgICAgICAgICAgICAgLyogTmV0aGVybGFuZHMgKi8KKyAgICAgICAgaSA9PSAzNTEg fHwgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0dWdhbCAqLworICAgICAgICBpID09ICA1NSB8 fCAgICAgICAgICAgICAgICAgICAgIC8qIEJyYXppbCAqLworICAgICAgICBpID09IDk3MiB8fCAg ICAgICAgICAgICAgICAgICAgIC8qIElzcmFlbCAqLworICAgICAgICBpID09ICA0MSB8fCAgICAg ICAgICAgICAgICAgICAgIC8qIFN3aXR6ZXJsYW5kICovCisgICAgICAgIGkgPT0gIDQzIHx8ICAg ICAgICAgICAgICAgICAgICAgLyogQXVzdHJpYSAqLworICAgICAgICBpID09ICA0MiB8fCAgICAg ICAgICAgICAgICAgICAgIC8qIEN6ZWNoIFJlcHVibGljICovCisgICAgICAgIGkgPT0gIDM2IHx8 ICAgICAgICAgICAgICAgICAgICAgLyogSHVuZ2FyeSAqLworICAgICAgICBpID09ICAzMCB8fCAg ICAgICAgICAgICAgICAgICAgIC8qIEdyZWVjZSAqLworICAgICAgICBpID09IDM1MiB8fCAgICAg ICAgICAgICAgICAgICAgIC8qIEx1eGVtYm91cmcgKi8KKyAgICAgICAgaSA9PSAgNDggfHwgICAg ICAgICAgICAgICAgICAgICAvKiBQb2xhbmQgKi8KKyAgICAgICAgaSA9PSAgMjcgfHwgICAgICAg ICAgICAgICAgICAgICAvKiBTb3V0aCBBZnJpY2EgKi8KKyAgICAgICAgaSA9PSAgMzMgfHwgICAg ICAgICAgICAgICAgICAgICAvKiBGcmFuY2UgKGFzIG9mIDE5OTcpICovCisgICAgICAgIGkgPT0g IDM1OCAgICAgICAgICAgICAgICAgICAgICAgLyogRmlubGFuZCAoZGl0dG8pICovCisgICAgICAg ICkgeworICAgICAgICBpZiAoYnVmWzBdID09ICcwJykKKyAgICAgICAgICBwKys7CisgICAgfQor ICAgIHJldHVybihwKTsKK30KKworLyogQ2FsbCBJcyBMb25nIERpc3RhbmNlIC0tIEV4cGFuZCB0 aGlzIHRvIGNvdmVyIDEwLWRpZ2l0IGxvY2FsIGRpYWxpbmcgZXRjICovCisvKgorICAgc3JjICA9 IGFyZWEgY29kZSBvZiBjYWxsZXIKKyAgIGRlc3QgPSBhcmVhIGNvZGUgb2YgY2FsbGVlCisgICBS ZXR1cm5zOgorICAgICAwIGlmIGNhbGwgaXMgbG9jYWwKKyAgICAgMSBpZiBjYWxsIGlzIGxvbmcg ZGlzdGFuY2UKKyAgICAgMiBpZiBjYWxsIGlzIGxvY2FsIGJ1dCBhcmVhIGNvZGUgbXVzdCBiZSBk aWFsZWQgYW55d2F5CisqLworc3RhdGljIGludAorY2FsbGlzbGQoc3JjLCBkZXN0KSBjaGFyICog c3JjLCAqIGRlc3Q7IHsKKyAgICBpbnQgaTsKKyAgICBpZiAoZGlhbGZsZCkgICAgICAgICAgICAg ICAgICAgICAgICAvKiBGb3JjZSBsb25nIGRpc3RhbmNlPyAqLworICAgICAgcmV0dXJuKDEpOwor ICAgIGlmICghc3RyY21wKHNyYyxkZXN0KSkgeyAgICAgICAgICAgIC8qIEFyZWEgY29kZXMgYXJl IHRoZSBzYW1lICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBubG9jYWxhYzsgaSsrKSAgLyog SXMgQUMgaW4gdGhlIGxjLWFyZWEtY29kZXMgbGlzdD8gKi8KKyAgICAgICAgICBpZiAoIXN0cmNt cChzcmMsZGlhbGxjYWNbaV0pKQorICAgICAgICAgICAgcmV0dXJuKDIpOyAgICAgICAgICAgICAg ICAgIC8qIFllcyBzbyBtdXN0IGJlIGRpYWxlZCAqLworICAgICAgICByZXR1cm4oMCk7ICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vIHNvIGRvbid0IGRpYWwgaXQuICovCisgICAgfQorICAgIGZv ciAoaSA9IDA7IGkgPCBubG9jYWxhYzsgaSsrKSAgICAgIC8qIEFDcyBub3QgdGhlIHNhbWUgc28g bG9vayBpbiBsaXN0ICovCisgICAgICBpZiAoIXN0cmNtcChkZXN0LGRpYWxsY2FjW2ldKSkgICAg LyogTWF0Y2ggKi8KKyAgICAgICAgcmV0dXJuKDIpOyAgICAgICAgICAgICAgICAgICAgICAvKiBT byBsb2NhbCBjYWxsIHdpdGggYXJlYSBjb2RlICovCisgICAgcmV0dXJuKDEpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTm90IGxvY2FsIHNvIGxvbmctZGlzdGFuY2UgKi8KK30KKworY2hh ciBwZHNmeFs2NF0gPSB7IE5VTCwgTlVMIH07CisKKyNpZm5kZWYgTk9TUEwKK3N0YXRpYyBjaGFy ICoKK3hkaWFsKHMpIGNoYXIgKnM7IHsgICAgICAgICAgICAgICAgICAgICAvKiBSdW4gZGlhbCBz dHJpbmcgdGhydSBtYWNybyAqLworICAgIGludCB4LCBtOworICAgIGNoYXIgKiBzMjsKKyAgICBz MiA9IE5VTEw7CisgICAgbWFrZXN0cigmczIscyk7CQkJLyogQ29weSB0aGUgYXJndW1lbnQgKi8K KyAgICBpZiAoIWRpYWxtYWMpICAgICAgICAgICAgICAgICAgICAgICAvKiBEaWFsIG1hY3JvIG5h bWUgZ2l2ZW4/ICovCisgICAgICByZXR1cm4oTlVMTCk7CisgICAgaWYgKCh4ID0gbXhsb29rKG1h Y3RhYixkaWFsbWFjLG5tYWMpKSA8IDApIC8qIElzIHRoZSBtYWNybyBkZWZpbmVkPyAqLworICAg ICAgcmV0dXJuKE5VTEwpOworICAgIG0gPSBtYWNsdmw7CisgICAgeCA9IGRvZG8oeCxzMiwwKTsJ CQkvKiBTZXQgdXAgdGhlIG1hY3JvICovCisgICAgaWYgKHMyKSBmcmVlKHMyKTsKKyAgICBpZiAo eCA+IDApIHsKKyAgICAgICAgd2hpbGUgKG1hY2x2bCA+IG0pICAgICAgICAgICAgICAvKiBFeGVj dXRlIHRoZSBwYXJzZXIgKi8KKyAgICAgICAgICBwYXJzZXIoMSk7CisgICAgICAgIHJldHVybiht cnZhbFttYWNsdmwrMV0pOyAgICAgICAgLyogUmV0dXJuIHRoZSByZXN1bHQgKi8KKyAgICB9Cisg ICAgcmV0dXJuKE5VTEwpOworfQorI2VuZGlmIC8qIE5PU1BMICovCisKK3N0YXRpYyBpbnQKK2Ru Y3Z0KGssY3gsIHByZWZpeCwgc3VmZml4KQorICAgIGludCBrLCBjeCwgcHJlZml4LCBzdWZmaXg7 IHsgICAgICAgIC8qIERpYWwgTnVtYmVyIENvbnZlcnQgKi8KKyAgICBpbnQgaSwgaiwgbiwgd2hh dDsgICAgICAgICAgICAgICAgICAvKiBjeCBpcyB0b3AtbGV2ZWwgY29tbWFuZCBpbmRleCAqLwor ICAgIGNoYXIgKnNzOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWZpeCAtIGFkZCBw cmVmaXhlcz8gKi8KKyAgICBjaGFyICpwLCAqcDIsICpweG87ICAgICAgICAgICAgICAgICAvKiBz dWZmaXggLSBhZGQgc3VmZml4ZXM/ICovCisgICAgY2hhciAqbGFjOworICAgIGNoYXIgKm5wcjsK KyAgICBjaGFyICpzZng7CisgICAgLyogY2hhciAqcHNmeDsgKi8KKyAgICBjaGFyIGNjYnVmWzEy OF07CisgICAgaW50IGNjOworICAgIGNoYXIgYWNidWZbMjRdOworICAgIGNoYXIgKmFjcHRyOwor ICAgIGNoYXIgb3V0YnVmWzI1Nl07CisvKgorICBGaXJzdCBwYXNzIGZvciBzdHJpY3QgKHB1bmN0 dWF0aW9uLWJhc2VkKSBpbnRlcnByZXRhdGlvbi4KKyAgSWYgaXQgZmFpbHMsIHdlIHRyeSB0aGUg bG9vc2VyIChsZW5ndGgtYmFzZWQpIG9uZS4KKyovCisgICAgZGlhbHR5cGUgPSAtMTsKKyAgICB3 aGF0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIG9mIGNhbGwgKi8KKyAg ICBzID0gZG5fcFtrXTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgdG8gYmUgY29u dmVydGVkLiAqLworICAgIGRlYnVnKEYxMTEsImRuY3Z0IixzLGspOworICAgIGlmIChkbl9wMltr XSkgeworICAgICAgICBmcmVlKGRuX3AyW2tdKTsKKyAgICAgICAgZG5fcDJba10gPSBOVUxMOwor ICAgIH0KKyAgICBpZiAoIXMpIHsKKyAgICAgICAgcHJpbnRmKCJFcnJvciAtIE5vIHBob25lIG51 bWJlciB0byBjb252ZXJ0XG4iKTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgaWYg KChpbnQpc3RybGVuKHMpID4gMjAwKSB7CisgICAgICAgIGNrc3RybmNweShvdXRidWYscyw0MCk7 CisgICAgICAgIHByaW50ZigiP1RvbyBsb25nOiBcIiVzLi4uXCJcbiIsb3V0YnVmKTsKKyAgICAg ICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgbnByID0gKHByZWZpeCAmJiBkaWFsbnByKSA/IGRp YWxucHIgOiAiIjsKKyAgICBzZnggPSAoc3VmZml4ICYmIGRpYWxzZngpID8gZGlhbHNmeCA6ICIi OworICAgIC8qIGlmIChwYXJ0aWFsKSBwc2Z4ID0gZGlhbHNmeCA/IGRpYWxzZnggOiAiIjsgKi8K KyAgICBweG8gPSAocHJlZml4ICYmIGRpYWxweG8pID8gZGlhbHB4byA6ICIiOworICAgIGxhYyA9 IGRpYWxsYWMgPyBkaWFsbGFjIDogIiI7ICAgICAgIC8qIExvY2FsIGFyZWEgY29kZSAqLworCisg ICAgb3V0YnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjb252 ZXJzaW9uIGJ1ZmZlciAqLworICAgIHNzID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFJlbWVtYmVyIG9yaWdpbmFsIHN0cmluZyAqLworCisgICAgaWYgKCpzICE9ICcrJykgeyAg ICAgICAgICAgICAgICAgICAgLyogTGl0ZXJhbCBudW1iZXIgKi8KKyAgICAgICAgZG5feFtrXSA9 IEROX1VOSzsgICAgICAgICAgICAgICAvKiBTb3J0IGtleSBpcyAidW5rbm93biIuICovCisgICAg ICAgIGNrbWFrbXNnKG91dGJ1ZiwyNTYsICAgICAgICAgICAgLyogU2FuZHdpY2ggaXQgYmV0d2Vl biAqLworICAgICAgICAgICAgICAgICBweG8sbnByLHMsc2Z4ICAgICAgICAgIC8qIERJQUwgUFJF RklYIGFuZCBTVUZGSVggKi8KKyAgICAgICAgICAgICAgICApOworI2lmZGVmIENLX1RBUEkKKyAg ICAgICAgaWYgKHR0dGFwaSAmJiAgICAgICAgICAgICAgICAgICAvKiBUQVBJIGRvZXMgaXRzIG93 biBjb252ZXJzaW9ucyAqLworICAgICAgICAgICAgIXRhcGlwYXNzICYmICAgICAgICAgICAgICAg IC8qIGlmIG5vdCBpbiBwYXNzdGhydSBtb2RlICovCisgICAgICAgICAgICB0YXBpY29udiA9PSBD S19BVVRPIHx8ICAgICAgLyogYW5kIFRBUEkgY29udmVyc2lvbnMgYXJlIEFVVE8gKi8KKyAgICAg ICAgICAgIHRhcGljb252ID09IENLX09OICAgICAgICAgICAvKiBPUiBpZiBUQVBJIGNvbnZlcnNp b25zIGFyZSBPTiAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBjaGFyICogcCA9IE5V TEw7CisgICAgICAgICAgICBkaWFsdHlwZSA9IC0yOworICAgICAgICAgICAgaWYgKCFja3RhcGlD b252ZXJ0UGhvbmVOdW1iZXIoZG5fcFtrXSwgJnApKQorICAgICAgICAgICAgICByZXR1cm4oLTEp OworICAgICAgICAgICAgbWFrZXN0cigmZG5fcDJba10sIHApOworICAgICAgICAgICAgaWYgKHAp IGZyZWUocCk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0gZWxzZQorI2VuZGlm IC8qIENLX1RBUEkgKi8KKyAgICAgICAgICBtYWtlc3RyKCZkbl9wMltrXSwgb3V0YnVmKTsgICAv KiBOb3QgVEFQSSAqLworICAgICAgICBkaWFsdHlwZSA9IHdoYXQ7CisgICAgICAgIHJldHVybigw KTsgICAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KKyAgICB9CisgICAgaSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9ydGFibGUgbnVtYmVyICovCisgICAgcysr OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGlwdG9lIHBhc3QgdGhlIHBsdXMg c2lnbiAqLworICAgIGNjYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgIC8qIERvIGNv dW50cnkgY29kZSBmaXJzdCAqLworCisgICAgaWYgKCFkaWFsbGNjKSB7ICAgICAgICAgICAgICAg ICAgICAgLyogRG8gd2Uga25vdyBvdXIgb3duPyAqLworICAgICAgICBpZiAoY3ggIT0gWFhMT09L KQorICAgICAgICAgIHByaW50ZigiRXJyb3IgLSBwcmlvciBTRVQgRElBTCBDT1VOVFJZLUNPREUg Y29tbWFuZCByZXF1aXJlZFxuIik7CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorCisgICAg LyogUGFyc2UgdGhlIG51bWJlciAqLworCisgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogR2V0IHRoZSBjb3VudHJ5IGNvZGUgKi8KKyAgICAgICAgd2hpbGUgKCpzID09 IEhUIHx8ICpzID09IFNQKQorICAgICAgICAgIHMrKzsKKyAgICAgICAgaWYgKCFzKSAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBOb3QgaW4gc3RhbmRhcmQgZm9ybWF0ICovCisgICAgICAgICAg YnJlYWs7CisgICAgICAgIGlmICgqcyA9PSAnKCcpIHsgICAgICAgICAgICAgICAgLyogQmVnaW5u aW5nIG9mIGFyZWEgY29kZSAgKi8KKyAgICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTa2lwIHBhc3QgcGFyZW50aGVzaXMgICAqLworICAgICAgICAgICAgY2NidWZbaV0g PSBOVUw7ICAgICAgICAgICAgIC8qIEVuZCBvZiBjb3VudHJ5IGNvZGUgKi8KKyAgICAgICAgICAg IGlmICghcykgeyAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgZW5kIG9mIHN0cmluZyAq LworICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IgLSBwaG9uZSBudW1iZXIgZW5kcyBwcmVt YXR1cmVseTogXCIlc1wiXG4iLHNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ29sbGVjdCBjb3VudHJ5IGNvZGUgKi8KKyAgICAgICAgICAgIGlm IChpc2RpZ2l0KCpzKSkKKyAgICAgICAgICAgICAgY2NidWZbaSsrXSA9ICpzOyAgICAgICAgICAv KiBjb3B5IHRoaXMgY2hhcmFjdGVyICovCisgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBp ZiAoISpzIHx8IGkgPiAxMjcpICAgICAgICAgLyogd2F0Y2ggb3V0IGZvciBtZW1vcnkgbGVhayAq LworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYyA9IGF0b2ko Y2NidWYpOyAgICAgICAgICAgICAgICAgICAvKiBOdW1lcmljIHZlcnNpb24gb2YgY291bnRyeSBj b2RlICovCisKKyAgICBpID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3cg Z2V0IGFyZWEgY29kZSAqLworICAgIGFjYnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAg IC8qIEluaXRpYWxpemUgYXJlYS1jb2RlIGJ1ZmZlciAqLworICAgIGFjcHRyID0gYWNidWY7ICAg ICAgICAgICAgICAgICAgICAgIC8qIGFuZCBwb2ludGVyLiAqLworICAgIHdoaWxlICgxKSB7Cisg ICAgICAgIHdoaWxlICgqcyA9PSBIVCB8fCAqcyA9PSBTUCkgICAgLyogSWdub3JlIHdoaXRlc3Bh Y2UgKi8KKyAgICAgICAgICBzKys7CisgICAgICAgIGlmICghcykgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU3RyaW5nIGZpbmlzaGVkICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm ICgqcyA9PSAnKScpIHsgICAgICAgICAgICAgICAgLyogRW5kIG9mIGFyZWEgY29kZSAgKi8KKyAg ICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIHBhc3QgcGFyZW50 aGVzaXMgICAqLworICAgICAgICAgICAgYWNidWZbaV0gPSBOVUw7ICAgICAgICAgICAgIC8qIFRl cm1pbmF0ZSBhcmVhLWNvZGUgYnVmZmVyICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJ0IG9mIGFyZWEgY29kZSAqLwor ICAgICAgICAgICAgaWYgKGlzZGlnaXQoKnMpKSAgICAgICAgICAgIC8qIElmIGl0J3MgYSBkaWdp dCwgKi8KKyAgICAgICAgICAgICAgYWNidWZbaSsrXSA9ICpzOyAgICAgICAgICAvKiBjb3B5IHRo aXMgY2hhcmFjdGVyICovCisgICAgICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAg LyogUG9pbnQgdG8gbmV4dCAqLworICAgICAgICAgICAgaWYgKCEqcyB8fCBpID4gMjMpICAgICAg ICAgIC8qIFdhdGNoIG91dCBmb3Igb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICB9CisKKy8qCisgICBIZXJlIHdlIHN0cmlwIGFueSBsZWFkaW5nIDAgZm9y IGNvdW50cmllcyB0aGF0IHdlIGtub3cgaGF2ZQorICAgMCBhcyBhIGxvbmctZGlzdGFuY2UgcHJl Zml4IGFuZCBkbyBub3QgaGF2ZSBhbnkgYXJlYSBjb2RlcyB0aGF0CisgICBzdGFydCB3aXRoIDAg KGZvcm1lcmx5IGFsc28gZGl0dG8gZm9yICI5IiBpbiBGaW5sYW5kLi4uKQorKi8KKyAgICBpID0g YXRvaShjY2J1Zik7CisgICAgYWNwdHIgPSBjaGtfYWMoaSxhY2J1Zik7CisKKyAgICB3aGlsZSAo KnMgPT0gSFQgfHwgKnMgPT0gU1ApICAgICAgICAvKiBTa2lwIHdoaXRlc3BhY2UgKi8KKyAgICAg IHMrKzsKKworLyogcHJpbnRmKCJTPVslc10sIEFDUFRSPVslc11cbiIscyxhY3B0cik7ICovCisK KyAgICBpZiAoKnMgJiYgKmFjcHRyKSB7ICAgICAgICAgICAgICAgICAvKiBBcmVhIGNvZGUgd2Fz IGRlbGltaXRlZCAqLworCisgICAgICAgIHdoaWxlICgqcyA9PSAnLScgfHwgKnMgPT0gJy4nKSAg LyogU2tpcCBwYXN0IGdyYXR1aXRpb3VzIHB1bmN0dWF0aW9uICovCisgICAgICAgICAgcysrOwor ICAgICAgICBpZiAoISpzKSBzLS07ICAgICAgICAgICAgICAgICAgIC8qIEJ1dCBub3QgdG8gZW5k IG9mIHN0cmluZyAqLworCisgICAgICAgIGlmIChzdHJjbXAoZGlhbGxjYyxjY2J1ZikpIHsgICAg LyogT3V0IG9mIGNvdW50cnk/ICovCisgICAgICAgICAgICBpZiAoIWRpYWxpeHApIHsgICAgICAg ICAgICAgLyogTmVlZCBpbnRsLXByZWZpeCAqLworICAgICAgICAgICAgICAgIGlmIChjeCAhPSBY WExPT0spCisgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIC0gTm8gaW50ZXJuYXRpb25h bCBkaWFsaW5nIHByZWZpeCBkZWZpbmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTEp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hhdCA9IGRuX3hba10gPSBETl9JTlRMOwor ICAgICAgICAgICAgcCAgPSAocHJlZml4ICYmIGRpYWxpeHApID8gZGlhbGl4cCA6ICIiOyAvKiBJ bnRsLXByZWZpeCAqLworICAgICAgICAgICAgcDIgPSAoc3VmZml4ICYmIGRpYWxpeHMpID8gZGlh bGl4cyA6ICIiOyAvKiBJbnRsLXN1ZmZpeCAqLworCisgICAgICAgICAgICAvKiBGb3JtIHRoZSBm aW5hbCBwaG9uZSBudW1iZXIgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBzcHJpbnRm KHBkc2Z4LCIlcyVzIixwMixzZngpOyAvKiBVTlNBRkUgKi8KKyAgICAgICAgICAgIHNwcmludGYo b3V0YnVmLAorICAgICAgICAgICAgICAgICAgICAiJXMlcyVzJXMlcyVzJXMlcyIsCisgICAgICAg ICAgICAgICAgICAgIHB4byxucHIscCxjY2J1ZixhY3B0cixzLHAyLHNmeAorICAgICAgICAgICAg ICAgICAgICApOworI2Vsc2UKKyAgICAgICAgICAgIGNrbWFrbXNnKHBkc2Z4LDY0LHAyLHNmeCxO VUxMLE5VTEwpOworICAgICAgICAgICAgY2ttYWt4bXNnKG91dGJ1ZiwyNTYscHhvLG5wcixwLGNj YnVmLGFjcHRyLHMscDIsc2Z4LAorICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVMTCxOVUxM LE5VTEwpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICAgICB9IGVsc2UgaWYgKCh4ID0g Y2FsbGlzbGQobGFjLGFjcHRyKSkgPj0gMSkgeyAvKiBJbi1jb3VudHJ5IExEICovCisgICAgICAg ICAgICBpZiAoIWRpYWxsYWMgJiYgY3ggIT0gWFhMT09LKSB7IC8qIERvbid0IGtub3cgbXkgb3du IGFyZWEgY29kZSAqLworICAgICAgICAgICAgICAgIGlmIChjYyA9PSAxKQorICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJXQVJOSU5HIC0gUHJpb3IgU0VUIERJQUwgQVJFQS1DT0RFIG5lZWRlZFxu Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeCA9PSAyKSB7ICAgICAgICAgICAg ICAgLyogTG9jYWwgY2FsbCB3aXRoIGFyZWEgY29kZSAqLworICAgICAgICAgICAgICAgIHdoYXQg PSBkbl94W2tdID0gRE5fTE9DQUw7ICAgICAgLyogTG9jYWwtY2FsbCAqLworICAgICAgICAgICAg ICAgIHAgID0gKHByZWZpeCAmJiBkaWFsbGNwKSA/IGRpYWxsY3AgOiAiIjsgLyogbG9jYWwtcHJl Zml4ICovCisgICAgICAgICAgICAgICAgcDIgPSAoc3VmZml4ICYmIGRpYWxsY3MpID8gZGlhbGxj cyA6ICIiOyAvKiBsb2NhbC1zdWZmaXggKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgd2hhdCA9IGRuX3hba10gPSBETl9MT05HOyAgICAgICAvKiBMb25nLWRpc3RhbmNl ICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG50b2xsZnJlZTsgaSsrKSB7IC8q IEJ1dCB0b2xsLWZyZWUgdG9vPyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChh Y3B0cixkaWFsdGZjW2ldKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCA9IGRuX3hb a10gPSBETl9GUkVFOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHdoYXQg PT0gRE5fRlJFRSkgeyAgLyogVG9sbC1mcmVlIGNhbGwgKi8KKyAgICAgICAgICAgICAgICAgICAg cCA9IChwcmVmaXggJiYgZGlhbHRmcCkgPyBkaWFsdGZwIDoKKyAgICAgICAgICAgICAgICAgICAg ICAgICgocHJlZml4ICYmIGRpYWxsZHApID8gZGlhbGxkcCA6ICIiKTsKKyAgICAgICAgICAgICAg ICAgICAgcDIgPSAiIjsgICAgICAgICAgICAvKiBubyBzdWZmaXggKi8KKyAgICAgICAgICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vcm1hbCBsb25nIGRpc3RhbmNl ICovCisgICAgICAgICAgICAgICAgICAgIHAgID0gKHByZWZpeCAmJiBkaWFsbGRwKSA/IGRpYWxs ZHAgOiAiIjsgLyogbGQtcHJlZml4ICovCisgICAgICAgICAgICAgICAgICAgIHAyID0gKHN1ZmZp eCAmJiBkaWFsbGRzKSA/IGRpYWxsZHMgOiAiIjsgLyogbGQtc3VmZml4ICovCisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRm9ybSB0aGUgbnVtYmVyIHRv IGJlIGRpYWxlZCAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHNwcmludGYob3V0YnVm LCIlcyVzJXMlcyVzJXMlcyIsCisgICAgICAgICAgICAgICAgICAgIHB4byxucHIscCxhY3B0cixz LHAyLHNmeAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgc3ByaW50ZihwZHNm eCwiJXMlcyIscDIsc2Z4KTsKKyNlbHNlCisgICAgICAgICAgICBja21ha3htc2cob3V0YnVmLDI1 NiwKKyAgICAgICAgICAgICAgICAgICAgICBweG8sbnByLHAsYWNwdHIscyxwMixzZngsCisgICAg ICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAg IGNrbWFrbXNnKHBkc2Z4LDY0LHAyLHNmeCxOVUxMLE5VTEwpOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYW1lIGNvdW50 cnksIHNhbWUgYXJlYSBjb2RlICovCisgICAgICAgICAgICB3aGF0ID0gZG5feFtrXSA9IEROX0xP Q0FMOyAgLyogU28gaXQncyBhIGxvY2FsIGNhbGwuICovCisgICAgICAgICAgICBpZiAoIXByZWZp eCB8fCAhKGRpYWxweG8gfHwgbmRpYWxweHgpKSB7IC8qIE5vdCBkaWFsaW5nIGZyb20gUEJYICov CisgICAgICAgICAgICAgICAgcCAgPSAocHJlZml4ICYmIGRpYWxsY3ApID8gZGlhbGxjcCA6ICIi OyAvKiBsb2NhbC1wcmVmaXggKi8KKyAgICAgICAgICAgICAgICBwMiA9IChzdWZmaXggJiYgZGlh bGxjcykgPyBkaWFsbGNzIDogIiI7IC8qIGxvY2FsLXN1ZmZpeCAqLworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgICAgICAgICBpZiAoeCA9PSAyKQorICAgICAgICAgICAgICAgICAgc3ByaW50Zihv dXRidWYsIiVzJXMlcyVzJXMlcyIsbnByLHAsYWNwdHIscyxwMixzZngpOworICAgICAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHNwcmludGYob3V0YnVmLCIlcyVzJXMlcyVzIixu cHIscCxzLHAyLHNmeCk7CisgICAgICAgICAgICAgICAgc3ByaW50ZihwZHNmeCwiJXMlcyIscDIs c2Z4KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgaWYgKHggPT0gMikKKyAgICAgICAgICAgICAg ICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5w cixwLGFjcHRyLHMscDIsc2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgICBja21ha3htc2cob3V0YnVmLDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBucHIscCxzLHAyLHNmeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBja21ha21zZyhwZHNm eCw2NCxwMixzZngsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBEaWFsaW5nIGZyb20gYSBQQlggYW5k IG5vdCBUQVBJICovCisgICAgICAgICAgICAgICAgaWYgKG5kaWFscHh4KSB7ICAgICAgICAgLyog SXMgaXQgaW50ZXJuYWw/ICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAgICBp ID0gKGludCkgc3RybGVuKGRpYWxweHgpOworICAgICAgICAgICAgICAgICAgICBqID0gKGludCkg c3RybGVuKHMpOworICAgICAgICAgICAgICAgICAgICB4ID0gLTE7CisgICAgICAgICAgICAgICAg ICAgIGlmIChqID4gaSkKKyAgICAgICAgICAgICAgICAgICAgICB4ID0gY2tzdHJjbXAoZGlhbHB4 eCxzLGksMCk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBpbnQga3g7CisgICAgICAgICAg ICAgICAgICAgIHggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgaiA9IChpbnQpIHN0cmxlbihz KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChreCA9IDA7IGt4IDwgbmRpYWxweHg7IGt4Kysp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAoaW50KSBzdHJsZW4oZGlhbHB4eFtreF0p OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPiBpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoISh4ID0gY2tzdHJjbXAoZGlhbHB4eFtreF0scyxpLDApKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICogaWNwLCBidWZbMzJdOworICAgICAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigmbWF0Y2hweHgsZGlhbHB4eFtreF0pOworICAgICAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMSwiZG5jdnQgbWF0Y2hweHgiLG1hdGNocHh4LGt4KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHdoYXQgPSBkbl94W2t4XSA9IEROX0lOVEVSTjsgICAvKiBJbnRlcm5hbCBj YWxsLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBpOworICAgICAgICAgICAgICAg ICAgICAgICAgLyogSW50ZXJuYWwtY2FsbCBwcmVmaXggKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgIGljcCA9IGRpYWxweGk7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoaWNwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCppY3AgPT0gJ1xc JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGMsICpicDsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG47CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGMgPSAqKGljcCsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGlzdXBwZXIoYykpIGMgPSB0b2xvd2VyKGMpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoYyA9PSAndicgfHwgYyA9PSAnZicpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG4gPSAzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJwID0gYnVmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenpzdHJp bmcoaWNwLCZicCwmbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3Ag PSBidWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9T UEwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAocHJlZml4ICYmIGljcCkgPyBpY3Ag OiAiIjsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG91 dGJ1ZiwiJXMlcyVzJXMiLG5wcixwLHMsc2Z4KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAg ICAgICBja21ha21zZyhvdXRidWYsMjU2LG5wcixwLHMsc2Z4KTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyogRXh0ZXJuYWwg bG9jYWwgY2FsbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9jYWwtcHJlZml4ICov CisgICAgICAgICAgICAgICAgICAgICAgICBwICA9IChwcmVmaXggJiYgZGlhbGxjcCkgPyBkaWFs bGNwIDogIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2NhbC1zdWZmaXggKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIHAyID0gKHByZWZpeCAmJiBkaWFsbGNzKSA/IGRpYWxsY3Mg OiAiIjsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAy KQorICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG91dGJ1ZiwiJXMlcyVzJXMlcyVz JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxweG8gPyBkaWFscHhv IDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnByLHAsYWNwdHIscyxw MixzZngpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg ICAgICAgICBzcHJpbnRmKG91dGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiJXMlcyVzJXMlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFs cHhvID8gZGlhbHB4byA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5w cixwLHMscDIsc2Z4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbHNl CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAyKQorICAgICAgICAgICAgICAgICAg ICAgICAgICBja21ha3htc2cob3V0YnVmLCAyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpYWxweG8gPyBkaWFscHhvIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5wcixwLGFjcHRyLHMscDIsc2Z4LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha3htc2cob3V0YnVm LCAyNTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFscHhvID8gZGlh bHB4byA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnByLHAscyxw MixzZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcmVhIGNvZGUgd2FzIG5v dCBkZWxpbWl0ZWQgKi8KKworICAgICAgICBjaGFyIHhidWZbMjU2XTsgICAgICAgICAgICAgICAg IC8qIENvbXBhcmlzb24gYmFzZWQgb25seSBvbiBsZW5ndGggKi8KKyAgICAgICAgY2hhciB5YnVm WzI1Nl07CisgICAgICAgIGludCB4LCBqOworCisgICAgICAgIHMgPSBzczsKKworICAgICAgICBm b3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHsKKyAgICAgICAgICAgIGlmICghKnMpIGJyZWFrOwor ICAgICAgICAgICAgd2hpbGUgKCFpc2RpZ2l0KCpzKSkgeyAgICAgIC8qIFBheSBhdHRlbnRpb24g b25seSB0byBkaWdpdHMgKi8KKyAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAg aWYgKCEqcykgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4YnVmW2ldID0gKnMr KzsKKyAgICAgICAgfQorICAgICAgICB4YnVmW2ldID0gTlVMOworCisgICAgICAgIHggPSAxOyAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzdW1lIExEICovCisgICAgICAgIG4gPSAwOwor ICAgICAgICBpZiAoIWRpYWxmbGQpIHsgICAgICAgICAgICAgICAgIC8qIElmIExEIG5vdCBmb3Jj ZWQgKi8KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBubG9jYWxhYzsgaisrKSB7IC8qIGNo ZWNrIGxvY2FsIEFDIGxpc3Q/ICovCisgICAgICAgICAgICAgICAgY2ttYWttc2coeWJ1ZiwyNTYs ZGlhbGxjYyxkaWFsbGNhY1tqXSxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIG4gPSAoaW50 KSBzdHJsZW4oeWJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKG4gPiAwICYmICFja3N0cmNtcCh4 YnVmLHlidWYsbiwwKSkgeworICAgICAgICAgICAgICAgICAgICB4ID0gMjsKKyAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKHggPT0gMSkgeyAgICAgICAgICAgICAgIC8qIE9yIGV4YWN0IG1hdGNoIHdpdGgg bG9jYWwgQ0MrQUM/ICovCisgICAgICAgICAgICAgICAgY2ttYWttc2coeWJ1ZiwyNTYsZGlhbGxj YyxsYWMsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBuID0gKGludCkgc3RybGVuKHlidWYp OworICAgICAgICAgICAgICAgIGlmIChuID4gMCAmJiAhY2tzdHJjbXAoeGJ1Zix5YnVmLG4sMCkp CisgICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBpZiAoeCA9PSAwIHx8IHggPT0gMikgeyAgICAgICAgIC8qIExvY2FsIGNhbGwgKi8KKyAg ICAgICAgICAgIGludCB4eCxreDsgICAgICAgICAgICAgICAgICAvKiBCZWdpbiAxIERlYyAyMDAx Li4uICovCisgICAgICAgICAgICAvKiBBY2NvdW50IGZvciBQQlggaW50ZXJuYWwgY2FsbHMgKi8K KyAgICAgICAgICAgIGlmIChuZGlhbHB4eCkgeworICAgICAgICAgICAgICAgIHh4ID0gLTE7Cisg ICAgICAgICAgICAgICAgaiA9IChpbnQpIHN0cmxlbih5YnVmKTsKKyAgICAgICAgICAgICAgICBm b3IgKGt4ID0gMDsga3ggPCBuZGlhbHB4eDsga3grKykgeworICAgICAgICAgICAgICAgICAgICBp ID0gKGludCkgc3RybGVuKGRpYWxweHhba3hdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGog Pj0gaSkKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoISh4eCA9IGNrc3RyY21wKGRpYWxweHhb a3hdLCZ4YnVmW2pdLGksMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF4eCkgeworICAg ICAgICAgICAgICAgIGNoYXIgKiBpY3AsIGJ1ZlszMl07CisgICAgICAgICAgICAgICAgbWFrZXN0 cigmbWF0Y2hweHgsZGlhbHB4eFtreF0pOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImRu Y3Z0IG1hdGNocHh4IixtYXRjaHB4eCxreCk7CisgICAgICAgICAgICAgICAgd2hhdCA9IGRuX3hb a3hdID0gRE5fSU5URVJOOyAvKiBJbnRlcm5hbCBjYWxsLiAqLworICAgICAgICAgICAgICAgIHMg PSB4YnVmICsgaiArIGk7CisgICAgICAgICAgICAgICAgaWNwID0gZGlhbHB4aTsgICAgICAgICAg LyogSW50ZXJuYWwtY2FsbCBwcmVmaXggKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAg ICBpZiAoaWNwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqaWNwID09ICdcXCcpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYywgKmJwOworICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG47CisgICAgICAgICAgICAgICAgICAgICAgICBjID0gKihpY3ArMSk7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoaXN1cHBlcihjKSkgYyA9IHRvbG93ZXIoYyk7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoYyA9PSAndicgfHwgYyA9PSAnZicpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuID0gMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAg PSBidWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgenpzdHJpbmcoaWNwLCZicCwmbik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNwID0gYnVmOworICAgICAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICAgICAgcCA9IChwcmVmaXggJiYgaWNwKSA/IGlj cCA6ICIiOworICAgICAgICAgICAgICAgIGNrbWFrbXNnKG91dGJ1ZiwyNTYsbnByLHAscyxzZngp OworICAgICAgICAgICAgICAgIC8qIEVuZCAxIERlYyAyMDAxLi4uICovCisKKyAgICAgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgUEJYIGludGVybmFsICovCisKKyAg ICAgICAgICAgICAgICBkbl94W2tdID0gRE5fTE9DQUw7CisgICAgICAgICAgICAgICAgcCA9IChw cmVmaXggJiYgZGlhbGxjcCkgPyBkaWFsbGNwIDogIiI7CisgICAgICAgICAgICAgICAgcDIgPSAo c3VmZml4ICYmIGRpYWxsY3MpID8gZGlhbGxjcyA6ICIiOworICAgICAgICAgICAgICAgIHMgPSAo Y2hhciAqKSAoeGJ1ZiArICgoeCA9PSAwKSA/IG4gOiAoaW50KXN0cmxlbihkaWFsbGNjKSkpOwor ICAgICAgICAgICAgICAgIGNrbWFreG1zZyhvdXRidWYsMjU2LAorICAgICAgICAgICAgICAgICAg ICAgICAgICBweG8sbnByLHAscyxwMixzZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBja21ha21zZyhw ZHNmeCw2NCxwMixzZngsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgbG9jYWwgKi8KKyAgICAgICAgICAgIG4g PSBja3N0cm5jcHkoeWJ1ZixkaWFsbGNjLDI1Nik7CisgICAgICAgICAgICBpZiAobiA+IDAgJiYg IWNrc3RyY21wKHhidWYseWJ1ZixuLDApKSB7IC8qIExvbmcgZGlzdGFuY2UgKi8KKyAgICAgICAg ICAgICAgICBkbl94W2tdID0gRE5fTE9ORzsKKyAgICAgICAgICAgICAgICBwID0gKHByZWZpeCAm JiBkaWFsbGRwKSA/IGRpYWxsZHAgOiAiIjsKKyAgICAgICAgICAgICAgICBwMiA9IChzdWZmaXgg JiYgZGlhbGxkcykgPyBkaWFsbGRzIDogIiI7CisgICAgICAgICAgICAgICAgcyA9IHhidWYgKyBu OworICAgICAgICAgICAgICAgIHdoaWxlICgqcyA9PSAnLScgfHwgKnMgPT0gJy4nKQorICAgICAg ICAgICAgICAgICAgcysrOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgICAgICBzcHJpbnRm KG91dGJ1ZiwiJXMlcyVzJXMlcyVzIixweG8sbnByLHAscyxwMixzZngpOworICAgICAgICAgICAg ICAgIHNwcmludGYocGRzZngsIiVzJXMiLHAyLHNmeCk7CisjZWxzZQorICAgICAgICAgICAgICAg IGNrbWFreG1zZyhvdXRidWYsMjU2LAorICAgICAgICAgICAgICAgICAgICAgICAgICBweG8sbnBy LHAscyxwMixzZngsCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgIGNrbWFrbXNnKHBkc2Z4LDY0LHAyLHNmeCxO VUxMLE5VTEwpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgZG5feFtrXSA9IEROX0lOVEw7ICAgICAgLyogSW50ZXJuYXRpb25hbCAq LworICAgICAgICAgICAgICAgIGlmICghZGlhbGl4cCkgeworICAgICAgICAgICAgICAgICAgICBp ZiAoY3ggIT0gWFhMT09LKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJFcnJvciAtIE5vIGludGVybmF0aW9uYWwgZGlhbGluZyBw cmVmaXggZGVmaW5lZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHAgPSAocHJlZml4ICYmIGRpYWxpeHAp ID8gZGlhbGl4cCA6ICIiOworICAgICAgICAgICAgICAgIHAyID0gKHN1ZmZpeCAmJiBkaWFsaXhz KSA/IGRpYWxpeHMgOiAiIjsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgc3ByaW50 ZihvdXRidWYsIiVzJXMlcyVzJXMlcyIscHhvLG5wcixwLHhidWYscDIsc2Z4KTsKKyAgICAgICAg ICAgICAgICBzcHJpbnRmKHBkc2Z4LCIlcyVzIixwMixzZngpOworI2Vsc2UKKyAgICAgICAgICAg ICAgICBja21ha3htc2cob3V0YnVmLDI1NiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHhv LG5wcixwLHhidWYscDIsc2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCk7CisgICAgICAgICAgICAgICAgY2ttYWttc2cocGRzZngsNjQs cDIsc2Z4LE5VTEwsTlVMTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorI2lmZGVmIENLX1RBUEkKKyAgICBpZiAodHR0YXBpICYmICAgICAg ICAgICAgICAgICAgICAgICAvKiBUQVBJIHBlcmZvcm1zIHRoZSBjb252ZXJzaW9ucyAqLworICAg ICAgICAhdGFwaXBhc3MgJiYKKyAgICAgICAgdGFwaWNvbnYgPT0gQ0tfQVVUTyB8fAorICAgICAg ICB0YXBpY29udiA9PSBDS19PTgorICAgICAgICApIHsKKyAgICAgICAgcCA9IE5VTEw7CisgICAg ICAgIGRpYWx0eXBlID0gLTI7CisgICAgICAgIGlmICghY2t0YXBpQ29udmVydFBob25lTnVtYmVy KGRuX3Bba10sJnApKQorICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgIG1ha2VzdHIoJmRu X3AyW2tdLCBwKTsKKyAgICAgICAgaWYgKHApIGZyZWUocCk7CisgICAgICAgIHJldHVybigwKTsK KyAgICB9IGVsc2UgeworI2VuZGlmIC8qIENLX1RBUEkgKi8KKyAgICAgICAgbWFrZXN0cigmZG5f cDJba10sIG91dGJ1Zik7CisjaWZkZWYgQ0tfVEFQSQorICAgIH0KKyNlbmRpZiAvKiBDS19UQVBJ ICovCisgICAgZGlhbHR5cGUgPSB3aGF0OworICAgIHJldHVybigwKTsKK30KKworc3RhdGljIGlu dAorZGRjdnQocywgZiwgbikgY2hhciAqIHM7IEZJTEUgKiBmOyBpbnQgbjsgeyAvKiBEaWFsIERp cmVjdG9yeSBDb252ZXJ0ICovCisgICAgY2hhciBsaW5lYnVmWzEwMjRdLCAqczI7ICAgICAgICAg ICAgLyogQnVmZmVycyBhbmQgcG9pbnRlcnMgKi8KKyNpZmRlZiBWTVMKKyAgICBjaGFyICogdGVt cCA9IE5VTEw7CisjZW5kaWYgLyogVk1TICovCisgICAgY2hhciAqaW5mb1s4XTsgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnRlcnMgdG8gd29yZHMgZnJvbSBlbnRyeSAqLworICAgIEZJTEUg KiBmMiA9IE5VTEw7CisgICAgaW50IHgsIHJjOworICAgIHJjID0gLTE7CisKKyAgICBkZWJ1ZyhG MTEwLCJkZGN2dCBmaWxlIixzLDApOworCisgICAgaWYgKCFzIHx8ICFmKSAgICAgICAgICAgICAg ICAgICAgICAgLyogTm8gZmlsZW5hbWUgb3IgZmlsZSAqLworICAgICAgcmV0dXJuKC0xKTsKKyAg ICBpZiAoISpzKQorCisgICAgZmNsb3NlKGYpOworICAgIHpuZXduKHMsJnMyKTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIHMyID0gYWRkcmVzcyBvZiBzdGF0aWMgYnVmZmVyICovCisgICAgZGVi dWcoRjExMCwiZGRjdnQgbmV3bmFtZSIsczIsMCk7CisKKyNpZmRlZiBWTVMKKyAgICAvKiBJbiBW TVMsIHpuZXduKCkgcmV0dXJucyB0aGUgc2FtZSBmaWxlIG5hbWUgd2l0aCBhIG5ldyB2ZXJzaW9u IG51bWJlciAqLworICAgIG1ha2VzdHIoJnRlbXAscyk7ICAgICAgICAgICAgICAgICAgIC8qIFN3 YXAgLSBvdGhlcndpc2UgdGhlIG5ldyAqLworICAgIHMgPSBzMjsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHZlcnNpb24gaGFzIHRoZSBvbGRlciB2ZXJzaW9uICovCisgICAgczIgPSB0 ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyLi4uICovCisgICAgZGVidWco RjExMCwiZGRjdnQgYWZ0ZXIgc3dhcCBzIixzLDApOworICAgIGRlYnVnKEYxMTAsImRkY3Z0IGFm dGVyIHN3YXAgczIiLHMyLDApOworICAgIG1ha2VzdHIoJihkaWFsZGlyW25dKSxzKTsgICAgICAg ICAgIC8qIE5ldyBmaWxlIGdldHMgbmV3IHZlcnNpb24gbnVtYmVyICovCisgICAgZGVidWcoRjEx MCwiZGRjdnQgYWZ0ZXIgbWFrZXN0ciBzMiIsczIsMCk7CisgICAgZGVidWcoRjExMSwiZGRjdnQg ZGlhbGRpcltuXSIsZGlhbGRpcltuXSxuKTsKKyNlbHNlCisgICAgaWYgKHpyZW5hbWUocyxzMikg PCAwKSB7ICAgICAgICAgICAgLyogTm90IFZNUyAtIHJlbmFtZSBvbGQgZmlsZSAqLworICAgICAg ICBwZXJyb3IoczIpOyAgICAgICAgICAgICAgICAgICAgIC8qIHRvIG5ldyAod2llcmQpIG5hbWUu ICovCisgICAgICAgIGdvdG8gZGRleGl0OworICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBk ZWJ1ZyhGMTEwLCJkZGN2dCBzMiAob2xkKSIsczIsMCk7CisgICAgaWYgKChmID0gZm9wZW4oczIs InIiKSkgPT0gTlVMTCkgeyAgLyogUmVvcGVuIG9sZCBmaWxlIHdpdGggd2llcmQgbmFtZSAqLwor ICAgICAgICBkZWJ1ZyhGMTEwLCJkZGN2dCBzMiBvcGVuIGVycm9yIixja19lcnJzdHIoKSwwKTsK KyAgICAgICAgZGlybGluZSA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiAob3IgaW4gVk1TLCBv bGQgdmVyc2lvbikgKi8KKyAgICAgICAgcGVycm9yKHMyKTsKKyAgICAgICAgZ290byBkZGV4aXQ7 CisgICAgfQorICAgIGRlYnVnKEYxMTAsImRkY3Z0IGZvcGVuKHMyKSBPSyIsczIsMCk7CisKKyAg ICBkZWJ1ZyhGMTEwLCJkZGN2dCBzIChuZXcpIixzLDApOworICAgIGlmICgoZjIgPSBmb3Blbihz LCJ3IikpID09IE5VTEwpIHsgIC8qIENyZWF0ZSBuZXcgZmlsZSB3aXRoIG9sZCBuYW1lICovCisg ICAgICAgIGRlYnVnKEYxMTAsImRkY3Z0IHMgb3BlbiBlcnJvciIsY2tfZXJyc3RyKCksMCk7Cisg ICAgICAgIHBlcnJvcihzKTsgICAgICAgICAgICAgICAgICAgICAgLyogKG9yIGluIFZNUywgbmV3 IHZlcnNpb24pICovCisgICAgICAgIGdvdG8gZGRleGl0OworICAgIH0KKyAgICBkZWJ1ZyhGMTEw LCJkZGN2dCBmb3BlbihzKSBPSyIscywwKTsKKworICAgIHByaW50ZigiXG5TYXZpbmcgb2xkIGRp cmVjdG9yeSBhcyAlcy5cbkNvbnZlcnRpbmcgJXMuLi4iLHMyLHMpOworICAgIGZwcmludGYoZjIs IjsgJXMgLSBLZXJtaXQgZGlhbGluZyBkaXJlY3RvcnlcbiIsIHMpOworICAgIGZwcmludGYoZjIs IiUtMTZzICUtMjBzIDsgJTVzICUtNnMgOyAlc1xuIiwKKyAgICAgICAgICAgICAgICI7IE5hbWUi LCJOdW1iZXIiLCJTcGVlZCIsIlBhcml0eSIsIkNvbW1lbnQiCisgICAgICAgICAgICAgICApOwor CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgbGluZWJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAg ICAvKiBSZWFkIGEgbGluZSAqLworICAgICAgICBpZiAoZmdldHMobGluZWJ1ZiwxMDIzLGYpID09 IE5VTEwpCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlYnVnKEYxMTAsImRkY3Z0IGxpbmVi dWYiLGxpbmVidWYsMCk7CisgICAgICAgIGlmICghbGluZWJ1ZlswXSkgeyAgICAgICAgICAgICAg LyogRW1wdHkgbGluZSAqLworICAgICAgICAgICAgZnByaW50ZihmMiwiXG4iKTsKKyAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHggPSAoaW50KSBzdHJsZW4obGluZWJ1 Zik7ICAgICAgLyogU3RyaXAgbGluZSB0ZXJtaW5hdG9yLCAqLworICAgICAgICB3aGlsZSAoeC0t ID4gMCkgeyAgICAgICAgICAgICAgIC8qIGlmIGFueS4gKi8KKyAgICAgICAgICAgIGlmIChsaW5l YnVmW3hdIDw9IFNQKQorICAgICAgICAgICAgICBsaW5lYnVmW3hdID0gTlVMOworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB4d29yZHMo bGluZWJ1Ziw1LGluZm8sMSk7ICAgICAgIC8qIFBhcnNlIGl0IHRoZSBvbGQgd2F5ICovCisgICAg ICAgIGZvciAoeCA9IDE7IHggPCA2OyB4KyspCisgICAgICAgICAgaWYgKCFpbmZvW3hdKSBpbmZv W3hdID0gIiI7CisgICAgICAgIGZwcmludGYoZjIsIiUtMTZzICUtMjBzIDsgJTVzICUtNnMgJXNc biIsCisgICAgICAgICAgICAgICBpbmZvWzFdLGluZm9bMl0saW5mb1szXSxpbmZvWzRdLGluZm9b NV0KKyAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIHByaW50ZigiIE9LXG5cbiIpOworICAg IHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1Y2Nlc3MgKi8KKyAgZGRl eGl0OgorICAgIGlmIChmKSBmY2xvc2UoZik7CisgICAgaWYgKGYyKSBmY2xvc2UoZjIpOworI2lm ZGVmIFZNUworICAgIGlmICh0ZW1wKSBmcmVlKHRlbXApOworI2VuZGlmIC8qIFZNUyAqLworICAg IHJldHVybihyYyk7Cit9CisKK2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBzID0gbmFtZSB0byBsb29rIHVwICAgKi8KKyNpZmRlZiBDS19BTlNJQyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBjeCA9IGluZGV4IG9mIGNvbW1hbmQgKi8KK2x1ZGlhbChjaGFyICpz LCBpbnQgY3gpICAgICAgICAgICAgICAgICAvKiAoRElBTCwgTE9PS1VQLCBldGMpICAgKi8KKyNl bHNlCitsdWRpYWwocywgY3gpIGNoYXIgKnM7IGludCBjeDsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogbHVkaWFsICovIHsKKworICAgIGludCBkZCwgbjEsIG4yLCBuMywgaSwgaiwgdDsgICAg ICAgIC8qIFdvcmtlcnMgKi8KKyAgICBpbnQgb2xkZGlyLCBuZXdkaXIsIG9sZGVudHJ5LCBuZXdl bnRyeTsKKyAgICBpbnQgcGFzcyA9IDA7CisgICAgaW50IG9sZGZsZyA9IDA7CisgICAgaW50IGFt YmlndW91cyA9IDA7ICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgbG9va3VwIHdhcyBhbWJp Z3VvdXMgKi8KKyAgICBjaGFyICppbmZvWzddOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2lu dGVycyB0byB3b3JkcyBmcm9tIGVudHJ5ICovCisgICAgY2hhciAqcHA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnRlciB0byBlbGVtZW50IG9mIGFycmF5ICovCisgICAgRklMRSAq IGY7CisgICAgY2hhciAqbGluZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBpbnB1 dCBidWZmZXIgKi8KKworLyogI2RlZmluZSBMVURFQlVHICovCisKKyNpZmRlZiBMVURFQlVHCitp bnQgenogPSAxOworI2VuZGlmIC8qIExVREVCVUcgKi8KKworICAgIGlmICghcyB8fCBuZGlhbGRp ciA8IDEpICAgICAgICAgICAgIC8qIFZhbGlkYXRlIGFyZ3VtZW50cyAqLworICAgICAgcmV0dXJu KC0xKTsKKworICAgIGlmICgobjEgPSAoaW50KSBzdHJsZW4ocykpIDwgMSkgICAgIC8qIExlbmd0 aCBvZiBzdHJpbmcgdG8gbG9vayB1cCAqLworICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmICgh KGxpbmUgPSBtYWxsb2MoMTAyNCkpKSAgICAgICAgIC8qIEFsbG9jYXRlIGlucHV0IGJ1ZmZlciAq LworICAgICAgcmV0dXJuKC0xKTsKKworI2lmZGVmIExVREVCVUcKK2lmICh6eikgcHJpbnRmKCJM VURJQUwgMSBzWyVzXSwgbjE9JWRcbiIscyxuMSk7CisjZW5kaWYgLyogTFVERUJVRyAqLworCisg ICAgcGFzcyA9IDA7CisgIGx1X2FnYWluOgorICAgIGYgPSBOVUxMOyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIERpYWwgZGlyZWN0b3J5IGZpbGUgZGVzY3JpcHRvciAqLworICAgIHQgPSBk bmNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIERpYWwtbnVtYmVyIG1hdGNoIGNvdW50 ICovCisgICAgZGQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlyZWN0b3J5 IGNvdW50ZXIgKi8KKyAgICBvbGRkaXIgPSAwOworICAgIG5ld2RpciA9IDA7CisvKgorICBXZSBu ZWVkIHRvIHJlY29nbml6ZSBib3RoIG9sZC0gYW5kIG5ldy1zdHlsZSBkaXJlY3Rvcmllcy4KKyAg QnV0IHdlIGNhbid0IGFsbG93IG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGVudHJpZXMgaW4gdGhl IHNhbWUKKyAgZGlyZWN0b3J5IGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgZm9yIHN1 cmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorICBhbiBvbGQtc3R5bGUgZW50cnkgbGlrZSB0aGlz OgorCisgICAgZm9vICA1NTUxMjEyICA5NjAwCisKKyAgYW5kIGEgbmV3LXN0eWxlIGxpdGVyYWwg ZW50cnkgbGlrZSB0aGlzOgorCisgICAgZm9vICA1NTUgOTYwMAorCisgIEkuZS4gaXMgdGhlICI5 NjAwIiBhIHNwZWVkLCBvciBwYXJ0IG9mIHRoZSBwaG9uZSBudW1iZXI/CisqLworICAgIHdoaWxl ICgxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIG1ha2Ugb25lIHBhc3MgKi8KKyAg ICAgICAgaWYgKCFmKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3Rvcnkgbm90IG9w ZW4gKi8KKyAgICAgICAgICAgIGlmIChkZCA+PSBuZGlhbGRpcikgICAgICAgICAvKiBObyBkaXJl Y3RvcmllcyBsZWZ0PyAqLworICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg IC8qIERvbmUuICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJsdWRpYWwgZGlhbGRpcltkZF0i LGRpYWxkaXJbZGRdLGRkKTsKKyAgICAgICAgICAgIGlmICgoZiA9IGZvcGVuKGRpYWxkaXJbZGRd LCJyIikpID09IE5VTEwpIHsgLyogT3BlbiBpdCAqLworICAgICAgICAgICAgICAgIHBlcnJvcihk aWFsZGlyW2RkXSk7ICAgIC8qIENhbid0LCBwcmludCBtZXNzYWdlIHNheWluZyB3aHkgKi8KKyAg ICAgICAgICAgICAgICBpZiAobGluZSkgeworICAgICAgICAgICAgICAgICAgICBmcmVlKGxpbmUp OworICAgICAgICAgICAgICAgICAgICBsaW5lID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgZGQrKzsgICAgICAgICAgICAgICAgICAgLyogR28gb24gdG8gbmV4dCBv bmUsIGlmIGFueS4uLiAqLworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg fQorICAgICAgICAgICAgZGlybGluZSA9IDA7ICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBm aWxlIGxpbmUgbnVtYmVyICovCisgICAgICAgICAgICBpZiAoZGlhbGRweSAmJiAhcGFzcykKKyAg ICAgICAgICAgICAgcHJpbnRmKCJPcGVuaW5nOiAlcy4uLlxuIixkaWFsZGlyW2RkXSk7CisgICAg ICAgICAgICBkZCsrOworICAgICAgICAgICAgaWYgKCFvbGRmbGcpIG9sZGRpciA9IDA7CisgICAg ICAgICAgICBuZXdkaXIgPSAwOworICAgICAgICB9CisgICAgICAgIG9sZGVudHJ5ID0gMDsKKyAg ICAgICAgbmV3ZW50cnkgPSAwOworICAgICAgICBsaW5lWzBdID0gTlVMOworICAgICAgICBpZiAo Z2V0bmN0KGxpbmUsMTAyMyxmLDEpIDwgMCkgeyAvKiBSZWFkIGEgbGluZSAqLworICAgICAgICAg ICAgaWYgKGYpIHsgICAgICAgICAgICAgICAgICAgIC8qIGYgY2FuIGJlIGNsb2JiZXJlZCEgKi8K KyAgICAgICAgICAgICAgICBmY2xvc2UoZik7ICAgICAgICAgICAgICAvKiBDbG9zZSB0aGUgZmls ZSAqLworICAgICAgICAgICAgICAgIGYgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIEluZGljYXRl IG5leHQgb25lIG5lZWRzIG9wZW5pbmcgKi8KKyAgICAgICAgICAgICAgICBvbGRmbGcgPSAwOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg aWYgKCFsaW5lWzBdKSAgICAgICAgICAgICAgICAgICAvKiBFbXB0eSBsaW5lICovCisgICAgICAg ICAgY29udGludWU7CisjaWZkZWYgTFVERUJVRworaWYgKHp6KSBwcmludGYoIkxVRElBTCAyIHNb JXNdXG4iLHMpOworI2VuZGlmIC8qIExVREVCVUcgKi8KKworICAgICAgICAvKiBNYWtlIGEgY29w eSBhbmQgcGFyc2UgaXQgdGhlIG9sZCB3YXkgKi8KKyAgICAgICAgLyogQSBjb3B5IGlzIG5lZWRl ZCBiZWNhdXNlIHh3b3JkcygpIHBva2VzIE5VTHMgaW50byB0aGUgc3RyaW5nICovCisKKyAgICAg ICAgaWYgKChwcCA9IG1hbGxvYygoaW50KXN0cmxlbihsaW5lKSArIDEpKSkgeworICAgICAgICAg ICAgc3RyY3B5KHBwLGxpbmUpOyAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIHh3 b3JkcyhwcCw1LGluZm8sMCk7ICAgICAgICAvKiBQYXJzZSBpdCB0aGUgb2xkIHdheSAqLworCisj aWZkZWYgTFVERUJVRworaWYgKHp6KSBwcmludGYoIkxVRElBTCAzIHNbJXNdXG4iLHMpOworI2Vu ZGlmIC8qIExVREVCVUcgKi8KKworICAgICAgICAgICAgaWYgKCFpbmZvWzFdKQorICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgqaW5mb1sxXSA9PSAnOycpIHsgICAgICAv KiBJZiBmdWxsLWxpbmUgY29tbWVudCwgKi8KKyAgICAgICAgICAgICAgICBuZXdkaXIgPSAxOyAg ICAgICAgICAgICAvKiAob25seSBuZXcgZGlyZWN0b3JpZXMgaGF2ZSB0aGVtKSAqLworICAgICAg ICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgIC8qIGtlZXAgcmVhZGluZy4gKi8KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaW5mb1syXSkKKyAgICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgICAgICBpZiAoKmluZm9bMl0gPT0gJysnKQorICAgICAgICAgICAgICBu ZXdlbnRyeSA9IDE7CisgICAgICAgICAgICBpZiAoaW5mb1s0XSkgeworICAgICAgICAgICAgICAg IGlmICgoKmluZm9bNF0gPT0gJz0nKSB8fAorICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAo aW5mb1s0XSwibm9uZSIsIDQsMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGlu Zm9bNF0sImV2ZW4iLCA0LDApIHx8CisgICAgICAgICAgICAgICAgICAgICFja3N0cmNtcChpbmZv WzRdLCJzcGFjZSIsNSwwKSB8fAorICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoaW5mb1s0 XSwibWFyayIsIDQsMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKGluZm9bNF0s Im9kZCIsICAzLDApCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgIG9s ZGVudHJ5ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocHApIHsK KyAgICAgICAgICAgIGZyZWUocHApOworICAgICAgICAgICAgcHAgPSBOVUxMOworICAgICAgICB9 CisKKyAgICAgICAgLyogQ2hlY2sgY29uc2lzdGVuY3kgKi8KKworICAgICAgICBpZiAoKG9sZGVu dHJ5IHx8IG9sZGRpcikgJiYgKG5ld2VudHJ5IHx8IG5ld2RpcikpIHsKKyAgICAgICAgICAgIHBy aW50ZigKKyJcbkVSUk9SOiBZb3Ugc2VlbSB0byBoYXZlIG9sZC0gYW5kIG5ldy1mb3JtYXQgZW50 cmllcyBtaXhlZCBpbiB5b3VyXG4iKTsKKyAgICAgICAgICAgIHByaW50ZigKKyJkaWFsaW5nIGRp cmVjdG9yeS4gIFlvdSdsbCBoYXZlIHRvIGVkaXQgaXQgYnkgaGFuZCB0byBjb252ZXJ0IGl0IHRv IHRoZVxuIik7CisjaWZuZGVmIE5PSEVMUAorICAgICAgICAgICAgcHJpbnRmKCJuZXcgZm9ybWF0 LiAgVHlwZSBIRUxQIERJQUwgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cbiIpOworI2Vsc2UK KyAgICAgICAgICAgIHByaW50ZigibmV3IGZvcm1hdC5cblxuIik7CisjZW5kaWYgLyogTk9IRUxQ ICovCisgICAgICAgICAgICBpZiAobGluZSkgeworICAgICAgICAgICAgICAgIGZyZWUobGluZSk7 CisgICAgICAgICAgICAgICAgbGluZSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICByZXR1cm4oLTEpOworICAgICAgICB9CisgICAgICAgIGlmICghb2xkZGlyICYmIG9sZGVudHJ5 KSB7CisgICAgICAgICAgICBpbnQgY29udmVydCA9IDA7CisgICAgICAgICAgICBvbGRkaXIgPSAx OworICAgICAgICAgICAgaWYgKGRpYWxjdnQgPT0gMikgeyAgICAgICAgIC8qIDIgPT0gQVNLICov CisgICAgICAgICAgICAgICAgc3ByaW50Zih0bXBidWYsCisiV0FSTklORzogT2xkLXN0eWxlIGRp YWxpbmcgZGlyZWN0b3J5IGRldGVjdGVkOlxuJXMiLCBsaW5lKTsKKwkJY29udmVydCA9IHVxX29r KHRtcGJ1ZiwKKwkJCQkiU2hhbGwgSSBjb252ZXJ0IGl0IGZvciB5b3U/ICIsMyxOVUxMLDApOwor ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIGNvbnZlcnQgPSBkaWFsY3Z0OworICAg ICAgICAgICAgaWYgKGNvbnZlcnQpIHsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJsdWRp YWwgY2FsbGluZyBkZGN2dCIsZGlhbGRpcltkZC0xXSxkZCk7CisgICAgICAgICAgICAgICAgaWYg KGRkY3Z0KGRpYWxkaXJbZGQtMV0sZixkZC0xKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMSwibHVkaWFsIGRkY3Z0IGZhaWxlZCIsZGlhbGRpcltkZC0xXSxkZCk7CisgICAg ICAgICAgICAgICAgICAgIG9sZGZsZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigK KyIgIFNvcnJ5LCBjYW4ndCBjb252ZXJ0LiIpOworICAgICAgICAgICAgICAgICAgICBwcmludGYo CisiICBXaWxsIGlnbm9yZSBzcGVlZCBhbmQgcGFyaXR5IGZpZWxkcywgY29udGludWluZy4uLlxu XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvbGRk aXIgPSBuZXdkaXIgPSAwOworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJsdWRpYWwg ZGRjdnQgb2siLGRpYWxkaXJbZGQtMV0sZGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBkZC0tOworICAgICAgICAgICAgICAgIGYgPSBOVUxMOworICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlh bGN2dCA9PSAyKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIiAgT0ssIHdpbGwgaWdub3Jl IHNwZWVkIGFuZCBwYXJpdHkgZmllbGRzLCBjb250aW51aW5nLi4uXG5cbiIpOworICAgICAgICAg ICAgICAgIG9sZGRpciA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworI2lmZGVmIExV REVCVUcKK2lmICh6eikgcHJpbnRmKCJMVURJQUwgWFggc1slc10sIG4xPSVkXG4iLHMsbjEpOwor I2VuZGlmIC8qIExVREVCVUcgKi8KKworICAgICAgICAvKiBOb3cgcGFyc2UgYWdhaW4gZm9yIHJl YWwgKi8KKworICAgICAgICBpZiAob2xkZW50cnkpICAgICAgICAgICAgICAgICAgIC8qIFBhcnNl IGl0IHRoZSBvbGQgd2F5ICovCisgICAgICAgICAgeHdvcmRzKGxpbmUsNSxpbmZvLDApOworICAg ICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIGl0IHRoZSBuZXcg d2F5ICovCisgICAgICAgICAgeHdvcmRzKGxpbmUsMixpbmZvLDEpOworCisjaWZkZWYgTFVERUJV RworaWYgKHp6KSBwcmludGYoIkxVRElBTCBZWSBzWyVzXSwgbjE9JWRcbiIscyxuMSk7CitpZiAo enopIHByaW50ZigiJXMgWyVzXVxuIixpbmZvWzFdLGluZm9bMl0pOworI2VuZGlmIC8qIExVREVC VUcgKi8KKworICAgICAgICBpZiAoaW5mb1sxXSkgeyAgICAgICAgICAgICAgICAgIC8qIEZpcnN0 IHdvcmQgaXMgZW50cnkgbmFtZSAqLworICAgICAgICAgICAgaWYgKChuMyA9IChpbnQpIHN0cmxl bihpbmZvWzFdKSkgPCAxKSAvKiBJdHMgbGVuZ3RoICovCisgICAgICAgICAgICAgIGNvbnRpbnVl OyAgICAgICAgICAgICAgICAgLyogSWYgbm8gZmlyc3Qgd29yZCwga2VlcCByZWFkaW5nLiAqLwor ICAgICAgICAgICAgaWYgKG4zIDwgbjEpICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBuYW1lIGlz IGxvbmdlciAqLworICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgIC8qIENh bid0IHBvc3NpYmx5IG1hdGNoICovCisgICAgICAgICAgICBpZiAoYW1iaWd1b3VzICYmIG4zICE9 IG4xKQorICAgICAgICAgICAgICBjb250aW51ZTsKKworI2lmZGVmIExVREVCVUcKK2lmICh6eikg cHJpbnRmKCJNQVRDSElORzogWyVzXSBbJXNdLCBuMT0lZFxuIixzLGluZm9bMV0sbjEpOworI2Vu ZGlmIC8qIExVREVCVUcgKi8KKworICAgICAgICAgICAgaWYgKGNrc3RyY21wKHMsaW5mb1sxXSxu MSwwKSkgLyogQ2FzZWxlc3Mgc3RyaW5nIGNvbXBhcmlzb24gKi8KKyAgICAgICAgICAgICAgY29u dGludWU7CisKKyNpZmRlZiBMVURFQlVHCitpZiAoenopIHByaW50ZigiTUFUQ0ggT0s6IFslc10g WyVzXSwgbjE9JWRcbiIscyxpbmZvWzFdLG4xKTsKKyNlbmRpZiAvKiBMVURFQlVHICovCisKKyAg ICAgICAgICAgIGlmICghaW5mb1syXSkgICAgICAgICAgICAgICAvKiBObyBwaG9uZSBudW1iZXIg Z2l2ZW4gKi8KKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoKG4yID0g KGludCkgc3RybGVuKGluZm9bMl0pKSA8IDEpIC8qIExlbmd0aCBvZiBwaG9uZSBudW1iZXIgKi8K KyAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAvKiBJZ25vcmUgZW1wdHkg cGhvbmUgbnVtYmVycyAqLworCisgICAgICAgICAgICAvKiBHb3Qgb25lICovCisKKyAgICAgICAg ICAgIGlmICghKHBwID0gKGNoYXIgKiltYWxsb2MobjIgKyAxKSkpIHsgLyogQWxsb2NhdGUgc3Rv cmFnZSBmb3IgaXQgKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIj9pbnRlcm5hbCBlcnJvciAt IGx1ZGlhbCBtYWxsb2MgMVxuIik7CisgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHsKKyAgICAg ICAgICAgICAgICAgICAgZnJlZShsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IE5V TEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRuY291bnQgPSAwOworICAg ICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJj cHkocHAsaW5mb1syXSk7ICAgICAgICAgLyogc2FmZSAqLworCisgICAgICAgICAgICBpZiAoZG5j b3VudCA+IE1BWEROVU1TKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiAlZCBt YXRjaGVzIGZvdW5kLCAlZCBtYXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGRuY291bnQs CisgICAgICAgICAgICAgICAgICAgICAgIE1BWEROVU1TCisgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgZG5jb3VudCA9IE1BWEROVU1TOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZG5fcFtkbmNvdW50KytdID0gcHA7 ICAgICAgIC8qIEFkZCBwb2ludGVyIHRvIGFycmF5LiAqLworICAgICAgICAgICAgaWYgKGRuY291 bnQgPT0gMSkgeyAgICAgICAgIC8qIEZpcnN0IG9uZS4uLiAqLworICAgICAgICAgICAgICAgIGlm IChkX25hbWUpIGZyZWUoZF9uYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoIShkX25hbWUgPSAo Y2hhciAqKW1hbGxvYyhuMyArIDEpKSkgeyAvKiBTYXZlIGl0cyBuYW1lICovCisgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP2ludGVybmFsIGVycm9yIC0gbHVkaWFsIG1hbGxvYyAyXG4iKTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGZyZWUobGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gTlVMTDsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkbmNvdW50ID0gMDsKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgdCA9IG4zOyAgICAgICAgICAgICAgICAgLyogQW5kIGl0cyBsZW5ndGggKi8KKyAgICAg ICAgICAgICAgICBzdHJjcHkoZF9uYW1lLGluZm9bMV0pOyAvKiBzYWZlICovCisgICAgICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogU2Vjb25kIG9yIHN1YnNlcXVlbnQgb25l ICovCisKKyNpZmRlZiBMVURFQlVHCisgICAgICAgICAgICAgICAgaWYgKHp6KQorICAgICAgICAg ICAgICAgICAgcHJpbnRmKCJkX25hbWU9WyVzXSxpbmZvWzFdPSVzLHQ9WyVkXVxuIixkX25hbWUs aW5mb1sxXSx0KTsKKyNlbmRpZiAvKiBMVURFQlVHICovCisKKyAgICAgICAgICAgICAgICBpZiAo KGludCkgc3RybGVuKGluZm9bMV0pID09IHQpIC8qIExlbmd0aHMgY29tcGFyZSAqLworICAgICAg ICAgICAgICAgICAgaWYgKCFja3N0cmNtcChkX25hbWUsaW5mb1sxXSx0LDApKSAvKiBDYXNlbGVz cyBjb21wYXJlIE9LICovCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg ICAgICAgICAgLyogTmFtZSBnaXZlbiBieSB1c2VyIG1hdGNoZXMgZW50cmllcyB3aXRoIGRpZmZl cmVudCBuYW1lcyAqLworCisgICAgICAgICAgICAgICAgaWYgKGFtYmlndW91cykgICAgICAgICAg LyogQmVlbiBoZXJlIGJlZm9yZSAqLworICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgICAgICAgICBhbWJpZ3VvdXMgPSAxOyAgICAgICAgICAvKiBOb3cgYW4gZXhhY3QgbWF0Y2gg aXMgcmVxdWlyZWQgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZG5jb3VudDsg aisrKSB7IC8qIENsZWFuIG91dCBwcmV2aW91cyBsaXN0ICovCisgICAgICAgICAgICAgICAgICAg IGlmIChkbl9wW2pdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGRuX3Bbal0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgZG5fcFtqXSA9IE5VTEw7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFzcysrOyAgICAgICAg ICAgICAgICAgLyogU2Vjb25kIHBhc3MuLi4gKi8KKyAgICAgICAgICAgICAgICBnb3RvIGx1X2Fn YWluOyAgICAgICAgICAvKiBEbyBpdCBhbGwgb3ZlciBhZ2Fpbi4gKi8KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobGluZSkgZnJlZShsaW5lKTsKKyAgICBpZiAoZG5j b3VudCA9PSAwICYmIGFtYmlndW91cykgeworICAgICAgICBwcmludGYoIiBMb29rdXA6IFwiJXNc IiAtIGFtYmlndW91cyVzXG4iLAorICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgIGN4 ID09IFhYTE9PSyA/ICIiIDogIiAtIGRpYWxpbmcgc2tpcHBlZCIKKyAgICAgICAgICAgICAgICk7 CisgICAgICAgIHJldHVybigtMik7CisgICAgfQorICAgIHJldHVybihkbmNvdW50KTsKK30KKwor Y2hhciAqCitwbmN2dChzKSBjaGFyICpzOyB7ICAgICAgICAgICAgICAgICAgICAgLyogUGhvbmUg bnVtYmVyIGNvbnZlcnNpb24gKi8KKyAgICBjaGFyICpwID0gTlVMTDsgICAgICAgICAgICAgICAg ICAgICAvKiAoanVzdCBhIHdyYXBwZXIgZm9yIGRuY3Z0KCkgKi8KKyAgICBjaGFyICpxID0gTlVM TDsKKyAgICBzdGF0aWMgY2hhciBwbmJ1ZlsxMjhdOworICAgIG1ha2VzdHIoJnAsZG5fcFswXSk7 ICAgICAgICAgICAgICAgIC8qIFNhdmUgdGhlc2UgaW4gY2FzZSB0aGV5IGFyZSAqLworICAgIG1h a2VzdHIoJnEsZG5fcDJbMF0pOyAgICAgICAgICAgICAgIC8qIGJlaW5nIHVzZWQgKi8KKyAgICBt YWtlc3RyKCZkbl9wWzBdLHMpOyAgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBhcmd1bWVudCBz dHJpbmcgdG8gaGVyZSAqLworICAgIGRuY3Z0KDAsWFhMT09LLDEsMSk7ICAgICAgICAgICAgICAg IC8qIENvbnZlcnQgaXQgKi8KKyAgICBpZiAoIWRuX3AyWzBdKSAgICAgICAgICAgICAgICAgICAg ICAvKiBQdXQgcmVzdWx0IHdoZXJlIGNhbiByZXR1cm4gaXQgKi8KKyAgICAgIHBuYnVmWzBdID0g TlVMOworICAgIGVsc2UKKyAgICAgIGNrc3RybmNweShwbmJ1Zixkbl9wMlswXSwxMjcpOworICAg IG1ha2VzdHIoJmRuX3BbMF0scCk7ICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhlc2UgKi8K KyAgICBtYWtlc3RyKCZkbl9wMlswXSxxKTsKKyAgICBtYWtlc3RyKCZwLE5VTEwpOyAgICAgICAg ICAgICAgICAgICAvKiBGcmVlIHRoZXNlICovCisgICAgbWFrZXN0cigmcSxOVUxMKTsKKyAgICBy ZXR1cm4oKGNoYXIgKilwbmJ1Zik7Cit9CisKK2ludAorZG9kaWFsKGN4KSBpbnQgY3g7IHsgICAg ICAgICAgICAgICAgICAgIC8qIERJQUwgb3IgUkVESUFMICovCisgICAgaW50IGkgPSAwLCB4ID0g MDsgICAgICAgICAgICAgICAgICAgLyogV29ya2VycyAqLworICAgIGludCBzcGFyaXR5ID0gLTE7 ICAgICAgICAgICAgICAgICAgIC8qIEZvciBzYXZpbmcgZ2xvYmFsIHBhcml0eSB2YWx1ZSAqLwor ICAgIGludCBwcmV2aW91cyA9IDA7CisgICAgaW50IGxlbiA9IDA7CisgICAgaW50IGxpdGVyYWwg PSAwOworICAgIGludCBmbG93c2F2ZTsKKyAgICBpbnQgbHVmb3VuZCA9IDA7ICAgICAgICAgICAg ICAgICAgICAvKiBEaWQgYW55IGxvb2t1cCBzdWNjZWVkPyAqLworICAgIGludCBwcmVmaXggPSAx OworICAgIGludCBwb3N0Zml4ID0gMTsKKyAgICBpbnQgd2FzYWxwaGEgPSAwOworICAgIGludCB4 cmVkaWFsID0gMDsKKyAgICBpbnQgYnJhY2VzID0gMDsKKworICAgIGNoYXIgKnAgPSBOVUxMLCAq czMgPSBOVUxMLCAqIHNhdiA9IE5VTEw7CisgICAgaW50IGogPSAwLCB0ID0gMCwgbiA9IDA7Cisg ICAgaW50IHhyZXRyaWVzLCB4bGNjOworCisjaWZkZWYgQ09NTUVOVAorICAgIGRlYnVnKEYxMDEs ImRvZGlhbCBjeCIsIiIsY3gpOworICAgIGRlYnVnKEYxMTEsImRvZGlhbCBkaWFsbGNjIixkaWFs bGNjLGRpYWxsY2MpOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKworICAgIHhyZXRyaWVzID0gZGlh bHJ0cjsgICAgICAgICAgICAgICAgIC8qIElmIHJldHJpZXMgbm90IHNldCwgKi8KKyAgICBpZiAo ZGlhbGxjYykgeyAgICAgICAgICAgICAgICAgICAgICAvKiBjaG9vc2UgZGVmYXVsdCBiYXNlZCBv biAqLworICAgICAgICB4bGNjID0gYXRvaShkaWFsbGNjKTsgICAgICAgICAgIC8qIGxvY2FsIGNv dW50cnkgY29kZS4gKi8KKyAgICAgICAgaWYgKHhyZXRyaWVzIDwgMCkgeworICAgICAgICAgICAg c3dpdGNoICh4bGNjKSB7CisgICAgICAgICAgICAgIGNhc2UgMTogeHJldHJpZXMgPSAxMDsgYnJl YWs7IC8qIE5vIHJlc3RyaWN0aW9ucyBpbiBOQU5QICovCisgICAgICAgICAgICAgICAgLyogQWRk IG90aGVyIGNvdW50cnkgY29kZXMgaGVyZSAqLworICAgICAgICAgICAgICAgIC8qIHRoYXQgYXJl IGtub3duIHRvIGhhdmUgbm8gcmVzdHJpY3Rpb25zIG9uIHJlZGlhbGluZy4gKi8KKyAgICAgICAg ICAgICAgZGVmYXVsdDogeHJldHJpZXMgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorICAgIGlmIChjeCA9PSBYWFBESUEpIHsgICAgICAgICAgICAgICAgIC8qIFNob3J0Y3V0 Li4uICovCisgICAgICAgIGN4ID0gWFhESUFMOworICAgICAgICBwYXJ0aWFsID0gMTsKKyAgICAg ICAgZGVidWcoRjEwMCwiUERJQUwgc2V0cyBwYXJ0aWFsPTEiLCIiLDApOworICAgICAgICBwb3N0 Zml4ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdCBhZGQgcG9zdGZpeCAqLworICAg IH0gZWxzZSB7CisgICAgICAgIHBhcnRpYWwgPSAwOworICAgICAgICBkZWJ1ZyhGMTAwLCJESUFM IHNldHMgcGFydGlhbD0wIiwiIiwwKTsKKyAgICB9CisgICAgcHJldmlvdXMgPSBkaWFsc3RhOyAg ICAgICAgICAgICAgICAgLyogU3RhdHVzIG9mIHByZXZpb3VzIGNhbGwsIGlmIGFueSAqLworICAg IGlmIChwcmV2aW91cyA9PSBESUFfUEFSVCkgeworICAgICAgICBwcmVmaXggPSAwOyAgICAgICAg ICAgICAgICAgICAgIC8qIGRvIG5vdCBhZGQgcHJlZml4ICovCisgICAgfQorICAgIHMgPSBOVUxM OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdXNlcidzIGRpYWwgc3Ry aW5nICovCisgICAgaWYgKGN4ID09IFhYUkVEKSB7ICAgICAgICAgICAgICAgICAgLyogUkVESUFM IG9yLi4uICovCisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1 cm4oeSk7CisgICAgfSBlbHNlIGlmIChjeCA9PSBYWEFOU1cpIHsgICAgICAgICAgLyogQU5TV0VS IG9yIC4uLiAqLworICAgICAgICBpZiAoKHkgPSBjbW51bSgidGltZW91dCAoc2Vjb25kcykiLCIw IiwxMCwmeCx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGRp YWxhdG1vID0geDsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJl dHVybih5KTsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBESUFM IG9yIExPT0tVUCAqLworICAgICAgICBpZiAobmRpYWxkaXIgPiAwKQorICAgICAgICAgIHMzID0g Ik51bWJlciB0byBkaWFsIG9yIGVudHJ5IGZyb20gZGlhbCBkaXJlY3RvcnkiOworICAgICAgICBl bHNlCisgICAgICAgICAgczMgPSAiTnVtYmVyIHRvIGRpYWwiOworICAgICAgICBpZiAoKHggPSBj bXR4dChzMywgZGlhbG51bSA/IGRpYWxudW0gOiAiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgIGlmIChzKSB7CisgICAgICAgICAgICBsZW4gPSAoaW50 KSBzdHJsZW4ocyk7CisgICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsg LyogU2F2ZSBsaXRlcmFsIGNvcHkgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBpZiAo bGVuID4gMSkgeyAgICAgICAgICAgICAgLyogU3RyaXAgb3V0ZXIgYnJhY2VzIGlmIGdpdmVuICov CisgICAgICAgICAgICAgICAgaWYgKCpzID09ICd7JykgeworICAgICAgICAgICAgICAgICAgICBp ZiAoc1tsZW4tMV0gPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzW2xlbi0xXSA9 IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGxlbiAtPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOyAgICAgICAg ICAgICAvKiBTdHJpcCBvdXRlciBicmFjZXMgb3IgcXVvdGVzICovCisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGN4ICE9IFhYTE9PSykgeyAgICAgICAg ICAgICAgICAgLyogTm90IExPT0tVUCAqLworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2Vy dmVyKSB7CisgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBkaWFsaW5nIGlzIGRpc2FibGVkLlxy XG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBJS1NEICovCisjaWZkZWYgQ0tfVEFQSQorICAgICAgICBpZiAodHR0YXBpICYmICF0YXBp cGFzcykgeworICAgICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNraXAg dGhlIG1vZGVtIHRlc3QgaWYgVEFQSSAqLworICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19U QVBJICovCisgICAgICAgIGlmIChtZG10eXAgPCAxICYmICFkaWFsdGVzdCkgeworICAgICAgICAg ICAgaWYgKG5ldHdvcmsKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgICAgICAgICAgICYmICFp c3RuY29tcG9ydCgpCisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworICAgICAgICAgICAgICAgICAp CisgICAgICAgICAgICAgIHByaW50ZigiUGxlYXNlIFNFVCBIT1NUIGZpcnN0LCBhbmQgdGhlbiBT RVQgTU9ERU0gVFlQRVxuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByaW50 ZigiU29ycnksIHlvdSBtdXN0IFNFVCBNT0RFTSBUWVBFIGZpcnN0XG4iKTsKKyAgICAgICAgICAg IGRpYWxzdGEgPSBESUFfTk9NTzsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCFsb2NhbCAmJiAhZGlhbHRlc3QpIHsKKyAgICAgICAgICAg IHByaW50ZigiU29ycnksIHlvdSBtdXN0IFNFVCAlcyBvciBTRVQgSE9TVCBmaXJzdFxuIiwKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAiUE9SVCIKKyNlbHNlCisgICAgICAgICAgICAg ICAgICAgIkxJTkUiCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgIGRpYWxzdGEgPSBESUFfTk9MSTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCghbmV0d29yayAKKyNpZmRlZiBUTl9DT01Q T1JUCisgICAgICAgICAgICAgIHx8IGlzdG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JU ICovCisgICAgICAgICAgICAgICkgJiYgIWRpYWx0ZXN0ICYmCisjaWZkZWYgQ0tfVEFQSQorICAg ICAgICAgICAgICF0dHRhcGkgJiYKKyNlbmRpZiAvKiBDS19UQVBJICovCisgICAgICAgICAgICAo c3BlZWQgPCAwTCkKKyNpZmRlZiBVTklYCisgICAgICAgICAgICAmJiAoc3RyY21wKHR0bmFtZSwi L2Rldi9udWxsIikpCisjZWxzZQorI2lmZGVmIE9TSworICAgICAgICAgICAgJiYgKHN0cmNtcCh0 dG5hbWUsIi9uaWwiKSkKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBVTklYICovCisgICAg ICAgICAgICApIHsKKyAgICAgICAgICAgIHByaW50ZigiXG5Tb3JyeSwgeW91IG11c3QgU0VUIFNQ RUVEIGZpcnN0XG4iKTsKKyAgICAgICAgICAgIGRpYWxzdGEgPSBESUFfTk9TUDsKKyAgICAgICAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGN4ICE9 IFhYQU5TVykgeworICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUFYRE5VTVM7IGorKykgeyAvKiBJ bml0aWFsaXplIGRpYWwtbnVtYmVyIGxpc3QgKi8KKyAgICAgICAgICAgIGlmICghZGlhbG51bSkg eyAgICAgICAgICAgICAvKiBGaXJzdCB0aW1lIGRpYWxpbmcgKi8KKyAgICAgICAgICAgICAgICBk bl9wW2pdID0gTlVMTDsgICAgICAgICAvKiBpbml0aWFsaXplIGFsbCBwb2ludGVycy4gKi8KKyAg ICAgICAgICAgICAgICBkbl9wMltqXSA9IE5VTEw7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGRu X3Bbal0pIHsgICAgICAgLyogTm90IHRoZSBmaXJzdCB0aW1lLCAqLworICAgICAgICAgICAgICAg IGZyZWUoZG5fcFtqXSk7ICAgICAgICAgIC8qIGZyZWUgcHJldmlvdXMsIGlmIGFueSwgKi8KKyAg ICAgICAgICAgICAgICBkbl9wW2pdID0gTlVMTDsgICAgICAgICAvKiB0aGVuIHNldCB0byBOVUxM LiAqLworICAgICAgICAgICAgICAgIGlmIChkbl9wMltqXSkKKyAgICAgICAgICAgICAgICAgIGZy ZWUoZG5fcDJbal0pOworICAgICAgICAgICAgICAgIGRuX3AyW2pdID0gTlVMTDsKKyAgICAgICAg ICAgIH0gZWxzZSBicmVhazsgICAgICAgICAgICAgICAvKiBBbHJlYWR5IE5VTEwgKi8KKyAgICAg ICAgfQorICAgICAgICBpZiAobGVuID09IDApCisgICAgICAgICAgcyA9IE5VTEw7CisgICAgICAg IGlmICghcykKKyAgICAgICAgICBzID0gZGlhbG51bTsKKyAgICAgICAgaWYgKCFzKSB7CisgICAg ICAgICAgICBpZiAoY3ggPT0gWFhMT09LKQorICAgICAgICAgICAgICBwcmludGYoIj9Mb29rdXAg d2hhdD9cbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBwcmludGYoIiVzXG4i LCAoY3ggPT0gWFhSRUQpID8KKyAgICAgICAgICAgICAgICAgICAiP05vIERJQUwgY29tbWFuZCBn aXZlbiB5ZXQiIDoKKyAgICAgICAgICAgICAgICAgICAiP1lvdSBtdXN0IHNwZWNpZnkgYSBudW1i ZXIgdG8gZGlhbCIKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgfQorCisgICAgLyogTm93IHdlIGhhdmUgdGhlICJyYXciIGRpYWwgb3IgbG9v a3VwIHN0cmluZyBhbmQgcyBpcyBub3QgTlVMTCAqLworCisgICAgICAgIG1ha2VzdHIoJmRzY29w eSxzKTsgICAgICAgICAgICAgLyogUHV0IGl0IGluIGEgc2FmZSBwbGFjZSAqLworICAgICAgICBz ID0gZHNjb3B5OworICAgICAgICBuID0gMDsKKworICAgICAgICBkZWJ1ZyhGMTExLCJkb2RpYWwi LHMsbmRpYWxkaXIpOworCisgICAgICAgIHdhc2FscGhhID0gMDsKKyAgICAgICAgaWYgKGlzYWxw aGEoKnMpKSB7CisgICAgICAgICAgICB3YXNhbHBoYSA9IDE7CisgICAgICAgICAgICBpZiAobmRp YWxkaXIgPiAwKSB7ICAgICAgICAgLyogRG8gd2UgaGF2ZSBhIGRpYWxpbmcgZGlyZWN0b3J5PyAq LworICAgICAgICAgICAgICAgIG4gPSBsdWRpYWwocyxjeCk7ICAgICAgIC8qIExvb2sgdXAgd2hh dCB0aGUgdXNlciB0eXBlZCAqLworICAgICAgICAgICAgICAgIGlmIChuID09IDApCisgICAgICAg ICAgICAgICAgICBwcmludGYoIiBMb29rdXA6IFwiJXNcIiAtIG5vdCBmb3VuZCVzXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3ggPT0g WFhMT09LID8gIiIgOiAiIC0gZGlhbGluZyBhcyBnaXZlblxuIgorICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2RpYWwi LHMsbik7CisgICAgICAgICAgICBpZiAobiA8IDAgJiYgY3ggIT0gWFhMT09LKSB7IC8qIEVycm9y IG91dCBpZiB0aGV5IHdhbnRlZCB0byBkaWFsICovCisgICAgICAgICAgICAgICAgaWYgKG4gPT0g LTEpICAgICAgICAgICAgLyogLTIgbWVhbnMgbHVkaWFsIGFscmVhZHkgZ2F2ZSBtc2cgKi8KKyAg ICAgICAgICAgICAgICAgIHByaW50ZigiIExvb2t1cDogZmF0YWwgZXJyb3IgLSBkaWFsaW5nIHNr aXBwZWRcbiIpOworICAgICAgICAgICAgICAgIGRpYWxzdGEgPSBESUFfRElSOworICAgICAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobiA+IDAp ICAgICAgICAgICAgICAgICAgLyogQSBzdWNjZXNzZnVsIGxvb2t1cCAqLworICAgICAgICAgICAg ICBsdWZvdW5kID0gMTsKKyAgICAgICAgfSBlbHNlIGlmICgqcyA9PSAnPScpIHsgICAgICAgICAv KiBJZiBudW1iZXIgc3RhcnRzIHdpdGggPSBzaWduICovCisgICAgICAgICAgICBzKys7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogc3RyaXAgaXQgKi8KKyAgICAgICAgICAgIGxpdGVyYWwgPSAx OyAgICAgICAgICAgICAgICAvKiByZW1lbWJlciB0aGlzICovCisgICAgICAgICAgICB3aGlsZSAo KnMgPT0gU1ApIHMrKzsgICAgICAgLyogYW5kIHRoZW4gYWxzbyBhbnkgbGVhZGluZyBzcGFjZXMg Ki8KKyAgICAgICAgfSBlbHNlIGlmICh0bXBidWZbMF0gPT0gJ3snICYmIHRtcGJ1ZlsxXSA9PSAn eycpIHsKKyAgICAgICAgICAgIG1ha2VsaXN0KHRtcGJ1Zixkbl9wLE1BWEROVU1TKTsKKyAgICAg ICAgICAgIG1ha2VzdHIoJmRzY29weSx0bXBidWYpOworICAgICAgICAgICAgcyA9IHRtcGJ1ZjsK KyAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBNQVhETlVNUzsgbisrKSAvKiAoaGF2ZSB0byBj b3VudCBob3cgbWFueSkgKi8KKyAgICAgICAgICAgICAgaWYgKCFkbl9wW25dKSBicmVhazsKKyAg ICAgICAgICAgIGJyYWNlcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN4ID09IFhYTE9P SyAmJiAhd2FzYWxwaGEgJiYgIWJyYWNlcykgeworICAgICAgICAgICAgLyogV2UndmUgYmVlbiB0 b2xkIHRvIGxvb2t1cCBhIG51bWJlciBvciBhIHF1b3RlZCBuYW1lICovCisgICAgICAgICAgICBj aGFyICpwOworICAgICAgICAgICAgbiA9IDA7CisgICAgICAgICAgICBwID0gbGl0ZXJhbCA/IHMg OiBwbmN2dChkc2NvcHkpOworICAgICAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgICAg ICBpZiAoKnApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzICA9PiAlc1xuIiwgZHNjb3B5 LCBwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9CYWQgcGhvbmUgbnVtYmVyXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIC8qIFNhdmUgRElBTCBvciBzdWNjZXNzZnVsIExPT0tVUCBzdHJpbmcg Zm9yIGZ1dHVyZSBESUFMIG9yIFJFRElBTCAqLworICAgICAgICAvKiBCdXQgZG9uJ3Qgc2F2ZSBw aWVjZXMgb2YgcGFydGlhbCBkaWFsIC4uLiAqLworCisgICAgICAgIGRlYnVnKEYxMDEsIkRJQUwg c2F2ZSBkaWFsbnVtIHBhcnRpYWwiLCIiLHBhcnRpYWwpOworICAgICAgICBkZWJ1ZyhGMTAxLCJE SUFMIHNhdmUgZGlhbG51bSBwcmV2aW91cyIsIiIscHJldmlvdXMpOworICAgICAgICBpZiAoKGN4 ID09IFhYRElBTCAmJiBwYXJ0aWFsID09IDAgJiYgcHJldmlvdXMgIT0gRElBX1BBUlQpIHx8Cisg ICAgICAgICAgICAoY3ggPT0gWFhMT09LICYmIG4gPiAwKSkgeworICAgICAgICAgICAgbWFrZXN0 cigmZGlhbG51bSxkc2NvcHkpOworICAgICAgICAgICAgaWYgKCFxdWlldCAmJiBkc2NvcHkgJiYg IWRpYWxudW0pCisgICAgICAgICAgICAgIHByaW50ZigiV0FSTklORyAtIG1lbW9yeSBhbGxvY2F0 aW9uIGZhaWx1cmU6IHJlZGlhbCBudW1iZXJcbiIpOworICAgICAgICB9CisgICAgICAgIGlmIChu ID4gMCkgeworICAgICAgICAgICAgaWYgKCFxdWlldCAmJiAhYmFja2dyZCAmJiAhYnJhY2VzIC8q ICYmIGRpYWxkcHkgKi8gKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoZF9uYW1lLHMp KQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgTG9va3VwOiBcIiVzXCIgLSBleGFjdCBtYXRj aFxuIixzKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwcmludGYo IiBMb29rdXA6IFwiJXNcIiAtIHVuaXF1ZWx5IG1hdGNoZXMgXCIlc1wiXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZF9uYW1lCisgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo Y3ggPT0gWFhMT09LKSB8fAorICAgICAgICAgICAgICAgICgobiA+IDEpICYmICFxdWlldCAmJiAh YmFja2dyZCAvKiAmJiBkaWFsZHB5ICovICkpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiAl ZCB0ZWxlcGhvbmUgbnVtYmVyJXNmb3VuZCBmb3IgXCIlc1wiJXNcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgIG4sCisgICAgICAgICAgICAgICAgICAgICAgIChuID09IDEpID8gIiAiIDogInMg IiwKKyAgICAgICAgICAgICAgICAgICAgICAgcywKKyAgICAgICAgICAgICAgICAgICAgICAgKG4g PiAwKSA/ICI6IiA6ICIuIgorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgIHMzID0gZ2V0ZG5hbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBuOyBpKyspIHsgICAvKiBDb252ZXJ0ICovCisgICAgICAgICAgICAgICAgZG5feFtp XSA9IC0xOworICAgICAgICAgICAgICAgIGlmIChkbmN2dChpLGN4LHByZWZpeCxwb3N0Zml4KSA8 IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN4ICE9IFhYTE9PSykgeworICAgICAgICAg ICAgICAgICAgICAgICAgZGlhbHN0YSA9IERJQV9ESVI7CisgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpYWxzcnQgJiYgbiA+IDEpIHsgICAgIC8q IFNvcnQgaW50byBvcHRpbWFsIG9yZGVyICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IG4tMTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGkrMTsgaiA8IG47 IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRuX3hbal0gPCBkbl94W2ldKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IGRuX3hbal07CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG5feFtqXSA9IGRuX3hbaV07CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZG5feFtpXSA9IHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGRuX3Bb al07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5fcFtqXSA9IGRuX3BbaV07CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZG5fcFtpXSA9IHA7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcCA9IGRuX3AyW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRuX3Ay W2pdID0gZG5fcDJbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5fcDJbaV0gPSBw OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChjeCA9PSBYWExP T0spIHx8CisgICAgICAgICAgICAgICAgKChuID4gMSkgJiYgIXF1aWV0ICYmICFiYWNrZ3JkIC8q ICYmIGRpYWxkcHkgKi8gKSkgeworICAgICAgICAgICAgICAgIGludCBubiA9IG47CisjaWZuZGVm IE5PU1BMCisgICAgICAgICAgICAgICAgY2hhciAqIHA7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAg ICAgICAgICAgICAgICBpZiAoY3ggIT0gWFhMT09LKQorICAgICAgICAgICAgICAgICAgaWYgKG4g PiAxMikgbm4gPSAxMjsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm47IGkrKykg eworICAgICAgICAgICAgICAgICAgICBwcmludGYoIiUzZC4gJS0xMnMgICUtMjBzID0+ICAlLTIw cyAgKCVkKVxuIixpKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzMywgZG5fcFtpXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRuX3AyW2ldID8gZG5fcDJbaV0gOiAiKHByb2Nl c3NpbmcgZmFpbGVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkbl94W2ldCisgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICBpZiAoY3ggIT0gWFhMT09LICYmIG4gIT0gbm4pCisgICAgICAgICAgICAgICAgICBwcmlu dGYoIkFuZCAlZCBtb3JlLi4uXG4iLCBuIC0gbm4pOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgaWYgKG4gPT0gMCkgeyAgICAgICAgICAgIC8qIE5vdCBmb3VuZCBpbiBkaXJlY3Rvcnkg Ki8KKyAgICAgICAgICAgIG1ha2VzdHIoJihkbl9wWzBdKSxsaXRlcmFsID8gcyA6IGRzY29weSk7 CisgICAgICAgICAgICBtYWtlc3RyKCZkX25hbWUsbGl0ZXJhbCA/IHMgOiBkc2NvcHkpOworICAg ICAgICAgICAgZG5jb3VudCA9IDE7CisgICAgICAgICAgICBuID0gMTsKKyAgICAgICAgICAgIGlm IChkbmN2dCgwLGN4LHByZWZpeCxwb3N0Zml4KSA8IDApIHsgLyogSW4gY2FzZSB0aGV5IHR5cGVk IGEgKi8KKyAgICAgICAgICAgICAgICBkaWFsc3RhID0gRElBX0RJUjsgICAgICAvKiBwb3J0YWJs ZS1mb3JtYXQgbnVtYmVyIC4uLiAqLworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKworI2lmbmRlZiBOT05FVAorI2lmZGVmIE5FVENPTk4KKyAg ICAgICAgLyogSXQncyBub3QgZ29vZCB0aGF0IHRoZSBuZXR3b3JrcyBkaXJlY3RvcnkgZGVwZW5k cyBvbiBOT1QtTk9ESUFMLi4gKi8KKyAgICAgICAgaWYgKGN4ID09IFhYTE9PSyAmJiBkc2NvcHkp IHsgICAvKiBOZXR3b3JrcyBoZXJlIHRvby4uLiAqLworICAgICAgICAgICAgZXh0ZXJuIGNoYXIg Km5oX3BbXSwgKm5oX3AyW10sICpuX25hbWU7CisgICAgICAgICAgICBleHRlcm4gY2hhciAqbmhf cHhbNF1bTUFYRE5VTVMrMV07CisgICAgICAgICAgICBuID0gLTE7CisgICAgICAgICAgICBpZiAo bm5ldGRpciA+IDApIHsgICAgICAgICAgLyogRG8gd2UgaGF2ZSBhIG5ldHdvcmsgZGlyZWN0b3J5 PyAqLworICAgICAgICAgICAgICAgIGRpcmxpbmUgPSAwOworICAgICAgICAgICAgICAgIG4gPSBs dW5ldChkc2NvcHkpOyAgICAgIC8qIExvb2sgdXAgd2hhdCB0aGUgdXNlciB0eXBlZCAqLworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG4gPiAtMSkgeworICAgICAgICAgICAgICAgIGlu dCBrOworICAgICAgICAgICAgICAgIGlmIChuID4gMCkgICAgICAgICAgICAgIC8qIEEgc3VjY2Vz c2Z1bCBsb29rdXAgKi8KKyAgICAgICAgICAgICAgICAgIGx1Zm91bmQgPSAxOworICAgICAgICAg ICAgICAgIGlmIChjeCA9PSBYWExPT0sgJiYgbiA9PSAwKQorICAgICAgICAgICAgICAgICAgcHJp bnRmKCIgTG9va3VwOiBcIiVzXCIgLSBub3QgZm91bmRcbiIsZHNjb3B5KTsKKyAgICAgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwcmludGYoIiVzICVkIG5ldHdvcmsgZW50ciVz IGZvdW5kIGZvciBcIiVzXCIlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjeCA9PSBY WExPT0sgPyAiIExvb2t1cDoiIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAobiA9PSAxKSA/ICJ5IiA6ICJpZXMiLAorICAgICAgICAg ICAgICAgICAgICAgICAgIGRzY29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAobiA+IDAp ID8gIjoiIDogIi4iCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKworICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIiUzZC4gJS0xMnMgPT4gJS05cyAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBp KzEsbl9uYW1lLG5oX3AyW2ldLG5oX3BbaV0pOworICAgICAgICAgICAgICAgICAgICBmb3IgKGsg PSAwOyBrIDwgNDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmhfcHhba11b aV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyIsbmhfcHhba11b aV0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyNlbmRpZiAvKiBORVRDT05OICovCisjZW5kaWYgLyogTk9ORVQgKi8KKyAgICAgICAgaWYg KGN4ID09IFhYTE9PSykKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IGx1Zm91bmQpOworICAg IH0gLyogY3ggIT0gWFhBTlNXICovCisKKyNpZmRlZiBWTVMKKyAgICBjb25yZXMoKTsgICAgICAg ICAgICAgICAgICAgLyogU28gQ3RybC1DL1kgd2lsbCB3b3JrICovCisjZW5kaWYgLyogVk1TICov CisvKgorICBTb21lIG1vZGVtcyBkbyBub3QgcmVhY3Qgd2VsbCB0byBwYXJpdHkuICBBbHNvLCBp ZiB3ZSBhcmUgZGlhbGluZyB0aHJvdWdoIGEKKyAgVENQL0lQIFRFTE5FVCBtb2RlbSBzZXJ2ZXIs IHBhcml0eSBjYW4gYmUgZmF0YWxseSBtaXNpbnRlcnByZXRlZCBhcyBURUxORVQKKyAgbmVnb3Rp YXRpb25zLgorCisgIFRoaXMgc2hvdWxkIHdvcmsgZXZlbiBpZiB0aGUgdXNlciBpbnRlcnJ1cHRz IHRoZSBESUFMIGNvbW1hbmQsIGJlY2F1c2UgdGhlCisgIERJQUwgbW9kdWxlIGhhcyBpdHMgb3du IGludGVycnVwdCBoYW5kbGVyLiAgQlVULi4uIGlmLCBmb3Igc29tZSByZWFzb24sIGEKKyAgZGlh bGluZyBkZXZpY2UgYWN0dWFsbHkgKnJlcXVpcmVzKiBwYXJpdHkgKGUuZy4gQ0NJVFQgVi4yNWJp cyBzYXlzIHRoYXQgZXZlbgorICBwYXJpdHkgc2hvdWxkIGJlIHVzZWQpLCB0aGlzIG1pZ2h0IHBy ZXZlbnQgc3VjY2Vzc2Z1bCBkaWFsaW5nLiAgRm9yIHRoYXQKKyAgcmVhc29uLCB3ZSBkb24ndCBk byB0aGlzIGZvciBWLjI1YmlzIG1vZGVtcy4KKyovCisgICAgc3Bhcml0eSA9IHBhcml0eTsgICAg ICAgICAgICAgICAgICAgLyogU2F2ZSBjdXJyZW50IHBhcml0eSAqLworICAgIGlmICgoZGlhbGNh cGFzICYgQ0tEX1YyNSkgPT0gMCkgICAgIC8qIElmIG5vdCBWLjI1YmlzLi4uICAqLworICAgICAg cGFyaXR5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBwYXJpdHkgdG8gTk9ORSAq LworCisgICAgZmxvd3NhdmUgPSBmbG93OworLyoKKyAgVGhlc2UgbW9kZW1zIHVzZSBzb21lIGtp bmQgb2Ygc2NyZXd5IGZsb3cgY29udHJvbCB3aGlsZSBpbiBjb21tYW5kIG1vZGUsCisgIGFuZCBk byBub3QgcHJlc2VudCBDVFMgYXMgdGhleSBzaG91bGQuICBTbyBpZiBSVFMvQ1RTIGlzIHNldCAo b3IgZXZlbiBpZgorICBpdCBpc24ndCkgZGlzYWJsZSBmbG93IGNvbnRyb2wgZHVyaW5nIGRpYWxp bmcuCisqLworI2lmbmRlZiBNSU5JRElBTAorICAgIGlmIChtZG10eXAgPT0gbl9BVFQxOTEwIHx8 IG1kbXR5cCA9PSBuX0FUVDE5MDApIHsKKyAgICAgICAgZmxvdyA9IEZMT19OT05FOyAgICAgICAg ICAgICAgICAvKiBUaGlzIGlzIG5vdCBlbm91Z2ggKi8KKyNpZmRlZiBDS19UVFNFVEZMT1cKKyAg ICAgICAgdHRzZXRmbG93KEZMT19OT05FKTsgICAgICAgICAgICAvKiBSZWFsbHkgdHVybiBpdCBv ZmYgKi8KKyNlbmRpZiAvKiBDS19UVFNFVEZMT1cgKi8KKyAgICB9CisjZW5kaWYgLyogTUlOSURJ QUwgKi8KKyAgICBpZiAoIW5ldHdvcmsKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAgIHx8IGlz dG5jb21wb3J0KCkKKyNlbmRpZiAvKiBUTl9DT01QT1JUICovCisgICAgICAgICApIHsKKyAgICAg ICAgaW50IHg7CisgICAgICAgIGlmICgoeCA9IHR0Z21kbSgpKSA+IC0xKSB7CisgICAgICAgICAg ICBpZiAoIXggJiYgbXNnZmxnKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorIldBUk5JTkcg LSBObyBtb2RlbSBzaWduYWxzIGRldGVjdGVkLiAgSXMgeW91ciBtb2RlbSB0dXJuZWQgb24/ICBJ ZiBub3QsXG5cCit1c2UgQ3RybC1DIHRvIGludGVycnVwdCBkaWFsaW5nLCB0dXJuIG9uIHlvdXIg bW9kZW0sIHRoZW4gJXMuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBjeCA9PSBYWEFOU1cg PworICAgICAgICAgICAgICAgICAgICAgICAiQU5TV0VSIGFnYWluIiA6CisgICAgICAgICAgICAg ICAgICAgICAgICJSRURJQUwiCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoZmxvdyA9PSBGTE9fUlRTQykgeworICAgICAgICAgICAgICAg IGlmICghKHggJiBCTV9DVFMpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtc2dmbGcpCisg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIldBUk5JTkcgLSBTRVQgRkxPVyBSVFMvQ1RT IGlzIGluIGVmZmVjdCBidXQgbW9kZW0ncyBDVFMgc2lnbmFsIGlzIG9mZi5cblwKK0Rpc2FibGlu ZyBmbG93IGNvbnRyb2wgdGVtcG9yYXJpbHkgJXMuLi5cbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN4ID09IFhYQU5TVyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3 aGlsZSB3YWl0aW5nIGZvciBjYWxsIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk dXJpbmcgZGlhbGluZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgICAgICAgICAgZmxvdyA9IEZMT19OT05FOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY3ggPT0gWFhBTlNXKSB7ICAgICAgICAg ICAgICAgICAvKiBBTlNXRVIgKi8KKyAgICAgICAgc3VjY2VzcyA9IGNrZGlhbCgiIiwwLDAsMSww KTsKKyAgICAgICAgZ290byBkaWFsZmluOworICAgIH0KKworLyogRWRpdCAxOTIgYWRkcyB0aGUg YWJpbGl0eSB0byBkaWFsIHJlcGVhdGVkbHkuICovCisKKyAgICBpID0gMDsKKyAgICBkaWFsY291 bnQgPSAwOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkgPiAwKSBwcmludGYoIlxuRGlhbCBhdHRl bXB0ICVkIG9mICVkLi4uXG4iLCBpKzEsIHhyZXRyaWVzKTsKKyAgICAgICAgZGlhbGNvdW50ID0g aSsxOworICAgICAgICBzdWNjZXNzID0gMDsKKyAgICAgICAgLyogQW5kIHRoZSBhYmlsaXR5IHRv IGRpYWwgYWx0ZXJuYXRlIG51bWJlcnMuICovCisgICAgICAgIC8qIExvb3AgdG8gZGlhbCBlYWNo IGluIGEgbGlzdCBvZiBudW1iZXJzIGZvciB0aGUgc2FtZSBuYW1lLi4uICovCisgICAgICAgIGZv ciAoaiA9IDA7IGogPCBuICYmICFzdWNjZXNzOyBqKyspIHsgLyogdW50aWwgb25lIGFuc3dlcnMu ICovCisgICAgICAgICAgICBzID0gZG5fcDJbal07ICAgICAgICAgICAgICAgLyogTmV4dCBudW1i ZXIgaW4gbGlzdCAqLworICAgICAgICAgICAgaWYgKGRuX3hbal0gPj0gZGlhbHJzdHIpIHsgIC8q IERpYWwgcmVzdHJpY3Rpb24gKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIlJlc3RyaWN0ZWQ6 ICVzLCBza2lwcGluZy4uLlxuIixkbl9wW2pdKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHhyZWRpYWwgPSAoaSA9PSAwICYmIGogPT0gMCkg PyAwIDogMTsKKyAgICAgICAgICAgIGlmICghcykgcyA9IGRuX3Bbal07CisKKyNpZm5kZWYgTk9T UEwKKyAgICAgICAgICAgIHNhdiA9IHM7CisgICAgICAgICAgICBwID0geGRpYWwocyk7ICAgICAg ICAgICAgICAgLyogQXBwbHkgRElBTCBtYWNybyBub3cgKi8KKyAgICAgICAgICAgIGlmIChwKSBp ZiAoKnApIHMgPSBwOworI2VuZGlmIC8qIE5PU1BMICovCisKKwkgICAgLyogRGlhbCBjb25maXJt YXRpb24gKi8KKwkgICAgLyogTk9URTogdGhlIHVxX3h4eCgpIGNhbGxzIGFsbG93IGZvciBhIEdV SSBkaWFsb2cgKi8KKworICAgICAgICAgICAgaWYgKGkgPT0gMCAmJiBkaWFsY25mKSB7CisJCWNo YXIgbXNnYnVmWzEyOF07CisJCWNrbWFrbXNnKG1zZ2J1ZiwxMjgsIkRpYWxpbmcgIixzLE5VTEws TlVMTCk7CisJCXggPSB1cV9vayhtc2didWYsIklzIHRoaXMgbnVtYmVyIGNvcnJlY3Q/ICIsMyxO VUxMLDApOworICAgICAgICAgICAgICAgIGlmICgheCkgeworCisjaWZuZGVmIENPTU1FTlQKKwkJ ICAgIHggPSB1cV90eHQoCQkvKiBBbGxvdyBHVUkgZGlhbG9nICovCisjaWZkZWYgT1MyCisiIFBs ZWFzZSBlbnRlciB0aGUgY29ycmVjdCBudW1iZXIsXHJcbiBvciBwcmVzcyBFbnRlciB0byBza2lw LiIsCisjZWxzZQorIiBQbGVhc2UgZW50ZXIgdGhlIGNvcnJlY3QgbnVtYmVyLFxyXG4gb3IgcHJl c3MgUmV0dXJuIHRvIHNraXAuIiwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJDb3JyZWN0ZWQgcGhvbmUgbnVtYmVyOiAiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEsCisJCQkgICAgICAgTlVMTCwKKwkJCSAgICAgICBhdG1idWYsCisJ CQkgICAgICAgQVRNQkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1VRX1RJTUVPVVQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworCQkgICAgaWYgKHggJiYgYXRtYnVmWzBdKSB7IC8qIFRo ZXkgZ2F2ZSBhIG5ldyBvbmUgKi8KKwkJCXMgPSBhdG1idWY7CisJCQltYWtlc3RyKCYoZG5fcDJb al0pLCBzKTsKKwkJICAgIH0JCQkKKworI2Vsc2UgIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENL X1JFQ0FMTAorICAgICAgICAgICAgICAgICAgICBleHRlcm4gaW50IG9uX3JlY2FsbDsKKyNlbmRp ZiAvKiBDS19SRUNBTEwgKi8KKyAgICAgICAgICAgICAgICAgICAgY21zYXZwKHBzYXZlLFBST01Q VEwpOworICAgICAgICAgICAgICAgICAgICBjbXNldHAoCisjaWZkZWYgT1MyCisiIFBsZWFzZSBl bnRlciB0aGUgY29ycmVjdCBudW1iZXIsXHJcbiBvciBwcmVzcyBFbnRlciB0byBza2lwOiAiCisj ZWxzZQorIiBQbGVhc2UgZW50ZXIgdGhlIGNvcnJlY3QgbnVtYmVyLFxyXG4gb3IgcHJlc3MgUmV0 dXJuIHRvIHNraXA6ICIKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICAgICAgICAgIGNtaW5pKGNreGVjaCk7CisgICAgICAgICAgICAg ICAgICAgIHggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBmbGFnKSBwcm9tcHQoTlVM TCk7CisjaWZkZWYgQ0tfUkVDQUxMCisgICAgICAgICAgICAgICAgICAgIG9uX3JlY2FsbCA9IDA7 CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgICAgICAgICAgICAgICAgIHkgPSBjbWRncXVv KCk7CisgICAgICAgICAgICAgICAgICAgIGNtZHNxdW8oMCk7CisgICAgICAgICAgICAgICAgICAg IHdoaWxlICh4IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGNtdHh0KCJDb3Jy ZWN0ZWQgcGhvbmUgbnVtYmVyIiwiIiwmcyxOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGNtcmVzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg KChpbnQpIHN0cmxlbihzKSA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtc2V0cChw c2F2ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYoZG5fcDJbal0pLCBzKTsKKyAg ICAgICAgICAgICAgICAgICAgY21kc3F1byh5KTsKKyAgICAgICAgICAgICAgICAgICAgY21zZXRw KHBzYXZlKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKGRpYWx0ZXN0KSB7ICAgICAgICAgICAgIC8qIEp1c3Qg dGVzdGluZyAqLworICAgICAgICAgICAgICAgIGlmIChpICsgaiA9PSAwKQorICAgICAgICAgICAg ICAgICAgcHJpbnRmKCJcblRFU1RJTkcuLi5cbiIpOworICAgICAgICAgICAgICAgIGlmIChkaWFs bWFjKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgTnVtYmVyOiBcIiVzXCIgPT4gXCIlc1wi XG4iLHNhdixzKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwcmlu dGYoIiBOdW1iZXI6IFwiJXNcIlxuIixzKTsKKyAgICAgICAgICAgICAgICBkaWFsc3RhID0gRElB X0JVU1k7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDA7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIHdoYXQgfD0gV19ESUFMSU5HOworICAgICAgICAgICAgICAgIHN1 Y2Nlc3MgPSBja2RpYWwocyxpLGoscGFydGlhbCA/IDMgOiAwLCB4cmVkaWFsKTsgLyogRGlhbCBp dCAqLworICAgICAgICAgICAgICAgIHdoYXQgJj0gfihXX0RJQUxJTkcpOworICAgICAgICAgICAg ICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZGlhbHN0YSA8IDgg fHwgIC8qIEJyZWFrIG91dCBpZiB1bnJlY292ZXJhYmxlIGVycm9yICovCisgICAgICAgICAgICAg ICAgICAgICAgICBkaWFsc3RhICA9PSBESUFfSU5UUiB8fAorICAgICAgICAgICAgICAgICAgICAg ICAgZGlhbHN0YSAgPT0gRElBX0VSUiAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZp b3VzID09IERJQV9QQVJUCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGlmIChzdWNjZXNzKSAgICAgICAgICAgICAgICAgICAgLyogU3VjY2VlZGVk LCBsZWF2ZSB0aGUgb3V0ZXIgbG9vcCAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAo ZGlhbHN0YSA8IDggfHwgICAgICAgICAgICAgIC8qIEJyZWFrIG91dCBpZiB1bnJlY292ZXJhYmxl IGVycm9yICovCisgICAgICAgICAgICBkaWFsc3RhID09IERJQV9JTlRSIHx8ICAgICAgLyogSW50 ZXJydXB0ZWQgKi8KKyAgICAgICAgICAgIGRpYWxzdGEgPT0gRElBX05PRFQgfHwgICAgICAvKiBO byBkaWFsdG9uZSAqLworICAgICAgICAgICAgZGlhbHN0YSA9PSBESUFfTk9BQyB8fCAgICAgIC8q IEFjY2VzcyBmb3JiaWRkZW4gKi8KKyAgICAgICAgICAgIGRpYWxzdGEgPT0gRElBX0JMQ0sgfHwg ICAgICAvKiBCbGFja2xpc3RlZCAqLworICAgICAgICAgICAgZGlhbHN0YSA9PSBESUFfRElSICB8 fCAgICAgIC8qIERpYWxpbmcgZGlyZWN0b3J5IGVycm9yICovCisgICAgICAgICAgICBkaWFsc3Rh ID09IERJQV9FUlIgIHx8ICAgICAgLyogTW9kZW0gY29tbWFuZCBlcnJvciAqLworICAgICAgICAg ICAgcHJldmlvdXMgPT0gRElBX1BBUlQpCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgr K2kgPj0geHJldHJpZXMpICAgICAgICAgICAgLyogQnJlYWsgb3V0IGlmIHRvbyBtYW55IHRyaWVz ICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghYmFja2dyZCAmJiAhcXVpZXQpIHsK KyAgICAgICAgICAgIGlmIChkaWFsaW50ID4gNSkKKyAgICAgICAgICAgICAgcHJpbnRmKAorIlxu V2lsbCByZWRpYWwgaW4gJWQgc2Vjb25kJXMtIHByZXNzIGFueSBrZXkgdG8gcmVkaWFsIGltbWVk aWF0ZWx5LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGRpYWxpbnQsCisgICAgICAgICAgICAg ICAgICAgICBkaWFsaW50ID09IDEgPyAiICIgOiAicyAiCisgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgcHJpbnRmKCJDdHJsLUMgdG8gY2FuY2VsLi4uXG4iKTsKKyAgICAgICAg fQorICAgICAgICB4ID0gZGlhbGludDsgICAgICAgICAgICAgICAgICAgIC8qIFJlZGlhbCBpbnRl cnZhbCAqLworICAgICAgICB3aGlsZSAoeC0tID4gMCkgeworICAgICAgICAgICAgaWYgKCh5ID0g Y29uY2hrKCkpID4gMCkgeyAgIC8qIERpZCB0aGV5IHR5cGUgc29tZXRoaW5nPyAqLworICAgICAg ICAgICAgICAgIHdoaWxlICh5LS0pIGNvbmluYygwKTsgIC8qIFllcywgYWJzb3JiIGl0ICovCisg ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogQW5kIHdha2UgdXAgKi8K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNsZWVwKDEpOyAgICAgICAgICAgICAgICAgICAv KiBObyBpbnRlcnJ1cHQsIHNsZWVwIGEgc2VjICovCisgICAgICAgIH0KKyAgICB9IHdoaWxlICgh c3VjY2Vzcyk7CisKKyAgZGlhbGZpbjoKKworICAgIGlmIChjeCAhPSBYWExPT0spIHsKKyAgICAg ICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgIGJsZWVwKChzaG9ydCkgQlBfRkFJTCk7CisgICAg ICAgIGVsc2UgaWYgKCFxdWlldCkKKyAgICAgICAgICBibGVlcCgoc2hvcnQpIEJQX05PVEUpOwor I2lmZGVmIE9TMgorICAgICAgICBzZXRpbnQoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEZp eCBPUy8yIGludGVycnVwdHMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgaWYgKHNwYXJp dHkgPiAtMSkKKyAgICAgICAgICBwYXJpdHkgPSBzcGFyaXR5OyAgICAgICAgICAgICAvKiBSZXN0 b3JlIHBhcml0eSBpZiB3ZSBzYXZlZCBpdCAqLworICAgICAgICBmbG93ID0gZmxvd3NhdmU7Cisj aWZkZWYgT1MyCisgICAgICAgIHR0cmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVz dG9yZSBESUFMIGRldmljZSAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIFZNUworICAgICAg ICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFJlc3RvcmUgY29uc29sZSAqLwor I2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIE9TMgorICAgICAgICB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNldCBzZXNzaW9uIHRpdGxlICovCisgICAgICAgICAgICBjaGFyICog cCwgbmFtZVs3Ml07ICAgICAgICAgLyogaW4gd2luZG93IGxpc3QuICovCisgICAgICAgICAgICBj aGFyICogcTsKKyAgICAgICAgICAgIGlmIChjeCA9PSBYWEFOU1cpIHsKKyAgICAgICAgICAgICAg ICBxID0gIkluY29taW5nIGNhbGwiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBpZiAoZF9uYW1lKQorICAgICAgICAgICAgICAgICAgcSA9IGRfbmFtZTsKKyAgICAgICAg ICAgICAgICBlbHNlIGlmIChkaWFsbnVtKQorICAgICAgICAgICAgICAgICAgcSA9IGRpYWxudW07 CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHRuYW1lWzBdKQorICAgICAgICAgICAgICAgICAg cSA9IHR0bmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlIHEgPSAiIjsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHAgPSBuYW1lOworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAg ICAgICAgICAgICBzdHJuY3B5KG5hbWUscSw0OCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCpw KSB7ICAgICAgICAgICAgLyogVXBwZXJjYXNlIGl0IGZvciBlbXBoYXNpcy4gKi8KKyAgICAgICAg ICAgICAgICAgICAgaWYgKGlzbG93ZXIoKnApKQorICAgICAgICAgICAgICAgICAgICAgICpwID0g dG91cHBlcigqcCk7CisgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgbmFtZVswXSA9IE5VTCA7CisgICAg ICAgICAgICBvczJzZXR0aXRsZSgoY2hhciAqKSBuYW1lLCBUUlVFKTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIE9TMiAqLworICAgIH0KKyAgICBpZiAoY3ggIT0gWFhMT09LKSB7CisgICAgICAgIGlm IChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAocmVsaWFibGUgPT0gU0VUX0FVVE8pIHsgLyog SXQncyBub3QgYSByZWxpYWJsZSBjb25uZWN0aW9uLiAqLworICAgICAgICAgICAgICAgIHJlbGlh YmxlID0gU0VUX09GRjsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkb2RpYWwgcmVsaWFi bGUiLCIiLHJlbGlhYmxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyNpZm5k ZWYgTk9ISU5UUworICAgICAgICAgICAgZXh0ZXJuIGludCBoaW50czsKKyAgICAgICAgICAgIGlm IChoaW50cyAmJiAhcXVpZXQgJiYgZGlhbHN0YSAhPSA5KSB7IC8qIDkgPT0gVXNlciBpbnRlcnJ1 cHRlZCAqLworICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgZGlhbG1odSwgZGlhbGhuZywgZGlh bGRweTsKKyAgICAgICAgICAgICAgICBleHRlcm4gY2hhciAqIGRpYWxtc2dbXTsKKyAgICAgICAg ICAgICAgICBwcmludGYoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCJESUFMLWNsYXNzIGNvbW1hbmQgZmFpbGVkLlxuIik7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCJNb2RlbSB0eXBlOiAgJXNcbiIsIGdtZG10eXAoKSk7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCJEZXZpY2U6ICAgICAgJXNcbiIsIHR0bmFtZSk7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCJTcGVlZDogICAgICAgJWxkXG4iLCBzcGVlZCk7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCJEaWFsIHN0YXR1czogJWQiLGRpYWxzdGEpOworICAgICAgICAgICAgICAgIGlm IChkaWFsc3RhIDwgMzUgJiYgZGlhbG1zZ1tkaWFsc3RhXSkKKyAgICAgICAgICAgICAgICAgIHBy aW50ZigiIFslc10iLGRpYWxtc2dbZGlhbHN0YV0pOworICAgICAgICAgICAgICAgIHByaW50Zigi XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlhbHN0YSA9PSBESUFfVElNTyB8fAorICAgICAg ICAgICAgICAgICAgICBkaWFsc3RhID09IERJQV9OUkRZIHx8CisgICAgICAgICAgICAgICAgICAg KGRpYWxzdGEgPiAxMyAmJiBkaWFsc3RhICE9IERJQV9CVVNZICYmIGRpYWxzdGEgIT0gRElBX05P QU4pCisgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KGRpYWxzdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIERJQV9USU1POgorICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIiAuIFNFVCBESUFMIFRJTUVPVVQgdG8gYSBncmVh dGVyIHZhbHVlIGFuZCB0cnkgYWdhaW4uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgRElBX05SU1A6CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBESUFfTlJEWToK KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIERJQV9OT0lOOgorICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKAorIiAuIElzIHRoZSBtb2RlbSB0dXJuZWQgb24/XG4iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigK KyIgLiBBcmUgeW91IHVzaW5nIHRoZSByaWdodCBjb21tdW5pY2F0aW9uIHBvcnQ/XG4iCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElBX05PRFQ6CisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoCisiIC4gSXMgdGhlIG1vZGVtIGNvbm5lY3RlZCB0byB0aGUgdGVs ZXBob25lIGxpbmU/XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobWRtdHlwID09IG5fR0VO RVJJQykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIiAuIFBsZWFzZSBjaG9v c2UgYSBzcGVjaWZpYyBtb2RlbSB0eXBlIHdpdGggU0VUIE1PREVNIFRZUEUgYW5kIHRyeSBhZ2Fp bi5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKAorIiAgICBTRVQgTU9ERU0gVFlQRSA/IHRvIHNlZSB0aGUgbGlzdCBv ZiBrbm93biBtb2RlbSB0eXBlcy5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRmKAorIiAuIEFyZSB5b3Ugc3VyZSB5b3UgaGF2ZSBjaG9zZW4gdGhlIGFwcHJvcHJpYXRl IG1vZGVtIHR5cGU/XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPiAxOTIwMEwp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyIgLiBNYXliZSB0aGUgaW50ZXJm YWNlIHNwZWVkICglbGQpIGlzIHRvbyBmYXN0OlxuIiwgc3BlZWQKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIiAgICBT RVQgU1BFRUQgdG8gYSBsb3dlciBzcGVlZCBhbmQgdHJ5IGFnYWluLlxuIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisi ICAgIFNFVCBTUEVFRCA/IHRvIHNlZSB0aGUgbGlzdCBvZiB2YWxpZCBzcGVlZHMuXG4iCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBpZiAoZGlhbGhuZykgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGRpYWxtaHUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyIgLiBTRVQg TU9ERU0gSEFOR1VQLU1FVEhPRCBSUzIzMiBhbmQgdHJ5IGFnYWluLlxuIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKAorIiAuIFNFVCBNT0RFTSBIQU5HVVAtTUVU SE9EIE1PREVNLUNPTU1BTkQgYW5kIHRyeSBhZ2Fpbi5cbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisiIC4gSWYg dGhhdCBkb2Vzbid0IHdvcmssIHRyeSBhZ2FpbiB3aXRoIFNFVCBESUFMIEhBTkdVUCBPRkYuXG4i CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyIgLiBHaXZlIGEgSEFO R1VQIG9yIFNFVCBESUFMIEhBTkdVUCBPTiBjb21tYW5kIGFuZCB0cnkgYWdhaW4uXG4iCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBpZiAoIWRpYWxkcHkpCisgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKAorIiAuIFVzZSBTRVQgRElBTCBESVNQTEFZIE9OIHRvIHdhdGNoIHRoZSBkaWFsb2cgYmV0 d2VlbiBLZXJtaXQgYW5kIG1vZGVtLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgICAgIH0KKyNpZm5kZWYgTk9TSE9XCisgICAgICAgICAgICAgICAgcHJp bnRmKAorIiAuIFNIT1cgQ09NTVVOSUNBVElPTlMsIFNIT1cgTU9ERU0sIFNIT1cgRElBTCB0byBz ZWUgY3VycmVudCBzZXR0aW5ncy5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRp ZiAvKiBOT1NIT1cgKi8KKworI2lmbmRlZiBOT0hFTFAKKyAgICAgICAgICAgICAgICBwcmludGYo CisiIC4gSEVMUCBTRVQgTU9ERU0sIEhFTFAgU0VUIERJQUwsIGFuZCBIRUxQIERJQUwgZm9yIG1v cmUgaW5mb3JtYXRpb24uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyog Tk9IRUxQICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCIoVXNlIFNFVCBISU5UUyBPRkYgdG8g c3VwcHJlc3MgZnV0dXJlIGhpbnRzLilcbiIpOworICAgICAgICAgICAgICAgIHByaW50ZigiKioq KioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBO T0hJTlRTICovCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MpOworfQorI2Vu ZGlmIC8qIE5PRElBTCAqLworCisvKiAgRCBPIFQgWSBQIEUgIC0tICBUeXBlIChkaXNwbGF5KSBh IGZpbGUgd2l0aCB2YXJpb3VzIG9wdGlvbnMuLi4gICovCisKKyNpZmRlZiBCSUdCVUZPSworI2Rl ZmluZSBUWVBCVUZMIDE2Mzg0CisjZWxzZQorI2RlZmluZSBUWVBCVUZMIDI1NgorI2VuZGlmIC8q IEJJR0JVRk9LICovCisKK2ludCB0eXBfbGluZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAv KiBcdih0eV9sbikgKi8KK2ludCB0eXBfbXRjaHMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAv KiBcdih0eV9sbSkgKi8KK3N0YXRpYyBpbnQgdHlwX2ludCA9IDA7ICAgICAgICAgICAgICAgICAv KiBGbGFnIGlmIFRZUEUgaW50ZXJydXB0ZWQgKi8KKworI2lmZGVmIFVOSUNPREUKK2V4dGVybiBp bnQgZmNoYXJzZXQsIGZpbGVvcmRlciwgYnl0ZW9yZGVyLCB1Y3NvcmRlcjsKKyNkZWZpbmUgVFlQ WEJVRkwgVFlQQlVGTCtUWVBCVUZMK1RZUEJVRkwrNAorc3RhdGljIGNoYXIgKiBtcCA9IE5VTEw7 CitzdGF0aWMgY2hhciAqIG1idWYgPSBOVUxMOworc3RhdGljIGxvbmcgeG4gPSAwTDsKKworc3Rh dGljIGludAorI2lmZGVmIENLX0FOU0lDCitzdG9yZWNoYXIoY2hhciBjKQorI2Vsc2UKK3N0b3Jl Y2hhcihjKSBjaGFyIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBpZiAoIW1wKSBy ZXR1cm4oLTEpOworICAgIGlmICgrK3huID4gVFlQWEJVRkwpCisgICAgICByZXR1cm4oLTEpOwor ICAgIGRlYnVnKEYxMTEsInN0b3JlY2hhciB4biIsY2tpdG9hKChpbnQpYykseG4pOworICAgICpt cCsrID0gYzsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCitzdGF0 aWMgRklMRSAqIG9mcCA9IE5VTEw7ICAgICAgICAgICAgICAgLyogRm9yIC9PVVRQVVQ6IGZpbGUg Ki8KKworc3RhdGljIGludAordHlwZWxpbmUoYnVmLGxlbixvdXRjcyxvZnApIGNoYXIgKiBidWY7 IGludCBsZW4sIG91dGNzOyBGSUxFICogb2ZwOyB7CisgICAgcmVnaXN0ZXIgaW50IGk7CisKKyAg ICBkZWJ1ZyhGMDExLCJ0eXBlbGluZSBidWYiLGJ1ZixsZW4pOworICAgIC8qIGRlYnVnKEYxMDEs InR5cGVsaW5lIG91dGNzIiwiIixvdXRjcyk7ICovCisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9M T0NBTAorI2lmZGVmIFVOSUNPREUKKyAgICAvKiBJbiBLOTUgb25seSwgdGhlIGJ1ZmZlciBpcyBn dWFyYW50ZWVkIHRvIGJlIGluIFVDUy0yIGlmIG91dGNzID49IDAuICovCisgICAgLyogTGVuIGlz IGl0cyBsZW5ndGggaW4gYnl0ZXMuICBUaGVyZSBpcyBubyBsaW5lIHRlcm1pbmF0b3IuICovCisg ICAgLyogb3V0Y3MgaXMgdGhlIGZpbGUgY2hhcmFjdGVyLXNldCBudW1iZXIgKEZDX3h4eCkgb2Yg dGhlIHRhcmdldCBzZXQgKi8KKyAgICAvKiB0aGF0IHdhcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIu ICovCisgICAgaWYgKCFpbnNlcnZlciAmJiAhazk1c3Rkb3V0KSB7CisgICAgICAgIGV4dGVybiBp bnQgd2hlcmV4W10sIHdoZXJleVtdOworICAgICAgICBleHRlcm4gdW5zaWduZWQgY2hhciBjb2xv cmNtZDsKKworICAgICAgICBWc2NybldydFVDUzJTdHJBdHQoIFZDTUQsICh1bnNpZ25lZCBzaG9y dCAqKWJ1ZiwgbGVuLzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZXlbVkNNRF0s IHdoZXJleFtWQ01EXSwgJmNvbG9yY21kKTsKKyAgICAgICAgcHJpbnRmKCJcclxuIik7CisgICAg ICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworI2VuZGlmIC8qIE5P TE9DQUwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworLyogSW4gVW5peCwgVk1TLCBldGMsIHRoZSBs aW5lIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvIHRoZSBkZXNpcmVkICAqLworLyogY2hh cmFjdGVyLXNldCwgaWYgb25lIHdhcyBnaXZlbi4gIE9SLi4uIG9uIGFsbCBwbGF0Zm9ybXMsIGlu Y2x1ZGluZyBpbiAqLworLyogSzk1LCB3ZSBkb24ndCBrbm93IHRoZSBjaGFyYWN0ZXIgc2V0LiAg SW4gZWl0aGVyIGNhc2Ugd2UgZHVtcCB0aGUgbGluZSAqLworLyogYnl0ZSBieSBieXRlIGluIGNh c2UgaXQgY29udGFpbnMgTlVMcyAocHJpbnRmKCkgd291bGQgdHJ1bmNhdGUpLiAqLworCisjaWZk ZWYgQ09NTUVOVAorICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgIHB1dGNoYXIo YnVmW2ldKTsKKyNlbHNlCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAg IGlmIChvZnAgPT0gc3Rkb3V0KSB7CisgICAgICAgICAgICBwdXRjaGFyKGJ1ZltpXSk7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXRjKGJ1ZltpXSxvZnApOworICAgICAgICB9Cisg ICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2 ZXIpIHsKKyNpZmRlZiBVTklDT0RFCisgICAgICAgIGlmIChvdXRjcyA9PSBGQ19VQ1MyKSB7Cisg ICAgICAgICAgICBpZiAob2ZwID09IHN0ZG91dCkgeworICAgICAgICAgICAgICAgIHB1dGNoYXIo TlVMKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHV0YyhOVUwsb2Zw KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAg ICAgaWYgKG9mcCA9PSBzdGRvdXQpIHsKKyAgICAgICAgICAgIHB1dGNoYXIoJ1xyJyk7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXRjKCdccicsb2ZwKTsKKyAgICAgICAgfQorICAg IH0KKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgVU5JQ09ERQorICAgIGlmIChvdXRjcyA9PSBG Q19VQ1MyKSB7CisgICAgICAgIGlmIChvZnAgPT0gc3Rkb3V0KSB7CisgICAgICAgICAgICBwdXRj aGFyKE5VTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXRjKE5VTCxvZnApOwor ICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICBpZiAob2ZwID09IHN0 ZG91dCkgeworICAgICAgICBwdXRjaGFyKCdcbicpOworICAgIH0gZWxzZSB7CisgICAgICAgIHB1 dGMoJ1xuJyxvZnApOworICAgIH0KKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICByZXR1cm4oMCk7 Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgdHJh bnNsYXRlZCBsaW5lICovCit0eXBlZ2V0bGluZShpbmNzLCBvdXRjcywgYnVmLCBuKSBpbnQgaW5j cywgb3V0Y3MsIG47IGNoYXIgKiBidWY7IHsKKyAgICBpbnQgeCA9IDAsIGMwLCBjMSwgbGVuID0g MCwgY291bnQgPSAwLCBlb2YgPSAwLCB4bGF0ZSA9IDA7CisjaWZkZWYgVU5JQ09ERQorICAgIGlu dCB4eG4gPSAtMTsKKyAgICBpbnQgeXluID0gLTk7CisgICAgeG4gPSAwTDsKKworI2lmZGVmIERF QlVHCisgICAgaWYgKGRlYmxvZyAmJiB0eXBfbGluZXMgPT0gMCkgeworICAgICAgICBkZWJ1ZyhG MTAxLCJ0eXBlZ2V0bGluZSBpbmNzIiwiIixpbmNzKTsKKyAgICAgICAgZGVidWcoRjEwMSwidHlw ZWdldGxpbmUgb3V0Y3MiLCIiLG91dGNzKTsKKyAgICAgICAgZGVidWcoRjEwMSwidHlwZWdldGxp bmUgZmVvbCIsIiIsZmVvbCk7CisgICAgICAgIGRlYnVnKEYxMDEsInR5cGVnZXRsaW5lIGJ5dGVv cmRlciIsIiIsYnl0ZW9yZGVyKTsKKyAgICAgICAgZGVidWcoRjEwMSwidHlwZWdldGxpbmUgdWNz b3JkZXIgIiwiIix1Y3NvcmRlcik7CisgICAgICAgIGRlYnVnKEYxMTEsInR5cGVnZXRsaW5lIGZp bGVvcmRlciIsIjEiLGZpbGVvcmRlcik7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyAg ICBpZiAoaW5jcyA8IDApICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG91bGRuJ3QgaGFwcGVu ICovCisgICAgICByZXR1cm4oLTIpOworCisgICAgaWYgKG91dGNzID09IC0xKSAgICAgICAgICAg ICAgICAgICAgLyogQ2FuIGhhcHBlbiAqLworICAgICAgb3V0Y3MgPSBpbmNzOworCisgICAgaWYg KGluY3MgIT0gb3V0Y3MgfHwgaW5jcyA9PSBGQ19VQ1MyKSB7IC8qIFNlZSBpZiB3ZSBzaG91bGQg dHJhbnNsYXRlICovCisgICAgICAgIHhsYXRlID0gMTsKKyAgICAgICAgaWYgKCFtYnVmKSB7ICAg ICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBidWZmZXIgaWYgbm90IGFsbG9jYXRlZCAqLwor ICAgICAgICAgICAgbWJ1ZiA9IChjaGFyICopbWFsbG9jKFRZUFhCVUZMKzEpOyAvKiB5ZXQgKi8K KyAgICAgICAgICAgIGlmICghbWJ1ZikgeworICAgICAgICAgICAgICAgIHByaW50ZigiV0FSTklO RzogVHJhbnNsYXRpb24gYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZS5cbiIpOworICAgICAgICAg ICAgICAgIHByaW50ZigiVHJhbnNsYXRpb24gd2lsbCBiZSBza2lwcGVkLi4uXG4iKTsKKyAgICAg ICAgICAgICAgICB4bGF0ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg ICAgaWYgKHhsYXRlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNsYXRpbmcuLi4g Ki8KKyAgICAgICAgbXAgPSBtYnVmOyAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB3b3Jr aW5nIGJ1ZmZlciBwb2ludGVyICovCisvKgorICBIZXJlIHdlIGNhbGwgeGduYnl0ZSgpIGluIGEg bG9vcCwgaGF2aW5nIGl0IHJldHVybiBVQ1MtMiBieXRlcy4gIEluIEs5NSwgd2UKKyAgdXNlIFVD Uy0yIGRpcmVjdGx5LiAgRWxzZXdoZXJlLCB3ZSBmZWVkIHRoZSBVQ1MtMiBieXRlcyBpbnRvIHhw bmJ5dGUoKSB0bworICBjb252ZXJ0IHRoZW0gdG8gdGhlIGRlc2lyZWQgdGFyZ2V0IGNoYXJhY3Rl ciBzZXQuICBCdXQgc2luY2Ugd2UgYXJlIHVzaW5nCisgIFVDUy0yLCB3ZSBoYXZlIHNldmVyYWwg c291cmNlcyBmb3IgY29uZnVzaW9uOiAoMSkgeGduYnl0ZSgpIG1pZ2h0IHJldHVybiBpbgorICBM RSBvciBCRSBieXRlIG9yZGVyLCB3aXRoIG5vIGV4cGxpY2l0IGluZGljYXRpb24gb2Ygd2hhdCB0 aGUgb3JkZXIgaXM7IGJ1dAorICAoMikgeHBuYnl0ZSgpIHdhbnRzIEJFOyBidXQgKDMpIFdpbmRv d3Mgd2FudHMgTEUuCisqLworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgaWYgKHR5 cF9pbnQpICAgICAgICAgICAgICAgIC8qIFF1aXQgaWYgaW50ZXJydXB0ZWQgKi8KKyAgICAgICAg ICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgYzAgPSB4Z25ieXRlKEZDX1VDUzIsaW5jcyxO VUxMKTsgLyogQ29udmVydCB0byBVQ1MtMiAqLworICAgICAgICAgICAgZGVidWcoRjAwMCwidHlw ZWdldGxpbmUgYzAiLCIiLGMwKTsKKyAgICAgICAgICAgIGlmIChjMCA8IDApIHsgICAgICAgICAg ICAgICAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICBlb2YrKzsKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGMxID0geGduYnl0ZShGQ19VQ1MyLGlu Y3MsTlVMTCk7IC8qIENvbnZlcnQgdG8gVUNTLTIgKi8KKyAgICAgICAgICAgIGRlYnVnKEYwMDAs InR5cGVnZXRsaW5lIGMxIiwiIixjMSk7CisgICAgICAgICAgICBpZiAoYzEgPCAwKSB7ICAgICAg ICAgICAgICAgLyogRU9GICovCisgICAgICAgICAgICAgICAgZW9mKys7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisjaWZkZWYgREVCVUcKKyAgICAgICAgICAgIGlmIChk ZWJsb2cgJiYgdHlwX2xpbmVzID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0g MCkgLyogQ2hlY2sgZmlsZW9yZGVyIGFmdGVyIEJPTSAqLworICAgICAgICAgICAgICAgICAgZGVi dWcoRjExMSwidHlwZWdldGxpbmUgZmlsZW9yZGVyIiwiMiIsZmlsZW9yZGVyKTsKKyAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgQ09NTUVOVAorLyogTm93IHdlIGhh dmUgdGhlIHR3byBVQ1MtMiBieXRlcy4gIFdoaWNoIG9yZGVyIGFyZSB0aGV5IGluPyAqLworCisg ICAgICAgICAgICBpZiAoZmlsZW9yZGVyID4gMCkgeyAgICAgICAgLyogTGl0dGxlIEVuZGlhbiAq LworICAgICAgICAgICAgICAgIGludCB0OyAgICAgICAgICAgICAgICAgIC8qIFNvIHN3YXAgdGhl bSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDAsInR5cGVnZXRsaW5lIHN3YXBwaW5nIiwi IiwwKTsKKyAgICAgICAgICAgICAgICB0ID0gYzE7CisgICAgICAgICAgICAgICAgYzEgPSBjMDsK KyAgICAgICAgICAgICAgICBjMCA9IHQ7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICAgICAgaWYgKGMwID09IDAgJiYgYzEgPT0gMHgwRCkgIC8qIE5vdyBzZWUg aWYgd2UgaGF2ZSBFT0wgKi8KKyAgICAgICAgICAgICAgeXluID0geG47CisKKyAgICAgICAgICAg IGlmIChjMCA9PSAwICYmIGMxID09IDB4MEEpICAvKiBOb3cgc2VlIGlmIHdlIGhhdmUgRU9MICov CisgICAgICAgICAgICAgIHh4biA9IHhuOworCisgICAgICAgICAgICBjb3VudCsrOyAgICAgICAg ICAgICAgICAgICAgLyogQ291bnQgYnl0ZSAqLworCisvKiBHaXZlIHRoZSB0d28gYnl0ZXMgdG8g eHBuYnl0ZSgpIGluIEJFIG9yZGVyICovCisKKyAgICAgICAgICAgIGlmICgoeCA9IHhwbmJ5dGUo YzAsVENfVUNTMixvdXRjcyxzdG9yZWNoYXIpKSA8IDApIHJldHVybigtMSk7CisgICAgICAgICAg ICBpZiAoKHggPSB4cG5ieXRlKGMxLFRDX1VDUzIsb3V0Y3Msc3RvcmVjaGFyKSkgPCAwKSByZXR1 cm4oLTEpOworCisgICAgICAgICAgICBpZiAoeHhuID4gLTEpIHsgICAgICAgICAgICAgLyogSGF2 ZSBlbmQgb2YgbGluZT8gKi8KKyAgICAgICAgICAgICAgICB4biA9IHh4bjsKKyAgICAgICAgICAg ICAgICBpZiAoeXluID09IHh4biAtIDIpICAgICAvKiBBZGp1c3QgZm9yIENSTEYgKi8KKyAgICAg ICAgICAgICAgICAgIHhuID0geXluOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg ICAgICAgIC8qIEFuZCBicmVhayBvdXQgb2YgbG9vcC4gKi8KKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBtYnVmW3huXSA9IE5VTDsKKyAgICAgICAgaWYgKHhuID4gbikgICAgICAg ICAgICAgICAgICAgICAvKiBDYW4gdHJ1bmNhdGUgaGVyZS4uLiAqLworICAgICAgICAgIHhuID0g bjsKKyAgICAgICAgbWVtY3B5KGJ1ZixtYnVmLHhuKTsKKyAgICAgICAgZGVidWcoRjAxMSwidHlw ZWdldGxpbmUgeGxhdGUiLGJ1Zix4bik7CisgICAgICAgIHJldHVybigoZW9mICYmICh4biA9PSAw KSkgPyAtMSA6IHhuKTsKKyAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworI2lmZGVmIENPTU1F TlQKKyAgICAvKiBXZSBjYW4ndCB1c2UgdGhpcyBiZWNhdXNlLCBzdHVwaWRseSwgenNpbmwoKSBk b2Vzbid0IHJldHVybiBhIGxlbmd0aC4gKi8KKyAgICAvKiBJdCBjb3VsZCBiZSBjaGFuZ2VkIGJ1 dCB0aGVuIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgYWxsIGNrP2Zpby5jIG1vZHVsZXMgKi8KKyAgICB4 ID0genNpbmwoWklGSUxFLGJ1ZixuKTsKKyNlbHNlCisgICAgLyogU28gaW5zdGVhZCwgd2UgY29w eSB6c2lubCgpIHRvIGhlcmUuLi4gKi8KKyAgICAvKiBCdXQgbm90ZTogVGhpcyBkb2VzIG5vdCBu ZWNlc3NhcmlseSBoYW5kbGUgVUNTLTIgYWxpZ25tZW50IHByb3Blcmx5OyAgKi8KKyAgICAvKiB0 aGF0J3Mgd2hhdCB0aGUgY29kZSBpbiB0aGUgZmlyc3Qgc2VjdGlvbiBvZiB0aGlzIHJvdXRpbmUg aXMgZm9yLiAqLworICAgIC8qIEJ1dCBpdCBkb2VzIHRvbGVyYXRlIGZpbGVzIHRoYXQgY29udGFp biBOVUxzLiAqLworICAgIHsKKyAgICAgICAgaW50IGE7CisgICAgICAgIGNoYXIgKnM7CisKKyAg ICAgICAgcyA9IGJ1ZjsKKyAgICAgICAgYSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBDdXJyZW50IGNoYXJhY3Rlciwgbm9uZSB5ZXQuICovCisgICAgICAgIGRlYnVnKEYxMDEsInR5 cGVnZXRsaW5lIHpzaW5sIHNpbXVsYXRpb24iLCIiLG4pOworICAgICAgICB3aGlsZSAobi0tKSB7 ICAgICAgICAgICAgICAgICAgIC8qIFVwIHRvIGdpdmVuIGxlbmd0aCAqLworI2lmZGVmIENPTU1F TlQKKyAgICAgICAgICAgIGludCBvbGQgPSAwOworICAgICAgICAgICAgaWYgKGZlb2wpICAgICAg ICAgICAgICAgICAgIC8qIFByZXZpb3VzIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICBvbGQg PSBhOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGlmICh6Y2hpbihaSUZJTEUs JmEpIDwgMCkgeyAvKiBSZWFkIGEgY2hhcmFjdGVyIGZyb20gdGhlIGZpbGUgKi8KKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJ0eXBlZ2V0bGluZSB6Y2hpbiBmYWlsIiwiIixjb3VudCk7Cisg ICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApCisgICAgICAgICAgICAgICAgICB4ID0gLTE7 ICAgICAgICAgICAgICAgLyogRU9GIG9yIG90aGVyIGVycm9yICovCisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAg ICAgICAgIGlmIChmZW9sKSB7ICAgICAgICAgICAgICAgICAvKiBTaW5nbGUtY2hhcmFjdGVyIGxp bmUgdGVybWluYXRvciAqLworICAgICAgICAgICAgICAgIGlmIChhID09IGZlb2wpCisgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAvKiBDUkxGIGxpbmUgdGVybWluYXRvciAqLworI2lmZGVmIENPTU1FTlQKKy8qIERlYnVnIGxv ZyBzaG93cyB0aGF0IGluIFdpbmRvd3MsIDxDUj48TEY+IGlzIHJldHVybmVkIGFzIDxMRj4uICov CisvKiBBcHBhcmVudGx5IHdlJ3JlIG5vdCByZWFkaW5nIHRoZSBmaWxlIGluIGJpbmFyeSBtb2Rl LiAqLworCisgICAgICAgICAgICAgICAgaWYgKGEgPT0gJ1wwMTUnKSAgICAgICAgLyogQ1IsIGdl dCBuZXh0IGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg ICAgICAgICAgaWYgKG9sZCA9PSAnXDAxNScpIHsgICAgLyogUHJldmlvdXMgY2hhcmFjdGVyIHdh cyBDUiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PSAnXDAxMicpIHsgIC8qIFRoaXMg b25lIGlzIExGLCBzbyB3ZSBoYXZlIGEgbGluZSAqLworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyogTm90IExG LCBkZXBvc2l0IENSICovCisgICAgICAgICAgICAgICAgICAgICAgICAqcysrID0gJ1wwMTUnOwor ICAgICAgICAgICAgICAgICAgICAgICAgbi0tOworICAgICAgICAgICAgICAgICAgICAgICAgbGVu Kys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZWxzZQorICAg ICAgICAgICAgICAgIGlmIChhID09IExGKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzW2xl bl0gPT0gQ1IpIHsgLyogVGhpcyBwcm9iYWJseSB3b24ndCBoYXBwZW4gKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtLTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcyA9IGE7ICAgICAgICAgICAg ICAgICAgICAgLyogRGVwb3NpdCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIHMrKzsKKyAgICAg ICAgICAgIGxlbisrOworICAgICAgICB9CisgICAgICAgICpzID0gJ1wwJzsgICAgICAgICAgICAg ICAgICAgICAgLyogVGVybWluYXRlIHRoZSBzdHJpbmcgKi8KKyAgICB9CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgIHJldHVybih4IDwgMCA/IC0xIDogbGVuKTsKK30KKworCisjaWZuZGVmIE1B QworU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK3R5dHJhcChpbnQgZm9vKSAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUWVBFIGludGVycnVwdCB0cmFwICovCisjZWxzZQordHl0cmFwKGZvbykg aW50IGZvbzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdHl0cmFwICovIHsKKyNpZmRlZiBf X0VNWF9fCisgICAgc2lnbmFsKFNJR0lOVCwgU0lHX0FDSyk7CisjZW5kaWYKKyAgICBkZWJ1ZyhG MTAwLCJ0eXBlIHR5dHJhcCBTSUdJTlQiLCIiLDApOworICAgIHR5cF9pbnQgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIChOZWVkIGFyZyBmb3IgQU5TSSBDKSAqLworICAgIFNJR1JFVFVS TjsKK30KKyNlbmRpZiAvKiBNQUMgKi8KKworaW50Citkb3R5cGUoZmlsZSwgcGFnaW5nLCBmaXJz dCwgaGVhZCwgcGF0LCB3aWR0aCwgcHJlZml4LCBpbmNzLCBvdXRjcywgb3V0ZmlsZSwgeikKKyAg ICBjaGFyICogZmlsZSwgKiBwYXQsICogcHJlZml4OyBpbnQgcGFnaW5nLCBmaXJzdCwgaGVhZCwg d2lkdGgsIGluY3MsIG91dGNzOworICAgIGNoYXIgKiBvdXRmaWxlOyBpbnQgejsKKy8qIGRvdHlw ZSAqLyB7CisgICAgZXh0ZXJuIENLX09GRl9UIGZmYzsKKyAgICBjaGFyIGJ1ZltUWVBCVUZMKzJd OworICAgIGNoYXIgKiBzID0gTlVMTDsKKyAgICBpbnQgcmMgPSAxLCBsaW5lcyA9IDAsIHVjczIg PSAwOworICAgIGNoYXIgKiogdGFpbCA9IE5VTEw7CisgICAgaW50ICogdGxlbiA9IE5VTEw7Cisg ICAgaW50IHRhaWxpbmcgPSAwLCBjb3VudGluZyA9IDA7CisgICAgaW50IHgsIGMsIG4sIGksIGos IGsgPSAwOworICAgIGludCBudW1iZXIgPSAwLCBzYXZlLCBsZW4sIHBmeGxlbiA9IDAsIGV2YWxw ZnggPSAxOworI2lmZGVmIFVOSUNPREUKKyAgICBpbnQgdWNzYm9tX3NhdjsKKyAgICBleHRlcm4g aW50IHVjc2JvbTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisjaWZkZWYgTlQKKyAgICBpbnQgZ3Vp ID0gMDsKKyNlbmRpZiAvKiBOVCAqLworCisjaWZuZGVmIE1BQworI2lmZGVmIE9TMgorI2lmZGVm IE5UCisgICAgU0lHVFlQICgqIG9sZHNpZykoaW50KTsgICAgICAgICAgICAgLyogRm9yIHNhdmlu ZyBvbGQgaW50ZXJydXB0IHRyYXAuICovCisjZWxzZSAvKiBOVCAqLworICAgIFNJR1RZUCAoKiB2 b2xhdGlsZSBvbGRzaWcpKGludCk7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLwor ICAgIFNJR1RZUCAoKiBvbGRzaWcpKCk7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTUFD ICovCisKKyNpZmRlZiBLVUkKKyAgICBpZiAob3V0ZmlsZSA9PSAoY2hhciAqKTEpIHsKKyAgICAg ICAgZ3VpID0gMTsKKyAgICAgICAgb3V0ZmlsZSA9ICIiOworICAgIH0KKyNlbmRpZiAvKiBLVUkg Ki8KKworICAgIGlmICghZmlsZSkgZmlsZSA9ICIiOworICAgIGlmICghKmZpbGUpIHJldHVybigt Mik7CisKKyAgICBpZiAob2ZwICE9IHN0ZG91dCkgeyAgICAgICAgICAgICAgICAvKiBJbiBjYXNl IG9mIHByZXZpb3VzIGludGVycnVwdGlvbiAqLworICAgICAgICBpZiAob2ZwKSBmY2xvc2Uob2Zw KTsKKyAgICAgICAgb2ZwID0gc3Rkb3V0OworICAgIH0KKyAgICBpZiAoIW91dGZpbGUpIG91dGZp bGUgPSAiIjsKKyAgICBpZiAob3V0ZmlsZVswXSkgeworICAgICAgICBvZnAgPSBmb3BlbihvdXRm aWxlLCJ3Iik7ICAgICAgIC8qIE9wZW4gb3V0cHV0IGZpbGUgKi8KKyAgICAgICAgaWYgKCFvZnAp IHsKKyAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IG9wZW4gb3V0cHV0IGZpbGUgJXM6ICVzXG4i LG91dGZpbGUsY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgb2ZwID0gc3Rkb3V0OworICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBudW1iZXIgPSB6OworICAg IGlmIChudW1iZXIgJiYgcHJlZml4KSBwcmVmaXggPSBOVUxMOworCisjaWZkZWYgVU5JQ09ERQor ICAgIHVjc2JvbV9zYXYgPSB1Y3Nib207ICAgICAgICAgICAgICAgIC8qIFdlIGFyZSBub3QgY3Jl YXRpbmcgYSBmaWxlICovCisgICAgdWNzYm9tID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg LyogRG8gbm90IHVzZSBCT00gYnl0ZXMgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyAgICB0 eXBfaW50ID0gMDsKKworICAgIHNhdmUgPSBiaW5hcnk7ICAgICAgICAgICAgICAgICAgICAgIC8q IFNhdmUgZmlsZSB0eXBlICovCisKKyAgICBkZWJ1ZyhGMTAxLCJkb3R5cGUgaW5jcyIsIiIsaW5j cyk7CisgICAgZGVidWcoRjEwMSwiZG90eXBlIG91dGNzIiwiIixvdXRjcyk7CisKKyNpZmRlZiBV TklDT0RFCisgICAgZGVidWcoRjExMSwiZG90eXBlIGZpbGVvcmRlciIsIkEiLGZpbGVvcmRlcik7 CisjaWZkZWYgT1MyCisgICAgaWYgKCFpbnNlcnZlciAmJiAhazk1c3Rkb3V0KQorICAgICAgb3V0 Y3MgPSBGQ19VQ1MyOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKG91dGNzID09IEZDX1VD UzIpICAgICAgICAgICAgICAgLyogT3V0cHV0IGlzIFVDUy0yPyAqLworICAgICAgdWNzMiA9IDE7 CisgICAgaWYgKGZpbGVvcmRlciA8IDApCisgICAgICBmaWxlb3JkZXIgPSB1Y3NvcmRlcjsKKyAg ICBkZWJ1ZyhGMTExLCJkb3R5cGUgZmlsZW9yZGVyIiwiQiIsZmlsZW9yZGVyKTsKKyNlbmRpZiAv KiBVTklDT0RFICovCisKKyNpZmRlZiBDS19UVEdXU0laCisjaWZkZWYgT1MyCisgICAgdHRnY3dz eigpOworI2Vsc2UgLyogT1MyICovCisgICAgLyogQ2hlY2sgd2hldGhlciB3aW5kb3cgc2l6ZSBj aGFuZ2VkICovCisgICAgaWYgKHR0Z3dzaXooKSA+IDApIHsKKyAgICAgICAgaWYgKHR0X3Jvd3Mg PiAwICYmIHR0X2NvbHMgPiAwKSB7CisgICAgICAgICAgICBjbWRfcm93cyA9IHR0X3Jvd3M7Cisg ICAgICAgICAgICBjbWRfY29scyA9IHR0X2NvbHM7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJk b3R5cGUgY21kX3Jvd3MiLCIiLGNtZF9yb3dzKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRv dHlwZSBjbWRfY29scyIsIiIsY21kX2NvbHMpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAgIGlmIChwcmVmaXgpCisgICAg ICBwZnhsZW4gPSBzdHJsZW4ocHJlZml4KTsKKworICAgIGlmIChwYWdpbmcgPCAwKSB7ICAgICAg ICAgICAgICAgICAgIC8qIENvdW50IG9ubHksIGRvbid0IHByaW50ICovCisgICAgICAgIGNvdW50 aW5nID0gMTsKKyAgICAgICAgcHJlZml4ID0gTlVMTDsKKyAgICAgICAgd2lkdGggPSAwOworICAg ICAgICBwYWdpbmcgPSAwOworICAgIH0KKyAgICBpZiAodWNzMikgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBDcnVkZS4uLiAqLworICAgICAgd2lkdGggKj0gMjsKKworI2lmZGVmIE9TMgor ICAgIGlmICgqZmlsZSkgeworICAgICAgICBja3N0cm5jcHkoYnVmLCBmaWxlLCBUWVBCVUZMKTsg IC8qIENoYW5nZSAvIHRvIFwuICovCisgICAgICAgIHAgPSBidWY7CisgICAgICAgIHdoaWxlICgq cCkgeworICAgICAgICAgICAgaWYgKCpwID09ICcvJykgKnAgPSAnXFwnOworICAgICAgICAgICAg cCsrOworICAgICAgICB9CisgICAgICAgIGZpbGUgPSBidWY7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgcmMgPSAwOworICAgICAgICBnb3RvIHhkb3R5cGU7CisgICAgfQorI2VuZGlmIC8qIE9TMiAq LworCisgICAgaWYgKHpjaGtpKGZpbGUpID09IC0yKSB7ICAgICAgICAgICAgLyogSXQncyBhIGRp cmVjdG9yeSAqLworICAgICAgICBkZWJ1ZyhGMTExLCJkb3R5cGUgemNoa2kgZmFpbHVyZSIsZmls ZSwtMik7CisgICAgICAgIGlmICh4Y21kc3JjID09IDApIHsKKyAgICAgICAgICAgIHByaW50Zigi P05vdCBhIHJlZ3VsYXIgZmlsZTogXCIlc1wiXG4iLGZpbGUpOworICAgICAgICAgICAgcmMgPSAt OTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmMgPSAwOworICAgICAgICBnb3RvIHhkb3R5 cGU7CisgICAgfQorICAgIGlmICghem9wZW5pKFpJRklMRSwgZmlsZSkpIHsgICAgICAgIC8qIE5v dCBhIGRpcmVjdG9yeSwgb3BlbiBpdCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJkb3R5cGUgem9w ZW5pIGZhaWx1cmUiLGZpbGUsMCk7CisgICAgICAgIGlmICh4Y21kc3JjID09IDApIHsKKyAgICAg ICAgICAgIHByaW50ZigiP0Nhbid0IG9wZW4gZmlsZTogXCIlc1wiXG4iLGZpbGUpOworICAgICAg ICAgICAgcmMgPSAtOTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmMgPSAwOworICAgICAg ICBnb3RvIHhkb3R5cGU7CisgICAgfQorCisjaWZuZGVmIEFNSUdBCisjaWZuZGVmIE1BQworICAg IGVycm5vID0gMDsKKyAgICBvbGRzaWcgPSBzaWduYWwoU0lHSU5ULCB0eXRyYXApOyAgICAvKiBT YXZlIGN1cnJlbnQgaW50ZXJydXB0IHRyYXAuICovCisgICAgLyogZGVidWcoRjExMSwidHlwZSBT SUdJTlQgdHJhcCBzZXQiLGNraXRvYShlcnJubyksb2xkc2lnKTsgKi8KKyNlbmRpZiAvKiBNQUMg Ki8KKyNlbmRpZiAvKiBBTUlHQSAqLworCisgICAgaWYgKHBhZ2luZyA+IC0xKSAgICAgICAgICAg ICAgICAgICAgLyogTW9yZS1wcm9tcHRpbmcgKi8KKyAgICAgIHhhc2ttb3JlID0gcGFnaW5nOwor CisgICAgYmluYXJ5ID0gMDsKKworICAgIGlmIChoZWFkIDwgMCkgeyAgICAgICAgICAgICAgICAg ICAgIC8qICJ0YWlsIiB3YXMgcmVxdWVzdGVkICovCisgICAgICAgIHRhaWxpbmcgPSAxOyAgICAg ICAgICAgICAgICAgICAgLyogU2V0IGZsYWcgKi8KKyAgICAgICAgaGVhZCA9IDAgLSBoZWFkOyAg ICAgICAgICAgICAgICAvKiBHZXQgYWJzb2x1dGUgbnVtYmVyIG9mIGxpbmVzICovCisgICAgICAg IGlmICghY291bnRpbmcpIHsKKyAgICAgICAgICAgIHRhaWwgPSAoY2hhciAqKikgbWFsbG9jKGhl YWQgKiBzaXplb2YoY2hhciAqKSk7IC8qIEFsbG9jYXRlIGxpc3QgKi8KKyAgICAgICAgICAgIGlm ICghdGFpbCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZh aWx1cmVcbiIpOworICAgICAgICAgICAgICAgIGdvdG8geGRvdHlwZTsKKworICAgICAgICAgICAg fQorICAgICAgICAgICAgdGxlbiA9IChpbnQgKikgbWFsbG9jKGhlYWQgKiBzaXplb2YoaW50KSk7 CisgICAgICAgICAgICBpZiAoIXRsZW4pIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9NZW1v cnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIHhkb3R5cGU7 CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWFkOyBpKysp IHsgLyogSW5pdGlhbGl6ZSBlYWNoIHBvaW50ZXIgaW4gbGlzdC4gKi8KKyAgICAgICAgICAgICAg ICB0YWlsW2ldID0gTlVMTDsKKyAgICAgICAgICAgICAgICB0bGVuW2ldID0gMDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB0eXBfbGluZXMgPSAwOworICAgIHR5cF9tdGNo cyA9IDA7CisKKyNpZmRlZiBVTklDT0RFCisgICAgaWYgKG91dGNzID4gLTEgJiYgKGluY3MgIT0g b3V0Y3MgfHwgaW5jcyA9PSBGQ19VQ1MyKSkgeyAvKiBUcmFuc2xhdGluZz8gKi8KKyAgICAgICAg ZmZjID0gKENLX09GRl9UKTA7CisgICAgICAgIGluaXR4bGF0ZShpbmNzLG91dGNzKTsgICAgICAg ICAgLyogU2V0IHVwIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyAqLworICAgIH0gZWxzZQorI2VuZGlm IC8qIFVOSUNPREUgKi8KKyAgICAgIG91dGNzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAv KiBNZWFucyB3ZSBkb24ndCBrbm93IHRoZSBjaGFyc2V0ICovCisKKyAgICBkZWJ1ZyhGMTAxLCJk b3R5cGUgZmZjIiwiIixmZmMpOworICAgIGRlYnVnKEYxMDEsImRvdHlwZSBvdXRjcyAyIiwiIixv dXRjcyk7CisjaWZkZWYgVU5JQ09ERQorICAgIGRlYnVnKEYxMTEsImRvdHlwZSBmaWxlb3JkZXIi LCJDIixmaWxlb3JkZXIpOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworICAgIC8qIEFsbG93IHRo ZSBidWZmZXIgdG8gY29udGFpbiBOVUxzICovCisKKyAgICBmb3IgKG4gPSBmaXJzdDsKKyAgICAg ICAgIChsZW4gPSB0eXBlZ2V0bGluZShpbmNzLG91dGNzLGJ1ZixUWVBCVUZMKSkgPiAtMTsKKyAg ICAgICAgIGxpbmVzKysKKyAgICAgICAgICkgeworICAgICAgICBkZWJ1ZyhGMDExLCJkb3R5cGUg bGluZSIsYnVmLGxlbik7CisjaWZuZGVmIE1BQworICAgICAgICBpZiAodHlwX2ludCkgeyAgICAg ICAgICAgICAgICAgIC8qIEludGVycnVwdGVkPyAqLworICAgICAgICAgICAgdHlwX2ludCA9IDA7 CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ0eXBlIGludGVycnVwdGVkIGxpbmUiLCIiLGxpbmVz KTsKKyAgICAgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAvKiBQcmludCBtZXNz YWdlICovCisgICAgICAgICAgICBpZiAob2ZwICE9IHN0ZG91dCkgeyAgICAgICAgLyogQ2xvc2Ug YW55IG91dHB1dCBmaWxlICovCisgICAgICAgICAgICAgICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7 CisgICAgICAgICAgICAgICAgb2ZwID0gc3Rkb3V0OworICAgICAgICAgICAgfQorICAgICAgICAg ICAgZ290byB4eGRvdHlwZTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1BQyAqLworICAgICAgICB0 eXBfbGluZXMrKzsgICAgICAgICAgICAgICAgICAgIC8qIEZvciBcdih0eV9sbikgKi8KKyAgICAg ICAgaWYgKHBhdCkgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXRjaGluZz8gKi8KKyAgICAg ICAgICBpZiAoIWNrbWF0Y2gocGF0LGJ1ZiwxLDErNCkpICAvKiBMaW5lIG1hdGNoZXMgcGF0dGVy bj8gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAvKiBObywgc2tp cCBpdCAqLworICAgICAgICB0eXBfbXRjaHMrKzsKKworICAgICAgICBpZiAoaGVhZCA+IDAgJiYg IXRhaWxpbmcgJiYgbGluZXMgPT0gaGVhZCkgLyogSGFuZGxlIC9IRUFEOm4gKi8KKyAgICAgICAg ICBicmVhazsKKworICAgICAgICBidWZbVFlQQlVGTCsxXSA9IE5VTDsgICAgICAgICAgIC8qIEp1 c3QgaW4gY2FzZS4uLiAqLworICAgICAgICBpZiAocHJlZml4KSB7ICAgICAgICAgICAgICAgICAg IC8qIEFkZCBzcGVjaWZpZWQgcHJlZml4IHRvIGVhY2ggbGluZSAqLworICAgICAgICAgICAgY2hh ciBwYnVmWzY0XTsKKyAgICAgICAgICAgIGNoYXIgKiBwcDsKKyAgICAgICAgICAgIHBwID0gcHJl Zml4OworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgaWYgKGV2YWxwZngpIHsgICAgICAgICAg ICAgIC8qIFByZWZpeCBpcyBhIHZhcmlhYmxlPyAqLworICAgICAgICAgICAgICAgIGludCBuID0g NjM7ICAgICAgICAgICAgIC8qIE1heWJlIC0gZXZhbHVhdGUgaXQgYW5kIHNlZSAqLworICAgICAg ICAgICAgICAgIGNoYXIgKiBwID0gcGJ1ZjsKKyAgICAgICAgICAgICAgICB6enN0cmluZyhwcmVm aXgsJnAsJm4pOyAvKiBJZiB0aGVyZSBpcyBubyBjaGFuZ2UgKi8KKyAgICAgICAgICAgICAgICBp ZiAoIXN0cmNtcChwcmVmaXgscGJ1ZikpIHsgLyogaXQncyBub3QgYSB2YXJpYWJsZSAqLworICAg ICAgICAgICAgICAgICAgICBldmFscGZ4ID0gMDsgICAgICAgIC8qIFNvIGRvbid0IGRvIHRoaXMg YWdhaW4uICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgLyogSXQg d2FzIGEgdmFyaWFibGUgKi8KKyAgICAgICAgICAgICAgICAgICAgcHAgPSBwYnVmOyAgICAgICAg ICAvKiBTbyBzdWJzdGl0dXRlIGl0cyB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICBwZnhs ZW4gPSA2MyAtIG47ICAgIC8qIGFuZCBnZXQgaXRzIG5ldyBsZW5ndGggKi8KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgIGlm IChsZW4gKyBwZnhsZW4gKyAyIDwgVFlQQlVGTCkgeworICAgICAgICAgICAgICAgIC8qIFNoaWZ0 IHJpZ2h0IHRvIG1ha2Ugcm9vbSBmb3IgcHJlZml4ICovCisgICAgICAgICAgICAgICAgbWVtY3B5 KChjaGFyICopbGluZStwZnhsZW4sKGNoYXIgKilidWYsbGVuKTsKKyAgICAgICAgICAgICAgICBs c2V0KChjaGFyICopbGluZSxwcCxwZnhsZW4sU1ApOworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTAsImRvdHlwZSBwcmVmaXgiLGxpbmUscGZ4bGVuKTsKKyAgICAgICAgICAgICAgICBsZW4gKz0g cGZ4bGVuOworICAgICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKWJ1ZiwoY2hhciAqKWxpbmUs bGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChudW1iZXIpIHsgICAgICAg ICAgICAvKiBMaW5lIG51bWJlcnMgKi8KKyAgICAgICAgICAgIGludCB4OworICAgICAgICAgICAg c3ByaW50ZihsaW5lLCIlNGQuICIsdHlwX2xpbmVzKTsKKyAgICAgICAgICAgIHggPSBzdHJsZW4o bGluZSk7CisgICAgICAgICAgICBsZW4gKz0geDsKKyAgICAgICAgICAgIGlmIChsZW4gPCBMSU5C VUZTSVopIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKikmbGluZVt4XSwoY2hhciAq KWJ1ZixsZW4pOworICAgICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKWJ1ZiwoY2hhciAqKWxp bmUsbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAod2lkdGggPiAw ICYmIHdpZHRoIDw9IFRZUEJVRkwpIHsgLyogVHJ1bmNhdGUgYXQgZ2l2ZW4gd2lkdGguICovCisg ICAgICAgICAgICBjaGFyICogb2J1ZiA9IGxpbmU7ICAgICAgICAgLyogQnV0IHRvIGRvIHRoYXQg Zmlyc3Qgd2UgbXVzdCAqLworICAgICAgICAgICAgaW50IGksayx6OyAgICAgICAgICAgICAgICAg IC8qIGV4cGFuZCB0YWJzOyBhc3N1bWUgZXZlcnkgOCBjb2xzLiAqLworICAgICAgICAgICAgbGlu ZVswXSA9IE5VTDsKKyAgICAgICAgICAgIGZvciAoaSA9IDAsIGsgPSAwOyBpIDwgd2lkdGg7IGsr KykgeyAvKiBDaGFyYWN0ZXIgbG9vcC4uLiAqLworICAgICAgICAgICAgICAgIGlmICghYnVmW2td KSAgICAgICAgICAgIC8qIE5vIG1vcmUgY2hhcnMgaW4gdGhpcyBsaW5lLCBkb25lLiAqLworICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZltrXSAhPSAnXHQn KSB7ICAgLyogSWYgaXQncyBub3QgYSB0YWIgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGkg Pj0gTElOQlVGU0laKSAvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgb2J1ZltpKytdID0gYnVmW2tdOyAvKiBh bmQgdGhlbiBkZXBvc2l0IGl0LiAqLworICAgICAgICAgICAgICAgICAgICBvYnVmW2ldID0gTlVM OyAgICAgIC8qIEtlZXAgaXQgbnVsbC10ZXJtaW5hdGVkICovCisgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ID0gOCAtIChp ICUgOCk7ICAgICAgICAvKiBJdCdzIGEgdGFiLCBleHBhbmQgaXQuICovCisgICAgICAgICAgICAg ICAgaWYgKHogPT0gMCkgeiA9IDg7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHog JiYgaSA8IExJTkJVRlNJWjsgaisrKSB7CisjaWZkZWYgVU5JQ09ERQorICAgICAgICAgICAgICAg ICAgICBpZiAodWNzMiAmJiAhdWNzb3JkZXIpCisgICAgICAgICAgICAgICAgICAgICAgb2J1Zltp KytdID0gTlVMOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAgICAgICAgICAgICAgICAgb2J1 ZltpKytdID0gJyAnOworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVj czIgJiYgdWNzb3JkZXIpCisgICAgICAgICAgICAgICAgICAgICAgb2J1ZltpKytdID0gTlVMOwor I2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg b2J1ZltpKytdID0gTlVMOworICAgICAgICAgICAgICAgIG9idWZbaV0gPSBOVUw7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBvYnVmW3dpZHRoXSA9IE5VTDsgICAgICAgICAgLyogTm93IHRy dW5jYXRlIGF0IGdpdmVuIHdpZHRoLiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIC8q IFRoaXMgZG9lc24ndCB3b3JrIGZvciBVQ1MtMiBiZWNhdXNlIGl0IGNvbnRhaW5zIE5VTHMgKi8K KyAgICAgICAgICAgIGNrc3RybmNweShidWYsb2J1ZixUWVBCVUZMKTsgLyogYW5kIGNvcHkgaXQg YmFjayAoYWdhaW4/KSAqLworI2Vsc2UKKyAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKWJ1Ziwo Y2hhciAqKW9idWYsaSk7IC8qIENvcHkgaXQgYmFjayAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICAgICAgICAgIGxlbiA9IChpID4gd2lkdGgpID8gd2lkdGggOiBpOyAvKiBTcGFyZSB1cyBh bm90aGVyIHN0cmxlbigpLi4uICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHRhaWxpbmcpIHsg ICAgICAgICAgICAgICAgICAvKiBJZiAvVEFJTDpuLi4uICovCisgICAgICAgICAgICBrID0gbGlu ZXMgJSBoZWFkOyAgICAgICAgICAgLyogc2F2ZSB0aGlzIGxpbmUgaW4gY2lyY3VsYXIgYnVmZmVy ICovCisgICAgICAgICAgICBpZiAoIWNvdW50aW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKHRh aWxba10pIGZyZWUodGFpbFtrXSk7CisgICAgICAgICAgICAgICAgdGFpbFtrXSA9IG1hbGxvYyhs ZW4rMik7CisgICAgICAgICAgICAgICAgaWYgKCF0YWlsW2tdKSB7CisgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworICAgICAgICAgICAg ICAgICAgICBnb3RvIHhkb3R5cGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IG1lbWNweSh0YWlsW2tdLGJ1ZixsZW4pOworICAgICAgICAgICAgICAgIHRsZW5ba10gPSBsZW47 CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgaWYgKGNvdW50aW5nKSAgICAgICAgICAgICAgICAgICAvKiBJZiBvbmx5IGNvdW50aW5n ICovCisgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgLyogd2UncmUgZG9u ZSB3aXRoIHRoaXMgbGluZSAqLworCisgICAgICAgIGlmIChwYWdpbmcpIHsgICAgICAgICAgICAg ICAgICAgLyogRGlzcGxheWluZyB0aGlzIGxpbmUuLi4gKi8KKyAgICAgICAgICAgIGludCB1Owor ICAgICAgICAgICAgdSA9IGxlbjsgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBpbiBCWVRF UyAqLworICAgICAgICAgICAgaWYgKHVjczIpICAgICAgICAgICAgICAgICAgIC8qIElmIG91dHB1 dHRpbmcgaW4gVUNTLTIgKi8KKyAgICAgICAgICAgICAgdSAvPSAyOyAgICAgICAgICAgICAgICAg ICAvKiBjb252ZXJ0IGxlbmd0aCB0byBDSEFSQUNURVJTICovCisgICAgICAgICAgICB4ID0gKHUg LyBjbWRfY29scykgKyAxOyAgICAgLyogQ3J1ZGVseSBhbGxvdyBmb3Igd3JhcCAqLworICAgICAg ICAgICAgaWYgKGNtZF9yb3dzID4gMCAmJiBjbWRfY29scyA+IDApCisgICAgICAgICAgICAgIG4g Kz0geDsgICAgICAgICAgICAgICAgICAgLyogVGhpcyBhc3N1bWVzIHRlcm1pbmFsIHdpbGwgd3Jh cCAqLworICAgICAgICB9CisjaWZkZWYgS1VJCisgICAgICAgIGlmICggZ3VpICkgeworICAgICAg ICAgICAgaW50IGk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqIHVjaCA9ICh1bnNpZ25l ZCBzaG9ydCAqKWJ1ZjsKKyAgICAgICAgICAgIGZvciAoIGk9MDsgaTxsZW4vMjsgaSsrKQorICAg ICAgICAgICAgICAgIGd1aV90ZXh0X3BvcHVwX2FwcGVuZCh1Y2hbaV0pOworCQkJZ3VpX3RleHRf cG9wdXBfYXBwZW5kKENSKTsKKwkJCWd1aV90ZXh0X3BvcHVwX2FwcGVuZChMRik7CisgICAgICAg IH0gCisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgdHlwZWxpbmUoYnVm LGxlbixvdXRjcyxvZnApOyAgICAvKiBQcmludCBsaW5lLCBsZW5ndGggYmFzZWQgKi8KKyNpZmRl ZiBDS19UVEdXU0laCisgICAgICAgIGRlYnVnKEYxMDEsImRvdHlwZSBuIiwiIixuKTsKKyAgICAg ICAgaWYgKHBhZ2luZyA+IDAgJiYgb2ZwID09IHN0ZG91dCkgeyAvKiBQYXVzZSBhdCBlbmQgb2Yg c2NyZWVuICovCisgICAgICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4gMCkg eworICAgICAgICAgICAgICAgIGlmIChuID4gY21kX3Jvd3MgLSAzKSB7CisgICAgICAgICAgICAg ICAgICAgIGlmICghYXNrbW9yZSgpKQorICAgICAgICAgICAgICAgICAgICAgIGdvdG8geGRvdHlw ZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIG4gPSAw OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8q IENLX1RUR1dTSVogKi8KKyAgICB9CisKKyAgeGRvdHlwZToKKyAgICBpZiAoY291bnRpbmcpIHsK KyAgICAgICAgZnByaW50ZihvZnAsCisgICAgICAgICAgICAgICAgIiVzOiAlZCBsaW5lJXNcbiIs ZmlsZSx0eXBfbGluZXMsdHlwX2xpbmVzID09IDEgPyAiIiA6ICJzIik7CisgICAgICAgIGlmIChw YXQpCisgICAgICAgICAgZnByaW50ZihvZnAsCisgICAgICAgICAgICAgICAgICAiJXM6ICVkIG1h dGNoJXNcbiIscGF0LHR5cF9tdGNocyx0eXBfbXRjaHMgPT0gMSA/ICIiIDogImVzIik7CisgICAg ICAgIGdvdG8geHhkb3R5cGU7CisgICAgfQorICAgIGlmICh0YWlsaW5nICYmIHRhaWwpIHsgICAg ICAgICAgICAgIC8qIFR5cGluZyB0YWlsIG9mIGZpbGU/ICovCisgICAgICAgIGlmIChsaW5lcyA8 IGhlYWQpIHsgICAgICAgICAgICAgLyogWWVzLCBzaG93IHRoZSBsaW5lcyB3ZSBzYXZlZCAqLwor ICAgICAgICAgICAgayA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3cgYWxsIGxpbmVz ICovCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogTW9yZSBsaW5l cyB0aGFuIHRhaWwgbnVtYmVyICovCisgICAgICAgICAgICBsaW5lcyA9IGs7ICAgICAgICAgICAg ICAgICAgLyogTGFzdCBsaW5lIHRvIHNob3cgKi8KKyAgICAgICAgICAgIGsrKzsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBGaXJzdCBsaW5lIHRvIHNob3cgKi8KKyAgICAgICAgICAgIGlmIChr ID49IGhlYWQpCisgICAgICAgICAgICAgIGsgPSAwOworICAgICAgICB9CisgICAgICAgIG4gPSBm aXJzdDsgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IGxpbmUgY291bnRlciAqLworICAg ICAgICBmb3IgKGkgPSBrIDs7IGkrKykgeyAgICAgICAgICAgIC8qIExvb3AgdGhydSBjaXJjdWxh ciBidWZmZXIgKi8KKyNpZm5kZWYgTUFDCisgICAgICAgICAgICBpZiAodHlwX2ludCkgeyAgICAg ICAgICAgICAgLyogSW50ZXJydXB0ZWQ/ICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCJeQy4u LlxuIik7ICAgICAgLyogUHJpbnQgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgIGdvdG8geHhk b3R5cGU7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTUFDICovCisgICAgICAgICAgICBqID0g aSAlIGhlYWQ7ICAgICAgICAgICAgICAgLyogSW5kZXggb2YgdGhpcyBsaW5lICovCisgICAgICAg ICAgICBzID0gdGFpbFtqXTsgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gbGluZSB0byBkaXNw bGF5ICovCisgICAgICAgICAgICBpZiAoIXMpICAgICAgICAgICAgICAgICAgICAgLyogKHNob3Vs ZG4ndCBoYXBwZW4uLi4pICovCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg KHBhZ2luZykgeyAgICAgICAgICAgICAgIC8qIENydWRlbHkgYWxsb3cgZm9yIGxpbmUgd3JhcCAq LworICAgICAgICAgICAgICAgIHggPSB0bGVuW2pdOworICAgICAgICAgICAgICAgIGlmICh1Y3My KSB4IC89IDI7CisgICAgICAgICAgICAgICAgeCA9IHggLyBjbWRfY29scyArIDE7CisgICAgICAg ICAgICAgICAgaWYgKGNtZF9yb3dzID4gMCAmJiBjbWRfY29scyA+IDApCisgICAgICAgICAgICAg ICAgICBuICs9IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0eXBlbGluZShzLHRsZW5b al0sb3V0Y3Msb2ZwKTsgLyogRGlzcGxheSB0aGlzIGxpbmUgKi8KKyAgICAgICAgICAgIGlmIChw YWdpbmcgJiYgb2ZwID09IHN0ZG91dCkgeyAvKiBQYXVzZSBhdCBlbmQgb2Ygc2NyZWVuICovCisg ICAgICAgICAgICAgICAgaWYgKGNtZF9yb3dzID4gMCAmJiBjbWRfY29scyA+IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKG4gPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghYXNrbW9yZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg biA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB0YWlsW2pdID0gTlVMTDsKKyAgICAgICAgICAgIGZyZWUocyk7 ICAgICAgICAgICAgICAgICAgICAvKiBGcmVlIHRoZSBsaW5lICovCisgICAgICAgICAgICBpZiAo aSAlIGhlYWQgPT0gbGluZXMpICAgICAgLyogV2hlbiB0byBzdG9wICovCisgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZyZWUoKGNoYXIgKil0YWlsKTsgICAgICAgICAg ICAgLyogRnJlZSB0aGUgbGlzdCAqLworICAgICAgICB0YWlsID0gTlVMTDsKKyAgICAgICAgaWYg KHRsZW4pIGZyZWUoKGNoYXIgKil0bGVuKTsKKyAgICAgICAgdGxlbiA9IE5VTEw7CisgICAgfQor CisvKiBDb21lIGhlcmUgd2hlbiBmaW5pc2hlZCBvciBvbiBTSUdJTlQgKi8KKworICB4eGRvdHlw ZToKKyNpZm5kZWYgQU1JR0EKKyNpZm5kZWYgTUFDCisgICAgc2lnbmFsKFNJR0lOVCxvbGRzaWcp OyAgICAgICAgICAgICAgLyogUHV0IG9sZCBzaWduYWwgYWN0aW9uIGJhY2suICovCisjZW5kaWYg LyogTUFDICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyAgICBpZiAodGFpbGluZyAmJiB0YWlsKSB7 CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWFkOyBpKyspIHsgICAgLyogRnJlZSBlYWNoIGxp bmUuICovCisgICAgICAgICAgICBpZiAodGFpbFtpXSkKKyAgICAgICAgICAgICAgZnJlZSh0YWls W2ldKTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKChjaGFyICopdGFpbCk7ICAgICAgICAgICAg IC8qIEZyZWUgbGlzdCBwb2ludGVyICovCisgICAgICAgIGlmICh0bGVuKQorICAgICAgICAgIGZy ZWUoKGNoYXIgKil0bGVuKTsKKyAgICB9CisgICAgeCA9IHpjbG9zZShaSUZJTEUpOyAgICAgICAg ICAgICAgICAgLyogRG9uZSwgY2xvc2UgdGhlIGlucHV0IGZpbGUgKi8KKyAgICBpZiAob2ZwICE9 IHN0ZG91dCkgeyAgICAgICAgICAgICAgICAvKiBDbG9zZSBhbnkgb3V0cHV0IGZpbGUgKi8KKyAg ICAgICAgaWYgKG9mcCkgZmNsb3NlKG9mcCk7CisgICAgICAgIG9mcCA9IHN0ZG91dDsKKyAgICB9 CisgICAgYmluYXJ5ID0gc2F2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0ZXh0 L2JpbmFyeSBtb2RlICovCisjaWZkZWYgVU5JQ09ERQorICAgIHVjc2JvbSA9IHVjc2JvbV9zYXY7 ICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgQk9NIHVzYWdlICovCisjZW5kaWYgLyogVU5JQ09E RSAqLworCisjaWZkZWYgS1VJCisgICAgaWYgKCBndWkgKQorICAgICAgICBndWlfdGV4dF9wb3B1 cF93YWl0KC0xKTsgICAgICAgIC8qIFdhaXQgZm9yIHVzZXIgdG8gY2xvc2UgdGhlIGRpYWxvZyAq LworI2VuZGlmIC8qIEtVSSAqLworICAgIHJldHVybihyYyk7Cit9CisKKy8qIEdSRVAgY29tbWFu ZCAqLworCisjZGVmaW5lIEdSRVBfQ0FTRSAgMCAgICAgICAgICAgICAgICAgICAgLyogL0NBU0Ug Ki8KKyNkZWZpbmUgR1JFUF9DT1VOICAxICAgICAgICAgICAgICAgICAgICAvKiAvQ09VTlQgKi8K KyNkZWZpbmUgR1JFUF9ET1RGICAyICAgICAgICAgICAgICAgICAgICAvKiAvRE9URklMRVMgKi8K KyNkZWZpbmUgR1JFUF9OQU1FICAzICAgICAgICAgICAgICAgICAgICAvKiAvTkFNRU9OTFkgKi8K KyNkZWZpbmUgR1JFUF9OT0JLICA0ICAgICAgICAgICAgICAgICAgICAvKiAvTk9CQUNLVVAgKi8K KyNkZWZpbmUgR1JFUF9OT0RPICA1ICAgICAgICAgICAgICAgICAgICAvKiAvTk9ET1RGSUxFUyAq LworI2RlZmluZSBHUkVQX05PTEkgIDYgICAgICAgICAgICAgICAgICAgIC8qIC9OT0xJU1QgKi8K KyNkZWZpbmUgR1JFUF9OT01BICA3ICAgICAgICAgICAgICAgICAgICAvKiAvSU5WRVJUID0gL05P TUFUQ0ggKi8KKyNkZWZpbmUgR1JFUF9OT1BBICA4ICAgICAgICAgICAgICAgICAgICAvKiAvTk9Q QUdFICovCisjZGVmaW5lIEdSRVBfTlVNUyAgOSAgICAgICAgICAgICAgICAgICAgLyogL0xJTkVO VU1CRVJTICovCisjZGVmaW5lIEdSRVBfUEFHRSAxMCAgICAgICAgICAgICAgICAgICAgLyogL1BB R0UgKi8KKyNkZWZpbmUgR1JFUF9SRUNVIDExICAgICAgICAgICAgICAgICAgICAvKiAvUkVDVVJT SVZFICovCisjZGVmaW5lIEdSRVBfVFlQRSAxMiAgICAgICAgICAgICAgICAgICAgLyogL1RZUEU6 ICovCisjZGVmaW5lIEdSRVBfT1VUUCAxMyAgICAgICAgICAgICAgICAgICAgLyogL09VVFBVVEZJ TEU6ICovCisjZGVmaW5lIEdSRVBfRVhDUCAxNAkJCS8qIC9FWENFUFQ6ICovCisKK3N0YXRpYyBz dHJ1Y3Qga2V5dGFiIGdyZXB0YWJbXSA9IHsKKyAgICB7ICIvY291bnQiLCAgICAgICAgR1JFUF9D T1VOLCBDTV9BUkcgfSwKKyAgICB7ICIvZG90ZmlsZXMiLCAgICAgR1JFUF9ET1RGLCAwIH0sCisg ICAgeyAiL2V4Y2VwdCIsICAgICAgIEdSRVBfRVhDUCwgQ01fQVJHIH0sCisgICAgeyAiL2xpbmVu dW1iZXJzIiwgIEdSRVBfTlVNUywgMCB9LAorICAgIHsgIi9uYW1lb25seSIsICAgICBHUkVQX05B TUUsIDAgfSwKKyAgICB7ICIvbm9iYWNrdXBmaWxlcyIsR1JFUF9OT0JLLCAwIH0sCisgICAgeyAi L25vY2FzZSIsICAgICAgIEdSRVBfQ0FTRSwgMCB9LAorICAgIHsgIi9ub2RvdGZpbGVzIiwgICBH UkVQX05PRE8sIDAgfSwKKyAgICB7ICIvbm9saXN0IiwgICAgICAgR1JFUF9OT0xJLCAwIH0sCisg ICAgeyAiL25vbWF0Y2giLCAgICAgIEdSRVBfTk9NQSwgMCB9LAorICAgIHsgIi9ub3BhZ2UiLCAg ICAgICBHUkVQX05PUEEsIDAgfSwKKyAgICB7ICIvb3V0cHV0IiwgICAgICAgR1JFUF9PVVRQLCBD TV9BUkcgfSwKKyAgICB7ICIvcGFnZSIsICAgICAgICAgR1JFUF9QQUdFLCAwIH0sCisgICAgeyAi L3F1aWV0IiwgICAgICAgIEdSRVBfTk9MSSwgQ01fSU5WIH0sCisjaWZkZWYgUkVDVVJTSVZFCisg ICAgeyAiL3JlY3Vyc2l2ZSIsICAgIEdSRVBfUkVDVSwgMCB9LAorI2VuZGlmIC8qIFJFQ1VSU0lW RSAqLworICAgIHsgIi90eXBlIiwgICAgICAgICBHUkVQX1RZUEUsIENNX0FSRyB9LAorICAgIHsg IiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmdyZXB0YWIgPSAgc2l6ZW9mKGdyZXB0YWIpL3Np emVvZihzdHJ1Y3Qga2V5dGFiKS0xOworCitzdGF0aWMgY2hhciAqIGdyZXBfZXhjZXB0ID0gTlVM TDsKKworaW50Citkb2dyZXAoKSB7CisgICAgaW50IG1hdGNoLCB4LCB5LCBmYywgZ2V0dmFsLCBt YyA9IDAsIGNvdW50ID0gMCwgYmlnY291bnQgPSAwOworICAgIGludCBmbGluZSA9IDAsIHNsaW5l ID0gMCwgd2lsZCA9IDAsIGxlbiA9IDA7CisgICAgaW50IHhtb2RlID0gLTEsIHNjYW4gPSAwOwor ICAgIGNoYXIgYywgbmFtZVtDS01BWFBBVEgrMV0sIG91dGZpbGVbQ0tNQVhQQVRIKzFdLCAqcCwg KnMsICpjdiA9IE5VTEw7CisgICAgRklMRSAqIGZwID0gTlVMTDsKKworICAgIGludCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaCB2YWx1ZXMgYW5kIGRlZmF1bHRzICov CisgICAgICBncl9jb3VuID0gMCwKKyAgICAgIGdyX25hbWUgPSAwLAorICAgICAgZ3Jfbm9iayA9 IDAsCisgICAgICBncl9jYXNlID0gMSwKKyAgICAgIGdyX25vbGkgPSAwLAorICAgICAgZ3Jfbm9t YSA9IDAsCisgICAgICBncl9udW1zID0gMCwKKyAgICAgIGdyX2V4Y3AgPSAwLAorICAgICAgZ3Jf cGFnZSA9IHhhc2ttb3JlOworCisgICAgc3RydWN0IEZEQiBzdywgZmw7CisKKyAgICBnX21hdGNo ZG90ID0gbWF0Y2hkb3Q7ICAgICAgICAgICAgICAvKiBTYXZlIGdsb2JhbCBtYXRjaGRvdCBzZXR0 aW5nICovCisgICAgb3V0ZmlsZVswXSA9IE5VTDsKKyAgICBtYWtlc3RyKCZncmVwX2V4Y2VwdCxO VUxMKTsKKworICAgIGlmIChvZnAgIT0gc3Rkb3V0KSB7ICAgICAgICAgICAgICAgIC8qIEluIGNh c2Ugb2YgcHJldmlvdXMgaW50ZXJydXB0aW9uICovCisgICAgICAgIGlmIChvZnApIGZjbG9zZShv ZnApOworICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAgfQorICAgIGNtZmRiaSgmc3csICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAg ICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAg ICAgICAiU3RyaW5nIG9yIHBhdHRlcm4gdG8gc2VhcmNoIGZvciwgb3Igc3dpdGNoIiwKKyAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAg ICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8K KyAgICAgICAgICAgbmdyZXB0YWIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmlj IGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisgICAgICAgICAgIHh4 c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAg ICAgICAgICBncmVwdGFiLCAgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8K KyAgICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5l eHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21mZGJpKCZmbCwgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQW55dGhpbmcgdGhhdCBkb2Vzbid0IG1hdGNoICovCisgICAgICAgICAgIF9D TUZMRCwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0 YSAyICovCisgICAgICAgICAgIHh4c3RyaW5nLAkJCS8qIHh4c3RyaW5nICovCisgICAgICAgICAg IE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgKTsKKyAgICB3aGlsZSAoMSkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSAwIG9yIG1vcmUgc3dpdGNoZXMgKi8KKyAg ICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcg Ki8KKyAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYg KGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBvdXQgaWYgbm90IGEgc3dpdGNo ICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGMgPSBjbWdicmsoKTsKKyAgICAgICAgaWYg KChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01f QVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBh biBhcmd1bWVudFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAg ICAgIGlmICgoY21yZXN1bHQubnJlc3VsdCAhPSBHUkVQX0NPVU4pICYmICFnZXR2YWwgJiYKKyAg ICAgICAgICAgIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50Zigi P1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgIHJldHVy bigtOSk7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7Cisg ICAgICAgICAgY2FzZSBHUkVQX0NPVU46IHsKKyAgICAgICAgICAgICAgZ3JfY291bisrOworICAg ICAgICAgICAgICBpZiAoZ2V0dmFsKSB7CisgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWZs ZCgiVmFyaWFibGUgZm9yIHJlc3VsdCIsIiIsJnMsTlVMTCkpIDwgMCkKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgICAgbWFrZXN0cigmY3Yscyk7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAg IGNhc2UgR1JFUF9DQVNFOiBncl9jYXNlPTA7IGJyZWFrOworICAgICAgICAgIGNhc2UgR1JFUF9O QU1FOiBncl9uYW1lKys7IGdyX25vbGk9MDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHUkVQX05P Qks6IGdyX25vYmsrKzsgYnJlYWs7CisgICAgICAgICAgY2FzZSBHUkVQX05PTEk6IGdyX25vbGkr KzsgZ3JfbmFtZT0wOyBncl9udW1zPTA7IGJyZWFrOworICAgICAgICAgIGNhc2UgR1JFUF9OT01B OiBncl9ub21hKys7IGJyZWFrOworICAgICAgICAgIGNhc2UgR1JFUF9OT1BBOiBncl9wYWdlPTA7 IGJyZWFrOworICAgICAgICAgIGNhc2UgR1JFUF9OVU1TOiBncl9udW1zKys7IGdyX25vbGk9MDsg YnJlYWs7CisgICAgICAgICAgY2FzZSBHUkVQX1BBR0U6IGdyX3BhZ2UrKzsgZ3Jfbm9saT0wOyBi cmVhazsKKyAgICAgICAgICBjYXNlIEdSRVBfTk9ETzoKKyAgICAgICAgICAgIG1hdGNoZG90ID0g MDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR1JFUF9ET1RGOgorICAgICAg ICAgICAgbWF0Y2hkb3QgPSAxOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgUkVDVVJTSVZF CisgICAgICAgICAgY2FzZSBHUkVQX1JFQ1U6CisgICAgICAgICAgICByZWN1cnNpdmUgPSAxOwor ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgICAgICAgY2Fz ZSBHUkVQX1RZUEU6IHsKKyAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdHh0Ymlu W107CisgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR4dGJpbiwzLCIiLCIiLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgaWYgKHgg PT0gMikgeyAgICAgICAgICAgICAvKiBBTEwgKi8KKyAgICAgICAgICAgICAgICAgIHhtb2RlID0g LTE7CisgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgLyogVEVYVCBvciBC SU5BUlkgb25seSAqLworICAgICAgICAgICAgICAgICAgeG1vZGUgPSB4OworICAgICAgICAgICAg ICAgICAgc2NhbiA9IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgfQorICAgICAgICAgIGNhc2UgR1JFUF9PVVRQOiAgICAgICAgICAgICAgIC8qIFNl bmQgb3V0cHV0IHRvIGZpbGUgKi8KKyAgICAgICAgICAgIGlmICgoeCA9IGNtb2ZpKCJGaWxlIGZv ciBHUkVQJ2QgbGluZXMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1 cm4oeCk7CisgICAgICAgICAgICBja3N0cm5jcHkob3V0ZmlsZSxzLENLTUFYUEFUSCk7CisgICAg ICAgICAgICBicmVhazsKKwkgIGNhc2UgR1JFUF9FWENQOgkJLyogRXhjZXB0aW9uIHBhdHRlcm4g Ki8KKwkgICAgaWYgKGdldHZhbCkgeworCQlpZiAoKHggPSBjbWZsZCgiRXhjZXB0aW9uIHBhdHRl cm4iLAorCQkJICAgICAgICIiLAorCQkJICAgICAgICZzLAorCQkJICAgICAgIHh4c3RyaW5nCisJ CQkgICAgICAgKSkgPCAwKQorCQkgIHJldHVybih4KTsKKwkJZ3JfZXhjcCsrOworCQltYWtlc3Ry KCZncmVwX2V4Y2VwdCxzKTsKKwkgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChvdXRm aWxlWzBdKSB7CisgICAgICAgIG9mcCA9IGZvcGVuKG91dGZpbGUsInciKTsgICAgICAgLyogT3Bl biBvdXRwdXQgZmlsZSAqLworICAgICAgICBpZiAoIW9mcCkgeworICAgICAgICAgICAgcHJpbnRm KCI/Q2FuJ3Qgb3BlbiBvdXRwdXQgZmlsZSAlczogJXNcbiIsb3V0ZmlsZSxja19lcnJzdHIoKSk7 CisgICAgICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICB9CisgICAgICAgIGdyX3BhZ2UgPSAwOworICAgIH0KKyAgICBzID0gY21yZXN1bHQuc3Jl c3VsdDsKKyAgICBzID0gYnJzdHJpcChzKTsgICAgICAgICAgICAgICAgICAgICAvKiBTdHJpcCBi cmFjZXMgZnJvbSBwYXR0ZXJuICovCisgICAgaWYgKCEqcykgeworICAgICAgICBwcmludGYoIj9Q YXR0ZXJuIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgY2tz dHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7ICAgICAgLyogU2F2ZSBwYXR0ZXJuICovCisgICAg aWYgKCh4ID0gY21pZmkoIkZpbGUocykgdG8gc2VhcmNoIiwiIiwmcywmd2lsZCx4eHN0cmluZykp IDwgMCkgeworICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgcHJpbnRmKCI/Rmls ZSBzcGVjaWZpY2F0aW9uIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAg ICAgfQorICAgICAgICByZXR1cm4oeCk7CisgICAgfQorICAgIHMgPSBicnN0cmlwKHMpOyAgICAg ICAgICAgICAgICAgICAgIC8qIFN0cmlwIGJyYWNlcyBmcm9tIGZpbGVuYW1lICovCisjaWZuZGVm IFpYUkVXSU5ECisgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworI2VuZGlmIC8qIFpY UkVXSU5EICovCisgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOwor CisgICAgaWYgKGdyX3BhZ2UgPiAtMSkKKyAgICAgIHhhc2ttb3JlID0gZ3JfcGFnZTsgICAgICAg ICAgICAgICAvKiBQYWdpbmcuLi4gKi8KKworICAgIHAgPSB0bXBidWY7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBvaW50IHRvIHBhdHRlcm4gKi8KKyNpZmRlZiBDT01NRU5UCisvKiBOb3cg dGhpcyBpcyBkb25lIGluIGNrbWF0Y2ggKi8KKyAgICBpZiAoKnAgPT0gJ14nKSB7ICAgICAgICAg ICAgICAgICAgICAvKiAnXicgYW5jaG9ycyBwYXR0ZXJuIHRvIGJlZ2lubmluZyAqLworICAgICAg ICBwKys7CisgICAgfSBlbHNlIGlmICgqcCAhPSAnKicpIHsgICAgICAgICAgICAgLyogT3RoZXJ3 aXNlIHByZXBlbmQgaW1wbGllZCAnKicgKi8KKyAgICAgICAgdG1wYnVmWzBdID0gJyonOworICAg ICAgICBwID0gdG1wYnVmOworICAgIH0KKyAgICB4ID0gc3RybGVuKHApOyAgICAgICAgICAgICAg ICAgICAgICAvKiBHZXQgbGVuZ3RoIG9mIHJlc3VsdCAqLworICAgIGlmICh4ID4gMCAmJiB4IDwg VE1QQlVGU0laKSB7ICAgICAgIC8qICckJyBhdCBlbmQgYW5jaG9ycyBwYXR0ZXJuIHRvIGVuZCAq LworICAgICAgICBpZiAocFt4LTFdID09ICckJykgeworICAgICAgICAgICAgcFt4LTFdID0gTlVM OworICAgICAgICB9IGVsc2UgaWYgKHBbeC0xXSAhPSAnKicpIHsKKyAgICAgICAgICAgIHBbeF0g PSAnKic7CisgICAgICAgICAgICBwW3grMV0gPSBOVUw7CisgICAgICAgIH0KKyAgICB9CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgIGRlYnVnKEYxMTEsImdyZXAgcGF0IixwLHgpOworCisjaWZk ZWYgWlhSRVdJTkQKKyAgICBmYyA9IHp4cmV3aW5kKCk7ICAgICAgICAgICAgICAgICAgICAvKiBS ZXdpbmQgdGhlIGZpbGUgbGlzdCAqLworI2Vsc2UKKyAgICB7CisgICAgICAgIGludCBmbGFncyA9 IFpYX0ZJTE9OTFk7ICAgICAgICAgLyogRXhwYW5kIGZpbGUgbGlzdCAqLworICAgICAgICBpZiAo bWF0Y2hkb3QpICBmbGFncyB8PSBaWF9NQVRDSERPVDsKKyAgICAgICAgaWYgKHJlY3Vyc2l2ZSkg ZmxhZ3MgfD0gWlhfUkVDVVJTRTsKKyAgICAgICAgZmMgPSBuenhwYW5kKGxpbmUsZmxhZ3MpOwor ICAgIH0KKyNlbmRpZiAvKiBaWFJFV0lORCAqLworI2lmZGVmIFVOSVgKKyAgICBzaF9zb3J0KG10 Y2hzLE5VTEwsZmMsMCwwLGZpbGVjYXNlKTsKKyNlbmRpZiAvKiBVTklYICovCisKKyAgICBkZWJ1 ZyhGMTAxLCJncmVwIGNtZF9yb3dzIiwiIixjbWRfcm93cyk7CisgICAgZGVidWcoRjEwMSwiZ3Jl cCBjbWRfY29scyIsIiIsY21kX2NvbHMpOworCisgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTG9vcCBmb3IgZWFjaCBmaWxlICovCisgICAgICAgIHpuZXh0KG5hbWUp OyAgICAgICAgICAgICAgICAgICAgLyogR2V0IG5leHQgZmlsZSAqLworICAgICAgICBpZiAoIW5h bWVbMF0pICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUsIGRvbmUgKi8KKyAgICAgICAgICBi cmVhazsKKyAgICAgICAgaWYgKGdyX25vYmspICAgICAgICAgICAgICAgICAgICAvKiBTa2lwcGlu ZyBiYWNrdXAgZmlsZXM/ICovCisgICAgICAgICAgaWYgKGNrbWF0Y2goIiouflsxLTldKn4iLG5h bWUsMSwxKSkgLyogQmFja3VwIGZpbGU/ICovCisgICAgICAgICAgICBjb250aW51ZTsgICAgICAg ICAgICAgICAgICAgLyogWWVzLCBza2lwICovCisgICAgICAgIGlmIChzY2FuKSB7ICAgICAgICAg ICAgICAgICAgICAgLyogL1RZUEU6IGdpdmVuPyAqLworICAgICAgICAgICAgc3dpdGNoIChzY2Fu ZmlsZShuYW1lLCZ5LG5zY2FuZmlsZSkpIHsgLyogWWVzLCBzY2FuIHRoZSBmaWxlICovCisgICAg ICAgICAgICAgIGNhc2UgRlRfQklOOgorICAgICAgICAgICAgICAgIGlmICh4bW9kZSAhPSAxKQor ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGNhc2UgRlRfVEVYVDoKKyAgICAgICAgICAgICAgY2FzZSBGVF83QklUOgorICAg ICAgICAgICAgICBjYXNlIEZUXzhCSVQ6CisjaWZkZWYgVU5JQ09ERQorICAgICAgICAgICAgICBj YXNlIEZUX1VURjg6CisgICAgICAgICAgICAgIGNhc2UgRlRfVUNTMjoKKyNlbmRpZiAvKiBVTklD T0RFICovCisgICAgICAgICAgICAgICAgaWYgKHhtb2RlICE9IDApCisgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmcCA9IGZvcGVu KG5hbWUsInIiKTsgICAgICAgICAgIC8qIE9wZW4gKi8KKyAgICAgICAgaWYgKCFmcCkgICAgICAg ICAgICAgICAgICAgICAgICAvKiBDYW4ndCAqLworICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAg ICAgICAgICAgICAgIC8qIFNraXAgKi8KKyAgICAgICAgY291bnQgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAvKiBNYXRjaCBjb3VudCwgdGhpcyBmaWxlICovCisgICAgICAgIGZsaW5lID0gMDsg ICAgICAgICAgICAgICAgICAgICAgLyogTGluZSBjb3VudCwgdGhpcyBmaWxlICovCisgICAgICAg IHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCBmb3IgZWFjaCBsaW5lICov CisgICAgICAgICAgICBpZiAoZmdldHMobGluZSxMSU5CVUZTSVosZnApID09IE5VTEwpIHsgLyog R2V0IG5leHQgbGluZSAqLworICAgICAgICAgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgICAg ICAgICAgZnAgPSBOVUxMOworCQlkZWJ1ZyhGMTAwLCJHUkVQIEVPRiIsIiIsMCk7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmbGluZSsrOyAgICAg ICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBsaW5lICovCisgICAgICAgICAgICBsaW5lW0xJ TkJVRlNJWl0gPSBOVUw7ICAgICAgLyogTWFrZSBzdXJlIGl0J3MgdGVybWluYXRlZCAqLworCSAg ICBkZWJ1ZyhGMTExLCJHUkVQIixsaW5lLGZsaW5lKTsKKyAgICAgICAgICAgIGxlbiA9IChpbnQp c3RybGVuKGxpbmUpOyAgICAvKiBHZXQgbGVuZ3RoICovCisgICAgICAgICAgICB3aGlsZSAobGVu ID4gMCAmJiAobGluZVtsZW4tMV0gPT0gJ1xuJyB8fCBsaW5lW2xlbi0xXSA9PSAnXHInKSkKKyAg ICAgICAgICAgICAgbGluZVstLWxlbl0gPSBOVUw7ICAgICAgICAvKiBDaG9wIG9mZiB0ZXJtaW5h dG9ycyAqLworICAgICAgICAgICAgbWF0Y2ggPSBja21hdGNoKHAsbGluZSxncl9jYXNlLDErNCk7 IC8qIE1hdGNoIGFnYWluc3QgcGF0dGVybiAqLworCSAgICBpZiAobWF0Y2ggJiYgZ3JfZXhjcCkg eworCQlpZiAoY2ttYXRjaChncmVwX2V4Y2VwdCxsaW5lLGdyX2Nhc2UsMSs0KSkKKwkJICAgIG1h dGNoID0gMDsKKwkgICAgfQorICAgICAgICAgICAgaWYgKGdyX25vbWEpICAgICAgICAgICAgICAg IC8qIEludmVydCBtYXRjaCBzZW5zZSBpZiByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICAgICAgbWF0 Y2ggPSAhbWF0Y2g7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsgICAgICAgICAgICAgICAgLyog SGF2ZSBhIG1hdGNoaW5nIGxpbmUgKi8KKyAgICAgICAgICAgICAgICBtYysrOyAgICAgICAgICAg ICAgICAgICAvKiBUb3RhbCBtYXRjaCBjb3VudCAqLworICAgICAgICAgICAgICAgIGNvdW50Kys7 ICAgICAgICAgICAgICAgIC8qIE1hdGNoIGNvdW50IHRoaXMgZmlsZSAqLworICAgICAgICAgICAg ICAgIGlmIChncl9uYW1lKSB7ICAgICAgICAgIC8qIERvbid0IGNhcmUgaG93IG1hbnkgbGluZXMg bWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGZwKTsgICAgICAgICAvKiBDbG9z ZSB0aGUgZmlsZSAqLworICAgICAgICAgICAgICAgICAgICBmcCA9IE5VTEw7ICAgICAgICAgIC8q IGFuZCBxdWl0IHRoZSBsaW5lLXJlYWRpbmcgbG9vcC4gKi8KKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChncl9jb3VuIHx8 IGdyX25vbGkpIC8qIE5vdCBsaXN0aW5nIGVhY2ggbGluZSAqLworICAgICAgICAgICAgICAgICAg Y29udGludWU7ICAgICAgICAgICAgIC8qIHNvIGRvbid0IHByaW50IGFueXRoaW5nIG5vdy4gKi8K KyAgICAgICAgICAgICAgICBpZiAod2lsZCkgewkJLyogSWYgc2VhcmNoaW5nIG11bHRpcGxlIGZp bGVzICovCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYob2ZwLCIlczoiLG5hbWUpOyAvKiBw cmludCBmaWxlbmFtZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgbGVuICs9IChpbnQpc3RybGVu KG5hbWUpICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGdyX251 bXMpIHsgICAgICAgICAgLyogSWYgbGluZSBudW1iZXJzIHdhbnRlZCAqLworICAgICAgICAgICAg ICAgICAgICBjaGFyIG5idWZbMzJdOworICAgICAgICAgICAgICAgICAgICBsZW4gKz0gY2ttYWtt c2cobmJ1ZiwzMixja2l0b2EoZmxpbmUpLCI6IixOVUxMLE5VTEwpOworICAgICAgICAgICAgICAg ICAgICBmcHJpbnRmKG9mcCwiJXMiLG5idWYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBpZiAoY21kX3Jvd3MgPiAwICYmIGNtZF9jb2xzID4gMCkKKyAgICAgICAgICAgICAg ICAgIHNsaW5lICs9IChsZW4gLyBjbWRfY29scykgKyAxOworICAgICAgICAgICAgICAgIGZwcmlu dGYob2ZwLCIlc1xuIixsaW5lKTsgLyogUHJpbnQgdGhlIGxpbmUuICovCisgICAgICAgICAgICAg ICAgaWYgKHNsaW5lID4gY21kX3Jvd3MgLSAzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh YXNrbW9yZSgpKSBnb3RvIHhncmVwOyBlbHNlIHNsaW5lID0gMDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFncl9ub2xpKSB7CQkJLyog SWYgbm90IG5vdCBsaXN0aW5nLi4uICovCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAg IGlmIChncl9jb3VuKSB7ICAgICAgICAgICAgICAvKiBTaG93IG1hdGNoIGNvdW50IG9ubHkgKi8K KyAgICAgICAgICAgICAgICBmcHJpbnRmKG9mcCwiJXM6JWRcbiIsbmFtZSxjb3VudCk7CisgICAg ICAgICAgICAgICAgeCsrOworICAgICAgICAgICAgfSBlbHNlIGlmIChncl9uYW1lICYmIGNvdW50 ID4gMCkgeyAvKiBTaG93IG5hbWUgb25seSAqLworICAgICAgICAgICAgICAgIGZwcmludGYob2Zw LCIlc1xuIixuYW1lKTsKKyAgICAgICAgICAgICAgICB4Kys7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoeCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoKytzbGluZSA+IGNtZF9y b3dzIC0gMykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4Z3Jl cDsgZWxzZSBzbGluZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGJpZ2NvdW50ICs9IGNvdW50OyAgICAgICAgICAgICAgLyogT3ZlcmFs bCBjb3VudCAqLworICAgIH0KKyAgeGdyZXA6CisjaWZuZGVmIE5PU1BMCisgICAgaWYgKGdyX2Nv dW4gJiYgY3YpIHsgICAgICAgICAgICAgICAgLyogL0NPVU5UOmJsYWggKi8KKyAgICAgICAgYWRk bWFjKGN2LGNraXRvYShiaWdjb3VudCkpOyAgICAvKiBzZXQgdGhlIHZhcmlhYmxlICovCisgICAg ICAgIG1ha2VzdHIoJmN2LE5VTEwpOyAgICAgICAgICAgICAgLyogZnJlZSB0aGlzICovCisgICAg fQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgaWYgKGZwKSBmY2xvc2UoZnApOyAgICAgICAgICAg ICAgICAgLyogY2xvc2UgaW5wdXQgZmlsZSBpZiBzdGlsbCBvcGVuICovCisgICAgaWYgKG9mcCAh PSBzdGRvdXQpIHsgICAgICAgICAgICAgICAgLyogQ2xvc2UgYW55IG91dHB1dCBmaWxlICovCisg ICAgICAgIGlmIChvZnApIGZjbG9zZShvZnApOworICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAg fQorICAgIHJldHVybihzdWNjZXNzID0gbWMgPyAxIDogMCk7Cit9CisKKy8qIFN5c3RlbS1pbmRl cGVuZGVudCBkaXJlY3RvcnkgKi8KKworc3RhdGljIGNoYXIgKiogZGlybGlzdCA9IE5VTEw7Citz dGF0aWMgaW50IG5kaXJsaXN0ID0gMDsKKworc3RhdGljIFZPSUQKK2ZyZWVkaXJsaXN0KCkgewor ICAgIGlmIChkaXJsaXN0KSB7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbmRpcmxpc3Q7IGkrKykgeworICAgICAgICAgICAgaWYgKGRpcmxpc3RbaV0pCisgICAgICAg ICAgICAgIGZyZWUoZGlybGlzdFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZSgoY2hhciAq KWRpcmxpc3QpOworICAgICAgICBkaXJsaXN0ID0gTlVMTDsKKyAgICB9CisgICAgbmRpcmxpc3Qg PSAwOworfQorCitzdGF0aWMgc3RydWN0IGtleXRhYiBkaXJzd3RhYltdID0geyAgICAgLyogRElS RUNUT1JZIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICB7ICIvYWZ0ZXIiLCAgICAgICBESVJfQUZU LCBDTV9BUkcgfSwKKyAgICB7ICIvYWxsIiwgICAgICAgICBESVJfQUxMLCAwIH0sCisjaWZuZGVm IE5PU1BMCisgICAgeyAiL2FycmF5IiwgICAgICAgRElSX0FSUiwgQ01fQVJHIH0sCisjZW5kaWYg LyogTk9TUEwgKi8KKyAgICB7ICIvYXNjZW5kaW5nIiwgICBESVJfQVNDLCAwIH0sCisgICAgeyAi L2JhY2t1cCIsICAgICAgRElSX0JVUCwgMCB9LAorICAgIHsgIi9iZWZvcmUiLCAgICAgIERJUl9C RUYsIENNX0FSRyB9LAorICAgIHsgIi9icmllZiIsICAgICAgIERJUl9CUkYsIDAgfSwKKyAgICB7 ICIvY291bnQiLCAgICAgICBESVJfQ09VLCBDTV9BUkcgfSwKKyAgICB7ICIvZGVzY2VuZGluZyIs ICBESVJfRFNDLCBDTV9JTlYgfSwKKyAgICB7ICIvZGlyZWN0b3JpZXMiLCBESVJfRElSLCAwIH0s CisgICAgeyAiL2RvdGZpbGVzIiwgICAgRElSX0RPVCwgMCB9LAorICAgIHsgIi9lbmdsaXNoZGF0 ZSIsIERJUl9EQVQsIDAgfSwKKyAgICB7ICIvZXhjZXB0IiwgICAgICBESVJfRVhDLCBDTV9BUkcg fSwKKyAgICB7ICIvZmlsZXMiLCAgICAgICBESVJfRklMLCAwIH0sCisgICAgeyAiL2hlYWRpbmci LCAgICAgRElSX0hERywgMCB9LAorICAgIHsgIi9pc29kYXRlIiwgICAgIERJUl9JU08sIDAgfSwK KyAgICB7ICIvbGFyZ2VyLXRoYW4iLCBESVJfTEFSLCBDTV9BUkcgfSwKKyNpZmRlZiBDS1NZTUxJ TksKKyAgICB7ICIvZm9sbG93bGlua3MiLCBESVJfTE5LLCAwIH0sCisjZW5kaWYgLyogQ0tTWU1M SU5LICovCisgICAgeyAiL21lc3NhZ2UiLCAgICAgRElSX01TRywgQ01fQVJHIH0sCisgICAgeyAi L25vYmFja3VwZmlsZXMiLERJUl9OT0IsIDAgfSwKKyAgICB7ICIvbm9kb3RmaWxlcyIsICBESVJf Tk9ELCAwIH0sCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgeyAiL25vZm9sbG93bGlua3MiLERJUl9O TEssIDAgfSwKKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyAgICB7ICIvbm9oZWFkaW5nIiwgICBE SVJfTk9ILCAwIH0sCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgeyAiL25vbGlua3MiLCAgICAgRElS X05PTCwgMCB9LAorI2VuZGlmIC8qIENLU1lNTElOSyAqLworICAgIHsgIi9ub21lc3NhZ2UiLCAg IERJUl9OT00sIDAgfSwKKyNpZmRlZiBDS19UVEdXU0laCisgICAgeyAiL25vcGFnZSIsICAgICAg RElSX05PUCwgMCB9LAorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyNpZmRlZiBSRUNVUlNJVkUK KyAgICB7ICIvbm9yZWN1cnNpdmUiLCBESVJfTk9SLCAwIH0sCisjZWxzZQorI2lmZGVmIFZNUwor ICAgIHsgIi9ub3JlY3Vyc2l2ZSIsIERJUl9OT1IsIDAgfSwKKyNlbHNlCisjaWZkZWYgZGF0YWdl bmVyYWwKKyAgICB7ICIvbm9yZWN1cnNpdmUiLCBESVJfTk9SLCAwIH0sCisjZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAg ICB7ICIvbm9zb3J0IiwgICAgICBESVJfTk9TLCAwIH0sCisgICAgeyAiL25vdC1hZnRlciIsICAg RElSX05BRiwgQ01fQVJHIH0sCisgICAgeyAiL25vdC1iZWZvcmUiLCAgRElSX05CRiwgQ01fQVJH IH0sCisgICAgeyAiL25vdC1zaW5jZSIsICAgRElSX05BRiwgQ01fSU5WfENNX0FSRyB9LAorICAg IHsgIi9ub3hmZXJtb2RlIiwgIERJUl9OT1QsIDAgfSwKKyAgICB7ICIvb3V0cHV0IiwgICAgICBE SVJfT1VULCBDTV9BUkcgfSwKKyNpZmRlZiBDS19UVEdXU0laCisgICAgeyAiL3BhZ2UiLCAgICAg ICAgRElSX1BBRywgMCB9LAorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyNpZmRlZiBSRUNVUlNJ VkUKKyAgICB7ICIvcmVjdXJzaXZlIiwgICBESVJfUkVDLCAwIH0sCisjZWxzZQorI2lmZGVmIFZN UworICAgIHsgIi9yZWN1cnNpdmUiLCAgIERJUl9SRUMsIDAgfSwKKyNlbHNlCisjaWZkZWYgZGF0 YWdlbmVyYWwKKyAgICB7ICIvcmVjdXJzaXZlIiwgICBESVJfUkVDLCAwIH0sCisjZW5kaWYgLyog ZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8K KyAgICB7ICIvcmV2ZXJzZSIsICAgICBESVJfRFNDLCAwIH0sCisgICAgeyAiL3NpbmNlIiwgICAg ICAgRElSX0FGVCwgQ01fQVJHfENNX0lOViB9LAorICAgIHsgIi9zbWFsbGVyLXRoYW4iLERJUl9T TUEsIENNX0FSRyB9LAorICAgIHsgIi9zb3J0IiwgICAgICAgIERJUl9TUlQsIENNX0FSRyB9LAor ICAgIHsgIi9zdW1tYXJ5IiwgICAgIERJUl9TVU0sIDAgfSwKKyAgICB7ICIvdG9wIiwgICAgICAg ICBESVJfVE9QLCBDTV9BUkcgfSwKKyAgICB7ICIvdHlwZSIsICAgICAgICBESVJfQklOLCBDTV9B UkcgfSwKKyAgICB7ICIveGZlcm1vZGUiLCAgICBESVJfVFlQLCAwIH0sCisgICAgeyAiL3ZlcmJv c2UiLCAgICAgRElSX1ZSQiwgMCB9LAorICAgIHsgIiIsMCwwIH0KK307CitzdGF0aWMgaW50IG5k aXJzd3RhYiA9IChzaXplb2YoZGlyc3d0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7 CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGRpcnNvcnRbXSA9IHsgICAgICAvKiBESVJFQ1RPUlkg L1NPUlQ6IG9wdGlvbnMgKi8KKyAgICB7ICJkYXRlIiwgICAgICAgICBESVJTX0RULCAwIH0sCisg ICAgeyAibmFtZSIsICAgICAgICAgRElSU19OTSwgMCB9LAorICAgIHsgInNpemUiLCAgICAgICAg IERJUlNfU1osIDAgfQorfTsKK3N0YXRpYyBpbnQgbmRpcnNvcnQgPSAoc2l6ZW9mKGRpcnNvcnQp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIGludCBkaXJfZGF0ZSA9IC0xOyAg ICAgICAgICAgICAgIC8qIE9wdGlvbiBkZWZhdWx0cyAoLTEgbWVhbnMgbm9uZSkgKi8KK3N0YXRp YyBpbnQgZGlyX3BhZ2UgPSAtMTsKK3N0YXRpYyBpbnQgZGlyX3ZlcmIgPSAgMTsKK3N0YXRpYyBp bnQgZGlyX21zZyAgPSAtMTsKKyNpZmRlZiBWTVMKK3N0YXRpYyBpbnQgZGlyX3NvcnQgPSAtMTsg ICAgICAgICAgICAgICAvKiBOYW1lcyBhcmUgYWxyZWFkeSBzb3J0ZWQgaW4gVk1TICovCitzdGF0 aWMgaW50IGRpcl9ydnJzID0gLTE7CisjZWxzZQorc3RhdGljIGludCBkaXJfc29ydCA9ICAxOyAg ICAgICAgICAgICAgIC8qIFNvcnQgYnkgZGVmYXVsdCAqLworc3RhdGljIGludCBkaXJfcnZycyA9 ICAwOyAgICAgICAgICAgICAgIC8qIE5vdCBpbiByZXZlcnNlICovCisjZW5kaWYgLyogVk1TICov CitzdGF0aWMgaW50IGRpcl9za2V5ID0gRElSU19OTTsgICAgICAgICAgLyogQnkgbmFtZSAqLwor I2lmZGVmIFJFQ1VSU0lWRQorc3RhdGljIGludCBkaXJfcmVjdSA9IC0xOworI2VuZGlmIC8qIFJF Q1VSU0lWRSAqLworc3RhdGljIGludCBkaXJfbW9kZSA9IC0xOworc3RhdGljIGludCBkaXJfc2hv dyA9IC0xOyAgICAgICAgICAgICAgIC8qIFNob3cgYWxsIGZpbGVzIGJ5IGRlZmF1bHQgKi8KK2lu dCBkaXJfZG90cyA9ICAtMTsJCQkvKiBFeGNlcHQgZG90IGZpbGVzICovCitpbnQgZGlyX2JhY2sg PSAgMTsKK2ludCBkaXJfaGVhZCA9ICAwOworc3RhdGljIGNoYXIgKiBkaXJtc2cgPSBOVUxMOwor c3RhdGljIGludCBkaXJtc2dsZW4gPSAwOworCisjaWZuZGVmIE5PU0hPVworVk9JRAorc2hvd2Rp cm9wdHMoKSB7CisgICAgaW50IHggPSAwOworICAgIGV4dGVybiBpbnQgb3B0bGluZXM7CisgICAg cHJ0b3B0KCZvcHRsaW5lcywiRElSRUNUT1JZIik7CisgICAgaWYgKGRpcl9zaG93ID4gMCkgewor ICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLChkaXJfc2hvdyA9PSAxKSA/ICIvRklMRVMiIDoKKyAg ICAgICAgICAgICAgICgoZGlyX3Nob3cgPT0gMikgPyAiL0RJUkVDVE9SSUVTIiA6ICIvQUxMIikp OworICAgICAgICB4Kys7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywi L0FMTCIpOworICAgICAgICB4Kys7CisgICAgfQorICAgIGlmIChkaXJfdmVyYiA+IC0xKSB7Cisg ICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX3ZlcmIgPyAiL1ZFUkJPU0UiIDogIi9CUklFRiIp OworICAgICAgICB4Kys7CisgICAgfQorICAgIGlmIChkaXJfcGFnZSA+IC0xKSB7CisgICAgICAg IHBydG9wdCgmb3B0bGluZXMsZGlyX3BhZ2UgPyAiL1BBR0UiIDogIi9OT1BBR0UiKTsKKyAgICAg ICAgeCsrOworICAgIH0KKyAgICBpZiAoZGlyX2RhdGUgPiAtMSkgeworICAgICAgICBwcnRvcHQo Jm9wdGxpbmVzLGRpcl9kYXRlID8gIi9FTkdMSVNIREFURSIgOiAiL0lTT0RBVEUiKTsKKyAgICAg ICAgeCsrOworICAgIH0KKyAgICBpZiAoZGlyX2RvdHMgPiAtMSkgeworICAgICAgICBwcnRvcHQo Jm9wdGxpbmVzLGRpcl9kb3RzID8gIi9ET1RGSUxFUyIgOiAiL05PRE9URklMRVMiKTsKKyAgICAg ICAgeCsrOworICAgIH0KKyAgICBpZiAoZGlyX2JhY2sgPiAtMSkgeworICAgICAgICBwcnRvcHQo Jm9wdGxpbmVzLGRpcl9iYWNrID8gIi9CQUNLVVAiIDogIi9OT0JBQ0tVUCIpOworICAgICAgICB4 Kys7CisgICAgfQorICAgIGlmIChkaXJfaGVhZCA+IC0xKSB7CisgICAgICAgIHBydG9wdCgmb3B0 bGluZXMsZGlyX2hlYWQgPyAiL0hFQURJTkciIDogIi9OT0hFQURJTkciKTsKKyAgICAgICAgeCsr OworICAgIH0KKyNpZmRlZiBSRUNVUlNJVkUKKyAgICBpZiAoZGlyX3JlY3UgPiAtMSkgeworICAg ICAgICBwcnRvcHQoJm9wdGxpbmVzLGRpcl9yZWN1ID8gIi9SRUNVUlNJVkUiIDogIi9OT1JFQ1VS U0lWRSIpOworICAgICAgICB4Kys7CisgICAgfQorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAg IGlmIChkaXJfbW9kZSA+IC0xKSB7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsZGlyX21vZGUg PyAiL1hGRVJNT0RFIiA6ICIvTk9YRkVSTU9ERSIpOworICAgICAgICB4Kys7CisgICAgfQorICAg IGlmIChkaXJfc29ydCA9PSAwKSB7CisgICAgICAgIHgrKzsKKyAgICAgICAgcHJ0b3B0KCZvcHRs aW5lcywiL05PU09SVCAiKTsKKyAgICB9IGVsc2UgaWYgKGRpcl9zb3J0ID4gMCkgeworICAgICAg ICB4Kys7CisgICAgICAgIGlmIChkaXJfc2tleSA9PSBESVJTX05NKSBzID0gIi9TT1JUOk5BTUUi OworICAgICAgICBlbHNlIGlmIChkaXJfc2tleSA9PSBESVJTX1NaKSBzID0gIi9TT1JUOlNJWkUi OworICAgICAgICBlbHNlIGlmIChkaXJfc2tleSA9PSBESVJTX0RUKSBzID0gIi9TT1JUOkRBVEUi OworICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLHMpOworICAgIH0KKyAgICBpZiAoZGlyX3J2cnMg PiAtMSkgeworICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLGRpcl9ydnJzID8gIi9SRVZFUlNFIiA6 ICIvQVNDRU5ESU5HIik7CisgICAgICAgIHgrKzsKKyAgICB9CisgICAgaWYgKGRpcl9tc2cgPiAt MSkgeworICAgICAgICBpZiAoZGlyX21zZyA9PSAwKSB7CisgICAgICAgICAgICBwcnRvcHQoJm9w dGxpbmVzLCIvTk9NRVNTQUdFIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBja21h a21zZyh0bXBidWYsVE1QQlVGU0laLCIvTUVTU0FHRTp7IixkaXJtc2csIn0iLE5VTEwpOworICAg ICAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcyx0bXBidWYpOworICAgICAgICB9CisgICAgICAgIHgr KzsKKyAgICB9CisgICAgaWYgKCF4KSBwcnRvcHQoJm9wdGxpbmVzLCIobm8gb3B0aW9ucyBzZXQp Iik7CisgICAgcHJ0b3B0KCZvcHRsaW5lcywiIik7Cit9CisjZW5kaWYgLyogTk9TSE9XICovCisK K2ludAorc2V0ZGlyb3B0cygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBESVJF Q1RPUlkgb3B0aW9uIGRlZmF1bHRzICovCisgICAgaW50IHhiID0gLTEsIHh2ID0gLTEsIHhwID0g LTEsIHhkID0gLTEsIHhoID0gLTEsIHhmID0gLTE7CisgICAgaW50IHhrID0gLTEsIHhyID0gLTEs IHhzID0gLTEsIHh4ID0gLTEsIHhtID0gLTEsIHhhID0gLTEsIHhnID0gLTE7CisgICAgaW50IGdl dHZhbDsKKyAgICBjaGFyIGM7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCh5ID0gY21z d2koZGlyc3d0YWIsbmRpcnN3dGFiLCJTd2l0Y2giLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisgICAg ICAgICAgICBpZiAoeSA9PSAtMykKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgfQorICAgICAgICBjID0gY21n YnJrKCk7CisgICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYg IShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dp dGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9B UkcpKSB7CisgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1 bWVudFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIHN3 aXRjaCAoeSkgeworICAgICAgICAgIGNhc2UgRElSX0JSRjogeHYgPSAwOyBicmVhazsKKyAgICAg ICAgICBjYXNlIERJUl9WUkI6IHh2ID0gMTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfUEFH OiB4cCA9IDE7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX05PUDogeHAgPSAwOyBicmVhazsK KyAgICAgICAgICBjYXNlIERJUl9JU086IHhkID0gMDsgYnJlYWs7CisgICAgICAgICAgY2FzZSBE SVJfREFUOiB4ZCA9IDE7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0hERzogeGggPSAxOyBi cmVhazsKKyAgICAgICAgICBjYXNlIERJUl9OT0g6IHhoID0gMDsgYnJlYWs7CisgICAgICAgICAg Y2FzZSBESVJfRE9UOiB4ZiA9IDE7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX05PRDogeGYg PSAwOyBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9BTEw6IHhhID0gMzsgYnJlYWs7CisgICAg ICAgICAgY2FzZSBESVJfRElSOiB4YSA9IDI7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0ZJ TDogeGEgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9TUlQ6CisgICAgICAgICAgICB4 ID0gRElSU19OTTsKKyAgICAgICAgICAgIGlmIChnZXR2YWwpCisgICAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KGRpcnNvcnQsbmRpcnNvcnQsIlNvcnQga2V5IiwibmFtZSIseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgeGsgPSB4OworICAg ICAgICAgICAgeHMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJf Tk9TOiB4cyA9IDA7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0FTQzogeHggPSAwOyBicmVh azsKKyAgICAgICAgICBjYXNlIERJUl9EU0M6IHh4ID0gMTsgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBESVJfUkVDOiB4ciA9IDE7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX05PUjogeHIgPSAw OyBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9UWVA6IHhtID0gMTsgYnJlYWs7CisgICAgICAg ICAgY2FzZSBESVJfTk9UOiB4bSA9IDA7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0JVUDog eGIgPSAxOyBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9OT0I6IHhiID0gMDsgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBESVJfTk9NOiB4ZyA9IDA7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElS X01TRzoKKyAgICAgICAgICAgIGlmIChnZXR2YWwpCisgICAgICAgICAgICAgIGlmICgoeCA9IGNt ZmxkKCJNZXNzYWdlIHRvIGFwcGVuZCB0byBlYWNoIGxpbmUiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICB4ZyA9 IDE7CisgICAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLGJyc3RyaXAocyksVE1QQlVGU0laKTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBwcmlu dGYoIj9UaGlzIG9wdGlvbiBjYW4gbm90IGJlIHNldFxuIik7CisgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICB9CisgICAgfQorICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAgICAg ICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KKyAgICAgIHJldHVybih4KTsKKyAgICBpZiAo eHYgPiAtMSkgZGlyX3ZlcmIgPSB4djsgICAgICAgICAvKiBDb25maXJtZWQsIHNhdmUgZGVmYXVs dHMgKi8KKyAgICBpZiAoeHAgPiAtMSkgZGlyX3BhZ2UgPSB4cDsKKyAgICBpZiAoeGQgPiAtMSkg ZGlyX2RhdGUgPSB4ZDsKKyAgICBpZiAoeGggPiAtMSkgZGlyX2hlYWQgPSB4aDsKKyAgICBpZiAo eHMgPiAtMSkgZGlyX3NvcnQgPSB4czsKKyAgICBpZiAoeGsgPiAtMSkgZGlyX3NrZXkgPSB4azsK KyAgICBpZiAoeHggPiAtMSkgZGlyX3J2cnMgPSB4eDsKKyAgICBpZiAoeGYgPiAtMSkgZGlyX2Rv dHMgPSB4ZjsKKyAgICBpZiAoeGEgPiAtMSkgZGlyX3Nob3cgPSB4YTsKKyAgICBpZiAoeG0gPiAt MSkgZGlyX21vZGUgPSB4bTsKKyAgICBpZiAoeGIgPiAtMSkgZGlyX2JhY2sgPSB4YjsKKyNpZmRl ZiBSRUNVUlNJVkUKKyAgICBpZiAoeHIgPiAtMSkgZGlyX3JlY3UgPSB4cjsKKyNlbmRpZiAvKiBS RUNVUlNJVkUgKi8KKyAgICBpZiAoeGcgPiAtMSkgZGlyX21zZyAgPSB4ZzsKKyAgICBpZiAoeGcg PiAwKQorICAgICAgbWFrZXN0cigmZGlybXNnLHRtcGJ1Zik7CisgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKK30KKworaW50Citkb215ZGlyKGN4KSBpbnQgY3g7IHsJCQkvKiBJbnRlcm5hbCBESVJF Q1RPUlkgY29tbWFuZCAqLworICAgIGV4dGVybiBjaGFyICptb250aHNbXTsKKyNpZmRlZiBWTVMK KyAgICBfUFJPVE9UWVAoIGNoYXIgKiB6cmVsbmFtZSwgKGNoYXIgKixjaGFyICopICk7CisgICAg Y2hhciAqIGNkcCA9IE5VTEw7CisjZW5kaWYgLyogVk1TICovCisKKyAgICBjaGFyIG5hbWVbQ0tN QVhQQVRIKzFdLCBvdXRmaWxlW0NLTUFYUEFUSCsxXSwgKnAgPSBOVUxMLCBjID0gTlVMOworICAg IGNoYXIgbGluZWJ1ZltDS01BWFBBVEgrMjU2XTsKKyAgICBjaGFyICogbXN0ciA9IE5VTEwsICog ZHN0ciA9IE5VTEwsICogczIgPSBOVUxMLCAqIGN2ID0gTlVMTDsKKyAgICBDS19PRkZfVCBsZW4g PSAoQ0tfT0ZGX1QpMCwgbmJ5dGVzID0gKENLX09GRl9UKTA7CisgICAgQ0tfT0ZGX1QgbWluc2l6 ZSA9IChDS19PRkZfVCktMSwgbWF4c2l6ZSA9IChDS19PRkZfVCktMTsKKyAgICBsb25nIG5kaXJz ID0gMCwgbmZpbGVzID0gMCwgbm1hdGNoZXMgPSAwOworICAgIGludCB2ZXJib3NlID0gMCwgd2ls ZCA9IDAsIHBhZ2UgPSAwLCBuID0gMCwgZW5nZGF0ZSA9IDAsIHN1bW1hcnkgPSAwOworICAgIGlu dCBoZWFkaW5nID0gMCwgeHNvcnQgPSAwLCByZXZlcnNlID0gMCwgc29ydGJ5ID0gMCwgbXNnID0g MDsKKyAgICBpbnQgaywgaSA9IDAsIHggPSAwLCBueCA9IDAsIHNrZXkgPSAwLCBkbGVuID0gMCwg aXRzYWRpciA9IDA7CisgICAgaW50IHNob3cgPSAzLCB4ZmVybW9kID0gMCwgYmFja3VwID0gMSwg cmMgPSAwLCBnZXR2YWwgPSAwOworICAgIGludCB0b3VjaCA9IDA7CisgICAgaW50IGZzID0gMDsK KyAgICBpbnQgbXVsdGlwbGUgPSAwOworICAgIGludCBjbWlmbjEgPSAxLCBjbWlmbjIgPSAwOwor ICAgIGludCBkaXJfdG9wID0gMCwgZGlyX2NvdSA9IDA7CisgICAgaW50IGRvbnRzaG93bGlua3Mg PSAwOworICAgIGludCBkb250Zm9sbG93bGlua3MgPSAwOworICAgIGludCBhcnJheWluZGV4ID0g LTE7CisgICAgc3RydWN0IEZEQiBzdywgZmksIGZsOworICAgIGNoYXIgZGJ1ZlszMl0sIHhidWZb MzJdOworCisjaWZuZGVmIE5PU1BMCisgICAgY2hhciBhcnJheSA9IE5VTDsKKyAgICBjaGFyICoq IGFwID0gTlVMTDsKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIGNoYXIKKyAgICAgICogZGlyX2Fm dCA9IE5VTEwsCisgICAgICAqIGRpcl9iZWYgPSBOVUxMLAorICAgICAgKiBkaXJfbmFmID0gTlVM TCwKKyAgICAgICogZGlyX25iZiA9IE5VTEwsCisgICAgICAqIGRpcl9leGMgPSBOVUxMOworICAg IGNoYXIgKiB4bGlzdFsxNl07CisKKyAgICBkZWJ1ZyhGMTAxLCJkb215ZGlyIGN4IiwiIixjeCk7 CisKKyAgICBnX21hdGNoZG90ID0gbWF0Y2hkb3Q7ICAgICAgICAgICAgICAvKiBTYXZlIGdsb2Jh bCBtYXRjaGRvdCBzZXR0aW5nICovCisjaWZkZWYgQ09NTUVOVAorICAgIG5vbGlua3MgPSAyOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIChpdCBzaG91bGQgYWxyZWFkeSBiZSAyKSAqLworI2Vu ZGlmCS8qIENPTU1FTlQgKi8KKyAgICBvdXRmaWxlWzBdID0gTlVMOyAgICAgICAgICAgICAgICAg ICAvKiBObyBvdXRwdXQgZmlsZSB5ZXQgKi8KKworICAgIGlmIChvZnAgIT0gc3Rkb3V0KSB7ICAg ICAgICAgICAgICAgIC8qIEluIGNhc2Ugb2YgcHJldmlvdXMgaW50ZXJydXB0aW9uICovCisgICAg ICAgIGlmIChvZnApIGZjbG9zZShvZnApOworICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAgfQor ICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB4bGlzdFtpXSA9IE5VTEw7CisKKyAgICBkaXJf dG9wID0gMDsKKyAgICBuYW1lWzBdID0gTlVMOworICAgIGZyZWVkaXJsaXN0KCk7ICAgICAgICAg ICAgICAgICAgICAgIC8qIEluIGNhc2Ugbm90IGZyZWVkIGxhc3QgdGltZSAqLworICAgIHBhZ2Ug ICAgICA9IGRpcl9wYWdlID4gLTEgPyBkaXJfcGFnZSA6IHhhc2ttb3JlOyAvKiBTZXQgb3B0aW9u IGRlZmF1bHRzICovCisgICAgZW5nZGF0ZSAgID0gZGlyX2RhdGUgPiAtMSA/IGRpcl9kYXRlIDog MDsKKyAgICB2ZXJib3NlICAgPSBkaXJfdmVyYiA+IC0xID8gZGlyX3ZlcmIgOiAxOworICAgIGhl YWRpbmcgICA9IGRpcl9oZWFkID4gLTEgPyBkaXJfaGVhZCA6IDA7CisgICAgeHNvcnQgICAgID0g ZGlyX3NvcnQgPiAtMSA/IGRpcl9zb3J0IDogMDsKKyAgICBzb3J0YnkgICAgPSBkaXJfc2tleSA+ IC0xID8gZGlyX3NrZXkgOiAwOworICAgIHJldmVyc2UgICA9IGRpcl9ydnJzID4gLTEgPyBkaXJf cnZycyA6IDA7CisgICAgbXNnICAgICAgID0gZGlyX21zZyAgPiAtMSA/IGRpcl9tc2cgIDogMDsK KyNpZmRlZiBVTklYT1JPU0sKKyAgICBpZiAoZGlyX2RvdHMgPiAtMSkgbWF0Y2hkb3QgPSBkaXJf ZG90czsKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyAgICB4ZmVybW9kICAgPSBkaXJfbW9kZSA+ IC0xID8gZGlyX21vZGUgOiAwOworICAgIGJhY2t1cCAgICA9IGRpcl9iYWNrID4gLTEgPyBkaXJf YmFjayA6IDE7CisjaWZkZWYgUkVDVVJTSVZFCisgICAgcmVjdXJzaXZlID0gZGlyX3JlY3UgPiAt MSA/IGRpcl9yZWN1IDogMDsKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICBzaG93ICAgICAg PSBkaXJfc2hvdyA+IC0xID8gZGlyX3Nob3cgOiAzOworCisgICAgaWYgKGN4ID09IFhYV0RJUikg ewkJCS8qIFdESVJFQ1RPUlkgKi8KKwlkZWJ1ZyhGMTAwLCJkb215ZGlyIFdESVJFQ1RPUlkiLCIi LDApOworCXJldmVyc2UgPSAxOwkJCS8qIFJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciAqLwor CXhzb3J0ID0gMTsKKwlzb3J0YnkgPSBESVJTX0RUOworICAgIH0gZWxzZSBpZiAoY3ggPT0gWFhI RElSKSB7CQkvKiBIRElSRUNUT1JZICovCisJZGVidWcoRjEwMCwiZG9teWRpciBIRElSRUNUT1JZ IiwiIiwwKTsKKwlyZXZlcnNlID0gMTsJCQkvKiBSZXZlcnNlIG9yZGVyIGJ5IHNpemUgKi8KKwl4 c29ydCA9IDE7CisJc29ydGJ5ID0gRElSU19TWjsKKyAgICB9IGVsc2UgaWYgKGN4ID09IFhYVE9V QykgeworCXRvdWNoID0gMTsKKwl2ZXJib3NlID0gMDsKKyAgICB9CQorCisjaWZkZWYgQ0tfVFRH V1NJWgorI2lmZGVmIE9TMgorICAgIHR0Z2N3c3ooKTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNjcmVlbiBsZW5ndGggZm9yIG1vcmUtcHJvbXB0aW5nICovCisjZWxzZSAvKiBPUzIgKi8K KyAgICAvKiBDaGVjayB3aGV0aGVyIHdpbmRvdyBzaXplIGNoYW5nZWQgKi8KKyAgICBpZiAodHRn d3NpeigpID4gMCkgeworICAgICAgICBpZiAodHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsK KyAgICAgICAgICAgIGNtZF9yb3dzID0gdHRfcm93czsKKyAgICAgICAgICAgIGNtZF9jb2xzID0g dHRfY29sczsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBD S19UVEdXU0laICovCisKKyAgICBkaXJhY3RpdmUgPSAxOworICAgIGNtaWZuMSA9IG5vbGlua3Mg fCAxOyAgICAgICAgICAgICAgIC8qIDEgPSBmaWxlcyBvciBkaXJlY3RvcmllcyAqLworICAgIGNt aWZuMiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPSBub3QgZGlyZWN0b3JpZXMg b25seSAqLworCisgIGFnYWluOgorCisgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01L RVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJFbnRlciBv ciBSZXR1cm4gdG8gY29uZmlybSB0aGUgY29tbWFuZCwgb3JcblwKKyBmaWxlIHNwZWNpZmljYXRp b24sIG9yIHN3aXRjaCIsCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIG5kaXJzd3RhYiwgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgIDQs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBj bXN3aSAqLworICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nl c3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgZGlyc3d0YWIsICAgICAgICAgICAgICAgICAg ICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICZmaSAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOworICAgIGNtZmRi aSgmZmksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJuZCBGREIgLSBmaWxlc3BlYyB0byBt YXRjaCAqLworICAgICAgICAgICBfQ01JRkksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2Rl ICovCisgICAgICAgICAgICJGaWxlIHNwZWNpZmljYXRpb24iLCAgICAgICAgLyogaGxwbXNnICov CisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgICAgIisiLCAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBEZWZhdWx0IGZpbGVzcGVjIGlzIHdpbGRjYXJkICovCisjZWxzZSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhhdCBtYXRjaGVzIGFsbCBmaWxlcy4uLiAqLwor I2lmZGVmIFZNUworICAgICAgICAgICAiKi4qIiwKKyNlbHNlCisgICAgICAgICAgICIqIiwKKyNl bmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAg ICAgIGNtaWZuMSwKKyAgICAgICAgICAgY21pZm4yLCAgICAgICAgICAgICAgICAgICAgICAvKiAx ID0gb25seSBkaXJzOyAwIGZpbGVzIG9yIGRpcnMgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsCisg ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICZmbAorICAgICAgICAgICApOworICAgIGNtZmRi aSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIHRoYXQgZG9lc24ndCBt YXRjaCAqLworICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2Rl ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICov CisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLwor ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBk YXRhICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg bnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICB4eHN0cmluZywKKyAgICAg ICAgICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAgICAgICApOworICAgIHdoaWxlICgx KSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAq LworICAgICAgICB4ID0gY21mZGIoJnN3KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0 aGluZyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJkb215ZGlyIGNtZmRiIiwiIix4KTsKKyAgICAg ICAgaWYgKHggPCAwKQorICAgICAgICAgIHJldHVybih4KTsgCisgICAgICAgIGlmIChjbXJlc3Vs dC5mY29kZSAhPSBfQ01LRVkpICAgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLworICAg ICAgICAgIGJyZWFrOworICAgICAgICBjID0gY21nYnJrKCk7CisgICAgICAgIGlmICgoZ2V0dmFs ID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsK KyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1l bnRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorCWsgPSBjbXJlc3Vs dC5ucmVzdWx0OworICAgICAgICBpZiAoIWdldHZhbCAmJgorCSAgICAoY21na3dmbGdzKCkgJiBD TV9BUkcpICYmIGsgIT0gRElSX1RPUCAmJiBrICE9IERJUl9DT1UpIHsKKyAgICAgICAgICAgIHBy aW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAg IHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChrKSB7CisgICAgICAgICAg Y2FzZSBESVJfQ09VOiB7CisgICAgICAgICAgICAgIGRpcl9jb3UrKzsKKyAgICAgICAgICAgICAg aWYgKGdldHZhbCkgeworICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlZhcmlhYmxl IGZvciByZXN1bHQiLCIiLCZzLE5VTEwpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJmN2LHMpOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIERJUl9C UkY6IHZlcmJvc2UgPSAwOyBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9WUkI6IHZlcmJvc2Ug PSAxOyBicmVhazsKKyNpZmRlZiBDS19UVEdXU0laCisgICAgICAgICAgY2FzZSBESVJfUEFHOiBw YWdlID0gMTsgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfTk9QOiBwYWdlID0gMDsgICAg YnJlYWs7CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgIGNhc2UgRElSX0lTTzog ZW5nZGF0ZSA9IDA7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0RBVDogZW5nZGF0ZSA9IDE7 IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0hERzogaGVhZGluZyA9IDE7IGJyZWFrOworICAg ICAgICAgIGNhc2UgRElSX05PSDogaGVhZGluZyA9IDA7IGJyZWFrOworI2lmZGVmIFVOSVhPUk9T SworICAgICAgICAgIGNhc2UgRElSX0RPVDogbWF0Y2hkb3QgPSAxOyBicmVhazsKKyAgICAgICAg ICBjYXNlIERJUl9OT0Q6IG1hdGNoZG90ID0gMDsgYnJlYWs7CisjZW5kaWYgLyogVU5JWE9ST1NL ICovCisgICAgICAgICAgY2FzZSBESVJfQUxMOgorICAgICAgICAgICAgc2hvdyA9IDM7CisgICAg ICAgICAgICBjbWlmbjEgfD0gMTsKKyAgICAgICAgICAgIGNtaWZuMiA9IDA7CisgICAgICAgICAg ICBnb3RvIGFnYWluOworICAgICAgICAgIGNhc2UgRElSX0RJUjoKKyAgICAgICAgICAgIHNob3cg PSAyOworICAgICAgICAgICAgY21pZm4xIHw9IDE7CisgICAgICAgICAgICBjbWlmbjIgPSAxOwor ICAgICAgICAgICAgZ290byBhZ2FpbjsKKyAgICAgICAgICBjYXNlIERJUl9GSUw6CisgICAgICAg ICAgICBzaG93ID0gMTsKKyAgICAgICAgICAgIGNtaWZuMSAmPSB+KDEpOworICAgICAgICAgICAg Y21pZm4yID0gMDsKKyAgICAgICAgICAgIGdvdG8gYWdhaW47CisgICAgICAgICAgY2FzZSBESVJf U1JUOgorICAgICAgICAgICAgeCA9IERJUlNfTk07CisgICAgICAgICAgICBpZiAoYyA9PSAnOicg fHwgYyA9PSAnPScpCisgICAgICAgICAgICAgIGlmICgoeCA9IGNta2V5KGRpcnNvcnQsbmRpcnNv cnQsIlNvcnQga2V5IiwibmFtZSIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICAgICAgeHNvcnQgPSAxOworICAgICAgICAgICAgc29ydGJ5ID0geDsK KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBESVJfQlVQOiBiYWNrdXAgID0g MTsgZnMrKzsgICBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9OT0I6IGJhY2t1cCAgPSAwOyBm cysrOyAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBESVJfTk9TOiB4c29ydCA9IDA7ICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIERJUl9BU0M6IHJldmVyc2UgPSAwOyAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgRElSX0RTQzogcmV2ZXJzZSA9IDE7ICAgYnJlYWs7CisjaWZkZWYgUkVDVVJT SVZFCisgICAgICAgICAgY2FzZSBESVJfUkVDOiByZWN1cnNpdmUgPSAxOyBkaXJhY3RpdmUgPSAx OyBicmVhazsKKyAgICAgICAgICBjYXNlIERJUl9OT1I6IHJlY3Vyc2l2ZSA9IDA7IGRpcmFjdGl2 ZSA9IDA7IGJyZWFrOworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgICAgICAgIGNhc2UgRElS X1RZUDogeGZlcm1vZCA9IDE7ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJfTk9UOiB4ZmVy bW9kID0gMDsgICBicmVhazsKKworI2lmZGVmIENLU1lNTElOSworICAgICAgICAgIGNhc2UgRElS X0xOSzogICAgICAgICAgICAgICAgIC8qIEZvbGxvdyBsaW5rcyAqLworI2lmZGVmIENPTU1FTlQK KwkgICAgLyogQSBjb21tYW5kIHN3aXRjaCBzaG91bGRuJ3QgYmUgc2V0dGluZyBhIGdsb2JhbCB2 YWx1ZSEgKi8KKyAgICAgICAgICAgIG5vbGlua3MgPSAwOworI2VuZGlmCS8qIENPTU1FTlQgKi8K KyAgICAgICAgICAgIGNtaWZuMSAmPSB+KDIpOworCSAgICBkb250Zm9sbG93bGlua3MgPSAwOwor ICAgICAgICAgICAgZ290byBhZ2FpbjsKKyAgICAgICAgICBjYXNlIERJUl9OTEs6ICAgICAgICAg ICAgICAgICAvKiBEb24ndCBmb2xsb3cgbGlua3MgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAg ICAgICBub2xpbmtzID0gMjsKKyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbWlm bjEgJj0gfigyKTsKKwkgICAgZG9udGZvbGxvd2xpbmtzID0gMTsKKyAgICAgICAgICAgIGdvdG8g YWdhaW47CisJICBjYXNlIERJUl9OT0w6CQkJLyogRG9uJ3Qgc2hvdyBsaW5rcyBhdCBhbGwgKi8K KwkgICAgZG9udHNob3dsaW5rcyA9IDE7CisJICAgIGdvdG8gYWdhaW47CisjZW5kaWYgLyogQ0tT WU1MSU5LICovCisKKyAgICAgICAgICBjYXNlIERJUl9OT006IG1zZyAgICAgPSAwOyAgIGJyZWFr OworICAgICAgICAgIGNhc2UgRElSX01TRzoKKyAgICAgICAgICAgIGlmIChjID09ICc6JyB8fCBj ID09ICc9JykKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIk1lc3NhZ2UgdG8gYXBwZW5k IHRvIGVhY2ggbGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkgPCAwKQorICAgICAgICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIG1zZyA9IDE7CisgICAgICAgICAgICBja3N0 cm5jcHkodG1wYnVmLGJyc3RyaXAocyksVE1QQlVGU0laKTsKKyAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgICAgY2FzZSBESVJfU01BOgorICAgICAgICAgIGNhc2UgRElSX0xBUjogeworCSAg ICAgIENLX09GRl9UIHk7CisJICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICAgIGlmICgo eCA9IGNtbnVtdygiRmlsZSBzaXplIGluIGJ5dGVzIiwiMCIsMTAsJnkseHhzdHJpbmcpKSA8IDAp CisJCXJldHVybih4KTsKKwkgICAgICBmcysrOworCSAgICAgIHNob3cgPSAxOworCSAgICAgIHN3 aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworCQljYXNlIERJUl9TTUE6IG1pbnNpemUgPSB5OyBi cmVhazsKKwkJY2FzZSBESVJfTEFSOiBtYXhzaXplID0geTsgYnJlYWs7CisJICAgICAgfQorCSAg ICAgIGJyZWFrOworCSAgfQorCSAgY2FzZSBESVJfVE9QOgorCSAgICBkaXJfdG9wID0gMTA7CisJ ICAgIGlmICghZ2V0dmFsKSBicmVhazsKKwkgICAgICBpZiAoKHggPSBjbW51bSgiSG93IG1hbnkg bGluZXMgdG8gc2hvdyIsIjEwIiwxMCwmeSx4eHN0cmluZykpPCAwKQorCQlyZXR1cm4oeCk7CisJ ICAgICAgZGlyX3RvcCA9IHk7CisJICAgICAgYnJlYWs7CisKKyNpZm5kZWYgTk9TUEwKKyAgICAg ICAgICBjYXNlIERJUl9BUlI6CisgICAgICAgICAgICBpZiAoYyAhPSAnOicgJiYgYyAhPSAnPScp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4iKTsKKyAg ICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KCh4ID0gY21mbGQoIkFycmF5IG5hbWUgKGEgc2luZ2xlIGxldHRlciB3aWxsIGRvKSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg ICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoISpzKSB7 CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7CisgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMyID0g czsKKyAgICAgICAgICAgIGlmICgqcyA9PSBDTURRKSBzKys7CisgICAgICAgICAgICBpZiAoKnMg PT0gJyYnKSBzKys7CisgICAgICAgICAgICBpZiAoIWlzYWxwaGEoKnMpKSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/QmFkIGFycmF5IG5hbWUgLSBcIiVzXCJcbiIsczIpOworICAgICAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcnJheSA9ICpz Kys7CisgICAgICAgICAgICBpZiAoaXN1cHBlcihhcnJheSkpIGFycmF5ID0gdG9sb3dlcihhcnJh eSk7CisgICAgICAgICAgICBpZiAoKnMgJiYgKCpzICE9ICdbJyB8fCAqKHMrMSkgIT0gJ10nKSkg eworICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBhcnJheSBuYW1lIC0gXCIlc1wiXG4iLHMy KTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgYnJlYWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICBjYXNlIERJUl9BRlQ6Cisg ICAgICAgICAgY2FzZSBESVJfQkVGOgorICAgICAgICAgIGNhc2UgRElSX05BRjoKKyAgICAgICAg ICBjYXNlIERJUl9OQkY6CisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAg ICAgICBpZiAoKHggPSBjbWRhdGUoIkZpbGUtdGltZSIsIiIsJnMsMCx4eHN0cmluZykpIDwgMCkg eworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiP0RhdGUtdGltZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJjID0g LTk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICByYyA9IHg7Cisg ICAgICAgICAgICAgICAgZ290byB4ZG9teWRpcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGZzKys7CisgICAgICAgICAgICBzd2l0Y2ggKGspIHsKKyAgICAgICAgICAgICAgY2FzZSBESVJf QUZUOiBtYWtlc3RyKCZkaXJfYWZ0LHMpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBESVJf QkVGOiBtYWtlc3RyKCZkaXJfYmVmLHMpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBESVJf TkFGOiBtYWtlc3RyKCZkaXJfbmFmLHMpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBESVJf TkJGOiBtYWtlc3RyKCZkaXJfbmJmLHMpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRElSX0VYQzoKKyAgICAgICAgICAgIGlmICghZ2V0 dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAg ICAgICAgICAgICAgIHByaW50ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOworICAgICAgICAgICAg ICAgICAgICByYyA9IC05OworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg ICAgcmMgPSB4OworICAgICAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBmcysrOworICAgICAgICAgICAgbWFrZXN0cigmZGlyX2V4YyxzKTsKKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBESVJfU1VNOgorICAgICAgICAgICAg c3VtbWFyeSA9IDE7IGJyZWFrOworCisgICAgICAgICAgY2FzZSBESVJfQklOOiB7CisgICAgICAg ICAgICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIHR4dGJpbltdOworICAgICAgICAgICAgICBleHRl cm4gaW50IHhmaWxldHlwZTsKKyAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAg ICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0eHRiaW4sMywiIiwiYWxsIix4eHN0cmluZykpIDwg MCkgeworICAgICAgICAgICAgICAgICAgcmMgPSB4OworICAgICAgICAgICAgICAgICAgZ290byB4 ZG9teWRpcjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoeCA9PSAyKSB7Cisg ICAgICAgICAgICAgICAgICB4ZmlsZXR5cGUgPSAtMTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgIHhmaWxldHlwZSA9IHg7CisgICAgICAgICAgICAgICAgICBmcyA9 IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQor ICAgICAgICAgIGNhc2UgRElSX09VVDoKKyAgICAgICAgICAgIGlmICgoeCA9IGNtb2ZpKCJGaWxl IGZvciBkaXJlY3RvcnkgbGlzdGluZyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgICAgIGNrc3RybmNweShvdXRmaWxlLHMsQ0tNQVhQQVRI KzEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgcHJpbnRmKCI/U29ycnksIG5vdCBpbXBsZW1lbnRlZCB5ZXQgLSBcIiVzXCJcbiIsIGF0bWJ1 Zik7CisgICAgICAgICAgICBnb3RvIHhkb215ZGlyOworICAgICAgICB9CisgICAgfQorICAgIGNr c3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsgLyogU2FmZSBjb3B5IG9m IGZpbGVzcGVjICovCisKKy8qIF5eXiBTVEFSVCBNVUxUSVBMRSAqLworICAgIAorICAgIHdoaWxl ICghdG91Y2gpIHsKKwl4ID0gY21mbGQoIkFub3RoZXIgZmlsZXNwZWMgb3IgRW50ZXIiLCIiLCZz LHh4c3RyaW5nKTsKKwlpZiAoeCA9PSAtMykKKwkgIGJyZWFrOworCWlmICh4IDwgMCkKKwkgIHJl dHVybih4KTsKKwlja3N0cm5jYXQobGluZSwiLCIsTElOQlVGU0laKTsKKwlja3N0cm5jYXQobGlu ZSxzLExJTkJVRlNJWik7CisJbXVsdGlwbGUrKzsKKyAgICB9CisgICAgY2ttYWttc2codG1wYnVm LFRNUEJVRlNJWiwieyIsbGluZSwifSIsTlVMTCk7CisgICAgY2tzdHJuY3B5KGxpbmUsdG1wYnVm LExJTkJVRlNJWik7CisgICAgY21yZXN1bHQubnJlc3VsdCA9IDE7CisgICAgY21yZXN1bHQuZmNv ZGUgPSBfQ01JRkk7CisKKy8qIF5eXiBFTkQgTVVMVElQTEUgKi8KKworICAgIHMgPSBsaW5lOwor CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAgICAgICAgICAgICAgLyogR2V0IGNvbmZpcm1h dGlvbiAqLworICAgICAgcmV0dXJuKHgpOworCisvKgorICBDb21tYW5kIGlzIFRPVUNIIGFuZCBm aWxlIGRvZXNuJ3QgZXhpc3QuCisqLworICAgIGlmICh0b3VjaCkgewkJCS8qIFRPVUNIICovCisJ aWYgKChjbXJlc3VsdC5mY29kZSA9PSBfQ01JRkkgJiYgemNoa2kocykgPT0gKENLX09GRl9UKS0x KSkgeworCSAgICBGSUxFICogZnA7CisJICAgIHMgPSBicnN0cmlwKHMpOworCSAgICBpZiAoIWlz d2lsZChzKSkgeworI2lmZGVmIFVOSVgKKwkJaWYgKHNbMF0gPT0gJ34nKQorCQkgIHMgPSB0aWxk ZV9leHBhbmQocyk7CisjZW5kaWYJLyogVU5JWCAqLworCQlmcCA9IGZvcGVuKHMsInciKTsJLyog Q3JlYXRlIGZpbGUgKi8KKwkJaWYgKCFmcCkgeworCQkgICAgcHJpbnRmKCI/VE9VQ0ggJXM6ICVz XG4iLHMsY2tfZXJyc3RyKCkpOworCQkgICAgcmMgPSAtOTsKKwkJICAgIGdvdG8geGRvbXlkaXI7 CisJCX0KKwkJZmNsb3NlKGZwKTsKKwkJY3ggPSBYWERJUjsJCS8qIE5vdyBtYXliZSBsaXN0IGl0 LiAqLworCQltdWx0aXBsZSsrOwkJLyogRm9yY2UgbmV3IGRpcmVjdG9yeSBzY2FuICovCisJICAg IH0KKwl9CisgICAgfSBlbHNlCisKKyAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNSUZJKSB7 ICAgICAvKiBOb3RoaW5nIG1hdGNoZWQgKi8KKwkvKgorCSAgTm90ZSAtIHRoaXMgbmV2ZXIgZ2V0 cyBleGVjdXRlZCBiZWNhdXNlIGFmdGVyIHRoZSAiYmVnaW4KKwkgIG11bHRpcGxlIiBoYWNrIGFi b3ZlLCB0aGUgcmVzdWx0IGlzIGFsd2F5cyBfQ01JRkkpLgorCSovCisgICAgICAgIGNoYXIgKiBt OworCWlmICgqcyA9PSAnLycpCisjaWZkZWYgVU5JWE9ST1NLCisJICBtID0gImRvZXMgbm90IG1h dGNoIHN3aXRjaCBvciBuYW1lIG9mIGFjY2Vzc2libGUgZmlsZSI7CisjZWxzZQorI2lmZGVmIE9T MgorCW0gPSAiZG9lcyBub3QgbWF0Y2ggc3dpdGNoIG9yIG5hbWUgb2YgYWNjZXNzaWJsZSBmaWxl IjsKKyNlbHNlCisJbSA9ICJubyBzd2l0Y2hlcyBtYXRjaCI7CisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogVU5JWE9ST1NYICovCisJZWxzZQorCSAgbSA9ICJub3QgZm91bmQgb3Igbm90IGFj Y2Vzc2libGUiOworCXByaW50ZigiXCIlc1wiIC0gJXNcbiIscyxtKTsKKwlyYyA9IC05OworCWdv dG8geGRvbXlkaXI7CisgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAvKiBUaGlzIGNhbid0IGJl IHJpZ2h0IGJlY2F1c2UgaXQncyBiYXNlZCBvbiBfQ01DRk0gKi8KKyAgICB3aWxkID0gY21yZXN1 bHQubnJlc3VsdDsgICAgICAgICAgICAvKiBXaWxkY2FyZCB3YXMgZ2l2ZW4/ICovCisgICAgZGVi dWcoRjExMSwiZG9teWRpciBjbWlmaTIiLHMsd2lsZCk7CisjZWxzZQorICAgIHdpbGQgPSAwOwor I2VuZGlmCS8qIENPTU1FTlQgKi8KKworICAgIGlmIChvdXRmaWxlWzBdKSB7CQkJLyogSWYgYW4g b3V0cHV0IGZpbGUgd2FzIHNwZWNpZmllZCAqLworICAgICAgICBvZnAgPSBmb3BlbihvdXRmaWxl LCJ3Iik7ICAgICAgIC8qIG9wZW4gaXQgKi8KKyAgICAgICAgaWYgKCFvZnApIHsKKyAgICAgICAg ICAgIHByaW50ZigiP0Nhbid0IG9wZW4gb3V0cHV0IGZpbGUgJXM6ICVzXG4iLG91dGZpbGUsY2tf ZXJyc3RyKCkpOworICAgICAgICAgICAgb2ZwID0gc3Rkb3V0OworICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgfQorICAgICAgICBwYWdlID0gMDsKKyAgICB9CisKKyNpZmRlZiBPUzIK KyAgICBpZiAoIXdpbGQpIHsKKyAgICAgICAgaWYgKHpjaGtpKHMpID09IC0yKSB7ICAgICAgICAg ICAvKiBGb3VuZCBhIGRpcmVjdG9yeSAqLworICAgICAgICAgICAgcCA9IHMgKyAoaW50KXN0cmxl bihzKSAtIDE7IC8qIFllcyAqLworICAgICAgICAgICAgaWYgKCpwID09ICdcXCcgfHwgKnAgPT0g Jy8nKQorICAgICAgICAgICAgICBzdHJjYXQocywgIioiKTsKKyAgICAgICAgICAgIGVsc2UgaWYg KCpwID09ICc6JykKKyAgICAgICAgICAgICAgc3RyY2F0KHMsICIuLyoiKTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgc3RyY2F0KHMsICIvKiIpOworICAgICAgICAgICAgd2lsZCA9 IDE7ICAgICAgICAgICAgICAgICAgIC8qIE5vdyBpdCdzIHdpbGQgKi8KKyAgICAgICAgfQorICAg IH0KKyNlbHNlCisgICAgaWYgKCF3aWxkKSBpZiAoaXNkaXIocykpIHsgICAgICAgICAgLyogSXMg aXQgYSBkaXJlY3Rvcnk/ICovCisgICAgICAgIHAgPSBzICsgKGludClzdHJsZW4ocykgLSAxOyAg ICAgLyogWWVzICovCisjaWZkZWYgVk1TCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvbnZl cnQgZnJvbSBGT08uRElSOzEgdG8gW3guRk9PXSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICAg IGNoYXIgYnVmW0NLTUFYUEFUSCsxXTsKKyAgICAgICAgICAgIGRlYnVnKEYwMDAsImRvbXlkaXIg ZGlyZWN0b3J5IDAiLHMsKnApOworICAgICAgICAgICAgaWYgKGN2dGRpcihzLGJ1ZixDS01BWFBB VEgpID4gMCkKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUsYnVmLExJTkJVRlNJWik7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgZGVidWcoRjAwMCwiZG9teWRpciBk aXJlY3RvcnkgMSIscywqcCk7CisjaWZkZWYgVk1TCisgICAgICAgIGlmICgqcCA9PSAnXScgfHwg KnAgPT0gJz4nIHx8ICpwID09ICc6JykKKyAgICAgICAgICBzdHJjYXQocywgIiouKiIpOworI2Vs c2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICBpZiAoKnAgPT0gJzonKQorICAgICAgICAg IHN0cmNhdChzLCAiKyIpOworICAgICAgICBlbHNlCisgICAgICAgICAgc3RyY2F0KHMsICI6KyIp OworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisgICAgICAgIGlmICgqcCA9PSAnPicpCisgICAgICAg ICAgc3RyY2F0KHMsICIqIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzdHJjYXQocywgIj4q Iik7CisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5k aWYgLyogVk1TICovCisgICAgICAgIHdpbGQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyog Tm93IGl0J3Mgd2lsZCAqLworICAgICAgICBkZWJ1ZyhGMDAwLCJkb215ZGlyIGRpcmVjdG9yeSAy IixzLCpwKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBaWFJFV0lORAorLyog Y21pZmkoKSBhbHJlYWR5IGNhbGxlZCBuenhwYW5kIHNvIHdlIGNhbiBqdXN0IHJlLXVzZSB0aGUg c2FtZSBsaXN0LiAqLworICAgIGlmICghbXVsdGlwbGUpIHsKKwl4ID0genhyZXdpbmQoKTsJCQkv KiBSZXdpbmQgdGhlIGxpc3QgKi8KKwlkZWJ1ZyhGMTExLCJkb215ZGlyIHp4cmV3aW5kIixzLHgp OworICAgIH0gZWxzZSB7CisjZW5kaWYgLyogWlhSRVdJTkQgKi8KKy8qCisgIEluIGNhc2Ugd2Ug Z2F2ZSBtdWx0aXBsZSBmaWxlc3BlY3MgdGhleSBhcmUgbm93IGluIHthLGIsY30gbGlzdCBmb3Jt YXQuCisgIFdoaWNoIGlzIGEgdmFsaWQgd2lsZGNhcmQuICBXZSBwYXNzIGl0IHRvIG56eHBhbmQo KSB0byBnZXQgYmFjayB0aGUgbGlzdAorICBvZiBmaWxlcyB0aGF0IG1hdGNoLiAgVGhpcyBpcyBm aW5lIGZvciBESVJFQ1RPUlkgYnV0IGl0J3Mgbm90IGZpbmQgZm9yCisgIFRPVUNIIGJlY2F1c2Ug d2Ugd2FudCBUT1VDSCB0byBzZWUgdGhvc2UgbmFtZXMgc28gaXQgY2FuIGNyZWF0ZSB0aGUgZmls ZXMuCisgIFNvIGZvciBub3cgYXQgbGVhc3QsIGlmIFRPVUNIIGlzIHRvIGJlIHVzZWQgdG8gY3Jl YXRlIGZpbGVzIC0tIGFzIG9wcG9zZWQKKyAgdG8gY2hhbmdpbmcgdGhlIHRpbWVzdGFtcHMgb2Yg ZXhpc3RpbmcgZmlsZXMgLS0gaXQgY2FuIG9ubHkgZG8gb25lIGZpbGUKKyAgYXQgYSB0aW1lLgor Ki8KKwluenhvcHRzID0gKHNob3cgPT0gWlhfRElST05MWSkgPyBaWF9ESVJPTkxZIDoKKwkgIChz aG93ID09IFpYX0ZJTE9OTFkgPyBaWF9GSUxPTkxZIDogMCk7CisJaWYgKG1hdGNoZG90KSAgbnp4 b3B0cyB8PSBaWF9NQVRDSERPVDsKKwlpZiAocmVjdXJzaXZlKSBuenhvcHRzIHw9IFpYX1JFQ1VS U0U7CisJeCA9IG56eHBhbmQocyxuenhvcHRzKTsgICAgICAgICAgICAgLyogRXhwYW5kIGZpbGUg bGlzdCAqLworCWRlYnVnKEYxMTEsImRvbXlkaXIgbnp4cGFuZCIscyx4KTsKKyNpZmRlZiBaWFJF V0lORAorICAgIH0KKyNlbmRpZiAvKiBaWFJFV0lORCAqLworCisjaWZuZGVmIE5PU1BMCisgICAg aWYgKGFycmF5KSB7CisgICAgICAgIGludCBuLCB4eDsKKyAgICAgICAgbiA9ICh4IDwgMCkgPyAw IDogeDsKKyAgICAgICAgaWYgKCh4eCA9IGRjbGFycmF5KGFycmF5LG4pKSA8IDApIHsKKyAgICAg ICAgICAgIHByaW50ZigiP0FycmF5IGRlY2xhcmF0aW9uIGZhaWx1cmVcbiIpOworICAgICAgICAg ICAgcmMgPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7CisgICAgICAgIH0KKwlhcnJh eWluZGV4ID0geHg7CisgICAgICAgIGFwID0gYV9wdHJbeHhdOwkJCS8qIFBvaW50ZXIgdG8gbGlz dCBvZiBlbGVtZW50cyAqLworICAgICAgICBpZiAoYXApCQkJCS8qIFNldCBlbGVtZW50IDAgdG8g ZGltZW5zaW9uICovCisgICAgICAgICAgbWFrZXN0cigmKGFwWzBdKSwiMCIpOwkvKiB3aGljaCBz byBmYXIgaXMgemVybyAqLworICAgICAgICBpZiAobiA8IDEpIHsJCQkvKiBObyBmaWxlcyBtYXRj aGVkLCBkb25lLiAqLworICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgZ290byB4ZG9t eWRpcjsKKyAgICAgICAgfQorICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgICBp ZiAoIXRvdWNoICYmIHggPCAxKSB7CisjaWZkZWYgQ0tST09UCisgICAgICAgICAgZXh0ZXJuIGlu dCBja3Jvb3RlcnI7CisgICAgICAgICAgaWYgKGNrcm9vdGVycikKKyAgICAgICAgICAgIHByaW50 ZigiP09mZiBsaW1pdHM6ICVzXG4iLHMpOworICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBDS1JP T1QgKi8KKyAgICAgICAgICAgIGlmICh4ID09IDAgJiYgaXNkaXIocykpCisgICAgICAgICAgICAg IHByaW50ZigiP0VtcHR5IGRpcmVjdG9yeSAtIFwiJXNcIlxuIiwgcyk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIHByaW50ZigiPyVzICVzIG1hdGNoIC0gXCIlc1wiXG4iLAorICAg ICAgICAgICAgICAgICAgICAgKHggPT0gMCkgPyAiTm8iIDogIlRvbyBtYW55IiwKKyAgICAgICAg ICAgICAgICAgICAgIChzaG93ID09IDIpID8gImRpcmVjdG9yaWVzIiA6ICJmaWxlcyIsCisgICAg ICAgICAgICAgICAgICAgICBicnN0cmlwKHMpCisgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgIHJjID0gLTk7CisgICAgICAgICAgZ290byB4ZG9teWRpcjsKKyAgICB9CisgICAgbngg PSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgaG93IG1hbnkgZmls ZXMgKi8KKyAgICBpZiAobnggPCAyKSB4c29ydCA9IDA7CQkvKiBTa2lwIHNvcnRpbmcgaWYgbm9u ZSBvciBvbmUgKi8KKworICAgIGlmIChtc2cpIHsKKyAgICAgICAgbWFrZXN0cigmZGlybXNnLHRt cGJ1Zik7CisgICAgICAgIGRpcm1zZ2xlbiA9IHN0cmxlbih0bXBidWYpOworICAgIH0KKworI2lm ZGVmIFZNUworICAgIGNkcCA9IHpndGRpcigpOyAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBj dXJyZW50IGRpcmVjdG9yeSAqLworICAgIGRlYnVnKEYxMTAsImRvbXlkaXIgVk1TIHpndGRpciIs Y2RwLDApOworI2VuZGlmIC8qIFZNUyAqLworCisgICAgaWYgKHhzb3J0ICYmIHZlcmJvc2UpIHsg ICAgICAgICAgICAgLyogSWYgc29ydGluZywgYWxsb2NhdGUgc3BhY2UgKi8KKyAgICAgICAgaWYg KCEoZGlybGlzdCA9IChjaGFyICoqKSBtYWxsb2MoKHggKyAxKSAqIHNpemVvZihjaGFyICoqKSkp KSB7CisgICAgICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIq IFdhcm5pbmc6IEZhaWx1cmUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBzb3J0aW5nLlxuIik7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCIqIFdpbGwgcHJvY2VlZCB3aXRob3V0IHNvcnRpbmcuLi5c biIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeHNvcnQgPSAwOworICAgICAgICB9Cisg ICAgICAgIGRlYnVnKEYxMDEsImRvbXlkaXIgc29ydCBtYWxsb2MiLCIiLHhzb3J0KTsKKyAgICB9 CisKKyAgICAvKiBEaXNwbGF5IHRoZSBsaXN0aW5nICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBp ZiAoYXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9yaW5nIGluc3RlYWQgb2Yg cHJpbnRpbmcgKi8KKyAgICAgIGhlYWRpbmcgPSAwOworI2VuZGlmIC8qIE5PU1BMICovCisKKyAg ICBpZiAoaGVhZGluZykgeyAgICAgICAgICAgICAgICAgICAgICAvKiBJZiAvSEVBRElORyBwcmlu dCBoZWFkaW5nICovCisgICAgICAgIHpmbnFmcChzLFRNUEJVRlNJWix0bXBidWYpOworICAgICAg ICBmcHJpbnRmKG9mcCwiXG5EaXJlY3Rvcnkgb2YgJXNcblxuIix0bXBidWYpOworICAgICAgICBu ICs9IDM7CisgICAgfQorICAgIGlmIChwYWdlID4gLTEpICAgICAgICAgICAgICAgICAgICAgIC8q IFBhZ2luZyAqLworICAgICAgeGFza21vcmUgPSBwYWdlOworCisgICAgaWYgKCF2ZXJib3NlICYm ICF0b3VjaCkgewkJLyogL0JSSUVGICovCisgICAgICAgIGlmIChvdXRmaWxlWzBdKSB7ICAgICAg ICAgICAgICAgLyogVG8gZmlsZSAgKi8KKyAgICAgICAgICAgIGludCBrID0gMDsKKyAgICAgICAg ICAgIHpuZXh0KG5hbWUpOworICAgICAgICAgICAgd2hpbGUgKG5hbWVbMF0pIHsgICAgICAgICAg IC8qIE9uZSBsaW5lIHBlciBmaWxlICovCisgICAgICAgICAgICAgICAgaysrOworICAgICAgICAg ICAgICAgIGlmIChmcykgaWYgKGZpbGVzZWxlY3QobmFtZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRpcl9hZnQsZGlyX2JlZixkaXJfbmFmLGRpcl9uYmYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zaXplLG1heHNpemUsIWJhY2t1 cCwxNix4bGlzdCkgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgIHpuZXh0KG5hbWUpOworICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgZnByaW50ZihvZnAsIiVzXG4iLG5hbWUpOworICAgICAgICAgICAgICAgIHpuZXh0KG5h bWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhlYWRpbmcpCisgICAgICAgICAg ICAgIGZwcmludGYob2ZwLCJGaWxlczogJWRcblxuIixrKTsKKyAgICAgICAgICAgIHJjID0gMTsK KyAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICByYyA9IHhmaWxoZWxwKHgsIiIsIiIsbiwwLDEsCisJCQkgIGRpcl9hZnQsZGlyX2JlZixkaXJf bmFmLGRpcl9uYmYsCisJCQkgIG1pbnNpemUsbWF4c2l6ZSwhYmFja3VwLDE2LHhsaXN0KTsKKyAg ICAgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7CisgICAg ICAgICAgICBpZiAoaGVhZGluZyAmJiByYyA+IDApCisgICAgICAgICAgICAgIGZwcmludGYob2Zw LCJGaWxlczogJWRcblxuIix4KTsgLyogKE1pZ2h0IHNjcm9sbCBhIGxpbmUgb3IgMikgKi8KKyAg ICAgICAgICAgIHJjID0gMTsKKyAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7CisgICAgICAgIH0K KyAgICB9CisgICAgbmRpcnMgPSBuZmlsZXMgPSAwTDsJCS8qIEluaXRpYWxpemUgY291bnRlcnMg Ki8KKyAgICBuYnl0ZXMgPSAoQ0tfT0ZGX1QpMDsKKworICAgIGlmIChkaXJfZXhjKSAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhhdmUgZXhjZXB0aW9uIGxpc3Q/ICovCisgICAgICBtYWtlbGlz dChkaXJfZXhjLHhsaXN0LDE2KTsJLyogWWVzLCBjb252ZXJ0IHRvIGFycmF5ICovCisKKyAgICBk aXJhY3RpdmUgPSAxOworICAgIHpuZXh0KG5hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IEdldCBuZXh0IGZpbGUgKi8KKyAgICB3aGlsZSAobmFtZVswXSkgeyAgICAgICAgICAgICAgICAg ICAvKiBMb29wIGZvciBlYWNoIGZpbGUgKi8KKyAgICAgICAgaWYgKGZzKSBpZiAoZmlsZXNlbGVj dChuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBkaXJfYWZ0LGRpcl9iZWYsZGlyX25hZixk aXJfbmJmLAorICAgICAgICAgICAgICAgICAgICAgICBtaW5zaXplLG1heHNpemUsIWJhY2t1cCwx Nix4bGlzdCkgPCAxKSB7CisgICAgICAgICAgICB6bmV4dChuYW1lKTsKKyAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICB9CisgICAgICAgIGxlbiA9IHpnZXRmcyhuYW1lKTsgICAgICAgICAg ICAgLyogR2V0IGZpbGUgbGVuZ3RoICovCisgICAgICAgIGRlYnVnKEYxMTEsImRvbXlkaXIgemdl dGZzIixuYW1lLGxlbik7CisjaWZkZWYgVk1TT1JVTklYCisgICAgICAgIGl0c2FkaXIgPSB6Z2Zz X2RpcjsgICAgICAgICAgICAgLyogU2VlIGlmIGl0J3MgYSBkaXJlY3RvcnkgKi8KKyNlbHNlCisg ICAgICAgIGl0c2FkaXIgPSAobGVuID09IChDS19PRkZfVCktMiB8fCBpc2RpcihuYW1lKSk7Cisj ZW5kaWYgLyogVk1TT1VOSVggKi8KKyAgICAgICAgZGVidWcoRjExMSwiZG9teWRpciBpdHNhZGly IixuYW1lLGl0c2FkaXIpOworICAgICAgICBpZiAoKGl0c2FkaXIgJiYgKHNob3cgPT0gMSkpIHx8 ICghaXRzYWRpciAmJiAoc2hvdyA9PSAyKSkpIHsKKyAgICAgICAgICAgIHpuZXh0KG5hbWUpOwor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyogR2V0IGhlcmUgd2hl biB3ZSBrbm93IHdlIGhhdmUgc2VsZWN0ZWQgdGhpcyBmaWxlICovCisKKyAgICAgICAgbm1hdGNo ZXMrKzsKKyAgICAgICAgaWYgKGl0c2FkaXIpIHsgICAgICAgICAgICAgICAgICAvKiBBY2N1bXVs YXRlIHRvdGFscyBmb3Igc3VtbWFyeSAqLworICAgICAgICAgICAgbmRpcnMrKzsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIG5maWxlcysrOworICAgICAgICAgICAgbmJ5dGVzICs9IGxl bjsKKyAgICAgICAgfQorCWRzdHIgPSBOVUxMOworCWlmIChjeCA9PSBYWFRPVUMpIHsJCS8qIENv bW1hbmQgd2FzIFRPVUNILCBub3QgRElSRUNUT1JZICovCisJICAgIGNoYXIgKiBmaWxlbmFtZTsK KwkgICAgc3RydWN0IHphdHRyIHh4OworCSAgICBkc3RyID0gY2tjdnRkYXRlKCIiLDApOworCSAg ICB4eC5kYXRlLnZhbCA9IGRzdHI7CisJICAgIHh4LmRhdGUubGVuID0gKGludClzdHJsZW4oeHgu ZGF0ZS52YWwpOworCSAgICB4eC5scHJvdGVjdC5sZW4gPSAwOworCSAgICBkZWJ1ZyhGMTEwLCJk b215ZGlyIHRvdWNoIixuYW1lLDApOworCSAgICBkZWJ1ZyhGMTEwLCJkb215ZGlyIHRvdWNoIixk c3RyLDApOworCSAgICBpZiAoenN0aW1lKG5hbWUsJnh4LDApIDwgMCkgeworCQlwcmludGYoIj9U T1VDSCAlczogJXNcbiIsbmFtZSxja19lcnJzdHIoKSk7CisJCXJjID0gLTk7CisJCWdvdG8geGRv bXlkaXI7CisJICAgIH0KKwkgICAgaWYgKCF2ZXJib3NlKSB7CQkvKiBObyBsaXN0aW5nIHNvIHNr aXAgZGV0YWlsICovCisJCXpuZXh0KG5hbWUpOworCQljb250aW51ZTsKKwkgICAgfQorCX0KKyAg ICAgICAgaWYgKHN1bW1hcnkpIHsJCQkvKiBTdW1tYXJ5IG9ubHksIG5vIGRldGFpbCAqLworICAg ICAgICAgICAgem5leHQobmFtZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor CisjaWZuZGVmIE5PU1BMCisgICAgICAgIGlmIChhcnJheSkgeworICAgICAgICAgICAgZGVidWco RjExMSwiZG9teWRpciBhcnJheSIsbmFtZSxuZmlsZXMpOworICAgICAgICAgICAgaWYgKGFwKQor ICAgICAgICAgICAgICBtYWtlc3RyKCYoYXBbbm1hdGNoZXNdKSxuYW1lKTsKKyAgICAgICAgICAg IHpuZXh0KG5hbWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAv KiBOT1NQTCAqLworCisvKgorICBOT1RFOiBUaGUgc3ByaW50ZidzIGluIHRoaXMgcm91dGluZSBz aG91bGQgYmUgc2FmZS4gIFRoZXkgaW52b2x2ZQorICBwZXJtaXNzaW9uIHN0cmluZ3MsIGRhdGUv dGltZSBzdHJpbmdzLCBhbmQgZmlsZW5hbWVzLCBhbGwgb2Ygd2hpY2ggaGF2ZQorICBrbm93biBt YXhpbXVtIGxlbmd0aHM7IG5vbmUgb2YgdGhlc2UgaXRlbXMgaXMgaW5wdXQgZnJvbSB1c2Vycy4g IFRoZQorICBkZXN0aW5hdGlvbiBidWZmZXJzIGFyZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBtYXhp bXVtIHNpemVzIGZvciBhbnkgYW5kCisgIGFsbCBpdGVtcy4gIE5PVEUgMjogSWYgY29tbWFuZCB3 YXMgVE9VQ0gsIGRzdHIgd2FzIGFscmVhZHkgc2V0IGp1c3QKKyAgYWJvdmUuCisqLworCWlmICgh ZHN0cikgewkJCS8qIEdldCBmaWxlJ3MgbW9kaWZpY2F0aW9uIGRhdGUvdGltZSAqLworCSAgICBk c3RyID0gemZjZGF0KG5hbWUpOworCSAgICBkZWJ1ZyhGMTExLCJkb215ZGlyIHpjZmRhdCIsZHN0 ciwwKTsKKwl9CisgICAgICAgIGlmICghZHN0cikgZHN0ciA9ICIiOworICAgICAgICB7CisvKgor ICBOb3RlIHRoYXQgemZjZGF0KCkgYWx3YXlzIHJldHVybnMgIiIgb3IgeXl5eW1tZGQgaGg6bW06 c3MsIHNvIGFueSB3YXJuaW5ncworICBhYm91dCBwb3NzaWJsZSBvdXQtb2YtYm91bmRzIGRzdHJb XSBhcnJheSByZWZzIGRvIG5vdCBhcHBseS4gIFRoaXMgYmxvY2sgb2YKKyAgY29kZSBpcyB0byBz dGlmbGUgdGhlIHdhcm5pbmdzIGFuZCBhbHNvIGFsbG93cyBmb3IgYW55IG91dC1vZi1zcGVjCisg IHpmY2RhdCgpIGltcGxlbWVudGF0aW9ucy4KKyovCisgICAgICAgICAgICBpbnQgeDsKKyAgICAg ICAgICAgIGNoYXIgKiBwID0gIjAwMDAwMDAwIDAwOjAwOjAwIjsKKyAgICAgICAgICAgIHggPSBj a3N0cm5jcHkoeGJ1Zixkc3RyLDMyKTsKKyAgICAgICAgICAgIGlmICh4IDwgMTcpIGNrc3RybmNw eSgmeGJ1Zlt4XSxwK3gsMzIteCk7CisgICAgICAgICAgICBkc3RyID0geGJ1ZjsKKyAgICAgICAg fQorICAgICAgICBpZiAoZW5nZGF0ZSkgeyAgICAgICAgICAgICAgICAgIC8qIEVuZ2xpc2ggZGF0 ZSByZXF1ZXN0ZWQ/ICovCisgICAgICAgICAgICBzaG9ydCBtb250aCwgZGF5LCB5ZWFyLCBob3Vy LCBtaW51dGUsIHNlY29uZHM7CisgICAgICAgICAgICBtb250aCA9IChkc3RyWzRdLTQ4KSoxMCAr IChkc3RyWzVdLTQ4KTsKKyAgICAgICAgICAgIG1zdHIgID0gKG1vbnRoID4gMCAmJiBtb250aCA8 PSAxMikgPyBtb250aHNbbW9udGgtMV0gOiAieHh4IjsKKyAgICAgICAgICAgIGRheSAgID0gKGRz dHJbNl0tNDgpKjEwICsgKGRzdHJbN10tNDgpOworICAgICAgICAgICAgeWVhciAgPSAoKChkc3Ry WzBdLTQ4KSoxMCArCisgICAgICAgICAgICAgICAgICAgICAgKGRzdHJbMV0tNDgpKSoxMCArCisg ICAgICAgICAgICAgICAgICAgICAgKGRzdHJbMl0tNDgpKSoxMCArCisgICAgICAgICAgICAgICAg ICAgICAgKGRzdHJbM10tNDgpOworICAgICAgICAgICAgaG91ciAgPSAoZHN0cls5XS00OCkqMTAg KyAoZHN0clsxMF0tNDgpOworICAgICAgICAgICAgbWludXRlID0gKGRzdHJbMTJdLTQ4KSoxMCAr IChkc3RyWzEzXS00OCk7CisgICAgICAgICAgICBzZWNvbmRzID0gKGRzdHJbMTVdLTQ4KSoxMCAr IChkc3RyWzE2XS00OCk7CisgICAgICAgICAgICBzcHJpbnRmKGRidWYsICAgICAgICAgICAgICAg LyogU0FGRSAqLworICAgICAgICAgICAgICAgICAgICAiJTJkLSVzLSU0ZCAlMDJkOiUwMmQ6JTAy ZCIsCisgICAgICAgICAgICAgICAgICAgIGRheSxtc3RyLHllYXIsaG91cixtaW51dGUsc2Vjb25k cworICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgZHN0ciA9IGRidWY7CisgICAg ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNPIGRhdGUgKi8KKyAgICAg ICAgICAgIGRidWZbMF0gPSBkc3RyWzBdOyAgICAgICAgICAvKiB5eXl5ICovCisgICAgICAgICAg ICBkYnVmWzFdID0gZHN0clsxXTsKKyAgICAgICAgICAgIGRidWZbMl0gPSBkc3RyWzJdOworICAg ICAgICAgICAgZGJ1ZlszXSA9IGRzdHJbM107CisgICAgICAgICAgICBkYnVmWzRdID0gJy0nOwor ICAgICAgICAgICAgZGJ1Zls1XSA9IGRzdHJbNF07ICAgICAgICAgIC8qIG1tIChudW1lcmljKSAq LworICAgICAgICAgICAgZGJ1Zls2XSA9IGRzdHJbNV07CisgICAgICAgICAgICBkYnVmWzddID0g Jy0nOworICAgICAgICAgICAgZGJ1Zls4XSA9IGRzdHJbNl07ICAgICAgICAgIC8qIGRkICovCisg ICAgICAgICAgICBkYnVmWzldID0gZHN0cls3XTsKKyAgICAgICAgICAgIHN0cmNweShkYnVmKzEw LGRzdHIrOCk7ICAgICAvKiBoaDptbTpzcyAqLworICAgICAgICAgICAgZHN0ciA9IGRidWY7Cisg ICAgICAgIH0KKyAgICAgICAgZGxlbiA9IHN0cmxlbihkYnVmKTsgICAgICAgICAgICAvKiBMZW5n dGggb2YgZGF0ZSAqLworICAgICAgICBuYW1lW0NLTUFYUEFUSF0gPSBOVUw7CisjaWZkZWYgQ0tf UEVSTVMKKyNpZmRlZiBWTVNPUlVOSVgKKyAgICAgICAgcCA9IHppcGVybShuYW1lKTsgICAgICAg ICAgICAgICAvKiBHZXQgcGVybWlzc2lvbnMgKi8KKyAgICAgICAgZGVidWcoRjExMCwiemlwZXJt IHBlcm1zIixwLDApOworI2Vsc2UKKyAgICAgICAgcCA9IHpncGVybShuYW1lKTsKKyAgICAgICAg ZGVidWcoRjExMCwiemdwZXJtIHBlcm1zIixwLDApOworI2VuZGlmIC8qIFZNU09SVU5JWCAqLwor I2Vsc2UKKyAgICAgICAgcCA9IE5VTEw7CisgICAgICAgIGRlYnVnKEYxMTAsIk5VTEwgcGVybXMi LHAsMCk7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworI2lmZGVmIFZNUworICAgICAgICAvKiBH ZXQgcmVsYXRpdmUgbmFtZSB0byBzYXZlIHNwYWNlIC0tIFZNUyBmdWxsbmFtZXMgYXJlIGxvbmcu Li4gKi8KKyAgICAgICAgY2tzdHJuY3B5KG5hbWUsenJlbG5hbWUobmFtZSxjZHApLENLTUFYUEFU SCk7CisjZW5kaWYgLyogVk1TICovCisKKyAgICAgICAgaWYgKGl0c2FkaXIgJiYgbGVuIDwgKENL X09GRl9UKTApIHsgLyogRGlyZWN0b3J5ICovCisjaWZkZWYgVk1TCisgICAgICAgICAgICBzcHJp bnRmKGxpbmVidWYsIiUtMjJzJS0xMHMgICVzICAlcyIscCwiPERJUj4iLGRzdHIsbmFtZSk7Cisj ZWxzZQorICAgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAgIHNwcmludGYobGluZWJ1Ziwi JTEwcyUtMTBzICAlcyAgJXMiLHAsIjxESVI+Iixkc3RyLG5hbWUpOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICBzcHJpbnRmKGxpbmVidWYsIiUtMTBzICAlcyAgJXMiLCAiPERJUj4i LCBkc3RyLCBuYW1lKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZWd1bGFyIGZpbGUgKi8KKyNpZmRlZiBWTVMKKyAgICAgICAg ICAgIHNwcmludGYobGluZWJ1ZiwiJS0yMnMlMTBzICAlcyAgJXMiLCBwLCBja2ZzdG9hKGxlbiks IGRzdHIsIG5hbWUpOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChwKQorICAgICAgICAgICAgICBz cHJpbnRmKGxpbmVidWYsIiUxMHMlMTBzICAlcyAgJXMiLCBwLCBja2ZzdG9hKGxlbiksIGRzdHIs IG5hbWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzcHJpbnRmKGxpbmVidWYs IiUxMHMgICVzICAlcyIsIGNrZnN0b2EobGVuKSwgZHN0ciwgbmFtZSk7CisjZW5kaWYgLyogVk1T ICovCisgICAgICAgIH0KKyNpZmRlZiBVTklYCisjaWZkZWYgQ0tTWU1MSU5LCisgICAgICAgIGlm ICh6Z2ZzX2xpbmspIHsJCS8qIElmIGl0J3MgYSBzeW1saW5rICovCisJICAgIGlmIChkb250c2hv d2xpbmtzKSB7CS8qIElmIC9OT0xJTktTIGRvbid0IHNob3cgaXQgKi8KKwkJem5leHQobmFtZSk7 CisJCWNvbnRpbnVlOworCSAgICB9CisJfQorICAgICAgICBpZiAoemdmc19saW5rICYmICFkb250 Zm9sbG93bGlua3MpIHsgLyogU3ltbGluayBhbmQgZm9sbG93aW5nIGxpbmtzICovCisgICAgICAg ICAgICBpbnQgbiwgbTsJCQkvKiBTaG93IHdoYXQgdGhlIGxpbmsgcG9pbnRzIHRvICovCisgICAg ICAgICAgICBleHRlcm4gY2hhciBsaW5rbmFtZVtdOworICAgICAgICAgICAgbiA9IHN0cmxlbihs aW5lYnVmKTsKKyAgICAgICAgICAgIG0gPSBzdHJsZW4obGlua25hbWUpICsgbjsKKyAgICAgICAg ICAgIGlmIChtIDwgQ0tNQVhQQVRIICsgNTgpCisgICAgICAgICAgICAgIHN0cmNweShsaW5lYnVm K24sICIgLT4gIik7IC8qIHNhZmUgKGNoZWNrZWQpICovCisgICAgICAgICAgICBpZiAobSArIDQg PCBDS01BWFBBVEggLSA1OCkKKyAgICAgICAgICAgICAgc3RyY3B5KGxpbmVidWYrbis0LCBsaW5r bmFtZSk7IC8qIHNhZmUgKGNoZWNrZWQpICovCisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIENL U1lNTElOSyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgaWYgKHhmZXJtb2QpIHsgICAg ICAgICAgICAgICAgICAvKiBTaG93IHRyYW5zZmVyIG1vZGUgKi8KKyAgICAgICAgICAgIGludCBp LCB4LCB5OworICAgICAgICAgICAgY2hhciAqIHMgPSAiIjsKKyAgICAgICAgICAgIHkgPSAtMTsK KyAgICAgICAgICAgIHggPSBzY2FuZmlsZShuYW1lLCZ5LG5zY2FuZmlsZSk7CisgICAgICAgICAg ICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAgY2FzZSBGVF9URVhUOiBzID0gIiAoVCkiOyBi cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBGVF83QklUOiBzID0gIiAoVCkoN0JJVCkiOyBicmVh azsKKyAgICAgICAgICAgICAgY2FzZSBGVF84QklUOiBzID0gIiAoVCkoOEJJVCkiOyBicmVhazsK KyNpZmRlZiBVTklDT0RFCisgICAgICAgICAgICAgIGNhc2UgRlRfVVRGODogcyA9ICIgKFQpKFVU RjgpIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRlRfVUNTMjoKKyAgICAgICAgICAgICAg ICBzID0geSA/ICIgKFQpKFVDUzJMRSkiIDogIiAoVCkoVUNTMkJFKSI7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgICAgICAgICAgICBjYXNlIEZUX0JJ TjogIHMgPSAiIChCKSI7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCEq cykgeworICAgICAgICAgICAgICAgIHMgPSBiaW5hcnkgPyAiIChCKSIgOiAiIChUKSI7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgICAgICBpbnQgbjsK KyAgICAgICAgICAgICAgICBuID0gc3RybGVuKGxpbmVidWYpOworICAgICAgICAgICAgICAgIGlm IChuICsgNCA8IENLTUFYUEFUSCAtIDU4KQorICAgICAgICAgICAgICAgICAgc3RyY3B5KGxpbmVi dWYrbiwgcyk7IC8qIHNhZmUgKGNoZWNrZWQpICovCisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgaWYgKG1zZyAmJiBkaXJtc2cpIHsKKyAgICAgICAgICAgIGludCBuOworICAgICAg ICAgICAgbiA9IHN0cmxlbihsaW5lYnVmKTsKKyAgICAgICAgICAgIGlmIChuICsgZGlybXNnbGVu ICsgMiA8IENLTUFYUEFUSCkKKyAgICAgICAgICAgICAgc3ByaW50ZigoY2hhciAqKShsaW5lYnVm K24pLCIgJXMiLCBkaXJtc2cpOyAvKiBTQUZFICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHhz b3J0KSB7CQkJLyogU29ydGluZyAtIHNhdmUgbGluZSAqLworICAgICAgICAgICAgaSA9IHN0cmxl bihsaW5lYnVmKTsKKyAgICAgICAgICAgIGlmICgobmRpcmxpc3QgPj0gbngpIHx8CisgICAgICAg ICAgICAgICAgIShkaXJsaXN0W25kaXJsaXN0XSA9IChjaGFyICopbWFsbG9jKGkrMSkpKSB7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgLSB0cnkgL05P U09SVFxuIik7CisgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICAgICAgICBnb3Rv IHhkb215ZGlyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RyY3B5KGRpcmxpc3RbbmRp cmxpc3RdLGxpbmVidWYpOyAvKiBzYWZlICovCisgICAgICAgICAgICBuZGlybGlzdCsrOworICAg ICAgICB9CisgICAgICAgIHpuZXh0KG5hbWUpOyAgICAgICAgICAgICAgICAgICAgLyogUGVlayBh aGVhZCB0byBuZXh0IGZpbGUgKi8KKyAgICAgICAgaWYgKCF4c29ydCkgeworCSAgICBpZiAoIXRv dWNoIHx8ICh0b3VjaCAmJiB2ZXJib3NlKSkKKwkgICAgICBmcHJpbnRmKG9mcCwiJXNcbiIsbGlu ZWJ1Zik7CisgICAgICAgICAgICBpZiAocGFnZSAmJiAobmFtZVswXSB8fCBoZWFkaW5nKSkgeyAv KiBJZiAvUEFHRSAqLworICAgICAgICAgICAgICAgIGlmIChjbWRfY29scyA+IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgaW50IHggPSBzdHJsZW4obGluZWJ1Zik7CisgICAgICAgICAgICAgICAg ICAgIGludCB5OworICAgICAgICAgICAgICAgICAgICB5ID0gKHggJSBjbWRfY29scykgPyAxIDog MDsKKyAgICAgICAgICAgICAgICAgICAgbiArPSB4IC8gY21kX2NvbHMgKyB5OworICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgICAg ICB9CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgICAgICAgICAgICAgIGlmIChuID4gKGNtZF9yb3dz IC0gMykpIHsgLyogRG8gbW9yZS1wcm9tcHRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYg KCFhc2ttb3JlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8geGRvbXlkaXI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZQorICAgICAgICAgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICAgICAgICAgIH0KKyNlbmRp ZiAvKiBDS19UVEdXU0laICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjaWZu ZGVmIE5PU1BMCisgICAgaWYgKGFycmF5KSB7CisgICAgICAgIGlmIChhcCkKKyAgICAgICAgICBt YWtlc3RyKCYoYXBbMF0pLGNraXRvYShubWF0Y2hlcykpOworICAgICAgICByYyA9IDE7CisgICAg ICAgIGdvdG8geGRvbXlkaXI7CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgaWYgKHhz b3J0KSB7CisJaW50IG5hbWVwb3M7CisgICAgICAgIHNrZXkgPSAwOworI2lmZGVmIFZNUworCW5h bWVwb3MgPSBkbGVuICsgMzU7CisgICAgICAgIHN3aXRjaCAoc29ydGJ5KSB7CisgICAgICAgICAg Y2FzZSBESVJTX05NOiBza2V5ID0gbmFtZXBvczsgYnJlYWs7CisgICAgICAgICAgY2FzZSBESVJT X0RUOiBza2V5ID0gMzM7IGJyZWFrOworICAgICAgICAgIGNhc2UgRElSU19TWjogc2tleSA9IDIx OworICAgICAgICB9CisjZWxzZQorICAgICAgICBpZiAocCkgeworCSAgICBuYW1lcG9zID0gZGxl biArIDI0OworICAgICAgICAgICAgc3dpdGNoIChzb3J0YnkpIHsKKyAgICAgICAgICAgICAgY2Fz ZSBESVJTX05NOiBza2V5ID0gbmFtZXBvczsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRElS U19EVDogc2tleSA9IDIyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBESVJTX1NaOiBza2V5 ID0gMTA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisJICAgIG5hbWVwb3MgPSBk bGVuICsgMTQ7CisgICAgICAgICAgICBzd2l0Y2ggKHNvcnRieSkgeworICAgICAgICAgICAgICBj YXNlIERJUlNfTk06IHNrZXkgPSBuYW1lcG9zOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBE SVJTX0RUOiBza2V5ID0gMTI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERJUlNfU1o6IHNr ZXkgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisgICAg ICAgIHNoX3NvcnQoZGlybGlzdCxOVUxMLG5kaXJsaXN0LHNrZXkscmV2ZXJzZSxmaWxlY2FzZSk7 CisJaWYgKGRpcl90b3AgPiAwICYmIGRpcl90b3AgPCBuZGlybGlzdCkKKwkgIG5kaXJsaXN0ID0g ZGlyX3RvcDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5kaXJsaXN0OyBpKyspIHsKKyAgICAg ICAgICAgIGZwcmludGYob2ZwLCIlc1xuIixkaXJsaXN0W2ldKTsKKyAgICAgICAgICAgIGlmIChw YWdlICYmIChpIDwgbmRpcmxpc3QgLTEgfHwgaGVhZGluZykpIHsgLyogSWYgL1BBR0UgKi8KKyAg ICAgICAgICAgICAgICBpZiAoY21kX2NvbHMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlu dCB4ID0gc3RybGVuKGRpcmxpc3RbaV0pOworICAgICAgICAgICAgICAgICAgICBpbnQgeTsKKyAg ICAgICAgICAgICAgICAgICAgeSA9ICh4ICUgY21kX2NvbHMpID8gMSA6IDA7CisgICAgICAgICAg ICAgICAgICAgIG4gKz0gKChpbnQpc3RybGVuKGRpcmxpc3RbaV0pIC8gY21kX2NvbHMpICsgeTsK KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuKys7CisgICAg ICAgICAgICAgICAgfQorI2lmZGVmIENLX1RUR1dTSVoKKyAgICAgICAgICAgICAgICBpZiAobiA+ IChjbWRfcm93cyAtIDMpKSB7IC8qIERvIG1vcmUtcHJvbXB0aW5nICovCisgICAgICAgICAgICAg ICAgICAgIGlmICghYXNrbW9yZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7 CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHhkb215ZGlyOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgICAgICAg ICB9CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorCisgICAgaWYgKGhlYWRpbmcgfHwgc3VtbWFyeSkgeworI2lmZGVmIENLRkxPQVQKKyAg ICAgICAgQ0tGTE9BVCBnbTsKKyNlbmRpZiAvKiBDS0ZMT0FUICovCisgICAgICAgIGZwcmludGYo b2ZwLCJcbiVsZCBkaXJlY3RvciVzLCAlbGQgZmlsZSVzLCAlcyBieXRlJXMiLAorICAgICAgICAg ICAgICAgbmRpcnMsCisgICAgICAgICAgICAgICAobmRpcnMgPT0gMSkgPyAieSIgOiAiaWVzIiwK KyAgICAgICAgICAgICAgIG5maWxlcywKKyAgICAgICAgICAgICAgIChuZmlsZXMgPT0gMSkgPyAi IiA6ICJzIiwKKwkgICAgICAgY2tmc3RvYShuYnl0ZXMpLAorICAgICAgICAgICAgICAgKG5ieXRl cyA9PSAxKSA/ICIiIDogInMiCisgICAgICAgICAgICAgICApOworI2lmZGVmIENLRkxPQVQKKyAg ICAgICAgZ20gPSAoKENLRkxPQVQpIG5ieXRlcyApIC8gMTAwMDAwMC4wOworICAgICAgICBpZiAo Z20gPiAxMDAwLjApCisgICAgICAgICAgZnByaW50ZihvZnAsIiAoJTAuMmZHQikiLChnbSAvIDEw MDAuMCkpOworICAgICAgICBlbHNlIGlmIChnbSA+PSAwLjAxKQorICAgICAgICAgIGZwcmludGYo b2ZwLCIgKCUwLjJmTUIpIixnbSk7CisjZW5kaWYgLyogQ0tGTE9BRCAqLworICAgICAgICBmcHJp bnRmKG9mcCwiXG5cbiIpOworICAgIH0gZWxzZSBpZiAoZGlyX2NvdSAmJiAhY3YpIHsKKwlmcHJp bnRmKG9mcCwiXG4gRmlsZXM6ICVsZFxuXG4iLG5maWxlcyk7CisgICAgfQorICB4ZG9teWRpcjoK KyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoZGlyX2NvdSAmJiBjdikgeyAgICAgICAgICAgICAgICAv KiAvQ09VTlQ6dmFyICovCisgICAgICAgIGFkZG1hYyhjdixja2l0b2EobmZpbGVzKSk7CS8qIHNl dCB0aGUgdmFyaWFibGUgKi8KKyAgICAgICAgbWFrZXN0cigmY3YsTlVMTCk7ICAgICAgICAgICAg ICAvKiBmcmVlIHRoaXMgKi8KKyAgICB9CisgICAgaWYgKGFwKSB7CQkJCS8qIElmIHdlIGhhdmUg YSByZXN1bHQgYXJyYXkgKi8KKwlpZiAoYV9kaW1bYXJyYXlpbmRleF0gPiBubWF0Y2hlcykgLyog YnV0IGl0IHdhcyBub3QgZmlsbGVkICovCisJICBhX2RpbVthcnJheWluZGV4XSA9IG5tYXRjaGVz OyAgIC8qIGFkanVzdCBkaW1lbnNpb24gKi8KKyAgICB9CisjZW5kaWYJLyogTk9TUEwgKi8KKyAg ICBpZiAoZ19tYXRjaGRvdCA+IC0xKSB7CisgICAgICAgIG1hdGNoZG90ID0gZ19tYXRjaGRvdDsg ICAgICAgICAgLyogUmVzdG9yZSB0aGVzZS4uLiAqLworICAgICAgICBnX21hdGNoZG90ID0gLTE7 CisgICAgfQorICAgIGZyZWVkaXJsaXN0KCk7CisgICAgaWYgKG9mcCAhPSBzdGRvdXQpIHsgICAg ICAgICAgICAgICAgLyogQ2xvc2UgYW55IG91dHB1dCBmaWxlICovCisgICAgICAgIGlmIChvZnAp IGZjbG9zZShvZnApOworICAgICAgICBvZnAgPSBzdGRvdXQ7CisgICAgfQorICAgIGlmIChyYyA+ IDApCisgICAgICBzdWNjZXNzID0gMTsKKyAgICByZXR1cm4ocmMpOworfQorCitpbnQKK2RvZGly KGN4KSBpbnQgY3g7IHsgICAgICAgICAgICAgICAgICAgICAvKiBEbyB0aGUgRElSRUNUT1JZIGNv bW1hbmQgKi8KKyAgICBjaGFyICpkYyAsICptc2c7CisKKyNpZmRlZiBPUzIKKyAgICByZXR1cm4o ZG9teWRpcihjeCkpOworI2Vsc2UgLyogT1MyICovCisgICAgaWYgKG5vcHVzaAorI2lmZGVmIERP TVlESVIgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJ1aWxkcyB0aGF0IGRvbXlkaXIoKSBi eSBkZWZhdWx0ICovCisgICAgICAgIHx8IChjeCA9PSBYWERJUiAgfHwgY3ggPT0gWFhMRElSIHx8 IGN4ID09IFhYV0RJUiB8fAorCSAgICBjeCA9PSBYWEhESVIgfHwgY3ggPT0gWFhUT1VDKQorI2Vu ZGlmIC8qIERPTVlESVIgKi8KKyAgICAgICAgKQorICAgICAgcmV0dXJuKGRvbXlkaXIoY3gpKTsJ CS8qIEJ1aWx0LWluIGRpcmVjdG9yeSBjb21tYW5kICovCisKKyAgICAvKiBVc2UgdGhlIHN5c3Rl bSdzIGRpcmVjdG9yeSBjb21tYW5kLiAqLworCisgICAgbXNnID0gKGN4ID09IFhYTFMpID8KKyAg ICAgICJBcmd1bWVudHMgZm9yIGxzIiA6CisgICAgICAgICJEaXJlY3RvcnkgYW5kL29yIGZpbGUg c3BlY2lmaWNhdGlvbiI7CisgICAgaWYgKCh4ID0gY210eHQobXNnLCIiLCZzLHh4c3RyaW5nKSkg PCAwKQorICAgICAgcmV0dXJuKHgpOworCisgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJ Wik7ICAgICAgLyogQ29weSB0aGUgZmlsZXNwZWMgKi8KKyAgICBzID0gdG1wYnVmOworCisgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisKKyAgICBscCA9IGxpbmU7CisgICAg aWYgKCEoZGMgPSBnZXRlbnYoIkNLX0RJUiIpKSkKKyAgICAgIGRjID0gRElSQ01EOworICAgIGNr bWFrbXNnKGxwLExJTkJVRlNJWixkYywiICIscyxOVUxMKTsKKyAgICBkZWJ1ZyhGMTEwLCJESVIi LGxpbmUsMCk7CisjaWZkZWYgVk1TCisgICAgY29ucmVzKCk7CisjZW5kaWYgLyogVk1TICovCisg ICAgeCA9IHpzaGNtZChsaW5lKTsKKyNpZmRlZiBWTVMKKyAgICBjb25jYigoY2hhcillc2NhcGUp OworI2VuZGlmIC8qIFZNUyAqLworICAgIHJldHVybihzdWNjZXNzID0gKHggPCAxKSA/IDAgOiAx KTsKKyNlbmRpZiAvKiBPUzIgKi8KK30KKworI2lmbmRlZiBOT1NFUlZFUgorI2lmbmRlZiBOT0ZS SUxMUworLyogRG8gdGhlIEVOQUJMRSBhbmQgRElTQUJMRSBjb21tYW5kcyAqLworCitpbnQKK2Rv ZW5hYmxlKHkseCkgaW50IHksIHg7IHsKKyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChpc2d1ZXN0 KSAgICAgICAgICAgICAgICAgICAgICAgIC8qIElLU0Q6IERvbid0IGxldCBndWVzdHMgKi8KKyAg ICAgIHJldHVybigwKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmFibGUgYW55dGhpbmcg dGhhdCdzIGRpc2FibGVkICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICBzd2l0Y2ggKHgp IHsKKyAgICAgIGNhc2UgRU5fQUxMOgorICAgICAgICBlbl9jd2QgPSBlbl9jcHkgPSBlbl9kZWwg PSBlbl9kaXIgPSBlbl9maW4gPSBlbl9nZXQgPSB5OworICAgICAgICBlbl9yZW4gPSBlbl9zZW4g PSBlbl9zZXQgPSBlbl9zcGEgPSBlbl90eXAgPSBlbl9yZXQgPSB5OworICAgICAgICBpZiAoIWlu c2VydmVyKQorICAgICAgICAgIGVuX3dobyA9IGVuX21haSA9IGVuX3ByaSA9IHk7CisgICAgICAg IGVuX21rZCA9IGVuX3JtZCA9IHk7CisgICAgICAgIGVuX3hpdCA9IHk7CisjaWZuZGVmIGRhdGFn ZW5lcmFsCisgICAgICAgIGVuX2J5ZSA9IHk7CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNp Zm5kZWYgTk9QVVNICisgICAgICAgIGlmICghbm9wdXNoICYmICFpbnNlcnZlcikKKyAgICAgICAg ICBlbl9ob3MgPSB5OworI2VuZGlmIC8qIE5PUFVTSCAqLworI2lmbmRlZiBOT1NQTAorICAgICAg ICBlbl9hc2cgPSBlbl9xdWUgPSB5OworI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgIGJyZWFr OworCisgICAgICBjYXNlIEVOX0JZRToKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKy8qCisgIEluIERh dGEgR2VuZXJhbCBBT1MvVlMgS2VybWl0IGNhbid0IGxvZyBvdXQgaXRzIHN1cGVyaW9yIHByb2Nl c3MuCisqLworICAgICAgICBlbl9ieWUgPSB5OworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9DUFk6CisgICAgICAgIGVuX2NweSA9IHk7Cisg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9DV0Q6CisgICAgICAgIGVuX2N3ZCA9IHk7Cisj aWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIgJiYgeSA9PSAwKSB7CisgICAgICAgICAg ICBmbnJwYXRoID0gUEFUSF9PRkY7CisgICAgICAgICAgICBmbnNwYXRoID0gUEFUSF9PRkY7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF Tl9ERUw6ICAgICAgICAgICAgICAgICAgICAgIC8qIERlbGV0aW5nIG9mIGZpbGVzICovCisgICAg ICAgIGVuX2RlbCA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9ESVI6CisgICAg ICAgIGVuX2RpciA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9GSU46CisgICAg ICAgIGVuX2ZpbiA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9HRVQ6CisgICAg ICAgIGVuX2dldCA9IHk7CisgICAgICAgIGJyZWFrOworI2lmbmRlZiBOT1BVU0gKKyAgICAgIGNh c2UgRU5fSE9TOgorICAgICAgICBpZiAoIW5vcHVzaCkKKyAgICAgICAgIGVuX2hvcyA9IHk7Cisg ICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PUFVTSCAqLworICAgICAgY2FzZSBFTl9SRU46Cisg ICAgICAgIGVuX3JlbiA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9TRU46Cisg ICAgICAgIGVuX3NlbiA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9TRVQ6Cisg ICAgICAgIGVuX3NldCA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9TUEE6Cisg ICAgICAgIGVuX3NwYSA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9UWVA6Cisg ICAgICAgIGVuX3R5cCA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFTl9XSE86Cisg ICAgICAgIGVuX3dobyA9IHk7CisgICAgICAgIGJyZWFrOworI2lmbmRlZiBOT1NQTAorICAgICAg Y2FzZSBFTl9BU0c6CisgICAgICAgIGVuX2FzZyA9IHk7CisgICAgICAgIGJyZWFrOworICAgICAg Y2FzZSBFTl9RVUU6CisgICAgICAgIGVuX3F1ZSA9IHk7CisgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIE5PU1BMICovCisgICAgICBjYXNlIEVOX1JFVDoKKyAgICAgICAgZW5fZGVsID0geTsKKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVOX01BSToKKyNpZmRlZiBDS19MT0dJTgorICAgICAg ICBpZiAoaXNndWVzdCAmJiB5KSB7CisgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgbm90IHZh bGlkIGZvciBndWVzdHNcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQor I2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICAgIGVuX21haSA9IHk7CisgICAgICAgIGJyZWFr OworICAgICAgY2FzZSBFTl9QUkk6CisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgaWYgKGlzZ3Vl c3QgJiYgeSkgeworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIG5vdCB2YWxpZCBmb3IgZ3Vl c3RzXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBD S19MT0dJTiAqLworICAgICAgICBlbl9wcmkgPSB5OworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgRU5fTUtEOgorICAgICAgICBlbl9ta2QgPSB5OworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgRU5fUk1EOgorICAgICAgICBlbl9ybWQgPSB5OworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgRU5fWElUOgorICAgICAgICBlbl94aXQgPSB5OworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgRU5fRU5BOgorICAgICAgICBpZiAoKCh5ICYgMSkgJiYgIShlbl9lbmEgJiAxKSkgfHwKKyAg ICAgICAgICAgICgoeSAmIDIpICYmICEoZW5fZW5hICYgMikpKSB7CisgICAgICAgICAgICBwcmlu dGYoIj9Tb3JyeSwgRElTQUJMRSBFTkFCTEUgY2FuIG5vdCBiZSB1bmRvbmVcbiIpOworICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVuX2VuYSA9 IHk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZGVmYXVsdDoKKyAgICAg ICAgcmV0dXJuKC0yKTsKKyAgICB9CisgICAgcmV0dXJuKDEpOworfQorI2VuZGlmIC8qIE5PRlJJ TExTICovCisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworCitzdGF0 aWMgaW50IGRlbF9saXMgPSAwOworc3RhdGljIGludCBkZWxfZG90ID0gMDsKK3N0YXRpYyBpbnQg ZGVsX2hkZyA9IDA7CitzdGF0aWMgaW50IGRlbF9wYWcgPSAtMTsKK3N0YXRpYyBpbnQgZGVsX2Fz ayA9IDA7CisKKyNpZm5kZWYgTk9TSE9XCitWT0lECitzaG93ZGVsb3B0cygpIHsKKyAgICBpbnQg eCA9IDA7CisgICAgZXh0ZXJuIGludCBvcHRsaW5lczsKKyAgICBwcnRvcHQoJm9wdGxpbmVzLCIi KTsKKyAgICBwcnRvcHQoJm9wdGxpbmVzLCJERUxFVEUiKTsKKyAgICBpZiAoZGVsX2FzayA+IC0x KSB7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsIGRlbF9hc2sgPyAiL0FTSyIgOiAiL05PQVNL Iik7CisgICAgICAgIHgrKzsKKyAgICB9CisjaWZkZWYgVU5JWE9ST1NLCisgICAgaWYgKGRlbF9k b3QgPiAtMSkgeworICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBkZWxfZG90ID8gIi9ET1RGSUxF UyIgOiAiL05PRE9URklMRVMiKTsKKyAgICAgICAgeCsrOworICAgIH0KKyNlbmRpZiAvKiBVTklY T1JPU0sgKi8KKyAgICBpZiAoZGVsX2xpcyA+IC0xKSB7CisgICAgICAgIHBydG9wdCgmb3B0bGlu ZXMsIGRlbF9saXMgPyAiL0xJU1QiIDogIi9OT0xJU1QiKTsKKyAgICAgICAgeCsrOworICAgIH0K KyAgICBpZiAoZGVsX2hkZyA+IC0xKSB7CisgICAgICAgIHBydG9wdCgmb3B0bGluZXMsIGRlbF9o ZGcgPyAiL0hFQURJTkciIDogIi9OT0hFQURJTkciKTsKKyAgICAgICAgeCsrOworICAgIH0KKyNp Zm5kZWYgQ0tfVFRHV1NJWgorICAgIGlmIChkZWxfcGFnID4gLTEpIHsKKyAgICAgICAgcHJ0b3B0 KCZvcHRsaW5lcywgZGVsX3BhZyA/ICIvUEFHRSIgOiAiL05PUEFHRSIpOworICAgICAgICB4Kys7 CisgICAgfQorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICBpZiAoIXgpIHBydG9wdCgmb3B0 bGluZXMsIihubyBvcHRpb25zIHNldCkiKTsKKyAgICBwcnRvcHQoJm9wdGxpbmVzLCIiKTsKK30K KyNlbmRpZiAvKiBOT1NIT1cgKi8KKworCitpbnQKK3NldGRlbG9wdHMoKSB7CisgICAgaW50IHhf bGlzID0gLTEsIHhfcGFnID0gLTEsIHhfZG90ID0gLTEsIHhfaGRnID0gLTEsIHhfYXNrID0gLTE7 CisgICAgaW50IGdldHZhbCA9IDA7CisgICAgY2hhciBjOworICAgIHdoaWxlICgxKSB7CisgICAg ICAgIGlmICgoeSA9IGNtc3dpKGRlbHRhYixuZGVsdGFiLCJTd2l0Y2giLCIiLHh4c3RyaW5nKSkg PCAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAtMykKKyAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgfQorICAg ICAgICBjID0gY21nYnJrKCk7CisgICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMg PT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50 ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dm bGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1 aXJlcyBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9 CisgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgIGNhc2UgREVMX0RPVDoKKyAgICAgICAg ICAgIHhfZG90ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgREVMX05P RDoKKyAgICAgICAgICAgIHhfZG90ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IGNhc2UgREVMX0hERzoKKyAgICAgICAgICAgIHhfaGRnID0gMTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGNhc2UgREVMX0xJUzoKKyAgICAgICAgICAgIHhfbGlzID0gMTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgREVMX05PTDoKKyAgICAgICAgICAgIHhfbGlz ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBDS19UVEdXU0laCisgICAgICAgICAg Y2FzZSBERUxfUEFHOgorICAgICAgICAgICAgeF9wYWcgPSAxOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBERUxfTk9QOgorICAgICAgICAgICAgeF9wYWcgPSAwOworICAgICAg ICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgIGNhc2UgREVM X1FVSToKKyAgICAgICAgICAgIHhfbGlzID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgREVMX1ZSQjoKKyAgICAgICAgICAgIHhfbGlzID0gMTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgREVMX0FTSzoKKyAgICAgICAgICAgIHhfYXNrID0gMTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgREVMX05BUzoKKyAgICAgICAgICAgIHhf YXNrID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICBwcmludGYoIj9Tb3JyeSwgdGhpcyBvcHRpb24gY2FuIG5vdCBiZSBzZXRcbiIpOworICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApICAgICAgICAgICAgICAvKiBHZXQgY29uZmlybWF0aW9uICovCisgICAgICByZXR1 cm4oeCk7CisgICAgaWYgKHhfcGFnID4gLTEpIGRlbF9wYWcgPSB4X3BhZzsKKyAgICBpZiAoeF9k b3QgPiAtMSkgZGVsX2RvdCA9IHhfZG90OworICAgIGlmICh4X2hkZyA+IC0xKSBkZWxfaGRnID0g eF9oZGc7CisgICAgaWYgKHhfbGlzID4gLTEpIGRlbF9saXMgPSB4X2xpczsKKyAgICBpZiAoeF9h c2sgPiAtMSkgZGVsX2FzayA9IHhfYXNrOworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisK KyNpZmRlZiBPUzIKK3N0YXRpYyBjaGFyICoqIHhtdGNocyA9IE5VTEw7CitzdGF0aWMgaW50IHht dGNobiA9IDA7CisjZW5kaWYgLyogT1MyICovCisKK2ludAorZG9kZWwoKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIERFTEVURSAqLworICAgIGludCBpLCBqLCBrLCB4OworICAg IGludCBmcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gY2FsbCBmaWxl c2VsZWN0KCkgKi8KKyAgICBpbnQgbGVuID0gMDsKKyAgICBpbnQgYmFkID0gMDsKKyAgICBpbnQg Z2V0dmFsID0gMCwgYXNraW5nID0gMDsKKyAgICBpbnQgc2ltdWxhdGUgPSAwLCByYyA9IDA7Cisg ICAgQ0tfT0ZGX1QgbWluc2l6ZSA9IC0xTCwgbWF4c2l6ZSA9IC0xTDsKKyAgICBpbnQgaGF2ZW5h bWUgPSAwLCBjb25maXJtZWQgPSAwOworICAgIGludCBxZmxhZyA9IDA7CisgICAgaW50IHN1bW1h cnkgPSAwOworICAgIGludCBkZWxkaXJzID0gMDsKKyAgICBpbnQgZGVsdHJlZSA9IDA7CisgICAg aW50IGl0c2FkaXIgPSAwOworICAgIGludCBhcmdpc2RpciA9IDA7CisgICAgaW50IHhtb2RlID0g LTEsIHNjYW4gPSAwLCBza2lwID0gMDsKKyNpZmRlZiBDT01NRU5UCisgICAgaW50IHBhc3MgPSAw OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBjaGFyIGM7CisgICAgY2hhciAqIGRlbGRlZiA9 ICIiOworICAgIGNoYXIgc2FmZWJ1ZltDS01BWFBBVEgrMV07CisgICAgc3RydWN0IEZEQiBzdywg ZmksIGZsOworICAgIGNoYXIKKyAgICAgICogZGVsX2FmdCA9IE5VTEwsCisgICAgICAqIGRlbF9i ZWYgPSBOVUxMLAorICAgICAgKiBkZWxfbmFmID0gTlVMTCwKKyAgICAgICogZGVsX25iZiA9IE5V TEwsCisgICAgICAqIGRlbF9leGMgPSBOVUxMOworICAgIGludAorICAgICAgeF9saXMgPSAwLAor ICAgICAgLyogeF9kb3QgPSAtMSwgKi8KKyAgICAgIHhfaGRnID0gMDsKKworICAgIGNoYXIgKiBk eGxpc3RbOF07CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSBkeGxpc3RbaV0gPSBOVUxM OworCisgICAgZ19tYXRjaGRvdCA9IG1hdGNoZG90OworCisgICAgaWYgKGRlbF9saXMgPiAtMSkg eF9saXMgICAgPSBkZWxfbGlzOworICAgIGlmIChkZWxfZG90ID4gLTEpIG1hdGNoZG90ID0gZGVs X2RvdDsKKyAgICBpZiAoZGVsX2hkZyA+IC0xKSB4X2hkZyAgICA9IGRlbF9oZGc7CisgICAgaWYg KGRlbF9wYWcgPiAtMSkgeGFza21vcmUgPSBkZWxfcGFnOworICAgIGlmIChkZWxfYXNrID4gLTEp IGFza2luZyAgID0gZGVsX2FzazsKKworICAgIGRpcmFjdGl2ZSA9IDE7CisgICAgbm9saW5rcyA9 IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQnkgZGVmYXVsdCBkb24ndCBmb2xsb3cgbGlu a3MgKi8KKworICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0 IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAg ICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAiRmlsZSBzcGVjaWZpY2F0aW9uO1xu IG9yIHN3aXRjaCIsCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog ZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIG5kZWx0YWIsICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgIDQsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3 aSAqLworICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgZGVsdGFiLCAgICAgICAgICAgICAgICAgICAgICAv KiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICZmaSAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOworICAgIGNtZmRiaSgm ZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIHRoYXQgZG9lc24ndCBtYXRj aCAqLworICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICov CisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisg ICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRh ICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAg ICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAgICAgICApOworICBhZ2FpbjoKKyAgICBj bWZkYmkoJmZpLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAybmQgRkRCIC0gZmlsZSB0byBk ZWxldGUgKi8KKyAgICAgICAgICAgX0NNSUZJLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29k ZSAqLworICAgICAgICAgICAiRmlsZShzKSB0byBkZWxldGUiLCAgICAgICAgIC8qIGhscG1zZyAq LworICAgICAgICAgICBkZWxkZWYsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8K KyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcg ZGF0YSAqLworICAgICAgICAgICBub2xpbmtzIHwgZGVsZGlycywgICAgICAgICAgIC8qIDAgPSBm aWxlcywgMSA9IGZpbGVzIG9yIGRpcnMgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAxID0gZGlycyBvbmx5ICovCisgICAgICAgICAgIHh4c3RyaW5nLAorICAg ICAgICAgICBOVUxMLAorICAgICAgICAgICAmZmwKKyAgICAgICAgICAgKTsKKyAgICB3aGlsZSAo IWhhdmVuYW1lICYmICFjb25maXJtZWQpIHsKKyAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAg ICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgaWYgKHggPCAwKSB7ICAg ICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLworICAgICAgICAgICAgaWYgKHggPT0gLTMpCisg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHggPT0gLTIgfHwgeCA9PSAtOSkK KyAgICAgICAgICAgICAgcHJpbnRmKCI/RG9lcyBub3QgbWF0Y2ggc3dpdGNoIG9yIGZpbGVuYW1l OiBcIiVzXCJcbiIsYXRtYnVmKTsKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQor ICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAgIC8qIEJyZWFrIG91dCBpZiBu b3QgYSBzd2l0Y2ggKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgYyA9IGNtZ2JyaygpOyAg ICAgICAgICAgICAgICAgICAvKiBHZXQgYnJlYWsgY2hhcmFjdGVyICovCisgICAgICAgIGlmICgo Z2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FS RykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYW4g YXJndW1lbnRcbiIpOworICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGRl bGV0ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBD TV9BUkcpKSB7CisgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBh cmd1bWVudFxuIik7CisgICAgICAgICAgICByYyA9IC05OworICAgICAgICAgICAgZ290byB4ZGVs ZXRlOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoayA9IGNtcmVzdWx0Lm5yZXN1bHQpIHsK KyAgICAgICAgICBjYXNlIERFTF9BRlQ6CisgICAgICAgICAgY2FzZSBERUxfQkVGOgorICAgICAg ICAgIGNhc2UgREVMX05BRjoKKyAgICAgICAgICBjYXNlIERFTF9OQkY6CisgICAgICAgICAgICBp ZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWRhdGUoIkZpbGUtdGlt ZSIsIiIsJnMsMCx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0z KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0RhdGUtdGltZSByZXF1aXJlZFxuIik7 CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg ICAgICAgICAgICAgICAgIHJjID0geDsKKyAgICAgICAgICAgICAgICBnb3RvIHhkZWxldGU7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBmcysrOworICAgICAgICAgICAgZGVsdHJlZSA9IDA7 CisgICAgICAgICAgICBzd2l0Y2ggKGspIHsKKyAgICAgICAgICAgICAgY2FzZSBERUxfQUZUOiBt YWtlc3RyKCZkZWxfYWZ0LHMpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBERUxfQkVGOiBt YWtlc3RyKCZkZWxfYmVmLHMpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBERUxfTkFGOiBt YWtlc3RyKCZkZWxfbmFmLHMpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBERUxfTkJGOiBt YWtlc3RyKCZkZWxfbmJmLHMpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgREVMX0RPVDoKKyAgICAgICAgICAgIG1hdGNoZG90ID0gMTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgREVMX05PRDoKKyAgICAgICAgICAg IG1hdGNoZG90ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgREVMX0FM TDoKKyAgICAgICAgICAgIGZzID0gMDsKKyNpZmRlZiBWTVMKKyAgICAgICAgICAgIGRlbGRlZiA9 ICIqLioiOyAgICAgICAgICAgICAvKiBVTklYLCBXaW5kb3dzLCBPUy8yICovCisjZWxzZQorI2lm ZGVmIGRhdGFnZW5lcmFsCisgICAgICAgICAgICBkZWxkZWYgPSAiKyI7ICAgICAgICAgICAgICAg LyogQU9TL1ZTICovCisjZWxzZQorICAgICAgICAgICAgZGVsZGVmID0gIioiOyAgICAgICAgICAg ICAgIC8qIFVOSVgsIFdpbmRvd3MsIE9TLzIsIFZNUy4uLiAqLworI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCisjZW5kaWYgLyogVk1TICovCisgICAgICAgICAgICBkZWx0cmVlID0gMTsKKyAgICAg ICAgICAgIG5vbGlua3MgPSAyOworICAgICAgICAgICAgbWF0Y2hkb3QgPSAxOworICAgICAgICAg ICAgcmVjdXJzaXZlID0gMTsgICAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCBwdXJwb3NlbHku Li4gKi8KKyAgICAgICAgICBjYXNlIERFTF9ESVI6CisgICAgICAgICAgICBkZWxkaXJzID0gMTsK KyAgICAgICAgICAgIGdvdG8gYWdhaW47CisgICAgICAgICAgY2FzZSBERUxfRVhDOgorICAgICAg ICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBh dHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHggPT0g LTMpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/UGF0dGVybiByZXF1aXJlZFxuIik7 CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg ICAgICAgICAgICAgICAgIHJjID0geDsKKyAgICAgICAgICAgICAgICBnb3RvIHhkZWxldGU7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBmcysrOworICAgICAgICAgICAgZGVsdHJlZSA9IDA7 CisgICAgICAgICAgICBtYWtlc3RyKCZkZWxfZXhjLHMpOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBERUxfSERHOgorICAgICAgICAgICAgeF9oZGcgPSAxOworICAgICAgICAg ICAgYnJlYWs7CisjaWZkZWYgUkVDVVJTSVZFCisgICAgICAgICAgY2FzZSBERUxfUkVDOgorICAg ICAgICAgICAgcmVjdXJzaXZlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFJF Q1VSU0lWRSAqLworICAgICAgICAgIGNhc2UgREVMX0xJUzoKKyAgICAgICAgICAgIHhfbGlzID0g MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgREVMX1NVTToKKyAgICAgICAg ICAgIHN1bW1hcnkgPSAxOworICAgICAgICAgICAgeF9saXMgPSAwOworICAgICAgICAgICAgeF9o ZGcgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxfTk9MOgorICAg ICAgICAgICAgeF9saXMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIENLX1RUR1dT SVoKKyAgICAgICAgICBjYXNlIERFTF9QQUc6CisgICAgICAgICAgICB4YXNrbW9yZSA9IDE7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERFTF9OT1A6CisgICAgICAgICAgICB4 YXNrbW9yZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19UVEdXU0laICov CisgICAgICAgICAgY2FzZSBERUxfUVVJOgorICAgICAgICAgICAgcWZsYWcgPSAxOworICAgICAg ICAgICAgeF9saXMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBERUxf VlJCOgorICAgICAgICAgICAgeF9saXMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgICBjYXNlIERFTF9TTUE6CisgICAgICAgICAgY2FzZSBERUxfTEFSOgorICAgICAgICAgICAg aWYgKCFnZXR2YWwpIGJyZWFrOworICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oIkZpbGUgc2l6 ZSBpbiBieXRlcyIsIjAiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1 cm4oeCk7CisgICAgICAgICAgICBmcysrOworICAgICAgICAgICAgZGVsdHJlZSA9IDA7CisgICAg ICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgY2FzZSBE RUxfU01BOiBtaW5zaXplID0geTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgREVMX0xBUjog bWF4c2l6ZSA9IHk7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgICBjYXNlIERFTF9TSU06CisgICAgICAgICAgICBzaW11bGF0ZSA9IDE7CisgICAg ICAgICAgICB4X2xpcyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIERF TF9BU0s6CisgICAgICAgICAgICBhc2tpbmcgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBERUxfTkFTOgorICAgICAgICAgICAgYXNraW5nID0gMDsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgREVMX1RZUDogeworICAgICAgICAgICAgICBleHRlcm4g c3RydWN0IGtleXRhYiB0eHRiaW5bXTsKKyAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFr OworICAgICAgICAgICAgICBpZiAoKHggPSBjbWtleSh0eHRiaW4sMywiIiwiIix4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgIGlmICh4ID09 IDIpIHsgICAgICAgICAgICAgLyogQUxMICovCisgICAgICAgICAgICAgICAgICB4bW9kZSA9IC0x OworICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgIC8qIFRFWFQgb3IgQklO QVJZIG9ubHkgKi8KKyAgICAgICAgICAgICAgICAgIHhtb2RlID0geDsKKyAgICAgICAgICAgICAg ICAgIHNjYW4gPSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIH0KKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHJpbnRmKCI/Tm90IGlt cGxlbWVudGVkIHlldCAtIFwiJXNcIlxuIixhdG1idWYpOworICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocWZsYWcgJiYgKGNtcmVzdWx0LmZjb2RlID09 IF9DTUZMRCkpIHsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgfQorICAgIGlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01JRkkpIHsKKyAgICAgICAgaWYgKCph dG1idWYpIHsKKwkgICAgaW50IHg7CisgICAgICAgICAgICBpZiAoaXN3aWxkKGF0bWJ1ZikgJiYg bnp4cGFuZChhdG1idWYsbnp4b3B0cykgPT0gMCkKKyAgICAgICAgICAgICAgcHJpbnRmKCI/Tm8g ZmlsZXMgbWF0Y2g6ICVzXG4iLGJyc3RyaXAoYXRtYnVmKSk7CisgICAgICAgICAgICBlbHNlIGlm ICgoeCA9IHpjaGtpKGF0bWJ1ZikpID09IC0xKQorCSAgICAgIHByaW50ZigiP0ZpbGUgbm90IGZv dW5kOiAlc1xuIixicnN0cmlwKGF0bWJ1ZikpOworCSAgICBlbHNlIGlmICh4ID09IC0yKQorCSAg ICAgIHByaW50ZigiP05vdCBhIHJlZ3VsYXIgZmlsZTogJXNcbiIsYXRtYnVmKTsKKwkgICAgZWxz ZQorICAgICAgICAgICAgICAvKiBwcmludGYoIj9Ob3QgYSBkZWxldGFibGUgZmlsZTogJXNcbiIs YXRtYnVmKTsgKi8KKyAgICAgICAgICAgICAgZ290byB0cnlhbnl3YXk7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBwcmludGYoIj9BIGZpbGUgc3BlY2lmaWNhdGlvbiBpcyByZXF1aXJl ZFxuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgIHRyeWFueXdh eToKKyAgICBja3N0cm5jcHkodG1wYnVmLGNtcmVzdWx0LnNyZXN1bHQsVE1QQlVGU0laKTsgLyog U2FmZSBjb3B5IG9mIGZpbGVzcGVjICovCisgICAgaWYgKGRlbGRpcnMpIHsKKyAgICAgICAgY2tz dHJuY3B5KHNhZmVidWYsY21yZXN1bHQuc3Jlc3VsdCxDS01BWFBBVEgpOworI2lmZGVmIFZNU09S VU5JWAorICAgICAgICBsZW4gPSB6Z2V0ZnModG1wYnVmKTsgICAgICAgICAgIC8qIElzIGl0IGEg ZGlyZWN0b3J5IG5hbWU/ICovCisgICAgICAgIGFyZ2lzZGlyID0gemdmc19kaXI7ICAgICAgICAg ICAgLyogVGhlbiBiZWNhdXNlIG9mIGhvdyB6eHBhbmQoKSAqLworICAgICAgICBpZiAoYXJnaXNk aXIgJiYgemdmc19saW5rKSAgICAgIC8qIHdvcmtzLCB3ZSBoYXZlIHRvIGFkZCBpdCB0byAqLwor ICAgICAgICAgIGFyZ2lzZGlyID0gMDsgICAgICAgICAgICAgICAgIC8qIHRoZSBsaXN0LiAqLwor ICAgICAgICBpZiAoaXRzYWRpcikKKyAgICAgICAgICBsZW4gPSAtMjsKKyNlbHNlCisgICAgICAg IGxlbiA9IHpjaGtpKHRtcGJ1Zik7CisgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAgIGFy Z2lzZGlyID0gaXNkaXIodG1wYnVmKTsKKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKyAgICB9Cisg ICAgZGVidWcoRjExMCwiREVMRVRFIGZpbGUiLHRtcGJ1ZiwwKTsKKyAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9H SU4KKyAgICBpZiAoaW5zZXJ2ZXIgJiYgaXNndWVzdCkgeworICAgICAgICBwcmludGYoIj9Tb3Jy eSwgREVMRVRFIHVuYXZhaWxhYmxlIHRvIGd1ZXN0c1xuIik7CisgICAgICAgIHJldHVybigtOSk7 CisgICAgfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyogSUtTRCAqLworCisjaWZu ZGVmIE9TMk9SVU5JWAorICAgIGlmIChzaW11bGF0ZSkgeworICAgICAgICBwcmludGYoIj9Tb3Jy eSwgL1NJTVVMQVRFIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisjZW5kaWYgLyogT1MyT1JVTklYICovCisKKyNpZmRlZiBD T01NRU5UCisgICAgLyogKG5vdCBuZWVkZWQpICovCisgICAgaWYgKCFpc3dpbGQodG1wYnVmKSkg eworICAgICAgICBjaGFyICptOworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIHggPSB6Y2hr aSh0bXBidWYpOworICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAgICAgICAgIHN3aXRjaCAoeCkg eworICAgICAgICAgICAgICBjYXNlIC0yOiBtID0gIk5vdCBhIHJlZ3VsYXIgZmlsZSI7IGJyZWFr OworICAgICAgICAgICAgICBjYXNlIC0xOiBtID0gIkZpbGUgbm90IGZvdW5kIG9yIG5vdCBhY2Nl c3NpYmxlIjsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IG0gPSBlcnJubyA/IGNrX2Vy cnN0cigpIDogIkNhbid0IGRlbGV0ZSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmlu dGYoIj8lczogXCIlc1wiXG4iLG0sdG1wYnVmKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisgICAgbWFrZWxpc3QoZGVs X2V4YyxkeGxpc3QsOCk7CisKKy8qIHRtcGJ1ZltdIGhhcyB0aGUgbmFtZSAtIG5vdyBkbyBhbnkg bmVlZGVkIGNvbnZlcnNpb25zIG9uIGl0ICovCisKKyNpZmRlZiBPUzIKKyAgICB7ICAgLyogTG93 ZXIgbGV2ZWwgZnVuY3Rpb25zIGNoYW5nZSAvIHRvIFwsIG5vdCBnb29kIGZvciBDTUQuRVhFLiAq LworICAgICAgICBjaGFyICpwID0gdG1wYnVmOworICAgICAgICB3aGlsZSAoKnApIHsgICAgICAg ICAgICAgICAgICAgIC8qIENoYW5nZSB0aGVtIGJhY2sgdG8gXCAqLworICAgICAgICAgICAgaWYg KCpwID09ICcvJykgKnAgPSAnXFwnOworICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAg fQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgVk1TCisgICAgaWYgKGlzd2lsZCh0bXBidWYp KSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAvKiBEb2VzIG5vdCBoYW5kbGUgJy4nIGFzIHZl cnNpb24gc2VwYXJhdG9yICovCisgICAgICAgIGNoYXIgKnAgPSB0bXBidWY7CisgICAgICAgIHgg PSAwOworICAgICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnOycpIHsK KyAgICAgICAgICAgICAgICB4ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0gZWxzZQorICAgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF4 KSBja3N0cm5jYXQodG1wYnVmLCI7KiIsVE1QQlVGU0laKTsKKyNlbHNlCisgICAgICAgIGogPSAw OyB4ID0gMDsgICAgICAgICAgICAgICAgICAgLyogZm9yIGVuZF9kb3QgYW5kIG51bWJlciBvZiBk b3RzICovCisgICAgICAgIGkgPSBzdHJsZW4odG1wYnVmKTsKKyAgICAgICAgaWYgKHRtcGJ1Zltp XSA9PSAnOycpIHsKKyAgICAgICAgICAgIGNrc3RybmNhdCh0bXBidWYsIjAiLFRNUEJVRlNJWik7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodG1wYnVmW2ktLV0gPT0gJy4nKQor ICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKyAg ICAgICAgICAgICAgICBpZiAodG1wYnVmW2ldID09ICc7JyB8fCB0bXBidWZbaV0gPT0gJzonIHx8 CisgICAgICAgICAgICAgICAgICAgIHRtcGJ1ZltpXSA9PSAnXScgfHwgdG1wYnVmW2ldID09ICc+ JykKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRt cGJ1ZltpXSA9PSAnLicpCisgICAgICAgICAgICAgICAgICB4Kys7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAodG1wYnVmW2ldICE9ICc7JykgeyAgICAgLyogZG90IG1heSBoYXZlIGJl ZW4gdXNlZCAqLworICAgICAgICAgICAgICAgIGlmIChqKSB7ICAgICAgICAgICAgICAgIC8qIGxh c3QgY2hhciBpcyBkb3QgKi8KKyAgICAgICAgICAgICAgICAgIGlmICh4KSAgICAgICAgICAgICAg ICAvKiBzZWNvbmQgaXMgdmVyc2lvbiBzZXBhcmF0b3IgKi8KKyAgICAgICAgICAgICAgICAgICAg Y2tzdHJuY2F0KHRtcGJ1ZiwiMCIsVE1QQlVGU0laKTsKKyAgICAgICAgICAgICAgICAgIGVsc2Ug ICAgICAgICAgICAgICAgICAvKiAnZm9vLicgKi8KKyAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y2F0KHRtcGJ1ZiwiOzAiLFRNUEJVRlNJWik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4 ID09IDEpICAgICAgLyogbGFja2luZyBhIHZlcnNpb24gc2VwYXJhdG9yICovCisgICAgICAgICAg ICAgICAgICBja3N0cm5jYXQodG1wYnVmLCI7MCIsVE1QQlVGU0laKTsKKyAgICAgICAgICAgICAg ICBlbHNlIGlmICh4ID09IDApICAgICAgICAvKiB4ID09IDIgaGFzIGEgdmVyc2lvbiAqLworICAg ICAgICAgICAgICAgICAgY2tzdHJuY2F0KHRtcGJ1ZiwiLio7MCIsVE1QQlVGU0laKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisjZW5kaWYg LyogVk1TICovCisKKyAgICBkZWJ1ZyhGMTEwLCJkb2RlbCB0bXBidWYiLHRtcGJ1ZiwwKTsgLyog RmlsZW5hbWUgKi8KKworI2lmbmRlZiBPUzJPUlVOSVggICAgICAgICAgICAgICAgICAgICAgIC8q IE5vIGJ1aWx0LWluIERFTEVURSBjb2RlLi4uICovCisgICAgLyogQ29uc3RydWN0IHN5c3RlbSBj b21tYW5kLiAqLworICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLERFTENNRCwiICIsdG1wYnVm LE5VTEwpOworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICBpZiAoYXNraW5nKSB7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBNYXliZSBvdmVyd3JpdGUgaW4gVk1TICovCisgICAgICAgIGlmICh4X2xp cykgICAgICAgICAgICAgICAgICAgICAgLyogaWYgb3B0aW9ucyBhcmUgbmVlZGVkLi4uICovCisg ICAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosREVMQ01ELCIgL2NvbmZpcm0vbG9nICIs dG1wYnVmLE5VTEwpOworICAgICAgICBlbHNlCisgICAgICAgICAgY2ttYWttc2cobGluZSxMSU5C VUZTSVosREVMQ01ELCIgL2NvbmZpcm0gIix0bXBidWYsTlVMTCk7CisgICAgfSBlbHNlIGlmICh4 X2xpcykKKyAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLERFTENNRCwiIC9sb2cgIix0bXBi dWYsTlVMTCk7CisgICAgY29ucmVzKCk7CisjZW5kaWYgLyogVk1TICovCisKKyAgICBkZWJ1ZyhG MTEwLCJkb2RlbCBsaW5lIixsaW5lLDApOworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworCisjaWZk ZWYgTUFDCisgICAgc3VjY2VzcyA9ICh6ZGVsZXQodG1wYnVmKSA9PSAwKTsKKworI2Vsc2UgIC8q ICFNQUMgLi4uICovCisKKyNpZmRlZiBPUzJPUlVOSVgKKyAgICB7CisgICAgICAgIGludCBmaWxl c3BhY2UgPSAwOworICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBpbnQgbGluZXMgPSAw OworICAgICAgICBpbnQgbiA9IDA7CisKKyAgICAgICAgcyA9IHRtcGJ1ZjsKKworI2lmZGVmIENL X1RUR1dTSVoKKyNpZmRlZiBPUzIKKyAgICAgICAgdHRnY3dzeigpOworI2Vsc2UgLyogT1MyICov CisgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2luZG93IHNpemUgY2hhbmdlZCAqLworICAgICAg ICBpZiAodHRnd3NpeigpID4gMCkgeworICAgICAgICAgICAgaWYgKHR0X3Jvd3MgPiAwICYmIHR0 X2NvbHMgPiAwKSB7CisgICAgICAgICAgICAgICAgY21kX3Jvd3MgPSB0dF9yb3dzOworICAgICAg ICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworICAgICAgICBpZiAo eF9oZGcgPiAwICYmICFzdW1tYXJ5KSB7CisgICAgICAgICAgICBwcmludGYoIkRlbGV0aW5nICVz Li4uJXNcbiIsIHMsIHNpbXVsYXRlID8gIiAoU0lNVUxBVElPTikiIDogIiIpOworICAgICAgICAg ICAgbiArPSAyOworICAgICAgICB9CisjaWZkZWYgWlhSRVdJTkQKKyAgICAgICAgeiA9IHp4cmV3 aW5kKCk7ICAgICAgICAgICAgICAgICAvKiBSZXdpbmQgZmlsZSBsaXN0ICovCisjZWxzZQorICAg ICAgICBpZiAoIWRlbGRpcnMpCisgICAgICAgICAgbnp4b3B0cyA9IFpYX0ZJTE9OTFk7CisgICAg ICAgIGlmIChyZWN1cnNpdmUpIG56eG9wdHMgfD0gWlhfUkVDVVJTRTsKKyAgICAgICAgaWYgKG1h dGNoZG90KSAgbnp4b3B0cyB8PSBaWF9NQVRDSERPVDsKKyAgICAgICAgZXJybm8gPSAwOworICAg ICAgICB6ID0gbnp4cGFuZChzLG56eG9wdHMpOyAgICAgICAgIC8qIEV4cGFuZCBmaWxlIGxpc3Qg Ki8KKyNlbmRpZiAvKiBaWFJFV0lORCAqLworICAgICAgICBkZWJ1ZyhGMTExLCJkb2RlbCIscyx6 KTsKKworICAgICAgICAvKiBJZiBkZWxldGluZyBkaXJlY3Rvcmllcywgc29ydCBpbiByZXZlcnNl IG9yZGVyICovCisgICAgICAgIC8qIHNvIHdlIGRlbGV0ZSB0aGUgZmlsZXMgZmlyc3QsIHRoZW4g dGhlIGRpcmVjdG9yeS4gKi8KKworI2lmZGVmIE9TMgorICAgICAgICAvKiBJbiBLOTUsIHdlIGhh dmUgbm8gbXRjaHMgYXJyYXksIG5vciBhbnkgY29udHJvbCBvdmVyICovCisgICAgICAgIC8qIHRo ZSBvcmRlciBpbiB3aGljaCB6bmV4dCgpIHJldHVybnMgZmlsZW5hbWVzLCBzbyB3ZSAgKi8KKyAg ICAgICAgLyogbXVzdCBjb3B5IHRoZSBhcnJheSBhbmQgc29ydCBpdC4gKi8KKyAgICAgICAgewor ICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBpZiAoeG10Y2hzKSB7ICAgICAgICAgICAg ICAgLyogRnJlZSBwcmV2aW91cyBsaXN0IGluIGNhc2UgKi8KKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJkb2RlbCBmcmVlaW5nIHByZXZpb3VzIGxpc3QiLCIiLHhtdGNobik7CisgICAgICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IHhtdGNobjsgaSsrKSAvKiBpdCB3YXNuJ3QgZnJlZWQg bGFzdCB0aW1lLiAqLworICAgICAgICAgICAgICAgICAgaWYgKHhtdGNoc1tpXSkKKyAgICAgICAg ICAgICAgICAgICAgZnJlZSh4bXRjaHNbaV0pOworICAgICAgICAgICAgICAgIGZyZWUoeG10Y2hz KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHhtdGNobiA9IDA7CisgICAgICAgICAgICB4 bXRjaHMgPSAoY2hhciAqKiltYWxsb2MoeiAqIChzaXplb2YoY2hhciAqKikpKTsgLyogTWFrZSBu ZXcgb25lICovCisgICAgICAgICAgICBpZiAoIXhtdGNocykgeworICAgICAgICAgICAgICAgIHBy aW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworICAgICAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgejsg aSsrKSB7CisgICAgICAgICAgICAgICAgeG10Y2hzW2ldID0gTlVMTDsKKyAgICAgICAgICAgICAg ICB6bmV4dCh0bXBidWYpOworICAgICAgICAgICAgICAgIGlmICghKnRtcGJ1ZikKKyAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJih4bXRjaHNbaV0pLHRt cGJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKCF4bXRjaHNbaV0pIHsKKyAgICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgICAg ICAgICAgICAgIHhtdGNobiA9IGkgLSAxOworICAgICAgICAgICAgICAgICAgICByYyA9IC05Owor ICAgICAgICAgICAgICAgICAgICBnb3RvIHhkZWxldGU7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIC8qIGRlYnVnKEYxMTEsImRvZGVsIGFkZCIseG10Y2hzW2ldLGkpOyAqLwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgeG10Y2huID0gaTsKKyAgICAgICAgICAgIGRlYnVn KEYxMDEsImRvZGVsIHhtdGNobiIsIiIseG10Y2huKTsKKyAgICAgICAgICAgIHNoX3NvcnQoeG10 Y2hzLE5VTEwseiwwLGRlbGRpcnMsMCk7CisgICAgICAgIH0KKyNlbHNlCisjaWZkZWYgVU5JWAor ICAgICAgICBzaF9zb3J0KG10Y2hzLE5VTEwseiwwLGRlbGRpcnMsZmlsZWNhc2UpOworI2VuZGlm IC8qIFVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgICBpZiAoeiA+IDApIHsKKyAg ICAgICAgICAgIGludCBpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgaW50IGl4ID0gMDsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAxOworICAgICAgICAgICAgaWYg KHhfaGRnID4gMCkKKyAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworCisgICAgICAgICAgICB3 aGlsZSAoCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgaXggPCB4bXRjaG4KKyNlbHNl CisgICAgICAgICAgICAgICAgICAgMQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAg ICAgICkgeyAgICAgICAgICAgICAgICAgIC8qIExvb3AgZm9yIGFsbCBmaWxlcyAqLworI2lmZGVm IE9TMgorICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYseG10Y2hzW2l4KytdLFRNUEJV RlNJWik7CisjZWxzZQorICAgICAgICAgICAgICAgIHpuZXh0KHRtcGJ1Zik7ICAgICAgICAgIC8q IEdldCBuZXh0IGZpbGUgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICBpZiAo ISp0bXBidWYpIHsgICAgICAgICAvKiBObyBtb3JlICovCisgICAgICAgICAgICAgICAgICAgIGlm IChkZWxkaXJzICYmIHJlY3Vyc2l2ZSAmJiBhcmdpc2RpcikgeworICAgICAgICAgICAgICAgICAg ICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzYWZlYnVmLFRNUEJVRlNJWik7CisgICAgICAgICAgICAg ICAgICAgICAgICBhcmdpc2RpciA9IDA7ICAgLyogKG9ubHkgZG8gdGhpcyBvbmNlKSAqLworICAg ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2tpcCA9IDA7CisgICAgICAgICAgICAg ICAgaWYgKCFkZWx0cmVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmcykKKyAgICAgICAg ICAgICAgICAgICAgICBpZiAoZmlsZXNlbGVjdCh0bXBidWYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVsX2FmdCxkZWxfYmVmLGRlbF9uYWYsZGVsX25iZiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5zaXplLG1heHNpemUsMCw4LGR4bGlz dCkgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXArKzsKKyAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc2tp cCAmJiBzY2FuICYmIGl0c2FkaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgc2tpcCsrOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXNraXAgJiYgc2NhbikgeworICAg ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2NhbmZpbGUodG1wYnVmLCZ5LG5zY2FuZmlsZSkp IHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZUX0JJTjoKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICh4bW9kZSAhPSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwKys7 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj YXNlIEZUX1RFWFQ6CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGVF83QklUOgorICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgRlRfOEJJVDoKKyNpZmRlZiBVTklDT0RFCisgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBGVF9VVEY4OgorICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRlRf VUNTMjoKKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo eG1vZGUgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCsrOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc2tp cCAmJiBhc2tpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAg ICAgICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCIgRGVsZXRlICIsdG1wYnVmLCI/ICIsTlVM TCk7CisgICAgICAgICAgICAgICAgICAgIHggPSBnZXR5ZXNubyhsaW5lLDMpOworICAgICAgICAg ICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNv bnRpbnVlOyAgICAgICAgICAgLyogbm8gKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6 IGJyZWFrOyAgICAgICAgICAgICAgLyogeWVzICovCisgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSAyOiBnb3RvIHhkZWxldGU7ICAgICAgIC8qIHF1aXQgKi8KKyAgICAgICAgICAgICAgICAgICAg ICBjYXNlIDM6IGFza2luZyA9IDA7IGJyZWFrOyAgLyogZ28gKi8KKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBWTVNPUlVOSVgKKyAgICAgICAgICAgICAg ICBsZW4gPSB6Z2V0ZnModG1wYnVmKTsgICAvKiBHZXQgbGVuZ3RoIGFuZCBhY2Nlc3NpYmlsaXR5 ICovCisgICAgICAgICAgICAgICAgaXRzYWRpciA9IHpnZnNfZGlyOworICAgICAgICAgICAgICAg IGlmIChpdHNhZGlyICYmIHpnZnNfbGluaykgeyAvKiBUcmVhdCBsaW5rcyB0byBkaXJlY3Rvcmll cyAqLworICAgICAgICAgICAgICAgICAgICBpdHNhZGlyID0gMDsgICAgICAgIC8qIGFzIHJlZ3Vs YXIgZmlsZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjYW4pICAgICAgICAgICAvKiBC dXQgbm90IGlmIC9UWVBFOiB3YXMgZ2l2ZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICBza2lw Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpdHNhZGlyKSAgICAg ICAgICAgIC8qIChlbXVsYXRlIG5vbi1Vbml4IGNvZGUpICovCisgICAgICAgICAgICAgICAgICBs ZW4gPSAtMjsKKyNlbHNlCisgICAgICAgICAgICAgICAgbGVuID0gemNoa2kodG1wYnVmKTsgICAg LyogR2V0IGFjY2Vzc2liaWxpdHkgKi8KKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgICAg ICAgICAgICAvKiBTZWUgaWYgaXQncyBhIGRpcmVjdG9yeSAqLworICAgICAgICAgICAgICAgICAg aXRzYWRpciA9IGlzZGlyKHRtcGJ1Zik7CisjZW5kaWYgLyogVk1TT1JVTklYICovCisKKyAgICAg ICAgICAgICAgICBpZiAoc2tpcCkgeworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFRvbyB2ZXJib3NlICovCisgICAgICAgICAgICAgICAgICAgIGlmICh4X2xpcyA+ IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKys7CisgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIiAlcyAoU0tJUFBFRClcbiIsdG1wYnVmKTsKKyNpZmRlZiBDS19UVEdX U0laCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKQorICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4ZGVsZXRlOyBlbHNl IG4gPSAwOworI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICAgICAgICAgICAgICAgICAgfQor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiREVMRVRFIGxlbiIs dG1wYnVmLGxlbik7CisgICAgICAgICAgICAgICAgaWYgKHNpbXVsYXRlKSB7CisgICAgICAgICAg ICAgICAgICAgIGZpbGVzcGFjZSArPSBsZW47CisgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7 CisgICAgICAgICAgICAgICAgICAgIGlmICh4X2xpcyA+IDApIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGxpbmVzKys7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlcyAoU0VM RUNURUQpXG4iLHRtcGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHh4OworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHh4ID0gYXNrbW9yZSgpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgheHgpIGdvdG8geGRlbGV0ZTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAobGVuID49IDAgfHwgIWl0c2FkaXIpIHsgLyogUmVndWxhciBmaWxlICovCisgICAg ICAgICAgICAgICAgICAgIHpkZWxldCh0bXBidWYpOyAgICAgICAgICAgICAgICAvKiBvciBzeW1s aW5rLCBldGMuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHpjaGtpKHRtcGJ1ZikgPCAw KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3BhY2UgKz0gbGVuOworICAgICAgICAg ICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4X2xp cyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcysrOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChPSylcbiIsdG1wYnVmKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geGRlbGV0ZTsgZWxzZSBuID0g MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhZCsrOworICAgICAgICAgICAgICAgICAgICAg ICAgc3VjY2VzcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeF9saXMgPiAwKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMrKzsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIiAlcyAoRkFJTEVEOiAlcylcbiIsdG1wYnVmLGNrX2VycnN0cigp KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIGdvdG8geGRlbGV0 ZTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLyogcGFzcyA+IDAgJiYgKi8gZGVs ZGlycyAmJiBpdHNhZGlyKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBkaXJlY3Rv cnkgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHpybWRpcih0bXBidWYpID4gLTEpIHsgLyog T25seSB3b3JrcyBpZiBlbXB0eSAqLworICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4X2xpcyA+IDApIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaW5lcysrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiICVzIChPSylcbiIsdG1wYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFh c2ttb3JlKCkpIGdvdG8geGRlbGV0ZTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHN1Y2Nlc3MgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhfbGlzID4gMCkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKys7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCIgJXMgKEZBSUxFRDogJXMpXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0bXBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNrX2VycnN0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2tt b3JlKCkpIGdvdG8geGRlbGV0ZTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeF9s aXMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmVzKys7CisgICAgICAgICAgICAgICAg ICAgIGlmIChpc2Rpcih0bXBidWYpKQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVz IChGQUlMRUQ6IGRpcmVjdG9yeSlcbiIsdG1wYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzIChGQUlMRUQ6IG5vdCBhIHJlZ3Vs YXIgZmlsZSlcbiIsdG1wYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4ZGVs ZXRlOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmICh4X2hkZyA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobGluZXMgPiAwKQor ICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpCisgICAgICAgICAgICAgICAgICBpZiAoIWFza21vcmUoKSkgZ290byB4 ZGVsZXRlOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgICAgIHByaW50ZigiJWQgZmlsZSVzICVz ZGVsZXRlZCwgJWQgYnl0ZSVzICVzZnJlZWQlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg Y291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICE9IDEgPyAicyIgOiAiIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGUgPyAid291bGQgYmUgIiA6ICIiLAorICAgICAg ICAgICAgICAgICAgICAgICBmaWxlc3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGVz cGFjZSAhPSAxID8gInMiIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpbXVsYXRlID8g IndvdWxkIGJlICIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGUgPyAiICht YXliZSkiIDogIiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICgheF9saXMgJiYgIXN1Y2Nlc3MgJiYgIXF1aWV0KSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCI/REVMRVRFIGZhaWxlZCBmb3IgJWQgZmlsZSVzIFwKKyh1c2UgREVMRVRF IC9MSVNUIHRvIHNlZSBkZXRhaWxzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYmFkLCBi YWQgPT0gMSA/ICIiIDogInMiCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0gZWxzZSBpZiAoeF9saXMgPiAwKSB7CisgICAgICAgICAgICBpZiAoZXJy bm8pCisgICAgICAgICAgICAgIHByaW50ZigiPyVzOiAlc1xuIixja19lcnJzdHIoKSwgdG1wYnVm KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgZGVsZXRl OiAlc1xuIix0bXBidWYpOworICAgICAgICB9CisgICAgfQorI2Vsc2UgLyogT1MyT1JVTklYICov CisjaWZuZGVmIFZNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJzIC0gbGV0 IHRoZSBzeXN0ZW0gZG8gaXQuICovCisgICAgeHN5c3RlbShsaW5lKTsKKyAgICB4ID0gbnp4cGFu ZCh0bXBidWYsbnp4b3B0cyk7CisgICAgc3VjY2VzcyA9ICh4ID4gMCkgPyAwIDogMTsKKyAgICBp ZiAoeF9oZGcgPiAwKQorICAgICAgcHJpbnRmKCIlcyAtICVzZGVsZXRlZFxuIiwgdG1wYnVmLCBz dWNjZXNzID8gIiIgOiAibm90ICIpOworI2Vsc2UKKyAgICBpZiAoYXNraW5nKQorICAgICAgcHJp bnRmKCJcbiIpOworICAgIHggPSB4c3lzdGVtKGxpbmUpOyAgICAgICAgICAgICAgICAgIC8qIHpz aGNtZCByZXR1cm5zIDEgZm9yIHN1Y2Nlc3MgKi8KKyAgICBzdWNjZXNzID0gKHggPiAwKSA/IDEg OiAwOworICAgIGlmICh4X2hkZyA+IDAgJiYgIWFza2luZykKKyAgICAgIHByaW50ZigiJXMgLSAl c2RlbGV0ZWRcbiIsIHRtcGJ1Ziwgc3VjY2VzcyA/ICIiIDogIm5vdCAiKTsKKyAgICBjb25jYigo Y2hhcillc2NhcGUpOworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLwor I2VuZGlmIC8qIE1BQyAqLworICB4ZGVsZXRlOgorICAgIGlmIChnX21hdGNoZG90ID4gLTEpIHsK KyAgICAgICAgbWF0Y2hkb3QgPSBnX21hdGNoZG90OyAgICAgICAgICAvKiBSZXN0b3JlIHRoZXNl Li4uICovCisgICAgICAgIGdfbWF0Y2hkb3QgPSAtMTsKKyAgICB9CisjaWZkZWYgT1MyCisgICAg aWYgKHhtdGNocykgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZGVidWcoRjEwMSwiZG9kZWwg ZnJlZWluZyBsaXN0IiwiIix4bXRjaG4pOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgeG10Y2hu OyBpKyspCisgICAgICAgICAgaWYgKHhtdGNoc1tpXSkgZnJlZSh4bXRjaHNbaV0pOworICAgICAg ICBmcmVlKHhtdGNocyk7CisgICAgICAgIHhtdGNocyA9IE5VTEw7CisgICAgICAgIHhtdGNobiA9 IDA7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgIGRlYnVnKEYxMDEsImRvZGVsIHJlc3Vs dCIsIiIscmMpOworICAgIHJldHVybigocmMgPCAwKSA/IHJjIDogc3VjY2Vzcyk7Cit9CisjZW5k aWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT1NQTCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRoZSBFTFNFIGNvbW1hbmQgKi8KK19QUk9UT1RZUCggVk9JRCBwdXNocWNtZCwgKGNo YXIgKikgKTsKKworaW50Citkb2Vsc2UoKSB7CisgICAgaWYgKCFpZmNtZFtjbWRsdmxdKSB7Cisg ICAgICAgIHByaW50ZigiP0VMU0UgZG9lc24ndCBmb2xsb3cgSUZcbiIpOworICAgICAgICByZXR1 cm4oLTIpOworICAgIH0KKyNpZmRlZiBDT01NRU5UCisvKgorICBXcm9uZy4gIFRoaXMgcHJldmVu dHMgSUYuLkVMU0UgSUYuLi5FTFNFIElGLi4uRUxTRSBJRi4uLkVMU0UuLi4KKyAgZnJvbSB3b3Jr aW5nLgorKi8KKyAgICBpZmNtZFtjbWRsdmxdID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgaWYgKCFpZnRlc3RbY21kbHZsXSkgeyAgICAgICAgICAgICAgLyogSWYgSUYgd2FzIGZhbHNl IGRvIEVMU0UgcGFydCAqLworICAgICAgICBpZiAobWFjbHZsID4gLTEgfHwgdGxldmVsID4gLTEp IHsgLyogSW4gbWFjcm8gb3IgY29tbWFuZCBmaWxlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAw LCJkb2Vsc2UgcHVzaGluZyIsIiIsMCk7CisjaWZuZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHB1 c2hjbWQoTlVMTCk7ICAgICAgICAgICAgICAvKiBzYXZlIHJlc3Qgb2YgY29tbWFuZC4gKi8KKyNl bHNlCisgICAgICAgICAgICAvKiBUaGlzIGZpeGVzIGNlcnRhaW4gb2JzY3VyZSBwcm9ibGVtcyAq LworICAgICAgICAgICAgLyogYnV0IGJyZWFrcyBtYW55IG90aGVyIGNvbnN0cnVjdGlvbnMgdGhh dCBtdXN0IHdvcmsuICovCisgICAgICAgICAgICBwdXNocWNtZChOVUxMKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYg aW50ZXJhY3RpdmUsICovCisgICAgICAgICAgICBjbWluaShja3hlY2gpOyAgICAgICAgICAgICAg LyoganVzdCBzdGFydCBhIG5ldyBjb21tYW5kICovCisgICAgICAgICAgICBwcmludGYoIlxuIik7 ICAgICAgICAgICAgICAgLyogKGxpa2UgaW4gTVMtRE9TIEtlcm1pdCkgKi8KKyAgICAgICAgICAg IGlmIChwZmxhZykgcHJvbXB0KHh4c3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbmRpdGlvbiBpcyBmYWxzZSAqLworICAgICAg ICBpZiAoKHkgPSBjbXR4dCgiY29tbWFuZCB0byBiZSBpZ25vcmVkIiwiIiwmcyxOVUxMKSkgPCAw KQorICAgICAgICAgIHJldHVybih5KTsgICAgICAgICAgICAgICAgICAgIC8qIEdvYmJsZSB1cCBy ZXN0IG9mIGxpbmUgKi8KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIE5PU1BM ICovCisKKyNpZm5kZWYgTk9TUEwKK2ludAorZG9zd2l0Y2goKSB7CisgICAgY2hhciAqbHAsICph cDsgICAgICAgICAgICAgICAgICAgICAgLyogTWFjcm8gYXJndW1lbnQgcG9pbnRlciAqLworICAg IGludCBsZW4gPSAwLCB4LCB5LCBwcCA9IDA7CisgICAgY2hhciBicmJ1ZlszXTsKKworICAgIC8q IEdldCB2YXJpYWJsZSBuYW1lICovCisKKyAgICB0bXBidWZbMF0gPSBOVUw7CisgICAgYnJidWZb MF0gPSAneyc7CisgICAgYnJidWZbMV0gPSAnfSc7CisgICAgYnJidWZbMl0gPSBOVUw7CisKKyAg ICB5ID0gY21mbGQoIlZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3RyaW5nKTsKKyAgICBkZWJ1ZyhG MTExLCJkb3N3aXRjaCBjbWZsZCIscyx5KTsKKyAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgaWYg KHkgPT0gLTMpCQkJLyogQmVjYXVzZSBicnN0cmlwKCkgd3JpdGVzICovCisgICAgICAgICAgcyA9 IGJyYnVmOwkJCS8qIGludG8gaXRzIGFyZ3VtZW50LiAqLworICAgICAgICBlbHNlCisgICAgICAg ICAgcmV0dXJuKHkpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJkb3N3aXRjaCBBIixzLDApOwor ICAgIGlmICghc3RyY21wKHMsIigiKSkgeworICAgICAgICBwcCsrOworICAgICAgICBpZiAoKHkg PSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAg ICAgIGlmICh5ID09IC0zKQorICAgICAgICAgICAgICBzID0gYnJidWY7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgIHJldHVybih5KTsKKwkgICAgZGVidWcoRjExMCwiZG9zd2l0Y2gg QiIscywwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBsZW4gPSBja3N0cm5jcHkodG1wYnVmLGJy c3RyaXAocyksVE1QQlVGU0laKTsKKyAgICBpZiAodG1wYnVmWzBdID09IENNRFEpIHsKKyAgICAg ICAgaWYgKGNoa3ZhcihzKSA8IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1ZhcmlhYmxlIG5h bWUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAg IH0KKyAgICBpZiAocHAgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBvcGVuIHBh cmVuIGdpdmVuIHBhcnNlIGNsb3NpbmcgKi8KKyAgICAgICAgaWYgKCh5ID0gY21mbGQoIkNsb3Np bmcgcGFyZW50aGVzaXMiLCIiLCZzLE5VTEwpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOwor ICAgICAgICBpZiAoc3RyY21wKGF0bWJ1ZiwiKSIpKSB7CisgICAgICAgICAgICBwcmludGYoIj9D bG9zaW5nIHBhcmVudGhlc2lzIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7 CisgICAgICAgIH0KKyAgICB9CisgICAgbHAgPSBsaW5lOworICAgIHggPSBja3N0cm5jcHkobHAs Il9zd2l0eCAiLExJTkJVRlNJWik7IC8qIF9zd2l0eCArIHNwYWNlICovCisgICAgbHAgKz0geDsK KyAgICBhcCA9IGxwOworICAgIGRlYnVnKEYwMTAsIlNXSVRDSCBhIixsaW5lLDApOworCisjaWZk ZWYgQ09NTUVOVAorICAgIHggPSBja21ha21zZyhscCxMSU5CVUZTSVoteCx0bXBidWYsIiAiLE5V TEwsTlVMTCk7IC8qIHZhcmlhYmxlIG5hbWUgKyBTUCAqLworI2Vsc2UKKyAgICB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJpYWJsZSBuYW1lICsgU1AgKi8KKyAgICAg ICAgY2hhciAqIHAgPSB0bXBidWY7CisJaWYgKGxlbiA+IDApIHsKKwkgICAgaWYgKHRtcGJ1Zlsw XSA9PSAnKCcgJiYgdG1wYnVmW2xlbi0xXSA9PSAnKScpIHsKKwkJdG1wYnVmW2xlbi0xXSA9IE5V TDsKKwkJcCsrOworCSAgICB9CisgICAgICAgIH0KKyAgICAgICAgeCA9IGNrbWFrbXNnKGxwLExJ TkJVRlNJWi14LCJ7IixicnN0cmlwKHApLCJ9IiwiICIpOworICAgIH0KKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgZGVidWcoRjAxMCwiU1dJVENIIGIiLGxpbmUsMCk7CisgICAgbHAgKz0geDsK KworICAgIC8qIEdldCBib2R5ICovCisKKyAgICBpZiAoKHkgPSBjbXR4dCgic2VyaWVzIG9mIGNh c2VzIiwiIiwmcyxOVUxMKSkgPCAwKSByZXR1cm4oeSk7CisgICAgaWYgKCh5ID0gKGludClzdHJs ZW4ocykpIDwgMSkgcmV0dXJuKC0yKTsKKyAgICBpZiAoc1swXSAhPSAneycgJiYgc1t5LTFdICE9 ICd9JykgeyAvKiBTdXBwbHkgYnJhY2VzIGlmIG1pc3NpbmcgKi8KKyAgICAgICAgY2ttYWttc2co dG1wYnVmLFRNUEJVRlNJWiwieyAiLHMsIiB9IixOVUxMKTsKKyAgICAgICAgcyA9IHRtcGJ1ZjsK KyAgICB9CisgICAgaWYgKGxpdGNtZCgmcywmbHAsKExJTkJVRlNJWiAtIChscCAtIChjaGFyICop bGluZSkgLSAyKSkgPCAwKSB7CisgICAgICAgIHByaW50ZigiP1VuYmFsYW5jZWQgYnJhY2VzXG4i KTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICBkZWJ1ZyhGMDEwLCJTV0lUQ0ggYyIs bGluZSwwKTsKKworICAgIHggPSBtbG9vayhtYWN0YWIsIl9zd2l0eCIsbm1hYyk7ICAgIC8qIExv b2sgdXAgU1dJVENIIG1hY3JvIGRlZmluaXRpb24gKi8KKyAgICBpZiAoeCA8IDApIHsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBOb3QgdGhlcmU/ICovCisgICAgICAgIGFkZG1tYWMoIl9zd2l0 eCIsc3dfZGVmKTsgICAgICAgLyogUHV0IGl0IGJhY2suICovCisgICAgICAgIGlmICgoeCA9IG1s b29rKG1hY3RhYiwiX3N3aXR4IixubWFjKSkgPCAwKSB7IC8qIExvb2sgaXQgdXAgYWdhaW4uICov CisgICAgICAgICAgICBwcmludGYoIj9TV0lUQ0ggbWFjcm8gZGVmaW5pdGlvbiBnb25lIVxuIik7 IC8qIFNob3VsZG4ndCBoYXBwZW4uICovCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDAp OworICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYwMTAsIlNXSVRDSCBjb21tYW5kIixsaW5l LDApOyAvKiBFeGVjdXRlIHRoZSBTV0lUQ0ggbWFjcm8uICovCisgICAgc3VjY2VzcyA9IGRvZG8o eCxhcCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgfCBDRl9JTUFDKTsKKyAgICBkZWJ1ZyhGMTAxLCJT V0lUQ0ggc3RhdHVzIiwiIixzdWNjZXNzKTsKKyAgICByZXR1cm4oc3VjY2Vzcyk7Cit9CisKK2lu dAorZG9mb3IoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBGT1IgY29t bWFuZC4gKi8KKyAgICBpbnQgaSwgZngsIGZ5LCBmejsgICAgICAgICAgICAgICAgICAvKiBsb29w IHZhcmlhYmxlcyAqLworICAgIGNoYXIgKmFwLCAqZGk7ICAgICAgICAgICAgICAgICAgICAgIC8q IG1hY3JvIGFyZ3VtZW50IHBvaW50ZXIgKi8KKyAgICBpbnQgcHAgPSAwOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQYXJlbiBsZXZlbCAqLworICAgIGludCBtdXN0cXVvdGUgPSAwOworCisg ICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBpZiAoKHkgPSBjbWZsZCgiVmFy aWFibGUgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKHkgPT0gLTMp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9WYXJpYWJsZSBuYW1lIHJlcXVpcmVkXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyY21wKHMsIigiKSkK KyAgICAgICAgICBicmVhazsKKyAgICAgICAgcHArKzsKKyAgICB9CisjaWZkZWYgQ09NTUVOVAor ICAgIGlmICgoeSA9IHBhcnNldmFyKHMsJngsJnopKSA8IDApICAgIC8qIENoZWNrIHZhcmlhYmxl LiAqLworICAgICAgcmV0dXJuKHkpOworI2Vsc2UKKyAgICBpZiAoKnMgPT0gQ01EUSkgICAgICAg ICAgICAgICAgICAgICAvKiBJZiBsb29wIHZhcmlhYmxlIHN0YXJ0cyB3aXRoICovCisgICAgICBt dXN0cXVvdGUrKzsgICAgICAgICAgICAgICAgICAgICAgLyogYmFja3NsYXNoLCBtdXN0cXVvdGUg aXMgPiAwLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIGxwID0gbGluZTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEJ1aWxkIGEgY29weSBvZiB0aGUgY29tbWFuZCAqLworICAg IGNrc3RybmNweShscCwiX2ZvcnggIixMSU5CVUZTSVopOworICAgIGxwICs9IChpbnQpc3RybGVu KGxpbmUpOyAgICAgICAgICAgIC8qICJfZm9yIiBtYWNyby4gKi8KKyAgICBhcCA9IGxwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHBvaW50ZXIgdG8gbWFjcm8gYXJncy4gKi8K KworICAgIGlmICgqcyA9PSBDTURRKSBzKys7ICAgICAgICAgICAgICAgIC8qIFNraXAgcGFzdCBi YWNrc2xhc2ggaWYgYW55LiAqLworICAgIHdoaWxlICgoKmxwKysgPSAqcysrKSkgOyAgICAgICAg ICAgIC8qIGNvcHkgaXQgKi8KKyAgICBscC0tOyAqbHArKyA9IFNQOyAgICAgICAgICAgICAgICAg ICAvKiBhZGQgYSBzcGFjZSAqLworCisgICAgaWYgKCh5ID0gY21udW0oImluaXRpYWwgdmFsdWUi LCIiLDEwLCZmeCx4eHN0cmluZykpIDwgMCkgeworICAgICAgICBpZiAoeSA9PSAtMykgcmV0dXJu KC0yKTsKKyAgICAgICAgZWxzZSByZXR1cm4oeSk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsImRv Zm9yIGZ4IiwiIixmeCk7CisgICAgcyA9IGF0bWJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ29weSB0aGUgYXRvbSBidWZmZXIgKi8KKworICAgIGlmICgoaW50KXN0cmxlbihzKSA8IDEp IGdvdG8gYmFkZm9yOworLyoKKyAgSW4gZWRpdCAxOTIsIHdlIGNoYW5nZSB0aGUgbG9vcCB2YXJp YWJsZXMgdG8gYmUgZXZhbHVhdGVkIGF0IGxvb3AgZW50cnksCisgIG5vdCBlYWNoIHRpbWUgdGhy b3VnaCB0aGUgbG9vcC4gIFRoaXMgd2FzIHJlcXVpcmVkIGluIG9yZGVyIHRvIGFsbG93CisgIFx2 KGFyZ2MpIHRvIGJlIHVzZWQgYXMgYSBsb29wIHZhcmlhYmxlLCBvciBpbiBhIGxvb3AtdmFyaWFi bGUgZXhwcmVzc2lvbi4KKyAgVGh1cywgd2UgY2FuJ3QgaGF2ZSBGT1IgbG9vcHMgdGhhdCBtb2Rp ZnkgdGhlaXIgb3duIGV4aXQgY29uZGl0aW9ucyBieQorICBjaGFuZ2luZyB0aGUgZmluYWwgdmFs dWUgb3IgdGhlIGluY3JlbWVudC4gIFRoZSBwcm9ibGVtIHdpdGggXHYoYXJnYykgd2FzCisgIHRo YXQgaXQgaXMgb24gdGhlIG1hY3JvIHN0YWNrOyBhZnRlciBlbnRyeSBpbnRvIHRoZSBfZm9yeCBt YWNybywgaXQgaXMgYXQKKyAgdGhlIHdyb25nIHBsYWNlLgorKi8KKyAgICBzcHJpbnRmKHRtcGJ1 ZiwiJWQiLGZ4KTsgICAgICAgICAgICAvKiAoU0FGRSkgU3Vic3RpdHV0ZSBhY3R1YWwgdmFsdWUg Ki8KKyAgICBzID0gdG1wYnVmOworICAgIHdoaWxlICgoKmxwKysgPSAqcysrKSkgOyAgICAgICAg ICAgIC8qICh3aGF0IHRoZXkgYWN0dWFsbHkgdHlwZWQpICovCisgICAgbHAtLTsgKmxwKysgPSBT UDsKKyNpZmRlZiBERUJVRworICAgICpscCA9IE5VTDsKKyAgICBkZWJ1ZyhGMTEwLCJGT1IgQSIs bGluZSwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisgICAgaWYgKCh5ID0gY21udW0oImZpbmFs IHZhbHVlIiwiIiwxMCwmZnkseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgaWYgKHkgPT0gLTMp IHJldHVybigtMik7CisgICAgICAgIGVsc2UgcmV0dXJuKHkpOworICAgIH0KKyAgICBkZWJ1ZyhG MTAxLCJkb2ZvciBmeSIsIiIsZnkpOworICAgIHMgPSBhdG1idWY7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNhbWUgZGVhbCAqLworICAgIGlmICgoaW50KXN0cmxlbihzKSA8IDEpCisgICAg ICBnb3RvIGJhZGZvcjsKKworICAgIHNwcmludGYodG1wYnVmLCIlZCIsZnkpOyAgICAgICAgICAg IC8qIFNBRkUgKi8KKyAgICBzID0gdG1wYnVmOworICAgIHdoaWxlICgoKmxwKysgPSAqcysrKSkg OworICAgIGxwLS07CisgICAgKmxwKysgPSBTUDsKKyNpZmRlZiBERUJVRworICAgICpscCA9IE5V TDsKKyAgICBkZWJ1ZyhGMTEwLCJGT1IgQiIsbGluZSwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLwor CisgICAgeF9pZm51bSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5jcmVtZW50IG9y IHBhcmVudGhlc2lzICovCisgICAgZGkgPSAoZnggPCBmeSkgPyAiMSIgOiAiLTEiOyAgICAgICAg LyogRGVmYXVsdCBpbmNyZW1lbnQgKi8KKyAgICBpZiAoKHkgPSBjbW51bSgiaW5jcmVtZW50Iixk aSwxMCwmZnoseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwiZG9mb3IgaW5j cmVtZW50IixhdG1idWYseSk7CisgICAgICAgIHhfaWZudW0gPSAwOworICAgICAgICBpZiAoeSA9 PSAtMykgeyAgICAgICAgICAgICAgICAgIC8qIFByZW1hdHVyZSB0ZXJtaW5hdGlvbiAqLworICAg ICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfSBlbHNlIGlmICh5ID09IC0yKSB7ICAgICAg ICAgICAvKiBNYXliZSBjbG9zaW5nIHBhcmVuICovCisgICAgICAgICAgICBpZiAoIXN0cmNtcChh dG1idWYsIikiKSkgeworICAgICAgICAgICAgICAgIHBwLS07ICAgICAgICAgICAgICAgICAgIC8q IENvdW50IGl0ICovCisgICAgICAgICAgICAgICAgcyA9IGRpOyAgICAgICAgICAgICAgICAgLyog c3VwcGx5IGRlZmF1bHQgaW50ZXJ2YWwgKi8KKyAgICAgICAgICAgICAgICBmeiA9IGF0b2kocyk7 CisgICAgICAgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGNsb3Npbmcg cGFyZW4sIGludmFsaWQgKi8KKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICB9IGVs c2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyIGVycm9yICovCisgICAgICAgICAg cmV0dXJuKHkpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE51 bWJlciAqLworICAgICAgICB4X2lmbnVtID0gMDsKKyAgICAgICAgZGVidWcoRjEwMSwiZG9mb3Ig ZnoiLCIiLGZ6KTsKKyAgICAgICAgcyA9IGF0bWJ1ZjsgICAgICAgICAgICAgICAgICAgICAvKiBV c2UgaXQgKi8KKyAgICB9CisgICAgaWYgKChpbnQpc3RybGVuKHMpIDwgMSkKKyAgICAgIGdvdG8g YmFkZm9yOworCisgICAgc3ByaW50Zih0bXBidWYsIiVkIixmeik7ICAgICAgICAgICAgLyogKFNB RkUpIFNhbWUgZGVhbCAqLworICAgIHMgPSB0bXBidWY7CisgICAgd2hpbGUgKCgqbHArKyA9ICpz KyspKSA7CisgICAgbHAtLTsgKmxwKysgPSBTUDsKKworI2lmZGVmIERFQlVHCisgICAgKmxwID0g TlVMOworICAgIGRlYnVnKEYxMTAsIkZPUiBDIixsaW5lLDApOworI2VuZGlmIC8qIERFQlVHICov CisKKyAgICAvKiBJbnNlcnQgdGhlIGFwcHJvcHJpYXRlIGNvbXBhcmlzb24gb3BlcmF0b3IgKi8K KyAgICBpZiAoZnogPCAwKQorICAgICAgKmxwKysgPSAnPCc7CisgICAgZWxzZQorICAgICAgKmxw KysgPSAnPic7CisgICAgKmxwKysgPSBTUDsKKworI2lmZGVmIERFQlVHCisgICAgKmxwID0gTlVM OworICAgIGRlYnVnKEYxMTAsIkZPUiBEIixsaW5lLDApOworI2VuZGlmIC8qIERFQlVHICovCisK KyAgICBpZiAocHAgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBvcGVuIHBhcmVu IGdpdmVuIHBhcnNlIGNsb3NpbmcgKi8KKyAgICAgICAgaWYgKCh5ID0gY21mbGQoIkNsb3Npbmcg cGFyZW50aGVzaXMiLCIiLCZzLE5VTEwpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAg ICAgICBpZiAoc3RyY21wKGF0bWJ1ZiwiKSIpKSB7CisgICAgICAgICAgICBwcmludGYoIj9DbG9z aW5nIHBhcmVudGhlc2lzIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCh5ID0gY210eHQoIkNvbW1hbmQgdG8gZXhlY3V0ZSIs IiIsJnMsTlVMTCkpIDwgMCkgcmV0dXJuKHkpOworICAgIGlmICgoeSA9IChpbnQpc3RybGVuKHMp KSA8IDEpIHJldHVybigtMik7CisgICAgaWYgKHNbMF0gIT0gJ3snICYmIHNbeS0xXSAhPSAnfScp IHsgLyogU3VwcGx5IGJyYWNlcyBpZiBtaXNzaW5nICovCisgICAgICAgIGNrbWFrbXNnKHRtcGJ1 ZixUTVBCVUZTSVosInsgIixzLCIgfSIsTlVMTCk7CisgICAgICAgIHMgPSB0bXBidWY7CisgICAg fQorICAgIGlmIChsaXRjbWQoJnMsJmxwLChMSU5CVUZTSVogLSAobHAgLSAoY2hhciAqKWxpbmUp IC0gMikpIDwgMCkgeworICAgICAgICBwcmludGYoIj9VbmJhbGFuY2VkIGJyYWNlc1xuIik7Cisg ICAgICAgIHJldHVybigwKTsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICAqbHAgPSBOVUw7Cisg ICAgZGVidWcoRjExMCwiRk9SIEUiLGxpbmUsMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lm ZGVmIENPTU1FTlQKKy8qIFRvbyBzdHJpY3QgKi8KKyAgICBpZiAoZnogPT0gMCkgeworICAgICAg ICBwcmludGYoIj9aZXJvIGluY3JlbWVudCBub3QgYWxsb3dlZFxuIik7CisgICAgICAgIHJldHVy bigwKTsKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworLyoKKyAgSW4gdmVyc2lvbiA4LjAg d2UgZGVjaWRlZCB0byBhbGxvdyBtYWNybyBuYW1lcyBhbnlwbGFjZSBhIG51bWVyaWMtdmFsZWQK KyAgdmFyaWFibGUgY291bGQgYXBwZWFyLiAgQnV0IHRoaXMgY2F1c2VkIHRyb3VibGUgZm9yIHRo ZSBGT1IgbG9vcHMgYmVjYXVzZQorICB0aGUgcXVvdGluZyBpbiBmb3JfZGVmW10gYXNzdW1lZCBh IFwlaS1zdHlsZSBsb29wIHZhcmlhYmxlLiAgV2UgYWNjb3VudAorICBmb3IgdGhpcyBoZXJlIGlu IHRoZSBpZiAobXVzdHF1b3RlKS4uLmVsc2UgbG9naWMgYnkgaW52b2tpbmcgc2VwYXJhdGUKKyAg Rk9SIG1hY3JvIGRlZmluaXRpb25zIGluIHRoZSB0d28gY2FzZXMuCisqLworICAgIGlmIChtdXN0 cXVvdGUpIHsgICAgICAgICAgICAgICAgICAgIC8qIFwlaS1zdHlsZSBsb29wIHZhcmlhYmxlICov CisgICAgICAgIHggPSBtbG9vayhtYWN0YWIsIl9mb3J4IixubWFjKTsgLyogTG9vayB1cCBGT1Ig bWFjcm8gZGVmaW5pdGlvbiAqLworICAgICAgICBpZiAoeCA8IDApIHsgICAgICAgICAgICAgICAg ICAgIC8qIE5vdCB0aGVyZT8gKi8KKyAgICAgICAgICAgIGFkZG1tYWMoIl9mb3J4Iixmb3JfZGVm KTsgICAvKiBQdXQgaXQgYmFjay4gKi8KKyAgICAgICAgICAgIGlmICgoeCA9IG1sb29rKG1hY3Rh YiwiX2ZvcngiLG5tYWMpKSA8IDApIHsgLyogTG9vayBpdCB1cCBhZ2Fpbi4gKi8KKyAgICAgICAg ICAgICAgICBwcmludGYoIj9GT1IgbWFjcm8gZGVmaW5pdGlvbiBnb25lIVxuIik7CisgICAgICAg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvb3AgdmFyaWFibGUg aXMgYSBtYWNybyAqLworICAgICAgICB4ID0gbWxvb2sobWFjdGFiLCJfZm9yeiIsbm1hYyk7Cisg ICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgYWRkbW1hYygiX2ZvcnoiLGZvel9kZWYp OworICAgICAgICAgICAgaWYgKCh4ID0gbWxvb2sobWFjdGFiLCJfZm9yeiIsbm1hYykpIDwgMCkg eworICAgICAgICAgICAgICAgIHByaW50ZigiP0ZPUiBtYWNybyBkZWZpbml0aW9uIGdvbmUhXG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYwMTAsIkZPUiBjb21tYW5kIixsaW5lLDApOyAg IC8qIEV4ZWN1dGUgdGhlIEZPUiBtYWNyby4gKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IGRvZG8o eCxhcCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgfCBDRl9JTUFDKSk7CisKK2JhZGZvcjoKKyAgICBw cmludGYoIj9JbmNvbXBsZXRlIEZPUiBjb21tYW5kXG4iKTsKKyAgICByZXR1cm4oLTIpOworfQor I2VuZGlmIC8qIE5PU1BMICovCisKKworI2lmbmRlZiBOT1NQTAorCisvKiAgVCBPIEQgMiBTIEUg QyAgLS0gIENvbnZlcnQgdGltZSBvZiBkYXkgYXMgaGg6bW06c3MgdG8gc2VjcyBzaW5jZSBtaWRu aXRlICovCisvKgorICBDYWxsIHdpdGggYSBzdHJpbmcgaGg6bW0gb3IgaGg6bW06c3MuCisgIFJl dHVybnMgYSAwIHRvIDg2NDAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIGZh aWx1cmUuCisqLworbG9uZwordG9kMnNlYyh0KSBjaGFyICogdDsgeworICAgIGxvbmcgdDI7Cisg ICAgbG9uZyBoaCA9IDBMLCBtbSA9IDBMLCBzcyA9IDBMOworCisgICAgaWYgKCF0KSB0ID0gIiI7 CisgICAgaWYgKCEqdCkKKyAgICAgIHJldHVybigtM0wpOworICAgIGRlYnVnKEYxMTAsInRvZDJz ZWMiLHQsMCk7CisKKyAgICBpZiAoaXNkaWdpdCgqdCkpICAgICAgICAgICAgICAgICAgICAvKiBH ZXQgaG91cnMgZnJvbSBhcmd1bWVudCAqLworICAgICAgaGggPSAqdCsrIC0gJzAnOworICAgIGVs c2UKKyAgICAgIHJldHVybigtMUwpOworICAgIGlmIChpc2RpZ2l0KCp0KSkKKyAgICAgIGhoID0g aGggKiAxMCArICp0KysgLSAnMCc7CisjaWZkZWYgQ09NTUVOVAorICAgIGlmIChoaCA+IDI0TCkK KyAgICAgIHJldHVybigtMUwpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAoKnQgPT0g JzonKQorICAgICAgdCsrOworICAgIGVsc2UgaWYgKCEqdCkKKyAgICAgIGdvdG8geHRvZDJzZWM7 CisgICAgZWxzZQorICAgICAgcmV0dXJuKC0xTCk7CisKKyAgICBpZiAoaXNkaWdpdCgqdCkpICAg ICAgICAgICAgICAgICAgICAvKiBNaW51dGVzICovCisgICAgICBtbSA9ICp0KysgLSAnMCc7Cisg ICAgZWxzZQorICAgICAgcmV0dXJuKC0xTCk7CisgICAgaWYgKGlzZGlnaXQoKnQpKQorICAgICAg bW0gPSBtbSAqIDEwICsgKnQrKyAtICcwJzsKKyAgICBpZiAobW0gPiA2MEwpCisgICAgICByZXR1 cm4oLTFMKTsKKyAgICBpZiAoKnQgPT0gJzonKQorICAgICAgdCsrOworICAgIGVsc2UgaWYgKCEq dCkKKyAgICAgIGdvdG8geHRvZDJzZWM7CisgICAgZWxzZQorICAgICAgcmV0dXJuKC0xTCk7CisK KyAgICBpZiAoaXNkaWdpdCgqdCkpICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmRzICovCisg ICAgICBzcyA9ICp0KysgLSAnMCc7CisgICAgZWxzZQorICAgICAgcmV0dXJuKC0xTCk7CisgICAg aWYgKGlzZGlnaXQoKnQpKQorICAgICAgc3MgPSBzcyAqIDEwICsgKnQrKyAtICcwJzsKKyAgICBp ZiAoc3MgPiA2MEwpCisgICAgICByZXR1cm4oLTFMKTsKKworICAgIGlmICgqdCA+IDMyKSAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE5vIHRyYWlsaW5nIGp1bmsgYWxsb3dlZCAqLworICAgICAg cmV0dXJuKC0xTCk7CisKKyAgeHRvZDJzZWM6CisKKyAgICB0MiA9IGhoICogMzYwMEwgKyBtbSAq IDYwTCArIHNzOyAgICAvKiBTZWNvbmRzIHNpbmNlIG1pZG5pZ2h0IGZyb20gYXJnICovCisgICAg ZGVidWcoRjEwMSwidG9kMnNlYyB0MiIsIiIsdDIpOworCisgICAgcmV0dXJuKHQyKTsKK30KKwor aW50IHdhaXRpbnRlcnZhbCA9IDE7CisKKyNpZmRlZiBPTERXQUlUCisjdW5kZWYgT0xEV0FJVAor I2VuZGlmIC8qIE9MRFdBSVQgKi8KKworaW50IGtiY2hhciA9IE5VTDsKKworaW50Citkb3BhdXMo Y3gpIGludCBjeDsgeworICAgIGxvbmcgeno7CisgICAgZXh0ZXJuIGludCBzbGVlcGNhbjsKKwor I2lmZGVmIE9MRFdBSVQKKyAgICB6eiA9IC0xTDsKKyAgICB4X2lmbnVtID0gMTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBpbnRlcm5hbCBjb21wbGFpbnRzICovCisgICAgaWYg KGN4ID09IFhYV0FJKQorICAgICAgeSA9IGNtbnVtKCJzZWNvbmRzIHRvIHdhaXQsIG9yIHRpbWUg b2YgZGF5IGhoOm1tOnNzIiwiMSIsMTAsJngseHhzdHJpbmcpOworICAgIGVsc2UgaWYgKGN4ID09 IFhYUEFVKQorICAgICAgeSA9IGNtbnVtKCJzZWNvbmRzIHRvIHBhdXNlLCBvciB0aW1lIG9mIGRh eSBoaDptbTpzcyIsCisgICAgICAgICAgICAgICAgIjEiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICBl bHNlCisgICAgICB5ID0gY21udW0oIm1pbGxpc2Vjb25kcyB0byBzbGVlcCwgb3IgdGltZSBvZiBk YXkgaGg6bW06c3MiLAorICAgICAgICAgICAgICAgICIxMDAiLDEwLCZ4LHh4c3RyaW5nKTsKKyAg ICB4X2lmbnVtID0gMDsKKyAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgaWYgKHkgPT0gLTIpIHsg ICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkIG51bWJlciBvciBleHByZXNzaW9uICovCisgICAg ICAgICAgICBjaGFyICpwID0gdG1wYnVmOyAgICAgICAgICAgLyogUmV0cmlldmUgc3RyaW5nIGZy b20gYXRtYnVmICovCisgICAgICAgICAgICBpbnQgbiA9IFRNUEJVRlNJWjsKKyAgICAgICAgICAg ICpwID0gTlVMOworICAgICAgICAgICAgenpzdHJpbmcoYXRtYnVmLCZwLCZuKTsgICAgIC8qIEV2 YWx1YXRlIGluIGNhc2UgaXQncyBhIHZhcmlhYmxlICovCisgICAgICAgICAgICB6eiA9IHRvZDJz ZWModG1wYnVmKTsgICAgICAgLyogQ29udmVydCB0byBzZWNzIHNpbmNlIG1pZG5pZ2h0ICovCisg ICAgICAgICAgICBpZiAoenogPCAwTCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP051bWJl ciwgZXhwcmVzc2lvbiwgb3IgdGltZSBvZiBkYXkgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNo YXIgbm93WzMyXTsgICAgICAgICAgIC8qIEN1cnJlbnQgdGltZSAqLworICAgICAgICAgICAgICAg IGNoYXIgKnA7CisgICAgICAgICAgICAgICAgbG9uZyB0bm93OworICAgICAgICAgICAgICAgIHAg PSBub3c7CisgICAgICAgICAgICAgICAgenRpbWUoJnApOworICAgICAgICAgICAgICAgIHRub3cg PSBhdG9sKHArMTEpICogMzYwMEwgKyBhdG9sKHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKKyAg ICAgICAgICAgICAgICBpZiAoenogPCB0bm93KSAgICAgICAgICAvKiBVc2VyJ3MgdGltZSBiZWZv cmUgbm93ICovCisgICAgICAgICAgICAgICAgICB6eiArPSA4NjQwMEw7ICAgICAgICAgLyogU28g bWFrZSBpdCB0b21vcnJvdyAqLworICAgICAgICAgICAgICAgIHp6IC09IHRub3c7ICAgICAgICAg ICAgIC8qIFNlY29uZHMgZnJvbSBub3cuICovCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZQorICAgICAgICAgIHJldHVybih5KTsKKyAgICB9CisgICAgaWYgKHggPCAwKSB4ID0gMDsKKyAg ICBzd2l0Y2ggKGN4KSB7CisgICAgICBjYXNlIFhYUEFVOiAgICAgICAgICAgICAgICAgICAgICAg LyogUEFVU0UgKi8KKyAgICAgIGNhc2UgWFhNU0w6ICAgICAgICAgICAgICAgICAgICAgICAvKiBN U0xFRVAgKi8KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSBYWFdBSTogICAgICAgICAgICAgICAgICAgICAgIC8qIFdB SVQgKi8KKyAgICAgICAgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSBz aWduYWwgbWFzayAqLworICAgICAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgIC8q IFJlYWQgemVybyBvciBtb3JlIHNpZ25hbCBuYW1lcyAqLworICAgICAgICAgICAgeSA9IGNta2V5 KG1zdGFiLG5tcywibW9kZW0gc2lnbmFsIiwiIix4eHN0cmluZyk7CisgICAgICAgICAgICBpZiAo eSA9PSAtMykgYnJlYWs7ICAgICAgICAgLyogLTMgbWVhbnMgdGhleSB0eXBlZCBDUiAqLworICAg ICAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7ICAgICAgIC8qIE90aGVyIG5lZ2F0aXZlcyBh cmUgZXJyb3JzICovCisgICAgICAgICAgICB6IHw9IHk7ICAgICAgICAgICAgICAgICAgICAgLyog T1IgdGhlIGJpdCBpbnRvIHRoZSBzaWduYWwgbWFzayAqLworICAgICAgICB9CisgICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKworICAgICAg ZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gKi8K KyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9CisKKy8qIENvbW1hbmQgaXMgZW50ZXJlZCwgbm93 IGRvIGl0LiAqLworCisgICAgaWYgKHp6ID4gLTFMKSB7ICAgICAgICAgICAgICAgICAgICAgLyog VGltZSBvZiBkYXkgZ2l2ZW4/ICovCisgICAgICAgIHggPSB6ejsKKyAgICAgICAgaWYgKHp6ICE9 IChsb25nKSB4KSB7CisgICAgICAgICAgICBwcmludGYoCisiU29ycnksIGFyaXRobWV0aWMgb3Zl cmZsb3cgLSBoaDptbTpzcyBub3QgdXNhYmxlIG9uIHRoaXMgcGxhdGZvcm0uXG4iCisgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICB9 CisgICAgaWYgKGN4ID09IFhYTVNMKSB7ICAgICAgICAgICAgICAgICAgLyogTWlsbGlzZWNvbmQg c2xlZXAgKi8KKyAgICAgICAgbXNsZWVwKHp6IDwgMCA/IHggOiB4ICogMTAwMCk7CisgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorICAgIGlmIChjeCA9PSBYWFBBVSAmJiAhc2xl ZXBjYW4pIHsgICAgIC8qIFNMRUVQIENBTkNFTExBVElPTiBpcyBPRkYgKi8KKyAgICAgICAgc2xl ZXAoeCk7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorCisgICAgLyogV0FJ VCwgb3IgZWxzZSBTTEVFUCB3aXRoIGNhbmNlbGxhdGlvbiBhbGxvd2VkLi4uICovCisKKyAgICBk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTbGVlcCBsb29wICovCisgICAg ICAgIGludCBtZG1zaWc7CisgICAgICAgIGlmIChzbGVlcGNhbikgeyAgICAgICAgICAgICAgICAg LyogS2V5Ym9hcmQgY2FuY2VsbGF0aW9uIGFsbG93ZWQ/ICovCisgICAgICAgICAgICBpZiAoeSA9 IGNvbmNoaygpKSB7ICAgICAgICAgLyogRGlkIHRoZXkgdHlwZSBzb21ldGhpbmc/ICovCisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgIHdoaWxlICh5LS0pIGNvbmluYygwKTsgIC8qIFll cywgZ29iYmxlIGl0IGFsbCB1cCAqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAvKiBUaGVyZSBp cyBhIGRlYmF0ZSBvdmVyIHdoZXRoZXIgUEFVU0Ugc2hvdWxkIGFic29yYiAgICAqLworICAgICAg ICAgICAgICAgIC8qIGl0cyBjYW5jZWxsaW5nIGNoYXJhY3RlcihzKS4gIFRoZXJlIGFyZSBzZXZl cmFsICAgICAgICovCisgICAgICAgICAgICAgICAgLyogcmVhc29ucyB3aHkgaXQgc2hvdWxkIGdv YmJsZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyOiAgKi8KKyAgICAgICAgICAgICAgICAvKiAoMSkg TVMtRE9TIEtlcm1pdCBkb2VzIGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAg ICAgICAgICAgICAgIC8qICgyKSBpZiBub3QsIHN1YnNlcXVlbnQgUEFVU0UgY29tbWFuZHMgd2ls bCB0ZXJtaW5hdGUgICovCisgICAgICAgICAgICAgICAgLyogICAgIGltbWVkaWF0ZWx5ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAvKiAo MykgaWYgbm90LCBzdWJzZXF1ZW50IEFTSyBjb21tYW5kcyB3aWxsIHVzZSBpdCBhcyAgICAqLwor ICAgICAgICAgICAgICAgIC8qICAgICB2YWxpZCBpbnB1dC4gIElmIFwxMywgdGhlbiBpdCB3aWxs IGdldCBubyBpbnB1dCAgICovCisgICAgICAgICAgICAgICAgLyogKDQpIGlmIG5vdCwgdGhlbiB0 aGUgY2hhcmFjdGVyIGFwcGVhcnMgb24gdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgICAgICAgICAv KiAgICAgbGluZSBhZnRlciBhbGwgZW5jbG9zaW5nIG1hY3JvcyBhcmUgY29tcGxldGUuICAgICAq LworICAgICAgICAgICAgICAgIGtiY2hhciA9IGNvbmluYygwKTsgICAgIC8qIEdvYmJsZSBvbmUg dXAgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAg ICAgICAgICAgICAgLyogQW5kIHF1aXQgUEFVU2luZyBvciBXQUlUaW5nICovCisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN4ID09IFhYV0FJKSB7ICAgICAgICAgICAgICAv KiBXQUlUICh6ID09IG1vZGVtIHNpZ25hbCBtYXNrKSAqLworICAgICAgICAgICAgZGVidWcoRjEw MSwiV0FJVCB4IiwiIix4KTsKKyAgICAgICAgICAgIGlmICh6ID4gMCkgeyAgICAgICAgICAgICAg ICAvKiBMb29raW5nIGZvciBhbnkgbW9kZW0gc2lnbmFscz8gKi8KKyAgICAgICAgICAgICAgICBt ZG1zaWcgPSB0dGdtZG0oKTsgICAgICAvKiBZZXMsIGdldCB0aGVtICovCisgICAgICAgICAgICAg ICAgaWYgKG1kbXNpZyA8IDApICAgICAgICAgLyogRmFpbGVkICovCisgICAgICAgICAgICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgICAgIGlmICgobWRtc2lnICYgeikg PT0geikgIC8qIEdvdCB3aGF0IHdlIHdhbnRlZD8gKi8KKyAgICAgICAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7ICAvKiBTdWNjZWVkICovCisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoeCA9PSAwKSAgICAgICAgICAgICAgICAgLyogV0FJVCAwIGFuZCBkaWRuJ3QgZ2V0IG91 ciBzaWduYWxzICovCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNs ZWVwKDEpOyAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gaW50ZXJydXB0LCBzbGVlcCBvbmUg c2Vjb25kICovCisgICAgfSB3aGlsZSAoLS14ID4gMCk7CisKKyAgICBpZiAoY3ggPT0gWFhXQUkp ICAgICAgICAgICAgICAgICAgICAvKiBJZiBXQUlUIGFuZCBsb29wIGV4aGF1c3RlZCAqLworICAg ICAgc3VjY2VzcyA9ICh6ID09IDApOyAgICAgICAgICAgICAgIC8qIEZhaWwuICovCisgICAgZWxz ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICovCisgICAgICBzdWNjZXNzID0g KHggPT0gMCk7ICAgICAgICAgICAgICAgLyogU2V0IFNVQ0NFU1MvRkFJTFVSRSBmb3IgUEFVU0Uu ICovCisgICAgcmV0dXJuKHN1Y2Nlc3MpOworCisjZWxzZSAgLyogTmV3IGNvZGUgdXNlcyBjaGFp bmVkIEZEQnMgYW5kIGFsbG93cyBGSUxFIHdhaXRzLi4uICovCisKKyAgICBjaGFyICogbSA9ICIi OyAgICAgICAgICAgICAgICAgICAgICAvKiBIZWxwIG1lc3NhZ2UgKi8KKyAgICBzdHJ1Y3QgRkRC IG51LCBmbDsgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBmdW5jdGlvbiBkZXNjcmlwdG9yIGJs b2NrcyAqLworICAgIGludCBmaWxld2FpdCA9IDA7CisgICAgaW50IG1kbXNpZyA9IDAsIGZzID0g MDsKKyAgICBjaGFyIGZpbGVkYXRlWzMyXTsKKworICAgIGtiY2hhciA9IDA7CisKKyAgICBzd2l0 Y2ggKGN4KSB7CisgICAgICBjYXNlIFhYV0FJOiBtID0gInNlY29uZHMgdG8gd2FpdCwgb3IgdGlt ZSBvZiBkYXkgaGg6bW06c3MiOyBicmVhazsKKyAgICAgIGNhc2UgWFhQQVU6IG0gPSAic2Vjb25k cyB0byBwYXVzZSwgb3IgdGltZSBvZiBkYXkgaGg6bW06c3MiOyBicmVhazsKKyAgICAgIGNhc2Ug WFhNU0w6IG0gPSAibWlsbGlzZWNvbmRzIHRvIHNsZWVwLCBvciB0aW1lIG9mIGRheSBoaDptbTpz cyI7IGJyZWFrOworICAgIH0KKyAgICB6eiA9IC0xTDsKKyAgICBjbWZkYmkoJm51LAorICAgICAg ICAgICBfQ01OVU0sICAgICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciAqLworICAgICAgICAg ICBtLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhlbHAgbWVzc2FnZSAqLworICAgICAg ICAgICAoY3ggPT0gWFhNU0wpID8gIjEwMCIgOiAiMSIsIC8qIERlZmF1bHQgKi8KKyAgICAgICAg ICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KKyAgICAgICAgICAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KKyAgICAgICAgICAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOL0EgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsICAgICAg ICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgIE5VTEws ICAgICAgICAgICAgICAgICAgICAgICAgLyogTi9BICovCisgICAgICAgICAgICZmbCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTmV4dCAqLworICAgICAgICAgICApOworICAgIGNtZmRiaSgm ZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgb2YgZGF5ICovCisgICAgICAgICAg IF9DTUZMRCwgICAgICAgICAgICAgICAgICAgICAgLyogRmllbGQgKi8KKyAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLwor ICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMg ZGF0YSAyICovCisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogcHJv Y2Vzc2luZyBmdW5jICovCisgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAg LyogTi9BICovCisgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8g bmV4dCAqLworICAgICAgICAgICApOworICAgIHggPSBjbWZkYigmbnUpOyAgICAgICAgICAgICAg ICAgICAgIC8qIFBhcnNlIGEgbnVtYmVyIG9yIGEgZmllbGQgKi8KKyAgICBpZiAoeCA8IDApIHsK KyAgICAgICAgaWYgKHggPT0gLTMpCisgICAgICAgICAgeCA9IC0yOworICAgICAgICByZXR1cm4o eCk7CisgICAgfQorICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKKyAgICAgIGNhc2UgX0NN TlVNOiAgICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgKi8KKyAgICAgICAgeCA9IGNtcmVz dWx0Lm5yZXN1bHQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBfQ01GTEQ6ICAgICAgICAg ICAgICAgICAgICAgIC8qIEZpZWxkICovCisgICAgICAgIHp6ID0gdG9kMnNlYyhjbXJlc3VsdC5z cmVzdWx0KTsgLyogQ29udmVydCB0byBzZWNzIHNpbmNlIG1pZG5pZ2h0ICovCisgICAgICAgIGlm ICh6eiA8IDBMKSB7CisgICAgICAgICAgICBwcmludGYoIj9OdW1iZXIsIGV4cHJlc3Npb24sIG9y IHRpbWUgb2YgZGF5IHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFyIG5vd1szMl07ICAgICAgICAgICAgICAgLyog Q3VycmVudCB0aW1lICovCisgICAgICAgICAgICBjaGFyICpwOworICAgICAgICAgICAgbG9uZyB0 bm93OworICAgICAgICAgICAgcCA9IG5vdzsKKyAgICAgICAgICAgIHp0aW1lKCZwKTsKKyAgICAg ICAgICAgIHRub3cgPSBhdG9sKHArMTEpICogMzYwMEwgKyBhdG9sKHArMTQpICogNjBMICsgYXRv bChwKzE3KTsKKyAgICAgICAgICAgIGlmICh6eiA8IHRub3cpICAgICAgICAgICAgICAvKiBVc2Vy J3MgdGltZSBiZWZvcmUgbm93ICovCisgICAgICAgICAgICAgIHp6ICs9IDg2NDAwTDsgICAgICAg ICAgICAgLyogU28gbWFrZSBpdCB0b21vcnJvdyAqLworICAgICAgICAgICAgenogLT0gdG5vdzsg ICAgICAgICAvKiBTZWNvbmRzIGZyb20gbm93LiAqLworICAgICAgICB9CisgICAgfQorICAgIGRl YnVnKEYxMDEsIlBBVVNFL1dBSVQvTVNMRUVQIHp6IiwiIix6eik7CisgICAgc3dpdGNoIChjeCkg eworICAgICAgY2FzZSBYWFBBVTogICAgICAgICAgICAgICAgICAgICAgIC8qIFBBVVNFICovCisg ICAgICBjYXNlIFhYTVNMOiAgICAgICAgICAgICAgICAgICAgICAgLyogTVNMRUVQICovCisgICAg ICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKyAg ICAgIGNhc2UgWFhXQUk6ICAgICAgICAgICAgICAgICAgICAgICAvKiBXQUlUICovCisgICAgICAg IHogPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTW9kZW0gc2lnbmFsIG1hc2sgKi8K KyAgICAgICAgeSA9IGNta2V5KHdhaXR0YWIsbndhaXR0YWIsIiIsIiIseHhzdHJpbmcpOworICAg ICAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IC0zKSB7CisgICAgICAgICAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkp OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg ICAgIHJldHVybih5KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSA9PSBXQUlUX0ZJTCkgeyAg ICAgICAgICAgIC8qIEZJTEUgKi8KKyAgICAgICAgICAgIGludCB3aWxkID0gMDsKKyAgICAgICAg ICAgIGlmICgoeiA9IGNta2V5KHdmc3dpLG53ZnN3aSwiZXZlbnQiLCIiLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICBmaWxld2FpdCA9IHo7Cisg ICAgICAgICAgICBpZiAoZmlsZXdhaXQgPT0gV0ZfTU9EIHx8IGZpbGV3YWl0ID09IFdGX0RFTCkK KyAgICAgICAgICAgICAgeiA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJndpbGQseHhzdHJpbmcp OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB6ID0gY21mbGQoIkZpbGVuYW1lIiwi Iiwmcyx4eHN0cmluZyk7CisgICAgICAgICAgICBpZiAoeiA8IDApCisgICAgICAgICAgICAgIHJl dHVybih6KTsKKyAgICAgICAgICAgIGlmICh3aWxkIHx8ICgoZmlsZXdhaXQgPT0gV0ZfQ1JFKSAm JiBpc3dpbGQocykpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCB2 YWxpZCBoZXJlXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgICAgICAg ICBpZiAoKHogPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKHkgIT0gV0FJVF9NRE0pIHsgICAgIC8q IEEgbW9kZW0gc2lnbmFsICovCisgICAgICAgICAgICB6IHw9IHk7ICAgICAgICAgICAgICAgICAg ICAgLyogT1IgdGhlIGJpdCBpbnRvIHRoZSBzaWduYWwgbWFzayAqLworICAgICAgICB9CisgICAg ICAgIGlmICghZmlsZXdhaXQpIHsgICAgICAgICAgICAgICAgLyogTW9kZW0gc2lnbmFscy4uLiAq LworICAgICAgICAgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAgICAgIC8qIEdldCB6ZXJvIG9y IG1vcmUgc2lnbmFsIG5hbWVzICovCisgICAgICAgICAgICAgICAgeSA9IGNta2V5KG1zdGFiLG5t cywibW9kZW0gc2lnbmFsIiwiIix4eHN0cmluZyk7CisgICAgICAgICAgICAgICAgaWYgKHkgPT0g LTMpIGJyZWFrOyAgICAgLyogLTMgbWVhbnMgdGhleSB0eXBlZCBDUiAqLworICAgICAgICAgICAg ICAgIGlmICh5IDwgMCkgcmV0dXJuKHkpOyAgIC8qIE90aGVyIG5lZ2F0aXZlcyBhcmUgZXJyb3Jz ICovCisgICAgICAgICAgICAgICAgeiB8PSB5OyAgICAgICAgICAgICAgICAgLyogT1IgdGhlIGJp dCBpbnRvIHRoZSBzaWduYWwgbWFzayAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorCisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2hvdWxk bid0IGhhcHBlbiAqLworICAgICAgICByZXR1cm4oLTIpOworICAgIH0gLyogc3dpdGNoIChjeCkg Ki8KKworLyogQ29tbWFuZCBpcyBlbnRlcmVkLCBub3cgZG8gaXQuICovCisKKyAgICBpZiAoenog PiAtMUwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lIG9mIGRheSBnaXZlbj8gKi8KKyAg ICAgICAgeCA9IHp6OworICAgICAgICBpZiAoenogIT0gKGxvbmcpIHgpIHsKKyAgICAgICAgICAg IHByaW50ZigKKyJTb3JyeSwgYXJpdGhtZXRpYyBvdmVyZmxvdyAtIGhoOm1tOnNzIG5vdCB1c2Fi bGUgb24gdGhpcyBwbGF0Zm9ybS5cbiIKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2xlZXBjYW4pCisgICAg ICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgLyogRW5zdXJlIHNpbmdsZS1jaGFy IHdha2V1cCAqLworCisgICAgaWYgKGN4ID09IFhYTVNMKSB7ICAgICAgICAgICAgICAgICAgLyog TWlsbGlzZWNvbmQgc2xlZXAgKi8KKyAgICAgICAgbXNsZWVwKHp6IDwgMCA/IHggOiB4ICogMTAw MCk7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorICAgIGlmIChjeCA9PSBY WFBBVSAmJiAhc2xlZXBjYW4pIHsgICAgIC8qIFNMRUVQIENBTkNFTExBVElPTiBpcyBPRkYgKi8K KyAgICAgICAgc2xlZXAoeCk7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQor ICAgIGlmIChmaWxld2FpdCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIEZJTEUuLi4gKi8KKyAg ICAgICAgZnMgPSB6Y2hraSh0bXBidWYpOyAgICAgICAgICAgICAvKiBDaGVjayBpZiBmaWxlIGV4 aXN0cyAqLworICAgICAgICBzd2l0Y2ggKGZpbGV3YWl0KSB7CisgICAgICAgICAgY2FzZSBXRl9E RUw6CisgICAgICAgICAgICBpZiAoZnMgPT0gLTEpCisgICAgICAgICAgICAgIHJldHVybihzdWNj ZXNzID0gMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFdGX01PRDoKKyAg ICAgICAgICAgIGlmIChmcyA9PSAtMSkgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0ZpbGUg ZG9lcyBub3QgZXhpdDogJXNcbiIsdG1wYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcyA9IHpmY2RhdCh0bXBidWYpOyAgICAgICAg IC8qIEdldCBjdXJyZW50IG1vZGlmaWNhdGlvbiBkYXRlICovCisgICAgICAgICAgICBpZiAoIXMp IHMgPSAiIjsKKyAgICAgICAgICAgIGlmIChja3N0cm5jcHkoZmlsZWRhdGUscywzMikgIT0gMTcp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9DYW4ndCBnZXQgbW9kaWZpY2F0aW9uIHRpbWU6 ICVzXG4iLHRtcGJ1Zik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgV0ZfQ1JFOgorICAgICAgICAg ICAgaWYgKGZzID4gLTEpCisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQb2xsaW5nIGxvb3AgKi8KKyAgICAgICAgaWYgKHNsZWVwY2Fu KSB7ICAgICAgICAgICAgICAgICAvKiBLZXlib2FyZCBjYW5jZWxsYXRpb24gYWxsb3dlZD8gKi8K KyAgICAgICAgICAgIGlmICgoeSA9IGNvbmNoaygpKSA+IDApIHsgICAvKiBEaWQgdGhleSB0eXBl IHNvbWV0aGluZz8gKi8KKyAgICAgICAgICAgICAgICBrYmNoYXIgPSBjb25pbmMoMCk7ICAgICAv KiBZZXMsIGdldCBmaXJzdCBjaGFyIHRoZXkgdHlwZWQgKi8KKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMDAwLCJXQUlUIGtiY2hhciIsIiIsa2JjaGFyKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAg ICAgICAgICAgd2hpbGUgKC0teSA+IDApICAgICAgICAgLyogR29iYmxlIHRoZSByZXN0IHVwICov CisgICAgICAgICAgICAgICAgICBjb25pbmMoMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg ICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7ICAgIC8qIEFuZCBxdWl0IFBBVVNpbmcg b3IgV0FJVGluZyAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmaWxl d2FpdCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoY3ggPT0gWFhXQUkpIHsgICAgICAgICAgLyog V0FJVCBmb3IgbW9kZW0gc2lnbmFscyAqLworICAgICAgICAgICAgICAgIGlmICh6ICE9IDApIHsK KyAgICAgICAgICAgICAgICAgICAgbWRtc2lnID0gdHRnbWRtKCk7ICAvKiBHZXQgdGhlbS4gKi8K KyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiV0FJVCB0dGdtZG0iLCIiLG1kbXNpZyk7 CisgICAgICAgICAgICAgICAgICAgIGlmIChtZG1zaWcgPCAwKSAgICAgLyogRmFpbHVyZSB0byBn ZXQgdGhlbT8gKi8KKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOyAv KiBGYWlsLiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKG1kbXNpZyAmIHopID09IHopIC8q IEdvdCBkZXNpcmVkIG9uZXM/ICovCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsgLyogU3VjY2VlZC4gKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPT0g MCkKKyAgICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRklMRS4uLiAqLwor ICAgICAgICAgICAgZnMgPSB6Y2hraSh0bXBidWYpOyAgICAgICAgIC8qIEdldCBmaWxlIHN0YXR1 cyAqLworICAgICAgICAgICAgaWYgKGZpbGV3YWl0ID09IFdGX01PRCkgeyAgIC8qIFdhaXQgZm9y IG1vZGlmaWNhdGlvbiAqLworICAgICAgICAgICAgICAgIGlmIChmcyA9PSAtMSkgICAgICAgICAg IC8qIEZhaWx1cmUgdG8gZ2V0IHN0YXR1cyAqLworICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsgIC8qIHNvIFdBSVQgZmFpbHMuICovCisgICAgICAgICAgICAgICAgcyA9IHpm Y2RhdCh0bXBidWYpOyAgICAgLyogR2V0IGN1cnJlbnQgbW9kaWZpY2F0aW9uIHRpbWUgKi8KKyAg ICAgICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAvKiBBbmQgY29tcGFyZSB3aXRo IHRoZSB0aW1lICovCisgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChzLGZpbGVkYXRlKSkgLyog d2hlbiB0aGUgV0FJVCBzdGFydGVkICovCisgICAgICAgICAgICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxld2FpdCA9PSBXRl9ERUwpIHsgLyog V2FpdCBmb3IgZGVsZXRpb24gKi8KKyAgICAgICAgICAgICAgICBpZiAoZnMgPT0gLTEpICAgICAg ICAgICAvKiBJZiBmaWxlIGRvZXNuJ3QgZXhpc3QsICovCisgICAgICAgICAgICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOyAgLyogc3VjY2VlZC4gKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo ZmlsZXdhaXQgPT0gV0ZfQ1JFKSB7IC8qIFdhaXQgZm9yIGNyZWF0aW9uICovCisgICAgICAgICAg ICAgICAgaWYgKGZzICE9IC0xKSAgICAgICAgICAgLyogSWYgZmlsZSBleGlzdHMgKi8KKyAgICAg ICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAvKiBzdWNjZWVkLiAqLworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh4IDwgMSkgICAgICAgICAgICAgICAgICAg ICAgLyogU0xFRVAvV0FJVC9QQVVTRSAwICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIHNs ZWVwKHdhaXRpbnRlcnZhbCk7ICAgICAgICAgICAgLyogTm8gaW50ZXJydXB0LCBzbGVlcCAqLwor ICAgICAgICB4IC09IHdhaXRpbnRlcnZhbDsgICAgICAgICAgICAgIC8qIERlZHVjdCBzbGVlcCB0 aW1lICovCisgICAgfSB3aGlsZSAoeCA+IDApOworCisgICAgaWYgKGN4ID09IFhYV0FJKSAgICAg ICAgICAgICAgICAgICAgLyogV0FJVCB0aW1lIGV4cGlyZWQgKi8KKyAgICAgIHN1Y2Nlc3MgPSAo eiA9PSAwKTsgICAgICAgICAgICAgICAvKiBTdWNjZWVkIGlmIG5vIG1vZGVtIHNpZ25hbHMgKi8K KyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgU0xFRVAgb3Ig UEFVU0UsIHN1Y2Nlc3MgKi8KKyAgICAgIHN1Y2Nlc3MgPSAoeCA9PSAwKTsgICAgICAgICAgICAg ICAvKiBkZXBlbmRzIG9uIHdoZXRoZXIgaXQgd2FzICovCisgICAgcmV0dXJuKHN1Y2Nlc3MpOyAg ICAgICAgICAgICAgICAgICAgLyogaW50ZXJydXB0ZWQgZnJvbSB0aGUga2V5Ym9hcmQuICovCisj ZW5kaWYgLyogT0xEV0FJVCAqLworfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBPUzJP UlVOSVgKK19QUk9UT1RZUChpbnQgemNtcGZuLChjaGFyICosIGNoYXIgKikpOworI2VuZGlmIC8q IE9TMk9SVU5JWCAqLworCisjaWZuZGVmIE5PRlJJTExTCisjaWZkZWYgTlQKK2ludCAKK2RvbGlu aygpIHsKKyAgICAvKiBQYXJzZSBhIGZpbGUgb3IgYSBkaXJlY3RvcnkgbmFtZSAqLworICAgIGlu dCBpLCB4LCB6LCBsaXN0aW5nID0gMCwgaGF2ZW5hbWUgPSAwLCB3aWxkID0gMCwgcmMgPSAxOwor ICAgIHN0cnVjdCBGREIgc3csIGZpOworCisgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAg ICAgICAgICAgLyogMm5kIEZEQiAtIG9wdGlvbmFsIC9QQUdFIHN3aXRjaCAqLworICAgICAgICAg ICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJG aWxlbmFtZSBvciBzd2l0Y2giLCAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIiLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAg IG5xdnN3dGFiLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRi bCBzaXplICovCisgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAgICAgICB4eHN0cmluZywgICAg ICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgcXZz d3RhYiwgICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAg ICZmaSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLwor ICAgICAgICAgICApOworCisgICAgY21mZGJpKCZmaSwgICAgICAgICAgICAgICAgICAgICAgICAg LyogMXN0IEZEQiAtIGZpbGUgdG8gdHlwZSAqLworICAgICAgICAgICBfQ01JRkksICAgICAgICAg ICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIDMsICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAg ICAgICB4eHN0cmluZywKKyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAg ICAgICApOworCisgICAgd2hpbGUgKCFoYXZlbmFtZSkgeworICAgICAgICB4ID0gY21mZGIoJnN3 KTsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICBpZiAoeCA8 IDApICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7CisgICAgICAgICAgY2FzZSBfQ01L RVk6CisgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAgICAg ICAgY2FzZSBERUxfTElTOgorICAgICAgICAgICAgICBjYXNlIERFTF9WUkI6CisgICAgICAgICAg ICAgICAgbGlzdGluZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg IGNhc2UgREVMX05PTDoKKyAgICAgICAgICAgICAgY2FzZSBERUxfUVVJOgorICAgICAgICAgICAg ICAgIGxpc3RpbmcgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBfQ01JRkk6CisgICAgICAgICAgICBz ID0gY21yZXN1bHQuc3Jlc3VsdDsKKyAgICAgICAgICAgIGhhdmVuYW1lID0gMTsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oLTIpOwor ICAgICAgICB9CisgICAgfQorICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgICAg IC8qIFNvdXJjZSBzcGVjaWZpY2F0aW9uIHdpbGQ/ICovCisKKyAgICBja3N0cm5jcHkobGluZSxz LExJTkJVRlNJWik7ICAgICAgICAvKiBNYWtlIGEgc2FmZSBjb3B5IG9mIHNvdXJjZSBuYW1lICov CisgICAgcyA9IGxpbmU7CisKKyAgICBpZiAoIXdpbGQpCisgICAgICB3aWxkID0gaXN3aWxkKGxp bmUpOworCisgICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGxhY2Ug Zm9yIG5ldyBuYW1lICovCisgICAgaWYgKCh4ID0gY21vZmkod2lsZCA/ICJUYXJnZXQgZGlyZWN0 b3J5IiA6ICJOZXcgbmFtZSIsCisgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8 IDApIHsgLyogR2V0IG5ldyBuYW1lICovCisgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAg ICAgICBwcmludGYoIj8lcyByZXF1aXJlZFxuIiwgd2lsZCA/ICJUYXJnZXQgZGlyZWN0b3J5IiA6 ICJOZXcgbmFtZSIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfSBlbHNlIHJl dHVybih4KTsKKyAgICB9CisgICAgY2tzdHJuY3B5KHAscyxUTVBCVUZTSVopOyAgICAgICAgICAg LyogTWFrZSBhIHNhZmUgY29weSBvZiB0aGUgbmV3IG5hbWUgKi8KKyAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKKworICAgIGlmICghd2lsZCkgeyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEp1c3Qgb25lICovCisgICAgICAgIGlmIChsaXN0aW5nKSBwcmludGYoIiVzID0+ ICVzICIsbGluZSxwKTsKKyAgICAgICAgaWYgKHpsaW5rKGxpbmUscCkgPCAwKSB7CisgICAgICAg ICAgICBpZiAobGlzdGluZykgcHJpbnRmKCIoRkFJTEVEOiAlc1xuIixja19lcnJzdHIoKSk7Cisg ICAgICAgICAgICByYyA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGlz dGluZykgcHJpbnRmKCIoT0spXG4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IHJjKTsKKyAgICB9CisgICAgaWYgKCFpc2RpcihwKSkgeyAgICAgICAgICAgICAgICAgICAg LyogTXVsdGlwbGUgKi8KKyAgICAgICAgcHJpbnRmKCAgICAgICAgICAgICAgICAgICAgICAgICAv KiBpZiB0YXJnZXQgaXMgbm90IGEgZGlyZWN0b3J5ICovCisiP011bHRpcGxlIHNvdXJjZSBmaWxl cyBub3QgYWxsb3dlZCBpZiB0YXJnZXQgaXMgbm90IGEgZGlyZWN0b3J5LlxuIik7CisgICAgICAg IHJldHVybigtOSk7CisgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTaG93IGZ1bGwgcGF0aCBvZiB0YXJnZXQgKi8KKyAgICAg ICAgY2hhciBidWZbQ0tNQVhQQVRIXTsgICAgICAgICAgICAvKiAodG9vIG11Y2gpICovCisgICAg ICAgIGlmICh6Zm5xZnAocCxDS01BWFBBVEgsYnVmKSkKKyAgICAgICAgICBja3N0cm5jcHkodG1w YnVmLGJ1ZixUTVBCVUZTSVopOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRl ZiBWTVMKKyAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZXQgQ3Ry bC1DIHdvcmsuICovCisjZW5kaWYgLyogVk1TICovCisgICAgZGVidWcoRjExMCwiZG9saW5rIGxp bmUiLGxpbmUsMCk7CisKKyNpZmRlZiBaWFJFV0lORAorICAgIHogPSB6eHJld2luZCgpOyAgICAg ICAgICAgICAgICAgICAgIC8qIFJld2luZCBmaWxlIGxpc3QgKi8KKyNlbHNlCisgICAgeiA9IG56 eHBhbmQocywwKTsgICAgICAgICAgICAgICAgICAgLyogRXhwYW5kIGZpbGUgbGlzdCAqLworI2Vu ZGlmIC8qIFpYUkVXSU5EICovCisgICAgZGVidWcoRjExMSwiZG9saW5rIHAiLHAseik7CisKKyNp ZmRlZiBVTklYCisgICAgaWYgKHdpbGQgJiYgeiA+IDEpCisgICAgICBzaF9zb3J0KG10Y2hzLE5V TEwseiwwLDAsZmlsZWNhc2UpOyAvKiBBbHBoYWJldGl6ZSB0aGUgZmlsZW5hbWUgbGlzdCAqLwor I2VuZGlmIC8qIFVOSVggKi8KKworICAgIHdoaWxlICh6LS0gPiAwKSB7CisgICAgICAgIGlmICgh KHogPT0gMCAmJiAhd2lsZCkpCisgICAgICAgICAgem5leHQobGluZSk7CisgICAgICAgIGlmICgh bGluZVswXSkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGxpc3RpbmcpIHByaW50Zigi JXMgPT4gJXMgIixsaW5lLHApOworICAgICAgICBpZiAoemxpbmsobGluZSxwKSA8IDApIHsKKyAg ICAgICAgICAgIGlmIChsaXN0aW5nKSBwcmludGYoIihGQUlMRUQ6ICVzXG4iLGNrX2VycnN0cigp KTsKKyAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm IChsaXN0aW5nKSBwcmludGYoIihPSylcbiIpOworICAgICAgICB9CisgICAgfQorI2lmZGVmIFZN UworICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7CisjZW5kaWYgLyogVk1TICovCisgICAgcmV0dXJu KHN1Y2Nlc3MgPSByYyk7Cit9CisjZW5kaWYgLyogTlQgKi8KKworI2lmZGVmIFpDT1BZCitpbnQK K2RvY29weSgpIHsKKyAgICBpbnQgaSwgeCwgbGlzdGluZyA9IDAsIG5vbGlzdCA9IDAsIGhhdmVu YW1lID0gMCwgZ2V0dmFsOworICAgIGNoYXIgYzsKKyAgICBzdHJ1Y3QgRkRCIHN3LCBmaTsKKyAg ICBpbnQgb3ZlcndyaXRlID0gT1ZXX0FMV0FZUzsKKyAgICBpbnQgdGFyZ2V0aXNkaXIgPSAwOwor ICAgIGludCB0YXJnZXRsZW4gPSAwOworICAgIGludCBhcHBlbmRpbmcgPSAwOworICAgIGludCBw cmVzZXJ2ZSA9IDA7CisgICAgaW50IHN3YXBwaW5nID0gMDsKKyAgICBpbnQgZnJvbWI2NCA9IDA7 CisgICAgaW50IHRvYjY0ID0gMDsKKyAgICBpbnQgd2lsZCA9IDA7CisgICAgaW50IHJjID0gMTsK KworICAgIGNoYXIgbmV3bmFtZVtDS01BWFBBVEhdLCAqIG5tOworICAgIG5tID0gbmV3bmFtZTsK KworICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDFzdCBGREIgLSBz d2l0Y2hlcyAqLworICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZj b2RlICovCisgICAgICAgICAgICJGaWxlbmFtZSBvciBzd2l0Y2giLCAgICAgICAgLyogaGxwbXNn ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAq LworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCisgICAgICAgICAgIG5jb3B5dGFiLCAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAgICAgIDQsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAg ICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rp b24gKi8KKyAgICAgICAgICAgY29weXRhYiwgICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3Jk IHRhYmxlICovCisgICAgICAgICAgICZmaSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9p bnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOworICAgIGNtZmRiaSgmZmksICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDJuZCBGREIgLSBmaWxlIHRvIGNvcHkgKi8KKyAgICAgICAg ICAgX0NNSUZJLCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAiIiwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICov CisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDIgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsCisgICAgICAgICAgIE5VTEwsCisgICAg ICAgICAgIE5VTEwKKyAgICAgICAgICAgKTsKKworICAgIHdoaWxlICghaGF2ZW5hbWUpIHsKKyAg ICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcg Ki8KKyAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLwor ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgewor ICAgICAgICAgIGNhc2UgX0NNS0VZOgorCSAgICBjID0gY21nYnJrKCk7ICAgICAgICAgICAgICAg ICAgIC8qIEdldCBicmVhayBjaGFyYWN0ZXIgKi8KKwkgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAn OicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworCQlwcmludGYo Ij9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKwkJcmMgPSAtOTsK KwkJcmV0dXJuKHJjKTsKKwkgICAgfQorCSAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkg JiBDTV9BUkcpKSB7CisJCXByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50 XG4iKTsKKwkJcmMgPSAtOTsKKwkJcmV0dXJuKHJjKTsKKwkgICAgfQorICAgICAgICAgICAgc3dp dGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7CisgICAgICAgICAgICAgIGNhc2UgREVMX0xJUzoKKyAg ICAgICAgICAgICAgY2FzZSBERUxfVlJCOgorCQlub2xpc3QgPSAwOworICAgICAgICAgICAgICAg IGxpc3RpbmcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl IERFTF9OT0w6CisgICAgICAgICAgICAgIGNhc2UgREVMX1FVSToKKwkJbm9saXN0ID0gMTsKKyAg ICAgICAgICAgICAgICBsaXN0aW5nID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgY2FzZSA5OTk6CisgICAgICAgICAgICAgICAgc3dhcHBpbmcgPSAxOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDk5ODoKKyAgICAgICAgICAgICAg ICBhcHBlbmRpbmcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgIGNhc2UgOTk1 OgorCQlwcmVzZXJ2ZSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgY2FzZSA5 OTQ6CisJCWlmICgoeCA9IGNta2V5KG92d3RhYixub3Z3dGFiLAorCQkJICAgICAgICJXaGVuIHRv IG92ZXJ3cml0ZSBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlIiwKKwkJCSAgICAgICAiIix4eHN0 cmluZykpIDwgMCkKKwkJICByZXR1cm4oeCk7CisJCW92ZXJ3cml0ZSA9IHg7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgIGNhc2UgOTk3OgorICAg ICAgICAgICAgICAgIGZyb21iNjQgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICBjYXNlIDk5NjoKKyAgICAgICAgICAgICAgICB0b2I2NCA9IDE7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgX0NNSUZJOgorICAgICAgICAgICAgcyA9IGNtcmVz dWx0LnNyZXN1bHQ7CisgICAgICAgICAgICBoYXZlbmFtZSA9IDE7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAg fQorICAgIH0KKyAgICB3aWxkID0gY21yZXN1bHQubnJlc3VsdDsKKyAgICBja3N0cm5jcHkobGlu ZSxzLExJTkJVRlNJWik7ICAgICAgICAvKiBNYWtlIGEgc2FmZSBjb3B5IG9mIHNvdXJjZSBuYW1l ICovCisgICAgcyA9IGxpbmU7CisgICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUGxhY2UgZm9yIG5ldyBuYW1lICovCisKKyAgICAvKiBHZXQgZGVzdGluYXRpb24gbmFt ZSAqLworICAgIGlmICgoeCA9IGNtb2ZpKCJkZXN0aW5hdGlvbiBuYW1lIGFuZC9vciBkaXJlY3Rv cnkiLAorI2lmZGVmIFVOSVgKKyAgICAgICAgICAgICAgICAgICAiLiIKKyNlbHNlCisgICAgICAg ICAgICAgICAgICAgIiIKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgICAgICAgICAgICAgLCZz LHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICBw cmludGYoIj9OYW1lIGZvciBkZXN0aW5hdGlvbiBmaWxlIHJlcXVpcmVkXG4iKTsKKyAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgIH0gZWxzZSByZXR1cm4oeCk7CisgICAgfQorICAgIGNr c3RybmNweShwLHMsVE1QQlVGU0laKTsgICAgICAgICAgIC8qIFNhZmUgY29weSBvZiBkZXN0aW5h dGlvbiBuYW1lICovCisgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAg aWYgKGFwcGVuZGluZyAmJiBzd2FwcGluZykgeworICAgICAgICBwcmludGYoIj9Tb3JyeSwgL0FQ UEVORCBhbmQgL1NXQVAgY29uZmxpY3RcbiIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0K KyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIHVucmVhc29uYWJseSBwcmV2ZW50ZWQgIkNPUFkg L0FQUEVORCAqLiogYmlnZmlsZSIgZnJvbSBjb25jYXRlbmF0aW5nCisgIGEgYnVuY2ggb2YgZmls ZXMgaW50byBvbmUgYmlnIGZpbGUuCisqLworICAgIGlmIChhcHBlbmRpbmcgJiYgd2lsZCkgewor ICAgICAgICBwcmludGYoIj9Tb3JyeSwgL0FQUEVORCBjYW4gYmUgdXNlZCBvbmx5IHdpdGggc2lu Z2xlIGZpbGVzXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgIHRhcmdldGlzZGlyID0gaXNkaXIocCk7CisgICAgeCA9IHN0cmxlbihwKTsK KyAgICBpZiAodGFyZ2V0aXNkaXIpIHsKKyNpZmRlZiBVTklYT1JPU0sKKyAgICAgICAgaWYgKHBb eC0xXSAhPSAnLycpIHsKKyAgICAgICAgICAgIGNrc3RybmNhdChwLCIvIixUTVBCVUZTSVopOwor ICAgICAgICAgICAgeCsrOworICAgICAgICB9CisjZWxzZQorI2lmZGVmIE9TMgorICAgICAgICBp ZiAocFt4LTFdICE9ICcvJykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHAsIi8iLFRNUEJVRlNJ Wik7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0KKyNlbHNlCisjaWZkZWYgU1RSQVRVUwor ICAgICAgICBpZiAocFt4LTFdICE9ICc+JykgeworICAgICAgICAgICAgY2tzdHJuY2F0KHAsIj4i LFRNUEJVRlNJWik7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0KKyNlbHNlCisjaWZkZWYg ZGF0YWdlbmVyYWwKKyAgICAgICAgaWYgKHBbeC0xXSAhPSAnOicpIHsKKyAgICAgICAgICAgIGNr c3RybmNhdChwLCI6IixUTVBCVUZTSVopOworICAgICAgICAgICAgeCsrOworICAgICAgICB9Cisj ZWxzZQorICAgICAgICBpZiAocFt4LTFdICE9ICcvJykgeworICAgICAgICAgICAgY2tzdHJuY2F0 KHAsIi8iLFRNUEJVRlNJWik7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0KKyNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyAgICB9CisgICAgdGFyZ2V0bGVuID0geDsKKworICAg IGlmICghYXBwZW5kaW5nKSB7CQkJLyogSWYgL0FQUEVORCBub3QgZ2l2ZW4gKi8KKwlpZiAod2ls ZCAmJiAhdGFyZ2V0aXNkaXIpIHsJLyogTm8gd2lsZGNhcmRzIGFsbG93ZWQgKi8KKwkgICAgcHJp bnRmKAkJCS8qIGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3RvcnkgKi8KKyI/TXVsdGlwbGUgc291 cmNlIGZpbGVzIG5vdCBhbGxvd2VkIGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3RvcnkuXG4iKTsK KwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgfQorCisjaWZkZWYgVk1TCisgICAgY29ucmVzKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGV0IEN0cmwtQyB3b3JrLiAqLworI2VuZGlm IC8qIFZNUyAqLworICAgIGRlYnVnKEYxMTAsImRvY29weSBsaW5lIixsaW5lLDApOworICAgIGRl YnVnKEYxMTAsImRvY29weSBwIixwLDApOworICAgIGRlYnVnKEYxMTAsImRvY29weSBubSIsbm0s MCk7CisKKyNpZmRlZiBaWFJFV0lORAorICAgIHogPSB6eHJld2luZCgpOyAgICAgICAgICAgICAg ICAgICAgIC8qIFJld2luZCBmaWxlIGxpc3QgKi8KKyNlbHNlCisgICAgeiA9IG56eHBhbmQocyww KTsgICAgICAgICAgICAgICAgICAgLyogRXhwYW5kIGZpbGUgbGlzdCAqLworI2VuZGlmIC8qIFpY UkVXSU5EICovCisKKyNpZmRlZiBVTklYCisgICAgaWYgKHdpbGQpCisgICAgICBzaF9zb3J0KG10 Y2hzLE5VTEwseiwwLDAsZmlsZWNhc2UpOyAvKiBBbHBoYWJldGl6ZSB0aGUgZmlsZW5hbWUgbGlz dCAqLworI2VuZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIElLU0QKKyAgICBpZiAoIXRhcmdldGlz ZGlyICYmIHpjaGtpKHApID4gLTEpIHsgLyogRGVzdGluYXRpb24gZmlsZSBleGlzdHM/ICovCisg ICAgICAgIGlmIChpbnNlcnZlciAmJiAoIUVOQUJMRUQoZW5fZGVsKQorI2lmZGVmIENLX0xPR0lO CisgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXNndWVzdAorI2VuZGlmIC8qIENLX0xPR0lO ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/ U29ycnksIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzIGlzIGRpc2FibGVkXG4iKTsKKyAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLwor CisgICAgaWYgKHRvYjY0ICYmIGZyb21iNjQpIHsgICAgICAgICAgICAgLyogVG8gYW5kIGZyb20g QjY0ID0gbm8gY29udmVyc2lvbiAqLworICAgICAgICB0b2I2NCA9IDA7CisgICAgICAgIGZyb21i NjQgPSAwOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJDT1BZIGRlc3QiLHAsMCk7CisKKyAgICB3 aGlsZSAoeiA+IDApIHsKKworICAgICAgICB6bmV4dChsaW5lKTsKKyAgICAgICAgaWYgKCFsaW5l WzBdKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGVycm5vID0gMDsgICAgICAgICAgICAg ICAgICAgICAgLyogUmVzZXQgZXJybm8gKi8KKworCWlmICh0YXJnZXRpc2RpcikgeworCSAgICB6 c3RyaXAobGluZSwmbm0pOworCSAgICBja21ha21zZyhuZXduYW1lLENLTUFYUEFUSCxwLG5tLE5V TEwsTlVMTCk7CisJICAgIG5tID0gbmV3bmFtZTsKKwl9IGVsc2UgeworCSAgICBubSA9IHA7CisJ fQorCWlmIChvdmVyd3JpdGUpIHsJCS8qIE92ZXJ3cml0ZSBjaGVja2luZz8gKi8KKwkgICAgaWYg KHpjaGtpKG5tKSA+PSAoQ0tfT0ZGX1QpMCkgeyAvKiBEZXN0aW5hdGlvbiBmaWxlIGV4aXN0cz8g Ki8KKworCQljaGFyIGQxWzIwXSwgKiBkMjsKKwkJY2hhciAqIG4xLCAqIG4yOworCQlpbnQgaSwg c2tpcCA9IDA7CisKKwkJaSA9IHN0cmxlbihsaW5lKTsJLyogSXNvbGF0ZSBzb3VyY2UgZmlsZW5h bWUgKi8KKwkJZm9yICg7IGkgPj0gMDsgaS0tKSB7CisJCSAgICBpZiAoSVNESVJTRVAobGluZVtp XSkpIHsKKwkJCW4xID0gJmxpbmVbaSsxXTsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWRl YnVnKEYxMTAsIkNPUFkgbjEiLCBuMSwgMCk7CisJCWkgPSBzdHJsZW4obm0pOwkJLyogQW5kIGRl c3RpbmF0aW9uIGZpbGVuYW1lICovCisJCWZvciAoOyBpID49IDA7IGktLSkgeworCQkgICAgaWYg KElTRElSU0VQKG5tW2ldKSkgeworCQkJbjIgPSAmbm1baSsxXTsKKwkJCWJyZWFrOworCQkgICAg fQorCQl9CisJCWRlYnVnKEYxMTAsIkNPUFkgbjIiLCBuMiwgMCk7CisJCWlmICghc3RyY21wKG4x LG4yKSkgeyAgICAgICAgICAJICAvKiBTYW1lIG5hbWU/ICovCisJCSAgICBpZiAob3ZlcndyaXRl ID09IE9WV19ORVZFUikgeyAvKiBOZXZlciBvdmVyd3JpdGU/ICovCisJCQlpZiAobGlzdGluZykJ ICAgICAgICAgIC8qIFNraXAgKi8KKwkJCSAgaWYgKGxpc3RpbmcpIHByaW50ZigiJXMgPT4gJXMg KFNLSVBQRUQpXG4iLGxpbmUsbm0pOworCQkJY29udGludWU7CisJCSAgICB9CisJCSAgICBja3N0 cm5jcHkoZDEsemZjZGF0KGxpbmUpLDIwKTsgLyogU291cmNlIGZpbGUgdGltZXN0YW1wICovCisJ CSAgICBkMiA9IHpmY2RhdChubSk7CSAgICAgICAvKiBUaW1lc3RhbXAgb2YgZGVzdCBmaWxlICov CisJCSAgICB4ID0gc3RyY21wKGQxLGQyKTsJICAgICAgIC8qIENvbXBhcmUgdGhlbSAqLworCQkg ICAgaWYgKCgob3ZlcndyaXRlID09IE9WV19ORVdFUikgJiYgKHggPCAwKSkgfHwKKwkJCSgob3Zl cndyaXRlID09IE9WV19PTERFUikgJiYgKHggPiAwKSkpIHsKKwkJCWlmIChsaXN0aW5nKQorCQkJ ICBpZiAobGlzdGluZykgcHJpbnRmKCIlcyA9PiAlcyAoU0tJUFBFRClcbiIsbGluZSxubSk7CisJ CQljb250aW51ZTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorICAgICAgICBpZiAobGlzdGlu ZykgcHJpbnRmKCIlcyA9PiAlcyAiLGxpbmUsbm0pOworCisgICAgICAgIC8qIFN0cmFpZ2h0IGNv cHkgKi8KKyAgICAgICAgaWYgKCFzd2FwcGluZyAmJiAhYXBwZW5kaW5nICYmICFmcm9tYjY0ICYm ICF0b2I2NCkgeworICAgICAgICAgICAgZGVidWcoRjExMCwiQ09QWSB6Y29weSIsbGluZSwwKTsK KworICAgICAgICAgICAgaWYgKCh4ID0gemNvcHkobGluZSxwKSkgPCAwKSB7IC8qIExldCB6Y29w eSgpIGRvIGl0LiAqLworCQlkZWJ1ZyhGMTExLCJDT1BZIG5vdCBPSyIsbGluZSx4KTsKKyAgICAg ICAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgLTI6CisJCSAg ICBpZiAobGlzdGluZykKKwkJICAgICAgcHJpbnRmKCIoRkFJTEVEOiBOb3QgYSByZWd1bGFyIGZp bGUpXG4iKTsKKwkJICAgIGVsc2UgaWYgKCFub2xpc3QpCisJCSAgICAgIHByaW50ZigiP05vdCBh IHJlZ3VsYXIgZmlsZSAtICVzXG4iLGxpbmUpOworICAgICAgICAgICAgICAgICAgICByYyA9IDA7 CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAtMzoK KwkJICAgIGlmIChsaXN0aW5nKQorCQkgICAgICBwcmludGYoIihGQUlMRUQ6IE5vdCBmb3VuZCBv ciBub3QgYWNjZXNzaWJsZSlcbiIpOworCQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKKwkJICAgICAg cHJpbnRmKCI/Tm90IGZvdW5kIG9yIG5vdCBhY2Nlc3NpYmxlIC0gJXNcbiIsbGluZSk7CisgICAg ICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICBjYXNlIC00OgorCQkgICAgaWYgKGxpc3RpbmcpCisJCSAgICAgIHByaW50 ZigiKEZBSUxFRDogUGVybWlzc2lvbiBkZW5pZWQpXG4iKTsKKwkJICAgIGVsc2UgaWYgKCFub2xp c3QpCisJCSAgICAgIHByaW50ZigiP1Blcm1pc3Npb24gZGVuaWVkIC0gJXNcbiIsbGluZSk7Cisg ICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICBjYXNlIC01OgorCQkgICAgaWYgKGxpc3RpbmcpCisJCSAgICAgIHBy aW50ZigiKFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUpXG4iKTsKKwkJ ICAgIGVsc2UgaWYgKCFub2xpc3QpCisJCSAgICAgIHByaW50ZigKKwkJCSAgIj9Tb3VyY2UgYW5k IGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlIC0gJXNcbiIsCisJCQkgIGxpbmUKKwkJCSAg KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIC02 OgorCQkgICAgaWYgKGxpc3RpbmcpCisJCSAgICAgIHByaW50ZigiKEZBSUxFRDogSW5wdXQvT3V0 cHV0IGVycm9yKVxuIik7CisJCSAgICBlbHNlIGlmICghbm9saXN0KQorCQkgICAgICBwcmludGYo Ij9JbnB1dC9PdXRwdXQgZXJyb3IgLSAlc1xuIixsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAg cmMgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgLTc6CisJCSAgICBpZiAobGlzdGluZykKKwkJICAgICAgcHJpbnRmKCIoRkFJTEVEOiAlcyAt ICVzKVxuIixwLGNrX2VycnN0cigpKTsKKwkJICAgIGVsc2UgaWYgKCFub2xpc3QpCisJCSAgICAg IHByaW50ZigiPyVzIC0gJXNcbiIsY2tfZXJyc3RyKCkscCk7CisgICAgICAgICAgICAgICAgICAg IHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBk ZWZhdWx0OgorCQkgICAgaWYgKGxpc3RpbmcpCisJCSAgICAgIHByaW50ZigiKEZBSUxFRDogJXMp XG4iLGNrX2VycnN0cigpKTsKKwkJICAgIGVsc2UgaWYgKCFub2xpc3QpCisJCSAgICAgIHByaW50 ZigiPyVzXG4iLGNrX2VycnN0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CQkJLyogUmVndWxhciBjb3B5IHN1 Y2NlZWRlZCAqLworCQlkZWJ1ZyhGMTEwLCJDT1BZIE9LLi4iLG5ld25hbWUsMCk7CisjaWZuZGVm IE5PWEZFUgorCQlpZiAocHJlc2VydmUpIHsJCS8qIEhhbmRsZSAvUFJFU0VSVkUgKi8KKwkJICAg IGNoYXIgKiBwc3RyID0gIiI7CS8qIEZpbGUgcGVybWlzc2lvbnMgc3RyaW5nICovCisJCSAgICBz dHJ1Y3QgemF0dHIgeHg7CS8qIEZpbGUgYXR0cmlidXRlIHN0cnVjdHVyZSAqLworCQkgICAgZXh0 ZXJuIGNoYXIgKiBja3N5c2lkOworCisJCSAgICBpbml0YXR0cigmeHgpOwkvKiBJbml0aWFsaXpl IHRoZSBzdHJ1Y3QgKi8KKworCQkgICAgeHguc3lzdGVtaWQudmFsID0gY2tzeXNpZDsgLyogU2V0 IG91ciBzeXN0ZW0gSUQgKi8KKwkJICAgIHh4LnN5c3RlbWlkLmxlbiA9IChpbnQpc3RybGVuKGNr c3lzaWQpOworI2lmZGVmIENLX1BFUk1TCisJCSAgICBwc3RyID0gemdwZXJtKGxpbmUpOyAvKiBH ZXQgc291cmNlIGZpbGUncyBwZXJtaXNzaW9ucyAqLworI2VuZGlmIC8qIENLX1BFUk1TICovCisJ CSAgICB4eC5scHJvdGVjdC52YWwgPSBwc3RyOworCQkgICAgeHgubHByb3RlY3QubGVuID0gKGlu dClzdHJsZW4ocHN0cik7CisJCSAgICB4eC5kYXRlLnZhbCA9IHpmY2RhdChsaW5lKTsJLyogU291 cmNlIGZpbGUncyB0aW1lc3RhbXAgKi8KKwkJICAgIHh4LmRhdGUubGVuID0gKGludClzdHJsZW4o eHguZGF0ZS52YWwpOworCQkgICAgaWYgKHpzdGltZShubSwmeHgsMCkgPCAwKSB7CisJCQlwcmlu dGYoIj9DT1BZIC9QUkVTRVJWRSAlczogJXNcbiIsbm0sY2tfZXJyc3RyKCkpOworCQkJcmMgPSAt OTsKKwkJICAgIH0KKwkJfQorI2VuZGlmCS8qIE5PWEZFUiAqLworCQlpZiAobGlzdGluZyAmJiBy YyA+IC0xKQorCQkgIHByaW50ZigiKE9LKVxuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg fSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTcGVjaWFsIG9wdGlvbnMgKi8KKwor ICAgICAgICAgICAgaW50IHByZXYsIHksIHggPSAwOyAgICAgICAgIC8qIFZhcmlhYmxlcyBuZWVk ZWQgZm9yIHRoZW0gKi8KKyAgICAgICAgICAgIGludCBpLCB0OworICAgICAgICAgICAgY2hhciBp YnVmWzEwMF07CisgICAgICAgICAgICBjaGFyIG9idWZbMjAwXTsKKyAgICAgICAgICAgIEZJTEUg KiBpbiA9IE5VTEw7CisgICAgICAgICAgICBGSUxFICogb3V0ID0gTlVMTDsKKworICAgICAgICAg ICAgaWYgKChpbiA9IGZvcGVuKGxpbmUsInIiKSkgPT0gTlVMTCkgeyAvKiBPcGVuIGlucHV0IGZp bGUgKi8KKyAgICAgICAgICAgICAgICBpZiAobGlzdGluZykKKwkJICBwcmludGYoIihGQUlMRUQ6 ICVzKVxuIixja19lcnJzdHIoKSk7CisJCWVsc2UgaWYgKCFub2xpc3QpCisJCSAgcHJpbnRmKCI/ JXMgLSAlcylcbiIsY2tfZXJyc3RyKCksbGluZSk7CisgICAgICAgICAgICAgICAgcmMgPSAwOwor ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KHRhcmdldGlzZGlyKSB7ICAgICAgICAgIC8qIFRhcmdldCBpcyBkaXJlY3RvcnkgKi8KKyAgICAg ICAgICAgICAgICBjaGFyICogYnVmID0gTlVMTDsgICAgICAvKiBzbyBhcHBlbmQgdGhpcyBmaWxl bmFtZSB0byBpdCAqLworICAgICAgICAgICAgICAgIHpzdHJpcChsaW5lLCZidWYpOworICAgICAg ICAgICAgICAgIHBbdGFyZ2V0bGVuXSA9IE5VTDsKKyAgICAgICAgICAgICAgICBpZiAoYnVmKQor ICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHAsYnVmLFRNUEJVRlNJWik7CisgICAgICAgICAg ICB9CisjaWZkZWYgT1MyT1JVTklYCisgICAgICAgICAgICBpZiAoemNtcGZuKGxpbmUscCkpIHsg ICAgICAgLyogSW5wdXQgYW5kIG91dHB1dCBhcmUgc2FtZSBmaWxlPyAqLworICAgICAgICAgICAg ICAgIGlmIChsaXN0aW5nKQorICAgICAgICAgICAgICAgICAgcHJpbnRmKCIoRkFJTEVEOiBTb3Vy Y2UgYW5kIGRlc3RpbmF0aW9uIGlkZW50aWNhbClcbiIpOworCQllbHNlIGlmICghbm9saXN0KQor ICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/U291cmNlIGFuZCBkZXN0aW5hdGlvbiBpZGVudGlj YWwgLSAlc1xuIiwgbGluZSk7IAorICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAg ICAgICAgICAgIGlmICgob3V0ID0gZm9wZW4ocCwgKGFwcGVuZGluZyA/ICJhIiA6ICJ3IikpKSA9 PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZmNsb3NlKGluKTsKKyAgICAgICAgICAgICAgICBp ZiAobGlzdGluZykKKwkJICBwcmludGYoIihGQUlMRUQ6ICVzIC0gJXMpXG4iLHAsY2tfZXJyc3Ry KCkpOworCQllbHNlIGlmICghbm9saXN0KQorCQkgIHByaW50ZigiPyVzIC0gJXNcbiIscCxja19l cnJzdHIoKSk7CisgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICAgICAgfQorI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgaWYgKHRvYjY0 KSB7ICAgICAgICAgICAgICAgIC8qIENvbnZlcnRpbmcgdG8gQmFzZS02NCAqLworCisgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiQ09QWSB0b2I2NCIsbGluZSwwKTsKKworICAgICAgICAgICAg ICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgIC8qIExvb3AuLi4gKi8KKyAgICAgICAgICAgICAg ICAgICAgcHJldiA9IHg7CisgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGZyZWFkKGlidWYs MSw1NCxpbikpIDwgMSkgeyAvKiBFT0YgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChs aXN0aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihPSylcbiIpOworICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgaWYgKHByZXYgJSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAobGlzdGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIoRkFJTEVEOiBQ aGFzZSBlcnJvciBhdCAlZClcbiIscHJldik7CisJCQllbHNlIGlmICghbm9saXN0KQorICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9QaGFzZSBlcnJvciBhdCAlZFxuIixwcmV2KTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChz d2FwcGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggJiAxKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIihGQUlMRUQ6IFN3YXAgZXJyb3IpXG4iKTsKKwkJCSAgICBlbHNlIGlm ICghbm9saXN0KQorCQkJICAgICAgcHJpbnRmKCI/U3dhcCBlcnJvclxuIik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IHg7IGkrPTIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ID0gaWJ1ZltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYnVmW2ldID0gaWJ1Zltp KzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlidWZbaSsxXSA9IHQ7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgaWYgKCh5ID0gYjh0b2I2NChpYnVmLHgsb2J1ZiwxODApKSA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIihGQUlMRUQ6IEVuY29kaW5nIGVycm9yKVxuIik7CisJCQllbHNlIGlmICghbm9saXN0 KQorCQkJICBwcmludGYoIj9FbmNvZGluZyBlcnJvclxuIik7CisgICAgICAgICAgICAgICAgICAg ICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwiJXNcbiIsb2J1Zik7 CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgaWYgKGZyb21iNjQpIHsg ICAgICAgLyogQ29udmVydGluZyBmcm9tIEJhc2UgNjQgKi8KKworICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsIkNPUFkgZnJvbWI2NCIsbGluZSwwKTsKKworICAgICAgICAgICAgICAgIGlmICgo b3V0ID0gZm9wZW4ocCxhcHBlbmRpbmcgPyAiYSIgOiAidyIpKSA9PSBOVUxMKSB7CisgICAgICAg ICAgICAgICAgICAgIGZjbG9zZShpbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5n KQorCQkgICAgICBwcmludGYoIihGQUlMRUQ6ICVzIC0gJXMpXG4iLHAsY2tfZXJyc3RyKCkpOwor CQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKKwkJICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixwLGNr X2VycnN0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeCA9IDE7 CisgICAgICAgICAgICAgICAgd2hpbGUgKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IGZy ZWFkKGlidWYsMSw4MCxpbik7CisgICAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGI2NHRvYjgo aWJ1Zix4LG9idWYsODApKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0 aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6IERlY29kaW5n IGVycm9yKVxuIik7CisJCQllbHNlIGlmICghbm9saXN0KQorCQkJICBwcmludGYoIj9EZWNvZGlu ZyBlcnJvclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBpZiAoc3dhcHBpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICYg MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIoRkFJTEVEOiBTd2FwIGVycm9yKVxuIik7CisJ CQkgICAgZWxzZSBpZiAoIW5vbGlzdCkKKwkJCSAgICAgIHByaW50ZigiP1N3YXAgZXJyb3JcbiIp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB5OyBpKz0yKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdCA9IG9idWZbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2J1 ZltpXSA9IG9idWZbaSsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnVmW2krMV0g PSB0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGlmICh5ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGZ3cml0ZShvYnVmLDEseSxvdXQpIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChsaXN0aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIo RkFJTEVEOiAlcyAtICVzKVxuIixwLGNrX2VycnN0cigpKTsKKwkJCSAgICBlbHNlIGlmICghbm9s aXN0KQorCQkJICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixwLGNrX2VycnN0cigpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIE5P U1BMICovCisKKyAgICAgICAgICAgIGlmIChzd2FwcGluZykgeyAgICAgICAgICAgICAvKiBTd2Fw cGluZyBieXRlcyAqLworCisgICAgICAgICAgICAgICAgQ0hBUiBjWzNdOworICAgICAgICAgICAg ICAgIGNbMl0gPSBOVUw7CisKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJDT1BZIHN3YXBw aW5nIixsaW5lLDApOworCisgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAg ICAgICAgICAgeCA9IGZyZWFkKChjaGFyICopYywxLDIsaW4pOworICAgICAgICAgICAgICAgICAg ICBpZiAoeCA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQorICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihPSylcbiIpOworICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeCA9PSAxKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBjWzFdID0gY1swXTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNbMF0gPSBOVUw7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIihXQVJOSU5HOiBPZGQgYnl0ZSBjb3VudCkiKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdGluZykgcHJpbnRmKCJcbiIpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChmcHJpbnRmKG91dCwiJWMl YyIsY1sxXSxjWzBdKSA9PSBFT0YpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0 aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihGQUlMRUQ6ICVzIC0gJXMp XG4iLHAsY2tfZXJyc3RyKCkpOworCQkJZWxzZSBpZiAoIW5vbGlzdCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixwLGNrX2VycnN0cigpKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9 IGVsc2UgaWYgKGFwcGVuZGluZykgeyAgICAgLyogQXBwZW5kaW5nIHRvIHRhcmdldCBmaWxlICov CisKKyAgICAgICAgICAgICAgICBjaGFyIGM7CisKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJDT1BZIGFwcGVuZGluZyIsbGluZSwwKTsKKworICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7 CisgICAgICAgICAgICAgICAgICAgIHggPSBmcmVhZCgmYywxLDEsaW4pOworICAgICAgICAgICAg ICAgICAgICBpZiAoeCA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0aW5n KQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihPSylcbiIpOworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgaWYgKGZ3cml0ZSgmYywxLDEsb3V0KSA8IDEpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChsaXN0aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIihG QUlMRUQ6ICVzIC0gJXMpXG4iLHAsY2tfZXJyc3RyKCkpOworCQkJZWxzZSBpZiAoIW5vbGlzdCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/JXMgLSAlc1xuIixwLGNrX2VycnN0 cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG91dCkgZmNsb3NlKG91dCk7CisgICAgICAg ICAgICBpZiAoaW4pIGZjbG9zZShpbik7CisgICAgICAgIH0KKyNpZmRlZiBWTVNPUlVOSVgKKyAg ICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKKyNlbmRpZiAvKiBWTVNPUlVOSVggKi8KKyAgICB9 CisgICAgaWYgKHJjID4gLTEpIHN1Y2Nlc3MgPSByYzsKKyAgICByZXR1cm4ocmMpOworfQorI2Vu ZGlmIC8qIFpDT1BZICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT0NTRVRT CisjaWZuZGVmIE5PVU5JQ09ERQorc3RhdGljIHN0cnVjdCBrZXl0YWIgKiB4ZmNzdGFiID0gTlVM TDsJLyogRm9yIFJFTkFNRSAvQ09OVkVSVDogKi8KK3N0YXRpYyBjaGFyIGN2dGJ1ZmluW0NLTUFY UEFUSCs4XSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRpYyBjaGFyIGN2dGJ1Zm91dFtDS01BWFBBVEgr OF0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMgY2hhciAqIHBjdnRidWZpbiA9IE5VTEw7CitzdGF0 aWMgY2hhciAqIHBjdnRidWZvdXQgPSBOVUxMOworCitzdGF0aWMgaW50CQkJCS8qIElucHV0IGZ1 bmN0aW9uIHhnbmJ5dGUoKSAqLworY3Z0Zm5pbigpIHsKKyAgICBDSEFSIGM7CisgICAgYyA9ICpw Y3Z0YnVmaW4rKzsKKyAgICByZXR1cm4oYyA/IGMgOiAtMSk7Cit9CisKK19QUk9UT1RZUChpbnQg Y3Z0Zm5vdXQsKGNoYXIpKTsJCS8qIE91dHB1dCBmdW5jdGlvbiBmb3IgeHBuYnl0ZSgpICovCitp bnQKKyNpZmRlZiBDS19BTlNJQworY3Z0Zm5vdXQoY2hhciBjKQorI2Vsc2UKK2N2dGZub3V0KGMp IGNoYXIgYzsKKyNlbmRpZgkvKiBDS19BTlNJQyAqLworeworICAgIGlmIChwY3Z0YnVmb3V0IC0g Y3Z0YnVmb3V0ID49IENLTUFYUEFUSCkKKyAgICAgIHJldHVybigtMSk7CisgICAgKnBjdnRidWZv dXQrKyA9IGM7CisgICAgKnBjdnRidWZvdXQgPSBOVUw7CisgICAgcmV0dXJuKDEpOworfQorCisv KiBDb252ZXJ0IGEgc3RyaW5nIGZyb20gYW55IGNoYXJzZXQgdG8gYW55IG90aGVyIGNoYXJzZXQg Ki8KKworY2hhciAqCitjdnRzdHJpbmcocyxjc2luLGNzb3V0KSBjaGFyICogczsgaW50IGNzaW4s IGNzb3V0OyB7CisgICAgaW50IGM7CisgICAgZXh0ZXJuIENLX09GRl9UIGZmYzsKKworICAgIGNr c3RybmNweShjdnRidWZpbixzLENLTUFYUEFUSCk7CS8qIFB1dCBpdCBpbiBhIHB1YmxpYyBwbGFj ZSAqLworICAgIHBjdnRidWZpbiA9IGN2dGJ1ZmluOwkJLyogd2l0aCBwdWJsaWMgcG9pbnRlcnMg Ki8KKyAgICBwY3Z0YnVmb3V0ID0gY3Z0YnVmb3V0OworICAgICpwY3Z0YnVmb3V0ID0gTlVMOwor CisgICAgaWYgKGNzaW4gPT0gY3NvdXQpCQkJLyogSWYgdGhlIHR3byBzZXRzIGFyZSB0aGUgc2Ft ZSAqLworICAgICAgcmV0dXJuKChjaGFyICopY3Z0YnVmaW4pOwkJLyogZG9uJ3QgYm90aGVyIGNv bnZlcnRpbmcgKi8KKworICAgIGluaXR4bGF0ZShjc2luLGNzb3V0KTsJCS8qIEluaXRpYWxpemUg dGhlIHRyYW5zbGF0b3IgKi8KKworICAgIHdoaWxlICgoYyA9IHhnbmJ5dGUoRkNfVUNTMixjc2lu LGN2dGZuaW4pKSA+IC0xKSB7IC8qIExvb3AgdGhydSBzdHJpbmcgKi8KKwlpZiAoeHBuYnl0ZShj LFRDX1VDUzIsY3NvdXQsY3Z0Zm5vdXQpIDwgMCkgeworCSAgICBmZmMgPSAoQ0tfT0ZGX1QpMDsK KwkgICAgcmV0dXJuKCIiKTsKKwl9CisgICAgfQorICAgIC8qIGZmYyBpcyB0b3VjaGVkIGJ5IHhn bmJ5dGUoKSBidXQgdGhpcyBpcyBub3QgZmlsZSB0cmFuc2ZlciAqLworICAgIC8qIHNvIHdlIGhh dmUgdG8gdW5kbyBpdCAqLworICAgIGZmYyA9IChDS19PRkZfVCkwOworICAgIHJldHVybigoY2hh ciAqKWN2dGJ1Zm91dCk7Cit9CisjZW5kaWYgLyogTk9VTklDT0RFICovCisjZW5kaWYgLyogTk9D U0VUUyAqLworCisjaWZuZGVmIE5PUkVOQU1FCisjaWZuZGVmIE5PRlJJTExTCisjaWZkZWYgWlJF TkFNRQorCisvKiBUaGUgUkVOQU1FIGNvbW1hbmQgLSBleHBhbmRlZCBhbmQgaW1wcm92ZWQgaW4g OC4wLjIxMiBBcHJpbCAyMDA2ICovCisKK3N0YXRpYyBjaGFyICogcmVuX3N1Yls0XSA9IHsgTlVM TCxOVUxMLE5VTEwsTlVMTCB9OyAvKiBGb3IgUkVOQU1FIC9SRVBMQUNFICovCisKK2ludCByZW5f bGlzdCA9IDA7CQkgICAgICAgIC8qIERlZmF1bHQgbGlzdGluZyBhY3Rpb24gZm9yIFJFTkFNRSAq LworaW50IHJlbl9jb2xsID0gUkVOWF9PVldSOwkJLyogRGVmYXVsdCBjb2xsaXNpb24gYWN0aW9u ICovCisKK2ludAorc2hvcmVuYW1lKCkgeworICAgIGNoYXIgKiBzOworICAgIHN3aXRjaCAocmVu X2NvbGwpIHsKKyAgICAgIGNhc2UgUkVOWF9GQUlMOiBzID0gImZhaWwiOyBicmVhazsKKyAgICAg IGNhc2UgUkVOWF9PVldSOiBzID0gIm92ZXJ3cml0ZSI7IGJyZWFrOworICAgICAgY2FzZSBSRU5Y X1NLSVA6IHMgPSAicHJvY2VlZCI7IGJyZWFrOworICAgIH0KKyAgICBwcmludGYoIiByZW5hbWUg Y29sbGlzaW9uOiAlc1xuIixzKTsKKyAgICBwcmludGYoIiByZW5hbWUgbGlzdDogICAgICAlc1xu IixzaG93b2ZmKHJlbl9saXN0KSk7CisgICAgcmV0dXJuKDEpOworfQorCitpbnQKK3NldHJlbmFt ZSgpIHsJCQkJLyogUGFyc2UgU0VUIFJFTkFNRSBvcHRpb25zICovCisgICAgaW50IHgsIHk7Cisg ICAgaWYgKCh4ID0gY21rZXkocmVuYW1zZXQsbnJlbmFtc2V0LCIiLCIiLCB4eHN0cmluZykpIDwg MCkKKyAgICAgIHJldHVybih4KTsKKyAgICBzd2l0Y2ggKHgpIHsKKyAgICAgIGNhc2UgUkVOX09W VzoJCQkvKiBDT0xMSVNJT04gKi8KKwlpZiAoKHggPSBjbWtleShyX2NvbGxpc2lvbixucl9jb2xs aXNpb24sIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOworCWlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkKKwkgIHJldHVybih5KTsKKwlyZW5fY29sbCA9IHg7CisJYnJlYWs7CisgICAg ICBjYXNlIERFTF9MSVM6CQkJLyogTElTVCAqLworCXJldHVybihzZXRvbigmcmVuX2xpc3QpKTsK KyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKworLyogUmV2ZXJzZSBhIHN0cmlu ZyAtIEFzc3VtZXMgYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIgc2V0ICovCisKK2ludAorZ25pcnRz KHMxLCBzMiwgbGVuKSBjaGFyICogczEsICogczI7IGludCBsZW47IHsKKyAgICBpbnQgbiwgbSA9 IDA7CisgICAgaWYgKCFzMSkJCQkJLyogTnVsbCBzb3VyY2UgcG9pbnRlciwgZmFpbCAqLworICAg ICAgcmV0dXJuKDApOworICAgIG4gPSAoaW50KSBzdHJsZW4oczEpOworICAgIGlmIChuID4gbGVu LTEpCQkJLyogU291cmNlIGxvbmdlciB0aGFuIGRlc3QsIGZhaWwgKi8KKyAgICAgIHJldHVybigw KTsKKyAgICBzMltuLS1dID0gTlVMOwkJCS8qIERlcG9zaXQgbnVsbCBieXRlIGF0IGVuZCBvZiBk ZXN0ICovCisgICAgZm9yICg7IG4gPj0gMDsgbi0tKSB7CQkvKiBDb3B5IHRoZSByZXN0IGJhY2t3 YXJkcyAqLworCSpzMisrID0gczFbbl07CisJbSsrOworICAgIH0KKyAgICByZXR1cm4obSk7Cit9 CisKKy8qCisgIHIgZSBuIGEgbSBlIG8gbiBlCisKKyAgV29ya2VyIGZ1bmN0aW9uIHRvIHJlbmFt ZSBvbmUgZmlsZSBmb3IgZG9yZW5hbSgpIChiZWxvdykuCisgICAgb2xkICAgICAgICA9IG5hbWUg b2YgZmlsZSBvciBkaXJlY3RvcnkgdG8gYmUgcmVuYW1lZAorICAgIG5ldyAgICAgICAgPSBuZXcg bmFtZSAobm90IHJlcXVpcmVkIGZvciAvVVBQRVIsIC9MT1dFUiwgYW5kIC9SRVBMQUNFKQorICAg IHJlcGxhY2luZyAgPSAxIGlmIGRvaW5nIHN0cmluZyByZXBsYWNlbWVudCBvbiB0aGUgbmFtZSAg CisgICAgY2FzaW5nICAgICA9IDEgaWYgY29udmVydGluZyBuYW1lIHRvIGxvd2VyY2FzZSwgMiBp ZiB0byB1cHBlcmNhc2UKKyAgICBhbGwgICAgICAgID0gaWYgZG9pbmcgY2FzZSBjb252ZXJzaW9u IG9uIGFsbCBuYW1lcywgbm90IGp1c3QgbW9ub2Nhc2Ugb25lcworICAgIGNvbnZlcnRpbmcgPSAx IGlmIGNvbnZlcnRpbmcgY2hhcmFjdGVyIHNldHMKKyAgICBjc2V0MSAgICAgID0gY2hhcmFjdGVy IHNldCB0byBjb252ZXJ0IGZyb20gKEZpbGUgQ2hhcmFjdGVyIFNldCBpbmRleCkKKyAgICBjc2V0 MiAgICAgID0gY2hhcmFjdGVyIHNldCB0byBjb252ZXJ0IHRvIChkaXR0bywgc2VlIGNrP3hsYS5o KQorICAgIGxpc3RpbmcgICAgPSAxIHRvIHNob3cgcmVzdWx0cyBvZiByZW5hbWUKKyAgICBub2xp c3QgICAgID0gMSB0byBiZSBjb21wbGV0ZWx5IHNpbGVudCAoZG9uJ3QgZXZlbiBwcmludCBlcnJv ciBtZXNzYWdlcykKKyAgICBvcCAgICAgICAgID0gMSBtZWFucyBzaW11bGF0ZSwgMiBtZWFucyBj aGVjayBmb3IgY29sbGlzaW9uLCAwIG1lYW5zIHJlbmFtZQorICAgIHNpemUgICAgICAgPSBsZW5n dGggb2YgcmVzdWx0IGJ1ZmZlci4KKyAgICBjb2xsaXNpb24gID0gYWN0aW9uIHRvIHRha2UgaWYg ZGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0czoKKyAgICAgICAgICAgICAgICAgMCA9IGZh aWwKKyAgICAgICAgICAgICAgICAgMSA9IG92ZXJ3cml0ZSBhbmQgc3VjY2VlZAorICAgICAgICAg ICAgICAgICAyID0gc2tpcCBhbmQgc3VjY2VlZAorICBSZXR1cm5zOgorICAgICAwOiBvbiBmYWls dXJlIHRvIHJlbmFtZSBvciB3aGVuIGEgZm9yYmlkZGVuIGNvbGxpc2lvbiB3b3VsZCBoYXZlIG9j Y3VycmVkLgorICAgICAxOiBvbiBzdWNjZXNzIChmaWxlIHdhcyByZW5hbWVkIG9yIGRpZCBub3Qg bmVlZCB0byBiZSByZW5hbWVkKS4KKyAgTm90ZToKKyAgICAgSWYgdGhpcyBjb2RlIGlzIGV2ZXIg YnVpbHQgb24gYW55IHBsYXRmb3JtIHRoYXQgaXMgbm90IFVuaXgsIFdpbmRvd3MsCisgICAgIFZN Uywgb3IgT1MvMiwgdGhpcyByb3V0aW5lIG1pZ2h0IG5lZWQgc29tZSBhZGp1c3RtZW50LgorKi8K KworLyogT3Bjb2RlcyBmb3Igb3AuLi4gKi8KKyNkZWZpbmUgUkVOX09QX1NJTSAxCQkJLyogU2lt dWxhdGUgKi8KKyNkZWZpbmUgUkVOX09QX0NISyAyCQkJLyogQ2hlY2sgZm9yIGNvbGxpc2lvbnMg Ki8KKworc3RhdGljIGludAorcmVuYW1lb25lKG9sZCxuZXcsCisJICByZXBsYWNpbmcsY2FzaW5n LGFsbCxjb252ZXJ0aW5nLGNzZXQxLGNzZXQyLAorCSAgbGlzdGluZyxub2xpc3Qsb3Asc2l6ZSxj b2xsaXNpb24pCisgICAgY2hhciAqIG9sZCwgKiBuZXc7CisgICAgaW50IHJlcGxhY2luZyxjYXNp bmcsYWxsLGNvbnZlcnRpbmcsY3NldDEsY3NldDIsCisgICAgbGlzdGluZyxub2xpc3Qsb3Asc2l6 ZSxjb2xsaXNpb247Cit7CisgICAgY2hhciBidWZbQ0tNQVhQQVRIXTsJCS8qIFRlbXBvcmFyeSBm aWxlbmFtZSBidWZmZXIgKi8KKyAgICBjaGFyIG91dFtDS01BWFBBVEhdOwkJLyogQnVmZmVyIGZv ciBuZXcgbmFtZSAqLworICAgIGNoYXIgZGlyW0NLTUFYUEFUSF07CQkvKiBEZXN0aW5hdGlvbiBk aXJlY3RvcnkgKi8KKyAgICBjaGFyIHBhdFtDS01BWFBBVEhdOwkJLyogUGF0aCBzZWdtZW50IG9u IG9sZCBmaWxlbmFtZSAqLworCisgICAgY2hhciAqIGRlc3RkaXI7CQkJLyogRGVzdGluYXRpb24g ZGlyZWN0b3J5LCBpZiBhbnkgKi8KKyAgICBjaGFyICogc3JjcGF0aDsJCQkvKiBTb3VyY2UgcGF0 aCwgaWYgYW55ICovCisgICAgaW50IHJjID0gMSwgZmxhZyA9IDAsIHNraXAgPSAwOwkvKiBDb250 cm9sICovCisgICAgaW50IGhvbm9yY2FzZSA9IDAsIHJlcGxhY2VkID0gMDsKKyAgICBpbnQgYW5j aG9yID0gMDsJCQkvKiAxID0gYmVnaW5uaW5nLCAyID0gZW5kICovCisgICAgaW50IG9jY3VyID0g MDsJCQkvKiBPY2N1cnJlbmNlICovCisgICAgaW50IG1pbnVzID0gMDsJCQkvKiBPY2N1cnJlbmNl IGlzIG5lZ2F0aXZlICovCisgICAgaW50IGFsbGJ1dCA9IDA7CQkJLyogT2NjdXJyZW5jZSBpcyAi YWxsIGJ1dCIgKi8KKyAgICBpbnQgYXJnMmlzZmlsZSA9IDA7CQkJLyogQXJnMiAoIm5ldyIpIGlz IGEgZmlsZW5hbWUgKi8KKyAgICAKKyAgICBkZWJ1ZyhGMTEwLCJSRU5BTUVPTkUgb2xkIixvbGQs MCk7CisgICAgZGVidWcoRjExMCwiUkVOQU1FT05FIG5ldyIsbmV3LDApOworICAgIGRlYnVnKEYx MTAsIlJFTkFNRU9ORSByZW5fc3ViWzBdIixyZW5fc3ViWzBdLDApOworICAgIGRlYnVnKEYxMTAs IlJFTkFNRU9ORSByZW5fc3ViWzFdIixyZW5fc3ViWzFdLDApOworICAgIGRlYnVnKEYxMTAsIlJF TkFNRU9ORSByZW5fc3ViWzJdIixyZW5fc3ViWzJdLDApOworCisgICAgaWYgKG9wID09IFJFTl9P UF9TSU0gJiYgIW5vbGlzdCkJLyogRm9yIGNvbnZlbmllbmNlICovCisgICAgICBsaXN0aW5nID0g MTsKKyNpZm5kZWYgTk9TUEwKKyAgICBob25vcmNhc2UgPSBpbnBjYXNbY21kbHZsXTsJCS8qIElu aGVyaXQgU0VUIENBU0UgdmFsdWUgKi8KKyNlbHNlCisjaWZkZWYgVU5JWAorICAgIGhvbm9yY2Fz ZSA9IDE7CisjZWxzZQorICAgIGhvbm9yY2FzZSA9IDA7CisjZW5kaWYJLyogVU5JWCAqLworI2Vu ZGlmCS8qIE5PU1BMICovCisKKyAgICBpZiAoIW9sZCkgb2xkID0gIiI7CQkJLyogSW4gY2FzZSBv ZiBiYWQgYXJncyAqLworICAgIGlmICghbmV3KSBuZXcgPSAiIjsKKyAgICBpZiAoISpvbGQpIHJl dHVybihzdWNjZXNzID0gMCk7CisgICAgY2tzdHJuY3B5KG91dCxuZXcsQ0tNQVhQQVRIKTsJLyog U28gd2UgZG9uJ3Qgd3JpdGUgaW50byAqLworICAgIG5ldyA9IG91dDsJCQkJLyogb3VyIGFyZ3Vt ZW50Li4uICovCisgICAgc2l6ZSA9IENLTUFYUEFUSDsKKworICAgIHBhdFswXSA9IE5VTDsJCQkv KiBBc3N1bWUgbm8gcGF0aCBpbiBzb3VyY2UgZmlsZS4uICovCisgICAgc3JjcGF0aCA9IHBhdDsK KyAgICB7CisJaW50IG47CQkJCS8qIElmIHRoZSBvbGQgbmFtZSBpbmNsdWRlcyBhIHBhdGggKi8K KwluID0gKGludClzdHJsZW4ob2xkKSAtIDE7CS8qIHB1dCBpdCBpbiBhIHNlcGFyYXRlIHBsYWNl LiAgICAgKi8KKwlmb3IgKDsgbiA+PSAwOyBuLS0pIHsJCS8qIFdlIGFyZSByZW5hbWluZyB0aGUg ZmlsZSBvbmx5LiAgKi8KKwkgICAgaWYgKElTRElSU0VQKG9sZFtuXSkpIHsKKwkJY2tzdHJuY3B5 KHBhdCxvbGQsQ0tNQVhQQVRIKTsKKwkJcGF0W24rMV0gPSBOVUw7CisJCW9sZCA9IG9sZCtuKzE7 CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJSRU5BTUVPTkUg b2xkIDIiLG9sZCwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJSRU5BTUVPTkUgcGF0IDIiLHBhdCwwKTsK KworICAgIGRpclswXSA9IE5VTDsJCQkvKiBBc3N1bWUgbm8gZGVzdGluYXRpb24gZGlyZWN0b3J5 ICovCisgICAgZGVzdGRpciA9IGRpcjsKKyAgICBpZiAoKm5ldykgewkJCQkvKiBJZiBBcmcyIGdp dmVuICovCisJaWYgKGlzZGlyKG5ldykpIHsJCS8qIElmIGl0J3MgYSBkaXJlY3RvcnkgKi8KKwkg ICAgY2tzdHJuY3B5KGRpcixuZXcsQ0tNQVhQQVRIKTsgLyogcHV0IGl0IGhlcmUgKi8KKwl9IGVs c2UgewkJCS8qIG90aGVyd2lzZSAqLworCSAgICBhcmcyaXNmaWxlKys7CQkvKiBmbGFnIHRoYXQg aXQncyBhIGZpbGVuYW1lICovCisJfSAgICAKKyAgICB9CisgICAgaWYgKCFjYXNpbmcgJiYgIXJl cGxhY2luZyAmJiAhY29udmVydGluZykgeworCWlmICghKm5ldykKKwkgIHJldHVybihzdWNjZXNz ID0gMCk7CisJaWYgKCFhcmcyaXNmaWxlKSB7CQkvKiBEZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9y eT8gKi8KKwkgICAgaWYgKCFpc2RpcihvbGQpKSB7CQkvKiBhbmQgc291cmNlIGlzIG5vdD8gKi8K KyNpZm5kZWYgVk1TCisJCWludCBuLCB4ID0gMDsJCS8qIENvbmNhdGVuYXRlIHRoZW0gKi8KKwkJ aWYgKChuID0gc3RybGVuKG5ldykpID4gMCkgLyogc28gd2UgY2FuIGNoZWNrIGZvciAqLworCQkg IGlmIChJU0RJUlNFUChuZXdbbi0xXSkpICAvKiBjb2xsaXNpb25zLiAqLworCQkgICAgeCsrOwor CQlja21ha21zZyhidWYsc2l6ZSxuZXcseCA/ICIiIDogIi8iLCBvbGQsICIiKTsKKyNlbHNlCisJ CWNrbWFrbXNnKGJ1ZixzaXplLG5ldywgb2xkLCBOVUxMLCBOVUxMKTsKKyNlbmRpZgkvKiBWTVMg Ki8KKwkJZGVidWcoRjExMCwiUkVOQU1FT05FIG5ldyBuZXciLG5ldywwKTsJCQorCQluZXcgPSBi dWY7CisJCXNpemUgPSBDS01BWFBBVEg7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIGlmICgqbmV3 KSB7CQkJLyogRGlyZWN0b3J5IHRvIG1vdmUgZmlsZSB0byAqLworCWludCBuLCB4ID0gMDsJCQkv KiBhZnRlciBjaGFuZ2luZyBpdHMgbmFtZSAqLworCWlmICghaXNkaXIobmV3KSkKKwkgIHJldHVy bihzdWNjZXNzID0gMCk7CisjaWZuZGVmIFZNUworCWlmICgobiA9IHN0cmxlbihuZXcpKSA+IDAp CisJICBpZiAoSVNESVJTRVAobmV3W24tMV0pKQorCSAgICB4Kys7CisJY2ttYWttc2coZGlyLENL TUFYUEFUSCxuZXcseCA/ICIiIDogIi8iLCAiIiwgIiIpOworI2Vsc2UKKwlja3N0cm5jcHkoZGly LG5ldyxDS01BWFBBVEgpOworI2VuZGlmCS8qIFZNUyAqLworICAgIH0KKworI2lmbmRlZiBOT0NT RVRTCisjaWZuZGVmIE5PVU5JQ09ERQorICAgIGlmIChjb252ZXJ0aW5nKSB7CisJbmV3ID0gY3Z0 c3RyaW5nKG9sZCxjc2V0MSxjc2V0Mik7CisgICAgfQorI2VuZGlmCS8qIE5PVU5JQ09ERSAqLwor I2VuZGlmCS8qIE5PQ1NFVFMgKi8KKworICAgIGlmIChyZXBsYWNpbmcpIHsJCQkvKiBSZXBsYWNp bmcgc3RyaW5ncyAqLworCWludCB0b2RvID0gMDsKKwlpbnQgbGVuMCwgbGVuMSwgbGVuMjsKKwlj aGFyIGMsICpwLCAqcywgKmJwWzNdOworCisJYnBbMF0gPSBvbGQ7CQkJLyogT3JpZ2luYWwgbmFt ZSAqLworCWJwWzFdID0gcmVuX3N1YlswXTsJCS8qIFN0cmluZyB0byBiZSByZXBsYWNlZCAqLwor CWJwWzJdID0gcmVuX3N1YlsxXTsJCS8qIFdoYXQgdG8gcmVwbGFjZSBpdCB3aXRoICovCisJaWYg KCFicFsyXSkgYnBbMl0gPSAiIjsKKworCWxlbjAgPSAoaW50KXN0cmxlbihicFswXSk7CS8qIGxl bmd0aCBvZiBvcmlnaW5hbCBmaWxlbmFtZSAqLworCWxlbjEgPSAoaW50KXN0cmxlbihicFsxXSk7 CS8qIGxlbmd0aCBvZiB0YXJnZXQgc3Vic3RyaW5nICovCisJbGVuMiA9IChpbnQpc3RybGVuKGJw WzJdKTsJLyogTGVuZ3RoIG9mIHJlcGxhY2VtZW50IHN0cmluZyAqLworCisJaWYgKHJlbl9zdWJb Ml0pIHsJCS8qIE9wdGlvbmFsIG9wdGlvbnMgKi8KKwkgICAgcCA9IHJlbl9zdWJbMl07CisJICAg IHdoaWxlICgoYyA9ICpwKyspKSB7CisJCXN3aXRjaCAoYykgeworCQkgIGNhc2UgJ14nOgorCQkg ICAgYW5jaG9yID0gMTsgb2NjdXIgPSAwOyBtaW51cyA9IDA7IGFsbGJ1dCA9IDA7IGJyZWFrOwor CQkgIGNhc2UgJyQnOgorCQkgICAgYW5jaG9yID0gMjsgb2NjdXIgPSAwOyBtaW51cyA9IDA7IGFs bGJ1dCA9IDA7IGJyZWFrOworCQkgIGNhc2UgJ0EnOiBob25vcmNhc2UgPSAxOyBtaW51cyA9IDA7 IGFsbGJ1dCA9IDA7IGJyZWFrOworCQkgIGNhc2UgJ2EnOiBob25vcmNhc2UgPSAwOyBtaW51cyA9 IDA7IGFsbGJ1dCA9IDA7IGJyZWFrOworCQkgIGNhc2UgJy0nOiBtaW51cyA9IDE7IGJyZWFrOwor CQkgIGNhc2UgJ34nOiBhbGxidXQgPSAxOyBicmVhazsKKwkJICBkZWZhdWx0OgorCQkgICAgaWYg KGlzZGlnaXQoYykpIHsKKwkJCW9jY3VyID0gYyAtICcwJzsKKwkJCWlmIChtaW51cykgb2NjdXIg PSAwIC0gb2NjdXI7CisJCQlhbmNob3IgPSAwOworCQkgICAgfQorCQkgICAgbWludXMgPSAwOwor CQl9CisJICAgIH0KKwl9CisJaWYgKGFuY2hvcikgewkJCS8qIEFuY2hvcmVkIHJlcGxhY2VtZW50 Li4uICovCisJICAgIHkgPSBsZW4wIC0gbGVuMTsKKwkgICAgaWYgKHkgPiAwKSB7CisJCWludCB4 OworCQlzd2l0Y2ggKGFuY2hvcikgeworCQkgIGNhc2UgMToJCS8qIEFuY2hvcmVkIGF0IGJlZ2lu bmluZyAqLworCQkgICAgaWYgKCFja3N0cmNtcChicFsxXSxicFswXSxsZW4xLGhvbm9yY2FzZSkp IHsKKwkJCXggPSBja3N0cm5jcHkobmV3LGJwWzJdLHNpemUpOworCQkJKFZPSUQpIGNrc3RybmNw eShuZXcreCxicFswXStsZW4xLHNpemUteCk7CisJCQlyZXBsYWNlZCA9IDE7CisJCSAgICB9CisJ CSAgICBicmVhazsKKwkJICBjYXNlIDI6CQkvKiBBbmNob3JlZCBhdCBlbmQgKi8KKwkJICAgIGlm ICghY2tzdHJjbXAoYnBbMV0sYnBbMF0reSxsZW4xLGhvbm9yY2FzZSkpIHsKKwkJCXggPSBja3N0 cm5jcHkobmV3LGJwWzBdLHkrMSk7CisJCQkoVk9JRCkgY2tzdHJuY3B5KG5ldyt5LGJwWzJdLHNp emUteCk7CisJCQlyZXBsYWNlZCA9IDE7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCSAg ICB9CisJICAgIGlmICghcmVwbGFjZWQpIHsKKwkJY2tzdHJuY3B5KG5ldyxvbGQsc2l6ZSk7IC8q IEtlZXAgb2xkIG5hbWUgKi8KKwkJcmVwbGFjZWQgPSAxOworCSAgICB9CisJfSBlbHNlIHsJCQkv KiBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyAqLworCSAgICBpbnQgaiwgbiA9IDA7CQkvKiBvciBh IHBhcnRpY3VsYXIgb2NjdXJyZW5jZSAqLworCSAgICBjaGFyIGM7CisJICAgIGludCB4ID0gMDsK KwkgICAgY2hhciAqIHMwID0gTlVMTCwgKiBzMSA9IE5VTEwsICogczIgPSBOVUxMOworCSAgICBw ID0gbmV3OwkJCS8qIFBvaW50ZXIgdG8gbmV3IG5hbWUgKi8KKworCSAgICBpZiAob2NjdXIgPCAw KSB7CQkvKiBudGggb2NjdXJyZW5jZSBmcm9tIHRoZSByaWdodCAqLworCQlvY2N1ciA9IDAgLSBv Y2N1cjsKKwkJczAgPSAoY2hhciAqKW1hbGxvYyhsZW4wKzEpOyAvKiBSZXZlcnNlIG9yaWdpbmFs IHN0cmluZyAqLworCQlpZiAoczApIHsKKwkJICAgIChWT0lEKSBnbmlydHMoYnBbMF0sczAsbGVu MCsxKTsKKwkJICAgIGJwWzBdID0gczA7CisJCX0gZWxzZSByZXR1cm4oMCk7IAorCQlzMSA9IChj aGFyICopbWFsbG9jKGxlbjErMSk7IC8qIFJldmVyc2UgdGFyZ2V0IHN0cmluZyAqLworCQlpZiAo czEpIHsKKwkJICAgIChWT0lEKSBnbmlydHMoYnBbMV0sczEsbGVuMSsxKTsKKwkJICAgIGJwWzFd ID0gczE7CisJCX0gZWxzZSByZXR1cm4oMCk7IAorCQlzMiA9IChjaGFyICopbWFsbG9jKGxlbjIr MSk7IC8qIFJldmVyc2UgcmVwbGFjZW1lbnQgc3RyaW5nICovCisJCWlmIChzMikgeworCQkgICAg KFZPSUQpIGduaXJ0cyhicFsyXSxzMixsZW4yKzEpOworCQkgICAgYnBbMl0gPSBzMjsKKwkJfSBl bHNlIHJldHVybigwKTsgCisJCWRlYnVnKEYxMTEsIlJFTkFNRU9ORSBzMCIsczAsbGVuMCk7CisJ CWRlYnVnKEYxMTEsIlJFTkFNRU9ORSBzMSIsczEsbGVuMSk7CisJCWRlYnVnKEYxMTEsIlJFTkFN RU9ORSBzMiIsczIsbGVuMik7CisJICAgIH0KKwkgICAgcyA9IGJwWzBdOwkJCS8qIFBvaW50ZXIg dG8gb2xkIG5hbWUgKi8KKwkgICAgcCA9IG5ldzsJCQkvKiBQb2ludGVyIHRvIG5ldyBuYW1lICov CisJICAgIGogPSBsZW4wIC0gbGVuMSArIDE7CS8qIEhvdyBtdWNoIHRvIHNjYW4gKi8KKwkgICAg d2hpbGUgKGotLSA+IDApIHsJCS8qIEZvciBlYWNoIGNoYXJhY3Rlci4uLiAqLworCQlpZiAoIWNr c3RyY21wKGJwWzFdLHMsbGVuMSxob25vcmNhc2UpKSB7IC8qIE1hdGNoPyAqLworCQkgICAgbisr OwkJLyogT2NjdXJyZW5jZSBjb3VudGVyICovCisJCSAgICB0b2RvID0gKG9jY3VyID09IDApIHx8 CisJCQkoIWFsbGJ1dCAmJiBuID09IG9jY3VyKSB8fAorCQkJKGFsbGJ1dCAmJiBuICE9IG9jY3Vy KTsKKwkJICAgIGlmICghdG9kbykgewkvKiBEZXNpcmVkIG9jY3VycmVuY2U/ICovCisJCQlzaXpl IC09IGNrc3RybmNweShwLGJwWzFdLHNpemUpOyAvKiBOby4uLiAqLworCQkJcCArPSBsZW4xOwkv KiBDb3B5IHRhcmdldCBzdHJpbmcgKi8KKwkJCXMgKz0gbGVuMTsJLyogaW5zdGVhZCBvZiByZXBs YWNlbWVudCBzdHJpbmcgKi8KKwkJCWNvbnRpbnVlOworCQkgICAgfQorCQkgICAgaWYgKGxlbjIp IHsJCS8qIElmIHJlcGxhY2VtZW50IHN0cmluZyBub3QgZW1wdHkgKi8KKwkJCXNpemUgLT0gY2tz dHJuY3B5KHAsYnBbMl0sc2l6ZSk7IC8qIENvcHkgaXQgKi8KKwkJCXAgKz0gbGVuMjsKKwkJICAg IH0KKwkJICAgIHMgKz0gbGVuMTsJCS8qIEFkdmFuY2Ugc291cmNlIHBvc2l0aW9uICovCisJCX0g ZWxzZSB7CQkvKiBObyBtYXRjaCAqLworCQkgICAgKnArKyA9ICpzKys7CS8qIGp1c3QgY29weSB0 aGlzIGNoYXJhY3RlciAqLworCQkgICAgc2l6ZS0tOworCQl9CisJICAgIH0KKwkgICAgd2hpbGUg KCgqcCsrID0gKnMrKykpOwkvKiBEb25lIGNvcHkgdGhlIHJlc3QgKi8KKwkgICAgcmVwbGFjZWQg PSAxOwkJLyogUmVtZW1iZXIgd2UgY2hhbmdlZCB0aGUgbmFtZSAqLworCSAgICBpZiAoczApIHsJ CQkvKiBXZXJlIHdlIGRvaW5nICJhbGwgYnV0Ij8gKi8KKwkJZGVidWcoRjExMCwiUkVOQU1FT05F IG5ldzEiLG5ldywwKTsKKwkJeCA9IChpbnQpc3RybGVuKG5ldyk7CS8qIFVucmV2ZXJzZSB0aGUg cmVzdWx0ICovCisJCWlmICgocCA9IChjaGFyICopbWFsbG9jKHgrMikpKSB7CisJCSAgICAoVk9J RCkgZ25pcnRzKG5ldyxwLHgrMik7CisJCSAgICBkZWJ1ZyhGMTEwLCJSRU5BTUVPTkUgbmV3MiIs bmV3LDApOworCQkgICAgY2tzdHJuY3B5KG5ldyxwLHgrMik7CisJCSAgICBmcmVlKHApOworCQl9 CisJCWlmIChzMCkgZnJlZShzMCk7CS8qIEZyZWUgdGhlIHRlbXBvcmFyeSBzdHJpbmdzICovCisJ CWlmIChzMSkgZnJlZShzMSk7CisJCWlmIChzMikgZnJlZShzMik7CisJCWRlYnVnKEYxMTAsIlJF TkFNRU9ORSBuZXczIixuZXcsMCk7CisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIChjYXNpbmcp IHsJCQkvKiBDaGFuZ2luZyBjYXNlPyAqLworCWNoYXIgYywgKiB0OwkJCS8qIFNlZSBpZiBtaXhl ZCBjYXNlLiAqLworCWlmICghcmVwbGFjZWQpCisJICBja3N0cm5jcHkobmV3LG9sZCxzaXplKTsJ LyogQ29weSBvbGQgbmFtZSB0byBuZXcgbmFtZSAqLworCXQgPSBuZXc7CisJd2hpbGUgKChjID0g KnQrKykpIHsKKwkgICAgaWYgKGlzbG93ZXIoYykpIGZsYWcgfD0gMTsgLyogSGF2ZSBhIGxvd2Vy Y2FzZSBsZXR0ZXIgKi8KKwkgICAgZWxzZSBpZiAoaXN1cHBlcihjKSkgZmxhZyB8PSAyOyAvKiBI YXZlIGFuIHVwcGVyY2FzZSBsZXR0ZXIgKi8KKwkgICAgaWYgKGZsYWcgPT0gMykgYnJlYWs7CS8q IEhhdmUgYSBtaXhlZC1jYXNlIG5hbWUgKi8KKwl9CisJaWYgKGFsbCB8fCBmbGFnIDwgMykgewkv KiBOb3Qgc2tpcHBpbmcgb3Igbm90IG1peGVkIGNhc2UgKi8KKwkgICAgaWYgKGNhc2luZyA9PSAx ICYmIGZsYWcgIT0gMSkgLyogQ2hhbmdlIGNhc2UgdG8gbG93ZXIgKi8KKwkgICAgICAoVk9JRCkg Y2tsb3dlcihuZXcpOworCSAgICBlbHNlIGlmIChjYXNpbmcgPT0gMiAmJiBmbGFnICE9IDIpIC8q IENoYW5nZSBjYXNlIHRvIHVwcGVyICovCisJICAgICAgKFZPSUQpIGNrdXBwZXIobmV3KTsKKwl9 CisgICAgfQorICAgIGRlYnVnKEYxMTAsIlhYWCAxIG5ldyIsbmV3LDApOworICAgIGRlYnVnKEYx MTAsIlhYWCAxIG9sZCIsb2xkLDApOworICAgIGRlYnVnKEYxMTAsIlhYWCAxIHNyY3BhdGgiLHNy Y3BhdGgsMCk7CisgICAgZGVidWcoRjExMCwiWFhYIDEgZGVzdGRpciIsZGVzdGRpciwwKTsKKwor ICAgIGlmICgqZGVzdGRpciAmJiAhYXJnMmlzZmlsZSkgewkvKiBNb3Zpbmcgd2l0aG91dCByZW5h bWluZyAqLworCWNrc3RybmNhdChzcmNwYXRoLG9sZCxDS01BWFBBVEgpOworCW9sZCA9IHNyY3Bh dGg7CisJbmV3ID0gZGVzdGRpcjsKKyAgICB9IGVsc2UgaWYgKCpkZXN0ZGlyIHx8ICpzcmNwYXRo KSB7CS8qIFdlcmUgdGhlcmUgYW55IHBhdGhuYW1lcz8gKi8KKwljaGFyIHRtcFtDS01BWFBBVEhd OworCWNrbWFrbXNnKHRtcCxDS01BWFBBVEgsc3JjcGF0aCxvbGQsTlVMTCxOVUxMKTsKKwlja3N0 cm5jcHkob2xkLHRtcCxDS01BWFBBVEgpOworCWlmICgqZGVzdGRpcikgewkJCS8qIERpcmVjdG9y eS10by1tb3ZlLXRvIGdpdmVuPyAqLworCSAgICBja3N0cm5jYXQoZGVzdGRpcixuZXcsQ0tNQVhQ QVRIKTsKKwkgICAgbmV3ID0gZGVzdGRpcjsKKwl9IGVsc2UgaWYgKCpzcmNwYXRoICYmICFhcmcy aXNmaWxlKSB7IC8qIE9yIHdhcyB0aGVyZSBhIHNvdXJjZSBwYXRoPyAqLworCSAgICBja3N0cm5j YXQoc3JjcGF0aCxuZXcsQ0tNQVhQQVRIKTsKKwkgICAgbmV3ID0gc3JjcGF0aDsKKwl9CisgICAg fQorICAgIGRlYnVnKEYxMTAsIlhYWCAyIixuZXcsMCk7CisKKyAgICBza2lwID0gMDsJCQkJLyog Q2FuIHdlIHNraXAgdGhpcyBvbmU/ICovCisjaWZkZWYgQ09NTUVOVAorICAgIGlmIChjYXNpbmcg JiYgIXJlcGxhY2VkKSB7CisJc2tpcCA9ICgoKGFsbCA9PSAwKSAmJiAoZmxhZyA9PSAzKSkgfHwg KGZsYWcgPT0gY2FzaW5nKSkgPyAxIDogMDsKKwlpZiAoIXNraXAgJiYgZGVzdGRpcikgc2tpcCA9 IDA7CisgICAgfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICBpZiAoIXNraXApIHsKKwlpZiAo IWNrc3RyY21wKG9sZCxuZXcsLTEsMSkpCisJICBza2lwID0gMTsKKyAgICB9CisgICAgaWYgKG9w ID09IDAgJiYgIXNraXAgJiYgKGNvbGxpc2lvbiAhPSBSRU5YX09WV1IpKSB7CisJaWYgKHpjaGtp KG5ldykgPiAoQ0tfT0ZGX1QpLTEpIHsgLyogTmV3IGZpbGUgYWxyZWFkeSBleGlzdHM/ICAqLwor CSAgICBzd2l0Y2ggKGNvbGxpc2lvbikgewkvKiBZZXMsIHRha2Ugc3BlY2lmaWVkIGFjdGlvbiAq LworCSAgICAgIGNhc2UgUkVOWF9TS0lQOgkJLyogU2tpcCB0aGlzIG9uZSBhbmQgcHJvY2VlZCAg Ki8KKwkJc2tpcCA9IDI7CisJCWJyZWFrOworCSAgICAgIGNhc2UgUkVOWF9GQUlMOgkJLyogT3Ig ZmFpbC4gKi8KKwkJc2tpcCA9IDM7CisJCWlmICghbGlzdGluZyAmJiAhbm9saXN0KQorCQkgIHBy aW50ZigiP0ZpbGUgYWxyZWFkeSBleGlzdHM6ICVzXG4iLG5ldyk7CisJICAgIH0KKwl9CisgICAg fQorICAgIGRlYnVnKEYxMTAsIlJFTkFNRU9ORSBuZXciLG5ldywwKTsKKyAgICBkZWJ1ZyhGMTAx LCJSRU5BTUVPTkUgZmxhZyIsIiIsZmxhZyk7CQorICAgIGRlYnVnKEYxMDEsIlJFTkFNRU9ORSBz a2lwIiwiIixza2lwKTsJCisgICAgZGVidWcoRjEwMCwiUkVOQU1FT05FIC0tLS0tLS0tLS0tLS0t LS0iLCIiLDApOworCisgICAgaWYgKHNraXAgPT0gMykgeworCWlmIChsaXN0aW5nKSBwcmludGYo IiVzID0+ICVzIChTS0lQUEVEOiAlcyBhbHJlYWR5IGV4aXN0cylcbiIsCisJCQkgICAgb2xkLG5l dyxuZXcpOworCXJjID0gMDsKKyAgICB9IGVsc2UgaWYgKHNraXApIHsJCQkvKiBTa2lwcGluZyB0 aGlzIG9uZSAqLworCWlmIChsaXN0aW5nKSBwcmludGYoIiVzID0+ICVzICglcylcbiIsCisJCQkg ICAgb2xkLG5ldywKKwkJCSAgICAoc2tpcCA9PSAyKSA/ICJDT0xMSVNJT046IFNLSVBQRUQiIDog IlNLSVBQRUQiKTsKKyAgICB9IGVsc2UgewkJCQkvKiBIYXZlIHRvIHJlbmFtZSB0aGlzIG9uZSAq LworCWlmIChvcCA9PSBSRU5fT1BfQ0hLKSB7CQkvKiBDaGVja2luZyBmb3IgY29sbGlzaW9ucyAq LworCSAgICByZXR1cm4oKHpjaGtpKG5ldykgPiAoQ0tfT0ZGX1QpLTEpID8gMCA6IDEgKTsKKwl9 IGVsc2UgaWYgKG9wID09IFJFTl9PUF9TSU0pIHsJLyogU2ltdWxhdGluZyAqLworCSAgICBpZiAo bGlzdGluZykgcHJpbnRmKCIlcyA9PiAlcyAoU0lNVUxBVEVEKVxuIixvbGQsbmV3KTsKKwl9IGVs c2UgewkJCS8qIFJlYWxseSByZW5hbWluZyAqLworCSAgICBpZiAobGlzdGluZykgcHJpbnRmKCIl cyA9PiAlcyAiLG9sZCxuZXcpOworCSAgICBpZiAoenJlbmFtZShvbGQsbmV3KSA8IDApIHsKKwkJ cmMgPSAwOworCQlpZiAobGlzdGluZykKKwkJICBwcmludGYoIihGQUlMRUQ6ICVzKVxuIixja19l cnJzdHIoKSk7CisJCWVsc2UgaWYgKCFub2xpc3QpCisJCSAgcHJpbnRmKCI/JXNcbiIsY2tfZXJy c3RyKCkpOworCSAgICB9IGVsc2UgeworCQlpZiAobGlzdGluZykgcHJpbnRmKCIoT0spXG4iKTsK KwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSByYyk7ICAvKiBTdWNjZWVk cyBhbHNvIGlmIG5vdGhpbmcgbmVlZGVkIHRvIGJlIHJlbmFtZWQgKi8KK30KKworaW50Citkb3Jl bmFtKCkgeworI2lmbmRlZiBOT0NTRVRTCisjaWZuZGVmIE5PVU5JQ09ERQorICAgIGV4dGVybiBp bnQgbmZpbGM7CisgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZmNzdGFiW107CisgICAgZXh0ZXJu IHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdOworI2VuZGlmCS8qIE5PVU5JQ09ERSAqLworI2VuZGlm CS8qIE5PQ1NFVFMgKi8KKyAgICBpbnQgY3NldDEgPSAwLCBjc2V0MiA9IDA7CisKKyAgICBpbnQg aSwgeCwgeiwgZm4sIGxpc3RpbmcgPSAwLCBoYXZlbmFtZSA9IDAsIHdpbGQgPSAwLCByYyA9IDEs IG5vYXJnID0gMDsKKyAgICBpbnQgbm9saXN0ID0gMCwgYWxsID0gMCwgY2FzaW5nID0gMCwgcmVw bGFjaW5nID0gMCwgZ2V0dmFsID0gMCwgc2ltID0gMDsKKyAgICBpbnQgY29udmVydGluZyA9IDAs IGNvbGxpc2lvbiA9IDA7CisKKyAgICBjaGFyIGM7CisgICAgc3RydWN0IEZEQiBzdywgZmk7CisK KyAgICBjb2xsaXNpb24gPSByZW5fY29sbDsJCS8qIEluaGVyaXQgU0VUIFJFTkFNRSBDT0xMSVNJ T04gKi8KKyAgICBsaXN0aW5nID0gcmVuX2xpc3Q7CQkJLyogSW5oZXJlaXQgU0VUIFJFTkFNRSBM SVNUICovCisKKyAgICBpZiAocmVuX3N1YlswXSkgbWFrZXN0cigmKHJlbl9zdWJbMF0pLE5VTEwp OworICAgIGlmIChyZW5fc3ViWzFdKSBtYWtlc3RyKCYocmVuX3N1YlsxXSksTlVMTCk7CisgICAg aWYgKHJlbl9zdWJbMl0pIG1ha2VzdHIoJihyZW5fc3ViWzJdKSxOVUxMKTsKKyAgICBsaW5lWzBd ID0gTlVMOworICAgIHRtcGJ1ZlswXSA9IE5VTDsKKworICAgIGNtZmRiaSgmc3csICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDFzdCBGREIgLSBzd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01L RVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJGaWxlbmFt ZSBvciBzd2l0Y2giLCAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIG5yZW5h bXN3LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICA0 LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0g Y21zd2kgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBQcm9j ZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgIHJlbmFtc3csICAgICAgICAgICAgICAgICAg ICAgLyogS2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAmZmkgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgKTsKKworICAgIGNt ZmRiaSgmZmksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDJuZCBGREIgLSBmaWxlIG9yIGRp cmVjdG9yeSBuYW1lICovCisgICAgICAgICAgIF9DTUlGSSwgICAgICAgICAgICAgICAgICAgICAg LyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBo bHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZh dWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg c3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMywgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBGbGFncyAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAg PSBQYXJzZSBmaWxlIG9yIGRpcmVjdG9yeSBuYW1lcyAqLworICAgICAgICAgICB4eHN0cmluZywK KyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgTlVMTAorICAgICAgICAgICApOworCisgICAg aWYgKGNtZmxncyA9PSAxKSB7CisJcHJpbnRmKCI/RmlsZSBvciBkaXJlY3RvcnkgbmFtZSByZXF1 aXJlZFxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgd2hpbGUgKCFoYXZlbmFtZSkgewor CW5vYXJnID0gMDsKKyAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAgICAvKiBQ YXJzZSBzb21ldGhpbmcgKi8KKwlpZiAoeCA9PSAtMykgewkJCS8qIFRoZXkgaGl0IEVudGVyIHBy ZW1hdHVyZWx5ICovCisJICAgIHByaW50ZigiP0NvbW1hbmQgaW5jb21wbGV0ZVxuIik7CisJICAg IHJldHVybigtOSk7CisJfSBlbHNlIGlmICh4IDwgMCkgewkJLyogT3RoZXIgZXJyb3IgKi8KKwkg ICAgaWYgKHggPT0gLTEpCisJICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgaWYgKGlzd2ls ZChhdG1idWYpICYmIG56eHBhbmQoYXRtYnVmLG56eG9wdHMpID09IDApCisgICAgICAgICAgICAg IHByaW50ZigiP05vIGZpbGVzIG1hdGNoOiAlc1xuIixicnN0cmlwKGF0bWJ1ZikpOworICAgICAg ICAgICAgZWxzZSBpZiAoemNoa2koYXRtYnVmKSA9PSAtMSkKKwkgICAgICBwcmludGYoIj9GaWxl IG5vdCBmb3VuZDogJXNcbiIsYnJzdHJpcChhdG1idWYpKTsKKwkgICAgZWxzZQorCSAgICAgIHBy aW50ZigiP0Vycm9yIHdpdGggc3dpdGNoIG9yIGZpbGVuYW1lOiAlc1xuIixicnN0cmlwKGF0bWJ1 ZikpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlmbiA9IGNtcmVzdWx0Lm5yZXN1bHQ7CQkvKiBG b3IgYnJldml0eSAqLworICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7CS8qIEhhbmRs ZSBlYWNoIGtpbmQgb2YgZmllbGQgKi8KKyAgICAgICAgICBjYXNlIF9DTUtFWToJCQkvKiBLZXl3 b3JkIChzd2l0Y2gpICovCisgICAgICAgICAgICBjID0gY21nYnJrKCk7CisgICAgICAgICAgICBp ZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBD TV9BUkcpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3Qg dGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FS RykpCisJICAgICAgbm9hcmcgPSAxOwkJLyogUmVtZW1iZXIgYXJnIGlzIG1pc3NpbmcgKi8KKyAg ICAgICAgICAgIHN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkvKiBIYW5kbGUgdGhlIHN3aXRj aCAqLworICAgICAgICAgICAgICBjYXNlIERFTF9MSVM6CQkvKiAvTElTVCAqLworICAgICAgICAg ICAgICBjYXNlIERFTF9WUkI6CQkvKiAvVkVSQk9TRSAqLworICAgICAgICAgICAgICAgIGxpc3Rp bmcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERFTF9O T0w6CQkvKiAvTk9MSVNUICovCisgICAgICAgICAgICAgIGNhc2UgREVMX1FVSToJCS8qIC9RVUlF VCAqLworCQlub2xpc3QgPSAxOworICAgICAgICAgICAgICAgIGxpc3RpbmcgPSAwOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIERFTF9TSU06CQkvKiAvU0lNVUxB VEUgKi8KKyAgICAgICAgICAgICAgICBzaW0gPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwor CSAgICAgIGNhc2UgUkVOX1VQUDoJCS8qIC9VUFBFUjogKi8KKwkgICAgICBjYXNlIFJFTl9MT1c6 CQkvKiAvTE9XRVIgKi8KKwkJYWxsID0gMTsKKwkJaWYgKCFub2FyZykgeworCQkgICAgaWYgKCh4 ID0gY21rZXkoKGZuID09IFJFTl9VUFApID8gcl91cHBlciA6IHJfbG93ZXIsCisJCQkJICAgMiwg IiIsImFsbCIseHhzdHJpbmcpKSA8IDApIHsKKwkJCWlmICh4ID09IC0zKQorCQkJICB4ID0gMTsK KwkJCWVsc2UKKwkJCSAgcmV0dXJuKHgpOworCQkgICAgfQorCQkgICAgYWxsID0geDsKKwkJfQor CQkvKiAwID0gZG9uJ3QgY29udmVydDsgMSA9IGNvbnZlcnQgdG8gbG93ZXI7IDIgPSB0byB1cHBl ciAqLworCQljYXNpbmcgPSAoZm4gPT0gUkVOX1VQUCkgPyAyIDogMTsKKwkJY29udmVydGluZyA9 IDA7CisJCWJyZWFrOworCSAgICAgIGNhc2UgUkVOX09WVzoJCS8qIC9DT0xMSVNJT04gKi8KKwkJ aWYgKCFub2FyZykgeworCQkgICAgaWYgKCh4ID0gY21rZXkocl9jb2xsaXNpb24sCisJCQkJICAg bnJfY29sbGlzaW9uLCIiLCJvdmVyd3JpdGUiLHh4c3RyaW5nKSk8MCkgeworCQkJaWYgKHggPT0g LTMpCisJCQkgIHggPSBSRU5YX09WV1I7CisJCQllbHNlCisJCQkgIHJldHVybih4KTsKKwkJICAg IH0KKwkJICAgIGNvbGxpc2lvbiA9IHg7CisJCX0KKwkJYnJlYWs7CisJICAgICAgY2FzZSBSRU5f UlBMOgkJLyogL1JFUExBQ0U6ICovCisJCWlmIChub2FyZykgeworCQkgICAgcHJpbnRmKCI/VGhp cyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCQkgICAgcmV0dXJuKC05KTsKKwkJ fQorCQlpZiAoKHggPSBjbWZsZCgiU3RyaW5nIHRvIHJlbW92ZSwgb3Ige3tTdHJpbmcxfXtTdHJp bmcyfX0iLAorCQkJICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJCSAgICBpZiAoeCA9 PSAtMykgeworCQkJcHJpbnRmKCI/VGFyZ2V0IHN0cmluZyByZXF1aXJlZFxuIik7CisJCQl4ID0g LTk7CisJCSAgICB9CisJCSAgICByZXR1cm4oeCk7CisJCX0KKwkJaWYgKHNbMF0pIHsKKwkJICAg IGlmIChzWzBdID09ICd7JyAmJiBzWzFdID09ICd7JykgLyogR2V0IHRoZSBsaXN0ICovCisJCSAg ICAgIG1ha2VsaXN0KHMscmVuX3N1YiwzKTsKKwkJICAgIGVsc2UKKwkJICAgICAgbWFrZXN0cigm KHJlbl9zdWJbMF0pLHMpOworCQl9CisJCWNvbnZlcnRpbmcgPSAwOworCQlicmVhazsKKworCSAg ICAgIGNhc2UgUkVOX1NQQToJCS8qIC9GSVhTUEFDRVM6ICovCisJCWlmICghbm9hcmcpCisJCSAg aWYgKCh4ID0gY21mbGQoIkNoYXJhY3RlciBvciBzdHJpbmcgdG8gcmVwbGFjZSBzcGFjZXMgd2l0 aCIsCisJCQkJICJfIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICAgIGlmICh4ID09IC0zKQorCQkg ICAgICBzID0gIl8iOworCQkgICAgZWxzZQorCQkgICAgICByZXR1cm4oeCk7CisJCW1ha2VzdHIo JihyZW5fc3ViWzBdKSwiICIpOworCQltYWtlc3RyKCYocmVuX3N1YlsxXSksbm9hcmcgPyAiXyIg OiBicnN0cmlwKHMpKTsKKwkJbWFrZXN0cigmKHJlbl9zdWJbM10pLE5VTEwpOworCQljb252ZXJ0 aW5nID0gMDsKKwkJYnJlYWs7CisKKyNpZm5kZWYgTk9DU0VUUworI2lmbmRlZiBOT1VOSUNPREUK KwkgICAgICBjYXNlIFJFTl9YTEE6CQkvKiAvQ09OVkVSVDpjc2V0MTpjc2V0MiAqLworCQlpZiAo IXhmY3N0YWIpIHsJCS8qIE1ha2UgYSBjb3B5IG9mIHRoZSBmaWxlIGNoYXJzZXQgKi8KKwkJICAg IGludCBpLCB4OwkJLyogdGFibGUgd2l0aCBDTV9BUkcgc2V0IGZvciBlYWNoICovCisJCSAgICB4 ID0gKG5maWxjICsgMSkgKiBzaXplb2Yoc3RydWN0IGtleXRhYik7CisJCSAgICB4ZmNzdGFiID0g KHN0cnVjdCBrZXl0YWIgKiltYWxsb2MoeCk7CisJCSAgICBpZiAoIXhmY3N0YWIpIHsKKwkJCXBy aW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCQkJcmV0dXJuKC05KTsKKwkJ ICAgIH0KKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuZmlsYzsgaSsrKSB7CisJCQl4ZmNzdGFiW2ld Lmt3ZCA9IGZjc3RhYltpXS5rd2Q7CisJCQl4ZmNzdGFiW2ldLmt3dmFsID0gZmNzdGFiW2ldLmt3 dmFsOworCQkJeGZjc3RhYltpXS5mbGdzID0gZmNzdGFiW2ldLmZsZ3MgfCBDTV9BUkc7CisJCSAg ICB9CisJCX0KKwkJaWYgKCh4ID0gY21zd2koeGZjc3RhYixuZmlsYywKKwkJCSAgICAgICAiQ2hh cmFjdGVyLXNldCBvZiBvbGQgbmFtZSIsIiIseHhzdHJpbmcpKSA8IDApIHsKKwkJICAgIGlmICh4 ID09IC0zKSB7CisJCQlwcmludGYoIj9QYWlyIG9mIGNoYXJhY3Rlci1zZXQgbmFtZXMgcmVxdWly ZWRcbiIpOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0gZWxzZQorCQkgICAgICByZXR1cm4oeCk7 CisJCX0KKwkJY3NldDEgPSB4OworCQljID0gY21nYnJrKCk7CisJCWlmICghZ2V0dmFsKSB7CisJ CSAgICBwcmludGYoIj9TZWNvbmRjaGFyYWN0ZXItc2V0IG5hbWUgcmVxdWlyZWRcbiIpOworCQkg ICAgcmV0dXJuKC05KTsKKwkJfQorCQlpZiAoKHggPSBjbWtleShmY3N0YWIsbmZpbGMsCisJCQkg ICAgICAgIkNoYXJhY3Rlci1zZXQgb2YgbmV3IG5hbWUiLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisJ CSAgICBpZiAoeCA9PSAtMykgeworCQkJcHJpbnRmKCI/U2Vjb25kIGNoYXJhY3Rlci1zZXQgbmFt ZSByZXF1aXJlZFxuIik7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfSBlbHNlCisJCSAgICAgIHJl dHVybih4KTsKKwkJfQorCQljc2V0MiA9IHg7CisJCWlmIChjYXNpbmcpCisJCSAgY2FzaW5nID0g MDsKKwkJaWYgKHJlbl9zdWJbMF0pCisJCSAgbWFrZXN0cigmKHJlbl9zdWJbMF0pLE5VTEwpOwor CQlpZiAocmVuX3N1YlsxXSkKKwkJICBtYWtlc3RyKCYocmVuX3N1YlsxXSksTlVMTCk7CisJCWlm IChyZW5fc3ViWzJdKQorCQkgIG1ha2VzdHIoJihyZW5fc3ViWzJdKSxOVUxMKTsKKwkJY29udmVy dGluZyA9IDE7CisJCWJyZWFrOworI2VuZGlmCS8qIE5PVU5JQ09ERSAqLworI2VuZGlmCS8qIE5P Q1NFVFMgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh c2UgX0NNSUZJOgkJCS8qIEZpbGUgb3IgZGlyZWN0b3J5IG5hbWUgKi8KKyAgICAgICAgICAgIHMg PSBjbXJlc3VsdC5zcmVzdWx0OworICAgICAgICAgICAgaGF2ZW5hbWUgPSAxOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKwkgICAgcHJpbnRmKCI/RmlsZSBvciBkaXJl Y3RvcnkgbmFtZSByZXF1aXJlZFxuIik7CisJICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAg ICB9CisgICAgaWYgKGhhdmVuYW1lKSB7CisJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwkv KiBNYWtlIGEgc2FmZSBjb3B5IG9mIHNvdXJjZSBuYW1lICovCisgICAgfSBlbHNlIHsKKwlwcmlu dGYoIj9JbnRlcm5hbCBlcnJvclxuIik7CisJcmV0dXJuKC05KTsJCQkvKiBTaG91bGRuJ3QgaGFw cGVuICovCisgICAgfQorICAgIHdpbGQgPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgICAgIC8q IFNvdXJjZSBzcGVjaWZpY2F0aW9uIHdpbGQ/ICovCisgICAgaWYgKCF3aWxkKQorICAgICAgd2ls ZCA9IGlzd2lsZChsaW5lKTsKKworICAgIGRlYnVnKEYxMTEsIlJFTkFNRSBXSUxEIixsaW5lLHdp bGQpOworCisgICAgcCA9IHRtcGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGxhY2Ug Zm9yIG5ldyBuYW1lICovCisgICAgcFswXSA9IE5VTDsKKyAgICByZXBsYWNpbmcgPSByZW5fc3Vi WzBdID8gMSA6IDA7CisKKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKCEoY2FzaW5nIHx8IHJlcGxh Y2luZyB8fCBjb252ZXJ0aW5nKSkgeworCWlmICgoeCA9IGNtb2ZpKHdpbGQgPyAiVGFyZ2V0IGRp cmVjdG9yeSIgOiAiTmV3IG5hbWUiLAorCQkgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApIHsg LyogR2V0IG5ldyBuYW1lICovCisJICAgIGlmICh4ID09IC0zKSB7CisJCXByaW50ZigiPyVzIHJl cXVpcmVkXG4iLAorCQkgICAgICAgd2lsZCA/ICJUYXJnZXQgZGlyZWN0b3J5IiA6ICJOZXcgbmFt ZSIpOworCQlyZXR1cm4oLTkpOworCSAgICB9IGVsc2UgcmV0dXJuKHgpOworCX0KKwlja3N0cm5j cHkocCxzLFRNUEJVRlNJWik7CS8qIE1ha2UgYSBzYWZlIGNvcHkgb2YgdGhlIG5ldyBuYW1lICov CisgICAgfQorI2Vsc2UKKyAgICBpZiAoKHggPSBjbW9maSh3aWxkID8gIlRhcmdldCBkaXJlY3Rv cnkiIDogIk5ldyBuYW1lIiwKKwkJICAgIiIsJnMseHhzdHJpbmcpKSA8IDApIHsgLyogR2V0IG5l dyBuYW1lICovCisJaWYgKHggPT0gLTMpIHsKKwkgICAgaWYgKGNhc2luZyB8fCByZXBsYWNpbmcg fHwgY29udmVydGluZykgeworCQlzID0gIiI7CisJICAgIH0gZWxzZSB7CisJCXByaW50ZigiPyVz IHJlcXVpcmVkXG4iLAorCQkgICAgICAgd2lsZCA/ICJUYXJnZXQgZGlyZWN0b3J5IiA6ICJOZXcg bmFtZSIpOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJfSBlbHNlIHJldHVybih4KTsKKyAgICB9 CisgICAgY2tzdHJuY3B5KHAscyxUTVBCVUZTSVopOwkJLyogTWFrZSBhIHNhZmUgY29weSBvZiB0 aGUgbmV3IG5hbWUgKi8KKyNlbmRpZgkvKiBDT01NRU5UICovCisKKyAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsJLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLworCisjaWZkZWYg Q09NTUVOVAorI2lmbmRlZiBOT1VOSUNPREUKKyAgICBpZiAoY29udmVydGluZykgeworCXByaW50 ZigiIEZyb206ICVzXG4iLGZjc2luZm9bY3NldDFdLmtleXdvcmQpOworCXByaW50ZigiIFRvOiAg ICVzXG4iLGZjc2luZm9bY3NldDJdLmtleXdvcmQpOworICAgIH0KKyNlbmRpZgkvKiBOT1VOSUNP REUgKi8KKyAgICBpZiAoY2FzaW5nKSB7CisJcHJpbnRmKCJDQVNJTkc6ICVzXG4iLCAoY2FzaW5n ID09IDEpID8gIkxPV0VSIiA6ICJVUFBFUiIpOworICAgIH0KKyAgICBpZiAocmVwbGFjaW5nKSB7 CisJcHJpbnRmKCJSRVBMQUNJTkc6ICclcycgd2l0aCAnJXMnXG4iLAorCSAgICAgICByZW5fc3Vi WzBdLAorCSAgICAgICByZW5fc3ViWzFdID8gcmVuX3N1YlsxXSA6ICIiKTsKKyAgICB9CisjZW5k aWYJLyogQ09NTUVOVCAqLworCisgICAgcyA9IGxpbmU7CisgICAgaWYgKCF3aWxkKQkJCQkvKiBK dXN0IG9uZSAqLworICAgICAgcmV0dXJuKHN1Y2Nlc3MgPQorCSAgICAgcmVuYW1lb25lKHMscCwK KwkJICAgICAgIHJlcGxhY2luZyxjYXNpbmcsYWxsLGNvbnZlcnRpbmcsY3NldDEsY3NldDIsCisJ CSAgICAgICBsaXN0aW5nLG5vbGlzdCxzaW0sVE1QQlVGU0laLGNvbGxpc2lvbikpOworCisgICAg aWYgKCFjYXNpbmcgJiYgIXJlcGxhY2luZyAmJiAhY29udmVydGluZykgewkvKiBNdWx0aXBsZSBm aWxlcyAqLworCWlmICghaXNkaXIocCkpIHsKKwkgICAgcHJpbnRmKAkJCS8qIGlmIHRhcmdldCBp cyBub3QgYSBkaXJlY3RvcnkgKi8KKyI/TXVsdGlwbGUgc291cmNlIGZpbGVzIG5vdCBhbGxvd2Vk IGlmIHRhcmdldCBpcyBub3QgYSBkaXJlY3RvcnkuXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9 CisgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTaG93IGZ1bGwgcGF0aCBvZiB0YXJnZXQgKi8KKyAgICAgICAgY2hhciBidWZb Q0tNQVhQQVRIXTsgICAgICAgICAgICAvKiAodG9vIG11Y2gpICovCisgICAgICAgIGlmICh6Zm5x ZnAocCxDS01BWFBBVEgsYnVmKSkKKyAgICAgICAgICBja3N0cm5jcHkodG1wYnVmLGJ1ZixUTVBC VUZTSVopOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBWTVMKKyAgICBj b25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZXQgQ3RybC1DIHdvcmsuICov CisjZW5kaWYgLyogVk1TICovCisgICAgZGVidWcoRjExMCwiZG9yZW5hbWUgbGluZSIsbGluZSww KTsKKworI2lmZGVmIFpYUkVXSU5ECisgICAgeiA9IHp4cmV3aW5kKCk7ICAgICAgICAgICAgICAg ICAgICAgLyogUmV3aW5kIGZpbGUgbGlzdCAqLworI2Vsc2UKKyAgICB6ID0gbnp4cGFuZChzLDAp OyAgICAgICAgICAgICAgICAgICAvKiBFeHBhbmQgZmlsZSBsaXN0ICovCisjZW5kaWYgLyogWlhS RVdJTkQgKi8KKyAgICBkZWJ1ZyhGMTExLCJkb3JlbmFtZSBwIixwLHopOworCisjaWZkZWYgVU5J WAorICAgIGlmICh3aWxkICYmIHogPiAxKQorICAgICAgc2hfc29ydChtdGNocyxOVUxMLHosMCww LGZpbGVjYXNlKTsgLyogQWxwaGFiZXRpemUgdGhlIGZpbGVuYW1lIGxpc3QgKi8KKyNlbmRpZiAv KiBVTklYICovCisKKyAgICAvKiBGb3IgL0NPTExJU0lPTjpGQUlMIG1ha2UgYSBzaWxlbnQgcGFz cyB0byBzZWUgaWYgdGhlcmUgd291bGQgYmUgYW55ICovCisKKyAgICBpZiAoY29sbGlzaW9uID09 IFJFTlhfRkFJTCkgeworCWludCBuID0gMDsKKwljaGFyIGxpbmVbQ0tNQVhQQVRIKzJdOworCXdo aWxlICh6LS0gPiAwKSB7CisJICAgIGlmICghKHogPT0gMCAmJiAhd2lsZCkpCisJICAgICAgem5l eHQobGluZSk7CisJICAgIGlmICghbGluZVswXSkKKwkgICAgICBicmVhazsKKwkgICAgaWYgKCFy ZW5hbWVvbmUoKGNoYXIgKilsaW5lLHAsCisJCQkgICByZXBsYWNpbmcsY2FzaW5nLGFsbCxjb252 ZXJ0aW5nLGNzZXQxLGNzZXQyLAorCQkJICAgMCwxLFJFTl9PUF9DSEssVE1QQlVGU0laLFJFTlhf RkFJTCkpCisJICAgICAgbisrOworCX0KKwlpZiAobiA+IDApIHsKKwkgICAgcHJpbnRmKCI/RmFp bGVkOiAlZCBmaWxlJXMgd291bGQgYmUgb3ZlcndyaXR0ZW5cbiIsCisJCSAgIG4sIChuICE9IDEp ID8gInMiIDogIiIpOworI2lmZGVmIFZNUworCSAgICBjb25jYigoY2hhcillc2NhcGUpOworI2Vu ZGlmIC8qIFZNUyAqLworCSAgICByZXR1cm4oc3VjY2VzcyA9IDApOworCX0KKwkvKiBHZXQgdGhl IGZpbGUgbGlzdCBiYWNrLiAqLworI2lmZGVmIFpYUkVXSU5ECisJeiA9IHp4cmV3aW5kKCk7Cisj ZWxzZQorCXogPSBuenhwYW5kKHMsMCk7CisjZW5kaWYgLyogWlhSRVdJTkQgKi8KKyAgICB9Cisg ICAgd2hpbGUgKHotLSA+IDAgJiYgcmMgPiAwKSB7CisJY2hhciBsaW5lW0NLTUFYUEFUSCsyXTsK KyAgICAgICAgaWYgKCEoeiA9PSAwICYmICF3aWxkKSkKKyAgICAgICAgICB6bmV4dChsaW5lKTsK KyAgICAgICAgaWYgKCFsaW5lWzBdKQorICAgICAgICAgIGJyZWFrOworCXJjID0gcmVuYW1lb25l KChjaGFyICopbGluZSxwLCAKKwkJICAgICAgIHJlcGxhY2luZyxjYXNpbmcsYWxsLGNvbnZlcnRp bmcsY3NldDEsY3NldDIsCisJCSAgICAgICBsaXN0aW5nLG5vbGlzdCxzaW0sVE1QQlVGU0laLGNv bGxpc2lvbik7CisgICAgfQorI2lmZGVmIFZNUworICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7Cisj ZW5kaWYgLyogVk1TICovCisgICAgcmV0dXJuKHN1Y2Nlc3MgPSByYyk7Cit9CisjZW5kaWYgLyog WlJFTkFNRSAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9SRU5BTUUgKi8K KworI2lmbmRlZiBOT1NQTAorCisvKiBEbyB0aGUgUkVUVVJOIGNvbW1hbmQgKi8KKworaW50Citk b3JldHVybihzKSBjaGFyICpzOyB7CisgICAgaW50IHg7CisgICAgZXh0ZXJuIGludCB0cmFfYXNn OworICAgIGNoYXIgKiBsaW5lLCAqIGxwOworCisgICAgaWYgKGNtZGx2bCA8IDEpIHsKKyAgICAg ICAgcHJpbnRmKCJcbj9DYW4ndCByZXR1cm4gZnJvbSBsZXZlbCAlZFxuIixtYWNsdmwpOworICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyAgICBsaW5lID0gbWFsbG9jKExJTkJV RlNJWik7CisgICAgaWYgKGxpbmUgPT0gTlVMTCkKKyAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisgICAgbHAgPSBsaW5lOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhwYW5kIHJldHVy biB2YWx1ZSBub3cgKi8KKyAgICB4ID0gTElOQlVGU0laLTE7CisgICAgaWYgKCFzKSBzID0gIiI7 CisgICAgZGVidWcoRjExMCwiUkVUVVJOIHMiLHMsMCk7CisgICAgaWYgKHp6c3RyaW5nKHMsJmxw LCZ4KSA+IC0xKSB7CisgICAgICAgIHMgPSBsaW5lOworICAgICAgICBkZWJ1ZyhGMTEwLCJSRVRV Uk4genpzdHJpbmciLHMsMCk7CisgICAgfQorCisgICAgLyogUG9wIGZyb20gYWxsIEZPUi9XSElM RS9TV0lUQ0gvWElGcyAqLworICAgIHdoaWxlICgobWFjbHZsID4gMCkgJiYKKyAgICAgICAgICAg KG1fYXJnW21hY2x2bC0xXVswXSkgJiYKKyAgICAgICAgICAgKGNtZHN0a1tjbWRsdmxdLnNyYyA9 PSBDTURfTUQpICYmCisgICAgICAgICAgICghc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl94 aWYiLDQpIHx8CisgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9mb3Ii LDQpIHx8CisgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl9zd2kiLDQp IHx8CisgICAgICAgICAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl93aGkiLDQpKSkg eworICAgICAgICBkZWJ1ZyhGMTExLCJSRVRVUk4gSUYvRk9SL1dISS9TV0kgcG9wIixtX2FyZ1tt YWNsdmwtMV1bMF0sbWFjbHZsKTsKKyAgICAgICAgZG9ndGEoWFhQVEEpOyAgICAgICAgICAgICAg ICAgICAvKiBQdXQgYXJncyBiYWNrICovCisgICAgICAgIHBvcGNsdmwoKTsgICAgICAgICAgICAg ICAgICAgICAgLyogUG9wIHVwIHR3byBsZXZlbHMgKi8KKyAgICAgICAgcG9wY2x2bCgpOworICAg IH0KKyAgICBpZiAodHJhX2FzZykgeyAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0cmFjaW5n IHNob3cgcmV0dXJuIHZhbHVlICovCisgICAgICAgIGlmICgqcykKKyAgICAgICAgICBwcmludGYo Ijw8PCAlczogXCIlc1wiXG4iLCBtX2FyZ1ttYWNsdmxdWzBdLCBzKTsKKyAgICAgICAgZWxzZQor ICAgICAgICAgIHByaW50ZigiPDw8ICVzOiAobnVsbClcbiIsIG1fYXJnW21hY2x2bF1bMF0pOwor ICAgIH0KKyAgICBwb3BjbHZsKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb3AgZnJv bSBlbmNsb3NpbmcgVEFLRSBvciBtYWNybyAqLworICAgIGRlYnVnKEYxMTEsIlJFVFVSTiB0b2xl dmVsIixzLG1hY2x2bCk7CisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgaWYgKCEqcykgcyA9IE5V TEw7CisgICAgbWFrZXN0cigmKG1ydmFsW21hY2x2bCsxXSkscyk7ICAgICAgLyogU2V0IHRoZSBS RVRVUk4gdmFsdWUgKi8KKyAgICBmcmVlKGxpbmUpOworICAgIHJldHVybihzdWNjZXNzID0gMSk7 ICAgICAgICAgICAgICAgIC8qIE1hY3JvIHN1Y2NlZWRzIGlmIHdlIFJFVFVSTiAqLworfQorI2Vu ZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TUEwKKy8qIERvIHRoZSBPUEVOIGNvbW1hbmQg Ki8KKworaW50Citkb29wZW4oKSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1BF TiB7IGFwcGVuZCwgcmVhZCwgd3JpdGUgfSAqLworICAgIGludCB4LCB5LCB6ID0gMDsgY2hhciAq czsKKyAgICBzdGF0aWMgc3RydWN0IGZpbGluZm8gZmNiOyAgICAgICAgICAvKiAobXVzdCBiZSBz dGF0aWMpICovCisgICAgaWYgKCh4ID0gY21rZXkob3BudGFiLG5vcG4sIm1vZGUiLCIiLHh4c3Ry aW5nKSkgPCAwKSB7CisgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICBwcmludGYo Ij9Nb2RlIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0g ZWxzZSByZXR1cm4oeCk7CisgICAgfQorICAgIHN3aXRjaCAoeCkgeworICAgICAgY2FzZSBPUE5f RklfUjogICAgICAgICAgICAgICAgICAgIC8qIE9sZCBmaWxlIChSRUFEKSAqLworICAgICAgICBp ZiAoY2hrZm4oWlJGSUxFKSA+IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiP1JlYWQgZmlsZSBh bHJlYWR5IG9wZW5cbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAg ICAgICBpZiAoKHogPSBjbWlmaSgiRmlsZSB0byByZWFkIiwiIiwmcywmeSx4eHN0cmluZykpIDwg MCkgeworICAgICAgICAgICAgaWYgKHogPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYo Ij9JbnB1dCBmaWxlbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeik7CisgICAgICAgIH0KKyAgICAgICAgaWYg KHkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHdpbGRjYXJkcyBhbGxv d2VkICovCisgICAgICAgICAgICBwcmludGYoIlxuP1BsZWFzZSBzcGVjaWZ5IGEgc2luZ2xlIGZp bGVcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAgIGlmICgoaW50KXN0cmxlbihsaW5lKSA8 IDEpIHJldHVybigtMik7CisgICAgICAgIGlmICgoeiA9IGNtbnVtKCJidWZmZXIgc2l6ZSIsIjQw OTYiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAg aWYgKHkgPCAxKSB7CisgICAgICAgICAgICBwcmludGYoIj9Qb3NpdGl2ZSBudW1iZXIgcmVxdWly ZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo KHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAgcmVhZGJsb2NrID0geTsKKyAg ICAgICAgaWYgKHJlYWRidWYpCisgICAgICAgICAgZnJlZSgoY2hhciAqKXJlYWRidWYpOworICAg ICAgICBpZiAoIShyZWFkYnVmID0gKENIQVIgKikgbWFsbG9jKHJlYWRibG9jaysxKSkpIHsKKyAg ICAgICAgICAgIHByaW50ZigiP0Nhbid0IGFsbG9jYXRlIHJlYWQgYnVmZmVyXG4iKTsKKyAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB6 b3BlbmkoWlJGSUxFLGxpbmUpKTsKKworI2lmbmRlZiBNQUMKKyNpZm5kZWYgTk9QVVNICisgICAg ICBjYXNlIE9QTl9QSV9SOiAgICAgICAgICAgICAgICAgICAgLyogUGlwZS9Qcm9jZXNzICghUkVB RCkgKi8KKyAgICAgICAgaWYgKG5vcHVzaCkgeworICAgICAgICAgICAgcHJpbnRmKCI/UmVhZCBm cm9tIHBpcGUgZGlzYWJsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3M9MCk7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGNoa2ZuKFpSRklMRSkgPiAwKSB7CisgICAgICAgICAgICBw cmludGYoIj9SZWFkIGZpbGUgYWxyZWFkeSBvcGVuXG4iKTsKKyAgICAgICAgICAgIHJldHVybigt Mik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY210eHQoIlN5c3RlbSBjb21tYW5kIHRv IHJlYWQgZnJvbSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09 IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q29tbWFuZCBuYW1lIHJlcXVpcmVkXG4i KTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfSBlbHNlIHJldHVy bih5KTsKKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHkobGluZSxicnN0cmlwKHMpLExJTkJV RlNJWik7CisgICAgICAgIGlmICghbGluZVswXSkgcmV0dXJuKC0yKTsKKyAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmICghcmVhZGJ1ZikgeworICAg ICAgICAgICAgaWYgKCEocmVhZGJ1ZiA9IChDSEFSICopIG1hbGxvYyhyZWFkYmxvY2srMSkpKSB7 CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgYWxsb2NhdGUgcmVhZCBidWZmZXJcbiIp OworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB6eGNtZChaUkZJTEUsbGluZSkpOworCisgICAgICBj YXNlIE9QTl9QSV9XOiAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgdG8gcGlwZSAqLworICAg ICAgICBpZiAobm9wdXNoKSB7CisgICAgICAgICAgICBwcmludGYoIj9Xcml0ZSB0byBwaXBlIGRp c2FibGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzPTApOworICAgICAgICB9Cisg ICAgICAgIGlmIChjaGtmbihaV0ZJTEUpID4gMCkgeworICAgICAgICAgICAgcHJpbnRmKCI/V3Jp dGUgZmlsZSBhbHJlYWR5IG9wZW5cbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAg ICAgfQorICAgICAgICBpZiAoKHkgPSBjbXR4dCgiU3lzdGVtIGNvbW1hbmQgdG8gd3JpdGUgdG8i LCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAtMykgeworICAg ICAgICAgICAgICAgIHByaW50ZigiP0NvbW1hbmQgbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeSk7CisgICAg ICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUsYnJzdHJpcChzKSxMSU5CVUZTSVopOworICAg ICAgICBpZiAoIWxpbmVbMF0pIHJldHVybigtMik7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOworICAgICAgICBzdWNjZXNzID0genhjbWQoWldGSUxFLGxpbmUpOwor ICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbXNnZmxnKQorICAgICAgICAgIHByaW50ZigiQ2FuJ3Qg b3BlbiBwcm9jZXNzIGZvciB3cml0aW5nOiAlc1xuIixsaW5lKTsKKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MpOworI2VuZGlmIC8qIE5PUFVTSCAqLworI2VuZGlmIC8qIE1BQyAqLworCisgICAgICBj YXNlIE9QTl9GSV9XOiAgICAgICAgICAgICAgICAgICAgLyogTmV3IGZpbGUgKFdSSVRFKSAqLwor ICAgICAgY2FzZSBPUE5fRklfQTogICAgICAgICAgICAgICAgICAgIC8qIChBUFBFTkQpICovCisg ICAgICAgIGlmICgoeiA9IGNtb2ZpKCJOYW1lIG9mIGxvY2FsIGZpbGUgdG8gY3JlYXRlIiwiIiwm cyx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgaWYgKHogPT0gLTMpIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeik7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKHogPT0gMikgeworICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksICVzIGlzIGEg ZGlyZWN0b3J5IG5hbWVcbiIscyk7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9 CisgICAgICAgIGlmIChjaGtmbihaV0ZJTEUpID4gMCkgeworICAgICAgICAgICAgcHJpbnRmKCI/ V3JpdGUvQXBwZW5kIGZpbGUgYWxyZWFkeSBvcGVuXG4iKTsKKyAgICAgICAgICAgIHJldHVybigt Mik7CisgICAgICAgIH0KKyAgICAgICAgZmNiLmJzID0gZmNiLmNzID0gZmNiLnJsID0gZmNiLmZt dCA9IGZjYi5vcmcgPSBmY2IuY2MgPSBmY2IudHlwID0gMDsKKyAgICAgICAgZmNiLmxibG9wdHMg PSAwOworICAgICAgICBmY2IuZHNwID0gKHggPT0gT1BOX0ZJX1cpID8gWFlGWl9OIDogWFlGWl9B OyAvKiBDcmVhdGUgb3IgQXBwZW5kICovCisgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVG U0laKTsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKGxpbmUpIDwgMSkgcmV0dXJuKC0yKTsKKyAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHJldHVybihz dWNjZXNzID0gem9wZW5vKFpXRklMRSxsaW5lLE5VTEwsJmZjYikpOworCisjaWZuZGVmIE5PTE9D QUwKKyAgICAgIGNhc2UgT1BOX1NFUjogICAgICAgICAgICAgICAgICAgICAvKiBPUEVOIFBPUlQg b3IgTElORSAqLworICAgICAgY2FzZSBPUE5fTkVUOiB7ICAgICAgICAgICAgICAgICAgIC8qIE9Q RU4gSE9TVCAqLworICAgICAgICAgIGV4dGVybiBpbnQgZGlkc2V0bGluLCB0dG5wcm90bzsKKyAg ICAgICAgICBpZiAoeCA9PSBPUE5fTkVUKSB7CisgICAgICAgICAgICAgIHogPSB0dG5wcm90bzsK KyAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9OT05FOworICAgICAgICAgIH0KKyAgICAgICAg ICBpZiAoKHkgPSBzZXRsaW4oKHggPT0gT1BOX1NFUikgPyBYWUxJTkUgOiBYWUhPU1QsIDEsIDAp KSA8IDApIHsKKyAgICAgICAgICAgICAgaWYgKHggPT0gT1BOX05FVCkKKyAgICAgICAgICAgICAg ICB0dG5wcm90byA9IHo7CisgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOworICAgICAgICAgIH0K KyAgICAgICAgICBkaWRzZXRsaW4rKzsKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICB9Cisj ZW5kaWYgLyogTk9MT0NBTCAqLworCisgICAgICBkZWZhdWx0OgorICAgICAgICBwcmludGYoIj9O b3QgaW1wbGVtZW50ZWQiKTsKKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9Cit9CisjZW5kaWYg LyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1hGRVIKKy8qICBEIE8gWCBHIEUgVCAgLS0gIEdFVCBj b21tYW5kIHBhcnNlciB3aXRoIHN3aXRjaGVzICAqLworCisjaWZkZWYgQ0tfTEFCRUxFRAoraW50 IGdfbGZfb3B0cyA9IC0xOworZXh0ZXJuIGludCBsZl9vcHRzOworI2VuZGlmIC8qIENLX0xBQkVM RUQgKi8KKworaW50Citkb3hnZXQoY3gpIGludCBjeDsgeworICAgIGV4dGVybiBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEV4dGVybmFsIHZhcmlhYmxlcyB3ZSBuZWVkICovCisjaWZk ZWYgUkVDVVJTSVZFCisgICAgICByZWN1cnNpdmUsCisjZW5kaWYgLyogUkVDVVJTSVZFICovCisg ICAgICB4ZmVybW9kZSwgZmRpc3BsYSwgcHJvdG9jb2wsIHVzZXBpcGVzLAorICAgICAgZ19iaW5h cnksIGdfeGZlcm1vZGUsIGdfZGlzcGxhLCBnX3JwYXRoLCBnX3VzZXBpcGVzOworICAgIGV4dGVy biBjaGFyICogcmN2X21vdmU7ICAgICAgICAgICAgIC8qIERpcmVjdG9yeSB0byBtb3ZlIG5ldyBm aWxlcyB0byAqLworICAgIGV4dGVybiBjaGFyICogcmN2X3JlbmFtZTsgICAgICAgICAgIC8qIFdo YXQgdG8gcmVuYW1lIG5ldyBmaWxlcyB0byAqLworICAgIGV4dGVybiBjaGFyICogcmN2ZXhjZXB0 W107ICAgICAgICAgIC8qIFJFQ0VJVkUgLyBHRVQgZXhjZXB0aW9uIGxpc3QgKi8KKyAgICBpbnQg b3BrdCAgPSAgMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGZvciBPLVBhY2tldCBuZWVk ZWQgKi8KKworI2lmZGVmIFBJUEVTRU5ECisgICAgZXh0ZXJuIGludCBwaXBlc2VuZDsKKyAgICBl eHRlcm4gY2hhciAqIHJjdmZpbHRlcjsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgIGV4dGVy biBzdHJ1Y3Qga2V5dGFiIHJwYXRodGFiW107CisgICAgZXh0ZXJuIGludCBucnBhdGh0YWI7Cisg ICAgZXh0ZXJuIENLX09GRl9UIGNhbGlicmF0ZTsKKyAgICBpbnQgYXNuYW1lID0gMDsgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIGZvciBoYXZlIGFzLW5hbWUgKi8KKyAgICBpbnQga29ubHkg PSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJtaXQtb25seSBmdW5jdGlvbiAqLworICAg IGludCBjLCBpLCBuLCBjb25maXJtZWQgPSAwOyAgICAgICAgIC8qIFdvcmtlcnMgKi8KKyAgICBp bnQgZ2V0dmFsID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIHRvIGdldCBzd2l0 Y2ggdmFsdWUgKi8KKyAgICBpbnQgcmN2Y21kID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBX aGV0aGVyIGl0IGlzIHRoZSBSRUNFSVZFIGNvbW1hbmQgKi8KKyAgICBpbnQgbWdldCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBXaGV0aGVyIGl0IGlzIHRoZSBNR0VUIGNvbW1hbmQgKi8K KyAgICBzdHJ1Y3Qgc3RyaW5naW50IHB2W1NORF9NQVgrMV07ICAgIC8qIFRlbXBvcmFyeSBhcnJh eSBmb3Igc3dpdGNoIHZhbHVlcyAqLworICAgIHN0cnVjdCBGREIgc3csIGZsLCBjbTsgICAgICAg ICAgICAgIC8qIEZEQnMgZm9yIGVhY2ggcGFyc2UgZnVuY3Rpb24gKi8KKyAgICBjaGFyICogY21k c3RyID0gInRoaXMgY29tbWFuZCI7CisKKyNpZmRlZiBORVdGVFAKKyAgICBpZiAoY3ggPT0gWFhH RVQgfHwgY3ggPT0gWFhSRUdFVCB8fCBjeCA9PSBYWE1HRVQgfHwgY3ggPT0gWFhSRVRSKSB7Cisg ICAgICAgIGV4dGVybiBpbnQgZnRwZ2V0OworICAgICAgICBleHRlcm4gaW50IGZ0cGlzb3Blbigp OworICAgICAgICBpZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBpc29w ZW4oKSkpIHsKKwkgICAgaW50IHg7CisJICAgIHggPSBkb2Z0cGdldChjeCwwKTsKKwkgICAgZGVi dWcoRjEwMSwiZG9mdHBnZXQgcmV0dXJuIiwiIix4KTsKKwkgICAgaWYgKHggPiAtMSkKKwkgICAg ICBzdWNjZXNzID0geDsKKwkgICAgZGVidWcoRjEwMSwiZG9mdHBnZXQgc3VjY2VzcyIsIiIsc3Vj Y2Vzcyk7CisJICAgIHJldHVybih4KTsKKwl9CisgICAgfQorI2VuZGlmIC8qIE5FV0ZUUCAqLwor CisgICAgZGVidWcoRjEwMSwieGdldCBjeCIsIiIsY3gpOworCisgICAgb29wdHMgPSAtMTsKKyAg ICBvbW9kZSA9IC0xOworCisgICAgZm9yIChpID0gMDsgaSA8PSBTTkRfTUFYOyBpKyspIHsgICAg LyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCisgICAgICAgIHB2W2ldLnN2YWwgPSBOVUxM OworICAgICAgICBwdltpXS5pdmFsID0gLTE7CisgICAgICAgIHB2W2ldLnd2YWwgPSAoQ0tfT0ZG X1QpLTE7CisgICAgfQorICAgIC8qIFByZXNldCBzd2l0Y2ggdmFsdWVzIGJhc2VkIG9uIHRvcC1s ZXZlbCBjb21tYW5kIHRoYXQgY2FsbGVkIHVzICovCisKKyAgICBzd2l0Y2ggKGN4KSB7CisgICAg ICBjYXNlIFhYUkVDOiAgICAgICAgICAgICAgICAgICAgICAgLyogUkVDRUlWRSAqLworICAgICAg ICBjbWRzdHIgPSAiUkVDRUlWRSI7CisgICAgICAgIHJjdmNtZCA9IDE7IGJyZWFrOworICAgICAg Y2FzZSBYWEdFVDogICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVCAqLworICAgICAgICBjbWRz dHIgPSAiR0VUIjsKKyAgICAgICAga29ubHkgPSAxOworICAgICAgICBicmVhazsKKyNpZmRlZiBD S19SRVNFTkQKKyAgICAgIGNhc2UgWFhSRUdFVDogICAgICAgICAgICAgICAgICAgICAvKiBSRUdF VCAqLworICAgICAgICBjbWRzdHIgPSAiUkVHRVQiOworICAgICAgICBrb25seSA9IDE7CisgICAg ICAgIHB2W1NORF9CSU5dLml2YWwgPSAxOyAgICAgICAgICAgLyogSW1wbGllcyAvQklOQVJZICov CisgICAgICAgIHB2W1NORF9SRVNdLml2YWwgPSAxOyBicmVhazsKKyNlbmRpZiAvKiBDS19SRVNF TkQgKi8KKyAgICAgIGNhc2UgWFhSRVRSOiAgICAgICAgICAgICAgICAgICAgICAvKiBSRVRSSUVW RSAqLworICAgICAgICBjbWRzdHIgPSAiUkVUUklFVkUiOworICAgICAgICBrb25seSA9IDE7Cisg ICAgICAgIHB2W1NORF9ERUxdLml2YWwgPSAxOyBicmVhazsKKyNpZmRlZiBQSVBFU0VORAorICAg ICAgY2FzZSBYWENSRUM6ICAgICAgICAgICAgICAgICAgICAgIC8qIENSRUNFSVZFICovCisgICAg ICAgIGNtZHN0ciA9ICJDUkVDRUlWRSI7CisgICAgICAgIGtvbmx5ID0gMTsKKyAgICAgICAgcmN2 Y21kID0gMTsKKyAgICAgICAgcHZbU05EX0NNRF0uaXZhbCA9IDE7IGJyZWFrOworICAgICAgY2Fz ZSBYWENHRVQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIENHRVQgKi8KKyAgICAgICAgY21kc3Ry ID0gIkNHRVQiOworICAgICAgICBrb25seSA9IDE7CisgICAgICAgIHB2W1NORF9DTURdLml2YWwg PSAxOyBicmVhazsKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworI2lmbmRlZiBOT01HRVQKKyAgICAg IGNhc2UgWFhNR0VUOiAgICAgICAgICAgICAgICAgICAgICAvKiBNR0VUICovCisgICAgICAgIGNt ZHN0ciA9ICJNR0VUIjsKKyAgICAgICAga29ubHkgPSAxOworICAgICAgICBtZ2V0ID0gMTsgYnJl YWs7CisjZW5kaWYgLyogTk9NR0VUICovCisgICAgfQorICAgIGRlYnVnKEYxMTEsInhnZXQgcmN2 Y21kIixjbWRzdHIscmN2Y21kKTsKKyAgICBkZWJ1ZyhGMTAxLCJ4Z2V0IGtvbmx5IiwiIixrb25s eSk7CisKKyNpZmRlZiBDS19YWVoKKyAgICBpZiAoIXJjdmNtZCAmJiBwcm90b2NvbCAhPSBQUk9U T19LKSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCAlcyB3b3JrcyBvbmx5IHdpdGggS2VybWl0 IHByb3RvY29sXG4iLGNtZHN0cik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorI2VuZGlm IC8qIENLX1hZWiAqLworCisgICAgLyogU2V0IHVwIGNoYWluZWQgcGFyc2UgZnVuY3Rpb25zLi4u ICovCisKKyAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCBG REIgLSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAg ICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgcmN2Y21kID8KKyAgICAgICAgICAgIk9w dGlvbmFsIG5hbWUvdGVtcGxhdGUgdG8gc3RvcmUgaW5jb21pbmcgZmlsZXMgdW5kZXIsIG9yIHN3 aXRjaCIgOgorICAgICAgICAgICAiUmVtb3RlIGZpbGVuYW1lLCBvciBzd2l0Y2giLCAvKiBobHBt c2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0 ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3Ry aW5nIGRhdGEgKi8KKyAgICAgICAgICAgcmN2Y21kID8gbnJjdnRhYiA6IG5nZXR0YWIsICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisg ICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5j dGlvbiAqLworICAgICAgICAgICByY3ZjbWQgPyByY3Z0YWIgOiBnZXR0YWIsICAgIC8qIEtleXdv cmQgdGFibGUgKi8KKyAgICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgaWYgKHJjdmNtZCB8fCBt Z2V0KSAgICAgICAgICAgICAgICAgLyogUkVDRUlWRSBvciBNR0VUICovCisgICAgICBjbWZkYmko JmZsLAorICAgICAgICAgICBfQ01UWFQsICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICov CisgICAgICAgICAgIHJjdmNtZCA/ICAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisg ICAgICAgICAgICAgIk91dHB1dCBmaWxlbmFtZSBvciBDb21tYW5kIiA6IC8qIE91dHB1dCBmaWxl bmFtZSAqLworICAgICAgICAgICAgICJGaWxlKHMpIHRvIEdFVCIsICAgICAgICAgICAgICAvKiBG aWxlcyB3ZSBhcmUgYXNraW5nIGZvciAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisgICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyNp ZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tfWFlaCisgICAgICAgICAgIChwcm90b2NvbCA9PSBQUk9U T19YIHx8IHByb3RvY29sID09IFBST1RPX1hDKSA/CisgICAgICAgICAgICAgeHhzdHJpbmcgOgor ICAgICAgICAgICAgIChyY3ZjbWQgPyAoeHhfc3RycCkwICA6IHh4c3RyaW5nKQorI2Vsc2UKKyAg ICAgICAgICAgcmN2Y21kID8gKHh4X3N0cnApMCAgOiB4eHN0cmluZyAvKiBQcm9jZXNzaW5nIGZ1 bmN0aW9uICovCisjZW5kaWYgLyogQ0tfWFlaICovCisjZWxzZSAgLyogQ09NTUVOVCAqLworCSAg IHh4c3RyaW5nCQkJLyogQWx3YXlzIGV2YWx1YXRlIC0gZmRjIDIwMDYvMDIvMDEgKi8KKyNlbmRp ZgkvKiBDT01NRU5UICovCisgICAgICAgICAgICAgLAorICAgICAgICAgICBOVUxMLAorICAgICAg ICAgICAmY20KKyAgICAgICAgICAgKTsKKyAgICBlbHNlCisgICAgICBjbWZkYmkoJmZsLCAgICAg ICAgICAgICAgICAgICAgICAgLyogUmVtb3RlIGZpbGVuYW1lIG9yIGNvbW1hbmQgKi8KKyAgICAg ICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAg ICAiUmVtb3RlIGZpbGVuYW1lIiwgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAi IiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgIiIs ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAg ICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAx ICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDIgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsCisgICAgICAgICAgIE5VTEwsCisg ICAgICAgICAgICZjbQorICAgICAgICAgICApOworICAgIGNtZmRiaSgmY20sICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbmZpcm1hdGlvbiAqLworICAgICAgICAgICBfQ01DRk0sICAgICAg ICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAg ICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMCisgICAgICAg ICAgICk7CisKKyAgICAvKiAoU2VlIGRveHNlbmQoKSBmb3IgZnVsbGVyIGNvbW1lbnRhcnkpICov CisKKyAgICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSAwIG9y IG1vcmUgc3dpdGNoZXMgKi8KKyAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAgICAgICAgICAg ICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgZGVidWcoRjEwMSwieGdldCBjbWZkYiIs IiIseCk7CisgICAgICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3Ig Ki8KKyAgICAgICAgICBnb3RvIHhnZXR4OyAgICAgICAgICAgICAgICAgICAvKiBvciByZXBhcnNl IG5lZWRlZCAqLworICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAgIC8qIEJy ZWFrIG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgYyA9 IGNtZ2JyaygpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgYnJlYWsgY2hhcmFjdGVyICovCisg ICAgICAgIGlmICgoZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKSkgJiYgIShjbWdrd2Zs Z3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMg bm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg ICAgZ290byB4Z2V0eDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21na3dm bGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1 aXJlcyBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBn b3RvIHhnZXR4OworICAgICAgICB9CisgICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAg ICAgICAgLyogTnVtZXJpYyByZXN1bHQgPSBzd2l0Y2ggdmFsdWUgKi8KKyAgICAgICAgZGVidWco RjEwMSwieGdldCBzd2l0Y2giLCIiLG4pOworCisgICAgICAgIHN3aXRjaCAobikgeyAgICAgICAg ICAgICAgICAgICAgLyogUHJvY2VzcyB0aGUgc3dpdGNoICovCisjaWZkZWYgUElQRVNFTkQKKyAg ICAgICAgICBjYXNlIFNORF9DTUQ6ICAgICAgICAgICAgICAgICAvKiBUaGVzZSB0YWtlIG5vIGFy Z3MgKi8KKyAgICAgICAgICAgIGlmIChub3B1c2gpIHsKKyAgICAgICAgICAgICAgICBwcmludGYo Ij9Tb3JyeSwgc3lzdGVtIGNvbW1hbmQgYWNjZXNzIGlzIGRpc2FibGVkXG4iKTsKKyAgICAgICAg ICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAg IH0gZWxzZSBpZiAocmN2ZmlsdGVyKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorIj9Tb3Jy eSwgbm8gR0VUIC9DT01NQU5EIHdoZW4gUkVDRUlWRSBGSUxURVIgc2VsZWN0ZWRcbiIpOworICAg ICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKHJjdmNtZCkKKyAgICAgICAgICAgICAgc3cuaGxwbXNn ID0gIkNvbW1hbmQsIG9yIHN3aXRjaCI7IC8qIENoYW5nZSBoZWxwIG1lc3NhZ2UgKi8KKyAgICAg ICAgICAgIC8qIEZhbGwgdGhydS4uLiAqLworI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyAgICAg ICAgICBjYXNlIFNORF9SRUM6ICAgICAgICAgICAgICAgICAvKiAvUkVDVVJTSVZFICovCisgICAg ICAgICAgICBwdltTTkRfUFRIXS5pdmFsID0gUEFUSF9SRUw7IC8qIEltcGxpZXMgcmVsYXRpdmUg cGF0aG5hbWVzICovCisgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsgICAgICAgICAgICAgLyog U2V0IHRoZSByZWN1cnNpdmUgZmxhZyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg ICBjYXNlIFNORF9SRVM6ICAgICAgICAgICAgICAgICAvKiAvUkVDT1ZFUiAqLworICAgICAgICAg ICAgcHZbU05EX0JJTl0uaXZhbCA9IDE7ICAgICAgIC8qIEltcGxpZXMgL0JJTkFSWSAqLworICAg ICAgICAgICAgcHZbbl0uaXZhbCA9IDE7ICAgICAgICAgICAgIC8qIFNldCB0aGUgcmVzZW5kIGZs YWcgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTTkRfREVMOiAgICAg ICAgICAgICAgICAgLyogL0RFTEVURSAqLworICAgICAgICAgIGNhc2UgU05EX1NISDogICAgICAg ICAgICAgICAgIC8qIC9RVUlFVCAqLworICAgICAgICAgIGNhc2UgU05EX0NBTDogICAgICAgICAg ICAgICAgIC8qIC9DQUxJQlJBVEUgKi8KKyAgICAgICAgICBjYXNlIFNORF9YUEE6ICAgICAgICAg ICAgICAgICAvKiAvVFJBTlNQQVJFTlQgKi8KKyAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOyAg ICAgICAgICAgICAvKiBKdXN0IHNldCB0aGUgYXBwcm9wcmlhdGUgZmxhZyAqLworICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFNORF9QSVA6ICAgICAgICAgICAgICAgICAvKiAv UElQRVM6e09OLE9GRn0gKi8KKyAgICAgICAgICAgIGlmICghZ2V0dmFsKSB7CisgICAgICAgICAg ICAgICAgcHZbbl0uaXZhbCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICBpZiAoIW5vcHVz aCkKKyAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9IHg7CisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgbW9kZXMgLSBlYWNoIHVuZG9lcyB0aGUgb3RoZXJz ICovCisKKyAgICAgICAgICBjYXNlIFNORF9CSU46ICAgICAgICAgICAgICAgICAvKiBCaW5hcnkg Ki8KKyAgICAgICAgICBjYXNlIFNORF9UWFQ6ICAgICAgICAgICAgICAgICAvKiBUZXh0ICovCisg ICAgICAgICAgY2FzZSBTTkRfSU1HOiAgICAgICAgICAgICAgICAgLyogSW1hZ2UgKi8KKyAgICAg ICAgICBjYXNlIFNORF9MQkw6ICAgICAgICAgICAgICAgICAvKiBMYWJlbGVkICovCisgICAgICAg ICAgICBwdltTTkRfQklOXS5pdmFsID0gMDsgICAgICAgLyogVW5zZXQgYWxsICovCisgICAgICAg ICAgICBwdltTTkRfVFhUXS5pdmFsID0gMDsKKyAgICAgICAgICAgIHB2W1NORF9JTUddLml2YWwg PSAwOworICAgICAgICAgICAgcHZbU05EX0xCTF0uaXZhbCA9IDA7CisgICAgICAgICAgICBwdltu XS5pdmFsID0gMTsgICAgICAgICAgICAgLyogU2V0IHRoZSByZXF1ZXN0ZWQgb25lICovCisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgU05EX0VYQzogICAgICAgICAgICAgICAg IC8qIEV4Y2x1ZGVzICovCisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAg ICAgICBpZiAoKHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAg ICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgICAgICBwcmludGYo Ij9QYXR0ZXJuIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7CisgICAgICAg ICAgICB5ID0gc3RybGVuKHMpOworICAgICAgICAgICAgaWYgKHkgPiAyNTYpIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9QYXR0ZXJuIHRvbyBsb25nIC0gMjU2IG1heFxuIik7CisgICAgICAg ICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBwdltuXS5zdmFsID0gbWFsbG9jKHkrMSk7CisgICAgICAgICAgICBp ZiAocHZbbl0uc3ZhbCkgeworICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAg IC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgIC8qIE5v dCBpbXBsZW1lbnRlZCAqLworICAgICAgICAgIGNhc2UgU05EX1BSSTogICAgICAgICAgICAgICAg IC8qIEdFVCB0byBwcmludGVyICovCisgICAgICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAgICAg ICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJQ cmludCBvcHRpb25zIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgZ290byB4 Z2V0eDsKKyAgICAgICAgICAgIHB2W25dLnN2YWwgPSBtYWxsb2MoKGludClzdHJsZW4ocykrMSk7 CisgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkKKyAgICAgICAgICAgICAgc3RyY3B5KHB2W25d LnN2YWwscyk7ICAgICAvKiBzYWZlICovCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBD T01NRU5UICovCisKKyAgICAgICAgICBjYXNlIFNORF9NT1Y6ICAgICAgICAgICAgICAgICAvKiBN T1ZFIGFmdGVyICovCisgICAgICAgICAgY2FzZSBTTkRfUkVOOiAgICAgICAgICAgICAgICAgLyog UkVOQU1FIGFmdGVyICovCisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAg ICAgICBpZiAoKHggPSBjbWZsZChuID09IFNORF9NT1YgPworICAgICAgICAgICAiZGV2aWNlIGFu ZC9vciBkaXJlY3RvcnkgZm9yIHNvdXJjZSBmaWxlIGFmdGVyIHNlbmRpbmciIDoKKyAgICAgICAg ICAgIm5ldyBuYW1lIGZvciBzb3VyY2UgZmlsZSBhZnRlciBzZW5kaW5nIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBuID09IFNORF9NT1YgPyB4eHN0cmluZyA6IE5VTEwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICkpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIG4gPT0gU05EX01P ViA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiP0Rlc3RpbmF0aW9uIHJlcXVpcmVkIiA6 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiP05ldyBuYW1lIHJlcXVpcmVkIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsKKyAgICAgICAgICAgICAgICBmcmVlKHB2 W25dLnN2YWwpOworICAgICAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICB5ID0gc3RybGVu KHMpOworICAgICAgICAgICAgaWYgKHkgPiAwKSB7CisgICAgICAgICAgICAgICAgcHZbbl0uc3Zh bCA9IG1hbGxvYyh5KzEpOworICAgICAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7CisgICAg ICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAvKiBzYWZlICovCisgICAgICAg ICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBTTkRfQVNOOiAgICAg ICAgICAgICAgICAgLyogQXMtbmFtZSAqLworICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFr OworICAgICAgICAgICAgaWYgKG1nZXQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3Jy eSwgYXMtbmFtZSBub3QgYWxsb3dlZCB3aXRoIE1HRVRcbiIpOworICAgICAgICAgICAgICAgIHgg PSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKAorI2lmZGVmIENPTU1FTlQKKwkJKHggPSBjbWZsZCgiTmFtZSB0byBzdG9yZSBp dCB1bmRlciIsIiIsJnMsTlVMTCkpCisjZWxzZQorCQkoeCA9IGNtZmxkKCJOYW1lIHRvIHN0b3Jl IGl0IHVuZGVyIiwiIiwmcyx4eHN0cmluZykpCisjZW5kaWYJLyogQ09NTUVOVCAqLworCQk8IDAp CisgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsK KyAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihzKSkgPiAwKSB7CisgICAgICAgICAgICAgICAg aWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7CisgICAgICAgICAgICAgICAgcHZbbl0u c3ZhbCA9IG1hbGxvYyh5KzEpOworICAgICAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7Cisg ICAgICAgICAgICAgICAgICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAvKiBzYWZlICovCisgICAg ICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgUElQRVNFTkQKKyAgICAgICAg ICBjYXNlIFNORF9GTFQ6ICAgICAgICAgICAgICAgICAvKiBGaWx0ZXIgKi8KKyAgICAgICAgICAg IGRlYnVnKEYxMDEsInhnZXQgL2ZpbHRlciBnZXR2YWwiLCIiLGdldHZhbCk7CisgICAgICAgICAg ICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiRmlsdGVy IHByb2dyYW0gdG8gcmVjZWl2ZSB0aHJvdWdoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICIiLCZzLE5VTEwpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykKKyAgICAg ICAgICAgICAgICAgIHMgPSAiIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCpzKSBzID0g YnJzdHJpcChzKTsKKyAgICAgICAgICAgIHkgPSBzdHJsZW4ocyk7CisgICAgICAgICAgICBmb3Ig KHggPSAwOyB4IDwgeTsgeCsrKSB7ICAgLyogTWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQgIlx2KC4u LikiICovCisgICAgICAgICAgICAgICAgaWYgKHNbeF0gIT0gJ1xcJykgY29udGludWU7CisgICAg ICAgICAgICAgICAgaWYgKHNbeCsxXSA9PSAndicpIGJyZWFrOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKHggPT0geSkgeworICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAg ICAgICAgICAiP0ZpbHRlciBtdXN0IGNvbnRhaW4gYSByZXBsYWNlbWVudCB2YXJpYWJsZSBmb3Ig ZmlsZW5hbWUuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg eCA9IC05OworICAgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBwdltuXS5pdmFsID0gMTsKKyAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7Cisg ICAgICAgICAgICAgICAgZnJlZShwdltuXS5zdmFsKTsKKyAgICAgICAgICAgICAgICBwdltuXS5z dmFsID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoeSA9IHN0cmxlbihz KSkgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChwdltuXS5zdmFsID0gbWFsbG9jKHkrMSkp KQorICAgICAgICAgICAgICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7IC8qIHNhZmUgKi8KKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisK KyAgICAgICAgICBjYXNlIFNORF9QVEg6ICAgICAgICAgICAgICAgICAvKiBQYXRobmFtZXMgKi8K KyAgICAgICAgICAgIGlmICghZ2V0dmFsKSB7CisgICAgICAgICAgICAgICAgcHZbbl0uaXZhbCA9 IFBBVEhfUkVMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKCh4ID0gY21rZXkocnBhdGh0YWIsbnJwYXRodGFiLCIiLCJvbiIseHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAgICAgICBwdltuXS5pdmFs ID0geDsgICAgICAgICAgICAgLyogRGl0dG8gKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgICAgY2FzZSBTTkRfTkFNOiAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWVzICovCisgICAg ICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShm bnRhYixuZm50YWIsIiIsImNvbnZlcnRlZCIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAg IGdvdG8geGdldHg7CisgICAgICAgICAgICBwdltuXS5pdmFsID0geDsKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgY2FzZSBTTkRfUFJPOiAgICAgICAgICAgICAgICAgLyogUHJvdG9j b2wgdG8gdXNlICovCisgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAg ICBpZiAoKHggPSBjbWtleShwcm90b3MsbnByb3RvcywiRmlsZS10cmFuc2ZlciBwcm90b2NvbCIs IiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkgeworICAgICAg ICAgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgICAgICAgICAgeCA9IDA7CisgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsInhnZXQgL3Byb3RvIixhdG1idWYseCk7CisgICAg ICAgICAgICBwdltuXS5pdmFsID0geDsKKyAgICAgICAgICAgIGlmIChrb25seSAmJiB4ICE9IFBS T1RPX0spIHsKKyAgICAgICAgICAgICAgICBwcmludGYoCisiP1NvcnJ5LCB0aGlzIGNvbW1hbmQg d29ya3Mgb25seSB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIgorICAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhnZXR4 OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBzd2l0Y2ggdmFsdWUgLSAlZFxuIixj bXJlc3VsdC5ucmVzdWx0KTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8g eGdldHg7CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjEwMSwieGdldCBjbXJlc3VsdCBm Y29kZSIsIiIsY21yZXN1bHQuZmNvZGUpOworCisgICAgY21hcmcgPSBsaW5lOyAgICAgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBzdHJpbmcgcG9pbnRlcnMgKi8KKyAgICBjbWFyZzIg PSB0bXBidWY7CisgICAgYXNuYW1lID0gMDsKKyAgICBsaW5lWzBdID0gTlVMOyAgICAgICAgICAg ICAgICAgICAgICAvKiBhbmQgYnVmZmVycy4gKi8KKyAgICB0bXBidWZbMF0gPSBOVUw7CisKKyAg ICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7ICAgICAgICAgICAvKiBIb3cgZGlkIHdlIGdldCBv dXQgb2Ygc3dpdGNoIGxvb3AgKi8KKyAgICAgIGNhc2UgX0NNRkxEOiAgICAgICAgICAgICAgICAg ICAgICAvKiAoMykgUmVtb3RlIGZpbGVzcGVjICovCisgICAgICAgIGNrc3RybmNweShsaW5lLGNt cmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIF9D TVRYVDogICAgICAgICAgICAgICAgICAgICAgLyogKDQpIEFzLW5hbWUgKi8KKyAgICAgICAgaWYg KHJjdmNtZCkgeworICAgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixjbXJlc3VsdC5zcmVzdWx0 LFRNUEJVRlNJWik7CisgICAgICAgICAgICBpZiAoKGludClzdHJsZW4odG1wYnVmKSA+IDApCisg ICAgICAgICAgICAgIGFzbmFtZSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBj a3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7CisgICAgICAgIH0KKyAg ICAgIGNhc2UgX0NNQ0ZNOiAgICAgICAgICAgICAgICAgICAgICAvKiAoNikgQ29uZmlybWF0aW9u ICovCisgICAgICAgIGNvbmZpcm1lZCA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs dDoKKyAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJl c3VsdC5mY29kZSk7CisgICAgICAgIHggPSAtOTsKKyAgICAgICAgZ290byB4Z2V0eDsKKyAgICB9 CisgICAgZGVidWcoRjExMCwieGdldCBzdHJpbmciLGNtYXJnLDApOworICAgIGRlYnVnKEYxMDEs InhnZXQgY29uZmlybWVkIiwiIixjb25maXJtZWQpOworCisgICAgY21hcmcgPSBicnN0cmlwKGNt YXJnKTsgICAgICAgICAgICAgLyogU3RyaXAgYW55IGJyYWNlcyAqLworCisgICAgaWYgKCFjb25m aXJtZWQpIHsgICAgICAgICAgICAgICAgICAgLyogQ1Igbm90IHR5cGVkIHlldCwgZ2V0IG1vcmUg ZmllbGRzICovCisgICAgICAgIGlmIChwdltTTkRfQ01EXS5pdmFsID4gMCkgeworICAgICAgICAg ICAgZGVidWcoRjEwMCwieGdldCBjYWxsaW5nIGNtdHh0IiwiIiwwKTsKKyAgICAgICAgICAgIHgg PSBjbXR4dCgiTG9jYWwgY29tbWFuZCB0byBwaXBlIGludG8iLCIiLCZzLE5VTEwpOworICAgICAg ICAgICAgaWYgKHggPCAwICYmIHggIT0gLTMpIGdvdG8geGdldHg7CisgICAgICAgICAgICBpZiAo eCAhPSAtMykgeworICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVop OworICAgICAgICAgICAgICAgIGFzbmFtZSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0g ZWxzZSBpZiAoIXJjdmNtZCkgeworI2lmZGVmIFZNUworICAgICAgICAgICAgLyogY21vZmkoKSBm YWlscyBpZiB5b3UgZ2l2ZSBpdCBhIGRpcmVjdG9yeSBuYW1lICovCisgICAgICAgICAgICB4ID0g Y21mbGQoIk5hbWUgb3IgZGlyZWN0b3J5IGZvciBpbmNvbWluZyBmaWxlIiwiIiwmcyxOVUxMKTsK KyAgICAgICAgICAgIGRlYnVnKEYxMTEsInhnZXQgY21mbGQiLHMseCk7CisjZWxzZQorICAgICAg ICAgICAgeCA9IGNtb2ZpKCJOYW1lIG9yIGRpcmVjdG9yeSBmb3IgaW5jb21pbmcgZmlsZSIsIiIs JnMsTlVMTCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ4Z2V0IGNtb2ZpIixzLHgpOworI2Vu ZGlmIC8qIFZNUyAqLworICAgICAgICAgICAgaWYgKHggPCAwICYmIHggIT0gLTMpIGdvdG8geGdl dHg7CisgICAgICAgICAgICBpZiAoeCAhPSAtMykgeworICAgICAgICAgICAgICAgIGNrc3RybmNw eSh0bXBidWYscyxUTVBCVUZTSVopOworICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgZ290byB4Z2V0eDsKKyAgICAgICAgICAgICAgICBhc25hbWUgPSAxOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIEFycml2ZSBoZXJlIHdpdGggY21hcmcgYW5k IGNtYXJnMiBhbGwgc2V0ICovCisKKyAgICBkZWJ1ZyhGMTExLCJ4Z2V0IGFzbmFtZSIsY21hcmcy LGFzbmFtZSk7CisgICAgaWYgKCFhc25hbWUpIHsKKyAgICAgICAgaWYgKHB2W1NORF9BU05dLnN2 YWwpCisgICAgICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixwdltTTkRfQVNOXS5zdmFsLFRNUEJVRlNJ Wik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB0bXBidWZbMF0gPSBOVUw7CisgICAgfQorICAg IGNtYXJnMiA9IGJyc3RyaXAoY21hcmcyKTsgICAgICAgICAgIC8qIFN0cmlwIG91dGVyIGJyYWNl cyBpZiBhbnkuICovCisgICAgZGVidWcoRjExMCwieGdldCBjbWFyZyIsY21hcmcsMCk7CisgICAg ZGVidWcoRjExMCwieGdldCBjbWFyZzIiLGNtYXJnMiwwKTsKKworICAgIGlmICghKmNtYXJnICYm CisgICAgICAgIChjeCA9PSBYWEdFVCB8fCBjeCA9PSBYWFJFR0VUIHx8IGN4ID09IFhYQ0dFVCB8 fCBjeCA9PSBYWE1HRVQpKSB7CisgICAgICAgIHByaW50ZigiP0EgcmVtb3RlIGZpbGUgc3BlY2lm aWNhdGlvbiBpcyByZXF1aXJlZFxuIik7CisgICAgICAgIHggPSAtOTsKKyAgICAgICAgZ290byB4 Z2V0eDsKKyAgICB9CisjaWZkZWYgUElQRVNFTkQKKyAgICBpZiAocHZbU05EX0NNRF0uaXZhbCA+ IDApIHsgICAgICAgICAvKiAvQ09NTUFORCBzZXRzIHBpcGVzZW5kIGZsYWcgKi8KKyAgICAgICAg eCA9IC05OworICAgICAgICBpZiAoISpjbWFyZzIpIHsKKyAgICAgICAgICAgIHByaW50ZigiP0Nv bW1hbmQgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgfSBl bHNlIGlmIChub3B1c2gpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBzeXN0ZW0gY29t bWFuZCBhY2Nlc3MgaXMgZGlzYWJsZWRcbiIpOworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAg ICAgICAgfSBlbHNlIGlmIChyY3ZmaWx0ZXIpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5 LCBubyBHRVQgL0NPTU1BTkQgd2hpbGUgUkVDRUlWRSBGSUxURVIgc2VsZWN0ZWRcbiIpOworICAg ICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcGlwZXNlbmQg PSAxOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ4Z2V0IC9DT01NQU5EIHBpcGVzZW5kIiwiIixw aXBlc2VuZCk7CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmZGVmIENLX1JFU0VORAorICAg IGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkgeyAgICAgICAgIC8qIFJFR0VUIG9yIEdFVCAvUkVD T1ZFUiAqLworI2lmZGVmIFJFQ1VSU0lWRQorICAgICAgICBpZiAocHZbU05EX1JFQ10uaXZhbCA+ IDApIHsgICAgIC8qIFJFQ1VSU0lWRSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBy aW50ZigiP1Vuc3VwcG9ydGVkIG9wdGlvbiBjb21iaW5hdGlvbjogL1JFQ09WRVIgL1JFQ1VSU0lW RVxuIik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworI2Vs c2UKKyAgICAgICAgICAgIG9wa3QgPSAxOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg fQorI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgICAgICBpZiAocHZbU05EX0RFTF0uaXZhbCA+ IDApIHsgICAgIC8qIC9ERUxFVEUgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwcmlu dGYoIj9VbnN1cHBvcnRlZCBvcHRpb24gY29tYmluYXRpb246IC9SRUNPVkVSIC9ERUxFVEVcbiIp OworICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyNlbHNlCisg ICAgICAgICAgICBvcGt0ID0gMTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0KKyAg ICB9CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisKKyAgICBpZiAocHZbU05EX0VYQ10uaXZhbCA+ IDApICAgICAgICAgICAvKiAvRVhDRVBUICovCisgICAgICBtYWtlbGlzdChwdltTTkRfRVhDXS5z dmFsLHJjdmV4Y2VwdCxOU05ERVhDRVBUKTsKKworI2lmZGVmIElLU19PUFRJT04KKyAgICBpZiAo IXJjdmNtZAorI2lmZGVmIENLX1hZWgorICAgICAgICAgJiYgcHJvdG9jb2wgPT0gUFJPVE9fSwor I2VuZGlmIC8qIENLX1hZWiAqLworICAgICAgICAgKSB7CisgICAgICAgIGlmICghaWtzX3dhaXQo S0VSTUlUX1JFUV9TVEFSVCwxKSkgeworICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAg ICAiP0EgS2VybWl0IFNlcnZlciBpcyBub3QgYXZhaWxhYmxlIHRvIHByb2Nlc3MgdGhpcyBjb21t YW5kXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsgICAgICAgICAgICAgICAgICAgICAvKiBjb3Jy ZWN0IHRoZSByZXR1cm4gY29kZSAqLworICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAg fQorICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICovCisKKyNpZmRlZiBDS19YWVoKKyAgICB7 CisgICAgICAgIGludCBwbywgcGc7ICAgICAgICAgICAgICAgICAgICAgLyogKGZvciBjbGFyaXR5 KSAqLworICAgICAgICBwbyA9IHB2W1NORF9QUk9dLml2YWw7ICAgICAgICAgIC8qIC9QUk9UT0NP TCBvcHRpb24gKi8KKyAgICAgICAgcGcgPSBwcm90b2NvbDsgICAgICAgICAgICAgICAgICAvKiBQ cm90b2NvbCBnbG9iYWwgICovCisgICAgICAgIGlmICgocmN2Y21kICYmICEqY21hcmcyKSAmJiAg ICAgLyogSWYgbm8gYXMtbmFtZSB3YXMgZ2l2ZW4gKi8KKyAgICAgICAgICAgIC8qIGFuZCAvUFJP VE9DT0wgaXMgWE1PREVNIG9yIGdsb2JhbCBwcm90b2NvbCBpcyBYTU9ERU0uLi4gKi8KKyAgICAg ICAgICAgICgocG8gPCAgMCAmJiAocGcgPT0gUFJPVE9fWCB8fCBwZyA9PSBQUk9UT19YQykpIHx8 CisgICAgICAgICAgICAgKHBvID4gLTEgJiYgKHBvID09IFBST1RPX1ggfHwgcG8gPT0gUFJPVE9f WEMpKSkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgcHJpbnRmKAorIlNvcnJ5LCB5b3Ug bXVzdCBzcGVjaWZ5IGEgbmFtZSB3aGVuIHJlY2VpdmluZyBhIGZpbGUgd2l0aCBYTU9ERU0gcHJv dG9jb2xcbiIKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgeCA9IC05OworICAg ICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19YWVog Ki8KKworI2lmZGVmIFJFQ1VSU0lWRQorICAgIGlmIChwdltTTkRfUkVDXS5pdmFsID4gMCkgeyAg ICAgICAgIC8qIFJFQ1VSU0lWRSAqLworICAgICAgICByZWN1cnNpdmUgPSAxOworICAgICAgICBw dltTTkRfUFRIXS5pdmFsID0gUEFUSF9SRUw7ICAgIC8qIEltcGxpZXMgcmVsYXRpdmUgcGF0aG5h bWVzIHRvbyAqLworICAgIH0KKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKworICAgIGlmIChwdltT TkRfUElQXS5pdmFsID4gLTEpIHsKKyAgICAgICAgZ191c2VwaXBlcyA9IHVzZXBpcGVzOworICAg ICAgICB1c2VwaXBlcyA9IHB2W1NORF9QSVBdLml2YWw7CisgICAgfQorCisgICAgLyogU2F2ZSBn bG9iYWwgcHJvdG9jb2wgcGFyYW1ldGVycyAqLworCisgICAgZ19wcm90byA9IHByb3RvY29sOwor I2lmZGVmIENLX0xBQkVMRUQKKyAgICBnX2xmX29wdHMgPSBsZl9vcHRzOyAgICAgICAgICAgICAg ICAvKiBTYXZlIGxhYmVsZWQgdHJhbnNmZXIgb3B0aW9ucyAqLworI2VuZGlmIC8qIENLX0xBQkVM RUQgKi8KKyAgICBnX3VycHNpeiA9IHVycHNpejsgICAgICAgICAgICAgICAgICAvKiBSZWNlaXZl IHBhY2tldCBsZW5ndGggKi8KKyAgICBnX3Nwc2l6ZiA9IHNwc2l6ZjsgICAgICAgICAgICAgICAg ICAvKiBTZW5kIHBhY2tldCBsZW5ndGggZmxhZyAqLworICAgIGdfc3BzaXogPSBzcHNpejsgICAg ICAgICAgICAgICAgICAgIC8qIFNlbmQgcGFja2V0IGxlbmd0aCAqLworICAgIGdfc3BzaXpyID0g c3BzaXpyOyAgICAgICAgICAgICAgICAgIC8qIGV0YyBldGMgKi8KKyAgICBnX3NwbWF4ID0gc3Bt YXg7CisgICAgZ193c2xvdHIgPSB3c2xvdHI7CisgICAgZ19wcmVmaXhpbmcgPSBwcmVmaXhpbmc7 CisgICAgZ19mbmNhY3QgPSBmbmNhY3Q7CisgICAgZ19mbmNudiA9IGZuY252OworICAgIGdfZm5z cGF0aCA9IGZuc3BhdGg7CisgICAgZ19mbnJwYXRoID0gZm5ycGF0aDsKKyAgICBnX3hmcnhsYSA9 IHhmcnhsYTsKKworICAgIGlmIChwdltTTkRfUFJPXS5pdmFsID4gLTEpIHsgICAgICAgIC8qIENo YW5nZSBhY2NvcmRpbmcgdG8gc3dpdGNoICovCisgICAgICAgIHByb3RvY29sID0gcHZbU05EX1BS T10uaXZhbDsKKyAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnJwa3RsZW4gPiAtMSkgICAvKiBj b3BpZWQgZnJvbSBpbml0cHJvdG8oKSAqLworICAgICAgICAgICAgdXJwc2l6ID0gcHRhYltwcm90 b2NvbF0ucnBrdGxlbjsKKyAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnNwa3RmbGcgPiAtMSkK KyAgICAgICAgICAgIHNwc2l6ZiA9IHB0YWJbcHJvdG9jb2xdLnNwa3RmbGc7CisgICAgICAgIGlm IChwdGFiW3Byb3RvY29sXS5zcGt0bGVuID4gLTEpIHsKKyAgICAgICAgICAgIHNwc2l6ID0gcHRh Yltwcm90b2NvbF0uc3BrdGxlbjsKKyAgICAgICAgICAgIGlmIChzcHNpemYpCisgICAgICAgICAg ICAgICAgc3BzaXpyID0gc3BtYXggPSBzcHNpejsKKyAgICAgICAgfQorICAgICAgICBpZiAocHRh Yltwcm90b2NvbF0ud2luc2l6ZSA+IC0xKQorICAgICAgICAgICAgd3Nsb3RyID0gcHRhYltwcm90 b2NvbF0ud2luc2l6ZTsKKyAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnByZWZpeCA+IC0xKQor ICAgICAgICAgICAgcHJlZml4aW5nID0gcHRhYltwcm90b2NvbF0ucHJlZml4OworICAgICAgICBp ZiAocHRhYltwcm90b2NvbF0uZm5jYSA+IC0xKQorICAgICAgICAgICAgZm5jYWN0ICA9IHB0YWJb cHJvdG9jb2xdLmZuY2E7CisgICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5mbmNuID4gLTEpCisg ICAgICAgICAgICBmbmNudiAgID0gcHRhYltwcm90b2NvbF0uZm5jbjsKKyAgICAgICAgaWYgKHB0 YWJbcHJvdG9jb2xdLmZuc3AgPiAtMSkKKyAgICAgICAgICAgIGZuc3BhdGggPSBwdGFiW3Byb3Rv Y29sXS5mbnNwOworICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uZm5ycCA+IC0xKQorICAgICAg ICAgICAgZm5ycGF0aCA9IHB0YWJbcHJvdG9jb2xdLmZucnA7CisgICAgfQorICAgIGRlYnVnKEYx MDEsInhnZXQgcHJvdG9jb2wiLCIiLHByb3RvY29sKTsKKyAgICBkZWJ1ZyhGMTExLCJ4Z2V0IGNt YXJnMiIsY21hcmcyLHhmZXJtb2RlKTsKKworICAgIGdfeGZlcm1vZGUgPSB4ZmVybW9kZTsKKyAg ICBnX2JpbmFyeSA9IGJpbmFyeTsKKyAgICBpZiAocHZbU05EX0JJTl0uaXZhbCA+IDApIHsgICAg ICAgICAvKiBDaGFuZ2UgYWNjb3JkaW5nIHRvIHN3aXRjaCAqLworICAgICAgICB4ZmVybW9kZSA9 IFhNT0RFX007CisgICAgICAgIGJpbmFyeSA9IFhZRlRfQjsgICAgICAgICAgICAgICAgLyogRklM RSBUWVBFIEJJTkFSWSAqLworICAgICAgICBvbW9kZSA9IEdNT0RfQklOOyAgICAgICAgICAgICAg IC8qIE8tUGFja2V0IG1vZGUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG94Z2V0IC9CSU5BUlkg eGZlcm1vZGUiLCIiLHhmZXJtb2RlKTsKKyAgICB9IGVsc2UgaWYgKHB2W1NORF9UWFRdLml2YWwg PiAwKSB7ICAvKiBEaXR0byBmb3IgL1RFWFQgKi8KKyAgICAgICAgeGZlcm1vZGUgPSBYTU9ERV9N OworICAgICAgICBiaW5hcnkgPSBYWUZUX1Q7CisgICAgICAgIG9tb2RlID0gR01PRF9UWFQ7Cisg ICAgICAgIGRlYnVnKEYxMDEsImRveGdldCAvVEVYVCB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOwor ICAgIH0gZWxzZSBpZiAocHZbU05EX0lNR10uaXZhbCA+IDApIHsKKyAgICAgICAgeGZlcm1vZGUg PSBYTU9ERV9NOworI2lmZGVmIFZNUworICAgICAgICBiaW5hcnkgPSBYWUZUX0k7CisjZWxzZQor ICAgICAgICBiaW5hcnkgPSBYWUZUX0I7CisjZW5kaWYgLyogVk1TICovCisgICAgICAgIG9tb2Rl ID0gR01PRF9UWFQ7CisgICAgICAgIGRlYnVnKEYxMDEsImRveGdldCAvSU1BR0UgeGZlcm1vZGUi LCIiLHhmZXJtb2RlKTsKKyAgICB9CisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIGVsc2UgaWYgKHB2 W1NORF9MQkxdLml2YWwgPiAwKSB7CisgICAgICAgIHhmZXJtb2RlID0gWE1PREVfTTsKKyAgICAg ICAgYmluYXJ5ID0gWFlGVF9MOworICAgICAgICBvbW9kZSA9IEdNT0RfTEJMOworICAgICAgICBk ZWJ1ZyhGMTAxLCJkb3hnZXQgL0xBQkVMRUQgeGZlcm1vZGUiLCIiLHhmZXJtb2RlKTsKKyAgICB9 CisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLworICAgIGRlYnVnKEYxMDEsInhnZXQgYmluYXJ5Iiwi IixiaW5hcnkpOworICAgIGRlYnVnKEYxMDEsInhnZXQgb21vZGUiLCIiLG9tb2RlKTsKKworICAg IGlmIChwdltTTkRfWFBBXS5pdmFsID4gMCkgICAgICAgICAgIC8qIC9UUkFOU1BBUkVOVCAqLwor ICAgICAgeGZyeGxhID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHRyYW5zbGF0 ZSBjaGFyYWN0ZXIgc2V0cyAqLworCisjaWZkZWYgUElQRVNFTkQKKyAgICBpZiAocHZbU05EX0ZM VF0uaXZhbCA+IDApCisgICAgICBtYWtlc3RyKCZyY3ZmaWx0ZXIscHZbU05EX0ZMVF0uc3ZhbCk7 CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmZGVmIENLX1RNUERJUgorICAgIGlmIChwdltT TkRfTU9WXS5pdmFsID4gMCkgeworICAgICAgICBpbnQgbGVuOworICAgICAgICBjaGFyICogcCA9 IHB2W1NORF9NT1ZdLnN2YWw7CisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgaWYgKGlzZ3Vlc3Qp IHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCAvTU9WRS1UTyBub3QgYXZhaWxhYmxlIHRv IGd1ZXN0c1xuIik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4 OworICAgICAgICB9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICAgICAgbGVuID0gc3RybGVu KHApOworICAgICAgICBpZiAoIWlzZGlyKHApKSB7ICAgICAgICAgICAgICAgIC8qIENoZWNrIGRp cmVjdG9yeSAqLworI2lmZGVmIENLX01LRElSCisgICAgICAgICAgICBjaGFyICogcyA9IE5VTEw7 CisgICAgICAgICAgICBzID0gKGNoYXIgKiltYWxsb2MobGVuICsgNCk7CisgICAgICAgICAgICBp ZiAocykgeworICAgICAgICAgICAgICAgIHN0cmNweShzLHApOyAgICAgICAgICAgIC8qIHNhZmUg Ki8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICAgICAgICAgIGlmIChzW2xlbi0xXSAhPSAn OicpIHsgc1tsZW4rK10gPSAnOic7IHNbbGVuXSA9IE5VTDsgfQorI2Vsc2UKKyAgICAgICAgICAg ICAgICBpZiAoc1tsZW4tMV0gIT0gJy8nKSB7IHNbbGVuKytdID0gJy8nOyBzW2xlbl0gPSBOVUw7 IH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworICAgICAgICAgICAgICAgIHNbbGVuKytdID0g J1gnOworICAgICAgICAgICAgICAgIHNbbGVuXSA9IE5VTDsKKyAgICAgICAgICAgICAgICB4ID0g em1rZGlyKHMpOworICAgICAgICAgICAgICAgIGZyZWUocyk7CisgICAgICAgICAgICAgICAgaWYg KHggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IGNyZWF0ZSBcIiVz XCJcbiIscCk7CisgICAgICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAgICAg ICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZWxzZQor ICAgICAgICAgICAgcHJpbnRmKCI/RGlyZWN0b3J5IFwiJXNcIiBub3QgZm91bmRcbiIscCk7Cisg ICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworI2VuZGlmIC8qIENL X01LRElSICovCisgICAgICAgIH0KKyAgICAgICAgemZucWZwKHAsTElOQlVGU0laLGxpbmUpOwor ICAgICAgICBtYWtlc3RyKCZyY3ZfbW92ZSxsaW5lKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfVE1Q RElSICovCisKKyAgICBpZiAocHZbU05EX1JFTl0uaXZhbCA+IDApIHsgICAgICAgICAvKiAvUkVO QU1FLVRPOm5hbWUgKi8KKyAgICAgICAgY2hhciAqIHAgPSBwdltTTkRfUkVOXS5zdmFsOworI2lm ZGVmIENLX0xPR0lOCisgICAgICAgIGlmIChpc2d1ZXN0KSB7CisgICAgICAgICAgICBwcmludGYo Ij9Tb3JyeSwgL1JFTkFNRS1UTyBub3QgYXZhaWxhYmxlIHRvIGd1ZXN0c1xuIik7CisgICAgICAg ICAgICB4ID0gLTk7CisgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICB9CisjZW5kaWYg LyogQ0tfTE9HSU4gKi8KKyAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgIGlmICghKnAp IHsKKyAgICAgICAgICAgIHByaW50ZigiP05ldyBuYW1lIHJlcXVpcmVkIGZvciAvUkVOQU1FXG4i KTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIGdvdG8geGdldHg7CisgICAgICAg IH0KKyAgICAgICAgcCA9IGJyc3RyaXAocCk7CisgICAgICAgIG1ha2VzdHIoJnJjdl9yZW5hbWUs cCk7CisgICAgICAgIGRlYnVnKEYxMTAsInhnZXQgcmN2X3JlbmFtZSIsIiIsMCk7CisgICAgfQor CisjaWZkZWYgQ0FMSUJSQVRFCisgICAgaWYgKHB2W1NORF9DQUxdLml2YWwgPiAwKQorICAgICAg Y2FsaWJyYXRlID0gKENLX09GRl9UKTE7CisjZW5kaWYgLyogQ0FMSUJSQVRFICovCisgICAgZ19k aXNwbGEgPSBmZGlzcGxhOworICAgIGlmIChwdltTTkRfU0hIXS5pdmFsID4gMCkKKyAgICAgIGZk aXNwbGEgPSAwOworICAgIGRlYnVnKEYxMDEsInhnZXQgZGlzcGxheSIsIiIsZmRpc3BsYSk7CisK KyAgICBpZiAocHZbU05EX05BTV0uaXZhbCA+IC0xKSB7ICAgICAgICAvKiAvRklMRU5BTUVTICov CisgICAgICAgIGdfZm5jbnYgPSBmbmNudjsgICAgICAgICAgICAgICAgLyogU2F2ZSBnbG9iYWwg dmFsdWUgKi8KKyAgICAgICAgZm5jbnYgPSBwdltTTkRfTkFNXS5pdmFsOworICAgICAgICBkZWJ1 ZyhGMTAxLCJ4c2VuZCBmbmNudiIsIiIsZm5jbnYpOworICAgICAgICAvKiBXZSBzaG91bGQgYWxz byBoYW5kbGUgTyBwYWNrZXQgZmlsZW5hbWUgb3B0aW9uIGhlcmUgKi8KKyAgICAgICAgLyogYnV0 IHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHNpbmNlIFdIQVRBTUkgYWxyZWFkeSBoYW5kbGVzIGl0 ICovCisgICAgfQorICAgIGlmIChwdltTTkRfUFRIXS5pdmFsID4gLTEpIHsgICAgICAgIC8qIFBB VEhOQU1FUyAqLworICAgICAgICBnX3JwYXRoID0gZm5ycGF0aDsgICAgICAgICAgICAgIC8qIFNh dmUgZ2xvYmFsIHZhbHVlcyAqLworICAgICAgICBmbnJwYXRoID0gcHZbU05EX1BUSF0uaXZhbDsK KyAgICAgICAgZGVidWcoRjEwMSwieHNlbmQgZm5ycGF0aCIsIiIsZm5ycGF0aCk7CisjaWZuZGVm IE5aTFRPUgorICAgICAgICBpZiAoZm5ycGF0aCAhPSBQQVRIX09GRikgeworICAgICAgICAgICAg Z19mbmNudiA9IGZuY252OworICAgICAgICAgICAgZm5jbnYgPSBYWUZOX0w7CisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbmNudiIsIiIsZm5jbnYpOworICAgICAgICB9CisgICAgICAg IC8qIFdlIHNob3VsZCBhbHNvIGhhbmRsZSBPIHBhY2tldCBwYXRobmFtZSBvcHRpb24gaGVyZSAq LworICAgICAgICAvKiBidXQgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gc2luY2UgV0hBVEFNSSBh bHJlYWR5IGhhbmRsZXMgaXQgKi8KKyNlbmRpZiAvKiBOWkxUT1IgKi8KKyAgICB9CisKKyAgICAv KiBTZXQgcHJvdG9jb2wgc3RhcnQgc3RhdGUgKi8KKworICAgIGlmIChvcGt0KSB7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIEV4dGVuZGVkIEdFVCBPcHRpb25zKi8KKyAgICAgICAgc3N0YXRl ID0gKENIQVIpICdvJzsKKyAgICAgICAgb29wdHMgPSAwOworICAgICAgICBpZiAocHZbU05EX0RF TF0uaXZhbCA+IDApIG9vcHRzIHw9IEdPUFRfREVMOyAvKiBHRVQgL0RFTEVURSAqLworICAgICAg ICBpZiAocHZbU05EX1JFU10uaXZhbCA+IDApIG9vcHRzIHw9IEdPUFRfUkVTOyAvKiBHRVQgL1JF Q09WRVIgKi8KKyAgICAgICAgaWYgKHB2W1NORF9SRUNdLml2YWwgPiAwKSBvb3B0cyB8PSBHT1BU X1JFQzsgLyogR0VUIC9SRUNVUlNJVkUgKi8KKyAgICB9IGVsc2UgaWYgKHJjdmNtZCkKKyAgICAg IHNzdGF0ZSA9IChDSEFSKSAndic7ICAgICAgICAgICAgICAvKiBSRUNFSVZFIG9yIENSRUNFSVZF ICovCisgICAgZWxzZSBpZiAocHZbU05EX0RFTF0uaXZhbCA+IDApCisgICAgICBzc3RhdGUgPSAo Q0hBUikgJ2gnOyAgICAgICAgICAgICAgLyogR0VUIC9ERUxFVEUgKD0gUkVUUklFVkUpICovCisg ICAgZWxzZSBpZiAocHZbU05EX1JFU10uaXZhbCA+IDApCisgICAgICBzc3RhdGUgPSAoQ0hBUikg J2onOyAgICAgICAgICAgICAgLyogR0VUIC9SRUNPVkVSICg9IFJFR0VUKSAqLworICAgIGVsc2UK KyAgICAgIHNzdGF0ZSA9IChDSEFSKSAncic7ICAgICAgICAgICAgICAvKiBSZWd1bGFyIEdFVCAq LworICAgIGdldGNtZCA9IDE7CisgICAgZGVidWcoRjAwMCwieGdldCBzc3RhdGUiLCIiLHNzdGF0 ZSk7CisjaWZkZWYgTUFDCisgICAgd2hhdCA9IFdfUkVDVjsKKyAgICBzY3JjcmVhdGUoKTsKKyNl bmRpZiAvKiBNQUMgKi8KKyAgICBpZiAobG9jYWwpIHsKKyAgICAgICAgaWYgKHB2W1NORF9TSEhd Lml2YWwgIT0gMCkKKyAgICAgICAgICBkaXNwbGEgPSAxOworCWlmIChwcm90b2NvbCA9PSBQUk9U T19LKQkvKiBmZGMgMjAwNzAxMDggKi8KKwkgIHR0Zmx1aSgpOworICAgIH0KKyAgICB4ID0gMDsK KyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChwaXBlc2VuZCkKKyAgICAgIGdvdG8geGdldHg7Cisj ZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmZGVmIENLX1RNUERJUgorLyoKKyAgY21hcmcyIGlz IGFsc28gYWxsb3dlZCB0byBiZSBhIGRldmljZSBvciBkaXJlY3RvcnkgbmFtZTsKKyAgZXZlbiB0 aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSB0aGF0IGRvZXNuJ3QgZXhpc3QuCisqLworICAgIHkgPSBz dHJsZW4oY21hcmcyKTsKKyAgICBkZWJ1ZyhGMTExLCJ4Z2V0IHN0cmxlbihjbWFyZzIpIixjbWFy ZzIseSk7CisgICAgaWYgKCh5ID4gMCkgJiYKKyNpZmRlZiBPUzIKKyAgICAgICAgKChpc2FscGhh KGNtYXJnMlswXSkgJiYKKyAgICAgICAgIGNtYXJnMlsxXSA9PSAnOicgJiYKKyAgICAgICAgIGNt YXJnMlsyXSA9PSBOVUwpIHx8CisgICAgICAgIChjbWFyZ1t5LTFdID09ICcvJyB8fCBjbWFyZ1t5 LTFdID09ICdcXCcpIHx8CisgICAgICAgIGlzZGlyKGNtYXJnMikpCisjZWxzZQorI2lmZGVmIFVO SVhPUk9TSworICAgICAgICAoY21hcmcyW3ktMV0gPT0gJy8nIHx8IGlzZGlyKGNtYXJnMikpCisj ZWxzZQorI2lmZGVmIFZNUworICAgICAgICAoY21hcmcyW3ktMV0gPT0gJ10nIHx8IGNtYXJnMlt5 LTFdID09ICc+JyB8fCBpc2RpcihjbWFyZzIpKQorI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisgICAg ICAgIChjbWFyZzJbeS0xXSA9PSAnPicgfHwgaXNkaXIoY21hcmcyKSkKKyNlbHNlCisjaWZkZWYg ZGF0YWdlbmVyYWwKKyAgICAgICAgKGNtYXJnMlt5LTFdID09ICc6JyB8fCBjbWFyZ1swXSA9PSAn OicgfHwgaXNkaXIoY21hcmcyKSkKKyNlbHNlCisgICAgICAgIGlzZGlyKGNtYXJnMikKKyNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgKSB7 CisgICAgICAgIGRlYnVnKEYxMTAsImRveGdldCBSRUNFSVZFIGNtYXJnMiBkaXNrIG9yIGRpciIs Y21hcmcyLDApOworICAgICAgICBpZiAoIWZfdG1wZGlyKSB7CisgICAgICAgICAgICBpbnQgeDsK KyAgICAgICAgICAgIHMgPSB6Z3RkaXIoKTsKKyAgICAgICAgICAgIGlmIChzKSB7CisgICAgICAg ICAgICAgICAgY2tzdHJuY3B5KHNhdmRpcixzLFRNUERJUkxFTik7IC8qIHJlbWVtYmVyIG9sZCBk aXNrL2RpciAqLworICAgICAgICAgICAgICAgIGZfdG1wZGlyID0gMTsgICAvKiBhbmQgdGhhdCB3 ZSBkaWQgdGhpcyAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIj9DYW4ndCBnZXQgY3VycmVudCBkaXJlY3RvcnlcbiIpOworICAgICAgICAgICAgICAgIGNt YXJnMiA9ICIiOworICAgICAgICAgICAgICAgIGZfdG1wZGlyID0gMDsKKyAgICAgICAgICAgICAg ICB4ID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4Z2V0eDsKKyAgICAgICAgICAgIH0KKyNp ZmRlZiBDS19NS0RJUgorICAgICAgICAgICAgeCA9IHpjaGtpKGNtYXJnMik7ICAgICAgICAgIC8q IERvZXMgYXMtbmFtZSBleGlzdD8gKi8KKyAgICAgICAgICAgIGlmICh4ID09IC0xKSB7ICAgICAg ICAgICAgICAvKiBEb2Vzbid0IGV4aXN0ICovCisgICAgICAgICAgICAgICAgY2hhciAqIHAgPSBO VUxMOyAgICAgICAgLyogVHJ5IHRvIGNyZWF0ZSBpdCAqLworICAgICAgICAgICAgICAgIHggPSBz dHJsZW4oY21hcmcyKTsKKyAgICAgICAgICAgICAgICBpZiAoKHAgPSAoY2hhciAqKW1hbGxvYyh4 KzQpKSkgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHAsIiVzJXMiLGNtYXJnMiwieC54 Iik7IC8qIFNBRkUgKHByZWNoZWNrZWQpICovCisgICAgICAgICAgICAgICAgICAgIHggPSB6bWtk aXIocCk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUocCk7CisgICAgICAgICAgICAgICAgICAg IGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2FuJ3QgY3Jl YXRlICVzXG4iLGNtYXJnMik7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIHhnZXR4OworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX01LRElSICovCisg ICAgICAgICAgICBpZiAoIXpjaGRpcihjbWFyZzIpKSB7ICAgICAgLyogY2hhbmdlIHRvIGdpdmVu IGRpc2svZGlyZWN0b3J5LCAqLworICAgICAgICAgICAgICAgIHByaW50ZigiP0Nhbid0IGFjY2Vz cyAlc1xuIixjbWFyZzIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgICAg ICBnb3RvIHhnZXR4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY21hcmcyID0gIiI7Cisg ICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKKyAgICBja3N0cm5jcHko ZnNwZWMsY21hcmcsQ0tNQVhQQVRIKTsgICAvKiBOb3RlIC0gdGhpcyBpcyBhIFJFTU9URSBmaWxl c3BlYyAqLworICAgIGRlYnVnKEYxMTEsInhnZXQgZnNwZWMiLGZzcGVjLGZzcGVjbGVuKTsKKyAg ICBkZWJ1ZyhGMTEwLCJ4Z2V0IGNtYXJnMiIsY21hcmcyLDApOworCisgIHhnZXR4OgorICAgIGZv ciAoaSA9IDA7IGkgPCBTTkRfTUFYOyBpKyspCisgICAgICBpZiAocHZbaV0uc3ZhbCkKKyAgICAg ICAgZnJlZShwdltpXS5zdmFsKTsKKyAgICByZXR1cm4oeCk7Cit9CisjZW5kaWYgLyogTk9YRkVS ICovCisKKyNpZm5kZWYgTk9TUEwKKworLyoKKyAgRCBPIEcgVCBBICAtLSAgRG8gX0dFVEFSR1Mg b3IgX1BVVEFSR1MgQ29tbWFuZC4KKworICBVc2VkIGJ5IFhJRiwgRk9SLCBXSElMRSwgYW5kIFNX SVRDSCwgZWFjaCBvZiB3aGljaCBhcmUgaW1wbGVtZW50ZWQgYXMKKyAgMi1sZXZlbCBtYWNyb3M7 IHRoZSBmaXJzdCBsZXZlbCBkZWZpbmVzIHRoZSBtYWNybywgdGhlIHNlY29uZCBydW5zIGl0Lgor ICBUaGlzIHJvdXRpbmUgaGlkZXMgdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBtYWNyb3MgYnkgaW1w b3J0aW5nIHRoZQorICBtYWNybyBhcmd1bWVudHMgKGlmIGFueSkgZnJvbSB0d28gbGV2ZWxzIHVw LCB0byBtYWtlIHRoZW0gYXZhaWxhYmxlCisgIGluIHRoZSBJRiwgRk9SLCBTV0lUQ0gsIGFuZCBX SElMRSBjb21tYW5kcyB0aGVtc2VsdmVzOyBmb3IgZXhhbXBsZSBhcworICBsb29wIGluZGljZXMs IGV0YywgYW5kIHdpdGhpbiB0aGUgSUYvRk9SL1dISUxFL1NXSVRDSCBib2R5IGl0c2VsZi4KKyAg X1BVVEFSR1MgaXMgaW4gY2FzZSB3ZSBjaGFuZ2VkIGFueSBvZiB0aGVzZSB2YXJpYWJsZXMgb3Ig dXNlZCBTSElGVAorICBvbiB0aGVtLCBzbyB0aGUgbmV3IHZhbHVlcyB3b24ndCBiZSBsb3N0IGFz IHdlIHBvcCB1cCB0aGUgc3RhY2suCisqLworaW50Citkb2d0YShjeCkgaW50IGN4OyB7CisgICAg aW50IGksIG47CisgICAgY2hhciBjLCAqcCwgIG1idWZbNF07CisgICAgZXh0ZXJuIGludCB0b3Bh cmdjLCBjbWRpbnQ7CisgICAgZXh0ZXJuIGNoYXIgKiogdG9weGFyZzsKKworICAgIGlmICgoeSA9 IGNtY2ZtKCkpIDwgMCkKKyAgICAgIHJldHVybih5KTsKKyAgICBkZWJ1ZyhGMTAxLCJkb2d0YSBj eCIsIiIsY3gpOworICAgIGRlYnVnKEYxMDEsImRvZ3RhIG1hY2x2bCIsIiIsbWFjbHZsKTsKKyAg ICBpZiAoY3ggPT0gWFhHVEEpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiZG9ndGEgX0dFVEFSR1Mg bWFjbHZsIiwiIixtYWNsdmwpOworICAgIH0gZWxzZSBpZiAoY3ggPT0gWFhQVEEpIHsKKyAgICAg ICAgZGVidWcoRjEwMSwiZG9ndGEgX1BVVEFSR1MgbWFjbHZsIiwiIixtYWNsdmwpOworICAgIH0g ZWxzZSB7CisgICAgICAgIHJldHVybigtMik7CisgICAgfQorICAgIGlmIChtYWNsdmwgPCAxKQor ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKworICAgIC8qIE1ha2UgbmV3IGNvcGllcyBvZiBt YWNybyBhcmd1bWVudHMgLyUwLi45ICovCisKKyAgICBtYnVmWzBdID0gJyUnOyBtYnVmWzFdID0g JzAnOyBtYnVmWzJdID0gTlVMOyAvKiBBcmd1bWVudCBuYW1lIGJ1ZiAqLworCisgICAgaWYgKGN4 ID09IFhYUFRBKSB7ICAgICAgICAgICAgICAgICAgLyogR28gTk9JTlQgYmVjYXVzZSBfUFVUQVJH UyAqLworICAgICAgICBpZiAoY21kaW50KSAgICAgICAgICAgICAgICAgICAgIC8qIHRlbXBvcmFy aWx5IGNoYW5nZXMgbWFjbHZsLiAqLworICAgICAgICAgIGNvbm5vaSgpOyAgICAgICAgICAgICAg ICAgICAgIC8qIEludGVycnVwdHMgT0ZGLiAqLworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwg MTA7IGkrKykgeyAgICAgICAgICAvKiBGb3IgYWxsIGFyZ3MgKi8KKyAgICAgICAgYyA9IChjaGFy KSAoaSArICcwJyk7ICAgICAgICAgICAvKiBNYWtlIG5hbWUgKi8KKyAgICAgICAgbWJ1ZlsxXSA9 IChjaGFyKSBjOyAgICAgICAgICAgICAvKiBJbnNlcnQgZGlnaXQgKi8KKyAgICAgICAgaWYgKGN4 ID09IFhYR1RBKSB7ICAgICAgICAgICAgICAvKiBHZXQgYXJnIGZyb20gbGV2ZWwtbWludXMtMiAq LworICAgICAgICAgICAgaWYgKG1hY2x2bCA9PSAxKSBwID0gZ192YXJbY107IC8qIElmIGF0IGxl dmVsIDEgdXNlIGdsb2JhbHMgMC4uOSAqLworICAgICAgICAgICAgZWxzZSBwID0gbV9hcmdbbWFj bHZsLTJdW2ldOyAgIC8qIE90aGVyd2lzZSB0aGV5J3JlIG9uIHRoZSBzdGFjayAqLworICAgICAg ICAgICAgYWRkbWFjKG1idWYscCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgaWYgKG1h Y2x2bCA+IDEpCisgICAgICAgICAgICAgIG1ha2VzdHIoJihtX2xpbmVbbWFjbHZsXSksbV9saW5l W21hY2x2bC0yXSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB9IGVsc2UgaWYgKGN4 ID09IFhYUFRBKSB7ICAgICAgIC8qIFB1dCBhcmdzIGxldmVsKzIgKi8KKyAgICAgICAgICAgIG1h Y2x2bCAtPSAyOyAgICAgICAgICAgICAgICAvKiBUaGlzIGlzIGdyb3NzLCBpdCdzIGJlY2F1c2Ug d2UncmUgKi8KKyAgICAgICAgICAgIGFkZG1hYyhtYnVmLG1fYXJnW21hY2x2bCsyXVtpXSk7IC8q IGFkZGluZyBtYWNyb3MgdHdvIGxldmVscyB1cCAqLworICAgICAgICAgICAgbWFjbHZsICs9IDI7 ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGFkZG1hYygpIHVzZXMgbWFjbHZsLiAqLworICAg ICAgICAgICAgY291bnRbY21kbHZsIC0gMl0gID0gY291bnRbY21kbHZsXTsKKyAgICAgICAgICAg IGludGltZVtjbWRsdmwgLSAyXSA9IGludGltZVtjbWRsdmxdOworICAgICAgICAgICAgaW5wY2Fz W2NtZGx2bCAtIDJdID0gaW5wY2FzW2NtZGx2bF07CisgICAgICAgICAgICB0YWtlcnJbY21kbHZs IC0gMl0gPSB0YWtlcnJbY21kbHZsXTsKKyAgICAgICAgICAgIG1lcnJvcltjbWRsdmwgLSAyXSA9 IG1lcnJvcltjbWRsdmxdOworICAgICAgICAgICAgeHF1aWV0W2NtZGx2bCAtIDJdID0geHF1aWV0 W2NtZGx2bF07CisgICAgICAgICAgICB4dmFyZXZbY21kbHZsIC0gMl0gPSB4dmFyZXZbY21kbHZs XTsKKyAgICAgICAgfSBlbHNlIHJldHVybihzdWNjZXNzID0gMCk7ICAgICAvKiBCYWQgY2FsbCB0 byB0aGlzIHJvdXRpbmUgKi8KKyAgICB9CisgICAgaWYgKGN4ID09IFhYUFRBKSB7ICAgICAgICAg ICAgICAgICAgLyogUmVzdG9yZSBpbnRlcnJ1cHRzIGlmIHdlICovCisgICAgICAgIGlmIChjbWRp bnQpICAgICAgICAgICAgICAgICAgICAgLyogdHVybmVkIHRoZW0gb2ZmIGFib3ZlLiAqLworICAg ICAgICAgIGNvbmludCh0cmFwLHN0cHRyYXApOworICAgIH0KKyAgICAvKiBOb3cgdGFrZSBjYXJl IG9mIHRoZSBhcmd1bWVudCB2ZWN0b3IgYXJyYXkgXCZfW10sIFx2KHJldHVybiksICovCisgICAg LyogYW5kIFx2KGFyZ2MpIGJ5IGp1c3QgY29weWluZyB0aGUgcG9pbnRlcnMuICovCisKKyAgICBp ZiAoY3ggPT0gWFhHVEEpIHsgICAgICAgICAgICAgICAgICAvKiBHRVRBUkdTIGZyb20gMiBsZXZl bHMgdXAgKi8KKyAgICAgICAgaWYgKG1hY2x2bCA9PSAxKSB7CisgICAgICAgICAgICBhX3B0clsw XSA9IHRvcHhhcmc7ICAgICAgICAgLyogXCZfW10gYXJyYXkgKi8KKyAgICAgICAgICAgIGFfZGlt WzBdID0gdG9wYXJnYyAtIDE7ICAgICAvKiBEaW1lbnNpb24gZG9lc24ndCBpbmNsdWRlIFswXSAq LworICAgICAgICAgICAgbV94YXJnW21hY2x2bF0gPSB0b3B4YXJnOworICAgICAgICAgICAgbl94 YXJnW21hY2x2bF0gPSB0b3BhcmdjOyAgIC8qIEJ1dCBcdihhcmdjKSBkb2VzIGluY2x1ZGUgXCUw ICovCisgICAgICAgICAgICBtYWNhcmdjW21hY2x2bF0gPSB0b3BhcmdjOworICAgICAgICAgICAg bWFrZXN0cigmKG1ydmFsW21hY2x2bCsxXSksbXJ2YWxbMF0pOyAvKiAoc2VlIHZubG9vaygpKSAq LworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYV9wdHJbMF0gPSBtX3hhcmdbbWFjbHZs LTJdOworICAgICAgICAgICAgYV9kaW1bMF0gPSBuX3hhcmdbbWFjbHZsLTJdOworICAgICAgICAg ICAgbV94YXJnW21hY2x2bF0gPSBtX3hhcmdbbWFjbHZsLTJdOworICAgICAgICAgICAgbl94YXJn W21hY2x2bF0gPSBuX3hhcmdbbWFjbHZsLTJdOworICAgICAgICAgICAgbWFjYXJnY1ttYWNsdmxd ID0gbl94YXJnW21hY2x2bC0yXTsKKyAgICAgICAgICAgIG1ha2VzdHIoJihtcnZhbFttYWNsdmwr MV0pLG1ydmFsW21hY2x2bC0xXSk7IC8qIChzZWUgdm5sb29rKCkpICovCisKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBVVEFSR1MgMiBsZXZl bHMgdXAgKi8KKyAgICAgICAgaWYgKG1hY2x2bCA+IDEpIHsKKyAgICAgICAgICAgIGFfcHRyWzBd ID0gbV94YXJnW21hY2x2bF07CisgICAgICAgICAgICBtX3hhcmdbbWFjbHZsLTJdID0gbV94YXJn W21hY2x2bF07CisgICAgICAgICAgICBhX2RpbVswXSA9IG5feGFyZ1ttYWNsdmxdOworICAgICAg ICAgICAgbl94YXJnW21hY2x2bC0yXSA9IG5feGFyZ1ttYWNsdmxdOworICAgICAgICAgICAgbWFj YXJnY1ttYWNsdmwtMl0gPSBuX3hhcmdbbWFjbHZsXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy ZXR1cm4oMSk7ICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgY29tbWFuZCAtIGRvbid0IGNo YW5nZSBzdWNjZXNzICovCit9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NQTAor LyoKKyAgRG8gdGhlIEdPVE8gYW5kIFtfXUZPUldBUkQgY29tbWFuZHMuCisgIHMgPSBMYWJlbCB0 byBzZWFyY2ggZm9yLCBjeCA9IGZ1bmN0aW9uIGNvZGU6IFhYR09UTywgWFhGV0QsIG9yIFhYWEZX RC4KKyovCisKK2ludAorZG9nb3RvKHMsIGN4KSBjaGFyICpzOyBpbnQgY3g7IHsKKyAgICBpbnQg aSwgaiwgeCwgeSwgeiwgYmM7CisgICAgaW50IGVtcHR5ID0gMCwgc3RvcGZsZyA9IDA7CisgICAg Y2hhciAqIGNtZDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmFtZSBvZiB0aGlzIGNvbW1h bmQgKi8KKyAgICBjaGFyIHRtcGxibFtMQkxTSVorMV0sICpscDsJICAgICAgICAvKiBDdXJyZW50 IGxhYmVsIGZyb20gY29tbWFuZCBzdHJlYW0gKi8KKyAgICBjaGFyIHRtcDJbTEJMU0laKzFdOwkJ LyogU1dJVENIIGxhYmVsIGNvbnZlcnNpb24gYnVmZmVyICovCisgICAgY2hhciB0bXAzW0xCTFNJ WisxXTsJCS8qIFRhcmdldCBsYWJlbCAqLworCisgICAgc3RvcGZsZyA9IChjeCA9PSBYWFhGV0Qp OyAgICAgICAgICAgLyogX0ZPUldBUkQgKHVzZWQgaW4gU1dJVENIKSAqLworICAgIGJjID0gMDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJyYWNlIGNvdW50ZXIgKi8KKworICAgIGNt ZCA9IChjeCA9PSBYWEdPVE8pID8gIkdPVE8iIDogKChjeCA9PSBYWEZXRCkgPyAiRk9SV0FSRCIg OiAiX0ZPUldBUkQiKTsKKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBpZiAoISpzKSBlbXB0eSA9 IDE7CisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgZGVidWcoRjEx MSwiR09UTyBjb21tYW5kIixjbWQsY3gpOworICAgICAgICBkZWJ1ZyhGMTAxLCJHT1RPIGNtZGx2 bCIsIiIsY21kbHZsKTsKKyAgICAgICAgZGVidWcoRjEwMSwiR09UTyBtYWNsdmwiLCIiLG1hY2x2 bCk7CisgICAgICAgIGRlYnVnKEYxMDEsIkdPVE8gdGxldmVsIiwiIix0bGV2ZWwpOworICAgICAg ICBkZWJ1ZyhGMTExLCJHT1RPIHRhcmdldCIscyxlbXB0eSk7CisgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisgICAgZGVidWcoRjExMCxjbWQscywwKTsKKyAgICB4ID0gY2tzdHJuY3B5KHRtcDMr MSxzLExCTFNJWik7CisgICAgZGVidWcoRjEwMSwiR09UTyB0YXJnZXQgbGVuIiwiIix4KTsKKyAg ICBkZWJ1ZyhGMTAxLCJHT1RPIHRhcmdldCBhdCB4IiwiIixzW3hdKTsKKyAgICBpZiAoc1t4XSkg eworCWRlYnVnKEYxMDAsIkdPVE8gdGFyZ2V0IG92ZXJmbG93IiwiIiwwKTsKKwlwcmludGYoIj9H T1RPIHRhcmdldCBvciBTV0lUQ0ggY2FzZSBsYWJlbCB0b28gbG9uZ1xuIik7CisJaWYgKHN0b3Bm bGcpIGRvc3RvcCgpOwkJLyogSWYgaW4gU1dJVENIIHJldHVybiB0byBwcm9tcHQgKi8KKwlyZXR1 cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyAgICBzID0gdG1wMysxOworICAgIGlmICgqcyAhPSAn OicpIHsgICAgICAgICAgICAgICAgICAgIC8qIE1ha2UgY29weSBvZiBsYWJlbCAqLworICAgICAg ICB0bXAzWzBdID0gJzonOyAgICAgICAgICAgICAgICAgIC8qIGd1YXJhbnRlZWQgdG8gc3RhcnQg d2l0aCAiOiIgKi8KKyAgICAgICAgcy0tOworICAgIH0KKyAgICBpZiAoIXN0b3BmbGcgJiYgIWVt cHR5KSB7CisgICAgICAgIGlmIChzWzFdID09ICcuJyB8fCBzWzFdID09IFNQIHx8IHNbMV0gPT0g TlVMKSB7CisgICAgICAgICAgICBwcmludGYoIj9CYWQgbGFiZWwgc3ludGF4IC0gJyVzJ1xuIixz KTsKKwkgICAgaWYgKHN0b3BmbGcpIGRvc3RvcCgpOwkvKiBJZiBpbiBTV0lUQ0ggcmV0dXJuIHRv IHByb21wdCAqLworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAoY21kbHZsID09IDApIHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksICVz IG9ubHkgd29ya3MgaW4gYSBjb21tYW5kIGZpbGUgb3IgbWFjcm9cbiIsY21kKTsKKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisgICAgeSA9IHN0cmxlbihzKTsgICAgICAgICAg ICAgICAgICAgICAgLyogeSA9IGxlbmd0aCBvZiB0YXJnZXQgbGFiZWwgKi8KKyAgICBkZWJ1ZyhG MTExLGNtZCxzLHkpOworCisgICAgd2hpbGUgKGNtZGx2bCA+IDApIHsgICAgICAgICAgICAgICAg LyogQXMgbG9uZyBhcyBub3QgYXQgdG9wIGxldmVsLi4uICovCisgICAgICAgIGlmIChjbWRzdGtb Y21kbHZsXS5zcmMgPT0gQ01EX01EKSB7IC8qIEdPVE8gaW5zaWRlIG1hY3JvICovCisgICAgICAg ICAgICBpbnQgaSwgbSwgZmxhZzsKKyAgICAgICAgICAgIGNoYXIgKnhwLCAqdHA7CisKKyAgICAg ICAgICAgIC8qIEdPVE86IHJld2luZCB0aGUgbWFjcm87IEZPUldBUkQ6IHN0YXJ0IGF0IGN1cnJl bnQgcG9zaXRpb24gKi8KKworICAgICAgICAgICAgbHAgPSAoY3ggPT0gWFhHT1RPKSA/IG1hY3hb bWFjbHZsXSA6IG1hY3BbbWFjbHZsXTsKKyAgICAgICAgICAgIG0gPSAoaW50KXN0cmxlbihscCk7 CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJHT1RPIGluIG1hY3JvIixscCxtKTsKKworICAgICAg ICAgICAgZmxhZyA9IDE7ICAgICAgICAgICAgICAgICAgIC8qIGZsYWcgZm9yIHZhbGlkIGxhYmVs IHBvc2l0aW9uICovCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrLGxwKyspIHsg Lyogc2VhcmNoIGZvciBsYWJlbCBpbiBtYWNybyBib2R5ICovCisgICAgICAgICAgICAgICAgaWYg KCpscCA9PSAneycpICAgICAgICAgLyogQnV0IG9ubHkgYXQgdGhpcyBsZXZlbCAqLworICAgICAg ICAgICAgICAgICAgYmMrKzsgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGluc2lkZSBicmFj ZXMgaXMgb2ZmICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmxwID09ICd9JykgICAgLyog bGltaXRzLiAqLworICAgICAgICAgICAgICAgICAgYmMtLTsKKyAgICAgICAgICAgICAgICBpZiAo c3RvcGZsZyAmJiBiYyA+IDApICAvKiBUaGlzIGlzIGdvb2QgZm9yIFNXSVRDSCAqLworICAgICAg ICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgIC8qIGJ1dCBpbnRlcmZlcmVzIHdpdGgg V0hJTEUsIGV0Yy4gKi8KKyAgICAgICAgICAgICAgICBpZiAoKmxwID09ICcsJykgeworICAgICAg ICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmbGFnKSB7ICAgICAgICAgICAg IC8qIElmIGluIHZhbGlkIGxhYmVsIHBvc2l0aW9uICovCisgICAgICAgICAgICAgICAgICAgIGlm ICgqbHAgPT0gU1ApICAgICAgLyogZWF0IGxlYWRpbmcgc3BhY2VzICovCisgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmICgqbHAgIT0gJzonKSB7 ICAgLyogTG9vayBmb3IgbGFiZWwgaW50cm9kdWNlciAqLworICAgICAgICAgICAgICAgICAgICAg ICAgZmxhZyA9IDA7ICAgICAgIC8qIHRoaXMgaXNuJ3QgaXQgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBrZWVwIGxvb2tpbmcgKi8KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWZsYWcpICAg ICAgICAgICAgICAvKiBXZSBkb24ndCBoYXZlIGEgbGFiZWwgKi8KKyAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOyAgICAgICAgICAgICAvKiAgc28ga2VlcCBsb29raW5nLi4uICovCisgICAgICAg ICAgICAgICAgeHAgPSBscDsgdHAgPSB0bXBsYmw7ICAgLyogQ29weSB0aGUgbGFiZWwgZnJvbSB0 aGUgbWFjcm8gKi8KKyAgICAgICAgICAgICAgICBqID0gMDsgICAgICAgICAgICAgICAgICAvKiB0 byBtYWtlIGl0IG51bGwtdGVybWluYXRlZCAqLworICAgICAgICAgICAgICAgIHdoaWxlICgoKnRw ID0gKnhwKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaisrID4gTEJMU0laLTEpIHsgLyog aiA9IGxlbmd0aCBvZiB3b3JkIGZyb20gbWFjcm8gKi8KKwkJCXByaW50ZigiP0dPVE8gdGFyZ2V0 IG9yIFNXSVRDSCBjYXNlIGxhYmVsIHRvbyBsb25nXG4iKTsKKwkJCWlmIChzdG9wZmxnKSBkb3N0 b3AoKTsgLyogUmV0dXJuIHRvIHByb21wdCAqLworCQkJcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKwkJ ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEqdHAgfHwgKnRwID09ICcsJykgLyogTG9v ayBmb3IgZW5kIG9mIHdvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgZWxzZSB0cCsrLCB4cCsrOyAgICAvKiBOZXh0IGNoYXJhY3RlciAqLwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqdHAgPSBOVUw7ICAgICAgICAgICAg ICAvKiBJbiBjYXNlIHdlIHN0b3BwZWQgZWFybHkgKi8KKyAgICAgICAgICAgICAgICAvKiBOb3cg ZG8gY2FzZWxlc3Mgc3RyaW5nIGNvbXBhcmlzb24sIHVzaW5nIGxvbmdlc3QgbGVuZ3RoICovCisg ICAgICAgICAgICAgICAgZGVidWcoRjExMSwibWFjcm8gR09UTyBsYWJlbCIscyx5KTsKKyAgICAg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJtYWNybyB0YXJnZXQgbGFiZWwiLHRtcGxibCxqKTsKKyAg ICAgICAgICAgICAgICBpZiAoc3RvcGZsZykgeyAgICAgICAgICAvKiBBbGxvdyB2YXJpYWJsZXMg YXMgU1dJVENIIGxhYmVscyAqLworICAgICAgICAgICAgICAgICAgICBpbnQgbiA9IExCTFNJWiAt IDE7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBwID0gdG1wMjsKKyAgICAgICAgICAgICAg ICAgICAgenpzdHJpbmcodG1wbGJsLCZwLCZuKTsKKwkJICAgIGlmIChuIDwgMCkgeworCQkJcHJp bnRmKCI/R09UTyB0YXJnZXQgb3IgU1dJVENIIGNhc2UgbGFiZWwgdG9vIGxvbmdcbiIpOworCQkJ aWYgKHN0b3BmbGcpIGRvc3RvcCgpOyAvKiBSZXR1cm4gdG8gcHJvbXB0ICovCisJCQlyZXR1cm4o MCk7CisJCSAgICB9CisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh0bXBsYmwsdG1wMixM QkxTSVopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJH T1RPIHMiLHMseSk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiR09UTyB0bXBsYmwiLHRt cGxibCxqKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJHT1RPIGVtcHR5Iixja2l0b2Eo c3RvcGZsZyksZW1wdHkpOworCisgICAgICAgICAgICAgICAgaWYgKGVtcHR5KSB7CQkgICAvKiBF bXB0eSB0YXJnZXQgKi8KKwkJICAgIHogPSAoIXN0cmNtcChzLCI6IikgJiYgLyogU3RyaW5nIGlz IGVtcHR5ICovCisJCQkgLyogYW5kIExhYmVsIGlzICI6IiBvciAiOioiLi4uICovCisJCQkgKCFz dHJjbXAodG1wbGJsLCI6IikgfHwgIXN0cmNtcCh0bXBsYmwsIjoqIikpKQorCQkJPyAwIDogMTsK KwkJICAgIGRlYnVnKEYxMTEsIkdPVE8iLCJBIix6KTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKHN0b3BmbGcpIHsKKyAgICAgICAgICAgICAgICAgICAgeiA9IGNrbWF0Y2godG1wbGJsLHMs aW5wY2FzW2NtZGx2bF0sMSkgPyAwIDogMTsKKwkJICAgIGRlYnVnKEYxMTEsIkdPVE8iLCJCIix6 KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB6ID0gKHN0 b3BmbGcgJiYgaW5wY2FzW2NtZGx2bF0pID8KKyAgICAgICAgICAgICAgICAgICAgICBzdHJjbXAo cyx0bXBsYmwpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RyY21wKHMsdG1wbGJsLCh5 ID4gaikgPyB5IDogaiwgMCk7CisJCSAgICBkZWJ1ZyhGMTExLCJHT1RPIiwiQyIseik7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgheikgeworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3BmbGcgJiYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAhY2tzdHJjbXAoIjpkZWZhdWx0Iix0bXBsYmwsKDggPiBqKSA/ IDggOiBqLCAwKSkgeworICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJHT1RPIERFRkFV TFQiLCIiLDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmbGFnID0gMDsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJHT1RPIG1hY3JvIGkiLGNt ZCxpKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIkdPVE8gbWFjcm8gbSIsY21kLG0pOworICAg ICAgICAgICAgaWYgKGkgPj0gbSkgeyAgICAgICAgICAgICAgIC8qIERpZG4ndCBmaW5kIHRoZSBs YWJlbCAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIkdPVE8gZmFpbGVkIGNtZGx2bCIs IiIsY21kbHZsKTsKKyNpZmRlZiBDT01NRU5UCisJCS8qIE1PVkVEIFRPIEFGVEVSIFBPUENMVkwg QUJPVVQgMjAgTElORVMgRE9XTiA1IEFVRyAyMDAyICovCisJCSAgIGlmIChzdG9wZmxnKQorICAg ICAgICAgICAgICAgICAgcmV0dXJuKDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg ICAgICAgICBpZiAoKG1hY2x2bCA+IDApICYmCisgICAgICAgICAgICAgICAgICAgICAgIChtX2Fy Z1ttYWNsdmwtMV1bMF0pICYmCisgICAgICAgICAgICAgICAgICAgICAgIChjbWRzdGtbY21kbHZs XS5zcmMgPT0gQ01EX01EKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAoIXN0cm5jbXAobV9h cmdbbWFjbHZsLTFdWzBdLCJfeGlmIiw0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIXN0 cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfZm9yIiw0KSB8fAorICAgICAgICAgICAgICAgICAg ICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfc3dpIiw0KSB8fAorICAgICAgICAg ICAgICAgICAgICAgICAgIXN0cm5jbXAobV9hcmdbbWFjbHZsLTFdWzBdLCJfd2hpIiw0KSkpIHsK KyAgICAgICAgICAgICAgICAgICAgZG9ndGEoWFhQVEEpOyAgICAgICAvKiBSZXN0b3JlIGFyZ3Mg Ki8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiR09UTyBpbiBYSUYvRk9SL1dISS9T V0kgcG9wcGluZyIsIiIsY21kbHZsKTsKKyAgICAgICAgICAgICAgICAgICAgcG9wY2x2bCgpOyAg ICAgICAgICAvKiBQb3AgYW4gZXh0cmEgbGV2ZWwgKi8KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiR09UTyBwb3BwaW5nIiwiIixjbWRsdmwpOworICAgICAg ICAgICAgICAgIGlmICghcG9wY2x2bCgpKSB7ICAgICAgIC8qIHBvcCB1cCB0byBuZXh0IGhpZ2hl ciBsZXZlbCAqLworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9MYWJlbCAnJXMnIG5vdCBm b3VuZFxuIixzKTsgLyogaWYgbm9uZSAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4oMCk7 ICAgICAgICAgIC8qIFF1aXQgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3BmbGcp IHsJLyogU1dJVENIIG5vIGNhc2UgbGFiZWwgbWF0Y2ggKi8KKwkJICAgIHJldHVybigwKTsJCS8q IGFuZCBubyBERUZBVUxUIGxhYmxlLiAqLworCQl9IGVsc2UgeworCQkgICAgY29udGludWU7ICAg ICAgICAvKiBvdGhlcndpc2UgbG9vayBhZ2FpbiAqLworCQl9CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJHT1RPIGZvdW5kIG1hY3JvIGxhYmVsIix0bXBsYmwsMCk7Cisg ICAgICAgICAgICBtYWNwW21hY2x2bF0gPSBscDsgICAgICAgICAgLyogc2V0IG1hY3JvIGJ1ZmZl ciBwb2ludGVyICovCisgICAgICAgICAgICByZXR1cm4oMSk7CisgICAgICAgIH0gZWxzZSBpZiAo Y21kc3RrW2NtZGx2bF0uc3JjID09IENNRF9URikgeworICAgICAgICAgICAgeCA9IDA7ICAgICAg ICAgICAgICAgICAgICAgIC8qIEdPVE8gaXNzdWVkIGluIHRha2UgZmlsZSAqLworICAgICAgICAg ICAgZGVidWcoRjExMSwiR09UTyBpbiBUQUtFIGZpbGUiLGNtZCxjeCk7CisgICAgICAgICAgICBp ZiAoY3ggPT0gWFhHT1RPKSB7ICAgICAgICAgLyogSWYgR09UTywgYnV0IG5vdCBGT1JXQVJELCAq LworICAgICAgICAgICAgICAgIHJld2luZCh0ZmlsZVt0bGV2ZWxdKTsgIC8qIHNlYXJjaCBmaWxl IGZyb20gYmVnaW5uaW5nICovCisgICAgICAgICAgICAgICAgdGZsaW5lW3RsZXZlbF0gPSAwOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKCEgZmVvZih0ZmlsZVt0bGV2ZWxdKSkg eworI2lmZGVmIENPTU1FTlQKKy8qIFRoaXMgaXMgd3JvbmcgLSBpdCBsZXRzIHVzIGp1bXAgdG8g bGFiZWxzIGluc2lkZSBpbmZlcmlvciBibG9ja3MgKi8KKyAgICAgICAgICAgICAgICB0ZmxpbmVb dGxldmVsXSsrOworICAgICAgICAgICAgICAgIGlmIChmZ2V0cyhsaW5lLExJTkJVRlNJWix0Zmls ZVt0bGV2ZWxdKSA9PSBOVUxMKSAvKiBHZXQgbGluZSAqLworI2Vsc2UKKyAgICAgICAgICAgICAg ICBpZiAoZ2V0bmN0KGxpbmUsTElOQlVGU0laLHRmaWxlW3RsZXZlbF0sMCkgPCAwKQorI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAv KiBJZiBubyBtb3JlLCBkb25lLCBsYWJlbCBub3QgZm91bmQgKi8KKyAgICAgICAgICAgICAgICBs cCA9IGxpbmU7ICAgICAgICAgICAgICAvKiBHb3QgbGluZSAqLworICAgICAgICAgICAgICAgIHdo aWxlICgqbHAgPT0gU1AgfHwgKmxwID09IEhUKQorICAgICAgICAgICAgICAgICAgbHArKzsgICAg ICAgICAgICAgICAgIC8qIFN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworICAgICAgICAgICAg ICAgIGlmICgqbHAgIT0gJzonKSBjb250aW51ZTsgLyogQ2hlY2sgZm9yIGxhYmVsIGludHJvZHVj ZXIgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoKihscCsxKSA9PSBTUCkgeyAvKiBSZW1vdmUg c3BhY2UgYmV0d2VlbiA6IGFuZCBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICoobHArMSkg PSAnOic7CisgICAgICAgICAgICAgICAgICAgIGxwKys7ICAgICAgICAgICAgICAgLyogU3RyaXAg bGVhZGluZyB3aGl0ZXNwYWNlICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IHRwID0gbHA7ICAgICAgICAgICAgICAgIC8qIEdldCBlbmQgb2Ygd29yZCAqLworICAgICAgICAg ICAgICAgIGogPSAwOworICAgICAgICAgICAgICAgIHdoaWxlICgqdHApIHsgICAgICAgICAgIC8q IEFuZCBudWxsLXRlcm1pbmF0ZSBpdCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKnRwIDwg MzMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0cCA9IE5VTDsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgdHArKywgaisrOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWNrc3RyY21wKGxwLHMsKHkg PiBqKSA/IHkgOiBqLDApKSB7IC8qIENhc2VsZXNzIGNvbXBhcmUgKi8KKyAgICAgICAgICAgICAg ICAgICAgeCA9IDE7ICAgICAgICAgICAgICAvKiBHb3QgaXQgKi8KKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBkb25lLiAqLworICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAoc3RvcGZsZyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNrc3RyY21wKCI6 ZGVmYXVsdCIsdG1wbGJsLCg4ID4gaikgPyA4IDogaiwwKSkgeworICAgICAgICAgICAgICAgICAg ICB4ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHggPT0gMCkgeyAgICAgICAgICAgICAgIC8q IElmIG5vdCBmb3VuZCwgcHJpbnQgbWVzc2FnZSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYx MDEsIkdPVE8gZmFpbGVkIGF0IGNtZGx2bCIsIiIsY21kbHZsKTsKKyAgICAgICAgICAgICAgICBp ZiAoc3RvcGZsZykKKyAgICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAg ICBpZiAoIXBvcGNsdmwoKSkgeyAgICAgICAvKiBwb3AgdXAgdG8gbmV4dCBoaWdoZXIgbGV2ZWwg Ki8KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TGFiZWwgJyVzJyBub3QgZm91bmRcbiIs cyk7IC8qIGlmIG5vbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKDApOyAgICAgICAg ICAvKiBxdWl0ICovCisgICAgICAgICAgICAgICAgfSBlbHNlIGNvbnRpbnVlOyAgICAgICAgLyog b3RoZXJ3aXNlIGxvb2sgYWdhaW4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy bih4KTsgICAgICAgICAgICAgICAgICAvKiBTZW5kIGJhY2sgcmV0dXJuIGNvZGUgKi8KKyAgICAg ICAgfQorICAgIH0KKyAgICBwcmludGYoIj9TdGFjayBwcm9ibGVtIGluIEdPVE8gJXNcbiIscyk7 IC8qIFNob3VsZG4ndCBzZWUgdGhpcyAqLworICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBO T1NQTCAqLworCisvKiBGaW5pc2ggcGFyc2luZyBhbmQgZG8gdGhlIElGLCBYSUYsIGFuZCBXSElM RSBjb21tYW5kcyAqLworCisjaWZuZGVmIE5PU1BMCisKKy8qICBDIEggSyBWIEEgUiAgLS0gIENo ZWNrIChpZiBpdCdzIGEpIFZhcmlhYmxlICAqLworCisKKyNpZmRlZiBPTERDSEtWQVIKKy8qCisg IENydWRlIGFuZCBkaXNndXN0aW5nLCBidXQgbmVlZGVkIGZvciBPUy8yLCBET1MsIGFuZCBXaW5k b3dzLCB3aGVyZSBmaWxlbmFtZXMKKyAgaGF2ZSBiYWNrc2xhc2hlcyBpbiB0aGVtLiAgSG93IGRv IHdlIGtub3cgaWYgYSBiYWNrc2xhc2ggaW4gYSBmaWxlbmFtZSBpcyBhCisgIGRpcmVjdG9yeSBz ZXBhcmF0b3IsIG9yIGlmIGl0J3MgYSBLZXJtaXQgYmFja3NsYXNoPyAgVGhpcyByb3V0aW5lIGRv ZXMgYQorICByb3VnaCBzeW50YXggY2hlY2sgb2YgdGhlIG5leHQgZmV3IGNoYXJhY3RlcnMgYW5k IGlmIGl0IGxvb2tzIGxpa2UgaXQgTUlHSFQKKyAgYmUgYSB2YXJpYWJsZSwgdGhlbiBpdCB0cmll cyB0byBldmFsdWF0ZSBpdCwgYW5kIGlmIHRoZSByZXN1bHQgaXMgbm90IGVtcHR5LAorICB3ZSBz YXkgaXQncyBhIHZhcmlhYmxlLCBhbHRob3VnaCBzb21ldGltZXMgaXQgbWlnaHQgbm90IGJlIC0t IHNvbWUgY2FzZXMgYXJlCisgIHRydWx5IGFtYmlndW91cy4gIEZvciBleGFtcGxlIHRoZXJlIG1p Z2h0IGEgRE9TIGRpcmVjdG9yeSBjYWxsZWQgXCVhLCBhbmQKKyAgd2UgYWxzbyBoYXZlIGEgdmFy aWFibGUgd2l0aCB0aGUgc2FtZSBuYW1lLiAgVGhpcyBpcyBhbGwgZm9yIHRoZSBzYWtlIG9mIG5v dAorICBoYXZpbmcgdG8gdGVsbCBQQyB1c2VycyB0aGF0IHRoZXkgaGF2ZSB0byBkb3VibGUgYWxs IGJhY2tzbGFzaGVzIGluIGZpbGUKKyAgYW5kIGRpcmVjdG9yeSBuYW1lcy4KKyovCisjZWxzZQor LyoKKyAgU29tZXdoYXQgbGVzcyBjcnVkZSAmIGRpc2d1c3RpbmcuICBUaGUgcHJldmlvdXMgbWV0 aG9kIHdhcyBub25kZXRlcm1pbmlzdGljCisgIGFuZCAod29yc2UpIGl0IGludGVyZmVyZWQgd2l0 aCBtYWNybyBhcmd1bWVudCBwYXNzaW5nLiAgU28gbm93IHdlIG9ubHkKKyAgY2hlY2sgdGhlIHN5 bnRheCBvZiBiYWNrc2xhc2gtaXRlbXMgdG8gc2VlIGlmIHRoZXkgYXJlIHZhcmlhYmxlcywgYnV0 IHdlCisgIGRvIE5PVCBjaGVjayB0aGVpciB2YWx1ZXMuCisqLworI2VuZGlmIC8qIE9MRENIS1ZB UiAqLworLyoKKyAgQ2FsbCB3aXRoIGEgc3RyaW5nIHBvaW50ZXIgcG9pbnRpbmcgYXQgdGhlIGJh Y2tzbGFzaCBvZiB0aGUgcHVycG9ydGVkCisgIHZhcmlhYmxlLiAgUmV0dXJucyAxIGlmIGl0IGhh cyB0aGUgc3ludGF4IG9mIGEgdmFyaWFibGUsIDAgaWYgbm90LgorKi8KK2ludAorY2hrdmFyKHMp IGNoYXIgKnM7IHsKKyAgICBpbnQgeiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXR1cm4gY29kZSAtIGFzc3VtZSBmYWlsdXJlLiAqLworICAgIGlmICghcykgcyA9ICIiOyAgICAg ICAgICAgICAgICAgICAgIC8qIFdhdGNoIG91ciBmb3IgbnVsbCBwb2ludGVycy4gKi8KKyAgICBp ZiAoISpzKSByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAvKiBFbXB0eSBhcmcgc28gbm90IGEg dmFyaWFibGUuICovCisgICAgaWYgKCpzID09IENNRFEpIHsgICAgICAgICAgICAgICAgICAgLyog T2JqZWN0IGJlZ2lucyB3aXRoIGJhY2tzbGFzaC4gKi8KKyAgICAgICAgY2hhciBjOworICAgICAg ICBjID0gc1sxXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBmb2xsb3dpbmcg YmFja3NsYXNoLiAqLworICAgICAgICBpZiAoYykgeworICAgICAgICAgICAgaW50IHQgPSAwOwor ICAgICAgICAgICAgaWYgKGMgPT0gQ01EUSkgICAgICAgICAgICAgIC8qIFF1b3RlZCBiYWNrc2xh c2ggKi8KKyAgICAgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgICAgICAgYyA9IChjaGFyKSAo aXNsb3dlcihjKSA/IHRvdXBwZXIoYykgOiBjKTsgLyogT3RoZXJ3aXNlLi4uICovCisgICAgICAg ICAgICBpZiAoYyA9PSAnJScpIHsgICAgICAgICAgICAgLyogU2ltcGxlIHZhcmlhYmxlICovCisj aWZkZWYgT0xEQ0hLVkFSCisgICAgICAgICAgICAgICAgdCA9IDE7CisjZWxzZQorICAgICAgICAg ICAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBPTERDSEtWQVIgKi8KKyAgICAgICAgICAgIH0g ZWxzZSBpZiAoYyA9PSAnJicpIHsgICAgICAvKiBBcnJheSAqLworICAgICAgICAgICAgICAgIGlm ICghc1syXSkgcmV0dXJuKDApOworICAgICAgICAgICAgICAgIGlmIChzWzNdID09ICdbJykKKyAg ICAgICAgICAgICAgICAgIHQgPSBja2luZGV4KCJdIixzLDQsMCwxKTsKKyNpZm5kZWYgT0xEQ0hL VkFSCisgICAgICAgICAgICAgICAgcmV0dXJuKCh0ID4gMCkgPyAxIDogMCk7CisjZW5kaWYgLyog T0xEQ0hLVkFSICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJyQnIHx8ICAgICAgLyog RW52aXJvbm1lbnQgdmFyaWFibGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgYyA9PSAnVicg fHwgICAgICAvKiBCdWlsdC1pbiB2YXJpYWJsZSAqLworICAgICAgICAgICAgICAgICAgICAgICBj ID09ICdNJykgeyAgICAgIC8qIE1hY3JvIG5hbWUgKi8KKyAgICAgICAgICAgICAgICB0ID0gKHNb Ml0gPT0gJygnKTsKKyNpZm5kZWYgT0xEQ0hLVkFSCisgICAgICAgICAgICAgICAgcmV0dXJuKCh0 ID4gMCkgPyAxIDogMCk7CisjZW5kaWYgLyogT0xEQ0hLVkFSICovCisgICAgICAgICAgICB9IGVs c2UgaWYgKGMgPT0gJ0YnKSB7ICAgICAgLyogRnVuY3Rpb24gcmVmZXJlbmNlICovCisgICAgICAg ICAgICAgICAgLyogRG9uJ3QgYWN0dWFsbHkgY2FsbCBpdCAtIGl0IG1pZ2h0IGhhdmUgc2lkZSBl ZmZlY3RzICovCisgICAgICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgaWYgKCh4 ID0gY2tpbmRleCgiKCIscywzLDAsMSkpKSAvKiBKdXN0IGNoZWNrIHN5bnRheCAqLworICAgICAg ICAgICAgICAgICAgaWYgKCh4ID0gY2tpbmRleCgiKSIscyx4LDAsMSkpKQorICAgICAgICAgICAg ICAgICAgICB6ID0gMTsKKyAgICAgICAgICAgICAgICAvKiBJbnNlcnQgYSBiZXR0ZXIgc3ludGF4 IGNoZWNrIGhlcmUgaWYgbmVjZXNzYXJ5ICovCisgICAgICAgICAgICB9CisjaWZkZWYgT0xEQ0hL VkFSCisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAgICAgICAgIHQgPSAyNTU7ICAgICAg ICAgICAgICAgIC8qIFRoaXMgbGV0cyB1cyB0ZXN0IFx2KHh4eCkgKi8KKyAgICAgICAgICAgICAg ICBscCA9IGxpbmU7ICAgICAgICAgICAgICAvKiBhbmQgZXZlbiBcZi4uLih4eHgpICovCisgICAg ICAgICAgICAgICAgenpzdHJpbmcocywmbHAsJnQpOyAgICAgLyogRXZhbHVhdGUgaXQsIHdoYXRl dmVyIGl0IGlzLiAqLworICAgICAgICAgICAgICAgIHQgPSBzdHJsZW4obGluZSk7ICAgICAgIC8q IEdldCBpdHMgbGVuZ3RoLiAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImNoa3ZhciIs bGluZSx0KTsKKyAgICAgICAgICAgICAgICB6ID0gdCA+IDA7ICAgICAgICAgICAgICAvKiBJZiBs ZW5ndGggPiAwLCBpdCdzIGRlZmluZWQgKi8KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBPTERD SEtWQVIgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4oeik7Cit9CisKKy8qICBCIE8g TyBMIEUgWCBQICAtLSAgRXZhbHVhdGUgYSBCb29sZWFuIGV4cHJlc3Npb24gICovCisKKyNkZWZp bmUgQk9PTExFTiAxMDI0CitzdGF0aWMgY2hhciBib29sdmFsW0JPT0xMRU5dOworCitpbnQKK2Jv b2xleHAoY3gpIGludCBjeDsgeworICAgIGludCB4LCB5LCB6OyBjaGFyICpzLCAqcDsKKyAgICBp bnQgcGFyZW5zID0gMCwgcGNvdW50ID0gMCwgZWNvdW50ID0gMDsKKyAgICBjaGFyICpxLCAqYng7 CisgICAgc3RydWN0IEZEQiBrdywgbnU7CisjaWZkZWYgRk5GTE9BVAorICAgIHN0cnVjdCBGREIg Zmw7CisgICAgQ0tGTE9BVCBmMSA9IDAuMCwgZjIgPSAwLjA7CisgICAgaW50IGYxZmxhZyA9IDAs IGYyZmxhZyA9IDA7CisjZW5kaWYgLyogRk5GTE9BVCAqLworI2lmZGVmIE9TMgorICAgIGV4dGVy biBpbnQga2V5bWFjOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgbm90ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Igd2hldGhlciAiTk9UIiB3YXMgc2VlbiAqLwor ICAgIHogPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWwgSUYgY29u ZGl0aW9uICovCisgICAgaWZhcmdzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ291 bnQgb2YgSUYgY29uZGl0aW9uIHdvcmRzICovCisgICAgYnggPSBib29sdmFsOyAgICAgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBib29sZWFuIHZhbHVlICovCisgICAgKmJ4ID0gTlVM OworCisgIGlmYWdhaW46CisgICAgY21mZGJpKCZrdywgICAgICAgICAgICAgICAgICAgICAgICAg LyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICBfQ01LRVksICAg ICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJOdW1iZXIsIG51bWVy aWMtdmFsdWVkIHZhcmlhYmxlLCBCb29sZWFuIGV4cHJlc3Npb24sIG9yIGtleXdvcmQiLAorICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LworICAgICAgICAgICBuaWYsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gc2lsZW50ICovCisgICAgICAgICAg IHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwor ICAgICAgICAgICBpZnRhYiwgICAgICAgICAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUg Ki8KKyAgICAgICAgICAgJm51ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRv IG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21mZGJpKCZudSwgICAgICAgICAgICAg ICAgICAgICAgICAgLyogMm5kIEZEQiAtIEFuIGludGVnZXIgKi8KKyAgICAgICAgICAgX0NNTlVN LCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAwLAorICAg ICAgICAgICAwLAorICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAgICAgTlVMTCwKKyNpZmRl ZiBGTkZMT0FUCisgICAgICAgICAgICZmbAorI2Vsc2UKKyAgICAgICAgICAgTlVMTAorI2VuZGlm IC8qIEZORkxPQVQgKi8KKyAgICAgICAgICAgKTsKKyNpZmRlZiBGTkZMT0FUCisgICAgY21mZGJp KCZmbCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQSBmbG9hdGluZy1wb2ludCBudW1iZXIg Ki8KKyAgICAgICAgICAgX0NNRkxELCAgICAgICAgICAgICAgICAgICAgICAvKiBmY29kZSAqLwor ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhscG1zZyAqLworICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAg ICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAq LworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVy aWMgZGF0YSAxICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKyAgICAgICAgICAgeHhzdHJpbmcsCisgICAgICAgICAg IE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBGTkZMT0FU ICovCisgICAgeCA9IGNtZmRiKCZrdyk7ICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgYSBr ZXl3b3JkIG9yIGEgbnVtYmVyICovCisgICAgZGVidWcoRjExMSwiYm9vbHZhbCBjbWZkYiIsIiIs eCk7CisgICAgaWYgKHggPCAwKSB7CisgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgIHgg PSAtMjsKKyAgICAgICAgcmV0dXJuKHgpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJib29sdmFs IHN3aXRjaCIsIiIsY21yZXN1bHQuZmNvZGUpOworICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUp IHsgICAgICAgICAgIC8qIFdoYXQgZGlkIHdlIGdldD8gKi8KKyAgICAgIGNhc2UgX0NNRkxEOiB7 CQkJLyogQSAiZmllbGQiICovCisJICBpbnQgaTsKKwkgIGNoYXIgKiBzOworCSAgcyA9IGNtcmVz dWx0LnNyZXN1bHQ7CisvKgorICBDLUtlcm1pdCA5LjA6IFRoaXMgYWxsb3dzIGEgbWFjcm8gbmFt ZSB0byBzZXJ2ZSBhcyBhbgorICBJRiBjb25kaXRpb24gd2l0aG91dCBoYXZpbmcgdG8gZW5jbG9z ZSBpdCBpbiBcbSguLi4pLgorKi8KKwkgIGlmICgKKyNpZmRlZiBGTkZMT0FUCSAgCisJICAgICAg IWlzZmxvYXQoY21yZXN1bHQuc3Jlc3VsdCwwKSAvKiBOb3QgYSBudW1iZXIgKi8KKyNlbHNlCisJ ICAgICAgIWNoa251bShjbXJlc3VsdC5zcmVzdWx0KSAvKiBOb3QgYSBudW1iZXIgKi8KKyNlbmRp ZgkvKiBGTkZMT0FUICovCisJICAgICAgKSB7CisJICAgICAgaSA9IG1sb29rKG1hY3RhYixjbXJl c3VsdC5zcmVzdWx0LG5tYWMpOyAvKiBMb29rIGl0IHVwICovCisJICAgICAgaWYgKGkgPiAtMSkJ CS8qIGluIHRoZSBtYWNybyB0YWJsZSAqLworCQlzID0gbWFjdGFiW3hdLm12YWw7CS8qIGFuZCBn ZXQgaXRzIHZhbHVlICovCisJICAgICAgZWxzZQkJCS8qIE90aGVyd2lzZSBpZiBubyBzdWNoIG1h Y3JvICovCisJCXMgPSAiMCI7CQkvKiBldmFsdWF0ZSBhcyBGQUxTRS4gKi8KKwkgIH0KKyNpZmRl ZiBGTkZMT0FUCisgICAgICAgIGlmIChpc2Zsb2F0KHMsMCkpIHsJCS8qIEEgZmxvYXRpbmctcG9p bnQgbnVtYmVyPyAqLworICAgICAgICAgICAgZjEgPSBmbG9hdHZhbDsgICAgICAgICAgICAgIC8q IFllcywgZ2V0IGl0cyB2YWx1ZSAqLworICAgICAgICAgICAgZjFmbGFnID0gMTsgICAgICAgICAg ICAgICAgIC8qIHJlbWVtYmVyIHdlIGRpZCB0aGlzICovCisgICAgICAgICAgICBpZmMgPSA5OTk5 OyAgICAgICAgICAgICAgICAgLyogU2V0IHNwZWNpYWwgImlmLWNvZGUiICovCisgICAgICAgIH0K KyNlbHNlCisJaWYgKGNoa251bShzKSkgeworCSAgICBjbXJlc3VsdC5ucmVzdWx0ID0gYXRvaShz KTsKKwkgICAgaWZjID0gOTk5OTsKKwkgICAgYnJlYWs7CisJfQorI2VuZGlmIC8qIEZORkxPQVQg Ki8KKwllbHNlCisJICByZXR1cm4oLTIpOworICAgICAgfQorICAgICAgY2FzZSBfQ01OVU06ICAg ICAgICAgICAgICAgICAgICAgIC8qIEEgbnVtYmVyLi4uICovCisgICAgICAgIGlmYyA9IDk5OTk7 ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHNwZWNpYWwgImlmLWNvZGUiICovCisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBfQ01LRVk6ICAgICAgICAgICAgICAgICAgICAgIC8qIEEga2V5 d29yZCAqLworICAgICAgICBpZmMgPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgIC8qIEdldCBp Zi1jb2RlICovCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu KC0yKTsKKyAgICB9CisgICAgc3dpdGNoIChpZmMpIHsgICAgICAgICAgICAgICAgICAgICAgLyog c2V0IHogPSAxIGZvciB0cnVlLCAwIGZvciBmYWxzZSAqLworICAgICAgY2FzZSA5OTk5OiAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciAqLworI2lmZGVmIEZORkxPQVQKKyAgICAgICAg aWYgKGYxZmxhZykgeworICAgICAgICAgICAgeiA9IChmMSA9PSAwLjApID8gMCA6IDE7CisgICAg ICAgIH0gZWxzZQorI2VuZGlmIC8qIEZORkxPQVQgKi8KKyAgICAgICAgeiA9IChjbXJlc3VsdC5u cmVzdWx0ID09IDApID8gMCA6IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBYWElGTFA6 ICAgICAgICAgICAgICAgICAgICAgIC8qIExlZnQgcGFyZW4gKi8KKyAgICAgICAgaWYgKHBjb3Vu dCA9PSAwICYmIGlmYXJncyA+IDApCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgcGFy ZW5zID0gMTsKKyAgICAgICAgcGNvdW50Kys7CisgICAgICAgIGlmYXJncysrOworICAgICAgICAq YngrKyA9ICcoJzsKKyAgICAgICAgZ290byBpZmFnYWluOworICAgICAgY2FzZSBYWElGUlA6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFJpZ2h0IHBhcmVuICovCisgICAgICAgIGlmICghcGFyZW5z KQorICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIGlmICgtLXBjb3VudCA8IDApCisgICAg ICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgaWZhcmdzKys7CisgICAgICAgICpieCsrID0gJykn OworICAgICAgICAqYnggPSBOVUw7CisgICAgICAgIGlmIChwY291bnQgPT0gMCkKKyAgICAgICAg ICBnb3RvIGlmZW5kOworICAgICAgICBnb3RvIGlmYWdhaW47CisgICAgICBjYXNlIFhYSUZBTjog ICAgICAgICAgICAgICAgICAgICAgLyogQU5EICgmJikgKi8KKyAgICAgICAgaWZhcmdzKys7Cisg ICAgICAgIGlmICghZWNvdW50KQorICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgICpieCsr ID0gJyYnOworICAgICAgICBnb3RvIGlmYWdhaW47CisgICAgICBjYXNlIFhYSUZPUjogICAgICAg ICAgICAgICAgICAgICAgLyogT1IgKHx8KSAqLworICAgICAgICBpZmFyZ3MrKzsKKyAgICAgICAg aWYgKCFlY291bnQpCisgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgKmJ4KysgPSAnfCc7 CisgICAgICAgIGdvdG8gaWZhZ2FpbjsKKyAgICAgIGNhc2UgWFhJRk5POiAgICAgICAgICAgICAg ICAgICAgICAvKiBJRiBOT1QgWyBOT1QgWyBOT1QgLi4uIF0gXSAqLworICAgICAgICBpZiAoYngg PiBib29sdmFsKSB7ICAgICAgICAgICAgIC8qIGV2YWxhKCkgZG9lc24ndCBsaWtlIGNhc2NhZGVk ICovCisgICAgICAgICAgICBpZiAoKihieC0xKSA9PSAnIScpIHsgICAgICAgLyogdW5hcnkgb3Bl cmF0b3JzLi4uICovCisgICAgICAgICAgICAgICAgKihieC0xKSA9IE5VTDsgICAgICAgICAgLyog U28gaGVyZSwgdHdvIHdyb25ncyBtYWtlIGEgcmlnaHQuICovCisgICAgICAgICAgICAgICAgYngt LTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKmJ4KysgPSAnISc7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqYngrKyA9ICchJzsK KyAgICAgICAgfQorICAgICAgICBpZmFyZ3MrKzsKKyAgICAgICAgZ290byBpZmFnYWluOworICAg ICAgY2FzZSBYWElGVFI6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIFRSVUUgKi8KKyAgICAg ICAgeiA9IDE7CisgICAgICAgIGRlYnVnKEYxMDEsImlmIHRydWUiLCIiLHopOworICAgICAgICBp ZmFyZ3MgKz0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFhYSUZOVDogICAgICAgICAg ICAgICAgICAgICAgLyogSUYgRkFMU0UgKi8KKyAgICAgICAgeiA9IDA7CisgICAgICAgIGRlYnVn KEYxMDEsImlmIHRydWUiLCIiLHopOworICAgICAgICBpZmFyZ3MgKz0gMTsKKyAgICAgICAgYnJl YWs7CisgICAgICBjYXNlIFhYSUZTVTogICAgICAgICAgICAgICAgICAgICAgLyogSUYgU1VDQ0VT UyAqLworICAgICAgICB6ID0gKCBzdWNjZXNzICE9IDAgKSA/IDEgOiAwOworICAgICAgICBkZWJ1 ZyhGMTAxLCJpZiBzdWNjZXNzIiwiIix6KTsKKyAgICAgICAgaWZhcmdzICs9IDE7CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBYWElGRkE6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIEZB SUxVUkUgKi8KKyAgICAgICAgeiA9ICggc3VjY2VzcyA9PSAwICkgPyAxIDogMDsKKyAgICAgICAg ZGVidWcoRjEwMSwiaWYgZmFpbHVyZSIsIiIseik7CisgICAgICAgIGlmYXJncyArPSAxOworICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBYWElGREU6ICAgICAgICAgICAgICAgICAgICAgIC8q IElGIERFRklORUQgKi8KKyAgICAgICAgaWYgKCh4ID0gY21mbGQoIk1hY3JvIG9yIHZhcmlhYmxl IG5hbWUiLCIiLCZzLE5VTEwpKSA8IDApCisgICAgICAgICAgcmV0dXJuKCh4ID09IC0zKSA/IC0y IDogeCk7CisKKyAgICAgICAgaWYgKCpzID09IENNRFEpIHsKKyAgICAgICAgICAgIGNoYXIgKiBs cDsKKyAgICAgICAgICAgIGNoYXIgbGluZVsyNTZdOworICAgICAgICAgICAgaW50IHQsIHg7Cisg ICAgICAgICAgICBpZiAoKihzKzEpID09ICdmJyB8fCAqKHMrMSkgPT0gJ0YnKSB7IC8qIEJ1aWx0 LWluIGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgZm5j dGFiW107CisgICAgICAgICAgICAgICAgZXh0ZXJuIGludCBuZnVuY3M7CisgICAgICAgICAgICAg ICAgY2tzdHJuY3B5KGxpbmUscysyLDI1Nik7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVbMF0p IHsKKyAgICAgICAgICAgICAgICAgICAgbHAgPSBja3N0cmNocihsaW5lLCcoJyk7CisgICAgICAg ICAgICAgICAgICAgIGlmIChscCkgKmxwID0gTlVMOworICAgICAgICAgICAgICAgICAgICB4ID0g bG9va3VwKGZuY3RhYixsaW5lLG5mdW5jcywmdCk7CisgICAgICAgICAgICAgICAgICAgIHogPSB4 ID4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImlm IGRlZmluZWQgZnVuY3Rpb24iLGxpbmUseik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCoocysx KSA9PSAndicgfHwgKihzKzEpID09ICdWJykgeyAvKiA4LjAuMjAwICovCisgICAgICAgICAgICAg ICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdmFydGFiW107CisgICAgICAgICAgICAgICAgZXh0ZXJu IGludCBudmFyczsKKyAgICAgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAo KihzKzIpID09ICcoJykgeworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzKzMs MjU2KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVbMF0pIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGxwID0gY2tzdHJjaHIobGluZSwnKScpOworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGxwKSAqbHAgPSBOVUw7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gbG9va3Vw KHZhcnRhYixsaW5lLG52YXJzLCZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHogPSB4ID4g LTE7CisJCQlpZiAoeikgewkvKiA4LjAuMjAzICovCisJCQkgICAgaW50IHQ7CS8qIEl0IG11c3Qg aGF2ZSBhIHZhbHVlIHRvIHN1Y2NlZWQgKi8KKwkJCSAgICB0ID0gMjU1OwkvKiBhcyBpbiBDLUtl cm1pdCA2LjAgYW5kIDcuMCAqLworCQkJICAgIGxwID0gbGluZTsJLyogKHRoaXMgd2FzIGJyb2tl biBpbiA4LjAuMjAwLTIwMSkgKi8KKwkJCSAgICB6enN0cmluZyhzLCZscCwmdCk7CisJCQkgICAg dCA9IHN0cmxlbihsaW5lKTsKKwkJCSAgICB6ID0gbGluZVswXSA/IDEgOiAwOworCQkJfQorICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsImlmIGRlZmluZWQgdmFyaWFibGUiLGxpbmUseik7CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIHogPSBjaGt2YXIocyk7ICAgICAgICAgIC8qIFN0YXJ0cyB3 aXRoIGJhY2tzbGFzaCAqLworICAgICAgICAgICAgICAgIGlmICh6ID4gMCkgeyAgICAgICAgICAg IC8qIFllcy4uLiAqLworICAgICAgICAgICAgICAgICAgICB0ID0gMjU1OyAgICAgICAgICAgIC8q IHRoYW4gYnVmZmVyIHNvIGlmIHp6c3RyaW5nIGZhaWxzICAqLworICAgICAgICAgICAgICAgICAg ICBscCA9IGxpbmU7ICAgICAgICAgIC8qIGNoZWNrIGZvciB0aGF0IC0tIG92ZXJmbG93IG1lYW5z ICovCisgICAgICAgICAgICAgICAgICAgIGxpbmVbMF0gPSBOVUw7ICAgICAgLyogdGhlIHF1YW50 aXR5IGlzIGRlZmluZWQuICovCisgICAgICAgICAgICAgICAgICAgIHggPSB6enN0cmluZyhzLCZs cCwmdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoeCA8IDAgJiYgdCAhPSAyNTUpIHx8ICFs aW5lWzBdKQorICAgICAgICAgICAgICAgICAgICAgIHogPSAwOworICAgICAgICAgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJpZiBkZWZpbmVkIHp6c3RyaW5nIixsaW5lLHopOworICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJpZiBkZWZpbmVkIHp6c3RyaW5nIHQiLCIiLHQpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHogPSAobXhsb29rKG1hY3RhYixzLG5tYWMpID4gLTEpOyAvKiBMb29rIGZvciBleGFjdCBtYXRj aCAqLworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTEsImlmIGRlZmluZWQgZmluYWwiLHMs eik7CisgICAgICAgIGlmYXJncyArPSAyOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBY WElGREM6IHsgICAgICAgICAgICAgICAgICAgIC8qIElGIERFQ0xBUkVEICovCisgICAgICAgICAg Y2hhciAqIGxwOworICAgICAgICAgIGNoYXIgbGluZVszMl07CisgICAgICAgICAgaW50IGosIGss IHQsIHg7CisgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIkFycmF5IG5hbWUiLCIiLCZzLE5VTEwp KSA8IDApCisgICAgICAgICAgICByZXR1cm4oKHggPT0gLTMpID8gLTIgOiB4KTsKKyAgICAgICAg ICBpZiAoKnMgPT0gQ01EUSkgeworICAgICAgICAgICAgICBpZiAoKihzKzEpICE9ICcmJykgewor ICAgICAgICAgICAgICAgICAgdCA9IDMxOworICAgICAgICAgICAgICAgICAgbHAgPSBsaW5lOwor ICAgICAgICAgICAgICAgICAgbGluZVswXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgIHggPSB6 enN0cmluZyhzLCZscCwmdCk7CisgICAgICAgICAgICAgICAgICBzID0gbGluZTsKKyAgICAgICAg ICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICBpZiAoKHgg PSBhcnJheWJvdW5kcyhzLCZqLCZrKSkgPiAtMSkgeworICAgICAgICAgICAgICBpZiAoYV9wdHJb eF0pIHsKKyAgICAgICAgICAgICAgICAgIGlmIChqIDwgMSkKKyAgICAgICAgICAgICAgICAgICAg eiA9IDE7CisgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqIDw9IGFfZGltW3hdKQorICAgICAg ICAgICAgICAgICAgICB6ID0gMTsKKyAgICAgICAgICAgICAgICAgIGlmICh6ID09IDEgJiYgayA+ IGFfZGltW3hdKQorICAgICAgICAgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgWFhJRkJH OiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBCQUNLR1JPVU5EICovCisgICAgICBjYXNlIFhY SUZGRzogICAgICAgICAgICAgICAgICAgICAgLyogSUYgRk9SRUdST1VORCAqLworICAgICAgICBi Z2NoaygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGJhY2tncm91bmQgc3RhdHVz ICovCisgICAgICAgIGlmIChpZmMgPT0gWFhJRkZHKSAgICAgICAgICAgICAgLyogRm9yZWdyb3Vu ZCAqLworICAgICAgICAgIHogPSBwZmxhZyA/IDEgOiAwOworICAgICAgICBlbHNlIHogPSBwZmxh ZyA/IDAgOiAxOyAgICAgICAgIC8qIEJhY2tncm91bmQgKi8KKyAgICAgICAgaWZhcmdzICs9IDE7 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZDTzogICAgICAgICAgICAgICAgICAg ICAgLyogSUYgQ09VTlQgKi8KKyAgICAgICAgeiA9ICggLS1jb3VudFtjbWRsdmxdID4gMCApOwor ICAgICAgICBpZiAoY3ggPT0gWFhXSEkpIGNvdW50W2NtZGx2bF0gKz0gMjsgLyogRG9uJ3QgYXNr Li4uICovCisgICAgICAgIGRlYnVnKEYxMDEsImlmIGNvdW50IiwiIix6KTsKKyAgICAgICAgaWZh cmdzICs9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZFWDogICAgICAgICAg ICAgICAgICAgICAgLyogSUYgRVhJU1QgKi8KKyNpZmRlZiBDS19UTVBESVIKKyAgICAgIGNhc2Ug WFhJRkRJOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBESVJFQ1RPUlkgKi8KKyNlbmRpZiAv KiBDS19UTVBESVIgKi8KKyAgICAgIGNhc2UgWFhJRkFCOiAgICAgICAgICAgICAgICAgICAgICAv KiBJRiBBQlNPTFVURSAqLworICAgICAgY2FzZSBYWElGTE46CQkJLyogSUYgTElOSyAqLworICAg ICAgICBpZiAoKHggPSBjbWZsZCgKKyAgICAgICAgICAgICAgICAgICAgICAgKChpZmMgPT0gWFhJ RkRJKSA/ICJEaXJlY3RvcnkgbmFtZSIgOiAiRmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAg ICAiIiwmcywKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCAgICAgICAg ICAgICAvKiBUaGlzIGFsbG93cyBcJ3MgaW4gZmlsZW5hbWVzICovCisjZWxzZQorICAgICAgICAg ICAgICAgICAgICAgICB4eHN0cmluZworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICAgICAgICAg ICAgICAgICApKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAg ICAgICAgZXh0ZXJuIGludCBjbWZsZ3M7CisgICAgICAgICAgICAgICAgaWYgKGNtZmxncyA9PSAx KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0ZpbGUgb3IgZGlyZWN0b3J5IG5hbWUg cmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAg ICAgcyA9IGJyc3RyaXAocyk7CisjaWZkZWYgVU5JWAorCWlmIChpZmMgPT0gWFhJRkxOKSB7CisJ ICAgIHogPSBpc2FsaW5rKHMpOworCX0gZWxzZQorI2VuZGlmCS8qIFVOSVggKi8KKyAgICAgICAg aWYgKGlmYyA9PSBYWElGQUIpIHsKKyAgICAgICAgICAgIHogPSBpc2Fic29sdXRlKHMpOworICAg ICAgICB9IGVsc2UgaWYgKGlmYyA9PSBYWElGRVgpIHsKKyAgICAgICAgICAgIHogPSAoemdldGZz KHMpID4gLTFMKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImlmIGV4aXN0IDEiLCIiLHopOwor I2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKCF6KSB7ICAgICAgICAgICAgICAgICAgIC8qIEZp bGUgbm90IGZvdW5kLiAqLworICAgICAgICAgICAgICAgIGludCB0OyAgICAgICAgICAgICAgICAg IC8qIFRyeSBleHBhbmRpbmcgdmFyaWFibGVzICovCisgICAgICAgICAgICAgICAgdCA9IExJTkJV RlNJWi0xOyAgICAgICAgLyogYW5kIGxvb2tpbmcgYWdhaW4uICovCisgICAgICAgICAgICAgICAg bHAgPSBsaW5lOworICAgICAgICAgICAgICAgIHp6c3RyaW5nKHMsJmxwLCZ0KTsKKyAgICAgICAg ICAgICAgICBzID0gbGluZTsKKyAgICAgICAgICAgICAgICB6ID0gKCB6Y2hraShzKSA+IC0xTCAp OworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImlmIGV4aXN0IDIiLCIiLHopOworICAgICAg ICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX1RNUERJUgorICAgICAgICB9IGVs c2UgeworI2lmZGVmIFZNUworICAgICAgICAgICAgeiA9ICh6Y2hraShzKSA9PSAtMikKKyNlbHNl CisvKiBCZWNhdXNlIHRoaXMgZG9lc24ndCBjYXRjaCAkRElTSzE6W0ZPT11CTEFILkRJUjsxICov CisgICAgICAgICAgICB6ID0gaXNkaXIocykKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgfHwg KGlzYWxwaGEoc1swXSkgJiYgc1sxXSA9PSAnOicgJiYgc1syXSA9PSBOVUwpCisjZW5kaWYgLyog T1MyICovCisjZW5kaWYgLyogVk1TICovCisgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGRl YnVnKEYxMDEsImlmIGRpcmVjdG9yeSAxIiwiIix6KTsKKworICAgICAgICAgICAgaWYgKCF6KSB7 CQkJLyogRmlsZSBub3QgZm91bmQuICovCisgICAgICAgICAgICAgICAgaW50IHQ7ICAgICAgICAg ICAgICAgICAgLyogVHJ5IGV4cGFuZGluZyB2YXJpYWJsZXMgKi8KKyAgICAgICAgICAgICAgICB0 ID0gTElOQlVGU0laLTE7ICAgICAgICAvKiBhbmQgbG9va2luZyBhZ2Fpbi4gKi8KKyAgICAgICAg ICAgICAgICBscCA9IGxpbmU7CisgICAgICAgICAgICAgICAgenpzdHJpbmcocywmbHAsJnQpOwor ICAgICAgICAgICAgICAgIHMgPSBsaW5lOworICAgICAgICAgICAgICAgIHogPSBpc2RpcihzKQor I2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgfHwgKGlzYWxwaGEoc1swXSkgJiYgc1sxXSA9 PSAnOicgJiYgc1syXSA9PSBOVUwpCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAg ICAgIDsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJpZiBkaXJlY3RvcnkgMiIsIiIseik7 CisgICAgICAgICAgICB9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisgICAgICAgIH0KKyAgICAg ICAgaWZhcmdzICs9IDI7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZFUTogICAg ICAgICAgICAgICAgICAgICAgLyogSUYgRVFVQUwgKHN0cmluZyBjb21wYXJpc29uKSAqLworICAg ICAgY2FzZSBYWElGTEw6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIExleGljYWxseSBMZXNz IFRoYW4gKi8KKyAgICAgIGNhc2UgWFhJRkxHOiAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBM ZXhpY2FsbHkgR3JlYXRlciBUaGFuICovCisgICAgICAgIGlmICgoeCA9IGNtZmxkKCJmaXJzdCB3 b3JkIG9yIHZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAg ICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1RleHQgcmVxdWlyZWRc biIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9IGVsc2UgcmV0 dXJuKHgpOworICAgICAgICB9CisgICAgICAgIHMgPSBicnN0cmlwKHMpOyAgICAgICAgICAgICAg ICAgLyogU3RyaXAgYnJhY2VzICovCisgICAgICAgIHggPSAoaW50KXN0cmxlbihzKTsKKyAgICAg ICAgaWYgKHggPiBMSU5CVUZTSVotMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/SUY6IHN0cmlu Z3MgdG9vIGxvbmdcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAg ICAgICBscCA9IGxpbmU7ICAgICAgICAgICAgICAgICAgICAgIC8qIGxwIHBvaW50cyB0byBmaXJz dCBzdHJpbmcgKi8KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAg ICBpZiAoKHkgPSBjbWZsZCgic2Vjb25kIHdvcmQgb3IgdmFyaWFibGUgbmFtZSIsIiIsJnMseHhz dHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IC0zKSB7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCI/VGV4dCByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgICAgIH0gZWxzZSByZXR1cm4oeSk7CisgICAgICAgIH0KKyAgICAgICAgcyA9 IGJyc3RyaXAocyk7CisgICAgICAgIHkgPSAoaW50KXN0cmxlbihzKTsKKyAgICAgICAgaWYgKHgg KyB5ICsgMiA+IExJTkJVRlNJWikgeworICAgICAgICAgICAgcHJpbnRmKCI/SUY6IHN0cmluZ3Mg dG9vIGxvbmdcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAg ICB0cCA9IGxwICsgeCArIDI7ICAgICAgICAgICAgICAgIC8qIHRwIHBvaW50cyB0byBzZWNvbmQg c3RyaW5nICovCisgICAgICAgIHN0cmNweSh0cCxzKTsgICAgICAgICAgICAgICAgICAgLyogc2Fm ZSAoY2hlY2tlZCkgKi8KKyAgICAgICAgeCA9IGNrc3RyY21wKGxwLHRwLC0xLGlucGNhc1tjbWRs dmxdKTsgLyogVXNlIGxvbmdlc3QgbGVuZ3RoICovCisgICAgICAgIHN3aXRjaCAoaWZjKSB7Cisg ICAgICAgICAgY2FzZSBYWElGRVE6ICAgICAgICAgICAgICAgICAgLyogSUYgRVFVQUwgKHN0cmlu ZyBjb21wYXJpc29uKSAqLworICAgICAgICAgICAgeiA9ICh4ID09IDApOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgY2FzZSBYWElGTEw6ICAgICAgICAgICAgICAgICAgLyogSUYgTGV4 aWNhbGx5IExlc3MgVGhhbiAqLworICAgICAgICAgICAgeiA9ICh4IDwgMCk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBjYXNlIFhYSUZMRzogICAgICAgICAgICAgICAgICAvKiBJZiBM ZXhpY2FsbHkgR3JlYXRlciBUaGFuICovCisgICAgICAgICAgICB6ID0gKHggPiAwKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMDEsIklGIEVRIHJlc3Vs dCIsIiIseik7CisgICAgICAgIGlmYXJncyArPSAzOworICAgICAgICBicmVhazsKKworICAgICAg Y2FzZSBYWElGVkU6ICAgICAgICAgICAgICAgICAgICAgIC8qIElGIFZFUlNJT04gKi8KKyAgICAg IGNhc2UgWFhJRkFFOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiAoYXJpdGhtZXRpY2FsbHkp ID0gKi8KKyAgICAgIGNhc2UgWFhJRk5ROiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiAhPSAo bm90IGFyaXRobWV0aWNhbGx5IGVxdWFsKSAqLworICAgICAgY2FzZSBYWElGTFQ6ICAgICAgICAg ICAgICAgICAgICAgIC8qIElGIDwgICovCisgICAgICBjYXNlIFhYSUZMRTogICAgICAgICAgICAg ICAgICAgICAgLyogSUYgPD0gKi8KKyAgICAgIGNhc2UgWFhJRkdFOiAgICAgICAgICAgICAgICAg ICAgICAvKiBJRiA+PSAqLworICAgICAgY2FzZSBYWElGR1Q6IHsgICAgICAgICAgICAgICAgICAg IC8qIElGID4gICovCisKKwkgIC8qIEp1bHkgMjAwNiAtIGNvbnZlcnRlZCB0byB1c2UgQ0tfT0ZG X1QgcmF0aGVyIHRoYW4gaW50IHRvICovCisgICAgICAgICAgLyogYWxsb3cgbG9uZyBpbnRlZ2Vy cyBvbiBwbGF0Zm9ybXMgdGhhdCBoYXZlIGNrX29mZl90ID4gMzIgYml0cyAqLworCSAgaW50IHh4 OworCSAgQ0tfT0ZGX1QgbjEgPSAoQ0tfT0ZGX1QpMCwgbjIgPSAoQ0tfT0ZGX1QpMDsKKyAgICAg ICAgaWYgKGlmYyA9PSBYWElGVkUpIHsKKyAgICAgICAgICAgIG4xID0gKENLX09GRl9UKSB2ZXJu dW07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4ID0gY21mbGQoImZpcnN0IG51bWJl ciBvciB2YXJpYWJsZSBuYW1lIiwiIiwmcyx4eHN0cmluZyk7CisgICAgICAgICAgICBpZiAoeCA9 PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP1F1YW50aXR5IHJlcXVpcmVkXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKHggPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ4eGlmZ3QgY21m bGQiLCIiLHgpOworICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAg ICAgICAgICAgbHAgPSBicnN0cmlwKGxpbmUpOworICAgICAgICAgICAgZGVidWcoRjExMCwieHhp Zmd0IGV4cDEiLGxwLDApOworCisvKiBUaGUgZm9sbG93aW5nIGJpdCBpcyBmb3IgY29tcGF0aWJp bGl0eSB3aXRoIG9sZCB2ZXJzaW9ucyBvZiBNUy1ET1MgS2VybWl0ICovCisKKyAgICAgICAgICAg IGlmICghY2tzdHJjbXAobHAsImNvdW50Iiw1LDApKSB7CisgICAgICAgICAgICAgICAgbjEgPSAo Q0tfT0ZGX1QpY291bnRbY21kbHZsXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21w KGxwLCJ2ZXJzaW9uIiw3LDApKSB7CisgICAgICAgICAgICAgICAgbjEgPSAoQ0tfT0ZGX1QpIHZl cm51bTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKGxwLCJhcmdjIiw0LDApKSB7 CisgICAgICAgICAgICAgICAgbjEgPSAoQ0tfT0ZGX1QpIG1hY2FyZ2NbbWFjbHZsXTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisKKy8qIEVuZCBvZiBjb21wYXRpYmlsaXR5IGJpdCAqLworCisjaWZk ZWYgRk5GTE9BVAorICAgICAgICAgICAgICAgIGlmIChpc2Zsb2F0KGxwLDApID4gMSkgeyAvKiBB bGxvdyBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucyAqLworICAgICAgICAgICAgICAgICAgICBm MSA9IGZsb2F0dmFsOworICAgICAgICAgICAgICAgICAgICBmMWZsYWcgPSAxOworICAgICAgICAg ICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIEZORkxPQVQgKi8KKyAgICAgICAgICAgICAgICAgIGlm IChjaGtudW0obHApKSB7CisgICAgICAgICAgICAgICAgICAgICAgbjEgPSBja2F0b2ZzKGxwKTsK KyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgYXJp dGhtZXRpYyBleHByZXNzaW9uICovCisgICAgICAgICAgICAgICAgICAgICAgcSA9IGV2YWxhKGxw KTsgICAgLyogY21udW0oKSBkb2VzIHRoaXMgYnV0IC4uLiAqLworICAgICAgICAgICAgICAgICAg ICAgIGlmIChjaGtudW0ocSkpIHsJLyogd2UncmUgbm90IHVzaW5nIGNtbnVtKCkuICovCisJCQkg IG4xID0gY2thdG9mcyhxKTsKKwkJICAgICAgfSBlbHNlIHsKKwkJCSAgcHJpbnRmKCI/VmFsdWUg bm90IG51bWVyaWMgLSAlcyIsIGxwKTsKKwkJCSAgcmV0dXJuKC05KTsKKwkJICAgICAgfQorICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHkgPSBj bWZsZCgibnVtYmVyIG9yIHZhcmlhYmxlIG5hbWUiLCIiLCZzLHh4c3RyaW5nKTsKKyAgICAgICAg aWYgKHkgPT0gLTMpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1F1YW50aXR5IHJlcXVpcmVkXG4i KTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPCAw KSByZXR1cm4oeSk7CisgICAgICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICBpZiAoISpzKSBy ZXR1cm4oLTIpOworICAgICAgICBpZiAoaWZjID09IFhYSUZWRSkgeworICAgICAgICAgICAgdHAg PSBsaW5lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCA9IChpbnQpc3RybGVuKGxw KTsKKyAgICAgICAgICAgIHRwID0gbGluZSArIHggKyAyOworICAgICAgICB9CisgICAgICAgIGNr c3RybmNweSh0cCxzLExJTkJVRlNJWi14LTIpOworICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGlmZ3Qg ZXhwMiIsdHAsMCk7CisgICAgICAgIGlmICghY2tzdHJjbXAodHAsImNvdW50Iiw1LDApKSB7Cisg ICAgICAgICAgICBuMiA9IChDS19PRkZfVCkgY291bnRbY21kbHZsXTsKKyAgICAgICAgfSBlbHNl IGlmICghY2tzdHJjbXAodHAsInZlcnNpb24iLDcsMCkpIHsKKyAgICAgICAgICAgIG4yID0gKENL X09GRl9UKSB2ZXJudW07CisgICAgICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKHRwLCJhcmdjIiw0 LDApKSB7CisgICAgICAgICAgICBuMiA9IChDS19PRkZfVCkgbWFjYXJnY1ttYWNsdmxdOworICAg ICAgICB9IGVsc2UgeworI2lmZGVmIEZORkxPQVQKKyAgICAgICAgICAgIGlmIChpc2Zsb2F0KHRw LDApID4gMSkgeworICAgICAgICAgICAgICAgIGYyID0gZmxvYXR2YWw7CisgICAgICAgICAgICAg ICAgZjJmbGFnID0gMTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmIC8qIEZORkxPQVQgKi8K KyAgICAgICAgICAgIGlmIChjaGtudW0odHApKSB7CisgICAgICAgICAgICAgICAgbjIgPSBja2F0 b2ZzKHRwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcSA9IGV2YWxh KHRwKTsKKwkJaWYgKGNoa251bShxKSkgewkvKiB3ZSdyZSBub3QgdXNpbmcgY21udW0oKS4gKi8K KwkJICAgIG4yID0gY2thdG9mcyhxKTsKKwkJfSBlbHNlIHsKKwkJICAgIHByaW50ZigiP1ZhbHVl IG5vdCBudW1lcmljIC0gJXMiLCB0cCk7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeHggPSAoaWZjID09IFhYSUZWRSkgPyBYWElGR0Ug OiBpZmM7CisKKyNpZmRlZiBGTkZMT0FUCisgICAgICAgIGlmIChmMWZsYWcgJiYgIWYyZmxhZykg eworICAgICAgICAgICAgZjIgPSAoQ0tGTE9BVCluMjsKKyAgICAgICAgICAgIGYyZmxhZyA9IDE7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGYyZmxhZyAmJiAhZjFmbGFnKQorICAgICAgICAgIGYx ID0gKENLRkxPQVQpbjE7CisgICAgICAgIGlmIChmMWZsYWcpCisgICAgICAgICAgeiA9ICgoZjEg PCAgZjIgJiYgeHggPT0gWFhJRkxUKQorICAgICAgICAgICAgICAgfHwgKGYxICE9IGYyICYmIHh4 ID09IFhYSUZOUSkKKyAgICAgICAgICAgICAgIHx8IChmMSA8PSBmMiAmJiB4eCA9PSBYWElGTEUp CisgICAgICAgICAgICAgICB8fCAoZjEgPT0gZjIgJiYgeHggPT0gWFhJRkFFKQorICAgICAgICAg ICAgICAgfHwgKGYxID49IGYyICYmIHh4ID09IFhYSUZHRSkKKyAgICAgICAgICAgICAgIHx8IChm MSA+ICBmMiAmJiB4eCA9PSBYWElGR1QpKTsKKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIEZORkxP QVQgKi8KKyAgICAgICAgICB6ID0gKChuMSA8ICBuMiAmJiB4eCA9PSBYWElGTFQpCisgICAgICAg ICAgICAgICB8fCAobjEgIT0gbjIgJiYgeHggPT0gWFhJRk5RKQorICAgICAgICAgICAgICAgfHwg KG4xIDw9IG4yICYmIHh4ID09IFhYSUZMRSkKKyAgICAgICAgICAgICAgIHx8IChuMSA9PSBuMiAm JiB4eCA9PSBYWElGQUUpCisgICAgICAgICAgICAgICB8fCAobjEgPj0gbjIgJiYgeHggPT0gWFhJ RkdFKQorICAgICAgICAgICAgICAgfHwgKG4xID4gIG4yICYmIHh4ID09IFhYSUZHVCkpOworICAg ICAgICBkZWJ1ZyhGMTAxLCJ4eGlmZ2UgeiIsIiIseik7CisgICAgICAgIGlmIChpZmMgPT0gWFhJ RlZFKQorICAgICAgICAgIGlmYXJncyArPSAyOworICAgICAgICBlbHNlCisgICAgICAgICAgaWZh cmdzICs9IDM7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIFhYSUZOVTog ICAgICAgICAgICAgICAgICAgICAgLyogSUYgTlVNRVJJQyAqLworICAgICAgICB4ID0gY21mbGQo InZhcmlhYmxlIG5hbWUgb3IgY29uc3RhbnQiLCIiLCZzLE5VTEwpOworICAgICAgICBpZiAoeCA9 PSAtMykgeworICAgICAgICAgICAgZXh0ZXJuIGludCBjbWZsZ3M7CisgICAgICAgICAgICBpZiAo Y21mbGdzID09IDEpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9RdWFudGl0eSByZXF1aXJl ZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIGlmICh4IDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIHggPSBM SU5CVUZTSVotMTsKKyAgICAgICAgbHAgPSBsaW5lOworICAgICAgICB6enN0cmluZyhzLCZscCwm eCk7CisgICAgICAgIGxwID0gbGluZTsKKyAgICAgICAgZGVidWcoRjExMCwieHhpZm51IHF1YW50 aXR5IixscCwwKTsKKyAgICAgICAgeiA9IGNoa251bShscCk7CisjaWZkZWYgQ09NTUVOVAorLyoK KyAgVGhpcyB3b3JrcywgYnV0IGl0J3Mgbm90IHdpc2UgLS0gSUYgTlVNRVJJQyBpcyBtb3N0bHkg dXNlZCB0byBzZWUgaWYgYQorICBzdHJpbmcgcmVhbGx5IGRvZXMgY29udGFpbiBvbmx5IG51bWVy aWMgY2hhcmFjdGVycy4gIElmIHRoZXkgd2FudCB0byBmb3JjZQorICBldmFsdWF0aW9uLCB0aGV5 IGNhbiB1c2UgXGZldmFsKCkgb24gdGhlIGFyZ3VtZW50IHN0cmluZy4KKyovCisgICAgICAgIGlm ICgheikgeyAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IGEgbnVtYmVyICovCisgICAgICAg ICAgICB4X2lmbnVtID0gMTsgICAgICAgICAgICAgICAgLyogQXZvaWQgImV2YWwiIGVycm9yIG1l c3NhZ2VzICovCisgICAgICAgICAgICBxID0gZXZhbGEobHApOyAgICAgICAgICAgICAgLyogTWF5 YmUgaXQncyBhbiBleHByZXNzaW9uICovCisgICAgICAgICAgICB6ID0gY2hrbnVtKHEpOyAgICAg ICAgICAgICAgLyogdGhhdCBldmFsdWF0ZXMgdG8gYSBudW1iZXIgKi8KKyAgICAgICAgICAgIHhf aWZudW0gPSAwOyAgICAgICAgICAgICAgICAvKiBQdXQgZXZhbCBtZXNzYWdlcyBiYWNrIHRvIG5v cm1hbCAqLworICAgICAgICAgICAgaWYgKHopIGRlYnVnKEYxMTAsInh4aWZudSBleHAiLGxwLDAp OworICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJ4 eGlmbnUgY2hrbnVtIiwiIix6KTsKKyAgICAgICAgaWZhcmdzICs9IDI7CisgICAgICAgIGJyZWFr OworCisjaWZkZWYgWkZDREFUCisgICAgICBjYXNlIFhYSUZORTogeyAgICAgICAgICAgICAgICAg ICAgLyogSUYgTkVXRVIgKi8KKyAgICAgICAgY2hhciBkMVsyMF0sICogZDI7ICAgICAgICAgICAg ICAvKiBCdWZmZXJzIGZvciAyIGRhdGVzICovCisgICAgICAgIGlmICgoeiA9IGNtaWZpKCJGaXJz dCBmaWxlIiwiIiwmcywmeSx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7Cisg ICAgICAgIGNrc3RybmNweShkMSx6ZmNkYXQocyksMjApOworICAgICAgICBpZiAoKHogPSBjbWlm aSgiU2Vjb25kIGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVy bih6KTsKKyAgICAgICAgZDIgPSB6ZmNkYXQocyk7CisgICAgICAgIGlmICgoaW50KXN0cmxlbihk MSkgIT0gMTcgfHwgKGludClzdHJsZW4oZDIpICE9IDE3KSB7CisgICAgICAgICAgICBwcmludGYo Ij9GYWlsdXJlIHRvIGdldCBmaWxlIGRhdGVcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTEwLCJ4eGlmbmV3ZXIgZDEiLGQxLDApOworICAg ICAgICBkZWJ1ZyhGMTEwLCJ4eGlmbmV3ZXIgZDIiLGQyLDApOworICAgICAgICB6ID0gKHN0cmNt cChkMSxkMikgPiAwKSA/IDEgOiAwOworICAgICAgICBkZWJ1ZyhGMTAxLCJ4eGlmbmV3ZXIiLCIi LHopOworICAgICAgICBpZmFyZ3MgKz0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisjZW5k aWYgLyogWkZDREFUICovCisKKyNpZmRlZiBDS19JRlJPCisgICAgICBjYXNlIFhYSUZSTzogICAg ICAgICAgICAgICAgICAgICAgLyogUkVNT1RFLU9OTFkgYWR2aXNvcnkgKi8KKyAgICAgICAgaWZh cmdzKys7CisjaWZkZWYgTk9MT0NBTAorICAgICAgICB6ID0gMTsKKyNlbHNlCisgICAgICAgIHog PSByZW1vbmx5OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogQ0tfSUZSTyAqLworCisgICAgICBjYXNlIFhYSUZBTDogICAgICAgICAgICAgICAgICAgICAg LyogQUxBUk0gKi8KKyAgICAgICAgaWZhcmdzKys7CisgICAgICAgIGRlYnVnKEYxMDEsIklGIEFM QVJNIGNrX2FsYXJtIiwiIixja19hbGFybSk7CisgICAgICAgIGRlYnVnKEYxMTAsIklGIEFMQVJN IGFscm1fZGF0ZSIsYWxybV9kYXRlLDApOworICAgICAgICBkZWJ1ZyhGMTEwLCJJRiBBTEFSTSBh bHJtX3RpbWUiLGFscm1fdGltZSwwKTsKKworICAgICAgICBpZiAoY2tfYWxhcm0gPCAxTCB8fCBh bHJtX2RhdGVbMF0gPCAnMCcgfHwgYWxybV90aW1lWzBdIDwgJzAnKSB7CisgICAgICAgICAgICB6 ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogQUxBUk0gbm90IFNFVCAqLworICAgICAgICAg ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNvIElGIEFMQVJNIGZhaWxzICovCisg ICAgICAgIH0KKyAgICAgICAgLyogR2V0IGN1cnJlbnQgZGF0ZSBhbmQgdGltZSAqLworICAgICAg ICBja3N0cm5jcHkodG1wYnVmLGNrY3Z0ZGF0ZSgiIiwxKSxUTVBCVUZTSVopOworICAgICAgICBz ID0gdG1wYnVmOworICAgICAgICBzWzhdID0gTlVMOworICAgICAgICB6ID0gKGludCkgc3RybmNt cCh0bXBidWYsYWxybV9kYXRlLDgpOyAvKiBDb21wYXJlIGRhdGVzICovCisgICAgICAgIGRlYnVn KEYxMDEsIklGIEFMQVJNIGRhdGUgeiIsIiIseik7CisgICAgICAgIGlmICh6ID09IDApIHsgICAg ICAgICAgICAgICAgICAgLyogRGF0ZXMgYXJlIHRoZSBzYW1lICovCisgICAgICAgICAgICAvKiBD b21wYXJlIHRpbWVzICovCisgICAgICAgICAgICB6ID0gKHRvZDJzZWModG1wYnVmKzkpID49IGF0 b2woYWxybV90aW1lKSkgPyAxIDogLTE7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJJRiBBTEFS TSB0aW1lIHoiLCIiLHopOworICAgICAgICB9CisgICAgICAgIHRtcGJ1ZlswXSA9IE5VTDsgICAg ICAgICAgICAgICAgLyogeiA+PSAwIGlmIGFsYXJtIGlzIHBhc3NlZCAqLworICAgICAgICB6ID0g KCh6ID49IDApID8gMSA6IDApOyAgICAgICAgIC8qIHogPCAgMCBvdGhlcndpc2UgKi8KKyAgICAg ICAgZGVidWcoRjEwMSwiSUYgQUxBUk0gZmluYWwgeiIsIiIseik7CisgICAgICAgIGJyZWFrOwor CisgICAgICBjYXNlIFhYSUZPUDogICAgICAgICAgICAgICAgICAgICAgLyogSUYgT1BFTiAqLwor ICAgICAgICBpZiAoKHggPSBjbWtleShpb3RhYixuaW90LCJmaWxlIG9yIGxvZyIsIiIseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoeCA9PSA5OTk5IHx8 IHggPT0gWlNURElPKSB7CisgICAgICAgICAgICBiZ2NoaygpOyAgICAgICAgICAgICAgICAgICAg LyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8KKyAgICAgICAgICAgIHogPSBwZmxhZyA/IDEg OiAwOworICAgICAgICB9IGVsc2UgaWYgKHggPT0gODg4OCkgeworICAgICAgICAgICAgeiA9IGxv Y2FsID8gdHRjaGsoKSA+IC0xIDogMDsKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICAgICAgfSBlbHNl IGlmICh4ID09IDc3NzcpIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgZGlhbG9nOworICAgICAg ICAgICAgeiA9IGRpYWxvZyA/IDEgOiAwOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICB6ID0gKGNoa2ZuKHgpID4gMCkgPyAxIDogMDsKKyAgICAgICAg aWZhcmdzICs9IDE7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZTRDogICAgICAg ICAgICAgICAgICAgICAgLyogU3RhcnRlZC1Gcm9tLURpYWxlciAqLworI2lmZGVmIE9TMgorICAg ICAgICB6ID0gU3RhcnRlZEZyb21EaWFsZXI7CisjZWxzZQorICAgICAgICB6ID0gMDsKKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRlRNOiAgICAgICAg ICAgICAgICAgICAgICAvKiBUZXJtaW5hbC1NYWNybyAqLworI2lmZGVmIE9TMgorICAgICAgICB6 ID0gY21kc3RrW2NtZGx2bF0uY2NmbGdzICYgQ0ZfS01BQzsKKyNlbHNlCisgICAgICAgIHogPSAw OworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYWElGRU06 ICAgICAgICAgICAgICAgICAgICAgIC8qIEVtdWxhdGlvbiBpcyBhY3RpdmUgKi8KKyNpZmRlZiBP UzIKKyAgICAgICAgeiA9IDE7CisjZWxzZQorICAgICAgICB6ID0gMDsKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRklLOiAgICAgICAgICAgICAgICAg ICAgICAvKiBSdW5uaW5nIGFzIElLU0Q/ICovCisgICAgICAgIHogPSBpbnNlcnZlcjsKKyAgICAg ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJRlRBOiAgICAgICAgICAgICAgICAgICAgICAvKiBD b25uZWN0aW9uIGlzIFRBUEkgKi8KKyAgICAgICAgeiA9IDA7CisjaWZuZGVmIE5PRElBTAorI2lm ZGVmIENLX1RBUEkKKyAgICAgICAgaWYgKGxvY2FsICYmICFuZXR3b3JrICYmIHR0dGFwaSkKKyAg ICAgICAgICB6ID0gMTsKKyNlbmRpZiAvKiBDS19UQVBJICovCisjZW5kaWYgLyogTk9ESUFMICov CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZNQTogICAgICAgICAgICAgICAgICAg ICAgLyogSUYgTUFUQ0ggKi8KKyAgICAgICAgeCA9IGNtZmxkKCJTdHJpbmcgb3IgdmFyaWFibGUi LCIiLCZzLHh4c3RyaW5nKTsKKyAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgIGV4 dGVybiBpbnQgY21mbGdzOworICAgICAgICAgICAgaWYgKGNtZmxncyA9PSAxKSB7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/U3RyaW5nIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHggPCAwKQorICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwor ICAgICAgICBzID0gYnJzdHJpcChsaW5lKTsKKyAgICAgICAgZGVidWcoRjExMCwieHhpZm1hIHN0 cmluZyIsbGluZSwwKTsKKyAgICAgICAgeCA9IGNtZmxkKCJQYXR0ZXJuIiwiIiwmcCx4eHN0cmlu Zyk7CisgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICBleHRlcm4gaW50IGNtZmxn czsKKyAgICAgICAgICAgIGlmIChjbWZsZ3MgPT0gMSkgeworICAgICAgICAgICAgICAgIHByaW50 ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoeCA8IDApCisgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICBja3N0cm5jcHkodG1wYnVmLHAsVE1QQlVGU0laKTsKKyAgICAgICAgcCA9 IGJyc3RyaXAodG1wYnVmKTsKKyAgICAgICAgZGVidWcoRjExMCwieHhpZm1hIHBhdHRlcm4iLHRt cGJ1ZiwwKTsKKyAgICAgICAgeiA9IGNrbWF0Y2gocCxzLGlucGNhc1tjbWRsdmxdLDEpOworICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBYWElGRkw6IHsgICAgICAgICAgICAgICAgICAgIC8q IElGIEZMQUcgKi8KKyAgICAgICAgICBleHRlcm4gaW50IG9vZmxhZzsKKyAgICAgICAgICB6ID0g b29mbGFnOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBYWElGQVY6IHsg ICAgICAgICAgICAgICAgICAgIC8qIElGIEFWQUlMQUJMRSAqLworICAgICAgICAgIGlmICgoeCA9 IGNta2V5KGF2YWlsdGFiLGF2YWlsdGFibiwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgIGNhc2Ug QVZfS1JCNDoKKyAgICAgICAgICAgICAgeiA9IGNrX2tyYjRfaXNfaW5zdGFsbGVkKCk7CisgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBVl9LUkI1OgorICAgICAgICAgICAg ICB6ID0gY2tfa3JiNV9pc19pbnN0YWxsZWQoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICBjYXNlIEFWX1NSUDoKKyAgICAgICAgICAgICAgeiA9IGNrX3NycF9pc19pbnN0YWxs ZWQoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFWX1NTTDoKKyAg ICAgICAgICAgICAgeiA9IGNrX3NzbGVheV9pc19pbnN0YWxsZWQoKTsKKyAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICBjYXNlIEFWX05UTE06CisgICAgICAgICAgICAgIHogPSBja19u dGxtX2lzX2luc3RhbGxlZCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh c2UgQVZfQ1JZUFRPOgorICAgICAgICAgICAgICB6ID0gY2tfY3J5cHRfaXNfaW5zdGFsbGVkKCk7 CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBVl9TU0g6CisgICAgICAg ICAgICAgIHogPSBja19zc2hfaXNfaW5zdGFsbGVkKCk7CisgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgeiA9IDA7CisgICAgICAgICAgfQor ICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBYWElGQVQ6ICAgICAgICAgICAg ICAgICAgICAgIC8qIElGIEFTS1RJTUVPVVQgKi8KKyAgICAgICAgeiA9IGFza3RpbWVkb3V0Owor ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYWElGUkQ6ICAgICAgICAgICAgICAgICAgICAg IC8qIElGIFJFQURBQkxFICovCisgICAgICBjYXNlIFhYSUZXUjogICAgICAgICAgICAgICAgICAg ICAgLyogSUYgV1JJVEVBQkxFICovCisgICAgICAgIGlmICgoeCA9IGNtZmxkKCJGaWxlIG9yIGRp cmVjdG9yeSBuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAg ICAgICAgICAgICZzLAorI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICAgICBOVUxMICAg ICAgICAgICAgIC8qIFRoaXMgYWxsb3dzIFwncyBpbiBmaWxlbmFtZXMgKi8KKyNlbHNlCisgICAg ICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAg ICAgICAgICAgICAgICkpIDwgMCkgeworICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAg ICAgICAgICAgICBleHRlcm4gaW50IGNtZmxnczsKKyAgICAgICAgICAgICAgICBpZiAoY21mbGdz ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RmlsZSBvciBkaXJlY3Rvcnkg bmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHJldHVybih4KTsKKyAgICAgICAgfQor ICAgICAgICBzID0gYnJzdHJpcChzKTsKKy8qCisgIHpjaGtbaW9dKCkgZG8gbm90IGRvIHdoYXQg d2Ugd2FudCBoZXJlIGZvciBkaXJlY3Rvcmllcywgc28gd2Ugc2V0CisgIGEgZ2xvYmFsIGZsYWcg dGVsbGluZyBpdCB0byBiZWhhdmUgc3BlY2lhbGx5IGluIHRoaXMgY2FzZS4gIE90aGV3aXNlCisg IHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIEFQSSBhbmQgY2hhbmdlIGFsbCBjaz9maW8uYyBtb2R1 bGVzIGFjY29yZGluZ2x5LgorKi8KKyAgICAgICAgeSA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUcnktYWdhaW4gY29udHJvbCAqLworI2lmZGVmIE9TMgorICBpZnJkYWdhaW46Cisj ZW5kaWYgLyogT1MyICovCisgICAgICAgIGlmIChpZmMgPT0gWFhJRlJEKSB7ICAgICAgICAgICAg LyogSUYgUkVBREFCTEUgKi8KKyAgICAgICAgICAgIHpjaGtpZCA9IDE7CisgICAgICAgICAgICB6 ID0gemNoa2kocykgPiAtMTsKKyAgICAgICAgICAgIHpjaGtpZCA9IDA7CisgICAgICAgIH0gZWxz ZSBpZiAoaWZjID09IFhYSUZXUikgeyAgICAgLyogSUYgV1JJVEVBQkxFICovCisgICAgICAgICAg ICB6Y2hrb2QgPSAxOworICAgICAgICAgICAgeiA9IHpjaGtvKHMpID4gLTE7CisgICAgICAgICAg ICB6Y2hrb2QgPSAwOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAgIGlmICgheiAmJiAh eSkgeyAgICAgICAgICAgICAgICAgLyogRmlsZSBub3QgZm91bmQuICovCisgICAgICAgICAgICBp bnQgdDsgICAgICAgICAgICAgICAgICAgICAgLyogVHJ5IGV4cGFuZGluZyB2YXJpYWJsZXMgKi8K KyAgICAgICAgICAgIHQgPSBMSU5CVUZTSVotMTsgICAgICAgICAgICAvKiBhbmQgbG9va2luZyBh Z2Fpbi4gKi8KKyAgICAgICAgICAgIGxwID0gbGluZTsKKyAgICAgICAgICAgIHp6c3RyaW5nKHMs JmxwLCZ0KTsKKyAgICAgICAgICAgIHMgPSBsaW5lOworICAgICAgICAgICAgeiA9IHpjaGtvKHMp ID4gLTE7CisgICAgICAgICAgICB5Kys7CisgICAgICAgICAgICBnb3RvIGlmcmRhZ2FpbjsKKyAg ICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBpZmFyZ3MgKz0gMjsKKyAgICAgICAg YnJlYWs7CisgICAgICBjYXNlIFhYSUZRVTogICAgICAgICAgICAgICAgICAgICAgLyogSUYgUVVJ RVQgKi8KKyAgICAgICAgeiA9IHF1aWV0ID8gMSA6IDA7CisgICAgICAgIGRlYnVnKEYxMDEsImlm IHF1aWV0IiwiIix6KTsKKyAgICAgICAgaWZhcmdzICs9IDE7CisgICAgICAgIGJyZWFrOworCisg ICAgICBjYXNlIFhYSUZXSTogICAgICAgICAgICAgICAgICAgICAgLyogV0lMRCAqLworICAgICAg ICBpZiAoKHggPSBjbWZsZCgiRmlsZSBzcGVjaWZpY2F0aW9uIiwiIiwmcyx4eHN0cmluZykpIDwg MCkgcmV0dXJuKHgpOworICAgICAgICB6ID0gaXN3aWxkKHMpOworICAgICAgICBicmVhazsKKwor ICAgICAgY2FzZSBYWElGQ0s6ICAgICAgICAgICAgICAgICAgICAgIC8qIEMtS0VSTUlUICovCisj aWZkZWYgT1MyCisgICAgICAgIHogPSAwOworI2Vsc2UKKyAgICAgICAgeiA9IDE7CisjZW5kaWYg LyogT1MyICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhYSUZLOTogICAgICAgICAg ICAgICAgICAgICAgLyogSy05NSAqLworI2lmZGVmIE9TMgorICAgICAgICB6ID0gMTsKKyNlbHNl CisgICAgICAgIHogPSAwOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBYWElGR1U6ICAgICAgICAgICAgICAgICAgICAgIC8qIEdVSSAqLworI2lmZGVmIEtV SQorICAgICAgICB6ID0gMTsKKyNlbHNlCisgICAgICAgIHogPSAwOworI2VuZGlmIC8qIEtVSSAq LworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYWElGTVM6ICAgICAgICAgICAgICAgICAg ICAgIC8qIE1TLUtFUk1JVCAqLworICAgICAgICB6ID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAg ICAgIGNhc2UgWFhJRkxPOiAgICAgICAgICAgICAgICAgICAgICAvKiBJRiBMT0NBTCAqLworICAg ICAgICB6ID0gbG9jYWwgPyAxIDogMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFhJ RkNNOiB7ICAgICAgICAgICAgICAgICAgICAvKiBJRiBDT01NQU5EICovCisgICAgICAgICAgZXh0 ZXJuIHN0cnVjdCBrZXl0YWIgY21kdGFiW107CisgICAgICAgICAgZXh0ZXJuIGludCBuY21kOwor ICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJXb3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICB6ID0gbG9va3VwKGNtZHRhYixzLG5jbWQs JnkpOworICAgICAgICAgIHogPSAoeiA9PSAtMiB8fCB6ID4gLTEpID8gMSA6IDA7CisgICAgICAg ICAgYnJlYWs7CisgICAgICB9CisjaWZkZWYgQ0tGTE9BVAorICAgICAgY2FzZSBYWElGRlA6ICAg ICAgICAgICAgICAgICAgICAgIC8qIElGIEZMT0FUICovCisgICAgICAgIGlmICgoeCA9IGNtZmxk KCJOdW1iZXIiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIGlmICh4ICE9IC0zKSAg ICAgICAgICAgICAgICAgIC8qIGUuZy4gZW1wdHkgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgeiA9IGlzZmxvYXQocywwKTsKKyAgICAgICAgYnJlYWs7CisjZW5k aWYgLyogQ0tGTE9BVCAqLworCisgICAgICBjYXNlIFhYSUZLQjogICAgICAgICAgICAgICAgICAg ICAgLyogS0JISVQgKi8KKyAgICAgICAgeiA9IGNvbmNoaygpOworICAgICAgICBpZiAoeiA8IDAp IHogPSAwOworICAgICAgICBpZiAoeiA+IDEpIHogPSAxOworICAgICAgICBicmVhazsKKworICAg ICAgY2FzZSBYWElGS0c6IHsgICAgICAgICAgICAgICAgICAgIC8qIEtFUkJBTkcgKi8KKyAgICAg ICAgICBleHRlcm4gaW50IGNmaWxlZjsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgeiA9ICh4 Y21kc3JjID09IDApID8gMCA6IChjZmlsZWYgJiYgY21kbHZsID09IDEpOworI2Vsc2UKKyAgICAg ICAgICB6ID0gKHhjbWRzcmMgPT0gMCkgPyAwIDogKGNmaWxlZiAmJiB0bGV2ZWwgPT0gMCk7Cisj ZW5kaWYJLyogQ09NTUVOVCAqLworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBj YXNlIFhYSUZEQjogewkJCS8qIElGIERFQlVHIC0gMjAxMC8wMy8xNiAqLworICAgICAgICAgIGV4 dGVybiBpbnQgZGVibXNnOworICAgICAgICAgIHogPSBkZWJtc2c7CisJICBicmVhazsKKyAgICAg IH0KKworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3VsZG4n dCBoYXBwZW4gKi8KKyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9IC8qIGVuZCBvZiBzd2l0Y2gg Ki8KKworICAgIGlmICh6KQorICAgICAgKmJ4KysgPSAnMSc7CisgICAgZWxzZQorICAgICAgKmJ4 KysgPSAnMCc7CisgICAgKmJ4ID0gTlVMOworICAgIGlmIChieCA+IGJvb2x2YWwgKyBCT09MTEVO IC0gMikgeworICAgICAgICBwcmludGYoIj9Cb29sZWFuIGV4cHJlc3Npb24gdG9vIGxvbmciKTsK KyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgZWNvdW50Kys7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRXhwcmVzc2lvbiBjb3VudGVyICovCisgICAgZGVidWcoRjEwMSwiYm9v bGV4cCBwYXJlbnMiLCIiLHBhcmVucyk7CisgICAgZGVidWcoRjEwMSwiYm9vbGV4cCBwY291bnQi LCIiLHBjb3VudCk7CisgICAgaWYgKHBhcmVucyAmJiBwY291bnQgPiAwKQorICAgICAgZ290byBp ZmFnYWluOworCisgIGlmZW5kOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8g bW9yZSAtIGRvbmUgKi8KKyAgICAqYnggPSBOVUw7CisgICAgeiA9IGF0b2koZXZhbHgoYm9vbHZh bCkpOworICAgIGRlYnVnKEYxMTEsImJvb2xleHAgYm9vbHZhbCIsYm9vbHZhbCx6KTsKKyAgICBy ZXR1cm4oeik7Cit9CisKKy8qICBEIE8gSSBGICAtLSAgRG8gdGhlIElGIGNvbW1hbmQgICovCisK K2ludAorZG9pZihjeCkgaW50IGN4OyB7CisgICAgaW50IHgsIHksIHo7IGNoYXIgKnMsICpwOwor ICAgIGNoYXIgKnE7CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBrZXltYWM7CisjZW5kaWYg LyogT1MyICovCisKKyAgICBkZWJ1ZyhGMTAxLCJkb2lmIGN4IiwiIixjeCk7CisKKyAgICB6ID0g Ym9vbGV4cChjeCk7ICAgICAgICAgICAgICAgICAgICAvKiBFdmFsdWF0ZSB0aGUgY29uZGl0aW9u KHMpICovCisgICAgZGVidWcoRjAxMCwiZG9pZiBjbWRidWYiLGNtZGJ1ZiwwKTsKKyAgICBkZWJ1 ZyhGMTAxLCJkb2lmIGJvb2xleHAiLCIiLHopOworICAgIGlmICh6IDwgMCkKKyAgICAgIHJldHVy bih6KTsKKworICAgIGlmIChjeCA9PSBYWElGKSB7ICAgICAgICAgICAgICAgICAgIC8qIEFsbG93 IElGIHRvIGhhdmUgWElGIHNlbWFudGljcy4gKi8KKyAgICAgICAgY2hhciAqIHA7CisgICAgICAg IHAgPSBjbXBlZWsoKTsKKyAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgIHdoaWxlICgq cCkgeworICAgICAgICAgICAgaWYgKCpwID09IFNQIHx8ICpwID09IEhUKQorICAgICAgICAgICAg ICBwKys7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgICAgIGlmICgqcCA9PSAneycpCisgICAgICAgICAgY3ggPSBYWElGWDsKKyAgICB9Cisg ICAgc3dpdGNoIChjeCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogU2VwYXJhdGUgaGFuZGxp bmcgZm9yIElGIGFuZCBYSUYgKi8KKworICAgICAgY2FzZSBYWEFTU0VSOiAgICAgICAgICAgICAg ICAgICAgIC8qIEFuZCBBU1NFUlQgKi8KKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQor ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSB6KTsKKworICAg ICAgY2FzZSBYWElGOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgSUYuLi4gKi8K KyAgICAgICAgaWZjbWRbY21kbHZsXSA9IDE7ICAgICAgICAgICAgICAvKiBXZSBqdXN0IGNvbXBs ZXRlZCBhbiBJRiBjb21tYW5kICovCisgICAgICAgIGRlYnVnKEYxMDEsImRvaWYgY29uZGl0aW9u IiwiIix6KTsKKyAgICAgICAgaWYgKHopIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb25k aXRpb24gaXMgdHJ1ZSAqLworICAgICAgICAgICAgaWZ0ZXN0W2NtZGx2bF0gPSAxOyAgICAgICAg IC8qIFJlbWVtYmVyIHRoYXQgSUYgc3VjY2VlZGVkICovCisgICAgICAgICAgICBpZiAobWFjbHZs ID4gLTEpIHsgICAgICAgICAgLyogSW4gbWFjcm8sICovCisgICAgICAgICAgICAgICAgcHVzaGNt ZChOVUxMKTsgICAgICAgICAgLyogc2F2ZSByZXN0IG9mIGNvbW1hbmQuICovCisgICAgICAgICAg ICB9IGVsc2UgaWYgKHRsZXZlbCA+IC0xKSB7ICAgLyogSW4gdGFrZSBmaWxlLCAqLworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDAsICJkb2lmOiBwdXNoaW5nIGNvbW1hbmQiLCAiIiwgMCk7Cisg ICAgICAgICAgICAgICAgcHVzaGNtZChOVUxMKTsgICAgICAgICAgLyogc2F2ZSByZXN0IG9mIGNv bW1hbmQuICovCisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyogSWYg aW50ZXJhY3RpdmUsICovCisgICAgICAgICAgICAgICAgY21pbmkoY2t4ZWNoKTsgICAgICAgICAg LyoganVzdCBzdGFydCBhIG5ldyBjb21tYW5kICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCJc biIpOyAgICAgICAgICAgLyogKGxpa2UgaW4gTVMtRE9TIEtlcm1pdCkgKi8KKyAgICAgICAgICAg ICAgICBpZiAocGZsYWcpIHByb21wdCh4eHN0cmluZyk7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29uZGl0aW9uIGlzIGZhbHNlICov CisgICAgICAgICAgICBpZnRlc3RbY21kbHZsXSA9IDA7ICAgICAgICAgLyogUmVtZW1iZXIgY29t bWFuZCBmYWlsZWQuICovCisgICAgICAgICAgICBpZiAoKHkgPSBjbXR4dCgiY29tbWFuZCB0byBi ZSBpZ25vcmVkIiwiIiwmcyxOVUxMKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7ICAg ICAgICAgICAgICAgIC8qIEdvYmJsZSB1cCByZXN0IG9mIGxpbmUgKi8KKyAgICAgICAgfQorICAg ICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgWFhJRlg6IHsgICAgICAgICAgICAgICAgICAg ICAvKiBUaGlzIGlzIFhJRiAoRXh0ZW5kZWQgSUYpICovCisgICAgICAgICAgY2hhciAqcDsKKyAg ICAgICAgICBjaGFyIGVbNV07CisgICAgICAgICAgaW50IGk7CisgICAgICAgICAgaWYgKCh5ID0g Y210eHQoIk9iamVjdCBjb21tYW5kIiwiIiwmcyxOVUxMKSkgPCAwKQorICAgICAgICAgICAgcmV0 dXJuKHkpOyAgICAgICAgICAgICAgICAgIC8qIEdldCBvYmplY3QgY29tbWFuZC4gKi8KKyAgICAg ICAgICBwID0gczsKKyAgICAgICAgICBscCA9IGxpbmU7CisgICAgICAgICAgZGVidWcoRjExMCwi ZG9pZiBUSEVOIHBhcnQiLHMsLTU0KTsKKyAgICAgICAgICBpZiAobGl0Y21kKCZwLCZscCxMSU5C VUZTSVogLSAxKSA8IDApIHsgLyogUXVvdGUgVEhFTi1wYXJ0ICovCisgICAgICAgICAgICAgIHJl dHVybigtMik7CisgICAgICAgICAgfQorICAgICAgICAgIGRlYnVnKEYxMTEsImRvaWYgVEhFTiBw YXJ0IDIiLGxpbmUseik7CisKKyAgICAgICAgICB3aGlsZSAoKnAgPT0gU1ApIHArKzsgICAgICAg ICAvKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KKyAgICAgICAgICBpZmNtZFtjbWRsdmxdID0g MDsgICAgICAgICAgICAvKiBBc3N1bWUgRUxTRSBwYXJ0IGluIHNhbWUgbGluZSAqLworICAgICAg ICAgIGlmdGVzdFtjbWRsdmxdID0geiA/IDEgOiAwOworICAgICAgICAgIGlmICgqcCkgeyAgICAg ICAgICAgICAgICAgICAgIC8qIEF0IGVuZD8gKi8KKyAgICAgICAgICAgICAgaWYgKCF6KSB7ICAg ICAgICAgICAgICAgICAvKiBObywgdXNlIEVMU0UtcGFydCwgaWYgYW55ICovCisgICAgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSBlW2ldID0gKnArKzsKKyAgICAgICAgICAg ICAgICAgIGlmIChja3N0cmNtcChlLCJlbHNlIiw0LDApKSAvKiBTZWUgaWYgd2UgaGF2ZSBhbiBF TFNFICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybigtMik7ICAgICAgICAgLyogU29tZXRo aW5nIGVsc2UgLSBlcnJvci4gKi8KKyAgICAgICAgICAgICAgICAgIGRlYnVnKEYwMTAsImRvaWYg RUxTRSBsaW5lIDEiLHAsMCk7CisgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gU1ApIHAr KzsgLyogU2tpcCBzcGFjZXMgKi8KKyAgICAgICAgICAgICAgICAgIGlmICgqcCAhPSAneycpIHsg ICAgICAvKiBCcmFjZSBFTFNFIHBhcnQgaWYgbmVjZXNzYXJ5ICovCisgICAgICAgICAgICAgICAg ICAgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwieyIscCwiIH0iLE5VTEwpOworICAgICAg ICAgICAgICAgICAgICAgIHAgPSB0bXBidWY7CisgICAgICAgICAgICAgICAgICAgICAgZGVidWco RjAxMCwiZG9pZiBFTFNFIGxpbmUgMiIscCwwKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgIGxwID0gbGluZTsgICAgICAgICAgICAvKiBXcml0ZSBvdmVyIFRIRU4gcGFy dC4uLiAqLworICAgICAgICAgICAgICAgICAgKmxwID0gTlVMOyAgICAgICAgICAgIC8qIHdpdGgg RUxTRSBwYXJ0LiAqLworICAgICAgICAgICAgICAgICAgaWYgKGxpdGNtZCgmcCwmbHAsTElOQlVG U0laIC0gMikgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCA9PSBTUCkgcCsrOyAv KiBTdHJpcCB0cmFpbGluZyBzcGFjZXMgKi8KKyAgICAgICAgICAgICAgICAgIGlmICgqcCkgcmV0 dXJuKC0yKTsgICAvKiBTaG91bGQgYmUgbm90aGluZyBoZXJlLiAqLworICAgICAgICAgICAgICAg ICAgZGVidWcoRjAxMCwiZG9pZiBFTFNFIGxpbmUgMyIsbGluZSwwKTsKKyAgICAgICAgICAgICAg fQorICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEF0IGVuZCwgdHJl YXQgbGlrZSBhbiBJRiBjb21tYW5kICovCisgICAgICAgICAgICAgIGlmICgheikgbGluZVswXSA9 IE5VTDsgICAgLyogQ29uZGl0aW9uIG5vdCB0cnVlIGFuZCBubyBFTFNFICovCisgICAgICAgICAg ICAgIGlmY21kW2NtZGx2bF0gPSAxOyAgICAgICAgLyogQWxsb3cgRUxTRSBvbiBuZXh0IGxpbmUg Ki8KKyAgICAgICAgICAgICAgZGVidWcoRjEwMSwiSUYgY29uZGl0aW9uIiwiIix6KTsKKyAgICAg ICAgICB9CisgICAgICAgICAgaWYgKGxpbmVbMF0pIHsKKyAgICAgICAgICAgICAgeCA9IG1sb29r KG1hY3RhYiwiX3hpZiIsbm1hYyk7IC8qIEdldCBpbmRleCBvZiAiX3hpZiIgbWFjcm8uICovCisg ICAgICAgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgdGhl cmU/ICovCisgICAgICAgICAgICAgICAgICBhZGRtbWFjKCJfeGlmIix4aWZfZGVmKTsgICAgICAv KiBQdXQgaXQgYmFjay4gKi8KKyAgICAgICAgICAgICAgICAgIGlmIChtbG9vayhtYWN0YWIsIl94 aWYiLG5tYWMpIDwgMCkgeyAvKiBMb29rIGl0IHVwIGFnYWluLiAqLworICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1hJRiBtYWNybyBnb25lIVxuIik7CisgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICBkb2RvKHgsbGluZSxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgfCBD Rl9JTUFDKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKDApOworICAgICAgfQorICAg ICAgY2FzZSBYWFdISTogeyAgICAgICAgICAgICAgICAgICAgIC8qIFdISUxFIENvbW1hbmQgKi8K KyAgICAgICAgICBwID0gY21kYnVmOyAgICAgICAgICAgICAgICAgICAvKiBDYXB0dXJlIElGIGNv bmRpdGlvbiAqLworICAgICAgICAgIGlmY29uZFswXSA9IE5VTDsgICAgICAgICAgICAgIC8qIGZy b20gY29tbWFuZCBidWZmZXIgKi8KKyAgICAgICAgICB3aGlsZSAoKnAgPT0gU1ApIHArKzsKKyAg ICAgICAgICB3aGlsZSAoKnAgIT0gU1ApIHArKzsKKyAgICAgICAgICBpZmNwID0gaWZjb25kOwor ICAgICAgICAgIGlmY3AgKz0gY2tzdHJuY3B5KGlmY3AsInsgXFxmbGl0KGlmICggbm90ICIsSUZD T05ETEVOKTsKKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGlzIGRvZXNuJ3Qgd29yayBiZWNhdXNl IGl0IGJyZWFrcyBvbiB0aGUgZmlyc3QgbGVmdCBicmFjZSwgd2hpY2ggZG9lcworICBub3QgbmVj ZXNzYXJpbHkgc3RhcnQgdGhlIGNvbW1hbmQgbGlzdCwgZS5nLiAid2hpbGUgZXF1YWwgXCVhIHtc MzV9Ii4KKyovCisgICAgICAgICAgd2hpbGUgKCpwICE9ICd7JyAmJiAqcCAhPSBOVUwpICppZmNw KysgPSAqcCsrOworICAgICAgICAgIHAgPSAiICkgZ290byBfLi5ib3QpIH0gIjsKKyAgICAgICAg ICB3aGlsZSAoKmlmY3ArKyA9ICpwKyspIDsKKyNlbHNlCisvKgorICBUaGUgY29tbWFuZCBwYXJz ZXIgc2V0cyBjbWJwdHIgdG8gdGhlIHNwb3Qgd2hlcmUgaXQgbGVmdCBvZmYgcGFyc2luZyBpbgor ICB0aGUgY29tbWFuZCBidWZmZXIuCisqLworICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXh0 ZXJuIGNoYXIgKiBjbWJwdHI7CisgICAgICAgICAgICAgIGlmIChjbWJwdHIpIHsKKyAgICAgICAg ICAgICAgICAgIHdoaWxlIChwIDwgY21icHRyICYmICpwICE9IE5VTCkKKyAgICAgICAgICAgICAg ICAgICAgKmlmY3ArKyA9ICpwKys7CisgICAgICAgICAgICAgICAgICBwID0gIiApIGdvdG8gXy4u Ym90KSB9ICI7CisgICAgICAgICAgICAgICAgICB3aGlsZSAoKCppZmNwKysgPSAqcCsrKSkgOwor ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJu YWwgZXJyb3IgcGFyc2luZyBXSElMRSBjb25kaXRpb25cbiIpOworICAgICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyNlbmRpZiAvKiBDT01N RU5UICovCisKKyAgICAgICAgICBkZWJ1ZyhGMTEwLCJXSElMRSBjbWQiLGlmY29uZCwwKTsKKwor ICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJPYmplY3QgY29tbWFuZCIsIiIsJnMsTlVMTCkpIDwg MCkKKyAgICAgICAgICAgIHJldHVybih5KTsgICAgICAgICAgICAgICAgICAvKiBHZXQgb2JqZWN0 IGNvbW1hbmQuICovCisgICAgICAgICAgcCA9IHM7CisgICAgICAgICAgbHAgPSBsaW5lOworICAg ICAgICAgIGlmIChsaXRjbWQoJnAsJmxwLExJTkJVRlNJWiAtIDIpIDwgMCkgeyAvKiBRdW90ZSBv YmplY3QgY29tbWFuZCAqLworICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgIH0K KyAgICAgICAgICBkZWJ1ZyhGMTAxLCJXSElMRSBib2R5IixsaW5lLC01NCk7CisgICAgICAgICAg aWYgKGxpbmVbMF0pIHsKKyAgICAgICAgICAgICAgY2hhciAqcDsKKyAgICAgICAgICAgICAgeCA9 IG1sb29rKG1hY3RhYiwiX3doaWxlIixubWFjKTsgLyogaW5kZXggb2YgIl93aGlsZSIgbWFjcm8u ICovCisgICAgICAgICAgICAgIGlmICh4IDwgMCkgeyAgICAgICAgICAgICAgLyogTm90IHRoZXJl PyAqLworICAgICAgICAgICAgICAgICAgYWRkbW1hYygiX3doaWxlIix3aGlsX2RlZik7IC8qIFB1 dCBpdCBiYWNrLiAqLworICAgICAgICAgICAgICAgICAgaWYgKG1sb29rKG1hY3RhYiwiX3doaWxl IixubWFjKSA8IDApIHsgLyogTG9vayBpdCB1cCBhZ2FpbiAqLworICAgICAgICAgICAgICAgICAg ICAgIHByaW50ZigiP1dISUxFIG1hY3JvIGRlZmluaXRpb24gZ29uZSFcbiIpOworICAgICAgICAg ICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgcCA9IG1hbGxvYygoaW50KXN0cmxlbihpZmNv bmQpICsgKGludClzdHJsZW4obGluZSkgKyAyKTsKKyAgICAgICAgICAgICAgaWYgKHApIHsKKyAg ICAgICAgICAgICAgICAgIHN0cmNweShwLGlmY29uZCk7ICAgICAvKiBzYWZlIChwcmVjaGVja2Vk KSAqLworICAgICAgICAgICAgICAgICAgc3RyY2F0KHAsbGluZSk7ICAgICAgIC8qIHNhZmUgKHBy ZWNoZWNrZWQpICovCisgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMDEwLCJXSElMRSBkb2RvIixw LDApOworICAgICAgICAgICAgICAgICAgZG9kbyh4LHAsY21kc3RrW2NtZGx2bF0uY2NmbGdzIHwg Q0ZfSU1BQyk7CisgICAgICAgICAgICAgICAgICBmcmVlKHApOworICAgICAgICAgICAgICAgICAg cCA9IE5VTEw7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICBwcmlu dGYoIj9DYW4ndCBhbGxvY2F0ZSBzdG9yYWdlIGZvciBXSElMRSBjb21tYW5kIik7CisgICAgICAg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgICB9CisgICAgICAg ICAgfQorICAgICAgICAgIHJldHVybigwKTsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAg ICAgIHJldHVybigtMik7CisgICAgfQorfQorI2VuZGlmIC8qIE5PU1BMICovCisKKy8qIFNldCB1 cCBhIFRBS0UgY29tbWFuZCBmaWxlICovCisKK2ludAorZG90YWtlKHMpIGNoYXIgKnM7IHsKKyNp Zm5kZWYgTk9TUEwKKyAgICBleHRlcm4gaW50IHRyYV9jbWQ7CisjZW5kaWYgLyogTk9TUEwgKi8K KyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQgdGVybV9pbzsKKyAg ICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lvOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IE5PTE9DQUwgKi8KKyAgICBpbnQgc2xlbjsKKworICAgIGRlYnVnKEYxMTAsImRvdGFrZSIscyww KTsKKyAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICBpZiAoISpzKSByZXR1cm4oc3VjY2VzcyA9IDAp OworICAgIHNsZW4gPSBzdHJsZW4ocyk7CisgICAgZGVidWcoRjEwMSwiZG90YWtlIGxlbiIsIiIs c2xlbik7CisKKyAgICBpZiAoKHRmaWxlWysrdGxldmVsXSA9IGZvcGVuKHMsInIiKSkgPT0gTlVM TCkgeworICAgICAgICBwZXJyb3Iocyk7CisgICAgICAgIGRlYnVnKEYxMTAsImRvdGFrZSBmYWls IixzLDApOworICAgICAgICB0bGV2ZWwtLTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyAgICB9IGVsc2UgeworICAgICAgICB0ZmxpbmVbdGxldmVsXSA9IDA7ICAgICAgICAgICAgIC8q IExpbmUgY291bnRlciAqLworI2lmZGVmIFZNUworICAgICAgICBjb25yZXMoKTsgICAgICAgICAg ICAgICAgICAgICAgIC8qIFNvIEN0cmwtQyB3aWxsIHdvcmsgKi8KKyNlbmRpZiAvKiBWTVMgKi8K KyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgICAgICB0ZXJtX2lvID0gMDsgICAgICAg ICAgICAgICAgICAgIC8qIERpc2FibGUgVGVybWluYWwgRW11bGF0b3IgSS9PICovCisjZW5kaWYg LyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmbmRlZiBOT1NQTAorICAgICAgICBj bWRsdmwrKzsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVudGVyaW5nIGEgbmV3IGNvbW1hbmQg bGV2ZWwgKi8KKyAgICAgICAgZGVidWcoRjExMSwiQ01EICtGIixzLGNtZGx2bCk7CisgICAgICAg IGRlYnVnKEYxMDEsImRvdGFrZSBjbWRsdmwiLCIiLGNtZGx2bCk7CisgICAgICAgIGRlYnVnKEYx MDEsImRvdGFrZSB0bGV2ZWwiLCIiLHRsZXZlbCk7CisgICAgICAgIGlmIChjbWRsdmwgPiBDTURT VEtMKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJkb3Rha2Ugc3RhY2sgb3ZlcmZsb3ciLCIi LDApOworICAgICAgICAgICAgY21kbHZsLS07CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJDTUQq LUYiLHMsY21kbHZsKTsKKyAgICAgICAgICAgIGZjbG9zZSh0ZmlsZVt0bGV2ZWwtLV0pOworICAg ICAgICAgICAgcHJpbnRmKCI/VEFLRSBmaWxlcyBhbmQvb3IgRE8gY29tbWFuZHMgbmVzdGVkIHRv byBkZWVwbHlcbiIpOworICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAg fQorICAgICAgICBpZiAodGZuYW1bdGxldmVsXSkgeyAgICAgICAgICAgIC8qIENvcHkgdGhlIGZp bGVuYW1lICovCisgICAgICAgICAgICBmcmVlKHRmbmFtW3RsZXZlbF0pOworICAgICAgICAgICAg dGZuYW1bdGxldmVsXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0Zm5hbVt0bGV2 ZWxdID0gbWFsbG9jKHN0cmxlbihzKSArIDEpKSkgeworICAgICAgICAgICAgc3RyY3B5KHRmbmFt W3RsZXZlbF0scyk7ICAgIC8qIHNhZmUgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHByaW50ZigiP01lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgfQorICAgICAgICBpZmNtZFtjbWRsdmxdID0gMDsg ICAgICAgICAgICAgIC8qIFNldCB2YXJpYWJsZXMgZm9yIHRoaXMgY21kIGZpbGUgKi8KKyAgICAg ICAgaWZ0ZXN0W2NtZGx2bF0gPSAwOworICAgICAgICBjb3VudFtjbWRsdmxdICA9IGNvdW50W2Nt ZGx2bC0xXTsgIC8qIEluaGVyaXQgdGhpcyAqLworICAgICAgICBpbnRpbWVbY21kbHZsXSA9IGlu dGltZVtjbWRsdmwtMV07IC8qIEluaGVyaXQgdGhpcyAqLworICAgICAgICBpbnBjYXNbY21kbHZs XSA9IGlucGNhc1tjbWRsdmwtMV07IC8qIEluaGVyaXQgdGhpcyAqLworICAgICAgICB0YWtlcnJb Y21kbHZsXSA9IHRha2VycltjbWRsdmwtMV07IC8qIEluaGVyaXQgdGhpcyAqLworICAgICAgICBt ZXJyb3JbY21kbHZsXSA9IG1lcnJvcltjbWRsdmwtMV07IC8qIEluaGVyaXQgdGhpcyAqLworICAg ICAgICB4cXVpZXRbY21kbHZsXSA9IHF1aWV0OworICAgICAgICB4dmFyZXZbY21kbHZsXSA9IHZh cmV2YWw7CisgICAgICAgIHhjbWRzcmMgPSBDTURfVEY7CisgICAgICAgIGNtZHN0a1tjbWRsdmxd LnNyYyA9IENNRF9URjsgICAgLyogU2F5IHdlJ3JlIGluIGEgVEFLRSBmaWxlICovCisgICAgICAg IGNtZHN0a1tjbWRsdmxdLmx2bCA9IHRsZXZlbDsgICAgLyogbmVzdGVkIGF0IHRoaXMgbGV2ZWwg Ki8KKyAgICAgICAgY21kc3RrW2NtZGx2bF0uY2NmbGdzID0gY21kc3RrW2NtZGx2bC0xXS5jY2Zs Z3M7CisjZWxzZQorICAgICAgICB0YWtlcnJbdGxldmVsXSA9IHRha2Vyclt0bGV2ZWwtMV07IC8q IEluaGVyaXQgdGhpcyAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAgfQorI2lmbmRlZiBOT1NQ TAorICAgIGlmICh0cmFfY21kKQorICAgICAgcHJpbnRmKCJbJWRdICtGOiBcIiVzXCJcbiIsY21k bHZsLHMpOworI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIK KyAgICB0ZXJtX2lvID0gdGVybV9pb19zYXY7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyog Tk9MT0NBTCAqLworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBOT0lDUCAqLwoKZGlmZiAt LWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXM3LmMgYi9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNzRhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9ja2Vy bWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzNy5jCkBAIC0wLDAgKzEsMTUz MjMgQEAKKyNpbmNsdWRlICJja2NzeW0uaCIKKworLyogIEMgSyBVIFUgUyA3IC0tICAiVXNlciBJ bnRlcmZhY2UiIGZvciBDLUtlcm1pdCwgcGFydCA3ICAqLworCisvKgorICBBdXRob3JzOgorICAg IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICAgICAgVGhlIEtlcm1pdCBQcm9q ZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5CisgICAgSmVmZnJleSBFIEFs dG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgICAgIFNlY3VyZSBFbmRwb2lu dHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKKyAg ICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3Jr LgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhU IGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBm b3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBUaGlzIGZpbGUgY3Jl YXRlZCBmcm9tIHBhcnRzIG9mIGNrdXVzMy5jLCB3aGljaCBiZWNhbWUgdG9vIGJpZyBmb3IKKyAg TWFyayBXaWxsaWFtcyBDb2hlcmVudCBjb21waWxlciB0byBoYW5kbGUuCisqLworCisvKgorICBE ZWZpbml0aW9ucyBoZXJlIHN1cGVyc2VkZSB0aG9zZSBmcm9tIHN5c3RlbSBpbmNsdWRlIGZpbGVz LgorKi8KKyNpbmNsdWRlICJja2NkZWIuaCIgICAgICAgICAgICAgICAgICAgICAvKiBEZWJ1Z2dp bmcgJiBjb21waWxlciB0aGluZ3MgKi8KKyNpbmNsdWRlICJja2Nhc2MuaCIgICAgICAgICAgICAg ICAgICAgICAvKiBBU0NJSSBjaGFyYWN0ZXIgc3ltYm9scyAqLworI2luY2x1ZGUgImNrY2tlci5o IiAgICAgICAgICAgICAgICAgICAgIC8qIEtlcm1pdCBhcHBsaWNhdGlvbiBkZWZpbml0aW9ucyAq LworI2luY2x1ZGUgImNrY3hsYS5oIiAgICAgICAgICAgICAgICAgICAgIC8qIENoYXJhY3RlciBz ZXQgdHJhbnNsYXRpb24gKi8KKyNpbmNsdWRlICJja2NuZXQuaCIgICAgICAgICAgICAgICAgICAg ICAvKiBOZXR3b3JrIHN5bWJvbHMgKi8KKyNpbmNsdWRlICJja3V1c3IuaCIgICAgICAgICAgICAg ICAgICAgICAvKiBVc2VyIGludGVyZmFjZSBzeW1ib2xzICovCisjaW5jbHVkZSAiY2t1Y21kLmgi CisjaW5jbHVkZSAiY2tjbGliLmgiCisKKyNpZmRlZiBWTVMKKyNpZm5kZWYgVENQU09DS0VUCisj aW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKworI2lmZGVmIE9TMgorI2lmbmRlZiBOVAorI2RlZmluZSBJTkNMX05PUE0KKyNkZWZpbmUg SU5DTF9WSU8gICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkZWQgZm9yIGNrb2Nvbi5oICov CisjZGVmaW5lIElOQ0xfRE9TTU9EVUxFTUdSCisjaW5jbHVkZSA8b3MyLmg+CisjdW5kZWYgQ09N TUVOVAorI2Vsc2UgLyogTlQgKi8KKyNkZWZpbmUgQVBJUkVUIFVMT05HCisjaW5jbHVkZSA8d2lu ZG93cy5oPgorI2luY2x1ZGUgPHRhcGkuaD4KKyNpbmNsdWRlICJja253aW4uaCIKKyNpbmNsdWRl ICJja250YXAuaCIKKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImNrb3dpbi5oIgorI2luY2x1 ZGUgImNrb2Nvbi5oIgorI2luY2x1ZGUgImNrb2Rpci5oIgorI2lmZGVmIE9TMk1PVVNFCisjaW5j bHVkZSAiY2tva2V5LmgiCisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKyNpZmRlZiBLVUkKKyNpbmNs dWRlICJpa3VpLmgiCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgcHV0Y2hhcgorI3VuZGVmIHB1 dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICovCisjZGVmaW5lIHB1dGNoYXIoeCkgY29ub2MoeCkK K2V4dGVybiBpbnQgbXNra2V5czsKK2V4dGVybiBpbnQgbXNrcmVuYW1lOworI2VuZGlmIC8qIE9T MiAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyNpbmNsdWRlICJja3VhdGguaCIKKyNl bmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX1NTTAorI2luY2x1ZGUgImNr X3NzbC5oIgorI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyNpbmNsdWRl ICJja29zc2guaCIKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjaWZkZWYgU1RSQVRVUyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU3RyYXR1cyBDb21wdXRlciwgSW5jLiAgVk9TICovCisj aWZkZWYgcHV0Y2hhcgorI3VuZGVmIHB1dGNoYXIKKyNlbmRpZiAvKiBwdXRjaGFyICovCisjZGVm aW5lIHB1dGNoYXIoeCkgY29ub2MoeCkKKyNpZmRlZiBnZXRjaGFyCisjdW5kZWYgZ2V0Y2hhcgor I2VuZGlmIC8qIGdldGNoYXIgKi8KKyNkZWZpbmUgZ2V0Y2hhcih4KSBjb25pbmMoMCkKKyNlbmRp ZiAvKiBTVFJBVFVTICovCisKK2NoYXIgKiBzbG1zZyA9IE5VTEw7CisKK3N0YXRpYyBpbnQgeCwg eSA9IDAsIHo7CitzdGF0aWMgY2hhciAqczsKKworZXh0ZXJuIENIQVIgZmVvbDsKK2V4dGVybiBp bnQgZ19tYXRjaGRvdCwgaGludHMsIHhjbWRzcmMsIHJjZGFjdGl2ZTsKKworZXh0ZXJuIGNoYXIg KiBrX2luZm9fZGlyOworCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBDS19QQU0KK2ludCBnb3Rl bXB0eXBhc3N3ZCA9IDA7ICAgLyogZGlzdGluZ3Vpc2ggZW1wdHkgcGFzc3dkIGZyb20gbm9uZSBn aXZlbiAqLworI2VuZGlmIC8qIENLX1BBTSAqLworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyNp Zm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgbm1hYzsKK2V4dGVybiBzdHJ1Y3QgbXRhYiAqbWFjdGFi OworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfU1BFRUQK K2V4dGVybiBzaG9ydCBjdGxwW107ICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sLWNoYXIg cHJlZml4aW5nIHRhYmxlICovCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworI2lmZGVmIFBJUEVT RU5ECitleHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiBnX3NmaWx0ZXI7CitleHRlcm4gY2hhciAq IHJjdmZpbHRlciwgKiBnX3JmaWx0ZXI7CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworZXh0ZXJu IGNoYXIgKiBzbmRfbW92ZTsKK2V4dGVybiBjaGFyICogc25kX3JlbmFtZTsKK2V4dGVybiBjaGFy ICogZ19zbmRfbW92ZTsKK2V4dGVybiBjaGFyICogZ19zbmRfcmVuYW1lOworZXh0ZXJuIGNoYXIg KiByY3ZfbW92ZTsKK2V4dGVybiBjaGFyICogcmN2X3JlbmFtZTsKK2V4dGVybiBjaGFyICogZ19y Y3ZfbW92ZTsKK2V4dGVybiBjaGFyICogZ19yY3ZfcmVuYW1lOworCisjaWZkZWYgUEFUVEVSTlMK K2V4dGVybiBjaGFyICpiaW5wYXR0ZXJuc1tdLCAqdHh0cGF0dGVybnNbXTsKK2V4dGVybiBpbnQg cGF0dGVybnM7CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworZXh0ZXJuIGNoYXIgKiByZW1kZXN0 OworI2lmZGVmIENLX1RNUERJUgorY2hhciAqIGRsZGlyID0gTlVMTDsKKyNlbmRpZiAvKiBDS19U TVBESVIgKi8KKworZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKKworZXh0ZXJuIGludCBwcm90 b2NvbCwgcmVtZmlsZSwgcmVtcGlwZSwgcmVtYXBwZCwgcmVsaWFibGUsIHhyZWxpYWJsZSwgZm1h c2ssCisgIGZuY252LCBmcmVjbCwgbWF4cnBzLCB3c2xvdHIsIGJpZ3Nic2l6LCBiaWdyYnNpeiwg dXJwc2l6LCBycHNpeiwgc3BzaXosCisgIGJjdHIsIG5wYWQsIHRpbWVmLCB0aW1pbnQsIHNwc2l6 ciwgc3BzaXpmLCBtYXhzcHMsIHNwbWF4LCBuZmlscywgZGlzcGxhLAorICBhdGNhcHIsIHBrdHRp bSwgcnRpbW8sIGZuY2FjdCwgbXlwYWRuLCBmZGlzcGxhLCBmX3NhdmUsIHBrdHBhdXMsIHNldHJl bGlhYmxlLAorICBmbnJwYXRoLCBmbnNwYXRoLCBhdGVuY2ksIGF0ZW5jbywgYXRkYXRpLCBhdGRh dG8sIGF0bGVuaSwgYXRsZW5vLCBhdGJsa2ksCisgIGF0YmxrbywgYXR0eXBpLCBhdHR5cG8sIGF0 c2lkaSwgYXRzaWRvLCBhdHN5c2ksIGF0c3lzbywgYXRkaXNpLCBhdGRpc287CisKK2V4dGVybiBp bnQgc3RhdGhhY2s7CisKK2V4dGVybiBpbnQgYXRmcm1pLCBhdGZybW87CisjaWZkZWYgU1RSQVRV UworZXh0ZXJuIGludCBhdGNyZWksIGF0Y3JlbywgYXRhY3RpLCBhdGFjdG87CisjZW5kaWYgLyog U1RSQVRVUyAqLworI2lmZGVmIENLX1BFUk1TCitleHRlcm4gaW50IGF0bHByaSwgYXRscHJvLCBh dGdwcmksIGF0Z3BybzsKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworCitleHRlcm4gQ0hBUgorICBz c3RhdGUsIGVvbCwgc2VvbCwgc3RjaHIsIG15c3RjaCwgbXlwYWRjLCBwYWRjaCwgY3RscSwgbXlj dGxxOworCisjaWZkZWYgSUtTRAorZXh0ZXJuIGludCBpbnNlcnZlcjsKKyNpZmRlZiBJS1NEQ09O RgorZXh0ZXJuIGludCBpa3NkY2Y7CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyNlbmRpZiAvKiBJ S1NEICovCisKK2V4dGVybiBjaGFyICpjbWFyZywgKmNtYXJnMjsKKworI2lmbmRlZiBOT0ZSSUxM UworZXh0ZXJuIGNoYXIgb3B0YnVmW107ICAgICAgICAgICAgICAgICAgIC8qIEJ1ZmZlciBmb3Ig TUFJTCBvciBQUklOVCBvcHRpb25zICovCitleHRlcm4gaW50IHJwcmludGY7ICAgICAgICAgICAg ICAgICAgICAgLyogUkVNT1RFIFBSSU5UIGZsYWcgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tfVFJJR0dFUgorZXh0ZXJuIGNoYXIgKiB0 dF90cmlnZ2VyW107CisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCitleHRlcm4gaW50IHRjc190 cmFuc3A7CisjaWZkZWYgUENURVJNCitleHRlcm4gaW50IHR0X3BjdGVybTsKKyNlbmRpZiAvKiBQ Q1RFUk0gKi8KKyNpZmRlZiBOVAorZXh0ZXJuIGludCB0dF92dG50OworI2VuZGlmIC8qIE5UICov CisKKyNpZmRlZiBTU0hCVUlMVElOCitpbnQgc2xfc3NoX3hmdyA9IDA7CitpbnQgc2xfc3NoX3hm d19zYXZlZCA9IDA7CitpbnQgc2xfc3NoX3ZlciA9IDA7CitpbnQgc2xfc3NoX3Zlcl9zYXZlZCA9 IDA7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04K K2V4dGVybiBpbnQgYXV0aF90eXBlX3VzZXJbXTsKK2ludCBzbF9hdXRoX3R5cGVfdXNlcltBVVRI VFlQTFNUU1pdID0ge0FVVEhUWVBFX05VTEwsIEFVVEhUWVBFX05VTEx9OworaW50IHNsX2F1dGhf c2F2ZWQgPSAwOworaW50IHNsX3RvcHRfYV9zdSA9IDA7CitpbnQgc2xfdG9wdF9hX3Nfc2F2ZWQg PSAwOworaW50IHNsX3RvcHRfYV9jbSA9IDA7CitpbnQgc2xfdG9wdF9hX2Nfc2F2ZWQgPSAwOwor I2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorZXh0 ZXJuIGludCBjeF90eXBlOworaW50IHNsX2N4X3R5cGUgPSAwOworaW50IHNsX2N4X3NhdmVkID0g MDsKK2ludCBzbF90b3B0X2Vfc3UgPSAwOworaW50IHNsX3RvcHRfZV9zbSA9IDA7CitpbnQgc2xf dG9wdF9lX3Nfc2F2ZWQgPSAwOworaW50IHNsX3RvcHRfZV9jdSA9IDA7CitpbnQgc2xfdG9wdF9l X2NtID0gMDsKK2ludCBzbF90b3B0X2VfY19zYXZlZCA9IDA7CisjZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLworZXh0ZXJuIGNoYXIgdWlkYnVmW107CitzdGF0aWMgaW50IHVpZGZsYWcgPSAwOwor Y2hhciBzbF91aWRidWZbVUlEQlVGTEVOXSA9IHsgTlVMLCBOVUwgfTsKK2ludCAgc2xfdWlkX3Nh dmVkID0gMDsKKyNpZmRlZiBUTkNPREUKK2ludCAgc2xfdG5fd2FpdCA9IDA7CitpbnQgIHNsX3Ru X3NhdmVkID0gMDsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworI2lmZGVmIFROQ09ERQorZXh0ZXJu IGludCB0bl93YWl0X2ZsZzsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworVk9JRAorc2xyZXN0b3Io KSB7CisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAgICBpbnQgeDsKKyAgICBpZiAoc2xfYXV0 aF9zYXZlZCkgeworICAgICAgICBmb3IgKHggPSAwOyB4IDwgQVVUSFRZUExTVFNaOyB4KyspCisg ICAgICAgICAgYXV0aF90eXBlX3VzZXJbeF0gPSBzbF9hdXRoX3R5cGVfdXNlclt4XTsKKyAgICAg ICAgc2xfYXV0aF9zYXZlZCA9IDA7CisgICAgfQorICAgIGlmIChzbF90b3B0X2Ffc19zYXZlZCkg eworICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBz bF90b3B0X2Ffc3U7CisgICAgICAgIHNsX3RvcHRfYV9zX3NhdmVkID0gMDsKKyAgICB9CisgICAg aWYgKHNsX3RvcHRfYV9jX3NhdmVkKSB7CisgICAgICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRF TE9QVF9BVVRIRU5USUNBVElPTikgPSBzbF90b3B0X2FfY207CisgICAgICAgIHNsX3RvcHRfYV9j X3NhdmVkID0gMDsKKyAgICB9CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRl ZiBDS19FTkNSWVBUSU9OCisgICAgaWYgKHNsX2N4X3NhdmVkKSB7CisgICAgICAgIGN4X3R5cGUg PSBzbF9jeF90eXBlOworICAgICAgICBzbF9jeF9zYXZlZCA9IDA7CisgICAgfQorICAgIGlmIChz bF90b3B0X2Vfc19zYXZlZCkgeworICAgICAgICBURUxPUFRfREVGX1NfVV9NT0RFKFRFTE9QVF9F TkNSWVBUSU9OKSAgPSBzbF90b3B0X2Vfc3U7CisgICAgICAgIFRFTE9QVF9ERUZfU19NRV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9IHNsX3RvcHRfZV9zbTsKKyAgICAgICAgc2xfdG9wdF9lX3Nf c2F2ZWQgPSAwOworICAgIH0KKyAgICBpZiAoc2xfdG9wdF9lX2Nfc2F2ZWQpIHsKKyAgICAgICAg VEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgID0gc2xfdG9wdF9lX2N1Owor ICAgICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBzbF90b3B0 X2VfY207CisgICAgICAgIHNsX3RvcHRfZV9jX3NhdmVkID0gMDsKKyAgICB9CisjZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLworICAgIGlmIChzbF91aWRfc2F2ZWQpIHsKKyAgICAgICAgY2tzdHJu Y3B5KHVpZGJ1ZixzbF91aWRidWYsVUlEQlVGTEVOKTsKKyAgICAgICAgc2xfdWlkX3NhdmVkID0g MDsKKyAgICB9CisjaWZkZWYgVE5DT0RFCisgICAgaWYgKHNsX3RuX3NhdmVkKSB7CisgICAgICAg IHRuX3dhaXRfZmxnID0gc2xfdG5fd2FpdDsKKyAgICAgICAgc2xfdG5fc2F2ZWQgPSAwOworICAg IH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyNpZmRlZiBTU0hCVUlMVElOCisgICAgaWYgKHNsX3Nz aF94Zndfc2F2ZWQpIHsKKyAgICAgICAgc3NoX3hmdyA9IHNsX3NzaF94Znc7CisgICAgICAgIHNs X3NzaF94Zndfc2F2ZWQgPSAwOworICAgIH0KKyAgICBpZiAoc2xfc3NoX3Zlcl9zYXZlZCkgewor ICAgICAgICBzc2hfdmVyID0gc2xfc3NoX3ZlcjsKKyAgICAgICAgc2xfc3NoX3Zlcl9zYXZlZCA9 IDA7CisgICAgfQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KK30KKworaW50IG9sZHBsZXggPSAt MTsgICAgICAgICAgICAgICAgICAgICAgIC8qIER1cGxleCBob2xkZXIgYXJvdW5kIG5ldHdvcmsg Ki8KKworI2lmbmRlZiBOT0lDUAorI2lmZGVmIExPQ1VTCitleHRlcm4gaW50IGxvY3VzLCBhdXRv bG9jdXM7CisjZW5kaWYgLyogTE9DVVMgKi8KKyNpZm5kZWYgTk9ESUFMCitleHRlcm4gaW50IGRp YWxzdGE7CisjZW5kaWYgLyogTk9ESUFMICovCisKKy8qIE5vdGU6IGdjYyAtV2FsbCB3YW50cyBi cmFjZXMgYXJvdW5kIGVhY2gga2V5d29yZCB0YWJsZSBlbnRyeS4gKi8KKworc3RhdGljIHN0cnVj dCBrZXl0YWIgcHNsdGFiW10gPSB7ICAgICAgIC8qIFNFVCBMSU5FL1BPUlQgY29tbWFuZCBvcHRp b25zICovCisgICAgeyAiL2Nvbm5lY3QiLCBTTF9DTlgsIDAgfSwKKyNpZmRlZiBPUzJPUlZNUwor ICAgIHsgIi9ub3NoYXJlIiwgU0xfTlNILCAwIH0sCisjZW5kaWYgLyogT1MyT1JWTVMgKi8KKyAg ICB7ICIvc2VydmVyIiwgIFNMX1NSViwgMCB9LAorI2lmZGVmIE9TMk9SVk1TCisgICAgeyAiL3No YXJlIiwgICBTTF9TSFIsIDAgfSwKKyNlbmRpZiAvKiBPUzJPUlZNUyAqLworICAgIHsgIiIsIDAs IDAgfQorfTsKK3N0YXRpYyBpbnQgbnBzbHRhYiA9IHNpemVvZihwc2x0YWIpL3NpemVvZihzdHJ1 Y3Qga2V5dGFiKSAtIDE7CisKKyNpZmRlZiBORVRDT05OCitzdGF0aWMgc3RydWN0IGtleXRhYiBz aHRhYltdID0geyAgICAgICAgLyogU0VUIEhPU1QgY29tbWFuZCBvcHRpb25zICovCisjaWZkZWYg TkVUQ01ECisgICAgLyogKENPTU1BTkQgaXMgYWxzbyBhIG5ldHdvcmsgdHlwZSkgKi8KKyAgICB7 ICIvY29tbWFuZCIsICAgICAgU0xfQ01ELCAgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBORVRDTUQg Ki8KKyAgICB7ICIvY29ubmVjdCIsICAgICAgU0xfQ05YLCAgICAwIH0sCisgICAgeyAiL25ldHdv cmstdHlwZSIsIFNMX05FVCwgICAgQ01fQVJHIH0sCisgICAgeyAiL25vd2FpdCIsICAgICAgIFNM X05PV0FJVCwgMCB9LAorI2lmbmRlZiBOT1NQTAorI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisg ICAgeyAiL3Bhc3N3b3JkIiwgICAgIFNMX1BTVywgICAgQ01fQVJHIH0sCisjZW5kaWYgLyogQ0tf QVVUSEVOVElDQVRJT04gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIE5FVENNRAorICAg IHsgIi9waXBlIiwgICAgICAgICBTTF9DTUQsICAgIDAgfSwKKyNlbmRpZiAvKiBORVRDTUQgKi8K KyNpZmRlZiBORVRQVFkKKyAgICB7ICIvcHR5IiwgICAgICAgICAgU0xfUFRZLCAgICAwIH0sCisj ZW5kaWYgLyogTkVUUFRZICovCisgICAgeyAiL3NlcnZlciIsICAgICAgIFNMX1NSViwgICAgMCB9 LAorICAgIHsgIi90aW1lb3V0IiwgICAgICBTTF9UTU8sICAgIENNX0FSRyB9LAorICAgIHsgIi91 c2VyaWQiLCAgICAgICBTTF9VSUQsICAgIENNX0FSRyB9LAorICAgIHsgIi93YWl0IiwgICAgICAg ICBTTF9XQUlULCAgIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zaHRh YiA9IHNpemVvZihzaHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKworc3RhdGljIHN0 cnVjdCBrZXl0YWIgc2h0ZWx0YWJbXSA9IHsgICAgIC8qIFRFTE5FVCBjb21tYW5kIG9wdGlvbnMg Ki8KKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgIHsgIi9hdXRoIiwgICAgICAgICBTTF9B VVRILCAgIENNX0FSRyB9LAorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjaWZkZWYg Q0tfRU5DUllQVElPTgorICAgIHsgIi9lbmNyeXB0IiwgICAgICBTTF9FTkMsICAgIENNX0FSRyB9 LAorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICB7ICIvbm93YWl0IiwgICAgICAgU0xf Tk9XQUlULCAwIH0sCisjaWZuZGVmIE5PU1BMCisjaWZkZWYgQ0tfQVVUSEVOVElDQVRJT04KKyAg ICB7ICIvcGFzc3dvcmQiLCAgICAgU0xfUFNXLCAgICBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDS19B VVRIRU5USUNBVElPTiAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAiL3RpbWVvdXQiLCAg ICAgIFNMX1RNTywgICAgQ01fQVJHIH0sCisgICAgeyAiL3VzZXJpZCIsICAgICAgIFNMX1VJRCwg ICAgQ01fQVJHIH0sCisgICAgeyAiL3dhaXQiLCAgICAgICAgIFNMX1dBSVQsICAgMCB9LAorICAg IHsgIiIsIDAgLDAgfQorfTsKK3N0YXRpYyBpbnQgbnNodGVsdGFiID0gc2l6ZW9mKHNodGVsdGFi KS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworCisjaWZkZWYgUkxPR0NPREUKK3N0YXRpYyBz dHJ1Y3Qga2V5dGFiIHNocmxndGFiW10gPSB7ICAgICAvKiBTRVQgSE9TVCBSTE9HSU4gY29tbWFu ZCBvcHRpb25zICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisg ICAgeyAiL2VuY3J5cHQiLCAgICAgIFNMX0VOQywgMCB9LAorI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KKyAgICB7ICIvazQiLCAgICAgICAgICAgU0xfS1JCNCwgQ01fSU5WIH0sCisgICAgeyAi L2s1IiwgICAgICAgICAgIFNMX0tSQjUsIENNX0lOViB9LAorICAgIHsgIi9rZXJiZXJvczQiLCAg ICBTTF9LUkI0LCAwIH0sCisgICAgeyAiL2tlcmJlcm9zNSIsICAgIFNMX0tSQjUsIDAgfSwKKyAg ICB7ICIva2VyYmVyb3NfaXYiLCAgU0xfS1JCNCwgQ01fSU5WIH0sCisgICAgeyAiL2tlcmJlcm9z X3YiLCAgIFNMX0tSQjUsIENNX0lOViB9LAorICAgIHsgIi9rcmI0IiwgICAgICAgICBTTF9LUkI0 LCBDTV9JTlYgfSwKKyAgICB7ICIva3JiNSIsICAgICAgICAgU0xfS1JCNSwgQ01fSU5WIH0sCisj ZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICB7ICIiLCAwICwwIH0KK307CitzdGF0aWMgaW50 IG5zaHJsZ3RhYiA9IHNpemVvZihzaHJsZ3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpLTE7Cisj ZW5kaWYgLyogUkxPR0NPREUgKi8KKworZXh0ZXJuIHN0cnVjdCBrZXl0YWIgbmV0Y21kW107Citl eHRlcm4gaW50IG5uZXRzOworI2lmbmRlZiBOT0RJQUwKK2V4dGVybiBpbnQgZGlybGluZTsKK2V4 dGVybiBpbnQgbm5ldGRpcjsgICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3JrIHNlcnZpY2Vz IGRpcmVjdG9yeSAqLworZXh0ZXJuIGNoYXIgKm5ldGRpcltdOworX1BST1RPVFlQKCBWT0lEIG5k cmVzZXQsICh2b2lkKSApOworY2hhciAqbmhfcFtNQVhETlVNUyArIDFdOyAgICAgICAgICAgICAg IC8qIE5ldHdvcmsgZGlyZWN0b3J5IGVudHJ5IHBvaW50ZXJzICovCitjaGFyICpuaF9wMltNQVhE TlVNUyArIDFdOyAgICAgICAgICAgICAgLyogTmV0d29yayBkaXJlY3RvcnkgZW50cnkgbmV0dHlw ZSAqLworY2hhciAqbmhfcHhbNF1bTUFYRE5VTVMgKyAxXTsgICAgICAgICAgIC8qIE5ldHdvcmst c3BlY2lmaWMgc3R1ZmYuLi4gKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KK2ludCBuaGNvdW50ID0g MDsKK2ludCBuZGluaXRlZCA9IDA7CitjaGFyICogbl9uYW1lID0gTlVMTDsgICAgICAgICAgICAg ICAgICAgLyogTmV0d29yayBuYW1lIHBvaW50ZXIgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisK K19QUk9UT1RZUChpbnQgcmVtdHh0LCAoY2hhciAqKikgKTsKK19QUk9UT1RZUChWT0lEIHJtc2cs ICh2b2lkKSApOworX1BST1RPVFlQKHN0YXRpYyBpbnQgcmVtY2ZtLCAodm9pZCkgKTsKKworZXh0 ZXJuIGludCBub3B1c2g7CisKK2ludCBtZG1zYXYgPSAtMTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBTYXZlIG1vZGVtIHR5cGUgYXJvdW5kIG5ldHdvcmsgKi8KK2V4dGVybiBpbnQgaXNndWVz dDsgICAgICAgICAgICAgICAgICAgICAvKiBHbG9iYWwgZmxhZyBmb3IgYW5vbnltb3VzIGxvZ2lu ICovCisKK2V4dGVybiB4eF9zdHJwIHh4c3RyaW5nOworCitleHRlcm4gaW50IHN1Y2Nlc3MsIGJp bmFyeSwgYl9zYXZlLCBja3dhcm4sIG1zZ2ZsZywgcXVpZXQsIGNtYXNrLCBwZmxhZywgbG9jYWws CisgIG5ldHR5cGUsIGVzY2FwZSwgbWRtdHlwLCBkdXBsZXgsIGRmbG9jLCBuZXR3b3JrLCBjZHRp bW8sIGF1dG9mbG93LCB0bmxtLAorICBzb3NpLCB0bGV2ZWwsIGxmX29wdHMsIGJhY2tncmQsIGZs b3csIGRlYnNlcywgcGFyaXR5LCB0dG5wcm90bywgY2t4ZWNoLAorICB4X2lmbnVtLCBjbWZsZ3Ms IGhhdmVsaW5lLCBjeHR5cGUsIGN4Zmxvd1tdLCBtYWNsdmw7CisKKyNpZmRlZiBEQ01EQlVGCitl eHRlcm4gc3RydWN0IGNtZHB0ciAqY21kc3RrOyAgICAgICAgICAgLyogVGhlIGNvbW1hbmQgc3Rh Y2sgaXRzZWxmICovCisjZWxzZQorZXh0ZXJuIHN0cnVjdCBjbWRwdHIgY21kc3RrW107ICAgICAg ICAgIC8qIFRoZSBjb21tYW5kIHN0YWNrIGl0c2VsZiAqLworI2VuZGlmIC8qIERDTURCVUYgKi8K K2V4dGVybiBGSUxFICogdGZpbGVbXTsKK2V4dGVybiBjaGFyICogbWFjcFtdOworCitleHRlcm4g Y2hhciBwc2F2ZVtdOyAgICAgICAgICAgICAgICAgICAgLyogRm9yIHNhdmluZyAmIHJlc3Rvcmlu ZyBwcm9tcHQgKi8KK2V4dGVybiBpbnQgc3BybWxlbiwgcnBybWxlbjsKKworI2lmZGVmIE9TMgor c3RhdGljIHN0cnVjdCBrZXl0YWIgc3RybWtleXRhYltdID0geworICAgIHsgImNsZWFyIiwgICAw LCAwIH0sCisgICAgeyAiZGVmYXVsdCIsIDEsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnN0cm1rZXl0 YWIgPSBzaXplb2Yoc3RybWtleXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCitzdGF0aWMg c3RydWN0IGtleXRhYiBzdHJtc3dpdGFiW10gPSB7CisgICAgeyAiL2xpdGVyYWwiLCAwLCAwIH0K K307CitzdGF0aWMgaW50IG5zdHJtc3dpdGFiID0gc2l6ZW9mKHN0cm1zd2l0YWIpL3NpemVvZihz dHJ1Y3Qga2V5dGFiKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgbm9ybXJldltdID0geworICAg IHsgImRhcmstZGlzcGxheSIsIDAsIDAgfSwKKyAgICB7ICJsaWdodC1kaXNwbGF5IiwgMSwgMCB9 LAorICAgIHsgIm5vcm1hbCIsICAgMCwgMCB9LAorICAgIHsgInJldmVyc2UiLCAgMSwgMCB9Cit9 OworCitzdGF0aWMgc3RydWN0IGtleXRhYiBwcm5tdGFiW10gPSB7CisgICAgeyAiYXV0byIsIDEs IDAgfSwKKyAgICB7ICJjb3B5IiwgMiwgMCB9LAorICAgIHsgIm9mZiIsICAwLCAwIH0sCisgICAg eyAib24iLCAgIDEsIENNX0lOViB9LCAgICAgICAgICAgICAgLyogQ29tcGF0aWJpbGl0eSB3aXRo IFhQUklOVCB2ZXJzaW9uICovCisgICAgeyAidXNlciIsIDMsIDAgfSwKKyAgICB7ICJ0cmFuc3Bh cmVudCIsIDMsIENNX0lOViB9ICAgICAgICAvKiBub3QgcmVhbGx5IHRyYW5zcGFyZW50ICovCit9 Oworc3RhdGljIGludCBucHJubXRhYiA9IHNpemVvZihwcm5tdGFiKS9zaXplb2Yoc3RydWN0IGtl eXRhYik7CisKK2V4dGVybiBpbnQgdHRfZGlmZl91cGQ7CisKKyNpZmRlZiBOVAorI2RlZmluZSBz dHJpY21wIF9zdHJpY21wCitleHRlcm4gaW50IHR0X2F0dHJfYnVnOworI2VuZGlmIC8qIE5UICov CitleHRlcm4gaW50IHR0X3Jvd3NbXSwgdHRfY29sc1tdOworZXh0ZXJuIGludCB0dF9jb2xzX3Vz cjsKK2V4dGVybiBpbnQgdHRfc3pjaG5nW1ZOVU1dOworaW50IHR0X21vZGVjaGcgPSBUVkNfRU5B OworZXh0ZXJuIGludCB0dF91cmxfaGlsaXRlLCB0dF91cmxfaGlsaXRlX2F0dHI7CitleHRlcm4g c3RydWN0IF92dEcgR1s0XTsKK2V4dGVybiBpbnQgcHJpb3JpdHk7CitleHRlcm4gYm9vbCBzZW5k X2MxOworaW50IHNlbmRfYzFfdXNyID0gRkFMU0U7CitleHRlcm4gaW50IHNncmNvbG9yczsKK2V4 dGVybiBpbnQgbWFyZ2luYmVsbCwgbWFyZ2luYmVsbGNvbDsKK2V4dGVybiBpbnQgYXV0b3Njcm9s bCwgd3lfYXV0b3BhZ2U7CitleHRlcm4gaW50IHR0X3NhYzsKK2V4dGVybiBpbnQgZGVjX25yYywg ZGVjX2xhbmcsIGRlY19rYmQ7CisjZWxzZSAvKiBPUzIgKi8KK2V4dGVybiBpbnQgdHRfcm93cywg dHRfY29sczsKKyNlbmRpZiAvKiAgT1MyICovCisKK2V4dGVybiBpbnQgdHRfZXNjYXBlOworZXh0 ZXJuIGxvbmcgc3BlZWQ7CisKK2V4dGVybiBjaGFyICpkZnR0eTsKKworZXh0ZXJuIGNoYXIgKnRw LCAqbHA7ICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBidWZmZXIgJiBwb2ludGVycyAq LworZXh0ZXJuIGNoYXIgdHRuYW1lW107CisKKyNpZmRlZiBDS19UQVBJCitpbnQgdHR0YXBpID0g MDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXMgTGluZSBUQVBJPyAqLworc3RydWN0IGtl eXRhYiAqIHRhcGlsaW5ldGFiID0gTlVMTDsKK3N0cnVjdCBrZXl0YWIgKiBfdGFwaWxpbmV0YWIg PSBOVUxMOworaW50IG50YXBpbGluZSA9IDA7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisjaWZk ZWYgTkVUQ09OTiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmV0d29yayBpdGVtcyAqLwor CisjaWZkZWYgQU5ZWDI1CitleHRlcm4gaW50IHJldmNhbGwsIGNsb3NnciwgY3VkYXRhLCBueDI1 OworZXh0ZXJuIGNoYXIgdWRhdGFbXTsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHgyNXRhYltdOwor I2lmbmRlZiBJQk1YMjUKK2V4dGVybiBpbnQgbnBhZHgzOworZXh0ZXJuIENIQVIgcGFkcGFybXNb XTsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHBhZHgzdGFiW107CisjZW5kaWYgLyogSUJNWDI1ICov CisjZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZmRlZiBPUzIKK2V4dGVybiBib29sIHR0c2hhcmU7 CisjaWZuZGVmIE5UCitleHRlcm4gYm9vbCB0dHNsaXAsdHRwcHA7CisjZW5kaWYgLyogTlQgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBOUElQRQorZXh0ZXJuIGNoYXIgcGlwZW5hbWVbXTsK KyNlbmRpZiAvKiBOUElQRSAqLworCisjaWZkZWYgVENQU09DS0VUCitzdGF0aWMgc3RydWN0IGtl eXRhYiB0Y3ByYXd0YWJbXSA9IHsgICAgLyogU0VUIEhPU1Qgb3B0aW9ucyAqLworICAgIHsgIi9k ZWZhdWx0IiwgICAgTlBfREVGQVVMVCwgICAgQ01fSU5WIH0sCisjaWZkZWYgQ0tfQVVUSEVOVElD QVRJT04KKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIFJMT0dDT0RFCisgICAgeyAiL2VrNGxv Z2luIiwgICAgTlBfRUs0TE9HSU4sICAgIDAgfSwKKyAgICB7ICIvZWs1bG9naW4iLCAgICBOUF9F SzVMT0dJTiwgICAgMCB9LAorICAgIHsgIi9rNGxvZ2luIiwgICAgIE5QX0s0TE9HSU4sICAgICAw IH0sCisgICAgeyAiL2s1bG9naW4iLCAgICAgTlBfSzVMT0dJTiwgICAgIDAgfSwKKyNlbmRpZiAv KiBSTE9HQ09ERSAqLworI2lmZGVmIEtSQjVfVTJVCisgICAgeyAiL2s1dXNlcjJ1c2VyIiwgTlBf SzVVMlUsICAgICAgIDAgfSwKKyNlbmRpZiAvKiBLUkI1X1UyVSAqLworI2VuZGlmIC8qIENLX0tF UkJFUk9TICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICB7ICIvbm8tdGVs bmV0LWluaXQiLCBOUF9OT05FLCAgIDAgfSwKKyAgICB7ICIvbm9uZSIsICAgICAgIE5QX05PTkUs ICAgQ01fSU5WIH0sCisgICAgeyAiL3Jhdy1zb2NrZXQiLCBOUF9UQ1BSQVcsIDAgfSwKKyNpZmRl ZiBSTE9HQ09ERQorICAgIHsgIi9ybG9naW4iLCAgICAgTlBfUkxPR0lOLCAwIH0sCisjZW5kaWYg LyogUkxPR0NPREUgKi8KKyNpZmRlZiBDS19TU0wKKyAgICB7ICIvc3NsIiwgICAgICAgIE5QX1NT TCwgICAgMCB9LAorICAgIHsgIi9zc2wtcmF3IiwgICAgTlBfU1NMX1JBVywgMCB9LAorICAgIHsg Ii9zc2wtdGVsbmV0IiwgTlBfU1NMX1RFTE5FVCwgMCB9LAorI2VuZGlmIC8qIENLX1NTTCAqLwor ICAgIHsgIi90ZWxuZXQiLCAgICAgTlBfVEVMTkVULCAwIH0sCisjaWZkZWYgQ0tfU1NMCisgICAg eyAiL3RscyIsICAgICAgICBOUF9UTFMsICAgIDAgfSwKKyAgICB7ICIvdGxzLXJhdyIsICAgIE5Q X1RMU19SQVcsIDAgfSwKKyAgICB7ICIvdGxzLXRlbG5ldCIsIE5QX1RMU19URUxORVQsIDAgfSwK KyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG50 Y3ByYXcgPSAoc2l6ZW9mKHRjcHJhd3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK KworI2lmZGVmIFJMT0dDT0RFCitfUFJPVE9UWVAoIGludCBybG9nX25hd3MsICh2b2lkKSApOwor I2VuZGlmIC8qIFJMT0dDT0RFICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyNpZmRlZiBT VVBFUkxBVAorZXh0ZXJuIGNoYXIgc2xhdF9wd2RbMThdOworI2VuZGlmIC8qIFNVUEVSTEFUICov CisjZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZkZWYgQ09NTUVOVAorI2lmbmRlZiBOT1NFVEtF WQorZXh0ZXJuIEtFWSAqa2V5bWFwOworI2lmbmRlZiBPUzIKKyNkZWZpbmUgbWFwa2V5KHgpIGtl eW1hcFt4XQorI2VuZGlmIC8qIE9TMiAqLworZXh0ZXJuIE1BQ1JPICptYWNyb3RhYjsKKyNpZm5k ZWYgTk9LVkVSQlMKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOworZXh0ZXJuIGludCBu a3ZlcmJzOworI2VuZGlmIC8qIE5PS1ZFUkJTICovCisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKyNl bHNlCisjaWZuZGVmIE5PU0VUS0VZCitleHRlcm4gS0VZICprZXltYXA7CitleHRlcm4gTUFDUk8g Km1hY3JvdGFiOworI2lmbmRlZiBOT0tWRVJCUworZXh0ZXJuIHN0cnVjdCBrZXl0YWIga3ZlcmJz W107CitleHRlcm4gaW50IG5rdmVyYnM7CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyNlbmRpZiAv KiBOT1NFVEtFWSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIE9TMiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIEFVVE9ET1dOTE9BRCBwYXJhbWV0ZXJzICovCitleHRl cm4gaW50ICAgIGFkbF9rbW9kZSwgYWRsX3ptb2RlOyAgICAgLyogTWF0Y2ggUGFja2V0IHRvIHNp Z25hbCBkb3dubG9hZCAqLworZXh0ZXJuIGNoYXIgKiBhZGxfa3N0cjsgICAgICAgICAgICAgICAg IC8qIEtFUk1JVCBEb3dubG9hZCBTdHJpbmcgKi8KK2V4dGVybiBjaGFyICogYWRsX3pzdHI7ICAg ICAgICAgICAgICAgICAvKiBaTU9ERU0gRG93bmxvYWQgU3RyaW5nICovCitleHRlcm4gaW50IGFk bF9rYzAsIGFkbF96YzA7ICAgICAgICAgICAgLyogUHJvY2VzcyBBREwgQzBzIGluIGVtdWxhdGlv biAqLworI2VuZGlmIC8qIE9TMiAqLworCisvKiBLZXl3b3JkIHRhYmxlcyAuLi4gKi8KKworZXh0 ZXJuIHN0cnVjdCBrZXl0YWIgb25vZmZbXSwgcmx0YWJbXTsKK2V4dGVybiBpbnQgbnJsdDsKKwor I2lmbmRlZiBOT0NTRVRTCitzdGF0aWMgc3RydWN0IGtleXRhYiBmZGZsdGFiW10gPSB7CisgICAg eyAiN2JpdC1jaGFyYWN0ZXItc2V0IiwgNywgMCB9LAorICAgIHsgIjhiaXQtY2hhcmFjdGVyLXNl dCIsIDgsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmZkZmx0ID0gKHNpemVvZihmZGZsdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisvKiBTRVQgRklM RSBwYXJhbWV0ZXJzICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZpbHRhYltdID0geworI2lm bmRlZiBOT1hGRVIKKyNpZmRlZiBQQVRURVJOUworICAgIHsgImJpbmFyeS1wYXR0ZXJucyIsICAg WFlGSUJQLCAgMCB9LAorI2VuZGlmIC8qIFBBVFRFUk5TICovCisgICAgeyAiYnl0ZXNpemUiLCAg ICAgICAgIFhZRklMUywgICAwIH0sCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJjaGFyYWN0ZXIt c2V0IiwgICAgWFlGSUxDLCAgIDAgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAiY29s bGlzaW9uIiwgICAgICAgIFhZRklMWCwgICAwIH0sCisgICAgeyAiZGVmYXVsdCIsICAgICAgICAg IFhZRl9ERkxULCAwIH0sCisgICAgeyAiZGVzdGluYXRpb24iLCAgICAgIFhZRklMWSwgICAwIH0s CisgICAgeyAiZGlzcGxheSIsICAgICAgICAgIFhZRklMRCwgICBDTV9JTlYgfSwKKyNpZmRlZiBD S19UTVBESVIKKyAgICB7ICJkb3dubG9hZC1kaXJlY3RvcnkiLCBYWUZJTEcsIDAgfSwKKyNlbmRp ZiAvKiBDS19UTVBESVIgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJlbmQtb2YtbGlu ZSIsICAgICAgWFlGSUxBLCAgIDAgfSwKKyAgICB7ICJlb2wiLCAgICAgICAgICAgICAgWFlGSUxB LCAgIENNX0lOViB9LAorI2lmZGVmIENLX0NUUkxaCisgICAgeyAiZW9mIiwgICAgICAgICAgICAg IFhZRklMViwgICAwIH0sCisjZW5kaWYgLyogQ0tfQ1RSTFogKi8KKyNpZm5kZWYgTk9YRkVSCisg ICAgeyAiZmFzdGxvb2t1cHMiLCAgICAgIDk5OTcsICAgICBDTV9JTlYgfSwKKyAgICB7ICJpbmNv bXBsZXRlIiwgICAgICAgWFlGSUxJLCAgIDAgfSwKKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICB7 ICJpbnNwZWN0aW9uIiwgICAgICAgWFlGX0lOU1AsIENNX0lOViB9LAorI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCisjaWZkZWYgQ0tfTEFCRUxFRAorICAgIHsgImxhYmVsIiwgICAgICAgICAgICBY WUZJTEwsIDAgfSwKKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisKKyNpZmRlZiBVTklYCisjaWZk ZWYgRFlOQU1JQworICAgIHsgImxpc3RzaXplIiwgICAgICAgICBYWUZfTFNJWiwgMCB9LAorI2Vu ZGlmIC8qIERZTkFNSUMgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyAgICB7ICJuYW1lcyIsICAg ICAgICAgICAgWFlGSUxOLCAwIH0sCisjaWZkZWYgVU5JWAorICAgIHsgIm91dHB1dCIsICAgICAg ICAgICBYWUZJTEgsIDAgfSwKKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgUEFUVEVSTlMKKyAg ICB7ICJwYXR0ZXJucyIsICAgICAgICAgWFlGSVBBLCAwIH0sCisjZW5kaWYgLyogUEFUVEVSTlMg Ki8KKyNpZmRlZiBDT01NRU5UIC8qIE5vdCBpbXBsZW1lbnRlZCAoYnV0IHNlZSBDSE1PRCkgKi8K KyAgICB7ICJwZXJtaXNzaW9ucyIsICAgICAgWFlGX1BSTSwgQ01fSU5WIH0sCisgICAgeyAicHJv dGVjdGlvbiIsICAgICAgIFhZRl9QUk0sIDAgfSwKKyNlbmRpZiAvKiBDT01NRU50ICovCisjaWZk ZWYgVk1TCisgICAgeyAicmVjb3JkLWxlbmd0aCIsICAgIFhZRklMUiwgMCB9LAorI2VuZGlmIC8q IFZNUyAqLworI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAgIHsgInNjYW4iLCAgICAgICAgICAgICBY WUZfSU5TUCwgMCB9LAorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyNpZmRlZiBVTklYCisj aWZkZWYgRFlOQU1JQworICAgIHsgInN0cmluZ3NwYWNlIiwgICAgICBYWUZfU1NQQSwgMCB9LAor I2VuZGlmIC8qIERZTkFNSUMgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBQQVRURVJO UworICAgIHsgInQiLCAgICAgICAgICAgICAgICBYWUZJTFQsIENNX0lOVnxDTV9BQlIgfSwKKyAg ICB7ICJ0ZXh0LXBhdHRlcm5zIiwgICAgWFlGSVRQLCAwIH0sCisjZW5kaWYgLyogUEFUVEVSTlMg Ki8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJ0eXBlIiwgICAgICAgICAgICAgWFlGSUxU LCAwIH0sCisjaWZkZWYgVU5JQ09ERQorICAgIHsgInVjcyIsICAgICAgICAgICAgICBYWUZJTFUs IDAgfSwKKyNlbmRpZiAvKiBVTklDT0RFICovCisjaWZuZGVmIE5PWEZFUgorICAgIHsgIndhcm5p bmciLCAgICAgICAgICBYWUZJTFcsIENNX0lOViB9CisjZW5kaWYgLyogTk9YRkVSICovCit9Owor c3RhdGljIGludCBuZmlscCA9IChzaXplb2YoZmlsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7CisKK3N0cnVjdCBrZXl0YWIgcGF0aHRhYltdID0geworICAgIHsgImFic29sdXRlIiwgIFBB VEhfQUJTLCAgMCAgICAgIH0sCisgICAgeyAibm9uZSIsICAgICAgUEFUSF9PRkYsICBDTV9JTlYg fSwKKyAgICB7ICJvZmYiLCAgICAgICBQQVRIX09GRiwgIDAgICAgICB9LAorICAgIHsgIm9uIiwg ICAgICAgIFBBVEhfQUJTLCAgQ01fSU5WIH0sCisgICAgeyAicmVsYXRpdmUiLCAgUEFUSF9SRUws ICAwICAgICAgfQorfTsKK2ludCBucGF0aHRhYiA9IChzaXplb2YocGF0aHRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHJwYXRodGFiW10gPSB7CisgICAgeyAi YWJzb2x1dGUiLCAgUEFUSF9BQlMsICAwICAgICAgfSwKKyAgICB7ICJhdXRvIiwgICAgICBQQVRI X0FVVE8sIDAgICAgICB9LAorICAgIHsgIm5vbmUiLCAgICAgIFBBVEhfT0ZGLCAgQ01fSU5WIH0s CisgICAgeyAib2ZmIiwgICAgICAgUEFUSF9PRkYsICAwICAgICAgfSwKKyAgICB7ICJvbiIsICAg ICAgICBQQVRIX0FCUywgIENNX0lOViB9LAorICAgIHsgInJlbGF0aXZlIiwgIFBBVEhfUkVMLCAg MCAgICAgIH0KK307CitpbnQgbnJwYXRodGFiID0gKHNpemVvZihycGF0aHRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOworCisjaWZkZWYgQ0tfQ1RSTFoKK3N0cnVjdCBrZXl0YWIgZW9mdGFi W10gPSB7ICAgICAgICAgICAgICAvKiBFT0YgZGV0ZWN0aW9uIG1ldGhvZCAqLworICAgIHsgImN0 cmwteiIsICAgICAgICAgIDEsIDAgICAgICB9LAorICAgIHsgImxlbmd0aCIsICAgICAgICAgIDAs IDAgICAgICB9LAorICAgIHsgIm5vY3RybC16IiwgICAgICAgIDAsIENNX0lOViB9Cit9OworI2Vu ZGlmIC8qIENLX0NUUkxaICovCisKK3N0cnVjdCBrZXl0YWIgZnR0YWJbXSA9IHsgICAgICAgICAg ICAgICAvKiBGaWxlIHR5cGVzIGZvciBTRVQgRklMRSBUWVBFICovCisgICAgeyAiYXNjaWkiLCAg ICAgWFlGVF9ULCBDTV9JTlYgfSwKKyNpZmRlZiBWTVMKKyAgICB7ICJiIiwgICAgICAgICBYWUZU X0IsIENNX0lOVnxDTV9BQlIgfSwKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICB7ICJiaW5hcnkiLCAg ICBYWUZUX0IsIDAgfSwKKyNpZmRlZiBWTVMKKyAgICB7ICJibG9jayIsICAgICBYWUZUX0ksIENN X0lOViB9LAorICAgIHsgImltYWdlIiwgICAgIFhZRlRfSSwgMCB9LAorI2VuZGlmIC8qIFZNUyAq LworI2lmZGVmIENLX0xBQkVMRUQKKyAgICB7ICJsYWJlbGVkIiwgICBYWUZUX0wsIDAgfSwKKyNl bmRpZiAvKiBDS19MQUJFTEVEICovCisjaWZkZWYgTUFDCisgICAgeyAibWFjYmluYXJ5IiwgWFlG VF9NLCAwIH0sCisjZW5kaWYgLyogTUFDICovCisgICAgeyAidGV4dCIsICAgICAgWFlGVF9ULCAw IH0KK307CitpbnQgbmZ0dHlwID0gKHNpemVvZihmdHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiByZnR0YWJbXSA9IHsgICAgICAgLyogRmlsZSB0 eXBlcyBmb3IgUkVNT1RFIFNFVCBGSUxFICovCisgICAgeyAiYXNjaWkiLCAgICAgWFlGVF9ULCBD TV9JTlYgfSwKKyAgICB7ICJiaW5hcnkiLCAgICBYWUZUX0IsIDAgfSwKKyNpZmRlZiBWTVMKKyAg ICB7ICJsYWJlbGVkIiwgICBYWUZUX0wsIDAgfSwKKyNlbHNlCisjaWZkZWYgT1MyCisgICAgeyAi bGFiZWxlZCIsICAgWFlGVF9MLCAwIH0sCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogVk1T ICovCisgICAgeyAidGV4dCIsICAgICAgWFlGVF9ULCAwIH0KK307CitzdGF0aWMgaW50IG5yZnR0 eXAgPSAoc2l6ZW9mKHJmdHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisjaWZkZWYg T1MyT1JVTklYCisjZGVmaW5lIFpPRl9CTEsgIDAKKyNkZWZpbmUgWk9GX05CTEsgMQorI2RlZmlu ZSBaT0ZfQlVGICAyCisjZGVmaW5lIFpPRl9OQlVGIDMKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHpv ZnRhYltdID0geworICAgIHsgImJsb2NraW5nIiwgICAgWk9GX0JMSywgIDAgfSwKKyAgICB7ICJi dWZmZXJlZCIsICAgIFpPRl9CVUYsICAwIH0sCisgICAgeyAibm9uYmxvY2tpbmciLCBaT0ZfTkJM SywgMCB9LAorICAgIHsgInVuYnVmZmVyZWQiLCAgWk9GX05CVUYsIDAgfQorfTsKK3N0YXRpYyBp bnQgbnpvZnRhYiA9IChzaXplb2Yoem9mdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7Cisj ZW5kaWYgLyogT1MyT1JVTklYICovCisKK2V4dGVybiBpbnQgcXVlcnk7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBHbG9iYWwgZmxhZyBmb3IgUVVFUlkgYWN0aXZlICovCisKKyNpZm5kZWYgTk9T UEwKKyNpZm5kZWYgTk9YRkVSCitzdGF0aWMgc3RydWN0IGtleXRhYiB2YXJ0eXBbXSA9IHsgICAg ICAgLyogVmFyaWFibGUgdHlwZXMgZm9yIFJFTU9URSBRVUVSWSAqLworICAgIHsgImdsb2JhbCIs ICAgKGludCkgJ0cnLCBDTV9JTlYgfSwKKyAgICB7ICJrZXJtaXQiLCAgIChpbnQpICdLJywgMCB9 LAorICAgIHsgInN5c3RlbSIsICAgKGludCkgJ1MnLCAwIH0sCisgICAgeyAidXNlciIsICAgICAo aW50KSAnRycsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnZhcnR5cCA9IChzaXplb2YodmFydHlwKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogTk9YRkVSICovCisjZW5kaWYgLyog Tk9TUEwgKi8KKworI2lmZGVmIENLX1RJTUVSUworc3RhdGljIHN0cnVjdCBrZXl0YWIgdGltb3Rh YltdID0geyAgICAgIC8qIFRpbWVyIHR5cGVzICovCisgICAgeyAiZHluYW1pYyIsIDEsIDAgfSwK KyAgICB7ICJmaXhlZCIsICAgMCwgMCB9Cit9OworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCisj aWZkZWYgRENNREJVRgorZXh0ZXJuIGNoYXIgKmF0eGJ1ZiwgKmF0bWJ1ZjsgICAgICAgICAgIC8q IEF0b20gYnVmZmVyICovCitleHRlcm4gY2hhciAqY21kYnVmOyAgICAgICAgICAgICAgICAgICAg LyogQ29tbWFuZCBidWZmZXIgKi8KK2V4dGVybiBjaGFyICpsaW5lLCAqdG1wYnVmOyAgICAgICAg ICAgICAvKiBDaGFyYWN0ZXIgYnVmZmVycyBmb3IgYW55dGhpbmcgKi8KK2V4dGVybiBpbnQgKmlu dGltZTsgICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBUSU1FT1VUICovCisKKyNlbHNlICAv KiBOb3QgRENNREJVRiAuLi4gKi8KKworZXh0ZXJuIGNoYXIgYXR4YnVmW10sIGF0bWJ1ZltdOyAg ICAgICAgIC8qIEF0b20gYnVmZmVyICovCitleHRlcm4gY2hhciBjbWRidWZbXTsgICAgICAgICAg ICAgICAgICAgLyogQ29tbWFuZCBidWZmZXIgKi8KK2V4dGVybiBjaGFyIGxpbmVbXSwgdG1wYnVm W107ICAgICAgICAgICAvKiBDaGFyYWN0ZXIgYnVmZmVyIGZvciBhbnl0aGluZyAqLworZXh0ZXJu IGludCBpbnRpbWVbXTsKKworI2VuZGlmIC8qIERDTURCVUYgKi8KKworI2lmbmRlZiBOT0NTRVRT CitleHRlcm4gc3RydWN0IGtleXRhYiBmY3N0YWJbXTsgICAgICAgICAgLyogRm9yIFNFVCBGSUxF IENIQVJBQ1RFUi1TRVQgKi8KK2V4dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2luZm9bXTsgICAgICAg ICAvKiBGaWxlIGNoYXJhY3RlciBzZXQgaW5mby4gKi8KK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHR0 Y3N0YWJbXTsKK2V4dGVybiBpbnQgbmZpbGMsIGZjaGFyc2V0LCB0Y2hhcnNldCwgbnRlcm1jLCB0 Y3NyLCB0Y3NsLCBkY3NldDcsIGRjc2V0ODsKKyNpZmRlZiBDS09VTkkKK2V4dGVybiBpbnQgdHRf dXRmODsKKyNlbmRpZiAvKiBDS09VTkkgKi8KKyNpZmRlZiBPUzIKK19QUk9UT1RZUCggaW50IG9z MnNldGNwLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgb3MyZ2V0Y3AsICh2b2lkKSApOworX1BS T1RPVFlQKCB2b2lkIG9zMmRlYnVnb2ZmLCAodm9pZCkgKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBOT0NTRVRTICovCisKK2V4dGVybiBpbnQgY21kbHZsOyAgICAgICAgICAgICAgICAg ICAgICAvKiBPdmVyYWxsIGNvbW1hbmQgbGV2ZWwgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmZGVm IERDTURCVUYKK2V4dGVybiBpbnQgKmlucGNhczsgICAgICAgICAgICAgICAgICAgICAvKiBJTlBV VCBDQVNFIHNldHRpbmcgb24gY21kIHN0YWNrICovCisjZWxzZQorZXh0ZXJuIGludCBpbnBjYXNb XTsKKyNlbmRpZiAvKiBEQ01EQlVGICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIENL X0NVUlNFUworI2lmbmRlZiBWTVMKK19QUk9UT1RZUChpbnQgdGdldGVudCwoY2hhciAqLCBjaGFy ICopKTsKKyNlbHNlCisjaWZkZWYgX19ERUNDCitfUFJPVE9UWVAoaW50IHRnZXRlbnQsKGNoYXIg KiwgY2hhciAqKSk7CisjZW5kaWYgLyogX19ERUNDICovCisjZW5kaWYgLyogVk1TICovCisjZW5k aWYgLyogQ0tfQ1VSU0VTICovCisKKyNpZm5kZWYgTk9YTUlUCisjZGVmaW5lIFhNSVRGIDAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRSQU5TTUlUIHZhbHVlcyAqLworI2RlZmluZSBY TUlUTCAxICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChMb2NhbCB0byB0aGlzIG1vZHVsZSkg Ki8KKyNkZWZpbmUgWE1JVFAgMgorI2RlZmluZSBYTUlURSAzCisjZGVmaW5lIFhNSVRYIDQKKyNk ZWZpbmUgWE1JVFMgNQorI2RlZmluZSBYTUlUVyA2CisjZGVmaW5lIFhNSVRUIDcKKworI2RlZmlu ZSBYTUJVRkwgNTAKK2V4dGVybiBpbnQgeG1pdGYsIHhtaXRsLCB4bWl0cCwgeG1pdHgsIHhtaXRz LCB4bWl0dywgeG1pdHQ7CitjaGFyIHhtaXRidWZbWE1CVUZMKzFdID0geyBOVUwgfTsgICAgICAg LyogVFJBTlNNSVQgZW9mIHN0cmluZyAqLworCitzdHJ1Y3Qga2V5dGFiIHhtaXRhYltdID0geyAg ICAgICAgICAgICAgLyogU0VUIFRSQU5TTUlUICovCisgICAgeyAiZWNobyIsICAgICAgICAgIFhN SVRYLCAwIH0sCisgICAgeyAiZW9mIiwgICAgICAgICAgIFhNSVRFLCAwIH0sCisgICAgeyAiZmls bCIsICAgICAgICAgIFhNSVRGLCAwIH0sCisgICAgeyAibGluZWZlZWQiLCAgICAgIFhNSVRMLCAw IH0sCisgICAgeyAibG9ja2luZy1zaGlmdCIsIFhNSVRTLCAwIH0sCisgICAgeyAicGF1c2UiLCAg ICAgICAgIFhNSVRXLCAwIH0sCisgICAgeyAicHJvbXB0IiwgICAgICAgIFhNSVRQLCAwIH0sCisg ICAgeyAidGltZW91dCIsICAgICAgIFhNSVRULCAwIH0KK307CitpbnQgbnhtaXQgPSAoc2l6ZW9m KHhtaXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIE5PWE1JVCAqLwor CisvKiBGb3IgU0VUIEZJTEUgQ09MTElTSU9OICovCisvKiBTb21lIG9mIHRoZSBmb2xsb3dpbmcg bWF5IGJlIHBvc3NpYmxlIGZvciBzb21lIEMtS2VybWl0IGltcGxlbWVudGF0aW9ucyAqLworLyog YnV0IG5vdCBvdGhlcnMuICBUaG9zZSB0aGF0IGFyZSBub3QgcG9zc2libGUgZm9yIHlvdXIgaW1w bGVtZW50YXRpb24gKi8KKy8qIHNob3VsZCBiZSBpZmRlZidkIG91dC4gKi8KKworc3RydWN0IGtl eXRhYiBjb2x4dGFiW10gPSB7IC8qIFNFVCBGSUxFIENPTExJU0lPTiBvcHRpb25zICovCisjaWZu ZGVmIE1BQworICAgIHsgImFwcGVuZCIsICAgIFhZRlhfQSwgMCB9LCAgICAgICAgIC8qIGFwcGVu ZCB0byBvbGQgZmlsZSAqLworI2VuZGlmIC8qIE1BQyAqLworI2lmZGVmIENPTU1FTlQKKyAgICB7 ICJhc2siLCAgICAgICBYWUZYX1EsIDAgfSwgICAgICAgICAvKiBhc2sgd2hhdCB0byBkbyAobm90 IGltcGxlbWVudGVkKSAqLworI2VuZGlmCisgICAgeyAiYmFja3VwIiwgICAgWFlGWF9CLCAwIH0s ICAgICAgICAgLyogcmVuYW1lIG9sZCBmaWxlICovCisjaWZuZGVmIE1BQworICAgIC8qIFRoaXMg Y3Jhc2hlcyBNYWMgS2VybWl0LiAqLworICAgIHsgImRpc2NhcmQiLCAgIFhZRlhfRCwgQ01fSU5W IH0sCS8qIGRvbid0IGFjY2VwdCBuZXcgZmlsZSAqLworICAgIHsgIm5vLXN1cGVyc2VkZSIsIFhZ RlhfRCwgQ01fSU5WIH0sIC8qIGRpdHRvIChNU0sgY29tcGF0aWJpbGl0eSkgKi8KKyNlbmRpZiAv KiBNQUMgKi8KKyAgICB7ICJvdmVyd3JpdGUiLCBYWUZYX1gsIDAgfSwgICAgICAgICAvKiBvdmVy d3JpdGUgdGhlIG9sZCBmaWxlICovCisgICAgeyAicmVqZWN0IiwgICAgWFlGWF9ELCAwIH0sCQkv KiAoYmV0dGVyIHdvcmQgdGhhbiBkaXNjYXJkKSAqLworICAgIHsgInJlbmFtZSIsICAgIFhZRlhf UiwgMCB9LCAgICAgICAgIC8qIHJlbmFtZSB0aGUgaW5jb21pbmcgZmlsZSAqLworI2lmbmRlZiBN QUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY3Jhc2hlcyBNYWMgS2VybWl0 LiAqLworICAgIHsgInVwZGF0ZSIsICAgIFhZRlhfVSwgMCB9LCAgICAgICAgIC8qIHJlcGxhY2Ug aWYgbmV3ZXIgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQg bmNvbHggPSAoc2l6ZW9mKGNvbHh0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisK K3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHJmaWx0YWJbXSA9IHsgICAgICAvKiBmb3IgUkVNT1RFIFNF VCBGSUxFICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJjaGFyYWN0ZXItc2V0IiwgWFlGSUxD LCAwIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIHsgImNvbGxpc2lvbiIsICAgICBYWUZJ TFgsIDAgfSwKKyAgICB7ICJpbmNvbXBsZXRlIiwgICAgWFlGSUxJLCAwIH0sCisgICAgeyAibmFt ZXMiLCAgICAgICAgIFhZRklMTiwgMCB9LAorICAgIHsgInJlY29yZC1sZW5ndGgiLCBYWUZJTFIs IDAgfSwKKyAgICB7ICJ0eXBlIiwgICAgICAgICAgWFlGSUxULCAwIH0KK307CitpbnQgbnJmaWxw ID0gKHNpemVvZihyZmlsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBr ZXl0YWIgZW9sdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBGaWxlIGVvZiBkZWxpbWl0ZXJzICov CisgICAgeyAiY3IiLCAgICAgICAgWFlGQV9DLCAwIH0sCisgICAgeyAiY3JsZiIsICAgICAgWFlG QV8yLCAwIH0sCisgICAgeyAibGYiLCAgICAgICAgWFlGQV9MLCAwIH0KK307CitzdGF0aWMgaW50 IG5lb2x0YWIgPSAoc2l6ZW9mKGVvbHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitz dHJ1Y3Qga2V5dGFiIGZudGFiW10gPSB7ICAgICAgICAgICAgICAgLyogRmlsZSBuYW1pbmcgKi8K KyAgICB7ICJjb252ZXJ0ZWQiLCBYWUZOX0MsIDAgICAgICB9LAorICAgIHsgImxpdGVyYWwiLCAg IFhZRk5fTCwgMCAgICAgIH0sCisgICAgeyAic3RhbmRhcmQiLCAgWFlGTl9DLCBDTV9JTlYgfQor fTsKK2ludCBuZm50YWIgPSAoc2l6ZW9mKGZudGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 CisKKyNpZm5kZWYgTk9MT0NBTAorLyogVGVybWluYWwgcGFyYW1ldGVycyB0YWJsZSAqLworc3Rh dGljIHN0cnVjdCBrZXl0YWIgdHJtdGFiW10gPSB7CisjaWZkZWYgT1MyCisgICAgeyAiYW5zd2Vy YmFjayIsICAgIFhZVEFOUywgICAgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX0FQ QworICAgIHsgImFwYyIsICAgICAgICAgICBYWVRBUEMsICAgIDAgfSwKKyNlbmRpZiAvKiBDS19B UEMgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJhcnJvdy1rZXlzIiwgICAgWFlUQVJSLCAgICAwIH0s CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgTlQKKyAgICB7ICJhdCIsICAgICAgICAgICAgWFlU QVRUUiwgICBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiYXR0IiwgICAgICAgICAgIFhZVEFUVFIs ICAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgImF0dHIiLCAgICAgICAgICBYWVRBVFRSLCAgIENN X0lOVnxDTV9BQlIgfSwKKyAgICB7ICJhdHRyLWJ1ZyIsICAgICAgWFlUQVRUQlVHLCBDTV9JTlYg fSwKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIE9TMgorICAgIHsgImF0dHJpYnV0ZSIsICAgICBY WVRBVFRSLCAgIDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBDS19BUEMKKyNpZmRlZiBD S19BVVRPREwKKyAgIHsgImF1dG9kb3dubG9hZCIsICAgWFlUQVVUT0RMLCAwLCB9LAorI2VuZGlm IC8qIENLX0FVVE9ETCAqLworI2VuZGlmIC8qIENLX0FQQyAqLworI2lmZGVmIE9TMgorICAgIHsg ImF1dG9wYWdlIiwgICAgICBYWVRBUEFHRSwgIDAgfSwKKyAgICB7ICJhdXRvc2Nyb2xsIiwgICAg WFlUQVNDUkwsICAwIH0sCisgICAgeyAiYmVsbCIsICAgICAgICAgIFhZVEJFTCwgICAgQ01fSU5W IH0sCisjZW5kaWYgLyogT1MyICovCisgICAgeyAiYnl0ZXNpemUiLCAgICAgIFhZVEJZVCwgICAg MCB9LAorI2lmbmRlZiBOT0NTRVRTCisgICAgeyAiY2hhcmFjdGVyLXNldCIsIFhZVENTLCAgICAg MCB9LAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJjb2RlLXBhZ2Ui LCAgICAgWFlUQ1BHLCAgICAwIH0sCisgICAgeyAiY29sb3IiLCAgICAgICAgIFhZVENPTCwgICAg MCB9LAorICAgIHsgImNvbnRyb2xzIiwgICAgICBYWVRDVFJMLCAgIDAgfSwKKyNlbmRpZiAvKiBP UzIgKi8KKyAgICB7ICJjci1kaXNwbGF5IiwgICAgWFlUQ1JELCAgICAwIH0sCisjaWZkZWYgT1My CisgICAgeyAiY3Vyc29yIiwgICAgICAgIFhZVENVUiwgICAgMCB9LAorI2VuZGlmIC8qIE9TMiAq LworICAgIHsgImRlYnVnIiwgICAgICAgICBYWVRERUIsICAgIDAgfSwKKyNpZmRlZiBPUzIKKyAg ICB7ICJkZy11bml4LW1vZGUiLCAgWFlUVU5YLCAgICAwIH0sCisjZW5kaWYgLyogT1MyICovCisg ICAgeyAiZWNobyIsICAgICAgICAgIFhZVEVDLCAgICAgMCB9LAorICAgIHsgImVzY2FwZS1jaGFy YWN0ZXIiLCBYWVRFU0MsIDAgfSwKKyNpZmRlZiBPUzIKKyNpZmRlZiBQQ0ZPTlRTCisgICAgeyAi Zm9udCIsICAgICAgICAgIFhZVEZPTiwgICAgMCB9LAorI2Vsc2UKKyNpZmRlZiBLVUkKKyAgICB7 ICJmb250IiwgICAgICAgICAgWFlURk9OLCAgICAwIH0sCisjZW5kaWYgLyogS1VJICovCisjZW5k aWYgLyogUENGT05UUyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHsgImhlaWdodCIsICAgICAg ICBYWVRISUcsICAgIDAgfSwKKyNpZmRlZiBDS1RJRExFCisgICAgeyAiaWRsZS1hY3Rpb24iLCAg IFhZVElBQ1QsICAgMCB9LAorICAgIHsgImlkbGUtbGltaXQiLCAgICBYWVRJVE1PLCAgIENNX0lO ViB9LAorICAgIHsgImlkbGUtc2VuZCIsICAgICBYWVRJRExFLCAgIENNX0lOViB9LAorICAgIHsg ImlkbGUtdGltZW91dCIsICBYWVRJVE1PLCAgIDAgfSwKKyNlbmRpZiAvKiBDS1RJRExFICovCisj aWZkZWYgT1MyCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJrYmQtZm9sbG93cy1nbC9nciIsIFhZ VEtCREdMLCAwIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIHsgImtleSIsICAgICAgICAg ICBYWVRLRVksICAgIDAgfSwKKyAgICB7ICJrZXlib2FyZC1tb2RlIiwgWFlUS0JNT0QsICAwIH0s CisgICAgeyAia2V5cGFkLW1vZGUiLCAgIFhZVEtQRCwgICAgMCB9LAorI2VuZGlmIC8qIE9TMiAq LworICAgIHsgImxmLWRpc3BsYXkiLCAgICBYWVRMRkQsICAgIDAgfSwKKyNpZm5kZWYgTk9DU0VU UworI2lmZGVmIE9TMgorI2lmbmRlZiBLVUkKKyAgICB7ICJsaW5lLXNwYWNpbmciLCAgWFlUTFNQ LCAgICBDTV9JTlYgfSwKKyAgICB7ICJsb2NhbC1jaGFyYWN0ZXItc2V0IiwgWFlUTENTLCAgMCB9 LAorI2Vsc2UKKyAgICB7ICJsaW5lLXNwYWNpbmciLCAgWFlUTFNQLCAgICAwIH0sCisgICAgeyAi bG9jYWwtY2hhcmFjdGVyLXNldCIsIFhZVExDUywgIENNX0lOViB9LAorI2VuZGlmIC8qIEtVSSAq LworI2Vsc2UKKyAgICB7ICJsb2NhbC1jaGFyYWN0ZXItc2V0IiwgWFlUTENTLCAgQ01fSU5WIH0s CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIHsgImxvY2tpbmct c2hpZnQiLCBYWVRTTywgICAgIDAgfSwKKyNpZmRlZiBPUzIKKyAgICB7ICJtYXJnaW4tYmVsbCIs ICAgWFlUTUJFTCwgICAwIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgT1MyTU9VU0UKKyAg ICB7ICJtb3VzZSIsICAgICAgICAgWFlUTU9VLCAgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBPUzJN T1VTRSAqLworICAgIHsgIm5ld2xpbmUtbW9kZSIsICBYWVROTCwgICAgIDAgfSwKKyNpZmRlZiBP UzIKKyAgICB7ICJvdXRwdXQtcGFjaW5nIiwgWFlUUEFDLCAgICAwIH0sCisjaWZkZWYgUENURVJN CisgICAgeyAicGN0ZXJtIiwgICAgICAgIFhZVFBDVEVSTSwgMCB9LAorI2VuZGlmIC8qIFBDVEVS TSAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIE9TMk9SVU5JWAorICAgIHsgInByaW50Iiwg ICAgICAgICBYWVRQUk4sICAgIDAgfSwKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyNpZm5kZWYg Tk9DU0VUUworI2lmZGVmIE9TMgorICAgIHsgInJlbW90ZS1jaGFyYWN0ZXItc2V0IiwgWFlUUkNT LCAgMCB9LAorI2Vsc2UKKyAgICB7ICJyZW1vdGUtY2hhcmFjdGVyLXNldCIsIFhZVFJDUywgIENN X0lOViB9LAorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZmRlZiBP UzIKKyAgICB7ICJyb2xsLW1vZGUiLCAgICAgICBYWVRST0wsIDAgfSwKKyAgICB7ICJzIiwgICAg ICAgICAgICAgICBYWVRVUEQsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJzYyIsICAgICAgICAg ICAgICBYWVRVUEQsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJzY3IiLCAgICAgICAgICAgICBY WVRVUEQsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJzY3JlZSIsICAgICAgICAgICBYWVRVUEQs IENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJzY3JlZW4iLCAgICAgICAgICBYWVRVUEQsIENNX0FC UnxDTV9JTlYgfSwKKyAgICB7ICJzY3JlZW4tIiwgICAgICAgICBYWVRVUEQsIENNX0FCUnxDTV9J TlYgfSwKKyAgICB7ICJzY3JlZW4tbW9kZSIsICAgICBYWVRTQ05NLCAgIDAgfSwKKyAgICB7ICJz Y3JlZW4tb3B0aW1pemUiLCBYWVRPUFRJLCAgIDAgfSwKKyAgICB7ICJzY3JlZW4tdXBkYXRlIiwg ICBYWVRVUEQsICAgIDAgfSwKKyAgICB7ICJzY3JvbGxiYWNrIiwgICAgICBYWVNDUlMsICAgIDAg fSwKKyAgICB7ICJzZW5kLWRhdGEiLCAgICAgICAgIFhZVFNFTkQsIDAgfSwKKyAgICB7ICJzZW5k LWVuZC1vZi1ibG9jayIsIFhZVFNFT0IsIDAgfSwKKyAgICB7ICJzZ3ItY29sb3JzIiwgICAgICAg ICAgICBYWVRTR1JDLCAgMCB9LAorICAgIHsgInNuaS1jaC5jb2RlIiwgICAgICAgICAgIFhZVFNO SUNDLCAwIH0sCisgICAgeyAic25pLWZpcm13YXJlLXZlcnNpb25zIiwgWFlUU05JRlYsIDAgfSwK KyAgICB7ICJzbmktbGFuZ3VhZ2UiLCAgICAgICAgICBYWVRWVExORywgMCB9LAorICAgIHsgInNu aS1wYWdlbW9kZSIsICAgICAgICAgIFhZVFNOSVBNLCBDTV9JTlYgfSwKKyAgICB7ICJzbmktc2Ny b2xsbW9kZSIsICAgICAgICAgICAgICBYWVRTTklTTSwgQ01fSU5WIH0sCisgICAgeyAic3BhY2lu Zy1hdHRyaWJ1dGUtY2hhcmFjdGVyIiwgWFlUU0FDLCAgIENNX0lOViB9LAorICAgIHsgInN0YXR1 c2xpbmUiLCAgICAgICAgICAgICAgICAgIFhZVFNUQVQsICAwIH0sCisgICAgeyAidHJhIiwgICAg ICAgICAgICAgICAgICAgICAgICAgWFlUQ1RTLCAgIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJ0 cmFuc21pdC10aW1lb3V0IiwgICAgICAgICAgICBYWVRDVFMsICAgMCB9LAorI2VuZGlmIC8qIE9T MiAqLworCisjaWZkZWYgT1MyT1JVTklYCisgICAgeyAidHJhbnNwYXJlbnQtcHJpbnQiLCBYWVRQ Uk4sICAgQ01fSU5WIH0sCisjZW5kaWYgLyogT1MyT1JVTklYICovCisKKyNpZmRlZiBDS19UUklH R0VSCisgICAgeyAidHJpZ2dlciIsICAgICAgICAgICBYWVRSSUdHRVIsMCB9LAorI2VuZGlmIC8q IENLX1RSSUdHRVIgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJ0eXBlIiwgICAgICAgICAgICAgIFhZ VFRZUCwgICAwIH0sCisjZWxzZQorICAgIHsgInR5cGUiLCAgICAgICAgICAgICAgWFlUVFlQLCAg IENNX0lOViB9LAorI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyNpZmRlZiBV TklDT0RFCisjaWZkZWYgQ0tPVU5JCisgICAgeyAidW5pY29kZSIsICAgICAgICAgICBYWVRVTkks ICAgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0tPVU5JICovCisjZW5kaWYgLyogVU5JQ09ERSAqLwor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJ1bml4LW1vZGUiLCAgICAg ICAgIFhZVFVOWCwgICBDTV9JTlYgfSwKKyAgICB7ICJ1cmwtaGlnaGxpZ2h0IiwgICAgIFhZVFVS TEhJLCAwIH0sCisjaWZkZWYgTlQKKyAgICB7ICJ2aWRlby1jaGFuZ2UiLCAgICAgIFhZVFZDSCwg ICAwIH0sCisjZW5kaWYgLyogTlQgKi8KKyAgICB7ICJ2dC1sYW5ndWFnZSIsICAgICAgIFhZVFZU TE5HLCAwIH0sCisgICAgeyAidnQtbnJjLW1vZGUiLCAgICAgICBYWVRWVE5SQywgMCB9LAorI2Vu ZGlmIC8qIE9TMiAqLworICAgIHsgIndpZHRoIiwgICAgICAgICAgICAgWFlUV0lELCAgIDAgfSwK KyNpZmRlZiBPUzIKKyAgICB7ICJ3cmFwIiwgICAgICAgICAgICAgIFhZVFdSUCwgICAwIH0sCisj ZW5kaWYgLyogT1MyICovCisgICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG50cm0gPSAoc2l6ZW9m KHRybXRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworI2lmZGVmIE9TMgorc3Ry dWN0IGtleXRhYiB0ZXJtY3RybFtdID0geyAgICAvKiBTRVQgVEVSTSBDT05UUk9MUyAqLworICAg IHsgIjciLCAgICAgIDcsIDAgfSwKKyAgICB7ICI4IiwgICAgICA4LCAwIH0KK307CitpbnQgbnRl cm1jdHJsID0gKHNpemVvZih0ZXJtY3RybCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitz dHJ1Y3Qga2V5dGFiIGN1cm9udGFiW10gPSB7ICAgIC8qIFNFVCBURVJNIENVUlNPUiAqLworI2lm ZGVmIEtVSQorICAgIHsgIm5vYmxpbmsiLCAyLCAwIH0sCisjZWxzZQorICAgIHsgIm5vYmxpbmsi LCAyLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICB7ICJvZmYiLCAgICAgMCwgMCB9 LAorICAgIHsgIm9uIiwgICAgICAxLCAwIH0KK307CitpbnQgbmN1cm9uID0gKHNpemVvZihjdXJv bnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHJvbGx0YWJb XSA9IHsgICAvKiBTZXQgVEVSTSBSb2xsIE9wdGlvbnMgKi8KKyAgICB7ICJpbnNlcnQiLCAgICBU VFJfSU5TRVJULCAwICAgICAgfSwKKyAgICB7ICJrZXlzdHJva2VzIixUVFJfS0VZUywgICAwICAg ICAgfSwKKyAgICB7ICJvZmYiLCAgICAgICBUVFJfT1ZFUiwgICBDTV9JTlYgfSwKKyAgICB7ICJv biIsICAgICAgICBUVFJfSU5TRVJULCBDTV9JTlYgfSwKKyAgICB7ICJvdmVyd3JpdGUiLCBUVFJf T1ZFUiwgICAwICAgICAgfQorfTsKK2ludCBucm9sbCA9IChzaXplb2Yocm9sbHRhYikgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHJvbGxrZXl0YWJbXSA9IHsJCS8q IFNldCBURVJNIFJPTEwgS0VZU1RST0tFUyAqLworICAgIHsgImlnbm9yZSIsICAgICAgICAgICAg VFRSS19JR04sIDAgfSwKKyAgICB7ICJyZXN0b3JlLWFuZC1zZW5kIiwgIFRUUktfUlNULCAwIH0s CisgICAgeyAic2VuZCIsICAgICAgICAgICAgICBUVFJLX1NORCwgMCB9Cit9OworaW50IG5yb2xs a2V5ID0gKHNpemVvZihyb2xsa2V5dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNk ZWZpbmUgVFRfR1JfQUxMIDQKKyNkZWZpbmUgVFRfR1JfRzAgIDAKKyNkZWZpbmUgVFRfR1JfRzEg IDEKKyNkZWZpbmUgVFRfR1JfRzIgIDIKKyNkZWZpbmUgVFRfR1JfRzMgIDMKKyNkZWZpbmUgVFRf R1JfS0JEIDQKK3N0cnVjdCBrZXl0YWIgZ3JhcGhzZXR0YWJbXSA9IHsgIC8qIERFQyBWVCBHcmFw aGljIFNldHMgKi8KKyAgICB7ICJhbGwiLCAgICAgIFRUX0dSX0FMTCwgMCB9LAorICAgIHsgImcw IiwgICAgICAgVFRfR1JfRzAsICAwIH0sCisgICAgeyAiZzEiLCAgICAgICBUVF9HUl9HMSwgIDAg fSwKKyAgICB7ICJnMiIsICAgICAgIFRUX0dSX0cyLCAgMCB9LAorICAgIHsgImczIiwgICAgICAg VFRfR1JfRzMsICAwIH0sCisgICAgeyAia2V5Ym9hcmQiLCBUVF9HUl9LQkQsIDAgfQorfTsKK2lu dCBuZ3JhcGhzZXQgPSAoc2l6ZW9mKGdyYXBoc2V0dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFi KSk7CisjZW5kaWYgLyogT1MyICovCisKK3N0cnVjdCBrZXl0YWIgYWRsdGFiW10gPSB7ICAgICAg ICAgICAgICAvKiBBdXRvZG93bmxvYWQgT3B0aW9ucyAqLworICAgIHsgImFzayIsICAgICBUQURf QVNLLCAwIH0sCisgICAgeyAiZXJyb3IiLCAgIFRBRF9FUlIsIDAgfSwKKyNpZmRlZiBPUzIKKyAg ICB7ICJrZXJtaXQiLCAgVEFEX0ssICAgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworICAgIHsgIm9m ZiIsICAgICBUQURfT0ZGLCAwIH0sCisgICAgeyAib24iLCAgICAgIFRBRF9PTiwgIDAgfSwKKyNp ZmRlZiBPUzIKKyAgICB7ICJ6bW9kZW0iLCAgVEFEX1osICAgMCB9LAorI2VuZGlmIC8qIE9TMiAq LworICAgIHsgIiIsIDAsIDAgfQorfTsKK2ludCBuYWRsdGFiID0gKHNpemVvZihhZGx0YWIpIC8g c2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0cnVjdCBrZXl0YWIgYWRsZXJydGFiW10g PSB7ICAgICAgICAgICAvKiBBdXRvZG93bmxvYWQgRXJyb3IgT3B0aW9ucyAqLworICAgIHsgImNv bnRpbnVlIiwgMCwgMCB9LAorICAgIHsgImdvIiwgICAgICAgMCwgQ01fSU5WIH0sCisgICAgeyAi c3RvcCIsICAgICAxLCAwIH0KK307CitpbnQgbmFkbGVycnRhYiA9IChzaXplb2YoYWRsZXJydGFi KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZmRlZiBPUzIKK3N0cnVjdCBrZXl0YWIg YWRseHRhYltdID0geyAgICAgICAgICAgICAvKiBBdXRvZG93bmxvYWQgT3B0aW9ucyAqLworICAg IHsgImMwLWNvbmZsaWN0cyIsICAgICBUQURfWF9DMCwgICAgIDAgfSwKKyAgICB7ICJkZXRlY3Rp b24tbWV0aG9kIiwgVEFEX1hfREVURUNULCAwIH0sCisgICAgeyAic3RyaW5nIiwgICAgICAgICAg IFRBRF9YX1NUUiwgICAgMCB9Cit9OworaW50IG5hZGx4dGFiID0gKHNpemVvZihhZGx4dGFiKSAv IHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0YWIgYWRsZHRhYltdID0geyAg ICAgICAgICAgICAvKiBBdXRvLWRsIERldGVjdGlvbiBNZXRob2RzICovCisgICAgeyAicGFja2V0 IiwgICAgICAgICAgIEFETF9QQUNLLCAgICAgMCB9LAorICAgIHsgInN0cmluZyIsICAgICAgICAg ICBBRExfU1RSLCAgICAgIDAgfQorfTsKK2ludCBuYWRsZHRhYiA9IChzaXplb2YoYWRsZHRhYikg LyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIGFkbGMwdGFiW10gPSB7 ICAgICAgICAgICAgLyogQXV0by1kbCBEZXRlY3Rpb24gTWV0aG9kcyAqLworICAgIHsgImlnbm9y ZWQtYnktZW11bGF0b3IiLCAgICAwLCAgICAgIDAgfSwKKyAgICB7ICJwcm9jZXNzZWQtYnktZW11 bGF0b3IiLCAgMSwgICAgICAwIH0KK307CitpbnQgbmFkbGMwdGFiID0gKHNpemVvZihhZGxjMHRh YikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisjaWZuZGVmIE5PQ1NFVFMKK3N0cnVjdCBr ZXl0YWIgdnRsYW5ndGFiW10gPSB7CisgICAgeyAiYmVsZ2lhbiIsICAgICAgICBWVExfQkVMR0lB TiAsIDAgfSwKKyAgICB7ICJicml0aXNoIiwgICAgICAgIFZUTF9CUklUSVNIICwgMCB9LAorICAg IHsgImNhbmFkaWFuIiwgICAgICAgVlRMX0NBTkFESUFOLCAwIH0sCisgICAgeyAiY3plY2giLCAg ICAgICAgICBWVExfQ1pFQ0ggICAsIDAgfSwKKyAgICB7ICJkYW5pc2giLCAgICAgICAgIFZUTF9E QU5JU0ggICwgMCB9LAorICAgIHsgImR1dGNoIiwgICAgICAgICAgVlRMX0RVVENIICAgLCAwIH0s CisgICAgeyAiZmlubmlzaCIsICAgICAgICBWVExfRklOTklTSCAsIDAgfSwKKyAgICB7ICJmcmVu Y2giLCAgICAgICAgIFZUTF9GUkVOQ0ggICwgMCB9LAorICAgIHsgImZyZW5jaC1jYW5hZGlhbiIs VlRMX0ZSX0NBTiAgLCAwIH0sCisgICAgeyAiZ2VybWFuIiwgICAgICAgICBWVExfR0VSTUFOICAs IDAgfSwKKyAgICB7ICJncmVlayIsICAgICAgICAgIFZUTF9HUkVFSyAgICwgMCB9LAorICAgIHsg ImhlYnJldyIsICAgICAgICAgVlRMX0hFQlJFVyAgLCAwIH0sCisgICAgeyAiaHVuZ2FyaWFuIiwg ICAgICBWVExfSFVOR0FSSUEsIDAgfSwKKyAgICB7ICJpdGFsaWFuIiwgICAgICAgIFZUTF9JVEFM SUFOICwgMCB9LAorICAgIHsgImxhdGluLWFtZXJpY2FuIiwgVlRMX0xBVElOX0FNLCAwIH0sCisg ICAgeyAibm9ydGgtYW1lcmljYW4iLCBWVExfTk9SVEhfQU0sIDAgfSwKKyAgICB7ICJub3J3ZWdp YW4iLCAgICAgIFZUTF9OT1JXRUdJQSwgMCB9LAorICAgIHsgInBvbGlzaCIsICAgICAgICAgVlRM X1BPTElTSCAgLCAwIH0sCisgICAgeyAicG9ydHVnZXNlIiwgICAgICBWVExfUE9SVFVHRVMsIDAg fSwKKyAgICB7ICJyb21hbmlhbiIsICAgICAgIFZUTF9ST01BTklBTiwgMCB9LAorICAgIHsgInJ1 c3NpYW4iLCAgICAgICAgVlRMX1JVU1NJQU4gLCAwIH0sCisgICAgeyAic2NzIiwgICAgICAgICAg ICBWVExfU0NTICAgICAsIENNX0lOViB9LAorICAgIHsgInNsb3ZhayIsICAgICAgICAgVlRMX1NM T1ZBSyAgLCAwIH0sCisgICAgeyAic3BhbmlzaCIsICAgICAgICBWVExfU1BBTklTSCAsIDAgfSwK KyAgICB7ICJzd2VkaXNoIiwgICAgICAgIFZUTF9TV0VESVNIICwgMCB9LAorICAgIHsgInN3aXNz LWZyZW5jaCIsICAgVlRMX1NXX0ZSICAgLCAwIH0sCisgICAgeyAic3dpc3MtZ2VybWFuIiwgICBW VExfU1dfR1IgICAsIDAgfSwKKyAgICB7ICJ0dXJraXNoLWYiLCAgICAgIFZUTF9UVVJLX0YgICwg Q01fSU5WIH0sCisgICAgeyAidHVya2lzaC1xIiwgICAgICBWVExfVFVSS19RICAsIENNX0lOViB9 Cit9OworaW50IG52dGxhbmd0YWIgPSAoc2l6ZW9mKHZ0bGFuZ3RhYikgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworc3Ry dWN0IGtleXRhYiBjcmR0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIENhcnJpYWdlLXJldHVybiBk aXNwbGF5ICovCisgICAgeyAiY3JsZiIsICAgICAgICAxLCAwIH0sCisgICAgeyAibm9ybWFsIiwg ICAgICAwLCAwIH0KK307CitleHRlcm4gaW50IHR0X2NyZDsgICAgICAgICAgICAgICAgICAgICAg LyogQ2FycmlhZ2UtcmV0dXJuIGRpc3BsYXkgdmFyaWFibGUgKi8KK2V4dGVybiBpbnQgdHRfbGZk OwkJCS8qIExpbmVmZWVkIGRpc3BsYXkgdmFyaWFibGUgKi8KKworI2lmZGVmIENLX0FQQworZXh0 ZXJuIGludCBhcGNzdGF0dXMsIGFwY2FjdGl2ZTsKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGFwY3Rh YltdID0geyAgICAgICAvKiBUZXJtaW5hbCBBUEMgcGFyYW1ldGVycyAqLworICAgIHsgICJuby1p bnB1dCIsIEFQQ19PTnxBUENfTk9JTlAsMCB9LAorICAgIHsgIm9mZiIsICAgICAgIEFQQ19PRkYs ICAwIH0sCisgICAgeyAib24iLCAgICAgICAgQVBDX09OLCAgIDAgfSwKKyAgICB7ICJ1bmNoZWNr ZWQiLCBBUENfT058QVBDX1VOQ0gsIDAgfSwKKyAgICB7ICJ1bmNoZWNrZWQtbm8taW5wdXQiLCBB UENfT058QVBDX05PSU5QfEFQQ19VTkNILCAwIH0KK307CitpbnQgbmFwY3RhYiA9IChzaXplb2Yo YXBjdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogQ0tfQVBDICovCisj ZW5kaWYgLyogTk9MT0NBTCAqLworCitleHRlcm4gaW50IGF1dG9kbCwgYWRsX2VyciwgYWRsX2Fz azsKKworc3RydWN0IGtleXRhYiBiZWx0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIFRlcm1pbmFs IGJlbGwgbW9kZSAqLworI2lmZGVmIE9TMgorICAgIHsgImF1ZGlibGUiLCBYWUJfQVVELCAgMCB9 LAorICAgIHsgIm5vbmUiLCAgICBYWUJfTk9ORSwgMCB9LAorI2Vsc2UKKyAgICB7ICJhdWRpYmxl IiwgWFlCX0FVRCwgIENNX0lOViB9LAorICAgIHsgIm5vbmUiLCAgICBYWUJfTk9ORSwgQ01fSU5W IH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgT1MyCisgICAgeyAib2ZmIiwgICAgIFhZQl9O T05FLCBDTV9JTlYgfSwKKyAgICB7ICJvbiIsICAgICAgWFlCX0FVRCwgIENNX0lOViB9LAorI2Vs c2UKKyAgICB7ICJvZmYiLCAgICAgWFlCX05PTkUsIDAgfSwKKyAgICB7ICJvbiIsICAgICAgWFlC X0FVRCwgIDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJ2aXNpYmxl IiwgWFlCX1ZJUywgIDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307 CitpbnQgbmJlbHRhYiA9IHNpemVvZihiZWx0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7 CisKK2ludCB0dF91bmljb2RlID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgVW5pY29k ZSBpZiBwb3NzaWJsZSAqLworI2lmZGVmIENLVElETEUKK2ludCB0dF9pZGxlc25kX3RtbyA9IDA7 ICAgICAgICAgICAgICAgICAvKiBJZGxlIFNlbmQgVGltZW91dCwgZGlzYWJsZWQgKi8KK2NoYXIg KiB0dF9pZGxlc25kX3N0ciA9IE5VTEw7ICAgICAgICAgICAvKiBJZGxlIFNlbmQgU3RyaW5nLCBu b25lICovCitjaGFyICogdHRfaWRsZXN0ciA9IE5VTEw7CitleHRlcm4gaW50IHR0X2lkbGVhY3Qs IHR0X2lkbGVsaW1pdDsKKyNlbmRpZiAvKiBDS1RJRExFICovCisKKyNpZmRlZiBPUzIKKyNpZm5k ZWYgTk9MT0NBTAorLyoKKyAgT1MvMiBzZXJpYWwgY29tbXVuaWNhdGlvbiBkZXZpY2VzLgorKi8K K3N0cnVjdCBrZXl0YWIgb3MyZGV2dGFiW10gPSB7CisgICAgeyAiMSIsICAgIDEsIENNX0lOViB9 LCAgICAgICAgICAgICAgICAgICAgICAvKiBJbnZpc2libGUgc3lub255bXMsIGxpa2UgKi8KKyAg ICB7ICIyIiwgICAgMiwgQ01fSU5WIH0sICAgICAgICAgICAgICAgICAgICAgIC8qICJzZXQgcG9y dCAxIiAqLworICAgIHsgIjMiLCAgICAzLCBDTV9JTlYgfSwKKyAgICB7ICI0IiwgICAgNCwgQ01f SU5WIH0sCisgICAgeyAiNSIsICAgIDUsIENNX0lOViB9LAorICAgIHsgIjYiLCAgICA2LCBDTV9J TlYgfSwKKyAgICB7ICI3IiwgICAgNywgQ01fSU5WIH0sCisgICAgeyAiOCIsICAgIDgsIENNX0lO ViB9LAorICAgIHsgImNvbTEiLCAxLCAwIH0sICAgICAgICAgICAgICAgICAgIC8qIFJlYWwgZGV2 aWNlIG5hbWVzICovCisgICAgeyAiY29tMiIsIDIsIDAgfSwKKyAgICB7ICJjb20zIiwgMywgMCB9 LAorICAgIHsgImNvbTQiLCA0LCAwIH0sCisgICAgeyAiY29tNSIsIDUsIDAgfSwKKyAgICB7ICJj b202IiwgNiwgMCB9LAorICAgIHsgImNvbTciLCA3LCAwIH0sCisgICAgeyAiY29tOCIsIDgsIDAg fSwKKyNpZmRlZiBPUzJPTkxZCisgICAgeyAic2xpcGNvbTEiLCAxLCAwIH0sICAgICAgICAgICAg ICAgICAgICAgICAvKiBGb3IgdXNlIHdpdGggU0xJUCBkcml2ZXIgKi8KKyAgICB7ICJzbGlwY29t MiIsIDIsIDAgfSwgICAgICAgICAgICAgICAgICAgICAgIC8qIHNoYXJlZCBhY2Nlc3MgKi8KKyAg ICB7ICJzbGlwY29tMyIsIDMsIDAgfSwKKyAgICB7ICJzbGlwY29tNCIsIDQsIDAgfSwKKyAgICB7 ICJzbGlwY29tNSIsIDUsIDAgfSwKKyAgICB7ICJzbGlwY29tNiIsIDYsIDAgfSwKKyAgICB7ICJz bGlwY29tNyIsIDcsIDAgfSwKKyAgICB7ICJzbGlwY29tOCIsIDgsIDAgfSwKKyAgICB7ICJwcHBj b20xIiwgMSwgMCB9LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciB1c2Ugd2l0aCBQUFAg ZHJpdmVyICovCisgICAgeyAicHBwY29tMiIsIDIsIDAgfSwgICAgICAgICAgICAgICAgICAgICAg ICAvKiBzaGFyZWQgYWNjZXNzICovCisgICAgeyAicHBwY29tMyIsIDMsIDAgfSwKKyAgICB7ICJw cHBjb200IiwgNCwgMCB9LAorICAgIHsgInBwcGNvbTUiLCA1LCAwIH0sCisgICAgeyAicHBwY29t NiIsIDYsIDAgfSwKKyAgICB7ICJwcHBjb203IiwgNywgMCB9LAorICAgIHsgInBwcGNvbTgiLCA4 LCAwIH0KKyNlbmRpZiAvKiBPUzJPTkxZICovCit9OworaW50IG5vczJkZXYgPSAoc2l6ZW9mKG9z MmRldnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworI2lmZGVmIE9TMk9OTFkK K3N0cnVjdCBrZXl0YWIgb3MycHBwdGFiW10gPSB7CisgICAgeyAiMCIsICAgIDAsIENNX0lOViB9 LAorICAgIHsgIjEiLCAgICAxLCBDTV9JTlYgfSwgICAgICAgICAgICAgICAgICAgICAgLyogSW52 aXNpYmxlIHN5bm9ueW1zLCBsaWtlICovCisgICAgeyAiMiIsICAgIDIsIENNX0lOViB9LCAgICAg ICAgICAgICAgICAgICAgICAvKiAic2V0IHBvcnQgMSIgKi8KKyAgICB7ICIzIiwgICAgMywgQ01f SU5WIH0sCisgICAgeyAiNCIsICAgIDQsIENNX0lOViB9LAorICAgIHsgIjUiLCAgICA1LCBDTV9J TlYgfSwKKyAgICB7ICI2IiwgICAgNiwgQ01fSU5WIH0sCisgICAgeyAiNyIsICAgIDcsIENNX0lO ViB9LAorICAgIHsgIjgiLCAgICA4LCBDTV9JTlYgfSwKKyAgICB7ICI5IiwgICAgOSwgQ01fSU5W IH0sCisgICAgeyAicHBwMCIsIDAsIDAgfSwKKyAgICB7ICJwcHAxIiwgMSwgMCB9LCAgICAgICAg ICAgICAgICAgICAvKiBGb3IgdXNlIHdpdGggUFBQIGRyaXZlciAqLworICAgIHsgInBwcDIiLCAy LCAwIH0sICAgICAgICAgICAgICAgICAgIC8qIHNoYXJlZCBhY2Nlc3MgKi8KKyAgICB7ICJwcHAz IiwgMywgMCB9LAorICAgIHsgInBwcDQiLCA0LCAwIH0sCisgICAgeyAicHBwNSIsIDUsIDAgfSwK KyAgICB7ICJwcHA2IiwgNiwgMCB9LAorICAgIHsgInBwcDciLCA3LCAwIH0sCisgICAgeyAicHBw OCIsIDgsIDAgfSwKKyAgICB7ICJwcHA5IiwgOSwgMCB9Cit9OworaW50IG5vczJwcHAgPSAoc2l6 ZW9mKG9zMnBwcHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIE9TMk9O TFkgKi8KKworLyoKKyAgVGVybWluYWwgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzZXQgYnkgU0VU IGNvbW1hbmRzLgorICBVc2VkIGJ5IHRoZSBjaz9jb24uYyB0ZXJtaW5hbCBlbXVsYXRvciBjb2Rl LgorICBGb3Igbm93LCBvbmx5IHVzZWQgZm9yICNpZmRlZiBPUzIuICBTaG91bGQgYWRkIHRoZXNl IGZvciBNYWNpbnRvc2guCisqLworaW50IHR0X2Fycm93ID0gVFRLX05PUk07ICAgICAgICAgICAg ICAgIC8qIEFycm93IGtleSBtb2RlOiBub3JtYWwgKGN1cnNvcikgKi8KK2ludCB0dF9rZXlwYWQg PSBUVEtfTk9STTsgICAgICAgICAgICAgICAvKiBLZXlwYWQgbW9kZTogbm9ybWFsIChudW1lcmlj KSAqLworaW50IHR0X3NoaWZ0X2tleXBhZCA9IDA7ICAgICAgICAgICAgICAgIC8qIEtleXBhZCBT aGlmdCBtb2RlOiBPZmYgKi8KK2ludCB0dF93cmFwID0gMTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUZXJtaW5hbCB3cmFwLCAxID0gT24gKi8KK2ludCB0dF90eXBlID0gVFRfVlQyMjA7ICAg ICAgICAgICAgICAgICAvKiBUZXJtaW5hbCB0eXBlLCBpbml0aWFsbHkgVlQyMjAgKi8KK2ludCB0 dF90eXBlX21vZGUgPSBUVF9WVDIyMDsgICAgICAgICAgICAvKiBUZXJtaW5hbCB0eXBlIHNldCBi eSBob3N0IGNvbW1hbmQgKi8KK2ludCB0dF9jdXJzb3IgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAvKiBUZXJtaW5hbCBjdXJzb3IsIDAgPSBVbmRlcmxpbmUgKi8KK2ludCB0dF9jdXJzb3JfdXNy ID0gMDsgICAgICAgICAgICAgICAgICAvKiBVc2VycyBUZXJtaW5hbCBjdXJzb3IgdHlwZSAqLwor aW50IHR0X2N1cnNvcmVuYV91c3IgPSAxOyAgICAgICAgICAgICAgIC8qIFVzZXJzIFRlcm1pbmFs IGN1cnNvciBlbmFibGVkICovCitpbnQgdHRfY3Vyc29yX2JsaW5rID0gMTsgICAgICAgICAgICAg ICAgLyogVGVybWluYWwgQ3Vyc29yIEJsaW5rICovCitpbnQgdHRfYW5zd2VyID0gMDsgICAgICAg ICAgICAgICAgICAgICAgLyogVGVybWluYWwgYW5zd2VyYmFjayAoZGlzYWJsZWQpICovCitpbnQg dHRfc2Nyc2l6ZVtWTlVNXSA9IHs1MTIsNTEyLDUxMiwxfTsgLyogVGVybWluYWwgc2Nyb2xsYmFj ayBidWZmZXIgc2l6ZSAqLworaW50IHR0X3JvbGxbVk5VTV0gPSB7MSwxLDEsMX07ICAgICAgICAg IC8qIFRlcm1pbmFsIHJvbGwgKG9uKSAqLworaW50IHR0X3JrZXlzW1ZOVU1dID0gezEsMSwxLDF9 OwkJLyogVGVybWluYWwgcm9sbCBrZXlzIChzZW5kKSAqLworaW50IHR0X3BhY2luZyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmFsIG91dHB1dC1wYWNpbmcgKG5vbmUpICovCitp bnQgdHRfY3RzdG1vID0gMTU7ICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgdHJhbnNt aXQtdGltZW91dCAqLworaW50IHR0X2NvZGVwYWdlID0gLTE7ICAgICAgICAgICAgICAgICAgIC8q IFRlcm1pbmFsIGNvZGUtcGFnZSAqLworaW50IHR0X3VwZGF0ZSA9IDEwMDsgICAgICAgICAgICAg ICAgICAgIC8qIFRlcm1pbmFsIHNjcmVlbi11cGRhdGUgaW50ZXJ2YWwgKi8KK2ludCB0dF91cGRt b2RlID0gVFRVX0ZBU1Q7ICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBzY3JlZW4tdXBkYXRlIG1v ZGUgRkFTVCAqLworZXh0ZXJuIGludCB1cGRtb2RlOworI2lmbmRlZiBLVUkKK2ludCB0dF9zdGF0 dXNbVk5VTV0gPSB7MSwxLDAsMH07ICAgICAgICAvKiBUZXJtaW5hbCBzdGF0dXMgbGluZSBkaXNw bGF5ZWQgKi8KK2ludCB0dF9zdGF0dXNfdXNyW1ZOVU1dID0gezEsMSwwLDB9OworI2Vsc2UgIC8q IEtVSSAqLworZXh0ZXJuIENLRkxPQVQgZmxvYXR2YWw7CitDS0ZMT0FUIHR0X2xpbmVzcGFjaW5n W1ZOVU1dID0gezEuMCwxLjAsMS4wLDEuMH07CisjaWZkZWYgSzk1RworaW50IHR0X3N0YXR1c1tW TlVNXSA9IHsxLDEsMCwwfTsgICAgICAgIC8qIFRlcm1pbmFsIHN0YXR1cyBsaW5lIGRpc3BsYXll ZCAqLworaW50IHR0X3N0YXR1c191c3JbVk5VTV0gPSB7MSwxLDAsMH07CisjZWxzZSAvKiBLOTVH ICovCitpbnQgdHRfc3RhdHVzW1ZOVU1dID0gezAsMCwwLDB9OyAgICAgICAgLyogVGVybWluYWwg c3RhdHVzIGxpbmUgZGlzcGxheWVkICovCitpbnQgdHRfc3RhdHVzX3VzcltWTlVNXSA9IHswLDAs MCwwfTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCitpbnQgdHRfc2VuZGRh dGEgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogTGV0IGhvc3QgcmVhZCB0ZXJtaW5hbCBkYXRh ICovCitleHRlcm4gaW50IHd5X2Jsb2NrZW5kOyAgICAgICAgICAgICAgICAgLyogVGVybWluYWwg U2VuZCBEYXRhIEVPQiB0eXBlICovCitpbnQgdHRfaGlkYXR0ciA9IDE7ICAgICAgICAgICAgICAg ICAgICAgLyogQXR0cmlidXRlcyBhcmUgaGlkZGVuICovCisKK2V4dGVybiB1bnNpZ25lZCBjaGFy IGNvbG9ybm9ybWFsLCBjb2xvcnNlbGVjdCwKK2NvbG9ydW5kZXJsaW5lLCBjb2xvcnN0YXR1cywg Y29sb3JoZWxwLCBjb2xvcmJvcmRlciwKK2NvbG9yZ3JhcGhpYywgY29sb3JkZWJ1ZywgY29sb3Jy ZXZlcnNlLCBjb2xvcml0YWxpYzsKKworZXh0ZXJuIGludCB0cnVlYmxpbmssIHRydWV1bmRlcmxp bmUsIHRydWVyZXZlcnNlLCB0cnVlaXRhbGljLCB0cnVlZGltOworCitleHRlcm4gaW50IGJnaSwg ZmdpOworZXh0ZXJuIGludCBzY3JuaW5pdGlhbGl6ZWRbXTsKKworc3RydWN0IGtleXRhYiBhdWRp YmxldGFiW10gPSB7ICAgICAgICAgIC8qIFRlcm1pbmFsIEJlbGwgQXVkaWJsZSBtb2RlICovCisg ICAgeyAiYmVlcCIsICAgICAgICAgIFhZQl9CRUVQLCAwIH0sICAgLyogVmFsdWVzIE9SZCB3aXRo IGJlbGwgbW9kZSAqLworICAgIHsgInN5c3RlbS1zb3VuZHMiLCBYWUJfU1lTLCAgMCB9Cit9Owor aW50IG5hdWRpYmxldGFiID0gc2l6ZW9mKGF1ZGlibGV0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFi KTsKKworc3RydWN0IGtleXRhYiBha210YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEFycm93IGtl eSBtb2RlICovCisgICAgeyAiYXBwbGljYXRpb24iLCBUVEtfQVBQTCwgMCB9LAorICAgIHsgImN1 cnNvciIsICAgICAgVFRLX05PUk0sIDAgfQorfTsKK3N0cnVjdCBrZXl0YWIga3BtdGFiW10gPSB7 ICAgICAgICAgICAgICAvKiBLZXlwYWQgbW9kZSAqLworICAgIHsgImFwcGxpY2F0aW9uIiwgVFRL X0FQUEwsIDAgfSwKKyAgICB7ICJudW1lcmljIiwgICAgIFRUS19OT1JNLCAwIH0KK307CisKK3N0 cnVjdCBrZXl0YWIgdHRjb2xtb2RldGFiW10gPSB7CisgICAgeyAiY3VycmVudC1jb2xvciIsIDAs IDAgfSwKKyAgICB7ICJkZWZhdWx0LWNvbG9yIiwgMSwgMCB9Cit9OworaW50IG5jb2xtb2RlID0g c2l6ZW9mKHR0Y29sbW9kZXRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCisjZGVmaW5lIFRU Q09MTk9SICAwCisjZGVmaW5lIFRUQ09MUkVWICAxCisjZGVmaW5lIFRUQ09MVU5EICAyCisjZGVm aW5lIFRUQ09MU1RBICAzCisjZGVmaW5lIFRUQ09MSExQICA0CisjZGVmaW5lIFRUQ09MQk9SICA1 CisjZGVmaW5lIFRUQ09MU0VMICA2CisjZGVmaW5lIFRUQ09MREVCICA3CisjZGVmaW5lIFRUQ09M R1JQICA4CisjZGVmaW5lIFRUQ09MSVRBICA5CisjZGVmaW5lIFRUQ09MUkVTICAxMAorI2RlZmlu ZSBUVENPTEVSQSAgMTEKKworc3RydWN0IGtleXRhYiB0dHljb2x0YWJbXSA9IHsgICAgICAgICAg ICAgICAgICAgLyogVGVybWluYWwgU2NyZWVuIGNvbG9yaW5nICovCisgICAgeyAiYm9yZGVyIiwg ICAgICAgICAgICAgVFRDT0xCT1IsIDAgfSwgICAgICAvKiBTY3JlZW4gYm9yZGVyIGNvbG9yICov CisgICAgeyAiZGVidWctdGVybWluYWwiLCAgICAgVFRDT0xERUIsIDAgfSwgICAgICAvKiBEZWJ1 ZyBjb2xvciAqLworICAgIHsgImVyYXNlIiwgICAgICAgICAgICAgIFRUQ09MRVJBLCAwIH0sICAg ICAgLyogRXJhc2UgbW9kZSAqLworICAgIHsgImdyYXBoaWMiLCAgICAgICAgICAgIFRUQ09MR1JQ LCAwIH0sICAgICAgLyogR3JhcGhpYyBDb2xvciAqLworICAgIHsgImhlbHAtdGV4dCIsICAgICAg ICAgIFRUQ09MSExQLCAwIH0sICAgICAgLyogSGVscCBzY3JlZW5zICovCisgICAgeyAiaXRhbGlj IiwgICAgICAgICAgICAgVFRDT0xJVEEsIDAgfSwgICAgICAvKiBJdGFsaWMgQ29sb3IgKi8KKyAg ICB7ICJub3JtYWwiLCAgICAgICAgICAgICBUVENPTE5PUiwgQ01fSU5WIH0sIC8qIE5vcm1hbCBz Y3JlZW4gdGV4dCAqLworICAgIHsgInJlc2V0LW9uLWVzY1swbSIsICAgIFRUQ09MUkVTLCAwIH0s ICAgICAgLyogUmVzZXQgb24gRVNDIFsgMCBtICovCisgICAgeyAicmV2ZXJzZS12aWRlbyIsICAg ICAgVFRDT0xSRVYsIDAgfSwgICAgICAvKiBSZXZlcnNlIHZpZGVvICovCisgICAgeyAic3RhdHVz LWxpbmUiLCAgICAgICAgVFRDT0xTVEEsIDAgfSwgICAgICAvKiBTdGF0dXMgbGluZSAqLworICAg IHsgInNlbGVjdGlvbiIsICAgICAgICAgIFRUQ09MU0VMLCAwIH0sICAgICAgLyogU2VsZWN0aW9u IGNvbG9yICovCisgICAgeyAidGVybWluYWwtc2NyZWVuIiwgICAgVFRDT0xOT1IsIDAgfSwgICAg ICAvKiBCZXR0ZXIgbmFtZSB0aGFuICJub3JtYWwiICovCisgICAgeyAidW5kZXJsaW5lZC10ZXh0 IiwgICAgVFRDT0xVTkQsIDAgfSAgICAgICAvKiBVbmRlcmxpbmVkIHRleHQgKi8KK307CitpbnQg bmNvbG9ycyA9IChzaXplb2YodHR5Y29sdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisK KyNkZWZpbmUgVFRBVFROT1IgIDAKKyNkZWZpbmUgVFRBVFRCTEkgIDEKKyNkZWZpbmUgVFRBVFRS RVYgIDIKKyNkZWZpbmUgVFRBVFRVTkQgIDMKKyNkZWZpbmUgVFRBVFRQUk8gIDQKKyNkZWZpbmUg VFRBVFRCTEQgIDUKKyNkZWZpbmUgVFRBVFRESU0gIDYKKyNkZWZpbmUgVFRBVFRJTlYgIDcKKyNk ZWZpbmUgVFRBVFRJVEEgIDgKKyNkZWZpbmUgVFRBVFRET05FIDkKKworc3RydWN0IGtleXRhYiB0 dHlhdHRydGFiW10gPSB7CisgICAgeyAiYmxpbmsiLCAgICAgVFRBVFRCTEksIDAgfSwKKyAgICB7 ICJkaW0iLCAgICAgICBUVEFUVERJTSwgMCB9LAorICAgIHsgIml0YWxpYyIsICAgIFRUQVRUSVRB LCAwIH0sCisgICAgeyAicHJvdGVjdGVkIiwgVFRBVFRQUk8sIDAgfSwKKyAgICB7ICJyZXZlcnNl IiwgICBUVEFUVFJFViwgMCB9LAorICAgIHsgInVuZGVybGluZSIsIFRUQVRUVU5ELCAwIH0KK307 CitpbnQgbmF0dHJpYiA9IChzaXplb2YodHR5YXR0cnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOworCitzdHJ1Y3Qga2V5dGFiIHR0eXByb3RhYltdID0geworICAgIHsgImJsaW5rIiwgICAg ICAgVFRBVFRCTEksICAwIH0sCisgICAgeyAiYm9sZCIsICAgICAgICBUVEFUVEJMRCwgIDAgfSwK KyAgICB7ICJkaW0iLCAgICAgICAgIFRUQVRURElNLCAgMCB9LAorICAgIHsgImRvbmUiLCAgICAg ICAgVFRBVFRET05FLCBDTV9JTlYgfSwKKyAgICB7ICJpbnZpc2libGUiLCAgIFRUQVRUSU5WLCAg MCB9LAorICAgIHsgIml0YWxpYyIsICAgICAgVFRBVFRJVEEsICAwIH0sCisgICAgeyAibm9ybWFs IiwgICAgICBUVEFUVE5PUiwgIDAgfSwKKyAgICB7ICJyZXZlcnNlIiwgICAgIFRUQVRUUkVWLCAg MCB9LAorICAgIHsgInVuZGVybGluZWQiLCAgVFRBVFRVTkQsICAwIH0KKworfTsKK2ludCBucHJv dGVjdCA9IChzaXplb2YodHR5cHJvdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0 cnVjdCBrZXl0YWIgdHR5c2VvYnRhYltdID0geworICAgIHsgImNybGZfZXR4IiwgIDEsIDAgfSwK KyAgICB7ICJ1c19jciIsICAgICAwLCAwIH0KK307CisKK3N0cnVjdCBrZXl0YWIgdHR5Y2xydGFi W10gPSB7ICAgICAgICAgICAvKiBDb2xvcnMgKi8KKyAgICB7ICJibGFjayIsICAgICAgICAgMCwg MCAgICAgIH0sCisgICAgeyAiYmx1ZSIsICAgICAgICAgIDEsIDAgICAgICB9LAorICAgIHsgImJy b3duIiwgICAgICAgICA2LCAwICAgICAgfSwKKyAgICB7ICJjeWFuIiwgICAgICAgICAgMywgMCAg ICAgIH0sCisgICAgeyAiZGFya2dyYXkiLCAgICAgIDgsIENNX0lOViB9LAorICAgIHsgImRncmF5 IiwgICAgICAgICA4LCAwICAgICAgfSwKKyAgICB7ICJncmVlbiIsICAgICAgICAgMiwgMCAgICAg IH0sCisgICAgeyAibGJsdWUiLCAgICAgICAgIDksIENNX0lOViB9LAorICAgIHsgImxjeWFuIiwg ICAgICAgIDExLCBDTV9JTlYgfSwKKyAgICB7ICJsZ3JheSIsICAgICAgICAgNywgQ01fSU5WIH0s CisgICAgeyAibGdyZWVuIiwgICAgICAgMTAsIENNX0lOViB9LAorICAgIHsgImxpZ2h0Ymx1ZSIs ICAgICA5LCAwICAgICAgfSwKKyAgICB7ICJsaWdodGN5YW4iLCAgICAxMSwgMCAgICAgIH0sCisg ICAgeyAibGlnaHRncmF5IiwgICAgIDcsIDAgICAgICB9LAorICAgIHsgImxpZ2h0Z3JlZW4iLCAg IDEwLCAwICAgICAgfSwKKyAgICB7ICJsaWdodG1hZ2VudGEiLCAxMywgMCAgICAgIH0sCisgICAg eyAibGlnaHRyZWQiLCAgICAgMTIsIDAgICAgICB9LAorICAgIHsgImxtYWdlbnRhIiwgICAgIDEz LCBDTV9JTlYgfSwKKyAgICB7ICJscmVkIiwgICAgICAgICAxMiwgQ01fSU5WIH0sCisgICAgeyAi bWFnZW50YSIsICAgICAgIDUsIDAgICAgICB9LAorICAgIHsgInJlZCIsICAgICAgICAgICA0LCAw ICAgICAgfSwKKyAgICB7ICJ3aGl0ZSIsICAgICAgICAxNSwgMCAgICAgIH0sCisgICAgeyAieWVs bG93IiwgICAgICAgMTQsIDAgICAgICB9Cit9OworaW50IG5jbHJzID0gKHNpemVvZiAodHR5Y2xy dGFiKSAvIHNpemVvZiAoc3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHR0eWN1cnRh YltdID0geworICAgIHsgImZ1bGwiLCAgICAgICAgVFRDX0JMT0NLLCAwIH0sCisgICAgeyAiaGFs ZiIsICAgICAgICBUVENfSEFMRiwgIDAgfSwKKyAgICB7ICJ1bmRlcmxpbmUiLCAgIFRUQ19VTElO RSwgMCB9Cit9OworaW50IG5jdXJzb3JzID0gMzsKKworc3RydWN0IGtleXRhYiB0dHlwdGFiW10g PSB7CisgICAgeyAiYWFhIiwgICAgICBUVF9BQUEsICAgICBDTV9JTlYgfSwgICAgIC8qIEFubkFy Ym9yICovCisgICAgeyAiYWRtM2EiLCAgICBUVF9BRE0zQSwgICAwIH0sICAgICAgICAgIC8qIExT SSBBRE0tM0EgKi8KKyAgICB7ICJhZG01IiwgICAgIFRUX0FETTUsICAgIDAgfSwgICAgICAgICAg LyogTFNJIEFETS01ICovCisgICAgeyAiYWl4dGVybSIsICBUVF9BSVhURVJNLCAwIH0sICAgICAg ICAgIC8qIElCTSBBSVh0ZXJtICovCisgICAgeyAiYW5uYXJib3IiLCBUVF9BQUEsICAgICAwIH0s ICAgICAgICAgIC8qIEFubkFyYm9yICovCisgICAgeyAiYW5zaS1iYnMiLCBUVF9BTlNJLCAgICAw IH0sICAgICAgICAgIC8qIEFOU0kuU1lTIChCQlMpICovCisgICAgeyAiYXQzODYiLCAgICBUVF9B VDM4NiwgICAwIH0sICAgICAgICAgIC8qIFVuaXh3YXJlIEFOU0kgKi8KKyAgICB7ICJhdmF0YXIv MCsiLFRUX0FOU0ksICAgIDAgfSwgICAgICAgICAgLyogQVZBVEFSLzArICovCisgICAgeyAiYmE4 MCIsICAgICBUVF9CQTgwLCAgICAwIH0sICAgICAgICAgIC8qIE5peGRvcmYgQkE4MCAqLworICAg IHsgImJlIiwgICAgICAgVFRfQkVPUywgICAgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgImJlb3Mt YW5zaSIsVFRfQkVPUywgICAgQ01fSU5WIH0sICAgICAvKiBCZU9TIEFOU0kgKi8KKyAgICB7ICJi ZXRlcm0iLCAgIFRUX0JFT1MsICAgIDAgfSwgICAgICAgICAgLyogQmVPUyBUZXJtaW5hbCAoYXMg b2YgUFIyICkgKi8KKyAgICB7ICJkMjAwIiwgICAgIFRUX0RHMjAwLCAgIENNX0lOVnxDTV9BQlIg fSwgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMDAgKi8KKyAgICB7ICJkMjEwIiwgICAgIFRUX0RH MjEwLCAgIENNX0lOVnxDTV9BQlIgfSwgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMTAgKi8KKyAg ICB7ICJkMjE3IiwgICAgIFRUX0RHMjE3LCAgIENNX0lOVnxDTV9BQlIgfSwgLyogRGF0YSBHZW5l cmFsIERBU0hFUiAyMTcgKi8KKyAgICB7ICJkZzIwMCIsICAgIFRUX0RHMjAwLCAgIDAgfSwgICAg ICAgICAgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMDAgKi8KKyAgICB7ICJkZzIxMCIsICAgIFRU X0RHMjEwLCAgIDAgfSwgICAgICAgICAgLyogRGF0YSBHZW5lcmFsIERBU0hFUiAyMTAgKi8KKyAg ICB7ICJkZzIxNyIsICAgIFRUX0RHMjE3LCAgIDAgfSwgICAgICAgICAgLyogRGF0YSBHZW5lcmFs IERBU0hFUiAyMTcgKi8KKyAgICB7ICJoMTUwMCIsICAgIFRUX0haTDE1MDAsIENNX0lOViB9LCAg ICAgLyogSGF6ZWx0aW5lIDE1MDAgKi8KKyAgICB7ICJoMTkiLCAgICAgIFRUX0gxOSwgICAgIENN X0lOViB9LCAgICAgLyogSGVhdGgtMTkgKi8KKyAgICB7ICJoZWF0aDE5IiwgIFRUX0gxOSwgICAg IDAgfSwgICAgICAgICAgLyogSGVhdGgtMTkgKi8KKyAgICB7ICJoZnQiLCAgICAgIFRUX0hGVCwg ICAgIDAgfSwgICAgICAgICAgLyogSUJNIEhpZ2ggRnVuY3Rpb24gVGVybWluYWwgKi8KKyAgICB7 ICJocDI2MjFhIiwgIFRUX0hQMjYyMSwgIDAgfSwgICAgICAgICAgLyogSFAgMjYyMUEgKi8KKyAg ICB7ICJocHRlcm0iLCAgIFRUX0hQVEVSTSwgIDAgfSwgICAgICAgICAgLyogSFAgVEVSTSAqLwor ICAgIHsgImh6MTUwMCIsICAgVFRfSFpMMTUwMCwgMCB9LCAgICAgICAgICAvKiBIYXplbHRpbmUg MTUwMCAqLworICAgIHsgImlibTMxNTEiLCAgVFRfSUJNMzEsICAgMCB9LCAgICAgICAgICAvKiBJ Qk0gMzEwMS14eCwzMTYxICovCisgICAgeyAibGludXgiLCAgICBUVF9MSU5VWCwgICAwIH0sICAg ICAgICAgIC8qIExpbnV4ICovCisgICAgeyAicWFuc2kiLCAgICBUVF9RQU5TSSwgICAwIH0sICAg ICAgICAgIC8qIFFOWCBBTlNJICovCisgICAgeyAicW54IiwgICAgICBUVF9RTlgsICAgICAwIH0s ICAgICAgICAgIC8qIFFOWCBDb25zb2xlICovCisgICAgeyAic2NvYW5zaSIsICBUVF9TQ09BTlNJ LCAwIH0sICAgICAgICAgIC8qIFNDTyBBTlNJICovCisgICAgeyAic25pLTk3ODAxIixUVF85Nzgw MSwgICAwIH0sICAgICAgICAgIC8qIFNOSSA5NzgwMSAqLworICAgIHsgInN1biIsICAgICAgVFRf U1VOLCAgICAgMCB9LCAgICAgICAgICAvKiBTVU4gQ29uc29sZSAqLworLyoKKyAgVGhlIGlkZWEg b2YgTk9ORSBpcyB0byBsZXQgdGhlIGNvbnNvbGUgZHJpdmVyIGhhbmRsZSB0aGUgZXNjYXBlIHNl cXVlbmNlcywKKyAgd2hpY2gsIGluIHRoZW9yeSBhdCBsZWFzdCwgd291bGQgZ2l2ZSBub3Qgb25s eSBBTlNJIGVtdWxhdGlvbiwgYnV0IGFsc28gYW55CisgIG90aGVyIGtpbmQgb2YgZW11bGF0aW9u IHRoYXQgbWlnaHQgYmUgcHJvdmlkZWQgYnkgYWx0ZXJuYXRpdmUgY29uc29sZQorICBkcml2ZXJz LCBpZiBhbnkgZXhpc3RlZC4KKworICBGb3IgdGhpcyB0byB3b3JrLCBja29jb24uYyB3b3VsZCBu ZWVkIHRvIGJlIG1vZGlmaWVkIHRvIG1ha2UgaGlnaGVyLWxldmVsCisgIGNhbGxzLCBsaWtlIFZp b1dydFRUWSgpLCBEb3NXcml0ZSgpLCBvciAoc2ltcGx5KSB3cml0ZSgpLCByYXRoZXIgdGhhbgor ICBWaW9XcnQqQ2VsbCgpIGFuZCBzaW1pbGFyLCBhbmQgaXQgd291bGQgYWxzbyBoYXZlIHRvIGdp dmUgdXAgaXRzIHJvbGxiYWNrCisgIGZlYXR1cmUsIGFuZCBpdHMgc3RhdHVzIGxpbmUgYW5kIGhl bHAgc2NyZWVucyB3b3VsZCBhbHNvIGhhdmUgdG8gYmUKKyAgZm9yZ290dGVuIG9yIGVsc2UgZG9u ZSBpbiBhbiBBTlNJIHdheS4KKworICBBcyBtYXR0ZXJzIHN0YW5kLCB3ZSBhbHJlYWR5IGhhdmUg cGVyZmVjdGx5IGdvb2QgQU5TSSBlbXVsYXRpb24gYnVpbHQgaW4sCisgIGFuZCB0aGVyZSBhcmUg bm8gYWx0ZXJuYXRpdmUgY29uc29sZSBkcml2ZXJzIGF2YWlsYWJsZSwgc28gdGhlcmUgaXMgbm8g cG9pbnQKKyAgaW4gaGF2aW5nIGEgdGVybWluYWwgdHlwZSBvZiBOT05FLCBzbyBpdCBpcyBjb21t ZW50ZWQgb3V0LiAgSG93ZXZlciwgc2hvdWxkCisgIHlvdSB1bmNvbW1lbnQgaXQsIGl0IHdpbGwg d29yayBsaWtlIGEgImdsYXNzIHR0eSIgLS0gbm8gZXNjYXBlIHNlcXVlbmNlCisgIGludGVycHJl dGF0aW9uIGF0IGFsbDsgc29tZXdoYXQgc2ltaWxhciB0byBkZWJ1ZyBtb2RlLCBleGNlcHQgd2l0 aG91dCB0aGUKKyAgZGVidWdnaW5nIChubyBoaWdobGlnaHRpbmcgb2YgY29udHJvbCBjaGFycyBv ciBlc2NhcGUgc2VxdWVuY2VzKTsgaGVscAorICBzY3JlZW5zLCBzdGF0dXMgbGluZSwgYW5kIHJv bGxiYWNrIHdpbGwgc3RpbGwgd29yay4KKyovCisjaWZkZWYgT1MyUE0KKyNpZmRlZiBDT01NRU5U CisgICAgeyAidGVrNDAxNCIsIFRUX1RFSzQwLCAgMCB9LAorI2VuZGlmIC8qIENPTU1FTlQgKi8K KyNlbmRpZiAvKiBPUzJQTSAqLworICAgIHsgInR0eSIsICAgICBUVF9OT05FLCAgIDAgfSwKKyAg ICB7ICJ0dmk5MTArIiwgVFRfVFZJOTEwLCAwIH0sCisgICAgeyAidHZpOTI1IiwgIFRUX1RWSTky NSwgMCB9LAorICAgIHsgInR2aTk1MCIsICBUVF9UVkk5NTAsIDAgfSwKKyAgICB7ICJ2YzQwNCIs ICAgVFRfVkM0NDA0LCAwIH0sCisgICAgeyAidmM0NDA0IiwgIFRUX1ZDNDQwNCwgQ01fSU5WIH0s CisgICAgeyAidmlwNzgwOSIsIFRUX1ZJUDc4MDksMCB9LAorICAgIHsgInZ0MTAwIiwgICBUVF9W VDEwMCwgIDAgfSwKKyAgICB7ICJ2dDEwMiIsICAgVFRfVlQxMDIsICAwIH0sCisgICAgeyAidnQy MjAiLCAgIFRUX1ZUMjIwLCAgMCB9LAorICAgIHsgInZ0MjIwcGMiLCBUVF9WVDIyMFBDLDAgfSwK KyAgICB7ICJ2dDMyMCIsICAgVFRfVlQzMjAsICAwIH0sCisgICAgeyAidnQzMjBwYyIsIFRUX1ZU MzIwUEMsMCB9LAorICAgIHsgInZ0NTIiLCAgICBUVF9WVDUyLCAgIDAgfSwKKyNpZmRlZiBOVAor ICAgIHsgInZ0bnQiLCAgICBUVF9WVE5ULCAgIDAgfSwKKyNlbHNlIC8qIE5UICovCisgICAgeyAi dnRudCIsICAgIFRUX1ZUTlQsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOVCAqLworICAgIHsgInd5 MTYwIiwgICBUVF9XWTE2MCwgIDAgfSwKKyAgICB7ICJ3eTMwIiwgICAgVFRfV1kzMCwgICAwIH0s CisgICAgeyAid3kzNzAiLCAgIFRUX1dZMzcwLCAgMCB9LAorICAgIHsgInd5NTAiLCAgICBUVF9X WTUwLCAgIDAgfSwKKyAgICB7ICJ3eTYwIiwgICAgVFRfV1k2MCwgICAwIH0sCisgICAgeyAid3lz ZTMwIiwgIFRUX1dZMzAsICAgQ01fSU5WIH0sCisgICAgeyAid3lzZTM3MCIsIFRUX1dZMzcwLCAg Q01fSU5WIH0sCisgICAgeyAid3lzZTUwIiwgIFRUX1dZNTAsICAgQ01fSU5WIH0sCisgICAgeyAi d3lzZTYwIiwgIFRUX1dZNjAsICAgQ01fSU5WIH0KK307CitpbnQgbnR0eXAgPSAoc2l6ZW9mKHR0 eXB0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiB0dGtleXRh YltdID0geworICAgIHsgImFhYSIsICAgICAgIFRUX0FBQSwgICAgICAgIENNX0lOViB9LCAgICAg ICAgLyogQW5uQXJib3IgKi8KKyAgICB7ICJhZG0zYSIsICAgICBUVF9BRE0zQSwgICAgICAwIH0s ICAgICAgICAgICAgIC8qIExTSSBBRE0tM0EgKi8KKyAgICB7ICJhZG01IiwgICAgICBUVF9BRE01 LCAgICAgICAwIH0sICAgICAgICAgICAgIC8qIExTSSBBRE0tNSAqLworICAgIHsgImFpeHRlcm0i LCAgIFRUX0FJWFRFUk0sICAgIDAgfSwgICAgICAgICAgICAgLyogSUJNIEFJWHRlcm0gKi8KKyAg ICB7ICJhbm5hcmJvciIsICBUVF9BQUEsICAgICAgICAwIH0sICAgICAgICAgICAgIC8qIEFubkFy Ym9yICovCisgICAgeyAiYW5zaS1iYnMiLCAgVFRfQU5TSSwgICAgICAgMCB9LCAgICAgICAgICAg ICAvKiBBTlNJLlNZUyAoQkJTKSAqLworICAgIHsgImF0Mzg2IiwgICAgIFRUX0FUMzg2LCAgICAg IDAgfSwgICAgICAgICAgICAgLyogVW5peHdhcmUgQU5TSSAqLworICAgIHsgImF2YXRhci8wKyIs IFRUX0FOU0ksICAgICAgIDAgfSwgICAgICAgICAgICAgLyogQVZBVEFSLzArICovCisgICAgeyAi YmE4MCIsICAgICAgVFRfQkE4MCwgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBOaXhkb3JmIEJB ODAgKi8KKyAgICB7ICJiZSIsICAgICAgICBUVF9CRU9TLCAgICAgICBDTV9JTlZ8Q01fQUJSIH0s CisgICAgeyAiYmVvcy1hbnNpIiwgVFRfQkVPUywgICAgICAgQ01fSU5WIH0sICAgICAgICAvKiBC ZU9TIEFOU0kgKi8KKyAgICB7ICJiZXRlcm0iLCAgICBUVF9CRU9TLCAgICAgICAwIH0sICAgICAg ICAgICAgIC8qIEJlT1MgVGVybWluYWwgKERSMikgKi8KKyAgICB7ICJkMjAwIiwgICAgICBUVF9E RzIwMCwgICAgICBDTV9JTlZ8Q01fQUJSIH0sIC8qIERHIERBU0hFUiAyMDAgKi8KKyAgICB7ICJk MjEwIiwgICAgICBUVF9ERzIxMCwgICAgICBDTV9JTlZ8Q01fQUJSIH0sIC8qIERHIERBU0hFUiAy MTAgKi8KKyAgICB7ICJkMjE3IiwgICAgICBUVF9ERzIxNywgICAgICBDTV9JTlZ8Q01fQUJSIH0s IC8qIERHIERBU0hFUiAyMTcgKi8KKyAgICB7ICJkZzIwMCIsICAgICBUVF9ERzIwMCwgICAgICAw IH0sICAgICAgICAgICAgIC8qIERHIERBU0hFUiAyMDAgKi8KKyAgICB7ICJkZzIxMCIsICAgICBU VF9ERzIxMCwgICAgICAwIH0sICAgICAgICAgICAgIC8qIERHIERBU0hFUiAyMTAgKi8KKyAgICB7 ICJkZzIxNyIsICAgICBUVF9ERzIxNywgICAgICAwIH0sICAgICAgICAgICAgIC8qIERHIERBU0hF UiAyMTcgKi8KKyAgICB7ICJlbWFjcyIsICAgICBUVF9LQk1fRU1BQ1MsICAwIH0sICAgICAgICAg ICAgIC8qIEVtYWNzIG1vZGUgKi8KKyAgICB7ICJoMTkiLCAgICAgICBUVF9IMTksICAgICAgICBD TV9JTlYgfSwgICAgICAgIC8qIEhlYXRoLTE5ICovCisgICAgeyAiaGVhdGgxOSIsICAgVFRfSDE5 LCAgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBIZWF0aC0xOSAqLworICAgIHsgImhlYnJldyIs ICAgIFRUX0tCTV9IRUJSRVcsIDAgfSwgICAgICAgICAgICAgLyogSGVicmV3IG1vZGUgKi8KKyAg ICB7ICJoZnQiLCAgICAgICBUVF9IRlQsICAgICAgICAwIH0sICAgICAgICAgICAgIC8qIElCTSBI aWdoIEZ1bmN0aW9uIFRlcm0gKi8KKyAgICB7ICJocDI2MjFhIiwgICBUVF9IUDI2MjEsICAgICAw IH0sICAgICAgICAgICAgIC8qIEhQIDI2MjFBICovCisgICAgeyAiaHB0ZXJtIiwgICAgVFRfSFBU RVJNLCAgICAgMCB9LCAgICAgICAgICAgICAvKiBIUCBURVJNICovCisgICAgeyAiaHoxNTAwIiwg ICAgVFRfSFpMMTUwMCwgICAgMCB9LCAgICAgICAgICAgICAvKiBIYXplbHRpbmUgMTUwMCAqLwor ICAgIHsgImlibTMxNTEiLCAgIFRUX0lCTTMxLCAgICAgIDAgfSwgICAgICAgICAgICAgLyogSUJN IDMxMDEteHgsMzE2MSAqLworICAgIHsgImxpbnV4IiwgICAgIFRUX0xJTlVYLCAgICAgIDAgfSwg ICAgICAgICAgICAgLyogTGludXggKi8KKyAgICB7ICJxYW5zaSIsICAgICBUVF9RQU5TSSwgICAg ICAwIH0sICAgICAgICAgICAgIC8qIFFOWCBBTlNJICovCisgICAgeyAicW54IiwgICAgICAgVFRf UU5YLCAgICAgICAgMCB9LCAgICAgICAgICAgICAvKiBRTlggKi8KKyAgICB7ICJydXNzaWFuIiwg ICBUVF9LQk1fUlVTU0lBTiwwIH0sICAgICAgICAgICAgIC8qIFJ1c3NpYW4gbW9kZSAqLworICAg IHsgInNjb2Fuc2kiLCAgIFRUX1NDT0FOU0ksICAgIDAgfSwgICAgICAgICAgICAgLyogU0NPIEFO U0kgKi8KKyAgICB7ICJzbmktOTc4MDEiLCBUVF85NzgwMSwgICAgICAwIH0sICAgICAgICAgICAg IC8qIFNOSSA5NzgwMSAqLworICAgIHsgInN1biIsICAgICAgIFRUX1NVTiwgICAgICAgIDAgfSwg ICAgICAgICAgICAgLyogU1VOIENvbnNvbGUgKi8KKyNpZmRlZiBPUzJQTQorI2lmZGVmIENPTU1F TlQKKyAgICB7ICJ0ZWs0MDE0IiwgICBUVF9URUs0MCwgICAgICAwIH0sCisjZW5kaWYgLyogQ09N TUVOVCAqLworI2VuZGlmIC8qIE9TMlBNICovCisgICAgeyAidHR5IiwgICAgICAgVFRfTk9ORSwg ICAgICAgMCB9LAorICAgIHsgInR2aTkxMCsiLCAgIFRUX1RWSTkxMCwgICAgIDAgfSwKKyAgICB7 ICJ0dmk5MjUiLCAgICBUVF9UVkk5MjUsICAgICAwIH0sCisgICAgeyAidHZpOTUwIiwgICAgVFRf VFZJOTUwLCAgICAgMCB9LAorICAgIHsgInZjNDA0IiwgICAgIFRUX1ZDNDQwNCwgICAgIDAgfSwK KyAgICB7ICJ2YzQ0MDQiLCAgICBUVF9WQzQ0MDQsICAgICBDTV9JTlYgfSwKKyAgICB7ICJ2aXA3 ODA5IiwgICBUVF9WSVA3ODA5LCAgICAwIH0sCisgICAgeyAidnQxMDAiLCAgICAgVFRfVlQxMDAs ICAgICAgMCB9LAorICAgIHsgInZ0MTAyIiwgICAgIFRUX1ZUMTAyLCAgICAgIDAgfSwKKyAgICB7 ICJ2dDIyMCIsICAgICBUVF9WVDIyMCwgICAgICAwIH0sCisgICAgeyAidnQyMjBwYyIsICAgVFRf VlQyMjBQQywgICAgMCB9LAorICAgIHsgInZ0MzIwIiwgICAgIFRUX1ZUMzIwLCAgICAgIDAgfSwK KyAgICB7ICJ2dDMyMHBjIiwgICBUVF9WVDMyMFBDLCAgICAwIH0sCisgICAgeyAidnQ1MiIsICAg ICAgVFRfVlQ1MiwgICAgICAgMCB9LAorICAgIHsgInZ0bnQiLCAgICAgIFRUX1ZUTlQsICAgICAg IENNX0lOViB9LAorICAgIHsgIndwIiwgICAgICAgIFRUX0tCTV9XUCwgICAgIDAgfSwgICAgICAg ICAgICAgLyogV29yZCBQZXJmZWN0IG1vZGUgKi8KKyAgICB7ICJ3eTE2MCIsICAgICBUVF9XWTE2 MCwgICAgICAwIH0sCisgICAgeyAid3kzMCIsICAgICAgVFRfV1kzMCwgICAgICAgMCB9LAorICAg IHsgInd5MzcwIiwgICAgIFRUX1dZMzcwLCAgICAgIDAgfSwKKyAgICB7ICJ3eTUwIiwgICAgICBU VF9XWTUwLCAgICAgICAwIH0sCisgICAgeyAid3k2MCIsICAgICAgVFRfV1k2MCwgICAgICAgMCB9 LAorICAgIHsgInd5c2UzMCIsICAgIFRUX1dZMzAsICAgICAgIENNX0lOViB9LAorICAgIHsgInd5 c2UzNzAiLCAgIFRUX1dZMzcwLCAgICAgIENNX0lOViB9LAorICAgIHsgInd5c2U1MCIsICAgIFRU X1dZNTAsICAgICAgIENNX0lOViB9LAorICAgIHsgInd5c2U2MCIsICAgIFRUX1dZNjAsICAgICAg IENNX0lOViB9Cit9OworaW50IG50dGtleSA9IChzaXplb2YodHRrZXl0YWIpIC8gc2l6ZW9mKHN0 cnVjdCBrZXl0YWIpKTsKKworI2lmbmRlZiBOT1NFVEtFWQorc3RydWN0IGtleXRhYiBrYm1vZHRh YltdID0geworICAgIHsgImVtYWNzIiwgICBLQk1fRU0sIDAgICAgICB9LAorICAgIHsgImVuZ2xp c2giLCBLQk1fRU4sIENNX0lOViB9LAorICAgIHsgImhlYnJldyIsICBLQk1fSEUsIDAgICAgICB9 LAorICAgIHsgIm5vcm1hbCIsICBLQk1fRU4sIDAgICAgICB9LAorICAgIHsgIm5vbmUiLCAgICBL Qk1fRU4sIENNX0lOViB9LAorICAgIHsgInJ1c3NpYW4iLCBLQk1fUlUsIDAgICAgICB9LAorICAg IHsgIndwIiwgICAgICBLQk1fV1AsIDAgICAgICB9Cit9OworaW50IG5rYm1vZHRhYiA9IChzaXpl b2Yoa2Jtb2R0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBOT1NFVEtF WSAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworaW50IHR0X2lucGFjaW5nID0gMDsgICAgICAg ICAgICAgICAgICAgIC8qIGlucHV0LXBhY2luZyAobm9uZSkgKi8KKworc3RydWN0IGtleXRhYiBw cnR5dGFiW10gPSB7IC8qIE9TLzIgUHJpb3JpdHkgTGV2ZWxzICovCisgICAgeyAiZm9yZWdyb3Vu ZC1zZXJ2ZXIiLCBYWVBfU1JWLCAwICAgICAgIH0sCisgICAgeyAiaWRsZSIsICAgICAgICAgICAg ICBYWVBfSURMRSwgQ01fSU5WIH0sCisgICAgeyAicmVndWxhciIsICAgICAgICAgICBYWVBfUkVH LCAwICAgICAgIH0sCisgICAgeyAidGltZS1jcml0aWNhbCIsICAgICBYWVBfUlRQLCAwICAgICAg IH0KK307CitpbnQgbnBydHkgPSAoc2l6ZW9mKHBydHl0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5UCitzdHJ1Y3Qga2V5dGFiIHdpbjk1 dGFiW10gPSB7IC8qIFdpbjk1IHdvcmstYXJvdW5kcyAqLworICAgIHsgIjguMy1maWxlbmFtZXMi LCAgICAgICAgIFhZVzhfMywgICAgMCB9LAorICAgIHsgImFsdC1nciIsICAgICAgICAgICAgICAg IFhZV0FHUiwgICAgMCB9LAorICAgIHsgImhvcml6b250YWwtc2Nhbi1saW5lLXN1YnN0aXR1dGlv bnMiLCBYWVdIU0wsIDAgfSwKKyAgICB7ICJrZXlib2FyZC10cmFuc2xhdGlvbiIsICBYWVdLRVks ICAgIDAgfSwKKyAgICB7ICJsdWNpZGEtc3Vic3RpdHV0aW9ucyIsICBYWVdMVUMsICAgIDAgfSwK KyAgICB7ICJvdmVybGFwcGVkLWlvIiwgICAgICAgICBYWVdPSU8sICAgIDAgfSwKKyAgICB7ICJw b3B1cHMiLCAgICAgICAgICAgICAgICBYWVdQT1BVUCwgIDAgfSwKKyAgICB7ICJzZWxlY3QtYnVn IiwgICAgICAgICAgICBYWVdTRUxFQ1QsIDAgfQorfTsKK2ludCBud2luOTUgPSAoc2l6ZW9mKHdp bjk1dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogTlQgKi8KKworI2lm ZGVmIE9TMk1PVVNFCitleHRlcm4gaW50IHdpZGVyZXN1bHQ7CitpbnQgdHRfbW91c2UgPSAxOyAg ICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYWwgbW91c2Ugb24vb2ZmICovCisKK3N0cnVj dCBrZXl0YWIgbW91c2V0YWJbXSA9IHsgICAgICAgICAgICAvKiBNb3VzZSBpdGVtcyAqLworICAg IHsgImFjdGl2YXRlIiwgWFlNX09OLCAgICAgMCB9LAorICAgIHsgImJ1dHRvbiIsICAgWFlNX0JV VFRPTiwgMCB9LAorICAgIHsgImNsZWFyIiwgICAgWFlNX0NMRUFSLCAgMCB9LAorICAgIHsgImRl YnVnIiwgICAgWFlNX0RFQlVHLCAgMCB9Cit9OworaW50IG5tdGFiID0gKHNpemVvZihtb3VzZXRh Yikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiBtb3VzZWJ1dHRvbnRh YltdID0geyAgICAgIC8qIGV2ZW50IGJ1dHRvbiAqLworICAgIHsgIjEiLCAgICAgICAgICAgICBY WU1fQjEsIDAgfSwKKyAgICB7ICIyIiwgICAgICAgICAgICAgWFlNX0IyLCAwIH0sCisgICAgeyAi MyIsICAgICAgICAgICAgIFhZTV9CMywgMCB9LAorICAgIHsgIm9uZSIsICAgICAgICAgICBYWU1f QjEsIENNX0lOViB9LAorICAgIHsgInRocmVlIiwgICAgICAgICBYWU1fQjMsIENNX0lOViB9LAor ICAgIHsgInR3byIsICAgICAgICAgICBYWU1fQjIsIENNX0lOViB9Cit9OworaW50IG5tYnRhYiA9 IChzaXplb2YobW91c2VidXR0b250YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3Ry dWN0IGtleXRhYiBtb3VzZW1vZHRhYltdID0geyAgICAgICAgIC8qIGV2ZW50IGJ1dHRvbiBrZXkg bW9kaWZpZXIgKi8KKyAgICB7ICJhbHQiLCAgICAgICAgICAgICAgWFlNX0FMVCwgICAwIH0sCisg ICAgeyAiYWx0LXNoaWZ0IiwgICAgICAgIFhZTV9TSElGVHxYWU1fQUxULCAwIH0sCisgICAgeyAi Y3RybCIsICAgICAgICAgICAgIFhZTV9DVFJMLCAgMCB9LAorICAgIHsgImN0cmwtYWx0IiwgICAg ICAgICBYWU1fQ1RSTHxYWU1fQUxULCAwIH0sCisgICAgeyAiY3RybC1hbHQtc2hpZnQiLCAgIFhZ TV9DVFJMfFhZTV9TSElGVHxYWU1fQUxULCAwIH0sCisgICAgeyAiY3RybC1zaGlmdCIsICAgICAg IFhZTV9DVFJMfFhZTV9TSElGVCwgMCB9LAorICAgIHsgIm5vbmUiLCAgICAgICAgICAgICAwLCAw IH0sCisgICAgeyAic2hpZnQiLCAgICAgICAgICAgIFhZTV9TSElGVCwgMCB9Cit9OworaW50IG5t bXRhYiA9IChzaXplb2YobW91c2Vtb2R0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKwor c3RydWN0IGtleXRhYiBtY2xpY2t0YWJbXSA9IHsgICAgICAgICAgIC8qIGV2ZW50IGJ1dHRvbiBj bGljayBtb2RpZmllciAqLworICAgIHsgImNsaWNrIiwgICAgICAgIFhZTV9DMSwgICAwIH0sCisg ICAgeyAiZHJhZyIsICAgICAgICAgWFlNX0RSQUcsIDAgfSwKKyAgICB7ICJkb3VibGUtY2xpY2si LCBYWU1fQzIsICAgMCB9Cit9OworaW50IG5tY3RhYiA9IChzaXplb2YobWNsaWNrdGFiKSAvIHNp emVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZm5kZWYgTk9LVkVSQlMKK2V4dGVybiBpbnQgbmt2 ZXJiczsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGt2ZXJic1tdOworI2VuZGlmIC8qIE5PS1ZFUkJT ICovCisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKworLyogI2lmZGVmIFZNUyAqLworc3RydWN0IGtl eXRhYiBmYnRhYltdID0geyAgICAgICAgICAgICAgIC8qIEJpbmFyeSByZWNvcmQgdHlwZXMgZm9y IFZNUyAqLworICAgIHsgImZpeGVkIiwgICAgIFhZRlRfQiwgMCB9LCAgICAgICAgIC8qIEZpeGVk IGlzIG5vcm1hbCBmb3IgYmluYXJ5ICovCisgICAgeyAidW5kZWZpbmVkIiwgWFlGVF9VLCAwIH0g ICAgICAgICAgLyogVW5kZWZpbmVkIGlmIHRoZXkgYXNrIGZvciBpdCAqLworfTsKK2ludCBuZmJ0 eXAgPSAoc2l6ZW9mKGZidGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisvKiAjZW5kaWYg Ki8KKworI2lmZGVmIFZNUworc3RydWN0IGtleXRhYiBsYmx0YWJbXSA9IHsgICAgICAgICAgICAg IC8qIExhYmVsZWQgRmlsZSBpbmZvICovCisgICAgeyAiYWNsIiwgICAgICAgICBMQkxfQUNMLCAw IH0sCisgICAgeyAiYmFja3VwLWRhdGUiLCBMQkxfQkNLLCAwIH0sCisgICAgeyAibmFtZSIsICAg ICAgICBMQkxfTkFNLCAwIH0sCisgICAgeyAib3duZXIiLCAgICAgICBMQkxfT1dOLCAwIH0sCisg ICAgeyAicGF0aCIsICAgICAgICBMQkxfUFRILCAwIH0KK307CitpbnQgbmxibHAgPSAoc2l6ZW9m KGxibHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2Vsc2UKKyNpZmRlZiBPUzIKK3N0 cnVjdCBrZXl0YWIgbGJsdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBMYWJlbGVkIEZpbGUgaW5m byAqLworICAgIHsgImFyY2hpdmUiLCAgIExCTF9BUkMsIDAgfSwKKyAgICB7ICJleHRlbmRlZCIs ICBMQkxfRVhULCAwIH0sCisgICAgeyAiaGlkZGVuIiwgICAgTEJMX0hJRCwgMCB9LAorICAgIHsg InJlYWQtb25seSIsIExCTF9STywgIDAgfSwKKyAgICB7ICJzeXN0ZW0iLCAgICBMQkxfU1lTLCAw IH0KK307CitpbnQgbmxibHAgPSAoc2l6ZW9mKGxibHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgQ0tfQ1VS U0VTCisjaWZkZWYgQ0tfUENUX0JBUgorc3RhdGljIHN0cnVjdCBrZXl0YWIgZmRmdGFiW10gPSB7 ICAgICAgIC8qIFNFVCBGSUxFIERJU1BMQVkgRlVMTCBvcHRpb25zICovCisgICAgeyAidGhlcm1v bWV0ZXIiLCAgICAxLCAwLCB9LAorICAgIHsgIm5vLXRoZXJtb21ldGVyIiwgMCwgMCAgfQorfTsK K2V4dGVybiBpbnQgdGhlcm1vbWV0ZXI7CisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworI2VuZGlm IC8qIENLX0NVUlNFUyAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBmZHRhYltdID0geyAgICAg ICAgLyogU0VUIEZJTEUgRElTUExBWSBvcHRpb25zICovCisjaWZkZWYgTUFDICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTWFjaW50b3NoICovCisgICAgeyAiZnVsbHNjcmVlbiIsIFhZ RkRfUiwgICAgICAwIH0sICAgLyogRnVsbC1zY3JlZW4gYnV0IG5vdCBjdXJzZXMgKi8KKyAgICB7 ICJub25lIiwgICAgICAgWFlGRF9OLCAgICAgIDAgfSwKKyAgICB7ICJvZmYiLCAgICAgICAgWFlG RF9OLCBDTV9JTlYgfSwKKyAgICB7ICJvbiIsICAgICAgICAgWFlGRF9SLCBDTV9JTlYgfSwKKyAg ICB7ICJxdWlldCIsICAgICAgWFlGRF9OLCBDTV9JTlYgfSwKKyNlbHNlICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgTWFjICovCisgICAgeyAiYnJpZWYiLCBYWUZEX0Is IDAgfSwgICAgICAgICAgICAgLyogQnJpZWYgKi8KKyAgICB7ICJjcnQiLCBYWUZEX1MsIDAgfSwg ICAgICAgICAgICAgICAvKiBDUlQgZGlzcGxheSAqLworI2lmZGVmIENLX0NVUlNFUworI2lmZGVm IENPTU1FTlQKKyAgICB7ICJjdXJzZXMiLCAgICAgWFlGRF9DLCAgQ01fSU5WIH0sICAvKiBGdWxs LXNjcmVlbiwgY3Vyc2VzICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHsgImZ1bGxzY3Jl ZW4iLCBYWUZEX0MsICAwIH0sICAgICAgIC8qIEZ1bGwtc2NyZWVuLCB3aGF0ZXZlciB0aGUgbWV0 aG9kICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisjaWZkZWYgS1VJCisgICAgeyAiZ3VpIiwg ICAgWFlGRF9HLCAwIH0sICAgICAgICAgICAgLyogR1VJICovCisjZW5kaWYgLyogS1VJICovICAg ICAgICAKKyAgICB7ICJub25lIiwgICBYWUZEX04sIDAgICAgICB9LCAgICAgICAvKiBObyBkaXNw bGF5ICovCisgICAgeyAib2ZmIiwgICAgWFlGRF9OLCBDTV9JTlYgfSwgICAgICAgLyogRGl0dG8g Ki8KKyAgICB7ICJvbiIsICAgICBYWUZEX1IsIENNX0lOViB9LCAgICAgICAvKiBPbiA9IFNlcmlh bCAqLworICAgIHsgInF1aWV0IiwgIFhZRkRfTiwgQ01fSU5WIH0sICAgICAgIC8qIE5vIGRpc3Bs YXkgKi8KKyAgICB7ICJzZXJpYWwiLCBYWUZEX1IsIDAgICAgICB9LCAgICAgICAvKiBTZXJpYWwg Ki8KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbmZkdGFiID0g KHNpemVvZihmZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RydWN0IGtl eXRhYiByc3J0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIEZvciBSRU1PVEUgU0VUIFJFQ0VJVkUg Ki8KKyAgICB7ICJwYWNrZXQtbGVuZ3RoIiwgWFlMRU4sICAwIH0sCisgICAgeyAidGltZW91dCIs ICAgICAgIFhZVElNTywgMCB9Cit9OworaW50IG5yc3J0YWIgPSAoc2l6ZW9mKHJzcnRhYikgLyBz aXplb2Yoc3RydWN0IGtleXRhYikpOworCisvKiBTZW5kL1JlY2VpdmUgUGFyYW1ldGVycyAqLwor CitzdHJ1Y3Qga2V5dGFiIHNydGFiW10gPSB7CisgICAgeyAiYmFja3VwIiwgWFlCVVAsIDAgfSwK KyNpZm5kZWYgTk9DU0VUUworICAgIHsgImNoYXJhY3Rlci1zZXQtc2VsZWN0aW9uIiwgWFlDU0VU LCAwIH0sCisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIHsgImNvbnRyb2wtcHJlZml4IiwgWFlR Q1RMLCAwIH0sCisjaWZkZWYgQ0tYWENIQVIKKyAgICB7ICJkb3VibGUtY2hhcmFjdGVyIiwgWFlE QkwsIDAgfSwKKyNlbmRpZiAvKiBDS1hYQ0hBUiAqLworICAgIHsgImVuZC1vZi1wYWNrZXQiLCBY WUVPTCwgMCB9LAorI2lmZGVmIFBJUEVTRU5ECisgICAgeyAiZmlsdGVyIiwgWFlGTFRSLCAwIH0s CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNpZmRlZiBDS1hYQ0hBUgorICAgIHsgImlnbm9yZS1j aGFyYWN0ZXIiLCBYWUlHTiwgMCB9LAorI2VuZGlmIC8qIENLWFhDSEFSICovCisgICAgeyAiaS1w YWNrZXRzIiwgOTkzLCAwIH0sCisgICAgeyAibW92ZS10byIsIFhZTU9WRSwgMCB9LAorICAgIHsg Im5lZ290aWF0aW9uLXN0cmluZy1tYXgtbGVuZ3RoIiwgWFlJTklMLCBDTV9JTlYgfSwKKyAgICB7 ICJwYWNrZXQtbGVuZ3RoIiwgWFlMRU4sIDAgfSwKKyAgICB7ICJwYWQtY2hhcmFjdGVyIiwgWFlQ QURDLCAwIH0sCisgICAgeyAicGFkZGluZyIsIFhZTlBBRCwgMCB9LAorICAgIHsgInBhdGhuYW1l cyIsIFhZRlBBVEgsIDAgfSwKKyAgICB7ICJwYXVzZSIsIFhZUEFVUywgMCB9LAorI2lmZGVmIENL X1BFUk1TCisgICAgeyAicGVybWlzc2lvbnMiLCA5OTQsIDB9LAkJLyogMjA2ICovCisjZW5kaWYg LyogQ0tfUEVSTVMgKi8KKyAgICB7ICJxdW90ZSIsIFhZUUNUTCwgQ01fSU5WIH0sICAgICAgICAv KiA9IENPTlRST0wtUFJFRklYICovCisgICAgeyAicmVuYW1lLXRvIiwgWFlSRU5BTUUsIDAgfSwK KyAgICB7ICJzdGFydC1vZi1wYWNrZXQiLCBYWU1BUkssIDAgfSwKKyAgICB7ICJ0aW1lb3V0Iiwg WFlUSU1PLCAwIH0sCisjaWZkZWYgVk1TCisgICAgeyAidmVyc2lvbi1udW1iZXJzIiwgODg3LCAw IH0sICAgICAgLyogVk1TIHZlcnNpb24gbnVtYmVycyAqLworI2VuZGlmIC8qIFZNUyAqLworICAg IHsgIiIsIDAsIDAgfQorfTsKK2ludCBuc3J0YWIgPSAoc2l6ZW9mKHNydGFiKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOworCisjaWZkZWYgVU5JQ09ERQorI2RlZmluZSBVQ1NfQk9NIDEK KyNkZWZpbmUgVUNTX0JZVCAyCitzdGF0aWMgc3RydWN0IGtleXRhYiB1Y3N0YWJbXSA9IHsKKyAg ICB7ICJib20iLCAgICAgICAgVUNTX0JPTSwgMCB9LAorICAgIHsgImJ5dGUtb3JkZXIiLCBVQ1Nf QllULCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG51Y3N0YWIgPSAoc2l6ZW9mKHVj c3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBrZXl0 YWIgYm90YWJbXSA9IHsKKyAgICB7ICJiaWctZW5kaWFuIiwgICAgMCwgMCB9LAorICAgIHsgImxp dHRsZS1lbmRpYW4iLCAxLCAwIH0KK307CitzdGF0aWMgaW50IG5ib3RhYiA9IDI7CisjZW5kaWYg LyogVU5JQ09ERSAqLworCisvKiBSRU1PVEUgU0VUICovCisKK3N0cnVjdCBrZXl0YWIgcm1zdGFi W10gPSB7CisgICAgeyAiYXR0cmlidXRlcyIsICBYWUFUVFIsIDAgICAgICB9LAorICAgIHsgImJs b2NrLWNoZWNrIiwgWFlDSEtULCAwICAgICAgfSwKKyAgICB7ICJmaWxlIiwgICAgICAgIFhZRklM RSwgMCAgICAgIH0sCisgICAgeyAiaW5jb21wbGV0ZSIsICBYWUlGRCwgIENNX0lOViB9LCAgLyog PSBSRU1PVEUgU0VUIEZJTEUgSU5DT01QTEVURSAqLworICAgIHsgIm1hdGNoIiwgICAgICAgWFlN QVRDSCwwICAgICAgfSwKKyAgICB7ICJyZWNlaXZlIiwgICAgIFhZUkVDViwgMCAgICAgIH0sCisg ICAgeyAicmV0cnkiLCAgICAgICBYWVJFVFIsIDAgICAgICB9LAorICAgIHsgInNlcnZlciIsICAg ICAgWFlTRVJWLCAwICAgICAgfSwKKyAgICB7ICJ0cmFuc2ZlciIsICAgIFhZWEZFUiwgMCAgICAg IH0sCisgICAgeyAid2luZG93IiwgICAgICBYWVdJTkQsIDAgICAgICB9LAorICAgIHsgInhmZXIi LCAgICAgICAgWFlYRkVSLCBDTV9JTlYgfQorfTsKK2ludCBucm1zID0gKHNpemVvZihybXN0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RydWN0IGtleXRhYiBhdHRydGFiW10gPSB7 CisjaWZkZWYgU1RSQVRVUworICAgIHsgImFjY291bnQiLCAgICAgICBBVF9BQ0NULCAwIH0sCisj ZW5kaWYgLyogU1RSQVRVUyAqLworICAgIHsgImFsbCIsICAgICAgICAgICBBVF9YQUxMLCAwIH0s CisjaWZkZWYgQ09NTUVOVAorICAgIHsgImJsb2Nrc2l6ZSIsICAgICBBVF9CTEtTLCAwIH0sICAg IC8qIChub3QgdXNlZCkgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZuZGVmIE5PQ1NFVFMK KyAgICB7ICJjaGFyYWN0ZXItc2V0IiwgQVRfRU5DTywgMCB9LAorI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KKyNpZmRlZiBTVFJBVFVTCisgICAgeyAiY3JlYXRvciIsICAgICAgIEFUX0NSRUEsIDAgfSwK KyNlbmRpZiAvKiBTVFJBVFVTICovCisgICAgeyAiZGF0ZSIsICAgICAgICAgIEFUX0RBVEUsIDAg fSwKKyAgICB7ICJkaXNwb3NpdGlvbiIsICAgQVRfRElTUCwgMCB9LAorICAgIHsgImVuY29kaW5n IiwgICAgICBBVF9FTkNPLCBDTV9JTlYgfSwKKyAgICB7ICJmb3JtYXQiLCAgICAgICAgQVRfUkVD RiwgQ01fSU5WIH0sCisgICAgeyAibGVuZ3RoIiwgICAgICAgIEFUX0xFTkssIDAgfSwKKyAgICB7 ICJvZmYiLCAgICAgICAgICAgQVRfQUxMTiwgMCB9LAorICAgIHsgIm9uIiwgICAgICAgICAgICBB VF9BTExZLCAwIH0sCisjaWZkZWYgQ09NTUVOVAorICAgIHsgIm9zLXNwZWNpZmljIiwgICBBVF9T WVNQLCAwIH0sICAgIC8qIChub3QgdXNlZCBieSBVTklYIG9yIFZNUykgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisjaWZkZWYgQ0tfUEVSTVMKKyAgICB7ICJwcm90ZWN0aW9uIiwgICAgQVRfTFBS TywgMCB9LAorICAgIHsgInBlcm1pc3Npb25zIiwgICBBVF9MUFJPLCBDTV9JTlYgfSwKKyNlbmRp ZiAvKiBDS19QRVJNUyAqLworICAgIHsgInJlY29yZC1mb3JtYXQiLCBBVF9SRUNGLCAwIH0sCisg ICAgeyAic3lzdGVtLWlkIiwgICAgIEFUX1NZU0ksIDAgfSwKKyAgICB7ICJ0eXBlIiwgICAgICAg ICAgQVRfRlRZUCwgMCB9Cit9OworaW50IG5hdHIgPSAoc2l6ZW9mKGF0dHJ0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKTsgLyogaG93IG1hbnkgYXR0cmlidXRlcyAqLworCisjaWZkZWYgQ0tU SURMRQorc3RydWN0IGtleXRhYiBpZGxhY3RzW10gPSB7CisgICAgeyAiZXhpdCIsICAgICAgIElE TEVfRVhJVCwgMCB9LAorICAgIHsgImhhbmd1cCIsICAgICBJRExFX0hBTkcsIDAgfSwKKyAgICB7 ICJvdXRwdXQiLCAgICAgSURMRV9PVVQsICAwIH0sCisgICAgeyAicmV0dXJuIiwgICAgIElETEVf UkVULCAgMCB9LAorI2lmZGVmIFROQ09ERQorICAgIHsgInRlbG5ldC1ub3AiLCBJRExFX1ROT1As IDAgfSwKKyAgICB7ICJ0ZWxuZXQtYXl0IiwgSURMRV9UQVlULCAwIH0sCisjZW5kaWYgLyogVE5D T0RFICovCisgICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG5pZGxhY3RzID0gKHNpemVvZihpZGxh Y3RzKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworI2VuZGlmIC8qIENLVElETEUgKi8K KworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBpbmRlZiwgaW5lY2hvLCBpbnNpbGVuY2UsIGlu YnVmc2l6ZSwgaW5hdXRvZGwsIGluaW50cjsKKyNpZmRlZiBDS0ZMT0FUCitleHRlcm4gQ0tGTE9B VCBpbnNjYWxlOworI2VuZGlmCS8qIENLRkxPQVQgKi8KK2V4dGVybiBjaGFyICogaW5wYnVmLCAq IGlucGJwOworI2lmZGVmIE9TMgorZXh0ZXJuIGludCBpbnRlcm07CisjZW5kaWYgLyogT1MyICov CitzdHJ1Y3Qga2V5dGFiIGlucHRhYltdID0geyAgICAgICAgICAgICAgLyogU0VUIElOUFVUIHBh cmFtZXRlcnMgKi8KKyNpZmRlZiBDS19BVVRPREwKKyAgICB7ICJhdXRvZG93bmxvYWQiLCAgICBJ Tl9BREwsIDAgfSwKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8KKyAgICB7ICJidWZmZXItbGVuZ3Ro IiwgICBJTl9CVUYsIDAgfSwKKyAgICB7ICJjYW5jZWxsYXRpb24iLCAgICBJTl9DQU4sIDAgfSwK KyAgICB7ICJjYXNlIiwgICAgICAgICAgICBJTl9DQVMsIDAgfSwKKyAgICB7ICJkZWZhdWx0LXRp bWVvdXQiLCBJTl9ERUYsIENNX0lOViB9LCAvKiBUaGVyZSBpcyBubyBkZWZhdWx0IHRpbWVvdXQg Ki8KKyAgICB7ICJlY2hvIiwgICAgICAgICAgICBJTl9FQ0gsIDAgfSwKKyNpZmRlZiBPUzIKKyAg ICB7ICJwYWNpbmciLCAgICAgICAgICBJTl9QQUMsIENNX0lOViB9LAorI2VuZGlmIC8qIE9TMiAq LworICAgIHsgInNjYWxlLWZhY3RvciIsICAgIElOX1NDQSwgMCB9LAorICAgIHsgInNpbGVuY2Ui LCAgICAgICAgIElOX1NJTCwgMCB9LAorI2lmZGVmIE9TMgorICAgIHsgInRlcm1pbmFsIiwgICAg ICAgIElOX1RSTSwgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworICAgIHsgInRpbWVvdXQtYWN0aW9u IiwgIElOX1RJTSwgMCB9Cit9OworaW50IG5pbnAgPSAoc2l6ZW9mKGlucHRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIGludGltdFtdID0geyAgICAgICAgICAg ICAgLyogU0VUIElOUFVUIFRJTUVPVVQgcGFyYW1ldGVycyAqLworICAgIHsgInByb2NlZWQiLCAw LCAwIH0sICAgICAgICAgICAgICAgIC8qIDAgPSBwcm9jZWVkICovCisgICAgeyAicXVpdCIsICAg IDEsIDAgfSAgICAgICAgICAgICAgICAgLyogMSA9IHF1aXQgKi8KK307CisKK3N0cnVjdCBrZXl0 YWIgaW5jYXN0W10gPSB7ICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgQ0FTRSBwYXJhbWV0ZXJz ICovCisgICAgeyAiaWdub3JlIiwgIDAsIDAgfSwgICAgICAgICAgICAgICAgLyogMCA9IGlnbm9y ZSAqLworICAgIHsgIm9ic2VydmUiLCAxLCAwIH0gICAgICAgICAgICAgICAgIC8qIDEgPSBvYnNl cnZlICovCit9OworI2VuZGlmIC8qIE5PU1BMICovCisKK3N0cnVjdCBrZXl0YWIgbmFibHRhYltd ID0geyAgICAgICAgICAgICAvKiBGb3IgYW55IGNvbW1hbmQgdGhhdCBuZWVkcyAqLworICAgIHsg ImRpc2FibGVkIiwgMCwgMCB9LAorICAgIHsgImVuYWJsZWQiLCAgMSwgMCB9LAorICAgIHsgIm9m ZiIsICAgICAgMCwgQ01fSU5WIH0sICAgICAgICAgIC8qIHRoZXNlIGtleXdvcmRzLi4uICovCisg ICAgeyAib24iLCAgICAgICAxLCBDTV9JTlYgfQorfTsKK2ludCBubmFibHRhYiA9IHNpemVvZihu YWJsdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKworI2lmZGVmIE9TMgorc3RydWN0IGtl eXRhYiB0dmN0YWJbXSA9IHsgICAgICAgICAgICAgIC8qIFNFVCBURVJNIFZJREVPLUNIQU5HRSAq LworICAgIHsgImRpc2FibGVkIiwgICAgIFRWQ19ESVMsIDAgfSwKKyAgICB7ICJlbmFibGVkIiwg ICAgICBUVkNfRU5BLCAwIH0sCisjaWZkZWYgTlQKKyAgICB7ICJ3aW45NS1zYWZlIiwgICBUVkNf Vzk1LCAwIH0sCisjZW5kaWYgLyogTlQgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbnR2 Y3RhYiA9IChzaXplb2YodHZjdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCitz dHJ1Y3Qga2V5dGFiIG1za3RhYltdID0geyAvKiBTRVQgTVMtRE9TIEtFUk1JVCBjb21wYXRpYmls aXRpZXMgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgeyAiY29sb3IiLCAgICBNU0tfQ09MT1IsICAw IH0sCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIHsgImZpbGUtcmVuYW1pbmciLCBNU0tfUkVO LCAwIH0sCisgICAgeyAia2V5Y29kZXMiLCBNU0tfS0VZUywgICAwIH0KK307CitpbnQgbm1zayA9 IChzaXplb2YobXNrdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0cnVjdCBrZXl0 YWIgc2NybnVwZFtdID0geyAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgU0NSRUVOLVVQREFU RSAqLworICAgIHsgImZhc3QiLCAgIFRUVV9GQVNULCAgIDAgfSwKKyAgICB7ICJzbW9vdGgiLCBU VFVfU01PT1RILCAwIH0KK307CitpbnQgbnNjcm51cGQgPSAoc2l6ZW9mKHNjcm51cGQpIC8gc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworI2lmZGVmIFBDRk9OVFMKKy8qIFRoaXMgZGVmaW5pdGlv biBvZiB0aGUgdGVybV9mb250W10gdGFibGUgaXMgb25seSBmb3IgICAgICovCisvKiB0aGUgT1Mv MiBGdWxsIFNjcmVlbiBTZXNzaW9uIGFuZCBpcyBub3QgdXNlZCBvbiBXaW5kb3dzICovCitzdHJ1 Y3Qga2V5dGFiIHRlcm1fZm9udFtdID0geyAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIEZPTlQg Ki8KKyNpZmRlZiBDT01NRU5UCisgICAgeyAiY3AxMTEiLCBUVEZfMTExLCAwIH0sCisgICAgeyAi Y3AxMTIiLCBUVEZfMTEyLCAwIH0sCisgICAgeyAiY3AxMTMiLCBUVEZfMTEzLCAwIH0sCisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgIHsgImNwNDM3IiwgVFRGXzQzNywgMCB9LAorICAgIHsgImNw ODUwIiwgVFRGXzg1MCwgMCB9LAorI2lmZGVmIENPTU1FTlQKKyAgICB7ICJjcDg1MSIsIFRURl84 NTEsIDAgfSwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeyAiY3A4NTIiLCBUVEZfODUyLCAw IH0sCisjaWZkZWYgQ09NTUVOVAorICAgIHsgImNwODUzIiwgVFRGXzg1MywgMCB9LAorICAgIHsg ImNwODYwIiwgVFRGXzg2MCwgMCB9LAorICAgIHsgImNwODYxIiwgVFRGXzg2MSwgMCB9LAorI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICJjcDg2MiIsIFRURl84NjIsIDAgfSwKKyNpZmRlZiBD T01NRU5UCisgICAgeyAiY3A4NjMiLCBUVEZfODYzLCAwIH0sCisgICAgeyAiY3A4NjQiLCBUVEZf ODY0LCAwIH0sCisgICAgeyAiY3A4NjUiLCBUVEZfODY1LCAwIH0sCisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgIHsgImNwODY2IiwgVFRGXzg2NiwgMCB9LAorI2lmZGVmIENPTU1FTlQKKyAgICB7 ICJjcDg4MCIsIFRURl84ODAsIDAgfSwKKyAgICB7ICJjcDg4MSIsIFRURl84ODEsIDAgfSwKKyAg ICB7ICJjcDg4MiIsIFRURl84ODIsIDAgfSwKKyAgICB7ICJjcDg4MyIsIFRURl84ODMsIDAgfSwK KyAgICB7ICJjcDg4NCIsIFRURl84ODQsIDAgfSwKKyAgICB7ICJjcDg4NSIsIFRURl84ODUsIDAg fSwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeyAiZGVmYXVsdCIsVFRGX1JPTSwwIH0KK307 CitpbnQgbnRlcm1mb250ID0gKHNpemVvZih0ZXJtX2ZvbnQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpKTsKK2ludCB0dF9mb250ID0gVFRGX1JPTTsgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5h bCBzY3JlZW4gZm9udCAqLworI2Vsc2UgLyogUENGT05UUyAqLworI2lmZGVmIE5UCisjaWZkZWYg S1VJCitzdHJ1Y3Qga2V5dGFiICogdGVybV9mb250ID0gTlVMTDsKK3N0cnVjdCBrZXl0YWIgKiBf dGVybV9mb250ID0gTlVMTDsKK2NoYXIgKiB0dF9mYWNlbmFtZSA9IE5VTEw7CitpbnQgbnRlcm1m b250ID0gMDsKK2ludCB0dF9mb250ID0gMDsKK2ludCB0dF9mb250X3NpemUgPSAwOworI2VuZGlm IC8qIEtVSSAqLworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogUENGT05UUyAqLworCitzdHJ1 Y3Qga2V5dGFiIGFuYmt0YWJbXSA9IHsgICAgICAgICAgICAgLyogRm9yIGFueSBjb21tYW5kIHRo YXQgbmVlZHMgKi8KKyAgICB7ICJtZXNzYWdlIiwgMiwgMCB9LCAgICAgICAgICAgICAgICAvKiB0 aGVzZSBrZXl3b3Jkcy4uLiAqLworICAgIHsgIm9mZiIsICAgICAwLCAwIH0sCisgICAgeyAib24i LCAgICAgIDEsIDAgfSwKKyAgICB7ICJ1bnNhZmUtbWVzc2FnMCIsIDk5LCBDTV9JTlYgfSwKKyAg ICB7ICJ1bnNhZmUtbWVzc2FnZSIsIDMsICBDTV9JTlYgfQorfTsKK2ludCBuYW5zYmsgPSAoc2l6 ZW9mKGFuYmt0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworaW50IHdpbjk1X3BvcHVw ID0gMTsKKyNpZmRlZiBOVAorI2lmZGVmIEtVSQoraW50IHdpbjk1bHVjaWRhID0gMDsKK2ludCB3 aW45NWhzbCA9IDE7CisjZWxzZSAvKiBLVUkgKi8KK2ludCB3aW45NWx1Y2lkYSA9IDE7CitpbnQg d2luOTVoc2wgPSAxOworI2VuZGlmIC8qIEtVSSAqLworI2Vsc2UgLyogTlQgKi8KK2ludCB3aW45 NWx1Y2lkYSA9IDA7CitpbnQgd2luOTVoc2wgPSAxOworI2VuZGlmIC8qIE5UICovCisjaWZkZWYg TlQKK2ludCB3aW45NWFsdGdyICA9IDA7CitleHRlcm4gaW50IHdpbjk1c2VsZWN0YnVnOworZXh0 ZXJuIGludCB3aW45NV84XzM7CisKKyNpZmRlZiBDT01NRU5UCitleHRlcm4gQ0hBUiAoKnhscltN QVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKTsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIHRj c3RhYltdOworZXh0ZXJuIGludCBudGNzOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK2V4dGVybiBp bnQgbWF4b3csIG1heG93X3Vzcjsgb3d3YWl0OyAgICAvKiBPdmVybGFwcGVkIEkvTyB2YXJpYWJs ZXMgKi8KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisKKy8qIFRoZSBmb2xs b3dpbmcgcm91dGluZXMgYnJva2VuIG91dCBvZiBkb3BybSgpIHRvIGdpdmUgY29tcGlsZXJzIGEg YnJlYWsuICovCisKKy8qICBTIEUgVCBPIE4gIC0tICBQYXJzZSBvbi9vZmYgKGRlZmF1bHQgb24p LCBzZXQgcGFyYW1ldGVyIHRvIHJlc3VsdCAgKi8KKworaW50CitzZXRvbihwcm0pIGludCAqcHJt OyB7CisgICAgaW50IHgsIHk7CisgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4 c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7CisgICAgKnBybSA9IHk7CisgICAgcmV0dXJuKDEpOworfQorCisvKiAgUyBFIFQgTyBO IEEgVSBUIE8gLS0gIFBhcnNlIG9uL29mZi9hdXRvIChkZWZhdWx0IGF1dG8pICYgc2V0IHJlc3Vs dCAqLworCitzdHJ1Y3Qga2V5dGFiIG9ub2ZmYXV0W10gPSB7CisgICAgeyAiYXV0byIsIFNFVF9B VVRPLCAwIH0sICAgICAgICAgICAgLyogMiAqLworICAgIHsgIm9mZiIsICBTRVRfT0ZGLCAgMCB9 LCAgICAgICAgICAgIC8qIDAgKi8KKyAgICB7ICJvbiIsICAgU0VUX09OLCAgIDAgfSAgICAgICAg ICAgICAvKiAxICovCit9OworCitpbnQKK3NldG9uYXV0KHBybSkgaW50ICpwcm07IHsKKyAgICBp bnQgeCwgeTsKKyAgICBpZiAoKHkgPSBjbWtleShvbm9mZmF1dCwzLCIiLCJhdXRvIix4eHN0cmlu ZykpIDwgMCkgcmV0dXJuKHkpOworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OworICAgICpwcm0gPSB5OworICAgIHJldHVybigxKTsKK30KKworLyogIFMgRSBUIE4gVSBNICAt LSAgU2V0IHBhcmFtZXRlciB0byByZXN1bHQgb2YgY21udW0oKSBwYXJzZS4gICovCisvKgorIENh bGwgd2l0aCBwb2ludGVyIHRvIGludGVnZXIgdmFyaWFibGUgdG8gYmUgc2V0LAorICAgeCA9IG51 bWJlciBmcm9tIGNudW0gcGFyc2UsIHkgPSByZXR1cm4gY29kZSBmcm9tIGNtbnVtLAorICAgbWF4 ID0gbWF4aW11bSB2YWx1ZSB0byBhY2NlcHQsIC0xIGlmIG5vIG1heGltdW0uCisgUmV0dXJucyAt OSBvbiBmYWlsdXJlLCBhZnRlciBwcmludGluZyBhIG1lc3NhZ2UsIG9yIDEgb24gc3VjY2Vzcy4K KyovCitpbnQKK3NldG51bShwcm0seCx5LG1heCkgaW50IHgsIHksICpwcm0sIG1heDsgeworICAg IGRlYnVnKEYxMDEsInNldG51bSIsIiIseSk7CisgICAgaWYgKHkgPT0gLTMpIHsKKyAgICAgICAg cHJpbnRmKCJcbj9WYWx1ZSByZXF1aXJlZFxuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAg fQorICAgIGlmICh5ID09IC0yKSB7CisgICAgICAgIHByaW50ZigiJXM/Tm90IGEgbnVtYmVyOiAl c1xuIixjbWZsZ3MgPT0gMSA/ICIiIDogIlxuIiwgYXR4YnVmKTsKKyAgICAgICAgcmV0dXJuKC05 KTsKKyAgICB9CisgICAgaWYgKHkgPCAwKSByZXR1cm4oeSk7CisgICAgaWYgKG1heCA+IC0xICYm IHggPiBtYXgpIHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksICVkIGlzIHRoZSBtYXhpbXVtXG4i LG1heCk7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOworICAgICpwcm0gPSB4OworICAgIHJldHVybigxKTsKK30KKworLyog IFMgRSBUIEMgQyAgLS0gIFNldCBwYXJhbWV0ZXIgdmFyIHRvIGFuIEFTQ0lJIGNvbnRyb2wgY2hh cmFjdGVyIHZhbHVlLiAgKi8KKy8qCisgIFBhcnNlcyBhIG51bWJlciwgb3IgYSBsaXRlcmFsIGNv bnRyb2wgY2hhcmFjdGVyLCBvciBhIGNhcmV0ICheKSBmb2xsb3dlZAorICBieSBhbiBBU0NJSSBj aGFyYWN0ZXIgd2hvc2UgdmFsdWUgaXMgNjMtOTUgb3IgOTctMTIyLCB0aGVuIGdldHMgY29uZmly bWF0aW9uLAorICB0aGVuIHNldHMgdGhlIHBhcmFtZXRlciB0byB0aGUgY29kZSB2YWx1ZSBvZiB0 aGUgY2hhcmFjdGVyIGdpdmVuLiAgSWYgdGhlcmUKKyAgYXJlIGFueSBwYXJzZSBlcnJvcnMsIHRo ZXkgYXJlIHJldHVybmVkLCBvdGhlcndpc2Ugb24gc3VjY2VzcyAxIGlzIHJldHVybmVkLgorKi8K K2ludAorc2V0Y2MoZGZsdCx2YXIpIGNoYXIgKmRmbHQ7IGludCAqdmFyOyB7CisgICAgaW50IHgs IHk7CisgICAgdW5zaWduZWQgaW50IGM7CisgICAgY2hhciAqaGxwbXNnID0gIkNvbnRyb2wgY2hh cmFjdGVyLFxuXAorIG51bWVyaWMgQVNDSUkgdmFsdWUsXG5cCisgb3IgaW4gXlggbm90YXRpb24s XG5cCisgb3IgcHJlY2VkZWQgYnkgYSBiYWNrc2xhc2ggYW5kIGVudGVyZWQgbGl0ZXJhbGx5IjsK KworICAgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIHR1cm4gb2ZmIGNvbXBsYWludHMgZnJvbSBleHBy ZXNzaW9uIGV2YWx1YXRvci4gKi8KKyAgICB4X2lmbnVtID0gMTsKKyAgICB5ID0gY21udW0oaGxw bXNnLCBkZmx0LCAxMCwgJngsIHh4c3RyaW5nKTsgLyogUGFyc2UgYSBudW1iZXIgKi8KKyAgICB4 X2lmbnVtID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb3cgY29tcGxh aW50cyBhZ2FpbiAqLworICAgIGlmICh5IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFBhcnNlIGZhaWxlZCAqLworICAgICAgICBpZiAoeSAhPSAtMikgICAgICAgICAgICAgICAgICAg IC8qIFJlcGFyc2UgbmVlZGVkIG9yIHNvbWVzdWNoICovCisgICAgICAgICAgcmV0dXJuKHkpOyAg ICAgICAgICAgICAgICAgICAgLyogUGFzcyBmYWlsdXJlIGJhY2sgdXAgdGhlIGNoYWluICovCisg ICAgfQorICAgIC8qIFJlYWwgY29udHJvbCBjaGFyYWN0ZXIgb3IgbGl0ZXJhbCA4LWJpdCBjaGFy YWN0ZXIuLi4gKi8KKworICAgIGZvciAoYyA9IHN0cmxlbihhdG1idWYpIC0gMTsgYyA+IDA7IGMt LSkgLyogVHJpbSAqLworICAgICAgaWYgKGF0bWJ1ZltjXSA9PSBTUCkgYXRtYnVmW2NdID0gTlVM OworCisgICAgaWYgKHkgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSXQgd2FzIG5v dCBhIG51bWJlciAqLworICAgICAgICBpZiAoKChjID0gYXRtYnVmWzBdKSkgJiYgIWF0bWJ1Zlsx XSkgeyAvKiBMaXRlcmFsIGNoYXJhY3Rlcj8gKi8KKyAgICAgICAgICAgIGMgJj0gMHhmZjsKKyAg ICAgICAgICAgIGlmICgoKGMgPiAzMSkgJiYgKGMgPCAxMjcpKSB8fCAoYyA+IDI1NSkpIHsKKyAg ICAgICAgICAgICAgICBwcmludGYoIlxuPyVkOiBPdXQgb2YgcmFuZ2UgLSBtdXN0IGJlIDAtMzEg b3IgMTI3LTI1NVxuIixjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApICAvKiBD b25maXJtICovCisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAg KnZhciA9IGM7ICAgICAgICAgICAgICAgLyogU2V0IHRoZSB2YXJpYWJsZSAqLworICAgICAgICAg ICAgICAgIHJldHVybigxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChhdG1i dWZbMF0gPT0gJ14nICYmICFhdG1idWZbMl0pIHsgLyogT3IgXlggbm90YXRpb24/ICovCisgICAg ICAgICAgICBjID0gYXRtYnVmWzFdOworICAgICAgICAgICAgaWYgKGlzbG93ZXIoKGNoYXIpIGMp KSAgICAgIC8qIFVwcGVyY2FzZSBsb3dlcmNhc2UgbGV0dGVycyAqLworICAgICAgICAgICAgICBj ID0gdG91cHBlcihjKTsKKyAgICAgICAgICAgIGlmIChjID4gNjIgJiYgYyA8IDk2KSB7ICAgICAv KiBDaGVjayByYW5nZSAqLworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkK KyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAqdmFyID0gY3Rs KGMpOyAgICAgICAgICAvKiBPSyAqLworICAgICAgICAgICAgICAgIHJldHVybigxKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Tm90IGEgY29udHJvbCBj aGFyYWN0ZXIgLSAlc1xuIiwgYXRtYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNvbWV0aGluZyBpbGxlZ2FsIHdhcyB0eXBlZCAqLworICAgICAgICAgICAgcHJpbnRmKCI/SW52 YWxpZCAtICVzXG4iLCBhdG1idWYpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg fQorICAgIH0KKyAgICBpZiAoKCh4ID4gMzEpICYmICh4IDwgMTI3KSkgfHwgKHggPiAyNTUpKSB7 IC8qIFRoZXkgdHlwZWQgYSBudW1iZXIgKi8KKyAgICAgICAgcHJpbnRmKCJcbj8lZDogT3V0IG9m IHJhbmdlIC0gbXVzdCBiZSAwLTMxIG9yIDEyNy0yNTVcbiIseCk7CisgICAgICAgIHJldHVybigt OSk7CisgICAgfQorICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAgICAgICAgICAgIC8qIElu IHJhbmdlLCBjb25maXJtICovCisgICAgICByZXR1cm4oeSk7CisgICAgKnZhciA9IHg7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHZhcmlhYmxlICovCisgICAgcmV0dXJuKDEpOwor fQorCisjaWZuZGVmIE5PU1BMICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIFNPUlQg Y29tbWFuZC4uLiAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzcnRzd3RhYltdID0geyAgICAg LyogU09SVCBjb21tYW5kIHN3aXRjaGVzICovCisgICAgeyAiL2Nhc2UiLCAgICBTUlRfQ0FTLCBD TV9BUkcgfSwKKyAgICB7ICIva2V5IiwgICAgIFNSVF9LRVksIENNX0FSRyB9LAorICAgIHsgIi9u dW1lcmljIiwgU1JUX05VTSwgMCB9LAorICAgIHsgIi9yYW5nZSIsICAgU1JUX1JORywgQ01fQVJH IH0sCisgICAgeyAiL3JldmVyc2UiLCBTUlRfUkVWLCAwIH0KK307CitzdGF0aWMgaW50IG5zcnRz d3RhYiA9IHNpemVvZihzcnRzd3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCitleHRlcm4g Y2hhciAqKmFfcHRyW107ICAgICAgICAgICAgICAgICAgLyogQXJyYXkgcG9pbnRlcnMgKi8KK2V4 dGVybiBpbnQgYV9kaW1bXTsgICAgICAgICAgICAgICAgICAgICAvKiBBcnJheSBkaW1lbnNpb25z ICovCisKK2ludAorZG9zb3J0KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERv IHRoZSBTT1JUIGNvbW1hbmQgKi8KKyAgICBjaGFyIGMsICpwID0gTlVMTCwgKiogYXAsICoqIHhw ID0gTlVMTDsKKyAgICBzdHJ1Y3QgRkRCIHN3LCBmbCwgY207CisgICAgaW50IGhpLCBsbzsKKyAg ICBpbnQgeG4gPSAwLCB4ciA9IC0xLCB4ayA9IC0xLCB4YyA9IC0xLCB4cyA9IDA7CisgICAgaW50 IGdldHZhbCA9IDAsIHJhbmdlWzJdLCBjb25maXJtZWQgPSAwOworCisgICAgY21mZGJpKCZzdywg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAq LworICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisg ICAgICAgICAgICJBcnJheSBuYW1lIG9yIHN3aXRjaCIsCisgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIG5zcnRz d3RhYiwgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXpl ICovCisgICAgICAgICAgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgc3J0c3d0YWIs ICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICZmbCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAg ICAgICApOworICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRo aW5nIHRoYXQgZG9lc24ndCBtYXRjaCAqLworICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAg ICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICJBcnJheSBuYW1lIiwgICAgICAgICAg ICAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAgICAg ICBOVUxMLAorICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAmY20KKyAgICAgICAgICAgKTsK KyAgICBjbWZkYmkoJmNtLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPciBwcmVtYXR1cmUg Y29uZmlybWF0aW9uICovCisgICAgICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgICAgICAgICAg LyogZmNvZGUgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBo bHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZh dWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwg c3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgIE5VTEwsCisg ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgIE5VTEwKKyAgICAgICAgICAgKTsKKworICAgIHJh bmdlWzBdID0gLTE7CisgICAgcmFuZ2VbMV0gPSAtMTsKKworICAgIHdoaWxlICgxKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIDAgb3IgbW9yZSBzd2l0Y2hlcyAqLworICAgICAg ICB4ID0gY21mZGIoJnN3KTsKKyAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgICAvKiBCcmVhayBvdXQg aWYgbm90IGEgc3dpdGNoICovCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGMgPSBjbWdicmso KTsKKyAgICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsKKyAgICAgICAgaWYg KGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFncyAmIENNX0FSRykpIHsKKyAgICAgICAgICAgIHBy aW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRha2UgYXJndW1lbnRzXG4iKTsKKyAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVz dWx0KSB7CisgICAgICAgICAgY2FzZSBTUlRfUkVWOgorICAgICAgICAgICAgeHIgPSAxOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBTUlRfS0VZOgorICAgICAgICAgICAgaWYg KGdldHZhbCkgeworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJDb2x1bW4gZm9yIGNv bXBhcmlzb24gKDEtYmFzZWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIs MTAsJngseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAg ICAgICAgICAgICAgeGsgPSB4IC0gMTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg ICB4ayA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNSVF9DQVM6Cisg ICAgICAgICAgICBpZiAoZ2V0dmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXko b25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICAgICAgICAgIHhjID0geTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg ICAgICAgICB4YyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFNSVF9S Tkc6ICAgICAgICAgICAgICAgICAvKiAvUkFOR0UgKi8KKyAgICAgICAgICAgIGlmIChnZXR2YWwp IHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMl07CisgICAgICAgICAgICAgICAgY2hhciBi dWYyWzE2XTsKKyAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICBjaGFyICog cCwgKiBxOworICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtZmxkKCJsb3c6aGlnaCBlbGVtZW50 IiwiMSIsJnMsTlVMTCkpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAg ICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAgICAgICAgICBja3N0cm5jcHkoYnVm LHMsMzIpOworICAgICAgICAgICAgICAgIHAgPSBidWY7CisgICAgICAgICAgICAgICAgZm9yIChp ID0gMDsgKnAgJiYgaSA8IDI7IGkrKykgeyAvKiBHZXQgbG93IGFuZCBoaWdoICovCisgICAgICAg ICAgICAgICAgICAgIHEgPSBwOyAgICAgICAgICAgICAgLyogU3RhcnQgb2YgdGhpcyBwaWVjZSAq LworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnApIHsgICAgICAgIC8qIEZpbmQgZW5kIG9m IHRoaXMgcGllY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnOicpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9IE5VTDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeSA9IDE1OyAgICAgICAgICAg ICAvKiBFdmFsdWF0ZSB0aGlzIHBpZWNlICovCisgICAgICAgICAgICAgICAgICAgIHMgPSBidWYy OworICAgICAgICAgICAgICAgICAgICB6enN0cmluZyhxLCZzLCZ5KTsKKyAgICAgICAgICAgICAg ICAgICAgcyA9IGV2YWx4KGJ1ZjIpOworICAgICAgICAgICAgICAgICAgICBpZiAocykgaWYgKCpz KSBja3N0cm5jcHkoYnVmMixzLDE2KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZGlnaXRz KGJ1ZjIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Ob3QgbnVtZXJpYzog JXNcbiIsYnVmMik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJhbmdlW2ldID0gYXRvaShidWYy KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlIFNSVF9OVU06ICAgICAgICAgICAgICAgICAvKiAvTlVNRVJJQyAqLwor ICAgICAgICAgICAgeG4gPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNo IChjbXJlc3VsdC5mY29kZSkgeworICAgICAgY2FzZSBfQ01DRk06CisgICAgICAgIGNvbmZpcm1l ZCA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBfQ01GTEQ6CisgICAgICAgIGNrc3Ry bmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsgLyogU2FmZSBjb3B5IG9mIG5h bWUgKi8KKyAgICAgICAgcyA9IGxpbmU7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoK KyAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3Vs dC5mY29kZSk7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGlmIChjb25maXJtZWQp IHsKKyAgICAgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgIHJl dHVybigtOSk7CisgICAgfQorICAgIGNrbWFrbXNnKHRtcGJ1ZixUTVBCVUZTSVosCisgICAgICAg ICAgICAgIlNlY29uZCBhcnJheSB0byBzb3J0IGFjY29yZGluZyB0byAiLHMsTlVMTCxOVUxMKTsK KyAgICBpZiAoKHggPSBjbWZsZCh0bXBidWYsIiIsJnAsTlVMTCkpIDwgMCkKKyAgICAgIGlmICh4 ICE9IC0zKQorICAgICAgICByZXR1cm4oeCk7CisgICAgdG1wYnVmWzBdID0gTlVMOworICAgIGNr c3RybmNweSh0bXBidWYscCxUTVBCVUZTSVopOworICAgIHAgPSB0bXBidWY7CisgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSAgICAgICAgICAgICAgLyogR2V0IGNvbmZpcm1hdGlvbiAqLworICAg ICAgcmV0dXJuKHgpOworCisgICAgeCA9IGFycmF5Ym91bmRzKHMsJmxvLCZoaSk7ICAgICAgICAg LyogR2V0IGFycmF5IGluZGV4ICYgYm91bmRzICovCisgICAgaWYgKHggPCAwKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2hlY2sgKi8KKyAgICAgICAgcHJpbnRmKCI/QmFkIGFycmF5IG5h bWU6ICVzXG4iLHMpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAobG8gPiAt MSkgcmFuZ2VbMF0gPSBsbzsgICAgICAgICAvKiBTZXQgcmFuZ2UgKi8KKyAgICBpZiAoaGkgPiAt MSkgcmFuZ2VbMV0gPSBoaTsKKyAgICBhcCA9IGFfcHRyW3hdOyAgICAgICAgICAgICAgICAgICAg ICAvKiBHZXQgcG9pbnRlciB0byBhcnJheSBlbGVtZW50IGxpc3QgKi8KKyAgICBpZiAoIWFwKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayAqLworICAgICAgICBwcmludGYoIj9B cnJheSBub3QgZGVjbGFyZWQ6ICVzXG4iLCBzKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9 CisgICAgaWYgKHJhbmdlWzBdIDwgMCkgICAgICAgICAgICAgICAgICAgLyogU3RhcnRpbmcgZWxl bWVudCAqLworICAgICAgcmFuZ2VbMF0gPSAxOworICAgIGlmIChyYW5nZVsxXSA8IDApICAgICAg ICAgICAgICAgICAgIC8qIEZpbmFsIGVsZW1lbnQgKi8KKyAgICAgIHJhbmdlWzFdID0gYV9kaW1b eF07CisgICAgaWYgKHJhbmdlWzFdID4gYV9kaW1beF0pIHsKKyAgICAgICAgcHJpbnRmKCI/cmFu Z2UgJWQ6JWQgZXhjZWVkcyBhcnJheSBkaW1lbnNpb24gJWRcbiIsCisgICAgICAgICAgICAgICBy YW5nZVswXSxyYW5nZVsxXSxhX2RpbVt4XQorICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0 dXJuKC05KTsKKyAgICB9CisgICAgYXAgKz0gcmFuZ2VbMF07CisgICAgeHMgPSByYW5nZVsxXSAt IHJhbmdlWzBdICsgMTsgICAgICAgLyogTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNvcnQgKi8KKyAg ICBpZiAoeHMgPCAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayAqLworICAgICAg ICBwcmludGYoIj9CYWQgcmFuZ2U6ICVkOiVkXG4iLHJhbmdlWzBdLHJhbmdlWzFdKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKHhrIDwgMCkgeGsgPSAwOyAgICAgICAgICAg ICAgICAgLyogS2V5IHBvc2l0aW9uICovCisgICAgaWYgKHhyIDwgMCkgeHIgPSAwOyAgICAgICAg ICAgICAgICAgLyogUmV2ZXJzZSBmbGFnICovCisgICAgaWYgKHhuKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTnVtZXJpYyBmbGFnICovCisgICAgICB4YyA9IDI7CisgICAgZWxzZSBp ZiAoeGMgPCAwKSAgICAgICAgICAgICAgICAgICAgLyogTm90IG51bWVyaWMgKi8KKyAgICAgIHhj ID0gaW5wY2FzW2NtZGx2bF07ICAgICAgICAgICAgICAvKiBzbyBhbHBoYSBjYXNlIG9wdGlvbiAq LworCisgICAgaWYgKCpwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFyYWxsZWwg YXJyYXkgZ2l2ZW4/ICovCisgICAgICAgIHkgPSB4YXJyYXkocCk7ICAgICAgICAgICAgICAgICAg LyogWWVzLCBnZXQgaXRzIGluZGV4LiAqLworICAgICAgICBpZiAoeSA8IDApIHsKKyAgICAgICAg ICAgIHByaW50ZigiP0JhZCBhcnJheSBuYW1lOiAlc1xuIiwgcCk7CisgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmICh5ICE9IHgpIHsgICAgICAgICAgICAgICAg ICAgLyogSWYgdGhlIDIgYXJyYXlzIGFyZSBkaWZmZXJlbnQgICovCisgICAgICAgICAgICB4cCA9 IGFfcHRyW3ldOyAgICAgICAgICAgICAgLyogUG9pbnRlciB0byAybmQgYXJyYXkgZWxlbWVudCBs aXN0ICovCisgICAgICAgICAgICBpZiAoIXhwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/ QXJyYXkgbm90IGRlY2xhcmVkOiAlc1xuIiwgcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhX2RpbVt5XSA8IHJhbmdlWzFdKSB7 CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/QXJyYXkgJXMgc21hbGxlciB0aGFuICVzXG4iLCBw LCBzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgeHAgKz0gcmFuZ2VbMF07ICAgICAgICAgICAgIC8qIFNldCBiYXNlIHRvIHNhbWUgYXMg MXN0IGFycmF5ICovCisgICAgICAgIH0KKyAgICB9CisgICAgc2hfc29ydChhcCx4cCx4cyx4ayx4 cix4Yyk7ICAgICAgICAgLyogU29ydCB0aGUgYXJyYXkocykgKi8KKyAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOyAgICAgICAgICAgICAgICAvKiBBbHdheXMgc3VjY2VlZHMgKi8KK30KKyNlbmRpZiAv KiBOT1NQTCAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBwdXJndGFiW10gPSB7ICAgICAgLyog UFVSR0UgY29tbWFuZCBzd2l0Y2hlcyAqLworICAgIHsgIi9hZnRlciIsICAgICAgICBQVV9BRlQs ICBDTV9BUkcgfSwKKyAgICB7ICIvYXNrIiwgICAgICAgICAgUFVfQVNLLCAgMCB9LAorICAgIHsg Ii9iZWZvcmUiLCAgICAgICBQVV9CRUYsICBDTV9BUkcgfSwKKyAgICB7ICIvZGVsZXRlIiwgICAg ICAgUFVfREVMRSwgQ01fSU5WIH0sCisjaWZkZWYgVU5JWE9ST1NLCisgICAgeyAiL2RvdGZpbGVz IiwgICAgIFBVX0RPVCwgIDAgfSwKKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyAgICB7ICIvZXhj ZXB0IiwgICAgICAgUFVfRVhDLCAgQ01fQVJHIH0sCisgICAgeyAiL2hlYWRpbmciLCAgICAgIFBV X0hERywgIDAgfSwKKyAgICB7ICIva2VlcCIsICAgICAgICAgUFVfS0VFUCwgQ01fQVJHIH0sCisg ICAgeyAiL2xhcmdlci10aGFuIiwgIFBVX0xBUiwgIENNX0FSRyB9LAorICAgIHsgIi9saXN0Iiwg ICAgICAgICBQVV9MSVNULCAwIH0sCisgICAgeyAiL2xvZyIsICAgICAgICAgIFBVX0xJU1QsIENN X0lOViB9LAorICAgIHsgIi9ub2FzayIsICAgICAgICBQVV9OQVNLLCAwIH0sCisgICAgeyAiL25v ZGVsZXRlIiwgICAgIFBVX05PREUsIENNX0lOViB9LAorI2lmZGVmIFVOSVhPUk9TSworICAgIHsg Ii9ub2RvdGZpbGVzIiwgICBQVV9OT0RPVCwwIH0sCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisg ICAgeyAiL25vaGVhZGluZyIsICAgIFBVX05PSCwgIDAgfSwKKyAgICB7ICIvbm9sIiwgICAgICAg ICAgUFVfTk9MSSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIi9ub2xpc3QiLCAgICAgICBQVV9O T0xJLCAwIH0sCisgICAgeyAiL25vbG9nIiwgICAgICAgIFBVX05PTEksIENNX0lOViB9LAorI2lm ZGVmIENLX1RUR1dTSVoKKyAgICB7ICIvbm9wYWdlIiwgICAgICAgUFVfTk9QQSwgMCB9LAorI2Vu ZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICB7ICIvbm90LWFmdGVyIiwgICAgUFVfTkFGLCAgQ01f QVJHIH0sCisgICAgeyAiL25vdC1iZWZvcmUiLCAgIFBVX05CRiwgIENNX0FSRyB9LAorICAgIHsg Ii9ub3Qtc2luY2UiLCAgICBQVV9OQUYsICBDTV9JTlZ8Q01fQVJHIH0sCisjaWZkZWYgQ0tfVFRH V1NJWgorICAgIHsgIi9wYWdlIiwgICAgICAgICBQVV9QQUdFLCAwIH0sCisjZW5kaWYgLyogQ0tf VFRHV1NJWiAqLworICAgIHsgIi9xdWlldCIsICAgICAgICBQVV9RVUlFLCBDTV9JTlYgfSwKKyNp ZmRlZiBSRUNVUlNJVkUKKyAgICB7ICIvcmVjdXJzaXZlIiwgICAgUFVfUkVDVSwgMCB9LAorI2Vu ZGlmIC8qIFJFQ1VSU0lWRSAqLworICAgIHsgIi9zaW5jZSIsICAgICAgICBQVV9BRlQsICBDTV9B Ukd8Q01fSU5WIH0sCisgICAgeyAiL3NpbXVsYXRlIiwgICAgIFBVX05PREUsIDAgfSwKKyAgICB7 ICIvc21hbGxlci10aGFuIiwgUFVfU01BLCAgQ01fQVJHIH0sCisgICAgeyAiL3ZlcmJvc2UiLCAg ICAgIFBVX1ZFUkIsIENNX0lOViB9Cit9Oworc3RhdGljIGludCBucHVyZ3RhYiA9IHNpemVvZihw dXJndGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKKworCisKKworaW50Citia3VwbnVtKHMs aSkgY2hhciAqIHM7IGludCAqaTsgeworICAgIGludCBrID0gMCwgcG9zID0gMDsKKyAgICBjaGFy ICogcCA9IE5VTEwsICpxOworICAgICppID0gcG9zOworICAgIGlmICghcykgcyA9ICIiOworICAg IGlmICghKnMpCisgICAgICByZXR1cm4oLTEpOworICAgIGlmICgoayA9IHN0cmxlbihzKSkgPCA1 KQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIGlmIChzW2stMV0gIT0gJ34nKQorICAgICAgcmV0 dXJuKC0xKTsKKyAgICBwb3MgPSBrIC0gMjsKKyAgICBxID0gcyArIHBvczsKKyAgICB3aGlsZSAo cSA+PSBzICYmIGlzZGlnaXQoKnEpKSB7CisgICAgICAgIHAgPSBxLS07CisgICAgICAgIHBvcy0t OworICAgIH0KKyAgICBpZiAoIXApCisgICAgICByZXR1cm4oLTEpOworICAgIGlmIChxIDwgcysy KQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBpZiAoKnEgIT0gJ34nIHx8ICoocS0xKSAhPSAnLicp CisgICAgICByZXR1cm4oLTEpOworICAgIHBvcy0tOworICAgICppID0gcG9zOworICAgIGRlYnVn KEYxMTEsImJrdXBudW0iLHMrcG9zLHBvcyk7CisgICAgcmV0dXJuKGF0b2kocCkpOworfQorCisj aWZkZWYgQ0tQVVJHRQorLyogUHJlc2VudGx5IG9ubHkgZm9yIFVOSVggYmVjYXVzZSB3ZSBuZWVk IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGZpbGUgYXJyYXkuICovCisvKiBOb3QgbmVlZGVkIGZvciBW TVMgYW55d2F5LCBiZWNhdXNlIHdlIGRvbid0IG1ha2UgYmFja3VwIGZpbGVzIHRoZXJlLiAqLwor CisjZGVmaW5lIE1BWEtFRVAgMzIgICAgICAgICAgICAgICAgICAgICAgLyogQmlnZ2VzdCAvS0VF UDogdmFsdWUgKi8KKworc3RhdGljIGludAorICBwdV9rZWVwID0gMCwgcHVfbGlzdCA9IDAsIHB1 X2RvdCA9IDAsIHB1X2FzayA9IDAsIHB1X2hkZyA9IDA7CisKKyNpZmRlZiBDS19UVEdXU0laCitz dGF0aWMgaW50IHB1X3BhZ2UgPSAtMTsKKyNlbHNlCitzdGF0aWMgaW50IHB1X3BhZ2UgPSAwOwor I2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKworI2lmbmRlZiBOT1NIT1cKK1ZPSUQKK3Nob3dwdXJn b3B0cygpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSE9XIFBVUkdFIGNvbW1hbmQgb3B0 aW9ucyAqLworICAgIGludCB4ID0gMDsKKyAgICBleHRlcm4gaW50IG9wdGxpbmVzOworICAgIHBy dG9wdCgmb3B0bGluZXMsIlBVUkdFIik7CisgICAgaWYgKHB1X2FzayA+IC0xKSB7CisgICAgICAg IHgrKzsKKyAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywgcHVfYXNrID8gIi9BU0siIDogIi9OT0FT SyIpOworICAgIH0KKyNpZmRlZiBVTklYT1JPU0sKKyAgICBpZiAocHVfZG90ID4gLTEpIHsKKyAg ICAgICAgeCsrOworICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBwdV9kb3QgPyAiL0RPVEZJTEVT IiA6ICIvTk9ET1RGSUxFUyIpOworICAgIH0KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyAgICBp ZiAocHVfa2VlcCA+IC0xKSB7CisgICAgICAgIHgrKzsKKyAgICAgICAgY2ttYWttc2codG1wYnVm LFRNUEJVRlNJWiwiL0tFRVA6Iixja2l0b2EocHVfa2VlcCksTlVMTCxOVUxMKTsKKyAgICAgICAg cHJ0b3B0KCZvcHRsaW5lcyx0bXBidWYpOworICAgIH0KKyAgICBpZiAocHVfbGlzdCA+IC0xKSB7 CisgICAgICAgIHgrKzsKKyAgICAgICAgcHJ0b3B0KCZvcHRsaW5lcywgcHVfbGlzdCA/ICIvTElT VCIgOiAiL05PTElTVCIpOworICAgIH0KKyAgICBpZiAocHVfaGRnID4gLTEpIHsKKyAgICAgICAg eCsrOworICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBwdV9oZGcgPyAiL0hFQURJTkciIDogIi9O T0hFQURJTkciKTsKKyAgICB9CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgIGlmIChwdV9wYWdlID4g LTEpIHsKKyAgICAgICAgeCsrOworICAgICAgICBwcnRvcHQoJm9wdGxpbmVzLCBwdV9wYWdlID8g Ii9QQUdFIiA6ICIvTk9QQUdFIik7CisgICAgfQorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAg ICBpZiAoIXgpIHBydG9wdCgmb3B0bGluZXMsIihubyBvcHRpb25zIHNldCkiKTsKKyAgICBwcnRv cHQoJm9wdGxpbmVzLCIiKTsKK30KKyNlbmRpZiAvKiBOT1NIT1cgKi8KKworaW50CitzZXRwdXJn b3B0cygpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IFBVUkdFIGNvbW1hbmQgb3B0 aW9ucyAqLworICAgIGludCBjLCB6LCBnZXR2YWwgPSAwOworICAgIGludAorICAgICAgeF9rZWVw ICA9IC0xLCB4X2xpc3QgPSAtMSwgeF9wYWdlID0gLTEsCisgICAgICB4X2hkZyAgID0gLTEsIHhf YXNrICA9IC0xLCB4X2RvdCAgPSAtMTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICgo eSA9IGNtc3dpKHB1cmd0YWIsbnB1cmd0YWIsIlN3aXRjaCIsIiIseHhzdHJpbmcpKSA8IDApIHsK KyAgICAgICAgICAgIGlmICh5ID09IC0zKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICB9CisgICAgICAgIGMg PSBjbWdicmsoKTsKKyAgICAgICAgaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScp KSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhp cyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAm IENNX0FSRykpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFu IGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAg ICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSBQVV9LRUVQOgorICAgICAgICAgICAgeiA9 IDE7CisgICAgICAgICAgICBpZiAoYyA9PSAnOicgfHwgYyA9PSAnPScpCisgICAgICAgICAgICAg IGlmICgoeSA9IGNtbnVtKCJIb3cgbWFueSBiYWNrdXAgZmlsZXMgdG8ga2VlcCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIxIiwxMCwmeix4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IE1BWEtFRVAp IHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9QbGVhc2Ugc3BlY2lmeSBhIG51bWJlciBiZXR3 ZWVuIDAgYW5kICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBNQVhLRUVQCisgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHhfa2VlcCA9IHo7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIFBVX0xJU1Q6CisgICAgICAgICAgY2FzZSBQVV9WRVJCOgorICAgICAgICAgICAg eF9saXN0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgUFVfUVVJRToK KyAgICAgICAgICBjYXNlIFBVX05PTEk6CisgICAgICAgICAgICB4X2xpc3QgPSAwOworICAgICAg ICAgICAgYnJlYWs7CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgICAgICAgIGNhc2UgUFVfUEFHRToK KyAgICAgICAgICAgIHhfcGFnZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj YXNlIFBVX05PUEE6CisgICAgICAgICAgICB4X3BhZ2UgPSAwOworICAgICAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgIGNhc2UgUFVfSERHOgorICAgICAg ICAgICAgeF9oZGcgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBQVV9O T0g6CisgICAgICAgICAgICB4X2hkZyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICBjYXNlIFBVX0FTSzoKKyAgICAgICAgICAgIHhfYXNrID0gMTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGNhc2UgUFVfTkFTSzoKKyAgICAgICAgICAgIHhfYXNrID0gMDsKKyAgICAg ICAgICAgIGJyZWFrOworI2lmZGVmIFVOSVhPUk9TSworICAgICAgICAgIGNhc2UgUFVfRE9UOgor ICAgICAgICAgICAgeF9kb3QgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBQVV9OT0RPVDoKKyAgICAgICAgICAgIHhfZG90ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBw cmludGYoIj9UaGlzIG9wdGlvbiBjYW4gbm90IGJlIHNldFxuIik7CisgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICB9CisgICAgfQorICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgICAg ICAgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KKyAgICAgIHJldHVybih4KTsKKyAgICBp ZiAoeF9rZWVwID4gLTEpICAgICAgICAgICAgICAgICAgICAvKiBTZXQgUFVSR0UgZGVmYXVsdHMu ICovCisgICAgICBwdV9rZWVwID0geF9rZWVwOworICAgIGlmICh4X2xpc3QgPiAtMSkKKyAgICAg IHB1X2xpc3QgPSB4X2xpc3Q7CisjaWZkZWYgQ0tfVFRHV1NJWgorICAgIGlmICh4X3BhZ2UgPiAt MSkKKyAgICAgIHB1X3BhZ2UgPSB4X3BhZ2U7CisjZW5kaWYgLyogQ0tfVFRHV1NJWiAqLworICAg IGlmICh4X2hkZyA+IC0xKQorICAgICAgcHVfaGRnID0geF9oZGc7CisgICAgaWYgKHhfYXNrID4g LTEpCisgICAgICBwdV9hc2sgPSB4X2FzazsKKyAgICBpZiAoeF9kb3QgPiAtMSkKKyAgICAgIHB1 X2RvdCA9IHhfZG90OworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisKK2ludAorZG9wdXJn ZSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvIHRoZSBQVVJHRSBjb21tYW5k ICovCisgICAgZXh0ZXJuIGNoYXIgKiogbXRjaHM7CisgICAgZXh0ZXJuIGludCB4YXNrbW9yZSwg Y21kX3Jvd3MsIHJlY3Vyc2l2ZTsKKyAgICBpbnQgc2ltdWxhdGUgPSAwLCBhc2tpbmcgPSAwOwor ICAgIGludCBsaXN0aW5nID0gMCwgcGFnaW5nID0gLTEsIGxpbmVzID0gMCwgZGVsZXRpbmcgPSAx LCBlcnJvcnMgPSAwOworICAgIHN0cnVjdCBGREIgc3csIHNmLCBjbTsKKyAgICBpbnQgZywgaSwg aiwgaywgbSA9IDAsIG4sIHgsIHksIHosIGRvbmUgPSAwLCBjb3VudCA9IDAsIGZsYWdzID0gMDsK KyAgICBpbnQgdG9rZWVwID0gMCwgZ2V0dmFsID0gMCwgaGF2ZW5hbWUgPSAwLCBjb25maXJtZWQg PSAwOworICAgIGludCB4eFtNQVhLRUVQKzFdOyAgICAgICAgICAgICAgICAgIC8qIEFycmF5IG9m IG51bWJlcnMgdG8ga2VlcCAqLworICAgIGludCBtaW4gPSAtMTsKKyAgICBpbnQgeF9oZGcgPSAw LCBmcyA9IDAsIHJjID0gMDsKKyAgICBDS19PRkZfVCBtaW5zaXplID0gLTFMLCBtYXhzaXplID0g LTFMOworICAgIGNoYXIgbmFtZWJ1ZltDS01BWFBBVEgrNF07CisgICAgY2hhciBiYXNlYnVmW0NL TUFYUEFUSCs0XTsKKyAgICBjaGFyCisgICAgICAqIHB1X2FmdCA9IE5VTEwsCisgICAgICAqIHB1 X2JlZiA9IE5VTEwsCisgICAgICAqIHB1X25hZiA9IE5VTEwsCisgICAgICAqIHB1X25iZiA9IE5V TEwsCisgICAgICAqIHB1X2V4YyA9IE5VTEw7CisgICAgY2hhciAqIHB4bGlzdFs4XTsgICAgICAg ICAgICAgICAgICAgLyogRXhjZXB0aW9uIGxpc3QgKi8KKworICAgIGlmIChwdV9rZWVwID4gLTEp ICAgICAgICAgICAgICAgICAgIC8qIFNldCBQVVJHRSBkZWZhdWx0cy4gKi8KKyAgICAgIHRva2Vl cCA9IHB1X2tlZXA7CisgICAgaWYgKHB1X2xpc3QgPiAtMSkKKyAgICAgIGxpc3RpbmcgPSBwdV9s aXN0OworI2lmZGVmIENLX1RUR1dTSVoKKyAgICBpZiAocHVfcGFnZSA+IC0xKQorICAgICAgcGFn aW5nID0gcHVfcGFnZTsKKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisKKyAgICBmb3IgKGkgPSAw OyBpIDw9IE1BWEtFRVA7IGkrKykgICAgICAvKiBDbGVhciB0aGlzIG51bWJlciBidWZmZXIgKi8K KyAgICAgIHh4W2ldID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSAgICAgICAgICAg ICAvKiBJbml0aWFsaXplIHRoZXNlLi4uICovCisgICAgICBweGxpc3RbaV0gPSBOVUxMOworCisg ICAgZ19tYXRjaGRvdCA9IG1hdGNoZG90OyAgICAgICAgICAgICAgLyogU2F2ZSB0aGVzZS4uLiAq LworCisgICAgY21mZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAgICAgLyogMXN0IEZEQiAt IFBVUkdFIHN3aXRjaGVzICovCisgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAgICAg ICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgIkZpbGVuYW1lIG9yIHN3aXRjaCIsICAgICAgICAv KiBobHBtc2cgKi8KKyAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBk ZWZhdWx0ICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgbnB1cmd0YWIsICAgICAgICAgICAgICAgICAg ICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICAgICAgNCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dp ICovCisgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2lu ZyBmdW5jdGlvbiAqLworICAgICAgICAgICBwdXJndGFiLCAgICAgICAgICAgICAgICAgICAgIC8q IEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgJnNmICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICk7CisgICAgY21mZGJpKCZz ZiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMm5kIEZEQiAtIGZpbGVzcGVjIHRvIHB1cmdl ICovCisgICAgICAgICAgIF9DTUlGSSwgICAgICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8K KyAgICAgICAgICAgIiIsCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICB4 eHN0cmluZywKKyAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgJmNtCisgICAgICAgICAgICk7 CisgICAgY21mZGJpKCZjbSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3IgcHJlbWF0dXJl IGNvbmZpcm1hdGlvbiAqLworICAgICAgICAgICBfQ01DRk0sICAgICAgICAgICAgICAgICAgICAg IC8qIGZjb2RlICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog aGxwbXNnICovCisgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVm YXVsdCAqLworICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IHN0cmluZyBkYXRhICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICBOVUxMLAor ICAgICAgICAgICBOVUxMLAorICAgICAgICAgICBOVUxMCisgICAgICAgICAgICk7CisKKyAgICB3 aGlsZSAoIWhhdmVuYW1lICYmICFjb25maXJtZWQpIHsKKyAgICAgICAgeCA9IGNtZmRiKCZzdyk7 ICAgICAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgaWYgKHggPCAw KSB7ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciAqLworICAgICAgICAgICAgcmMgPSB4Owor ICAgICAgICAgICAgZ290byB4cHVyZ2U7CisgICAgICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmNv ZGUgPT0gX0NNS0VZKSB7CisgICAgICAgICAgICBjaGFyIGM7CisgICAgICAgICAgICBjID0gY21n YnJrKCk7CisgICAgICAgICAgICBpZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jykp ICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/ VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICAg ICAgcmMgPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhwdXJnZTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAg ICAgICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxu Iik7CisgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICAgICAgICBnb3RvIHhwdXJn ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAoayA9IGNtcmVzdWx0Lm5yZXN1 bHQpIHsKKyAgICAgICAgICAgICAgY2FzZSBQVV9LRUVQOgorICAgICAgICAgICAgICAgIHogPSAx OworICAgICAgICAgICAgICAgIGlmIChjID09ICc6JyB8fCBjID09ICc9JykgeworICAgICAgICAg ICAgICAgICAgICBpZiAoKHkgPSBjbW51bSgiSG93IG1hbnkgYmFja3VwIGZpbGVzIHRvIGtlZXAi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIsMTAsJnoseHhzdHJpbmcp KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0geTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8geHB1cmdlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh6IDwgMCB8fCB6ID4gTUFYS0VFUCkgeworICAg ICAgICAgICAgICAgICAgICBwcmludGYoIj9QbGVhc2Ugc3BlY2lmeSBhIG51bWJlciBiZXR3ZWVu IDAgYW5kICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYS0VFUAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAg ICAgICAgICAgICAgICAgICAgZ290byB4cHVyZ2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIHRva2VlcCA9IHo7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgUFVfTElTVDoKKyAgICAgICAgICAgICAgICBsaXN0aW5nID0gMTsKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBQVV9OT0xJOgorICAgICAgICAgICAg ICAgIGxpc3RpbmcgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIENLX1RUR1dT SVoKKyAgICAgICAgICAgICAgY2FzZSBQVV9QQUdFOgorICAgICAgICAgICAgICAgIHBhZ2luZyA9 IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgUFVfTk9QQToK KyAgICAgICAgICAgICAgICBwYWdpbmcgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICAgICAgICAgICAgY2FzZSBQVV9ERUxFOgorICAgICAg ICAgICAgICAgIGRlbGV0aW5nID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgY2FzZSBQVV9OT0RFOgorICAgICAgICAgICAgICAgIGRlbGV0aW5nID0gMDsKKyAgICAg ICAgICAgICAgICBzaW11bGF0ZSA9IDE7CisgICAgICAgICAgICAgICAgbGlzdGluZyA9IDE7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgUFVfQVNLOgorICAgICAg ICAgICAgICAgIGFza2luZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgUFVfTkFTSzoKKyAgICAgICAgICAgICAgICBhc2tpbmcgPSAwOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFBVX0FGVDoKKyAgICAgICAgICAgICAg Y2FzZSBQVV9CRUY6CisgICAgICAgICAgICAgIGNhc2UgUFVfTkFGOgorICAgICAgICAgICAgICBj YXNlIFBVX05CRjoKKyAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWRhdGUoIkZpbGUtdGltZSIs IiIsJnMsMCx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAt MykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/RGF0ZS10aW1lIHJlcXVpcmVk XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTk7CisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHJjID0geDsKKyAgICAgICAgICAgICAg ICAgICAgZ290byB4cHVyZ2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZz Kys7CisgICAgICAgICAgICAgICAgc3dpdGNoIChrKSB7CisgICAgICAgICAgICAgICAgICBjYXNl IFBVX0FGVDogbWFrZXN0cigmcHVfYWZ0LHMpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgUFVfQkVGOiBtYWtlc3RyKCZwdV9iZWYscyk7IGJyZWFrOworICAgICAgICAgICAgICAgICAg Y2FzZSBQVV9OQUY6IG1ha2VzdHIoJnB1X25hZixzKTsgYnJlYWs7CisgICAgICAgICAgICAgICAg ICBjYXNlIFBVX05CRjogbWFrZXN0cigmcHVfbmJmLHMpOyBicmVhazsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgUFVfU01BOgor ICAgICAgICAgICAgICBjYXNlIFBVX0xBUjoKKyAgICAgICAgICAgICAgICBpZiAoKHggPSBjbW51 bSgiRmlsZSBzaXplIGluIGJ5dGVzIiwiMCIsMTAsJnkseHhzdHJpbmcpKSA8IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgcmMgPSB4OworICAgICAgICAgICAgICAgICAgICBnb3RvIHhwdXJnZTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnMrKzsKKyAgICAgICAgICAgICAg ICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgUFVf U01BOiBtaW5zaXplID0geTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFBVX0xBUjog bWF4c2l6ZSA9IHk7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBQVV9ET1Q6CisgICAgICAgICAgICAgICAgbWF0Y2hk b3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFBVX05P RE9UOgorICAgICAgICAgICAgICAgIG1hdGNoZG90ID0gMDsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgY2FzZSBQVV9FWEM6CisgICAgICAgICAgICAgICAgaWYgKCh4ID0g Y21mbGQoIlBhdHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAg ICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9QYXR0 ZXJuIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTk7CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHJjID0geDsKKyAg ICAgICAgICAgICAgICAgICAgZ290byB4cHVyZ2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGZzKys7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmcHVfZXhjLHMpOworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFBVX0hERzoKKyAgICAgICAg ICAgICAgICB4X2hkZyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgUkVDVVJT SVZFCisgICAgICAgICAgICAgIGNhc2UgUFVfUkVDVTogICAgICAgICAgICAgLyogL1JFQ1VSU0lW RSAqLworICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IDI7CisgICAgICAgICAgICAgICAgYnJl YWs7CisjZW5kaWYgLyogUkVDVVJTSVZFICovCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICAgICAgcHJpbnRmKCI/Tm90IGltcGxlbWVudGVkIHlldCAtIFwiJXNcIlxuIixhdG1i dWYpOworICAgICAgICAgICAgICAgIHJjID0gLTk7CisgICAgICAgICAgICAgICAgZ290byB4cHVy Z2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0g X0NNSUZJKSB7CisgICAgICAgICAgICBoYXZlbmFtZSA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAo Y21yZXN1bHQuZmNvZGUgPT0gX0NNQ0ZNKSB7CisgICAgICAgICAgICBjb25maXJtZWQgPSAxOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmMgPSAtMjsKKyAgICAgICAgICAgIGdvdG8g eHB1cmdlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChoYXZlbmFtZSkgeworI2lmZGVmIENL UkVHRVgKKyAgICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosY21yZXN1bHQuc3Jlc3VsdCwi Ln5bMS05XSp+IixOVUxMLE5VTEwpOworI2Vsc2UKKyAgICAgICAgY2ttYWttc2cobGluZSxMSU5C VUZTSVosY21yZXN1bHQuc3Jlc3VsdCwiLn4qfiIsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBDS1JF R0VYICovCisgICAgfSBlbHNlIHsKKyNpZmRlZiBDS1JFR0VYCisgICAgICAgIGNrc3RybmNweShs aW5lLCIqLn5bMS05XSp+IixMSU5CVUZTSVopOworI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KGxp bmUsIioufip+IixMSU5CVUZTSVopOworI2VuZGlmIC8qIENLUkVHRVggKi8KKyAgICB9CisgICAg aWYgKCFjb25maXJtZWQpIHsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSB7CisgICAg ICAgICAgICByYyA9IHg7CisgICAgICAgICAgICBnb3RvIHhwdXJnZTsKKyAgICAgICAgfQorICAg IH0KKyAgICAvKiBQYXJzZSBmaW5pc2hlZCAtIG5vdyBhY3Rpb24gKi8KKworI2lmZGVmIENLX0xP R0lOCisgICAgaWYgKGlzZ3Vlc3QpIHsKKyAgICAgICAgcHJpbnRmKCI/RmlsZSBkZWxldGlvbiBi eSBndWVzdHMgbm90IHBlcm1pdHRlZC5cbiIpOworICAgICAgICByYyA9IC05OworICAgICAgICBn b3RvIHhwdXJnZTsKKyAgICB9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKworI2lmZGVmIENLX1RU R1dTSVoKKyAgICBpZiAocGFnaW5nIDwgMCkgICAgICAgICAgICAgICAgICAgICAvKiAvW05PXVBB R0Ugbm90IGdpdmVuICovCisgICAgICBwYWdpbmcgPSB4YXNrbW9yZTsgICAgICAgICAgICAgICAg Lyogc28gdXNlIHByZXZhaWxpbmcgKi8KKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisKKyAgICBs aW5lcyA9IDA7CisgICAgaWYgKHhfaGRnID4gMCkgeworICAgICAgICBwcmludGYoIlB1cmdpbmcg JXMsIGtlZXBpbmcgJWQuLi4lc1xuIiwKKyAgICAgICAgICAgICAgIHMsCisgICAgICAgICAgICAg ICB0b2tlZXAsCisgICAgICAgICAgICAgICBzaW11bGF0ZSA/ICIgKFNJTVVMQVRJT04pIiA6ICIi KTsKKyAgICAgICAgbGluZXMgKz0gMjsKKyAgICB9CisgICAgZmxhZ3MgPSBaWF9GSUxPTkxZOwor ICAgIGlmIChyZWN1cnNpdmUpIGZsYWdzIHw9IFpYX1JFQ1VSU0U7CisgICAgbiA9IG56eHBhbmQo bGluZSxmbGFncyk7ICAgICAgICAgICAgLyogR2V0IGxpc3Qgb2YgYmFja3VwIGZpbGVzICovCisg ICAgaWYgKHRva2VlcCA8IDEpIHsgICAgICAgICAgICAgICAgICAgLyogRGVsZXRpbmcgYWxsIG9m IHRoZW0uLi4gKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAg ICAgaWYgKGZzKSBpZiAoZmlsZXNlbGVjdChtdGNoc1tpXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHVfYWZ0LHB1X2JlZixwdV9uYWYscHVfbmJmLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtaW5zaXplLG1heHNpemUsMCw4LHB4bGlzdCkgPCAxKSB7 CisgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgICAg IHByaW50ZigiICVzIChTS0lQUEVEKVxuIixtdGNoc1tpXSk7CisjaWZkZWYgQ0tfVFRHV1NJWgor ICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5nKQorICAgICAgICAgICAgICAgICAgICAgIGlm ICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghYXNrbW9yZSgpKSBnb3RvIHhwdXJnZTsgZWxzZSBsaW5lcyA9IDA7CisgICAgICAgICAgICAg ICAgICAgICAgfQorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo YXNraW5nKSB7CisgICAgICAgICAgICAgICAgaW50IHg7CisgICAgICAgICAgICAgICAgY2ttYWtt c2codG1wYnVmLFRNUEJVRlNJWiwiIERlbGV0ZSAiLG10Y2hzW2ldLCI/IixOVUxMKTsKKyAgICAg ICAgICAgICAgICB4ID0gZ2V0eWVzbm8odG1wYnVmLDEpOworICAgICAgICAgICAgICAgIHN3aXRj aCAoeCkgeworICAgICAgICAgICAgICAgICAgY2FzZSAwOiBjb250aW51ZTsKKyAgICAgICAgICAg ICAgICAgIGNhc2UgMTogYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDI6IGdvdG8geHB1 cmdlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHggPSBk ZWxldGluZyA/IHpkZWxldChtdGNoc1tpXSkgOiAwOworICAgICAgICAgICAgaWYgKHggPiAtMSkg eworICAgICAgICAgICAgICAgIGlmIChsaXN0aW5nKQorICAgICAgICAgICAgICAgICAgcHJpbnRm KCIgJXMgKCVzKVxuIiwgbXRjaHNbaV0sZGVsZXRpbmcgPyAiT0siIDogIlNFTEVDVEVEIik7Cisg ICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgZXJyb3JzKys7CisgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcpCisgICAgICAgICAg ICAgICAgICBwcmludGYoIiAlcyAoRkFJTEVEKVxuIiwgbXRjaHNbaV0pOworICAgICAgICAgICAg fQorI2lmZGVmIENLX1RUR1dTSVoKKyAgICAgICAgICAgIGlmIChsaXN0aW5nICYmIHBhZ2luZykK KyAgICAgICAgICAgICAgaWYgKCsrbGluZXMgPiBjbWRfcm93cyAtIDMpIHsKKyAgICAgICAgICAg ICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhwdXJnZTsgZWxzZSBsaW5lcyA9IDA7CisgICAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisgICAgICAgIH0KKyAgICAgICAg Z290byB4cHVyZ2U7CisgICAgfQorICAgIGlmIChuIDwgdG9rZWVwKSB7ICAgICAgICAgICAgICAg ICAgIC8qIE5vdCBkZWxldGluZyBhbnkgKi8KKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBp ZiAobGlzdGluZykKKyAgICAgICAgICBwcmludGYoIiBNYXRjaGVzID0gJWQ6IE5vdCBlbm91Z2gg dG8gcHVyZ2UuXG4iLG4pOworICAgICAgICBnb3RvIHhwdXJnZTsKKyAgICB9CisKKyAgICAvKiBH ZW5lcmFsIGNhc2UgLSBkZWxldGUgc29tZSBidXQgbm90IG90aGVycyAqLworCisgICAgc2hfc29y dChtdGNocyxOVUxMLG4sMCwwLGZpbGVjYXNlKTsgLyogQWxwaGFiZXRpemUgdGhlIGxpc3QgKEVT U0VOVElBTCkgKi8KKworICAgIGcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFN0YXJ0IG9mIGN1cnJlbnQgZ3JvdXAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7 ICAgICAgICAgICAvKiBHbyB0aHJ1IHNvcnRlZCBmaWxlIGxpc3QgKi8KKyAgICAgICAgeCA9IHpu ZXh0KG5hbWVidWYpOyAgICAgICAgICAgICAvKiBHZXQgbmV4dCBmaWxlICovCisgICAgICAgIGlm ICh4IDwgMSB8fCAhbmFtZWJ1ZlswXSB8fCBpID09IG4gLSAxKSAvKiBObyBtb3JlPyAqLworICAg ICAgICAgIGRvbmUgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIE5PVEU6ICdkb25lJyBtdXN0 IGJlIDAgb3IgMSBvbmx5ICovCisgICAgICAgIGlmIChmcykgaWYgKGZpbGVzZWxlY3QobmFtZWJ1 ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdV9hZnQscHVfYmVmLHB1X25hZixw dV9uYmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluc2l6ZSxtYXhzaXplLDAs OCxweGxpc3QpIDwgMSkgeworICAgICAgICAgICAgaWYgKGxpc3RpbmcgPiAwKSB7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCIgJXMgKFNLSVBQRUQpXG4iLG5hbWVidWYpOworICAgICAgICAgICAg ICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKQorICAgICAgICAgICAgICAgICAgaWYgKCFh c2ttb3JlKCkpIGdvdG8geHB1cmdlOyBlbHNlIGxpbmVzID0gMDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICh4ID4gMCkKKyAgICAg ICAgICBpZiAoKG0gPSBia3VwbnVtKG5hbWVidWYsJnopKSA8IDApIC8qIFRoaXMgZmlsZSdzIGJh Y2t1cCBudW1iZXIuICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChqID0g MDsgaiA8IHRva2VlcDsgaisrKSB7ICAvKiBJbnNlcnQgaW4gbGlzdC4gKi8KKyAgICAgICAgICAg IGlmIChtID4geHhbal0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGsgPSB0b2tlZXAgLSAxOyBr ID4gajsgay0tKQorICAgICAgICAgICAgICAgICAgeHhba10gPSB4eFtrLTFdOworICAgICAgICAg ICAgICAgIHh4W2pdID0gbTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICAvKiBOZXcgZ3JvdXA/ICovCisgICAgICAgIGlmIChkb25lIHx8 IChpID4gMCAmJiBja3N0cmNtcChuYW1lYnVmLGJhc2VidWYseiwxKSkpIHsKKyAgICAgICAgICAg IGlmIChpICsgZG9uZSAtIGcgPiB0b2tlZXApIHsgLyogRG8gd2UgaGF2ZSBlbm91Z2ggdG8gcHVy Z2U/ICovCisgICAgICAgICAgICAgICAgbWluID0geHhbdG9rZWVwLTFdOyAgICAgLyogWWVzLCBs b3dlc3QgYmFja3VwIG51bWJlciB0byBrZWVwICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEx MSwiZG9wdXJnZSBncm91cCIsYmFzZWJ1ZixtaW4pOworICAgICAgICAgICAgICAgIGZvciAoaiA9 IGc7IGogPCBpICsgZG9uZTsgaisrKSB7IC8qIEdvIHRocm91Z2ggdGhpcyBncm91cCAqLworICAg ICAgICAgICAgICAgICAgICB4ID0gYmt1cG51bShtdGNoc1tqXSwmeik7ICAgIC8qIEdldCBmaWxl IGJhY2t1cCBudW1iZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPiAwICYmIHggPCBt aW4pIHsgICAgICAvKiBCZWxvdyBtaW5pbXVtPyAqLworICAgICAgICAgICAgICAgICAgICAgICAg eCA9IGRlbGV0aW5nID8gemRlbGV0KG10Y2hzW2pdKSA6IDA7CisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoeCA8IDApIGVycm9ycysrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxp c3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICVzICglcylcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGNoc1tqXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgoeCA8IDApID8gIkVSUk9SIiA6CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGRlbGV0aW5nID8gIkRFTEVURUQiIDogIlNFTEVDVEVEIikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAg ICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0aW5nKSAvKiBO b3QgYmVsb3cgbWluaW11bSAtIGtlZXAgdGhpcyBvbmUgKi8KKyAgICAgICAgICAgICAgICAgICAg ICBwcmludGYoIiAlcyAoS0VQVClcbiIsbXRjaHNbal0pOworI2lmZGVmIENLX1RUR1dTSVoKKyAg ICAgICAgICAgICAgICAgICAgaWYgKGxpc3RpbmcgJiYgcGFnaW5nKQorICAgICAgICAgICAgICAg ICAgICAgIGlmICgrK2xpbmVzID4gY21kX3Jvd3MgLSAzKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghYXNrbW9yZSgpKSBnb3RvIHhwdXJnZTsgZWxzZSBsaW5lcyA9IDA7CisgICAg ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1RUR1dTSVogKi8KKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3RpbmcgJiYgcGFnaW5nKSB7IC8qIE5v dCBlbm91Z2ggdG8gcHVyZ2UgKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIiAlcy5+Kn4gKEtF UFQpXG4iLGJhc2VidWYpOworI2lmZGVmIENLX1RUR1dTSVoKKyAgICAgICAgICAgICAgICBpZiAo KytsaW5lcyA+IGNtZF9yb3dzIC0gMykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFza21v cmUoKSkgZ290byB4cHVyZ2U7IGVsc2UgbGluZXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyNl bmRpZiAvKiBDS19UVEdXU0laICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGog PSAwOyBqIDwgdG9rZWVwOyBqKyspIC8qIENsZWFyIHRoZSBiYWNrdXAgbnVtYmVyIGxpc3QgKi8K KyAgICAgICAgICAgICAgeHhbal0gPSAwOworICAgICAgICAgICAgZyA9IGk7ICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlc2V0IHRoZSBncm91cCBwb2ludGVyICovCisgICAgICAgIH0KKyAgICAg ICAgaWYgKGRvbmUpICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLCBkb25l LiAqLworICAgICAgICAgIGJyZWFrOworICAgICAgICBzdHJuY3B5KGJhc2VidWYsbmFtZWJ1Zix6 KTsgICAgIC8qIFNldCBiYXNlbmFtZSBvZiB0aGlzIGZpbGUgKi8KKyAgICAgICAgYmFzZWJ1Zlt6 XSA9IE5VTDsKKyAgICB9CisgIHhwdXJnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ29tbW9uIGV4aXQgcG9pbnQgKi8KKyAgICBpZiAoZ19tYXRjaGRvdCA+IC0xKSB7CisgICAg ICAgIG1hdGNoZG90ID0gZ19tYXRjaGRvdDsgICAgICAgICAgLyogUmVzdG9yZSB0aGVzZS4uLiAq LworICAgICAgICBnX21hdGNoZG90ID0gLTE7CisgICAgfQorICAgIGlmIChyYyA8IDApIHJldHVy bihyYyk7ICAgICAgICAgICAgIC8qIFBhcnNlIGVycm9yICovCisgICAgaWYgKHhfaGRnKQorICAg ICAgcHJpbnRmKCJGaWxlcyBwdXJnZWQ6ICVkJXNcbiIsCisgICAgICAgICAgICAgY291bnQsCisg ICAgICAgICAgICAgZGVsZXRpbmcgPyAiIiA6ICIgKG5vdCByZWFsbHkpIgorICAgICAgICAgICAg ICk7CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSBjb3VudCA+IDAgPyAxIDogKGVycm9ycyA+IDApID8g MCA6IDEpOworfQorI2VuZGlmIC8qIENLUFVSR0UgKi8KKworI2lmbmRlZiBOT1hGRVIKKyNpZm5k ZWYgTk9MT0NBTAoraW50Citkb3hkaXMod2hpY2gpIGludCB3aGljaDsgewkJLyogMSA9IEtlcm1p dCwgMiA9IEZUUCAqLworICAgIGV4dGVybiBpbnQgbm9sb2NhbDsKKyAgICBpbnQgeCwgeSA9IDAs IHo7CisjaWZkZWYgTkVXRlRQCisgICAgZXh0ZXJuIGludCBmdHBfZGlzOworI2VuZGlmIC8qIE5F V0ZUUCAqLworCisjaWZkZWYgQ09NTUVOVAorICAgIGNoYXIgKnM7CisjZW5kaWYgLyogQ09NTUVO VCAqLworCisgICAgaWYgKCh4ID0gY21rZXkoZmR0YWIsbmZkdGFiLCJmaWxlIHRyYW5zZmVyIGRp c3BsYXkgc3R5bGUiLCIiLAorICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAg ICAgcmV0dXJuKHgpOworI2lmZGVmIENLX1BDVF9CQVIKKyAgICBpZiAoKHkgPSBjbWtleShmZGZ0 YWIsMiwiIiwidGhlcm1vbWV0ZXIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOwor I2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKyAgICBpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVy bih6KTsKKyNpZmRlZiBDS19DVVJTRVMKKyAgICBpZiAoeCA9PSBYWUZEX0MpIHsgICAgICAgICAg ICAgICAgICAvKiBGVUxMU0NSRUVOICovCisjaWZkZWYgQ09NTUVOVAorI2lmbmRlZiBNWUNVUlNF UworICAgICAgICBleHRlcm4gY2hhciAqIHRybWJ1ZjsgICAgICAgICAgIC8qIFJlYWwgY3Vyc2Vz ICovCisgICAgICAgIGludCB6OworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisjZW5kaWYgLyogQ09N TUVOVCAqLworCisgICAgICAgIGlmIChub2xvY2FsKSAgICAgICAgICAgICAgICAgICAgLyogTm90 aGluZyB0byBkbyBpbiB0aGlzIGNhc2UgKi8KKwkgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNp ZmRlZiBDT01NRU5UCisjaWZuZGVmIE1ZQ1VSU0VTCisjaWZuZGVmIFZNUworICAgICAgICBzID0g Z2V0ZW52KCJURVJNIik7CisgICAgICAgIGRlYnVnKEYxMTAsImRveGRpcyBURVJNIixzLDApOwor ICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgZnhkaW5pdCh4KTsKKyAgICAgICAgaWYg KCpzICYmIHRybWJ1ZikgeyAgICAgICAgICAgICAvKiBEb24ndCBjYWxsIHRnZXRlbnQgKi8KKyAg ICAgICAgICAgIHogPSB0Z2V0ZW50KHRybWJ1ZixzKTsgICAgICAvKiBpZiB0cm1idWYgbm90IGFs bG9jYXRlZCAqLworICAgICAgICAgICAgZGVidWcoRjExMSwiZG94ZGlzIHRnZXRlbnQiLHMseik7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgIGRlYnVn KEYxMTAsImRveGRpcyB0Z2V0ZW50IHNraXBwZWQiLHMsMCk7CisgICAgICAgIH0KKyAgICAgICAg aWYgKHogPCAxKSB7CisgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCB0ZXJtaW5hbCB0eXBlIHVu a25vd246IFwiJXNcIlxuIixzKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworI2Vsc2UK KyAgICAgICAgZnhkaW5pdCh4KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBDS19Q Q1RfQkFSCisgICAgICAgIHRoZXJtb21ldGVyID0geTsKKyNlbmRpZiAvKiBDS19QQ1RfQkFSICov CisKKyAgICAgICAgbGluZVswXSA9ICdcMCc7ICAgICAgICAgICAgICAgICAvKiAoV2hhdCdzIHRo aXMgZm9yPykgKi8KKyAgICB9CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisgICAgaWYgKHdoaWNo ID09IDEpCQkJLyogSXQncyBPSy4gKi8KKyAgICAgIGZkaXNwbGEgPSB4OworI2lmZGVmIE5FV0ZU UAorICAgIGVsc2UgaWYgKHdoaWNoID09IDIpCisgICAgICBmdHBfZGlzID0geDsKKyNlbmRpZiAv KiBORVdGVFAgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorI2VuZGlmIC8qIE5PTE9D QUwgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworaW50CitzZXRmaWwocm1zZmxnKSBpbnQgcm1z ZmxnOyB7CisjaWZkZWYgQ09NTUVOVAorICAgIGV4dGVybiBpbnQgZW5fZGVsOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKHJtc2ZsZykgeworICAgICAgICBp ZiAoKHkgPSBjbWtleShyZmlsdGFiLG5yZmlscCwiUmVtb3RlIGZpbGUgcGFyYW1ldGVyIiwiIiwK KyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIGlm ICh5ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/UmVtb3RlIGZpbGUgcGFyYW1l dGVyIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAg ICAgfSBlbHNlIHJldHVybih5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisjZW5kaWYgLyog Tk9YRkVSICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KGZpbHRhYixuZmlscCwiRmlsZSBwYXJh bWV0ZXIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyNpZm5kZWYg Tk9YRkVSCisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHN3aXRjaCAoeSkgeworI2lm ZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vdCBuZWVkZWQgKi8KKyAg ICAgIGNhc2UgWFlGSUxCOiAgICAgICAgICAgICAgICAgICAgICAvKiBCbG9ja3NpemUgKi8KKyAg ICAgICAgaWYgKCh5ID0gY21udW0oImZpbGUgYmxvY2sgc2l6ZSIsY2tpdG9hKERCTEtTSVopLDEw LCZ6LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAg ICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIzMTEiLCBja2l0b2EoeiksICIiKTsKKyAgICAg ICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgZmJsa3NpeiA9IHo7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAg ICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgICAgY2FzZSBY WUZJTFM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJ5dGUgc2l6ZSAqLworICAgICAgICBpZiAo KHkgPSBjbW51bSgiZmlsZSBieXRlIHNpemUgKDcgb3IgOCkiLCI4IiwxMCwmeix4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh6ICE9IDcgJiYgeiAhPSA4 KSB7CisgICAgICAgICAgICBwcmludGYoIlxuP1RoZSBjaG9pY2VzIGFyZSA3IGFuZCA4XG4iKTsK KyAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHogPT0gNykgZm1hc2sgPSAwMTc3Owor ICAgICAgICBlbHNlIGlmICh6ID09IDgpIGZtYXNrID0gMDM3NzsKKyAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKworI2lmbmRlZiBOT0NTRVRTCisgICAgICBjYXNlIFhZRklMQzogeyAgICAg ICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHNldCAqLworICAgICAgICAgIGNoYXIgKiBjc2V0 bmFtZSA9IE5VTEw7CisgICAgICAgICAgZXh0ZXJuIGludAorICAgICAgICAgICAgcl9jc2V0LCBz X2NzZXQsIGFmY3NldFtdOyAgIC8qIFNFTkQgQ0hBUkFDVEVSLVNFVCBBVVRPIG9yIE1BTlVBTCAq LworCisgICAgICAgICAgc3RydWN0IEZEQiBrdywgZmw7CisgICAgICAgICAgY21mZGJpKCZrdywg ICAgICAgICAgICAgICAgICAgLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAg ICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAg ICAgICAgICAgIHJtc2ZsZyA/ICJzZXJ2ZXIgY2hhcmFjdGVyLXNldCBuYW1lIiA6ICIiLCAgLyog aGVscCAqLworICAgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1 bHQgKi8KKyAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBz dHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAgICBuZmlsYywgICAgICAgICAgICAgICAgIC8q IGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICAgICAgICAwLCAg ICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwID0ga2V5d29yZCAq LworICAgICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgIC8qIFByb2Nlc3Npbmcg ZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgZmNzdGFiLCAgICAgICAgICAgICAgICAvKiBL ZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICAgICAgIHJtc2ZsZyA/ICZmbCA6IE5VTEwgICAg LyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICApOworICAgICAgICAgIGNtZmRi aSgmZmwsICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIHRoYXQgZG9lc24ndCBtYXRjaCAq LworICAgICAgICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisg ICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogaGxwbXNnICovCisgICAg ICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAg ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICov CisgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDEgKi8KKyAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBh ZGR0bCBudW1lcmljIGRhdGEgMiAqLworICAgICAgICAgICAgICAgICB4eHN0cmluZywKKyAgICAg ICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAg ICApOworICAgICAgICAgIGlmICgoeCA9IGNtZmRiKCZrdykpIDwgMCkKKyAgICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgICBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKSB7CisgICAg ICAgICAgICAgIHggPSBjbXJlc3VsdC5ucmVzdWx0OworICAgICAgICAgICAgICBjc2V0bmFtZSA9 IGZjc2luZm9beF0ua2V5d29yZDsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBj a3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7CisgICAgICAgICAgICAg IGNzZXRuYW1lID0gbGluZTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCh6ID0gY21jZm0o KSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAg ICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMzIwIiwgY3NldG5hbWUsICIiKTsKKyAgICAgICAgICAg ICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgICAgfQorICAgICAgICAgIGZjaGFyc2V0 ID0geDsKKyAgICAgICAgICBpZiAoc19jc2V0ID09IFhNT0RFX0EpICAgICAgICAvKiBJZiBTRU5E IENIQVJBQ1RFUi1TRVQgaXMgQVVUTyAqLworICAgICAgICAgICAgaWYgKHggPiAtMSAmJiB4IDw9 IE1BWEZDU0VUUykKKyAgICAgICAgICAgICAgaWYgKGFmY3NldFt4XSA+IC0xICYmIGFmY3NldFt4 XSA8PSBNQVhUQ1NFVFMpCisgICAgICAgICAgICAgICAgdGNoYXJzZXQgPSBhZmNzZXRbeF07IC8q IFBpY2sgY29ycmVzcG9uZGluZyB4ZmVyIGNoYXJzZXQgKi8KKyAgICAgICAgICBzZXR4bGF0eXBl KHRjaGFyc2V0LGZjaGFyc2V0KTsgLyogVHJhbnNsYXRpb24gdHlwZSAqLworICAgICAgICAgIC8q IElmIEkgc2F5IFNFVCBGSUxFIENIQVJBQ1RFUi1TRVQgYmxhaCwgSSB3YW50IHRvIGJlIGJsYWgh ICovCisgICAgICAgICAgcl9jc2V0ID0gWE1PREVfTTsgICAgICAgICAgICAgLyogRG9uJ3Qgc3dp dGNoIGluY29taW5nIHNldCEgKi8KKyAgICAgICAgICB4ID0gZmNzaW5mb1tmY2hhcnNldF0uc2l6 ZTsgICAvKiBBbHNvIHNldCBkZWZhdWx0IHgtYml0IGNoYXJzZXQgKi8KKyAgICAgICAgICBpZiAo eCA9PSAxMjgpICAgICAgICAgICAgICAgICAvKiA3LWJpdC4uLiAqLworICAgICAgICAgICAgZGNz ZXQ3ID0gZmNoYXJzZXQ7CisgICAgICAgICAgZWxzZSBpZiAoeCA9PSAyNTYpICAgICAgICAgICAg LyogOC1iaXQuLi4gKi8KKyAgICAgICAgICAgIGRjc2V0OCA9IGZjaGFyc2V0OworICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisj aWZuZGVmIE5PTE9DQUwKKyAgICAgIGNhc2UgWFlGSUxEOiAgICAgICAgICAgICAgICAgICAgICAv KiBEaXNwbGF5ICovCisgICAgICAgIHJldHVybihkb3hkaXMoMSkpOwkJLyogMSA9PSBrZXJtaXQg Ki8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICAgIGNh c2UgWFlGSUxBOiAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQtb2YtbGluZSAqLworI2lmZGVm IE5MQ0hBUgorICAgICAgICBzID0gIiI7CisgICAgICAgIGlmIChOTENIQVIgPT0gMDE1KQorICAg ICAgICAgIHMgPSAiY3IiOworICAgICAgICBlbHNlIGlmIChOTENIQVIgPT0gMDEyKQorICAgICAg ICAgIHMgPSAibGYiOworICAgICAgICBpZiAoKHggPSBjbWtleShlb2x0YWIsIG5lb2x0YWIsCisg ICAgICAgICAgICAgICAgICAgICAgICJsb2NhbCB0ZXh0LWZpbGUgbGluZSB0ZXJtaW5hdG9yIixz LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyNlbHNlCisgICAgICAgIGlm ICgoeCA9IGNta2V5KGVvbHRhYiwgbmVvbHRhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgImxv Y2FsIHRleHQtZmlsZSBsaW5lIHRlcm1pbmF0b3IiLCJjcmxmIix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICByZXR1cm4oeCk7CisjZW5kaWYgLyogTkxDSEFSICovCisgICAgICAgIGlmICgoeiA9 IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworICAgICAgICBmZW9sID0gKENIQVIpIHg7CisgICAg ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFhZ RklMTjogICAgICAgICAgICAgICAgICAgICAgLyogTmFtZXMgKi8KKyAgICAgICAgaWYgKCh4ID0g Y21rZXkoZm50YWIsbmZudGFiLCJob3cgdG8gaGFuZGxlIGZpbGVuYW1lcyIsImNvbnZlcnRlZCIs CisgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAg IGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIzMDEiLCBj a2l0b2EoMSAtIHgpLCAiIik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLmZuY24gPSB4OyAgICAv KiBTZXQgc3RydWN0dXJlICovCisgICAgICAgICAgICBmbmNudiA9IHg7ICAgICAgICAgICAgICAg ICAgLyogU2V0IHZhcmlhYmxlICovCisgICAgICAgICAgICBmX3NhdmUgPSB4OyAgICAgICAgICAg ICAgICAgLyogQW5kIHNldCAicGVybWFuZW50IiB2YXJpYWJsZSAqLworICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgfQorCisgICAgICBjYXNlIFhZRklMUjogICAgICAg ICAgICAgICAgICAgICAgLyogUmVjb3JkIGxlbmd0aCAqLworICAgICAgICBpZiAoKHkgPSBjbW51 bSgiZmlsZSByZWNvcmQgbGVuZ3RoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKERM UkVDTCksMTAsJnoseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKHJtc2ZsZykg eworICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjMxMiIsIGNraXRvYSh6KSwgIiIp OworICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBmcmVjbCA9IHo7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor ICAgICAgICB9CisKKyNpZmRlZiBDT01NRU5UCisgICAgICBjYXNlIFhZRklMTzogICAgICAgICAg ICAgICAgICAgICAgLyogT3JnYW5pemF0aW9uICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KGZv cmd0YWIsbmZvcmcsImZpbGUgb3JnYW5pemF0aW9uIiwic2VxdWVudGlhbCIsCisgICAgICAgICAg ICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmIChybXNmbGcp IHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIzMTQiLCBja2l0b2EoeCksICIi KTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgZm9yZyA9IHg7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor ICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQ09NTUVOVCAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm90IG5lZWRlZCAqLworICAgICAgY2FzZSBYWUZJTEY6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEZvcm1hdCAqLworICAgICAgICBpZiAoKHggPSBjbWtleShm cmVjdGFiLG5mcmVjLCJmaWxlIHJlY29yZCBmb3JtYXQiLCJzdHJlYW0iLAorICAgICAgICAgICAg ICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg IGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAocm1zZmxnKSB7 CisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMzEzIiwgY2tpdG9hKHgpLCAiIik7 CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGZyZWNmbSA9IHg7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOwor ICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQ09NTUVOVAorICAgICAg Y2FzZSBYWUZJTFA6ICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50ZXIgY2FycmlhZ2UgY29u dHJvbCAqLworICAgICAgICBpZiAoKHggPSBjbWtleShmY2N0YWIsbmZjYywiZmlsZSBjYXJyaWFn ZSBjb250cm9sIiwibmV3bGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7CisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0ZSA9 IHNldGdlbignUycsICIzMTUiLCBja2l0b2EoeCksICIiKTsKKyAgICAgICAgICAgIHJldHVybigo aW50KSBzc3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmNjdHJsID0geDsK KyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBD T01NRU5UICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICAgIGNhc2UgWFlGSUxUOiAgICAg ICAgICAgICAgICAgICAgICAvKiBUeXBlICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KHJtc2Zs ZyA/IHJmdHRhYiAgOiBmdHRhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgcm1zZmxnID8gbnJm dHR5cCA6IG5mdHR5cCwKKyAgICAgICAgICAgICAgICAgICAgICAgInR5cGUgb2YgZmlsZSB0cmFu c2ZlciIsInRleHQiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKworI2lm ZGVmIFZNUworICAgICAgICAvKiBBbGxvdyBWTVMgdXNlcnMgdG8gY2hvb3NlIHJlY29yZCBmb3Jt YXQgZm9yIGJpbmFyeSBmaWxlcyAqLworICAgICAgICBpZiAoKHggPT0gWFlGVF9CKSAmJiAocm1z ZmxnID09IDApKSB7CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShmYnRhYixuZmJ0eXAsIlZN UyByZWNvcmQgZm9ybWF0IiwiZml4ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorI2VuZGlm IC8qIFZNUyAqLworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgYmluYXJ5ID0geDsKKyAgICAgICAgYl9zYXZlID0geDsKKyNpZmRlZiBNQUMKKyAgICAg ICAgKHZvaWQpIG1hY19zZXRmaWxkZmxnKGJpbmFyeSk7CisjZW5kaWYgLyogTUFDICovCisjaWZu ZGVmIE5PWEZFUgorICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICAvKiBBbGxvdyBm b3IgTEFCRUxFRCBpbiBWTVMgJiBPUy8yICovCisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4o J1MnLCAiMzAwIiwgY2tpdG9hKHgpLCAiIik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0 YXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisjaWZuZGVmIE5PWEZFUgorICAgICAgICB9CisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgICBjYXNlIFhZRklMWDogICAgICAg ICAgICAgICAgICAgICAgLyogQ29sbGlzaW9uIEFjdGlvbiAqLworICAgICAgICBpZiAoKHggPSBj bWtleShjb2x4dGFiLG5jb2x4LCJGaWxlbmFtZSBjb2xsaXNpb24gYWN0aW9uIiwiYmFja3VwIiwK KyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBD S19MT0dJTgorICAgICAgICBpZiAoaXNndWVzdCkgeworICAgICAgICAgICAgLyogRG9uJ3QgbGV0 IGd1ZXN0cyBjaGFuZ2UgZXhpc3RpbmcgZmlsZXMgKi8KKyAgICAgICAgICAgIHByaW50ZigiP1Ro aXMgY29tbWFuZCBub3QgdmFsaWQgZm9yIGd1ZXN0c1xuIik7CisgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNpZmRlZiBDT01NRU5UCisg ICAgICAgIC8qIE5vdCBhcHByb3ByaWF0ZSAtIERJU0FCTEUgREVMRVRFIG9ubHkgcmVmZXJzIHRv IHNlcnZlciAqLworICAgICAgICBpZiAoKHggPT0gWFlGWF9YIHx8IHggPT0gWFlGWF9CIHx8IHgg PT0gWFlGWF9VIHx8IHggPT0gWFlGWF9BKSAmJgorICAgICAgICAgICAgKCFFTkFCTEVEKGVuX2Rl bCkpKSB7CisgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgZmlsZSBkZWxldGlvbiBpcyBkaXNh YmxlZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgZm5jYWN0ID0geDsKKyAgICAgICAgcHRhYltwcm90b2NvbF0u Zm5jYSA9IHg7CisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNl dGdlbignUycsICIzMDIiLCBja2l0b2EoZm5jYWN0KSwgIiIpOworICAgICAgICAgICAgcmV0dXJu KChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZm5jYWN0 ID09IFhZRlhfUikgY2t3YXJuID0gMTsgLyogRklMRSBXQVJOSU5HIGltcGxpY2F0aW9ucyAqLwor ICAgICAgICAgICAgaWYgKGZuY2FjdCA9PSBYWUZYX1gpIGNrd2FybiA9IDA7IC8qIC4uLiAqLwor ICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgfQorCisgICAgICBjYXNl IFhZRklMVzogICAgICAgICAgICAgICAgICAgICAgLyogV2FybmluZy9Xcml0ZS1Qcm90ZWN0ICov CisgICAgICAgIGlmICgoeCA9IHNldG9uKCZja3dhcm4pKSA8IDApIHJldHVybih4KTsKKyAgICAg ICAgaWYgKGNrd2FybikKKyAgICAgICAgICBmbmNhY3QgPSBYWUZYX1I7CisgICAgICAgIGVsc2UK KyAgICAgICAgICBmbmNhY3QgPSBYWUZYX1g7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 CisKKyNpZmRlZiBDS19MQUJFTEVECisgICAgICBjYXNlIFhZRklMTDogICAgICAgICAgICAgICAg ICAgICAgLyogTEFCRUxFRCBGSUxFIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgaWYgKCh4ID0gY21r ZXkobGJsdGFiLG5sYmxwLCJMYWJlbGVkIGZpbGUgZmVhdHVyZSIsIiIsCisgICAgICAgICAgICAg ICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg aWYgKChzdWNjZXNzID0gc2V0b24oJnkpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mp OworICAgICAgICBpZiAoeSkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBvciByZXNl dCB0aGUgc2VsZWN0ZWQgYml0ICovCisgICAgICAgICAgbGZfb3B0cyB8PSB4OyAgICAgICAgICAg ICAgICAgLyogaW4gdGhlIG9wdGlvbnMgYml0bWFzay4gKi8KKyAgICAgICAgZWxzZQorICAgICAg ICAgIGxmX29wdHMgJj0gfng7CisgICAgICAgIHJldHVybihzdWNjZXNzKTsKKyNlbmRpZiAvKiBD S19MQUJFTEVEICovCisKKyAgICAgIGNhc2UgWFlGSUxJOiB7ICAgICAgICAgICAgICAgICAgICAv KiBJTkNPTVBMRVRFICovCisgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgaWZkYXRhYltd OworICAgICAgICAgIGV4dGVybiBpbnQga2VlcDsKKyAgICAgICAgICBpZiAoKHkgPSBjbWtleShp ZmRhdGFiLDMsIiIsImF1dG8iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKHJtc2ZsZykg eworICAgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIjMxMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID09IDAg PyAiMCIgOiAoeSA9PSAxID8gIjEiIDogIjIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICBy ZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICBr ZWVwID0geTsKKyAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICB9 CisgICAgICB9CisKKyNpZmRlZiBDS19UTVBESVIKKyAgICAgIGNhc2UgWFlGSUxHOiB7ICAgICAg ICAgICAgICAgICAgICAvKiBEb3dubG9hZCBkaXJlY3RvcnkgKi8KKyAgICAgICAgICBpbnQgeDsK KyAgICAgICAgICBjaGFyICpzOworI2lmZGVmIFpGTlFGUAorICAgICAgICAgIHN0cnVjdCB6Zm5m cCAqIGZucDsKKyNlbmRpZiAvKiBaRk5RRlAgKi8KKyNpZmRlZiBNQUMKKyAgICAgICAgICBjaGFy IHRlbXBbMzRdOworI2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgR0VNRE9TCisgICAgICAgICAg aWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgbG9jYWwgZGlyZWN0b3J5LCBvciBjYXJyaWFnZSByZXR1 cm4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICIiLCZzLAorICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwpKSA8IDAgKSB7CisgICAgICAgICAgICAgIGlmICh4ICE9IC0zKQorICAgICAg ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICB9CisjZWxzZQorI2lmZGVmIE9TMgorICAg ICAgICAgIGlmICgoeCA9IGNtZGlyKCJOYW1lIG9mIFBDIGRpc2sgYW5kL29yIGRpcmVjdG9yeSxc blwKKyAgICAgICBvciBwcmVzcyB0aGUgRW50ZXIga2V5IHRvIHVzZSBjdXJyZW50IGRpcmVjdG9y eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDAgKSB7Cisg ICAgICAgICAgICAgIGlmICh4ICE9IC0zKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAg ICAgICAgICB9CisjZWxzZQorI2lmZGVmIE1BQworICAgICAgICAgIHggPSBja3N0cm5jcHkodGVt cCx6aG9tZSgpLDMyKTsKKyAgICAgICAgICBpZiAoeCA+IDApIGlmICh0ZW1wW3gtMV0gIT0gJzon KSB7IHRlbXBbeF0gPSAnOic7IHRlbXBbeCsxXSA9IE5VTDsgfQorICAgICAgICAgIGlmICgoeCA9 IGNtdHh0KCJOYW1lIG9mIE1hY2ludG9zaCB2b2x1bWUgYW5kL29yIGZvbGRlcixcblwKKyBvciBw cmVzcyB0aGUgUmV0dXJuIGtleSBmb3IgdGhlIGRlc2t0b3Agb24gdGhlIGJvb3QgZGlzayIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCwmcywgeHhzdHJpbmcpKSA8IDAgKQorICAgICAg ICAgICAgcmV0dXJuKHgpOworI2Vsc2UKKyAgICAgICAgICBpZiAoKHggPSBjbWRpcigiTmFtZSBv ZiBsb2NhbCBkaXJlY3RvcnksIG9yIGNhcnJpYWdlIHJldHVybiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIiIsICZzLCB4eHN0cmluZykpIDwgMCApIHsKKyAgICAgICAgICAgICAgaWYgKHgg IT0gLTMpCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIH0KKyNlbmRpZiAv KiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKyAgICAgICAg ICBkZWJ1ZyhGMTEwLCJkb3dubG9hZCBkaXIiLHMsMCk7CisKKyNpZm5kZWYgTUFDCisgICAgICAg ICAgaWYgKHggPT0gMikgeworICAgICAgICAgICAgICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFs bG93ZWQgaW4gZGlyZWN0b3J5IG5hbWVcbiIpOworICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgIH0KKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmZGVmIFpGTlFGUAorICAgICAgICAg IGlmICgoZm5wID0gemZucWZwKHMsVE1QQlVGU0laIC0gMSx0bXBidWYpKSkgeworICAgICAgICAg ICAgICBpZiAoZm5wLT5mcGF0aCkKKyAgICAgICAgICAgICAgICBpZiAoKGludCkgc3RybGVuKGZu cC0+ZnBhdGgpID4gMCkKKyAgICAgICAgICAgICAgICAgIHMgPSBmbnAtPmZwYXRoOworICAgICAg ICAgIH0KKyAgICAgICAgICBkZWJ1ZyhGMTEwLCJkb3dubG9hZCB6Zm5xZnAiLHMsMCk7CisjZW5k aWYgLyogWkZOUUZQICovCisKKyAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 ICAvKiBNYWtlIGEgc2FmZSBjb3B5ICovCisjaWZuZGVmIE1BQworICAgICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgICAgICAgIC8qIEdldCBjb25maXJtYXRpb24gKi8KKyAgICAgICAgICAg IHJldHVybih4KTsKKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmZGVmIENLX0xPR0lOCisgICAgICAg IGlmIChpc2d1ZXN0KSB7CisgICAgICAgICAgICAvKiBEb24ndCBsZXQgZ3Vlc3RzIGNoYW5nZSBl eGlzdGluZyBmaWxlcyAqLworICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBjb21tYW5kIG5vdCB2 YWxpZCBmb3IgZ3Vlc3RzXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0K KyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgICAgICAgIHggPSBzdHJsZW4ocyk7CisKKyAgICAg ICAgICBpZiAoeCkgeworI2lmZGVmIGRhdGFnZW5lcmFsCQkJLyogQU9TL1ZTICovCisgICAgICAg ICAgICAgIGlmIChzW3gtMV0gPT0gJzonKSAgICAgICAgLyogaG9tZGlyIGVuZHMgaW4gY29sb24s ICovCisgICAgICAgICAgICAgICAgc1t4LTFdID0gTlVMOyAgICAgICAgICAgLyogYW5kICJkaXIi IGRvZXNuJ3QgbGlrZSB0aGF0Li4uICovCisjZWxzZQorI2lmZGVmIE9TMk9SVU5JWAkJCS8qIFVu aXggb3IgSy05NS4uLiAqLworCSAgICAgIGlmICgoeCA8IChMSU5CVUZTSVogLSAyKSkgJiYgLyog QWRkIHRyYWlsaW5nIGRpcnNlcCAqLworCQkgIChzW3gtMV0gIT0gJy8nKSkgewkvKiBpZiBub25l IHByZXNlbnQuICAqLworCQkgIHNbeF0gPSAnLyc7CQkvKiBOb3RlIHRoYXQgV2luZG93cyBwYXRo IGhhcyAqLworCQkgIHNbeCsxXSA9IE5VTDsJCS8qIGJlZW4gY2Fub25pY2FsaXplZCB0byBmb3J3 YXJkICovCisJICAgICAgfSAgICAgICAgICAgICAgICAJCS8qIHNsYXNoZXMgYXQgdGhpcyBwb2lu dC4gKi8KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwor ICAgICAgICAgICAgICBtYWtlc3RyKCZkbGRpcixzKTsKKyAgICAgICAgICB9IGVsc2UKKyAgICAg ICAgICAgIG1ha2VzdHIoJmRsZGlyLE5VTEwpOyAgICAgICAvKiBkbGRpciBpcyBOVUxMIHdoZW4g bm90IGFzc2lnbmVkICovCisKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAg fQorI2VuZGlmIC8qIENLX1RNUERJUiAqLworICAgICAgY2FzZSBYWUZJTFk6CisgICAgICAgIHJl dHVybihzZXRkZXN0KCkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tfQ1RSTFoK KyAgICAgIGNhc2UgWFlGSUxWOiB7ICAgICAgICAgICAgICAgICAgICAvKiBFT0YgKi8KKyAgICAg ICAgICBleHRlcm4gaW50IGVvZm1ldGhvZDsKKyAgICAgICAgICBpZiAoKHggPSBjbWtleShlb2Z0 YWIsMywiZW5kLW9mLWZpbGUgZGV0ZWN0aW9uIG1ldGhvZCIsIiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAg ICAgIGVvZm1ldGhvZCA9IHg7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAg IH0KKyNlbmRpZiAvKiBDS19DVFJMWiAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIFVOSVgK KyAgICAgIGNhc2UgWFlGSUxIOiB7ICAgICAgICAgICAgICAgICAgICAvKiBPVVRQVVQgKi8KKyAg ICAgICAgICBleHRlcm4gaW50IHpvZmJ1ZmZlciwgem9idWZzaXplLCB6b2ZibG9jazsKKyNpZmRl ZiBEWU5BTUlDCisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiB6b3V0YnVmZmVyOworI2VuZGlmIC8q IERZTkFNSUMgKi8KKworICAgICAgICAgIGlmICgoeCA9IGNta2V5KHpvZnRhYixuem9mdGFiLCJv dXRwdXQgZmlsZSB3cml0aW5nIG1ldGhvZCIsIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKHgg PT0gWk9GX0JVRiB8fCB4ID09IFpPRl9OQlVGKSB7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNt bnVtKCJvdXRwdXQgYnVmZmVyIHNpemUiLCIzMjc2OCIsMTAsJnoseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgICBpZiAoeiA8IDEpIHsKKyAg ICAgICAgICAgICAgICAgIHByaW50ZigiP0JhZCBzaXplIC0gJWRcbiIsIHopOworICAgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICBzd2l0Y2gg KHgpIHsKKyAgICAgICAgICAgIGNhc2UgWk9GX0JVRjoKKyAgICAgICAgICAgIGNhc2UgWk9GX05C VUY6CisgICAgICAgICAgICAgIHpvZmJ1ZmZlciA9ICh4ID09IFpPRl9CVUYpOworICAgICAgICAg ICAgICB6b2J1ZnNpemUgPSB6OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh c2UgWk9GX0JMSzoKKyAgICAgICAgICAgIGNhc2UgWk9GX05CTEs6CisgICAgICAgICAgICAgIHpv ZmJsb2NrID0gKHggPT0gWk9GX0JMSyk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IH0KKyNpZmRlZiBEWU5BTUlDCisgICAgICAgICAgaWYgKHpvdXRidWZmZXIpIGZyZWUoem91dGJ1 ZmZlcik7CisgICAgICAgICAgaWYgKCEoem91dGJ1ZmZlciA9IChjaGFyICopbWFsbG9jKHopKSkg eworICAgICAgICAgICAgICBwcmludGYoIk1FTU9SWSBBTExPQ0FUSU9OIEVSUk9SIC0gRkFUQUxc biIpOworICAgICAgICAgICAgICBkb2V4aXQoQkFEX0VYSVQsLTEpOworICAgICAgICAgIH0gZWxz ZQorICAgICAgICAgICAgem9idWZzaXplID0gejsKKyNlbHNlCisgICAgICAgICAgaWYgKHogPD0g T0JVRlNJWkUpIHsKKyAgICAgICAgICAgICAgem9idWZzaXplID0gejsKKyAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgJWQgaXMgdG9vIGJpZyAtICVkIGlz IHRoZSBtYXhpbXVtXG4iLHosT0JVRlNJWkUpOworICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgIH0KKyNlbmRpZiAvKiBEWU5BTUlDICovCisgICAgICAgICAgcmV0dXJuKHN1Y2Nl c3MgPSAxKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBVTklYICovCisKKyNpZmRlZiBQQVRURVJOUwor ICAgICAgY2FzZSBYWUZJQlA6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJJTkFSWS1QQVRURVJO ICovCisgICAgICBjYXNlIFhZRklUUDogeyAgICAgICAgICAgICAgICAgICAgLyogVEVYVC1QQVRU RVJOICovCisgICAgICAgICAgY2hhciAqIHRtcFtGVFBBVFRFUk5TXTsKKyAgICAgICAgICBpbnQg aSwgbiA9IDA7CisgICAgICAgICAgd2hpbGUgKG4gPCBGVFBBVFRFUk5TKSB7CisgICAgICAgICAg ICAgIHRtcFtuXSA9IE5VTEw7CisgICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJQYXR0ZXJu IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgICAgICAgICAgICBzID0gYnJz dHJpcChsaW5lKTsKKyAgICAgICAgICAgICAgbWFrZXN0cigmKHRtcFtuKytdKSxzKTsKKyAgICAg ICAgICB9CisgICAgICAgICAgaWYgKHggPT0gLTMpIHggPSBjbWNmbSgpOworICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPD0gbjsgaSsrKSB7CisgICAgICAgICAgICAgIGlmICh4ID4gLTEpIHsKKyAg ICAgICAgICAgICAgICAgIGlmICh5ID09IFhZRklCUCkKKyAgICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmKGJpbnBhdHRlcm5zW2ldKSx0bXBbaV0pOworICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHRtcFtpXSk7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZnJlZSh0bXBbaV0pOworICAgICAgICAgIH0K KyAgICAgICAgICBpZiAoeSA9PSBYWUZJQlApICAgICAgICAgICAgICAvKiBOdWxsLXRlcm1pbmF0 ZSB0aGUgbGlzdCAqLworICAgICAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxOVUxM KTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0p LE5VTEwpOworICAgICAgICAgIHJldHVybih4KTsKKyAgICAgIH0KKworICAgICAgY2FzZSBYWUZJ UEE6ICAgICAgICAgICAgICAgICAgICAgIC8qIFBBVFRFUk5TICovCisgICAgICAgIGlmICgoeCA9 IHNldG9uYXV0KCZwYXR0ZXJucykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworI2lmZGVmIFVOSUNPREUKKyAgICAgIGNhc2UgWFlGSUxVOiB7ICAgICAgICAg ICAgICAgICAgICAvKiBVQ1MgKi8KKyAgICAgICAgICBleHRlcm4gaW50IHVjc29yZGVyLCB1Y3Ni b20sIGJ5dGVvcmRlcjsKKyAgICAgICAgICBpZiAoKHggPSBjbWtleSh1Y3N0YWIsbnVjc3RhYiwi IiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBz d2l0Y2ggKHgpIHsKKyAgICAgICAgICAgIGNhc2UgVUNTX0JZVDoKKyAgICAgICAgICAgICAgaWYg KCh5ID0gY21rZXkoYm90YWIsbmJvdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Qnl0ZSBvcmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVvcmRlciA/ICJs aXR0bGUtZW5kaWFuIiA6ICJiaWctZW5kaWFuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAg ICAgICAgICkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAg aWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAg ICAgICAgICAgdWNzb3JkZXIgPSB5OworICAgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEp OworICAgICAgICAgICAgY2FzZSBVQ1NfQk9NOgorICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtl eShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAg ICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICB1Y3Nib20gPSB5OworICAgICAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg cmV0dXJuKC0yKTsKKyAgICAgICAgICB9CisgICAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLwor CisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgICBjYXNlIFhZRl9JTlNQOiB7ICAgICAgICAgICAg ICAgICAgLyogU0NBTiAoSU5TUEVDVElPTikgKi8KKyAgICAgICAgICBleHRlcm4gaW50IGZpbGVw ZWVrLCBuc2NhbmZpbGU7CisgICAgICAgICAgaWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24i LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICh5 KSB7CisgICAgICAgICAgICAgIGlmICgoeSA9IGNtbnVtKCJIb3cgbXVjaCB0byBzY2FuIixja2l0 b2EoU0NBTkZJTEVCVUYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCwmeix4eHN0 cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgfQorICAg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih5KTsKKyNp ZmRlZiBWTVMKKyAgICAgICAgICBmaWxlcGVlayA9IDA7CisgICAgICAgICAgbnNjYW5maWxlID0g MDsKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2Vsc2UKKyAgICAgICAgICBmaWxl cGVlayA9IHg7CisgICAgICAgICAgbnNjYW5maWxlID0gejsKKyAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworI2VuZGlmIC8qIFZNUyAqLworICAgICAgfQorI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCisKKyAgICAgIGNhc2UgWFlGX0RGTFQ6CisgICAgICAgIHkgPSAwOworI2lmbmRlZiBO T0NTRVRTCisgICAgICAgIGlmICgoeSA9IGNta2V5KGZkZmx0YWIsbmZkZmx0LCIiLCIiLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHkgPT0gNyB8fCB5 ID09IDgpIHsKKyAgICAgICAgICAgIGlmICh5ID09IDcpCisgICAgICAgICAgICAgIHMgPSBmY3Np bmZvW2Rjc2V0N10ua2V5d29yZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcyA9 IGZjc2luZm9bZGNzZXQ4XS5rZXl3b3JkOworICAgICAgICAgICAgaWYgKCh4ID0gY21rZXkoZmNz dGFiLG5maWxjLCJjaGFyYWN0ZXItc2V0IixzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY3B5KGxpbmUsZmNzaW5mb1t4 XS5rZXl3b3JkLExJTkJVRlNJWik7CisgICAgICAgIHMgPSBsaW5lOworI2VuZGlmIC8qIE5PQ1NF VFMgKi8KKyAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih6 KTsKKyAgICAgICAgc3dpdGNoICh5KSB7CisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgICAgICBjYXNl IDc6CisgICAgICAgICAgICBpZiAoZmNzaW5mb1t4XS5zaXplICE9IDEyOCkgeworICAgICAgICAg ICAgICAgIHByaW50ZigiJXMgLSBOb3QgYSA3LWJpdCBzZXRcbiIscyk7CisgICAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRjc2V0NyA9IHg7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBpZiAoZmNz aW5mb1t4XS5zaXplICE9IDI1NikgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBOb3Qg YW4gOC1iaXQgc2V0XG4iLHMpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBkY3NldDggPSB4OworICAgICAgICAgICAgYnJlYWs7CisjZW5k aWYgLyogTk9DU0VUUyAqLworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4o LTIpOworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZm5kZWYg Tk9YRkVSCisgICAgICBjYXNlIDk5OTc6ICAgICAgICAgICAgICAgICAgICAgICAgLyogRkFTVExP T0tVUFMgKi8KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBzZXRvbigmc3RhdGhhY2spKTsKKyNl bmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIFVOSVgKKyNpZmRlZiBEWU5BTUlDCisgICAgICBj YXNlIFhZRl9MU0laOiB7ICAgICAgICAgICAgICAgICAgLyogTElTVFNJWkUgKi8KKyAgICAgICAg ICBpbnQgeno7CisgICAgICAgICAgeSA9IGNtbnVtKCJNYXhpbXVtIG51bWJlciBvZiBmaWxlbmFt ZXMiLCIiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgICBpZiAoKHggPSBzZXRudW0oJnp6LHgs eSwtMSkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBpZiAoenNldGZp bCh6eiwzKSA8IDApIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCI/TWVtb3J5IGFsbG9jYXRpb24g ZmFpbHVyZVxuIik7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgfQorICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisgICAgICBjYXNlIFhZRl9TU1BB OiB7ICAgICAgICAgICAgICAgICAgLyogU1RSSU5HU1BBQ0UgKi8KKyAgICAgICAgICBpbnQgeno7 CisgICAgICAgICAgeSA9IGNtbnVtKCJOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgZmlsZW5hbWUg bGlzdCIsCisgICAgICAgICAgICAgICAgICAgICIiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAg ICBpZiAoKHggPSBzZXRudW0oJnp6LHgseSwtMSkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICBpZiAoenNldGZpbCh6eiwxKSA8IDApIHsKKyAgICAgICAgICAgICAgcHJp bnRmKCI/TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisgICAgICAgICAgICAgIHJldHVy bigtOSk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICB9CisKKyNlbmRpZiAvKiBEWU5BTUlDICovCisjZW5kaWYgLyogVU5JWCAqLworCisgICAgICBk ZWZhdWx0OgorICAgICAgICBwcmludGYoIj91bmV4cGVjdGVkIGZpbGUgcGFyYW1ldGVyXG4iKTsK KyAgICAgICAgcmV0dXJuKC0yKTsKKyAgICB9Cit9CisKKyNpZmRlZiBVTklYCisjaWZuZGVmIE5P UFVURU5WCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgTlBVVEVOVlMgNDA5NgorI2Vsc2UKKyNk ZWZpbmUgTlBVVEVOVlMgMTI4CisjZW5kaWYJLyogQklHQlVGT0sgKi8KKy8qIGVudmlyb25tZW50 IHZhcmlhYmxlcyBtdXN0IGJlIHN0YXRpYywgbm90IGF1dG9tYXRpYyAqLworCitzdGF0aWMgY2hh ciAqIHB1dGVudnNbTlBVVEVOVlNdOwkvKiBBcnJheSBvZiBlbnZpcm9ubWVudCB2YXIgc3RyaW5n cyAqLworc3RhdGljIGludCBucHV0ZW52cyA9IC0xOwkJLyogUG9pbnRlciBpbnRvIGFycmF5ICov CisvKgorICBJZiBhbnlvbmUgZXZlciBub3RpY2VzIHRoZSBsaW1pdGF0aW9uIG9uIHRoZSBudW1i ZXIgb2YgUFVURU5WcywgdGhlIGxpc3QKKyAgY2FuIGJlIG1hZGUgZHluYW1pYywgd2UgY2FuIHJl Y3ljbGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUsIGV0Yy4KKyovCitpbnQKK2RvcHV0ZW52 KHMxLCBzMikgY2hhciAqIHMxOyBjaGFyICogczI7IHsKKyAgICBjaGFyICogcywgKiB0ID0gdG1w YnVmOwkJLyogQ3JlYXRlIG9yIGFsdGVyIGVudmlyb25tZW50IHZhciAqLworCisgICAgaWYgKG5w dXRlbnZzID09IC0xKSB7CQkvKiBUYWJsZSBub3QgdXNlZCB5ZXQgKi8KKwlpbnQgaTsJCQkJLyog SW5pdGlhbGl6ZSB0aGUgcG9pbnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlBVVEVOVlM7IGkr KykKKwkgIHB1dGVudnNbaV0gPSBOVUxMOworCW5wdXRlbnZzID0gMDsKKyAgICB9CisgICAgaWYg KCFzMSkgcmV0dXJuKDEpOwkJCS8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICBpZiAoISpzMSkgcmV0 dXJuKDEpOwkJLyogZGl0dG8gKi8KKworICAgIGlmIChja2luZGV4KCI9IixzMSwwLDAsMCkpIHsJ LyogRG9lcyB0aGUgbmFtZSBjb250YWluIGFuICc9Jz8gKi8KKwlwcmludGYoCQkJCS8qIHB1dGVu digpIGRvZXMgbm90IGFsbG93IHRoaXMuICovCisJIC8qIFRoaXMgYWxzbyBjYXRjaGVzIHRoZSAn cHV0ZW52IG5hbWU9dmFsdWUnIGNhc2UgKi8KKyAgICAgICAgICI/UFVURU5WIC0gRXF1YWwgc2ln biBpbiB2YXJpYWJsZSBuYW1lIC0gJ2hlbHAgcHV0ZW52JyBmb3IgaW5mby5cbiIpOworICAgICAg ICByZXR1cm4oLTkpOworICAgIH0KKyAgICBucHV0ZW52cysrOwkJCQkvKiBQb2ludCB0byBuZXh0 IGZyZWUgc3RyaW5nICovCisKKyAgICBkZWJ1ZyhGMTExLCJkb3B1dGVudiBzMSIsczEsbnB1dGVu dnMpOworICAgIGRlYnVnKEYxMTEsImRvcHV0ZW52IHMyIixzMixucHV0ZW52cyk7CisKKyAgICBp ZiAobnB1dGVudnMgPiBOUFVURU5WUyAtIDEpIHsJLyogTm90aWNlIHRoZSBlbmQgKi8KKwlwcmlu dGYoIj9QVVRFTlYgLSBzdGF0aWMgYnVmZmVyIHNwYWNlIGV4aGF1c3RlZFxuIik7CisJcmV0dXJu KC05KTsKKyAgICB9CisgICAgLyogUXVvdGVzIGFyZSBub3QgbmVlZGVkIGJ1dCB3ZSBhbGxvdyB0 aGVtIGZvciBmYW1pbGlhcml0eSAqLworICAgIC8qIGJ1dCB0aGVuIHdlIHN0cmlwIHRoZW0sIHNv IHN5bnRheCBpcyBzYW1lIGFzIGZvciBVbml4IHNoZWxsICovCisKKyAgICBpZiAoczIpIHsKKwlz MiA9IGJyc3RyaXAoczIpOworICAgIH0gZWxzZSB7CisJczIgPSAoY2hhciAqKSIiOworICAgIH0K KyAgICBja21ha21zZyh0LFRNUEJVRlNJWixzMSwiPSIsczIsTlVMTCk7CisgICAgZGVidWcoRjEx MSwiZG9wdXRlbnYiLHQsbnB1dGVudnMpOworICAgIChWT0lEKSBtYWtlc3RyKCYocHV0ZW52c1tu cHV0ZW52c10pLHQpOyAvKiBNYWtlIGEgc2FmZSBwZXJtYW5hbmVudCBjb3B5ICovCisgICAgaWYg KCFwdXRlbnZzW25wdXRlbnZzXSkgeworCXByaW50ZigiP1BVVEVOViAtIG1lbW9yeSBhbGxvY2F0 aW9uIGZhaWx1cmVcbiIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmIChwdXRlbnYocHV0 ZW52c1tucHV0ZW52c10pKSB7CisJcHJpbnRmKCI/UFVURU5WIC0gJXNcbiIsY2tfZXJyc3RyKCkp OworCXJldHVybigtOSk7CisgICAgfSBlbHNlIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisjZW5k aWYJLyogTk9QVVRFTlYgKi8KKyNlbmRpZgkvKiBVTklYICovCisKK2ludAorc2V0dHJtdHlwKCkg eworI2lmZGVmIE9TMgorI2lmZGVmIFROQ09ERQorICAgIGV4dGVybiBpbnQgdHRudW07ICAgICAg ICAgICAgICAgICAgICAvKiBMYXN0IFRlbG5ldCBUZXJtaW5hbCBUeXBlIHNlbnQgKi8KKyAgICBl eHRlcm4gaW50IHR0bnVtZW5kOyAgICAgICAgICAgICAgICAgLyogSGFzIGVuZCBvZiBsaXN0IGJl ZW4gZm91bmQgKi8KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICBpZiAoKHggPSBjbWtleSh0dHlw dGFiLG50dHlwLCIiLCJ2dDIyMCIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7Cisg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworICAgIHNldHRlcm10 eXBlKHgsMSk7CisjaWZkZWYgVE5DT0RFCisgICAgLyogU28gd2Ugc2VuZCB0aGUgY29ycmVjdCB0 ZXJtaW5hbCBuYW1lIHRvIHRoZSBob3N0IGlmIGl0IGFza3MgZm9yIGl0ICovCisgICAgdHRudW0g PSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGFzdCBUZWxuZXQgVGVybWluYWwgVHlw ZSBzZW50ICovCisgICAgdHRudW1lbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogZW5k IG9mIGxpc3Qgbm90IGZvdW5kICovCisjZW5kaWYgLyogVE5DT0RFICovCisgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyNlbHNlICAvKiBOb3QgT1MyICovCisjaWZkZWYgVU5JWAorICAgIGV4dGVy biBpbnQgZnhkX2luaXRlZDsKKyAgICB4ID0gY210eHQoIlRlcm1pbmFsIHR5cGUgbmFtZSwgY2Fz ZSBzZW5zaXRpdmUiLCIiLCZzLE5VTEwpOworI2lmZGVmIE5PUFVURU5WCisgICAgc3VjY2VzcyA9 IDE7CisjZWxzZQorICAgIHN1Y2Nlc3MgPSBkb3B1dGVudigiVEVSTSIscyk7CS8qIFNldCB0aGUg VEVSTSB2YXJpYWJsZSAqLworI2lmZGVmIENLX0NVUlNFUworICAgIGZ4ZF9pbml0ZWQgPSAwOwkg ICAgICAgLyogRm9yY2UgcmVpbml0aWFsaXphdGlvbiBvZiBjdXJzZXMgZGF0YWJhc2UgKi8KKyAg ICAodm9pZClkb3hkaXMoMCk7CQkgICAgIC8qIFJlLWluaXRpYWxpemUgZmlsZSB0cmFuc2ZlciBk aXNwbGF5ICovCisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsJCS8qIEZpeCBjb21tYW5kIHRlcm1p bmFsICovCisjZW5kaWYJLyogQ0tfQ1VSU0VTICovCisjZW5kaWYJLyogTk9QVVRFTlYgKi8KKyAg ICByZXR1cm4oc3VjY2Vzcyk7CisjZWxzZQorICAgIHByaW50ZigKKyJcbiBTb3JyeSwgdGhpcyB2 ZXJzaW9uIG9mIEMtS2VybWl0IGRvZXMgbm90IHN1cHBvcnQgdGhlIFNFVCBURVJNSU5BTCBUWVBF XG4iKTsKKyAgICBwcmludGYoCisiIGNvbW1hbmQuICBUeXBlIFwiaGVscCBzZXQgdGVybWluYWxc IiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIpOworICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisjZW5kaWYJLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworfQorCisjaWZuZGVmIE5PTE9D QUwKKyNpZmRlZiBPUzIKKy8qIE1TLURPUyBLRVJNSVQgY29tcGF0aWJpbGl0eSBtb2RlcyAqLwor aW50CitzZXRtc2soKSB7CisgICAgaWYgKCh5ID0gY21rZXkobXNrdGFiLG5tc2ssIk1TLURPUyBL ZXJtaXQgY29tcGF0aWJpbGl0eSBtb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgImtleWNvZGVz Iix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworCisgICAgc3dpdGNoICggeSApIHsKKyNpZmRl ZiBDT01NRU5UCisgICAgICBjYXNlIE1TS19DT0xPUjoKKyAgICAgICAgcmV0dXJuKHNldG9uKCZt c2tjb2xvcnMpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICBjYXNlIE1TS19LRVlTOgor ICAgICAgICByZXR1cm4oc2V0b24oJm1za2tleXMpKTsKKyAgICAgIGNhc2UgTVNLX1JFTjoKKyAg ICAgICAgcmV0dXJuKHNldG9uKCZtc2tyZW5hbWUpKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTaG91bGRuJ3QgZ2V0IGhlcmUuICovCisgICAgICAgIHJldHVy bigtMik7CisgICAgfQorfQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tUSURMRQorc3Rh dGljIGNoYXIgaWFjdGJ1ZlsxMzJdOworCitjaGFyICoKK2dldGlhY3QoKSB7CisgICAgc3dpdGNo ICh0dF9pZGxlYWN0KSB7CisgICAgICBjYXNlIElETEVfUkVUOiAgcmV0dXJuKCJyZXR1cm4iKTsK KyAgICAgIGNhc2UgSURMRV9FWElUOiByZXR1cm4oImV4aXQiKTsKKyAgICAgIGNhc2UgSURMRV9I QU5HOiByZXR1cm4oImhhbmd1cCIpOworI2lmZGVmIFROQ09ERQorICAgICAgY2FzZSBJRExFX1RO T1A6IHJldHVybigiVGVsbmV0IE5PUCIpOworICAgICAgY2FzZSBJRExFX1RBWVQ6IHJldHVybigi VGVsbmV0IEFZVCIpOworI2VuZGlmIC8qIFROQ09ERSAqLworCisgICAgICBjYXNlIElETEVfT1VU OiB7CisgICAgICAgICAgaW50IGMsIGssIG47CisgICAgICAgICAgY2hhciAqIHAsICogcSwgKiB0 OworICAgICAgICAgIGsgPSBja3N0cm5jcHkoaWFjdGJ1Ziwib3V0cHV0ICIsMTMyKTsKKyAgICAg ICAgICBuID0gazsKKyAgICAgICAgICBxID0gJmlhY3RidWZba107CisgICAgICAgICAgcCA9IHR0 X2lkbGVzdHI7CisgICAgICAgICAgaWYgKCFwKSBwID0gIiI7CisgICAgICAgICAgaWYgKCEqcCkg cmV0dXJuKCJvdXRwdXQgTlVMIik7CisgICAgICAgICAgd2hpbGUgKChjID0gKnArKykgJiYgbiA8 IDEzMSkgeworICAgICAgICAgICAgICBjICY9IDB4ZmY7CisgICAgICAgICAgICAgIGlmIChjID09 ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgIGlmIChuID4gMTMwKSBicmVhazsKKyAgICAgICAg ICAgICAgICAgICpxKysgPSAnXFwnOworICAgICAgICAgICAgICAgICAgKnErKyA9ICdcXCc7Cisg ICAgICAgICAgICAgICAgICAqcSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgIG4gKz0gMjsKKyAg ICAgICAgICAgICAgfSBlbHNlIGlmICgoYyA+IDMyICYmIGMgPCAxMjcpIHx8IGMgPiAxNTkpIHsK KyAgICAgICAgICAgICAgICAgICpxKysgPSBjOworICAgICAgICAgICAgICAgICAgKnEgPSBOVUw7 CisgICAgICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICBpZiAobiA+ICgxMzEgLSA2KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICBzcHJpbnRmKHEsIlxceyVkfSIsYyk7CisgICAgICAgICAgICAg ICAgICBrID0gc3RybGVuKHEpOworICAgICAgICAgICAgICAgICAgcSArPSBrOworICAgICAgICAg ICAgICAgICAgbiArPSBrOworICAgICAgICAgICAgICAgICAgKnEgPSBOVUw7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgKnEgPSBOVUw7CisjaWZkZWYgT1MyCisgICAg ICAgICAgayA9IHR0X2NvbHNbVlRFUk1dOworI2Vsc2UKKyAgICAgICAgICBrID0gdHRfY29sczsK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICBpZiAobiA+IGsgLSA1MikgeworICAgICAgICAg ICAgICBuID0gayAtIDUyOworICAgICAgICAgICAgICBpYWN0YnVmW24tMl0gPSAnLic7CisgICAg ICAgICAgICAgIGlhY3RidWZbbi0xXSA9ICcuJzsKKyAgICAgICAgICAgICAgaWFjdGJ1ZltuXSA9 IE5VTDsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKGlhY3RidWYpOworICAgICAgfQor ICAgICAgZGVmYXVsdDogcmV0dXJuKCJ1bmtub3duIik7CisgICAgfQorfQorI2VuZGlmIC8qIENL VElETEUgKi8KKworI2lmbmRlZiBOT0NTRVRTCitWT0lECitzZXRsY2xjaGFyc2V0KHgpIGludCB4 OyB7CisgICAgaW50IGk7CisgICAgdGNzbCA9IHk7ICAgICAgICAgICAgICAgICAgIC8qIExvY2Fs IGNoYXJhY3RlciBzZXQgKi8KKyNpZmRlZiBPUzIKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsr KSB7CisgICAgICAgIEdbaV0uaW5pdCA9IFRSVUU7CisgICAgICAgIHggPSBHW2ldLmRlc2lnbmF0 aW9uOworICAgICAgICBHW2ldLmMxID0gKHggIT0gdGNzbCkgJiYgY3NfaXNfc3RkKHgpOworICAg ICAgICB4ID0gR1tpXS5kZWZfZGVzaWduYXRpb247CisgICAgICAgIEdbaV0uZGVmX2MxID0gKHgg IT0gdGNzbCkgJiYgY3NfaXNfc3RkKHgpOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KK30KKwor Vk9JRAorc2V0cmVtY2hhcnNldCh4LCB6KSBpbnQgeCwgejsgeworICAgIGludCBpOworCisjaWZk ZWYgS1VJCisgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9URVJNX1JFTUNIQVJTRVQsIChsb25nKSB4 LCAobG9uZykgeiApIDsKKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBVTklDT0RFCisgICAgaWYg KHggPT0gVFhfVFJBTlNQKQorI2Vsc2UgLyogVU5JQ09ERSAqLworICAgIGlmICh4ID09IEZDX1RS QU5TUCkKKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRSQU5TUEFSRU5UPyAqLworI2lmbmRlZiBPUzIKKyAgICAgICAgdGNzciA9IHRjc2w7 ICAgICAgICAgICAgLyogTWFrZSBib3RoIHNldHMgdGhlIHNhbWUgKi8KKyNlbHNlIC8qIE9TMiAq LworI2lmZGVmIENLT1VOSQorICAgICAgICB0dF91dGY4ID0gMDsgICAgICAgICAgICAvKiBUdXJu IG9mZiBVVEY4IGZsYWcgKi8KKyAgICAgICAgdGNzciA9IHRjc2wgPSBkZWNfa2JkID0gVFhfVFJB TlNQOyAvKiBObyB0cmFuc2xhdGlvbiAqLworICAgICAgICB0Y3NfdHJhbnNwID0gMTsKKworICAg ICAgICBpZiAoIWNzX2lzX25yYyh0Y3NsKSkgeworICAgICAgICAgICAgR1swXS5kZWZfZGVzaWdu YXRpb24gPSBHWzBdLmRlc2lnbmF0aW9uID0gVFhfQVNDSUk7CisgICAgICAgICAgICBHWzBdLmlu aXQgPSBUUlVFOworICAgICAgICAgICAgR1swXS5kZWZfYzEgPSBHWzBdLmMxID0gRkFMU0U7Cisg ICAgICAgICAgICBHWzBdLnNpemUgPSBjczk0OworICAgICAgICAgICAgR1swXS5uYXRpb25hbCA9 IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IGNzX2lzX25yYyh0Y3NsKSA/IDAg OiAxOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICBHW2ldLmRlZl9kZXNpZ25hdGlvbiA9IEdb aV0uZGVzaWduYXRpb24gPSB0Y3NsOworICAgICAgICAgICAgR1tpXS5pbml0ID0gVFJVRTsKKyAg ICAgICAgICAgIEdbaV0uZGVmX2MxID0gR1tpXS5jMSA9IEZBTFNFOworICAgICAgICAgICAgc3dp dGNoIChjc19zaXplKEdbaV0uZGVzaWduYXRpb24pKSB7IC8qIDk0LCA5Niwgb3IgMTI4ICovCisg ICAgICAgICAgICBjYXNlIDEyODoKKyAgICAgICAgICAgIGNhc2UgOTY6CisgICAgICAgICAgICAg ICAgR1tpXS5zaXplID0gR1tpXS5kZWZfc2l6ZSA9IGNzOTY7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBjYXNlIDk0OgorICAgICAgICAgICAgICAgIEdbaV0uc2l6ZSA9IEdb aV0uZGVmX3NpemUgPSBjczk0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBHW2ldLnNpemUgPSBHW2ldLmRlZl9zaXplID0gY3Nt YjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdb aV0ubmF0aW9uYWwgPSBjc19pc19ucmMoeCk7CisgICAgICAgIH0KKyNlbHNlIC8qIENLT1VOSSAq LworICAgICAgICB0Y3NyID0gdGNzbDsgICAgICAgICAgICAvKiBNYWtlIGJvdGggc2V0cyB0aGUg c2FtZSAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICBH W2ldLmRlZl9kZXNpZ25hdGlvbiA9IEdbaV0uZGVzaWduYXRpb24gPSBGQ19UUkFOU1A7CisgICAg ICAgICAgICBHW2ldLmluaXQgPSBGQUxTRTsKKyAgICAgICAgICAgIEdbaV0uc2l6ZSA9IEdbaV0u ZGVmX3NpemUgPSBjczk2OworICAgICAgICAgICAgR1tpXS5jMSA9IEdbaV0uZGVmX2MxID0gRkFM U0U7CisgICAgICAgICAgICBHW2ldLnJ0b2kgPSBOVUxMOworICAgICAgICAgICAgR1tpXS5pdG9s ID0gTlVMTDsKKyAgICAgICAgICAgIEdbaV0ubHRvaSA9IE5VTEw7CisgICAgICAgICAgICBHW2ld Lml0b3IgPSBOVUxMOworICAgICAgICAgICAgR1tpXS5uYXRpb25hbCA9IEZBTFNFOworICAgICAg ICB9CisjZW5kaWYgLyogQ0tPVU5JICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVy bjsKKyAgICB9CisjaWZkZWYgT1MyCisjaWZkZWYgQ0tPVU5JCisgICAgZWxzZSBpZiAoeCA9PSBU WF9VVEY4KSB7CisgICAgICAgIHRjc190cmFuc3AgPSAwOworICAgICAgICB0dF91dGY4ID0gMTsg ICAgICAgICAgICAvKiBUdXJuIGl0IG9uIGlmIHdlIGFyZSBVVEY4ICovCisgICAgICAgIHJldHVy bjsKKyAgICB9CisjZW5kaWYgLyogQ0tPVU5JICovCisgICAgZWxzZSB7CisgICAgICAgIHRjc190 cmFuc3AgPSAwOworICAgICAgICB0Y3NyID0geDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl bW90ZSBjaGFyYWN0ZXIgc2V0ICovCisjaWZkZWYgQ0tPVU5JCisgICAgICAgIHR0X3V0ZjggPSAw OyAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgVVRGOCBmbGFnICovCisjZW5kaWYgLyog Q0tPVU5JICovCisKKyAgICAgICAgaWYgKHogPT0gVFRfR1JfQUxMKSB7CisgICAgICAgICAgICBp bnQgaTsKKyNpZmRlZiBVTklDT0RFCisgICAgICAgICAgICBkZWNfa2JkID0geDsKKyNlbmRpZiAv KiBVTklDT0RFICovCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAg ICAgICAgICAgICAgR1tpXS5pbml0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBpZiAoIGkgPT0g MCAmJiAhY3NfaXNfbnJjKHgpICkgeworICAgICAgICAgICAgICAgICAgICBHWzBdLmRlc2lnbmF0 aW9uID0gR1swXS5kZWZfZGVzaWduYXRpb24gPSBGQ19VU0FTQ0lJOworICAgICAgICAgICAgICAg ICAgICBHWzBdLnNpemUgPSBHWzBdLmRlZl9zaXplID0gY3M5NDsKKyAgICAgICAgICAgICAgICAg ICAgR1swXS5uYXRpb25hbCA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgR1tpXS5kZWZfZGVzaWduYXRpb24gPSBHW2ldLmRlc2lnbmF0aW9uID0geDsK KyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjc19zaXplKHgpKSB7ICAgICAgIC8qIDk0LCA5 Niwgb3IgMTI4ICovCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI4OgorICAgICAgICAgICAg ICAgICAgICBjYXNlIDk2OgorICAgICAgICAgICAgICAgICAgICAgICAgR1tpXS5zaXplID0gR1tp XS5kZWZfc2l6ZSA9IGNzOTY7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgY2FzZSA5NDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEdbaV0uc2l6 ZSA9IEdbaV0uZGVmX3NpemUgPSBjczk0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBH W2ldLnNpemUgPSBHW2ldLmRlZl9zaXplID0gY3NtYjsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEdbaV0u bmF0aW9uYWwgPSBjc19pc19ucmMoeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIEdbaV0uYzEgPSBHW2ldLmRlZl9jMSA9IHggIT0gdGNzbCAmJiBjc19pc19zdGQoeCk7Cisg ICAgICAgICAgICB9CisjaWZkZWYgVU5JQ09ERQorICAgICAgICB9IGVsc2UgaWYgKHogPT0gVFRf R1JfS0JEKSB7ICAgIC8qIEtleWJvYXJkIG9ubHkgKi8KKyAgICAgICAgICAgIGRlY19rYmQgPSB4 OworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTcGVjaWZpYyBHbiAqLworICAgICAgICAgICAgR1t6XS5kZWZfZGVzaWduYXRp b24gPSBHW3pdLmRlc2lnbmF0aW9uID0geDsKKyAgICAgICAgICAgIEdbel0uaW5pdCA9IFRSVUU7 CisgICAgICAgICAgICBzd2l0Y2ggKGNzX3NpemUoeCkpIHsgICAgICAgLyogOTQsIDk2LCBvciAx MjggKi8KKyAgICAgICAgICAgIGNhc2UgMTI4OgorICAgICAgICAgICAgY2FzZSA5NjoKKyAgICAg ICAgICAgICAgICBHW3pdLnNpemUgPSBHW3pdLmRlZl9zaXplID0gY3M5NjsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgOTQ6CisgICAgICAgICAgICAgICAgR1t6XS5z aXplID0gR1t6XS5kZWZfc2l6ZSA9IGNzOTQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEdbel0uc2l6ZSA9IEdbel0uZGVmX3Np emUgPSBjc21iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgR1t6XS5jMSA9IEdbel0uZGVmX2MxID0geCAhPSB0Y3NsICYmIGNzX2lzX3N0ZCh4KTsK KyAgICAgICAgICAgIEdbel0ubmF0aW9uYWwgPSBjc19pc19ucmMoeCk7CisgICAgICAgIH0KKyAg ICB9CisjZWxzZSAvKiBub3QgT1MyICovCisgICAgdGNzciA9IHg7ICAgICAgICAgICAgICAgICAg IC8qIFJlbW90ZSBjaGFyYWN0ZXIgc2V0ICovCisjZW5kaWYgLyogT1MyICovCit9CisjZW5kaWYg LyogTk9DU0VUUyAqLworCitWT0lECitzZXRjbWFzayh4KSBpbnQgeDsgeworICAgIGlmICh4ID09 IDcpIHsKKyAgICAgICAgY21hc2sgPSAwMTc3OworICAgIH0gZWxzZSBpZiAoeCA9PSA4KSB7Cisg ICAgICAgIGNtYXNrID0gMDM3NzsKKyAgICAgICAgcGFyaXR5ID0gMDsKKyAgICB9CisjaWZkZWYg S1VJICAgICAgCisgICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fQ01BU0sseCwwKTsKKyNlbmRp ZiAvKiBLVUkgKi8KK30KKworI2lmZGVmIENLX0FVVE9ETAorVk9JRAorc2V0YXV0b2RsKHgseSkg aW50IHgseTsgeworICAgIGF1dG9kbCA9IHg7CisgICAgYWRsX2FzayA9IHk7CisjaWZkZWYgS1VJ ICAgICAgCisgICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fQVVUT0RPV05MT0FELHg/KHk/Mjox KTowLDApOworI2VuZGlmIC8qIEtVSSAqLworfQorI2VuZGlmIC8qIENLX0FVVE9ETCAqLworCisj aWZkZWYgT1MyCitWT0lECitzZXR1cmxobChpbnQgeCkgeworICAgIHR0X3VybF9oaWxpdGUgPSB4 OworI2lmZGVmIEtVSSAgICAgIAorICAgIEt1aVNldFByb3BlcnR5KEtVSV9URVJNX1VSTF9ISUdI TElHSFQseCwwKTsKKyNlbmRpZiAvKiBLVUkgKi8KK30KKworVk9JRAorc2V0YXByaW50KGludCB4 KSB7CisgICAgZXh0ZXJuIGludCBhcHJpbnQ7CisgICAgYXByaW50ID0geDsKKyNpZmRlZiBLVUkK KyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfVEVSTV9QUklOVEVSQ09QWSx4LDApOworI2VuZGlmIC8q IEtVSSAqLworfQorI2VuZGlmIC8qIE9TMiAqLworCitpbnQKK3NldHRybSgpIHsKKyAgICBpbnQg aSA9IDA7CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBjb2xvcnJlc2V0LCB1c2VyX2VyYXNl bW9kZTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBpZiAoKHkgPSBjbWtleSh0cm10YWIsbnRybSwi IiwgIiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyNpZmRlZiBNQUMKKyAgICBwcmludGYo IlxuP1NvcnJ5LCBub3QgaW1wbGVtZW50ZWQgeWV0LiAgUGxlYXNlIHVzZSB0aGUgU2V0dGluZ3Mg bWVudS5cbiIpOworICAgIHJldHVybigtOSk7CisjZWxzZQorI2lmZGVmIElLU0QKKyAgICBpZiAo aW5zZXJ2ZXIpIHsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7Cisg ICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxyXG4iKTsKKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyogSUtTRCAqLworCisgICAgc3dp dGNoICh5KSB7CisgICAgICBjYXNlIFhZVEJZVDogICAgICAgICAgICAgICAgICAgICAgLyogU0VU IFRFUk1JTkFMIEJZVEVTSVpFICovCisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJieXRlc2l6ZSBm b3IgdGVybWluYWwgY29ubmVjdGlvbiIsIjgiLDEwLCZ4LAorICAgICAgICAgICAgICAgICAgICAg ICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh4ICE9 IDcgJiYgeCAhPSA4KSB7CisgICAgICAgICAgICBwcmludGYoIlxuP1RoZSBjaG9pY2VzIGFyZSA3 IGFuZCA4XG4iKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHNldGNt YXNrKHgpOworI2lmZGVmIE9TMgorICAgICAgICBpZiAoSVM5NzgwMSh0dF90eXBlX21vZGUpKQor ICAgICAgICAgIFNOSV9iaXRtb2RlKHgpOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZVFNPOiAgICAgICAgICAgICAgICAgICAg ICAgLyogU0VUIFRFUk1JTkFMIExPQ0tJTkctU0hJRlQgKi8KKyAgICAgICAgcmV0dXJuKHNldG9u KCZzb3NpKSk7CisKKyAgICAgIGNhc2UgWFlUTkw6ICAgICAgICAgICAgICAgICAgICAgICAvKiBT RVQgVEVSTUlOQUwgTkVXTElORS1NT0RFICovCisgICAgICAgIHJldHVybihzZXRvbigmdG5sbSkp OworCisjaWZkZWYgT1MyCisgICAgICBjYXNlIFhZVENPTDoKKyAgICAgICAgaWYgKCh4ID0gY21r ZXkodHR5Y29sdGFiLG5jb2xvcnMsIiIsInRlcm1pbmFsIix4eHN0cmluZykpIDwgMCkKKyAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgIGVsc2UgaWYgKHggPT0gVFRDT0xSRVMpIHsKKyAgICAg ICAgICAgIGlmICgoeSA9IGNta2V5KHR0Y29sbW9kZXRhYixuY29sbW9kZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiLCJkZWZhdWx0LWNvbG9yIix4eHN0cmluZykpIDwgMCkKKyAgICAg ICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKQor ICAgICAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgICAgICBjb2xvcnJlc2V0ID0geTsKKyAg ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICAgIH0gZWxzZSBpZiAoeCA9PSBU VENPTEVSQSkgeworICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkodHRjb2xtb2RldGFiLG5jb2xt b2RlLCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnQtY29sb3IiLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoKHog PSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgICAgIHVz ZXJfZXJhc2Vtb2RlID0geTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzPTEpOworICAgICAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHBhcnNlIGVycm9yICovCisg ICAgICAgICAgICBpbnQgZmcgPSAwLCBiZyA9IDA7CisgICAgICAgICAgICBmZyA9IGNta2V5KHR0 eWNscnRhYiwgbmNscnMsCisgICAgICAgICAgICAgICAgICAgICAgICh4ID09IFRUQ09MQk9SID8K KyAgICAgICAgICAgICAgICAgICAgICAgICJjb2xvciBmb3Igc2NyZWVuIGJvcmRlciIgOgorICAg ICAgICAgICAgICAgICAgICAgICAgImZvcmVncm91bmQgY29sb3IgYW5kIHRoZW4gYmFja2dyb3Vu ZCBjb2xvciIpLAorICAgICAgICAgICAgICAgICAgICAgICAibGdyYXkiLCB4eHN0cmluZyk7Cisg ICAgICAgICAgICBpZiAoZmcgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oZmcpOworICAgICAg ICAgICAgaWYgKHggIT0gVFRDT0xCT1IpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGJnID0gY21r ZXkodHR5Y2xydGFiLG5jbHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFj a2dyb3VuZCBjb2xvciIsImJsdWUiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAg cmV0dXJuKGJnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgc3dpdGNoICh4KSB7 CisgICAgICAgICAgICAgIGNhc2UgVFRDT0xOT1I6CisgICAgICAgICAgICAgICAgY29sb3Jub3Jt YWwgPSBmZyB8IGJnIDw8IDQ7CisgICAgICAgICAgICAgICAgZmdpID0gZmcgJiAweDA4OworICAg ICAgICAgICAgICAgIGJnaSA9IGJnICYgMHgwODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgY2FzZSBUVENPTFJFVjoKKyAgICAgICAgICAgICAgICBjb2xvcnJldmVyc2Ug PSBmZyB8IGJnIDw8IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh c2UgVFRDT0xJVEE6CisgICAgICAgICAgICAgICAgY29sb3JpdGFsaWMgPSBmZyB8IGJnIDw8IDQ7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVFRDT0xVTkQ6Cisg ICAgICAgICAgICAgICAgY29sb3J1bmRlcmxpbmUgPSBmZyB8IGJnIDw8IDQ7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVFRDT0xHUlA6CisgICAgICAgICAgICAg ICAgY29sb3JncmFwaGljID0gZmcgfCBiZyA8PCA0OworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICBjYXNlIFRUQ09MREVCOgorICAgICAgICAgICAgICAgIGNvbG9yZGVidWcg PSBmZyB8IGJnIDw8IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh c2UgVFRDT0xTVEE6CisgICAgICAgICAgICAgICAgY29sb3JzdGF0dXMgPSBmZyB8IGJnIDw8IDQ7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVFRDT0xITFA6Cisg ICAgICAgICAgICAgICAgY29sb3JoZWxwID0gZmcgfCBiZyA8PCA0OworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRUQ09MQk9SOgorICAgICAgICAgICAgICAgIGNv bG9yYm9yZGVyID0gZmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh c2UgVFRDT0xTRUw6CisgICAgICAgICAgICAgICAgY29sb3JzZWxlY3QgPSBmZyB8IGJnIDw8IDQ7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAgICAgcHJpbnRmKCIlcyAtIGludmFsaWRcbiIsY21kYnVmKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgc2NybmluaXRpYWxpemVkW1ZURVJNXSA9IDA7CisgICAgICAgICAgICBWc2Nybklu aXQoVlRFUk0pOworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAg ICAgIGNhc2UgWFlUQ1VSOiB7ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgQ1VS U09SICovCisgICAgICAgICAgZXh0ZXJuIGludCBjdXJzb3JlbmFbXTsKKyAgICAgICAgICBleHRl cm4gaW50IGN1cnNvcm9uW10gOyAgICAgICAvKiBDdXJzb3Igc3RhdGUgb24vb2ZmICAgICAgICov CisgICAgICAgICAgaWYgKCh4ID0gY21rZXkodHR5Y3VydGFiLG5jdXJzb3JzLCIiLCJ1bmRlcmxp bmUiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlm ICgoeiA9IGNta2V5KGN1cm9udGFiLG5jdXJvbiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgICAgICAgcmV0dXJuKHopOworICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHkpOworICAgICAgICAgIHR0X2N1cnNvciA9IHR0X2N1cnNvcl91c3IgPSB4OworICAgICAg ICAgIGlmICggeiA9PSAyICkgeworICAgICAgICAgICAgICBjdXJzb3JlbmFbVlRFUk1dID0gdHRf Y3Vyc29yZW5hX3VzciA9IDE7CisgICAgICAgICAgICAgIHR0X2N1cnNvcl9ibGluayA9IDA7Cisg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgY3Vyc29yZW5hW1ZURVJNXSA9IHR0X2N1 cnNvcmVuYV91c3IgPSB6Oy8qIHR1cm4gY3Vyc29yIG9uL29mZiAqLworICAgICAgICAgICAgICB0 dF9jdXJzb3JfYmxpbmsgPSAxOworICAgICAgICAgIH0KKyAgICAgICAgICBjdXJzb3JvbltWVEVS TV0gPSBGQUxTRTsgLyogRm9yY2UgbmV3Y3Vyc29yIHRvIHJlc3RvcmUgdGhlIGN1cnNvciAqLwor ICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogT1MyICov CisKKyAgICAgIGNhc2UgWFlUVFlQOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlO QUwgVFlQRSAqLworICAgICAgICByZXR1cm4oc2V0dHJtdHlwKCkpOworCisjaWZkZWYgT1MyCisg ICAgICBjYXNlIFhZVEFSUjogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIEFS Uk9XLUtFWVMgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkoYWttdGFiLDIsIiIsIiIseHhzdHJp bmcpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeSk7CisgICAgICAgIHR0X2Fycm93ID0geDsgICAgICAgICAgICAgICAgICAgLyogVFRLX05P Uk0gLyBUVEtfQVBQTDsgc2VlIGNrdXVzci5oICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7CisKKyAgICAgIGNhc2UgWFlUS1BEOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVS TUlOQUwgS0VZUEFELU1PREUgKi8KKyAgICAgICAgaWYgKCh4ID0gY21rZXkoa3BtdGFiLDIsIiIs IiIseHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7CisgICAgICAgIHR0X2tleXBhZCA9IHg7ICAgICAgICAgICAgICAgICAg LyogVFRLX05PUk0gLyBUVEtfQVBQTDsgc2VlIGNrdXVzci5oICovCisgICAgICAgIHJldHVybihz dWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlUVU5YOiB7ICAgICAgICAgICAgICAgICAgICAv KiBTRVQgVEVSTSBVTklYLU1PREUgKERHKSAqLworICAgICAgICBleHRlcm4gaW50IGRndW5peCxk Z3VuaXhfdXNyOworICAgICAgICB4ID0gc2V0b24oJmRndW5peCk7CisgICAgICAgIGRndW5peF91 c3IgPSBkZ3VuaXg7CisgICAgICAgIHJldHVybih4KTsKKyAgICAgIH0KKyAgICAgIGNhc2UgWFlU S0JNT0Q6IHsgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTSBLRVlCT0FSRCBNT0RFICovCisg ICAgICAgICAgZXh0ZXJuIGludCB0dF9rYl9tb2RlOworICAgICAgICAgIGlmICgoeCA9IGNta2V5 KGtibW9kdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5rYm1vZHRhYiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAibm9ybWFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3Bl Y2lhbCBrZXlib2FyZCBtb2RlIGZvciB0ZXJtaW5hbCBlbXVsYXRpb24iLAorICAgICAgICAgICAg ICAgICAgICAgICAgIHh4c3RyaW5nKQorICAgICAgICAgICAgICAgKSA8IDApCisgICAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 CisgICAgICAgICAgdHRfa2JfbW9kZSA9IHg7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKyAgICAgIH0KKworICAgICAgY2FzZSBYWVRXUlA6ICAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBURVJNSU5BTCBXUkFQICovCisgICAgICAgIHJldHVybihzZXRvbigmdHRfd3JhcCkpOwor CisgICAgICBjYXNlIFhZU0NSUzoKKyAgICAgICAgaWYgKCh5ID0gY21udW0oIkNPTk5FQ1Qgc2Ny b2xsYmFjayBidWZmZXIgc2l6ZSwgbGluZXMiLCIyMDAwIiwxMCwmeCwKKyAgICAgICAgICAgICAg ICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAv KiBUaGUgbWF4IG51bWJlciBvZiBsaW5lcyBpcyB0aGUgUkFNICAqLworICAgICAgICAvKiB3ZSBj YW4gYWN0dWFsbHkgZGVkaWNhdGUgdG8gYSAgICAgICAqLworICAgICAgICAvKiBzY3JvbGxiYWNr IGJ1ZmZlciBnaXZlbiB0aGUgbWF4aW11bSAqLworICAgICAgICAvKiBwcm9jZXNzIG1lbW9yeSBz cGFjZSBvZiA1MTJNQiAgICAgICAqLworICAgICAgICBpZiAoeCA8IDI1NiB8fCB4ID4gMjAwMDAw MEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiXG4/VGhlIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDI1 NiBhbmQgMiwwMDAsMDAwLlxuIik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor ICAgICAgICB9CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAg ICAgICB0dF9zY3JzaXplW1ZURVJNXSA9IHg7CisgICAgICAgIFZzY3JuSW5pdChWVEVSTSk7Cisg ICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogT1MyICovCisKKyNpZm5kZWYg Tk9DU0VUUworICAgICAgY2FzZSBYWVRDUzogeyAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBU RVJNSU5BTCBDSEFSQUNURVItU0VUICovCisgICAgICAgIGludCBlb2w7CisgICAgICAgICAgLyog c2V0IHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgPHJlbW90ZT4gPGxvY2FsPiAqLworICAgICAgICBp ZiAoKHggPSBjbWtleSgKKyNpZmRlZiBDS09VTkkKKyAgICAgICAgICAgICAgICAgICAgICAgdHhy dGFiLG50eHJ0YWIsCisjZWxzZSAgLyogQ0tPVU5JICovCisgICAgICAgICAgICAgICAgICAgICAg IHR0Y3N0YWIsbnRlcm1jLAorI2VuZGlmIC8qIENLT1VOSSAqLworICAgICAgICAgICAgICAgICAg ICAgICAicmVtb3RlIHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQiLCIiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgIHJldHVybih4KTsKKworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgaWYgKHggPT0g VFhfVFJBTlNQCisjaWZkZWYgQ0tPVU5JCisgICAgICAgICAgICB8fCB4ID09IFRYX1VURjgKKyNl bmRpZiAvKiBDS09VTkkgKi8KKyAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgIGlmICgoeSA9 IGNtY2ZtKCkpIDwgMCkgICAgLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLworICAgICAgICAgICAg ICAgICAgcmV0dXJuKHkpOworI2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKCBpc3VuaWNvZGUo KSAmJiB4ID09IFRYX1RSQU5TUCApIHsKKyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBhcmUgaW4g dW5pY29kZSBkaXNwbGF5IG1vZGUgdGhlbiB0cmFuc3BhcmVudAorICAgICAgICAgICAgICAgICAq IG9ubHkgYWZmZWN0cyB0aGUgb3V0cHV0IGRpcmVjdGlvbi4gIFdlIG5lZWQgdG8ga25vdworICAg ICAgICAgICAgICAgICAqIHRoZSBhY3R1YWwgcmVtb3RlIGNoYXJhY3RlciBzZXQgaW4gb3JkZXIg dG8gcGVyZm9ybQorICAgICAgICAgICAgICAgICAqIHRoZSB0Y3NyIC0+IHVjczIgdHJhbnNsYXRp b24gZm9yIGRpc3BsYXkuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgeCA9 IHkgPSB0Y3NsOworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogT1MyICovCisgICAgICAg ICAgICAgICAgeSA9IHg7CisgICAgICAgIH0KKyNlbHNlIC8qIFVOSUNPREUgKi8KKyAgICAgICAg aWYgKHggPT0gRkNfVFJBTlNQKSB7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDAp ICAgICAgLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLworICAgICAgICAgICAgICAgIHJldHVybih5 KTsKKyAgICAgICAgICAgIHkgPSB4OworICAgICAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLwor CisgICAgICAgIC8qIE5vdCB0cmFuc3BhcmVudCBvciBVVEY4LCBzbyBnZXQgbG9jYWwgc2V0IHRv IHRyYW5zbGF0ZSBpdCBpbnRvICovCisgICAgICAgIHMgPSAiIjsKKyNpZmRlZiBPUzIKKyAgICAg ICAgeSA9IG9zMmdldGNwKCk7ICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGlzIGN1cnJlbnQg Y29kZSBwYWdlICovCisgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgIGNhc2UgNDM3OiBz ID0gImNwNDM3IjsgYnJlYWs7CisgICAgICAgICAgY2FzZSA4NTA6IHMgPSAiY3A4NTAiOyBicmVh azsKKyAgICAgICAgICBjYXNlIDg1MjogcyA9ICJjcDg1MiI7IGJyZWFrOworICAgICAgICAgIGNh c2UgODU3OiBzID0gImNwODU3IjsgYnJlYWs7CisgICAgICAgICAgY2FzZSA4NTg6IHMgPSAiY3A4 NTgiOyBicmVhazsKKyAgICAgICAgICBjYXNlIDg2MjogcyA9ICJjcDg2MiI7IGJyZWFrOworICAg ICAgICAgIGNhc2UgODY2OiBzID0gImNwODY2IjsgYnJlYWs7CisgICAgICAgICAgY2FzZSA4Njk6 IHMgPSAiY3A4NjkiOyBicmVhazsKKyAgICAgICAgICBjYXNlIDEyNTA6IHMgPSAiY3AxMjUwIjsg YnJlYWs7CisgICAgICAgICAgY2FzZSAxMjUxOiBzID0gImNwMTI1MSI7IGJyZWFrOworICAgICAg ICAgIGNhc2UgMTI1MjogcyA9ICJjcDEyNTIiOyBicmVhazsKKyAgICAgICAgICBjYXNlIDEyNTM6 IHMgPSAiY3AxMjUzIjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAxMjU0OiBzID0gImNwMTI1NCI7 IGJyZWFrOworICAgICAgICAgIGNhc2UgMTI1NTogcyA9ICJjcDEyNTUiOyBicmVhazsKKyAgICAg ICAgICBjYXNlIDEyNTY6IHMgPSAiY3AxMjU2IjsgYnJlYWs7CisgICAgICAgICAgY2FzZSAxMjU3 OiBzID0gImNwMTI1NyI7IGJyZWFrOworICAgICAgICAgIGNhc2UgMTI1ODogcyA9ICJjcDEyNTgi OyBicmVhazsKKyAgICAgICAgfQorI2lmZGVmIFBDRk9OVFMKKy8qCisgICBJZiB0aGUgdXNlciBo YXMgbG9hZGVkIGEgZm9udCB3aXRoIFNFVCBURVJNSU5BTCBGT05UIHRoZW4gd2Ugd2FudAorICAg dG8gY2hhbmdlIHRoZSBkZWZhdWx0IGNvZGUgcGFnZSB0byB0aGUgZm9udCB0aGF0IHdhcyBsb2Fk ZWQuCisqLworICAgICAgICBpZiAodHRfZm9udCAhPSBUVEZfUk9NKSB7CisgICAgICAgICAgICBm b3IgKHkgPSAwOyB5IDwgbnRlcm1mb250OyB5KysgKSB7CisgICAgICAgICAgICAgICAgaWYgKHRl cm1fZm9udFt5XS5rd3ZhbCA9PSB0dF9mb250KSB7CisgICAgICAgICAgICAgICAgICAgIHMgPSB0 ZXJtX2ZvbnRbeV0ua3dkOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBQQ0ZPTlRTICovCisj ZWxzZSAgLyogTm90IEs5NS4uLiAqLworICAgICAgICBzID0gZmNzaW5mb1tmY2hhcnNldF0ua2V5 d29yZDsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgICAgICBpZiAoKHkgPSBjbWtleSgKKyNpZmRl ZiBDS09VTkkKKyAgICAgICAgICAgICAgICAgICAgICAgdHhydGFiLG50eHJ0YWIsCisjZWxzZSAv KiBDS09VTkkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgdHRjc3RhYixudGVybWMsCisjZW5k aWYgLyogQ0tPVU5JICovCisgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbCBjaGFyYWN0ZXIt c2V0IixzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKworI2lmZGVmIFVO SUNPREUKKyAgICAgICAgaWYgKHkgPT0gVFhfVVRGOCkgeworICAgICAgICAgICAgcHJpbnRmKCI/ VVRGOCBtYXkgbm90IGJlIHVzZWQgYXMgYSBsb2NhbCBjaGFyYWN0ZXIgc2V0LlxyXG4iKTsKKyAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBVTklDT0RFICovCisj aWZkZWYgT1MyCisgICAgICAgIGlmICgoeiA9IGNta2V5KGdyYXBoc2V0dGFiLG5ncmFwaHNldCwK KyAgICAgICAgICAgICAgICAgICAgICAgIkRFQyBWVCBpbnRlcm1lZGlhdGUgZ3JhcGhpYyBzZXQi LCJhbGwiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHopOworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICBpZiAoKGVvbCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgIHJl dHVybihlb2wpOyAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCisKKyAgICAgICAgLyogRW5kIG9m IGNvbW1hbmQgcGFyc2luZyAtIGFjdGlvbnMgYmVnaW4gKi8KKyAgICAgICAgc2V0bGNsY2hhcnNl dCh5KTsKKyAgICAgICAgc2V0cmVtY2hhcnNldCh4LHopOworICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBOT0NTRVRT CisgICAgICBjYXNlIFhZVExDUzogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFM IExPQ0FMLUNIQVJBQ1RFUi1TRVQgKi8KKyAgICAgICAgLyogc2V0IHRlcm1pbmFsIGNoYXJhY3Rl ci1zZXQgPGxvY2FsPiAqLworICAgICAgICBzID0gZ2V0ZGNzZXQoKTsgICAgICAgICAgICAgICAg IC8qIEdldCBkaXNwbGF5IGNoYXJhY3Rlci1zZXQgbmFtZSAqLworICAgICAgICBpZiAoKHkgPSBj bWtleSgKKyNpZmRlZiBDS09VTkkKKyAgICAgICAgICAgICAgICAgICAgICAgdHhydGFiLG50eHJ0 YWIsCisjZWxzZSAvKiBDS09VTkkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgZmNzdGFiLG5m aWxjLAorI2VuZGlmIC8qIENLT1VOSSAqLworICAgICAgICAgICAgICAgICAgICAgICAibG9jYWwg Y2hhcmFjdGVyLXNldCIscyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisK KyNpZmRlZiBVTklDT0RFCisgICAgICAgICAgaWYgKHkgPT0gVFhfVVRGOCkgeworICAgICAgICAg ICAgICBwcmludGYoIj9VVEY4IG1heSBub3QgYmUgdXNlZCBhcyBhIGxvY2FsIGNoYXJhY3RlciBz ZXQuXHJcbiIpOworICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyNlbmRp ZiAvKiBVTklDT0RFICovCisgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4o eik7IC8qIENvbmZpcm0gdGhlIGNvbW1hbmQgKi8KKworICAgICAgICAgIC8qIEVuZCBvZiBjb21t YW5kIHBhcnNpbmcgLSBhY3Rpb24gYmVnaW5zICovCisKKyAgICAgICAgc2V0bGNsY2hhcnNldCh5 KTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisK KyNpZm5kZWYgTk9DU0VUUworI2lmZGVmIFVOSUNPREUKKyAgICAgIGNhc2UgWFlUVU5JOiAgICAg ICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgVU5JQ09ERSAqLworICAgICAgICByZXR1 cm4oc2V0b24oJnR0X3VuaWNvZGUpKTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyAgICAgIGNh c2UgWFlUUkNTOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgUkVNT1RFLUNI QVJBQ1RFUi1TRVQgKi8KKyAgICAgICAgLyogc2V0IHRlcm1pbmFsIGNoYXJhY3Rlci1zZXQgPHJl bW90ZT4gPEdyYXBoaWMtc2V0PiAqLworICAgICAgICBpZiAoKHggPSBjbWtleSgKKyNpZmRlZiBD S09VTkkKKyAgICAgICAgICAgICAgICB0eHJ0YWIsIG50eHJ0YWIsCisjZWxzZSAvKiBDS09VTkkg Ki8KKyAgICAgICAgICAgICAgICB0dGNzdGFiLG50ZXJtYywKKyNlbmRpZiAvKiBDS09VTkkgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0Iiwi Iix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisKKyNpZmRlZiBVTklDT0RF CisgICAgICAgIGlmICh4ID09IFRYX1RSQU5TUAorI2lmZGVmIENLT1VOSQorICAgICAgICAgICAg fHwgeCA9PSBUWF9VVEY4CisjZW5kaWYgLyogQ0tPVU5JICovCisgICAgICAgICAgICkgeworICAg ICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApICAgIC8qIENvbmZpcm0gdGhlIGNvbW1h bmQgKi8KKyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyNpZmRlZiBPUzIKKyAgICAgICAg ICAgIGlmICggaXN1bmljb2RlKCkgJiYgeCA9PSBUWF9UUkFOU1AgKSB7CisgICAgICAgICAgICAg ICAgLyogSWYgd2UgYXJlIGluIHVuaWNvZGUgZGlzcGxheSBtb2RlIHRoZW4gdHJhbnNwYXJlbnQK KyAgICAgICAgICAgICAgICAgKiBvbmx5IGFmZmVjdHMgdGhlIG91dHB1dCBkaXJlY3Rpb24uICBX ZSBuZWVkIHRvIGtub3cKKyAgICAgICAgICAgICAgICAgKiB0aGUgYWN0dWFsIHJlbW90ZSBjaGFy YWN0ZXIgc2V0IGluIG9yZGVyIHRvIHBlcmZvcm0KKyAgICAgICAgICAgICAgICAgKiB0aGUgdGNz ciAtPiB1Y3MyIHRyYW5zbGF0aW9uIGZvciBkaXNwbGF5LgorICAgICAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgICAgIHggPSB0Y3NsOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAq LworICAgICAgICB9CisjZWxzZSAvKiBVTklDT0RFICovCisgICAgICAgIGlmICh4ID09IEZDX1RS QU5TUCkgeworICAgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgICAgICAgIC8qIENvbmZp cm0gdGhlIGNvbW1hbmQgKi8KKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgfQorI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKyAgICAgICAgZWxzZSB7CisjaWZkZWYgT1MyCisgICAgICAgICAg aWYgKCh6ID0gY21rZXkoZ3JhcGhzZXR0YWIsbmdyYXBoc2V0LAorICAgICAgICAgICAgICAgICAg ICAgICJERUMgVlQgaW50ZXJtZWRpYXRlIGdyYXBoaWMgc2V0IiwiYWxsIix4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICAgIHJldHVybih6KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApICAgICAgICAvKiBDb25maXJtIHRoZSBjb21tYW5kICovCisg ICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIH0KKyAgICAgICAgLyogQ29tbWFuZCBwYXJz aW5nIGVuZHMgaGVyZSAqLworCisgICAgICAgIHNldHJlbWNoYXJzZXQoeCx6KTsKKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICAgIGNhc2Ug WFlURUM6ICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTUlOQUwgRUNITyAqLworICAg ICAgICBpZiAoKHggPSBjbWtleShybHRhYixucmx0LCJ3aGljaCBzaWRlIGVjaG9zIGR1cmluZyBD T05ORUNUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZSIsIHh4c3RyaW5nKSkgPCAw KSByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOwor I2lmZGVmIE5FVENPTk4KKyAgICAgICAgb2xkcGxleCA9IHg7CisjZW5kaWYgLyogTkVUQ09OTiAq LworICAgICAgICBkdXBsZXggPSB4OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisg ICAgICBjYXNlIFhZVEVTQzogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk0gRVNDICov CisgICAgICAgIGlmICgoeCA9IGNta2V5KG5hYmx0YWIsbm5hYmx0YWIsIiIsImVuYWJsZWQiLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHR0X2VzY2FwZSA9IHg7CisgICAgICAgIHJl dHVybigxKTsKKworICAgICAgY2FzZSBYWVRDUkQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNF VCBURVJNSU5BTCBDUi1ESVNQTEFZICovCisgICAgICAgIGlmICgoeCA9IGNta2V5KGNyZHRhYiwy LCIiLCAibm9ybWFsIiwgeHhzdHJpbmcpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIHR0X2NyZCA9IHg7CisgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgWFlUTEZEOiAgICAgICAgICAgICAg ICAgICAgICAvKiBTRVQgVEVSTUlOQUwgTEYtRElTUExBWSAqLworICAgICAgICBpZiAoKHggPSBj bWtleShjcmR0YWIsMiwiIiwgIm5vcm1hbCIsIHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7Cisg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICB0dF9sZmQg PSB4OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisjaWZkZWYgT1MyCisgICAgICBj YXNlIFhZVEFOUzogeyAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIEFOU1dFUkJB Q0sgKi8KKy8qCisgIE5PVEU6IFdlIGxldCB0aGVtIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgYW5z d2VyYmFjayBzZXF1ZW5jZSwgYnV0IHdlCisgIGRvIE5PVCBsZXQgdGhlbSBjaGFuZ2UgaXQsIGFu ZCB3ZSBkZWZpbml0ZWx5IGRvIG5vdCBsZXQgdGhlIGhvc3Qgc2V0IGl0LgorICBUaGlzIGlzIGEg c2VjdXJpdHkgZmVhdHVyZS4KKworICBBcyBvZiAxLjEuOCB3ZSBhbGxvdyB0aGUgU0VUIFRFUk0g QU5TV0VSQkFDSyBNRVNTQUdFIDxzdHJpbmc+IHRvIGJlCisgIHVzZWQganVzdCBhcyBNUy1ET1Mg S2VybWl0IGRvZXMuICBDMCBhbmQgQzEgY29udHJvbHMgYXMgd2VsbCBhcyBERUwKKyAgYXJlIG5v dCBhbGxvd2VkIHRvIGJlIHVzZWQgYXMgY2hhcmFjdGVycy4gIFRoZXkgYXJlIHRyYW5zbGF0ZWQg dG8KKyAgdW5kZXJzY29yZS4gIFRoaXMgbWF5IG5vdCBiZSBzZXQgYnkgQVBDLgorKi8KKyAgICAg ICAgICBpZiAoKHggPSBjbWtleShhbmJrdGFiLG5hbnNiaywiIiwgIm9mZiIsIHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICh4IDwgMikgeworICAg ICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICAgICAgICB0dF9hbnN3ZXIgPSB4OworICAgICAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworICAgICAgICAgIH0gZWxzZSBpZiAoIHggPT0gMiB8fCB4ID09IDMpIHsK KyAgICAgICAgICAgICAgaW50IGxlbiA9IDA7CisgICAgICAgICAgICAgIGV4dGVybiBpbnQgc2Fm ZWFuc3dlcmJrOworICAgICAgICAgICAgICBleHRlcm4gY2hhciB1c2VyYW5zd2VyYmtbXTsKKyAg ICAgICAgICAgICAgaWYgKCh5ID0gY210eHQoIkFuc3dlcmJhY2sgZXh0ZW5zaW9uIiwiIiwmcyx4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAg IGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisgICAgICAgICAgICAgICAgICAoYXBjYWN0 aXZlID09IEFQQ19SRU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKQorICAgICAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICAgIGxlbiA9IHN0cmxlbihz KTsKKyAgICAgICAgICAgICAgaWYgKHggPT0gMikgeworICAgICAgICAgICAgICAgICAgLyogU2Fm ZSBBbnN3ZXJiYWNrJ3MgZG9uJ3QgaGF2ZSBDMC9DMSBjaGFycyAqLworICAgICAgICAgICAgICAg ICAgZm9yICh6ID0gMDsgeiA8IGxlbjsgeisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYg KChzW3pdICYgMHg3RikgPD0gU1AgfHwgKHNbel0gJiAweDdGKSA9PSBERUwpCisgICAgICAgICAg ICAgICAgICAgICAgICB1c2VyYW5zd2VyYmtbel0gPSAnXyc7CisgICAgICAgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmFuc3dlcmJrW3pdID0gc1t6XTsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHVzZXJhbnN3ZXJia1t6XSA9 ICdcMCc7CisgICAgICAgICAgICAgICAgICBzYWZlYW5zd2VyYmsgPSAxIDsgICAgLyogVFJVRSAq LworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHVz ZXJhbnN3ZXJiayxzLDYwKTsgLyogKHNlZSBja29jb24uYykgKi8KKyAgICAgICAgICAgICAgICAg IHNhZmVhbnN3ZXJiayA9IDA7ICAgICAvKiBGQUxTRSAqLworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIHVwZGFuc3dlcmJrKCk7CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7CisgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor ICAgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tfQVBDCisgICAgICBjYXNlIFhZ VEFQQzoKKyAgICAgICAgaWYgKCh5ID0gY21rZXkoYXBjdGFiLG5hcGN0YWIsCisgICAgICAgICAg ICAgICAgICAgICAgICJhcHBsaWNhdGlvbiBwcm9ncmFtIGNvbW1hbmQgZXhlY3V0aW9uIiwiIiwK KyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAorICAgICAgICAgICAgKGFw Y2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkKKyAgICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBhcGNzdGF0dXMgPSB5OworICAgICAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisjaWZkZWYgQ0tfQVVUT0RMCisgICAgICBjYXNlIFhZ VEFVVE9ETDogICAgICAgICAgICAgICAgICAgLyogQVVUT0RPV05MT0FEICovCisgICAgICAgIGlm ICgoeSA9IGNta2V5KGFkbHRhYixuYWRsdGFiLCJBdXRvLWRvd25sb2FkIG9wdGlvbnMiLCIiLAor ICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4o eSk7CisgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgIGNhc2UgVEFEX09OOgorICAgICAg ICAgIGNhc2UgVEFEX09GRjoKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAg ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgc2V0YXV0b2RsKHksMCk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRBRF9BU0s6CisgICAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAg IHNldGF1dG9kbChUQURfT04sMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl IFRBRF9FUlI6CisgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShhZGxlcnJ0YWIsbmFkbGVycnRh YiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAg ICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICAgICAgYWRsX2VyciA9IHk7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBPUzIK KyAgICAgICAgICBjYXNlIFRBRF9LOgorICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYWRseHRh YixuYWRseHRhYiwiIiwiIiwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5 KTsKKyAgICAgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgICAgICBjYXNlIFRBRF9YX0Mw OgorICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KGFkbGMwdGFiLG5hZGxjMHRhYiwiIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvY2Vzc2VkLWJ5LWVtdWxhdG9yIix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgICAgICAgICAgYWRsX2tjMCA9IHk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIGNhc2UgVEFEX1hfREVURUNUOgorICAgICAgICAgICAgICAgIGlmICgoeSA9 IGNta2V5KGFkbGR0YWIsbmFkbGR0YWIsIiIsInBhY2tldCIseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgIGFk bF9rbW9kZSA9IHk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug VEFEX1hfU1RSOgorICAgICAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJLZXJtaXQgc3RhcnQg c3RyaW5nIiwiS0VSTUlUIFJFQURZIFRPIFNFTkQuLi4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkp OworICAgICAgICAgICAgICAgIGZyZWUoYWRsX2tzdHIpOworICAgICAgICAgICAgICAgIGFkbF9r c3RyID0gc3RyZHVwKHMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFRBRF9aOgorICAgICAgICAgICAg aWYgKCh5ID0gY21rZXkoYWRseHRhYixuYWRseHRhYiwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgc3dpdGNoICh5KSB7CisgICAgICAg ICAgICAgIGNhc2UgVEFEX1hfQzA6CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYWRs YzB0YWIsbmFkbGMwdGFiLCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9j ZXNzZWQtYnktZW11bGF0b3IiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0 dXJuKHkpOworICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAg ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICBhZGxfemMwID0geTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUQURfWF9ERVRFQ1Q6CisgICAg ICAgICAgICAgICAgaWYgKCh5ID0gY21rZXkoYWRsZHRhYixuYWRsZHRhYiwiIiwicGFja2V0Iix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgICAgICAgICAgYWRsX3ptb2RlID0geTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgY2FzZSBUQURfWF9TVFI6CisgICAgICAgICAgICAgICAgaWYgKCh5ID0g Y210eHQoIiIsInJ6XFx7MTN9Iiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAg IHJldHVybih5KTsKKyAgICAgICAgICAgICAgICBmcmVlKGFkbF96c3RyKTsKKyAgICAgICAgICAg ICAgICBhZGxfenN0ciA9IHN0cmR1cChzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICB9 CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNlbmRpZiAvKiBDS19BVVRPREwgKi8K KyNlbmRpZiAvKiBDS19BUEMgKi8KKworI2lmZGVmIE9TMgorICAgICAgY2FzZSBYWVRCRUw6Cisg ICAgICAgIHJldHVybihzdWNjZXNzID0gc2V0YmVsbCgpKTsKKworICAgICAgY2FzZSBYWVRNQkVM OiAgICAgICAgICAgICAgICAgICAgIC8qIE1BUkdJTi1CRUxMICovCisgICAgICAgIGlmICgoeSA9 IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAg ICBpZiAoeSkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9OICovCisgICAgICAgICAgICBp ZiAoKHogPSBjbW51bSgiQ29sdW1uIGF0IHdoaWNoIHRvIHNldCBtYXJnaW4gYmVsbCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAiNzIiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgICAgICByZXR1cm4oeik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeik7CisgICAgICAgIG1hcmdpbmJlbGwgPSB5OworICAgICAgICBtYXJnaW5i ZWxsY29sID0geDsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBPUzIg Ki8KKworI2lmZGVmIENLVElETEUKKyAgICAgIGNhc2UgWFlUSURMRTogICAgICAgICAgICAgICAg ICAgICAvKiBJRExFLVNFTkQgKi8KKyAgICAgIGNhc2UgWFlUSVRNTzogICAgICAgICAgICAgICAg ICAgICAvKiBJRExFLVRJTUVPVVQgKi8KKyAgICAgICAgaWYgKCh6ID0gY21udW0oInNlY29uZHMg b2YgaWRsZSB0aW1lIHRvIHdhaXQsIG9yIDAgdG8gZGlzYWJsZSIsCisgICAgICAgICAgICAgICAg ICAgICAgICIwIiwxMCwmeCx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7Cisg ICAgICAgIGlmICh5ID09IFhZVElETEUpIHsKKyAgICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCJz dHJpbmcgdG8gc2VuZCwgbWF5IGNvbnRhaW4ga3ZlcmJzIGFuZCB2YXJpYWJsZXMiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlxcdihuZXdsaW5lKSIsJnMseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIHR0X2lkbGVzbmRfdG1vID0geDsg ICAgICAgICAvKiAob2xkKSAqLworICAgICAgICAgICAgdHRfaWRsZWxpbWl0ID0geDsgICAgICAg ICAgIC8qIChuZXcpICovCisgICAgICAgICAgICBtYWtlc3RyKCZ0dF9pZGxlc3RyLGJyc3RyaXAo cykpOyAvKiAobmV3KSAqLworICAgICAgICAgICAgdHRfaWRsZXNuZF9zdHIgPSB0dF9pZGxlc3Ry OyAvKiAob2xkKSAqLworICAgICAgICAgICAgdHRfaWRsZWFjdCA9IElETEVfT1VUOyAgICAgIC8q IChuZXcpICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgp KSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIHR0X2lkbGVsaW1p dCA9IHg7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgcHV0ZXJyb3IoVlRFUk0pOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBj YXNlIFhZVElBQ1Q6IHsgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk0gSURMRS1BQ1RJT04g Ki8KKyAgICAgICAgICBpZiAoKHkgPSBjbWtleShpZGxhY3RzLG5pZGxhY3RzLCIiLCIiLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgIGlmICh5ID09IElE TEVfT1VUKSB7CisgICAgICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJzdHJpbmcgdG8gc2VuZCwg bWF5IGNvbnRhaW4ga3ZlcmJzIGFuZCB2YXJpYWJsZXMiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICwgIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICAgICAgICBtYWtlc3RyKCZ0dF9pZGxlc3RyLGJyc3RyaXAocykpOyAvKiAobmV3 KSAqLworICAgICAgICAgICAgICB0dF9pZGxlc25kX3N0ciA9IHR0X2lkbGVzdHI7IC8qIChvbGQp ICovCisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICB9CisgICAgICAgICAg dHRfaWRsZWFjdCA9IHk7CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0K KyNlbmRpZiAvKiBDS1RJRExFICovCisKKyAgICAgIGNhc2UgWFlUREVCOiAgICAgICAgICAgICAg ICAgICAgICAvKiBURVJNSU5BTCBERUJVRyAqLworICAgICAgICB5ID0gc2V0b24oJngpOyAgICAg ICAgICAgICAgICAgIC8qIEdvIHBhcnNlIE9OIG9yIE9GRiAqLworICAgICAgICBpZiAoeSA+IDAp ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgc3VjY2VlZGVkPyAqLworICAgICAgICAg IHNldGRlYnNlcyh4KTsKKyAgICAgICAgcmV0dXJuKHkpOworCisjaWZkZWYgT1MyCisgICAgICBj YXNlIFhZVEFTQ1JMOiAgICAgICAgICAgICAgICAgICAgLyogU0VUIFRFUk1JTkFMIEFVVE9TQ1JP TEwgKi8KKyAgICAgICAgICB5ID0gc2V0b24oJmF1dG9zY3JvbGwpOworICAgICAgICAgIHJldHVy bih5KTsKKworICAgICAgY2FzZSBYWVRBUEFHRTogICAgICAgICAgICAgICAgICAgIC8qIFNFVCBU RVJNSU5BTCBBVVRPUEFHRSAqLworICAgICAgICAgIHkgPSBzZXRvbigmd3lfYXV0b3BhZ2UpOwor ICAgICAgICAgIHJldHVybih5KTsKKworICAgICAgY2FzZSBYWVRST0w6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNFVCBURVJNSU5BTCBST0xMICovCisgICAgICAgIGlmICgoeSA9IGNta2V5KHJv bGx0YWIsbnJvbGwsInNjcm9sbGJhY2sgbW9kZSIsImluc2VydCIseHhzdHJpbmcpKTwwKQorCSAg cmV0dXJuKHkpOworCWlmICh5ID09IFRUUl9LRVlTKSB7CisJICAgIGlmICgoeCA9IGNta2V5KHJv bGxrZXl0YWIsbnJvbGxrZXksIiIsInNlbmQiLHh4c3RyaW5nKSk8MCkKKwkgICAgICByZXR1cm4o eCk7CisJICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworCSAgICB0dF9ya2V5 c1tWVEVSTV0gPSB4OworCX0gZWxzZSB7CisJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHgpOworCSAgICB0dF9yb2xsW1ZURVJNXSA9IHk7CisJfQorICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZVENUUzogICAgICAgICAgICAgICAgICAgICAgLyog U0VUIFRFUk1JTkFMIFRSQU5TTUlULVRJTUVPVVQgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJNYXhp bXVtIHNlY29uZHMgdG8gYWxsb3cgQ1RTIG9mZiBkdXJpbmcgQ09OTkVDVCIsCisgICAgICAgICAg ICAgICAgICAiNSIsMTAsJngseHhzdHJpbmcpOworICAgICAgICByZXR1cm4oc2V0bnVtKCZ0dF9j dHN0bW8seCx5LDEwMDAwKSk7CisKKyAgICAgIGNhc2UgWFlUQ1BHOiB7ICAgICAgICAgICAgICAg ICAgICAvKiBTRVQgVEVSTUlOQUwgQ09ERS1QQUdFICovCisgICAgICAgIGludCBpOworICAgICAg ICBpbnQgY3AgPSAtMTsKKyAgICAgICAgeSA9IGNtbnVtKCJQQyBjb2RlIHBhZ2UgdG8gdXNlIGR1 cmluZyB0ZXJtaW5hbCBlbXVsYXRpb24iLAorICAgICAgICAgICAgICAgICAgY2tpdG9hKG9zMmdl dGNwKCkpLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgaWYgKCh4ID0gc2V0bnVtKCZjcCx4LHks MTEwMDApKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKG9zMnNldGNwKGNwKSAhPSAxKSB7 CisjaWZkZWYgTlQKKyAgICAgICAgICAgIGlmIChpc1dpbjk1KCkpCisgICAgICAgICAgICAgIHBy aW50ZigKKyAgICAgICAgICAgICAgICAgIlNvcnJ5LCBXaW5kb3dzIDk1IGRvZXMgbm90IHN1cHBv cnQgY29kZSBwYWdlIHN3aXRjaGluZ1xuIik7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyog TlQgKi8KKyAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAgICAgICAgICAgICAiU29ycnksICVk IGlzIG5vdCBhIHZhbGlkIGNvZGUgcGFnZSBmb3IgdGhpcyBzeXN0ZW0uXG4iLGNwKTsKKyAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyAgICAvKiBGb3JjZSB0aGUgdGVybWluYWwg Y2hhcmFjdGVyLXNldHMgY29udmVyc2lvbnMgdG8gYmUgdXBkYXRlZCAqLworICAgICAgICBmb3Ig KCBpID0gMDsgaSA8IDQ7IGkrKyApCisgICAgICAgICAgR1tpXS5pbml0ID0gVFJVRTsKKyAgICAg ICAgcmV0dXJuKDEpOworICAgIH0KKworICAgICAgY2FzZSBYWVRQQUM6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFNFVCBURVJNSU5BTCBPVVRQVVQtUEFDSU5HICovCisgICAgICAgIHkgPSBjbW51 bSgKKyAgICAgICAgICAgIlBhdXNlIGJldHdlZW4gc2VuZGluZyBlYWNoIGNoYXJhY3RlciBkdXJp bmcgQ09OTkVDVCwgbWlsbGlzZWNvbmRzIiwKKyAgICAgICAgICAgICAgICAgICItMSIsMTAsJngs eHhzdHJpbmcpOworICAgICAgICByZXR1cm4oc2V0bnVtKCZ0dF9wYWNpbmcseCx5LDEwMDAwKSk7 CisKKyNpZmRlZiBPUzJNT1VTRQorICAgICAgY2FzZSBYWVRNT1U6IHsgICAgICAgICAgICAgICAg ICAgIC8qIFNFVCBURVJNSU5BTCBNT1VTRSAqLworICAgICAgICAgIGludCBvbGRfbW91ID0gdHRf bW91c2U7CisgICAgICAgICAgaWYgKCh4ID0gc2V0b24oJnR0X21vdXNlKSkgPCAwKQorICAgICAg ICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICh0dF9tb3VzZSAhPSBvbGRfbW91KQorICAg ICAgICAgICAgaWYgKHR0X21vdXNlKQorICAgICAgICAgICAgICBvczJfbW91c2VvbigpOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBvczJfbW91c2VvZmYoKTsKKyAgICAgICAgICBy ZXR1cm4oMSk7CisgICAgICB9CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKworICAgICAgY2FzZSBYWVRXSUQ6IHsKKyAgICAgICAgICBpZiAoKHkgPSBjbW51bSgKKyNp ZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibnVtYmVyIG9mIGNvbHVtbnMgaW4g ZGlzcGxheSB3aW5kb3cgZHVyaW5nIENPTk5FQ1QiLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAg ICAgICAgICAibnVtYmVyIG9mIGNvbHVtbnMgb24geW91ciBzY3JlZW4iLAorI2VuZGlmIC8qIE9T MiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICI4MCIsMTAsJngseHhzdHJpbmcpKSA8IDAp CisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7CisjaWZkZWYgT1MyCisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBvczJf c2V0dGVybXdpZHRoKHgpKTsKKyNlbHNlICAvKiBOb3QgT1MvMiAqLworICAgICAgICAgIHR0X2Nv bHMgPSB4OworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisjZW5kaWYgLyogT1MyICov CisgICAgICB9CisKKyAgICAgIGNhc2UgWFlUSElHOgorICAgICAgICBpZiAoKHkgPSBjbW51bSgK KyNpZmRlZiBPUzIKKyAibnVtYmVyIG9mIHJvd3MgaW4gZGlzcGxheSB3aW5kb3cgZHVyaW5nIENP Tk5FQ1QsIG5vdCBpbmNsdWRpbmcgc3RhdHVzIGxpbmUiLAorIHR0X3N0YXR1c1tWVEVSTV0/IjI0 IjoiMjUiLAorI2Vsc2UKKyAiMjQiLCJudW1iZXIgb2Ygcm93cyBvbiB5b3VyIHNjcmVlbiIsCisj ZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgICAgIDEwLCZ4LHh4c3RyaW5nKSkg PCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7CisKKyNpZmRlZiBPUzIKKyAgICAgICAgcmV0dXJuIChzdWNjZXNzID0gb3My X3NldHRlcm1oZWlnaHQoeCkpOworI2Vsc2UgIC8qIE5vdCBPUy8yICovCisgICAgICAgIHR0X3Jv d3MgPSB4OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2VuZGlmIC8qIE9TMiAqLwor CisjaWZkZWYgT1MyCisgICAgICBjYXNlIFhZVFBSTjogeyAgICAgICAgICAgICAgICAgICAgLyog UHJpbnQgTW9kZSAqLworICAgICAgICAgIGV4dGVybiBib29sIHhwcmludCwgYXByaW50LCBjcHJp bnQsIHVwcmludDsKKyAgICAgICAgICBpZiAoKHkgPSBjbWtleShwcm5tdGFiLG5wcm5tdGFiLCIi LCJvZmYiLCB4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAg ICAgY2FzZSAwOgorICAgICAgICAgICAgICBpZiAoY3ByaW50IHx8IHVwcmludCB8fCBhcHJpbnQg fHwgeHByaW50KQorICAgICAgICAgICAgICAgIHByaW50ZXJvZmYoKTsKKyAgICAgICAgICAgICAg Y3ByaW50ID0geHByaW50ID0gdXByaW50ID0gMDsKKyAgICAgICAgICAgICAgc2V0YXByaW50KDAp OworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAg ICAgaWYgKCEoY3ByaW50IHx8IHVwcmludCB8fCBhcHJpbnQgfHwgeHByaW50KSkKKyAgICAgICAg ICAgICAgICBwcmludGVyb24oKTsKKyAgICAgICAgICAgICAgc2V0YXByaW50KDEpOworICAgICAg ICAgICAgICBjcHJpbnQgPSB4cHJpbnQgPSB1cHJpbnQgPSAwOworICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgaWYgKCEoY3ByaW50IHx8IHVw cmludCB8fCBhcHJpbnQgfHwgeHByaW50KSkKKyAgICAgICAgICAgICAgICBwcmludGVyb24oKTsK KyAgICAgICAgICAgICAgY3ByaW50ID0gMTsKKyAgICAgICAgICAgICAgc2V0YXByaW50KDApOwor CSAgICAgIHhwcmludCA9IHVwcmludCA9IDA7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICBpZiAoIShjcHJpbnQgfHwgdXByaW50IHx8IGFw cmludCB8fCB4cHJpbnQpKQorICAgICAgICAgICAgICAgIHByaW50ZXJvbigpOworICAgICAgICAg ICAgICB1cHJpbnQgPSAxOworICAgICAgICAgICAgICBzZXRhcHJpbnQoMCk7CisgICAgICAgICAg ICAgIHhwcmludCA9IGNwcmludCA9IDA7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg IH0KKyAgICAgICAgICByZXR1cm4oMSk7CisgICAgICB9CisjZWxzZQorI2lmZGVmIFhQUklOVAor ICAgICAgY2FzZSBYWVRQUk46IHsKKyAgICAgICAgICBleHRlcm4gaW50IHR0X3ByaW50OworICAg ICAgICAgIGlmICgoeCA9IHNldG9uKCZ0dF9wcmludCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorI2VuZGlmIC8q IFhQUklOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgT1MyCisgICAgICBjYXNlIFhZ VFNDTk06IHsKKyAgICAgICAgICBleHRlcm4gaW50IGRlY3Njbm0sIGRlY3Njbm1fdXNyOworICAg ICAgICAgIGlmICgoeSA9IGNta2V5KG5vcm1yZXYsNCwiIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBkZWNzY25tX3Vzcj8icmV2ZXJzZSI6Im5vcm1hbCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgeHhzdHJpbmcpCisgICAgICAgICAgICAgICApIDwgMCkKKyAgICAgICAgICAgIHJldHVy bih5KTsKKyAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAg ICAgICBkZWNzY25tX3VzciA9IHk7CisgICAgICAgICAgaWYgKGRlY3Njbm0gIT0gZGVjc2NubV91 c3IpCisgICAgICAgICAgICBmbGlwc2NyZWVuKFZURVJNKTsKKyAgICAgICAgICByZXR1cm4oMSk7 CisgICAgfQorICAgIGNhc2UgWFlUT1BUSToKKyAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYs MiwiIix0dF9kaWZmX3VwZD8ib24iOiJvZmYiLAorICAgICAgICAgICAgICAgICAgICAgICAgeHhz dHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSBy ZXR1cm4oeCk7CisgICAgICAgIHR0X2RpZmZfdXBkID0geTsKKyAgICAgICAgcmV0dXJuKDEpOwor ICAgIGNhc2UgWFlUVVBEOiB7CisgICAgICAgIGludCBtb2RlLCBkZWxheTsKKyAgICAgICAgaWYg KChtb2RlID0gY21rZXkoc2NybnVwZCxuc2NybnVwZCwiIiwiZmFzdCIseHhzdHJpbmcpKSA8IDAp IHsKKyAgICAgICAgICAgIHJldHVybihtb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHkgPSBjbW51bSgKKyAgICAgICAgICAgICJQYXVzZSBiZXR3ZWVuIEZBU1Qgc2NyZWVuIHVw ZGF0ZXMgaW4gQ09OTkVDVCBtb2RlLCBtaWxsaXNlY29uZHMiLAorICAgICAgICAgICAgICAgICAg ICAgICIxMDAiLDEwLCZ4LHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgIGlmICh4IDwgMCB8fCB4ID4gMTAwMCApIHsKKyAgICAgICAgICAgICAgICBwcmludGYo CisgICAgICAgICAgICAiXG4/VGhlIHVwZGF0ZSByYXRlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAx MDAwIG1pbGxpc2Vjb25kcy5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisKKyAgICAgICAgICAgIHVwZG1vZGUg PSB0dF91cGRtb2RlID0gbW9kZTsKKyAgICAgICAgICAgIHJldHVybihzZXRudW0oJnR0X3VwZGF0 ZSx4LHksMTAwMDApKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXNlIFhZVENUUkw6CisgICAg ICAgICAgaWYgKCh4ID0gY21rZXkodGVybWN0cmwsbnRlcm1jdHJsLCIiLCI3Iix4eHN0cmluZykp IDwgMCkgeworICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0 dXJuKHkpOworICAgICAgICAgICAgICBzd2l0Y2ggKCB4ICkgeworICAgICAgICAgICAgICBjYXNl IDg6CisgICAgICAgICAgICAgICAgICBzZW5kX2MxID0gc2VuZF9jMV91c3IgPSBUUlVFOworICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAg ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgIHNlbmRfYzEgPSBzZW5kX2MxX3VzciA9IEZB TFNFOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICB9CisgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBUUlVFKTsKKyAgICAgICAgICBicmVhazsK KworI2lmZGVmIFBDRk9OVFMKKyAgICAgIGNhc2UgWFlURk9OOgorICAgICAgICBpZiAoICFJc09T MkZ1bGxTY3JlZW4oKSApIHsKKyAgICAgICAgICAgIHByaW50ZigKKyAgICAgICAgIlxuP1NFVCBU RVJNSU5BTCBGT05UIGlzIG9ubHkgc3VwcG9ydGVkIGluIEZ1bGwgU2NyZWVuIHNlc3Npb25zLlxu Iik7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IEZBTFNFKTsKKyAgICAgICAgfQorCisg ICAgICAgIGlmICgoeCA9IGNta2V5KHRlcm1fZm9udCxudGVybWZvbnQsIiIsImRlZmF1bHQiLHh4 c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAg ICAgIGlmICggIW9zMkxvYWRQQ0ZvbnRzKCkgKSB7CisgICAgICAgICAgICAgICAgdHRfZm9udCA9 IHg7CisgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBUUlVFKTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKAorICAgICAgIlxuP1BDRk9OVFMuRExM IGlzIG5vdCBhdmFpbGFibGUgaW4gQ0tFUk1JVCBleGVjdXRhYmxlIGRpcmVjdG9yeS5cbiIpOwor ICAgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gRkFMU0UpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2Vsc2UgLyogUENGT05UUyAqLworI2lmZGVmIE5U CisjaWZkZWYgS1VJCisgICAgY2FzZSBYWVRGT046CisgICAgICAgIHJldHVybihzZXRndWlmb250 KCkpOyAgICAgICAgICAgLyogY2t1dXMzLmMgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNlbmRpZiAv KiBOVCAqLworI2VuZGlmIC8qIFBDRk9OVFMgKi8KKworICAgICAgY2FzZSBYWVRWQ0g6IHsKKyAg ICAgICAgICBleHRlcm4gaW50IHBoZWlnaHQsIG1hcmdpbmJvdCwgY21kX3Jvd3MsIGNtZF9jb2xz OworICAgICAgICAgIGlmICgoeCA9IGNta2V5KHR2Y3RhYixudHZjdGFiLCIiLGlzV2luOTUoKT8i d2luOTUtc2FmZSI6ImVuYWJsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmICgoeSA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHkpOworI2lmbmRlZiBLVUkKKyAgICAgICAgICBpZiAoeCAhPSB0dF9t b2RlY2hnKSB7CisgICAgICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICAgIGNh c2UgVFZDX0RJUzoKKyAgICAgICAgICAgICAgICAgIC8qIFdoZW4gZGlzYWJsZWQgdGhlIGhlaWdo dHMgb2YgYWxsIG9mIHRoZSB2aXJ0dWFsIHNjcmVlbnMgKi8KKyAgICAgICAgICAgICAgICAgIC8q IG11c3QgYmUgZXF1YWwgdG8gdGhlIHBoeXNpY2FsIGhlaWdodCBvZiB0aGUgY29uc29sZSAgICAg Ki8KKyAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyBhbmQgbWF5IG5vdCBiZSBjaGFuZ2VkLiAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgIC8qIFRoZSB3aWR0 aCBvZiB0aGUgd2luZG93IG1heSBub3QgYmUgYWx0ZXJlZC4gICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgICAgICAgIHR0X21vZGVjaGcgPSBUVkNfRU5BOyAgICAgICAgICAgICAgICAgLyogVGVt cG9yYXJ5ICovCisgICAgICAgICAgICAgICAgICBpZiAobWFyZ2luYm90ID4gcGhlaWdodC0odHRf c3RhdHVzW1ZURVJNXT8xOjApKQorICAgICAgICAgICAgICAgICAgICBtYXJnaW5ib3QgPSBwaGVp Z2h0LSh0dF9zdGF0dXNbVlRFUk1dPzE6MCk7CisgICAgICAgICAgICAgICAgICB0dF9zemNobmdb VkNNRF0gPSAxIDsKKyAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVkNNRF0gPSBwaGVpZ2h0Owor ICAgICAgICAgICAgICAgICAgVnNjcm5Jbml0KFZDTUQpOworICAgICAgICAgICAgICAgICAgU2V0 Q29scyhWQ01EKTsKKyAgICAgICAgICAgICAgICAgIGNtZF9yb3dzID0geTsKKworICAgICAgICAg ICAgICAgICAgdHRfc3pjaG5nW1ZURVJNXSA9IDIgOworICAgICAgICAgICAgICAgICAgdHRfcm93 c1tWVEVSTV0gPSBwaGVpZ2h0IC0gKHR0X3N0YXR1c1tWVEVSTV0/MTowKTsKKyAgICAgICAgICAg ICAgICAgIFZzY3JuSW5pdChWVEVSTSk7CisKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgICAgICAgICAgY2FzZSBUVkNfRU5BOgorICAgICAgICAgICAgICAgICAgLyogV2hlbiBl bmFibGVkIHRoZSBwaHlzaWNhbCBoZWlnaHQgb2YgdGhlIGNvbnNvbGUgd2luZG93cyAqLworICAg ICAgICAgICAgICAgICAgLyogc2hvdWxkIGJlIGFkanVzdGVkIHRvIHRoZSBoZWlnaHQgb2YgdGhl IHZpcnR1YWwgc2NyZWVuICAqLworICAgICAgICAgICAgICAgICAgLyogVGhlIHdpZHRoIG1heSBi ZSBzZXQgdG8gYW55dGhpbmcuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAg ICAgICAgLyogbm90aGluZyB0byBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2Fz ZSBUVkNfVzk1OgorICAgICAgICAgICAgICAgICAgLyogV2luOTUtc2FmZSBtb2RlIGFsbG93cyB0 aGUgcGh5c2ljYWwgaGVpZ2h0IHRvIGNoYW5nZSAgICAqLworICAgICAgICAgICAgICAgICAgLyog YnV0IHJlc3RyaWN0cyBpdCB0byBhIHdpZHRoIG9mIDgwIGFuZCBhIGhlaWdodCBlcXVhbCB0byAq LworICAgICAgICAgICAgICAgICAgLyogMjUsIDQzLCBvciA1MC4gIE11c3QgYmUgYWRqdXN0ZWQg bm93LiAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgLyogVGhlIHZpcnR1 YWwgaGVpZ2h0cyBtdXN0IGJlIGVxdWFsIHRvIHRoZSBhYm92ZS4gICAgICAgICAqLworICAgICAg ICAgICAgICAgICAgaWYgKHBoZWlnaHQgIT0gMjUgJiYgcGhlaWdodCAhPSA0MyAmJiBwaGVpZ2h0 ICE9IDUwKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHBoZWlnaHQgPCAyNSkKKyAgICAg ICAgICAgICAgICAgICAgICAgIHkgPSAyNTsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm IChwaGVpZ2h0IDwgNDMpCisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gNDM7CisgICAgICAg ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDUwOworICAg ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHkgPSBwaGVpZ2h0Owor CisgICAgICAgICAgICAgICAgICB0dF9tb2RlY2hnID0gVFZDX0VOQTsgLyogVGVtcG9yYXJ5ICov CisKKyAgICAgICAgICAgICAgICAgIHR0X3N6Y2huZ1tWQ01EXSA9IDE7CisgICAgICAgICAgICAg ICAgICB0dF9yb3dzW1ZDTURdID0geTsKKyAgICAgICAgICAgICAgICAgIHR0X2NvbHNbVkNNRF0g PSA4MDsKKyAgICAgICAgICAgICAgICAgIFZzY3JuSW5pdChWQ01EKTsKKyAgICAgICAgICAgICAg ICAgIFNldENvbHMoVkNNRCk7CisgICAgICAgICAgICAgICAgICBjbWRfcm93cyA9IHk7CisgICAg ICAgICAgICAgICAgICBjbWRfY29scyA9IDgwOworCisgICAgICAgICAgICAgICAgICBtYXJnaW5i b3QgPSB5LSh0dF9zdGF0dXNbVlRFUk1dPzE6MCk7CisgICAgICAgICAgICAgICAgICB0dF9zemNo bmdbVlRFUk1dID0gMjsKKyAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVlRFUk1dID0geSAtICh0 dF9zdGF0dXNbVlRFUk1dPzE6MCk7CisgICAgICAgICAgICAgICAgICB0dF9jb2xzW1ZURVJNXSA9 IDgwOworICAgICAgICAgICAgICAgICAgVnNjcm5Jbml0KFZURVJNKTsKKyAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHR0X21vZGVjaGcgPSB4 OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2Vsc2UKKyAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIEtVSSAqLworICAgICAgfQor ICAgICAgY2FzZSBYWVRTVEFUOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBtYXJnaW5ib3Q7Cisg ICAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSBy ZXR1cm4oeSk7CisgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7Cisg ICAgICAgICAgaWYgKHkgIT0gdHRfc3RhdHVzW1ZURVJNXSB8fCB5ICE9IHR0X3N0YXR1c191c3Jb VlRFUk1dKSB7CisgICAgICAgICAgICAgIC8qIE1pZ2h0IG5lZWQgdG8gZml4dXAgdGhlIG1hcmdp bnMgKi8KKyAgICAgICAgICAgICAgaWYgKCBtYXJnaW5ib3QgPT0gVnNjcm5HZXRIZWlnaHQoVlRF Uk0pLSh0dF9zdGF0dXNbVlRFUk1dPzE6MCkgKQorICAgICAgICAgICAgICAgIGlmICh5KSB7Cisg ICAgICAgICAgICAgICAgICAgIG1hcmdpbmJvdC0tOworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIG1hcmdpbmJvdCsrOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgdHRfc3RhdHVzX3VzcltWVEVSTV0gPSB0dF9zdGF0dXNbVlRFUk1dID0geTsK KyAgICAgICAgICAgICAgaWYgKHkpIHsKKyAgICAgICAgICAgICAgICAgICAgdHRfc3pjaG5nW1ZU RVJNXSA9IDI7CisgICAgICAgICAgICAgICAgICAgIHR0X3Jvd3NbVlRFUk1dLS07CisgICAgICAg ICAgICAgICAgICAgIFZzY3JuSW5pdChWVEVSTSk7ICAvKiBIZWlnaHQgc2V0IGhlcmUgKi8KKyNp ZmRlZiBUTkNPREUKKyAgICAgICAgICAgICAgICAgICAgaWYgKFRFTE9QVF9NRShURUxPUFRfTkFX UykpCisgICAgICAgICAgICAgICAgICAgICAgdG5fc25hd3MoKTsKKyNlbmRpZiAvKiBUTkNPREUg Ki8KKyNpZmRlZiBSTE9HQ09ERQorICAgICAgICAgICAgICAgICAgICBpZiAoVEVMT1BUX01FKFRF TE9QVF9OQVdTKSkKKyAgICAgICAgICAgICAgICAgICAgICBybG9nX25hd3MoKTsKKyNlbmRpZiAv KiBSTE9HQ09ERSAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgICAgICAgICAgICAgaWYg KFRFTE9QVF9NRShURUxPUFRfTkFXUykpCisgICAgICAgICAgICAgICAgICAgICAgc3NoX3NuYXdz KCk7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgdHRfc3pjaG5nW1ZURVJNXSA9IDE7CisgICAgICAgICAgICAgICAgICB0 dF9yb3dzW1ZURVJNXSsrOworICAgICAgICAgICAgICAgICAgVnNjcm5Jbml0KFZURVJNKTsgICAg IC8qIEhlaWdodCBzZXQgaGVyZSAqLworI2lmZGVmIFROQ09ERQorICAgICAgICAgICAgICAgICAg aWYgKFRFTE9QVF9NRShURUxPUFRfTkFXUykpCisgICAgICAgICAgICAgICAgICAgIHRuX3NuYXdz KCk7CisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgICAgICAg ICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX05BV1MpKQorICAgICAgICAgICAgICAgICAgICBybG9n X25hd3MoKTsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAg ICAgICAgICAgICAgIGlmIChURUxPUFRfTUUoVEVMT1BUX05BV1MpKQorICAgICAgICAgICAgICAg ICAgICBzc2hfc25hd3MoKTsKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisgICAgICAgICAgICAg IH0KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuKDEpOworICAgICAgfQorI2VuZGlmIC8q IE9TMiAqLworCisjaWZkZWYgTlQKKyAgICAgIGNhc2UgWFlUQVRUQlVHOgorICAgICAgICBpZiAo KHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIHR0X2F0dHJf YnVnID0geTsKKyAgICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIE5UICovCisKKyNpZmRlZiBP UzIKKyAgICAgIGNhc2UgWFlUU0dSQzoKKyAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwi Iiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBzZ3Jjb2xvcnMgPSB5OworICAgICAgICByZXR1 cm4oMSk7CisKKyAgICAgIGNhc2UgWFlUU0VORDoKKyAgICAgICAgICBpZiAoKHkgPSBjbWtleShv bm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICB0dF9zZW5kZGF0YSA9IHk7 CisgICAgICAgICAgcmV0dXJuKDEpOworCisgICAgICBjYXNlIFhZVFNFT0I6CisgICAgICAgICAg aWYgKCh5ID0gY21rZXkodHR5c2VvYnRhYiwyLCIiLCJ1c19jciIseHhzdHJpbmcpKSA8IDApIHJl dHVybih5KTsKKyAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAg ICAgICAgICB3eV9ibG9ja2VuZCA9IHk7CisgICAgICAgICAgcmV0dXJuKDEpOworCisgICAgICBj YXNlIFhZVFVSTEhJOiB7CisgICAgICAgICAgaW50IGRvbmUgPSAwLCBhdHRyID0gVlRfQ0hBUl9B VFRSX05PUk1BTDsKKworICAgICAgICAgIGlmICgoeCA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBpZiAoeCkg eworICAgICAgICAgICAgICB6ID0gMDsKKyAgICAgICAgICAgICAgd2hpbGUgKCFkb25lKSB7Cisg ICAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0dHlwcm90YWIsbnByb3RlY3QsIiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6PyJkb25lIjoicmV2ZXJzZSIseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAg ICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRURE9ORToKKyAg ICAgICAgICAgICAgICAgICAgICBkb25lID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVEJMSToKKyAgICAgICAgICAgICAg ICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRUUl9CTElOSzsKKyAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVFJFVjoKKyAgICAgICAgICAg ICAgICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRUUl9SRVZFUlNFOworICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUSVRBOgorICAgICAg ICAgICAgICAgICAgICAgIGF0dHIgfD0gVlRfQ0hBUl9BVFRSX0lUQUxJQzsKKyAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFUVFVORDoKKyAg ICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRUUl9VTkRFUkxJTkU7CisgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRC TEQ6CisgICAgICAgICAgICAgICAgICAgICAgYXR0ciB8PSBWVF9DSEFSX0FUVFJfQk9MRDsKKyAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFU VERJTToKKyAgICAgICAgICAgICAgICAgICAgICBhdHRyIHw9IFZUX0NIQVJfQVRUUl9ESU07Cisg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVFRB VFRJTlY6CisgICAgICAgICAgICAgICAgICAgICAgYXR0ciB8PSBWVF9DSEFSX0FUVFJfSU5WSVNJ QkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj YXNlIFRUQVRUTk9SOgorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgeiA9IDE7ICAgICAgICAgICAgICAgIC8qIE9uZSBh dHRyaWJ1dGUgaGFzIGJlZW4gY2hvc2VuICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9 CisgICAgICAgICAgaWYgKCh6ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgICAg c2V0dXJsaGwoeCk7CisgICAgICAgICAgaWYgKHgpCisgICAgICAgICAgICB0dF91cmxfaGlsaXRl X2F0dHIgPSBhdHRyOworICAgICAgICAgIHJldHVybigxKTsKKyAgICAgIH0KKyAgICAgIGNhc2Ug WFlUQVRUUjoKKyAgICAgICAgaWYgKCh4ID0gY21rZXkodHR5YXR0cnRhYixuYXR0cmliLCIiLCJ1 bmRlcmxpbmUiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg c3dpdGNoICh4KSB7CisgICAgICAgICAgY2FzZSBUVEFUVEJMSToKKyAgICAgICAgICAgIGlmICgo eSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAg ICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgICB0 cnVlYmxpbmsgPSB5OworI2lmbmRlZiBLVUkKKyAgICAgICAgICAgIGlmICggIXRydWVibGluayAm JiB0cnVldW5kZXJsaW5lICkgeworICAgICAgICAgICAgICAgIHRydWV1bmRlcmxpbmUgPSAwOwor ICAgICAgICAgICAgICAgIHByaW50ZigiV2FybmluZzogVW5kZXJsaW5lIGJlaW5nIHNpbXVsYXRl ZCBieSBjb2xvci5cbiIpOworICAgICAgICAgICAgfQorCisjZW5kaWYgLyogS1VJICovCisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVFRBVFRESU06CisgICAgICAgICAgICBp ZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsK KyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAg ICAgdHJ1ZWRpbSA9IHk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVFRB VFRSRVY6CisgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJp bmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkg cmV0dXJuKHgpOworICAgICAgICAgICAgdHJ1ZXJldmVyc2UgPSB5OworICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgICBjYXNlIFRUQVRUVU5EOgorICAgICAgICAgICAgaWYgKCh5ID0gY21r ZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgICAgIHRydWV1bmRl cmxpbmUgPSB5OworI2lmbmRlZiBLVUkKKyAgICAgICAgICAgIGlmICghdHJ1ZWJsaW5rICYmIHRy dWV1bmRlcmxpbmUpIHsKKyAgICAgICAgICAgICAgICB0cnVlYmxpbmsgPSAxOworICAgICAgICAg ICAgICAgIHByaW50ZigiV2FybmluZzogVHJ1ZSBibGluayBtb2RlIGlzIGFjdGl2ZS5cbiIpOwor ICAgICAgICAgICAgfQorI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgICBjYXNlIFRUQVRUSVRBOgorICAgICAgICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9m ZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgICAgICAgaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgICAgIHRydWVpdGFsaWMg PSB5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFRUQVRUUFJPOiB7ICAg ICAgLyogU2V0IGRlZmF1bHQgUHJvdGVjdGVkIENoYXJhY3RlciBhdHRyaWJ1dGUgKi8KKyAgICAg ICAgICAgICAgZXh0ZXJuIHZ0YXR0cmliIFdQYXR0cmliOyAgICAvKiBjdXJyZW50IFdQIE1vZGUg QXR0cmliICovCisgICAgICAgICAgICAgIGV4dGVybiB2dGF0dHJpYiBkZWZXUGF0dHJpYjsgLyog ZGVmYXVsdCBXUCBNb2RlIEF0dHJpYiAqLworICAgICAgICAgICAgICB2dGF0dHJpYiB3cGEgPSB7 MCwwLDAsMCwwLDEsMCwwLDAsMCwwfTsgICAvKiBQcm90ZWN0ZWQgKi8KKyAgICAgICAgICAgICAg aW50IGRvbmUgPSAwOworCisgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICB3aGls ZSAoIWRvbmUpIHsKKyAgICAgICAgICAgICAgICAgIGlmICgoeSA9IGNta2V5KHR0eXByb3RhYixu cHJvdGVjdCwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg/ImRvbmUiOiJk aW0iLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAg ICAgICAgICAgICAgICBzd2l0Y2ggKHkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUVEFU VE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSBUVEFUVEJMSTogICAgICAvKiBCbGlua2luZyBkb2Vzbid0IHdvcmsgKi8KKyAgICAgICAg ICAgICAgICAgICAgICB3cGEuYmxpbmtpbmcgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUUkVWOgorICAgICAgICAgICAg ICAgICAgICAgIHdwYS5yZXZlcnNlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRJVEE6CisgICAgICAgICAgICAgICAg ICAgICAgd3BhLml0YWxpYyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgICAgICAgIGNhc2UgVFRBVFRVTkQ6CisgICAgICAgICAgICAgICAgICAgICAg d3BhLnVuZGVybGluZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICBjYXNlIFRUQVRUQkxEOgorICAgICAgICAgICAgICAgICAgICAgIHdw YS5ib2xkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSBUVEFUVERJTToKKyAgICAgICAgICAgICAgICAgICAgICB3cGEuZGltID0g VFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSBUVEFUVElOVjoKKyAgICAgICAgICAgICAgICAgICAgICB3cGEuaW52aXNpYmxlID0gVFJV RSA7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh c2UgVFRBVFRET05FOgorICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBUUlVFOworICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgeCA9IDE7ICAgICAgICAgICAgICAgIC8qIE9uZSBhdHRyaWJ1dGUgaGFzIGJlZW4gY2hv c2VuICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgICAgIFdQYXR0cmliID0gZGVmV1BhdHRyaWIgPSB3 cGE7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICByZXR1cm4oMSk7CisKKyAgICAgIGNhc2UgWFlUS0VZOiB7ICAgICAgICAgICAgICAgICAgICAv KiBTRVQgVEVSTUlOQUwgS0VZICovCisgICAgICAgICAgaW50IHQsIHgsIHk7CisgICAgICAgICAg aW50IGNsZWFyID0gMCwgZGVmbHQgPSAwOworICAgICAgICAgIGludCBjb25maXJtZWQgPSAwOwor ICAgICAgICAgIGludCBmbGFnID0gMDsKKyAgICAgICAgICBpbnQga2MgPSAtMTsgICAgICAgICAg ICAgICAgICAvKiBLZXkgY29kZSAqLworICAgICAgICAgIGludCBsaXRzdHIgPSAwOyAgICAgICAg ICAgICAgIC8qIExpdGVyYWwgU3RyaW5nPyAqLworICAgICAgICAgIGNoYXIgKnMgPSBOVUxMOyAg ICAgICAgICAgICAgIC8qIEtleSBiaW5kaW5nICovCisjaWZuZGVmIE5PS1ZFUkJTCisgICAgICAg ICAgY2hhciAqcCA9IE5VTEw7ICAgICAgICAgICAgICAgLyogV29ya2VyICovCisjZW5kaWYgLyog Tk9LVkVSQlMgKi8KKyAgICAgICAgICBjb25fZXZlbnQgZGVmZXZ0OworICAgICAgICAgIGV4dGVy biBpbnQgb3MyZ2tzOworICAgICAgICAgIGV4dGVybiBpbnQgbXNra2V5czsKKyAgICAgICAgICBl eHRlcm4gaW50IGluaXR2aWs7CisgICAgICAgICAgc3RydWN0IEZEQiBrdyxzdyxudSxjbTsKKwor ICAgICAgICAgIGRlZmV2dC50eXBlID0gZXJyb3I7CisKKyAgICAgICAgICBpZiAoKHQgPSBjbWtl eSh0dGtleXRhYixudHRrZXksIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1 cm4odCk7CisgICAgICAgICAgY21mZGJpKCZudSwgICAgICAgICAgICAgICAgICAgLyogRmlyc3Qg RkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworICAgICAgICAgICAgICAgICBfQ01OVU0sICAgICAg ICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAgICIvbGl0ZXJhbCwga2V5Y29k ZSwgb3IgYWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgLyog YWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgMTAsICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogcmFkaXggKi8KKyAgICAgICAgICAgICAgICAg MCwgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogMCAqLworICAg ICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rp b24gKi8KKyAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiBLZXl3b3Jk IHRhYmxlICovCisgICAgICAgICAgICAgICAgICZzdyAgICAgICAgICAgICAgICAgICAgLyogUG9p bnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgICApOyAgICAgICAgICAgICAgICAg ICAgIC8qICAqLworICAgICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAgIC8qIFNl Y29uZCBGREIgLSBzd2l0Y2hlcyAqLworICAgICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAg ICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAg ICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAg IiIsICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAg ICAgICAgICBuc3RybXN3aXRhYiwgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0 Ymwgc2l6ZSAqLworICAgICAgICAgICAgICAgICA0LCAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKyAgICAgICAgICAgICAgICAgeHhzdHJp bmcsICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgICAg ICAgIHN0cm1zd2l0YWIsICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLworICAgICAgICAg ICAgICAgICAma3cgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8K KyAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICBjbWZkYmkoJmt3LCAgICAgICAgICAgICAg ICAgICAvKiBUaGlyZCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisgICAgICAgICAgICAgICAg IF9DTUtFWSwgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICAgIi9s aXRlcmFsLCBrZXljb2RlLCBvciBhY3Rpb24iLAorICAgICAgICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgIiIsICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAgICBuc3Ry bWtleXRhYiwgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLwor ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMg ZGF0YSAyICovCisgICAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgLyogUHJv Y2Vzc2luZyBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICBzdHJta2V5dGFiLCAgICAgICAg ICAgIC8qIEtleXdvcmQgdGFibGUgKi8KKyAgICAgICAgICAgICAgICAgJmNtICAgICAgICAgICAg ICAgICAgICAvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgY21mZGJpKCZjbSwgICAgICAgICAgICAgICAgICAgLyogRmluYWwgRkRCIC0gQ29u ZmlybWF0aW9uICovCisgICAgICAgICAgICAgICAgIF9DTUNGTSwgICAgICAgICAgICAgICAgLyog ZmNvZGUgKi8KKyAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICIiLCAgICAg ICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAiIiwgICAgICAg ICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAgIDAs ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICov CisgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJp YyBkYXRhIDI6IDQgPSBjbXN3aSAqLworICAgICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAg ICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgTlVMTCwg ICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICAgICAgIE5V TEwgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAg ICAgICAgICApOworICAgICAgICAgIHdoaWxlIChrYyA8IDApIHsKKyAgICAgICAgICAgICAgeCA9 IGNtZmRiKCZudSk7ICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgICAg ICAgaWYgKHggPCAwKQorICAgICAgICAgICAgICAgIHJldHVybih4KTsKKworICAgICAgICAgICAg ICBzd2l0Y2ggKGNtcmVzdWx0LmZjb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBfQ01DRk06 CisgICAgICAgICAgICAgICAgICBwcmludGYoIiBQcmVzcyBrZXkgdG8gYmUgZGVmaW5lZDogIik7 CisgICAgICAgICAgICAgICAgICBjb25iaW4oKGNoYXIpZXNjYXBlKTsgLyogUHV0IHRlcm1pbmFs IGluIGJpbmFyeSBtb2RlICovCisgICAgICAgICAgICAgICAgICBvczJna3MgPSAwOyAgICAgICAg ICAgLyogVHVybiBvZmYgS3ZlcmIgcHJlcHJvY2Vzc2luZyAqLworICAgICAgICAgICAgICAgICAg a2MgPSBjb25na3MoMCk7ICAgICAgIC8qIEdldCBjaGFyYWN0ZXIgb3Igc2NhbiBjb2RlICovCisg ICAgICAgICAgICAgICAgICBvczJna3MgPSAxOyAgICAgICAgICAgLyogVHVybiBvbiBLdmVyYiBw cmVwcm9jZXNzaW5nICovCisgICAgICAgICAgICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAg LyogUmVzdG9yZSB0ZXJtaW5hbCB0byBjYnJlYWsgbW9kZSAqLworICAgICAgICAgICAgICAgICAg aWYgKGtjIDwgMCkgeyAgICAgICAgIC8qIENoZWNrIGZvciBlcnJvciAqLworICAgICAgICAgICAg ICAgICAgICAgIHByaW50ZigiP0Vycm9yIHJlYWRpbmcga2V5XG4iKTsKKyAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICBzaG9rZXljb2RlKGtjLHQpOyAgICAgLyogU2hvdyBjdXJyZW50IGRlZmluaXRpb24gKi8KKyAg ICAgICAgICAgICAgICAgIGZsYWcgPSAxOyAgICAgICAgICAgICAvKiBSZW1lbWJlciBpdCdzIGEg bXVsdGlsaW5lIGNvbW1hbmQgKi8KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgIGNhc2UgX0NNTlVNOgorICAgICAgICAgICAgICAgICAga2MgPSBjbXJlc3VsdC5ucmVz dWx0OworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBfQ01L RVk6CisgICAgICAgICAgICAgICAgICBpZiAoY21yZXN1bHQuZmRiYWRkciA9PSAmc3cpIHsgLyog U3dpdGNoICovCisgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtcmVzdWx0Lm5yZXN1bHQgPT0g MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdHN0ciA9IDE7CisgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKGNtcmVzdWx0LmZkYmFkZHIgPT0gJmt3KSB7IC8qIEtleXdvcmQgKi8KKyAg ICAgICAgICAgICAgICAgICAgICBpZiAoY21yZXN1bHQubnJlc3VsdCA9PSAwKQorICAgICAgICAg ICAgICAgICAgICAgICAgY2xlYXIgPSAxOworICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICAgICAgICAgIGRlZmx0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsZWFyKQorICAgICAgICAgICAgICAgICAgICAg ICAgY2xlYXJrZXltYXAodCk7CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVmbHQp CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0a2V5bWFwKHQpOworICAgICAgICAgICAg ICAgICAgICAgIGluaXR2aWsgPSAxOworICAgICAgICAgICAgICAgICAgICAgIHJldHVybigxKTsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAg IC8qIE5vcm1hbCBTRVQgVEVSTUlOQUwgS0VZIDx0ZXJtaW5hbD4gPHNjYW5jb2RlPiA8dmFsdWU+ IGNvbW1hbmQuLi4gKi8KKworICAgICAgICAgIGlmIChtc2trZXlzKQorICAgICAgICAgICAga2Mg PSBtc2t0b2NrKGtjKTsKKworICAgICAgICAgIGlmIChrYyA8IDAgfHwga2MgPj0gS01TSVpFKSB7 CisgICAgICAgICAgICAgIHByaW50ZigiP2tleSBjb2RlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAl ZFxuIiwgS01TSVpFIC0gMSk7CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAg fQorICAgICAgICAgIGlmIChrYyA9PSBlc2NhcGUpIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCJT b3JyeSwgJWQgaXMgdGhlIENPTk5FQ1QtbW9kZSBlc2NhcGUgY2hhcmFjdGVyXG4iLGtjKTsKKyAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICB9CisgICAgICAgICAgd2lkZXJlc3Vs dCA9IC0xOworICAgICAgICAgIGlmIChmbGFnKSB7CisgICAgICAgICAgICAgIGNtc2F2cChwc2F2 ZSxQUk9NUFRMKTsKKyAgICAgICAgICAgICAgY21zZXRwKCIgRW50ZXIgbmV3IGRlZmluaXRpb246 ICIpOworICAgICAgICAgICAgICBjbWluaShja3hlY2gpOworICAgICAgICAgIH0KKyAgICAgICAg ZGVmX2FnYWluOgorICAgICAgICAgIGlmIChmbGFnKSBwcm9tcHQoTlVMTCk7CisgICAgICAgICAg aWYgKCh5ID0gY210eHQoImtleSBkZWZpbml0aW9uLFxuXAorIG9yIEN0cmwtQyB0byBjYW5jZWwg dGhpcyBjb21tYW5kLFxuXAorIG9yIEVudGVyIHRvIHJlc3RvcmUgZGVmYXVsdCBkZWZpbml0aW9u IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyxOVUxMKSkgPCAwKSB7CisgICAgICAg ICAgICAgIGlmIChmbGFnKSAgICAgICAgICAgICAgICAgLyogSGFuZGxlIHBhcnNlIGVycm9ycyAq LworICAgICAgICAgICAgICAgIGdvdG8gZGVmX2FnYWluOworICAgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgIH0KKyAgICAgICAgICBzID0gYnJz dHJpcChzKTsKKyNpZm5kZWYgTk9LVkVSQlMKKyAgICAgICAgICBwID0gczsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTYXZlIHRoaXMgcGxhY2UgKi8KKyNlbmRpZiAvKiBOT0tWRVJCUyAqLwor LyoKKyAgSWYgdGhlIGRlZmluaXRpb24gaW5jbHVkZWQgYW55IFxLdmVyYnMsIHF1b3RlIHRoZSBi YWNrc2xhc2ggc28gdGhlIFxLdmVyYgorICB3aWxsIHN0aWxsIGJlIGluIHRoZSBkZWZpbml0aW9u IHdoZW4gdGhlIGtleSBpcyBwcmVzc2VkLiAgV2UgZG9uJ3QgZG8gdGhpcworICBpbiB6enN0cmlu ZygpLCBiZWNhdXNlIFxLdmVyYnMgYXJlIHZhbGlkIG9ubHkgaW4gdGhpcyBjb250ZXh0IGFuZCBu b3doZXJlCisgIGVsc2UuCisKKyAgV2UgdXNlIHRoaXMgY29kZSBhY3RpdmUgZm9yIGFsbCB2ZXJz aW9ucyB0aGF0IHN1cHBvcnQgU0VUIEtFWSwgZXZlbiBpZiB0aGV5CisgIGRvbid0IHN1cHBvcnQg XEt2ZXJicywgYmVjYXVzZSBvdGhlcndpc2UgXEsgd291bGQgYmVoYXZlIGRpZmZlcmVudGx5IGZv cgorICBkaWZmZXJlbnQgdmVyc2lvbnMuCisqLworICAgICAgICAgIGZvciAoeCA9IDAsIHkgPSAw OyBzW3hdOyB4KyssIHkrKykgeyAvKiBDb252ZXJ0IFxLIHRvIFxcSyAqLworICAgICAgICAgICAg ICBpZiAoKHggPiAwKSAmJgorICAgICAgICAgICAgICAgICAgKHNbeF0gPT0gJ0snIHx8IHNbeF0g PT0gJ2snKQorICAgICAgICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgIC8qIEhhdmUg SyAqLworCisgICAgICAgICAgICAgICAgICBpZiAoKHggPT0gMSAmJiBzW3gtMV0gPT0gQ01EUSkg fHwKKyAgICAgICAgICAgICAgICAgICAgICAoeCA+IDEgJiYgc1t4LTFdID09IENNRFEgJiYgc1t4 LTJdICE9IENNRFEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgbGluZVt5KytdID0gQ01EUTsg LyogTWFrZSBpdCBcXEsgKi8KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg IGlmICh4ID4gMSAmJiBzW3gtMV0gPT0gJ3snICYmIHNbeC0yXSA9PSBDTURRKSB7CisgICAgICAg ICAgICAgICAgICAgICAgbGluZVt5LTFdID0gQ01EUTsgLyogSGF2ZSBce0sgKi8KKyAgICAgICAg ICAgICAgICAgICAgICBsaW5lW3krK10gPSAneyc7ICAvKiBNYWtlIGl0IFxce0sgKi8KKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBsaW5lW3ldID0g c1t4XTsKKyAgICAgICAgICB9CisgICAgICAgICAgbGluZVt5KytdID0gTlVMOyAgICAgICAgICAg ICAgLyogVGVybWluYXRlICovCisgICAgICAgICAgcyA9IGxpbmUgKyB5ICsgMTsgICAgICAgICAg ICAgLyogUG9pbnQgdG8gYWZ0ZXIgaXQgKi8KKyAgICAgICAgICB4ID0gTElOQlVGU0laIC0gKGlu dCkgc3RybGVuKGxpbmUpIC0gMTsgLyogR2V0IHJlbWFpbmluZyBzcGFjZSAqLworICAgICAgICAg IGlmICgoeCA8IChMSU5CVUZTSVogLyAyKSkgfHwKKyAgICAgICAgICAgICAgKHp6c3RyaW5nKGxp bmUsICZzLCAmeCkgPCAwKSkgeyAvKiBFeHBhbmQgdmFyaWFibGVzLCBldGMuICovCisgICAgICAg ICAgICAgIHByaW50ZigiP0tleSBkZWZpbml0aW9uIHRvbyBsb25nXG4iKTsKKyAgICAgICAgICAg ICAgaWYgKGZsYWcpIGNtc2V0cChwc2F2ZSk7CisgICAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgICAgfQorICAgICAgICAgIHMgPSBsaW5lICsgeSArIDE7ICAgICAgICAgICAgIC8qIFBv aW50IHRvIHJlc3VsdC4gKi8KKworI2lmbmRlZiBOT0tWRVJCUworLyoKKyAgU3BlY2lhbCBjYXNl OiBzZWUgaWYgdGhlIGRlZmluaXRpb24gc3RhcnRzIHdpdGggYSBcS3ZlcmIuCisgIElmIGl0IGRv ZXMsIHBvaW50IHRvIGl0IHdpdGggcCwgb3RoZXJ3aXNlIHNldCBwIHRvIE5VTEwuCisqLworICAg ICAgICAgIHAgPSBzOworICAgICAgICAgIGlmICgqcCsrID09IENNRFEpIHsKKyAgICAgICAgICAg ICAgaWYgKCpwID09ICd7JykgcCsrOworICAgICAgICAgICAgICBwID0gKCpwID09ICdrJyB8fCAq cCA9PSAnSycpID8gcCArIDEgOiBOVUxMOworICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT0tWRVJC UyAqLworCisgICAgICAgICAgc3dpdGNoIChzdHJsZW4ocykpIHsgICAgICAgICAgLyogQWN0aW9u IGRlcGVuZHMgb24gbGVuZ3RoICovCisgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAg ICAgICAgLyogQ2xlYXIgaW5kaXZpZHVhbCBrZXkgZGVmICovCisgICAgICAgICAgICAgIGRlbGV0 ZWtleW1hcCh0LGtjKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6 CisgICAgICAgICAgICAgIGlmICghbGl0c3RyKSB7CisgICAgICAgICAgICAgICAgICBkZWZldnQu dHlwZSA9IGtleTsgICAgLyogU2luZ2xlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgICAg ZGVmZXZ0LmtleS5zY2FuY29kZSA9ICpzOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAvKiBD aGFyYWN0ZXIgc3RyaW5nICovCisjaWZuZGVmIE5PS1ZFUkJTCisgICAgICAgICAgICAgIGlmIChw KSB7CisgICAgICAgICAgICAgICAgICB5ID0geGxvb2t1cChrdmVyYnMscCxua3ZlcmJzLCZ4KTsg LyogTG9vayBpdCB1cCAqLworICAgICAgICAgICAgICAgICAgLyogTmVlZCBleGFjdCBtYXRjaCAq LworICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwic2V0IGtleSBrdmVyYiBsb29rdXAiLDAs eSk7CisgICAgICAgICAgICAgICAgICBpZiAoeSA+IC0xKSB7CisgICAgICAgICAgICAgICAgICAg ICAgZGVmZXZ0LnR5cGUgPSBrdmVyYjsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZldnQua3Zl cmIuaWQgPSB5OworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9LVkVSQlMgKi8KKyAgICAgICAgICAg ICAgaWYgKGxpdHN0cikgeworICAgICAgICAgICAgICAgICAgZGVmZXZ0LnR5cGUgPSBsaXRlcmFs OworICAgICAgICAgICAgICAgICAgZGVmZXZ0LmxpdGVyYWwuc3RyaW5nID0gKGNoYXIgKikgbWFs bG9jKHN0cmxlbihzKSsxKTsKKyAgICAgICAgICAgICAgICAgIGlmIChkZWZldnQubGl0ZXJhbC5z dHJpbmcpCisgICAgICAgICAgICAgICAgICAgIHN0cmNweShkZWZldnQubGl0ZXJhbC5zdHJpbmcs IHMpOyAvKiBzYWZlICovCisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICBkZWZldnQudHlwZSA9IG1hY3JvOworICAgICAgICAgICAgICAgICAgZGVmZXZ0Lm1hY3JvLnN0 cmluZyA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4ocykrMSk7CisgICAgICAgICAgICAgICAgICBp ZiAoZGVmZXZ0Lm1hY3JvLnN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGRlZmV2 dC5tYWNyby5zdHJpbmcsIHMpOyAvKiBzYWZlICovCisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGluc2VydGtleW1hcCh0LCBrYywg ZGVmZXZ0KTsKKyAgICAgICAgICBpZiAoZmxhZykKKyAgICAgICAgICAgIGNtc2V0cChwc2F2ZSk7 CisgICAgICAgICAgaW5pdHZpayA9IDE7ICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIFZJSyB0 YWJsZSAqLworICAgICAgICAgIHJldHVybigxKTsKKyAgICAgIH0KKworI2lmZGVmIFBDVEVSTQor ICAgICAgY2FzZSBYWVRQQ1RFUk06ICAgICAgICAgICAgICAgICAgIC8qIFBDVEVSTSBLZXlib2Fy ZCBNb2RlICovCisgICAgICAgIGlmICgoeCA9IHNldG9uKCZ0dF9wY3Rlcm0pKSA8IDApIHJldHVy bih4KTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBQQ1RFUk0gKi8K KyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENLX1RSSUdHRVIKKyAgICAgIGNhc2UgWFlUUklH R0VSOgorICAgICAgICBpZiAoKHkgPSBjbXR4dCgiU3RyaW5nIHRvIHRyaWdnZXIgYXV0b21hdGlj IHJldHVybiB0byBjb21tYW5kIG1vZGUiLAorICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyx4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIG1ha2VsaXN0KHMs dHRfdHJpZ2dlcixUUklHR0VSUyk7CisgICAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBDS19U UklHR0VSICovCisKKyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgWFlUU0FDOgorICAgICAgICBpZiAo KHkgPSBjbW51bSgiQVNDSUkgdmFsdWUgdG8gdXNlIGZvciBzcGFjaW5nIGF0dHJpYnV0ZXMiLAor ICAgICAgICAgICAgICAgICAgICAgICAiMzIiLDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7 CisgICAgICAgIHR0X3NhYyA9IHg7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAg ICAgIGNhc2UgWFlUS0JER0w6IHsgICAgICAvKiBTRVQgVEVSTSBLQkQtRk9MTE9XUy1HTC9HUiAq LworICAgICAgICAgIGV4dGVybiBpbnQgdHRfa2JfZ2xncjsgICAgICAgIC8qIGZyb20gY2tvY28z LmMgKi8KKyAgICAgICAgICBpZiAoKHggPSBzZXRvbigmdHRfa2JfZ2xncikpIDwgMCkKKyAgICAg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAg ICB9CisjaWZuZGVmIE5PQ1NFVFMKKyAgICAgIGNhc2UgWFlUVlRMTkc6ICAgICAgICAvKiBTRVQg VEVSTSBERUMtTEFOR1VBR0UgKi8KKyAgICAgICAgaWYgKCh5ID0gY21rZXkodnRsYW5ndGFiLG52 dGxhbmd0YWIsIlZUIGxhbmd1YWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgSVM5NzgwMSh0 dF90eXBlX21vZGUpPyJnZXJtYW4iOiJub3J0aC1hbWVyaWNhbiIsCisgICAgICAgICAgICAgICAg ICAgICAgIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisKKyAgICAgICAgLyogQSByZWFsIFZUIHRl cm1pbmFsIHdvdWxkIHVzZSB0aGUgbGFuZ3VhZ2UgdG8gc2V0IHRoZSAgICovCisgICAgICAgIC8q IGRlZmF1bHQga2V5Ym9hcmQgbGFuZ3VhZ2UgZm9yIGJvdGggOC1iaXQgbXVsdGluYXRpb25hbCAq LworICAgICAgICAvKiBhbmQgNy1iaXQgbmF0aW9uYWwgbW9kZXMuICBGb3IgOC1iaXQgbW9kZSBp dCB3b3VsZCAgICAgKi8KKyAgICAgICAgLyogc2V0IHRoZSB0ZXJtaW5hbCBjaGFyYWN0ZXItc2V0 IHRvIHRoZSBJU08gc2V0IGlmIGl0ICAgICovCisgICAgICAgIC8qIGlzIG5vdCBhbHJlYWR5IHNl dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBMYXRp bi0xIGNhbiBiZSByZXBsYWNlZCBieSBERUMgTXVsdGluYXRpb25hbCAgICAgICAgICAgKi8KKyAg ICAgICAgc3dpdGNoICh5KSB7CisgICAgICAgICAgY2FzZSBWVExfTk9SVEhfQU06ICAvKiBOb3J0 aCBBbWVyaWNhbiAqLworICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tMSAgICov CisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBVU19BU0NJSSAgKi8KKyAgICAgICAgICAg IGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9BU0NJSTsKKyAgICAgICAg ICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj YXNlIFZUTF9CUklUSVNIIDoKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEg ICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgVUtfQVNDSUkgICovCisgICAgICAg ICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfQlJJVElTSDsKKyAg ICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIFZUTF9GUkVOQ0ggIDoKKyAgICAgICAgICBjYXNlIFZUTF9CRUxHSUFOIDoKKyAg ICAgICAgICBjYXNlIFZUTF9DQU5BRElBTjoKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6 IExhdGluLTEgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgRlJfQVNDSUkgICov CisgICAgICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfRlJF TkNIOworICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGNhc2UgVlRMX0ZSX0NBTiAgOgorICAgICAgICAgICAgLyogTXVsdGluYXRp b25hbDogTGF0aW4tMSAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBGQ19BU0NJ SSAgKi8KKyAgICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBU WF9DTl9GUkVOQ0g7CisgICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBWVExfREFOSVNIICA6CisgICAgICAgICAgY2FzZSBW VExfTk9SV0VHSUE6CisgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0xICAgKi8K KyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIE5PX0FTQ0lJICAqLworICAgICAgICAgICAg ZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVjX25yYyA9IFRYX05PUldFR0lBTjsKKyAgICAg ICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICBjYXNlIFZUTF9GSU5OSVNIIDoKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGlu LTEgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgRklfQVNDSUkgICovCisgICAg ICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfRklOTklTSDsK KyAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlIFZUTF9HRVJNQU4gIDoKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6 IExhdGluLTEgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgR1JfQVNDSUkgICov CisgICAgICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfR0VS TUFOOworICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgIGNhc2UgVlRMX0RVVENIICAgOgorICAgICAgICAgICAgLyogTXVsdGluYXRp b25hbDogTGF0aW4tMSAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBEVV9BU0NJ SSAgKi8KKyAgICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBU WF9EVVRDSDsKKyAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICBjYXNlIFZUTF9JVEFMSUFOIDoKKyAgICAgICAgICAgIC8qIE11bHRp bmF0aW9uYWw6IExhdGluLTEgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgSVRf QVNDSUkgICovCisgICAgICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJj ID0gVFhfSVRBTElBTjsKKyAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFZUTF9TV19GUiAgIDoKKyAgICAgICAgICBjYXNl IFZUTF9TV19HUiAgIDoKKyAgICAgICAgICAgIC8qIE11bHRpbmF0aW9uYWw6IExhdGluLTEgICAq LworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgQ0hfQVNDSUkgICovCisgICAgICAgICAg ICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfU1dJU1M7CisgICAgICAg ICAgICBkZWNfa2JkID0gVFhfODg1OV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg Y2FzZSBWVExfU1dFRElTSCA6CisgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0x ICAgKi8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIFNXX0FTQ0lJICAqLworICAgICAg ICAgICAgZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVjX25yYyA9IFRYX1NXRURJU0g7Cisg ICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSBWVExfU1BBTklTSCA6CisgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBM YXRpbi0xICAgKi8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIFNQX0FTQ0lJICAqLwor ICAgICAgICAgICAgZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVjX25yYyA9IFRYX1NQQU5J U0g7CisgICAgICAgICAgICBkZWNfa2JkID0gVFhfODg1OV8xOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSBWVExfUE9SVFVHRVM6CisgICAgICAgICAgICAvKiBNdWx0aW5hdGlv bmFsOiBMYXRpbi0xICAgKi8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIFBvcnR1Z2Vz ZSBBU0NJSSAgKi8KKyAgICAgICAgICAgIGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19u cmMgPSBUWF9QT1JUVUdVRVNFOworICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVlRMX0hFQlJFVyAgOgorICAgICAgICAg ICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tSGVicmV3IC8gREVDLUhlYnJldyAgKi8KKyAgICAg ICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIERFQyA3LWJpdCBIZWJyZXcgICovCisgICAgICAgICAg ICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfSEU3OworICAgICAgICAg ICAgZGVjX2tiZCA9IFRYXzg4NTlfODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh c2UgVlRMX0dSRUVLICAgOgorICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tR3Jl ZWsgLyBERUMtR3JlZWsgICAqLworICAgICAgICAgICAgLyogTmF0aW9uYWw6ICAgICAgREVDIEdy ZWVrIE5SQyAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogaXMgRUxPVDkyNyBlcXVpdmFs ZW50IHRvIERFQyBHcmVlaz8/Pz8gICAqLworICAgICAgICAgICAgZGVjX2xhbmcgPSB5OworICAg ICAgICAgICAgZGVjX25yYyA9IFRYX0VMT1Q5Mjc7CisgICAgICAgICAgICBkZWNfa2JkID0gVFhf ODg1OV83OworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgIGNh c2UgVlRMX1RVUktfUSAgOgorICAgICAgICAgIGNhc2UgVlRMX1RVUktfRiAgOgorICAgICAgICAg ICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tVHVya2lzaCAvIERFQy1UdXJraXNoICAgKi8KKyAg ICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIERFQyA3LWJpdCBUdXJraXNoICAgICAgICAgICAg ICovCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAg Y2FzZSBWVExfSFVOR0FSSUE6CisgICAgICAgICAgICAvKiBNdWx0aW5hdGlvbmFsOiBMYXRpbi0y ICAgKi8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIG5vIG5hdGlvbmFsIG1vZGUgICov CisgICAgICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAgICBkZWNfbnJjID0gVFhfSFVO R0FSSUFOOworICAgICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMjsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgVlRMX1NMT1ZBSyAgOgorICAgICAgICAgIGNhc2UgVlRMX0Na RUNIICAgOgorICAgICAgICAgIGNhc2UgVlRMX1BPTElTSCAgOgorICAgICAgICAgIGNhc2UgVlRM X1JPTUFOSUFOOgorICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0aW4tMiAgICovCisg ICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBubyBuYXRpb25hbCBtb2RlICAqLworICAgICAg ICAgICAgZGVjX2xhbmcgPSB5OworICAgICAgICAgICAgZGVjX25yYyA9IFRYX0FTQ0lJOworICAg ICAgICAgICAgZGVjX2tiZCA9IFRYXzg4NTlfMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgVlRMX1JVU1NJQU4gOgorICAgICAgICAgICAgLyogTXVsdGluYXRpb25hbDogTGF0 aW4tQ3lyaWxsaWMgLyBLT0ktOCAgICovCisgICAgICAgICAgICAvKiBOYXRpb25hbDogICAgICBE RUMgUnVzc2lhbiBOUkMgICovCisgICAgICAgICAgICBkZWNfbGFuZyA9IHk7CisgICAgICAgICAg ICBkZWNfbnJjID0gVFhfS09JNzsKKyAgICAgICAgICAgIGRlY19rYmQgPSBUWF84ODU5XzU7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFZUTF9MQVRJTl9BTToKKyAgICAgICAg ICAgIC8qIE11bHRpbmF0aW9uYWw6IG5vdCBsaXN0ZWQgaW4gdGFibGUgICAqLworICAgICAgICAg ICAgLyogTmF0aW9uYWw6ICAgICAgbm90IGxpc3RlZCBpbiB0YWJsZSAgKi8KKyAgICAgICAgICAg IGRlY19sYW5nID0geTsKKyAgICAgICAgICAgIGRlY19ucmMgPSBUWF9BU0NJSTsKKyAgICAgICAg ICAgIGRlY19rYmQgPSBUWF84ODU5XzE7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBDT01N RU5UCisgICAgICAgICAgY2FzZSBWVExfU0NTICAgICA6CisgICAgICAgICAgICAvKiBNdWx0aW5h dGlvbmFsOiBMYXRpbi0yICAgKi8KKyAgICAgICAgICAgIC8qIE5hdGlvbmFsOiAgICAgIFNDUyBO UkMgICAqLworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9 CisgICAgICAgIGlmIChJUzk3ODAxKHR0X3R5cGVfbW9kZSkpIHsKKyAgICAgICAgICAgIFNOSV9i aXRtb2RlKGNtYXNrID09IDAzNzcgPyA4IDogNyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu KHN1Y2Nlc3MgPSAxKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICAgIGNhc2UgWFlUVlRO UkM6IHsgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTSBERUMtTlJDLU1PREUgKi8KKyAgICAg ICAgICBleHRlcm4gaW50IGRlY25yY21fdXNyLCBkZWNucmNtOyAgICAgICAgLyogZnJvbSBja29j bzMuYyAqLworICAgICAgICAgIGlmICgoeCA9IHNldG9uKCZkZWNucmNtX3VzcikpIDwgMCkKKyAg ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBkZWNucmNtID0gZGVjbnJjbV91c3I7Cisg ICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgWFlUU05J UE06IHsgICAgICAgICAgICAgICAgICAvKiBTRVQgVEVSTSBTTkktUEFHRU1PREUgKi8KKyAgICAg ICAgICBleHRlcm4gaW50IHNuaV9wYWdlbW9kZSwgc25pX3BhZ2Vtb2RlX3VzcjsKKyAgICAgICAg ICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJldHVybih5 KTsKKyAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAg ICBzbmlfcGFnZW1vZGVfdXNyID0gc25pX3BhZ2Vtb2RlID0geTsKKyAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworICAgICAgfQorICAgICAgY2FzZSBYWVRTTklTTTogeyAgICAgICAgICAg ICAgICAgIC8qIFNFVCBURVJNIFNOSS1TQ1JPTExNT0RFICovCisgICAgICAgICAgZXh0ZXJuIGlu dCBzbmlfc2Nyb2xsX21vZGUsIHNuaV9zY3JvbGxfbW9kZV91c3I7CisgICAgICAgICAgaWYgKCh5 ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgICAgc25pX3Nj cm9sbF9tb2RlX3VzciA9IHNuaV9zY3JvbGxfbW9kZSA9IHk7CisgICAgICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICAgIH0KKyAgICAgIGNhc2UgWFlUU05JQ0M6IHsgIC8qIFNFVCBURVJN IFNOSS1DSC5DT0RFICovCisgICAgICAgICAgZXh0ZXJuIGludCBzbmlfY2hjb2RlX3VzcjsKKyAg ICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhzdHJpbmcpKSA8IDApIHJl dHVybih5KTsKKyAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAg ICAgICAgICBzbmlfY2hjb2RlX3VzciA9IHk7CisgICAgICAgICAgU05JX2NoY29kZSh5KTsKKyAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorICAgICAgY2FzZSBYWVRTTklG VjogeyAgLyogU0VUIFRFUk0gU05JLUZJUk1XQVJFLVZFUlNJT05TICovCisgICAgICAgICAgZXh0 ZXJuIENIQVIgc25pX2tiZF9maXJtd2FyZVtdLCBzbmlfdGVybV9maXJtd2FyZVtdOworICAgICAg ICAgIENIQVIga2JkWzddLHRlcm1bN107CisKKyAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiS2V5 Ym9hcmQgRmlybXdhcmUgVmVyc2lvbiIsc25pX2tiZF9maXJtd2FyZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7Cisg ICAgICAgICAgaWYgKChpbnQpc3RybGVuKHMpICE9IDYpIHsKKyAgICAgICAgICAgICAgcHJpbnRm KCI/U29ycnkgLSB0aGUgZmlybXdhcmUgdmVyc2lvbiBtdXN0IGJlIDYgZGlnaXRzIGxvbmdcbiIp OworICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgIH0KKyAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgNjsgaSsrKSB7CisgICAgICAgICAgICAgIGlmICghaXNkaWdpdChzW2ldKSkg eworICAgcHJpbnRmKCI/U29ycnkgLSB0aGUgZmlybXdhcmUgdmVyc2lvbiBjYW4gb25seSBjb250 YWluIGRpZ2l0cyBbMC05XVxuIik7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGNrc3RybmNweShrYmQscyw3KTsK KworICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJUZXJtaW5hbCBGaXJtd2FyZSBWZXJzaW9uIixz bmlfdGVybV9maXJtd2FyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmcywgeHhzdHJpbmcp KSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgaWYgKChpbnQpc3RybGVu KHMpICE9IDYpIHsKKyAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnkgLSB0aGUgZmlybXdhcmUg dmVyc2lvbiBtdXN0IGJlIDYgZGlnaXRzIGxvbmdcbiIpOworICAgICAgICAgICAgICByZXR1cm4o LTkpOworICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Cisg ICAgICAgICAgICAgIGlmICghaXNkaWdpdChzW2ldKSkgeworICAgcHJpbnRmKCI/U29ycnkgLSB0 aGUgZmlybXdhcmUgdmVyc2lvbiBjYW4gb25seSBjb250YWluIGRpZ2l0cyBbMC05XVxuIik7Cisg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg IH0KKyAgICAgICAgICBja3N0cm5jcHkodGVybSxzLDcpOworICAgICAgICAgIGlmICgoeCA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCisgICAgICAgICAgY2tzdHJuY3B5KHNuaV9rYmRfZmly bXdhcmUsa2JkLDcpOworICAgICAgICAgIGNrc3RybmNweShzbmlfdGVybV9maXJtd2FyZSx0ZXJt LDcpOworICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorCisgICAgY2FzZSBY WVRMU1A6IHsgICAgICAgICAgICAgIC8qIFNFVCBURVJNIExJTkUtU1BBQ0lORyAqLworICAgICAg ICBpZiAoKHggPSBjbWZsZCgiTGluZSBTcGFjaW5nIiwiMSIsJnMsIHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKGlzZmxvYXQocywwKSA8IDEpIHsJCS8q IChzZXRzIGZsb2F0dmFsKSAqLworICAgICAgICAgICAgcHJpbnRmKCI/SW50ZWdlciBvciBmbG9h dGluZy1wb2ludCBudW1iZXIgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsK KyAgICAgICAgfQorICAgICAgICBpZiAoZmxvYXR2YWwgPCAxLjAgfHwgZmxvYXR2YWwgPiAzLjAp IHsKKyAgICAgICAgICAgIHByaW50ZigiP1ZhbHVlIG11c3Qgd2l0aGluIHRoZSByYW5nZSAxLjAg YW5kIDMuMCAoaW5jbHVzaXZlKVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICB9CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworI2lmZGVmIEtV SQorICAgICAgICB0dF9saW5lc3BhY2luZ1tWQ01EXSA9IHR0X2xpbmVzcGFjaW5nW1ZURVJNXSA9 IGZsb2F0dmFsOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2Vsc2UgLyogS1VJICov CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCBMaW5lLXNwYWNpbmcgaXMgb25seSBzdXBwb3J0ZWQg aW4gSzk1Ry5FWEUuXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAv KiBLVUkgKi8KKyAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTaG91bGRuJ3QgZ2V0IGhlcmUuICovCisgICAgICAgIHJl dHVybigtMik7CisgICAgfQorI2VuZGlmIC8qIE1BQyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAv KgorICAgICAgVGhpcyB3YXMgc3VwcG9zZWQgdG8gc2h1dCB1cCBwaWNreSBjb21waWxlcnMgYnV0 IGluc3RlYWQgaXQgbWFrZXMKKyAgICAgIG1vc3QgY29tcGlsZXJzIGNvbXBsYWluIGFib3V0ICJz dGF0ZW1lbnQgbm90IHJlYWNoZWQiLgorICAgICovCisgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAv KiBDT01NRU5UICovCisjaWZkZWYgT1MyCisgICAgcmV0dXJuKC0yKTsKKyNlbmRpZiAvKiBPUzIg Ki8KK30KKworI2lmZGVmIE9TMgoraW50CitzZXR0aXRsZSh2b2lkKSB7CisgICAgZXh0ZXJuIGNo YXIgdXNlcnRpdGxlW107CisgICAgaWYgKCh5ID0gY210eHQoInRpdGxlIHRleHQiLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5z ZXJ2ZXIpIHsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIp OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICov CisgICAgcyA9IGJyc3RyaXAocyk7CisgICAgY2tzdHJuY3B5KHVzZXJ0aXRsZSxzLDY0KTsKKyAg ICBvczJzZXR0aXRsZSgiIiwxKTsKKyAgICByZXR1cm4oMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg a2V5dGFiIGRpYWxlcnRhYltdID0geyAgICAvKiBLOTUgRGlhbGVyIHR5cGVzICovCisgICAgImJh Y2tzcGFjZSIsICAgICAgICAwLCAwLAorICAgICJlbnRlciIsICAgICAgICAgICAgMSwgMAorfTsK K3N0YXRpYyBpbnQgbmRpYWxlciA9IDI7CisKK2ludAorc2V0ZGlhbGVyKHZvaWQpIHsKKyAgICBp bnQgdCwgeCwgeTsKKyAgICBpbnQgY2xlYXIgPSAwLCBkZWZsdCA9IDA7CisgICAgaW50IGtjOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V5IGNvZGUgKi8KKyAgICBjaGFyICpzID0g TlVMTDsgICAgICAgICAgICAgICAgICAgICAvKiBLZXkgYmluZGluZyAqLworI2lmbmRlZiBOT0tW RVJCUworICAgIGNoYXIgKnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciAq LworI2VuZGlmIC8qIE5PS1ZFUkJTICovCisgICAgY29uX2V2ZW50IGRlZmV2dDsKKyAgICBleHRl cm4gaW50IG9zMmdrczsKKyAgICBleHRlcm4gaW50IG1za2tleXM7CisgICAgZXh0ZXJuIGludCBp bml0dmlrOworCisgICAgZGVmZXZ0LnR5cGUgPSBlcnJvcjsKKworICAgIGlmICgoIHggPSBjbWtl eShkaWFsZXJ0YWIsIG5kaWFsZXIsCisgICAgICAgICAgICAgICAgICAgICJLZXJtaXQtOTUgZGlh bGVyIHdvcmstYXJvdW5kcyIsCisgICAgICAgICAgICAgICAgICAgICIiLCB4eHN0cmluZykpIDwg MCApCisgICAgICByZXR1cm4oeCk7CisgICAgc3dpdGNoICh4KSB7CisgICAgICBjYXNlIDA6ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFja3NwYWNlICovCisgICAgICAgIGtjID0gMjY0 OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBFbnRlciAqLworICAgICAgICBrYyA9IDI2OTsKKyAgICAgICAgYnJlYWs7CisgICAgICBk ZWZhdWx0OgorICAgICAgICBwcmludGYoIklsbGVnYWwgdmFsdWUgaW4gc2V0ZGlhbGVyKClcbiIp OworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoKHkgPSBjbXR4dCgiS2V5IGRl ZmluaXRpb24iLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworCisjaWZk ZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICBwcmludGYoIj9Tb3JyeSwgY29t bWFuZCBkaXNhYmxlZC5cclxuIik7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAg fQorI2VuZGlmIC8qIElLU0QgKi8KKyAgICBzID0gYnJzdHJpcChzKTsKKyNpZm5kZWYgTk9LVkVS QlMKKyAgICBwID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHRoaXMg cGxhY2UgKi8KKyNlbmRpZiAvKiBOT0tWRVJCUyAqLworLyoKKyAgSWYgdGhlIGRlZmluaXRpb24g aW5jbHVkZWQgYW55IFxLdmVyYnMsIHF1b3RlIHRoZSBiYWNrc2xhc2ggc28gdGhlIFxLdmVyYgor ICB3aWxsIHN0aWxsIGJlIGluIHRoZSBkZWZpbml0aW9uIHdoZW4gdGhlIGtleSBpcyBwcmVzc2Vk LiAgV2UgZG9uJ3QgZG8gdGhpcworICBpbiB6enN0cmluZygpLCBiZWNhdXNlIFxLdmVyYnMgYXJl IHZhbGlkIG9ubHkgaW4gdGhpcyBjb250ZXh0IGFuZCBub3doZXJlCisgIGVsc2UuCisKKyAgV2Ug dXNlIHRoaXMgY29kZSBhY3RpdmUgZm9yIGFsbCB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQgU0VUIEtF WSwgZXZlbiBpZiB0aGV5CisgIGRvbid0IHN1cHBvcnQgXEt2ZXJicywgYmVjYXVzZSBvdGhlcndp c2UgXEsgd291bGQgYmVoYXZlIGRpZmZlcmVudGx5IGZvcgorICBkaWZmZXJlbnQgdmVyc2lvbnMu CisqLworICAgIGZvciAoeCA9IDAsIHkgPSAwOyBzW3hdOyB4KyssIHkrKykgeyAvKiBDb252ZXJ0 IFxLIHRvIFxcSyAqLworICAgICAgICBpZiAoKHggPiAwKSAmJgorICAgICAgICAgICAgKHNbeF0g PT0gJ0snIHx8IHNbeF0gPT0gJ2snKQorICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEhhdmUgSyAqLworCisgICAgICAgICAgICBpZiAoKHggPT0gMSAmJiBzW3gtMV0g PT0gQ01EUSkgfHwKKyAgICAgICAgICAgICAgICAoeCA+IDEgJiYgc1t4LTFdID09IENNRFEgJiYg c1t4LTJdICE9IENNRFEpKSB7CisgICAgICAgICAgICAgICAgbGluZVt5KytdID0gQ01EUTsgICAg ICAgLyogTWFrZSBpdCBcXEsgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh4ID4g MSAmJiBzW3gtMV0gPT0gJ3snICYmIHNbeC0yXSA9PSBDTURRKSB7CisgICAgICAgICAgICAgICAg bGluZVt5LTFdID0gQ01EUTsgICAgICAgLyogSGF2ZSBce0sgKi8KKyAgICAgICAgICAgICAgICBs aW5lW3krK10gPSAneyc7ICAgICAgICAvKiBNYWtlIGl0IFxce0sgKi8KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBsaW5lW3ldID0gc1t4XTsKKyAgICB9CisgICAgbGluZVt5Kytd ID0gTlVMOyAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRlICovCisgICAgcyA9IGxpbmUg KyB5ICsgMTsgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gYWZ0ZXIgaXQgKi8KKyAgICB4 ID0gTElOQlVGU0laIC0gKGludCkgc3RybGVuKGxpbmUpIC0gMTsgLyogQ2FsY3VsYXRlIHJlbWFp bmluZyBzcGFjZSAqLworICAgIGlmICgoeCA8IChMSU5CVUZTSVogLyAyKSkgfHwKKyAgICAgICAg KHp6c3RyaW5nKGxpbmUsICZzLCAmeCkgPCAwKSkgeyAvKiBFeHBhbmQgdmFyaWFibGVzLCBldGMu ICovCisgICAgICAgIHByaW50ZigiP0tleSBkZWZpbml0aW9uIHRvbyBsb25nXG4iKTsKKyAgICAg ICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgcyA9IGxpbmUgKyB5ICsgMTsgICAgICAgICAgICAg ICAgICAgLyogUG9pbnQgdG8gcmVzdWx0LiAqLworCisjaWZuZGVmIE5PS1ZFUkJTCisvKgorICBT cGVjaWFsIGNhc2U6IHNlZSBpZiB0aGUgZGVmaW5pdGlvbiBzdGFydHMgd2l0aCBhIFxLdmVyYi4K KyAgSWYgaXQgZG9lcywgcG9pbnQgdG8gaXQgd2l0aCBwLCBvdGhlcndpc2Ugc2V0IHAgdG8gTlVM TC4KKyovCisgICAgcCA9IHM7CisgICAgaWYgKCpwKysgPT0gQ01EUSkgeworICAgICAgICBpZiAo KnAgPT0gJ3snKSBwKys7CisgICAgICAgIHAgPSAoKnAgPT0gJ2snIHx8ICpwID09ICdLJykgPyBw ICsgMSA6IE5VTEw7CisgICAgfQorI2VuZGlmIC8qIE5PS1ZFUkJTICovCisKKyAgICAvKiBDbGVh ciB0aGUgZGVmaW5pdGlvbiBmb3IgU0VUIEtFWSAqLworICAgIGlmIChtYWNyb3RhYltrY10pIHsg ICAgICAgICAgICAgICAgIC8qIFBvc3NpYmx5IGZyZWUgb2xkIG1hY3JvIGZyb20ga2V5LiAqLwor ICAgICAgICBmcmVlKChjaGFyICopbWFjcm90YWJba2NdKTsKKyAgICAgICAgbWFjcm90YWJba2Nd ID0gTlVMTDsKKyAgICB9CisgICAga2V5bWFwW2tjXSA9IChLRVkpIGtjOworCisgICAgLyogTm93 IHJlcHJvZ3JhbSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIHRlcm1pbmFsIHR5cGVzICovCisg ICAgLyogcmVtZW1iZXIgdG8gdHJlYXQgV3lzZSBhbmQgVGVsZXZpZGVvIHRlcm1pbmFscyBzcGVj aWFsICovCisgICAgLyogYmVjYXVzZSBvZiB0aGVpciB1c2Ugb2YgS3ZlcmJzIGZvciBCYWNrc3Bh Y2UgYW5kIEVudGVyICovCisgICAgZm9yICh0ID0gMDsgdCA8PSBUVF9NQVg7IHQrKykgeworICAg ICAgICBpZiAoIElTREcyMDAodCkgJiYga2MgPT0gMjY0KSB7CisgICAgICAgICAgICBleHRlcm4g Y2hhciAqIHVka2ZrZXlzW10gOworICAgICAgICAgICAgaWYgKGtjID09IDI2NCkgeyAgICAgICAg ICAgIC8qIFxLZGdicyAqLworICAgICAgICAgICAgICAgIGlmICh1ZGtma2V5c1s4M10pCisgICAg ICAgICAgICAgICAgICBmcmVlKHVka2ZrZXlzWzgzXSk7CisgICAgICAgICAgICAgICAgdWRrZmtl eXNbODNdID0gc3RyZHVwKHMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKElT V1lTRSh0KSB8fCBJU1RWSSh0KSkgeworICAgICAgICAgICAgZXh0ZXJuIGNoYXIgKiB1ZGtma2V5 c1tdIDsKKyAgICAgICAgICAgIGlmIChrYyA9PSAyNjQpIHsgICAgICAgICAgICAvKiBcS3d5YnMg b3IgXEt0dmlicyAqLworICAgICAgICAgICAgICAgIGlmICh1ZGtma2V5c1szMl0pCisgICAgICAg ICAgICAgICAgICBmcmVlKHVka2ZrZXlzWzMyXSk7CisgICAgICAgICAgICAgICAgdWRrZmtleXNb MzJdID0gc3RyZHVwKHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGtjID09IDI2 OSkgeyAgICAgICAgICAgIC8qIFxLd3llbnRlciBhbmQgXEt3eXJldHVybiAqLworICAgICAgICAg ICAgICAgIGlmICh1ZGtma2V5c1szOV0pICAgICAgIC8qIFxLdHZpZW50ZXIgYW5kIFxLdHZpcmV0 dXJuICovCisgICAgICAgICAgICAgICAgICBmcmVlKHVka2ZrZXlzWzM5XSk7CisgICAgICAgICAg ICAgICAgdWRrZmtleXNbMzldID0gc3RyZHVwKHMpOworICAgICAgICAgICAgICAgIGlmICh1ZGtm a2V5c1s0OV0pCisgICAgICAgICAgICAgICAgICBmcmVlKHVka2ZrZXlzWzQ5XSk7CisgICAgICAg ICAgICAgICAgdWRrZmtleXNbNDldID0gc3RyZHVwKHMpOworICAgICAgICAgICAgfQorICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoIChzdHJsZW4ocykpIHsgICAgICAgIC8qIEFj dGlvbiBkZXBlbmRzIG9uIGxlbmd0aCAqLworICAgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAg ICAgICAgICAgIC8qIENsZWFyIGluZGl2aWR1YWwga2V5IGRlZiAqLworICAgICAgICAgICAgICAg IGRlbGV0ZWtleW1hcCh0LGtjKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGRlZmV2dC50eXBlID0ga2V5OyAgICAgIC8qIFNp bmdsZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICBkZWZldnQua2V5LnNjYW5jb2RlID0g KnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgLyogQ2hhcmFjdGVyIHN0cmluZyAqLworI2lmbmRlZiBOT0tWRVJCUworICAg ICAgICAgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICAgICAgICAgIHkgPSB4bG9va3VwKGt2 ZXJicyxwLG5rdmVyYnMsJngpOyAvKiBMb29rIGl0IHVwICovCisgICAgICAgICAgICAgICAgICAg IC8qIEV4YWN0IG1hdGNoIHJlcSdkICovCisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs InNldCBrZXkga3ZlcmIgbG9va3VwIiwwLHkpOworICAgICAgICAgICAgICAgICAgICBpZiAoeSA+ IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZldnQudHlwZSA9IGt2ZXJiOworICAg ICAgICAgICAgICAgICAgICAgICAgZGVmZXZ0Lmt2ZXJiLmlkID0geTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorI2VuZGlmIC8qIE5PS1ZFUkJTICovCisgICAgICAgICAgICAgICAgZGVmZXZ0LnR5cGUgPSBt YWNybzsKKyAgICAgICAgICAgICAgICBkZWZldnQubWFjcm8uc3RyaW5nID0gKGNoYXIgKikgbWFs bG9jKHN0cmxlbihzKSsxKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmZXZ0Lm1hY3JvLnN0cmlu ZykKKyAgICAgICAgICAgICAgICAgIHN0cmNweShkZWZldnQubWFjcm8uc3RyaW5nLCBzKTsgLyog c2FmZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaW5zZXJ0a2V5bWFwKCB0LCBrYywgZGVmZXZ0ICkgOworICAgICAgICAgICAgaW5pdHZpayA9 IDE7ICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBWSUsgdGFibGUgKi8KKyAgICAgICAgfQorICAg IH0KKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBOVAoraW50 CitzZXR3aW45NSggdm9pZCApIHsKKyAgICBpbnQgeCwgeSwgejsKKworICAgIGlmICgoIHkgPSBj bWtleSh3aW45NXRhYiwgbndpbjk1LAorICAgICAgICAgICAgICAgICAgICAiV2luZG93cyA5NSBz cGVjaWZpYyB3b3JrLWFyb3VuZHMiLAorICAgICAgICAgICAgICAgICAgICAia2V5Ym9hcmQtdHJh bnNsYXRpb24iLAorICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCApCisgICAgICAg IHJldHVybiAoeSk7CisgICAgc3dpdGNoICh5KSB7CisgICAgICBjYXNlIFhZV1BPUFVQOgorICAg ICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCJwb3B1cHMgYXJlIHVzZWQgdG8gcHJvbXB0IHRo ZSB1c2VyIGZvciBkYXRhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIm9uIix4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOworICAgICAgICB3aW45NV9wb3B1cCA9IHk7CisgICAgICAgIHJldHVybigx KTsKKworICAgICAgY2FzZSBYWVc4XzM6CisgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIs IjguMyBGQVQgZmlsZSBuYW1lcyIsIm9mZiIseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHkpOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAg ICAgd2luOTVfOF8zID0geTsKKyAgICAgICAgcmV0dXJuKDEpOworCisgICAgICBjYXNlIFhZV1NF TEVDVDoKKyAgICAgICAgaWYgKCh5ID0gY21rZXkob25vZmYsMiwiXCJzZWxlY3QoKVwiIGZhaWxz IG9uIHdyaXRlIiwib2ZmIiwKKyAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICByZXR1cm4oeSk7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwor ICAgICAgICB3aW45NXNlbGVjdGJ1ZyA9IHk7CisgICAgICAgIHJldHVybigxKTsKKworICAgICAg Y2FzZSBYWVdBR1I6CisgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIlJpZ2h0LUFsdCBp cyBBbHQtR3IiLCJvZmYiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAg ICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIHdpbjk1YWx0 Z3IgPSB5OworICAgICAgICByZXR1cm4oMSk7CisKKyAgICAgIGNhc2UgWFlXT0lPOgorICAgICAg ICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCJVc2UgT3ZlcmxhcHBlZCBJL08iLCJvbiIseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoeSkgeworICAgICAg ICAgICAgaWYgKCh4ID0gY21udW0oIk1heGltdW0gbnVtYmVyIG9mIG91dHN0YW5kaW5nIEkvTyBy ZXF1ZXN0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAiLDEwLCZ6LHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICBpZiAoeiA8IDEg fHwgeiA+IDcpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoCisiP01heGltdW0gb3V0c3RhbmRp bmcgSS9PIHJlcXVlc3RzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA3LlxuIik7CisgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg ICAgeiA9IDE7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAg ICAgICBvd3dhaXQgPSAheTsKKyAgICAgICAgbWF4b3cgPSBtYXhvd191c3IgPSB6OworICAgICAg ICByZXR1cm4oMSk7CisKKyAgICAgIGNhc2UgWFlXS0VZOgorI2lmbmRlZiBDT01NRU5UCisgICAg ICAgIHByaW50ZigiXG4/XCJLZXlib2FyZC1UcmFuc2xhdGlvblwiIGlzIG5vIGxvbmdlciByZXF1 aXJlZC5cbiIpOworICAgICAgICByZXR1cm4oLTkpOworI2Vsc2UgLyogQ09NTUVOVCAqLworICAg ICAgICBpZiAoKCB6ID0gY21rZXkodGNzdGFiLCBudGNzLAorICAgICAgICAgICAgICAgICAgICAg ICAgIktleWJvYXJkIENoYXJhY3RlciBTZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxh dGluMS1pc28iLAorICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgcmV0dXJuICh6KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAg ICAgIHJldHVybih4KTsKKworICAgICAgICB3aW45NWtjc2kgPSB6OworICAgICAgICB3aW45NWts MiA9ICh3aW45NWtjc2kgPT0gVENfMkxBVElOKTsKKworICAgICAgICBpZiAod2luOTVrY3NpID09 IFRDX1RSQU5TUCkgeworICAgICAgICAgICAgd2luOTVrY3MgPSBOVUxMOworICAgICAgICB9IGVs c2UgeworI2lmZGVmIFVOSUNPREUKKyAgICAgICAgICAgIHdpbjk1a2NzID0geGxyW3dpbjk1a2Nz aV1bdHgyZmModGNzbCldOworI2Vsc2UgLyogVU5JQ09ERSAqLworICAgICAgICAgICAgd2luOTVr Y3MgPSB4bHJbd2luOTVrY3NpXVt0Y3NsXTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuKDEpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgICAgY2Fz ZSBYWVdMVUM6CisgICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIlVuaWNvZGUtdG8tTHVj aWRhLUNvbnNvbGUgc3Vic3RpdHV0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICJvbiIs eHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgd2luOTVsdWNpZGEgPSB5OworICAgICAg ICByZXR1cm4oMSk7CisKKyAgICAgIGNhc2UgWFlXSFNMOgorCWlmICgoeSA9IGNta2V5KG9ub2Zm LDIsIkhvcml6b250YWwgU2NhbiBMaW5lIHN1YnN0aXR1dGlvbnMiLAorCQkgICAgICAgIm9uIix4 eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih5KTsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJl dHVybih4KTsKKwl3aW45NWhzbCA9IHk7CisJcmV0dXJuKDEpOworCisgICAgICBkZWZhdWx0Ogor ICAgICAgICBwcmludGYoIklsbGVnYWwgdmFsdWUgaW4gc2V0d2luOTUoKVxuIik7CisgICAgICAg IHJldHVybigtOSk7CisgICAgfQorfQorI2VuZGlmIC8qIE5UICovCisKKyNpZmRlZiBPUzIKK2lu dAorc2V0cHJ0eSAoCisjaWZkZWYgQ0tfQU5TSUMKKyAgICB2b2lkCisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KKy8qIHNldHBydHkgKi8gKSB7CisgICAgaW50IHgsIHksIHo7CisKKyAgICBpZiAoKCB5 ID0gY21rZXkocHJ0eXRhYiwgbnBydHksCisgICAgICAgICAgICAgICAgICAgICJwcmlvcml0eSBs ZXZlbCBvZiB0ZXJtaW5hbCBhbmQgY29tbXVuaWNhdGlvbiB0aHJlYWRzIiwKKyAgICAgICAgICAg ICAgICAgICAgImZvcmVncm91bmQtc2VydmVyIiwKKyAgICAgICAgICAgICAgICAgICAgeHhzdHJp bmcpKSA8IDAgKQorICAgICAgcmV0dXJuICh5KTsKKworICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkKKyAgICAgIHJldHVybiAoeCk7CisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlciAmJgor I2lmZGVmIElLU0RDT05GCisgICAgICAgICBpa3NkY2YKKyNlbHNlCisgICAgICAgICAxCisjZW5k aWYgLyogSUtTRENPTkYgKi8KKyAgICApIHsKKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeSk7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVkLlxy XG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyogSUtT RCAqLworICAgIHByaW9yaXR5ID0geTsKKyAgICByZXR1cm4oVFJVRSk7Cit9CisjZW5kaWYgLyog T1MyICovCisKK2ludAorc2V0YmVsbCgpIHsKKyAgICBpbnQgeSwgeDsKKyNpZmRlZiBPUzIKKyAg ICBpbnQgejsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICgoeSA9IGNta2V5KGJlbHRhYixu YmVsdGFiLAorI2lmZGVmIE9TMgorICAgICAgICAiaG93IGNvbnNvbGUgYW5kIHRlcm1pbmFsIGJl bGxzIHNob3VsZFxuYmUgZ2VuZXJhdGVkIiwgImF1ZGlibGUiLAorI2Vsc2UKKyAgICAgICAgIldo ZXRoZXIgS2VybWl0IHNob3VsZCByaW5nIHRoZSB0ZXJtaW5hbCBiZWxsIChiZWVwKSIsICJvbiIs CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHkpOworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgewor ICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgcHJpbnRm KCI/U29ycnksIGNvbW1hbmQgZGlzYWJsZWQuXHJcbiIpOworICAgICAgICByZXR1cm4oc3VjY2Vz cyA9IDApOworICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBzd2l0Y2ggKHkpIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBTRVQgQkVMTCAqLworICAgICAgY2FzZSBYWUJfTk9ORToK KyNpZmRlZiBPUzIKKyAgICAgIGNhc2UgWFlCX1ZJUzoKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyNpZmRlZiBP UzIKKyAgICAgICAgdHRfYmVsbCA9IHk7CisjZWxzZQorICAgICAgICB0dF9iZWxsID0gMDsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFlCX0FVRDoKKyNp ZmRlZiBPUzIKKyAgICAgICAgaWYgKCh4ID0gY21rZXkoYXVkaWJsZXRhYiwgbmF1ZGlibGV0YWIs CisgICAgICAgICAgICAgICAiaG93IGF1ZGlibGUgY29uc29sZSBhbmQgdGVybWluYWxcbmJlbGxz IHNob3VsZCBiZSBnZW5lcmF0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAiYmVlcCIseHhz dHJpbmcpKTwwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh6ID0gY21jZm0o KSkgPCAwKQorICAgICAgICAgIHJldHVybih6KTsKKyAgICAgICAgdHRfYmVsbCA9IHkgfCB4Owor I2Vsc2UKKyAgICAgICAgLyogVGhpcyBsZXRzIEMtS2VybWl0IGFjY2VwdCBidXQgaWdub3JlIHRy YWlsaW5nIEs5NSBrZXl3b3JkcyAqLworICAgICAgICBpZiAoKHggPSBjbXR4dCgiQ29uZmlybSB3 aXRoIGNhcnJpYWdlIHJldHVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICB0dF9iZWxsID0gMTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAg YnJlYWs7CisgICAgfQorICAgIHJldHVybigxKTsKK30KKworI2lmZGVmIE9TMk1PVVNFCitpbnQK K3NldG1vdSgKKyNpZmRlZiBDS19BTlNJQworICAgICAgIHZvaWQKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworIC8qIHNldG1vdSAqLyApIHsKKyAgICBleHRlcm4gaW50IGluaXR2aWs7CisgICAgaW50 IGJ1dHRvbiA9IDAsIGV2ZW50ID0gMDsKKyAgICBjaGFyICogcDsKKworICAgIGlmICgoeSA9IGNt a2V5KG1vdXNldGFiLG5tdGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkp OworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICBpZiAoKHkgPSBj bWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIGNvbW1hbmQg ZGlzYWJsZWQuXHJcbiIpOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0KKyNl bmRpZiAvKiBJS1NEICovCisKKyAgICBpZiAoeSA9PSBYWU1fT04pIHsgICAgICAgICAgICAgICAg ICAvKiBNT1VTRSBBQ1RJVkFUSU9OICovCisgICAgICAgIGludCBvbGRfbW91ID0gdHRfbW91c2U7 CisgICAgICAgIGlmICgoeCA9IHNldG9uKCZ0dF9tb3VzZSkpIDwgMCkKKyAgICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgaWYgKHR0X21vdXNlICE9IG9sZF9tb3UpCisgICAgICAgICAgaWYg KHR0X21vdXNlKQorICAgICAgICAgICAgb3MyX21vdXNlb24oKTsKKyAgICAgICAgICBlbHNlCisg ICAgICAgICAgICBvczJfbW91c2VvZmYoKTsKKyAgICAgICAgcmV0dXJuKDEpOworICAgIH0KKwor ICAgIGlmICh5ID09IFhZTV9ERUJVRykgeyAgICAgICAgICAgICAgIC8qIE1PVVNFIERFQlVHICov CisgICAgICAgIGV4dGVybiBpbnQgTW91c2VEZWJ1ZzsKKyAgICAgICAgaWYgKCh4ID0gc2V0b24o Jk1vdXNlRGVidWcpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIHJldHVy bigxKTsKKyAgICB9CisKKyAgICBpZiAoeSA9PSBYWU1fQ0xFQVIpIHsgICAgICAgICAgICAgICAv KiBSZXNldCBNb3VzZSBEZWZhdWx0cyAqLworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKKyAgICAgICAgbW91c2VtYXBpbml0KC0xLC0xKTsKKyAgICAgICAgaW5pdHZp ayA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgVklLIFRhYmxlICovCisgICAgICAg IHJldHVybiAxOworICAgIH0KKyAgICBpZiAoeSAhPSBYWU1fQlVUVE9OKSB7ICAgICAgICAgICAg ICAvKiBTaG91bGRuJ3QgaGFwcGVuLiAqLworICAgICAgICBwcmludGYoIkludGVybmFsIHBhcnNp bmcgZXJyb3JcbiIpOworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKworICAgIC8qIE1PVVNF IEVWRU5UIC4uLiAqLworCisgICAgaWYgKChidXR0b24gPSBjbWtleShtb3VzZWJ1dHRvbnRhYixu bWJ0YWIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQnV0dG9uIG51bWJlciIsIjEiLAorICAg ICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oYnV0dG9u KTsKKworICAgIGlmICgoeSA9ICBjbWtleShtb3VzZW1vZHRhYixubW10YWIsCisgICAgICAgICAg ICAgICAgICAgICJLZXlib2FyZCBtb2RpZmllciIsIm5vbmUiLAorICAgICAgICAgICAgICAgICAg ICB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih5KTsKKworICAgIGV2ZW50IHw9IHk7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIE9SIGluIHRoZSBiaXRzICovCisKKyAgICBpZiAoKHkg PSAgY21rZXkobWNsaWNrdGFiLG5tY3RhYiwiIiwiY2xpY2siLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgcmV0dXJuKHkpOworCisgICAgLyogVHdvIGJpdHMgYXJlIGFzc2lnbmVkLCBpZiBuZWl0aGVy IGFyZSBzZXQgdGhlbiBpdCBpcyBidXR0b24gb25lICovCisKKyAgICBldmVudCB8PSB5OyAgICAg ICAgICAgICAgICAgLyogT1IgaW4gdGhlIGJpdCAqLworCisgICAgd2lkZXJlc3VsdCA9IC0xOwor CisgICAgaWYgKCh5ID0gY210eHQoImRlZmluaXRpb24sXG5cCitvciBDdHJsLUMgdG8gY2FuY2Vs IHRoaXMgY29tbWFuZCxcblwKK29yIEVudGVyIHRvIHJlc3RvcmUgZGVmYXVsdCBkZWZpbml0aW9u IiwKKyAgICAgICAgICAgICAgICAgICAiIiwmcyxOVUxMKSkgPCAwKSB7CisgICAgICAgIHJldHVy bih5KTsKKyAgICB9CisgICAgcyA9IGJyc3RyaXAocyk7CisgICAgcCA9IHM7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogU2F2ZSB0aGlzIHBsYWNlICovCisvKgorICBJZiB0aGUgZGVm aW5pdGlvbiBpbmNsdWRlZCBhbnkgXEt2ZXJicywgcXVvdGUgdGhlIGJhY2tzbGFzaCBzbyB0aGUg XEt2ZXJiCisgIHdpbGwgc3RpbGwgYmUgaW4gdGhlIGRlZmluaXRpb24gd2hlbiB0aGUga2V5IGlz IHByZXNzZWQuICBXZSBkb24ndCBkbyB0aGlzCisgIGluIHp6c3RyaW5nKCksIGJlY2F1c2UgXEt2 ZXJicyBhcmUgdmFsaWQgb25seSBpbiB0aGlzIGNvbnRleHQgYW5kIG5vd2hlcmUKKyAgZWxzZS4g IFRoaXMgY29kZSBjb3BpZWQgZnJvbSBTRVQgS0VZLCBxLnYuIGZvciBhZGR0J2wgY29tbWVudGFy eS4KKyovCisgICAgZm9yICh4ID0gMCwgeSA9IDA7IHNbeF07IHgrKywgeSsrKSB7IC8qIENvbnZl cnQgXEsgdG8gXFxLICovCisgICAgICAgIGlmICgoeCA+IDApICYmCisgICAgICAgICAgICAoc1t4 XSA9PSAnSycgfHwgc1t4XSA9PSAnaycpCisgICAgICAgICAgICApIHsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSGF2ZSBLICovCisKKyAgICAgICAgICAgIGlmICgoeCA9PSAxICYmIHNbeC0x XSA9PSBDTURRKSB8fAorICAgICAgICAgICAgICAgICh4ID4gMSAmJiBzW3gtMV0gPT0gQ01EUSAm JiBzW3gtMl0gIT0gQ01EUSkpIHsKKyAgICAgICAgICAgICAgICBsaW5lW3krK10gPSBDTURROyAg ICAgICAvKiBNYWtlIGl0IFxcSyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHgg PiAxICYmIHNbeC0xXSA9PSAneycgJiYgc1t4LTJdID09IENNRFEpIHsKKyAgICAgICAgICAgICAg ICBsaW5lW3ktMV0gPSBDTURROyAgICAgICAvKiBIYXZlIFx7SyAqLworICAgICAgICAgICAgICAg IGxpbmVbeSsrXSA9ICd7JzsgICAgICAgIC8qIE1ha2UgaXQgXFx7SyAqLworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIGxpbmVbeV0gPSBzW3hdOworICAgIH0KKyAgICBsaW5lW3kr K10gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgKi8KKyAgICBzID0gbGlu ZSArIHkgKyAxOyAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byBhZnRlciBpdCAqLworICAg IHggPSBMSU5CVUZTSVogLSAoaW50KSBzdHJsZW4obGluZSkgLSAxOyAvKiBDYWxjdWxhdGUgcmVt YWluaW5nIHNwYWNlICovCisgICAgaWYgKCh4IDwgKExJTkJVRlNJWiAvIDIpKSB8fAorICAgICAg ICAoenpzdHJpbmcobGluZSwgJnMsICZ4KSA8IDApKSB7IC8qIEV4cGFuZCB2YXJpYWJsZXMsIGV0 Yy4gKi8KKyAgICAgICAgcHJpbnRmKCI/S2V5IGRlZmluaXRpb24gdG9vIGxvbmdcbiIpOworICAg ICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBzID0gbGluZSArIHkgKyAxOyAgICAgICAgICAg ICAgICAgICAvKiBQb2ludCB0byByZXN1bHQuICovCisKKyNpZm5kZWYgTk9LVkVSQlMKKy8qCisg IFNwZWNpYWwgY2FzZTogc2VlIGlmIHRoZSBkZWZpbml0aW9uIHN0YXJ0cyB3aXRoIGEgXEt2ZXJi LgorICBJZiBpdCBkb2VzLCBwb2ludCB0byBpdCB3aXRoIHAsIG90aGVyd2lzZSBzZXQgcCB0byBO VUxMLgorKi8KKyAgICBwID0gczsKKyAgICBpZiAoKnArKyA9PSBDTURRKSB7CisgICAgICAgIGlm ICgqcCA9PSAneycpIHArKzsKKyAgICAgICAgcCA9ICgqcCA9PSAnaycgfHwgKnAgPT0gJ0snKSA/ IHAgKyAxIDogTlVMTDsKKyAgICB9CisjZWxzZQorICAgIHAgPSBOVUxMOworI2VuZGlmIC8qIE5P S1ZFUkJTICovCisKKyAgICAvKiBmcmVlIHRoZSBvbGQgZGVmaW5pdGlvbiBpZiBuZWNlc3Nhcnkg Ki8KKyAgICBpZiAobW91c2VtYXBbYnV0dG9uXVtldmVudF0udHlwZSA9PSBtYWNybykgeworICAg ICAgICBmcmVlKCBtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5tYWNyby5zdHJpbmcpOworICAgICAg ICBtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5tYWNyby5zdHJpbmcgPSBOVUxMOworICAgIH0KKyAg ICBzd2l0Y2ggKHN0cmxlbihzKSkgeyAgICAgICAgICAgICAgICAvKiBBY3Rpb24gZGVwZW5kcyBv biBsZW5ndGggKi8KKyAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXNldCB0byBkZWZhdWx0IGJpbmRpbmcgKi8KKyAgICAgICAgbW91c2VtYXBpbml0KCBidXR0b24s IGV2ZW50ICk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFNpbmdsZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIG1vdXNlbWFwW2J1 dHRvbl1bZXZlbnRdLnR5cGUgPSBrZXk7CisgICAgICAgIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRd LmtleS5zY2FuY29kZSA9ICpzOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgc3RyaW5nICovCisjaWZuZGVmIE5PS1ZF UkJTCisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICB5ID0geGxvb2t1cChrdmVyYnMscCxu a3ZlcmJzLCZ4KTsgLyogTG9vayBpdCB1cCAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwic2V0 IG1vdXNlIGt2ZXJiIGxvb2t1cCIsMCx5KTsgLyogbmVlZCBleGFjdCBtYXRjaCAqLworICAgICAg ICAgICAgaWYgKHkgPiAtMSkgeworICAgICAgICAgICAgLyogQXNzaWduIHRoZSBrdmVyYiB0byB0 aGUgZXZlbnQgKi8KKyAgICAgICAgICAgIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLnR5cGUgPSBr dmVyYjsKKyAgICAgICAgICAgIG1vdXNlbWFwW2J1dHRvbl1bZXZlbnRdLmt2ZXJiLmlkID0gRl9L VkVSQiB8IHk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor I2VuZGlmIC8qIE5PS1ZFUkJTICovCisKKyAgICAgICAvKiBPdGhlcndpc2UsIGl0J3MgYSBtYWNy bywgc28gYXNzaWduIHRoZSBtYWNybyB0byB0aGUgZXZlbnQgKi8KKyAgICAgICBtb3VzZW1hcFti dXR0b25dW2V2ZW50XS50eXBlID0gbWFjcm87CisgICAgICAgbW91c2VtYXBbYnV0dG9uXVtldmVu dF0ubWFjcm8uc3RyaW5nID0gKE1BQ1JPKSBtYWxsb2Moc3RybGVuKHMpKzEpOworICAgICAgIGlm IChtb3VzZW1hcFtidXR0b25dW2V2ZW50XS5tYWNyby5zdHJpbmcpCisgICAgICAgICBzdHJjcHko KGNoYXIgKikgbW91c2VtYXBbYnV0dG9uXVtldmVudF0ubWFjcm8uc3RyaW5nLCBzKTsgLyogc2Fm ZSAqLworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaW5pdHZpayA9IDE7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogVXBkYXRlIFZJSyBUYWJsZSAqLworICAgIGlmICggKGJ1dHRvbiA9PSBY WU1fQjMpICYmIChtb3VzZWJ1dHRvbmNvdW50KCkgPCAzKSAmJiAhcXVpZXQgKQorICAgIHsKKyAg ICAgICAgcHJpbnRmKCI/V2FybmluZzogdGhpcyBtYWNoaW5lIGRvZXMgbm90IGhhdmUgYSB0aHJl ZSBidXR0b24gbW91c2UuXG4iKTsKKyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyAgICByZXR1 cm4oMSk7Cit9CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisK KyNpZm5kZWYgTk9YRkVSCitpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU0VUIFNFTkQvUkVDRUlWRSAqLworc2V0c3IoeHgsIHJtc2ZsZykgaW50IHh4OyBpbnQgcm1z ZmxnOyB7CisgICAgaWYgKHh4ID09IFhZUkVDVikKKyAgICAgIGNrc3RybmNweShsaW5lLCJQYXJh bWV0ZXIgZm9yIGluYm91bmQgcGFja2V0cyIsTElOQlVGU0laKTsKKyAgICBlbHNlCisgICAgICBj a3N0cm5jcHkobGluZSwiUGFyYW1ldGVyIGZvciBvdXRib3VuZCBwYWNrZXRzIixMSU5CVUZTSVop OworCisgICAgaWYgKHJtc2ZsZykgeworICAgICAgICBpZiAoKHkgPSBjbWtleShyc3J0YWIsbnJz cnRhYixsaW5lLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAtMykg eworICAgICAgICAgICAgICAgIHByaW50ZigiP1JlbW90ZSByZWNlaXZlIHBhcmFtZXRlciByZXF1 aXJlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0gZWxz ZSByZXR1cm4oeSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoKHkgPSBj bWtleShzcnRhYixuc3J0YWIsbGluZSwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkpOworICAg IH0KKyAgICBzd2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgWFlRQ1RMOiAgICAgICAgICAgICAgICAg ICAgICAvKiBDT05UUk9MLVBSRUZJWCAqLworICAgICAgICBpZiAoKHggPSBjbW51bSgiQVNDSUkg dmFsdWUgb2YgY29udHJvbCBwcmVmaXgiLCIiLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7 CisgICAgICAgIGlmICgoeSA+IDMyICYmIHkgPCA2MykgfHwgKHkgPiA5NSAmJiB5IDwgMTI3KSkg eworICAgICAgICAgICAgaWYgKHh4ID09IFhZUkVDVikKKyAgICAgICAgICAgICAgY3RscSA9IChD SEFSKSB5OyAgICAgICAgICAvKiBSRUNFSVZFIHByZWZpeCwgdXNlIHdpdGggY2F1dGlvbiEgKi8K KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgbXljdGxxID0gKENIQVIpIHk7ICAgICAg ICAvKiBTRU5EIHByZWZpeCwgT0sgdG8gY2hhbmdlICovCisgICAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnRmKCI/SWxsZWdh bCB2YWx1ZSBmb3IgcHJlZml4IGNoYXJhY3RlclxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkp OworICAgICAgICB9CisKKyAgICAgIGNhc2UgWFlFT0w6CisgICAgICAgIGlmICgoeSA9IHNldGNj KCIxMyIsJnopKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh6ID4g MzEpIHsKKyAgICAgICAgICAgIHByaW50ZigiU29ycnksIHRoZSBsZWdhbCB2YWx1ZXMgYXJlIDAt MzFcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo eHggPT0gWFlSRUNWKQorICAgICAgICAgIGVvbCA9IChDSEFSKSB6OworICAgICAgICBlbHNlCisg ICAgICAgICAgc2VvbCA9IChDSEFSKSB6OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHkpOwor CisgICAgICBjYXNlIFhZTEVOOgorICAgICAgICB5ID0gY21udW0oIk1heGltdW0gbnVtYmVyIG9m IGNoYXJhY3RlcnMgaW4gYSBwYWNrZXQiLCI5MCIsMTAsJngsCisgICAgICAgICAgICAgICAgICB4 eHN0cmluZyk7CisgICAgICAgIGlmICh4eCA9PSBYWVJFQ1YpIHsgICAgICAgICAgICAgLyogUmVj ZWl2ZS4uLiAqLworICAgICAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSxtYXhycHMpKSA8 IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGlmIChwcm90b2NvbCAh PSBQUk9UT19LKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIHRoaXMgY29tbWFu ZCBkb2VzIG5vdCBhcHBseSB0byAlcyBwcm90b2NvbC5cbiIsCisgICAgICAgICAgICAgICAgICAg ICAgIHB0YWJbcHJvdG9jb2xdLnBfbmFtZQorICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgIHByaW50ZigiVXNlIFNFVCBTRU5EIFBBQ0tFVC1MRU5HVEggZm9yIFhZWk1P REVNXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKHogPCAxMCkgeworICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIDEw IGlzIHRoZSBtaW5pbXVtXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgICAgIHNzdGF0 ZSA9IHNldGdlbignUycsICI0MDEiLCBja2l0b2EoeiksICIiKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHog PiBNQVhSUCkgeiA9IE1BWFJQOworICAgICAgICAgICAgICAgICAgICB5ID0gYWRqcGtsKHosd3Ns b3RyLGJpZ3Jic2l6KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHkgIT0geikgeworICAgICAg ICAgICAgICAgICAgICAgICAgdXJwc2l6ID0geTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgheGNtZHNyYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZ2ZsZykgcHJpbnRm KAorIiBBZGp1c3RpbmcgcmVjZWl2ZSBwYWNrZXQtbGVuZ3RoIHRvICVkIGZvciAlZCB3aW5kb3cg c2xvdHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5 LCB3c2xvdHIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHVy cHNpeiA9IHk7CisgICAgICAgICAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLnJwa3RsZW4gPSB1 cnBzaXo7CisgICAgICAgICAgICAgICAgICAgIHJwc2l6ID0gICh5ID4gOTQpID8gOTQgOiB5Owor ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgQ0tfWFlaCisgICAgICAgICAgICAgICAg ICAgIGlmICgocHJvdG9jb2wgPT0gUFJPVE9fWCB8fCBwcm90b2NvbCA9PSBQUk9UT19YQykgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgICB6ICE9IDEyOCAmJiB6ICE9IDEwMjQpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiU29ycnksIGJhZCBwYWNrZXQgbGVuZ3RoIGZvciBY TU9ERU0uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUGxlYXNlIHVzZSAx Mjggb3IgMTAyNC5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIENLX1hZWiAqLworICAgICAgICAgICAgICAg ICAgICB1cnBzaXogPSBycHNpeiA9IHo7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlbmQuLi4gKi8K KyAgICAgICAgICAgIGlmICgoeSA9IHNldG51bSgmeix4LHksbWF4c3BzKSkgPCAwKQorICAgICAg ICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICBpZiAoeiA8IDEwKSB7CisgICAgICAgICAg ICAgICAgcHJpbnRmKCJTb3JyeSwgMTAgaXMgdGhlIG1pbmltdW1cbiIpOworICAgICAgICAgICAg ICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJvdG9jb2wg PT0gUFJPVE9fSykgeworICAgICAgICAgICAgICAgIGlmICh6ID4gTUFYU1ApIHogPSBNQVhTUDsK KyAgICAgICAgICAgICAgICBzcHNpeiA9IHo7ICAgICAgICAgICAgICAvKiBTZXQgaXQgKi8KKyAg ICAgICAgICAgICAgICB5ID0gYWRqcGtsKHNwc2l6LHdzbG90cixiaWdzYnNpeik7CisgICAgICAg ICAgICAgICAgaWYgKHkgIT0gc3BzaXogJiYgIXhjbWRzcmMpCisgICAgICAgICAgICAgICAgICBp ZiAobXNnZmxnKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkFkanVzdGluZyBwYWNrZXQg c2l6ZSB0byAlZCBmb3IgJWQgd2luZG93IHNsb3RzXG4iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgeSx3c2xvdHIpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIHkgPSB6 OworI2lmZGVmIENLX1hZWgorICAgICAgICAgICAgaWYgKChwcm90b2NvbCA9PSBQUk9UT19YIHx8 IHByb3RvY29sID09IFBST1RPX1hDKSAmJgorICAgICAgICAgICAgICAgICB6ICE9IDEyOCAmJiB6 ICE9IDEwMjQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlNvcnJ5LCBiYWQgcGFja2V0IGxl bmd0aCBmb3IgWE1PREVNLlxuIik7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJQbGVhc2UgdXNl IDEyOCBvciAxMDI0LlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg ICAgIH0KKyNlbmRpZiAvKiBDS19YWVogKi8KKyAgICAgICAgICAgIHNwc2l6ID0gc3BtYXggPSBz cHNpenIgPSB5OyAvKiBTZXQgaXQgYW5kIGZsYWcgdGhhdCBpdCB3YXMgc2V0ICovCisgICAgICAg ICAgICBzcHNpemYgPSAxOyAgICAgICAgICAgICAgICAgLyogdG8gYWxsb3cgb3ZlcnJpZGluZyBT ZW5kLUluaXQuICovCisgICAgICAgICAgICBwdGFiW3Byb3RvY29sXS5zcGt0ZmxnID0gc3BzaXpm OworICAgICAgICAgICAgcHRhYltwcm90b2NvbF0uc3BrdGxlbiA9IHNwc2l6OworICAgICAgICB9 CisgICAgICAgIGlmIChwZmxhZyAmJiBwcm90b2NvbCA9PSBQUk9UT19LICYmICF4Y21kc3JjKSB7 CisgICAgICAgICAgICBpZiAoeiA+IDk0ICYmICFyZWxpYWJsZSAmJiBtc2dmbGcpIHsKKyAgICAg ICAgICAgICAgICAvKiBwcmludGYoIkV4dGVuZGVkLWxlbmd0aCBwYWNrZXRzIHJlcXVlc3RlZC5c biIpOyAqLworICAgICAgICAgICAgICAgIGlmIChiY3RyIDwgMiAmJiB6ID4gMjAwKSBwcmludGYo IlwKK1JlbWVtYmVyIHRvIFNFVCBCTE9DSyAyIG9yIDMgZm9yIGxvbmcgcGFja2V0cy5cbiIpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNwZWVkIDw9IDBMKSBzcGVlZCA9IHR0Z3Nw ZCgpOworI2lmZGVmIENPTU1FTlQKKy8qCisgIEtlcm1pdCBkb2VzIHRoaXMgbm93IGl0c2VsZi4K KyovCisgICAgICAgICAgICBpZiAoc3BlZWQgPD0gMEwgJiYgeiA+IDIwMCAmJiBtc2dmbGcpIHsK KyAgICAgICAgICAgICAgICBwcmludGYoIlwKK01ha2Ugc3VyZSB5b3VyIHRpbWVvdXQgaW50ZXJ2 YWwgaXMgbG9uZyBlbm91Z2ggZm9yICVkLWJ5dGUgcGFja2V0cy5cbiIseik7CisgICAgICAgICAg ICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNj ZXNzID0geSk7CisKKyAgICAgIGNhc2UgWFlNQVJLOgorI2lmZGVmIERPT01TREFZCisvKgorICBQ cmludGFibGUgc3RhcnQtb2YtcGFja2V0IHdvcmtzIGZvciBVTklYIGFuZCBWTVMgb25seSEKKyov CisgICAgICAgIHhfaWZudW0gPSAxOworICAgICAgICB5ID0gY21udW0oIkNvZGUgZm9yIHBhY2tl dC1zdGFydCBjaGFyYWN0ZXIiLCIxIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIHhfaWZudW0g PSAwOworICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDEyNikpIDwgMCkgcmV0dXJuKHkp OworI2Vsc2UKKyAgICAgICAgaWYgKCh5ID0gc2V0Y2MoIjEiLCZ6KSkgPCAwKQorICAgICAgICAg ICAgcmV0dXJuKHkpOworI2VuZGlmIC8qIERPT01TREFZICovCisgICAgICAgIGlmICh4eCA9PSBY WVJFQ1YpCisgICAgICAgICAgc3RjaHIgPSAoQ0hBUikgejsKKyAgICAgICAgZWxzZSB7CisgICAg ICAgICAgICBteXN0Y2ggPSAoQ0hBUikgejsKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgICAg ICAvKiBJZiBJS1MgbmVnb3RpYXRpb24gaW4gdXNlICAgKi8KKyAgICAgICAgICAgIGlmIChURUxP UFRfVShURUxPUFRfS0VSTUlUKSB8fCBURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkpCisgICAgICAg ICAgICAgIHRuX3Npa3MoS0VSTUlUX1NPUCk7ICAgICAgLyogUmVwb3J0IGNoYW5nZSB0byBvdGhl ciBzaWRlICovCisjZW5kaWYgLyogSUtTX09QVElPTiAqLworICAgICAgICB9CisgICAgICAgIHJl dHVybihzdWNjZXNzID0geSk7CisKKyAgICAgIGNhc2UgWFlOUEFEOiAgICAgICAgICAgICAgICAg ICAgICAvKiBQQURESU5HICovCisgICAgICAgIHkgPSBjbW51bSgiSG93IG1hbnkgcGFkZGluZyBj aGFyYWN0ZXJzIGZvciBpbmJvdW5kIHBhY2tldHMiLCIwIiwxMCwmeCwKKyAgICAgICAgICAgICAg ICAgIHh4c3RyaW5nKTsKKyAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSw5NCkpIDwgMCkg cmV0dXJuKHkpOworICAgICAgICBpZiAoeHggPT0gWFlSRUNWKQorICAgICAgICAgIG15cGFkbiA9 IChDSEFSKSB6OworICAgICAgICBlbHNlCisgICAgICAgICAgbnBhZCA9IChDSEFSKSB6OworICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IHkpOworCisgICAgICBjYXNlIFhZUEFEQzogICAgICAgICAg ICAgICAgICAgICAgLyogUEFELUNIQVJBQ1RFUiAqLworICAgICAgICBpZiAoKHkgPSBzZXRjYygi MCIsJnopKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYgKHh4ID09IFhZUkVDVikgbXlwYWRj ID0gejsgZWxzZSBwYWRjaCA9IHo7CisgICAgICAgIHJldHVybihzdWNjZXNzID0geSk7CisKKyAg ICAgIGNhc2UgWFlUSU1POiAgICAgICAgICAgICAgICAgICAgICAvKiBUSU1FT1VUICovCisgICAg ICAgIGlmICh4eCA9PSBYWVJFQ1YpIHsKKyAgICAgICAgICAgIHkgPSBjbW51bSgiUGFja2V0IHRp bWVvdXQgaW50ZXJ2YWwiLGNraXRvYShVUlRJTUUpLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAg ICAgIGlmICgoeSA9IHNldG51bSgmeix4LHksOTQpKSA8IDApIHJldHVybih5KTsKKworICAgICAg ICAgICAgaWYgKHJtc2ZsZykgeyAgICAgICAgICAgICAgIC8qIFJFTU9URSBTRVQgUkVDRUlWRSBU SU1FT1VUICovCisgICAgICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjQwMiIsIGNr aXRvYSh6KSwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAg ICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBSRUNFSVZFIFRJTUVP VVQgKi8KKyAgICAgICAgICAgICAgICBwa3R0aW0gPSB6OyAgICAgICAgICAgICAvKiAgIFZhbHVl IHRvIHB1dCBpbiBteSBuZWdvdGlhdGlvbiAqLworICAgICAgICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICAgcGFja2V0IGZvciBvdGhlciBLZXJtaXQgdG8gdXNlICovCisKKyAg ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU0VORCBUSU1FT1VU ICovCisjaWZkZWYgQ0tfVElNRVJTCisgICAgICAgICAgICBleHRlcm4gaW50IHJ0dGZsZywgbWlu dGltZSwgbWF4dGltZTsKKyAgICAgICAgICAgIGludCB0bWluID0gMCwgdG1heCA9IDA7CisjZW5k aWYgLyogQ0tfVElNRVJTICovCisgICAgICAgICAgICB5ID0gY21udW0oIlBhY2tldCB0aW1lb3V0 IGludGVydmFsIixja2l0b2EoRE1ZVElNKSwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgICAgICBp ZiAoeSA9PSAtMykgeyAgICAgICAgICAgICAgLyogVGhleSBjYW5jZWxsZWQgYSBwcmV2aW91cyAq LworICAgICAgICAgICAgICAgIHggPSBETVlUSU07ICAgICAgICAgICAgIC8qIFNFVCBTRU5EIGNv bW1hbmQsIHNvIHJlc3RvcmUgKi8KKyAgICAgICAgICAgICAgICB0aW1lZiA9IDA7ICAgICAgICAg ICAgICAvKiBhbmQgdHVybiBvZmYgdGhlIG92ZXJyaWRlIGZsYWcgKi8KKyAgICAgICAgICAgICAg ICB5ID0gY21jZm0oKTsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBDS19USU1FUlMKKyAgICAgICAg ICAgIGlmICh5IDwgMCkgcmV0dXJuKHkpOworICAgICAgICAgICAgaWYgKHggPCAwKSB7CisgICAg ICAgICAgICAgICAgcHJpbnRmKCI/T3V0IG9mIHJhbmdlIC0gJWRcbiIseCk7CisgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoeiA9IGNt a2V5KHRpbW90YWIsMiwiIiwiZHluYW1pYyIseHhzdHJpbmcpKSA8IDApIHJldHVybih6KTsKKyAg ICAgICAgICAgIGlmICh6KSB7CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIk1pbmlt dW0gdGltZW91dCB0byBhbGxvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEi LDEwLCZ0bWluLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOwor ICAgICAgICAgICAgICAgIGlmICh0bWluIDwgMSkgeworICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIj9PdXQgb2YgcmFuZ2UgLSAlZFxuIix0bWluKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21u dW0oIk1heGltdW0gdGltZW91dCB0byBhbGxvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIjAiLDEwLCZ0bWF4LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0 dXJuKHkpOworICAgICAgICAgICAgICAgIC8qIDAgbWVhbnMgbGV0IEtlcm1pdCBjaG9vc2UsIDwg MCBtZWFucyBubyBtYXhpbXVtICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIHJ0 dGZsZyA9IHo7ICAgICAgICAgICAgICAgICAvKiBSb3VuZC10cmlwIHRpbWVyIGZsYWcgKi8KKyAg ICAgICAgICAgIHogPSB4OworI2Vsc2UKKyAgICAgICAgICAgIGlmICgoeSA9IHNldG51bSgmeix4 LHksOTQpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih5KTsKKyNlbmRpZiAvKiBDS19USU1F UlMgKi8KKyAgICAgICAgICAgIHRpbWVmID0gMTsgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9u IHRoZSBvdmVycmlkZSBmbGFnICovCisgICAgICAgICAgICB0aW1pbnQgPSBydGltbyA9IHo7ICAg ICAgICAgLyogT3ZlcnJpZGUgdmFsdWUgZm9yIG1lIHRvIHVzZSAqLworI2lmZGVmIENLX1RJTUVS UworICAgICAgICAgICAgaWYgKHJ0dGZsZykgeyAgICAgICAgICAgICAgIC8qIExvd2VyIGFuZCB1 cHBlciBib3VuZHMgKi8KKyAgICAgICAgICAgICAgICBtaW50aW1lID0gdG1pbjsKKyAgICAgICAg ICAgICAgICBtYXh0aW1lID0gdG1heDsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDS19USU1F UlMgKi8KKyAgICAgICAgfQorICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBj YXNlIFhZRlBBVEg6ICAgICAgICAgICAgICAgICAgICAgLyogUEFUSE5BTUVTICovCisgICAgICAg IGlmICh4eCA9PSBYWVJFQ1YpIHsKKyAgICAgICAgICAgIHkgPSBjbWtleShycGF0aHRhYixucnBh dGh0YWIsIiIsImF1dG8iLHh4c3RyaW5nKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHkgPSBjbWtleShwYXRodGFiLG5wYXRodGFiLCIiLCJvZmYiLHh4c3RyaW5nKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoeSA8IDApIHJldHVybih5KTsKKworICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKHh4ID09IFhZUkVDVikgeyAgICAgICAg ICAgICAvKiBTRVQgUkVDRUlWRSBQQVRITkFNRVMgKi8KKyAgICAgICAgICAgIGZucnBhdGggPSB5 OworICAgICAgICAgICAgcHRhYltwcm90b2NvbF0uZm5ycCA9IGZucnBhdGg7CisgICAgICAgIH0g ZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFNFTkQgUEFUSE5BTUVTICovCisg ICAgICAgICAgICBmbnNwYXRoID0geTsKKyAgICAgICAgICAgIHB0YWJbcHJvdG9jb2xdLmZuc3Ag PSBmbnNwYXRoOworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7ICAgICAg ICAgICAgLyogTm90ZTogMCA9IE9OLCAxID0gT0ZGICovCisgICAgICAgIC8qIEluIG90aGVyIHdv cmRzLCBPTiA9IGxlYXZlIHBhdGhuYW1lcyBPTiwgT0ZGID0gdGFrZSB0aGVtIG9mZi4gKi8KKwor ICAgICAgY2FzZSBYWVBBVVM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBTRU5EL1JFQ0VJ VkUgUEFVU0UgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJNaWxsaXNlY29uZHMgdG8gcGF1c2UgYmV0 d2VlbiBwYWNrZXRzIiwiMCIsMTAsJngseHhzdHJpbmcpOworICAgICAgICBpZiAoKHkgPSBzZXRu dW0oJnoseCx5LDE1MDAwKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgcGt0 cGF1cyA9IHo7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyNpZmRlZiBDS1hYQ0hB UiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgU0VORC9SRUNFSVZFIElHTk9SRS9ET1VC TEUgKi8KKyAgICAgIGNhc2UgWFlJR046CisgICAgICBjYXNlIFhZREJMOiB7CisgICAgICAgICAg aW50IGksIHp6OworICAgICAgICAgIHNob3J0ICpwOworICAgICAgICAgIGV4dGVybiBzaG9ydCBk Ymx0W107CisgICAgICAgICAgZXh0ZXJuIGludCBkYmxmbGFnLCBpZ25mbGFnOworCisgICAgICAg ICAgLyogTWFrZSBzcGFjZSBmb3IgYSB0ZW1wb3JhcnkgY29weSBvZiB0aGUgaWdub3JlL2RvdWJs ZSB0YWJsZSAqLworCisgICAgICAgICAgenogPSB5OworI2lmZGVmIENPTU1FTlQKKyAgICAgICAg ICBpZiAoenogPT0gWFlJR04gJiYgeHggPT0gWFlTRU5EKSB7CisgICAgICAgICAgICAgIGJsYWgg YmxhaCB3aG8gY2FyZXMKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHp6ID09IFhZREJMICYm IHh4ID09IFhZUkVDVikgeworICAgICAgICAgICAgICBibGFoIGJsYWgKKyAgICAgICAgICB9Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgIHAgPSAoc2hvcnQgKiltYWxsb2MoMjU2ICog c2l6ZW9mKHNob3J0KSk7CisgICAgICAgICAgaWYgKCFwKSB7CisgICAgICAgICAgICAgIHByaW50 ZigiP0ludGVybmFsIGVycm9yIC0gbWFsbG9jIGZhaWx1cmVcbiIpOworICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBp KyspIHBbaV0gPSBkYmx0W2ldOyAvKiBDb3B5IGN1cnJlbnQgdGFibGUgKi8KKworICAgICAgICAg IHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgIC8qIENvbGxlY3QgYSBsaXN0IG9mIG51bWJl cnMgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgeF9pZm51bSA9IDE7ICAgICAgICAg ICAgICAvKiBUdXJuIG9mZiBjb21wbGFpbnRzIGZyb20gZXZhbCgpICovCisjZW5kaWYgLyogTk9T UEwgKi8KKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21udW0oenogPT0gWFlEQkwgPworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiQ2hhcmFjdGVyIHRvIGRvdWJsZSIgOgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiQ2hhcmFjdGVyIHRvIGlnbm9yZSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiLDEwLCZ5LHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkpIDwgMCkgeworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgICAgICAgeF9pZm51 bSA9IDA7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0z KSAgICAgICAgICAvKiBEb25lICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgaWYgKHggPT0gLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAocCkg eyBmcmVlKHApOyBwID0gTlVMTDsgfQorICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAs IlNFVCBTL1IgRE9VQkxFL0lHTk9SRSBhdG1idWYiLGF0bWJ1ZiwwKTsKKyAgICAgICAgICAgICAg ICAgICAgICBpZiAoIWNrc3RyY21wKGF0bWJ1Ziwibm9uZSIsNCwwKSB8fAorICAgICAgICAgICAg ICAgICAgICAgICAgICAhY2tzdHJjbXAoYXRtYnVmLCJub24iLDMsMCkgfHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIWNrc3RyY21wKGF0bWJ1Ziwibm8iLDIsMCkgfHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIWNrc3RyY21wKGF0bWJ1ZiwibiIsMSwwKSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIC8qIEdldCBjb25maXJtYXRpb24g Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAyNTY7IHkrKykKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkYmx0W3ldICY9ICh6eiA9PSBYWURCTCkgPyAxIDogMjsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHp6ID09IFhZREJMKSBkYmxmbGFnID0gMDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHp6ID09IFhZSUdOKSBpZ25mbGFnID0gMDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIj9QbGVhc2Ugc3BlY2lmeSBhIG51bWJlciBvciB0aGUgd29yZCBO T05FXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgIGZyZWUocCk7CisgICAgICAgICAgICAgICAgICAgICAgcCA9IE5VTEw7CisgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICB9CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICAgIHhfaWZudW0gPSAwOworI2Vu ZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICAgIGlmICh5IDwgMCB8fCB5ID4gMjU1KSB7Cisg ICAgICAgICAgICAgICAgICBwcmludGYoIj9QbGVhc2UgZW50ZXIgYSBjaGFyYWN0ZXIgY29kZSBp biByYW5nZSAwLTI1NVxuIik7CisgICAgICAgICAgICAgICAgICBmcmVlKHApOworICAgICAgICAg ICAgICAgICAgcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgIHBbeV0gfD0gKHp6ID09IFhZREJMKSA/IDIgOiAxOwor ICAgICAgICAgICAgICBpZiAoenogPT0gWFlEQkwpIGRibGZsYWcgPSAxOworICAgICAgICAgICAg ICBpZiAoenogPT0gWFlJR04pIGlnbmZsYWcgPSAxOworICAgICAgICAgIH0gLyogRW5kIG9mIHdo aWxlIGxvb3AgKi8KKworICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgp OworLyoKKyAgR2V0IGhlcmUgb25seSBpZiB0aGV5IGhhdmUgbWFkZSBubyBtaXN0YWtlcy4gIENv cHkgdGVtcG9yYXJ5IHRhYmxlIGJhY2sgdG8KKyAgcGVybWFuZW50IG9uZSwgdGhlbiBmcmVlIHRl bXBvcmFyeSB0YWJsZSBhbmQgcmV0dXJuIHN1Y2Nlc3NmdWxseS4KKyovCisgICAgICAgICAgaWYg KHApIHsKKyAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSBkYmx0W2ldID0g cFtpXTsKKyAgICAgICAgICAgICAgZnJlZShwKTsKKyAgICAgICAgICAgICAgcCA9IE5VTEw7Cisg ICAgICAgICAgfQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5k aWYgLyogQ0tYWENIQVIgKi8KKworI2lmZGVmIFBJUEVTRU5ECisgICAgICBjYXNlIFhZRkxUUjog eyAgICAgICAgICAgICAgICAgICAgLyogU0VUIHsgU0VORCwgUkVDRUlWRSB9IEZJTFRFUiAqLwor ICAgICAgICAgIGlmICgoeSA9IGNtdHh0KCh4eCA9PSBYWVNFTkQpID8KKyAgICAgICAgICAgICAg ICAiRmlsdGVyIHByb2dyYW0gZm9yIHNlbmRpbmcgZmlsZXMgLVxuXAorIHVzZSBcXHYoZmlsZW5h bWUpIHRvIHN1YnN0aXR1dGUgZmlsZW5hbWUiIDoKKyAgICAgICAgICAgICAgICAiRmlsdGVyIHBy b2dyYW0gZm9yIHJlY2VpdmluZyBmaWxlcyAtXG5cCisgdXNlIFxcdihmaWxlbmFtZSkgdG8gc3Vi c3RpdHV0ZSBmaWxlbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiIsJnMsTlVMTCkp IDwgMCkKKyAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICBpZiAoISpzKSB7ICAgICAg ICAgICAgICAgICAgICAvKiBSZW1vdmluZyBhIGZpbHRlci4uLiAqLworICAgICAgICAgICAgICBp ZiAoeHggPT0gWFlTRU5EICYmIHNuZGZpbHRlcikgeworICAgICAgICAgICAgICAgICAgbWFrZXN0 cigmZ19zZmlsdGVyLE5VTEwpOworICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc25kZmlsdGVy LE5VTEwpOworICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJjdmZpbHRlcikgeworICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmZ19yZmlsdGVyLE5VTEwpOworICAgICAgICAgICAgICAgICAgbWFr ZXN0cigmcmN2ZmlsdGVyLE5VTEwpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogQWRkaW5nIGEgZmlsdGVyLi4uICovCisgICAgICAgICAgcyA9IGJyc3RyaXAocyk7ICAg ICAgICAgICAgICAgLyogU3RyaXAgYW55IGJyYWNlcyAqLworICAgICAgICAgIHkgPSBzdHJsZW4o cyk7CisgICAgICAgICAgaWYgKHh4ID09IFhZU0VORCkgeyAgICAgICAgICAgLyogRm9yIFNFTkQg ZmlsdGVyLi4uICovCisgICAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB5OyB4KyspIHsgLyog bWFrZSBzdXJlIHRoZXkgaW5jbHVkZWQgIlx2KC4uLikiICovCisgICAgICAgICAgICAgICAgICBp ZiAoc1t4XSAhPSAnXFwnKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgIGlmIChzW3grMV0g PT0gJ3YnKSBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoeCA9PSB5 KSB7CisgICAgICAgICAgICAgICAgICBwcmludGYoCisgICAgICAgICAgICAgICI/RmlsdGVyIG11 c3QgY29udGFpbiBhIHJlcGxhY2VtZW50IHZhcmlhYmxlIGZvciBmaWxlbmFtZS5cbiIKKyAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoeHggPT0gWFlTRU5EKSB7 CisgICAgICAgICAgICAgIG1ha2VzdHIoJnNuZGZpbHRlcixzKTsKKyAgICAgICAgICAgICAgbWFr ZXN0cigmZ19zZmlsdGVyLHMpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIG1h a2VzdHIoJnJjdmZpbHRlcixzKTsKKyAgICAgICAgICAgICAgbWFrZXN0cigmZ19yZmlsdGVyLHMp OworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQor I2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyAgICAgIGNhc2UgWFlJTklMOgorICAgICAgICB5ID0g Y21udW0oIk1heCBsZW5ndGggZm9yIHByb3RvY29sIGluaXQgc3RyaW5nIiwiLTEiLDEwLCZ4LHh4 c3RyaW5nKTsKKyAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSwtMSkpIDwgMCkKKyAgICAg ICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh4eCA9PSBYWVNFTkQpCisgICAgICAgICAgc3By bWxlbiA9IHo7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBycHJtbGVuID0gejsKKyAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSA5OTM6IHsKKyAgICAgICAgICBleHRl cm4gaW50IHNlbmRpcGt0czsKKyAgICAgICAgICBpZiAoeHggPT0gWFlTRU5EKSB7CisgICAgICAg ICAgICAgIGlmICgoeCA9IHNldG9uKCZzZW5kaXBrdHMpKSA8IDApCisgICAgICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4oMSk7CisgICAgICB9Cisj aWZkZWYgQ0tfUEVSTVMKKyAgICAgIGNhc2UgOTk0OgorCXN3aXRjaCh4eCkgeworCSAgY2FzZSBY WVNFTkQ6CisJICAgIGlmICgoeCA9IHNldG9uKCZhdGxwcm8pKSA8IDApIHJldHVybih4KTsKKwkg ICAgYXRncHJvID0gYXRscHJvOworCSAgICByZXR1cm4oMSk7CisJICBjYXNlIFhZUkVDVjoKKwkg ICAgaWYgKCh4ID0gc2V0b24oJmF0bHByaSkpIDwgMCkgcmV0dXJuKHgpOworCSAgICBhdGdwcmkg PSBhdGxwcmk7CisJICAgIHJldHVybigxKTsKKwkgIGRlZmF1bHQ6CisJICAgIHJldHVybigtMik7 CisJfQorI2VuZGlmIC8qIENLX1BFUk1TICovCisKKyNpZm5kZWYgTk9DU0VUUworICAgICAgY2Fz ZSBYWUNTRVQ6IHsgICAgICAgICAgICAgICAgICAgIC8qIENIQVJBQ1RFUi1TRVQtU0VMRUNUSU9O ICovCisgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgeGZybXRhYltdOworICAgICAgICAg IGV4dGVybiBpbnQgcl9jc2V0LCBzX2NzZXQ7CisgICAgICAgICAgaWYgKCh5ID0gY21rZXkoeGZy bXRhYiwyLCIiLCJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJu KHkpOworICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICBpZiAoeHggPT0gWFlTRU5EKQorICAgICAgICAgICAgc19jc2V0ID0g eTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByX2NzZXQgPSB5OworICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CisgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisgICAg ICBjYXNlIFhZQlVQOgorICAgICAgICBpZiAoKHkgPSBjbWtleShvbm9mZiwyLCIiLCJvbiIseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKHh4ID09IFhZU0VORCkgeworICAgICAg ICAgICAgZXh0ZXJuIGludCBza2lwYnVwOworICAgICAgICAgICAgc2tpcGJ1cCA9ICh5ID09IDAp ID8gMSA6IDA7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgcHJpbnRmKAorIj9QbGVhc2UgdXNlIFNFVCBGSUxFIENPTExJU0lP TiB0byBjaG9vc2UgdGhlIGRlc2lyZWQgYWN0aW9uXG4iKTsKKyAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgIH0KKworICAgICAgY2FzZSBYWU1PVkU6CisjaWZkZWYgQ09NTUVOVAorICAg ICAgICB5ID0gY21kaXIoIkRpcmVjdG9yeSB0byBtb3ZlIGZpbGUocykgdG8gYWZ0ZXIgc3VjY2Vz c2Z1bCB0cmFuc2ZlciIsCisgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZyk7CisjZWxz ZQorICAgICAgICB5ID0gY210eHQoIkRpcmVjdG9yeSB0byBtb3ZlIGZpbGUocykgdG8gYWZ0ZXIg c3VjY2Vzc2Z1bCB0cmFuc2ZlciIsCisJCSAgIiIsJnMseHhzdHJpbmcpOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKworICAgICAgICBpZiAoeSA8IDAgJiYgeSAhPSAtMykKKyAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgcyA9 IGJyc3RyaXAobGluZSk7CisKKyNpZmRlZiBDT01NRU5UCisJLyogT25seSBuZWVkZWQgZm9yIGNt ZGlyKCkgKi8KKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVy bih4KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCisJLyogQ2hlY2sgZGlyZWN0b3J5IGV4aXN0 ZW5jZSBpZiBhYnNvbHV0ZSAqLworCS8qIFRISVMgTUVBTlMgSVQgQ0FOJ1QgSU5DTFVERSBBTlkg REVGRVJSRUQgVkFSSUFCTEVTISAqLworCWlmIChzKSBpZiAoKnMpIHsKKwkgICAgaWYgKGlzYWJz b2x1dGUocykgJiYgIWlzZGlyKHMpKSB7CisJCXByaW50ZigiP0RpcmVjdG9yeSBkb2VzIG5vdCBl eGlzdCAtICVzXG4iLHMpOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJfQorICAgICAgICBpZiAo eHggPT0gWFlTRU5EKSB7CisgICAgICAgICAgICBpZiAoKnMpIHsKKyNpZmRlZiBDT01NRU5UCisJ CS8qIEFsbG93IGl0IHRvIGJlIHJlbGF0aXZlICovCisgICAgICAgICAgICAgICAgemZucWZwKHMs TElOQlVGU0laLGxpbmUpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICBt YWtlc3RyKCZzbmRfbW92ZSxsaW5lKTsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZnX3NuZF9t b3ZlLGxpbmUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzbmRfbW92ZSxOVUxMKTsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZnX3NuZF9tb3ZlLE5V TEwpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCpz KSB7CisjaWZkZWYgQ09NTUVOVAorCQkvKiBBbGxvdyBpdCB0byBiZSByZWxhdGl2ZSAqLworICAg ICAgICAgICAgICAgIHpmbnFmcChzLExJTkJVRlNJWixsaW5lKTsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgICAgICAgICAgbWFrZXN0cigmcmN2X21vdmUsbGluZSk7CisgICAgICAgICAg ICAgICAgbWFrZXN0cigmZ19yY3ZfbW92ZSxsaW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgbWFrZXN0cigmcmN2X21vdmUsTlVMTCk7CisgICAgICAgICAgICAgICAg bWFrZXN0cigmZ19yY3ZfbW92ZSxOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIFhZUkVOQU1FOgorICAgICAg ICB5ID0gY210eHQoIlRlbXBsYXRlIHRvIHJlbmFtZSBmaWxlKHMpIHRvIGFmdGVyIHN1Y2Nlc3Nm dWwgdHJhbnNmZXIiLAorICAgICAgICAgICAgICAgICAgIiIsJnMsTlVMTCk7CQkvKiBOT1RFOiBu byB4eHN0cmluZyAqLworICAgICAgICBpZiAoeSA8IDAgJiYgeSAhPSAtMykJCS8qIEV2YWx1YXRp b24gaXMgZGVmZXJyZWQgKi8KKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGNrc3RybmNw eShsaW5lLHMsTElOQlVGU0laKTsKKyAgICAgICAgcyA9IGJyc3RyaXAobGluZSk7CisgICAgICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIGlm ICh4eCA9PSBYWVNFTkQpIHsKKyAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgICAg IG1ha2VzdHIoJnNuZF9yZW5hbWUscyk7CisgICAgICAgICAgICAgICAgbWFrZXN0cigmZ19zbmRf cmVuYW1lLHMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzbmRfcmVuYW1lLE5VTEwpOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJmdfc25kX3JlbmFt ZSxOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm ICgqcykgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJnJjdl9yZW5hbWUscyk7CisgICAgICAg ICAgICAgICAgbWFrZXN0cigmZ19yY3ZfcmVuYW1lLHMpOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBtYWtlc3RyKCZyY3ZfcmVuYW1lLE5VTEwpOworICAgICAgICAgICAg ICAgIG1ha2VzdHIoJmdfcmN2X3JlbmFtZSxOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisjaWZkZWYgVk1TCisgICAgICBjYXNl IDg4NzoJCQkJLyogVkVSU0lPTi1OVU1CRVJTICovCisgICAgICAgIGlmICh4eCA9PSBYWVNFTkQp IHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgdm1zc3ZlcnNpb25zOworICAgICAgICAgICAgcmV0 dXJuKHNldG9uKCZ2bXNzdmVyc2lvbnMpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IGV4dGVybiBpbnQgdm1zcnZlcnNpb25zOworICAgICAgICAgICAgcmV0dXJuKHNldG9uKCZ2bXNy dmVyc2lvbnMpKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworCisgICAgICBkZWZhdWx0 OgorICAgICAgICByZXR1cm4oLTIpOworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIEVuZCBvZiBTRVQgU0VORC9SRUNFSVZFLi4uICovCit9CisjZW5kaWYgLyogTk9Y RkVSICovCisKKyNpZm5kZWYgTk9YTUlUCitpbnQKK3NldHhtaXQoKSB7CisgICAgaWYgKCh5ID0g Y21rZXkoeG1pdGFiLG54bWl0LCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAg c3dpdGNoICh5KSB7CisgICAgICBjYXNlIFhNSVRFOiAgICAgICAgICAgICAgICAgICAgICAgLyog RU9GICovCisgICAgICAgIHkgPSBjbXR4dCgiQ2hhcmFjdGVycyB0byBzZW5kIGF0IGVuZCBvZiBm aWxlLFxuXAorIFVzZSBiYWNrc2xhc2ggY29kZXMgZm9yIGNvbnRyb2wgY2hhcmFjdGVycyIsIiIs JnMseHhzdHJpbmcpOworICAgICAgICBpZiAoeSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaWYg KChpbnQpc3RybGVuKHMpID4gWE1CVUZMKSB7CisgICAgICAgICAgICBwcmludGYoIj9Ub28gbWFu eSBjaGFyYWN0ZXJzLCAlZCBtYXhpbXVtXG4iLFhNQlVGTCk7CisgICAgICAgICAgICByZXR1cm4o LTIpOworICAgICAgICB9CisgICAgICAgIGNrc3RybmNweSh4bWl0YnVmLHMsWE1CVUZMKTsKKyAg ICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYTUlURjogICAgICAgICAg ICAgICAgICAgICAgIC8qIEZpbGwgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJOdW1lcmljIGNvZGUg Zm9yIGJsYW5rLWxpbmUgZmlsbCBjaGFyYWN0ZXIiLCIwIiwxMCwmeCwKKyAgICAgICAgICAgICAg ICAgIHh4c3RyaW5nKTsKKyAgICAgICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSwxMjcpKSA8IDAp IHJldHVybih5KTsKKyAgICAgICAgeG1pdGYgPSB6OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9 IDEpOworICAgICAgY2FzZSBYTUlUTDogICAgICAgICAgICAgICAgICAgICAgIC8qIExpbmVmZWVk ICovCisgICAgICAgIHJldHVybihzZXRvbigmeG1pdGwpKTsKKyAgICAgIGNhc2UgWE1JVFM6ICAg ICAgICAgICAgICAgICAgICAgICAvKiBMb2NraW5nLVNoaWZ0ICovCisgICAgICAgIHJldHVybihz ZXRvbigmeG1pdHMpKTsKKyAgICAgIGNhc2UgWE1JVFA6ICAgICAgICAgICAgICAgICAgICAgICAv KiBQcm9tcHQgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJOdW1lcmljIGNvZGUgZm9yIGhvc3QncyBw cm9tcHQgY2hhcmFjdGVyLCAwIGZvciBub25lIiwKKyAgICAgICAgICAgICAgICAgICIxMCIsMTAs JngseHhzdHJpbmcpOworICAgICAgICBpZiAoKHkgPSBzZXRudW0oJnoseCx5LDEyNykpIDwgMCkg cmV0dXJuKHkpOworICAgICAgICB4bWl0cCA9IHo7CisgICAgICAgIHJldHVybihzdWNjZXNzID0g MSk7CisgICAgICBjYXNlIFhNSVRYOiAgICAgICAgICAgICAgICAgICAgICAgLyogRWNobyAqLwor ICAgICAgICByZXR1cm4oc2V0b24oJnhtaXR4KSk7CisgICAgICBjYXNlIFhNSVRXOiAgICAgICAg ICAgICAgICAgICAgICAgLyogUGF1c2UgKi8KKyAgICAgICAgeSA9IGNtbnVtKCJOdW1iZXIgb2Yg bWlsbGlzZWNvbmRzIHRvIHBhdXNlIGJldHdlZW4gYmluYXJ5IGNoYXJhY3RlcnNcblwKK29yIHRl eHQgbGluZXMgZHVyaW5nIHRyYW5zbWlzc2lvbiIsIjAiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAg ICAgaWYgKCh5ID0gc2V0bnVtKCZ6LHgseSwxMDAwKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAg IHhtaXR3ID0gejsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICAgIGNhc2UgWE1J VFQ6ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0ICovCisgICAgICAgIHkgPSBjbW51 bSgiU2Vjb25kcyB0byB3YWl0IGZvciBlYWNoIGNoYXJhY3RlciB0byBlY2hvIiwKKyAgICAgICAg ICAgICAgICAgICIxIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAgIGlmICgoeSA9IHNldG51bSgm eix4LHksMTAwMCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICB4bWl0dCA9IHo7CisgICAgICAg IHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oLTIp OworICAgIH0KK30KKyNlbmRpZiAvKiBOT1hNSVQgKi8KKworI2lmbmRlZiBOT1hGRVIKKy8qICBE IE8gUiBNIFQgIC0tICBEbyBhIHJlbW90ZSBjb21tYW5kICAqLworCitWT0lECitybXNnKCkgewor ICAgIGlmIChwZmxhZyAmJiAhcXVpZXQgJiYgZmRpc3BsYSAhPSBYWUZEX04pCisgICAgICBwcmlu dGYoCisjaWZkZWYgQ0tfTkVFRF9TSUcKKyAgICAgICAiIFR5cGUgeW91ciBlc2NhcGUgY2hhcmFj dGVyLCAlcywgZm9sbG93ZWQgYnkgWCBvciBFIHRvIGNhbmNlbC5cbiIsCisgICAgICAgZGJjaHIo ZXNjYXBlKQorI2Vsc2UKKyAgICAgICAiIFByZXNzIHRoZSBYIG9yIEUga2V5IHRvIGNhbmNlbC5c biIKKyNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLworICAgICAgKTsKK30KKworc3RhdGljIGludCB4 emNtZCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEdsb2JhbCBjb3B5IG9mIFJFTU9URSBjbWQg aW5kZXggKi8KKworLyogIFIgRSBNIEMgRiBNICAtLSAgQ29uZmlybSBhIFJFTU9URSBjb21tYW5k ICAqLworLyoKKyAgTGlrZSBjbWNmbSgpLCBidXQgYWxsb3dzIGZvciBhIHJlZGlyZWN0aW9uIGlu ZGljYXRvciBvbiB0aGUgZW5kLAorICBsaWtlICI+IGZpbGVuYW1lIiBvciAifCBjb21tYW5kIi4g IFJldHVybnMgd2hhdCBjbWNmbSgpIHdvdWxkIGhhdmUKKyAgcmV0dXJuZWQ6IC0xIGlmIHJlcGFy c2UgbmVlZGVkLCBldGMgZXRjIGJsYWggYmxhaC4gIE9uIHN1Y2Nlc3MsCisgIHJldHVybnMgMSB3 aXRoOgorCisgICAgY2hhciAqIHJlbWRlc3QgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgZmls ZSBvciBjb21tYW5kLgorICAgIGludCByZW1maWxlIHNldCB0byAxIGlmIHRoZXJlIGlzIHRvIGJl IGFueSByZWRpcmVjdGlvbi4KKyAgICBpbnQgcmVtYXBwZCBzZXQgdG8gMSBpZiBvdXRwdXQgZmls ZSBpcyB0byBiZSBhcHBlbmRlZCB0by4KKyAgICBpbnQgcmVtcGlwZSBzZXQgdG8gMSBpZiByZW1k ZXN0IGlzIGEgY29tbWFuZCwgMCBpZiBpdCBpcyBhIGZpbGUuCisqLworc3RhdGljIGludAorcmVt Y2ZtKCkgeworICAgIGludCB4OworICAgIGNoYXIgKnM7CisgICAgY2hhciBjOworCisgICAgcmVt ZmlsZSA9IDA7CisgICAgcmVtcGlwZSA9IDA7CisgICAgcmVtYXBwZCA9IDA7CisKKyAgICBpZiAo KHggPSBjbXR4dCgKKyAgICAgICAgICAgICAiPiBmaWxlbmFtZSwgfCBjb21tYW5kLFxuXAorb3Ig dHlwZSBjYXJyaWFnZSByZXR1cm4gdG8gY29uZmlybSB0aGUgY29tbWFuZCIsCisgICAgICAgICAg ICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgaWYg KHJlbWRlc3QpIHsKKyAgICAgICAgZnJlZShyZW1kZXN0KTsKKyAgICAgICAgcmVtZGVzdCA9IE5V TEw7CisgICAgfQorICAgIGRlYnVnKEYxMDEsInJlbWNmbSBsb2NhbCIsIiIsbG9jYWwpOworICAg IGRlYnVnKEYxMTAsInJlbWNmbSBzIixzLDApOworICAgIGRlYnVnKEYxMDEsInJlbWNmbSBjbWQi LCIiLHh6Y21kKTsKKy8qIAorICBUaGlzIGNoZWNrIHdhcyBhZGRlZCBpbiBDLUtlcm1pdCA2LjAg b3IgNy4wIGJ1dCBpdCB0dXJucyBvdXQgdG8gYmUKKyAgdW5oZWxwZnVsIGluIHRoZSBzaXR1YXRp b24gd2hlcmUgdGhlIHJlbW90ZSBpcyBydW5uaW5nIGEgc2NyaXB0IHRoYXQgc2VuZHMKKyAgUkVN T1RFIGNvbW1hbmRzIHRvIHRoZSBsb2NhbCB3b3Jrc3RhdGlvbi4gIFdoYXQgaGFwcGVucyBpcywg dGhlIGxvY2FsCisgIHNlcnZlciBleGVjdXRlcyB0aGUgY29tbWFuZCBhbmQgc2VuZHMgdGhlIHJl c3VsdCBiYWNrIGFzIHNjcmVlbiB0ZXh0LCB3aGljaAorICBpcyBpbmRpY2F0ZWQgYnkgdXNpbmcg YW4gWCBwYWNrZXQgaW5zdGVhZCBvZiBhbiBGIHBhY2tldCBhcyB0aGUgZmlsZQorICBoZWFkZXIu ICBUaGVyZSBhcmUgdHdvIHBhcnRzIHRvIHRoaXM6IGV4ZWN1dGluZyB0aGUgY29tbWFuZCB1bmRl ciBjb250cm9sCisgIG9mIHRoZSByZW1vdGUgS2VybWl0LCB3aGljaCBpcyBkZXNpcmFibGUgKGFu ZCBpbiBmYWN0IHNvbWUgYmlnIGFwcGxpY2F0aW9ucworICBkZXBlbmQgb24gaXQsIGFuZCB0aGVy ZWZvcmUgbmV2ZXIgaW5zdGFsbGVkIGFueSBuZXcgQy1LZXJtaXQgdmVyc2lvbnMgYWZ0ZXIKKyAg NUEpLCBhbmQgZGlzcGxheWluZyB0aGUgcmVzdWx0LiAgQ29tbWVudGluZyBvdXQgdGhlIGNoZWNr IGFsbG93cyB0aGUKKyAgY29tbWFuZCB0byBiZSBleGVjdXRlZCwgYnV0IHRoZSByZXN1bHQgaXMg c3RpbGwgc2VudCBiYWNrIHRvIHRoZSByZW1vdGUgaW4KKyAgYSBmaWxlIHRyYW5zZmVyLCB3aGVy ZSBpdCB2YW5pc2hlcyBpbnRvIHRoZSBldGhlci4gIEFjdHVhbGx5IGl0J3Mgb24gdGhlCisgIGNv bW11bmljYXRpb24gY29ubmVjdGlvbiwgbWl4ZWQgaW4gd2l0aCB0aGUgcGFja2V0cy4gIFByZXR0 eSBhbWF6aW5nIHRoYXQKKyAgdGhlIGZpbGUgdHJhbnNmZXIgc3RpbGwgd29ya3MsIHJpZ2h0Pwor Ki8KKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKCEqcykgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogTm8gcmVkaXJlY3Rpb24gaW5kaWNhdG9yICovCisgICAgICAgIGlmICghbG9jYWwgJiYK KyAgICAgICAgICAgICh4emNtZCA9PSBYWkRJUiB8fCB4emNtZCA9PSBYWlRZUCB8fAorICAgICAg ICAgICAgIHh6Y21kID09IFhaWElUIHx8IHh6Y21kID09IFhaU1BBIHx8CisgICAgICAgICAgICAg eHpjbWQgPT0gWFpITFAgfHwgeHpjbWQgPT0gWFpQV0QgfHwKKyAgICAgICAgICAgICB4emNtZCA9 PSBYWkxHSSB8fCB4emNtZCA9PSBYWkxHTyB8fAorICAgICAgICAgICAgIHh6Y21kID09IFhaV0hP IHx8IHh6Y21kID09IFhaSE9TKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/XCIlc1wiIGhhcyBu byBlZmZlY3QgaW4gcmVtb3RlIG1vZGVcbiIsY21kYnVmKTsKKyAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybigxKTsKKyAgICB9CisjZW5kaWYJ LyogQ09NTUVOVCAqLworICAgIGMgPSAqczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFdlIGhhdmUgc29tZXRoaW5nICovCisgICAgaWYgKGMgIT0gJz4nICYmIGMgIT0gJ3wnKSB7ICAg ICAgICAgLyogSXMgaXQgPiBvciB8ID8gKi8KKyAgICAgICAgcHJpbnRmKCI/Tm90IGNvbmZpcm1l ZFxuIik7ICAgICAvKiBObyAqLworICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICBzKys7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWUgd2hhdCBmb2xsb3dzICovCisg ICAgaWYgKGMgPT0gJz4nICYmICpzID09ICc+JykgeyAgICAgICAgLyogQWxsb3cgZm9yICI+PiIg dG9vICovCisgICAgICAgIHMrKzsKKyAgICAgICAgcmVtYXBwZCA9IDE7ICAgICAgICAgICAgICAg ICAgICAvKiBBcHBlbmQgdG8gb3V0cHV0IGZpbGUgKi8KKyAgICB9CisgICAgd2hpbGUgKCpzID09 IFNQIHx8ICpzID09IEhUKSBzKys7ICAgLyogU3RyaXAgaW50ZXJ2ZW5pbmcgd2hpdGVzcGFjZSAq LworICAgIGlmICghKnMpIHsKKyAgICAgICAgcHJpbnRmKCI/JXMgbWlzc2luZ1xuIiwgYyA9PSAn PicgPyAiRmlsZW5hbWUiIDogIkNvbW1hbmQiKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9 CisgICAgaWYgKGMgPT0gJz4nICYmIHpjaGtvKHMpIDwgMCkgeyAgICAgLyogQ2hlY2sgYWNjZXNz aWJpbGl0eSAqLworICAgICAgICBwcmludGYoIj9BY2Nlc3MgZGVuaWVkIC0gJXNcbiIsIHMpOwor ICAgICAgICByZXR1cm4oLTkpOworICAgIH0KKyAgICByZW1maWxlID0gMTsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBTZXQgZ2xvYmFsIHJlc3VsdHMgKi8KKyAgICByZW1waXBlID0gKGMgPT0g J3wnKTsKKyAgICBpZiAocmVtcGlwZQorI2lmbmRlZiBOT1BVU0gKKyAgICAgICAgJiYgbm9wdXNo CisjZW5kaWYgLyogTk9QVVNIICovCisgICAgICAgICkgeworICAgICAgICBwcmludGYoIj9Tb3Jy eSwgYWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGlzIGRpc2FibGVkLlxuIik7CisgICAgICAg IHJldHVybigtOSk7CisgICAgfQorICAgIG1ha2VzdHIoJnJlbWRlc3Qscyk7CisjaWZuZGVmIE5P REVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGRlYnVnKEYxMDEsInJlbWNmbSByZW1m aWxlIiwiIixyZW1maWxlKTsKKyAgICAgICAgZGVidWcoRjEwMSwicmVtY2ZtIHJlbWFwcGQiLCIi LHJlbWFwcGQpOworICAgICAgICBkZWJ1ZyhGMTAxLCJyZW1jZm0gcmVtcGlwZSIsIiIscmVtcGlw ZSk7CisgICAgICAgIGRlYnVnKEYxMTAsInJlbWNmbSByZW1kZXN0IixyZW1kZXN0LCAwKTsKKyAg ICB9CisjZW5kaWYgLyogTk9ERUJVRyAqLworICAgIHJldHVybigxKTsKK30KKworLyogIFIgRSBN IFQgWCBUICAtLSAgTGlrZSByZW1jZm0oKS4uLiAgKi8KKy8qCisgICAuLi4gYnV0IGZvciBSRU1P VEUgY29tbWFuZHMgdGhhdCBlbmQgd2l0aCBjbXR4dCgpLgorICAgSGVyZSB3ZSBtdXN0IGRlY2lw aGVyIGJyYWNlcyB0byBkaXNjb3ZlciB3aGV0aGVyIHRoZSB0cmFpbGluZworICAgcmVkaXJlY3Rp b24gaW5kaWNhdG9yIGlzIGludGVuZGVkIGZvciBsb2NhbCB1c2UsIG9yIHRvIGJlIHNlbnQgb3V0 CisgICB0byB0aGUgc2VydmVyLCBhcyBpbjoKKworICAgICByZW1vdGUgaG9zdCBibGFoIGJsYWgg PiBmaWxlICAgICAgICAgICAgICAgICBUaGlzIGVuZAorICAgICByZW1vdGUgaG9zdCB7IGJsYWgg YmxhaCB9ID4gZmlsZSAgICAgICAgICAgICBUaGlzIGVuZAorICAgICByZW1vdGUgaG9zdCB7IGJs YWggYmxhaCA+IGZpbGUgfSAgICAgICAgICAgICBUaGF0IGVuZAorICAgICByZW1vdGUgaG9zdCB7 IGJsYWggYmxhaCA+IGZpbGUgfSA+IGZpbGUgICAgICBCb3RoIGVuZHMKKworICAgUGlwZXMgdG9v OgorCisgICAgIHJlbW90ZSBob3N0IGJsYWggYmxhaCB8IGNtZCAgICAgICAgICAgICAgICAgIFRo aXMgZW5kCisgICAgIHJlbW90ZSBob3N0IHsgYmxhaCBibGFoIH0gfCBjbWQgICAgICAgICAgICAg IFRoaXMgZW5kCisgICAgIHJlbW90ZSBob3N0IHsgYmxhaCBibGFoIHwgY21kIH0gICAgICAgICAg ICAgIFRoYXQgZW5kCisgICAgIHJlbW90ZSBob3N0IHsgYmxhaCBibGFoIHwgY21kIH0gfCBjbWQg ICAgICAgIEJvdGggZW5kcworCisgICBPciBib3RoOgorCisgICAgIHJlbW90ZSBob3N0IGJsYWgg YmxhaCB8IGNtZCA+IGZpbGUgICAgICAgICAgIFRoaXMgZW5kLCBldGMgZXRjLi4uCisKKyAgIE5v dGU6IHRoaXMgcmVhbGx5IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIFJFTU9URSBIT1NULCBidXQgd2h5 IGJlIHBpY2t5PworICAgQ2FsbCBhZnRlciBjYWxsaW5nIGNtdHh0KCksIHdpdGggcG9pbnRlciB0 byBzdHJpbmcgdGhhdCBjbXR4dCgpIHBhcnNlZCwKKyAgIGFzIGluICJyZW10eHQoJnMpOyIuCisK KyAgIFJldHVybnM6CisgICAgMSBvbiBzdWNjZXNzIHdpdGggYnJhY2VzICYgcmVkaXJlY3Rpb24g dGhpbmdzIHJlbW92ZWQgJiBwb2ludGVyIHVwZGF0ZWQsCisgICAtOSBvbiBmYWlsdXJlIChiYWQg aW5kaXJlY3Rpb24pLCBhZnRlciBwcmludGluZyBlcnJvciBtZXNzYWdlLgorKi8KK2ludAorcmVt dHh0KHApIGNoYXIgKiogcDsgeworICAgIGludCBpLCB4LCBicG9zLCBwcG9zOworICAgIGNoYXIg YywgKnMsICpxOworCisgICAgcmVtZmlsZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBnbG9iYWwgcmVzdWx0cyAqLworICAgIHJlbXBpcGUgPSAwOworICAgIHJlbWFw cGQgPSAwOworICAgIGlmIChyZW1kZXN0KSB7CisgICAgICAgIGZyZWUocmVtZGVzdCk7CisgICAg ICAgIHJlbWRlc3QgPSBOVUxMOworICAgIH0KKyAgICBzID0gKnA7CisgICAgaWYgKCFzKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gcmVkaXJlY3Rpb24gaW5kaWNhdG9yICovCisg ICAgICBzID0gIiI7CisjaWZkZWYgQ09NTUVOVAorICAgIGlmICghKnMpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERpdHRvICovCisgICAgICAgIGlmICghbG9jYWwgJiYKKyAgICAgICAg ICAgICh4emNtZCA9PSBYWkRJUiB8fCB4emNtZCA9PSBYWlRZUCB8fAorICAgICAgICAgICAgIHh6 Y21kID09IFhaWElUIHx8IHh6Y21kID09IFhaU1BBIHx8CisgICAgICAgICAgICAgeHpjbWQgPT0g WFpITFAgfHwgeHpjbWQgPT0gWFpQV0QgfHwKKyAgICAgICAgICAgICB4emNtZCA9PSBYWkxHSSB8 fCB4emNtZCA9PSBYWkxHTyB8fAorICAgICAgICAgICAgIHh6Y21kID09IFhaV0hPIHx8IHh6Y21k ID09IFhaSE9TKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/XCIlc1wiIGhhcyBubyBlZmZlY3Qg aW4gcmVtb3RlIG1vZGVcbiIsY21kYnVmKTsKKyAgICAgICAgICAgIGlmIChoaW50cykgeworICAg ICAgICAgICAgICAgIHByaW50ZigiSGludDogVHJ5IGFnYWluIHdpdGggYW4gb3V0cHV0IHJlZGly ZWN0b3IuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAg ICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybigxKTsKKyAgICB9CisjZW5kaWYJLyogQ09NTUVO VCAqLworICAgIGJwb3MgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvc2l0aW9u IG9mID4gKGJyYWNrZXQpICovCisgICAgcHBvcyA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUG9zaXRpb24gb2YgfCAocGlwZSkgKi8KKyAgICB4ID0gc3RybGVuKHMpOyAgICAgICAg ICAgICAgICAgICAgICAvKiBMZW5ndGggb2YgY210eHQoKSBzdHJpbmcgKi8KKworICAgIGZvciAo aSA9IHgtMTsgaSA+PSAwOyBpLS0pIHsgICAgICAgIC8qIFNlYXJjaCByaWdodCB0byBsZWZ0LiAq LworICAgICAgICBjID0gc1tpXTsKKyAgICAgICAgaWYgKGMgPT0gJ30nKSAgICAgICAgICAgICAg ICAgICAvKiBCcmVhayBvbiBmaXJzdCByaWdodCBicmFjZSAqLworICAgICAgICAgIGJyZWFrOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGxvb2sgYXQgY29udGVudHMgb2YgYnJhY2Vz ICovCisgICAgICAgIGVsc2UgaWYgKGMgPT0gJz4nKSAgICAgICAgICAgICAgLyogUmVjb3JkIHBv c2l0aW9uIG9mID4gKi8KKyAgICAgICAgICBicG9zID0gaTsKKyAgICAgICAgZWxzZSBpZiAoYyA9 PSAnfCcpICAgICAgICAgICAgICAvKiBhbmQgb2YgfCAqLworICAgICAgICAgIHBwb3MgPSBpOwor ICAgIH0KKyAgICBpZiAoYnBvcyA8IDAgJiYgcHBvcyA8IDApIHsgICAgICAgICAvKiBObyByZWRp cmVjdG9ycy4gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIGlmICghbG9jYWwgJiYKKyAgICAg ICAgICAgICh4emNtZCA9PSBYWkRJUiB8fCB4emNtZCA9PSBYWlRZUCB8fAorICAgICAgICAgICAg IHh6Y21kID09IFhaWElUIHx8IHh6Y21kID09IFhaU1BBIHx8CisgICAgICAgICAgICAgeHpjbWQg PT0gWFpITFAgfHwgeHpjbWQgPT0gWFpQV0QgfHwKKyAgICAgICAgICAgICB4emNtZCA9PSBYWkxH SSB8fCB4emNtZCA9PSBYWkxHTyB8fAorICAgICAgICAgICAgIHh6Y21kID09IFhaV0hPIHx8IHh6 Y21kID09IFhaSE9TKSkgeworICAgICAgICAgICAgcHJpbnRmKCI/XCIlc1wiIGhhcyBubyBlZmZl Y3QgaW4gcmVtb3RlIG1vZGVcbiIsY21kYnVmKTsKKyAgICAgICAgICAgIGlmIChoaW50cykgewor ICAgICAgICAgICAgICAgIHByaW50ZigiSGludDogVHJ5IGFnYWluIHdpdGggYW4gb3V0cHV0IHJl ZGlyZWN0b3IuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybigtOSk7Cisg ICAgICAgIH0KKyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgICAgIHMgPSBicnN0cmlwKHMpOyAg ICAgICAgICAgICAgICAgLyogUmVtb3ZlIG91dGVyIGJyYWNlcyBpZiBhbnkuICovCisgICAgICAg ICpwID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gcmVzdWx0ICovCisg ICAgICAgIHJldHVybigxKTsgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybi4gKi8K KyAgICB9CisgICAgcmVtZmlsZSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSXQncyB8 IG9yID4gKi8KKyAgICBpID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQg bGVmdG1vc3Qgc3ltYm9sICovCisgICAgaWYgKGJwb3MgPiAtMSkgICAgICAgICAgICAgICAgICAg ICAgLyogQnJhY2tldCAqLworICAgICAgaSA9IGJwb3M7CisgICAgaWYgKHBwb3MgPiAtMSAmJiAo cHBvcyA8IGJwb3MgfHwgYnBvcyA8IDApKSB7IC8qIG9yIHBpcGUgKi8KKyAgICAgICAgaSA9IHBw b3M7CisgICAgICAgIHJlbXBpcGUgPSAxOworICAgIH0KKyAgICBpZiAocmVtcGlwZQorI2lmbmRl ZiBOT1BVU0gKKyAgICAgICAgJiYgbm9wdXNoCisjZW5kaWYgLyogTk9QVVNIICovCisgICAgICAg ICkgeworICAgICAgICBwcmludGYoIj9Tb3JyeSwgYWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRz IGlzIGRpc2FibGVkLlxuIik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorICAgIGMgPSBz W2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvcHkgb2Ygc3ltYm9sICovCisKKyAg ICBpZiAoYyA9PSAnPicgJiYgc1tpKzFdID09ICc+JykgICAgICAvKiAiPj4iIGZvciBhcHBlbmQ/ ICovCisgICAgICByZW1hcHBkID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIG5vdCBq dXN0IGEgZmxhZyBpdCdzIGEgbnVtYmVyICovCisKKyAgICBxID0gcyArIGkgKyAxICsgcmVtYXBw ZDsgICAgICAgICAgICAvKiBQb2ludCBwYXN0IHN5bWJvbCBpbiBzdHJpbmcgKi8KKyAgICB3aGls ZSAoKnEgPT0gU1AgfHwgKnEgPT0gSFQpIHErKzsgICAvKiBhbmQgYW55IGludGVydmVuaW5nIHdo aXRlc3BhY2UgKi8KKyAgICBpZiAoISpxKSB7CisgICAgICAgIHByaW50ZigiPyVzIG1pc3Npbmdc biIsIGMgPT0gJz4nID8gIkZpbGVuYW1lIiA6ICJDb21tYW5kIik7CisgICAgICAgIHJldHVybigt OSk7CisgICAgfQorICAgIGlmIChjID09ICc+JyAmJiB6Y2hrbyhxKSA8IDApIHsgICAgIC8qIChE b2Vzbid0IHdvcmsgZm9yIHwgY21kID4gZmlsZSkgKi8KKyAgICAgICAgcHJpbnRmKCI/QWNjZXNz IGRlbmllZCAtICVzXG4iLCBxKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgbWFr ZXN0cigmcmVtZGVzdCxxKTsgICAgICAgICAgICAgICAgLyogQ3JlYXRlIHRoZSBkZXN0aW5hdGlv biBzdHJpbmcgKi8KKyAgICBxID0gcyArIGkgLSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludCBiZWZvcmUgc3ltYm9sICovCisgICAgd2hpbGUgKHEgPiBzICYmICgqcSA9PSBTUCB8fCAq cSA9PSBIVCkpIC8qIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgKi8KKyAgICAgIHEtLTsKKyAg ICAqKHErMSkgPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgdGhlIHN0 cmluZy4gKi8KKyAgICBzID0gYnJzdHJpcChzKTsgICAgICAgICAgICAgICAgICAgICAvKiBSZW1v dmUgYW55IGJyYWNlcyAqLworICAgICpwID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNldCByZXR1cm4gdmFsdWUgKi8KKworI2lmbmRlZiBOT0RFQlVHCisgICAgaWYgKGRlYmxv ZykgeworICAgICAgICBkZWJ1ZyhGMTAxLCJyZW10eHQgcmVtZmlsZSIsIiIscmVtZmlsZSk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInJlbXR4dCByZW1hcHBkIiwiIixyZW1hcHBkKTsKKyAgICAgICAg ZGVidWcoRjEwMSwicmVtdHh0IHJlbXBpcGUiLCIiLHJlbXBpcGUpOworICAgICAgICBkZWJ1ZyhG MTEwLCJyZW10eHQgcmVtZGVzdCIscmVtZGVzdCwgMCk7CisgICAgICAgIGRlYnVnKEYxMTAsInJl bXR4dCBjb21tYW5kIixzLDApOworICAgIH0KKyNlbmRpZiAvKiBOT0RFQlVHICovCisKKyAgICBy ZXR1cm4oMSk7Cit9CisKK2ludAorcGxvZ2luKHh4KSBpbnQgeHg7IHsKKyAgICBjaGFyICpwMSA9 IE5VTEwsICpwMiA9IE5VTEwsICpwMyA9IE5VTEw7CisgICAgaW50IHBzYXZlZCA9IDAsIHJjID0g MDsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICBleHRlcm4gaW50IG9uX3JlY2FsbDsgICAgICAgICAg ICAgICAvKiBhcm91bmQgUGFzc3dvcmQgcHJvbXB0aW5nICovCisjZW5kaWYgLyogQ0tfUkVDQUxM ICovCisgICAgZGVidWcoRjEwMSwicGxvZ2luIGxvY2FsIiwiIixsb2NhbCk7CisKKyAgICBpZiAo IWxvY2FsIHx8IChuZXR3b3JrICYmIHR0Y2hrKCkgPCAwKSkgeworICAgICAgICBwcmludGYoIj9O byBjb25uZWN0aW9uXG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKCh4 ID0gY21mbGQoIlVzZXIgSUQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7IC8qIEdldCBVc2VyIElE ICovCisgICAgICAgIGlmICh4ICE9IC0zKSByZXR1cm4oeCk7CisgICAgfQorICAgIHkgPSBzdHJs ZW4ocyk7CisgICAgaWYgKHkgPiAwKSB7CisgICAgICAgIGlmICgocDEgPSBtYWxsb2MoeSArIDEp KSA9PSBOVUxMKSB7CisgICAgICAgICAgICBwcmludGYoIj9JbnRlcm5hbCBlcnJvcjogbWFsbG9j XG4iKTsKKyAgICAgICAgICAgIHJjID0gLTk7CisgICAgICAgICAgICBnb3RvIFhaWExHSTsKKyAg ICAgICAgfSBlbHNlCisgICAgICAgICAgc3RyY3B5KHAxLHMpOyAgICAgICAgICAgICAgICAgLyog c2FmZSAqLworICAgICAgICBpZiAoKHJjID0gY21mbGQoIlBhc3N3b3JkIiwiIiwmcyx4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICBpZiAocmMgIT0gLTMpIGdvdG8gWFpYTEdJOworICAgICAgICB5 ID0gc3RybGVuKHMpOworICAgICAgICBpZiAoeSA+IDApIHsKKyAgICAgICAgICAgIGlmICgocDIg PSBtYWxsb2MoeSArIDEpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/SW50 ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7CisgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAg ICAgICAgICAgICBnb3RvIFhaWExHSTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg ICBzdHJjcHkocDIscyk7ICAgICAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIGlmICgo cmMgPSBjbWZsZCgiQWNjb3VudCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAg IGlmIChyYyAhPSAtMykgZ290byBYWlhMR0k7CisgICAgICAgICAgICB5ID0gc3RybGVuKHMpOwor ICAgICAgICAgICAgaWYgKHkgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChwMyA9IG1hbGxv Yyh5ICsgMSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJu YWwgZXJyb3I6IG1hbGxvY1xuIik7CisgICAgICAgICAgICAgICAgICAgIHJjID0gLTk7CisgICAg ICAgICAgICAgICAgICAgIGdvdG8gWFpYTEdJOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg ICAgICAgICAgICAgICAgc3RyY3B5KHAzLHMpOyAgICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKHJjID0gcmVtdHh0KCZzKSkgPCAwKSAg ICAgICAgICAvKiBDb25maXJtICYgaGFuZGxlIHJlZGlyZWN0b3JzICovCisgICAgICBnb3RvIFha WExHSTsKKworICAgIGlmICghcDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIFVz ZXJpZCBzcGVjaWZpZWQuLi4gKi8KKyAgICAgICAgZGVib2sgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAvKiBEb24ndCBsb2cgdGhpcyAqLworICAgICAgICAvKiBQcm9tcHQgZm9yIHVzZXJuYW1l LCBwYXNzd29yZCwgYW5kIGFjY291bnQgKi8KKyNpZmRlZiBDS19SRUNBTEwKKyAgICAgICAgb25f cmVjYWxsID0gMDsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICAgICAgY21zYXZwKHBzYXZl LFBST01QVEwpOyAgICAgICAgICAvKiBTYXZlIG9sZCBwcm9tcHQgKi8KKyAgICAgICAgcHNhdmVk ID0gMTsKKyAgICAgICAgZGVidWcoRjExMCwiUkVNT1RFIExPR0lOIHNhdmVkIixwc2F2ZSwwKTsK KworICAgICAgICBjbXNldHAoIlVzZXJuYW1lOiAiKTsgICAgICAgICAgIC8qIE1ha2UgbmV3IHBy b21wdCAqLworICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFB1dCBj b25zb2xlIGluIGNicmVhayBtb2RlICovCisgICAgICAgIGNtaW5pKDEpOworICAgICAgICBwcm9t cHQoeHhzdHJpbmcpOworICAgICAgICByYyA9IC05OworICAgICAgICBmb3IgKHggPSAtMTsgeCA8 IDA7ICkgeyAgICAgICAgIC8qIFByb21wdCB0aWxsIHRoZXkgYW5zd2VyICovCisgICAgICAgICAg ICBjbXJlcygpOyAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciAqLworICAg ICAgICAgICAgeCA9IGNtdHh0KCIiLCIiLCZzLE5VTEwpOyAgIC8qIEdldCBhIGxpdGVyYWwgbGlu ZSBvZiB0ZXh0ICovCisgICAgICAgIH0KKyAgICAgICAgeSA9IHN0cmxlbihzKTsKKyAgICAgICAg aWYgKHkgPCAxKSB7CisgICAgICAgICAgICBwcmludGYoIj9DYW5jZWxlZFxuIik7CisgICAgICAg ICAgICBnb3RvIFhaWExHSTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHAxID0gbWFsbG9jKHkg KyAxKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJyb3I6IG1h bGxvY1xuIik7CisgICAgICAgICAgICBnb3RvIFhaWExHSTsKKyAgICAgICAgfSBlbHNlCisgICAg ICAgICAgc3RyY3B5KHAxLHMpOyAgICAgICAgICAgICAgICAgLyogc2FmZSAqLworCisgICAgICAg IGNtc2V0cCgiUGFzc3dvcmQ6ICIpOyAgICAgICAgICAgLyogTWFrZSBuZXcgcHJvbXB0ICovCisg ICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyogUHV0IGNvbnNvbGUgaW4g Y2JyZWFrIG1vZGUgKi8KKyAgICAgICAgY21pbmkoMCk7ICAgICAgICAgICAgICAgICAgICAgICAv KiBObyBlY2hvICovCisgICAgICAgIHByb21wdCh4eHN0cmluZyk7CisgICAgICAgIGRlYm9rID0g MDsKKyAgICAgICAgZm9yICh4ID0gLTE7IHggPCAwICYmIHggIT0gLTM7ICkgeyAvKiBHZXQgYW5z d2VyICovCisgICAgICAgICAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQg dGhlIHBhcnNlciAqLworICAgICAgICAgICAgeCA9IGNtdHh0KCIiLCIiLCZzLE5VTEwpOyAgIC8q IEdldCBsaXRlcmFsIGxpbmUgb2YgdGV4dCAqLworICAgICAgICB9CisgICAgICAgIGlmICgocDIg PSBtYWxsb2MoKGludClzdHJsZW4ocykgKyAxKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJp bnRmKCI/SW50ZXJuYWwgZXJyb3I6IG1hbGxvY1xuIik7CisgICAgICAgICAgICBnb3RvIFhaWExH STsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgc3RyY3B5KHAyLHMpOyAgICAgICAgICAgICAg ICAgLyogc2FmZSAqLworICAgICAgICBwcmludGYoIlxyXG4iKTsKKyAgICAgICAgaWYgKChyYyA9 IGNtY2ZtKCkpIDwgMCkKKyAgICAgICAgICBnb3RvIFhaWExHSTsKKyAgICB9CisgICAgc3N0YXRl ID0gc2V0Z2VuKCdJJyxwMSxwMixwMyk7ICAgICAgLyogR2V0IGhlcmUgd2l0aCBhdCBsZWFzdCB1 c2VyIElEICovCisgICAgcmMgPSAwOworCisgIFhaWExHSTogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogQ29tbW9uIGV4aXQgcG9pbnQgKi8KKyAgICBpZiAocHNhdmVkKQorICAgICAg Y21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgb3JpZ2luYWwgcHJv bXB0ICovCisgICAgaWYgKHAzKSB7IGZyZWUocDMpOyBwMyA9IE5VTEw7IH0gICAgLyogRnJlZSBt YWxsb2MnZCBzdG9yYWdlICovCisgICAgaWYgKHAyKSB7IGZyZWUocDIpOyBwMiA9IE5VTEw7IH0K KyAgICBpZiAocDEpIHsgZnJlZShwMSk7IHAxID0gTlVMTDsgfQorICAgIGlmIChyYyA+IC0xKSB7 CisgICAgICAgIGlmIChsb2NhbCAmJiByYyA+IC0xKSAgICAgICAgICAgLyogSWYgbG9jYWwsIGZs dXNoIHR0eSBpbnB1dCBidWZmZXIgKi8KKyAgICAgICAgICB0dGZsdWkoKTsKKyAgICB9CisgICAg cmV0dXJuKHJjKTsKK30KKworI2lmZGVmIE9TMgorI2lmbmRlZiBOT0xPQ0FMCitpbnQKK2Rvcm10 KHh4KSBpbnQgeHg7IHsKKyAgICBpbnQgcmMgPSAwOworICAgIGV4dGVybiBpbnQgdGVybV9pbzsK KyAgICBpbnQgdGVybV9pb19zYXYgPSB0ZXJtX2lvOworI2lmZGVmIE5FV0ZUUAorICAgIGV4dGVy biBpbnQgZnRwZ2V0LCBmdHBpc29wZW4oKTsKKyAgICBpZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0 cGdldCA9PSAyKSAmJiBmdHBpc29wZW4oKSkpCisgICAgICByZXR1cm4oZG9mdHBybXQoeHgsMCkp OworI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgIHRlcm1faW8gPSAwOworICAgIHJjID0geHhkb3Jt dCh4eCk7CisgICAgdGVybV9pbyA9IHRlcm1faW9fc2F2OworICAgIHJldHVybiByYzsKK30KKwor CitpbnQKK3h4ZG9ybXQoeHgpIGludCB4eDsKKyNlbHNlIC8qIE5PTE9DQUwgKi8KK2ludAorZG9y bXQoeHgpIGludCB4eDsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjZWxzZSAvKiBPUzIgKi8KK2lu dAorZG9ybXQoeHgpIGludCB4eDsKKyNlbmRpZiAvKiBPUzIgKi8KK3sgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUgY29tbWFuZHMgKi8KKyAgICBpbnQgeCwg eSwgcmV0Y29kZTsKKyAgICBjaGFyICpzLCBzYnVmWzUwXSwgKnMyOworCisjaWZkZWYgTkVXRlRQ CisgICAgZXh0ZXJuIGludCBmdHBnZXQsIGZ0cGlzb3BlbigpOworICAgIGlmICgoZnRwZ2V0ID09 IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkKKyAgICAgIHJldHVybihkb2Z0 cHJtdCh4eCwwKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisKKyAgICByZW1maWxlID0gMDsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGVzZSAqLworICAgIHJlbXBpcGUgPSAwOwor ICAgIHJlbWFwcGQgPSAwOworCisgICAgaWYgKHh4IDwgMCkgcmV0dXJuKHh4KTsgICAgICAgICAg ICAgLyogUkVNT1RFIHdoYXQ/ICovCisKKyAgICB4emNtZCA9IHh4OyAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBNYWtlIGdsb2JhbCBjb3B5IG9mIGFyZyAqLworCisgICAgaWYgKHh4ID09IFha U0VUKSB7ICAgICAgICAgICAgICAgICAgLyogUkVNT1RFIFNFVCAqLworICAgICAgICBpZiAoKHkg PSBjbWtleShybXN0YWIsbnJtcywiIiwiIix4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAg aWYgKHkgPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9QYXJhbWV0ZXIgbmFtZSBy ZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0g ZWxzZSByZXR1cm4oeSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKGRvcHJtKHksMSkpOwor ICAgIH0KKworICAgIHN3aXRjaCAoeHgpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVy cy4uLiAqLworCisgICAgICBjYXNlIFhaQ0RVOgorICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8 IDApIHJldHVybih4KTsKKyAgICAgICAgcHJpbnRmKCI/U29ycnksIFJFTU9URSBDRFVQIG5vdCBz dXBwb3J0ZWQgeWV0XG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKworICAgICAgY2FzZSBYWkNX RDogICAgICAgICAgICAgICAgICAgICAgIC8qIENXRCAoQ0QpICovCisgICAgICAgIGlmICgoeCA9 IGNtdHh0KCJSZW1vdGUgZGlyZWN0b3J5IG5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQorICAg ICAgICAgIHJldHVybih4KTsKKyAgICAgICAgZGVidWcoRjExMSwiWFpDV0Q6ICIscyx4KTsKKyAg ICAgICAgKnNidWYgPSBOVUw7CisgICAgICAgIHMyID0gc2J1ZjsKKy8qCisgIFRoZSBmb2xsb3dp bmcgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIHNpbmNlIHRoZSBkaXNhcHBlYXJhbmNlIG9mIHRo ZQorICBERUNTWVNURU0tMjAgZnJvbSB0aGUgcGxhbmV0LCBubyBrbm93biBjb21wdXRlciByZXF1 aXJlcyBhIHBhc3N3b3JkIGZvcgorICBjaGFuZ2luZyBkaXJlY3RvcnkuCisqLworI2lmZGVmIERJ UlBXRFBSCisgICAgICAgIGlmICgqcyAhPSBOVUwpIHsgICAgICAgICAgICAgICAgLyogSWYgZGly ZWN0b3J5IG5hbWUgZ2l2ZW4sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogZ2V0IHBhc3N3b3JkIG9uIHNlcGFyYXRlIGxpbmUuICovCisgICAgICAgICAgICBp ZiAodGxldmVsID4gLTEpIHsgICAgICAgICAgLyogRnJvbSB0YWtlIGZpbGUuLi4gKi8KKworICAg ICAgICAgICAgICAgIGlmIChmZ2V0cyhzYnVmLDUwLHRmaWxlW3RsZXZlbF0pID09IE5VTEwpCisg ICAgICAgICAgICAgICAgICBmYXRhbCgidGFrZSBmaWxlIGVuZHMgcHJlbWF0dXJlbHkgaW4gJ3Jl bW90ZSBjd2QnIik7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiIHBzd2QgZnJvbSB0YWtl IGZpbGUiLHMyLDApOworICAgICAgICAgICAgICAgIGZvciAoeCA9IChpbnQpc3RybGVuKHNidWYp OworICAgICAgICAgICAgICAgICAgICAgeCA+IDAgJiYgKHNidWZbeC0xXSA9PSBOTCB8fCBzYnVm W3gtMV0gPT0gQ1IpOworICAgICAgICAgICAgICAgICAgICAgeC0tKQorICAgICAgICAgICAgICAg ICAgc2J1Zlt4LTFdID0gJ1wwJzsKKworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAg ICAgICAgIC8qIEZyb20gdGVybWluYWwuLi4gKi8KKworICAgICAgICAgICAgICAgIHByaW50Zigi IFBhc3N3b3JkOiAiKTsgIC8qIGdldCBhIHBhc3N3b3JkICovCisjaWZkZWYgSUtTRAorICAgICAg ICAgICAgICAgIGlmICghbG9jYWwgJiYgaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg eCA9IGNvbmluYygwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBJS1NEICov CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICB4ID0gaXNfYV90dHkoMCkgPyBjb25pbmMo MCkgOiAvKiB3aXRoIG5vIGVjaG8gLi4uICovCisgICAgICAgICAgICAgICAgICAgIGdldGNoYXIo KTsKKyNlbHNlIC8qIE9TMiAqLworICAgICAgICAgICAgICAgIHggPSBnZXRjaGFyKCk7CisjZW5k aWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgd2hpbGUgKCh4ICE9IE5MKSAmJiAoeCAhPSBD UikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh4ICY9IDAxNzcpID09ICc/JykgeworICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/IFBhc3N3b3JkIG9mIHJlbW90ZSBkaXJlY3Rv cnlcbiBQYXNzd29yZDogIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzMiA9IHNidWY7Cisg ICAgICAgICAgICAgICAgICAgICAgICAqc2J1ZiA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICh4ID09IEVTQykgLyogTWluaSBjb21tYW5kIGxpbmUgZWRpdG9yLi4uICovCisg ICAgICAgICAgICAgICAgICAgICAgYmxlZXAoQlBfV0FSTik7CisgICAgICAgICAgICAgICAgICAg IGVsc2UgaWYgKHggPT0gQlMgfHwgeCA9PSAwMTc3KQorICAgICAgICAgICAgICAgICAgICAgIHMy LS07CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHggPT0gMDI1KSB7ICAgICAgICAvKiBD dHJsLVUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gc2J1ZjsKKyAgICAgICAgICAg ICAgICAgICAgICAgICpzYnVmID0gTlVMOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAg ICAgICAgICAgICAgICAgICAgICAqczIrKyA9IHg7CisKKyAgICAgICAgICAgICAgICAgICAgLyog R2V0IHRoZSBuZXh0IGNoYXJhY3RlciAqLworI2lmZGVmIElLU0QKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCFsb2NhbCAmJiBpbnNlcnZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgeCA9 IGNvbmluYygwKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogSUtTRCAq LworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAgICB4ID0gaXNfYV90dHkoMCkgPyBjb25p bmMoMCkgOiAvKiB3aXRoIG5vIGVjaG8gLi4uICovCisgICAgICAgICAgICAgICAgICAgICAgZ2V0 Y2hhcigpOworI2Vsc2UgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgIHggPSBnZXRjaGFy KCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICpzMiA9IE5VTDsKKyAgICAgICAgICAgICAgICBwdXRjaGFyKCdcbicpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgczIgPSBzYnVmOworICAgICAgICB9IGVsc2UgczIgPSAiIjsKKyNlbmRp ZiAvKiBESVJQV0RQUiAqLworCisgICAgICAgIGRlYnVnKEYxMTAsIiBwYXNzd29yZCIsczIsMCk7 CisJcmNkYWN0aXZlID0gMTsKKyAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdDJyxzLHMyLCIiKTsK KyAgICAgICAgcmV0Y29kZSA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhaREVM OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxldGUgKi8KKyAgICAgICAgaWYg KCh4ID0gY210eHQoIk5hbWUgb2YgcmVtb3RlIGZpbGUocykgdG8gZGVsZXRlIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/TmFtZSBvZiByZW1vdGUgZmlsZShz KSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAg IH0gZWxzZSByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZz KSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKGxvY2FsKSB0dGZsdWko KTsgICAgICAgICAgICAvKiBJZiBsb2NhbCwgZmx1c2ggdHR5IGlucHV0IGJ1ZmZlciAqLworICAg ICAgICByZXRjb2RlID0gc3N0YXRlID0gcmZpbG9wKHMsJ0UnKTsKKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgWFpESVI6ICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgKi8K KyAgICAgICAgaWYgKCh4ID0gY210eHQoIlJlbW90ZSBkaXJlY3Rvcnkgb3IgZmlsZSBzcGVjaWZp Y2F0aW9uIiwiIiwmcywKKyAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCisg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAobG9jYWwpIHR0Zmx1aSgpOyAgICAgICAg ICAgIC8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5wdXQgYnVmZmVyICovCisgICAgICAgIHJtc2co KTsKKyAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHNldGdlbignRCcscywiIiwiIik7CisgICAg ICAgIGJyZWFrOworCisgICAgICBjYXNlIFhaSExQOiAgICAgICAgICAgICAgICAgICAgICAgLyog SGVscCAqLworICAgICAgICBpZiAoKHggPSByZW1jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAg ICAgIHNzdGF0ZSA9IHNldGdlbignSCcsIiIsIiIsIiIpOworICAgICAgICByZXRjb2RlID0gMDsK KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWFpIT1M6ICAgICAgICAgICAgICAgICAgICAg ICAvKiBIb3N0ICovCisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJDb21tYW5kIGZvciByZW1vdGUg c3lzdGVtIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgIGlmICgoeSA9IChpbnQpc3RybGVuKHMpKSA8IDEpCisgICAgICAgICAgcmV0dXJuKHgpOwor ICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAgIGNtYXJnID0gbGlu ZTsKKyAgICAgICAgcm1zZygpOworICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gJ2MnOworICAg ICAgICBicmVhazsKKworI2lmbmRlZiBOT0ZSSUxMUworICAgICAgY2FzZSBYWktFUjoKKyAgICAg ICAgaWYgKCh4ID0gY210eHQoIkNvbW1hbmQgZm9yIHJlbW90ZSBLZXJtaXQiLCIiLCZzLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh4ID0gcmVtdHh0 KCZzKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKChpbnQpc3RybGVu KHMpIDwgMSkgIHsKKyAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCI/UmVtb3RlIEtlcm1pdCBjb21tYW5kIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfSBlbHNlIHJldHVybih4KTsKKyAgICAgICAg fQorICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAgIGNtYXJnID0g bGluZTsKKyAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9ICdrJzsKKyAgICAgICAgcm1zZygpOwor ICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBYWkxHSTogICAgICAgICAgICAgICAgICAgICAg IC8qIExvZ2luICovCisJcmNkYWN0aXZlID0gMTsJCQkvKiBTdXBwcmVzcyAiTG9nZ2VkIGluIiBt c2cgaWYgcXVpZXQgKi8KKyAgICAgICAgcmV0dXJuKHBsb2dpbihYWFJFTSkpOworCisgICAgICBj YXNlIFhaTEdPOiB7ICAgICAgICAgICAgICAgICAgICAgLyogTG9nb3V0ICovCisgICAgICAgICAg ZXh0ZXJuIGludCBieWVfYWN0aXZlOworICAgICAgICAgIGlmICgoeCA9IHJlbWNmbSgpKSA8IDAp IHJldHVybih4KTsKKyAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ0knLCIiLCIiLCIiKTsKKyAg ICAgICAgICByZXRjb2RlID0gMDsKKyAgICAgICAgICBieWVfYWN0aXZlID0gMTsgICAgICAgICAg ICAgICAvKiBDbG9zZSBjb25uZWN0aW9uIHdoZW4gZG9uZSAqLworICAgICAgICAgIGJyZWFrOwor ICAgICAgfQorCisgICAgICBjYXNlIFhaUFJJOiAgICAgICAgICAgICAgICAgICAgICAgLyogUHJp bnQgKi8KKyAgICAgICAgaWYgKCFhdGRpc28gfHwgIWF0Y2FwcikgeyAgICAgICAvKiBEaXNwb3Np dGlvbiBhdHRyaWJ1dGUgb2ZmPyAqLworICAgICAgICAgICAgcHJpbnRmKCI/RGlzcG9zaXRpb24g QXR0cmlidXRlIGlzIE9mZlxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9 CisgICAgICAgIGNtYXJnID0gIiI7CisgICAgICAgIGNtYXJnMiA9ICIiOworICAgICAgICBpZiAo KHggPSBjbWlmaSgiTG9jYWwgZmlsZShzKSB0byBwcmludCBvbiByZW1vdGUgcHJpbnRlciIsIiIs JnMsJnksCisgICAgICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAg ICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP05hbWUgb2YgbG9j YWwgZmlsZShzKSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBj a3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7ICAgIC8qIE1ha2UgYSBzYWZlIGNvcHkgb2YgZmls ZW5hbWUgKi8KKyAgICAgICAgKm9wdGJ1ZiA9IE5VTDsgICAgICAgICAgICAgICAgICAvKiBXaXBl IG91dCBhbnkgb2xkIG9wdGlvbnMgKi8KKyAgICAgICAgaWYgKCh4ID0gY210eHQoIk9wdGlvbnMg Zm9yIHJlbW90ZSBwcmludCBjb21tYW5kIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkKKyAgICAgICAg ICByZXR1cm4oeCk7CisgICAgICAgIGlmICgoaW50KXN0cmxlbihvcHRidWYpID4gOTQpIHsgLyog TWFrZSBzdXJlIHRoaXMgaXMgbGVnYWwgKi8KKyAgICAgICAgICAgIHByaW50ZigiP09wdGlvbiBz dHJpbmcgdG9vIGxvbmdcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQor ICAgICAgICBja3N0cm5jcHkob3B0YnVmLHMsT1BUQlVGTEVOKTsgIC8qIE1ha2UgYSBzYWZlIGNv cHkgb2Ygb3B0aW9ucyAqLworICAgICAgICBuZmlscyA9IC0xOyAgICAgICAgICAgICAgICAgICAg IC8qIEV4cGFuZCBmaWxlIGxpc3QgaW50ZXJuYWxseSAqLworICAgICAgICBjbWFyZyA9IGxpbmU7 ICAgICAgICAgICAgICAgICAgIC8qIFBvaW50IHRvIGZpbGUgbGlzdC4gKi8KKyAgICAgICAgcnBy aW50ZiA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBSRU1PVEUgUFJJTlQgbW9kaWZpZXIgZm9y IFNFTkQgKi8KKyAgICAgICAgc3N0YXRlID0gJ3MnOyAgICAgICAgICAgICAgICAgICAvKiBTZXQg c3RhcnQgc3RhdGUgdG8gU0VORCAqLworICAgICAgICBpZiAobG9jYWwpIGRpc3BsYSA9IDE7Cisg ICAgICAgIHJldGNvZGUgPSAwOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0ZSSUxMUyAq LworCisgICAgICBjYXNlIFhaU1BBOiAgICAgICAgICAgICAgICAgICAgICAgLyogU3BhY2UgKi8K KyAgICAgICAgaWYgKCh4ID0gY210eHQoIkNvbmZpcm0sIG9yIHJlbW90ZSBkaXJlY3RvcnkgbmFt ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQorICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHNldGdlbignVScscywi IiwiIik7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhaTVNHOiAgICAgICAgICAgICAg ICAgICAgICAgLyogTWVzc2FnZSAqLworICAgICAgICBpZiAoKHggPSBjbXR4dCgiU2hvcnQgdGV4 dCBtZXNzYWdlIGZvciBzZXJ2ZXIiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgaWYgKCh4ID0gcmVtdHh0KCZzKSkgPCAwKQorICAgICAgICAgIHJl dHVybih4KTsKKyAgICAgICAgcmV0Y29kZSA9IHNzdGF0ZSA9IHNldGdlbignTScscywiIiwiIik7 CisgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5PRlJJTExTCisgICAgICBjYXNlIFhaVFlQOiAg ICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSAqLworICAgICAgICBpZiAoKHggPSBjbXR4dCgi UmVtb3RlIGZpbGUgc3BlY2lmaWNhdGlvbiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgcmV0dXJuKHgpOworICAgICAgICBpZiAoKGludClzdHJsZW4ocykgPCAxKSB7CisgICAgICAg ICAgICBwcmludGYoIj9SZW1vdGUgZmlsZW5hbWUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAg cmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBybXNnKCk7CisgICAgICAgIHJldGNvZGUg PSBzc3RhdGUgPSByZmlsb3AocywnVCcpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0ZS SUxMUyAqLworCisjaWZuZGVmIE5PRlJJTExTCisgICAgICBjYXNlIFhaV0hPOgorICAgICAgICBp ZiAoKHggPSBjbXR4dCgiUmVtb3RlIHVzZXIgbmFtZSwgb3IgY2FycmlhZ2UgcmV0dXJuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICByZXRjb2RlID0gc3N0YXRlID0gc2V0Z2VuKCdXJyxzLCIiLCIiKTsK KyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworICAgICAgY2FzZSBYWlBX RDogICAgICAgICAgICAgICAgICAgICAgIC8qIFBXRCAqLworICAgICAgICBpZiAoKHggPSByZW1j Zm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAgIHNzdGF0ZSA9IHNldGdlbignQScsIiIsIiIs IiIpOworICAgICAgICByZXRjb2RlID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyNpZm5kZWYgTk9T UEwKKyAgICAgIGNhc2UgWFpRVUU6IHsgICAgICAgICAgICAgICAgICAgICAvKiBRdWVyeSAqLwor ICAgICAgICAgIGNoYXIgYnVmWzJdOworICAgICAgICAgIGV4dGVybiBjaGFyIHF1ZXJ5YnVmW10s ICogcWJ1ZnA7CisgICAgICAgICAgZXh0ZXJuIGludCBxYnVmbjsKKyAgICAgICAgICBpZiAoKHkg PSBjbWtleSh2YXJ0eXAsbnZhcnR5cCwiIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAg IHJldHVybih5KTsKKyAgICAgICAgICBpZiAoKHggPSBjbXR4dCh5ID09ICdGJyA/ICJSZW1vdGUg ZnVuY3Rpb24gaW52b2NhdGlvbiIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICgnSycgPyAi UmVtb3RlIHZhcmlhYmxlIG5hbWUgb3IgZnVuY3Rpb24iOgorICAgICAgICAgICAgICAgICAgICAg ICAgICJSZW1vdGUgdmFyaWFibGUgbmFtZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICZzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICh5ID09ICdLJykgPyB4eHN0cmluZyA6IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAp KSA8IDApICAgICAgICAvKiBEb24ndCBldmFsdWF0ZSAqLworICAgICAgICAgICAgcmV0dXJuKHgp OworICAgICAgICAgIGlmICgoeCA9IHJlbXR4dCgmcykpIDwgMCkKKyAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICBxdWVyeSA9IDE7ICAgICAgICAgICAgICAgICAgICAvKiBRVUVSWSBp cyBhY3RpdmUgKi8KKyAgICAgICAgICBxYnVmcCA9IHF1ZXJ5YnVmOyAgICAgICAgICAgICAvKiBJ bml0aWFsaXplIHF1ZXJ5IHJlc3BvbnNlIGJ1ZmZlciAqLworICAgICAgICAgIHFidWZuID0gMDsK KyAgICAgICAgICBxdWVyeWJ1ZlswXSA9IE5VTDsKKyAgICAgICAgICBidWZbMF0gPSAoY2hhcikg KHkgJiAxMjcpOworICAgICAgICAgIGJ1ZlsxXSA9IE5VTDsKKyAgICAgICAgICByZXRjb2RlID0g c3N0YXRlID0gc2V0Z2VuKCdWJywiUSIsKGNoYXIgKilidWYscyk7CisgICAgICAgICAgYnJlYWs7 CisgICAgICB9CisKKyAgICAgIGNhc2UgWFpBU0c6IHsgICAgICAgICAgICAgICAgICAgICAvKiBB c3NpZ24gKi8KKyAgICAgICAgICBjaGFyIGJ1ZltWTkFNTF07CisgICAgICAgICAgaWYgKCh5ID0g Y21mbGQoIlJlbW90ZSB2YXJpYWJsZSBuYW1lIiwiIiwmcyxOVUxMKSkgPCAwKSAvKiBObyBldmFs ICovCisgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHMp ID49IFZOQU1MKSB7CisgICAgICAgICAgICAgIHByaW50ZigiP1RvbyBsb25nXG4iKTsKKyAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICB9CisgICAgICAgICAgY2tzdHJuY3B5KGJ1 ZixzLFZOQU1MKTsKKyAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiQXNzaWdubWVudCBmb3IgcmVt b3RlIHZhcmlhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkg LyogRXZhbHVhdGUgdGhpcyBvbmUgKi8KKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAg ICBpZiAoKHggPSByZW10eHQoJnMpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisjaWZk ZWYgQ09NTUVOVAorLyoKKyAgU2VydmVyIGNvbW1hbmRzIGNhbid0IGJlIGxvbmcgcGFja2V0cy4g IEluIHByaW5jaXBsZSB0aGVyZSdzIG5vIHJlYXNvbgorICB3aHkgdGhleSBzaG91bGRuJ3QgYmUs IGV4Y2VwdCB0aGF0IHdlIGRvbid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiB0aGUKKyAgc2VydmVy IGlzIGNhcGFibGUgb2YgYWNjZXB0aW5nIGxvbmcgcGFja2V0cyBiZWNhdXNlIHdlIGhhdmVuJ3Qg c3RhcnRlZAorICB0aGUgcHJvdG9jb2wgeWV0LiAgSW4gcHJhY3RpY2UsIGFsbG93aW5nIGEgbG9u ZyBwYWNrZXQgaGVyZSBicmVha3MgYSBsb3QKKyAgb2YgYXNzdW1wdGlvbnMsIGNhdXNlcyBidWZm ZXIgb3ZlcnJ1bnMgYW5kIGNyYXNoZXMsIGV0Yy4gIFRvIGJlIGZpeGVkCisgIGxhdGVyLiAgKEJ1 dCBzaW5jZSB0aGlzIGlzIGNvbW1lbnRlZCBvdXQsIGV2aWRlbnRseSBJIGZpeGVkIGl0IGxhdGVy Li4uKQorKi8KKyAgICAgICAgICBpZiAoKGludClzdHJsZW4ocykgPiA4NSkgeyAgICAvKiBBbGxv dyBmb3IgZW5jb2RpbmcgZXhwYW5zaW9uICovCisgICAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5 LCB2YWx1ZSBpcyB0b28gbG9uZyAtIDg1IGNoYXJhY3RlcnMgbWF4XG4iKTsKKyAgICAgICAgICAg ICAgcmV0dXJuKC05KTsKKyAgICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICAgIHJldGNvZGUgPSBzc3RhdGUgPSBzZXRnZW4oJ1YnLCJTIiwoY2hhciAqKWJ1ZixzKTsKKyAg ICAgICAgICBicmVhazsKKyAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgICBjYXNl IFhaQ1BZOiB7ICAgICAgICAgICAgICAgICAgICAgLyogQ09QWSAqLworICAgICAgICAgIGNoYXIg YnVmW1RNUEJVRlNJWl07CisgICAgICAgICAgYnVmW1RNUEJVRlNJWi0xXSA9ICdcMCc7CisgICAg ICAgICAgaWYgKCh4ID0gY21mbGQoIk5hbWUgb2YgcmVtb3RlIGZpbGUgdG8gY29weSIsIiIsJnMs eHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAg ICAgICAgICAgIHByaW50ZigiP05hbWUgb2YgcmVtb3RlIGZpbGUgcmVxdWlyZWRcbiIpOworICAg ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIH0KKyAgICAgICAg ICBja3N0cm5jcHkoYnVmLHMsVE1QQlVGU0laKTsKKyAgICAgICAgICBpZiAoKHggPSBjbWZsZCgi TmFtZSBvZiByZW1vdGUgZGVzdGluYXRpb24gZmlsZSBvciBkaXJlY3RvcnkiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICIiLCZzLCB4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICBp ZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TmFtZSBvZiByZW1vdGUg ZmlsZSBvciBkaXJlY3RvcnkgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHJldHVybih4KTsKKyAgICAgICAgICB9CisgICAg ICAgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgICAgICAgaWYgKCh4ID0g cmVtY2ZtKCkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICBpZiAobG9j YWwpIHR0Zmx1aSgpOyAgICAgICAgICAvKiBJZiBsb2NhbCwgZmx1c2ggdHR5IGlucHV0IGJ1ZmZl ciAqLworICAgICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSBzZXRnZW4oJ0snLGJ1Zix0bXBidWYs IiIpOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBYWlJFTjogeyAgICAg ICAgICAgICAgICAgICAgIC8qIFJlbmFtZSAqLworICAgICAgICAgIGNoYXIgYnVmW1RNUEJVRlNJ Wl07CisgICAgICAgICAgYnVmW1RNUEJVRlNJWi0xXSA9ICdcMCc7CisgICAgICAgICAgaWYgKCh4 ID0gY21mbGQoIk5hbWUgb2YgcmVtb3RlIGZpbGUgdG8gcmVuYW1lIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICBpZiAoeCA9 PSAtMykgeworICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TmFtZSBvZiByZW1vdGUgZmlsZSBy ZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAg ICB9IGVsc2UgcmV0dXJuKHgpOworICAgICAgICAgIH0KKyAgICAgICAgICBja3N0cm5jcHkoYnVm LHMsVE1QQlVGU0laKTsKKyAgICAgICAgICBpZiAoKHggPSBjbWZsZCgiTmV3IG5hbWUgb2YgcmVt b3RlIGZpbGUiLCIiLCZzLCB4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICBpZiAoeCA9 PSAtMykgeworICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/TmFtZSBvZiByZW1vdGUgZmlsZSBy ZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAg ICB9IGVsc2UgcmV0dXJuKHgpOworICAgICAgICAgIH0KKyAgICAgICAgICBja3N0cm5jcHkodG1w YnVmLHMsVE1QQlVGU0laKTsKKyAgICAgICAgICBpZiAoKHggPSByZW1jZm0oKSkgPCAwKQorICAg ICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgIGlmIChsb2NhbCkgdHRmbHVpKCk7ICAgICAg ICAgIC8qIElmIGxvY2FsLCBmbHVzaCBkZXZpY2UgYnVmZmVyICovCisgICAgICAgICAgcmV0Y29k ZSA9IHNzdGF0ZSA9IHNldGdlbignUicsYnVmLHRtcGJ1ZiwiIik7CisgICAgICAgICAgYnJlYWs7 CisgICAgICB9CisgICAgICBjYXNlIFhaTUtEOiAgICAgICAgICAgICAgICAgICAgICAgLyogbWtk aXIgKi8KKyAgICAgIGNhc2UgWFpSTUQ6ICAgICAgICAgICAgICAgICAgICAgICAvKiBybWRpciAq LworICAgICAgICBpZiAoKHggPSBjbXR4dCgoeHggPT0gWFpNS0QpID8KKyAgICAgICAgICAgICAg ICAgICAgICAgIk5hbWUgb2YgcmVtb3RlIGRpcmVjdG9yeSB0byBjcmVhdGUiIDoKKyAgICAgICAg ICAgICAgICAgICAgICAgIk5hbWUgb2YgcmVtb3RlIGRpcmVjdG9yeSB0byBkZWxldGUiLAorICAg ICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgJnMsCisgICAg ICAgICAgICAgICAgICAgICAgIHh4c3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICkpIDwg MCkgeworICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYo Ij9OYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAg ICAgICAgfSBlbHNlIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHggPSByZW10 eHQoJnMpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICBpZiAobG9jYWwpIHR0 Zmx1aSgpOyAgICAgICAgICAgIC8qIElmIGxvY2FsLCBmbHVzaCB0dHkgaW5wdXQgYnVmZmVyICov CisgICAgICAgIHJldGNvZGUgPSBzc3RhdGUgPSByZmlsb3AocywgKGNoYXIpKHh4ID09IFhaTUtE ID8gJ20nIDogJ2QnKSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhaWElUOiAgICAg ICAgICAgICAgICAgICAgICAgLyogRXhpdCAqLworICAgICAgICBpZiAoKHggPSByZW1jZm0oKSkg PCAwKSByZXR1cm4oeCk7CisgICAgICAgIHNzdGF0ZSA9IHNldGdlbignWCcsIiIsIiIsIiIpOwor ICAgICAgICByZXRjb2RlID0gMDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6Cisg ICAgICAgIGlmICgoeCA9IHJlbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgcHJpbnRm KCI/Tm90IGltcGxlbWVudGVkIC0gJXNcbiIsY21kYnVmKTsKKyAgICAgICAgcmV0dXJuKC0yKTsK KyAgICB9CisgICAgaWYgKGxvY2FsICYmIHJldGNvZGUgPiAtMSkgICAgICAgICAgLyogSWYgbG9j YWwsIGZsdXNoIHR0eSBpbnB1dCBidWZmZXIgKi8KKyAgICAgIHR0Zmx1aSgpOworICAgIHJldHVy bihyZXRjb2RlKTsKK30KKworCisvKiAgUiBGIEkgTCBPIFAgIC0tICBSZW1vdGUgRmlsZSBPcGVy YXRpb24gICovCisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworcmZpbG9wKGNoYXIgKiBzLCBjaGFy IHQpCisjZWxzZQorcmZpbG9wKHMsdCkgY2hhciAqcywgdDsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogcmZpbG9wICovIHsKKyAgICBpZiAoKnMgPT0gTlVMKSB7CisgICAgICAgIHByaW50Zigi P0ZpbGUgc3BlY2lmaWNhdGlvbiByZXF1aXJlZFxuIik7CisgICAgICAgIHJldHVybigoQ0hBUikg MCk7CisgICAgfQorICAgIGRlYnVnKEYxMTEsInJmaWxvcCIscyx0KTsKKyAgICByZXR1cm4oc2V0 Z2VuKHQscywiIiwiIikpOworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQU5ZWDI1 CitpbnQKK3NldHgyNSgpIHsKKyAgICBpZiAoKHkgPSBjbWtleSh4MjV0YWIsbngyNSwiWC4yNSBj YWxsIG9wdGlvbnMiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworICAgIHN3 aXRjaCAoeSkgeworICAgICAgY2FzZSBYWVVEQVQ6CisgICAgICAgIGlmICgoeiA9IGNta2V5KG9u b2ZmLDIsIlguMjUgY2FsbCB1c2VyIGRhdGEiLCIiLHh4c3RyaW5nKSkKKyAgICAgICAgICAgIDwg MCkgcmV0dXJuKHopOworICAgICAgICBpZiAoeiA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKHog PSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKKyAgICAgICAgICAgIGN1ZGF0YSA9IDA7ICAgICAg ICAgICAgIC8qIGRpc2FibGUgY2FsbCB1c2VyIGRhdGEgKi8KKyAgICAgICAgICAgIHJldHVybiAo c3VjY2VzcyA9IDEpOworICAgICAgICB9CisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJYLjI1IGNh bGwgdXNlciBkYXRhIHN0cmluZyIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0 dXJuKHgpOworICAgICAgICBpZiAoKGludClzdHJsZW4ocykgPT0gMCkgeworICAgICAgICAgICAg cmV0dXJuICgtMyk7CisgICAgICAgIH0gZWxzZSBpZiAoKGludClzdHJsZW4ocykgPiBNQVhDVURB VEEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoZSBsZW5ndGggbXVzdCBiZSA+IDAgYW5kIDw9 ICVkXG4iLE1BWENVREFUQSk7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9Cisg ICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBja3N0cm5j cHkodWRhdGEscyxNQVhDVURBVEEpOworICAgICAgICBjdWRhdGEgPSAxOyAgICAgICAgICAgICAg ICAgICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgc3BlY2lmaWVkICovCisgICAgICAgIHJldHVy biAoc3VjY2VzcyA9IDEpOworICAgICAgY2FzZSBYWUNMT1M6CisgICAgICAgIGlmICgoeiA9IGNt a2V5KG9ub2ZmLDIsIlguMjUgY2xvc2VkIHVzZXIgZ3JvdXAgY2FsbCIsIiIseHhzdHJpbmcpKQor ICAgICAgICAgICAgPCAwKSByZXR1cm4oeik7CisgICAgICAgIGlmICh6ID09IDApIHsKKyAgICAg ICAgICAgIGlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworICAgICAgICAgICAgY2xv c2dyID0gLTE7ICAgICAgICAgICAgICAgIC8qIGRpc2FibGUgY2xvc2VkIHVzZXIgZ3JvdXAgKi8K KyAgICAgICAgICAgIHJldHVybiAoc3VjY2VzcyA9IDEpOworICAgICAgICB9CisgICAgICAgIGlm ICgoeSA9IGNtbnVtKCIwIDw9IGN1ZyBpbmRleCA+PSA5OSIsIiIsMTAsJngseHhzdHJpbmcpKSA8 IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoeCA8IDAgfHwgeCA+IDk5KSB7 CisgICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCA8PSBjdWcgaW5kZXggPj0g OTlcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo KHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgY2xvc2dyID0geDsgICAgICAg ICAgICAgICAgICAgICAvKiBjbG9zZWQgdXNlciBncm91cCBzZWxlY3RlZCAqLworICAgICAgICBy ZXR1cm4gKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBYWVJFVkM6CisgICAgICAgIGlmKCh6 ID0gY21rZXkob25vZmYsMiwiWC4yNSByZXZlcnNlIGNoYXJnZSBjYWxsIiwiIix4eHN0cmluZykp IDwgMCkKKyAgICAgICAgICByZXR1cm4oeik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHgpOworICAgICAgICByZXZjYWxsID0gejsKKyAgICAgICAgcmV0dXJuIChzdWNj ZXNzID0gMSk7CisgICAgfQorfQorCisjaWZuZGVmIElCTVgyNQoraW50CitzZXRwYWRwKCkgewor ICAgIGlmICgoeSA9IGNta2V5KHBhZHgzdGFiLG5wYWR4MywiUEFEIFguMyBwYXJhbWV0ZXIgbmFt ZSIsIiIseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeSk7CisgICAgeCA9IHk7CisgICAg c3dpdGNoICh4KSB7CisgICAgICBjYXNlIFBBRF9CUkVBS19DSEFSQUNURVI6CisgICAgICAgIGlm ICgoeSA9IGNtbnVtKCJQQUQgYnJlYWsgY2hhcmFjdGVyIHZhbHVlIiwiIiwxMCwmeix4eHN0cmlu ZykpIDwgMCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUEFEX0VTQ0FQRToK KyAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBlc2NhcGUiLCIiLDEwLCZ6LHh4c3RyaW5nKSkg PCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAxKSB7CisgICAgICAg ICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxXG4iKTsKKyAgICAgICAgICAgIHJl dHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQQURfRUNITzoKKyAgICAgICAgaWYg KCh5ID0gY21udW0oIlBBRCBlY2hvIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHkp OworICAgICAgICBpZiAoeiAhPSAwICYmIHogIT0gMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/ VGhlIGNob2ljZXMgYXJlIDAgb3IgMVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAg ICAgICB9CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAg ICBicmVhazsKKyAgICAgIGNhc2UgUEFEX0RBVEFfRk9SV0FSRF9DSEFSOgorICAgICAgICBpZiAo KHkgPSBjbW51bSgiUEFEIGRhdGEgZm9yd2FyZCBjaGFyIiwiIiwxMCwmeix4eHN0cmluZykpIDwg MCkKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAyKSB7 CisgICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAyXG4iKTsKKyAgICAg ICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBQQURfREFUQV9GT1JX QVJEX1RJTUVPVVQ6CisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgZGF0YSBmb3J3YXJkIHRp bWVvdXQiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuKHkpOwor ICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IDI1NSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhl IGNob2ljZXMgYXJlIDAgb3IgMSA8PSB0aW1lb3V0IDw9IDI1NVxuIik7CisgICAgICAgICAgICBy ZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgUEFEX0ZMT1dfQ09OVFJPTF9CWV9Q QUQ6CisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgcGFkIGZsb3cgY29udHJvbCIsIiIsMTAs JnoseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoeiAh PSAwICYmIHogIT0gMSkgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAg b3IgMVxuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGlm ICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKyAgICAgIGNh c2UgUEFEX1NVUFBSRVNTSU9OX09GX1NJR05BTFM6CisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJQ QUQgc2VydmljZSIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAg aWYgKHogIT0gMCAmJiB6ICE9IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2Vz IGFyZSAwIG9yIDFcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAg ICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgUEFEX0JSRUFLX0FDVElPTjoKKyAgICAgICAgaWYgKCh5ID0gY21udW0oIlBB RCBicmVhayBhY3Rpb24iLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAg ICAgIGlmICh6ICE9IDAgJiYgeiAhPSAxICYmIHogIT0gMiAmJiB6ICE9IDUgJiYgeiAhPSA4ICYm IHogIT0gMjEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwLCAxLCAy LCA1LCA4IG9yIDIxXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOwor CisgICAgICBjYXNlIFBBRF9TVVBQUkVTU0lPTl9PRl9EQVRBOgorICAgICAgICBpZiAoKHkgPSBj bW51bSgiUEFEIGRhdGEgZGVsaXZlcnkiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eSk7CisgICAgICAgIGlmICh6ICE9IDAgJiYgeiAhPSAxKSB7CisgICAgICAgICAgICBwcmludGYo Ij9UaGUgY2hvaWNlcyBhcmUgMCBvciAxXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAg ICAgIGJyZWFrOworCisgICAgICBjYXNlIFBBRF9QQURESU5HX0FGVEVSX0NSOgorICAgICAgICBp ZiAoKHkgPSBjbW51bSgiUEFEIGNycGFkIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkgcmV0dXJu KHkpOworICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IDcpIHsKKyAgICAgICAgICAgIHByaW50Zigi P1RoZSBjaG9pY2VzIGFyZSAwIG9yIDEgPD0gY3JwYWQgPD0gN1xuIik7CisgICAgICAgICAgICBy ZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0 dXJuKHkpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBQQURfTElORV9GT0xESU5HOgor ICAgICAgICBpZiAoKHkgPSBjbW51bSgiUEFEIGxpbmVmb2xkIiwiIiwxMCwmeix4eHN0cmluZykp IDwgMCkgcmV0dXJuKHkpOworICAgICAgICBpZiAoeiA8IDAgfHwgeiA+IDI1NSkgeworICAgICAg ICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMSA8PSBsaW5lZm9sZCA8PSAyNTVc biIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHkg PSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Ug UEFEX0xJTkVfU1BFRUQ6CisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgYmF1ZHJhdGUiLCIi LDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmICh6IDwgMCB8fCB6 ID4gMTgpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIDw9IGJhdWRy YXRlIDw9IDE4XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworCisg ICAgICBjYXNlIFBBRF9GTE9XX0NPTlRST0xfQllfVVNFUjoKKyAgICAgICAgaWYgKCh5ID0gY21u dW0oIlBBRCB0ZXJtaW5hbCBmbG93IGNvbnRyb2wiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICBpZiAoeiAhPSAwICYmIHogIT0gMSkgewor ICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAgb3IgMVxuIik7CisgICAgICAg ICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBQQURfTEZfQUZURVJf Q1I6CisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQgY3JwYWQiLCIiLDEwLCZ6LHh4c3RyaW5n KSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmICh6IDwgMCB8fCB6ID09IDMgfHwgeiA+IDcp IHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwLCAxLCAyLCA0LCA1LCA2 IG9yIDdcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAg IGNhc2UgUEFEX1BBRERJTkdfQUZURVJfTEY6CisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJQQUQg bGZwYWQiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGlmICh6 IDwgMCB8fCB6ID4gNykgeworICAgICAgICAgICAgcHJpbnRmKCI/VGhlIGNob2ljZXMgYXJlIDAg b3IgMSA8PSBsZnBhZCA8PSA3XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAg IH0KKyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJy ZWFrOworCisgICAgICBjYXNlIFBBRF9FRElUSU5HOgorICAgICAgICBpZiAoKHkgPSBjbW51bSgi UEFEIGVkaXQgY29udHJvbCIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApIHJldHVybih5KTsKKyAg ICAgICAgaWYgKHogIT0gMCAmJiB6ICE9IDEpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1RoZSBj aG9pY2VzIGFyZSAwIG9yIDFcbiIpOworICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgYnJl YWs7CisKKyAgICAgIGNhc2UgUEFEX0NIQVJfREVMRVRFX0NIQVI6CisgICAgICAgIGlmICgoeSA9 IGNtbnVtKCJQQUQgY2hhciBkZWxldGUgY2hhciIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCisg ICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgIGlmICh6IDwgMCB8fCB6ID4gMTI3KSB7Cisg ICAgICAgICAgICBwcmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxIDw9IGNoYXJkZWxldGUg PD0gMTI3XG4iKTsKKyAgICAgICAgICAgIHJldHVybigtMik7CisgICAgICAgIH0KKyAgICAgICAg aWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAgIGJyZWFrOworCisgICAg ICBjYXNlIFBBRF9CVUZGRVJfREVMRVRFX0NIQVI6CisgICAgICAgIGlmICgoeSA9IGNtbnVtKCJQ QUQgYnVmZmVyIGRlbGV0ZSBjaGFyIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICAgIHJldHVybih5KTsKKyAgICAgICAgaWYgKHogPCAwIHx8IHogPiAxMjcpIHsKKyAgICAgICAg ICAgIHByaW50ZigiP1RoZSBjaG9pY2VzIGFyZSAwIG9yIDEgPD0gYnVmZmVyZGVsZXRlIDw9IDEy N1xuIik7CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGlmICgo eSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKworICAgICAgY2Fz ZSBQQURfQlVGRkVSX0RJU1BMQVlfQ0hBUjoKKyAgICAgICAgaWYgKCh5ID0gY21udW0oIlBBRCBk aXNwbGF5IGxpbmUgY2hhciIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICBy ZXR1cm4oeSk7CisgICAgICAgIGlmICh6IDwgMCB8fCB6ID4gMTI3KSB7CisgICAgICAgICAgICBw cmludGYoIj9UaGUgY2hvaWNlcyBhcmUgMCBvciAxIDw9IGRpc3BsYXlsaW5lIDw9IDEyN1xuIik7 CisgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICB9CisgICAgICAgIGlmICgoeSA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcGFkcGFy bXNbeF0gPSB6OworICAgIHJldHVybihzdWNjZXNzID0gMSk7Cit9CisjZW5kaWYgLyogSUJNWDI1 ICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZm5kZWYgTk9YRkVSCitpbnQKK3NldGF0KHJt c2ZsZykgaW50IHJtc2ZsZzsgeworICAgIGludCB4eDsKKyAgICBpZiAoKHkgPSBjbWtleShhdHRy dGFiLG5hdHIsIkZpbGUgQXR0cmlidXRlIHBhY2tldHMiLCIiLHh4c3RyaW5nKSkgPCAwKQorICAg ICAgcmV0dXJuKHkpOworICAgIGlmICh5ID09IEFUX1hBTEwpIHsgICAgICAgICAgICAgICAgIC8q IEFUVFJJQlVURVMgQUxMIE9OIG9yIEFMTCBPRkYgKi8KKyAgICAgICAgaWYgKCh6ID0gc2V0b24o Jnh4KSkgPCAwKSByZXR1cm4oeik7CisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAg IHByaW50ZigiU29ycnksIGNvbW1hbmQgbm90IGF2YWlsYWJsZVxuIik7CisgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXRlbmNpID0geHg7ICAg ICAgICAgICAgICAgIC8qIEVuY29kaW5nIGluICovCisgICAgICAgICAgICBhdGVuY28gPSB4eDsg ICAgICAgICAgICAgICAgLyogRW5jb2Rpbmcgb3V0ICovCisgICAgICAgICAgICBhdGRhdGkgPSB4 eDsgICAgICAgICAgICAgICAgLyogRGF0ZSBpbiAqLworICAgICAgICAgICAgYXRkYXRvID0geHg7 ICAgICAgICAgICAgICAgIC8qIERhdGUgb3V0ICovCisgICAgICAgICAgICBhdGRpc2kgPSB4eDsg ICAgICAgICAgICAgICAgLyogRGlzcG9zaXRpb24gaW4vb3V0ICovCisgICAgICAgICAgICBhdGRp c28gPSB4eDsKKyAgICAgICAgICAgIGF0bGVuaSA9IHh4OyAgICAgICAgICAgICAgICAvKiBMZW5n dGggaW4vb3V0IChib3RoIGtpbmRzKSAqLworICAgICAgICAgICAgYXRsZW5vID0geHg7CisgICAg ICAgICAgICBhdGJsa2kgPSB4eDsgICAgICAgICAgICAgICAgLyogQmxvY2tzaXplIGluL291dCAq LworICAgICAgICAgICAgYXRibGtvID0geHg7CisgICAgICAgICAgICBhdHR5cGkgPSB4eDsgICAg ICAgICAgICAgICAgLyogRmlsZSB0eXBlIGluL291dCAqLworICAgICAgICAgICAgYXR0eXBvID0g eHg7CisgICAgICAgICAgICBhdHNpZGkgPSB4eDsgICAgICAgICAgICAgICAgLyogU3lzdGVtIElE IGluL291dCAqLworICAgICAgICAgICAgYXRzaWRvID0geHg7CisgICAgICAgICAgICBhdHN5c2kg PSB4eDsgICAgICAgICAgICAgICAgLyogU3lzdGVtLWRlcGVuZGVudCBwYXJhbXMgaW4vb3V0ICov CisgICAgICAgICAgICBhdHN5c28gPSB4eDsKKyNpZmRlZiBDS19QRVJNUyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBQcm90ZWN0aW9uICovCisgICAgICAgICAgICBhdGxwcmkgPSB4eDsgICAg ICAgICAgICAgICAgLyogTG9jYWwgaW4gKi8KKyAgICAgICAgICAgIGF0bHBybyA9IHh4OyAgICAg ICAgICAgICAgICAvKiBMb2NhbCBvdXQgKi8KKyAgICAgICAgICAgIGF0Z3ByaSA9IHh4OyAgICAg ICAgICAgICAgICAvKiBHZW5lcmljIGluICovCisgICAgICAgICAgICBhdGdwcm8gPSB4eDsgICAg ICAgICAgICAgICAgLyogR2VuZXJpYyBvdXQgKi8KKyNlbmRpZiAvKiBDS19QRVJNUyAqLworI2lm ZGVmIFNUUkFUVVMKKyAgICAgICAgICAgIGF0ZnJtaSA9IHh4OyAgICAgICAgICAgICAgICAvKiBG b3JtYXQgaW4vb3V0ICovCisgICAgICAgICAgICBhdGZybW8gPSB4eDsKKyAgICAgICAgICAgIGF0 Y3JlaSA9IHh4OyAgICAgICAgICAgICAgICAvKiBDcmVhdG9yIGlkIGluL291dCAqLworICAgICAg ICAgICAgYXRjcmVvID0geHg7CisgICAgICAgICAgICBhdGFjdGkgPSB4eDsgICAgICAgICAgICAg ICAgLyogQWNjb3VudCBpbi9vdXQgKi8KKyAgICAgICAgICAgIGF0YWN0byA9IHh4OworI2VuZGlm IC8qIFNUUkFUVVMgKi8KKyAgICAgICAgfQorICAgICAgICByZXR1cm4oeik7CisgICAgfSBlbHNl IGlmICh5ID09IEFUX0FMTFkgfHwgeSA9PSBBVF9BTExOKSB7IC8qIEFUVFJJQlVURVMgT04gb3Ig T0ZGICovCisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAg ICBhdGNhcHIgPSAoeSA9PSBBVF9BTExZKSA/IDEgOiAwOworICAgICAgICBpZiAocm1zZmxnKSB7 CisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTMyIiwgYXRjYXByID8gIjEiIDog IjAiLCAiIik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfSBl bHNlIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorICAgIC8qIE90aGVyd2lzZSwgaXQncyBh biBpbmRpdmlkdWFsIGF0dHJpYnV0ZSB0aGF0IHdhbnRzIHR1cm5pbmcgb2ZmL29uICovCisKKyAg ICBpZiAoKHogPSBjbWtleShvbm9mZiwyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeik7 CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisKKy8qIFRoZXJlIGFyZSBi ZXR0ZXIgd2F5cyB0byBkbyB0aGlzLi4uICovCisvKiBUaGUgcmVhbCBwcm9ibGVtIGlzIHRoYXQg d2UncmUgbm90IHNlcGFyYXRpbmcgdGhlIGluIGFuZCBvdXQgY2FzZXMgKi8KKy8qIGFuZCBzbyB3 ZSBoYXZlIHRvIGFyYml0cmFyaWx5IHBpY2sgdGhlICJpbiIgY2FzZSwgaS5lIHRlbGwgdGhlIHJl bW90ZSAqLworLyogc2VydmVyIHRvIGlnbm9yZSBpbmNvbWluZyBhdHRyaWJ1dGVzIG9mIHRoZSBz cGVjaWZpZWQgdHlwZSwgcmF0aGVyICovCisvKiB0aGFuIHRlbGxpbmcgaXQgbm90IHRvIHNlbmQg dGhlbS4gIFRoZSBwcm90b2NvbCBkb2VzIG5vdCAoeWV0KSBkZWZpbmUgKi8KKy8qIGNvZGVzIGZv ciAiaW4tYW5kLW91dC1hdC10aGUtc2FtZS10aW1lIi4gKi8KKworICAgIHN3aXRjaCAoeSkgewor I2lmZGVmIENLX1BFUk1TCisvKiBXZSdyZSBsdW1waW5nIGxvY2FsIGFuZCBnZW5lcmljIHByb3Rl Y3Rpb24gdG9nZXRoZXIgZm9yIG5vdy4uLiAqLworICAgICAgY2FzZSBBVF9MUFJPOgorICAgICAg Y2FzZSBBVF9HUFJPOgorICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICBzc3RhdGUg PSBzZXRnZW4oJ1MnLCAiMTQzIiwgeiA/ICIxIiA6ICIwIiwgIiIpOworICAgICAgICAgICAgcmV0 dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgYXRscHJpID0gYXRscHJvID0g YXRncHJpID0gYXRncHJvID0gejsgYnJlYWs7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyAgICAg IGNhc2UgQVRfRElTUDoKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgc3N0YXRl ID0gc2V0Z2VuKCdTJywgIjE0MiIsIHogPyAiMSIgOiAiMCIsICIiKTsKKyAgICAgICAgICAgIHJl dHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGF0ZGlzaSA9IGF0ZGlzbyA9 IHo7IGJyZWFrOworICAgICAgY2FzZSBBVF9FTkNPOgorICAgICAgICBpZiAocm1zZmxnKSB7Cisg ICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTQxIiwgeiA/ICIxIiA6ICIwIiwgIiIp OworICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAg YXRlbmNpID0gYXRlbmNvID0gejsgYnJlYWs7CisgICAgICBjYXNlIEFUX0RBVEU6CisgICAgICAg IGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxMzUiLCB6 ID8gIjEiIDogIjAiLCAiIik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAg ICAgICAgfQorICAgICAgICBhdGRhdGkgPSBhdGRhdG8gPSB6OyBicmVhazsKKyAgICAgIGNhc2Ug QVRfTEVOQjoKKyAgICAgIGNhc2UgQVRfTEVOSzoKKyAgICAgICAgaWYgKHJtc2ZsZykgeworICAg ICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjEzMyIsIHogPyAiMSIgOiAiMCIsICIiKTsK KyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGF0 bGVuaSA9IGF0bGVubyA9IHo7IGJyZWFrOworICAgICAgY2FzZSBBVF9CTEtTOgorICAgICAgICBp ZiAocm1zZmxnKSB7CisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAiMTM5IiwgeiA/ ICIxIiA6ICIwIiwgIiIpOworICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0ZSk7CisgICAg ICAgIH0KKyAgICAgICAgYXRibGtpID0gYXRibGtvID0gejsgYnJlYWs7CisgICAgICBjYXNlIEFU X0ZUWVA6CisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdl bignUycsICIxMzQiLCB6ID8gIjEiIDogIjAiLCAiIik7CisgICAgICAgICAgICByZXR1cm4oKGlu dCkgc3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBhdHR5cGkgPSBhdHR5cG8gPSB6OyBicmVh azsKKyNpZmRlZiBTVFJBVFVTCisgICAgICBjYXNlIEFUX0NSRUE6CisgICAgICAgIGlmIChybXNm bGcpIHsKKyAgICAgICAgICAgIHNzdGF0ZSA9IHNldGdlbignUycsICIxMzYiLCB6ID8gIjEiIDog IjAiLCAiIik7CisgICAgICAgICAgICByZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfQor ICAgICAgICBhdGNyZWkgPSBhdGNyZW8gPSB6OyBicmVhazsKKyAgICAgIGNhc2UgQVRfQUNDVDoK KyAgICAgICAgaWYgKHJtc2ZsZykgeworICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywg IjEzNyIsIHogPyAiMSIgOiAiMCIsICIiKTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3Rh dGUpOworICAgICAgICB9CisgICAgICAgIGF0YWN0aSA9IGF0YWN0byA9IHo7IGJyZWFrOworI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KKyAgICAgIGNhc2UgQVRfU1lTSToKKyAgICAgICAgaWYgKHJtc2Zs ZykgeworICAgICAgICAgICAgc3N0YXRlID0gc2V0Z2VuKCdTJywgIjE0NSIsIHogPyAiMSIgOiAi MCIsICIiKTsKKyAgICAgICAgICAgIHJldHVybigoaW50KSBzc3RhdGUpOworICAgICAgICB9Cisg ICAgICAgIGF0c2lkaSA9IGF0c2lkbyA9IHo7IGJyZWFrOworICAgICAgY2FzZSBBVF9SRUNGOgor ICAgICAgICBpZiAocm1zZmxnKSB7CisgICAgICAgICAgICBzc3RhdGUgPSBzZXRnZW4oJ1MnLCAi MTQ2IiwgeiA/ICIxIiA6ICIwIiwgIiIpOworICAgICAgICAgICAgcmV0dXJuKChpbnQpIHNzdGF0 ZSk7CisgICAgICAgIH0KKyAgICAgICAgYXRmcm1pID0gYXRmcm1vID0gejsgYnJlYWs7CisgICAg ICBjYXNlIEFUX1NZU1A6CisgICAgICAgIGlmIChybXNmbGcpIHsKKyAgICAgICAgICAgIHNzdGF0 ZSA9IHNldGdlbignUycsICIxNDciLCB6ID8gIjEiIDogIjAiLCAiIik7CisgICAgICAgICAgICBy ZXR1cm4oKGludCkgc3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBhdHN5c2kgPSBhdHN5c28g PSB6OyBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHByaW50ZigiP05vdCBhdmFpbGFi bGVcbiIpOworICAgICAgICByZXR1cm4oLTIpOworICAgIH0KKyAgICByZXR1cm4oMSk7Cit9Cisj ZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9TUEwKK2ludAorc2V0aW5wKCkgeworICAg IGlmICgoeSA9IGNta2V5KGlucHRhYixuaW5wLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eSk7CisgICAgc3dpdGNoICh5KSB7CisjaWZkZWYgT1MyCisgICAgICBjYXNlIElOX1BBQzogICAg ICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIFBBQ0lORyAqLworICAgICAgICB6ID0gY21u dW0oIm1pbGxpc2Vjb25kcyIsIjAiLDEwLCZ4LHh4c3RyaW5nKTsKKyAgICAgICAgcmV0dXJuKHNl dG51bSgmdHRfaW5wYWNpbmcseCx6LDEwMDApKTsKKyAgICAgIGNhc2UgSU5fVFJNOiAgICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgVEVSTUlOQUwgKi8KKyAgICAgICAgcmV0dXJuKHNl dG9uKCZpbnRlcm0pKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgIGNhc2UgSU5fREVGOiAgICAg ICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgREVGQVVMVC1USU1FT1VUICovCisgICAgICAg IHogPSBjbW51bSgiUG9zaXRpdmUgbnVtYmVyIiwiIiwxMCwmeCx4eHN0cmluZyk7CisgICAgICAg IHJldHVybihzZXRudW0oJmluZGVmLHgseiw5NCkpOworI2lmZGVmIENLRkxPQVQKKyAgICAgIGNh c2UgSU5fU0NBOiAgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgU0NBTEUtRkFDVE9S ICovCisJaWYgKCh4ID0gY21mbGQoIk51bWJlciBzdWNoIGFzIDIgb3IgMC41IiwiMS4wIiwmcywg eHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeCk7CisgICAgICAgIGlmIChpc2Zsb2F0KHMsMCkp IHsJCS8qIEEgZmxvYXRpbmctcG9pbnQgbnVtYmVyPyAqLworICAgICAgICAgICAgZXh0ZXJuIGNo YXIgKiBpbnBzY2FsZTsKKwkgICAgaW5zY2FsZSA9IGZsb2F0dmFsOwkJLyogWWVzLCBnZXQgaXRz IHZhbHVlICovCisJICAgIG1ha2VzdHIoJmlucHNjYWxlLHMpOwkvKiBTYXZlIGl0IGFzIFx2KGlu c2NhbGUpICovCisJICAgIHJldHVybihzdWNjZXNzID0gMSk7CisJfSBlbHNlIHsKKwkgICAgcmV0 dXJuKC0yKTsKKwl9CisjZW5kaWYJLyogQ0tGTE9BVCAqLworICAgICAgY2FzZSBJTl9USU06ICAg ICAgICAgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBUSU1FT1VULUFDVElPTiAqLworICAgICAg ICBpZiAoKHogPSBjbWtleShpbnRpbXQsMiwiIiwiIix4eHN0cmluZykpIDwgMCkgcmV0dXJuKHop OworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaW50 aW1lW2NtZGx2bF0gPSB6OworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgY2Fz ZSBJTl9DQVM6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBJTlBVVCBDQVNFICovCisgICAg ICAgIGlmICgoeiA9IGNta2V5KGluY2FzdCwyLCIiLCIiLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4o eik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICBp bnBjYXNbY21kbHZsXSA9IHo7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgICBj YXNlIElOX0VDSDogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIEVDSE8gKi8KKyAg ICAgICAgcmV0dXJuKHNldG9uKCZpbmVjaG8pKTsKKyAgICAgIGNhc2UgSU5fU0lMOiAgICAgICAg ICAgICAgICAgICAgICAvKiBTRVQgSU5QVVQgU0lMRU5DRSAqLworICAgICAgICB6ID0gY21udW0o IlNlY29uZHMgb2YgaW5hY3Rpdml0eSBiZWZvcmUgSU5QVVQgZmFpbHMiLCIiLDEwLCZ4LAorICAg ICAgICAgICAgICAgICAgeHhzdHJpbmcpOworICAgICAgICByZXR1cm4oc2V0bnVtKCZpbnNpbGVu Y2UseCx6LC0xKSk7CisKKyAgICAgIGNhc2UgSU5fQlVGOiAgICAgICAgICAgICAgICAgICAgICAv KiBTRVQgSU5QVVQgQlVGRkVSLVNJWkUgKi8KKyAgICAgICAgaWYgKCh6ID0gY21udW0oIk51bWJl ciBvZiBieXRlcyBpbiBJTlBVVCBidWZmZXIiLAorICAgICAgICAgICAgICAgICAgICAgICBja2l0 b2EoSU5QQlVGU0laKSwxMCwmeCwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHop OworICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApIHJldHVybih5KTsKKyAgICAgICAgaW5i dWZzaXplID0gMDsKKyAgICAgICAgaWYgKGlucGJ1ZikgeworICAgICAgICAgICAgZnJlZShpbnBi dWYpOworICAgICAgICAgICAgaW5wYnVmID0gTlVMTDsKKyAgICAgICAgICAgIGlucGJwID0gTlVM TDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShzID0gKGNoYXIgKiltYWxsb2MoeCArIDEpKSkK KyAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIGlucGJ1ZiA9IHM7CisgICAgICAgIGlucGJw ID0gczsKKyAgICAgICAgaW5idWZzaXplID0geDsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8PSBp bmJ1ZnNpemU7IHgrKykKKyAgICAgICAgICBpbnBidWZbeF0gPSBOVUw7CisgICAgICAgIHJldHVy bihzdWNjZXNzID0gMSk7CisKKyNpZmRlZiBDS19BVVRPREwKKyAgICAgIGNhc2UgSU5fQURMOiAg ICAgICAgICAgICAgICAgICAgICAvKiBBVVRPRE9XTkxPQUQgKi8KKyAgICAgICAgcmV0dXJuKHNl dG9uKCZpbmF1dG9kbCkpOworI2VuZGlmIC8qIENLX0FVVE9ETCAqLworCisgICAgICBjYXNlIElO X0NBTjogICAgICAgICAgICAgICAgICAgICAgLyogU0VUIElOUFVUIElOVEVSUlVQVFMgKi8KKyAg ICAgICAgcmV0dXJuKHNldG9uKCZpbmludHIpKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQor I2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBORVRDT05OCitWT0lECituZHJlc2V0KCkgewor I2lmbmRlZiBOT0RJQUwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgZGVwZW5kcyBv biBESUFMLi4uICovCisgICAgaW50IGk9MCwgaj0wOworICAgIGlmICghbmRpbml0ZWQpICAgICAg ICAgICAgICAgICAgICAgIC8qIERvbid0IGZyZWUgZ2FyYmFnZS4uLiAqLworICAgICAgcmV0dXJu OworICAgIGZvciAoaSA9IDA7IGkgPCBuaGNvdW50OyBpKyspIHsgICAgIC8qIENsZWFuIG91dCBw cmV2aW91cyBsaXN0ICovCisgICAgICAgIGlmIChuaF9wW2ldKQorICAgICAgICAgIGZyZWUobmhf cFtpXSk7CisgICAgICAgIG5oX3BbaV0gPSBOVUxMOworICAgICAgICBpZiAobmhfcDJbaV0pCisg ICAgICAgICAgZnJlZShuaF9wMltpXSk7CisgICAgICAgIG5oX3AyW2ldID0gTlVMTDsKKyAgICAg ICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgaWYgKG5oX3B4W2pdW2ld KQorICAgICAgICAgICAgICBmcmVlKG5oX3B4W2pdW2ldKTsKKyAgICAgICAgICAgIG5oX3B4W2pd W2ldID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT0RJQUwgKi8KK30KKwor Vk9JRAorbmRpbml0KCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ldCBkaXJl Y3RvcnkgcG9pbnRlcnMgKi8KKyNpZm5kZWYgTk9ESUFMICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBUaGlzIGRlcGVuZHMgb24gRElBTC4uLiAqLworICAgIGludCBpLCBqOworICAgIGlmIChu ZGluaXRlZCsrKSAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGRvIHRoaXMgbW9yZSB0aGFu IG9uY2UuICovCisgICAgICByZXR1cm47CisgICAgZm9yIChpID0gMDsgaSA8IE1BWERESVI7IGkr KykgeyAgICAgLyogSW5pdCBhbGwgcG9pbnRlcnMgdG8gTlVMTCAqLworICAgICAgICBuZXRkaXJb aV0gPSBOVUxMOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYRE5VTVM7IGkrKykgewor ICAgICAgICBuaF9wW2ldID0gTlVMTDsKKyAgICAgICAgbmhfcDJbaV0gPSBOVUxMOworICAgICAg ICBmb3IgKGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgIG5oX3B4W2pdW2ldID0gTlVMTDsK KyAgICB9CisjZW5kaWYgLyogTk9ESUFMICovCit9CisKKyNpZm5kZWYgTk9ESUFMCisjaWZkZWYg TkVUQ09OTgorVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBu ZXQgZGVmYXVsdHMgZnJvbSBlbnZpcm9ubWVudCAqLworZ2V0bmV0ZW52KCkgeworICAgIGNoYXIg KnAgPSBOVUxMOworCisgICAgbWFrZXN0cigmcCxnZXRlbnYoIktfTkVUX0RJUkVDVE9SWSIpKTsg LyogRGlhbGluZyBkaXJlY3RvcmllcyAqLworICAgIGlmIChwKSB7CisgICAgICAgIGludCBpOwor ICAgICAgICB4d29yZHMocCxNQVhERElSLG5ldGRpciwwKTsKKyAgICAgICAgZm9yIChpID0gMDsg aSA8IE1BWERESVI7IGkrKykgeyAvKiBGaWxsIGluIGFueSBnYXBzLi4uICovCisgICAgICAgICAg ICBpZiAoIW5ldGRpcltpKzFdKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgbmV0ZGlyW2ldID0gbmV0ZGlyW2krMV07CisgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJuZXRkaXJbaV0iLG5ldGRpcltpXSxpKTsKKyAgICAgICAgfQorICAgICAgICBu bmV0ZGlyID0gaTsKKyAgICB9Cit9CisjZW5kaWYgLyogTkVUQ09OTiAqLworI2VuZGlmIC8qIE5P RElBTCAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworbHVuZXQoY2hhciAqcykgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHMgPSBuYW1lIHRvIGxvb2sgdXAgICAqLworI2Vsc2UKK2x1bmV0 KHMpIGNoYXIgKnM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGx1bmV0ICovIHsKKyNpZm5k ZWYgTk9ESUFMICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGRlcGVuZHMgb24gRElB TC4uLiAqLworICAgIGludCBuLCBuMSwgdCwgZGQgPSAwOworICAgIGludCBhbWJpZ3VvdXMgPSAw OworICAgIEZJTEUgKiBmOworICAgIGNoYXIgKmxpbmUgPSBOVUxMOworICAgIGV4dGVybiBpbnQg ZGlhbGRweTsKKyAgICBpbnQgbmV0ZHB5ID0gZGlhbGRweTsKKyAgICBjaGFyICppbmZvWzhdOwor CisgICAgbmhjb3VudCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoaXMgYmVm b3JlIHJldHVybmluZyAqLworCisgICAgaWYgKCFzIHx8IG5uZXRkaXIgPCAxKSAgICAgICAgICAg ICAgLyogVmFsaWRhdGUgYXJndW1lbnRzICovCisgICAgICByZXR1cm4oLTEpOworCisgICAgaWYg KGlzZGlnaXQoKnMpIHx8ICpzID09ICcqJyB8fCAqcyA9PSAnLicpCisgICAgICByZXR1cm4oMCk7 CisKKyAgICBpZiAoKG4xID0gKGludCkgc3RybGVuKHMpKSA8IDEpICAgICAvKiBMZW5ndGggb2Yg c3RyaW5nIHRvIGxvb2sgdXAgKi8KKyAgICAgIHJldHVybigtMSk7CisKKyAgICBpZiAoIShsaW5l ID0gbWFsbG9jKDEwMjQpKSkgICAgICAgICAvKiBBbGxvY2F0ZSBpbnB1dCBidWZmZXIgKi8KKyAg ICAgIHJldHVybigtMSk7CisKKyAgbHVfYWdhaW46CisgICAgZiA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogTmV0d29yayBkaXJlY3RvcnkgZmlsZSBkZXNjcmlwdG9yICovCisg ICAgdCA9IG5oY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogTWF0Y2ggY291bnQgKi8K KyAgICBkZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXJlY3RvcnkgY291 bnRlciAqLworCisgICAgZGlybGluZSA9IDA7CisgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogV2UgbWFrZSBvbmUgcGFzcyAqLworICAgICAgICBpZiAoIWYpIHsgICAg ICAgICAgICAgICAgICAgICAgIC8qIERpcmVjdG9yeSBub3Qgb3BlbiAqLworICAgICAgICAgICAg aWYgKGRkID49IG5uZXRkaXIpICAgICAgICAgIC8qIE5vIGRpcmVjdG9yaWVzIGxlZnQ/ICovCisg ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogRG9uZS4gKi8KKyAgICAg ICAgICAgIGlmICgoZiA9IGZvcGVuKG5ldGRpcltkZF0sInIiKSkgPT0gTlVMTCkgeyAvKiBPcGVu IGl0ICovCisgICAgICAgICAgICAgICAgcGVycm9yKG5ldGRpcltkZF0pOyAgICAgLyogQ2FuJ3Qs IHByaW50IG1lc3NhZ2Ugc2F5aW5nIHdoeSAqLworICAgICAgICAgICAgICAgIGRkKys7CisgICAg ICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgLyogQnV0IGdvIG9uIHRvIG5leHQg b25lLiAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5ldGRweSkKKyAgICAgICAg ICAgICAgcHJpbnRmKCJPcGVuaW5nICVzLi4uXG4iLG5ldGRpcltkZF0pOworICAgICAgICAgICAg ZGQrKzsKKyAgICAgICAgfQorICAgICAgICBsaW5lWzBdID0gTlVMOworICAgICAgICBpZiAoZ2V0 bmN0KGxpbmUsMTAyMyxmLDEpIDwgMCkgeyAvKiBSZWFkIGEgbGluZSAqLworICAgICAgICAgICAg aWYgKGYpIHsgICAgICAgICAgICAgICAgICAgIC8qIGYgY2FuIGJlIGNsb2JiZXJlZCEgKi8KKyAg ICAgICAgICAgICAgICBmY2xvc2UoZik7ICAgICAgICAgICAgICAvKiBDbG9zZSB0aGUgZmlsZSAq LworICAgICAgICAgICAgICAgIGYgPSBOVUxMOyAgICAgICAgICAgICAgIC8qIEluZGljYXRlIG5l eHQgb25lIG5lZWRzIG9wZW5pbmcgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICB9CisgICAgICAgIGlmICghbGluZVswXSkgICAgICAgICAgICAgICAgICAg LyogRW1wdHkgbGluZSAqLworICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHh3b3Jkcyhs aW5lLDcsaW5mbywwKTsgICAgICAgICAgLyogUGFyc2UgaXQgKi8KKworICAgICAgICBpZiAoIWlu Zm9bMV0gfHwgIWluZm9bMl0gfHwgIWluZm9bM10pIC8qIFJlcXVpcmVkIGZpZWxkcyAqLworICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoKmluZm9bMV0gPT0gJzsnKSAgICAgICAgICAg IC8qIEZ1bGwtbGluZSBjb21tZW50ICovCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm ICgobiA9IChpbnQpIHN0cmxlbihpbmZvWzFdKSkgPCAxKSAvKiBMZW5ndGggb2YgbmFtZS10YWcg Ki8KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG4gPCBuMSkgICAgICAgICAgICAg ICAgICAgICAvKiBTZWFyY2ggbmFtZSBpcyBsb25nZXIgKi8KKyAgICAgICAgICBjb250aW51ZTsg ICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBwb3NzaWJseSBtYXRjaCAqLworICAgICAgICBp ZiAoYW1iaWd1b3VzICYmIG4gIT0gbjEpCisgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm IChja3N0cmNtcChzLGluZm9bMV0sbjEsMCkpICAgLyogQ29tcGFyZSB1c2luZyBsZW5ndGggb2Yg Ki8KKyAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAvKiBzZWFyY2ggc3Ry aW5nIHMuICovCisKKyAgICAgICAgLyogSGF2ZSBhIG1hdGNoICovCisKKyAgICAgICAgbWFrZXN0 cigmKG5oX3Bbbmhjb3VudF0pLCBpbmZvWzNdKTsgICAgLyogYWRkcmVzcyAqLworICAgICAgICBt YWtlc3RyKCYobmhfcDJbbmhjb3VudF0pLGluZm9bMl0pOyAgICAvKiBuZXQgdHlwZSAqLworICAg ICAgICBtYWtlc3RyKCYobmhfcHhbMF1bbmhjb3VudF0pLGluZm9bNF0pOyAvKiBuZXQtc3BlY2lm aWMgc3R1ZmYuLi4gKi8KKyAgICAgICAgbWFrZXN0cigmKG5oX3B4WzFdW25oY291bnRdKSxpbmZv WzVdKTsKKyAgICAgICAgbWFrZXN0cigmKG5oX3B4WzJdW25oY291bnRdKSxpbmZvWzZdKTsKKyAg ICAgICAgbWFrZXN0cigmKG5oX3B4WzNdW25oY291bnRdKSxpbmZvWzddKTsKKworICAgICAgICBu aGNvdW50Kys7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgbWF0Y2ggKi8KKyAg ICAgICAgaWYgKG5oY291bnQgPiBNQVhETlVNUykgeyAgICAgICAvKiBXYXRjaCBvdXQgZm9yIHRv byBtYW55ICovCisgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6ICVkIG1hdGNoZXMgZm91bmQs ICVkIG1heFxuIiwKKyAgICAgICAgICAgICAgICAgICBuaGNvdW50LAorICAgICAgICAgICAgICAg ICAgIE1BWEROVU1TCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIG5oY291bnQg PSBNQVhETlVNUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChu aGNvdW50ID09IDEpIHsgICAgICAgICAgICAgLyogRmlyc3Qgb25lIC0gc2F2ZSBlbnRyeSBuYW1l ICovCisgICAgICAgICAgICBpZiAobl9uYW1lKSB7ICAgICAgICAgICAgICAgLyogRnJlZSB0aGUg b25lIGZyb20gYmVmb3JlIGlmIGFueSAqLworICAgICAgICAgICAgICAgIGZyZWUobl9uYW1lKTsK KyAgICAgICAgICAgICAgICBuX25hbWUgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKCEobl9uYW1lID0gKGNoYXIgKiltYWxsb2MobiArIDEpKSkgeyAvKiBBbGxvY2F0ZSBu ZXcgc3RvcmFnZSAqLworICAgICAgICAgICAgICAgIHByaW50ZigiP21lbW9yeSBhbGxvY2F0aW9u IGVycm9yIC0gbHVuZXQ6M1xuIik7CisgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHsKKyAgICAg ICAgICAgICAgICAgICAgZnJlZShsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IE5V TEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5oY291bnQgPSAwOworICAg ICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ID0g bjsgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgaXRzIGxlbmd0aCAqLworICAgICAg ICAgICAgc3RyY3B5KG5fbmFtZSxpbmZvWzFdKTsgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgfSBl bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgb3Igc3Vic2VxdWVudCBvbmUg Ki8KKyAgICAgICAgICAgIGlmICgoaW50KSBzdHJsZW4oaW5mb1sxXSkgPT0gdCkgLyogTGVuZ3Ro cyBjb21wYXJlICovCisgICAgICAgICAgICAgIGlmICghY2tzdHJjbXAobl9uYW1lLGluZm9bMV0s dCwwKSkgLyogQ2FzZWxlc3MgY29tcGFyZSBPSyAqLworICAgICAgICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgICAgICAvKiBOYW1lIGdpdmVuIGJ5IHVzZXIgbWF0Y2hlcyBlbnRyaWVzIHdp dGggZGlmZmVyZW50IG5hbWVzICovCisKKyAgICAgICAgICAgIGlmIChhbWJpZ3VvdXMpICAgICAg ICAgICAgICAvKiBCZWVuIGhlcmUgYmVmb3JlICovCisgICAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgICAgICBhbWJpZ3VvdXMgPSAxOyAgICAgICAgICAgICAgLyogTm93IGFuIGV4YWN0IG1h dGNoIGlzIHJlcXVpcmVkICovCisgICAgICAgICAgICBuZHJlc2V0KCk7ICAgICAgICAgICAgICAg ICAgLyogQ2xlYXIgb3V0IHByZXZpb3VzIGxpc3QgKi8KKyAgICAgICAgICAgIGdvdG8gbHVfYWdh aW47ICAgICAgICAgICAgICAvKiBEbyBpdCBhbGwgb3ZlciBhZ2Fpbi4gKi8KKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAobGluZSkgeworICAgICAgICBmcmVlKGxpbmUpOworICAgICAgICBsaW5l ID0gTlVMTDsKKyAgICB9CisgICAgaWYgKG5oY291bnQgPT0gMCAmJiBhbWJpZ3VvdXMpCisgICAg ICBwcmludGYoIj9cIiVzXCIgLSBhbWJpZ3VvdXMgaW4gbmV0d29yayBkaXJlY3RvcnlcbiIscyk7 CisjZWxzZQorICAgIG5oY291bnQgPSAwOworI2VuZGlmIC8qIE5PRElBTCAqLworICAgIHJldHVy bihuaGNvdW50KTsKK30KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZm5kZWYgTk9MT0NBTAor LyogIEMgTCBTIEMgTyBOIE4gWCAgLS0gIENsb3NlIGNvbm5lY3Rpb24gICovCisKK2ludAorY2xz Y29ubngoYXNrKSBpbnQgYXNrOyB7CisgICAgaW50IHgsIHJjID0gMDsKKyNpZmRlZiBORVdGVFAK KyAgICBleHRlcm4gaW50IGZ0cGdldCwgZnRwaXNvcGVuKCk7CisgICAgaWYgKChmdHBnZXQgPT0g MSkgfHwgKChmdHBnZXQgPT0gMikgJiYgIWxvY2FsICYmIGZ0cGlzb3BlbigpKSkKKyAgICAgIHJl dHVybihzdWNjZXNzID0gZnRwYnllKCkpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgIGRlYnVn KEYxMDEsImNsc2Nvbm54IGxvY2FsIiwiIixsb2NhbCk7CisgICAgaWYgKGxvY2FsKSB7CisgICAg ICAgIHggPSBhc2sgPyBodXBvaygxKSA6IDE7ICAgICAgICAgLyogTWFrZSBzdXJlIGl0J3MgT0sg dG8gY2xvc2UgKi8KKyAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICByYyA9IC0xOworICAg ICAgICAgICAgZGVidWcoRjEwMSwiY2xzY29ubnggaHVwb2sgc2F5cyBubyIsIiIscmMpOworICAg ICAgICAgICAgcmV0dXJuKHJjKTsKKyAgICAgICAgfQorICAgICAgICB0dGZsdWkoKTsgICAgICAg ICAgICAgICAgICAgICAgIC8qIENsZWFyIGF3YXkgYnVmZmVyZWQgdXAganVuayAqLworI2lmbmRl ZiBOT0RJQUwKKyNpZmRlZiBPUzJPTkxZCisvKiBEb24ndCBoYW5ndXAgYSBsaW5lIHRoYXQgaXMg c2hhcmVkIHdpdGggdGhlIFNMSVAgb3IgUFBQIGRyaXZlciAqLworICAgICAgICBpZiAoIXR0c2xp cCAmJiAhdHRwcHApCisjZW5kaWYgLyogT1MyT05MWSAqLworICAgICAgICAgIG1kbWh1cCgpOwor I2VuZGlmIC8qIE5PRElBTCAqLworICAgICAgICBpZiAobmV0d29yayAmJiBtc2dmbGcpCisgICAg ICAgICAgcHJpbnRmKCIgQ2xvc2luZyBjb25uZWN0aW9uXG4iKTsKKyAgICAgICAgdHRjbG9zKDAp OyAgICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBvbGQgY29ubmVjdGlvbiwgaWYgYW55ICov CisgICAgICAgIHJjID0gMTsKKyAgICAgICAgeworICAgICAgICAgICAgZXh0ZXJuIGludCB3YXNj bG9zZWQsIHdoeWNsb3NlZDsKKyAgICAgICAgICAgIGlmICh3YXNjbG9zZWQpIHsKKyAgICAgICAg ICAgICAgICB3aHljbG9zZWQgPSBXQ19DTE9TOworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAg ICAgIGlmIChubWFjKSB7ICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKyAg ICAgICAgICAgICAgICAgICAgaW50IGs7ICAgICAgICAgICAgICAvKiBZZXMgKi8KKyAgICAgICAg ICAgICAgICAgICAgLyogcHJpbnRmKCJPTl9DTE9TRSBDTFNDT05OWFxuIik7ICovCisgICAgICAg ICAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGsgPSBtbG9v ayhtYWN0YWIsIm9uX2Nsb3NlIixubWFjKTsgIC8qIExvb2sgdGhpcyB1cCAqLworICAgICAgICAg ICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3Vu ZCwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2RvKGssY2tpdG9hKHdoeWNsb3Nl ZCksMCkgPiAtMSkgLyogc2V0IGl0IHVwLCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBw YXJzZXIoMSk7ICAgICAgICAgICAgICAgICAgICAvKiBhbmQgZXhlY3V0ZSBpdCAqLworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisg ICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfUkVNTzsKKyAgICAgICAgICAgICAgICB3YXNj bG9zZWQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2lmZGVmIFZNUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9yIG1heWJlICNpZm5kZWYgVU5JWD8gKi8K KyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIGRvIHRo aXMgaW4gVk1TIHRvICovCisgICAgICAgIHR0Y2xvcygwKTsgICAgICAgICAgICAgICAgICAgICAg LyogZnJlZSB0aGUgdHR5IGNoYW5uZWwgbnVtYmVyICovCisgICAgICAgIHJjID0gMTsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogb2J0YWluZWQgaW4gdHRvcGVuKCkgb3IgZWxzZSAqLworICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN1YnNlcXVlbnQgdHRvcGVu J3Mgd29uJ3Qgd29yayAqLworI2VuZGlmIC8qIFZNUyAqLworICAgIGRvbG9nZW5kKCk7CisgICAg aGF2ZWxpbmUgPSAwOworICAgIGlmIChtZG10eXAgPCAwKSB7ICAgICAgICAgICAgICAgICAgIC8q IFN3aXRjaGluZyBmcm9tIG5ldCB0byBhc3luYz8gKi8KKyAgICAgICAgaWYgKG1kbXNhdiA+IC0x KSAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIG1vZGVtIHR5cGUgZnJvbSBsYXN0ICovCisgICAg ICAgICAgbWRtdHlwID0gbWRtc2F2OyAgICAgICAgICAgICAgLyogU0VUIE1PREVNIGNvbW1hbmQs IGlmIGFueS4gKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIG1kbXR5cCA9IDA7CisgICAgICAg IG1kbXNhdiA9IC0xOworICAgIH0KKyAgICBpZiAobmV0d29yaykKKyAgICAgIG5ldHdvcmsgPSAw OworI2lmZGVmIE5FVENPTk4KKyAgICBpZiAob2xkcGxleCA+IC0xKSB7ICAgICAgICAgICAgICAg ICAvKiBSZXN0b3JlIHByZXZpb3VzIGR1cGxleCBzZXR0aW5nLiAqLworICAgICAgICBkdXBsZXgg PSBvbGRwbGV4OworICAgICAgICBvbGRwbGV4ID0gLTE7CisgICAgfQorI2VuZGlmIC8qIE5FVENP Tk4gKi8KKyNpZm5kZWYgTUFDCisgICAgY2tzdHJuY3B5KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7 ICAgLyogUmVzdG9yZSBkZWZhdWx0IGNvbW11bmljYXRpb24gKi8KKyNlbmRpZiAvKiBNQUMgKi8K KyAgICBsb2NhbCA9IGRmbG9jOyAgICAgICAgICAgICAgICAgICAgICAvKiBkZXZpY2UgYW5kIGxv Y2FsL3JlbW90ZSBzdGF0dXMgKi8KKyAgICBpZiAobG9jYWwpIHsKKyAgICAgICAgY3h0eXBlID0g Q1hUX0RJUkVDVDsgICAgICAgICAgICAvKiBTb21ldGhpbmcgcmVhc29uYWJsZSAqLworICAgICAg ICBzcGVlZCA9IHR0Z3NwZCgpOyAgICAgICAgICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBzcGVl ZCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGN4dHlwZSA9IENYVF9SRU1PVEU7CisgICAgICAg IHNwZWVkID0gLTFMOworICAgIH0KKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKHhyZWxpYWJsZSA+ IC0xICYmICFzZXRyZWxpYWJsZSkgeworICAgICAgICByZWxpYWJsZSA9IHhyZWxpYWJsZTsKKyAg ICAgICAgZGVidWcoRjEwMSwiY2xzY29ubnggcmVsaWFibGUgQSIsIiIscmVsaWFibGUpOworICAg IH0gZWxzZSBpZiAoIXNldHJlbGlhYmxlKSB7CisgICAgICAgIHJlbGlhYmxlID0gU0VUX0FVVE87 CisgICAgICAgIGRlYnVnKEYxMDEsImNsc2Nvbm54IHJlbGlhYmxlIEIiLCIiLHJlbGlhYmxlKTsK KyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgc2V0ZmxvdygpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogUmV2ZXJ0IGZsb3cgY29udHJvbCAqLworICAgIHJldHVybihyYyk7Cit9 CisKK2ludAorY2xza2Nvbm54KHgpIGludCB4OyB7ICAgICAgICAgICAgICAgICAgIC8qIENsb3Nl IEtlcm1pdCBjb25uZWN0aW9uIG9ubHkgKi8KKyAgICBpbnQgdCwgcmM7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiAobm90IEZUUCkgKi8KKyNpZmRlZiBORVdGVFAKKyAgICBleHRlcm4gaW50 IGZ0cGdldDsKKyAgICB0ID0gZnRwZ2V0OworICAgIGZ0cGdldCA9IDA7CisjZW5kaWYgLyogTkVX RlRQICovCisgICAgcmMgPSBjbHNjb25ueCh4KTsKKyNpZmRlZiBORVdGVFAKKyAgICBmdHBnZXQg PSB0OworI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgIHJldHVybihyYyk7Cit9CisKKy8qIE1heSAy MDAyOiBzZXRsaW4oKSBkZWNvbXBvc2l0aW9uIHN0YXJ0cyBoZXJlIC4uLiAqLworCisjaWZkZWYg T1MyCisjZGVmaW5lIFNSVkJVRlNJWiBQSVBFTkFNTAorI2Vsc2UgLyogT1MyICovCisjZGVmaW5l IFNSVkJVRlNJWiA2MworI2VuZGlmIC8qIE9TMiAqLworI2RlZmluZSBIT1NUTkFNTEVOIDE1KjY1 CisKK2ludCBuZXRzYXZlID0gLTE7CitzdGF0aWMgY2hhciAqIHRtcHN0cmluZyA9IE5VTEw7Citz dGF0aWMgY2hhciAqIHRtcHVzcmlkID0gTlVMTDsKKworI2lmZGVmIFNTSENNRAorY2hhciAqIHNz aGNtZCA9IE5VTEw7CitjaGFyICogZGVmc3NoY21kID0gInNzaCAtZSBub25lIjsKKyNlbHNlCisj aWZkZWYgU1NIQlVJTFRJTgorY2hhciAqIHNzaHJjbWQgPSBOVUxMOworY2hhciAqIHNzaHRtcGNt ZCA9IE5VTEw7CisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworI2VuZGlmIC8qIFNTSENNRCAqLwor CisvKiBjIHggXyBmIGEgaSBsICAtLSAgQ29tbW9uIGVycm9yIGV4aXQgcm91dGluZSBmb3IgY3hf bmV0LCBjeF9saW5lICovCisKK2ludAorY3hfZmFpbChtc2csIHRleHQpIGludCBtc2c7IGNoYXIg KiB0ZXh0OyB7CisgICAgbWFrZXN0cigmc2xtc2csdGV4dCk7CQkvKiBGb3IgdGhlIHJlY29yZCAo b3IgR1VJKSAqLworICAgIGlmIChtc2cpCQkJCS8qIE5vdCBHVUksIG5vdCBxdWlldCwgZXRjICov CisgICAgICBwcmludGYoIj8lc1xuIix0ZXh0KTsJCS8qIFByaW50IGVycm9yIG1lc3NhZ2UgKi8K KyAgICBzbHJlc3RvcigpOwkJCQkvKiBSZXN0b3JlIExJTkUvSE9TVCB0byBrbm93biBzdGF0ZSAq LworICAgIHJldHVybihtc2cgPyAtOSA6IChzdWNjZXNzID0gMCkpOwkvKiBSZXR1cm4gYXBwcm9w cmlhdGUgY29kZSAqLworfQorCisjaWZkZWYgTkVUQ09OTgorLyogYyB4IF8gbiBlIHQgIC0tICBN YWtlIGEgbmV0d29yayBjb25uZWN0aW9uICovCisKKy8qCisgIENhbGwgd2l0aDoKKyAgICBuZXQg ICAgICA9IG5ldHdvcmsgdHlwZQorICAgIHByb3RvY29sID0gcHJvdG9jb2wgdHlwZQorICAgIGhv c3QgICAgID0gc3RyaW5nIHBvaW50ZXIgdG8gaG9zdCBuYW1lLgorICAgIHN2YyAgICAgID0gc3Ry aW5nIHBvaW50ZXIgdG8gc2VydmljZSBvciBwb3J0IG9uIGhvc3QuCisgICAgdXNlcm5hbWUgPSB1 c2VybmFtZSBmb3IgY29ubmVjdGlvbgorICAgIHBhc3N3b3JkID0gcGFzc3dvcmQgZm9yIGNvbm5l Y3Rpb24KKyAgICBjb21tYW5kICA9IGNvbW1hbmQgdG8gZXhlY3V0ZQorICAgIHBhcmFtMSAgID0g VGVsbmV0OiBBdXRoZW50aWNhdGlvbiB0eXBlCisgICAgICAgICAgICAgICBTU0g6ICAgIFZlcnNp b24KKyAgICBwYXJhbTIgICA9IFRlbG5ldDogRW5jcnlwdGlvbiB0eXBlCisgICAgICAgICAgICAg ICBTU0g6ICAgIENvbW1hbmQgYXMgU3Vic3lzdGVtCisgICAgcGFyYW0zICAgPSBUZWxuZXQ6IDEg dG8gd2FpdCBmb3IgbmVnb3RpYXRpb25zLCAwIG90aGVyd2lzZQorICAgICAgICAgICAgICAgU1NI OiAgICBYMTEgRm9yd2FyZGluZworICAgIGN4ICAgICAgID0gMSB0byBhdXRvbWF0aWNhbGx5IGVu dGVyIENvbm5lY3QgbW9kZSwgMCBvdGhlcndpc2UuCisgICAgc3ggICAgICAgPSAxIHRvIGF1dG9t YXRpY2FsbHkgZW50ZXIgU2VydmVyIG1vZGUsIDAgb3RoZXJ3aXNlLgorICAgIGZsYWcgICAgID0g aWYgbm8gaG9zdCBuYW1lIGdpdmVuLCAxID0gY2xvc2UgY3VycmVudCBjb25uZWN0aW9uLCAwID0g cmVzdW1lCisgICAgZ3VpICAgICAgPSAxIGlmIGNhbGxlZCBmcm9tIEdVSSBkaWFsb2csIDAgb3Ro ZXJ3aXNlLgorICBSZXR1cm5zOgorICAgIDEgb24gc3VjY2VzcworICAgIDAgb24gZmFpbHVyZSBh bmQgbm8gbWVzc2FnZSBwcmludGVkLCBzbG1zZyBzZXQgdG8gZmFpbHVyZSBtZXNzYWdlLgorICAg LTkgb24gZmFpbHVyZSBhbmQgbWVzc2FnZSBwcmludGVkLCBkaXR0by4KKyovCitpbnQKKyNpZmRl ZiBDS19BTlNJQworY3hfbmV0KCBpbnQgbmV0LCBpbnQgcHJvdG9jb2wsIGNoYXIgKiB4aG9zdCwg Y2hhciAqIHN2YywgCisgICAgICAgIGNoYXIgKiB1c2VybmFtZSwgY2hhciAqIHBhc3N3b3JkLCBj aGFyICogY29tbWFuZCwKKyAgICAgICAgaW50IHBhcmFtMSwgaW50IHBhcmFtMiwgaW50IHBhcmFt MywgaW50IGN4LCBpbnQgc3gsIGludCBmbGFnLCBpbnQgZ3VpKQorI2Vsc2UgLyogQ0tfQU5TSUMg Ki8KK2N4X25ldChuZXQsIHByb3RvY29sLCB4aG9zdCwgc3ZjLAorICAgICAgIHVzZXJuYW1lLCBw YXNzd29yZCwgY29tbWFuZCwKKyAgICAgICBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBjeCwgc3gs IGZsYWcsIGd1aSkKKyAgICBjaGFyICogeGhvc3QsICogc3ZjLCAqIHVzZXJuYW1lLCAqcGFzc3dv cmQsICpjb21tYW5kOyAKKyAgICBpbnQgbmV0LCBwcm90b2NvbCwgY3gsIHN4LCBmbGFnLCBwYXJh bTEsIHBhcmFtMiwgcGFyYW0zLCBndWk7IAorI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBjeF9u ZXQgKi8geworCisgICAgaW50IGksIG4sIHgsIG1zZzsKKyAgICBpbnQgX2xvY2FsID0gLTE7CisK KyAgICBleHRlcm4gY2hhciBwd2J1ZltdLCAqIGdfcHN3ZDsKKyAgICBleHRlcm4gaW50IHB3Zmxn LCBwd2NyeXB0LCBnX3BmbGcsIGdfcGNwdCwgbm9sb2NhbDsKKworICAgIGNoYXIgc3J2YnVmW1NS VkJVRlNJWisxXTsJCS8qIFNlcnZpY2UgKi8KKyAgICBjaGFyIGhvc3RidWZbSE9TVE5BTUxFTl07 CQkvKiBIb3N0IGJ1ZmZlciB0byBtYW5pcHVsYXRlICovCisgICAgY2hhciBob3N0bmFtZVtIT1NU TkFNTEVOXTsJCS8qIENvcHkgb2YgaG9zdCBwYXJhbWV0ZXIgKi8KKyAgICBjaGFyICogaG9zdCA9 IGhvc3RidWY7CQkvKiBQb2ludGVyIHRvIGNvcHkgb2YgaG9zdCBwYXJhbSAqLworCisgICAgaWYg KCF4aG9zdCkgeGhvc3QgPSAiIjsJCS8qIFdhdGNoIG91dCBmb3IgbnVsbCBwb2ludGVycyAqLwor ICAgIGlmICghc3ZjKSBzdmMgPSAiIjsKKyAgICBja3N0cm5jcHkoaG9zdCx4aG9zdCxIT1NUTkFN TEVOKTsJLyogQXZvaWQgYnVmZmVyIGNvbmZ1c2lvbiAqLworCisgICAgZGVidWcoRjExMCwiY3hf bmV0IGhvc3QiLGhvc3QsMCk7CisgICAgZGVidWcoRjExMSwiY3hfbmV0IHNlcnZpY2UiLHN2YyxT UlZCVUZTSVopOworICAgIGRlYnVnKEYxMDEsImN4X25ldCBuZXR3b3JrIHR5cGUiLCIiLG5ldCk7 CisKKyAgICBtc2cgPSAoZ3VpID09IDApICYmIG1zZ2ZsZzsJCS8qIFdoZXRoZXIgdG8gcHJpbnQg bWVzc2FnZXMgKi8KKworI2lmbmRlZiBOT0RJQUwKKyAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQgbm5l dGRpciIsIiIsbm5ldGRpcik7CisgICAgeCA9IDA7CQkJCS8qIExvb2sgdXAgaW4gbmV0d29yayBk aXJlY3RvcnkgKi8KKyAgICBpZiAoKmhvc3QgPT0gJz0nKSB7CQkJLyogSWYgbnVtYmVyIHN0YXJ0 cyB3aXRoID0gc2lnbiAqLworCWhvc3QrKzsJCQkJLyogc3RyaXAgaXQgKi8KKwl3aGlsZSAoKmhv c3QgPT0gU1ApIGhvc3QrKzsJLyogYW5kIGFueSBsZWFkaW5nIHNwYWNlcyAqLworCWRlYnVnKEYx MTAsImN4X25ldCBob3N0IDIiLGhvc3QsMCk7CisJbmhjb3VudCA9IDA7CisgICAgfSBlbHNlIGlm ICgqaG9zdCkgewkJCS8qIFdlIHdhbnQgdG8gbG9vayBpdCB1cC4gKi8KKwlpZiAobm5ldGRpciA+ IDApCQkvKiBJZiB0aGVyZSBpcyBhIGRpcmVjdG9yeS4uLiAqLworCSAgeCA9IGx1bmV0KGhvc3Qp OwkJLyogKHNldHMgbmhjb3VudCkgKi8KKwllbHNlCQkJCS8qIG90aGVyd2lzZSAqLworCSAgbmhj b3VudCA9IDA7CQkJLyogd2UgZGlkbid0IGZpbmQgYW55IHRoZXJlICovCisJaWYgKHggPCAwKQkJ CS8qIEludGVybmFsIGVycm9yPyAqLworCSAgcmV0dXJuKGN4X2ZhaWwobXNnLCJOZXR3b3JrIGRp cmVjdG9yeSBsb29rdXAgZXJyb3IiKSk7CisJZGVidWcoRjExMSwiY3hfbmV0IGx1bmV0IG5oY291 bnQiLGhvc3Qsbmhjb3VudCk7CisgICAgfQorI2VuZGlmIC8qIE5PRElBTCAqLworCisgICAgLyog TmV3IGNvbm5lY3Rpb24gd2FudGVkLiAgTWFrZSBhIGNvcHkgb2YgdGhlIGhvc3QgbmFtZS9hZGRy ZXNzLi4uICovCisKKyAgICBpZiAoY2xza2Nvbm54KDEpIDwgMCkJCS8qIENsb3NlIGN1cnJlbnQg S2VybWl0IGNvbm5lY3Rpb24gKi8KKyAgICAgIHJldHVybihjeF9mYWlsKG1zZywiRXJyb3IgY2xv c2luZyBwcmV2aW91cyBjb25uZWN0aW9uIikpOworCisgICAgaWYgKCpob3N0KSB7CQkJLyogVGhl eSBnYXZlIGEgaG9zdG5hbWUgKi8KKwlfbG9jYWwgPSAxOwkJCS8qIE5ldHdvcmsgY29ubmVjdGlv biBhbHdheXMgbG9jYWwgKi8KKwlpZiAobWRtc2F2IDwgMCkKKwkgIG1kbXNhdiA9IG1kbXR5cDsJ CS8qIFJlbWVtYmVyIG9sZCBtb2RlbSB0eXBlICovCisJbWRtdHlwID0gLW5ldDsJCQkvKiBTcGVj aWFsIGNvZGUgZm9yIG5ldHdvcmsgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBUaGV5IGp1c3Qgc2Fp ZCAic2V0IGhvc3QiICovCisJaG9zdCA9IGRmdHR5OwkJCS8qIFNvIGdvIGJhY2sgdG8gbm9ybWFs ICovCisJX2xvY2FsID0gZGZsb2M7CQkJLyogZGVmYXVsdCB0dHksIGxvY2F0aW9uLCAqLworCWlm IChmbGFnKSB7CQkJLyogQ2xvc2UgY3VycmVudCBjb25uZWN0aW9uICovCisJICAgIHNldGZsb3co KTsJCQkvKiBNYXliZSBjaGFuZ2UgZmxvdyBjb250cm9sICovCisJICAgIGhhdmVsaW5lID0gMTsJ CS8qICgqIGlzIHRoaXMgcmlnaHQ/ICopICovCisJICAgIGRvbG9nZW5kKCk7CisjaWZuZGVmIE5P RElBTAorCSAgICBkaWFsc3RhID0gRElBX1VOSzsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZmRl ZiBMT0NVUworCSAgICBpZiAoYXV0b2xvY3VzKSB7CisJCXNldGxvY3VzKDEsMSk7CisJICAgIH0K KyNlbmRpZiAvKiBMT0NVUyAqLworICAgICAgICAgICAgLyogWFhYIC0gSXMgdGhpcyByaWdodD8g Ki8KKwkgICAgLyogU2hvdWxkIHdlIGJlIHJldHVybmluZyB3aXRob3V0IGRvaW5nIGFueXRoaW5n ID8gKi8KKwkgICAgLyogWWVzIGl0J3MgcmlnaHQgLS0gd2UgY2xvc2VkIHRoZSBvbGQgY29ubmVj dGlvbiBqdXN0IGFib3ZlLiAqLworCSAgICByZXR1cm4oc3VjY2VzcyA9IDEpOyAgICAgICAgCisJ fQorICAgIH0KKyAgICBzdWNjZXNzID0gMDsKKyAgICBpZiAoaG9zdCAhPSBsaW5lKSAgICAgICAg ICAgICAgICAgICAvKiBsaW5lW10gaXMgYSBnbG9iYWwgKi8KKyAgICAgIGNrc3RybmNweShsaW5l LGhvc3QsTElOQlVGU0laKTsKKyAgICBja3N0cm5jcHkoaG9zdG5hbWUsaG9zdCxIT1NUTkFNTEVO KTsKKyAgICBja3N0cm5jcHkoc3J2YnVmLHN2YyxTUlZCVUZTSVorMSk7CisKKyNpZm5kZWYgTk9E SUFMCisgICAgaWYgKChuaGNvdW50ID4gMSkgJiYgbXNnKSB7CisJaW50IGs7CisJcHJpbnRmKCIl ZCBlbnRyJXMgZm91bmQgZm9yIFwiJXNcIiVzXG4iLAorCSAgICAgICBuaGNvdW50LAorCSAgICAg ICAobmhjb3VudCA9PSAxKSA/ICJ5IiA6ICJpZXMiLAorCSAgICAgICBzLAorCSAgICAgICAobmhj b3VudCA+IDApID8gIjoiIDogIi4iCisJICAgICAgICk7CisJZm9yIChpID0gMDsgaSA8IG5oY291 bnQ7IGkrKykgeworCQlwcmludGYoIiUzZC4gJS0xMnMgPT4gJS05cyAlcyIsCisJCSAgICAgICBp KzEsbl9uYW1lLG5oX3AyW2ldLG5oX3BbaV0pOworCSAgICBmb3IgKGsgPSAwOyBrIDwgNDsgaysr KSB7IC8qIEFsc28gbGlzdCBuZXQtc3BlY2lmaWMgaXRlbXMgKi8KKwkJaWYgKG5oX3B4W2tdW2ld KSAgICAgIC8qIGZyZWUgZm9ybWF0Li4uICovCisJCSAgcHJpbnRmKCIgJXMiLG5oX3B4W2tdW2ld KTsKKwkJZWxzZQorCQkgIGJyZWFrOworCSAgICB9CisJICAgIHByaW50ZigiXG4iKTsKKwl9Cisg ICAgfQorICAgIGlmIChuaGNvdW50ID09IDApCisgICAgICBuID0gMTsKKyAgICBlbHNlCisgICAg ICBuID0gbmhjb3VudDsKKyNlbHNlCisgICAgbiA9IDE7CisgICAgbmhjb3VudCA9IDA7CisjZW5k aWYgLyogTk9ESUFMICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CQkvKiBMb29w IGZvciBlYWNoIGVudHJ5IGZvdW5kICovCisJZGVidWcoRjEwMSwiY3hfbmV0IGxvb3AgaSIsIiIs aSk7CisjaWZuZGVmIE5PRElBTAorCWlmIChuaGNvdW50ID4gMCkgewkJLyogSWYgd2UgZm91bmQg YXQgbGVhc3Qgb25lIGVudHJ5Li4uICovCisJICAgIGNrc3RybmNweShsaW5lLG5oX3BbaV0sTElO QlVGU0laKTsgLyogQ29weSBjdXJyZW50IGVudHJ5ICovCisJICAgIGlmIChsb29rdXAobmV0Y21k LG5oX3AyW2ldLG5uZXRzLCZ4KSA+IC0xKSB7IC8qIE5ldCB0eXBlICovCisJCWludCB4eDsKKwkJ eHggPSBuZXRjbWRbeF0ua3d2YWw7CisJCS8qIFVzZXIgc3BlY2lmaWVkIFNTSCBzbyBkb24ndCBs ZXQgbmV0IGRpcmVjdG9yeSBvdmVycmlkZSAqLworCQlpZiAobmV0ICE9IE5FVF9TU0ggfHwgeHgg IT0gTkVUX1RDUEIpIHsKKwkJICAgIG5ldCA9IHh4OworCQkgICAgbWRtdHlwICA9IDAgLSBuZXQ7 CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJbWFrZXN0cigmc2xtc2csIk5ldHdvcmsgdHlwZSBub3Qg c3VwcG9ydGVkIik7CisJCWlmIChtc2cpCisJCSAgcHJpbnRmKCJFcnJvciAtIG5ldHdvcmsgdHlw ZSBcIiVzXCIgbm90IHN1cHBvcnRlZFxuIiwKKwkJCSBuaF9wMltpXQorCQkgICAgICAgICApOwor CQljb250aW51ZTsKKwkgICAgfQorCSAgICBzd2l0Y2ggKG5ldCkgewkJLyogTmV0LXNwZWNpZmlj IGRpcmVjdG9yeSB0aGluZ3MgKi8KKyNpZmRlZiBTU0hCVUlMVElOCisJICAgICAgY2FzZSBORVRf U1NIOgkJLyogU1NIICovCisgICAgICAgICAgICAgICAgLyogQW55IFNTSCBzcGVjaWZpYyBuZXR3 b3JrIGRpcmVjdG9yeSBzdHVmZj8gKi8KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg ICAgICAgICAvKiBORVRfU1NIICovCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisJICAgICAg Y2FzZSBORVRfVENQQjogewkJLyogVENQL0lQIFRFTE5FVCxSTE9HSU4sLi4uICovCisjaWZkZWYg VENQU09DS0VUCisJCSAgY2hhciAqcTsKKwkJICBpbnQgZmxhZyA9IDA7CisKKwkJICAvKiBFeHRy YWN0ICI6c2VydmljZSIsIGlmIGFueSwgZnJvbSBob3N0IHN0cmluZyAqLworCQkgIGRlYnVnKEYx MTAsImN4X25ldCBzZXJ2aWNlIDEiLGxpbmUsMCk7CisJCSAgZm9yIChxID0gbGluZTsgKCpxICE9 ICdcMCcpICYmICgqcSAhPSAnOicpOyBxKyspCisJCSAgICA7CisJCSAgaWYgKCpxID09ICc6Jykg eyAqcSsrID0gTlVMOyBmbGFnID0gMTsgfQorCQkgIGRlYnVnKEYxMTEsImN4X25ldCBzZXJ2aWNl IDIiLGxpbmUsZmxhZyk7CisKKwkJICAvKiBHZXQgc2VydmljZSwgaWYgYW55LCBmcm9tIGRpcmVj dG9yeSBlbnRyeSAqLworCisJCSAgaWYgKCEqc3J2YnVmKSB7CisJCSAgICAgIGlmIChuaF9weFsw XVtpXSkgeworCQkJICBja3N0cm5jcHkoc3J2YnVmLG5oX3B4WzBdW2ldLFNSVkJVRlNJWik7CisJ CQkgIGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDMiLHNydmJ1ZiwwKTsKKwkJICAgICAgfQor CQkgICAgICBpZiAoZmxhZykgeworCQkJICBja3N0cm5jcHkoc3J2YnVmLHEsU1JWQlVGU0laKTsK KwkJCSAgZGVidWcoRjExMCwiY3hfbmV0IHNlcnZpY2UgNCIsc3J2YnVmLDApOworCQkgICAgICB9 CisJCSAgfQorCQkgIGNrc3RybmNweShob3N0bmFtZSxsaW5lLEhPU1ROQU1MRU4pOworCisJCSAg LyogSWYgd2UgaGF2ZSBhIHNlcnZpY2UsIGFwcGVuZCB0byBob3N0IG5hbWUvYWRkcmVzcyAqLwor CQkgIGlmICgqc3J2YnVmKSB7CisJCSAgICAgIGNrc3RybmNhdChsaW5lLCAiOiIsIExJTkJVRlNJ Wik7CisJCSAgICAgIGNrc3RybmNhdChsaW5lLCBzcnZidWYsIExJTkJVRlNJWik7CisJCSAgICAg IGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDUiLGxpbmUsMCk7CisJCSAgfQorI2lmZGVmIFJM T0dDT0RFCisJCSAgLyogSWYgbm8gc2VydmljZSBnaXZlbiBidXQgY29tbWFuZCB3YXMgUkxPR0lO ICovCisJCSAgZWxzZSBpZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOKSB7IC8qIGFkZCB0aGlzLi4u ICovCisJCSAgICAgIGNrc3RybmNhdChsaW5lLCAiOmxvZ2luIixMSU5CVUZTSVopOworCQkgICAg ICBkZWJ1ZyhGMTEwLCJjeF9uZXQgc2VydmljZSA2IixsaW5lLDApOworCQkgIH0KKyNpZmRlZiBD S19BVVRIRU5USUNBVElPTgorI2lmZGVmIENLX0tFUkJFUk9TCisJCSAgZWxzZSBpZiAodHRucHJv dG8gPT0gTlBfSzRMT0dJTiB8fAorCQkJICAgdHRucHJvdG8gPT0gTlBfSzVMT0dJTikgeyAvKiBh ZGQgdGhpcy4uLiAqLworCQkgICAgICBja3N0cm5jYXQobGluZSwgIjprbG9naW4iLExJTkJVRlNJ Wik7CisJCSAgICAgIGRlYnVnKEYxMTAsImN4X25ldCBzZXJ2aWNlIDciLGxpbmUsMCk7CisJCSAg fQorCQkgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8CisJCQkgICB0dG5wcm90 byA9PSBOUF9FSzVMT0dJTikgeyAvKiBhZGQgdGhpcy4uLiAqLworCQkgICAgICBja3N0cm5jYXQo bGluZSwgIjpla2xvZ2luIixMSU5CVUZTSVopOworCQkgICAgICBkZWJ1ZyhGMTEwLCJjeF9uZXQg c2VydmljZSA4IixsaW5lLDApOworCQkgIH0KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2Vu ZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisjZW5kaWYgLyogUkxPR0NPREUgKi8KKwkJICBl bHNlIHsJCS8qIE90aGVyd2lzZSwgYWRkICI6dGVsbmV0Ii4gKi8KKwkJICAgICAgY2tzdHJuY2F0 KGxpbmUsICI6dGVsbmV0IiwgTElOQlVGU0laKTsKKwkJICAgICAgZGVidWcoRjExMCwiY3hfbmV0 IHNlcnZpY2UgOSIsbGluZSwwKTsKKwkJICB9CisJCSAgaWYgKHVzZXJuYW1lKSB7CS8qIFRoaXMg aXMgYSBwYXJhbWV0ZXIuLi4gKi8KKwkJICAgICAgY2tzdHJuY3B5KHVpZGJ1Zix1c2VybmFtZSxV SURCVUZMRU4pOworCQkgICAgICB1aWRmbGFnID0gMTsKKwkJICB9CisJCSAgLyogRmlmdGggZmll bGQsIGlmIGFueSwgaXMgdXNlciBJRCAoZm9yIHJsb2dpbikgKi8KKworCQkgIGlmIChuaF9weFsx XVtpXSAmJiAhdWlkZmxhZykKKwkJICAgIGNrc3RybmNweSh1aWRidWYsdXNlcm5hbWUsVUlEQlVG TEVOKTsKKyNpZmRlZiBSTE9HQ09ERQorCQkgIGlmIChJU19STE9HSU4oKSAmJiAhdWlkYnVmWzBd KQorCQkgICAgcmV0dXJuKGN4X2ZhaWwobXNnLCJVc2VybmFtZSByZXF1aXJlZCIpKTsKKyNlbmRp ZiAvKiBSTE9HQ09ERSAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCQkgIGJyZWFrOworCSAg ICAgIH0KKwkgICAgICBjYXNlIE5FVF9QSVBFOgkJLyogUGlwZSAqLworI2lmZGVmIE5QSVBFCisJ CWlmICghcGlwZW5hbWVbMF0pIHsgLyogVXNlciBkaWRuJ3QgZ2l2ZSBhIHBpcGVuYW1lICovCisJ CSAgICBpZiAobmhfcHhbMF1baV0pIHsgLyogQnV0IGRpcmVjdG9yeSBlbnRyeSBoYXMgb25lICov CisJCQlpZiAoc3RyY21wKHBpcGVuYW1lLCJcXHBpcGVcXCIpKSB7CisJCQkgICAgY2tzdHJuY3B5 KHBpcGVuYW1lLCJcXHBpcGVcXCIsTElOQlVGU0laKTsKKwkJCSAgICBja3N0cm5jYXQoc3J2YnVm LG5oX3B4WzBdW2ldLFBJUEVOQU1MLTYpOworCQkJfSBlbHNlIHsKKwkJCSAgICBja3N0cm5jcHko cGlwZW5hbWUsbmhfcHhbMF1baV0sUElQRU5BTUwpOworCQkJfQorCQkJZGVidWcoRjExMCwiY3hf bmV0IHBpcGVuZW1lIixwaXBlbmFtZSwwKTsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIE5QSVBF ICovCisJCWJyZWFrOworCisJICAgICAgY2FzZSBORVRfU0xBVDogICAgICAgICAgICAvKiBMQVQg LyBDVEVSTSAqLworI2lmZGVmIFNVUEVSTEFUCisJCWlmICghc2xhdF9wd2RbMF0pIHsgLyogVXNl ciBkaWRuJ3QgZ2l2ZSBhIHBhc3N3b3JkICovCisJCSAgICBpZiAobmhfcHhbMF1baV0pIHsgLyog QnV0IGRpcmVjdG9yeSBlbnRyeSBoYXMgb25lICovCisJCQlja3N0cm5jcHkoc2xhdF9wd2Qsbmhf cHhbMF1baV0sMTgpOworCQkJZGVidWcoRjExMCwiY3hfbmV0IFN1cGVyTEFUIHBhc3N3b3JkIixz bGF0X3B3ZCwwKTsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIFNVUEVSTEFUICovCisJCWJyZWFr OworCisJICAgICAgY2FzZSBORVRfU1gyNTogICAgICAgIC8qIFguMjUga2V5d29yZCBwYXJhbWV0 ZXJzICovCisJICAgICAgY2FzZSBORVRfSVgyNToKKwkgICAgICBjYXNlIE5FVF9WWDI1OiB7Cisj aWZkZWYgQU5ZWDI1CisJCSAgaW50IGs7ICAgICAgICAgICAgLyogQ3ljbGUgdGhyb3VnaCB0aGUg Zm91ciBmaWVsZHMgKi8KKwkJICBmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7CisJCSAgICAgIGlm ICghbmhfcHhba11baV0pIC8qIEJhaWwgb3V0IGlmIG5vbmUgbGVmdCAqLworCQkJYnJlYWs7CisJ CSAgICAgIGlmICghY2tzdHJjbXAobmhfcHhba11baV0sImN1Zz0iLDQsMCkpIHsKKwkJCSAgY2xv c2dyID0gYXRvaShuaF9weFtrXVtpXSs0KTsKKwkJCSAgZGVidWcoRjEwMSwiWDI1IENVRyIsIiIs Y2xvc2dyKTsKKwkJICAgICAgfSBlbHNlIGlmICghY2tzdHJjbXAobmhfcHhba11baV0sImN1ZD0i LDQsMCkpIHsKKwkJCSAgY3VkYXRhID0gMTsKKwkJCSAgY2tzdHJuY3B5KHVkYXRhLG5oX3B4W2td W2ldKzQsTUFYQ1VEQVRBKTsKKwkJCSAgZGVidWcoRjExMCwiWDI1IENVRCIsY3VkYXRhLDApOwor CQkgICAgICB9IGVsc2UgaWYgKCFja3N0cmNtcChuaF9weFtrXVtpXSwicmV2PSIsNCwwKSkgewor CQkJICByZXZjYWxsID0gIWNrc3RyY21wKG5oX3B4W2tdW2ldKzQsIj1vbiIsMywwKTsKKwkJCSAg ZGVidWcoRjEwMSwiWDI1IFJFViIsIiIscmV2Y2FsbCk7CisjaWZuZGVmIElCTVgyNQorCQkgICAg ICB9IGVsc2UgaWYgKCFja3N0cmNtcChuaF9weFtrXVtpXSwicGFkPSIsNCwwKSkgeworCQkJICBp bnQgeDNwYXIsIHgzdmFsOworCQkJICBjaGFyICpzMSwgKnMyOworCQkJICBzMSA9IHMyID0gbmhf cHhba11baV0rNDsgLyogUEFEIHBhcmFtZXRlcnMgKi8KKwkJCSAgd2hpbGUgKCpzMikgeyAgICAg ICAgICAgIC8qIFBpY2sgdGhlbSBhcGFydCAqLworCQkJICAgICAgaWYgKCpzMiA9PSAnOicpIHsK KwkJCQkgICpzMiA9IE5VTDsKKwkJCQkgIHgzcGFyID0gYXRvaShzMSk7CisJCQkJICBzMSA9ICsr czI7CisJCQkJICBjb250aW51ZTsKKwkJCSAgICAgIH0gZWxzZSBpZiAoKnMyID09ICcsJykgewor CQkJCSAgKnMyID0gTlVMOworCQkJCSAgeDN2YWwgPSBhdG9pKHMxKTsKKwkJCQkgIHMxID0gKytz MjsKKwkJCQkgIGRlYnVnKEYxMTEsIlgyNSBQQUQiLHgzcGFyLHgzdmFsKTsKKwkJCQkgIGlmICh4 M3BhciA+IC0xICYmCisJCQkJICAgICAgeDNwYXIgPD0gTUFYUEFEUEFSTVMpCisJCQkJICAgIHBh ZHBhcm1zW3gzcGFyXSA9IHgzdmFsOworCQkJCSAgY29udGludWU7CisJCQkgICAgICB9IGVsc2UK KwkJCQlzMisrOworCQkJICB9CisjZW5kaWYgLyogSUJNWDI1ICovCisJCSAgICAgIH0KKwkJICB9 CisjZW5kaWYgLyogQU5ZWDI1ICovCisJCSAgYnJlYWs7CisJICAgICAgfQorCSAgICAgIGRlZmF1 bHQ6CQkJLyogTm90aGluZyBzcGVjaWFsIGZvciBvdGhlciBuZXRzICovCisJCWJyZWFrOworCSAg ICB9CisJfSBlbHNlCisjZW5kaWYgLyogTk9ESUFMICovCisJewkJCQkvKiBObyBkaXJlY3Rvcnkg ZW50cmllcyBmb3VuZC4gKi8KKwkgICAgY2tzdHJuY3B5KGxpbmUsaG9zdG5hbWUsTElOQlVGU0la KTsgLyogUHV0IHRoaXMgYmFjay4uLiAqLworCSAgICAvKiBJZiB0aGUgdXNlciBnYXZlIGEgVENQ IHNlcnZpY2UgKi8KKwkgICAgaWYgKG5ldCA9PSBORVRfVENQQiB8fCBuZXQgPT0gTkVUX1NTSCkK KwkgICAgICBpZiAoKnNydmJ1ZikgewkJLyogQXBwZW5kIGl0IHRvIGhvc3QgbmFtZS9hZGRyZXNz ICovCisJCSAgY2tzdHJuY2F0KGxpbmUsICI6IiwgTElOQlVGU0laKTsKKwkJICBja3N0cm5jYXQo bGluZSwgc3J2YnVmLExJTkJVRlNJWik7CisJICAgICAgfQorCX0KKwkvKgorCSAgIEdldCBoZXJl IHdpdGggaG9zdCBuYW1lL2FkZHJlc3MgYW5kIGFsbCBuZXQtc3BlY2lmaWMKKwkgICBwYXJhbWV0 ZXJzIHNldCwgcmVhZHkgdG8gb3BlbiB0aGUgY29ubmVjdGlvbi4KKwkqLworCW1kbXR5cCA9IC1u ZXQ7CQkJLyogVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgKi8KKwkJCQkJLyogYWxyZWFkeSBi dXQganVzdCBpbiBjYXNlIC4uLiAqLworCisJZGVidWcoRjExMCwiY3hfbmV0IG5ldCBsaW5lW10g YmVmb3JlIHR0b3BlbiIsbGluZSwwKTsKKwlkZWJ1ZyhGMTAxLCJjeF9uZXQgbmV0IG1kbXR5cCBi ZWZvcmUgdHRvcGVuIiwiIixtZG10eXApOworCWRlYnVnKEYxMDEsImN4X25ldCBuZXQgdHRucHJv dG8iLCIiLHR0bnByb3RvKTsKKworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgICAgaWYgKG5ldCA9 PSBORVRfU1NIKSB7CisgICAgICAgICAgICBtYWtlc3RyKCZzc2hfaHN0LGhvc3RuYW1lKTsgICAg ICAgIC8qIFN0YXNoIGV2ZXJ5dGhpbmcgKi8KKyAgICAgICAgICAgIGlmICh1c2VybmFtZSkgewor ICAgICAgICAgICAgICAgIGlmICghc2xfdWlkX3NhdmVkKSB7CisgICAgICAgICAgICAgICAgICAg IGNrc3RybmNweShzbF91aWRidWYsdWlkYnVmLFVJREJVRkxFTik7CisgICAgICAgICAgICAgICAg ICAgIHNsX3VpZF9zYXZlZCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGNrc3RybmNweSh1aWRidWYsdXNlcm5hbWUsVUlEQlVGTEVOKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmIChzcnZidWZbMF0pIHsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hf cHJ0LHNydmJ1Zik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtYWtlc3Ry KCZzc2hfcHJ0LE5VTEwpOworCisgICAgICAgICAgICBpZiAoY29tbWFuZCkgeworICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnNzaF9jbWQsYnJzdHJpcChjb21tYW5kKSk7CisgICAgICAgICAgICAg ICAgc3NoX2NhcyA9IHBhcmFtMjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg IG1ha2VzdHIoJnNzaF9jbWQsTlVMTCk7CisKKyAgICAgICAgICAgIGlmIChwYXJhbTEgPiAtMSkg eworI2lmbmRlZiBTU0hURVNUCisgICAgICAgICAgICAgICAgaWYgKCFzbF9zc2hfdmVyX3NhdmVk KSB7CisgICAgICAgICAgICAgICAgICAgIHNsX3NzaF92ZXIgPSBzc2hfdmVyOworICAgICAgICAg ICAgICAgICAgICBzbF9zc2hfdmVyX3NhdmVkID0gMTsKKyAgICAgICAgICAgICAgICB9CisjZW5k aWYgLyogU1NIVEVTVCAqLworICAgICAgICAgICAgICAgIHNzaF92ZXIgPSBwYXJhbTE7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFyYW0zID4gLTEpIHsKKyNpZm5kZWYgU1NIVEVT VAorICAgICAgICAgICAgICAgIGlmICghc2xfc3NoX3hmd19zYXZlZCkgeworICAgICAgICAgICAg ICAgICAgICBzbF9zc2hfeGZ3ID0gc3NoX3hmdzsKKyAgICAgICAgICAgICAgICAgICAgc2xfc3No X3hmd19zYXZlZCA9IDE7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNTSFRFU1QgKi8K KyAgICAgICAgICAgICAgICBzc2hfeGZ3ID0gcGFyYW0zOworICAgICAgICAgICAgfQorICAgICAg ICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVF9TU0ggKi8KKyNlbmRpZiAv KiBTU0hCVUlMVElOICovCisjaWZkZWYgVENQU09DS0VUCisJICBpZiAobmV0ID09IE5FVF9UQ1BC KSB7CisgICAgICAgICAgICBzd2l0Y2ggKHByb3RvY29sKSB7CisjaWZkZWYgQ0tfU1NMCisjaWZk ZWYgQ09NTUVOVAorLyoKKyAgSmVmZidzIHZlcnNpb24gZnJvbSAzMCBEZWMgMjAwNiAtIGRvZXNu J3Qgd29yayAtIFNTTC9UTFNfUkFXIHN0aWxsCisgIHN0YXJ0IFRlbG5ldCBuZWdvdGlvbnMgaWYg YSAweGZmIGJ5dGUgY29tZXMgaW4uCisqLworCSAgICAgIGNhc2UgTlBfU1NMX1JBVzoKKyAgICAg ICAgICAgICAgICB0dG5wcm90byA9IE5QX1NTTF9SQVc7CisJCWRlYnVnKEYxMDEsIk5QX1NTTF9S QVcgdHRucHJvdG8iLCIiLHR0bnByb3RvKTsKKyAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFn ID0gMTsKKyAgICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMDsKKyAgICAgICAgICAgICAg ICBicmVhazsKKworCSAgICAgIGNhc2UgTlBfVExTX1JBVzoKKwkJICB0dG5wcm90byA9IE5QX1RM U19SQVc7CisJCSAgZGVidWcoRjEwMSwiTlBfVExTX1JBVyB0dG5wcm90byIsIiIsdHRucHJvdG8p OworCQkgIHNzbF9vbmx5X2ZsYWcgPSAwOworCQkgIHRsc19vbmx5X2ZsYWcgPSAxOworCQkgIGJy ZWFrOworCisJICAgICAgY2FzZSBOUF9TU0w6CisgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBO UF9TU0w7CisJCWRlYnVnKEYxMDEsIk5QX1NTTCB0dG5wcm90byIsIiIsdHRucHJvdG8pOworICAg ICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOworICAgICAgICAgICAgICAgIHRsc19vbmx5 X2ZsYWcgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJICAgICAgY2FzZSBOUF9UTFM6 CisgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9UTFM7CisJCWRlYnVnKEYxMDEsIk5QX1RM UyB0dG5wcm90byIsIiIsdHRucHJvdG8pOworICAgICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcg PSAwOworICAgICAgICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAxOworICAgICAgICAgICAgICAg IGJyZWFrOworCisJICAgICAgY2FzZSBOUF9TU0xfVEVMTkVUOgorICAgICAgICAgICAgICAgIHR0 bnByb3RvID0gTlBfVEVMTkVUOworCQlkZWJ1ZyhGMTAxLCJOUF9TU0xfVEVMTkVUIHR0bnByb3Rv IiwiIix0dG5wcm90byk7CisgICAgICAgICAgICAgICAgc3NsX29ubHlfZmxhZyA9IDE7CisgICAg ICAgICAgICAgICAgdGxzX29ubHlfZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK KwkgICAgICBjYXNlIE5QX1RMU19URUxORVQ6CisgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBO UF9URUxORVQ7CisJCWRlYnVnKEYxMDEsIk5QX1RMU19URUxORVQgdHRucHJvdG8iLCIiLHR0bnBy b3RvKTsKKyAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFnID0gMDsKKyAgICAgICAgICAgICAg ICB0bHNfb25seV9mbGFnID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbHNlCisvKiBm ZGMgdmVyc2lvbiBvZiA0IERlYyAyMDA2IHdvcmtzIE9LICovCisJICAgICAgY2FzZSBOUF9TU0xf UkFXOgorCSAgICAgIGNhc2UgTlBfU1NMOgorCQlzc2xfcmF3X2ZsYWcgPSAocHJvdG9jb2wgPT0g TlBfU1NMX1JBVykgPyAxIDogMDsKKyAgICAgICAgICAgICAgICB0dG5wcm90byA9IHByb3RvY29s OworCQlkZWJ1ZyhGMTAxLHByb3RvY29sPT1OUF9TU0wgPworCQkgICAgICAiTlBfU1NMIHR0bnBy b3RvIiA6CisJCSAgICAgICJOUF9TU0xfUkFXIHR0bnByb3RvIiwKKwkJICAgICAgIiIsdHRucHJv dG8pOworICAgICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAxOworICAgICAgICAgICAgICAg IHRsc19vbmx5X2ZsYWcgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJICAgICAgY2Fz ZSBOUF9UTFM6CisJICAgICAgY2FzZSBOUF9UTFNfUkFXOgorCQl0bHNfcmF3X2ZsYWcgPSAocHJv dG9jb2wgPT0gTlBfU1NMX1JBVykgPyAxIDogMDsKKyAgICAgICAgICAgICAgICB0dG5wcm90byA9 IHByb3RvY29sOworCQlkZWJ1ZyhGMTAxLHByb3RvY29sPT1OUF9UTFMgPworCQkgICAgICAiTlBf VExTIHR0bnByb3RvIiA6CisJCSAgICAgICJOUF9UTFNfUkFXIHR0bnByb3RvIiwKKwkJICAgICAg IiIsdHRucHJvdG8pOworICAgICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAwOworICAgICAg ICAgICAgICAgIHRsc19vbmx5X2ZsYWcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJ ICAgICAgY2FzZSBOUF9TU0xfVEVMTkVUOgorCQlzc2xfcmF3X2ZsYWcgPSAwOworICAgICAgICAg ICAgICAgIHR0bnByb3RvID0gTlBfVEVMTkVUOworCQlkZWJ1ZyhGMTAxLCJOUF9TU0xfVEVMTkVU IHR0bnByb3RvIiwiIix0dG5wcm90byk7CisgICAgICAgICAgICAgICAgc3NsX29ubHlfZmxhZyA9 IDE7CisgICAgICAgICAgICAgICAgdGxzX29ubHlfZmxhZyA9IDA7CisgICAgICAgICAgICAgICAg YnJlYWs7CisKKwkgICAgICBjYXNlIE5QX1RMU19URUxORVQ6CisJCXRsc19yYXdfZmxhZyA9IDA7 CisgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9URUxORVQ7CisJCWRlYnVnKEYxMDEsIk5Q X1RMU19URUxORVQgdHRucHJvdG8iLCIiLHR0bnByb3RvKTsKKyAgICAgICAgICAgICAgICBzc2xf b25seV9mbGFnID0gMDsKKyAgICAgICAgICAgICAgICB0bHNfb25seV9mbGFnID0gMTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyNlbmRpZgkvKiBDT01NRU5UICovCisjZW5kaWYgLyogQ0tfU1NM ICovCisKKwkgICAgICBjYXNlIE5QX05PTkU6CisJICAgICAgY2FzZSBOUF9UQ1BSQVc6CisJICAg ICAgY2FzZSBOUF9STE9HSU46CisJICAgICAgY2FzZSBOUF9LNExPR0lOOgorCSAgICAgIGNhc2Ug TlBfSzVMT0dJTjoKKwkgICAgICBjYXNlIE5QX0VLNExPR0lOOgorCSAgICAgIGNhc2UgTlBfRUs1 TE9HSU46CisJICAgICAgY2FzZSBOUF9URUxORVQ6CisJICAgICAgY2FzZSBOUF9LRVJNSVQ6CisJ ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0dG5wcm90byA9IHByb3RvY29sOworI2lm ZGVmIENLX1NTTAorI2lmZGVmIENPTU1FTlQKKwkJLyogSmVmZiB2ZXJzaW9uIGZyb20gMzAgRGVj IDIwMDYgKi8KKyAgICAgICAgICAgICAgICBzc2xfb25seV9mbGFnID0gMDsKKyAgICAgICAgICAg ICAgICB0bHNfb25seV9mbGFnID0gMDsKKyNlbHNlCisJCS8qIGZkYyB2ZXJzaW9uIGZyb20gNCBE ZWMgMjAwNiAqLworCQlzc2xfcmF3X2ZsYWcgPSAwOworCQl0bHNfcmF3X2ZsYWcgPSAwOworICAg ICAgICAgICAgICAgIHNzbF9vbmx5X2ZsYWcgPSAwOworICAgICAgICAgICAgICAgIHRsc19vbmx5 X2ZsYWcgPSAwOworI2VuZGlmCS8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBDS19BVVRIRU5USUNB VElPTgorICAgICAgICAgICAgaWYgKCh0dG5wcm90byA9PSBOUF9URUxORVQgfHwgdHRucHJvdG8g PT0gTlBfS0VSTUlUKSAmJgorCQlwYXJhbTEgPiAtMSkgeworCSAgICBpZiAoIXNsX2F1dGhfc2F2 ZWQpIHsKKwkJaW50IHg7CisJCWZvciAoeCA9IDA7IHggPCBBVVRIVFlQTFNUU1o7IHgrKykKKwkJ ICBzbF9hdXRoX3R5cGVfdXNlclt4XSA9IGF1dGhfdHlwZV91c2VyW3hdOworCQlzbF9hdXRoX3Nh dmVkID0gMTsKKwkgICAgfQorCSAgICBpZiAoIXNsX3RvcHRfYV9zX3NhdmVkKSB7CisJCXNsX3Rv cHRfYV9zdSA9IFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKTsKKwkJ c2xfdG9wdF9hX3Nfc2F2ZWQgPSAxOworCSAgICB9CisJICAgIGlmICghc2xfdG9wdF9hX2Nfc2F2 ZWQpIHsKKwkJc2xfdG9wdF9hX2NtID0gVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhF TlRJQ0FUSU9OKTsKKwkJc2xfdG9wdF9hX2Nfc2F2ZWQgPSAxOworCSAgICB9CisJICAgIHN3aXRj aCAocGFyYW0xKSB7CisJICAgICAgY2FzZSBBVVRIVFlQRV9BVVRPOgorCQlhdXRoX3R5cGVfdXNl clswXSA9IEFVVEhUWVBFX0FVVE87CisJCVRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0FVVEhF TlRJQ0FUSU9OKSA9IFROX05HX1JROworCQlURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQVVU SEVOVElDQVRJT04pID0gVE5fTkdfUlE7CisJCWJyZWFrOworCSAgICAgIGNhc2UgQVVUSFRZUEVf TlVMTDoKKwkJYXV0aF90eXBlX3VzZXJbMF0gPSBBVVRIVFlQRV9OVUxMOworCQlURUxPUFRfREVG X1NfVV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19SRjsKKwkJVEVMT1BUX0RF Rl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX1JGOworCQlicmVhazsK KyNpZmRlZiBDS19TUlAKKwkgICAgICBjYXNlIEFVVEhUWVBFX1NSUDoKKwkJYXV0aF90eXBlX3Vz ZXJbMF0gPSBBVVRIVFlQRV9TUlA7CisJCWF1dGhfdHlwZV91c2VyWzFdID0gQVVUSFRZUEVfTlVM TDsKKwkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdf TVU7CisJCVRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9O R19NVTsKKwkJYnJlYWs7CisjZW5kaWYgLyogQ0tfU1JQICovCisjaWZkZWYgQ0tfU1NMCisJICAg ICAgY2FzZSBBVVRIVFlQRV9TU0w6CisJCWF1dGhfdHlwZV91c2VyWzBdID0gQVVUSFRZUEVfU1NM OworCQlhdXRoX3R5cGVfdXNlclsxXSA9IEFVVEhUWVBFX05VTEw7CisJCVRFTE9QVF9ERUZfU19V X01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX01VOworCQlURUxPUFRfREVGX0Nf TUVfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7CisJCWJyZWFrOworI2Vu ZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIE5UCisJICAgICAgY2FzZSBBVVRIVFlQRV9OVExNOgor CQlhdXRoX3R5cGVfdXNlclswXSA9IEFVVEhUWVBFX05UTE07CisJCWF1dGhfdHlwZV91c2VyWzFd ID0gQVVUSFRZUEVfTlVMTDsKKwkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElD QVRJT04pID0gVE5fTkdfTVU7CisJCVRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5U SUNBVElPTikgPSBUTl9OR19NVTsKKwkJYnJlYWs7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBD S19LRVJCRVJPUworCSAgICAgIGNhc2UgQVVUSFRZUEVfS0VSQkVST1NfVjQ6CisJCWF1dGhfdHlw ZV91c2VyWzBdID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7CisJCWF1dGhfdHlwZV91c2VyWzFdID0g QVVUSFRZUEVfTlVMTDsKKwkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJ T04pID0gVE5fTkdfTVU7CisJCVRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNB VElPTikgPSBUTl9OR19NVTsKKwkJYnJlYWs7CisKKwkgICAgICBjYXNlIEFVVEhUWVBFX0tFUkJF Uk9TX1Y1OgorCQlhdXRoX3R5cGVfdXNlclswXSA9IEFVVEhUWVBFX0tFUkJFUk9TX1Y1OworCQlh dXRoX3R5cGVfdXNlclsxXSA9IEFVVEhUWVBFX05VTEw7CisJCVRFTE9QVF9ERUZfU19VX01PREUo VEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFROX05HX01VOworCQlURUxPUFRfREVGX0NfTUVfTU9E RShURUxPUFRfQVVUSEVOVElDQVRJT04pID0gVE5fTkdfTVU7CisJCWJyZWFrOworI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCisJICAgIH0KKwl9CisJLyoKKwkgICBJZiB0aGUgdXNlciByZXF1aXJl cyBhIHBhcnRpY3VsYXIgdHlwZSBvZiBLZXJiZXJvcyBjb25uZWN0aW9uLAorCSAgIG1ha2Ugc3Vy ZSB3ZSBoYXZlIGEgdmFsaWQgVEdULgorCSovCisJbWFrZXN0cigmc2xtc2csIkF1dGhlbnRpY2F0 aW9uIGZhaWx1cmUiKTsKKwlpZiAoKHR0bnByb3RvID09IE5QX1RFTE5FVCB8fCB0dG5wcm90byA9 PSBOUF9LRVJNSVQpICYmCisJICAgIChsaW5lWzBdID09ICcqJyAmJgorCSAgICAgVEVMT1BUX0RF Rl9TX1VfTU9ERShURUxPUFRfQVVUSEVOVElDQVRJT04pID09IFROX05HX01VIHx8CisJICAgICBs aW5lWzBdICE9ICcqJyAmJgorCSAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhF TlRJQ0FUSU9OKSA9PSBUTl9OR19NVSkKKwkgICAgKSB7CisjaWZkZWYgQ0tfS0VSQkVST1MKKwkg ICAgaWYgKCBhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRIVFlQRV9LRVJCRVJPU19WNCApIHsKKwkJ ZXh0ZXJuIGludCBrcmI0X2F1dG9nZXQ7CisJCWlmICghY2tfa3JiNF9pc19pbnN0YWxsZWQoKSkK KwkJICByZXR1cm4oY3hfZmFpbChtc2csCisJICAgICAgIlJlcXVpcmVkIGF1dGhlbnRpY2F0aW9u IG1ldGhvZCAoS2VyYmVyb3MgNCkgaXMgbm90IGluc3RhbGxlZCIpKTsKKyNpZmRlZiBDT01NRU5U CisJCS8qIFRoaXMgY29kZSByZXN1bHRzIGluIGZhbHNlIGZhaWx1cmVzIHdoZW4gdXNpbmcgKi8K KwkJLyoga2VyYmVyb3MgdG8gbWFjaGluZXMgaW4gcmVhbG1zIG90aGVyIHRoYW4gdGhlICAqLwor CQkvKiBkZWZhdWx0IHNpbmNlIHdlIGRvbid0IGtub3cgdGhlIHJlYWxtIG9mIHRoZSAgICovCisJ CS8qIG90aGVyIG1hY2hpbmUgdW50aWwgcGVyZm9ybSB0aGUgcmV2ZXJzZSBETlMgICAgKi8KKwkJ LyogbG9va3VwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQll bHNlIGlmIChsaW5lWzBdICE9ICcqJyAmJiAhY2tfa3JiNF9pc190Z3RfdmFsaWQoKSAmJgorCQkJ ICAgKCFrcmI0X2F1dG9nZXQgfHwKKwkJCSAgICBrcmI0X2F1dG9nZXQgJiYgIWNrX2tyYjRfYXV0 b2dldF9UR1QoTlVMTCkpKSB7CisJCSAgICByZXR1cm4oY3hfZmFpbChtc2csCisJCQkgICAiS2Vy YmVyb3MgNDogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZCIpKTsKKwkJfQorI2VuZGlm IC8qIENPTU1FTlQgKi8KKwkgICAgfSBlbHNlIGlmIChhdXRoX3R5cGVfdXNlclswXSA9PSBBVVRI VFlQRV9LRVJCRVJPU19WNSkgeworCQlleHRlcm4gaW50IGtyYjVfYXV0b2dldDsKKwkJaWYgKCFj a19rcmI1X2lzX2luc3RhbGxlZCgpKSB7CisJCSAgICByZXR1cm4oY3hfZmFpbChtc2csCisJICAg IlJlcXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoS2VyYmVyb3MgNSkgaXMgbm90IGluc3Rh bGxlZCIpKTsKKwkJfQorI2lmZGVmIENPTU1FTlQKKwkJLyogVGhpcyBjb2RlIHJlc3VsdHMgaW4g ZmFsc2UgZmFpbHVyZXMgd2hlbiB1c2luZyAqLworCQkvKiBrZXJiZXJvcyB0byBtYWNoaW5lcyBp biByZWFsbXMgb3RoZXIgdGhhbiB0aGUgICovCisJCS8qIGRlZmF1bHQgc2luY2Ugd2UgZG9uJ3Qg a25vdyB0aGUgcmVhbG0gb2YgdGhlICAgKi8KKwkJLyogb3RoZXIgbWFjaGluZSB1bnRpbCBwZXJm b3JtIHRoZSByZXZlcnNlIEROUyAgICAqLworCQkvKiBsb29rdXAuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisJCWVsc2UgaWYgKGxpbmVbMF0gIT0gJyonICYmICFj a19rcmI1X2lzX3RndF92YWxpZCgpICYmCisJCQkgICAoIWtyYjVfYXV0b2dldCB8fAorCQkJICAg IGtyYjVfYXV0b2dldCAmJiAhY2tfa3JiNV9hdXRvZ2V0X1RHVChOVUxMKSkpIHsKKwkJICAgIHJl dHVybihjeF9mYWlsKG1zZywKKwkJCSAiS2VyYmVyb3MgNTogVGlja2V0IEdldHRpbmcgVGlja2V0 IG5vdCB2YWxpZC4iKSk7CisJCX0KKyNlbmRpZiAvKiBDT01NRU5UICovCisJICAgIH0KKyNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLworI2lmZGVmIE5UCisJICAgIGlmIChhdXRoX3R5cGVfdXNlclsw XSA9PSBBVVRIVFlQRV9OVExNKSB7CisJCWlmICghY2tfbnRsbV9pc19pbnN0YWxsZWQoKSkgewor CQkgICAgcmV0dXJuKGN4X2ZhaWwobXNnLAorCQkgICAiUmVxdWlyZWQgYXV0aGVudGljYXRpb24g bWV0aG9kIChOVExNKSBpcyBub3QgaW5zdGFsbGVkIikpOworCQl9IGVsc2UgaWYgKGxpbmVbMF0g IT0gJyonICYmICFja19udGxtX2lzX3ZhbGlkKDApKSB7CisJCSAgICByZXR1cm4oY3hfZmFpbCht c2csIk5UTE06IENyZWRlbnRpYWxzIGFyZSB1bmF2YWlsYWJsZS4iKSk7CisJCX0KKwkgICAgfQor I2VuZGlmIC8qIE5UICovCisjaWZkZWYgQ0tfU1NMCisJICAgIGlmIChhdXRoX3R5cGVfdXNlclsw XSA9PSBBVVRIVFlQRV9TU0wpIHsKKwkJaWYgKCFja19zc2xlYXlfaXNfaW5zdGFsbGVkKCkpIHsK KwkJICAgIHJldHVybihjeF9mYWlsKG1zZywKKwkJICAgICAiUmVxdWlyZWQgYXV0aGVudGljYXRp b24gbWV0aG9kIChTU0wpIGlzIG5vdCBpbnN0YWxsZWQiKSk7CisJCX0KKwkgICAgfQorI2VuZGlm IC8qIENLX1NTTCAqLworI2lmZGVmIENLX1NSUAorCSAgICBpZiAoYXV0aF90eXBlX3VzZXJbMF0g PT0gQVVUSFRZUEVfU1JQKSB7CisJCWlmICghY2tfc3JwX2lzX2luc3RhbGxlZCgpKSB7CisJCSAg ICByZXR1cm4oY3hfZmFpbChtc2csCisJCSAgICAgIlJlcXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1l dGhvZCAoU1JQKSBpcyBub3QgaW5zdGFsbGVkIikpOworCQl9CisJICAgIH0KKyNlbmRpZiAvKiBD S19TUlAgKi8KKwl9CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNpZmRlZiBDS19F TkNSWVBUSU9OCisJaWYgKCh0dG5wcm90byA9PSBOUF9URUxORVQgfHwgdHRucHJvdG8gPT0gTlBf S0VSTUlUKSAmJgorCSAgICAgcGFyYW0yID4gLTEpIHsKKwkgICAgaWYgKCFzbF9jeF9zYXZlZCkg eworCQlzbF9jeF90eXBlID0gY3hfdHlwZTsKKwkJc2xfY3hfc2F2ZWQgPSAxOworCSAgICB9CisJ ICAgIGlmICghc2xfdG9wdF9lX3Nfc2F2ZWQpIHsKKwkJc2xfdG9wdF9lX3N1ID0gVEVMT1BUX0RF Rl9TX1VfTU9ERShURUxPUFRfRU5DUllQVElPTik7CisJCXNsX3RvcHRfZV9zbSA9IFRFTE9QVF9E RUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKTsKKwkJc2xfdG9wdF9lX3Nfc2F2ZWQgPSAx OworCSAgICB9CisJICAgIGlmICghc2xfdG9wdF9lX2Nfc2F2ZWQpIHsKKwkJc2xfdG9wdF9lX2N1 ID0gVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTik7CisJCXNsX3RvcHRfZV9j bSA9IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKTsKKwkJc2xfdG9wdF9l X2Nfc2F2ZWQgPSAxOworCSAgICB9CisJICAgIGN4X3R5cGUgPSBwYXJhbTI7CisJICAgIGlmIChj eF90eXBlID09IENYX0FVVE8pIHsKKwkJVEVMT1BUX0RFRl9TX1VfTU9ERShURUxPUFRfRU5DUllQ VElPTikgPSBUTl9OR19SUTsKKwkJVEVMT1BUX0RFRl9TX01FX01PREUoVEVMT1BUX0VOQ1JZUFRJ T04pID0gVE5fTkdfUlE7CisJCVRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID0gVE5fTkdfUlE7CisJCVRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9 IFROX05HX1JROworCSAgICB9IGVsc2UgaWYgKGN4X3R5cGUgPT0gQ1hfTk9ORSkgeworCQlURUxP UFRfREVGX1NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX1JGOworCQlURUxPUFRf REVGX1NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKwkJVEVMT1BUX0RF Rl9DX1VfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19SRjsKKwkJVEVMT1BUX0RFRl9D X01FX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfUkY7CisJICAgIH0gZWxzZSB7CisJ CVRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04pID0gVE5fTkdfTVU7CisJCVRF TE9QVF9ERUZfU19NRV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOworCQlURUxP UFRfREVGX0NfVV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9IFROX05HX01VOworCQlURUxPUFRf REVGX0NfTUVfTU9ERShURUxPUFRfRU5DUllQVElPTikgPSBUTl9OR19NVTsKKwkgICAgfQorCX0K KwlpZiAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4g fHwKKwkgICAgKHR0bnByb3RvID09IE5QX1RFTE5FVCB8fCB0dG5wcm90byA9PSBOUF9LRVJNSVQp ICYmCisJICAgICgobGluZVswXSA9PSAnKicgJiYKKwkgICAgICBURUxPUFRfREVGX1NfVV9NT0RF KFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19NVSAmJgorCSAgICAgIFRFTE9QVF9ERUZfU19N RV9NT0RFKFRFTE9QVF9FTkNSWVBUSU9OKSA9PSBUTl9OR19NVSkgfHwKKwkgICAgIChsaW5lWzBd ICE9ICcqJyAmJgorCSAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0VOQ1JZUFRJT04p ID09IFROX05HX01VICYmCisJICAgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZ UFRJT04pID09IFROX05HX01VKSkKKwkgICAgKSB7CisJICAgIGlmICghY2tfY3J5cHRfaXNfaW5z dGFsbGVkKCkpIHsKKwkJcmV0dXJuKGN4X2ZhaWwobXNnLAorCQkgICJSZXF1aXJlZCBFbmNyeXB0 aW9uIG1ldGhvZHMgYXJlIG5vdCBpbnN0YWxsZWQiKSk7CisJICAgIH0KKwl9CisjZW5kaWYgLyog Q0tfRU5DUllQVElPTiAqLworI2lmZGVmIFJMT0dDT0RFCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNp ZmRlZiBLUkI0CisJaWYgKHR0bnByb3RvID09IE5QX0s0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBf RUs0TE9HSU4pIHsKKwkgICAgZXh0ZXJuIGludCBrcmI0X2F1dG9nZXQ7CisJICAgIGNoYXIgdGd0 WzI1Nl07CisJICAgIGNoYXIgKiByZWFsbTsKKworCSAgICAvKiBXZSBkb24ndCBoYXZlIHRoZSBm dWxsIGhvc3RuYW1lIGF0IHlldCBzbyAgKi8KKwkgICAgLyogd2UgZG8gYSBETlMgbG9va3VwIGJl Zm9yZSBjYWxsaW5nIHR0b3BlbigpICovIAorCisJICAgIHJlYWxtID0gY2tfa3JiNF9yZWFsbW9m aG9zdChja2dldGZxaG9zdG5hbWUoaG9zdG5hbWUpKTsKKwkgICAgY2ttYWttc2codGd0LDI1Niwi a3JidGd0LiIscmVhbG0sIkAiLHJlYWxtKTsKKwkgICAgaWYgKCFja19rcmI0X2lzX2luc3RhbGxl ZCgpKSB7CisJCXJldHVybihjeF9mYWlsKG1zZywKKwkJICJSZXF1aXJlZCBhdXRoZW50aWNhdGlv biBtZXRob2QgKEtlcmJlcm9zIDQpIGlzIG5vdCBpbnN0YWxsZWQiCisJCQkgICAgICAgKSk7CisJ ICAgIH0gZWxzZSB7CisJCWlmICgoY2tfa3JiNF90a3RfaXN2YWxpZCh0Z3QpIDw9IDApICYmCisJ CSAgICAoIWtyYjRfYXV0b2dldCB8fAorCQkgICAgIGtyYjRfYXV0b2dldCAmJiAhY2tfa3JiNF9h dXRvZ2V0X1RHVChyZWFsbSkpKSB7CisJCSAgICByZXR1cm4oY3hfZmFpbChtc2csCisJCQkgICAi S2VyYmVyb3MgNDogVGlja2V0IEdldHRpbmcgVGlja2V0IG5vdCB2YWxpZCIpKTsKKwkJfQorCSAg ICB9CisJfQorI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisJaWYgKHR0bnByb3RvID09 IE5QX0s1TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4gfHwKKwkgICAgdHRucHJvdG8g PT0gTlBfSzVVMlUpCisJeworCSAgICBleHRlcm4gaW50IGtyYjVfYXV0b2dldDsKKwkgICAgY2hh ciB0Z3RbMjU2XTsKKwkgICAgY2hhciAqIHJlYWxtOworCisJICAgIC8qIE11c3QgZ2V0IGZ1bGwg aG9zdG5hbWUgYmVmb3JlIGNhbGxpbmcgdHRvcGVuKCkgKi8KKworCSAgICByZWFsbSA9IGNrX2ty YjVfcmVhbG1vZmhvc3QoY2tnZXRmcWhvc3RuYW1lKGhvc3RuYW1lKSk7CisJICAgIGNrbWFrbXNn KHRndCwyNTYsImtyYnRndC8iLHJlYWxtLCJAIixyZWFsbSk7CisKKwkgICAgaWYgKCFja19rcmI1 X2lzX2luc3RhbGxlZCgpKSB7CisJCXJldHVybihjeF9mYWlsKG1zZywKKyAgICAgICAgICAgICAg ICAgIlJlcXVpcmVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCAoS2VyYmVyb3MgNSkgbm90IGluc3Rh bGxlZCIpKTsKKwkgICAgfSBlbHNlIGlmICghKChja19rcmI1X3RrdF9pc3ZhbGlkKE5VTEwsdGd0 KSA+IDApIHx8CisJCQkgIGNrX2tyYjVfaXNfdGd0X3ZhbGlkKCkpICYmCisJCSAgICAgICAoIWty YjVfYXV0b2dldCB8fAorCQkJa3JiNV9hdXRvZ2V0ICYmICFja19rcmI1X2F1dG9nZXRfVEdUKHJl YWxtKSkpIHsKKwkJcmV0dXJuKGN4X2ZhaWwobXNnLAorCQkgICAgICAgIktlcmJlcm9zIDU6IFRp Y2tldCBHZXR0aW5nIFRpY2tldCBub3QgdmFsaWQuIikpOworCSAgICB9CisJfQorI2VuZGlmIC8q IEtSQjUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlmIC8qIFJMT0dDT0RFICov CisKKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBSTE9HQ09ERQorCWlmICh1c2VybmFtZSkgeworCSAg ICBpZiAoIXNsX3VpZF9zYXZlZCkgeworCQlja3N0cm5jcHkoc2xfdWlkYnVmLHVpZGJ1ZixVSURC VUZMRU4pOworCQlzbF91aWRfc2F2ZWQgPSAxOworCSAgICB9CisJICAgIGNrc3RybmNweSh1aWRi dWYsdXNlcm5hbWUsVUlEQlVGTEVOKTsKKwkgICAgdWlkZmxhZyA9IDE7CisJfQorI2VuZGlmIC8q IFJMT0dDT0RFICovCisjaWZkZWYgVE5DT0RFCisJaWYgKCFzbF90bl9zYXZlZCkgeworCSAgICBz bF90bl93YWl0ID0gdG5fd2FpdF9mbGc7CisJICAgIHNsX3RuX3NhdmVkID0gMTsKKwl9CisJdG5f d2FpdF9mbGcgPSBwYXJhbTM7CisjZW5kaWYgLyogVE5DT0RFICovCisjZW5kaWYgLyogTk9TUEwg Ki8KKwl9IC8qIGlmIChuZXQgPT0gTkVUX1RDUEIpICovCisjZW5kaWYgLyogVENQU09DS0VUICov CisKKyNpZm5kZWYgTk9TUEwKKyNpZmRlZiBDS19TRUNVUklUWQorCWlmIChwYXNzd29yZCkgewor CSAgICBpZiAocGFzc3dvcmRbMF0pIHsKKwkJY2tzdHJuY3B5KHB3YnVmLHBhc3N3b3JkLFBXQlVG TCsxKTsKKwkJcHdmbGcgPSAxOworCQlwd2NyeXB0ID0gMDsKKwkgICAgfSBlbHNlCisJCXB3Zmxn ID0gMDsKKwl9CisjZW5kaWYgLyogQ0tfU0VDVVJJVFkgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLwor CisJLyogVHJ5IHRvIG9wZW4gLSBuZXR3b3JrICovCisJY2tzdHJuY3B5KHR0bmFtZSxsaW5lLFRU TkFNTEVOKTsKKwl5ID0gdHRvcGVuKGxpbmUsICZfbG9jYWwsIG1kbXR5cCwgMCApOworCisjaWZu ZGVmIE5PSFRUUAorCS8qICBJZiB0aGUgY29ubmVjdGlvbiBmYWlsZWQgYW5kIHdlIGFyZSB1c2lu ZyBhbiBIVFRQIFByb3h5CisJICogIGFuZCB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZSB3YXMg YW4gYXV0aGVudGljYXRpb24KKwkgKiAgZXJyb3IsIHRoZW4gd2UgbmVlZCB0byBnaXZlIHRoZSB1 c2VyIHRvIGFiaWxpdHkgdG8KKwkgKiAgZW50ZXIgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsIGp1 c3QgbGlrZSBhIGJyb3dzZXIuCisJICoKKwkgKiAgSSB0cmllZCB0byBkbyBhbGwgb2YgdGhpcyB3 aXRoaW4gdGhlIG5ldG9wZW4oKSBjYWxsCisJICogIGJ1dCBpdCBpcyBtdWNoIHRvbyBtdWNoIHdv cmsuCisJICovCisJd2hpbGUgKHkgPCAwICYmIHRjcF9odHRwX3Byb3h5ICE9IE5VTEwgKSB7CisK KwkgICAgaWYgKHRjcF9odHRwX3Byb3h5X2Vycm5vID09IDQwMSB8fAorCQl0Y3BfaHR0cF9wcm94 eV9lcnJubyA9PSA0MDcgKSB7CisJCWNoYXIgdWlkW1VJREJVRkxFTl07CisJCWNoYXIgcHdkWzI1 Nl07CisgICAgICAgICAgICAgICAgc3RydWN0IHR4dGJveCB0YlsyXTsKKyAgICAgICAgICAgICAg ICBpbnQgb2s7CisKKyAgICAgICAgICAgICAgICB0YlswXS50X2J1ZiA9IHVpZDsKKyAgICAgICAg ICAgICAgICB0YlswXS50X2xlbiA9IFVJREJVRkxFTjsKKyAgICAgICAgICAgICAgICB0YlswXS50 X2xibCA9ICJQcm94eSBVc2VyaWQ6ICI7CisgICAgICAgICAgICAgICAgdGJbMF0udF9kZmx0ID0g TlVMTDsKKyAgICAgICAgICAgICAgICB0YlswXS50X2VjaG8gPSAxOworICAgICAgICAgICAgICAg IHRiWzFdLnRfYnVmID0gcHdkOworICAgICAgICAgICAgICAgIHRiWzFdLnRfbGVuID0gMjU2Owor ICAgICAgICAgICAgICAgIHRiWzFdLnRfbGJsID0gIlByb3h5IFBhc3NwaHJhc2U6ICI7CisgICAg ICAgICAgICAgICAgdGJbMV0udF9kZmx0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB0YlsxXS50 X2VjaG8gPSAyOworCisgICAgICAgICAgICAgICAgb2sgPSB1cV9tdHh0KCJQcm94eSBTZXJ2ZXIg QXV0aGVudGljYXRpb24gUmVxdWlyZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCAyLCB0Yik7CisKKwkJaWYgKG9rICYmIHVpZFswXSkgeworCQkgICAgY2hhciAqIHBy b3h5X3VzZXIsICogcHJveHlfcHdkOworCisJCSAgICBwcm94eV91c2VyID0gdGNwX2h0dHBfcHJv eHlfdXNlcjsKKwkJICAgIHByb3h5X3B3ZCAgPSB0Y3BfaHR0cF9wcm94eV9wd2Q7CisKKwkJICAg IHRjcF9odHRwX3Byb3h5X3VzZXIgPSB1aWQ7CisJCSAgICB0Y3BfaHR0cF9wcm94eV9wd2QgPSBw d2Q7CisKKwkJICAgIGNrc3RybmNweSh0dG5hbWUsbGluZSxUVE5BTUxFTik7CisJCSAgICB5ID0g dHRvcGVuKGxpbmUsICZfbG9jYWwsIG1kbXR5cCwgMCk7CisJCSAgICBtZW1zZXQocHdkLDAsc2l6 ZW9mKHB3ZCkpOworCQkgICAgdGNwX2h0dHBfcHJveHlfdXNlciA9IHByb3h5X3VzZXI7CisJCSAg ICB0Y3BfaHR0cF9wcm94eV9wd2QgPSBwcm94eV9wd2Q7CisJCX0gZWxzZQorCQkgIGJyZWFrOwor CSAgICB9IGVsc2UKKwkgICAgICBicmVhazsKKwl9CisjZW5kaWYgLyogTk9IVFRQICovCisJaWYg KHkgPCAwKSB7CisJICAgIHNscmVzdG9yKCk7CisJICAgIG1ha2VzdHIoJnNsbXNnLCJOZXR3b3Jr IGNvbm5lY3Rpb24gZmFpbHVyZSIpOworI2lmZGVmIFZNUworCSAgICBpZiAobXNnICYmIGhpbnRz ICYmICF4Y21kc3JjICYmIElTX1JMT0dJTigpKSB7CisJCW1ha2VzdHIoJnNsbXNnLCJSTE9HSU4g ZmFpbHVyZSIpOworCQlpZiAgKHNvY2tldF9lcnJubyA9PSBFQUNDRVMpIHsKKwkJICAgIHByaW50 ZigiKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJCSAgICBwcmludGYoCisJICAgIkhp bnQ6IFJMT0dJTiByZXF1aXJlcyBwcml2aWxlZ2VzIHRvIG9wZW4gYW4gb3V0Ym91bmQgcG9ydC5c biIpOworCQkgICAgcHJpbnRmKAorCQkgICAgIihVc2UgU0VUIEhJTlRTIE9GRiB0byBzdXBwcmVz cyBmdXR1cmUgaGludHMuKVxuIik7CisJCSAgICBwcmludGYoIioqKioqKioqKioqKioqKioqKioq KioqKipcbiIpOworCQl9CisJICAgIH0KKyNlbHNlICAvKiBOb3QgVk1TLi4uICovCisJICAgIGlm IChlcnJubykgeworCQlpbnQgeDsKKwkJZGVidWcoRjExMSwic2V0IGhvc3QgbGluZSwgZXJybm8i LCIiLGVycm5vKTsKKwkJbWFrZXN0cigmc2xtc2csY2tfZXJyc3RyKCkpOworCQlpZiAobXNnKSB7 CisjaWZkZWYgT1MyCisJCSAgICBwcmludGYoIkNhbid0IGNvbm5lY3QgdG8gJXNcbiIsbGluZSk7 CisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBVTklYCisJCSAgICBpZiAoaGludHMgJiYgIXhjbWRz cmMgJiYgSVNfUkxPR0lOKCkpIHsKKwkJCW1ha2VzdHIoJnNsbXNnLCJSTE9HSU4gZmFpbHVyZSIp OworCQkJcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwkJCXByaW50ZigK KwkgIkhpbnQ6IFJMT0dJTiByZXF1aXJlcyBwcml2aWxlZ2VzIHRvIG9wZW4gYW4gb3V0Ym91bmQg cG9ydC5cbiIpOworCQkJcHJpbnRmKAorCSAiKFVzZSBTRVQgSElOVFMgT0ZGIHRvIHN1cHByZXNz IGZ1dHVyZSBoaW50cy4pXG4iKTsKKwkJCXByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioq KlxuIik7CisJCSAgICB9CisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIE9TMiAqLworCQl9 IGVsc2UgcHJpbnRmKCJDYW4ndCBjb25uZWN0IHRvICVzXG4iLGxpbmUpOworCSAgICB9IGVsc2UK KyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgICBpZiAobXNnKSBwcmludGYoIkNhbid0IG9wZW4gY29u bmVjdGlvbiB0byAlc1xuIixsaW5lKTsKKwkgICAgY29udGludWU7CisJfSBlbHNlIHsKKwkgICAg c3VjY2VzcyA9IDE7CisjaWZuZGVmIE5PRElBTAorCSAgICBkaWFsc3RhID0gRElBX1VOSzsKKyNl bmRpZiAvKiBOT0RJQUwgKi8KKwkgICAgc3dpdGNoIChuZXQpIHsKKwkgICAgICBjYXNlIE5FVF9U Q1BBOgorCSAgICAgIGNhc2UgTkVUX1RDUEI6CisJCWN4dHlwZSA9IENYVF9UQ1BJUDsKKyNpZmRl ZiBDT01NRU5UCisvKiBUaGlzIHdvcmtzIGJ1dCBpdCBtZXNzZXMgdXAgaW50ZXJhY3RpdmUgYW5v bnltb3VzIGxvZ2luICovCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIElLU19PUFRJT04KKwkJLyog SWYgd2UgaGF2ZSBjb25uZWN0ZWQgdG8gYW4gSW50ZXJuZXQgS2VybWl0IHNlcnZpY2UgKi8KKwkJ LyogYW5kIGEgL1VTRVI6IHN3aXRjaCB3YXMgZ2l2ZW4sIHRoZW4gbG9nIGluLiAqLworCisJCWlm IChURUxPUFRfVShURUxPUFRfS0VSTUlUKSB8fCBURUxPUFRfTUUoVEVMT1BUX0tFUk1JVCkpIHsK KwkJICAgIGRlYnVnKEYxMTEsImN4X25ldCBJS1NEIC9VU0VSOiIsdWlkYnVmLGhhdmV1c2VyKTsK KwkJICAgIGlmIChoYXZldXNlciAvKiAmJiBjeCA9PSAwICovICkgeyAvKiAvVVNFUjogZ2l2ZW4g Ki8KKwkJCWNoYXIgKiBwc3cgPSBwd2J1ZjsgLyogRG8gd2UgaGF2ZSBhIHBhc3N3b3JkPyAqLwor CQkJaWYgKCEqcHN3KSB7ICAgICAgICAvKiBOby4uLiAqLworCQkJICAgIGlmICghc3RyY21wKHVp ZGJ1ZiwiYW5vbnltb3VzIikgfHwKKwkJCQkhc3RyY21wKHVpZGJ1ZiwiZnRwIikpIHsKKwkJCQll eHRlcm4gY2hhciBteWhvc3RbXTsKKwkJCQljaGFyICogdSA9IChjaGFyICopc2xfdWlkYnVmOwor CQkJCWNoYXIgKiBoID0gKGNoYXIgKilteWhvc3Q7CisJCQkJaWYgKCEqdSkgdSA9ICJub2JvZHki OworCQkJCWlmICghKmgpIGggPSAibm93aGVyZSI7CisJCQkJY2ttYWttc2codG1wYnVmLFRNUEJV RlNJWix1LCJAIixoLE5VTEwpOworCQkJCXBzdyA9IHRtcGJ1ZjsKKwkJCQlkZWJ1ZyhGMTEwLCJj eF9uZXQgSUtTRCBhbm9uIixwc3csMCk7CisJCQkgICAgfSBlbHNlIHsKKwkJCQlyZWFkcGFzcygi IFBhc3N3b3JkOiAiLHB3YnVmLFBXQlVGTCk7CisJCQkgICAgfQorCQkJfQorCQkJc3N0YXRlID0g c2V0Z2VuKCdJJyx1aWRidWYscHN3LCIiKTsKKwkJICAgIH0KKwkJfQorI2VuZGlmIC8qIElLU19P UFRJT04gKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJCWJy ZWFrOworCSAgICAgIGNhc2UgTkVUX1NTSDoKKwkJY3h0eXBlID0gQ1hUX1NTSDsKKwkJZHVwbGV4 ID0gMDsgICAgICAgICAvKiBSZW1vdGUgZWNobyAqLworCQlicmVhazsKKwkgICAgICBjYXNlIE5F VF9TTEFUOgorCQljeHR5cGUgPSBDWFRfTEFUOworCQlicmVhazsKKwkgICAgICBjYXNlIE5FVF9T WDI1OgorCSAgICAgIGNhc2UgTkVUX0lYMjU6CisJICAgICAgY2FzZSBORVRfSFgyNToKKwkgICAg ICBjYXNlIE5FVF9WWDI1OgorCQljeHR5cGUgPSBDWFRfWDI1OworCQlicmVhazsKKwkgICAgICBj YXNlIE5FVF9CSU9TOgorCQljeHR5cGUgPSBDWFRfTkVUQklPUzsKKwkJYnJlYWs7CisJICAgICAg Y2FzZSBORVRfRklMRToKKwkgICAgICBjYXNlIE5FVF9QSVBFOgorCSAgICAgIGNhc2UgTkVUX0NN RDoKKwkgICAgICBjYXNlIE5FVF9ETEw6CisJICAgICAgY2FzZSBORVRfUFRZOgorCQljeHR5cGUg PSBDWFRfUElQRTsKKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoKKwkJY3h0eXBlID0gQ1hUX1BJ UEU7CisJCWJyZWFrOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKyAgICB9IC8qIGZvci1sb29w ICovCisgICAgcyA9IGxpbmU7CisKKyAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQgcG9zdCB0dG9wZW4g c3VjY2VzcyIsIiIsc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIGxvY2Fs ID0gZGZsb2M7ICAgICAgICAgICAgICAgICAgLyogR28gYmFjayB0byBub3JtYWwgKi8KKyNpZm5k ZWYgTUFDCisgICAgICAgIGNrc3RybmNweSh0dG5hbWUsZGZ0dHksVFROQU1MRU4pOyAvKiBSZXN0 b3JlIGRlZmF1bHQgdHR5IG5hbWUgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgc3BlZWQg PSB0dGdzcGQoKTsKKyAgICAgICAgbmV0d29yayA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBO byBuZXR3b3JrIGNvbm5lY3Rpb24gYWN0aXZlICovCisgICAgICAgIGhhdmVsaW5lID0gMDsKKyAg ICAgICAgaWYgKG1kbXR5cCA8IDApIHsgICAgICAgICAgICAgICAvKiBTd2l0Y2hpbmcgZnJvbSBu ZXQgdG8gYXN5bmM/ICovCisgICAgICAgICAgICBpZiAobWRtc2F2ID4gLTEpICAgICAgICAgICAg LyogUmVzdG9yZSBtb2RlbSB0eXBlIGZyb20gbGFzdCAqLworICAgICAgICAgICAgICBtZG10eXAg PSBtZG1zYXY7ICAgICAgICAgIC8qIFNFVCBNT0RFTSBjb21tYW5kLCBpZiBhbnkuICovCisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIG1kbXR5cCA9IDA7CisgICAgICAgICAgICBtZG1z YXYgPSAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAg ICAgIC8qIFJldHVybiBmYWlsdXJlICovCisgICAgfQorICAgIGlmIChfbG9jYWwgPiAtMSkgbG9j YWwgPSBfbG9jYWw7ICAgIC8qIE9wZW5lZCBvaywgc2V0IGxvY2FsL3JlbW90ZS4gKi8KKyAgICBt YWtlc3RyKCZzbG1zZyxOVUxMKTsKKyAgICBuZXR3b3JrID0gKG1kbXR5cCA8IDApOyAgICAgICAg ICAgICAvKiBSZW1lbWJlciBjb25uZWN0aW9uIHR5cGUuICovCisgICAgY2tzdHJuY3B5KHR0bmFt ZSxzLFRUTkFNTEVOKTsgICAgICAgLyogQ29weSBuYW1lIGludG8gcmVhbCBwbGFjZS4gKi8KKyAg ICBkZWJ1ZyhGMTEwLCJjeF9uZXQgb2siLHR0bmFtZSwwKTsKKyAgICBkZWJ1ZyhGMTAxLCJjeF9u ZXQgbmV0d29yayIsIiIsbmV0d29yayk7CisjaWZuZGVmIE5PWEZFUgorICAgIGlmICgocmVsaWFi bGUgIT0gU0VUX09GRiB8fCAhc2V0cmVsaWFibGUpKSAvKiBBc3N1bWUgbm90IHJlbGlhYmxlLiAq LworICAgICAgcmVsaWFibGUgPSBTRVRfT0ZGOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIGlm ICghbmV0d29yayB8fCBpc3RuY29tcG9ydCgpKQkKKyAgICAgIHNwZWVkID0gdHRnc3BkKCk7ICAg ICAgICAgICAgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgc3BlZWQuICovCisgICAgZGVidWcoRjEw MSwiY3hfbmV0IGxvY2FsIiwiIixsb2NhbCk7CisgICAgaWYgKG5ldHdvcmspIHsKKyAgICAgICAg ZGVidWcoRjEwMSwiY3hfbmV0IG5ldCIsIiIsbmV0KTsKKyNpZm5kZWYgTk9YRkVSCisgICAgICAg IC8qIEZvcmNlIHByZWZpeGluZyBvZiAyNTUgb24gVENQL0lQIGNvbm5lY3Rpb25zLi4uICovCisg ICAgICAgIGlmIChuZXQgPT0gTkVUX1RDUEIKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAg ICAgfHwgbmV0ID09IE5FVF9TU0gKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisgICAgICAgICAg ICAgKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQgcmVsaWFibGUgQSIsIiIscmVs aWFibGUpOworI2lmZGVmIENLX1NQRUVECisgICAgICAgICAgICBjdGxwWyh1bnNpZ25lZCkyNTVd ID0gMTsKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworICAgICAgICAgICAgaWYgKChyZWxpYWJsZSAh PSBTRVRfT0ZGIHx8ICFzZXRyZWxpYWJsZSkpIHsKKyNpZmRlZiBUTl9DT01QT1JUCisgICAgICAg ICAgICAgICAgaWYgKGlzdG5jb21wb3J0KCkpIHsgICAgLyogVGVsbmV0IGNvbW11bmljYXRpb24g cG9ydCAqLworICAgICAgICAgICAgICAgICAgICByZWxpYWJsZSA9IFNFVF9PRkY7IC8qIFRyYW5z cG9ydCBpcyBub3QgcmVsaWFibGUgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi Y3hfbmV0IHJlbGlhYmxlIGlzdG5jb21wb3J0KCkiLCIiLDEpOworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJlbGlhYmxlID0gU0VUX09OOyAgLyogVHJhbnNw b3J0IGlzIHJlbGlhYmxlIGVuZCB0byBlbmQgKi8KKyAgICAgICAgICAgICAgICAgICAgZGVidWco RjEwMSwiY3hfbmV0IHJlbGlhYmxlIGlzdG5jb21wb3J0KCkiLCIiLDApOworICAgICAgICAgICAg ICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgcmVsaWFibGUgPSBTRVRfT047ICAgICAgLyog VHJhbnNwb3J0IGlzIHJlbGlhYmxlIGVuZCB0byBlbmQgKi8KKyNlbmRpZiAvKiBpZmRlZiBUTl9D T01QT1JUICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjeF9uZXQg cmVsaWFibGUgQiIsIiIscmVsaWFibGUpOworICAgICAgICB9IGVsc2UgaWYgKG5ldCA9PSBORVRf U1gyNSB8fAorICAgICAgICAgICAgICAgICAgIG5ldCA9PSBORVRfVlgyNSB8fAorICAgICAgICAg ICAgICAgICAgIG5ldCA9PSBORVRfSVgyNSB8fAorICAgICAgICAgICAgICAgICAgIG5ldCA9PSBO RVRfSFgyNSkgeworICAgICAgICAgICAgZHVwbGV4ID0gMTsgICAgICAgICAgICAgICAgIC8qIExv Y2FsIGVjaG8gZm9yIFguMjUgKi8KKyAgICAgICAgICAgIGlmIChyZWxpYWJsZSAhPSBTRVRfT0ZG IHx8ICFzZXRyZWxpYWJsZSkKKyAgICAgICAgICAgICAgcmVsaWFibGUgPSBTRVRfT047ICAgICAg ICAvKiBUcmFuc3BvcnQgaXMgcmVsaWFibGUgZW5kIHRvIGVuZCAqLworICAgICAgICB9CisjZW5k aWYgLyogTk9YRkVSICovCisgICAgfQorI2lmbmRlZiBOT1hGRVIKKyAgICBkZWJ1ZyhGMTAxLCJj eF9uZXQgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZmRl ZiBPUzIKKyAgICBpZiAobWRtdHlwIDw9IDApICAgICAgICAgICAgICAgICAgICAvKiBOZXR3b3Jr IG9yIERpcmVjdCBDb25uZWN0aW9uICovCisgICAgICBEaWFsZXJTZW5kKE9QVF9LRVJNSVRfQ09O TkVDVCwgMCk7CisjZW5kaWYgLyogT1MyICovCisKKyAgeGN4X25ldDoKKworICAgIHNldGZsb3co KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0ZSBmbG93IGNvbnRy b2wgKi8KKworICAgIGhhdmVsaW5lID0gMTsKKyNpZmRlZiBDS0xPR0RJQUwKKyAgICBkb2xvZ25l dCgpOworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZuZGVmIE5PU1BMCisgICAgaWYgKGxv Y2FsKSB7CisgICAgICAgIGlmIChubWFjKSB7ICAgICAgICAgICAgICAgICAgICAgLyogQW55IG1h Y3JvcyBkZWZpbmVkPyAqLworICAgICAgICAgICAgaW50IGs7ICAgICAgICAgICAgICAgICAgICAg IC8qIFllcyAqLworICAgICAgICAgICAgayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7 ICAgLyogTG9vayB0aGlzIHVwICovCisgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyAgICAgICAgICAgICAgICBpZiAoZG9kbyhr LHR0bmFtZSwwKSA+IC0xKSAgICAgIC8qIHNldCBpdCB1cCwgKi8KKyAgICAgICAgICAgICAgICAg IHBhcnNlcigxKTsgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIGlm IChsb2NhbCAmJiAoY3ggfHwgc3gpKSB7ICAgICAgICAgIC8qIC9DT05ORUNUIG9yIC9TRVJWRVIg c3dpdGNoIGdpdmVuICovCisgICAgICAgIGlmIChjeCkgeyAgICAgICAgICAgICAgICAgICAgICAg LyogL0NPTk5FQ1QgKi8KKwkgICAgaWYgKCFndWkpIHsKKwkJLyogQ29tbWFuZCB3YXMgY29uZmly bWVkIHNvIHdlIGNhbiBwcmUtcG9wIGNvbW1hbmQgbGV2ZWwuICAqLworCQkvKiBUaGlzIGlzIHNv IENPTk5FQ1QgbW9kdWxlIHdvbid0IHRoaW5rIHdlJ3JlIGV4ZWN1dGluZyBhICovCisJCS8qIHNj cmlwdCBpZiBDT05ORUNUIHdhcyB0aGUgZmluYWwgY29tbWFuZCBpbiB0aGUgc2NyaXB0LiAgKi8K KwkJaWYgKGNtZGx2bCA+IDApCisJCSAgcHJlcG9wKCk7CisJICAgIH0KKyNpZm5kZWYgTk9ESUFM CisgICAgICAgICAgICBkaWFsc3RhID0gRElBX1VOSzsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNp ZmRlZiBMT0NVUworICAgICAgICAgICAgaWYgKGF1dG9sb2N1cykgeworCQlzZXRsb2N1cygxLDEp OworICAgICAgICAgICAgfQorI2VuZGlmIC8qIExPQ1VTICovCisgICAgICAgICAgICBzdWNjZXNz ID0gZG9jb25lY3QoMCwgY21kbHZsID09IDAgPyAxIDogMCk7CisgICAgICAgICAgICBpZiAodHRj aGsoKSA8IDApCisgICAgICAgICAgICAgIGRvbG9nZW5kKCk7CisJICAgIGRlYnVnKEYxMDEsImN4 X25ldCBwb3N0IGRvY29uZWN0IHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOworICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MpOworI2lmbmRlZiBOT1hGRVIKKyAgICAgICAgfSBlbHNlIGlmIChzeCkgeyAg ICAgICAgICAgICAgICAvKiAvU0VSVkVSICovCisgICAgICAgICAgICBzc3RhdGUgPSAneCc7Cisj aWZkZWYgTUFDCisgICAgICAgICAgICB3aGF0ID0gV19SRUNWOworICAgICAgICAgICAgc2NyY3Jl YXRlKCk7CisjZW5kaWYgLyogTUFDICovCisgICAgICAgICAgICBpZiAobG9jYWwpIGRpc3BsYSA9 IDE7CisjaWZkZWYgQU1JR0EKKyAgICAgICAgICAgIHJlcW9mZigpOyAgICAgICAgICAgICAgICAg ICAvKiBObyBET1MgcmVxdWVzdG9ycyB3aGlsZSBzZXJ2ZXIgKi8KKyNlbmRpZiAvKiBBTUlHQSAq LworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAgICB9CisgICAgfQorI2lmbmRlZiBOT0RJQUwK KyAgICBkaWFsc3RhID0gRElBX1VOSzsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZmRlZiBMT0NV UworICAgIGlmIChhdXRvbG9jdXMpIHsKKyAgICAgICAgc2V0bG9jdXMoMSwxKTsKKyAgICB9Cisj ZW5kaWYgLyogTE9DVVMgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworfQorI2VuZGlmIC8q IE5FVENPTk4gKi8KKworLyogYyB4IF8gcyBlIHIgaSBhIGwgIC0tICBNYWtlIGEgc2VyaWFsIGNv bm5lY3Rpb24gKi8KKworLyoKKyAgQ2FsbCB3aXRoOgorICAgIGRldmljZSAgPSBzdHJpbmcgcG9p bnRlciB0byBkZXZpY2UgbmFtZS4KKyAgICBjeCAgICAgID0gMSB0byBhdXRvbWF0aWNhbGx5IGVu dGVyIENvbm5lY3QgbW9kZSwgMCBvdGhlcndpc2UuCisgICAgc3ggICAgICA9IDEgdG8gYXV0b21h dGljYWxseSBlbnRlciBTZXJ2ZXIgbW9kZSwgMCBvdGhlcndpc2UuCisgICAgc2hyICAgICA9IDEg aWYgZGV2aWNlIHNob3VsZCBiZSBvcGVuZWQgaW4gc2hhcmVhYmxlIG1vZGUsIDAgb3RoZXJ3aXNl LgorICAgIGZsYWcgICAgPSBpZiBubyBkZXYgbmFtZSBnaXZlbjogMSA9IGNsb3NlIGN1cnJlbnQg Y29ubmVjdGlvbiwgMCA9IHJlc3VtZS4KKyAgICBndWkgICAgID0gMSBpZiBjYWxsZWQgZnJvbSBH VUkgZGlhbG9nLCAwIG90aGVyd2lzZS4KKyAgUmV0dXJuczoKKyAgICAxIG9uIHN1Y2Nlc3MKKyAg ICAwIG9uIGZhaWx1cmUgYW5kIG5vIG1lc3NhZ2UgcHJpbnRlZCwgc2xtc2cgc2V0IHRvIGZhaWx1 cmUgbWVzc2FnZS4KKyAgIC05IG9uIGZhaWx1cmUgYW5kIG1lc3NhZ2UgcHJpbnRlZCwgZGl0dG8u CisqLworCisvKiB0aGVzZSBhcmUgYml0IGZsYWdzICovCisjZGVmaW5lIENYX1RBUEkgMQorI2Rl ZmluZSBDWF9QUFAgIDIKKyNkZWZpbmUgQ1hfU0xJUCA0CisKK2ludAorI2lmZGVmIENLX0FOU0lD CitjeF9zZXJpYWwoY2hhciAqZGV2aWNlLCAKKyAgICAgICAgICBpbnQgY3gsIGludCBzeCwgaW50 IHNociwgaW50IGZsYWcsIGludCBndWksIGludCBzcGVjaWFsKQorI2Vsc2UgLyogQ0tfQU5TSUMg Ki8KK2N4X3NlcmlhbChkZXZpY2UsIGN4LCBzeCwgc2hyLCBmbGFnLCBndWksIHNwZWNpYWwpCisg ICAgY2hhciAqIGRldmljZTsgaW50IGN4LCBzeCwgc2hyLCBmbGFnLCBndWksIHNwZWNpYWw7IAor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBjeF9zZXJpYWwgKi8geworICAgIGludCBpLCBuLCB4 LCB5LCBtc2c7CisgICAgaW50IF9sb2NhbCA9IC0xOworICAgIGNoYXIgKnM7CisKKyAgICBkZWJ1 ZyhGMTEwLCJjeF9zZXJpYWwgZGV2aWNlIixkZXZpY2UsMCk7CisgICAgcyA9IGRldmljZTsKKyAg ICBtc2cgPSAoZ3VpID09IDApICYmIG1zZ2ZsZzsJCS8qIFdoZXRoZXIgdG8gcHJpbnQgbWVzc2Fn ZXMgKi8KKyAgICBzdWNjZXNzID0gMDsKKworI2lmbmRlZiBOT0RJQUwKKyAgICBkaWFsc3RhID0g RElBX1VOSzsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJjeF9zZXJpYWwg bWRtdHlwIiwiIixtZG10eXApOworICAgIGlmIChjbHNrY29ubngoMSkgPCAwKQkJLyogQ2xvc2Ug dGhlIEtlcm1pdCBjb25uZWN0aW9uICovCisgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAg IGlmICgqcykgewkJCQkvKiBUaGV5IGdhdmUgYSBkZXZpY2UgbmFtZSAqLworCV9sb2NhbCA9IC0x OwkJCS8qIExldCB0dG9wZW4gZGVjaWRlIGFib3V0IGl0ICovCisgICAgfSBlbHNlIHsJCQkJLyog VGhleSBqdXN0IHNhaWQgInNldCBsaW5lIiAqLworCXMgPSBkZnR0eTsJCQkvKiBzbyBnbyBiYWNr IHRvIG5vcm1hbCB0dHkgKi8KKwlfbG9jYWwgPSBkZmxvYzsJCQkvKiBhbmQgbW9kZS4gKi8KKyAg ICB9CisjaWZkZWYgVk1TCisgICAgeworCWV4dGVybiBpbnQgb2tfdG9fc2hhcmU7CisJb2tfdG9f c2hhcmUgPSBzaHI7CisgICAgfQorI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgT1MyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVzdCB3YWl0IHVudGlsIGFmdGVyIHR0Y2xvcygp ICovCisjaWZkZWYgTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gY2hhbmdl IHRoZXNlIHNldHRpbmdzICAgICAgICovCisjaWZkZWYgQ0tfVEFQSQorICAgIHR0dGFwaSA9IHNw ZWNpYWwgJiBDWF9UQVBJOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKyNlbHNlCisgICAgdHRzbGlw ID0gc3BlY2lhbCAmIENYX1NMSVA7CisgICAgdHRwcHAgID0gc3BlY2lhbCAmIENYX1BQUDsKKyNl bmRpZiAvKiBOVCAqLworICAgIHR0c2hhcmUgPSBzaHI7CQkJLyogU2hhcmVhYmxlIGRldmljZSA/ ICovCisgICAgZGVidWcoRjExMCwiT1MyIFNFVCBQT1JUIGZpbmFsIHMiLHMsIiIpOworI2VuZGlm IC8qIE9TMiAqLworCisgICAgLyogT3BlbiB0aGUgbmV3IGxpbmUgKi8gICAgICAgIAorCisgICAg Y2tzdHJuY3B5KHR0bmFtZSxzLFRUTkFNTEVOKTsKKyAgICBpZiAoKHkgPSB0dG9wZW4ocywmX2xv Y2FsLG1kbXR5cCxjZHRpbW8pKSA+IC0xKSB7CisJY3h0eXBlID0gKG1kbXR5cCA+IDApID8gQ1hU X01PREVNIDogQ1hUX0RJUkVDVDsKKyNpZm5kZWYgTk9ESUFMCisJZGlhbHN0YSA9IERJQV9VTks7 CisjaWZkZWYgQ0tfVEFQSQorCS8qIGlmIHRoZSBsaW5lIGlzIGEgdGFwaSBkZXZpY2UsIHRoZW4g d2UgbmVlZCB0byBhdXRvLWV4ZWN1dGUgKi8KKwkvKiBTRVQgTU9ERU0gVFlQRSBUQVBJIC0gd2hp Y2ggd2UgZG8gdGhlIGVxdWl2YWxlbnQgb2YgaGVyZS4gICovCisJaWYgKHR0dGFwaSkgeworCSAg ICBleHRlcm4gaW50IHVzZXJtZG07CisJICAgIHVzZXJtZG0gPSAwOworCSAgICBpbml0bWRtKDM4 KTsJCS8qIEZyb20gY2t1ZGlhLmMgbl9UQVBJID09IDM4ICovCisJfQorI2VuZGlmIC8qIENLX1RB UEkgKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKwlzdWNjZXNzID0gMTsKKyAgICB9IGVsc2UgewkJ CQkvKiBGYWlsZWQgKi8KKyNpZmRlZiBPUzJPTkxZCisJaWYgKCFzdHJjbXAocyxkZnR0eSkpICAg LyogRG8gbm90IGdlbmVyYXRlIGFuIGVycm9yIHdpdGggZGZ0dHkgKi8KKwkgIDsKKwllbHNlIGlm ICh5ID09IC02ICYmIHR0c2xpcCkgeworCSAgICBtYWtlc3RyKCZzbG1zZywiQ2FuJ3QgYWNjZXNz IFNMSVAgZHJpdmVyIik7CisJICAgIGlmIChtc2cpIHByaW50ZigiPyVzXG4iLHNsbXNnKTsKKwl9 IGVsc2UgaWYgKHkgPT0gLTYgJiYgdHRwcHApIHsKKwkgICAgbWFrZXN0cigmc2xtc2csIkNhbid0 IGFjY2VzcyBQUFAgZHJpdmVyIik7CisJICAgIGlmIChtc2cpIHByaW50ZigiPyVzXG4iLHNsbXNn KTsKKwl9IGVsc2UKKyNlbmRpZiAvKiBPUzJPTkxZICovCisJICBpZiAoeSA9PSAtMikgeworCSAg ICAgIG1ha2VzdHIoJnNsbXNnLCJUaW1lZCBvdXQgLSBubyBjYXJyaWVyIik7CisJICAgICAgaWYg KG1zZykgeworCQkgIHByaW50ZigiPyVzXG4iLHNsbXNnKTsKKwkJICBpZiAoaGludHMpIHsKKwkJ ICAgICAgcHJpbnRmKCJcbioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCQkgICAgICBw cmludGYoCisJCSAgICAgICAiSElOVCAoVXNlIFNFVCBISU5UUyBPRkYgdG8gc3VwcHJlc3MgZnV0 dXJlIGhpbnRzKTpcbiIpOworCQkgICAgICBwcmludGYoCisJCQkgICJUcnkgU0VUIENBUlJJRVIg T0ZGIGFuZCBTRVQgTElORSBhZ2Fpbiwgb3IgZWxzZVxuIik7CisJCSAgICAgIHByaW50ZigiU0VU IE1PREVNLCBTRVQgTElORSwgYW5kIHRoZW4gRElBTC5cbiIpOworCQkgICAgICBwcmludGYoIioq KioqKioqKioqKioqKioqKioqKioqKipcblxuIik7CisJCSAgfQorCSAgICAgIH0KKwkgIH0gZWxz ZSBpZiAoeSA9PSAtMykgeworCSAgICAgIG1ha2VzdHIoJnNsbXNnLCJBY2Nlc3MgdG8gbG9jayBk ZW5pZWQiKTsKKwkgICAgICBpZiAobXNnKSB7CisjaWZkZWYgVU5JWAorCQkgIHByaW50ZigKKwkJ ICAgIlNvcnJ5LCB3cml0ZSBhY2Nlc3MgdG8gVVVDUCBsb2NrZmlsZSBkaXJlY3RvcnkgZGVuaWVk LlxuIik7CisjaWZuZGVmIE5PSElOVFMKKwkJICBpZiAoaGludHMpIHsKKwkJICAgICAgcHJpbnRm KCJcbioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCQkgICAgICBwcmludGYoCisJCSAg ICAgICAiSElOVCAoVXNlIFNFVCBISU5UUyBPRkYgdG8gc3VwcHJlc3MgZnV0dXJlIGhpbnRzKTpc biIpOworCQkgICAgICBwcmludGYoCisJICAiUGxlYXNlIHJlYWQgdGhlIGluc3RhbGxhdGlvbiBp bnN0cnVjdGlvbnMgZmlsZSwgJXNja3VpbnMudHh0LFxuIiwKKwkgICAgICAgICAgICAgICAgICAg ICBrX2luZm9fZGlyID8ga19pbmZvX2RpciA6ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisJCSAgICAgIHByaW50ZigKKwkgICJvciB0aGUgVU5JWCBhcHBlbmRpeCBvZiB0aGUg bWFudWFsLCBcIlVzaW5nIEMtS2VybWl0XCJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKwkJICAgICAgcHJpbnRmKAorICAgICAgICAgICJvciB2aXNpdCBodHRwOi8vd3d3LmNv bHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwgXG4iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisJCSAgICAgIHByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4i KTsKKwkJICB9CisjZW5kaWYgLyogTk9ISU5UUyAqLworI2Vsc2UKKwkJICBwcmludGYoIlNvcnJ5 LCBhY2Nlc3MgdG8gbG9jayBkZW5pZWQ6ICVzXG4iLHMpOworI2VuZGlmIC8qIFVOSVggKi8KKwkg ICAgICB9CisJICB9IGVsc2UgaWYgKHkgPT0gLTQpIHsKKwkgICAgICBtYWtlc3RyKCZzbG1zZywi QWNjZXNzIHRvIGRldmljZSBkZW5pZWQiKTsKKwkgICAgICBpZiAobXNnKSB7CisJCSAgcHJpbnRm KCJTb3JyeSwgYWNjZXNzIHRvIGRldmljZSBkZW5pZWQ6ICVzXG4iLHMpOworI2lmZGVmIFVOSVgK KyNpZm5kZWYgTk9ISU5UUworCQkgIGlmIChoaW50cykgeworCQkgICAgICBwcmludGYoIlxuKioq KioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJCSAgICAgIHByaW50ZigKKwkJICAgICAgIkhJ TlQgKFVzZSBTRVQgSElOVFMgT0ZGIHRvIHN1cHByZXNzIGZ1dHVyZSBoaW50cyk6XG4iKTsKKwkJ ICAgICAgcHJpbnRmKAorCSAgICAiUGxlYXNlIHJlYWQgdGhlIGluc3RhbGxhdGlvbiBpbnN0cnVj dGlvbnMgZmlsZSwgJXNja3VpbnMudHh0LFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAga19pbmZvX2RpciA/IGtfaW5mb19kaXIgOiAiIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworCQkgICAgICBwcmludGYoCisJICAgICJvciB0aGUgVU5JWCBhcHBlbmRpeCBvZiB0 aGUgbWFudWFsLCBcIlVzaW5nIEMtS2VybWl0XCIuXG4iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisJCSAgICAgIHByaW50ZigiKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4i KTsKKwkJICB9CisjZW5kaWYgLyogTk9ISU5UUyAqLworI2VuZGlmIC8qIFVOSVggKi8KKwkgICAg ICB9CisJICB9IGVsc2UgaWYgKHkgPT0gLTUpIHsKKwkgICAgICBtYWtlc3RyKCZzbG1zZywiRGV2 aWNlIGlzIGluIHVzZSBvciB1bmF2YWlsYWJsZSIpOworCSAgICAgIGlmIChtc2cpCisjaWZkZWYg Vk1TCisJCXByaW50ZigKKwkJICAiU29ycnksIGRldmljZSBpcyBpbiB1c2Ugb3Igb3RoZXJ3aXNl IHVuYXZhaWxhYmxlOiAlc1xuIixzKTsKKyNlbHNlCisJICAgICAgcHJpbnRmKCJTb3JyeSwgZGV2 aWNlIGlzIGluIHVzZTogJXNcbiIscyk7CisjZW5kaWYgLyogVk1TICovCisJICB9IGVsc2UgewkJ CS8qIE90aGVyIGVycm9yLiAqLworCSAgICAgIG1ha2VzdHIoJnNsbXNnLCJEZXZpY2Ugb3BlbiBm YWlsZWQiKTsKKwkgICAgICBpZiAoCisjaWZkZWYgVk1TCisJCSAgMQorI2Vsc2UKKwkJICBlcnJu bworI2VuZGlmIC8qIFZNUyAqLworCQkgICkgeworCQkgIGludCB4OwkJLyogRmluZCBhIHNhZmUs IGxvbmcgYnVmZmVyICovCisJCSAgbWFrZXN0cigmc2xtc2csY2tfZXJyc3RyKCkpOworI2lmbmRl ZiBWTVMKKwkJICBkZWJ1ZyhGMTExLCJjeF9zZXJpYWwgc2VyaWFsIGVycm5vIixzbG1zZyxlcnJu byk7CisjZW5kaWYgLyogVk1TICovCisJCSAgaWYgKG1zZykKKwkJICAgIHByaW50ZigiQ29ubmVj dGlvbiB0byAlcyBmYWlsZWQ6ICVzXG4iLHMsc2xtc2cpOworCSAgICAgIH0gZWxzZSBpZiAobXNn KQorCQlwcmludGYoIlNvcnJ5LCBjYW4ndCBvcGVuIGNvbm5lY3Rpb246ICVzXG4iLHMpOworCSAg fQorICAgIH0KKyAgICBuZXR3b3JrID0gMDsJCQkvKiBObyBuZXR3b3JrIGNvbm5lY3Rpb24gYWN0 aXZlICovCisgICAgc3BlZWQgPSB0dGdzcGQoKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAg ICAgbG9jYWwgPSBkZmxvYzsgICAgICAgICAgICAgICAgICAvKiBHbyBiYWNrIHRvIG5vcm1hbCAq LworI2lmbmRlZiBNQUMKKyAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSxkZnR0eSxUVE5BTUxFTik7 IC8qIFJlc3RvcmUgZGVmYXVsdCB0dHkgbmFtZSAqLworI2VuZGlmIC8qIE1BQyAqLworICAgICAg ICBoYXZlbGluZSA9IDA7CisgICAgICAgIGlmIChtZG10eXAgPCAwKSB7ICAgICAgICAgICAgICAg LyogU3dpdGNoaW5nIGZyb20gbmV0IHRvIGFzeW5jPyAqLworICAgICAgICAgICAgaWYgKG1kbXNh diA+IC0xKSAgICAgICAgICAgIC8qIFJlc3RvcmUgbW9kZW0gdHlwZSBmcm9tIGxhc3QgKi8KKyAg ICAgICAgICAgICAgbWRtdHlwID0gbWRtc2F2OyAgICAgICAgICAvKiBTRVQgTU9ERU0gY29tbWFu ZCwgaWYgYW55LiAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBtZG10eXAgPSAw OworICAgICAgICAgICAgbWRtc2F2ID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuKG1z ZyA/IC05IDogMCk7CQkvKiBSZXR1cm4gZmFpbHVyZSAqLworICAgIH0KKyAgICBpZiAoX2xvY2Fs ID4gLTEpCisgICAgICBsb2NhbCA9IF9sb2NhbDsJCQkvKiBPcGVuZWQgb2ssIHNldCBsb2NhbC9y ZW1vdGUuICovCisgICAgbWFrZXN0cigmc2xtc2csTlVMTCk7CQkvKiBFcmFzZSBTRVQgTElORSBt ZXNzYWdlICovCisgICAgY2tzdHJuY3B5KHR0bmFtZSxzLFRUTkFNTEVOKTsgICAgICAgLyogQ29w eSBuYW1lIGludG8gcmVhbCBwbGFjZS4gKi8KKyAgICBkZWJ1ZyhGMTEwLCJjeF9zZXJpYWwgb2si LHR0bmFtZSwwKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKChyZWxpYWJsZSAhPSBTRVRfT0ZG IHx8ICFzZXRyZWxpYWJsZSkpIC8qIEFzc3VtZSBub3QgcmVsaWFibGUuICovCisgICAgICByZWxp YWJsZSA9IFNFVF9PRkY7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgeGN4X3NlcmlhbDoKKyAg ICBzZXRmbG93KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgYXBwcm9wcmlhdGUg ZmxvdyBjb250cm9sICovCisgICAgaGF2ZWxpbmUgPSAxOworI2lmZGVmIENLTE9HRElBTAorICAg ICAgZG9sb2dsaW5lKCk7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyNpZm5kZWYgTk9TUEwK KyAgICBpZiAobG9jYWwpIHsKKyAgICAgICAgaWYgKG5tYWMpIHsgICAgICAgICAgICAgICAgICAg ICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCisgICAgICAgICAgICBpbnQgazsgICAgICAgICAg ICAgICAgICAgICAgLyogWWVzICovCisgICAgICAgICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9v cGVuIixubWFjKTsgICAvKiBMb29rIHRoaXMgdXAgKi8KKyAgICAgICAgICAgIGlmIChrID49IDAp IHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworICAgICAgICAgICAgICAg IGlmIChkb2RvKGssdHRuYW1lLDApID4gLTEpICAgICAgLyogc2V0IGl0IHVwLCAqLworICAgICAg ICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUg aXQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAq LworCisgICAgaWYgKGxvY2FsICYmIChjeCB8fCBzeCkpIHsgICAgICAgICAgLyogL0NPTk5FQ1Qg b3IgL1NFUlZFUiBzd2l0Y2ggZ2l2ZW4gKi8KKyAgICAgICAgZXh0ZXJuIGludCBjYXJyaWVyOwor ICAgICAgICBpZiAoY2FycmllciAhPSBDQVJfT0ZGKSB7CS8qIExvb2tpbmcgZm9yIGNhcnJpZXI/ ICovCisgICAgICAgICAgICAvKiBPcGVuKCkgdHVybnMgb24gRFRSIC0tIHdhaXQgdXAgdG8gYSBz ZWNvbmQgZm9yIENEIHRvIGNvbWUgdXAgKi8KKyAgICAgICAgICAgIGludCBpLCB4OworICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsgIC8qIFdBSVQgMSBDRC4uLiAqLworICAg ICAgICAgICAgICAgIHggPSB0dGdtZG0oKTsKKyAgICAgICAgICAgICAgICBpZiAoeCA8IDAgfHwg eCAmIEJNX0RDRCkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG1z bGVlcCgxMDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjeCkgeyAg ICAgICAgICAgICAgICAgICAgICAgLyogL0NPTk5FQ1QgKi8KKyAgICAgICAgICAgIC8qIENvbW1h bmQgd2FzIGNvbmZpcm1lZCBzbyB3ZSBjYW4gcHJlLXBvcCBjb21tYW5kIGxldmVsLiAqLworICAg ICAgICAgICAgLyogVGhpcyBpcyBzbyBDT05ORUNUIG1vZHVsZSB3b24ndCB0aGluayB3ZSdyZSBl eGVjdXRpbmcgYSAqLworICAgICAgICAgICAgLyogc2NyaXB0IGlmIENPTk5FQ1Qgd2FzIHRoZSBm aW5hbCBjb21tYW5kIGluIHRoZSBzY3JpcHQuICovCisKKyAgICAgICAgICAgIGlmIChjbWRsdmwg PiAwKQorICAgICAgICAgICAgICBwcmVwb3AoKTsKKyNpZm5kZWYgTk9ESUFMCisgICAgICAgICAg ICBkaWFsc3RhID0gRElBX1VOSzsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZmRlZiBMT0NVUwor ICAgICAgICAgICAgaWYgKGF1dG9sb2N1cykgeworICAgICAgICAgICAgICAgIHNldGxvY3VzKDEs MSk7CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTE9DVVMgKi8KKyAgICAgICAgICAgIHN1Y2Nl c3MgPSBkb2NvbmVjdCgwLCBjbWRsdmwgPT0gMCA/IDEgOiAwKTsKKyAgICAgICAgICAgIGlmICh0 dGNoaygpIDwgMCkKKyAgICAgICAgICAgICAgZG9sb2dlbmQoKTsKKyAgICAgICAgICAgIHJldHVy bihzdWNjZXNzKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgICAgIH0gZWxzZSBpZiAoc3gpIHsgICAg ICAgICAgICAgICAgLyogL1NFUlZFUiAqLworICAgICAgICAgICAgc3N0YXRlID0gJ3gnOworI2lm ZGVmIE1BQworICAgICAgICAgICAgd2hhdCA9IFdfUkVDVjsKKyAgICAgICAgICAgIHNjcmNyZWF0 ZSgpOworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICAgICAgaWYgKGxvY2FsKSBkaXNwbGEgPSAx OworI2lmZGVmIEFNSUdBCisgICAgICAgICAgICByZXFvZmYoKTsgICAgICAgICAgICAgICAgICAg LyogTm8gRE9TIHJlcXVlc3RvcnMgd2hpbGUgc2VydmVyICovCisjZW5kaWYgLyogQU1JR0EgKi8K KyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgfQorICAgIH0KKyNpZm5kZWYgTk9ESUFMCisg ICAgZGlhbHN0YSA9IERJQV9VTks7CisjZW5kaWYgLyogTk9ESUFMICovCisjaWZkZWYgTE9DVVMK KyAgICBpZiAoYXV0b2xvY3VzKSB7CisgICAgICAgIHNldGxvY3VzKDEsMSk7CisgICAgfQorI2Vu ZGlmIC8qIExPQ1VTICovCisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKworCisvKiBTIEUg VCBMIEkgTiAtLSBwYXJzZSBuYW1lIG9mIGFuZCB0aGVuIG9wZW4gY29tbXVuaWNhdGlvbiBkZXZp Y2UuICovCisvKgorICBDYWxsIHdpdGg6CisgICAgeHggPT0gWFlMSU5FIGZvciBhIHNlcmlhbCAo dHR5KSBsaW5lLCBYWUhPU1QgZm9yIGEgbmV0d29yayBob3N0LAorICAgIHp6ID09IDAgbWVhbnMg aWYgdXNlciBkb2Vzbid0IGdpdmUgYSBkZXZpY2UgbmFtZSwgY29udGludWUgY3VycmVudAorICAg ICAgICAgICAgYWN0aXZlIGNvbm5lY3Rpb24gKGlmIGFueSk7CisgICAgenogIT0gMCBtZWFucyBp ZiB1c2VyIGRvZXNuJ3QgZ2l2ZSBhIGRldmljZSBuYW1lLCB0aGVuIGNsb3NlIHRoZQorICAgICAg ICAgICAgY3VycmVudCBjb25uZWN0aW9uIGFuZCByZXN0b3JlIHRoZSBkZWZhdWx0IGNvbW11bmlj YXRpb24gZGV2aWNlLgorICAgIGZjID09IDAgdG8ganVzdCBtYWtlIHRoZSBjb25uZWN0aW9uLCAx IHRvIGFsc28gQ09OTkVDVCAoZS5nLiAidGVsbmV0IikuCisqLworaW50CitzZXRsaW4oeHgsIHp6 LCBmYykgCisgICAgaW50IHh4LCB6eiwgZmM7IAoreworICAgIGV4dGVybiBjaGFyIHB3YnVmW10s ICogZ19wc3dkOworICAgIGV4dGVybiBpbnQgcHdmbGcsIHB3Y3J5cHQsIGdfcGZsZywgZ19wY3B0 LCBub2xvY2FsOworICAgIGludCB3YWl0OworICAgIC8qIGludCB0bl93YWl0X3N2OyAqLworICAg IGludCBteW5ldDsKKyAgICBpbnQgX2xvY2FsID0gLTE7CisgICAgaW50IGMsIGksIGhhdmVzd2l0 Y2ggPSAwOworICAgIGludCBoYXZldXNlciA9IDA7CisgICAgaW50IGdldHZhbCA9IDA7CisgICAg aW50IHdpbGQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZXNwZWMgaGFzIHdpbGRj YXJkcyAqLworICAgIGludCBjeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5l Y3QgYWZ0ZXIgKi8KKyAgICBpbnQgc3ggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBC ZWNvbWUgc2VydmVyIGFmdGVyICovCisgICAgaW50IGFfdHlwZSA9IC0xOyAgICAgICAgICAgICAg ICAgICAgLyogQXV0aGVudGljYXRpb24gdHlwZSAqLworICAgIGludCBlX3R5cGUgPSAtMTsgICAg ICAgICAgICAgICAgICAgIC8qIFRlbG5ldCAvRU5DUllQVCB0eXBlICovCisjaWZkZWYgQ0tfRU5D UllQVElPTgorICAgIGludCBlbmNyeXB0ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEVuY3J5 cHRlZD8gKi8KKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgaW50IHNociA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogU2hhcmUgc2VyaWFsIGRldmljZSAqLworICAgIGludCBj b25maXJtZWQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgaGFzIGJlZW4gZW50ZXJl ZCAqLworICAgIHN0cnVjdCBGREIgc3csIHR4LCBueDsKKyNpZmRlZiBPUzIKKyAgICBzdHJ1Y3Qg RkRCIGZsOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgY2hhciAqIHNzOworI2lmZGVmIFRDUFNP Q0tFVAorICAgIGludCByYXdmbGcgPSAwOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisgICAg Y2hhciBzcnZidWZbU1JWQlVGU0laKzFdOworCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICBp bnQgeHh0YXBpID0gMDsKKyNlbHNlCisgICAgaW50IHh4c2xpcCA9IDAsIHh4cHBwID0gMDsKKyNl bmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaW50IGRvc3NoID0gMDsKKwor ICAgIGRlYnVnKEYxMDEsInNldGxpbiBmYyIsIiIsZmMpOworICAgIGRlYnVnKEYxMDEsInNldGxp biB6eiIsIiIsenopOworICAgIGRlYnVnKEYxMDEsInNldGxpbiB4eCIsIiIseHgpOworCisjaWZk ZWYgU1NIQ01ECisgICAgaWYgKHh4ID09IFhYU1NIKSB7ICAgICAgICAgICAgICAgICAgLyogU1NI IGJlY29tZXMgUFRZIFNTSCAuLi4gKi8KKyAgICAgICAgZG9zc2ggPSAxOworICAgICAgICB4eCA9 IFhZSE9TVDsKKyAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgic3NoICIsbGluZSw0LDApKSB7IC8q IDIwMTAvMDMvMDEgKi8KKyAgICAgICAgZG9zc2ggPSAxOworICAgICAgICB4eCA9IFhZSE9TVDsK KyAgICB9CisgICAgZGVidWcoRjEwMSwic2V0bGluIGRvc3NoIiwiIixkb3NzaCk7CisjZW5kaWYg LyogU1NIQ01EICovCisKKyNpZmRlZiBUTkNPREUKKyAgICAvKiB0bl93YWl0X3N2ID0gdG5fd2Fp dF9mbGc7ICovCisgICAgd2FpdCA9IHRuX3dhaXRfZmxnOworI2Vsc2UKKyAgICAvKiB0bl93YWl0 X3N2ID0gMDsgKi8KKyAgICB3YWl0ID0gMDsKKyNlbmRpZiAvKiBUTkNPREUgKi8KKworICAgIG15 bmV0ID0gbmV0dHlwZTsKKworICAgIGlmIChub2xvY2FsKSB7CisgICAgICAgIG1ha2VzdHIoJnNs bXNnLCJNYWtpbmcgY29ubmVjdGlvbnMgaXMgZGlzYWJsZWQiKTsKKyAgICAgICAgcHJpbnRmKCI/ U29ycnksIG1ha2luZyBjb25uZWN0aW9ucyBpcyBkaXNhYmxlZFxuIik7CisgICAgICAgIHJldHVy bigtOSk7CisgICAgfQorICAgIGlmIChuZXRzYXZlID4gLTEpCisgICAgICBuZXR0eXBlID0gbmV0 c2F2ZTsKKworICAgIGlmIChmYyAhPSAwIHx8IHp6ID09IDApICAgICAgICAgICAgIC8qIFByZXNl dCAvQ09OTkVDVCBzd2l0Y2ggKi8KKyAgICAgIGN4ID0gMTsKKworICAgIGRlYnVnKEYxMDEsInNl dGxpbiBjeCIsIiIsY3gpOworCisgICAgKnNydmJ1ZiA9IE5VTDsKKworICAgIGxpbmVbMF0gPSBO VUw7CisgICAgcyA9IGxpbmU7CisKKyNpZmRlZiBORVRDT05OCisjaWZkZWYgQ0tfU0VDVVJJVFkK KyAgICBpZiAodG1wc3RyaW5nKQorICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcsTlVMTCk7Cisj ZW5kaWYgLyogQ0tfU0VDVVJJVFkgKi8KKyAgICBpZiAodG1wdXNyaWQpCisgICAgICAgIG1ha2Vz dHIoJnRtcHVzcmlkLE5VTEwpOworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworICAgIGF1dG9mbG93 ID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBhdXRvbWF0aWMgZmxvdyBzZXR0 aW5nICovCisKKyAgICBpZiAoeHggPT0gWFlIT1NUKSB7ICAgICAgICAgICAgICAgICAvKiBTRVQg SE9TVCA8aG9zdG5hbWU+ICovCisjaWZuZGVmIE5FVENPTk4KKyAgICAgICAgbWFrZXN0cigmc2xt c2csIk5ldHdvcmsgY29ubmVjdGlvbnMgbm90IHN1cHBvcnRlZCIpOworICAgICAgICBwcmludGYo Ij8lc1xuIixzbG1zZyk7CisgICAgICAgIHJldHVybigtOSk7CisjZWxzZSAvKiBORVRDT05OICov CisjaWZuZGVmIE5PUFVTSAorICAgICAgICBpZiAoKG15bmV0ID09IE5FVF9DTUQgfHwgbXluZXQg PT0gTkVUX1BUWSB8fCBkb3NzaCkgJiYgbm9wdXNoKSB7CisgICAgICAgICAgICBtYWtlc3RyKCZz bG1zZywiQWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGlzIGRpc2FibGVkIik7CisgICAgICAg ICAgICBwcmludGYoIj9Tb3JyeSwgYWNjZXNzIHRvIGV4dGVybmFsIGNvbW1hbmRzIGlzIGRpc2Fi bGVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBO T1BVU0ggKi8KKworI2lmZGVmIFNTSENNRAorICAgICAgICBpZiAoZG9zc2gpIHsgICAgICAgICAg ICAgICAgICAgIC8qIFNTSCBjb25uZWN0aW9uIHZpYSBwdHkgKi8KKyAgICAgICAgICAgIGludCBr OworCSAgICBleHRlcm4gaW50IHR0eWZkOwkJLyogMjAxMC8wMy8wMSAqLworICAgICAgICAgICAg ayA9IGNrc3RybmNweShsaW5lLCBzc2hjbWQgPyBzc2hjbWQgOiBkZWZzc2hjbWQsIExJTkJVRlNJ Wik7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJzZXRsaW4gc3NoY21kIDEiLGxpbmUsayk7Cisg ICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiT3B0aW9uYWwgc3dpdGNoZXMgYW5kIGhvc3RuYW1l IiwiIiwmcyx4eHN0cmluZykpPDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKworICAgICAg ICAgICAgLyogMjAxMC0wMy0zMCAqLworCSAgICBpZiAoISpzICYmIHR0eWZkIDwgMCAmJiAhY2tz dHJjbXAoInNzaCAiLHR0bmFtZSw0LDApKSB7IAorCQl4ID0gY2tzdHJuY3B5KGxpbmUsdHRuYW1l LExJTkJVRlNJWik7CisJICAgIH0gZWxzZSB7CisJCWlmICghKnMpIHsKKwkJICAgIHByaW50Zigi P1NTSCB0byB3aGVyZT9cbiIpOworCQkgICAgcmV0dXJuKC05KTsKKwkJfQorCQlpZiAoayA8IExJ TkJVRlNJWikgeworCQkgICAgbGluZVtrKytdID0gU1A7CisJCSAgICBsaW5lW2tdID0gTlVMOwor CQkgICAgZGVidWcoRjExMSwic2V0bGluIHNzaGNtZCAyIixsaW5lLGspOworCQl9IGlmIChrIDwg TElOQlVGU0laKSB7CisJCSAgICBja3N0cm5jcHkoJmxpbmVba10scyxMSU5CVUZTSVotayk7CisJ CSAgICBkZWJ1ZyhGMTExLCJzZXRsaW4gc3NoY21kIDMiLGxpbmUsayk7CisJCX0gZWxzZSB7CisJ CSAgICBwcmludGYoIj9Ub28gbG9uZ1xuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJICAg IH0KKwkgICAgeCA9IGN4X25ldCggTkVUX1BUWSwgICAgICAgICAgICAgICAgLyogbmV0d29yayB0 eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAv KiBwcm90b2NvbCAobm90IHVzZWQpICovCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCAg ICAgICAgICAgICAgICAgICAvKiBob3N0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCAgICAgICAgICAgICAgICAgICAvKiBzZXJ2aWNlIChub3QgdXNlZCkgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIHVzZXJuYW1lIChub3QgdXNl ZCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgIC8q IHBhc3N3b3JkIChub3QgdXNlZCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgKG5vdCB1c2VkKSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgLTEsLTEsLTEsICAgICAgICAgICAgICAgLyogcGFyYW1zIDEtMyAobm90IHVzZWQp ICovCisgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAvKiBj b25uZWN0IGltbWVkaWF0ZWx5ICovCisgICAgICAgICAgICAgICAgICAgICAgICBzeCwgICAgICAg ICAgICAgICAgICAgICAvKiBzZXJ2ZXI/ICovCisgICAgICAgICAgICAgICAgICAgICAgICB6eiwg ICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBjdXJyZW50PyAqLworICAgICAgICAgICAgICAg ICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgLyogbm90IGd1aSAqLworCSAgICBkZWJ1 ZyhGMTExLCJzZXRsaW4gY3hfbmV0IixsaW5lLHgpOworCSAgICByZXR1cm4oeCk7CisgICAgICAg IH0KKyNlbmRpZiAvKiBTU0hDTUQgKi8KKworLyoKKyAgSGVyZSB3ZSBwYXJzZSBvcHRpb25hbCBz d2l0Y2hlcyBhbmQgdGhlbiB0aGUgaG9zdG5hbWUgb3Igd2hhdGV2ZXIsCisgIHdoaWNoIGRlcGVu ZHMgb24gdGhlIG5ldHdvcmsgdHlwZS4gIFRoZSB0cmlja3kgcGFydCBpcywgdGhlIG5ldHdvcmsg dHlwZQorICBjYW4gYmUgc2V0IGJ5IGEgc3dpdGNoLgorKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAg ICAgbWFrZXN0cigmZ19wc3dkLHB3YnVmKTsgICAgICAgICAvKiBTYXZlIGdsb2JhbCBwd2J1ZiAq LworICAgICAgICBnX3BmbGcgPSBwd2ZsZzsgICAgICAgICAgICAgICAgIC8qIGFuZCBmbGFnICov CisgICAgICAgIGdfcGNwdCA9IHB3Y3J5cHQ7CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgICAg ICBjb25maXJtZWQgPSAwOworICAgICAgICBoYXZlc3dpdGNoID0gMDsKKyNpZmRlZiBORVRGSUxF CisgICAgICAgIGlmIChteW5ldCAhPSBORVRfRklMRSkgeworI2VuZGlmIC8qIE5FVEZJTEUgKi8K KyAgICAgICAgICAgIHNzID0gKG15bmV0ID09IE5FVF9DTUQgfHwgbXluZXQgPT0gTkVUX1BUWSkg PworICAgICAgICAgICAgICAiQ29tbWFuZCwgb3Igc3dpdGNoIiA6CisgICAgICAgICAgICAgICAg KG15bmV0ID09IE5FVF9UQ1BBIHx8IG15bmV0ID09IE5FVF9UQ1BCCisgICAgICAgICAgICAgICAg ICB8fCBteW5ldCA9PSBORVRfU1NIKSA/CisgICAgICAgICAgICAgICAgICAiSG9zdG5hbWUsIGlw LWFkZHJlc3MsIG9yIHN3aXRjaCIgOgorICAgICAgICAgICAgICAgICAgICAiSG9zdCBvciBzd2l0 Y2giOworICAgICAgICAgICAgaWYgKGZjKSB7CisgICAgICAgICAgICAgICAgaWYgKG15bmV0ID09 IE5FVF9UQ1BCICYmCisgICAgICAgICAgICAgICAgICAgICh0dG5wcm90byA9PSBOUF9URUxORVQg fHwgdHRucHJvdG8gPT0gTlBfS0VSTUlUKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobnNo dGVsdGFiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlc3dpdGNoKys7CisgICAgICAg ICAgICAgICAgICAgICAgICBjbWZkYmkoJnN3LF9DTUtFWSxzcywiIiwiIixuc2h0ZWx0YWIsNCx4 eHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h0ZWx0YWIsJm54KTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBSTE9HQ09ERQor ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG15bmV0ID09IE5FVF9UQ1BCICYmIHR0bnByb3RvID09 IE5QX1JMT0dJTikgeworICAgICAgICAgICAgICAgICAgICBpZiAobnNocmxndGFiKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBoYXZlc3dpdGNoKys7CisgICAgICAgICAgICAgICAgICAgICAg ICBjbWZkYmkoJnN3LF9DTUtFWSxzcywiIiwiIixuc2hybGd0YWIsNCx4eHN0cmluZywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaHJsZ3RhYiwmbngpOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFJMT0dDT0RFICovCisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhhdmVzd2l0Y2grKzsKKyAgICAgICAgICAg ICAgICBjbWZkYmkoJnN3LF9DTUtFWSxzcywiIiwiIixuc2h0YWIsNCx4eHN0cmluZyxzaHRhYiwm bngpOworICAgICAgICAgICAgfQorI2lmZGVmIE5FVEZJTEUKKyAgICAgICAgfQorI2VuZGlmIC8q IE5FVEZJTEUgKi8KKyAgICAgICAgaWYgKG15bmV0ID09IE5FVF9UQ1BCIHx8IG15bmV0ID09IE5F VF9TTEFUIHx8CisJICAgIG15bmV0ID09IE5FVF9TU0ggIHx8IG15bmV0ID09IE5FVF9ERUMpIHsK KyAgICAgICAgICAgIGNtZmRiaSgmbngsX0NNRkxELCJIb3N0IiwiIiwiIiwwLDAseHhzdHJpbmcs TlVMTCxOVUxMKTsKKyNpZmRlZiBORVRGSUxFCisgICAgICAgIH0gZWxzZSBpZiAobXluZXQgPT0g TkVUX0ZJTEUpIHsKKyAgICAgICAgICAgIGNtZmRiaSgmbngsX0NNSUZJLCJGaWxlbmFtZSIsIiIs IiIsMCwwLHh4c3RyaW5nLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogTkVURklMRSAqLworI2lmZGVm IFBUWU9SUElQRQorICAgICAgICB9IGVsc2UgaWYgKG15bmV0ID09IE5FVF9DTUQgfHwgbXluZXQg PT0gTkVUX1BUWSkgeworICAgICAgICAgICAgY21mZGJpKCZueCxfQ01UWFQsIkNvbW1hbmQiLCIi LCIiLDAsMCx4eHN0cmluZyxOVUxMLE5VTEwpOworI2VuZGlmIC8qIFBUWU9SUElQRSAqLworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY21mZGJpKCZueCxfQ01UWFQsIkhvc3QiLCIiLCIi LDAsMCx4eHN0cmluZyxOVUxMLE5VTEwpOworICAgICAgICB9CisgICAgICAgIHdoaWxlICgxKSB7 CisgICAgICAgICAgICB4ID0gY21mZGIoaGF2ZXN3aXRjaCA/ICZzdyA6ICZueCk7CisgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJzZXRsaW4gY21mZGIiLCIiLHgpOworICAgICAgICAgICAgaWYgKHgg PCAwKQorICAgICAgICAgICAgICBpZiAoeCAhPSAtMykKKyAgICAgICAgICAgICAgICByZXR1cm4o eCk7CisgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgIGlmICgoeCA9 IGNtY2ZtKCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlybWVkID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlICE9IF9DTUtFWSkgeyAgICAvKiBOb3Qg YSBzd2l0Y2ggKi8KKyAgICAgICAgICAgICAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVz dWx0LExJTkJVRlNJWik7IC8qIFNhdmUgdGhlIGRhdGEgKi8KKyAgICAgICAgICAgICAgICBzID0g bGluZTsgICAgICAgICAgICAgICAgICAgICAgLyogdGhhdCB3YXMgcGFyc2VkLi4uICovCisgICAg ICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUlGSSkgeworICAgICAgICAgICAg ICAgICAgICB3aWxkID0gY21yZXN1bHQubnJlc3VsdDsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTVRYVCkgeworICAgICAgICAgICAgICAgICAgICBjb25m aXJtZWQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAg ICAgICAgICAgICAgICAvKiBhbmQgYnJlYWsgb3V0IG9mIHRoaXMgbG9vcCAqLworICAgICAgICAg ICAgfQorICAgICAgICAgICAgYyA9IGNtZ2JyaygpOyAgICAgICAgICAgICAgIC8qIEhhdmUgc3dp dGNoIC0gZ2V0IGJyZWFrIGNoYXJhY3RlciAqLworICAgICAgICAgICAgZ2V0dmFsID0gKGMgPT0g JzonIHx8IGMgPT0gJz0nKTsgLyogTXVzdCBwYXJzZSBhbiBhZ3VtZW50PyAqLworICAgICAgICAg ICAgaWYgKGdldHZhbCAmJiAhKGNtcmVzdWx0LmtmbGFncyAmIENNX0FSRykpIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7 CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgICAg ICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisgICAgICAg ICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAo Y21yZXN1bHQubnJlc3VsdCkgeyAvKiBJdCdzIGEgc3dpdGNoLi4gKi8KKyAgICAgICAgICAgICAg Y2FzZSBTTF9DTlg6ICAgICAgICAgICAgICAvKiAvQ09OTkVDVCAqLworICAgICAgICAgICAgICAg IGN4ID0gMTsKKyAgICAgICAgICAgICAgICBzeCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgIGNhc2UgU0xfU1JWOiAgICAgICAgICAgICAgLyogL1NFUlZFUiAqLwor ICAgICAgICAgICAgICAgIGN4ID0gMDsKKyAgICAgICAgICAgICAgICBzeCA9IDE7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisjaWZkZWYgTkVUQ01ECisgICAgICAgICAgICAgIGNhc2UgU0xfQ01E OiAgICAgICAgICAgICAgLyogL0NPTU1BTkQgKi8KKyAgICAgICAgICAgICAgICBuZXRzYXZlID0g bXluZXQ7CisgICAgICAgICAgICAgICAgbXluZXQgPSBORVRfQ01EOworICAgICAgICAgICAgICAg IGJyZWFrOworI2VuZGlmIC8qIE5FVENNRCAqLworI2lmZGVmIE5FVFBUWQorICAgICAgICAgICAg ICBjYXNlIFNMX1BUWTogICAgICAgICAgICAgIC8qIC9QVFkgKi8KKyAgICAgICAgICAgICAgICBu ZXRzYXZlID0gbXluZXQ7CisgICAgICAgICAgICAgICAgbXluZXQgPSBORVRfUFRZOworICAgICAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFBUWSAqLworICAgICAgICAgICAgICBjYXNl IFNMX05FVDogICAgICAgICAgICAgIC8qIC9ORVRXT1JLLVRZUEUgKi8KKyAgICAgICAgICAgICAg ICBpZiAoKHggPSBjbWtleShuZXRjbWQsbm5ldHMsIiIsIiIseHhzdHJpbmcpKSA8IDApCisgICAg ICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgbXluZXQgPSB4OworICAg ICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgQ0tfU0VDVVJJVFkKKyAgICAgICAgICAgICAg Y2FzZSBTTF9QU1c6ICAgICAgICAgICAgICAvKiAvUEFTU1dPUkQ6ICovCisgICAgICAgICAgICAg ICAgaWYgKCFnZXR2YWwpCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICBkZWJvayA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlBhc3N3b3JkIiwi Iiwmcyx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykg eworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wc3RyaW5nLCIiKTsKKyAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAgICAgICAgICBpZiAo KHggPSAoaW50KXN0cmxlbihzKSkgPiBQV0JVRkwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IG1ha2VzdHIoJnNsbXNnLCJJbnRlcm5hbCBlcnJvciIpOworICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/U29ycnksIHRvbyBsb25nIC0gbWF4ID0gJWRcbiIsUFdCVUZMKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wc3RyaW5nLHMpOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19TRUNVUklUWSAqLworCisg ICAgICAgICAgICAgIGNhc2UgU0xfVUlEOiAgICAgICAgICAgICAgLyogL1VTRVJJRDogKi8KKyAg ICAgICAgICAgICAgICBpZiAoIWdldHZhbCkKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKCJVc2VyaWQiLCIiLCZzLHh4c3RyaW5nKSkgPCAw KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBtYWtlc3RyKCZ0bXB1c3JpZCwiIik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzID0g YnJzdHJpcChzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gKGludClzdHJsZW4ocykp ID4gNjMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNsbXNnLCJJbnRlcm5h bCBlcnJvciIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/U29ycnksIHRvbyBs b25nIC0gbWF4ID0gJWRcbiIsNjMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC05 KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0 bXB1c3JpZCxzKTsKKyAgICAgICAgICAgICAgICAgICAgaGF2ZXVzZXIgPSAxOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIENLX0FVVEhFTlRJQ0FU SU9OCisjaWZkZWYgQ0tfU1JQCisgICAgICAgICAgICAgIGNhc2UgU0xfU1JQOgorICAgICAgICAg ICAgICAgIGFfdHlwZSA9IEFVVEhUWVBFX1NSUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNl bmRpZiAvKiBDS19TUlAgKi8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgY2FzZSBTTF9T U0w6CisgICAgICAgICAgICAgICAgYV90eXBlID0gQVVUSFRZUEVfU1NMOworICAgICAgICAgICAg ICAgIGJyZWFrOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIE5UCisgICAgICAgICAgICAg IGNhc2UgU0xfTlRMTToKKyAgICAgICAgICAgICAgICBhX3R5cGUgPSBBVVRIVFlQRV9OVExNOwor ICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5UICovCisjaWZkZWYgQ0tfS0VSQkVS T1MKKyAgICAgICAgICAgICAgY2FzZSBTTF9LUkI0OgorICAgICAgICAgICAgICAgIGFfdHlwZSA9 IEFVVEhUWVBFX0tFUkJFUk9TX1Y0OworICAgICAgICAgICAgICAgIGlmICh0dG5wcm90byA9PSBO UF9STE9HSU4pCisgICAgICAgICAgICAgICAgICB0dG5wcm90byA9CisjaWZkZWYgQ0tfRU5DUllQ VElPTgorICAgICAgICAgICAgICAgICAgICBlbmNyeXB0ID8gTlBfRUs0TE9HSU4gOgorI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICAgICAgICAgICBOUF9LNExPR0lOOwor ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0s1TE9HSU4pCisgICAgICAg ICAgICAgICAgICB0dG5wcm90byA9IE5QX0s0TE9HSU47CisjaWZkZWYgQ0tfRU5DUllQVElPTgor ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR0bnByb3RvID09IE5QX0VLNUxPR0lOKQorICAgICAg ICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9FSzRMT0dJTjsKKyNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgU0xfS1JC NToKKyAgICAgICAgICAgICAgICBhX3R5cGUgPSBBVVRIVFlQRV9LRVJCRVJPU19WNTsKKyAgICAg ICAgICAgICAgICBpZiAodHRucHJvdG8gPT0gTlBfUkxPR0lOKQorICAgICAgICAgICAgICAgICAg dHRucHJvdG8gPQorI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICAgICAgZW5j cnlwdCA/IE5QX0VLNUxPR0lOIDoKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisgICAgICAg ICAgICAgICAgICAgICAgTlBfSzVMT0dJTjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0dG5w cm90byA9PSBOUF9LNExPR0lOKQorICAgICAgICAgICAgICAgICAgdHRucHJvdG8gPSBOUF9LNUxP R0lOOworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0dG5w cm90byA9PSBOUF9FSzRMT0dJTikKKyAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs1 TE9HSU47CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworICAgICAgICAgICAgICAgIGJyZWFr OworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisgICAgICAgICAgICAgIGNhc2UgU0xfQVVUSDog eworICAgICAgICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgYXV0eXB0YWJbXTsKKyAg ICAgICAgICAgICAgICAgIGV4dGVybiBpbnQgbmF1dHlwOworICAgICAgICAgICAgICAgICAgaWYg KCh4ID0gY21rZXkoYXV0eXB0YWIsbmF1dHlwLCJ0eXBlIG9mIGF1dGhlbnRpY2F0aW9uIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAw KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICBhX3R5 cGUgPSB4OworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyNlbmRp ZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAg ICAgICAgY2FzZSBTTF9FTkM6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0dG5wcm90bykgewor ICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LNExPR0lOOgorICAgICAgICAgICAgICAgICAgICB0 dG5wcm90byA9IE5QX0VLNExPR0lOOworICAgICAgICAgICAgICAgICAgICBlbmNyeXB0ID0gMTsK KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIE5QX0s1 TE9HSU46CisgICAgICAgICAgICAgICAgICAgIHR0bnByb3RvID0gTlBfRUs1TE9HSU47CisgICAg ICAgICAgICAgICAgICAgIGVuY3J5cHQgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgIGNhc2UgTlBfS0VSTUlUOgorICAgICAgICAgICAgICAgICAgY2Fz ZSBOUF9URUxORVQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgc3RydWN0IGtleXRh YiAqIHRuZXRibCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGludCBudG5l dGJsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICB4ID0gY2tfZ2V0X2NyeXB0X3RhYmxlKCZ0 bmV0YmwsJm50bmV0YmwpOworICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNrX2dl dF9jcnlwdF90YWJsZSB4IiwiIix4KTsKKyAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJja19nZXRfY3J5cHRfdGFibGUgbiIsIiIsbnRuZXRibCk7CisgICAgICAgICAgICAgICAgICAg ICAgaWYgKHggPCAxIHx8ICF0bmV0YmwgfHwgbnRuZXRibCA8IDEpIC8qIERpZG4ndCBnZXQgaXQg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgICAgICAgICAg IGlmICgheCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzbG1zZywiSW50 ZXJuYWwgZXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCI/T29wcywg dHlwZXMgbm90IGxvYWRlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGlmICgo eCA9IGNta2V5KHRuZXRibCxudG5ldGJsLCJ0eXBlIG9mIGVuY3J5cHRpb24iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMiLHh4c3RyaW5nKSkgPCAwKQor ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgICAgICAg IGVfdHlwZSA9IHg7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlm IC8qIENLX0VOQ1JZUFRJT04gKi8KKyAgICAgICAgICAgICAgY2FzZSBTTF9XQUlUOgorICAgICAg ICAgICAgICAgIHdhaXQgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICBjYXNlIFNMX05PV0FJVDoKKyAgICAgICAgICAgICAgICB3YWl0ID0gMDsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWZkZWYgTkVURklMRQor ICAgICAgICBpZiAobXluZXQgPT0gTkVUX0ZJTEUpIHsgICAgICAgIC8qIFBhcnNlZCBieSBjbWlm aSgpICovCisJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkJLyogTmVlZHMgY29uZmlybWF0aW9u ICovCisJICAgICAgcmV0dXJuKHgpOworCSAgICB4ID0gY3hfbmV0KG15bmV0LAkJLyogbmV0dHlw ZSAqLworCQkgICAgICAgMCwJCS8qIHByb3RvY29sIChub3QgdXNlZCkgKi8KKwkJICAgICAgIGxp bmUsCQkvKiBob3N0ICovCisJCSAgICAgICAiIiwJCS8qIHBvcnQgKi8KKwkJICAgICAgIE5VTEws CQkvKiBhbHRlcm5hdGUgdXNlcm5hbWUgKi8KKwkJICAgICAgIE5VTEwsCQkvKiBwYXNzd29yZCAq LworCQkgICAgICAgTlVMTCwJCS8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLworCQkgICAgICAgMCwJ CS8qIHBhcmFtMSAqLworCQkgICAgICAgMCwJCS8qIHBhcmFtMiAqLworCQkgICAgICAgMCwJCS8q IHBhcmFtMyAqLworCQkgICAgICAgY3gsCQkvKiBlbnRlciBDT05ORUNUIG1vZGUgKi8KKwkJICAg ICAgIHN4LAkJLyogZW50ZXIgU0VSVkVSIG1vZGUgKi8KKwkJICAgICAgIHp6LAkJLyogY2xvc2Ug Y29ubmVjdGlvbiBpZiBvcGVuICovCisJCSAgICAgICAwCQkvKiBndWkgKi8KKwkJICAgICAgICk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBORVRGSUxFICovCisKKyNpZmRlZiBORVRDTUQKKyAgICAg ICAgaWYgKG15bmV0ID09IE5FVF9DTUQgfHwgbXluZXQgPT0gTkVUX1BUWSkgeworICAgICAgICAg ICAgY2hhciAqcCA9IE5VTEw7CisgICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCkgeworICAgICAg ICAgICAgICAgIGlmICgoeCA9IGNtdHh0KCJSZXN0IG9mIGNvbW1hbmQiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQorICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgIGlm ICgqcykgeworICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQobGluZSwiICIsTElOQlVGU0la KTsKKyAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KGxpbmUscyxMSU5CVUZTSVopOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzID0gbGluZTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIC8qIHMgPT0gbGluZSAtIHNvIHdlIG11c3QgcHJvdGVjdCB0aGUgbGluZSBi dWZmZXIgKi8KKyAgICAgICAgICAgIHMgPSBicnN0cmlwKHMpOworICAgICAgICAgICAgbWFrZXN0 cigmcCxzKTsKKyAgICAgICAgICAgIGNrc3RybmNweShsaW5lLHAsTElOQlVGU0laKTsKKyAgICAg ICAgICAgIG1ha2VzdHIoJnAsTlVMTCk7CisKKyAgICAgICAgICAgIHggPSBjeF9uZXQoIG15bmV0 LCAgICAgICAgICAgICAgICAgIC8qIG5ldHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvY29sIChub3QgdXNlZCkgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIGxpbmUsICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgIC8qIHBvcnQgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIGFsdGVy bmF0ZSB1c2VybmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAg ICAgICAgICAgLyogcGFzc3dvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgIC8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogcGFyYW0xICovCisgICAgICAgICAg ICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBwYXJhbTIgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHBhcmFtMyAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgY3gsICAgICAgICAgICAgICAgICAgICAgLyogZW50ZXIg Q09OTkVDVCBtb2RlICovCisgICAgICAgICAgICAgICAgICAgICAgICBzeCwgICAgICAgICAgICAg ICAgICAgICAvKiBlbnRlciBTRVJWRVIgbW9kZSAqLworICAgICAgICAgICAgICAgICAgICAgICAg enosICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgY29ubmVjdGlvbiBpZiBvcGVuICovCisg ICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAvKiBndWkgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBORVRDTUQg Ki8KKworI2lmZGVmIE5QSVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5hbWVkIHBp cGUgKi8KKyAgICAgICAgaWYgKG15bmV0ID09IE5FVF9QSVBFKSB7ICAgICAgICAvKiBOZWVkcyBi YWNrc2xhc2ggdHdpZGRsaW5nICovCisgICAgICAgICAgICBpZiAobGluZVswXSkgeworICAgICAg ICAgICAgICAgIGlmIChzdHJjbXAobGluZSwiKiIpKSB7ICAgIC8qIElmIHJlbW90ZSwgYmVnaW4g d2l0aCAqLworICAgICAgICAgICAgICAgICAgICBjaGFyICogcCA9IE5VTEw7CisgICAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJnAsbGluZSk7ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNr c3RybmNweShsaW5lLCJcXFxcIixMSU5CVUZTSVopOyAvKiBzZXJ2ZXIgbmFtZSAqLworICAgICAg ICAgICAgICAgICAgICBja3N0cm5jYXQobGluZSxwLExJTkJVRlNJWik7CisgICAgICAgICAgICAg ICAgICAgIG1ha2VzdHIoJnAsTlVMTCk7ICAgICAgCisgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgbGluZVswXT0nXDAnOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBja3N0cm5jYXQobGluZSwiXFxwaXBlXFwiLCBMSU5CVUZTSVopOyAvKiBN YWtlIHBpcGUgbmFtZSAqLworICAgICAgICAgICAgICAgIGNrc3RybmNhdChsaW5lLHBpcGVuYW1l LCBMSU5CVUZTSVopOyAvKiBBZGQgbmFtZSBvZiBwaXBlICovCisKKyAgICAgICAgICAgICAgICB4 ID0gY3hfbmV0KG15bmV0LAkvKiBuZXR0eXBlICovCisJCQkgICAwLAkJLyogcHJvdG9jb2wgKG5v dCB1c2VkKSAqLworCQkJICAgbGluZSwJLyogaG9zdCAqLworCQkJICAgIiIsCQkvKiBwb3J0ICov CisJCQkgICBOVUxMLAkvKiBhbHRlcm5hdGUgdXNlcm5hbWUgKi8KKwkJCSAgIE5VTEwsCS8qIHBh c3N3b3JkICovCisJCQkgICBOVUxMLAkvKiBjb21tYW5kIHRvIGV4ZWN1dGUgKi8KKwkJCSAgIDAs CQkvKiBwYXJhbTEgKi8KKwkJCSAgIDAsCQkvKiBwYXJhbTIgKi8KKwkJCSAgIDAsCQkvKiBwYXJh bTMgKi8KKwkJCSAgIGN4LAkJLyogZW50ZXIgQ09OTkVDVCBtb2RlICovCisJCQkgICBzeCwJCS8q IGVudGVyIFNFUlZFUiBtb2RlICovCisJCQkgICB6eiwJCS8qIGNsb3NlIGNvbm5lY3Rpb24gaWYg b3BlbiAqLworCQkJICAgMAkJLyogZ3VpICovCisJCQkgICApOworICAgICAgICAgICAgfQorICAg ICAgICB9CisjZW5kaWYgLyogTlBJUEUgKi8KKworI2lmZGVmIFNVUEVSTEFUCisgICAgICAgIGlm IChteW5ldCA9PSBORVRfU0xBVCkgeyAgICAgICAgLyogTmVlZHMgcGFzc3dvcmQsIGV0Yy4gKi8K KyAgICAgICAgICAgIHNsYXRfcHdkWzBdID0gTlVMOyAgICAgICAgICAvKiBFcmFzZSBhbnkgcHJl dmlvdXMgcGFzc3dvcmQgKi8KKyAgICAgICAgICAgIGRlYm9rID0gMDsKKyAgICAgICAgICAgIGlm ICgqbGluZSkgewkJLyogSWYgdGhleSBnYXZlIGEgaG9zdCBuYW1lLi4uICovCisgICAgICAgICAg ICAgICAgaWYgKCh4ID0gY21mbGQoCisgICAgICAgICAgICAgICAgICAgICAicGFzc3dvcmQsXG4g b3IgY2FycmlhZ2UgcmV0dXJuIGlmIG5vIHBhc3N3b3JkIHJlcXVpcmVkIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkpIDwgMCAmJiB4ICE9IC0zKQorICAgICAgICAgICAgICAgICAg cmV0dXJuKHgpOworICAgICAgICAgICAgICAgIGNrc3RybmNweShzbGF0X3B3ZCxzLDE4KTsgLyog U2V0IHRoZSBwYXNzd29yZCwgaWYgYW55ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsgLyogQ29uZmlybSB0aGUgY29tbWFuZCAq LworCisgICAgICAgICAgICB4ID0gY3hfbmV0KG15bmV0LAkJLyogbmV0dHlwZSAqLworICAgICAg ICAgICAgICAgICAgICAgICAwLAkJLyogcHJvdG9jb2wgKG5vdCB1c2VkKSAqLworICAgICAgICAg ICAgICAgICAgICAgICBsaW5lLAkJLyogaG9zdCAqLworICAgICAgICAgICAgICAgICAgICAgICAi IiwJCS8qIHBvcnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwJCS8qIGFsdGVybmF0 ZSB1c2VybmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAkJLyogcGFzc3dvcmQg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwJCS8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAq LworICAgICAgICAgICAgICAgICAgICAgICAwLAkJLyogcGFyYW0xICovCisgICAgICAgICAgICAg ICAgICAgICAgIDAsCQkvKiBwYXJhbTIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMCwJCS8q IHBhcmFtMyAqLworICAgICAgICAgICAgICAgICAgICAgICBjeCwJCS8qIGVudGVyIENPTk5FQ1Qg bW9kZSAqLworICAgICAgICAgICAgICAgICAgICAgICBzeCwJCS8qIGVudGVyIFNFUlZFUiBtb2Rl ICovCisgICAgICAgICAgICAgICAgICAgICAgIHp6LAkJLyogY2xvc2UgY29ubmVjdGlvbiBpZiBv cGVuICovCisgICAgICAgICAgICAgICAgICAgICAgIDAJCS8qIGd1aSAqLworICAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICB9CisjZW5kaWYgLyogU1VQRVJMQVQgKi8KKworI2lmZGVm IERFQ05FVAorICAgICAgICBpZiAobXluZXQgPT0gTkVUX0RFQykgeyAgCisgICAgICAgICAgICBp ZiAoIWxpbmVbMF0pIHsgICAgICAgICAgICAgICAgICAgLyogSWYgdGhleSBnYXZlIGEgaG9zdCBu YW1lLi4uICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCI/aG9zdG5hbWUgcmVxdWlyZWRcbiIp OworICAgICAgICAgICAgICAgIHJldHVybigtMyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsgLyogQ29uZmlybSB0aGUgY29tbWFu ZCAqLworCisgICAgICAgICAgICB4ID0gY3hfbmV0KG15bmV0LAkJLyogbmV0dHlwZSAqLworICAg ICAgICAgICAgICAgICAgICAgICAwLAkJLyogcHJvdG9jb2wgKG5vdCB1c2VkKSAqLworICAgICAg ICAgICAgICAgICAgICAgICBsaW5lLAkJLyogaG9zdCAqLworICAgICAgICAgICAgICAgICAgICAg ICAiIiwJCS8qIHBvcnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwJCS8qIGFsdGVy bmF0ZSB1c2VybmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAkJLyogcGFzc3dv cmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwJCS8qIGNvbW1hbmQgdG8gZXhlY3V0 ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAwLAkJLyogcGFyYW0xICovCisgICAgICAgICAg ICAgICAgICAgICAgIDAsCQkvKiBwYXJhbTIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgMCwJ CS8qIHBhcmFtMyAqLworICAgICAgICAgICAgICAgICAgICAgICBjeCwJCS8qIGVudGVyIENPTk5F Q1QgbW9kZSAqLworICAgICAgICAgICAgICAgICAgICAgICBzeCwJCS8qIGVudGVyIFNFUlZFUiBt b2RlICovCisgICAgICAgICAgICAgICAgICAgICAgIHp6LAkJLyogY2xvc2UgY29ubmVjdGlvbiBp ZiBvcGVuICovCisgICAgICAgICAgICAgICAgICAgICAgIDAJCS8qIGd1aSAqLworICAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICB9CisjZW5kaWYgLyogREVDTkVUICovCisKKyNpZmRl ZiBTU0hCVUlMVElOCisgICAgICAgIGlmIChteW5ldCA9PSBORVRfU1NIKSB7CQkvKiBTU0ggY29u bmVjdGlvbiAqLworICAgICAgICAgICAgaW50IGssIGhhdmVob3N0ID0gMCwgdHJpcHMgPSAwOwor ICAgICAgICAgICAgaW50ICAgIHRtcHZlciA9IC0xLCB0bXB4ZncgPSAtMSwgdG1wc3NoX2NhczsK KyNpZm5kZWYgU1NIVEVTVAorICAgICAgICAgICAgZXh0ZXJuIGludCBzbF9zc2hfeGZ3LCBzbF9z c2hfeGZ3X3NhdmVkOworICAgICAgICAgICAgZXh0ZXJuIGludCBzbF9zc2hfdmVyLCBzbF9zc2hf dmVyX3NhdmVkOworI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyAgICAgICAgICAgIGV4dGVybiBzdHJ1 Y3Qga2V5dGFiIHNzaG9wbnN3W107CisgICAgICAgICAgICBleHRlcm4gaW50IG5zc2hvcG5zdzsK KyAgICAgICAgICAgIGV4dGVybiBjaGFyICpzc2hfdG1wY21kLCAqc3NoX3RtcHBvcnQ7CisgICAg ICAgICAgICBzdHJ1Y3QgRkRCIHN3LCBrdywgZmw7CisKKyAgICAgICAgICAgIGRlYnVnKEYxMTAs InNldGxpbiBTU0ggc2VydmljZSAwIixzcnZidWYsMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEw LCJzZXRsaW4gU1NIIGhvc3QgcyAyIixzLDApOworICAgICAgICAgICAgaWYgKCpzKSB7ICAgICAg ICAgICAvKiBJZiB0aGV5IGdhdmUgYSBob3N0IG5hbWUuLi4gKi8KKyAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTEwLCJzZXRsaW4gU1NIIGhvc3QgcyAxIixzLDApOworICAgICAgICAgICAgICAgIGlm ICgqcyA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc2xtc2csIkluY29t aW5nIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgcHJp bnRmKAorICAgICAiP1NvcnJ5LCBpbmNvbWluZyBjb25uZWN0aW9ucyBub3Qgc3VwcG9ydGVkIGZv ciBTU0guXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIHByaW50ZigiP2hvc3RuYW1lIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4oLTMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBQYXJzZSBbIHBvcnQg XSBbIHN3aXRjaGVzIF0gKi8KKyAgICAgICAgICAgIGNtZmRiaSgma3csICAgICAgICAgICAgICAg ICAvKiBTd2l0Y2hlcyAqLworICAgICAgICAgICAgICAgICAgICBfQ01LRVksCisgICAgICAgICAg ICAgICAgICAgICJQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUsXG5vciBzd2l0Y2giLAorICAg ICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAg ICAgICAgICAgIG5zc2hvcG5zdywKKyAgICAgICAgICAgICAgICAgICAgNCwKKyAgICAgICAgICAg ICAgICAgICAgeHhzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIHNzaG9wbnN3LAorICAgICAg ICAgICAgICAgICAgICAmZmwKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNt ZmRiaSgmZmwsICAgICAgICAgICAgICAgICAvKiBQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUg Ki8KKyAgICAgICAgICAgICAgICAgICAgX0NNRkxELAorICAgICAgICAgICAgICAgICAgICAiIiwK KyAgICAgICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICIiLAorICAgICAg ICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAg ICAgICB4eHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAg ICAgICAgTlVMTAorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgdHJpcHMgPSAw OyAgICAgICAgICAgICAgICAgIC8qIEV4cGxhaW5lZCBiZWxvdyAqLworICAgICAgICAgICAgd2hp bGUgKDEpIHsgICAgICAgICAgICAgICAgIC8qIFBhcnNlIHBvcnQgYW5kIHN3aXRjaGVzICovCisg ICAgICAgICAgICAgICAgeSA9IGNtZmRiKCZrdyk7ICAgICAgICAgLyogR2V0IGEgZmllbGQgKi8K KyAgICAgICAgICAgICAgICBpZiAoeSA9PSAtMykgICAgICAgICAgICAvKiBVc2VyIHR5cGVkIENS IHNvIHF1aXQgZnJvbSBsb29wICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIGlmICh5IDwgMCkgICAgICAgICAgICAgIC8qIE90aGVyIHBhcnNlIGVycm9yLCBw YXNzIGl0IGJhY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgICAgIHN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsgLyogRmllbGQgb3IgS2V5d29yZD8gKi8K KyAgICAgICAgICAgICAgICBjYXNlIF9DTUZMRDogICAgICAgICAgICAgIC8qIEZpZWxkICovCisg ICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYsY21yZXN1bHQuc3Jlc3VsdCxTUlZC VUZTSVopOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl IF9DTUtFWTogICAgICAgICAgICAvKiBLZXl3b3JkICovCisgICAgICAgICAgICAgICAgICAgIHN3 aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeyAvKiBXaGljaCBvbmU/ICovCisgICAgICAgICAgICAg ICAgICAgIGNhc2UgU1NIU1dfUFdEOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjbWdi cmsoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNo IHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgZGVib2sgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21mbGQo IlBhc3N3b3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICh5ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h a2VzdHIoJnRtcHN0cmluZywiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGJyc3RyaXAocyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKCh5ID0gKGludClzdHJsZW4ocykpID4gUFdCVUZMKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNsbXNnLCJJbnRlcm5hbCBlcnJv ciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9Tb3JyeSwgdG9v IGxvbmcgLSBtYXggPSAlZFxuIixQV0JVRkwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBzdHJpbmcscyk7CisgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSBTU0hTV19VU1I6ICAgICAgICAgICAgIC8qIC9VU0VSOiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCFjbWdicmsoKSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21mbGQoIlVzZXJuYW1l IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4oeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gYnJzdHJpcChzKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJnRtcHVzcmlkLHMpOworICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfVkVSOgorICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCh5ID0gY21udW0oIk51bWJlciIsIiIsMTAsJnoseHhzdHJp bmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHogPCAxIHx8IHogPiAyKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmKCI/T3V0IG9mIHJhbmdlOiAlZFxuIix6KTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgdG1wdmVyID0gejsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFNTSFNXX0NNRDoKKyAgICAgICAg ICAgICAgICAgICAgY2FzZSBTU0hTV19TVUI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo KHkgPSBjbWZsZCgiVGV4dCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNz aF90bXBjbWQscyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXBzc2hfY2FzID0gKGNtcmVz dWx0Lm5yZXN1bHQgPT0gU1NIU1dfU1VCKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICBjYXNlIFNTSFNXX1gxMToKKyAgICAgICAgICAgICAgICAg ICAgICAgIGlmICgoeSA9IGNta2V5KG9ub2ZmLDIsIiIsIm9uIix4eHN0cmluZykpIDwgMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeSk7CisgICAgICAgICAgICAgICAgICAg ICAgICB0bXB4ZncgPSB5OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTIp OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGlmICh0cmlwcysrID09IDApIHsgICAgIC8qIEFmdGVyIGZpcnN0IHRpbWUgdGhyb3VnaCAq LworICAgICAgICAgICAgICAgICAgICBjbWZkYmkoJmt3LCAgICAgICAgIC8qIG9ubHkgcGFyc2Ug c3dpdGNoZXMsIG5vdCBwb3J0LiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DTUtF WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3dpdGNoIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuc3Nob3Buc3csCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzc2hvcG5zdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApICAgICAg LyogR2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgICAgICAgICAgIHJldHVybih5KTsKKworICAg ICAgICAgICAgZGVidWcoRjExMCwic2V0bGluIHByZS1jeF9uZXQgbGluZSIsbGluZSwwKTsKKyAg ICAgICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBwcmUtY3hfbmV0IHNydmJ1ZiIsc3J2YnVmLDAp OworICAgICAgICAgICAgeCA9IGN4X25ldCggbXluZXQsICAgICAgICAgICAgICAgICAgLyogbmV0 dHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg LyogcHJvdG9jb2wgKG5vdCB1c2VkKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwg ICAgICAgICAgICAgICAgICAgLyogaG9zdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3J2 YnVmLCAgICAgICAgICAgICAgICAgLyogcG9ydCAqLworICAgICAgICAgICAgICAgICAgICAgICAg dG1wdXNyaWQsICAgICAgICAgICAgICAgLyogYWx0ZXJuYXRlIHVzZXJuYW1lICovCisgICAgICAg ICAgICAgICAgICAgICAgICB0bXBzdHJpbmcsICAgICAgICAgICAgICAvKiBwYXNzd29yZCAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgc3NoX3RtcGNtZCwgICAgICAgICAgICAgLyogY29tbWFu ZCB0byBleGVjdXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICB0bXB2ZXIsICAgICAgICAg ICAgICAgICAvKiBwYXJhbTEgLSBzc2ggdmVyc2lvbiAqLworICAgICAgICAgICAgICAgICAgICAg ICAgdG1wc3NoX2NhcywgICAgICAgICAgICAgLyogcGFyYW0yIC0gc3NoIGNhcyAgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIHRtcHhmdywgICAgICAgICAgICAgICAgIC8qIHBhcmFtMyAtIHNz aCB4MTFmd2QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGN4LCAgICAgICAgICAgICAgICAg ICAgIC8qIGVudGVyIENPTk5FQ1QgbW9kZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3gs ICAgICAgICAgICAgICAgICAgICAgLyogZW50ZXIgU0VSVkVSIG1vZGUgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIHp6LCAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGNvbm5lY3Rpb24g aWYgb3BlbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAg ICAgLyogZ3VpICovCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgaWYg KHRtcHVzcmlkKQorICAgICAgICAgICAgICAgIG1ha2VzdHIoJnRtcHVzcmlkLE5VTEwpOworICAg ICAgICAgICAgaWYgKHNzaF90bXBjbWQpCisgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3Rt cGNtZCxOVUxMKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKworI2lmZGVm IFRDUFNPQ0tFVAorICAgICAgICBpZiAobXluZXQgPT0gTkVUX1RDUEIpIHsgICAgICAgIC8qIFRD UC9JUCBjb25uZWN0aW9uICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gc2Vydmlj ZSAwIixzcnZidWYsMCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gaG9zdCBzIDIi LHMsMCk7CisgICAgICAgICAgICBpZiAoKnMpIHsJCQkvKiBJZiB0aGV5IGdhdmUgYSBob3N0IG5h bWUuLi4gKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gaG9zdCBzIDEiLHMs MCk7CisjaWZkZWYgTk9MSVNURU4KKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJyonKSB7Cisg ICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNsbXNnLCJJbmNvbWluZyBjb25uZWN0aW9ucyBu b3Qgc3VwcG9ydGVkIik7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigKKyAgICAgIj9Tb3Jy eSwgaW5jb21pbmcgY29ubmVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2Yg S2VybWl0LlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9MSVNURU4g Ki8KKyNpZmRlZiBSTE9HQ09ERQorICAgICAgICAgICAgICAgIC8qIEFsbG93IGEgdXNlcm5hbWUg aWYgcmxvZ2luIGlzIHJlcXVlc3RlZCAqLworICAgICAgICAgICAgICAgIGlmIChteW5ldCA9PSBO RVRfVENQQiAmJgorICAgICAgICAgICAgICAgICAgICAodHRucHJvdG8gPT0gTlBfUkxPR0lOIHx8 IHR0bnByb3RvID09IE5QX0s1TE9HSU4gfHwKKyAgICAgICAgICAgICAgICAgICAgIHR0bnByb3Rv ID09IE5QX0VLNUxPR0lOIHx8IHR0bnByb3RvID09IE5QX0s0TE9HSU4gfHwKKyAgICAgICAgICAg ICAgICAgICAgIHR0bnByb3RvID09IE5QX0VLNExPR0lOCisgICAgICAgICAgICAgICAgICAgICkp IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHk7CisgICAgICAgICAgICAgICAgICAgIHVpZGZs YWcgPSAwOworICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgImhvc3Q6c2VydmljZSIg Ki8KKyAgICAgICAgICAgICAgICAgICAgZm9yICggOyAoKnMgIT0gJ1wwJykgJiYgKCpzICE9ICc6 Jyk7IHMrKykgOworICAgICAgICAgICAgICAgICAgICBpZiAoKnMpIHsgICAvKiBTZXJ2aWNlLCBz YXZlIGl0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAqcyA9IE5VTDsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYsKytzLFNSVkJVRlNJWik7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyogTm8gOnNlcnZpY2UsIHRoZW4gdXNlIGRl ZmF1bHQuICovCisjaWZkZWYgVk1TCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR0 bnByb3RvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfUkxPR0lOOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYsIjUxMyIsU1JWQlVGU0la KTsgLyogImxvZ2luIiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX0s0TE9HSU46CisgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgTlBfSzVMT0dJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj a3N0cm5jcHkoc3J2YnVmLCI1NDMiLFNSVkJVRlNJWik7IC8qICJrbG9naW4iICovCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgTlBfRUs0TE9HSU46CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfRUs1TE9H SU46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHNydmJ1ZiwiMjEwNSIs U1JWQlVGU0laKTsgLyogImVrbG9naW4iICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisjZWxzZSAvKiBWTVMgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHRucHJvdG8pIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBOUF9STE9HSU46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tz dHJuY3B5KHNydmJ1ZiwibG9naW4iLFNSVkJVRlNJWik7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTlBfSzRMT0dJTjoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LNUxPR0lOOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYsImtsb2dpbiIsU1JWQlVGU0laKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSBOUF9FSzRMT0dJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9F SzVMT0dJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc3J2YnVmLCJl a2xvZ2luIixTUlZCVUZTSVopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlybWVkKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICB5ID0gY21mbGQoIlVzZXJpZCBvbiByZW1vdGUgc3lzdGVtIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRidWYsJnMseHhzdHJpbmcpOworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCAwICYmIHkgIT0gLTMpCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaW50 KXN0cmxlbihzKSA+IDYzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigm c2xtc2csIkludGVybmFsIGVycm9yIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCJTb3JyeSwgdG9vIGxvbmdcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybigtOSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZ0bXB1c3JpZCxzKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAvKiBURUxORVQgb3IgU0VUIEhPU1QgKi8KKyNlbmRp ZiAvKiBSTE9HQ09ERSAqLworICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgImhvc3Q6 c2VydmljZSIgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yICggOyAoKnMgIT0gJ1wwJykgJiYg KCpzICE9ICc6Jyk7IHMrKykgOworICAgICAgICAgICAgICAgICAgICBpZiAoKnMpIHsgICAvKiBT ZXJ2aWNlLCBzYXZlIGl0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAqcyA9IE5VTDsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzcnZidWYsKytzLFNSVkJVRlNJWik7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbmZpcm1lZCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgLyogTm8gOnNlcnZpY2UsIGxldCB0aGVtIHR5cGUgb25lLiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCpsaW5lICE9ICcqJykgeyAvKiBOb3QgaW5jb21pbmcgKi8K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobXluZXQgPT0gTkVUX1RDUEIgJiYgdHRu cHJvdG8gPT0gTlBfS0VSTUlUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm ICgoeCA9IGNtZmxkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiVENQIHNlcnZpY2UgbmFtZSBvciBudW1iZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAia2VybWl0Iiwmcyx4eHN0cmluZykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCAmJiB4ICE9IC0zKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyNpZmRlZiBSTE9HQ09ERQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobXluZXQgPT0gTkVUX1RDUEIgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0bnByb3RvID09IE5QX1JM T0dJTikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHggPSBjbWZsZCgK KyAgIlRDUCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyLFxuIG9yIGNhcnJpYWdlIHJldHVybiBmb3Ig cmxvZ2luICg1MTMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImxvZ2luIiwmcyx4eHN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApIDwgMCAmJiB4ICE9IC0zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybih4KTsKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorI2lmZGVmIENLX0tFUkJF Uk9TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChteW5ldCA9PSBORVRf VENQQiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR0bnByb3Rv ID09IE5QX0s0TE9HSU4gfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHR0bnByb3RvID09IE5QX0s1TE9HSU4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICgoeCA9IGNtZmxkKAorICAiVENQIHNlcnZpY2UgbmFtZSBvciBudW1iZXIsXG4gb3Ig Y2FycmlhZ2UgcmV0dXJuIGZvciBrbG9naW4gKDU0MykiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAia2xvZ2luIiwmcyx4eHN0cmluZykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDwgMCAmJiB4ICE9IC0zKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKG15bmV0ID09IE5FVF9UQ1BCICYmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAodHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dG5wcm90byA9PSBOUF9FSzVMT0dJ TikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoCisg ICJUQ1Agc2VydmljZSBuYW1lIG9yIG51bWJlcixcbiBvciBjYXJyaWFnZSByZXR1cm4gZm9yIGVr bG9naW4gKDIxMDUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImVrbG9naW4iLCZzLHh4c3RyaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkgPCAwICYmIHggIT0gLTMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHgpOworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisjZW5kaWYgLyogQ0tf QVVUSEVOVElDQVRJT04gKi8KKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERvIG5vdCBzZXQgYSBkZWZhdWx0IHZhbHVlIGluIHRoaXMgY2FsbCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJZiB5b3UgZG8gdGhlbiBpdCB3aWxsIHByZXZlbnQgZW50 cmllcyAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gdGhlIG5ldHdv cmsgZGlyZWN0b3J5IGZyb20gYWNjZXNzaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGFsdGVybmF0ZSBwb3J0cy4gICAgICAgICAgICAgICAgICAgICAgICAqLworCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNtZmxkKAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVENQIHNlcnZpY2UgbmFtZSBv ciBudW1iZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIiwmcyx4eHN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp IDwgMCAmJiB4ICE9IC0zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy bih4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeyAvKiBJbmNvbWluZyBjb25uZWN0aW9uICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCh4ID0gY21mbGQoIlRDUCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwmcyx4eHN0cmlu ZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPCAwICYmIHggIT0gLTMpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnMpICAgICAgICAgLyogSWYg dGhleSBnYXZlIGEgc2VydmljZSwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KHNydmJ1ZixzLFNSVkJVRlNJWik7IC8qIGNvcHkgaXQgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsInNldGxpbiBzZXJ2aWNlIDAuNSIsc3J2YnVmLDApOworICAgICAg ICAgICAgICAgICAgICB9CisjaWZkZWYgUkxPR0NPREUKKyAgICAgICAgICAgICAgICB9CisjZW5k aWYgLyogUkxPR0NPREUgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCkgeworICAg ICAgICAgICAgICAgICAgICBjaGFyICogZGVmcHJvdG87CisgICAgICAgICAgICAgICAgICAgIHN3 aXRjaCAodHRucHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5QX1JMT0dJTjoK KyAgICAgICAgICAgICAgICAgICAgICAgIGRlZnByb3RvID0gIi9ybG9naW4iOworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOUF9LNExP R0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmcHJvdG8gPSAiL2s0bG9naW4iOworICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBO UF9LNUxPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmcHJvdG8gPSAiL2s1bG9naW4i OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg Y2FzZSBOUF9FSzRMT0dJTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZnByb3RvID0gIi9l azRsb2dpbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICBjYXNlIE5QX0VLNUxPR0lOOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmcHJv dG8gPSAiL2VrNWxvZ2luIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgTlBfS0VSTUlUOgorICAgICAgICAgICAgICAgICAgICAgIGNh c2UgTlBfVEVMTkVUOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmcHJvdG8gPSAiL3RlbG5l dCI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmcHJvdG8gPSAiL2RlZmF1bHQi OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgoeCA9IGNt a2V5KHRjcHJhd3RhYixudGNwcmF3LCJTd2l0Y2giLGRlZnByb3RvLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHggIT0gLTMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4KTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYXdmbGcgPSB4OworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJzZXRsaW4gcHJlLWN4X25l dCBsaW5lIixsaW5lLDApOworICAgICAgICAgICAgZGVidWcoRjExMCwic2V0bGluIHByZS1jeF9u ZXQgc3J2YnVmIixzcnZidWYsMCk7CisgICAgICAgICAgICB4ID0gY3hfbmV0KCBteW5ldCwgICAg ICAgICAgICAgICAgICAvKiBuZXR0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICByYXdm bGcgICAgICAgICAgICAgICAgICAvKiBwcm90b2NvbCAqLywKKyAgICAgICAgICAgICAgICAgICAg ICAgIGxpbmUsICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgIHNydmJ1ZiwgICAgICAgICAgICAgICAgIC8qIHBvcnQgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIHRtcHVzcmlkLCAgICAgICAgICAgICAgIC8qIGFsdGVybmF0ZSB1c2VybmFtZSAq LworICAgICAgICAgICAgICAgICAgICAgICAgdG1wc3RyaW5nLCAgICAgICAgICAgICAgLyogcGFz c3dvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAg IC8qIGNvbW1hbmQgdG8gZXhlY3V0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgYV90eXBl LCAgICAgICAgICAgICAgICAgLyogcGFyYW0xIC0gdGVsbmV0IGF1dGh0eXBlICovCisgICAgICAg ICAgICAgICAgICAgICAgICBlX3R5cGUsICAgICAgICAgICAgICAgICAvKiBwYXJhbTIgLSB0ZWxu ZXQgZW5jdHlwZSAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQsICAgICAgICAgICAg ICAgICAgIC8qIHBhcmFtMyAtIHRlbG5ldCB3YWl0ICovCisgICAgICAgICAgICAgICAgICAgICAg ICBjeCwgICAgICAgICAgICAgICAgICAgICAvKiBlbnRlciBDT05ORUNUIG1vZGUgKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgIHN4LCAgICAgICAgICAgICAgICAgICAgIC8qIGVudGVyIFNFUlZF UiBtb2RlICovCisgICAgICAgICAgICAgICAgICAgICAgICB6eiwgICAgICAgICAgICAgICAgICAg ICAvKiBjbG9zZSBjb25uZWN0aW9uIGlmIG9wZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg IDAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd1aSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZkZWYgQ0tfU0VD VVJJVFkKKyAgICAgICAgaWYgKHRtcHN0cmluZykKKyAgICAgICAgICAgIG1ha2VzdHIoJnRtcHN0 cmluZyxOVUxMKTsKKyNlbmRpZiAvKiBDS19TRUNVUklUWSAqLworICAgICAgICBpZiAodG1wdXNy aWQpCisgICAgICAgICAgICBtYWtlc3RyKCZ0bXB1c3JpZCxOVUxMKTsKKwlkZWJ1ZyhGMTExLCJz ZXRsaW4gY3hfbmV0IixsaW5lLHgpOworCXJldHVybih4KTsKKyNlbmRpZiAvKiBORVRDT05OICov CisgICAgfQorCisvKiBTZXJpYWwgdHR5IGRldmljZSwgcG9zc2libHkgbW9kZW0sIGNvbm5lY3Rp b24uLi4gKi8KKworI2lmZGVmIE9TMgorLyoKKyAgVXNlciBjYW4gdHlwZToKKyAgICBDT00xLi5D T004ID0gUmVndWxhciBDT00gcG9ydAorICAgIDEuLjggICAgICAgPSBTeW5vbnltIGZvciBDT00x Li5DT004LCBpcyB0cmFuc2xhdGVkIHRvIENPTTEuLkNPTTgKKyAgICBfbiAgICAgICAgID0gKG4g aXMgYSBudW1iZXIpID0gb3BlbiBmaWxlIGhhbmRsZQorICAgIHN0cmluZyAgICAgPSBhbnkgdGV4 dCBzdHJpbmcgPSBuYW1lIG9mIHNvbWUgb3RoZXIga2luZCBvZiBkZXZpY2UsCisgICAgICAgICAg ICAgICAgIHRha2VuIGxpdGVyYWxseSwgYXMgZ2l2ZW4uCisqLworICAgIHMgPSAiQ29tbXVuaWNh dGlvbiBkZXZpY2UgbmFtZSI7CisKKyNpZmRlZiBDS19UQVBJCisgICAgaWYgKFRBUElBdmFpbCkK KyAgICAgIGNrdGFwaUJ1aWxkTGluZVRhYmxlKCZ0YXBpbGluZXRhYiwgJl90YXBpbGluZXRhYiwg Jm50YXBpbGluZSk7CisgICAgaWYgKCEodGFwaWxpbmV0YWIgJiYgX3RhcGlsaW5ldGFiICYmIG50 YXBpbGluZSA+IDApICYmCisJeHggPT0gWFlUQVBJX0xJTiApIHsKKwltYWtlc3RyKCZzbG1zZywi VEFQSSBkZXZpY2Ugbm90IGNvbmZpZ3VyZWQiKTsKKwlwcmludGYoIlxuTm8gVEFQSSBMaW5lIERl dmljZXMgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoaXMgc3lzdGVtXG4iKTsKKwlyZXR1cm4oLTkpOwor ICAgIH0KKyAgICBpZiAoeHggPT0gWFlUQVBJX0xJTikgewkJLyogRGVmYXVsdCAoZmlyc3QpIFRB UEkgbGluZSAqLworCXMgPSAidGFwaSI7CQkJLyogKHdoYXRldmVyIGl0IGlzKSAqLworICAgIH0g ZWxzZSB7CQkJCS8qIFF1ZXJ5IHRoZSB1c2VyICovCisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisv KiBOb3cgcGFyc2Ugb3B0aW9uYWwgc3dpdGNoZXMgYW5kIHRoZW4gZGV2aWNlIG5hbWUgKi8KKwor CWNvbmZpcm1lZCA9IDA7CisJY21mZGJpKCZzdyxfQ01LRVksIkRldmljZSBuYW1lLCBvciBzd2l0 Y2giLAorCSAgICAgICAiIiwiIixucHNsdGFiLDQseHhzdHJpbmcscHNsdGFiLCZmbCk7CisJY21m ZGJpKCZmbCxfQ01GTEQsIiIsZGZ0dHksIiIsMCwwLHh4c3RyaW5nLE5VTEwsTlVMTCk7CisJd2hp bGUgKDEpIHsKKwkgICAgeCA9IGNtZmRiKCZzdyk7CisJICAgIGRlYnVnKEYxMDEsInNldGxpbiBj bWZkYiIsIiIseCk7CisJICAgIGlmICh4IDwgMCkKKwkgICAgICBpZiAoeCAhPSAtMykKKwkJcmV0 dXJuKHgpOworCSAgICBpZiAoeCA9PSAtMykgeworCQlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHsK KwkJICAgIHJldHVybih4KTsKKwkJfSBlbHNlIHsKKwkJICAgIGNvbmZpcm1lZCA9IDE7CisJCSAg ICBicmVhazsKKwkJfQorCSAgICB9CisJICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01GTEQp IHsKKwkJcyA9IGNtcmVzdWx0LnNyZXN1bHQ7CisJCWJyZWFrOworCSAgICB9IGVsc2UgaWYgKGNt cmVzdWx0LmZjb2RlID09IF9DTUtFWSkgeworCQlzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsK KwkJICBjYXNlIFNMX0NOWDoJCS8qIC9DT05ORUNUICovCisJCSAgICBjeCA9IDE7CisJCSAgICBz eCA9IDA7CisJCSAgICBicmVhazsKKwkJICBjYXNlIFNMX1NSVjoJCS8qIC9TRVJWRVIgKi8KKwkJ ICAgIGN4ID0gMDsKKwkJICAgIHN4ID0gMTsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgU0xfU0hS OgkJLyogL1NIQVJFICovCisJCSAgICBzaHIgPSAxOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBT TF9OU0g6CQkvKiAvTk9TSEFSRSAqLworCQkgICAgc2hyID0gMDsKKwkJICAgIGJyZWFrOworCQl9 CisJICAgIH0KKwl9CisjaWZkZWYgQ0tfVEFQSQorICAgIH0KKyNlbmRpZiAvKiBDS19UQVBJICov CisKKyAgICBkZWJ1ZyhGMTEwLCJPUzIgU0VUIFBPUlQgcyIscywwKTsKKyAgICB5ID0gbG9va3Vw KG9zMmRldnRhYixzLG5vczJkZXYsJngpOyAvKiBMb29rIHVwIGluIGtleXdvcmQgdGFibGUgKi8K KyAgICBkZWJ1ZyhGMTAxLCJPUzIgU0VUIFBPUlQgeCIsIiIseCk7CisgICAgZGVidWcoRjEwMSwi T1MyIFNFVCBQT1JUIHkiLCIiLHkpOworICAgIGlmICgoeSA+IC0xKSAmJiAoeCA+PSAwICYmIHgg PCA4KSkgeyAvKiBVc2VyIHR5cGVkIGEgZGlnaXQgMS4uOCAqLworCXMgPSBvczJkZXZ0YWJbeCs4 XS5rd2Q7CQkvKiBTdWJzdGl0aXRlIGl0cyByZWFsIG5hbWUgKi8KKyNpZmRlZiBOVAorCXh4dGFw aSA9IDA7CisjZWxzZSAvKiBOVCAqLworCXh4c2xpcCA9IHh4cHBwID0gMDsKKyNlbmRpZiAvKiBO VCAqLworCWRlYnVnKEYxMTAsIk9TMiBTRVQgUE9SVCBzdWJzdCBzIixzLCIiKTsKKyNpZm5kZWYg TlQKKyAgICB9IGVsc2UgaWYgKCh5ID4tMSkgJiYgKHggPj0gMTYgJiYgeCA8IDI0KSkgeyAvKiBT TElQIGFjY2VzcyAqLworCXMgPSBvczJkZXZ0YWJbeC04XS5rd2Q7CQkvKiBTdWJzdGl0aXRlIGl0 cyByZWFsIG5hbWUgKi8KKwlkZWJ1ZyhGMTEwLCJPUzIgU0VUIFBPUlQgU0xJUCBzdWJzdCBzIixz LCIiKTsKKwl4eHNsaXAgPSAxOworCXh4cHBwICA9IDA7CisgICAgfSBlbHNlIGlmICgoeSA+LTEp ICYmICh4ID49IDI0ICYmIHggPCAzMikpIHsgLyogUFBQIGFjY2VzcyAqLworCXMgPSBvczJkZXZ0 YWJbeC0xNl0ua3dkOwkvKiBTdWJzdGl0aXRlIGl0cyByZWFsIG5hbWUgKi8KKwlkZWJ1ZyhGMTEw LCJPUzIgU0VUIFBPUlQgUFBQIHN1YnN0IHMiLHMsIiIpOworCXh4cHBwID0gMTsKKwl4eHNsaXAg PSAwOworCWlmICgoeSA9IGNta2V5KG9zMnBwcHRhYiwKKwkJICAgICAgIG5vczJwcHAsCisJCSAg ICAgICAiUFBQIGRyaXZlciBpbnRlcmZhY2UiLAorCQkgICAgICAgInBwcDAiLAorCQkgICAgICAg eHhzdHJpbmcpCisJICAgICApIDwgMCkKKwkgIHJldHVybih5KTsKKwlkZWJ1ZyhGMTAxLCJPUzIg U0VUIFBPUlQgUFBQIElOVEVSRkFDRSB5IiwiIix5KTsKKwl4eHBwcCA9ICh5ICUgMTApICsgMTsK KyNlbmRpZiAvKiBOVCAqLworICAgIH0gZWxzZSBpZiAoKnMgPT0gJ18nKSB7CQkvKiBVc2VyIHVz ZWQgIl8iIHByZWZpeCAqLworCXMrKzsJCQkJLyogUmVtb3ZlIGl0ICovCisJLyogUmVzdCBtdXN0 IGJlIG51bWVyaWMgKi8KKwlkZWJ1ZyhGMTEwLCJPUzIgU0VUIFBPUlQgSEFORExFIF9zdWJzdCBz IixzLDApOworCWlmICghcmRpZ2l0cyhzKSkgeworCSAgICBtYWtlc3RyKCZzbG1zZywiSW52YWxp ZCBmaWxlIGhhbmRsZSIpOworCSAgICBwcmludGYoIj9JbnZhbGlkIGZvcm1hdCBmb3IgZmlsZSBo YW5kbGVcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNpZmRlZiBOVAorCXh4dGFwaSA9IDA7 CisjZWxzZSAvKiBOVCAqLworCXh4c2xpcCA9IHh4cHBwID0gMDsKKyNlbmRpZiAvKiBOVCAqLwor ICAgIH0gZWxzZSB7CQkJCS8qIEEgbm9ybWFsIENPTXggcG9ydCBvciBhIHN0cmluZyAqLworCXMg PSBicnN0cmlwKHMpOwkJCS8qIFN0cmlwIGJyYWNlcyBpZiBhbnkgKi8KKyNpZmRlZiBOVAorI2lm ZGVmIENLX1RBUEkKKwkvKiBXaW5kb3dzIFRBUEkgc3VwcG9ydCAtIExvb2sgdXAgaW4ga2V5d29y ZCB0YWJsZSAqLworCWlmICh0YXBpbGluZXRhYiAmJiBfdGFwaWxpbmV0YWIgJiYgbnRhcGlsaW5l ID4gMCkgeworCSAgICBpZiAoIWNrc3RyY21wKHMsInRhcGkiLDQsMCkpIHsKKworCQkvKiBGaW5k IG91dCB3aGF0IHRoZSBsb3dlc3QgbnVtYmVyZWQgVEFQSSBkZXZpY2UgaXMgKi8KKwkJLyogYW5k IHVzZSBpdCBhcyB0aGUgZGVmYXVsdC4gICAgICAgICAgICAgICAgICAgICAgICovCisJCWludCBq ID0gOTk5OSwgayA9IC0xOworCQlmb3IgKGkgPSAwOyBpIDwgbnRhcGlsaW5lOyBpKyspIHsKKwkJ ICAgIGlmICh0YXBpbGluZXRhYltpXS5rd3ZhbCA8IGopIHsKKwkJCWogPSB0YXBpbGluZXRhYltp XS5rd3ZhbDsKKwkJCWsgPSBpOworCQkgICAgfQorCQl9CisJCWlmIChrID49IDApCisJCSAgcyA9 IF90YXBpbGluZXRhYltrXS5rd2Q7CisJCWVsc2UKKwkJICBzID0gIiI7CisKKwkJaWYgKCh5ID0g Y21rZXkoX3RhcGlsaW5ldGFiLG50YXBpbGluZSwKKwkJCSAgICAgICAiVEFQSSBkZXZpY2UgbmFt ZSIscyx4eHN0cmluZykpIDwgMCkKKwkJICByZXR1cm4oeSk7CisKKwkJeHh0YXBpID0gMTsKKwor CQkvKiBHZXQgdGhlIG5vbiBVbmRlcnNjb3JlZCBzdHJpbmcgKi8KKwkJZm9yIChpID0gMDsgaSA8 IG50YXBpbGluZTsgaSsrICkgeworCQkgICAgaWYgKHRhcGlsaW5ldGFiW2ldLmt3dmFsID09IHkp IHsKKwkJCXMgPSB0YXBpbGluZXRhYltpXS5rd2Q7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQor CSAgICB9IGVsc2UKKwkgICAgICB4eHRhcGkgPSAwOworCX0KKyNlbmRpZiAvKiBDS19UQVBJICov CisjZWxzZSAvKiBOVCAqLworCS8qIG5vdCBPUy8yIFNMSVAgb3IgUFBQICovCisJeHhzbGlwID0g eHhwcHAgPSAwOworI2VuZGlmIC8qIE5UICovCisgICAgfQorICAgIGNrc3RybmNweSh0bXBidWYs cyxUTVBCVUZTSVopOwkvKiBDb3B5IHRvIGEgc2FmZSBwbGFjZSAqLworICAgIHMgPSB0bXBidWY7 CisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHgpOworCisjZWxzZSAv KiAhT1MyICovCisKKyAgICBjbWZkYmkoJnN3LF9DTUtFWSwiRGV2aWNlIG5hbWUsIG9yIHN3aXRj aCIsCisJICAgIiIsIiIsbnBzbHRhYiw0LHh4c3RyaW5nLHBzbHRhYiwmdHgpOworICAgIGNtZmRi aSgmdHgsX0NNVFhULCIiLGRmdHR5LCIiLDAsMCx4eHN0cmluZyxOVUxMLE5VTEwpOworICAgIHdo aWxlICghY29uZmlybWVkKSB7CisJeCA9IGNtZmRiKCZzdyk7CisJZGVidWcoRjEwMSwic2V0bGlu IGNtZmRiIiwiIix4KTsKKwlpZiAoeCA8IDApCisJICBpZiAoeCAhPSAtMykKKwkgICAgcmV0dXJu KHgpOworCWlmICh4ID09IC0zKSB7CisJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgeworCQly ZXR1cm4oeCk7CisJICAgIH0gZWxzZSB7CisJCWNvbmZpcm1lZCA9IDE7CisJCWJyZWFrOworCSAg ICB9CisJfQorCXN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsKKwkgIGNhc2UgX0NNVFhUOgorCSAg ICBja3N0cm5jcHkodG1wYnVmLGNtcmVzdWx0LnNyZXN1bHQsVE1QQlVGU0laKTsKKwkgICAgcyA9 IHRtcGJ1ZjsKKwkgICAgZGVidWcoRjExMCwic2V0bGluIENNVFhUIix0bXBidWYsMCk7CisJICAg IGNvbmZpcm1lZCA9IDE7CisJICAgIGJyZWFrOworCSAgY2FzZSBfQ01LRVk6CQkJLyogU3dpdGNo ICovCisJICAgIGRlYnVnKEYxMDEsInNldGxpbiBDTUtFWSIsdG1wYnVmLGNtcmVzdWx0Lm5yZXN1 bHQpOworCSAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKwkgICAgICBjYXNlIFNMX0NO WDoJCS8qIC9DT05ORUNUICovCisJCWN4ID0gMTsKKwkJc3ggPSAwOworCQlicmVhazsKKwkgICAg ICBjYXNlIFNMX1NSVjoJCS8qIC9TRVJWRVIgKi8KKwkJY3ggPSAwOworCQlzeCA9IDE7CisJCWJy ZWFrOworI2lmZGVmIFZNUworCSAgICAgIGNhc2UgU0xfU0hSOgkJLyogL1NIQVJFICovCisJCXNo ciA9IDE7CisJCWJyZWFrOworCSAgICAgIGNhc2UgU0xfTlNIOgkJLyogL05PU0hBUkUgKi8KKwkJ c2hyID0gMDsKKwkJYnJlYWs7CisjZW5kaWYgLyogVk1TICovCisJICAgIH0KKwkgICAgY29udGlu dWU7CisJICBkZWZhdWx0OgorCSAgICBkZWJ1ZyhGMTAxLCJzZXRsaW4gYmFkIGNtZmRiIHJlc3Vs dCIsIiIsY21yZXN1bHQuZmNvZGUpOworCSAgICBtYWtlc3RyKCZzbG1zZywiSW50ZXJuYWwgZXJy b3IiKTsKKwkgICAgcHJpbnRmKCI/SW50ZXJuYWwgcGFyc2luZyBlcnJvclxuIik7CisJICAgIHJl dHVybigtOSk7CisJfQorICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBpZiAoIWNvbmZpcm1l ZCkKKyAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKwlyZXR1cm4oeCk7CisKKyAgICBkZWJ1 ZyhGMTEwLCJzZXRsaW4gcHJlLWN4X3NlcmlhbCBzIixzLDApOworICAgIGRlYnVnKEYxMTAsInNl dGxpbiBwcmUtY3hfc2VyaWFsIGxpbmUiLGxpbmUsMCk7CisgICAgeCA9IGN4X3NlcmlhbChzLGN4 LHN4LHNocix6eiwwLAorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgICAg KHh4dGFwaSA/IENYX1RBUEkgOiAwKQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAoeHhzbGlw ID8gQ1hfU0xJUCA6IDApIHwgKHh4cHBwID8gQ1hfUFBQIDogMCkKKyNlbmRpZiAvKiBOVCAqLwor I2Vsc2UgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgMAorI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgICAgICAgICAgICk7CisgICAgZGVidWcoRjExMSwic2V0bGluIGN4X3NlcmlhbCIs bGluZSx4KTsKKyAgICByZXR1cm4oeCk7Cit9CisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZk ZWYgQ0tDSEFOTkVMSU8KKy8qCisgIEMtTGlicmFyeSBiYXNlZCBmaWxlLWkvbyBwYWNrYWdlIGZv ciBzY3JpcHRzLiAgVGhpcyBzaG91bGQgYmUgcG9ydGFibGUgdG8KKyAgYWxsIEMtS2VybWl0IHZl cnNpb25zIHNpbmNlIGl0IHVzZXMgdGhlIHNhbWUgQVBJcyB3ZSBoYXZlIGFsd2F5cyB1c2VkIGZv cgorICBwcm9jZXNzaW5nIGNvbW1hbmQgZmlsZXMuICBUaGUgZW50aXJlIGNoYW5uZWwgaS9vIHBh Y2thZ2UgaXMgY29udGFpbmVkCisgIGhlcmVpbiwgYXBhcnQgZnJvbSBzb21lIGtleXdvcmQgdGFi bGUgZW50cmllcyBpbiB0aGUgbWFpbiBrZXl3b3JkIHRhYmxlCisgIGFuZCB0aGUgaGVscCB0ZXh0 IGluIHRoZSBIRUxQIGNvbW1hbmQgbW9kdWxlLgorCisgIE9uIHBsYXRmb3JtcyBsaWtlIFZNUyBh bmQgVk9TLCB0aGlzIHBhY2thZ2UgaGFuZGxlcyBvbmx5IFVOSVgtc3R5bGUKKyAgc3RyZWFtIGZp bGVzLiAgSWYgZGVzaXJlZCwgaXQgY2FuIGJlIHJlcGxhY2VkIGZvciB0aG9zZSBwbGF0Zm9ybXMg YnkKKyAgPCM+aWZkZWYnaW5nIG91dCB0aGlzIGNvZGUgYW5kIGFkZGluZyB0aGUgZXF1aXZhbGVu dCByZXBsYWNlbWVudCByb3V0aW5lcworICB0byB0aGUgY2s/ZmlvLmMgbW9kdWxlLCBlLmcuIGZv ciBSTVMtYmFzZWQgZmlsZSBpL28gaW4gY2t2ZmlvLmMuCisqLworI2lmbmRlZiBOT1NUQVQKKyNp ZmRlZiBWTVMKKy8qIDIwMTAtMDMtMDkgU01TLiAgVkFYIEMgbmVlZHMgaGVscCB0byBmaW5kICJz eXMiLiAgSXQncyBlYXNpZXIgbm90IHRvIHRyeS4gKi8KKyNpbmNsdWRlIDxzdGF0Lmg+CisjZWxz ZSAvKiBkZWYgVk1TICovCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZiAvKiBkZWYgVk1T IFtlbHNlXSAqLworI2VuZGlmIC8qIE5PU1RBVCAqLworCisjaWZkZWYgTkxDSEFSCitzdGF0aWMg aW50IHpfbHQgPSAxOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGxpbmUgdGVybWlu YXRvciAqLworI2Vsc2UKK3N0YXRpYyBpbnQgel9sdCA9IDI7CisjZW5kaWYgLyogTkxDSEFSICov CisKK3N0cnVjdCBja3pfZmlsZSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDLUtlcm1pdCBm aWxlIHN0cnVjdCAqLworICAgIEZJTEUgKiB6X2ZwOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IEluY2x1ZGVzIHRoZSBDLUxpYiBmaWxlIHN0cnVjdCAqLworICAgIHVuc2lnbmVkIGludCB6X2Zs YWdzOyAgICAgICAgICAgICAgIC8qIFBsdXMgQy1LZXJtaXQgbW9kZSBmbGFncywgKi8KKyAgICBD S19PRkZfVCB6X25saW5lOwkJCS8qIGN1cnJlbnQgbGluZSBudW1iZXIgaWYga25vd24sICovCisg ICAgY2hhciB6X25hbWVbQ0tNQVhQQVRIKzJdOyAgICAgICAgICAgLyogYW5kIHRoZSBmaWxlJ3Mg bmFtZS4gKi8KK307CitzdGF0aWMgc3RydWN0IGNrel9maWxlICoqIHpfZmlsZSA9IE5VTEw7IC8q IEFycmF5IG9mIEMtS2VybWl0IGZpbGUgc3RydWN0cyAqLworc3RhdGljIGludCB6X2luaXRlZCA9 IDA7ICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGFycmF5IGluaXRpYWxpemVkICovCitpbnQg el9tYXhjaGFuID0gWl9NQVhDSEFOOyAgICAgICAgICAgICAgLyogTWF4IG51bWJlciBvZiBDLUtl cm1pdCBjaGFubmVscyAqLworaW50IHpfb3Blbm1heCA9IENLTUFYT1BFTjsgICAgICAgICAgICAg IC8qIE1heCBudW1iZXIgb2Ygb3BlbiBmaWxlcyBvdmVyYWxsICovCitpbnQgel9ub3BlbiA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogSG93IG1hbnkgY2hhbm5lbHMgcHJlc2VudGx5IG9w ZW4gKi8KK2ludCB6X2Vycm9yID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNb3N0IHJl Y2VudCBlcnJvciAqLworaW50IHpfZmlsY291bnQgPSAtMTsgICAgICAgICAgICAgICAgICAgIC8q IE1vc3QgcmVjZW50IEZJTEUgQ09VTlQgcmVzdWx0ICovCisKKyNkZWZpbmUgUkRfTElORSAwICAg ICAgICAgICAgICAgICAgICAgICAvKiBGSUxFIFJFQUQgb3B0aW9ucyAqLworI2RlZmluZSBSRF9D SEFSIDEKKyNkZWZpbmUgUkRfU0laRSAyCisjZGVmaW5lIFJEX1RSSU0gOAkJCS8qIExpa2UgU25v Ym9sICZUUklNID0gMSAqLworI2RlZmluZSBSRF9VTlRBIDkJCQkvKiBVbnRhYmlmeSAqLworCisj ZGVmaW5lIFdSX0xJTkUgUkRfTElORSAgICAgICAgICAgICAgICAgLyogRklMRSBXUklURSBvcHRp b25zICovCisjZGVmaW5lIFdSX0NIQVIgUkRfQ0hBUgorI2RlZmluZSBXUl9TSVpFIFJEX1NJWkUK KyNkZWZpbmUgV1JfU1RSSSAzCisjZGVmaW5lIFdSX0xQQUQgNAorI2RlZmluZSBXUl9SUEFEIDUK KworI2lmZGVmIFVOSVgKK2V4dGVybiBpbnQgY2ttYXhmaWxlczsgICAgICAgICAgICAgICAgICAv KiBGaWxsZWQgaW4gYnkgc3lzaW5pdCgpLiAqLworI2VuZGlmIC8qIFVOSVggKi8KKworLyogU2Vl IGNrY2tlci5oIGZvciBlcnJvciBudW1iZXJzICovCisvKiBTZWUgY2tjZGViLmggZm9yIFpfTUFY Q0hBTiBhbmQgQ0tNQVhPUEVOIGRlZmluaXRpb25zICovCisvKiBOT1RFOiBGb3IgVk1TIHdlIG1p Z2h0IGJlIGFibGUgdG8gZmlsbCBpbiBja21heGZpbGVzICovCisvKiBmcm9tIEZJTExNIGFuZCBD SEFOTkVMQ05UIC0tIGZpbmQgb3V0IGFib3V0IHRoZXNlLi4uICovCisKK3N0YXRpYyBjaGFyICog Zm9wbmFyZ3NbXSA9IHsgICAgICAgICAgICAvKiBNb2RlIGNvbWJpbmF0aW9ucyBmb3IgZm9wZW4o KSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBBbGwgY29tYmluYXRpb25zIG9mIHJ3YSAqLwor ICAgICIiLCAgInIiLCAgInciLCAgInJ3IiwgICJhIiwgICJyYSIsICAid2EiLCAgInJ3YSIsIC8q IFRleHQgbW9kZSAqLworICAgICJiIiwgInJiIiwgIndiIiwgInJ3YiIsICJhYiIsICJyYWIiLCAi d2FiIiwgInJ3YWIiIC8qIEJpbmFyeSBtb2RlICovCisjZWxzZQorICAgIC8qIENvbWJpbmF0aW9u cyBhbmQgc3ludGF4IHBlcm1pdHRlZCBieSBDIGxpYnJhcmllcy4uLiAqLworICAgICIiLCAgInIi LCAgInciLCAgInIrIiwgICJhIiwgICIiLCAgICJhIiwgICIiLCAvKiBUZXh0IG1vZGUgKi8KKyNp ZmRlZiBPUzIKKyAgICAiIiwgICJyYiIsICJ3YiIsICJyK2IiLCAiYWIiLCAiIiwgICAiYWIiLCAi IiAvKiBCaW5hcnkgbW9kZXMgZm9yIEs5NSAqLworI2Vsc2UKKyNpZmRlZiBWTVMKKyAgICAiIiwg ICJyYiIsICJ3YiIsICJyK2IiLCAiYWIiLCAiIiwgICAiYWIiLCAiIiAvKiBCaW5hcnkgbW9kZXMg Zm9yIFZNUyAqLworI2Vsc2UKKyAgICAiIiwgICJyIiwgICAidyIsICJyKyIsICAiYSIsICAiIiwg ICAiYSIsICAiIiAvKiBCaW5hcnkgbW9kZXMgZm9yIFVOSVggKi8KKyNlbmRpZiAvKiBWTVMgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCit9Oworc3RhdGljIGludCBu Zm9wbmFyZ3MgPSBzaXplb2YoZm9wbmFyZ3MpIC8gc2l6ZW9mKGNoYXIgKik7CisKK2NoYXIgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBtZXNzYWdlcyAqLworY2tm ZXJyb3IobikgaW50IG47IHsKKyAgICBzd2l0Y2ggKG4pIHsKKyAgICAgIGNhc2UgRlhfTkVSOiBy ZXR1cm4oIk5vIGVycm9yIik7CisgICAgICBjYXNlIEZYX1NZUzogcmV0dXJuKGNrX2VycnN0cigp KTsKKyAgICAgIGNhc2UgRlhfRU9GOiByZXR1cm4oIkVuZCBvZiBmaWxlIik7CisgICAgICBjYXNl IEZYX05PUDogcmV0dXJuKCJGaWxlIG5vdCBvcGVuIik7CisgICAgICBjYXNlIEZYX0NITjogcmV0 dXJuKCJDaGFubmVsIG91dCBvZiByYW5nZSIpOworICAgICAgY2FzZSBGWF9STkc6IHJldHVybigi UGFyYW1ldGVyIG91dCBvZiByYW5nZSIpOworICAgICAgY2FzZSBGWF9OTUY6IHJldHVybigiVG9v IG1hbnkgZmlsZXMgb3BlbiIpOworICAgICAgY2FzZSBGWF9GT1A6IHJldHVybigiT3BlcmF0aW9u IGNvbmZsaWN0cyB3aXRoIE9QRU4gbW9kZSIpOworICAgICAgY2FzZSBGWF9OWUk6IHJldHVybigi T1BFTiBtb2RlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgIGNhc2UgRlhfQk9NOiByZXR1cm4oIkls bGVnYWwgY29tYmluYXRpb24gb2YgT1BFTiBtb2RlcyIpOworICAgICAgY2FzZSBGWF9BQ0M6IHJl dHVybigiQWNjZXNzIGRlbmllZCIpOworICAgICAgY2FzZSBGWF9GTkY6IHJldHVybigiRmlsZSBu b3QgZm91bmQiKTsKKyAgICAgIGNhc2UgRlhfT0ZMOiByZXR1cm4oIkJ1ZmZlciBvdmVyZmxvdyIp OworICAgICAgY2FzZSBGWF9MTlU6IHJldHVybigiQ3VycmVudCBsaW5lIG51bWJlciB1bmtub3du Iik7CisgICAgICBjYXNlIEZYX1JPTzogcmV0dXJuKCJPZmYgbGltaXRzIik7CisgICAgICBjYXNl IEZYX1VOSzogcmV0dXJuKCJPcGVyYXRpb24gZmFpbHMgLSByZWFzb24gdW5rbm93biIpOworICAg ICAgZGVmYXVsdDogcmV0dXJuKCJFcnJvciBudW1iZXIgb3V0IG9mIHJhbmdlIik7CisgICAgfQor fQorCisvKgorICBaIF8gTyBQIEUgTiAtLSAgT3BlbiBhIGZpbGUgZm9yIHRoZSByZXF1ZXN0ZWQg dHlwZSBvZiBhY2Nlc3MuCisKKyAgQ2FsbCB3aXRoOgorICAgIG5hbWU6ICBOYW1lIG9mIGZpbGUg dG8gYmUgb3BlbmVkLgorICAgIGZsYWdzOiBBbnkgY29tYmluYXRpb24gb2YgRk1feHh4IHZhbHVl cyBleGNlcHQgRk1fRU9GIChja2NrZXIuaCkuCisgIFJldHVybnM6CisgICAgPj0gMCBvbiBzdWNj ZXNzOiBUaGUgYXNzaWduZWQgY2hhbm5lbCBudW1iZXIKKyAgICA8ICAwIG9uIGZhaWx1cmU6IEEg bmVnYXRpdmUgRlhfeHh4IGVycm9yIGNvZGUgKGNrY2tlci5oKS4KKyovCitpbnQKK3pfb3Blbihu YW1lLCBmbGFncykgY2hhciAqIG5hbWU7IGludCBmbGFnczsgeworICAgIGludCBpLCBuOworICAg IEZJTEUgKiB0OworICAgIGNoYXIgKiBtb2RlOworICAgIGRlYnVnKEYxMTEsInpfb3BlbiIsbmFt ZSxmbGFncyk7CisgICAgaWYgKCFuYW1lKSBuYW1lID0gIiI7ICAgICAgICAgICAgICAgLyogQ2hl Y2sgbmFtZSBhcmd1bWVudCAqLworICAgIGlmICghbmFtZVswXSkKKyAgICAgIHJldHVybih6X2Vy cm9yID0gRlhfQkZOKTsKKyAgICBpZiAoZmxhZ3MgJiBGTV9DTUQpICAgICAgICAgICAgICAgICAv KiBPcGVuaW5nIHBpcGVzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKyAgICAgIHJldHVybih6X2Vy cm9yID0gRlhfTllJKTsgICAgICAgICAvKiAoYW5kIG5vdCBwb3J0YWJsZSBlaXRoZXIpICovCisg ICAgZGVidWcoRjEwMSwiel9vcGVuIG5mb3BuYXJncyIsIiIsbmZvcG5hcmdzKTsKKyAgICBpZiAo ZmxhZ3MgPCAwIHx8IGZsYWdzID49IG5mb3BuYXJncykgLyogUmFuZ2UgY2hlY2sgZmxhZ3MgKi8K KyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfUk5HKTsKKyAgICBtb2RlID0gZm9wbmFyZ3NbZmxh Z3NdOyAgICAgICAgICAgICAvKiBHZXQgZm9wZW4oKSBhcmcgKi8KKyAgICBkZWJ1ZyhGMTExLCJ6 X29wZW4gZm9wZW4gYXJncyIsbW9kZSxmbGFncyk7CisgICAgaWYgKCFtb2RlWzBdKSAgICAgICAg ICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGlsbGVnYWwgY29tYmluYXRpb25zICovCisgICAg ICByZXR1cm4oel9lcnJvciA9IEZYX0JPTSk7CisgICAgaWYgKCF6X2luaXRlZCkgeyAgICAgICAg ICAgICAgICAgICAgLyogSWYgZmlsZSBzdHJ1Y3RzIG5vdCBpbml0ZWQgKi8KKyAgICAgICAgZGVi dWcoRjEwMSwiel9vcGVuIHpfbWF4Y2hhbiAxIiwiIix6X21heGNoYW4pOworI2lmZGVmIFVOSVgK KyAgICAgICAgZGVidWcoRjEwMSwiel9vcGVuIGNrbWF4ZmlsZXMiLCIiLGNrbWF4ZmlsZXMpOwor ICAgICAgICBpZiAoY2ttYXhmaWxlcyA+IDApIHsgICAgICAgICAgIC8qIFNldCBpbiBjaz90aW8u Yzogc3lzaW5pdCgpICovCisgICAgICAgICAgICBpbnQgeDsKKyAgICAgICAgICAgIHggPSBja21h eGZpbGVzIC0gWk5GSUxTIC0gNTsKKyAgICAgICAgICAgIGlmICh4ID4gel9tYXhjaGFuKSAgICAg ICAgICAvKiBzeXNjb25mKCkgdmFsdWUgZ3JlYXRlciB0aGFuICovCisgICAgICAgICAgICAgIHpf bWF4Y2hhbiA9IHg7ICAgICAgICAgICAgLyogdmFsdWUgZnJvbSBoZWFkZXIgZmlsZXMuICovCisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJ6X29wZW4gel9tYXhjaGFuIDIiLCIiLHpfbWF4Y2hhbik7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgIGlmICh6X21heGNoYW4gPCBa X01JTkNIQU4pICAgICAgLyogQWxsb2NhdGUgYXQgbGVhc3QgdGhpcyBtYW55LiAqLworICAgICAg ICAgIHpfbWF4Y2hhbiA9IFpfTUlOQ0hBTjsKKyAgICAgICAgZGVidWcoRjEwMSwiel9vcGVuIHpf bWF4Y2hhbiAzIiwiIix6X21heGNoYW4pOworICAgICAgICAvKiBOb3RlOiBUaGlzIGNvdWxkIGJl IGEgcHJldHR5IGJpZyBjaHVuayBvZiBtZW1vcnkgKi8KKyAgICAgICAgLyogaWYgel9tYXhjaGFu IGlzIGEgYmlnIG51bWJlci4gIElmIHRoaXMgYmVjb21lcyBhIHByb2JsZW0gKi8KKyAgICAgICAg Lyogd2UnbGwgbmVlZCB0byBtYWxsb2MgYW5kIGZyZWUgZWFjaCBlbGVtZW50IGF0IG9wZW4vY2xv c2UgdGltZSAqLworI2lmZGVmIENPTU1FTlQKKwkvKiBNYXkgMjAwNiAtIGl0J3MgdGltZSAtIGlu IGN1cnJlbnQgTGludXggdGhpcyBhYm91dCAzTUIgKi8KKyAgICAgICAgaWYgKCEoel9maWxlID0g KHN0cnVjdCBja3pfZmlsZSAqKQorICAgICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBj a3pfZmlsZSkgKiAoel9tYXhjaGFuICsgMSkpKSkKKyAgICAgICAgICByZXR1cm4oel9lcnJvciA9 IEZYX05NRik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB6X21heGNoYW47IGkrKykgeworICAg ICAgICAgICAgel9maWxlW2ldLnpfZnAgPSBOVUxMOworICAgICAgICAgICAgel9maWxlW2ldLnpf ZmxhZ3MgPSAwOworICAgICAgICAgICAgel9maWxlW2ldLnpfbmxpbmUgPSAwOworICAgICAgICAg ICAgKih6X2ZpbGVbaV0uel9uYW1lKSA9ICdcMCc7CisgICAgICAgIH0KKyNlbHNlCisJLyogTmV3 IGVjb25vbWljYWwgd2F5LCBhbGxvY2F0ZSBzdG9yYWdlIGZvciBlYWNoIGNoYW5uZWwgYXMgbmVl ZGVkICovCisJaWYgKCF6X2ZpbGUpIHsKKwkgICAgel9maWxlID0gKHN0cnVjdCBja3pfZmlsZSAq KiltYWxsb2MoKHpfbWF4Y2hhbiArIDEpICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgY2t6X2ZpbGUg KikpOworCSAgICBpZiAoIXpfZmlsZSkKKwkgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05NRik7 CisJICAgIGZvciAoaSA9IDA7IGkgPCB6X21heGNoYW47IGkrKykKKwkgICAgICB6X2ZpbGVbaV0g PSBOVUxMOworCX0KKyNlbmRpZgkvKiBDT01NRU5UICovCisgICAgICAgIHpfaW5pdGVkID0gMTsg ICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgd2UgaW5pdGlhbGl6ZWQgKi8KKyAgICB9Cisg ICAgZm9yIChuID0gLTEsIGkgPSAwOyBpIDwgel9tYXhjaGFuOyBpKyspIHsgLyogRmluZCBhIGZy ZWUgY2hhbm5lbCAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKCF6X2ZpbGVbaV0uel9m cCkgeworICAgICAgICAgICAgbiA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor I2Vsc2UKKyAgICAgICAgaWYgKCF6X2ZpbGVbaV0pIHsKKwkgICAgel9maWxlW2ldID0gKHN0cnVj dCBja3pfZmlsZSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBja3pfZmlsZSkpOworCSAgICBpZiAo IXpfZmlsZVtpXSkKKwkgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05NRik7CisgICAgICAgICAg ICBuID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYJLyogQ09NTUVO VCAqLworCisgICAgfQorICAgIGlmIChuIDwgMCB8fCBuID49IHpfbWF4Y2hhbikgICAgICAgIC8q IEFueSBmcmVlIGNoYW5uZWxzPyAqLworICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OTUYpOyAg ICAgICAgIC8qIE5vLCBmYWlsLiAqLworICAgIGVycm5vID0gMDsKKworICAgIHpfZmlsZVtuXS0+ el9mbGFncyA9IDA7CQkvKiBJbiBjYXNlIG9mIGZhaWx1cmUuLi4gKi8KKyAgICB6X2ZpbGVbbl0t PnpfZnAgPSBOVUxMOwkJLyogU2V0IGZpbGUgcG9pbnRlciB0byBOVUxMICovCisKKyAgICB0ID0g Zm9wZW4obmFtZSwgbW9kZSk7ICAgICAgICAgICAgICAvKiBUcnkgdG8gb3BlbiB0aGUgZmlsZS4g Ki8KKyAgICBpZiAoIXQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYWlsZWQuLi4g Ki8KKyAgICAgICAgZGVidWcoRjExMSwiel9vcGVuIGVycm9yIixuYW1lLGVycm5vKTsKKyNpZmRl ZiBFTUZJTEUKKyAgICAgICAgaWYgKGVycm5vID09IEVNRklMRSkKKyAgICAgICAgICByZXR1cm4o el9lcnJvciA9IEZYX05NRik7CisjZW5kaWYgLyogRU1GSUxFICovCisJZnJlZSh6X2ZpbGVbbl0p OworCXpfZmlsZVtuXSA9IE5VTEw7CisgICAgICAgIHJldHVybih6X2Vycm9yID0gKGVycm5vID8g IEZYX1NZUyA6IEZYX1VOSykpOyAvKiBSZXR1cm4gZXJyb3IgY29kZSAqLworICAgIH0KKyNpZmRl ZiBOVAorI2lmZGVmIE9fU0VRVUVOVElBTAorICAgIGlmICh0KSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIENhY2hpbmcgaGludCBmb3IgTlQgKi8KKyAgICAgIF9zZXRtb2RlKF9maWxl bm8odCksT19TRVFVRU5USUFMKTsKKyNlbmRpZiAvKiBPX1NFUVVFTlRJQUwgKi8KKyNlbmRpZiAv KiBOVCAqLworICAgIHpfbm9wZW4rKzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wZW4s IGNvdW50IGl0LiAqLworICAgIHpfZmlsZVtuXS0+el9mcCA9IHQ7CQkvKiBTdGFzaCB0aGUgZmls ZSBwb2ludGVyICovCisgICAgel9maWxlW25dLT56X2ZsYWdzID0gZmxhZ3M7CQkvKiBhbmQgdGhl IGZsYWdzICovCisgICAgel9maWxlW25dLT56X25saW5lID0gMDsJCS8qIEN1cnJlbnQgbGluZSBu dW1iZXIgaXMgMCAqLworICAgIHpfZXJyb3IgPSAwOworICAgIHpmbnFmcChuYW1lLENLTUFYUEFU SCx6X2ZpbGVbbl0tPnpfbmFtZSk7IC8qIGFuZCB0aGUgZmlsZSdzIGZ1bGwgbmFtZSAqLworICAg IHJldHVybihuKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgY2hhbm5l bCBudW1iZXIgKi8KK30KKworaW50Cit6X2Nsb3NlKGNoYW5uZWwpIGludCBjaGFubmVsOyB7ICAg ICAgICAgLyogQ2xvc2UgZmlsZSBvbiBnaXZlbiBjaGFubmVsICovCisgICAgaW50IHg7CisgICAg RklMRSAqIHQ7CisgICAgaWYgKCF6X2luaXRlZCkgICAgICAgICAgICAgICAgICAgICAgLyogQ2Fs bGVkIGJlZm9yZSBhbnkgZmlsZXMgYXJlIG9wZW4/ICovCisgICAgICByZXR1cm4oel9lcnJvciA9 IEZYX05PUCk7CisgICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKSAgICAgICAgICAgLyogQ2hh bm5lbCBvdXQgb2YgcmFuZ2U/ICovCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7Cisg ICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7 CisgICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpICAgIC8qIENoYW5uZWwgd2Fz bid0IG9wZW4/ICovCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgZXJybm8g PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGVycm5vIDAgdG8gZ2V0IGEgZ29v ZCByZWFkaW5nICovCisgICAgeCA9IGZjbG9zZSh0KTsgICAgICAgICAgICAgICAgICAgICAgLyog VHJ5IHRvIGNsb3NlICovCisgICAgaWYgKHggPT0gRU9GKSAgICAgICAgICAgICAgICAgICAgICAg LyogT24gZmFpbHVyZSAqLworICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9TWVMpOyAgICAgICAg IC8qIGluZGljYXRlIHN5c3RlbSBlcnJvci4gKi8KKyAgICB6X25vcGVuLS07ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBDbG9zZWQgT0ssIGRlY3JlbWVudCBvcGVuIGNvdW50ICovCisgICAg el9maWxlW2NoYW5uZWxdLT56X2ZwID0gTlVMTDsJLyogU2V0IGZpbGUgcG9pbnRlciB0byBOVUxM ICovCisgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0gMDsJLyogQ3VycmVudCBsaW5lIG51 bWJlciBpcyAwICovCisgICAgel9maWxlW2NoYW5uZWxdLT56X2ZsYWdzID0gMDsJLyogU2V0IGZs YWdzIHRvIDAgKi8KKyAgICAqKHpfZmlsZVtjaGFubmVsXS0+el9uYW1lKSA9ICdcMCc7CS8qIENs ZWFyIG5hbWUgKi8KKyAgICBmcmVlKHpfZmlsZVtjaGFubmVsXSk7CisgICAgel9maWxlW2NoYW5u ZWxdID0gTlVMTDsKKyAgICByZXR1cm4oel9lcnJvciA9IDApOworfQorCisvKgorICBaIF8gTyBV IFQgIC0tICBPdXRwdXQgc3RyaW5nIHRvIGNoYW5uZWwuCisKKyAgQ2FsbCB3aXRoOgorICAgIGNo YW5uZWw6ICAgICBDaGFubmVsIG51bWJlciB0byB3cml0ZSB0by4KKyAgICBzOiAgICAgICAgICAg U3RyaW5nIHRvIHdyaXRlLgorICAgIGxlbmd0aCA+IC0xOiBIb3cgbWFueSBjaGFyYWN0ZXJzIG9m IHMgdG8gd3JpdGUuCisgICAgbGVuZ3RoIDwgMDogIFdyaXRlIGVudGlyZSBOVUwtdGVybWluYXRl ZCBzdHJpbmcuCisgICAgZmxhZ3MgPT0gMDogIFN1cHBseSBsaW5lIHRlcm1pbmF0aW9uLgorICAg IGZsYWdzID4gIDA6ICBEb24ndCBzdXBwbHkgbGluZSB0ZXJtaW5hdGlvbi4KKyAgICBmbGFncyA8 ICAwOiAgV3JpdGUgJ2xlbmd0aCcgTlVMIGNoYXJhY3RlcnMuCisgIFNwZWNpYWwgY2FzZToKKyAg ICBJZiBmbGFncyA+IC0xIGFuZCBzIGlzIGVtcHR5IG9yIE5VTEwgYW5kIGxlbmd0aCA9PSAxLCB3 cml0ZSAxIE5VTC4KKyAgUmV0dXJuczoKKyAgICBOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVu IHRvIGNoYW5uZWwgb24gc3VjY2Vzcywgb3IKKyAgICBuZWdhdGl2ZSBGWF94eHggZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgorKi8KK2ludAorel9vdXQoY2hhbm5lbCxzLGxlbmd0aCxmbGFncykgaW50 IGNoYW5uZWwsIGZsYWdzLCBsZW5ndGg7IGNoYXIgKiBzOyB7CisgICAgRklMRSAqIHQ7CisgICAg aW50IHgsIG47CisgICAgY2hhciBjID0gJ1wwJzsKKworICAgIGlmICghcykgcyA9ICIiOyAgICAg ICAgICAgICAgICAgICAgIC8qIEd1YXJkIGFnYWluc3QgbnVsbCBwb2ludGVyICovCisjaWZkZWYg REVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAgIGRlYnVnKEYxMTEsInpfb3V0IixzLGNo YW5uZWwpOworICAgICAgICBkZWJ1ZyhGMTAxLCJ6X291dCBsZW5ndGgiLCIiLGxlbmd0aCk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInpfb3V0IGZsYWdzIiwiIixmbGFncyk7CisgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisgICAgaWYgKCF6X2luaXRlZCkgICAgICAgICAgICAgICAgICAgICAgLyog RmlsZSBpL28gaW5pdGVkPyAqLworICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAg IGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikgICAgICAgICAgIC8qIENoYW5uZWwgaW4gcmFuZ2U/ ICovCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7CisgICAgaWYgKCF6X2ZpbGVbY2hh bm5lbF0pCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgaWYgKCEodCA9IHpf ZmlsZVtjaGFubmVsXS0+el9mcCkpICAgIC8qIEZpbGUgb3Blbj8gKi8KKyAgICAgIHJldHVybih6 X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoISgoel9maWxlW2NoYW5uZWxdLT56X2ZsYWdzKSAm IChGTV9XUkl8Rk1fQVBQKSkpIC8qIEluIHdyaXRlIG1vZGU/ICovCisgICAgICByZXR1cm4oel9l cnJvciA9IEZYX0ZPUCk7CisgICAgbiA9IGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAg LyogTGVuZ3RoIG9mIHN0cmluZyB0byB3cml0ZSAqLworICAgIGlmIChuIDwgMCkgeyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE5lZ2F0aXZlIG1lYW5zIGdldCBpdCBvdXJzZWx2ZXMgKi8KKyAg ICAgICAgaWYgKGZsYWdzIDwgMCkgICAgICAgICAgICAgICAgICAvKiBFeGNlcHQgd2hlbiB0b2xk IHRvIHdyaXRlIE5VTHMgaW4gKi8KKyAgICAgICAgICByZXR1cm4oel9lcnJvciA9IEZYX1JORyk7 ICAgICAvKiB3aGljaCBjYXNlIGFyZ3MgYXJlIGluY29uc2lzdGVudCAqLworICAgICAgICBuID0g c3RybGVuKHMpOyAgICAgICAgICAgICAgICAgIC8qIEdldCBsZW5ndGggb2Ygc3RyaW5nIGFyZyAq LworICAgIH0KKyAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNl dCBlcnJubyAqLworICAgIGRlYnVnKEYxMDEsInpfb3V0IG4iLCIiLG4pOworICAgIGlmIChmbGFn cyA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRpbmcgTlVMcy4uLiAqLworICAgICAg ICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAg eCA9IGZ3cml0ZSgmYywxLDEsdCk7CisgICAgICAgICAgICBpZiAoeCA8IDEpCisgICAgICAgICAg ICAgIHJldHVybih6X2Vycm9yID0gKGVycm5vID8gRlhfU1lTIDogRlhfVU5LKSk7CisgICAgICAg IH0KKyAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0gLTE7ICAgLyogQ3VycmVudCBs aW5lIG5vIGxvbmdlciBrbm93biAqLworICAgICAgICB6X2Vycm9yID0gMDsKKyAgICAgICAgcmV0 dXJuKGkpOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRp bmcgc3RyaW5nIGFyZyAqLworICAgICAgICBpZiAobiA9PSAxICYmICFzWzBdKSAgICAgICAgICAg IC8qIFdyaXRpbmcgb25lIGNoYXIgYnV0IGl0J3MgTlVMICovCisgICAgICAgICAgeCA9IGZ3cml0 ZSgmYywxLDEsdCk7CisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog V3JpdGluZyBub24tTlVMIGNoYXIgb3Igc3RyaW5nICovCisgICAgICAgICAgeCA9IGZ3cml0ZShz LDEsbix0KTsKKyAgICAgICAgZGVidWcoRjEwMSwiel9vdXQgZndyaXRlIixja2l0b2EoeCksZXJy bm8pOworICAgICAgICBpZiAoeCA8IG4pICAgICAgICAgICAgICAgICAgICAgIC8qIEZhaWx1cmUg dG8gd3JpdGUgcmVxdWVzdGVkIGFtb3VudCAqLworICAgICAgICAgIHJldHVybih6X2Vycm9yID0g KGVycm5vID8gRlhfU1lTIDogRlhfVU5LKSk7IC8qIFJldHVybiBlcnJvciAqLworICAgICAgICBp ZiAoZmxhZ3MgPT0gMCkgeyAgICAgICAgICAgICAgIC8qIElmIHN1cHBseWluZyBsaW5lIHRlcm1p bmF0aW9uICovCisgICAgICAgICAgICBpZiAoZndyaXRlKCJcbiIsMSwxLHQpKSAgICAgLyogZG8g dGhhdCAgKi8KKyAgICAgICAgICAgICAgeCArPSB6X2x0OyAgICAgICAgICAgICAgICAvKiBjb3Vu dCB0aGUgdGVybWluYXRvciAqLworICAgICAgICAgICAgaWYgKHpfZmlsZVtjaGFubmVsXS0+el9u bGluZSA+IC0xKSAvKiBjb3VudCB0aGlzIGxpbmUgKi8KKyAgICAgICAgICAgICAgel9maWxlW2No YW5uZWxdLT56X25saW5lKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB6X2ZpbGVb Y2hhbm5lbF0tPnpfbmxpbmUgPSAtMTsgLyogQ3VycmVudCBsaW5lIG5vIGxvbmdlciBrbm93biAq LworICAgICAgICB9CisgICAgfQorICAgIHpfZXJyb3IgPSAwOworICAgIHJldHVybih4KTsKK30K KworI2RlZmluZSBaX0lOQlVGTEVOIDY0CisKKy8qCisgIFogXyBJIE4gIC0tICBNdWx0aWNoYW5u ZWwgaS9vIGZpbGUgaW5wdXQgZnVuY3Rpb24uCisKKyAgQ2FsbCB3aXRoOgorICAgIGNoYW5uZWwg bnVtYmVyIHRvIHJlYWQgZnJvbS4KKyAgICBzID0gYWRkcmVzcyBvZiBkZXN0aW5hdGlvbiBidWZm ZXIuCisgICAgYnVmbGVuID0gZGVzdGluYXRpb24gYnVmZmVyIGxlbmd0aC4KKyAgICBsZW5ndGgg PSBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCwgbXVzdCBiZSA8IGJ1Zmxlbi4KKyAgICBmbGFnczog MCA9IHJlYWQgYSBsaW5lOyBub256ZXJvID0gcmVhZCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVz LgorICBSZXR1cm5zOgorICAgIE51bWJlciBvZiBieXRlcyByZWFkIGludG8gYnVmZmVyIG9yIGEg bmVnYXRpdmUgZXJyb3IgY29kZS4KKyAgICBBIHRlcm1pbmF0aW5nIE5VTCBpcyBkZXBvc2l0ZWQg YWZ0ZXIgdGhlIGxhc3QgYnl0ZSB0aGF0IHdhcyByZWFkLgorKi8KK2ludAorel9pbihjaGFubmVs LHMsYnVmbGVuLGxlbmd0aCxmbGFncykKKyBpbnQgY2hhbm5lbCwgYnVmbGVuLCBsZW5ndGgsIGZs YWdzOyBjaGFyICogczsKKy8qIHpfaW4gKi8geworICAgIGludCBpLCBqLCB4OworICAgIEZJTEUg KiB0OworICAgIGNoYXIgKiBwOworCisgICAgaWYgKCF6X2luaXRlZCkgICAgICAgICAgICAgICAg ICAgICAgLyogQ2hlY2sgZXZlcnl0aGluZy4uLiAqLworICAgICAgcmV0dXJuKHpfZXJyb3IgPSBG WF9OT1ApOworICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikKKyAgICAgIHJldHVybih6X2Vy cm9yID0gRlhfQ0hOKTsKKyAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkKKyAgICAgIHJldHVybih6 X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkK KyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoISgoel9maWxlW2NoYW5u ZWxdLT56X2ZsYWdzKSAmIEZNX1JFQSkpCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX0ZPUCk7 CisgICAgaWYgKCFzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgZGVzdGlu YXRpb24gKi8KKyAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9STkcpOworICAgIHNbMF0gPSBOVUw7 CisgICAgaWYgKGxlbmd0aCA9PSAwKSAgICAgICAgICAgICAgICAgICAgLyogUmVhZCAwIGJ5dGVz IC0gZWFzeS4gKi8KKyAgICAgIHJldHVybih6X2Vycm9yID0gMCk7CisgICAgZGVidWcoRjEwMSwi el9pbiBjaGFubmVsIiwiIixjaGFubmVsKTsKKyAgICBkZWJ1ZyhGMTAxLCJ6X2luIGJ1ZmxlbiIs IiIsYnVmbGVuKTsKKyAgICBkZWJ1ZyhGMTAxLCJ6X2luIGxlbmd0aCIsIiIsbGVuZ3RoKTsKKyAg ICBkZWJ1ZyhGMTAxLCJ6X2luIGZsYWdzIiwiIixmbGFncyk7CisgICAgaWYgKGxlbmd0aCA8IDAg fHwgYnVmbGVuIDwgMCkgICAgICAgLyogQ2hlY2sgbGVuZ3RoIGFyZ3MgKi8KKyAgICAgIHJldHVy bih6X2Vycm9yID0gRlhfUk5HKTsKKyAgICBpZiAoYnVmbGVuIDw9IGxlbmd0aCkKKyAgICAgIHJl dHVybih6X2Vycm9yID0gRlhfUk5HKTsKKyAgICBlcnJubyA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXNldCBlcnJubyAqLworICAgIGlmIChmbGFncykgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFJlYWQgYmxvY2sgb3IgYnl0ZSAqLworCWludCBuOwkJCQkvKiAyMDA1MDkx MiAqLworCW4gPSBsZW5ndGg7CQkJLyogMjAwNTA5MTIgKi8KKwlpID0gMDsJCQkJLyogMjAwNTA5 MTIgKi8KKwl3aGlsZSAobiA+IDApIHsJCQkvKiAyMDA1MDkxMiAqLworCSAgICBpID0gZnJlYWQo cywxLG4sdCk7CQkvKiAyMDA1MDkxMiAqLworI2lmZGVmIERFQlVHCisJICAgIGlmIChkZWJsb2cp IHsKKwkJZGVidWcoRjExMSwiel9pbiBibG9jayIscyxpKTsKKwkJZGVidWcoRjEwMSwiel9pbiBi bG9jayBlcnJubyIsIiIsZXJybm8pOworCQlkZWJ1ZyhGMTAxLCJ6X2luIGJsb2NrIGZlcnJvciIs IiIsZmVycm9yKHQpKTsKKwkJZGVidWcoRjEwMSwiel9pbiBibG9jayBmZW9mIiwiIixmZW9mKHQp KTsKKwkgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisJICAgIGlmIChpID09IDApIGJyZWFrOwkJ LyogMjAwNTA5MTIgKi8KKwkgICAgcyArPSBpOwkJCS8qIDIwMDUwOTEyICovCisJICAgIG4gLT0g aTsJCQkvKiAyMDA1MDkxMiAqLworCX0KKwkvKiBDdXJyZW50IGxpbmUgbm8gbG9uZ2VyIGtub3du ICovCisgICAgICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSA9IChDS19PRkZfVCktMTsKKyAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGxpbmUgKi8KKyNp Zm5kZWYgQ09NTUVOVAorICAgICAgICAvKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJlY2F1c2UgaXQn cyBzaW1wbGVyIHRoYW4gdGhlIG90aGVycyAqLworICAgICAgICAvKiBhbmQgYWxzbyBtYXJnaW5h bGx5IGZhc3Rlci4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiel9pbiBnZXRjIGxvb3AiLCIiLENL RlRFTEwodCkpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg ICAgICAgIGlmICgoeCA9IGdldGModCkpID09IEVPRikgeworICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsInpfaW4gZ2V0YyBlcnJvciIsIiIsQ0tGVEVMTCh0KSk7CisgICAgICAgICAgICAgICAg c1tpXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBzW2ldID0geDsKKyAgICAgICAgICAgIGlmIChzW2ldID09ICdcbicpIHsKKyAgICAg ICAgICAgICAgICBzW2ldID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTExLCJ6X2luIGxpbmUgYnl0ZSBsb29w Iixja2l0b2EoZXJybm8pLGkpOworICAgICAgICBkZWJ1ZyhGMTExLCJ6X2luIGxpbmUgZ290Iixz LHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSk7CisgICAgICAgIGlmICh6X2ZpbGVbY2hhbm5lbF0t PnpfbmxpbmUgPiAtMSkKKyAgICAgICAgICB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmUrKzsKKyNl bHNlCisjaWZkZWYgQ09NTUVOVDIKKyAgICAgICAgLyogU3RyYWlnaHRmb3J3YXJkIGJ1dCBzdHJs ZW4oKSBzbG93cyBpdCBkb3duLiAqLworICAgICAgICBzWzBdID0gJ1wwJzsKKyAgICAgICAgaSA9 IDA7CisgICAgICAgIGlmIChmZ2V0cyhzLGxlbmd0aCx0KSkgeworICAgICAgICAgICAgaSA9IHN0 cmxlbihzKTsKKyAgICAgICAgICAgIGlmIChpID4gMCAmJiBzW2ktMV0gPT0gJ1xuJykgaS0tOwor ICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTEsInpfaW4gbGluZSBmZ2V0cyIsY2tpdG9hKGVy cm5vKSxpKTsKKyAgICAgICAgaWYgKHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSA+IC0xKQorICAg ICAgICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSsrOworI2Vsc2UKKyAgICAgICAgLyogVGhp cyBpcyBhIGRvLWl0LXlvdXJzZWxmIGZnZXRzKCkgd2l0aCBpdHMgb3duIHJlYWRhaGVhZCBhbmQg Ki8KKyAgICAgICAgLyogcHV0YmFjay4gIEl0J3MgYSBiaXQgZmFzdGVyIHRoYW4gcmVhbCBmZ2V0 cygpIGJ1dCBub3QgZW5vdWdoICovCisgICAgICAgIC8qIHRvIGp1c3RpZnkgdGhlIGFkZGVkIGNv bXBsZXhpdHkgb3IgdGhlIHJpc2sgb2YgdGhlIGZ0ZWxsKCkgYW5kICovCisgICAgICAgIC8qIGZz ZWVrKCkgY2FsbHMgZmFpbGluZy4gKi8KKyAgICAgICAgaW50IGssIGZsYWcgPSAwOworICAgICAg ICBDS19PRkZfVCBwb3M7CisgICAgICAgIGZvciAoaSA9IDA7ICFmbGFnICYmIGkgPD0gKGxlbmd0 aCAtIFpfSU5CVUZMRU4pOyBpICs9IFpfSU5CVUZMRU4pIHsKKyAgICAgICAgICAgIGsgPSAoKGxl bmd0aCAtIGkpIDwgWl9JTkJVRkxFTikgPyBsZW5ndGggLSBpIDogWl9JTkJVRkxFTjsKKyAgICAg ICAgICAgIGlmICgoeCA9IGZyZWFkKHMraSwxLGssdCkpIDwgMSkKKyAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICBzW2kreF0gPSAnXDAnOworICAgICAgICAgICAgZm9yIChqID0gMDsg aiA8IHg7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChzW2kral0gPT0gJ1xuJykgeworICAg ICAgICAgICAgICAgICAgICBzW2kral0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICBmbGFn ICsrOworICAgICAgICAgICAgICAgICAgICBwb3MgPSBDS0ZURUxMKHQpOworICAgICAgICAgICAg ICAgICAgICBpZiAocG9zID4gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyAtPSAo eCAtIGogLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSBDS0ZTRUVLKHQsIHBvcywg MCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpICs9IGo7CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9TWVMpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoel9maWxlW2NoYW5uZWxdLT56X25saW5l ID4gLTEpCisgICAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lKys7CisgICAgICAgIGRl YnVnKEYxMTEsInpfaW4gbGluZSBjaHVuayBsb29wIixja2l0b2EoZXJybm8pLGkpOworI2VuZGlm IC8qIENPTU1FTlQyICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICBkZWJ1ZyhG MTExLCJ6X2luIGkiLGNraXRvYShlcnJubyksaSk7CisgICAgaWYgKGkgPCAwKSBpID0gMDsgICAg ICAgICAgICAgICAgICAgLyogTlVMLXRlcm1pbmF0ZSByZXN1bHQgKi8KKyAgICBzW2ldID0gJ1ww JzsKKyAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgel9lcnJvciA9IDA7CisgICAgICAgIHJldHVy bihpKTsKKyAgICB9CisgICAgaWYgKGkgPT0gMCAmJiBmZW9mKHQpKSAgICAgICAgICAgICAgLyog RU9GIG9uIHJlYWRpbmc/ICovCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX0VPRik7ICAgICAg ICAgLyogUmV0dXJuIEVPRiBjb2RlICovCisgICAgcmV0dXJuKGVycm5vID8gKHpfZXJyb3IgPSAt MSkgOiBpKTsgLyogUmV0dXJuIGxlbmd0aCBvciBzeXN0ZW0gZXJyb3IgKi8KK30KKworaW50Cit6 X2ZsdXNoKGNoYW5uZWwpIGludCBjaGFubmVsOyB7ICAgICAgICAgLyogRmx1c2ggb3V0cHV0IGNo YW5uZWwgKi8KKyAgICBGSUxFICogdDsKKyAgICBpbnQgeDsKKyAgICBpZiAoIXpfaW5pdGVkKSAg ICAgICAgICAgICAgICAgICAgICAvKiBSZWd1bGFyIGNoZWNrcyAqLworICAgICAgcmV0dXJuKHpf ZXJyb3IgPSBGWF9OT1ApOworICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikKKyAgICAgIHJl dHVybih6X2Vycm9yID0gRlhfQ0hOKTsKKyAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkKKyAgICAg IHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxd LT56X2ZwKSkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoISgoel9m aWxlW2NoYW5uZWxdLT56X2ZsYWdzKSAmIChGTV9XUkl8Rk1fQVBQKSkpIC8qIFdyaXRlIGFjY2Vz cz8gKi8KKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfRk9QKTsKKyAgICBlcnJubyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBlcnJubyAqLworICAgIHggPSBmZmx1c2go dCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFRyeSB0byBmbHVzaCAqLworICAgIHJldHVybih4 ID8gKHpfZXJyb3IgPSBGWF9TWVMpIDogMCk7IC8qIFJldHVybiBzeXN0ZW0gZXJyb3Igb3IgMCBp ZiBPSyAqLworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQworel9zZWVrKGludCBjaGFubmVsLCBD S19PRkZfVCBwb3MpCS8qIE1vdmUgZmlsZSBwb2ludGVyIHRvIGJ5dGUgKi8KKyNlbHNlCit6X3Nl ZWsoY2hhbm5lbCxwb3MpIGludCBjaGFubmVsOyBDS19PRkZfVCBwb3M7IC8qIChzZWVrIHRvIGdp dmVuIHBvc2l0aW9uKSAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCit7CisgICAgaW50IGksIHgg PSAwLCByYzsKKyAgICBGSUxFICogdDsKKyAgICBpZiAoIXpfaW5pdGVkKSAgICAgICAgICAgICAg ICAgICAgICAvKiBDaGVjay4uLiAqLworICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOwor ICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhf Q0hOKTsKKyAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkKKyAgICAgIHJldHVybih6X2Vycm9yID0g RlhfTk9QKTsKKyAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkKKyAgICAgIHJl dHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAocG9zIDwgMEwpIHsKKyAgICAgICAgeCA9 IDI7CisgICAgICAgIHBvcyA9IChwb3MgPT0gLTIpID8gLTFMIDogMEw7CisgICAgfQorICAgIGVy cm5vID0gMDsKKyAgICByYyA9IENLRlNFRUsodCxwb3MseCk7CQkvKiBUcnkgdG8gc2VlayAqLwor ICAgIGRlYnVnKEYxMTEsInpfc2VlayIsY2tpdG9hKGVycm5vKSxyYyk7CisgICAgaWYgKHJjIDwg MCkgICAgICAgICAgICAgICAgICAgICAgICAgLyogT0s/ICovCisgICAgICByZXR1cm4oel9lcnJv ciA9IEZYX1NZUyk7IC8qIE5vLiAqLworICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSA9ICgo cG9zIHx8IHgpID8gLTEgOiAwKTsKKyAgICByZXR1cm4oel9lcnJvciA9IDApOworfQorCitpbnQK KyNpZmRlZiBDS19BTlNJQworel9saW5lKGludCBjaGFubmVsLCBDS19PRkZfVCBwb3MpICAgICAg ICAgICAvKiBNb3ZlIGZpbGUgcG9pbnRlciB0byBsaW5lICovCisjZWxzZQorel9saW5lKGNoYW5u ZWwscG9zKSBpbnQgY2hhbm5lbDsgQ0tfT0ZGX1QgcG9zOyAvKiAoc2VlayB0byBnaXZlbiBwb3Np dGlvbikgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeworICAgIGludCBpLCBsZW4sIHggPSAw OworICAgIENLX09GRl9UIGN1cnJlbnQgPSAoQ0tfT0ZGX1QpMCwgcHJldiA9IChDS19PRkZfVCkt MSwgb2xkID0gKENLX09GRl9UKS0xOworICAgIEZJTEUgKiB0OworICAgIGNoYXIgdG1wYnVmWzI1 Nl07CisgICAgaWYgKCF6X2luaXRlZCkgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2suLi4g Ki8KKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoY2hhbm5lbCA+PSB6 X21heGNoYW4pCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NITik7CisgICAgaWYgKCF6X2Zp bGVbY2hhbm5lbF0pCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgaWYgKCEo dCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05P UCk7CisgICAgZGVidWcoRjEwMSwiel9saW5lIHBvcyIsIiIscG9zKTsKKyAgICBpZiAocG9zIDwg MEwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBFT0Ygd2FudGVkICovCisgICAgICAgIENLX09G Rl9UIG47CisgICAgICAgIG4gPSB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxpbmU7CisgICAgICAgIGRl YnVnKEYxMDEsInpfbGluZSBuIiwiIixuKTsKKyAgICAgICAgaWYgKG4gPCAwIHx8IHBvcyA8IDAp IHsKKyAgICAgICAgICAgIHJld2luZCh0KTsKKyAgICAgICAgICAgIG4gPSAwOworICAgICAgICB9 CisgICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBjb3VsZCB0 YWtlIGEgd2hpbGUuLi4gKi8KKyAgICAgICAgICAgIGlmICgoeCA9IGdldGModCkpID09IEVPRikK KyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoeCA9PSAnXG4nKSB7CisgICAg ICAgICAgICAgICAgbisrOworICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gLTIpIHsKKyAgICAg ICAgICAgICAgICAgICAgb2xkID0gcHJldjsKKyAgICAgICAgICAgICAgICAgICAgcHJldiA9IENL RlRFTEwodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIGRlYnVnKEYxMDEsInpfbGluZSBvbGQiLCIiLG9sZCk7CisgICAgICAgIGRlYnVnKEYx MDEsInpfbGluZSBwcmV2IiwiIixwcmV2KTsKKyAgICAgICAgaWYgKHBvcyA9PSAtMikgeworICAg ICAgICAgICAgaWYgKCh4ID0gel9zZWVrKGNoYW5uZWwsb2xkKSkgPCAwKQorICAgICAgICAgICAg ICByZXR1cm4oel9lcnJvciA9IHgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBu LS07CisgICAgICAgIH0KKyAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0gbjsKKyAg ICAgICAgcmV0dXJuKHpfZXJyb3IgPSAwKTsKKyAgICB9CisgICAgaWYgKHBvcyA9PSAwTCkgeyAg ICAgICAgICAgICAgICAgICAgLyogUmV3aW5kIHdhbnRlZCAqLworICAgICAgICB6X2ZpbGVbY2hh bm5lbF0tPnpfbmxpbmUgPSAwTDsKKyAgICAgICAgcmV3aW5kKHQpOworICAgICAgICBkZWJ1ZyhG MTAwLCJ6X2xpbmUgcmV3aW5kIiwiIiwwKTsKKyAgICAgICAgcmV0dXJuKDBMKTsKKyAgICB9Cisg ICAgdG1wYnVmWzI1NV0gPSBOVUw7ICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGJ1ZiBp cyBOVUwgdGVybWluYXRlZCAqLworICAgIGN1cnJlbnQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfbmxp bmU7ICAvKiBDdXJyZW50IGxpbmUgKi8KKyAgICAvKgorICAgICAgSWYgbmVjZXNzYXJ5IHRoZSBm b2xsb3dpbmcgY291bGQgYmUgb3B0aW1pemVkLCBlLmcuIGZvciBwb3NpdGlvbmluZworICAgICAg dG8gYSBwcmV2aW91cyBsaW5lIGluIGEgbGFyZ2UgZmlsZSB3aXRob3V0IHN0YXJ0aW5nIG92ZXIu CisgICAgKi8KKyAgICBpZiAoY3VycmVudCA8IDAgfHwgcG9zIDwgY3VycmVudCkgeyAvKiBOb3Qg a25vd24gb3IgYmVoaW5kIHVzLi4uICovCisgICAgICAgIGRlYnVnKEYxMDEsInpfbGluZSByZXdp bmRpbmciLCIiLHBvcyk7CisgICAgICAgIGlmICgoeCA9IHpfc2VlayhjaGFubmVsLCAwTCkpIDwg MCkgLyogUmV3aW5kICovCisgICAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSB4KTsKKyAgICAgICAg aWYgKHBvcyA9PSAwKSAgICAgICAgICAgICAgICAgICAvKiBJZiAwdGggbGluZSB3YW50ZWQgd2Un cmUgZG9uZSAqLworICAgICAgICAgIHJldHVybih6X2Vycm9yID0gMCk7CisgICAgICAgIGN1cnJl bnQgPSAwOworICAgIH0KKyAgICB3aGlsZSAoY3VycmVudCA8IHBvcykgeyAgICAgICAgICAgICAv KiBTZWFyY2ggZm9yIHNwZWNpZmllZCBsaW5lICovCisgICAgICAgIGlmIChmZ2V0cyh0bXBidWYs MjU1LHQpKSB7CisgICAgICAgICAgICBsZW4gPSBzdHJsZW4odG1wYnVmKTsKKyAgICAgICAgICAg IGlmIChsZW4gPiAwICYmIHRtcGJ1ZltsZW4tMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgICAg IGN1cnJlbnQrKzsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJ6X2xpbmUgcmVhZCIsY2tp dG9hKGxlbiksY3VycmVudCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA9PSAwKSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9VTkspOworICAgICAgICAgICAgfQor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgel9maWxlW2NoYW5uZWxdLT56X25saW5lID0g LTFMOworICAgICAgICAgICAgZGVidWcoRjEwMSwiel9saW5lIHByZW1hdHVyZSBFT0YiLCIiLGN1 cnJlbnQpOworICAgICAgICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9FT0YpOworICAgICAgICB9 CisgICAgfQorICAgIHpfZmlsZVtjaGFubmVsXS0+el9ubGluZSA9IGN1cnJlbnQ7CisgICAgZGVi dWcoRjEwMSwiel9saW5lIHJlc3VsdCIsIiIsY3VycmVudCk7CisgICAgel9lcnJvciA9IDA7Cisg ICAgcmV0dXJuKGN1cnJlbnQpOworfQorCitjaGFyICoKK3pfZ2V0bmFtZShjaGFubmVsKSBpbnQg Y2hhbm5lbDsgeyAgICAgICAvKiBSZXR1cm4gbmFtZSBvZiBmaWxlIG9uIGNoYW5uZWwgKi8KKyAg ICBGSUxFICogdDsKKyAgICBpZiAoIXpfaW5pdGVkKSB7CisgICAgICAgIHpfZXJyb3IgPSBGWF9O T1A7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKGNoYW5uZWwgPj0gel9t YXhjaGFuKSB7CisgICAgICAgIHpfZXJyb3IgPSBGWF9DSE47CisgICAgICAgIHJldHVybihOVUxM KTsKKyAgICB9CisgICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pIHsKKyAgICAgICAgel9lcnJvciA9 IEZYX05PUDsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoISh0ID0gel9m aWxlW2NoYW5uZWxdLT56X2ZwKSkgeworICAgICAgICB6X2Vycm9yID0gRlhfTk9QOworICAgICAg ICByZXR1cm4oTlVMTCk7CisgICAgfQorICAgIHJldHVybigoY2hhciAqKSh6X2ZpbGVbY2hhbm5l bF0tPnpfbmFtZSkpOworfQorCitpbnQKK3pfZ2V0bW9kZShjaGFubmVsKSBpbnQgY2hhbm5lbDsg eyAgICAgICAvKiBSZXR1cm4gT1BFTiBtb2RlcyBvZiBjaGFubmVsICovCisgICAgRklMRSAqIHQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMCBpZiBmaWxlIG5vdCBvcGVuICovCisjaWZu ZGVmIE5PU1RBVAorI2lmZGVmIE5UCisgICAgc3RydWN0IF9zdGF0IHN0YXRidWY7CisjZWxzZSAv KiBOVCAqLworICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRp ZiAvKiBOT1NUQVQgKi8KKyAgICBpbnQgeDsKKyAgICBpZiAoIXpfaW5pdGVkKQorICAgICAgcmV0 dXJuKDApOworICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikKKyAgICAgIHJldHVybih6X2Vy cm9yID0gRlhfQ0hOKTsKKyAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkKKyAgICAgIHJldHVybigw KTsKKyAgICBpZiAoISh0ID0gel9maWxlW2NoYW5uZWxdLT56X2ZwKSkKKyAgICAgIHJldHVybigw KTsKKyAgICB4ID0gel9maWxlW2NoYW5uZWxdLT56X2ZsYWdzOworICAgIGlmIChmZW9mKHQpKSB7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgbWlnaHQgbm90IHdvcmsgZm9yICovCisgICAg ICAgIHggfD0gRk1fRU9GOyAgICAgICAgICAgICAgICAgICAgLyogb3V0cHV0IGZpbGVzICovCisj aWZuZGVmIE5PU1RBVAorICAgIC8qIEJ1dCB0aGlzIGRvZXMgaWYgd2UgY2FuIHVzZSBpdC4gKi8K KyAgICB9IGVsc2UgaWYgKHN0YXQoel9maWxlW2NoYW5uZWxdLT56X25hbWUsJnN0YXRidWYpID4g LTEpIHsKKyAgICAgICAgaWYgKENLRlRFTEwodCkgPT0gc3RhdGJ1Zi5zdF9zaXplKQorICAgICAg ICAgIHggfD0gRk1fRU9GOworI2VuZGlmIC8qIE5PU1RBVCAqLworICAgIH0KKyAgICByZXR1cm4o eCk7Cit9CisKK0NLX09GRl9UCit6X2dldHBvcyhjaGFubmVsKSBpbnQgY2hhbm5lbDsgeyAgICAg ICAgLyogR2V0IGZpbGUgcG9pbnRlciBwb3NpdGlvbiAqLworICAgIEZJTEUgKiB0OyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIG9uIHRoaXMgY2hhbm5lbCAqLworICAgIENLX09GRl9UIHg7 CisgICAgaWYgKCF6X2luaXRlZCkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAg ICBpZiAoY2hhbm5lbCA+PSB6X21heGNoYW4pCisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX0NI Tik7CisgICAgaWYgKCF6X2ZpbGVbY2hhbm5lbF0pCisgICAgICByZXR1cm4oel9lcnJvciA9IEZY X05PUCk7CisgICAgaWYgKCEodCA9IHpfZmlsZVtjaGFubmVsXS0+el9mcCkpCisgICAgICByZXR1 cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgeCA9IENLRlRFTEwodCk7CisgICAgcmV0dXJuKCh4 IDwgMEwpID8gKHpfZXJyb3IgPSBGWF9TWVMpIDogeCk7Cit9CisKK0NLX09GRl9UCit6X2dldGxp bmUoY2hhbm5lbCkgaW50IGNoYW5uZWw7IHsgICAgICAgLyogR2V0IGN1cnJlbnQgbGluZSBudW1i ZXIgKi8KKyAgICBGSUxFICogdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiBmaWxl IG9uIHRoaXMgY2hhbm5lbCAqLworICAgIENLX09GRl9UIHJjOworICAgIGlmICghel9pbml0ZWQp CisgICAgICByZXR1cm4oel9lcnJvciA9IEZYX05PUCk7CisgICAgaWYgKGNoYW5uZWwgPj0gel9t YXhjaGFuKQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9DSE4pOworICAgIGlmICghel9maWxl W2NoYW5uZWxdKQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmICghKHQg PSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnApKQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1Ap OworICAgIGRlYnVnKEYxMDEsInpfZ2V0bGluZSIsIiIsel9maWxlW2NoYW5uZWxdLT56X25saW5l KTsKKyAgICByYyA9IHpfZmlsZVtjaGFubmVsXS0+el9ubGluZTsKKyAgICByZXR1cm4oKHJjIDwg MCkgPyAoel9lcnJvciA9IEZYX0xOVSkgOiByYyk7Cit9CisKK2ludAorel9nZXRmbnVtKGNoYW5u ZWwpIGludCBjaGFubmVsOyB7ICAgICAgIC8qIEdldCBmaWxlIG51bWJlciAvIGhhbmRsZSAqLwor ICAgIEZJTEUgKiB0OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBmaWxlIG9uIHRo aXMgY2hhbm5lbCAqLworICAgIGlmICghel9pbml0ZWQpCisgICAgICByZXR1cm4oel9lcnJvciA9 IEZYX05PUCk7CisgICAgaWYgKGNoYW5uZWwgPj0gel9tYXhjaGFuKQorICAgICAgcmV0dXJuKHpf ZXJyb3IgPSBGWF9DSE4pOworICAgIGlmICghel9maWxlW2NoYW5uZWxdKQorICAgICAgcmV0dXJu KHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmICghKHQgPSB6X2ZpbGVbY2hhbm5lbF0tPnpfZnAp KQorICAgICAgcmV0dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIHpfZXJyb3IgPSAwOworICAg IHJldHVybihmaWxlbm8odCkpOworfQorCisvKgorICBMaW5lLW9yaWVudGVkIGNvdW50cyBhbmQg c2Vla3MgYXJlIGFzIGR1bWIgYXMgdGhleSBjYW4gYmUgYXQgdGhlIG1vbWVudC4KKyAgTGF0ZXIg d2UgY2FuIHNwZWVkIHRoZW0gdXAgYnkgYnVpbGRpbmcgbGl0dGxlIGluZGV4ZXMuCisqLworQ0tf T0ZGX1QKK3pfY291bnQoY2hhbm5lbCwgd2hhdCkgaW50IGNoYW5uZWwsIHdoYXQ7IHsgLyogQ291 bnQgYnl0ZXMgb3IgbGluZXMgaW4gZmlsZSAqLworICAgIEZJTEUgKiB0OworICAgIGludCBpLCB4 OworICAgIENLX09GRl9UIHBvcywgY291bnQgPSAoQ0tfT0ZGX1QpMDsKKyAgICBpZiAoIXpfaW5p dGVkKSAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBzdHVmZi4uLiAqLworICAgICAgcmV0 dXJuKHpfZXJyb3IgPSBGWF9OT1ApOworICAgIGlmIChjaGFubmVsID49IHpfbWF4Y2hhbikKKyAg ICAgIHJldHVybih6X2Vycm9yID0gRlhfQ0hOKTsKKyAgICBpZiAoIXpfZmlsZVtjaGFubmVsXSkK KyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBpZiAoISh0ID0gel9maWxlW2No YW5uZWxdLT56X2ZwKSkKKyAgICAgIHJldHVybih6X2Vycm9yID0gRlhfTk9QKTsKKyAgICBwb3Mg PSBDS0ZURUxMKHQpOwkJCS8qIFNhdmUgY3VycmVudCBmaWxlIHBvaW50ZXIgKi8KKyAgICBlcnJu byA9IDA7CisgICAgel9lcnJvciA9IDA7CisgICAgaWYgKHdoYXQgPT0gUkRfQ0hBUikgeyAgICAg ICAgICAgICAgLyogU2l6ZSBpbiBieXRlcyByZXF1ZXN0ZWQgKi8KKyNpZmRlZiBDT01NRU5UCisg ICAgICAgIGlmICghQ0tGU0VFSyh0LDBMLDIpKSB7CQkvKiBTZWVrIHRvIGVuZCAqLworICAgICAg ICAgICAgY291bnQgPSBDS0ZURUxMKHQpOwkJLyogR2V0IGZpbGUgcG9pbnRlciAqLworICAgICAg ICAgICAgQ0tGU0VFSyh0LHBvcywwKTsJCS8qIFJlc3RvcmUgZmlsZSBmaWxlIHBvaW50ZXIgKi8K KyAgICAgICAgICAgIHJldHVybihjb3VudCk7CisgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogRmFsbGJhY2sgaW4gY2FzZSBzZWVrIGZhaWxzICovCisjZW5kaWYJLyog Q09NTUVOVCAqLworICAgICAgICAgIHJldHVybih6Z2V0ZnMoel9maWxlW2NoYW5uZWxdLT56X25h bWUpKTsKKyAgICB9CisgICAgcmV3aW5kKHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog TGluZSBjb3VudCByZXF1ZXN0ZWQgLSByZXdpbmQuICovCisgICAgd2hpbGUgKDEpIHsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQ291bnQgbGluZXMuICovCisgICAgICAgIGlmICgoeCA9IGdl dGModCkpID09IEVPRikgICAgICAgLyogU3R1cGlkIGJ5dGUgbG9vcCAqLworICAgICAgICAgIGJy ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJ1dCBpdCB3b3JrcyBhcyB3ZWxsIGFzIGFu eXRoaW5nICovCisgICAgICAgIGlmICh4ID09ICdcbicpICAgICAgICAgICAgICAgICAgLyogZWxz ZS4uLiAqLworICAgICAgICAgIGNvdW50Kys7CisgICAgfQorICAgIHggPSBDS0ZTRUVLKHQscG9z LDApOwkJLyogUmVzdG9yZSBmaWxlIHBvaW50ZXIgKi8KKyAgICByZXR1cm4oY291bnQpOworfQor CisvKiBVc2VyIGludGVyZmFjZSBmb3IgZ2VuZXJhbGl6ZWQgY2hhbm5lbC1vcmllbnRlZCBmaWxl IGkvbyAqLworCitzdHJ1Y3Qga2V5dGFiIGZjdGFiW10gPSB7ICAgICAgICAgICAgICAgLyogRklM RSBzdWJjb21tYW5kcyAqLworICAgIHsgImNsb3NlIiwgICAgICBGSUxfQ0xTLCAwIH0sCisgICAg eyAiY291bnQiLCAgICAgIEZJTF9DT1UsIDAgfSwKKyAgICB7ICJmbHVzaCIsICAgICAgRklMX0ZM VSwgMCB9LAorICAgIHsgImxpc3QiLCAgICAgICBGSUxfTElTLCAwIH0sCisgICAgeyAib3BlbiIs ICAgICAgIEZJTF9PUE4sIDAgfSwKKyAgICB7ICJyZWFkIiwgICAgICAgRklMX1JFQSwgMCB9LAor ICAgIHsgInJld2luZCIsICAgICBGSUxfUkVXLCAwIH0sCisgICAgeyAic2VlayIsICAgICAgIEZJ TF9TRUUsIDAgfSwKKyAgICB7ICJzdGF0dXMiLCAgICAgRklMX1NUQSwgMCB9LAorICAgIHsgIndy aXRlIiwgICAgICBGSUxfV1JJLCAwIH0KK307CitpbnQgbmZjdGFiID0gKHNpemVvZiAoZmN0YWIp IC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZjc3d0 YWJbXSA9IHsgICAgICAvKiBPUEVOIG1vZGVzICovCisgICAgeyAiL2FwcGVuZCIsICAgIEZNX0FQ UCwgIDAgfSwKKyAgICB7ICIvYmluYXJ5IiwgICAgRk1fQklOLCAgMCB9LAorI2lmZGVmIENPTU1F TlQKKyAgICB7ICIvY29tbWFuZCIsICAgRk1fQ01ELCAgMCB9LCAgICAgICAvKiBOb3QgaW1wbGVt ZW50ZWQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgeyAiL3JlYWQiLCAgICAgIEZNX1JF QSwgIDAgfSwKKyAgICB7ICIvd3JpdGUiLCAgICAgRk1fV1JJLCAgMCB9Cit9Oworc3RhdGljIGlu dCBuZmNzd3RhYiA9IChzaXplb2YgKGZjc3d0YWIpIC8gc2l6ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7 CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGZjbGt3dGFiW10gPSB7ICAgICAvKiBDTE9TRSBvcHRp b25zICovCisgICAgeyAiYWxsIiwgICAgICAgIDEsICAgICAgIDAgfQorfTsKKworc3RhdGljIHN0 cnVjdCBrZXl0YWIgZnNla3d0YWJbXSA9IHsgICAgIC8qIFNFRUsgc3ltYm9scyAqLworICAgIHsg ImVvZiIsICAgICAgICAxLCAgICAgICAwIH0sCisgICAgeyAibGFzdCIsICAgICAgIDIsICAgICAg IDAgfQorfTsKK3N0YXRpYyBpbnQgbmZzZWt3dGFiID0gKHNpemVvZiAoZnNla3d0YWIpIC8gc2l6 ZW9mIChzdHJ1Y3Qga2V5dGFiKSk7CisKKyNkZWZpbmUgU0VFX0xJTkUgIFJEX0xJTkUgICAgICAg ICAgICAgICAvKiBTRUVLIG9wdGlvbnMgKi8KKyNkZWZpbmUgU0VFX0NIQVIgIFJEX0NIQVIKKyNk ZWZpbmUgU0VFX1JFTCAgIDMKKyNkZWZpbmUgU0VFX0FCUyAgIDQKKyNkZWZpbmUgU0VFX0ZJTkQg IDUKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgZnNrc3d0YWJbXSA9IHsKKyAgICB7ICIvYWJzb2x1 dGUiLCAgU0VFX0FCUywgIDAgfSwKKyAgICB7ICIvYnl0ZSIsICAgICAgU0VFX0NIQVIsIDAgfSwK KyAgICB7ICIvY2hhcmFjdGVyIiwgU0VFX0NIQVIsIENNX0lOViB9LAorICAgIHsgIi9maW5kIiwg ICAgICBTRUVfRklORCwgQ01fQVJHIH0sCisgICAgeyAiL2xpbmUiLCAgICAgIFNFRV9MSU5FLCAw IH0sCisgICAgeyAiL3JlbGF0aXZlIiwgIFNFRV9SRUwsICAwIH0KK307CitzdGF0aWMgaW50IG5m c2tzd3RhYiA9IChzaXplb2YgKGZza3N3dGFiKSAvIHNpemVvZiAoc3RydWN0IGtleXRhYikpOwor CisjZGVmaW5lIENPVV9MSU5FICBSRF9MSU5FICAgICAgICAgICAgICAgLyogQ09VTlQgb3B0aW9u cyAqLworI2RlZmluZSBDT1VfQ0hBUiAgUkRfQ0hBUgorI2RlZmluZSBDT1VfTElTICAgMworI2Rl ZmluZSBDT1VfTk9MICAgNAorCitzdGF0aWMgc3RydWN0IGtleXRhYiBmY29zd3RhYltdID0gewor ICAgIHsgIi9ieXRlcyIsICAgICBDT1VfQ0hBUiwgMCAgICAgIH0sCisgICAgeyAiL2NoYXJhY3Rl cnMiLENPVV9DSEFSLCBDTV9JTlYgfSwKKyAgICB7ICIvbGluZXMiLCAgICAgQ09VX0xJTkUsIDAg ICAgICB9LAorICAgIHsgIi9saXN0IiwgICAgICBDT1VfTElTLCAgMCAgICAgIH0sCisgICAgeyAi L25vbGlzdCIsICAgIENPVV9OT0wsICAwICAgICAgfSwKKyAgICB7ICIvcXVpZXQiLCAgICAgQ09V X05PTCwgIENNX0lOViB9Cit9Oworc3RhdGljIGludCBuZmNvc3d0YWIgPSAoc2l6ZW9mIChmY29z d3RhYikgLyBzaXplb2YgKHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIg ZnJkdGFiW10gPSB7ICAgICAgIC8qIFJFQUQgdHlwZXMgKi8KKyAgICB7ICIvYmxvY2siLCAgICAg UkRfU0laRSwgQ01fSU5WfENNX0FSRyB9LAorICAgIHsgIi9ieXRlIiwgICAgICBSRF9DSEFSLCBD TV9JTlYgfSwKKyAgICB7ICIvY2hhcmFjdGVyIiwgUkRfQ0hBUiwgMCAgICAgIH0sCisgICAgeyAi L2xpbmUiLCAgICAgIFJEX0xJTkUsIDAgICAgICB9LAorICAgIHsgIi9zaXplIiwgICAgICBSRF9T SVpFLCBDTV9BUkcgfSwKKyAgICB7ICIvdHJpbSIsICAgICAgUkRfVFJJTSwgMCAgICAgIH0sCisg ICAgeyAiL3VudGFiaWZ5IiwgIFJEX1VOVEEsIDAgICAgICB9Cit9Oworc3RhdGljIGludCBuZnJk dGFiID0gKHNpemVvZiAoZnJkdGFiKSAvIHNpemVvZiAoc3RydWN0IGtleXRhYikpOworCitzdGF0 aWMgc3RydWN0IGtleXRhYiBmd3J0YWJbXSA9IHsgICAgICAgLyogV1JJVEUgdHlwZXMgKi8KKyAg ICB7ICIvYmxvY2siLCAgICAgV1JfU0laRSwgQ01fSU5WfENNX0FSRyB9LAorICAgIHsgIi9ieXRl IiwgICAgICBXUl9DSEFSLCBDTV9JTlYgfSwKKyAgICB7ICIvY2hhcmFjdGVyIiwgV1JfQ0hBUiwg MCAgICAgIH0sCisgICAgeyAiL2xpbmUiLCAgICAgIFdSX0xJTkUsIDAgICAgICB9LAorICAgIHsg Ii9scGFkIiwgICAgICBXUl9MUEFELCBDTV9BUkcgfSwKKyAgICB7ICIvcnBhZCIsICAgICAgV1Jf UlBBRCwgQ01fQVJHIH0sCisgICAgeyAiL3NpemUiLCAgICAgIFdSX1NJWkUsIENNX0FSRyB9LAor ICAgIHsgIi9zdHJpbmciLCAgICBXUl9TVFJJLCAwICAgICAgfQorfTsKK3N0YXRpYyBpbnQgbmZ3 cnRhYiA9IChzaXplb2YgKGZ3cnRhYikgLyBzaXplb2YgKHN0cnVjdCBrZXl0YWIpKTsKKworc3Rh dGljIGNoYXIgYmxhbmtzW10gPSAiXDA0MFwwNDBcMDQwXDA0MCI7IC8qIFNvbWUgYmxhbmtzIGZv ciBmb3JtYXR0aW5nICovCitzdGF0aWMgY2hhciAqIHNlZWtfdGFyZ2V0ID0gTlVMTDsKKworaW50 Citkb2ZpbGUob3ApIGludCBvcDsgeyAgICAgICAgICAgICAgICAgICAgLyogRG8gdGhlIEZJTEUg Y29tbWFuZCAqLworICAgIGNoYXIgdm5hbWJ1ZltWTkFNTF07ICAgICAgICAgICAgICAgIC8qIEJ1 ZmZlciBmb3IgdmFyaWFibGUgbmFtZXMgKi8KKyAgICBjaGFyICp2bnAgPSBOVUxMOyAgICAgICAg ICAgICAgICAgICAvKiBQb2ludGVyIHRvIHNhbWUgKi8KKyAgICBjaGFyIHpmaWxuYW1bQ0tNQVhQ QVRIKzJdOworICAgIGNoYXIgKiBwLCAqIG07CisgICAgc3RydWN0IEZEQiBmbCwgc3csIG51Owor ICAgIENLX09GRl9UIHo7CisgICAgaW50IHJzaXplLCBmaWxtb2RlID0gMCwgcmVsYXRpdmUgPSAt MSwgZW9mZmxnID0gMDsKKyAgICBpbnQgcmMsIHgsIHksIGN4LCBuLCBnZXR2YWwsIGR1bW15LCBj b25maXJtZWQsIGxpc3RpbmcgPSAtMTsKKyAgICBpbnQgY2hhcmZsYWcgPSAwLCBzaXplZmxhZyA9 IDA7CisgICAgaW50IHBhZCA9IDMyLCB3cl9scGFkID0gMCwgd3JfcnBhZCA9IDAsIHJkX3RyaW0g PSAwLCByZF91bnRhYiA9IDA7CisKKyAgICBtYWtlc3RyKCZzZWVrX3RhcmdldCxOVUxMKTsKKwor ICAgIGlmIChvcCA9PSBYWEZJTEUpIHsgICAgICAgICAgICAgICAgIC8qIEZJTEUgY29tbWFuZCB3 YXMgZ2l2ZW4gKi8KKyAgICAgICAgLyogR2V0IHN1YmNvbW1hbmQgKi8KKyAgICAgICAgaWYgKChj eCA9IGNta2V5KGZjdGFiLG5mY3RhYiwiT3BlcmF0aW9uIiwiIix4eHN0cmluZykpIDwgMCkgewor ICAgICAgICAgICAgaWYgKGN4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Rmls ZSBvcGVyYXRpb24gcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybihjeCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTaG9ydGhhbmQgY29tbWFuZCB3YXMgZ2l2 ZW4gKi8KKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICAgIGNhc2UgWFhGX0NMOiBjeCA9 IEZJTF9DTFM7IGJyZWFrOyAvKiBGQ0xPU0UgKi8KKyAgICAgICAgICBjYXNlIFhYRl9GTDogY3gg PSBGSUxfRkxVOyBicmVhazsgLyogRkZMVVNIICovCisgICAgICAgICAgY2FzZSBYWEZfTEk6IGN4 ID0gRklMX0xJUzsgYnJlYWs7IC8qIEZMSVNUICovCisgICAgICAgICAgY2FzZSBYWEZfT1A6IGN4 ID0gRklMX09QTjsgYnJlYWs7IC8qIGV0Yy4uLiAqLworICAgICAgICAgIGNhc2UgWFhGX1JFOiBj eCA9IEZJTF9SRUE7IGJyZWFrOworICAgICAgICAgIGNhc2UgWFhGX1JXOiBjeCA9IEZJTF9SRVc7 IGJyZWFrOworICAgICAgICAgIGNhc2UgWFhGX1NFOiBjeCA9IEZJTF9TRUU7IGJyZWFrOworICAg ICAgICAgIGNhc2UgWFhGX1NUOiBjeCA9IEZJTF9TVEE7IGJyZWFrOworICAgICAgICAgIGNhc2Ug WFhGX1dSOiBjeCA9IEZJTF9XUkk7IGJyZWFrOworICAgICAgICAgIGNhc2UgWFhGX0NPOiBjeCA9 IEZJTF9DT1U7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IHJldHVybigtMik7CisgICAgICAg IH0KKyAgICB9CisgICAgc3dpdGNoIChjeCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogRG8g cmVxdWVzdGVkIHN1YmNvbW1hbmQgKi8KKyAgICAgIGNhc2UgRklMX09QTjogICAgICAgICAgICAg ICAgICAgICAvKiBPUEVOICovCisgICAgICAgIGNtZmRiaSgmc3csICAgICAgICAgICAgICAgICAg ICAgLyogU3dpdGNoZXMgKi8KKyAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAgICAgICAg ICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgIlZhcmlhYmxlIG9yIHN3aXRjaCIsICAgIC8q IGhscG1zZyAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGRl ZmF1bHQgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAgbmZjc3d0YWIsICAgICAgICAgICAgICAg IC8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworICAgICAgICAgICAgICAgNCwg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kg Ki8KKyAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5n IGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICBmY3N3dGFiLCAgICAgICAgICAgICAgICAgLyog S2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAgICAgJmZsICAgICAgICAgICAgICAgICAgICAg IC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGNt ZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgLyogQW55dGhpbmcgdGhhdCBkb2Vzbid0IG1h dGNoICovCisgICAgICAgICAgICAgICBfQ01GTEQsICAgICAgICAgICAgICAgICAgLyogZmNvZGUg Ki8KKyAgICAgICAgICAgICAgICJWYXJpYWJsZSIsICAgICAgICAgICAgICAvKiBobHBtc2cgKi8K KyAgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAw LAorICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAg ICBOVUxMLAorICAgICAgICAgICAgICAgTlVMTAorICAgICAgICAgICAgICAgKTsKKyAgICAgICAg d2hpbGUgKDEpIHsKKyAgICAgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAvKiBQ YXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAg ICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1ZhcmlhYmxl IG5hbWUgYW5kIGZpbGUgbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIHgg PSAtOTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUZMRCkKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9 PSBfQ01LRVkpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGM7CisgICAgICAgICAgICAgICAgYyA9 IGNtZ2JyaygpOworICAgICAgICAgICAgICAgIGlmICgoZ2V0dmFsID0KKyAgICAgICAgICAgICAg ICAgICAgIChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9BUkcp KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90IHRh a2UgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgLyogVW5jb21t ZW50IGlmIHdlIGFkZCBhbnkgc3dpdGNoZXMgaGVyZSB0aGF0IHRha2UgYXJncyAqLworICAgICAg ICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRc biIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOyAgICAgICAgIC8qIChub25lIGRv Li4uKSAqLworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAg ICAgICAgICAgZmlsbW9kZSB8PSBjbXJlc3VsdC5ucmVzdWx0OyAvKiBPUiBpbiB0aGUgZmlsZSBt b2RlICovCisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKyAg ICAgICAgfQorICAgICAgICAvKiBOb3QgYSBzd2l0Y2ggLSBnZXQgdGhlIHN0cmluZyAqLworICAg ICAgICBja3N0cm5jcHkodm5hbWJ1ZixjbXJlc3VsdC5zcmVzdWx0LFZOQU1MKTsKKyAgICAgICAg aWYgKCF2bmFtYnVmWzBdIHx8IGNoa251bSh2bmFtYnVmKSkgeyAvKiAoaWYgdGhlcmUgaXMgb25l Li4uKSAqLworICAgICAgICAgICAgcHJpbnRmKCI/VmFyaWFibGUgbmFtZSByZXF1aXJlZFxuIik7 CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIHZucCA9IHZuYW1i dWY7ICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgdmFyaWFibGUtbmFtZSBzeW50YXggKi8KKyAg ICAgICAgaWYgKHZuYW1idWZbMF0gPT0gQ01EUSAmJgorICAgICAgICAgICAgKHZuYW1idWZbMV0g PT0gJyUnIHx8IHZuYW1idWZbMV0gPT0gJyYnKSkKKyAgICAgICAgICB2bnArKzsKKyAgICAgICAg eSA9IDA7CisgICAgICAgIGlmICgqdm5wID09ICclJyB8fCAqdm5wID09ICcmJykgeworICAgICAg ICAgICAgaWYgKCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZkdW1teSkpIDwgMCkgeworICAgICAgICAg ICAgICAgIHByaW50ZigiP1N5bnRheCBlcnJvciBpbiB2YXJpYWJsZSBuYW1lXG4iKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisJLyogQXNz aWduIGEgbmVnYXRpdmUgY2hhbm5lbCBudW1iZXIgaW4gY2FzZSB3ZSBmYWlsICovCisJYWRkbWFj KHZuYW1idWYsIi0xIik7CisKKyAgICAgICAgaWYgKCEoZmlsbW9kZSAmIEZNX1JXQSkpICAgICAg ICAvKiBJZiBubyBhY2Nlc3MgbW9kZSBzcGVjaWZpZWQgKi8KKyAgICAgICAgICBmaWxtb2RlIHw9 IEZNX1JFQTsgICAgICAgICAgICAvKiBkZWZhdWx0IHRvIC9SRUFELiAqLworCisgICAgICAgIHkg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm93IHBhcnNlIHRoZSBmaWxlbmFtZSAq LworICAgICAgICBpZiAoKGZpbG1vZGUgJiBGTV9SV0EpID09IEZNX1dSSSkgeworCSAgICB4ID0g Y21vZmkoIk5hbWUgb2YgbmV3IGZpbGUiLCIiLCZzLHh4c3RyaW5nKTsKKwl9IGVsc2UgaWYgKChm aWxtb2RlICYgRk1fUldBKSA9PSBGTV9SRUEpIHsKKwkgICAgeCA9IGNtaWZpKCJOYW1lIG9mIGV4 aXN0aW5nIGZpbGUiLCIiLCZzLCZ5LHh4c3RyaW5nKTsKKwl9IGVsc2UgeworICAgICAgICAgICAg eCA9IGNtaW9maSgiRmlsZW5hbWUiLCIiLCZzLCZ5LHh4c3RyaW5nKTsKKyAgICAgICAgICAgIGRl YnVnKEYxMTEsImZvcGVuIC9hcHBlbmQgeCIscyx4KTsKKwl9CisgICAgICAgIGlmICh4IDwgMCkg eworICAgICAgICAgICAgaWYgKHggPT0gLTMpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9G aWxlbmFtZSByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAg ICAgfQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgICAgIGlmICh5KSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2lsZGNhcmRzICovCisgICAgICAgICAgICBw cmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWQgaGVyZVxuIik7CisgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmIChmaWxtb2RlICYgKEZNX0FQUHxGTV9XUkkp KSB7IC8qIENoZWNrIG91dHB1dCBhY2Nlc3MgKi8KKyNpZm5kZWYgVk1TCisgICAgICAgICAgICBp ZiAoemNoa28ocykgPCAwKSB7ICAgICAgICAgIC8qIGFuZCBzZXQgZXJyb3IgY29kZSBpZiBkZW5p ZWQgKi8KKyAgICAgICAgICAgICAgICB6X2Vycm9yID0gRlhfQUNDOworICAgICAgICAgICAgICAg IHByaW50ZigiP1dyaXRlIGFjY2VzcyBkZW5pZWQgLSBcIiVzXCJcbiIscyk7CisgICAgICAgICAg ICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAg ICAgfQorICAgICAgICBja3N0cm5jcHkoemZpbG5hbSxzLENLTUFYUEFUSCk7IC8qIElzIE9LIC0g bWFrZSBzYWZlIGNvcHkgKi8KKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSAgICAgICAg ICAvKiBHZXQgY29uZmlybWF0aW9uIG9mIGNvbW1hbmQgKi8KKyAgICAgICAgICByZXR1cm4oeCk7 CisgICAgICAgIGlmICgobiA9IHpfb3Blbih6ZmlsbmFtLGZpbG1vZGUpKSA8IDApIHsKKyAgICAg ICAgICAgIHByaW50ZigiP09QRU4gZmFpbGVkIC0gJXM6ICVzXG4iLHpmaWxuYW0sY2tmZXJyb3Io bikpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgfQorICAgICAgICBhZGRtYWMo dm5hbWJ1Zixja2l0b2EobikpOyAgICAgIC8qIEFzc2lnbiBjaGFubmVsIG51bWJlciB0byB2YXJp YWJsZSAqLworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworCisgICAgICBjYXNlIEZJTF9S RVc6ICAgICAgICAgICAgICAgICAgICAgLyogUkVXSU5EICovCisgICAgICAgIGlmICgoeCA9IGNt bnVtKCJDaGFubmVsIG51bWJlciIsIiIsMTAsJm4sIHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAg ICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0NoYW5uZWwgbnVt YmVyIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh4ID0gY21j Zm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih4KTsKKwlpZiAobiA9PSAtOSkgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKwlpZiAobiA9PSAtOCkgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAg ICBpZiAoKHJjID0gel9zZWVrKG4sMEwpKSA8IDApIHsKKyAgICAgICAgICAgIHByaW50ZigiP1JF V0lORCBmYWlsZWQgLSBDaGFubmVsICVkOiAlc1xuIixuLGNrZmVycm9yKHJjKSk7CisgICAgICAg ICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7 CisKKyAgICAgIGNhc2UgRklMX0NMUzogICAgICAgICAgICAgICAgICAgICAvKiBDTE9TRSAqLwor I2lmZGVmIENPTU1FTlQJCQkJLyogZmRjIDIwMTAwODA0IC0gYmFkIGlkZWEgKi8KKyAgICAgICAg IHsKKwkgICAgaW50IGksIGosIGs7CQkvKiBTdXBwbHkgZGVmYXVsdCBpZiBvbmx5IG9uZSBvcGVu ICovCisJICAgIHMgPSAiIjsKKwkgICAgZm9yIChrID0gMCwgaiA9IDAsIGkgPSAwOyBpIDwgel9t YXhjaGFuOyBpKyspIHsKKwkJaWYgKHpfZmlsZSkKKwkJICBpZiAoel9maWxlW2ldKQorCQkgICAg aWYgKHpfZmlsZVtpXS0+el9mcCkgeyBrKys7IGogPSBpOyB9CisJICAgIH0KKwkgICAgaWYgKGsg PT0gMSkgcyA9IGNraXRvYShqKTsKKwkgfQorI2VuZGlmCS8qIENPTU1FTlQgKi8KKyAgICAgICAg ICBjbWZkYmkoJm51LCAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgRkRCIC0gY2hhbm5lbCBu dW1iZXIgKi8KKyAgICAgICAgICAgICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAvKiBmY29k ZSAqLworICAgICAgICAgICAgICAgICAiQ2hhbm5lbCBudW1iZXIgb3IgQUxMIiwgLyogSGVscCBt ZXNzYWdlICovCisgICAgICAgICAgICAgICAgIHMsCQkJLyogZGVmYXVsdCAqLworICAgICAgICAg ICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisg ICAgICAgICAgICAgICAgIDEwLCAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBk YXRhIDE6IHJhZGl4ICovCisgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAg LyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgKi8KKyAgICAgICAgICAgICAgICAgeHhzdHJpbmcs ICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAg IE5VTEwsICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJsZSAqLworICAgICAgICAgICAg ICAgICAmc3cJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisgICAgICAgICAgICAgICAgICk7 ICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCSBjbWZkYmko JnN3LAkJCS8qIEZpcnN0IEZEQiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgICAg ICAgX0NNS0VZLCAgICAgICAgICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgICAi IiwJCQkvKiBoZWxwIG1lc3NhZ2UgKi8KKwkJICIiLAkJCS8qIERlZmF1bHQgKi8KKwkJICIiLAkJ CS8qIE5vIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAgIDEsICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisgICAgICAg ICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6 IDQgPSBjbXN3aSAqLworICAgICAgICAgICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgIC8q IFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgZmNsa3d0YWIsICAgICAg ICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisJCSBOVUxMCQkJLyogTGFzdCBpbiBjaGFpbiAq LworICAgICAgICAgICAgICAgICApOworICAgICAgICB4ID0gY21mZGIoJm51KTsgICAgICAgICAg ICAgICAgIC8qIFBhcnNlIHNvbWV0aGluZyAqLworICAgICAgICBpZiAoeCA8IDApIHsKKyAgICAg ICAgICAgIGlmICh4ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hhbm5lbCBu dW1iZXIgb3IgQUxMIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAgICB4ID0gLTk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGNtcmVzdWx0LmZjb2RlID09IF9DTU5VTSkKKyAgICAgICAgICBuID0gY21yZXN1bHQubnJlc3Vs dDsKKyAgICAgICAgZWxzZSBpZiAoY21yZXN1bHQuZmNvZGUgPT0gX0NNS0VZKQorICAgICAgICAg IG4gPSAtMTsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVy bih4KTsKKwlpZiAobiA9PSAtOSkgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKwlpZiAobiA9PSAtOCkg cmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgICByYyA9IDE7CisgICAgICAgIGlmIChuIDwg MCkgeworICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICAgIGludCBpOworICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IHpfbWF4Y2hhbjsgaSsrKSB7CisgICAgICAgICAgICAg ICAgeCA9IHpfY2xvc2UoaSk7CisgICAgICAgICAgICAgICAgaWYgKHggPT0gRlhfU1lTKSB7Cisg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0NMT1NFIGZhaWxlZCAtIENoYW5uZWwgJWQ6ICVz XG4iLG4sY2tmZXJyb3IoeCkpOworICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICh4ID4gLTEpCisgICAgICAgICAgICAgICAgICBjb3VudCsrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoRjEwMSwiRklMRSBDTE9TRSBBTEwiLCIi LGNvdW50KTsKKyAgICAgICAgfSBlbHNlIGlmICgoeCA9IHpfY2xvc2UobikpIDwgMCkgeworICAg ICAgICAgICAgcHJpbnRmKCI/Q0xPU0UgZmFpbGVkIC0gQ2hhbm5lbCAlZDogJXNcbiIsbixja2Zl cnJvcih4KSk7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIHJl dHVybihzdWNjZXNzID0gcmMpOworCisgICAgICBjYXNlIEZJTF9SRUE6ICAgICAgICAgICAgICAg ICAgICAgLyogUkVBRCAqLworICAgICAgY2FzZSBGSUxfV1JJOiAgICAgICAgICAgICAgICAgICAg IC8qIFdSSVRFICovCisgICAgICAgIHJzaXplID0gMDsKKyAgICAgICAgY21mZGJpKCZzdywgICAg ICAgICAgICAgICAgICAgICAvKiBTd2l0Y2hlcyAqLworICAgICAgICAgICAgICAgX0NNS0VZLCAg ICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAiQ2hhbm5lbCBvciBz d2l0Y2giLCAgICAgLyogaGxwbXNnICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAg ICAgICAgICAgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAg ICAgICAgIC8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAoY3ggPT0gRklM X1JFQSkgPyBuZnJkdGFiIDogbmZ3cnRhYiwKKyAgICAgICAgICAgICAgIDQsICAgICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisgICAgICAg ICAgICAgICB4eHN0cmluZywgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAq LworICAgICAgICAgICAgICAgKGN4ID09IEZJTF9SRUEpID8gZnJkdGFiIDogZndydGFiLCAvKiBL ZXl3b3JkIHRhYmxlICovCisgICAgICAgICAgICAgICAmbnUgICAgICAgICAgICAgICAgICAgICAg LyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgY21m ZGJpKCZudSwgICAgICAgICAgICAgICAgICAgICAvKiBDaGFubmVsIG51bWJlciAqLworICAgICAg ICAgICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAg ICAgICAiQ2hhbm5lbCIsCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8q IGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAxMCwgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHJhZGl4ICovCisgICAgICAgICAgICAgICAw LCAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgKi8KKyAg ICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0 aW9uICovCisgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogS2V5d29y ZCB0YWJsZSAqLworICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgIC8qIFBv aW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGRvIHsKKyAg ICAgICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcg Ki8KKyAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0z KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0NoYW5uZWwgbnVtYmVyIHJlcXVpcmVk XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo Y21yZXN1bHQuZmNvZGUgPT0gX0NNTlVNKSAvKiBDaGFubmVsIG51bWJlciAqLworICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtF WSkgeyAvKiBTd2l0Y2ggKi8KKyAgICAgICAgICAgICAgICBjaGFyIGM7CisgICAgICAgICAgICAg ICAgYyA9IGNtZ2JyaygpOworICAgICAgICAgICAgICAgIGlmICgoZ2V0dmFsID0KKyAgICAgICAg ICAgICAgICAgICAgIChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBD TV9BUkcpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMg bm90IHRha2UgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCAmJiAoY21n a3dmbGdzKCkgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMg c3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0 dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3dpdGNoIChjbXJl c3VsdC5ucmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICBjYXNlIFdSX0xJTkU6CisgICAgICAg ICAgICAgICAgICAgIGNoYXJmbGFnID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZWZsYWcg PSAwOworICAgICAgICAgICAgICAgICAgICByc2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBXUl9DSEFSOgorICAgICAgICAgICAgICAg ICAgICByc2l6ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGNoYXJmbGFnID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgc2l6ZWZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgIGNhc2UgV1JfU0laRToKKyAgICAgICAgICAgICAgICAgICAgaWYg KCh4ID0gY21udW0oIkJ5dGVzIiwiIiwxMCwmcnNpemUsIHh4c3RyaW5nKSkgPCAwKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiP051bWJlciByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAgICAgICAgICAgICB9CisJCSAgICBpZiAo cnNpemUgPiBMSU5CVUZTSVopIHsKKwkJCXByaW50ZigiP01heGltdW0gRlJFQUQvRldSSVRFIHNp emUgaXMgJWRcbiIsTElOQlVGU0laKTsKKwkJCXJzaXplID0gMDsKKwkJCXJldHVybigtOSk7CisJ CSAgICB9CisgICAgICAgICAgICAgICAgICAgIGNoYXJmbGFnID0gMDsKKyAgICAgICAgICAgICAg ICAgICAgc2l6ZWZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgIGNhc2UgV1JfU1RSSToKKyAgICAgICAgICAgICAgICAgICAgcnNpemUgPSAxOwor ICAgICAgICAgICAgICAgICAgICBjaGFyZmxhZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIHNp emVmbGFnID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICBjYXNlIFdSX0xQQUQ6CisgICAgICAgICAgICAgICAgICBjYXNlIFdSX1JQQUQ6CisgICAgICAg ICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJOdW1lcmljIEFTQ0lJIGNoYXJhY3RlciB2YWx1 ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzMiIsMTAsJnBhZCwgeHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICAg ICAgICAgICAgICBpZiAoY21yZXN1bHQubnJlc3VsdCA9PSBXUl9MUEFEKQorICAgICAgICAgICAg ICAgICAgICAgIHdyX2xwYWQgPSAxOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgICAgICAgd3JfcnBhZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor CQkgIGNhc2UgUkRfVFJJTToKKwkJICAgIHJkX3RyaW0gPSAxOworCQkgICAgYnJlYWs7CisJCSAg Y2FzZSBSRF9VTlRBOgorCQkgICAgcmRfdW50YWIgPSAxOworCQkgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsIkZJTEUgUkVBRCByc2l6ZSAy IiwiIixyc2l6ZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgcmV0dXJuKC0y KTsKKyAgICAgICAgfSB3aGlsZQorICAgICAgICAgIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkp OworCisgICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgICAgLyogQ2hhbm5lbCAq LworICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFJFQUQvV1JJVEUgY2hhbm5lbCIsIiIsbik7CisK KyAgICAgICAgaWYgKGN4ID09IEZJTF9XUkkpIHsgICAgICAgICAgICAvKiBXUklURSAqLworICAg ICAgICAgICAgaW50IGxlbiA9IDA7CisgICAgICAgICAgICBpZiAoKHggPSBjbXR4dCgiVGV4dCIs IiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgIHJldHVybih4KTsKKwkgICAgaWYg KG4gPT0gLTkpIHJldHVybihzdWNjZXNzID0gMCk7CisJICAgIGlmIChuID09IC04KSByZXR1cm4o c3VjY2VzcyA9IDEpOworCisgICAgICAgICAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7 IC8qIE1ha2UgYSBzYWZlIGNvcHkgKi8KKyAgICAgICAgICAgIHMgPSBsaW5lOworICAgICAgICAg ICAgcyA9IGJyc3RyaXAocyk7ICAgICAgICAgICAgIC8qIFN0cmlwIGJyYWNlcyAqLworICAgICAg ICAgICAgaWYgKGNoYXJmbGFnKSB7ICAgICAgICAgICAgIC8qIFdyaXRlIG9uZSBjaGFyICovCisg ICAgICAgICAgICAgICAgbGVuID0gMTsgICAgICAgICAgICAgICAgLyogU28gbGVuZ3RoID0gMSAq LworICAgICAgICAgICAgICAgIHJzaXplID0gMTsgICAgICAgICAgICAgIC8qIERvbid0IHN1cHBs eSB0ZXJtaW5hdG9yICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKCFzaXplZmxhZykgeyAgICAg LyogV3JpdGUgYSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICBsZW4gPSAtMTsgICAgICAgICAg ICAgICAvKiBTbyBsZW5ndGggaXMgdW5zcGVjaWZpZWQgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBhIGJsb2NrIG9mIGdpdmVuIHNpemUgKi8KKyAg ICAgICAgICAgICAgICBpbnQgaSwgaywgeHg7CisgICAgICAgICAgICAgICAgaWYgKHJzaXplID4g VE1QQlVGU0laKSB7CisgICAgICAgICAgICAgICAgICAgIHpfZXJyb3IgPSBGWF9PRkw7CisgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiP0J1ZmZlciBvdmVyZmxvd1xuIik7CisgICAgICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGxlbiA9IHJzaXplOyAgICAgICAgICAgIC8qIHJzaXplIGlzIHJlYWxseSBsZW5ndGggKi8KKyAg ICAgICAgICAgICAgICByc2l6ZSA9IDE7ICAgICAgICAgICAgICAvKiBEb24ndCBzdXBwbHkgYSB0 ZXJtaW5hdG9yICovCisgICAgICAgICAgICAgICAgeHggPSBzdHJsZW4ocyk7ICAgICAgICAgLyog U2l6ZSBvZiBnaXZlbiBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICBpZiAoeHggPj0gbGVuKSB7 ICAgICAgICAvKiBCaWdnZXIgb3IgZXF1YWwgKi8KKyAgICAgICAgICAgICAgICAgICAgc1tsZW5d ID0gTlVMOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod3JfbHBhZCkgeyAgIC8qIFNtYWxs ZXIsIGxlZnQtcGFkZGluZyByZXF1ZXN0ZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IGxlbiAtIHh4OyBpKyspIC8qIE11c3QgbWFrZSBhIGNvcHkgKi8KKyAgICAgICAg ICAgICAgICAgICAgICB0bXBidWZbaV0gPSBwYWQ7CisgICAgICAgICAgICAgICAgICAgIGNrc3Ry bmNweSh0bXBidWYraSxzLFRNUEJVRlNJWi1pKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wYnVm W2xlbl0gPSBOVUw7CisgICAgICAgICAgICAgICAgICAgIHMgPSB0bXBidWY7ICAgICAgICAgLyog UmVkaXJlY3Qgd3JpdGUgc291cmNlICovCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3cl9y cGFkKSB7ICAgLyogU21hbGxlciB3aXRoIHJpZ2h0LXBhZGRpbmcgKi8KKyAgICAgICAgICAgICAg ICAgICAgZm9yIChpID0geHg7IGkgPCBsZW47IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICBz W2ldID0gcGFkOworICAgICAgICAgICAgICAgICAgICBzW2xlbl0gPSBOVUw7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChyYyA9IHpfb3V0KG4scyxs ZW4scnNpemUpKSA8IDApIHsgLyogVHJ5IHRvIHdyaXRlICovCisgICAgICAgICAgICAgICAgcHJp bnRmKCI/Q2hhbm5lbCAlZCBXUklURSBlcnJvcjogJXNcbiIsbixja2ZlcnJvcihyYykpOworICAg ICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogRklMX1JFQSBSRUFEICovCisgICAgICAgICAgICBj b25maXJtZWQgPSAwOworICAgICAgICAgICAgdm5hbWJ1ZlswXSA9IE5VTDsKKyAgICAgICAgICAg IHggPSBjbWZsZCgiVmFyaWFibGUgbmFtZSIsIiIsJnMsTlVMTCk7CisgICAgICAgICAgICBkZWJ1 ZyhGMTExLCJGSUxFIFJFQUQgY21mbGQiLHMseCk7CisgICAgICAgICAgICBpZiAoeCA8IDApIHsK KyAgICAgICAgICAgICAgICBpZiAoeCA9PSAtMyB8fCAhKnMpIHsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybih4 KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGNvbmZp cm1lZCsrOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgcmV0dXJu KHgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2tzdHJuY3B5KHZuYW1idWYscyxWTkFN TCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJGSUxFIFJFQUQgdm5hbWJ1ZiIsdm5hbWJ1Zixj b25maXJtZWQpOworICAgICAgICAgICAgaWYgKHZuYW1idWZbMF0pIHsgICAgICAgICAgIC8qIFZh cmlhYmxlIG5hbWUgZ2l2ZW4sIGNoZWNrIGl0ICovCisgICAgICAgICAgICAgICAgaWYgKCFjb25m aXJtZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgeCA9IGNtY2ZtKCk7CisgICAgICAgICAgICAg ICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oeCk7CisgICAg ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBjb25maXJtZWQrKzsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdm5wID0gdm5hbWJ1ZjsKKyAgICAg ICAgICAgICAgICBpZiAodm5hbWJ1ZlswXSA9PSBDTURRICYmCisgICAgICAgICAgICAgICAgICAg ICh2bmFtYnVmWzFdID09ICclJyB8fCB2bmFtYnVmWzFdID09ICcmJykpCisgICAgICAgICAgICAg ICAgICB2bnArKzsKKyAgICAgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAo KnZucCA9PSAnJScgfHwgKnZucCA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5 ID0gcGFyc2V2YXIodm5wLCZ4LCZkdW1teSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/U3ludGF4IGVycm9yIGluIHZhcmlhYmxlIG5hbWVcbiIpOworICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsIkZJTEUg UkVBRCB2YXJpYWJsZSIsdm5hbWJ1Zixjb25maXJtZWQpOworCisgICAgICAgICAgICBpZiAoIWNv bmZpcm1lZCkKKyAgICAgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAg ICAgICAgIHJldHVybih4KTsKKworCSAgICBpZiAobiA9PSAtOSkgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKwkgICAgaWYgKG4gPT0gLTgpIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgICAgICAg IGxpbmVbMF0gPSBOVUw7ICAgICAgICAgICAgICAvKiBDbGVhciBkZXN0aW5hdGlvbiBidWZmZXIg Ki8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBpZiAocnNpemUgPj0gTElOQlVGU0laKSAg ICAgLyogRG9uJ3Qgb3ZlcnJ1biBpdCAqLworICAgICAgICAgICAgICByc2l6ZSA9IExJTkJVRlNJ WiAtIDE7CisjZW5kaWYJLyogQ09NTUVOVCAqLworCisgICAgICAgICAgICBpZiAocnNpemUgPT0g MCkgewkJLyogUmVhZCBhIGxpbmUgKi8KKwkJcmMgPSB6X2luKG4sbGluZSxMSU5CVUZTSVosTElO QlVGU0laLTEsMCk7CisgICAgICAgICAgICB9IGVsc2UgeworCQlyYyA9IHpfaW4obixsaW5lLExJ TkJVRlNJWixyc2l6ZSwxKTsgLyogUmVhZCBhIGJsb2NrICovCisJICAgIH0KKyAgICAgICAgICAg IGlmIChyYyA8IDApIHsgICAgICAgICAgICAgICAvKiBFcnJvci4uLiAqLworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsIkZJTEUgUkVBRCBlcnJvciIsIiIscmMpOworICAgICAgICAgICAgICAg IGRlYnVnKEYxMDEsIkZJTEUgUkVBRCBlcnJubyIsIiIsZXJybm8pOworICAgICAgICAgICAgICAg IGlmIChyYyA9PSBGWF9FT0YpIHsgICAgIC8qIEVPRiAtIGZhaWwgYnV0IG5vIGVycm9yIG1lc3Nh Z2UgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBPdGhlciBlcnJvciAtIGZhaWwgYW5k IHByaW50IG1zZyAqLworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9SRUFEIGVycm9yOiAl c1xuIixja2ZlcnJvcihyYykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwkgICAgaWYgKHJzaXplID09IDApIHsJCS8q IEZSRUFEIC9MSU5FIHBvc3Rwcm9jZXNzaW5nICovCisJCWlmIChyZF90cmltKSB7CQkvKiBUcmlt ICovCisJCSAgICBpbnQgaSwgazsKKwkJICAgIGsgPSBzdHJsZW4obGluZSk7CisJCSAgICBpZiAo ayA+IDApIHsKKwkJCWZvciAoaSA9IGstMTsgaSA+IDA7IGktLSkgeworCQkJICAgIGlmIChsaW5l W2ldID09IFNQIHx8IGxpbmVbaV0gPT0gJ1x0JykKKwkJCSAgICAgIGxpbmVbaV0gPSBOVUw7CisJ CQkgICAgZWxzZQorCQkJICAgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkJaWYgKHJk X3VudGFiKSB7CQkvKiBVbnRhYmlmeSAqLworCQkgICAgaWYgKHVudGFiaWZ5KGxpbmUsdG1wYnVm LFRNUEJVRlNJWikgPiAtMSkKKwkJICAgICAgY2tzdHJuY3B5KGxpbmUsdG1wYnVmLExJTkJVRlNJ Wik7CisJCX0KKwkgICAgfQorICAgICAgICAgICAgZGVidWcoRjExMCwiRklMRSBSRUFEIGRhdGEi LGxpbmUsMCk7CisgICAgICAgICAgICBpZiAodm5hbWJ1ZlswXSkgICAgICAgICAgICAgLyogUmVh ZCBPSyAtIElmIHZhcmlhYmxlIG5hbWUgZ2l2ZW4gKi8KKyAgICAgICAgICAgICAgYWRkbWFjKHZu YW1idWYsbGluZSk7ICAgICAvKiBBc3NpZ24gcmVzdWx0IHRvIHZhcmlhYmxlICovCisgICAgICAg ICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlICovCisgICAgICAg ICAgICAgIHByaW50ZigiJXNcbiIsbGluZSk7ICAgICAgLyoganVzdCBwcmludCBpdCAqLworICAg ICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2UgRklMX1NF RTogICAgICAgICAgICAgICAgICAgICAvKiBTRUVLICovCisgICAgICBjYXNlIEZJTF9DT1U6ICAg ICAgICAgICAgICAgICAgICAgLyogQ09VTlQgKi8KKyAgICAgICAgcnNpemUgPSBSRF9DSEFSOyAg ICAgICAgICAgICAgICAvKiBEZWZhdWx0cyB0byAvQllURSAqLworICAgICAgICBjbWZkYmkoJnN3 LCAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaGVzICovCisgICAgICAgICAgICAgICBfQ01L RVksICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICJDaGFubmVs IG9yIHN3aXRjaCIsICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAg ICAgICAgICAgICAgICAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAg ICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgICgoY3gg PT0gRklMX1NFRSkgPyBuZnNrc3d0YWIgOiBuZmNvc3d0YWIpLAorICAgICAgICAgICAgICAgNCwg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kg Ki8KKyAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5n IGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICAoKGN4ID09IEZJTF9TRUUpID8gZnNrc3d0YWIg OiBmY29zd3RhYiksCisgICAgICAgICAgICAgICAmbnUgICAgICAgICAgICAgICAgICAgICAgLyog UG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgY21mZGJp KCZudSwgICAgICAgICAgICAgICAgICAgICAvKiBDaGFubmVsIG51bWJlciAqLworICAgICAgICAg ICAgICAgX0NNTlVNLCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAg ICAiQ2hhbm5lbCIsCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyog ZGVmYXVsdCAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFk ZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgICAgICAgICAxMCwgICAgICAgICAgICAgICAgICAg ICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHJhZGl4ICovCisgICAgICAgICAgICAgICAwLCAg ICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDAgKi8KKyAgICAg ICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9u ICovCisgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0 YWJsZSAqLworICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50 ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGRvIHsKKyAgICAg ICAgICAgIHggPSBjbWZkYigmc3cpOyAgICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8K KyAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7 CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP0NoYW5uZWwgbnVtYmVyIHJlcXVpcmVkXG4i KTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IC05OworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY21y ZXN1bHQuZmNvZGUgPT0gX0NNTlVNKSAvKiBDaGFubmVsIG51bWJlciAqLworICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSkg eyAvKiBTd2l0Y2ggKi8KKyAgICAgICAgICAgICAgICBjaGFyIGM7CisgICAgICAgICAgICAgICAg YyA9IGNtZ2JyaygpOworICAgICAgICAgICAgICAgIGlmICgoZ2V0dmFsID0KKyAgICAgICAgICAg ICAgICAgICAgIChjID09ICc6JyB8fCBjID09ICc9JykpICYmICEoY21na3dmbGdzKCkgJiBDTV9B UkcpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIGRvZXMgbm90 IHRha2UgYW4gYXJndW1lbnRcbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY3ggPT0gRklMX1NFRSkgewor ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyAgICAgICAg ICAgICAgICAgICAgICBjYXNlIFNFRV9SRUw6IHJlbGF0aXZlID0gMTsgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgICAgY2FzZSBTRUVfQUJTOiByZWxhdGl2ZSA9IDA7IGJyZWFrOworCQkgICAg ICBjYXNlIFNFRV9GSU5EOiB7CisJCQkgIGlmIChnZXR2YWwpIHsKKwkJCSAgICAgIHkgPSBjbWZs ZCgic3RyaW5nIG9yIHBhdHRlcm4iLCIiLCZzLHh4c3RyaW5nKTsKKwkJCSAgICAgIGlmICh5IDwg MCkKKwkJCQlyZXR1cm4oeSk7CisJCQkgICAgICBtYWtlc3RyKCZzZWVrX3RhcmdldCxicnN0cmlw KHMpKTsKKwkJCSAgICAgIGJyZWFrOworCQkJICB9CisJCSAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICBkZWZhdWx0OiByc2l6ZSA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN4ID09IEZJTF9DT1UpIHsKKyAg ICAgICAgICAgICAgICAgICAgc3dpdGNoIChjbXJlc3VsdC5ucmVzdWx0KSB7CisgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBDT1VfTElTOiBsaXN0aW5nID0gMTsgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgY2FzZSBDT1VfTk9MOiBsaXN0aW5nID0gMDsgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgICAgZGVmYXVsdDogcnNpemUgPSBjbXJlc3VsdC5ucmVzdWx0OworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 IHdoaWxlCisgICAgICAgICAgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSk7CisKKyAgICAgICAg biA9IGNtcmVzdWx0Lm5yZXN1bHQ7ICAgICAgICAgICAvKiBDaGFubmVsICovCisgICAgICAgIGRl YnVnKEYxMDEsIkZJTEUgU0VFSy9DT1VOVCBjaGFubmVsIiwiIixuKTsKKyAgICAgICAgaWYgKGN4 ID09IEZJTF9DT1UpIHsKKyAgICAgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKyAgICAg ICAgICAgICAgcmV0dXJuKHgpOworCSAgICBpZiAobiA9PSAtOSkgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKwkgICAgaWYgKG4gPT0gLTgpIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgICAgICAg IHpfZmlsY291bnQgPSB6X2NvdW50KG4scnNpemUpOworICAgICAgICAgICAgaWYgKHpfZmlsY291 bnQgPCAwKSB7CisgICAgICAgICAgICAgICAgcmMgPSB6X2ZpbGNvdW50OworICAgICAgICAgICAg ICAgIHByaW50ZigiP0NPVU5UIGVycm9yOiAlc1xuIixja2ZlcnJvcihyYykpOworICAgICAgICAg ICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGlzdGlu ZyA8IDApCisgICAgICAgICAgICAgIGxpc3RpbmcgPSAheGNtZHNyYzsKKyAgICAgICAgICAgIGlm IChsaXN0aW5nKQorICAgICAgICAgICAgICBwcmludGYoIiAlbGQgJXMlc1xuIiwKKyAgICAgICAg ICAgICAgICAgICAgIHpfZmlsY291bnQsCisgICAgICAgICAgICAgICAgICAgICAoKHJzaXplID09 IFJEX0NIQVIpID8gImJ5dGUiIDogImxpbmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICgoel9m aWxjb3VudCA9PSAxTCkgPyAiIiA6ICJzIikKKyAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9ICh6X2ZpbGNvdW50ID4gLTEpID8gMSA6IDApOworICAg ICAgICB9CisJbSA9IChyc2l6ZSA9PSBSRF9DSEFSKSA/CisJICAgICJOdW1iZXIgb2YgYnl0ZXM7 XG4gb3Iga2V5d29yZCIgOgorCSAgICAiTnVtYmVyIG9mIGxpbmVzO1xuIG9yIGtleXdvcmQiOwor ICAgICAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgIC8qIFNFRUsgc3ltYm9saWMg dGFyZ2V0cyAoRU9GKSAqLworICAgICAgICAgICAgICAgX0NNS0VZLCAgICAgICAgICAgICAgICAg IC8qIGZjb2RlICovCisgICAgICAgICAgICAgICBtLAorICAgICAgICAgICAgICAgIiIsCisgICAg ICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KKyAgICAgICAgICAgICAgIG5mc2Vrd3RhYiwgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1l cmljIGRhdGEgMTogdGFibGUgc2l6ZSAqLworICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAg ICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKyAgICAgICAg ICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICov CisgICAgICAgICAgICAgICBmc2Vrd3RhYiwgICAgICAgICAgICAgICAgLyogS2V5d29yZCB0YWJs ZSAqLworICAgICAgICAgICAgICAgJm51ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIg dG8gbmV4dCBGREIgKi8KKyAgICAgICAgICAgICAgICk7CisgICAgICAgIGNtZmRiaSgmbnUsICAg ICAgICAgICAgICAgICAgICAgLyogQnl0ZSBvciBsaW5lIG51bWJlciAqLworICAgICAgICAgICAg ICAgX0NNTlVXLCAgICAgICAgICAgICAgICAgIC8qIGZjb2RlICovCisgICAgICAgICAgICAgICAi IiwKKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0ICov CisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5n IGRhdGEgKi8KKyAgICAgICAgICAgICAgIDEwLCAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0 bCBudW1lcmljIGRhdGEgMTogcmFkaXggKi8KKyAgICAgICAgICAgICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogMCAqLworICAgICAgICAgICAgICAg eHhzdHJpbmcsICAgICAgICAgICAgICAgIC8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKyAgICAg ICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAvKiBLZXl3b3JkIHRhYmxlICovCisg ICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBuZXh0 IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgeCA9IGNtZmRiKCZzdyk7ICAgICAg ICAgICAgICAgICAvKiBQYXJzZSBzb21ldGhpbmcgKi8KKyAgICAgICAgaWYgKHggPCAwKSB7Cisg ICAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgICAgIHByaW50ZigiP0NoYW5u ZWwgbnVtYmVyIG9yIEVPRiByZXF1aXJlZFxuIik7CisgICAgICAgICAgICAgICAgeCA9IC05Owor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuKHgpOworICAgICAgICB9CisgICAgICAg IGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01OVVcpIHsKKyAgICAgICAgICAgIHogPSBjbXJlc3Vs dC53cmVzdWx0OworICAgICAgICAgICAgZGVidWcoRjExMCwiRklMRSBTRUVLIGF0bWJ1ZiIsYXRt YnVmLDApOworICAgICAgICAgICAgaWYgKHJlbGF0aXZlIDwgMCkgeworICAgICAgICAgICAgICAg IGlmIChjeCA9PSBGSUxfU0VFICYmIChhdG1idWZbMF0gPT0gJysnIHx8IGF0bWJ1ZlswXSA9PSAn LScpKQorICAgICAgICAgICAgICAgICAgcmVsYXRpdmUgPSAxOworICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgIHJlbGF0aXZlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSBlbHNlIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01LRVkpIHsKKyAgICAgICAgICAgIGVv ZmZsZyA9IGNtcmVzdWx0Lm5yZXN1bHQ7CisgICAgICAgICAgICByZWxhdGl2ZSA9IDA7CisgICAg ICAgICAgICB5ID0gMCAtIGVvZmZsZzsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHgpOworCWlmIChuID09IC05KSByZXR1cm4oc3Vj Y2VzcyA9IDApOworCWlmIChuID09IC04KSByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICB5 ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3ljbGUgdGhpcyAqLworICAgICAg ICB6X2ZsdXNoKG4pOworICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxFIFNFRUsgcmVsYXRpdmUiLCIi LHJlbGF0aXZlKTsKKyAgICAgICAgZGVidWcoRjEwMSwiRklMRSBTRUVLIHJzaXplIiwiIixyc2l6 ZSk7CisKKyAgICAgICAgaWYgKHJzaXplID09IFJEX0NIQVIpIHsgICAgICAgICAvKiBTZWVrIHRv IGJ5dGUgcG9zaXRpb24gKi8KKyAgICAgICAgICAgIGlmIChyZWxhdGl2ZSA+IDApIHsKKyAgICAg ICAgICAgICAgICBDS19PRkZfVCBwb3M7CisgICAgICAgICAgICAgICAgcG9zID0gel9nZXRwb3Mo bik7CisgICAgICAgICAgICAgICAgaWYgKHBvcyA8IChDS19PRkZfVCkwKSB7CisgICAgICAgICAg ICAgICAgICAgIHJjID0gcG9zOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9SZWxhdGl2 ZSBTRUVLIGZhaWxlZDogJXNcbiIsY2tmZXJyb3IocmMpKTsKKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeiArPSBwb3M7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh6IDwgMCAmJiAhZW9m ZmxnKSB7IC8qIE5lZ2F0aXZlIGFyZyBidXQgbm90IHJlbGF0aXZlICovCisgICAgICAgICAgICAg ICAgICAgIHkgPSAwOyAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhpcyB3YXMgYmFkICovCisg ICAgICAgICAgICAgICAgICAgIHogPSAwOyAgICAgICAgICAgICAgLyogYnV0IHN1YnN0aXR1dGUg MCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVn KEYxMDEsIkZJTEUgU0VFSyAvQ0hBUiB6IiwiIix6KTsKKyAgICAgICAgICAgIGlmICh6IDwgMCAm JiAhZW9mZmxnKSB7CisgICAgICAgICAgICAgICAgel9lcnJvciA9IEZYX1JORzsKKyAgICAgICAg ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKChyYyA9IHpfc2VlayhuLHopKSA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocmMgPT0g RlhfRU9GKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICAgICAgICAgIHByaW50ZigiP1NF RUsgL0JZVEUgZmFpbGVkIC0gQ2hhbm5lbCAlZDogJXNcbiIsbixja2ZlcnJvcihyYykpOworICAg ICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VlayB0byBsaW5lICovCisgICAgICAgICAgICBp ZiAocmVsYXRpdmUgPiAwKSB7CisgICAgICAgICAgICAgICAgQ0tfT0ZGX1QgcG9zOworICAgICAg ICAgICAgICAgIHBvcyA9IHpfZ2V0bGluZShuKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJGSUxFIFNFRUsgL0xJTkUgcG9zIiwiIixwb3MpOworICAgICAgICAgICAgICAgIGlmIChwb3Mg PCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJjID0gcG9zOworICAgICAgICAgICAgICAgICAg ICBwcmludGYoIj9SZWxhdGl2ZSBTRUVLIGZhaWxlZDogJXNcbiIsY2tmZXJyb3IocmMpKTsKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgeiArPSBwb3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJGSUxFIFNFRUsgL0xJTkUgeiIsIiIseik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJGSUxF IFNFRUsgL0xJTkUgZW9mZmxnIiwiIixlb2ZmbGcpOworICAgICAgICAgICAgaWYgKHogPCAwICYm ICFlb2ZmbGcpIHsKKyAgICAgICAgICAgICAgICB6X2Vycm9yID0gRlhfUk5HOworICAgICAgICAg ICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp ZiAoKHJjID0gel9saW5lKG4seikpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChyYyA9PSBG WF9FT0YpIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/U0VF SyAvTElORSBmYWlsZWQgLSBDaGFubmVsICVkOiAlc1xuIixuLGNrZmVycm9yKHJjKSk7CisgICAg ICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCS8qCisJ ICBOb3csIGhhdmluZyBzb3VnaHQgdG8gdGhlIGRlc2lyZWQgc3RhcnRpbmcgc3BvdCwgaWYgYSAv RklORDoKKwkgIHRhcmdldCB3YXMgc3BlY2lmaWVkLCBsb29rIGZvciBpdCBub3cuCisJKi8KKwlp ZiAoc2Vla190YXJnZXQpIHsKKwkgICAgaW50IGZsYWcgPSAwLCBpc3BhdCA9IDAsIG1hdGNocmVz dWx0ID0gMDsKKwkgICAgd2hpbGUgKCFmbGFnKSB7CisJCXkgPSB6X2luKG4sbGluZSxMSU5CVUZT SVosTElOQlVGU0laLTEsMCk7CisJCWlmICh5IDwgMCkgeworCQkgICAgeSA9IDA7CisJCSAgICBi cmVhazsKKwkJfQorCQlpZiAoaXNwYXR0ZXJuKHNlZWtfdGFyZ2V0KSkgeworCQkgICAgbWF0Y2hy ZXN1bHQgPSBja21hdGNoKHNlZWtfdGFyZ2V0LGxpbmUsaW5wY2FzW2NtZGx2bF0sMSs0KTsKKwkJ fSBlbHNlIHsKKwkJICAgIC8qIFRoaXMgaXMgZmFzdGVyICovCisJCSAgICBtYXRjaHJlc3VsdCA9 IGNraW5kZXgoc2Vla190YXJnZXQsbGluZSwwLDAsaW5wY2FzW2NtZGx2bF0pOworCQl9CisJCWlm IChtYXRjaHJlc3VsdCkgeworCQkgICAgZmxhZyA9IDE7CisJCSAgICBicmVhazsKKwkJfQorCSAg ICB9CisJICAgIGlmIChmbGFnKSB7CisJCWRlYnVnKEYxMTEsIkZTRUVLIEhBVkUgTUFUQ0giLHNl ZWtfdGFyZ2V0LHpfZ2V0bGluZShuKSk7CisJCS8qIEJhY2sgdXAgdG8gYmVnaW5uaW5nIG9mIGxp bmUgd2hlcmUgdGFyZ2V0IGZvdW5kICovCisJCWlmICgoeSA9IHpfbGluZShuLHpfZ2V0bGluZShu KS0xKSkgPCAwKSB7CisJCSAgICBpZiAocmMgPT0gRlhfRU9GKSByZXR1cm4oc3VjY2VzcyA9IDAp OworCQkgICAgcHJpbnRmKCI/U0VFSyAvTElORSBmYWlsZWQgLSBDaGFubmVsICVkOiAlc1xuIiwK KwkJCSAgIG4sY2tmZXJyb3IocmMpKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkJZGVidWco RjEwMSwiRlNFRUsgTElORSIsIiIseSk7CisJICAgIH0KKwl9CisgICAgICAgIHJldHVybihzdWNj ZXNzID0gKHkgPCAwKSA/IDAgOiAxKTsKKworICAgICAgY2FzZSBGSUxfTElTOiB7ICAgICAgICAg ICAgICAgICAgIC8qIExJU1Qgb3BlbiBmaWxlcyAqLworI2lmZGVmIENLX1RUR1dTSVoKKyAgICAg ICAgICBleHRlcm4gaW50IGNtZF9yb3dzLCBjbWRfY29sczsKKyNlbmRpZiAvKiBDS19UVEdXU0la ICovCisgICAgICAgICAgZXh0ZXJuIGludCB4YXNrbW9yZTsKKyAgICAgICAgICBpbnQgaSwgeCwg biA9IDAsIHBhZ2luZyA9IDA7CisgICAgICAgICAgY2hhciAqIHM7CisKKyAgICAgICAgICBpZiAo KHggPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgICByZXR1cm4oeCk7CisKKyNpZmRlZiBDS19U VEdXU0laCisgICAgICAgICAgaWYgKGNtZF9yb3dzID4gMCAmJiBjbWRfY29scyA+IDApCisjZW5k aWYgLyogQ0tfVFRHV1NJWiAqLworICAgICAgICAgICAgcGFnaW5nID0geGFza21vcmU7CisKKyAg ICAgICAgICBwcmludGYoIlN5c3RlbSBvcGVuIGZpbGUgbGltaXQ6JTVkXG4iLCB6X29wZW5tYXgp OworICAgICAgICAgIHByaW50ZigiTWF4aW11bSBmb3IgRklMRSBPUEVOOiAlNWRcbiIsIHpfbWF4 Y2hhbik7CisgICAgICAgICAgcHJpbnRmKCJGaWxlcyBjdXJyZW50bHkgb3BlbjogICU1ZFxuXG4i LCB6X25vcGVuKTsKKyAgICAgICAgICBuID0gNDsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg el9tYXhjaGFuOyBpKyspIHsKKyAgICAgICAgICAgICAgcyA9IHpfZ2V0bmFtZShpKTsgICAgICAg ICAvKiBHb3Qgb25lPyAqLworICAgICAgICAgICAgICBpZiAocykgeyAgICAgICAgICAgICAgICAg IC8qIFllcyAqLworICAgICAgICAgICAgICAgICAgY2hhciBtWzhdOworICAgICAgICAgICAgICAg ICAgbVswXSA9IE5VTDsKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiJTJkLiAlcyIsaSxzKTsg LyogUHJpbnQgbmFtZSAqLworICAgICAgICAgICAgICAgICAgbisrOyAgICAgICAgICAgICAgICAg ICAvKiBDb3VudCBpdCAqLworICAgICAgICAgICAgICAgICAgeCA9IHpfZ2V0bW9kZShpKTsgICAg ICAvKiBHZXQgbW9kZXMgJiBwcmludCB0aGVtICovCisgICAgICAgICAgICAgICAgICBpZiAoeCA+ IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoeCAmIEZNX1JFQSkgY2tzdHJuY2F0KG0s IlIiLDgpOworICAgICAgICAgICAgICAgICAgICAgIGlmICh4ICYgRk1fV1JJKSBja3N0cm5jYXQo bSwiVyIsOCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHggJiBGTV9BUFApIGNrc3RybmNh dChtLCJBIiw4KTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoeCAmIEZNX0JJTikgY2tzdHJu Y2F0KG0sIkIiLDgpOworICAgICAgICAgICAgICAgICAgICAgIGlmIChtWzBdKQorICAgICAgICAg ICAgICAgICAgICAgICAgcHJpbnRmKCIgKCVzKSIsbSk7CisgICAgICAgICAgICAgICAgICAgICAg aWYgKHggJiBGTV9FT0YpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBbRU9GXSIp OworICAgICAgICAgICAgICAgICAgICAgIGVsc2UJCS8qIEFuZCBmaWxlIHBvc2l0aW9uIHRvbyAq LworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMiLGNrZnN0b2Eoel9nZXRwb3Mo aSkpKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4i KTsKKyNpZmRlZiBDS19UVEdXU0laCisgICAgICAgICAgICAgICAgICBpZiAocGFnaW5nID4gMCkg eyAgICAgLyogUGF1c2UgYXQgZW5kIG9mIHNjcmVlbiAqLworICAgICAgICAgICAgICAgICAgICAg IGlmIChuID4gY21kX3Jvd3MgLSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh YXNrbW9yZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDA7 CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8q IENLX1RUR1dTSVogKi8KKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgfQorCisgICAgICBjYXNlIEZJTF9GTFU6ICAgICAg ICAgICAgICAgICAgICAgLyogRkxVU0ggKi8KKyAgICAgICAgaWYgKCh4ID0gY21udW0oIkNoYW5u ZWwgbnVtYmVyIiwiIiwxMCwmbiwgeHhzdHJpbmcpKSA8IDApIHsKKyAgICAgICAgICAgIGlmICh4 ID09IC0zKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/Q2hhbm5lbCBudW1iZXIgcmVxdWly ZWRcbiIpOworICAgICAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHJldHVybih4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp CisgICAgICAgICAgcmV0dXJuKHgpOworCWlmIChuID09IC05KSByZXR1cm4oc3VjY2VzcyA9IDAp OworCWlmIChuID09IC04KSByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgICAgICBpZiAoKHJjID0g el9mbHVzaChuKSkgPCAwKSB7CisgICAgICAgICAgICBwcmludGYoIj9GTFVTSCBmYWlsZWQgLSBD aGFubmVsICVkOiAlc1xuIixuLGNrZmVycm9yKHJjKSk7CisgICAgICAgICAgICByZXR1cm4oLTkp OworICAgICAgICB9CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKyAgICAgIGNhc2Ug RklMX1NUQTogICAgICAgICAgICAgICAgICAgICAvKiBTVEFUVVMgKi8KKwl7CisJICAgIGludCBp LCBqLCBrOwkJLyogU3VwcGx5IGRlZmF1bHQgaWYgb25seSBvbmUgb3BlbiAqLworCSAgICBzID0g IiI7CisJICAgIGZvciAoayA9IDAsIGogPSAwLCBpID0gMDsgaSA8IHpfbWF4Y2hhbjsgaSsrKSB7 CisJCWlmICh6X2ZpbGUpCisJCSAgaWYgKHpfZmlsZVtpXSkKKwkJICAgIGlmICh6X2ZpbGVbaV0t PnpfZnApIHsgaysrOyBqID0gaTsgfQorCSAgICB9CisJICAgIGlmIChrID09IDEpIHMgPSBja2l0 b2Eoaik7CisJfQorICAgICAgICBpZiAoKHggPSBjbW51bSgiQ2hhbm5lbCBudW1iZXIiLHMsMTAs Jm4sIHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoeCA9PSAtMykgeworCQlpZiAo el9ub3BlbiA+IDEpIHsKKwkJICAgIHByaW50ZigiPyVkIGZpbGVzIG9wZW4gLSBwbGVhc2Ugc3Vw cGx5IGNoYW5uZWwgbnVtYmVyXG4iLAorCQkJICAgel9ub3Blbik7CisJCSAgICByZXR1cm4oLTkp OworCQl9CisgICAgICAgICAgICB9IGVsc2UKKwkgICAgICByZXR1cm4oeCk7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVybih5KTsKKwlp ZiAoKCF6X2ZpbGUgfHwgel9ub3BlbiA9PSAwKSAmJiB4ID09IC0zKSB7CisJICAgIHByaW50Zigi Tm8gZmlsZXMgb3BlblxuIik7CisJICAgIHJldHVybihzdWNjZXNzID0gMSk7CisJfQorICAgICAg ICBwID0gYmxhbmtzICsgMzsgICAgICAgICAgICAgICAgIC8qIFRyaWNreSBmb3JtYXR0aW5nLi4u ICovCisgICAgICAgIGlmIChuIDwgMTAwMCkgcC0tOworICAgICAgICBpZiAobiA8IDEwMCkgcC0t OworICAgICAgICBpZiAobiA8IDEwKSBwLS07CisgICAgICAgIGlmICgocmMgPSB6X2dldG1vZGUo bikpIDwgMCkgeworICAgICAgICAgICAgcHJpbnRmKCJDaGFubmVsICVkOiVzJXNcbiIsbixwLGNr ZmVycm9yKHJjKSk7CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9 IGVsc2UgaWYgKCFyYykgeworICAgICAgICAgICAgcHJpbnRmKCJDaGFubmVsICVkOiVzTm90IG9w ZW5cbiIsbixwKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBDS19PRkZfVCB4eDsKKyAgICAgICAgICAgIHMgPSB6X2dldG5h bWUobik7CisgICAgICAgICAgICBpZiAoIXMpIHMgPSAiKG5hbWUgdW5rbm93bikiOworICAgICAg ICAgICAgcHJpbnRmKCJDaGFubmVsICVkOiVzT3BlblxuIixuLHApOworICAgICAgICAgICAgcHJp bnRmKCIgRmlsZTogICAgICAgICVzXG4gTW9kZXM6ICAgICAgIixzKTsKKyAgICAgICAgICAgIGlm IChyYyAmIEZNX1JFQSkgcHJpbnRmKCIgL1JFQUQiKTsKKyAgICAgICAgICAgIGlmIChyYyAmIEZN X1dSSSkgcHJpbnRmKCIgL1dSSVRFIik7CisgICAgICAgICAgICBpZiAocmMgJiBGTV9BUFApIHBy aW50ZigiIC9BUFBFTkQiKTsKKyAgICAgICAgICAgIGlmIChyYyAmIEZNX0JJTikgcHJpbnRmKCIg L0JJTkFSWSIpOworICAgICAgICAgICAgaWYgKHJjICYgRk1fQ01EKSBwcmludGYoIiAvQ09NTUFO RCIpOworICAgICAgICAgICAgaWYgKHJjICYgRk1fRU9GKSBwcmludGYoIiBbRU9GXSIpOworICAg ICAgICAgICAgcHJpbnRmKCJcbiBTaXplOiAgICAgICAgJXNcbiIsY2tmc3RvYSh6X2NvdW50KG4s UkRfQ0hBUikpKTsKKyAgICAgICAgICAgIHByaW50ZigiIEF0IGJ5dGU6ICAgICAlc1xuIixja2Zz dG9hKHpfZ2V0cG9zKG4pKSk7CisgICAgICAgICAgICB4eCA9IHpfZ2V0bGluZShuKTsKKyAgICAg ICAgICAgIGlmICh4eCA+IChDS19PRkZfVCktMSkKKyAgICAgICAgICAgICAgcHJpbnRmKCIgQXQg bGluZTogICAgICVzXG4iLGNrZnN0b2EoeHgpKTsKKyAgICAgICAgICAgIHJldHVybihzdWNjZXNz ID0gMSk7CisgICAgICAgIH0KKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybigtMik7Cisg ICAgfQorfQorI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKKyNpZm5kZWYgTk9TRVRLRVkKKy8q IFNhdmUgS2V5IG1hcHMgYW5kIGluIE9TLzIgTW91c2UgbWFwcyAqLworaW50CitzYXZrZXlzKG5h bWUsZGlzcCkgY2hhciAqIG5hbWU7IGludCBkaXNwOyB7CisgICAgY2hhciAqdHA7CisgICAgc3Rh dGljIHN0cnVjdCBmaWxpbmZvIHh4OworICAgIGludCBzYXZmaWwsIGksIGosIGs7CisgICAgY2hh ciBidWZbMTAyNF07CisKKyAgICB6Y2xvc2UoWk1GSUxFKTsKKworICAgIGlmIChkaXNwKSB7Cisg ICAgICAgIHh4LmJzID0gMDsgeHguY3MgPSAwOyB4eC5ybCA9IDA7IHh4Lm9yZyA9IDA7IHh4LmNj ID0gMDsKKyAgICAgICAgeHgudHlwID0gMDsgeHguZHNwID0gWFlGWl9BOyB4eC5vc19zcGVjaWZp YyA9ICIiOworICAgICAgICB4eC5sYmxvcHRzID0gMDsKKyAgICAgICAgc2F2ZmlsID0gem9wZW5v KFpNRklMRSxuYW1lLE5VTEwsJnh4KTsKKyAgICB9IGVsc2Ugc2F2ZmlsID0gem9wZW5vKFpNRklM RSxuYW1lLE5VTEwsTlVMTCk7CisKKyAgICBpZiAoc2F2ZmlsKSB7CisjaWZkZWYgT1MyCisgICAg ICAgIHp0aW1lKCZ0cCk7CisgICAgICAgIHpzb3V0KFpNRklMRSwgIjsgS2VybWl0IDk1IFNBVkUg S0VZTUFQIGZpbGU6ICIpOworICAgICAgICB6c291dGwoWk1GSUxFLHRwKTsKKyAgICAgICAgaWYg KG1za2tleXMpIHsKKyAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsCisgICAgICAgICAiaWYgZXEg XCJcXHYocHJvZ3JhbSlcIiBcIkMtS2VybWl0XCIgc2V0IG1za2VybWl0IGtleWNvZGVzIG9uIik7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB6c291dGwoWk1GSUxFLAorICAgICAgICAg ImlmIE5PVCBlcSBcIlxcdihwcm9ncmFtKVwiIFwiQy1LZXJtaXRcIiBzdG9wIDEgQy1LZXJtaXQg cmVxdWlyZWQuIik7CisgICAgICAgICAgICB6c291dGwoWk1GSUxFLCJzZXQgbXNrZXJtaXQga2V5 Y29kZXMgb2ZmIik7CisgICAgICAgIH0KKyAgICAgICAgenNvdXRsKFpNRklMRSwiIik7CisjZWxz ZSAvKiBPUzIgKi8KKyAgICAgICAgenRpbWUoJnRwKTsKKyAgICAgICAgenNvdXQoWk1GSUxFLCAi OyBDLUtlcm1pdCBTQVZFIEtFWU1BUCBmaWxlOiAiKTsKKyAgICAgICAgenNvdXRsKFpNRklMRSx0 cCk7CisjZW5kaWYgLyogT1MyICovCisKKyAgICAgICAgenNvdXRsKFpNRklMRSwiOyBDbGVhciBw cmV2aW91cyBrZXlib2FyZCBtYXBwaW5ncyAiKTsKKyAgICAgICAgenNvdXRsKFpNRklMRSwic2V0 IGtleSBjbGVhciIpOworI2lmZGVmIE9TMgorICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbnR0a2V5 OyBrKyspIHsKKyAgICAgICAgICAgIGlmICghdHRrZXl0YWJba10uZmxncykgeworICAgICAgICAg ICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQg dGVybWluYWwga2V5ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dk LAorICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xlYXIiLAorICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg IHpzb3V0bChaTUZJTEUsYnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8q IE9TMiAqLworICAgICAgICB6c291dGwoWk1GSUxFLCIiKTsKKworICAgICAgICBmb3IgKGkgPSAw OyBpIDwgS01TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtYWNyb3RhYltpXSkgeworICAg ICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oKGNoYXIgKiltYWNyb3RhYltpXSk7CisjaWZk ZWYgT1MyCisgICAgICAgICAgICAgICAgY2ttYWttc2coYnVmLAorICAgICAgICAgICAgICAgICAg ICAgICAgIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNldCBrZXkgXFwiLAorICAg ICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2trZXlzID8gY2t0b21zayhpKSA6IGkpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbHNlIC8qIE9TMiAqLworICAgICAg ICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQga2V5IFxcIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBja2l0b2EoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMCisg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAg ICAgICB6c291dChaTUZJTEUsYnVmKTsKKworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGog PCBsZW47IGorKykgeworICAgICAgICAgICAgICAgICAgICBjaGFyIGNoID0gbWFjcm90YWJbaV1b al07CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA8PSBTUCB8fCBjaCA+PSBERUwgfHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnLScgfHwgY2ggPT0gJywnIHx8CisgICAgICAg ICAgICAgICAgICAgICAgICAgY2ggPT0gJ3snIHx8IGNoID09ICd9JyB8fAorICAgICAgICAgICAg ICAgICAgICAgICAgIGNoID09ICc7JyB8fCBjaCA9PSAnPycgfHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBjaCA9PSAnLicgfHwgY2ggPT0gJ1wnJyB8fAorICAgICAgICAgICAgICAgICAgICAg ICAgIGNoID09ICdcXCcgfHwgY2ggPT0gJy8nIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg Y2ggPT0gJyMnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwi XFx7Iixja2l0b2EoKGludCljaCksIn0iLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAg enNvdXQoWk1GSUxFLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCxja2N0b2EoKGNoYXIpY2gpLE5VTEws TlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHpzb3V0KFpNRklMRSxidWYpOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2lmZGVmIE9TMgorICAg ICAgICAgICAgICAgIGNrbWFrbXNnKGJ1ZiwxMDI0LCJcdDsgIixrZXluYW1lKGkpLE5VTEwsTlVM TCk7CisgICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOworI2Vsc2UKKyAgICAgICAg ICAgICAgICB6c291dGwoWk1GSUxFLCIiKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAg IH0gZWxzZSBpZiAoIGtleW1hcFtpXSAhPSBpICkgeworI2lmbmRlZiBOT0tWRVJCUworICAgICAg ICAgICAgICAgIGlmIChJU19LVkVSQihrZXltYXBbaV0pKSB7CisgICAgICAgICAgICAgICAgICAg IGZvciAoaiA9IDA7IGogPCBua3ZlcmJzOyBqKyspCisgICAgICAgICAgICAgICAgICAgICAgaWYg KGt2ZXJic1tqXS5rd3ZhbCA9PSAoa2V5bWFwW2ldICYgfkZfS1ZFUkIpKQorICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChqICE9IG5rdmVyYnMp IHsKKyNpZmRlZiBPUzIKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgICAgICBz cHJpbnRmKGJ1ZiwgInNldCBrZXkgXFwlZCBcXEslc1x0OyAlcyIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNrKGkpIDogaSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAga3ZlcmJzW2pdLmt3ZCwga2V5bmFtZShpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNr bWFreG1zZyhidWYsICAvKiAxMiBzdHJpbmcgYXJncyAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNl dCBrZXkgXFwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2tr ZXlzID8gY2t0b21zayhpKSA6IGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIgXFxLIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdmVyYnNbal0ua3dk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdDsgIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lKGkpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVm KTsKKyNlbHNlCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50 ZihidWYsICJzZXQga2V5IFxcJWQgXFxLJXMiLCBpLCBrdmVyYnNbal0ua3dkKTsKKyNlbHNlCisg ICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJzZXQga2V5IFxcIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNraXRvYShpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg XFxLIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2ZXJic1tqXS5rd2QKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOworI2VuZGlmCisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBOT0tW RVJCUyAqLworICAgICAgICAgICAgICAgICAgeworI2lmZGVmIE9TMgorI2lmZGVmIENPTU1FTlQK KyAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgInNldCBrZXkgXFwlZCBcXHslZH1c dDsgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNra2V5cyA/IGNrdG9tc2so aSkgOiBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5bWFwW2ldLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2V5bmFtZShpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGJ1Ziwg ICAgLyogOCBzdHJpbmcgYXJncyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx MDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGtleSBcXCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShtc2trZXlzID8gY2t0b21zayhpKSA6 IGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFxceyIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShrZXltYXBbaV0pLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAifVx0OyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBrZXluYW1lKGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEws TlVMTCxOVUxMLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAg ICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVmKTsKKyNlbHNlCisjaWZkZWYgQ09NTUVOVAorICAg ICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAic2V0IGtleSBcXCVkIFxceyVkfSIsIGks IGtleW1hcFtpXSk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhidWYs MTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGtleSBcXCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKGkpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICIgXFx7IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0 b2Eoa2V5bWFwW2ldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgICAgICAgICAgIHpzb3V0 bChaTUZJTEUsYnVmKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICAvKiBPUy8yIGFsc28g aGFzIHRoZSBTRVQgVEVSTUlOQUwgS0VZIDx0ZXJtdHlwZT4gZGVmaW5lcyAqLworICAgICAgICBm b3IgKGsgPSAwOyBrIDwgbnR0a2V5OyBrKyspIHsKKyAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qg a2V5bm9kZSAqIHR0a2V5bWFwW107CisgICAgICAgICAgICBzdHJ1Y3Qga2V5bm9kZSAqIHBub2Rl ID0gTlVMTDsKKworICAgICAgICAgICAgaWYgKHR0a2V5dGFiW2tdLmZsZ3MpICAgICAgIC8qIERv bid0IHByb2Nlc3MgQ01fSU5WIG9yIENNX0FCUiAqLworICAgICAgICAgICAgICBjb250aW51ZTsK KworICAgICAgICAgICAgenNvdXRsKFpNRklMRSwiIik7CisgICAgICAgICAgICBja21ha21zZyhi dWYsMTAyNCwiOyBTRVQgVEVSTUlOQUwgS0VZICIsdHRrZXl0YWJba10ua3dkLE5VTEwsTlVMTCk7 CisgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7CisKKyAgICAgICAgICAgIGZvciAocG5v ZGUgPSB0dGtleW1hcFt0dGtleXRhYltrXS5rd3ZhbF07CisgICAgICAgICAgICAgICAgIHBub2Rl OworICAgICAgICAgICAgICAgICBwbm9kZSA9IHBub2RlLT5uZXh0CisgICAgICAgICAgICAgICAg ICkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocG5vZGUtPmRlZi50eXBlKSB7CisgICAgICAg ICAgICAgICAgICBjYXNlIGtleToKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAg IHNwcmludGYoYnVmLCAic2V0IHRlcm1pbmFsIGtleSAlcyBcXCVkIFxceyVkfVx0OyAlcyIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNrKHBub2RlLT5rZXkpIDogcG5vZGUtPmtl eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbm9kZS0+ZGVmLmtleS5zY2FuY29kZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lKHBub2RlLT5rZXkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGNrbWFr eG1zZyhidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInNldCB0ZXJtaW5hbCBrZXkgIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIgXFwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tpdG9hKG1za2tl eXMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrdG9tc2socG5vZGUt PmtleSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBub2RlLT5rZXkp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBcXHsiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2tpdG9hKHBub2RlLT5kZWYua2V5LnNjYW5jb2RlKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJ9XHQ7ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrZXluYW1lKHBub2RlLT5rZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgICAgIHpzb3V0bChaTUZJTEUsYnVm KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIGt2 ZXJiOgorICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmt2ZXJiczsgaisrKQor ICAgICAgICAgICAgICAgICAgICAgIGlmIChrdmVyYnNbal0ua3d2YWwgPT0gKHBub2RlLT5kZWYu a3ZlcmIuaWQgJiB+Rl9LVkVSQikpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKGogIT0gbmt2ZXJicykgeworI2lmZGVmIENPTU1FTlQKKyAg ICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAic2V0IHRlcm1pbmFsIGtleSAlcyBc XCVkIFxcSyVzXHQ7ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0 YWJba10ua3dkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2trZXlzID8gY2t0 b21zayhwbm9kZS0+a2V5KSA6IHBub2RlLT5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGt2ZXJic1tqXS5rd2QsIGtleW5hbWUocG5vZGUtPmtleSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBja21h a3htc2coYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldCB0ZXJtaW5hbCBrZXkgIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5rd2QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIiBcXCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2tpdG9hKG1za2tleXMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBja3RvbXNrKHBub2RlLT5rZXkpIDoKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcG5vZGUtPmtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiBcXEsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt2ZXJi c1tqXS5rd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx0OyAiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUocG5vZGUtPmtleSksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxOVUxMLE5VTEwsTlVMTAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg ICAgICAgICAgICAgICAgICAgICAgenNvdXRsKFpNRklMRSxidWYpOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz ZSBtYWNybzogeworICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oKGNoYXIg Kilwbm9kZS0+ZGVmLm1hY3JvLnN0cmluZyk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAg ICAgICAgICAgIHNwcmludGYoYnVmLCJzZXQgdGVybWluYWwga2V5ICVzIFxcJWQgIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNrKHBub2RlLT5rZXkpIDogcG5vZGUtPmtl eSk7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGNrbWFreG1zZyhidWYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAic2V0IHRlcm1pbmFsIGtleSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHR0a2V5dGFiW2tdLmt3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFxcIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EobXNra2V5cyA/CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrdG9tc2socG5vZGUtPmtleSkgOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbm9kZS0+a2V5KSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICAgICAgICAg ICAgenNvdXQoWk1GSUxFLGJ1Zik7CisKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAw OyBqIDwgbGVuOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjaCA9IHBu b2RlLT5kZWYubWFjcm8uc3RyaW5nW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo Y2ggPD0gU1AgfHwgY2ggPj0gREVMIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2ggPT0gJy0nIHx8IGNoID09ICcsJyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoID09ICd7JyB8fCBjaCA9PSAnfScgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaCA9PSAnOycgfHwgY2ggPT0gJz8nIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2ggPT0gJy4nIHx8IGNoID09ICdcJycgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaCA9PSAnXFwnIHx8IGNoID09ICcvJyB8fAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoID09ICcjJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ttYWtt c2coYnVmLDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFx7 Iixja2l0b2EoKGludCljaCksIn0iLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgenNvdXQoWk1GSUxFLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21zZyhidWYsMTAyNCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrY3RvYSgoY2hhciljaCksTlVMTCxO VUxMLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1 Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsIlx0OyAiLGtleW5hbWUo cG5vZGUtPmtleSksTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICB6c291dGwoWk1G SUxFLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICBjYXNlIGxpdGVyYWw6IHsKKyAgICAgICAgICAgICAgICAg ICAgICBpbnQgbGVuID0gc3RybGVuKChjaGFyICopcG5vZGUtPmRlZi5saXRlcmFsLnN0cmluZyk7 CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCJzZXQg dGVybWluYWwga2V5ICVzIC9saXRlcmFsIFxcJWQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1z a2tleXMgPyBja3RvbXNrKHBub2RlLT5rZXkpIDogcG5vZGUtPmtleSk7CisjZWxzZQorICAgICAg ICAgICAgICAgICAgICAgIGNrbWFreG1zZyhidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRlcm1pbmFs IGtleSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC9saXRlcmFsIFxcIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EobXNra2V5cyA/CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNrdG9tc2socG5vZGUtPmtleSkgOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwbm9kZS0+a2V5KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCxO VUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg ICAgICAgICAgICAgICAgICAgIHpzb3V0KFpNRklMRSxidWYpOworCisgICAgICAgICAgICAgICAg ICAgICAgZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgY2ggPSBwbm9kZS0+ZGVmLmxpdGVyYWwuc3RyaW5nW2pdOworICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoY2ggPD0gU1AgfHwgY2ggPj0gREVMIHx8CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2ggPT0gJy0nIHx8IGNoID09ICcsJyB8fAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoID09ICd7JyB8fCBjaCA9PSAnfScgfHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaCA9PSAnOycgfHwgY2ggPT0gJz8nIHx8CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2ggPT0gJy4nIHx8IGNoID09ICdcJycgfHwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAnXFwnIHx8IGNoID09ICcvJyB8fAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoID09ICcjJykgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2ttYWttc2coYnVmLDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiXFx7Iixja2l0b2EoKGludCljaCksIn0iLE5VTEwpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgenNvdXQoWk1GSUxFLGJ1Zik7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja21ha21z ZyhidWYsMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrY3Rv YSgoY2hhciljaCksTlVMTCxOVUxMLE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgenNvdXQoWk1GSUxFLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgY2ttYWttc2coYnVmLDEw MjQsIlx0OyAiLGtleW5hbWUocG5vZGUtPmtleSksTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAg ICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjYXNlIGVzYzoKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLAorICAgICAgICAgICAg ICAgICAgICAgICAic2V0IHRlcm1pbmFsIGtleSAlcyAvbGl0ZXJhbCBcXCVkIFxceyVkfVxceyVk fVx0OyAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1za2tleXMgPyBja3RvbXNrKHBub2RlLT5rZXkp IDogcG5vZGUtPmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU0RHMjAwKHR0a2V5 dGFiW2tdLmt3dmFsKSA/IDMwIDogMjcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG5v ZGUtPmRlZi5lc2Mua2V5ICYgfkZfRVNDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eW5hbWUocG5vZGUtPmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vsc2UK KyAgICAgICAgICAgICAgICAgICAgY2ttYWt4bXNnKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0IHRlcm1p bmFsIGtleSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRrZXl0YWJba10ua3dk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAvbGl0ZXJhbCBcXCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBja2l0b2EobXNra2V5cyA/CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2t0b21zayhwbm9kZS0+a2V5KSA6CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcG5vZGUtPmtleSksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiIFxceyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2l0b2Eo SVNERzIwMCh0dGtleXRhYltrXS5rd3ZhbCkgPyAzMCA6IDI3KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ9XFx7IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRv YShwbm9kZS0+ZGVmLmVzYy5rZXkgJiB+Rl9FU0MpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIn1cdDsgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUocG5v ZGUtPmtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAg ICAgICAgICAgICAgICB6c291dGwoWk1GSUxFLGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBjc2k6CisjaWZkZWYgQ09NTUVOVAorICAgICAg ICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgInNldCB0 ZXJtaW5hbCBrZXkgJXMgL2xpdGVyYWwgXFwlZCBcXHsyN31bXFx7JWR9XHQ7ICVzIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0dGtleXRhYltrXS5rd2QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbXNra2V5cyA/IGNrdG9tc2socG5vZGUtPmtleSkgOiBwbm9kZS0+a2V5LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBub2RlLT5kZWYuY3NpLmtleSAmIH5GX0NTSSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXluYW1lKHBub2RlLT5rZXkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGNrbWFr eG1zZyhidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInNldCB0ZXJtaW5hbCBrZXkgIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR0a2V5dGFiW2tdLmt3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICIgL2xpdGVyYWwgXFwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tp dG9hKG1za2tleXMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNrdG9t c2socG5vZGUtPmtleSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBu b2RlLT5rZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBcXHsyN31bXFx7IiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNraXRvYShwbm9kZS0+ZGVmLmNzaS5rZXkg JiB+Rl9DU0kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn1cdDsgIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGtleW5hbWUocG5vZGUtPmtleSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgICAgICAg ICAgenNvdXRsKFpNRklMRSxidWYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE9TMiAq LworCisgICAgICAgIHpzb3V0bChaTUZJTEUsIiIpOworICAgICAgICB6c291dGwoWk1GSUxFLCI7 IEVuZCIpOworICAgICAgICB6Y2xvc2UoWk1GSUxFKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgIH0K K30KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworCisjZGVmaW5lIFNWX1NDUkwgMAorI2RlZmluZSBT Vl9ISVNUIDEKKworI2lmZGVmIE9TMgorI2lmbmRlZiBOT0xPQ0FMCitzdGF0aWMgc3RydWN0IGtl eXRhYiB0cm10cm1vcHRbXSA9IHsKKyAgICB7ICJzY3JvbGxiYWNrIiwgU1ZfU0NSTCwgMCB9Cit9 OworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworc3RhdGljIHN0cnVj dCBrZXl0YWIgY21kdHJtb3B0W10gPSB7CisjaWZkZWYgQ0tfUkVDQUxMCisgICAgeyAiaGlzdG9y eSIsICAgIFNWX0hJU1QsIDAgfSwKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyNpZmRlZiBPUzIK KyNpZm5kZWYgTk9MT0NBTAorICAgIHsgInNjcm9sbGJhY2siLCBTVl9TQ1JMLCAwIH0sCisjZW5k aWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHsgIiIsIDAsIDAgfQorfTsK K3N0YXRpYyBpbnQgbmNtZHRybW9wdCA9IChzaXplb2YgKGNtZHRybW9wdCkgLyBzaXplb2YgKHN0 cnVjdCBrZXl0YWIpKSAtIDE7CisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9MT0NBTAorX1BST1RP VFlQKGludCBzYXZzY3JiaywgKGludCwgY2hhciAqLCBpbnQpKTsKKyNlbmRpZiAvKiBOT0xPQ0FM ICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19SRUNBTEwKK19QUk9UT1RZUChpbnQg c2F2aGlzdG9yeSwgKGNoYXIgKiwgaW50KSk7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisKK2lu dAorZG9zYXZlKHh4KSBpbnQgeHg7IHsKKyAgICBpbnQgeCwgeSA9IDAsIGRpc3A7CisgICAgY2hh ciAqIHMgPSBOVUxMOworICAgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiIGRpc3B0YltdOworI2lmZGVm IFpGTlFGUAorICAgIHN0cnVjdCB6Zm5mcCAqIGZucDsKKyNlbmRpZiAvKiBaRk5RRlAgKi8KKwor I2lmbmRlZiBOT1NFVEtFWQorICAgIGlmICh4eCA9PSBYU0tFWSkgeyAgICAgICAgICAgICAgICAg IC8qIFNBVkUgS0VZTUFQLi4gKi8KKyAgICAgICAgeiA9IGNtb2ZpKCJOYW1lIG9mIEtlcm1pdCBj b21tYW5kIGZpbGUiLCJrZXltYXAua3NjIiwmcyx4eHN0cmluZyk7CisgICAgfSBlbHNlIHsKKyNl bmRpZiAvKiBOT1NFVEtFWSAqLworICAgICAgICBzd2l0Y2ggKHh4KSB7CisgICAgICAgICAgY2Fz ZSBYU0NNRDogICAgICAgICAgICAgICAgICAgLyogU0FWRSBDT01NQU5ELi4gKi8KKyAgICAgICAg ICAgIGlmICgoeSA9IGNta2V5KGNtZHRybW9wdCwgbmNtZHRybW9wdCwgIldoYXQgdG8gc2F2ZSIs CisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Nyb2xsYmFjayIsCisj ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpc3RvcnkiLAorI2VuZGlmIC8qIE9T MiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgeHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgICAgIHJldHVybih5KTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIE9TMgorI2lmbmRl ZiBOT0xPQ0FMCisgICAgICAgICAgY2FzZSBYU1RFUk06ICAgICAgICAgICAgICAgICAgLyogU0FW RSBURVJNSU5BTC4uICovCisgICAgICAgICAgICBpZiAoKHkgPSBjbWtleSh0cm10cm1vcHQsMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaGF0IHRvIHNhdmUiLCJzY3JvbGxiYWNrIix4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAgICAgICAgYnJl YWs7CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICB9Cisg ICAgICAgIHogPSBjbW9maSgiRmlsZW5hbWUiLAorICAgICAgICAgICAgICAgICAgKCh5ID09IFNW X1NDUkwpID8gInNjcm9sbGJrLnR4dCIgOiAiaGlzdG9yeS50eHQiKSwKKyAgICAgICAgICAgICAg ICAgICZzLAorICAgICAgICAgICAgICAgICAgeHhzdHJpbmcKKyAgICAgICAgICAgICAgICAgICk7 CisjaWZuZGVmIE5PU0VUS0VZCisgICAgfQorI2VuZGlmIC8qIE5PU0VUS0VZICovCisgICAgaWYg KHogPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgb3V0cHV0LWZpbGUgcGFy c2UgcmVzdWx0cyAqLworICAgICAgcmV0dXJuKHopOworICAgIGlmICh6ID09IDIpIHsKKyAgICAg ICAgcHJpbnRmKCI/U29ycnksICVzIGlzIGEgZGlyZWN0b3J5IG5hbWVcbiIscyk7CisgICAgICAg IHJldHVybigtOSk7CisgICAgfQorI2lmZGVmIFpGTlFGUAorICAgIGlmICgoZm5wID0gemZucWZw KHMsVE1QQlVGU0laIC0gMSx0bXBidWYpKSkgey8qIENvbnZlcnQgdG8gZnVsbCBwYXRobmFtZSAq LworICAgICAgICBpZiAoZm5wLT5mcGF0aCkKKyAgICAgICAgICBpZiAoKGludCkgc3RybGVuKGZu cC0+ZnBhdGgpID4gMCkKKyAgICAgICAgICAgIHMgPSBmbnAtPmZwYXRoOworICAgIH0KKyNlbmRp ZiAvKiBaRk5RRlAgKi8KKworICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgICAgICAg IC8qIE1ha2Ugc2FmZSBjb3B5IG9mIHBhdGhuYW1lICovCisgICAgcyA9IGxpbmU7CisjaWZkZWYg TUFDCisgICAgeiA9IDA7CisjZWxzZQorICAgIC8qIEdldCBORVcvQVBQRU5EIGRpc3Bvc2l0aW9u ICovCisgICAgaWYgKCh6ID0gY21rZXkoZGlzcHRiLDIsIkRpc3Bvc2l0aW9uIiwibmV3Iix4eHN0 cmluZykpIDwgMCkKKyAgICAgIHJldHVybih6KTsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICBkaXNw ID0gejsKKyAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApICAgICAgICAgICAgICAvKiBHZXQgY29u ZmlybWF0aW9uICovCisgICAgICByZXR1cm4oeCk7CisKKyAgICBzd2l0Y2ggKHh4KSB7ICAgICAg ICAgICAgICAgICAgICAgICAvKiBEbyBhY3Rpb24uLiAqLworI2lmbmRlZiBOT1NFVEtFWQorICAg ICAgY2FzZSBYU0tFWTogICAgICAgICAgICAgICAgICAgICAgIC8qIFNBVkUgS0VZTUFQICovCisg ICAgICAgIHJldHVybiAoc2F2a2V5cyhzLGRpc3ApKTsKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLwor CisgICAgICBjYXNlIFhTQ01EOiAgICAgICAgICAgICAgICAgICAgICAgLyogU0FWRSBDT01NQU5E Li4gKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgICBpZiAoeSA9PSBTVl9T Q1JMKSAgICAgICAgICAgICAgIC8qIC4uIFNDUk9MTEJBQ0sgKi8KKyAgICAgICAgICByZXR1cm4o c3VjY2VzcyA9IHNhdnNjcmJrKFZDTUQscyxkaXNwKSk7CisjZW5kaWYgLyogTk9MT0NBTCAqLwor I2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBOT1JFQ0FMTAorICAgICAgICBpZiAoeSA9PSBTVl9I SVNUKSAgICAgICAgICAgICAgIC8qIC4uIEhJU1RPUlkgKi8KKyAgICAgICAgICByZXR1cm4oc3Vj Y2VzcyA9IHNhdmhpc3RvcnkocyxkaXNwKSk7CisjZW5kaWYgLyogTk9SRUNBTEwgKi8KKyAgICAg ICAgYnJlYWs7CisKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9MT0NBTAorICAgICAgY2FzZSBYU1RF Uk06ICAgICAgICAgICAgICAgICAgICAgIC8qIFNBVkUgVEVSTUlOQUwgU0NST0xMQkFDSyAqLwor ICAgICAgICByZXR1cm4oc3VjY2VzcyA9IHNhdnNjcmJrKFZURVJNLHMsZGlzcCkpOworI2VuZGlm IC8qIE5PTE9DQUwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisgICAgc3VjY2VzcyA9IDA7 CisgICAgcmV0dXJuKC0yKTsKK30KKworLyoKKyAgUiBFIEEgRCBUIEUgWCBUCisKKyAgUmVhZCB0 ZXh0IHdpdGggYSBjdXN0b20gcHJvbXB0IGludG8gZ2l2ZW4gYnVmZmVyIHVzaW5nIGNvbW1hbmQg cGFyc2VyIGJ1dAorICB3aXRoIG5vIGVjaG9pbmcgb3IgZW50cnkgaW50byByZWNhbGwgYnVmZmVy LgorKi8KK2ludAorcmVhZHRleHQocHJtcHQsIGJ1ZmZlciwgYnVmc2l6KSBjaGFyICogcHJtcHQ7 IGNoYXIgKiBidWZmZXI7IGludCBidWZzaXo7IHsKKyNpZmRlZiBDS19SRUNBTEwKKyAgICBleHRl cm4gaW50IG9uX3JlY2FsbDsgICAgICAgICAgICAgICAvKiBBcm91bmQgUGFzc3dvcmQgcHJvbXB0 aW5nICovCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgaW50IHJjOworI2lmbmRlZiBOT0xP Q0FMCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB2bW9kZTsKKyAgICBleHRlcm4gaW50IHN0 YXJ0ZmxhZ3M7CisgICAgaW50IHZtb2RlX3NhdiA9IHZtb2RlOworCisgICAgaWYgKCFwcm1wdCkg cHJtcHQgPSAiIjsKKworICAgIGlmICh3aW45NV9wb3B1cCAmJiAhKHN0YXJ0ZmxhZ3MgJiA5NikK KyNpZmRlZiBJS1NECisgICAgICAgICAmJiAhaW5zZXJ2ZXIKKyNlbmRpZiAvKiBJS1NEICovCisg ICAgICAgICApCisgICAgICByZXR1cm4ocG9wdXBfcmVhZHRleHQodm1vZGUsTlVMTCxwcm1wdCxi dWZmZXIsYnVmc2l6LDApKTsKKworICAgIGlmICh2bW9kZSA9PSBWVEVSTSkgeworICAgICAgICB2 bW9kZSA9IFZDTUQ7CisgICAgICAgIFZzY3JuSXNEaXJ0eShWVEVSTSk7CisgICAgICAgIFZzY3Ju SXNEaXJ0eShWQ01EKTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NB TCAqLworCisjaWZkZWYgQ0tfUkVDQUxMCisgICAgb25fcmVjYWxsID0gMDsKKyNlbmRpZiAvKiBD S19SRUNBTEwgKi8KKyAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7ICAgICAgICAgICAgICAvKiBT YXZlIG9sZCBwcm9tcHQgKi8KKyAgICBjbXNldHAocHJtcHQpOyAgICAgICAgICAgICAgICAgICAg ICAvKiBNYWtlIG5ldyBwcm9tcHQgKi8KKyAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAg ICAgICAgICAvKiBQdXQgY29uc29sZSBpbiBjYnJlYWsgbW9kZSAqLworICAgIGNtaW5pKDEpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBlY2hvIG1vZGUgKi8KKyAgICBpZiAocGZs YWcpIHByb21wdCh4eHN0cmluZyk7ICAgICAgICAvKiBJc3N1ZSBwcm9tcHQgaWYgYXQgdG9wIGxl dmVsICovCisgICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQg dGhlIHBhcnNlciAqLworICAgIGZvciAocmMgPSAtMTsgcmMgPCAwOyApIHsgICAgICAgICAgIC8q IFByb21wdCB0aWxsIHRoZXkgYW5zd2VyICovCisgICAgICAgIHJjID0gY210eHQoIiIsIiIsJnMs TlVMTCk7ICAgICAgLyogR2V0IGEgbGl0ZXJhbCBsaW5lIG9mIHRleHQgKi8KKyAgICAgICAgY21y ZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgcGFyc2VyIGFnYWluICov CisgICAgfQorICAgIGNrc3RybmNweShidWZmZXIscyxidWZzaXopOworICAgIGNtc2V0cChwc2F2 ZSk7ICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgb3JpZ2luYWwgcHJvbXB0ICovCisK KyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIGlmICh2bW9kZSAhPSB2bW9kZV9zYXYp IHsKKyAgICAgICAgdm1vZGUgPSBWVEVSTTsKKyAgICAgICAgVnNjcm5Jc0RpcnR5KFZDTUQpOwor ICAgICAgICBWc2NybklzRGlydHkoVlRFUk0pOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBOT0xPQ0FMICovCisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIE5PSUNQICov CisKKy8qIEEgZ2VuZXJhbCBmdW5jdGlvbiB0byBhbGxvdyBhIFBhc3N3b3JkIG9yIG90aGVyIGlu Zm9ybWF0aW9uICAqLworLyogdG8gYmUgcmVhZCBmcm9tIHRoZSBjb21tYW5kIHByb21wdCB3aXRo b3V0IGl0IGdvaW5nIGludG8gICAgICovCisvKiB0aGUgcmVjYWxsIGJ1ZmZlciBvciBiZWluZyBl Y2hvJ2QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworaW50CityZWFkcGFzcyhwcm1w dCwgYnVmZmVyLCBidWZzaXopIGNoYXIgKiBwcm1wdDsgY2hhciAqIGJ1ZmZlcjsgaW50IGJ1ZnNp ejsgeworICAgIGludCB4OworI2lmZGVmIE5PSUNQCisgICAgaWYgKCFwcm1wdCkgcHJtcHQgPSAi IjsKKyAgICBwcmludGYoIiVzIiwgcHJtcHQpOworI2lmZGVmIENPTU1FTlQKKyAgICAvKiBTb21l IGxpbmtlcnMgd29uJ3QgYWxsb3cgdGhpcyBiZWNhdXNlIGl0J3MgdW5zYWZlICovCisgICAgZ2V0 cyhidWZmZXIpOworI2Vsc2UgIC8qIENPTU1FTlQgKi8KKyAgICB7CisgICAgICAgIGludCBjLCBp OyBjaGFyICogcDsKKyAgICAgICAgcCA9IGJ1ZmZlcjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IGJ1ZnNpei0xOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgoYyA9IGdldGNoYXIoKSkgPT0gRU9G KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjIDwgU1ApCisgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgYnVmZmVyW2ldID0gYzsKKyAgICAgICAgfQorICAg ICAgICBidWZmZXJbaV0gPSBOVUw7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBy ZXR1cm4oMSk7CisjZWxzZSAgLyogTk9JQ1AgKi8KKyNpZmRlZiBDS19SRUNBTEwKKyAgICBleHRl cm4gaW50IG9uX3JlY2FsbDsgICAgICAgICAgICAgICAvKiBhcm91bmQgUGFzc3dvcmQgcHJvbXB0 aW5nICovCisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisgICAgaW50IHJjOworI2lmbmRlZiBOT0xP Q0FMCisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB2bW9kZTsKKyAgICBleHRlcm4gaW50IHN0 YXJ0ZmxhZ3M7CisgICAgaW50IHZtb2RlX3NhdiA9IHZtb2RlOworI2VuZGlmIC8qIE9TMiAqLwor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBDS1NZU0xPRworICAgIGludCBzYXZsb2c7Cisj ZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICBpZiAoIXBybXB0KSBwcm1wdCA9ICIiOworI2lmbmRl ZiBOT0xPQ0FMCisgICAgZGVib2sgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9u J3QgbG9nICovCisjaWZkZWYgT1MyCisgICAgaWYgKHdpbjk1X3BvcHVwICYmICEoc3RhcnRmbGFn cyAmIDk2KQorI2lmZGVmIElLU0QKKyAgICAgICAgICYmICFpbnNlcnZlcgorI2VuZGlmIC8qIElL U0QgKi8KKyAgICAgICAgICkgeworICAgICAgICB4ID0gcG9wdXBfcmVhZHBhc3Modm1vZGUsTlVM TCxwcm1wdCxidWZmZXIsYnVmc2l6LDApOworICAgICAgICBkZWJvayA9IDE7CisgICAgICAgIHJl dHVybih4KTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9MT0NBTCAqLwor CisjaWZkZWYgQ0tTWVNMT0cKKyAgICBzYXZsb2cgPSBja3hzeXNsb2c7ICAgICAgICAgICAgICAg ICAvKiBTYXZlIGFuZCB0dXJuIG9mZiBzeXNsb2dnaW5nICovCisgICAgY2t4c3lzbG9nID0gMDsK KyNlbmRpZiAvKiBDS1NZU0xPRyAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAg aWYgKHZtb2RlID09IFZURVJNKSB7CisgICAgICAgIHZtb2RlID0gVkNNRDsKKyAgICAgICAgVnNj cm5Jc0RpcnR5KFZURVJNKTsKKyAgICAgICAgVnNjcm5Jc0RpcnR5KFZDTUQpOworICAgIH0KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgQ0tfUkVDQUxMCisg ICAgb25fcmVjYWxsID0gMDsKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICBjbXNhdnAocHNh dmUsUFJPTVBUTCk7ICAgICAgICAgICAgICAvKiBTYXZlIG9sZCBwcm9tcHQgKi8KKyAgICBjbXNl dHAocHJtcHQpOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIG5ldyBwcm9tcHQgKi8KKyAg ICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgICAgICAvKiBQdXQgY29uc29sZSBpbiBj YnJlYWsgbW9kZSAqLworICAgIGNtaW5pKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGFuZCBuby1lY2hvIG1vZGUgKi8KKyAgICBpZiAocGZsYWcpIHByb21wdCh4eHN0cmluZyk7ICAg ICAgICAvKiBJc3N1ZSBwcm9tcHQgaWYgYXQgdG9wIGxldmVsICovCisgICAgY21yZXMoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciAqLworICAgIGZvciAo cmMgPSAtMTsgcmMgPCAwOyApIHsgICAgICAgICAgIC8qIFByb21wdCB0aWxsIHRoZXkgYW5zd2Vy ICovCisgICAgICAgIHJjID0gY210eHQoIiIsIiIsJnMsTlVMTCk7ICAgICAgLyogR2V0IGEgbGl0 ZXJhbCBsaW5lIG9mIHRleHQgKi8KKyAgICAgICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZXNldCB0aGUgcGFyc2VyIGFnYWluICovCisgICAgfQorICAgIGNrc3RybmNweShi dWZmZXIscyxidWZzaXopOworICAgIHByaW50ZigiXHJcbiIpOyAgICAgICAgICAgICAgICAgICAg IC8qIEVjaG8gYSBDUkxGICovCisgICAgY21zZXRwKHBzYXZlKTsgICAgICAgICAgICAgICAgICAg ICAgLyogUmVzdG9yZSBvcmlnaW5hbCBwcm9tcHQgKi8KKyAgICBjbWluaSgxKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGVjaG8gbW9kZSAqLworI2lmbmRlZiBOT0xPQ0FM CisjaWZkZWYgT1MyCisgICAgaWYgKHZtb2RlICE9IHZtb2RlX3NhdikgeworICAgICAgICB2bW9k ZSA9IFZURVJNOworICAgICAgICBWc2NybklzRGlydHkoVkNNRCk7CisgICAgICAgIFZzY3JuSXNE aXJ0eShWVEVSTSk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwg Ki8KKyNpZmRlZiBDS1NZU0xPRworICAgIGNreHN5c2xvZyA9IHNhdmxvZzsgICAgICAgICAgICAg ICAgIC8qIFJlc3RvcmUgc3lzbG9nZ2luZyAqLworI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAg ZGVib2sgPSAxOworICAgIHJldHVybigwKTsKKyNlbmRpZiAvKiBOT0lDUCAqLworfQorCisjaWZu ZGVmIE5PSUNQCitzdHJ1Y3Qga2V5dGFiIGF1dGh0YWJbXSA9IHsgICAgICAgICAgICAgLyogQXZh aWxhYmxlIGF1dGhlbnRpY2F0aW9uIHR5cGVzICovCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICB7 ICJrNCIsICAgICAgICBBVVRIX0tSQjQsIENNX0lOViB9LAorICAgIHsgIms1IiwgICAgICAgIEFV VEhfS1JCNSwgQ01fSU5WIH0sCisgICAgeyAia2VyYmVyb3M0IiwgQVVUSF9LUkI0LCAwICAgICAg fSwKKyAgICB7ICJrZXJiZXJvczUiLCBBVVRIX0tSQjUsIDAgICAgICB9LAorICAgIHsgImtyYjQi LCAgICAgIEFVVEhfS1JCNCwgQ01fSU5WIH0sCisgICAgeyAia3JiNSIsICAgICAgQVVUSF9LUkI1 LCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2lmZGVmIE5UCisgICAgeyAi bnRsbSIsICAgICAgQVVUSF9OVExNLCAwIH0sCisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBDS19T UlAKKyAgICB7ICJzcnAiLCAgICAgICBBVVRIX1NSUCwgIDAgfSwKKyNlbmRpZiAvKiBDS19TUlAg Ki8KKyNpZmRlZiBDS19TU0wKKyAgICB7ICJzc2wiLCAgICAgICBBVVRIX1NTTCwgIDAgfSwKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyAgICB7ICIiLCAgICAgICAgICAwLCAgICAgICAgIDAgfQorfTsK K2ludCBhdXRodGFibiA9IHNpemVvZihhdXRodGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYiktMTsK KworI2lmZGVmIENLX0tFUkJFUk9TCitzdHJ1Y3Qga2V5dGFiIGtlcmJ0YWJbXSA9IHsgICAgICAg ICAgICAgLyogS2VyYmVyb3MgYXV0aGVudGljYXRpb24gdHlwZXMgKi8KKyAgICB7ICJrNCIsICAg ICAgICBBVVRIX0tSQjQsIENNX0lOViB9LAorICAgIHsgIms1IiwgICAgICAgIEFVVEhfS1JCNSwg Q01fSU5WIH0sCisgICAgeyAia2VyYmVyb3M0IiwgQVVUSF9LUkI0LCAwICAgICAgfSwKKyAgICB7 ICJrZXJiZXJvczUiLCBBVVRIX0tSQjUsIDAgICAgICB9LAorICAgIHsgImtyYjQiLCAgICAgIEFV VEhfS1JCNCwgQ01fSU5WIH0sCisgICAgeyAia3JiNSIsICAgICAgQVVUSF9LUkI1LCBDTV9JTlYg fQorfTsKK2ludCBrZXJidGFibiA9IHNpemVvZihrZXJidGFiKS9zaXplb2Yoc3RydWN0IGtleXRh Yik7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGtyYl9zX3RibFtdID0geyAgICAvKiBBVVRIRU5U SUNBVEUgY29tbWFuZCBzd2l0Y2hlczogKi8KKyAgICB7ICIvY2FjaGUiLCAgIEtSQl9TX0NBLCBD TV9BUkcgfQorfTsKK3N0YXRpYyBpbnQga3JiX3NfbiA9IHNpemVvZihrcmJfc190YmwpL3NpemVv ZihzdHJ1Y3Qga2V5dGFiKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIga3JiX3ZfdGJsW10gPSB7 ICAgIC8qIEtFUkJFUk9TIHZlcnNpb24gdmFsdWVzOiAqLworICAgIHsgIjQiLCAgICA0LCAwIH0s CisgICAgeyAiNSIsICAgIDUsIDAgfSwgICAgICAgICAgICAgICAgICAgLyogKGFkZCBvdGhlcnMg YXMgbmVlZGVkLi4uKSAqLworICAgIHsgImF1dG8iLCAwLCAwIH0gICAgICAgICAgICAgICAgICAg IC8qIE5vdGU6IDAgPSBhdXRvICovCit9Oworc3RhdGljIGludCBrcmJfdl9uID0gc2l6ZW9mKGty Yl92X3RibCkvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBr cmJfYV90YmxbXSA9IHsgICAgLyogS0VSQkVST1MgYWN0aW9uczogKi8KKyAgICB7ICJkZXN0cm95 IiwgICAgICAgICAgIEtSQl9BX0RFLCAwIH0sCisgICAgeyAiaW5pdGlhbGl6ZSIsICAgICAgICBL UkJfQV9JTiwgMCB9LAorICAgIHsgImxpc3QtY3JlZGVudGlhbHMiLCAgS1JCX0FfTEMsIDAgfQor fTsKK3N0YXRpYyBpbnQga3JiX2FfbiA9IHNpemVvZihrcmJfYV90YmwpL3NpemVvZihzdHJ1Y3Qg a2V5dGFiKTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIga3JiNF9pX3RibFtdID0geyAgIC8qIEtF UkJFUk9TIDQgSU5JVElBTElaRSBzd2l0Y2hlczogKi8KKyAgICB7ICIvYnJpZWYiLCAgICAgICAg ICAgIEtSQl9JX0JSLCAwIH0sICAgICAgLyogL0JSSUVGICAgICAgICovCisgICAgeyAiL2luc3Rh bmNlIiwgICAgICAgICBLUkJfSV9JTiwgQ01fQVJHIH0sIC8qIC9JTlNUQU5DRTogICAqLworICAg IHsgIi9saWZldGltZSIsICAgICAgICAgS1JCX0lfTEYsIENNX0FSRyB9LCAvKiAvTElGRVRJTUU6 ICAgKi8KKyAgICB7ICIvbm90LXByZWF1dGgiLCAgICAgIEtSQl9JX05QQSwgMCB9LCAgICAgLyog L05PVC1QUkVBVVRIICovCisgICAgeyAiL3Bhc3N3b3JkIiwgICAgICAgICBLUkJfSV9QVywgQ01f QVJHIH0sIC8qIC9QQVNTV09SRDogICAqLworI2lmZGVmIE9TMgorICAgIHsgIi9wb3B1cCIsICAg ICAgICAgICAgS1JCX0lfUE9QLCAwIH0sICAgICAvKiAvUE9QVVAgICAgICAgKi8KKyNlbmRpZiAv KiBPUzIgKi8KKyAgICB7ICIvcHJlYXV0aCIsICAgICAgICAgIEtSQl9JX1BBLCAwIH0sICAgICAg LyogL1BSRUFVVEggICAgICovCisgICAgeyAiL3JlYWxtIiwgICAgICAgICAgICBLUkJfSV9STCwg Q01fQVJHIH0sIC8qIC9SRUFMTTogICAgICAqLworICAgIHsgIi92ZXJib3NlIiwgICAgICAgICAg S1JCX0lfVkIsIDAgfSwgICAgICAvKiAvVkVSQk9TRSAgICAgKi8KKyAgICB7ICIiLCAwLCAwIH0K K307CitzdGF0aWMgaW50IGtyYjRfaV9uID0gc2l6ZW9mKGtyYjRfaV90YmwpL3NpemVvZihzdHJ1 Y3Qga2V5dGFiKSAtIDE7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGtyYjVfaV90YmxbXSA9IHsg ICAvKiBLRVJCRVJPUyA1IElOSVRJQUxJWkUgc3dpdGNoZXM6ICovCisgICAgeyAiL2FkZHJlc3Nl cyIsICAgICAgICBLUkJfSV9BRFIsIENNX0FSRyB9LAorICAgIHsgIi9mb3J3YXJkYWJsZSIsICAg ICAgS1JCX0lfRlcsICAwIH0sICAgICAgICAgLyogL0ZPUldBUkRBQkxFICovCisgICAgeyAiL2lu c3RhbmNlIiwgICAgICAgICBLUkJfSV9JTiwgQ01fQVJHIH0sIC8qIC9JTlNUQU5DRTogICAqLwor ICAgIHsgIi9rNCIsICAgICAgICAgICAgICAgS1JCX0lfSzQsICBDTV9JTlYgfSwgLyogL0tFUkJF Uk9TNCAgICovCisgICAgeyAiL2tlcmJlcm9zNCIsICAgICAgICBLUkJfSV9LNCwgIDAgfSwgICAg ICAvKiAvS0VSQkVST1M0ICAgKi8KKyAgICB7ICIva3JiNCIsICAgICAgICAgICAgIEtSQl9JX0s0 LCAgQ01fSU5WIH0sIC8qIC9LRVJCRVJPUzQgICAqLworICAgIHsgIi9saWZldGltZSIsICAgICAg ICAgS1JCX0lfTEYsICBDTV9BUkcgfSwgLyogL0xJRkVUSU1FOiAgICovCisgICAgeyAiL25vLWFk ZHJlc3NlcyIsICAgICBLUkJfSV9OQUQsIDAgfSwgICAgICAvKiAvTk8tQUREUkVTU0VTICovCisg ICAgeyAiL25vLWs0IiwgICAgICAgICAgICBLUkJfSV9OSzQsIENNX0lOViB9LC8qIC9OTy1LRVJC RVJPUzQgKi8KKyAgICB7ICIvbm8ta2VyYmVyb3M0IiwgICAgIEtSQl9JX05LNCwgMCB9LCAgICAg LyogL05PLUtFUkJFUk9TNCAqLworICAgIHsgIi9uby1rcmI0IiwgICAgICAgICAgS1JCX0lfTks0 LCBDTV9JTlYgfSwvKiAvTk8tS0VSQkVST1M0ICovCisgICAgeyAiL25vdC1mb3J3YXJkYWJsZSIs ICBLUkJfSV9ORlcsIDAgfSwgICAgICAgICAvKiAvTk9ULUZPUldBUkRBQkxFICovCisgICAgeyAi L25vdC1wcm94aWFibGUiLCAgICBLUkJfSV9OUFIsIDAgfSwgICAgIC8qIC9OT1QtUFJPWElBQkxF ICAgKi8KKyAgICB7ICIvcGFzc3dvcmQiLCAgICAgICAgIEtSQl9JX1BXLCAgQ01fQVJHIH0sIC8q IC9QQVNTV09SRDogICAqLworI2lmZGVmIE9TMgorICAgIHsgIi9wb3B1cCIsICAgICAgICAgICAg S1JCX0lfUE9QLCAwIH0sICAgICAvKiAvUE9QVVAgICAgICAgKi8KKyNlbmRpZiAvKiBPUzIgKi8K KyAgICB7ICIvcG9zdGRhdGUiLCAgICAgICAgIEtSQl9JX1BELCBDTV9BUkcgfSwgLyogL1BPU1RE QVRFOiAgICovCisgICAgeyAiL3ByIiwgICAgICAgICAgICAgICBLUkJfSV9QUiwgQ01fSU5WfENN X0FCUiB9LCAvKiB0byBhbGxvdyBmb3IgKi8KKyAgICB7ICIvcHJvIiwgICAgICAgICAgICAgIEtS Ql9JX1BSLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIGRpZmZlcmVudCBzcGVsbGluZ3MgKi8KKyAgICB7 ICIvcHJveCIsICAgICAgICAgICAgIEtSQl9JX1BSLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAi L3Byb3hpYWJsZSIsICAgICAgICBLUkJfSV9QUiwgMCB9LCAgICAgIC8qIC9QUk9YSUFCTEUgICAq LworICAgIHsgIi9wcm94eWFibGUiLCAgICAgICAgS1JCX0lfUFIsIENNX0lOViB9LCAvKiAvUFJP WFlBQkxFICAgKi8KKyAgICB7ICIvcmVhbG0iLCAgICAgICAgICAgIEtSQl9JX1JMLCBDTV9BUkcg fSwgLyogL1JFQUxNOiAgICAgICovCisgICAgeyAiL3JlbmV3IiwgICAgICAgICAgICBLUkJfSV9S TiwgMCB9LCAgICAgICAgICAvKiAvUkVORVcgICAgICAgKi8KKyAgICB7ICIvcmVuZXdhYmxlIiwg ICAgICAgIEtSQl9JX1JCLCBDTV9BUkcgfSwgLyogL1JFTkVXQUJMRTogICovCisgICAgeyAiL3Nl cnZpY2UiLCAgICAgICAgICBLUkJfSV9TUiwgQ01fQVJHIH0sIC8qIC9TRVJWSUNFOiAgICAqLwor ICAgIHsgIi92YWxpZGF0ZSIsICAgICAgICAgS1JCX0lfVkEsIDAgfSwgICAgICAgICAgLyogL1ZB TElEQVRFICAgICovCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBrcmI1X2lfbiA9 IHNpemVvZihrcmI1X2lfdGJsKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworCitzdGF0aWMg c3RydWN0IGtleXRhYiBrbGN0YWJbXSA9IHsgICAgICAgLyogTGlzdCBDcmVkZW50aWFscyBzd2l0 Y2hlcyovCisgICAgeyAiL2FkZHJlc3NlcyIsICBYWUtMQ0FELCAwIH0sCisgICAgeyAiL2VuY3J5 cHRpb24iLCBYWUtMQ0VOLCAwIH0sCisgICAgeyAiL2ZsYWdzIiwgICAgICBYWUtMQ0ZMLCAwIH0K K307CitzdGF0aWMgaW50IG5rbGN0YWIgPSBzaXplb2Yoa2xjdGFiKS9zaXplb2Yoc3RydWN0IGtl eXRhYik7CisKK2V4dGVybiBpbnQga3JiX2FjdGlvbjsKK2V4dGVybiBzdHJ1Y3Qga3JiX29wX2Rh dGEga3JiX29wOworCitleHRlcm4gc3RydWN0IGtyYjVfbGlzdF9jcmVkX2RhdGEga3JiNV9sYzsK K2V4dGVybiBzdHJ1Y3Qga3JiNV9pbml0X2RhdGEga3JiNV9pbml0OworZXh0ZXJuIGNoYXIgKiBr cmI1X2RfcHJpbmNpcGFsOyAgICAgICAgIC8qIERlZmF1bHQgcHJpbmNpcGFsICovCitleHRlcm4g Y2hhciAqIGtyYjVfZF9pbnN0YW5jZTsKK2V4dGVybiBjaGFyICoga3JiNV9kX3JlYWxtOyAgICAg ICAgICAgICAvKiBEZWZhdWx0IHJlYWxtICovCitleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsgICAg ICAgICAgICAgICAgLyogRGVmYXVsdCBjcmVkZW50aWFscyBjYWNoZSAqLworZXh0ZXJuIGNoYXIg KiBrcmI1X2Rfc3J2OyAgICAgICAgICAgICAgIC8qIERlZmF1bHQgc2VydmljZSBuYW1lICovCitl eHRlcm4gaW50ICAgIGtyYjVfZF9saWZldGltZTsgICAgICAgICAgLyogRGVmYXVsdCBsaWZldGlt ZSAqLworZXh0ZXJuIGludCAgICBrcmI1X2RfZm9yd2FyZGFibGU7CitleHRlcm4gaW50ICAgIGty YjVfZF9wcm94aWFibGU7CitleHRlcm4gaW50ICAgIGtyYjVfZF9yZW5ld2FibGU7CitleHRlcm4g aW50ICAgIGtyYjVfYXV0b2dldDsKK2V4dGVybiBpbnQgICAga3JiNV9hdXRvZGVsOworZXh0ZXJu IGludCAgICBrcmI1X2RfZ2V0azQ7CitleHRlcm4gaW50ICAgIGtyYjVfZF9ub19hZGRyZXNzZXM7 CitleHRlcm4gaW50ICAgIGtyYjVfY2hlY2thZGRyczsKK2V4dGVybiBjaGFyICoga3JiNV9kX2Fk ZHJzW107CitleHRlcm4gY2hhciAqIGs1X2tleXRhYjsgICAgICAgICAgICAgICAgLyogS2V5dGFi IGZpbGUgKi8KKworZXh0ZXJuIHN0cnVjdCBrcmI0X2luaXRfZGF0YSBrcmI0X2luaXQ7CitleHRl cm4gY2hhciAqIGtyYjRfZF9wcmluY2lwYWw7ICAgICAgICAgLyogRGVmYXVsdCBwcmluY2lwYWwg Ki8KK2V4dGVybiBjaGFyICoga3JiNF9kX3JlYWxtOyAgICAgICAgICAgICAvKiBEZWZhdWx0IHJl YWxtICovCitleHRlcm4gY2hhciAqIGtyYjRfZF9zcnY7ICAgICAgICAgICAgICAgLyogRGVmYXVs dCBzZXJ2aWNlIG5hbWUgKi8KK2V4dGVybiBpbnQgICAga3JiNF9kX2xpZmV0aW1lOyAgICAgICAg ICAvKiBEZWZhdWx0IGxpZmV0aW1lICovCitleHRlcm4gaW50ICAgIGtyYjRfZF9wcmVhdXRoOwor ZXh0ZXJuIGNoYXIgKiBrcmI0X2RfaW5zdGFuY2U7CitleHRlcm4gaW50ICAgIGtyYjRfYXV0b2dl dDsKK2V4dGVybiBpbnQgICAga3JiNF9hdXRvZGVsOworZXh0ZXJuIGludCAgICBrcmI0X2NoZWNr YWRkcnM7CitleHRlcm4gY2hhciAqIGs0X2tleXRhYjsgICAgICAgICAgICAgICAgLyogS2V5dGFi IGZpbGUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZuZGVmIE5PU0hPVworaW50 CitzaG9faWtzKCkgeworI2lmZGVmIElLU0RDT05GCisjaWZkZWYgQ0tfTE9HSU4KKyAgICBleHRl cm4gaW50IGNreHN5c2xvZywgY2t4d3RtcCwgY2t4YW5vbjsKKyNpZmRlZiBVTklYCisgICAgZXh0 ZXJuIGludCBja3hwcml2OworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBDS19QRVJNUworICAg IGV4dGVybiBpbnQgY2t4cGVybXM7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyAgICBleHRlcm4g Y2hhciAqIGFub25maWxlLCAqIHVzZXJmaWxlLCAqIGFub25yb290OworI2lmZGVmIE9TMgorICAg IGV4dGVybiBjaGFyICogYW5vbmFjY3Q7CisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgTlQKKyAg ICBleHRlcm4gY2hhciAqIGlrc19kb21haW47CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBD S19MT0dJTiAqLworI2lmZGVmIENLV1RNUAorICAgIGV4dGVybiBjaGFyICogd3RtcGZpbGU7Cisj ZW5kaWYgLyogQ0tXVE1QICovCisjaWZkZWYgSUtTREIKKyAgICBleHRlcm4gY2hhciAqIGRiZmls ZTsKKyAgICBleHRlcm4gaW50IGRiZW5hYmxlZDsKKyNlbmRpZiAvKiBJS1NEQiAqLworI2lmZGVm IENLX0xPR0lOCisgICAgZXh0ZXJuIGludCBsb2dpbnRpbW87CisjZW5kaWYgLyogQ0tfTE9HSU4g Ki8KKyAgICBleHRlcm4gaW50IHNydmNkbXNnLCBzdWNjZXNzLCBpa3NkY2YsIG5vaW5pdCwgYXJn X3g7CisgICAgZXh0ZXJuIGNoYXIgKiBjZG1zZ2ZpbGVbXSwgKiBjZG1zZ3N0ciwgKmtlcm1yYzsK KyAgICBjaGFyICogYmFubmVyZmlsZSA9IE5VTEw7CisgICAgY2hhciAqIGhlbHBmaWxlID0gTlVM TDsKKyAgICBleHRlcm4gaW50IHhmZXJsb2c7CisgICAgZXh0ZXJuIGNoYXIgKiB4ZmVyZmlsZTsK KyAgICBpbnQgaTsKKworICAgIGlmIChpc2d1ZXN0KSB7CisgICAgICAgIHByaW50ZigiP0NvbW1h bmQgZGlzYWJsZWRcclxuIik7CisgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgfQor CisgICAgcHJpbnRmKCJJS1MgU2V0dGluZ3NcclxuIik7CisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRl ZiBPUzIKKyAgICBwcmludGYoIiAgQW5vbnltb3VzIEFjY291bnQ6ICAgJXNcclxuIixhbm9uYWNj dD9hbm9uYWNjdDoiPG5vbmU+Iik7CisjZW5kaWYgLyogT1MyICovCisgICAgcHJpbnRmKCIgIEFu b255bW91cyBJbml0ZmlsZTogICVzXHJcbiIsYW5vbmZpbGU/YW5vbmZpbGU6Ijxub25lPiIpOwor ICAgIHByaW50ZigiICBBbm9ueW1vdXMgTG9naW46ICAgICAlZFxyXG4iLGNreGFub24pOworICAg IHByaW50ZigiICBBbm9ueW1vdXMgUm9vdDogICAgICAlc1xyXG4iLGFub25yb290P2Fub25yb290 OiI8bm9uZT4iKTsKKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIHByaW50ZigiICBCYW5uZXJm aWxlOiAgICAgICAgICAlc1xyXG4iLGJhbm5lcmZpbGU/YmFubmVyZmlsZToiPG5vbmU+Iik7Cisg ICAgcHJpbnRmKCIgIENEZmlsZTogICAgICAgICAgICAgICVzXHJcbiIsY2Rtc2dmaWxlWzBdP2Nk bXNnZmlsZVswXToiPG5vbmU+Iik7CisgICAgZm9yICggaT0xO2k8MTYgJiYgY2Rtc2dmaWxlW2ld O2krKyApCisgICAgICAgIHByaW50ZigiICBDRGZpbGU6ICAgICAgICAgICAgICAlc1xyXG4iLGNk bXNnZmlsZVtpXSk7CisgICAgcHJpbnRmKCIgIENETWVzc2FnZTogICAgICAgICAgICVkXHJcbiIs c3J2Y2Rtc2cpOworI2lmZGVmIElLU0RCCisgICAgcHJpbnRmKCIgIERCZmlsZTogICAgICAgICAg ICAgICVzXHJcbiIsZGJmaWxlP2RiZmlsZToiPG5vbmU+Iik7CisgICAgcHJpbnRmKCIgIERCZW5h YmxlZDogICAgICAgICAgICVkXHJcbiIsZGJlbmFibGVkKTsKKyNlbmRpZiAvKiBJS1NEQiAqLwor I2lmZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyAgICBwcmludGYoIiAgRGVmYXVsdC1kb21haW46 ICAgICAgJXNcclxuIixpa3NfZG9tYWluP2lrc19kb21haW46Ii4iKTsKKyNlbmRpZiAvKiBOVCAq LworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgcHJpbnRmKCIgIEhlbHBmaWxlOiAgICAgICAg ICAgICVzXHJcbiIsaGVscGZpbGU/aGVscGZpbGU6Ijxub25lPiIpOworICAgIHByaW50ZigiICBJ bml0ZmlsZTogICAgICAgICAgICAlc1xyXG4iLGtlcm1yYz9rZXJtcmM6Ijxub25lPiIpOworICAg IHByaW50ZigiICBOby1Jbml0ZmlsZTogICAgICAgICAlZFxyXG4iLG5vaW5pdCk7CisjaWZkZWYg Q0tfTE9HSU4KKyNpZmRlZiBDS19QRVJNCisgICAgcHJpbnRmKCIgIFBlcm1pc3Npb24gY29kZTog ICAgICUwZFxyXG4iLGNreHBlcm1zKTsKKyNlbmRpZiAvKiBDS19QRVJNICovCisjaWZkZWYgVU5J WAorICAgIHByaW50ZigiICBQcml2aWxlZ2VkIExvZ2luOiAgICAlZFxyXG4iLGNreHByaXYpOwor I2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgIHByaW50ZigiICBT ZXJ2ZXItb25seTogICAgICAgICAlZFxyXG4iLGFyZ194KTsKKyAgICBwcmludGYoIiAgU3lzbG9n OiAgICAgICAgICAgICAgJWRcclxuIixja3hzeXNsb2cpOworICAgIHByaW50ZigiICBUaW1lb3V0 IChzZWNvbmRzKTogICAlZFxyXG4iLGxvZ2ludGltbyk7CisgICAgcHJpbnRmKCIgIFVzZXJmaWxl OiAgICAgICAgICAgICVzXHJcbiIsdXNlcmZpbGU/dXNlcmZpbGU6Ijxub25lPiIpOworI2lmZGVm IENLX0xPR0lOCisjaWZkZWYgQ0tXVE1QCisgICAgcHJpbnRmKCIgIFd0bXBsb2c6ICAgICAgICAg ICAgICVkXHJcbiIsY2t4d3RtcCk7CisgICAgcHJpbnRmKCIgIFd0bXBmaWxlOiAgICAgICAgICAg ICVzXHJcbiIsd3RtcGZpbGU/d3RtcGZpbGU6Ijxub25lPiIpOworI2VuZGlmIC8qIENLV1RNUCAq LworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgcHJpbnRmKCIgIFhmZXJmaWxlOiAgICAgICAg ICAgICVzXHJcbiIseGZlcmZpbGU/eGZlcmZpbGU6Ijxub25lPiIpOworICAgIHByaW50ZigiICBY ZmVybG9nOiAgICAgICAgICAgICAlZFxyXG4iLHhmZXJsb2cpOworI2Vsc2UgLyogSUtTRENPTkYg Ki8KKyAgICBwcmludGYoIj9Ob3RoaW5nIHRvIHNob3cuXHJcbiIpOworI2VuZGlmIC8qIElLU0RD T05GICovCisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKworI2lmZGVmIENLX0FVVEhFTlRJ Q0FUSU9OCitpbnQKK3Nob19hdXRoKGN4KSBpbnQgY3g7IHsKKyAgICBleHRlcm4gaW50IGF1dGhf dHlwZV91c2VyW10sIGNtZF9yb3dzOworICAgIGludCBpOworICAgIGNoYXIgKiBwOworICAgIGlu dCBrdiA9IDAsIGFsbCA9IDAsIG4gPSAwOworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZl ciAmJiBpc2d1ZXN0KSB7CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCBjb21tYW5kIGRpc2FibGVk LlxyXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisjZW5kaWYgLyog SUtTRCAqLworICAgIGlmIChjeCkgeworICAgICAgICBrdiA9IGN4OworICAgIH0gZWxzZSBpZiAo YXV0aF90eXBlX3VzZXJbMF0gIT0gQVVUSFRZUEVfQVVUTykgeworICAgICAgICBrdiA9IGF1dGhf dHlwZV91c2VyWzBdOworICAgIH0gZWxzZSB7CisgICAgICAgIGFsbCA9IDE7CisgICAgICAgIGt2 ID0gQVVUSFRZUEVfS0VSQkVST1NfVjQ7CisgICAgfQorICAgIHdoaWxlIChrdikgeworICAgICAg ICBzd2l0Y2ggKGt2KSB7CisgICAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJCRVJPU19WNDoKKyAg ICAgICAgICAgIGt2ID0gYWxsID8gQVVUSFRZUEVfS0VSQkVST1NfVjUgOiAwOworICAgICAgICAg ICAgaWYgKGNrX2tyYjRfaXNfaW5zdGFsbGVkKCkpIHsKKyAgICAgICAgICAgICAgICBwcmludGYo IiBBdXRoZW50aWNhdGlvbjogICAgICBLZXJiZXJvcyA0XG4iKTsKKyAgICAgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiBBdXRo ZW50aWNhdGlvbjogICAgICBLZXJiZXJvcyA0IChub3QgaW5zdGFsbGVkKVxuIik7CisgICAgICAg ICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K KyNpZmRlZiBDS19LRVJCRVJPUworICAgICAgICAgICAgcHJpbnRmKCIgS2V5dGFiIGZpbGU6ICAg ICAgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgazRfa2V5dGFiID8gazRfa2V5dGFi IDogIihub25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIGlmIChrcmJfYWN0 aW9uIDwgMCkgeworICAgICAgICAgICAgICAgIHAgPSAiKG5vbmUpIjsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChwID0gIiIsIGkgPSAwOyBpIDwga3JiX2Ffbjsg aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChrcmJfYWN0aW9uID09IGtyYl9hX3RibFtp XS5rd3ZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGtyYl9hX3RibFtpXS5rd2Q7 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiIEFj dGlvbjogICAgICAgICAgICAgICVzXG4iLCBwKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAg ICAgICBwcmludGYoIiBEZWZhdWx0IGxpZmV0aW1lICAgICAlZFxuIixrcmI0X2RfbGlmZXRpbWUp OworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIExpZmV0aW1lOiAgICAg ICAgICAgICVkIChtaW51dGVzKVxuIixrcmI0X2luaXQubGlmZXRpbWUpOworICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgcHJlYXV0aDogICAgICVkXG4iLGty YjRfZF9wcmVhdXRoKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBQ cmVhdXRoOiAgICAgICAgICAgICAlZFxuIixrcmI0X2luaXQucHJlYXV0aCk7CisgICAgICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBwcmluY2lwYWw6ICAgXCIlc1wi XG4iLAorICAgICAgICAgICAgICAgICAgICBrcmI0X2RfcHJpbmNpcGFsID8ga3JiNF9kX3ByaW5j aXBhbCA6ICIiKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNr bW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBQcmlu Y2lwYWw6ICAgICAgICAgICBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgIGtyYjRfaW5p dC5wcmluY2lwYWwgPyBrcmI0X2luaXQucHJpbmNpcGFsIDogIiIpOworICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKKyAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgcmVhbG06ICAgICAgIFwiJXNcIlxuIiwK KyAgICAgICAgICAgICAgICAgICAga3JiNF9kX3JlYWxtID8ga3JiNF9kX3JlYWxtIDogIiIpOwor ICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVy bigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFJlYWxtOiAgICAgICAgICAg ICAgIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAga3JiNF9pbml0LnJlYWxtID8ga3Ji NF9pbml0LnJlYWxtIDogIiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50 ZigiIERlZmF1bHQgaW5zdGFuY2U6ICAgIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAg a3JiNF9kX2luc3RhbmNlID8ga3JiNF9kX2luc3RhbmNlIDogIiIpOworICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKKyAgICAgICAgICAgIHByaW50ZigiIEluc3RhbmNlOiAgICAgICAgICAgIFwiJXNcIlxuIiwK KyAgICAgICAgICAgICAgICAgICAga3JiNF9pbml0Lmluc3RhbmNlID8ga3JiNF9pbml0Lmluc3Rh bmNlIDogIiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIEF1dG8t R2V0IFRHVHM6ICAgICAgICVkXG4iLGtyYjRfYXV0b2dldCk7CisgICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwor ICAgICAgICAgICAgcHJpbnRmKCIgQXV0by1EZXN0cm95IFRHVHM6ICAgJXNcbiIsCisgICAgICAg ICAgICAgICAgICAgIGtyYjRfYXV0b2RlbD09S1JCX0RFTF9OTz8ibmV2ZXIiOgorICAgICAgICAg ICAgICAgICAgICBrcmI0X2F1dG9kZWw9PUtSQl9ERUxfQ0w/Im9uLWNsb3NlIjoib24tZXhpdCIp OworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIENoZWNrIElQIEFkZHJl c3NlczogICVkXG4iLGtyYjRfY2hlY2thZGRycyk7CisgICAgICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgICAgIHByaW50ZigiIFBhc3N3b3JkOiAgICBcIiVzXCJcbiIsCisg ICAgICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5wYXNzd29yZCAgPyBrcmI0X2luaXQucGFzc3dv cmQgIDogIiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5k aWYgLyogQ0tfS0VSQkVST1MgKi8KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBVVRIVFlQRV9LRVJC RVJPU19WNToKKyAgICAgICAgICAgIGt2ID0gYWxsID8gQVVUSFRZUEVfU1NMIDogMDsKKyAgICAg ICAgICAgIGlmIChja19rcmI1X2lzX2luc3RhbGxlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYg KGNrX2dzc2FwaV9pc19pbnN0YWxsZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIg QXV0aGVudGljYXRpb246ICAgICAgS2VyYmVyb3MgNSBwbHVzIEdTU0FQSVxuIik7CisgICAgICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBBdXRoZW50aWNhdGlv bjogICAgICBLZXJiZXJvcyA1XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiBBdXRoZW50aWNhdGlvbjogICAg ICBLZXJiZXJvcyA1IChub3QgaW5zdGFsbGVkKVxuIik7CisgICAgICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworI2lmZGVmIENLX0tF UkJFUk9TCisgICAgICAgICAgICBwcmludGYoIiBDYWNoZSBmaWxlOiAgICAgICAgICAlc1xuIiwK KyAgICAgICAgICAgICAgICAgICAga3JiX29wLmNhY2hlID8ga3JiX29wLmNhY2hlIDogIihub25l KSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkp IHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgY2Fj aGU6ICAgICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBrcmI1X2RfY2MgPyBrcmI1X2Rf Y2MgOiAiKG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIg S2V5dGFiIGZpbGU6ICAgICAgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgazVfa2V5 dGFiID8gazVfa2V5dGFiIDogIihub25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAg ICAgIGlmIChrcmJfYWN0aW9uIDwgMCkgeworICAgICAgICAgICAgICAgIHAgPSAiKG5vbmUpIjsK KyAgICAgICAgICAgIH0gZWxzZSAgeworICAgICAgICAgICAgICAgIGZvciAocCA9ICIiLCBpID0g MDsgaSA8IGtyYl9hX247IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoa3JiX2FjdGlv biA9PSBrcmJfYV90YmxbaV0ua3d2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBr cmJfYV90YmxbaV0ua3dkOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBwcmludGYoIiBBY3Rpb246ICAgICAgICAgICAgICAlc1xuIiwgcCk7CisgICAgICAgICAg ICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNl IG4gPSAwOworCisgICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IGZvcndhcmRhYmxlICAlZFxu IixrcmI1X2RfZm9yd2FyZGFibGUpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHBy aW50ZigiIEZvcndhcmRhYmxlOiAgICAgICAgICVkXG4iLGtyYjVfaW5pdC5mb3J3YXJkYWJsZSk7 CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0 dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBsaWZldGlt ZSAgICAgJWRcbiIsa3JiNV9kX2xpZmV0aW1lKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRf cm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAg ICAgICBwcmludGYoIiBMaWZldGltZTogICAgICAgICAgICAlZCAobWludXRlcylcbiIsa3JiNV9p bml0LmxpZmV0aW1lKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBQ b3N0ZGF0ZTogICAgICAgICAgICBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgIGtyYjVf aW5pdC5wb3N0ZGF0ZSA/IGtyYjVfaW5pdC5wb3N0ZGF0ZTogIiIpOworICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKKyAgICAgICAgICAgIHByaW50ZigiIERlZmF1bHQgcHJveGlhYmxlOiAgICVkXG4iLGtyYjVf ZF9wcm94aWFibGUpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFh c2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFBy b3hpYWJsZTogICAgICAgICAgICVkXG4iLGtyYjVfaW5pdC5wcm94aWFibGUpOworICAgICAgICAg ICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxz ZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFJlbmV3OiAgICAgICAgICAgICAgICVkXG4i LGtyYjVfaW5pdC5yZW5ldyk7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRm KCIgRGVmYXVsdCByZW5ld2FibGU6ICAgJWQgKG1pbnV0ZXMpXG4iLGtyYjVfZF9yZW5ld2FibGUp OworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFJlbmV3YWJsZTogICAg ICAgICAgICVkIChtaW51dGVzKVxuIixrcmI1X2luaXQucmVuZXdhYmxlKTsKKyAgICAgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBTZXJ2aWNlOiAgICAgICAgICAgICBcIiVzXCJc biIsCisgICAgICAgICAgICAgICAgICAgIGtyYjVfaW5pdC5zZXJ2aWNlID8ga3JiNV9pbml0LnNl cnZpY2UgOiAiIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgVmFs aWRhdGU6ICAgICAgICAgICAgJWRcbiIsa3JiNV9pbml0LnZhbGlkYXRlKTsKKyAgICAgICAgICAg IGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2Ug biA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBEZWZhdWx0IHByaW5jaXBhbDogICBcIiVzXCJc biIsCisgICAgICAgICAgICAgICAgICAgIGtyYjVfZF9wcmluY2lwYWwgPyBrcmI1X2RfcHJpbmNp cGFsIDogIiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFByaW5j aXBhbDogICAgICAgICAgIFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAga3JiNV9pbml0 LnByaW5jaXBhbCA/IGtyYjVfaW5pdC5wcmluY2lwYWwgOiAiIik7CisgICAgICAgICAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OworICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCBpbnN0YW5jZTogICAgXCIlc1wiXG4iLAor ICAgICAgICAgICAgICAgICAgICBrcmI1X2RfaW5zdGFuY2UgPyBrcmI1X2RfaW5zdGFuY2UgOiAi Iik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkg cmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRGVmYXVsdCByZWFs bTogICAgICAgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICBrcmI1X2RfcmVhbG0gPyBr cmI1X2RfcmVhbG0gOiAiIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBp ZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRm KCIgUmVhbG06ICAgICAgICAgICAgICAgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICBr cmI1X2luaXQucmVhbG0gPyBrcmI1X2luaXQucmVhbG0gOiAiIik7CisgICAgICAgICAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OworICAgICAgICAgICAgcHJpbnRmKCIgQXV0by1HZXQgVEdUczogICAgICAgJWRcbiIsa3JiNV9h dXRvZ2V0KTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBBdXRvLURl c3Ryb3kgVEdUczogICAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAga3JiNV9hdXRvZGVsPT1L UkJfREVMX05PPyJuZXZlciI6CisgICAgICAgICAgICAgICAgICAgIGtyYjVfYXV0b2RlbD09S1JC X0RFTF9DTD8ib24tY2xvc2UiOiJvbi1leGl0Iik7CisgICAgICAgICAgICBpZiAoKytuID4gY21k X3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAg ICAgICAgcHJpbnRmKCIgRGVmYXVsdCBnZXQgSzQgVEdUczogJWRcbiIsa3JiNV9kX2dldGs0KTsK KyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1 cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBHZXQgSzQgVEdUczogJWRc biIsa3JiNV9pbml0LmdldGs0KTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMp IGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmlu dGYoIiBDaGVjayBJUCBBZGRyZXNzZXM6ICAlZFxuIixrcmI1X2NoZWNrYWRkcnMpOworICAgICAg ICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsg ZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIE5vIElQIEFkZHJlc3NlczogICVkXG4i LGtyYjVfZF9ub19hZGRyZXNzZXMpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHBy aW50ZigiIElQLUFkZHJlc3NlczogICAgICAgICIpOworICAgICAgICAgICAgaWYgKGtyYjVfaW5p dC5hZGRycyAmJiBrcmI1X2luaXQuYWRkcnNbMF0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkg PSAwOyBrcmI1X2luaXQuYWRkcnNbaV07IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAo aSkKKyAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiwiKTsKKyAgICAgICAgICAgICAgICAg ICAgcHJpbnRmKCIlcyIsa3JiNV9pbml0LmFkZHJzW2ldKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9IGVsc2UgaWYgKGtyYjVfZF9hZGRyc1swXSkgeworICAgICAgICAgICAgICAg IGZvciAoaSA9IDA7aSA8IEtSQjVfTlVNX09GX0FERFJTICYmIGtyYjVfZF9hZGRyc1tpXTtpKysp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgICAgICAgcHJp bnRmKCIsIik7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLGtyYjVfZF9hZGRyc1tp XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBwcmludGYoIih1c2UgZGVmYXVsdCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICgh YXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjaWZkZWYgQ09NTUVOVAorICAgICAg ICAgICAgcHJpbnRmKCIgUGFzc3dvcmQ6ICAgICAgICAgICAgXCIlc1wiXG4iLAorICAgICAgICAg ICAgICAgICAgICBrcmI1X2luaXQucGFzc3dvcmQgID8ga3JiNV9pbml0LnBhc3N3b3JkICA6ICIi KTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIENL X0tFUkJFUk9TICovCisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICBpZiAo KytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAw OworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgY2FzZSBBVVRI VFlQRV9TU0w6CisgICAgICAgICAgICBrdiA9IGFsbCA/IEFVVEhUWVBFX1NSUCA6IDA7CisgICAg ICAgICAgICBpZiAoY2tfc3NsZWF5X2lzX2luc3RhbGxlZCgpKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgU1NML1RMUyAoJXMpXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJT04pKTsKKyAgICAgICAg ICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIiBBdXRoZW50aWNhdGlvbjogICAgICBTU0wvVExTIChub3QgaW5zdGFsbGVkKVxuIik7Cisg ICAgICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiIFJTQSBDZXJ0cyBmaWxlOiAlc1xuIixzc2xfcnNh X2NlcnRfZmlsZT8KKyAgICAgICAgICAgICAgICAgIHNzbF9yc2FfY2VydF9maWxlOiIobm9uZSki KTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSBy ZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBSU0EgQ2VydHMgQ2hh aW4gZmlsZTogJXNcbiIsc3NsX3JzYV9jZXJ0X2NoYWluX2ZpbGU/CisgICAgICAgICAgICAgICAg ICBzc2xfcnNhX2NlcnRfY2hhaW5fZmlsZToiKG5vbmUpIik7CisgICAgICAgICAgICBpZiAoKytu ID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOwor ICAgICAgICAgICAgcHJpbnRmKCIgUlNBIEtleSBmaWxlOiAlc1xuIixzc2xfcnNhX2tleV9maWxl PworICAgICAgICAgICAgICAgICAgc3NsX3JzYV9rZXlfZmlsZToiKG5vbmUpIik7CisgICAgICAg ICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBl bHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIgRFNBIENlcnRzIGZpbGU6ICVzXG4iLHNz bF9kc2FfY2VydF9maWxlPworICAgICAgICAgICAgICAgICAgc3NsX2RzYV9jZXJ0X2ZpbGU6Iihu b25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIERTQSBDZXJ0 cyBDaGFpbiBmaWxlOiAlc1xuIixzc2xfZHNhX2NlcnRfY2hhaW5fZmlsZT8KKyAgICAgICAgICAg ICAgICAgIHNzbF9kc2FfY2VydF9jaGFpbl9maWxlOiIobm9uZSkiKTsKKyAgICAgICAgICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7CisgICAgICAgICAgICBwcmludGYoIiBESCBLZXkgZmlsZTogJXNcbiIsc3NsX2RoX2tleV9m aWxlPworICAgICAgICAgICAgICAgICAgc3NsX2RoX2tleV9maWxlOiIobm9uZSkiKTsKKyAgICAg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBESCBQYXJhbSBmaWxlOiAlc1xuIixz c2xfZGhfcGFyYW1fZmlsZT8KKyAgICAgICAgICAgICAgICAgIHNzbF9kaF9wYXJhbV9maWxlOiIo bm9uZSkiKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBDUkwgZmls ZTogJXNcbiIsc3NsX2NybF9maWxlPworICAgICAgICAgICAgICAgICAgc3NsX2NybF9maWxlOiIo bm9uZSkiKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9y ZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBDUkwgZGly OiAlc1xuIixzc2xfY3JsX2Rpcj8KKyAgICAgICAgICAgICAgICAgICAgc3NsX2NybF9kaXI6Iihu b25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3Jl KCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFJhbmRvbSBm aWxlOiAlc1xuIixzc2xfcm5kX2ZpbGU/CisgICAgICAgICAgICAgICAgICBzc2xfcm5kX2ZpbGU6 Iihub25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2tt b3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50ZigiIFZlcmlm eSBmaWxlOiAlc1xuIixzc2xfdmVyaWZ5X2ZpbGU/CisgICAgICAgICAgICAgICAgICBzc2xfdmVy aWZ5X2ZpbGU6Iihub25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50 ZigiIFZlcmlmeSBkaXI6ICVzXG4iLHNzbF92ZXJpZnlfZGlyPworICAgICAgICAgICAgICAgICAg c3NsX3ZlcmlmeV9kaXI6Iihub25lKSIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dz IC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAg IHByaW50ZigiIENpcGhlciBsaXN0OiAlc1xuIixzc2xfY2lwaGVyX2xpc3QgPyBzc2xfY2lwaGVy X2xpc3QgOiAKKwkJICAgIERFRkFVTFRfQ0lQSEVSX0xJU1QpOworICAgICAgICAgICAgaWYgKCsr biA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsK KyAgICAgICAgICAgIGlmIChzc2xfY29uID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBTU0xf bGlicmFyeV9pbml0KCk7CisgICAgICAgICAgICAgICAgc3NsX2N0eCA9IChTU0xfQ1RYICopCisg ICAgICAgICAgICAgICAgICBTU0xfQ1RYX25ldygoU1NMX01FVEhPRCAqKVRMU3YxX21ldGhvZCgp KTsKKyAgICAgICAgICAgICAgICBpZiAoc3NsX2N0eCAhPSBOVUxMKQorICAgICAgICAgICAgICAg ICAgc3NsX2Nvbj0gKFNTTCAqKSBTU0xfbmV3KHNzbF9jdHgpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKHNzbF9jb24gIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIENIQVIgKiBw ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBpbnQgaTsKKworICAgICAgICAgICAgICAgIGZvciAo aSA9IDA7IDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHAgPSAoQ0hBUiAqKSBTU0xfZ2V0 X2NpcGhlcl9saXN0KHNzbF9jb24saSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwID09IE5V TEwpCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHBy aW50ZigiICAgICVzXG4iLHApOworICAgICAgICAgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhc2ttb3JlKCkpIHJldHVybigw KTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBwcmludGYoIiBDZXJ0cyBPSz8gJXNcbiIsc3NsX2NlcnRzb2tfZmxhZz8gInllcyIgOiAi bm8iKTsKKyAgICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgp KSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICBwcmludGYoIiBEZWJ1ZyBtb2Rl OiAlc1xuIiwgc3NsX2RlYnVnX2ZsYWcgPyAib24iIDogIm9mZiIpOworICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKKyAgICAgICAgICAgIHByaW50ZigiIFZlcmJvc2UgbW9kZTogJXNcbiIsIHNzbF92ZXJib3Nl X2ZsYWcgPyAib24iIDogIm9mZiIpOworICAgICAgICAgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0g MykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHBy aW50ZigiIFZlcmlmeSBtb2RlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgc3NsX3Zlcmlm eV9mbGFnID09IFNTTF9WRVJJRllfTk9ORSA/ICJub25lIiA6CisgICAgICAgICAgICAgICAgICAg IHNzbF92ZXJpZnlfZmxhZyA9PSBTU0xfVkVSSUZZX1BFRVIgPyAicGVlci1jZXJ0IiA6CisgICAg ICAgICAgICAgICAgICAgICJmYWlsLWlmLW5vLXBlZXItY2VydCIpOworICAgICAgICAgICAgaWYg KCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0g MDsKKyAgICAgICAgICAgIHByaW50ZigiIFNTTCBvbmx5PyAlc1xuIiwgc3NsX29ubHlfZmxhZyA/ ICJ5ZXMiIDogIm5vIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAo IWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgcHJpbnRmKCIg VExTIG9ubHk/ICVzXG4iLCB0bHNfb25seV9mbGFnID8gInllcyIgOiAibm8iKTsKKyAgICAgICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisjZW5kaWYgLyogQ0tfU1NMICovCisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBjYXNlIEFVVEhUWVBFX05UTE06CisgICAgICAgICAgICBrdiA9IDA7CisgICAgICAgICAg ICBpZiAoY2tfbnRsbV9pc19pbnN0YWxsZWQoKSkgeworICAgICAgICAgICAgICAgIHByaW50Zigi IEF1dGhlbnRpY2F0aW9uOiAgICAgIE5UTE1cbiIpOworICAgICAgICAgICAgICAgIGlmICgrK24g PiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7Cisg ICAgICAgICAgICAgICAgcHJpbnRmKCIgTm8gb3B0aW9uc1xuIik7CisgICAgICAgICAgICAgICAg aWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBu ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgQXV0 aGVudGljYXRpb246ICAgICAgTlRMTSAobm90IGluc3RhbGxlZClcbiIpOworICAgICAgICAgICAg ICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVs c2UgbiA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAz KSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSBBVVRIVFlQRV9TUlA6CisgICAgICAgICAgICBrdiA9IGFsbCA/ IEFVVEhUWVBFX05UTE0gOiAwOworICAgICAgICAgICAgaWYgKGNrX3NycF9pc19pbnN0YWxsZWQo KSkgeworICAgICAgICAgICAgICAgIGlmIChja19rcnlwdG9faXNfaW5zdGFsbGVkKCkpCisgICAg ICAgICAgICAgICAgICAgIHByaW50ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIFNSUCBwbHVzIEty eXB0byBBUElcbiIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg cHJpbnRmKCIgQXV0aGVudGljYXRpb246ICAgICAgU1JQXG4iKTsKKyAgICAgICAgICAgICAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworICAgICAgICAgICAgICAgIHByaW50ZigiIE5vIG9wdGlvbnNcbiIpOworICAgICAgICAg ICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7 IGVsc2UgbiA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50 ZigiIEF1dGhlbnRpY2F0aW9uOiAgICAgIFNSUCAobm90IGluc3RhbGxlZClcbiIpOworICAgICAg ICAgICAgICAgIGlmICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4o MCk7IGVsc2UgbiA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICBpZiAoKytuID4gY21kX3Jv d3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30K KyNlbmRpZiAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2VuZGlmIC8qIE5PU0hPVyAqLworCisj aWZkZWYgQ0tfS0VSQkVST1MKKworLyogIEMgUCBfIEEgVSBUIEggIC0tICBBVVRIRU5USUNBVEUg Y29tbWFuZCBwYXJzaW5nICAqLworCitpbnQKK2NwX2F1dGgoKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBDb21tYW5kX1BhcnNlIEFVVEhFTlRJQ0FURSAqLworICAgIGludCBjLCBp LCBuOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlcnMgKi8KKyAgICBpbnQgcmMgPSAw OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSAqLworICAgIGludCBnZXR2 YWw7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNpbmcgaGVscGVycyAqLworICAgIGlu dCB0bXBhdXRoID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFRlbXBvcmFyeSBhdXRoZW50aWNh dGlvbiB0eXBlICovCisgICAgaW50IGt2ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyog VGVtcG9yYXJ5IEtlcmJlcm9zIHZlcnNpb24gKi8KKyAgICBpbnQgdG1wX2FjdGlvbiA9IC0xOyAg ICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgS2VyYmVyb3MgYWN0aW9uICovCisgICAgaW50IHRt cF9rbGMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5IGxpc3QtY3JlZGVudGlh bHMgKi8KKyAgICBjaGFyIHRtcGhscFsyNTZdOyAgICAgICAgICAgICAgICAgICAvKiBGb3IgYnVp bGRpbmcgaGVscCBtZXNzYWdlICovCisgICAgY2hhciAqIHA7CisgICAgY2hhciAqIHRtcHBzd2Qg ID0gTlVMTDsgICAgICAgICAgICAgLyogUGFzc3dvcmQgKi8KKyAgICBjaGFyICogdG1wcHJpbnog PSBOVUxMOyAgICAgICAgICAgICAvKiBQcmluY2lwYWwgKi8KKyAgICBjaGFyICogdG1wcmVhbG0g PSBOVUxMOyAgICAgICAgICAgICAvKiBSZWFsbSAqLworICAgIGNoYXIgKiB0bXBjYWNoZSA9IE5V TEw7ICAgICAgICAgICAgIC8qIENhY2hlIGZpbGUgKi8KKyAgICBjaGFyICogdG1waW5zdCAgPSBO VUxMOyAgICAgICAgICAgICAvKiBLNCBJbnN0YW5jZSAqLworICAgIGNoYXIgKiB0bXBhZGRyc1tL UkI1X05VTV9PRl9BRERSU107CisjaWZkZWYgQ0tfUkVDQUxMCisgICAgZXh0ZXJuIGludCBvbl9y ZWNhbGw7ICAgICAgICAgICAgICAgLyogYXJvdW5kIFBhc3N3b3JkIHByb21wdGluZyAqLworI2Vu ZGlmIC8qIENLX1JFQ0FMTCAqLworICAgIHN0cnVjdCBzdHJpbmdpbnQgcHZbS1JCX0lfTUFYKzFd OyAgIC8qIFRlbXBvcmFyeSBhcnJheSBmb3Igc3dpdGNoIHZhbHVlcyAqLworICAgIHN0cnVjdCBG REIga3csIHN3LCBmbDsgICAgICAgICAgICAgIC8qIEZEQnMgZm9yIGVhY2ggcGFyc2UgZnVuY3Rp b24gKi8KKworICAgIGtyYl9hY3Rpb24gPSAtMTsgICAgICAgICAgICAgICAgICAgIC8qIEluaXRp YWxpemUgS2VyYmVyb3MgYWN0aW9uLiAqLworICAgIHRtcF9hY3Rpb24gPSAtMTsgICAgICAgICAg ICAgICAgICAgIC8qIEFuZCBvdXIgbG9jYWwgY29weS4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwg S1JCNV9OVU1fT0ZfQUREUlM7IGkrKykKKyAgICAgIHRtcGFkZHJzW2ldID0gTlVMTDsKKworICAg IGlmICgoeSA9IGNta2V5KGtlcmJ0YWIsa2VyYnRhYm4sImF1dGhlbnRpY2F0aW9uIHR5cGUiLCIi LHh4c3RyaW5nKSkgPCAwKQorICAgICAgeworICAgICAgICAgIGlmICh5ID09IC0zKQorICAgICAg ICAgICAgcHJpbnRmKCI/QXV0aGVudGljYXRpb24gdHlwZSBub3Qgc3BlY2lmaWVkIC0gbm90aGlu ZyBoYXBwZW5zXG4iKTsKKyAgICAgICAgICByZXR1cm4oeSk7CisgICAgICB9CisgICAgdG1wYXV0 aCA9IHk7CisgICAgZGVidWcoRjEwMSwia2VyYmVyb3MgYXV0aGVudGljYXRpb24iLCIiLHRtcGF1 dGgpOworICAgIHN3aXRjaCAodG1wYXV0aCkgeworICAgICAgY2FzZSBBVVRIX0tSQjQ6IGt2ID0g NDsgYnJlYWs7ICAgIC8qIERvbid0IGFzc3VtZSB2YWx1ZXMgYXJlIHRoZSBzYW1lICovCisgICAg ICBjYXNlIEFVVEhfS1JCNToga3YgPSA1OyBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg IHByaW50ZigiP0F1dGhlbnRpY2F0aW9uIHR5cGUgbm90IHN1cHBvcnRlZDogXCIlc1wiXG4iLGF0 bWJ1Zik7CisgICAgICAgIHJldHVybigtOSk7CisgICAgfQorCisgICAgLyogRnJvbSBoZXJlIGRv d24gaXMgS2VyYmVyb3MgKi8KKyAgICBpbmlfa2VyYigpOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBSZXNldCBJbml0IGRhdGEgdG8gZGVmYXVsdHMgKi8KKworICAgIGlmIChrdiA9PSA0KSB7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBLNCBkZWZhdWx0cyAqLworICAgICAgICBpZiAo a3JiNF9kX3JlYWxtKQorICAgICAgICAgIG1ha2VzdHIoJnRtcHJlYWxtLGtyYjRfZF9yZWFsbSk7 CisgICAgICAgIGlmIChrcmI0X2RfcHJpbmNpcGFsKQorICAgICAgICAgIG1ha2VzdHIoJnRtcHBy aW56LGtyYjRfZF9wcmluY2lwYWwpOworICAgICAgICBpZiAoa3JiNF9kX2luc3RhbmNlKQorICAg ICAgICAgIG1ha2VzdHIoJnRtcGluc3Qsa3JiNF9kX2luc3RhbmNlKTsKKyAgICB9IGVsc2UgaWYg KGt2ID09IDUpIHsgICAgICAgICAgICAgICAvKiBTZXQgSzUgZGVmYXVsdHMgKi8KKyAgICAgICAg aWYgKGtyYjVfZF9jYykKKyAgICAgICAgICBtYWtlc3RyKCZ0bXBjYWNoZSxrcmI1X2RfY2MpOwor ICAgICAgICBpZiAoa3JiNV9kX3JlYWxtKQorICAgICAgICAgIG1ha2VzdHIoJnRtcHJlYWxtLGty YjVfZF9yZWFsbSk7CisgICAgICAgIGlmIChrcmI1X2RfcHJpbmNpcGFsKQorICAgICAgICAgIG1h a2VzdHIoJnRtcHByaW56LGtyYjVfZF9wcmluY2lwYWwpOworICAgICAgICBpZiAoa3JiNV9kX2lu c3RhbmNlKQorICAgICAgICAgIG1ha2VzdHIoJnRtcGluc3Qsa3JiNV9kX2luc3RhbmNlKTsKKyAg ICB9CisgICAgZm9yIChpID0gMDsgaSA8PSBLUkJfSV9NQVg7IGkrKykgeyAgLyogSW5pdGlhbGl6 ZSBzd2l0Y2ggdmFsdWVzICovCisgICAgICAgIHB2W2ldLnN2YWwgPSBOVUxMOyAgICAgICAgICAg ICAgLyogdG8gbnVsbCBwb2ludGVycyAqLworICAgICAgICBwdltpXS5pdmFsID0gMDsgICAgICAg ICAgICAgICAgIC8qIGFuZCAwIGludCB2YWx1ZXMgKi8KKyAgICAgICAgcHZbaV0ud3ZhbCA9IChD S19PRkZfVCktMTsJLyogYW5kIC0xIHdpZGUgdmFsdWVzICovCisgICAgfQorICAgIGlmIChrdiA9 PSA0KSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDQgKi8KKyAgICAgICAgcHZb S1JCX0lfTEZdLml2YWwgPSBrcmI0X2RfbGlmZXRpbWU7CisgICAgICAgIHB2W0tSQl9JX1BBXS5p dmFsID0ga3JiNF9kX3ByZWF1dGg7CisKKyAgICAgICAgaWYgKChuID0gY21rZXkoa3JiX2FfdGJs LGtyYl9hX24sIktlcmJlcm9zIDQgYWN0aW9uIiwiIix4eHN0cmluZykpIDwgMCkKKyAgICAgICAg ICB7CisgICAgICAgICAgICAgIGlmIChuID09IC0zKQorICAgICAgICAgICAgICAgIHByaW50Zigi P0FjdGlvbiBub3Qgc3BlY2lmaWVkIC0gbm90aGluZyBoYXBwZW5zLlxuIik7CisgICAgICAgICAg ICAgIHJldHVybihuKTsKKyAgICAgICAgICB9CisgICAgfSBlbHNlIGlmIChrdiA9PSA1KSB7ICAg ICAgICAgICAgICAgLyogS2VyYmVyb3MgNSAqLworICAgICAgICBwdltLUkJfSV9GV10uaXZhbCA9 IGtyYjVfZF9mb3J3YXJkYWJsZTsKKyAgICAgICAgcHZbS1JCX0lfUFJdLml2YWwgPSBrcmI1X2Rf cHJveGlhYmxlOworICAgICAgICBwdltLUkJfSV9MRl0uaXZhbCA9IGtyYjVfZF9saWZldGltZTsK KyAgICAgICAgcHZbS1JCX0lfUkJdLml2YWwgPSBrcmI1X2RfcmVuZXdhYmxlOworICAgICAgICBw dltLUkJfSV9LNF0uaXZhbCA9IGtyYjVfZF9nZXRrNDsKKyAgICAgICAgcHZbS1JCX0lfTkFEXS5p dmFsID0ga3JiNV9kX25vX2FkZHJlc3NlczsKKworICAgICAgICAvKiBNYWtlIGhlbHAgbWVzc2Fn ZSB0aGF0IHNob3dzIHN3aXRjaGVzIGFuZCBhY3Rpb24ga2V5d29yZHMgKi8KKyAgICAgICAgY2tz dHJuY3B5KHRtcGhscCwiS2VyYmVyb3MgNSBhY3Rpb24sIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxu ICIsMjU2KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGtyYl9hX247IGkrKykgeworICAgICAg ICAgICAgY2tzdHJuY2F0KHRtcGhscCxrcmJfYV90YmxbaV0ua3dkLHNpemVvZih0bXBobHApKTsK KyAgICAgICAgICAgIGlmIChpID09IGtyYl9hX24gLSAxKQorICAgICAgICAgICAgICBja3N0cm5j YXQodG1waGxwLCJcbm9yIHN3aXRjaCIsc2l6ZW9mKHRtcGhscCkpOworICAgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgICBja3N0cm5jYXQodG1waGxwLCIgICAiLHNpemVvZih0bXBobHApKTsK KyAgICAgICAgfQorICAgICAgICAvKiBTZXQgdXAgZmlyc3Qgc2V0IG9mIGNoYWluZWQgRkRCJ3Mg Ki8KKworICAgICAgICBjbWZkYmkoJnN3LCAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IEZE QiAtIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICAgICAgICAgICAgIF9DTUtFWSwgICAgICAgICAg ICAgICAgICAvKiBmY29kZSAqLworICAgICAgICAgICAgICAgdG1waGxwLCAgICAgICAgICAgICAg ICAgIC8qIGhscG1zZyAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAg IC8qIGRlZmF1bHQgKG5vbmUpICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAg ICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAgICAgICAgICAgICAgIGtyYl9zX24sICAg ICAgICAgICAgICAgICAvKiBTd2l0Y2ggdGFibGUgc2l6ZSAqLworICAgICAgICAgICAgICAgNCwg ICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kg Ki8KKyAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9jZXNzaW5n IGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICBrcmJfc190YmwsICAgICAgICAgICAgICAgLyog U3dpdGNoIHRhYmxlICovCisgICAgICAgICAgICAgICAma3cgICAgICAgICAgICAgICAgICAgICAg LyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworICAgICAgICAgICAgICAgKTsKKyAgICAgICAgY21m ZGJpKCZrdywgICAgICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgRkRCIC0gYWN0aW9uIGtleXdv cmRzICovCisgICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgLyogZmNvZGUg Ki8KKyAgICAgICAgICAgICAgICJLZXJiZXJvcyBhY3Rpb24iLCAgICAgICAvKiBobHBtc2cgKi8K KyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IChub25l KSAqLworICAgICAgICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIHN0 cmluZyBkYXRhICovCisgICAgICAgICAgICAgICBrcmJfYV9uLCAgICAgICAgICAgICAgICAgLyog U3dpdGNoIHRhYmxlIHNpemUgKi8KKyAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBudW0gZGF0YSAoMCA9IE5PVCBzd2l0Y2gpICovCisgICAgICAgICAgICAg ICB4eHN0cmluZywgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworICAg ICAgICAgICAgICAga3JiX2FfdGJsLCAgICAgICAgICAgICAgIC8qIEtleXdvcmQgdGFibGUgKi8K KyAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIG5l eHQgRkRCIChub25lKSAqLworICAgICAgICAgICAgICAgKTsKKworICAgICAgICAvKiBQYXJzZSAq LworCisgICAgICAgIHdoaWxlICgxKSB7ICAgICAgICAgICAgICAgICAgICAgLyogUGFyc2UgMCBv ciBtb3JlIHN3aXRjaGVzICovCisgICAgICAgICAgICByYyA9IGNtZmRiKCZzdyk7ICAgICAgICAg ICAgLyogUGFyc2Ugc29tZXRoaW5nICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJrZXJiZXJv cyBjbWZkYiAxIHJjIiwiIixyYyk7CisgICAgICAgICAgICBpZiAocmMgPCAwKSB7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBFcnJvciAqLworICAgICAgICAgICAgICAgIGlmIChyYyA9PSAtMykK KyAgICAgICAgICAgICAgICAgIHByaW50ZigiP0FjdGlvbiBub3Qgc3BlY2lmaWVkIC0gbm90aGlu ZyBoYXBwZW5zLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuKHJjKTsgICAgICAgICAgICAg Lyogb3IgcmVwYXJzZSBuZWVkZWQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChj bXJlc3VsdC5mZGJhZGRyICE9ICZzdykgLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLwor ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGMgPSBjbWdicmsoKTsgICAgICAgICAg ICAgICAvKiBIYXZlIHN3aXRjaCAtIGdldCBicmVhayBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAg IGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9Jyk7IC8qIE11c3QgcGFyc2UgYW4gYWd1bWVu dD8gKi8KKyAgICAgICAgICAgIGlmIChnZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9B UkcpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFr ZSBhcmd1bWVudHNcbiIpOworICAgICAgICAgICAgICAgIHJldHVybigtOSk7ICAgICAgICAgICAg IC8qIE9LIGJlY2F1c2Ugbm90aGluZyBtYWxsb2MnZCB5ZXQgKi8KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAg ICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7 CisgICAgICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2 YWx1ZSAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwia2VyYmVyb3MgY29tbWFuZCBzd2l0Y2gi LCIiLG4pOworCisgICAgICAgICAgICBzd2l0Y2ggKG4pIHsgICAgICAgICAgICAgICAgLyogSGFu ZGxlIHRoZSBzd2l0Y2ggKi8KKyAgICAgICAgICAgICAgY2FzZSBLUkJfU19DQTogICAgICAgICAg ICAvKiAvQ0FDSEU6PGZpbGVuYW1lPiAqLworICAgICAgICAgICAgICAgIHAgPSBrcmI1X2RfY2Mg PyBrcmI1X2RfY2MgOiAiIjsKKyAgICAgICAgICAgICAgICBpZiAoKHkgPSBjbW9maSgiTmFtZSBv ZiBjYWNoZSBmaWxlIixwLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAg IGlmICh5ID09IC0zKQorICAgICAgICAgICAgICAgICAgICAgIHMgPSBOVUxMOworICAgICAgICAg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHkpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0bXBjYWNoZSxzKTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg ICBwcmludGYoIj9VbmV4cGVjdGVkIHN3aXRjaCB2YWx1ZSAtIGludGVybmFsIGVycm9yXG4iKTsK KyAgICAgICAgICAgICAgICByZXR1cm4oLTkpOyAgICAgICAgICAgICAvKiAoaWYpIG5vdGhpbmcg bWFsbG9jJ2QgeWV0LiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChj bXJlc3VsdC5mZGJhZGRyICE9ICZrdykgeyAgLyogQ2hlY2tpbmcuLi4gKi8KKyAgICAgICAgICAg IHByaW50ZigiP1VuZXhwZWN0ZWQgcmVzdWx0IC0gaW50ZXJuYWwgZXJyb3JcbiIpOworICAgICAg ICAgICAgcmV0dXJuKC05KTsgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgbWFsbG9jJ2QgeWV0 LiAqLworICAgICAgICB9CisgICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAgICAgICAgICAg LyogR2V0IGtleXdvcmQgdmFsdWUgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIj9V bmV4cGVjdGVkIEtlcmJlcm9zIHZlcnNpb24gLSBJbnRlcm5hbCBlcnJvclxuIik7CisgICAgICAg IHJldHVybigtOSk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsImtlcmJlcm9zIGFjdGlvbiIsIiIs bik7CisgICAgc3dpdGNoIChuKSB7CisgICAgICBjYXNlIEtSQl9BX0lOOiAgICAgICAgICAgICAg ICAgICAgLyogSU5JVElBTElaRSAqLworICAgICAgY2FzZSBLUkJfQV9ERTogICAgICAgICAgICAg ICAgICAgIC8qIERFU1RST1kgKi8KKyAgICAgIGNhc2UgS1JCX0FfTEM6ICAgICAgICAgICAgICAg ICAgICAvKiBMSVNULUNSRURFTlRJQUxTICovCisgICAgICAgIHRtcF9hY3Rpb24gPSBuOyAgICAg ICAgICAgICAgICAgLyogT0ssIHNldCAqLworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgT0ssIHB1bnQuICovCisgICAgICAgIHBy aW50ZigiP1VuZXhwZWN0ZWQgYWN0aW9uIC0gaW50ZXJuYWwgZXJyb3JcbiIpOworICAgICAgICBy ZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAodG1wX2FjdGlvbiA9PSBLUkJfQV9JTikgeyAgICAg ICAvKiBBY3Rpb24gaXMgSU5JVElBTElaRSAqLworICAgICAgICBpbnQgeDsKKyAgICAgICAgY21m ZGJpKCZzdywgICAgICAgICAgICAgICAgICAgICAvKiBJTklUSUFMSVpFIHN3aXRjaGVzICovCisg ICAgICAgICAgICAgICBfQ01LRVksICAgICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAg ICAgICAgICAgICJQcmluY2lwYWwsXG4gb3Igb3B0aW9uYWwgSU5JVElBTElaRSBzd2l0Y2goZXMp IiwgLyogaGxwbXNnICovCisgICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAg LyogZGVmYXVsdCAobm9uZSkgKi8KKyAgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgICAg ICAgICAvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworICAgICAgICAgICAgICAga3YgPT0gNCA/ICBr cmI0X2lfbiA6IGtyYjVfaV9uLCAvKiBTd2l0Y2ggdGFibGUgc2l6ZSAqLworICAgICAgICAgICAg ICAgNCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0g Y21zd2kgKi8KKyAgICAgICAgICAgICAgIHh4c3RyaW5nLCAgICAgICAgICAgICAgICAvKiBQcm9j ZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgICAgICAgICBrdiA9PSA0ID8gIGtyYjRfaV90Ymwg OiBrcmI1X2lfdGJsLCAgICAgIC8qIFN3aXRjaCB0YWJsZSAqLworICAgICAgICAgICAgICAgJmZs ICAgICAgICAgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICAg ICAgICAgICk7CisgICAgICAgIGNtZmRiaSgmZmwsICAgICAgICAgICAgICAgICAgICAgLyogM3Jk IEZEQiAtIGNvbW1hbmQgdG8gc2VuZCBmcm9tICovCisgICAgICAgICAgICAgICBfQ01GTEQsICAg ICAgICAgICAgICAgICAgLyogZmNvZGUgKi8KKyAgICAgICAgICAgICAgICJQcmluY2lwYWwiLCAg ICAgICAgICAgICAvKiBobHBtc2cgKi8KKyAgICAgICAgICAgICAgIGt2ID09IDQgPyBrcmI0X2Rf cHJpbmNpcGFsIDoga3JiNV9kX3ByaW5jaXBhbCwgLyogcHJpbmNpcGFsICovCisgICAgICAgICAg ICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAg ICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBhZGR0bCBudW1lcmljIGRh dGEgMSAqLworICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkZHRs IG51bWVyaWMgZGF0YSAyICovCisgICAgICAgICAgICAgICB4eHN0cmluZywKKyAgICAgICAgICAg ICAgIE5VTEwsCisgICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgICApOworICAgICAg ICB3aGlsZSAoMSkgeyAgICAgICAgICAgICAgICAgICAgIC8qIFBhcnNlIElOSVQgc3dpdGNoZXMg b3IgcHJpbmNpcGFsICovCisgICAgICAgICAgICByYyA9IGNtZmRiKCZzdyk7CisgICAgICAgICAg ICBkZWJ1ZyhGMTAxLCJrZXJiZXJvcyBjbWZkYiAyIHJjIiwiIixyYyk7CisgICAgICAgICAgICBp ZiAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHJjID09IC0zKQorICAgICAgICAgICAg ICAgICAgcHJpbnRmKCI/UHJpbmNpcGFsIG5hbWUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAg ICAgIGdvdG8ga2VyYng7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJr ZXJiZXJvcyBjbWZkYiAyIGZjb2RlIiwiIixjbXJlc3VsdC5mY29kZSk7CisgICAgICAgICAgICBp ZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNS0VZKSAvKiBOb3QgYSBzd2l0Y2gsIHF1aXQgc3dpdGNo IGxvb3AgKi8KKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjID0gY21nYnJrKCk7 ICAgICAgICAgICAgICAgLyogU3dpdGNoIC0gZ2V0IGJyZWFrIGNoYXJhY3RlciAqLworICAgICAg ICAgICAgZGVidWcoRjEwMSwia2VyYmVyb3MgY21mZGIgMiBjbWdicmsiLCIiLGMpOworICAgICAg ICAgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsKKyAgICAgICAgICAgIGlmIChn ZXR2YWwgJiYgIShjbXJlc3VsdC5rZmxhZ3MgJiBDTV9BUkcpKSB7CisgICAgICAgICAgICAgICAg cHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcbiIpOworICAgICAg ICAgICAgICAgIHJldHVybigtOSk7ICAgICAgICAgICAgIC8qIE9LIGJlY2F1c2Ugbm90aGluZyBt YWxsb2MnZCB5ZXQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZ2V0dmFsICYm IChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIj9UaGlz IHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu KC05KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OyAg ICAgICAvKiBOdW1lcmljIHJlc3VsdCA9IHN3aXRjaCB2YWx1ZSAqLworICAgICAgICAgICAgc3dp dGNoIChuKSB7CisgICAgICAgICAgICAgIC8qIFRoZXNlIGRvbid0IHRha2UgYXJncy4uLiAqLwor ICAgICAgICAgICAgICBjYXNlIEtSQl9JX1BBOiAgICAgICAgICAgIC8qIC9QUkVBVVRIICovCisg ICAgICAgICAgICAgIGNhc2UgS1JCX0lfRlc6ICAgICAgICAgICAgLyogL0ZPUldBUkRBQkxFICov CisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfUFI6ICAgICAgICAgICAgLyogL1BST1hJQUJMRSAq LworICAgICAgICAgICAgICBjYXNlIEtSQl9JX1JOOiAgICAgICAgICAgIC8qIC9SRU5FVyAqLwor ICAgICAgICAgICAgICBjYXNlIEtSQl9JX1ZBOiAgICAgICAgICAgIC8qIC9WQUxJREFURSAqLwor ICAgICAgICAgICAgICBjYXNlIEtSQl9JX05QQTogICAgICAgICAgIC8qIC9OT1QtUFJFQVVUSCAq LworICAgICAgICAgICAgICBjYXNlIEtSQl9JX05GVzogICAgICAgICAgIC8qIC9OT1QtRk9SV0FS REFCTEUgKi8KKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9OUFI6ICAgICAgICAgICAvKiAvTk9U LVBST1hJQUJMRSAqLworICAgICAgICAgICAgICBjYXNlIEtSQl9JX1ZCOiAgICAgICAgICAgIC8q IC9WRVJCT1NFICovCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfQlI6ICAgICAgICAgICAgLyog L0JSSUVGICovCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfSzQ6ICAgICAgICAgICAgLyogL0tF UkJFUk9TNCAqLworICAgICAgICAgICAgICBjYXNlIEtSQl9JX05LNDogICAgICAgICAgIC8qIC9O Ty1LRVJCRVJPUzQgKi8KKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9QT1A6ICAgICAgICAgICAv KiAvUE9QVVAgKi8KKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9OQUQ6ICAgICAgICAgICAvKiAv Tk8tQUREUkVTU0VTICovCisgICAgICAgICAgICAgICAgaWYgKGdldHZhbCkgeworICAgICAgICAg ICAgICAgICAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGEgdmFsdWVcbiIp OworICAgICAgICAgICAgICAgICAgICByYyA9IC05OworICAgICAgICAgICAgICAgICAgICBnb3Rv IGtlcmJ4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG4pIHsK KyAgICAgICAgICAgICAgICAgIGNhc2UgS1JCX0lfTlBBOgorICAgICAgICAgICAgICAgICAgICBw dltLUkJfSV9QQV0uaXZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgY2FzZSBLUkJfSV9ORlc6CisgICAgICAgICAgICAgICAgICAgIHB2W0tSQl9J X0ZXXS5pdmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg ICAgICBjYXNlIEtSQl9JX05QUjoKKyAgICAgICAgICAgICAgICAgICAgcHZbS1JCX0lfUFJdLml2 YWwgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh c2UgS1JCX0lfVkI6CisgICAgICAgICAgICAgICAgICAgIHB2W0tSQl9JX0JSXS5pdmFsID0gMDsK KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEtSQl9J X05LNDoKKyAgICAgICAgICAgICAgICAgICAgcHZbS1JCX0lfSzRdLml2YWwgPSAwOworICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAgICAgICAgIHB2W25dLml2YWwgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8qIFRoZXNlIGRvIHRha2UgYXJndW1l bnRzICovCisKKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9SQjogICAgICAgICAgICAvKiAvUkVO RVdBQkxFOjxtaW51dGVzPiAqLworICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSAwOworICAg ICAgICAgICAgICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoKHJj ID0gY21udW0oIk1pbnV0ZXMiLGNraXRvYShrcmI1X2luaXQucmVuZXdhYmxlKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTAsJnksIHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAg ICAgICAgICAgZ290byBrZXJieDsKKyAgICAgICAgICAgICAgICBwdltuXS5pdmFsID0geTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEtSQl9JX0xGOiAgICAg ICAgICAgIC8qIC9MSUZFVElNRTo8bWludXRlcz4gKi8KKyAgICAgICAgICAgICAgICBwdltuXS5p dmFsID0gMDsKKyAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IGlzIHByZXZpb3VzIHZhbHVlICov CisgICAgICAgICAgICAgICAgc3ByaW50Zih0bXBidWYsIiVkIiwgICAgLyogU0FGRSAqLworICAg ICAgICAgICAgICAgICAgICAgICAga3YgPT0gNCA/CisgICAgICAgICAgICAgICAgICAgICAgICBr cmI0X2luaXQubGlmZXRpbWUgOgorICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9pbml0Lmxp ZmV0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlmICgh Z2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoKHJjID0gY21udW0oIk1pbnV0ZXMi LHRtcGJ1ZiwxMCwmeSwgeHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICBnb3RvIGtl cmJ4OworICAgICAgICAgICAgICAgIHB2W25dLml2YWwgPSB5OworICAgICAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfUEQ6ICAgICAgICAgICAgLyogL1BPU1RE QVRFOjx0aW1lc3RhbXA+ICovCisgICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwpIHsKKyAg ICAgICAgICAgICAgICAgICAgZnJlZShwdltuXS5zdmFsKTsKKyAgICAgICAgICAgICAgICAgICAg cHZbbl0uc3ZhbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm ICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoKHJjID0gY21kYXRlKCJkYXRl LXRpbWUiLCIiLCZzLDAseHhzdHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICBnb3RvIGtl cmJ4OworICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFsKSxzKTsKKyAgICAgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEtSQl9JX1NSOiAgICAgICAgICAg IC8qIC9TRVJWSUNFOjxuYW1lPiAqLworICAgICAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7 CisgICAgICAgICAgICAgICAgICAgIGZyZWUocHZbbl0uc3ZhbCk7CisgICAgICAgICAgICAgICAg ICAgIHB2W25dLnN2YWwgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKChyYyA9IGNtZmxkKCJT ZXJ2aWNlLW5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgZ290 byBrZXJieDsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9STDogICAgICAg ICAgICAvKiAvUkVBTE06PG5hbWU+ICovCisgICAgICAgICAgICAgICAgaWYgKHB2W25dLnN2YWwp IHsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShwdltuXS5zdmFsKTsKKyAgICAgICAgICAgICAg ICAgICAgcHZbbl0uc3ZhbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGlmICghZ2V0dmFsKSBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoa3YgPT0gNCkKKyAg ICAgICAgICAgICAgICAgIHAgPSBrcmI0X2RfcmVhbG0gPyBrcmI0X2RfcmVhbG0gOiAiIjsKKyAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwID0ga3JiNV9kX3JlYWxtID8g a3JiNV9kX3JlYWxtIDogIiI7CisgICAgICAgICAgICAgICAgaWYgKChyYyA9IGNtZmxkKCJSZWFs bSIscCwmcyx4eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIGdvdG8ga2VyYng7Cisg ICAgICAgICAgICAgICAgbWFrZXN0cigmKHB2W25dLnN2YWwpLHMpOworICAgICAgICAgICAgICAg IGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgS1JCX0lfSU46ICAgICAgICAgICAgLyogL0lO U1RBTkNFOjxuYW1lPiAqLworICAgICAgICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7CisgICAg ICAgICAgICAgICAgICAgIGZyZWUocHZbbl0uc3ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHB2 W25dLnN2YWwgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo IWdldHZhbCkgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGt2ID09IDQpCisgICAgICAgICAg ICAgICAgICAgIHAgPSBrcmI0X2RfaW5zdGFuY2UgPyBrcmI0X2RfaW5zdGFuY2UgOiAiIjsKKyAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHAgPSBrcmI1X2RfaW5zdGFu Y2UgPyBrcmI1X2RfaW5zdGFuY2UgOiAiIjsKKyAgICAgICAgICAgICAgICBpZiAoKHJjID0gY21m bGQoIkluc3RhbmNlIixwLCZzLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgZ290 byBrZXJieDsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCYocHZbbl0uc3ZhbCkscyk7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBLUkJfSV9QVzogICAgICAg ICAgICAvKiAvUEFTU1dPUkQ6PHBhc3N3b3JkPiAqLworICAgICAgICAgICAgICAgIGRlYm9rID0g MDsKKyAgICAgICAgICAgICAgICBpZiAocHZbbl0uc3ZhbCkgeworICAgICAgICAgICAgICAgICAg ICBmcmVlKHB2W25dLnN2YWwpOworICAgICAgICAgICAgICAgICAgICBwdltuXS5zdmFsID0gTlVM TDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFnZXR2YWwpIGJyZWFr OworICAgICAgICAgICAgICAgIGlmICgocmMgPSBjbWZsZCgiUGFzc3dvcmQiLCIiLCZzLHh4c3Ry aW5nKSkgPCAwKQorICAgICAgICAgICAgICAgICAgaWYgKHJjICE9IC0zKQorICAgICAgICAgICAg ICAgICAgICBnb3RvIGtlcmJ4OworICAgICAgICAgICAgICAgIG1ha2VzdHIoJihwdltuXS5zdmFs KSxzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEtSQl9J X0FEUjogICAgICAgICAgIC8qIC9BRERSRVNTRVM6ezxhZGRyZXNzLWxpc3Q+fSAqLworICAgICAg ICAgICAgICAgIGlmIChwdltuXS5zdmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZyZWUocHZb bl0uc3ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHB2W25dLnN2YWwgPSBOVUxMOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisgICAgICAg ICAgICAgICAgaWYgKChyYyA9IGNtZmxkKCJMaXN0IG9mIElQIGFkZHJlc3NlcyIsIiIsJnMseHhz dHJpbmcpKSA8IDApCisgICAgICAgICAgICAgICAgICBnb3RvIGtlcmJ4OworICAgICAgICAgICAg ICAgIG1ha2VsaXN0KHMsdG1wYWRkcnMsS1JCNV9OVU1fT0ZfQUREUlMpOworICAgICAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBLUkI1X05VTV9PRl9BRERSUyAmJiB0bXBhZGRyc1tpXTsgaSsr KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmV0X2FkZHIodG1wYWRkcnNbaV0pID09IDB4 ZmZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiaW52YWxpZCBpcCBh ZGRyZXNzOiAlc1xuIix0bXBhZGRyc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9 IC05OworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdltLUkJfSV9OQURd Lml2YWwgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICAgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBzd2l0Y2ggdmFsdWUgLSBp bnRlcm5hbCBlcnJvclxuIik7CisgICAgICAgICAgICAgICAgcmMgPSAtOTsKKyAgICAgICAgICAg ICAgICBnb3RvIGtlcmJ4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChj bXJlc3VsdC5mY29kZSAhPSBfQ01GTEQpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1VuZXhlY3Rl ZCByZXN1bHQgLSBpbnRlcm5hbCBlcnJvclxuIik7CisgICAgICAgICAgICByYyA9IC05OworICAg ICAgICAgICAgZ290byBrZXJieDsKKyAgICAgICAgfQorICAgICAgICAvKiBjbXJlc3VsdC5zcmVz dWx0IG1heSBiZSBvZiB0aGUgZm9ybSBQUklOQ0lQQUxAUkVBTE0gKi8KKyAgICAgICAgaSA9IGNr aW5kZXgoIkAiLGNtcmVzdWx0LnNyZXN1bHQsMCwwLDApOworICAgICAgICBpZiAoaSAhPSAwKSB7 CisgICAgICAgICAgICBtYWtlc3RyKCZ0bXByZWFsbSwmY21yZXN1bHQuc3Jlc3VsdFtpXSk7Cisg ICAgICAgICAgICBjbXJlc3VsdC5zcmVzdWx0W2ktMV0gPSAnXDAnOworICAgICAgICB9CisgICAg ICAgIG1ha2VzdHIoJnRtcHByaW56LGNtcmVzdWx0LnNyZXN1bHQpOyAvKiBQcmluY2lwYWwgKHVz ZXIpICovCisKKyAgICAgICAgaWYgKChyYyA9IGNtY2ZtKCkpIDwgMCkgeyAgICAgICAvKiBOb3cg Z2V0IGNvbmZpcm1hdGlvbiAqLworICAgICAgICAgICAgaWYgKHJjID09IC0zKSB7CisgICAgICAg ICAgICAgICAgcHJpbnRmKCI/UHJpbmNpcGFsIG5hbWUgcmVxdWlyZWRcbiIpOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgZ290byBrZXJieDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRt cHByaW56IHx8ICF0bXBwcmluelswXSkgeworICAgICAgICAgICAgcHJpbnRmKCI/UHJpbmNpcGFs IG5hbWUgcmVxdWlyZWRcbiIpOworICAgICAgICAgICAgZ290byBrZXJieDsKKyAgICAgICAgfQor ICAgICAgICBpZiAoIXB2W0tSQl9JX1JOXS5pdmFsICYmICFwdltLUkJfSV9WQV0uaXZhbCkgewor ICAgICAgICAgICAgLyogRG9uJ3QgdXNlIGEgcGFzc3dvcmQgaWYgVmFsaWRhdGluZyBvciBSZW5l d2luZyAqLworICAgICAgICAgICAgaWYgKHB2W0tSQl9JX1BXXS5zdmFsKSB7ICAgIC8qIElmIHRo ZXkgZ2F2ZSBhIC9QQVNTV09SRCBzd2l0Y2ggKi8KKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZ0 bXBwc3dkLHB2W0tSQl9JX1BXXS5zdmFsKTsgLyogdXNlIHRoaXMgdmFsdWUgKi8KKyAgICAgICAg ICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICAvKiBQYXNzd29yZCBwcm9tcHRpbmcg aGFzIGJlZW4gbW92ZWQgdG8gY2tfa3JiWzQ1XV9pbml0VEdUKCkgKi8KKyAgICAgICAgICAgIGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgbXVzdCBwcm9tcHQgZm9yIGl0 ICovCisgICAgICAgICAgICAgICAgY2hhciBwcm1wdFs4MF07CisgICAgICAgICAgICAgICAgaWYg KHB2W0tSQl9JX1JMXS5zdmFsKQorICAgICAgICAgICAgICAgICAgc3ByaW50Zihwcm1wdCwiJXNA JXMncyBQYXNzd29yZDogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcHJpbnoscHZb S1JCX0lfUkxdLnN2YWwpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcHJlYWxtKQorICAg ICAgICAgICAgICAgICAgc3ByaW50Zihwcm1wdCwiJXNAJXMncyBQYXNzd29yZDogIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgdG1wcHJpbnosdG1wcmVhbG0pOworICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgIHNwcmludGYocHJtcHQsIiVzJ3MgUGFzc3dvcmQ6ICIs dG1wcHJpbnopOworI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgIGlmIChwdltLUkJfSV9QT1Bd Lml2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBwYXNzd2RbODBdPSIiOworICAgICAg ICAgICAgICAgICAgICByZWFkcGFzcyhwcm1wdCxwYXNzd2QsODApOworICAgICAgICAgICAgICAg ICAgICBtYWtlc3RyKCZ0bXBwc3dkLHBhc3N3ZCk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNl dChwYXNzd2QsMCw4MCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICAgICAgeworI2lmZGVmIENLX1JFQ0FMTAorICAgICAgICAgICAgICAgICAg ICBvbl9yZWNhbGwgPSAwOworI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworICAgICAgICAgICAgICAg ICAgICBjbXNhdnAocHNhdmUsUFJPTVBUTCk7IC8qIFNhdmUgb2xkIHByb21wdCAqLworICAgICAg ICAgICAgICAgICAgICBjbXNldHAocHJtcHQpOyAgICAgIC8qIE1ha2UgbmV3IHByb21wdCAqLwor ICAgICAgICAgICAgICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAvKiBQdXQgY29uc29sZSBp biBjYnJlYWsgbW9kZSAqLworICAgICAgICAgICAgICAgICAgICBjbWluaSgwKTsgICAgICAgICAg IC8qIGFuZCBuby1lY2hvIG1vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogSXNzdWUgcHJv bXB0IGlmIGF0IHRvcCBsZXZlbCAqLworICAgICAgICAgICAgICAgICAgICBpZiAocGZsYWcpIHBy b21wdCh4eHN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgIGNtcmVzKCk7ICAgICAgICAgICAg LyogUmVzZXQgdGhlIHBhcnNlciAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKHJjID0gLTE7 IHJjIDwgMDsgKSB7IC8qIFByb21wdCB0aWxsIHRoZXkgYW5zd2VyICovCisgICAgICAgICAgICAg ICAgICAgICAgICAvKiBHZXQgYSBsaXRlcmFsIGxpbmUgb2YgdGV4dCAqLworICAgICAgICAgICAg ICAgICAgICAgICAgcmMgPSBjbXR4dCgiIiwiIiwmcyxOVUxMKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNtcmVzKCk7ICAgICAgICAvKiBSZXNldCB0aGUgcGFyc2VyIGFnYWluICovCisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmdG1wcHN3ZCxz KTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOyAgICAgICAvKiBFY2hvIGEgQ1JM RiAqLworICAgICAgICAgICAgICAgICAgICBjbXNldHAocHNhdmUpOyAgICAgIC8qIFJlc3RvcmUg b3JpZ2luYWwgcHJvbXB0ICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBwYXNzd29y ZCAqLworICAgICAgICAgICAgaWYgKHRtcHBzd2QpCisgICAgICAgICAgICAgIGlmICgqdG1wcHN3 ZCkKKyAgICAgICAgICAgICAgICB4ID0gMTsKKyAgICAgICAgICAgIGlmICgheCkgeworICAgICAg ICAgICAgICAgIHByaW50ZigiP1Bhc3N3b3JkIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgICAg ICBnb3RvIGtlcmJ4OworICAgICAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAg ICAgfQorICAgIH0gZWxzZSBpZiAoa3YgPT0gNSAmJiB0bXBfYWN0aW9uID09IEtSQl9BX0xDKSB7 IC8qIExJU1QtQ1JFREVOVElBTFMgKi8KKyAgICAgICAgdG1wX2tsYyA9IDA7CisgICAgICAgIHdo aWxlICgxKSB7CisgICAgICAgICAgICBpZiAoKHggPSBjbWtleShrbGN0YWIsbmtsY3RhYiwiU3dp dGNoIiwiIix4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmICgocmMgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAg ICAgICAgICAgICAgZ290byBrZXJieDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIHJjID0geDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBrZXJieDsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0bXBfa2xjIHw9IHg7 CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKChyYyA9IGNtY2ZtKCkpIDwgMCkgICAgICAvKiBE RVNUUk9ZLCBqdXN0IGNvbmZpcm0gKi8KKyAgICAgICAgZ290byBrZXJieDsKKworLyogRG9uZSAt IE1vdmUgY29uZmlybWVkIGRhdGEgdG8gZmluYWwgbG9jYXRpb25zICovCisKKyAgICBrcmJfYWN0 aW9uID0gdG1wX2FjdGlvbjsgICAgICAgICAgICAvKiBBY3Rpb24gcmVxdWVzdGVkICovCisgICAg a3JiX29wLnZlcnNpb24gPSBrdjsgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgdmVyc2lvbiAq LworICAgIGtyYl9vcC5jYWNoZSA9IHRtcGNhY2hlOyAgICAgICAgICAgIC8qIENhY2hlIGZpbGUg Ki8KKyAgICB0bXBjYWNoZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAvKiBTbyB3ZSBkb24n dCBmcmVlIGl0ICovCisKKyAgICBzd2l0Y2ggKGtyYl9hY3Rpb24pIHsKKyAgICAgIGNhc2UgS1JC X0FfSU46ICAgICAgICAgICAgICAgICAgICAvKiBJTklUSUFMSVpFICovCisgICAgICAgIGlmIChr diA9PSA1KSB7CisgICAgICAgICAgICBrcmI1X2luaXQuZm9yd2FyZGFibGUgPSBwdltLUkJfSV9G V10uaXZhbDsKKyAgICAgICAgICAgIGtyYjVfaW5pdC5wcm94aWFibGUgICA9IHB2W0tSQl9JX1BS XS5pdmFsOworICAgICAgICAgICAga3JiNV9pbml0LmxpZmV0aW1lICAgID0gcHZbS1JCX0lfTEZd Lml2YWw7CisgICAgICAgICAgICBrcmI1X2luaXQucmVuZXcgICAgICAgPSBwdltLUkJfSV9STl0u aXZhbDsKKyAgICAgICAgICAgIGtyYjVfaW5pdC5yZW5ld2FibGUgICA9IHB2W0tSQl9JX1JCXS5p dmFsOworICAgICAgICAgICAga3JiNV9pbml0LnZhbGlkYXRlICAgID0gcHZbS1JCX0lfVkFdLml2 YWw7CisKKyAgICAgICAgICAgIC8qIEhlcmUgd2UganVzdCByZWFzc2lnbiB0aGUgcG9pbnRlcnMg YW5kIHRoZW4gc2V0IHRoZW0gdG8gTlVMTCAqLworICAgICAgICAgICAgLyogc28gdGhleSB3b24n dCBiZSBmcmVlZCBiZWxvdy4gKi8KKworICAgICAgICAgICAga3JiNV9pbml0LnBvc3RkYXRlID0g cHZbS1JCX0lfUERdLnN2YWw7IHB2W0tSQl9JX1BEXS5zdmFsID0gTlVMTDsKKyAgICAgICAgICAg IGtyYjVfaW5pdC5zZXJ2aWNlICA9IHB2W0tSQl9JX1NSXS5zdmFsOyBwdltLUkJfSV9TUl0uc3Zh bCA9IE5VTEw7CisgICAgICAgICAgICBpZiAocHZbS1JCX0lfUkxdLnN2YWwpIHsKKyAgICAgICAg ICAgICAgICBrcmI1X2luaXQucmVhbG0gID0gcHZbS1JCX0lfUkxdLnN2YWw7IHB2W0tSQl9JX1JM XS5zdmFsID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodG1wcmVhbG0pIHsKKyAgICAg ICAgICAgICAgICBrcmI1X2luaXQucmVhbG0gPSB0bXByZWFsbTsgdG1wcmVhbG0gPSBOVUxMOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHB2W0tSQl9JX0lOXS5zdmFsKSB7CisgICAg ICAgICAgICAgICAga3JiNV9pbml0Lmluc3RhbmNlID0gcHZbS1JCX0lfSU5dLnN2YWw7CisgICAg ICAgICAgICAgICAgcHZbS1JCX0lfSU5dLnN2YWwgPSBOVUxMOworICAgICAgICAgICAgfSBlbHNl IGlmICggdG1waW5zdCApIHsKKyAgICAgICAgICAgICAgICBrcmI1X2luaXQuaW5zdGFuY2UgPSB0 bXBpbnN0OworICAgICAgICAgICAgICAgIHRtcGluc3QgPSBOVUxMOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKHRtcHByaW56KSB7CisgICAgICAgICAgICAgICAga3JiNV9pbml0LnBy aW5jaXBhbCA9IHRtcHByaW56OworICAgICAgICAgICAgICAgIHRtcHByaW56ID0gTlVMTDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGtyYjVfaW5pdC5wYXNzd29yZCA9IHRtcHBzd2Q7Cisg ICAgICAgICAgICB0bXBwc3dkID0gTlVMTDsKKworICAgICAgICAgICAga3JiNV9pbml0LmdldGs0 ID0gcHZbS1JCX0lfSzRdLml2YWw7CisgICAgICAgICAgICBpZiAoa3JiNV9pbml0LmdldGs0KSB7 CisgICAgICAgICAgICAgICAga3JiNF9pbml0LmxpZmV0aW1lID0gcHZbS1JCX0lfTEZdLml2YWw7 CisgICAgICAgICAgICAgICAgaWYgKGtyYjVfaW5pdC5yZWFsbSkKKyAgICAgICAgICAgICAgICAg ICAgbWFrZXN0cigma3JiNF9pbml0LnJlYWxtLGtyYjVfaW5pdC5yZWFsbSk7CisgICAgICAgICAg ICAgICAga3JiNF9pbml0LnByZWF1dGggID0ga3JiNF9kX3ByZWF1dGg7CisgICAgICAgICAgICAg ICAga3JiNF9pbml0LnZlcmJvc2UgID0gcHZbS1JCX0lfQlJdLml2YWwgPyAwIDogMTsKKyAgICAg ICAgICAgICAgICBpZiAoa3JiNV9pbml0LnByaW5jaXBhbCkKKyAgICAgICAgICAgICAgICAgICAg bWFrZXN0cigma3JiNF9pbml0LnByaW5jaXBhbCxrcmI1X2luaXQucHJpbmNpcGFsKTsKKyAgICAg ICAgICAgICAgICBpZiAoa3JiNV9pbml0LnByaW5jaXBhbCkKKyAgICAgICAgICAgICAgICAgICAg bWFrZXN0cigma3JiNF9pbml0LnBhc3N3b3JkLGtyYjVfaW5pdC5wYXNzd29yZCk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBrcmI1X2luaXQubm9fYWRkcmVzc2VzID0gcHZbS1JCX0lfTkFE XS5pdmFsOworICAgICAgICAgICAgaWYgKHRtcGFkZHJzWzBdKSB7CisgICAgICAgICAgICAgICAg Zm9yIChpID0gMDsgaSA8IEtSQjVfTlVNX09GX0FERFJTOyBpKyspIHsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKGtyYjVfaW5pdC5hZGRyc1tpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAg ZnJlZShrcmI1X2luaXQuYWRkcnNbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAga3JiNV9p bml0LmFkZHJzW2ldID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBrcmI1X2luaXQuYWRkcnNbaV0gPSB0bXBhZGRyc1tpXTsKKyAgICAgICAgICAgICAg ICAgICAgdG1wYWRkcnNbaV0gPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgfSBlbHNlIGlmIChrdiA9PSA0KSB7ICAgICAgICAgICAvKiBTYW1lIGRlYWwg Zm9yIEtlcmJlcm9zIDQgKi8KKyAgICAgICAgICAgIGtyYjRfaW5pdC5saWZldGltZSA9IHB2W0tS Ql9JX0xGXS5pdmFsOworICAgICAgICAgICAgaWYgKHB2W0tSQl9JX1JMXS5zdmFsKSB7CisgICAg ICAgICAgICAgICAga3JiNF9pbml0LnJlYWxtICA9IHB2W0tSQl9JX1JMXS5zdmFsOworICAgICAg ICAgICAgICAgIHB2W0tSQl9JX1JMXS5zdmFsID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSBp ZiAoIHRtcHJlYWxtICkgeworICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5yZWFsbSAgPSB0bXBy ZWFsbTsKKyAgICAgICAgICAgICAgICB0bXByZWFsbSA9IE5VTEw7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAocHZbS1JCX0lfSU5dLnN2YWwpIHsKKyAgICAgICAgICAgICAgICBrcmI0 X2luaXQuaW5zdGFuY2UgPSBwdltLUkJfSV9JTl0uc3ZhbDsKKyAgICAgICAgICAgICAgICBwdltL UkJfSV9JTl0uc3ZhbCA9IE5VTEw7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0bXBpbnN0ICkg eworICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5pbnN0YW5jZSA9IHRtcGluc3Q7CisgICAgICAg ICAgICAgICAgdG1waW5zdCA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrcmI0 X2luaXQucHJlYXV0aCAgPSBwdltLUkJfSV9QQV0uaXZhbDsKKyAgICAgICAgICAgIGtyYjRfaW5p dC52ZXJib3NlICA9IHB2W0tSQl9JX0JSXS5pdmFsID8gMCA6IDE7CisKKyAgICAgICAgICAgIGlm ICh0bXBwcmlueikgeworICAgICAgICAgICAgICAgIGtyYjRfaW5pdC5wcmluY2lwYWwgPSB0bXBw cmluejsKKyAgICAgICAgICAgICAgICB0bXBwcmlueiA9IE5VTEw7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBrcmI0X2luaXQucGFzc3dvcmQgPSB0bXBwc3dkOworICAgICAgICAgICAgdG1w cHN3ZCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEtSQl9B X0xDOiAgICAgICAgICAgICAgICAgICAgLyogTGlzdCBDcmVkZW50aWFscyAqLworICAgICAgICBr cmI1X2xjLmVuY3J5cHRpb24gPSB0bXBfa2xjICYgWFlLTENFTjsKKyAgICAgICAga3JiNV9sYy5m bGFncyA9IHRtcF9rbGMgJiBYWUtMQ0ZMOworICAgICAgICBrcmI1X2xjLmFkZHIgID0gdG1wX2ts YyAmIFhZS0xDQUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworLyogQ29tbW9uIGV4aXQgLSBG cmVlIHRlbXBvcmFyeSBzdG9yYWdlICovCisKKyAga2VyYng6CisgICAgZm9yIChpID0gMDsgaSA8 PSBLUkJfSV9NQVg7IGkrKykgeyAgLyogRnJlZSBtYWxsb2MnZCBzd2l0Y2ggZGF0YSAqLworICAg ICAgICBpZiAocHZbaV0uc3ZhbCkKKyAgICAgICAgICBmcmVlKHB2W2ldLnN2YWwpOworICAgIH0K KyAgICBmb3IgKGkgPSAwOyBpIDwgS1JCNV9OVU1fT0ZfQUREUlM7IGkrKykgeworICAgICAgICBp ZiAodG1wYWRkcnNbaV0pCisgICAgICAgICAgZnJlZSh0bXBhZGRyc1tpXSk7CisgICAgfQorICAg IGlmICh0bXBwcmlueikgZnJlZSh0bXBwcmlueik7ICAgICAgIC8qIEFuZCB0aGVzZSB0b28uICov CisgICAgaWYgKHRtcHBzd2QpICBmcmVlKHRtcHBzd2QpOworICAgIGlmICh0bXBjYWNoZSkgZnJl ZSh0bXBjYWNoZSk7CisgICAgaWYgKHRtcHJlYWxtKSBmcmVlKHRtcHJlYWxtKTsKKyAgICBpZiAo dG1waW5zdCkgIGZyZWUodG1waW5zdCk7CisKKyAgICByZXR1cm4ocmMpOyAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBSZXR1cm4gdGhlIHJldHVybiBjb2RlICovCit9CisjZW5kaWYgLyogQ0tf S0VSQkVST1MgKi8KKworI2lmZGVmIENLX0xPR0lOCitpbnQKKyNpZmRlZiBDS19BTlNJQworY2t4 bG9naW4oQ0hBUiAqIHVzZXJpZCwgQ0hBUiAqIHBhc3N3ZCwgQ0hBUiAqIGFjY3QsIGludCBwcm9t cHRvaykKKyNlbHNlIC8qIENLX0FOU0lDICovCitja3hsb2dpbih1c2VyaWQsIHBhc3N3ZCwgYWNj dCwgcHJvbXB0b2spCisgIENIQVIgKiB1c2VyaWQ7IENIQVIgKiBwYXNzd2Q7IENIQVIgKiBhY2N0 OyBpbnQgcHJvbXB0b2s7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGNreGxvZ2luICovIHsK KyNpZmRlZiBDS19SRUNBTEwKKyAgICBleHRlcm4gaW50IG9uX3JlY2FsbDsgICAgICAgICAgICAg ICAvKiBhcm91bmQgUGFzc3dvcmQgcHJvbXB0aW5nICovCisjZW5kaWYgLyogQ0tfUkVDQUxMICov CisjaWZkZWYgQ09NTUVOVAorICAgIGV4dGVybiBpbnQgZ3Vlc3Q7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgIGludCBycHJvbXB0ID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUg cHJvbXB0ICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBpbnQgc2F2bG9nOworI2VuZGlmIC8qIENL U1lTTE9HICovCisKKyAgICBleHRlcm4gaW50IHdoYXQsIHNydmNkbXNnOworCisgICAgaW50IHgg PSAwLCBvayA9IDAsIHJjID0gMDsKKyAgICBDSEFSICogX3UgPSBOVUxMLCAqIF9wID0gTlVMTCwg KiBfYSA9IE5VTEw7CisKKyAgICBkZWJ1ZyhGMTExLCJja3hsb2dpbiB1c2VyaWQiLHVzZXJpZCxw cm9tcHRvayk7CisgICAgZGVidWcoRjExMCwiY2t4bG9naW4gcGFzc3dkIixwYXNzd2QsMCk7CisK KyAgICBpc2d1ZXN0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBHbG9iYWwgImFub255 bW91cyIgZmxhZyAqLworCisgICAgaWYgKCF1c2VyaWQpIHVzZXJpZCA9IChDSEFSICopIiI7Cisg ICAgaWYgKCFwYXNzd2QpIHBhc3N3ZCA9IChDSEFSICopIiI7CisKKyAgICBkZWJ1ZyhGMTExLCJj a3hsb2dpbiB1c2VyaWQiLHVzZXJpZCx3aGF0KTsKKworI2lmZGVmIENLX1JFQ0FMTAorICAgIG9u X3JlY2FsbCA9IDA7CisjZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyNpZmRlZiBDS1NZU0xPRwor ICAgIHNhdmxvZyA9IGNreHN5c2xvZzsgICAgICAgICAgICAgICAgIC8qIFNhdmUgYW5kIHR1cm4g b2ZmIHN5c2xvZ2dpbmcgKi8KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisgICAgaWYgKCghKnVz ZXJpZCB8fCAhKnBhc3N3ZCkgJiYgICAgICAgLyogTmVlZCB0byBwcm9tcHQgZm9yIG1pc3Npbmcg aW5mbyAqLworICAgICAgICBwcm9tcHRvaykgeworICAgICAgICBjbXNhdnAocHNhdmUsUFJPTVBU TCk7ICAgICAgICAgIC8qIFNhdmUgb2xkIHByb21wdCAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJj a3hsb2dpbiBzYXZlZCIscHNhdmUsMCk7CisgICAgICAgIHJwcm9tcHQgPSAxOworICAgIH0KKyAg ICBpZiAoISp1c2VyaWQpIHsKKyAgICAgICAgaWYgKCFwcm9tcHRvaykKKyAgICAgICAgICByZXR1 cm4oMCk7CisgICAgICAgIGNtc2V0cCgiVXNlcm5hbWU6ICIpOyAgICAgICAgICAgLyogTWFrZSBu ZXcgcHJvbXB0ICovCisgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAgICAgLyog UHV0IGNvbnNvbGUgaW4gY2JyZWFrIG1vZGUgKi8KKyAgICAgICAgY21pbmkoMSk7CisKKy8qIEZs dXNoIHR5cGVhaGVhZCAqLworCisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICBkZWJ1ZyhGMTAx LAorICAgICAgICAgICAgICAiY2t4bG9naW4gVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1p dC5tZV9zdGFydCIsCisgICAgICAgICAgICAgICIiLAorICAgICAgICAgICAgICBURUxPUFRfU0Io VEVMT1BUX0tFUk1JVCkua2VybWl0Lm1lX3N0YXJ0CisgICAgICAgICAgICAgICk7CisjZW5kaWYg LyogSUtTX09QVElPTiAqLworCisgICAgICAgIHdoaWxlICh0dGNoaygpID4gMCkgeworICAgICAg ICAgICAgeCA9IHR0aW5jKDApOworICAgICAgICAgICAgZGVidWcoRjEwMSwiY2t4bG9naW4gZmx1 c2ggdXNlciB4IiwiIix4KTsKKyAgICAgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgICAg ZG9leGl0KEdPT0RfRVhJVCwwKTsgICAgICAvKiBDb25uZWN0aW9uIGxvc3QgKi8KKyNpZmRlZiBU TkNPREUKKyAgICAgICAgICAgIGlmIChzc3RlbG5ldCkgeworICAgICAgICAgICAgICAgIGlmICh4 ID09IElBQykgeworICAgICAgICAgICAgICAgICAgICB4ID0gdG5fZG9vcCgoQ0hBUikoeCAmIDB4 ZmYpLGNreGVjaCx0dGluYyk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImNreGxv Z2luIHVzZXIgdG5fZG9vcCIsIiIseCk7CisjaWZkZWYgSUtTX09QVElPTgorICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLAorICAgICAgICAgICAgICAgICAgICAgICJja3hsb2dpbiB1c2Vy IFRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVfc3RhcnQiLAorICAgICAgICAgICAg ICAgICAgICAgICIiLAorICAgICAgICAgICAgICAgICAgICAgIFRFTE9QVF9TQihURUxPUFRfS0VS TUlUKS5rZXJtaXQubWVfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8q IElLU19PUFRJT04gKi8KKworICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApCisgICAgICAg ICAgICAgICAgICAgICAgZ290byBYQ0tYTE9HOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg KHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IGNreGVjaCA9IDE7IGJyZWFrOyAv KiBUdXJuIG9uIGVjaG9pbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IGNreGVj aCA9IDA7IGJyZWFrOyAvKiBUdXJuIG9mZiBlY2hvaW5nICovCisjaWZkZWYgSUtTX09QVElPTgor ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgIC8qIElLUyBl dmVudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFURUxPUFRfU0IoVEVMT1BUX0tF Uk1JVCkua2VybWl0Lm1lX3N0YXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsg ICAgICAgICAgICAgICAgIC8qIGVsc2UgZmFsbCB0aHJ1Li4uICovCisjZW5kaWYgLyogSUtTX09Q VElPTiAqLworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAg IC8qIExvZ291dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBYQ0tYTE9HOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2Vu ZGlmIC8qIFROQ09ERSAqLworICAgICAgICB9CisgICAgICAgIGlmIChwZmxhZykgcHJvbXB0KHh4 c3RyaW5nKTsgICAgLyogSXNzdWUgcHJvbXB0IGlmIGF0IHRvcCBsZXZlbCAqLworICAgICAgICBj bXJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgKi8KKyAg ICAgICAgZm9yICh4ID0gLTE7IHggPCAwOykgeyAgICAgICAgICAvKiBQcm9tcHQgdGlsbCB0aGV5 IGFuc3dlciAqLworICAgICAgICAgICAgLyogR2V0IGEgbGl0ZXJhbCBsaW5lIG9mIHRleHQgKi8K KyAgICAgICAgICAgIHg9Y210eHQoIllvdXIgdXNlcm5hbWUsIG9yIFwiZnRwXCIsIG9yIFwiYW5v bnltb3VzXCIiLCIiLCZzLE5VTEwpOworICAgICAgICAgICAgaWYgKHggPT0gLTQgfHwgeCA9PSAt MTApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxyXG4lc0xvZ2luIGNhbmNlbGxlZFxuIiwK KwkJICAgICAgIHggPT0gLTEwID8gIlRpbWVkIG91dDogIiA6ICIiKTsKKyNpZmRlZiBDS1NZU0xP RworICAgICAgICAgICAgICAgIGNreHN5c2xvZyA9IHNhdmxvZzsKKyNlbmRpZiAvKiBDS1NZU0xP RyAqLworICAgICAgICAgICAgICAgIGRvZXhpdChHT09EX0VYSVQsMCk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoc3N0YXRlKSAgICAgICAgICAgICAgICAgLyogRGlkIGEgcGFja2V0 IGNvbWUgaW5zdGVhZD8gKi8KKyAgICAgICAgICAgICAgZ290byBYQ0tYTE9HOworICAgICAgICAg ICAgY21yZXMoKTsgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgYWdhaW4g Ki8KKyAgICAgICAgfQorICAgICAgICBpZiAoKF91ID0gKENIQVIgKiltYWxsb2MoKGludClzdHJs ZW4ocykgKyAxKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgcHJpbnRmKCI/SW50ZXJuYWwgZXJy b3I6IG1hbGxvY1xuIik7CisgICAgICAgICAgICBnb3RvIFhDS1hMT0c7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBzdHJjcHkoKGNoYXIgKilfdSxzKTsgICAgICAgLyogc2FmZSAqLwor ICAgICAgICAgICAgdXNlcmlkID0gX3U7CisgICAgICAgIH0KKyAgICB9CisgICAgb2sgPSB6dnVz ZXIoKGNoYXIgKil1c2VyaWQpOyAgICAgICAgLyogVmVyaWZ5IHVzZXJuYW1lICovCisgICAgZGVi dWcoRjExMSwiY2t4bG9naW4genZ1c2VyIix1c2VyaWQsb2spOworCisgICAgaWYgKCEqcGFzc3dk ICYmIHByb21wdG9rCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAmJiBndWVzdAorI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgKSB7CisgICAgICAgIGNoYXIgcHJtcHRbODBdOworCisjaWZk ZWYgQ0tTWVNMT0cKKyAgICAgICAgc2F2bG9nID0gY2t4c3lzbG9nOyAgICAgICAgICAgICAvKiBT YXZlIGFuZCB0dXJuIG9mZiBzeXNsb2dnaW5nICovCisgICAgICAgIGNreHN5c2xvZyA9IDA7Cisj ZW5kaWYgLyogQ0tTWVNMT0cgKi8KKworLyogRmx1c2ggdHlwZWFoZWFkIGFnYWluICovCisKKyAg ICAgICAgd2hpbGUgKHR0Y2hrKCkgPiAwKSB7CisgICAgICAgICAgICB4ID0gdHRpbmMoMCk7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAxLCJja3hsb2dpbiBmbHVzaCB1c2VyIHgiLCIiLHgpOworI2lm ZGVmIFROQ09ERQorICAgICAgICAgICAgaWYgKHNzdGVsbmV0KSB7CisgICAgICAgICAgICAgICAg aWYgKHggPT0gSUFDKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSB0bl9kb29wKChDSEFSKSh4 ICYgMHhmZiksY2t4ZWNoLHR0aW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi Y2t4bG9naW4gcGFzcyB0bl9kb29wIiwiIix4KTsKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMDEsCisgICAgICAgICAgICAgICAgICAgICAgImNreGxvZ2lu IHBhc3MgVEVMT1BUX1NCKFRFTE9QVF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydCIsCisgICAgICAg ICAgICAgICAgICAgICAgIiIsCisgICAgICAgICAgICAgICAgICAgICAgVEVMT1BUX1NCKFRFTE9Q VF9LRVJNSVQpLmtlcm1pdC5tZV9zdGFydAorICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5k aWYgLyogSUtTX09QVElPTiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IDApCisgICAg ICAgICAgICAgICAgICAgICAgZ290byBYQ0tYTE9HOworICAgICAgICAgICAgICAgICAgICBzd2l0 Y2ggKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IGNreGVjaCA9IDE7IGJyZWFr OyAvKiBUdXJuIG9uIGVjaG9pbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IGNr eGVjaCA9IDA7IGJyZWFrOyAvKiBUdXJuIG9mZiBlY2hvaW5nICovCisgICAgICAgICAgICAgICAg ICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgLyogSUtTIGV2ZW50ICovCisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIVRFTE9QVF9TQihURUxPUFRfS0VSTUlUKS5rZXJtaXQubWVf c3RhcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg LyogZWxzZSBmYWxsIHRocnUuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6ICAg ICAgICAgICAgICAgICAgICAvKiBMb2dvdXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gWENLWExPRzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAo IXN0cmNtcCgoY2hhciAqKXVzZXJpZCwiYW5vbnltb3VzIikgfHwKKyAgICAgICAgICAgICFzdHJj bXAoKGNoYXIgKil1c2VyaWQsImZ0cCIpKSB7CisgICAgICAgICAgICBpZiAoIW9rKQorICAgICAg ICAgICAgICBnb3RvIFhDS1hMT0c7CisgICAgICAgICAgICBja3N0cm5jcHkocHJtcHQsIkVudGVy IGUtbWFpbCBhZGRyZXNzIGFzIFBhc3N3b3JkOiAiLDgwKTsKKyAgICAgICAgfSBlbHNlIGlmICgq dXNlcmlkICYmIHN0cmxlbigoY2hhciAqKXVzZXJpZCkgPCA2MCkgeworI2lmZGVmIE5UCisgICAg ICAgICAgICBleHRlcm4gQ0hBUiAqIHBSZWZlcmVuY2VEb21haW5OYW1lOworICAgICAgICAgICAg aWYgKHBSZWZlcmVuY2VEb21haW5OYW1lKQorICAgICAgICAgICAgICBja21ha3htc2cocHJtcHQs CisgICAgICAgICAgICAgICAgICAgICAgIDgwLAorICAgICAgICAgICAgICAgICAgICAgICAiRW50 ZXIgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgcFJlZmVyZW5jZURvbWFpbk5hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICJcXFxcIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcmlk LAorICAgICAgICAgICAgICAgICAgICAgICAiJ3MgUGFzc3dvcmQ6ICIsCisgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKyAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBOVCAqLworICAgICAg ICAgICAgICBja21ha21zZyhwcm1wdCw4MCwiRW50ZXIgIiwoY2hhciAqKXVzZXJpZCwiJ3MgUGFz c3dvcmQ6ICIsTlVMTCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIGNrc3RybmNweShwcm1w dCwiRW50ZXIgUGFzc3dvcmQ6ICIsODApOworICAgICAgICBjbXNldHAocHJtcHQpOyAgICAgICAg ICAgICAgICAgIC8qIE1ha2UgbmV3IHByb21wdCAqLworICAgICAgICBjb25jYigoY2hhcillc2Nh cGUpOyAgICAgICAgICAgIC8qIFB1dCBjb25zb2xlIGluIGNicmVhayBtb2RlICovCisgICAgICAg IGlmIChzdHJjbXAoKGNoYXIgKil1c2VyaWQsImFub255bW91cyIpICYmCisgICAgICAgICAgICBz dHJjbXAoKGNoYXIgKil1c2VyaWQsImZ0cCIpKSB7IC8qIGFuZCBpZiBub3QgYW5vbnltb3VzICov CisgICAgICAgICAgICBkZWJvayA9IDA7CisgICAgICAgICAgICBjbWluaSgwKTsgICAgICAgICAg ICAgICAgICAgLyogYW5kIG5vLWVjaG8gbW9kZSAqLworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgY21pbmkoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBmbGFnKSBwcm9tcHQoeHhz dHJpbmcpOyAgICAvKiBJc3N1ZSBwcm9tcHQgaWYgYXQgdG9wIGxldmVsICovCisgICAgICAgIGNt cmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIHBhcnNlciAqLworICAg ICAgICBmb3IgKHggPSAtMTsgeCA8IDA7KSB7ICAgICAgICAgIC8qIFByb21wdCB0aWxsIHRoZXkg YW5zd2VyICovCisjaWZkZWYgQ0tfUEFNCisJICAgIGdvdGVtcHR5cGFzc3dkPTA7CisjZW5kaWYg LyogQ0tfUEFNICovCisgICAgICAgICAgICB4ID0gY210eHQoIiIsIiIsJnMsTlVMTCk7ICAgLyog R2V0IGEgbGl0ZXJhbCBsaW5lIG9mIHRleHQgKi8KKyAgICAgICAgICAgIGlmICh4ID09IC00IHx8 IHggPT0gLTEwKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcclxuJXNMb2dpbiBjYW5jZWxs ZWRcbiIsCisJCSAgICAgICB4ID09IC0xMCA/ICJUaW1lZCBvdXQ6ICIgOiAiIik7CisjaWZkZWYg Q0tTWVNMT0cKKyAgICAgICAgICAgICAgICBja3hzeXNsb2cgPSBzYXZsb2c7CisjZW5kaWYgLyog Q0tTWVNMT0cgKi8KKyAgICAgICAgICAgICAgICBkb2V4aXQoR09PRF9FWElULDApOworICAgICAg ICAgICAgfQorI2lmZGVmIENLX1BBTQorCSAgICBpZiAoISpzKQorCSAgICAgIGdvdGVtcHR5cGFz c3dkID0gMTsKKyNlbmRpZiAvKiBDS19QQU0gKi8KKyAgICAgICAgICAgIGlmIChzc3RhdGUpICAg ICAgICAgICAgICAgICAvKiBJbiBjYXNlIG9mIGEgS2VybWl0IHBhY2tldCAqLworICAgICAgICAg ICAgICBnb3RvIFhDS1hMT0c7CisgICAgICAgICAgICBjbXJlcygpOyAgICAgICAgICAgICAgICAg ICAgLyogUmVzZXQgdGhlIHBhcnNlciBhZ2FpbiAqLworICAgICAgICB9CisgICAgICAgIHByaW50 ZigiXHJcbiIpOyAgICAgICAgICAgICAgICAgLyogRWNobyBhIENSTEYgKi8KKyAgICAgICAgaWYg KChfcCA9IChDSEFSICopbWFsbG9jKChpbnQpc3RybGVuKHMpICsgMSkpID09IE5VTEwpIHsKKyAg ICAgICAgICAgIHByaW50ZigiP0ludGVybmFsIGVycm9yOiBtYWxsb2NcbiIpOworICAgICAgICAg ICAgZ290byBYQ0tYTE9HOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RyY3B5KChj aGFyICopX3Ascyk7ICAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgIHBhc3N3ZCA9IF9wOwor ICAgICAgICB9CisgICAgfQorI2lmZGVmIENLX1BBTQorICAgIGVsc2UgeworICAgICAgICBjbXJl cygpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHRoZSBwYXJzZXIgKi8KKworICAg ICAgICAvKiBXZSByZXN0b3JlIHRoZSBwcm9tcHQgbm93IGJlY2F1c2UgdGhlIFBBTSBlbmdpbmUg d2lsbCBjYWxsICAqLworICAgICAgICAvKiByZWFkcGFzcygpIHdoaWNoIHdpbGwgb3ZlcndyaXRl IHBzYXZlLiAqLworICAgICAgICBpZiAocnByb21wdCkgeworICAgICAgICAgICAgY21zZXRwKHBz YXZlKTsgICAgICAgICAgICAgIC8qIFJlc3RvcmUgb3JpZ2luYWwgcHJvbXB0ICovCisgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJja3hsb2dpbiByZXN0b3JlZCIscHNhdmUsMCk7CisgICAgICAgICAg ICBycHJvbXB0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19QQU0gKi8KKwor I2lmZGVmIENLU1lTTE9HCisgICAgY2t4c3lzbG9nID0gc2F2bG9nOworI2VuZGlmIC8qIENLU1lT TE9HICovCisKKyAgICBpZiAob2spIHsKKyAgICAgICAgb2sgPSB6dnBhc3MoKGNoYXIgKilwYXNz d2QpOyAgICAvKiBDaGVjayBwYXNzd29yZCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJja3hsb2dp biB6dnBhc3MiLCIiLG9rKTsKKyNpZmRlZiBDS19QQU0KKyAgICB9IGVsc2UgeworCS8qIEZha2Ug cGFtIHBhc3N3b3JkIGZhaWx1cmUgZm9yIG5vbmV4aXN0ZW50IHVzZXJzICovCisJc2xlZXAoMSk7 CisJcHJpbnRmKCJBdXRoZW50aWNhdGlvbiBmYWlsdXJlXG4iKTsKKyNlbmRpZgkvKiBDS19QQU0g Ki8KKyAgICB9CisKKyAgICBpZiAob2sgPiAwICYmIGlzZ3Vlc3QpIHsKKyNpZm5kZWYgTk9QVVNI CisgICAgICAgIG5vcHVzaCA9IDE7CisjZW5kaWYgLyogTk9QVVNIICovCisgICAgICAgIHNydmNk bXNnID0gMTsKKyAgICB9CisgICAgcmMgPSBvazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogU2V0IHRoZSByZXR1cm4gY29kZSAqLworICAgIGlmICgoY2hhciAqKXVpZGJ1ZiAhPSAoY2hh ciAqKXVzZXJpZCkKKyAgICAgIGNrc3RybmNweSh1aWRidWYsKGNoYXIgKil1c2VyaWQsVUlEQlVG TEVOKTsgLyogUmVtZW1iZXIgdXNlcm5hbWUgKi8KKworICBYQ0tYTE9HOiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIENvbW1vbiBleGl0ICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICBj a3hzeXNsb2cgPSBzYXZsb2c7ICAgICAgICAgICAgICAgICAvKiBJbiBjYXNlIG9mIEdPVE8gYWJv dmUgKi8KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgIGlmIChycHJvbXB0KSB7CisgICAgICAg IGNtc2V0cChwc2F2ZSk7ICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBvcmlnaW5hbCBwcm9t cHQgKi8KKyAgICAgICAgZGVidWcoRjExMCwiY2t4bG9naW4gcmVzdG9yZWQiLHBzYXZlLDApOwor ICAgIH0KKyAgICBpZiAoX3UgfHwgX3AgfHwgX2EpIHsKKyAgICAgICAgaWYgKF91KSBmcmVlKF91 KTsKKyAgICAgICAgaWYgKF9wKSBmcmVlKF9wKTsKKyAgICAgICAgaWYgKF9hKSBmcmVlKF9hKTsK KyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKworaW50Citja3hsb2dvdXQoKSB7CisgICAgZG9l eGl0KEdPT0RfRVhJVCwwKTsgICAgICAgICAgICAgICAgLyogZG9leGl0IGNhbGxzIHp2bG9nb3V0 ICovCisgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IHJlYWNo ZWQgKi8KK30KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCisjZW5kaWYgLyogTk9JQ1AgKi8KCmRp ZmYgLS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzci5j IGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3IuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjc3ZmU2Ci0tLSAvZGV2L251bGwKKysrIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3IuYwpAQCAtMCwwICsx LDEzMzc2IEBACisjaWZkZWYgU1NIVEVTVAorI2RlZmluZSBTU0hCVUlMVElOCisjZW5kaWYgLyog U1NIVEVTVCAqLworCisjaW5jbHVkZSAiY2tjc3ltLmgiCitjaGFyICp1c2VydiA9ICJVc2VyIElu dGVyZmFjZSA5LjAuMjk5LCA5IEp1biAyMDExIjsKKworLyogIEMgSyBVIFUgUyBSIC0tICAiVXNl ciBJbnRlcmZhY2UiIGZvciBDLUtlcm1pdCAoUGFydCAxKSAgKi8KKworLyoKKyAgQXV0aG9yczoK KyAgICBGcmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgICAgIFRoZSBLZXJtaXQg UHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQorICAgIEplZmZyZXkg RSBBbHRtYW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1cmUgRW5k cG9pbnRzIEluYy4sIE5ldyBZb3JrIENpdHkKKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEs CisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcg WW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5H LlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1 bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAgT3JpZ2luYWxs eSB0aGUgZW50aXJlIHVzZXIgaW50ZXJmYWNlIHdhcyBpbiBvbmUgbW9kdWxlLCBja3V1c3IuYy4g IE92ZXIKKyAgdGhlIHllYXJzIGl0IGhhcyBiZWVuIHNwbGl0IGludG8gbWFueSBtb2R1bGVzOiBj a3V1czIuYywgY2t1dXMzLmMsIC4uLiwKKyAgY2t1dXM3LmMuICBja3V1czIuYyBjb250YWlucyB0 aGUgSEVMUCBjb21tYW5kIHBhcnNlciBhbmQgaGVscC10ZXh0IHN0cmluZ3M7CisgIGNrdXVzeS5j IGNvbnRhaW5zIHRoZSBVTklYLXN0eWxlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2U7IGNrdXVzeC5j IGNvbnRhaW5zCisgIHJvdXRpbmVzIG5lZWRlZCBieSBib3RoIHRoZSBjb21tYW5kLWxpbmUgaW50 ZXJmYWNlIGFuZCB0aGUgaW50ZXJhY3RpdmUKKyAgY29tbWFuZCBwYXJzZXIuCisqLworCisvKgor ICBUaGUgY2t1dXMqLmMgbW9kdWxlcyBkZXBlbmQgb24gdGhlIGV4aXN0ZW5jZSBvZiBDIGxpYnJh cnkgZmVhdHVyZXMgbGlrZQorICBmb3BlbiwgZmdldHMsIGZlb2YsIChmKXByaW50ZiwgYXJndi9h cmdjLCBldGMuICBPdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgbGlrZWx5IHRvIHZhcnkgYW1v bmcgZGlmZmVyZW50IHBsYXRmb3JtcyAtLSBsaWtlIHNldHRpbmcgdGVybWluYWwgbW9kZXMgb3IK KyAgaW50ZXJydXB0cyAtLSBhcmUgaW52b2tlZCB2aWEgY2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQg YXJlIGRlZmluZWQgaW4gdGhlCisgIHN5c3RlbS0gZGVwZW5kZW50IG1vZHVsZXMsIGNrP1tmdF1p by5jLiAgVGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgcHJvY2Vzc2VzCisgIGFueSBhcmd1bWVudHMg Zm91bmQgb24gdGhlIGNvbW1hbmQgbGluZSwgYXMgcGFzc2VkIHRvIG1haW4oKSB2aWEgYXJndi9h cmdjLgorICBUaGUgaW50ZXJhY3RpdmUgcGFyc2VyIHVzZXMgdGhlIGZhY2lsaXRpZXMgb2YgdGhl IGNtZCBwYWNrYWdlIChkZXZlbG9wZWQgZm9yCisgIHRoaXMgcHJvZ3JhbSwgYnV0IHVzYWJsZSBi eSBhbnkgcHJvZ3JhbSkuICBBbnkgY29tbWFuZCBwYXJzZXIgbWF5IGJlCisgIHN1YnN0aXR1dGVk IGZvciB0aGlzIG9uZS4gIFRoZSBvbmx5IHJlcXVpcmVtZW50cyBmb3IgdGhlIEtlcm1pdCBjb21t YW5kCisgIHBhcnNlciBhcmUgdGhlc2U6CisKKyAgLiBTZXQgcGFyYW1ldGVycyB2aWEgZ2xvYmFs IHZhcmlhYmxlcyBsaWtlIGR1cGxleCwgc3BlZWQsIHR0bmFtZSwgZXRjLiAgU2VlCisgICAgY2tj bWFpLmMgZm9yIHRoZSBkZWNsYXJhdGlvbnMgYW5kIGRlc2NyaXB0aW9ucyBvZiB0aGVzZSB2YXJp YWJsZXMuCisKKyAgLiBJZiBhIGNvbW1hbmQgY2FuIGJlIGV4ZWN1dGVkIHdpdGhvdXQgdGhlIHVz ZSBvZiBLZXJtaXQgcHJvdG9jb2wsIHRoZW4KKyAgICBleGVjdXRlIHRoZSBjb21tYW5kIGRpcmVj dGx5IGFuZCBzZXQgdGhlIHZhcmlhYmxlIHNzdGF0ZSB0byAwLiBFeGFtcGxlcworICAgIGluY2x1 ZGUgJ3NldCcgY29tbWFuZHMsIGxvY2FsIGRpcmVjdG9yeSBsaXN0aW5ncywgdGhlICdjb25uZWN0 JyBjb21tYW5kLgorCisgIC4gSWYgYSBjb21tYW5kIHJlcXVpcmVzIHRoZSBLZXJtaXQgcHJvdG9j b2wsIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKworICAgICBzc3RhdGUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cmluZyBkYXRhCisgICAgICAgJ3gnIChlbnRlciBzZXJ2ZXIg bW9kZSkgICAgICAgICAgICAobm9uZSkKKyAgICAgICAncicgKHNlbmQgYSAnZ2V0JyBjb21tYW5k KSAgICAgICAgIGNtYXJnLCBjbWFyZzIKKyAgICAgICAndicgKGVudGVyIHJlY2VpdmUgbW9kZSkg ICAgICAgICAgIGNtYXJnMgorICAgICAgICdnJyAoc2VuZCBhIGdlbmVyaWMgY29tbWFuZCkgICAg ICAgY21hcmcKKyAgICAgICAncycgKHNlbmQgZmlsZXMpICAgICAgICAgICAgICAgICAgIG5maWxz LCBjbWFyZyAmIGNtYXJnMiBPUiBjbWxpc3QKKyAgICAgICAnYycgKHNlbmQgYSByZW1vdGUgaG9z dCBjb21tYW5kKSAgIGNtYXJnCisKKyAgICAgY21saXN0IGlzIGFuIGFycmF5IG9mIHBvaW50ZXJz IHRvIHN0cmluZ3MuCisgICAgIGNtYXJnLCBjbWFyZzIgYXJlIHBvaW50ZXJzIHRvIHN0cmluZ3Mu CisgICAgIG5maWxzIGlzIGFuIGludGVnZXIuCisKKyAgICAgY21hcmcgY2FuIGJlIGEgZmlsZW5h bWUgc3RyaW5nIChwb3NzaWJseSB3aWxkKSwgb3IKKwlhIHBvaW50ZXIgdG8gYSBwcmVmYWJyaWNh dGVkIGdlbmVyaWMgY29tbWFuZCBzdHJpbmcsIG9yCisJYSBwb2ludGVyIHRvIGEgaG9zdCBjb21t YW5kIHN0cmluZy4KKyAgICAgY21hcmcyIGlzIGFuICJhcy1uYW1lIiAtIHRoZSBuYW1lIHRvIHNl bmQgZmlsZShzKSB1bmRlciwgb3IKKwl0aGUgbmFtZSB1bmRlciB3aGljaCB0byBzdG9yZSBpbmNv bWluZyBmaWxlKHMpOyBtdXN0IG5vdCBiZSB3aWxkLgorCUEgbnVsbCBvciBlbXB0eSB2YWx1ZSBt ZWFucyB0byB1c2UgdGhlIGZpbGUncyBvd24gbmFtZS4KKyAgICAgY21saXN0IGlzIGEgbGlzdCBv ZiBmaWxlbmFtZXMsIHN1Y2ggYXMgcGFzc2VkIHZpYSBhcmd2LgorICAgICBuZmlscyBpcyBhbiBp bnRlZ2VyLCBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorICAgICAgIC0xOiBmaWxlc3BlYyAocG9z c2libHkgd2lsZCkgaW4gY21hcmcsIG11c3QgYmUgZXhwYW5kZWQgaW50ZXJuYWxseS4KKwkwOiBz ZW5kIGZyb20gc3RkaW4gKHN0YW5kYXJkIGlucHV0KS4KKyAgICAgICA+MDogbnVtYmVyIG9mIGZp bGVzIHRvIHNlbmQsIGZyb20gY21saXN0LgorCisgIFRoZSBzY3JlZW4oKSBmdW5jdGlvbiBpcyB1 c2VkIHRvIHVwZGF0ZSB0aGUgc2NyZWVuIGR1cmluZyBmaWxlIHRyYW5zZmVyLgorICBUaGUgdGxv ZygpIGZ1bmN0aW9uIHdyaXRlcyB0byBhIHRyYW5zYWN0aW9uIGxvZy4KKyAgVGhlIGRlYnVnKCkg ZnVuY3Rpb24gd3JpdGVzIHRvIGEgZGVidWdnaW5nIGxvZy4KKyAgVGhlIGludG1zZygpIGFuZCBj aGtpbnQoKSBmdW5jdGlvbnMgcHJvdmlkZSB0aGUgdXNlciBpL28gZm9yIGludGVycnVwdGluZwor ICAgIGZpbGUgdHJhbnNmZXJzLgorKi8KKworLyogSW5jbHVkZXMgKi8KKworI2lmZGVmIE1VTFRJ TkVUCisjZGVmaW5lIE1VTFRJTkVUX09MRF9TVFlMRQkJLyogTGVhdmUgc2VsZWN0IHByb3RvdHlw ZSB1bmRlZmluZWQgKi8KKyNlbmRpZiAvKiBNVUxUSU5FVCAqLworCisjaW5jbHVkZSAiY2tjZGVi LmgiCisjaW5jbHVkZSAiY2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5jbHVkZSAi Y2tjbmV0LmgiCQkJLyogTmV0d29yayBzeW1ib2xzICovCisjaW5jbHVkZSAiY2t1dXNyLmgiCisj aW5jbHVkZSAiY2tjeGxhLmgiCisKK2ludCBnX2ZuY2FjdCA9IC0xOwkJCS8qIE5lZWRlZCBmb3Ig Tk9JQ1AgYnVpbGRzICovCitpbnQgbm9pbml0ID0gMDsJCQkJLyogRmxhZyBmb3Igc2tpcHBpbmcg aW5pdCBmaWxlICovCitpbnQgbnNjYW5maWxlID0gU0NBTkZJTEVCVUY7CisKK2ludCByY2RhY3Rp dmUgPSAwOwkJCS8qIFJDRCBhY3RpdmUgKi8KK2ludCBrZWVwYWxsY2hhcnMgPSAwOwkJCS8qIFNl ZSBjbWZsZCgpICovCisKK2ludCBsb2N1cyA9IDE7CQkJCS8qIEN1cnJlbnQgTE9DVVMgaXMgTE9D QUwgKi8KKyNpZmRlZiBPUzIKK2ludCBhdXRvbG9jdXMgPSAyOwkJCS8qIEF1dG9tYXRpYyBMT0NV UyBzd2l0Y2hpbmc6IEFTSyAqLworI2Vsc2UgLyogT1MyICovCitpbnQgYXV0b2xvY3VzID0gMTsJ CQkvKiBBdXRvbWF0aWMgTE9DVVMgc3dpdGNoaW5nIGVuYWJsZWQgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKworI2lmbmRlZiBOT0lDUAorI2lmZGVmIENLTEVBUk4KKyNpZmRlZiBWTVMKKyNpbmNsdWRl IDx0aW1lLmg+CQkJLyogRm9yIENLTEVBUk4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAv KiBDS0xFQVJOICovCisjaWZkZWYgT1MyCisjaWZuZGVmIE5UCisjZGVmaW5lIElOQ0xfTk9QTQor I2RlZmluZSBJTkNMX1ZJTwkJCS8qIE5lZWRlZCBmb3IgY2tvY29uLmggKi8KKyNpbmNsdWRlIDxv czIuaD4KKyN1bmRlZiBDT01NRU5UCisjZWxzZQorI2RlZmluZSBBUElSRVQgVUxPTkcKKyNpbmNs dWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8dGFwaS5oPgorI2luY2x1ZGUgImNrbndpbi5oIgor I2luY2x1ZGUgImNrbnRhcC5oIgkJCS8qIENLX1RBUEkgZGVmaW5pdGlvbiAqLworI2VuZGlmIC8q IE5UICovCisjaW5jbHVkZSAiY2tvd2luLmgiCisjaW5jbHVkZSAiY2tvY29uLmgiCitleHRlcm4g aW50IHRjcF9hdmFpbDsKK2V4dGVybiBib29sIHZpZXdvbmx5OworZXh0ZXJuIGludCBrOTVzdGRv dXQ7CitleHRlcm4gaW50IHR0X3Njcm9sbDsKKyNpZm5kZWYgTk9URVJNCitleHRlcm4gdHRfc3Rh dHVzW1ZOVU1dOworI2VuZGlmIC8qIE5PVEVSTSAqLworaW50IGRpc3BsYXlfZGVtbyA9IDE7Cisj aW5jbHVkZSAiY2tvc3NoLmgiCisjaWZkZWYgS1VJCisjaW5jbHVkZSAiaWt1aS5oIgorI2VuZGlm IC8qIEtVSSAqLworI2VuZGlmIC8qIE9TMiAqLworCitpbnQgb3B0bGluZXMgPSAwOworaW50IGRp ZHNldGxpbiA9IDA7CisKKyNpZmRlZiBORVdGVFAKK2V4dGVybiBpbnQgZnRwZ2V0LCBmdHBpc29w ZW4oKSwgZG9mdHByZXMoKTsKK19QUk9UT1RZUChpbnQgZG9mdHB0eXAsKGludCkpOworX1BST1RP VFlQKFZPSUQgZG9mdHBnbG9iYWx0eXBlLChpbnQpKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwor I2lmZGVmIFZNUworZXh0ZXJuIGludCBiYXRjaDsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVm IGRhdGFnZW5lcmFsCisjaW5jbHVkZSA8cGFja2V0czpjb21tb24uaD4KKyNkZWZpbmUgZmdldHMo c3RyaW5nYnVmLG1heCxmZCkgZGdfZmdldHMoc3RyaW5nYnVmLG1heCxmZCkKKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworCitleHRlcm4gaW50IHhjbWRzcmMsIGhpbnRzLCBjbWZsZ3MsIHdoeWNs b3NlZDsKKworY2hhciAqIGhscHRvayA9IE5VTEw7CisKKyNpZmRlZiBDS19UVEdXU0laCQkJLyog V2hldGhlciB0byB1c2UgbW9yZS1wcm9tcHRpbmcgKi8KK2ludCB4YXNrbW9yZSA9IDE7CQkJLyog TW9tZW50YXJ5IHNldHRpbmcgKi8KK2ludCBzYXZlYXNrICA9IDE7CQkJLyogUGVybWFuZW50IHNl dHRpbmcgKi8KKyNlbHNlCitpbnQgeGFza21vcmUgPSAwOworaW50IHNhdmVhc2sgID0gMDsKKyNl bmRpZiAvKiBDS19UVEdXU0laICovCisKKyNpZm5kZWYgTk9DU0VUUworZXh0ZXJuIGludCBuZmls YzsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIGZjc3RhYltdOworZXh0ZXJuIGludCBmY2hhcnNldDsK KyNlbmRpZiAvKiBOT0NTRVRTICovCisKK2NoYXIgKiBnX3Bzd2QgPSBOVUxMOworaW50IGdfcGNw dCA9IC0xOworaW50IGdfcGZsZyA9IC0xOworCitleHRlcm4gaW50IGNtZF9yb3dzLCBjbWRfY29s czsKKworI2lmZGVmIENLUk9PVAorZXh0ZXJuIGludCBja3Jvb3RlcnI7CisjZW5kaWYgLyogQ0tS T09UICovCisKK2V4dGVybiBpbnQgaW5zZXJ2ZXIsIGZpbGVwZWVrOworCisjaWZkZWYgQ0tMRUFS TgorRklMRSAqIGxlYXJuZnAgPSBOVUxMOworY2hhciAqIGxlYXJuZmlsZSA9IE5VTEw7CitpbnQg bGVhcm5pbmcgPSAwOworI2VuZGlmIC8qIENLTEVBUk4gKi8KKworI2lmbmRlZiBOT1hGRVIKK2V4 dGVybiBpbnQgYXRjYXByLCBhdGRpc28sIG5maWxzLCBtb3ZpbmcsIHByb3RvY29sLCBzZW5kbW9k ZSwgZXBrdGZsZywgc2l6ZSwKKyAgc25kc3JjLCBzZXJ2ZXIsIGRpc3BsYSwgZm5jbnYsIGZuc3Bh dGgsIGZucnBhdGgsIHhmZXJtb2RlLCB1cnBzaXosCisgIHNwc2l6Ziwgc3BzaXosIHNwc2l6ciwg c3BtYXgsIHdzbG90ciwgcHJlZml4aW5nLCBmbmNhY3QsIHJlbGlhYmxlLAorICBzZXRyZWxpYWJs ZTsKKworI2lmZGVmIElLU0RDT05GCitleHRlcm4gaW50IGlrc2RjZjsKKyNlbmRpZiAvKiBJS1NE Q09ORiAqLworCisjaWZkZWYgQ0tfTE9HSU4KK2V4dGVybiBpbnQgaXNndWVzdDsKKyNlbmRpZiAv KiBDS19MT0dJTiAqLworCitleHRlcm4gQ0tfT0ZGX1Qgc2VuZHN0YXJ0OworCitleHRlcm4gY2hh ciAqY21hcmcsICpjbWFyZzIsICoqY21saXN0LCAqZGZ0dHk7CisKK2V4dGVybiBzdHJ1Y3Qga2V5 dGFiIGZudGFiW107IGV4dGVybiBpbnQgbmZudGFiOworZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJb TlBST1RPU107CisKK2ludCBzbmRjbWQgPSAwOwkJLyogTGFzdCBjb21tYW5kIHdhcyBhIFNFTkQt Y2xhc3MgY29tbWFuZC4gKi8KKworaW50IGdfeGZlcm1vZGUgPSAtMTsKK2ludCBnX3Byb3RvICA9 IC0xOworaW50IGdfdXJwc2l6ID0gLTE7CitpbnQgZ19zcHNpemYgPSAtMTsKK2ludCBnX3Nwc2l6 ICA9IC0xOworaW50IGdfc3BzaXpyID0gLTE7CitpbnQgZ19zcG1heCAgPSAtMTsKK2ludCBnX3dz bG90ciA9IC0xOworaW50IGdfcHJlZml4aW5nID0gLTE7CitpbnQgZ19mbmNudiAgPSAtMTsKK2lu dCBnX2Zuc3BhdGggPSAtMTsKK2ludCBnX2ZucnBhdGggPSAtMTsKK2ludCBnX2ZuYWN0ICA9IC0x OworaW50IGdfZGlzcGxhID0gLTE7CitpbnQgZ19zcGF0aCAgPSAtMTsKK2ludCBnX3JwYXRoICA9 IC0xOworY2hhciAqIGdfc2ZpbHRlciA9IE5VTEw7CitjaGFyICogZ19yZmlsdGVyID0gTlVMTDsK KworZXh0ZXJuIGludCBwYXR0ZXJuczsKKyNpZmRlZiBQQVRURVJOUworZXh0ZXJuIGNoYXIgKnR4 dHBhdHRlcm5zW10sICpiaW5wYXR0ZXJuc1tdOworaW50IGdfcGF0dGVybnMgPSAtMTsKKyNlbmRp ZiAvKiBQQVRURVJOUyAqLworaW50IGdfc2tpcGJ1cCA9IC0xOworCisjaWZkZWYgUElQRVNFTkQK K2V4dGVybiBpbnQgdXNlcGlwZXMsIHBpcGVzZW5kOworZXh0ZXJuIGNoYXIgKiBzbmRmaWx0ZXI7 CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmbmRlZiBOT1NQTAorZXh0ZXJuIGludCBzbmR4 bG8sIHNuZHhoaSwgc25keGluOworI2VuZGlmIC8qIE5PU1BMICovCisKK2V4dGVybiBjaGFyIGZz cGVjW107CQkJLyogTW9zdCByZWNlbnQgZmlsZXNwZWMgKi8KK2V4dGVybiBpbnQgZnNwZWNsZW47 CQkJLyogTGVuZ3RoIG9mIGZzcGVjW10gYnVmZmVyICovCisKKyNpZm5kZWYgTk9GUklMTFMKK2V4 dGVybiBpbnQgcm1haWxmOwkJCS8qIE1BSUwgY29tbWFuZCBpdGVtcyAqLworZXh0ZXJuIGNoYXIg b3B0YnVmW107CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworZXh0ZXJuIGludAorICBlbl9jcHks IGVuX2N3ZCwgZW5fZGVsLCBlbl9kaXIsIGVuX2ZpbiwgZW5fZ2V0LCBlbl9ieWUsIGVuX21haSwg ZW5fcHJpLAorICBlbl9ob3MsIGVuX3JlbiwgZW5fc2VuLCBlbl9zcGEsIGVuX3NldCwgZW5fdHlw LCBlbl93aG8sIGVuX3JldCwgZW5feGl0LAorICBlbl9ta2QsIGVuX3JtZCwgZW5fYXNnOworCisj aWZuZGVmIE5PTVNFTkQJCQkJLyogTXVsdGlwbGUgU0VORCAqLworZXh0ZXJuIGNoYXIgKm1zZmls ZXNbXTsKK2ludCBmaWxlc2lubGlzdCA9IDA7CQkJLyogQW5kIEFERCAuLi4gKi8KK2V4dGVybiBz dHJ1Y3QgZmlsZWxpc3QgKiBmaWxlaGVhZDsKK2V4dGVybiBzdHJ1Y3QgZmlsZWxpc3QgKiBmaWxl dGFpbDsKK2V4dGVybiBzdHJ1Y3QgZmlsZWxpc3QgKiBmaWxlbmV4dDsKK2V4dGVybiBpbnQgYWRk bGlzdDsKKyNlbmRpZiAvKiBOT01TRU5EICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGFkZHRh YltdID0geworI2lmZGVmIFBBVFRFUk5TCisgICAgeyAiYmluYXJ5LXBhdHRlcm5zIiwgQUREX0JJ TiwgMCB9LAorI2VuZGlmIC8qIFBBVFRFUk5TICovCisjaWZuZGVmIE5PTVNFTkQKKyAgICB7ICJz ZW5kLWxpc3QiLCBBRERfU05ELCAwIH0sCisjZW5kaWYgLyogTk9NU0VORCAqLworI2lmZGVmIFBB VFRFUk5TCisgICAgeyAidGV4dC1wYXR0ZXJucyIsIEFERF9UWFQsIDAgfSwKKyNlbmRpZiAvKiBQ QVRURVJOUyAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmFkZHRhYiA9IHNp emVvZihhZGR0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7CisKKyNpZm5kZWYgTk9DU0VU Uworc3RydWN0IGtleXRhYiBhc3NvY3RhYltdID0geworICAgIHsgImZpbGUtY2hhcmFjdGVyLXNl dCIsICAgICBBU1NPQ19GQywgMCB9LAorICAgIHsgInRyYW5zZmVyLWNoYXJhY3Rlci1zZXQiLCBB U1NPQ19UQywgMCB9LAorICAgIHsgInhmZXItY2hhcmFjdGVyLXNldCIsICAgICBBU1NPQ19UQywg Q01fSU5WIH0KK307CitzdGF0aWMgaW50IG5hc3NvYyA9IHNpemVvZihhc3NvY3RhYikvc2l6ZW9m KHN0cnVjdCBrZXl0YWIpOworZXh0ZXJuIGludCBhZmNzZXRbTUFYRkNTRVRTKzFdOwkJLyogQ2hh cmFjdGVyLXNldCBhc3NvY2lhdGlvbnMgKi8KK2V4dGVybiBpbnQgYXhjc2V0W01BWFRDU0VUUysx XTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZm5kZWYgQUREQ01ECisjaWZuZGVmIE5PTVNF TkQKKyNkZWZpbmUgQUREQ01ECisjZW5kaWYgLyogTk9NU0VORCAqLworI2lmbmRlZiBBRERDTUQK KyNpZmRlZiBQQVRURVJOUworI2RlZmluZSBBRERDTUQKKyNlbmRpZiAvKiBQQVRURVJOUyAqLwor I2VuZGlmIC8qIEFERENNRCAqLworI2VuZGlmIC8qIEFERENNRCAqLworI2VuZGlmIC8qIE5PWEZF UiAqLworCisvKiBFeHRlcm5hbCBLZXJtaXQgVmFyaWFibGVzLCBzZWUgY2ttYWluLmMgZm9yIGRl c2NyaXB0aW9uLiAqLworCitleHRlcm4geHhfc3RycCB4eHN0cmluZzsKK2V4dGVybiBsb25nIHh2 ZXJudW07CisKK2V4dGVybiBpbnQgbG9jYWwsIHhpdHN0YSwgYmluYXJ5LCBtc2dmbGcsIGVzY2Fw ZSwgZHVwbGV4LCBxdWlldCwgdGxldmVsLAorICBwZmxhZywgemluY250LCBja3hlY2gsIGNhcnJp ZXIsIHdoYXQsIG5vcHVzaCwgaGF2ZWxpbmUsIGJ5ZV9hY3RpdmU7CisjaWZkZWYgVE5DT0RFCitl eHRlcm4gaW50IGRlYnNlczsKK2V4dGVybiBjaGFyIHRuX21zZ1tdOworI2VuZGlmIC8qIFROQ09E RSAqLworCitpbnQgc2xlZXBjYW4gPSAxOworaW50IGdfYmluYXJ5ID0gLTE7CitpbnQgZ19yZWN1 cnNpdmUgPSAtMTsKK2ludCBnX21hdGNoZG90ID0gLTE7CitleHRlcm4gaW50IG5vbGlua3M7CisK K2V4dGVybiBsb25nIHZlcm51bTsKK2V4dGVybiBjaGFyICp2ZXJzaW8sICpjb3B5cmlnaHRbXTsK K2V4dGVybiBjaGFyICpja3hzeXM7CisjaWZuZGVmIE5PSEVMUAorZXh0ZXJuIGNoYXIgKmludHJv dHh0W107CitleHRlcm4gY2hhciAqbmV3c3R4dFtdOworI2VuZGlmIC8qIE5PSEVMUCAqLworCisj aWZuZGVmIE9TMgorI2lmbmRlZiBVTklYCitleHRlcm4gY2hhciAqUFdEQ01EOworI2VuZGlmIC8q IFVOSVggKi8KK2V4dGVybiBjaGFyICpXSE9DTUQ7CisjZW5kaWYgLyogT1MyICovCisKK2V4dGVy biBjaGFyIHR0bmFtZVtdOworCitleHRlcm4gQ0hBUiBzc3RhdGU7CisKK2V4dGVybiBpbnQgbmV0 d29yazsJCQkvKiBIYXZlIGFjdGl2ZSBuZXR3b3JrIGNvbm5lY3Rpb24gKi8KK2V4dGVybiBpbnQg bmV0dHlwZTsJCQkvKiBUeXBlIG9mIG5ldHdvcmsgKi8KK2V4dGVybiBpbnQgdHRucHJvdG87ICAg ICAgICAgICAgICAgICAgICAvKiBORVRfVENQQiBwcm90b2NvbCAqLworCisjaWZuZGVmIE5PRElB TAorZXh0ZXJuIGludCBkaWFsc3RhLCBkaWFsYXRtbywgZGlhbGNvbiwgZGlhbGNxOyAvKiBESUFM IHN0YXR1cywgZXRjLiAqLworI2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZkZWYgQ0tfQVBDCitl eHRlcm4gaW50IGFwY2FjdGl2ZSwgYXBjc3RhdHVzOworI2VuZGlmIC8qIENLX0FQQyAqLworCisj aWZuZGVmIE5PUFVTSAorI2lmbmRlZiBOT0ZSSUxMUworZXh0ZXJuIGNoYXIgZWRpdG9yW107Citl eHRlcm4gY2hhciBlZGl0b3B0c1tdOworZXh0ZXJuIGNoYXIgZWRpdGZpbGVbXTsKKyNlbmRpZiAv KiBOT0ZSSUxMUyAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworCisjaWZkZWYgQlJPV1NFUgorZXh0 ZXJuIGNoYXIgYnJvd3NlcltdOwkJCS8qIFdlYiBicm93c2VyIGFwcGxpY2F0aW9uICovCitleHRl cm4gY2hhciBicm93c29wdHNbXTsJCS8qIFdlYiBicm93c2VyIG9wdGlvbnMgKi8KK2V4dGVybiBj aGFyIGJyb3dzdXJsW107CQkJLyogTW9zdCByZWNlbnQgVVJMICovCisjZW5kaWYgLyogQlJPV1NF UiAqLworI2lmbmRlZiBOT0ZUUAorY2hhciBmdHBhcHBbQ0tNQVhQQVRIKzFdID0geyBOVUwsIE5V TCB9OyAvKiBmdHAgZXhlY3V0YWJsZSAqLworY2hhciBmdHBvcHRzWzEyOF0gPSB7IE5VTCwgTlVM IH07CS8qIGZ0cCBjb21tYW5kLWxpbmUgb3B0aW9ucyAqLworI2VuZGlmIC8qIE5PRlRQICovCitl eHRlcm4gc3RydWN0IGtleXRhYiBvbm9mZltdOwkJLyogT24vT2ZmIGtleXdvcmQgdGFibGUgKi8K KworI2lmZGVmIENLX1RNUERJUgoraW50IGZfdG1wZGlyID0gMDsJCQkvKiBEaXJlY3RvcnkgY2hh bmdlZCB0ZW1wb3JhcmlseSAqLworY2hhciBzYXZkaXJbVE1QRElSTEVOXTsJCQkvKiBGb3Igc2F2 aW5nIGN1cnJlbnQgZGlyZWN0b3J5ICovCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKK2ludCBh Y3RpdmVjbWQgPSAtMTsJCQkvKiBLZXl3b3JkIGluZGV4IG9mIGFjdGl2ZSBjb21tYW5kICovCitp bnQgZG9jb254ID0gLTE7CQkJLyogQ09OTkVDVC1jbGFzcyBjb21tYW5kIGFjdGl2ZSAqLworaW50 IG9vZmxhZyA9IDA7CQkJCS8qIFVzZXItc2V0dGFibGUgb24vb2ZmIGZsYWcgKi8KKworaW50IHJj ZmxhZyA9IDA7CQkJCS8qIFBvaW50ZXIgdG8gaG9tZSBkaXJlY3Rvcnkgc3RyaW5nICovCitpbnQg cmVwYXJzLAkJCQkvKiBSZXBhcnNlIG5lZWRlZCAqLworICAgIHRlY2hvID0gMDsJCQkJLyogVGFr ZSBlY2hvICovCitpbnQgc2VjaG8gPSAxOwkJCQkvKiBTQ1JJUFQgZWNobyAqLworCitpbnQgeGl0 d2FybiA9CQkJLyogV2FybiBhYm91dCBvcGVuIGNvbm5lY3Rpb24gb24gZXhpdCAqLworI2lmZGVm IE5PV0FSTgorMAorI2Vsc2UKKzEKKyNlbmRpZiAvKiBOT1dBUk4gKi8KKzsKKworc3RydWN0IGtl eXRhYiBvbm9mZnN3W10gPSB7CisgICAgeyAiL29mZiIsIDAsIDAgfSwKKyAgICB7ICIvb24iLCAg MSwgMCB9Cit9OworCisjaWZkZWYgQ0tFWEVDCitzdHJ1Y3Qga2V5dGFiIHJlZGlyc3dbXSA9IHsK KyAgICB7ICIvcmVkaXJlY3QiLCAxLCAwIH0KK307CisjZW5kaWYgLyogQ0tFWEVDICovCisKKyNp Zm5kZWYgTk9YTUlUCisvKiBWYXJpYWJsZXMgZm9yIFRSQU5TTUlUIGNvbW1hbmQgKi8KKworaW50 IHhtaXR4ID0gMTsJCQkvKiBXaGV0aGVyIHRvIGVjaG8gZHVyaW5nIFRSQU5TTUlUICovCitpbnQg eG1pdGYgPSAwOwkJCS8qIENoYXJhY3RlciB0byBmaWxsIGVtcHR5IGxpbmVzICovCitpbnQgeG1p dGwgPSAwOwkJCS8qIDAgPSBEb24ndCBzZW5kIGxpbmVmZWVkIHRvbyAqLworaW50IHhtaXRwID0g TEY7CQkJLyogSG9zdCBsaW5lIHByb21wdCAqLworaW50IHhtaXRzID0gMDsJCQkvKiBVc2Ugc2hp ZnQtaW4vc2hpZnQtb3V0LCAwID0gbm8gKi8KK2ludCB4bWl0dyA9IDA7CQkJLyogTWlsbGlzZWNv bmRzIHRvIHBhdXNlIGR1cmluZyBUUkFOU01JVCAqLworaW50IHhtaXR0ID0gMTsJCQkvKiBTZWNv bmRzIHRvIHdhaXQgZm9yIGVhY2ggY2hhciB0byBlY2hvICovCitpbnQgeG1pdGEgPSAxOwkJCS8q IEFjdGlvbiB1cG9uIHRpbWVvdXQgKi8KKworI2RlZmluZSBYTUlfQklOIDEKKyNkZWZpbmUgWE1J X1RYVCAyCisjZGVmaW5lIFhNSV9DTUQgMworI2RlZmluZSBYTUlfVFJBIDQKKyNkZWZpbmUgWE1J X1ZSQiA1CisjZGVmaW5lIFhNSV9RVUkgNgorI2RlZmluZSBYTUlfTk9XIDcKKyNkZWZpbmUgWE1J X05PRSA4CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHhtaXRzd1tdID0gewkvKiBUUkFOU01JVCBj b21tYW5kIG9wdGlvbnMgKi8KKyAgICB7ICIvYmluYXJ5IiwgICAgICAgICAgWE1JX0JJTiwgMCB9 LAorI2lmZGVmIFBJUEVTRU5ECisgICAgeyAiL2NvbW1hbmQiLCAgICAgICAgIFhNSV9DTUQsIENN X0lOVnxDTV9QU0ggfSwKKyNlbmRpZiAvKiBQSVBFU0VORCAqLworICAgIHsgIi9ub2VjaG8iLCAg ICAgICAgICBYTUlfTk9FLCAwIH0sCisgICAgeyAiL25vd2FpdCIsICAgICAgICAgIFhNSV9OT1cs IDAgfSwKKyNpZmRlZiBQSVBFU0VORAorICAgIHsgIi9waXBlIiwgICAgICAgICAgICBYTUlfQ01E LCAwIH0sCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgeyAiL3F1 aWV0IiwgICAgICAgICAgIFhNSV9RVUksIDAgfSwKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAg eyAiL3RleHQiLCAgICAgICAgICAgIFhNSV9UWFQsIDAgfSwKKyAgICB7ICIvdHJhbnNwYXJlbnQi LCAgICAgWE1JX1RSQSwgMCB9LAorI2lmZGVmIENPTU1FTlQKKyAgICB7ICIvdmVyYm9zZSIsICAg ICAgICAgWE1JX1ZSQiwgMCB9LAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB7ICIiLCAwLCAw IH0KK307CisjZGVmaW5lIE5YTUlUU1cgc2l6ZW9mKHhtaXRzdykvc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpIC0gMQorc3RhdGljIGludCBueG1pdHN3ID0gTlhNSVRTVzsKKworI2VuZGlmIC8qIE5PWE1J VCAqLworCisvKiBEZWNsYXJhdGlvbnMgZnJvbSBjaz9maW8uYyBtb2R1bGUgKi8KKworZXh0ZXJu IGNoYXIgKlNQQUNNRCwgKlNQQUNNMjsJCS8qIFNQQUNFIGNvbW1hbmRzICovCisKKy8qIENvbW1h bmQtb3JpZW50ZWQgaXRlbXMgKi8KKworI2lmZGVmIERDTURCVUYKK2V4dGVybiBjaGFyICpjbWRi dWY7CQkJLyogQ29tbWFuZCBidWZmZXJzICovCitleHRlcm4gY2hhciAqYXRtYnVmOworZXh0ZXJu IGNoYXIgKmxpbmU7CQkJLyogQ2hhcmFjdGVyIGJ1ZmZlciBmb3IgYW55dGhpbmcgKi8KK2V4dGVy biBjaGFyICp0bXBidWY7CQkJLyogU2hvcnQgdGVtcG9yYXJ5IHN0cmluZyBidWZmZXIgKi8KK2V4 dGVybiBpbnQgKmlmY21kOworZXh0ZXJuIGludCAqaW50aW1lOworZXh0ZXJuIGludCAqaW5wY2Fz OworI2Vsc2UKK2V4dGVybiBjaGFyIGNtZGJ1ZltdOwkJCS8qIENvbW1hbmQgYnVmZmVycyAqLwor ZXh0ZXJuIGNoYXIgYXRtYnVmW107CitleHRlcm4gY2hhciBsaW5lW107CQkJLyogQ2hhcmFjdGVy IGJ1ZmZlciBmb3IgYW55dGhpbmcgKi8KK2V4dGVybiBjaGFyIHRtcGJ1ZltdOwkJCS8qIFRlbXBv cmFyeSBidWZmZXIgKi8KK2V4dGVybiBpbnQgaWZjbWRbXTsKK2V4dGVybiBpbnQgaW50aW1lW107 CitleHRlcm4gaW50IGlucGNhc1tdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKworI2lmbmRlZiBO T1NQTAorZXh0ZXJuIGNoYXIgKiBwcnN0cmluZ1tdOworI2VuZGlmIC8qIE5PU1BMICovCisKK2No YXIgKmxwOwkJCQkvKiBQb2ludGVyIHRvIGxpbmUgYnVmZmVyICovCisKKyNpZm5kZWYgTk9TUEwK K2ludCB2YXJldmFsID0gMTsJCQkvKiBFdmFsdWF0aW9uIG1ldGhvZCAqLworaW50IHVua21hY3Jv ID0gMDsJCQkvKiBGbGFnIGZvciBpbiBPTl9VTktOT1dOX0NPTU1BTkQgKi8KK2ludCBvbGRldmFs ID0gMDsKK2NoYXIgZXZhbGJ1ZlszM107CQkJLyogRVZBTFVBVEUgcmVzdWx0ICovCitleHRlcm4g Y2hhciAqIGlucGJ1ZjsJCQkvKiBCdWZmZXIgZm9yIElOUFVUIGFuZCBSRUlOUFVUICovCitjaGFy ICppbnBicDsJCQkJLyogQW5kIHBvaW50ZXIgdG8gc2FtZSAqLworaW50IG1fZm91bmQ7CQkJCS8q IE1JTlBVVCByZXN1bHQgKi8KK2ludCBpX2FjdGl2ZSA9IDA7CQkJLyogSU5QVVQgY29tbWFuZCBp cyBhY3RpdmUgKi8KK2NoYXIgKm1zW01JTlBNQVhdOwkJCS8qIFBvaW50ZXJzIHRvIE1JTlBVVCBz dHJpbmdzICovCitzdGF0aWMgaW50IG1waW5pdGVkID0gMDsJCS8qIEZsYWcgdGhleSBoYXZlIGJl ZW4gaW5pdGlhbGl6ZWQgKi8KK3N0YXRpYyBpbnQgbXBbTUlOUE1BWF07CQkJLyogYW5kIE1JTlBV VCBmbGFncyAqLworZXh0ZXJuIGludCBmbmRpYWdzLCBmbmVycm9yLCBmbnN1Y2Nlc3M7CS8qIEZ1 bmN0aW9uIGRpYWdub3N0aWNzICovCisjaWZuZGVmIE5PU0VYUAorY2hhciAqIGxhc3RzZXhwID0g TlVMTDsJCQkvKiBTLUV4cHJlc3Npb25zICovCitjaGFyICogc2V4cHZhbCA9IE5VTEw7CitpbnQg c2V4cGVjaG8gPSBTRVRfQVVUTzsKKyNlbmRpZiAvKiBOT1NFWFAgKi8KKyNlbmRpZiAvKiBOT1NQ TCAqLworCitjaGFyIHBzYXZlW1BST01QVExdID0geyBOVUwgfTsJCS8qIEZvciBzYXZpbmcgJiBy ZXN0b3JpbmcgcHJvbXB0ICovCisKK2V4dGVybiBpbnQgc3VjY2VzczsJCQkvKiBDb21tYW5kIHN1 Y2Nlc3MvZmFpbHVyZSBmbGFnICovCitleHRlcm4gaW50IGNtZGx2bDsJCQkvKiBDdXJyZW50IHBv c2l0aW9uIGluIGNvbW1hbmQgc3RhY2sgKi8KKworI2lmbmRlZiBOT1NQTAoraW50CQkJCQkvKiBT RVQgSU5QVVQgcGFyYW1ldGVycy4gKi8KKy8qIE5vdGUsIElOUFVUIFRJTUVPVVQsIGludGltZVtd LCBpcyBvbiB0aGUgY29tbWFuZC1sZXZlbCBzdGFjay4gKi8KKyAgaW5idWZzaXplID0gMCwJCQkv KiBJTlBVVCBidWZmZXIgc2l6ZSAqLworICBpbmRlZiA9IDEsCQkJCS8qIGRlZmF1bHQgdGltZW91 dCwgc2Vjb25kcyAqLworICBpbmVjaG8gPSAxLAkJCQkvKiAxID0gZWNobyBvbiAqLworICBpbmF1 dG9kbCA9IDAsCQkJCS8qIElOUFVUIGF1dG9kb3dubG9hZCAqLworICBpbmludHIgPSAxLAkJCQkv KiBJTlBVVCBpbnRlcnJ1cGlvbiBhbGxvd2VkICovCisgIGluc2lsZW5jZSA9IDA7CQkJLyogMCA9 IG5vIHNpbGVuY2UgY29uc3RyYWludCAqLworCisjaWZkZWYgQ0tGTE9BVAorQ0tGTE9BVCBpbnNj YWxlID0gMS4wOwkJCS8qIFRpbWVvdXQgc2NhbGUgZmFjdG9yICovCisjZW5kaWYJLyogQ0tGTE9B VCAqLworCisjaWZkZWYgT1MyCitpbnQgaW50ZXJtID0gMTsJCQkJLyogVGVybWluYWwgZW11bGF0 b3IgZGlzcGxheXMgaW5wdXQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KK2ludCBtYWNsdmwgPSAtMTsJ CQkvKiBNYWNybyBuZXN0aW5nIGxldmVsICovCitpbnQgbWVjaG8gPSAwOwkJCQkvKiBNYWNybyBl Y2hvLCAwID0gZG9uJ3QgKi8KK2NoYXIgdmFybmFtWzZdOwkJCQkvKiBGb3IgdmFyaWFibGUgbmFt ZXMgKi8KK2V4dGVybiBpbnQgbWFjYXJnY1tdOwkJCS8qIEFSR0MgZnJvbSBtYWNybyBpbnZvY2F0 aW9uICovCisKK2V4dGVybiBjaGFyICptX2FyZ1tNQUNMRVZFTF1bTkFSR1NdOwkvKiBTdGFjayBv ZiBtYWNybyBhcmd1bWVudHMgKi8KK2V4dGVybiBjaGFyICptcnZhbFtdOworCitleHRlcm4gY2hh ciAqKmFfcHRyW107CQkJLyogQXJyYXkgcG9pbnRlcnMgKi8KK2V4dGVybiBpbnQgYV9kaW1bXTsJ CQkvKiBBcnJheSBkaW1lbnNpb25zICovCitleHRlcm4gaW50IGFfbGlua1tdOworCisjaWZkZWYg RENNREJVRgorZXh0ZXJuIHN0cnVjdCBjbWRwdHIgKmNtZHN0azsJCS8qIFRoZSBjb21tYW5kIHN0 YWNrIGl0c2VsZiAqLworI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgY21kcHRyIGNtZHN0a1tdOwkJLyog VGhlIGNvbW1hbmQgc3RhY2sgaXRzZWxmICovCisjZW5kaWYgLyogRENNREJVRiAqLworCitsb25n IGNrX2FsYXJtID0gMDsJCQkvKiBTRVQgQUxBUk0gdmFsdWUgKi8KK2NoYXIgYWxybV9kYXRlWzI0 XSA9IHsgJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcgfTsKK2NoYXIgYWxybV90 aW1lWzI0XSA9IHsgJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnIH07CisKK3N0cnVjdCBrZXl0 YWIgaW5wdXRzd1tdID0geworICAgIHsgIi9jbGVhciIsICAgSU5QU1dfQ0xSLCAwIH0sCisgICAg eyAiL2NvdW50IiwgICBJTlBTV19DT1UsIENNX0FSRyB9LAorICAgIHsgIi9ub21hdGNoIiwgSU5Q U1dfTk9NLCAwIH0sCisgICAgeyAiL25vd3JhcCIsICBJTlBTV19OT1csIDAgfQorfTsKK3N0YXRp YyBpbnQgbmlucHV0c3cgPSBzaXplb2YoaW5wdXRzdykvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOwor CisvKiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSByZWNvbmNpbGVkIHdpdGggdGhlIGFib3ZlICov CisKKyNpZmRlZiBDT01NRU5UCQkJCS8qIElOUFVUIHN3aXRjaGVzIG5vdCB1c2VkIHlldC4uLiAq Lworc3RhdGljIHN0cnVjdCBrZXl0YWIgaW5zd3RhYltdID0geworI2lmZGVmIENPTU1FTlQKKyAg ICB7ICIvYXNzaWduIiwgICAgICAgSU5fQVNHLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgeyAiL2F1dG9kb3dubG9hZCIsIElOX0FETCwgQ01fQVJHIH0sCisgICAgeyAiL2Nh c2UiLCAgICAgICAgIElOX0NBUywgQ01fQVJHIH0sCisgICAgeyAiL2VjaG8iLCAgICAgICAgIElO X0VDSCwgQ01fQVJHIH0sCisgICAgeyAiL2ludGVycnVwdHMiLCAgIElOX05PSSwgQ01fQVJHIH0s CisgICAgeyAiL3NpbGVuY2UiLCAgICAgIElOX1NJTCwgQ01fQVJHIH0sCisjaWZkZWYgQ09NTUVO VAorICAgIHsgIi9wYXR0ZXJuIiwgICAgICBJTl9QQVQsIENNX0FSRyB9LAorI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5pbnN3dGFiID0gKHNp emVvZihpbnN3dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKworCisjZW5kaWYgLyogTk9TUEwgKi8KKworc3RhdGljIGludCB4LCB5LCB6ID0g MDsJCQkvKiBMb2NhbCB3b3JrZXJzICovCitzdGF0aWMgY2hhciAqczsKKworI2lmZGVmIENLX01J TlBVVAorc3RhdGljIGNoYXIgYzFjaGFyc1tdID0gewkJLyogQzEgY29udHJvbCBjaGFycyBlc2Nl cHQgTlVMICovCisgICAgMDAxLDAwMiwwMDMsMDA0LDAwNSwwMDYsMDA3LDAxMCwwMTEsMDEyLDAx MywwMTQsMDE1LDAxNiwwMTcsMDIwLAorICAgIDAyMSwwMjIsMDIzLDAyNCwwMjUsMDI2LDAyNyww MzAsMDMxLDAzMiwwMzMsMDM0LDAzNSwwMzYsMDM3Cit9OworI2VuZGlmIC8qIENLX01JTlBVVCAq LworCisjZGVmaW5lIHhzeXN0ZW0ocykgenN5c2NtZChzKQorCisvKiBUb3AtTGV2ZWwgSW50ZXJh Y3RpdmUgQ29tbWFuZCBLZXl3b3JkIFRhYmxlICovCisvKiBLZXl3b3JkcyBtdXN0IGJlIGluIGxv d2VyY2FzZSBhbmQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLiAqLworCitzdHJ1Y3Qga2V5dGFiIGNt ZHRhYltdID0geworI2lmbmRlZiBOT1BVU0gKKyAgICB7ICIhIiwJICAgWFhTSEUsIENNX0lOVnxD TV9QU0ggfSwgLyogU2hlbGwgZXNjYXBlICovCisjZWxzZQorICAgIHsgIiEiLAkgICBYWE5PVEFW LCBDTV9JTlZ8Q01fUFNIIH0sCisjZW5kaWYgLyogTk9QVVNIICovCisgICAgeyAiIyIsICAgIAkg ICBYWENPTSwgQ01fSU5WIH0sCS8qIENvbW1lbnQgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICIo IiwgICAgICAgICAgIFhYU0VYUCxDTV9JTlYgfSwJLyogUy1FeHByZXNzaW9uICovCisgICAgeyAi LiIsICAgICAgICAgICBYWERFRiwgQ01fSU5WIH0sCS8qIEFzc2lnbm1lbnQgKi8KKyAgICB7ICI6 IiwgICAgICAgICAgIFhYTEJMLCBDTV9JTlYgfSwJLyogTGFiZWwgKi8KKyNlbmRpZiAvKiBOT1NQ TCAqLworI2lmZGVmIENLX1JFRElSCisjaWZuZGVmIE5PUFVTSAorICAgIHsgIjwiLCAgICAgICAg ICAgWFhGVU4sIENNX0lOVnxDTV9QU0ggfSwgLyogUkVESVJFQ1QgKi8KKyNlbHNlCisgICAgeyAi PCIsICAgICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIFJFRElSRUNUICovCisj ZW5kaWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogQ0tfUkVESVIgKi8KKyNpZm5kZWYgTk9QVVNI CisgICAgeyAiQCIsICAgICAgICAgICBYWFNIRSwgQ01fSU5WfENNX1BTSCB9LCAvKiBEQ0wgZXNj YXBlICovCisjZWxzZQorICAgIHsgIkAiLCAgICAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BT SCB9LCAvKiBEQ0wgZXNjYXBlICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZmRlZiBDS19S RUNBTEwKKyAgICB7ICJeIiwgICAgICAgICAgIFhYUkVETyxDTV9JTlZ8Q01fTk9SIH0sIC8qIFN5 bm9ueW0gZm9yIFJFRE8gKi8KKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyNpZm5kZWYgTk9TUEwK KyAgICB7ICJfYXNnIiwgICAgICAgIFhYQVNYLCAgIENNX0lOViB9LAkvKiBVc2VkIGludGVybmFs bHkgYnkgRk9SLCBldGMgKi8KKyAgICB7ICJfYXNzaWduIiwgICAgIFhYQVNYLCAgIENNX0lOViB9 LAkvKiBVc2VkIGludGVybmFsbHkgYnkgRk9SLCBldGMgKi8KKyAgICB7ICJfZGVjcmVtZW50Iiwg IFhYX0RFQ1IsIENNX0lOViB9LAorICAgIHsgIl9kZWZpbmUiLCAgICAgWFhERlgsICAgQ01fSU5W IH0sCS8qIFVzZWQgaW50ZXJuYWxseSBieSBGT1IsIGV0YyAqLworICAgIHsgIl9ldmFsdWF0ZSIs ICAgWFhfRVZBTCwgQ01fSU5WIH0sCisgICAgeyAiX2ZvcndhcmQiLCAgICBYWFhGV0QsICBDTV9J TlYgfSwJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IFNXSVRDSCAgICovCisgICAgeyAiX2dldGFyZ3Mi LCAgICBYWEdUQSwgICBDTV9JTlYgfSwJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IEZPUiwgZXRjICov CisgICAgeyAiX2luY3JlbWVudCIsICBYWF9JTkNSLCBDTV9JTlYgfSwKKyAgICB7ICJfcHV0YXJn cyIsICAgIFhYUFRBLCAgIENNX0lOViB9LAkvKiBVc2VkIGludGVybmFsbHkgYnkgRk9SLCBldGMg Ki8KKyAgICB7ICJfdW5kZWZpbmUiLCAgIFhYVU5ERlgsIENNX0lOViB9LAorI2VuZGlmIC8qIE5P U1BMICovCisKKyAgICB7ICJhYm91dCIsICAgICAgIFhYVkVSLCAgIENNX0lOViB9LAkvKiBTeW5v bnltIGZvciBWRVJTSU9OICovCisjaWZuZGVmIE5PU1BMCisjaWZkZWYgTkVXRlRQCisgICAgeyAi YWNjb3VudCIsICAgICBYWEFDQ1QsICBDTV9JTlYgfSwgLyogKEZUUCkgQWNjb3VudCAqLworI2Vu ZGlmIC8qIE5FV0ZUUCAqLworI2lmZGVmIEFERENNRAorICAgIHsgImFkZCIsICAgICAgICAgWFhB REQsIDAgfSwJLyogQUREICovCisjZW5kaWYgLyogQUREQ01EICovCisjaWZuZGVmIE5PRElBTAor ICAgIHsgImFuc3dlciIsICAgICAgWFhBTlNXLCBDTV9MT0MgfSwJLyogQU5TV0VSIHRoZSBwaG9u ZSAqLworI2Vsc2UKKyAgICB7ICJhbnN3ZXIiLCAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0Mg fSwgLyogQU5TV0VSIHRoZSBwaG9uZSAqLworI2VuZGlmIC8qIE5PRElBTCAqLworICAgIHsgImFw YyIsICAgICAgICAgWFhBUEMsIDAgfSwJLyogQXBwbGljYXRpb24gUHJvZ3JhbSBDb21tYW5kICov CisjaWZuZGVmIE5PU1BMCisgICAgeyAiYXJyYXkiLCAgICAgICBYWEFSUkFZLCAwIH0sCS8qIEFy cmF5IG9wZXJhdGlvbnMgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgImFzY2lpIiwgICAg ICAgWFhBU0MsIENNX0lOViB9LAkvKiA9PSBTRVQgRklMRSBUWVBFIFRFWFQgKi8KKyAgICB7ICJh c2ciLCAgICAgICAgIFhYQVNTLCBDTV9JTlYgfSwJLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIEFT U0lHTiAqLworICAgIHsgImFzayIsICAgICAgICAgWFhBU0ssIDAgfSwJLyogQVNLIGZvciB0ZXh0 LCBhc3NpZ24gdG8gdmFyaWFibGUgKi8KKyAgICB7ICJhc2txIiwgICAgICAgIFhYQVNLUSwwIH0s CS8qIEFTSyBxdWlldGx5IChubyBlY2hvKSAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgImFzcyIs ICAgICAgICAgWFhBU1MsIENNX0lOVnxDTV9BQlIgfSwgLyogQVNTSUdOICovCisgICAgeyAiYXNz ZXJ0IiwgICAgICBYWEFTU0VSLCBDTV9JTlYgfSwJLyogQVNTRVJUICovCisgICAgeyAiYXNzaWdu IiwgICAgICBYWEFTUywgMCB9LAkvKiBBU1NJR04gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lm bmRlZiBOT1hGRVIKKyNpZm5kZWYgTk9DU0VUUworICAgIHsgImFzc29jaWF0ZSIsICAgWFhBU1NP QywgMCB9LAkvKiBBU1NPQ0lBVEUgKi8KKyNlbHNlCisgICAgeyAiYXNzb2NpYXRlIiwgICBYWE5P VEFWLCBDTV9JTlYgfSwJLyogQVNTT0NJQVRFICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworI2Vu ZGlmIC8qIE5PWEZFUiAqLworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgQ0tfQVVUSEVOVElD QVRJT04KKyAgICB7ICJhdXRoZW50aWNhdGUiLFhYQVVUSCwgMCB9LAkvKiBBdXRoZW50aWNhdGlv biAqLworI2Vsc2UKKyAgICB7ICJhdXRoZW50aWNhdGUiLFhYQVVUSCwgQ01fSU5WIH0sCisjZW5k aWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2Vu ZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAiYmFjayIsICAgICAgICBY WEJBQ0ssIDAgfSwJLyogQkFDSyB0byBwcmV2aW91cyBkaXJlY3RvcnkgKi8KKyNlbHNlCisgICAg eyAiYmFjayIsICAgICAgICBYWE5PVEFWLENNX0lOViB9LAorI2VuZGlmIC8qIE5PRlJJTExTICov CisgICAgeyAiYmVlcCIsICAgICAgICBYWEJFRVAsQ01fSU5WIH0sCS8qIEJFRVAgKi8KKyNpZm5k ZWYgTk9YRkVSCisgICAgeyAiYmluYXJ5IiwgICAgICBYWEJJTiwgQ01fSU5WIH0sCS8qID09IFNF VCBGSUxFIFRZUEUgQklOQVJZICovCisjZW5kaWYgLyogTk9YRkVSICovCisjaWZuZGVmIE5PRlJJ TExTCisgICAgeyAiYnVnIiwgICAgICAgICBYWEJVRywgQ01fSU5WIH0sCS8qIEJVRyByZXBvcnQg aW5zdHJ1Y3Rpb25zICovCisjZWxzZQorICAgIHsgImJ1ZyIsICAgICAgICAgWFhOT1RBViwgQ01f SU5WIH0sCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNpZmRlZiBCUk9XU0VSCisgICAgeyAiYnJv d3NlIiwgICAgICBYWEJST1dTLCBDTV9QU0h8Q01fTE9DIH0sIC8qIEJST1dTRSAoc3RhcnQgYnJv d3NlcikgKi8KKyNlbHNlCisgICAgeyAiYnJvd3NlIiwgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01f UFNIfENNX0xPQyB9LAorI2VuZGlmIC8qIEJST1dTRVIgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAg eyAiYnllIiwgICAgICAgICBYWEJZRSwgMCB9LAkvKiBCWUUgdG8gcmVtb3RlIHNlcnZlciAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAiYyIsICAgICAgICAg ICBYWENPTiwgQ01fSU5WfENNX0FCUnxDTV9MT0MgfSwgLyogKENPTk5FQ1QpICovCisjZW5kaWYg LyogTk9MT0NBTCAqLworI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgImNhdCIsICAgICAgICAgWFhD QVQsIENNX0lOViB9LAkvKiBJbnZpc2libGUgc3lub255bSBmb3IgVFlQRSAqLworI2VuZGlmIC8q IE5PRlJJTExTICovCisjaWZuZGVmIE5PU1BMCisKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAiY2F1 dGlvdXMiLCAgICBYWENBVSwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNlbmRp ZiAvKiBOT1NQTCAqLworCisgICAgeyAiY2QiLCAgICAgICAgICBYWENXRCwgMCB9LAkvKiBDaGFu Z2UgRGlyZWN0b3J5ICovCisgICAgeyAiY2R1cCIsICAgICAgICBYWENEVVAsIENNX0lOViB9LAkv KiBDaGFuZ2UgRGlyZWN0b3J5IFVwICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgUElQRVNF TkQKKyAgICB7ICJjZ2V0IiwgICAgICAgIFhYQ0dFVCwgQ01fSU5WfENNX1BTSCB9LCAvKiBDR0VU ICovCisjZWxzZQorICAgIHsgImNnZXQiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9 LCAvKiBDR0VUICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8K KyAgICB7ICJjaCIsICAgICAgICAgIFhYQ0hLLCAgIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJj aGVjayIsICAgICAgIFhYQ0hLLCAgIDAgfSwJLyogQ0hFQ0sgZm9yIGEgZmVhdHVyZSAqLworI2lm ZGVmIENLX1BFUk1TCisjaWZkZWYgVU5JWAorICAgIHsgImNobW9kIiwgICAgICAgWFhDSE1PRCwg MCB9LAkvKiBDSE1PRCAqLworI2Vsc2UKKyAgICB7ICJjaG1vZCIsICAgICAgIFhYTk9UQVYsIENN X0lOViB9LAorI2VuZGlmIC8qIFVOSVggKi8KKyNlbHNlCisgICAgeyAiY2htb2QiLCAgICAgICBY WE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19QRVJNUyAqLworI2lmZGVmIENLUk9PVAor ICAgIHsgImNocm9vdCIsICAgICAgWFhDSFJULCAgQ01fSU5WIH0sCS8qIENIUk9PVCAqLworI2Vu ZGlmIC8qIENLUk9PVCAqLworICAgIHsgImNrZXJtaXQiLCAgICAgWFhLRVJNSSwgQ01fSU5WIH0s CS8qIENLRVJNSVQgKGxpa2UgS0VSTUlUKSAqLworICAgIHsgImNsIiwgICAgICAgICAgWFhDTE8s ICAgQ01fQUJSfENNX0lOViB9LAorI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgImNsZWFyIiwgICAg ICAgWFhDTEUsIDAgfSwJLyogQ0xFQVIgaW5wdXQgYW5kL29yIGRldmljZSBidWZmZXIgKi8KKyNl bHNlCisgICAgeyAiY2xlYXIiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBO T0ZSSUxMUyAqLworICAgIHsgImNsb3NlIiwJICAgICBYWENMTywgMCB9LAkvKiBDTE9TRSBhIGxv ZyBvciBvdGhlciBmaWxlICovCisgICAgeyAiY2xzIiwgICAgICAgICBYWENMUywgQ01fSU5WIH0s CS8qIENsZWFyIFNjcmVlbiAoQ0xTKSAqLworICAgIHsgImNvbW1lbnQiLCAgICAgWFhDT00sIENN X0lOViB9LAkvKiBJbnRyb2R1Y2UgYSBjb21tZW50ICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7 ICJjb25uZWN0IiwgICAgIFhYQ09OLCBDTV9MT0MgfSwJLyogQmVnaW4gdGVybWluYWwgY29ubmVj dGlvbiAqLworI2Vsc2UKKyAgICB7ICJjb25uZWN0IiwgICAgIFhYTk9UQVYsIENNX0xPQyB9LAor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB7ICJjb250aW51ZSIsICAgIFhYQ09OVCwgIENNX0lO ViB9LAkvKiBDT05USU5VRSAqLworI2lmbmRlZiBOT0ZSSUxMUworI2lmZGVmIFpDT1BZCisgICAg eyAiY28iLCAgICAgICAgICBYWENQWSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgImNvcCIsICAg ICAgICAgWFhDUFksIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJjb3B5IiwgICAgICAgIFhYQ1BZ LCAwIH0sCS8qIENPUFkgYSBmaWxlICovCisjZWxzZQorICAgIHsgImNvcHkiLCAgICAgICAgWFhO T1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogWkNPUFkgKi8KKyAgICB7ICJjb3B5cmlnaHQiLCAg IFhYQ1BSLCBDTV9JTlYgfSwJLyogQ09QWVJJR0hUICovCisjaWZkZWYgWkNPUFkKKyAgICB7ICJj cCIsICAgICAgICAgIFhYQ1BZLCBDTV9JTlYgfSwJLyogQ09QWSBhIGZpbGUgKi8KKyNlbmRpZiAv KiBaQ09QWSAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZuZGVmIE9TMgorICAgIHsgImNxIiwgICAg ICAgICAgWFhDUSwgQ01fSU5WfENNX0xPQyB9LCAvKiBDUSAoY29ubmVjdCBxdWlldGx5KSAqLwor I2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9YRkVSCisj aWZkZWYgUElQRVNFTkQKKyAgICB7ICJjcmVjZWl2ZSIsICAgIFhYQ1JFQyxDTV9JTlZ8Q01fUFNI IH0sIC8qIFJFQ0VJVkUgdG8gYSBjb21tYW5kICovCisgICAgeyAiY3NlbmQiLCAgICAgICBYWENT RU4sQ01fSU5WfENNX1BTSCB9LCAvKiBTRU5EIGZyb20gY29tbWFuZCAqLworI2Vsc2UKKyAgICB7 ICJjcmVjZWl2ZSIsICAgIFhYTk9UQVYsQ01fSU5WfENNX1BTSCB9LAorICAgIHsgImNzZW5kIiwg ICAgICAgWFhOT1RBVixDTV9JTlZ8Q01fUFNIIH0sCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKyNl bmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgeyAiY3dkIiwJ ICAgICBYWENXRCwgICBDTV9JTlYgfSwJLyogVHJhZGl0aW9uYWwgc3lub255bSBmb3IgY2QgKi8K KworI2lmbmRlZiBOT1NQTAorICAgIHsgImRhdGUiLCAgICAgICAgWFhEQVRFLCAgMCB9LAkvKiBE QVRFICovCisgICAgeyAiZGNsIiwgICAgICAgICBYWERDTCwgICBDTV9JTlYgfSwJLyogREVDTEFS RSBhbiBhcnJheSAoc2VlIEFSUkFZKSAqLworICAgIHsgImRlYnVnIiwgICAgICAgWFhERUJVRywg MCB9LAkvKiBQcmludCBhIGRlYnVnZ2luZyBtc2cgWzkuMF0gICovCisgICAgeyAiZGVjbGFyZSIs ICAgICBYWERDTCwgICBDTV9JTlYgfSwJLyogREVDTEFSRSBhbiBhcnJheSAoc2VlIEFSUkFZKSAq LworICAgIHsgImRlY3JlbWVudCIsICAgWFhERUMsICAgMCB9LAkvKiBERUNSRU1FTlQgYSBudW1l cmljIHZhcmlhYmxlICovCisgICAgeyAiZGVmaW5lIiwgICAgICBYWERFRiwgICAwIH0sCS8qIERF RklORSBhIG1hY3JvIG9yIHZhcmlhYmxlICAgKi8KKyNlbHNlCisgICAgeyAiZGF0ZSIsICAgICAg ICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJkY2wiLCAgICAgICAgIFhYTk9UQVYsIENNX0lO ViB9LAorICAgIHsgImRlY2xhcmUiLCAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisgICAgeyAiZGVj cmVtZW50IiwgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJkZWZpbmUiLCAgICAgIFhYTk9U QVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyAg ICB7ICJkZWxldGUiLCAgICAgIFhYREVMLCAwIH0sCS8qIERFTEVURSBhIGZpbGUgKi8KKyNlbHNl CisgICAgeyAiZGVsZXRlIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT0ZS SUxMUyAqLworCisjaWZuZGVmIE5PRElBTAorICAgIHsgImRpYWwiLCAgICAgICAgWFhESUFMLCAg Q01fTE9DIH0sCS8qIERJQUwgYSBwaG9uZSBudW1iZXIgKi8KKyNlbHNlCisgICAgeyAiZGlhbCIs ICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyogTk9ESUFMICovCisK KyNpZmRlZiBOVAorICAgIHsgImRpYWxlciIsICAgICAgWFhESUFMRVIsIENNX0lOViB9LCAvKiBL OTUgRGlhbGVyICovCisjZW5kaWYgLyogTlQgKi8KKworICAgIHsgImRpcmVjdG9yeSIsICAgWFhE SVIsIDAgfSwJLyogRElSRUNUT1JZIG9mIGZpbGVzICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyNp Zm5kZWYgTk9TRVJWRVIKKyAgICB7ICJkaXNhYmxlIiwgICAgIFhYRElTLCAwIH0sCS8qIERJU0FC TEUgYSBzZXJ2ZXIgZnVuY3Rpb24gKi8KKyNlbHNlCisgICAgeyAiZGlzYWJsZSIsICAgICBYWE5P VEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworI2VuZGlmIC8qIE5PRlJJTExT ICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJkbyIsICAgICAgICAgIFhYRE8sICAwIH0sCS8q IERPIChleGVjdXRlKSBhIG1hY3JvICovCisjZWxzZQorICAgIHsgImRvIiwgICAgICAgICAgWFhO T1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIHsgImUiLCAgICAgICAg ICAgWFhFWEksIENNX0lOVnxDTV9BQlIgfSwKKworI2lmbmRlZiBOT0ZSSUxMUworI2lmbmRlZiBO T1hGRVIKKyAgICB7ICJlLXBhY2tldCIsICAgIFhYRVJSLCBDTV9JTlYgfSwJLyogU2VuZCBhbiBF cnJvci1QYWNrZXQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAq LworCisgICAgeyAiZWNobyIsICAgICAgICBYWEVDSCwgMCB9LAkvKiBFQ0hPIHRleHQgKi8KKwor I2lmbmRlZiBOT0ZSSUxMUworI2lmbmRlZiBOT1BVU0gKKyAgICB7ICJlZGl0IiwgICAgICAgIFhY RURJVCwgQ01fUFNIIH0sCS8qIEVESVQgKi8KKyNlbHNlCisgICAgeyAiZWRpdCIsICAgICAgICBY WE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sIC8qIEVESVQgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8K KyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgeyAiZWlnaHRiaXQiLCAgICBYWEVJR0hULCBD TV9JTlYgfSwJLyogRUlHSFRCSVQgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsgImVsc2UiLCAg ICAgICAgWFhFTFMsIENNX0lOViB9LAkvKiBFTFNFIHBhcnQgb2YgSUYgc3RhdGVtZW50ICovCisj ZWxzZQorICAgIHsgImVsc2UiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCS8qIEVMU0UgcGFy dCBvZiBJRiBzdGF0ZW1lbnQgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU0VS VkVSCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAiZW5hYmxlIiwgICAgICBYWEVOQSwgIDAgfSwJ LyogRU5BQkxFIGEgc2VydmVyIGZ1bmN0aW9uICovCisjZWxzZQorICAgIHsgImVuYWJsZSIsICAg ICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBO T1NFUlZFUiAqLworCisjaWZuZGVmIE5PU1BMCisgICAgeyAiZW5kIiwgICAgICAgICBYWEVORCwg IDAgfSwJLyogRU5EIGNvbW1hbmQgZmlsZSBvciBtYWNybyAqLworI2Vsc2UKKyAgICB7ICJlbmQi LCAgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICB7 ICJlcmFzZSIsICAgICAgIFhYREVMLCBDTV9JTlYgfSwJLyogU3lub255bSBmb3IgREVMRVRFICov CisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJldmFsdWF0ZSIsICAgIFhYRVZBTCwgMCB9LAkvKiBF VkFMVUFURSAqLworI2Vsc2UKKyAgICB7ICJldmFsdWF0ZSIsICAgIFhYTk9UQVYsIENNX0lOViB9 LAorI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICB7ICJleCIsICAgICAgICAgIFhYRVhJLCBDTV9J TlZ8Q01fQUJSIH0sIC8qIExldCAiZXgiIHN0aWxsIGJlIEVYSVQgKi8KKworI2lmZGVmIENLRVhF QworICAgIHsgImV4ZWMiLCAgICAgICAgWFhFWEVDLCBDTV9JTlZ8Q01fTE9DIH0sIC8qIGV4ZWMo KSAqLworI2Vsc2UKKyAgICB7ICJleGVjIiwgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0Mg fSwKKyNlbmRpZiAvKiBDS0VYRUMgKi8KKworICAgIHsgImV4aXQiLAkgICBYWEVYSSwgMCB9LAkJ LyogRVhJVCBmcm9tIEMtS2VybWl0ICovCisgICAgeyAiZXh0ZW5kZWQtb3B0aW9ucyIsIFhYWE9Q VFMsQ01fSU5WfENNX0hMUCB9LCAvKiBFeHRlbmRlZC1PcHRpb25zICovCisKKyNpZmRlZiBPUzIK KyAgICB7ICJleHRwcm9jIiwgICAgIFhYQ09NLCBDTV9JTlYgfSwJLyogRHVtbXkgY29tbWFuZCBm b3IgT1MvMiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgImYi LCAgICAgICAgICAgWFhGSU4sIENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxlIGFiYnJldiBm b3IgRklOICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJm YWlsIiwgICAgICAgIFhYRkFJTCwgQ01fSU5WIH0sCS8qIEZBSUwgKi8KKworI2lmbmRlZiBOT1hG RVIKKyAgICB7ICJmYXN0IiwgICAgICAgIFhYRkFTVCwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9Y RkVSICovCisKKyNpZmRlZiBDS0NIQU5ORUxJTworICAgIHsgImZjbG9zZSIsICAgICAgWFhGX0NM LCBDTV9JTlYgfSwJLyogRkNMT1NFICovCisgICAgeyAiZmNvdW50IiwgICAgICBYWEZfQ08sIENN X0lOViB9LAkvKiBGQ09VTlQgKi8KKyAgICB7ICJmZmx1c2giLCAgICAgIFhYRl9GTCwgQ01fSU5W IH0sCS8qIEZGTFVTSCAqLworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKKyNpZm5kZWYgTk9Y RkVSCisgICAgeyAiZmkiLCAgICAgICAgICBYWEZJTiwgQ01fSU5WfENNX0FCUiB9LCAvKiBGSU5J U0ggKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIENLQ0hBTk5FTElPCisgICAgeyAi ZmlsZSIsICAgICAgICBYWEZJTEUsIDAgfSwJLyogRklMRSAqLworI2VuZGlmIC8qIENLQ0hBTk5F TElPICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJmaW4i LCAgICAgICAgIFhYRklOLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEZJTklTSCAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZuZGVmIFVOSVhPUk9TSworICAgIHsgImZpbmQiLCAgICAgICAgWFhH UkVQLCAwIH0sCS8qIEZJTkQgKGdyZXApICovCisjZWxzZQorICAgIHsgImZpbmQiLCAgICAgICAg WFhHUkVQLENNX0lOViB9LAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworCisjaWZuZGVmIE5PWEZF UgorICAgIHsgImZpbmlzaCIsICAgICAgWFhGSU4sIDAgfSwJLyogRklOSVNIICovCisjZW5kaWYg LyogTk9YRkVSICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICB7ICJmaXJld2FsbCIsICAgIFhY RklSRVcsIENNX0lOVnxDTV9ITFAgfSwKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVm IENLQ0hBTk5FTElPCisgICAgeyAiZmxpc3QiLCAgICAgICBYWEZfTEksIENNX0lOViB9LAkvKiBG TElTVCAqLworICAgIHsgImZvcGVuIiwgICAgICAgWFhGX09QLCBDTV9JTlYgfSwJLyogRk9QRU4g Ki8KKyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCisjaWZuZGVmIE5PU1BMCisgICAgeyAiZm8i LCAgICAgICAgICBYWEZPUiwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgYWJicmV2IGZv ci4uLiAqLworICAgIHsgImZvciIsICAgICAgICAgWFhGT1IsIDAgfSwJLyogRk9SIGxvb3AgKi8K KyAgICB7ICJmb3J3YXJkIiwgICAgIFhYRldELCBDTV9JTlYgfSwJLyogRk9SV0FSRCAqLworI2Vu ZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAiZm90IiwJICAgWFhESVIs IENNX0lOViB9LAkvKiAiZm90IiA9ICJkaXIiIChmb3IgQ2hyaXMpICovCisjZW5kaWYgLyogTk9G UklMTFMgKi8KKworI2lmZGVmIENLQ0hBTk5FTElPCisgICAgeyAiZnJlYWQiLCAgICAgIFhYRl9S RSwgQ01fSU5WIH0sCS8qIEZSRUFEICovCisgICAgeyAiZnJld2luZCIsICAgIFhYRl9SVywgQ01f SU5WIH0sCS8qIEZSRVdJTkQgKi8KKyAgICB7ICJmc2VlayIsICAgICAgWFhGX1NFLCBDTV9JTlYg fSwJLyogRlNFRUsgKi8KKyAgICB7ICJmc3RhdHVzIiwgICAgWFhGX1NULCBDTV9JTlYgfSwJLyog RlNUQVRVUyAqLworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKKyNpZmRlZiBUQ1BTT0NLRVQK KyNpZm5kZWYgTk9GVFAKKyNpZmRlZiBTWVNGVFAKKyNpZm5kZWYgTk9QVVNICisgICAgeyAiZnRw IiwJICAgWFhGVFAsICAgQ01fSU5WfENNX1BTSHxDTV9MT0MgfSwgLyogU3lzdGVtIEZUUCAqLwor I2Vsc2UKKyAgICB7ICJmdHAiLAkgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIfENNX0xPQyB9LAor I2VuZGlmIC8qIE5PUFVTSCAqLworI2Vsc2UgIC8qIFNZU0ZUUCAqLworICAgIHsgImZ0cCIsCSAg IFhYRlRQLCAgIDAgfSwJLyogQnVpbHQtaW4gRlRQICovCisjZW5kaWYgLyogU1lTRlRQICovCisj ZWxzZSAgLyogTk9GVFAgKi8KKyAgICB7ICJmdHAiLAkgICBYWE5PVEFWLCBDTV9JTlYgfSwJLyog Tm8gRlRQICovCisjZW5kaWYgLyogTk9GVFAgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKwor I2lmbmRlZiBOT1NQTAorICAgIHsgImZ1bmN0aW9uIiwgICAgWFhGVU5DLCBDTV9JTlZ8Q01fSExQ IH0sIC8qIChmb3IgSEVMUCBGVU5DVElPTikgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZk ZWYgQ0tDSEFOTkVMSU8KKyAgICB7ICJmd3JpdGUiLCAgICAgIFhYRl9XUiwgQ01fSU5WIH0sCS8q IEZXUklURSAqLworI2VuZGlmIC8qIENLQ0hBTk5FTElPICovCisKKyNpZm5kZWYgTk9YRkVSCisg ICAgeyAiZyIsICAgICAgICAgICBYWEdFVCwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUg YWJicmV2IGZvciBHRVQgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJnZSIsICAgICAgICAgIFhY R0VULCBDTV9JTlZ8Q01fQUJSIH0sIC8qIERpdHRvICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyAg ICB7ICJnZXQiLCAgICAgICAgIFhYR0VULCAwIH0sCS8qIEdFVCAqLworI2VuZGlmIC8qIE5PWEZF UiAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgImdldGMiLCAgICAgICAgWFhHRVRDLCAwIH0sCS8q IEdFVEMgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJnZXRrZXljb2RlIiwgIFhYR0VUSywgMCB9LAkv KiBHRVRLRVlDT0RFICovCisjZW5kaWYgLyogT1MyICovCisjaWZuZGVmIE5PRlJJTExTCisgICAg eyAiZ2V0b2siLCAgICAgICBYWEdPSywgMCB9LAkvKiBHRVRPSyAoYXNrIGZvciBZZXMvTm8vT0sp ICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBO T1NQTAorICAgIHsgImdvdG8iLCAgICAgICAgWFhHT1RPLDAgfSwJLyogR09UTyBsYWJlbCBpbiB0 YWtlIGZpbGUgb3IgbWFjcm8gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIFVOSVhPUk9T SworICAgIHsgImdyZXAiLCAgICAgICAgWFhHUkVQLDAgfSwJLyogR1JFUCAoZmluZCkgKi8KKyNl bHNlCisgICAgeyAiZ3JlcCIsICAgICAgICBYWEdSRVAsQ01fSU5WIH0sCS8qIEdSRVAgKGZpbmQp ICovCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisgICAgeyAiaCIsICAgICAgICAgICBYWEhMUCwg Q01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgc3lub255bSBmb3IgSEVMUCAqLworICAgIHsg ImhlIiwgICAgICAgICAgWFhITFAsIENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxlIHN5bm9u eW0gZm9yIEhFTFAgKi8KKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJoZWFkIiwgICAgICAgIFhY SEVBRCwgMCB9LAorI2VuZGlmIC8qIE5PRlJJTExTICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7 ICJoYW5ndXAiLCAgICAgIFhYSEFOLCBDTV9MT0MgfSwJLyogSEFOR1VQIHRoZSBjb25uZWN0aW9u ICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHsgImhkaXJlY3RvcnkiLCAgWFhIRElSLCAg Q01fSU5WIH0sCS8qIERJUiBzb3J0ZWQgYnkgc2l6ZSBiaWdnZXN0IGZpcnN0ICovCisgICAgeyAi SEVMUCIsICAgICAgICBYWEhMUCwgMCB9LAkvKiBEaXNwbGF5IEhFTFAgdGV4dCAqLworI2lmbmRl ZiBOT0hUVFAKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICB7ICJodHRwIiwgICAgICAgIFhYSFRUUCwg MCB9LAkvKiBIVFRQIG9wZXJhdGlvbnMgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRp ZiAvKiBOT0hUVFAgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJpIiwgICAgICAgICAgIFhYSU5Q LCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlzaWJsZSBzeW5vbnltIGZvciBJTlBVVCAqLworICAg IHsgImlmIiwgICAgICAgICAgWFhJRiwgIDAgfSwJICAgICAvKiBJRiAoIGNvbmRpdGlvbiApIGNv bW1hbmQgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICB7ICJpa3NkIiwgICAgICAgIFhYSUtTRCwg Q01fSU5WIH0sCSAgICAgLyogTWFrZSBjb25uZWN0aW9uIHRvIElLU0QgKi8KKyNlbHNlCisgICAg eyAiaWtzZCIsICAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KKyAgICB7ICJpbiIsICAgICAgICAgIFhYSU5QLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIEludmlz aWJsZSBzeW5vbnltIGZvciBJTlBVVCAqLworICAgIHsgImluY3JlbWVudCIsICAgWFhJTkMsIDAg fSwJLyogSW5jcmVtZW50IGEgbnVtZXJpYyB2YXJpYWJsZSAqLworICAgIHsgImlucHV0IiwgICAg ICAgWFhJTlAsIDAgfSwJLyogSU5QVVQgdGV4dCBmcm9tIGNvbW0gZGV2aWNlICovCisjZW5kaWYg LyogTk9TUEwgKi8KKworI2lmbmRlZiBOT0hFTFAKKyAgICB7ICJpbnQiLCAgICAgICAgIFhYSU5U LCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiaW50ciIsICAgICAgICBYWElOVCwgQ01fSU5WfENN X0FCUiB9LAorICAgIHsgIklOVFJPIiwgICAgICAgWFhJTlQsIDAgfSwKKyAgICB7ICJpbnRyb2R1 Y3Rpb24iLFhYSU5ULCBDTV9JTlYgfSwJLyogUHJpbnQgaW50cm9kdWN0b3J5IHRleHQgKi8KKyNl bHNlCisgICAgeyAiaW50cm8iLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJpbnRy b2R1Y3Rpb24iLFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PSEVMUCAqLworCisjaWZk ZWYgT1MyCisgICAgeyAiazk1IiwgICAgICAgICBYWEtFUk1JLCBDTV9JTlYgfSwJLyogSG1tbSB3 aGF0J3MgdGhpcy4uLiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PU1BMCisgICAg eyAia2NkIiwgICAgICAgICBYWEtDRCwgICAwICAgICAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLwor CisgICAgeyAia2VybWl0IiwgICAgICBYWEtFUk1JLCBDTV9JTlYgfSwKKworI2lmZGVmIE9TMgor I2lmbmRlZiBOT0tWRVJCUworICAgIHsgImt2ZXJiIiwgICAgICAgWFhLVlJCLCBDTV9JTlZ8Q01f SExQIH0sIC8qIEtleWJvYXJkIHZlcmIgKi8KKyNlbmRpZiAvKiBOT0tWRVJCUyAqLworI2VuZGlm IC8qIE9TMiAqLworCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAibCIsICAgICAgICAgICBYWExP RywgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgc3lub255bSBmb3IgbG9nICovCisjZW5k aWYgLyogTk9GUklMTFMgKi8KKworICAgIHsgImxjZCIsICAgICAgICAgWFhMQ1dELCBDTV9JTlYg fSwKKyAgICB7ICJsY2R1cCIsICAgICAgIFhYTENEVSwgQ01fSU5WIH0sCisgICAgeyAibGN3ZCIs ICAgICAgICBYWExDV0QsIENNX0lOViB9LAorICAgIHsgImxkZWxldGUiLCAgICAgWFhMREVMLCBD TV9JTlYgfSwKKyAgICB7ICJsZGlyZWN0b3J5IiwgIFhYTERJUiwgQ01fSU5WIH0sCisKKyNpZmRl ZiBDS0xFQVJOCisgICAgeyAibGVhcm4iLCAgICAgICBYWExFQVJOLCAwIH0sCS8qIExFQVJOIC0g YXV0b21hdGljIHNjcmlwdCB3cml0aW5nICovCisjZWxzZQorICAgIHsgImxlYXJuIiwgICAgICAg WFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0tMRUFSTiAqLworCisgICAgeyAibGkiLCAg ICAgICAgICBYWExOT1VULCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiTElDRU5TRSIsICAgICBY WENQUiwgMCB9LAkvKiBMSUNFTlNFICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJsaW5lb3V0 IiwgICAgIFhYTE5PVVQsIDAgfSwJLyogTElORU9VVCA9IE9VVFBVVCArIGVvbCAqLworI2VuZGlm IC8qIE5PU1BMICovCisKKyNpZmRlZiBOVAorICAgIHsgImxpbmsiLCAgICAgICAgWFhMSU5LLCAw IH0sICAgICAgIC8qIExJTksgc291cmNlIGRlc3RpbmF0aW9uICovCisjZW5kaWYgLyogTlQgKi8K KworICAgIHsgImxta2RpciIsICAgICAgWFhMTUtELCBDTV9JTlYgfSwKKyAgICB7ICJsbXYiLCAg ICAgICAgIFhYTFJFTiwgQ01fSU5WIH0sCisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJsbyIs ICAgICAgICAgIFhYTE9HLCAgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgc3lub255bSBm b3IgbG9nICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsg ImxvY2FsIiwgICAgICAgWFhMT0NBTCwgQ01fSU5WIH0sCS8qIExPQ0FMIHZhcmlhYmxlIGRlY2xh cmF0aW9uICovCisjZWxzZQorICAgIHsgImxvY2FsIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0s CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIHsgImxvY3VzIiwgICAgICAgWFhMT0NVLCBDTV9J TlZ8Q01fSExQIH0sIC8qICJoZWxwIGxvY3VzIiAqLworCisgICAgeyAibG9nIiwgIAkgICAgIFhY TE9HLCAwIH0sCS8qIE9wZW4gYSBsb2cgZmlsZSAqLworCisgICAgeyAibG9naW4iLCAgICAgICBY WExPR0lOLCAgMCB9LAkvKiAoUkVNT1RFKSBMT0dJTiB0byBzZXJ2ZXIgb3IgSUtTRCAqLworICAg IHsgImxvZ291dCIsICAgICAgWFhMT0dPVVQsIDAgfSwJLyogTE9HT1VUIGZyb20gc2VydmVyIG9y IElLU0QgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworI2lmbmRlZiBOT0RJQUwKKyAgICB7ICJsb29r dXAiLCAgICAgIFhYTE9PSywgIDAgfSwJLyogTE9PS1VQICovCisjZWxzZQorICAgIHsgImxvb2t1 cCIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9ESUFMICovCisKKyAgICB7 ICJscHdkIiwgICAgICAgIFhYTFBXRCwgQ01fSU5WIH0sCisgICAgeyAibHJlbmFtZSIsICAgICBY WExSRU4sIENNX0lOViB9LAorICAgIHsgImxybWRpciIsICAgICAgWFhMUk1ELCBDTV9JTlYgfSwK KworI2lmZGVmIFVOSVhPUk9TSworICAgIHsgImxzIiwgICAgICAgICAgWFhMUywgIENNX0lOVnxD TV9QU0ggfSwgLyogVU5JWCBscyBjb21tYW5kICovCisjZWxzZQorICAgIHsgImxzIiwgICAgICAg ICAgWFhESVIsIENNX0lOViB9LAkvKiBJbnZpc2libGUgc3lub255bSBmb3IgRElSICovCisjZW5k aWYgLyogVU5JWE9ST1NLICovCisjaWZuZGVmIE5PWEZFUgorICAgIHsgIm1haWwiLCAgICAgICAg WFhNQUksIDAgfSwJLyogU2VuZCBhIGZpbGUgYXMgZS1tYWlsICovCisjZW5kaWYgLyogTk9YRkVS ICovCisjaWZuZGVmIE5PSEVMUAorICAgIHsgIm1hbnVhbCIsICAgICAgWFhNQU4sIENNX1BTSCB9 LAkvKiBNQU4oVUFMKSAqLworI2Vsc2UKKyAgICB7ICJtYW51YWwiLCAgICAgIFhYTk9UQVYsIENN X0lOVnxDTV9QU0ggfSwKKyNlbmRpZiAvKiBOT0hFTFAgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAq LworI2lmZGVmIENLX01LRElSCisgICAgeyAibWQiLCAgICAgICAgICBYWE1LRElSLCBDTV9JTlYg fSwJLyogU3lub255bSBmb3IgTUtESVIgKi8KKyNlbmRpZiAvKiBDS19NS0RJUiAqLworICAgIHsg Im1lc3NhZ2UiLCAgICAgWFhNU0csIDAgfSwJLyogUHJpbnQgZGVidWdnaW5nIG1lc3NhZ2UgKi8K KyNpZmRlZiBDS19NSU5QVVQKKyAgICB7ICJtaW5wdXQiLCAgICAgIFhYTUlOUCwgMCB9LAkvKiBN SU5QVVQgKi8KKyNlbHNlCisgICAgeyAibWlucHV0IiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwK KyNlbmRpZiAvKiBDS19NSU5QVVQgKi8KKyNpZm5kZWYgTk9NU0VORAorICAgIHsgIm1nZXQiLCAg ICAgICAgWFhNR0VULCAwIH0sCS8qIE1HRVQgKi8KKyNlbHNlCisgICAgeyAibWdldCIsICAgICAg ICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT01TRU5EICovCisjaWZkZWYgQ0tfTUtE SVIKKyAgICB7ICJta2RpciIsICAgICAgIFhYTUtESVIsIDAgfSwJLyogTUtESVIgKi8KKyNlbHNl CisgICAgeyAibWtkaXIiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19N S0RJUiAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT01TRU5ECisgICAgeyAibW1vdmUi LCAgICAgICBYWE1NT1ZFLCAwIH0sCS8qIE1NT1ZFICovCisjZWxzZQorICAgIHsgIm1tb3ZlIiwg ICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9NU0VORCAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAibW9yZSIsICAgICAgICBYWE1P UkUsIENNX0lOViB9LAkvKiBNT1JFICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRl ZiBOT1hGRVIKKyAgICB7ICJtb3ZlIiwgICAgICAgIFhYTU9WRSwgMCB9LAkvKiBNT1ZFICAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PU1BMCisgICAgeyAibXBhdXNlIiwgICAg ICBYWE1TTCwgQ01fSU5WIH0sCS8qIE1pbGxpc2Vjb25kIHNsZWVwICovCisjZWxzZQorICAgIHsg Im1wYXVzZSIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKwor I2lmbmRlZiBOT1hGRVIKKyNpZm5kZWYgTk9NU0VORAorICAgIHsgIm1wdXQiLCAgICAgICAgWFhN U0UsIENNX0lOViB9LAkvKiBNUFVUID0gTVNFTkQgKi8KKyAgICB7ICJtcyIsICAgICAgICAgIFhY TVNFLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAibXNlbmQiLCAgICAgICBYWE1TRSwgMCB9LAkv KiBNdWx0aXBsZSBTRU5EICovCisjZWxzZQorICAgIHsgIm1wdXQiLCAgICAgICAgWFhOT1RBViwg Q01fSU5WIH0sCisgICAgeyAibXNlbmQiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRp ZiAvKiBOT01TRU5EICovCisjZW5kaWYgLyogTk9YRkVSICovCisgICAgeyAibXNnIiwgICAgICAg ICBYWE1TRywgQ01fSU5WIH0sCS8qIFByaW50IGRlYnVnZ2luZyBtZXNzYWdlICovCisjaWZuZGVm IE5PU1BMCisgICAgeyAibXNsZWVwIiwgICAgICBYWE1TTCwgMCB9LAkvKiBNaWxsaXNlY29uZCBz bGVlcCAqLworI2Vsc2UKKyAgICB7ICJtc2xlZXAiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAor I2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAibXYiLCAgICAgICAg ICBYWFJFTiwgQ01fSU5WIH0sCS8qIFN5bm9ueW0gZm9yIHJlbmFtZSAqLworI2VuZGlmIC8qIE5P RlJJTExTICovCisjaWZuZGVmIE5PSEVMUAorICAgIHsgIm5ld3MiLCAgICAgICAgWFhORVcsIENN X0lOViB9LAkvKiBEaXNwbGF5IE5FV1Mgb2YgbmV3IGZlYXR1cmVzICovCisjZWxzZQorICAgIHsg Im5ld3MiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9IRUxQICovCisg ICAgeyAibm9sb2NhbCIsICAgICBYWE5MQ0wsIENNX0lOViB9LAkvKiBEaXNhYmxlIFNFVCBMSU5F IC8gU0VUIEhPU1QgKi8KKyAgICB7ICJub3B1c2giLCAgICAgIFhYTlBTSCwgQ01fSU5WIH0sCS8q IERpc2FibGUgUFVTSCBjb21tYW5kL2ZlYXR1cmVzICovCisjaWZkZWYgT1MyCisgICAgeyAibm9z Y3JvbGwiLCAgICBYWE5TQ1IsIENNX0lOViB9LCAgLyogRGlzYWJsZSBzY3JvbGwgb3BlcmF0aW9u cyAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgIm8iLCAgICAgICAg ICAgWFhPVVQsIENNX0lOVnxDTV9BQlIgfSwgLyogSW52aXNpYmxlIHN5bm9ueW0gZm9yIE9VVFBV VCAqLworICAgIHsgIm9wZW4iLCAgICAgICAgWFhPUEUsIDAgfSwJLyogT1BFTiBmaWxlIGZvciBy ZWFkaW5nIG9yIHdyaXRpbmcgKi8KKyNlbHNlCisgICAgeyAib3BlbiIsICAgICAgICBYWE9QRSwg Q01fSU5WIH0sCS8qIE9QRU4gKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT0hFTFAK KyAgICB7ICJvcHRpb25zIiwgICAgIFhYT1BUUyxDTV9JTlZ8Q01fSExQIH0sIC8qIE9wdGlvbnMg Ki8KKyNlbmRpZiAvKiBOT0hFTFAgKi8KKyAgICB7ICJvcmllbnRhdGlvbiIsIFhYT1JJRSwgMCB9 LAorI2lmbmRlZiBOT1NQTAorICAgIHsgIm91dHB1dCIsICAgICAgWFhPVVQsIDAgfSwJLyogT1VU UFVUIHRleHQgdG8gY29tbSBkZXZpY2UgKi8KKyNlbHNlCisgICAgeyAib3V0cHV0IiwgICAgICBY WE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIEFOWVgyNQorI2lm bmRlZiBJQk1YMjUKKyAgICB7ICJwYWQiLCAgICAgICAgIFhYUEFELCBDTV9MT0MgfSwJLyogWC4z IFBBRCBjb21tYW5kcyAqLworI2VuZGlmIC8qIElCTVgyNSAqLworI2VuZGlmIC8qIEFOWVgyNSAq LworCisjaWZkZWYgTkVXRlRQCisgICAgeyAicGFzc2l2ZSIsICAgICBYWFBBU1YsIENNX0lOViB9 LAkvKiAoRlRQKSBQQVNTSVZFICovCisjZW5kaWYgLyogTkVXRlRQICovCisKKyNpZm5kZWYgTk9I RUxQCisgICAgeyAicGF0dGVybnMiLCAgICBYWFBBVCxDTV9JTlZ8Q01fSExQIH0sIC8qIFBhdHRl cm4gc3ludGF4ICovCisjZW5kaWYgLyogTk9IRUxQICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7 ICJwYXVzZSIsICAgICAgIFhYUEFVLCAwIH0sCS8qIFNsZWVwIGZvciBzcGVjaWZpZWQgaW50ZXJ2 YWwgKi8KKyNlbHNlCisgICAgeyAicGF1c2UiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNl bmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT0RJQUwKKyAgICB7ICJwZGlhbCIsICAgICAgIFhY UERJQSwgIENNX0xPQyB9LAkvKiBQRElBTCAocGFydGlhbCBkaWFsKSAqLworI2Vsc2UKKyAgICB7 ICJwZGlhbCIsICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9MT0MgfSwKKyNlbmRpZiAvKiBOT0RJ QUwgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9QVVNICisgICAgeyAicGluZyIsICAg ICAgICBYWFBORywgQ01fSU5WfENNX1BTSHxDTV9MT0MgfSwgLyogUElORyAqLworI2Vsc2UKKyAg ICB7ICJwaW5nIiwgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0h8Q01fTE9DIH0sCisjZW5k aWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZkZWYgTkVUQ01ECisj aWZuZGVmIE5PUFVTSAorICAgIHsgInBpcGUiLCAgICAgICAgWFhQSVBFLCBDTV9QU0ggfSwJLyog UElQRSAqLworI2Vsc2UKKyAgICB7ICJwaXBlIiwgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9Q U0ggfSwgLyogUElQRSAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworI2VuZGlmIC8qIE5FVENNRCAq LworCisjaWZuZGVmIE5PU1BMCisgICAgeyAicG9wIiwgICAgICAgICBYWEVORCwgQ01fSU5WIH0s CS8qIEludmlzaWJsZSBzeW5vbnltIGZvciBFTkQgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lm bmRlZiBOT0ZSSUxMUworICAgIHsgInByaW50IiwgICAgICAgWFhQUkksIDAgfSwJLyogUFJJTlQg YSBmaWxlIGxvY2FsbHkgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgeyAicHJvbXB0 IiwgICAgICBYWFBST01QLCBDTV9JTlYgfSwJLyogR28gaW50ZXJhY3RpdmUgKGZyb20gc2NyaXB0 KSAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIENLX1JFU0VORAorICAgIHsgInBzZW5kIiwg ICAgICAgWFhQU0VOLCBDTV9JTlYgfSwJLyogUFNFTkQgKi8KKyNlbHNlCisgICAgeyAicHNlbmQi LCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKworI2lmZGVmIE5FVFBUWQorICAgIHsgInB0eSIsICAgICAgICAgWFhQ VFksIENNX1BTSCB9LAkvKiBQVFkgKi8KKyNlbHNlCisgICAgeyAicHR5IiwgICAgICAgICBYWE5P VEFWLCBDTV9JTlZ8Q01fUFNIIH0sCisjZW5kaWYgLyogTkVUUFRZICovCisKKyNpZm5kZWYgTk9Q VVNICisgICAgeyAicHUiLCAgICAgICAgICBYWFNIRSwgQ01fSU5WfENNX0FCUnxDTV9QU0ggfSwg LyogUFUgPSBQVVNIICovCisjZW5kaWYgLyogTk9QVVNIICovCisKKyNpZmRlZiBDS1BVUkdFCisg ICAgeyAicHVyZ2UiLCAgICAgICBYWFBVUkdFLCAwIH0sCS8qIFBVUkdFIChyZWFsKSAqLworI2Vs c2UKKyNpZmRlZiBWTVMKKyAgICB7ICJwdXJnZSIsICAgICAgIFhYUFVSR0UsIDAgfSwJLyogUFVS R0UgKGZha2UpICovCisjZWxzZQorICAgIHsgInB1cmdlIiwgICAgICAgWFhOT1RBViwgQ01fSU5W IH0sCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ0tQVVJHRSAqLworCisjaWZuZGVmIE5P UFVTSAorICAgIHsgInB1c2giLCAgICAgICAgWFhTSEUsIENNX1BTSCB9LAkvKiBQVVNIIGNvbW1h bmQgKGxpa2UgUlVOLCAhKSAqLworI2Vsc2UKKyAgICB7ICJwdXNoIiwgICAgICAgIFhYTk9UQVYs IENNX0lOVnxDTV9QU0ggfSwKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmbmRlZiBOT1hGRVIK KyAgICB7ICJwdXQiLCAgICAgICAgIFhYU0VOLCBDTV9JTlYgfSwJLyogUFVUID0gU0VORCAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgVU5JWAorI2lmbmRlZiBOT1BVVEVOVgorICAg IHsgInB1dGVudiIsICAgICAgWFhQVVRFLCBDTV9JTlYgfSwJLyogUFVURU5WICovCisjZW5kaWYJ LyogTk9QVVRFTlYgKi8KKyNlbmRpZgkvKiBVTklYICovCisKKyAgICB7ICJwd2QiLCAgICAgICAg IFhYUFdELCAwIH0sCS8qIFByaW50IFdvcmtpbmcgRGlyZWN0b3J5ICovCisgICAgeyAicSIsICAg ICAgICAgICBYWFFVSSwgQ01fSU5WfENNX0FCUiB9LCAvKiBJbnZpc2libGUgc3lub255bSBmb3Ig UVVJVCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInF1ZXJ5IiwgICAgICAgWFhSUVVFLENN X0lOViB9LAkvKiAoPSBSRU1PVEUgUVVFUlkpICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyAg ICB7ICJxdWl0IiwgICAgICAgIFhYUVVJLCAwIH0sCS8qIFFVSVQgZnJvbSBwcm9ncmFtID0gRVhJ VCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInIiLCAgICAgICAgICAgWFhSRUMsIENNX0lO VnxDTV9BQlIgfSwgLyogSW52IHN5bm9ueW0gZm9yIFJFQ0VJVkUgKi8KKyNlbmRpZiAvKiBOT1hG RVIgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJyYXNnIiwgICAgICAgIFhYUkFTRywgQ01f SU5WIH0sCS8qIFJFTU9URSBBU1NJR04gKi8KKyAgICB7ICJyYXNzaWduIiwgICAgIFhYUkFTRywg Q01fSU5WIH0sCS8qIGRpdHRvICovCisgICAgeyAicmNkIiwgICAgICAgICBYWFJDV0QsIENNX0lO ViB9LAkvKiBSRU1PVEUgQ0QgKi8KKyAgICB7ICJyY2R1cCIsICAgICAgIFhYUkNEVVAsQ01fSU5W IH0sCS8qIFJFTU9URSBDRCAqLworICAgIHsgInJjb3B5IiwgICAgICAgWFhSQ1BZLCBDTV9JTlYg fSwJLyogUkVNT1RFIENPUFkgKi8KKyAgICB7ICJyY3dkIiwgICAgICAgIFhYUkNXRCwgQ01fSU5W IH0sCS8qIFJFTU9URSBDV0QgKi8KKyAgICB7ICJyZGVsZXRlIiwgICAgIFhYUkRFTCwgQ01fSU5W IH0sCS8qIFJFTU9URSBERUxFVEUgKi8KKyAgICB7ICJyZGlyZWN0b3J5IiwgIFhYUkRJUiwgQ01f SU5WIH0sCS8qIFJFTU9ERSBESVJFQ1RPUlkgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lm bmRlZiBOT1NQTAorICAgIHsgInJlYWQiLCAgICAgICAgWFhSRUEsIDAgfSwJLyogUkVBRCBhIGxp bmUgZnJvbSBhIGZpbGUgKi8KKyNlbHNlCisgICAgeyAicmVhZCIsICAgICAgICBYWE5PVEFWLCBD TV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInJl Y2VpdmUiLCAgICAgWFhSRUMsIDAgfSwJLyogUkVDRUlWRSBmaWxlcyAqLworI2VuZGlmIC8qIE5P WEZFUiAqLworCisjaWZuZGVmIE5PRElBTAorICAgIHsgInJlZCIsICAgICAgICAgWFhSRUQsIENN X0lOVnxDTV9BQlJ8Q01fTE9DIH0sIC8qIEludiBzeW4gZm9yIFJFRElBTCAqLworICAgIHsgInJl ZGkiLCAgICAgICAgWFhSRUQsIENNX0lOVnxDTV9BQlJ8Q01fTE9DIH0sIC8qIGRpdHRvICovCisg ICAgeyAicmVkaWFsIiwgICAgICBYWFJFRCwgQ01fTE9DIH0sCS8qIFJFRElBTCBsYXN0IERJQUwg bnVtYmVyICovCisjZWxzZQorICAgIHsgInJlZCIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WfENN X0xPQyB9LAorICAgIHsgInJlZGkiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xPQyB9LAor ICAgIHsgInJlZGlhbCIsICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xPQyB9LAorI2VuZGlmIC8q IE5PRElBTCAqLworCisjaWZkZWYgQ0tfUkVESVIKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9QVVNI CisgICAgeyAicmVkaXJlY3QiLCAgICBYWEZVTiwgQ01fSU5WfENNX1BTSCB9LCAvKiBSRURJUkVD VCAqLworI2Vsc2UKKyAgICB7ICJyZWRpcmVjdCIsICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0gg fSwKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNlbHNlIC8qIE9TMiAqLworI2lmbmRlZiBOT1BVU0gK KyAgICB7ICJyZWRpcmVjdCIsICAgIFhYRlVOLCBDTV9QU0ggfSwJLyogUkVESVJFQ1QgKi8KKyNl bHNlCisgICAgeyAicmVkaXJlY3QiLCAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNIIH0sCisjZW5k aWYgLyogTk9QVVNIICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ0tfUkVESVIgKi8K KworI2lmZGVmIENLX1JFQ0FMTAorICAgIHsgInJlZG8iLCAgICAgICAgWFhSRURPLCAgQ01fTk9S IH0sCS8qIFJFRE8gKi8KKyNlbHNlCisgICAgeyAicmVkbyIsICAgICAgICBYWE5PVEFWLCBDTV9J TlYgfSwKKyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKworI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBD S19SRVNFTkQKKyAgICB7ICJyZWdldCIsICAgICAgIFhYUkVHRVQsIDAgfSwJLyogUkVHRVQgKi8K KyNlbHNlCisgICAgeyAicmVnZXQiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAv KiBDS19SRVNFTkQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAorICAg IHsgInJlaW5wdXQiLCAgICAgWFhSRUksIENNX0lOViB9LAkvKiBSRUlOUFVUIChmcm9tIElOUFVU IGJ1ZmZlcikgKi8KKyNlbHNlCisgICAgeyAicmVpbnB1dCIsICAgICBYWE5PVEFWLCBDTV9JTlYg fSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmZGVmIEFERENNRAor ICAgIHsgInJlbSIsICAgICAgICAgWFhSRU0sIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJyZW1v IiwgICAgICAgIFhYUkVNLCBDTV9JTlZ8Q01fQUJSIH0sCisjZW5kaWYgLyogQUREQ01EICovCisg ICAgeyAicmVtb3RlIiwJICAgICBYWFJFTSwgMCB9LAkvKiBTZW5kIFJFTU9URSBjb21tYW5kIHRv IHNlcnZlciAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQUREQ01ECisgICAgeyAi cmVtb3ZlIiwgICAgICBYWFJFTVYsMCB9LAkvKiBSRU1PVkUgKHNvbWV0aGluZyBmcm9tIGEgbGlz dCkgKi8KKyNlbHNlCisgICAgeyAicmVtb3ZlIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNl bmRpZiAvKiBBRERDTUQgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworI2lmbmRlZiBOT1JFTkFNRQor ICAgIHsgInJlbmFtZSIsICAgICAgWFhSRU4sIDAgfSwJLyogUkVOQU1FIGEgbG9jYWwgZmlsZSAq LworI2Vsc2UKKyAgICB7ICJyZW5hbWUiLCAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlm IC8qIE5PUkVOQU1FICovCisgICAgeyAicmVwbGF5IiwgICAgICBYWFRZUCwgQ01fSU5WIH0sCS8q IFJFUExBWSAoZm9yIG5vdywganVzdCB0eXBlKSAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisK KyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgeyAicmVwIiwgICAgICAgICBY WFRZUCwgQ01fSU5WfENNX0FCUiB9LCAgLyogUkVQTEFZIGFiYnJldmlhdGlvbiAqLworICAgIHsg InJlcHV0IiwgICAgICAgWFhSU0VOLCBDTV9JTlYgfSwJICAgICAgLyogUkVQVVQgPSBSRVNFTkQg Ki8KKyAgICB7ICJyZXMiLCAgICAgICAgIFhYUlNFTiwgQ01fSU5WfENNX0FCUiB9LCAvKiBSRVNF TkQgKi8KKyAgICB7ICJyZXNlIiwgICAgICAgIFhYUlNFTiwgQ01fSU5WfENNX0FCUiB9LCAvKiBS RVNFTkQgKi8KKyAgICB7ICJyZXNlbmQiLCAgICAgIFhYUlNFTiwgMCB9LAkvKiBSRVNFTkQgKi8K KyNlbHNlCisgICAgeyAicmVwdXQiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJy ZXMiLCAgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorICAgIHsgInJlc2UiLCAgICAgICAgWFhO T1RBViwgQ01fSU5WIH0sCisgICAgeyAicmVzZW5kIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwK KyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworICAgIHsgInJl c2V0IiwgICAgICAgWFhSRVNFVCwgQ01fSU5WIH0sCS8qIFJFU0VUICovCisKKyNpZmRlZiBDS19S RVNFTkQKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJyZXQiLCAgICAgICAgIFhYUkVULCBDTV9JTlZ8 Q01fQUJSIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKwor I2lmbmRlZiBOT1hGRVIKKyAgICB7ICJyZXRyaWV2ZSIsICAgIFhYUkVUUiwgQ01fSU5WIH0sCS8q IFJFVFJJRVZFICovCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7 ICJyZXR1cm4iLCAgICAgIFhYUkVULCAwIH0sCS8qIFJFVFVSTiBmcm9tIGEgZnVuY3Rpb24gKi8K KyNlbHNlCisgICAgeyAicmV0dXJuIiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAv KiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInJleGl0IiwgICAgICAgWFhSWElU LCBDTV9JTlYgfSwJLyogUkVNT1RFIEVYSVQgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lm ZGVmIENLX1JFWFgKKyNpZm5kZWYgTk9QVVNICisgICAgeyAicmV4eCIsICAgICAgICBYWFJFWFgs IENNX1BTSCB9LAkvKiBFeGVjdXRlIGEgUmV4eCBjb21tYW5kICovCisjZWxzZQorICAgIHsgInJl eHgiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WfENNX1BTSCB9LAorI2VuZGlmIC8qIE5PUFVTSCAq LworI2VuZGlmIC8qIENLX1JFWFggKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJyaGVscCIs ICAgICAgIFhYUkhMUCwgQ01fSU5WIH0sCS8qIFJFTU9URSBIRUxQICovCisgICAgeyAicmhvc3Qi LCAgICAgICBYWFJIT1MsIENNX0lOViB9LAkvKiBSRU1PVEUgSE9TVCAqLworICAgIHsgInJrZXJt aXQiLCAgICAgWFhSS0VSLCBDTV9JTlYgfSwJLyogUkVNT1RFIEtFUk1JVCAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZkZWYgVENQU09DS0VUCisgICAgeyAicmxvZ2luIiwgICAgICBYWFJM T0csIENNX0xPQyB9LAkvKiBNYWtlIGFuIFJsb2dpbiBjb25uZWN0aW9uICovCisjZWxzZQorICAg IHsgInJsb2dpbiIsICAgICAgWFhOT1RBViwgQ01fSU5WfENNX0xPQyB9LAorI2VuZGlmIC8qIFRD UFNPQ0tFVCAqLworCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAicm0iLCAgICAgICAgICBYWERF TCwgQ01fSU5WIH0sCS8qIEludmlzaWJsZSBzeW5vbnltIGZvciBkZWxldGUgKi8KKyNlbmRpZiAv KiBOT0ZSSUxMUyAqLworCisjaWZkZWYgQ0tfTUtESVIKKyAgICB7ICJybWRpciIsICAgICAgIFhY Uk1ESVIsIDAgfSwJLyogUk1ESVIgKi8KKyNlbHNlCisgICAgeyAicm1kaXIiLCAgICAgICBYWE5P VEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19NS0RJUiAqLworCisjaWZuZGVmIE5PWEZFUgor ICAgIHsgInJtZXNzYWdlIiwgICAgWFhSTVNHLCBDTV9JTlYgfSwJLyogUkVNT1RFIE1FU1NBR0Ug Ki8KKyAgICB7ICJybWtkaXIiLCAgICAgIFhYUk1LRCwgQ01fSU5WIH0sCS8qIFJFTU9URSBNS0RJ UiAqLworICAgIHsgInJtc2ciLCAgICAgICAgWFhSTVNHLCBDTV9JTlYgfSwJLyogUkVNT1RFIE1F U1NBR0UgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJyb2J1c3QiLCAgICAgIFhYUk9CLCAgQ01f SU5WIH0sCisjZWxzZQorICAgIHsgInJvYnVzdCIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICJycHJpbnQiLCAgICAgIFhYUlBSSSwgQ01fSU5WIH0s ICAvKiBSRU1PVEUgUFJJTlQgKi8KKyAgICB7ICJycHdkIiwgICAgICAgIFhYUlBXRCwgQ01fSU5W IH0sCS8qIFJFTU9URSBQV0QgKi8KKyAgICB7ICJycXVlcnkiLCAgICAgIFhYUlFVRSwgQ01fSU5W IH0sCS8qIFJFTU9URSBRVUVSWSAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tf UkVDQUxMCisgICAgeyAicnIiLCAgICAgICAgICBYWFJFRE8sIENNX0lOVnxDTV9OT1IgfSwKKyNl bmRpZiAvKiBDS19SRUNBTEwgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJycmVuYW1lIiwg ICAgWFhSUkVOLCBDTV9JTlYgfSwJLyogUkVNT1RFIFJFTkFNRSAqLworICAgIHsgInJybWRpciIs ICAgICBYWFJSTUQsIENNX0lOViB9LAkvKiBSRU1PVEUgUkVNRElSICovCisgICAgeyAicnNldCIs ICAgICAgIFhYUlNFVCwgQ01fSU5WIH0sCS8qIFJFTU9URSBTRVQgKi8KKyAgICB7ICJyc3BhY2Ui LCAgICAgWFhSU1BBLCBDTV9JTlYgfSwJLyogUkVNT1RFIFNQQUNFICovCisgICAgeyAicnR5cGUi LCAgICAgIFhYUlRZUCwgQ01fSU5WIH0sCS8qIFJFTU9URSBUWVBFICovCisjZW5kaWYgLyogTk9Y RkVSICovCisKKyNpZm5kZWYgTk9QVVNICisgICAgeyAicnVuIiwgICAgICAgICBYWFNIRSwgQ01f UFNIIH0sCS8qIFJVTiBhIHByb2dyYW0gb3IgY29tbWFuZCAqLworI2Vsc2UKKyAgICB7ICJydW4i LCAgICAgICAgIFhYTk9UQVYsIENNX0lOVnxDTV9QU0ggfSwKKyNlbmRpZiAvKiBOT1BVU0ggKi8K KworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJyd2hvIiwgICAgICAgIFhYUldITywgQ01fSU5WIH0s CS8qIFJFTU9URSBXSE8gKi8KKyAgICB7ICJzIiwgICAgICAgICAgIFhYU0VOLCBDTV9JTlZ8Q01f QUJSIH0sIC8qIEludmlzaWJsZSBzeW5vbnltIGZvciBzZW5kICovCisjZW5kaWYgLyogTk9YRkVS ICovCisKKyNpZm5kZWYgTk9TRVRLRVkKKyNpZmRlZiBPUzIKKyAgICB7ICJzYXZlIiwJICAgWFhT QVZFLCAwIH0sCQkvKiBTQVZFIHNvbWV0aGluZyAqLworI2Vsc2UKKyAgICB7ICJzYXZlIiwJICAg WFhTQVZFLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNlCisgICAgeyAic2F2ZSIs CSAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU0VUS0VZICovCisKKyNpZm5kZWYg Tk9TQ1JJUFQKKyAgICB7ICJzYyIsIAkgICBYWExPR0ksIENNX0lOVnxDTV9BQlJ8Q01fTE9DIH0s CisgICAgeyAic2NyIiwJICAgWFhMT0dJLCBDTV9JTlZ8Q01fQUJSfENNX0xPQyB9LAorI2VuZGlm IC8qIE5PU0NSSVBUICovCisgICAgeyAic2NyZWVuIiwgICAgICBYWFNDUk4sIDAgfSwJLyogU0NS RUVOIGFjdGlvbnMgKi8KKyNpZm5kZWYgTk9TQ1JJUFQKKyAgICB7ICJzY3JpcHQiLAkgICBYWExP R0ksIENNX0xPQyB9LAkvKiBFeHBlY3QtU2VuZC1zdHlsZSBzY3JpcHQgbGluZSAqLworI2Vsc2UK KyAgICB7ICJzY3JpcHQiLAkgICBYWE5PVEFWLCBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyog Tk9TQ1JJUFQgKi8KKworICAgIHsgInNlYXJjaCIsICAgIFhYR1JFUCxDTV9JTlYgfSwJLyogU3lu b255bSBmb3IgR1JFUCBhbmQgRklORCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInNlbmQi LAkgICBYWFNFTiwgMCB9LAkJLyogU2VuZCAoYSkgZmlsZShzKSAqLworI2lmbmRlZiBOT1NFUlZF UgorICAgIHsgInNlcnZlciIsCSAgIFhYU0VSLCAwIH0sCQkvKiBCZSBhIFNFUlZFUiAqLworI2Vs c2UKKyAgICB7ICJzZXJ2ZXIiLAkgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NF UlZFUiAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgeyAic2V0IiwJICAgWFhTRVQsIDAg fSwJCS8qIFNFVCBwYXJhbWV0ZXJzICovCisKKyNpZm5kZWYgTk9TUEwKKyNpZm5kZWYgTk9TRVhQ CisgICAgeyAic2V4cHJlc3Npb24iLCBYWFNFWFAsIENNX0lOVnxDTV9ITFAgfSwgLyogU0VYUFIg Ki8KKyNlbmRpZiAvKiBOT1NFWFAgKi8KKworI2lmZGVmIFNGVFBfQlVJTFRJTgorICAgIHsgInNm dHAiLCAgICAgICAgWFhTRlRQLCAwIH0sICAgLyogU0ZUUCAqLworI2VuZGlmIC8qIFNGVFBfQlVJ TFRJTiAqLworCisjaWZuZGVmIE5PU0hPVworICAgIHsgInNoIiwgICAgICAgICAgWFhTSE8sIENN X0lOVnxDTV9BQlIgfSwgLyogU0hPVyBwYXJhbWV0ZXJzICovCisjZW5kaWYgLyogTk9TSE9XICov CisgICAgeyAic2hpZnQiLCAgICAgICBYWFNISUZULCAwIH0sCS8qIFNISUZUIGFyZ3MgKi8KKyNl bHNlCisgICAgeyAic2hpZnQiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBO T1NQTCAqLworCisjaWZuZGVmIE5PU0hPVworICAgIHsgInNob3ciLCAJICAgWFhTSE8sIDAgfSwJ CS8qIFNIT1cgcGFyYW1ldGVycyAqLworI2Vsc2UKKyAgICB7ICJzaG93IiwgCSAgIFhYTk9UQVYs IENNX0lOViB9LAorI2VuZGlmIC8qIE5PU0hPVyAqLworCisjaWZkZWYgTkVXRlRQCisgICAgeyAi c2l0ZSIsICAgICAgICBYWFNJVEUsIENNX0lOViB9LAkvKiAoRlRQKSBTSVRFICovCisjZW5kaWYg LyogTkVXRlRQICovCisKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgeyAic2tlcm1pdCIsICAgWFhT S1JNLCAwIH0sICAgICAvKiBTS0VSTUlUICovCisjZW5kaWYgLyogU1NIQlVJTFRJTiAqLworCisj aWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAic2xlZXAiLCAgICAgICBYWFBB VSwgQ01fSU5WIH0sCS8qIFNMRUVQIGZvciBzcGVjaWZpZWQgaW50ZXJ2YWwgKi8KKyNlbmRpZiAv KiBOT0ZSSUxMUyAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7 ICJzb3J0IiwgICAgICAgIFhYU09SVCwgQ01fSU5WIH0sCS8qIChzZWUgQVJSQVkpICovCisjZWxz ZQorICAgIHsgInNvcnQiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmbmRlZiBNQUMKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJzcCIsICAgICAg ICAgIFhYU1BBLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAic3BhIiwgICAgICAgICBYWFNQQSwg Q01fSU5WfENNX0FCUiB9LAorI2VuZGlmIC8qIE5PRlJJTExTICovCisgICAgeyAic3BhY2UiLCAg ICAgICBYWFNQQSwgMCB9LAkvKiBTaG93IGF2YWlsYWJsZSBkaXNrIFNQQUNFICovCisjZW5kaWYg LyogTUFDICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyNpZm5kZWYgTk9QVVNICisgICAgeyAic3Bh d24iLCAgICAgICBYWFNIRSwgQ01fSU5WfENNX1BTSCB9LCAvKiBTeW5vbnltIGZvciBQVVNILCBS VU4gKi8KKyNlbHNlCisgICAgeyAic3Bhd24iLCAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fUFNI IH0sIC8qIFN5bm9ueW0gZm9yIFBVU0gsIFJVTiAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworI2Vu ZGlmIC8qIE5PRlJJTExTICovCisKKyNpZmRlZiBBTllTU0gKKyAgICB7ICJzc2giLCAgICAgICAg IFhYU1NILCAwIH0sCisjZW5kaWYgLyogQU5ZU1NIICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAg eyAic3RhIiwgICAgICAgICBYWFNUQSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgInN0YXQiLCAg ICAgICAgWFhTVEEsIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJzdGF0aXN0aWNzIiwgIFhYU1RB LCAwIH0sCS8qIERpc3BsYXkgZmlsZSB0cmFuc2ZlciBzdGF0cyAqLworI2VuZGlmIC8qIE5PWEZF UiAqLworCisgICAgeyAic3RhdHVzIiwgICAgICBYWFNUQVRVUywwIH0sCS8qIFNob3cgc3RhdHVz IG9mIHByZXZpb3VzIGNvbW1hbmQgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsgInN0b3AiLCAg ICAgICAgWFhTVE8sICAgMCB9LAkvKiBTVE9QIGFsbCB0YWtlIGZpbGVzIGFuZCBtYWNyb3MgKi8K KyAgICB7ICJzdWNjZWVkIiwgICAgIFhYU1VDQywgIENNX0lOViB9LAkvKiBTVUNDRUVEICovCisj ZWxzZQorICAgIHsgInN0b3AiLCAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisgICAgeyAic3Vj Y2VlZCIsICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZu ZGVmIE5PRlJJTExTCisgICAgeyAiU1VQUE9SVCIsICAgICBYWEJVRywgMCB9LAkvKiBUZWNoIHN1 cHBvcnQgaW5zdHJ1Y3Rpb25zICovCisjZWxzZQorICAgIHsgInN1cHBvcnQiLCAgICAgWFhOT1RB ViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmbmRlZiBOT0pDCisgICAg eyAic3VzcGVuZCIsICAgICBYWFNVUywgQ01fUFNIIH0sCS8qIFNVU1BFTkQgQy1LZXJtaXQgKFVO SVggb25seSkgKi8KKyNlbHNlCisgICAgeyAic3VzcGVuZCIsICAgICBYWE5PVEFWLCBDTV9JTlZ8 Q01fUFNIIH0sCisjZW5kaWYgLyogTk9KQyAqLworCisjaWZuZGVmIE5PU1BMCisgICAgeyAic3dp dGNoIiwgICAgICBYWFNXSVQsIDAgfSwJLyogU1dJVENIICovCisjZWxzZQorICAgIHsgInN3aXRj aCIsICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVm IENLX1RBUEkKKyAgICB7ICJ0YSIsCSAgIFhYVEFLLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIChiZWNh dXNlIG9mIFRBUEkpICovCisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisjaWZuZGVmIE5PRlJJTExT CisgICAgeyAidGFpbCIsICAgICAgICBYWFRBSUwsIDAgfSwJLyogRGlzcGxheSBlbmQgb2YgYSBs b2NhbCBmaWxlICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworICAgIHsgInRha2UiLAkgICBY WFRBSywgMCB9LAkJLyogVEFLRSBjb21tYW5kcyBmcm9tIGEgZmlsZSAqLworCisjaWZkZWYgQ0tf VEFQSQorICAgIHsgInRhcGkiLAkgICBYWFRBUEksIENNX0xPQyB9LAkvKiBNaWNyb3NvZnQgVEFQ SSBjb21tYW5kcyAqLworI2Vsc2UKKyAgICB7ICJ0YXBpIiwJICAgWFhOT1RBViwgQ01fSU5WfENN X0xPQyB9LAorI2VuZGlmIC8qIENLX1RBUEkgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworI2lmZGVm IFRDUFNPQ0tFVAorICAgIHsgInRlbCIsICAgICAgICAgWFhURUwsIENNX0lOVnxDTV9BQlJ8Q01f TE9DIH0sCisgICAgeyAidGVsbmV0IiwgICAgICBYWFRFTCwgQ01fTE9DIH0sCS8qIFRFTE5FVCAo VENQL0lQIG9ubHkpICovCisgICAgeyAidGVsb3B0IiwgICAgICBYWFRFTE9QLCBDTV9JTlYgfSwJ LyogVEVMT1BUIChkaXR0bykgKi8KKyNlbHNlCisgICAgeyAidGVsIiwgICAgICAgICBYWE5PVEFW LCBDTV9JTlZ8Q01fTE9DIH0sCisgICAgeyAidGVsbmV0IiwgICAgICBYWE5PVEFWLCBDTV9JTlZ8 Q01fTE9DIH0sCisgICAgeyAidGVsb3B0IiwgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRp ZiAvKiBUQ1BTT0NLRVQgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJ0ZXJtaW5hbCIsICAgIFhYVEVS TSwgQ01fSU5WfENNX0xPQyB9LCAvKiA9PSBTRVQgVEVSTUlOQUwgVFlQRSAqLworI2Vsc2UKKyAg ICB7ICJ0ZXJtaW5hbCIsICAgIFhYVEVSTSwgQ01fSU5WIH0sCisjZW5kaWYgLyogT1MyICovCisj ZW5kaWYgLyogTk9GUklMTFMgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgeyAidGV4dCIsICAgICAg ICBYWEFTQywgQ01fSU5WIH0sCS8qID09IFNFVCBGSUxFIFRZUEUgVEVYVCAqLworI2VuZGlmIC8q IE5PWEZFUiAqLworICAgIHsgInRvdWNoIiwgICAgICAgWFhUT1VDLCAwIH0sCS8qIFRPVUNIICov CisjaWZuZGVmIE5PU1BMCisgICAgeyAidHJhY2UiLCAgICAgICBYWFRSQUNFLCAwIH0sCS8qIFRS QUNFICovCisjZWxzZQorICAgIHsgInRyYWNlIiwgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisj ZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT0NTRVRTCisgICAgeyAidHJhbnNsYXRlIiwg ICBYWFhMQSwgMCB9LAkvKiBUUkFOU0xBVEUgbG9jYWwgZmlsZSBjaGFyIHNldHMgKi8KKyNlbHNl CisgICAgeyAidHJhbnNsYXRlIiwgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT0NT RVRTICovCisKKyNpZm5kZWYgTk9YTUlUCisgICAgeyAidHJhbnNtaXQiLCAgICBYWFRSQSwgMCB9 LAkvKiBTZW5kICh1cGxvYWQpIGEgZmlsZSwgbm8gcHJvdG9jb2wgKi8KKyNlbHNlCisgICAgeyAi dHJhbnNtaXQiLCAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1hNSVQgKi8KKwor I2lmbmRlZiBOT0ZSSUxMUworICAgIHsgInR5cGUiLCAgICAgICAgWFhUWVAsIDAgfSwJLyogRGlz cGxheSBhIGxvY2FsIGZpbGUgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5P U1BMCisgICAgeyAidW5kY2wiLCAgICAgICBYWFVORENMLCBDTV9JTlYgfSwKKyAgICB7ICJ1bmRl Y2xhcmUiLCAgIFhYVU5EQ0wsIDAgfSwJLyogVU5ERUNMQVJFIGFuIGFycmF5ICovCisgICAgeyAi dW5kZWZpbmUiLCAgICBYWFVOREVGLCAwIH0sCS8qIFVOREVGSU5FIGEgdmFyaWFibGUgb3IgbWFj cm8gKi8KKyNlbHNlCisgICAgeyAidW5kY2wiLCAgICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAg ICB7ICJ1bmRlY2xhcmUiLCAgIFhYTk9UQVYsIENNX0lOViB9LAorICAgIHsgInVuZGVmaW5lIiwg ICAgWFhOT1RBViwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIE5FV0ZU UAorICAgIHsgInVzZXIiLCAgICAgICAgWFhVU0VSLCAgQ01fSU5WIH0sIC8qIChGVFApIFVTRVIg Ki8KKyNlbmRpZiAvKiBORVdGVFAgKi8KKworICAgIHsgInZlcnNpb24iLCAgICAgWFhWRVIsIDAg fSwJLyogVkVSU0lPTi1udW1iZXIgZGlzcGxheSAqLworCisjaWZkZWYgT1MyCisgICAgeyAidmll d29ubHkiLCAgICBYWFZJRVcsIENNX0xPQyB9LAkvKiBWSUVXT05MWSBUZXJtaW5hbCBNb2RlICov CisjZW5kaWYgLyogT1MyICovCisKKyAgICB7ICJ2b2lkIiwgICAgICAgIFhYVk9JRCwgMCB9LAkv KiBWT0lEICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJ3YWl0IiwgICAgICAgIFhYV0FJLCAw IH0sCS8qIFdBSVQgKi8KKyNlbHNlCisgICAgeyAid2FpdCIsICAgICAgICBYWE5PVEFWLCBDTV9J TlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgeyAid2RpcmVjdG9yeSIsICBYWFdESVIs ICBDTV9JTlYgfSwJLyogTGlrZSBUT1BTLTIwLCByZXZlcnNlIGNocm9uIG9yZGVyICovCisgICAg eyAid2VybWl0IiwgICAgICBYWEtFUk1JLCBDTV9JTlYgfSwKKworI2lmbmRlZiBOT1hGRVIKKyAg ICB7ICJ3aGVyZSIsICAgICAgIFhYV0hFUkUsIDAgfSwJLyogV0hFUkUgKGRpZCBteSBmaWxlIGdv PykgKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIHsgIndoaWxl IiwgICAgICAgWFhXSEksIDAgfSwJLyogV0hJTEUgbG9vcCAqLworI2Vsc2UKKyAgICB7ICJ3aGls ZSIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5k ZWYgT1MyCisjaWZuZGVmIE1BQworI2lmbmRlZiBOT0ZSSUxMUworICAgIHsgIndobyIsICAgICAg ICAgWFhXSE8sIENNX1BTSCB9LAkvKiBXSE8ncyBsb2dnZWQgaW4/ICovCisjZW5kaWYgLyogTk9G UklMTFMgKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBO T0hFTFAKKyAgICB7ICJ3aWxkY2FyZHMiLCAgIFhYV0lMRCxDTV9JTlZ8Q01fSExQIH0sIC8qIFdp bGRjYXJkIHN5bnRheCAqLworI2VuZGlmIC8qIE5PSEVMUCAqLworCisjaWZuZGVmIE5PU1BMCisg ICAgeyAid3IiLCAgICAgICAgICBYWFdSSSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIndyaSIs ICAgICAgICAgWFhXUkksIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJ3cml0IiwgICAgICAgIFhY V1JJLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAid3JpdGUiLCAgICAgICBYWFdSSSwgMCB9LAkv KiBXUklURSBjaGFyYWN0ZXJzIHRvIGEgZmlsZSAqLworICAgIHsgIndyaXRlLWxpbmUiLCAgWFhX UkwsIENNX0lOViB9LAkvKiBXUklURSBhIGxpbmUgdG8gYSBmaWxlICovCisgICAgeyAid3JpdGVs biIsICAgICBYWFdSTCwgQ01fSU5WIH0sCS8qIFBhc2NhbGlzY2ggc3lub255bSBmb3Igd3JpdGUt bGluZSAqLworI2Vsc2UKKyAgICB7ICJ3ciIsICAgICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAor ICAgIHsgIndyaSIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisgICAgeyAid3JpdCIsICAg ICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyAgICB7ICJ3cml0ZSIsICAgICAgIFhYTk9UQVYsIENN X0lOViB9LAorICAgIHsgIndyaXRlLWxpbmUiLCAgWFhOT1RBViwgQ01fSU5WIH0sCisgICAgeyAi d3JpdGVsbiIsICAgICBYWE5PVEFWLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworCisj aWZuZGVmIE5PRlJJTExTCisgICAgeyAieGVjaG8iLCAgICAgICBYWFhFQ0gsMCB9LAkvKiBYRUNI TyAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJ4aWYi LCAgICAgICAgIFhYSUZYLCBDTV9JTlYgfSwJLyogRXh0ZW5kZWQgSUYgY29tbWFuZCAob2Jzb2xl dGUpICovCisjZWxzZQorICAgIHsgInhpZiIsICAgICAgICAgWFhOT1RBViwgQ01fSU5WIH0sCisj ZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT0NTRVRTCisgICAgeyAieGxhdGUiLCAgICAg ICBYWFhMQSwgQ01fSU5WIH0sCS8qIFN5bm9ueW0gZm9yIFRSQU5TTEFURSAqLworI2Vsc2UKKyAg ICB7ICJ4bGF0ZSIsICAgICAgIFhYTk9UQVYsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PQ1NFVFMg Ki8KKworI2lmbmRlZiBOT1hNSVQKKyAgICB7ICJ4bSIsICAgICAgICAgIFhYVFJBLCBDTV9JTlZ8 Q01fQUJSIH0sIC8qIEF2b2lkIGNvbmZsaWN0IHdpdGggWE1FU1NBR0UgKi8KKyNlbHNlCisgICAg eyAieG0iLCAgICAgICAgICBYWE5PVEFWLCBDTV9JTlZ8Q01fQUJSIH0sIC8qIFN5bm9ueW0gZm9y IFRSQU5TTUlUICovCisjZW5kaWYgLyogTk9YTUlUICovCisKKyAgICB7ICJ4bWVzc2FnZSIsICAg IFhYWE1TRywgMCB9LAkvKiBQcmludCBkZWJ1Z2dpbmcgbWVzc2FnZSAqLworCisjaWZuZGVmIE5P WE1JVAorICAgIHsgInhtaXQiLCAgICAgICAgWFhUUkEsIENNX0lOViB9LAkvKiBTeW5vbnltIGZv ciBUUkFOU01JVCAqLworI2Vsc2UKKyAgICB7ICJ4bWl0IiwgICAgICAgIFhYTk9UQVYsIENNX0lO ViB9LAorI2VuZGlmIC8qIE5PWE1JVCAqLworCisjaWZuZGVmIE9TMgorI2lmbmRlZiBOT0pDCisg ICAgeyAieiIsICAgICAgICAgICBYWFNVUywgQ01fSU5WfENNX1BTSCB9LCAvKiBTeW5vbnltIGZv ciBTVVNQRU5EICovCisjZWxzZQorICAgIHsgInoiLCAgICAgICAgICAgWFhOT1RBViwgQ01fSU5W fENNX1BTSCB9LAorI2VuZGlmIC8qIE5PSkMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRl ZiBOT1NQTAorICAgIHsgInsiLCAgICAgICAgICAgWFhNQUNSTywgQ01fSU5WIH0sCS8qIEltbWVk aWF0ZSBtYWNybyAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAiIiwgMCwgMCB9Cit9Owor aW50IG5jbWQgPSAoc2l6ZW9mKGNtZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsK KworLyogTk9URTogVG9rZW5zIG11c3QgYWxzbyBiZSBlbnRlcmVkIGFib3ZlIGludG8gY21kdGFi W10uICovCisKK2NoYXIgdG9rdGFiW10gPSB7CisjaWZuZGVmIE5PUFVTSAorICAgICchJywJCQkJ LyogU2hlbGwgZXNjYXBlICovCisjZW5kaWYgLyogTk9QVVNIICovCisgICAgJyMnLAkJCQkvKiBD b21tZW50ICovCisjaWZuZGVmIE5PU1BMCisgICAgJygnLAkJCQkvKiBTLUV4cHJlc3Npb24gKi8K KyAgICAnLicsCQkJCS8qIEFzc2lnbm1lbnQgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgICc7 JywJCQkJLyogQ29tbWVudCAqLworI2lmbmRlZiBOT1NQTAorICAgICc6JywJCQkJLyogTGFiZWwg Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT1BVU0gKKyNpZmRlZiBDS19SRURJUgor ICAgICc8JywJCQkJLyogUkVESVJFQ1QgKi8KKyNlbmRpZiAvKiBDS19SRURJUiAqLworICAgICdA JywJCQkJLyogRENMIGVzY2FwZSAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworI2lmZGVmIENLX1JF Q0FMTAorICAgICdeJywJCQkJLyogQ29tbWFuZCByZWNhbGwgKi8KKyNlbmRpZiAvKiBDS19SRUNB TEwgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICAneycsCQkJCS8qIEltbWVkaWF0ZSBtYWNybyAqLwor I2VuZGlmIC8qIE5PU1BMICovCisgICAgJ1wwJwkJCQkvKiBFbmQgb2YgdGhpcyBzdHJpbmcgKi8K K307CitpbnQgeHhkb3QgPSAwOwkJCQkvKiBVc2VkIHdpdGggIi4iIHRva2VuICovCisKK3N0cnVj dCBrZXl0YWIgeWVzbm9bXSA9IHsJCS8qIFllcy9ObyBrZXl3b3JkIHRhYmxlICovCisgICAgeyAi bm8iLCAgICAwLCAwIH0sCisgICAgeyAib2siLCAgICAxLCAwIH0sCisgICAgeyAieWVzIiwgICAx LCAwIH0KK307CitpbnQgbnllc25vID0gKHNpemVvZih5ZXNubykgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOworCisvKiBTYXZlIGtleXdvcmQgdGFibGUgKi8KKworc3RydWN0IGtleXRhYiBzYXZ0 YWJbXSA9IHsKKyNpZmRlZiBPUzIKKyAgICB7ICJjb21tYW5kIiwgIFhTQ01ELCAwIH0sCisjZWxz ZQorI2lmZGVmIENLX1JFQ0FMTAorICAgIHsgImNvbW1hbmQiLCAgWFNDTUQsIDAgfSwKKyNlbmRp ZiAvKiBDS19SRUNBTEwgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9TRVRLRVkKKyAg ICB7ICJrZXltYXAiLCAgIFhTS0VZLCAwIH0sCisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKyNpZmRl ZiBPUzIKKyAgICB7ICJ0ZXJtaW5hbCIsIFhTVEVSTSwgMCB9LAorI2VuZGlmIC8qIE9TMiAqLwor ICAgIHsgIiIsIDAsIDAgfQorfTsKK2ludCBuc2F2ID0gKHNpemVvZihzYXZ0YWIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKKy8qIFBhcmFtZXRlciBrZXl3b3JkIHRhYmxlICovCisK K3N0cnVjdCBrZXl0YWIgcHJtdGFiW10gPSB7CisgICAgeyAiYWxhcm0iLCAgICAgICAgICAgIFhZ QUxSTSwgIDAgfSwKKyNpZmRlZiBDT01NRU5UCQkJCS8qIFNFVCBBTlNXRVIgbm90IGltcGxlbWVu dGVkIHlldCAqLworI2lmbmRlZiBOT0RJQUwKKyAgICB7ICJhbnN3ZXIiLCAgICAgICAgICAgWFlB TlNXRVIsMCB9LAorI2VuZGlmIC8qIE5PRElBTCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICB7ICJhc2stdGltZXIiLCAgICAgICAgWFlUSU1FUiwgMCB9LAorI2lmbmRlZiBOT1hGRVIKKyAg ICB7ICJhdHRyaWJ1dGVzIiwgICAgICAgWFlBVFRSLCAgMCB9LAorI2VuZGlmIC8qIE5PWEZFUiAq LworI2lmZGVmIENLX0FVVEhFTlRJQ0FUSU9OCisgICAgeyAiYXV0aGVudGljYXRpb24iLCAgIFhZ QVVUSCwgIDAgfSwKKyNlbHNlICAvKiBDS19BVVRIRU5USUNBVElPTiAqLworI2lmZGVmIENLX1NT TAorICAgIHsgImF1dGhlbnRpY2F0aW9uIiwgICBYWUFVVEgsICAwIH0sCisjZW5kaWYgLyogQ0tf U1NMICovCisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyAgICB7ICJiIiwJCSAgWFlC QUNLLCAgQ01fSU5WfENNX0FCUnxDTV9QU0ggfSwKKyAgICB7ICJiYSIsCQkgIFhZQkFDSywgIENN X0lOVnxDTV9BQlJ8Q01fUFNIIH0sCisjaWZkZWYgVk1TCisgICAgeyAiYmFja2dyb3VuZCIsICAg ICAgIFhZQkFDSywgIENNX0lOVnxDTV9QU0ggfSwKKyAgICB7ICJiYXRjaCIsICAgICAgICAgICAg WFlCQUNLLCAgQ01fUFNIIH0sCisjZWxzZQorICAgIHsgImJhY2tncm91bmQiLCAgICAgICBYWUJB Q0ssICBDTV9QU0ggfSwKKyAgICB7ICJiYXRjaCIsICAgICAgICAgICAgWFlCQUNLLCAgQ01fSU5W fENNX1BTSCB9LAorI2VuZGlmIC8qIFZNUyAqLworI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAiYmF1 ZCIsCSAgICAgICAgICBYWVNQRUUsICBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyogTk9MT0NB TCAqLworICAgIHsgImJlbGwiLCAgICAgICAgICAgICBYWUJFTEwsICAwIH0sCisjaWZuZGVmIE5P WEZFUgorICAgIHsgImJsb2NrLWNoZWNrIiwgIAkgIFhZQ0hLVCwgIDAgfSwKKyNlbmRpZiAvKiBO T1hGRVIgKi8KKyNpZmRlZiBPUzIKKyNpZmRlZiBCUFJJTlQKKyAgICB7ICJicHJpbnRlciIsICAg ICAgICAgWFlCRENQLCAgQ01fSU5WIH0sCisjZW5kaWYgLyogQlBSSU5UICovCisjZW5kaWYgLyog IE9TMiAqLworI2lmZGVmIEJST1dTRVIKKyAgICB7ICJicm93c2VyIiwgICAgICAgICAgWFlCUk9X U0UsQ01fUFNIfENNX0xPQyB9LAorI2VuZGlmIC8qIEJST1dTRVIgKi8KKyNpZm5kZWYgTk9YRkVS CisjaWZkZWYgRFlOQU1JQworICAgIHsgImJ1ZmZlcnMiLCAgICAgICAgICBYWUJVRiwgICAwIH0s CisjZW5kaWYgLyogRFlOQU1JQyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmbmRlZiBOT0xP Q0FMCisjaWZuZGVmIE1BQworICAgIHsgImNhcnJpZXItd2F0Y2giLCAgICBYWUNBUlIsICBDTV9M T0MgfSwKKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZuZGVmIE5P U1BMCisgICAgeyAiY2FzZSIsICAgICAgICAgICAgIFhZQ0FTRSwgIDAgfSwKKyNlbmRpZiAvKiBO T1NQTCAqLworICAgIHsgImNkIiwgICAgICAgICAgICAgICBYWUNELCAgICAwIH0sCisjaWZuZGVm IE5PWEZFUgorICAgIHsgImNsIiwgICAgICAgICAgICAgICBYWUNMRUFSLCBDTV9JTlZ8Q01fQUJS IH0sCisgICAgeyAiY2xlIiwgICAgICAgICAgICAgIFhZQ0xFQVIsIENNX0lOVnxDTV9BQlIgfSwK KyAgICB7ICJjbGVhIiwgICAgICAgICAgICAgWFlDTEVBUiwgQ01fSU5WfENNX0FCUiB9LAorICAg IHsgImNsZWFyIiwgICAgICAgICAgICBYWUNMRUFSLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAi Y2xlYXItY2hhbm5lbCIsICAgIFhZQ0xFQVIsIDAgfSwKKyAgICB7ICJjbGVhcmNoYW5uZWwiLCAg ICAgWFlDTEVBUiwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9YRkVSICovCisjaWZuZGVmIE5PTE9D QUwKKyAgICB7ICJjbG9zZS1vbi1kaXNjb25uZWN0IiwgWFlESVNDLCBDTV9JTlZ8Q01fTE9DIH0s CisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHsgImNtZCIsICAgICAgICAgICAgICBYWUNNRCwg ICBDTV9JTlYgfSwKKyAgICB7ICJjb21tYW5kIiwgICAgICAgICAgWFlDTUQsICAgMCB9LAorI2lm ZGVmIENLX1NQRUVECisgICAgeyAiY29uIiwgICAgICAgICAgICAgIFhZUUNUTCwgIENNX0lOVnxD TV9BQlIgfSwKKyNlbmRpZiAvKiBDS19TUEVFRCAqLworICAgIHsgImNvbnNvbGUiLCAgICAgICAg ICBYWUNNRCwgICBDTV9JTlYgfSwKKyNpZmRlZiBDS19TUEVFRAorICAgIHsgImNvbnRyb2wtY2hh cmFjdGVyIixYWVFDVEwsICAwIH0sCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKyNpZm5kZWYgTk9T UEwKKyAgICB7ICJjb3VudCIsICAgICAgICAgICAgWFlDT1VOLCAgMCB9LAorI2VuZGlmIC8qIE5P U1BMICovCisjaWZuZGVmIE5PWEZFUgorICAgIHsgImQiLAkJICBYWURFTEEsICBDTV9JTlZ8Q01f QUJSIH0sCisgICAgeyAiZGUiLAkJICBYWURFTEEsICBDTV9JTlZ8Q01fQUJSIH0sCisjZW5kaWYg LyogTk9YRkVSICovCisgICAgeyAiZGVidWciLCAgICAgICAgICAgIFhZREVCVSwgIDAgfSwKKyNp ZmRlZiBWTVMKKyAgICB7ICJkZWZhdWx0IiwgICAgICAgICAgWFlERkxULCAgMCB9LAorI2Vsc2UK KyNpZm5kZWYgTUFDCisgICAgeyAiZGVmYXVsdCIsICAgICAgICAgIFhZREZMVCwgIENNX0lOViB9 LAorI2VuZGlmIC8qIE1BQyAqLworI2VuZGlmIC8qIFZNUyAqLworI2lmbmRlZiBOT1hGRVIKKyAg ICB7ICJkZWxheSIsCSAgICAJICBYWURFTEEsICAwIH0sCisgICAgeyAiZGVzdGluYXRpb24iLAkg IFhZREVTVCwgIDAgfSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYgTk9ESUFMCisgICAg eyAiZGkiLAkJICBYWURJQUwsICBDTV9JTlZ8Q01fQUJSfENNX0xPQyB9LAorICAgIHsgImRpYSIs CQkgIFhZRElBTCwgIENNX0lOVnxDTV9BQlJ8Q01fTE9DIH0sCisgICAgeyAiZGlhbCIsICAgICAg ICAgICAgIFhZRElBTCwgIENNX0xPQyB9LAorI2VuZGlmIC8qIE5PRElBTCAqLworI2lmZGVmIE9T MgorICAgIHsgImRpYWxlciIsCQkgIFhZRExSLCAgIENNX0lOViB9LAorI2VuZGlmIC8qIE9TMiAq LworI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAiZGlzY29ubmVjdCIsICAgICAgIFhZRElTQywgIENN X0xPQyB9LAorICAgIHsgImR1cGxleCIsCSAgICAJICBYWURVUEwsICBDTV9MT0MgfSwKKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisjaWZuZGVmIE5PUFVTSAorI2lmbmRlZiBOT0ZSSUxMUworICAgIHsg ImVkaXRvciIsICAgICAgICAgICBYWUVESVQsICBDTV9QU0ggfSwKKyNlbmRpZiAvKiAgTk9GUklM TFMgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNpZmRlZiBDS19DVFJMWgorICAgIHsgImVvZiIs ICAgICAgICAgICAgICBYWUVPRiwgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19DVFJMWiAqLwor I2lmbmRlZiBOT0xPQ0FMCisgICAgeyAiZXNjYXBlLWNoYXJhY3RlciIsIFhZRVNDLCAgIENNX0xP QyB9LAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJldmFsdWF0 ZSIsICAgICAgICAgWFlFVkFMLCAgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7 ICJleGl0IiwJCSAgWFlFWElULCAgMCB9LAorI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19YWVoK KyNpZm5kZWYgTk9QVVNICisjaWZuZGVmIFhZWl9JTlRFUk5BTAorICAgIHsgImV4dGVybmFsLXBy b3RvY29sIixYWUVYVFJOLCAwIH0sCisjZW5kaWYJLyogWFlaX0lOVEVSTkFMICovCisjZW5kaWYJ LyogTk9QVVNIICovCisjZW5kaWYJLyogQ0tfWFlaICovCisgICAgeyAiZi1hY2stYnVnIiwgICAg ICAgIFhZRkFDS0IsIENNX0lOViB9LAorICAgIHsgImYtYWNrLXBhdGgiLCAgICAgICBYWUZBQ0tQ LCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJmaWxlIiwgCSAgCSAgWFlG SUxFLCAgMCB9LAorICAgIHsgImZsIiwgICAgICAgICAgIAkgIFhZRkxPVywgIENNX0lOVnxDTV9B QlIgfSwKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJmbGFnIiwgICAgICAgICAgICAgWFlGTEFHLCAg MCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgVENQU09DS0VUCisjaWZuZGVmIFNZU0ZU UAorI2lmbmRlZiBOT0ZUUAorICAgIHsgImZ0IiwgICAJICAgICAgICAgIFhZRlRQWCwgIENNX0lO VnxDTV9BQlIgfSwKKyAgICB7ICJmdHAiLCAgCSAgICAgICAgICBYWUZUUFgsICAwIH0sCisjZW5k aWYgLyogTk9GVFAgKi8KKyNlbmRpZiAvKiBTWVNGVFAgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KKyNpZmRlZiBCUk9XU0VSCisgICAgeyAiZnRwLWNsaWVudCIsICAgICAgIFhZRlRQLCAgIENN X1BTSCB9LAorI2VuZGlmIC8qIEJST1dTRVIgKi8KKyAgICB7ICJmbG93LWNvbnRyb2wiLCAJICBY WUZMT1csICAwIH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAiZnVuY3Rpb24iLCAgICAgICAgIFhZ RlVOQywgIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIE5FV0ZUUAorICAgIHsgImdl dC1wdXQtcmVtb3RlIiwgICBYWUdQUiwgICAwIH0sCisjZW5kaWYgLyogTkVXRlRQICovCisjaWZk ZWYgS1VJCisgICAgeyAiZ3VpIiwgICAgICAgICAgICAgIFhZR1VJLCAgIDAgfSwKKyNlbmRpZiAv KiBLVUkgKi8KKyAgICB7ICJoYW5kc2hha2UiLCAgICAJICBYWUhBTkQsICAwIH0sCisgICAgeyAi aGludHMiLCAgICAgICAgICAgIFhZSElOVFMsIDAgfSwKKyNpZmRlZiBORVRDT05OCisgICAgeyAi aG9zdCIsICAgICAgICAgICAgIFhZSE9TVCwgIENNX0xPQyB9LAorI2VuZGlmIC8qIE5FVENPTk4g Ki8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJpIiwJCSAgWFlJTlBVLCAgQ01fSU5WfENNX0FCUiB9 LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgSUtTRAorICAgIHsgImlrcyIsICAgICAgICAg ICAgICBYWUlLUywgICAwIH0sCisjZWxzZQorICAgIHsgImlrcyIsICAgICAgICAgICAgICBYWUlL UywgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBJS1NEICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAi aW4iLAkJICBYWUlOUFUsICBDTV9JTlZ8Q01fQUJSIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNp Zm5kZWYgTk9YRkVSCisgICAgeyAiaW5jb21wbGV0ZSIsICAgCSAgWFlJRkQsICAgQ01fSU5WIH0s CisjZW5kaWYgLyogTk9YRkVSICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAiaW5wdXQiLCAgICAg ICAgICAgIFhZSU5QVSwgIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT1NFVEtF WQorICAgIHsgImtleSIsCQkgIFhZS0VZLCAgIDAgfSwKKyNlbmRpZiAvKiBOT1NFVEtFWSAqLwor ICAgIHsgImwiLCAgICAgICAgICAgICAgICBYWUxJTkUsICBDTV9JTlZ8Q01fQUJSIH0sCisjaWZu ZGVmIE5PQ1NFVFMKKyAgICB7ICJsYW5ndWFnZSIsICAgICAgICAgWFlMQU5HLCAgMCB9LAorI2Vu ZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZm5kZWYgTk9MT0NBTAorICAgIHsgImxpbmUiLCAgICAgICAg ICAgICBYWUxJTkUsICBDTV9MT0MgfSwKKyAgICB7ICJsb2NhbC1lY2hvIiwJICBYWUxDTEUsICBD TV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIExPQ1VTCisgICAg eyAibG9jdXMiLCAgICAgICAgICAgIFhZTE9DVVMsIDAgfSwKKyNlbmRpZiAvKiBMT0NVUyAqLwor I2lmbmRlZiBOT1NQTAorICAgIHsgImxvZ2luIiwJCSAgWFlMT0dJTiwgQ01fTE9DIH0sCisjZW5k aWYgLyogTk9TUEwgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJtYWNybyIsICAgICAgICAgICAg WFlNQUNSLCAgMCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAibWF0Y2giLCAgICAgICAg ICAgIFhZTUFUQ0gsIDAgfSwKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgVk1TCisgICAgeyAibWVz c2FnZXMiLCAgICAgICAgIFhZTVNHUywgIDAgfSwKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisjaWZuZGVmIE5PRElBTAorICAgIHsgIm1vZGVtIiwJCSAgWFlNT0RNLCAg Q01fTE9DIH0sCisjZW5kaWYgLyogTk9ESUFMICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBP UzJNT1VTRQorICAgIHsgIm1vdXNlIiwJCSAgWFlNT1VTRSwgMCB9LAorI2VuZGlmIC8qIE9TMk1P VVNFICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIE9TMgorICAgIHsgIm1za2VybWl0 IiwgICAgICAgICBYWU1TSywgICAwIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgTkVUQ09O TgorICAgIHsgIm5ldHdvcmsiLCAgICAgICAgICBYWU5FVCwgICBDTV9MT0MgfSwKKyNlbmRpZiAv KiBORVRDT05OICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAib3V0cHV0IiwgICAgICAgICAgIFhZ T1VUUCwgIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgIm9wdGlvbnMiLCAgICAgICAg ICBYWU9QVFMsICAwIH0sCisgICAgeyAicGF1c2UiLCAgICAgICAgICAgIFhZU0xFRVAsIENNX0lO ViB9LAorI2lmZGVmIEFOWVgyNQorI2lmbmRlZiBJQk1YMjUKKyAgICB7ICJwYWQiLCAgICAgICAg ICAgICAgWFlQQUQsICAgQ01fTE9DIH0sCisjZW5kaWYgLyogSUJNWDI1ICovCisjZW5kaWYgLyog QU5ZWDI1ICovCisgICAgeyAicGFyaXR5IiwJICAgIAkgIFhZUEFSSSwgIDAgfSwKKyNpZm5kZWYg Tk9MT0NBTAorI2lmZGVmIE9TMgorICAgIHsgInBvcnQiLCAgICAgICAgICAgICBYWUxJTkUsICBD TV9MT0MgfSwKKyNlbHNlCisgICAgeyAicG9ydCIsICAgICAgICAgICAgIFhZTElORSwgIENNX0lO VnxDTV9MT0MgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZu ZGVmIE5PRlJJTExTCisgICAgeyAicHIiLCAgIAkgICAgCSAgWFlQUk9NLCAgQ01fSU5WfENNX0FC UiB9LAorICAgIHsgInByaW50ZXIiLCAgICAgICAgICBYWVBSVFIsICAwIH0sCisjZW5kaWYgLyog Tk9GUklMTFMgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJwcmlvcml0eSIsICAgICAgICAgWFlQUlRZ LCAgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX1NQRUVECisgICAgeyAicHJlZml4 aW5nIiwgICAgICAgIFhZUFJFRklYLCAwIH0sCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKyNpZm5k ZWYgTk9GUklMTFMKKyAgICB7ICJwcm9tcHQiLAkgICAgCSAgWFlQUk9NLCAgMCB9LAorI2VuZGlm IC8qIE5PRlJJTExTICovCisjaWZuZGVmIE5PWEZFUgorICAgIHsgInByb3RvY29sIiwJICBYWVBS T1RPLCAwIH0sCisjZW5kaWYgLyogTk9YRkVSICovCisgICAgeyAicSIsCQkgIFhZUVVJRSwgIENN X0lOVnxDTV9BQlIgfSwKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAicThmbGFnIiwgICAgICAgICAg IFhZUThGTEcsIENNX0lOViB9LAorI2VuZGlmIC8qIE5PWEZFUiAqLworI2lmZGVmIFFOWAorICAg IHsgInFueC1wb3J0LWxvY2siLCAgICBYWVFOWFBMLCAwIH0sCisjZWxzZQorICAgIHsgInFueC1w b3J0LWxvY2siLCAgICBYWVFOWFBMLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBRTlggKi8KKyAgICB7 ICJxdWlldCIsCQkgIFhZUVVJRSwgIDAgfSwKKyNpZm5kZWYgTk9YRkVSCisgICAgeyAicmVjIiwg ICAgICAgICAgICAgIFhZUkVDViwgIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJyZWNlaXZlIiwg ICAgICAgICAgWFlSRUNWLCAgMCB9LAorICAgIHsgInJlY3YiLCAgICAgICAgICAgICBYWVJFQ1Ys ICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJyZWxpYWJsZSIsICAgICAg ICAgWFlSRUxZLCAgMCB9LAorICAgIHsgInJlbmFtZSIsICAgICAgICAgICBYWV9SRU4sICAwIH0s CisjaWZuZGVmIE5PWEZFUgorICAgIHsgInJlcGVhdCIsICAgICAgICAgICBYWVJFUFQsICAwIH0s CisgICAgeyAicmV0cnktbGltaXQiLCAgICAgIFhZUkVUUiwgIDAgfSwKKyNlbmRpZiAvKiBOT1hG RVIgKi8KKyNpZmRlZiBDS1JPT1QKKyAgICB7ICJyb290IiwgICAgICAgICAgICAgWFlST09ULCAg MCB9LAorI2VuZGlmIC8qIENLUk9PVCAqLworI2lmbmRlZiBOT1NDUklQVAorICAgIHsgInNjcmlw dCIsCQkgIFhZU0NSSSwgIENNX0xPQyB9LAorI2VuZGlmIC8qIE5PU0NSSVBUICovCisjaWZuZGVm IE5PWEZFUgorICAgIHsgInNlbmQiLCAgICAgICAgICAgICBYWVNFTkQsICAwIH0sCisjaWZuZGVm IE5PTE9DQUwKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICB7ICJzZXIiLCAgICAgICAgICAgICAgWFlT RVJWLCAgQ01fSU5WfENNX0FCUiB9LAorI2VuZGlmIC8qIE5PU0VSVkVSICovCisjZW5kaWYgLyog Tk9YRkVSICovCisgICAgeyAic2VyaWFsIiwgICAgICAgICAgIFhZU0VSSUFMLENNX0xPQyB9LAor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICB7ICJzZXJ2ZXIiLCAg ICAgICAgICAgWFlTRVJWLCAgMCB9LAorI2VuZGlmIC8qIE5PU0VSVkVSICovCisjaWZkZWYgU0VT TElNSVQKKyNpZm5kZWYgTk9MT0NBTAorICAgIHsgInNlc3Npb24tbCIsICAgICAgICBYWVNFU1Ms ICBDTV9JTlZ8Q01fQUJSIH0sCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHsgInNlc3Npb24t bGltaXQiLCAgICBYWUxJTUlULCBDTV9JTlZ8Q01fTE9DIH0sIC8qIFNlc3Npb24gTGltaXQgKi8K KyNlbmRpZiAvKiBTRVNMSU1JVCAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJzZXNzaW9u LWxvZyIsICAgICAgWFlTRVNTLCAgQ01fTE9DIH0sCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisj aWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PU0VYUAorICAgIHsgInNleHByZXNzaW9uIiwgICAgICBY WVNFWFAsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBOT1NFWFAgKi8KKyNlbmRpZiAvKiBOT1NQTCAq LworCisgICAgeyAic2xlZXAiLCAgICAgICAgICAgIFhZU0xFRVAsIDAgfSwKKworI2lmbmRlZiBO T0xPQ0FMCisgICAgeyAic3BlZWQiLAkgICAgICAgICAgWFlTUEVFLCAgQ01fTE9DIH0sCisjZW5k aWYgLyogTk9MT0NBTCAqLworCisjaWZkZWYgQU5ZU1NICisgICAgeyAic3NoIiwJICAgICAgICAg IFhZU1NILCAgIDAgfSwKKyNlbmRpZiAvKiBBTllTU0ggKi8KKworI2lmbmRlZiBOT1NQTAorICAg IHsgInN0YXJ0dXAtZmlsZSIsICAgICBYWVNUQVJUVVAsIENNX0lOViB9LAorI2VuZGlmIC8qIE5P U1BMICovCisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIEhXUEFSSVRZCisgICAgeyAic3RvcC1i aXRzIiwgICAgICAgIFhZU1RPUCwgQ01fTE9DIH0sCisjZWxzZQorI2lmZGVmIFROX0NPTVBPUlQK KyAgICB7ICJzdG9wLWJpdHMiLCAgICAgICAgWFlTVE9QLCBDTV9MT0MgfSwKKyNlbmRpZiAvKiBU Tl9DT01QT1JUICovCisjZW5kaWYgLyogSFdQQVJJVFkgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICov CisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgU1RSRUFNSU5HCisgICAgeyAic3RyZWFtaW5nIiwg ICAgICAgIFhZU1RSRUFNLCAwIH0sCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisjZW5kaWYgLyog Tk9YRkVSICovCisKKyNpZm5kZWYgTk9KQworICAgIHsgInN1c3BlbmQiLCAgICAgICAgICBYWVNV U1AsICBDTV9QU0ggfSwKKyNlbmRpZiAvKiBOT0pDICovCisjaWZkZWYgQ0tTWVNMT0cKKyAgICB7 ICJzeXNsb2ciLCAgICAgICAgICAgWFlTWVNMLCAgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0tTWVNM T0cgKi8KKyAgICB7ICJ0YWtlIiwgICAgICAgICAgICAgWFlUQUtFLCAgMCB9LAorCisjaWZkZWYg Q0tfVEFQSQorICAgIHsgInRhcGkiLCAgICAgICAgICAgICBYWVRBUEksICBDTV9MT0MgfSwKKyNl bmRpZiAvKiBDS19UQVBJICovCisKKyNpZm5kZWYgTk9UQ1BPUFRTCisjaWZkZWYgVENQU09DS0VU CisgICAgeyAidGNwIiwgICAgICAgICAgICAgIFhZVENQLCAgIENNX0xPQyB9LAorI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworI2VuZGlmIC8qIE5PVENQT1BUUyAqLworCisjaWZkZWYgVE5DT0RFCisg ICAgeyAidGVsIiwgICAgICAgICAgICAgIFhZVEVMLCAgIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7 ICJ0ZWxuZXQiLCAgICAgICAgICAgWFlURUwsICAgMCB9LAorICAgIHsgInRlbG9wdCIsICAgICAg ICAgICBYWVRFTE9QLCAwIH0sCisjZW5kaWYgLyogVE5DT0RFICovCisKKyNpZm5kZWYgTk9TUEwK KyAgICB7ICJ0ZW1wLWRpcmVjdG9yeSIsICAgWFlUTVBESVIsMCB9LAorI2VuZGlmIC8qIE5PU1BM ICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgIHsgInRlcm1pbmFsIiwgICAgICAgICBYWVRFUk0s ICBDTV9MT0MgfSwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBPUzIKKyAgICB7ICJ0 aXRsZSIsCQkgIFhZVElUTEUsIENNX0xPQyB9LAorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIFRM T0cKKyAgICB7ICJ0cmFuc2FjdGlvbi1sb2ciLCAgWFlUTE9HLCAgMCB9LAorI2VuZGlmIC8qIFRM T0cgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgeyAidHJhbnNmZXIiLCAgICAgICAgIFhZWEZFUiwg IDAgfSwKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZm5kZWYgTk9YTUlUCisgICAgeyAidHJhbnNt aXQiLCAgICAgICAgIFhZWE1JVCwgIDAgfSwKKyNlbmRpZiAvKiBOT1hNSVQgKi8KKyNpZm5kZWYg Tk9YRkVSCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJ1bmtub3duLWNoYXItc2V0IiwgWFlVTkNT LCAgMCB9LAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJ2YXJp YWJsZS1ldmFsdWF0aW9uIiwgWFlWQVJFViwgQ01fSU5WIH0sCisjZW5kaWYJLyogTk9TUEwgKi8K KyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICB7ICJ3YWl0IiwgICAgICAgICAgICAgWFlTTEVFUCwg Q01fSU5WIH0sCisjaWZuZGVmIE5PUFVTSAorI2lmZGVmIFVOSVgKKyAgICB7ICJ3aWxkY2FyZC1l eHBhbnNpb24iLCBYWVdJTEQsIDAgfSwKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogTk9Q VVNIICovCisjaWZkZWYgTlQKKyAgICB7ICJ3IiwgICAgICAgICAgICAgICAgWFlXSU5ELCAgQ01f SU5WfENNX0FCUiB9LAorICAgIHsgIndpIiwgICAgICAgICAgICAgICBYWVdJTkQsICBDTV9JTlZ8 Q01fQUJSIH0sCisgICAgeyAid2luIiwgICAgICAgICAgICAgIFhZV0lORCwgIENNX0lOVnxDTV9B QlIgfSwKKyNlbmRpZiAvKiBOVCAqLworICAgIHsgIndpbmRvdy1zaXplIiwgICAgICBYWVdJTkQs ICAwIH0sCisjaWZkZWYgTlQKKyAgICB7ICJ3aW45NSIsICAgICAgICAgICAgWFlXSU45NSwgMCB9 LAorI2VuZGlmIC8qIE5UICovCisjaWZkZWYgQU5ZWDI1CisgICAgeyAieC4yNSIsICAgICAgICAg ICAgIFhZWDI1LCAgIENNX0xPQyB9LAorICAgIHsgIngyNSIsICAgICAgICAgICAgICBYWVgyNSwg ICBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyogQU5ZWDI1ICovCisgICAgeyAieGZlciIsICAg ICAgICAgICAgIFhZWEZFUiwgIENNX0lOViB9LAorI2lmbmRlZiBOT1hNSVQKKyAgICB7ICJ4bWl0 IiwgICAgICAgICAgICAgWFlYTUlULCAgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9YTUlUICovCisg ICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG5wcm0gPSAoc2l6ZW9mKHBybXRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpIC0gMTsgLyogSG93IG1hbnkgKi8KKworc3RydWN0IGtleXRhYiBzY250 YWJbXSA9IHsJCS8qIFNjcmVlbiBjb21tYW5kcyAqLworICAgIHsgImNsZWFyIiwgICBTQ05fQ0xS LCAwIH0sCisgICAgeyAiY2xlb2wiLCAgIFNDTl9DTEUsIDAgfSwKKyAgICB7ICJtb3ZlLXRvIiwg U0NOX01PViwgMCB9Cit9OworaW50IG5zY250YWIgPSAoc2l6ZW9mKHNjbnRhYikgLyBzaXplb2Yo c3RydWN0IGtleXRhYikpOyAvKiBIb3cgbWFueSAqLworCisjaWZkZWYgQU5ZU1NICQkJCS8qIFNT SCBjb21tYW5kIHRhYmxlICovCisjaWZkZWYgU1NIQlVJTFRJTgoraW50ICAgIHNzaF9wZl9sY2xf biA9IDAsCisgICAgICAgc3NoX3BmX3JtdF9uID0gMDsKK3N0cnVjdCBzc2hfcGYgc3NoX3BmX2xj bFszMl0gPSB7IDAsIE5VTEwsIDAgfTsgLyogU1NIIFBvcnQgRm9yd2FyZGluZyAqLworc3RydWN0 IHNzaF9wZiBzc2hfcGZfcm10WzMyXSA9IHsgMCwgTlVMTCwgMCB9OyAvKiBzdHJ1Y3RzLi4uICov CitleHRlcm4gY2hhciAqIHNzaF9oc3QsICogc3NoX2NtZCwgKiBzc2hfcHJ0OworZXh0ZXJuIGlu dCAgICBzc2hfdmVyLCAgIHNzaF94Znc7CitjaGFyICogc3NoX3RtcHVpZCA9IE5VTEwsICpzc2hf dG1wY21kID0gTlVMTCwgKnNzaF90bXBwb3J0ID0gTlVMTCwKKyAgICAgKiBzc2hfdG1wc3RyID0g TlVMTDsKKworaW50Cisgc3Noa190eXBlID0gU1NIS1RfMkQsCQkJLyogU1NIIEtFWSBDUkVBVEUg L1RZUEU6eCAqLworIHNzaGtfYml0cyA9IDEwMjQsCQkJLyogU1NIIEtFWSBDUkVBVEUgL0JJVFM6 biAqLworIHNzaGtfZGluICA9IFNLREZfT1NTSCwJCQkvKiBTU0ggS0VZIERJU1BMQVkgL0lOLUZP Uk1BVDogKi8KKyBzc2hrX2RvdXQgPSBTS0RGX09TU0g7CQkJLyogU1NIIEtFWSBESVNQTEFZIC9P VVQtRk9STUFUOiAqLworCitjaGFyCisgKiBzc2hrMV9jb21tZW50ID0gTlVMTCwJCS8qIFNTSCBW MSBDT01NRU5UICovCisgKiBzc2hrcF9vbGQgPSBOVUxMLAkJCS8qIE9sZCBrZXkgcGFzc3BocmFz ZSAqLworICogc3Noa3BfbmV3ID0gTlVMTCwJCQkvKiBOZXcga2V5IHBhc3NwaHJhc2UgKi8KKyAq IHNzaGtjX3Bhc3MgPSBOVUxMLAkJCS8qIEtFWSBDUkVBVEUgL1BBU1M6eHh4ICovCisgKiBzc2hr Y19jb21tID0gTlVMTCwJCQkvKiBLRVkgQ1JFQVRFIC9WMS1SU0EtQ09NTUVOVDp4eHggKi8KKyAq IHNzaGRfZmlsZSA9IE5VTEwsCQkJLyogRElTUExBWSBmaWxlICovCisgKiBzc2hrX2ZpbGUgPSBO VUxMOwkJCS8qIFNTSCBDUkVBVEUgS0VZIGZpbGUgKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIg c3NoY2xyW10gPSB7CisgICAgeyAibG9jYWwtcG9ydC1mb3J3YXJkIiwgIFNTSENfTFBGLCAwIH0s CisgICAgeyAicmVtb3RlLXBvcnQtZm9yd2FyZCIsIFNTSENfUlBGLCAwIH0sCisgICAgeyAiIiwg MCwgMCB9Cit9Oworc3RhdGljIGludCBuc3NoY2xyID0gKHNpemVvZihzc2hjbHIpIC8gc2l6ZW9m KHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0cnVjdCBrZXl0YWIgc3Nob3Buc3dbXSA9IHsKKyAg ICB7ICIvY29tbWFuZCIsICAgICAgICBTU0hTV19DTUQsIENNX0FSRyB9LAorICAgIHsgIi9wYXNz d29yZCIsICAgICAgIFNTSFNXX1BXRCwgQ01fQVJHIH0sCisgICAgeyAiL3N1YnN5c3RlbSIsICAg ICAgU1NIU1dfU1VCLCBDTV9BUkcgfSwKKyAgICB7ICIvdXNlciIsICAgICAgICAgICBTU0hTV19V U1IsIENNX0FSRyB9LAorICAgIHsgIi92ZXJzaW9uIiwgICAgICAgIFNTSFNXX1ZFUiwgQ01fQVJH IH0sCisgICAgeyAiL3gxMS1mb3J3YXJkaW5nIiwgU1NIU1dfWDExLCBDTV9BUkcgfSwKKyAgICB7 ICIiLCAwLCAwIH0KK307CitpbnQgbnNzaG9wbnN3ID0gKHNpemVvZihzc2hvcG5zdykgLyBzaXpl b2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgc3Noa3d0YWJb XSA9IHsKKyAgICB7ICJhZGQiLCAgICAgICAgICAgICAgICAgWFNTSF9BREQsIDAgfSwKKyAgICB7 ICJhZ2VudCIsICAgICAgICAgICAgICAgWFNTSF9BR1QsIDAgfSwKKyAgICB7ICJjbGVhciIsICAg ICAgICAgICAgICAgWFNTSF9DTFIsIDAgfSwKKyAgICB7ICJmb3J3YXJkLWxvY2FsLXBvcnQiLCAg WFNTSF9GTFAsIENNX0lOViB9LAorICAgIHsgImZvcndhcmQtcmVtb3RlLXBvcnQiLCBYU1NIX0ZS UCwgQ01fSU5WIH0sCisgICAgeyAia2V5IiwgICAgICAgICAgICAgICAgIFhTU0hfS0VZLCAwIH0s CisgICAgeyAib3BlbiIsICAgICAgICAgICAgICAgIFhTU0hfT1BOLCAwIH0sCisgICAgeyAidjIi LCAgICAgICAgICAgICAgICAgIFhTU0hfVjIsICAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Owor c3RhdGljIGludCBuc3NoY21kID0gKHNpemVvZihzc2hrd3RhYikgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgc3NoMnRhYltdID0geworICAgIHsg InJla2V5IiwgWFNTSDJfUktFLCAwIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGlu dCBuc3NoMnRhYiA9IChzaXplb2Yoc3NoMnRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOwor CitzdGF0aWMgc3RydWN0IGtleXRhYiBhZGRmd2RbXSA9IHsJLyogU0VUIFNTSCBBREQgY29tbWFu ZCB0YWJsZSAqLworICAgIHsgImxvY2FsLXBvcnQtZm9yd2FyZCIsICBTU0hGX0xDTCwgMCB9LAor ICAgIHsgInJlbW90ZS1wb3J0LWZvcndhcmQiLCBTU0hGX1JNVCwgMCB9LAorICAgIHsgIiIsIDAs IDAgfQorfTsKK3N0YXRpYyBpbnQgbmFkZGZ3ZCA9IChzaXplb2YoYWRkZndkKSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSkgLSAxOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2hhZ2VudFtdID0g ewkvKiBTRVQgU1NIIEFHRU5UIGNvbW1hbmQgdGFibGUgKi8KKyAgICB7ICJhZGQiLCAgICBTU0hB X0FERCwgMCB9LAorICAgIHsgImRlbGV0ZSIsIFNTSEFfREVMLCAwIH0sCisgICAgeyAibGlzdCIs ICAgU1NIQV9MU1QsIDAgfSwKKyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2hh Z2VudCA9IChzaXplb2Yoc3NoYWdlbnQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisK K3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGFndHN3W10gPSB7CS8qIFNFVCBTU0ggQUdFTlQgTElT VCBzd2l0Y2ggdGFibGUgKi8KKyAgICB7ICIvZmluZ2VycHJpbnQiLCBTU0hBU1dfRlAsIDAgfSwK KyAgICB7ICIiLCAwLCAwIH0KK307CitzdGF0aWMgaW50IG5zc2hhZ3RzdyA9IChzaXplb2Yoc3No YWd0c3cpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5 dGFiIHNzaGtleVtdID0gewkvKiBTRVQgU1NIIEtFWSBjb21tYW5kIHRhYmxlICovCisgICAgeyAi Y2hhbmdlLXBhc3NwaHJhc2UiLCAgU1NIS19QQVNTLCAwIH0sCisgICAgeyAiY3JlYXRlIiwgICAg ICAgICAgICAgU1NIS19DUkVBLCAwIH0sCisgICAgeyAiZGlzcGxheSIsICAgICAgICAgICAgU1NI S19ESVNQLCAwIH0sCisgICAgeyAidjEiLCAgICAgICAgICAgICAgICAgU1NIS19WMSwgICAwIH0s CisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuc3Noa2V5ID0gKHNpemVvZihzc2hr ZXkpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IHNzaGt2MVtdID0gewkvKiBTRVQgU1NIIEtFWSBWMSBjb21tYW5kIHRhYmxlICovCisgICAgeyAi c2V0LWNvbW1lbnQiLCAgMSwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2hrcHN3 W10gPSB7CS8qIFNFVCBTU0ggS0VZIFBBU1NQSFJBU0UgdGFibGUgKi8KKyAgICB7ICIvbmV3LXBh c3NwaHJhc2UiLCAgMiwgQ01fQVJHIH0sCisgICAgeyAiL29sZC1wYXNzcGhyYXNlIiwgIDEsIENN X0FSRyB9Cit9OworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2hrY3JlYVtdID0gewkvKiBTU0gg S0VZIENSRUFURSB0YWJsZSAqLworICAgIHsgIi9iaXRzIiwgICAgICAgICAgIFNTSEtDX0JJLCBD TV9BUkcgfSwKKyAgICB7ICIvcGFzc3BocmFzZSIsICAgICBTU0hLQ19QUCwgQ01fQVJHIH0sCisg ICAgeyAiL3R5cGUiLCAgICAgICAgICAgU1NIS0NfVFksIENNX0FSRyB9LAorICAgIHsgIi92MS1y c2EtY29tbWVudCIsIFNTSEtDXzFSLCBDTV9BUkcgfQorfTsKK3N0YXRpYyBpbnQgbnNzaGtjcmVh ID0gKHNpemVvZihzc2hrY3JlYSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMg c3RydWN0IGtleXRhYiBzc2hrY3R5W10gPSB7CS8qIFNTSCBLRVkgQ1JFQVRFIC9UWVBFOnh4eCAq LworICAgIHsgInNycCIsICAgIFNTSEtUX1NSUCwgMCB9LAorICAgIHsgInYxLXJzYSIsIFNTSEtU XzFSLCAwIH0sCisgICAgeyAidjItZHNhIiwgU1NIS1RfMkQsIDAgfSwKKyAgICB7ICJ2Mi1yc2Ei LCBTU0hLVF8yUiwgMCB9Cit9Oworc3RhdGljIGludCBuc3Noa2N0eSA9IChzaXplb2Yoc3Noa2N0 eSkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2hk c3dpW10gPSB7CS8qIFNFVCBTU0ggS0VZIERJU1BMQVkgL3N3aXRjaGVzICovCisgICAgeyAiL2Zv cm1hdCIsIFNTSEtEX09VVCwgQ01fQVJHIH0KK307CitzdGF0aWMgaW50IG5zc2hkc3dpID0gKHNp emVvZihzc2hkc3dpKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisKKyNpZmRlZiBDT01NRU5U CitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2hkaWZtdFtdID0gewkvKiBTU0ggS0VZIERJU1BMQVkg L0lOLUZPUk1BVDogKi8KKyAgICB7ICJvcGVuc3NoIiwgU0tERl9PU1NILCAwIH0sCisgICAgeyAi c3NoLmNvbSIsIFNLREZfU1NIQywgMCB9Cit9Oworc3RhdGljIGludCBuc3NoZGlmbXQgPSAoc2l6 ZW9mKHNzaGRpZm10KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogQ09NTUVO VCAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBzc2hkb2ZtdFtdID0gewkvKiBTU0ggS0VZIERJ U1BMQVkgL0lOLUZPUk1BVDogKi8KKyAgICB7ICJmaW5nZXJwcmludCIsIFNLREZfRklORywgMCB9 LAorICAgIHsgImlldGYiLCAgICAgICAgU0tERl9JRVRGLCAwIH0sCisgICAgeyAib3BlbnNzaCIs ICAgICBTS0RGX09TU0gsIDAgfSwKKyAgICB7ICJzc2guY29tIiwgICAgIFNLREZfU1NIQywgMCB9 Cit9Oworc3RhdGljIGludCBuc3NoZG9mbXQgPSAoc2l6ZW9mKHNzaGRvZm10KSAvIHNpemVvZihz dHJ1Y3Qga2V5dGFiKSk7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHNzaGtlcm1pdFtdID0geyAv KiBTS0VSTUlUICovCisgICAgeyAib3BlbiIsICAgICAgIFNLUk1fT1BOLCAwIH0KK307CitzdGF0 aWMgaW50IG5zc2hrZXJtaXQgPSAoc2l6ZW9mKHNzaGtlcm1pdCkgLyBzaXplb2Yoc3RydWN0IGtl eXRhYikpOworCitzdHJ1Y3Qga2V5dGFiIHNzaGtybW9wbnN3W10gPSB7CisgICAgeyAiL3Bhc3N3 b3JkIiwgICAgICAgU1NIU1dfUFdELCBDTV9BUkcgfSwKKyAgICB7ICIvdXNlciIsICAgICAgICAg ICBTU0hTV19VU1IsIENNX0FSRyB9LAorICAgIHsgIi92ZXJzaW9uIiwgICAgICAgIFNTSFNXX1ZF UiwgQ01fQVJHIH0sCisgICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG5zc2hrcm1vcG5zdyA9IChz aXplb2Yoc3Noa3Jtb3Buc3cpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisjZW5kaWYg LyogU1NIQlVJTFRJTiAqLworCisjaWZkZWYgU0ZUUF9CVUlMVElOCitzdGF0aWMgc3RydWN0IGtl eXRhYiBzZnRwa3d0YWJbXSA9IHsgICAgLyogU0ZUUCAqLworICAgIHsgICJjZCIsICAgICAgICBT RlRQX0NELCAgICAwIH0sCisgICAgeyAgImNoZ3JwIiwgICAgIFNGVFBfQ0hHUlAsIDAgfSwKKyAg ICB7ICAiY2htb2QiLCAgICAgU0ZUUF9DSE1PRCwgMCB9LAorICAgIHsgICJjaG93biIsICAgICBT RlRQX0NIT1dOLCAwIH0sCisgICAgeyAgImRlbGV0ZSIsICAgIFNGVFBfUk0sICAgIDAgfSwKKyAg ICB7ICAiZGlyIiwgICAgICAgU0ZUUF9ESVIsICAgMCB9LAorICAgIHsgICJnZXQiLCAgICAgICBT RlRQX0dFVCwgICAwIH0sCisgICAgeyAgIm1rZGlyIiwgICAgIFNGVFBfTUtESVIsIDAgfSwKKyAg ICB7ICAib3BlbiIsICAgICAgU0ZUUF9PUE4sICAgMCB9LAorICAgIHsgICJwdXQiLCAgICAgICBT RlRQX1BVVCwgICAwIH0sCisgICAgeyAgInB3ZCIsICAgICAgIFNGVFBfUFdELCAgIDAgfSwKKyAg ICB7ICAicmVuYW1lIiwgICAgU0ZUUF9SRU4sICAgMCB9LAorICAgIHsgICJybSIsICAgICAgICBT RlRQX1JNLCAgICBDTV9JTlYgfSwKKyAgICB7ICAicm1kaXIiLCAgICAgU0ZUUF9STURJUiwgMCB9 LAorICAgIHsgICJzeW1saW5rIiwgICBTRlRQX0xJTkssICAwIH0sCisgICAgeyAgInZlcnNpb24i LCAgIFNGVFBfVkVSLCAgIDAgfQorfTsKK3N0YXRpYyBpbnQgbnNmdHBrd3RhYiA9IChzaXplb2Yo c2Z0cGt3dGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogU0ZUUF9CVUlM VElOICovCisjZW5kaWYgLyogQU5ZU1NIICovCisKKyNpZmRlZiBORVRDT05OCitzdHJ1Y3Qga2V5 dGFiIG5ldGtleVtdID0gewkJLyogU0VUIE5FVFdPUksgdGFibGUgKi8KKyAgICB7ICJkaXJlY3Rv cnkiLCBYWU5FVF9ELCAgMCB9LAorICAgIHsgInR5cGUiLCAgICAgIFhZTkVUX1QsICAwIH0KK307 CitpbnQgbm5ldGtleSA9IChzaXplb2YobmV0a2V5KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7 CisKK3N0cnVjdCBrZXl0YWIgbmV0Y21kW10gPSB7CisvKgorICBUaGVzZSBhcmUgdGhlIG5ldHdv cmsgdHlwZXMuCisqLworI2lmZGVmIE5FVENNRAorICAgIHsgImNvbW1hbmQiLCAgICAgICBORVRf Q01ELCAgQ01fSU5WIH0sIC8qIENvbW1hbmQgKi8KKyNlbmRpZiAvKiBORVRDTUQgKi8KKworI2lm ZGVmIERFQ05FVAkJCQkvKiBERUNuZXQgLyBQQVRIV09SS1MgKi8KKyAgICB7ICJkZWNuZXQiLCAg ICAgICAgTkVUX0RFQywgIDAgfSwKKyNlbmRpZiAvKiBERUNORVQgKi8KKworI2lmZGVmIE5FVERM TAorICAgIHsgImRsbCIsICAgICAgICAgICBORVRfRExMLCAgQ01fSU5WIH0sIC8qIERMTCB0byBi ZSBsb2FkZWQgKi8KKyNlbmRpZiAvKiBORVRETEwgKi8KKworI2lmZGVmIE5FVEZJTEUKKyAgICB7 ICJmaWxlIiwgICAgICAgICAgIE5FVF9GSUxFLCBDTV9JTlYgfSwgLyogRklMRSAocmVhbCBjcnVk ZSkgKi8KKyNlbmRpZiAvKiBORVRGSUxFICovCisKKyNpZmRlZiBOUElQRQkJCQkvKiBOYW1lZCBQ aXBlcyAqLworICAgIHsgIm5hbWVkLXBpcGUiLCAgICAgTkVUX1BJUEUsICAwIH0sCisjZW5kaWYg LyogTlBJUEUgKi8KKworI2lmZGVmIENLX05FVEJJT1MKKyAgICB7ICJuZXRiaW9zIiwgICAgICAg IE5FVF9CSU9TLCAgMCB9LAkvKiBORVRCSU9TICovCisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLwor CisjaWZkZWYgREVDTkVUCQkJCS8qIERFQ25ldCAvIFBBVEhXT1JLUyAoYWxpYXMpICovCisgICAg eyAicGF0aHdvcmtzIiwgICAgIE5FVF9ERUMsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBERUNORVQg Ki8KKworI2lmZGVmIE5FVENNRAorICAgIHsgInBpcGUiLCAgICAgICAgICBORVRfQ01ELCAgMCB9 LAkvKiBQaXBlICovCisjZW5kaWYgLyogTkVUQ01EICovCisKKyNpZmRlZiBORVRQVFkKKyAgICB7 ICJwc2V1ZG90ZXJtaW5hbCIsTkVUX1BUWSwgMCB9LAkvKiBQc2V1ZG90ZXJtaW5hbCAqLworI2Vu ZGlmIC8qIE5FVFBUWSAqLworCisjaWZkZWYgTkVUUFRZCisgICAgeyAicHR5IiwgICAgICAgICAg TkVUX1BUWSwgIENNX0lOViB9LCAvKiBJbnYgc3luIGZvciBwc2V1ZG90ZXJtICovCisjZW5kaWYg LyogTkVUUFRZICovCisKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgeyAic3NoIiwgICAgICAgICAg TkVUX1NTSCwgIDAgfSwKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyNpZmRlZiBTVVBFUkxB VAorICAgIHsgInN1cGVybGF0IiwgICAgIE5FVF9TTEFULCAwIH0sCS8qIE1lcmlkaWFuIFRlY2hu b2xvZ2llcycgU3VwZXJMQVQgKi8KKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworCisjaWZkZWYgVENQ U09DS0VUCQkJLyogVENQL0lQIHNvY2tldHMgbGlicmFyeSAqLworICAgIHsgInRjcC9pcCIsICAg ICAgIE5FVF9UQ1BCLCAwIH0sCisjZW5kaWYgLyogVENQU09DS0VUICovCisjaWZkZWYgU1VQRVJM QVQKKyAgICB7ICJ0ZXMzMiIsICAgICAgICBORVRfU0xBVCwgMCB9LAkvKiBFbXVsdXggVEVTMzIg Ki8KKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworI2lmZGVmIEFOWVgyNQkJCQkvKiBYLjI1ICovCisj aWZkZWYgU1VOWDI1CisgICAgeyAieCIsICAgICAgICAgICAgTkVUX1NYMjUsIENNX0lOVnxDTV9B QlIgfSwKKyAgICB7ICJ4LjI1IiwgICAgICAgICBORVRfU1gyNSwgMCB9LAorICAgIHsgIngyNSIs ICAgICAgICAgIE5FVF9TWDI1LCBDTV9JTlYgfSwKKyNlbHNlCisjaWZkZWYgU1RSQVRVU1gyNQor ICAgIHsgIngiLCAgICAgICAgICAgIE5FVF9WWDI1LCBDTV9JTlZ8Q01fQUJSIH0sCisgICAgeyAi eC4yNSIsICAgICAgICAgTkVUX1ZYMjUsIDAgfSwKKyAgICB7ICJ4MjUiLCAgICAgICAgICBORVRf VlgyNSwgQ01fSU5WIH0sCisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLworI2VuZGlmIC8qIFNVTlgy NSAqLworI2lmZGVmIElCTVgyNQorICAgIHsgIngiLCAgICAgICAgICAgIE5FVF9JWDI1LCBDTV9J TlZ8Q01fQUJSIH0sCisgICAgeyAieC4yNSIsICAgICAgICAgTkVUX0lYMjUsIENNX0lOViB9LAor ICAgIHsgIngyNSIsICAgICAgICAgIE5FVF9JWDI1LCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBJQk1Y MjUgKi8KKyNpZmRlZiBIUFgyNQorICAgIHsgIngiLCAgICAgICAgICAgIE5FVF9JWDI1LCBDTV9J TlZ8Q01fQUJSIH0sCisgICAgeyAieC4yNSIsICAgICAgICAgTkVUX0lYMjUsIDAgfSwKKyAgICB7 ICJ4MjUiLCAgICAgICAgICBORVRfSVgyNSwgQ01fSU5WIH0sCisjZW5kaWYgLyogSFBYMjUgKi8K KyNlbmRpZiAvKiBBTllYMjUgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbm5ldHMgPSAo c2l6ZW9mKG5ldGNtZCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCisjaWZuZGVmIE5PVENQ T1BUUworI2lmZGVmIFRDUFNPQ0tFVAorCisvKiBUQ1Agb3B0aW9ucyAqLworCitzdHJ1Y3Qga2V5 dGFiIHRjcG9wdFtdID0geworICAgIHsgImFkZHJlc3MiLCAgIFhZVENQX0FERFJFU1MsIDAgfSwK KyNpZmRlZiBDS19ETlNfU1JWCisgICAgeyAiZG5zLXNlcnZpY2UtcmVjb3JkcyIsIFhZVENQX0RO U19TUlYsIDAgfSwKKyNlbmRpZiAvKiBDS19ETlNfU1JWICovCisjaWZkZWYgU09fRE9OVFJPVVRF CisgICAgeyAiZG9udHJvdXRlIiwgICBYWVRDUF9ET05UUk9VVEUsIDAgfSwKKyNlbmRpZiAvKiBT T19ET05UUk9VVEUgKi8KKyNpZm5kZWYgTk9IVFRQCisgICAgeyAiaHR0cC1wcm94eSIsIFhZVENQ X0hUVFBfUFJPWFksIDAgfSwKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKyNpZmRlZiBTT19LRUVQQUxJ VkUKKyAgICB7ICJrZWVwYWxpdmUiLCBYWVRDUF9LRUVQQUxJVkUsIDAgfSwKKyNlbmRpZiAvKiBT T19LRUVQQUxJVkUgKi8KKyNpZmRlZiBTT19MSU5HRVIKKyAgICB7ICJsaW5nZXIiLCBYWVRDUF9M SU5HRVIsIDAgfSwKKyNlbmRpZiAvKiBTT19MSU5HRVIgKi8KKyNpZmRlZiBUQ1BfTk9ERUxBWQor ICAgIHsgIm5hZ2xlIiwgIFhZVENQX05BR0xFLCAgICBDTV9JTlYgfSwKKyAgICB7ICJub2RlbGF5 IiwgWFlUQ1BfTk9ERUxBWSwgMCB9LAorI2VuZGlmIC8qIFRDUF9OT0RFTEFZICovCisgICAgeyAi cmV2ZXJzZS1kbnMtbG9va3VwIiwgWFlUQ1BfUkROUywgMCB9LAorI2lmZGVmIFNPX1JDVkJVRgor ICAgIHsgInJlY3ZidWYiLCBYWVRDUF9SRUNWQlVGLCAwIH0sCisjZW5kaWYgLyogU09fUkNWQlVG ICovCisjaWZkZWYgU09fU05EQlVGCisgICAgeyAic2VuZGJ1ZiIsIFhZVENQX1NFTkRCVUYsIDAg fSwKKyNlbmRpZiAvKiBTT19TTkRCVUYgKi8KKyNpZmRlZiBOVAorI2lmZGVmIENLX1NPQ0tTCisg ICAgeyAic29ja3Mtc2VydmVyIiwgWFlUQ1BfU09DS1NfU1ZSLCAwIH0sCisjZW5kaWYgLyogQ0tf U09DS1MgKi8KKyNlbmRpZiAvKiBOVCAqLworI2lmZGVmIFZNUworI2lmZGVmIERFQ19UQ1BJUAor ICAgIHsgInVjeC1wb3J0LWJ1ZyIsIFhZVENQX1VDWCwgMCB9LAorI2VuZGlmIC8qIERFQ19UQ1BJ UCAqLworI2VuZGlmIC8qIFZNUyAqLworICAgIHsgIiIsMCwwIH0KK307CitpbnQgbnRjcG9wdCA9 IChzaXplb2YodGNwb3B0KSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSk7CisjZW5kaWYgLyogVENQ U09DS0VUICovCisjZW5kaWYgLyogTk9UQ1BPUFRTICovCisjZW5kaWYgLyogTkVUQ09OTiAqLwor CisjaWZkZWYgT1MyCisvKiBLOTUgTWFudWFsIENoYXB0ZXIgVGFibGUgLS0gS2VlcCB0aGVzZSB0 d28gdGFibGVzIGluIHN5bmMhICovCisKK3N0YXRpYyBjaGFyICogbGlua3RibFtdID0gewkJLyog SW50ZXJuYWwgbGlua3MgaW4gazk1Lmh0bSAqLworICAgICIjdG9wIiwJCQkJLyogMDAgKi8KKyAg ICAiI3doYXQiLAkJCQkvKiAwMSAqLworICAgICIjaW5zdGFsbCIsCQkJCS8qIDAyICovCisgICAg IiNzdGFydCIsCQkJCS8qIDAzICovCisgICAgIiNkaWFsZXIiLAkJCQkvKiAwNCAqLworICAgICIj ZW50cmllcyIsCQkJCS8qIDA1ICovCisgICAgIiNjb21tYW5kIiwJCQkJLyogMDYgKi8KKyAgICAi I3Rlcm1pbmFsIiwJCQkvKiAwNyAqLworICAgICIjdHJhbnNmZXIiLAkJCS8qIDA4ICovCisgICAg IiNob3N0bW9kZSIJCQkJLyogMDkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGNoYXB0 YmxbXSA9IHsKKyAgICB7ICJDb21tYW5kLVNjcmVlbiIsICAgICA2LCAwIH0sCisgICAgeyAiQ29u dGVudHMiLCAgICAgICAgICAgMCwgMCB9LAorICAgIHsgIkRpYWxlci1FbnRyaWVzIiwgICAgIDUs IDAgfSwKKyAgICB7ICJGaWxlLVRyYW5zZmVyIiwgICAgICA4LCAwIH0sCisgICAgeyAiR2V0dGlu Zy1TdGFydGVkIiwgICAgMywgMCB9LAorICAgIHsgIkhvc3QtTW9kZSIsICAgICAgICAgIDksIDAg fSwKKyAgICB7ICJJbnN0YWxsYXRpb24iLCAgICAgICAyLCAwIH0sCisgICAgeyAiVGVybWluYWwt RW11bGF0aW9uIiwgNywgMCB9LAorICAgIHsgIlVzaW5nLVRoZS1EaWFsZXIiLCAgIDQsIDAgfSwK KyAgICB7ICJXaGF0LUlzLUs5NSIsICAgICAgICAxLCAwIH0sCisgICAgeyAiIiwgICAgICAgICAg ICAgICAgICAgMCwgMCB9Cit9Oworc3RhdGljIGludCBuY2hhcHRibCA9IChzaXplb2YoY2hhcHRi bCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikgLSAxKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lm bmRlZiBOT1hGRVIKKy8qIFJlbW90ZSBDb21tYW5kIFRhYmxlICovCisKK3N0cnVjdCBrZXl0YWIg cmVtY21kW10gPSB7CisjaWZuZGVmIE5PU1BMCisgICAgeyAiYXMiLCAgICAgICAgWFpBU0csIENN X0lOVnxDTV9BQlIgfSwKKyAgICB7ICJhc2ciLCAgICAgICBYWkFTRywgQ01fSU5WIH0sCisgICAg eyAiYXNzaWduIiwgICAgWFpBU0csIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgImNk IiwgICAgICAgIFhaQ1dELCAwIH0sCisgICAgeyAiY2R1cCIsICAgICAgWFpDRFUsIENNX0lOViB9 LAorICAgIHsgImNvcHkiLCAgICAgIFhaQ1BZLCAwIH0sCisgICAgeyAiY3dkIiwgICAgICAgWFpD V0QsIENNX0lOViB9LAorICAgIHsgImRlbGV0ZSIsICAgIFhaREVMLCAwIH0sCisgICAgeyAiZGly ZWN0b3J5IiwgWFpESVIsIDAgfSwKKyAgICB7ICJlIiwgICAgICAgICBYWlhJVCwgQ01fQUJSfENN X0lOViB9LAorICAgIHsgImVyYXNlIiwgICAgIFhaREVMLCBDTV9JTlYgfSwKKyAgICB7ICJleGl0 IiwgICAgICBYWlhJVCwgMCB9LAorICAgIHsgImhlbHAiLCAgICAgIFhaSExQLCAwIH0sCisjaWZu ZGVmIE5PUFVTSAorICAgIHsgImhvc3QiLCAgICAgIFhaSE9TLCAwIH0sCisjZW5kaWYgLyogTk9Q VVNIICovCisjaWZuZGVmIE5PRlJJTExTCisgICAgeyAia2VybWl0IiwgICAgWFpLRVIsIDAgfSwK KyAgICB7ICJsIiwgICAgICAgICBYWkxHSSwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgImxvIiwg ICAgICAgIFhaTEdJLCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAibG9nIiwgICAgICAgWFpMR0ks IENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJsb2dpbiIsICAgICBYWkxHSSwgMCB9LAorICAgIHsg ImxvZ291dCIsICAgIFhaTEdPLCAwIH0sCisgICAgeyAibWVzc2FnZSIsICAgWFpNU0csIDAgfSwK KyAgICB7ICJta2RpciIsICAgICBYWk1LRCwgMCB9LAorICAgIHsgInByaW50IiwgICAgIFhaUFJJ LCAwIH0sCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKyAgICB7ICJwd2QiLCAgICAgICBYWlBXRCwg MCB9LAorI2lmbmRlZiBOT1NQTAorICAgIHsgInF1ZXJ5IiwJICAgWFpRVUUsIDAgfSwKKyNlbmRp ZiAvKiBOT1NQTCAqLworICAgIHsgInJlbmFtZSIsICAgIFhaUkVOLCAwIH0sCisgICAgeyAicm1k aXIiLCAgICAgWFpSTUQsIDAgfSwKKyAgICB7ICJzZXQiLCAgICAgICBYWlNFVCwgMCB9LAorICAg IHsgInNwYWNlIiwJICAgWFpTUEEsIDAgfSwKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJ0eXBl IiwgICAgICBYWlRZUCwgMCB9LAorICAgIHsgIndobyIsICAgICAgIFhaV0hPLCAwIH0sCisjZW5k aWYgLyogTk9GUklMTFMgKi8KKyAgICB7ICIiLCAwLCAwfQorfTsKK2ludCBucm10ID0gKHNpemVv ZihyZW1jbWQpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisjZW5kaWYgLyogTk9YRkVS ICovCisKK3N0cnVjdCBrZXl0YWIgbG9ndGFiW10gPSB7CisjaWZkZWYgQ0tMT0dESUFMCisgICAg eyAiY29ubmVjdGlvbnMiLCAgTE9HTSwgQ01fSU5WIH0sCisgICAgeyAiY3giLCAgICAgICAgICAg TE9HTSwgMCB9LAorI2VuZGlmIC8qIENLTE9HRElBTCAqLworI2lmZGVmIERFQlVHCisgICAgeyAi ZGVidWdnaW5nIiwgICAgTE9HRCwgMCB9LAorI2VuZGlmIC8qIERFQlVHICovCisgICAgeyAicGFj a2V0cyIsICAgICAgTE9HUCwgMCB9LAorI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAic2Vzc2lvbiIs ICAgICAgTE9HUywgMCB9LAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBUTE9HCisgICAg eyAidHJhbnNhY3Rpb25zIiwgTE9HVCwgMCB9LAorI2VuZGlmIC8qIFRMT0cgKi8KKyAgICB7ICIi LCAwLCAwIH0KK307CitpbnQgbmxvZyA9IChzaXplb2YobG9ndGFiKSAvIHNpemVvZihzdHJ1Y3Qg a2V5dGFiKSkgLSAxOworCitzdHJ1Y3Qga2V5dGFiIHdyaXRhYltdID0geworI2lmbmRlZiBOT1NQ TAorICAgIHsgImFwcGVuZC1maWxlIiwgICAgIExPR1csIENNX0lOViB9LAorI2VuZGlmIC8qIE5P U1BMICovCisgICAgeyAiZGVidWctbG9nIiwgICAgICAgTE9HRCwgMCB9LAorICAgIHsgImVycm9y IiwgICAgICAgICAgIExPR0UsIDAgfSwKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJmaWxlIiwgICAg ICAgICAgICBMT0dXLCAwIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICJwYWNrZXQtbG9n IiwgICAgICBMT0dQLCAwIH0sCisgICAgeyAic2NyZWVuIiwgICAgICAgICAgTE9HWCwgMCB9LAor I2lmbmRlZiBOT0xPQ0FMCisgICAgeyAic2Vzc2lvbi1sb2ciLCAgICAgTE9HUywgMCB9LAorI2Vu ZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB7ICJzeXMkb3V0cHV0IiwgICAgICBMT0dYLCBDTV9JTlYg fSwKKyAgICB7ICJ0IiwgICAgICAgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sIC8qIEJl Y2F1c2Ugb2YgYSB0eXBvIGluICovCisgICAgeyAidHIiLCAgICAgICAgICAgICAgTE9HVCwgQ01f QUJSfENNX0lOViB9LCAvKiB0aGUgYm9vay4uLiAqLworICAgIHsgInRyYSIsICAgICAgICAgICAg IExPR1QsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJ0cmFuIiwgICAgICAgICAgICBMT0dULCBD TV9BQlJ8Q01fSU5WIH0sCisgICAgeyAidHJhbnMiLCAgICAgICAgICAgTE9HVCwgQ01fQUJSfENN X0lOViB9LAorICAgIHsgInRyYW5zYSIsICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwK KyAgICB7ICJ0cmFuc2FjIiwgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAi dHJhbnNhY3QiLCAgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInRyYW5zYWN0 aSIsICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJ0cmFuc2FjdGlvIiwgICAg ICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAidHJhbnNhY3Rpb24iLCAgICAgTE9HVCwg Q01fQUJSfENNX0lOViB9LAorICAgIHsgInRyYW5zYWN0aW9uLWxvZyIsIExPR1QsIDAgfSwKKyAg ICB7ICJ0cmFuc2FjdGlvbnMiLCAgICBMT0dULCBDTV9JTlYgfQorfTsKK2ludCBud3JpID0gKHNp emVvZih3cml0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgY2xydGFiW10gPSB7CS8qIEtleXdvcmRzIGZvciBDTEVBUiBjb21tYW5kICovCisjaWZu ZGVmIE5PU1BMCisgICAgeyAiYWxhcm0iLCAgICAgICAgICAgIENMUl9BTFIsICAgICAgICAgMCB9 LAorI2lmZGVmIENLX0FQQworICAgIHsgImFwYyIsICAgICAgICAgICAgICBDTFJfQVBDLCAgICAg ICAgIDAgfSwKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNpZmRlZiBQQVRURVJOUworICAgIHsgImJp bmFyeS1wYXR0ZXJucyIsICBDTFJfQklOLCAgICAgICAgIDAgfSwKKyNlbmRpZiAvKiBQQVRURVJO UyAqLworICAgIHsgImJvdGgiLCAgICAgICAgICAgICBDTFJfREVWfENMUl9JTlAsIENNX0lOViB9 LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgT1MyCisgICAgeyAiY29tbWFuZC1zY3JlZW4i LCAgIENMUl9DTUQsICAgICAgICAgMCB9LAorI2VuZGlmIC8qIE9TMiAqLworI2lmbmRlZiBOT1NQ TAorICAgIHsgImRldmljZSIsICAgICAgICAgICBDTFJfREVWLCAgICAgICAgIENNX0lOVnxDTV9B QlIgfSwKKyAgICB7ICJkZXZpY2UtYW5kLWlucHV0IiwgQ0xSX0RFVnxDTFJfSU5QLCAwIH0sCisj ZW5kaWYgLyogTk9TUEwgKi8KKyAgICB7ICJkZXZpY2UtYnVmZmVyIiwgICAgQ0xSX0RFViwgICAg ICAgICAwIH0sCisjaWZuZGVmIE5PRElBTAorICAgIHsgImRpYWwtc3RhdHVzIiwgICAgICBDTFJf RElBLAkgMCB9LAorI2VuZGlmIC8qIE5PRElBTCAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgImlu cHV0LWJ1ZmZlciIsICAgICBDTFJfSU5QLCAgICAgICAgIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAq LworICAgIHsgImtleWJvYXJkLWJ1ZmZlciIsICBDTFJfS0JELCAgICAgICAgIDAgfSwKKyAgICB7 ICJzZW5kLWxpc3QiLCAgICAgICAgQ0xSX1NGTCwgICAgICAgICAwIH0sCisjaWZkZWYgT1MyCisg ICAgeyAic2NyIiwgICAgICAgICAgICAgIENMUl9TQ0wsICAgICAgICAgQ01fSU5WfENNX0FCUiB9 LAorI2VuZGlmIC8qIE9TMiAqLworICAgIHsgInNjcmVlbiIsICAgICAgICAgICBDTFJfU0NSLCAg ICAgICAgIDAgfSwKKyNpZmRlZiBPUzIKKyAgICB7ICJzY3JvbGxiYWNrIiwgICAgICAgQ0xSX1ND TCwgICAgICAgICBDTV9JTlYgfSwKKyAgICB7ICJ0ZXJtaW5hbC1zY3JlZW4iLCAgQ0xSX1RSTSwg ICAgICAgICAwIH0sCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYgUEFUVEVSTlMKKyAgICB7ICJ0 ZXh0LXBhdHRlcm5zIiwgICAgQ0xSX1RYVCwgICAgICAgICAwIH0sCisjZW5kaWYgLyogUEFUVEVS TlMgKi8KKyAgICB7ICIiLCAwLCAwIH0KK307CitpbnQgbmNsZWFyID0gKHNpemVvZihjbHJ0YWIp IC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0cnVjdCBrZXl0YWIgY2xzdGFiW10g PSB7CQkvKiBLZXl3b3JkcyBmb3IgQ0xPU0UgY29tbWFuZCAqLworI2lmbmRlZiBOT1NQTAorICAg IHsgIiFyZWFkIiwgICAgICAgICAgIExPR1IsIENNX0lOViB9LAorICAgIHsgIiF3cml0ZSIsICAg ICAgICAgIExPR1csIENNX0lOViB9LAorI2lmbmRlZiBOT1BVU0gKKyNlbmRpZiAvKiBOT1BVU0gg Ki8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgImFwcGVuZC1maWxl IiwgICAgIExPR1csIENNX0lOViB9LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PTE9D QUwKKyAgICB7ICJjb25uZWN0aW9uIiwgICAgICA5OTk5LCAwIH0sCisjZW5kaWYgLyogTk9MT0NB TCAqLworI2lmZGVmIENLTE9HRElBTAorICAgIHsgImN4LWxvZyIsICAgICAgICAgIExPR00sIDAg fSwKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKyNpZmRlZiBERUJVRworICAgIHsgImRlYnVnLWxv ZyIsICAgICAgIExPR0QsIDAgfSwKKyNlbmRpZiAvKiBERUJVRyAqLworICAgIHsgImhvc3QiLCAg ICAgICAgICAgIDk5OTksIENNX0lOViB9LCAvKiBTeW5vbnltIGZvciBDTE9TRSBDT05ORUNUSU9O ICovCisgICAgeyAibGluZSIsICAgICAgICAgICAgOTk5OSwgQ01fSU5WIH0sIC8qIFN5bm9ueW0g Zm9yIENMT1NFIENPTk5FQ1RJT04gKi8KKyAgICB7ICJwIiwgICAgICAgICAgICAgICBMT0dQLCBD TV9JTlZ8Q01fQUJSIH0sCisgICAgeyAicGFja2V0LWxvZyIsICAgICAgTE9HUCwgMCB9LAorICAg IHsgInBvcnQiLCAgICAgICAgICAgIDk5OTksIENNX0lOViB9LCAvKiBTeW5vbnltIGZvciBDTE9T RSBDT05ORUNUSU9OICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAicmVhZC1maWxlIiwgICAgICAg TE9HUiwgMCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICB7ICJz ZXNzaW9uLWxvZyIsICAgICBMT0dTLCAwIH0sCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVm IFRMT0cKKyAgICB7ICJ0IiwgICAgICAgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sIC8q IEJlY2F1c2Ugb2YgYSB0eXBvIGluICovCisgICAgeyAidHIiLCAgICAgICAgICAgICAgTE9HVCwg Q01fQUJSfENNX0lOViB9LCAvKiB0aGUgYm9vay4uLiAqLworICAgIHsgInRyYSIsICAgICAgICAg ICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJ0cmFuIiwgICAgICAgICAgICBMT0dU LCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAidHJhbnMiLCAgICAgICAgICAgTE9HVCwgQ01fQUJS fENNX0lOViB9LAorICAgIHsgInRyYW5zYSIsICAgICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYg fSwKKyAgICB7ICJ0cmFuc2FjIiwgICAgICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCisgICAg eyAidHJhbnNhY3QiLCAgICAgICAgTE9HVCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInRyYW5z YWN0aSIsICAgICAgIExPR1QsIENNX0FCUnxDTV9JTlYgfSwKKyAgICB7ICJ0cmFuc2FjdGlvIiwg ICAgICBMT0dULCBDTV9BQlJ8Q01fSU5WIH0sCisgICAgeyAidHJhbnNhY3Rpb24iLCAgICAgTE9H VCwgQ01fQUJSfENNX0lOViB9LAorICAgIHsgInRyYW5zYWN0aW9uLWxvZyIsIExPR1QsIDAgfSwK KyAgICB7ICJ0cmFuc2FjdGlvbnMiLCAgICBMT0dULCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBUTE9H ICovCisjaWZuZGVmIE5PU1BMCisgICAgeyAid3JpdGUtZmlsZSIsICAgICAgTE9HVywgMCB9LAor I2VuZGlmIC8qIE5PU1BMICovCisgICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG5jbHMgPSAoc2l6 ZW9mKGNsc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKworLyogU0hPVyBjb21t YW5kIGFyZ3VtZW50cyAqLworCisjaWZuZGVmIE5PU0hPVworc3RydWN0IGtleXRhYiBzaG90YWJb XSA9IHsKKyNpZm5kZWYgTk9TUEwKKyAgICB7ICJhbGFybSIsICAgICAgICBTSEFMUk0sIDAgfSwK KyAgICB7ICJhcmciLCAgICAgICAgICBTSEFSRywgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgImFy Z3VtZW50cyIsICAgIFNIQVJHLCAwIH0sCisgICAgeyAiYXJncyIsICAgICAgICAgU0hBUkcsIENN X0lOViB9LAorICAgIHsgImFycmF5cyIsICAgICAgIFNIQVJSLCAwIH0sCisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmbmRlZiBOT0NTRVRTCisgICAgeyAiYXNzb2NpYXRpb25zIiwgU0hBU1NPQywg MCB9LAorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICB7ICJhdHRy aWJ1dGVzIiwgICBTSEFUVCwgMCB9LAorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tf QVVUSEVOVElDQVRJT04KKyAgICB7ICJhdXRoZW50aWNhdGlvbiIsIFNIT0FVVEgsIENNX0lOViB9 LAorI2VuZGlmIC8qIENLX0FVVEhFTlRJQ0FUSU9OICovCisKKyNpZm5kZWYgTk9QVVNICisjaWZk ZWYgQlJPV1NFUgorICAgIHsgImJyb3dzZXIiLCAgICAgIFNIQlJPV1NFLCBDTV9QU0h8Q01fTE9D IH0sCisjZW5kaWYgLyogIEJST1dTRVIgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyAgICB7ICJj ZCIsICAgICAgICAgICBTSENELCAwIH0sCisgICAgeyAiY2hhcmFjdGVyLXNldHMiLCBTSENTRSwg MCB9LAorICAgIHsgImNtZCIsICAgICAgICAgIFNIQ01ELCBDTV9JTlYgfSwKKyNpZm5kZWYgTk9M T0NBTAorICAgIHsgImNvbSIsICAgICAgICAgIFNIQ09NLCBDTV9JTlZ8Q01fQUJSIH0sCisgICAg eyAiY29tbSIsICAgICAgICAgU0hDT00sIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJjb21tdW5p Y2F0aW9ucyIsIFNIQ09NLCAwIH0sCisjZW5kaWYgLyogTk9MT0NBTCAqLworICAgIHsgImNvbW1h bmQiLCAgICAgIFNIQ01ELCAwIH0sCisgICAgeyAiY29ubmVjdGlvbiIsICAgU0hDT05OWCwgMCB9 LAorI2lmZGVmIENLX1NQRUVECisgICAgeyAiY29udHJvbC1wcmVmaXhpbmciLCBTSENUTCwgMCB9 LAorI2VuZGlmIC8qIENLX1NQRUVEICovCisjaWZkZWYgQ0tMT0dESUFMCisgICAgeyAiY3giLCAg ICAgICAgICAgU0hDT05OWCwgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0tMT0dESUFMICovCisjaWZu ZGVmIE5PU1BMCisgICAgeyAiY291bnQiLCAgICAgICAgU0hDT1UsIDAgfSwKKyNlbmRpZiAvKiBO T1NQTCAqLworICAgIHsgImQiLCAgICAgICAgICAgIFNIRElBLCBDTV9JTlZ8Q01fQUJSIH0sCisj aWZkZWYgVk1TCisgICAgeyAiZGVmYXVsdCIsICAgICAgU0hERkxULCAwIH0sCisjZWxzZQorICAg IHsgImRlZmF1bHQiLCAgICAgIFNIREZMVCwgQ01fSU5WIH0sCisjZW5kaWYgLyogVk1TICovCisj aWZuZGVmIE5PRElBTAorICAgIHsgImRpYWwiLCAgICAgICAgIFNIRElBLCBDTV9MT0MgfSwKKyNl bmRpZiAvKiBOT0RJQUwgKi8KKyAgICB7ICJkb3VibGUvaWdub3JlIixTSERCTCwgMCB9LAorI2lm bmRlZiBOT1BVU0gKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICJlZGl0b3IiLCAgICAgICBTSEVE SVQsIENNX1BTSCB9LAorI2VuZGlmIC8qICBOT0ZSSUxMUyAqLworI2VuZGlmIC8qIE5PUFVTSCAq LworI2lmbmRlZiBOT0xPQ0FMCisgICAgeyAiZXNjYXBlIiwgICAgICAgU0hFU0MsIENNX0xPQyB9 LAorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB7ICJleGl0IiwgICAgICAgICBTSEVYSSwgMCB9 LAorICAgIHsgImV4dGVuZGVkLW9wdGlvbnMiLCBTSFhPUFQsIENNX0lOViB9LAorICAgIHsgImZl YXR1cmVzIiwgICAgIFNIRkVBLCAwIH0sCisgICAgeyAiZmlsZSIsICAgICAgICAgU0hGSUwsIDAg fSwKKyNpZm5kZWYgTk9MT0NBTAorICAgIHsgImZsb3ctY29udHJvbCIsIFNIT0ZMTywgMCB9LAor I2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBCUk9XU0VSCisgICAgeyAiZnRwIiwgICAgICAg ICAgU0hPRlRQLCBDTV9QU0h8Q01fTE9DIH0sCisjZWxzZQorI2lmbmRlZiBOT0ZUUAorI2lmbmRl ZiBTWVNGVFAKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICB7ICJmdHAiLCAgICAgICAgICBTSE9GVFAs IDAgfSwJLyogKGJ1aWx0LWluIGZ0cCkgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRp ZiAvKiBTWVNGVFAgKi8KKyNlbmRpZiAvKiBOT0ZUUCAqLworI2VuZGlmIC8qIEJST1dTRVIgKi8K KyNpZm5kZWYgTk9TUEwKKyAgICB7ICJmdW5jdGlvbnMiLCAgICBTSEZVTiwgMCB9LAorICAgIHsg Imdsb2JhbHMiLCAgICAgIFNIVkFSLCAwIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBL VUkKKyAgICB7ICJndWkiLCAgICAgICAgICBTSE9HVUksIDAgfSwKKyNlbmRpZiAvKiBLVUkgKi8K KyNpZmRlZiBDS19SRUNBTEwKKyAgICB7ICJoaXN0b3J5IiwgICAgICBTSEhJU1RPUlksIDAgfSwK KyNlbmRpZiAvKiBDS19SRUNBTEwgKi8KKyAgICB7ICJpZ25vcmUvZG91YmxlIixTSERCTCwgQ01f SU5WIH0sCisgICAgeyAiaWtzZCIsICAgICAgICAgU0hPSUtTLCBDTV9JTlYgfSwKKyNpZm5kZWYg Tk9TUEwKKyAgICB7ICJpbnB1dCIsICAgICAgICBTSElOUCwgMCB9LAorI2VuZGlmIC8qIE5PU1BM ICovCisjaWZuZGVmIE5PU0VUS0VZCisgICAgeyAiayIsICAgICAgICAgICAgU0hLRVksIENNX0lO VnxDTV9BQlIgfSwKKyAgICB7ICJrZXkiLCAgICAgICAgICBTSEtFWSwgMCB9LAorI2lmbmRlZiBO T0tWRVJCUworICAgIHsgImt2ZXJicyIsICAgICAgIFNIS1ZCLCAwIH0sCisjZW5kaWYgLyogTk9L VkVSQlMgKi8KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworI2lmZGVmIENLX0xBQkVMRUQKKyAgICB7 ICJsYWJlbGVkLWZpbGUtaW5mbyIsIFNITEJMLCAwIH0sCisjZW5kaWYgLyogQ0tfTEFCRUxFRCAq LworI2lmbmRlZiBOT0NTRVRTCisgICAgeyAibGFuZ3VhZ2VzIiwgICAgU0hMTkcsIDAgfSwKKyNl bmRpZiAvKiBOT0NTRVRTICovCisgICAgeyAibG9ncyIsICAgICAgICAgU0hMT0csIDAgfSwKKyNp Zm5kZWYgTk9TUEwKKyAgICB7ICJtYWNyb3MiLCAgICAgICBTSE1BQywgMCB9LAorI2VuZGlmIC8q IE5PU1BMICovCisjaWZuZGVmIE5PRElBTAorICAgIHsgIm1vZGVtIiwgICAgICAgIFNITU9ELCBD TV9MT0MgfSwKKyNlbHNlCisgICAgeyAibW9kZW0tc2lnbmFscyIsU0hDT00sIENNX0lOVnxDTV9M T0MgfSwKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMk1P VVNFCisgICAgeyAibW91c2UiLCAgICAgICAgU0hNT1UsIENNX0xPQyB9LAorI2VuZGlmIC8qIE9T Mk1PVVNFICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIE5FVENPTk4KKyAgICB7ICJu ZXR3b3JrIiwgICAgICBTSE5FVCwgQ01fTE9DIH0sCisjZWxzZQorICAgIHsgIm5ldHdvcmsiLCAg ICAgIFNITkVULCBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgIHsg Im9wdGlvbnMiLCAgICAgIFNIT1BUUywgMCB9LAorI2lmbmRlZiBOT1NQTAorICAgIHsgIm91dHB1 dCIsICAgICAgIFNIT1VUUCwgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBB TllYMjUKKyNpZm5kZWYgSUJNWDI1CisgICAgeyAicGFkIiwgICAgICAgICAgU0hQQUQsICBDTV9M T0MgfSwKKyNlbmRpZiAvKiBJQk1YMjUgKi8KKyNlbmRpZiAvKiBBTllYMjUgKi8KKyAgICB7ICJw YXJhbWV0ZXJzIiwgICBTSFBBUiwgIENNX0lOViB9LAorI2lmZGVmIFBBVFRFUk5TCisgICAgeyAi cGF0dGVybnMiLCAgICAgU0hPUEFULCAwIH0sCisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKyAgICB7 ICJwcmludGVyIiwgICAgICBTSFBSVCwgIDAgfSwKKyNpZmRlZiBDS19TUEVFRAorICAgIHsgInBy ZWZpeGluZyIsICAgIFNIQ1RMLCAgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKyNp Zm5kZWYgTk9YRkVSCisgICAgeyAicHJvdG9jb2wiLCAgICAgU0hQUk8sICAwIH0sCisjZW5kaWYg LyogTk9YRkVSICovCisgICAgeyAicmVuYW1lIiwgICAgICAgU0hPUkVOLCAwIH0sCisjaWZuZGVm IE5PU1BMCisgICAgeyAic2NyaXB0cyIsICAgICAgU0hTQ1IsICBDTV9MT0MgfSwKKyNlbmRpZiAv KiBOT1NQTCAqLworICAgIHsgInNlbmQtbGlzdCIsICAgIFNIU0ZMLCAgMCB9LAorI2lmbmRlZiBO T1NFUlZFUgorICAgIHsgInNlcnZlciIsICAgICAgIFNIU0VSLCAgMCB9LAorI2VuZGlmIC8qIE5P U0VSVkVSICovCisjaWZuZGVmIE5PU0VYUAorICAgIHsgInNleHByZXNzaW9uIiwgIFNIU0VYUCwg MCB9LAorI2VuZGlmIC8qIE5PU0VYUCAqLworI2lmZGVmIEFOWVNTSAorICAgIHsgInNzaCIsICAg ICAgICAgIFNIT1NTSCwgMCB9LAorI2VuZGlmIC8qIEFOWVNTSCAqLworICAgIHsgInN0YWNrIiwg ICAgICAgIFNIU1RLLCAgMCB9LAorICAgIHsgInN0YXR1cyIsICAgICAgIFNIU1RBLCAgMCB9LAor I2lmZGVmIFNUUkVBTUlORworICAgIHsgInN0cmVhbWluZyIsICAgIFNIT1NUUiwgMCB9LAorI2Vu ZGlmIC8qIFNUUkVBTUlORyAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgeyAi dGFicyIsICAgICAgICAgIFNIVEFCLCBDTV9JTlZ8Q01fTE9DIH0sCisjZW5kaWYgLyogT1MyICov CisjaWZkZWYgQ0tfVEFQSQorICAgIHsgInRhcGkiLCAgICAgICAgICBTSFRBUEksIENNX0xPQyB9 LAorICAgIHsgInRhcGktY29tbSIsICAgICBTSFRBUElfQywgQ01fSU5WfENNX0xPQyB9LAorICAg IHsgInRhcGktbG9jYXRpb24iLCBTSFRBUElfTCwgQ01fSU5WfENNX0xPQyB9LAorICAgIHsgInRh cGktbW9kZW0iLCAgICBTSFRBUElfTSwgQ01fSU5WfENNX0xPQyB9LAorI2VuZGlmIC8qIENLX1RB UEkgKi8KKyAgICB7ICJ0Y3AiLCAgICAgICAgICAgU0hUQ1AsICBDTV9MT0MgfSwKKyNpZmRlZiBU TkNPREUKKyAgICB7ICJ0ZWwiLCAgICAgICAgICAgU0hURUwsICBDTV9JTlZ8Q01fQUJSIH0sCisg ICAgeyAidGVsbmV0IiwgICAgICAgIFNIVEVMLCAgMCB9LAorICAgIHsgInRlbG9wdCIsICAgICAg ICBTSFRPUFQsIDAgfSwKKyNlbmRpZiAvKiBUTkNPREUgKi8KKyAgICB7ICJ0ZXJtaW5hbCIsICAg ICAgU0hURVIsICBDTV9MT0MgfSwKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZuZGVmIE5PWE1J VAorICAgIHsgInRyIiwgICAgICAgICAgICBTSFhNSSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsg InRyYSIsICAgICAgICAgICBTSFhNSSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgInRyYW4iLCAg ICAgICAgICBTSFhNSSwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgInRyYW5zIiwgICAgICAgICBT SFhNSSwgQ01fSU5WfENNX0FCUiB9LAorI2VuZGlmIC8qIE5PWE1JVCAqLworI2lmbmRlZiBOT1hG RVIKKyAgICB7ICJ0cmFuc2ZlciIsICAgICAgU0hPWEZFUiwgMCB9LAorI2VuZGlmIC8qIE5PWEZF UiAqLworI2lmbmRlZiBOT1hNSVQKKyAgICB7ICJ0cmFuc21pdCIsICAgICAgU0hYTUksIDAgfSwK KyNlbmRpZiAvKiBOT1hNSVQgKi8KKyNpZmRlZiBDS19UUklHR0VSCisgICAgeyAidHJpZ2dlciIs ICAgICAgIFNIVFJJRywgQ01fTE9DIH0sCisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworI2lmbmRl ZiBOT1NFVEtFWQorI2lmbmRlZiBOT0tWRVJCUworI2lmZGVmIE9TMgorICAgIHsgInVkayIsICAg ICAgICAgICBTSFVESywgQ01fTE9DIH0sCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogTk9L VkVSQlMgKi8KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworI2lmbmRlZiBOT1NQTAorICAgIHsgInZh cmlhYmxlcyIsICAgICBTSEJVSSwgMCB9LAorI2VuZGlmIC8qIE5PU1BMICovCisjaWZuZGVmIE5P RlJJTExTCisgICAgeyAidmVyc2lvbnMiLCAgICAgIFNIVkVSLCAwIH0sCisjZW5kaWYgLyogTk9G UklMTFMgKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJ2c2NybiIsICAgICAgICAgU0hWU0NSTiwgQ01f SU5WfENNX0xPQyB9LAorI2VuZGlmIC8qIE9TMiAqLworICAgIHsgInhmZXIiLCAgICAgICAgICBT SE9YRkVSLCAgQ01fSU5WIH0sCisjaWZuZGVmIE5PWE1JVAorICAgIHsgInhtaXQiLCAgICAgICAg ICBTSFhNSSwgICAgQ01fSU5WIH0sCisjZW5kaWYgLyogTk9YTUlUICovCisgICAgeyAiIiwgMCwg MCB9Cit9OworaW50IG5zaG8gPSAoc2l6ZW9mKHNob3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh YikpIC0gMTsKKyNlbmRpZiAvKiBOT1NIT1cgKi8KKworI2lmZGVmIEFOWVgyNQorI2lmbmRlZiBJ Qk1YMjUKK3N0cnVjdCBrZXl0YWIgcGFkdGFiW10gPSB7ICAgICAgICAgICAgICAvKiBQQUQgY29t bWFuZHMgKi8KKyAgICB7ICJjbGVhciIsICAgICAgWFlQQURMLCAwIH0sCisgICAgeyAiaW50ZXJy dXB0IiwgIFhZUEFESSwgMCB9LAorICAgIHsgInJlc2V0IiwgICAgICBYWVBBRFIsIDAgfSwKKyAg ICB7ICJzdGF0dXMiLCAgICAgWFlQQURTLCAwIH0KK307CitpbnQgbnBhZGMgPSAoc2l6ZW9mKHBh ZHRhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworI2VuZGlmIC8qIElCTVgyNSAqLworI2Vu ZGlmIC8qIEFOWVgyNSAqLworCisjaWZuZGVmIE5PU0VSVkVSCitzdGF0aWMgc3RydWN0IGtleXRh YiBrbXN0YWJbXSA9IHsKKyAgICB7ICJib3RoIiwgICAgMywgMCB9LAorICAgIHsgImxvY2FsIiwg ICAxLCAwIH0sCisgICAgeyAicmVtb3RlIiwgIDIsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCBr ZXl0YWIgZW5hdGFiW10gPSB7CS8qIEVOQUJMRSBjb21tYW5kcyAqLworICAgIHsgImFsbCIsICAg ICAgICBFTl9BTEwsICAwIH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAiYXMiLCAgICAgICAgIEVO X0FTRywgIENNX0lOVnxDTV9BQlIgfSwKKyAgICB7ICJhc2ciLCAgICAgICAgRU5fQVNHLCAgQ01f SU5WIH0sCisgICAgeyAiYXNzaWduIiwgICAgIEVOX0FTRywgIDAgfSwKKyNlbmRpZiAvKiBOT1NQ TCAqLworI2lmbmRlZiBkYXRhZ2VuZXJhbAorICAgIHsgImJ5ZSIsICAgICAgICBFTl9CWUUsICAw IH0sCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyAgICB7ICJjZCIsICAgICAgICAgRU5fQ1dE LCAgMCB9LAorI2lmZGVmIFpDT1BZCisgICAgeyAiY29weSIsICAgICAgIEVOX0NQWSwgIDAgfSwK KyNlbmRpZiAvKiBaQ09QWSAqLworICAgIHsgImN3ZCIsICAgICAgICBFTl9DV0QsICBDTV9JTlYg fSwKKyAgICB7ICJkZWxldGUiLCAgICAgRU5fREVMLCAgMCB9LAorICAgIHsgImRpcmVjdG9yeSIs ICBFTl9ESVIsICAwIH0sCisgICAgeyAiZW5hYmxlIiwgICAgIEVOX0VOQSwgIENNX0lOViB9LAor ICAgIHsgImV4aXQiLCAgICAgICBFTl9YSVQsICAwIH0sCisgICAgeyAiZmluaXNoIiwgICAgIEVO X0ZJTiwgIDAgfSwKKyAgICB7ICJnZXQiLCAgICAgICAgRU5fR0VULCAgMCB9LAorICAgIHsgImhv c3QiLCAgICAgICBFTl9IT1MsICAwIH0sCisgICAgeyAibWFpbCIsICAgICAgIEVOX01BSSwgIDAg fSwKKyAgICB7ICJta2RpciIsICAgICAgRU5fTUtELCAgMCB9LAorICAgIHsgInByaW50IiwgICAg ICBFTl9QUkksICAwIH0sCisjaWZuZGVmIE5PU1BMCisgICAgeyAicXVlcnkiLCAgICAgIEVOX1FV RSwgIDAgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgInJlbmFtZSIsICAgICBFTl9SRU4s ICAwIH0sCisgICAgeyAicmV0cmlldmUiLCAgIEVOX1JFVCwgIENNX0lOViB9LAorICAgIHsgInJt ZGlyIiwgICAgICBFTl9STUQsICAwIH0sCisgICAgeyAic2VuZCIsICAgICAgIEVOX1NFTiwgIDAg fSwKKyAgICB7ICJzZXQiLCAgICAgICAgRU5fU0VULCAgMCB9LAorICAgIHsgInNwYWNlIiwgICAg ICBFTl9TUEEsICAwIH0sCisgICAgeyAidHlwZSIsICAgICAgIEVOX1RZUCwgIDAgfSwKKyAgICB7 ICJ3aG8iLCAgICAgICAgRU5fV0hPLCAgMCB9Cit9Oworc3RhdGljIGludCBuZW5hID0gKHNpemVv ZihlbmF0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKTsKKyNlbmRpZiAvKiBOT1NFUlZFUiAq LworCitzdHJ1Y3Qga2V5dGFiIHR4dGJpbltdID0geworICAgIHsgImFsbCIsICAgICAgICAyLCAw IH0sCisgICAgeyAiYmluYXJ5IiwgICAgIDEsIDAgfSwKKyAgICB7ICJ0ZXh0IiwgICAgICAgMCwg MCB9Cit9OworCisjaWZuZGVmIE5PWEZFUgorc3RhdGljIHN0cnVjdCBrZXl0YWIgc25kdGFiW10g PSB7CS8qIFNFTkQgY29tbWFuZCBvcHRpb25zICovCisgICAgeyAiL2FmdGVyIiwgICAgICAgICAg IFNORF9BRlQsIENNX0FSRyB9LAorI2lmbmRlZiBOT1NQTAorICAgIHsgIi9hcnJheSIsICAgICAg ICAgICBTTkRfQVJSLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHsgIi9hcy1u YW1lIiwgICAgICAgICBTTkRfQVNOLCBDTV9BUkcgfSwKKyAgICB7ICIvYiIsICAgICAgICAgICAg ICAgU05EX0JJTiwgQ01fSU5WfENNX0FCUiB9LAorICAgIHsgIi9iZWZvcmUiLCAgICAgICAgICBT TkRfQkVGLCBDTV9BUkcgfSwKKyAgICB7ICIvYmluYXJ5IiwgICAgICAgICAgU05EX0JJTiwgMCB9 LAorI2lmZGVmIENBTElCUkFURQorICAgIHsgIi9jIiwgICAgICAgICAgICAgICBTTkRfQ01ELCBD TV9JTlZ8Q01fQUJSIH0sCisgICAgeyAiL2NhbGlicmF0ZSIsICAgICAgIFNORF9DQUwsIENNX0lO VnxDTV9BUkcgfSwKKyNlbmRpZiAvKiBDQUxJQlJBVEUgKi8KKyAgICB7ICIvY29tbWFuZCIsICAg ICAgICAgU05EX0NNRCwgQ01fUFNIIH0sCisgICAgeyAiL2RlbGV0ZSIsICAgICAgICAgIFNORF9E RUwsIDAgfSwKKyNpZmRlZiBVTklYT1JPU0sKKyAgICB7ICIvZG90ZmlsZXMiLCAgICAgICAgU05E X0RPVCwgMCB9LAorI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgIHsgIi9leGNlcHQiLCAgICAg ICAgICBTTkRfRVhDLCBDTV9BUkcgfSwKKyNpZmRlZiBQSVBFU0VORAorICAgIHsgIi9maWx0ZXIi LCAgICAgICAgICBTTkRfRkxULCBDTV9BUkd8Q01fUFNIIH0sCisjZW5kaWYgLyogUElQRVNFTkQg Ki8KKyAgICB7ICIvZmlsZW5hbWVzIiwgICAgICAgU05EX05BTSwgQ01fQVJHIH0sCisjaWZkZWYg Q0tTWU1MSU5LCisgICAgeyAiL2ZvbGxvd2xpbmtzIiwJICBTTkRfTE5LLCAwIH0sCisjZW5kaWYg LyogQ0tTWU1MSU5LICovCisjaWZkZWYgVk1TCisgICAgeyAiL2ltYWdlIiwgICAgICAgICAgIFNO RF9JTUcsIDAgfSwKKyNlbHNlCisgICAgeyAiL2ltYWdlIiwgICAgICAgICAgIFNORF9CSU4sIENN X0lOViB9LAorI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIENLX0xBQkVMRUQKKyAgICB7ICIvbGFi ZWxlZCIsICAgICAgICAgU05EX0xCTCwgMCB9LAorI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKyAg ICB7ICIvbGFyZ2VyLXRoYW4iLCAgICAgU05EX0xBUiwgQ01fQVJHIH0sCisgICAgeyAiL2xpc3Rm aWxlIiwgICAgICAgIFNORF9GSUwsIENNX0FSRyB9LAorI2lmbmRlZiBOT0ZSSUxMUworICAgIHsg Ii9tYWlsIiwgICAgICAgICAgICBTTkRfTUFJLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBOT0ZSSUxM UyAqLworI2lmZGVmIENLX1RNUERJUgorICAgIHsgIi9tb3ZlLXRvIiwgICAgICAgICBTTkRfTU9W LCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKyAgICB7ICIvbm9iYWNrdXBmaWxl cyIsICAgU05EX05PQiwgMCB9LAorI2lmZGVmIFVOSVhPUk9TSworICAgIHsgIi9ub2RvdGZpbGVz IiwgICAgICBTTkRfTk9ELCAwIH0sCisjZW5kaWYgLyogVU5JWE9ST1NLICovCisjaWZkZWYgQ0tT WU1MSU5LCisgICAgeyAiL25vZm9sbG93bGlua3MiLAkgIFNORF9OTEssIDAgfSwKKyNlbmRpZiAv KiBDS1NZTUxJTksgKi8KKyAgICB7ICIvbm90LWFmdGVyIiwgICAgICAgU05EX05BRiwgQ01fQVJH IH0sCisgICAgeyAiL25vdC1iZWZvcmUiLCAgICAgIFNORF9OQkUsIENNX0FSRyB9LAorICAgIHsg Ii9wYXRobmFtZXMiLCAgICAgICBTTkRfUFRILCBDTV9BUkcgfSwKKyAgICB7ICIvcHJpbnQiLCAg ICAgICAgICAgU05EX1BSSSwgQ01fQVJHIH0sCisjaWZkZWYgQ0tfWFlaCisgICAgeyAiL3Byb3Rv Y29sIiwgICAgICAgIFNORF9QUk8sIENNX0FSRyB9LAorI2Vsc2UKKyAgICB7ICIvcHJvdG9jb2wi LCAgICAgICAgU05EX1BSTywgQ01fQVJHfENNX0lOViB9LAorI2VuZGlmIC8qIENLX1hZWiAqLwor ICAgIHsgIi9xdWlldCIsICAgICAgICAgICBTTkRfU0hILCAwIH0sCisgICAgeyAiL3JlY292ZXIi LCAgICAgICAgIFNORF9SRVMsIDAgfSwKKyNpZmRlZiBSRUNVUlNJVkUKKy8qIFN5c3RlbXMgd2hl cmUgd2UgZG8gcmVjdXJzaW9uICovCisgICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAgIFNORF9SRUMs IDAgfSwKKyNlbHNlCisjaWZkZWYgVk1TCisvKiBTeXN0ZW1zIHRoYXQgZG8gcmVjdXJzaW9uIHRo ZW1zZWx2ZXMgd2l0aG91dCBvdXIgYXNzaXN0YW5jZSAqLworLyogaWYgd2UgZ2l2ZSB0aGVtIHRo ZSByaWdodCBraW5kIG9mIHdpbGRjYXJkICovCisgICAgeyAiL3JlY3Vyc2l2ZSIsICAgICAgIFNO RF9SRUMsIDAgfSwKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICB7ICIvcmVjdXJzaXZl IiwgICAgICAgU05EX1JFQywgMCB9LAorI2Vsc2UKKyAgICB7ICIvcmVjdXJzaXZlIiwgICAgICAg U05EX1JFQywgQ01fSU5WIH0sCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKyAgICB7ICIvcmVuYW1lLXRvIiwgICAgICAg U05EX1JFTiwgQ01fQVJHIH0sCisgICAgeyAiL3NpbmNlIiwgICAgICAgICAgIFNORF9BRlQsIENN X0lOVnxDTV9BUkcgfSwKKyAgICB7ICIvc21hbGxlci10aGFuIiwgICAgU05EX1NNQSwgQ01fQVJH IH0sCisgICAgeyAiL3N0YXJ0aW5nLWF0IiwgICAgIFNORF9TVEEsIENNX0FSRyB9LAorI2lmbmRl ZiBOT0ZSSUxMUworICAgIHsgIi9zdSIsICAgICAgICAgICAgICBTTkRfQVNOLCBDTV9BUkd8Q01f SU5WfENNX0FCUiB9LAorICAgIHsgIi9zdWIiLCAgICAgICAgICAgICBTTkRfQVNOLCBDTV9BUkd8 Q01fSU5WfENNX0FCUiB9LAorICAgIHsgIi9zdWJqZWN0IiwgICAgICAgICBTTkRfQVNOLCBDTV9B UkcgfSwKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworI2lmZGVmIFJFQ1VSU0lWRQorICAgIHsgIi9z dWJkaXJlY3RvcmllcyIsICBTTkRfUkVDLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBSRUNVUlNJVkUg Ki8KKyAgICB7ICIvdGV4dCIsICAgICAgICAgICAgU05EX1RYVCwgMCB9LAorICAgIHsgIi90cmFu c3BhcmVudCIsICAgICBTTkRfWFBBLCAwIH0sCisgICAgeyAiL3R5cGUiLCAgICAgICAgICAgIFNO RF9UWVAsIENNX0FSRyB9Cit9OworI2RlZmluZSBOU05EVEFCIHNpemVvZihzbmR0YWIpL3NpemVv ZihzdHJ1Y3Qga2V5dGFiKQorc3RhdGljIGludCBuc25kdGFiID0gTlNORFRBQjsKKworI2lmbmRl ZiBOT01TRU5ECitzdGF0aWMgc3RydWN0IGtleXRhYiBtc25kdGFiW10gPSB7CS8qIE1TRU5EIG9w dGlvbnMgKi8KKyAgICB7ICIvYWZ0ZXIiLCAgICAgICAgICAgU05EX0FGVCwgQ01fQVJHIH0sCisg ICAgeyAiL2JlZm9yZSIsICAgICAgICAgIFNORF9CRUYsIENNX0FSRyB9LAorICAgIHsgIi9iaW5h cnkiLCAgICAgICAgICBTTkRfQklOLCAwIH0sCisgICAgeyAiL2RlbGV0ZSIsICAgICAgICAgIFNO RF9ERUwsIDAgfSwKKyAgICB7ICIvZXhjZXB0IiwgICAgICAgICAgU05EX0VYQywgQ01fQVJHIH0s CisgICAgeyAiL2ZpbGVuYW1lcyIsICAgICAgIFNORF9OQU0sIENNX0FSRyB9LAorI2lmZGVmIENL U1lNTElOSworICAgIHsgIi9mb2xsb3dsaW5rcyIsCSAgU05EX0xOSywgMCB9LAorI2VuZGlmIC8q IENLU1lNTElOSyAqLworI2lmZGVmIFZNUworICAgIHsgIi9pbWFnZSIsICAgICAgICAgICBTTkRf SU1HLCAwIH0sCisjZWxzZQorICAgIHsgIi9pbWFnZSIsICAgICAgICAgICBTTkRfQklOLCBDTV9J TlYgfSwKKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBDS19MQUJFTEVECisgICAgeyAiL2xhYmVs ZWQiLCAgICAgICAgIFNORF9MQkwsIDAgfSwKKyNlbmRpZiAvKiBDS19MQUJFTEVEICovCisgICAg eyAiL2xhcmdlci10aGFuIiwgICAgIFNORF9MQVIsIENNX0FSRyB9LAorICAgIHsgIi9saXN0Iiwg ICAgICAgICAgICBTTkRfRklMLCBDTV9BUkcgfSwKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICIv bWFpbCIsICAgICAgICAgICAgU05EX01BSSwgQ01fQVJHIH0sCisjZW5kaWYgLyogTk9GUklMTFMg Ki8KKyNpZmRlZiBDS19UTVBESVIKKyAgICB7ICIvbW92ZS10byIsICAgICAgICAgU05EX01PViwg Q01fQVJHIH0sCisjZW5kaWYgLyogQ0tfVE1QRElSICovCisjaWZkZWYgQ0tTWU1MSU5LCisgICAg eyAiL25vZm9sbG93bGlua3MiLAlTTkRfTkxLLCAwIH0sCisjZW5kaWYgLyogQ0tTWU1MSU5LICov CisgICAgeyAiL25vdC1hZnRlciIsICAgICAgIFNORF9OQUYsIENNX0FSRyB9LAorICAgIHsgIi9u b3QtYmVmb3JlIiwgICAgICBTTkRfTkJFLCBDTV9BUkcgfSwKKyAgICB7ICIvcGF0aG5hbWVzIiwg ICAgICAgU05EX1BUSCwgQ01fQVJHIH0sCisgICAgeyAiL3ByaW50IiwgICAgICAgICAgIFNORF9Q UkksIENNX0FSRyB9LAorI2lmZGVmIENLX1hZWgorICAgIHsgIi9wcm90b2NvbCIsICAgICAgICBT TkRfUFJPLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBDS19YWVogKi8KKyAgICB7ICIvcXVpZXQiLCAg ICAgICAgICAgU05EX1NISCwgMCB9LAorICAgIHsgIi9yZWNvdmVyIiwgICAgICAgICBTTkRfUkVT LCAwIH0sCisgICAgeyAiL3JlbmFtZS10byIsICAgICAgIFNORF9SRU4sIENNX0FSRyB9LAorICAg IHsgIi9zaW5jZSIsICAgICAgICAgICBTTkRfQUZULCBDTV9JTlZ8Q01fQVJHIH0sCisgICAgeyAi L3NtYWxsZXItdGhhbiIsICAgIFNORF9TTUEsIENNX0FSRyB9LAorICAgIHsgIi9zdGFydGluZy1h dCIsICAgICBTTkRfU1RBLCBDTV9BUkcgfSwKKyNpZm5kZWYgTk9GUklMTFMKKyAgICB7ICIvc3Vi amVjdCIsICAgICAgICAgU05EX0FTTiwgQ01fQVJHIH0sCisjZW5kaWYgLyogTk9GUklMTFMgKi8K KyAgICB7ICIvdGV4dCIsICAgICAgICAgICAgU05EX1RYVCwgMCB9LAorICAgIHsgIi90cmFuc3Bh cmVudCIsICAgICBTTkRfWFBBLCAwIH0sCisgICAgeyAiL3R5cGUiLCAgICAgICAgICAgIFNORF9U WVAsIENNX0FSRyB9Cit9OworI2RlZmluZSBOTVNORFRBQiBzaXplb2YobXNuZHRhYikvc2l6ZW9m KHN0cnVjdCBrZXl0YWIpCitzdGF0aWMgaW50IG5tc25kdGFiID0gTk1TTkRUQUI7CisjZW5kaWYg LyogTk9NU0VORCAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisvKiBDT05ORUNUIGNvbW1hbmQg c3dpdGNoZXMgKi8KKworI2RlZmluZSBDT05OX0lJICAwCS8qIElkbGUgaW50ZXJ2YWwgKi8KKyNk ZWZpbmUgQ09OTl9JUyAgMQkvKiBJZGxlIHN0cmluZyAqLworI2RlZmluZSBDT05OX0lMICAyCS8q IElkbGUgbGltaXQgKi8KKyNkZWZpbmUgQ09OTl9OViAgMwkvKiBOb24tVmVyYm9zZSAqLworI2Rl ZmluZSBDT05OX1RMICA0CS8qIFRpbWUgbGltaXQgKi8KKyNkZWZpbmUgQ09OTl9UUyAgNQkvKiBU cmlnZ2VyIHN0cmluZyAqLworI2RlZmluZSBDT05OX0FTICA2CS8qIEFzeW5jaHJvbm91cyAqLwor I2RlZmluZSBDT05OX1NZICA3CS8qIFN5bmNocm9ub3VzICovCisjZGVmaW5lIENPTk5fTUFYIDcJ LyogTnVtYmVyIG9mIENPTk5FQ1Qgc3dpdGNoZXMgKi8KKworI2lmbmRlZiBOT0xPQ0FMCitzdGF0 aWMgc3RydWN0IGtleXRhYiBjb25udGFiW10gPSB7CisjaWZkZWYgT1MyCisgICAgeyAiL2FzeW5j aHJvbm91cyIsICAgIENPTk5fQVMsIENNX0lOViB9LAorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVm IFhMSU1JVFMKKyAgICB7ICIvaWRsZS1pbnRlcnZhbCIsICAgQ09OTl9JSSwgQ01fQVJHIH0sCisg ICAgeyAiL2lkbGUtbGltaXQiLCAgICAgIENPTk5fSUwsIENNX0FSRyB9LAorICAgIHsgIi9pZGxl LXN0cmluZyIsICAgICBDT05OX0lTLCBDTV9BUkcgfSwKKyAgICB7ICIvcXVpZXRseSIsICAgICAg ICAgQ09OTl9OViwgQ01fSU5WIH0sCisjZWxzZQorICAgIHsgIi9xdWlldGx5IiwgICAgICAgICBD T05OX05WLCAwIH0sCisjZW5kaWYgLyogWExJTUlUUyAqLworI2lmZGVmIE9TMgorICAgIHsgIi9z eW5jaHJvbm91cyIsICAgICBDT05OX1NZLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNp ZmRlZiBYTElNSVRTCisgICAgeyAiL3RpbWUtbGltaXQiLCAgICAgIENPTk5fVEwsIENNX0FSRyB9 LAorI2VuZGlmIC8qIFhMSU1JVFMgKi8KKyNpZmRlZiBDS19UUklHR0VSCisgICAgeyAiL3RyaWdn ZXIiLCAgICAgICAgIENPTk5fVFMsIENNX0FSRyB9LAorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8K KyAgICB7ICIiLDAsMCB9Cit9OworI2RlZmluZSBOQ09OTlRBQiBzaXplb2YoY29ubnRhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpCitzdGF0aWMgaW50IG5jb25udGFiID0gTkNPTk5UQUI7CisjZW5k aWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PWEZFUgorc3RhdGljIHN0cnVjdCBrZXl0YWIg c3RhdHRhYltdID0gewkvKiBTVEFUSVNUSUNTIGNvbW1hbmQgc3dpdGNoZXMgKi8KKyAgICB7ICIv YnJpZWYiLCAgIDEsIDAgfSwKKyAgICB7ICIvdmVyYm9zZSIsIDAsIDAgfQorfTsKKyNlbmRpZiAv KiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1NQTAorI2lmZGVmIENPTU1FTlQKK3N0cnVjdCBtdGFi IG1hY3RhYltNQUNfTUFYXSA9IHsJCS8qIFByZWluaXRpYWxpemVkIG1hY3JvIHRhYmxlICovCisg ICAgeyBOVUxMLCBOVUxMLCAwIH0KK307CisjZWxzZQorc3RydWN0IG10YWIgKm1hY3RhYjsJCQkv KiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgbWFjcm8gdGFibGUgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCitpbnQgbm1hYyA9IDA7CisKK3N0cnVjdCBrZXl0YWIgbWFja2V5W01BQ19NQVhdOwkJLyog TWFjcm8gbmFtZXMgYXMgY29tbWFuZCBrZXl3b3JkcyAqLworI2VuZGlmIC8qIE5PU1BMICovCisK KyNpZm5kZWYgTk9TUEwKKyNpZmRlZiAgT1MyCitzdHJ1Y3Qga2V5dGFiIGJlZXB0YWJbXSA9IHsJ CS8qIEJlZXAgb3B0aW9ucyAqLworICAgIHsgImVycm9yIiwgQlBfRkFJTCwgMCB9LAorICAgIHsg ImluZm9ybWF0aW9uIiwgQlBfTk9URSwgMCB9LAorICAgIHsgIndhcm5pbmciLCBCUF9XQVJOLCAw IH0KK307CitpbnQgbmJlZXB0YWIgPSBzaXplb2YoYmVlcHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0 YWIpOworCisvKiBDTEVBUiBDT01NTUFORC1TQ1JFRU4gb3B0aW9ucyAqLworCisjZGVmaW5lIENM Ul9DX0FMTCAwCisjZGVmaW5lIENMUl9DX0JPTCAxCisjZGVmaW5lIENMUl9DX0JPUyAyCisjZGVm aW5lIENMUl9DX0VPTCAzCisjZGVmaW5lIENMUl9DX0VPUyA0CisjZGVmaW5lIENMUl9DX0xJTiA1 CisjZGVmaW5lIENMUl9DX1NDUiA2CisKK3N0cnVjdCBrZXl0YWIgY2xyY21kdGFiW10gPSB7Cisg ICAgeyAiYWxsIiwgICAgICAgIENMUl9DX0FMTCwgMCB9LAorICAgIHsgImJvbCIsICAgICAgICBD TFJfQ19CT0wsIDAgfSwKKyAgICB7ICJib3MiLCAgICAgICAgQ0xSX0NfQk9TLCAwIH0sCisgICAg eyAiZW9sIiwgICAgICAgIENMUl9DX0VPTCwgMCB9LAorICAgIHsgImVvcyIsICAgICAgICBDTFJf Q19FT1MsIDAgfSwKKyAgICB7ICJsaW5lIiwgICAgICAgQ0xSX0NfTElOLCAwIH0sCisgICAgeyAi c2Nyb2xsYmFjayIsIENMUl9DX1NDUiwgMCB9Cit9OworaW50IG5jbHJjbWQgPSBzaXplb2YoY2xy Y21kdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisjZW5kaWYgLyogT1MyICovCisjZW5kaWYg LyogTk9TUEwgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIE5vdCB1c2VkIGF0IHByZXNlbnQgKi8K K3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHBhZ2V0YWJbXSA9IHsKKyAgICB7ICIvbW9yZSIsICAgMSwg Q01fSU5WIH0sCisgICAgeyAiL25vcGFnZSIsIDAsIDAgfSwKKyAgICB7ICIvcGFnZSIsICAgMSwg MCB9Cit9OworaW50IG5wYWdldGFiID0gc2l6ZW9mKHBhZ2V0YWIpL3NpemVvZihzdHJ1Y3Qga2V5 dGFiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNkZWZpbmUgVFlQX05PUCAgMAkJCS8qIC9O T1BBR0UgKi8KKyNkZWZpbmUgVFlQX1BBRyAgMQkJCS8qIC9QQUdFICovCisjZGVmaW5lIFRZUF9I RUEgIDIJCQkvKiAvSEVBRDpuICovCisjZGVmaW5lIFRZUF9UQUkgIDMJCQkvKiAvVEFJTDpuICov CisjZGVmaW5lIFRZUF9QQVQgIDQJCQkvKiAvTUFUQ0g6cGF0dGVybiAqLworI2RlZmluZSBUWVBf V0lEICA1CQkJLyogL1dJRFRIOmNvbHMgKi8KKyNkZWZpbmUgVFlQX0NPVSAgNgkJCS8qIC9DT1VO VCAqLworI2RlZmluZSBUWVBfT1VUICA3CQkJLyogL09VVFBVVDpmaWxlICovCisjZGVmaW5lIFRZ UF9QRlggIDgJCQkvKiAvUFJFRklYOnN0cmluZyAqLworI2lmZGVmIFVOSUNPREUKKyNkZWZpbmUg VFlQX1hJTiAgOQkJCS8qIC9UUkFOU0xBVEUtRlJPTTpjaGFyc2V0ICovCisjZGVmaW5lIFRZUF9Y VVQgMTAJCQkvKiAvVFJBTlNMQVRFLVRPOmNoYXJzZXQgKi8KKyNkZWZpbmUgVFlQX1hQQSAxMQkJ CS8qIC9UUkFOU1BBUkVOVCAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBLVUkKKyNk ZWZpbmUgVFlQX0dVSSAxMgkJCS8qIC9HVUk6dGl0bGUgKi8KKyNkZWZpbmUgVFlQX0hJRyAxMwkJ CS8qIC9IRUlHSFQ6cm93cyAqLworI2VuZGlmIC8qIEtVSSAqLworI2RlZmluZSBUWVBfTlVNIDE0 CQkJLyogL05VTUJFUiAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiB0eXBldGFiW10gPSB7CS8q IFRZUEUgY29tbWFuZCBzd2l0Y2hlcyAqLworICAgIHsgIi9jb3VudCIsICAgICAgICAgIFRZUF9D T1UsIDAgfSwKKyNpZmRlZiBVTklDT0RFCisgICAgeyAiL2NoYXJhY3Rlci1zZXQiLCAgVFlQX1hJ TiwgQ01fQVJHIH0sCisjZW5kaWYgLyogVU5JQ09ERSAqLworI2lmZGVmIEtVSQorICAgIHsgIi9n dWkiLCAgICAgICAgICAgIFRZUF9HVUksIENNX0FSRyB9LAorI2VuZGlmIC8qIEtVSSAqLworICAg IHsgIi9oZWFkIiwgICAgICAgICAgIFRZUF9IRUEsIENNX0FSRyB9LAorI2lmZGVmIEtVSQorICAg IHsgIi9oZWlnaHQiLCAgICAgICAgIFRZUF9ISUcsIENNX0FSRyB9LAorI2VuZGlmIC8qIEtVSSAq LworICAgIHsgIi9tYXRjaCIsICAgICAgICAgIFRZUF9QQVQsIENNX0FSRyB9LAorI2lmZGVmIENL X1RUR1dTSVoKKyAgICB7ICIvbW9yZSIsICAgICAgICAgICBUWVBfUEFHLCBDTV9JTlYgfSwKKyAg ICB7ICIvbm9wYWdlIiwgICAgICAgICBUWVBfTk9QLCAwIH0sCisgICAgeyAiL251bWJlciIsICAg ICAgICAgVFlQX05VTSwgMCB9LAorICAgIHsgIi9vdXRwdXQiLCAgICAgICAgIFRZUF9PVVQsIENN X0FSRyB9LAorICAgIHsgIi9wYWdlIiwgICAgICAgICAgIFRZUF9QQUcsIDAgfSwKKyNlbmRpZiAv KiBDS19UVEdXU0laICovCisgICAgeyAiL3ByZWZpeCIsICAgICAgICAgVFlQX1BGWCwgQ01fQVJH IH0sCisgICAgeyAiL3RhaWwiLCAgICAgICAgICAgVFlQX1RBSSwgQ01fQVJHIH0sCisjaWZkZWYg VU5JQ09ERQorICAgIHsgIi90cmFuc2xhdGUtdG8iLCAgIFRZUF9YVVQsIENNX0FSRyB9LAorICAg IHsgIi90cmFuc3BhcmVudCIsICAgIFRZUF9YUEEsIDAgfSwKKyNlbmRpZiAvKiBVTklDT0RFICov CisgICAgeyAiL3dpZHRoIiwgICAgICAgICAgVFlQX1dJRCwgQ01fQVJHIH0sCisjaWZkZWYgVU5J Q09ERQorICAgIHsgIi94bGF0ZS10byIsICAgICAgIFRZUF9YVVQsIENNX0lOVnxDTV9BUkcgfSwK KyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgeyAiIiwgMCwgMCB9Cit9OworaW50IG50eXBldGFi ID0gc2l6ZW9mKHR5cGV0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7CisKK2ludCB0eXBf cGFnZSA9IC0xOwkJCS8qIFRZUEUgL1tOT11QQUdFIGRlZmF1bHQgKi8KK2ludCB0eXBfd2lkICA9 IC0xOworCisjaWZuZGVmIE5PU1BMCisjZGVmaW5lIFRSQV9BTEwgOTk5CQkJLyogVFJBQ0UgY29t bWFuZCAqLworI2RlZmluZSBUUkFfQVNHIDAKKyNkZWZpbmUgVFJBX0NNRCAxCisKK2ludCB0cmFf YXNnID0gMDsKK2ludCB0cmFfY21kID0gMDsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgdHJhY2V0 YWJbXSA9IHsJLyogVFJBQ0Ugb3B0aW9ucyAqLworICAgIHsgImFsbCIsICAgICAgICAgICAgVFJB X0FMTCwgMCB9LAorICAgIHsgImFzc2lnbm1lbnRzIiwgICAgVFJBX0FTRywgMCB9LAorICAgIHsg ImNvbW1hbmQtbGV2ZWwiLCAgVFJBX0NNRCwgMCB9Cit9Oworc3RhdGljIGludCBudHJhY2V0YWIg PSBzaXplb2YodHJhY2V0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKTsKKyNlbmRpZiAvKiBOT1NQ TCAqLworCisjaWZuZGVmIE5PU0hPVworVk9JRAorc2hvd3R5cG9wdHMoKSB7CisgICAgcHJpbnRm KCIgVFlQRSAiKTsKKyAgICBpZiAodHlwX3BhZ2UgPiAtMSkgeworCXBydG9wdCgmb3B0bGluZXMs dHlwX3BhZ2UgPyAiL1BBR0UiIDogIi9OT1BBR0UiKTsKKyAgICB9IGVsc2UKKyAgICAgIHBydG9w dCgmb3B0bGluZXMsIihubyBvcHRpb25zIHNldCkiKTsKKyAgICBpZiAodHlwX3dpZCA+IC0xKSB7 CisJY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwiL1dJRFRIOiIsY2tpdG9hKHR5cF93aWQpLE5V TEwsTlVMTCk7CisJcHJ0b3B0KCZvcHRsaW5lcyx0bXBidWYpOworICAgIH0KKyAgICBwcnRvcHQo Jm9wdGxpbmVzLCIiKTsKK30KKyNlbmRpZiAvKiBOT1NIT1cgKi8KKworI2lmZGVmIExPQ1VTCisv KiBpc2F1dG8gPT0gMSBpZiBsb2N1cyBpcyBiZWluZyBzd2l0Y2hlZCBhdXRvbWF0aWNhbGx5ICov CisKK1ZPSUQKK3NldGxvY3VzKHgsIGlzYXV0bykgaW50IHgsIGlzYXV0bzsgeworICAgIGV4dGVy biBpbnQgcXVpdHRpbmc7CisgICAgaWYgKHgpIHggPSAxOworICAgIGlmICh4ICYmIGxvY3VzKSBy ZXR1cm47CisgICAgaWYgKCF4ICYmICFsb2N1cykgcmV0dXJuOworICAgIC8qIEdldCBoZXJlIGlm IGl0IGFjdHVhbGx5IG5lZWRzIHRvIGJlIGNoYW5nZWQgKi8KKyNpZmRlZiBPUzIKKyAgICBpZiAo aXNhdXRvICYmCQkJLyogQXV0b21hdGljYWxseSBzd2l0Y2hpbmcgKi8KKwkhcXVpdHRpbmcgJiYJ CQkvKiBub3QgZXhpdGluZyAqLworCWF1dG9sb2N1cyA9PSAyKSB7CQkvKiBhbmQgQVVUT0xPQ1VT IGlzIHNldCB0byBBU0sgKi8KKwljaGFyIGxvY21zZ1szMDBdOworCWNrbWFrbXNnKGxvY21zZywz MDAsCisJCSAiU3dpdGNoaW5nIExvY3VzIHRvICIsCisJCSB4ID8gIkxPQ0FMIiA6ICJSRU1PVEUi LAorCQkgIiBmb3IgZmlsZSBtYW5hZ2VtZW50IGNvbW1hbmRzXG4iCisgICAgICAgICAgICAgICAg ICJzdWNoIGFzIENELCBESVJFQ1RPUlksIERFTEVURSwgUkVOQU1FLiAgVHlwZSBIRUxQIFNFVFxu IgorICAgICAgICAgICAgICAgICAiTE9DVVMgYXQgdGhlIEstOTU+IHByb21wdCBmb3IgZnVydGhl ciBpbmZvLiAgVXNlIHRoZVxuIgorI2lmZGVmIEtVSQorICAgICAgICAgICAgICAgICAgIkFjdGlv bnMgbWVudSBvciBTRVQgTE9DVVMgY29tbWFuZCB0byBkaXNhYmxlIGF1dG9tYXRpY1xuIgorICAg ICAgICAgICAgICAgICAgIkxvY3VzIHN3aXRjaGluZyBvciB0byBkaXNhYmxlIHRoZXNlIHF1ZXJp ZXMuIiwKKyNlbHNlIC8qIEtVSSAqLworICAgICAgICAgICAgICAgICAgIlNFVCBMT0NVUyBjb21t YW5kIHRvIGRpc2FibGUgYXV0b21hdGljIGxvY3VzIHN3aXRjaGluZ1xuIgorICAgICAgICAgICAg ICAgICAgIm9yIHRvIGRpc2FibGUgdGhlc2UgcXVlcmllcy4iLAorI2VuZGlmIC8qIEtVSSAqLwor ICAgICAgICAgICAgICAgICAgTlVMTCk7CisJaWYgKHVxX29rKGxvY21zZywiT0sgdG8gc3dpdGNo IExvY3VzPyIsMyxOVUxMLDEpKSB7CisJICAgIGxvY3VzID0geDsKKyNpZmRlZiBLVUkKKwkgICAg S3VpU2V0UHJvcGVydHkoS1VJX0xPQ1VTLHgsMCk7CisjZW5kaWYgLyogS1VJICovCisJICAgIHJl dHVybjsKKwl9CisgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgaWYgKGlz YXV0byAmJiBtc2dmbGcgJiYgIXF1aXR0aW5nKQorICAgICAgICAgIHByaW50ZigiU3dpdGNoaW5n IExPQ1VTIGZvciBmaWxlLW1hbmFnZW1lbnQgY29tbWFuZHMgdG8gJXMgJXMuXG4iLAorCQkgeCA/ ICJMT0NBTCIgOiAiUkVNT1RFIiwKKwkJICIoSEVMUCBMT0NVUyBmb3IgaW5mbykiCisJCSApOwor CWxvY3VzID0geDsKKyNpZmRlZiBPUzIKKyNpZmRlZiBLVUkKKwlLdWlTZXRQcm9wZXJ0eShLVUlf TE9DVVMseCwwKTsKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICB9CisjZW5kaWYgLyogT1MyICovCit9 CisKK1ZPSUQKK3NldGF1dG9sb2N1cyh4KSBpbnQgeDsgeworICAgIGF1dG9sb2N1cyA9IHg7Cisj aWZkZWYgS1VJCisgICAgS3VpU2V0UHJvcGVydHkoS1VJX0FVVE9fTE9DVVMseCwwKTsKKyNlbmRp ZiAvKiBLVUkgKi8KK30KKyNlbmRpZiAvKiBMT0NVUyAqLworCitpbnQKK3NldHR5cG9wdHMoKSB7 CQkJCS8qIFNldCBUWVBFIG9wdGlvbiBkZWZhdWx0cyAqLworICAgIGludCB4cCA9IC0xOworICAg IGludCBjLCBnZXR2YWw7CisgICAgd2hpbGUgKDEpIHsKKwlpZiAoKHkgPSBjbXN3aSh0eXBldGFi LG50eXBldGFiLCJTd2l0Y2giLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisJICAgIGlmICh5ID09IC0z KQorCSAgICAgIGJyZWFrOworCSAgICBlbHNlCisJICAgICAgcmV0dXJuKHkpOworCX0KKwljID0g Y21nYnJrKCk7CisJaWYgKChnZXR2YWwgPSAoYyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNt Z2t3ZmxncygpICYgQ01fQVJHKSkgeworCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5v dCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJc3dpdGNoICh5 KSB7CisJICBjYXNlIFRZUF9OT1A6IHhwID0gMDsgYnJlYWs7CisJICBjYXNlIFRZUF9QQUc6IHhw ID0gMTsgYnJlYWs7CisJICBjYXNlIFRZUF9XSUQ6CisJICAgIGlmIChnZXR2YWwpCisJICAgICAg aWYgKCh4ID0gY21udW0oIkNvbHVtbiBhdCB3aGljaCB0byB0cnVuY2F0ZSIsCisJCQkgICAgIGNr aXRvYShjbWRfY29scyksMTAsJnkseHhzdHJpbmcpKSA8IDApCisJCXJldHVybih4KTsKKwkgICAg dHlwX3dpZCA9IHk7CisJICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKwkgICAgcHJp bnRmKCI/U29ycnksIHRoaXMgb3B0aW9uIGNhbiBub3QgYmUgc2V0XG4iKTsKKwkgICAgcmV0dXJu KC05KTsKKwl9CisgICAgfQorICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkJCS8qIEdldCBjb25m aXJtYXRpb24gKi8KKyAgICAgIHJldHVybih4KTsKKyAgICBpZiAoeHAgPiAtMSkgdHlwX3BhZ2Ug PSB4cDsJCS8qIENvbmZpcm1lZCwgc2F2ZSBkZWZhdWx0cyAqLworICAgIHJldHVybihzdWNjZXNz ID0gMSk7Cit9CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBsb2NhbCB0 byB0aGlzIG1vZHVsZSAqLworCisjaWZkZWYgVU5JWAorX1BST1RPVFlQIChpbnQgZG91Y2htb2Qs ICggdm9pZCApICk7CisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIENLUFVSR0UKK19QUk9UT1RZ UCAoaW50IGRvcHVyZ2UsICAoIHZvaWQgKSApOworI2VuZGlmIC8qIENLUFVSR0UgKi8KKyNpZm5k ZWYgTk9TUEwKK19QUk9UT1RZUCAoaW50IGRvdW5kZWYsICAoIGludCAgKSApOworX1BST1RPVFlQ IChpbnQgZG9hc2ssICAgICggaW50ICApICk7CitfUFJPVE9UWVAgKGludCBkb2RlZiwgICAgKCBp bnQgICkgKTsKK19QUk9UT1RZUCAoaW50IGRvZWxzZSwgICAoIHZvaWQgKSApOworX1BST1RPVFlQ IChpbnQgZG9mb3IsICAgICggdm9pZCApICk7CisjZW5kaWYgLyogTk9TUEwgICovCisjaWZuZGVm IE5PRElBTAorX1BST1RPVFlQIChpbnQgZG9kaWFsLCAgICggaW50ICApICk7CisjZW5kaWYgLyog Tk9ESUFMICovCitfUFJPVE9UWVAgKGludCBkb2RlbCwgICAgKCB2b2lkICkgKTsKK19QUk9UT1RZ UCAoaW50IGRvcGF1cywgICAoIGludCAgKSApOworI2lmbmRlZiBOT1BVU0gKKyNpZmRlZiBUQ1BT T0NLRVQKK19QUk9UT1RZUCAoaW50IGRvcGluZywgICAoIHZvaWQgKSApOworX1BST1RPVFlQIChp bnQgZG9mdHAsICAgICggdm9pZCApICk7CisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYg LyogTk9QVVNIICovCisjaWZuZGVmIE5PUkVOQU1FCisjaWZuZGVmIE5PRlJJTExTCitfUFJPVE9U WVAgKGludCBkb3JlbmFtLCAgKCB2b2lkICkgKTsKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworI2Vu ZGlmIC8qIE5PUkVOQU1FICovCisjaWZkZWYgWkNPUFkKK19QUk9UT1RZUCAoaW50IGRvY29weSwg ICAoIHZvaWQgKSApOworI2VuZGlmIC8qIFpDT1BZICovCisjaWZkZWYgTlQKK19QUk9UT1RZUCAo aW50IGRvbGluaywgICAoIHZvaWQgKSk7CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBDS19SRVhY CitfUFJPVE9UWVAgKGludCBkb3JleHgsICAgKCB2b2lkICkgKTsKKyNlbmRpZiAvKiBDS19SRVhY ICovCisKKyNpZmRlZiBUTkNPREUKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIHRlbGNtZFtdID0gewor ICAgIHsgImFib3J0IiwgVE5fQUJPUlQsIENNX0lOViB9LAkvKiBFbW90aW9uYWxseSB0b25lZCAt IGRvbid0IHNob3cgKi8KKyAgICB7ICJhbyIsICAgIFROX0FPLCAgICAwIH0sCisgICAgeyAiYXl0 IiwgICBUTl9BWVQsICAgMCB9LAorICAgIHsgImJyZWFrIiwgQlJFQUssICAgIDAgfSwKKyAgICB7 ICJjYW5jZWwiLFROX0FCT1JULCAwIH0sCisgICAgeyAiZG1hcmsiLCBUTl9ETSwgICAgMCB9LAor ICAgIHsgImRvIiwgICAgRE8sICAgICAgIDAgfSwKKyAgICB7ICJkb250IiwgIERPTlQsICAgICAw IH0sCisgICAgeyAiZWMiLCAgICBUTl9FQywgICAgMCB9LAorICAgIHsgImVsIiwgICAgVE5fRUws ICAgIDAgfSwKKyAgICB7ICJlb2YiLCAgIFROX0VPRiwgICAwIH0sCisgICAgeyAiZW9yIiwgICBU Tl9FT1IsICAgMCB9LAorI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNQorI2RlZmluZSBU Tl9GV0QgMQorICAgIHsgImZvcndhcmQiLCBUTl9GV0QsIENNX0lOViB9LAorI2VuZGlmIC8qIEtS QjUgKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworICAgIHsgImdhIiwgICAgVE5fR0EsICAg IDAgfSwKKyAgICB7ICJpcCIsICAgIFROX0lQLCAgICAwIH0sCisgICAgeyAibm9wIiwgICBUTl9O T1AsICAgMCB9LAorICAgIHsgInNhayIsICAgVE5fU0FLLCAgIENNX0lOViB9LAorICAgIHsgInNi IiwgICAgU0IsICAgICAgIDAgfSwKKyAgICB7ICJzZSIsICAgIFNFLCAgICAgICAwIH0sCisgICAg eyAic3VzcCIsICBUTl9TVVNQLCAgMCB9LAorICAgIHsgIndpbGwiLCAgV0lMTCwgICAgIDAgfSwK KyAgICB7ICJ3b250IiwgIFdPTlQsICAgICAwIH0KK307CitzdGF0aWMgaW50IG50ZWxjbWQgPSAo c2l6ZW9mKHRlbGNtZCkgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpOworCitzdGF0aWMgc3RydWN0 IGtleXRhYiB0bm9wdHNbXSA9IHsKKyNpZmRlZiBDS19BVVRIRU5USUNBVElPTgorICAgIHsgImF1 dGgiLCAgIFRFTE9QVF9BVVRIRU5USUNBVElPTiwgICAwIH0sCisjZWxzZQorICAgIHsgImF1dGgi LCAgIFRFTE9QVF9BVVRIRU5USUNBVElPTiwgICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19BVVRI RU5USUNBVElPTiAqLworICAgIHsgImJpbmFyeSIsIFRFTE9QVF9CSU5BUlksIDAgfSwKKyNpZmRl ZiBUTl9DT01QT1JUCisgICAgeyAiYyIsICAgICAgVEVMT1BUX0NPTVBPUlQsIENNX0lOVnxDTV9B QlJ9LAorICAgIHsgImNvIiwgICAgIFRFTE9QVF9DT01QT1JULCBDTV9JTlZ8Q01fQUJSfSwKKyAg ICB7ICJjb20iLCAgICBURUxPUFRfQ09NUE9SVCwgQ01fSU5WfENNX0FCUn0sCisgICAgeyAiY29t LXBvcnQtY29udHJvbCIsIFRFTE9QVF9DT01QT1JULCAwIH0sCisgICAgeyAiY29tcG9ydC1jb250 cm9sIiwgVEVMT1BUX0NPTVBPUlQsIENNX0lOVn0sCisjZWxzZSAgLyogVE5fQ09NUE9SVCAqLwor ICAgIHsgImNvbS1wb3J0LWNvbnRyb2wiLCBURUxPUFRfQ09NUE9SVCwgQ01fSU5WIH0sCisgICAg eyAiY29tcG9ydC1jb250cm9sIiwgVEVMT1BUX0NPTVBPUlQsIENNX0lOVn0sCisjZW5kaWYgLyog VE5fQ09NUE9SVCAqLworICAgIHsgImVjaG8iLCBURUxPUFRfRUNITywgMCB9LAorI2lmZGVmIENL X0VOQ1JZUFRJT04KKyAgICB7ICJlbmNyeXB0IiwgVEVMT1BUX0VOQ1JZUFRJT04sIDAgfSwKKyNl bHNlCisgICAgeyAiZW5jcnlwdCIsIFRFTE9QVF9FTkNSWVBUSU9OLCBDTV9JTlYgfSwKKyNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCisjaWZkZWYgQ0tfRk9SV0FSRF9YCisgICAgeyAiZm9yd2Fy ZC14IiwgVEVMT1BUX0ZPUldBUkRfWCwgMCB9LAorI2Vsc2UKKyAgICB7ICJmb3J3YXJkLXgiLCBU RUxPUFRfRk9SV0FSRF9YLCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19GT1JXQVJEX1ggKi8KKyNp ZmRlZiBJS1NfT1BUSU9OCisgICAgeyAia2VybWl0IiwgVEVMT1BUX0tFUk1JVCwgMCB9LAorI2Vs c2UKKyAgICB7ICJrZXJtaXQiLCBURUxPUFRfS0VSTUlULCBDTV9JTlYgfSwKKyNlbmRpZiAvKiBJ S1NfT1BUSU9OICovCisgICAgeyAibGZsb3ciLCAgVEVMT1BUX0xGTE9XLCBDTV9JTlYgfSwKKyAg ICB7ICJsb2dvdXQiLCBURUxPUFRfTE9HT1VULCBDTV9JTlYgfSwKKyNpZmRlZiBDS19OQVdTCisg ICAgeyAibmF3cyIsIFRFTE9QVF9OQVdTLCAwIH0sCisjZWxzZQorICAgIHsgIm5hd3MiLCBURUxP UFRfTkFXUywgQ01fSU5WIH0sCisjZW5kaWYgLyogQ0tfTkFXUyAqLworI2lmZGVmIENLX0VOVklS T05NRU5UCisgICAgeyAibmV3LWVudmlyb25tZW50IiwgVEVMT1BUX05FV0VOVklST04sICAwIH0s CisjZWxzZQorICAgIHsgIm5ldy1lbnZpcm9ubWVudCIsIFRFTE9QVF9ORVdFTlZJUk9OLCAgQ01f SU5WIH0sCisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KKyAgICB7ICJwcmFnbWEtaGVhcnRi ZWF0IixURUxPUFRfUFJBR01BX0hFQVJUQkVBVCwgIENNX0lOViB9LAorICAgIHsgInByYWdtYS1s b2dvbiIsICAgIFRFTE9QVF9QUkFHTUFfTE9HT04sICBDTV9JTlYgfSwKKyAgICB7ICJwcmFnbWEt c3NwaSIsICAgICBURUxPUFRfU1NQSV9MT0dPTiwgIENNX0lOViB9LAorICAgIHsgInNhayIsICAg VEVMT1BUX0lCTV9TQUssIENNX0lOViB9LAorI2lmZGVmIENLX1NORExPQworICAgIHsgInNlbmQt bG9jYXRpb24iLCAgIFRFTE9QVF9TTkRMT0MsICAwIH0sCisjZWxzZQorICAgIHsgInNlbmQtbG9j YXRpb24iLCAgIFRFTE9QVF9TTkRMT0MsICBDTV9JTlYgfSwKKyNlbmRpZiAvKiBDS19TTkRMT0Mg Ki8KKyAgICB7ICJzZ2EiLCBURUxPUFRfU0dBLCAwIH0sCisjaWZkZWYgQ0tfU1NMCisgICAgeyAi c3RhcnQtdGxzIiwgICAgICAgVEVMT1BUX1NUQVJUX1RMUywgIDAgfSwKKyNlbHNlCisgICAgeyAi c3RhcnQtdGxzIiwgICAgICAgVEVMT1BUX1NUQVJUX1RMUywgIENNX0lOViB9LAorI2VuZGlmIC8q IENLX1NTTCAqLworICAgIHsgInR0eXBlIiwgVEVMT1BUX1RUWVBFLCAwIH0sCisjaWZkZWYgQ0tf RU5WSVJPTk1FTlQKKyAgICB7ICJ4ZGlzcGxheS1sb2NhdGlvbiIsIFRFTE9QVF9YRElTUExPQywg MCB9LAorI2Vsc2UKKyAgICB7ICJ4ZGlzcGxheS1sb2NhdGlvbiIsIFRFTE9QVF9YRElTUExPQywg Q01fSU5WIH0sCisjZW5kaWYgLyogQ0tfRU5WSVJPTk1FTlQgKi8KKyAgICB7ICIiLCAwLCAwIH0K K307CitzdGF0aWMgaW50IG50bm9wdHMgPSAoc2l6ZW9mKHRub3B0cykgLyBzaXplb2Yoc3RydWN0 IGtleXRhYikpIC0gMTsKKworc3RhdGljIHN0cnVjdCBrZXl0YWIgdG5zYm9wdHNbXSA9IHsKKyNp ZmRlZiBDS19OQVdTCisgICAgeyAibmF3cyIsIFRFTE9QVF9OQVdTLCAwIH0sCisjZW5kaWYgLyog Q0tfTkFXUyAqLworICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbnRuc2JvcHRzID0g KHNpemVvZih0bnNib3B0cykgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0gMTsKKyNlbmRpZiAv KiBUTkNPREUgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorI2lmbmRlZiBOT1BVU0gKKyNpZmRlZiBT WVNGVFAKK2ludAorZG9mdHAoKSB7CQkJCS8qIChFeHRlcm5hbCkgRlRQIGNvbW1hbmQgKi8KKyAg ICBjaGFyICpwLCAqZjsJCQkvKiAoU2VlIGRveGZ0cCgpIGZvciBpbnRlcm5hbCBvbmUpICovCisg ICAgaW50IHg7CisKKyAgICBpZiAobmV0d29yaykJCQkvKiBJZiB3ZSBoYXZlIGEgY3VycmVudCBj b25uZWN0aW9uICovCisgICAgICBja3N0cm5jcHkobGluZSx0dG5hbWUsTElOQlVGU0laKTsJLyog Z2V0IHRoZSBob3N0IG5hbWUgKi8KKyAgICBlbHNlICpsaW5lID0gJ1wwJzsJCQkvKiBhcyBkZWZh dWx0IGhvc3QgKi8KKyAgICBmb3IgKHAgPSBsaW5lOyAqcDsgcCsrKQkJLyogUmVtb3ZlICI6c2Vy dmljZSIgZnJvbSBlbmQuICovCisgICAgICBpZiAoKnAgPT0gJzonKSB7ICpwID0gJ1wwJzsgYnJl YWs7IH0KKyAgICBpZiAoKHggPSBjbXR4dCgiSVAgaG9zdCBuYW1lIG9yIG51bWJlciIsIGxpbmUs ICZzLCB4eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBpZiAobm9wdXNoKSB7 CisgICAgICAgIHByaW50ZigiP1NvcnJ5LCBGVFAgY29tbWFuZCBkaXNhYmxlZFxuIik7CisgICAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgfQorLyogQ29uc3RydWN0IEZUUCBjb21tYW5k ICovCisjaWZkZWYgVk1TCisjaWZkZWYgTVVMVElORVQJCQkJLyogVEdWIE11bHRpTmV0ICovCisg ICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosIm11bHRpbmV0IGZ0cCAiLHMsTlVMTCxOVUxMKTsK KyNlbHNlCisgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosImZ0cCAiLHMsTlVMTCxOVUxMKTsK KyNlbmRpZiAvKiBNVUxUSU5FVCAqLworI2Vsc2UJCQkJCS8qIE5vdCBWTVMgKi8KKyNpZmRlZiBP UzJPUlVOSVgKKyNpZm5kZWYgTk9GVFAKKyAgICBmID0gZnRwYXBwOworICAgIGlmICghZikgZiA9 ICIiOworICAgIGlmICghZlswXSkgZiA9ICJmdHAiOworICAgIGNrbWFrbXNnKGxpbmUsTElOQlVG U0laLGYsIiAiLHMsTlVMTCk7CisjaWZkZWYgT1MyCisgICAgcCA9IGxpbmUgKyBzdHJsZW4oZnRw YXBwKTsKKyAgICB3aGlsZSAocCAhPSBsaW5lKSB7CisgICAgICAgIGlmICgqcCA9PSAnLycpICpw ID0gJ1xcJzsKKyAgICAgICAgcC0tOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNlIC8q IE5PRlRQICovCisgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosImZ0cCAiLHMsTlVMTCxOVUxM KTsKKyNlbmRpZiAvKiBOT0ZUUCAqLworI2Vsc2UgLyogT1MyT1JVTklYICovCisgICAgY2ttYWtt c2cobGluZSxMSU5CVUZTSVosImZ0cCAiLHMsTlVMTCxOVUxMKTsKKyNlbmRpZiAvKiBPUzJPUlVO SVggKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBjb25yZXMoKTsJCQkJLyogTWFrZSBjb25zb2xl IG5vcm1hbCAgKi8KKyNpZmRlZiBERUNfVENQSVAKKyAgICBwcmludGYoIlxuIik7CQkJLyogUHJl dmVudCBwcm9tcHQtc3RvbXBpbmcgKi8KKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKyAgICB4ID0g enNoY21kKGxpbmUpOworICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7CisgICAgcmV0dXJuKHN1Y2Nl c3MgPSB4KTsKK30KKyNlbmRpZiAvKiBTWVNGVFAgKi8KKworaW50Citkb3BpbmcoKSB7CQkJCS8q IFBJTkcgY29tbWFuZCAqLworICAgIGNoYXIgKnA7CQkJCS8qIGp1c3QgcnVucyBwaW5nIHByb2dy YW0gKi8KKyAgICBpbnQgeDsKKworICAgIGlmIChuZXR3b3JrKQkJCS8qIElmIHdlIGhhdmUgYSBj dXJyZW50IGNvbm5lY3Rpb24gKi8KKyAgICAgIGNrc3RybmNweShsaW5lLHR0bmFtZSxMSU5CVUZT SVopOwkvKiBnZXQgdGhlIGhvc3QgbmFtZSAqLworICAgIGVsc2UgKmxpbmUgPSAnXDAnOwkJCS8q IGFzIGRlZmF1bHQgaG9zdCB0byBiZSBwaW5nZWQuICovCisgICAgZm9yIChwID0gbGluZTsgKnA7 IHArKykJCS8qIFJlbW92ZSAiOnNlcnZpY2UiIGZyb20gZW5kLiAqLworICAgICAgaWYgKCpwID09 ICc6JykgeyAqcCA9ICdcMCc7IGJyZWFrOyB9CisgICAgaWYgKCh4ID0gY210eHQoIklQIGhvc3Qg bmFtZSBvciBudW1iZXIiLCBsaW5lLCAmcywgeHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4o eCk7CisgICAgaWYgKG5vcHVzaCkgeworICAgICAgICBwcmludGYoIj9Tb3JyeSwgUElORyBjb21t YW5kIGRpc2FibGVkXG4iKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisK KyAgICAvKiBDb25zdHJ1Y3QgUElORyBjb21tYW5kICovCisjaWZkZWYgVk1TCisjaWZkZWYgTVVM VElORVQJCQkJLyogVEdWIE11bHRpTmV0ICovCisgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVos Im11bHRpbmV0IHBpbmcgIixzLCIgL251bT0xIixOVUxMKTsKKyNlbHNlCisgICAgY2ttYWttc2co bGluZSxMSU5CVUZTSVosInBpbmcgIixzLCIgNTYgMSIsTlVMTCk7IC8qIE90aGVyIFZNUyBUQ1Av SVAncyAqLworI2VuZGlmIC8qIE1VTFRJTkVUICovCisjZWxzZQkJCQkJLyogTm90IFZNUyAqLwor ICAgIGNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJwaW5nICIscyxOVUxMLE5VTEwpOworI2VuZGlm IC8qIFZNUyAqLworICAgIGNvbnJlcygpOwkJCQkvKiBNYWtlIGNvbnNvbGUgbm9ybWFsICAqLwor I2lmZGVmIERFQ19UQ1BJUAorICAgIHByaW50ZigiXG4iKTsJCQkvKiBQcmV2ZW50IHByb21wdC1z dG9tcGluZyAqLworI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworICAgIHggPSB6c2hjbWQobGluZSk7 CisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKKyAgICByZXR1cm4oc3VjY2VzcyA9IHgpOworfQor I2VuZGlmIC8qIE5PUFVTSCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCitzdGF0aWMgVk9J RAorZG9lbmQoeCkgaW50IHg7IHsKKyNpZm5kZWYgTk9TUEwKKyAgICAvKiBQb3AgZnJvbSBhbGwg Rk9SL1dISUxFL1hJRi9TV0lUQ0gncyAqLworICAgIGRlYnVnKEYxMDEsImRvZW5kIG1hY2x2bCAx IiwiIixtYWNsdmwpOworICAgIHdoaWxlICgobWFjbHZsID4gMCkgJiYKKwkgICAobV9hcmdbbWFj bHZsLTFdWzBdKSAmJgorCSAgIChjbWRzdGtbY21kbHZsXS5zcmMgPT0gQ01EX01EKSAmJgorCSAg ICghc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0sIl94aWYiLDQpIHx8CisJICAgICFzdHJuY21w KG1fYXJnW21hY2x2bC0xXVswXSwiX2ZvciIsNCkgfHwKKwkgICAgIXN0cm5jbXAobV9hcmdbbWFj bHZsLTFdWzBdLCJfd2hpIiw0KSB8fAorCSAgICAhc3RybmNtcChtX2FyZ1ttYWNsdmwtMV1bMF0s Il9zd2kiLDQpKSkgeworCWRlYnVnKEYxMTAsIkVORCBwb3BwaW5nIixtX2FyZ1ttYWNsdmwtMV1b MF0sMCk7CisJZG9ndGEoWFhQVEEpOwkJCS8qIFB1dCBhcmdzIGJhY2sgKi8KKwlwb3BjbHZsKCk7 CQkJLyogUG9wIHVwIHR3byBsZXZlbHMgKi8KKwlwb3BjbHZsKCk7CisJZGVidWcoRjEwMSwiZG9l bmQgbWFjbHZsIDIiLCIiLG1hY2x2bCk7CisgICAgfQorICAgIGlmIChtYWNsdmwgPiAtMSkgewor CWlmIChtcnZhbFttYWNsdmxdKQkJLyogRnJlZSBwcmV2aW91cyByZXR2YWwgaWYgYW55ICovCisJ ICBmcmVlKG1ydmFsW21hY2x2bF0pOworCW1ydmFsW21hY2x2bF0gPSBtYWxsb2MoMTYpOwkvKiBS b29tIGZvciB1cCB0byAxNSBkaWdpdHMgKi8KKwlpZiAobXJ2YWxbbWFjbHZsXSkJCS8qIFJlY29y ZCBjdXJyZW50IHJldHZhbCAqLworCSAgY2ttYWttc2cobXJ2YWxbbWFjbHZsXSwxNixja2l0b2Eo eCksTlVMTCxOVUxMLE5VTEwpOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAgIHBvcGNs dmwoKTsJCQkJLyogTm93IHBvcCBvdXQgb2YgbWFjcm8gb3IgVEFLRSBmaWxlICovCisjaWZuZGVm IE5PU1BMCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWcoRjEwMSwiRU5E IG1hY2x2bCAzIiwiIixtYWNsdmwpOworCWRlYnVnKEYxMTEsIkVORCBtcnZhbFttYWNsdmxdIixt cnZhbFttYWNsdmxdLG1hY2x2bCk7CisJZGVidWcoRjExMSwiRU5EIG1ydmFsW21hY2x2bCsxXSIs bXJ2YWxbbWFjbHZsKzFdLG1hY2x2bCsxKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNl bmRpZiAvKiBOT1NQTCAqLworfQorCisjaWZkZWYgQ0tST09UCitpbnQKK2RvY2hyb290KCkgewor ICAgIGlmICgoeCA9IGNtZGlyKCJOYW1lIG9mIG5ldyByb290IGRpcmVjdG9yeSIsIiIsJnMseHhz dHJpbmcpKSA8IDApIHsKKwlpZiAoeCA9PSAtMykgeworCSAgICBwcmludGYoIj9EaXJlY3Rvcnkg bmFtZSByZXF1aXJlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCXJldHVybih4KTsKKyAg ICB9CisgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworICAgIHMgPSBsaW5lOworICAg IGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgIHMgPSBicnN0cmlwKHMpOwor ICAgIHggPSB6c2V0cm9vdChzKTsKKyAgICBpZiAoeCA8IDApIHsKKwljaGFyICogbSA9IE5VTEw7 CisJc3dpdGNoICh4KSB7CisJICBjYXNlIC0xOgorCSAgY2FzZSAtMjogbSA9ICJOb3QgYSBkaXJl Y3RvcnkiOyBicmVhazsKKwkgIGNhc2UgLTM6IG0gPSAiSW50ZXJuYWwgZXJyb3IiOyBicmVhazsK KwkgIGNhc2UgLTQ6IG0gPSAiQWNjZXNzIGRlbmllZCI7IGJyZWFrOworCSAgY2FzZSAtNTogbSA9 ICJPZmYgbGltaXRzIjsgYnJlYWs7CisJfQorCWlmIChtKSBwcmludGYoIiVzOiBcIiVzXCJcbiIs IG0sIHMpOworCXJldHVybihtID8gLTkgOiAtMik7CisgICAgfSBlbHNlIHsKKwlub3B1c2ggPSAx OworCXJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorfQorI2VuZGlmIC8qIENLUk9PVCAqLwor CisjaWZuZGVmIE5PWEZFUgorc3RhdGljIGNoYXIgKiBhc25idWYgPSBOVUxMOwkJLyogQXMtbmFt ZSBidWZmZXIgcG9pbnRlciAqLworCitjaGFyIHNuZHhuYW1bXSA9IHsgIl9hcnJheV94XyIgfTsJ LyogKHdpdGggcmVwbGFjZWFibGUgeCEpICovCisKKy8qCisgIFRoZSBuZXcgU0VORCBjb21tYW5k LCByZXBsYWNpbmcgQlNFTkQsIENTRU5ELCBQU0VORCwgZXRjIGV0Yy4KKyAgQ2FsbCB3aXRoIGN4 ID0gdG9wLWxldmVsIGtleXdvcmQgdmFsdWUuICBSZXR1cm5zOgorICAgIDwgMCAgT24gcGFyc2Ug ZXJyb3IuCisgICAgMCAgICBPbiBvdGhlciB0eXBlIG9mIGZhaWx1cmUgKGUuZy4gcmVxdWVzdGVk IG9wZXJhdGlvbiBub3QgYWxsb3dlZCkuCisgICAgMSAgICBPbiBzdWNjZXNzIHdpdGggc3N0YXRl IHNldCB0byAncycgc28gcHJvdG9jb2wgd2lsbCBiZWdpbi4KKyovCisKKy8qICBEIE8gWCBTIEUg TiBEICAtLSAgUGFyc2UgU0VORCBhbmQgcmVsYXRlZCBjb21tYW5kcyB3aXRoIHN3aXRjaGVzICAq LworCitpbnQKK2RveHNlbmQoY3gpIGludCBjeDsgeworICAgIGludCBjLCBpLCBuLCB3aWxkLCBj b25maXJtZWQgPSAwOwkvKiBXb3JrZXJzICovCisgICAgaW50IHgsIHk7CQkJCS8qIG9mIHRoZSB3 b3JsZC4uLiAqLworICAgIGludCBnZXR2YWwgPSAwOwkJCS8qIFdoZXRoZXIgdG8gZ2V0IHN3aXRj aCB2YWx1ZSAqLworICAgIGV4dGVybiBjaGFyICogc25kX21vdmU7CQkvKiBEaXJlY3RvcnkgdG8g bW92ZSBzZW50IGZpbGVzIHRvICovCisgICAgZXh0ZXJuIGNoYXIgKiBzbmRfcmVuYW1lOwkJLyog V2hhdCB0byByZW5hbWUgc2VudCBmaWxlcyB0byAqLworICAgIGV4dGVybiBjaGFyICogZmlsZWZp bGU7CQkvKiBGaWxlIGNvbnRhaW5pbmcgZmlsZW5hbWVzIHRvIHNlbmQgKi8KKyAgICBleHRlcm4g aW50IHhmaWxldHlwZTsJCS8qIFNlbmQgb25seSB0ZXh0IChvciBiaW5hcnkpIGZpbGVzICovCisg ICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgcGF0aHRhYltdOwkvKiBQQVRITkFNRVMgb3B0aW9uIGtl eXdvcmRzICovCisgICAgZXh0ZXJuIGludCBucGF0aHRhYjsJCS8qIEhvdyBtYW55IG9mIHRoZW0g Ki8KKyAgICBleHRlcm4gaW50IHJlY3Vyc2l2ZTsJCS8qIFJlY3Vyc2l2ZSBkaXJlY3RvcnkgdHJh dmVyc2FsICovCisgICAgZXh0ZXJuIGludCBycHJpbnRmOwkJCS8qIFJFTU9URSBQUklOVCBmbGFn ICovCisgICAgZXh0ZXJuIGludCBmZGlzcGxhOwkJCS8qIFRSQU5TRkVSIERJU1BMQVkgc2V0dGlu ZyAqLworICAgIGV4dGVybiBpbnQgc2tpcGJ1cDsJCQkvKiBTa2lwIGJhY2t1cCBmaWxlcyB3aGVu IHNlbmRpbmcgKi8KKyAgICBzdHJ1Y3Qgc3RyaW5naW50IHB2W1NORF9NQVgrMV07CS8qIFRlbXBv cmFyeSBhcnJheSBmb3Igc3dpdGNoIHZhbHVlcyAqLworICAgIHN0cnVjdCBGREIgc2YsIHN3LCBm bCwgY207CQkvKiBGREJzIGZvciBlYWNoIHBhcnNlIGZ1bmN0aW9uICovCisgICAgaW50IG1saXN0 ID0gMDsJCQkvKiBGbGFnIGZvciBNU0VORCBvciBNTU9WRSAqLworICAgIGNoYXIgKiBtOwkJCQkv KiBGb3IgbWFraW5nIGhlbHAgbWVzc2FnZXMgKi8KKyAgICBleHRlcm4gc3RydWN0IGtleXRhYiBw cm90b3NbXTsJLyogRmlsZSB0cmFuc2ZlciBwcm90b2NvbHMgKi8KKyAgICBleHRlcm4gaW50IHhm cnhsYSwgZ194ZnJ4bGEsIG5wcm90b3M7CisgICAgZXh0ZXJuIGNoYXIgc25kYmVmb3JlW10sIHNu ZGFmdGVyW10sICpzbmRleGNlcHRbXTsgLyogU2VsZWN0aW9uIGNyaXRlcmlhICovCisgICAgZXh0 ZXJuIGNoYXIgc25kbmJlZm9yZVtdLCBzbmRuYWZ0ZXJbXTsKKyAgICBleHRlcm4gQ0tfT0ZGX1Qg c25kc21hbGxlciwgc25kbGFyZ2VyLCBjYWxpYnJhdGU7CisjaWZuZGVmIE5PU1BMCisgICAgaW50 IHJhbmdlWzJdOwkJCS8qIEFycmF5IHJhbmdlICovCisgICAgY2hhciAqKiBhcCA9IE5VTEw7CQkJ LyogQXJyYXkgcG9pbnRlciAqLworICAgIGludCBhcnJheXggPSAtMTsJCQkvKiBBcnJheSBpbmRl eCAqLworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBORVdGVFAKKyAgICBpZiAoKGZ0cGdl dCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBpc29wZW4oKSkpIHsKKwlpZiAoY3ggPT0g WFhNQUkpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIE5vIE1BSUwgd2l0aCBGVFBcbiIpOworCSAg ICByZXR1cm4oLTkpOworCX0KKwlyZXR1cm4oZG9mdHBwdXQoY3gsMCkpOworICAgIH0KKyNlbmRp ZiAvKiBORVdGVFAgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPD0gU05EX01BWDsgaSsrKSB7CS8q IEluaXRpYWxpemUgc3dpdGNoIHZhbHVlcyAqLworCXB2W2ldLnN2YWwgPSBOVUxMOwkJLyogdG8g bnVsbCBwb2ludGVycyAqLworCXB2W2ldLml2YWwgPSAtMTsJCS8qIGFuZCAtMSBpbnQgdmFsdWVz ICovCisJcHZbaV0ud3ZhbCA9IChDS19PRkZfVCktMTsJLyogYW5kIC0xIHdpZGUgdmFsdWVzICov CisgICAgfQorI2lmbmRlZiBOT1NQTAorICAgIHJhbmdlWzBdID0gLTE7CisgICAgcmFuZ2VbMV0g PSAtMTsKKyAgICBzbmR4aW4gPSAtMTsJCQkvKiBBcnJheSBpbmRleCAqLworI2VuZGlmIC8qIE5P U1BMICovCisgICAgc25kYXJyYXkgPSBOVUxMOwkJCS8qIEFycmF5IHBvaW50ZXIgKi8KKworI2lm ZGVmIFVOSVhPUk9TSworICAgIGdfbWF0Y2hkb3QgPSBtYXRjaGRvdDsJCS8qIE1hdGNoIGRvdCBm aWxlcyAqLworI2VuZGlmIC8qIFVOSVhPUk9TSyAqLworICAgIGdfcmVjdXJzaXZlID0gcmVjdXJz aXZlOwkJLyogUmVjdXJzaXZlIHNlbmRpbmcgKi8KKyAgICByZWN1cnNpdmUgPSAwOwkJCS8qIFNh dmUgZ2xvYmFsIHZhbHVlLCBzZXQgbG9jYWwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBlbnRy eSBmbmNudiIsIiIsZm5jbnYpOworCisgICAgLyogUHJlc2V0IHN3aXRjaCB2YWx1ZXMgYmFzZWQg b24gdG9wLWxldmVsIGNvbW1hbmQgdGhhdCBjYWxsZWQgdXMgKi8KKworICAgIHN3aXRjaCAoY3gp IHsKKyAgICAgIGNhc2UgWFhNU0U6CQkJLyogTVNFTkQgKi8KKwltbGlzdCA9IDE7IGJyZWFrOwor ICAgICAgY2FzZSBYWENTRU46CQkJLyogQ1NFTkQgKi8KKwlwdltTTkRfQ01EXS5pdmFsID0gMTsg YnJlYWs7CisgICAgICBjYXNlIFhYTU1PVkU6CQkJLyogTU1PVkUgKi8KKwltbGlzdCA9IDE7Cisg ICAgICBjYXNlIFhYTU9WRToJCQkvKiBNT1ZFICovCisJcHZbU05EX0RFTF0uaXZhbCA9IDE7IGJy ZWFrOworICAgICAgY2FzZSBYWFJTRU46CQkJLyogUkVTRU5EICovCisJcHZbU05EX0JJTl0uaXZh bCA9IDE7CQkvKiBJbXBsaWVzIC9CSU5BUlkgKi8KKwlwdltTTkRfUkVTXS5pdmFsID0gMTsgYnJl YWs7CisgICAgICBjYXNlIFhYTUFJOgkJCS8qIE1BSUwgKi8KKwlwdltTTkRfTUFJXS5pdmFsID0g MTsgYnJlYWs7CisgICAgfQorCisgICAgLyogU2V0IHVwIGNoYWluZWQgcGFyc2UgZnVuY3Rpb25z Li4uICovCisKKyAgICBjbWZkYmkoJnN3LAkJCQkvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRj aGVzICovCisJICAgX0NNS0VZLAkJCS8qIGZjb2RlICovCisJICAgIkZpbGVuYW1lLCBvciBzd2l0 Y2giLAkvKiBobHBtc2cgKi8KKwkgICAiIiwJCQkJLyogZGVmYXVsdCAqLworCSAgICIiLAkJCQkv KiBhZGR0bCBzdHJpbmcgZGF0YSAqLworI2lmZGVmIE5PTVNFTkQKKwkgICBuc25kdGFiLAkJCS8q IGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworI2Vsc2UKKwkgICBtbGlzdCA/IG5t c25kdGFiIDogbnNuZHRhYiwJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisj ZW5kaWYgLyogTk9NU0VORCAqLworCSAgIDQsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0 ID0gY21zd2kgKi8KKwkgICB4eHN0cmluZywJCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisj aWZkZWYgTk9NU0VORAorCSAgIHNuZHRhYiwJCQkvKiBLZXl3b3JkIHRhYmxlICovCisjZWxzZQor CSAgIG1saXN0ID8gbXNuZHRhYiA6IHNuZHRhYiwKKyNlbmRpZiAvKiBOT01TRU5EICovCisJICAg JnNmCQkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkgICApOworICAgIGNtZmRiaSgmc2Ys CQkJCS8qIDJuZCBGREIgLSBmaWxlIHRvIHNlbmQgKi8KKwkgICBfQ01JRkksCQkJLyogZmNvZGUg Ki8KKwkgICAiRmlsZShzKSB0byBzZW5kIiwJCS8qIGhscG1zZyAqLworCSAgICIiLAkJCQkvKiBk ZWZhdWx0ICovCisJICAgIiIsCQkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJICAgbm9saW5r cywJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCSAgIDAsCQkJCS8qIGFkZHRsIG51bWVy aWMgZGF0YSAyICovCisJICAgeHhzdHJpbmcsCisJICAgTlVMTCwKKwkgICBtbGlzdCA/ICZjbSA6 ICZmbAorCSAgICk7CisgICAgY21mZGJpKCZmbCwJCQkJLyogM3JkIEZEQiAtIGNvbW1hbmQgdG8g c2VuZCBmcm9tICovCisJICAgX0NNRkxELAkJCS8qIGZjb2RlICovCisJICAgIkNvbW1hbmQiLAkJ CS8qIGhscG1zZyAqLworCSAgICIiLAkJCQkvKiBkZWZhdWx0ICovCisJICAgIiIsCQkJCS8qIGFk ZHRsIHN0cmluZyBkYXRhICovCisJICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8K KwkgICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworCSAgIHh4c3RyaW5nLAorCSAg IE5VTEwsCisJICAgJmNtCisJICAgKTsKKyAgICBjbWZkYmkoJmNtLAkJCQkvKiA0dGggRkRCIC0g Q29uZmlybWF0aW9uICovCisJICAgX0NNQ0ZNLAkJCS8qIGZjb2RlICovCisJICAgIiIsCQkJCS8q IGhscG1zZyAqLworCSAgICIiLAkJCQkvKiBkZWZhdWx0ICovCisJICAgIiIsCQkJCS8qIGFkZHRs IHN0cmluZyBkYXRhICovCisJICAgMCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkg ICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworCSAgIE5VTEwsCisJICAgTlVMTCwK KwkgICBOVUxMCisJICAgKTsKKworICAgIHdoaWxlICgxKSB7CQkJCS8qIFBhcnNlIDAgb3IgbW9y ZSBzd2l0Y2hlcyAqLworCXggPSBjbWZkYigmc3cpOwkJCS8qIFBhcnNlIHNvbWV0aGluZyAqLwor CWRlYnVnKEYxMDEsInhzZW5kIGNtZmRiIiwiIix4KTsKKwlpZiAoeCA8IDApCQkJLyogRXJyb3Ig Ki8KKwkgIGdvdG8geHNlbmR4OwkJCS8qIG9yIHJlcGFyc2UgbmVlZGVkICovCisJaWYgKGNtcmVz dWx0LmZjb2RlICE9IF9DTUtFWSkJLyogQnJlYWsgb3V0IGlmIG5vdCBhIHN3aXRjaCAqLworCSAg YnJlYWs7CisvKgorICBUaGV5IGdhdmUgYSBzd2l0Y2gsIGJ1dCBsZXQncyBzZWUgaG93IHRoZXkg dGVybWluYXRlZCBpdC4KKyAgSWYgdGhleSBlbmRlZCBpdCB3aXRoIDogb3IgPSwgdGhlbiB3ZSBt dXN0IHBhcnNlIGEgdmFsdWUuCisgIElmIHRoZXkgZW5kZWQgaXQgd2l0aCBhbnl0aGluZyBlbHNl LCB0aGVuIHdlIG11c3QgTk9UIHBhcnNlIGEgdmFsdWUuCisqLworCWMgPSBjbWdicmsoKTsJCQkv KiBHZXQgYnJlYWsgY2hhcmFjdGVyICovCisJZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0n KTsgLyogdG8gc2VlIGhvdyB0aGV5IGVuZGVkIHRoZSBzd2l0Y2ggKi8KKwlpZiAoZ2V0dmFsICYm ICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgeworCSAgICBwcmludGYoIj9UaGlzIHN3aXRj aCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4 c2VuZHg7CisJfQorCWlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKwkg ICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCSAgICB4 ID0gLTk7CisJICAgIGdvdG8geHNlbmR4OworCX0KKwluID0gY21yZXN1bHQubnJlc3VsdDsJCS8q IE51bWVyaWMgcmVzdWx0ID0gc3dpdGNoIHZhbHVlICovCisJZGVidWcoRjEwMSwieHNlbmQgc3dp dGNoIiwiIixuKTsKKworCXN3aXRjaCAobikgewkJCS8qIFByb2Nlc3MgdGhlIHN3aXRjaCAqLwor CSAgY2FzZSBTTkRfQ01EOgkJCS8qIFRoZXNlIHRha2Ugbm8gYXJncyAqLworCSAgICBpZiAobm9w dXNoKSB7CisJCXByaW50ZigiP1NvcnJ5LCBzeXN0ZW0gY29tbWFuZCBhY2Nlc3MgaXMgZGlzYWJs ZWRcbiIpOworCQl4ID0gLTk7CisJCWdvdG8geHNlbmR4OworCSAgICB9CisjaWZkZWYgUElQRVNF TkQKKwkgICAgZWxzZSBpZiAoc25kZmlsdGVyKSB7CisJCXByaW50ZigKKyI/U29ycnksIG5vIFNF TkQgL0NPTU1BTkQgb3IgQ1NFTkQgd2hlbiBTRU5EIEZJTFRFUiBzZWxlY3RlZFxuIik7CisJCXgg PSAtOTsKKwkJZ290byB4c2VuZHg7CisJICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCSAg ICBzdy5obHBtc2cgPSAiQ29tbWFuZCwgb3Igc3dpdGNoIjsgLyogQ2hhbmdlIGhlbHAgbWVzc2Fn ZSAqLworCSAgICBwdltuXS5pdmFsID0gMTsJCS8qIEp1c3Qgc2V0IHRoZSBmbGFnICovCisJICAg IHB2W1NORF9BUlJdLml2YWwgPSAwOworCSAgICBicmVhazsKKworCSAgY2FzZSBTTkRfUkVDOgkJ CS8qIC9SRUNVUlNJVkUgKi8KKwkgICAgcmVjdXJzaXZlID0gMjsJCS8qIFNldCB0aGUgcmVhbCB2 YXJpYWJsZSAqLworCSAgICBwdltTTkRfUFRIXS5pdmFsID0gUEFUSF9SRUw7IC8qIEdpdmUgdGhl bSByZWxhdGl2ZSBwYXRobmFtZXMgKi8KKwkgICAgcHZbbl0uaXZhbCA9IDE7CQkvKiBKdXN0IHNl dCB0aGUgZmxhZyAqLworCSAgICBicmVhazsKKworCSAgY2FzZSBTTkRfUkVTOgkJCS8qIC9SRUNP VkVSIChyZXNlbmQpICovCisJICAgIHB2W1NORF9BUlJdLml2YWwgPSAwOworCSAgICBwdltTTkRf QklOXS5pdmFsID0gMTsJLyogSW1wbGllcyAvQklOQVJZICovCisJICBjYXNlIFNORF9OT0I6CQkJ LyogL05PQkFDS1VQICovCisJICBjYXNlIFNORF9ERUw6CQkJLyogL0RFTEVURSAqLworCSAgY2Fz ZSBTTkRfU0hIOgkJCS8qIC9RVUlFVCAqLworCSAgICBwdltuXS5pdmFsID0gMTsJCS8qIEp1c3Qg c2V0IHRoZSBmbGFnICovCisJICAgIGJyZWFrOworCisjaWZkZWYgVU5JWE9ST1NLCisvKiBMaWtl IHJlY3Vyc2l2ZSwgdGhlc2UgYXJlIHNldCBpbW1lZGlhdGVseSBiZWNhdXNlIHRoZXkgYWZmZWN0 IGNtaWZpKCkgKi8KKwkgIGNhc2UgU05EX0RPVDoJCQkvKiAvRE9URklMRVMgKi8KKwkgICAgbWF0 Y2hkb3QgPSAxOworCSAgICBicmVhazsKKwkgIGNhc2UgU05EX05PRDoJCQkvKiAvTk9ET1RGSUxF UyAqLworCSAgICBtYXRjaGRvdCA9IDA7CisJICAgIGJyZWFrOworI2VuZGlmIC8qIFVOSVhPUk9T SyAqLworCisJICAvKiBGaWxlIHRyYW5zZmVyIG1vZGVzIC0gZWFjaCB1bmRvZXMgdGhlIG90aGVy cyAqLworCisJICBjYXNlIFNORF9CSU46CQkJLyogQmluYXJ5ICovCisJICBjYXNlIFNORF9UWFQ6 CQkJLyogVGV4dCAqLworCSAgY2FzZSBTTkRfSU1HOgkJCS8qIEltYWdlICovCisJICBjYXNlIFNO RF9MQkw6CQkJLyogTGFiZWxlZCAqLworCSAgICBwdltTTkRfQklOXS5pdmFsID0gMDsKKwkgICAg cHZbU05EX1RYVF0uaXZhbCA9IDA7CisJICAgIHB2W1NORF9JTUddLml2YWwgPSAwOworCSAgICBw dltTTkRfTEJMXS5pdmFsID0gMDsKKwkgICAgcHZbbl0uaXZhbCA9IDE7CisJICAgIGJyZWFrOwor CisjaWZkZWYgQ0tTWU1MSU5LCisJICBjYXNlIFNORF9MTks6CisJICBjYXNlIFNORF9OTEs6CisJ ICAgIG5vbGlua3MgPSAobiA9PSBTTkRfTkxLKSA/IDIgOiAwOworCSAgICBjbWZkYmkoJnNmLAkJ CS8qIFJlZG8gY21pZmkoKSAqLworCQkgICBfQ01JRkksCQkvKiBmY29kZSAqLworCQkgICAiRmls ZShzKSB0byBzZW5kIiwJLyogaGxwbXNnICovCisJCSAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkJ ICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJICAgbm9saW5rcywJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAxICovCisJCSAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8K KwkJICAgeHhzdHJpbmcsCisJCSAgIE5VTEwsCisJCSAgIG1saXN0ID8gJmNtIDogJmZsCisJCSAg ICk7CisJICAgIGJyZWFrOworI2VuZGlmIC8qIENLU1lNTElOSyAqLworCisJICBjYXNlIFNORF9F WEM6CQkJLyogRXhjbHVkZXMgKi8KKwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICBpZiAo KHggPSBjbWZsZCgiUGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKwkJaWYgKHggPT0g LTMpIHsKKwkJICAgIHByaW50ZigiP1BhdHRlcm4gcmVxdWlyZWRcbiIpOworCQkgICAgeCA9IC05 OworCQl9CisJCWdvdG8geHNlbmR4OworCSAgICB9CisJICAgIGlmIChwdltuXS5zdmFsKSBmcmVl KHB2W25dLnN2YWwpOworCSAgICB5ID0gc3RybGVuKHMpOworCSAgICBpZiAoeSA+IDI1Nikgewor CQlwcmludGYoIj9QYXR0ZXJuIHRvbyBsb25nIC0gMjU2IG1heFxuIik7CisJCXggPSAtOTsKKwkJ Z290byB4c2VuZHg7CisJICAgIH0KKwkgICAgcHZbbl0uc3ZhbCA9IG1hbGxvYyh5KzEpOworCSAg ICBpZiAocHZbbl0uc3ZhbCkgeworCQlzdHJjcHkocHZbbl0uc3ZhbCxzKTsJLyogc2FmZSAqLwor CQlwdltuXS5pdmFsID0gMTsKKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSBTTkRfTU9W OgkJCS8qIE1PVkUgYWZ0ZXIgKi8KKwkgIGNhc2UgU05EX1JFTjoJCQkvKiBSRU5BTUUgYWZ0ZXIg Ki8KKwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICBpZiAoKHggPSBjbWZsZChuID09IFNO RF9NT1YgPworCSAgICJkZXZpY2UgYW5kL29yIGRpcmVjdG9yeSBmb3Igc291cmNlIGZpbGUgYWZ0 ZXIgc2VuZGluZyIgOgorCSAgICJuZXcgbmFtZSBmb3Igc291cmNlIGZpbGUgYWZ0ZXIgc2VuZGlu ZyIsCisJCQkgICAiIiwKKwkJCSAgICZzLAorCQkJICAgbiA9PSBTTkRfTU9WID8geHhzdHJpbmcg OiBOVUxMCisJCQkgICApKSA8IDApIHsKKwkJaWYgKHggPT0gLTMpIHsKKwkJICAgIHByaW50Zigi JXNcbiIsIG4gPT0gU05EX01PViA/CisJCQkgICAiP0Rlc3RpbmF0aW9uIHJlcXVpcmVkIiA6CisJ CQkgICAiP05ldyBuYW1lIHJlcXVpcmVkIgorCQkJICAgKTsKKwkJICAgIHggPSAtOTsKKwkJfQor CQlnb3RvIHhzZW5keDsKKwkgICAgfQorCSAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5z dmFsKTsKKwkgICAgcyA9IGJyc3RyaXAocyk7CisJICAgIHkgPSBzdHJsZW4ocyk7CisJICAgIGlm ICh5ID4gMCkgeworCQlwdltuXS5zdmFsID0gbWFsbG9jKHkrMSk7CisJCWlmIChwdltuXS5zdmFs KSB7CisJCSAgICBzdHJjcHkocHZbbl0uc3ZhbCxzKTsgLyogc2FmZSAqLworCQkgICAgcHZbbl0u aXZhbCA9IDE7CisJCX0KKwkgICAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSBTTkRfU01BOgkJ CS8qIFNtYWxsZXIgLyBsYXJnZXIgdGhhbiAqLworCSAgY2FzZSBTTkRfTEFSOiB7CisJICAgICAg Q0tfT0ZGX1QgdzsKKwkgICAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAgICAgaWYgKCh4ID0g Y21udW13KCJTaXplIGluIGJ5dGVzIiwiMCIsMTAsJncseHhzdHJpbmcpKSA8IDApCisJCWdvdG8g eHNlbmR4OworCSAgICAgIHB2W25dLnd2YWwgPSB3OworCSAgICAgIGJyZWFrOworCSAgfQorCSAg Y2FzZSBTTkRfQUZUOgkJCS8qIFNlbmQgL0FGVEVSOmRhdGUtdGltZSAqLworCSAgY2FzZSBTTkRf QkVGOgkJCS8qIFNlbmQgL0JFRk9SRTpkYXRlLXRpbWUgKi8KKwkgIGNhc2UgU05EX05BRjoJCQkv KiBTZW5kIC9OT1QtQUZURVI6ZGF0ZS10aW1lICovCisJICBjYXNlIFNORF9OQkU6CQkJLyogU2Vu ZCAvTk9ULUJFRk9SRTpkYXRlLXRpbWUgKi8KKwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAg ICBpZiAoKHggPSBjbWRhdGUoIkZpbGUgZGF0ZS10aW1lIiwiIiwmcywwLHh4c3RyaW5nKSkgPCAw KSB7CisJCWlmICh4ID09IC0zKSB7CisJCSAgICBwcmludGYoIj9EYXRlLXRpbWUgcmVxdWlyZWRc biIpOworCQkgICAgeCA9IC05OworCQl9CisJCWdvdG8geHNlbmR4OworCSAgICB9CisJICAgIGlm IChwdltuXS5zdmFsKSBmcmVlKHB2W25dLnN2YWwpOworCSAgICBwdltuXS5zdmFsID0gbWFsbG9j KChpbnQpc3RybGVuKHMpKzEpOworCSAgICBpZiAocHZbbl0uc3ZhbCkgeworCQlzdHJjcHkocHZb bl0uc3ZhbCxzKTsJLyogc2FmZSAqLworCQlwdltuXS5pdmFsID0gMTsKKwkgICAgfQorCSAgICBi cmVhazsKKworCSAgY2FzZSBTTkRfTUFJOgkJCS8qIFNlbmQgYXMgbWFpbCAoPSBNQUlMKSAqLwor I2lmZGVmIElLU0QKKwkgICAgaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX21haSkpIHsKKwkJ cHJpbnRmKCI/U29ycnksIHNlbmRpbmcgZmlsZXMgYXMgbWFpbCBpcyBkaXNhYmxlZFxuIik7CisJ CXJldHVybigtOSk7CisJICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisJICAgIHB2W25dLml2YWwg PSAxOworCSAgICBpZiAoIWdldHZhbCkgYnJlYWs7CisJICAgIGlmICgoeCA9IGNtZmxkKCJlLW1h aWwgYWRkcmVzcyIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKwkJaWYgKHggPT0gLTMpIHsKKwkJ ICAgIHByaW50ZigiP2FkZHJlc3MgcmVxdWlyZWRcbiIpOworCQkgICAgeCA9IC05OworCQl9CisJ CWdvdG8geHNlbmR4OworCSAgICB9CisJICAgIHMgPSBicnN0cmlwKHMpOworCSAgICBpZiAocHZb bl0uc3ZhbCkgZnJlZShwdltuXS5zdmFsKTsKKwkgICAgcHZbbl0uc3ZhbCA9IG1hbGxvYygoaW50 KXN0cmxlbihzKSsxKTsKKwkgICAgaWYgKHB2W25dLnN2YWwpCisJICAgICAgc3RyY3B5KHB2W25d LnN2YWwscyk7CS8qIHNhZmUgKi8KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgU05EX1BSSToJCQkv KiBTZW5kIHRvIGJlIHByaW50ZWQgKFJFTU9URSBQUklOVCkgKi8KKyNpZmRlZiBJS1NECisJICAg IGlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9tYWkpKSB7CisJCXByaW50ZigiP1NvcnJ5LCBz ZW5kaW5nIGZpbGVzIGZvciBwcmludGluZyBpcyBkaXNhYmxlZFxuIik7CisJCXJldHVybigtOSk7 CisJICAgIH0KKyNlbmRpZiAvKiBJS1NEICovCisJICAgIHB2W25dLml2YWwgPSAxOworCSAgICBp ZiAoIWdldHZhbCkgYnJlYWs7CisJICAgIGlmICgoeCA9IGNtZmxkKCJQcmludCBvcHRpb25zIiwi Iiwmcyx4eHN0cmluZykpIDwgMCkKKwkgICAgICBpZiAoeCAhPSAtMykgZ290byB4c2VuZHg7CisJ ICAgIHMgPSBicnN0cmlwKHMpOworCSAgICBpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltuXS5zdmFs KTsKKwkgICAgcHZbbl0uc3ZhbCA9IG1hbGxvYygoaW50KXN0cmxlbihzKSsxKTsKKwkgICAgaWYg KHB2W25dLnN2YWwpCisJICAgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7CS8qIHNhZmUgKi8KKwkg ICAgYnJlYWs7CisKKwkgIGNhc2UgU05EX0FTTjoJCQkvKiBBcy1uYW1lICovCisJICAgIGRlYnVn KEYxMDEsInhzZW5kIC9hcy1uYW1lIGdldHZhbCIsIiIsZ2V0dmFsKTsKKwkgICAgaWYgKCFnZXR2 YWwpIGJyZWFrOworCSAgICBpZiAoKHggPSBjbWZsZCgiTmFtZSB0byBzZW5kIHVuZGVyIiwiIiwm cyxOVUxMKSkgPCAwKSB7CisJCWlmICh4ID09IC0zKSB7CisJCSAgICBwcmludGYoIj9uYW1lIHJl cXVpcmVkXG4iKTsKKwkJICAgIHggPSAtOTsKKwkJfQorCQlnb3RvIHhzZW5keDsKKwkgICAgfQor CSAgICBzID0gYnJzdHJpcChzKTsKKwkgICAgaWYgKCh5ID0gc3RybGVuKHMpKSA+IDApIHsKKwkJ aWYgKHB2W25dLnN2YWwpIGZyZWUocHZbbl0uc3ZhbCk7CisJCXB2W25dLnN2YWwgPSBtYWxsb2Mo eSsxKTsKKwkJaWYgKHB2W25dLnN2YWwpIHsKKwkJICAgIHN0cmNweShwdltuXS5zdmFsLHMpOyAv KiBzYWZlICovCisJCSAgICBwdltuXS5pdmFsID0gMTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFr OworCisJICBjYXNlIFNORF9TVEE6IHsJCS8qIFN0YXJ0aW5nIHBvc2l0aW9uICg9IFBTRU5EKSAq LworCSAgICAgIENLX09GRl9UIHc7CisJICAgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICAg IGlmICgoeCA9IGNtbnVtdygiMC1iYXNlZCBwb3NpdGlvbiIsIjAiLDEwLCZ3LHh4c3RyaW5nKSkg PCAwKQorCQlnb3RvIHhzZW5keDsKKwkgICAgICBwdltuXS53dmFsID0gdzsKKwkgICAgICBicmVh azsKKwkgIH0KKwkgIGNhc2UgU05EX1BSTzoJCQkvKiBQcm90b2NvbCB0byB1c2UgKi8KKwkgICAg aWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICBpZiAoKHggPSBjbWtleShwcm90b3MsbnByb3Rvcywi RmlsZS10cmFuc2ZlciBwcm90b2NvbCIsIiIsCisJCQkgICB4eHN0cmluZykpIDwgMCkgeworCQlp ZiAoeCA9PSAtMykgeworCQkgICAgcHJpbnRmKCI/bmFtZSBvZiBwcm90b2NvbCByZXF1aXJlZFxu Iik7CisJCSAgICB4ID0gLTk7CisJCX0KKwkJZ290byB4c2VuZHg7CisJICAgIH0KKwkgICAgcHZb bl0uaXZhbCA9IHg7CisJICAgIGJyZWFrOworCisjaWZkZWYgUElQRVNFTkQKKwkgIGNhc2UgU05E X0ZMVDoJCQkvKiBGaWx0ZXIgKi8KKwkgICAgZGVidWcoRjEwMSwieHNlbmQgL2ZpbHRlciBnZXR2 YWwiLCIiLGdldHZhbCk7CisJICAgIGlmICghZ2V0dmFsKSBicmVhazsKKwkgICAgaWYgKCh4ID0g Y21mbGQoIkZpbHRlciBwcm9ncmFtIHRvIHNlbmQgdGhyb3VnaCIsIiIsJnMsTlVMTCkpIDwgMCkg eworCQlpZiAoeCA9PSAtMykKKwkJICBzID0gIiI7CisJCWVsc2UKKwkJICBnb3RvIHhzZW5keDsK KwkgICAgfQorCSAgICBpZiAoKnMpIHMgPSBicnN0cmlwKHMpOworCSAgICB5ID0gc3RybGVuKHMp OworCSAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSB7CS8qIE1ha2Ugc3VyZSB0aGV5IGluY2x1 ZGVkICJcdiguLi4pIiAqLworCQlpZiAoc1t4XSAhPSAnXFwnKSBjb250aW51ZTsKKwkJaWYgKHNb eCsxXSA9PSAndicpIGJyZWFrOworCSAgICB9CisJICAgIGlmICh4ID09IHkpIHsKKwkJcHJpbnRm KAorCQkiP0ZpbHRlciBtdXN0IGNvbnRhaW4gYSByZXBsYWNlbWVudCB2YXJpYWJsZSBmb3IgZmls ZW5hbWUuXG4iCisJCSAgICAgICApOworCQl4ID0gLTk7CisJCWdvdG8geHNlbmR4OworCSAgICB9 CisJICAgIHB2W25dLml2YWwgPSAxOworCSAgICBpZiAocHZbbl0uc3ZhbCkgeworCQlmcmVlKHB2 W25dLnN2YWwpOworCQlwdltuXS5zdmFsID0gTlVMTDsKKwkgICAgfQorCSAgICBpZiAoKHkgPSBz dHJsZW4ocykpID4gMCkgeworCQlpZiAoKHB2W25dLnN2YWwgPSBtYWxsb2MoeSsxKSkpCisJCSAg c3RyY3B5KHB2W25dLnN2YWwscyk7CS8qIHNhZmUgKi8KKwkgICAgfQorCSAgICBicmVhazsKKyNl bmRpZiAvKiBQSVBFU0VORCAqLworCisJICBjYXNlIFNORF9QVEg6CQkJLyogUGF0aG5hbWVzICov CisJICAgIGlmICghZ2V0dmFsKSB7CisJCXB2W25dLml2YWwgPSBQQVRIX1JFTDsKKwkJYnJlYWs7 CisJICAgIH0KKwkgICAgaWYgKCh4ID0gY21rZXkocGF0aHRhYixucGF0aHRhYiwiIiwiYWJzb2x1 dGUiLHh4c3RyaW5nKSkgPCAwKQorCSAgICAgIGdvdG8geHNlbmR4OworCSAgICBwdltuXS5pdmFs ID0geDsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgU05EX05BTToJCQkvKiBGaWxlbmFtZXMgKi8K KwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICBpZiAoKHggPSBjbWtleShmbnRhYixuZm50 YWIsIiIsImNvbnZlcnRlZCIseHhzdHJpbmcpKSA8IDApCisJICAgICAgZ290byB4c2VuZHg7CisJ ICAgIGRlYnVnKEYxMDEsInhzZW5kIC9maWxlbmFtZXMiLCIiLHgpOworCSAgICBwdltuXS5pdmFs ID0geDsKKwkgICAgYnJlYWs7CisKKyNpZmRlZiBDQUxJQlJBVEUKKyAgICAgICAgICBjYXNlIFNO RF9DQUw6IHsJCS8qIC9DQUxJQlJBVEUgKi8KKwkgICAgICBDS19PRkZfVCB3OworCSAgICAgIGlm IChnZXR2YWwpIHsKKwkJICBpZiAoKHggPSBjbW51bXcoIm51bWJlciBvZiBLYnl0ZXMgdG8gc2Vu ZCIsCisJCQkJICAiMTAyNCIsMTAsJncseHhzdHJpbmcpKSA8IDApCisJCSAgICBnb3RvIHhzZW5k eDsKKwkgICAgICB9IGVsc2UKKwkJdyA9IChDS19PRkZfVCkxMDI0OworCSAgICAgIHB2W25dLnd2 YWwgPSB3OworCSAgICAgIHB2W1NORF9BUlJdLml2YWwgPSAwOworCSAgICAgIGJyZWFrOworCSAg fQorI2VuZGlmIC8qIENBTElCUkFURSAqLworCisJICBjYXNlIFNORF9GSUw6CQkJLyogTmFtZSBv ZiBmaWxlIGNvbnRhaW5pbmcgZmlsbmFtZXMgKi8KKwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOwor CSAgICBpZiAoKHggPSBjbWlmaSgiTmFtZSBvZiBmaWxlIGNvbnRhaW5pbmcgbGlzdCBvZiBmaWxl bmFtZXMiLAorCQkJICAgICAgICIiLCZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7CisJCWlmICh4ID09 IC0zKSB7CisJCSAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7CisJCSAgICB4ID0g LTk7CisJCX0KKwkJZ290byB4c2VuZHg7CisJICAgIH0gZWxzZSBpZiAoeSkgeworCQlwcmludGYo Ij9XaWxkY2FyZHMgbm90IGFsbG93ZWRcbiIpOworCQl4ID0gLTk7CisJCWdvdG8geHNlbmR4Owor CSAgICB9CisJICAgIGlmIChwdltuXS5zdmFsKQorCSAgICAgIGZyZWUocHZbbl0uc3ZhbCk7CisJ ICAgIGlmIChzKSBpZiAoKnMpIHsKKwkJaWYgKChwdltuXS5zdmFsID0gbWFsbG9jKChpbnQpc3Ry bGVuKHMpKzEpKSkgeworCQkgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7CisJCSAgICBwdltuXS5p dmFsID0gMTsKKwkJICAgIHB2W1NORF9BUlJdLml2YWwgPSAwOworCQl9CisJICAgIH0KKwkgICAg YnJlYWs7CisKKyNpZm5kZWYgTk9TUEwKKwkgIGNhc2UgU05EX0FSUjoJCQkvKiBTRU5EIC9BUlJB WTogKi8KKwkgICAgaWYgKCFnZXR2YWwpIGJyZWFrOworCSAgICBhcCA9IE5VTEw7CisJICAgIGlm ICgoeCA9IGNtZmxkKCJBcnJheSBuYW1lIChhIHNpbmdsZSBsZXR0ZXIgd2lsbCBkbykiLAorCQkJ ICAgIiIsCisJCQkgICAmcywKKwkJCSAgIE5VTEwKKwkJCSAgICkpIDwgMCkgeworCQlpZiAoeCA9 PSAtMykKKwkJICBicmVhazsKKwkJZWxzZQorCQkgIHJldHVybih4KTsKKwkgICAgfQorCSAgICBp ZiAoKHggPSBhcnJheWJvdW5kcyhzLCYocmFuZ2VbMF0pLCYocmFuZ2VbMV0pKSkgPCAwKSB7CisJ CXByaW50ZigiP0JhZCBhcnJheTogJXNcbiIscyk7CisJCXJldHVybigtOSk7CisJICAgIH0KKwkg ICAgaWYgKCEoYXAgPSBhX3B0clt4XSkpIHsKKwkJcHJpbnRmKCI/Tm8gc3VjaCBhcnJheTogJXNc biIscyk7CisJCXJldHVybigtOSk7CisJICAgIH0KKwkgICAgcHZbbl0uaXZhbCA9IDE7CisJICAg IHB2W1NORF9DTURdLml2YWwgPSAwOwkvKiBVbmRvIGFueSBjb25mbGljdGluZyBvbmVzLi4uICov CisJICAgIHB2W1NORF9SRVNdLml2YWwgPSAwOworCSAgICBwdltTTkRfQ0FMXS5pdmFsID0gMDsK KwkgICAgcHZbU05EX0ZJTF0uaXZhbCA9IDA7CisJICAgIGFycmF5eCA9IHg7CisJICAgIGJyZWFr OworI2VuZGlmIC8qIE5PU1BMICovCisKKwkgIGNhc2UgU05EX1hQQToJCQkvKiAvVFJBTlNQQVJF TlQgKi8KKwkgICAgcHZbbl0uaXZhbCA9IDE7CisJICAgIGJyZWFrOworCisJICBjYXNlIFNORF9U WVA6CQkJLyogT25seSBmaWxlcyBvZiBnaXZlbiB0eXBlICovCisJICAgIGlmICghZ2V0dmFsKSBi cmVhazsKKwkgICAgaWYgKCh4ID0gY21rZXkodHh0YmluLDMsIiIsImFsbCIseHhzdHJpbmcpKSA8 IDApCisJICAgICAgZ290byB4c2VuZHg7CisJICAgIHB2W25dLml2YWwgPSAoeCA9PSAyKSA/IC0x IDogeDsKKwkgICAgYnJlYWs7CisKKwkgIGRlZmF1bHQ6CisJICAgIHByaW50ZigiP1VuZXhwZWN0 ZWQgc3dpdGNoIHZhbHVlIC0gJWRcbiIsY21yZXN1bHQubnJlc3VsdCk7CisJICAgIHggPSAtOTsK KwkgICAgZ290byB4c2VuZHg7CisJfQorICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBjbXJl c3VsdCBmY29kZSIsIiIsY21yZXN1bHQuZmNvZGUpOworCisjaWZkZWYgQ09NTUVOVAorICAgIC8q IExpc3Qgc3dpdGNoIHBhcnNpbmcgcmVzdWx0cyBpbiBkZWJ1ZyBsb2cgKi8KKyAgICBmb3IgKGkg PSAwOyBpIDw9IFNORF9NQVg7IGkrKykgeworCWNrbWFrbXNnKGxpbmUsTElOQlVGU0laLCJ4c2Vu ZCBzd2l0Y2ggIixja2l0b2EoaSksTlVMTCxOVUxMKTsKKwlkZWJ1ZyhGMTExLGxpbmUsIHB2W2ld LnN2YWwsIHB2W2ldLml2YWwpOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKy8qIE5v dyB3ZSBoYXZlIGFsbCBzd2l0Y2hlcywgcGx1cyBtYXliZSBhIGZpbGVuYW1lIG9yIGNvbW1hbmQs IG9yIG5vdGhpbmcgKi8KKworI2lmZGVmIFBJUEVTRU5ECisgICAgaWYgKHByb3RvY29sICE9IFBS T1RPX0sgJiYgcHZbU05EX0NNRF0uaXZhbCA+IDApIHsKKwlwcmludGYoIj9Tb3JyeSwgJXMgd29y a3Mgb25seSB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIiwKKwkgICAgICAgKGN4ID09IFhYQ1NFTikg PyAiQ1NFTkQiIDogIlNFTkQgL0NPTU1BTkQiKTsKKwl4ID0gLTk7CisJZ290byB4c2VuZHg7Cisg ICAgfQorICAgIGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCB8fAkvKiAvUkVDT1ZFUiAqLworCXB2 W1NORF9TVEFdLnd2YWwgPiAwKSB7CS8qIG9yIC9TVEFSVElORyAqLworCWlmIChzbmRmaWx0ZXIg fHwgcHZbU05EX0ZMVF0uaXZhbCA+IDApIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIG5vIC9SRUNP VkVSIG9yIC9TVEFSVCBpZiBTRU5EIEZJTFRFUiBzZWxlY3RlZFxuIik7CisJICAgIHggPSAtOTsK KwkgICAgZ290byB4c2VuZHg7CisJfQorICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisg ICAgY21hcmcgPSAiIjsKKyAgICBjbWFyZzIgPSAiIjsKKyAgICBsaW5lWzBdID0gTlVMOworICAg IHMgPSBsaW5lOworICAgIHdpbGQgPSAwOworCisgICAgc3dpdGNoIChjbXJlc3VsdC5mY29kZSkg ewkJLyogSG93IGRpZCB3ZSBnZXQgb3V0IG9mIHN3aXRjaCBsb29wICovCisgICAgICBjYXNlIF9D TUlGSToJCQkvKiBJbnB1dCBmaWxlbmFtZSAqLworCWNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNy ZXN1bHQsTElOQlVGU0laKTsgLyogTmFtZSAqLworCWlmIChwdltTTkRfQVJSXS5pdmFsID4gMCkK KwkgIGNtYXJnMiA9IGxpbmU7CisJZWxzZQorCSAgd2lsZCA9IGNtcmVzdWx0Lm5yZXN1bHQ7CS8q IFdpbGQgZmxhZyAqLworCWlmICghcmVjdXJzaXZlICYmICF3aWxkKQorCSAgbm9saW5rcyA9IDA7 CisJYnJlYWs7CisgICAgICBjYXNlIF9DTUZMRDoJCQkvKiBGaWVsZCAqLworCS8qIE9ubHkgYWxs b3dlZCB3aXRoIC9DT01NQU5EIGFuZCAvQVJSQVkgKi8KKwlpZiAocHZbU05EX0NNRF0uaXZhbCA8 IDEgJiYgcHZbU05EX0FSUl0uaXZhbCA8IDEpIHsKKyNpZmRlZiBDS1JPT1QKKwkgICAgaWYgKGNr cm9vdGVycikKKwkgICAgICBwcmludGYoIj9PZmYgbGltaXRzOiAlc1xuIixjbXJlc3VsdC5zcmVz dWx0KTsKKwkgICAgZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLworCSAgICAgIHByaW50ZigiPyVz IC0gXCIlc1wiXG4iLAorCQkgICBpc3dpbGQoY21yZXN1bHQuc3Jlc3VsdCkgPworCQkgICAiTm8g ZmlsZXMgbWF0Y2giIDogIkZpbGUgbm90IGZvdW5kIiwKKwkJICAgY21yZXN1bHQuc3Jlc3VsdAor CQkgICApOworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNlbmR4OworCX0KKwlja3N0cm5jcHko bGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7CisJaWYgKHB2W1NORF9BUlJdLml2YWwg PiAwKQorCSAgY21hcmcyID0gbGluZTsKKwlicmVhazsKKyAgICAgIGNhc2UgX0NNQ0ZNOgkJCS8q IENvbmZpcm1hdGlvbiAqLworCS8qIHMgPSAiIjsgKi8KKwljb25maXJtZWQgPSAxOworCWJyZWFr OworICAgICAgZGVmYXVsdDoKKwlwcmludGYoIj9VbmV4cGVjdGVkIGZ1bmN0aW9uIGNvZGU6ICVk XG4iLGNtcmVzdWx0LmZjb2RlKTsKKwl4ID0gLTk7CisJZ290byB4c2VuZHg7CisgICAgfQorICAg IGRlYnVnKEYxMTAsInhzZW5kIHN0cmluZyIscywwKTsKKyAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBj b25maXJtZWQiLCIiLGNvbmZpcm1lZCk7CisKKyAgICAvKiBTYXZlIGFuZCBjaGFuZ2UgcHJvdG9j b2wgYW5kIHRyYW5zZmVyIG1vZGUgKi8KKyAgICAvKiBHbG9iYWwgdmFsdWVzIGFyZSByZXN0b3Jl ZCBpbiBtYWluIHBhcnNlIGxvb3AgKi8KKworICAgIGdfcHJvdG8gPSBwcm90b2NvbDsJCQkvKiBT YXZlIGN1cnJlbnQgZ2xvYmFsIHByb3RvY29sICovCisgICAgZ191cnBzaXogPSB1cnBzaXo7Cisg ICAgZ19zcHNpemYgPSBzcHNpemY7CisgICAgZ19zcHNpeiA9IHNwc2l6OworICAgIGdfc3BzaXpy ID0gc3BzaXpyOworICAgIGdfc3BtYXggPSBzcG1heDsKKyAgICBnX3dzbG90ciA9IHdzbG90cjsK KyAgICBnX3ByZWZpeGluZyA9IHByZWZpeGluZzsKKyAgICBnX2ZuY2FjdCA9IGZuY2FjdDsKKyAg ICBnX2ZuY252ID0gZm5jbnY7CisgICAgZ19mbnNwYXRoID0gZm5zcGF0aDsKKyAgICBnX2ZucnBh dGggPSBmbnJwYXRoOworICAgIGdfeGZyeGxhID0geGZyeGxhOworCisgICAgaWYgKHB2W1NORF9Q Uk9dLml2YWwgPiAtMSkgewkvKiBDaGFuZ2UgYWNjb3JkaW5nIHRvIHN3aXRjaCAqLworCXByb3Rv Y29sID0gcHZbU05EX1BST10uaXZhbDsKKyAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLnJwa3Rs ZW4gPiAtMSkgLyogY29waWVkIGZyb20gaW5pdHByb3RvKCkgKi8KKyAgICAgICAgICAgIHVycHNp eiA9IHB0YWJbcHJvdG9jb2xdLnJwa3RsZW47CisgICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5z cGt0ZmxnID4gLTEpCisgICAgICAgICAgICBzcHNpemYgPSBwdGFiW3Byb3RvY29sXS5zcGt0Zmxn OworICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uc3BrdGxlbiA+IC0xKSB7CisgICAgICAgICAg ICBzcHNpeiA9IHB0YWJbcHJvdG9jb2xdLnNwa3RsZW47CisgICAgICAgICAgICBpZiAoc3BzaXpm KQorCSAgICAgIHNwc2l6ciA9IHNwbWF4ID0gc3BzaXo7CisgICAgICAgIH0KKyAgICAgICAgaWYg KHB0YWJbcHJvdG9jb2xdLndpbnNpemUgPiAtMSkKKyAgICAgICAgICAgIHdzbG90ciA9IHB0YWJb cHJvdG9jb2xdLndpbnNpemU7CisgICAgICAgIGlmIChwdGFiW3Byb3RvY29sXS5wcmVmaXggPiAt MSkKKyAgICAgICAgICAgIHByZWZpeGluZyA9IHB0YWJbcHJvdG9jb2xdLnByZWZpeDsKKyAgICAg ICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZuY2EgPiAtMSkKKyAgICAgICAgICAgIGZuY2FjdCAgPSBw dGFiW3Byb3RvY29sXS5mbmNhOworICAgICAgICBpZiAocHRhYltwcm90b2NvbF0uZm5jbiA+IC0x KQorICAgICAgICAgICAgZm5jbnYgICA9IHB0YWJbcHJvdG9jb2xdLmZuY247CisgICAgICAgIGlm IChwdGFiW3Byb3RvY29sXS5mbnNwID4gLTEpCisgICAgICAgICAgICBmbnNwYXRoID0gcHRhYltw cm90b2NvbF0uZm5zcDsKKyAgICAgICAgaWYgKHB0YWJbcHJvdG9jb2xdLmZucnAgPiAtMSkKKyAg ICAgICAgICAgIGZucnBhdGggPSBwdGFiW3Byb3RvY29sXS5mbnJwOworICAgIH0KKyAgICBkZWJ1 ZyhGMTAxLCJ4c2VuZCBwcm90b2NvbCIsIiIscHJvdG9jb2wpOworCisgICAgaWYgKHB2W1NORF9O T0JdLml2YWwgPiAtMSkgewkvKiAvTk9CQUNLVVAgKHNraXAgYmFja3VwIGZpbGUpICovCisJZ19z a2lwYnVwID0gc2tpcGJ1cDsKKwlza2lwYnVwID0gMTsKKyAgICB9CisgICAgaWYgKHB2W1NORF9S RUNdLml2YWwgPiAwKQkJLyogL1JFQ1VSU0lWRSAqLworICAgICAgcmVjdXJzaXZlID0gMjsKKwor ICAgIGlmIChwdltTTkRfVFlQXS5pdmFsID4gLTEpIHsJLyogL1RZUEUgKi8KKwl4ZmlsZXR5cGUg PSBwdltTTkRfVFlQXS5pdmFsOworCWlmICh4ZmlsZXR5cGUgPT0gMikKKwkgIHhmaWxldHlwZSA9 IC0xOworICAgIH0KKyAgICBnX2JpbmFyeSA9IGJpbmFyeTsJCQkvKiBTYXZlIGdsb2JhbCB0cmFu c2ZlciBtb2RlICovCisjaWZkZWYgUEFUVEVSTlMKKyAgICBnX3BhdHRlcm5zID0gcGF0dGVybnM7 CQkvKiBTYXZlIEZJTEUgUEFUVEVSTlMgc2V0dGluZyAqLworI2VuZGlmIC8qIFBBVFRFUk5TICov CisgICAgaWYgKHB2W1NORF9CSU5dLml2YWwgPiAwKSB7CQkvKiBDaGFuZ2UgYWNjb3JkaW5nIHRv IHN3aXRjaCAqLworCS8qIElmIHRoZXkgc2FpZCAvQklOQVJZIHRoZXkgbWVhbiAvQklOQVJZICov CisJcGF0dGVybnMgPSAwOwkJCS8qIFNvIG5vIHBhdHRlcm4tYmFzZWQgc3dpdGNoaW5nICovCisJ Z194ZmVybW9kZSA9IHhmZXJtb2RlOwkJLyogb3IgYXV0b21hdGljIHRyYW5zZmVyIG1vZGUgKi8K Kwl4ZmVybW9kZSA9IFhNT0RFX007CisJYmluYXJ5ID0gWFlGVF9COworCWRlYnVnKEYxMDEsImRv eHNlbmQgL0JJTkFSWSB4ZmVybW9kZSIsIiIseGZlcm1vZGUpOworICAgIH0gZWxzZSBpZiAocHZb U05EX1RYVF0uaXZhbCA+IDApIHsJLyogRGl0dG8gZm9yIC9URVhUICovCisJcGF0dGVybnMgPSAw OworCWdfeGZlcm1vZGUgPSB4ZmVybW9kZTsKKwl4ZmVybW9kZSA9IFhNT0RFX007CisJYmluYXJ5 ID0gWFlGVF9UOworCWRlYnVnKEYxMDEsImRveHNlbmQgL1RFWFQgeGZlcm1vZGUiLCIiLHhmZXJt b2RlKTsKKyAgICB9IGVsc2UgaWYgKHB2W1NORF9JTUddLml2YWwgPiAwKSB7CisjaWZkZWYgVk1T CisJYmluYXJ5ID0gWFlGVF9JOworI2Vsc2UKKwliaW5hcnkgPSBYWUZUX0I7CisjZW5kaWYgLyog Vk1TICovCisgICAgfQorI2lmZGVmIENLX0xBQkVMRUQKKyAgICBlbHNlIGlmIChwdltTTkRfTEJM XS5pdmFsID4gMCkgeworCWJpbmFyeSA9IFhZRlRfTDsKKyAgICB9CisjZW5kaWYgLyogQ0tfTEFC RUxFRCAqLworICAgIGRlYnVnKEYxMDEsInhzZW5kIGJpbmFyeSIsIiIsYmluYXJ5KTsKKworICAg IGlmIChwdltTTkRfWFBBXS5pdmFsID4gMCkJCS8qIC9UUkFOU1BBUkVOVCAqLworICAgICAgeGZy eGxhID0gMDsJCQkvKiBEb24ndCB0cmFuc2xhdGUgY2hhcmFjdGVyIHNldHMgKi8KKworICAgIC8q IENoZWNrIGZvciBsZWdhbCBjb21iaW5hdGlvbnMgb2Ygc3dpdGNoZXMsIGZpbGVuYW1lcywgZXRj ICovCisKKyNpZmRlZiBQSVBFU0VORAorICAgIGlmIChwdltTTkRfQ01EXS5pdmFsID4gMCkgewkv KiBDT01NQU5EIC0gc3RyaXAgYW55IGJyYWNlcyAqLworCWRlYnVnKEYxMTAsIlNFTkQgL0NPTU1B TkQgYmVmb3JlIHN0cmlwcGluZyIscywwKTsKKwlzID0gYnJzdHJpcChzKTsKKwlkZWJ1ZyhGMTEw LCJTRU5EIC9DT01NQU5EIGFmdGVyIHN0cmlwcGluZyIscywwKTsKKwlpZiAoISpzKSB7CisJICAg IHByaW50ZigiP1NvcnJ5LCBhIGNvbW1hbmQgdG8gc2VuZCBmcm9tIGlzIHJlcXVpcmVkXG4iKTsK KwkgICAgeCA9IC05OworCSAgICBnb3RvIHhzZW5keDsKKwl9CisJY21hcmcgPSBzOworICAgIH0K KyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisvKiBTZXQgdXAgL01PVkUgYW5kIC9SRU5BTUUgKi8K KworICAgIGlmIChwdltTTkRfREVMXS5pdmFsID4gMCAmJgorCShwdltTTkRfTU9WXS5pdmFsID4g MCB8fCBwdltTTkRfUkVOXS5pdmFsID4gMCkpIHsKKwlwcmludGYoIj9Tb3JyeSwgL0RFTEVURSBj b25mbGljdHMgd2l0aCAvTU9WRSBvciAvUkVOQU1FXG4iKTsKKwl4ID0gLTk7CisJZ290byB4c2Vu ZHg7CisgICAgfQorI2lmZGVmIENLX1RNUERJUgorICAgIGlmIChwdltTTkRfTU9WXS5pdmFsID4g MCkgeworCWludCBsZW47CisJY2hhciAqIHAgPSBwdltTTkRfTU9WXS5zdmFsOworI2lmZGVmIENL X0xPR0lOCisJaWYgKGlzZ3Vlc3QpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIC9NT1ZFLVRPIG5v dCBhdmFpbGFibGUgdG8gZ3Vlc3RzXG4iKTsKKwkgICAgeCA9IC05OworCSAgICBnb3RvIHhzZW5k eDsKKwl9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKwlsZW4gPSBzdHJsZW4ocCk7CisJaWYgKCFp c2RpcihwKSkgewkJLyogQ2hlY2sgZGlyZWN0b3J5ICovCisjaWZkZWYgQ0tfTUtESVIKKwkgICAg Y2hhciAqIHMgPSBOVUxMOworCSAgICBzID0gKGNoYXIgKiltYWxsb2MobGVuICsgNCk7CisJICAg IGlmIChzKSB7CisJCXN0cmNweShzLHApOwkJLyogc2FmZSAqLworI2lmZGVmIGRhdGFnZW5lcmFs CisJCWlmIChzW2xlbi0xXSAhPSAnOicpIHsgc1tsZW4rK10gPSAnOic7IHNbbGVuXSA9IE5VTDsg fQorI2Vsc2UKKwkJaWYgKHNbbGVuLTFdICE9ICcvJykgeyBzW2xlbisrXSA9ICcvJzsgc1tsZW5d ID0gTlVMOyB9CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKwkJc1tsZW4rK10gPSAnWCc7CisJ CXNbbGVuXSA9IE5VTDsKKwkJeCA9IHpta2RpcihzKTsKKwkJZnJlZShzKTsKKwkJaWYgKHggPCAw KSB7CisJCSAgICBwcmludGYoIj9DYW4ndCBjcmVhdGUgXCIlc1wiXG4iLHApOworCQkgICAgeCA9 IC05OworCQkgICAgZ290byB4c2VuZHg7CisJCX0KKwkgICAgfQorI2Vsc2UKKwkgICAgcHJpbnRm KCI/RGlyZWN0b3J5IFwiJXNcIiBub3QgZm91bmRcbiIscCk7CisJICAgIHggPSAtOTsKKwkgICAg Z290byB4c2VuZHg7CisjZW5kaWYgLyogQ0tfTUtESVIgKi8KKwl9CisgICAgICAgIHpmbnFmcChw LExJTkJVRlNJWix0bXBidWYpOworCW1ha2VzdHIoJnNuZF9tb3ZlLHRtcGJ1Zik7CisgICAgfQor I2VuZGlmIC8qIENLX1RNUERJUiAqLworCisgICAgaWYgKHB2W1NORF9SRU5dLml2YWwgPiAwKSB7 CQkvKiAvUkVOQU1FICovCisJY2hhciAqIHAgPSBwdltTTkRfUkVOXS5zdmFsOworI2lmZGVmIENL X0xPR0lOCisJaWYgKGlzZ3Vlc3QpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIC9SRU5BTUUtVE8g bm90IGF2YWlsYWJsZSB0byBndWVzdHNcbiIpOworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNl bmR4OworCX0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworCWlmICghcCkgcCA9ICIiOworCWlmICgh KnApIHsKKwkgICAgcHJpbnRmKCI/TmV3IG5hbWUgcmVxdWlyZWQgZm9yIC9SRU5BTUVcbiIpOwor CSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNlbmR4OworCX0KKwlwID0gYnJzdHJpcChwKTsKKyNp Zm5kZWYgTk9TUEwKKyAgICAvKiBJZiBuYW1lIGdpdmVuIGlzIHdpbGQsIHJlbmFtZSBzdHJpbmcg bXVzdCBjb250YWluIHZhcmlhYmxlcyAqLworCWlmICh3aWxkKSB7CisJICAgIGNoYXIgKiBzID0g dG1wYnVmOworCSAgICB4ID0gVE1QQlVGU0laOworCSAgICB6enN0cmluZyhwLCZzLCZ4KTsKKwkg ICAgaWYgKCFzdHJjbXAodG1wYnVmLHApKSB7CisJCXByaW50ZigKKyAgICAiPy9SRU5BTUUgZm9y IGZpbGUgZ3JvdXAgbXVzdCBjb250YWluIHZhcmlhYmxlcyBzdWNoIGFzIFxcdihmaWxlbmFtZSlc biIKKwkJICAgICAgICk7CisJCXggPSAtOTsKKwkJZ290byB4c2VuZHg7CisJICAgIH0KKwl9Cisj ZW5kaWYgLyogTk9TUEwgKi8KKwltYWtlc3RyKCZzbmRfcmVuYW1lLHApOworICAgIH0KKworLyog SGFuZGxlIC9SRUNPVkVSIGFuZCAvU1RBUlQgKi8KKworI2lmZGVmIENLX1JFU0VORAorICAgIGlm IChwdltTTkRfUkVTXS5pdmFsID4gMCAmJiBiaW5hcnkgIT0gWFlGVF9CICYmICFmaWxlcGVlawor I2lmZGVmIFBBVFRFUk5TCisJJiYgIXBhdHRlcm5zCisjZWxzZQorI2lmZGVmIFZNUworLyogVk1T IHNldHMgdGV4dC9iaW5hcnkgYXV0b21hdGljYWxseSBsYXRlciB3aGVuIGl0IG9wZW5zIHRoZSBm aWxlICovCisJJiYgMAorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFBBVFRFUk5TICovCisJ KSB7CisJcHJpbnRmKCI/U29ycnksIC9CSU5BUlkgcmVxdWlyZWRcbiIpOworCXggPSAtOTsKKwln b3RvIHhzZW5keDsKKyAgICB9CisgICAgaWYgKHB2W1NORF9TVEFdLnd2YWwgPiAwKSB7CQkvKiAv U1RBUlQgKi8KKwlpZiAod2lsZCkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgd2lsZGNhcmRzIG5v dCBwZXJtaXR0ZWQgd2l0aCAvU1RBUlRcbiIpOworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNl bmR4OworCX0KKwlpZiAoc2l6ZW9mKGludCkgPCA0KSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCB0 aGlzIGNvbW1hbmQgbmVlZHMgYXQgbGVhc3QgMzItYml0IGludGVnZXJzXG4iKTsKKwkgICAgeCA9 IC05OworCSAgICBnb3RvIHhzZW5keDsKKwl9CisjaWZkZWYgQ0tfWFlaCisJaWYgKHByb3RvY29s ICE9IFBST1RPX0spIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIFNFTkQgL1NUQVJUIHdvcmtzIG9u bHkgd2l0aCBLZXJtaXQgcHJvdG9jb2xcbiIpOworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNl bmR4OworCX0KKyNlbmRpZiAvKiBDS19YWVogKi8KKyAgICB9CisjaWZkZWYgQ0tfWFlaCisgICAg aWYgKHB2W1NORF9SRVNdLml2YWwgPiAwKSB7CisJaWYgKHByb3RvY29sICE9IFBST1RPX0sgJiYg cHJvdG9jb2wgIT0gUFJPVE9fWikgeworCSAgICBwcmludGYoCisgICAgIlNvcnJ5LCAvUkVDT1ZF UiBpcyBwb3NzaWJsZSBvbmx5IHdpdGggS2VybWl0IG9yIFpNT0RFTSBwcm90b2NvbFxuIgorCQkg ICApOworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNlbmR4OworCX0KKyAgICB9CisjZW5kaWYg LyogQ0tfWFlaICovCisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisKKyAgICBpZiAocHJvdG9jb2wg PT0gUFJPVE9fSykgeworCWlmICgocHZbU05EX01BSV0uaXZhbCA+IDAgfHwJLyogTUFJTCAqLwor CSAgICAgcHZbU05EX1BSSV0uaXZhbCA+IDAgfHwJLyogUFJJTlQgKi8KKwkgICAgIHB2W1NORF9S RVNdLml2YWwgPiAwCS8qIFJFU0VORCAqLworCSAgICAgKSAmJgorCSAgICAoIWF0ZGlzbyB8fCAh YXRjYXByKSkgewkvKiBEaXNwb3NpdGlvbiBhdHRyaWJ1dGUgb2ZmPyAqLworCSAgICBwcmludGYo Ij9Tb3JyeSwgQVRUUklCVVRFIERJU1BPU0lUSU9OIG11c3QgYmUgT05cbiIpOworCSAgICB4ID0g LTk7CisJICAgIGdvdG8geHNlbmR4OworCX0KKyAgICB9CisKKyNpZmRlZiBDS19YWVoKKyAgICBp ZiAod2lsZCAmJiAocHJvdG9jb2wgPT0gUFJPVE9fWCB8fCBwcm90b2NvbCA9PSBQUk9UT19YQykp IHsKKwlwcmludGYoCisiU29ycnksIHlvdSBjYW4gb25seSBzZW5kIG9uZSBmaWxlIGF0IGEgdGlt ZSB3aXRoIFhNT0RFTSBwcm90b2NvbFxuIgorCSAgICAgICApOworCXggPSAtOTsKKwlnb3RvIHhz ZW5keDsKKyAgICB9CisjZW5kaWYgLyogQ0tfWFlaICovCisKKyAgICBpZiAoIWNvbmZpcm1lZCkg ewkJCS8qIENSIG5vdCB0eXBlZCB5ZXQsIGdldCBtb3JlIGZpZWxkcyAqLworCWNoYXIgKm07CisJ aWYgKG1saXN0KSB7CQkJLyogTVNFTkQgb3IgTU1PVkUgKi8KKwkgICAgbmZpbHMgPSAwOwkJCS8q IFdlIGFscmVhZHkgaGF2ZSB0aGUgZmlyc3Qgb25lICovCisjaWZuZGVmIE5PTVNFTkQKKwkgICAg bXNmaWxlc1tuZmlscysrXSA9IGxpbmU7CS8qIFN0b3JlIHBvaW50ZXIgKi8KKwkgICAgbHAgPSBs aW5lICsgKGludClzdHJsZW4obGluZSkgKyAxOyAvKiBQb2ludCBwYXN0IGl0ICovCisJICAgIGRl YnVnKEYxMTEsInhzZW5kIG1zZW5kIixtc2ZpbGVzW25maWxzLTFdLG5maWxzLTEpOworCSAgICB3 aGlsZSAoMSkgewkJCS8qIEdldCBtb3JlIGZpbGVuYW1lcyAqLworCQljaGFyICpwOworCQlpZiAo KHggPSBjbWlmaSgiTmFtZXMgb2YgZmlsZXMgdG8gc2VuZCwgc2VwYXJhdGVkIGJ5IHNwYWNlcyIs CisJCQkgICAgICAgIiIsICZzLCZ5LHh4c3RyaW5nKSkgPCAwKSB7CisJCSAgICBpZiAoeCAhPSAt MykKKwkJICAgICAgZ290byB4c2VuZHg7CisJCSAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisJ CSAgICAgIGdvdG8geHNlbmR4OworCQkgICAgYnJlYWs7CisJCX0KKwkJbXNmaWxlc1tuZmlscysr XSA9IGxwOwkvKiBHb3Qgb25lLCBjb3VudCBpdCwgcG9pbnQgdG8gaXQsICovCisJCXAgPSBscDsJ CQkvKiByZW1lbWJlciBwb2ludGVyLCAqLworCQl3aGlsZSAoKCpscCsrID0gKnMrKykpCS8qIGFu ZCBjb3B5IGl0IGludG8gYnVmZmVyICovCisJCSAgaWYgKGxwID4gKGxpbmUgKyBMSU5CVUZTSVop KSB7IC8qIEF2b2lkIG1lbW9yeSBsZWFrICovCisJCSAgICAgIHByaW50ZigiP01TRU5EIGxpc3Qg dG9vIGxvbmdcbiIpOworCQkgICAgICBsaW5lWzBdID0gTlVMOworCQkgICAgICB4ID0gLTk7CisJ CSAgICAgIGdvdG8geHNlbmR4OworCQkgIH0KKwkJZGVidWcoRjExMSwieHNlbmQgbXNlbmQiLG1z ZmlsZXNbbmZpbHMtMV0sbmZpbHMtMSk7CisJCWlmIChuZmlscyA9PSAxKSBmc3BlY1swXSA9IE5V TDsgLyogVGFrZSBjYXJlIG9mIFx2KGZpbGVzcGVjKSAqLworI2lmZGVmIFpGTlFGUAorCQl6Zm5x ZnAocCxUTVBCVUZTSVosdG1wYnVmKTsKKwkJcCA9IHRtcGJ1ZjsKKyNlbmRpZiAvKiBaRk5RRlAg Ki8KKwkJaWYgKCgoaW50KXN0cmxlbihmc3BlYykgKyAoaW50KXN0cmxlbihwKSArIDEpIDwgZnNw ZWNsZW4pIHsKKwkJICAgIHN0cmNhdChmc3BlYyxwKTsJLyogc2FmZSAqLworCQkgICAgc3RyY2F0 KGZzcGVjLCIgIik7CS8qIHNhZmUgKi8KKwkJfSBlbHNlCisjaWZkZWYgQ09NTUVOVAorCQkgIHBy aW50ZigiV0FSTklORyAtIFxcdihmaWxlc3BlYykgYnVmZmVyIG92ZXJmbG93XG4iKTsKKyNlbHNl CisJCSAgZGVidWcoRjEwMSwiZG94c2VuZCBmaWxlc3BlYyBidWZmZXIgb3ZlcmZsb3ciLCIiLDAp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgfQorI2VuZGlmIC8qIE5PTVNFTkQgKi8KKwl9 IGVsc2UgewkJCS8qIFJlZ3VsYXIgU0VORCAqLworCSAgICBjaGFyICpwOyBpbnQgeTsKKwkgICAg bmZpbHMgPSAtMTsKKwkgICAgaWYgKHB2W1NORF9NQUldLml2YWwgPiAwKQorCSAgICAgIG0gPSAo cHZbU05EX01BSV0uc3ZhbCkgPworCQkiZS1tYWlsIGFkZHJlc3MgKG9wdGlvbmFsKSIgOgorCQkg ICJlLW1haWwgYWRkcmVzcyAocmVxdWlyZWQpIjsKKwkgICAgZWxzZSBpZiAocHZbU05EX1BSSV0u aXZhbCA+IDApCisJICAgICAgbSA9ICJwcmludGVyIG9wdGlvbnMgKG9wdGlvbmFsKSI7CisJICAg IGVsc2UgaWYgKHdpbGQpCisJICAgICAgbSA9CisiXG5PcHRpb25hbCBhcy1uYW1lIHRlbXBsYXRl IGNvbnRhaW5pbmcgcmVwbGFjZW1lbnQgdmFyaWFibGVzIFwKK2xpa2UgXFx2KGZpbGVuYW1lKSI7 CisJICAgIGVsc2UKKwkgICAgICBtID0gIk9wdGlvbmFsIG5hbWUgdG8gc2VuZCBpdCB3aXRoIjsK KwkgICAgaWYgKCh4ID0gY210eHQobSwiIiwmcCxOVUxMKSkgPCAwKQorCSAgICAgIGdvdG8geHNl bmR4OworCSAgICBpZiAoIXApIHAgPSAiIjsKKwkgICAgaWYgKCpwKSB7CQkJLyogSWYgc29tZSB0 ZXh0IHdhcyBnaXZlbi4uLiAqLworCQlwID0gYnJzdHJpcChwKTsJCS8qIFJlcGxhY2UgL0FTLU5B TUU6IHZhbHVlIGlmIGFueSAqLworCQlpZiAoKHkgPSBzdHJsZW4ocCkpID4gMCkgeworICAgICAg ICAgICAgICAgICAgICBpZiAocHZbU05EX01BSV0uaXZhbCA+IDApIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJnB2W1NORF9NQUldLnN2YWwsIHApOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworCQkJaWYgKHB2W1NORF9BU05dLnN2YWwpIGZyZWUocHZbU05EX0FTTl0u c3ZhbCk7CisJCQlwdltTTkRfQVNOXS5zdmFsID0gbWFsbG9jKHkrMSk7CisJCQlpZiAocHZbU05E X0FTTl0uc3ZhbCkgeworCQkJICAgIHN0cmNweShwdltTTkRfQVNOXS5zdmFsLHApOwkvKiBzYWZl ICovCisJCQkgICAgcHZbU05EX0FTTl0uaXZhbCA9IDE7CisJCQl9CisJCSAgICB9CisJCX0KKwkg ICAgfQorCX0KKyAgICB9CisgICAgLyogU2V0IGNtYXJnMiBmcm9tIGFzLW5hbWUsIGhvd2V2ZXIg d2UgZ290IGl0LiAqLworCisgICAgaWYgKHB2W1NORF9BU05dLml2YWwgPiAwICYmIHB2W1NORF9B U05dLnN2YWwgJiYgISpjbWFyZzIpIHsKKwlpbnQgeDsKKwl4ID0gc3RybGVuKGxpbmUpOworCWNr c3RybmNweShsaW5lK3grMixwdltTTkRfQVNOXS5zdmFsLExJTkJVRlNJWi14LTEpOworCWNtYXJn MiA9IGxpbmUreCsyOworCWRlYnVnKEYxMTAsImRveHNlbmQgY21hcmcyIixjbWFyZzIsMCk7Cisg ICAgfQorCisjaWZuZGVmIE5PRlJJTExTCisgICAgaWYgKChwdltTTkRfTUFJXS5pdmFsID4gMCkg JiYgKHB2W1NORF9QUkldLml2YWwgPiAwKSkgeworCXByaW50ZigiU29ycnksIC9NQUlMIGFuZCAv UFJJTlQgYXJlIGNvbmZsaWN0aW5nIG9wdGlvbnNcbiIpOworCXggPSAtOTsKKwlnb3RvIHhzZW5k eDsKKyAgICB9CisgICAgbiA9IDA7CQkJCS8qIC9NQUlMIG9yIC9QUklOVD8gKi8KKyAgICBpZiAo cHZbU05EX01BSV0uaXZhbCA+IDApCisgICAgICBuID0gU05EX01BSTsKKyAgICBlbHNlIGlmIChw dltTTkRfUFJJXS5pdmFsID4gMCkKKyAgICAgIG4gPSBTTkRfUFJJOworICAgIGlmIChuKSB7CQkJ CS8qIFllcy4uLiAqLworI2lmZGVmIERFQlVHCisJY2hhciAqIHA7CisJaWYgKG4gPT0gU05EX01B SSkKKwkgIHAgPSAiL01BSUwiOworCWVsc2UKKwkgIHAgPSAiL1BSSU5UIjsKKwlkZWJ1ZyhGMTEx LCJ4c2VuZCIscCxuKTsKKyNlbmRpZiAvKiBERUJVRyAqLworI2lmZGVmIENLX1hZWgorCWlmIChw cm90b2NvbCAhPSBQUk9UT19LKSB7CisJICAgIHByaW50ZigiU29ycnksICVzIGF2YWlsYWJsZSBv bmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iLAorCQkgICAobiA9PSBTTkRfTUFJKSA/ICIvTUFJ TCIgOiAiL1BSSU5UIgorCQkgICApOworCSAgICB4ID0gLTk7CisJICAgIGdvdG8geHNlbmR4Owor CX0KKyNlbmRpZiAvKiBDS19YWVogKi8KKwlkZWJ1ZyhGMTAxLCJ4c2VuZCBwcmludC9tYWlsIHdp bGQiLCIiLHdpbGQpOworCSpvcHRidWYgPSBOVUw7CQkJLyogV2lwZSBvdXQgYW55IG9sZCBvcHRp b25zICovCisJcyA9IHB2W25dLnN2YWw7CQkJLyogbWFpbCBhZGRyZXNzIG9yIHByaW50IHN3aXRj aCB2YWwgKi8KKwlpZiAoIXMpIHMgPSAiIjsKKwlkZWJ1ZyhGMTEwLCJkb3hzZW5kIG1haWwgYWRk cmVzcyBvciBwcmludGVyIG9wdGlvbnMiLHMsMCk7CisJaWYgKG4gPT0gU05EX01BSSAmJiAhKnMp IHsKKwkgICAgcHJpbnRmKCI/RS1tYWlsIGFkZHJlc3MgcmVxdWlyZWRcbiIpOworCSAgICB4ID0g LTk7CisJICAgIGdvdG8geHNlbmR4OworCX0gZWxzZSBpZiAoKGludClzdHJsZW4ocykgPiA5NCkg eyAvKiBFbnN1cmUgbGVnYWwgc2l6ZSAqLworCSAgICBwcmludGYoIj8lcyB0b28gbG9uZ1xuIiwK KwkJICAgKG4gPT0gU05EX01BSSkgPworCQkgICAiRS1tYWlsIGFkZHJlc3MiIDoKKwkJICAgIlBy aW50IG9wdGlvbiBzdHJpbmciCisJCSAgICk7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4c2Vu ZHg7CisJfQorCWNrc3RybmNweShvcHRidWYscyxPUFRCVUZMRU4pOwkvKiBPSywgY29weSB0byBv cHRpb24gYnVmZmVyICovCisJY21hcmcgPSBsaW5lOwkJCS8qIEZpbGUgdG8gc2VuZCAqLworCWlm IChuID09IFNORF9NQUkpIHsKKwkgICAgZGVidWcoRjExMCwieHNlbmQgbWFpbGluZyIsY21hcmcs MCk7CisJICAgIGRlYnVnKEYxMTAsInhzZW5kIGFkZHJlc3M6IixvcHRidWYsMCk7CisJICAgIHJt YWlsZiA9IDE7CisJfSBlbHNlIHsKKwkgICAgZGVidWcoRjExMCwieHNlbmQgcHJpbnRpbmciLGNt YXJnLDApOworCSAgICBkZWJ1ZyhGMTEwLCJ4c2VuZCBvcHRpb25zIixvcHRidWYsMCk7CisJICAg IHJwcmludGYgPSAxOworCX0KKyAgICB9CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworI2lmZGVm IENBTElCUkFURQorICAgIGlmIChwdltTTkRfQ0FMXS53dmFsID4gMCkgewkJLyogSGFuZGxlIC9D QUxJQlJBVEUgKi8KKwlpZiAoY29uZmlybWVkKSB7CisJICAgIGNhbGlicmF0ZSA9IHB2W1NORF9D QUxdLnd2YWwgKiAoQ0tfT0ZGX1QpMTAyNDsKKwkgICAgc25kc3JjID0gLTk7CisJICAgIG5maWxz ID0gMTsKKwkgICAgd2lsZCA9IDA7CisjaWZuZGVmIE5PTVNFTkQKKwkgICAgYWRkbGlzdCA9IDA7 CisjZW5kaWYgLyogTk9NU0VORCAqLworCSAgICBja3N0cm5jcHkobGluZSwiQ0FMSUJSQVRJT04i LExJTkJVRlNJWik7CisJICAgIHMgPSBjbWFyZyA9IGxpbmU7CisJICAgIGlmICghY21hcmcyKSBj bWFyZzIgPSAiIjsKKwkgICAgZGVidWcoRjExMCwiZG94c2VuZCBjbWFyZzIgY2FsaWJyYXRlIixj bWFyZzIsMCk7CisJfSBlbHNlIGlmIChsaW5lWzBdKSB7CisJICAgIGNhbGlicmF0ZSA9IDA7CisJ ICAgIHB2W1NORF9DQUxdLml2YWwgPSAwOworCSAgICBwdltTTkRfQ0FMXS53dmFsID0gMDsKKwl9 CisgICAgfQorI2VuZGlmIC8qIENBTElCUkFURSAqLworCisgICAgaWYgKHB2W1NORF9GSUxdLml2 YWwgPiAwKSB7CisJaWYgKGNvbmZpcm1lZCAmJiAhY2FsaWJyYXRlKSB7CisJICAgIGlmICh6b3Bl bmkoWk1GSUxFLHB2W1NORF9GSUxdLnN2YWwpIDwgMSkgeworCQlkZWJ1ZyhGMTEwLCJ4c2VuZCBj YW4ndCBvcGVuIixwdltTTkRfRklMXS5zdmFsLDApOworCQlwcmludGYoIj9GYWlsdXJlIHRvIG9w ZW4gJXNcbiIsZmlsZWZpbGUpOworCQl4ID0gLTk7CisJCWdvdG8geHNlbmR4OworCSAgICB9CisJ ICAgIG1ha2VzdHIoJmZpbGVmaWxlLHB2W1NORF9GSUxdLnN2YWwpOyAvKiBPcGVuLCByZW1lbWJl ciBuYW1lICovCisJICAgIGRlYnVnKEYxMTAsInhzZW5kIG9wZW5lZCIsZmlsZWZpbGUsMCk7CisJ ICAgIHdpbGQgPSAxOworCX0KKyAgICB9CisKKyAgICAvKiBTRU5EIGFsb25lLi4uICovCisKKyNp Zm5kZWYgTk9TUEwKKyAgICBpZiAoY29uZmlybWVkICYmIHB2W1NORF9BUlJdLml2YWwgPiAwKSB7 CisJaWYgKCEqY21hcmcyKSB7CisJICAgIHNuZHhuYW1bN10gPSAoY2hhcikoKGFycmF5eCA9PSAx KSA/IDY0IDogYXJyYXl4ICsgQVJSQVlCQVNFKTsKKwkgICAgY21hcmcyID0gc25keG5hbTsKKwl9 CisJY21hcmcgPSAiIjsKKwlnb3RvIHNlbmRlbmQ7CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICov CisKKyAgICBpZiAoY29uZmlybWVkICYmICFsaW5lWzBdICYmICFmaWxlZmlsZSAmJiAhY2FsaWJy YXRlKSB7CisjaWZuZGVmIE5PTVNFTkQKKwlpZiAoZmlsZWhlYWQpIHsJCQkvKiBPSyBpZiB3ZSBo YXZlIGEgU0VORC1MSVNUICovCisJICAgIG5maWxzID0gZmlsZXNpbmxpc3Q7CisJICAgIHNuZHNy YyA9IG5maWxzOwkJLyogTGlrZSBNU0VORCAqLworCSAgICBhZGRsaXN0ID0gMTsJCS8qIEJ1dCB1 c2luZyBhIGRpZmZlcmVudCBsaXN0Li4uICovCisJICAgIGZpbGVuZXh0ID0gZmlsZWhlYWQ7CisJ ICAgIGdvdG8gc2VuZGVuZDsKKwl9CisjZW5kaWYgLyogTk9NU0VORCAqLworCXByaW50ZigiP0Zp bGVuYW1lIHJlcXVpcmVkIGJ1dCBub3QgZ2l2ZW5cbiIpOworCXggPSAtOTsKKwlnb3RvIHhzZW5k eDsKKyAgICB9CisKKyAgICAvKiBOb3Qgc2VuZC1saXN0IG9yIGFycmF5ICovCisKKyNpZm5kZWYg Tk9NU0VORAorICAgIGFkZGxpc3QgPSAwOwkJCS8qIERvbid0IHVzZSBTRU5ELUxJU1QuICovCisg ICAgZmlsZW5leHQgPSBOVUxMOworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworICAgIGlmIChtbGlz dCkgewkJCS8qIE1TRU5EIG9yIE1NT1ZFICovCisjaWZuZGVmIE5PTVNFTkQKKwljbWxpc3QgPSBt c2ZpbGVzOwkJLyogTGlzdCBvZiBmaWxlcyB0byBzZW5kICovCisJc25kc3JjID0gbmZpbHM7CisJ Y21hcmcyID0gIiI7CisJc2VuZHN0YXJ0ID0gKENLX09GRl9UKTA7CisjZW5kaWYgLyogTk9NU0VO RCAqLworI2lmZGVmIFBJUEVTRU5ECisJcGlwZXNlbmQgPSAwOworI2VuZGlmIC8qIFBJUEVTRU5E ICovCisgICAgfSBlbHNlIGlmIChmaWxlZmlsZSkgewkJLyogRmlsZSBjb250YWlucyBsaXN0IG9m IGZpbGVuYW1lcyAqLworCXMgPSAiIjsKKwljbWFyZyA9ICIiOworCWNtYXJnMiA9ICIiOworCWxp bmVbMF0gPSBOVUw7CisJbmZpbHMgPSAxOworCXNuZHNyYyA9IDE7CisKKyAgICB9IGVsc2UgaWYg KCFjYWxpYnJhdGUgJiYgcHZbU05EX0FSUl0uaXZhbCA8IDEgJiYgcHZbU05EX0NNRF0uaXZhbCA8 IDEpIHsKKworCW5maWxzID0gc25kc3JjID0gLTE7CS8qIE5vdCBNU0VORCwgTU1PVkUsIC9MSVNU LCBvciAvQVJSQVkgKi8KKwlpZiAoCQkJCS8qIG9yIC9DT01NQU5EICovCisKKyNpZm5kZWYgTk9G UklMTFMKKwkgICAgIXJtYWlsZiAmJiAhcnByaW50ZgkJLyogTm90IE1BSUwgb3IgUFJJTlQgKi8K KyNlbHNlCisJICAgIDEKKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCSAgICApIHsKKwkgICAgQ0tf T0ZGX1QgeSA9IChDS19PRkZfVCkxOworCSAgICBpZiAoIXdpbGQpCisJICAgICAgeSA9IHpjaGtp KHMpOworCSAgICBpZiAoeSA8IChDS19PRkZfVCkwKSB7CisJCXByaW50ZigiP1JlYWQgYWNjZXNz IGRlbmllZCAtIFwiJXNcIlxuIiwgcyk7CisJCXggPSAtOTsKKwkJZ290byB4c2VuZHg7CisJICAg IH0KKwkgICAgaWYgKHMgIT0gbGluZSkJCS8qIFdlIG1pZ2h0IGFscmVhZHkgaGF2ZSBkb25lIHRo aXMuICovCisJICAgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOyAvKiBDb3B5IG9mIHN0 cmluZyBqdXN0IHBhcnNlZC4gKi8KKwkgICAgZWxzZQorCSAgICAgIGRlYnVnKEYxMTAsImRveHNl bmQgbGluZT1zIixsaW5lLDApOworCSAgICBjbWFyZyA9IGxpbmU7CQkvKiBGaWxlIHRvIHNlbmQg Ki8KKwl9CisJemZucWZwKGNtYXJnLGZzcGVjbGVuLGZzcGVjKTsKKyAgICB9CisgICAgaWYgKCFt bGlzdCkgewkJCS8qIEZvciBhbGwgYnV0IE1TRU5ELi4uICovCisjaWZkZWYgUElQRVNFTkQKKwlp ZiAocHZbU05EX0NNRF0uaXZhbCA+IDApCS8qIC9DT01NQU5EIHNldHMgcGlwZXNlbmQgZmxhZyAq LworCSAgcGlwZXNlbmQgPSAxOworCWRlYnVnKEYxMDEsInhzZW5kIC9DT01NQU5EIHBpcGVzZW5k IiwiIixwaXBlc2VuZCk7CisJaWYgKHBpcGVzZW5kICYmIGZpbGVmaWxlKSB7CisJICAgIHByaW50 ZigiP0ludmFsaWQgc3dpdGNoIGNvbWJpbmF0aW9uXG4iKTsKKwkgICAgeCA9IC05OworCSAgICBn b3RvIHhzZW5keDsKKwl9CisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmbmRlZiBOT1NQTAor ICAgIC8qIElmIGFzLW5hbWUgZ2l2ZW4gYW5kIGZpbGVzcGVjIGlzIHdpbGQsIGFzLW5hbWUgbXVz dCBjb250YWluIHZhcmlhYmxlcyAqLworCWRlYnVnKEYxMTEsImRveHNlbmQgY21hcmcyIHdpbGQi LGNtYXJnMix3aWxkKTsKKwlpZiAod2lsZCAmJiAqY21hcmcyKSB7CisJICAgIGNoYXIgKiBzID0g dG1wYnVmOworCSAgICB4ID0gVE1QQlVGU0laOworCSAgICB6enN0cmluZyhjbWFyZzIsJnMsJngp OworCSAgICBpZiAoIXN0cmNtcCh0bXBidWYsY21hcmcyKSkgeworCQlwcmludGYoCisgICAgIj9B cy1uYW1lIGZvciBmaWxlIGdyb3VwIG11c3QgY29udGFpbiB2YXJpYWJsZXMgc3VjaCBhcyBcXHYo ZmlsZW5hbWUpXG4iCisJCSAgICAgICApOworCQl4ID0gLTk7CisJCWdvdG8geHNlbmR4OworCSAg ICB9CisJfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICAvKiBTdHJpcCBicmFjZXMgZnJvbSBh cy1uYW1lICovCisJZGVidWcoRjExMCwieHNlbmQgY21hcmcyIGJlZm9yZSBzdHJpcHBpbmciLGNt YXJnMiwwKTsKKwljbWFyZzIgPSBicnN0cmlwKGNtYXJnMik7CisJZGVidWcoRjExMCwieHNlbmQg ZmlsZW5hbWUiLGNtYXJnLDApOworCWRlYnVnKEYxMTAsInhzZW5kIGFzLW5hbWUiLGNtYXJnMiww KTsKKworICAgIC8qIENvcHkgYXMtbmFtZSB0byBhIHNhZmUgcGxhY2UgKi8KKworCWlmIChhc25i dWYpIHsKKwkgICAgZnJlZShhc25idWYpOworCSAgICBhc25idWYgPSBOVUxMOworCX0KKwlpZiAo KHkgPSBzdHJsZW4oY21hcmcyKSkgPiAwKSB7CisJICAgIGFzbmJ1ZiA9IChjaGFyICopIG1hbGxv Yyh5ICsgMSk7CisJICAgIGlmIChhc25idWYpIHsKKwkJc3RyY3B5KGFzbmJ1ZixjbWFyZzIpOwkv KiBzYWZlICovCisJCWNtYXJnMiA9IGFzbmJ1ZjsKKwkgICAgfSBlbHNlIGNtYXJnMiA9ICIiOwor CX0KKworI2lmZGVmIENLX1JFU0VORAorCWRlYnVnKEYxMTEsInhzZW5kIHB2W1NORF9TVEFdLml2 YWwiLCIiLHB2W1NORF9TVEFdLml2YWwpOworCWlmIChwdltTTkRfU1RBXS53dmFsID4gKENLX09G Rl9UKS0xKSB7IC8qIC9TVEFSVCBwb3NpdGlvbiAqLworCSAgICBpZiAod2lsZCkgeworCQlwcmlu dGYoIj8vU1RBUlRJTkctQVQgbWF5IG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgZmlsZXMuXG4i KTsKKwkJeCA9IC05OworCQlnb3RvIHhzZW5keDsKKwkgICAgfSBlbHNlCisJICAgICAgc2VuZHN0 YXJ0ID0gcHZbU05EX1NUQV0ud3ZhbDsKKwl9IGVsc2UKKwkgIHNlbmRzdGFydCA9IChDS19PRkZf VCkwOworCWRlYnVnKEYxMDEsInhzZW5kIC9TVEFSVElORyIsIiIsc2VuZHN0YXJ0KTsKKyNlbmRp ZiAvKiBDS19SRVNFTkQgKi8KKyAgICB9CisKK3NlbmRlbmQ6CQkJCS8qIENvbW1vbiBzdWNjZXNz ZnVsIGV4aXQgKi8KKyAgICBtb3ZpbmcgPSAwOworICAgIGlmIChwdltTTkRfU0hIXS5pdmFsID4g MCkgewkJLyogU0VORCAvUVVJRVQuLi4gKi8KKwlnX2Rpc3BsYSA9IGZkaXNwbGE7CisJZmRpc3Bs YSA9IDA7CisJZGVidWcoRjEwMSwieHNlbmQgZGlzcGxheSIsIiIsZmRpc3BsYSk7CisgICAgfQor CisjaWZuZGVmIE5PU1BMCQkJCS8qIFNFTkQgL0FSUkFZLi4uICovCisgICAgaWYgKHB2W1NORF9B UlJdLml2YWwgPiAwKSB7CisJaWYgKCFhcCkgeyB4ID0gLTI7IGdvdG8geHNlbmR4OyB9IC8qIChz aG91bGRuJ3QgaGFwcGVuKSAqLworCWlmIChyYW5nZVswXSA9PSAtMSkJCS8qIElmIGxvdyBlbmQg b2YgcmFuZ2Ugbm90IHNwZWNpZmllZCAqLworCSAgcmFuZ2VbMF0gPSAxOwkJCS8qIGRlZmF1bHQg dG8gMSAqLworCWlmIChyYW5nZVsxXSA9PSAtMSkJCS8qIElmIGhpZ2ggbm90IHNwZWNpZmllZCAq LworCSAgcmFuZ2VbMV0gPSBhX2RpbVthcnJheXhdOwkvKiBkZWZhdWx0IHRvIHNpemUgb2YgYXJy YXkgKi8KKwlpZiAoKHJhbmdlWzBdIDwgMCkgfHwJCS8qIENoZWNrIHJhbmdlICovCisJICAgIChy YW5nZVswXSA+IGFfZGltW2FycmF5eF0pIHx8CisJICAgIChyYW5nZVsxXSA8IHJhbmdlWzBdKSB8 fAorCSAgICAocmFuZ2VbMV0gPiBhX2RpbVthcnJheXhdKSkgeworCSAgICBwcmludGYoIj9CYWQg YXJyYXkgcmFuZ2UgLSBbJWQ6JWRdXG4iLHJhbmdlWzBdLHJhbmdlWzFdKTsKKwkgICAgeCA9IC05 OworCSAgICBnb3RvIHhzZW5keDsKKwl9CisJc25kYXJyYXkgPSBhcDsJCQkvKiBBcnJheSBwb2lu dGVyICovCisJc25keGluID0gYXJyYXl4OwkJLyogQXJyYXkgaW5kZXggKi8KKwlzbmR4bG8gPSBy YW5nZVswXTsJCS8qIEFycmF5IHJhbmdlICovCisJc25keGhpID0gcmFuZ2VbMV07CisJc25keG5h bVs3XSA9IChjaGFyKSgoc25keGluID09IDEpID8gNjQgOiBzbmR4aW4gKyBBUlJBWUJBU0UpOwor CisjaWZkZWYgQ09NTUVOVAorCXByaW50ZigiU0VORElORyBGUk9NIEFSUkFZOiAmJWNbXS4uLlxu IiwgLyogZGVidWdnaW5nICovCisJICAgICAgIChzbmR4aW4gPT0gMSkgPyA2NCA6IHNuZHhpbiAr IEFSUkFZQkFTRSk7CisJcHJpbnRmKCJMbz0lZFxuSGk9JWRcbiIsIHNuZHhsbywgc25keGhpKTsK KwlwcmludGYoImNtYXJnPVslc11cbmNtYXJnMj1bJXNdXG4iLCBjbWFyZywgY21hcmcyKTsKKwl3 aGlsZSAoKHggPSBhZ25ieXRlKCkpID4gLTEpIHsKKwkgICAgcHV0Y2hhcigoY2hhcil4KTsKKwl9 CisJcmV0dXJuKDEpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisjZW5kaWYgLyogTk9T UEwgKi8KKworICAgIGlmIChwdltTTkRfQVJSXS5pdmFsIDwgMSkgewkJLyogRmlsZSBzZWxlY3Rp b24gJiBkaXNwb3NpdGlvbi4uLiAqLworCisJaWYgKHB2W1NORF9ERUxdLml2YWwgPiAwKQkvKiAv REVMRVRFIHdhcyBzcGVjaWZpZWQgKi8KKwkgIG1vdmluZyA9IDE7CisJZGVidWcoRjEwMSwieHNl bmQgL0RFTEVURSIsIiIsbW92aW5nKTsKKwlpZiAocHZbU05EX0FGVF0uaXZhbCA+IDApCS8qIENv cHkgU0VORCBjcml0ZXJpYSAqLworCSAgY2tzdHJuY3B5KHNuZGFmdGVyLHB2W1NORF9BRlRdLnN2 YWwsMTkpOworCWlmIChwdltTTkRfQkVGXS5pdmFsID4gMCkKKwkgIGNrc3RybmNweShzbmRiZWZv cmUscHZbU05EX0JFRl0uc3ZhbCwxOSk7CisJaWYgKHB2W1NORF9OQUZdLml2YWwgPiAwKQorCSAg Y2tzdHJuY3B5KHNuZG5hZnRlcixwdltTTkRfTkFGXS5zdmFsLDE5KTsKKwlpZiAocHZbU05EX05C RV0uaXZhbCA+IDApCisJICBja3N0cm5jcHkoc25kbmJlZm9yZSxwdltTTkRfTkJFXS5zdmFsLDE5 KTsKKwlpZiAocHZbU05EX0VYQ10uaXZhbCA+IDApCisJICBtYWtlbGlzdChwdltTTkRfRVhDXS5z dmFsLHNuZGV4Y2VwdCxOU05ERVhDRVBUKTsKKwlpZiAocHZbU05EX1NNQV0ud3ZhbCA+IChDS19P RkZfVCktMSkKKwkgIHNuZHNtYWxsZXIgPSBwdltTTkRfU01BXS53dmFsOworCWlmIChwdltTTkRf TEFSXS53dmFsID4gKENLX09GRl9UKS0xKQorCSAgc25kbGFyZ2VyID0gcHZbU05EX0xBUl0ud3Zh bDsKKwlpZiAocHZbU05EX05BTV0uaXZhbCA+IC0xKSB7CisJICAgIGdfZm5jbnYgPSBmbmNudjsJ CS8qIFNhdmUgZ2xvYmFsIHZhbHVlICovCisJICAgIGZuY252ID0gcHZbU05EX05BTV0uaXZhbDsK KwkgICAgZGVidWcoRjEwMSwieHNlbmQgZm5jbnYiLCIiLGZuY252KTsKKwl9CisJaWYgKHB2W1NO RF9QVEhdLml2YWwgPiAtMSkgeworCSAgICBnX3NwYXRoID0gZm5zcGF0aDsJCS8qIFNhdmUgZ2xv YmFsIHZhbHVlcyAqLworCSAgICBmbnNwYXRoID0gcHZbU05EX1BUSF0uaXZhbDsKKyNpZm5kZWYg TlpMVE9SCisJICAgIGlmIChmbnNwYXRoICE9IFBBVEhfT0ZGKSB7CisJCWdfZm5jbnYgPSBmbmNu djsJLyogQmFkIGJhZC4uLiAqLworCQlmbmNudiA9IFhZRk5fQzsKKwkgICAgfQorI2VuZGlmIC8q IE5aTFRPUiAqLworCSAgICBkZWJ1ZyhGMTAxLCJ4c2VuZCBmbnNwYXRoIiwiIixmbnNwYXRoKTsK KwkgICAgZGVidWcoRjEwMSwieHNlbmQgZm5jbnYiLCIiLGZuY252KTsKKwl9CisgICAgfQorCisj aWZkZWYgUElQRVNFTkQKKyAgICBpZiAocHZbU05EX0ZMVF0uaXZhbCA+IDApIHsKKwltYWtlc3Ry KCZzbmRmaWx0ZXIscHZbU05EX0ZMVF0uc3ZhbCk7CisJZGVidWcoRjExMCwieHNlbmQgL0ZJTFRF UiIsIHNuZGZpbHRlciwgMCk7CisgICAgfQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKyNpZmRl ZiBDS19BUEMKKy8qIE1PVkUgbm90IGFsbG93ZWQgaW4gQVBDcyAqLworICAgIGlmIChtb3Zpbmcg JiYKKwkoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fCBhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkK KwkmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkKKyAgICAgIHJldHVybihzdWNjZXNzID0gMCk7 CisjZW5kaWYgLyogQ0tfQVBDICovCisjaWZkZWYgSUtTX09QVElPTgorICAgIGlmICgKKyNpZmRl ZiBDS19YWVoKKyAgICAgICAgcHJvdG9jb2wgPT0gUFJPVE9fSyAmJgorI2VuZGlmIC8qIENLX1hZ WiAqLworICAgICAgICAhaWtzX3dhaXQoS0VSTUlUX1JFUV9TVEFSVCwxKSkgeworICAgICAgICBw cmludGYoIj9BIEtlcm1pdCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoaXMg Y29tbWFuZC5cbiIpOworICAgICAgICBwcmludGYoIj9TdGFydCBhIFJFQ0VJVkUgY29tbWFuZCB0 byBjb21wbGVtZW50IHRoaXMgY29tbWFuZC5cbiIpOworICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BU SU9OICovCisKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKyAgICBpZiAobW92aW5nICYm IGluc2VydmVyICYmIGlzZ3Vlc3QpIHsKKyAgICAgICAgcHJpbnRmKCI/RmlsZSBkZWxldGlvbiBu b3QgYWxsb3dlZCBmb3IgZ3Vlc3RzLlxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisjZW5kaWYg LyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBzc3RhdGUgPSAncyc7CQkJ LyogU2V0IHN0YXJ0IHN0YXRlIHRvIFNFTkQgKi8KKyAgICBzbmRjbWQgPSAxOworI2lmZGVmIENL X1JFU0VORAorICAgIGlmIChwdltTTkRfUkVTXS5pdmFsID4gMCkJCS8qIFNlbmQgc2VuZG1vZGUg YXBwcm9wcmlhdGVseSAqLworICAgICAgc2VuZG1vZGUgPSBTTV9SRVNFTkQ7CisgICAgZWxzZSBp ZiAocHZbU05EX1NUQV0uaXZhbCA+IDApCisgICAgICBzZW5kbW9kZSA9IFNNX1BTRU5EOworICAg IGVsc2UKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICBpZiAobWxpc3QpCisgICAgICBzZW5k bW9kZSA9IFNNX01TRU5EOworICAgIGVsc2UKKyAgICAgIHNlbmRtb2RlID0gU01fU0VORDsKKyNp ZmRlZiBNQUMKKyAgICB3aGF0ID0gV19TRU5EOworICAgIHNjcmNyZWF0ZSgpOworI2VuZGlmIC8q IE1BQyAqLworICAgIGlmIChsb2NhbCAmJiBwdltTTkRfU0hIXS5pdmFsICE9IDApIHsgLyogSWYg aW4gbG9jYWwgbW9kZSwgKi8KKwlkaXNwbGEgPSAxOwkJCS8qIHR1cm4gb24gZmlsZSB0cmFuc2Zl ciBkaXNwbGF5ICovCisgICAgfQorICAgIHggPSAwOworCisgIHhzZW5keDoJCQkJLyogQ29tbW9u IGV4aXQsIGluY2x1ZGluZyBmYWlsdXJlICovCisgICAgZGVidWcoRjEwMSwiZG94c2VuZCBzbmRz cmMiLCIiLHNuZHNyYyk7CisgICAgZm9yIChpID0gMDsgaSA8PSBTTkRfTUFYOyBpKyspIHsJLyog RnJlZSBtYWxsb2MnZCBtZW1vcnkgKi8KKwlpZiAocHZbaV0uc3ZhbCkKKwkgIGZyZWUocHZbaV0u c3ZhbCk7CisgICAgfQorICAgIHJldHVybih4KTsKK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwor I2lmbmRlZiBOT0xPQ0FMCisvKiAgRCBPIFggQyBPIE4gTiAgLS0gIENPTk5FQ1QgY29tbWFuZCBw YXJzaW5nIHdpdGggc3dpdGNoZXMgKi8KKworI2lmZGVmIFhMSU1JVFMKKyNkZWZpbmUgWExJTU9S VFJJR0dFUgorI2Vsc2UKKyNpZmRlZiBDS19UUklHR0VSCisjZGVmaW5lIFhMSU1PUlRSSUdHRVIK KyNlbmRpZiAvKiBDS19UUklHR0VSICovCisjZW5kaWYgLyogIFhMSU1JVFMgKi8KKworI2lmZGVm IENLVElETEUKK2ludCB0dF9pZGxlbGltaXQgPSAwOwkJCS8qIFRlcm1pbmFsIGlkbGUgbGltaXQg Ki8KK2ludCB0dF9pZGxlYWN0ID0gSURMRV9SRVQ7CQkvKiBUZXJtaW5hbCBpZGxlIGFjdGlvbiAq LworI2VuZGlmIC8qIENLVElETEUgKi8KKworI2lmZGVmIE9TMgkJCQkvKiBLOTUgb25seTogKi8K K2V4dGVybiBpbnQKKyAgdHRfaWRsZXNuZF90bW87CQkJLyogICBJZGxlIGludGVydmFsICovCitp bnQgdHRfdGltZWxpbWl0ID0gMDsJCQkvKiAgIFRpbWUgbGltaXQsIDAgPSBub25lICovCitleHRl cm4gY2hhciAqCQkJCS8qIFBhcnNlIHJlc3VsdHMgLSBzdHJpbmdzOiAqLworICB0dF9pZGxlc25k X3N0cjsJCQkvKiAgIElkbGUgc3RyaW5nICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBD S19UUklHR0VSCitleHRlcm4gY2hhciAqdHRfdHJpZ2dlcltdOworZXh0ZXJuIENIQVIgKnR0X3Ry bWF0Y2hbXTsKK2V4dGVybiBjaGFyICp0cmlnZ2VydmFsOworc3RhdGljIGNoYXIgKmdfdHRfdHJp Z2dlcltUUklHR0VSU107CisjZW5kaWYgLyogQ0tfVFJJR0dFUiAqLworCisjaWZkZWYgT1MyCitz dGF0aWMgaW50IGdfdHRfaWRsZXNuZF90bW8sIGdfdHRfdGltZWxpbWl0OyAvKiBGb3Igc2F2aW5n IGFuZCByZXN0b3JpbmcgKi8KK3N0YXRpYyBpbnQgZ190dF9pZGxlbGltaXQsIGdfdHRfc2F2ZWQg PSAwOworc3RhdGljIGNoYXIgKiBnX3R0X2lkbGVzbmRfc3RyOwkJLyogZ2xvYmFsIHNldHRpbmdz ICovCisjZW5kaWYgLyogT1MyICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5naW50IHB2W0NPTk5f TUFYKzFdOworCitWT0lECityZXNjb25uKCkgeworICAgIGludCBpOworCisjaWZkZWYgT1MyCisg ICAgaWYgKCBnX3R0X3NhdmVkICkgeworICAgICAgICB0dF9pZGxlbGltaXQgICA9IGdfdHRfaWRs ZWxpbWl0OworICAgICAgICB0dF9pZGxlc25kX3RtbyA9IGdfdHRfaWRsZXNuZF90bW87CisgICAg ICAgIHR0X3RpbWVsaW1pdCAgID0gZ190dF90aW1lbGltaXQ7CisgICAgICAgIHR0X2lkbGVzbmRf c3RyID0gZ190dF9pZGxlc25kX3N0cjsKKyAgICAgICAgZ190dF9zYXZlZCA9IDA7CisgICAgfQor I2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tfVFJJR0dFUgorICAgIGZvciAoaSA9IDA7IGkg PCBUUklHR0VSUzsgaSsrKQorICAgICAgdHRfdHJpZ2dlcltpXSA9IGdfdHRfdHJpZ2dlcltpXTsK KyNlbmRpZiAvKiBDS19UUklHR0VSICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IENPTk5fTUFY OyBpKyspIHsJLyogRnJlZSBtYWxsb2MnZCBtZW1vcnkgKi8KKwlpZiAocHZbaV0uc3ZhbCkKKwkg IGZyZWUocHZbaV0uc3ZhbCk7CisgICAgICAgIHB2W2ldLnN2YWwgPSBOVUxMOworICAgIH0KK30K KworaW50Citkb3hjb25uKGN4KSBpbnQgY3g7IHsKKyAgICBpbnQgYywgaSwgbjsJCQkvKiBXb3Jr ZXJzICovCisgICAgaW50IHgsIHk7CisgICAgaW50IGdldHZhbCA9IDA7CQkJLyogV2hldGhlciB0 byBnZXQgc3dpdGNoIHZhbHVlICovCisgICAgaW50IGFzeW5jID0gMDsgICAgICAgICAgICAgICAg ICAgICAgLyogTWFrZSBhbiBhc3luYyBjb25uZWN0ICovCisgICAgc3RydWN0IEZEQiBzdywgY207 CQkJLyogRkRCcyBmb3IgZWFjaCBwYXJzZSBmdW5jdGlvbiAqLworICAgIGV4dGVybiBGSUxFICog dGZpbGVbXTsKKyAgICBleHRlcm4gY2hhciAqIG1hY3BbXTsKKworI2lmZGVmIE9TMgorICAgIGdf dHRfaWRsZXNuZF90bW8gPSB0dF9pZGxlc25kX3RtbzsJLyogU2F2ZSBnbG9iYWwgc2V0dGluZ3Mg Ki8KKyAgICBnX3R0X3RpbWVsaW1pdCAgID0gdHRfdGltZWxpbWl0OworICAgIGdfdHRfaWRsZWxp bWl0ICAgPSB0dF9pZGxlbGltaXQ7CisgICAgZ190dF9pZGxlc25kX3N0ciA9IHR0X2lkbGVzbmRf c3RyOworICAgIGdfdHRfc2F2ZWQgPSAxOworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tf VFJJR0dFUgorICAgIGlmICghdHRfdHJpZ2dlclswXSkgewkJLyogRmlyc3QgaW5pdGlhbGl6YXRp b24gKi8KKwlmb3IgKGkgPSAxOyBpIDwgVFJJR0dFUlM7IGkrKykKKwkgIHR0X3RyaWdnZXJbaV0g PSBOVUxMOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgVFJJR0dFUlM7IGkrKykKKyAgICAg IGdfdHRfdHJpZ2dlcltpXSA9IHR0X3RyaWdnZXJbaV07CisgICAgaWYgKHRyaWdnZXJ2YWwpIHsK KwlmcmVlKHRyaWdnZXJ2YWwpOworCXRyaWdnZXJ2YWwgPSBOVUxMOworICAgIH0KKyNlbmRpZiAv KiBDS19UUklHR0VSICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IENPTk5fTUFYOyBpKyspIHsJ LyogSW5pdGlhbGl6ZSBzd2l0Y2ggdmFsdWVzICovCisJcHZbaV0uc3ZhbCA9IE5VTEw7CQkvKiB0 byBudWxsIHBvaW50ZXJzICovCisJcHZbaV0uaXZhbCA9IC0xOwkJLyogYW5kIC0xIGludCB2YWx1 ZXMgKi8KKwlwdltpXS53dmFsID0gKENLX09GRl9UKS0xOworICAgIH0KKyAgICBpZiAoY3ggPT0g WFhDUSkJCQkvKiBDUSA9PSBDT05ORUNUIC9RVUlFVExZICovCisgICAgICBwdltDT05OX05WXS5p dmFsID0gMTsKKworICAgIC8qIFNldCB1cCBjaGFpbmVkIHBhcnNlIGZ1bmN0aW9ucy4uLiAqLwor CisgICAgY21mZGJpKCZzdywJCQkJLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLwor CSAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLworCSAgICJTd2l0Y2giLAkJCS8qIGhscG1zZyAqLwor CSAgICIiLAkJCQkvKiBkZWZhdWx0ICovCisJICAgIiIsCQkJCS8qIGFkZHRsIHN0cmluZyBkYXRh ICovCisJICAgbmNvbm50YWIsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICov CisJICAgNCwJCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworCSAgIHh4 c3RyaW5nLAkJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKwkgICBjb25udGFiLAkJCS8qIEtl eXdvcmQgdGFibGUgKi8KKwkgICAmY20JCQkJLyogUG9pbnRlciB0byBuZXh0IEZEQiAqLworCSAg ICk7CisgICAgY21mZGJpKCZjbSwJCQkJLyogMm5kIEZEQiAtIENvbmZpcm1hdGlvbiAqLworCSAg IF9DTUNGTSwJCQkvKiBmY29kZSAqLworCSAgICIiLAkJCQkvKiBobHBtc2cgKi8KKwkgICAiIiwJ CQkJLyogZGVmYXVsdCAqLworCSAgICIiLAkJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCSAg IDAsCQkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJICAgMCwJCQkJLyogYWRkdGwgbnVt ZXJpYyBkYXRhIDIgKi8KKwkgICBOVUxMLAorCSAgIE5VTEwsCisJICAgTlVMTAorCSAgICk7CisK KyAgICB3aGlsZSAoMSkgewkJCQkvKiBQYXJzZSAwIG9yIG1vcmUgc3dpdGNoZXMgKi8KKwl4ID0g Y21mZGIoJnN3KTsJCQkvKiBQYXJzZSBzd2l0Y2ggb3IgY29uZmlybWF0aW9uICovCisJZGVidWco RjEwMSwiZG94Y29ubiBjbWZkYiIsIiIseCk7CisJaWYgKHggPCAwKSB7CQkJLyogRXJyb3IgKi8K KwkgICAgaWYgKHggPT0gLTkgfHwgeCA9PSAtMikKKwkgICAgICBwcmludGYoIj9ObyBzd2l0Y2hl cyBtYXRjaCAtIFwiJXNcIlxuIixhdG1idWYpOworCSAgICBnb3RvIHhjb25ueDsJCS8qIG9yIHJl cGFyc2UgbmVlZGVkICovCisJfQorCWlmIChjbXJlc3VsdC5mY29kZSAhPSBfQ01LRVkpCS8qIEJy ZWFrIG91dCBpZiBub3QgYSBzd2l0Y2ggKi8KKwkgIGJyZWFrOworCWMgPSBjbWdicmsoKTsJCQkv KiBHZXQgYnJlYWsgY2hhcmFjdGVyICovCisJZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0n KTsgLyogdG8gc2VlIGhvdyB0aGV5IGVuZGVkIHRoZSBzd2l0Y2ggKi8KKwlpZiAoZ2V0dmFsICYm ICEoY21yZXN1bHQua2ZsYWdzICYgQ01fQVJHKSkgeworCSAgICBwcmludGYoIj9UaGlzIHN3aXRj aCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1xuIik7CisJICAgIHggPSAtOTsKKwkgICAgZ290byB4 Y29ubng7CisJfQorCWlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKwkg ICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKwluID0gY21yZXN1bHQubnJlc3VsdDsJCS8qIE51bWVyaWMgcmVzdWx0 ID0gc3dpdGNoIHZhbHVlICovCisJZGVidWcoRjEwMSwiZG94Y29ubiBzd2l0Y2giLCIiLG4pOwor CisJc3dpdGNoIChuKSB7CQkJLyogUHJvY2VzcyB0aGUgc3dpdGNoICovCisjaWZkZWYgT1MyCisJ ICBjYXNlIENPTk5fQVM6CQkJLyogQXN5bmNocm9ub3VzICovCisgICAgICAgICAgICBwdltDT05O X0FTXS5pdmFsID0gMTsKKyAgICAgICAgICAgIHB2W0NPTk5fU1ldLml2YWwgPSAwOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBDT05OX1NZOiAgICAgICAgICAgICAgICAgLyog U3luY2hyb25vdXMgKi8KKyAgICAgICAgICAgIHB2W0NPTk5fU1ldLml2YWwgPSAxOworICAgICAg ICAgICAgcHZbQ09OTl9BU10uaXZhbCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAv KiBPUzIgKi8KKwkgIGNhc2UgQ09OTl9OVjoJCQkvKiBOb24tdmVyYmFsICovCisJICAgIHB2W25d Lml2YWwgPSAxOworCSAgICBicmVhazsKKyNpZmRlZiBYTElNSVRTCisJICBjYXNlIENPTk5fSUk6 CQkJLyogSWRsZS1pbnRlcnZhbCAqLworCSAgY2FzZSBDT05OX0lMOgkJCS8qIElkbGUtbGltaXQg Ki8KKwkgIGNhc2UgQ09OTl9UTDoJCQkvKiBUaW1lLWxpbWl0ICovCisJICAgIGlmICghZ2V0dmFs KSBicmVhazsKKwkgICAgaWYgKCh4ID0gY21udW0oIlNlY29uZHMiLCIwIiwxMCwmeSx4eHN0cmlu ZykpIDwgMCkKKwkgICAgICBnb3RvIHhjb25ueDsKKwkgICAgcHZbbl0uaXZhbCA9IHk7CisJICAg IGJyZWFrOworCSAgY2FzZSBDT05OX0lTOgkJCS8qIElkbGUtc3RyaW5nICovCisjZW5kaWYgLyog WExJTUlUUyAqLworI2lmZGVmIENLX1RSSUdHRVIKKwkgIGNhc2UgQ09OTl9UUzoJCQkvKiBUcmln Z2VyLXN0cmluZyAqLworI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKyNpZmRlZiBYTElNT1JUUklH R0VSCisJICAgIGlmICghZ2V0dmFsKSBicmVhazsKKwkgICAgaWYgKCh4ID0gY21mbGQoIlN0cmlu ZyAoZW5jbG9zZSBpbiBicmFjZXMgaWYgaXQgY29udGFpbnMgc3BhY2VzKSIsCisJCQkgICAiIiwm cyx4eHN0cmluZykpIDwgMCkgeworCQlpZiAoeCA9PSAtMykgeworCQkgICAgcHJpbnRmKCI/U3Ry aW5nIHJlcXVpcmVkXG4iKTsKKwkJICAgIHggPSAtOTsKKwkJfQorCQlnb3RvIHhjb25ueDsKKwkg ICAgfQorCSAgICBpZiAobiAhPSBDT05OX1RTKQorCSAgICAgIHMgPSBicnN0cmlwKHMpOworCSAg ICBpZiAoKHkgPSBzdHJsZW4ocykpID4gMCkgeworCQlpZiAocHZbbl0uc3ZhbCkgZnJlZShwdltu XS5zdmFsKTsKKwkJcHZbbl0uc3ZhbCA9IG1hbGxvYyh5KzEpOworCQlpZiAocHZbbl0uc3ZhbCkg eworCQkgICAgc3RyY3B5KHB2W25dLnN2YWwscyk7IC8qIHNhZmUgKi8KKwkJICAgIHB2W25dLml2 YWwgPSAxOworCQl9CisJICAgIH0KKwkgICAgYnJlYWs7CisjZW5kaWYgLyogWExJTU9SVFJJR0dF UiAqLworCSAgZGVmYXVsdDoKKwkgICAgcHJpbnRmKCI/VW5leHBlY3RlZCBzd2l0Y2ggdmFsdWUg LSAlZFxuIixjbXJlc3VsdC5ucmVzdWx0KTsKKwkgICAgeCA9IC05OworCSAgICBnb3RvIHhjb25u eDsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsImRveGNvbm4gY21yZXN1bHQuZmNvZGUiLCIi LGNtcmVzdWx0LmZjb2RlKTsKKyAgICBpZiAoY21yZXN1bHQuZmNvZGUgIT0gX0NNQ0ZNKSB7CisJ cHJpbnRmKCI/VW5leHBlY3RlZCBmdW5jdGlvbiBjb2RlOiAlZFxuIixjbXJlc3VsdC5mY29kZSk7 CisJeCA9IC05OworCWdvdG8geGNvbm54OworICAgIH0KKworICAgIC8qIENvbW1hbmQgd2FzIGNv bmZpcm1lZCBzbyB3ZSBjYW4gcHJlLXBvcCBjb21tYW5kIGxldmVsLiAqLworICAgIC8qIFRoaXMg aXMgc28gQ09OTkVDVCBtb2R1bGUgd29uJ3QgdGhpbmsgd2UncmUgZXhlY3V0aW5nIGEgc2NyaXB0 ICovCisgICAgLyogaWYgQ09OTkVDVCB3YXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4gdGhlIHNjcmlw dC4gKi8KKworICAgIGlmIChjbWRsdmwgPiAwKQorICAgICAgcHJlcG9wKCk7CisKKyNpZmRlZiBP UzIJCQkJLyogTWFrZSByZXN1bHRzIGF2YWlsYWJsZSBnbG9iYWxseSAqLworICAgIGlmIChwdltD T05OX0lMXS5pdmFsID4gLTEpCQkvKiBJZGxlIGxpbWl0ICovCisgICAgICB0dF9pZGxlbGltaXQg PSBwdltDT05OX0lMXS5pdmFsOworICAgIGlmIChwdltDT05OX0lJXS5pdmFsID4gLTEpCQkvKiBJ ZGxlIGxpbWl0ICovCisgICAgICB0dF9pZGxlc25kX3RtbyA9IHB2W0NPTk5fSUldLml2YWw7Cisg ICAgaWYgKHB2W0NPTk5fSVNdLnN2YWwpCQkvKiBJZGxlIHN0cmluZyAqLworICAgICAgaWYgKHR0 X2lkbGVzbmRfc3RyID0gKGNoYXIgKiltYWxsb2MoKGludClzdHJsZW4ocHZbQ09OTl9JU10uc3Zh bCkrMSkpCisJc3RyY3B5KHR0X2lkbGVzbmRfc3RyLHB2W0NPTk5fSVNdLnN2YWwpOyAvKiBzYWZl ICovCisgICAgaWYgKHB2W0NPTk5fVExdLml2YWwgPiAtMSkJCS8qIFNlc3Npb24gbGltaXQgKi8K KyAgICAgIHR0X3RpbWVsaW1pdCA9IHB2W0NPTk5fVExdLml2YWw7CisgICAgYXN5bmMgPSAocHZb Q09OTl9BU10uaXZhbCA+IDAgfHwKKyAgICAgICAgICAgICBwdltDT05OX1NZXS5pdmFsIDw9IDAg JiYgY21kbHZsID09IDApID8gMSA6IDA7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19U UklHR0VSCisgICAgaWYgKHB2W0NPTk5fVFNdLnN2YWwpCQkvKiBUcmlnZ2VyIHN0cmluZ3MgKi8K KyAgICAgIG1ha2VsaXN0KHB2W0NPTk5fVFNdLnN2YWwsdHRfdHJpZ2dlcixUUklHR0VSUyk7Cisg ICAgZm9yIChpID0gMDsgaSA8IFRSSUdHRVJTOyBpKyspCS8qIFRyaWdnZXIgbWF0Y2ggcG9pbnRl cnMgKi8KKyAgICAgIHR0X3RybWF0Y2hbaV0gPSBOVUxMOworICAgIGlmICh0cmlnZ2VydmFsKSB7 CQkJLyogUmVzZXQgdHJpZ2dlciB2YWx1ZSAqLworCWZyZWUodHJpZ2dlcnZhbCk7CisJdHJpZ2dl cnZhbCA9IE5VTEw7CisgICAgfQorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKworI2lmZGVmIFNT SENNRAorLyoKKyAgMjAxMC8wMy8wMS4uLgorICBUaGUgcHJldmlvdXMgY29ubmVjdGlvbiB3YXMg dGhyb3VnaCB0aGUgZXh0ZXJuYWwgc3NoIGNsaWVudCBhbmQgbm93LCB3aXRoCisgIHRoYXQgY29u bmVjdGlvbiBjbG9zZWQsIHRoZSB1c2VyIHNheXMgImNvbm5lY3QiIGFuZCBleHBlY3RzIGEgbmV3 IGNvbm5lY3Rpb24KKyAgdG8gYmUgbWFkZSB0byB0aGUgc2FtZSBob3N0LCBiZWNhdXNlIHRoYXQn cyBob3cgYWxsIHRoZSBvdGhlciBjb25uZWN0aW9uCisgIG1ldGhvZHMgd29yaywgc28gKGFuZCB0 aGlzIGlzIHF1aXRlIGEgaGFjaykuLi4KKyovCisgICAgaWYgKCFja3N0cmNtcCgic3NoICIsdHRu YW1lLDQsMCkpIHsJLyogUHJldmlvdXMgImhvc3QiIHdhcyAic3NoIGJsYWgiICovCisJX1BST1RP VFlQIChpbnQgcmVkb3NzaCwgKCB2b2lkICkgKTsKKwlleHRlcm4gaW50IHR0eWZkOworCWlmICh0 dHlmZCA8IDApIHsJCS8qIEFuZCBjb25uZWN0aW9uIGlzIG5vIGxvbmdlciBvcGVuICovCisJICAg IGludCB4eDsKKwkgICAgeHggPSByZWRvc3NoKCk7CQkvKiBTbyByZWRvIHRoZSBTU0ggY29ubmVj dGlvbiAqLworCSAgICBpZiAoeHggPCAwKSByZXR1cm4oeHgpOworCSAgICBnb3RvIHhjb25ueDsK Kwl9CisgICAgfQorI2VuZGlmCS8qIFNTSENNRCAqLworICAgIHggPSBkb2NvbmVjdCgocHZbQ09O Tl9OVl0uaXZhbCA+IDApID8gMSA6IDAsIGFzeW5jKTsKKyAgICB7CisJaW50IHh4OworCWRlYnVn KEYxMDEsImRveGNvbm4gZG9jb25lY3QgcmV0dXJucyIsIiIseCk7CisJaWYgKCh4eCA9IHR0Y2hr KCkpIDwgMCkgZG9sb2dlbmQoKTsKKwlkZWJ1ZyhGMTAxLCJkb3hjb25uIHR0Y2hrIHJldHVybnMi LCIiLHh4KTsKKyAgICB9CisKKyNpZmRlZiBDS19UUklHR0VSCisgICAgZGVidWcoRjExMSwiZG94 Y29ubiBkb2NvbmVjdCB0cmlnZ2VydmFsIix0cmlnZ2VydmFsLHgpOworI2VuZGlmIC8qIENLX1RS SUdHRVIgKi8KKworICB4Y29ubng6CisgICAgLyogQmFjayBmcm9tIENPTk5FQ1QgLS0gUmVzdG9y ZSBnbG9iYWwgc2V0dGluZ3MgKi8KKworICAgIGlmICghYXN5bmMpCisgICAgICByZXNjb25uKCk7 CisKKyAgICBzdWNjZXNzID0gKHggPiAwKSA/IDEgOiAwOworICAgIHJldHVybih4KTsKK30KKyNl bmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBBRERDTUQKKy8qIGN4ID09IFhYQUREIG9yIFhY UkVNViAqLworLyogZmMgPT0gQUREX0JJTiBvciBBRERfVFhUICovCitzdGF0aWMgaW50Citkb2Fk ZChjeCxmYykgaW50IGN4LCBmYzsgeworI2lmZGVmIFBBVFRFUk5TCisgICAgY2hhciAqIHRtcFtG VFBBVFRFUk5TXTsKKyAgICBjaGFyICoqcCA9IE5VTEw7CisgICAgaW50IGksIGosIGssIG4gPSAw LCB4ID0gMCwgbGFzdDsKKworI2VuZGlmIC8qIFBBVFRFUk5TICovCisgICAgaWYgKGN4ICE9IFhY QUREICYmIGN4ICE9IFhYUkVNVikgeworCXByaW50ZigiP1VuZXhwZWN0ZWQgZnVuY3Rpb24gY29k ZTogJWRcbiIsY3gpOworCXJldHVybigtOSk7CisgICAgfQorI2lmZGVmIFBBVFRFUk5TCisgICAg d2hpbGUgKG4gPCBGVFBBVFRFUk5TKSB7CQkvKiBDb2xsZWN0IG5ldyBwYXR0ZXJucyAqLworCXRt cFtuXSA9IE5VTEw7CisJaWYgKCh4ID0gY21mbGQoIlBhdHRlcm4iLCIiLCZzLHh4c3RyaW5nKSkg PCAwKQorCSAgYnJlYWs7CisJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworCXMgPSBicnN0 cmlwKGxpbmUpOworCW1ha2VzdHIoJih0bXBbbisrXSkscyk7CisgICAgfQorICAgIGlmICh4ID09 IC0zKQorICAgICAgeCA9IGNtY2ZtKCk7CisgICAgaWYgKHggPCAwKQorICAgICAgZ290byB4ZG9h ZGQ7CisgICAgcCA9IChmYyA9PSBBRERfQklOKSA/IGJpbnBhdHRlcm5zIDogdHh0cGF0dGVybnM7 IC8qIFdoaWNoIGxpc3QgKi8KKyAgICBsYXN0ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRlRQ QVRURVJOUzsgaSsrKSB7IC8qIEZpbmQgbGFzdCBvbmUgaW4gbGlzdCAqLworCWlmICghcFtpXSkg eworCSAgICBsYXN0ID0gaTsKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgICBpZiAoY3ggPT0g WFhBREQpIHsJCQkvKiBBZGRpbmcgKi8KKwlpZiAobGFzdCArIG4gPiBGVFBBVFRFUk5TKSB7CS8q IENoZWNrIGlmIHRvbyBtYW55ICovCisJICAgIHByaW50ZigiP1RvbyBtYW55IHBhdHRlcm5zIC0g JWQgaXMgdGhlIG1heGltdW1cbiIsIEZUUEFUVEVSTlMpOworCSAgICBnb3RvIHhkb2FkZDsKKwl9 CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsgICAgICAgIC8qIENvcHkgaW4gdGhl IG5ldyBvbmVzLiAqLworICAgICAgICAgIGZvciAoaiA9IDAsIHggPSAwOyB4ID09IDAgJiYgaiA8 IGxhc3QgOyBqKysgKQorICAgICAgICAgICAgeCA9ICFja3N0cmNtcCh0bXBbaV0scFtqXSwtMSxm aWxlY2FzZSk7IC8qIG1hdGNoICovCisgICAgICAgICAgaWYgKHggPT0gMCkKKyAgICAgICAgICAg IG1ha2VzdHIoJihwW2xhc3QrK10pLHRtcFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgbWFrZXN0 cigmKHBbbGFzdF0pLE5VTEwpOwkvKiBOdWxsLXRlcm1pbmF0ZSB0aGUgbGlzdCAqLworICAgICAg ICB4ID0gMTsKKyAgICAgICAgZ290byB4ZG9hZGQ7ICAgICAgICAgICAgICAgICAgICAvKiBEb25l ICovCisgICAgfSBlbHNlIGlmIChjeCA9PSBYWFJFTVYpIHsJCS8qIFJlbW92ZSBzb21ldGhpbmco cykgKi8KKwlpbnQgaiwgazsKKwlpZiAobGFzdCA9PSAwKQkJCSAgICAgICAgLyogTGlzdCBpcyBl bXB0eSAqLworCSAgZ290byB4ZG9hZGQ7CQkJICAgICAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAq LworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsJICAgICAgICAvKiBpID0gUGF0dGVybnMgdGhl eSB0eXBlZCAqLworCSAgICBmb3IgKGogPSAwOyBqIDwgbGFzdDsgaisrKSB7ICAgICAgICAvKiBq ID0gUGF0dGVybnMgaW4gbGlzdCAqLworCQkvKiBDaGFuZ2UgdGhpcyB0byBja3N0cmNtcCgpLi4u ICovCisJCWlmIChmaWxlY2FzZSkKKyAgICAgICAgICAgICAgICAgIHggPSAhY2tzdHJjbXAodG1w W2ldLHBbal0sLTEsZmlsZWNhc2UpOyAvKiBtYXRjaCAqLworCQllbHNlCisJCSAgeCA9IGNrc3Ry Y21wKHRtcFtpXSxwW2pdLC0xLDApOyAvKiBDYXNlLWluZGVwZW5kZW50IG1hdGNoICovCisJCWlm ICh4KSB7CSAgICAJICAgICAgICAvKiBUaGlzIG9uZSBtYXRjaGVzICovCisJCSAgICBtYWtlc3Ry KCYocFtqXSksTlVMTCk7ICAgICAgLyogRnJlZSBpdCAqLworCQkgICAgZm9yIChrID0gajsgayA8 IGxhc3Q7IGsrKykgIC8qIE1vdmUgdGhlIHJlc3QgdXAgKi8KKwkJICAgICAgcFtrXSA9IHBbaysx XTsKKwkJICAgIHBba10gPSBOVUxMOwkgICAgICAgIC8qIEVyYXNlIGxhc3Qgb25lICovCisJCSAg ICBpZiAoIXBba10pCisJCSAgICAgIGJyZWFrOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICB4 ZG9hZGQ6CQkJCS8qIENvbW1vbiBleGl0ICovCisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykK KyAgICAgIGlmICh0bXBbaV0pCisJZnJlZSh0bXBbaV0pOworICAgIHJldHVybih4KTsKKyNlbmRp ZiAvKiBQQVRURVJOUyAqLworfQorCisvKiBBREQgU0VORC1MSVNUICovCisKK3N0YXRpYyBpbnQK K2FkZHNlbmQoY3gpIGludCBjeDsgeworI2lmbmRlZiBOT01TRU5ECisgICAgZXh0ZXJuIHN0cnVj dCBrZXl0YWIgZnR0YWJbXTsKKyAgICBleHRlcm4gaW50IG5mdHR5cDsKKyAgICBzdHJ1Y3QgZmls ZWxpc3QgKiBmbHA7CisgICAgY2hhciAqIGZtb2RlID0gIiI7CisgICAgaW50IHhtb2RlID0gMDsK KyAgICBpbnQgeGJpbmFyeSA9IDA7CisjZW5kaWYgLyogTk9NU0VORCAqLworCisjaWZkZWYgTk9N U0VORAorICAgIHByaW50ZigiP1NvcnJ5LCBBREQvUkVNT1ZFIFNFTkQtTElTVCBub3QgYXZhaWxh YmxlLlxuIik7CisgICAgcmV0dXJuKC05KTsKKyNlbmRpZiAvKiBOT01TRU5EICovCisgICAgaWYg KGN4ID09IFhYUkVNVikgeworCXByaW50ZigiP1NvcnJ5LCBSRU1PVkUgU0VORC1MSVNUIG5vdCBp bXBsZW1lbnRlZCB5ZXQuXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyNpZm5kZWYgTk9NU0VO RAorI2lmbmRlZiBYWVpfSU5URVJOQUwKKyAgICBpZiAocHJvdG9jb2wgIT0gUFJPVE9fSykgewor ICAgICAgIHByaW50ZigiP1NvcnJ5LCBBREQgU0VORC1MSVNUIGRvZXMgbm90IHdvcmsgd2l0aCBl eHRlcm5hbCBwcm90b2NvbHNcbiIpOworICAgICAgIHJldHVybigtOSk7CisgICAgfQorI2VuZGlm IC8qIFhZWl9JTlRFUk5BTCAqLworCisgICAgeCA9IGNtaWZpKCJGaWxlIHNwZWNpZmljYXRpb24g dG8gYWRkIiwiIiwgJnMsJnkseHhzdHJpbmcpOworICAgIGlmICh4IDwgMCkgeworCWlmICh4ID09 IC0zKSB7CisJICAgIHByaW50ZigiP0EgZmlsZSBzcGVjaWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4i KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVsc2UKKwkgIHJldHVybih4KTsKKyAgICB9CisgICAg Y2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgcyA9IHRtcGJ1ZjsKKyAgICBpZiAo ZmlsZXNpbmxpc3QgPT0gMCkJCS8qIFRha2UgY2FyZSBvZiBcdihmaWxlc3BlYykgKi8KKyAgICAg IGZzcGVjWzBdID0gTlVMOworICAgIHpmbnFmcChzLExJTkJVRlNJWixsaW5lKTsKKyAgICBzID0g bGluZTsKKyAgICBpZiAoKChpbnQpc3RybGVuKGZzcGVjKSArIChpbnQpc3RybGVuKHMpICsgMSkg PCBmc3BlY2xlbikgeworCXN0cmNhdChmc3BlYyxzKTsJCS8qIHNhZmUgKi8KKwlzdHJjYXQoZnNw ZWMsIiAiKTsJCS8qIHNhZmUgKi8KKyAgICB9IGVsc2UKKyAgICAgIHByaW50ZigiV0FSTklORyAt IFxcdihmaWxlc3BlYykgYnVmZmVyIG92ZXJmbG93XG4iKTsKKworCisgICAgeGJpbmFyeSA9IGJp bmFyeTsKKyAgICBpZiAoKHBhdHRlcm5zIHx8IGZpbGVwZWVrKQkJLyogRklMRSBQQVRURVJOUyBv ciBTQ0FOIGlzIE9OICovCisjaWZkZWYgQ0tfTEFCRUxFRAorCSYmIGJpbmFyeSAhPSBYWUZUX0wJ CS8qIEFuZCBub3QgaWYgRklMRSBUWVBFIExBQkVMRUQgKi8KKyNlbmRpZiAvKiBDS19MQUJFTEVE ICovCisjaWZkZWYgVk1TCisJJiYgYmluYXJ5ICE9IFhZRlRfSQkJLyogb3IgRklMRSBUWVBFIElN QUdFICovCisjZW5kaWYgLyogVk1TICovCisJKSB7CisJaW50IGssIHg7CisJeCA9IC0xOworCWsg PSBzY2FuZmlsZShsaW5lLCZ4LG5zY2FuZmlsZSk7CisJaWYgKGsgPiAwKSB4YmluYXJ5ID0gKGsg PT0gRlRfQklOKSA/IFhZRlRfQiA6IFhZRlRfVDsKKyAgICB9CisgICAgZm1vZGUgPSBnZm1vZGUo eGJpbmFyeSwwKTsKKyAgICBpZiAoKHggPSBjbWtleShmdHRhYixuZnR0eXAsCisJCSAgICJ0eXBl IG9mIGZpbGUgdHJhbnNmZXIiLCBmbW9kZSwgeHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4o eCk7CisgICAgeG1vZGUgPSB4OworCisgICAgY21hcmcyID0gIiI7CisgICAgaWYgKCh4ID0gY21m bGQoeSA/CisgICJcbkFzLW5hbWUgdGVtcGxhdGUgY29udGFpbmluZyByZXBsYWNlbWVudCB2YXJp YWJsZXMgc3VjaCBhcyBcXHYoZmlsZW5hbWUpIiA6CisgICJOYW1lIHRvIHNlbmQgaXQgd2l0aCIs ICIiLCZzLE5VTEwpKSA8IDApCisgICAgICBpZiAoeCAhPSAtMykKKwlyZXR1cm4oeCk7CisjaWZu ZGVmIE5PU1BMCisgICAgaWYgKHkgJiYgKnMpIHsKKwljaGFyICogcCA9IHRtcGJ1ZjsKKwl4ID0g VE1QQlVGU0laOworCXp6c3RyaW5nKHMsJnAsJngpOworCWlmICghc3RyY21wKHRtcGJ1ZixzKSkg eworCSAgICBwcmludGYoCisgICI/QXMtbmFtZSBmb3IgZmlsZSBncm91cCBtdXN0IGNvbnRhaW4g dmFyaWFibGVzIHN1Y2ggYXMgXFx2KGZpbGVuYW1lKVxuIgorCQkgICApOworCSAgICByZXR1cm4o LTkpOworCX0KKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICBja3N0cm5jcHkodG1wYnVm LHMsVE1QQlVGU0laKTsKKyAgICBjbWFyZzIgPSB0bXBidWY7CisKKyAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgZmxwID0gKHN0cnVjdCBmaWxlbGlzdCAq KSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBmaWxlbGlzdCkpOworICAgIGlmIChmbHApIHsKKwlpZiAo ZmlsZXRhaWwpCisJICBmaWxldGFpbC0+ZmxfbmV4dCA9IGZscDsKKwlmaWxldGFpbCA9IGZscDsK KwlpZiAoIWZpbGVoZWFkKQorCSAgZmlsZWhlYWQgPSBmbHA7CisJeCA9IChpbnQpIHN0cmxlbihs aW5lKTsJLyogTGVuZ3RoIG9mIGZpbGVuYW1lICovCisJcyA9IChjaGFyICopIG1hbGxvYyh4ICsg MSk7CisJaWYgKHMpIHsKKwkgICAgc3RyY3B5KHMsbGluZSk7CQkvKiBzYWZlICovCisJICAgIGZs cC0+ZmxfbmFtZSA9IHM7CisJICAgIGZscC0+ZmxfbW9kZSA9IHhtb2RlOworCSAgICB4ID0gKGlu dCkgc3RybGVuKGNtYXJnMik7CS8qIExlbmd0aCBvZiBhcy1uYW1lICovCisJICAgIGlmICh4IDwg MSkgeworCQlmbHAtPmZsX2FsaWFzID0gTlVMTDsKKwkgICAgfSBlbHNlIHsKKwkJcyA9IChjaGFy ICopIG1hbGxvYyh4ICsgMSk7CisJCWlmIChzKSB7CisJCSAgICBzdHJjcHkocyxjbWFyZzIpOwkv KiBzYWZlICovCisJCSAgICBmbHAtPmZsX2FsaWFzID0gczsKKwkJfSBlbHNlIHsKKwkJICAgIHBy aW50ZigiU29ycnksIGNhbid0IGFsbG9jYXRlIHNwYWNlIGZvciBhcy1uYW1lIik7CisJCSAgICBy ZXR1cm4oLTkpOworCQl9CisJICAgIH0KKwkgICAgZmxwLT5mbF9uZXh0ID0gTlVMTDsKKwkgICAg ZmlsZXNpbmxpc3QrKzsJCS8qIENvdW50IHRoaXMgbm9kZSAqLworCSAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOwkvKiBGaW5pc2hlZCBhZGRpbmcgdGhpcyBub2RlICovCisJfSBlbHNlIHsKKwkgICAg cHJpbnRmKCJTb3JyeSwgY2FuJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIG5hbWUiKTsKKwkgICAgcmV0 dXJuKC05KTsKKwl9CisgICAgfSBlbHNlIHsKKwlwcmludGYoIlNvcnJ5LCBjYW4ndCBhbGxvY2F0 ZSBmaWxlIGxpc3Qgbm9kZSIpOworCXJldHVybigtOSk7CisgICAgfQorI2VuZGlmIC8qIE5PTVNF TkQgKi8KK30KKyNlbmRpZiAvKiBBRERDTUQgKi8KKworI2lmbmRlZiBOT0hUVFAJCQkJLyogSFRU UCBvcHMuLi4gKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyNkZWZpbmUgSFRUUF9HRVQgMAkJCS8qIEdF VCAqLworI2RlZmluZSBIVFRQX1BVVCAxCQkJLyogUFVUICovCisjZGVmaW5lIEhUVFBfUE9TIDIJ CQkvKiBQT1NUICovCisjZGVmaW5lIEhUVFBfSURYIDMJCQkvKiBJTkRFWCAqLworI2RlZmluZSBI VFRQX0hFRCA0ICAgICAgICAgICAgICAgICAgICAgIC8qIEhFQUQgKi8KKyNkZWZpbmUgSFRUUF9E RUwgNSAgICAgICAgICAgICAgICAgICAgICAvKiBERUxFVEUgKi8KKyNkZWZpbmUgSFRUUF9DT04g NiAgICAgICAgICAgICAgICAgICAgICAvKiBDT05ORUNUICovCisjZGVmaW5lIEhUVFBfT1BOIDcg ICAgICAgICAgICAgICAgICAgICAgLyogT1BFTiAqLworI2RlZmluZSBIVFRQX0NMUyA4ICAgICAg ICAgICAgICAgICAgICAgIC8qIENMT1NFICovCisKK3N0YXRpYyBzdHJ1Y3Qga2V5dGFiIGh0dHB0 YWJbXSA9IHsKKyAgICB7ICJjbG9zZSIsICAgSFRUUF9DTFMsIDAgfSwKKyAgICB7ICJjb25uZWN0 IiwgSFRUUF9DT04sIDAgfSwKKyAgICB7ICJkZWxldGUiLCAgSFRUUF9ERUwsIDAgfSwKKyAgICB7 ICJnZXQiLCAgICAgSFRUUF9HRVQsIDAgfSwKKyAgICB7ICJoZWFkIiwgICAgSFRUUF9IRUQsIDAg fSwKKyAgICB7ICJpbmRleCIsICAgSFRUUF9JRFgsIDAgfSwKKyAgICB7ICJvcGVuIiwgICAgSFRU UF9PUE4sIDAgfSwKKyAgICB7ICJwdXQiLCAgICAgSFRUUF9QVVQsIDAgfSwKKyAgICB7ICJwb3N0 IiwgICAgSFRUUF9QT1MsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmh0dHB0YWIgPSBzaXplb2YoaHR0 cHRhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpOworCisvKiBIVFRQIHN3aXRjaGVzICovCisjZGVm aW5lIEhUX1NXX0FHIDAJCQkvKiAvQUdFTlQgKi8KKyNkZWZpbmUgSFRfU1dfSEQgMQkJCS8qIC9I RUFERVIgKi8KKyNkZWZpbmUgSFRfU1dfVVMgMgkJCS8qIC9VU0VSICovCisjZGVmaW5lIEhUX1NX X1BXIDMJCQkvKiAvUEFTU1dPUkQgKi8KKyNkZWZpbmUgSFRfU1dfQVIgNCAgICAgICAgICAgICAg ICAgICAgICAvKiAvQVJSQVkgKi8KKyNkZWZpbmUgSFRfU1dfVFAgNSAgICAgICAgICAgICAgICAg ICAgICAvKiAvVE9TQ1JFRU4gKi8KKworc3RhdGljIHN0cnVjdCBrZXl0YWIgaHR0cHN3dGFiW10g PSB7CisgICAgeyAiL2FnZW50IiwgICAgSFRfU1dfQUcsIENNX0FSRyB9LAorI2lmbmRlZiBOT1NQ TAorICAgIHsgIi9hcnJheSIsICAgIEhUX1NXX0FSLCBDTV9BUkcgfSwKKyNlbmRpZiAvKiBOT1NQ TCAqLworICAgIHsgIi9oZWFkZXIiLCAgIEhUX1NXX0hELCBDTV9BUkcgfSwKKyAgICB7ICIvcGFz c3dvcmQiLCBIVF9TV19QVywgQ01fQVJHIH0sCisgICAgeyAiL3Rvc2NyZWVuIiwgSFRfU1dfVFAs IDAgfSwKKyAgICB7ICIvdXNlciIsICAgICBIVF9TV19VUywgQ01fQVJHIH0sCisgICAgeyAiIiwg MCwgMCB9Cit9Oworc3RhdGljIGludCBuaHR0cHN3dGFiID0gc2l6ZW9mKGh0dHBzd3RhYikvc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKworLyogSFRUUCBQVVQvUE9TVCBzd2l0Y2hlcyAqLwor I2RlZmluZSBIVF9QUF9NVCAwCQkJLyogL01JTUUtVFlQRSAqLworCitzdGF0aWMgc3RydWN0IGtl eXRhYiBodHRwcHRhYltdID0geworICAgIHsgIi9taW1lLXR5cGUiLCBIVF9QUF9NVCwgQ01fQVJH IH0sCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuaHR0cHB0YWIgPSBzaXplb2Yo aHR0cHB0YWIpL3NpemVvZihzdHJ1Y3Qga2V5dGFiKSAtIDE7CisKKyNkZWZpbmUgSFRUUF9NQVhI RFIgOAorCitzdGF0aWMgaW50Cit4ZG9odHRwKGFjdGlvbiwgbGZpbGUsIHJmLCBkZmlsZSwgYWdl bnQsIGhkciwgdXNlciwgcGFzcywgbWltZSwgYXJyYXksIHR5cGUpCisgICAgaW50IGFjdGlvbjsK KyAgICBjaGFyICpsZmlsZSwgKnJmLCAqZGZpbGUsICphZ2VudCwgKmhkciwgKnVzZXIsICpwYXNz LCAqbWltZSwgYXJyYXk7CisgICAgaW50IHR5cGU7CisvKiB4ZG9odHRwICovIHsKKyAgICBpbnQg aSwgcmMgPSAwOworICAgIGNoYXIgKiBoZHJsaXN0W0hUVFBfTUFYSERSXTsKKyAgICBjaGFyIHJm aWxlW0NLTUFYUEFUSCsxXTsKKyAgICBleHRlcm4gaW50IGh0dHBmZDsKKworICAgIC8qIENoZWNr IGZvciBhIHZhbGlkIHN0YXRlIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgKi8KKyAgICBpZiAoaW5z ZXJ2ZXIpIHsKKyAgICAgICAgcHJpbnRmKCI/VGhlIEhUVFAgY29tbWFuZCBtYXkgbm90IGJlIHVz ZWQgZnJvbSB0aGUgSUtTXHJcbiIpOworICAgIH0gZWxzZSBpZiAoaHR0cGZkID09IC0xKSB7Cisg ICAgICAgIGlmIChodHRwX3Jlb3BlbigpIDwgMCkKKwkgIHByaW50ZigiP05vIGNvbm5lY3Rpb25c biIpOworICAgICAgICBlbHNlCisJICByYyA9IDE7CisgICAgfSBlbHNlIHsKKwlyYyA9IDE7Cisg ICAgfQorCisgICAgLyogSWYgdGhlIGNvbW1hbmQgaXMgbm90IHZhbGlkLCBleGl0IHdpdGggZmFp bHVyZSAqLworICAgIGlmIChyYyA9PSAwKQorICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor CisgICAgaWYgKGFjdGlvbiAhPSBIVFRQX0NPTiAmJiByZlswXSAhPSAnLycpIHsKKyAgICAgICAg cmZpbGVbMF0gPSAnLyc7CisgICAgICAgIGNrc3RybmNweSgmcmZpbGVbMV0scmYsQ0tNQVhQQVRI KTsKKyAgICB9IGVsc2UgeworICAgICAgICBja3N0cm5jcHkocmZpbGUscmYsQ0tNQVhQQVRIKTsK KyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IEhUVFBfTUFYSERSOyBpKyspCS8qIEluaXRpYWxp emUgaGVhZGVyIGxpc3QgKi8KKyAgICAgIGhkcmxpc3RbaV0gPSBOVUxMOworICAgIG1ha2VsaXN0 KGhkcixoZHJsaXN0LEhUVFBfTUFYSERSKTsJLyogTWFrZSBoZWFkZXIgbGlzdCAqLworCisjaWZk ZWYgQkVUQURFQlVHCisgICAgZm9yIChpID0gMDsgaSA8IG5odHRwdGFiOyBpKyspCS8qIEZpbmQg YWN0aW9uIGtleXdvcmQgKi8KKyAgICAgIGlmIChodHRwdGFiW2ldLmt3dmFsID09IGFjdGlvbikK KwlicmVhazsKKyAgICBpZiAoaSA9PSBuaHR0cHRhYikgewkJLyogU2hvdWxkbid0IGhhcHBlbi4u LiAqLworCXByaW50ZigiP0ludmFsaWQgYWN0aW9uIC0gJWRcbiIsYWN0aW9uKTsKKwlyZXR1cm4o MCk7CQkJLyogRmFpbHVyZSAqLworICAgIH0KKworICAgIHByaW50ZigiSFRUUCBhY3Rpb246ICAl c1xuIixodHRwdGFiW2ldLmt3ZCk7CisgICAgcHJpbnRmKCIgQWdlbnQ6ICAgICAgICVzXG4iLGFn ZW50ID8gYWdlbnQgOiAiKG51bGwpIik7CisKKyAgICBpZiAoaGRybGlzdFsxXSkgeworCXByaW50 ZigiIEhlYWRlciBsaXN0OiAxLiAlc1xuIixoZHJsaXN0WzBdKTsKKwlmb3IgKGkgPSAxOyBpIDwg SFRUUF9NQVhIRFIgJiYgaGRybGlzdFtpXTsgaSsrKQorCSAgcHJpbnRmKCIlMTVkLiAlc1xuIixp KzEsaGRybGlzdFtpXSk7CisgICAgfSBlbHNlCisgICAgICBwcmludGYoIiBIZWFkZXI6ICAgICAg JXNcbiIsaGRybGlzdFswXSA/IGhkcmxpc3RbMF0gOiAiKG51bGwpIik7CisKKyAgICBwcmludGYo IiBVc2VyOiAgICAgICAgJXNcbiIsdXNlciA/IHVzZXIgOiAiKG51bGwpIik7CisjaWZkZWYgQ09N TUVOVAorICAgIHByaW50ZigiIFBhc3N3b3JkOiAgICAlc1xuIixwYXNzID8gcGFzcyA6ICIobnVs bCkiKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoYXJy YXkpCisgICAgICBwcmludGYoIiBBcnJheTogICAgICAgXFwlJSVjW11cbiIsIGFycmF5KTsKKyAg ICBlbHNlCisgICAgICBwcmludGYoIiBBcnJheTogICAgICAgKG5vbmUpXG4iKTsKKyNlbmRpZiAv KiBOT1NQTCAqLworCisgICAgaWYgKGFjdGlvbiA9PSBIVFRQX1BVVCB8fCBhY3Rpb24gPT0gSFRU UF9QT1MpCisgICAgICBwcmludGYoIiBNaW1lLXR5cGU6ICAgJXNcbiIsbWltZSA/IG1pbWUgOiAi KG51bGwpIik7CisKKyAgICBwcmludGYoIiBMb2NhbCBmaWxlOiAgJXNcbiIsbGZpbGUgPyBsZmls ZSA6ICIobnVsbCkiKTsKKyAgICBwcmludGYoIiBSZW1vdGUgZmlsZTogJXNcbiIscmZpbGUgPyBy ZmlsZSA6ICIobnVsbCkiKTsKKyAgICBwcmludGYoIiBEZXN0aW5hdGlvbiBmaWxlOiAlc1xuIixk ZmlsZSA/IGRmaWxlIDogIihudWxsKSIpOworI2VuZGlmIC8qIEJFVEFERUJVRyAqLworCisgICAg LyogVGhlIGh0dHBfeHh4eCgpIGZ1bmN0aW9ucyByZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBm YWlsdXJlICovCisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAgIGNhc2UgSFRUUF9DT046IHsK KwkgIGV4dGVybiBpbnQgdHR5ZmQ7CisJICByYyA9IGh0dHBfY29ubmVjdChodHRwZmQsYWdlbnQs aGRybGlzdCx1c2VyLHBhc3MsYXJyYXkscmZpbGUpOworCSAgYnJlYWs7CisgICAgICB9CisgICAg ICBjYXNlIEhUVFBfREVMOgorICAgICAgICByYyA9IGh0dHBfZGVsZXRlKGFnZW50LGhkcmxpc3Qs dXNlcixwYXNzLGFycmF5LHJmaWxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhUVFBf R0VUOgorICAgICAgICByYyA9IGh0dHBfZ2V0KGFnZW50LGhkcmxpc3QsdXNlcixwYXNzLGFycmF5 LGxmaWxlLHJmaWxlLHR5cGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSFRUUF9IRUQ6 CisgICAgICAgIHJjID0gaHR0cF9oZWFkKGFnZW50LGhkcmxpc3QsdXNlcixwYXNzLGFycmF5LGxm aWxlLHJmaWxlLHR5cGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgSFRUUF9QVVQ6Cisg ICAgICAgIHJjID0gaHR0cF9wdXQoYWdlbnQsaGRybGlzdCxtaW1lLHVzZXIscGFzcyxhcnJheSxs ZmlsZSxyZmlsZSxkZmlsZSwKKwkJICAgICAgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgICAg Y2FzZSBIVFRQX1BPUzoKKyAgICAgICAgcmMgPSBodHRwX3Bvc3QoYWdlbnQsaGRybGlzdCxtaW1l LHVzZXIscGFzcyxhcnJheSxsZmlsZSxyZmlsZSxkZmlsZSwKKwkJICAgICAgIHR5cGUpOworICAg ICAgICBicmVhazsKKyAgICAgIGNhc2UgSFRUUF9JRFg6CisgICAgICAgIHJjID0gaHR0cF9pbmRl eChhZ2VudCxoZHJsaXN0LHVzZXIscGFzcyxhcnJheSxsZmlsZSxyZmlsZSx0eXBlKTsKKyAgICAg ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByYyA9IC0xOworICAgIH0KKyAgICBy ZXR1cm4ocmMgPT0gMCA/IDEgOiAwKTsJICAgICAgICAvKiBTdWNjZXNzIGlzIHNldCBieSBjYWxs ZXIgKi8KK30KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAvKiBOT0hUVFAgKi8KKwor I2lmbmRlZiBOT1NQTAkJCQkvKiBBUlJBWSBvcHMuLi4gKi8KK3N0YXRpYyBzdHJ1Y3Qga2V5dGFi IGFycmF5dGFiW10gPSB7CisgICAgeyAiY2xlYXIiLCAgICAgQVJSX0NMUiwgMCB9LAorICAgIHsg ImNvcHkiLCAgICAgIEFSUl9DUFksIDAgfSwKKyAgICB7ICJkY2wiLCAgICAgICBBUlJfRENMLCBD TV9JTlYgfSwKKyAgICB7ICJkZWNsYXJlIiwgICBBUlJfRENMLCAwIH0sCisgICAgeyAiZGVzdHJv eSIsICAgQVJSX0RTVCwgQ01fSU5WIH0sCisgICAgeyAiZXF1YXRlIiwgICAgQVJSX0VRVSwgQ01f SU5WIH0sCisgICAgeyAibGluayIsICAgICAgQVJSX0VRVSwgMCB9LAorICAgIHsgInJlc2l6ZSIs ICAgIEFSUl9SU1osIDAgfSwKKyAgICB7ICJzZXQiLCAgICAgICBBUlJfU0VULCAwIH0sCisjaWZu ZGVmIE5PU0hPVworICAgIHsgInNob3ciLCAgICAgIEFSUl9TSE8sIDAgfSwKKyNlbmRpZiAvKiBO T1NIT1cgKi8KKyAgICB7ICJzb3J0IiwgICAgICBBUlJfU1JULCAwIH0sCisgICAgeyAidW5kZWNs YXJlIiwgQVJSX0RTVCwgMCB9LAorICAgIHsgIiIsIDAsIDAgfQorfTsKK3N0YXRpYyBpbnQgbmFy cmF5dGFiID0gc2l6ZW9mKGFycmF5dGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYikgLSAxOworCisj aWZkZWYgQ0tMRUFSTgorc3RhdGljIHN0cnVjdCBrZXl0YWIgbGVhcm5zd2lbXSA9IHsKKyAgICB7 ICIvY2xvc2UiLCAgICAyLCAwIH0sCisgICAgeyAiL29mZiIsICAgICAgMCwgMCB9LAorICAgIHsg Ii9vbiIsICAgICAgIDEsIDAgfQorfTsKKyNlbmRpZiAvKiBDS0xFQVJOICovCisKK2ludAorYXJy YXlpdG9hKHgpIGludCB4OyB7CQkJLyogQXJyYXkgaW5kZXggdG8gYXJyYXkgbGV0dGVyICovCisg ICAgaWYgKHggPT0gMSkKKyAgICAgIHJldHVybig2NCk7CisgICAgZWxzZSBpZiAoeCA8IDAgfHwg eCA+ICgxMjIgLSBBUlJBWUJBU0UpKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBlbHNlCisgICAg ICByZXR1cm4oeCArIEFSUkFZQkFTRSk7Cit9CisKK2ludAorYXJyYXlhdG9pKGMpIGludCBjOyB7 CQkJLyogQXJyYXkgbGV0dGVyIHRvIGFycmF5IGluZGV4ICovCisgICAgaWYgKGMgPT0gNjQpCisg ICAgICBjID0gOTY7CisgICAgaWYgKGMgPiA2MyAmJiBjIDwgOTEpCisgICAgICBjICs9IDMyOwor ICAgIGlmIChjIDwgQVJSQVlCQVNFIHx8IGMgPiAxMjIpCisgICAgICByZXR1cm4oLTEpOworICAg IHJldHVybihjIC0gQVJSQVlCQVNFKTsKK30KKworc3RhdGljIGludAkJCQkvKiBEZWNsYXJlIGFu IGFycmF5ICovCitkb2RjbChjeCkgaW50IGN4OyB7CisgICAgaW50IGksIG4sIHYsIGxvLCBoaSwg cmMgPSAwOworICAgIGludCBpc2R5bmFtaWMgPSAwOworICAgIGNoYXIgdG1wYnVmWzY0XTsKKyAg ICBjaGFyICoqIHAgPSBOVUxMOworICAgIGNoYXIgdG1wWzY0XTsJCQkvKiBMb2NhbCB0ZW1wb3Jh cnkgc3RyaW5nIGJ1ZmZlciAqLworICAgIGlmICgoeSA9IGNtZmxkKCJBcnJheSBuYW1lIiwiIiwm cyxOVUxMKSkgPCAwKSB7IC8qIFBhcnNlIGFycmF5IG5hbWUgKi8KKwlpZiAoeSA9PSAtMykgewor CSAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsK Kwl9IGVsc2UgcmV0dXJuKHkpOworICAgIH0KKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJ Wik7CisgICAgcyA9IGxpbmU7CisgICAgeCA9IGFycmF5Ym91bmRzKHMsJmxvLCZoaSk7CQkvKiBD aGVjayBzeW50YXggYW5kIGdldCBib3VuZHMgKi8KKyAgICBkZWJ1ZyhGMTExLCJkb2RjbCBhcnJh eWJvdW5kcyIscyx4KTsKKyAgICBpZiAoeCA8IDApIHsJCQkvKiBFcnJvciAtIE1heWJlIGl0J3Mg YSB2YXJpYWJsZSAqLworCWNoYXIgKiBwOwkJCS8qIHdob3NlIHZhbHVlIGlzIGFuIGFycmF5IG5h bWUgKi8KKwlpbnQgbjsKKwlwID0gdG1wYnVmOworCW4gPSA2MzsKKwlwWzBdID0gTlVMOworCWlm IChzWzBdID09IENNRFEgJiYgc1sxXSA9PSAnJicpCisJICBzKys7CisJaWYgKHp6c3RyaW5nKHMs JnAsJm4pID4gLTEpIHsKKwkgICAgcyA9IHRtcGJ1ZjsKKwkgICAgeCA9IGFycmF5Ym91bmRzKHMs JmxvLCZoaSk7CisJICAgIGRlYnVnKEYxMTEsImRvZGNsIGFycmF5Ym91bmRzIDIiLHMseCk7CisJ fQorCWlmICh4IDwgMCkgeworCSAgICBwcmludGYoIj9CYWQgYXJyYXkgbmFtZSAtIFwiJXNcIlxu IixzKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisgICAgfQorICAgIGRlYnVnKEYxMDEsImRvZGNs IGhpIiwiIixoaSk7CisgICAgZGVidWcoRjEwMSwiZG9kY2wgbG8iLCIiLGxvKTsKKyAgICBkZWJ1 ZyhGMTAxLCJkb2RjbCBsbysxIiwiIixsbysxKTsKKworICAgIGlmIChsbyA9PSAtMSAmJiBoaSA9 PSAtMSkgewkJLyogSGF2ZSBnb29kIGFycmF5IG5hbWUgYW5kIGJvdW5kcyAqLworCWlzZHluYW1p YyA9IDE7CisJbiA9IENNREJMIC8gNTsKKyAgICB9IGVsc2UgaWYgKGhpID4gLTEpIHsKKwlwcmlu dGYoIj9TZWdtZW50IG5vdGF0aW9uIG5vdCBhbGxvd2VkIGluIGFycmF5IGRlY2xhcmF0aW9uc1xu Iik7CisJcmV0dXJuKC05KTsKKyAgICB9IGVsc2UgaWYgKChsbysxKSA8IDApIHsKKwlkZWJ1ZyhG MTAxLCJkb2RjbCB1bmRlcmZsb3ciLCIiLGxvKzEpOworICAgICAgICBwcmludGYoIj9EaW1lbnNp b24gdW5kZXJmbG93XG4iKTsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9IGVsc2UKKyAgICAg IG4gPSBsbzsKKyAgICB4ID0gYXJyYXlpdG9hKHgpOworICAgIGlmIChjeCA9PSBYWFVORENMKSB7 CisJbiA9IDA7CisJdiA9IDA7CisJaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorCSAgcmV0dXJuKHkp OworICAgIH0gZWxzZSB7CisJcCA9IChjaGFyICoqKW1hbGxvYyhzaXplb2YoY2hhciAqKikqKG4r MSkpOworCWlmICghcCkgeworCSAgICBwcmludGYoIj9NZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxu Iik7CisJICAgIHJldHVybigtOSk7CisJfQorCXYgPSAwOwkJCQkvKiBIaWdoZXN0IGluaXRpYWxp emVkIG1lbWJlciAqLworCXBbMF0gPSBOVUxMOwkJCS8qIEVsZW1lbnQgMCAqLworCWtlZXBhbGxj aGFycyA9IDE7CisJd2hpbGUgKG4gPiAwICYmIHYgPCBuKSB7CS8qIFBhcnNlIGluaXRpYWxpemVy cyAqLworCSAgICBwW3YrMV0gPSBOVUxMOworCSAgICBja21ha3htc2codG1wLAorCQkgICAgICA2 NCwKKwkJICAgICAgIkluaXRpYWwgdmFsdWUgZm9yIFxcJiIsCisJCSAgICAgIGNrY3RvYSgoY2hh cil4KSwKKwkJICAgICAgIlsiLAorCQkgICAgICBja2l0b2EodisxKSwKKwkJICAgICAgIl0iLAor CQkgICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisJCSAgICAgICk7CisJ ICAgIAorCSAgICByYyA9IGNtZmxkKChjaGFyICopdG1wLCIiLCZzLHh4c3RyaW5nKTsgLyogR2V0 IGZpZWxkICovCisJICAgIGlmIChyYyA8IDApIHsJCS8qIEVycm9yLi4uICovCisJCWlmIChyYyA9 PSAtMykgewkJLyogRW1wdHkgZWxlbWVudCAqLworCQkgICAgaWYgKGNtZmxncyA9PSAxKQkvKiBi ZWNhdXNlIGVuZCBvZiBsaW5lPyAqLworCQkgICAgICBicmVhazsJCS8qIFllcywgZG9uZSBpbml0 aWFsaXppbmcgKi8KKwkJICAgIGVsc2UJCS8qIE5vLCBpdCdzIGp1c3QgZW1wdHkgKi8KKwkJICAg ICAgY29udGludWU7CQkvKiBHbyBvbiB0byBuZXh0IG9uZS4gKi8KKwkJfSBlbHNlIHsJCS8qIE90 aGVyIHBhcnNlIGVycm9yICovCisJCSAgICBnb3RvIGRjbHg7CQkvKiBHbyBmcmVlIHRlbXAgcG9p bnRlcnMgKi8KKwkJfQorCSAgICB9CisJICAgIHJjID0gMTsKKwkgICAgaWYgKHYgPT0gMCAmJiAh c3RyY21wKHMsIj0iKSkgLyogU2tpcCB0aGUgPSBzaWduLiAqLworCSAgICAgIGNvbnRpbnVlOwor CSAgICBzID0gYnJzdHJpcChzKTsJCS8qIFN0cmlwIGFueSBicmFjZXMgKi8KKwkgICAgbWFrZXN0 cigmKHBbKyt2XSkscyk7CisJfQorCWtlZXBhbGxjaGFycyA9IDA7CisJaWYgKCh5ID0gY210eHQo IkNhcnJpYWdlIHJldHVybiB0byBjb25maXJtIiwiIiwmcyxOVUxMKSkgPCAwKQorCSAgcmV0dXJu KHkpOworCWlmIChpc2R5bmFtaWMpCisJICBuID0gdjsKKyAgICB9CisgICAgaWYgKGRjbGFycmF5 KChjaGFyKXgsbikgPCAwKSB7CS8qIERlY2xhcmUgdGhlIGFycmF5ICovCisJcHJpbnRmKCI/RGVj bGFyZSBmYWlsZWRcbiIpOworCWdvdG8gZGNseDsKKyAgICB9CisgICAgZm9yIChpID0gMTsgaSA8 PSB2OyBpKyspIHsJCS8qIEFkZCBhbnkgaW5pdGlhbCB2YWx1ZXMgKi8KKwl0bXBbMF0gPSAnJic7 CisJY2ttYWttc2coJnRtcFsxXSw2Myxja2N0b2EoKGNoYXIpeCksIlsiLGNraXRvYShpKSwiXSIp OworCWlmIChhZGRtYWModG1wLHBbaV0pIDwgMCkgeworCSAgICBwcmludGYoIkFycmF5IGluaXRp YWxpemF0aW9uIGVycm9yOiAlcyAlc1xuIix0bXAscFtpXSk7CisJICAgIHJjID0gLTk7CisJICAg IGdvdG8gZGNseDsKKwl9CisgICAgfQorICBkY2x4OgorICAgIGlmIChwKSB7CisJZm9yIChpID0g MTsgaSA8PSB2OyBpKyspCisJICBpZiAocFtpXSkgZnJlZShwW2ldKTsKKwlmcmVlKChjaGFyICop cCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIkRDTCByYyIsIiIscmMpOworICAgIHJldHVybihz dWNjZXNzID0gcmMpOworfQorCitzdGF0aWMgaW50Cityc3phcnJheSgpIHsKKyAgICBpbnQgaSwg eCwgeSwgbiwgbG8sIGhpLCBpc2xpbmsgPSAtMTsKKyAgICBjaGFyIGMsICogcywgKiogYXAgPSBO VUxMOworICAgIGlmICgoeCA9IGNtZmxkKCJBcnJheSBuYW1lIiwiIiwmcyxOVUxMKSkgPCAwKSB7 IC8qIFBhcnNlIGFycmF5IG5hbWUgKi8KKwlpZiAoeCA9PSAtMykgeworCSAgICBwcmludGYoIj9B cnJheSBuYW1lIHJlcXVpcmVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVsc2UgcmV0dXJu KHgpOworICAgIH0KKyAgICBja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CS8qIE1ha2Ugc2Fm ZSBjb3B5IG9mIG5hbWUgKi8KKyAgICBzID0gbGluZTsKKyAgICB4ID0gYXJyYXlib3VuZHMocywm bG8sJmhpKTsKKyAgICBpZiAoeCA8IDApIHsJCQkvKiBQYXJzZSB0aGUgbmFtZSwgZ2V0IGluZGV4 ICovCisJcHJpbnRmKCI/QmFkIGFycmF5IHJlZmVyZW5jZSAtIFwiJXNcIlxuIiwgcyk7CisJcmV0 dXJuKC05KTsKKyAgICB9CisgICAgaWYgKGxvIDwgMCAmJiBoaSA8IDApIHsKKwl5ID0gY21udW0o Ik5ldyBzaXplIiwiIiwxMCwmbG8seHhzdHJpbmcpOworCWlmICh5IDwgMCkgeworCSAgICBpZiAo eSA9PSAtMykKKwkgICAgICBwcmludGYoIj9OZXcgc2l6ZSByZXF1aXJlZFxuIik7CisJICAgIHJl dHVybih5KTsKKwl9CisgICAgfQorICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKyAgICAgIHJl dHVybih5KTsKKyAgICBpZiAoYV9saW5rW3hdID4gLTEpIHsJCS8qIExpbms/ICovCisJaXNsaW5r ID0geDsJCQkvKiBZZXMgZm9sbG93IGl0ICovCisJeCA9IGFfbGlua1t4XTsJCQkvKiBhbmQgcmVt ZW1iZXIgKi8KKyAgICB9CisgICAgaWYgKCFhX3B0clt4XSkgeworCXByaW50ZigiP0FycmF5IG5v dCBkZWNsYXJlZCAtIFwiJXNcIlxuIiwgcyk7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYg KGxvIDwgMCkgeworCXByaW50ZigiP05ldyBzaXplIHJlcXVpcmVkXG4iKTsKKwlyZXR1cm4oLTkp OworICAgIH0KKyAgICBpZiAoaGkgPiAtMSkgeworCXByaW50ZigiP0FycmF5IHNlZ21lbnRzIG5v dCBhbGxvd2VkIGZvciB0aGlzIG9wZXJhdGlvblxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9Cisg ICAgYyA9IGFycmF5aXRvYSh4KTsJCQkvKiBHZXQgYXJyYXkgbGV0dGVyICovCisgICAgaWYgKGMg PT0gJ0AnKSB7CQkJLyogQXJndW1lbnQgdmVjdG9yIGFycmF5IG9mZiBsaW1pdHMgKi8KKwlwcmlu dGYoIj9Tb3JyeSwgXFwmQFtdIGlzIHJlYWQtb25seVxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9 CisgICAgaWYgKGxvID09IDApIHsJCQkvKiBJZiBuZXcgc2l6ZSBpcyAwLi4uICovCisJZGNsYXJy YXkoYywwKTsJCQkvKiBVbmRlY2xhcmUgdGhlIGFycmF5ICovCisJcmV0dXJuKHN1Y2Nlc3MgPSAx KTsKKyAgICB9CisgICAgbiA9IGFfZGltW3hdOwkJCS8qIEN1cnJlbnQgc2l6ZSAqLworICAgIGFw ID0gKGNoYXIgKiopIG1hbGxvYygobG8rMSkgKiBzaXplb2YoY2hhciAqKSk7IC8qIE5ldyBhcnJh eSAqLworICAgIHkgPSAobiA8IGxvKSA/IG4gOiBsbzsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IHk7 IGkrKykJCS8qIENvcHkgdGhlIHBhcnQgdGhhdCBmaXRzICovCisgICAgICBhcFtpXSA9IGFfcHRy W3hdW2ldOworICAgIGlmIChuIDwgbG8pIHsJCQkvKiBJZiBvcmlnaW5hbCBhcnJheSBzbWFsbGVy ICovCisJZm9yICg7IGkgPD0gbG87IGkrKykJCS8qIGluaXRpYWxpemUgZXh0cmEgZWxlbWVudHMg aW4gKi8KKwkgIGFwW2ldID0gTlVMTDsJCQkvKiBuZXcgYXJyYXkgdG8gTlVMTC4gKi8KKyAgICB9 IGVsc2UgaWYgKG4gPiBsbykgewkJLyogSWYgbmV3IGFycmF5IHNtYWxsZXIgKi8KKwlmb3IgKDsg aSA8PSBsbzsgaSsrKQkJLyogZGVhbGxvY2F0ZSBsZWZ0b3ZlciBlbGVtZW50cyAqLworCSAgbWFr ZXN0cigmKGFfcHRyW3hdW2ldKSxOVUxMKTsJLyogZnJvbSBvcmlnaW5hbCBhcnJheS4gKi8KKyAg ICB9CisgICAgZnJlZSgoY2hhciAqKWFfcHRyW3hdKTsJCS8qIEZyZWUgb3JpZ2luYWwgYXJyYXkg bGlzdCAqLworICAgIGFfcHRyW3hdID0gYXA7CQkJLyogUmVwbGFjZSB3aXRoIG5ldyBvbmUgKi8K KyAgICBhX2RpbVt4XSA9IGxvOwkJCS8qIFJlY29yZCB0aGUgbmV3IGRpbWVuc2lvbiAqLworICAg IGlmIChpc2xpbmsgPiAtMSkgewkJCS8qIFdhcyB0aGlzIGEgbGluaz8gKi8KKwlhX3B0cltpc2xp bmtdID0gYXA7CQkvKiBJZiBzbyBwb2ludCB0byB0aGUgcmVzaXplZCBhcnJheSAqLworCWFfZGlt W2lzbGlua10gPSBsbzsKKyAgICB9IGVsc2UgewkJCQkvKiBJZiBub3QgYXJlIHRoZXJlIGxpbmtz IHRvIGhlcmU/ICovCisJZm9yIChpID0gMDsgaSA8IChpbnQpICd6JyAtIEFSUkFZQkFTRTsgaSsr KSB7IC8qIEFueSBsaW5rZWQgYXJyYXlzPyAqLworCSAgICBpZiAoaSAhPSB4ICYmIGFfbGlua1tp XSA9PSB4KSB7ICAgICAvKiBGaW5kIGFuZCB1cGRhdGUgdGhlbSAqLworCQlhX3B0cltpXSA9IGFw OworCQlhX2RpbVtpXSA9IGxvOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4oc3VjY2Vz cyA9IDEpOworfQorCitzdGF0aWMgaW50Citjb3B5YXJyYXkoKSB7CisgICAgaW50IGksIGosIHgx LCBsbzEsIGhpMSwgeDIsIGxvMiwgaGkyLCB3aG9sZSA9IDA7CisgICAgY2hhciBjMSwgYzIsICog YTEsICogYTI7CisgICAgaWYgKCh5ID0gY21mbGQoIk5hbWUgb2Ygc291cmNlIGFycmF5IiwiIiwm cyxOVUxMKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworICAgIGNrc3RybmNweShsaW5lLHMsTElO QlVGU0laKTsKKyAgICBhMSA9IGxpbmU7CisgICAgaWYgKCh4MSA9IGFycmF5Ym91bmRzKGExLCZs bzEsJmhpMSkpIDwgMCkgeworCXByaW50ZigiP0JhZCBhcnJheSByZWZlcmVuY2UgLSBcIiVzXCJc biIsIGExKTsKKwlyZXR1cm4oLTkpOworICAgIH0gZWxzZSBpZiAoIWFfcHRyW3gxXSkgeworCXBy aW50ZigiP0FycmF5IG5vdCBkZWNsYXJlZCAtIFwiJXNcIlxuIiwgYTEpOworCXJldHVybigtOSk7 CisgICAgfQorICAgIGMxID0gYXJyYXlpdG9hKHgxKTsKKworICAgIGlmICgoeSA9IGNtZmxkKCJO YW1lIG9mIGRlc3RpbmF0aW9uIGFycmF5IiwiIiwmcyxOVUxMKSkgPCAwKQorICAgICAgcmV0dXJu KHkpOworICAgIGNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOworICAgIGEyID0gdG1wYnVm OworICAgIGlmICgoeDIgPSBhcnJheWJvdW5kcyhhMiwmbG8yLCZoaTIpKSA8IDApIHsKKwlwcmlu dGYoIj9CYWQgYXJyYXkgcmVmZXJlbmNlIC0gXCIlc1wiXG4iLCBhMik7CisJcmV0dXJuKC05KTsK KyAgICB9CisgICAgYzIgPSBhcnJheWl0b2EoeDIpOworCisgICAgaWYgKCh4ID0gY21jZm0oKSkg PCAwKQorICAgICAgcmV0dXJuKHgpOworCisgICAgaWYgKGMyID09ICdAJykgewkJCS8qIEFyZ3Vt ZW50IHZlY3RvciBhcnJheSBvZmYgbGltaXRzICovCisJcHJpbnRmKCI/U29ycnksIFxcJkBbXSBp cyByZWFkLW9ubHlcbiIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmIChsbzEgPCAwICYm IGxvMiA8IDAgJiYgaGkxIDwgMCAmJiBoaTIgPCAwKSAvKiBTcGVjaWFsIGNhc2UgZm9yICovCisg ICAgICB3aG9sZSA9IDE7CQkJICAgICAgICAgIC8qIHdob2xlIGFycmF5Li4uICovCisKKyAgICBp ZiAobG8xIDwgMCkgbG8xID0gd2hvbGUgPyAwIDogMTsJLyogU3VwcGx5IGxvd2VyIGJvdW5kIG9m IHNvdXJjZSAqLworICAgIGlmIChoaTEgPCAwKSBoaTEgPSBhX2RpbVt4MV07CS8qIFN1cHBseSB1 cHBlciBib3VuZCBvZiBzb3VyY2UgKi8KKyAgICBpZiAobG8yIDwgMCkgbG8yID0gd2hvbGUgPyAw IDogMTsJLyogTG93ZXIgYm91bmQgb2YgdGFyZ2V0ICovCisgICAgaWYgKGhpMiA8IDApIGhpMiA9 IGxvMiArIGhpMSAtIGxvMTsJLyogVXBwZXIgYm91bmQgb2YgdGFyZ2V0ICovCisgICAgaWYgKGFf cHRyW3gyXSkgewkJCS8qIFRhcmdldCBhcnJheSBpcyBhbHJlYWR5IGRlY2xhcmVkPyAqLworCWlm IChoaTIgPiBhX2RpbVt4Ml0pCQkvKiBJZiB1cHBlciBib3VuZCBvdXQgb2YgcmFuZ2UgKi8KKwkg IGhpMiA9IGFfZGltW3gyXTsJCS8qIHNocmluayB0byBmaXQgKi8KKyAgICB9IGVsc2UgewkJCQkv KiBPdGhlcndpc2UuLi4gKi8KKwl4MiA9IGRjbGFycmF5KGMyLCBoaTIpOwkJLyogZGVjbGFyZSB0 aGUgdGFyZ2V0IGFycmF5ICovCisgICAgfQorICAgIGZvciAoaSA9IGxvMSwgaiA9IGxvMjsgaSA8 PSBoaTEgJiYgaiA8PSBoaTI7IGkrKyxqKyspIHsgLyogQ29weSAqLworCW1ha2VzdHIoJihhX3B0 clt4Ml1bal0pLGFfcHRyW3gxXVtpXSk7CisgICAgfQorICAgIHJldHVybihzdWNjZXNzID0gMSk7 Cit9CisKK3N0YXRpYyBpbnQJCQkJLyogVW5kZWNsYXJlIGFuIGFycmF5ICovCit1bmFycmF5KCkg eworICAgIGludCB4LCB5LCBuLCByYyA9IDA7CisgICAgY2hhciBjLCAqIHM7CisKKyAgICBpZiAo KHkgPSBjbWZsZCgiQXJyYXkgbmFtZSIsIiIsJnMsTlVMTCkpIDwgMCkgeyAvKiBQYXJzZSBhcnJh eSBuYW1lICovCisJaWYgKHkgPT0gLTMpIHsKKwkgICAgcHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1 aXJlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfSBlbHNlIHJldHVybih5KTsKKyAgICB9Cisg ICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOwkvKiBNYWtlIHNhZmUgY29weSBvZiBuYW1l ICovCisgICAgcyA9IGxpbmU7CisgICAgaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0 dXJuKHkpOworICAgIGlmICgoeCA9IGFycmF5Ym91bmRzKHMsJnksJm4pKSA8IDApIHsgLyogUGFy c2UgdGhlIG5hbWUsIGdldCBpbmRleCAqLworCXByaW50ZigiP0JhZCBhcnJheSByZWZlcmVuY2Ug LSBcIiVzXCJcbiIsIHMpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmICh5ID4gMCB8fCBu ID4gMCkgeworCXByaW50ZigiP1BhcnRpYWwgYXJyYXlzIGNhbiBub3QgYmUgZGVzdHJveWVkXG4i KTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBjID0gYXJyYXlpdG9hKHgpOwkJCS8qIEdldCBh cnJheSBsZXR0ZXIgKi8KKyAgICBpZiAoYV9wdHJbeF0pIHsJCQkvKiBJZiBhcnJheSBpcyBkZWNs YXJlZCAqLworCWlmIChjID09ICdAJykgewkJCS8qIEFyZ3VtZW50IHZlY3RvciBhcnJheSBvZmYg bGltaXRzICovCisJICAgIHByaW50ZigiP1NvcnJ5LCBcXCZAW10gaXMgcmVhZC1vbmx5XG4iKTsK KwkgICAgcmV0dXJuKC05KTsKKwl9CisJcmMgPSBkY2xhcnJheShjLC0xKTsJCS8qIFVuZGVjbGFy ZSB0aGUgYXJyYXkgKi8KKyAgICB9IGVsc2UJCQkJLyogSXQgd2Fzbid0IGRlY2xhcmVkICovCisg ICAgICByYyA9IDE7CisgICAgaWYgKHJjID4gLTEpIHsJCQkvKiBTZXQgcmV0dXJuIGNvZGUgYW5k IHN1Y2Nlc3MgKi8KKwlzdWNjZXNzID0gMTsKKwlyYyA9IDE7CisgICAgfSBlbHNlIHsKKwlzdWNj ZXNzID0gMDsKKwlwcmludGYoIj9GYWlsZWQgLSBkZXN0cm95IFwiXFwmJWNbXVwiXG4iLCBjKTsK KwlyYyA9IC05OworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorCitzdGF0aWMgaW50CitjbHJh cnJheShjeCkgaW50IGN4OyB7CisgICAgaW50IGksIHgsIGxvLCBoaTsKKyAgICBjaGFyIGMsICog cywgKiB2YWwgPSBOVUxMOworCisgICAgaWYgKCh4ID0gY21mbGQoIkFycmF5IG5hbWUiLCIiLCZz LE5VTEwpKSA8IDApIHsgLyogUGFyc2UgYXJyYXkgbmFtZSAqLworCWlmICh4ID09IC0zKSB7CisJ ICAgIHByaW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOworCSAgICByZXR1cm4oLTkpOwor CX0gZWxzZSByZXR1cm4oeCk7CisgICAgfQorICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsJLyogTWFrZSBzYWZlIGNvcHkgb2YgbmFtZSAqLworICAgIHMgPSBsaW5lOworICAgIGlmIChj eCA9PSBBUlJfU0VUKSB7CQkvKiBTRVQgKi8KKwlpZiAoKHggPSBjbXR4dCgiVmFsdWUiLCIiLCZ2 YWwseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeCk7CisJY2tzdHJuY3B5KHRtcGJ1Zix2YWws VE1QQlVGU0laKTsgLyogVmFsdWUgdG8gc2V0ICovCisJdmFsID0gdG1wYnVmOworCWlmICghKnZh bCkgdmFsID0gTlVMTDsKKyAgICB9IGVsc2UgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQkvKiBDTEVB UiAqLworICAgICAgcmV0dXJuKHgpOworCisgICAgaWYgKCh4ID0gYXJyYXlib3VuZHMocywmbG8s JmhpKSkgPCAwKSB7IC8qIFBhcnNlIHRoZSBuYW1lICovCisJcHJpbnRmKCI/QmFkIGFycmF5IHJl ZmVyZW5jZSAtIFwiJXNcIlxuIiwgcyk7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgYyA9IGFy cmF5aXRvYSh4KTsJCQkvKiBHZXQgYXJyYXkgbGV0dGVyICovCisgICAgaWYgKCFhX3B0clt4XSkg ewkJCS8qIElmIGFycmF5IGlzIGRlY2xhcmVkICovCisJcHJpbnRmKCI/QXJyYXkgJXMgaXMgbm90 IGRlY2xhcmVkXG4iLCBzKTsKKwlyZXR1cm4oLTkpOworICAgIH0gZWxzZSBpZiAoYyA9PSAnQCcp IHsJCS8qIEFyZ3VtZW50IHZlY3RvciBhcnJheSBvZmYgbGltaXRzICovCisJcHJpbnRmKCI/U29y cnksIFxcJkBbXSBpcyByZWFkLW9ubHlcbiIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlm IChsbyA8IDApIGxvID0gMDsKKyAgICBpZiAoaGkgPCAwKSBoaSA9IGFfZGltW3hdOworICAgIGZv ciAoaSA9IGxvOyBpIDw9IGhpOyBpKyspCQkvKiBDbGVhci9TZXQgc2VsZWN0ZWQgcmFuZ2UgKi8K KyAgICAgIG1ha2VzdHIoJihhX3B0clt4XVtpXSksdmFsKTsKKworICAgIHJldHVybihzdWNjZXNz ID0gMSk7Cit9CisKK2V4dGVybiBjaGFyICoqYWFfcHRyW0NNRFNUS0xdWzI4XTsKK2V4dGVybiBp bnQgYWFfZGltW0NNRFNUS0xdWzI4XTsKKworc3RhdGljIGludAkJCQkvKiBDcmVhdGUgc3ltYm9s aWMgbGluayB0byBhbiBhcnJheSAqLworbGlua2FycmF5KCkgeworICAgIGludCBpID0gMCwgeCwg eSwgbG8sIGhpLCBmbGFnID0gMDsKKyAgICBjaGFyIGMsICogcywgKiBwOworCisgICAgaWYgKCh4 ID0gY21mbGQoIkFycmF5IG5hbWUgbm90IGN1cnJlbnRseSBpbiB1c2UiLCIiLCZzLE5VTEwpKSA8 IDApIHsKKwlpZiAoeCA9PSAtMykgeworCSAgICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVk XG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVsc2UgcmV0dXJuKHgpOworICAgIH0KKyAgICBj a3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CS8qIE1ha2Ugc2FmZSBjb3B5IG9mIGxpbmsgbmFt ZSAqLworICAgIHMgPSBsaW5lOworICAgIGlmICgoeCA9IGNtZmxkKCJOYW1lIG9mIGV4aXN0aW5n IGFycmF5IiwiIiwmcCx4eHN0cmluZykpIDwgMCkgeworCWlmICh4ID09IC0zKSB7CisJICAgIHBy aW50ZigiP0FycmF5IG5hbWUgcmVxdWlyZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0gZWxz ZSByZXR1cm4oeCk7CisgICAgfQorICAgIGNrc3RybmNweSh0bXBidWYscCxUTVBCVUZTSVopOwkv KiBNYWtlIHNhZmUgY29weSBvZiBhcnJheSBuYW1lICovCisgICAgcCA9IHRtcGJ1ZjsKKyAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisKKyAgICBpZiAoKHggPSBh cnJheWJvdW5kcyhzLCZsbywmaGkpKSA8IDApIHsgLyogUGFyc2UgdGhlIGxpbmsgbmFtZSAqLwor CXByaW50ZigiP0JhZCBhcnJheSByZWZlcmVuY2UgLSBcIiVzXCJcbiIsIHMpOworCXJldHVybigt OSk7CisgICAgfQorICAgIGlmIChhX3B0clt4XSkgewkJCS8qIE11c3Qgbm90IGFscmVhZHkgZXhp c3QgKi8KKwljID0gYXJyYXlpdG9hKHgpOworCXByaW50ZigiP0FycmF5IGFscmVhZHkgZXhpc3Rz OiBcXCYlY1tdXG4iLCBjKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAobG8gPiAtMSB8 fCBoaSA+IC0xKSB7CisJcHJpbnRmKCI/U29ycnksIHdob2xlIGFycmF5cyBvbmx5OiAlc1xuIixz KTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoKHkgPSBhcnJheWJvdW5kcyhwLCZsbywm aGkpKSA8IDApIHsgLyogUGFyc2UgdGhlIGFycmF5IG5hbWUgKi8KKwlwcmludGYoIj9CYWQgYXJy YXkgcmVmZXJlbmNlIC0gXCIlc1wiXG4iLCBzKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBp ZiAobG8gPiAtMSB8fCBoaSA+IC0xKSB7CisJcHJpbnRmKCI/U29ycnksIHdob2xlIGFycmF5cyBv bmx5OiAlc1xuIixwKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAoeCA9PSB5KSB7CisJ Zm9yIChpID0gY21kbHZsOyBpID49IDA7IGktLSkKKwkgIGlmIChhYV9wdHJbaV1beF0pIHsKKwkg ICAgICBmbGFnKys7CisJICAgICAgYnJlYWs7CisJICB9CisgICAgfQorICAgIGlmIChmbGFnKSB7 CisJYV9wdHJbeF0gPSBhYV9wdHJbaV1beV07CS8qIExpbmsgdG8gc2F2ZWQgY29weSAqLworCWFf ZGltW3hdID0gYWFfZGltW2ldW3ldOworICAgIH0gZWxzZSB7CQkJCS8qIE90aGVyd2lzZS4uLiAq LworCWMgPSBhcnJheWl0b2EoeSk7CQkvKiBDaGVjayBpZiBpdCdzIGRlY2xhcmVkICovCisJaWYg KCFhX3B0clt5XSkgeworCSAgICBwcmludGYoIj9BcnJheSBpcyBub3QgZGVjbGFyZWQ6IFxcJiVj W11cbiIsIGMpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlpZiAoYV9saW5rW3ldID4gLTEpIHsJ CS8qIEFuZCBpZiBpdCdzIGEgbGluayBpdHNlbGYgKi8KKwkgICAgcHJpbnRmKCI/TGlua3MgdG8g bGlua3Mgbm90IGFsbG93ZWQ6IFxcJiVjW11cbiIsIGMpOworCSAgICByZXR1cm4oLTkpOworCX0K KwlhX3B0clt4XSA9IGFfcHRyW3ldOwkJLyogQWxsIE9LLCBtYWtlIHRoZSBsaW5rICovCisJYV9k aW1beF0gPSBhX2RpbVt5XTsKKyAgICB9CisgICAgYV9saW5rW3hdID0geTsKKyAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9DU0VUUwor c3RhdGljIGNoYXIgKiBkY3NldG5hbWUgPSBOVUxMOworCisvKiBHZXQgRGlzcGxheSBDaGFyYWN0 ZXItU2V0IE5hbWUgKi8KKworY2hhciAqCitnZXRkY3NldCgpIHsKKyAgICBjaGFyICogczsKKyAg ICBpbnQgeTsKKyNpZmRlZiBQQ0ZPTlRTCisgICAgZXh0ZXJuIGludCB0dF9mb250LCBudGVybWZv bnQ7CisgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdGVybV9mb250W107CisjZW5kaWYgLyogUENG T05UUyAqLworCisgICAgcyA9ICIiOworI2lmZGVmIE9TMgorICAgIHkgPSBvczJnZXRjcCgpOwkJ CS8qIERlZmF1bHQgaXMgY3VycmVudCBjb2RlIHBhZ2UgKi8KKyAgICBzd2l0Y2ggKHkpIHsKKyAg ICAgIGNhc2UgNDM3OiBzID0gImNwNDM3IjsgYnJlYWs7CisgICAgICBjYXNlIDg1MDogcyA9ICJj cDg1MCI7IGJyZWFrOworICAgICAgY2FzZSA4NTI6IHMgPSAiY3A4NTIiOyBicmVhazsKKyAgICAg IGNhc2UgODU3OiBzID0gImNwODU3IjsgYnJlYWs7CisgICAgICBjYXNlIDg1ODogcyA9ICJjcDg1 OCI7IGJyZWFrOworICAgICAgY2FzZSA4NjI6IHMgPSAiY3A4NjIiOyBicmVhazsKKyAgICAgIGNh c2UgODY2OiBzID0gImNwODY2IjsgYnJlYWs7CisgICAgICBjYXNlIDg2OTogcyA9ICJjcDg2OSI7 IGJyZWFrOworICAgICAgY2FzZSAxMjUwOiBzID0gImNwMTI1MCI7IGJyZWFrOworICAgICAgY2Fz ZSAxMjUxOiBzID0gImNwMTI1MSI7IGJyZWFrOworICAgICAgY2FzZSAxMjUyOiBzID0gImNwMTI1 MiI7IGJyZWFrOworICAgICAgY2FzZSAxMjUzOiBzID0gImNwMTI1MyI7IGJyZWFrOworICAgICAg Y2FzZSAxMjU0OiBzID0gImNwMTI1NCI7IGJyZWFrOworICAgICAgY2FzZSAxMjU1OiBzID0gImNw MTI1NSI7IGJyZWFrOworICAgICAgY2FzZSAxMjU2OiBzID0gImNwMTI1NiI7IGJyZWFrOworICAg ICAgY2FzZSAxMjU3OiBzID0gImNwMTI1NyI7IGJyZWFrOworICAgICAgY2FzZSAxMjU4OiBzID0g ImNwMTI1OCI7IGJyZWFrOworICAgIH0KKyNpZmRlZiBQQ0ZPTlRTCisvKgorICAgSWYgdGhlIHVz ZXIgaGFzIGxvYWRlZCBhIGZvbnQgd2l0aCBTRVQgVEVSTUlOQUwgRk9OVCB0aGVuIHdlIHdhbnQK KyAgIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjb2RlIHBhZ2UgdG8gdGhlIGZvbnQgdGhhdCB3YXMg bG9hZGVkLgorKi8KKyAgICBpZiAodHRfZm9udCAhPSBUVEZfUk9NKSB7CisJZm9yICh5ID0gMDsg eSA8IG50ZXJtZm9udDsgeSsrICkgeworCSAgICBpZiAodGVybV9mb250W3ldLmt3dmFsID09IHR0 X2ZvbnQpIHsKKwkJcyA9IHRlcm1fZm9udFt5XS5rd2Q7CisJCWJyZWFrOworCSAgICB9CisJfQor ICAgIH0KKyNlbmRpZiAvKiBQQ0ZPTlRTICovCisjZWxzZSAvKiBPUzIgKi8KKyNpZmRlZiBDT01N RU5UCisgICAgLyogSGFjayBub3QgbmVlZGVkIGFzIG9mIEMtS2VybWl0IDcuMSAqLworICAgIGlm IChmY2hhcnNldCA9PSBGQ18xTEFUSU4pIHsKKwlzID0gImxhdGluMS1pc28iOwkJLyogSGFjayB0 byBhdm9pZCByZXBvcnRpbmcgImNwMTI1MiIgKi8KKyAgICB9IGVsc2UgewkJCQkvKiBSZXBvcnQg Y3VycmVudCBmaWxlIGNoYXJhY3RlciBzZXQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisJZm9y ICh5ID0gMDsgeSA8PSBuZmlsYzsgeSsrKQorCSAgaWYgKGZjc3RhYlt5XS5rd3ZhbCA9PSBmY2hh cnNldCkgeworCSAgICAgIHMgPSBmY3N0YWJbeV0ua3dkOworCSAgICAgIGJyZWFrOworCSAgfQor I2lmZGVmIENPTU1FTlQKKyAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworI2VuZGlmIC8qIE9T MiAqLworICAgIG1ha2VzdHIoJmRjc2V0bmFtZSxzKTsJCS8qIFJldHVybiBzdGFibGUgcG9pbnRl ciAqLworICAgIHJldHVybigoY2hhciAqKWRjc2V0bmFtZSk7Cit9CisjZW5kaWYgLyogTk9DU0VU UyAqLworCisjaWZuZGVmIE5PRlJJTExTCitzdGF0aWMgaW50Citkb2NsZWFyKCkgeworICAgIGlm ICgoeCA9IGNta2V5KGNscnRhYixuY2xlYXIsIml0ZW0gdG8gY2xlYXIiLAorI2lmZGVmIE5PU1BM CisJCSAgICJkZXZpY2UtYnVmZmVyIgorI2Vsc2UKKwkJICAgImRldmljZS1hbmQtaW5wdXQiCisj ZW5kaWYgLyogTk9TUEwgKi8KKwkJICAgLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeCk7CisjaWZu ZGVmIE5PU1BMCisjaWZkZWYgT1MyCisgICAgaWYgKHggPT0gQ0xSX0NNRCB8fCB4ID09IENMUl9U Uk0pIHsKKwlpZiAoKHogPSBjbWtleShjbHJjbWR0YWIsbmNscmNtZCwiaG93IG11Y2ggc2NyZWVu IHRvIGNsZWFyXG4iLAorCQkgICAgICAgImFsbCIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4o eik7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PU1BMICovCisgICAgaWYg KCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworCisgICAgLyogQ2xlYXIgZGV2 aWNlIGlucHV0IGJ1ZmZlciBpZiByZXF1ZXN0ZWQgKi8KKyAgICB5ID0gKHggJiBDTFJfREVWKSA/ IHR0Zmx1aSgpIDogMDsKKworICAgIGlmICh4ICYgQ0xSX1NDUikJCQkvKiBDTEVBUiBTQ1JFRU4g Ki8KKyAgICAgIHkgPSBja19jbHMoKTsJCQkvKiAoPSBTQ1JFRU4gQ0xFQVIgPSBDTFMpICovCisK KyAgICBpZiAoeCAmIENMUl9LQkQpIHsJCQkvKiBDTEVBUiBLRVlCT0FSRCAqLworCWludCBuOwor CW4gPSBjb25jaGsoKTsKKwl5ID0gMDsKKwl3aGlsZSAobi0tID4gMCAmJiAoeSA9IGNvbmluYygw KSA+IC0xKSkKKwkgIDsKKwl5ID0gKHkgPiAtMSkgPyAwIDogLTE7CisgICAgfQorCisjaWZuZGVm IE5PU1BMCisgICAgLyogQ2xlYXIgSU5QVVQgY29tbWFuZCBidWZmZXIgaWYgcmVxdWVzdGVkICov CisgICAgaWYgKHggJiBDTFJfSU5QKSB7CisJZm9yICh6ID0gMDsgeiA8IGluYnVmc2l6ZTsgeisr KQorCSAgaW5wYnVmW3pdID0gTlVMOworCWlucGJwID0gaW5wYnVmOworCXkgPSAwOworICAgIH0K KyNpZmRlZiBDS19BUEMKKyAgICBpZiAoeCAmIENMUl9BUEMpIHsKKwlkZWJ1ZyhGMTAxLCJFeGVj dXRpbmcgQ0xFQVIgQVBDIiwiIixhcGNhY3RpdmUpOworCWFwY2FjdGl2ZSA9IDA7CisJeSA9IDA7 CisgICAgfQorI2VuZGlmIC8qIENLX0FQQyAqLworICAgIGlmICh4ICYgQ0xSX0FMUikgeworCXNl dGFsYXJtKDBMKTsKKwl5ID0gMDsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVm IFBBVFRFUk5TCisgICAgaWYgKHggJiAoQ0xSX1RYVHxDTFJfQklOKSkgeworCWludCBpOworCWZv ciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKKwkgICAgaWYgKHggJiBDTFJfVFhUKQor CSAgICAgIG1ha2VzdHIoJnR4dHBhdHRlcm5zW2ldLE5VTEwpOworCSAgICBpZiAoeCAmIENMUl9C SU4pCisJICAgICAgbWFrZXN0cigmYmlucGF0dGVybnNbaV0sTlVMTCk7CisJfQorCXkgPSAwOwor ICAgIH0KKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCisjaWZuZGVmIE5PRElBTAorICAgIGlmICh4 ICYgQ0xSX0RJQSkgeworCWRpYWxzdGEgPSBESUFfVU5LOworCXkgPSAwOworICAgIH0KKyNlbmRp ZiAvKiBOT0RJQUwgKi8KKworI2lmbmRlZiBOT01TRU5ECisgICAgaWYgKHggJiBDTFJfU0ZMKSB7 CQkJLyogQ0xFQVIgU0VORC1MSVNUICovCisJaWYgKGZpbGVoZWFkKSB7CisJICAgIHN0cnVjdCBm aWxlbGlzdCAqIGZscCwgKiBuZXh0OworCSAgICBmbHAgPSBmaWxlaGVhZDsKKwkgICAgd2hpbGUg KGZscCkgeworCQlpZiAoZmxwLT5mbF9uYW1lKQorCQkgIGZyZWUoZmxwLT5mbF9uYW1lKTsKKwkJ aWYgKGZscC0+ZmxfYWxpYXMpCisJCSAgZnJlZShmbHAtPmZsX2FsaWFzKTsKKwkJbmV4dCA9IGZs cC0+ZmxfbmV4dDsKKwkJZnJlZSgoY2hhciAqKWZscCk7CisJCWZscCA9IG5leHQ7CisJICAgIH0K Kwl9CisJZmlsZXNpbmxpc3QgPSAwOworCWZpbGVoZWFkID0gTlVMTDsKKwlmaWxldGFpbCA9IE5V TEw7CisJYWRkbGlzdCA9IDA7CisJeSA9IDA7CisgICAgfQorI2VuZGlmIC8qIE5PTVNFTkQgKi8K KworI2lmZGVmIE9TMgorI2lmbmRlZiBOT0xPQ0FMCisgICAgc3dpdGNoICh4KSB7CisgICAgICBj YXNlIENMUl9TQ0w6CisJY2xlYXJzY3JvbGxiYWNrKFZURVJNKTsKKwlicmVhazsKKyAgICAgIGNh c2UgQ0xSX0NNRDoKKwlzd2l0Y2ggKCB6ICkgeworCSAgY2FzZSBDTFJfQ19BTEw6CisJICAgIGNs ZWFyKCk7CisJICAgIGJyZWFrOworCSAgY2FzZSBDTFJfQ19CT1M6CisJICAgIGNscmJvc2NyX2Vz Y2FwZShWQ01ELFNQKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIENMUl9DX0JPTDoKKwkgICAgY2xy Ym9sX2VzY2FwZShWQ01ELFNQKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIENMUl9DX0VPTDoKKwkg ICAgY2xydG9lb2xuKFZDTUQsU1ApOworCSAgICBicmVhazsKKwkgIGNhc2UgQ0xSX0NfRU9TOgor CSAgICBjbHJlb3Njcl9lc2NhcGUoVkNNRCxTUCk7CisJICAgIGJyZWFrOworCSAgY2FzZSBDTFJf Q19MSU46CisJICAgIGNscmxpbmVfZXNjYXBlKFZDTUQsU1ApOworCSAgICBicmVhazsKKwkgIGNh c2UgQ0xSX0NfU0NSOgorCSAgICBjbGVhcnNjcm9sbGJhY2soVkNNRCk7CisJICAgIGJyZWFrOwor CWRlZmF1bHQ6CisJICAgIHByaW50ZigiTm90IGltcGxlbWVudGVkIHlldCwgc29ycnkuXG4iKTsK KwkgICAgYnJlYWs7CisJfQorCWJyZWFrOworCisjaWZuZGVmIE5PVEVSTQorICAgICAgY2FzZSBD TFJfVFJNOgorCSBzd2l0Y2ggKCB6ICkgeworCSAgY2FzZSBDTFJfQ19BTEw6CisJICAgICBpZiAo VnNjcm5HZXRCdWZmZXJTaXplKFZURVJNKSA+IDAgKSB7CisJCSBWc2NyblNjcm9sbChWVEVSTSwg VVBXQVJELCAwLAorCQkJICAgICBWc2NybkdldEhlaWdodChWVEVSTSktKHR0X3N0YXR1c1tWVEVS TV0/MjoxKSwKKwkJCSAgICAgVnNjcm5HZXRIZWlnaHQoVlRFUk0pIC0KKwkJCSAgICAgKHR0X3N0 YXR1c1tWVEVSTV0/MTowKSwgVFJVRSwgU1AKKwkJCSAgICAgKTsKKwkJIGNsZWFydGVybXNjcmVl bihWVEVSTSk7CisJICAgICB9CisJICAgICBicmVhazsKKwkgIGNhc2UgQ0xSX0NfQk9TOgorCSAg ICBjbHJib3Njcl9lc2NhcGUoVlRFUk0sU1ApOworCSAgICBicmVhazsKKwkgIGNhc2UgQ0xSX0Nf Qk9MOgorCSAgICBjbHJib2xfZXNjYXBlKFZURVJNLFNQKTsKKwkgICAgYnJlYWs7CisJICBjYXNl IENMUl9DX0VPTDoKKwkgICAgY2xydG9lb2xuKFZURVJNLFNQKTsKKwkgICAgYnJlYWs7CisJICBj YXNlIENMUl9DX0VPUzoKKwkgICAgY2xyZW9zY3JfZXNjYXBlKFZURVJNLFNQKTsKKwkgICAgYnJl YWs7CisJICBjYXNlIENMUl9DX0xJTjoKKwkgICAgY2xybGluZV9lc2NhcGUoVlRFUk0sU1ApOwor CSAgICBicmVhazsKKwkgY2FzZSBDTFJfQ19TQ1I6CisJICAgICBjbGVhcnNjcm9sbGJhY2soVlRF Uk0pOworCSAgICAgYnJlYWs7CisJIGRlZmF1bHQ6CisJICAgICBwcmludGYoIk5vdCBpbXBsZW1l bnRlZCB5ZXQsIHNvcnJ5LlxuIik7CisJICAgICBicmVhazsKKwl9CisJYnJlYWs7CisjZW5kaWYg LyogTk9URVJNICovCisgICAgfQorICAgIHkgPSAwOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm4oc3VjY2VzcyA9ICh5ID09IDApKTsKK30KKyNlbmRp ZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PU1BMCitzdGF0aWMgaW50Citkb2V2YWwoY3gp IGludCBjeDsgeworICAgIGNoYXIgKnA7CisgICAgY2hhciB2bmFtYnVmW1ZOQU1MXSwgKiB2bnAg PSBOVUxMOwkvKiBUaGVzZSBtdXN0IGJlIG9uIHRoZSBzdGFjayAqLworICAgIGlmICghb2xkZXZh bCkgeworCWlmICgoeSA9IGNtZmxkKCJWYXJpYWJsZSBuYW1lIiwiIiwmcywKKwkJICAgICAgICgo Y3ggPT0gWFhfRVZBTCkgPyB4eHN0cmluZyA6IE5VTEwpKSkgPCAwKSB7CisJICAgIGlmICh5ID09 IC0zKSB7CisJCXByaW50ZigiP1ZhcmlhYmxlIG5hbWUgcmVxdWlyZWRcbiIpOworCQlyZXR1cm4o LTkpOworCSAgICB9IGVsc2UgcmV0dXJuKHkpOworCX0KKwlja3N0cm5jcHkodm5hbWJ1ZixzLFZO QU1MKTsJLyogTWFrZSBhIGNvcHkuICovCisJdm5wID0gdm5hbWJ1ZjsKKwlpZiAodm5hbWJ1Zlsw XSA9PSBDTURRICYmCisJICAgICh2bmFtYnVmWzFdID09ICclJyB8fCB2bmFtYnVmWzFdID09ICcm JykpCisJICB2bnArKzsKKwl5ID0gMDsKKwlpZiAoKnZucCA9PSAnJScgfHwgKnZucCA9PSAnJicp IHsKKwkgICAgaWYgKCh5ID0gcGFyc2V2YXIodm5wLCZ4LCZ6KSkgPCAwKQorCSAgICAgIHJldHVy bih5KTsKKwl9CisgICAgfQorICAgIGlmICgoeCA9IGNtdHh0KCJJbnRlZ2VyIGFyaXRobWV0aWMg ZXhwcmVzc2lvbiIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAg cCA9IGV2YWxhKHMpOworICAgIGlmICghcCkgcCA9ICIiOworICAgIGlmIChvbGRldmFsICYmICpw KQorICAgICAgcHJpbnRmKCIlc1xuIiwgcCk7CisgICAgY2tzdHJuY3B5KGV2YWxidWYscCwzMik7 CisgICAgaWYgKCFvbGRldmFsKQorICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBhZGRtYWModm5hbWJ1 ZixwKSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAqcCA/IDEgOiAwKTsKK30K KyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZkZWYgVE5DT0RFCitzdGF0aWMgaW50Citkb3RlbG9w dCgpIHsKKyAgICBpZiAoKHggPSBjbWtleSh0ZWxjbWQsIG50ZWxjbWQsICJURUxORVQgY29tbWFu ZCIsICIiLCB4eHN0cmluZykpIDwgMCApCisgICAgICByZXR1cm4oeCk7CisgICAgc3dpdGNoICh4 KSB7CisgICAgICBjYXNlIFdJTEw6CisgICAgICBjYXNlIFdPTlQ6CisgICAgICBjYXNlIERPOgor ICAgICAgY2FzZSBET05UOgorCWlmICgoeSA9IGNta2V5KHRub3B0cyxudG5vcHRzLCJURUxORVQg b3B0aW9uIiwiIix4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih5KTsKKwlpZiAoKHogPSBjbWNm bSgpKSA8IDApIHJldHVybih6KTsKKworCXN3aXRjaCAoeCkgeworCSAgY2FzZSBXSUxMOgorCSAg ICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfV0lMTCh5KSkKKwkgICAgICByZXR1cm4oc3VjY2VzcyA9 IDApOworCSAgICBicmVhazsKKwkgIGNhc2UgV09OVDoKKwkgICAgaWYgKFRFTE9QVF9VTkFOU1dF UkVEX1dPTlQoeSkpCisJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKwkgICAgYnJlYWs7CisJ ICBjYXNlIERPOgorCSAgICBpZiAoVEVMT1BUX1VOQU5TV0VSRURfRE8oeSkpCisJICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIERPTlQ6CisJICAgIGlmIChU RUxPUFRfVU5BTlNXRVJFRF9ET05UKHkpKQorCSAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisJ ICAgIGJyZWFrOworCX0KKwlpZiAobG9jYWwpIHsKKwkgICAgc3VjY2VzcyA9ICgodG5fc29wdCh4 LHkpID4gLTEpID8gMSA6IDApOworCX0gZWxzZSB7CisJICAgIHByaW50ZigiZmYlMDJ4JTAyeFxu Iix4LHkpOworCSAgICBzdWNjZXNzID0gMTsKKwl9CisJaWYgKHN1Y2Nlc3MpIHsKKwkgICAgc3dp dGNoICh4KSB7CisJICAgICAgY2FzZSBXSUxMOgorCQlURUxPUFRfVU5BTlNXRVJFRF9XSUxMKHkp ID0gMTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBXT05UOgorCQlpZiAoIFRFTE9QVF9NRSh5KSAp CisJCSAgVEVMT1BUX1VOQU5TV0VSRURfV09OVCh5KSA9IDE7CisJCWJyZWFrOworCSAgICAgIGNh c2UgRE86CisJCVRFTE9QVF9VTkFOU1dFUkVEX0RPKHkpID0gMTsKKwkJYnJlYWs7CisJICAgICAg Y2FzZSBET05UOgorCQlpZiAoIFRFTE9QVF9NRSh5KSApCisJCSAgVEVMT1BUX1VOQU5TV0VSRURf RE9OVCh5KSA9IDE7CisJCWJyZWFrOworCSAgICB9CisJICAgIGlmICh0bl93YWl0KCJYWFRFTE9Q IikgPCAwKSB7CisJCXRuX3B1c2goKTsKKwkJc3VjY2VzcyA9IDA7CisJICAgIH0KKwl9CisJcmV0 dXJuKHN1Y2Nlc3MpOworICAgICAgY2FzZSBTQjoKKwlpZiAoKHk9Y21rZXkodG5zYm9wdHMsbnRu c2JvcHRzLCJURUxORVQgb3B0aW9uIiwiIix4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih5KTsK Kwlzd2l0Y2ggKHkpIHsKKwkgIGNhc2UgVEVMT1BUX05BV1M6CisJICAgIC8qIFNvbWUgY29tcGls ZXJzIHJlcXVpcmUgc3dpdGNoKCkgdG8gaGF2ZSBhdCBsZWFzdCAxIGNhc2UgKi8KKyNpZmRlZiBD S19OQVdTCisJICAgIFRFTE9QVF9TQihURUxPUFRfTkFXUykubmF3cy54ID0gMDsKKwkgICAgVEVM T1BUX1NCKFRFTE9QVF9OQVdTKS5uYXdzLnkgPSAwOworCSAgICBpZiAobG9jYWwpCisJICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAoKHRuX3NuYXdzKCkgPiAtMSkgPyAxIDogMCkpOworCSAgICBlbHNl CisJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbHNlCisJICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisjZW5kaWYgLyogQ0tfTkFXUyAqLworCX0KKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKKworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNQorICAgICAgY2FzZSBUTl9G V0Q6CisgICAgICAgIHN1Y2Nlc3MgPSAoa2VyYmVyb3M1X2ZvcndhcmQoKSA9PSBBVVRIX1NVQ0NF U1MpOworICAgICAgICByZXR1cm4oc3VjY2Vzcyk7CisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlm IC8qIENLX0tFUkJFUk9TICovCisKKyAgICAgIGRlZmF1bHQ6CisJaWYgKCh6ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeik7CisjaWZuZGVmIE5PTE9DQUwKKwlpZiAobG9jYWwpIHsKKwkgICAgQ0hB UiB0ZW1wWzNdOworCSAgICBpZiAobmV0d29yayAmJiBJU19URUxORVQoKSkgeyAvKiBURUxORVQg Ki8KKwkJdGVtcFswXSA9IChDSEFSKSBJQUM7CisJCXRlbXBbMV0gPSB4OworCQl0ZW1wWzJdID0g TlVMOworCQlzdWNjZXNzID0gKHR0b2woKENIQVIgKil0ZW1wLDIpID4gLTEgPyAxIDogMCk7CisJ CWlmICh0bl9kZWIgfHwgZGVic2VzIHx8IGRlYmxvZykgeworCQkgICAgLyogVE5fTVNHX0xFTiBp cyBpbiBja2N0ZWwuaCAqLworCQkgICAgY2ttYWttc2codG5fbXNnLDI1NiwiVEVMTkVUIFNFTlQg IixURUxDTUQoeCksTlVMTCxOVUxMKTsKKwkJICAgIGRlYnVnKEYxMDEsdG5fbXNnLCIiLHgpOwor CQkgICAgaWYgKGRlYnNlcyB8fCB0bl9kZWIpIHRuX2RlYnVnKHRuX21zZyk7CisJCX0KKwkJcmV0 dXJuKHN1Y2Nlc3MpOworCSAgICB9CisgICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor CX0gZWxzZSB7CisjZW5kaWYgLyogTk9MT0NBTCAqLworCSAgICBwcmludGYoImZmJTAyeFxuIix4 KTsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyNpZm5kZWYgTk9MT0NBTAorCX0KKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisgICAgfQorfQorI2VuZGlmIC8qIFROQ09ERSAqLworCisKKyNpZm5k ZWYgTk9QVVNICisjaWZuZGVmIE5PRlJJTExTCitzdGF0aWMgaW50Citkb2VkaXQoKSB7CisjaWZk ZWYgT1MyCisgICAgY2hhciAqIHAgPSBOVUxMOworI2VuZGlmIC8qIE9TMiAqLworICAgIGlmICgh ZWRpdG9yWzBdKSB7CisJcyA9IGdldGVudigiRURJVE9SIik7CisJaWYgKHMpIGNrc3RybmNweShl ZGl0b3IscyxDS01BWFBBVEgpOworCWVkaXRvcltDS01BWFBBVEhdID0gTlVMOworCWlmICghZWRp dG9yWzBdKSB7CisJICAgIHByaW50ZigiP0VkaXRvciBub3QgZGVmaW5lZCAtIHVzZSBTRVQgRURJ VE9SIHRvIGRlZmluZVxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorICAgIH0KKyAgICBja3N0 cm5jcHkodG1wYnVmLGVkaXRmaWxlLFRNUEJVRlNJWik7CisvKgorICBjbWlvZmkoKSBsZXRzIHVz IHBhcnNlIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZpbGUsIG9yIHRoZSBuYW1lIG9mCisgIGEg bm9uZXhpc3RlbnQgZmlsZSB0byBiZSBjcmVhdGVkLgorKi8KKyAgICB4ID0gY21pb2ZpKCJGaWxl IHRvIGVkaXQiLCAoY2hhciAqKXRtcGJ1ZiwgJnMsICZ5LCB4eHN0cmluZyk7CisgICAgZGVidWco RjExMSwiZWRpdCIscyx4KTsKKyAgICBpZiAoeCA8IDAgJiYgeCAhPSAtMykKKyAgICAgIHJldHVy bih4KTsKKyAgICBpZiAoeCA9PSAtMykgeworCXRtcGJ1ZlswXSA9IE5VTDsKKyAgICB9IGVsc2Ug eworCWNrc3RybmNweSh0bXBidWYscyxUTVBCVUZTSVopOworICAgIH0KKyAgICBpZiAoKHogPSBj bWNmbSgpKSA8IDApIHJldHVybih6KTsKKyAgICBpZiAoeSkgeworCXByaW50ZigiP0Egc2luZ2xl IGZpbGUgcGxlYXNlXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0KKyAgICBpZiAobm9wdXNoKSB7 CisJcHJpbnRmKCI/U29ycnksIGVkaXRpbmcgbm90IGFsbG93ZWRcbiIpOworCXJldHVybihzdWNj ZXNzID0gMCk7CisgICAgfQorICAgIGlmICh0bXBidWZbMF0pIHsKKyAgICAvKiBHZXQgZnVsbCBw YXRoIGluIGNhc2Ugd2UgY2hhbmdlIGRpcmVjdG9yaWVzIGJldHdlZW4gRURJVCBjb21tYW5kcyAq LworCXpmbnFmcCh0bXBidWYsIENLTUFYUEFUSCwgZWRpdGZpbGUpOworCWVkaXRmaWxlW0NLTUFY UEFUSF0gPSBOVUw7CisjaWZkZWYgT1MyCisJcCA9IGVkaXRmaWxlOwkJCS8qIEZsaXAgdGhlIHN0 dXBpZCBzbGFzaGVzICovCisJd2hpbGUgKCpwKSB7CisJICAgIGlmICgqcCA9PSAnLycpICpwID0g J1xcJzsKKwkgICAgcCsrOworCX0KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9IGVsc2UKKyAgICAg IGVkaXRmaWxlWzBdID0gTlVMOworICAgIGlmIChlZGl0ZmlsZVswXSkgeworCWlmICh6Y2hraShl ZGl0ZmlsZSkgPCAoQ0tfT0ZGX1QpMCAmJiB6Y2hrbyhlZGl0ZmlsZSkgPCAwKSB7CisJICAgIHBy aW50ZigiP0FjY2VzcyBkZW5pZWQ6ICVzXG4iLGVkaXRmaWxlKTsKKwkgICAgcmV0dXJuKC05KTsK Kwl9CisgICAgfQorICAgIHggPSAwOworICAgIGlmIChlZGl0b3B0c1swXSkgeworI2lmZGVmIE9T MgorCXggPSBja2luZGV4KCIlMSIsKGNoYXIgKillZGl0b3B0cywwLDAsMSk7CisJaWYgKHggPiAw KQorCSAgZWRpdG9wdHNbeF0gPSAncyc7CisJZWxzZQorI2VuZGlmIC8qIE9TMiAqLworCSAgeCA9 IGNraW5kZXgoIiVzIiwoY2hhciAqKWVkaXRvcHRzLDAsMCwxKTsKKyAgICB9CisgICAgaWYgKCgo aW50KXN0cmxlbihlZGl0b3B0cykgKyAoaW50KXN0cmxlbihlZGl0ZmlsZSkgKyAxKSA8IFRNUEJV RlNJWikgeworCWlmICh4KQorCSAgc3ByaW50Zih0bXBidWYsZWRpdG9wdHMsZWRpdGZpbGUpOwor CWVsc2UKKwkgIHNwcmludGYodG1wYnVmLCIlcyAlcyIsZWRpdG9wdHMsZWRpdGZpbGUpOworICAg IH0KKyAgICBzID0gbGluZTsKKyAgICBja21ha21zZyhzLExJTkJVRlNJWixlZGl0b3IsIiAiLHRt cGJ1ZixOVUxMKTsKKyNpZmRlZiBPUzIKKyAgICBwID0gcyArIHN0cmxlbihlZGl0b3IpOwkJLyog QW5kIGFnYWluIHdpdGggdGhlIHNsYXNoZXMgKi8KKyAgICB3aGlsZSAocCAhPSBzKSB7CisJaWYg KCpwID09ICcvJykgKnAgPSAnXFwnOworCXAtLTsKKyAgICB9CisjZW5kaWYgLyogT1MyICovCisg ICAgY29ucmVzKCk7CisgICAgeCA9IHpzaGNtZChzKTsKKyAgICBjb25jYigoY2hhcillc2NhcGUp OworICAgIHJldHVybih4KTsKK30KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworI2VuZGlmIC8qIE5P UFVTSCAqLworCisjaWZkZWYgQlJPV1NFUgorc3RhdGljIGludAorZG9icm93c2UoKSB7CisjaWZk ZWYgT1MyCisgICAgY2hhciAqIHAgPSBOVUxMOworI2VuZGlmIC8qIE9TMiAqLworICAgIGlmIChu b3B1c2gpIHsKKwlwcmludGYoIj9Tb3JyeSwgYnJvd3Npbmcgbm90IGFsbG93ZWRcbiIpOworCXJl dHVybihzdWNjZXNzID0gMCk7CisgICAgfQorI2lmbmRlZiBOVAorICAgIC8qIFdpbmRvd3MgbGV0 cyB0aGUgU2hlbGwgRXhlY3V0ZSB0aGUgVVJMIGlmIG5vIEJyb3dzZXIgaXMgZGVmaW5lZCAqLwor ICAgIGlmICghYnJvd3NlclswXSkgeworCXMgPSBnZXRlbnYoIkJST1dTRVIiKTsKKwlpZiAocykg Y2tzdHJuY3B5KGJyb3dzZXIscyxDS01BWFBBVEgpOworCWJyb3dzZXJbQ0tNQVhQQVRIXSA9IE5V TDsKKwlpZiAoIWJyb3dzZXJbMF0pIHsKKwkgICAgcHJpbnRmKCI/QnJvd3NlciBub3QgZGVmaW5l ZCAtIHVzZSBTRVQgQlJPV1NFUiB0byBkZWZpbmVcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0K KyAgICB9CisjZW5kaWYgLyogTlQgKi8KKyAgICBja3N0cm5jcHkodG1wYnVmLGJyb3dzdXJsLFRN UEJVRlNJWik7CisgICAgaWYgKCh4ID0gY210eHQoIlVSTCIsKGNoYXIgKilicm93c3VybCwmcyx4 eHN0cmluZykpIDwgMCkKKyAgICAgIHJldHVybih4KTsKKyAgICBja3N0cm5jcHkoYnJvd3N1cmws cyw0MDk2KTsKKyAgICB4ID0gMDsKKyAgICBpZiAoYnJvd3NvcHRzWzBdKSB7CisjaWZkZWYgT1My CisJeCA9IGNraW5kZXgoIiUxIiwoY2hhciAqKWJyb3dzb3B0cywwLDAsMSk7CisJaWYgKHggPiAw KQorCSAgYnJvd3NvcHRzW3hdID0gJ3MnOworCWVsc2UKKyNlbmRpZiAvKiBPUzIgKi8KKwkgIHgg PSBja2luZGV4KCIlcyIsKGNoYXIgKilicm93c29wdHMsMCwwLDEpOworICAgIH0KKyAgICBpZiAo KChpbnQpc3RybGVuKGJyb3dzb3B0cykgKyAoaW50KXN0cmxlbihicm93c3VybCkgKyAxKSA8IFRN UEJVRlNJWikgeworCWlmICh4KQorCSAgc3ByaW50Zih0bXBidWYsYnJvd3NvcHRzLGJyb3dzdXJs KTsKKwllbHNlCisJICBzcHJpbnRmKHRtcGJ1ZiwiJXMgJXMiLGJyb3dzb3B0cyxicm93c3VybCk7 CisgICAgfQorI2lmZGVmIE5UCisgICAgaWYgKCFicm93c2VyWzBdKQorICAgICAgcmV0dXJuKHN1 Y2Nlc3MgPSBXaW4zMlNoZWxsRXhlY3V0ZShicm93c3VybCkpOworI2VuZGlmIC8qIE5UICovCisg ICAgcyA9IGxpbmU7CisgICAgY2ttYWttc2cocyxMSU5CVUZTSVosYnJvd3NlciwiICIsdG1wYnVm LE5VTEwpOworI2lmZGVmIE9TMgorICAgIHAgPSBsaW5lICsgc3RybGVuKGJyb3dzZXIpOwkJLyog RmxpcCBzbGFzaGVzICovCisgICAgd2hpbGUgKHAgIT0gbGluZSkgeworCWlmICgqcCA9PSAnLycp ICpwID0gJ1xcJzsKKwlwLS07CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworICAgIGNvbnJlcygp OworICAgIHggPSB6c2hjbWQocyk7CisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKKyAgICByZXR1 cm4oeCk7Cit9CisjZW5kaWYgLyogQlJPV1NFUiAqLworCisjaWZkZWYgQ0tfUkVDQUxMCitzdGF0 aWMgaW50Citkb3JlZG8oKSB7CQkJLyogRmluZCBhIHByZXZpb3VzIGNtZCBhbmQgcmVkbyBpdCAq LworICAgIGV4dGVybiBpbnQgb25fcmVjYWxsLCBpbl9yZWNhbGw7CisgICAgaW50IHg7CisgICAg Y2hhciAqIHA7CisKKyAgICBpZiAoKHggPSBjbXR4dCgKKyJwYXR0ZXJuLCBvciBmaXJzdCBmZXcg Y2hhcmFjdGVycyBvZiBhIHByZXZpb3VzIGNvbW1hbmQiLAorCQkgICAiKiIsJnMseHhzdHJpbmcp KSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVop OworICAgIHggPSBzdHJsZW4ocyk7CisgICAgcyA9IGxpbmU7CisgICAgaWYgKCpzID09ICd7Jykg ewkJCS8qIEJyYWNlcyBkaXNhYmxlIGFkZGluZyAqIHRvIGVuZCAqLworCWlmIChzW3gtMV0gPT0g J30nKSB7CisJICAgIHNbeC0xXSA9IE5VTDsKKwkgICAgcysrOworCSAgICB4LS07CisJfQorICAg IH0gZWxzZSB7CQkJCS8qIE5vIGJyYWNlcywgYWRkICogdG8gZW5kLiAqLworCXNbeF0gPSAnKic7 CisJc1t4KzFdID0gTlVMOworICAgIH0KKworICAgIHdoaWxlICh4ID4gMCAmJiBzW3hdID09ICcq JyAmJiBzW3gtMV0gPT0gJyonKSBzW3gtLV0gPSBOVUw7CisKKyAgICBpZiAoIW9uX3JlY2FsbCB8 fCAhaW5fcmVjYWxsKSB7CisJcHJpbnRmKCI/U29ycnksIGNvbW1hbmQgcmVjYWxsIGNhbid0IGJl IHVzZWQgbm93LlxuIik7CisJcmV0dXJuKC05KTsKKyAgICB9CisgICAgaWYgKChwID0gY21nZXRj bWQocykpKSB7CQkvKiBMb29rIGZvciBpdCBoaXN0b3J5IGJ1ZmZlciAqLworCWNrbWFrbXNnKGNt ZGJ1ZixDTURCTCxwLCJcciIsTlVMTCxOVUxMKTsgLyogQ29weSB0byBjb21tYW5kIGJ1ZmZlciAq LworCWlmICghcXVpZXQpCQkJLyogRWNobyBpdCAqLworCSAgcHJpbnRmKCIlc1xuIixjbWRidWYp OworCWNtYWRkbmV4dCgpOwkJCS8qIEZvcmNlIHJlLWFkZCB0byBoaXN0b3J5IGJ1ZmZlciAqLwor CXJldHVybihjbWZsZ3MgPSAtMSk7CQkvKiBGb3JjZSByZXBhcnNlICovCisgICAgfSBlbHNlIHsK KwlwcmludGYoIj9Tb3JyeSAtIFwiJXNcIiBub3QgZm91bmRcbiIsIHMpOworCXJldHVybigtOSk7 CisgICAgfQorfQorI2VuZGlmIC8qIENLX1JFQ0FMTCAqLworCisjaWZuZGVmIE5PWEZFUgorI2lm bmRlZiBOT0NTRVRTCitzdGF0aWMgaW50Citkb2Fzc29jKCkgIHsJCQkJLyogQVNTT0NJQVRFICov CisgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdGNzdGFiW107CisgICAgZXh0ZXJuIGludCBudGNz OworICAgIGlmICgoeCA9IGNta2V5KGFzc29jdGFiLCBuYXNzb2MsICIiLCAiIiwgeHhzdHJpbmcp KSA8IDAgKQorICAgICAgcmV0dXJuKHgpOworCisgICAgc3dpdGNoICh4KSB7CQkJLyogQXNzb2Np YXRlIHdoYXQ/ICovCisKKyAgICAgIGNhc2UgQVNTT0NfVEM6CQkJLyogVHJhbnNmZXIgY2hhcmFj dGVyLXNldC4uLiAqLworCWlmICgoeCA9IGNta2V5KHRjc3RhYiwgbnRjcywKKwkJICAgICAgICJ0 cmFuc2ZlciBjaGFyYWN0ZXItc2V0IG5hbWUiLCIiLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJu KHgpOworCWlmICgoeSA9IGNta2V5KGZjc3RhYiwgbmZpbGMsCisJCSAgICAgICAid2l0aCBmaWxl IGNoYXJhY3Rlci1zZXQiLCIiLCB4eHN0cmluZykpIDwgMCkKKwkgIGlmICh5ICE9IC0zKQorCSAg ICByZXR1cm4oeSk7CisJaWYgKCh6ID0gY21jZm0oKSkgPCAwKQorCSAgcmV0dXJuKHopOworCWF4 Y3NldFt4XSA9IHk7CisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworICAgICAgY2FzZSBBU1NPQ19G QzoJCQkvKiBGaWxlIGNoYXJhY3Rlci1zZXQuLi4gKi8KKwlpZiAoKHggPSBjbWtleShmY3N0YWIs IG5maWxjLAorCQkgICAgICAgImZpbGUgY2hhcmFjdGVyLXNldCBuYW1lIiwiIix4eHN0cmluZykp IDwgMCkKKwkgIHJldHVybih4KTsKKwlpZiAoKHkgPSBjbWtleSh0Y3N0YWIsIG50Y3MsCisJCSAg ICAgICAid2l0aCB0cmFuc2ZlciBjaGFyYWN0ZXItc2V0IiwiIiwgeHhzdHJpbmcpKSA8IDApCisJ ICBpZiAoeSAhPSAtMykKKwkgICAgcmV0dXJuKHkpOworCWlmICgoeiA9IGNtY2ZtKCkpIDwgMCkK KwkgIHJldHVybih6KTsKKwlhZmNzZXRbeF0gPSB5OworCXJldHVybihzdWNjZXNzID0gMSk7CisK KyAgICAgIGRlZmF1bHQ6CisJcmV0dXJuKC0yKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTk9DU0VU UyAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PSEVMUAorc3RhdGljIGludAor ZG9tYW51YWwoKSB7CisjaWZkZWYgT1MyCisgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorICAg ICAgcmV0dXJuKHgpOworICAgIGlmIChub3B1c2gpIHsKKwlwcmludGYoIj9Tb3JyeSwgYWNjZXNz IHRvIHN5c3RlbSBjb21tYW5kcyBpcyBkaXNhYmxlZC5cbiIpOworCXJldHVybigtOSk7CisgICAg fQorICAgIHkgPSBteGxvb2sobWFjdGFiLCJtYW51YWwiLG5tYWMpOworICAgIGlmICh5ID4gLTEp IHsKKwl6ID0gbWFjbHZsOwkJCS8qIFNhdmUgdGhlIGN1cnJlbnQgbWFjbHZsICovCisJZG9kbyh5 LE5VTEwsY21kc3RrW2NtZGx2bF0uY2NmbGdzKTsgLyogUnVuIHRoZSBtYWNybyAqLworCXdoaWxl IChtYWNsdmwgPiB6KSB7CisJICAgIGRlYnVnKEYxMDEsIlhYTUFOIGxvb3AgbWFjbHZsIDEiLCIi LG1hY2x2bCk7CisJICAgIHNzdGF0ZSA9IChDSEFSKSBwYXJzZXIoMSk7CisJICAgIGRlYnVnKEYx MDEsIlhYTUFOIGxvb3AgbWFjbHZsIDIiLCIiLG1hY2x2bCk7CisJICAgIGlmIChzc3RhdGUpIHBy b3RvKCk7CisJfQorCWRlYnVnKEYxMDEsIlhYTUFOIGxvb3AgZXhpdCBtYWNsdmwiLCIiLG1hY2x2 bCk7CisJcmV0dXJuKHN1Y2Nlc3MpOworICAgIH0KKyAgICByZXR1cm4oc3VjY2VzcyA9IDApOwor I2Vsc2UKKyAgICBpZiAoKHggPSBjbXR4dCgKKyNpZmRlZiBVTklYCisJCSAgICJDYXJyaWFnZSBy ZXR1cm4gdG8gY29uZmlybSB0aGUgY29tbWFuZCwgb3IgbWFudWFsIHRvcGljIiwKKyNlbHNlCisJ CSAgICJDYXJyaWFnZSByZXR1cm4gdG8gY29uZmlybSB0aGUgY29tbWFuZCwgb3IgaGVscCB0b3Bp YyIsCisjZW5kaWYgLyogVU5JWCAqLworCQkgICAia2VybWl0IiwKKwkJICAgJnMsCisJCSAgIHh4 c3RyaW5nCisJCSAgICkKKwkgKSA8IDApCisgICAgICByZXR1cm4oeCk7CisjZW5kaWYgLyogT1My ICovCisKKyNpZmRlZiBVTklYCisgICAgY2ttYWttc2codG1wYnVmLFRNUEJVRlNJWiwibWFuICIs cyxOVUxMLE5VTEwpOworI2Vsc2UKKyAgICBja21ha21zZyh0bXBidWYsVE1QQlVGU0laLCJoZWxw ICIscyxOVUxMLE5VTEwpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICBkZWJ1ZyhGMTEwLCJNQU5V QUwiLHRtcGJ1ZiwwKTsKKyAgICBpZiAobm9wdXNoKSB7CisJcHJpbnRmKCI/U29ycnksIGFjY2Vz cyB0byBzeXN0ZW0gY29tbWFuZHMgaXMgZGlzYWJsZWQuXG4iKTsKKwlyZXR1cm4oLTkpOworICAg IH0gZWxzZSB7CisJY29ucmVzKCk7CQkJLyogUmVzdG9yZSB0aGUgY29uc29sZSAqLworCXN1Y2Nl c3MgPSB6c2hjbWQodG1wYnVmKTsKKwljb25jYigoY2hhcillc2NhcGUpOwkJLyogUmVzdG9yZSBD QlJFQUsgbW9kZSAqLworCXJldHVybihzdWNjZXNzKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTk9I RUxQICovCisKKyNpZm5kZWYgTk9IVFRQCisjaWZkZWYgVENQU09DS0VUCitzdGF0aWMgc3RydWN0 IGtleXRhYiBzc2xzd3RhYltdID0geworICAgIHsgIi9zc2wiLCAxLCAwIH0sCisgICAgeyAiL3Rs cyIsIDEsIDAgfQorfTsKKworI2lmbmRlZiBOT1VSTAorc3RydWN0IHVybGRhdGEgaHR0cF91cmwg PSB7TlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTH07CisjZW5kaWYgLyogTk9VUkwg Ki8KKworc3RhdGljIGludAorZG9odHRwKCkgewkJCQkvKiBIVFRQICovCisgICAgc3RydWN0IEZE QiBzdywga3csIGZpOworICAgIGludCBuLCBnZXR2YWwsIGFsbGlub25lID0gMDsKKyAgICBjaGFy IGMsICogcDsKKyAgICBjaGFyIHJkbnNbMTI4XTsKKworICAgIGNoYXIgKiBodHRwX2FnZW50ID0g TlVMTDsJCS8qIFBhcnNlIHJlc3VsdHMgKi8KKyAgICBjaGFyICogaHR0cF9oZHIgICA9IE5VTEw7 CisgICAgY2hhciAqIGh0dHBfdXNlciAgPSBOVUxMOworICAgIGNoYXIgKiBodHRwX3Bhc3MgID0g TlVMTDsKKyAgICBjaGFyICogaHR0cF9taW1lICA9IE5VTEw7CisgICAgY2hhciAqIGh0dHBfbGZp bGUgPSBOVUxMOworICAgIGNoYXIgKiBodHRwX3JmaWxlID0gTlVMTDsKKyAgICBjaGFyICogaHR0 cF9kZmlsZSA9IE5VTEw7CisgICAgY2hhciAgIGh0dHBfYXJyYXkgPSBOVUw7CisgICAgaW50ICAg IGh0dHBfYWN0aW9uID0gLTE7CisKKyAgICBjaGFyICogaHR0cF9ob3N0ID0gTlVMTDsKKyAgICBj aGFyICogaHR0cF9zcnYgID0gTlVMTDsKKyAgICBpbnQgICAgaHR0cF9zc2wgID0gMDsKKworICAg IHN0YXRpYyBjaGFyICogaHR0cF9kX2FnZW50ID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqIGh0 dHBfZF91c2VyID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqIGh0dHBfZF9wYXNzID0gTlVMTDsK KworICAgIHN0YXRpYyBpbnQgICAgaHR0cF9kX3R5cGUgPSAwOworICAgIGludCAgICAgICAgICAg aHR0cF90eXBlID0gaHR0cF9kX3R5cGU7CisKKyNpZmRlZiBPUzIKKyAgICBwID0gIktlcm1pdCA5 NSI7CQkJLyogRGVmYXVsdCB1c2VyIGFnZW50ICovCisjZWxzZQorICAgIHAgPSAiQy1LZXJtaXQi OworI2VuZGlmIC8qIE9TMiAqLworICAgIG1ha2VzdHIoJmh0dHBfYWdlbnQscCk7CisgICAgbWFr ZXN0cigmaHR0cF9taW1lLCJ0ZXh0L0hUTUwiKTsJLyogTUlNRSB0eXBlIGRlZmF1bHQgKi8KKyAg ICByZG5zWzBdID0gJ1wwJzsKKworICAgIGNtZmRiaSgmc3csCQkJCS8qIDFzdCBGREIgLSBnZW5l cmFsIHN3aXRjaGVzICovCisgICAgICAgX0NNS0VZLAkJCQkvKiBmY29kZSAqLworICAgICAgICJP UEVOLCBDTE9TRSwgR0VULCBIRUFELCBQVVQsIElOREVYLCBvciBQT1NULFxuIG9yIHN3aXRjaCIs IC8qIGhscG1zZyAqLworICAgICAgICIiLAkJCQkvKiBkZWZhdWx0ICovCisgICAgICAgIiIsCQkJ CS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisgICAgICAgbmh0dHBzd3RhYiwJCQkvKiBhZGR0bCBu dW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAgICAgICA0LAkJCQkvKiBhZGR0bCBudW1lcmlj IGRhdGEgMjogNCA9IGNtc3dpICovCisgICAgICAgeHhzdHJpbmcsCQkJLyogUHJvY2Vzc2luZyBm dW5jdGlvbiAqLworICAgICAgIGh0dHBzd3RhYiwJCQkvKiBLZXl3b3JkIHRhYmxlICovCisgICAg ICAgJmt3CQkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKyAgICAgICApOworICAgIGNtZmRi aSgma3csCQkJCS8qIDJuZCBGREIgLSBjb21tYW5kcyAqLworICAgICAgIF9DTUtFWSwJCQkJLyog ZmNvZGUgKi8KKyAgICAgICAiQ29tbWFuZCIsCQkJLyogaGxwbXNnICovCisgICAgICAgIiIsCQkJ CS8qIGRlZmF1bHQgKi8KKyAgICAgICAiIiwJCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKyAg ICAgICBuaHR0cHRhYiwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKyAg ICAgICAwLAkJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogMCA9IGtleXdvcmQgKi8KKyAgICAg ICB4eHN0cmluZywJCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisgICAgICAgaHR0cHRhYiwJ CQkJLyogS2V5d29yZCB0YWJsZSAqLworICAgICAgIE5VTEwJCQkJLyogUG9pbnRlciB0byBuZXh0 IEZEQiAqLworICAgICAgICk7CisKKyAgICB3aGlsZSAoMSkgeworCXggPSBjbWZkYigmc3cpOwkJ CS8qIFBhcnNlIHNvbWV0aGluZyAqLworCWlmICh4IDwgMCkJCQkvKiBFcnJvciAqLworCSAgZ290 byB4aHR0cDsKKwluID0gY21yZXN1bHQubnJlc3VsdDsKKwlpZiAoY21yZXN1bHQuZmRiYWRkciA9 PSAma3cpCS8qIENvbW1hbmQgLSBleGl0IHRoaXMgbG9vcCAqLworCSAgYnJlYWs7CisJYyA9IGNt Z2JyaygpOwkJCS8qIFN3aXRjaC4uLiAqLworCWdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9 Jyk7CisJeCA9IC05OworCWlmIChnZXR2YWwgJiYgIShjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsK KwkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7 CisJICAgIGdvdG8geGh0dHA7CisJfQorCXN3aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgewkvKiBI YW5kbGUgZWFjaCBzd2l0Y2ggKi8KKyAgICAgICAgICBjYXNlIEhUX1NXX1RQOiAgICAgICAgICAg ICAgICAvKiAvVE9TQ1JFRU4gKi8KKyAgICAgICAgICAgIGh0dHBfdHlwZSA9IDE7CisgICAgICAg ICAgICBicmVhazsKKwkgIGNhc2UgSFRfU1dfQUc6CQkvKiAvQUdFTlQgKi8KKwkgICAgaWYgKGdl dHZhbCkgeworCQlpZiAoKHggPSBjbWZsZCgiVXNlciBhZ2VudCIscCwmcyx4eHN0cmluZykpIDwg MCkKKwkJICBnb3RvIHhodHRwOworCSAgICB9IGVsc2UgeworCQlzID0gcDsKKwkgICAgfQorCSAg ICBtYWtlc3RyKCZodHRwX2FnZW50LHMpOworCSAgICBicmVhazsKKwkgIGNhc2UgSFRfU1dfSEQ6 CQkvKiAvSEVBREVSICovCisJICAgIHMgPSBOVUxMOworCSAgICBpZiAoZ2V0dmFsKSB7CisJCWlm ICgoeCA9IGNtZmxkKCJIZWFkZXIgbGluZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKwkJICAg IGlmICh4ID09IC0zKQorCQkgICAgICBzID0gTlVMTDsKKwkJICAgIGVsc2UKKwkJICAgICAgZ290 byB4aHR0cDsKKwkJfQorCSAgICB9CisJICAgIG1ha2VzdHIoJmh0dHBfaGRyLHMpOworCSAgICBi cmVhazsKKwkgIGNhc2UgSFRfU1dfVVM6CQkvKiAvVVNFUiAqLworCSAgICBzID0gTlVMTDsKKwkg ICAgaWYgKGdldHZhbCkgeworCQlpZiAoKHggPSBjbWZsZCgiVXNlciBJRCIsIiIsJnMseHhzdHJp bmcpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgIGlmICh4ID09IC0zKQorICAgICAgICAgICAg ICAgICAgICBzID0gIiI7CisgICAgICAgICAgICAgICAgICBlbHNlCisJCSAgICBnb3RvIHhodHRw OworICAgICAgICAgICAgICAgIH0KKwkgICAgfQorCSAgICBtYWtlc3RyKCZodHRwX3VzZXIscyk7 CisJICAgIGJyZWFrOworCSAgY2FzZSBIVF9TV19QVzoJCS8qIC9QQVNTV09SRCAqLworCSAgICBk ZWJvayA9IDA7CisJICAgIHMgPSBOVUxMOworCSAgICBpZiAoZ2V0dmFsKSB7CisJCWlmICgoeCA9 IGNtZmxkKCJQYXNzd29yZCIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisJCSAgZ290byB4aHR0cDsK KwkgICAgfQorCSAgICBtYWtlc3RyKCZodHRwX3Bhc3Mscyk7CisJICAgIGJyZWFrOworI2lmbmRl ZiBOT1NQTAorCSAgY2FzZSBIVF9TV19BUjogewkJLyogL0FSUkFZOiAqLworCSAgICAgIGNoYXIg KiBzMiwgYXJyYXkgPSBOVUw7CisJICAgICAgaWYgKCFnZXR2YWwpIHsKKwkJICBwcmludGYoIj9U aGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJCSAgeCA9IC05OworCQkgIGdv dG8geGh0dHA7CisJICAgICAgfQorCSAgICAgIGlmICgoeCA9IGNtZmxkKCJBcnJheSBuYW1lIChh IHNpbmdsZSBsZXR0ZXIgd2lsbCBkbykiLAorCQkJICAgICAiIiwKKwkJCSAgICAgJnMsCisJCQkg ICAgIE5VTEwKKwkJCSAgICAgKSkgPCAwKSB7CisJCSAgaWYgKHggPT0gLTMpIHsKKwkJICAgICAg cHJpbnRmKCI/QXJyYXkgbmFtZSByZXF1aXJlZFxuIik7CisJCSAgICAgIHggPSAtOTsKKwkJICAg ICAgZ290byB4aHR0cDsKKwkJICB9IGVsc2UKKwkJICAgIGdvdG8geGh0dHA7CisJICAgICAgfQor CSAgICAgIGlmICghKnMpIHsKKwkJICBwcmludGYoIj9BcnJheSBuYW1lIHJlcXVpcmVkXG4iKTsK KwkJICB4ID0gLTk7CisJCSAgZ290byB4aHR0cDsKKwkgICAgICB9CisJICAgICAgczIgPSBzOwor CSAgICAgIGlmICgqcyA9PSBDTURRKSBzKys7CisJICAgICAgaWYgKCpzID09ICcmJykgcysrOwor CSAgICAgIGlmICghaXNhbHBoYSgqcykpIHsKKwkJICBwcmludGYoIj9CYWQgYXJyYXkgbmFtZSAt IFwiJXNcIlxuIixzMik7CisJCSAgeCA9IC05OworCQkgIGdvdG8geGh0dHA7CisJICAgICAgfQor CSAgICAgIGFycmF5ID0gKnMrKzsKKwkgICAgICBpZiAoaXN1cHBlcihhcnJheSkpCisJCWFycmF5 ID0gdG9sb3dlcihhcnJheSk7CisJICAgICAgaWYgKCpzICYmICgqcyAhPSAnWycgfHwgKihzKzEp ICE9ICddJykpIHsKKwkJICBwcmludGYoIj9CYWQgYXJyYXkgbmFtZSAtIFwiJXNcIlxuIixzMik7 CisJCSAgaHR0cF9hcnJheSA9IE5VTDsKKwkJICB4ID0gLTk7CisJCSAgZ290byB4aHR0cDsKKwkg ICAgICB9CisJICAgICAgaHR0cF9hcnJheSA9IGFycmF5OworCSAgICAgIGJyZWFrOworCSAgfQor I2VuZGlmIC8qIE5PU1BMICovCisJICBkZWZhdWx0OgorCSAgICB4ID0gLTI7CisJICAgIGdvdG8g eGh0dHA7CisJfQorICAgIH0KKyAgICBodHRwX2FjdGlvbiA9IG47CQkJLyogU2F2ZSB0aGUgYWN0 aW9uICovCisgICAgaWYgKGh0dHBfYWN0aW9uID09IEhUVFBfUFVUIHx8IGh0dHBfYWN0aW9uID09 IEhUVFBfUE9TKSB7CisJY21mZGJpKCZzdywJCQkvKiAxc3QgRkRCIC0gc3dpdGNoICovCisJICAg ICAgIF9DTUtFWSwJCQkvKiBmY29kZSAqLworCSAgICAgICAiTG9jYWwgZmlsZW5hbWVcbiBPciBz d2l0Y2giLCAvKiBoZWxwICovCisJICAgICAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAg IiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAgbmh0dHBwdGFiLAkJLyoga2V5 d29yZCB0YWJsZSBzaXplICovCisJICAgICAgIDQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6 IDQgPSBjbXN3aSAqLworCSAgICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24g Ki8KKwkgICAgICAgaHR0cHB0YWIsCQkvKiBLZXl3b3JkIHRhYmxlICovCisJICAgICAgICZmaQkJ CS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkgICAgICAgKTsKKwljbWZkYmkoJmZpLAkJCS8q IDJuZCBGREIgLSBmaWxlbmFtZSAqLworCSAgICAgICBfQ01JRkksCQkJLyogZmNvZGUgKi8KKwkg ICAgICAgIkxvY2FsIGZpbGVuYW1lIiwJLyogaGxwbXNnICovCisJICAgICAgICIiLAkJCS8qIGRl ZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAg MCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyICovCisJICAgICAgIHh4c3RyaW5nLAorCSAgICAgICBOVUxMLAorCSAgICAg ICBOVUxMCisJICAgICAgICk7CisJd2hpbGUgKDEpIHsKKwkgICAgeCA9IGNtZmRiKCZzdyk7CisJ ICAgIGlmICh4IDwgMCkKKwkgICAgICBnb3RvIHhodHRwOwkJLyogRnJlZSBhbnkgbWFsbG9jJ2Qg dGVtcCBzdHJpbmdzICovCisJICAgIG4gPSBjbXJlc3VsdC5ucmVzdWx0OworCSAgICBpZiAoY21y ZXN1bHQuZmNvZGUgIT0gX0NNS0VZKQorCSAgICAgIGJyZWFrOworCSAgICBjID0gY21nYnJrKCk7 CQkvKiBTd2l0Y2guLi4gKi8KKwkgICAgZ2V0dmFsID0gKGMgPT0gJzonIHx8IGMgPT0gJz0nKTsK KwkgICAgaWYgKGdldHZhbCAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworCQlwcmludGYo Ij9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKwkJeCA9IC05Owor CQlnb3RvIHhodHRwOworCSAgICB9CisJICAgIHN3aXRjaCAobikgeworCSAgICAgIGNhc2UgSFRf UFBfTVQ6CisJCXMgPSAidGV4dC9IVE1MIjsKKwkJaWYgKGdldHZhbCkgeworCQkgICAgaWYgKCh4 ID0gY21mbGQoIk1JTUUgdHlwZSIsCisJCQkJICAgInRleHQvSFRNTCIsJnMseHhzdHJpbmcpKSA8 IDApCisJCSAgICAgIGdvdG8geGh0dHA7CisJCX0KKwkJbWFrZXN0cigmaHR0cF9taW1lLHMpOwor CQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQl4ID0gLTI7CisJCWdvdG8geGh0dHA7CisJICAg IH0KKwl9CisJbWFrZXN0cigmaHR0cF9sZmlsZSxjbXJlc3VsdC5zcmVzdWx0KTsKKwluID0gY2tp bmRleCgiLyIsaHR0cF9sZmlsZSwtMSwxLDApOworCWlmIChuKQorCSAgcCA9ICZodHRwX2xmaWxl W25dOworCWVsc2UKKwkgIHAgPSBodHRwX2xmaWxlOworCWlmICgoeCA9IGNtZmxkKCJVUkwgb3Ig cmVtb3RlIGZpbGVuYW1lIixwLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisgICAgICAgICAgaWYgKHgg PT0gLTMpIHsKKyAgICAgICAgICAgIHByaW50ZigiPyVzIHdoYXQ/XG4iLChodHRwX2FjdGlvbiA9 PSBIVFRQX1BVVCkgPyAiUHV0IiA6ICJQb3N0Iik7CisgICAgICAgICAgICB4ID0gLTk7CisgICAg ICAgICAgfQorICAgICAgICAgIGdvdG8geGh0dHA7CisgICAgICAgIH0KKwlpZiAoISpzKSBzID0g TlVMTDsKKwltYWtlc3RyKCZodHRwX3JmaWxlLHMpOworCisJaWYgKCh4ID0gY210eHQoIlJlc3Bv bnNlIGZpbGVuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworICAgICAgICAgIGlmICh4ICE9 IC0zKQorICAgICAgICAgICAgZ290byB4aHR0cDsKKyAgICAgICAgfQorICAgICAgICBpZiAoKnMp CisgICAgICAgICAgbWFrZXN0cigmaHR0cF9kZmlsZSxzKTsKKyAgICB9CisgICAgc3dpdGNoICho dHRwX2FjdGlvbikgeworICAgICAgY2FzZSBIVFRQX0RFTDoJCQkvKiBERUxFVEUgKi8KKwlpZiAo KHggPSBjbWZsZCgiVVJMIG9yIHJlbW90ZSBzb3VyY2UgZmlsZSIsIiIsJnMseHhzdHJpbmcpKSA8 IDApIHsKKyAgICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgcHJpbnRmKCI/RGVs ZXRlIHdoYXQ/XG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICB9CisgICAgICAg ICAgZ290byB4aHR0cDsKKyAgICAgICAgfQorCW1ha2VzdHIoJmh0dHBfcmZpbGUscyk7CisJYnJl YWs7CisgICAgICBjYXNlIEhUVFBfQ09OOgkJCS8qIENPTk5FQ1QgKi8KKyAgICAgICAgaWYgKCh4 ID0gY21mbGQoIlJlbW90ZSBob3N0Wzpwb3J0XSIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKyAg ICAgICAgICBpZiAoeCA9PSAtMykgeworICAgICAgICAgICAgcHJpbnRmKCI/UmVtb3RlIGhvc3Rb OnBvcnRdIGlzIHJlcXVpcmVkXG4iKTsKKyAgICAgICAgICAgIHggPSAtOTsKKyAgICAgICAgICB9 CisgICAgICAgICAgZ290byB4aHR0cDsKKyAgICAgICAgfQorCW1ha2VzdHIoJmh0dHBfcmZpbGUs cyk7CisJYnJlYWs7CisgICAgICBjYXNlIEhUVFBfSEVEOiB7CQkJLyogSEVBRCAqLworCSAgY2hh ciBidWZbQ0tNQVhQQVRIKzFdOworCSAgaWYgKCh4ID0gY21mbGQoIlVSTCBvciByZW1vdGUgc291 cmNlIGZpbGUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJICAgICAgaWYgKHggPT0gLTMpIHsK KwkJICBwcmludGYoIj9IZWFkIG9mIHdoYXQ/XG4iKTsKKwkJICB4ID0gLTk7CisJICAgICAgfQor CSAgICAgIGdvdG8geGh0dHA7CisJICB9CisJICBtYWtlc3RyKCZodHRwX3JmaWxlLHMpOworCisJ ICBpZiAoaHR0cF9hcnJheSB8fCBodHRwX3R5cGUpIHsgLyogRGVmYXVsdCByZXN1bHQgZmlsZW5h bWUgKi8KKwkgICAgICBwID0gIiI7CQkJIC8qIE5vbmUgaWYgL0FSUkFZIG9yIC9UT1NDUkVFTiAq LworCSAgfSBlbHNlIHsKKwkgICAgICBuID0gY2tpbmRleCgiLyIsaHR0cF9yZmlsZSwtMSwxLDAp OyAvKiBPdGhlcndpc2Ugc3RyaXAgcGF0aCAqLworCSAgICAgIGlmIChuKQkJICAgICAgICAgICAg ICAgICAgLyogYW5kIGFkZCAiLmhlYWQiICovCisJCXAgPSAmaHR0cF9yZmlsZVtuXTsKKwkgICAg ICBlbHNlCisJCXAgPSBodHRwX3JmaWxlOworCSAgICAgIGNrbWFrbXNnKGJ1ZixDS01BWFBBVEgs cCwiLmhlYWQiLE5VTEwsTlVMTCk7CisJICAgICAgcCA9IGJ1ZjsKKwkgIH0KKwkgIGlmICgoeCA9 IGNtb2ZpKCJMb2NhbCBmaWxlbmFtZSIscCwmcyx4eHN0cmluZykpIDwgMCkgeworCSAgICAgIGlm ICh4ICE9IC0zKQorCQlnb3RvIHhodHRwOworCSAgfQorCSAgbWFrZXN0cigmaHR0cF9sZmlsZSxz KTsKKwkgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBIVFRQX0dFVDoJCQkvKiBHRVQgKi8K KyAgICAgIGNhc2UgSFRUUF9JRFg6IHsJCQkvKiBJTkRFWCAqLworCSAgZXh0ZXJuIGludCB3aWxk ZW5hOworCSAgaW50IHRtcDsKKwkgIGNoYXIgKiBsZmlsZSA9ICIiOworCSAgaWYgKCh4ID0gY21m bGQoIlVSTCBvciByZW1vdGUgc291cmNlIGZpbGUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJ ICAgICAgaWYgKHggPT0gLTMpIHsKKwkJICBwcmludGYoIj9HZXQgd2hhdD9cbiIpOworCQkgIHgg PSAtOTsKKwkgICAgICB9CisJICAgICAgZ290byB4aHR0cDsKKwkgIH0KKwkgIG1ha2VzdHIoJmh0 dHBfcmZpbGUscyk7CisJICBpZiAoaHR0cF9hY3Rpb24gPT0gSFRUUF9HRVQgJiYgIWh0dHBfdHlw ZSkKKwkgICAgenN0cmlwKGh0dHBfcmZpbGUsJmxmaWxlKTsKKwkgIC8qIFVSTHMgb2Z0ZW4gY29u dGFpbiBxdWVzdGlvbiBtYXJrcyBvciBvdGhlciBtZXRhY2hhcmFjdGVycyAqLworCSAgLyogY21v ZmkoKSBkb2Vzbid0IGxpa2UgdGhlbSAqLworCSAgdG1wID0gd2lsZGVuYTsKKwkgIHdpbGRlbmEg PSAwOworCSAgaWYgKCh4ID0gY21vZmkoIkxvY2FsIGZpbGVuYW1lIixsZmlsZSwmcyx4eHN0cmlu ZykpIDwgMCkgeworCSAgICAgIHdpbGRlbmEgPSB0bXA7CisJICAgICAgaWYgKHggIT0gLTMpCisJ CWdvdG8geGh0dHA7CisJICB9CisJICB3aWxkZW5hID0gdG1wOworCSAgbWFrZXN0cigmaHR0cF9s ZmlsZSxzKTsKKwkgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBIVFRQX09QTjogeworCSAg aW50IHNzbHN3aXRjaCA9IDA7CisjaWZkZWYgQ0tfU1NMCisJICBzdHJ1Y3QgRkRCIHN3LCBmbDsK KwkgIGNtZmRiaSgmc3csCisJCSBfQ01LRVksCQkvKiBmY29kZSAqLworCQkgIklQIGhvc3QgbmFt ZSBvciBhZGRyZXNzLCBvciBzd2l0Y2giLCAvKiBobHBtc2cgKi8KKwkJICIiLAkJCS8qIGRlZmF1 bHQgKi8KKwkJICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJCSAyLAkJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworCQkgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRh dGEgMjogNCA9IGNtc3dpICovCisJCSB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24g Ki8KKwkJIHNzbHN3dGFiLAkJLyogS2V5d29yZCB0YWJsZSAqLworCQkgJmZsCQkJLyogUG9pbnRl ciB0byBuZXh0IEZEQiAqLworCQkgKTsKKwkgIGNtZmRiaSgmZmwsCQkJLyogMm5kIEZEQiAtIGhv c3QgKi8KKwkJIF9DTUZMRCwJCS8qIGZjb2RlICovCisJCSAiIiwJCQkvKiBobHBtc2cgKi8KKwkJ ICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkJICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJ CSAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJCSAwLAkJCS8qIGFkZHRsIG51bWVy aWMgZGF0YSAyICovCisJCSB4eHN0cmluZywKKwkJIE5VTEwsCisJCSBOVUxMCisJCSApOworCSAg eCA9IGNtZmRiKCZzdyk7CQkvKiBQYXJzZSBzd2l0Y2ggb3IgaG9zdCAqLworCSAgaWYgKHggPCAw KQkJCS8qIEVycm9yICovCisJICAgIGdvdG8geGh0dHA7CisJICBpZiAoY21yZXN1bHQuZmNvZGUg PT0gX0NNRkxEKSB7IC8qIEhvc3QgKi8KKwkgICAgICBzID0gY21yZXN1bHQuc3Jlc3VsdDsJICAv KiBTZXQgdXAgZXhwZWN0ZWQgcG9pbnRlciAqLworCSAgICAgIGdvdG8gaGF2ZWhvc3Q7ICAgICAg ICAgICAgICAvKiBHbyBwYXJzZSByZXN0IG9mIGNvbW1hbmQgKi8KKwkgIH0KKwkgIHNzbHN3aXRj aCA9IDE7CQkvKiAvU1NMIG9yIC9UTFMgc3dpdGNoIC0gc2V0IGZsYWcgKi8KKyNlbmRpZiAvKiBD S19TU0wgKi8KKworCSAgLyogUGFyc2UgaG9zdCAqLworCisJICBpZiAoKHggPSBjbWZsZCgiVVJM LCBob3N0bmFtZSwgb3IgaXAtYWRkcmVzcyIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsKKwkgICAg ICBpZiAoeCA9PSAtMykgeworCQkgIHByaW50ZigiP09wZW4gd2hhdD9cbiIpOworCQkgIHggPSAt OTsKKwkgICAgICB9CisJICAgICAgZ290byB4aHR0cDsKKwkgIH0KKworCWhhdmVob3N0OgkJCS8q IENvbWUgaGVyZSB3aXRoIHMgLT4gaG9zdCAqLworI2lmZGVmIENLX1VSTAorCSAgeCA9IHVybHBh cnNlKHMsJmh0dHBfdXJsKTsJLyogV2FzIGEgVVJMIGdpdmVuPyAqLworCSAgaWYgKHggPCAxKSB7 CQkJLyogTm90IGEgVVJMICovCisjZW5kaWYgLyogQ0tfVVJMICovCisJICAgICAgbWFrZXN0cigm aHR0cF9ob3N0LHMpOworCSAgICAgIGlmICgoeCA9CisJCSAgIGNtZmxkKCJTZXJ2aWNlIG5hbWUg b3IgcG9ydCBudW1iZXIiLAorCQkJIHNzbHN3aXRjaCA/ICJodHRwcyIgOiAiaHR0cCIsJnMseHhz dHJpbmcpKSA8IDApCisJCWdvdG8geGh0dHA7CisJICAgICAgZWxzZQorCQltYWtlc3RyKCZodHRw X3NydixzKTsKKyNpZmRlZiBDS19VUkwKKwkgIH0gZWxzZSBpZiAoY2tzdHJjbXAoaHR0cF91cmwu c3ZjLCJodHRwIiwtMSwwKSAmJiAvKiBOb24tSFRUUCBVUkwgKi8KKwkJICAgICBja3N0cmNtcCho dHRwX3VybC5zdmMsImh0dHBzIiwtMSwwKSkgeworCSAgICAgIHByaW50ZigiP05vbi1IVFRQIFVS TFxuIik7CisJICAgICAgeCA9IC05OworCSAgICAgIGdvdG8geGh0dHA7CisJICB9IGVsc2UgewkJ CS8qIEhhdmUgSFRUUCBVUkwgKi8KKwkgICAgICBtYWtlc3RyKCZodHRwX3NydiwgaHR0cF91cmwu c3ZjKTsKKwkgICAgICBtYWtlc3RyKCZodHRwX3VzZXIsaHR0cF91cmwudXNyKTsKKwkgICAgICBt YWtlc3RyKCZodHRwX3Bhc3MsaHR0cF91cmwucHN3KTsKKwkgICAgICBtYWtlc3RyKCZodHRwX2hv c3QsaHR0cF91cmwuaG9zKTsKKwkgICAgICBpZiAoaHR0cF91cmwucG9yKQorCQltYWtlc3RyKCZo dHRwX3NydixodHRwX3VybC5wb3IpOworCSAgICAgIG1ha2VzdHIoJmh0dHBfcmZpbGUsaHR0cF91 cmwucHRoKTsKKwkgIH0KKwkgIGlmIChodHRwX3JmaWxlKSB7CQkvKiBPcGVuLCBHRVQsIGFuZCBD bG9zZSAqLworCSAgICAgIHByaW50ZigiP0RpcmVjdG9yeS9maWxlIHBhdGggbm90IGFsbG93ZWQg aW4gSFRUUCBPUEVOIFVSTFxuIik7CisJICAgICAgeCA9IC05OworCSAgICAgIGdvdG8geGh0dHA7 CisJICB9CisJICBpZiAoIWNrc3RyY21wKCJodHRwcyIsaHR0cF9zcnYsLTEsMCkgfHwgc3Nsc3dp dGNoIHx8CisJICAgICAgIWNrc3RyY21wKCI0NDMiLGh0dHBfc3J2LC0xLDApKQorCSAgICBodHRw X3NzbCA9IDE7CisjZW5kaWYgLyogQ0tfVVJMICovCisJICBicmVhazsKKyAgICAgIH0KKyAgICAg IGNhc2UgSFRUUF9DTFM6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApCisgICAgICBnb3RvIHhodHRwOworCisgICAgaWYgKGh0dHBfYWN0aW9uID09IEhU VFBfT1BOKSB7CisgICAgICAgIHggPSAoaHR0cF9vcGVuKGh0dHBfaG9zdCxodHRwX3NydixodHRw X3NzbCxyZG5zLDEyOCxodHRwX2FnZW50KSA9PSAwKTsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAg ICAgICAgIGlmICghcXVpZXQpIHsKKyAgICAgICAgICAgICAgaWYgKHJkbnNbMF0pCisgICAgICAg ICAgICAgICAgcHJpbnRmKCJDb25uZWN0ZWQgdG8gJXMgWyVzXVxyXG4iLGh0dHBfaG9zdCxyZG5z KTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiQ29ubmVjdGVk IHRvICVzXHJcbiIsaHR0cF9ob3N0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICho dHRwX2FnZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGh0dHBfZF9hZ2VudCkKKwkJICBmcmVl KGh0dHBfZF9hZ2VudCk7CisgICAgICAgICAgICAgICAgaHR0cF9kX2FnZW50ID0gaHR0cF9hZ2Vu dDsKKyAgICAgICAgICAgICAgICBodHRwX2FnZW50ID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmIChodHRwX3VzZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoaHR0cF9kX3Vz ZXIpCisJCSAgZnJlZShodHRwX2RfdXNlcik7CisgICAgICAgICAgICAgICAgaHR0cF9kX3VzZXIg PSBodHRwX3VzZXI7CisgICAgICAgICAgICAgICAgaHR0cF91c2VyID0gTlVMTDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmIChodHRwX3Bhc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAo aHR0cF9kX3Bhc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGh0dHBfZF9wYXNzLDAs c3RybGVuKGh0dHBfZF9wYXNzKSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUoaHR0cF9kX3Bh c3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBodHRwX2RfcGFzcyA9IGh0 dHBfcGFzczsKKyAgICAgICAgICAgICAgICBodHRwX3Bhc3MgPSBOVUxMOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaHR0cF9kX3R5cGUgPSBodHRwX3R5cGU7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBpZiAoIXF1aWV0KQorCSAgICAgIHByaW50ZigiP0hUVFAgQ29ubmVjdGlv biBmYWlsZWQuXHJcbiIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChodHRwX2FjdGlvbiA9 PSBIVFRQX0NMUykgeworICAgICAgICBpZiAoaHR0cF9kX2FnZW50KSB7CisgICAgICAgICAgICBm cmVlKGh0dHBfZF9hZ2VudCk7CisgICAgICAgICAgICBodHRwX2RfYWdlbnQgPSBOVUxMOworICAg ICAgICB9CisgICAgICAgIGlmIChodHRwX2RfdXNlcikgeworICAgICAgICAgICAgZnJlZShodHRw X2RfdXNlcik7CisgICAgICAgICAgICBodHRwX2RfdXNlciA9IE5VTEw7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKGh0dHBfZF9wYXNzKSB7CisgICAgICAgICAgICBtZW1zZXQoaHR0cF9kX3Bhc3Ms MCxzdHJsZW4oaHR0cF9kX3Bhc3MpKTsKKyAgICAgICAgICAgIGZyZWUoaHR0cF9kX3Bhc3MpOwor ICAgICAgICAgICAgaHR0cF9kX3Bhc3MgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGh0dHBf ZF90eXBlID0gMDsKKyAgICAgICAgeCA9IChodHRwX2Nsb3NlKCkgPT0gMCk7CisgICAgfQorICAg IGlmICgoaHR0cF9hY3Rpb24gIT0gSFRUUF9DTFMpICYmCisJKGh0dHBfYWN0aW9uICE9IEhUVFBf Q09OKSAmJiBodHRwX3JmaWxlKSB7IC8qIFJlbW90ZSBmaWxlIGlzIFVSTD8gKi8KKworCS8qIEFs bC1pbi1vbmUgYWN0aW9ucyB3aGVuIGEgVVJMIGlzIGdpdmVuLi4uICovCisKKyNpZmRlZiBDS19V UkwKKwlpZiAodXJscGFyc2UoaHR0cF9yZmlsZSwmaHR0cF91cmwpID4gMCkgeyAvKiBIYXZlIFVS TD8gKi8KKwkgICAgaWYgKGNrc3RyY21wKGh0dHBfdXJsLnN2YywiaHR0cCIsLTEsMCkgJiYgLyog SXQncyBhbiBIVFRQIFVSTD8gKi8KKwkJY2tzdHJjbXAoaHR0cF91cmwuc3ZjLCJodHRwcyIsLTEs MCkpIHsKKwkJcHJpbnRmKCI/Tm9uLUhUVFAgVVJMXG4iKTsKKwkJeCA9IC05OworCQlnb3RvIHho dHRwOworCSAgICB9IGVsc2UgewkJCS8qIFllcywgY29sbGVjdCB0aGUgcGllY2VzICovCisJCW1h a2VzdHIoJmh0dHBfc3J2LCBodHRwX3VybC5zdmMpOworCQltYWtlc3RyKCZodHRwX3VzZXIsaHR0 cF91cmwudXNyKTsKKwkJbWFrZXN0cigmaHR0cF9wYXNzLGh0dHBfdXJsLnBzdyk7CisJCW1ha2Vz dHIoJmh0dHBfaG9zdCxodHRwX3VybC5ob3MpOworCQlpZiAoaHR0cF91cmwucG9yKQorCQkgIG1h a2VzdHIoJmh0dHBfc3J2LGh0dHBfdXJsLnBvcik7CisJCW1ha2VzdHIoJmh0dHBfcmZpbGUsaHR0 cF91cmwucHRoKTsKKwkgICAgfQorCSAgICBpZiAoIWh0dHBfcmZpbGUpIHsJCS8qIFN0aWxsIGhh dmUgYSBwYXRoPyAqLworICAgICAgICAgICAgICAgIG1ha2VzdHIoJmh0dHBfcmZpbGUsIi8iKTsK KwkgICAgfQorCSAgICBpZiAoIWNrc3RyY21wKCJodHRwcyIsaHR0cF9zcnYsLTEsMCkgfHwgLyog Q2hlY2sgZm9yIFNTTC9UTFMgKi8KKwkJIWNrc3RyY21wKCI0NDMiLGh0dHBfc3J2LC0xLDApKQor CSAgICAgIGh0dHBfc3NsID0gMTsKKwkgICAgaWYgKGh0dHBfaXNjb25uZWN0ZWQoKSkJLyogQ2xv c2UgYW55IG9wZW4gSFRUUCBjb25uZWN0aW9uICovCisJICAgICAgaHR0cF9jbG9zZSgpOworCSAg ICBpZiAoaHR0cF9wYXNzID09IE5VTEwgJiYgaHR0cF9kX3Bhc3MgIT0gTlVMTCkKKwkgICAgICBt YWtlc3RyKCZodHRwX3Bhc3MsaHR0cF9kX3Bhc3MpOworCSAgICB4ID0gKGh0dHBfb3BlbihodHRw X2hvc3QsCisJCQkgICBodHRwX3NydixodHRwX3NzbCxyZG5zLDEyOCxodHRwX2RfYWdlbnQpID09 IDApOworCSAgICBpZiAoeCA8IDApIHsKKwkJeCA9IDA7CisJCWdvdG8geGh0dHA7CisJICAgIH0K KwkgICAgYWxsaW5vbmUgPSAxOworCX0KKyNlbmRpZiAvKiBDS19VUkwgKi8KKyAgICAgICAgaWYg KGh0dHBfcGFzcyA9PSBOVUxMICYmIGh0dHBfZF9wYXNzICE9IE5VTEwpCisJICBtYWtlc3RyKCZo dHRwX3Bhc3MsaHR0cF9kX3Bhc3MpOworCisJaWYgKGh0dHBfYWN0aW9uID09IEhUVFBfT1BOICYm IGFsbGlub25lKSB7CisJICAgIGh0dHBfYWN0aW9uID0gSFRUUF9HRVQ7CisJfQorICAgICAgICB4 ID0geGRvaHR0cChodHRwX2FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgaHR0cF9sZmlsZSwK KwkJICAgIGh0dHBfcmZpbGUsCisgICAgICAgICAgICAgICAgICAgIGh0dHBfZGZpbGUsCisJCSAg ICBodHRwX2FnZW50ID8gaHR0cF9hZ2VudCA6IGh0dHBfZF9hZ2VudCwKKwkJICAgIGh0dHBfaGRy LAorCQkgICAgaHR0cF91c2VyICA/IGh0dHBfdXNlciAgOiBodHRwX2RfdXNlciwKKwkJICAgIGh0 dHBfcGFzcyAgPyBodHRwX3Bhc3MgIDogaHR0cF9kX3Bhc3MsCisJCSAgICBodHRwX21pbWUsCisJ CSAgICBodHRwX2FycmF5LAorCQkgICAgaHR0cF90eXBlCisJCSAgICApOworCWlmIChhbGxpbm9u ZSkKKwkgIHggPSAoaHR0cF9jbG9zZSgpID09IDApOworICAgIH0KKworICB4aHR0cDoKKyAgICBp ZiAoaHR0cF9hZ2VudCkgZnJlZShodHRwX2FnZW50KTsKKyAgICBpZiAoaHR0cF9oZHIpICAgZnJl ZShodHRwX2hkcik7CisgICAgaWYgKGh0dHBfdXNlcikgIGZyZWUoaHR0cF91c2VyKTsKKyAgICBp ZiAoaHR0cF9wYXNzKSB7CisgICAgICAgIG1lbXNldChodHRwX3Bhc3MsMCxzdHJsZW4oaHR0cF9w YXNzKSk7CisgICAgICAgIGZyZWUoaHR0cF9wYXNzKTsKKyAgICB9CisgICAgaWYgKGh0dHBfbWlt ZSkgIGZyZWUoaHR0cF9taW1lKTsKKyAgICBpZiAoaHR0cF9sZmlsZSkgZnJlZShodHRwX2xmaWxl KTsKKyAgICBpZiAoaHR0cF9yZmlsZSkgZnJlZShodHRwX3JmaWxlKTsKKyAgICBpZiAoaHR0cF9k ZmlsZSkgZnJlZShodHRwX2RmaWxlKTsKKyAgICBpZiAoaHR0cF9ob3N0KSAgZnJlZShodHRwX2hv c3QpOworICAgIGlmIChodHRwX3NydikgICBmcmVlKGh0dHBfc3J2KTsKKworICAgIGlmICh4ID4g LTEpCisgICAgICBzdWNjZXNzID0geDsKKyAgICByZXR1cm4oeCk7Cit9CisjZW5kaWYgLyogVENQ U09DS0VUICovCisjZW5kaWYgLyogTk9IVFRQICovCisKKworI2lmbmRlZiBOT1NQTAorc3RhdGlj IGludAorZG90cmFjZSgpIHsKKyAgICBpbnQgb24gPSAxOworICAgIHN0cnVjdCBGREIgc3csIGt3 OworICAgIGNtZmRiaSgmc3csCQkJCS8qIDFzdCBGREIgLSBzd2l0Y2ggKi8KKwkgICBfQ01LRVks CQkJLyogZmNvZGUgKi8KKwkgICAiVHJhY2Ugb2JqZWN0O1xuIE9yIHN3aXRjaCIsIC8qIGhlbHAg Ki8KKwkgICAiIiwJCQkJLyogZGVmYXVsdCAqLworCSAgICIiLAkJCQkvKiBhZGR0bCBzdHJpbmcg ZGF0YSAqLworCSAgIDIsCQkJCS8qIGtleXdvcmQgdGFibGUgc2l6ZSAqLworCSAgIDQsCQkJCS8q IGFkZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKwkgICB4eHN0cmluZywJCQkvKiBQ cm9jZXNzaW5nIGZ1bmN0aW9uICovCisJICAgb25vZmZzdywJCQkvKiBLZXl3b3JkIHRhYmxlICov CisJICAgJmt3CQkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkgICApOworICAgIGNtZmRi aSgma3csCQkJCS8qIDJuZCBGREIgLSBUcmFjZSBvYmplY3QgKi8KKwkgICBfQ01LRVksCQkJLyog ZmNvZGUgKi8KKwkgICAiVHJhY2Ugb2JqZWN0IiwJCS8qIGhlbHAgKi8KKwkgICAiYWxsIiwJCQkv KiBkZWZhdWx0ICovCisJICAgIiIsCQkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJICAgbnRy YWNldGFiLAkJCS8qIGtleXdvcmQgdGFibGUgc2l6ZSAqLworCSAgIDAsCQkJCS8qIGFkZHRsIG51 bWVyaWMgZGF0YSAyOiAwID0ga2V5d29yZCAqLworCSAgIHh4c3RyaW5nLAkJCS8qIFByb2Nlc3Np bmcgZnVuY3Rpb24gKi8KKwkgICB0cmFjZXRhYiwJCQkvKiBLZXl3b3JkIHRhYmxlICovCisJICAg TlVMTAkJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisJICAgKTsKKyAgICBpZiAoKHggPSBj bWZkYigmc3cpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgaWYgKGNtcmVzdWx0LmZkYmFk ZHIgPT0gJnN3KSB7CisJb24gPSBjbXJlc3VsdC5ucmVzdWx0OworCWlmICgoeCA9IGNta2V5KHRy YWNldGFiLCBudHJhY2V0YWIsIiIsImFsbCIseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeCk7 CisgICAgfSBlbHNlIHsKKwl4ID0gY21yZXN1bHQubnJlc3VsdDsKKyAgICB9CisgICAgaWYgKCh5 ID0gY21jZm0oKSkgPCAwKQorICAgICAgcmV0dXJuKHkpOworCisgICAgc3dpdGNoICh4KSB7Cisg ICAgICBjYXNlIFRSQV9BU0c6CisJdHJhX2FzZyA9IG9uOworCWJyZWFrOworICAgICAgY2FzZSBU UkFfQ01EOgorCXRyYV9jbWQgPSBvbjsKKwlicmVhazsKKyAgICAgIGNhc2UgVFJBX0FMTDoKKwl0 cmFfYXNnID0gb247CisJdHJhX2NtZCA9IG9uOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwly ZXR1cm4oLTIpOworICAgIH0KKyAgICBwcmludGYoIlRSQUNFICVzXG4iLCBvbiA/ICJPTiIgOiAi T0ZGIik7CisgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKK30KKyNlbmRpZiAvKiBOT1NQTCAqLwor CisKK3N0YXRpYyBpbnQKK2RvcHJvbXB0KCkgeworICAgIGV4dGVybiBpbnQgeGNtZHNyYzsKKyAg ICBpZiAoKHggPSBjbXR4dCgiT3B0aW9uYWwgbWVzc2FnZSIsIiIsJnMseHhzdHJpbmcpKSA8IDAp CisgICAgICByZXR1cm4oeCk7CisjaWZkZWYgTk9TUEwKKyAgICBwcmludGYoIj9Tb3JyeSwgUFJP TVBUIHJlcXVpcmVzIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZVxuIik7CisgICAgcmV0dXJu KC05KTsKKyNlbHNlCisgICAgZGVidWcoRjEwMSwiUHJvbXB0IGNtZGx2bCIsIiIsY21kbHZsKTsK KyAgICBjbWRsdmwrKzsKKyAgICBpZiAoY21kbHZsID4gQ01EU1RLTCkgeworCXByaW50ZigiP0Nv bW1hbmQgc3RhY2sgb3ZlcmZsb3c6ICVkXG4iLGNtZGx2bCk7CisJY21kbHZsLS07CisJcmV0dXJu KC05KTsKKyAgICB9CisgICAgeGNtZHNyYyA9IENNRF9LQjsKKyAgICBjbWRzdGtbY21kbHZsXS5z cmMgPSBDTURfS0I7CS8qIFNheSB3ZSdyZSBhdCB0aGUgcHJvbXB0ICovCisgICAgY21kc3RrW2Nt ZGx2bF0ubHZsID0gMDsKKyAgICBjbWRzdGtbY21kbHZsXS5jY2ZsZ3MgPSBjbWRzdGtbY21kbHZs LTFdLmNjZmxnczsKKyAgICBpZiAodHJhX2NtZCkKKyAgICAgIHByaW50ZigiWyVkXSArUDogXCIo cHJvbXB0KVwiXG4iLGNtZGx2bCk7CisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKKyAgICBpZiAo IXF1aWV0KQorICAgICAgcHJpbnRmKAorIihSZWN1cnNpdmUgY29tbWFuZCBwcm9tcHQ6IFJlc3Vt ZSBzY3JpcHQgd2l0aCBDT05USU5VRSwgU1RPUCB0byBzdG9wLi4uKVxuIgorICAgICAgICAgICAg KTsKKyAgICBpZiAoKnMpIHsJCQkJLyogSWYgcHJvbXB0IGdpdmVuICovCisJbWFrZXN0cigmKHBy c3RyaW5nW2NtZGx2bC0xXSksY21nZXRwKCkpOyAvKiBTYXZlIGN1cnJlbnQgcHJvbXB0ICovCisJ Y21zZXRwKHMpOwkJCS8qIFNldCBuZXcgb25lICovCisgICAgfQorICAgIHJldHVybihzdWNjZXNz ID0gMSk7CisjZW5kaWYgLyogTk9TUEwgKi8KK30KKworI2lmZGVmIENLTEVBUk4KK1ZPSUQKK2xl YXJuY21kKHMpIGNoYXIgKnM7IHsJCQkvKiBSZWNvcmQgY29tbWFuZHMgaW4gbGVhcm5lZCBzY3Jp cHQgKi8KKyAgICBjaGFyIGJ1Zls2NF07CisgICAgaW50IGksIGs7CisgICAgaWYgKGxlYXJuZnAg JiYgbGVhcm5pbmcpIHsJCS8qIE9ubHkgaWYgb3BlbiBhbmQgb24gKi8KKwlrID0gY2tzdHJuY3B5 KGJ1ZixzLDY0KTsKKwlmb3IgKGkgPSAwOyBpIDwgazsgaSsrKSB7CS8qIEdldCB0b3AtbGV2ZWwg Y29tbWFuZCBrZXl3b3JkICovCisJICAgIGlmIChidWZbaV0gPD0gU1ApIHsKKwkJYnVmW2ldID0g TlVMOworCQlicmVhazsKKwkgICAgfQorCX0KKwlrID0gbG9va3VwKGNtZHRhYixidWYsbmNtZCxO VUxMKTsgLyogTG9vayBpdCB1cCAqLworCWlmIChrID09IFhYQ09OIHx8IGsgPT0gWFhMRUFSTikJ ICAvKiBEb24ndCByZWNvcmQgQ09OTkVDVCBvciBMRUFSTiAqLworCSAgcmV0dXJuOworCWlmIChr ID09IFhYVEVMKSB7CisJICAgIGZwdXRzKCJTRVQgSE9TVCAvTkVUV09SSzpUQ1AiLGxlYXJuZnAp OworCSAgICBmcHV0cygmc1tpXSxsZWFybmZwKTsKKwkgICAgZnB1dHMoIiBURUxORVQgL1RFTE5F VCIsbGVhcm5mcCk7CisJICAgIGZwdXRzKCJcbklGIEZBSUwgU1RPUCAxIENvbm5lY3Rpb24gZmFp bGVkXG4iLGxlYXJuZnApOworCX0gZWxzZSB7CisJICAgIGZwdXRzKHMsbGVhcm5mcCk7CisJICAg IGZwdXRzKCJcbiIsbGVhcm5mcCk7CisJfQorICAgIH0KK30KKyNlbmRpZiAvKiBDS0xFQVJOICov CisKKworI2lmZGVmIFNTSENNRAorLyoKKyAgMjAxMC8wMy8wMS4uLgorICBSZW9wZW4gYSBjb25u ZWN0aW9uIHRoYXQgd2FzIG1hZGUgd2l0aCBhbiBleHRlcm5hbCBzc2ggY2xpZW50CisgIGFmdGVy IGl0IGhhcyBiZWVuIGNsb3NlZC4KKyAqLworaW50CityZWRvc3NoKCkgeworICAgIGludCB4LCBu ZXRzYXZlOworICAgIHggPSBuZXR0eXBlOworICAgIGRlYnVnKEYxMTEsInJlZG9zc2ggbmV0dHlw ZSIsdHRuYW1lLG5ldHR5cGUpOworICAgIGlmICgoeSA9IHNldGxpbihYWFNTSCwwLDEpKSA8IDAp IHsKKwlpZiAoZXJybm8pCisJICBwcmludGYoIj8lc1xuIixja19lcnJzdHIoKSk7CisJZWxzZQor CSAgcmV0dXJuKHkpOworCW5ldHR5cGUgPSB4OwkJCS8qIEZhaWxlZCwgcmVzdG9yZSBuZXQgdHlw ZS4gKi8KKwlzdWNjZXNzID0gMDsKKwlyZXR1cm4oeSk7CisgICAgfQorICAgIG5ldHNhdmUgPSB4 OworICAgIHJldHVybih5KTsKK30KKyNlbmRpZgkvKiBTU0hDTUQgKi8KKworLyoKKyAgTGlrZSBo bXNnYSgpIGluIGNrdXVzMi5jIGJ1dCB0YWtlcyBhIHNpbmdsZSBzdWJzdGl0dXRpb24gcGFyYW1l dGVyLCBzMiwKKyAgd2hpY2ggcmVwbGFjZXMgZXZlcnkgb2NjdXJyZW5jZSBvZiAiJXMiIGluIHRo ZSBmaXJzdCBhcmd1bWVudC4KKyAgQWRkZWQgdG8gcHJpbnQgdGV4dCBjb250YWluaW5nIHRoZSBj b3B5cmlnaHQgeWVhciwgc28gdGhlIHllYXIgZG9lc24ndCAKKyAgaGF2ZSB0byBiZSBoYXJkd2ly ZWQgaW50byBsb3RzIG9mIHNjYXR0ZXJlZCB0ZXh0IHN0cmluZ3MuCisqLworaW50ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IGFuIGFycmF5IG9mIGxpbmVzLCAq LworI2lmZGVmIENLX0FOU0lDCitobXNnYWEoY2hhciAqc1tdLCBjaGFyICpzMikJCS8qIHBhdXNp bmcgYXQgZW5kIG9mIGVhY2ggc2NyZWVuLiAqLworI2Vsc2UKK2htc2dhYShzLHMyKSBjaGFyICpz W107IGNoYXIgKnMyOworI2VuZGlmCS8qIENLX0FOU0lDICovCit7CisgICAgZXh0ZXJuIGludCBo bXRvcGxpbmU7CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCB0dF9yb3dzW10sIHR0X2NvbHNb XTsKKyNlbHNlIC8qIE9TMiAqLworICAgIGV4dGVybiBpbnQgdHRfcm93cywgdHRfY29sczsKKyNl bmRpZiAvKiBPUzIgKi8KKyAgICBpbnQgeCwgeSwgaSwgaiwgaywgbjsKKyAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKKworI2lmZGVmIENLX1RUR1dTSVoKKyNpZmRlZiBPUzIK KyAgICB0dGdjd3N6KCk7CisjZWxzZSAvKiBPUzIgKi8KKyAgICAvKiBDaGVjayB3aGV0aGVyIHdp bmRvdyBzaXplIGNoYW5nZWQgKi8KKyAgICBpZiAodHRnd3NpeigpID4gMCkgeworICAgICAgICBp ZiAodHRfcm93cyA+IDAgJiYgdHRfY29scyA+IDApIHsKKyAgICAgICAgICAgIGNtZF9yb3dzID0g dHRfcm93czsKKyAgICAgICAgICAgIGNtZF9jb2xzID0gdHRfY29sczsKKyAgICAgICAgfQorICAg IH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDS19UVEdXU0laICovCisKKyAgICBwcmlu dGYoIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZmYgd2l0aCBhIGJsYW5r IGxpbmUgKi8KKyAgICBuID0gKGhtdG9wbGluZSA+IDApID8gaG10b3BsaW5lIDogMTsgLyogTGlu ZSBjb3VudGVyICovCisgICAgZm9yIChpID0gMDsgKnNbaV07IGkrKykgeworICAgICAgICBwcmlu dGYoKGNoYXIgKilzW2ldLHMyKTsJLyogUHJpbnQgYSBsaW5lLiAqLworCXByaW50ZigiXG4iKTsK KyAgICAgICAgeSA9IChpbnQpc3RybGVuKHNbaV0pOworICAgICAgICBrID0gMTsKKyAgICAgICAg Zm9yIChqID0gMDsgaiA8IHk7IGorKykgICAgICAgICAvKiBTZWUgaG93IG1hbnkgbmV3bGluZXMg d2VyZSAqLworICAgICAgICAgIGlmIChzW2ldW2pdID09ICdcbicpIGsrKzsgICAgIC8qIGluIHRo ZSBzdHJpbmcuLi4gKi8KKyAgICAgICAgbiArPSBrOworICAgICAgICBpZiAobiA+IChjbWRfcm93 cyAtIDMpICYmICpzW2krMV0pIC8qIEFmdGVyIGEgc2NyZWVuZnVsLCBnaXZlIHRoZW0gKi8KKyAg ICAgICAgICBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyAgICAvKiBhICJtb3JlPyIgcHJvbXB0 LiAqLworICAgICAgICAgIGVsc2UgbiA9IDA7CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKKyAg ICByZXR1cm4oMCk7Cit9CisKKy8qICBEIE8gQyBNIEQgIC0tICBEbyBhIGNvbW1hbmQgICovCisK Ky8qCisgUmV0dXJuczoKKyAgIC0yOiB1c2VyIHR5cGVkIGFuIGlsbGVnYWwgY29tbWFuZAorICAg LTE6IHJlcGFyc2UgbmVlZGVkCisgICAgMDogcGFyc2Ugd2FzIHN1Y2Nlc3NmdWwgKGV2ZW4gdGhv IGNvbW1hbmQgbWF5IGhhdmUgZmFpbGVkKS4KKyovCisjaWZkZWYgREVCVUcKK2ludCBjbWRzdGF0 c1syNTZdID0geyAtMSwgLTEgfTsKKyNlbmRpZiAvKiBERUJVRyAqLworCitpbnQKK2RvY21kKGN4 KSBpbnQgY3g7IHsKKyAgICBleHRlcm4gaW50IG5vbG9jYWwsIGNta3dmbGdzOworCisgICAgZGVi dWcoRjEwMSwiZG9jbWQgZW50cnksIGN4IiwiIixjeCk7CisgICAgYWN0aXZlY21kID0gY3g7Cisg ICAgZG9jb254ID0gKChhY3RpdmVjbWQgPT0gWFhDT04pICB8fCAoYWN0aXZlY21kID09IFhYVEVM KSB8fAorCSAgICAgIChhY3RpdmVjbWQgPT0gWFhSTE9HKSB8fCAoYWN0aXZlY21kID09IFhYUElQ RSkgfHwKKyAgICAgICAgICAgICAgKGFjdGl2ZWNtZCA9PSBYWElLU0QpIHx8IChhY3RpdmVjbWQg PT0gWFhQVFkpKTsKKy8qCisgIE9yaWdpbmFsbHkgYWxsIGNvbW1hbmRzIHdlcmUgaGFuZGxlZCB3 aXRoIGEgYmlnIHN3aXRjaCgpIHN0YXRlbWVudCwKKyAgYnV0IGV2ZW50dWFsbHkgdGhpcyBzdGFy dGVkIGJsb3dpbmcgdXAgY29tcGlsZXJzLiAgTm93IHdlIGhhdmUgYSBzZXJpZXMKKyAgb2Ygc2Vw YXJhdGUgaWYgc3RhdGVtZW50cyBhbmQgc21hbGwgc3dpdGNoZXMsIHdpdGggdGhlIGNvbW1hbmRz IHRoYXQgYXJlCisgIG1vc3QgY29tbW9ubHkgZXhlY3V0ZWQgaW4gc2NpcHRzIGFuZCBsb29wcyBj b21pbmcgZmlyc3QsIHRvIHNwZWVkIHVwCisgIGNvbXB1dGUtYm91bmQgc2NyaXB0cy4KKyAgKi8K KworI2lmZGVmIERFQlVHCisgICAgaWYgKGNtZHN0YXRzWzBdID09IC0xKSB7CQkvKiBDb3VudCBj b21tYW5kcyAqLworCWludCBpOwkJCQkvKiBmb3IgdHVuaW5nLi4uICovCisJZm9yIChpID0gMDsg aSA8IDI1NjsgaSsrKQorCSAgY21kc3RhdHNbaV0gPSAwOworICAgIH0KKyNlbmRpZiAvKiBERUJV RyAqLworCisgICAgc3dpdGNoIChjeCkgeworICAgICAgY2FzZSAtNDoJCQkJLyogRU9GICovCisj aWZkZWYgT1NLCisJaWYgKG1zZ2ZsZykgIHByaW50ZigiXG4iKTsKKyNlbHNlCisJaWYgKG1zZ2Zs ZykgIHByaW50ZigiXHJcbiIpOworI2VuZGlmIC8qIE9TSyAqLworCSAgZG9leGl0KEdPT0RfRVhJ VCx4aXRzdGEpOworICAgICAgY2FzZSAtMzoJCQkJLyogTnVsbCBjb21tYW5kICovCisJcmV0dXJu KDApOworICAgICAgY2FzZSAtOToJCQkJLyogTGlrZSAtMiwgYnV0IGVycm1zZyBhbHJlYWR5IGRv bmUgKi8KKyAgICAgIGNhc2UgLTE6CQkJCS8qIFJlcGFyc2UgbmVlZGVkICovCisJcmV0dXJuKGN4 KTsKKyAgICAgIGNhc2UgLTY6CQkJCS8qIFNwZWNpYWwgKi8KKyAgICAgIGNhc2UgLTI6CQkJCS8q IEVycm9yLCBtYXliZSAqLworCisjaWZuZGVmIE5PU1BMCisvKgorICBNYXliZSB0aGV5IHR5cGVk IGEgbWFjcm8gbmFtZS4gIExldCdzIGxvb2sgaXQgdXAgYW5kIHNlZS4KKyovCisJaWYgKGN4ID09 IC02KQkJCS8qIElmIHRoZXkgdHlwZWQgQ1IgKi8KKwkgIGNrc3RybmNhdChjbWRidWYsIlwwMTUi LENNREJMKTsgLyogIGFkZCBpdCBiYWNrIHRvIGNvbW1hbmQgYnVmZmVyLiAqLworCWlmIChpZmNt ZFtjbWRsdmxdID09IDIpCQkvKiBXYXRjaCBvdXQgZm9yIElGIGNvbW1hbmRzLiAqLworCSAgaWZj bWRbY21kbHZsXS0tOworCXJlcGFycyA9IDE7CQkJLyogRm9yY2UgcmVwYXJzZSAqLworCWNtcmVz KCk7CisJY3ggPSBYWERPOwkJCS8qIFRyeSBETyBjb21tYW5kICovCisjZWxzZQorCXJldHVybihj eCk7CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgIGRlZmF1bHQ6CisJaWYgKGN4IDwgMCkKKwkg IHJldHVybihjeCk7CisJYnJlYWs7CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKGN4IDwg MjU2KQorICAgICAgY21kc3RhdHNbY3hdKys7CisjZW5kaWYgLyogREVCVUcgKi8KKworICAgIGlm ICgoY21rd2ZsZ3MgJiBDTV9QU0gpCisjaWZuZGVmIE5PUFVTSAorCSYmIG5vcHVzaAorI2VuZGlm IC8qIE5PUFVTSCAqLworCSkgeworCXByaW50ZigiP0FjY2VzcyB0byBzeXN0ZW0gZGlzYWJsZWRc biIpOworCXJldHVybigtOSk7CisgICAgfQorICAgIGlmICgoY21rd2ZsZ3MgJiBDTV9MT0MpCisj aWZuZGVmIE5PTE9DQUwKKwkmJiBub2xvY2FsCisjZW5kaWYgLyogTk9MT0NBTCAqLworCSkgewor CXByaW50ZigiP0Nvbm5lY3Rpb25zIGRpc2FibGVkXG4iKTsKKwlyZXR1cm4oLTkpOworICAgIH0K KworI2lmbmRlZiBOT1NQTAorICAgIC8qIFVzZWQgaW4gRk9SIGxvb3BzICovCisKKyAgICBpZiAo Y3ggPT0gWFhfSU5DUiB8fCBjeCA9PSBYWElOQyAgfHwgLyogX0lOQ1JFTUVOVCwgSU5DUkVNRU5U ICovCisJY3ggPT0gWFhfREVDUiB8fCBjeCA9PSBYWERFQykJIC8qIF9ERUNSRU1FTlQsIERFQ1JF TUVOVCAqLworICAgICAgcmV0dXJuKGRvaW5jcihjeCkpOworCisgICAgLyogRGVmaW5lIChvciBj aGFuZ2UgdGhlIGRlZmluaXRpb24gb2YpIGEgbWFjcm8gb3IgdmFyaWFibGUgKi8KKworICAgIGlm IChjeCA9PSBYWFVOREVGIHx8IGN4ID09IFhYVU5ERlgpIHsKKyNpZmRlZiBJS1NECisJaWYgKGlu c2VydmVyICYmICFFTkFCTEVEKGVuX2FzZykpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIERFRklO RS9BU1NJR04gZGlzYWJsZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJ S1NEICovCisJcmV0dXJuKGRvdW5kZWYoY3gpKTsJCS8qIFtfXVVOREVGSU5FICovCisgICAgfQor ICAgIGlmIChjeCA9PSBYWERFRiB8fCBjeCA9PSBYWEFTUyB8fAorCWN4ID09IFhYREZYIHx8IGN4 ID09IFhYQVNYKSB7CisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9h c2cpKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBERUZJTkUvQVNTSUdOIGRpc2FibGVkXG4iKTsK KwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworCWlmIChhdG1idWZbMF0g PT0gJy4nICYmICFhdG1idWZbMV0pIC8qICIuIiBlbnRlcmVkIGFzIGtleXdvcmQgKi8KKwkgIHh4 ZG90ID0gMTsJCQkvKiBpLmUuIHdpdGggc3BhY2UgYWZ0ZXIgaXQuLi4gKi8KKwlyZXR1cm4oZG9k ZWYoY3gpKTsJCS8qIERFRklORSwgQVNTSUdOLCBldGMuLi4gKi8KKyAgICB9CisKKyAgICAvKiBJ RiwgV0hJTEUsIGFuZCBmcmllbmRzICAqLworCisgICAgaWYgKGN4ID09IFhYSUYgfHwgY3ggPT0g WFhJRlggfHwgY3ggPT0gWFhXSEkgfHwgY3ggPT0gWFhBU1NFUikgeworCXJldHVybihkb2lmKGN4 KSk7CisgICAgfQorICAgIGlmIChjeCA9PSBYWFNXSVQpIHsJCQkvKiBTV0lUQ0ggKi8KKwlyZXR1 cm4oZG9zd2l0Y2goKSk7CisgICAgfQorCisgICAgLyogR09UTywgRk9SV0FSRCwgYW5kIF9GT1JX QVJEICh1c2VkIGludGVybmFsbHkgYnkgRk9SLCBXSElMRSwgZXRjKSAqLworCisgICAgaWYgKGN4 ID09IFhYR09UTyB8fCBjeCA9PSBYWEZXRCB8fCBjeCA9PSBYWFhGV0QpIHsgLyogR09UTyBvciBG T1JXQVJEICovCisJLyogTm90ZSwgaGVyZSB3ZSBkb24ndCBzZXQgU1VDQ0VTUy9GQUlMVVJFIGZs YWcgKi8KKyNpZmRlZiBDT01NRU5UCisJaWYgKCh5ID0gY21mbGQoImxhYmVsIiwiIiwmcyx4eHN0 cmluZykpIDwgMCkgeworCSAgICBpZiAoeSA9PSAtMykgeworCQlpZiAoY3ggIT0gWFhYRldEKSB7 CisJCSAgICBwcmludGYoIj9MYWJlbCBuYW1lIHJlcXVpcmVkXG4iKTsKKwkJICAgIHJldHVybigt OSk7CisJCX0KKwkgICAgfSBlbHNlCisJICAgICAgcmV0dXJuKHkpOworCX0KKwlja3N0cm5jcHko dG1wYnVmLHMsVE1QQlVGU0laKTsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsK KyNlbHNlCisJaWYgKCh5ID0gY210eHQoImxhYmVsIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgewor CSAgICBpZiAoeSA9PSAtMykgeworCQlpZiAoY3ggIT0gWFhYRldEKSB7CisJCSAgICBwcmludGYo Ij9HT1RPOiBMYWJlbCBuYW1lIHJlcXVpcmVkOiBcIiVzXCIgXCIlc1wiXG4iLAorCQkJICAgYXRt YnVmLAorCQkJICAgY21kYnVmKTsKKwkJICAgIHJldHVybigtOSk7CisJCX0KKwkgICAgfSBlbHNl CisJICAgICAgcmV0dXJuKHkpOworCX0KKwlja3N0cm5jcHkodG1wYnVmLGJyc3RyaXAocyksVE1Q QlVGU0laKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJcyA9IHRtcGJ1ZjsKKwlkZWJ1ZyhGMTEx LCJHT1RPIHRhcmdldCIscyxjeCk7CisJcmV0dXJuKGRvZ290byhzLGN4KSk7CisgICAgfQorICAg IGlmIChjeCA9PSBYWERPIHx8IGN4ID09IFhYTUFDUk8pIHsJLyogRE8gKGEgbWFjcm8pICovCisJ Y2hhciBtbmFtZWJ1ZlsxNl07CQkvKiAoYnVmZmVyIGZvciBjb250cm9sbGVkIHRlbXAgbmFtZSkg Ki8KKwlzdHJ1Y3QgRkRCIGt3LCBmbDsKKwlpbnQgbXg7CQkJCS8qIE1hY3JvIGluZGV4IChvbiBz dGFjayEpICovCisKKwlkZWJ1ZyhGMTAxLCJYWE1BQ1JPIDAiLGxpbmUsY3gpOworCWlmIChjeCA9 PSBYWERPKSB7CisJICAgIGlmIChubWFjID09IDApIHsKKwkJcHJpbnRmKCJcbj9ObyBtYWNyb3Mg ZGVmaW5lZFxuIik7CisJCXJldHVybigtOSk7CisJICAgIH0KKwkgICAgZm9yICh5ID0gMDsgeSA8 IG5tYWM7IHkrKykgeyAvKiBjb3B5IHRoZSBtYWNybyB0YWJsZSBpbnRvIGEgKi8KKwkJbWFja2V5 W3ldLmt3ZCA9IG1hY3RhYlt5XS5rd2Q7IC8qIHJlZ3VsYXIga2V5d29yZCB0YWJsZSAqLworCQlt YWNrZXlbeV0ua3d2YWwgPSB5OwkvKiB3aXRoIHZhbHVlID0gcG9pbnRlciB0byBtYWNybyB0Ymwg Ki8KKwkJbWFja2V5W3ldLmZsZ3MgPSBtYWN0YWJbeV0uZmxnczsKKwkgICAgfQorCSAgICBjbWZk YmkoJmt3LAkJCS8qIEZpcnN0IEZEQiAtIG1hY3JvIG5hbWUgKi8KKwkJICAgX0NNS0VZLAkJLyog ZmNvZGUgKi8KKwkJICAgIk1hY3JvIiwJCS8qIGhscG1zZyAqLworCQkgICAiIiwJCQkvKiBkZWZh dWx0ICovCisJCSAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJCSAgIG5tYWMsCQkv KiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKwkJICAgMCwJCQkvKiBhZGR0bCBu dW1lcmljIGRhdGEgMjogMCA9IGNta2V5ICovCisJCSAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2lu ZyBmdW5jdGlvbiAqLworCQkgICBtYWNrZXksCQkvKiBLZXl3b3JkIHRhYmxlICovCisJCSAgICZm bAkJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkJICAgKTsKKwkgICAgY21mZGJpKCZmbCwJ CQkvKiAybmQgRkRCIC0gZm9yICJ7IiAqLworCQkgICBfQ01GTEQsCQkvKiBmY29kZSAqLworCQkg ICAiIiwJCQkvKiBobHBtc2cgKi8KKwkJICAgIiIsCisJCSAgICIiLAkJCS8qIGFkZHRsIHN0cmlu ZyBkYXRhICovCisJCSAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkJICAgMCwJ CQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworCQkgICB4eHN0cmluZywKKwkJICAgTlVMTCwK KwkJICAgTlVMTAorCQkgICApOworCSAgICB4ID0gY21mZGIoJmt3KTsJCS8qIFBhcnNlIHNvbWV0 aGluZyAqLworCSAgICBpZiAoeCA8IDApIHsJCS8qIEVycm9yICovCisJCWlmICh4ID09IC0zKSB7 CisJCSAgICBwcmludGYoIj9NYWNybyBuYW1lIHJlcXVpcmVkXG4iKTsKKwkJICAgIHJldHVybigt OSk7CisJCX0gZWxzZQorCQkgIHJldHVybih4KTsKKwkgICAgfQorCSAgICBpZiAoY21yZXN1bHQu ZmNvZGUgPT0gX0NNS0VZKSB7CisJCWV4dGVybiBpbnQgbXRjaGFuZ2VkOworCQljaGFyICogbWFj cm9uYW1lID0gTlVMTDsKKworCSAgICAvKiBJbiBjYXNlIGFyZ3MgaW5jbHVkZSBhbiBcZmV4ZWMo KSB0aGF0IGNoYW5nZXMgdGhlIG1hY3JvIHRhYmxlICovCisKKwkJbXggPSB4OwkJCS8qIFNhdmUg bWFjcm8gaW5kZXggb24gc3RhY2sgKi8KKwkJbXRjaGFuZ2VkID0gMDsJCS8qIE1hcmsgc3RhdGUg b2YgbWFjcm8gdGFibGUgKi8KKwkJbWFrZXN0cigmbWFjcm9uYW1lLG1hY3RhYltteF0ua3dkKTsg LyogU2F2ZSBuYW1lICovCisKKwkJaWYgKCh5ID0gY210eHQoIm9wdGlvbmFsIGFyZ3VtZW50cyIs IiIsJnMseHhzdHJpbmcpKSA8IDApCisJCSAgcmV0dXJuKHkpOwkJLyogR2V0IG1hY3JvIGFyZ3Mg Ki8KKworCQlpZiAobXRjaGFuZ2VkKSB7CS8qIE1hY3JvIHRhYmxlIGNoYW5nZWQ/ICovCisJCSAg ICBteCA9IG1sb29rKG1hY3RhYixtYWNyb25hbWUsbm1hYyk7IC8qIExvb2sgdXAgbmFtZSBhZ2Fp biAqLworCQl9CisJCWlmIChtYWNyb25hbWUpCisJCSAgZnJlZShtYWNyb25hbWUpOworCisJCXJl dHVybihkb2RvKG14LHMsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSA8IDEgPworCQkgICAgICAgKHN1 Y2Nlc3MgPSAwKSA6IDEpOworCSAgICB9CisJICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNy ZXN1bHQsTElOQlVGU0laKTsJLyogX0NNRkxEICovCisJICAgIGlmIChhdG1idWZbMF0gPT0gJ3sn KSB7CisJCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKwkJICByZXR1cm4oeSk7CisJICAgIH0KKwl9 IGVsc2UgewkJCS8qIFhYTUFDUk8gKCJpbW1lZGlhdGUgbWFjcm8iKSAqLworCSAgICBpbnQgayA9 IDA7CisJICAgIGxpbmVbaysrXSA9ICd7JzsKKwkgICAgbGluZVtrKytdID0gU1A7CisJICAgIGxp bmVba10gPSBOVUw7CisJICAgIGRlYnVnKEYxMTEsIlhYTUFDUk8gQSIsbGluZSxrKTsKKwkgICAg aWYgKCh5ID0gY210eHQoIkJyYWNlZCBsaXN0IG9mIGNvbW1hbmRzIiwiIiwmcyx4eHN0cmluZykp IDwgMCkKKwkgICAgICByZXR1cm4oeSk7CisJICAgIGsgPSBja3N0cm5jcHkobGluZStrLHMsTElO QlVGU0laLWspOworCSAgICBkZWJ1ZyhGMTExLCJYWE1BQ1JPIEIiLGxpbmUsayk7CisJfQorCXgg PSBzdHJsZW4obGluZSk7CisJaWYgKChsaW5lWzBdID09ICd7JyAmJiBsaW5lW3gtMV0gIT0gJ30n KSB8fCBsaW5lWzBdID09ICd9JykKKwkgIHJldHVybigtMik7CisJaWYgKGxpbmVbMF0gIT0gJ3sn ICYmIGxpbmVbeC0xXSAhPSAnfScpIHsKKwkgICAgLyogVW5rbm93biBjb21tYW5kLiAgSWYgT05f VU5LTk9XTl9DT01NQU5EIG1hY3JvIGlzIGRlZmluZWQsICovCisJICAgIC8qIHBhcnNlIGFyZ3Mg YW5kIHRoZW4gZXhlY3V0ZSBpdCwgYnV0IG9ubHkgaWYgaXQgaXMgbm90ICovCisJICAgIC8qIGFs cmVhZHkgYWN0aXZlLiAqLworCSAgICBpbnQgayA9IC0xOworCSAgICBpZiAoIXVua21hY3JvKSB7 CisJCWsgPSBteGxvb2sobWFjdGFiLCJvbl91bmtub3duX2NvbW1hbmQiLG5tYWMpOworCSAgICB9 CisJICAgIGlmIChrID4gLTEpIHsKKwkJY2tzdHJuY3B5KHRtcGJ1ZixhdG1idWYsVE1QQlVGU0la KTsKKwkJeiA9IG1hY2x2bDsJCS8qIFNhdmUgdGhlIGN1cnJlbnQgbWFjbHZsICovCisJCWlmICgo eSA9IGNtdHh0KCJ0ZXh0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICByZXR1cm4oeSk7CisJ CWNrc3RybmNhdCh0bXBidWYsIiAiLFRNUEJVRlNJWik7CisJCWNrc3RybmNhdCh0bXBidWYscyxU TVBCVUZTSVopOworCQl1bmttYWNybyA9IDE7CisJCWRlYnVnKEYxMTAsIk9OX1VOS05PV05fQ09N TUFORCIscywwKTsKKwkJZG9kbyhrLHRtcGJ1ZixjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpOyAvKiBS dW4gdGhlIG1hY3JvICovCisJCXdoaWxlIChtYWNsdmwgPiB6KSB7CisJCSAgICBzc3RhdGUgPSAo Q0hBUikgcGFyc2VyKDEpOworCQkgICAgaWYgKHNzdGF0ZSkgcHJvdG8oKTsKKwkJfQorCQlkZWJ1 ZyhGMTAxLCJVTktNQUMgbG9vcCBleGl0IG1hY2x2bCIsIiIsbWFjbHZsKTsKKwkJdW5rbWFjcm8g PSAwOworCQlyZXR1cm4oc3VjY2Vzcyk7CisJICAgIH0KKyAgICAgICAgICAgIGlmICh4ID4gMCkK KwkgICAgICBwcmludGYoIj9Ob3QgYSBjb21tYW5kIG9yIG1hY3JvIG5hbWU6IFwiJXNcIlxuIixs aW5lKTsKKyAgICAgICAgICAgIGVsc2UKKwkgICAgICBwcmludGYoIj9Ob3QgYSBjb21tYW5kIG9y IG1hY3JvIG5hbWUuXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJcyA9IGJyc3RyaXAobGlu ZSk7CisJc3ByaW50ZihtbmFtZWJ1ZiwiIC4udG1wOiUwM2QiLGNtZGx2bCk7CS8qIHNhZmUgKDE2 KSAqLworCXggPSBhZGRtYWMobW5hbWVidWYscyk7CisJcmV0dXJuKGRvZG8oeCxOVUxMLGNtZHN0 a1tjbWRsdmxdLmNjZmxncykgPCAxID8gKHN1Y2Nlc3MgPSAwKSA6IDEpOworICAgIH0KKworICAg IGlmIChjeCA9PSBYWExCTCkgewkJCS8qIExBQkVMICovCisJaWYgKCh4ID0gY21mbGQoImxhYmVs IiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworCSAgICBpZiAoeCA9PSAtMykgeworI2lmZGVmIENP TU1FTlQKKwkJcHJpbnRmKCI/TEFCRUw6IExhYmVsIG5hbWUgcmVxdWlyZWQ6IFwiJXNcIlxuIiwg Y21kYnVmKTsKKwkJcmV0dXJuKC05KTsKKyNlbHNlCisJCXMgPSAiIjsKKyNlbmRpZiAvKiBDT01N RU5UICovCisJICAgIH0gZWxzZSByZXR1cm4oeCk7CisKKwl9CisJZGVidWcoRjExMSwiTEFCRUwi LHMseCk7CisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJcmV0dXJuKDApOwor ICAgIH0KKworICAgIGlmIChjeCA9PSBYWEVWQUwgfHwgY3ggPT0gWFhfRVZBTCkgLyogX0VWQUxV QVRFLCAgRVZBTFVBVEUgICovCisgICAgICByZXR1cm4oZG9ldmFsKGN4KSk7CisKKyNpZm5kZWYg Tk9TRVhQCisgICAgaWYgKGN4ID09IFhYU0VYUCkgewkJCS8qIExpc3AtbGlrZSBTLUV4cHJlc3Np b24gKi8KKwlzdHJ1Y3Qgc3RyaW5nYXJyYXkgKiBxOworCWNoYXIgLyogKnAsICpyLCAqLyAqdG1w LCAqbTsKKwlpbnQgaSwgaywgbiwgcXVvdGUgPSAwLCBjb250ZCA9IDAsIHNpemUgPSAwLCBsZW4g PSAwOworCWV4dGVybiBpbnQgc2V4cHJjLCBzZXhwcHY7CisKKwl0bXAgPSB0bXBidWY7CQkJLyog QnVmZmVyIHRvIGNvbGxlY3QgU0VYUCAqLworCXRtcGJ1ZlswXSA9IE5VTDsJCS8qIENsZWFyIGl0 ICovCisJc2l6ZSA9IFRNUEJVRlNJWjsJCS8qIENhcGFjaXR5IG9mIGJ1ZmZlciAqLworCXNleHBy YyA9IC0xOwkJCS8qIEFzc3VtZSBiYWQgaW5wdXQgKi8KKwluID0gMDsJCQkJLyogUGFyZW4gYmFs YW5jZSBjb3VudGVyICovCisKKwl3aGlsZSAoMSkgewkJCS8qIEFsbG93IFNFWFAgb24gbXVsdGlw bGUgbGluZXMgKi8KKwkgICAgbSA9IGNvbnRkID8KKwkgICAgICAiQ29udGludWF0aW9uIG9mIFMt RXhwcmVzc2lvbiIgOgorCQkiUy1FeHByZXNzaW9uIChcImhlbHAgc2V4cFwiIGZvciBkZXRhaWxz KSI7CisJICAgIHggPSBjbXR4dChtLCIiLCZzLHh4c3RyaW5nKTsKKwkgICAgaWYgKHggPCAwKQor CSAgICAgIHJldHVybih4KTsKKwkgICAgaWYgKCEqcykJCQkvKiBOZWVkZWQgZm9yICg9KSBhbmQg KDopICovCisJICAgICAgcyA9IGNtZGJ1ZisxOwkJLyogSSBjYW4ndCBleHBsYWluIHdoeS4gKi8K KwkgICAgayA9IGNrbWFrbXNnKHRtcCwgc2l6ZSwgY29udGQgPyAiICIgOiAiKCIsIHMsIE5VTEws IE5VTEwpOworCSAgICBpZiAoayA8IDEpIHsKKwkJcHJpbnRmKCI/U0VYUCB0b28gbG9uZyAtICVk IG1heFxuIixUTVBCVUZTSVopOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJICAgIGRlYnVnKEYx MTEsY29udGQgPyAic2V4cCBjb250ZCIgOiAic2V4cCIscyxrKTsKKworCSAgICBmb3IgKGkgPSBs ZW47IGkgPCBsZW4razsgaSsrKSB7IC8qIENoZWNrIGJhbGFuY2UgICovCisJCWlmICghcXVvdGUg JiYgdG1wYnVmW2ldID09IENNRFEpIHsKKwkJICAgIHF1b3RlID0gMTsKKwkJICAgIGNvbnRpbnVl OworCQl9CisJCWlmIChxdW90ZSkgeworCQkgICAgcXVvdGUgPSAwOworCQkgICAgY29udGludWU7 CisJCX0KKwkJaWYgKHRtcGJ1ZltpXSA9PSAnKCcpCisJCSAgbisrOworCQllbHNlIGlmICh0bXBi dWZbaV0gPT0gJyknKQorCQkgIG4tLTsKKwkgICAgfQorCSAgICBpZiAobiA9PSAwKSB7CQkvKiBC cmVhayB3aGVuIGJhbGFuY2VkICovCisJCWJyZWFrOworCSAgICB9CisJICAgIGlmIChuIDwgMCkg ewkJLyogVG9vIG1hbnkgcmlnaHQgcGFyZW5zICovCisJCXByaW50ZigiP1VuYmFsYW5jZWQgUy1F eHByZXNzaW9uOiBcIiVzXCJcbiIsdG1wYnVmKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorCSAg ICBjb250ZCsrOwkJCS8qIE5lZWQgbW9yZSByaWdodCBwYXJlbnMgKi8KKwkgICAgY21pbmkoY2t4 ZWNoKTsJCS8qIHNvIGtlZXAgcGFyc2luZyAqLworCSAgICB0bXAgKz0gazsJCQkvKiBhZGp1c3Qg YnVmZmVyIHBvaW50ZXIgKi8KKwkgICAgc2l6ZSAtPSBrOwkJCS8qIGFuZCBjYXBhY2l0eSAqLwor CSAgICBsZW4gKz0gazsJCQkvKiBhbmQgbGVuZ3RoIHNvIGZhciAqLworCX0KKwlzID0gdG1wYnVm OworCW1ha2VzdHIoJmxhc3RzZXhwLHMpOworCXEgPSBja3NwbGl0KDEsU0VYUE1BWCxzLE5VTEws TlVMTCw4LDAsMCk7IC8qIFByZWNoZWNrIGZvciA+IDEgU0VYUCAqLworCWRlYnVnKEYxMDEsInNl eHAgc3BsaXQiLCIiLHEtPmFfc2l6ZSk7CisKKwlpZiAocS0+YV9zaXplID09IDEpIHsJCS8qIFdl IHNob3VsZCBnZXQgZXhhY3RseSBvbmUgYmFjayAqLworCSAgICBjaGFyICogcmVzdWx0LCAqIGRv c2V4cCgpOworCSAgICBzZXhwcmMgPSAwOwkJCS8qIFJlc2V0IG91dC1vZi1iYW5kIHJldHVybiBj b2RlICovCisJICAgIHJlc3VsdCA9IGRvc2V4cChzKTsJCS8qIEdldCByZXN1bHQgKi8KKwkgICAg ZGVidWcoRjExMSwic2V4cCByZXN1bHQiLHJlc3VsdCxzZXhwcmMpOworCSAgICBpZiAoc2V4cHJj ID09IDApIHsJCS8qIFN1Y2Nlc3MgKi8KKwkJLyogRWNobyB0aGUgcmVzdWx0IGlmIGRlc2lyZWQg Ki8KKwkJaWYgKCgheGNtZHNyYyAmJiBzZXhwZWNobyAhPSBTRVRfT0ZGKSB8fCBzZXhwZWNobyA9 PSBTRVRfT04pCisJCSAgcHJpbnRmKCIgJXNcbiIscmVzdWx0ID8gcmVzdWx0IDogIiIpOworCQlt YWtlc3RyKCZzZXhwdmFsLHJlc3VsdCk7CisJCXN1Y2Nlc3MgPSBzZXhwcHYgPiAtMSA/IHNleHBw diA6IDE7CisJCXJldHVybihzdWNjZXNzKTsKKwkgICAgfQorCX0KKwlpZiAoc2V4cHJjIDwgMCkK KwkgIHByaW50ZigiP0ludmFsaWQgUy1FeHByZXNzaW9uOiBcIiVzXCJcbiIsbGFzdHNleHApOwor CXJldHVybigtOSk7CisgICAgfQorI2VuZGlmIC8qIE5PU0VYUCAqLworCisjZW5kaWYgLyogTk9T UEwgKi8KKworICAgIGlmIChjeCA9PSBYWEVDSCB8fCBjeCA9PSBYWFhFQ0ggfHwgY3ggPT0gWFhW T0lECisjaWZuZGVmIE5PU1BMCisJfHwgY3ggPT0gWFhBUEMKKyNlbmRpZiAvKiBOT1NQTCAqLwor CSkgewkJCQkvKiBFQ0hPIG9yIEFQQyAqLworCWlmICgoeCA9IGNtdHh0KChjeCA9PSBYWEVDSCB8 fCBjeCA9PSBYWFhFQ0gpID8KKwkJICAgICAgICJUZXh0IHRvIGJlIGVjaG9lZCIgOgorCQkgICAg ICAgKChjeCA9PSBYWFZPSUQpID8gIlRleHQiIDoKKwkJCSJBcHBsaWNhdGlvbiBQcm9ncmFtIENv bW1hbmQgdGV4dCIpLAorCQkgICAgICAgIiIsCisJCSAgICAgICAmcywKKwkJICAgICAgIHh4c3Ry aW5nCisJCSAgICAgICApCisJICAgICApIDwgMCkKKwkgIHJldHVybih4KTsKKwlpZiAoIXMpIHMg PSAiIjsKKyNpZmRlZiBDT01NRU5UCisvKiBUaGlzIGlzIHRvIHByZXNlcnZlIHRoZSBwcmUtOC4w IGJlaGF2aW9yIGJ1dCBpdCdzIHRvbyBjb25mdXNpbmcgKi8KKwl4ID0gc3RybGVuKHMpOworCXgg PSAoeCA+IDEpID8gKChzWzBdID09ICciJyAmJiBzW3gtMV0gPT0gJyInKSA/IDEgOiAwKSA6IDA7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworCXMgPSBicnN0cmlwKHMpOwkJCS8qIFN0cmlwIGJyYWNl cyBhbmQgZG91YmxlcXVvdGVzICovCisJaWYgKGN4ID09IFhYRUNIKSB7CQkvKiBFQ0hPICovCisj aWZuZGVmIE5PU1BMCisJICAgIGlmICghZm5kaWFncyB8fCBmbnN1Y2Nlc3MpIHsKKyNlbmRpZiAv KiBOT1NQTCAqLworI2lmZGVmIENPTU1FTlQKKwkJLyogVGhlICJpZiAoeCkiIGJ1c2luZXNzIHBy ZXNlcnZlcyBwcmV2aW91cyBiZWhhdmlvciAqLworCQkvKiBieSBwdXR0aW5nIGJhY2sgdGhlIGRv dWJsZXF1b3RlcyBpZiB0aGV5IHdlcmUgaW5jbHVkZWQuICovCisJCWlmICh4KQorCQkgIHByaW50 ZigiXCIlc1wiXG4iLHMpOworCQllbHNlCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkgIHByaW50 ZigiJXNcbiIscyk7CisjaWZuZGVmIE5PU1BMCisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLwor CX0gZWxzZSBpZiAoY3ggPT0gWFhYRUNIKSB7CS8qIFhFQ0hPICovCisJICAgIGlmICh4KQorCSAg ICAgIHByaW50ZigiXCIlc1wiIixzKTsKKwkgICAgZWxzZQorCSAgICAgIHByaW50ZigiJXMiLHMp OworI2lmZGVmIFVOSVgKKwkgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLwor CX0gZWxzZSBpZiAoY3ggPT0gWFhBUEMpIHsJLyogQVBDICovCisjaWZkZWYgQ0tfQVBDCisJICAg IGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8CisJCShhcGNhY3RpdmUgPT0gQVBDX1JFTU9U RSAmJiAhKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpCisJICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKwkgICAgaWYgKCFsb2NhbCkgeworCQlwcmludGYoIiVj XyVzJWNcXCIsRVNDLHMsRVNDKTsKKyNpZmRlZiBVTklYCisJCWZmbHVzaChzdGRvdXQpOworI2Vu ZGlmIC8qIFVOSVggKi8KKworCSAgICB9IGVsc2UgewkJCS8qIExvY2FsIG1vZGUgLSBoYXZlIGNv bm5lY3Rpb24gKi8KKyNpZm5kZWYgTk9TUEwKKwkJaWYgKGNrbWFreG1zZyh0bXBidWYsCS8qIEZv cm0gQVBDIHN0cmluZyBpbiBidWZmZXIgKi8KKwkJCSAgICAgIFRNUEJVRlNJWiwKKwkJCSAgICAg IGNrY3RvYSgoY2hhcilFU0MpLAorCQkJICAgICAgY2tjdG9hKCdfJyksCisJCQkgICAgICBzLAor CQkJICAgICAgY2tjdG9hKChjaGFyKUVTQyksCisJCQkgICAgICBja2N0b2EoJ1xcJyksCisJCQkg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisJCQkgICAgICApID4gMCkK KwkJICByZXR1cm4oc3VjY2VzcyA9IGRvb3V0cHV0KHRtcGJ1ZiwgWFhPVVQpKTsKKwkJcHJpbnRm KCI/VG9vIGxvbmdcbiIpOworCQlyZXR1cm4oLTkpOworI2Vsc2UKKwkJcHJpbnRmKCIlY18lcyVj XFwiLEVTQyxzLEVTQyk7CisjZW5kaWYgLyogTk9TUEwgKi8KKwkgICAgfQorCX0KKwlyZXR1cm4o c3VjY2VzcyA9IDEpOworICAgIH0KKworI2lmbmRlZiBOT1NQTAorLyogQ29weSBtYWNybyBhcmdz IGZyb20vdG8gdHdvIGxldmVscyB1cCwgdXNlZCBpbnRlcm5hbGx5IGJ5IF9mbG9vcCBldCBhbC4g Ki8KKyAgICBpZiAoY3ggPT0gWFhHVEEgfHwgY3ggPT0gWFhQVEEpIHsJLyogX0dFVEFSR1MsIF9Q VVRBUkdTICovCisJaW50IHg7CisJZGVidWcoRjEwMSwiZG9jbWQgWFhHVEEiLCIiLFhYR1RBKTsK KwlkZWJ1ZyhGMTAxLCJkb2NtZCBjeCIsIiIsY3gpOworCWRlYnVnKEYxMDEsImRvY21kIFhYR1RB IG1hY2x2bCIsIiIsbWFjbHZsKTsKKwl4ID0gZG9ndGEoY3gpOworCWRlYnVnKEYxMDEsImRvY21k IGRvZ3RhIHJldHVybnMiLCIiLHgpOworCWRlYnVnKEYxMDEsImRvY21kIGRvZ3RhIG1hY2x2bCIs IiIsbWFjbHZsKTsKKwlyZXR1cm4oeCk7CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNp Zm5kZWYgTk9TUEwKKyNpZmRlZiBDS0NIQU5ORUxJTworICAgIGlmIChjeCA9PSBYWEZJTEUpCisg ICAgICByZXR1cm4oZG9maWxlKGN4KSk7CisgICAgZWxzZSBpZiAoY3ggPT0gWFhGX1JFIHx8IGN4 ID09IFhYRl9XUiB8fCBjeCA9PSBYWEZfT1AgfHwKKwkgICAgIGN4ID09IFhYRl9DTCB8fCBjeCA9 PSBYWEZfU0UgfHwgY3ggPT0gWFhGX1JXIHx8CisJICAgICBjeCA9PSBYWEZfRkwgfHwgY3ggPT0g WFhGX0xJIHx8IGN4ID09IFhYRl9TVCB8fCBjeCA9PSBYWEZfQ08pCisgICAgICByZXR1cm4oZG9m aWxlKGN4KSk7CisjZW5kaWYgLyogQ0tDSEFOTkVMSU8gKi8KKworLyogQVNLLCBBU0tRLCBSRUFE ICovCisgICAgaWYgKGN4ID09IFhYQVNLICB8fCBjeCA9PSBYWEFTS1EgfHwgY3ggPT0gWFhSRUEg fHwKKwljeCA9PSBYWFJEQkwgfHwgY3ggPT0gWFhHRVRDIHx8IGN4ID09IFhYR0VUSykgeworCXJl dHVybihkb2FzayhjeCkpOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5P RlJJTExTCisjaWZuZGVmIE5PSEVMUAorICAgIGlmIChjeCA9PSBYWEJVRykgewkJCS8qIEJVRyAq LworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCXJldHVybihkb2J1ZygpKTsK KyAgICB9CisjZW5kaWYJLyogTk9IRUxQICovCisjZW5kaWYJLyogTk9GUklMTFMgKi8KKworI2lm bmRlZiBOT1hGRVIKKyAgICBpZiAoY3ggPT0gWFhCWUUpIHsJCQkvKiBCWUUgKi8KKwlleHRlcm4g aW50IGZ0cF9jbWRsaW47CisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisKKyNp ZmRlZiBORVdGVFAKKwlpZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBp c29wZW4oKSkpIHsKKwkgICAgZXh0ZXJuIGludCBzdGF5ZmxnLCBmdHBfZmFpOworCSAgICBzdWNj ZXNzID0gZnRwYnllKCk7CisJICAgIGlmIChmdHBfY21kbGluICYmICFzdGF5ZmxnICYmICFsb2Nh bCkKKwkgICAgICBkb2V4aXQoZnRwX2ZhaSA/IEJBRF9FWElUIDogR09PRF9FWElULC0xKTsKKwkg ICAgZWxzZQorCSAgICAgIHJldHVybihzdWNjZXNzKTsKKwl9CisjZW5kaWYgLyogTkVXRlRQICov CisKKwlpZiAoIWxvY2FsKSB7CisJICAgIHByaW50ZigiP05vIGNvbm5lY3Rpb24gLSB1c2UgRVhJ VCB0byBxdWl0LlxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCisjaWZkZWYgQ0tfWFlaCisJ aWYgKHByb3RvY29sICE9IFBST1RPX0spIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIEJZRSBvbmx5 IHdvcmtzIHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9Cisj ZW5kaWYgLyogQ0tfWFlaICovCisKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgIGlmICgKKyNp ZmRlZiBDS19YWVoKKyAgICAgICAgICAgIHByb3RvY29sID09IFBST1RPX0sgJiYKKyNlbmRpZiAv KiBDS19YWVogKi8KKyAgICAgICAgICAgICFpa3Nfd2FpdChLRVJNSVRfUkVRX1NUQVJULDEpKSB7 CisJICAgIHByaW50ZigKKwkgICAgICI/QSBLZXJtaXQgU2VydmVyIGlzIG5vdCBhdmFpbGFibGUg dG8gcHJvY2VzcyB0aGlzIGNvbW1hbmRcbiIpOworCSAgICByZXR1cm4oLTkpOwkJCS8qIENvcnJl Y3QgdGhlIHJldHVybiBjb2RlICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBJS1NfT1BUSU9OICov CisKKwlieWVfYWN0aXZlID0gMTsKKwlzc3RhdGUgPSBzZXRnZW4oJ0wnLCIiLCIiLCIiKTsKKwlp ZiAobG9jYWwpIHR0Zmx1aSgpOwkJLyogSWYgbG9jYWwsIGZsdXNoIHR0eSBpbnB1dCBidWZmZXIg Ki8KKwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAgaWYgKGN4 ID09IFhYQkVFUCkgewkJCS8qIEJFRVAgKi8KKyAgICAgICAgaW50IHg7CisjaWZkZWYgT1MyCisJ aW50IHk7CisgICAgICAgIGlmICgoeSA9IGNta2V5KGJlZXB0YWIsIG5iZWVwdGFiLCAid2hpY2gg a2luZCBvZiBiZWVwIiwgImluZm9ybWF0aW9uIiwKKwkJICAgICAgIHh4c3RyaW5nKSkgPCAwICkK KwkgIHJldHVybiAoeSk7CisgICAgCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOwor ICAgICAgICBibGVlcCgoc2hvcnQpeSk7CQkvKiB5IGlzIG9uZSBvZiB0aGUgQlBfIHZhbHVlcyAq LworI2Vsc2UgIC8qIE9TMiAqLworICAgIAlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgYmxlZXAoQlBfTk9URSk7CisjZWxzZQorCXB1dGNo YXIoJ1wwNycpOworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAg IHJldHVybigwKTsKKyAgICB9CisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICBpZiAoY3ggPT0gWFhD TEUpCQkJLyogQ0xFQVIgKi8KKyAgICAgIHJldHVybihzdWNjZXNzID0gZG9jbGVhcigpKTsKKyNl bmRpZiAvKiBOT0ZSSUxMUyAqLworCisgICAgaWYgKGN4ID09IFhYQ09NKSB7CQkJLyogQ09NTUVO VCAqLworCWlmICgoeCA9IGNtdHh0KCJUZXh0IG9mIGNvbW1lbnQgbGluZSIsIiIsJnMsTlVMTCkp IDwgMCkKKwkgIHJldHVybih4KTsKKwkvKiBEb24ndCBjaGFuZ2UgU1VDQ0VTUyBmbGFnIGZvciB0 aGlzIG9uZSAqLworCXJldHVybigwKTsKKyAgICB9CisKKyNpZm5kZWYgTk9MT0NBTAorICAgIGlm IChjeCA9PSBYWENPTiB8fCBjeCA9PSBYWENRKQkvKiBDT05ORUNUIG9yIENPTk5FQ1QgL1FVSUVU TFkgKi8KKyAgICAgIHJldHVybihkb3hjb25uKGN4KSk7CisjZW5kaWYgLyogTk9MT0NBTCAqLwor CisjaWZuZGVmIE5PRlJJTExTCisjaWZkZWYgWkNPUFkKKyAgICBpZiAoY3ggPT0gWFhDUFkpIHsJ CQkvKiBDT1BZIGEgZmlsZSAqLworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJM RUQoZW5fY3B5KSkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgQ09QWSBpcyBkaXNhYmxlZFxuIik7 CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBDS19BUEMK KwlpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAorCSAgICAoYXBjYWN0aXZlID09IEFQQ19S RU1PVEUgJiYgIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpCisJICAgICkKKwkgIHJldHVybihzdWNj ZXNzID0gMCk7CisjZW5kaWYgLyogQ0tfQVBDICovCisJcmV0dXJuKGRvY29weSgpKTsKKyAgICB9 CisjZW5kaWYgLyogWkNPUFkgKi8KKyNpZmRlZiBOVAorICAgIGlmICggY3ggPT0gWFhMSU5LICkg eworI2lmZGVmIElLU0QKKyAgICAgICAgaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX2NweSkp IHsKKyAgICAgICAgICAgIHByaW50ZigiP1NvcnJ5LCBMSU5LIChDT1BZKSBpcyBkaXNhYmxlZFxu Iik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisjZW5kaWYgLyogSUtTRCAq LworI2lmZGVmIENLX0FQQworICAgICAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19MT0NBTCB8fAor ICAgICAgICAgICAgKGFwY2FjdGl2ZSA9PSBBUENfUkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBD X1VOQ0gpKQorICAgICAgICAgICAgKQorICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7Cisj ZW5kaWYgLyogQ0tfQVBDICovCisgICAgICAgIHJldHVybihkb2xpbmsoKSk7CisgICAgfQorI2Vu ZGlmIC8qIE5UICovCisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworICAgIC8qIENEIGFuZCBmcmll bmRzICovCisgICAgaWYgKGN4ID09IFhYQ1dEICB8fCBjeCA9PSBYWENEVVAgfHwgY3ggPT0gWFhC QUNLIHx8CisJY3ggPT0gWFhMQ1dEIHx8IGN4ID09IFhYTENEVSB8fCBjeCA9PSBYWEtDRCkgewor I2lmZGVmIExPQ1VTCisJaWYgKCFsb2N1cykgeworCSAgICBpZiAoY3ggPT0gWFhDV0QpIHsKKyNp ZmRlZiBOT1hGRVIKKyAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworI2Vsc2UKKyAgICAgICAg ICAgICAgICByZXR1cm4oZG9ybXQoWFpDV0QpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwkgICAg fSBlbHNlIGlmIChjeCA9PSBYWENEVVApIHsKKyNpZmRlZiBOT1hGRVIKKyAgICAgICAgICAgICAg ICByZXR1cm4oLTIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4oZG9ybXQoWFpDRFUp KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgICAgIH0KKwl9CisjZW5kaWYgLyogTE9D VVMgKi8KKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX2N3ZCkpIHsK KwkgICAgcHJpbnRmKCI/U29ycnksIGNoYW5naW5nIGRpcmVjdG9yaWVzIGlzIGRpc2FibGVkXG4i KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworCXJldHVybihzdWNj ZXNzID0gZG9jZChjeCkpOworICAgIH0KKworICAgIGlmIChjeCA9PSBYWENISykJCQkvKiBDSEVD SyAqLworICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBkb2NoaygpKTsKKworICAgIGlmIChjeCA9PSBY WENMTykgewkJCS8qIENMT1NFICovCisJeCA9IGNta2V5KGNsc3RhYixuY2xzLCJcIkNPTk5FQ1RJ T05cIiwgb3IgbG9nIG9yIGZpbGUgdG8gY2xvc2UiLAorCQkgICJjb25uZWN0aW9uIix4eHN0cmlu Zyk7CisJaWYgKHggPT0gLTMpIHsKKwkgICAgcHJpbnRmKCI/WW91IG11c3Qgc2F5IHdoaWNoIGZp bGUgb3IgbG9nXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJaWYgKHggPCAwKSByZXR1cm4o eCk7CisJaWYgKCh5ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeSk7CisjaWZuZGVmIE5PTE9DQUwK KwlpZiAoeCA9PSA5OTk5KSB7CQkvKiBDTE9TRSBDT05ORUNUSU9OICovCisJICAgIHggPSBjbHNj b25ueCgwKTsKKwkgICAgc3dpdGNoICh4KSB7CisJICAgICAgY2FzZSAwOgorCQlpZiAobXNnZmxn KSBwcmludGYoIj9Db25uZWN0aW9uIHdhcyBub3Qgb3BlblxuIik7CisJICAgICAgY2FzZSAtMToK KwkJcmV0dXJuKDApOworCSAgICAgIGNhc2UgMToKKwkJd2h5Y2xvc2VkID0gV0NfQ0xPUzsKKwkJ cmV0dXJuKDEpOworCSAgICB9CisJICAgIHJldHVybigwKTsKKwl9CisjZW5kaWYgLyogTk9MT0NB TCAqLworCXkgPSBkb2Nsc2xvZyh4KTsKKwlzdWNjZXNzID0gKHkgPT0gMSk7CisJcmV0dXJuKHN1 Y2Nlc3MpOworICAgIH0KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChjeCA9PSBYWERDTCB8fCBj eCA9PSBYWFVORENMKSB7CS8qIERFQ0xBUkUgYW4gYXJyYXkgKi8KKwlyZXR1cm4oZG9kY2woY3gp KTsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT0RJQUwKKyAgICBpZiAo Y3ggPT0gWFhSRUQgIHx8IGN4ID09IFhYRElBTCB8fCBjeCA9PSBYWFBESUEgfHwKKwljeCA9PSBY WEFOU1cgfHwgY3ggPT0gWFhMT09LKSB7IC8qIERJQUwsIFJFRElBTCBldGMgKi8KKyNpZmRlZiBW TVMKKwlleHRlcm4gaW50IGJhdGNoOworI2Vsc2UKKyNpZmRlZiBVTklYT1JPU0sKKwlleHRlcm4g aW50IGJhY2tncmQ7CisjZW5kaWYgLyogVU5JWE9ST1NLICovCisjZW5kaWYgLyogVk1TICovCisJ eCA9IGRvZGlhbChjeCk7CisJZGVidWcoRjEwMSwiZG9kaWFsIHJldHVybnMiLCIiLHgpOworCWlm ICgoY3ggPT0gWFhESUFMIHx8IGN4ID09IFhYUkVEIHx8IGN4ID09IFhYQU5TVykgJiYKKwkgICAg KHggPiAwKSAmJgkJCS8qIElmIERJQUwgb3IgUkVESUFMIHN1Y2NlZWRlZCAqLworCSAgICAoZGlh bHN0YSAhPSBESUFfUEFSVCkgJiYJLyogYW5kIGl0IHdhc24ndCBwYXJ0aWFsICovCisJICAgIChk aWFsY29uID4gMCkpIHsKKwkgICAgaWYgKChkaWFsY29uID09IDEgfHwJLyogQW5kIERJQUwgQ09O TkVDVCBpcyBPTiwgKi8KKwkJKChkaWFsY29uID09IDIpICYmCS8qIG9yIERJQUwgQ09OTkVDVCBp cyBBVVRPICovCisJCSAheGNtZHNyYwkJLyogYW5kIHdlJ3JlIGF0IHRvcCBsZXZlbC4uLiAqLwor I2lmZGVmIFZNUworCQkgJiYgIWJhdGNoCQkvKiBOb3QgaWYgcnVubmluZyBmcm9tIGJhdGNoICov CisjZWxzZQorI2lmZGVmIFVOSVhPUk9TSworCQkgJiYgIWJhY2tncmQJCS8qIE5vdCBpZiBydW5u aW5nIGluIGJhY2tncm91bmQgKi8KKyNlbmRpZiAvKiBVTklYT1JPU0sgKi8KKyNlbmRpZiAvKiBW TVMgKi8KKwkJICkpKSAvKiBPciBBVVRPICovCisJICAgICAgeCA9IGRvY29uZWN0KGRpYWxjcSwJ LyogVGhlbiBhbHNvIENPTk5FQ1QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZGx2 bCA9PSAwID8gMSA6IDAKKwkJCSAgICk7CisJICAgIGlmICh0dGNoaygpIDwgMCkKKwkgICAgICBk b2xvZ2VuZCgpOworCX0KKwlyZXR1cm4oc3VjY2VzcyA9IHgpOworICAgIH0KKyNlbmRpZiAvKiBO T0RJQUwgKi8KKworI2lmbmRlZiBOT1BVU0gKKyNpZmRlZiBDS19SRVhYCisgICAgaWYgKGN4ID09 IFhYUkVYWCkgewkJCS8qIFJFWFggKi8KKyAgICAgICAgZXh0ZXJuIGludCBub3B1c2g7CisgICAg ICAgIGlmICggbm9wdXNoICkKKyAgICAgICAgICByZXR1cm4oc3VjY2Vzcz0wKTsKKyAgICAgICAg cmV0dXJuKGRvcmV4eCgpKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfUkVYWCAqLworI2VuZGlmIC8q IE5PUFVTSCAqLworCisjaWZuZGVmIE5PRlJJTExTCisgICAgaWYgKGN4ID09IFhYREVMIHx8IGN4 ID09IFhYTERFTCkgewkvKiBERUxFVEUgKi8KKyNpZmRlZiBMT0NVUworCWlmICghbG9jdXMgJiYg Y3ggIT0gWFhMREVMKSB7CisjaWZkZWYgTk9YRkVSCisJICAgIHJldHVybigtMik7CisjZWxzZQor CSAgICByZXR1cm4oZG9ybXQoWFpERUwpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAg fQorI2VuZGlmIC8qIExPQ1VTICovCisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAoIUVO QUJMRUQoZW5fZGVsKQorI2lmZGVmIENLX0xPR0lOCisJCQkgfHwgaXNndWVzdAorI2VuZGlmIC8q IENLX0xPR0lOICovCisJCQkgKSkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgREVMRVRFIGlzIGRp c2FibGVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworI2lm ZGVmIENLX0FQQworCWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NBTCkgfHwKKwkgICAgKChhcGNh Y3RpdmUgPT0gQVBDX1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKSkpCisJICBy ZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIENLX0FQQyAqLworCXJldHVybihkb2RlbCgp KTsKKyAgICB9CisjZW5kaWYgLyogTk9GUklMTFMgKi8KKworICAgIGlmIChjeCA9PSBYWFRPVUMp CQkJLyogVE9VQ0ggKi8KKyAgICAgIHJldHVybihkb2RpcihjeCkpOworCisgICAgLyogRElSRUNU T1JZIGNvbW1hbmRzICovCisKKyAgICBpZiAoY3ggPT0gWFhESVIgIHx8IGN4ID09IFhYTFMgfHwg Y3ggPT0gWFhMRElSIHx8CisJY3ggPT0gWFhXRElSIHx8IGN4ID09IFhYSERJUikgeworI2lmZGVm IExPQ1VTCisJaWYgKCFsb2N1cyAmJiBjeCAhPSBYWExESVIpIHsKKyNpZmRlZiBOT1hGRVIKKwkg ICAgcmV0dXJuKC0yKTsKKyNlbHNlCisJICAgIHJldHVybihkb3JtdChYWkRJUikpOworI2VuZGlm IC8qIE5PWEZFUiAqLworICAgICAgICB9CisjZW5kaWYgLyogTE9DVVMgKi8KKyNpZmRlZiBJS1NE CisJaWYgKGluc2VydmVyICYmICFFTkFCTEVEKGVuX2RpcikpIHsKKwkgICAgcHJpbnRmKCI/U29y cnksIERJUkVDVE9SWSBpcyBkaXNhYmxlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2Vu ZGlmIC8qIElLU0QgKi8KKwlyZXR1cm4oZG9kaXIoY3gpKTsKKyAgICB9CisKKyNpZm5kZWYgTk9T UEwKKyAgICBpZiAoY3ggPT0gWFhFTFMpCQkJLyogRUxTRSAqLworICAgICAgcmV0dXJuKGRvZWxz ZSgpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PU0VSVkVSCisjaWZuZGVmIE5P RlJJTExTCisgICAgaWYgKGN4ID09IFhYRU5BIHx8IGN4ID09IFhYRElTKSB7CS8qIEVOQUJMRSwg RElTQUJMRSAqLworCXMgPSAoY3ggPT0gWFhFTkEpID8KKwkgICJTZXJ2ZXIgZnVuY3Rpb24gdG8g ZW5hYmxlIiA6CisJICAgICJTZXJ2ZXIgZnVuY3Rpb24gdG8gZGlzYWJsZSI7CisKKwlpZiAoKHgg PSBjbWtleShlbmF0YWIsbmVuYSxzLCIiLHh4c3RyaW5nKSkgPCAwKSB7CisJICAgIGlmICh4ID09 IC0zKSB7CisJCXByaW50ZigiP05hbWUgb2Ygc2VydmVyIGZ1bmN0aW9uIHJlcXVpcmVkXG4iKTsK KwkJcmV0dXJuKC05KTsKKwkgICAgfSBlbHNlIHJldHVybih4KTsKKwl9CisJaWYgKCh5ID0gY21r ZXkoa21zdGFiLDMsIm1vZGUiLCJib3RoIix4eHN0cmluZykpIDwgMCkgeworCSAgICBpZiAoeSA9 PSAtMykgeworCQlwcmludGYoIj9QbGVhc2Ugc3BlY2lmeSByZW1vdGUsIGxvY2FsLCBvciBib3Ro XG4iKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfSBlbHNlIHJldHVybih5KTsKKwl9CisJaWYgKGN4 ID09IFhYRElTKQkJLyogRGlzYWJsaW5nLCBub3QgZW5hYmxpbmcgKi8KKwkgIHkgPSAzIC0geTsK KwlpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKKyNpZmRlZiBDS19BUEMKKwlpZiAo KGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwpIHx8CisJICAgICgoYXBjYWN0aXZlID09IEFQQ19SRU1P VEUpICYmICghKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpKQorCSAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNpZmRlZiBJS1NECisgICAgICAgIC8qIFRoaXMgbWF5 IHNlZW0gbGlrZSBpdCBkdXBsaWNhdGVzIHRoZSB3b3JrIGluIGRvZW5hYmxlKCkgICovCisgICAg ICAgIC8qIGJ1dCB0aGlzIGNvZGUgcmV0dXJucyBmYWlsdXJlIHdoZXJlYXMgZG9lbmFibGUoKSBy ZXR1cm5zICovCisgICAgICAgIC8qIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmIChpbnNlcnZlciAmJgorI2lmZGVm IElLU0RDT05GCisgICAgICAgICAgICBpa3NkY2YgJiYKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLwor ICAgICAgICAgICAgKHggPT0gRU5fSE9TIHx8IHggPT0gRU5fUFJJIHx8IHggPT0gRU5fTUFJIHx8 IHggPT0gRU5fV0hPIHx8CisgICAgICAgICAgICAgIGlzZ3Vlc3QpKQorICAgICAgICAgICAgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBJS1NEICovCisJcmV0dXJuKGRvZW5hYmxlKHks eCkpOworICAgIH0KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworI2VuZGlmIC8qIE5PU0VSVkVSICov CisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoY3ggPT0gWFhSRVQpIHsJCQkvKiBSRVRVUk4gKi8K KwlpZiAoKHggPSBjbXR4dCgiT3B0aW9uYWwgcmV0dXJuIHZhbHVlIiwiIiwmcyxOVUxMKSkgPCAw KQorCSAgcmV0dXJuKHgpOworCXMgPSBicnN0cmlwKHMpOwkJCS8qIFN0cmlwIGJyYWNlcyAqLwor CWlmIChjbWRsdmwgPT0gMCkJCS8qIEF0IHRvcCBsZXZlbCwgbm90aGluZyBoYXBwZW5zLi4uICov CisJICByZXR1cm4oc3VjY2VzcyA9IDEpOworCXN3aXRjaCAoY21kc3RrW2NtZGx2bF0uc3JjKSB7 CS8qIEFjdGlvbiBkZXBlbmRzIG9uIGNvbW1hbmQgc291cmNlICovCisJICBjYXNlIENNRF9URjoJ CQkvKiBDb21tYW5kIGZpbGUgKi8KKwkgICAgcG9wY2x2bCgpOwkJCS8qIFBvcCBjb21tYW5kIGxl dmVsICovCisJICAgIHJldHVybihzdWNjZXNzID0gMSk7CS8qIGFsd2F5cyBzdWNjZWVkcyAqLwor CSAgY2FzZSBDTURfTUQ6CQkJLyogTWFjcm8gKi8KKwkgIGNhc2UgQ01EX0tCOgkJCS8qIFByb21w dCAqLworCSAgICByZXR1cm4oZG9yZXR1cm4ocykpOwkvKiBUcmFpbGluZyB0ZXh0IGlzIHJldHVy biB2YWx1ZS4gKi8KKwkgIGRlZmF1bHQ6CQkJLyogU2hvdWxkbid0IGhhcHBlbiAqLworCSAgICBy ZXR1cm4oLTIpOworCX0KKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1NQ TAorICAgIGlmIChjeCA9PSBYWE9QRSkJCQkvKiBPUEVOICovCisgICAgICByZXR1cm4oZG9vcGVu KCkpOworI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoY3ggPT0g WFhPVVQgfHwgY3ggPT0gWFhMTk9VVCkgewkvKiBPVVRQVVQgb3IgTElORU9VVCAqLworCWlmICgo eCA9IGNtdHh0KCJUZXh0IHRvIGJlIG91dHB1dCIsIiIsJnMsTlVMTCkpIDwgMCkKKwkgIHJldHVy bih4KTsKKyNpZmRlZiBDS19BUEMKKwlpZiAoKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwpIHx8CisJ ICAgICgoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUpICYmICghKGFwY3N0YXR1cyAmIEFQQ19VTkNI KSkpKQorCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKwlkZWJ1 ZyhGMTEwLCJPVVRQVVQgMSIscywwKTsKKwlzID0gYnJzdHJpcChzKTsJCQkvKiBTdHJpcCBlbmNs b3NpbmcgYnJhY2VzLCAqLworCWRlYnVnKEYxMTAsIk9VVFBVVCAyIixzLDApOworLyoKKyAgSSBk b24ndCB0aGluayBJIGNvdWxkIGV2ZXIgZnVsbHkgZXhwbGFpbiB0aGlzIGluIGEgbWlsbGlvbiB5 ZWFycy4uLgorICBXZSBoYXZlIHJlYWQgdGhlIHVzZXIncyBzdHJpbmcgd2l0aG91dCBjYWxsaW5n IHRoZSB2YXJpYWJsZS1leHBhbmRlcgorICBmdW5jdGlvbi4gIE5vdywgYmVmb3JlIHdlIGNhbGwg aXQsIHdlIGhhdmUgdG8gZG91YmxlIGJhY2tzbGFzaGVzIHRoYXQKKyAgYXBwZWFyIGJlZm9yZSBc TiwgXEIsIFxMLCBhbmQgXCBpdHNlbGYsIHNvIHRoZSBleHBhbmRlciBmdW5jdGlvbiB3aWxsCisg IHJlZHVjZSB0aGVtIGJhY2sgdG8gc2luZ2xlIGJhY2tzbGFzaGVzLCBzbyB3aGVuIHdlIGNhbGwg ZG9vdXRwdXQoKS4uLgorICBCdXQgaXQncyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gdGhhdC4KKyov CisJaWYgKGNtZGdxdW8oKSkgewkJLyogT25seSBpZiBDT01NQU5EIFFVT1RJTkcgT04gLi4uICov CisJICAgIGZvciAoeCA9IDAsIHkgPSAwOyBzW3hdOyB4KyssIHkrKykgeworCQlpZiAoc1t4XSA9 PSBDTURRKSB7CisJCSAgICBjaGFyIGMgPSBzW3grMV07CisJCSAgICBpZiAoYyA9PSAnbicgfHwg YyA9PSAnTicgfHwKKwkJCWMgPT0gJ2InIHx8IGMgPT0gJ0InIHx8CisJCQljID09ICdsJyB8fCBj ID09ICdMJyB8fAorCQkJYyA9PSBDTURRKQorCQkgICAgICBsaW5lW3krK10gPSBDTURROworCQl9 CisJCWxpbmVbeV0gPSBzW3hdOworCSAgICB9CisJICAgIGxpbmVbeSsrXSA9ICdcMCc7CQkvKiBO b3cgZXhwYW5kIHZhcmlhYmxlcywgZXRjLiAqLworCSAgICBkZWJ1ZyhGMTEwLCJPVVRQVVQgMyIs bGluZSwwKTsKKwkgICAgcyA9IGxpbmUreSsxOworCSAgICB4ID0gTElOQlVGU0laIC0gKGludCkg c3RybGVuKGxpbmUpIC0gMTsKKwkgICAgZGVidWcoRjEwMSwiT1VUUFVUIHNpemUiLCIiLHgpOwor CSAgICBpZiAoenpzdHJpbmcobGluZSwmcywmeCkgPCAwKQorCSAgICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisJICAgIHMgPSBsaW5lK3krMTsKKwkgICAgZGVidWcoRjExMCwiT1VUUFVUIDQiLHMs MCk7CisJfQorCXN1Y2Nlc3MgPSBkb291dHB1dChzLGN4KTsKKwlyZXR1cm4oc3VjY2Vzcyk7Cisg ICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisKKyNpZmRlZiBBTllYMjUKKyNpZm5kZWYgSUJNWDI1 CisgICAgaWYgKGN4ID09IFhYUEFEKSB7CQkJLyogUEFEIGNvbW1hbmRzICovCisJeCA9IGNta2V5 KHBhZHRhYixucGFkYywiUEFEIGNvbW1hbmQiLCIiLHh4c3RyaW5nKTsKKwlpZiAoeCA9PSAtMykg eworCSAgICBwcmludGYoIj9Zb3UgbXVzdCBzcGVjaWZ5IGEgUEFEIGNvbW1hbmQgdG8gZXhlY3V0 ZVxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCWlmICh4IDwgMCkgcmV0dXJuKHgpOworCisJ c3dpdGNoICh4KSB7CisJICBjYXNlIFhZUEFETDoKKwkgICAgaWYgKHgyNXN0YXQoKSA8IDApCisJ ICAgICAgcHJpbnRmKCJTb3JyeSwgeW91IG11c3QgJ3NldCBuZXR3b3JrJyAmICdzZXQgaG9zdCcg Zmlyc3RcclxuIik7CisJICAgIGVsc2UgeworCQl4MjVjbGVhcigpOworCQlpbml0cGFkKCk7CisJ ICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIFhZUEFEUzoKKwkgICAgaWYgKHgyNXN0YXQoKSA8 IDApCisJICAgICAgcHJpbnRmKCJOb3QgY29ubmVjdGVkXHJcbiIpOworCSAgICBlbHNlIHsKKwkJ ZXh0ZXJuIGludCBsaW5raWQsIGxjbjsKKwkJY29ub2woIkNvbm5lY3RlZCB0aHJ1ICIpOworCQlj b25vbCh0dG5hbWUpOworCQlwcmludGYoIiwgTGluayBpZCAlZCwgTG9naWNhbCBjaGFubmVsIG51 bWJlciAlZFxyXG4iLAorCQkgICAgICAgbGlua2lkLGxjbik7CisJICAgIH0KKwkgICAgYnJlYWs7 CisJICBjYXNlIFhZUEFEUjoKKwkgICAgaWYgKHgyNXN0YXQoKSA8IDApCisJICAgICAgcHJpbnRm KCJTb3JyeSwgeW91IG11c3QgJ3NldCBuZXR3b3JrJyAmICdzZXQgaG9zdCcgZmlyc3RcclxuIik7 CisJICAgIGVsc2UKKwkgICAgICB4MjVyZXNldCgwLDApOworCSAgICBicmVhazsKKwkgIGNhc2Ug WFlQQURJOgorCSAgICBpZiAoeDI1c3RhdCgpIDwgMCkKKwkgICAgICBwcmludGYoIlNvcnJ5LCB5 b3UgbXVzdCAnc2V0IG5ldHdvcmsnICYgJ3NldCBob3N0JyBmaXJzdFxyXG4iKTsKKwkgICAgZWxz ZQorCSAgICAgIHgyNWludHIoMCk7CisJfQorCXJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyog SUJNWDI1ICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAo Y3ggPT0gWFhQQVUgfHwgY3ggPT0gWFhXQUkgfHwgY3ggPT0gWFhNU0wpIC8qIFBBVVNFLCBXQUlU LCBldGMgKi8KKyAgICAgIHJldHVybihkb3BhdXMoY3gpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLwor CisjaWZuZGVmIE5PRlJJTExTCisgICAgaWYgKGN4ID09IFhYUFJJKSB7CisjaWZkZWYgSUtTRAor I2lmZGVmIENLX0xPR0lOCisJaWYgKGluc2VydmVyICYmIChpc2d1ZXN0IHx8ICFFTkFCTEVEKGVu X3ByaSkpKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBwcmludGluZyBpcyBkaXNhYmxlZFxuIik7 CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIENLX0xPR0lOICovCisjZW5kaWYgLyog SUtTRCAqLworCWlmICgoeCA9IGNtaWZpKCJGaWxlIHRvIHByaW50IiwiIiwmcywmeSx4eHN0cmlu ZykpIDwgMCkgeworCSAgICBpZiAoeCA9PSAtMykgeworCQlwcmludGYoIj9BIGZpbGUgc3BlY2lm aWNhdGlvbiBpcyByZXF1aXJlZFxuIik7CisJCXJldHVybigtOSk7CisJICAgIH0gZWxzZSByZXR1 cm4oeCk7CisJfQorCWlmICh5ICE9IDApIHsKKwkgICAgcHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBh bGxvd2VkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJY2tzdHJuY3B5KGxpbmUscyxMSU5C VUZTSVopOworCXMgPSAiIjsKKyNpZm5kZWYgTlQKKwlpZiAoKHggPSBjbXR4dCgiTG9jYWwgcHJp bnQgY29tbWFuZCBvcHRpb25zLCBvciBjYXJyaWFnZSByZXR1cm4iLCIiLCZzLAorCQkgICAgICAg eHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeCk7CisjZW5kaWYgLyogTlQgKi8KKwlpZiAoKHgg PSBjbWNmbSgpKSA8IDApCisJICByZXR1cm4oeCk7CisJcmV0dXJuKHN1Y2Nlc3MgPSAoenByaW50 KHMsbGluZSkgPT0gMCkgPyAxIDogMCk7CisgICAgfQorI2VuZGlmIC8qIE5PRlJJTExTICovCisK KyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9QVVNICisgICAgaWYgKGN4ID09IFhYUE5HKSAJ CQkvKiBQSU5HIGFuIElQIGhvc3QgKi8KKyAgICAgIHJldHVybihkb3BpbmcoKSk7CisjZW5kaWYg LyogTk9QVVNIICovCisKKyNpZm5kZWYgTk9GVFAKKyAgICBpZiAoY3ggPT0gWFhGVFApCQkJLyog RlRQICovCisjaWZkZWYgU1lTRlRQCisjaWZuZGVmIE5PUFVTSAorICAgICAgcmV0dXJuKGRvZnRw KCkpOwkJCS8qIEp1c3QgcnVucyBzeXN0ZW0ncyBmdHAgcHJvZ3JhbSAqLworI2Vsc2UKKyAgICAg IHJldHVybigtMik7CisjZW5kaWYgLyogTk9QVVNIICovCisjZWxzZQorICAgIHJldHVybihkb3hm dHAoKSk7CisjZW5kaWYgLyogU1lTRlRQICovCisjZW5kaWYgLyogTk9GVFAgKi8KKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKworICAgIGlmIChjeCA9PSBYWFBXRCB8fCBjeCA9PSBYWExQV0QpIHsJ LyogUFdEICovCisjaWZkZWYgT1MyCisJY2hhciAqcHdwOworI2VuZGlmIC8qIE9TMiAqLworCWlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkKKwkgIHJldHVybih4KTsKKyNpZmRlZiBMT0NVUworCWlmICgh bG9jdXMgJiYgY3ggIT0gWFhMUFdEKSB7CisjaWZkZWYgTk9YRkVSCisJICAgIHJldHVybigtMik7 CisjZWxzZQorCSAgICByZXR1cm4oZG9ybXQoWFpQV0QpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8K KyAgICAgICAgfQorI2VuZGlmIC8qIExPQ1VTICovCisKKyNpZm5kZWYgTUFDCisjaWZuZGVmIE9T MgorI2lmZGVmIFVOSVgKKwlwcmludGYoIiVzXG4iLHpndGRpcigpKTsKKyNlbHNlCisJeHN5c3Rl bShQV0RDTUQpOworI2VuZGlmIC8qIFVOSVggKi8KKwlyZXR1cm4oc3VjY2VzcyA9IDEpOwkJLyog QmxpbmQgZmFpdGggKi8KKyNlbHNlICAvKiBPUzIgKi8KKwlpZiAocHdwID0gemd0ZGlyKCkpIHsK KwkgICAgaWYgKCpwd3ApIHsKKyNpZmRlZiBOVAorCQlsaW5lWzBdID0gTlVMOworCQlja0dldExv bmdQYXRoTmFtZShwd3AsbGluZSxMSU5CVUZTSVopOworCQlsaW5lW0xJTkJVRlNJWi0xXSA9IE5V TDsKKwkJdG1wYnVmWzBdID0gTlVMOworCQlHZXRTaG9ydFBhdGhOYW1lKHB3cCx0bXBidWYsVE1Q QlVGU0laKTsKKwkJdG1wYnVmW1RNUEJVRlNJWi0xXSA9IE5VTDsKKwkJcHdwID0gbGluZTsKKwkJ aWYgKCFzdHJjbXAobGluZSx0bXBidWYpKSB7CisjZW5kaWYgLyogTlQgKi8KKwkJICAgIHByaW50 ZigiJXNcbiIscHdwKTsKKyNpZmRlZiBOVAorCQl9IGVsc2UgeworCQkgICAgcHJpbnRmKCIgIExv bmcgbmFtZTogICVzXG4iLGxpbmUpOworCQkgICAgcHJpbnRmKCIgIFNob3J0IG5hbWU6ICVzXG4i LHRtcGJ1Zik7CisJCX0gICAgICAgICAgICAKKyNlbmRpZiAvKiBOVCAqLworCSAgICB9CisJICAg IHJldHVybihzdWNjZXNzID0gKChpbnQpc3RybGVuKHB3cCkgPiAwKSk7CisJfSBlbHNlIHJldHVy bihzdWNjZXNzID0gMCk7CisjZW5kaWYgLyogT1MyICovCisjZWxzZSAgLyogTUFDICovCisJaWYg KHB3cCA9IHpndGRpcigpKSB7CisJICAgIHByaW50ZigiJXNcbiIscHdwKTsKKwkgICAgcmV0dXJu KHN1Y2Nlc3MgPSAoKGludClzdHJsZW4ocHdwKSA+IDApKTsKKwl9IGVsc2UgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICB9CisKKyAgICBpZiAoY3ggPT0gWFhRVUkg fHwgY3ggPT0gWFhFWEkpIHsJLyogRVhJVCwgUVVJVCAqLworCWV4dGVybiBpbnQgcXVpdHRpbmc7 CisKKwlpZiAoKHkgPSBjbW51bSgiZXhpdCBzdGF0dXMgY29kZSIsY2tpdG9hKHhpdHN0YSksMTAs JngseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeSk7CisJaWYgKCh5ID0gY210eHQoIk9wdGlv bmFsIEVYSVQgbWVzc2FnZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeSk7CisJ cyA9IGJyc3RyaXAocyk7CisJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworCisJaWYgKCFo dXBvaygwKSkJCQkvKiBDaGVjayBpZiBjb25uZWN0aW9uIHN0aWxsIG9wZW4gKi8KKwkgIHJldHVy bihzdWNjZXNzID0gMCk7CisKKwlpZiAobGluZVswXSkJCQkvKiBQcmludCBFWElUIG1lc3NhZ2Ug aWYgZ2l2ZW4gKi8KKwkgIHByaW50ZigiJXNcbiIsKGNoYXIgKilsaW5lKTsKKworCXF1aXR0aW5n ID0gMTsJCQkvKiBGbGFnIHRoYXQgd2UgYXJlIHF1aXR0aW5nLiAqLworCisjaWZkZWYgVk1TCisJ ZG9leGl0KEdPT0RfRVhJVCx4KTsKKyNlbHNlCisjaWZkZWYgT1NLCisvKiBSZXR1cm5pbmcgYW55 IGNvZGVzIGhlcmUgbWFrZXMgdGhlIE9TLTkgc2hlbGwgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZS4g Ki8KKwlkb2V4aXQoR09PRF9FWElULC0xKTsKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAg ICAgICAgZG9leGl0KEdPT0RfRVhJVCx4KTsKKyNlbHNlCisJZG9leGl0KHgsLTEpOworI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogVk1TICovCisg ICAgfQorCisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT0ZSSUxMUworICAgIGlmIChjeCA9PSBY WEVSUikgewkJCS8qIEVSUk9SICovCisjaWZkZWYgQ0tfWFlaCisJaWYgKHByb3RvY29sICE9IFBS T1RPX0spIHsKKwkgICAgcHJpbnRmKCJTb3JyeSwgRS1QQUNLRVQgb25seSB3b3JrcyB3aXRoIEtl cm1pdCBwcm90b2NvbFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIENLX1hZ WiAqLworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCXR0Zmx1aSgpOworCWVw a3RmbGcgPSAxOworCXNzdGF0ZSA9ICdhJzsKKwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8q IE5PRlJJTExTICovCisKKyAgICBpZiAoY3ggPT0gWFhGSU4pIHsJCQkvKiBGSU5JU0ggKi8KKyNp ZmRlZiBORVdGVFAKKwlpZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBp c29wZW4oKSkpCisJICByZXR1cm4oZnRwYnllKCkpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworI2lm ZGVmIENLX1hZWgorCWlmIChwcm90b2NvbCAhPSBQUk9UT19LKSB7CisJICAgIHByaW50ZigiU29y cnksIEZJTklTSCBvbmx5IHdvcmtzIHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsKKwkgICAgcmV0 dXJuKC05KTsKKwl9CisjZW5kaWYgLyogQ0tfWFlaICovCisJaWYgKCh4ID0gY21jZm0oKSkgPCAw KSByZXR1cm4oeCk7CisKKyNpZmRlZiBJS1NfT1BUSU9OCisgICAgICAgIGlmICgKKyNpZmRlZiBD S19YWVoKKyAgICAgICAgICAgIHByb3RvY29sID09IFBST1RPX0sgJiYKKyNlbmRpZiAvKiBDS19Y WVogKi8KKyAgICAgICAgICAgICFpa3Nfd2FpdChLRVJNSVRfUkVRX1NUQVJULDEpKSB7CisJICAg IHByaW50ZigKKyAgICAgICAgICAgICAgIj9BIEtlcm1pdCBTZXJ2ZXIgaXMgbm90IGF2YWlsYWJs ZSB0byBwcm9jZXNzIHRoaXMgY29tbWFuZFxuIik7CisJICAgIHJldHVybigtOSk7CQkJLyogQ29y cmVjdCB0aGUgcmV0dXJuIGNvZGUgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIElLU19PUFRJT04g Ki8KKworCXNzdGF0ZSA9IHNldGdlbignRicsIiIsIiIsIiIpOworCWlmIChsb2NhbCkgdHRmbHVp KCk7CQkvKiBJZiBsb2NhbCwgZmx1c2ggdHR5IGlucHV0IGJ1ZmZlciAqLworCXJldHVybigwKTsK KyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoY3gg PT0gWFhGT1IpCQkJLyogRk9SIGxvb3AgKi8KKyAgICAgIHJldHVybihkb2ZvcigpKTsKKyNlbmRp ZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIC8qIEdFVCBNR0VUIFJFR0VUIFJF VFJJRVZFIGV0YyAqLworICAgIGlmIChjeCA9PSBYWEdFVCB8fCBjeCA9PSBYWE1HRVQgfHwgY3gg PT0gWFhSRUdFVCB8fCBjeCA9PSBYWFJFVFIpIHsKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVy ICYmICFFTkFCTEVEKGVuX3NlbikpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIHJlY2VwdGlvbiBv ZiBmaWxlcyBpcyBkaXNhYmxlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8q IElLU0QgKi8KKwlyZXR1cm4oZG94Z2V0KGN4KSk7CisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAq LworCisjaWZuZGVmIE5PU1BMCisjaWZuZGVmIE5PRlJJTExTCisgICAgaWYgKGN4ID09IFhYR09L KSB7CQkJLyogR0VUT0sgKi8KKwlyZXR1cm4oc3VjY2VzcyA9IGRvYXNrKGN4KSk7CisgICAgfQor I2VuZGlmIC8qIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIGlmIChjeCA9 PSBYWEhMUCkgewkJCS8qIEhFTFAgKi8KKyNpZmRlZiBOT0hFTFAKKwlyZXR1cm4oZG9obHAoWFhI TFApKTsKKyNlbHNlCisJeCA9IGNta2V5MihjbWR0YWIsCisJCSAgIG5jbWQsIlxuQ29tbWFuZCBv ciB0b3BpYyIsImhlbHAiLHRva3RhYix4eHN0cmluZywxKzIrOCk7CisJZGVidWcoRjExMSwiSEVM UCBjb21tYW5kIHgiLGNtZGJ1Zix4KTsKKwlpZiAoeCA9PSAtNSkgeworCSAgICB5ID0gY2hrdG9r KHRva3RhYik7CisJICAgIGRlYnVnKEYxMDEsIkhFTFAgY21rZXkgdG9rZW4iLCIiLHkpOworCSAg ICAvKiB1bmd3b3JkKCk7ICovCisJICAgIHN3aXRjaCAoeSkgeworI2lmbmRlZiBOT1BVU0gKKwkg ICAgICBjYXNlICchJzoKKwkgICAgICBjYXNlICdAJzogeCA9IFhYU0hFOyBicmVhazsKKwkgICAg ICBjYXNlICc8JzogeCA9IFhYRlVOOyBicmVhazsKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKwkgICAg ICBjYXNlICcjJzogeCA9IFhYQ09NOyBicmVhazsKKwkgICAgICBjYXNlICc7JzogeCA9IFhYQ09N OyBicmVhazsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAgICAgY2FzZSAnLic6IHggPSBYWERF RjsgYnJlYWs7CisJICAgICAgY2FzZSAnOic6IHggPSBYWExCTDsgYnJlYWs7CisjaWZuZGVmIE5P U0VYUAorCSAgICAgIGNhc2UgJygnOiB4ID0gWFhTRVhQOyBicmVhazsKKyNlbmRpZiAvKiBOT1NF WFAgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIENLX1JFQ0FMTAorCSAgICAgIGNhc2Ug J14nOiB4ID0gWFhSRURPOyBicmVhazsKKyNlbmRpZgkvKiBDS19SRUNBTEwgKi8KKwkgICAgICBj YXNlICcmJzogeCA9IFhYRUNIOyBicmVhazsgLyogKHdoYXQgaXMgdGhpcz8pICovCisJICAgICAg ZGVmYXVsdDoKKwkJcHJpbnRmKCJcbj9JbnZhbGlkIC0gJXNcbiIsY21kYnVmKTsKKwkJeCA9IC0y OworCSAgICB9CisJfQorCW1ha2VzdHIoJmhscHRvayxhdG1idWYpOworCWRlYnVnKEYxMTEsIkhF TFAgdG9rZW4iLGhscHRvayx4KTsKKwlyZXR1cm4oZG9obHAoeCkpOworI2VuZGlmIC8qIE5PSEVM UCAqLworICAgIH0KKworI2lmbmRlZiBOT0hFTFAKKyAgICBpZiAoY3ggPT0gWFhJTlQpCQkJLyog SU5UUk8gKi8KKyAgICAgIHJldHVybihobXNnYShpbnRyb3R4dCkpOworICAgIGlmIChjeCA9PSBY WE5FVykgewkJCS8qIE5FV1MgKi8KKwlpbnQgeDsKKwlleHRlcm4gY2hhciAqIGtfaW5mb19kaXI7 CisJeCA9IGhtc2dhKG5ld3N0eHQpOworCXJldHVybih4KTsKKyAgICB9CisKKyNpZmRlZiBPUzJP TkxZCisgICAgaWYgKGN4ID09IFhYVVBEKSB7CQkJLyogVmlldyBVUERBVEUgZmlsZSAqLworICAg ICAgICBleHRlcm4gY2hhciBleGVkaXJbXTsKKyAgICAgICAgY2hhciAqIHBUb3BpYzsKKyAgICAg ICAgY2hhciB1cGRzdHJbMjA0OF07CisgICAgICAgIGlmICgoeCA9IGNtdHh0KCJ0b3BpYyBuYW1l IiwiIiwmcFRvcGljLHh4c3RyaW5nKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHg7CisjaWZk ZWYgQ09NTUVOVAorCXNwcmludGYodXBkc3RyLAorCQkic3RhcnQgdmlldyAlc1xcZG9jc1xcazIu aW5mKyVzXFxkb2NzXFx1c2luZ19jay5pbmYrXAorJXNcXGRvY3NcXGRpYWxpbmcuaW5mKyVzXFxk b2NzXFxtb2RlbXMuaW5mICVzIiwKKwkJZXhlZGlyLGV4ZWRpcixleGVkaXIsZXhlZGlyLHBUb3Bp YworCQkpOworI2Vsc2UKKwlpZiAoY2ttYWt4bXNnKHVwZHN0ciwKKwkJICAgICAyMDQ4LAorCQkg ICAgICJzdGFydCB2aWV3ICIsCisJCSAgICAgZXhlZGlyLAorCQkgICAgICJcXGRvY3NcXGsyLmlu ZisiLAorCQkgICAgIGV4ZWRpciwKKwkJICAgICAiXFxkb2NzXFx1c2luZ19jay5pbmYrIiwKKwkJ ICAgICBleGVkaXIsCisJCSAgICAgIlxcZG9jc1xcZGlhbGluZy5pbmYrIiwKKwkJICAgICBleGVk aXIsCisJCSAgICAgIlxcZG9jc1xcbW9kZW1zLmluZiAiLAorCQkgICAgIHBUb3BpYywKKwkJICAg ICBOVUxMLAorCQkgICAgIE5VTEwKKwkJICAgICApID4gMCkKKyNlbmRpZiAvKiBDT01NRU5UICov CisJICBzeXN0ZW0odXBkc3RyKTsKKyAgICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9 CisjZW5kaWYgLyogT1MyT05MWSAqLworI2VuZGlmIC8qIE5PSEVMUCAqLworCisjaWZuZGVmIE5P TE9DQUwKKyAgICBpZiAoY3ggPT0gWFhIQU4pIHsJCQkvKiBIQU5HVVAgKi8KKwlpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKKyNpZmRlZiBORVdGVFAKKwlpZiAoKGZ0cGdldCA9PSAx KSB8fCAoKGZ0cGdldCA9PSAyKSAmJiAhbG9jYWwgJiYgZnRwaXNvcGVuKCkpKQorCSAgcmV0dXJu KHN1Y2Nlc3MgPSBmdHBieWUoKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisjaWZuZGVmIE5PRElB TAorCWlmICgoeCA9IG1kbWh1cCgpKSA8IDEpIHsKKwkgICAgZGVidWcoRjEwMSwiSEFOR1VQIG1k bXVwIiwiIix4KTsKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKwkgICAgeCA9IHR0aGFuZygpOworCSAg ICBkZWJ1ZyhGMTAxLCJIQU5HVVAgdHRoYW5nIiwiIix4KTsKKwkgICAgeCA9ICh4ID4gLTEpOwor I2lmbmRlZiBOT0RJQUwKKwl9CisJZGlhbHN0YSA9IERJQV9VTks7CisjZW5kaWYgLyogTk9ESUFM ICovCisJd2h5Y2xvc2VkID0gV0NfQ0xPUzsKKwl0dGNoaygpOwkJCS8qIEluIGNhc2Ugb2YgQ0xP U0UtT04tRElTQ09OTkVDVCAqLworCWRvbG9nZW5kKCk7CisjaWZkZWYgT1MyCisJaWYgKHgpCisJ ICBEaWFsZXJTZW5kKE9QVF9LRVJNSVRfSEFOR1VQLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwlp ZiAoeCkgaGF2ZWxpbmUgPSAwOworCXJldHVybihzdWNjZXNzID0geCk7CisgICAgfQorI2VuZGlm IC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1NQTAorICAgIC8qIElOUFVULCBSRUlOUFVULCBh bmQgTUlOUFVUICovCisKKyAgICBpZiAoY3ggPT0gWFhJTlAgfHwgY3ggPT0gWFhSRUkgfHwgY3gg PT0gWFhNSU5QKSB7CisJbG9uZyB6ejsKKwlpbnQgZmxhZ3MgPSAwLCBpbmNvdW50ID0gMDsKKwll eHRlcm4gaW50IGl0c2FwYXR0ZXJuLCBpc2pvaW4sIGlzaW5idWZsZW47CisJaW50IGMsIGdldHZh bDsKKworCXN0cnVjdCBGREIgc3csIG51LCBmbDsKKwlpbnQgZmMsIGhhdmV0aW1lID0gMDsKKwlj aGFyICogbTsKKworCWlmIChjeCA9PSBYWFJFSSkgeworCSAgICBtID0gIlRpbWVvdXQgaW4gc2Vj b25kcyAoaWdub3JlZCkiOworCX0gZWxzZSB7CisJICAgIG0gPSAiU2Vjb25kcyB0byB3YWl0IGZv ciBpbnB1dCxcbiBvciB0aW1lIG9mIGRheSBoaDptbTpzcyxcCisgb3Igc3dpdGNoIjsKKwl9CisJ Y21mZGJpKCZzdywJCQkvKiBGaXJzdCBGREIgLSBjb21tYW5kIHN3aXRjaGVzICovCisJICAgICAg IF9DTUtFWSwJCQkvKiBmY29kZSAqLworCSAgICAgICBtLAkJCS8qIGhlbHBtc2cgKi8KKwkgICAg ICAgY2tpdG9hKGluZGVmKSwJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJLyogYWRkdGwg c3RyaW5nIGRhdGEgKi8KKwkgICAgICAgbmlucHV0c3csCQkvKiBhZGR0bCBudW1lcmljIGRhdGEg MTogdGJsIHNpemUgKi8KKwkgICAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9 IGNtc3dpICovCisJICAgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLwor CSAgICAgICBpbnB1dHN3LAkJCS8qIEtleXdvcmQgdGFibGUgKi8KKwkgICAgICAgJm51CQkJLyog UG9pbnRlciB0byBuZXh0IEZEQiAqLworCSAgICAgICApOworCWNtZmRiaSgmbnUsCisJICAgICAg IF9DTU5VTSwJCQkvKiBOdW1iZXIgKi8KKwkgICAgICAgbSwJCQkvKiBIZWxwIG1lc3NhZ2UgKi8K KwkgICAgICAgY2tpdG9hKGluZGVmKSwJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJLyog Ti9BICovCisJICAgICAgIDEwLAkJCS8qIFJhZGl4ID0gMTAgKi8KKwkgICAgICAgMCwJCQkvKiBO L0EgKi8KKwkgICAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9uICovCisJICAg ICAgIE5VTEwsCQkJLyogTi9BICovCisJICAgICAgICZmbAkJCS8qIE5leHQgKi8KKwkgICAgICAg KTsKKwljbWZkYmkoJmZsLAkJCS8qIFRpbWUgb2YgZGF5IGhoOm1tOnNzICovCisJICAgICAgIF9D TUZMRCwJCQkvKiBmY29kZSAqLworCSAgICAgICAiIiwJCQkvKiBobHBtc2cgKi8KKwkgICAgICAg IiIsCisJICAgICAgICIiLAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJICAgICAgIDAsCQkJ LyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmlj IGRhdGEgMiAqLworCSAgICAgICB4eHN0cmluZywKKwkgICAgICAgTlVMTCwKKwkgICAgICAgTlVM TAorCSAgICAgICApOworCWZjID0gKGN4ID09IFhYUkVJKSA/IGNtZmRiKCZudSkgOiBjbWZkYigm c3cpOyAvKiBQYXJzZSBzb21ldGhpbmcgKi8KKworCWZvciAoeSA9IDA7IHkgPCBNSU5QTUFYOyB5 KyspIHsJLyogSW5pdGlhbGl6ZSBzZWFyY2ggc3RyaW5ncyAqLworCSAgICBtcFt5XSA9IDA7CQkJ LyogQXNzdW1lIGl0J3Mgbm90IGEgcGF0dGVybiAqLworCSAgICBpZiAoIW1waW5pdGVkKSB7CisJ CW1zW3ldID0gTlVMTDsKKwkgICAgfQorCSAgICBpZiAobXNbeV0pIHsKKwkJZnJlZShtc1t5XSk7 CQkvKiBGcmVlIG9sZCBzdHJpbmdzLCBpZiBhbnkgKi8KKwkJbXNbeV0gPSBOVUxMOworCSAgICB9 CisJfQorCW1waW5pdGVkID0gMTsKKwl3aGlsZSAoIWhhdmV0aW1lKSB7CisJICAgIGlmIChmYyA8 IDApIHsJCS8qIEVycm9yICovCisJCWlmIChmYyA9PSAtMykgeworCQkgICAgcHJpbnRmKCI/U3lu dGF4IGVycm9yIGluIElOUFVULWNsYXNzIGNvbW1hbmRcbiIpOworCQkgICAgcmV0dXJuKC05KTsK KwkJfSBlbHNlCisJCSAgcmV0dXJuKGZjKTsKKwkgICAgfQorCSAgICBzd2l0Y2ggKGNtcmVzdWx0 LmZjb2RlKSB7CisJICAgICAgY2FzZSBfQ01LRVk6CQkvKiBTd2l0Y2ggKi8KKwkJYyA9IGNtZ2Jy aygpOworCQlpZiAoKGdldHZhbCA9IChjID09ICc6JyB8fCBjID09ICc9JykpICYmCisJCSAgICAh KGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworCQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9l cyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJCWlm IChnZXR2YWwgJiYgY21yZXN1bHQubnJlc3VsdCA9PSBJTlBTV19DT1UpIHsKKwkJICAgIGlmICgo eSA9IGNtbnVtKCJOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCIsCisJCQkJICAgIiIsMTAsJngseHhz dHJpbmcpKSA8IDApCisJCSAgICAgIHJldHVybih5KTsKKwkJICAgIGluY291bnQgPSB4OworCQl9 CisJCWZsYWdzIHw9IGNtcmVzdWx0Lm5yZXN1bHQ7CisJCWZjID0gY21mZGIoJnN3KTsJLyogTWF5 YmUgcGFyc2UgbW9yZSBzd2l0Y2hlcyAqLworCQljb250aW51ZTsKKworCSAgICAgIGNhc2UgX0NN TlVNOgkJLyogU2Vjb25kcyB0byB0aW1lIG91dCAqLworCQl4ID0gY21yZXN1bHQubnJlc3VsdDsK KyNpZmRlZiBDS0ZMT0FUCisJCWlmIChpbnNjYWxlICE9IDEuMCkJLyogU2NhbGUgKi8KKwkJICB4 ICo9IGluc2NhbGU7CQkKKyNlbmRpZgkvKiBDS0ZMT0FUICovCisJCWhhdmV0aW1lKys7CisJCWJy ZWFrOworCisJICAgICAgY2FzZSBfQ01GTEQ6CisJCXp6ID0gdG9kMnNlYyhhdG1idWYpOwkvKiBD b252ZXJ0IHRvIHNlY3Mgc2luY2UgbWlkbmlnaHQgKi8KKwkJaWYgKHp6IDwgMEwpIHsKKwkJICAg IHByaW50ZigiP051bWJlciwgZXhwcmVzc2lvbiwgb3IgdGltZSBvZiBkYXkgcmVxdWlyZWRcbiIp OworCQkgICAgcmV0dXJuKC05KTsKKwkJfSBlbHNlIHsKKwkJICAgIGNoYXIgbm93WzMyXTsJLyog Q3VycmVudCB0aW1lICovCisJCSAgICBjaGFyICpwOworCQkgICAgbG9uZyB0bm93OworCQkgICAg cCA9IG5vdzsKKwkJICAgIHp0aW1lKCZwKTsKKwkJICAgIHRub3cgPSBhdG9sKHArMTEpICogMzYw MEwgKyBhdG9sKHArMTQpICogNjBMICsgYXRvbChwKzE3KTsKKwkJICAgIGlmICh6eiA8IHRub3cp CS8qIFVzZXIncyB0aW1lIGJlZm9yZSBub3cgKi8KKwkJICAgICAgenogKz0gODY0MDBMOwkvKiBT byBtYWtlIGl0IHRvbW9ycm93ICovCisJCSAgICB6eiAtPSB0bm93OwkJLyogU2Vjb25kcyBmcm9t IG5vdy4gKi8KKwkJICAgIGlmICh6eiA+IC0xTCkgeworCQkJeCA9IHp6OworCQkJaWYgKHp6ICE9 IChsb25nKSB4KSB7CisJCQkgICAgcHJpbnRmKAorIlNvcnJ5LCBhcml0aG1ldGljIG92ZXJmbG93 IC0gaGg6bW06c3Mgbm90IHVzYWJsZSBvbiB0aGlzIHBsYXRmb3JtLlxuIgorKTsKKwkJCSAgICBy ZXR1cm4oLTkpOworCQkJfQorCQkgICAgfQorCQkgICAgaGF2ZXRpbWUrKzsKKwkJfQorCQlicmVh azsKKwkgICAgICBkZWZhdWx0OgkJCisJCXByaW50ZigiP0ludGVybmFsIGVycm9yXG4iKTsKKwkJ cmV0dXJuKC05KTsKKwkgICAgfQorCX0KKwkvKiBOb3cgcGFyc2UgdGhlIHNlYXJjaCB0ZXh0ICov CisKKyNpZmRlZiBDS19NSU5QVVQKKwlpZiAoY3ggPT0gWFhNSU5QKSB7CQkvKiBNSU5QVVQgKi8K KwkgICAgaW50IGksIGsgPSAwLCBuID0gMDsKKwkgICAgc3RydWN0IHN0cmluZ2FycmF5ICogcTsK KwkgICAga2VlcGFsbGNoYXJzID0gMTsKKwkgICAgd2hpbGUgKGsgPCBNSU5QTUFYKSB7CisJCWlm ICgoeSA9IGNtZmxkKCJTdHJpbmcgb3IgcGF0dGVybiIsIiIsJnMseHhzdHJpbmcpKSA8IDApIHsK KwkJICAgIGlmICh5ID09IC0zKSB7CisJCQlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisJCQkgIHJl dHVybih5KTsKKwkJCWJyZWFrOworCQkgICAgfSBlbHNlIHsKKwkJCXJldHVybih5KTsKKwkJICAg IH0KKwkJfQorCQlkZWJ1ZyhGMTExLCJNSU5QVVQgZmllbGQiLHMsayk7CisJCWlmIChpc2pvaW4p IHsKKwkJICAgIGlmICgocSA9IGNrc3BsaXQoMSwwLHMsIiAiLChjaGFyICopYzFjaGFycywzLDAs MCkpKSB7CisJCQljaGFyICoqIGFwID0gcS0+YV9oZWFkOworCQkJbiA9IHEtPmFfc2l6ZTsKKwkJ CWRlYnVnKEYxMDEsIm1pbnB1dCBja3NwbGl0IHNpemUiLCIiLG4pOworCQkJZm9yIChpID0gMTsg aSA8PSBuICYmIGsgPCBNSU5QTUFYOyBpKyspIHsKKwkJCSAgICBpZiAoIWFwW2ldKSAvKiBBZGQg bm9uLWVtcHR5IGVsZW1lbnRzICovCisJCQkgICAgICBjb250aW51ZTsKKwkJCSAgICBpZiAoISoo YXBbaV0pKQorCQkJICAgICAgY29udGludWU7CisJCQkgICAgbWFrZXN0cigmKG1zW2tdKSxhcFtp XSk7CisJCQkgICAgZGVidWcoRjExMSwiTUlOUFVUIEpPSU4iLG1zW2tdLGspOworCQkJICAgIGsr KzsKKwkJCX0KKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGlmIChzKSBpZiAoKnMpIHsKKwkJ CW1ha2VzdHIoJihtc1trXSksYnJzdHJpcChzKSk7CisJCQlpZiAoaXRzYXBhdHRlcm4pIG1wW2td ID0gMTsKKwkJCWRlYnVnKEYxMTEsIk1JTlBVVCIsbXNba10saXRzYXBhdHRlcm4pOworCQkJaysr OworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAga2VlcGFsbGNoYXJzID0gMDsKKwl9IGVsc2Ug eworI2VuZGlmIC8qIENLX01JTlBVVCAqLworCisJICAgIC8qIElOUFVUIG9yIFJFSU5QVVQgKi8K KworCSAgICBpZiAoZmxhZ3MgJiBJTlBTV19DT1UpIHsKKwkJaWYgKCh5ID0gY21jZm0oKSkgPCAw KQorCQkgIHJldHVybih5KTsKKwkgICAgfSBlbHNlIHsKKwkJaWYgKCh5ID0gY210eHQoIk1hdGVy aWFsIHRvIGJlIGlucHV0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICByZXR1cm4oeSk7CisJ ICAgIH0KKwkgICAgbXBbMF0gPSBpdHNhcGF0dGVybiA/IDEgOiAwOworCSAgICBtYWtlc3RyKCYo bXNbMF0pLGJyc3RyaXAocykpOworCSAgICBtc1sxXSA9IE5VTEw7CisKKyNpZmRlZiBDS19NSU5Q VVQKKwl9CisjZW5kaWYgLyogQ0tfTUlOUFVUICovCisKKwlpZiAoaW5jb3VudCA+IDApCQkvKiBO byBzZWFyY2hpbmcgaWYgL0NPVU5UOiBnaXZlbiAqLworCSAgbWFrZXN0cigmKG1zWzBdKSxOVUxM KTsKKworCWlmIChjeCA9PSBYWElOUCB8fCBjeCA9PSBYWE1JTlApIHsgLyogTm90IFJFSU5QVVQu Li4gKi8KKwkgICAgaV9hY3RpdmUgPSAxOworCSAgICAvKiBHbyB0cnkgdG8gaW5wdXQgdGhlIHNl YXJjaCBzdHJpbmcgKi8KKwkgICAgc3VjY2VzcyA9IGRvaW5wdXQoeCxtcyxtcCxmbGFncyxpbmNv dW50KTsKKwkgICAgaV9hY3RpdmUgPSAwOworCX0gZWxzZSB7CQkJLyogUkVJTlBVVCAqLworCSAg ICBzdWNjZXNzID0gZG9yZWlucCh4LG1zWzBdLGl0c2FwYXR0ZXJuKTsKKwl9CisJaWYgKGludGlt ZVtjbWRsdmxdICYmICFzdWNjZXNzKSB7IC8qIFRJTUVPVVQtQUNUSU9OID0gUVVJVD8gKi8KKwkg ICAgcG9wY2x2bCgpOwkJCS8qIElmIHNvLCBwb3AgY29tbWFuZCBsZXZlbC4gKi8KKwkgICAgaWYg KHBmbGFnICYmIGNtZGx2bCA9PSAwKSB7CisJCWlmIChjeCA9PSBYWElOUCkgIHByaW50ZigiP0lO UFVUIHRpbWVkIG91dFxuIik7CisJCWlmIChjeCA9PSBYWE1JTlApIHByaW50ZigiP01JTlBVVCB0 aW1lZCBvdXRcbiIpOworCQlpZiAoY3ggPT0gWFhSRUkpICBwcmludGYoIj9SRUlOUFVUIGZhaWxl ZFxuIik7CisJICAgIH0KKwl9CisJcmV0dXJuKHN1Y2Nlc3MpOwkJLyogUmV0dXJuIGRvKHJlKWlu cHV0J3MgcmV0dXJuIGNvZGUgKi8KKyAgICB9CisKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAg aWYgKGN4ID09IFhYTE9HKSB7CQkJLyogTE9HICovCisJeCA9IGNta2V5KGxvZ3RhYixubG9nLCJX aGF0IHRvIGxvZyIsIiIseHhzdHJpbmcpOworCWlmICh4ID09IC0zKSB7CisJICAgIHByaW50Zigi P1R5cGUgb2YgbG9nIHJlcXVpcmVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJaWYgKHgg PCAwKSByZXR1cm4oeCk7CisJeCA9IGRvbG9nKHgpOworCWlmICh4IDwgMCkKKwkgIHJldHVybih4 KTsKKwllbHNlCisJICByZXR1cm4oc3VjY2VzcyA9IHgpOworICAgIH0KKworICAgIGlmIChjeCA9 PSBYWExPR0lOKSB7CQkvKiAoUkVNT1RFKSBMT0dJTiAqLworI2lmZGVmIE5FV0ZUUAorCWlmICgo ZnRwZ2V0ID09IDEpIHx8ICgoZnRwZ2V0ID09IDIpICYmIGZ0cGlzb3BlbigpKSkKKwkgIHJldHVy bihzdWNjZXNzID0gZG9mdHB1c3IoKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisjaWZkZWYgSUtT RAorCWlmIChpbnNlcnZlcikgeworCSAgICBwcmludGYoIj9BbHJlYWR5IGxvZ2dlZCBpblxuIik7 CisJICAgIHJldHVybigtOSk7CisJfSBlbHNlCisjZW5kaWYgLyogSUtTRCAqLworCXsKKyNpZmRl ZiBOT1hGRVIKKwkgICAgcmV0dXJuKC0yKTsKKyNlbHNlCisJICAgIHJldHVybihkb3JtdChYWkxH SSkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCX0KKyAgICB9CisgICAgaWYgKGN4ID09IFhYTE9H T1VUKSB7CQkvKiAoUkVNT1RFKSBMT0dPVVQgKi8KKyNpZmRlZiBORVdGVFAKKwlpZiAoKGZ0cGdl dCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBpc29wZW4oKSkpCisJICByZXR1cm4oc3Vj Y2VzcyA9IGRvZnRwcmVzKCkpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCisjaWZkZWYgSUtTRAor ICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsKKwkgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorCSAg ICAgIHJldHVybih4KTsKKwkgICAgZG9leGl0KEdPT0RfRVhJVCx4aXRzdGEpOworCX0gZWxzZQor I2VuZGlmIC8qIElLU0QgKi8KKwlpZiAoIWxvY2FsIHx8IChuZXR3b3JrICYmIHR0Y2hrKCkgPCAw KSkgeworCSAgICBwcmludGYoIj9ObyBjb25uZWN0aW9uLlxuIik7CisJICAgIHJldHVybigtOSk7 CisJfSBlbHNlIHsKKyNpZmRlZiBOT1hGRVIKKwkgICAgcmV0dXJuKC0yKTsKKyNlbHNlCisJICAg IHJldHVybihkb3JtdChYWkxHTykpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCX0KKyAgICB9CisK KyNpZm5kZWYgTk9TQ1JJUFQKKyAgICBpZiAoY3ggPT0gWFhMT0dJKSB7CQkJLyogVVVDUC1zdHls ZSBzY3JpcHQgKi8KKwlpZiAoKHggPSBjbXR4dCgiZXhwZWN0LXNlbmQgZXhwZWN0LXNlbmQgLi4u IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKyNpZmRlZiBDS19BUEMKKwlp ZiAoKGFwY2FjdGl2ZSA9PSBBUENfTE9DQUwpIHx8CisJICAgICgoYXBjYWN0aXZlID09IEFQQ19S RU1PVEUpICYmICghKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpKQorCSAgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNpZmRlZiBWTVMKKwljb25yZXMoKTsJCQkvKiBG b3IgQ3RybC1DIHRvIHdvcmsuLi4gKi8KKyNlbmRpZiAvKiBWTVMgKi8KKwlyZXR1cm4oc3VjY2Vz cyA9IGRvbG9naW4ocykpOwkvKiBSZXR1cm4gMT1jb21wbGV0ZWQsIDA9ZmFpbGVkICovCisgICAg fQorI2VuZGlmIC8qIE5PU0NSSVBUICovCisKKyNpZm5kZWYgTk9YRkVSCisjaWZkZWYgUElQRVNF TkQKKyAgICBpZiAoY3ggPT0gWFhDUkVDKSB7CQkJLyogQ1JFQ0VJVkUgKi8KKwlpZiAocHJvdG9j b2wgIT0gUFJPVE9fSykgeworCSAgICBwcmludGYoIj9Tb3JyeSwgQ1JFQ0VJVkUgd29ya3Mgb25s eSB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIik7CisJICAgIHJldHVybigtOSk7CisJfSBlbHNlCisJ ICByZXR1cm4oZG94Z2V0KGN4KSk7CisgICAgfQorICAgIGlmIChjeCA9PSBYWENHRVQpIHsJCQkv KiBDR0VUICovCisJcmV0dXJuKGRveGdldChjeCkpOworICAgIH0KKyNlbmRpZiAvKiBQSVBFU0VO RCAqLworCisgICAgaWYgKGN4ID09IFhYUkVDKQkJCS8qIFJFQ0VJVkUgKi8KKyAgICAgIHJldHVy bihkb3hnZXQoY3gpKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAg ICBpZiAoY3ggPT0gWFhSRU0pIHsJCQkvKiBSRU1PVEUgKi8KKyNpZmRlZiBORVdGVFAKKwlpZiAo KGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBpc29wZW4oKSkpCisJICByZXR1 cm4oZG9mdHBybXQoMCwwKSk7CisjZW5kaWYgLyogTkVXRlRQICovCisjaWZkZWYgQ0tfWFlaCisJ aWYgKHByb3RvY29sICE9IFBST1RPX0spIHsKKwkgICAgcHJpbnRmKCJTb3JyeSwgUkVNT1RFIGNv bW1hbmRzIG9ubHkgd29yayB3aXRoIEtlcm1pdCBwcm90b2NvbFxuIik7CisJICAgIHJldHVybigt OSk7CisJfQorI2VuZGlmIC8qIENLX1hZWiAqLworCXggPSBjbWtleShyZW1jbWQsbnJtdCwiUmVt b3RlIEtlcm1pdCBzZXJ2ZXIgY29tbWFuZCIsIiIseHhzdHJpbmcpOworCWlmICh4ID09IC0zKSB7 CisJICAgIHByaW50ZigiP1lvdSBtdXN0IHNwZWNpZnkgYSBjb21tYW5kIGZvciB0aGUgcmVtb3Rl IHNlcnZlclxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCXJldHVybihkb3JtdCh4KSk7Cisg ICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PUkVOQU1FCisjaWZuZGVmIE5P RlJJTExTCisgICAgaWYgKGN4ID09IFhYUkVOIHx8IGN4ID09IFhYTFJFTikgewkvKiBSRU5BTUUg Ki8KKyNpZmRlZiBMT0NVUworCWlmICghbG9jdXMgJiYgY3ggIT0gWFhMUkVOKSB7CisjaWZkZWYg Tk9YRkVSCisJICAgIHJldHVybigtMik7CisjZWxzZQorCSAgICByZXR1cm4oZG9ybXQoWFpSRU4p KTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIExPQ1VTICovCisj aWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAoIUVOQUJMRUQoZW5fcmVuKQorI2lmZGVmIENL X0xPR0lOCisJCQkgfHwgaXNndWVzdAorI2VuZGlmIC8qIENLX0xPR0lOICovCisJCQkgKSkgewor CSAgICBwcmludGYoIj9Tb3JyeSwgcmVuYW1pbmcgb2YgZmlsZXMgaXMgZGlzYWJsZWRcbiIpOwor CSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgQ0tfQVBDCisJ aWYgKChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMKSB8fAorCSAgICAoKGFwY2FjdGl2ZSA9PSBBUENf UkVNT1RFKSAmJiAoIShhcGNzdGF0dXMgJiBBUENfVU5DSCkpKSkKKwkgIHJldHVybihzdWNjZXNz ID0gMCk7CisjZW5kaWYgLyogQ0tfQVBDICovCisJcmV0dXJuKGRvcmVuYW0oKSk7CisgICAgfQor I2VuZGlmIC8qIE5PRlJJTExTICovCisjZW5kaWYgLyogTk9SRU5BTUUgKi8KKworICAgIGlmIChj eCA9PSBYWEVJR0hUKSB7CQkvKiBFSUdIVEJJVCAqLworCWV4dGVybiBpbnQgcGFyaXR5LCBjbWFz aywgY21kbXNrOworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkKKwkgIHJldHVybih4KTsKKwlwYXJp dHkgPSAwOworCWNtYXNrID0gMHhmZjsKKwljbWRtc2sgPSAweGZmOworCXJldHVybihzdWNjZXNz ID0gMSk7CisgICAgfQorCisjaWZuZGVmIE5PWEZFUgorLyogU0VORCwgQ1NFTkQsIE1PVkUsIE1B SUwsIGFuZCBSRVNFTkQgdXNlIHRoZSBuZXcgY29tbW9uIGNvZGUgKi8KKworICAgIGlmIChjeCA9 PSBYWFNFTgkJCS8qIFNFTkQgKi8KKyNpZmRlZiBQSVBFU0VORAorCXx8IGN4ID09IFhYQ1NFTgkJ CS8qIENTRU5EICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKwl8fCBjeCA9PSBYWE1PVkUJCQkv KiBNT1ZFICovCisJfHwgY3ggPT0gWFhNQUkJCQkvKiBNQUlMICovCisjaWZkZWYgQ0tfUkVTRU5E CisJfHwgY3ggPT0gWFhSU0VOCQkJLyogUkVTRU5EICovCisjZW5kaWYgLyogQ0tfUkVTRU5EICov CisJKSB7CisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl9nZXQpKSB7 CisJICAgIHByaW50ZigiP1NvcnJ5LCBzZW5kaW5nIGZpbGVzIGlzIGRpc2FibGVkXG4iKTsKKwkg ICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworCXJldHVybihkb3hzZW5kKGN4 KSk7CisgICAgfQorCisvKiBQU0VORCwgQURELCBhbmQgUkVNT1ZFIHVzZSBzcGVjaWFsIHBhcnNp bmcgKi8KKworI2lmZGVmIEFERENNRAorICAgIC8qIEFERCBhbmQgUkVNT1ZFICovCisgICAgaWYg KGN4ID09IFhYQUREIHx8IGN4ID09IFhYUkVNVikgeworCWNoYXIgKiBtOworCW0gPSAoY3ggPT0g WFhBREQpID8gIkFkZCB0byB3aGljaCBsaXN0PyIgOiAiUmVtb3ZlIGZyb20gd2hpY2ggbGlzdD8i OworCXggPSBjbWtleShhZGR0YWIsbmFkZHRhYixtLCIiLHh4c3RyaW5nKTsKKwlpZiAoeCA8IDAp CisJICByZXR1cm4oeCk7CisjaWZuZGVmIE5PTVNFTkQKKwlpZiAoeCA9PSBBRERfU05EKQorCSAg cmV0dXJuKGFkZHNlbmQoY3gpKTsKKwllbHNlCisjZW5kaWYgLyogTk9NU0VORCAqLworCSAgcmV0 dXJuKGRvYWRkKGN4LHgpKTsKKyAgICB9CisjZW5kaWYgLyogQUREQ01EICovCisKKyNpZmRlZiBD S19SRVNFTkQKKyAgICBpZiAoY3ggPT0gWFhQU0VOKSB7CQkJLyogUFNFTkQgKi8KKwlpbnQgc2Vl a3RvID0gMDsJCQkvKiBGSVggVEhJUyAqLworCisJY21hcmcgPSBjbWFyZzIgPSAiIjsKKwl4ID0g Y21pZmkoIkZpbGUgdG8gcGFydGlhbGx5IHNlbmQiLCAiIiwgJnMsICZ5LCB4eHN0cmluZyk7CisJ aWYgKHggPCAwKSB7CisJICAgIGlmICh4ID09IC0zKSB7CisJCXByaW50ZigiP0EgZmlsZSBzcGVj aWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfSBlbHNlIHJl dHVybih4KTsKKwl9CisJbmZpbHMgPSAtMTsJCQkvKiBGaWxlcyBjb21lIGZyb20gaW50ZXJuYWwg bGlzdC4gKi8KKyNpZm5kZWYgTk9NU0VORAorICAgICAgICBhZGRsaXN0ID0gMDsJCQkvKiBEb24n dCB1c2UgU0VORC1MSVNULiAqLworICAgICAgICBmaWxlbmV4dCA9IE5VTEw7CisjZW5kaWYgLyog Tk9NU0VORCAqLworCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsJLyogU2F2ZSBjb3B5IG9m IHN0cmluZyBqdXN0IHBhcnNlZC4gKi8KKwlkZWJ1ZyhGMTEwLCJQU0VORCBsaW5lIixsaW5lLDAp OworCWlmICh5ICE9IDApIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIHdpbGRjYXJkcyBub3QgcGVy bWl0dGVkIGluIHRoaXMgY29tbWFuZFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCWlmIChz aXplb2YoaW50KSA8IDQpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIHRoaXMgY29tbWFuZCBuZWVk cyAzMi1iaXQgaW50ZWdlcnNcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwl4ID0gY21udW0o InN0YXJ0aW5nIHBvc2l0aW9uIChieXRlIG51bWJlcikiLAorCQkgICIiLDEwLCZzZWVrdG8seHhz dHJpbmcpOworCWlmICh4IDwgMCkKKwkgIHJldHVybih4KTsKKwl6Zm5xZnAocyxmc3BlY2xlbixm c3BlYyk7CS8qIEdldCBmdWxsIHBhdGggKi8KKwlpZiAoKHggPSBjbXR4dCgiTmFtZSB0byBzZW5k IGl0IHdpdGgiLCIiLCZzLE5VTEwpKSA8IDApCisJICByZXR1cm4oeCk7CisJY2tzdHJuY3B5KHRt cGJ1ZixzLFRNUEJVRlNJWik7CisKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICFFTkFC TEVEKGVuX2dldCkpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIHNlbmRpbmcgZmlsZXMgaXMgZGlz YWJsZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisjaWZk ZWYgUElQRVNFTkQKKwlpZiAoc25kZmlsdGVyKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBubyBQ U0VORCB3aGlsZSBTRU5EIEZJTFRFUiBzZWxlY3RlZFxuIik7CisJICAgIHJldHVybigtOSk7CisJ fQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisjaWZkZWYgQ0tfWFlaCisJaWYgKChwcm90b2NvbCA9 PSBQUk9UT19YIHx8IHByb3RvY29sID09IFBST1RPX1hDKSkgeworCSAgICBwcmludGYoIlNvcnJ5 LCBQU0VORCB3b3JrcyBvbmx5IHdpdGggS2VybWl0IHByb3RvY29sXG4iKTsKKwkgICAgcmV0dXJu KC05KTsKKwl9CisjZW5kaWYgLyogQ0tfWFlaICovCisKKwljbWFyZzIgPSBicnN0cmlwKHRtcGJ1 Zik7CS8qIFN0cmlwIGJyYWNlcyAqLworCWNtYXJnID0gbGluZTsJCQkvKiBGaWxlIHRvIHNlbmQg Ki8KKwlkZWJ1ZyhGMTEwLCJQU0VORCBmaWxlbmFtZSIsY21hcmcsMCk7CisJZGVidWcoRjExMCwi UFNFTkQgYXMtbmFtZSIsY21hcmcyLDApOworCXNlbmRzdGFydCA9IHNlZWt0bzsKKwlzc3RhdGUg PSAncyc7CQkJLyogU2V0IHN0YXJ0IHN0YXRlIHRvIFNFTkQgKi8KKyNpZm5kZWYgTk9NU0VORAor CWFkZGxpc3QgPSAwOworCWZpbGVuZXh0ID0gTlVMTDsKKyNlbmRpZiAvKiBOT01TRU5EICovCisJ c2VuZG1vZGUgPSBTTV9QU0VORDsKKyNpZmRlZiBNQUMKKwl3aGF0ID0gV19TRU5EOworCXNjcmNy ZWF0ZSgpOworI2VuZGlmIC8qIE1BQyAqLworCWlmIChsb2NhbCkgewkJCS8qIElmIGluIGxvY2Fs IG1vZGUsICovCisJICAgIGRpc3BsYSA9IDE7CQkJLyogZW5hYmxlIGZpbGUgdHJhbnNmZXIgZGlz cGxheSAqLworCX0KKwlyZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIENLX1JFU0VORCAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PWEZFUgorI2lmbmRlZiBOT01TRU5ECisg ICAgaWYgKGN4ID09IFhYTVNFIHx8IGN4ID09IFhYTU1PVkUpIHsKKyNpZmRlZiBORVdGVFAKKwlp ZiAoKGZ0cGdldCA9PSAxKSB8fCAoKGZ0cGdldCA9PSAyKSAmJiBmdHBpc29wZW4oKSkpCisJICBy ZXR1cm4oZG9mdHBwdXQoY3gsMCkpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworI2lmZGVmIENLX1hZ WgorCWlmIChwcm90b2NvbCA9PSBQUk9UT19YIHx8IHByb3RvY29sID09IFBST1RPX1hDKSB7CisJ ICAgIHByaW50ZigKKyJTb3JyeSwgeW91IGNhbiBvbmx5IHNlbmQgb25lIGZpbGUgYXQgYSB0aW1l IHdpdGggWE1PREVNIHByb3RvY29sXG4iCisJCSAgICk7CisJICAgIHJldHVybigtOSk7CisJfQor I2VuZGlmIC8qIENLX1hZWiAqLworICAgICAgICByZXR1cm4oZG94c2VuZChjeCkpOworICAgIH0K KworI2lmZGVmIENPTU1FTlQJCQkJLyogKG1vdmVkIHRvIGRveHNlbmQpICovCisgICAgaWYgKGN4 ID09IFhYTVNFIHx8IGN4ID09IFhYTU1PVkUpIHsJLyogTVNFTkQgYW5kIE1NT1ZFIGNvbW1hbmRz ICovCisJbmZpbHMgPSAwOwkJCS8qIExpa2UgZ2V0dGluZyBhIGxpc3Qgb2YgKi8KKwlscCA9IGxp bmU7CQkJLyogZmlsZXMgb24gdGhlIGNvbW1hbmQgbGluZSAqLworCWFkZGxpc3QgPSAwOwkJCS8q IERvIG5vdCB1c2UgU0VORC1MSVNUICovCisJZmlsZW5leHQgPSBOVUxMOwkJLyogRGl0dG8gISAq LworCisJd2hpbGUgKDEpIHsKKwkgICAgY2hhciAqcDsKKwkgICAgaWYgKCh4ID0gY21pZmkoIk5h bWVzIG9mIGZpbGVzIHRvIHNlbmQsIHNlcGFyYXRlZCBieSBzcGFjZXMiLCIiLAorCQkJICAgJnMs JnkseHhzdHJpbmcpKSA8IDApIHsKKwkJaWYgKHggPT0gLTMpIHsKKwkJICAgIGlmIChuZmlscyA8 PSAwKSB7CisJCQlwcmludGYoIj9BIGZpbGUgc3BlY2lmaWNhdGlvbiBpcyByZXF1aXJlZFxuIik7 CisJCQlyZXR1cm4oLTkpOworCQkgICAgfSBlbHNlIGJyZWFrOworCQl9CisJCXJldHVybih4KTsK KwkgICAgfQorCSAgICBtc2ZpbGVzW25maWxzKytdID0gbHA7CS8qIEdvdCBvbmUsIGNvdW50IGl0 LCBwb2ludCB0byBpdCwgKi8KKwkgICAgcCA9IGxwOwkJCS8qIHJlbWVtYmVyIHBvaW50ZXIsICov CisJICAgIHdoaWxlICgqbHArKyA9ICpzKyspCS8qIGFuZCBjb3B5IGl0IGludG8gYnVmZmVyICov CisJICAgICAgaWYgKGxwID4gKGxpbmUgKyBMSU5CVUZTSVopKSB7IC8qIEF2b2lkIG1lbW9yeSBs ZWFrICovCisJCSAgcHJpbnRmKCI/TVNFTkQgbGlzdCB0b28gbG9uZ1xuIik7CisJCSAgbGluZVsw XSA9IE5VTDsKKwkJICByZXR1cm4oLTkpOworCSAgICAgIH0KKwkgICAgZGVidWcoRjExMSwibXNm aWxlcyIsbXNmaWxlc1tuZmlscy0xXSxuZmlscy0xKTsKKwkgICAgaWYgKG5maWxzID09IDEpICpm c3BlYyA9IE5VTDsgLyogVGFrZSBjYXJlIG9mIFx2KGZpbGVzcGVjKSAqLworI2lmZGVmIFpGTlFG UAorCSAgICB6Zm5xZnAocCxUTVBCVUZTSVosdG1wYnVmKTsKKwkgICAgcCA9IHRtcGJ1ZjsKKyNl bmRpZiAvKiBaRk5RRlAgKi8KKwkgICAgaWYgKCgoaW50KXN0cmxlbihmc3BlYykgKyAoaW50KXN0 cmxlbihwKSArIDEpIDwgZnNwZWNsZW4pIHsKKwkJc3RyY2F0KGZzcGVjLHApOwkvKiBzYWZlICov CisJCXN0cmNhdChmc3BlYywiICIpOwkvKiBzYWZlICovCisJICAgIH0gZWxzZSBwcmludGYoIldB Uk5JTkcgLSBcXHYoZmlsZXNwZWMpIGJ1ZmZlciBvdmVyZmxvd1xuIik7CisJfQorCWNtbGlzdCA9 IG1zZmlsZXM7CQkvKiBQb2ludCBjbWxpc3QgdG8gcG9pbnRlciBhcnJheSAqLworCWNtYXJnMiA9 ICIiOwkJCS8qIE5vIGludGVybmFsIGV4cGFuc2lvbiBsaXN0ICh5ZXQpICovCisJc25kc3JjID0g bmZpbHM7CQkJLyogRmlsZW5hbWVzIGNvbWUgZnJvbSBjbWxpc3QgKi8KKwlzZW5kbW9kZSA9IFNN X01TRU5EOwkJLyogUmVtZW1iZXIgdGhpcyBraW5kIG9mIFNFTkRpbmcgKi8KKwlzc3RhdGUgPSAn cyc7CQkJLyogU2V0IHN0YXJ0IHN0YXRlIGZvciBTRU5EICovCisJaWYgKGN4ID09IFhYTU1PVkUp CQkvKiBJZiBNTU9WRSdpbmcsICovCisJICBtb3ZpbmcgPSAxOwkJCS8qICBzZXQgdGhpcyBmbGFn LiAqLworI2lmZGVmIE1BQworCXdoYXQgPSBXX1NFTkQ7CisJc2NyY3JlYXRlKCk7CisjZW5kaWYg LyogTUFDICovCisJaWYgKGxvY2FsKSB7CQkJLyogSWYgaW4gbG9jYWwgbW9kZSwgKi8KKwkgICAg ZGlzcGxhID0gMTsJCQkvKiB0dXJuIG9uIGZpbGUgdHJhbnNmZXIgZGlzcGxheSAqLworCSAgICB0 dGZsdWkoKTsJCQkvKiBhbmQgZmx1c2ggdHR5IGlucHV0IGJ1ZmZlci4gKi8KKwl9CisJcmV0dXJu KDApOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogTk9NU0VORCAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PU0VSVkVSCisgICAgaWYgKGN4ID09IFhY U0VSKSB7CQkJLyogU0VSVkVSICovCisjaWZkZWYgQ0tfWFlaCisJaWYgKHByb3RvY29sICE9IFBS T1RPX0spIHsKKwkgICAgcHJpbnRmKCJTb3JyeSwgU0VSVkVSIG9ubHkgd29ya3Mgd2l0aCBLZXJt aXQgcHJvdG9jb2xcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBDS19YWVog Ki8KKyNpZmRlZiBDT01NRU5UCisvKgorICBQYXJzZSBmb3IgdGltZSBsaW1pdCwgYnV0IHNpbmNl IHdlIGRvbid0IHVzZSBpdCB5ZXQsCisgIHRoZSBwYXJzaW5nIGlzIGNvbW1lbnRlZCBvdXQuCisq LworCXhfaWZudW0gPSAxOwkJCS8qIFR1cm4gb2ZmIGludGVybmFsIGNvbXBsYWludHMgKi8KKwl5 ID0gY21udW0oIm9wdGlvbmFsIHRpbWUgbGltaXQsIHNlY29uZHMsIG9yIHRpbWUgb2YgZGF5IGFz IGhoOm1tOnNzIiwKKwkJICAiMCIsIDEwLCAmeCwgeHhzdHJpbmcKKwkJICApOworCXhfaWZudW0g PSAwOworCWlmICh5IDwgMCkgeworCSAgICBpZiAoeSA9PSAtMikgewkJLyogSW52YWxpZCBudW1i ZXIgb3IgZXhwcmVzc2lvbiAqLworCQl6eiA9IHRvZDJzZWMoYXRtYnVmKTsJLyogQ29udmVydCB0 byBzZWNzIHNpbmNlIG1pZG5pZ2h0ICovCisJCWlmICh6eiA8IDBMKSB7CisJCSAgICBwcmludGYo Ij9OdW1iZXIsIGV4cHJlc3Npb24sIG9yIHRpbWUgb2YgZGF5IHJlcXVpcmVkXG4iKTsKKwkJICAg IHJldHVybigtOSk7CisJCX0gZWxzZSB7CisJCSAgICBjaGFyIG5vd1szMl07CS8qIEN1cnJlbnQg dGltZSAqLworCQkgICAgY2hhciAqcDsKKwkJICAgIGxvbmcgdG5vdzsKKwkJICAgIHAgPSBub3c7 CisJCSAgICB6dGltZSgmcCk7CisJCSAgICB0bm93ID0gYXRvbChwKzExKSAqIDM2MDBMICsgYXRv bChwKzE0KSAqIDYwTCArIGF0b2wocCsxNyk7CisJCSAgICBpZiAoenogPCB0bm93KQkvKiBVc2Vy J3MgdGltZSBiZWZvcmUgbm93ICovCisJCSAgICAgIHp6ICs9IDg2NDAwTDsJLyogU28gbWFrZSBp dCB0b21vcnJvdyAqLworCQkgICAgenogLT0gdG5vdzsJCS8qIFNlY29uZHMgZnJvbSBub3cuICov CisJCX0KKwkgICAgfSBlbHNlCisJICAgICAgcmV0dXJuKHkpOworCX0KKwlpZiAoenogPiAtMUwp IHsKKwkgICAgeCA9IHp6OworCSAgICBpZiAoenogIT0gKGxvbmcpIHgpIHsKKwkJcHJpbnRmKAor IlNvcnJ5LCBhcml0aG1ldGljIG92ZXJmbG93IC0gaGg6bW06c3Mgbm90IHVzYWJsZSBvbiB0aGlz IHBsYXRmb3JtLlxuIgorCQkgICAgICAgKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorCX0KKwlp ZiAoeCA8IDApCisJICB4ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKwlpZiAoKHggPSBj bWNmbSgpKSA8IDApIHJldHVybih4KTsKKwlzc3RhdGUgPSAneCc7CisjaWZkZWYgTUFDCisJd2hh dCA9IFdfUkVDVjsKKwlzY3JjcmVhdGUoKTsKKyNlbmRpZiAvKiBNQUMgKi8KKwlpZiAobG9jYWwp IGRpc3BsYSA9IDE7CisjaWZkZWYgQU1JR0EKKwlyZXFvZmYoKTsJCQkvKiBObyBET1MgcmVxdWVz dG9ycyB3aGlsZSBzZXJ2ZXIgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworCXJldHVybigwKTsKKyAg ICB9CisjZW5kaWYgLyogTk9TRVJWRVIgKi8KKworICAgIGlmIChjeCA9PSBYWFNBVkUpIHsJCQkv KiBTQVZFIGNvbW1hbmQgKi8KKwl4ID0gY21rZXkoc2F2dGFiLG5zYXYsIm9wdGlvbiIsImtleW1h cCIseHhzdHJpbmcpOworCWlmICh4ID09IC0zKSB7CisJICAgIHByaW50ZigiP1lvdSBtdXN0IHNw ZWNpZnkgYW4gb3B0aW9uIHRvIHNhdmVcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlpZiAo eCA8IDApIHJldHVybih4KTsKKwkvKiBoYXZlIHRvIHNldCBzdWNjZXNzIHNlcGFyYXRlbHkgZm9y IGVhY2ggaXRlbSBpbiBkb3BybSgpLi4uICovCisJLyogYWN0dWFsbHkgbm90IHJlYWxseSwgY291 bGQgaGF2ZSBqdXN0IGhhZCBkb3BybSByZXR1cm4gMCBvciAxICovCisJLyogYW5kIHNldCBzdWNj ZXNzIGhlcmUuLi4gKi8KKwl5ID0gZG9zYXZlKHgpOworCWlmICh5ID09IC0zKSB7CisJICAgIHBy aW50ZigiP01vcmUgZmllbGRzIHJlcXVpcmVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVs c2UgcmV0dXJuKHkpOworICAgIH0KKworICAgIGlmIChjeCA9PSBYWFNFVCkgewkJCS8qIFNFVCBj b21tYW5kICovCisJeCA9IGNta2V5KHBybXRhYixucHJtLCJQYXJhbWV0ZXIiLCIiLHh4c3RyaW5n KTsKKwlpZiAoeCA9PSAtMykgeworCSAgICBwcmludGYoIj9Zb3UgbXVzdCBzcGVjaWZ5IGEgcGFy YW1ldGVyIHRvIHNldFxuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCWlmICh4IDwgMCkgcmV0 dXJuKHgpOworCS8qIGhhdmUgdG8gc2V0IHN1Y2Nlc3Mgc2VwYXJhdGVseSBmb3IgZWFjaCBpdGVt IGluIGRvcHJtKCkuLi4gKi8KKwkvKiBhY3R1YWxseSBub3QgcmVhbGx5LCBjb3VsZCBoYXZlIGp1 c3QgaGFkIGRvcHJtIHJldHVybiAwIG9yIDEgKi8KKwkvKiBhbmQgc2V0IHN1Y2Nlc3MgaGVyZS4u LiAqLworCXkgPSBkb3BybSh4LDApOworCWlmICh5ID09IC0zKSB7CisJICAgIHByaW50ZigiP01v cmUgZmllbGRzIHJlcXVpcmVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVsc2UgcmV0dXJu KHkpOworICAgIH0KKworI2lmbmRlZiBOT1BVU0gKKyAgICBpZiAoY3ggPT0gWFhTSEUJCQkvKiBT SEVMTCAoc3lzdGVtKSBjb21tYW5kICovCisJfHwgY3ggPT0gWFhFWEVDCQkJLyogZXhlYygpICov CisJKSB7CisJaW50IHJ4ID0gMDsKKwljaGFyICogcCA9IE5VTEw7CisJaW50IGkgLyogLG4gKi8g OworI2lmZGVmIFVOSVhPUk9TSworCWNoYXIgKiBhcmdzWzI1Nl07CisjZW5kaWYgLyogVU5JWE9S T1NLICovCisKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmIChub3B1c2ggfHwgIUVOQUJM RUQoZW5faG9zKSkpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIGhvc3QgY29tbWFuZCBhY2Nlc3Mg aXMgZGlzYWJsZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICov CisKKyNpZmRlZiBDS0VYRUMKKwlpZiAoY3ggPT0gWFhFWEVDKSB7CQkvKiBFWEVDIChvdmVybGF5 IG91cnNlbHZlcykgKi8KKwkgICAgc3RydWN0IEZEQiBzdywgZmw7CisJICAgIGNtZmRiaSgmc3cs CQkJLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworCQkgICBfQ01LRVksCQkvKiBm Y29kZSAqLworCQkgICAiQ29tbWFuZCB0byBvdmVybGF5IEMtS2VybWl0XG4gb3Igc3dpdGNoIiwg LyogaGxwbXNnICovCisJCSAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkJICAgIiIsCQkJLyogYWRk dGwgc3RyaW5nIGRhdGEgKi8KKwkJICAgMSwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJs IHNpemUgKi8KKwkJICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICov CisJCSAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworCQkgICByZWRpcnN3 LAkJLyogS2V5d29yZCB0YWJsZSAqLworCQkgICAmZmwJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRC ICovCisJCSAgICk7CisJICAgIGNtZmRiaSgmZmwsCQkJLyogMm5kIEZEQiAtIGNvbW1hbmQgdG8g ZXhlYyAqLworCQkgICBfQ01GTEQsCQkvKiBmY29kZSAqLworCQkgICAiQ29tbWFuZCB0byBvdmVy bGF5IEMtS2VybWl0IiwgLyogaGxwbXNnICovCisJCSAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkJ ICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJICAgMCwJCQkvKiBhZGR0bCBudW1l cmljIGRhdGEgMSAqLworCQkgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisJCSAg IHh4c3RyaW5nLAorCQkgICBOVUxMLAorCQkgICBOVUxMCQkJLyogTm8gbW9yZSBhZnRlciB0aGlz ICovCisJCSAgICk7CisJICAgIHdoaWxlICgxKSB7CisJCXggPSBjbWZkYigmc3cpOwkJLyogUGFy c2Ugc29tZXRoaW5nICovCisJCWRlYnVnKEYxMDEsImV4ZWMgY21mZGIiLCIiLHgpOworCQlpZiAo eCA8IDApCisJCSAgcmV0dXJuKHgpOworCQkvKiBHZW5lcmFsaXplIHRoaXMgaWYgd2UgYWRkIG1v cmUgc3dpdGNoZXMgKi8KKwkJaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSkgeworCQkgICAg cnggPSAxOworCQkgICAgY29udGludWU7CisJCX0KKwkJaWYgKGNtcmVzdWx0LmZjb2RlID09IF9D TUZMRCkKKwkJICBicmVhazsKKwkJcmV0dXJuKC0yKTsKKwkgICAgfQorCSAgICBja3N0cm5jcHko dG1wYnVmLGNtcmVzdWx0LnNyZXN1bHQsVE1QQlVGU0laKTsKKwkgICAgaWYgKCF0bXBidWZbMF0p IHsKKwkJcHJpbnRmKCI/Q29tbWFuZCByZXF1aXJlZFxuIik7CisJCXJldHVybigtOSk7CisJICAg IH0KKwkgICAgcCA9IGJyc3RyaXAodG1wYnVmKTsKKwkgICAgYXJnc1swXSA9IE5VTEw7CQkvKiBT ZXQgYXJndlswXSB0byBpdCAqLworCSAgICBtYWtlc3RyKCZhcmdzWzBdLHApOworCSAgICBmb3Ig KGkgPSAxOyBpIDwgMjU1OyBpKyspIHsJLyogR2V0IGFyZ3VtZW50cyBmb3IgY29tbWFuZCAqLwor CQlpZiAoKHggPSBjbWZsZCgiQXJndW1lbnQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJCSAg ICBpZiAoeCA9PSAtMykgeworCQkJaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorCQkJICByZXR1cm4o eCk7CisJCQlicmVhazsKKwkJICAgIH0gZWxzZQorCQkgICAgICByZXR1cm4oeCk7CisJCX0KKwkJ YXJnc1tpXSA9IE5VTEw7CisJCXMgPSBicnN0cmlwKHMpOworCQltYWtlc3RyKCZhcmdzW2ldLHMp OworCSAgICB9CisJICAgIGFyZ3NbaV0gPSBOVUxMOworCX0gZWxzZSB7CisjZW5kaWYgLyogQ0tF WEVDICovCisJICAgIGlmICgoeCA9IGNtdHh0KCJTeXN0ZW0gY29tbWFuZCB0byBleGVjdXRlIiwi Iiwmcyx4eHN0cmluZykpIDwgMCkKKwkgICAgICByZXR1cm4oeCk7CisjaWZkZWYgQ0tFWEVDCisJ fQorI2VuZGlmIC8qIENLRVhFQyAqLworICAgICAgICBpZiAobm9wdXNoKQorICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMCk7CisjaWZkZWYgQ0tfQVBDCisJaWYgKGFwY2FjdGl2ZSA9PSBBUENf UkVNT1RFICYmICEoYXBjc3RhdHVzICYgQVBDX1VOQ0gpKQorCSAgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKwljb25yZXMoKTsJCQkvKiBNYWtlIGNvbnNvbGUgbm9y bWFsICAqLworI2lmZGVmIE9TMgorCWlmICghKHMgJiYgKnMpKSB7CisJICAgIG9zMnB1c2goKTsK KyAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisJfSBlbHNlCisjZW5kaWYgLyogT1My ICovCisJICBpZiAoY3ggPT0gWFhTSEUpIHsKKwkgICAgICB4ID0genNoY21kKHMpOworCSAgICAg IGRlYnVnKEYxMDEsIlJVTiB6c2hjbWQgY29kZSIsIiIseCk7CisJICAgICAgY29uY2IoKGNoYXIp ZXNjYXBlKTsKKwkgICAgICByZXR1cm4oc3VjY2VzcyA9IHgpOworI2lmZGVmIENLRVhFQworCSAg fSBlbHNlIHsKKyNpZmRlZiBERUJVRworCSAgICAgIGlmIChkZWJsb2cpIHsKKwkJICBkZWJ1ZyhG MTExLCJFWEVDIGNtZCIscCwwKTsKKwkJICBmb3IgKGkgPSAwOyBpIDwgMjU2ICYmIGFyZ3NbaV07 IGkrKykKKwkJICAgIGRlYnVnKEYxMTEsIkVYRUMgYXJnIixhcmdzW2ldLGkpOworCSAgICAgIH0K KyNlbmRpZiAvKiBERUJVRyAqLworCSAgICAgIGlmIChwKSB7CisJCSAgel9leGVjKHAsYXJncyxy eCk7CS8qIE92ZXJsYXkgb3Vyc2VsZiAqLworCQkgIGRlYnVnKEYxMDAsIkVYRUMgZmFpbHMiLCIi LDApOworCQkgIGNvbmNiKChjaGFyKWVzY2FwZSk7CS8qIEluIGNhc2UgaXQgcmV0dXJucyAqLwor CSAgICAgIH0KKwkgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIENLRVhFQyAq LworCSAgfQorICAgIH0KKworI2lmZGVmIENLX1JFRElSCisgICAgaWYgKGN4ID09IFhYRlVOKSB7 CQkJLyogUkVESVJFQ1QgKi8KKyNpZmRlZiBDS19BUEMKKwlpZiAoKGFwY2FjdGl2ZSA9PSBBUENf TE9DQUwpIHx8CisJICAgICgoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUpICYmICghKGFwY3N0YXR1 cyAmIEFQQ19VTkNIKSkpKQorCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNlbmRpZiAvKiBDS19B UEMgKi8KKwlja21ha21zZyh0bXBidWYsCisJCSBUTVBCVUZTSVosCisJCSAiTG9jYWwgY29tbWFu ZCB0byBydW4sXG4iLAorCQkgIndpdGggaXRzIHN0YW5kYXJkIGlucHV0L291dHB1dCByZWRpcmVj dGVkIHRvICIsCisJCSBsb2NhbCA/IHR0bmFtZSA6ICJ0aGUgY29tbXVuaWNhdGlvbnMgY29ubmVj dGlvbiIsCisJCSAiXG4iCisJCSApOworCWlmICgoeCA9IGNtdHh0KHRtcGJ1ZiwiIiwmcyx4eHN0 cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKyAgICAgICAgaWYgKG5vcHVzaCkgeworICAgICAg ICAgICAgcHJpbnRmKCI/UkVESVJFQ1QgZGlzYWJsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJu KHN1Y2Nlc3M9MCk7CisgICAgICAgIH0KKwlpZiAoIWxvY2FsKSB7CisJICAgIHByaW50ZigiP1NF VCBMSU5FIG9yIFNFVCBIT1NUIHJlcXVpcmVkIGZpcnN0XG4iKTsKKwkgICAgcmV0dXJuKC05KTsK Kwl9CisJaWYgKCEqcykgeworCSAgICBwcmludGYoIj9SRURJUkVDVCByZXF1aXJlcyBhIGNvbW1h bmQgdG8gcmVkaXJlY3RcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKwlyZXR1cm4oc3VjY2Vz cyA9IHR0cnVuY21kKHMpKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfUkVESVIgKi8KKyNlbmRpZiAv KiBOT1BVU0ggKi8KKworI2lmbmRlZiBOT1NIT1cKKyAgICBpZiAoY3ggPT0gWFhTSE8pIHsJCQkv KiBTSE9XICovCisJeCA9IGNta2V5KHNob3RhYixuc2hvLCIiLCJwYXJhbWV0ZXJzIix4eHN0cmlu Zyk7CisJaWYgKHggPCAwKSByZXR1cm4oeCk7CisJcmV0dXJuKGRvc2hvdyh4KSk7CisgICAgfQor I2VuZGlmIC8qIE5PU0hPVyAqLworCisjaWZuZGVmIE1BQworICAgIGlmIChjeCA9PSBYWFNQQSkg ewkJCS8qIFNQQUNFICovCisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChl bl9zcGEpKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBTUEFDRSBjb21tYW5kIGRpc2FibGVkXG4i KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIGRhdGFn ZW5lcmFsCisJLyogQU9TL1ZTIGNhbiB0YWtlIGFuIGFyZ3VtZW50IGFmdGVyIGl0cyAic3BhY2Ui IGNvbW1hbmQuICovCisJaWYgKCh4ID0gY210eHQoIkNvbmZpcm0sIG9yIGxvY2FsIGRpcmVjdG9y eSBuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKwlpZiAobm9wdXNo KSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBTUEFDRSBjb21tYW5kIGRpc2FibGVkXG4iKTsKKwkg ICAgcmV0dXJuKC05KTsKKwl9IGVsc2UgaWYgKCpzID09IE5VTCkgeworCSAgICB4c3lzdGVtKFNQ QUNNRCk7CisJfSBlbHNlIHsKKwkgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosInNwYWNlICIs cyxOVUxMLE5VTEwpOworCSAgICB4c3lzdGVtKGxpbmUpOworCX0KKyNlbHNlCisjaWZkZWYgT1My CisJaWYgKCh4ID0gY210eHQoIlByZXNzIEVudGVyIGZvciBjdXJyZW50IGRpc2ssXG5cCisgb3Ig c3BlY2lmeSBhIGRpc2sgbGV0dGVyIGxpa2UgQToiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAg cmV0dXJuKHgpOworCWlmICgqcyA9PSBOVUwpIHsJCS8qIEN1cnJlbnQgZGlzayAqLworICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBzcGFjZSA9IHpkc2tzcGFjZSgwKTsKKyAgICAgICAgICAgIGlm IChzcGFjZSA+IDAgJiYgc3BhY2UgPCAxMDI0KQorICAgICAgICAgICAgICBwcmludGYoIiBGcmVl IHNwYWNlOiB1bmtub3duXG4iKTsKKyAgICAgICAgICAgIGVsc2UKKwkgICAgICBwcmludGYoIiBG cmVlIHNwYWNlOiAlbGRLXG4iLCBzcGFjZS8xMDI0TCk7CisJfSBlbHNlIHsKKwkgICAgaW50IGRy aXZlID0gdG91cHBlcigqcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNwYWNlID0gemRz a3NwYWNlKGRyaXZlIC0gJ0EnICsgMSk7CisgICAgICAgICAgICBpZiAoc3BhY2UgPiAwICYmIHNw YWNlIDwgMTAyNCkKKyAgICAgICAgICAgICAgcHJpbnRmKCIgRHJpdmUgJWM6IHVua25vd24gZnJl ZVxuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHByaW50ZigiIERyaXZlICVj OiAlbGRLIGZyZWVcbiIsIGRyaXZlLHNwYWNlIC8gMTAyNEwpOworCX0KKyNlbHNlCisjaWZkZWYg VU5JWE9ST1NLCisJeCA9IGNtZGlyKCJDb25maXJtIGZvciBjdXJyZW50IGRpc2ssXG5cCisgb3Ig c3BlY2lmeSBhIGRpc2sgZGV2aWNlIG9yIGRpcmVjdG9yeSIsIiIsJnMseHhzdHJpbmcpOworCWlm ICh4ID09IC0zKQorCSAgcyA9ICIiOworCWVsc2UgaWYgKHggPCAwKQorCSAgcmV0dXJuKHgpOwor ICAgICAgICBja3N0cm5jcHkodG1wYnVmLHMsVE1QQlVGU0laKTsKKyAgICAgICAgcyA9IHRtcGJ1 ZjsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwlpZiAobm9wdXNoKSB7CisJ ICAgIHByaW50ZigiP1NvcnJ5LCBTUEFDRSBjb21tYW5kIGRpc2FibGVkXG4iKTsKKwkgICAgcmV0 dXJuKC05KTsKKwl9CisJaWYgKCEqcykgewkJCS8qIEN1cnJlbnQgZGlzayAqLworCSAgICB4c3lz dGVtKFNQQUNNRCk7CisJfSBlbHNlIHsJCQkvKiBTcGVjaWZpZWQgZGlzayAqLworCSAgICBja21h a21zZyhsaW5lLExJTkJVRlNJWixTUEFDTTIsIiAiLHMsTlVMTCk7CisJICAgIHhzeXN0ZW0obGlu ZSk7CisJfQorI2Vsc2UKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwlpZiAo bm9wdXNoKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBTUEFDRSBjb21tYW5kIGRpc2FibGVkXG4i KTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJeHN5c3RlbShTUEFDTUQpOworI2VuZGlmIC8qIFVO SVhPUk9TSyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisJ cmV0dXJuKHN1Y2Nlc3MgPSAxKTsJCS8qIFByZXRlbmQgaXQgd29ya2VkICovCisgICAgfQorI2Vu ZGlmIC8qIE1BQyAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChjeCA9PSBYWFNUQSkgewkJ CS8qIFNUQVRJU1RJQ1MgKi8KKwlpZiAoKHggPSBjbWtleShzdGF0dGFiLDIsIkNhcnJpYWdlIHJl dHVybiwgb3Igb3B0aW9uIiwKKwkJICAgICAgICIvYnJpZWYiLHh4c3RyaW5nKSkgPCAwKQorCSAg cmV0dXJuKHgpOworCWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworCXJldHVybihz dWNjZXNzID0gZG9zdGF0KHgpKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICBp ZiAoY3ggPT0gWFhTVE8gfHwgY3ggPT0gWFhFTkQpIHsJLyogU1RPUCwgRU5ELCBvciBQT1AgKi8K KwlpZiAoKHkgPSBjbW51bSgiZXhpdCBzdGF0dXMgY29kZSIsIjAiLDEwLCZ4LHh4c3RyaW5nKSkg PCAwKQorCSAgcmV0dXJuKHkpOworCWlmICgoeSA9IGNtdHh0KCJNZXNzYWdlIHRvIHByaW50Iiwi Iiwmcyx4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih5KTsKKwlzID0gYnJzdHJpcChzKTsKKwlp ZiAoKnMpIHByaW50ZigiJXNcbiIscyk7CisJaWYgKGN4ID09IFhYU1RPKSB7CisJICAgIGRvc3Rv cCgpOworCX0gZWxzZSB7CisJICAgIGRvZW5kKHgpOworCX0KKwlyZXR1cm4oc3VjY2VzcyA9ICh4 ID09IDApKTsKKyAgICB9CisgICAgaWYgKGN4ID09IFhYU1VTKSB7CQkJLyogU1VTUEVORCAqLwor CWlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHkpOworI2lmZGVmIE5PSkMKKwlwcmludGYo IlNvcnJ5LCB0aGlzIHZlcnNpb24gb2YgS2VybWl0IGNhbm5vdCBiZSBzdXNwZW5kZWRcbiIpOwor I2Vsc2UKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyKSB7CisJICAgIHByaW50ZigiP1NvcnJ5 LCBJS1NEIGNhbiBub3QgYmUgc3VzcGVuZGVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9IGVs c2UKKyNlbmRpZiAvKiBJS1NEICovCisJICBpZiAobm9wdXNoKSB7CisJICAgIHByaW50ZigiP1Nv cnJ5LCBhY2Nlc3MgdG8gc3lzdGVtIGlzIGRpc2FibGVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsK Kwl9CisJc3RwdHJhcCgwKTsKKyNlbmRpZiAvKiBOT0pDICovCisJcmV0dXJuKDApOworICAgIH0K KworICAgIGlmIChjeCA9PSBYWFRBSykgewkJCS8qIFRBS0UgKi8KKwljaGFyICogc2NyaXB0ZW52 ID0gTlVMTDsJCisjaWZkZWYgT1MyCisgICAgICAgIGNoYXIgKiBHZXRBcHBEYXRhKGludCk7CisJ ZXh0ZXJuIGNoYXIgc3RhcnR1cGRpcltdLGV4ZWRpcltdLGluaWRpcltdOworCWNoYXIgKiBrZXlt YXBlbnYgPSBOVUxMOworICAgICAgICBjaGFyICogYXBwZGF0YTAgPSBOVUxMLCAqYXBwZGF0YTEg PSBOVUxMOworCWludCB4eDsKKyNkZWZpbmUgVEFLRVBBVEhMRU4gNDA5NgorI2Vsc2UgLyogT1My ICovCisjZGVmaW5lIFRBS0VQQVRITEVOIDEwMjQKKyNlbmRpZiAvKiBPUzIgKi8KKwljaGFyIHRh a2VwYXRoW1RBS0VQQVRITEVOXTsKKworCWlmICh0bGV2ZWwgPj0gTUFYVEFLRS0xKSB7CisJICAg IHByaW50ZigiP1Rha2UgZmlsZXMgbmVzdGVkIHRvbyBkZWVwbHlcbiIpOworCSAgICByZXR1cm4o LTkpOworCX0KKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorCXNjcmlwdGVudiA9IGdldGVudigiSzk1 U0NSSVBUUyIpOworCWtleW1hcGVudiA9IGdldGVudigiSzk1S0VZTUFQUyIpOworICAgICAgICBt YWtlc3RyKCZhcHBkYXRhMCwoY2hhciAqKUdldEFwcERhdGEoMCkpOworICAgICAgICBtYWtlc3Ry KCZhcHBkYXRhMSwoY2hhciAqKUdldEFwcERhdGEoMSkpOworI2Vsc2UgLyogTlQgKi8KKwlzY3Jp cHRlbnYgPSBnZXRlbnYoIksyU0NSSVBUUyIpOworCWtleW1hcGVudiA9IGdldGVudigiSzJLRVlN QVBTIik7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworCWlmICghc2NyaXB0 ZW52KQkJCS8qIExldCB0aGlzIHdvcmsgZm9yIFVuaXggZXRjIHRvbyAqLworCSAgc2NyaXB0ZW52 ID0gZ2V0ZW52KCJDS19TQ1JJUFRTIik7IC8qIFVzZSB0aGlzIGlmIGRlZmluZWQgKi8KKyNpZm5k ZWYgT1MyCisJaWYgKCFzY3JpcHRlbnYpCQkJLyogT3RoZXJ3aXNlIHVzZSBob21lIGRpcmVjdG9y eSAqLworCSAgc2NyaXB0ZW52ID0gaG9tZXBhdGgoKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwlpZiAo IXNjcmlwdGVudikKKwkgIHNjcmlwdGVudiA9ICIiOworCWNrc3RybmNweSh0YWtlcGF0aCxzY3Jp cHRlbnYsVEFLRVBBVEhMRU4pOworCWRlYnVnKEYxMTAsIlRBS0UgaW5pdGlhbCB0YWtlcGF0aCIs dGFrZXBhdGgsMCk7CisKKyNpZmRlZiBPUzIKKwlpZiAoIWtleW1hcGVudikKKwkgIGtleW1hcGVu diA9IGdldGVudigiQ0tfS0VZTUFQUyIpOworCWlmICgha2V5bWFwZW52KQorCSAga2V5bWFwZW52 ID0gIiI7CisKKwlja3N0cm5jYXQodGFrZXBhdGgsCisJCSAgKHNjcmlwdGVudiAmJiBzY3JpcHRl bnZbc3RybGVuKHNjcmlwdGVudiktMV09PSc7Jyk/IiI6IjsiLAorCQkgIFRBS0VQQVRITEVOCisJ CSAgKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsa2V5bWFwZW52P2tleW1hcGVudjoiIixUQUtFUEFU SExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRoLAorCQkgIChrZXltYXBlbnYgJiYga2V5bWFwZW52 W3N0cmxlbihrZXltYXBlbnYpLTFdPT0nOycpPyIiOiI7IiwKKwkJICBUQUtFUEFUSExFTgorCQkg ICk7CisJY2tzdHJuY2F0KHRha2VwYXRoLHN0YXJ0dXBkaXIsVEFLRVBBVEhMRU4pOworCWNrc3Ry bmNhdCh0YWtlcGF0aCwiOyIsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCxzdGFy dHVwZGlyLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsIlNDUklQVFMvOyIsVEFL RVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCxzdGFydHVwZGlyLFRBS0VQQVRITEVOKTsK Kwlja3N0cm5jYXQodGFrZXBhdGgsIktFWU1BUFMvOyIsVEFLRVBBVEhMRU4pOworCisJY2tzdHJu Y2F0KHRha2VwYXRoLGFwcGRhdGExLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgs Iktlcm1pdCA5NS87IixUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRoLGFwcGRhdGEx LFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsIktlcm1pdCA5NS9TQ1JJUFRTLzsi LFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsYXBwZGF0YTEsVEFLRVBBVEhMRU4p OworCWNrc3RybmNhdCh0YWtlcGF0aCwiS2VybWl0IDk1L0tFWU1BUFMvOyIsVEFLRVBBVEhMRU4p OworCisJY2tzdHJuY2F0KHRha2VwYXRoLGFwcGRhdGEwLFRBS0VQQVRITEVOKTsKKwlja3N0cm5j YXQodGFrZXBhdGgsIktlcm1pdCA5NS87IixUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2Vw YXRoLGFwcGRhdGEwLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsIktlcm1pdCA5 NS9TQ1JJUFRTLzsiLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsYXBwZGF0YTAs VEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCwiS2VybWl0IDk1L0tFWU1BUFMvOyIs VEFLRVBBVEhMRU4pOworCisJY2tzdHJuY2F0KHRha2VwYXRoLGluaWRpcixUQUtFUEFUSExFTik7 CisJY2tzdHJuY2F0KHRha2VwYXRoLCI7IixUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2Vw YXRoLGluaWRpcixUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRoLCJTQ1JJUFRTLzsi LFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsaW5pZGlyLFRBS0VQQVRITEVOKTsK Kwlja3N0cm5jYXQodGFrZXBhdGgsIktFWU1BUFMvOyIsVEFLRVBBVEhMRU4pOworCisJY2tzdHJu Y2F0KHRha2VwYXRoLHpob21lKCksVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCwi OyIsVEFLRVBBVEhMRU4pOworCWNrc3RybmNhdCh0YWtlcGF0aCx6aG9tZSgpLFRBS0VQQVRITEVO KTsKKwlja3N0cm5jYXQodGFrZXBhdGgsIlNDUklQVFMvOyIsVEFLRVBBVEhMRU4pOworCWNrc3Ry bmNhdCh0YWtlcGF0aCx6aG9tZSgpLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgs IktFWU1BUFMvOyIsVEFLRVBBVEhMRU4pOworCisJY2tzdHJuY2F0KHRha2VwYXRoLGV4ZWRpcixU QUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRoLCI7IixUQUtFUEFUSExFTik7CisJY2tz dHJuY2F0KHRha2VwYXRoLGV4ZWRpcixUQUtFUEFUSExFTik7CisJY2tzdHJuY2F0KHRha2VwYXRo LCJTQ1JJUFRTLzsiLFRBS0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsZXhlZGlyLFRB S0VQQVRITEVOKTsKKwlja3N0cm5jYXQodGFrZXBhdGgsIktFWU1BUFMvOyIsVEFLRVBBVEhMRU4p OworI2VuZGlmIC8qIE9TMiAqLworCWRlYnVnKEYxMTAsIlRBS0UgZmluYWwgdGFrZXBhdGgiLHRh a2VwYXRoLDApOworCisJaWYgKCh5ID0gY21pZmlwKCJDb21tYW5kcyBmcm9tIGZpbGUiLAorCQkJ IiIsJnMsJngsMCx0YWtlcGF0aCx4eHN0cmluZykpIDwgMCkgeworCSAgICBpZiAoeSA9PSAtMykg eworCQlwcmludGYoIj9BIGZpbGUgbmFtZSBpcyByZXF1aXJlZFxuIik7CisJCXJldHVybigtOSk7 CisJICAgIH0gZWxzZQorCSAgICAgIHJldHVybih5KTsKKwl9CisJaWYgKHggIT0gMCkgeworCSAg ICBwcmludGYoIj9XaWxkY2FyZHMgbm90IGFsbG93ZWQgaW4gY29tbWFuZCBmaWxlIG5hbWVcbiIp OworCSAgICByZXR1cm4oLTkpOworCX0KKwlja3N0cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisJ ZGVidWcoRjExMCwiVEFLRSBmaWxlIixzLDApOworCWlmIChpc2RpcihzKSkgeworCSAgICBwcmlu dGYoIj9DYW4ndCBleGVjdXRlIGEgZGlyZWN0b3J5IC0gXCIlc1wiXG4iLCBzKTsKKwkgICAgcmV0 dXJuKC05KTsKKwl9CisjaWZuZGVmIE5PVEFLRUFSR1MKKwl7CisJICAgIGNoYXIgKiBwOworCSAg ICB4ID0gc3RybGVuKGxpbmUpOworCSAgICBkZWJ1ZyhGMTExLCJUQUtFIGFyZ3MiLGxpbmUseCk7 CisJICAgIHAgPSBsaW5lICsgeCArIDE7CisJICAgIGlmICgoeSA9IGNtdHh0KCJPcHRpb25hbCBh cmd1bWVudHMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgICAgIHJldHVybih5KTsKKwkgICAg aWYgKCpzKSB7CQkJLyogQXJncyBnaXZlbj8gKi8KKwkJY2tzdHJuY3B5KHAscyxMSU5CVUZTSVot eC0xKTsKKyNpZmRlZiBaRk5RRlAKKwkJemZucWZwKGxpbmUsVE1QQlVGU0laLHRtcGJ1Zik7CisJ CXMgPSB0bXBidWY7CisjZWxzZQorCQlzID0gbGluZTsKKyNlbmRpZiAvKiBaRk5RRlAgKi8KKwkJ ZGVidWcoRjExMCwiVEFLRSBmaWxlbmFtZSIscywwKTsKKwkJeCA9IHN0cmxlbihzKTsKKwkJZGVi dWcoRjEwMSwiVEFLRSBuZXcgbGVuIixzLHgpOworCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgVGhp cyB3YXMgYWRkZWQgaW4gQy1LZXJtaXQgNy4wIHRvIGFsbG93IGFyZ3MgdG8gYmUgcGFzc2VkIGZy b20gdGhlIFRBS0UKKyAgY29tbWFuZCB0byB0aGUgY29tbWFuZCBmaWxlLiAgQnV0IGl0IG92ZXJ3 cml0ZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQgdmVjdG9yLAorICB3aGljaCBpcyBhdCBiZXN0IHN1 cnByaXNpbmcsIGFuZCBhdCB3b3JzdCB1bnNhZmUuCisqLworCQlhZGRtYWMoIiUwIixzKTsJCS8q IERlZmluZSAlMCA9IG5hbWUgb2YgZmlsZSAqLworCQl2YXJuYW1bMF0gPSAnJSc7CisJCXZhcm5h bVsyXSA9ICdcMCc7CisJCWRlYnVnKEYxMTAsInRha2UgYXJnIDAiLHMsMCk7CisJCWRlYnVnKEYx MTAsInRha2UgYXJncyIscCwwKTsKKwkJZm9yICh5ID0gMTsgeSA8IDEwOyB5KyspIHsgLyogQ2xl YXIgY3VycmVudCBhcmdzICUxLi4lOSAqLworCQkgICAgdmFybmFtWzFdID0gKGNoYXIpICh5ICsg JzAnKTsKKwkJICAgIGRlbG1hYyh2YXJuYW0sMCk7CisJCX0KKwkJeHdvcmRzKHAsTUFYQVJHTElT VCxOVUxMLDApOyAvKiBBc3NpZ24gbmV3IGFyZ3MgKi8KKwkJZGVidWcoRjExMCwidGFrZSBhcmdz IixwLDApOworI2Vsc2UKKy8qCisgIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gOC4wLiAgSWYgdGhl IFRBS0UgY29tbWFuZCBpbmNsdWRlcyBhcmd1bWVudHMsIHdlCisgIGluc2VydCBhbiBpbnRlcm1l ZGlhdGUgdGVtcG9yYXJ5IG1hY3JvIGJldHdlZW4gdGhlIGN1cnJlbnQgbGV2ZWw7IHdlIHBhc3MK KyAgdGhlIGFyZ3VtZW50cyB0byB0aGUgbWFjcm8gYW5kIHRoZW4gdGhlIG1hY3JvIFRBS0VzIHRo ZSBjb21tYW5kIGZpbGUuCisgIElmIHRoZSB1c2VyIEN0cmwtQydzIG91dCBvZiB0aGUgVEFLRSBm aWxlLCBzb21lIHRlbXBvcmFyeSBtYWNybyBkZWZpbml0aW9ucworICBhbmQgb3RoZXIgc21hbGwg bWFsbG9jJ2QgYml0cyBtaWdodCBiZSBsZWZ0IGJlaGluZC4KKyovCisJCXsKKwkJICAgIGNoYXIg KiBxID0gTlVMTDsKKwkJICAgIGNoYXIgKiByID0gTlVMTDsKKwkJICAgIGludCBrLCBtOworCQkg ICAgbSA9IG1hY2x2bDsKKwkJICAgIHEgPSAoY2hhciAqKW1hbGxvYyh4KzI0KTsKKwkJICAgIGlm IChxKSB7CisJCQlyID0gKGNoYXIgKiltYWxsb2MoeCsyNCk7CisJCQlpZiAocikgeworCQkJICAg IHNwcmludGYocSwiX2ZpbGVbJXNdKCVkKSIscyxjbWRsdmwpOyAvKiBzYWZlICovCisJCQkgICAg c3ByaW50ZihyLCJ0YWtlICVzIixzKTsgLyogc2FmZSAqLworCQkJICAgIGsgPSBhZGRtYWMocSxy KTsKKwkJCSAgICBpZiAoayA+IC0xKSB7CisJCQkJZG9kbyhrLHAsMCk7CisJCQkJd2hpbGUgKG1h Y2x2bCA+IG0pIHsKKwkJCQkgICAgc3N0YXRlID0gKENIQVIpIHBhcnNlcigxKTsKKwkJCQkgICAg aWYgKHNzdGF0ZSkgcHJvdG8oKTsKKwkJCQl9CisJCQkgICAgfQorCQkJICAgIGsgPSBkZWxtYWMo cSwwKTsKKwkJCSAgICBmcmVlKHEpOworCQkJICAgIGZyZWUocik7CisJCQkgICAgcmV0dXJuKHN1 Y2Nlc3MpOworCQkJfQorCQkgICAgfQorCQl9CisJCXJldHVybihzdWNjZXNzID0gMCk7CisjZW5k aWYgLyogQ09NTUVOVCAqLworCSAgICB9CisJfQorI2Vsc2UKKwlpZiAoKHkgPSBjbWNmbSgpKSA8 IDApIHJldHVybih5KTsKKyNlbmRpZiAvKiBOT1RBS0VBUkdTICovCisJcmV0dXJuKHN1Y2Nlc3Mg PSBkb3Rha2UobGluZSkpOworICAgIH0KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisg ICAgaWYgKGN4ID09IFhYVklFVykgewkJCS8qIFZJRVcgT25seSBUZXJtaW5hbCBtb2RlICovCisJ dmlld29ubHkgPSBUUlVFOworCXN1Y2Nlc3MgPSBkb2NvbmVjdCgwLCAwKTsKKwl2aWV3b25seSA9 IEZBTFNFOworCXJldHVybiBzdWNjZXNzOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lm ZGVmIE5FVENPTk4KKyAgICBpZiAoY3ggPT0gWFhURUwgfHwgY3ggPT0gWFhJS1NEKSB7CS8qIFRF TE5FVCAqLworCWludCB4LHo7CisjaWZkZWYgT1MyCisgICAgaWYgKCF0Y3BfYXZhaWwpIHsKKyAg ICAgICAgcHJpbnRmKCI/U29ycnksIGVpdGhlciBUQ1AvSVAgaXMgbm90IGF2YWlsYWJsZSBvbiB0 aGlzIHN5c3RlbSBvclxuXAorbmVjZXNzYXJ5IERMTHMgZGlkIG5vdCBsb2FkLiAgVXNlIFNIT1cg TkVUV09SSyB0byBjaGVjayBuZXR3b3JrIHN0YXR1cy5cbiIpOworICAgICAgICBzdWNjZXNzID0g MDsKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgIHsKKwkgIHggPSBuZXR0eXBlOwkJCS8qIFNhdmUgbmV0IHR5cGUgaW4gY2FzZSBvZiBmYWls dXJlICovCisJICB6ID0gdHRucHJvdG87CQkJLyogU2F2ZSBwcm90b2NvbCBpbiBjYXNlIG9mIGZh aWx1cmUgKi8KKwkgIG5ldHR5cGUgPSBORVRfVENQQjsKKwkgIHR0bnByb3RvID0gKGN4ID09IFhY VEVMKSA/IE5QX1RFTE5FVCA6IE5QX0tFUk1JVDsKKwkgIGlmICgoeSA9IHNldGxpbihYWUhPU1Qs MCwxKSkgPD0gMCkgeworICAgICAgICAgICAgICBuZXR0eXBlID0geDsJCS8qIEZhaWxlZCwgcmVz dG9yZSBuZXQgdHlwZS4gKi8KKyAgICAgICAgICAgICAgdHRucHJvdG8gPSB6OwkJLyogYW5kIHBy b3RvY29sICovCisgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwOworCSAgfQorCSAgZGlkc2V0bGlu Kys7CisgICAgICAgIH0KKwlyZXR1cm4oeSk7CisgICAgfQorCisjaWZuZGVmIFBUWU9SUElQRQor I2lmZGVmIE5FVENNRAorI2RlZmluZSBQVFlPUlBJUEUKKyNlbHNlCisjaWZkZWYgTkVUUFRZCisj ZGVmaW5lIFBUWU9SUElQRQorI2VuZGlmIC8qIE5FVFBUWSAqLworI2VuZGlmIC8qIE5FVENNRCAq LworI2VuZGlmIC8qIFBUWU9SUElQRSAqLworCisjaWZkZWYgUFRZT1JQSVBFCisgICAgaWYgKGN4 ID09IFhYUElQRSB8fCBjeCA9PSBYWFBUWSkgewkvKiBQSVBFIG9yIFBUWSAqLworCWludCB4Owor CWV4dGVybiBpbnQgbmV0c2F2ZTsKKwl4ID0gbmV0dHlwZTsJCQkvKiBTYXZlIG5ldCB0eXBlIGlu IGNhc2Ugb2YgZmFpbHVyZSAqLworCW5ldHR5cGUgPSAoY3ggPT0gWFhQSVBFKSA/IE5FVF9DTUQg OiBORVRfUFRZOworCWlmICgoeSA9IHNldGxpbihYWUhPU1QsMCwxKSkgPCAwKSB7CisJICAgIG5l dHR5cGUgPSB4OwkJLyogRmFpbGVkLCByZXN0b3JlIG5ldCB0eXBlLiAqLworCSAgICB0dG5wcm90 byA9IHo7CQkvKiBhbmQgcHJvdG9jb2wgKi8KKwkgICAgc3VjY2VzcyA9IDA7CisJfQorCWRpZHNl dGxpbisrOworCW5ldHNhdmUgPSB4OworCXJldHVybih5KTsKKyAgICB9CisjZW5kaWYgLyogUFRZ T1JQSVBFICovCisKKyNpZmRlZiBBTllTU0gKKyAgICBpZiAoY3ggPT0gWFhTU0gpIHsJCQkvKiBT U0ggKFNlY3VyZSBTaGVsbCkgKi8KKwlleHRlcm4gaW50IG5ldHNhdmU7CisjaWZkZWYgU1NIQlVJ TFRJTgorCWludCBrLCB4LCBoYXZlaG9zdCA9IDAsIHRyaXBzID0gMDsKKyAgICAgICAgaW50ICAg IHRtcHZlciA9IC0xLCB0bXB4ZncgPSAtMTsKKyNpZm5kZWYgU1NIVEVTVAorICAgICAgICBleHRl cm4gaW50IHNsX3NzaF94ZncsIHNsX3NzaF94Zndfc2F2ZWQ7CisgICAgICAgIGV4dGVybiBpbnQg c2xfc3NoX3Zlciwgc2xfc3NoX3Zlcl9zYXZlZDsKKyNlbmRpZiAvKiBTU0hURVNUICovCisgICAg ICAgIGV4dGVybiBpbnQgbWRtdHlwLCBtZG1zYXYsIGN4dHlwZSwgc2xfdWlkX3NhdmVkOworICAg ICAgICBleHRlcm4gY2hhciAqIHNsbXNnOworCWV4dGVybiBjaGFyIHVpZGJ1ZltdLCBzbF91aWRi dWZbXTsKKyAgICAgICAgZXh0ZXJuIGNoYXIgcHdidWZbXSwgKiBnX3Bzd2Q7CisgICAgICAgIGV4 dGVybiBpbnQgcHdmbGcsIHB3Y3J5cHQsIGdfcGZsZywgZ19wY3B0LCBub2xvY2FsOworCXN0cnVj dCBGREIgc3csIGt3LCBmbDsKKworICAgICAgICBpZiAoc3NoX3RtcHN0cikKKwkgIG1lbXNldChz c2hfdG1wc3RyLDAsc3RybGVuKHNzaF90bXBzdHIpKTsKKyAgICAgICAgbWFrZXN0cigmc3NoX3Rt cHN0cixOVUxMKTsKKyAgICAgICAgbWFrZXN0cigmc3NoX3RtcHVpZCxOVUxMKTsKKyAgICAgICAg bWFrZXN0cigmc3NoX3RtcGNtZCxOVUxMKTsKKyAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBvcnQs TlVMTCk7CisKKwljbWZkYmkoJmt3LAkJCS8qIDFzdCBGREIgLSBjb21tYW5kcyAqLworCSAgICAg ICBfQ01LRVksCQkJLyogZmNvZGUgKi8KKwkgICAgICAgImhvc3QgWyBwb3J0IF0sXG4gb3IgYWN0 aW9uIiwJLyogaGxwbXNnICovCisJICAgICAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAg IiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAgbnNzaGNtZCwJCQkvKiBhZGR0 bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKwkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1l cmljIGRhdGEgMjogMCA9IGtleXdvcmQgKi8KKwkgICAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNz aW5nIGZ1bmN0aW9uICovCisJICAgICAgIHNzaGt3dGFiLAkJLyogS2V5d29yZCB0YWJsZSAqLwor CSAgICAgICAmZmwJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisJICAgICAgICk7CisJY21m ZGJpKCZmbCwJCQkvKiBIb3N0ICovCisJICAgICAgIF9DTUZMRCwJCQkvKiBmY29kZSAqLworCSAg ICAgICAiIiwJCQkvKiBobHBtc2cgKi8KKwkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLworCSAg ICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRs IG51bWVyaWMgZGF0YSAxICovCisJICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIg Ki8KKwkgICAgICAgeHhzdHJpbmcsCisJICAgICAgIE5VTEwsCisJICAgICAgIE5VTEwKKwkgICAg ICAgKTsKKworCXggPSBjbWZkYigma3cpOworCWlmICh4ID09IC0zKSB7CisJICAgIHByaW50Zigi P3NzaCB3aGF0P1xuIik7CisJICAgIHJldHVybigtOSk7CisJfQorCWlmICh4IDwgMCkKKwkgIHJl dHVybih4KTsKKwloYXZlaG9zdCA9IDA7CisJaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUZMRCkg eworCSAgICBoYXZlaG9zdCA9IDE7CisJICAgIGNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1 bHQsTElOQlVGU0laKTsgLyogSG9zdG5hbWUgKi8KKwkgICAgY21yZXN1bHQubnJlc3VsdCA9IFhT U0hfT1BOOworCX0KKwlzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogU1NIIGtleXdvcmQg Ki8KKwkgIGNhc2UgWFNTSF9PUE46CQkvKiBTU0ggT1BFTiAqLworCSAgICBpZiAoIWhhdmVob3N0 KSB7CisJCWlmICgoeCA9IGNtZmxkKCJIb3N0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICBy ZXR1cm4oeCk7CisJCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKwkgICAgfQorCSAgICAv KiBQYXJzZSBbIHBvcnQgXSBbIHN3aXRjaGVzIF0gKi8KKwkgICAgY21mZGJpKCZrdywJCQkvKiBT d2l0Y2hlcyAqLworCQkgICBfQ01LRVksCisJCSAgICJQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5h bWUsXG5vciBzd2l0Y2giLAorCQkgICAiIiwKKwkJICAgIiIsCisJCSAgIG5zc2hvcG5zdywKKwkJ ICAgNCwKKwkJICAgeHhzdHJpbmcsCisJCSAgIHNzaG9wbnN3LAorCQkgICAmZmwKKwkJICAgKTsK KwkgICAgY21mZGJpKCZmbCwJCQkvKiBQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUgKi8KKwkJ ICAgX0NNRkxELAorCQkgICAiIiwKKwkJICAgIiIsCisJCSAgICIiLAorCQkgICAwLAorCQkgICAw LAorCQkgICB4eHN0cmluZywKKwkJICAgTlVMTCwKKwkJICAgTlVMTAorCQkgICApOworCSAgICB0 cmlwcyA9IDA7CQkJLyogRXhwbGFpbmVkIGJlbG93ICovCisJICAgIHdoaWxlICgxKSB7CQkJLyog UGFyc2UgcG9ydCBhbmQgc3dpdGNoZXMgKi8KKwkJeCA9IGNtZmRiKCZrdyk7CQkvKiBHZXQgYSBm aWVsZCAqLworCQlpZiAoeCA9PSAtMykJCS8qIFVzZXIgdHlwZWQgQ1Igc28gcXVpdCBmcm9tIGxv b3AgKi8KKwkJICBicmVhazsKKwkJaWYgKHggPCAwKQkJLyogT3RoZXIgcGFyc2UgZXJyb3IsIHBh c3MgaXQgYmFjayAqLworCQkgIHJldHVybih4KTsKKwkJc3dpdGNoIChjbXJlc3VsdC5mY29kZSkg eyAvKiBGaWVsZCBvciBLZXl3b3JkPyAqLworICAgICAgICAgICAgICAgICAgY2FzZSBfQ01GTEQ6 CQkgIC8qIEZpZWxkICovCisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0 LGNtcmVzdWx0LnNyZXN1bHQpOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBfQ01LRVk6CQkvKiBL ZXl3b3JkICovCisJCSAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogV2hpY2ggb25l PyAqLworCQkgICAgICBjYXNlIFNTSFNXX1VTUjoJICAgICAgICAvKiAvVVNFUjogKi8KKwkJCWlm ICghY21nYnJrKCkpIHsKKwkJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBh cmd1bWVudFxuIik7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJCX0KKwkJCWlmICgoeSA9IGNtZmxk KCJVc2VybmFtZSIsIiIsJnMseHhzdHJpbmcpKSA8IDApCisJCQkgIHJldHVybih5KTsKKwkJCXMg PSBicnN0cmlwKHMpOworCQkJbWFrZXN0cigmc3NoX3RtcHVpZCxzKTsKKwkJCWJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgU1NIU1dfUFdEOgorCQkJaWYgKCFjbWdicmsoKSkgewor CQkJICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKwkJ CSAgICByZXR1cm4oLTkpOworCQkJfQorCQkJZGVib2sgPSAwOworCQkJaWYgKCh4ID0gY21mbGQo IlBhc3N3b3JkIiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworCQkJICAgIGlmICh4ID09IC0zKSB7 CisJCQkJbWFrZXN0cigmc3NoX3RtcHN0ciwiIik7CisJCQkgICAgfSBlbHNlIHsKKwkJCQlyZXR1 cm4oeCk7CisJCQkgICAgfQorCQkJfSBlbHNlIHsKKwkJCSAgICBzID0gYnJzdHJpcChzKTsKKwkJ CSAgICBpZiAoKHggPSAoaW50KXN0cmxlbihzKSkgPiBQV0JVRkwpIHsKKwkJCQltYWtlc3RyKCZz bG1zZywiSW50ZXJuYWwgZXJyb3IiKTsKKwkJCQlwcmludGYoIj9Tb3JyeSwgdG9vIGxvbmcgLSBt YXggPSAlZFxuIixQV0JVRkwpOworCQkJCXJldHVybigtOSk7CisJCQkgICAgfQorCQkJICAgIG1h a2VzdHIoJnNzaF90bXBzdHIscyk7CisJCQl9CisJCQlicmVhazsKKworCQkgICAgICBjYXNlIFNT SFNXX1ZFUjoKKwkJCWlmICgoeCA9IGNtbnVtKCJOdW1iZXIiLCIiLDEwLCZ6LHh4c3RyaW5nKSkg PCAwKQorCQkJICByZXR1cm4oeCk7CisJCQlpZiAoeiA8IDEgfHwgeiA+IDIpIHsKKwkJCSAgICBw cmludGYoIj9PdXQgb2YgcmFuZ2U6ICVkXG4iLHopOworCQkJICAgIHJldHVybigtOSk7CisJCQl9 CisgICAgICAgICAgICAgICAgICAgICAgICB0bXB2ZXIgPSB6OworCQkJYnJlYWs7CisJCSAgICAg IGNhc2UgU1NIU1dfQ01EOgorCQkgICAgICBjYXNlIFNTSFNXX1NVQjoKKwkJCWlmICgoeCA9IGNt ZmxkKCJUZXh0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJCSAgcmV0dXJuKHgpOworICAgICAg ICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcGNtZCxzKTsKKwkJCXNzaF9jYXMgPSAo Y21yZXN1bHQubnJlc3VsdCA9PSBTU0hTV19TVUIpOworCQkJYnJlYWs7CisJCSAgICAgIGNhc2Ug U1NIU1dfWDExOgorCQkJaWYgKCh4ID0gY21rZXkob25vZmYsMiwiIiwib24iLHh4c3RyaW5nKSkg PCAwKQorCQkJICByZXR1cm4oeCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXB4ZncgPSB4 OworCQkJYnJlYWs7CisJCSAgICAgIGRlZmF1bHQ6CisJCSAgICAgICAgcmV0dXJuKC0yKTsKKwkJ ICAgIH0KKwkJfQorCQlpZiAodHJpcHMrKyA9PSAwKSB7CS8qIEFmdGVyIGZpcnN0IHRpbWUgdGhy b3VnaCAqLworCQkgICAgY21mZGJpKCZrdywJCS8qIG9ubHkgcGFyc2Ugc3dpdGNoZXMsIG5vdCBw b3J0LiAqLworCQkJICAgX0NNS0VZLAorCQkJICAgIlN3aXRjaCIsCisJCQkgICAiIiwKKwkJCSAg ICIiLAorCQkJICAgbnNzaG9wbnN3LAorCQkJICAgNCwKKwkJCSAgIHh4c3RyaW5nLAorCQkJICAg c3Nob3Buc3csCisJCQkgICBOVUxMCisJCQkgICApOworCQl9CisJICAgIH0KKwkgICAgaWYgKCh4 ID0gY21jZm0oKSkgPCAwKQkvKiBHZXQgY29uZmlybWF0aW9uICovCisJICAgICAgcmV0dXJuKHgp OworICAgICAgICAgICAgaWYgKGNsc2tjb25ueCgxKSA8IDApIHsJLyogQ2xvc2UgY3VycmVudCBL ZXJtaXQgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgICBpZiAoIHNzaF90bXBzdHIgKSB7Cisg ICAgICAgICAgICAgICAgICBtZW1zZXQoc3NoX3RtcHN0ciwwLHN0cmxlbihzc2hfdG1wc3RyKSk7 CisgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLE5VTEwpOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICB9 CisJICAgIG1ha2VzdHIoJnNzaF9oc3QsbGluZSk7CS8qIFN0YXNoIGV2ZXJ5dGhpbmcgKi8KKwkg ICAgaWYgKHNzaF90bXB1aWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNsX3VpZF9zYXZlZCkg eworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc2xfdWlkYnVmLHVpZGJ1ZixVSURCVUZM RU4pOworICAgICAgICAgICAgICAgICAgICBzbF91aWRfc2F2ZWQgPSAxOworICAgICAgICAgICAg ICAgIH0KKwkJY2tzdHJuY3B5KHVpZGJ1Zixzc2hfdG1wdWlkLFVJREJVRkxFTik7CisJCW1ha2Vz dHIoJnNzaF90bXB1aWQsTlVMTCk7CisJICAgIH0KKyAgICAgICAgICAgIGlmIChzc2hfdG1wcG9y dCkgeworICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9wcnQsc3NoX3RtcHBvcnQpOworICAg ICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0LE5VTEwpOworICAgICAgICAgICAgfSBl bHNlCisgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxOVUxMKTsKKworICAgICAgICAg ICAgaWYgKHNzaF90bXBjbWQpIHsKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfY21kLGJy c3RyaXAoc3NoX3RtcGNtZCkpOworICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBjbWQs TlVMTCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hf Y21kLE5VTEwpOworCisgICAgICAgICAgICBpZiAodG1wdmVyID4gLTEpIHsKKyNpZm5kZWYgU1NI VEVTVAorICAgICAgICAgICAgICAgIGlmICghc2xfc3NoX3Zlcl9zYXZlZCkgeworICAgICAgICAg ICAgICAgICAgICBzbF9zc2hfdmVyID0gc3NoX3ZlcjsKKyAgICAgICAgICAgICAgICAgICAgc2xf c3NoX3Zlcl9zYXZlZCA9IDE7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNTSFRFU1Qg Ki8KKyAgICAgICAgICAgICAgICBzc2hfdmVyID0gdG1wdmVyOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKHRtcHhmdyA+IC0xKSB7CisjaWZuZGVmIFNTSFRFU1QKKyAgICAgICAgICAg ICAgICBpZiAoIXNsX3NzaF94Zndfc2F2ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgc2xfc3No X3hmdyA9IHNzaF94Znc7CisgICAgICAgICAgICAgICAgICAgIHNsX3NzaF94Zndfc2F2ZWQgPSAx OworICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBTU0hURVNUICovCisgICAgICAgICAgICAg ICAgc3NoX3hmdyA9IHRtcHhmdzsKKyAgICAgICAgICAgIH0KKwkgICAgaWYgKHNzaF90bXBzdHIp IHsKKwkJaWYgKHNzaF90bXBzdHJbMF0pIHsKKwkJICAgIGNrc3RybmNweShwd2J1Zixzc2hfdG1w c3RyLFBXQlVGTCsxKTsKKwkJICAgIHB3ZmxnID0gMTsKKwkJICAgIHB3Y3J5cHQgPSAwOworCQl9 IGVsc2UKKwkJICBwd2ZsZyA9IDA7CisJCW1ha2VzdHIoJnNzaF90bXBzdHIsTlVMTCk7CisJICAg IH0KKwkgICAgbmV0dHlwZSA9IE5FVF9TU0g7CisJICAgIGlmIChtZG1zYXYgPCAwKQorCSAgICAg IG1kbXNhdiA9IG1kbXR5cDsKKwkgICAgbWRtdHlwID0gLW5ldHR5cGU7CisJICAgIHggPSAxOwor CisjaWZuZGVmIE5PU1BMCisgICAgICAgICAgICBtYWtlc3RyKCZnX3Bzd2QscHdidWYpOyAgICAg ICAgICAgICAvKiBTYXZlIGdsb2JhbCBwd2J1ZiAqLworICAgICAgICAgICAgZ19wZmxnID0gcHdm bGc7ICAgICAgICAgICAgICAgICAgICAgLyogYW5kIGZsYWcgKi8KKyAgICAgICAgICAgIGdfcGNw dCA9IHB3Y3J5cHQ7CisjZW5kaWYgLyogTk9TUEwgKi8KKworCSAgICAvKiBMaW5lIHBhcmFtZXRl ciB0byB0dG9wZW4oKSBpcyBpZ25vcmVkICovCisJICAgIGRlYnVnKEYxMTAsIlNTSCBsaW5lIixs aW5lLDApOworCSAgICBrID0gdHRvcGVuKGxpbmUsJngsbWRtdHlwLCAwKTsKKwkgICAgaWYgKGsg PCAwKSB7CisJCXByaW50ZigiP1VuYWJsZSB0byBjb25uZWN0IHRvICVzXG4iLHNzaF9oc3QpOwor CQltZG10eXAgPSBtZG1zYXY7CisgICAgICAgICAgICAgICAgc2xyZXN0b3IoKTsKKwkJcmV0dXJu KHN1Y2Nlc3MgPSAwKTsKKwkgICAgfQorCSAgICBkdXBsZXggPSAwOyAgICAgICAgICAgICAvKiBS ZW1vdGUgZWNobyAqLworCSAgICBja3N0cm5jcHkodHRuYW1lLGxpbmUsVFROQU1MRU4pOyAvKiBS ZWNvcmQgdGhlIGNvbW1hbmQgKi8KKwkgICAgZGVidWcoRjExMCwic3NoIHR0bmFtZSIsdHRuYW1l LDApOworCSAgICBtYWtlc3RyKCZzbG1zZyxOVUxMKTsJLyogTm8gU0VUIExJTkUgZXJyb3IgbWVz c2FnZSAqLworCSAgICBjeHR5cGUgPSBDWFRfU1NIOworI2lmbmRlZiBOT0RJQUwKKwkgICAgZGlh bHN0YSA9IERJQV9VTks7CisjZW5kaWYgLyogTk9ESUFMICovCisJICAgIHN1Y2Nlc3MgPSAxOwkJ LyogU0VUIExJTkUgc3VjY2VlZGVkICovCisJICAgIG5ldHdvcmsgPSAxOwkJLyogTmV0d29yayBj b25uZWN0aW9uIChub3Qgc2VyaWFsKSAqLworCSAgICBsb2NhbCA9IDE7CQkJLyogTG9jYWwgbW9k ZSAobm90IHJlbW90ZSkgKi8KKwkgICAgaWYgKChyZWxpYWJsZSAhPSBTRVRfT0ZGIHx8ICFzZXRy ZWxpYWJsZSkpCisJICAgICAgcmVsaWFibGUgPSBTRVRfT047CS8qIFRyYW5zcG9ydCBpcyByZWxp YWJsZSBlbmQgdG8gZW5kICovCisjaWZkZWYgT1MyCisgICAgICAgICAgICBEaWFsZXJTZW5kKE9Q VF9LRVJNSVRfQ09OTkVDVCwgMCk7CisjZW5kaWYgLyogT1MyICovCisJICAgIHNldGZsb3coKTsJ CQkvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sICovCisKKwkgICAgaGF2ZWxpbmUgPSAx OworI2lmZGVmIENLTE9HRElBTAorI2lmZGVmIE5FVENPTk4KKwkgICAgZG9sb2duZXQoKTsKKyNl bmRpZiAvKiBORVRDT05OICovCisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyNpZm5kZWYgTk9T UEwKKwkgICAgaWYgKGxvY2FsKSB7CisJCWlmIChubWFjKSB7CQkvKiBBbnkgbWFjcm9zIGRlZmlu ZWQ/ICovCisJCSAgICBpbnQgazsJCS8qIFllcyAqLworCQkgICAgayA9IG1sb29rKG1hY3RhYiwi b25fb3BlbiIsbm1hYyk7IC8qIExvb2sgdGhpcyB1cCAqLworCQkgICAgaWYgKGsgPj0gMCkgewkg ICAgICAgICAgICAgIC8qIElmIGZvdW5kLCAqLworCQkJaWYgKGRvZG8oayxzc2hfaHN0LDApID4g LTEpICAgLyogc2V0IGl0IHVwLCAqLworCQkJICBwYXJzZXIoMSk7CQkgICAgICAvKiBhbmQgZXhl Y3V0ZSBpdCAqLworCQkgICAgfQorCQl9CisJICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworI2lm ZGVmIExPQ1VTCQkKKwkgICAgaWYgKGF1dG9sb2N1cykKKwkJc2V0bG9jdXMoMSwxKTsKKyNlbmRp ZiAvKiBMT0NVUyAqLworCisJLyogQ29tbWFuZCB3YXMgY29uZmlybWVkIHNvIHdlIGNhbiBwcmUt cG9wIGNvbW1hbmQgbGV2ZWwuICovCisJLyogVGhpcyBpcyBzbyBDT05ORUNUIG1vZHVsZSB3b24n dCB0aGluayB3ZSdyZSBleGVjdXRpbmcgYSAqLworCS8qIHNjcmlwdCBpZiBDT05ORUNUIHdhcyB0 aGUgZmluYWwgY29tbWFuZCBpbiB0aGUgc2NyaXB0LiAqLworCSAgICBpZiAoY21kbHZsID4gMCkK KwkgICAgICBwcmVwb3AoKTsKKwkgICAgc3VjY2VzcyA9IGRvY29uZWN0KDAsY21kbHZsID09IDAg PyAxIDogMCk7CisJICAgIGlmICh0dGNoaygpIDwgMCkKKwkgICAgICBkb2xvZ2VuZCgpOworCSAg ICByZXR1cm4oc3VjY2Vzcyk7CisKKwkgIGNhc2UgWFNTSF9DTFI6CisJICAgIGlmICgoeSA9IGNt a2V5KHNzaGNscixuc3NoY2xyLCIiLCIiLCB4eHN0cmluZykpIDwgMCkgeworCSAgICAgICAgaWYg KHkgPT0gLTMpIHsKKwkJICAgIHByaW50ZigiP2NsZWFyIHdoYXQ/XG4iKTsKKwkJICAgIHJldHVy bigtOSk7CisJCX0KKwkgICAgICAgIHJldHVybih5KTsKKwkgICAgfQorCSAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApCisJICAgICAgcmV0dXJuKHgpOworCSAgICBzd2l0Y2ggKHkpIHsKKwkgICAg ICBjYXNlIFNTSENfTFBGOgorICAgICAgICAgICAgICAgIHNzaF9wZl9sY2xfbiA9IDA7CisJCWJy ZWFrOworCSAgICAgIGNhc2UgU1NIQ19SUEY6CisJCXNzaF9wZl9ybXRfbiA9IDA7CisJCWJyZWFr OworCSAgICAgIGRlZmF1bHQ6CisJCXJldHVybigtMik7CisJICAgIH0KKyAgICAgICAgICAgIHJl dHVybihzdWNjZXNzID0gMSk7CS8qIG9yIHdoYXRldmVyICovCisKKwkgIGNhc2UgWFNTSF9BR1Q6 IHsJCS8qIFNTSCBBR0VOVCAqLworCSAgICAgIGludCBkb2VhY2ggPSAwOworCSAgICAgIGlmICgo eSA9IGNta2V5KHNzaGFnZW50LG5zc2hhZ2VudCwiIiwiIix4eHN0cmluZykpIDwgMCkKKwkJcmV0 dXJuKHkpOworCSAgICAgIHN3aXRjaCAoeSkgeworCQljYXNlIFNTSEFfQUREOgkJLyogU1NIIEFH RU5UIEFERCAuLi4gKi8KKwkJICBpZiAoKHggPSBjbWlmaSgiSWRlbnRpdHkgZmlsZSIsIiIsJnMs JnkseHhzdHJpbmcpKSA8IDApIHsKKyNpZm5kZWYgU1NIVEVTVAorCQkgICAgICBpZiAoeCA9PSAt MykJLyogTm8gbmFtZSBnaXZlbiAqLworCQkJZG9lYWNoID0gMTsJLyogc28gZG8gdGhlbSBhbGwg Ki8KKwkJICAgICAgZWxzZQorI2VuZGlmIC8qIFNTSFRFU1QgKi8KKwkJCXJldHVybih4KTsKKwkJ ICB9CisJCSAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworCQkgIGlmICgoeCA9IGNtY2Zt KCkpIDwgMCkKKwkJICAgIHJldHVybih4KTsKKyNpZmRlZiBTU0hURVNUCisJCSAgeCA9IDA7Cisj ZWxzZQorCQkgIGlmIChkb2VhY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgaTsKKyAg ICAgICAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgc3NoX2lkZl9uOyBpKyspCisJCQl4ICs9IHNzaF9hZ2VudF9hZGRfZmlsZShzc2hf aWRmW2ldKTsKKwkJICB9IGVsc2UKKwkJICAgIHggPSBzc2hfYWdlbnRfYWRkX2ZpbGUobGluZSk7 CisjZW5kaWYgLyogU1NIVEVTVCAqLworCQkgIHJldHVybihzdWNjZXNzID0gKHggPT0gMCkpOwor CisJCWNhc2UgU1NIQV9ERUw6IHsJLyogU1NIIEFHRU5UIERFTEVURSAuLi4gKi8KKwkJICAgIGlu dCBkb2FsbCA9IDA7CisJCSAgICBpZiAoKHggPSBjbWlmaSgiSWRlbnRpdHkgZmlsZSIsIiIsJnMs JnkseHhzdHJpbmcpKSA8IDApIHsKKyNpZm5kZWYgU1NIVEVTVAorCQkJaWYgKHggPT0gLTMpCS8q IE5vIG5hbWUgZ2l2ZW4gKi8KKwkJCSAgZG9hbGwgPSAxOwkvKiBzbyBkbyB0aGVtIGFsbCAqLwor CQkJZWxzZQorI2VuZGlmIC8qIFNTSFRFU1QgKi8KKwkJCSAgcmV0dXJuKHgpOworCQkgICAgfQor CQkgICAgY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZTSVopOworCQkgICAgaWYgKCh4ID0gY21jZm0o KSkgPCAwKQorCQkgICAgICByZXR1cm4oeCk7CisjaWZkZWYgU1NIVEVTVAorCQkgICAgeCA9IDA7 CisjZWxzZQorCQkgICAgaWYgKGRvYWxsKQorCQkgICAgICB4ID0gc3NoX2FnZW50X2RlbGV0ZV9h bGwoKTsKKwkJICAgIGVsc2UKKwkJICAgICAgeCA9IHNzaF9hZ2VudF9kZWxldGVfZmlsZShsaW5l KTsKKyNlbmRpZiAvKiBTU0hURVNUICovCisJCSAgICByZXR1cm4oc3VjY2VzcyA9ICh4ID09IDAp KTsKKwkJfQorCQljYXNlIFNTSEFfTFNUOiB7CisJCSAgICBpbnQgZmluZ2VycHJpbnQgPSAwOwor CQkgICAgaWYgKCh5ID0gY21zd2koc3NoYWd0c3csbnNzaGFndHN3LCIiLCIiLHh4c3RyaW5nKSkg PCAwKSB7CisJCQlpZiAoeSAhPSAtMykKKwkJCSAgcmV0dXJuKHkpOworCQkgICAgfSBlbHNlIGlm IChjbWdicmsoKSA+IFNQKSB7CisJCQlwcmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtl IGFuIGFyZ3VtZW50XG4iKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9IGVsc2UgaWYgKHkgPT0g U1NIQVNXX0ZQKSB7CisJCQlmaW5nZXJwcmludCA9IDE7CisJCSAgICB9CisJCSAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApCisJCSAgICAgIHJldHVybih4KTsKKyNpZmRlZiBTU0hURVNUCisJCSAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworI2Vsc2UKKwkJICAgIHJldHVybihzdWNjZXNzID0KKwkJ CSAgIChzc2hfYWdlbnRfbGlzdF9pZGVudGl0aWVzKGZpbmdlcnByaW50KSA9PSAwKSk7CisjZW5k aWYgLyogU1NIVEVTVCAqLworCQl9CisJCWRlZmF1bHQ6CisJCSAgcmV0dXJuKC0yKTsKKwkgICAg ICB9CisJICB9CisJICBjYXNlIFhTU0hfQUREOiB7CQkvKiBTU0ggQUREICovCisJICAgICAgLyog c3NoIGFkZCB7IGxvY2FsLCByZW1vdGUgfSBwb3J0IGhvc3QgcG9ydCAqLworCSAgICAgIGludCBj eCwgaSwgaiwgazsKKwkgICAgICBjaGFyICogaDsKKwkgICAgICBpZiAoKGN4ID0gY21rZXkoYWRk ZndkLG5hZGRmd2QsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQorCQlyZXR1cm4oY3gpOworCSAgICAg IGlmICgoeCA9IGNtbnVtKChjeCA9PSBTU0hGX0xDTCkgPworCQkJICAgICAiTG9jYWwgcG9ydCBu dW1iZXIiIDogIlJlbW90ZSBwb3J0IG51bWJlciIsCisJCQkgICAgICIiLDEwLCZqLHh4c3RyaW5n KSkgPCAwKQorCQlyZXR1cm4oeCk7CisJICAgICAgaWYgKCh4ID0gY21mbGQoIkhvc3QiLCIiLCZz LHh4c3RyaW5nKSkgPCAwKQorCQlyZXR1cm4oeCk7CisJICAgICAgbWFrZXN0cigmaCxzKTsKKwkg ICAgICBpZiAoKHggPSBjbW51bSgiUG9ydCIsIiIsMTAsJmsseHhzdHJpbmcpKSA8IDApCisJCXJl dHVybih4KTsKKwkgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisJCXJldHVybih4KTsKKwor CSAgICAgIHN3aXRjaChjeCkgeworCQljYXNlIFNTSEZfTENMOgorCQkgICBpZiAoc3NoX3BmX2xj bF9uID09IDMyKSB7CisJCSAgICAgICBwcmludGYoCisiP01heGltdW0gbnVtYmVyIG9mIGxvY2Fs IHBvcnQgZm9yd2FyZGluZ3MgYWxyZWFkeSBzcGVjaWZpZWRcbiIKKwkJCSAgICAgKTsKKwkJICAg ICAgIGZyZWUoaCk7CisJCSAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworCQkgIH0KKwkJICBz c2hfcGZfbGNsW3NzaF9wZl9sY2xfbl0ucDEgPSBqOworCQkgIG1ha2VzdHIoJihzc2hfcGZfbGNs W3NzaF9wZl9sY2xfbl0uaG9zdCksaCk7CisJCSAgbWFrZXN0cigmaCxOVUxMKTsKKwkJICBzc2hf cGZfbGNsW3NzaF9wZl9sY2xfbl0ucDIgPSBrOworCQkgIHNzaF9wZl9sY2xfbisrOworCQkgIGJy ZWFrOworCQljYXNlIFNTSEZfUk1UOgorCQkgIGlmIChzc2hfcGZfcm10X24gPT0gMzIpIHsKKwkJ ICAgICAgcHJpbnRmKAorIj9NYXhpbXVtIG51bWJlciBvZiByZW1vdGUgcG9ydCBmb3J3YXJkaW5n cyBhbHJlYWR5IHNwZWNpZmllZFxuIgorCQkJICAgICk7CisJCSAgICAgIGZyZWUoaCk7CisJCSAg ICAgIHJldHVybihzdWNjZXNzID0gMCk7CisJCSAgfQorCQkgIHNzaF9wZl9ybXRbc3NoX3BmX3Jt dF9uXS5wMSA9IGo7CisJCSAgbWFrZXN0cigmKHNzaF9wZl9ybXRbc3NoX3BmX3JtdF9uXS5ob3N0 KSxoKTsKKwkJICBtYWtlc3RyKCZoLE5VTEwpOworCQkgIHNzaF9wZl9ybXRbc3NoX3BmX3JtdF9u XS5wMiA9IGs7CisJCSAgc3NoX3BmX3JtdF9uKys7CisJICAgICAgfQorCSAgICAgIHJldHVybihz dWNjZXNzID0gMSk7CisJICB9CisJICAvKiBOb3Qgc3VwcG9ydGluZyBhcmJpdHJhcnkgZm9yd2Fy ZGluZyB5ZXQgKi8KKwkgIGNhc2UgWFNTSF9GTFA6CQkvKiBTU0ggRk9SV0FSRC1MT0NBTC1QT1JU ICovCisJICBjYXNlIFhTU0hfRlJQOiB7CQkvKiBTU0ggRk9SV0FSRC1SRU1PVEUtUE9SVCAqLwor CSAgICAgIGludCBsaV9wb3J0ID0gMDsKKwkgICAgICBpbnQgdG9fcG9ydCA9IDA7CisJICAgICAg Y2hhciAqIGZ3X2hvc3QgPSBOVUxMOworCSAgICAgIGludCBuOworICAgICAgICAgICAgICBpZiAo KHggPSBjbW51bShjbXJlc3VsdC5ucmVzdWx0ID09IFhTU0hfRkxQID8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJsb2NhbC1wb3J0IjoicmVtb3RlLXBvcnQiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiIsMTAsJmxpX3BvcnQseHhzdHJpbmcpKSA8IDApCisgICAgICAg ICAgICAgICAgICByZXR1cm4oeCk7CisgICAgICAgICAgICAgIGlmIChsaV9wb3J0IDwgMSB8fCBs aV9wb3J0ID4gNjU1MzUpIHsKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiP091dCByYW5nZSAt IG1pbjogMSwgbWF4OiA2NTUzNVxuIik7CisgICAgICAgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICAgICAgICB9CisJICAgICAgaWYgKCh4ID0gY21mbGQoImhvc3QiLHNzaF9oc3Q/c3No X2hzdDoiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJcmV0dXJuKHgpOworICAgICAgICAgICAgICBu ID0gY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisgICAgICAgICAgICAgIGZ3X2hvc3Qg PSB0bXBidWY7CisgICAgICAgICAgICAgIGlmICgoeCA9IGNtbnVtKCJob3N0LXBvcnQiLGNrdWl0 b2EobGlfcG9ydCksMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG9fcG9ydCx4 eHN0cmluZykpIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybih4KTsKKyAgICAgICAgICAg ICAgaWYgKHRvX3BvcnQgPCAxIHx8IHRvX3BvcnQgPiA2NTUzNSkgeworICAgICAgICAgICAgICAg ICAgcHJpbnRmKCI/T3V0IHJhbmdlIC0gbWluOiAxLCBtYXg6IDY1NTM1XG4iKTsKKyAgICAgICAg ICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICAgIH0KKwkgICAgICBpZiAoKHggPSBj bWNmbSgpKSA8IDApCisJCXJldHVybih4KTsKKwkgICAgICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1 bHQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFhTU0hfRkxQOgkvKiBTU0ggRk9SV0FSRC1MT0NB TC1QT1JUICovCisjaWZuZGVmIFNTSFRFU1QKKyAgICAgICAgICAgICAgICAgIHNzaF9md2RfbG9j YWxfcG9ydChsaV9wb3J0LGZ3X2hvc3QsdG9fcG9ydCk7CisjZW5kaWYgLyogU1NIVEVTVCAqLwor CQkgIHJldHVybihzdWNjZXNzID0gMSk7CisJCWNhc2UgWFNTSF9GUlA6CS8qIFNTSCBGT1JXQVJE LVJFTU9URS1QT1JUICovCisjaWZuZGVmIFNTSFRFU1QKKyAgICAgICAgICAgICAgICAgIHNzaF9m d2RfcmVtb3RlX3BvcnQobGlfcG9ydCxmd19ob3N0LHRvX3BvcnQpOworI2VuZGlmIC8qIFNTSFRF U1QgKi8KKwkJICByZXR1cm4oc3VjY2VzcyA9IDEpOworCSAgICAgIH0KKwkgICAgICByZXR1cm4o c3VjY2VzcyA9IDEpOworCSAgfQorCWNhc2UgWFNTSF9WMjoJCS8qIFNTSCBWMiAqLworCSAgaWYg KChjeCA9IGNta2V5KHNzaDJ0YWIsbnNzaDJ0YWIsIiIsIiIsIHh4c3RyaW5nKSkgPCAwKQorCSAg ICByZXR1cm4oY3gpOworCSAgc3dpdGNoIChjeCkgeworCSAgICBjYXNlIFhTU0gyX1JLRToKKwkg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCisJCXJldHVybih4KTsKKyNpZm5kZWYgU1NIVEVT VAorCSAgICAgIHNzaF92Ml9yZWtleSgpOworI2VuZGlmIC8qIFNTSFRFU1QgKi8KKwkgICAgICBy ZXR1cm4oc3VjY2VzcyA9IDEpOworCSAgICBkZWZhdWx0OgorCSAgICAgIHJldHVybigtMik7CisJ ICB9CisJY2FzZSBYU1NIX0tFWToKKwkgIGlmICgoY3ggPSBjbWtleShzc2hrZXksbnNzaGtleSwi IiwiIiwgeHhzdHJpbmcpKSA8IDApCisJICAgIHJldHVybihjeCk7CisJICBzd2l0Y2ggKGN4KSB7 CisJICAgIGNhc2UgU1NIS19QQVNTOiB7CS8qIENoYW5nZSBwYXNzcGhyYXNlICovCisJICAgICAg Y2hhciAqIG9sZHAgPSBOVUxMLCAqIG5ld3AgPSBOVUxMOworCSAgICAgIHN0cnVjdCBGREIgZGYs IHN3OworCSAgICAgIGNtZmRiaSgmc3csCisJCSAgICAgX0NNS0VZLAkJLyogZmNvZGUgKi8KKwkJ ICAgICAiRmlsZW5hbWUsIG9yIHN3aXRjaCIsIC8qIGhscG1zZyAqLworCQkgICAgICIiLAkJLyog ZGVmYXVsdCAqLworCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJICAgICAy LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworCQkgICAgIDQsCQkJLyog YWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQgPSBjbXN3aSAqLworCQkgICAgIHh4c3RyaW5nLAkJLyog UHJvY2Vzc2luZyBmdW5jdGlvbiAqLworCQkgICAgIHNzaGtwc3csCQkvKiBLZXl3b3JkIHRhYmxl ICovCisJCSAgICAgJmRmCQkvKiBQb2ludGVyIHRvIG5leHQgRkRCICovCisJCSAgICAgKTsKKwkg ICAgICBjbWZkYmkoJmRmLAkJLyogMm5kIEZEQiAtIGZpbGUgZm9yIGRpc3BsYXkgKi8KKwkJICAg ICBfQ01JRkksCQkvKiBvdXRwdXQgZmlsZSAqLworCQkgICAgICIiLAkJLyogaGxwbXNnICovCisJ CSAgICAgIiIsCQkvKiBkZWZhdWx0ICovCisJCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0 YSAqLworCQkgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDEgKi8KKwkJICAgICAwLAkJ CS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisJCSAgICAgeHhzdHJpbmcsCisJCSAgICAgTlVM TCwKKwkJICAgICBOVUxMCisJCSAgICAgKTsKKwkgICAgICBsaW5lWzBdID0gTlVMOworCisJICAg ICAgd2hpbGUgKDEpIHsKKwkJICB4ID0gY21mZGIoJnN3KTsKKwkJICBpZiAoeCA9PSAtMykgYnJl YWs7CisJCSAgaWYgKHggPCAwKQorCQkgICAgcmV0dXJuKHgpOworCQkgIGlmIChjbXJlc3VsdC5m Y29kZSAhPSBfQ01LRVkpCisJCSAgICBicmVhazsKKwkJICBpZiAoIWNtZ2JyaygpKSB7CisJCSAg ICAgIHByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKwkJICAg ICAgcmV0dXJuKC05KTsKKwkJICB9CisJCSAgaWYgKCh5ID0gY21mbGQoIlBhc3NwaHJhc2UiLCIi LCZzLHh4c3RyaW5nKSkgPCAwKQorCQkgICAgcmV0dXJuKHkpOworCQkgIHN3aXRjaCAoY21yZXN1 bHQubnJlc3VsdCkgeworCQkgICAgY2FzZSAxOgkJLyogT2xkICovCisJCSAgICAgIG1ha2VzdHIo Jm9sZHAscyk7CisJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSAyOgkJLyogTmV3ICovCisJCSAg ICAgIG1ha2VzdHIoJm5ld3Ascyk7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBpZiAoY21yZXN1 bHQuZmNvZGUgPT0gX0NNSUZJKSB7IC8qIEZpbGVuYW1lICovCisJCSAgY2tzdHJuY3B5KGxpbmUs Y21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOworCQkgIGlmICh6Zm5xZnAobGluZSxUTVBCVUZT SVosdG1wYnVmKSkKKwkJICAgIGNrc3RybmNweShsaW5lLHRtcGJ1ZixMSU5CVUZTSVopOworCSAg ICAgIH0KKwkgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKworI2lmbmRl ZiBTU0hURVNUCisJICAgICAgeCA9IHNzaGtleV9jaGFuZ2VfcGFzc3BocmFzZShsaW5lWzBdID8g bGluZSA6IE5VTEwsCisJCQkJCSAgICAgb2xkcCwgbmV3cCk7CisjZW5kaWYgLyogU1NIVEVTVCAq LworCSAgICAgIG1ha2VzdHIoJm9sZHAsTlVMTCk7CisJICAgICAgbWFrZXN0cigmbmV3cCxOVUxM KTsKKwkgICAgICBzdWNjZXNzID0gKHggPT0gMCk7CisJICAgICAgcmV0dXJuKHN1Y2Nlc3MpOwor CSAgICB9CisJICAgIGNhc2UgU1NIS19DUkVBOiB7CS8qIFNTSCBLRVkgQ1JFQVRFIC9zd2l0Y2hl cy4uLiAqLworCSAgICAgIGludCBiaXRzID0gMTAyNCwga2V5dHlwZSA9IFNTSEtUXzJSOworCSAg ICAgIGNoYXIgKiBwYXNzID0gTlVMTCwgKiBjb21tZW50ID0gTlVMTDsKKwkgICAgICBzdHJ1Y3Qg RkRCIGRmLCBzdzsKKworICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgKiBjaGFyICog c3Noa2V5X2RlZmF1bHRfZmlsZShpbnQga2V5dHlwZSkgCisgICAgICAgICAgICAgICAqIHdpbGwg cHJvdmlkZSB0aGUgZGVmYXVsdCBmaWxlbmFtZSBmb3IgYSBnaXZlbiBrZXl0eXBlCisgICAgICAg ICAgICAgICAqIGlzIGl0IHBvc3NpYmxlIHRvIGhhdmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRo ZSAybmQKKyAgICAgICAgICAgICAgICogRkRCIHNldCBhbmQgY2hhbmdlZCB3aGVuIGEgL1RZUEUg c3dpdGNoIGlzIHByb3ZpZGVkPworICAgICAgICAgICAgICAgKiBXb3VsZCB0aGlzIGFsbG93IGZv ciB0YWIgY29tcGxldGlvbiBvZiB0aGUgZmlsZW5hbWU/CisgICAgICAgICAgICAgICAqLworCSAg ICAgIGNtZmRiaSgmc3csCisJCSAgICAgX0NNS0VZLAkJLyogZmNvZGUgKi8KKwkJICAgICAiRmls ZW5hbWUsIG9yIHN3aXRjaCIsIC8qIGhscG1zZyAqLworCQkgICAgICIiLAkJLyogZGVmYXVsdCAq LworCQkgICAgICIiLAkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkJICAgICBuc3Noa2NyZWEs CQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUgKi8KKwkJICAgICA0LAkJCS8qIGFk ZHRsIG51bWVyaWMgZGF0YSAyOiA0ID0gY21zd2kgKi8KKwkJICAgICB4eHN0cmluZywJCS8qIFBy b2Nlc3NpbmcgZnVuY3Rpb24gKi8KKwkJICAgICBzc2hrY3JlYSwJCS8qIEtleXdvcmQgdGFibGUg Ki8KKwkJICAgICAmZGYJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkJICAgICApOworCSAg ICAgIGNtZmRiaSgmZGYsCQkvKiAybmQgRkRCIC0gZmlsZSBmb3IgZGlzcGxheSAqLworCQkgICAg IF9DTU9GSSwJCS8qIG91dHB1dCBmaWxlICovCisJCSAgICAgIiIsCQkvKiBobHBtc2cgKi8KKwkJ ICAgICAiIiwJCS8qIGRlZmF1bHQgKi8KKwkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRh ICovCisJCSAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCQkgICAgIDAsCQkJ LyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKwkJICAgICB4eHN0cmluZywKKwkJICAgICBOVUxM LAorCQkgICAgIE5VTEwKKwkJICAgICApOworCSAgICAgIGxpbmVbMF0gPSBOVUw7CisKKwkgICAg ICB3aGlsZSAoMSkgeworCQkgIHggPSBjbWZkYigmc3cpOworCQkgIGlmICh4ID09IC0zKSBicmVh azsKKwkJICBpZiAoeCA8IDApCisJCSAgICByZXR1cm4oeCk7CisJCSAgaWYgKGNtcmVzdWx0LmZj b2RlICE9IF9DTUtFWSkKKwkJICAgIGJyZWFrOworCQkgIGlmICghY21nYnJrKCkpIHsKKwkJICAg ICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCQkgICAg ICByZXR1cm4oLTkpOworCQkgIH0KKwkJICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKwkJ ICAgIGNhc2UgU1NIS0NfQkk6CS8qIC9CSVRTOm4gKi8KKwkJICAgICAgaWYgKCh5ID0gY21udW0o IiIsIjEwMjQiLDEwLCZ6LHh4c3RyaW5nKSkgPCAwKQorCQkJcmV0dXJuKHkpOworCQkgICAgICBp ZiAoeiA8IDUxMiB8fCB6ID4gNDA5NikgeworCQkJICBwcmludGYoIj9PdXQgcmFuZ2UgLSBtaW46 IDUxMiwgbWF4OiA0MDk2XG4iKTsKKwkJCSAgcmV0dXJuKC05KTsKKwkJICAgICAgfQorCQkgICAg ICBiaXRzID0gejsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlIFNTSEtDX1BQOgkvKiAvUEFT U1BIUkFTRTpibGFoICovCisJCSAgICAgIGlmICgoeSA9IGNtZmxkKCJQYXNzcGhyYXNlIiwiIiwm cyx4eHN0cmluZykpIDwgMCkKKwkJCXJldHVybih5KTsKKwkJICAgICAgbWFrZXN0cigmcGFzcyxz KTsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNlIFNTSEtDX1RZOgkvKiAvVFlQRTprZXl3b3Jk ICovCisJCSAgICAgIGlmICgoeSA9IGNta2V5KHNzaGtjdHksbnNzaGtjdHksIiIsCisJCQkJICAg ICAidjItcnNhIix4eHN0cmluZykpIDwgMCkKKwkJCXJldHVybih5KTsKKwkJICAgICAga2V5dHlw ZSA9IHk7CisJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSBTU0hLQ18xUjoJLyogL0NPTU1FTlQg Ki8KKwkJICAgICAgaWYgKCh5ID0gY21mbGQoIlRleHQiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQor CQkJcmV0dXJuKHkpOworCQkgICAgICBtYWtlc3RyKCZjb21tZW50LHMpOworCQkgICAgICBicmVh azsKKwkJICB9CisJICAgICAgfQorCSAgICAgIGlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01PRkkp IHsgLyogRmlsZW5hbWUgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChjbXJlc3VsdC5zcmVzdWx0 KSB7CisgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3Vs dCxMSU5CVUZTSVopOworICAgICAgICAgICAgICAgICAgICAgIGlmICh6Zm5xZnAobGluZSxUTVBC VUZTSVosdG1wYnVmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KGxpbmUs dG1wYnVmLExJTkJVRlNJWik7CisJCSAgfQorCSAgICAgIH0KKwkgICAgICBpZiAoKHkgPSBjbWNm bSgpKSA8IDApIC8qIENvbmZpcm0gKi8KKwkJcmV0dXJuKHkpOworI2lmbmRlZiBTU0hURVNUCisJ ICAgICAgeCA9IHNzaGtleV9jcmVhdGUobGluZVswXSA/IGxpbmUgOiBOVUxMLAorCQkJCWJpdHMs IHBhc3MsIGtleXR5cGUsIGNvbW1lbnQpOworCSAgICAgIGlmIChwYXNzKQorCQltZW1zZXQocGFz cywwLHN0cmxlbihwYXNzKSk7CisjZW5kaWYgLyogU1NIVEVTVCAqLworCSAgICAgIG1ha2VzdHIo JnBhc3MsTlVMTCk7CisJICAgICAgbWFrZXN0cigmY29tbWVudCxOVUxMKTsKKwkgICAgICByZXR1 cm4oc3VjY2VzcyA9ICh4ID09IDApKTsKKwkgICAgfQorCSAgICBjYXNlIFNTSEtfRElTUDogewkv KiBTU0ggS0VZIERJU1BMQVkgL3N3aXRjaGVzLi4uICovCisJICAgICAgY2hhciBjOworCSAgICAg IGludCBpbmZtdCA9IDAsIG91dGZtdCA9IDA7CisJICAgICAgc3RydWN0IEZEQiBkZiwgc3c7CisJ ICAgICAgY21mZGJpKCZzdywKKwkJICAgICBfQ01LRVksCQkvKiBmY29kZSAqLworCQkgICAgICJG aWxlbmFtZSwgb3Igc3dpdGNoIiwgLyogaGxwbXNnICovCisJCSAgICAgIiIsCQkvKiBkZWZhdWx0 ICovCisJCSAgICAgIiIsCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLworCQkgICAgIG5zc2hkc3dp LAkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDE6IHRibCBzaXplICovCisJCSAgICAgNCwJCQkvKiBh ZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisJCSAgICAgeHhzdHJpbmcsCQkvKiBQ cm9jZXNzaW5nIGZ1bmN0aW9uICovCisJCSAgICAgc3NoZHN3aSwJCS8qIEtleXdvcmQgdGFibGUg Ki8KKwkJICAgICAmZGYJCS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkJICAgICApOworCSAg ICAgIGNtZmRiaSgmZGYsCQkvKiAybmQgRkRCIC0gZmlsZSBmb3IgZGlzcGxheSAqLworCQkgICAg IF9DTUlGSSwJCS8qIGZjb2RlICovCisJCSAgICAgIiIsCQkvKiBobHBtc2cgKi8KKwkJICAgICAi IiwJCS8qIGRlZmF1bHQgKi8KKwkJICAgICAiIiwJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJ CSAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCQkgICAgIDAsCQkJLyogYWRk dGwgbnVtZXJpYyBkYXRhIDIgKi8KKwkJICAgICB4eHN0cmluZywKKwkJICAgICBOVUxMLAorCQkg ICAgIE5VTEwKKwkJICAgICApOworCSAgICAgIGxpbmVbMF0gPSBOVUw7CisKKwkgICAgICB3aGls ZSAoMSkgeworCQkgIHggPSBjbWZkYigmc3cpOworCQkgIGlmICh4ID09IC0zKSBicmVhazsKKwkJ ICBpZiAoeCA8IDApCisJCSAgICByZXR1cm4oeCk7CisJCSAgaWYgKGNtcmVzdWx0LmZjb2RlICE9 IF9DTUtFWSkKKwkJICAgIGJyZWFrOworCQkgIGlmICghY21nYnJrKCkpIHsKKwkJICAgICAgcHJp bnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCQkgICAgICByZXR1 cm4oLTkpOworCQkgIH0KKwkJICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsKKyNpZmRlZiBD T01NRU5UCisJCSAgICBjYXNlIFNTSEtEX0lOOgkvKiAvSU4tRk9STUFUOiAqLworCQkgICAgICBp ZiAoKHkgPSBjbWtleShzc2hkaWZtdCxuc3NoZGlmbXQsCisJCQkJICAgICAiIiwiIix4eHN0cmlu ZykpIDwgMCkKKwkJCXJldHVybih5KTsKKwkJICAgICAgaW5mbXQgPSB5OworCQkgICAgICBicmVh azsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJCSAgICBjYXNlIFNTSEtEX09VVDoJLyogL0ZPUk1B VDogKi8KKwkJICAgICAgaWYgKCh5ID0gY21rZXkoc3NoZG9mbXQsbnNzaGRvZm10LAorCQkJCSAg ICAgIiIsIiIseHhzdHJpbmcpKSA8IDApCisJCQlyZXR1cm4oeSk7CisJCSAgICAgIG91dGZtdCA9 IHk7CisJCSAgICAgIGJyZWFrOworCQkgIH0KKwkgICAgICB9CisJICAgICAgaWYgKGNtcmVzdWx0 LmZjb2RlID09IF9DTUlGSSkgeyAvKiBGaWxlbmFtZSAqLworCQkgIGNrc3RybmNweShsaW5lLGNt cmVzdWx0LnNyZXN1bHQsTElOQlVGU0laKTsKKwkJICBpZiAoemZucWZwKGxpbmUsVE1QQlVGU0la LHRtcGJ1ZikpCisJCSAgICBja3N0cm5jcHkobGluZSx0bXBidWYsTElOQlVGU0laKTsKKwkgICAg ICB9CisjaWZkZWYgQ09NTUVOVAorCSAgICAgIGlmICghbGluZVswXSkgeworCQkgIHByaW50Zigi P0tleSBmaWxlbmFtZSByZXF1aXJlZFxuIik7CisJCSAgcmV0dXJuKC05KTsKKwkgICAgICB9Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworCSAgICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkgLyogQ29u ZmlybSAqLworCQlyZXR1cm4oeSk7CisjaWZuZGVmIFNTSFRFU1QKKwkgICAgICBzd2l0Y2ggKG91 dGZtdCkgeworCQljYXNlIFNLREZfT1NTSDoKKyAgICAgICAgICAgICAgICAgIC8qIDJuZCBwYXJh bSBpcyBvcHRpb25hbCBwYXNzcGhyYXNlICovCisJCSAgeCA9IHNzaGtleV9kaXNwbGF5X3B1Ymxp YyhsaW5lWzBdID8gbGluZSA6IE5VTEwsIE5VTEwpOworCQkgIGJyZWFrOworCQljYXNlIFNLREZf U1NIQzoKKyAgICAgICAgICAgICAgICAgIC8qIDJuZCBwYXJhbSBpcyBvcHRpb25hbCBwYXNzcGhy YXNlICovCisJCSAgeCA9IHNzaGtleV9kaXNwbGF5X3B1YmxpY19hc19zc2gyKGxpbmVbMF0gPyBs aW5lIDogTlVMTCwKKwkJCQkJCSAgICBOVUxMKTsKKwkJICBicmVhazsKKwkJY2FzZSBTS0RGX0lF VEY6CisJCSAgeCA9IHNzaGtleV9kaXNwbGF5X2ZpbmdlcnByaW50KGxpbmVbMF0gPyBsaW5lIDog TlVMTCwgMSk7CisJCSAgYnJlYWs7CisJCWNhc2UgU0tERl9GSU5HOgorCQkgIHggPSBzc2hrZXlf ZGlzcGxheV9maW5nZXJwcmludChsaW5lWzBdID8gbGluZSA6IE5VTEwsIDApOworCQkgIGJyZWFr OworCSAgICAgIH0KKyNlbmRpZiAvKiBTU0hURVNUICovCisJICAgICAgcmV0dXJuKHN1Y2Nlc3Mg PSAoeCA9PSAwKSk7CisJICAgIH0KKwkgICAgY2FzZSBTU0hLX1YxOgkJLyogU1NIIEtFWSBWMSBT RVQtQ09NTUVOVCAqLworCSAgICAgIGlmICgoeCA9IGNta2V5KHNzaGt2MSwxLCIiLCJzZXQtY29t bWVudCIsIHh4c3RyaW5nKSkgPCAwKQorCQlyZXR1cm4oeCk7CisJICAgICAgaWYgKHggIT0gMSkg cmV0dXJuKC0yKTsKKwkgICAgICBpZiAoKHggPSBjbWlmaSgiS2V5IGZpbGUgbmFtZSIsIiIsJnMs JnkseHhzdHJpbmcpKSA8IDApIHsKKwkJICBpZiAoeCA9PSAtMykgeworCQkgICAgICBwcmludGYo Ij9OYW1lIG9mIGtleSBmaWxlIHJlcXVpcmVkXG4iKTsKKwkJICAgICAgcmV0dXJuKC05KTsKKwkJ ICB9CisJICAgICAgfQorCSAgICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKwkgICAg ICBpZiAoKHggPSBjbXR4dCgiQ29tbWVudCB0ZXh0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJ cmV0dXJuKHgpOworI2lmbmRlZiBTU0hURVNUCisJICAgICAgeCA9IHNzaGtleV92MV9jaGFuZ2Vf Y29tbWVudChsaW5lLCAgLyogZmlsZW5hbWUgKi8KKwkJCQkJICAgcywgICAgIC8qIG5ldyBjb21t ZW50ICovCisJCQkJCSAgIE5VTEwgICAvKiBwYXNzcGhyYXNlICovCisJCQkJCSAgICk7CisjZW5k aWYgLyogU1NIVEVTVCAqLworCSAgICAgIHN1Y2Nlc3MgPSAoeCA9PSAwKTsKKwkgICAgICByZXR1 cm4oc3VjY2Vzcyk7CisJICB9CisJICBkZWZhdWx0OgorCSAgICByZXR1cm4oLTIpOworCX0KKyNl bHNlICAvKiBTU0hCVUlMVElOICovCisjaWZkZWYgU1NIQ01ECisJeCA9IG5ldHR5cGU7CisJaWYg KCh5ID0gc2V0bGluKFhYU1NILDAsMSkpIDwgMCkgeworCSAgICBpZiAoZXJybm8pCisJICAgICAg cHJpbnRmKCI/JXNcbiIsY2tfZXJyc3RyKCkpOworICAgICAgICAgICAgZWxzZQorI2lmZGVmIENP TU1FTlQKKwkgICAgLyogVGhpcyBpc24ndCByaWdodCBlaXRoZXIgYmVjYXVzZSBpdCBjYXRjaGVz IGNvbW1hbmQgZWRpdGluZyAqLworCSAgICAgIHByaW50ZigiP1NvcnJ5LCBwc2V1ZG90ZXJtaW5h bCBvcGVuIGZhaWxlZFxuIik7CisgICAgICAgICAgICBpZiAoaGludHMpCisJICAgICAgcHJpbnRm KCJIaW50OiBUcnkgXCJzc2ggLXQgJXNcIlxuIixsaW5lKTsKKyNlbHNlCisJICAgICAgcmV0dXJu KHkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkgICAgbmV0dHlwZSA9IHg7CQkvKiBGYWlsZWQs IHJlc3RvcmUgbmV0IHR5cGUuICovCisJICAgIHR0bnByb3RvID0gejsJCS8qIGFuZCBwcm90b2Nv bCAqLworCSAgICBzdWNjZXNzID0gMDsKKwl9CisJZGlkc2V0bGluKys7CisJbmV0c2F2ZSA9IHg7 CisJcmV0dXJuKHkpOworI2VuZGlmIC8qIFNTSENNRCAqLworI2VuZGlmIC8qIFNTSEJVSUxUSU4g Ki8KKyAgICB9CisjZW5kaWYgLyogQU5ZU1NIICovCisKKyNpZmRlZiBTU0hCVUlMVElOCisgICAg aWYgKGN4ID09IFhYU0tSTSkgewkJCS8qIFNLRVJNSVQgKFNlY3VyZSBTaGVsbCBLZXJtaXQpICov CisJZXh0ZXJuIGludCBuZXRzYXZlOworCWludCBrLCB4LCBoYXZlaG9zdCA9IDAsIHRyaXBzID0g MDsKKyAgICAgICAgaW50ICAgIHRtcHZlciA9IC0xLCB0bXB4ZncgPSAtMTsKKyNpZm5kZWYgU1NI VEVTVAorICAgICAgICBleHRlcm4gaW50IHNsX3NzaF94ZncsIHNsX3NzaF94Zndfc2F2ZWQ7Cisg ICAgICAgIGV4dGVybiBpbnQgc2xfc3NoX3Zlciwgc2xfc3NoX3Zlcl9zYXZlZDsKKyNlbmRpZiAv KiBTU0hURVNUICovCisgICAgICAgIGV4dGVybiBpbnQgbWRtdHlwLCBtZG1zYXYsIGN4dHlwZSwg c2xfdWlkX3NhdmVkOworICAgICAgICBleHRlcm4gY2hhciAqIHNsbXNnOworCWV4dGVybiBjaGFy IHVpZGJ1ZltdLCBzbF91aWRidWZbXTsKKyAgICAgICAgZXh0ZXJuIGNoYXIgcHdidWZbXSwgKiBn X3Bzd2Q7CisgICAgICAgIGV4dGVybiBpbnQgcHdmbGcsIHB3Y3J5cHQsIGdfcGZsZywgZ19wY3B0 LCBub2xvY2FsOworCXN0cnVjdCBGREIgc3csIGt3LCBmbDsKKworICAgICAgICBpZiAoc3NoX3Rt cHN0cikKKwkgIG1lbXNldChzc2hfdG1wc3RyLDAsc3RybGVuKHNzaF90bXBzdHIpKTsKKyAgICAg ICAgbWFrZXN0cigmc3NoX3RtcHN0cixOVUxMKTsKKyAgICAgICAgbWFrZXN0cigmc3NoX3RtcHVp ZCxOVUxMKTsKKyAgICAgICAgbWFrZXN0cigmc3NoX3RtcGNtZCxOVUxMKTsKKyAgICAgICAgbWFr ZXN0cigmc3NoX3RtcHBvcnQsTlVMTCk7CisKKwljbWZkYmkoJmt3LAkJCS8qIDFzdCBGREIgLSBj b21tYW5kcyAqLworCSAgICAgICBfQ01LRVksCQkJLyogZmNvZGUgKi8KKwkgICAgICAgImhvc3Qg WyBwb3J0IF0sXG4gb3IgYWN0aW9uIiwgLyogaGxwbXNnICovCisJICAgICAgICIiLAkJCS8qIGRl ZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAg bnNzaGtlcm1pdCwJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6ZSAqLworCSAgICAg ICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwID0ga2V5d29yZCAqLworCSAgICAgICB4 eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKwkgICAgICAgc3Noa2VybWl0LAkJ LyogS2V5d29yZCB0YWJsZSAqLworCSAgICAgICAmZmwJCQkvKiBQb2ludGVyIHRvIG5leHQgRkRC ICovCisJICAgICAgICk7CisJY21mZGJpKCZmbCwJCQkvKiBIb3N0ICovCisJICAgICAgIF9DTUZM RCwJCQkvKiBmY29kZSAqLworCSAgICAgICAiIiwJCQkvKiBobHBtc2cgKi8KKwkgICAgICAgIiIs CQkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJpbmcgZGF0YSAqLwor CSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJICAgICAgIDAsCQkJLyog YWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKwkgICAgICAgeHhzdHJpbmcsCisJICAgICAgIE5VTEws CisJICAgICAgIE5VTEwKKwkgICAgICAgKTsKKworCXggPSBjbWZkYigma3cpOworCWlmICh4ID09 IC0zKSB7CisJICAgIHByaW50ZigiP3NrZXJtaXQgd2hhdD9cbiIpOworCSAgICByZXR1cm4oLTkp OworCX0KKwlpZiAoeCA8IDApCisJICByZXR1cm4oeCk7CisJaGF2ZWhvc3QgPSAwOworCWlmIChj bXJlc3VsdC5mY29kZSA9PSBfQ01GTEQpIHsKKwkgICAgaGF2ZWhvc3QgPSAxOworCSAgICBja3N0 cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7IC8qIEhvc3RuYW1lICovCisJ ICAgIGNtcmVzdWx0Lm5yZXN1bHQgPSBTS1JNX09QTjsKKwl9CisJc3dpdGNoIChjbXJlc3VsdC5u cmVzdWx0KSB7CS8qIFNTSCBrZXl3b3JkICovCisJICBjYXNlIFNLUk1fT1BOOgkJLyogU1NIIE9Q RU4gKi8KKwkgICAgaWYgKCFoYXZlaG9zdCkgeworCQlpZiAoKHggPSBjbWZsZCgiSG9zdCIsIiIs JnMseHhzdHJpbmcpKSA8IDApCisJCSAgcmV0dXJuKHgpOworCQlja3N0cm5jcHkobGluZSxzLExJ TkJVRlNJWik7CisJICAgIH0KKwkgICAgLyogUGFyc2UgWyBwb3J0IF0gWyBzd2l0Y2hlcyBdICov CisJICAgIGNtZmRiaSgma3csCQkJLyogU3dpdGNoZXMgKi8KKwkJICAgX0NNS0VZLAorCQkgICAi UG9ydCBudW1iZXIgb3Igc2VydmljZSBuYW1lLFxub3Igc3dpdGNoIiwKKwkJICAgIiIsCisJCSAg ICIiLAorCQkgICBuc3Noa3Jtb3Buc3csCisJCSAgIDQsCisJCSAgIHh4c3RyaW5nLAorCQkgICBz c2hrcm1vcG5zdywKKwkJICAgJmZsCisJCSAgICk7CisJICAgIGNtZmRiaSgmZmwsCQkJLyogUG9y dCBudW1iZXIgb3Igc2VydmljZSBuYW1lICovCisJCSAgIF9DTUZMRCwKKwkJICAgIiIsCisJCSAg ICIiLAorCQkgICAiIiwKKwkJICAgMCwKKwkJICAgMCwKKwkJICAgeHhzdHJpbmcsCisJCSAgIE5V TEwsCisJCSAgIE5VTEwKKwkJICAgKTsKKwkgICAgdHJpcHMgPSAwOwkJCS8qIEV4cGxhaW5lZCBi ZWxvdyAqLworCSAgICB3aGlsZSAoMSkgewkJCS8qIFBhcnNlIHBvcnQgYW5kIHN3aXRjaGVzICov CisJCXggPSBjbWZkYigma3cpOwkJLyogR2V0IGEgZmllbGQgKi8KKwkJaWYgKHggPT0gLTMpCQkv KiBVc2VyIHR5cGVkIENSIHNvIHF1aXQgZnJvbSBsb29wICovCisJCSAgYnJlYWs7CisJCWlmICh4 IDwgMCkJCS8qIE90aGVyIHBhcnNlIGVycm9yLCBwYXNzIGl0IGJhY2sgKi8KKwkJICByZXR1cm4o eCk7CisJCXN3aXRjaCAoY21yZXN1bHQuZmNvZGUpIHsgLyogRmllbGQgb3IgS2V5d29yZD8gKi8K KyAgICAgICAgICAgICAgICAgIGNhc2UgX0NNRkxEOgkJICAvKiBGaWVsZCAqLworICAgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wcG9ydCxjbXJlc3VsdC5zcmVzdWx0KTsKKwkJICAg IGJyZWFrOworCQkgIGNhc2UgX0NNS0VZOgkJLyogS2V5d29yZCAqLworCQkgICAgc3dpdGNoIChj bXJlc3VsdC5ucmVzdWx0KSB7CS8qIFdoaWNoIG9uZT8gKi8KKwkJICAgICAgY2FzZSBTU0hTV19V U1I6CSAgICAgICAgLyogL1VTRVI6ICovCisJCQlpZiAoIWNtZ2JyaygpKSB7CisJCQkgICAgcHJp bnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMgYW4gYXJndW1lbnRcbiIpOworCQkJICAgIHJldHVy bigtOSk7CisJCQl9CisJCQlpZiAoKHkgPSBjbWZsZCgiVXNlcm5hbWUiLCIiLCZzLHh4c3RyaW5n KSkgPCAwKQorCQkJICByZXR1cm4oeSk7CisJCQlzID0gYnJzdHJpcChzKTsKKwkJCW1ha2VzdHIo JnNzaF90bXB1aWQscyk7CisJCQlicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNT SFNXX1BXRDoKKwkJCWlmICghY21nYnJrKCkpIHsKKwkJCSAgICBwcmludGYoIj9UaGlzIHN3aXRj aCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJCQkgICAgcmV0dXJuKC05KTsKKwkJCX0KKwkJ CWRlYm9rID0gMDsKKwkJCWlmICgoeCA9IGNtZmxkKCJQYXNzd29yZCIsIiIsJnMseHhzdHJpbmcp KSA8IDApIHsKKwkJCSAgICBpZiAoeCA9PSAtMykgeworCQkJCW1ha2VzdHIoJnNzaF90bXBzdHIs IiIpOworCQkJICAgIH0gZWxzZSB7CisJCQkJcmV0dXJuKHgpOworCQkJICAgIH0KKwkJCX0gZWxz ZSB7CisJCQkgICAgcyA9IGJyc3RyaXAocyk7CisJCQkgICAgaWYgKCh4ID0gKGludClzdHJsZW4o cykpID4gUFdCVUZMKSB7CisJCQkJbWFrZXN0cigmc2xtc2csIkludGVybmFsIGVycm9yIik7CisJ CQkJcHJpbnRmKCI/U29ycnksIHRvbyBsb25nIC0gbWF4ID0gJWRcbiIsUFdCVUZMKTsKKwkJCQly ZXR1cm4oLTkpOworCQkJICAgIH0KKwkJCSAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLHMpOworCQkJ fQorCQkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTU0hTV19WRVI6CisJCQlp ZiAoKHggPSBjbW51bSgiTnVtYmVyIiwiIiwxMCwmeix4eHN0cmluZykpIDwgMCkKKwkJCSAgcmV0 dXJuKHgpOworCQkJaWYgKHogPCAxIHx8IHogPiAyKSB7CisJCQkgICAgcHJpbnRmKCI/T3V0IG9m IHJhbmdlOiAlZFxuIix6KTsKKwkJCSAgICByZXR1cm4oLTkpOworCQkJfQorICAgICAgICAgICAg ICAgICAgICAgICAgdG1wdmVyID0gejsKKwkJCWJyZWFrOworICAgICAgICAgICAgICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKC0yKTsKKwkJICAgIH0KKyAg ICAgICAgICAgICAgICAgIH0KKwkJaWYgKHRyaXBzKysgPT0gMCkgewkvKiBBZnRlciBmaXJzdCB0 aW1lIHRocm91Z2ggKi8KKwkJICAgIGNtZmRiaSgma3csCQkvKiBvbmx5IHBhcnNlIHN3aXRjaGVz LCBub3QgcG9ydC4gKi8KKwkJCSAgIF9DTUtFWSwKKwkJCSAgICJTd2l0Y2giLAorCQkJICAgIiIs CisJCQkgICAiIiwKKwkJCSAgIG5zc2hrcm1vcG5zdywKKwkJCSAgIDQsCisJCQkgICB4eHN0cmlu ZywKKwkJCSAgIHNzaGtybW9wbnN3LAorCQkJICAgTlVMTAorCQkJICAgKTsKKwkJfQorCSAgICB9 CisJICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkJLyogR2V0IGNvbmZpcm1hdGlvbiAqLworCSAg ICAgIHJldHVybih4KTsKKyAgICAgICAgICAgICAgaWYgKGNsc2tjb25ueCgxKSA8IDApIHsJLyog Q2xvc2UgY3VycmVudCBLZXJtaXQgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgICAgICAgaWYg KCBzc2hfdG1wc3RyICkgeworICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChzc2hfdG1wc3Ry LDAsc3RybGVuKHNzaF90bXBzdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICBtYWtlc3RyKCZz c2hfdG1wc3RyLE5VTEwpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg cmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBtYWtl c3RyKCZzc2hfaHN0LGxpbmUpOwkvKiBTdGFzaCBldmVyeXRoaW5nICovCisgICAgICAgICAgICAg IGlmIChzc2hfdG1wdWlkKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIXNsX3VpZF9zYXZlZCkg eworICAgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweShzbF91aWRidWYsdWlkYnVmLFVJREJV RkxFTik7CisgICAgICAgICAgICAgICAgICAgICAgc2xfdWlkX3NhdmVkID0gMTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh1aWRidWYsc3NoX3RtcHVp ZCxVSURCVUZMRU4pOworICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHVpZCxOVUxM KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoc3NoX3RtcHBvcnQpIHsKKyAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9wcnQsc3NoX3RtcHBvcnQpOworICAgICAgICAg ICAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBvcnQsTlVMTCk7CisgICAgICAgICAgICAgIH0gZWxz ZQorICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxOVUxMKTsKKworICAgICAgICAg ICAgICAvKiBTZXQgdGhlIFN1YnN5c3RlbSB0byBLZXJtaXQgKi8KKyAgICAgICAgICAgICAgc3No X2NhcyA9IDE7CisgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9jbWQsImtlcm1pdCIpOworCisg ICAgICAgICAgICAgIGlmICh0bXB2ZXIgPiAtMSkgeworI2lmbmRlZiBTU0hURVNUCisgICAgICAg ICAgICAgICAgICBpZiAoIXNsX3NzaF92ZXJfc2F2ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg ICBzbF9zc2hfdmVyID0gc3NoX3ZlcjsKKyAgICAgICAgICAgICAgICAgICAgICBzbF9zc2hfdmVy X3NhdmVkID0gMTsKKyAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBTU0hURVNUICovCisg ICAgICAgICAgICAgICAgICBzc2hfdmVyID0gdG1wdmVyOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIC8qIERpc2FibGUgWDExIEZvcndhcmRpbmcgKi8KKyNpZm5kZWYgU1NIVEVTVAor ICAgICAgICAgICAgICBpZiAoIXNsX3NzaF94Zndfc2F2ZWQpIHsKKyAgICAgICAgICAgICAgICAg IHNsX3NzaF94ZncgPSBzc2hfeGZ3OworICAgICAgICAgICAgICAgICAgc2xfc3NoX3hmd19zYXZl ZCA9IDE7CisgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBTU0hURVNUICovCisgICAgICAgICAg ICAgIHNzaF94ZncgPSAwOworCisgICAgICAgICAgICAgIGlmIChzc2hfdG1wc3RyKSB7CisgICAg ICAgICAgICAgICAgICBpZiAoc3NoX3RtcHN0clswXSkgeworICAgICAgICAgICAgICAgICAgICAg IGNrc3RybmNweShwd2J1Zixzc2hfdG1wc3RyLFBXQlVGTCsxKTsKKyAgICAgICAgICAgICAgICAg ICAgICBwd2ZsZyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgcHdjcnlwdCA9IDA7CisgICAg ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBwd2ZsZyA9IDA7Cisg ICAgICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfdG1wc3RyLE5VTEwpOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIG5ldHR5cGUgPSBORVRfU1NIOworICAgICAgICAgICAgICBpZiAo bWRtc2F2IDwgMCkKKyAgICAgICAgICAgICAgICAgIG1kbXNhdiA9IG1kbXR5cDsKKyAgICAgICAg ICAgICAgbWRtdHlwID0gLW5ldHR5cGU7CisgICAgICAgICAgICAgIHggPSAxOworCisjaWZuZGVm IE5PU1BMCisgICAgICAgICAgICBtYWtlc3RyKCZnX3Bzd2QscHdidWYpOwkvKiBTYXZlIGdsb2Jh bCBwd2J1ZiAqLworICAgICAgICAgICAgZ19wZmxnID0gcHdmbGc7CQkvKiBhbmQgZmxhZyAqLwor ICAgICAgICAgICAgZ19wY3B0ID0gcHdjcnlwdDsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisJICAg IC8qIExpbmUgcGFyYW1ldGVyIHRvIHR0b3BlbigpIGlzIGlnbm9yZWQgKi8KKwkgICAgayA9IHR0 b3BlbihsaW5lLCZ4LG1kbXR5cCwgMCk7CisJICAgIGlmIChrIDwgMCkgeworCQlwcmludGYoIj9V bmFibGUgdG8gY29ubmVjdCB0byAlc1xuIixzc2hfaHN0KTsKKwkJbWRtdHlwID0gbWRtc2F2Owor ICAgICAgICAgICAgICAgIHNscmVzdG9yKCk7CisJCXJldHVybihzdWNjZXNzID0gMCk7CisJICAg IH0KKwkgICAgZHVwbGV4ID0gMDsgICAgICAgICAgICAgLyogUmVtb3RlIGVjaG8gKi8KKwkgICAg Y2tzdHJuY3B5KHR0bmFtZSxsaW5lLFRUTkFNTEVOKTsgLyogUmVjb3JkIHRoZSBjb21tYW5kICov CisJICAgIGRlYnVnKEYxMTAsInNzaCB0dG5hbWUiLHR0bmFtZSwwKTsKKwkgICAgbWFrZXN0cigm c2xtc2csTlVMTCk7CS8qIE5vIFNFVCBMSU5FIGVycm9yIG1lc3NhZ2UgKi8KKwkgICAgY3h0eXBl ID0gQ1hUX1NTSDsKKyNpZm5kZWYgTk9ESUFMCisJICAgIGRpYWxzdGEgPSBESUFfVU5LOworI2Vu ZGlmIC8qIE5PRElBTCAqLworCSAgICBzdWNjZXNzID0gMTsJCS8qIFNFVCBMSU5FIHN1Y2NlZWRl ZCAqLworCSAgICBuZXR3b3JrID0gMTsJCS8qIE5ldHdvcmsgY29ubmVjdGlvbiAobm90IHNlcmlh bCkgKi8KKwkgICAgbG9jYWwgPSAxOwkJCS8qIExvY2FsIG1vZGUgKG5vdCByZW1vdGUpICovCisJ ICAgIGlmICgocmVsaWFibGUgIT0gU0VUX09GRiB8fCAhc2V0cmVsaWFibGUpKQorCSAgICAgIHJl bGlhYmxlID0gU0VUX09OOwkvKiBUcmFuc3BvcnQgaXMgcmVsaWFibGUgZW5kIHRvIGVuZCAqLwor I2lmZGVmIE9TMgorICAgICAgICAgICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0NPTk5FQ1QsIDAp OworI2VuZGlmIC8qIE9TMiAqLworCSAgICBzZXRmbG93KCk7CQkJLyogU2V0IGFwcHJvcHJpYXRl IGZsb3cgY29udHJvbCAqLworCisJICAgIGhhdmVsaW5lID0gMTsKKyNpZmRlZiBDS0xPR0RJQUwK KyNpZmRlZiBORVRDT05OCisJICAgIGRvbG9nbmV0KCk7CisjZW5kaWYgLyogTkVUQ09OTiAqLwor I2VuZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZuZGVmIE5PU1BMCisJICAgIGlmIChsb2NhbCkg eworCQlpZiAobm1hYykgewkJLyogQW55IG1hY3JvcyBkZWZpbmVkPyAqLworCQkgICAgaW50IGs7 CQkvKiBZZXMgKi8KKwkJICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX29wZW4iLG5tYWMpOyAvKiBM b29rIHRoaXMgdXAgKi8KKwkJICAgIGlmIChrID49IDApIHsJICAgICAgICAgICAgICAvKiBJZiBm b3VuZCwgKi8KKwkJCWlmIChkb2RvKGssc3NoX2hzdCwwKSA+IC0xKSAgIC8qIHNldCBpdCB1cCwg Ki8KKwkJCSAgcGFyc2VyKDEpOwkJICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KKwkJICAgIH0K KwkJfQorCSAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBMT0NVUwkJCisJICAgIGlm IChhdXRvbG9jdXMpCisJCXNldGxvY3VzKDEsMSk7CisjZW5kaWYgLyogTE9DVVMgKi8KKworCS8q IENvbW1hbmQgd2FzIGNvbmZpcm1lZCBzbyB3ZSBjYW4gcHJlLXBvcCBjb21tYW5kIGxldmVsLiAq LworCS8qIFRoaXMgaXMgc28gQ09OTkVDVCBtb2R1bGUgd29uJ3QgdGhpbmsgd2UncmUgZXhlY3V0 aW5nIGEgKi8KKwkvKiBzY3JpcHQgaWYgQ09OTkVDVCB3YXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4g dGhlIHNjcmlwdC4gKi8KKwkgICAgaWYgKGNtZGx2bCA+IDApCisJICAgICAgcHJlcG9wKCk7CisJ ICAgIHJldHVybihzdWNjZXNzID0gMSk7CisKKwkgIGRlZmF1bHQ6CisJICAgIHJldHVybigtMik7 CisJfQorICAgIH0KKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyNpZmRlZiBTRlRQX0JVSUxU SU4KKyAgICBpZiAoY3ggPT0gWFhTRlRQKSB7CQkJLyogU0ZUUCAoU2VjdXJlIFNoZWxsIEZpbGUg VHJhbnNmZXIpICovCisJZXh0ZXJuIGludCBuZXRzYXZlOworCWludCBrLCB4LCBoYXZlaG9zdCA9 IDAsIHRyaXBzID0gMDsKKyAgICAgICAgaW50ICAgIHRtcHZlciA9IC0xLCB0bXB4ZncgPSAtMTsK KyNpZm5kZWYgU1NIVEVTVAorICAgICAgICBleHRlcm4gaW50IHNsX3NzaF94ZncsIHNsX3NzaF94 Zndfc2F2ZWQ7CisgICAgICAgIGV4dGVybiBpbnQgc2xfc3NoX3Zlciwgc2xfc3NoX3Zlcl9zYXZl ZDsKKyNlbmRpZiAvKiBTU0hURVNUICovCisgICAgICAgIGV4dGVybiBpbnQgbWRtdHlwLCBtZG1z YXYsIGN4dHlwZSwgc2xfdWlkX3NhdmVkOworICAgICAgICBleHRlcm4gY2hhciAqIHNsbXNnOwor CWV4dGVybiBjaGFyIHVpZGJ1ZltdLCBzbF91aWRidWZbXTsKKyAgICAgICAgZXh0ZXJuIGNoYXIg cHdidWZbXSwgKiBnX3Bzd2Q7CisgICAgICAgIGV4dGVybiBpbnQgcHdmbGcsIHB3Y3J5cHQsIGdf cGZsZywgZ19wY3B0LCBub2xvY2FsOworCXN0cnVjdCBGREIgc3csIGt3LCBmbDsKKworICAgICAg ICBpZiAoc3NoX3RtcHN0cikKKwkgIG1lbXNldChzc2hfdG1wc3RyLDAsc3RybGVuKHNzaF90bXBz dHIpKTsKKyAgICAgICAgbWFrZXN0cigmc3NoX3RtcHN0cixOVUxMKTsKKyAgICAgICAgbWFrZXN0 cigmc3NoX3RtcHVpZCxOVUxMKTsKKyAgICAgICAgbWFrZXN0cigmc3NoX3RtcGNtZCxOVUxMKTsK KyAgICAgICAgbWFrZXN0cigmc3NoX3RtcHBvcnQsTlVMTCk7CisKKwljbWZkYmkoJmt3LAkJCS8q IDFzdCBGREIgLSBjb21tYW5kcyAqLworCSAgICAgICBfQ01LRVksCQkJLyogZmNvZGUgKi8KKwkg ICAgICAgImhvc3QgWyBwb3J0IF0sXG4gb3IgYWN0aW9uIiwgLyogaGxwbXNnICovCisJICAgICAg ICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KKwkgICAgICAgbnNmdHBrd3RhYiwJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxOiB0Ymwgc2l6 ZSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyOiAwID0ga2V5d29yZCAq LworCSAgICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8KKwkgICAgICAg c2Z0cGt3dGFiLAkJLyogS2V5d29yZCB0YWJsZSAqLworCSAgICAgICAmZmwJCQkvKiBQb2ludGVy IHRvIG5leHQgRkRCICovCisJICAgICAgICk7CisJY21mZGJpKCZmbCwJCQkvKiBIb3N0ICovCisJ ICAgICAgIF9DTUZMRCwJCQkvKiBmY29kZSAqLworCSAgICAgICAiIiwJCQkvKiBobHBtc2cgKi8K KwkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBhZGR0bCBzdHJp bmcgZGF0YSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAxICovCisJICAg ICAgIDAsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDIgKi8KKwkgICAgICAgeHhzdHJpbmcsCisJ ICAgICAgIE5VTEwsCisJICAgICAgIE5VTEwKKwkgICAgICAgKTsKKworCXggPSBjbWZkYigma3cp OworCWlmICh4ID09IC0zKSB7CisJICAgIHByaW50ZigiP3NmdHAgd2hhdD9cbiIpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKwlpZiAoeCA8IDApCisJICByZXR1cm4oeCk7CisJaGF2ZWhvc3QgPSAw OworCWlmIChjbXJlc3VsdC5mY29kZSA9PSBfQ01GTEQpIHsKKwkgICAgaGF2ZWhvc3QgPSAxOwor CSAgICBja3N0cm5jcHkobGluZSxjbXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7IC8qIEhvc3Ru YW1lICovCisJICAgIGNtcmVzdWx0Lm5yZXN1bHQgPSBTRlRQX09QTjsKKwl9CisJc3dpdGNoIChj bXJlc3VsdC5ucmVzdWx0KSB7CS8qIFNGVFAga2V5d29yZCAqLworCSAgY2FzZSBTRlRQX09QTjoJ CS8qIFNGVFAgT1BFTiAqLworCSAgICBpZiAoIWhhdmVob3N0KSB7CisJCWlmICgoeCA9IGNtZmxk KCJIb3N0IiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICByZXR1cm4oeCk7CisJCWNrc3RybmNw eShsaW5lLHMsTElOQlVGU0laKTsKKwkgICAgfQorCSAgICAvKiBQYXJzZSBbIHBvcnQgXSBbIHN3 aXRjaGVzIF0gKi8KKwkgICAgY21mZGJpKCZrdywJCQkvKiBTd2l0Y2hlcyAqLworCQkgICBfQ01L RVksCisJCSAgICJQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUsXG5vciBzd2l0Y2giLAorCQkg ICAiIiwKKwkJICAgIiIsCisJCSAgIG5zc2hrcm1vcG5zdywKKwkJICAgNCwKKwkJICAgeHhzdHJp bmcsCisJCSAgIHNzaGtybW9wbnN3LAorCQkgICAmZmwKKwkJICAgKTsKKwkgICAgY21mZGJpKCZm bCwJCQkvKiBQb3J0IG51bWJlciBvciBzZXJ2aWNlIG5hbWUgKi8KKwkJICAgX0NNRkxELAorCQkg ICAiIiwKKwkJICAgIiIsCisJCSAgICIiLAorCQkgICAwLAorCQkgICAwLAorCQkgICB4eHN0cmlu ZywKKwkJICAgTlVMTCwKKwkJICAgTlVMTAorCQkgICApOworCSAgICB0cmlwcyA9IDA7CQkJLyog RXhwbGFpbmVkIGJlbG93ICovCisJICAgIHdoaWxlICgxKSB7CQkJLyogUGFyc2UgcG9ydCBhbmQg c3dpdGNoZXMgKi8KKwkJeCA9IGNtZmRiKCZrdyk7CQkvKiBHZXQgYSBmaWVsZCAqLworCQlpZiAo eCA9PSAtMykJCS8qIFVzZXIgdHlwZWQgQ1Igc28gcXVpdCBmcm9tIGxvb3AgKi8KKwkJICBicmVh azsKKwkJaWYgKHggPCAwKQkJLyogT3RoZXIgcGFyc2UgZXJyb3IsIHBhc3MgaXQgYmFjayAqLwor CQkgIHJldHVybih4KTsKKwkJc3dpdGNoIChjbXJlc3VsdC5mY29kZSkgeyAvKiBGaWVsZCBvciBL ZXl3b3JkPyAqLworICAgICAgICAgICAgICAgICAgY2FzZSBfQ01GTEQ6CQkgIC8qIEZpZWxkICov CisgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0LGNtcmVzdWx0LnNyZXN1 bHQpOworCQkgICAgYnJlYWs7CisJCSAgY2FzZSBfQ01LRVk6CQkvKiBLZXl3b3JkICovCisJCSAg ICBzd2l0Y2ggKGNtcmVzdWx0Lm5yZXN1bHQpIHsJLyogV2hpY2ggb25lPyAqLworCQkgICAgICBj YXNlIFNTSFNXX1VTUjoJICAgICAgICAvKiAvVVNFUjogKi8KKwkJCWlmICghY21nYnJrKCkpIHsK KwkJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJ CQkgICAgcmV0dXJuKC05KTsKKwkJCX0KKwkJCWlmICgoeSA9IGNtZmxkKCJVc2VybmFtZSIsIiIs JnMseHhzdHJpbmcpKSA8IDApCisJCQkgIHJldHVybih5KTsKKwkJCXMgPSBicnN0cmlwKHMpOwor CQkJbWFrZXN0cigmc3NoX3RtcHVpZCxzKTsKKwkJCWJyZWFrOworICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgU1NIU1dfUFdEOgorCQkJaWYgKCFjbWdicmsoKSkgeworCQkJICAgIHByaW50Zigi P1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKwkJCSAgICByZXR1cm4oLTkp OworCQkJfQorCQkJZGVib2sgPSAwOworCQkJaWYgKCh4ID0gY21mbGQoIlBhc3N3b3JkIiwiIiwm cyx4eHN0cmluZykpIDwgMCkgeworCQkJICAgIGlmICh4ID09IC0zKSB7CisJCQkJbWFrZXN0cigm c3NoX3RtcHN0ciwiIik7CisJCQkgICAgfSBlbHNlIHsKKwkJCQlyZXR1cm4oeCk7CisJCQkgICAg fQorCQkJfSBlbHNlIHsKKwkJCSAgICBzID0gYnJzdHJpcChzKTsKKwkJCSAgICBpZiAoKHggPSAo aW50KXN0cmxlbihzKSkgPiBQV0JVRkwpIHsKKwkJCQltYWtlc3RyKCZzbG1zZywiSW50ZXJuYWwg ZXJyb3IiKTsKKwkJCQlwcmludGYoIj9Tb3JyeSwgdG9vIGxvbmcgLSBtYXggPSAlZFxuIixQV0JV RkwpOworCQkJCXJldHVybigtOSk7CisJCQkgICAgfQorCQkJICAgIG1ha2VzdHIoJnNzaF90bXBz dHIscyk7CisJCQl9CisJCQlicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFNTSFNX X1ZFUjoKKwkJCWlmICgoeCA9IGNtbnVtKCJOdW1iZXIiLCIiLDEwLCZ6LHh4c3RyaW5nKSkgPCAw KQorCQkJICByZXR1cm4oeCk7CisJCQlpZiAoeiA8IDEgfHwgeiA+IDIpIHsKKwkJCSAgICBwcmlu dGYoIj9PdXQgb2YgcmFuZ2U6ICVkXG4iLHopOworCQkJICAgIHJldHVybigtOSk7CisJCQl9Cisg ICAgICAgICAgICAgICAgICAgICAgICB0bXB2ZXIgPSB6OworCQkJYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oLTIpOwor CQkgICAgfQorCQl9CisJCWlmICh0cmlwcysrID09IDApIHsJLyogQWZ0ZXIgZmlyc3QgdGltZSB0 aHJvdWdoICovCisJCSAgICBjbWZkYmkoJmt3LAkJLyogb25seSBwYXJzZSBzd2l0Y2hlcywgbm90 IHBvcnQuICovCisJCQkgICBfQ01LRVksCisJCQkgICAiU3dpdGNoIiwKKwkJCSAgICIiLAorCQkJ ICAgIiIsCisJCQkgICBuc3Noa3Jtb3Buc3csCisJCQkgICA0LAorCQkJICAgeHhzdHJpbmcsCisJ CQkgICBzc2hrcm1vcG5zdywKKwkJCSAgIE5VTEwKKwkJCSAgICk7CisJCX0KKwkgICAgfQorCSAg ICBpZiAoKHggPSBjbWNmbSgpKSA8IDApCS8qIEdldCBjb25maXJtYXRpb24gKi8KKwkgICAgICBy ZXR1cm4oeCk7CisgICAgICAgICAgICAgIGlmIChjbHNrY29ubngoMSkgPCAwKSB7CS8qIENsb3Nl IGN1cnJlbnQgS2VybWl0IGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgIGlmICggc3No X3RtcHN0ciApIHsKKyAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoc3NoX3RtcHN0ciwwLHN0 cmxlbihzc2hfdG1wc3RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX3Rt cHN0cixOVUxMKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIHJldHVy bihzdWNjZXNzID0gMCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgbWFrZXN0cigm c3NoX2hzdCxsaW5lKTsJLyogU3Rhc2ggZXZlcnl0aGluZyAqLworICAgICAgICAgICAgICBpZiAo c3NoX3RtcHVpZCkgeworICAgICAgICAgICAgICAgICAgaWYgKCFzbF91aWRfc2F2ZWQpIHsKKyAg ICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkoc2xfdWlkYnVmLHVpZGJ1ZixVSURCVUZMRU4p OworICAgICAgICAgICAgICAgICAgICAgIHNsX3VpZF9zYXZlZCA9IDE7CisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodWlkYnVmLHNzaF90bXB1aWQsVUlE QlVGTEVOKTsKKyAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXB1aWQsTlVMTCk7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHNzaF90bXBwb3J0KSB7CisgICAgICAg ICAgICAgICAgICBtYWtlc3RyKCZzc2hfcHJ0LHNzaF90bXBwb3J0KTsKKyAgICAgICAgICAgICAg ICAgIG1ha2VzdHIoJnNzaF90bXBwb3J0LE5VTEwpOworICAgICAgICAgICAgICB9IGVsc2UKKyAg ICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9wcnQsTlVMTCk7CisKKyAgICAgICAgICAgICAg LyogU2V0IHRoZSBTdWJzeXN0ZW0gdG8gS2VybWl0ICovCisgICAgICAgICAgICAgIHNzaF9jYXMg PSAxOworICAgICAgICAgICAgICBtYWtlc3RyKCZzc2hfY21kLCJzZnRwIik7CisKKyAgICAgICAg ICAgICAgaWYgKHRtcHZlciA+IC0xKSB7CisjaWZuZGVmIFNTSFRFU1QKKyAgICAgICAgICAgICAg ICAgIGlmICghc2xfc3NoX3Zlcl9zYXZlZCkgeworICAgICAgICAgICAgICAgICAgICAgIHNsX3Nz aF92ZXIgPSBzc2hfdmVyOworICAgICAgICAgICAgICAgICAgICAgIHNsX3NzaF92ZXJfc2F2ZWQg PSAxOworICAgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyAgICAgICAg ICAgICAgICAgIHNzaF92ZXIgPSB0bXB2ZXI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgLyogRGlzYWJsZSBYMTEgRm9yd2FyZGluZyAqLworI2lmbmRlZiBTU0hURVNUCisgICAgICAg ICAgICAgIGlmICghc2xfc3NoX3hmd19zYXZlZCkgeworICAgICAgICAgICAgICAgICAgc2xfc3No X3hmdyA9IHNzaF94Znc7CisgICAgICAgICAgICAgICAgICBzbF9zc2hfeGZ3X3NhdmVkID0gMTsK KyAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIFNTSFRFU1QgKi8KKyAgICAgICAgICAgICAgc3No X3hmdyA9IDA7CisKKyAgICAgICAgICAgICAgaWYgKHNzaF90bXBzdHIpIHsKKyAgICAgICAgICAg ICAgICAgIGlmIChzc2hfdG1wc3RyWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgY2tzdHJu Y3B5KHB3YnVmLHNzaF90bXBzdHIsUFdCVUZMKzEpOworICAgICAgICAgICAgICAgICAgICAgIHB3 ZmxnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICBwd2NyeXB0ID0gMDsKKyAgICAgICAgICAg ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHB3ZmxnID0gMDsKKyAgICAgICAg ICAgICAgICAgIG1ha2VzdHIoJnNzaF90bXBzdHIsTlVMTCk7CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgbmV0dHlwZSA9IE5FVF9TU0g7CisgICAgICAgICAgICAgIGlmIChtZG1zYXYg PCAwKQorICAgICAgICAgICAgICAgICAgbWRtc2F2ID0gbWRtdHlwOworICAgICAgICAgICAgICBt ZG10eXAgPSAtbmV0dHlwZTsKKyAgICAgICAgICAgICAgeCA9IDE7CisKKyNpZm5kZWYgTk9TUEwK KyAgICAgICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxwd2J1Zik7ICAgICAgICAgICAgIC8qIFNhdmUg Z2xvYmFsIHB3YnVmICovCisgICAgICAgICAgICBnX3BmbGcgPSBwd2ZsZzsgICAgICAgICAgICAg ICAgICAgICAvKiBhbmQgZmxhZyAqLworICAgICAgICAgICAgZ19wY3B0ID0gcHdjcnlwdDsKKyNl bmRpZiAvKiBOT1NQTCAqLworCisJICAgIC8qIExpbmUgcGFyYW1ldGVyIHRvIHR0b3BlbigpIGlz IGlnbm9yZWQgKi8KKwkgICAgayA9IHR0b3BlbihsaW5lLCZ4LG1kbXR5cCwgMCk7CisJICAgIGlm IChrIDwgMCkgeworCQlwcmludGYoIj9VbmFibGUgdG8gY29ubmVjdCB0byAlc1xuIixzc2hfaHN0 KTsKKwkJbWRtdHlwID0gbWRtc2F2OworICAgICAgICAgICAgICAgIHNscmVzdG9yKCk7CisJCXJl dHVybihzdWNjZXNzID0gMCk7CisJICAgIH0KKwkgICAgZHVwbGV4ID0gMDsgICAgICAgICAgICAg LyogUmVtb3RlIGVjaG8gKi8KKwkgICAgY2tzdHJuY3B5KHR0bmFtZSxsaW5lLFRUTkFNTEVOKTsg LyogUmVjb3JkIHRoZSBjb21tYW5kICovCisJICAgIGRlYnVnKEYxMTAsInNzaCB0dG5hbWUiLHR0 bmFtZSwwKTsKKwkgICAgbWFrZXN0cigmc2xtc2csTlVMTCk7CS8qIE5vIFNFVCBMSU5FIGVycm9y IG1lc3NhZ2UgKi8KKwkgICAgY3h0eXBlID0gQ1hUX1NTSDsKKyNpZm5kZWYgTk9ESUFMCisJICAg IGRpYWxzdGEgPSBESUFfVU5LOworI2VuZGlmIC8qIE5PRElBTCAqLworCSAgICBzdWNjZXNzID0g MTsJCS8qIFNFVCBMSU5FIHN1Y2NlZWRlZCAqLworCSAgICBuZXR3b3JrID0gMTsJCS8qIE5ldHdv cmsgY29ubmVjdGlvbiAobm90IHNlcmlhbCkgKi8KKwkgICAgbG9jYWwgPSAxOwkJCS8qIExvY2Fs IG1vZGUgKG5vdCByZW1vdGUpICovCisJICAgIGlmICgocmVsaWFibGUgIT0gU0VUX09GRiB8fCAh c2V0cmVsaWFibGUpKQorCSAgICAgIHJlbGlhYmxlID0gU0VUX09OOwkvKiBUcmFuc3BvcnQgaXMg cmVsaWFibGUgZW5kIHRvIGVuZCAqLworI2lmZGVmIE9TMgorICAgICAgICAgICAgRGlhbGVyU2Vu ZChPUFRfS0VSTUlUX0NPTk5FQ1QsIDApOworI2VuZGlmIC8qIE9TMiAqLworCSAgICBzZXRmbG93 KCk7CQkJLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbCAqLworCisJICAgIGhhdmVsaW5l ID0gMTsKKyNpZmRlZiBDS0xPR0RJQUwKKyNpZmRlZiBORVRDT05OCisJICAgIGRvbG9nbmV0KCk7 CisjZW5kaWYgLyogTkVUQ09OTiAqLworI2VuZGlmIC8qIENLTE9HRElBTCAqLworCisjaWZuZGVm IE5PU1BMCisJICAgIGlmIChsb2NhbCkgeworCQlpZiAobm1hYykgewkJLyogQW55IG1hY3JvcyBk ZWZpbmVkPyAqLworCQkgICAgaW50IGs7CQkvKiBZZXMgKi8KKwkJICAgIGsgPSBtbG9vayhtYWN0 YWIsIm9uX29wZW4iLG5tYWMpOyAvKiBMb29rIHRoaXMgdXAgKi8KKwkJICAgIGlmIChrID49IDAp IHsJICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKwkJCWlmIChkb2RvKGssc3NoX2hzdCww KSA+IC0xKSAgIC8qIHNldCBpdCB1cCwgKi8KKwkJCSAgcGFyc2VyKDEpOwkJICAgICAgLyogYW5k IGV4ZWN1dGUgaXQgKi8KKwkJICAgIH0KKwkJfQorCSAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8K KyNpZmRlZiBMT0NVUwkJCisJICAgIGlmIChhdXRvbG9jdXMpCisJCXNldGxvY3VzKDEsMSk7Cisj ZW5kaWYgLyogTE9DVVMgKi8KKworCS8qIENvbW1hbmQgd2FzIGNvbmZpcm1lZCBzbyB3ZSBjYW4g cHJlLXBvcCBjb21tYW5kIGxldmVsLiAqLworCS8qIFRoaXMgaXMgc28gQ09OTkVDVCBtb2R1bGUg d29uJ3QgdGhpbmsgd2UncmUgZXhlY3V0aW5nIGEgKi8KKwkvKiBzY3JpcHQgaWYgQ09OTkVDVCB3 YXMgdGhlIGZpbmFsIGNvbW1hbmQgaW4gdGhlIHNjcmlwdC4gKi8KKwkgICAgaWYgKGNtZGx2bCA+ IDApCisJICAgICAgcHJlcG9wKCk7CisKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzZnRwX2RvX2lu aXQoKTsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKworCSAgY2FzZSBTRlRQX0NEOgorCSAg Y2FzZSBTRlRQX0NIR1JQOgorCSAgY2FzZSBTRlRQX0NITU9EOgorCSAgY2FzZSBTRlRQX0NIT1dO OgorCSAgY2FzZSBTRlRQX1JNOgorCSAgY2FzZSBTRlRQX0RJUjoKKwkgIGNhc2UgU0ZUUF9HRVQ6 CisJICBjYXNlIFNGVFBfTUtESVI6CisJICBjYXNlIFNGVFBfUFVUOgorCSAgY2FzZSBTRlRQX1BX RDoKKwkgIGNhc2UgU0ZUUF9SRU46CisJICBjYXNlIFNGVFBfUk1ESVI6CisJICBjYXNlIFNGVFBf TElOSzoKKwkgIGNhc2UgU0ZUUF9WRVI6CisJICAgIGlmICgoeSA9IGNtdHh0KCJjb21tYW5kIHBh cmFtZXRlcnMiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSAKKwkgICAgICByZXR1cm4oeSk7CisJICAg IGlmIChzc2hfdGNoaygpIDwgMCB8fCAhc3NoX2NhcyB8fCBzdHJjbXAoc3NoX2NtZCwic2Z0cCIp KSB7CisJCXByaW50ZigiP05vdCBjb25uZWN0ZWQgdG8gU0ZUUCBTZXJ2aWNlXG4iKTsKKwkJcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKwkgICAgfQorCSAgICBzdWNjZXNzID0gc2Z0cF9kb19jbWQoY21y ZXN1bHQubnJlc3VsdCxzKTsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MpOworCSAgZGVmYXVsdDoKKwkg ICAgcmV0dXJuKC0yKTsKKwl9CisgICAgfQorI2VuZGlmIC8qIFNGVFBfQlVJTFRJTiAqLworCisg ICAgaWYgKGN4ID09IFhYUkxPRykgewkJCS8qIFJMT0dJTiAqLworI2lmZGVmIFJMT0dDT0RFCisJ aW50IHgsejsKKyNpZmRlZiBPUzIKKwlpZiAoIXRjcF9hdmFpbCkgeworCSAgICBwcmludGYoIj9T b3JyeSwgZWl0aGVyIFRDUC9JUCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIG9yXG5c CituZWNlc3NhcnkgRExMcyBkaWQgbm90IGxvYWQuICBVc2UgU0hPVyBORVRXT1JLIHRvIGNoZWNr IG5ldHdvcmsgc3RhdHVzLlxuIgorCQkgICApOworCSAgICBzdWNjZXNzID0gMDsKKwkgICAgcmV0 dXJuKC05KTsKKwl9IGVsc2UgeworI2VuZGlmIC8qIE9TMiAqLworCSAgICB4ID0gbmV0dHlwZTsJ CS8qIFNhdmUgbmV0IHR5cGUgaW4gY2FzZSBvZiBmYWlsdXJlICovCisJICAgIHogPSB0dG5wcm90 bzsJCS8qIFNhdmUgcHJvdG9jb2wgaW4gY2FzZSBvZiBmYWlsdXJlICovCisJICAgIG5ldHR5cGUg PSBORVRfVENQQjsKKwkgICAgdHRucHJvdG8gPSBOUF9STE9HSU47CisJICAgIGlmICgoeSA9IHNl dGxpbihYWUhPU1QsMCwxKSkgPD0gMCkgeworCQluZXR0eXBlID0geDsJCS8qIEZhaWxlZCwgcmVz dG9yZSBuZXQgdHlwZS4gKi8KKwkJdHRucHJvdG8gPSB6OwkJLyogYW5kIHByb3RvY29sICovCisJ CXN1Y2Nlc3MgPSAwOworCSAgICB9CisJICAgIGRpZHNldGxpbisrOworI2lmZGVmIE9TMgorCX0K KyNlbmRpZiAvKiBPUzIgKi8KKwlyZXR1cm4oeSk7CisjZWxzZQorCXByaW50ZigiP1NvcnJ5LCBS TE9HSU4gaXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhpcyBjb3B5IG9mIEMtS2VybWl0LlxuIik7CisJ cmV0dXJuKC05KTsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAgIH0KKyNlbmRpZiAvKiBORVRD T05OICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisjaWZuZGVmIE5PWE1JVAorICAgIGlmIChj eCA9PSBYWFRSQSkgewkJCS8qIFRSQU5TTUlUICovCisJZXh0ZXJuIGludCB4ZnJ4bGE7CisJaW50 IGksIG4sIHhwaXBlID0gMCwgeGJpbmFyeSA9IDAsIHh4bGF0ZSA9IDEsIHh4bm93YWl0ID0gMCwg Z2V0dmFsOworCWludCB4eGVjaG8gPSAwOworCWludCBzY2FuID0gMTsKKwljaGFyIGM7CisJc3Ry dWN0IEZEQiBzZiwgc3csIHR4OwkJLyogRkRCcyBmb3IgcGFyc2UgZnVuY3Rpb25zICovCisjaWZu ZGVmIE5PQ1NFVFMKKwlleHRlcm4gaW50IHRjc190cmFuc3A7CQkvKiBUZXJtIGNoYXJzZXQgaXMg dHJhbnNwYXJlbnQgKi8KKyNlbHNlCisJaW50IHRjc190cmFuc3AgPSAxOworI2VuZGlmIC8qIE5P Q1NFVFMgKi8KKworI2lmZGVmIENPTU1FTlQKKwl4YmluYXJ5ID0gYmluYXJ5OwkJLyogRGVmYXVs dCB0ZXh0L2JpbmFyeSBtb2RlICovCisjZWxzZQorCXhiaW5hcnkgPSAwOwkJCS8qIERlZmF1bHQg aXMgdGV4dCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwl4eGVjaG8gPSB4bWl0eDsKKworCWNt ZmRiaSgmc3csCQkJLyogRmlyc3QgRkRCIC0gY29tbWFuZCBzd2l0Y2hlcyAqLworCSAgICAgICBf Q01LRVksCQkJLyogZmNvZGUgKi8KKwkgICAgICAgIkZpbGVuYW1lLCBvciBzd2l0Y2giLAkvKiBo bHBtc2cgKi8KKwkgICAgICAgIiIsCQkJLyogZGVmYXVsdCAqLworCSAgICAgICAiIiwJCQkvKiBh ZGR0bCBzdHJpbmcgZGF0YSAqLworCSAgICAgICBueG1pdHN3LAkJCS8qIGFkZHRsIG51bWVyaWMg ZGF0YSAxOiB0Ymwgc2l6ZSAqLworCSAgICAgICA0LAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAy OiA0ID0gY21zd2kgKi8KKwkgICAgICAgeHhzdHJpbmcsCQkvKiBQcm9jZXNzaW5nIGZ1bmN0aW9u ICovCisJICAgICAgIHhtaXRzdywJCQkvKiBLZXl3b3JkIHRhYmxlICovCisJICAgICAgICZzZgkJ CS8qIFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkgICAgICAgKTsKKwljbWZkYmkoJnNmLAkJCS8q IDJuZCBGREIgLSBmaWxlIHRvIHNlbmQgKi8KKwkgICAgICAgX0NNSUZJLAkJCS8qIGZjb2RlICov CisJICAgICAgICJGaWxlIHRvIHRyYW5zbWl0IiwJLyogaGxwbXNnICovCisJICAgICAgICIiLAkJ CS8qIGRlZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkg ICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMSAqLworCSAgICAgICAwLAkJCS8qIGFk ZHRsIG51bWVyaWMgZGF0YSAyICovCisJICAgICAgIHh4c3RyaW5nLAorCSAgICAgICBOVUxMLAor I2lmZGVmIFBJUEVTRU5ECisJICAgICAgICZ0eAorI2Vsc2UKKwkgICAgICAgTlVMTAorI2VuZGlm IC8qIFBJUEVTRU5EICovCisJICAgICAgICk7CisjaWZkZWYgUElQRVNFTkQKKyAgICAgICAgY21m ZGJpKCZ0eCwKKwkgICAgICAgX0NNVFhULAkJCS8qIGZjb2RlICovCisJICAgICAgICJDb21tYW5k IiwJCS8qIGhscG1zZyAqLworCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCisJICAgICAgICIi LAkJCS8qIGFkZHRsIHN0cmluZyBkYXRhICovCisJICAgICAgIDAsCQkJLyogYWRkdGwgbnVtZXJp YyBkYXRhIDEgKi8KKwkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMiAqLworCSAg ICAgICB4eHN0cmluZywKKwkgICAgICAgTlVMTCwKKwkgICAgICAgTlVMTAorCSAgICAgICApOwor I2VuZGlmIC8qIFBJUEVTRU5EICovCisKKwl3aGlsZSAoMSkgeworCSAgICB4ID0gY21mZGIoJnN3 KTsKKwkgICAgaWYgKHggPCAwKQorCSAgICAgIHJldHVybih4KTsKKwkgICAgaWYgKGNtcmVzdWx0 LmZjb2RlICE9IF9DTUtFWSkKKwkgICAgICBicmVhazsKKwkgICAgYyA9IGNtZ2JyaygpOwkJLyog SGF2ZSBzd2l0Y2gsIGdldCBicmVhayBjaGFyYWN0ZXIgKi8KKwkgICAgaWYgKChnZXR2YWwgPSAo YyA9PSAnOicgfHwgYyA9PSAnPScpKSAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgeworCQlw cmludGYoIj9UaGlzIHN3aXRjaCBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50XG4iKTsKKwkJcmV0 dXJuKC05KTsKKwkgICAgfQorCSAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBDTV9B UkcpKSB7CisJCXByaW50ZigiP1RoaXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsK KwkJcmV0dXJuKC05KTsKKwkgICAgfQorCSAgICBuID0gY21yZXN1bHQubnJlc3VsdDsJLyogTnVt ZXJpYyByZXN1bHQgPSBzd2l0Y2ggSUQgKi8KKwkgICAgc3dpdGNoIChuKSB7CQkvKiBQcm9jZXNz IHRoZSBzd2l0Y2ggKi8KKyNpZmRlZiBQSVBFU0VORAorCSAgICAgIGNhc2UgWE1JX0NNRDoJCS8q IFRyYW5zbWl0IGZyb20gYSBjb21tYW5kICovCisJCWlmIChub3B1c2gpIHsKKwkJICAgIHByaW50 ZigiP1NvcnJ5LCBzeXN0ZW0gY29tbWFuZCBhY2Nlc3MgaXMgZGlzYWJsZWRcbiIpOworCQkgICAg cmV0dXJuKC05KTsKKwkJfQorCQlzdy5obHBtc2cgPSAiQ29tbWFuZCwgb3Igc3dpdGNoIjsgLyog Q2hhbmdlIGhlbHAgbWVzc2FnZSAqLworCQl4cGlwZSA9IDE7CQkvKiAoTm8gd2F5IHRvIHVuZG8g dGhpcyBvbmUpICovCisJCWJyZWFrOworI2VuZGlmIC8qIFBJUEVTRU5EICovCisKKwkgICAgICBj YXNlIFhNSV9CSU46CQkvKiBCaW5hcnkgKi8KKwkJeGJpbmFyeSA9IDE7CisJCXh4bGF0ZSA9IDA7 CQkvKiBEb24ndCB0cmFuc2xhdGUgY2hhcnNldHMgKi8KKwkJc2NhbiA9IDA7CisJCWJyZWFrOwor CisJICAgICAgY2FzZSBYTUlfVFhUOgkJLyogVGV4dCAqLworCQl4YmluYXJ5ID0gMDsKKwkJeHhs YXRlID0gIXRjc190cmFuc3A7CS8qIFRyYW5zbGF0ZSBpZiBURVJNIENIQVIgbm90IFRSQU5TUCAq LworCQlzY2FuID0gMDsKKwkJYnJlYWs7CisKKwkgICAgICBjYXNlIFhNSV9UUkE6CQkvKiBUcmFu c3BhcmVudCB0ZXh0ICovCisJCXhiaW5hcnkgPSAwOworCQl4eGxhdGUgPSAwOwkJLyogQnV0IGRv bid0IHRyYW5zbGF0ZSBjaGFyc2V0cyAqLworCQlzY2FuID0gMDsKKwkJYnJlYWs7CisKKyNpZmRl ZiBDT01NRU5UCisJICAgICAgY2FzZSBYTUlfVlJCOgkJLyogL1ZFUkJPU0UgKi8KKwkgICAgICBj YXNlIFhNSV9RVUk6CQkvKiAvUVVJRVQgKi8KKwkJYnJlYWs7CQkJLyogKG5vdCBpbXBsZW1lbnRl ZCB5ZXQpICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisJICAgICAgY2FzZSBYTUlfTk9XOgkJ LyogL05PV0FJVCAqLworCQl4eG5vd2FpdCA9IDE7CisJCWJyZWFrOworCisJICAgICAgY2FzZSBY TUlfTk9FOgkJLyogL05PV0FJVCAqLworCQl4eGVjaG8gPSAwOworCQlicmVhazsKKworCSAgICAg IGRlZmF1bHQ6CisJCXJldHVybigtMik7CisJICAgIH0KKworCX0KKwlpZiAoY21yZXN1bHQuZmNv ZGUgIT0gX0NNSUZJICYmIGNtcmVzdWx0LmZjb2RlICE9IF9DTVRYVCkKKwkgIHJldHVybigtMik7 CisJY2tzdHJuY3B5KGxpbmUsY21yZXN1bHQuc3Jlc3VsdCxMSU5CVUZTSVopOyAvKiBGaWxlbmFt ZSAqLworCWlmICh6Zm5xZnAobGluZSxUTVBCVUZTSVosdG1wYnVmKSkKKwkgIGNrc3RybmNweShs aW5lLHRtcGJ1ZixMSU5CVUZTSVopOworCXMgPSBsaW5lOworCWlmICgoeSA9IGNtY2ZtKCkpIDwg MCkJCS8qIENvbmZpcm0gKi8KKwkgIHJldHVybih5KTsKKyNpZmRlZiBDS19BUEMKKwlpZiAoKGFw Y2FjdGl2ZSA9PSBBUENfTE9DQUwpIHx8CisJICAgICgoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUp ICYmICghKGFwY3N0YXR1cyAmIEFQQ19VTkNIKSkpKQorCSAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsK KyNlbmRpZiAvKiBDS19BUEMgKi8KKwlpZiAoY21yZXN1bHQubnJlc3VsdCAhPSAwKSB7CisJICAg IHByaW50ZigiP09ubHkgYSBzaW5nbGUgZmlsZSBtYXkgYmUgdHJhbnNtaXR0ZWRcbiIpOworCSAg ICByZXR1cm4oLTkpOworCX0KKyNpZmRlZiBQSVBFU0VORAorCWlmICh4cGlwZSkgeworCSAgICBz ID0gYnJzdHJpcChzKTsKKwkgICAgaWYgKCEqcykgeworCQlwcmludGYoIj9Tb3JyeSwgYSBjb21t YW5kIHRvIHNlbmQgZnJvbSBpcyByZXF1aXJlZFxuIik7CisJCXJldHVybigtOSk7CisJICAgIH0K KwkgICAgcGlwZXNlbmQgPSAxOworCX0KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisJaWYgKHNj YW4gJiYgKGZpbGVwZWVrCisjaWZuZGVmIE5PWEZFUgorCQkgICAgIHx8IHBhdHRlcm5zCisjZW5k aWYgLyogTk9YRkVSICovCisJCSAgICAgKSkgewkJLyogSWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSB0 eXBlICovCisJICAgIGludCBrLCB4OwkJCSAgICAgIC8qIHNjYW4gdGhlIGZpbGUgdG8gc2VlICov CisJICAgIHggPSAtMTsKKwkgICAgayA9IHNjYW5maWxlKHMsJngsbnNjYW5maWxlKTsKKwkgICAg aWYgKGsgPiAwKSB4YmluYXJ5ID0gKGsgPT0gRlRfQklOKSA/IFhZRlRfQiA6IFhZRlRfVDsKKwl9 CisJaWYgKCF4ZnJ4bGEpIHh4bGF0ZSA9IDA7CisJc3VjY2VzcyA9IHRyYW5zbWl0KHMsCisJCQkg ICAoY2hhcikgKHh4bm93YWl0ID8gJ1wwJyA6IChjaGFyKXhtaXRwKSwKKwkJCSAgIHh4bGF0ZSwK KwkJCSAgIHhiaW5hcnksCisJCQkgICB4eGVjaG8KKwkJCSAgICk7CisJcmV0dXJuKHN1Y2Nlc3Mp OworICAgIH0KKyNlbmRpZiAvKiBOT1hNSVQgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworICAgIGlm IChjeCA9PSBYWFRZUCAgfHwgY3ggPT0gWFhDQVQgfHwgY3ggPT0gWFhNT1JFIHx8CisJY3ggPT0g WFhIRUFEIHx8IGN4ID09IFhYVEFJTCkgeworCWludCBwYWdpbmcgPSAwLCBoYXZlbmFtZSA9IDAs IGhlYWQgPSAwLCB3aWR0aCA9IDA7CisJaW50IGhlaWdodCA9IDAsIGNvdW50ID0gMDsKKwljaGFy IHBmeGJ1Zls2NF0sICogcHJlZml4ID0gTlVMTDsKKwljaGFyIG91dGZpbGVbQ0tNQVhQQVRIKzFd OworCXN0cnVjdCBGREIgc2YsIHN3OworCWNoYXIgKiBwYXQgPSBOVUxMOworCWludCBpbmNzID0g MCwgb3V0Y3MgPSAwLCBjc2V0ID0gLTEsIG51bWJlciA9IDA7CisjaWZkZWYgVU5JQ09ERQorICAg ICAgICBjaGFyICogdG9jcyA9ICIiOworCWV4dGVybiBpbnQgZmlsZW9yZGVyOworI2lmZGVmIE9T MgorI2lmZGVmIE5UCisJY2hhciBndWlidWZbMTI4XSwgKiBndWlfdGl0bGUgPSBOVUxMOworCWlu dCAgZ3VpID0gMDsKKyNlbmRpZiAvKiBOVCAqLworI2lmbmRlZiBOT0NTRVRTCisJZXh0ZXJuIGlu dCB0Y3NyLCB0Y3NsOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBVTklDT0RFICovCisKKwlvdXRmaWxlWzBdID0gTlVMOworCisJaWYgKGN4ID09IFhY TU9SRSkKKwkgIHBhZ2luZyA9IDE7CisJZWxzZSBpZiAoY3ggPT0gWFhDQVQpCisJICBwYWdpbmcg PSAwOworCWVsc2UKKwkgIHBhZ2luZyA9ICh0eXBfcGFnZSA8IDApID8geGFza21vcmUgOiB0eXBf cGFnZTsKKwlpZiAocGFnaW5nIDwgMCkKKwkgIHBhZ2luZyA9IHNhdmVhc2s7CisKKwlpZiAoY3gg PT0gWFhIRUFEKSB7CisJICAgIGhlYWQgPSAxMDsKKwkgICAgY3ggPSBYWFRZUDsKKwl9IGVsc2Ug aWYgKGN4ID09IFhYVEFJTCkgeworCSAgICBoZWFkID0gLTEwOworCSAgICBjeCA9IFhYVFlQOwor CX0KKworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fdHlwKSkgewor CSAgICBwcmludGYoIj9Tb3JyeSwgVFlQRSBjb21tYW5kIGRpc2FibGVkXG4iKTsKKwkgICAgcmV0 dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworCisJY21mZGJpKCZzdywJCQkvKiAybmQg RkRCIC0gb3B0aW9uYWwgL1BBR0Ugc3dpdGNoICovCisJICAgICAgIF9DTUtFWSwJCQkvKiBmY29k ZSAqLworCSAgICAgICAiRmlsZW5hbWUgb3Igc3dpdGNoIiwJLyogaGxwbXNnICovCisJICAgICAg ICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJLyogYWRkdGwgc3RyaW5nIGRhdGEg Ki8KKwkgICAgICAgbnR5cGV0YWIsCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMTogdGJsIHNpemUg Ki8KKwkgICAgICAgNCwJCQkvKiBhZGR0bCBudW1lcmljIGRhdGEgMjogNCA9IGNtc3dpICovCisJ ICAgICAgIHh4c3RyaW5nLAkJLyogUHJvY2Vzc2luZyBmdW5jdGlvbiAqLworCSAgICAgICB0eXBl dGFiLAkJCS8qIEtleXdvcmQgdGFibGUgKi8KKwkgICAgICAgJnNmCQkJLyogUG9pbnRlciB0byBu ZXh0IEZEQiAqLworCSAgICAgICApOworCWNtZmRiaSgmc2YsCQkJLyogMXN0IEZEQiAtIGZpbGUg dG8gdHlwZSAqLworCSAgICAgICBfQ01JRkksCQkJLyogZmNvZGUgKi8KKwkgICAgICAgIiIsCQkJ LyogaGxwbXNnICovCisJICAgICAgICIiLAkJCS8qIGRlZmF1bHQgKi8KKwkgICAgICAgIiIsCQkJ LyogYWRkdGwgc3RyaW5nIGRhdGEgKi8KKwkgICAgICAgMCwJCQkvKiBhZGR0bCBudW1lcmljIGRh dGEgMSAqLworCSAgICAgICAwLAkJCS8qIGFkZHRsIG51bWVyaWMgZGF0YSAyICovCisJICAgICAg IHh4c3RyaW5nLAorCSAgICAgICBOVUxMLAorCSAgICAgICBOVUxMCisJICAgICAgICk7CisKKwl3 aGlsZSAoIWhhdmVuYW1lKSB7CisJICAgIHggPSBjbWZkYigmc3cpOwkJLyogUGFyc2Ugc29tZXRo aW5nICovCisJICAgIGRlYnVnKEYxMDEsInR5cGUgY21mZGIiLCIiLHgpOworCSAgICBkZWJ1ZyhG MTAxLCJ0eXBlIGNtcmVzdWx0LmZjb2RlIiwiIixjbXJlc3VsdC5mY29kZSk7CisJICAgIGRlYnVn KEYxMDEsInR5cGUgY21yZXN1bHQubnJlc3VsdCIsIiIsY21yZXN1bHQubnJlc3VsdCk7CisJICAg IGlmICh4IDwgMCkgewkJCS8qIEVycm9yICovCisJCWlmICh4ID09IC0zKSB7CisJCSAgICB4ID0g LTk7CisJCSAgICBwcmludGYoIj9GaWxlbmFtZSByZXF1aXJlZFxuIik7CisJCX0KKwkJcmV0dXJu KHgpOworCSAgICB9IGVsc2UgaWYgKGNtcmVzdWx0LmZjb2RlID09IF9DTUtFWSkgeworCQljaGFy IGM7IGludCBnZXR2YWw7CisJCWMgPSBjbWdicmsoKTsKKwkJZ2V0dmFsID0gKGMgPT0gJzonIHx8 IGMgPT0gJz0nKTsKKwkJaWYgKGdldHZhbCAmJiAhKGNtZ2t3ZmxncygpICYgQ01fQVJHKSkgewor CQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudFxuIik7 CisJCSAgICByZXR1cm4oLTkpOworCQl9CisjaWZkZWYgQ09NTUVOVAorCQlpZiAoIWdldHZhbCAm JiAoY21na3dmbGdzKCkgJiBDTV9BUkcpKSB7CisJCSAgICBwcmludGYoIj9UaGlzIHN3aXRjaCBy ZXF1aXJlcyBhbiBhcmd1bWVudFxuIik7CisJCSAgICAvKiBOb3QgaWYgaXQgaGFzIGEgZGVmYXVs dCEgKi8KKwkJICAgIHJldHVybigtOSk7CisJCX0KKyNlbmRpZiAvKiBDT01NRU5UICovCisJCXN3 aXRjaCAoY21yZXN1bHQubnJlc3VsdCkgeworI2lmZGVmIENLX1RUR1dTSVoKKwkJICBjYXNlIFRZ UF9QQUc6CisJCSAgICBwYWdpbmcgPSAxOworCQkgICAgYnJlYWs7CisKKwkJICBjYXNlIFRZUF9O T1A6CisJCSAgICBwYWdpbmcgPSAwOworCQkgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tfVFRHV1NJ WiAqLworCisJCSAgY2FzZSBUWVBfQ09VOgorCQkgICAgcGFnaW5nID0gMDsKKwkJICAgIGNvdW50 ID0gMTsKKwkJICAgIGJyZWFrOworCisJCSAgY2FzZSBUWVBfSEVBOgorCQkgIGNhc2UgVFlQX1RB SToKKwkJICAgIHkgPSAxMDsKKwkJICAgIGlmIChnZXR2YWwpCisJCSAgICAgIGlmICgoeCA9IGNt bnVtKCJOdW1iZXIgb2YgbGluZXMiLAorCQkJCSAgICAgIjEwIiwxMCwmeSx4eHN0cmluZykpIDwg MCkKKwkJCXJldHVybih4KTsKKwkJICAgIGhlYWQgPSAoY21yZXN1bHQubnJlc3VsdCA9PSBUWVBf VEFJKSA/IC15IDogeTsKKwkJICAgIGJyZWFrOworCisJCSAgY2FzZSBUWVBfV0lEOgorCQkgICAg eSA9IHR5cF93aWQgPiAtMSA/IHR5cF93aWQgOiBjbWRfY29sczsKKwkJICAgIGlmIChnZXR2YWwp CisJCSAgICAgIGlmICgoeCA9IGNtbnVtKCJDb2x1bW4gYXQgd2hpY2ggdG8gdHJ1bmNhdGUiLAor CQkJCSAgICAgY2tpdG9hKHkpLDEwLCZ5LHh4c3RyaW5nKSkgPCAwKQorCQkJcmV0dXJuKHgpOwor CQkgICAgd2lkdGggPSB5OworCQkgICAgYnJlYWs7CisKKyNpZmRlZiBLVUkKKwkJICBjYXNlIFRZ UF9ISUc6CisJCSAgICBpZiAoZ2V0dmFsKQorCQkgICAgICBpZiAoKHggPSBjbW51bSgiSGVpZ2h0 IG9mIEdVSSBkaWFsb2ciLAorCQkJCSAgICAgY2tpdG9hKHkpLDEwLCZ5LHh4c3RyaW5nKSkgPCAw KQorCQkJcmV0dXJuKHgpOworCQkgICAgaGVpZ2h0ID0geTsKKwkJICAgIGJyZWFrOworI2VuZGlm IC8qIEtVSSAqLworCisJCSAgY2FzZSBUWVBfUEFUOgorCQkgICAgaWYgKCFnZXR2YWwgJiYgKGNt Z2t3ZmxncygpICYgQ01fQVJHKSkgeworCQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMg YW4gYXJndW1lbnRcbiIpOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKwkJICAgIGlmICgoeCA9 IGNtZmxkKCJwYXR0ZXJuIiwiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkJICAgICAgcmV0dXJuKHgp OworCQkgICAgY2tzdHJuY3B5KHRtcGJ1ZixzLFRNUEJVRlNJWik7CisJCSAgICBwYXQgPSB0bXBi dWY7CisJCSAgICBicmVhazsKKworCQkgIGNhc2UgVFlQX1BGWDoKKwkJICAgIGlmICghZ2V0dmFs ICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKwkJCXByaW50ZigiP1RoaXMgc3dpdGNoIHJl cXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKwkJCXJldHVybigtOSk7CisJCSAgICB9CisJCSAgICBp ZiAoKHggPSBjbWZsZCgicHJlZml4IGZvciBlYWNoIGxpbmUiLCIiLCZzLHh4c3RyaW5nKSkgPCAw KQorCQkgICAgICByZXR1cm4oeCk7CisJCSAgICBpZiAoKGludClzdHJsZW4ocykgPiA2Mykgewor CQkJcHJpbnRmKCI/VG9vIGxvbmcgLSA2MyBtYXhcbiIpOworCQkJcmV0dXJuKC05KTsKKwkJICAg IH0KKwkJICAgIGNrc3RybmNweShwZnhidWYscyw2NCk7CisJCSAgICBwcmVmaXggPSBicnN0cmlw KHBmeGJ1Zik7CisJCSAgICBudW1iZXIgPSAwOworCQkgICAgYnJlYWs7CisKKyNpZmRlZiBLVUkK KwkJICBjYXNlIFRZUF9HVUk6CisJCSAgICBpZiAoIWdldHZhbCAmJiAoY21na3dmbGdzKCkgJiBD TV9BUkcpKSB7CisJCQlwcmludGYoIj9UaGlzIHN3aXRjaCByZXF1aXJlcyBhbiBhcmd1bWVudFxu Iik7CisJCQlyZXR1cm4oLTkpOworCQkgICAgfQorCQkgICAgaWYgKCh4ID0gY21mbGQoIkRpYWxv ZyBib3ggdGl0bGUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSB7CisJCQlpZiAoeCAhPSAtMykKKwkJ CSAgcmV0dXJuKHgpOworCQkgICAgfSBlbHNlIHsKKwkJCWlmICgoaW50KXN0cmxlbihzKSA+IDEy NykgeworCQkJICAgIHByaW50ZigiP1RvbyBsb25nIC0gMTI3IG1heFxuIik7CisJCQkgICAgcmV0 dXJuKC05KTsKKwkJCX0KKwkJCWNrc3RybmNweShndWlidWYscywxMjgpOworCQkJZ3VpX3RpdGxl ID0gYnJzdHJpcChndWlidWYpOworCQkgICAgfQorCQkgICAgZ3VpID0gMTsKKwkJICAgIGJyZWFr OworI2VuZGlmIC8qIEtVSSAqLworCisJCSAgY2FzZSBUWVBfTlVNOgkJLyogL05VTUJFUiAqLwor CQkgICAgbnVtYmVyID0gMTsKKwkJICAgIHByZWZpeCA9IE5VTEw7CisJCSAgICBicmVhazsKKwor I2lmZGVmIFVOSUNPREUKKwkJICBjYXNlIFRZUF9YUEE6CQkvKiAvVFJBTlNQQVJFTlQgKi8KKwkJ ICAgIGluY3MgPSAwOworCQkgICAgY3NldCA9IDA7CisJCSAgICBvdXRjcyA9IC0xOworCQkgICAg YnJlYWs7CisKKwkJICBjYXNlIFRZUF9YSU46CQkvKiAvQ0hBUkFDVEVSLVNFVDogKi8KKwkJICAg IGlmICghZ2V0dmFsICYmIChjbWdrd2ZsZ3MoKSAmIENNX0FSRykpIHsKKwkJCXByaW50ZigiP1Ro aXMgc3dpdGNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iKTsKKwkJCXJldHVybigtOSk7CisJCSAg ICB9CisJCSAgICBpZiAoKGluY3MgPSBjbWtleShmY3N0YWIsbmZpbGMsCisJCQkJICAgICAgImNo YXJhY3Rlci1zZXQgbmFtZSIsIiIseHhzdHJpbmcpKSA8IDApIHsKKwkJCWlmIChpbmNzID09IC0z KQkvKiBOb3RlOiBObyBkZWZhdWx0ICovCisJCQkgIGluY3MgPSAtMjsKKwkJCXJldHVybihpbmNz KTsKKwkJICAgIH0KKwkJICAgIGNzZXQgPSBpbmNzOworCQkgICAgYnJlYWs7CisKKwkJICBjYXNl IFRZUF9YVVQ6CQkvKiAvVFJBTlNMQVRFLVRPOiAqLworCQkgICAgaWYgKCFnZXR2YWwgJiYgKGNt Z2t3ZmxncygpICYgQ01fQVJHKSkgeworCQkJcHJpbnRmKCI/VGhpcyBzd2l0Y2ggcmVxdWlyZXMg YW4gYXJndW1lbnRcbiIpOworCQkJcmV0dXJuKC05KTsKKwkJICAgIH0KKyNpZmRlZiBPUzIKKwkJ ICAgIGlmICghaW5zZXJ2ZXIgJiYgIWs5NXN0ZG91dCkgeworCQkJdG9jcyA9ICJ1Y3MyIjsKKwkJ ICAgIH0gZWxzZSB7CisjaWZkZWYgQ0tPVU5JCisJCQl0b2NzID0gcmxvb2t1cCh0eHJ0YWIsbnR4 cnRhYix0Y3NsKTsKKyNlbHNlIC8qIENLT1VOSSAqLworCQkJZXh0ZXJuIHN0cnVjdCBrZXl0YWIg dHRjc3RhYltdOworCQkJZXh0ZXJuIGludCBudHhydGFiOworCQkJdG9jcyA9IHJsb29rdXAodHRj c3RhYixudGVybWMsdG9jcyk7CisJCQlpZiAoIXRvY3MpCisJCQkgIHRvY3MgPSBnZXRkY3NldCgp OworI2VuZGlmIC8qIENLT1VOSSAqLworICAgICAgICAgICAgICAgICAgICB9CisjZWxzZSAvKiBP UzIgKi8KKwkJICAgIHRvY3MgPSBnZXRkY3NldCgpOworI2VuZGlmIC8qIE9TMiAqLworCQkgICAg aWYgKChvdXRjcyA9IGNta2V5KGZjc3RhYixuZmlsYywKKwkJCQkgICAgICAgImNoYXJhY3Rlci1z ZXQiLHRvY3MseHhzdHJpbmcpKSA8IDApCisJCSAgICAgIHJldHVybihvdXRjcyk7CisJCSAgICBi cmVhazsKKyNlbmRpZiAvKiBVTklDT0RFICovCisJCSAgY2FzZSBUWVBfT1VUOgorCQkgICAgaWYg KCh4ID0gY21vZmkoIkZpbGUgZm9yIHJlc3VsdCBsaW5lcyIsIiIsCisJCQkJICAgJnMseHhzdHJp bmcpKSA8IDApCisJCSAgICAgIHJldHVybih4KTsKKwkJICAgIGNrc3RybmNweShvdXRmaWxlLHMs Q0tNQVhQQVRIKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0gZWxzZSBpZiAoY21yZXN1bHQu ZmNvZGUgPT0gX0NNSUZJKQorCSAgICAgIGhhdmVuYW1lID0gMTsKKwkgICAgZWxzZQorCSAgICAg IHJldHVybigtMik7CisJfQorCWlmIChoYXZlbmFtZSkgeworCSAgICBja3N0cm5jcHkobGluZSxj bXJlc3VsdC5zcmVzdWx0LExJTkJVRlNJWik7CisJICAgIHkgPSBjbXJlc3VsdC5ucmVzdWx0Owor CX0gZWxzZSB7CisJICAgIGlmICgoeCA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJnkseHhzdHJp bmcpKSA8IDApIHsKKwkJaWYgKHggPT0gLTMpIHsKKwkJICAgIHByaW50ZigiP05hbWUgb2YgYW4g ZXhpc3RpbmcgZmlsZSByZXF1aXJlZFxuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9IGVsc2Ug cmV0dXJuKHgpOworCSAgICB9CisJICAgIGNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsKKwl9 CisJaWYgKHkgIT0gMCkgeworCSAgICBwcmludGYoIj9BIHNpbmdsZSBmaWxlIHBsZWFzZVxuIik7 CisJICAgIHJldHVybigtOSk7CisJfQorI2lmZGVmIEtVSQorCWlmICggb3V0ZmlsZVswXSAmJiBn dWkgKSB7CisJICAgIHByaW50ZigiPy9HVUkgYW5kIC9PVVRQVVQgYXJlIGluY29tcGF0aWJsZVxu Iik7CisJICAgIHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIEtVSSAqLworCisJaWYgKCh5ID0g Y21jZm0oKSkgPCAwKQkJLyogQ29uZmlybSB0aGUgY29tbWFuZCAqLworCSAgcmV0dXJuKHkpOwor CisjaWZkZWYgVU5JQ09ERQorCWZpbGVvcmRlciA9IC0xOworCWlmIChjc2V0IDwgMCAmJiBmaWxl cGVlaykgewkvKiBJZiBubyBjaGFyc2V0IHN3aXRjaGVzIGdpdmVuICovCisJICAgIGludCBrLCB4 ID0gLTE7CisJICAgIGsgPSBzY2FuZmlsZShsaW5lLCZ4LG5zY2FuZmlsZSk7IC8qIENhbGwgZmls ZSBhbmFseXplciAqLworCSAgICBkZWJ1ZyhGMTExLCJ0eXBlIHNjYW5maWxlIixsaW5lLGspOwor CSAgICBkZWJ1ZyhGMTAxLCJ0eXBlIHNjYW5maWxlIGZsYWciLCIiLHgpOworCSAgICBzd2l0Y2go aykgeworCSAgICAgIGNhc2UgRlRfVVRGODoJCS8qIHdoaWNoIGNhbiBkZXRlY3QgVVRGLTguLi4g Ki8KKwkJY3NldCA9IDA7CisJCWluY3MgPSBGQ19VVEY4OworCQlicmVhazsKKwkgICAgICBjYXNl IEZUX1VDUzI6CQkvKiBhbmQgVUNTLTIuLi4gKi8KKwkJY3NldCA9IDA7CisJCWluY3MgPSBGQ19V Q1MyOworCQlmaWxlb3JkZXIgPSB4OwkJLyogZXZlbiBpZiB0aGVyZSBpcyBubyBCT00uICovCisJ CWRlYnVnKEYxMDEsInR5cGUgZmlsZW9yZGVyIiwiIixmaWxlb3JkZXIpOworCQlicmVhazsKKwkg ICAgfQorCX0KKyNpZmRlZiBPUzIKKyAgICAgICAgaWYgKGNzZXQgPCAwKSB7CQkJLyogSWYgaW5w dXQgY2hhcnNldCBzdGlsbCBub3Qga25vd24gKi8KKyNpZmRlZiBDS09VTkkKKyAgICAgICAgICAg IHRvY3MgPSBybG9va3VwKHR4cnRhYixudHhydGFiLHRjc2wpOworI2Vsc2UgLyogQ0tPVU5JICov CisgICAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0dGNzdGFiW107CisgICAgICAgICAg ICBleHRlcm4gaW50IG50eHJ0YWI7CisgICAgICAgICAgICB0b2NzID0gcmxvb2t1cCh0dGNzdGFi LG50ZXJtYyxpbmNzKTsKKyAgICAgICAgICAgIGlmICghdG9jcykKKwkgICAgICB0b2NzID0gZ2V0 ZGNzZXQoKTsKKyNlbmRpZiAvKiBDS09VTkkgKi8KKyAgICAgICAgICAgIGluY3MgPSBsb29rdXAo ZmNzdGFiLHRvY3MsbmZpbGMsJngpOworICAgICAgICB9CisjZW5kaWYgLyogT1MyICovCisKKyAg ICAgICAgaWYgKG91dGNzID09IDAgJiYgaW5jcyAhPSAwKSB7CS8qIFN1cHBseSBkZWZhdWx0IHRh cmdldCBjaGFyc2V0ICovCisJICAgIGludCB4ID0gMDsJCQkvKiBpZiBzd2l0Y2ggbm90IGdpdmVu LiAqLworCSAgICB0b2NzID0gZ2V0ZGNzZXQoKTsKKwkgICAgb3V0Y3MgPSBsb29rdXAoZmNzdGFi LHRvY3MsbmZpbGMsJngpOworCX0KKyNlbHNlICAvKiAhVU5JQ09ERSAqLworCWlmIChjc2V0IDwg MCkgaW5jcyA9IG91dGNzID0gMDsKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKwlpZiAob3V0Zmls ZVswXSAmJiBwYWdpbmcpCS8qIFRoaXMgY29tYmluYXRpb24gbWFrZXMgbm8gc2Vuc2UgKi8KKwkg IHBhZ2luZyA9IDA7CQkJLyogc28gdHVybiBvZmYgcGFnaW5nICovCisKKyNpZmRlZiBLVUkKKwkv KiBObyBwYWdpbmcgd2hlbiBkaWFsb2cgaXMgdXNlZCAqLworCWlmICggZ3VpICYmIHBhZ2luZyAp CisJICBwYWdpbmcgPSAwOworCisJaWYgKCAhZ3VpICYmIGhlaWdodCApIHsKKwkgICAgcHJpbnRm KCI/VGhlIC9IRUlHSFQgc3dpdGNoIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCAvR1VJXG4iKTsK KwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogS1VJICovCisKKwlpZiAoY291bnQpIHBh Z2luZyA9IC0xOworCWRlYnVnKEYxMTEsInR5cGUiLGxpbmUscGFnaW5nKTsKKyNpZmRlZiBLVUkK KwlpZiAoIGd1aSApIHsKKwkgICAgcyA9IChjaGFyICopMTsgICAgLyogb2ssIGl0cyBhbiB1Z2x5 IGhhY2sgKi8KKwkgICAgaWYgKGd1aV90ZXh0X3BvcHVwX2NyZWF0ZShndWlfdGl0bGUgPworCQkJ CSAgICAgIGd1aV90aXRsZSA6IGxpbmUsIGhlaWdodCx3aWR0aCkgPCAwKSB7CisJCXByaW50Zigi Py9HVUkgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbVxuIik7CisJCWd1aSA9IDA7CisJCXJl dHVybigtOSk7CisJICAgIH0KKwkgICAgd2lkdGggPSAwOworCX0gZWxzZQorI2VuZGlmIC8qIEtV SSAqLworCSAgcyA9IG91dGZpbGU7CisJc3VjY2VzcyA9CisJICBkb3R5cGUobGluZSxwYWdpbmcs MCxoZWFkLHBhdCx3aWR0aCxwcmVmaXgsaW5jcyxvdXRjcyxzLG51bWJlcik7CisJcmV0dXJuKHN1 Y2Nlc3MpOworICAgIH0KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PQ1NFVFMK KyAgICBpZiAoY3ggPT0gWFhYTEEpIHsJCQkvKiBUUkFOU0xBVEUgZmlsZSdzIGNoYXJzZXQgKi8K KwlfUFJPVE9UWVAgKGludCBkb3hsYXRlLCAoIHZvaWQgKSApOworCXJldHVybihkb3hsYXRlKCkp OworICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyAgICBpZiAoY3ggPT0gWFhWRVIpIHsJ CQkvKiBWRVJTSU9OICovCisJaW50IG4gPSAwOworCWV4dGVybiBjaGFyICogY2tfcGF0Y2gsICog Y2tfc190ZXN0OworI2lmZGVmIENPTU1FTlQKKwlleHRlcm4gaW50IGhtdG9wbGluZTsKKyNlbmRp ZiAvKiBDT01NRU5UICovCisJaWYgKCh5ID0gY21jZm0oKSkgPCAwKQorICAgICAgICAgIHJldHVy bih5KTsKKworI2lmZGVmIENLXzY0QklUCisJcHJpbnRmKCJcbiVzLCBmb3IlcyAoNjQtYml0KVxu IE51bWVyaWM6ICVsZCIsdmVyc2lvLGNreHN5cyx2ZXJudW0pOworI2Vsc2UKKwlwcmludGYoIlxu JXMsIGZvciVzXG4gTnVtZXJpYzogJWxkIix2ZXJzaW8sY2t4c3lzLHZlcm51bSk7CisjZW5kaWYJ LyogQ0tfNjRCSVQgKi8KKwlwcmludGYoIlxuXG4iKTsKKyAgICAgICAgcHJpbnRmKCJBdXRob3Jz OlxuIik7CisJcHJpbnRmKCIgRnJhbmsgZGEgQ3J1eiwgQ29sdW1iaWEgVW5pdmVyc2l0eVxuIik7 CisgICAgICAgIHByaW50ZigiIEplZmZyZXkgRXJpYyBBbHRtYW4sIFNlY3VyZSBFbmRwb2ludHMs IEluYy4gJXNcbiIsCisJICAgICAgICI8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4iCisJ ICAgICAgICk7CisJcHJpbnRmKCIgQ29udHJpYnV0aW9ucyBmcm9tIG1hbnkgb3RoZXJzLlxuIik7 CisJbiA9IDc7CisJaWYgKCpja19zX3Rlc3QpIHsKKwkgICAgcHJpbnRmKCJcblRISVMgSVMgQSBU RVNUIFZFUlNJT04sIE5PVCBGT1IgUFJPRFVDVElPTiBVU0UuXG4iKTsKKwkgICAgbiArPSAyOwor CX0KKwlpZiAoKmNrX3BhdGNoKSB7CisJICAgIHByaW50ZigiIFBhdGNoZXM6ICVzXG4iLCBja19w YXRjaCk7CisJICAgIG4rKzsKKwl9CisJcHJpbnRmKCIgVHlwZSBDT1BZUklHSFQgZm9yIGNvcHly aWdodCBhbmQgbGljZW5zZS5cblxuIik7CisjaWZkZWYgT1MyCisJc2hvcmVnKCk7CisjZWxzZQor I2lmZGVmIENPTU1FTlQKKwlobXRvcGxpbmUgPSBuKzE7CisJaG1zZ2EoY29weXJpZ2h0KTsKKwlo bXRvcGxpbmUgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwly ZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIH0KKworICAgIGlmIChjeCA9PSBYWENQUikgewkJCS8q IENPUFlSSUdIVCBvciBMSUNFTlNFICovCisgICAgICAgIF9QUk9UT1RZUCggaW50IGhtc2dhYSwg KGNoYXIgKiBbXSwgY2hhciAqKSApOworICAgICAgICBleHRlcm4gY2hhciAqIGNrX2NyeWVhcjsK KwlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisgICAgICAgICAgcmV0dXJuKHkpOworCWhtc2dhYShj b3B5cmlnaHQsY2tfY3J5ZWFyKTsKKwlyZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIH0KKworI2lm bmRlZiBNQUMJCQkJLyogT25seSBmb3IgbXVsdGl1c2VyIHN5c3RlbXMgKi8KKyNpZm5kZWYgT1My CisjaWZuZGVmIE5PRlJJTExTCisgICAgaWYgKGN4ID09IFhYV0hPKSB7CQkJLyogV0hPICovCisJ Y2hhciAqd2M7CisjaWZkZWYgSUtTRAorCWlmIChpbnNlcnZlciAmJiAhRU5BQkxFRChlbl93aG8p KSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBXSE8gY29tbWFuZCBkaXNhYmxlZFxuIik7CisJICAg IHJldHVybigtOSk7CisJfQorI2VuZGlmIC8qIElLU0QgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAor CWlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworCWlmIChub3B1c2gpIHsKKwkgICAg cHJpbnRmKCI/U29ycnksIHdobyBub3QgYWxsb3dlZFxuIik7CisJICAgIHJldHVybihzdWNjZXNz ID0gMCk7CisJfQorICAgICAgICB4c3lzdGVtKFdIT0NNRCk7CisjZWxzZQorCWlmICgoeSA9IGNt dHh0KCJ1c2VyIG5hbWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKSByZXR1cm4oeSk7CisgICAgICAg IGlmIChub3B1c2gpIHsKKwkgICAgcHJpbnRmKCI/U29ycnksIFdITyBjb21tYW5kIGRpc2FibGVk XG4iKTsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKwl9CisJaWYgKCEod2MgPSBnZXRlbnYo IkNLX1dITyIpKSkgd2MgPSBXSE9DTUQ7CisJaWYgKHdjKQorCSAgaWYgKChpbnQpIHN0cmxlbih3 YykgPiAwKSB7CisJICAgICAgY2ttYWttc2cobGluZSxMSU5CVUZTSVosd2MsIiAiLHMsTlVMTCk7 CisJICAgICAgeHN5c3RlbShsaW5lKTsKKwkgIH0KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLwor CXJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorI2VuZGlmIC8qIE5PRlJJTExTICovCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogTUFDICovCisKKyNpZm5kZWYgTk9GUklMTFMKKyAgICBp ZiAoY3ggPT0gWFhXUkkgfHwgY3ggPT0gWFhXUkwgfHwgY3ggPT0gWFhXUkJMKSB7IC8qIFdSSVRF ICovCisJaW50IHgseTsJCQkvKiBPbiBzdGFjayBpbiBjYXNlIG9mIFxmZXhlYygpICovCisJaWYg KCh4ID0gY21rZXkod3JpdGFiLG53cmksInRvIGZpbGUgb3IgbG9nIiwiIix4eHN0cmluZykpIDwg MCkgeworCSAgICBpZiAoeCA9PSAtMykgcHJpbnRmKCI/V3JpdGUgdG8gd2hhdD9cbiIpOworCSAg ICByZXR1cm4oeCk7CisJfQorCWlmICgoeSA9IGNtdHh0KCJ0ZXh0IiwiIiwmcyx4eHN0cmluZykp IDwgMCkgcmV0dXJuKHkpOworCXMgPSBicnN0cmlwKHMpOworCXN3aXRjaCAoeCkgeworCSAgY2Fz ZSBMT0dEOiB5ID0gWkRGSUxFOyBicmVhazsKKwkgIGNhc2UgTE9HUDogeSA9IFpQRklMRTsgYnJl YWs7CisjaWZuZGVmIE5PTE9DQUwKKwkgIGNhc2UgTE9HUzogeSA9IFpTRklMRTsgYnJlYWs7Cisj ZW5kaWYgLyogTk9MT0NBTCAqLworCSAgY2FzZSBMT0dUOiB5ID0gWlRGSUxFOyBicmVhazsKKyNp Zm5kZWYgTk9TUEwKKwkgIGNhc2UgTE9HVzogeSA9IFpXRklMRTsgYnJlYWs7CisjZW5kaWYgLyog Tk9TUEwgKi8KKwkgIGNhc2UgTE9HWDoJCQkvKiBTQ1JFRU4gKHN0ZG91dCkgKi8KKwkgIGNhc2Ug TE9HRToJCQkvKiBFUlJPUiAgKHN0ZGVycikgKi8KKwkgICAgaWYgKHggPT0gTE9HRSkgeworCQlk ZWJ1ZyhGMTEwLAorCQkgICAgICAoY3ggPT0gWFhXUkwpID8gIldSSVRFTE4gRVJST1IiIDogIldS SVRFIEVSUk9SIiwgcywwKTsKKwkJZnByaW50ZihzdGRlcnIsIiVzJXMiLHMsKGN4ID09IFhYV1JM KSA/ICJcbiIgOiAiIik7CisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMTAsCisJCSAgICAgIChj eCA9PSBYWFdSTCkgPyAiV1JJVEVMTiBTQ1JFRU4iIDogIldSSVRFIFNDUkVFTiIsIHMsMCk7CisJ CXByaW50ZigiJXMlcyIscywoY3ggPT0gWFhXUkwpID8gIlxuIiA6ICIiKTsKKwkgICAgfQorCSAg ICByZXR1cm4oc3VjY2VzcyA9IDEpOworCSAgZGVmYXVsdDogcmV0dXJuKC0yKTsKKwl9CisJaWYg KGNoa2ZuKHkpID4gMCkgeworCSAgICB4ID0gKGN4ID09IFhYV1JJKSA/IHpzb3V0KHkscykgOiB6 c291dGwoeSxzKTsKKwkgICAgZGVidWcoRjExMSwiV1JJVEUiLAorCQkgIChjeCA9PSBYWFdSSSkg PyAienNvdXQiIDogInpzb3V0bCIsCisJCSAgeCk7CisJICAgIGlmICh4IDwgMCkgcHJpbnRmKCI/ V3JpdGUgZXJyb3JcbiIpOworCX0gZWxzZSB7CisJICAgIHggPSAtMTsKKwkgICAgcHJpbnRmKCI/ RmlsZSBvciBsb2cgbm90IG9wZW5cbiIpOworCX0KKwlkZWJ1ZyhGMTAxLCJXUklURSB4IiwiIix4 KTsKKwlyZXR1cm4oc3VjY2VzcyA9ICh4ID09IDApID8gMSA6IDApOworICAgIH0KKyNlbmRpZiAv KiBOT0ZSSUxMUyAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChjeCA9PSBYWEFTQyB8fCBj eCA9PSBYWEJJTikgeworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworI2lmZGVm IE5FV0ZUUAorLyoKKyAgTWFrZSBDLUtlcm1pdCB3b3JrIGxpa2Ugb3RoZXIgZnRwIGNsaWVudHMs IHdoZXJlCisgIHRoZSBBU0NJSSAoVEVYVCkgYW5kIEJJTkFSWSBjb21tYW5kcyBhcmUgZ2xvYmFs IHNldHRpbmdzLgorKi8KKwlpZiAoZnRwaXNvcGVuKCkpIHsKKwkgICAgZG9mdHBnbG9iYWx0eXBl KChjeCA9PSBYWEFTQykgPyBYWUZUX1QgOiBYWUZUX0IpOworCSAgICAvKiBGYWxsIHRocnUtLXRo ZSBjb21tYW5kIGl0IHNob3VsZCBhcHBseSB0byBib3RoIEZUUCBhbmQgS2VybWl0ICovCisJICAg IC8qIHJldHVybihzdWNjZXNzID0gMSk7ICovCisJfQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCisJ eGZlcm1vZGUgPSBYTU9ERV9NOwkJLyogU2V0IG1hbnVhbCBLZXJtaXQgdHJhbnNmZXIgbW9kZSAq LworCWJpbmFyeSA9IChjeCA9PSBYWEFTQykgPyBYWUZUX1QgOiBYWUZUX0I7CisJcmV0dXJuKHN1 Y2Nlc3MgPSAxKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisKKyAgICBpZiAoY3ggPT0g WFhDTFMpIHsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwl5ID0gY2tfY2xz KCk7CisJcmV0dXJuKHN1Y2Nlc3MgPSAoeSA+IC0xKSA/IDEgOiAwKTsKKyAgICB9CisKKyNpZmRl ZiBDS19NS0RJUgorICAgIGlmIChjeCA9PSBYWE1LRElSIHx8IGN4ID09IFhYTE1LRCkgeworCWNo YXIgKnA7CisjaWZkZWYgTE9DVVMKKwlpZiAoIWxvY3VzICYmIGN4ICE9IFhYTE1LRCkgeworI2lm ZGVmIE5PWEZFUgorCSAgICByZXR1cm4oLTIpOworI2Vsc2UKKwkgICAgcmV0dXJuKGRvcm10KFha TUtEKSk7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBMT0NVUyAq LworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJMRUQoZW5fbWtkKSkgeworCSAg ICBwcmludGYoIj9Tb3JyeSwgZGlyZWN0b3J5IGNyZWF0aW9uIGlzIGRpc2FibGVkXG4iKTsKKwkg ICAgcmV0dXJuKC05KTsKKwl9CisjZW5kaWYgLyogSUtTRCAqLworCWlmICgoeCA9IGNtZmxkKCJO YW1lIGZvciBuZXcgZGlyZWN0b3J5IiwiIiwmcyx4eHN0cmluZykpIDwgMCkgeworCSAgICBpZiAo eCAhPSAtMykgeworCQlyZXR1cm4oeCk7CisJICAgIH0gZWxzZSB7CisJCXByaW50ZigiP0RpcmVj dG9yeSBuYW1lIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuKC05KTsKKwkgICAgfQorCX0KKwlja3N0 cm5jcHkobGluZSxzLExJTkJVRlNJWik7CisJcyA9IGxpbmU7CisJaWYgKCh4ID0gY21jZm0oKSkg PCAwKSByZXR1cm4oeCk7CisJcyA9IGJyc3RyaXAocyk7CisJYmdjaGsoKTsJCQkvKiBTZXQgbXNn ZmxnICovCisJeCA9IGNrbWtkaXIoMCxzLCZwLG1zZ2ZsZywwKTsKKyNpZmRlZiBDT01NRU5UCisJ aWYgKG1zZ2ZsZyAmJiB4ID09IDApCisJICBwcmludGYoIj9EaXJlY3RvcnkgYWxyZWFkeSBleGlz dHNcbiIpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlyZXR1cm4oc3VjY2VzcyA9ICh4IDwgMCkg PyAwIDogMSk7CisgICAgfQorICAgIGlmIChjeCA9PSBYWFJNRElSIHx8IGN4ID09IFhYTFJNRCkg eyAvKiBSTURJUiAqLworCWNoYXIgKnA7CisjaWZkZWYgTE9DVVMKKwlpZiAoIWxvY3VzICYmIGN4 ICE9IFhYTFJNRCkgeworI2lmZGVmIE5PWEZFUgorCSAgICByZXR1cm4oLTIpOworI2Vsc2UKKwkg ICAgcmV0dXJuKGRvcm10KFhaUk1EKSk7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgICAgIH0K KyNlbmRpZiAvKiBMT0NVUyAqLworI2lmZGVmIElLU0QKKwlpZiAoaW5zZXJ2ZXIgJiYgIUVOQUJM RUQoZW5fcm1kKSkgeworCSAgICBwcmludGYoIj9Tb3JyeSwgZGlyZWN0b3J5IHJlbW92YWwgaXMg ZGlzYWJsZWRcbiIpOworCSAgICByZXR1cm4oLTkpOworCX0KKyNlbmRpZiAvKiBJS1NEICovCisJ aWYgKCh4ID0gY21kaXIoIk5hbWUgb2YgZGlyZWN0b3J5IHRvIGJlIHJlbW92ZWQiLCIiLCZzLHh4 c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOworCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0la KTsKKwlzID0gbGluZTsKKwlpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKwlzID0g YnJzdHJpcChzKTsKKwl4ID0gY2tta2RpcigxLHMsJnAsbXNnZmxnLDApOworCXJldHVybihzdWNj ZXNzID0gKHggPCAwKSA/IDAgOiAxKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfTUtESVIgKi8KKwor I2lmZGVmIFROQ09ERQorICAgIGlmIChjeCA9PSBYWFRFTE9QKQorICAgICAgcmV0dXJuKGRvdGVs b3B0KCkpOworI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZuZGVmIE5PUFVTSAorICAgIGlmIChj eCA9PSBYWE5QU0gpIHsKKwlpZiAoKHogPSBjbWNmbSgpKSA8IDApIHJldHVybih6KTsKKyAgICAg ICAgbm9wdXNoID0gMTsKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAgICAgZW5faG9zID0gMDsKKyNl bmRpZiAvKiBOT1NFUlZFUiAqLworI2lmZGVmIFBJUEVTRU5ECisJdXNlcGlwZXMgPSAwOworI2Vu ZGlmIC8qIFBJUEVTRU5EICovCisgICAgICAgIHJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQor I2VuZGlmIC8qIE5PUFVTSCAqLworCisjaWZkZWYgT1MyCisgICAgaWYgKGN4ID09IFhYTlNDUikg eworCWlmICgoeiA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHopOworICAgICAgICB0dF9zY3JvbGwg PSAwOworICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDEpOworICAgIH0KKyNlbmRpZiAvKiBPUzIg Ki8KKworI2lmbmRlZiBOT1NQTAorICAgIGlmIChjeCA9PSBYWExPQ0FMKQkJCS8qIExPQ0FMIHZh cmlhYmxlIGRlY2xhcmF0aW9ucyAqLworICAgICAgcmV0dXJuKHN1Y2Nlc3MgPSBkb2xvY2FsKCkp OworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICBpZiAoY3ggPT0gWFhLRVJNSSkgewkJLyogVGhl IEtFUk1JVCBjb21tYW5kICovCisJY2hhciAqIGxpc3RbNjVdOworCWV4dGVybiBjaGFyICoqeGFy Z3Y7CisJZXh0ZXJuIGludCB4YXJnYzsKKwlpbnQgaTsKKwlpZiAoKHkgPSBjbXR4dCgia2VybWl0 IGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIC1oIGZvciBoZWxwIiwKKwkJICAgICAgICIiLCZzLHh4 c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHkpOworCWNrc3RybmNweShsaW5lLCJrZXJtaXQgIixM SU5CVUZTSVopOworCWNrc3RybmNhdChsaW5lLHMsTElOQlVGU0laLTgpOworCXh3b3JkcyhsaW5l LDY0LGxpc3QsMCk7CisJZm9yIChpID0gMTsgaSA8IDY0OyBpKyspIHsKKwkgICAgaWYgKCFsaXN0 W2ldKQorCSAgICAgIGJyZWFrOworCX0KKwlpLS07CisJeGFyZ2MgPSBpOworCXhhcmd2ID0gbGlz dDsKKwl4YXJndisrOworCXNzdGF0ZSA9IGNtZGxpbigpOworCWlmIChzc3RhdGUpIHsKKwkgICAg ZXh0ZXJuIGludCBqdXN0b25lOworCSAgICBkZWJ1ZyhGMDAwLCJLRVJNSVQgc3N0YXRlIiwiIixz c3RhdGUpOworCSAgICBqdXN0b25lID0gMTsJCS8qIEZvcmNlIHJldHVybiB0byBjb21tYW5kIG1v ZGUgKi8KKwkgICAgcHJvdG8oKTsJCQkvKiBhZnRlciBwcm90b2NvbCAqLworCSAgICByZXR1cm4o c3VjY2Vzcyk7CisJfSBlbHNlIHsKKwkgICAgZGVidWcoRjEwMSwiS0VSTUlUIHNzdGF0ZSIsIiIs c3N0YXRlKTsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAxKTsJLyogTm90IGV4YWN0bHkgcmlnaHQs IGJ1dC4uLiAqLworCX0KKyAgICB9CisgICAgaWYgKGN4ID09IFhYREFURSkgewkJCS8qIERBVEUg Y29tbWFuZCAqLworCWV4dGVybiBjaGFyIGNtZGF0ZWJ1ZltdLCAqIGNtZGF0ZW1zZzsKKworI2lm bmRlZiBDT01NRU5UCisJY2hhciAqIGRwOworCWlmICgoeSA9IGNtdHh0KCJkYXRlIGFuZC9vciB0 aW1lLCBvciBjYXJyaWFnZSByZXR1cm4gZm9yIGN1cnJlbnQiLAorCQkgICAgICAgIiIsJnMseHhz dHJpbmcpKSA8IDApCisJICByZXR1cm4oeSk7CisJcyA9IGJyc3RyaXAocyk7CisJZHAgPSBjbWN2 dGRhdGUocywxKTsKKwlpZiAoIWRwKSB7CisJICAgIHByaW50ZigiPyVzXG4iLGNtZGF0ZW1zZyA/ IGNtZGF0ZW1zZyA6ICJEYXRlIGNvbnZlcnNpb24gZXJyb3IiKTsKKwkgICAgc3VjY2VzcyA9IDA7 CisJfSBlbHNlIHsKKwkgICAgcHJpbnRmKCIlc1xuIixkcCk7CisJICAgIHN1Y2Nlc3MgPSAxOwor CX0KKyNlbHNlCisJLyogVGhpcyB3b3JrcyBmaW5lIGJ1dCBtZXNzZXMgdXAgbXkgImRhdGVzIiB0 b3J0dXJlLXRlc3Qgc2NyaXB0ICovCisKKwlpZiAoKHggPSBjbWRhdGUoIkRhdGUgYW5kL29yIHRp bWUsIG9yIGNhcnJpYWdlIHJldHVybiBmb3IgY3VycmVudCIsCisJCQkiIiwmcywwLHh4c3RyaW5n KSkgPCAwKSB7CisJICAgIHJldHVybih4KTsKKwl9IGVsc2UgeworCSAgICBwcmludGYoIiVzXG4i LGNtZGF0ZWJ1Zik7CisJICAgIHN1Y2Nlc3MgPSAxOworCX0KKyNlbmRpZiAvKiBDT01NRU5UICov CisJcmV0dXJuKHN1Y2Nlc3MpOworICAgIH0KKyNpZm5kZWYgTk9QVVNICisjaWZuZGVmIE5PRlJJ TExTCisgICAgaWYgKGN4ID09IFhYRURJVCkKKyAgICAgIHJldHVybihkb2VkaXQoKSk7CisjZW5k aWYgLyogTk9GUklMTFMgKi8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmZGVmIEJST1dTRVIJ CQkJLyogRGVmaW5lZCBvbmx5IGlmbmRlZiBOT1BVU0ggKi8KKyAgICBpZiAoY3ggPT0gWFhCUk9X UykKKyAgICAgIHJldHVybihkb2Jyb3dzZSgpKTsKKyNlbmRpZiAvKiBCUk9XU0VSICovCisKKyNp ZmRlZiBDS19UQVBJCisgICAgaWYgKGN4ID09IFhYVEFQSSkgewkJCS8qIE1pY3Jvc29mdCBUQVBJ ICovCisJcmV0dXJuIChzdWNjZXNzID0gZG90YXBpKCkpOworICAgIH0KKyNlbmRpZiAvKiBDS19U QVBJICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKGN4ID09IFhYV0hFUkUpIHsKKwlleHRl cm4gY2hhciAqIHJmc3BlYywgKiBzZnNwZWMsICogc3Jmc3BlYywgKiBycmZzcGVjOworCWlmICgo eCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCXByaW50ZigiXG5GaWxlIG1vc3QgcmVjZW50 bHkuLi5cblxuIik7CisJcHJpbnRmKCIgIFNlbnQ6ICAgICAgICVzXG4iLCAgIHNmc3BlYyA/IHNm c3BlYyA6ICIobm9uZSkiKTsKKwlpZiAoc2ZzcGVjICYmIHNyZnNwZWMpIHsKKwkgICAgcHJpbnRm KCIgIFN0b3JlZCBhczogICVzXG4iLCAgIHNyZnNwZWMpOworCSAgICBwcmludGYoIlxuIik7CisJ fQorCXByaW50ZigiICBSZWNlaXZlZDogICAlc1xuIiwgICBycmZzcGVjID8gcnJmc3BlYyA6ICIo bm9uZSkiKTsKKwlpZiAocmZzcGVjICYmIHJyZnNwZWMpCisJcHJpbnRmKCIgIFN0b3JlZCBhczog ICVzXG4iLCAgIHJmc3BlYyk7CisJcHJpbnRmKAorIlxuSWYgdGhlIGZ1bGwgcGF0aCBpcyBub3Qg c2hvd24sIHRoZW4gdGhlIGZpbGUgaXMgcHJvYmFibHkgaW4geW91ciBjdXJyZW50XG4iCisJICAg ICAgICk7CisJcHJpbnRmKAorImRpcmVjdG9yeSBvciB5b3VyIGRvd25sb2FkIGRpcmVjdG9yeSAo aWYgYW55IC0gU0hPVyBGSUxFIHRvIGZpbmQgb3V0KS5cblxuIgorCSAgICAgICApOworCXJldHVy bihzdWNjZXNzID0gMSk7CisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgQ0tf UkVDQUxMCisgICAgaWYgKGN4ID09IFhYUkVETykKKyAgICAgIHJldHVybihkb3JlZG8oKSk7Cisj ZW5kaWYgLyogQ0tfUkVDQUxMICovCisKKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAoY3ggPT0gWFhD SFJUKQkJCS8qIENoYW5nZSBLZXJtaXQncyByb290IGRpcmVjdG9yeSAqLworICAgICAgcmV0dXJu KGRvY2hyb290KCkpOworI2VuZGlmIC8qIENLUk9PVCAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MK KyAgICBpZiAoY3ggPT0gWFhBVVRIKSB7CQkJLyogS0VSQkVST1MgKi8KKwl4ID0gY3BfYXV0aCgp OwkJCS8qIFBhcnNlIGl0ICovCisjaWZkZWYgSUtTRAorICAgICAgICBpZiAoaW5zZXJ2ZXIpIHsK KyAgICAgICAgICAgIHByaW50ZigiP0NvbW1hbmQgZGlzYWJsZWQgaW4gSUtTRC5cclxuIik7Cisg ICAgICAgICAgICByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB9CisjZW5kaWYgLyogSUtT RCAqLworCWlmICh4IDwgMCkJCQkvKiBQYXNzIHBhcnNlIGVycm9ycyBiYWNrICovCisJICByZXR1 cm4oeCk7CisJcmV0dXJuKHN1Y2Nlc3MgPSBkb2F1dGgoY3gpKTsKKyAgICB9CisjZW5kaWYgLyog Q0tfS0VSQkVST1MgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisgICAgaWYgKGN4ID09IFhYVEVSTSkg eworCXJldHVybihzZXR0cm10eXAoKSk7CisgICAgfQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKwor ICAgIGlmIChjeCA9PSBYWFNUQVRVUykgeworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJu KHgpOworCXByaW50ZiggIiAlc1xuIiwgc3VjY2VzcyA/ICJTVUNDRVNTIiA6ICJGQUlMVVJFIiAp OworCXJldHVybigwKTsJCQkvKiBEb24ndCBjaGFuZ2UgaXQgKi8KKyAgICB9CisKKyAgICBpZiAo Y3ggPT0gWFhGQUlMKSB7CisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICB9CisKKyAgICBpZiAoY3ggPT0gWFhTVUNDKSB7CisJaWYg KCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAg ICB9CisKKyAgICBpZiAoY3ggPT0gWFhOTENMKSB7CisJZXh0ZXJuIGludCBub2xvY2FsOworCWlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCW5vbG9jYWwgPSAxOworCXJldHVybihz dWNjZXNzID0gMSk7CisgICAgfQorCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChjeCA9PSBYWFJB U0cpCQkJLyogU2hvcnRjdXRzIGZvciBSRU1PVEUgY29tbWFuZHMgKi8KKyAgICAgIHJldHVybihk b3JtdChYWkFTRykpOworICAgIGlmIChjeCA9PSBYWFJDV0QpCisgICAgICByZXR1cm4oZG9ybXQo WFpDV0QpKTsKKyAgICBpZiAoY3ggPT0gWFhSQ1BZKQorICAgICAgcmV0dXJuKGRvcm10KFhaQ1BZ KSk7CisgICAgaWYgKGN4ID09IFhYUkRFTCkKKyAgICAgIHJldHVybihkb3JtdChYWkRFTCkpOwor ICAgIGlmIChjeCA9PSBYWFJESVIpCisgICAgICByZXR1cm4oZG9ybXQoWFpESVIpKTsKKyAgICBp ZiAoY3ggPT0gWFhSWElUKQorICAgICAgcmV0dXJuKGRvcm10KFhaWElUKSk7CisgICAgaWYgKGN4 ID09IFhYUkhMUCkKKyAgICAgIHJldHVybihkb3JtdChYWkhMUCkpOworICAgIGlmIChjeCA9PSBY WFJIT1MpCisgICAgICByZXR1cm4oZG9ybXQoWFpIT1MpKTsKKyAgICBpZiAoY3ggPT0gWFhSS0VS KQorICAgICAgcmV0dXJuKGRvcm10KFhaS0VSKSk7CisgICAgaWYgKGN4ID09IFhYUlBXRCkKKyAg ICAgIHJldHVybihkb3JtdChYWlBXRCkpOworICAgIGlmIChjeCA9PSBYWFJRVUUpCisgICAgICBy ZXR1cm4oZG9ybXQoWFpRVUUpKTsKKyAgICBpZiAoY3ggPT0gWFhSUkVOKQorICAgICAgcmV0dXJu KGRvcm10KFhaUkVOKSk7CisgICAgaWYgKGN4ID09IFhYUk1LRCkKKyAgICAgIHJldHVybihkb3Jt dChYWk1LRCkpOworICAgIGlmIChjeCA9PSBYWFJNU0cpCisgICAgICByZXR1cm4oZG9ybXQoWFpN U0cpKTsKKyAgICBpZiAoY3ggPT0gWFhSUk1EKQorICAgICAgcmV0dXJuKGRvcm10KFhaUk1EKSk7 CisgICAgaWYgKGN4ID09IFhYUlNFVCkKKyAgICAgIHJldHVybihkb3JtdChYWlNFVCkpOworICAg IGlmIChjeCA9PSBYWFJTUEEpCisgICAgICByZXR1cm4oZG9ybXQoWFpTUEEpKTsKKyAgICBpZiAo Y3ggPT0gWFhSVFlQKQorICAgICAgcmV0dXJuKGRvcm10KFhaVFlQKSk7CisgICAgaWYgKGN4ID09 IFhYUldITykKKyAgICAgIHJldHVybihkb3JtdChYWldITykpOworICAgIGlmIChjeCA9PSBYWFJD RFVQKQorICAgICAgcmV0dXJuKGRvcm10KFhaQ0RVKSk7CisgICAgaWYgKGN4ID09IFhYUlBSSSkK KyAgICAgIHJldHVybihkb3JtdChYWlBSSSkpOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisgICAg aWYgKGN4ID09IFhYUkVTRVQpIHsJCS8qIFJFU0VUICovCisJaWYgKCh4ID0gY21jZm0oKSkgPCAw KQorCSAgcmV0dXJuKHgpOworCWNvbmNiKChjaGFyKWVzY2FwZSk7CQkvKiBNYWtlIGNvbW1hbmQg ZWNob2luZyB0byBub3JtYWwgKi8KKwlkb2NsZWFuKDApOwkJCS8qIENsb3NlIGFsbCBmaWxlcyAq LworCXJldHVybihzdWNjZXNzID0gMSk7CisgICAgfQorCisjaWZuZGVmIE5PWEZFUgorI2lmbmRl ZiBOT0NTRVRTCisgICAgaWYgKGN4ID09IFhYQVNTT0MpCQkJLyogQVNTT0NJQVRFICovCisgICAg ICByZXR1cm4oZG9hc3NvYygpKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjZW5kaWYgLyogTk9Y RkVSICovCisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoY3ggPT0gWFhTSElGVCkgewkJLyogU0hJ RlQgKi8KKwlpZiAoKHkgPSBjbW51bSgiTnVtYmVyIG9mIGFyZ3VtZW50cyB0byBzaGlmdCIsIjEi LDEwLCZ4LHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHkpOworCWlmICgoeiA9IGNtY2ZtKCkp IDwgMCkKKwkgIHJldHVybih6KTsKKwlyZXR1cm4oc3VjY2VzcyA9IGRvc2hpZnQoeCkpOworICAg IH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PSEVMUAorICAgIGlmIChjeCA9PSBY WE1BTikKKyAgICAgIHJldHVybihkb21hbnVhbCgpKTsKKyNlbmRpZiAvKiBOT0hFTFAgKi8KKwor I2lmbmRlZiBOT1NQTAorICAgIGlmIChjeCA9PSBYWFNPUlQpCQkJLyogU09SVCBhbiBhcnJheSAq LworICAgICAgcmV0dXJuKGRvc29ydCgpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgaWYg KGN4ID09IFhYUFVSR0UpIHsKKyNpZmRlZiBJS1NECisJaWYgKGluc2VydmVyICYmICghRU5BQkxF RChlbl9kZWwpCisjaWZkZWYgQ0tfTE9HSU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg aXNndWVzdAorI2VuZGlmIC8qIENLX0xPR0lOICovCisJCQkgKSkgeworCSAgICBwcmludGYoIj9T b3JyeSwgREVMRVRFIGlzIGRpc2FibGVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisjZW5k aWYgLyogSUtTRCAqLworI2lmZGVmIENLX0FQQworCWlmICgoYXBjYWN0aXZlID09IEFQQ19MT0NB TCkgfHwKKwkgICAgKChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSkgJiYgKCEoYXBjc3RhdHVzICYg QVBDX1VOQ0gpKSkpCisJICByZXR1cm4oc3VjY2VzcyA9IDApOworI2VuZGlmIC8qIENLX0FQQyAq LworI2lmZGVmIENLUFVSR0UKKyAgICAgICAgcmV0dXJuKGRvcHVyZ2UoKSk7CisjZWxzZQorI2lm ZGVmIFZNUworCWlmICgoeCA9IGNtdHh0KCJvcHRpb25hbCBzd2l0Y2hlcyBmb2xsb3dlZCBieSBm aWxlc3BlYyIsCisJCSAgICAgICAiIiwmcyx4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsK KwlpZiAobm9wdXNoKSB7CisJICAgIHByaW50ZigiP1NvcnJ5LCBEQ0wgYWNjZXNzIGlzIGRpc2Fi bGVkXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJY2tzdHJuY3B5KGxpbmUscyxMSU5CVUZT SVopOworCXMgPSBsaW5lOworCXggPSBtbG9vayhtYWN0YWIsInB1cmdlIixubWFjKTsKKwlyZXR1 cm4oc3VjY2VzcyA9IGRvZG8oeCxzLGNtZHN0a1tjbWRsdmxdLmNjZmxncykpOworI2Vsc2UKKwly ZXR1cm4oLTIpOworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLUFVSR0UgKi8KKyAgICB9 CisKKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoY3ggPT0gWFhGQVNUKSB7CisJaWYgKCh4ID0gY21j Zm0oKSkgPCAwKSByZXR1cm4oeCk7CisJeCA9IG1sb29rKG1hY3RhYiwiZmFzdCIsbm1hYyk7CisJ cmV0dXJuKHN1Y2Nlc3MgPSBkb2RvKHgsTlVMTCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpKTsKKyAg ICB9CisgICAgaWYgKGN4ID09IFhYQ0FVKSB7CisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1 cm4oeCk7CisJeCA9IG1sb29rKG1hY3RhYiwiY2F1dGlvdXMiLG5tYWMpOworCXJldHVybihzdWNj ZXNzID0gZG9kbyh4LE5VTEwsY21kc3RrW2NtZGx2bF0uY2NmbGdzKSk7CisgICAgfQorICAgIGlm IChjeCA9PSBYWFJPQikgeworCWlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworCXgg PSBtbG9vayhtYWN0YWIsInJvYnVzdCIsbm1hYyk7CisJcmV0dXJuKHN1Y2Nlc3MgPSBkb2RvKHgs TlVMTCxjbWRzdGtbY21kbHZsXS5jY2ZsZ3MpKTsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8K KworICAgIGlmIChjeCA9PSBYWFNDUk4pIHsJCQkvKiBTQ1JFRU4gKi8KKwlpbnQgcm93LCBjb2w7 CisJaWYgKCh4ID0gY21rZXkoc2NudGFiLCBuc2NudGFiLCJzY3JlZW4gYWN0aW9uIiwiIiwgeHhz dHJpbmcpKSA8IDApCisJICByZXR1cm4oeCk7CisJc3dpdGNoICh4KSB7CQkJLyogTU9WRS1UTyAo Y3Vyc29yIHBvc2l0aW9uKSAqLworCSAgY2FzZSBTQ05fTU9WOgorCSAgICBpZiAoKHkgPSBjbW51 bSgiUm93ICgxLWJhc2VkKSIsIiIsMTAsJnoseHhzdHJpbmcpKSA8IDApCisJICAgICAgcmV0dXJu KHkpOworCSAgICByb3cgPSB6OworCSAgICB5ID0gY21udW0oIkNvbHVtbiAoMS1iYXNlZCkiLCIx IiwxMCwmeix4eHN0cmluZyk7CisJICAgIGlmICh5IDwgMCkKKwkgICAgICByZXR1cm4oeSk7CisJ ICAgIGNvbCA9IHo7CisJICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwgMCkKKwkgICAgICByZXR1cm4o eSk7CisJICAgIGlmIChyb3cgPCAwIHx8IGNvbCA8IDApIHsKKwkJcHJpbnRmKCI/Um93IGFuZCBD b2x1bW4gbXVzdCBiZSAxIG9yIGdyZWF0ZXJcbiIpOworCQlyZXR1cm4oLTkpOworCSAgICB9CisJ ICAgIGlmIChjbWRfcm93cyA+IDAgJiYgcm93ID4gY21kX3Jvd3MpCisJICAgICAgcm93ID0gY21k X3Jvd3M7CisJICAgIGlmIChjbWRfY29scyA+IDAgJiYgY29sID4gY21kX2NvbHMpCisJICAgICAg Y29sID0gY21kX2NvbHM7CisJICAgIHkgPSBja19jdXJwb3Mocm93LGNvbCk7CisJICAgIHJldHVy bihzdWNjZXNzID0gKHkgPiAtMSkgPyAxIDogMCk7CisKKwkgIGNhc2UgU0NOX0NMUjoJCQkvKiBD TEVBUiAqLworCSAgICBpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisJICAgICAgcmV0dXJuKHkpOwor CSAgICBkZWJ1ZyhGMTAwLCJzY3JlZW4gY2FsbGluZyBja19jbHMoKSIsIiIsMCk7CisJICAgIHkg PSBja19jbHMoKTsKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAoeSA+IC0xKSA/IDEgOiAwKTsKKwor CSAgY2FzZSBTQ05fQ0xFOgkJCS8qIENMRU9MICovCisJICAgIGlmICgoeSA9IGNtY2ZtKCkpIDwg MCkKKwkgICAgICByZXR1cm4oeSk7CisJICAgIHkgPSBja19jbGVvbCgpOworCSAgICByZXR1cm4o c3VjY2VzcyA9ICh5ID4gLTEpID8gMSA6IDApOworCX0KKyAgICB9CisKKyNpZm5kZWYgTk9IVFRQ CisjaWZkZWYgVENQU09DS0VUCisgICAgaWYgKGN4ID09IFhYSFRUUCkKKyAgICAgIHJldHVybihk b2h0dHAoKSk7CisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYgLyogTk9IVFRQICovCisK KyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoY3ggPT0gWFhBUlJBWSkgewkJLyogQVJSQVkgKi8KKyNp Zm5kZWYgTk9TSE9XCisJZXh0ZXJuIGludCBzaG93YXJyYXkoKTsKKyNlbmRpZiAvKiBOT1NIT1cg Ki8KKwlpZiAoKHggPSBjbWtleShhcnJheXRhYiwgbmFycmF5dGFiLCJBcnJheSBvcGVyYXRpb24i LCIiLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHgpOworCXN3aXRjaCAoeCkgeworCSAgY2Fz ZSBBUlJfRENMOgorCSAgICByZXR1cm4oZG9kY2woWFhEQ0wpKTsKKwkgIGNhc2UgQVJSX1NSVDoK KwkgICAgcmV0dXJuKGRvc29ydCgpKTsKKyNpZm5kZWYgTk9TSE9XCisJICBjYXNlIEFSUl9TSE86 CisJICAgIHJldHVybihzaG93YXJyYXkoKSk7CisjZW5kaWYgLyogTk9TSE9XICovCisJICBjYXNl IEFSUl9DUFk6CisJICAgIHJldHVybihjb3B5YXJyYXkoKSk7CisJICBjYXNlIEFSUl9TRVQ6CisJ ICBjYXNlIEFSUl9DTFI6CisJICAgIHJldHVybihjbHJhcnJheSh4KSk7CisJICBjYXNlIEFSUl9E U1Q6CisJICAgIHJldHVybih1bmFycmF5KCkpOworCSAgY2FzZSBBUlJfUlNaOgorCSAgICByZXR1 cm4ocnN6YXJyYXkoKSk7CisJICBjYXNlIEFSUl9FUVU6CisJICAgIHJldHVybihsaW5rYXJyYXko KSk7CisKKwkgIGRlZmF1bHQ6CisJICAgIHByaW50ZigiP1NvcnJ5LCBub3QgaW1wbGVtZW50ZWQg eWV0IC0gXCIlc1wiXG4iLGNtZGJ1Zik7CisJICAgIHJldHVybigtOSk7CisJfQorICAgIH0KKyAg ICBpZiAoY3ggPT0gWFhUUkFDRSkJCQkvKiBUUkFDRSAqLworICAgICAgcmV0dXJuKGRvdHJhY2Uo KSk7CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmZGVmIENLX1BFUk1TCisjaWZkZWYgVU5JWAor ICAgIGlmIChjeCA9PSBYWENITU9EKQorICAgICAgcmV0dXJuKGRvdWNobW9kKCkpOwkJLyogRG8g VW5peCBjaG1vZCAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS19QRVJNUyAqLwor CisgICAgaWYgKGN4ID09IFhYUFJPTVApCisgICAgICByZXR1cm4oZG9wcm9tcHQoKSk7CisKKyAg ICBpZiAoY3ggPT0gWFhHUkVQKQorICAgICAgcmV0dXJuKGRvZ3JlcCgpKTsKKworICAgIGlmIChj eCA9PSBYWERFQlVHKSB7CQkvKiBERUJVRyAqLworI2lmbmRlZiBERUJVRworCWludCBkdW1teSA9 IDA7CisJcmV0dXJuKHNldG9uKCZkdW1teSkpOworI2Vsc2UKKwlyZXR1cm4oc2V0b24oJmRlYmxv ZykpOworI2VuZGlmIC8qIERFQlVHICovCisgICAgfQorICAgIGlmIChjeCA9PSBYWE1TRyB8fCBj eCA9PSBYWFhNU0cpIHsJLyogTUVTU0FHRSAqLworCWV4dGVybiBpbnQgZGVibXNnOwkJLyogU2Ny aXB0IGRlYnVnZ2luZyBtZXNzYWdlcyAqLworCWlmICgoeCA9IGNtdHh0KCJNZXNzYWdlIHRvIHBy aW50IGlmIFNFVCBERUJVRyBNRVNTQUdFIGlzIE9OIG9yIFNUREVSUiIsCisJCSAiIiwmcyx4eHN0 cmluZykpIDwgMCkKKwkgIHJldHVybih4KTsKKwlpZiAoIXMpCQkJCS8qIFdhdGNoIG91dCBmb3Ig bnVsbCByZXN1bHQgKi8KKwkgIHMgPSAiIjsJCQkvKiBNYWtlIGl0IGFuIGVtcHR5IHN0cmluZyAq LworCWVsc2UgCQkJCS8qIE5vdCBudWxsICovCisJICBzID0gYnJzdHJpcChzKTsJCS8qIFN0cmlw IGJyYWNlcyBhbmQgZG91YmxlcXVvdGVzICovCisJc3dpdGNoIChkZWJtc2cpIHsJCS8qIE5vdCBk ZWJ1Z2dpbmcgLSBkb24ndCBwcmludCAqLworCSAgY2FzZSAwOgorCSAgICBicmVhazsKKwkgIGNh c2UgMToKKwkgICAgcHJpbnRmKCIlcyIscyk7CQkvKiBQcmludCB0byBzdGRvdXQgKi8KKwkgICAg aWYgKGN4ID09IFhYTVNHKSBwcmludGYoIlxuIik7CisJICAgIGJyZWFrOworCSAgY2FzZSAyOgor CSAgICBmcHJpbnRmKHN0ZGVyciwiJXMiLHMpOwkvKiBEaXR0byBidXQgcHJpbnQgdG8gc3RkZXJy ICovCisJICAgIGlmIChjeCA9PSBYWE1TRykgZnByaW50ZihzdGRlcnIsIlxuIik7CisJICAgIGJy ZWFrOworCX0KKwlyZXR1cm4oMCk7CQkJLyogUmV0dXJuIHdpdGhvdXQgYWZmZWN0aW5nIFNVQ0NF U1MgKi8KKyAgICB9CisKKyNpZmRlZiBDS0xFQVJOCisgICAgaWYgKGN4ID09IFhYTEVBUk4pIHsJ CS8qIExFQVJOICovCisJc3RydWN0IEZEQiBvZiwgc3csIGNtOworCWludCBjbG9zaW5nID0gMCwg b2ZmID0gMCwgb24gPSAwLCBjb25maXJtZWQgPSAwOworCWNoYXIgYzsKKworCWNtZmRiaSgmc3cs CQkJLyogMm5kIEZEQiAtIG9wdGlvbmFsIC9QQUdFIHN3aXRjaCAqLworCSAgICAgICBfQ01LRVks CQkJLyogZmNvZGUgKi8KKwkgICAgICAgIlNjcmlwdCBmaWxlIG5hbWUsIG9yIHN3aXRjaCIsIC8q IGhscG1zZyAqLworCSAgICAgICAiIiwJCQkvKiBkZWZhdWx0ICovCisJICAgICAgICIiLAkJCS8q IGFkZHRsIHN0cmluZyBkYXRhICovCisJICAgICAgIDMsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRh IDE6IHRibCBzaXplICovCisJICAgICAgIDQsCQkJLyogYWRkdGwgbnVtZXJpYyBkYXRhIDI6IDQg PSBjbXN3aSAqLworCSAgICAgICB4eHN0cmluZywJCS8qIFByb2Nlc3NpbmcgZnVuY3Rpb24gKi8K KwkgICAgICAgbGVhcm5zd2ksCQkvKiBLZXl3b3JkIHRhYmxlICovCisJICAgICAgICZvZgkJCS8q IFBvaW50ZXIgdG8gbmV4dCBGREIgKi8KKwkgICAgICAgKTsKKwljbWZkYmkoJm9mLF9DTU9GSSwi IiwiIiwiIiwwLDAseHhzdHJpbmcsTlVMTCwmY20pOworCWNtZmRiaSgmY20sX0NNQ0ZNLCIiLCIi LCIiLDAsMCxOVUxMLE5VTEwsTlVMTCk7CisJbGluZVswXSA9IE5VTDsKKworCXdoaWxlICghY29u ZmlybWVkKSB7CisJICAgIHggPSBjbWZkYigmc3cpOwkJLyogUGFyc2Ugc29tZXRoaW5nICovCisJ ICAgIGlmICh4IDwgMCkKKwkgICAgICByZXR1cm4oeCk7CisJICAgIHN3aXRjaCAoY21yZXN1bHQu ZmNvZGUpIHsJLyogV2hhdCB3YXMgaXQ/ICovCisJICAgICAgY2FzZSBfQ01PRkk6CQkvKiBPdXRw dXQgZmlsZSBuYW1lICovCisJCWNrc3RybmNweShsaW5lLGNtcmVzdWx0LnNyZXN1bHQsTElOQlVG U0laKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSBfQ01LRVk6CQkvKiBTd2l0Y2ggKi8KKwkJYyA9 IGNtZ2JyaygpOworCQlpZiAoKGMgPT0gJzonIHx8IGMgPT0gJz0nKSAmJiAhKGNtZ2t3Zmxncygp ICYgQ01fQVJHKSkgeworCQkgICAgcHJpbnRmKCI/VGhpcyBzd2l0Y2ggZG9lcyBub3QgdGFrZSBh biBhcmd1bWVudFxuIik7CisJCSAgICByZXR1cm4oLTkpOworCQl9CisJCXN3aXRjaCAoY21yZXN1 bHQubnJlc3VsdCkgeworCQkgIGNhc2UgMjoJCS8qIC9DTE9TRSAqLworCQkgICAgY2xvc2luZyA9 IDE7CS8qIEZhbGwgdGhydSBvbiBwdXJwb3NlICovCisJCSAgY2FzZSAwOgkJLyogL09GRiAqLwor CQkgICAgb2ZmID0gMTsKKwkJICAgIG9uID0gMDsKKwkJICAgIGJyZWFrOworCQkgIGNhc2UgMToJ CS8qIC9PTiAqLworCQkgICAgb24gPSAxOworCQkgICAgb2ZmID0gMDsKKwkJICAgIGJyZWFrOwor CQl9CisJCWJyZWFrOworCSAgICAgIGNhc2UgX0NNQ0ZNOgkJLyogQ29uZmlybWF0aW9uICovCisJ CWNvbmZpcm1lZCsrOworCQlicmVhazsKKwkgICAgfQorCX0KKwlpZiAoY2xvc2luZykgeworCSAg ICBpZiAobGVhcm5mcCkgeworCQlmY2xvc2UobGVhcm5mcCk7CisJCWxlYXJuZnAgPSBOVUxMOwor CSAgICB9CisJICAgIG1ha2VzdHIoJmxlYXJuZmlsZSxOVUxMKTsKKwl9CisJaWYgKGxpbmVbMF0p IHsKKwkgICAgaWYgKCFvbiAmJiAhb2ZmKQorCSAgICAgIG9uID0gMTsKKwkgICAgaWYgKGxlYXJu ZnApIHsKKwkJZmNsb3NlKGxlYXJuZnApOworCQlsZWFybmZwID0gTlVMTDsKKwkgICAgfQorCSAg ICBtYWtlc3RyKCZsZWFybmZpbGUsbGluZSk7CisJICAgIGlmIChsZWFybmZpbGUpIHsKKwkJY2hh ciAqIG1vZGVzID0gInciOworCQlsZWFybmZwID0gZm9wZW4obGVhcm5maWxlLG1vZGVzKTsKKwkJ aWYgKCFsZWFybmZwKSB7CisJCSAgICBkZWJ1ZyhGMTEwLCJMRUFSTiBmaWxlIG9wZW4gZXJyb3Ii LGxlYXJuZmlsZSwwKTsKKwkJICAgIHBlcnJvcihsZWFybmZpbGUpOworCQkgICAgcmV0dXJuKC05 KTsKKwkJfSBlbHNlIHsKKyNpZmRlZiBaRk5RRlAKKwkJICAgIGlmICh6Zm5xZnAobGVhcm5maWxl LFRNUEJVRlNJWix0bXBidWYpKQorCQkgICAgICBtYWtlc3RyKCZsZWFybmZpbGUsdG1wYnVmKTsK KyNlbmRpZiAvKiBaRk5RRlAgKi8KKwkJICAgIGRlYnVnKEYxMTAsIkxFQVJOIGZpbGUgb3BlbiBv ayIsbGVhcm5maWxlLDApOworCQkgICAgaWYgKCFxdWlldCkgeworCQkJcHJpbnRmKCJSZWNvcmRp bmcgdG8gJXMuLi5cblxuIixsZWFybmZpbGUpOworCQkJcHJpbnRmKAorIiBXQVJOSU5HOiBJZiB5 b3UgdHlwZSB5b3VyIHBhc3N3b3JkIGR1cmluZyBzY3JpcHQgcmVjb3JkaW5nLCBpdCB3aWxsIGFw cGVhclxuXAorIGluIHRoZSBmaWxlLiAgQmUgc3VyZSB0byBlZGl0IGl0IG9yIHRha2Ugb3RoZXIg YXBwcm9wcmlhdGUgcHJlY2F1dGlvbnMuXG5cbiIKKwkJCSAgICAgICApOworCQkgICAgfQorCQkg ICAgZnB1dHMoICAiOyBTY3JpcHRmaWxlOiAiLGxlYXJuZnApOworCQkgICAgZnB1dHMobGVhcm5m aWxlLGxlYXJuZnApOworCQkgICAgZnB1dHMoIlxuOyBEaXJlY3Rvcnk6ICAiLGxlYXJuZnApOwor CQkgICAgZnB1dHMoemd0ZGlyKCksbGVhcm5mcCk7CisJCSAgICBmcHV0cygiXG47IFJlY29yZGVk OiAgICIsbGVhcm5mcCk7CisJCSAgICBmcHV0cyhja2RhdGUoKSxsZWFybmZwKTsKKwkJICAgIGZw dXRzKCJcbiIsbGVhcm5mcCk7CisJCX0KKwkgICAgfQorCX0KKwlpZiAob24pIHsKKwkgICAgbGVh cm5pbmcgPSAxOworCX0gZWxzZSBpZiAob2ZmKSB7CisJICAgIGxlYXJuaW5nID0gMDsKKwl9CisJ ZGVidWcoRjEwMSwiTEVBUk4gbGVhcm5pbmciLCIiLGxlYXJuaW5nKTsKKwlyZXR1cm4oc3VjY2Vz cyA9IDEpOworICAgIH0KKyNlbmRpZiAvKiBDS0xFQVJOICovCisKKyNpZmRlZiBORVdGVFAKKyAg ICBpZiAoY3ggPT0gWFhVU0VSIHx8IGN4ID09IFhYQUNDVCkgeworCWlmICghZnRwaXNvcGVuKCkp IHsKKwkgICAgcHJpbnRmKCI/RlRQIGNvbm5lY3Rpb24gaXMgbm90IG9wZW5cbiIpOworCSAgICBy ZXR1cm4oLTkpOworCX0KKwlyZXR1cm4oc3VjY2VzcyA9IChjeCA9PSBYWFVTRVIpID8gZG9mdHB1 c3IoKSA6IGRvZnRwYWNjdCgpKTsKKyAgICB9CisgICAgaWYgKGN4ID09IFhYU0lURSB8fCBjeCA9 PSBYWFBBU1YpIHsKKwlpZiAoIWZ0cGlzb3BlbigpKSB7CisJICAgIHByaW50ZigiP0ZUUCBjb25u ZWN0aW9uIGlzIG5vdCBvcGVuXG4iKTsKKwkgICAgcmV0dXJuKC05KTsKKwl9CisJcmV0dXJuKHN1 Y2Nlc3MgPSAoY3ggPT0gWFhTSVRFKSA/IGRvZnRwc2l0ZSgpIDogZG9zZXRmdHBwc3YoKSk7Cisg ICAgfQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCisgICAgaWYgKGN4ID09IFhYT1JJRSkgewkJCS8q IE9SSUVOVEFUSU9OICovCisJZXh0ZXJuIGNoYXIgKiBteW5hbWU7CisJaW50IGksIHksIG4gPSAw OworICAgICAgICBjaGFyICogcywgKnAsIHZidWZbMzJdOworCWNoYXIgKiB2YXJzWzE2XTsgICAg ICAgY2hhciAqIGxlZ2VuZFsxNl07CisKKwlpZiAoKHkgPSBjbWNmbSgpKSA8IDApCisJICByZXR1 cm4oeSk7CisKKwlwcmludGYoIlxuUHJvZ3JhbSBuYW1lOlxuICAlc1xuXG4iLG15bmFtZSk7CisJ biArPSA0OworCisjaWZkZWYgTlQKKwl2YXJzWzBdID0gImhvbWUiOyAgICAgIGxlZ2VuZFswXSA9 ICJZb3VyIGhvbWUgZGlyZWN0b3J5IjsKKwl2YXJzWzFdID0gImRpcmVjdG9yeSI7IGxlZ2VuZFsx XSA9ICJLOTUncyBjdXJyZW50IGRpcmVjdG9yeSI7CisJdmFyc1syXSA9ICJleGVkaXIiOyAgICBs ZWdlbmRbMl0gPSAiSzk1IFByb2dyYW0gZGlyZWN0b3J5IjsKKwl2YXJzWzNdID0gImluaWRpciI7 ICAgIGxlZ2VuZFszXSA9ICJLOTUgSW5pdGlhbGl6YXRpb24gZmlsZSBkaXJlY3RvcnkiOworCXZh cnNbNF0gPSAic3RhcnR1cCI7ICAgbGVnZW5kWzRdID0gIkN1cnJlbnQgZGlyZWN0b3J5IHdoZW4g c3RhcnRlZCI7CisJCisgICAgICAgIHZhcnNbNV0gPSAiY29tbW9uIjsKKyAgICAgICAgbGVnZW5k WzVdID0gIks5NSBkYXRhIGZvciBhbGwgdXNlcnMgYW5kIEs5NVNJVEUuSU5JIGZpbGUiOworCQor ICAgICAgICB2YXJzWzZdID0gInBlcnNvbmFsIjsgIGxlZ2VuZFs2XSA9ICJZb3VyIHBlcnNvbmFs IGRhdGEgZGlyZWN0b3J5IHRyZWUiOworICAgICAgICB2YXJzWzddID0gImRlc2t0b3AiOyAgIGxl Z2VuZFs3XSA9ICJZb3VyIGRlc2tvcCBkaXJlY3RvcnkgdHJlZSI7CisJCisgICAgICAgIHZhcnNb OF0gPSAiYXBwZGF0YSI7CisgICAgICAgIGxlZ2VuZFs4XSA9ICJZb3VyIHBlcnNvbmFsIEs5NSBk YXRhIHRyZWUgYW5kIEs5NUNVU1RPTS5JTkkgZmlsZSI7CisJCisgICAgICAgIHZhcnNbOV0gPSAi ZG93bmxvYWQiOyAgbGVnZW5kWzldID0gIllvdXIgSzk1IGRvd25sb2FkIGRpcmVjdG9yeSI7Cisg ICAgICAgIHZhcnNbMTBdID0gInRtcGRpciI7ICAgbGVnZW5kWzEwXSA9ICJZb3VyIFRFTVAgZGly ZWN0b3J5IjsKKwl2YXJzWzExXSA9IE5VTEw7ICAgICAgIGxlZ2VuZFsxMV0gPSBOVUxMOworCisJ Zm9yIChpID0gMDsgaSA8IDE2ICYmIHZhcnNbaV07IGkrKykgeworCSAgICBwcmludGYoIiVzOlxu IixsZWdlbmRbaV0pOworCSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUo KSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworCSAgICBja21ha21zZyh2YnVmLDMyLCJcXHYoIix2 YXJzW2ldLCIpIixOVUxMKTsKKwkgICAgcHJpbnRmKCIgIFZhcmlhYmxlOiAgICVzXG4iLHZidWYp OworCSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDAp OyBlbHNlIG4gPSAwOworCSAgICB5ID0gVE1QQlVGU0laOworCSAgICBzID0gdG1wYnVmOworCSAg ICB6enN0cmluZyh2YnVmLCZzLCZ5KTsKKwkgICAgbGluZVswXSA9IE5VTDsKKwkgICAgY2tHZXRM b25nUGF0aE5hbWUodG1wYnVmLGxpbmUsTElOQlVGU0laKTsKKwkgICAgcHJpbnRmKCIgIExvbmcg bmFtZTogICVzXG4iLGxpbmUpOworCSAgICBpZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFz a21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4gPSAwOworCSAgICBsaW5lWzBdID0gTlVMOworCSAg ICBHZXRTaG9ydFBhdGhOYW1lKHRtcGJ1ZixsaW5lLExJTkJVRlNJWik7CisJICAgIHByaW50Zigi ICBTaG9ydCBuYW1lOiAlc1xuIixsaW5lKTsKKwkgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykg aWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKyAgICAgICAgICAgIHByaW50 ZigiXG4iKTsKKwkgICAgaWYgKCsrbiA+IGNtZF9yb3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJl dHVybigwKTsgZWxzZSBuID0gMDsKKwl9CisjZWxzZSAgLyogTlQgKi8KKworCXZhcnNbMF0gPSAi aG9tZSI7ICAgICAgbGVnZW5kWzBdID0gIllvdXIgaG9tZSBkaXJlY3RvcnkiOworCXZhcnNbMV0g PSAiZGlyZWN0b3J5IjsgbGVnZW5kWzFdID0gIktlcm1pdCdzIGN1cnJlbnQgZGlyZWN0b3J5IjsK Kwl2YXJzWzJdID0gImV4ZWRpciI7ICAgIGxlZ2VuZFsyXSA9ICJLZXJtaXQncyBwcm9ncmFtIGRp cmVjdG9yeSI7CisJdmFyc1szXSA9ICJpbmlkaXIiOyAgICBsZWdlbmRbM10gPSAiSW5pdGlhbGl6 YXRpb24gZmlsZSBkaXJlY3RvcnkiOworCXZhcnNbNF0gPSAic3RhcnR1cCI7ICAgbGVnZW5kWzRd ID0gIkN1cnJlbnQgZGlyZWN0b3J5IHdoZW4gc3RhcnRlZCI7CisJdmFyc1s1XSA9ICJkb3dubG9h ZCI7ICBsZWdlbmRbNV0gPSAiS2VybWl0IGRvd25sb2FkIGRpcmVjdG9yeSI7CisJdmFyc1s2XSA9 IE5VTEw7CSAgICAgICBsZWdlbmRbNl0gPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IDE2ICYm IHZhcnNbaV07IGkrKykgeworCSAgICBwcmludGYoIiVzOlxuIixsZWdlbmRbaV0pOworCSAgICBp ZiAoKytuID4gY21kX3Jvd3MgLSAzKSBpZiAoIWFza21vcmUoKSkgcmV0dXJuKDApOyBlbHNlIG4g PSAwOworCSAgICBja21ha21zZyh2YnVmLDMyLCJcXHYoIix2YXJzW2ldLCIpIixOVUxMKTsKKwkg ICAgcHJpbnRmKCIgIFZhcmlhYmxlOiAlc1xuIix2YnVmKTsKKwkgICAgaWYgKCsrbiA+IGNtZF9y b3dzIC0gMykgaWYgKCFhc2ttb3JlKCkpIHJldHVybigwKTsgZWxzZSBuID0gMDsKKwkgICAgeSA9 IFRNUEJVRlNJWjsKKwkgICAgcyA9IHRtcGJ1ZjsKKwkgICAgenpzdHJpbmcodmJ1ZiwmcywmeSk7 CisgICAgICAgICAgICBwcmludGYoIiAgVmFsdWU6ICAgICVzXG4iLHRtcGJ1Zik7CisJICAgIGlm ICgrK24gPiBjbWRfcm93cyAtIDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9 IDA7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisJICAgIGlmICgrK24gPiBjbWRfcm93cyAt IDMpIGlmICghYXNrbW9yZSgpKSByZXR1cm4oMCk7IGVsc2UgbiA9IDA7CisJfQorI2VuZGlmIC8q IE5UICovCisJcmV0dXJuKHN1Y2Nlc3MgPSAxKTsKKyAgICB9CisKKyNpZmRlZiBOVAorICAgIGlm IChjeCA9PSBYWERJQUxFUikgeworICAgICAgICBTdGFydERpYWxlcigpOworICAgICAgICByZXR1 cm4oc3VjY2VzcyA9IDEpOworICAgIH0KKyNlbmRpZiAvKiBOVCAqLworCisgICAgaWYgKGN4ID09 IFhYQ09OVCkgewkJCS8qIENPTlRJTlVFICovCisJaWYgKCh4ID0gY21jZm0oKSkgPCAwKQorCSAg cmV0dXJuKHgpOworCWlmICgheGNtZHNyYykgewkJCS8qIEF0IHByb21wdDogY29udGludWUgc2Ny aXB0ICovCisJICAgIGlmIChjbWRsdmwgPiAwKQorCSAgICAgIHBvcGNsdmwoKTsJCS8qIFBvcCBj b21tYW5kIGxldmVsICovCisJICAgIHJldHVybihzdWNjZXNzID0gMSk7CS8qIGFsd2F5cyBzdWNj ZWVkcyAqLworI2lmbmRlZiBOT1NQTAorCX0gZWxzZSB7CQkJLyogSW4gc2NyaXB0OiB3aGF0ZXZl ci4uLiAqLworCSAgICB4ID0gbWxvb2sobWFjdGFiLCJjb250aW51ZSIsbm1hYyk7CisJICAgIC8q IERvbid0IHNldCBzdWNjZXNzICovCisJICAgIHJldHVybihkb2RvKHgsTlVMTCxjbWRzdGtbY21k bHZsXS5jY2ZsZ3MpKTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCX0KKyAgICB9CisjaWZkZWYgVU5J WAorI2lmbmRlZiBOT1BVVEVOVgorLyoKKyAgTk9URTogU3ludGF4IGlzIFBVVEVOViBuYW1lIHZh bHVlLCBub3QgUFVURU5WIG5hbWU9dmFsdWUuCisgIEkgY291bGQgY2hlY2sgZm9yIHRoaXMgYnV0 IGl0IHdvdWxkIGJlIHRvbyBtdWNoIG1hZ2ljLgorKi8KKyAgICBpZiAoY3ggPT0gWFhQVVRFKSB7 CQkJLyogUFVURU5WICovCisgICAgICAgIGNoYXIgKiB0ID0gdG1wYnVmOwkJLyogQ3JlYXRlIG9y IGFsdGVyIGVudmlyb25tZW50IHZhciAqLworCWNoYXIgKiBzMSA9IE5VTEwsICogczIgPSBOVUxM OworCWlmICgoeCA9IGNtZmxkKCJWYXJpYWJsZSBuYW1lIiwiIiwmcyx4eHN0cmluZykpIDwgMCkK KyAgICAgICAgICByZXR1cm4oeCk7CisJaWYgKHMpIGlmIChzID09ICIiKSBzID0gTlVMTDsKKwko Vk9JRCkgbWFrZXN0cigmczEscyk7CisJaWYgKHMgJiYgIXMxKSB7CisJICAgIHByaW50ZigiP1BV VEVOViAtIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCSAgICByZXR1cm4oLTkpOwor CX0KKwlpZiAoKHggPSBjbXR4dCgiVmFsdWUiLCIiLCZzLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0 dXJuKHgpOworCWlmIChzKSBpZiAocyA9PSAiIikgcyA9IE5VTEw7CisJKFZPSUQpIG1ha2VzdHIo JnMyLHMpOworCXN1Y2Nlc3MgPSBkb3B1dGVudihzMSxzMik7CisJKFZPSUQpIG1ha2VzdHIoJnMx LE5VTEwpOworCShWT0lEKSBtYWtlc3RyKCZzMixOVUxMKTsKKwlyZXR1cm4oc3VjY2Vzcyk7Cisg ICAgfQorI2VuZGlmCS8qIE5PUFVURU5WICovCisjZW5kaWYJLyogVU5JWCAqLworCisgICAgaWYg KGN4ID09IFhYTk9UQVYpIHsJCS8qIENvbW1hbmQgaW4gdGFibGUgbm90IGF2YWlsYWJsZSAqLwor CWNrc3RybmNweSh0bXBidWYsYXRtYnVmLFRNUEJVRlNJWik7CisJaWYgKCh4ID0gY210eHQoIlJl c3Qgb2YgY29tbWFuZCIsIiIsJnMsTlVMTCkpIDwgMCkKKwkgIHJldHVybih4KTsKKwlwcmludGYo IlNvcnJ5LCBcIiVzXCIgbm90IGNvbmZpZ3VyZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIEtlcm1pdC5c biIsCisJICAgICAgIHRtcGJ1ZgorCSAgICAgICApOworCXJldHVybihzdWNjZXNzID0gMCk7Cisg ICAgfQorICAgIHJldHVybigtMik7CQkJCS8qIE5vbmUgb2YgdGhlIGFib3ZlICovCisKK30gLyog ZW5kIG9mIGRvY21kKCkgKi8KKworI2VuZGlmIC8qIE5PSUNQICovCgpkaWZmIC0tZ2l0IGEvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3IuaCBiL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXNyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uODM4OTFmYgotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMw Mi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXNyLmgKQEAgLTAsMCArMSwzMDQ5IEBACisvKiAg QyBLIFUgVSBTIFIgLiBIICAtLSAgU3ltYm9sIGRlZmluaXRpb25zIGZvciBDLUtlcm1pdCBja3V1 cyouYyBtb2R1bGVzICAqLworCisvKgorICBBdXRob3I6IEZyYW5rIGRhIENydXogPGZkY0Bjb2x1 bWJpYS5lZHU+LAorICBDb2x1bWJpYSBVbml2ZXJzaXR5IEFjYWRlbWljIEluZm9ybWF0aW9uIFN5 c3RlbXMsIE5ldyBZb3JrIENpdHkuCisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDEwLAorICAg IFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsu CisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQg ZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZv ciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisjaWZuZGVmIENLVVVTUl9ICisjZGVm aW5lIENLVVVTUl9ICisKKyNpbmNsdWRlICJja3VjbWQuaCIJCQkvKiBHZXQgc3ltYm9scyBmcm9t IGNvbW1hbmQgcGFja2FnZSAqLworCisjaWZuZGVmIE5PTFVDQUNIRQkJCS8qIFVzZSBsb29rdXAo KSBjYWNoZSAqLworI2lmbmRlZiBOT1NQTAkJCQkvKiBUbyBzcGVlZCB1cCBzY3JpcHQgcHJvZ3Jh bXMgKi8KKyNpZm5kZWYgVVNFX0xVQ0FDSEUKKyNkZWZpbmUgVVNFX0xVQ0FDSEUKKyNlbmRpZiAv KiBVU0VfTFVDQUNIRSAqLworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9MVUNBQ0hF ICovCisKKyNpZm5kZWYgTk9ET1VCTEVRVU9USU5HCQkJLyogTmV3IHRvIDguMCAqLworI2RlZmlu ZSBET1VCTEVRVU9USU5HCQkJLyogQWxsb3cgZmllbGRzIHRvIGJlIGVuY2xvc2VkIGluICovCisj ZW5kaWYgLyogTk9ET1VCTEVRVU9USU5HICovCQkvKiBkb3VibGVxdW90ZXMuICovCisKKyNpZm5k ZWYgTk9MT0NVUwkJCQkvKiBTRVQgTE9DVVMgKi8KKyNkZWZpbmUgTE9DVVMKKyNlbmRpZiAvKiBO T0xPQ1VTICovCisKKy8qIFNpemVzIG9mIHRoaW5ncyAtIEZOVkFMTCBhbmQgTUFYQVJHTEVOIGlu Y3JlYXNlZCBmcm9tIDhLIDIwMDUwOTEyICovCisKKyNpZmRlZiBCSUdCVUZPSworI2RlZmluZSBG TlZBTEwgQ01EQkwJCQkvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbGVuZ3RoICovCisjZGVmaW5l IE1BWEFSR0xFTiBDTURCTAkJCS8qIE1heCBmdW5jIGFyZyBsZW5ndGggYWZ0ZXIgZXZhbCAqLwor I2RlZmluZSBNQVhBUkdMSVNUIDEwMjQJCQkvKiBNYXggbnVtYmVyIG9mIGFyZ3MgZm9yIGEgbWFj cm8gKi8KKyNkZWZpbmUgRlNQRUNMIENNREJMCQkJLyogTWF4IGxlbmd0aCBmb3IgTVNFTkQvR0VU IHN0cmluZyAqLworI2RlZmluZSBNU0VORE1BWCAxMDI0CQkJLyogTnVtYmVyIG9mIGZpbGVzcGVj cyBmb3IgTVNFTkQgKi8KKyNkZWZpbmUgTUFDX01BWCAxNjM4NAkJCS8qIE1heGltdW0gbnVtYmVy IG9mIG1hY3JvcyAqLworCisjZWxzZSAgLyogU2FtZSBhcyBhYm92ZSBidXQgZm9yIHNtYWxsZXIg YnVpbGRzLi4uICovCisKKyNkZWZpbmUgRk5WQUxMIDEwMjIKKyNkZWZpbmUgTUFYQVJHTEVOIDEw MjMKKyNkZWZpbmUgTUFYQVJHTElTVCA2NAorI2RlZmluZSBGU1BFQ0wgMzAwCisjZGVmaW5lIE1T RU5ETUFYIDEyOAorI2RlZmluZSBNQUNfTUFYIDEwMjQKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLwor CisjZGVmaW5lIEdWQVJTIDEyNwkJCS8qIEhpZ2hlc3QgZ2xvYmFsIHZhciBhbGxvd2VkICovCisj aWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgVk5BTUwgNDA5NgkJCS8qIE1heCBsZW5ndGggZm9yIHZh cmlhYmxlIG5hbWUgKi8KKyNkZWZpbmUgQVJSQVlSRUZMRU4gMTAyNAkJLyogTWF4IGxlbmd0aCBm b3IgYXJyYXkgcmVmZXJlbmNlICovCisjZGVmaW5lIEZPUkRFUFRIIDMyCQkJLyogTWF4aW11bSBk ZXB0aCBvZiBuZXN0ZWQgRk9SIGxvb3BzICovCisjZGVmaW5lIE1BWFRBS0UgNTQJCQkvKiBNYXhp bXVtIG5lc3Rpbmcgb2YgVEFLRSBmaWxlcyAqLworI2RlZmluZSBNQUNMRVZFTCAxMjgJCQkvKiBN YXhpbXVtIG5lc3RpbmcgZm9yIG1hY3JvcyAqLworI2RlZmluZSBJTlBCVUZTSVogNDA5NgkJCS8q IFNpemUgb2YgSU5QVVQgYnVmZmVyICovCisjZGVmaW5lIFBST01QVEwgMTAyNAkJCS8qIE1heCBs ZW5ndGggZm9yIHByb21wdCAqLworI2RlZmluZSBMQkxTSVogODE5MgkJCS8qIE1heGltdW0gbGVu Z3RoIGZvciBhIEdPVE8gbGFiZWwgKi8KKyNlbHNlCisjZGVmaW5lIFZOQU1MIDI1NgkJCS8qIE1h eCBsZW5ndGggZm9yIHZhcmlhYmxlIG5hbWUgKi8KKyNkZWZpbmUgQVJSQVlSRUZMRU4gMTI4CQkJ LyogTWF4IGxlbmd0aCBmb3IgYXJyYXkgcmVmZXJlbmNlICovCisjZGVmaW5lIEZPUkRFUFRIIDEw CQkJLyogTWF4aW11bSBkZXB0aCBvZiBuZXN0ZWQgRk9SIGxvb3BzICovCisjZGVmaW5lIE1BWFRB S0UgMzIJCQkvKiBNYXhpbXVtIG5lc3Rpbmcgb2YgVEFLRSBmaWxlcyAqLworI2RlZmluZSBNQUNM RVZFTCA2NAkJCS8qIE1heGltdW0gbmVzdGluZyBmb3IgbWFjcm9zICovCisjZGVmaW5lIElOUEJV RlNJWiAyNTYKKyNkZWZpbmUgUFJPTVBUTCAyNTYJCQkvKiBNYXggbGVuZ3RoIGZvciBwcm9tcHQg Ki8KKyNkZWZpbmUgTEJMU0laIDEyOAkJCS8qIE1heGltdW0gbGVuZ3RoIGZvciBhIEdPVE8gbGFi ZWwgKi8KKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2RlZmluZSBOQVJHUyAxMAkJCS8qIE1heCBu dW1iZXIgb2YgbWFjcm8gYXJndW1lbnRzICovCisjZGVmaW5lIExJTkJVRlNJWiAoQ01EQkwgKyAx MCkJCS8qIFNpemUgb2YgbGluZVtdIGJ1ZmZlciAqLworI2RlZmluZSBUTVBCVUZTSVogKENNREJM ICsgMTApCQkvKiBTaXplIG9mIHRlbXBvcmFyeSBidWZmZXIgKi8KKworI2RlZmluZSBDTURTVEtM ICggTUFDTEVWRUwgKyBNQVhUQUtFICsgMikgLyogQ29tbWFuZCBzdGFjayBkZXB0aCAqLworCisj aWZuZGVmIE5PUFVSR0UJCQkJLyogUFVSR0UgY29tbWFuZCAqLworI2lmZGVmIFVOSVgKKyNkZWZp bmUgQ0tQVVJHRQorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBOT1BVUkdFICovCisKKyNp Zm5kZWYgTk9NSU5QVVQJCQkvKiBNSU5QVVQgY29tbWFuZCAqLworI2lmbmRlZiBOT1NQTAorI2Rl ZmluZSBDS19NSU5QVVQKKyNpZm5kZWYgTUlOUE1BWAorI2lmZGVmIEJJR0JVRk9LCisjZGVmaW5l IE1JTlBNQVggOTYJCQkvKiBNYXggbnVtYmVyIG9mIE1JTlBVVCBzdHJpbmdzICovCisjZWxzZQor I2RlZmluZSBNSU5QTUFYIDE2CisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBNSU5Q TUFYICovCisjZGVmaW5lIE1JTlBCVUZMIDI1NgkJCS8qIFNpemUgb2YgTUlOUFVUIHRlbXAgYnVm ZmVyICovCisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT01JTlBVVCAqLworCisjZGVm aW5lIEFSUkFZQkFTRSA5NQkJCS8qIExvd2VzdCBhcnJheS1uYW1lIGNoYXJhY3RlciAqLworCisj aWZuZGVmIE5PS0VSQkFORworI2lmbmRlZiBLRVJCQU5HCisjZGVmaW5lIEtFUkJBTkcKKyNlbmRp ZiAvKiBLRVJCQU5HICovCisjZW5kaWYgLyogTk9LRVJCQU5HICovCisKKy8qIEJpdCB2YWx1ZXMg KDEsIDIsIDQsIDgsIC4uLikgZm9yIHRoZSBjY2ZsZ3MgZmllbGQgKi8KKworI2RlZmluZSBDRl9B UEMgIDEJCQkvKiBFeGVjdXRpbmcgYW4gQVBDIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ0ZfS01BQyAy CQkJLyogRXhlY3V0aW5nIGEgXEttYWNybyAqLworI2RlZmluZSBDRl9DTURMIDQJCQkvKiBNYWNy byBmcm9tIC1DICJibGFoIiBjb21tYW5kIGxpbmUgKi8KKyNkZWZpbmUgQ0ZfUkVYWCA4CQkJLyog TWFjcm8gZnJvbSBSRVhYIGludGVycHJldGVyICovCisjZGVmaW5lIENGX0lNQUMgMTYJCQkvKiBJ bnRlcm5hbCBtYWNybyBsaWtlIEZPUiwgV0hJTEUuLi4gKi8KKworc3RydWN0IGNtZHB0ciB7CQkJ CS8qIENvbW1hbmQgc3RhY2sgc3RydWN0dXJlICovCisgICAgaW50IHNyYzsJCQkJLyogQ29tbWFu ZCBTb3VyY2UgKi8KKyAgICBpbnQgbHZsOwkJCQkvKiBDdXJyZW50IFRBS0Ugb3IgRE8gbGV2ZWwg Ki8KKyAgICBpbnQgY2NmbGdzOwkJCQkvKiBGbGFncyAqLworfTsKKworc3RydWN0IG10YWIgewkJ CQkvKiBNYWNybyB0YWJsZSwgbGlrZSBrZXl3b3JkIHRhYmxlICovCisgICAgY2hhciAqa3dkOwkJ CQkvKiBCdXQgd2l0aCBwb2ludGVycyBmb3IgdmFscyAqLworICAgIGNoYXIgKm12YWw7CQkJCS8q IGluc3RlYWQgb2YgaW50cy4gKi8KKyAgICBzaG9ydCBmbGdzOworfTsKKworc3RydWN0IGxvY2Fs dmFyIHsJCQkvKiBMb2NhbCB2YXJpYWJsZSBzdHJ1Y3R1cmUuICovCisgICAgY2hhciAqIGx2X25h bWU7CisgICAgY2hhciAqIGx2X3ZhbHVlOworICAgIHN0cnVjdCBsb2NhbHZhciAqIGx2X25leHQ7 Cit9OworCitzdHJ1Y3Qgc3RyaW5nbGlzdCB7CQkJLyogR2VuZXJhbCBwdXJwb3NlIHN0cmluZyBs aXN0ICovCisgICAgY2hhciAqIHNsX25hbWU7CisgICAgc3RydWN0IHN0cmluZ2xpc3QgKiBzbF9u ZXh0OworfTsKKworc3RydWN0IHN0cmluZ2ludCB7CQkJLyogU3RyaW5nIGFuZCAod2lkZSkgaW50 ZWdlciAqLworICAgIGNoYXIgKiBzdmFsOwkJCS8qIHVzZWQgbWFpbmx5IHdpdGggY29tbWFuZCBz d2l0Y2hlcyAqLworICAgIGludCBpdmFsOworICAgIENLX09GRl9UIHd2YWw7Cit9OworCisjaWZu ZGVmIE5PSUNQCisvKgorICBDLUtlcm1pdCBJbml0aWFsaXphdGlvbiBmaWxlLi4uCisKKyAgU3lz dGVtLWRlcGVuZGVudCBkZWZhdWx0cyBhcmUgYnVpbHQgaW50byB0aGUgcHJvZ3JhbSwgc2VlIGJl bG93LgorICBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBlaXRoZXIgb2YgdHdvIHdheXM6Cisg IDEuIENLX0RTWVNJTkkgaXMgZGVmaW5lZCBhdCBjb21waWxlIHRpbWUsIGluIHdoaWNoIGNhc2Ug YSBkZWZhdWx0CisgICAgIHN5c3RlbS13aWRlIGluaXRpYWxpemF0aW9uIGZpbGUgbmFtZSBpcyBj aG9zZW4gZnJvbSBiZWxvdywgb3I6CisgIDI6IENLX1NZU0lOSSBpcyBkZWZpbmVkIHRvIGJlIGEg c3RyaW5nLCB3aGljaCBsZXRzIHRoZSBwcm9ncmFtCisgICAgIGJ1aWxkZXIgY2hvb3NlIHRoZSBp bml0aWFsaXphdGlvbiBmaWxlc3BlYyBhdCBjb21waWxlIHRpbWUuCisgIFRoZXNlIGNhbiBiZSBn aXZlbiBvbiB0aGUgQ0MgY29tbWFuZCBsaW5lLCBzbyB0aGUgc291cmNlIGNvZGUgbmVlZCBub3Qg YmUKKyAgY2hhbmdlZC4KKyovCisKKyNpZm5kZWYgQ0tfU1lTSU5JCQkJLyogSWYgbm8gaW5pdGlh bGl6YXRpb24gZmlsZSBnaXZlbiwgKi8KKyNpZmRlZiBDS19EU1lTSU5JCQkJLyogYnV0IENLX0RT WVNJTkkgaXMgZGVmaW5lZC4uLiAqLworCisvKiBTdXBwbHkgc3lzdGVtLWRlcGVuZGVudCAiZGVm YXVsdCBkZWZhdWx0IiBpbml0aWFsaXphdGlvbiBmaWxlICovCisKKyNpZmRlZiBVTklYCQkJCS8q IEZvciBVTklYLCBzeXN0ZW0td2lkZSAqLworLyogVGhpcyBhbGxvd3Mgb25lIGNvcHkgb2YgdGhl IHN0YW5kYXJkIGluaXQgZmlsZSBvbiB0aGUgd2hvbGUgc3lzdGVtLCAqLworLyogcmF0aGVyIHRo YW4gYSBzZXBhcmF0ZSBjb3B5IGluIGVhY2ggdXNlcidzIGhvbWUgZGlyZWN0b3J5LiAqLworI2lm ZGVmIEhQVVgxMAorI2RlZmluZSBDS19TWVNJTkkgIi91c3Ivc2hhcmUvbGliL2tlcm1pdC9ja2Vy bWl0LmluaSIKKyNlbHNlCisjaWZkZWYgQ1VfQUNJUworI2RlZmluZSBDS19TWVNJTkkgIi91c3Iv c2hhcmUvbGliL2tlcm1pdC9ja2VybWl0LmluaSIKKyNlbHNlCisjaWZkZWYgX19saW51eF9fCisj ZGVmaW5lIENLX1NZU0lOSSAiL3Vzci9zaGFyZS9rZXJtaXQvY2tlcm1pdC5pbmkiCisjZWxzZQor I2RlZmluZSBDS19TWVNJTkkgIi91c3IvbG9jYWwvYmluL2NrZXJtaXQuaW5pIgorI2VuZGlmIC8q IGxpbnV4ICovCisjZW5kaWYgLyogQ1VfQUNJUyAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworLyog RmlsbCBpbiAjZWxzZS4uI2lmZGVmJ3MgaGVyZSBmb3IgVk1TLCBPUy8yLCBldGMuICovCisvKiBG aWxsIGluIG1hdGNoaW5nICNlbmRpZidzIGhlcmUuICovCisjZW5kaWYgLyogVU5JWCAqLworCisj ZW5kaWYgLyogQ0tfRFNZU0lOSSAqLworI2VuZGlmIC8qIENLX1NZU0lOSSAqLworCisjaWZkZWYg Q0tfU1lTSU5JCQkJLyogSW5pdC1maWxlIHByZWNlZGVuY2UgKi8KKyNpZm5kZWYgQ0tfSU5JX0EJ CQkvKiBBIG1lYW5zIHN5c3RlbS13aWRlIGZpbGUgZmlyc3QgKi8KKyNpZm5kZWYgQ0tfSU5JX0IJ CQkvKiBCIG1lYW5zIHVzZXIncyBmaXJzdCAqLworI2RlZmluZSBDS19JTklfQQkJCS8qIEEgaXMg ZGVmYXVsdCAqLworI2VuZGlmIC8qIENLX0lOSV9CICovCisjZW5kaWYgLyogQ0tfSU5JX0EgKi8K KyNlbHNlCisjaWZkZWYgQ0tfSU5JX0EJCQkJLyogT3RoZXJ3aXNlICovCisjdW5kZWYgQ0tfSU5J X0EJCQkJLyogbWFrZSBzdXJlIHRoZXNlIGFyZW4ndCBkZWZpbmVkICovCisjZW5kaWYgLyogQ0tf SU5JX0EgKi8KKyNpZmRlZiBDS19JTklfQgorI3VuZGVmIENLX0lOSV9CCisjZW5kaWYgLyogQ0tf SU5JX0IgKi8KKyNlbmRpZiAvKiBDS19TWVNJTkkgKi8KKworI2lmZGVmIENLX1NZU0lOSQkJCS8q IE9uZSBtb3JlIGNoZWNrLi4uICovCisjaWZkZWYgQ0tfSU5JX0EJCQkJLyogTWFrZSBzdXJlIHRo ZXkncmUgbm90IGJvdGggKi8KKyNpZmRlZiBDS19JTklfQgkJCQkvKiBkZWZpbmVkLiAqLworI3Vu ZGVmIENLX0lOSV9CCisjZW5kaWYgLyogQ0tfSU5JX0IgKi8KKyNlbmRpZiAvKiBDS19JTklfQSAq LworI2VuZGlmIC8qIENLX1NZU0lOSSAqLworLyoKKyAgSWYgbmVpdGhlciBDS19EU1lTSU5JIG5v ciBDS19TWVNJTkkgYXJlIGRlZmluZWQsIHRoZXNlIGFyZSB0aGUKKyAgYnVpbHQtaW4gZGVmYXVs dHMgZm9yIGVhY2ggcGxhdGZvcm0uICBVU0VfQ1VTVE9NIG1lYW5zIHRvIGV4ZWN1dGUgdGhlCisg IGN1c3RvbWl6YXRpb24gZmlsZSBhdXRvbWF0aWNhbGx5IGlmIHRoZSBpbml0aWFsaXphdGlvbiBm aWxlIGlzIG5vdCBmb3VuZC4KKyovCisjaWZuZGVmIE5PQ1VTVE9NCisjaWZuZGVmIFVTRV9DVVNU T00KKyNkZWZpbmUgVVNFX0NVU1RPTQorI2VuZGlmIC8qIFVTRV9DVVNUT00gKi8KKyNlbmRpZiAv KiBOT0NVU1RPTSAqLworCisjaWZuZGVmICBLRVJNUkNMCQkJLyogUGF0aCBsZW5ndGggZm9yIGlu aXQgZmlsZSAqLworI2RlZmluZSBLRVJNUkNMIENLTUFYUEFUSAorI2VuZGlmIC8qICBLRVJNUkNM ICovCisKKyNpZmRlZiB2bXMKKyNkZWZpbmUgS0VSTVJDICJDS0VSTUlULklOSSIJCS8qIEluaXQg ZmlsZSBuYW1lICovCisjZGVmaW5lIE1ZQ1VTVE9NICJDS0VSTU9ELklOSSIJCS8qIEN1c3RvbWl6 YXRpb24gZmlsZSBuYW1lICovCisjZWxzZQorI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjZGVmaW5l IEtFUk1SQyAiazk1LmluaSIKKyNkZWZpbmUgTVlDVVNUT00gIms5NWN1c3RvbS5pbmkiCisjZWxz ZQorI2RlZmluZSBLRVJNUkMgImsyLmluaSIKKyNkZWZpbmUgTVlDVVNUT00gImsyY3VzdG9tLmlu aSIKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UKKyNpZmRlZiBVTklYT1JPU0sKKyNkZWZpbmUgS0VS TVJDICIua2VybXJjIgorI2RlZmluZSBNWUNVU1RPTSAiLm15a2VybXJjIgorI2Vsc2UKKyNpZmRl ZiBTVFJBVFVTCisjZGVmaW5lIEtFUk1SQyAiY2tlcm1pdC5pbmkiCisjZGVmaW5lIE1ZQ1VTVE9N ICJja2VybW9kLmluaSIKKyNlbHNlCisjZGVmaW5lIEtFUk1SQyAiQ0tFUk1JVC5JTkkiCisjZGVm aW5lIE1ZQ1VTVE9NICJja2VybW9kLmluaSIKKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYg LyogVU5JWE9ST1NLICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogdm1zICovCisKKyNp Zm5kZWYgS0VSTVJDTAorI2RlZmluZSBLRVJNUkNMIDI1NgorI2VuZGlmIC8qIEtFUk1SQ0wgKi8K KyNlbmRpZiAvKiBOT0lDUCAqLworCisvKiBVc2VyIGludGVyZmFjZSBmZWF0dXJlcyAqLworCisj aWZkZWYgQ0tfQ1VSU0VTCQkJLyogVGhlcm1vbWV0ZXIgKi8KKyNpZm5kZWYgTk9fUENUX0JBUgor I2lmbmRlZiBDS19QQ1RfQkFSCisjZGVmaW5lIENLX1BDVF9CQVIKKyNlbmRpZiAvKiBOT19QQ1Rf QkFSICovCisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworI2VuZGlmIC8qIENLX0NVUlNFUyAqLwor CisjaWZkZWYgS1VJCQkJCS8qIEtVSSByZXF1aXJlcyB0aGUgVGhlcm1vbWV0ZXIgY29kZSAqLwor I2lmbmRlZiBOT19QQ1RfQkFSCisjaWZuZGVmIENLX1BDVF9CQVIKKyNkZWZpbmUgQ0tfUENUX0JB UgorI2VuZGlmIC8qIE5PX1BDVF9CQVIgKi8KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisjZW5k aWYgLyogS1VJICovCisKKy8qIEluY2x1ZGVzICovCisKKyNpZmRlZiBNSU5JWAorLyogd2h5PyAq LworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmIC8qIE1JTklYICovCisKKy8qIFN5bWJv bHMgZm9yIGNvbW1hbmQgc291cmNlICovCisKKyNkZWZpbmUgQ01EX0tCIDAJCQkvKiBLZXlCb2Fy ZCBvciBzdGFuZGFyZCBpbnB1dCAqLworI2RlZmluZSBDTURfVEYgMQkJCS8qIFRBS0UgY29tbWFu ZCBGaWxlICovCisjZGVmaW5lIENNRF9NRCAyCQkJLyogTWFjcm8gRGVmaW5pdGlvbiAqLworCisv KgorICBTRVQgVFJBTlNGRVIgQ0FOQ0VMTEFUSU9OIGNvbW1hbmQgc2hvdWxkIGJlIGF2YWlsYWJs ZSBpbiBhbGwgdmVyc2lvbnMuCisgIEJ1dCBmb3Igbm93Li4uCisqLworI2lmZGVmIFVOSVgJCQkJ LyogVU5JWCBoYXMgaXQgKi8KKyNpZm5kZWYgWEZSQ0FOCisjZGVmaW5lIFhGUkNBTgorI2VuZGlm IC8qIFhGUkNBTiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBWTVMJCQkJLyogVk1TIGhh cyBpdCAqLworI2lmbmRlZiBYRlJDQU4KKyNkZWZpbmUgWEZSQ0FOCisjZW5kaWYgLyogWEZSQ0FO ICovCisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgZGF0YWdlbmVyYWwJCQkvKiBERyBBT1MvVlMg aGFzIGl0ICovCisjaWZuZGVmIFhGUkNBTgorI2RlZmluZSBYRlJDQU4KKyNlbmRpZiAvKiBYRlJD QU4gKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2lmZGVmIFNUUkFUVVMJCQkJLyogU3Ry YXR1cyBWT1MgaGFzIGl0ICovCisjaWZuZGVmIFhGUkNBTgorI2RlZmluZSBYRlJDQU4KKyNlbmRp ZiAvKiBYRlJDQU4gKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjaWZkZWYgT1NLCQkJCS8qIE9T LTkgKi8KKyNpZm5kZWYgWEZSQ0FOCisjZGVmaW5lIFhGUkNBTgorI2VuZGlmIC8qIFhGUkNBTiAq LworI2VuZGlmIC8qIE9TSyAqLworCisjaWZuZGVmIE5PQ01ETAorLyogRXh0ZW5kZWQgQ29tbWFu ZC1MaW5lIE9wdGlvbiBDb2RlcyAoa2VlcCBhbHBoYWJldGljYWwgYnkga2V5d29yZCkgKi8KKwor I2RlZmluZSBYQV9BTk9OIDAJCQkvKiAtLWFub255bW91cyAqLworI2RlZmluZSBYQV9CQUZJIDEJ CQkvKiAtLWJhbm5lcmZpbGUgKi8KKyNkZWZpbmUgWEFfQ0RGSSAyCQkJLyogLS1jZGZpbGUgKi8K KyNkZWZpbmUgWEFfQ0RNUyAzCQkJLyogLS1jZG1lc3NhZ2UgKi8KKyNkZWZpbmUgWEFfSEVMUCA0 CQkJLyogLS1oZWxwICovCisjZGVmaW5lIFhBX0hFRkkgNQkJCS8qIC0taGVscGZpbGUgKi8KKyNk ZWZpbmUgWEFfSUtGSSA2CQkJLyogLS14ZmVyZmlsZSAqLworI2RlZmluZSBYQV9JS0xHIDcJCQkv KiAtLXhmZXJsb2cgKi8KKyNkZWZpbmUgWEFfQU5GSSA4CQkJLyogLS1pbml0ZmlsZSAqLworI2Rl ZmluZSBYQV9QRVJNIDkJCQkvKiAtLXBlcm1pc3Npb25zICovCisjZGVmaW5lIFhBX1JPT1QgMTAJ CQkvKiAtLXJvb3QgKi8KKyNkZWZpbmUgWEFfU1lTTCAxMQkJCS8qIC0tc3lzbG9nICovCisjZGVm aW5lIFhBX1VTRkkgMTIJCQkvKiAtLXVzZXJmaWxlICovCisjZGVmaW5lIFhBX1dURkkgMTMJCQkv KiAtLXd0bXBmaWxlICovCisjZGVmaW5lIFhBX1dUTVAgMTQJCQkvKiAtLXd0bXBsb2cgKi8KKyNk ZWZpbmUgWEFfVElNTyAxNQkJCS8qIC0tdGltZW91dCAqLworI2RlZmluZSBYQV9OT0lOIDE2CQkJ LyogLS1ub2ludGVycnVwdHMgKi8KKyNkZWZpbmUgWEFfREJBUyAxNwkJCS8qIC0tZGF0YWJhc2Ug Ki8KKyNkZWZpbmUgWEFfREJGSSAxOAkJCS8qIC0tZGJmaWxlICovCisjZGVmaW5lIFhBX1BSSVYg MTkJCQkvKiAtLXByaXZpZCAqLworI2RlZmluZSBYQV9WRVJTIDIwCQkJLyogLS12ZXJzaW9uICov CisjZGVmaW5lIFhBX05QUk0gMjEJCQkvKiAtLW5vcGVybXMgKi8KKyNkZWZpbmUgWEFfWFBPUyAy MgkJCS8qIFdpbmRvdyBwb3NpdGlvbiBYIGNvb3JkaW5hdGUgKi8KKyNkZWZpbmUgWEFfWVBPUyAy MwkJCS8qIFdpbmRvdyBwb3NpdGlvbiBZIGNvb3JkaW5hdGUgKi8KKyNkZWZpbmUgWEFfRk5BTSAy NAkJCS8qIEZvbnQgRmFjZW5hbWUgKi8KKyNkZWZpbmUgWEFfRlNJWiAyNQkJCS8qIEZvbnQgU2l6 ZSAqLworI2RlZmluZSBYQV9URVJNIDI2CQkJLyogVGVybWluYWwgdHlwZSAqLworI2RlZmluZSBY QV9DU0VUIDI3CQkJLyogUmVtb3RlIENoYXJhY3RlciBTZXQgKi8KKyNkZWZpbmUgWEFfUk9XUyAy OAkJCS8qIFNjcmVlbiByb3dzIChoZWlnaHQpICovCisjZGVmaW5lIFhBX0NPTFMgMjkJCQkvKiBT Y3JlZW4gY29sdW1ucyAod2lkdGgpICovCisjZGVmaW5lIFhBX1RFTCAgMzAJCQkvKiBNYWtlIGEg VGVsbmV0IGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUgWEFfRlRQICAzMQkJCS8qIE1ha2UgYW4gRlRQ IGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUgWEFfU1NIICAzMgkJCS8qIE1ha2UgYW4gU1NIIGNvbm5l Y3Rpb24gKi8KKyNkZWZpbmUgWEFfVVNFUiAzMwkJCS8qIFVzZXJuYW1lIGZvciBsb2dpbiAqLwor I2RlZmluZSBYQV9QQVNTIDM0CQkJLyogUGFzc3dvcmQgZm9yIGxvZ2luICovCisjZGVmaW5lIFhB X1RJVEwgMzUgICAgICAgICAgICAgICAgICAgICAgLyogV2luZG93IFRpdGxlICovCisjZGVmaW5l IFhBX05PTU4gMzYJCQkvKiBObyBHVUkgTWVudSBCYXIgKi8KKyNkZWZpbmUgWEFfTk9UQiAzNwkJ CS8qIE5vIEdVSSBUb29sIEJhciAqLworI2RlZmluZSBYQV9OT1NCIDM4ICAgICAgICAgICAgICAg ICAgICAgIC8qIE5vIEdVSSBTdGF0dXMgQmFyICovCisjZGVmaW5lIFhBX05PUFVTSCAzOSAgICAg ICAgICAgICAgICAgICAgLyogRGlzYWJsZSBleHRlcm5hbCBjb21tYW5kcyAqLworI2RlZmluZSBY QV9OT1NDUk9MTCA0MCAgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgc2Nyb2xsYmFjayBvcGVy YXRpb25zICovCisjZGVmaW5lIFhBX05PRVNDQVBFIDQxICAgICAgICAgICAgICAgICAgLyogRGlz YWJsZSBlc2NhcGUgZnJvbSBjb25uZWN0IG1vZGUgKi8KKyNkZWZpbmUgWEFfTE9DSyA0MiAgICAg ICAgICAgICAgICAgICAgICAvKiBBbGwgbG9ja2Rvd24gb3B0aW9ucyAqLworI2RlZmluZSBYQV9O T0JBUiA0MyAgICAgICAgICAgICAgICAgICAgIC8qIE5vIEdVSSBCYXJzICovCisjZGVmaW5lIFhB X1dNQVggIDQ0CisjZGVmaW5lIFhBX1dNSU4gIDQ1CisjZGVmaW5lIFhBX1NDQUxFIDQ2ICAgICAg ICAgICAgICAgICAgICAgLyogR1VJIFNjYWxlIEZvbnQgKi8KKyNkZWZpbmUgWEFfQ0hHRCAgNDcg ICAgICAgICAgICAgICAgICAgICAvKiBHVUkgQ2hhbmdlIERpbWVuc2lvbnMgKi8KKyNkZWZpbmUg WEFfTk9DTE9TRSA0OCAgICAgICAgICAgICAgICAgICAvKiBHVUkgRGlzYWJsZSBDbG9zZSBXaW5k b3cgKi8KKyNkZWZpbmUgWEFfVU5CVUYgNDkJCQkvKiBVTklYIHVuYnVmZmVyZWQgY29uc29sZSAq LworI2RlZmluZSBYQV9NQVggIDQ5CQkJLyogSGlnaGVzdCBleHRlbmRlZCBvcHRpb24gbnVtYmVy ICovCisjZW5kaWYgLyogTk9DTURMICovCisKKyNpZm5kZWYgTk9JQ1AKKy8qIFRvcCBMZXZlbCBD b21tYW5kcyAqLworLyogVmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0b3AtbGV2ZWwgY29tbWFuZHMg bXVzdCBiZSAwIG9yIGdyZWF0ZXIuICovCisKKyNkZWZpbmUgWFhCWUUgICAwCS8qIEJZRSAqLwor I2RlZmluZSBYWENMRSAgIDEJLyogQ0xFQVIgKi8KKyNkZWZpbmUgWFhDTE8gICAyCS8qIENMT1NF ICovCisjZGVmaW5lIFhYQ09OICAgMwkvKiBDT05ORUNUICovCisjZGVmaW5lIFhYQ1BZICAgNAkv KiBDT1BZICovCisjZGVmaW5lIFhYQ1dEICAgNQkvKiBDV0QgKENoYW5nZSBXb3JraW5nIERpcmVj dG9yeSkgKi8KKyNkZWZpbmUgWFhERUYJNgkvKiBERUZJTkUgKGEgbWFjcm8gb3IgdmFyaWFibGUp ICovCisjZGVmaW5lIFhYREVMICAgNwkvKiAoTG9jYWwpIERFTEVURSAqLworI2RlZmluZSBYWERJ UiAgIDgJLyogKExvY2FsKSBESVJFQ1RPUlkgKi8KKworLyogRElSRUNUT1JZIENvbW1hbmQgb3B0 aW9ucy4uLiAqLworI2RlZmluZSBESVJfQlJGIDEJLyogQlJJRUYgKi8KKyNkZWZpbmUgRElSX1ZS QiAyCS8qIFZFUkJPU0UgKi8KKyNkZWZpbmUgRElSX1BBRyAzCS8qIFBBR0UgKi8KKyNkZWZpbmUg RElSX05PUCA0CS8qIE5PUEFHRSAqLworI2RlZmluZSBESVJfSVNPIDUJLyogSVNPREFURSAqLwor I2RlZmluZSBESVJfREFUIDYJLyogRU5HTElTSERBVEUgKi8KKyNkZWZpbmUgRElSX0hERyA3CS8q IEhFQURJTkdTICovCisjZGVmaW5lIERJUl9OT0ggOAkvKiBOT0hFQURJTkdTICovCisjZGVmaW5l IERJUl9TUlQgOQkvKiBTT1JUICovCisjZGVmaW5lIERJUl9OT1MgMTAgICAgICAvKiBOT1NPUlQg Ki8KKyNkZWZpbmUgRElSX0FTQyAxMQkvKiBBU0NFTkRJTkcgKi8KKyNkZWZpbmUgRElSX0RTQyAx MiAgICAgIC8qIERFU0NFTkRJTkcgKi8KKyNkZWZpbmUgRElSX1JFQyAxMyAgICAgIC8qIFJFQ1VS U0lWRSAqLworI2RlZmluZSBESVJfTk9SIDE0CS8qIE5PUkVDVVJJVkUgKi8KKyNkZWZpbmUgRElS X0RPVCAxNQkvKiBET1RGSUxFUyAqLworI2RlZmluZSBESVJfTk9EIDE2CS8qIE5PRE9URklMRVMg Ki8KKyNkZWZpbmUgRElSX0RJUiAxNwkvKiBESVJFQ1RPUklFUyAqLworI2RlZmluZSBESVJfRklM IDE4CS8qIEZJTEVTICovCisjZGVmaW5lIERJUl9BTEwgMTkJLyogQUxMICovCisjZGVmaW5lIERJ Ul9OQU0gMjAJLyogTkFNRVM6ICovCisjZGVmaW5lIERJUl9UWVAgMjEJLyogRklMRVRZUEVTICov CisjZGVmaW5lIERJUl9OT1QgMjIJLyogTk9GSUxFVFlQRVMgKi8KKyNkZWZpbmUgRElSX0JVUCAy MwkvKiBCQUNLVVAgKi8KKyNkZWZpbmUgRElSX05PQiAyNAkvKiBOT0JBQ0tVUCAqLworI2RlZmlu ZSBESVJfTVNHIDI1ICAgICAgLyogTUVTU0FHRSAqLworI2RlZmluZSBESVJfTk9NIDI2ICAgICAg LyogTk9NRVNTQUdFICovCisjZGVmaW5lIERJUl9BUlIgMjcgICAgICAvKiBBUlJBWTogKi8KKyNk ZWZpbmUgRElSX05BUiAyOCAgICAgIC8qIE5PQVJSQVkgKi8KKyNkZWZpbmUgRElSX0VYQyAyOQkv KiBFWENFUFQ6ICovCisjZGVmaW5lIERJUl9MQVIgMzAJLyogTEFSR0VSLVRIQU46ICovCisjZGVm aW5lIERJUl9TTUEgMzEJLyogU01BTExFUi1USEFOOiAqLworI2RlZmluZSBESVJfQUZUIDMyCS8q IEFGVEVSOiAqLworI2RlZmluZSBESVJfTkFGIDMzCS8qIE5PVC1BRlRFUjogKi8KKyNkZWZpbmUg RElSX0JFRiAzNAkvKiBCRUZPUkU6ICovCisjZGVmaW5lIERJUl9OQkYgMzUJLyogTk9ULUJFRk9S RTogKi8KKyNkZWZpbmUgRElSX1NVTSAzNgkvKiBTVU1NQVJZICovCisjZGVmaW5lIERJUl9CSU4g MzcJLyogVFlQRSAob25seSBzaG93IGJpbmFyeSBvciB0ZXh0KSAqLworI2RlZmluZSBESVJfTE5L IDM4CS8qIGZvbGxvdyBzeW1saW5rcyAqLworI2RlZmluZSBESVJfTkxLIDM5CS8qIGRvbid0IGZv bGxvdyBzeW1saW5rcyAqLworI2RlZmluZSBESVJfT1VUIDQwCS8qIE91dHB1dCBmaWxlIGZvciBs aXN0aW5nICovCisjZGVmaW5lIERJUl9UT1AgNDEJLyogVG9wIG4gbGluZXMgKi8KKyNkZWZpbmUg RElSX0NPVSA0MgkvKiBDT1VOVDp2YXIgKi8KKyNkZWZpbmUgRElSX05PTCA0MwkvKiBOT0xJTktT IChkb24ndCBzaG93IHN5bWxpbmtzIGF0IGF0IGFsbCkgKi8KKworI2RlZmluZSBESVJTX05NIDAg ICAgICAgLyogU29ydCBkaXJlY3RvcnkgYnkgTkFNRSAqLworI2RlZmluZSBESVJTX0RUIDEgICAg ICAgLyogU29ydCBkaXJlY3RvcnkgYnkgREFURSAqLworI2RlZmluZSBESVJTX1NaIDIgICAgICAg LyogU29ydCBkaXJlY3RvcnkgYnkgU0laRSAqLworCisjZGVmaW5lIFhYRElTICAgOQkvKiBESVNB QkxFICovCisjZGVmaW5lIFhYRUNIICAxMAkvKiBFQ0hPICovCisjZGVmaW5lIFhYRVhJICAxMQkv KiBFWElUICovCisjZGVmaW5lIFhYRklOICAxMgkvKiBGSU5JU0ggKi8KKyNkZWZpbmUgWFhHRVQg IDEzCS8qIEdFVCAqLworI2RlZmluZSBYWEhMUCAgMTQJLyogSEVMUCAqLworI2RlZmluZSBYWElO UCAgMTUJLyogSU5QVVQgKi8KKyNkZWZpbmUgWFhMT0MgIDE2CS8qIExPQ0FMICovCisjZGVmaW5l IFhYTE9HICAxNwkvKiBMT0cgKi8KKyNkZWZpbmUgWFhNQUkgIDE4CS8qIE1BSUwgKi8KKyNkZWZp bmUgWFhNT1UgIDE5CS8qIChMb2NhbCkgTU9VTlQgKi8KKyNkZWZpbmUgWFhNU0cgIDIwCS8qIChM b2NhbCkgTUVTU0FHRSAqLworI2RlZmluZSBYWE9VVCAgMjEJLyogT1VUUFVUICovCisjZGVmaW5l IFhYUEFVICAyMgkvKiBQQVVTRSAqLworI2RlZmluZSBYWFBSSSAgMjMJLyogKExvY2FsKSBQUklO VCAqLworI2RlZmluZSBYWFFVSSAgMjQJLyogUVVJVCAqLworI2RlZmluZSBYWFJFQyAgMjUJLyog UkVDRUlWRSAqLworI2RlZmluZSBYWFJFTSAgMjYJLyogUkVNT1RFICovCisjZGVmaW5lIFhYUkVO ICAyNwkvKiAoTG9jYWwpIFJFTkFNRSAqLworI2RlZmluZSBYWFNFTiAgMjgJLyogU0VORCAqLwor CisvKiBTRU5EIHN3aXRjaGVzICovCisKKyNkZWZpbmUgU05EX0JJTiAgMAkvKiBCaW5hcnkgbW9k ZSAqLworI2RlZmluZSBTTkRfREVMICAxCS8qIERlbGV0ZSBhZnRlciAqLworI2RlZmluZSBTTkRf RVhDICAyCS8qIEV4Y2VwdCAqLworI2RlZmluZSBTTkRfTEFSICAzCS8qIExhcmdlciB0aGFuICov CisjZGVmaW5lIFNORF9NQUkgIDQJLyogTWFpbCAqLworI2RlZmluZSBTTkRfQkVGICA1CS8qIEJl Zm9yZSAqLworI2RlZmluZSBTTkRfQUZUICA2CS8qIEFmdGVyICovCisjZGVmaW5lIFNORF9QUkkg IDcJLyogUHJpbnQgKi8KKyNkZWZpbmUgU05EX1NISCAgOAkvKiBRdWlldCAqLworI2RlZmluZSBT TkRfUkVDICA5CS8qIFJlY3Vyc2l2ZSAqLworI2RlZmluZSBTTkRfU01BIDEwCS8qIFNtYWxsZXIg dGhhbiAqLworI2RlZmluZSBTTkRfU1RBIDExCS8qIFN0YXJ0aW5nLWZyb20gKi8KKyNkZWZpbmUg U05EX1RYVCAxMgkvKiBUZXh0IG1vZGUgKi8KKyNkZWZpbmUgU05EX0NNRCAxMwkvKiBGcm9tIGNv bW1hbmQgKHBpcGUpICAqLworI2RlZmluZSBTTkRfUkVTIDE0CS8qIFJlc2VuZC9SZWNvdmVyICov CisjZGVmaW5lIFNORF9QUk8gMTUJLyogUHJvdG9jb2wgKi8KKyNkZWZpbmUgU05EX0FTTiAxNgkv KiBBcy1uYW1lICovCisjZGVmaW5lIFNORF9JTUcgMTcJLyogSW1hZ2UgKi8KKyNkZWZpbmUgU05E X0xCTCAxOAkvKiBMYWJlbGVkICovCisjZGVmaW5lIFNORF9OQUYgMTkJLyogTm90LUFmdGVyICov CisjZGVmaW5lIFNORF9OQkUgMjAJLyogTm90LUJlZm9yZSAqLworI2RlZmluZSBTTkRfRkxUIDIx CS8qIEZpbHRlciAqLworI2RlZmluZSBTTkRfUFRIIDIyCS8qIFBhdGhuYW1lcyAqLworI2RlZmlu ZSBTTkRfTkFNIDIzCS8qIEZpbGVuYW1lcyAqLworI2RlZmluZSBTTkRfTU9WIDI0ICAgICAgLyog TU9WRSB0byBhbm90aGVyIGRpcmVjdG9yeSAqLworI2RlZmluZSBTTkRfUkVOIDI1ICAgICAgLyog UkVOQU1FIGFmdGVyIHNlbmRpbmcgKi8KKyNkZWZpbmUgU05EX0NBTCAyNgkvKiBDYWxpYnJhdGUg Ki8KKyNkZWZpbmUgU05EX0ZJTCAyNwkvKiBGaWxlIGNvbnRhaW5pbmcgbGlzdCBvZiBmaWxlcyB0 byBzZW5kICovCisjZGVmaW5lIFNORF9OT0IgMjgJLyogU2tpcCBiYWNrdXAgZmlsZXMgICovCisj ZGVmaW5lIFNORF9ET1QgMjkJLyogSW5jbHVkZSBkb3QtZmlsZXMgKi8KKyNkZWZpbmUgU05EX05P RCAzMAkvKiBFeGNsdWRlIGRvdC1maWxlcyAqLworI2RlZmluZSBTTkRfQVJSIDMxCS8qIFNlbmQg ZnJvbSBhcnJheSAqLworI2RlZmluZSBTTkRfVFlQIDMyCS8qIFRZUEUgKG9ubHkgc2VuZCB0ZXh0 IChvciBiaW5hcnkpKSAqLworI2RlZmluZSBTTkRfWFBBIDMzCS8qIFRSQU5TUEFSRU5UICovCisj ZGVmaW5lIFNORF9QSVAgMzQJLyogUElQRVMgKi8KKyNkZWZpbmUgU05EX0VSUiAzNQkvKiBFUlJP UiAqLworI2RlZmluZSBTTkRfQ1NMIDM2CS8qIExvY2FsIGNoYXJhY3RlciBzZXQgKi8KKyNkZWZp bmUgU05EX0NTUiAzNwkvKiBSZW1vdGUgY2hhcmFjdGVyIHNldCAqLworI2RlZmluZSBTTkRfVVBE IDM4CS8qIFVwZGF0ZSAqLworI2RlZmluZSBTTkRfQ09MIDM5CS8qIENvbGxpc2lvbiAqLworI2Rl ZmluZSBTTkRfTk1MIDQwCS8qIE5hbWVsaXN0ICovCisjZGVmaW5lIFNORF9TUk4gNDEJLyogU2Vy dmVyLVJlbmFtZSAqLworI2RlZmluZSBTTkRfTE5LIDQyCS8qIEZvbGxvdyBsaW5rcyAqLworI2Rl ZmluZSBTTkRfTkxLIDQzCS8qIERvbid0IGZvbGxvdyBsaW5rcyAqLworI2RlZmluZSBTTkRfU0lN IDQ0CS8qIFNpbXVsYXRlICovCisjZGVmaW5lIFNORF9ESUYgNDUJLyogSWYgZGF0ZXMgRGlmZmVy ICovCisjZGVmaW5lIFNORF9QQVQgNDYJLyogUGF0dGVybiB0byB1c2UgbG9jYWxseSB3aGVuIEdF VCdpbmcgKi8KKyNkZWZpbmUgU05EX05MUyA0NwkvKiAoRlRQIG9ubHkpIE1HRVQgZm9yY2VzIE5M U1QgKi8KKyNkZWZpbmUgU05EX01MUyA0OAkvKiAoRlRQIG9ubHkpIE1HRVQgZm9yY2VzIE1MU0Qg Ki8KKworI2RlZmluZSBTTkRfTUFYIDQ4CS8qIEhpZ2hlc3QgU0VORCBzd2l0Y2ggKi8KKworI2Rl ZmluZSBYWFNFUiAgMjkgICAJLyogU0VSVkVSICovCisjZGVmaW5lIFhYU0VUICAzMAkvKiBTRVQg Ki8KKyNkZWZpbmUgWFhTSEUgIDMxCS8qIENvbW1hbmQgZm9yIFNIRUxMICovCisjZGVmaW5lIFhY U0hPICAzMgkvKiBTSE9XICovCisjZGVmaW5lIFhYU1BBICAzMwkvKiAoTG9jYWwpIFNQQUNFICov CisjZGVmaW5lIFhYU1RBICAzNAkvKiBTVEFUSVNUSUNTICovCisjZGVmaW5lIFhYU1VCICAzNQkv KiAoTG9jYWwpIFNVQk1JVCAqLworI2RlZmluZSBYWFRBSyAgMzYJLyogVEFLRSAqLworI2RlZmlu ZSBYWFRSQSAgMzcJLyogVFJBTlNNSVQgKi8KKyNkZWZpbmUgWFhUWVAgIDM4CS8qIChMb2NhbCkg VFlQRSAqLworI2RlZmluZSBYWFdITyAgMzkJLyogKExvY2FsKSBXSE8gKi8KKyNkZWZpbmUgWFhE SUFMIDQwCS8qIChMb2NhbCkgRElBTCAqLworI2RlZmluZSBYWExPR0kgNDEJLyogKExvY2FsKSBT Q1JJUFQgKi8KKyNkZWZpbmUgWFhDT00gIDQyCS8qIENvbW1lbnQgKi8KKyNkZWZpbmUgWFhIQU4g IDQzICAgICAgIC8qIEhBTkdVUCAqLworI2RlZmluZSBYWFhMQSAgNDQJLyogVFJBTlNMQVRFICov CisjZGVmaW5lIFhYSUYgICA0NQkvKiBJRiAqLworI2RlZmluZSBYWExCTCAgNDYgICAgICAgLyog bGFiZWwgKi8KKyNkZWZpbmUgWFhHT1RPIDQ3CS8qIEdPVE8gKi8KKyNkZWZpbmUgWFhFTkQgIDQ4 ICAgICAgIC8qIEVORCAqLworI2RlZmluZSBYWFNUTyAgNDkgICAgICAgLyogU1RPUCAqLworI2Rl ZmluZSBYWERPICAgNTAgICAgICAgLyogRE8gKi8KKyNkZWZpbmUgWFhQV0QgIDUxICAgICAgIC8q IFBXRCAqLworI2RlZmluZSBYWFRFUyAgNTIgICAgICAgLyogVEVTVCAqLworI2RlZmluZSBYWEFT SyAgNTMgICAgICAgLyogQVNLICovCisjZGVmaW5lIFhYQVNLUSA1NCAgICAgICAvKiBBU0tRICov CisjZGVmaW5lIFhYQVNTICA1NSAgICAgICAvKiBBU1NJR04gKi8KKyNkZWZpbmUgWFhSRUkgIDU2 ICAgICAgIC8qIFJFSU5QVVQgKi8KKyNkZWZpbmUgWFhJTkMgIDU3ICAgICAgIC8qIElOQ1JFTUVO VCAqLworI2RlZmluZSBYWERFQyAgNTkgICAgICAgLyogREVDUkVNRU5UICovCisjZGVmaW5lIFhY RUxTICA2MCAgICAgICAvKiBFTFNFICovCisjZGVmaW5lIFhYRVhFICA2MQkvKiBFWEVDVVRFICov CisjZGVmaW5lIFhYV0FJICA2MgkvKiBXQUlUICovCisjZGVmaW5lIFhYVkVSICA2MyAgICAgICAv KiBWRVJTSU9OICovCisjZGVmaW5lIFhYRU5BICA2NCAgICAgICAvKiBFTkFCTEUgKi8KKyNkZWZp bmUgWFhXUkkgIDY1ICAgICAgIC8qIFdSSVRFICovCisjZGVmaW5lIFhYQ0xTICA2NiAgICAgICAv KiBDTFMgKGNsZWFyIHNjcmVlbikgKi8KKyNkZWZpbmUgWFhSRVQgIDY3CS8qIFJFVFVSTiAqLwor I2RlZmluZSBYWE9QRSAgNjggICAgICAgLyogT1BFTiAqLworI2RlZmluZSBYWFJFQSAgNjkJLyog UkVBRCAqLworI2RlZmluZSBYWE9OICAgNzAgICAgICAgLyogT04gKi8KKyNkZWZpbmUgWFhEQ0wg IDcxICAgICAgIC8qIERFQ0xBUkUgKi8KKyNkZWZpbmUgWFhCRUcgIDcyICAgICAgIC8qIEJFR0lO IChub3QgdXNlZCkgKi8KKyNkZWZpbmUgWFhGT1IgIDcyICAgICAgIC8qIEZPUiAqLworI2RlZmlu ZSBYWFdISSAgNzMgICAgICAgLyogV0hJTEUgKi8KKyNkZWZpbmUgWFhJRlggIDc0ICAgICAgIC8q IEV4dGVuZGVkIElGICovCisjZGVmaW5lIFhYQ01TICA3NSAgICAgICAvKiBTRU5EIGZyb20gY29t bWFuZCBvdXRwdXQgKG5vdCB5ZXQpICovCisjZGVmaW5lIFhYQ01SICA3NiAgICAgICAvKiBSRUNF SVZFIHRvIGEgY29tbWFuZCdzIGlucHV0IChub3QgeWV0KSAqLworI2RlZmluZSBYWENNRyAgNzcg ICAgICAgLyogR0VUIHRvIGEgY29tbWFuZCdzIGlucHV0IChub3QgeWV0KSAqLworI2RlZmluZSBY WFNVUyAgNzggICAgICAgLyogU1VTUEVORCAqLworI2RlZmluZSBYWEVSUiAgNzkgICAgICAgLyog RVJST1IgKi8KKyNkZWZpbmUgWFhNU0UgIDgwICAgICAgIC8qIE1TRU5EICovCisjZGVmaW5lIFhY QlVHICA4MSAgICAgICAvKiBCVUcgKi8KKyNkZWZpbmUgWFhQQUQgIDgyICAgICAgIC8qIFBBRCAo YXMgaW4gWC4yNSBQQUQpIEFOWVgyNSAqLworI2RlZmluZSBYWFJFRCAgODMgICAgICAgLyogUkVE SUFMICovCisjZGVmaW5lIFhYR1RBICA4NAkvKiBfZ2V0YXJncyAoaW52aXNpYmxlIGludGVybmFs KSAqLworI2RlZmluZSBYWFBUQSAgODUJLyogX3B1dGFyZ3MgKGludmlzaWJsZSBpbnRlcm5hbCkg Ki8KKyNkZWZpbmUgWFhHT0sgIDg2ICAgICAgIC8qIEdFVE9LIC0gQXNrIGZvciBZRVMvTk8gKi8K KyNkZWZpbmUgWFhURUwgIDg3CS8qIFRFTE5FVCAqLworI2RlZmluZSBYWEFTWCAgODgJLyogX0FT U0lHTiAoZXZhbHVhdGVzIHZhciBuYW1lKSAqLworI2RlZmluZSBYWERGWCAgODkJLyogX0RFRklO RSAoZXZhbHVhdGVzIHZhciBuYW1lKSAqLworI2RlZmluZSBYWFBORyAgOTAJLyogUElORyAoZm9y IFRDUC9JUCkgKi8KKyNkZWZpbmUgWFhJTlQgIDkxICAgICAgIC8qIElOVFJPRFVDVElPTiAqLwor I2RlZmluZSBYWENISyAgOTIJLyogQ0hFQ0sgKGEgZmVhdHVyZSkgKi8KKyNkZWZpbmUgWFhNU0wg IDkzICAgICAgIC8qIE1TTEVFUCwgTVBBVVNFIChtaWxsaXNlY29uZCBzbGVlcCkgKi8KKyNkZWZp bmUgWFhORVcgIDk0ICAgICAgIC8qIE5FV1MgKi8KKyNkZWZpbmUgWFhBUEMgIDk1ICAgICAgIC8q IEFQQyAqLworI2RlZmluZSBYWEZVTiAgOTYgICAgICAgLyogUkVESVJFQ1QgKi8KKyNkZWZpbmUg WFhXUkwgIDk3CS8qIFdSSVRFLUxJTkUgKi8KKyNkZWZpbmUgWFhSRVhYIDk4CS8qIFJleHggKi8K KyNkZWZpbmUgWFhNSU5QIDEwMAkvKiBNSU5QVVQgKi8KKyNkZWZpbmUgWFhSU0VOIDEwMQkvKiBS RVNFTkQgKi8KKyNkZWZpbmUgWFhQU0VOIDEwMgkvKiBQU0VORCAqLworI2RlZmluZSBYWEdFVEMg MTAzCS8qIEdFVEMgKi8KKyNkZWZpbmUgWFhFVkFMIDEwNAkvKiBFVkFMVUFURSAqLworI2RlZmlu ZSBYWEZXRCAgMTA1CS8qIEZPUldBUkQgKi8KKyNkZWZpbmUgWFhVUEQgIDEwNiAgICAgIC8qIFVQ REFURVMgKi8KKyNkZWZpbmUgWFhCRUVQIDEwNyAgICAgIC8qIEJFRVAgKi8KKyNkZWZpbmUgWFhN T1ZFIDEwOCAgICAgIC8qIE1PVkUgKi8KKyNkZWZpbmUgWFhNTU9WRSAxMDkgICAgIC8qIE1NT1ZF ICovCisjZGVmaW5lIFhYUkVHRVQgMTEwICAgICAvKiBSRUdFVCAqLworI2RlZmluZSBYWExPT0sg IDExMQkvKiBMT09LVVAgKi8KKyNkZWZpbmUgWFhWSUVXICAxMTIgICAgIC8qIFZJRVcgKHRlcm1p bmFsIGJ1ZmZlcikgKi8KKyNkZWZpbmUgWFhBTlNXICAxMTMJLyogQU5TV0VSICh0aGUgcGhvbmUp ICovCisjZGVmaW5lIFhYUERJQSAgMTE0CS8qIFBESUFMIChwYXJ0aWFsIGRpYWwpICovCisjZGVm aW5lIFhYQVNDICAgMTE1CS8qIEFTQ0lJIC8gVEVYVCAqLworI2RlZmluZSBYWEJJTiAgIDExNgkv KiBCSU5BUlkgKi8KKyNkZWZpbmUgWFhGVFAgICAxMTcJLyogRlRQICovCisjZGVmaW5lIFhYTUtE SVIgMTE4CS8qIE1LRElSICovCisjZGVmaW5lIFhYUk1ESVIgMTE5CS8qIFJNRElSICovCisjZGVm aW5lIFhYVEVMT1AgMTIwCS8qIFRFTE9QVCAqLworI2RlZmluZSBYWFJMT0cgIDEyMQkvKiBSTE9H SU4gKi8KKyNkZWZpbmUgWFhVTkRFRiAxMjIJLyogVU5ERUZJTkUgKi8KKyNkZWZpbmUgWFhOUFNI ICAxMjMJLyogTk9QVVNIICovCisjZGVmaW5lIFhYQUREICAgMTI0CS8qIEFERCAqLworI2RlZmlu ZSBBRERfU05EICAgMCAgICAgLyogQUREIFNFTkQtTElTVCAqLworI2RlZmluZSBBRERfQklOICAg MSAgICAgLyogQUREIEJJTkFSWS1QQVRURVJOUyAqLworI2RlZmluZSBBRERfVFhUICAgMiAgICAg LyogQUREIFRFWFQtUEFUVEVSTlMgKi8KKyNkZWZpbmUgWFhMT0NBTCAxMjUJLyogTE9DQUwgKi8K KyNkZWZpbmUgWFhLRVJNSSAxMjYJLyogS0VSTUlUICovCisjZGVmaW5lIFhYREFURSAgMTI3CS8q IERBVEUgKi8KKyNkZWZpbmUgWFhTV0lUICAxMjggICAgIC8qIFNXSVRDSCAqLworI2RlZmluZSBY WFhGV0QgIDEyOQkvKiBfRk9SV0FSRCAqLworI2RlZmluZSBYWFNBVkUgIDEzMCAgICAgLyogU0FW RSAqLworI2RlZmluZSBYWFhFQ0ggIDEzMSAgICAgLyogWEVDSE8gKi8KKyNkZWZpbmUgWFhSREJM ICAxMzIgICAgIC8qIFJFQURCTE9DSyAqLworI2RlZmluZSBYWFdSQkwgIDEzMyAgICAgLyogV1JJ VEVCTE9DSyAqLworI2RlZmluZSBYWFJFVFIgIDEzNCAgICAgLyogUkVUUklFVkUgKi8KKyNkZWZp bmUgWFhFSUdIVCAxMzUgICAgIC8qIEVJR0hUQklUICovCisjZGVmaW5lIFhYRURJVCAgMTM2CS8q IEVESVQgKi8KKyNkZWZpbmUgWFhDU0VOICAxMzcJLyogQ1NFTkQgKi8KKyNkZWZpbmUgWFhDUkVD ICAxMzgJLyogQ1JFQ0VJVkUgKi8KKyNkZWZpbmUgWFhDUSAgICAxMzkJLyogQ1EgKi8KKyNkZWZp bmUgWFhUQVBJICAxNDAgICAgIC8qIFRBUEkgYWN0aW9ucyBzdWNoIGFzIGRpYWxvZ3MgKi8KKyNk ZWZpbmUgWFhSRVMgICAxNDEgICAgIC8qIFJFU0VUICovCisjZGVmaW5lIFhYQ0dFVCAgMTQyICAg ICAvKiBDR0VUICovCisjZGVmaW5lIFhYRlVOQyAgMTQzICAgICAvKiBGdW5jdGlvbiAoaGVscC1v bmx5KSAqLworI2RlZmluZSBYWEtWUkIgIDE0NCAgICAgLyogS3ZlcmIgKGhlbHAtb25seSkgKi8K KyNkZWZpbmUgWFhCUk9XUyAxNDUJLyogQlJPV1NFICovCisjZGVmaW5lIFhYTUdFVCAgMTQ2CS8q IE1HRVQgKi8KKyNkZWZpbmUgWFhCQUNLICAxNDcJLyogQkFDSyAqLworI2RlZmluZSBYWFdIRVJF IDE0OAkvKiBXSEVSRSAqLworI2RlZmluZSBYWFJFRE8gIDE0OSAgICAgLyogUkVETyAqLworI2Rl ZmluZSBYWEVYQ0ggIDE1MCAgICAgLyogRVhDSEFOR0UgKi8KKyNkZWZpbmUgWFhSRU1WICAxNTEg ICAgIC8qIFJFTU9WRSAqLworI2RlZmluZSBYWENIUlQgIDE1MgkvKiBDSFJPT1QgKi8KKyNkZWZp bmUgWFhPUFRTICAxNTMJLyogT3B0aW9ucyAoaGVscC1vbmx5KSAqLworI2RlZmluZSBYWEFVVEgg IDE1NAkvKiBBVVRIT1JJWkUgKi8KKyNkZWZpbmUgWFhQSVBFICAxNTUJLyogUElQRSAqLworI2Rl ZmluZSBYWFNTSCAgIDE1NgkvKiBTU0ggKi8KKyNkZWZpbmUgWFhURVJNICAxNTcgICAgIC8qIFRF Uk1JTkFMICovCisjZGVmaW5lIFhYU1RBVFVTIDE1OCAgICAvKiBTVEFUVVMgKi8KKyNkZWZpbmUg WFhDUFIgICAxNTkJLyogQ09QWVJJR0hUICovCisjZGVmaW5lIFhYQVNTRVIgMTYwCS8qIEFTU0VS VCAqLworI2RlZmluZSBYWFNVQ0MgIDE2MSAgICAgLyogU1VDQ0VFRCAqLworI2RlZmluZSBYWEZB SUwgIDE2MiAgICAgLyogRkFJTCAqLworI2RlZmluZSBYWExPR0lOIDE2MyAgICAgLyogTE9HSU4g Ki8KKyNkZWZpbmUgWFhMT0dPVVQgMTY0ICAgIC8qIExPR09VVCAqLworI2RlZmluZSBYWE5MQ0wg IDE2NSAgICAgLyogTk9MT0NBTCAqLworI2RlZmluZSBYWFdJTEQgIDE2NiAgICAgLyogV0lMRENB UkRTIChoZWxwLW9ubHkpICovCisKKy8qIE9uZS13b3JkIHN5bm9ueW1zIGZvciBSRU1PVEUgY29t bWFuZHMgKi8KKworI2RlZmluZSBYWFJDUFkgIDE2NwkvKiBSRU1PVEUgQ09QWSAqLworI2RlZmlu ZSBYWFJDV0QgIDE2OAkvKiBDaGFuZ2UgV29ya2luZyBEaXJlY3RvcnkgKi8KKyNkZWZpbmUgWFhS REVMICAxNjkJLyogRGVsZXRlICovCisjZGVmaW5lIFhYUkRJUiAgMTcwCS8qIERpcmVjdG9yeSAq LworI2RlZmluZSBYWFJITFAgIDE3MQkvKiBIZWxwICovCisjZGVmaW5lIFhYUkhPUyAgMTcyCS8q IEhvc3QgKi8KKyNkZWZpbmUgWFhSS0VSICAxNzMJLyogS2VybWl0ICovCisjZGVmaW5lIFhYUk1T RyAgMTc0CS8qIE1lc3NhZ2UgKi8KKyNkZWZpbmUgWFhSUFJJICAxNzUJLyogUHJpbnQgKi8KKyNk ZWZpbmUgWFhSUkVOICAxNzYJLyogUmVuYW1lICovCisjZGVmaW5lIFhYUlNFVCAgMTc3CS8qIFNl dCAqLworI2RlZmluZSBYWFJTUEEgIDE3OAkvKiBTcGFjZSAqLworI2RlZmluZSBYWFJTVUIgIDE3 OQkvKiBTdWJtaXQgKi8KKyNkZWZpbmUgWFhSVFlQICAxODAJLyogVHlwZSAqLworI2RlZmluZSBY WFJXSE8gIDE4MQkvKiBXaG8gKi8KKyNkZWZpbmUgWFhSUFdEICAxODIJLyogUHJpbnQgV29ya2lu ZyBEaXJlY3RvcnkgKi8KKyNkZWZpbmUgWFhSUVVFICAxODMJLyogUXVlcnkgKi8KKyNkZWZpbmUg WFhSQVNHICAxODQJLyogQXNzaWduICovCisjZGVmaW5lIFhYUk1LRCAgMTg1CS8qIG1rZGlyICov CisjZGVmaW5lIFhYUlJNRCAgMTg2CS8qIHJtZGlyICovCisjZGVmaW5lIFhYUlhJVCAgMTg3CS8q IEV4aXQgKi8KKworLyogVG9wLUxldmVsIGNvbW1hbmRzLCBjb250J2QuLi4gKi8KKworI2RlZmlu ZSBYWEdFVEsgIDE4OAkvKiBHRVRLRVlDT0RFICovCisjZGVmaW5lIFhYTU9SRSAgMTg5CS8qIE1P UkUgKi8KKyNkZWZpbmUgWFhYT1BUUyAxOTAJLyogRXh0ZW5kZWQtT3B0aW9ucyAoaGVscC1vbmx5 KSAqLworI2RlZmluZSBYWElLU0QgIDE5MQkvKiBJS1NEICovCisjZGVmaW5lIFhYUkVTRVQgMTky CS8qIFJFU0VUICovCisjZGVmaW5lIFhYQVNTT0MgMTkzICAgICAvKiBBU1NPQ0lBVEUgKi8KKwor I2RlZmluZSBBU1NPQ19GQyAgMCAgICAgLyogQVNTT0NJQVRFIEZJTEUtQ0hBUkFDVEVSLVNFVCAq LworI2RlZmluZSBBU1NPQ19UQyAgMSAgICAgLyogQVNTT0NJQVRFIFRSQU5TRkVSLUNIQVJBQ1RF Ui1TRVQgKi8KKworI2RlZmluZSBYWFNISUZUIDE5NAkvKiBTSElGVCAqLworI2RlZmluZSBYWE1B TiAgIDE5NSAgICAgLyogTUFOVUFMICovCisjZGVmaW5lIFhYTFMgICAgMTk2ICAgICAvKiBMUyAq LworI2RlZmluZSBYWFNPUlQgIDE5NwkvKiBTT1JUICovCisjZGVmaW5lIFhYUFVSR0UgMTk4CS8q IFBVUkdFICovCisjZGVmaW5lIFhYRkFTVCAgMTk5CS8qIEZBU1QgKi8KKyNkZWZpbmUgWFhDQVUg ICAyMDAJLyogQ0FVVElPVVMgKi8KKyNkZWZpbmUgWFhST0IgICAyMDEJLyogUk9CVVNUICovCisj ZGVmaW5lIFhYTUFDUk8gMjAyICAgICAvKiBJbW1lZGlhdGUgbWFjcm8gKi8KKyNkZWZpbmUgWFhT Q1JOICAyMDMJLyogU0NSRUVOICovCisjZGVmaW5lIFhYTE5PVVQgMjA0ICAgICAvKiBMSU5FT1VU ICovCisjZGVmaW5lIFhYX0lOQ1IgMjA1CS8qIF9JTkNSRU1FTlQgKi8KKyNkZWZpbmUgWFhfREVD UiAyMDYJLyogX0RFQ1JFTUVOVCAqLworI2RlZmluZSBYWF9FVkFMIDIwNwkvKiBfRVZBTFVBVEUg Ki8KKyNkZWZpbmUgWFhBUlJBWSAyMDgJLyogQVJSQVkgKi8KKyNkZWZpbmUgWFhQQVJTRSAyMDkJ LyogUEFSU0UgKi8KKyNkZWZpbmUgWFhIVFRQICAyMTAgICAgIC8qIEhUVFAgKi8KKworI2lmZGVm IENLQ0hBTk5FTElPCisjZGVmaW5lIFhYRklMRSAgMjExCS8qIEZJTEUgKi8KKyNkZWZpbmUgWFhG X0NMICAyMTIJLyogRkNMT1NFICovCisjZGVmaW5lIFhYRl9GTCAgMjEzCS8qIEZGTFVTSCAqLwor I2RlZmluZSBYWEZfTEkgIDIxNAkvKiBGTElTVCAqLworI2RlZmluZSBYWEZfT1AgIDIxNQkvKiBG T1BFTiAqLworI2RlZmluZSBYWEZfUkUgIDIxNgkvKiBGUkVBRCAqLworI2RlZmluZSBYWEZfU0Ug IDIxNwkvKiBGU0VFSyAqLworI2RlZmluZSBYWEZfU1QgIDIxOAkvKiBGU1RBVFVTICovCisjZGVm aW5lIFhYRl9XUiAgMjE5CS8qIEZXUklURSAqLworI2RlZmluZSBYWEZfUlcgIDIyMAkvKiBGUkVX SU5EICovCisjZGVmaW5lIFhYRl9DTyAgMjIxCS8qIEZDT1VOVCAqLworI2VuZGlmIC8qIENLQ0hB Tk5FTElPICovCisKKyNkZWZpbmUgWFhFWEVDICAyMjIJLyogZXhlYygpICovCisjZGVmaW5lIFhY VFJBQ0UgMjIzCS8qIFRSQUNFICovCisjZGVmaW5lIFhYTk9UQVYgMjI0CS8qIFRoZSAibm90IGF2 YWlsYWJsZSIgY29tbWFuZCAqLworI2RlZmluZSBYWFBUWSAgIDIyNSAgICAgLyogUFRZIChsaWtl IFBJUEUpICovCisjZGVmaW5lIFhYQ0hNT0QgMjI2ICAgICAvKiBDSE1PRCAqLworI2RlZmluZSBY WFBST01QIDIyNwkvKiBQUk9NUFQgKi8KKyNkZWZpbmUgWFhGRUFDSCAyMjgJLyogRk9SRUFDSCAq LworI2RlZmluZSBYWEdSRVAgIDIyOSAgICAgLyogR1JFUCAqLworI2RlZmluZSBYWFNFWFAgIDIz MAkvKiBTLUV4cHJlc3Npb24gKi8KKyNkZWZpbmUgWFhVTkRDTCAyMzEJLyogVU5ERUNMQVJFICov CisjZGVmaW5lIFhYVk9JRCAgMjMyICAgICAvKiBWT0lEICovCisjZGVmaW5lIFhYUFVUICAgMjMz CS8qIFBVVCAqLworI2RlZmluZSBYWFVOREZYIDIzNAkvKiBfVU5ERUZJTkUgKi8KKyNkZWZpbmUg WFhIRUFEICAyMzUgICAgIC8qIEhFQUQgKi8KKyNkZWZpbmUgWFhUQUlMICAyMzYgICAgIC8qIFRB SUwgKi8KKyNkZWZpbmUgWFhERUJVRyAyMzcgICAgIC8qIERFQlVHICovCisjZGVmaW5lIFhYTEVB Uk4gMjM4ICAgICAvKiBMRUFSTiAqLworI2RlZmluZSBYWFBBVCAgIDIzOSAgICAgLyogUEFUVEVS TlMgKGhlbHAgb25seSkgKi8KKworI2RlZmluZSBYWENEVVAgIDI0MCAgICAgLyogQ0RVUCAoQ2hh bmdlIHdvcmtpbmcgZGlyZWN0b3J5IHVwd2FyZHMpICovCisjZGVmaW5lIFhYUkNEVVAgMjQxICAg ICAvKiBSRU1PVEUgQ0RVUCAqLworI2RlZmluZSBYWENBVCAgIDI0MgkvKiBDQVQgKD0gVFlQRSAv Tk9QQUdFKSAqLworI2RlZmluZSBYWEZJUkVXIDI0MyAgICAgLyogRklSRVdBTEwgKGhlbHAgb25s eSkgKi8KKworI2RlZmluZSBYWExDV0QgIDI0NAkvKiBMb2NhbCBDKFcpRCAqLworI2RlZmluZSBY WExDRFUgIDI0NQkvKiBMb2NhbCBDRFVQICovCisjZGVmaW5lIFhYTFBXRCAgMjQ2CS8qIExvY2Fs IFBXRCAqLworI2RlZmluZSBYWExERUwgIDI0NwkvKiBMb2NhbCBERUxFVEUgKi8KKyNkZWZpbmUg WFhMRElSICAyNDgJLyogTG9jYWwgRElSRUNUT1JZICovCisjZGVmaW5lIFhYTFJFTiAgMjQ5CS8q IExvY2FsIFJFTkFNRSAqLworI2RlZmluZSBYWExNS0QgIDI1MAkvKiBMb2NhbCBNS0RJUiAqLwor I2RlZmluZSBYWExSTUQgIDI1MQkvKiBMb2NhbCBSTURJUiAqLworI2RlZmluZSBYWFVTRVIgIDI1 MgkvKiAoRlRQKSBVU0VSICovCisjZGVmaW5lIFhYQUNDVCAgMjUzCS8qIChGVFApIEFDQ09VTlQg Ki8KKyNkZWZpbmUgWFhMSU5LICAyNTQgICAgIC8qIExJTksgc291cmNlIGRlc3RpbmF0aW9uICov CisjZGVmaW5lIFhYT1JJRSAgMjU1CS8qIE9SSUVOVChBVElPTikgKi8KKyNkZWZpbmUgWFhESUFM RVIgMjU2ICAgIC8qIERJQUxFUiAqLworI2RlZmluZSBYWEtDRCAgIDI1NyAgICAgLyogS0NEICov CisjZGVmaW5lIFhYU0lURSAgMjU4ICAgICAvKiAoRlRQKSBTSVRFICovCisjZGVmaW5lIFhYUEFT ViAgMjU5ICAgICAvKiAoRlRQKSBQQVNTSVZFICovCisjZGVmaW5lIFhYQ09OVCAgMjYwCS8qIENP TlRJTlVFICovCisjZGVmaW5lIFhYTlNDUiAgMjYxCS8qIE5PU0NST0xMICovCisjZGVmaW5lIFhY U0ZUUCAgMjYyCS8qIFNGVFAgKi8KKyNkZWZpbmUgWFhTS1JNICAyNjMJLyogU0tFUk1JVCAqLwor I2RlZmluZSBYWFdESVIgIDI2NAkvKiBXRElSRUNUT1JZICovCisjZGVmaW5lIFhYSERJUiAgMjY1 CS8qIEhESVJFQ1RPUlkgKi8KKyNkZWZpbmUgWFhUT1VDICAyNjYJLyogVE9VQ0ggKi8KKyNkZWZp bmUgWFhMT0NVICAyNjcJLyogTE9DVVMgKGZvciBIRUxQKSAqLworI2RlZmluZSBYWFBVVEUgIDI2 OCAgICAgLyogUFVURU5WICovCisjZGVmaW5lIFhYWE1TRyAgMjY5ICAgICAvKiBYTUVTU0FHRSAq LworCisvKiBFbmQgb2YgVG9wLUxldmVsIENvbW1hbmRzICovCisKKyNkZWZpbmUgU0NOX0NMUiAg IDAJCQkvKiBTQ1JFRU4gQ0xFQVIgKi8KKyNkZWZpbmUgU0NOX0NMRSAgIDEJCQkvKiBTQ1JFRU4g Q0xFT0wgKi8KKyNkZWZpbmUgU0NOX01PViAgIDIJCQkvKiBTQ1JFRU4gTU9WRSAqLworCisvKiBB UlJBWSBvcGVyYXRpb25zICovCisKKyNkZWZpbmUgQVJSX0RDTCAgIDAJCQkvKiBEZWNsYXJlICov CisjZGVmaW5lIEFSUl9DUFkgICAxCQkJLyogQ29weSAqLworI2RlZmluZSBBUlJfUlNaICAgMgkJ CS8qIFJlc2l6ZSAqLworI2RlZmluZSBBUlJfU1JUICAgMwkJCS8qIFNvcnQgKi8KKyNkZWZpbmUg QVJSX0NMUiAgIDQJCQkvKiBDbGVhciAqLworI2RlZmluZSBBUlJfU0VBICAgNQkJCS8qIFNlYXJj aCAqLworI2RlZmluZSBBUlJfRFNUICAgNgkJCS8qIERlc3Ryb3kgKi8KKyNkZWZpbmUgQVJSX1NI TyAgIDcJCQkvKiBTaG93ICovCisjZGVmaW5lIEFSUl9TRVQgICA4CQkJLyogU2V0ICovCisjZGVm aW5lIEFSUl9FUVUgICA5CQkJLyogRXF1YXRlICovCisKKy8qIFNPUlQgb3B0aW9ucyAqLworCisj ZGVmaW5lIFNSVF9DQVMgICAwCQkJLyogL0NBU0UgKi8KKyNkZWZpbmUgU1JUX0tFWSAgIDEJCQkv KiAvS0VZOm4gKi8KKyNkZWZpbmUgU1JUX1JFViAgIDIJCQkvKiAvUkVWRVJTRSAqLworI2RlZmlu ZSBTUlRfUk5HICAgMwkJCS8qIC9SQU5HRTpuOm0gKi8KKyNkZWZpbmUgU1JUX05VTSAgIDQJCQkv KiAvTlVNRVJJQyAqLworCisvKiBQVVJHRSBjb21tYW5kIG9wdGlvbnMgKi8KKworI2RlZmluZSBQ VV9LRUVQIDAJCQkvKiAvS0VFUDogKi8KKyNkZWZpbmUgUFVfTElTVCAxCQkJLyogL0xJU1QgKi8K KyNkZWZpbmUgUFVfUEFHRSAyCQkJLyogL1BBR0UgKi8KKyNkZWZpbmUgUFVfTk9QQSAzCQkJLyog L05PUEFHRSAqLworI2RlZmluZSBQVV9OT0RFIDQJCQkvKiAvU0lNVUxBVEUgKi8KKyNkZWZpbmUg UFVfREVMRSA1CQkJLyogL0RFTEVURSAqLworI2RlZmluZSBQVV9OT0xJIDYJCQkvKiAvTk9MSVNU ICovCisjZGVmaW5lIFBVX1FVSUUgNwkJCS8qIC9RVUlFVCAoPSBOT0xJU1QpICovCisjZGVmaW5l IFBVX1ZFUkIgOAkJCS8qIC9WRVJCT1NFICg9IExJU1QpICovCisjZGVmaW5lIFBVX0FTSyAgOQkJ CS8qIC9BU0sgKi8KKyNkZWZpbmUgUFVfTkFTSyAxMAkJCS8qIC9OT0FTSyAqLworI2RlZmluZSBQ VV9MQVIgIDExCQkJLyogL0xBUkdFUi1USEFOOiAqLworI2RlZmluZSBQVV9TTUEgIDEyCQkJLyog L1NNQUxMRVItVEhBTjogKi8KKyNkZWZpbmUgUFVfQUZUICAxMwkJCS8qIC9BRlRFUjogKi8KKyNk ZWZpbmUgUFVfTkFGICAxNAkJCS8qIC9OT1QtQUZURVI6ICovCisjZGVmaW5lIFBVX0JFRiAgMTUJ CQkvKiAvQkVGT1JFOiAqLworI2RlZmluZSBQVV9OQkYgIDE2CQkJLyogL05PVC1CRUZPUkU6ICov CisjZGVmaW5lIFBVX0VYQyAgMTcJCQkvKiAvRVhDRVBUOiAqLworI2RlZmluZSBQVV9SRUNVIDE4 CQkJLyogL1JFQ1VSU0lWRSAqLworI2RlZmluZSBQVV9ET1QgIDE5CQkJLyogL0RPVEZJTEVTICov CisjZGVmaW5lIFBVX05PRE9UIDIwCQkJLyogL05PRE9URklMRVMgKi8KKyNkZWZpbmUgUFVfSERH ICAyMQkJCS8qIC9IRUFESU5HICovCisjZGVmaW5lIFBVX05PSCAgMjIJCQkvKiAvTk9IRUFESU5H ICovCisKKy8qIERFTEVURSBjb21tYW5kIG9wdGlvbnMgKi8KKworI2RlZmluZSBERUxfTk9MIDAJ CQkvKiAvTk9MSVNUICovCisjZGVmaW5lIERFTF9MSVMgMQkJCS8qIC9MSVNUICovCisjZGVmaW5l IERFTF9IREcgMgkJCS8qIC9IRUFESU5HUyAqLworI2RlZmluZSBERUxfTk9IIDIJCQkvKiAvTk9I RUFESU5HUyAqLworI2RlZmluZSBERUxfQkVGIDMJCQkvKiAvQkVGT1JFOiAqLworI2RlZmluZSBE RUxfTkJGIDQJCQkvKiAvTk9ULUJFRk9SRTogKi8KKyNkZWZpbmUgREVMX0FGVCA1CQkJLyogL0FG VEVSOiAqLworI2RlZmluZSBERUxfTkFGIDYJCQkvKiAvTk9ULUFGVEVSOiAqLworI2RlZmluZSBE RUxfRE9UIDcJCQkvKiAvRE9URklMRVMgKi8KKyNkZWZpbmUgREVMX05PRCA4CQkJLyogL05PRE9U RklMRVMgKi8KKyNkZWZpbmUgREVMX0VYQyA5CQkJLyogL0VYQ0VQVDoqLworI2RlZmluZSBERUxf UEFHIDEwCQkJLyogL1BBR0UgKi8KKyNkZWZpbmUgREVMX05PUCAxMQkJCS8qIC9OT1BBR0UgKi8K KyNkZWZpbmUgREVMX1JFQyAxMgkJCS8qIC9SRUNVUlNJVkUgKi8KKyNkZWZpbmUgREVMX05PUiAx MwkJCS8qIC9OT1JFQ1VSU0lWRSAqLworI2RlZmluZSBERUxfVlJCIDE0CQkJLyogL1ZFUkJPU0Ug Ki8KKyNkZWZpbmUgREVMX1FVSSAxNQkJCS8qIC9RVUlFVCAqLworI2RlZmluZSBERUxfU01BIDE2 CQkJLyogL1NNQUxMRVItVEhBTjogKi8KKyNkZWZpbmUgREVMX0xBUiAxNwkJCS8qIC9MQVJHRVIt VEhBTjogKi8KKyNkZWZpbmUgREVMX1NJTSAxOAkJCS8qIC9TSU1VTEFURSAqLworI2RlZmluZSBE RUxfQVNLIDE5CQkJLyogL0FTSyAqLworI2RlZmluZSBERUxfTkFTIDIwCQkJLyogL05PQVNLICov CisjZGVmaW5lIERFTF9TVU0gMjEJCQkvKiAvU1VNTUFSWSAqLworI2RlZmluZSBERUxfRElSIDIy CQkJLyogL0RJUkVDVE9SWSAqLworI2RlZmluZSBERUxfQUxMIDIzCQkJLyogL0FMTCAqLworI2Rl ZmluZSBERUxfVFlQIDI0CQkJLyogL1RZUEU6ICovCisjZGVmaW5lIERFTF9MTksgMjUJCQkvKiAv Rk9MTE9XTElOS1MgKi8KKyNkZWZpbmUgREVMX05MSyAyNgkJCS8qIC9OT0ZPTExPV0xJTktTICov CisKKy8qIFJFTkFNRSBzd2l0Y2hlcyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBzYW1lIHRhYmxl IGFzIHRoZSBERUwgc3dpdGNoZXMgKi8KKworI2RlZmluZSBSRU5fTE9XIDEwMAkJCS8qIENvbnZl cnQgdG8gbG93ZXJjYXNlICovCisjZGVmaW5lIFJFTl9VUFAgMTAxCQkJLyogQ29udmVydG8gdG8g dXBwZXJjYXNlICovCisjZGVmaW5lIFJFTl9SUEwgMTAyCQkJLyogU3RyaW5nIHJlcGxhY2VtZW50 ICovCisjZGVmaW5lIFJFTl9PVlcgMTAzCQkJLyogT3ZlcndyaXRlIGZpbGUgd2l0aCBzYW1lIG5h bWUgKi8KKyNkZWZpbmUgUkVOX1hMQSAxMDQJCQkvKiBUcmFuc2xhdGUgY2hhcmFjdGVyIHNldHMg Ki8KKyNkZWZpbmUgUkVOX1NQQSAxMDUJCQkvKiBGaXggc3BhY2VzICovCisKKy8qIEZJTEUgb3Bl cmF0aW9ucyAqLworCisjZGVmaW5lIEZJTF9PUE4gIDAJCQkvKiBPUEVOICovCisjZGVmaW5lIEZJ TF9DTFMgIDEJCQkvKiBDTE9TRSAqLworI2RlZmluZSBGSUxfUkVBICAyCQkJLyogUkVBRCAqLwor I2RlZmluZSBGSUxfR0VUICAzCQkJLyogR0VUICovCisjZGVmaW5lIEZJTF9XUkkgIDQJCQkvKiBX UklURSAqLworI2RlZmluZSBGSUxfUkVXICA1CQkJLyogUkVXSU5EICovCisjZGVmaW5lIEZJTF9M SVMgIDYJCQkvKiBMSVNUICovCisjZGVmaW5lIEZJTF9GTFUgIDcJCQkvKiBGTFVTSCAqLworI2Rl ZmluZSBGSUxfU0VFICA4CQkJLyogU0VFSyAqLworI2RlZmluZSBGSUxfU1RBICA5CQkJLyogU1RB VFVTICovCisjZGVmaW5lIEZJTF9DT1UgMTAJCQkvKiBDT1VOVCAqLworCisvKiBPUEVOIC8gQ0xP U0UgaXRlbXMgKi8KKworI2RlZmluZSBPUE5fRklfUiAxCQkJLyogRklMRSBSRUFEICovCisjZGVm aW5lIE9QTl9GSV9XIDIJCQkvKiBGSUxFIFdSSVRFICovCisjZGVmaW5lIE9QTl9GSV9BIDMJCQkv KiBGSUxFIEFQUEVORCAqLworI2RlZmluZSBPUE5fUElfUiA0CQkJLyogUElQRSBSRUFEICovCisj ZGVmaW5lIE9QTl9QSV9XIDUJCQkvKiBQSVBFIFdSSVRFICovCisjZGVmaW5lIE9QTl9QVF9SIDYJ CQkvKiBQVFkgUkVBRCAqLworI2RlZmluZSBPUE5fUFRfVyA3CQkJLyogUFRZIFdSSVRFICovCisj ZGVmaW5lIE9QTl9TRVIJIDgJCQkvKiBQT1JUIG9yIExJTkUgKi8KKyNkZWZpbmUgT1BOX05FVAkg OQkJCS8qIEhPU1QgKi8KKworLyogS0VSQkVST1MgY29tbWFuZCBzd2l0Y2hlcyAqLworCisjZGVm aW5lIEtSQl9TX1ZFICAwCS8qIC9WRVJTSU9OICovCisjZGVmaW5lIEtSQl9TX0NBICAxCS8qIC9D QUNIRTogKi8KKyNkZWZpbmUgS1JCX1NfTUFYIDEJLyogSGlnaGVzdCBLRVJCRVJPUyBzd2l0Y2gg bnVtYmVyICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworCisvKiBLRVJCRVJPUyBhY3Rpb25zICov CisKKyNkZWZpbmUgS1JCX0FfSU4gIDAJLyogSU5JVElBTElaRSAqLworI2RlZmluZSBLUkJfQV9E RSAgMQkvKiBERVNUUk9ZICovCisjZGVmaW5lIEtSQl9BX0xDICAyCS8qIExJU1QtQ1JFREVOVElB TFMgKi8KKworLyogS0VSQkVST1MgSU5JVCBzd2l0Y2hlcyAqLworCisjZGVmaW5lIEtSQl9JX0ZX ICAwCS8qIC9GT1JXQVJEQUJMRSAqLworI2RlZmluZSBLUkJfSV9MRiAgMQkvKiAvTElGRVRJTUU6 ICovCisjZGVmaW5lIEtSQl9JX1BEICAyCS8qIC9QT1NUREFURTogKi8KKyNkZWZpbmUgS1JCX0lf UFIgIDMJLyogL1BST1hJQUJMRSAqLworI2RlZmluZSBLUkJfSV9SQiAgNAkvKiAvUkVORVdBQkxF OiAqLworI2RlZmluZSBLUkJfSV9STiAgNQkvKiAvUkVORVcgKi8KKyNkZWZpbmUgS1JCX0lfU1Ig IDYJLyogL1NFUlZJQ0U6ICovCisjZGVmaW5lIEtSQl9JX1ZBICA3CS8qIC9WQUxJREFURSAqLwor I2RlZmluZSBLUkJfSV9STCAgOCAgICAgLyogL1JFQUxNOiAqLworI2RlZmluZSBLUkJfSV9JTiAg OSAgICAgLyogL0lOU1RBTkNFOiAqLworI2RlZmluZSBLUkJfSV9QVyAgMTAgICAgLyogL1BBU1NX T1JEOiAqLworI2RlZmluZSBLUkJfSV9QQSAgMTEgICAgLyogL1BSRUFVVEggKi8KKyNkZWZpbmUg S1JCX0lfVkIgIDEyICAgIC8qIC9WRVJCT1NFICovCisjZGVmaW5lIEtSQl9JX0JSICAxMyAgICAv KiAvQlJJRUYgKi8KKyNkZWZpbmUgS1JCX0lfTkZXIDE0CS8qIC9OT1QtRk9SV0FSREFCTEUgKi8K KyNkZWZpbmUgS1JCX0lfTlBSIDE1CS8qIC9OT1QtUFJPWElBQkxFICovCisjZGVmaW5lIEtSQl9J X05QQSAxNiAgICAvKiAvTk9ULVBSRUFVVEggKi8KKyNkZWZpbmUgS1JCX0lfSzQgIDE3ICAgIC8q IC9LRVJCRVJPUzQgICAgKHNob3VsZCBrNSBnZXQgazQgYXMgd2VsbCkgKi8KKyNkZWZpbmUgS1JC X0lfTks0IDE4ICAgIC8qIC9OTy1LRVJCRVJPUzQgKi8KKyNkZWZpbmUgS1JCX0lfUE9QIDE5ICAg IC8qIC9QT1BVUCAqLworI2RlZmluZSBLUkJfSV9BRFIgMjAgICAgLyogL0FERFJFU1NFUzogKi8K KyNkZWZpbmUgS1JCX0lfTkFEIDIxICAgIC8qIC9OTy1BRERSRVNTRVMgKi8KKyNkZWZpbmUgS1JC X0lfTUFYIDIxICAgIC8qIEhpZ2hlc3QgS0VSQkVST1MgSU5JVCBzd2l0Y2ggbnVtYmVyICovCisK KyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisvKiBTRVQgcGFyYW1ldGVycyAqLworCisjZGVm aW5lIFhZQlJFQSAgMAkvKiBCUkVBSyBzaW11bGF0aW9uICovCisjZGVmaW5lIFhZQ0hLVCAgMQkv KiBCbG9jayBjaGVjayB0eXBlICovCisjZGVmaW5lIFhZREVCVSAgMgkvKiBEZWJ1Z2dpbmcgKi8K KyNkZWZpbmUgWFlERUxBICAzCS8qIERlbGF5ICovCisjZGVmaW5lIFhZRFVQTCAgNAkvKiBEdXBs ZXggKi8KKyNkZWZpbmUgWFlFT0wgICA1CS8qIEVuZC1PZi1MaW5lIChwYWNrZXQgdGVybWluYXRv cikgKi8KKyNkZWZpbmUgWFlFU0MgICA2CS8qIEVzY2FwZSBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUg WFlGSUxFICA3CS8qIEZpbGUgUGFyYW1ldGVycyAoc2VlIGNrY2tlci5oIGZvciB2YWx1ZXMpICov CisJCQkvKiAodGhpcyBzcGFjZSBhdmFpbGFibGUpICovCisjZGVmaW5lIFhZRkxPVyAgOQkvKiBG bG93IENvbnRyb2wgKi8KKyNkZWZpbmUgWFlIQU5EIDEwCS8qIEhhbmRzaGFrZSAqLworI2RlZmlu ZSBYWUlGRCAgMTEJLyogSW5jb21wbGV0ZSBGaWxlIERpc3Bvc2l0aW9uICovCisjZGVmaW5lIFhZ SU1BRyAxMgkvKiAiSW1hZ2UgTW9kZSIgKi8KKyNkZWZpbmUgWFlJTlBVIDEzCS8qIElOUFVUIGNv bW1hbmQgcGFyYW1ldGVycyAqLworI2RlZmluZSBYWUxFTiAgMTQJLyogTWF4aW11bSBwYWNrZXQg bGVuZ3RoIHRvIHNlbmQgKi8KKyNkZWZpbmUgWFlMSU5FIDE1CS8qIENvbW11bmljYXRpb24gbGlu ZSB0byB1c2UgKi8KKworLyogU0VUIExJTkUgLyBTRVQgSE9TVCBjb21tYW5kIHN3aXRjaGVzICov CisKKyNkZWZpbmUgU0xfQ05YICAgMAkvKiAvQ09OTkVDVCAqLworI2RlZmluZSBTTF9TUlYgICAx CS8qIC9TRVJWRVIgKi8KKyNkZWZpbmUgU0xfU0hSICAgMgkvKiAvU0hBUkUgKi8KKyNkZWZpbmUg U0xfTlNIICAgMwkvKiAvTk9TSEFSRSAqLworI2RlZmluZSBTTF9CRUUgICA0CS8qIC9CRUVQICov CisjZGVmaW5lIFNMX0FOUyAgIDUJLyogL0FOU1dFUiAqLworI2RlZmluZSBTTF9ESUEgICA2CS8q IC9ESUFMOnh4eCAqLworI2RlZmluZSBTTF9TUEQgICA3CS8qIC9TUEVFRDp4eHggKi8KKyNkZWZp bmUgU0xfRkxPICAgOAkvKiAvRkxPVzp4eHggKi8KKyNkZWZpbmUgU0xfVE1PICAgOQkvKiAvVElN RU9VVDp4eHggKi8KKyNkZWZpbmUgU0xfQ01EICAxMAkvKiAvQ09NTUFORCAqLworI2RlZmluZSBT TF9QU1cgIDExCS8qIC9QQVNTV09SRDp4eHggKi8KKyNkZWZpbmUgU0xfSUtTICAxMiAgICAgIC8q IC9LRVJNSVQtU0VSVklDRSAqLworI2RlZmluZSBTTF9ORVQgIDEzICAgICAgLyogL05FVFdPUkst VFlQRTp4eHggKi8KKyNkZWZpbmUgU0xfRU5DICAxNCAgICAgIC8qIC9FTkNSWVBUOnR5cGUgKHRl bG5ldCkgL0VOQ1JZUFQgKHJsb2dpbikgKi8KKyNkZWZpbmUgU0xfS1JCNCAxNSAgICAgIC8qIC9L RVJCRVJPUyA0IChybG9naW4vdGVsbmV0KSAqLworI2RlZmluZSBTTF9LUkI1IDE2ICAgICAgLyog L0tFUkJFUk9TIDUgKHJsb2dpbi90ZWxuZXQpICovCisjZGVmaW5lIFNMX1NSUCAgMTcgICAgICAv KiAvU1JQICh0ZWxuZXQpICovCisjZGVmaW5lIFNMX05UTE0gMTggICAgICAvKiAvTlRMTSAodGVs bmV0KSAqLworI2RlZmluZSBTTF9TU0wgIDE5ICAgICAgLyogL1NTTCAodGVsbmV0KSAqLworI2Rl ZmluZSBTTF9VSUQgIDIwICAgICAgLyogL1VTRVJJRDp4eHh4ICovCisjZGVmaW5lIFNMX0FVVEgg MjEgICAgICAvKiAvQVVUSDp0eXBlICovCisjZGVmaW5lIFNMX1dBSVQgMjIJLyogL1dBSVQgKi8K KyNkZWZpbmUgU0xfTk9XQUlUIDIzCS8qIC9OT1dBSVQgKi8KKyNkZWZpbmUgU0xfUFRZICAyNCAg ICAgIC8qIC9QVFkgKi8KKworI2RlZmluZSBYWUxPRyAgMTYJLyogTG9nIGZpbGUgKi8KKyNkZWZp bmUgWFlNQVJLIDE3CS8qIFN0YXJ0IG9mIFBhY2tldCBtYXJrICovCisjZGVmaW5lIFhZTlBBRCAx OAkvKiBBbW91bnQgb2YgcGFkZGluZyAqLworI2RlZmluZSBYWVBBREMgMTkJLyogUGFkIGNoYXJh Y3RlciAqLworI2RlZmluZSBYWVBBUkkgMjAJLyogUGFyaXR5ICovCisjZGVmaW5lIFhZUEFVUyAy MQkvKiBJbnRlcnBhY2tldCBwYXVzZSAqLworI2RlZmluZSBYWVBST00gMjIJLyogUHJvZ3JhbSBw cm9tcHQgc3RyaW5nICovCisjZGVmaW5lIFhZUUJJTiAyMwkvKiA4dGgtYml0IHByZWZpeCAqLwor I2RlZmluZSBYWVFDVEwgMjQJLyogQ29udHJvbCBjaGFyYWN0ZXIgcHJlZml4ICovCisjZGVmaW5l IFhZUkVQVCAyNQkvKiBSZXBlYXQgY291bnQgcHJlZml4ICovCisjZGVmaW5lIFhZUkVUUiAyNgkv KiBSZXRyeSBsaW1pdCAqLworI2RlZmluZSBYWVNQRUUgMjcJLyogTGluZSBzcGVlZCAoYmF1ZCBy YXRlKSAqLworI2RlZmluZSBYWVRBQ0ggMjgJLyogQ2hhcmFjdGVyIHRvIGJlIGRvdWJsZWQgKi8K KyNkZWZpbmUgWFlUSU1PIDI5CS8qIFRpbWVvdXQgaW50ZXJ2YWwgKi8KKyNkZWZpbmUgWFlNT0RN IDMwCS8qIE1vZGVtIC0gYWxzbyBzZWUgWFlESUFMICovCisKKyNkZWZpbmUgWFlTRU5EIDMxCS8q IFNFVCBTRU5EIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgWFlSRUNWIDMyICAgCS8qIFNFVCBSRUNF SVZFIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgWFlURVJNIDMzCS8qIFNFVCBURVJNSU5BTCBwYXJh bWV0ZXJzICovCisjZGVmaW5lICAgWFlUQllUIDAgICAgICAvKiAgVGVybWluYWwgQnl0ZXNpemUg KDcgb3IgOCkgKi8KKyNkZWZpbmUgICBYWVRUWVAgMSAgICAgIC8qICBUZXJtaW5hbCBlbXVsYXRp b24gVHlwZSAqLworI2RlZmluZSAgICAgVFRfTk9ORSAgMAkvKiAgICBOT05FLCBubyBlbXVsYXRp b24gKi8KKyNpZmRlZiBPUzIKKy8qCisgIE5vdGUsIHRoZSBzeW1ib2xzIGZvciBWVCBhbmQgVlQt bGlrZSB0ZXJtaW5hbHMgc2hvdWxkIGJlIGluIGFzY2VuZGluZworICBudW1lcmljYWwgb3JkZXIs IHNvIHRoYXQgaGlnaGVyIG9uZXMgY2FuIGJlIHRyZWF0ZWQgYXMgc3VwZXJzZXRzIG9mCisgIGxv d2VyIG9uZXMgd2l0aCByZXNwZWN0IHRvIGNhcGFiaWxpdGllcy4KKworICBUaGlzIGlzIG5vIGxv bmdlciB0aGUgY2FzZSB3aXRoIHRoZSBpbmZsdXggb2YgbmV3IHRlcm1pbmFsIHR5cGVzLgorICBK dXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBJU1hYWFhYKCkgbWFjcm9zIGluY2x1ZGUgdGhlIHByb3Bl ciBmYW1pbHkKKyAgZ3JvdXBzLgorKi8KKyNkZWZpbmUgICAgIFRUX0RHMjAwICAgIDEgCS8qICAg IERhdGEgR2VuZXJhbCAyMDAgKi8KKyNkZWZpbmUgICAgIFRUX0RHMjEwICAgIDIgIAkvKiAgICBE YXRhIEdlbmVyYWwgMjEwICovCisjZGVmaW5lICAgICBUVF9ERzIxNyAgICAzICAgCS8qICAgIERh dGEgR2VuZXJhbCAyMTcgKi8KKyNkZWZpbmUgICAgIFRUX0hQMjYyMSAgIDQgCS8qICAgIEhld2xl dHQtUGFja2FyZCAyNjIxQSAqLworI2RlZmluZSAgICAgVFRfSFBURVJNICAgNQkvKiAgICBIZXds ZXR0LVBhY2thcmQgQ29uc29sZSAqLworI2RlZmluZSAgICAgVFRfSFpMMTUwMCAgNiAJLyogICAg SGF6ZWx0aW5lIDE1MDAgKi8KKyNkZWZpbmUgICAgIFRUX1ZDNDQwNCAgIDcgCS8qICAgIFZvbGtl ciBDcmFpZyBWQzQ0MDQvNDA0ICovCisjZGVmaW5lICAgICBUVF9XWTMwICAgICA4CS8qICAgIFdZ U0UtMzAvMzArICovCisjZGVmaW5lICAgICBUVF9XWTUwICAgICA5IAkvKiAgICBXWVNFLTUwLzUw KyAqLworI2RlZmluZSAgICAgVFRfV1k2MCAgICAxMCAgICAgICAvKiAgICBXWVNFLTYwCSAqLwor I2RlZmluZSAgICAgVFRfV1kxNjAgICAxMSAgICAgICAvKiAgICBXWVNFLTE2MCAgICovCisjZGVm aW5lICAgICBUVF9RTlggICAgIDEyICAgICAgIC8qICAgIFFOWCAqLworI2RlZmluZSAgICAgVFRf UUFOU0kgICAxMyAgICAgICAvKiAgICBRTlggQW5zaSBlbXVsYXRpb24gKi8KKyNkZWZpbmUgICAg IFRUX1ZUNTIgICAgMTQJLyogICAgREVDIFZULTUyICAqLworI2RlZmluZSAgICAgVFRfSDE5ICAg ICAxNQkvKiAgICBIZWF0aC0xOSAqLworI2RlZmluZSAgICAgVFRfSUJNMzEgICAxNiAgICAgICAv KiAgICBJQk0gMzF4eCAqLworI2RlZmluZSAgICAgVFRfU0NPQU5TSSAxNwkvKiAgICBTQ09BTlNJ IChVbml4IG1vZGUpICovCisjZGVmaW5lICAgICBUVF9BVDM4NiAgIDE4IAkvKiAgICBVbml4d2Fy ZSBBVDM4NiAoVW5peCBtb2RlKSAqLworI2RlZmluZSAgICAgVFRfQU5TSSAgICAxOQkvKiAgICBJ Qk0gQU5TSS5TWVMgKEJCUykgKi8KKyNkZWZpbmUgICAgIFRUX1ZJUDc4MDkgMjAJLyogICAgSG9u ZXl3ZWxsIFZJUDc4MDkgKi8KKyNkZWZpbmUgICAgIFRUX0xJTlVYICAgMjEgICAgICAgLyogICAg TGludXggQ29uc29sZSAqLworI2RlZmluZSAgICAgVFRfSEZUICAgICAyMiAgICAgICAvKiAgICBJ Qk0gSGlnaCBGdW5jdGlvbiBUZXJtaW5hbCAqLworI2RlZmluZSAgICAgVFRfQUlYVEVSTSAyMyAg ICAgICAvKiAgICBJQk0gQUlYdGVybSAqLworI2RlZmluZSAgICAgVFRfU1VOICAgICAyNCAgICAg ICAvKiAgICBTVU4gQ29uc29sZSAqLworI2RlZmluZSAgICAgVFRfQkE4MCAgICAyNSAgICAgICAv KiAgICBOaXhkb3JmIEJBODAgKi8KKyNkZWZpbmUgICAgIFRUX0JFT1MgICAgMjYgICAgICAgLyog ICAgQmVPUyBBbnNpICovCisjZGVmaW5lICAgICBUVF9WVDEwMCAgIDI3CS8qICAgIERFQyBWVC0x MDAgKi8KKyNkZWZpbmUgICAgIFRUX1ZUMTAyICAgMjgJLyogICAgREVDIFZULTEwMiAqLworI2Rl ZmluZSAgICAgVFRfVlQyMjAgICAyOQkvKiAgICBERUMgVlQtMjIwICovCisjZGVmaW5lICAgICBU VF9WVDIyMFBDIDMwICAgICAgIC8qICAgIERFQyBWVC0yMjAgd2l0aCBQQyBrZXlib2FyZCAqLwor I2RlZmluZSAgICAgVFRfVlQzMjAgICAzMQkvKiAgICBERUMgVlQtMzIwICovCisjZGVmaW5lICAg ICBUVF9WVDMyMFBDIDMyCS8qICAgIERFQyBWVC0zMjAgd2l0aCBQQyBrZXlib2FyZCAqLworI2Rl ZmluZSAgICAgVFRfV1kzNzAgICAzMwkvKiAgICBXWVNFIDM3MCBBTlNJIFRlcm1pbmFsICovCisj ZGVmaW5lICAgICBUVF85NzgwMSAgIDM0ICAgICAgIC8qICAgIFNpbml4IDk3ODAxLTV4eCB0ZXJt aW5hbCAqLworI2RlZmluZSAgICAgVFRfQUFBICAgICAzNSAgICAgICAvKiAgICBBbm4gQXJib3Ig QW1iYXNzYWRvciAqLworI2RlZmluZSAgICAgVFRfVFZJOTEwICAzNgkvKiAgICBUVkkgOTEwKyAq LworI2RlZmluZSAgICAgVFRfVFZJOTI1ICAzNyAgICAgICAvKiAgICBUVkkgOTI1ICAqLworI2Rl ZmluZSAgICAgVFRfVFZJOTUwICAzOCAgICAgICAvKiAgICBUVkk5NTAgICAqLworI2RlZmluZSAg ICAgVFRfQURNM0EgICAzOSAgICAgICAvKiAgICBMU0kgQURNIDNBICovCisjZGVmaW5lICAgICBU VF9BRE01ICAgIDQwCQkvKiAgICBMU0kgQURNIDUgKi8KKyNkZWZpbmUgICAgIFRUX1ZUTlQgICAg NDEgICAgICAgLyogICAgTWljcm9zb2Z0IE5UIFZpcnR1YWwgVGVybWluYWwgKi8KKyNkZWZpbmUg ICAgIFRUX01BWCAgIFRUX1ZUTlQKKyNkZWZpbmUgICAgIFRUX1ZUNDIwICAgOTYJLyogICAgREVD IFZULTQyMCAqLworI2RlZmluZSAgICAgVFRfVlQ1MjAgICA5NwkvKiAgICBERUMgVlQtNTIwLzUy NSAqLworI2RlZmluZSAgICAgVFRfVEVLNDAgOTkJLyogICAgVGVrdHJvbml4IDQwMXggKi8KKyNk ZWZpbmUgICAgIFRUX0tCTV9FTUFDUyAgIFRUX01BWCsxCisjZGVmaW5lICAgICBUVF9LQk1fSEVC UkVXICBUVF9NQVgrMgorI2RlZmluZSAgICAgVFRfS0JNX1JVU1NJQU4gVFRfTUFYKzMKKyNkZWZp bmUgICAgIFRUX0tCTV9XUCAgICAgIFRUX01BWCs0CisKKyNkZWZpbmUgSVNBQUEoeCkgICAoeCA9 PSBUVF9BQUEpCisjZGVmaW5lIElTQU5TSSh4KSAgKHggPj0gVFRfU0NPQU5TSSAmJiB4IDw9IFRU X0FOU0kpCisjZGVmaW5lIElTQkE4MCh4KSAgKHggPT0gVFRfQkE4MCkKKyNkZWZpbmUgSVNCRU9T KHgpICAoeCA9PSBUVF9CRU9TKQorI2RlZmluZSBJU1FOWCh4KSAgICh4ID09IFRUX1FOWCkKKyNk ZWZpbmUgSVNRQU5TSSh4KSAgICh4ID09IFRUX1FBTlNJKQorI2RlZmluZSBJU0xJTlVYKHgpICh4 ID09IFRUX0xJTlVYKQorI2RlZmluZSBJU1NDTyh4KSAgICh4ID09IFRUX1NDT0FOU0kpCisjZGVm aW5lIElTQVQzODYoeCkgKHggPT0gVFRfQVQzODYpCisjZGVmaW5lIElTQVZBVEFSKHgpICh4ID09 IFRUX0FOU0kpCisjZGVmaW5lIElTU1VOKHgpICAgICh4ID09IFRUX1NVTikKKyNkZWZpbmUgSVNV TklYQ09OKHgpICh4ID09IFRUX1NDT0FOU0kgfHwgeCA9PSBUVF9BVDM4NiB8fCBcCisgICAgICAg ICAgICAgICAgICAgICAgeCA9PSBUVF9MSU5VWCAgIHx8IHggPT0gVFRfU1VOKQorI2RlZmluZSBJ U0RHMjAwKHgpICh4ID49IFRUX0RHMjAwICYmIHggPD0gVFRfREcyMTcpCisjZGVmaW5lIElTSFpM KHgpICAgKHggPT0gVFRfSFpMMTUwMCkKKyNkZWZpbmUgSVNIMTkoeCkgICAoeCA9PSBUVF9IMTkp CisjZGVmaW5lIElTSUJNMzEoeCkgKHggPT0gVFRfSUJNMzEpCisjZGVmaW5lIElTVFZJKHgpICAg KHggPj0gVFRfVFZJOTEwICYmIHggPD0gVFRfVFZJOTUwKQorI2RlZmluZSBJU1RWSTkxMCh4KSAo eCA9PSBUVF9UVkk5MTApCisjZGVmaW5lIElTVFZJOTI1KHgpICh4ID09IFRUX1RWSTkyNSkKKyNk ZWZpbmUgSVNUVkk5NTAoeCkgKHggPT0gVFRfVFZJOTUwKQorI2RlZmluZSBJU1ZUNTIoeCkgICh4 ID09IFRUX1ZUNTIgfHwgeCA9PSBUVF9IMTkpCisjaWZkZWYgQ09NTUVOVAorI2RlZmluZSBJU1ZU NTIwKHgpICh4ID09IFRUX1ZUNTIwKQorI2RlZmluZSBJU1ZUNDIwKHgpICh4ID49IFRUX1ZUNDIw ICYmIHggPD0gVFRfVlQ1MjApCisjZWxzZSAvKiBDT01NRU5UICovCisvKiBTaW5jZSB3ZSBkbyBu b3QgeWV0IHN1cHBvcnQgNDIwLzUyMCBleHRlbmQgMzIwICovCisjZGVmaW5lIElTVlQ1MjAoeCkg KElTVlQzMjAoeCkpCisjZGVmaW5lIElTVlQ0MjAoeCkgKElTVlQzMjAoeCkpCisjZW5kaWYgLyog Q09NTUVOVCAqLworI2RlZmluZSBJU1ZUMzIwKHgpICh4ID49IFRUX1ZUMzIwICYmIHggPD0gVFRf QUFBKQorI2RlZmluZSBJU1ZUMjIwKHgpICh4ID49IFRUX1ZUMjIwICYmIHggPD0gVFRfQUFBIHx8 IFwKKyAgICAgICAgICAgICAgICAgICAgSVNCRU9TKHgpIHx8IElTUUFOU0koeCkgfHwgXAorICAg ICAgICAgICAgICAgICAgICBJU0xJTlVYKHgpIHx8IElTU1VOKHgpKQorI2RlZmluZSBJU1ZUMTAy KHgpICh4ID49IFRUX1ZJUDc4MDkgJiYgeCA8PSBUVF9CQTgwIHx8IFwKKwkJICAgIHggPT0gVFRf VlQxMDIgfHwgSVNWVDIyMCh4KSkKKyNkZWZpbmUgSVNWVDEwMCh4KSAoeCA9PSBUVF9WVDEwMCB8 fCBJU1ZUMTAyKHgpKQorI2RlZmluZSBJU1dZMzAoeCkgICh4ID09IFRUX1dZMzApCisjZGVmaW5l IElTV1lTRSh4KSAgKHggPj0gVFRfV1kzMCAmJiB4IDw9IFRUX1dZMTYwKQorI2RlZmluZSBJU1dZ NTAoeCkgICh4ID09IFRUX1dZNTApCisjZGVmaW5lIElTV1k2MCh4KSAgKHggPT0gVFRfV1k2MCB8 fCB4ID09IFRUX1dZMTYwKQorI2RlZmluZSBJU1dZMTYwKHgpICh4ID09IFRUX1dZMTYwKQorI2Rl ZmluZSBJU1dZMzcwKHgpICh4ID09IFRUX1dZMzcwKQorI2RlZmluZSBJU1ZDKHgpICAgICh4ID09 IFRUX1ZDNDQwNCkKKyNkZWZpbmUgSVNIUCh4KSAgICAoeCA9PSBUVF9IUFRFUk0gfHwgeCA9PSBU VF9IUDI2MjEpCisjZGVmaW5lIElTSFBURVJNKHgpICh4ID09IFRUX0hQVEVSTSkKKyNkZWZpbmUg SVNWSVAoeCkgICAoeCA9PSBUVF9WSVA3ODA5KQorI2RlZmluZSBJUzk3ODAxKHgpICh4ID09IFRU Xzk3ODAxKQorI2RlZmluZSBJU0hGVCh4KSAgICh4ID09IFRUX0hGVCB8fCB4ID09IFRUX0FJWFRF Uk0pCisjZGVmaW5lIElTQUlYVEVSTSh4KSAoeCA9PSBUVF9BSVhURVJNKQorI2RlZmluZSBJU1RF Syh4KSAgICh4ID09IFRUX1RFSzQwKQorI2RlZmluZSBJU1ZUTlQoeCkgICh4ID09IFRUX1ZUTlQp CisjZGVmaW5lIElTQURNM0EoeCkgKHggPT0gVFRfQURNM0EpCisjZGVmaW5lIElTQURNNSh4KSAg KHggPT0gVFRfQURNNSkKKyNlbmRpZiAvKiBPUzIgKi8KKworI2RlZmluZSAgIFhZVENTICAyICAg ICAgLyogIFRlcm1pbmFsIENoYXJhY3RlciBTZXQgKi8KKyNkZWZpbmUgICBYWVRTTyAgMwkvKiAg VGVybWluYWwgU2hpZnQtSW4vU2hpZnQtT3V0ICovCisjZGVmaW5lICAgWFlUTkwgIDQgICAgICAv KiAgVGVybWluYWwgbmV3bGluZSBtb2RlICovCisjaWZkZWYgT1MyCisjZGVmaW5lICAgWFlUQ09M IDUgICAgICAvKiAgVGVybWluYWwgY29sb3JzICovCisjZW5kaWYgLyogT1MyICovCisjZGVmaW5l ICAgWFlURUMgIDYJLyogIFRlcm1pbmFsIGVjaG8gPSBkdXBsZXggPSBsb2NhbC1lY2hvICovCisj aWZkZWYgT1MyCisjZGVmaW5lICAgWFlUQ1VSIDcJLyogIFRlcm1pbmFsIGN1cnNvciAqLworI2Rl ZmluZSAgICAgVFRDX1VMSU5FIDAKKyNkZWZpbmUgICAgIFRUQ19IQUxGICAxCisjZGVmaW5lICAg ICBUVENfQkxPQ0sgMgorI2RlZmluZSAgIFhZVEFSUiA4CS8qICBUZXJtaW5hbCBhcnJvdy1rZXkg bW9kZSAqLworI2RlZmluZSAgIFhZVEtQRCA5ICAgICAgLyogIFRlcm1pbmFsIGtleXBhZCBtb2Rl ICovCisjZGVmaW5lICAgIFRUS19OT1JNIDAgICAvKiAgICBOb3JtYWwgbW9kZSBmb3IgYXJyb3cg LyBrZXlhZCBrZXlzICovCisjZGVmaW5lICAgIFRUS19BUFBMIDEgICAvKiAgICBBcHBsaWNhdGlv biBtb2RlIGZvciBhcnJvdyAvIGtleWFkIGtleXMgKi8KKyNkZWZpbmUgICBYWVRXUlAgMTAgICAg IC8qICBUZXJtaW5hbCB3cmFwICovCisjZW5kaWYgLyogT1MyICovCisjZGVmaW5lICAgWFlUQ1JE IDExCS8qICBUZXJtaW5hbCBDUi1kaXNwbGF5ICovCisjZGVmaW5lICAgWFlUQU5TIDEyCS8qICBU ZXJtaW5hbCBhbnN3ZXJiYWNrICovCisjaWZkZWYgT1MyCisjZGVmaW5lICAgWFlTQ1JTIDEzICAg ICAvKiAgVGVybWluYWwgc2Nyb2xsYmFjayBidWZmZXIgc2l6ZSAqLworI2VuZGlmIC8qIE9TMiAq LworI2RlZmluZSAgIFhZVEFQQyAxNAkvKiAgVGVybWluYWwgQVBDICovCisjaWZkZWYgT1MyCisj ZGVmaW5lICAgWFlUQkVMIDE1ICAgICAvKiAgVGVybWluYWwgQmVsbCAqLworI2VuZGlmIC8qIE9T MiAqLworI2RlZmluZSAgIFhZVERFQiAxNgkvKiAgVGVybWluYWwgRGVidWcgKi8KKyNpZmRlZiBP UzIKKyNkZWZpbmUgICBYWVRST0wgMTcgICAgIC8qICBUZXJtaW5hbCBSb2xsYmFjayAqLworI2Rl ZmluZSAgICAgVFRSX09WRVIgICAwICAvKiAgUm9sbGJhY2sgT3ZlcndyaXRlICovCisjZGVmaW5l ICAgICBUVFJfSU5TRVJUIDEgIC8qICBSb2xsYmFjayBJbnNlcnQgKi8KKyNkZWZpbmUgICAgIFRU Ul9LRVlTICAgMiAgLyogIEtleXN0cm9rZXMgKi8KKyNkZWZpbmUgICAgICAgVFRSS19JR04gMCAg LyogICAgSWdub3JlICovCisjZGVmaW5lICAgICAgIFRUUktfUlNUIDIgIC8qICAgIFJlc3RvcmUg YW5kIFNlbmQgKi8KKyNkZWZpbmUgICAgICAgVFRSS19TTkQgMSAgLyogICAgU2VuZCAqLworI2Rl ZmluZSAgIFhZVENUUyAxOCAgICAgLyogIFRlcm1pbmFsIFRyYW5zbWl0LVRpbWVvdXQgKi8KKyNk ZWZpbmUgICBYWVRDUEcgMTkgICAgIC8qICBUZXJtaW5hbCBDb2RlIFBhZ2UgKi8KKyNpZmRlZiBD T01NRU5UCisjZGVmaW5lICAgWFlUSENVIDIwICAgICAvKiAgVGVybWluYWwgSGlkZS1DdXJzb3Ig Ki8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZGVmaW5lICAgWFlUUEFDIDIxCSAgICAvKiAgVGVy bWluYWwgT3V0cHV0LVBhY2luZyAqLworI2RlZmluZSAgIFhZVE1PVSAyMgkgICAgLyogIFRlcm1p bmFsIE1vdXNlICovCisjZW5kaWYgLyogT1MyICovCisjZGVmaW5lICAgWFlUSElHIDIzICAgICAv KiAgVGVybWluYWwgV2lkdGggKi8KKyNkZWZpbmUgICBYWVRXSUQgMjQgICAgIC8qICBUZXJtaW5h bCBIZWlnaHQgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgICBYWVRVUEQgMjUgICAgIC8qICBUZXJt aW5hbCBTY3JlZW4tdXBkYXRlICovCisjZGVmaW5lICAgIFRUVV9GQVNUIDAgICAvKiAgICAgRkFT VCBidXQgamVya3kgKi8KKyNkZWZpbmUgICAgVFRVX1NNT09USCAxIC8qICAgICBTTU9PVEggYnV0 IHNsb3cgKi8KKyNkZWZpbmUgICBYWVRGT04gMjYgICAgIC8qICBUZXJtaW5hbCBGdWxsIHNjcmVl biBGb250ICovCisjZGVmaW5lICAgIFRURl9ST00gICAgMCAvKiAgICAgUk9NIGZvbnQgKi8KKyNk ZWZpbmUgICAgVFRGX0NZMSAgICAxIC8qICAgICBDWVJJTEwxIGZvbnQgKi8KKyNkZWZpbmUgICAg VFRGX0NZMiAgICAyIC8qICAgICBDWVJJTEwyIGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGX0NZMyAg ICAzIC8qICAgICBDWVJJTEwzIGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGXzExMSAgMTExIC8qICAg ICBDUDExMSBmb250ICovCisjZGVmaW5lICAgIFRURl8xMTIgIDExMiAvKiAgICAgQ1AxMTIgZm9u dCAqLworI2RlZmluZSAgICBUVEZfMTEzICAxMTMgLyogICAgIENQMTEzIGZvbnQgKi8KKyNkZWZp bmUgICAgVFRGXzQzNyAgNDM3IC8qICAgICBDUDQzNyBmb250ICovCisjZGVmaW5lICAgIFRURl84 NTAgIDg1MCAvKiAgICAgQ1A4NTAgZm9udCAqLworI2RlZmluZSAgICBUVEZfODUxICA4NTEgLyog ICAgIENQODUxIGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGXzg1MiAgODUyIC8qICAgICBDUDg1MiBm b250ICovCisjZGVmaW5lICAgIFRURl84NTMgIDg1MyAvKiAgICAgQ1A4NTMgZm9udCAqLworI2Rl ZmluZSAgICBUVEZfODYwICA4NjAgLyogICAgIENQODYwIGZvbnQgKi8KKyNkZWZpbmUgICAgVFRG Xzg2MSAgODYxIC8qICAgICBDUDg2MSBmb250ICovCisjZGVmaW5lICAgIFRURl84NjIgIDg2MiAv KiAgICAgQ1A4NjIgZm9udCAqLworI2RlZmluZSAgICBUVEZfODYzICA4NjMgLyogICAgIENQODYz IGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGXzg2NCAgODY0IC8qICAgICBDUDg2NCBmb250ICovCisj ZGVmaW5lICAgIFRURl84NjUgIDg2NSAvKiAgICAgQ1A4NjUgZm9udCAqLworI2RlZmluZSAgICBU VEZfODY2ICA4NjYgLyogICAgIENQODY2IGZvbnQgKi8KKyNkZWZpbmUgICAgVFRGXzg4MCAgODgw IC8qICAgICBDUDg4MCBmb250ICovCisjZGVmaW5lICAgIFRURl84ODEgIDg4MSAvKiAgICAgQ1A4 ODEgZm9udCAqLworI2RlZmluZSAgICBUVEZfODgyICA4ODIgLyogICAgIENQODgyIGZvbnQgKi8K KyNkZWZpbmUgICAgVFRGXzg4MyAgODgzIC8qICAgICBDUDg4MyBmb250ICovCisjZGVmaW5lICAg IFRURl84ODQgIDg4NCAvKiAgICAgQ1A4ODQgZm9udCAqLworI2RlZmluZSAgICBUVEZfODg1ICA4 ODUgLyogICAgIENQODg1IGZvbnQgKi8KKyNkZWZpbmUgICBYWVRWQ0ggMjcgICAgIC8qIFNFVCBU RVJNSU5BTCBWSURFTy1DSEFOR0UgKi8KKyNkZWZpbmUgICAgVFZDX0RJUyAgIDAgIC8qICAgICBE SVNBQkxFRCAqLworI2RlZmluZSAgICBUVkNfRU5BICAgMSAgLyogICAgIEVOQUJMRUQgICovCisj ZGVmaW5lICAgIFRWQ19XOTUgICAyICAvKiAgICAgV0lOOTUtU0FGRSAqLworI2VuZGlmIC8qIE9T MiAqLworI2RlZmluZSAgIFhZVEFVVE9ETCAyOCAgLyogU0VUIFRFUk1JTkFMIEFVVE9ET1dOTE9B RCAqLworI2RlZmluZSAgICBUQURfT0ZGICAgICAwIC8qICAgIE9GRiAqLworI2RlZmluZSAgICBU QURfT04gICAgICAxIC8qICAgIE9OICAqLworI2RlZmluZSAgICBUQURfSyAgICAgICAyIC8qICAg IEtFUk1JVCAqLworI2RlZmluZSAgICBUQURfWiAgICAgICAzIC8qICAgIFpNT0RFTSAqLworI2Rl ZmluZSAgICBUQURfWF9TVFIgICAgIDAgLyogICAgU1RSSU5HICovCisjZGVmaW5lICAgIFRBRF9Y X0RFVEVDVCAgMSAvKiAgICBERVRFQ1RJT04gKCBQQUNLRVQsIFNUUklORyApICovCisjZGVmaW5l ICAgIFRBRF9YX0MwICAgICAgMiAvKiAgICBDMCBDT05GTElDVFMgKi8KKyNkZWZpbmUgICAgVEFE X0VSUiAgICAgNCAvKiAgICBFUlJPUiB7IFNUT1AsIENPTlRJTlVFIH0gKi8KKyNkZWZpbmUgICAg VEFEX0FTSyAgICAgNSAvKiAgICBBU0sgKGRpYWxvZykgKi8KKyNkZWZpbmUgICBYWVRBVVRPVUwg MjkgIC8qIFNFVCBURVJNSU5BTCBBVVRPVVBMT0FEICAgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUg ICBYWVRBVFRCVUcgMzAgIC8qIFNFVCBURVJNIEFUVFItQlVHICovCisjZGVmaW5lICAgWFlUU1RB VCAgIDMxICAvKiBTRVQgVEVSTSBTVEFUVVNMSU5FICovCisjZW5kaWYgLyogT1MyICovCisjZGVm aW5lICAgWFlURVNDICAgIDMyICAvKiBTRVQgVEVSTSBFU0NBUEUtQ0hBUkFDVEVSICovCisjZGVm aW5lICAgWFlUQ1RSTCAgIDMzICAvKiBTRVQgVEVSTSBDT05UUk9MUyAqLworI2lmZGVmIE9TMgor I2RlZmluZSAgIFhZVEFUVFIgICAzNCAgLyogU0VUIFRFUk0gQVRUUklCVVRFIHJlcHJlc2VudGF0 aW9uICovCisjZGVmaW5lICAgWFlUU0dSQyAgIDM1ICAvKiBTRVQgVEVSTSBTR1JDT0xPUlMgKi8K KyNlbmRpZiAvKiBPUzIgKi8KKyNkZWZpbmUgICBYWVRMQ1MgICAgMzYgIC8qIFNFVCBURVJNIExP Q0FMLUNIQVJBQ1RFUi1TRVQgKi8KKyNkZWZpbmUgICBYWVRSQ1MgICAgMzcgIC8qIFNFVCBURVJN IFJFTU9URS1DSEFSQUNURVItU0VUICovCisjZGVmaW5lICAgWFlUVU5JICAgIDM4ICAvKiBTRVQg VEVSTSBVTklDT0RFICovCisjZGVmaW5lICAgWFlUS0VZICAgIDM5ICAvKiBTRVQgVEVSTSBLRVkg Ki8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgICBYWVRTRU5EICAgNDAgIC8qIFNFVCBURVJNIFNFTkQt REFUQSAqLworI2RlZmluZSAgIFhZVFNFT0IgICA0MSAgLyogU0VUIFRFUk0gU0VORC1FTkQtT0Yt QkxPQ0sgKi8KKyNkZWZpbmUgICBYWVRNQkVMICAgNDIgIC8qIFNFVCBURVJNIE1BUkdJTi1CRUxM ICovCisjZW5kaWYgLyogT1MyICovCisjZGVmaW5lICAgWFlUSURMRSAgIDQzICAvKiBTRVQgVEVS TSBJRExFLVNFTkQgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgICBYWVRLQk1PRCAgNDQgIC8qIFNF VCBURVJNIEtFWUJPQVJELU1PREUgKi8KKyNkZWZpbmUgICBYWVRVTlggICAgNDUgIC8qIFNFVCBU RVJNIFVOSVgtTU9ERSAoREcpICovCisjZGVmaW5lICAgWFlUQVNDUkwgIDQ2ICAvKiBTRVQgVEVS TSBBVVRPU0NST0xMICovCisjZGVmaW5lICAgWFlUQVBBR0UgIDQ3ICAvKiBTRVQgVEVSTSBBVVRP UEFHRSAqLworI2VuZGlmIC8qIE9TMiAqLworI2RlZmluZSAgIFhZVFJJR0dFUiA0OCAgLyogU0VU IFRFUk0gVFJJR0dFUiAqLworI2lmZGVmIE9TMgorI2RlZmluZSAgIFhZVFBDVEVSTSA0OSAgLyog U0VUIFRFUk0gUENURVJNICovCisjZGVmaW5lICAgWFlUT1BUSSAgIDUwICAvKiBTRVQgVEVSTSBT Q1JFRU4tT1BUSU1JWkUgKi8KKyNkZWZpbmUgICBYWVRTQ05NICAgNTEgIC8qIFNFVCBURVJNIFND UkVFTi1NT0RFIChERUNTQ05NKSAqLworI2VuZGlmIC8qIE9TMiAqLworI2RlZmluZSAgIFhZVFBS TiAgICA1MiAgLyogU0VUIFRFUk0gUFJJTlQge0FVVE8sIENPUFksIE9GRn0gKi8KKyNpZmRlZiBP UzIKKyNkZWZpbmUgICBYWVRTQUMgICAgNTMgIC8qIFNFVCBURVJNIFNQQUNJTkctQVRUUklCVVRF LUNIQVJBQ1RFUiAoaW52KSAqLworI2RlZmluZSAgIFhZVFNOSVBNICA1NCAgLyogU0VUIFRFUk0g U05JLUFVVE9ST0xMICovCisjZGVmaW5lICAgWFlUU05JU00gIDU1ICAvKiBTRVQgVEVSTSBTTkkt U0NST0xMTU9ERSAqLworI2RlZmluZSAgIFhZVEtCREdMICA1NiAgLyogU0VUIFRFUk0gS0JELUZP TExPV1MtR0wvR1IgKi8KKyNkZWZpbmUgICBYWVRWVExORyAgNTcgIC8qIFNFVCBURVJNIFZULUxB TkdVQUdFICovCisjZGVmaW5lICAgICBWVExfTk9SVEhfQU0gIDEKKyNkZWZpbmUgICAgIFZUTF9C UklUSVNIICAgMgorI2RlZmluZSAgICAgVlRMX0JFTEdJQU4gICAzCisjZGVmaW5lICAgICBWVExf RlJfQ0FOICAgIDQKKyNkZWZpbmUgICAgIFZUTF9EQU5JU0ggICAgNQorI2RlZmluZSAgICAgVlRM X0ZJTk5JU0ggICA2CisjZGVmaW5lICAgICBWVExfR0VSTUFOICAgIDcKKyNkZWZpbmUgICAgIFZU TF9EVVRDSCAgICAgOAorI2RlZmluZSAgICAgVlRMX0lUQUxJQU4gICA5CisjZGVmaW5lICAgICBW VExfU1dfRlIgICAgMTAKKyNkZWZpbmUgICAgIFZUTF9TV19HUiAgICAxMQorI2RlZmluZSAgICAg VlRMX1NXRURJU0ggIDEyCisjZGVmaW5lICAgICBWVExfTk9SV0VHSUEgMTMKKyNkZWZpbmUgICAg IFZUTF9GUkVOQ0ggICAxNAorI2RlZmluZSAgICAgVlRMX1NQQU5JU0ggIDE1CisjZGVmaW5lICAg ICBWVExfUE9SVFVHRVMgMTYKKyNkZWZpbmUgICAgIFZUTF9IRUJSRVcgICAxOQorI2RlZmluZSAg ICAgVlRMX0dSRUVLICAgIDIyCisjZGVmaW5lICAgICBWVExfQ0FOQURJQU4gMjgKKyNkZWZpbmUg ICAgIFZUTF9UVVJLX1EgICAyOQorI2RlZmluZSAgICAgVlRMX1RVUktfRiAgIDMwCisjZGVmaW5l ICAgICBWVExfSFVOR0FSSUEgMzEKKyNkZWZpbmUgICAgIFZUTF9TTE9WQUsgICAzMworI2RlZmlu ZSAgICAgVlRMX0NaRUNIICAgIDM0CisjZGVmaW5lICAgICBWVExfUE9MSVNIICAgMzUKKyNkZWZp bmUgICAgIFZUTF9ST01BTklBTiAzNgorI2RlZmluZSAgICAgVlRMX1NDUyAgICAgIDM4CisjZGVm aW5lICAgICBWVExfUlVTU0lBTiAgMzkKKyNkZWZpbmUgICAgIFZUTF9MQVRJTl9BTSA0MAorI2Rl ZmluZSAgIFhZVFZUTlJDICA1OCAgLyogU0VUIFRFUk0gVlQtTlJDLU1PREUgKi8KKyNkZWZpbmUg ICBYWVRTTklDQyAgNTkgIC8qIFNFVCBURVJNIFNOSS1DSC5DT0RFICovCisjZGVmaW5lICAgWFlU U05JRlYgIDYwICAvKiBTRVQgVEVSTSBTTkktRklSTVdBUkUtVkVSU0lPTlMgKi8KKyNkZWZpbmUg ICBYWVRVUkxISSAgNjEgIC8qIFNFVCBURVJNIFVSTC1ISUdITElHSFQgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKyNkZWZpbmUgICBYWVRJVE1PICAgNjIgIC8qIFNFVCBURVJNIElETEUtVElNRU9VVCAq LworI2RlZmluZSAgIFhZVElBQ1QgICA2MyAgLyogU0VUIFRFUk0gSURMRS1BQ1RJT04gICovCisj ZGVmaW5lICAgWFlUTFNQICAgIDY0ICAvKiBTRVQgVEVSTSBMSU5FLVNQQUNJTkcgKi8KKyNkZWZp bmUgICBYWVRMRkQgICAgNjUJLyogU0VUIFRFUk0gTEYtRElTUExBWSAgICovCisKKyNkZWZpbmUg WFlBVFRSIDM0ICAgICAgIC8qIEF0dHJpYnV0ZSBwYWNrZXRzICAqLworI2RlZmluZSBYWVNFUlYg MzUJLyogU2VydmVyIHBhcmFtZXRlcnMgICovCisjZGVmaW5lICAgWFlTRVJUIDAgICAgICAvKiAg U2VydmVyIHRpbWVvdXQgICAgKi8KKyNkZWZpbmUgICBYWVNFUkQgMQkvKiAgU2VydmVyIGRpc3Bs YXkgICAgKi8KKyNkZWZpbmUgICBYWVNFUkkgMiAgICAgIC8qICBTZXJ2ZXIgaWRsZSAgICAgICAq LworI2RlZmluZSAgIFhZU0VSUCAzCS8qICBTZXJ2ZXIgZ2V0LXBhdGggICAqLworI2RlZmluZSAg IFhZU0VSTCA0CS8qICBTZXJ2ZXIgbG9naW4gICAgICAqLworI2RlZmluZSAgIFhZU0VSQyA1CS8q ICBTZXJ2ZXIgQ0QtTWVzc2FnZSAqLworI2RlZmluZSAgIFhZU0VSSyA2CS8qICBTZXJ2ZXIga2Vl cGFsaXZlICAqLworI2RlZmluZSBYWVdJTkQgMzYgICAgICAgLyogV2luZG93IHNpemUgKi8KKyNk ZWZpbmUgWFlYRkVSIDM3ICAgICAgIC8qIFRyYW5zZmVyICovCisjZGVmaW5lICAgWFlYX0NBTiAw CS8qICAgQ2FuY2VsbGF0aW9uICAqLworI2RlZmluZSAgIFhZWF9DU0UgMQkvKiAgIENoYXJhY3Rl ci1TZXQgKi8KKyNkZWZpbmUgICBYWVhfTFNIIDIJLyogICBMb2NraW5nLVNoaWZ0ICovCisjZGVm aW5lICAgWFlYX1BSTyAzCS8qICAgUHJvdG9jb2wgICAgICAqLworI2RlZmluZSAgIFhZWF9NT0Qg NAkvKiAgIE1vZGUgICAgICAgICAgKi8KKyNkZWZpbmUgICBYWVhfRElTIDUJLyogICBEaXNwbGF5 ICAgICAgICovCisjZGVmaW5lICAgWFlYX1NMTyA2CS8qICAgU2xvdy1zdGFydCAgICAqLworI2Rl ZmluZSAgIFhZWF9DUkMgNwkvKiAgIENSQyBjYWxjdWxhdGlvbiAqLworI2RlZmluZSAgIFhZWF9C RUwgOAkvKiAgIEJlbGwgKi8KKyNkZWZpbmUgICBYWVhfUElQIDkJLyogICBQaXBlcyAqLworI2Rl ZmluZSAgIFhZWF9JTlQgMTAgICAgLyogICBJbnRlcnJ1cHRpb24gKi8KKyNkZWZpbmUgICBYWVhf WExBIDExICAgIC8qICAgKGNoYXJhY3Rlci1zZXQpIFRyYW5zbGF0aW9uIE9uL09mZiAqLworI2Rl ZmluZSAgIFhZWF9NU0cgMTIJLyogICBNZXNzYWdlICovCisjZGVmaW5lICAgWFlYX1JQVCAxMwkv KiAgIFJlcG9ydCAqLworI2RlZmluZSBYWUxBTkcgMzggICAgICAgLyogTGFuZ3VhZ2UgKi8KKyNk ZWZpbmUgWFlDT1VOIDM5ICAgICAgIC8qIENvdW50ICovCisjZGVmaW5lIFhZVEFLRSA0MCAgICAg ICAvKiBUYWtlICovCisjZGVmaW5lIFhZVU5DUyA0MSAgICAgICAvKiBVbmtub3duLWNoYXJhY3Rl ci1zZXQgKi8KKyNkZWZpbmUgWFlLRVkgIDQyICAgICAgIC8qIEtleSAqLworI2RlZmluZSBYWU1B Q1IgNDMgICAgICAgLyogTWFjcm8gKi8KKyNkZWZpbmUgWFlIT1NUIDQ0ICAgICAgIC8qIEhvc3Ru YW1lIG9uIG5ldHdvcmsgKi8KKyNkZWZpbmUgWFlORVQgIDQ1ICAgICAgIC8qIFNFVCBORVRXT1JL IHRoaW5ncyAqLworCisjZGVmaW5lIFhZTkVUX0QgOTkJLyogTkVUV09SSyBESVJFQ1RPUlkgKi8K KyNkZWZpbmUgWFlORVRfVCAxMDAJLyogTkVUV09SSyBUWVBFICovCisKKyNkZWZpbmUgWFlDQVJS IDQ2CS8qIENhcnJpZXIgKi8KKyNkZWZpbmUgWFlYTUlUIDQ3ICAgICAgIC8qIFRyYW5zbWl0ICov CisKKyNkZWZpbmUgWFlESUFMIDQ4ICAgICAgIC8qIERpYWwgb3B0aW9ucyAqLworCisvKiBBbmQg bm93IHdlIGludGVycnVwdCB0aGUgZmxvdyB0byBicmluZyB5b3UgbG90cyBvZiBzdHVmZiBhYm91 dCBkaWFsaW5nICovCisKKyNpZm5kZWYgTUFYVE9MTEZSRUUJLyogTWF4aW11bSBudW1iZXIgb2Yg dG9sbC1mcmVlIGFyZWEgY29kZXMgKi8KKyNkZWZpbmUgTUFYVE9MTEZSRUUgOAorI2VuZGlmIC8q IE1BWFRPTExGUkVFICovCisKKyNpZm5kZWYgTUFYVFBDQwkJLyogTWF4aW11bSBUb25lIG9yIFB1 bHNlIGRpYWxpbmcgY291bnRyaWVzICovCisjZGVmaW5lIE1BWFRQQ0MgMTYwCisjZW5kaWYgLyog TUFYVFBDQyAqLworCisjaWZuZGVmIE1BWFBCWEVYQ0gJLyogTWF4aW11bSBudW1iZXIgb2YgUEJY IGV4Y2hhbmdlcyAqLworI2RlZmluZSBNQVhQQlhFWENIIDgKKyNlbmRpZiAvKiBNQVhQQlhFWENI ICovCisKKyNpZm5kZWYgTUFYTE9DQUxBQworI2RlZmluZSBNQVhMT0NBTEFDIDMyCisjZW5kaWYg LyogTUFYTE9DQUxBQyAqLworCisjaWZuZGVmIE1BWEROVU1TCisjaWZkZWYgQklHQlVGT0sKKyNk ZWZpbmUgTUFYRERJUiAzMgkvKiBNYXhpbXVtIG51bWJlciBvZiBkaWFsaW5nIGRpcmVjdG9yaWVz ICovCisjZGVmaW5lIE1BWEROVU1TIDQwOTUJLyogTWF4IG51bWJlcnMgdG8gZmV0Y2ggZnJvbSBk aWFsaW5nIGRpcmVjdG9yaWVzICovCisjZWxzZQorI2RlZmluZSBNQVhERElSIDEyCisjZGVmaW5l IE1BWEROVU1TIDEwMjQKKyNlbmRpZiAvKiBCSUdCVUZPSyAqLworI2VuZGlmIC8qIE1BWEROVU1T ICovCisvKgorICBJTVBPUlRBTlQ6IEluIDVBKDE5MiksIHRoZSBvbGQgU0VUIERJQUwgY29tbWFu ZCB3YXMgc3BsaXQgaW50byB0d28gY29tbWFuZHM6CisgIFNFVCBNT0RFTSAoZm9yIG1vZGVtLXJl bGF0ZWQgcGFyYW1ldGVycykgYW5kIFNFVCBESUFMIChmb3IgZGlhbGluZyBpdGVtcykuCisgIFRv IHByZXNlcnZlIHRoZSBvbGQgZm9ybWF0cywgZXRjLCBpbnZpc2libHkgd2Uga2VlcCBvbmUgc3lt Ym9sIHNwYWNlIGZvcgorICBib3RoIGNvbW1hbmRzLgorKi8KKyNkZWZpbmUgIFhZREhVUCAgMAkv KiAgIERpYWwgSGFuZ3VwICovCisjZGVmaW5lICBYWURJTkkgIDEgICAgICAvKiAgIE1PREVNIChk aWFsKSBJbml0aWFsaXphdGlvbiBzdHJpbmcgKi8KKyNkZWZpbmUgIFhZREtTUCAgMiAgICAgIC8q ICAgTU9ERU0gKGRpYWwpIEtlcm1pdC1TcG9vZiAqLworI2RlZmluZSAgWFlEVE1PICAzICAgICAg LyogICBEaWFsIFRpbWVvdXQgKi8KKyNkZWZpbmUgIFhZRERQWSAgNCAgICAgIC8qICAgRGlhbCBE aXNwbGF5ICovCisjZGVmaW5lICBYWURTUEQgIDUgICAgICAvKiAgIERpYWwgU3BlZWQgbWF0Y2hp bmcgKi8KKyNkZWZpbmUgIFhZRE1OUCAgNgkvKiAgIE1PREVNIChkaWFsKSBNTlAgbmVnb3RpYXRp b24gZW5hYmxlZCAob2Jzb2xldGUpICovCisjZGVmaW5lICBYWURFQyAgIDcJLyogICBNT0RFTSAo ZGlhbCkgZXJyb3IgY29ycmVjdGlvbiBlbmFibGVkICovCisjZGVmaW5lICBYWUREQyAgIDggICAg ICAvKiAgIE1PREVNIChkaWFsKSBjb21wcmVzc2lvbiBlbmFibGVkICovCisjZGVmaW5lICBYWURI Q00gIDkgICAgICAvKiAgIE1PREVNIChkaWFsKSBoYW5ndXAtc3RyaW5nIChtb3ZlZCBlbHNld2hl cmUpICovCisjZGVmaW5lICBYWURESVIgMTAJLyogICBEaWFsIGRpcmVjdG9yeSAqLworI2RlZmlu ZSAgWFlERElBIDExCS8qICAgTU9ERU0gKGRpYWwpIGRpYWwtY29tbWFuZCAqLworI2RlZmluZSAg WFlETUhVIDEyCS8qICAgTU9ERU0gSEFOR1VQIChkaWFsIG1vZGVtLWhhbmd1cCkgKi8KKworI2lm bmRlZiBERUZNREhVUAkvKiBEZWZhdWx0IE1PREVNIEhBTkdVUC1NRVRIT0QgKi8KKyNkZWZpbmUg REVGTURNSFVQIDEJLyogMCA9IFJTMjMyLCAxID0gbW9kZW0gY29tbWFuZCAqLworI2VuZGlmIC8q IERFRk1ETUhVUCAqLworCisjZGVmaW5lICBYWUROUFIgMTMgICAgICAvKiAgIERpYWwgUFJFRklY ICovCisjZGVmaW5lICBYWURTVFIgMTQJLyogICBNT0RFTSBDT01NQU5EIChkaWFsIHN0cmluZykg Li4uICovCisKKyNkZWZpbmUgICBYWURTX0RDIDAJLyogICAgRGF0YSBjb21wcmVzc2lvbiAqLwor I2RlZmluZSAgIFhZRFNfRUMgMQkvKiAgICBFcnJvciBjb3JyZWN0aW9uICovCisjZGVmaW5lICAg WFlEU19IVSAyICAgICAvKiAgICBIYW5ndXAgY29tbWFuZCAqLworI2RlZmluZSAgIFhZRFNfSFcg MyAgICAgLyogICAgSGFyZHdhcmUgZmxvdyBjb250cm9sICovCisjZGVmaW5lICAgWFlEU19JTiA0 ICAgICAvKiAgICBJbml0LXN0cmluZyAqLworI2RlZmluZSAgIFhZRFNfTkYgNSAgICAgLyogICAg Tm8gZmxvdyBjb250cm9sICovCisjZGVmaW5lICAgWFlEU19QWCA2ICAgICAvKiAgICBQcmVmaXgg KG5vLCB0aGlzIGdvZXMgaW4gU0VUIERJQUwpICovCisjZGVmaW5lICAgWFlEU19TVyA3ICAgICAv KiAgICBTb2Z0d2FyZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUgICBYWURTX0RUIDggICAgIC8q ICAgIFRvbmUgZGlhbGluZyBjb21tYW5kICovCisjZGVmaW5lICAgWFlEU19EUCA5ICAgICAvKiAg ICBQdWxzZSBkaWFsaW5nIGNvbW1hbmQgKi8KKyNkZWZpbmUgICBYWURTX0FOIDEwICAgIC8qICAg IEF1dG9hbnN3ZXIgKi8KKyNkZWZpbmUgICBYWURTX1JTIDExICAgIC8qICAgIFJlc2V0ICovCisj ZGVmaW5lICAgWFlEU19NUyAxMiAgICAvKiAgICBEaWFsIG1vZGUgc3RyaW5nICovCisjZGVmaW5l ICAgWFlEU19NUCAxMyAgICAvKiAgICBEaWFsIG1vZGUgcHJvbXB0ICovCisjZGVmaW5lICAgWFlE U19TUCAxNAkvKiAgICBNb2RlbSBzcGVha2VyICovCisjZGVmaW5lICAgWFlEU19WTyAxNQkvKiAg ICBNb2RlbSBzcGVha2VyIHZvbHVtZSAqLworI2RlZmluZSAgIFhZRFNfSUQgMTYJLyogICAgSWdu b3JlIGRpYWx0b25lICovCisjZGVmaW5lICAgWFlEU19JMiAxNwkvKiAgICBJbml0IHN0cmluZyAj MiAqLworCisjZGVmaW5lICAgWFlETV9BICA5ICAgICAvKiAgICBNZXRob2Q6IEF1dG8gKi8KKyNk ZWZpbmUgICBYWURNX0QgIDAgICAgIC8qICAgICAgRGVmYXVsdCAqLworI2RlZmluZSAgIFhZRE1f VCAgMiAgICAgLyogICAgICBUb25lICovCisjZGVmaW5lICAgWFlETV9QICAzICAgICAvKiAgICAg IFB1bHNlICovCisKKyNkZWZpbmUgIFhZREZDICAgMTUJLyogICBNT0RFTSAoZGlhbCkgZmxvdy1j b250cm9sICovCisjZGVmaW5lICBYWURNVEggIDE2CS8qICAgRGlhbCBtZXRob2QgKi8KKyNkZWZp bmUgIFhZREVTQyAgMTcgICAgIC8qICAgTU9ERU0gKGRpYWwpIGVzY2FwZS1jaGFyYWN0ZXIgKi8K KyNkZWZpbmUgIFhZRE1BWCAgMTgJLyogICBNT0RFTSAoZGlhbCkgbWF4aW11bSBpbnRlcmZhY2Ug c3BlZWQgKi8KKyNkZWZpbmUgIFhZRENBUCAgMTkgICAgIC8qICAgTU9ERU0gKGRpYWwpIGNhcGFi aWxpdGllcyAqLworI2RlZmluZSAgWFlEVFlQICAyMAkvKiAgIE1PREVNIFRZUEUgKi8KKyNkZWZp bmUgIFhZRElOVCAgMjEJLyogICBESUFMIHJldHJpZXMgKi8KKyNkZWZpbmUgIFhZRFJUTSAgMjIJ LyogICBESUFMIHRpbWUgYmV0d2VlbiByZXRyaWVzICovCisjZGVmaW5lICBYWUROQU0gIDIzCS8q ICAgTU9ERU0gTkFNRSAqLworI2RlZmluZSAgWFlETEFDICAyNAkvKiAgIERJQUwgKExPQ0FMLSlB UkVBLUNPREUgKi8KKyNkZWZpbmUgIFhZRE1DRCAgMjUJLyogICBNT0RFTSBDQVJSSUVSICovCisK KyNkZWZpbmUgIFhZRENORiAgMjYJLyogICBESUFMIENPTkZJUk1BVElPTiAqLworI2RlZmluZSAg WFlEQ1ZUICAyNwkvKiAgIERJQUwgQ09OVkVSVC1ESVJFQ1RPUlkgKi8KKyNkZWZpbmUgIFhZRElY UCAgMjgJLyogICBESUFMIElOVEVSTkFUSU9OQUwtUFJFRklYICovCisjZGVmaW5lICBYWURJWFMg IDI5CS8qICAgRElBTCBJTlRFUk5BVElPTkFMLVNVRkZJWCAqLworI2RlZmluZSAgWFlETENDICAz MAkvKiAgIERJQUwgTE9DQUwtQ09VTlRSWS1DT0RFICovCisjZGVmaW5lICBYWURMRFAgIDMxCS8q ICAgRElBTCBMT05HLURJU1RBTkNFLVBSRUZJWCAqLworI2RlZmluZSAgWFlETERTICAzMgkvKiAg IERJQUwgTE9ORy1ESVNUQU5DRS1TVUZGSVggKi8KKyNkZWZpbmUgIFhZRFBYWCAgMzMJLyogICBE SUFMIFBCWC1FWENIQU5HRSAqLworI2RlZmluZSAgWFlEUFhJICAzNAkvKiAgIERJQUwgUEJYLUlO VEVSTkFMLVBSRUZJWCAqLworI2RlZmluZSAgWFlEUFhPICAzNQkvKiAgIERJQUwgUEJYLU9VVFNJ REUtUFJFRklYICovCisjZGVmaW5lICBYWURTRlggIDM2CS8qICAgRElBTCBTVUZGSVggKi8KKyNk ZWZpbmUgIFhZRFNSVCAgMzcJLyogICBESUFMIFNPUlQgKi8KKyNkZWZpbmUgIFhZRFRGQyAgMzgJ LyogICBESUFMIFRPTEwtRlJFRS1BUkVBLUNPREUgKi8KKyNkZWZpbmUgIFhZRFRGUCAgMzkJLyog ICBESUFMIFRPTEwtRlJFRS1QUkVGSVggKi8KKyNkZWZpbmUgIFhZRFRGUyAgNDAJLyogICBESUFM IFRPTEwtRlJFRS1TVUZGSVggKi8KKyNkZWZpbmUgIFhZRENPTiAgNDEgICAgIC8qICAgRElBTCBD T05ORUNUICovCisjZGVmaW5lICBYWURSU1RSIDQyICAgICAvKiAgIERJQUwgUkVTVFJJQ1QgKi8K KyNkZWZpbmUgIFhZRFJTRVQgNDMgICAgIC8qICAgTU9ERU0gUkVTRVQgKi8KKyNkZWZpbmUgIFhZ RExDUCAgNDQJLyogICBESUFMIExPQ0FMLVBSRUZJWCAqLworI2RlZmluZSAgWFlETENTICA0NQkv KiAgIERJQUwgTE9DQUwtU1VGRklYICovCisjZGVmaW5lICBYWURMTEFDIDQ2ICAgICAvKiAgIERJ QUwgTEMtQVJFQS1DT0RFUyAqLworI2RlZmluZSAgWFlERkxEICA0NwkvKiAgIERJQUwgRk9SQ0Ug TE9ORy1ESVNUQU5DRSAqLworI2RlZmluZSAgWFlEU1BLICA0OAkvKiAgIE1PREVNIFNQRUFLRVIg Ki8KKyNkZWZpbmUgIFhZRFZPTCAgNDkJLyogICBNT0RFTSBWT0xVTUUgKi8KKyNkZWZpbmUgIFhZ RElEVCAgNTAJLyogICBJR05PUkUgRElBTFRPTkUgKi8KKyNkZWZpbmUgIFhZRFBBQyAgNTEJLyog ICBQQUNJTkcgKi8KKyNkZWZpbmUgIFhZRE1BQyAgNTIgICAgIC8qICAgTUFDUk8gKi8KKyNkZWZp bmUgIFhZRFBVQ0MgNTMJLyogICBQVUxTRS1DT1VOVFJJRVMgKi8KKyNkZWZpbmUgIFhZRFRPQ0Mg NTQJLyogICBUT05FLUNPVU5UUklFUyAqLworI2RlZmluZSAgWFlEVEVTVCA1NQkvKiAgIFRFU1Qg Ki8KKworI2RlZmluZSBYWUFfQ0lEICAgMQkvKiBTRVQgQU5TV0VSIENBTExFUi1JRCAqLworI2Rl ZmluZSBYWUFfUk5HICAgMgkvKiBTRVQgQU5TV0VSIFJJTkdTICovCisKKyNkZWZpbmUgWFlTRVNT IDQ5ICAgICAgIC8qIFNFVCBTRVNTSU9OIG9wdGlvbnMgKi8KKyNkZWZpbmUgWFlCVUYgIDUwICAg ICAgIC8qIEJ1ZmZlciBsZW5ndGggKi8KKyNkZWZpbmUgWFlCQUNLIDUxCS8qIEJhY2tncm91bmQg Ki8KKyNkZWZpbmUgWFlERkxUIDUyICAgICAgIC8qIERlZmF1bHQgKi8KKyNkZWZpbmUgWFlEQkwg IDUzCS8qIERvdWJsZSAqLworI2RlZmluZSBYWUNNRCAgNTQgICAgICAgLyogQ09NTUFORCAqLwor I2RlZmluZSBYWUNBU0UgNTUgICAgICAgLyogQ2FzZSAqLworI2RlZmluZSBYWUNPTVAgNTYgICAg ICAgLyogQ29tcHJlc3Npb24gKi8KKyNkZWZpbmUgWFlYMjUgIDU3ICAgICAgIC8qIFguMjUgcGFy YW1ldGVyIChBTllYMjUpICovCisjZGVmaW5lIFhZUEFEICA1OCAgICAgICAvKiBYLjMgUEFEIHBh cmFtZXRlciAoQU5ZWDI1KSAqLworI2RlZmluZSBYWVdJTEQgNTkgICAgICAgLyogV2lsZGNhcmQg ZXhwYW5zaW9uIG1ldGhvZCAqLworCisjZGVmaW5lIFdJTERfT0ZGICAwCS8qIFdpbGRjYXJkIGV4 cGFuc2lvbiBvZmYgKi8KKyNkZWZpbmUgV0lMRF9PTiAgIDEJLyogV2lsZGNhcmQgZXhwYW5zaW9u IG9uICAqLworI2RlZmluZSBXSUxEX0tFUiAgMgkvKiBXaWxkY2FyZCBleHBhbnNpb24gYnkgS2Vy bWl0ICovCisjZGVmaW5lIFdJTERfU0hFICAzCS8qIFdpbGRjYXJkIGV4cGFuc2lvbiBieSBTaGVs bCAqLworCisjZGVmaW5lIFhZU1VTUCA2MCAgICAgICAvKiBTdXNwZW5kICovCisjZGVmaW5lIFhZ TUFJTCA2MQkvKiBNYWlsLUNvbW1hbmQgKi8KKyNkZWZpbmUgWFlQUklOIDYyCS8qIFByaW50LUNv bW1hbmQgKi8KKyNkZWZpbmUgWFlRVUlFIDYzCS8qIFF1aWV0ICovCisjZGVmaW5lIFhZTENMRSA2 NAkvKiBMb2NhbC1lY2hvICovCisjZGVmaW5lIFhZU0NSSSA2NQkvKiBTQ1JJUFQgY29tbWFuZCBw YXJhbWV0ZXJzICovCisjZGVmaW5lIFhZTVNHUyA2NiAgICAgICAvKiBNRVNTQUdFcyBPTi9PRkYg Ki8KKyNpZmRlZiBUTkNPREUKKyNkZWZpbmUgWFlURUwgIDY3CS8qIFNFVCBURUxORVQgcGFyYW1l dGVycyAqLworI2RlZmluZSAgQ0tfVE5fRUMgMAkvKiAgVEVMTkVUIEVDSE8gKi8KKyNkZWZpbmUg IENLX1ROX1RUIDEJLyogIFRFTE5FVCBURVJNSU5BTC1UWVBFICovCisjZGVmaW5lICBDS19UTl9O TCAyICAgICAvKiAgVEVMTkVUIE5FV0xJTkUtTU9ERSAqLworI2RlZmluZSAgQ0tfVE5fQk0gMyAg ICAgLyogIFRFTE5FVCBCSU5BUlktTU9ERSAqLworI2RlZmluZSAgQ0tfVE5fQlVHIDQgICAgLyog IFRFTE5FVCBCVUcgKi8KKyNkZWZpbmUgIENLX1ROX0VOViA1ICAgIC8qICBURUxORVQgRU5WSVJP Tk1FTlQgKi8KKyNkZWZpbmUgICAgVE5fRU5WX1VTUiAgMCAvKiAgICBWQVIgVVNFUiAqLworI2Rl ZmluZSAgICBUTl9FTlZfSk9CICAxIC8qICAgIFZBUiBKT0IgKi8KKyNkZWZpbmUgICAgVE5fRU5W X0FDQ1QgMiAvKiAgICBWQVIgQUNDVCAqLworI2RlZmluZSAgICBUTl9FTlZfUFJOVCAzIC8qICAg IFZBUiBQUklOVEVSICovCisjZGVmaW5lICAgIFROX0VOVl9TWVMgIDQgLyogICAgVkFSIFNZU1RF TVRZUEUgKi8KKyNkZWZpbmUgICAgVE5fRU5WX0RJU1AgNSAvKiAgICBWQVIgRElTUExBWSAqLwor I2RlZmluZSAgICBUTl9FTlZfVVZBUiA2IC8qICAgIFVTRVJWQVIgKi8KKyNkZWZpbmUgICAgVE5f RU5WX0xPQyAgNyAvKiAgICBVU0VSVkFSIExPQ0FUSU9OICovCisjZGVmaW5lICAgIFROX0VOVl9P TiAgOTggLyogICAgT04gKGVuYWJsZWQpICovCisjZGVmaW5lICAgIFROX0VOVl9PRkYgOTkgLyog ICAgT0ZGIChkaXNhYmxlZCkgKi8KKyNkZWZpbmUgIENLX1ROX0xPQyA2ICAgIC8qICBURUxORVQg TE9DQVRJT04gKi8KKyNkZWZpbmUgIENLX1ROX0FVICA3ICAgIC8qICBURUxORVQgQVVUSEVOVElD QVRJT04gKi8KKyNkZWZpbmUgICAgVE5fQVVfRldEICAgNCAvKiAgICBBVVRIIEZPUldBUkQgKi8K KyNkZWZpbmUgICAgVE5fQVVfVFlQICAgNSAvKiAgICBBVVRIIFRZUEUgKi8KKyNkZWZpbmUgICAg ICBBVVRIX05PTkUgMCAvKiAgICAgIEFVVEggTk9ORSAqLworI2RlZmluZSAgICAgIEFVVEhfS1JC NCAxIC8qICAgICAgQVVUSCBLZXJiZXJvcyBJViAqLworI2RlZmluZSAgICAgIEFVVEhfS1JCNSAy IC8qICAgICAgQVVUSCBLZXJiZXJvcyBWICovCisjZGVmaW5lICAgICAgQVVUSF9TU0wgIDcgLyog ICAgICBBVVRIIFNlY3VyZSBTb2NrZXRzIExheWVyICovCisjZGVmaW5lICAgICAgQVVUSF9UTFMg OTggLyogICAgICBBVVRIIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAqLworI2RlZmluZSAgICAg IEFVVEhfU1JQICA1IC8qICAgICAgQVVUSCBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkICovCisjZGVm aW5lICAgICAgQVVUSF9OVExNIDE1IC8qICAgICAgQVVUSCBOVCBMYW4gTWFuYWdlciAqLworI2Rl ZmluZSAgICAgIEFVVEhfQVVUTyA5OSAvKiAgICAgQVVUSCBBVVRPTUFUSUMgKi8KKyNkZWZpbmUg ICAgVE5fQVVfSE9XICA4ICAvKiAgICBBVVRIIEhPVyBGTEFHICovCisjZGVmaW5lICAgIFROX0FV X0VOQyAgOSAgLyogICAgQVVUSCBFTkNSWVBUIEZMQUcgKi8KKyNkZWZpbmUgIENLX1ROX0VOQyA4 ICAgIC8qICBURUxORVQgRU5DUllQVElPTiAqLworI2RlZmluZSAgICBUTl9FTl9UWVAgICA0IC8q ICAgICAgRU5DUllQVCBUWVBFICovCisjZGVmaW5lICAgIFROX0VOX1NUQVJUIDUgLyogICAgICBF TkNSWVBUIFNUQVJUICovCisjZGVmaW5lICAgIFROX0VOX1NUT1AgIDYgLyogICAgICBFTkNSWVBU IFNUT1AgICovCisjZGVmaW5lICBDS19UTl9JS1MgOSAgICAvKiAgVEVMTkVUIEtFUk1JVC1TRVJW RVIgKi8KKyNkZWZpbmUgIENLX1ROX1JFICAxMCAgIC8qICBURUxORVQgUkVNT1RFLUVDSE8gKi8K KyNkZWZpbmUgIENLX1ROX1RMUyAxMSAgIC8qICBURUxORVQgU1RBUlRfVExTICovCisjZGVmaW5l ICBDS19UTl9YRCAgMTIgICAvKiAgVEVMTkVUIFhESVNQTE9DICovCisjZGVmaW5lICBDS19UTl9O QVdTIDEzICAvKiAgVEVMTkVUIE5BV1MgKi8KKyNkZWZpbmUgIENLX1ROX1dBSVQgMTQgIC8qICBU RUxORVQgV0FJVC1GT1ItTkVHT1RJQVRJT05TICovCisjZGVmaW5lICBDS19UTl9TR0EgIDE1ICAv KiAgVEVMTkVUIFNHQSAqLworI2RlZmluZSAgQ0tfVE5fQ0xJRU5UIDE2ICAvKiBURUxORVQgQ0xJ RU5UICovCisjZGVmaW5lICBDS19UTl9TRVJWRVIgMTcgIC8qIFRFTE5FVCBTRVJWRVIgKi8KKyNk ZWZpbmUgIENLX1ROX1BIUiAgICAxOCAgLyogVEVMTkVUIFBSQUdNQS1IRUFSVEJFQVQgKi8KKyNk ZWZpbmUgIENLX1ROX1BMRyAgICAxOSAgLyogVEVMTkVUIFBSQUdNQS1MT0dPTiAqLworI2RlZmlu ZSAgQ0tfVE5fUFNQICAgIDIwICAvKiBURUxORVQgUFJBR01BLVNTUEkgKi8KKyNkZWZpbmUgIENL X1ROX1NBSyAgICAyMSAgLyogVEVMTkVUIElCTSBTQUsgKi8KKyNkZWZpbmUgIENLX1ROX0ZMVyAg ICAyMiAgLyogVEVMTkVUIExGTE9XICovCisjZGVmaW5lICBDS19UTl9YRiAgICAgMjMgIC8qIFRF TE5FVCBUUkFOU0ZFUi1NT0RFICovCisjZGVmaW5lICBDS19UTl9QVUlEICAgMjQgIC8qIFRFTE5F VCBQUk9NUFQtRk9SLVVTRVJJRCAqLworI2RlZmluZSAgQ0tfVE5fTkUgICAgIDI1ICAvKiBURUxO RVQgTk8tRU5DUllQVC1EVVJJTkctWEZFUiAqLworI2RlZmluZSAgQ0tfVE5fQ1BDICAgIDI2ICAv KiBURUxORVQgQ09NLVBPUlQtQ09OVFJPTCAqLworI2RlZmluZSAgQ0tfVE5fREIgICAgIDI3ICAv KiBURUxORVQgREVCVUcgKi8KKyNkZWZpbmUgIENLX1ROX0ZYICAgICAyOCAgLyogVEVMTkVUIEZP UldBUkRfWCAqLworI2RlZmluZSAgQ0tfVE5fREwgICAgIDI5ICAvKiBURUxORVQgREVMQVktU0Ig Ki8KKyNkZWZpbmUgIENLX1ROX1NGVSAgICAzMCAgLyogVEVMTkVUIFNGVS1DT01QQVRJQklMSVRZ ICovCisjZGVmaW5lICBDS19UTl9MT0cgICAgMzEgIC8qIFRFTE5FVCBMT0dPVVQgKi8KKyNlbmRp ZiAvKiBUTkNPREUgKi8KKyNkZWZpbmUgWFlPVVRQIDY4CS8qIE9VVFBVVCBjb21tYW5kIHBhcmFt ZXRlcnMgKi8KKyNkZWZpbmUgICBPVVRfUEFDIDAJLyogICBPVVRQVVQgUEFDSU5HICovCisjZGVm aW5lICAgT1VUX0VTQyAxCS8qICAgT1VUUFVUIFNQRUNJQUwtRVNDQVBFUyAqLworI2RlZmluZSBY WUVYSVQgIDY5CS8qIFNFVCBFWElUICovCisjZGVmaW5lIFhZUFJUUiAgNzAJLyogU0VUIFBSSU5U RVIgKi8KKyNkZWZpbmUgWFlGUEFUSCA3MQkvKiBQQVRITkFNRSAqLworCisjaWZkZWYgT1MyCisj ZGVmaW5lIFhZTU9VU0UgNzIJLyogTU9VU0UgU1VQUE9SVCAqLworI2RlZmluZSAgWFlNX09OICAg ICAwICAgLyogTW91c2UgT04vT0ZGICAgICAgICAqLworI2RlZmluZSAgWFlNX0JVVFRPTiAxICAg LyogRGVmaW5lIE1vdXNlIEV2ZW50cyAqLworI2RlZmluZSAgWFlNX0NMRUFSICAyICAgLyogQ2xl YXIgTW91c2UgRXZlbnRzICAqLworI2RlZmluZSAgWFlNX0RFQlVHICAzICAgLyogRGVidWcgTW9k ZSBPTi9PRkYgKi8KKy8qIFRoZXNlIG11c3QgbWF0Y2ggc2ltaWxhciBkZWZpbml0aW9ucyBpbiBj a29rZXkuaCAqLworI2RlZmluZSAgIFhZTV9CMSAwICAgICAgLyogTW91c2UgQnV0dG9uIE9uZSAq LworI2RlZmluZSAgIFhZTV9CMiAxICAgICAgLyogTW91c2UgQnV0dG9uIFR3byAqLworI2RlZmlu ZSAgIFhZTV9CMyAyICAgICAgLyogTW91c2UgQnV0dG9uIFRocmVlICovCisjZGVmaW5lICAgWFlN X0FMVCAgIDEgICAgIC8qIEFsdCAqLworI2RlZmluZSAgIFhZTV9DVFJMICAyICAgICAvKiBDdHJs ICovCisjZGVmaW5lICAgWFlNX1NISUZUIDQgICAgIC8qIFNoaWZ0ICovCisjZGVmaW5lICAgWFlN X0MxICAgIDAgICAgIC8qIFNpbmdsZSBDbGljayAqLworI2RlZmluZSAgIFhZTV9DMiAgICA4ICAg ICAvKiBEb3VibGUgQ2xpY2sgKi8KKyNkZWZpbmUgICBYWU1fRFJBRyAgMTYgICAgLyogRHJhZyBF dmVudCAqLworI2VuZGlmIC8qIE9TMiAqLworCisjZGVmaW5lIFhZQkVMTCA3MyAgIC8qIEJFTEwg Ki8KKworI2lmZGVmIE9TMgorI2RlZmluZSBYWVBSVFkgICAgIDc0ICAgLyogVGhyZWFkIFByaW9y aXR5IExldmVsICovCisjZGVmaW5lICAgWFlQX0lETEUgIDEKKyNkZWZpbmUgICBYWVBfUkVHICAg MgorI2RlZmluZSAgIFhZUF9TUlYgICA0CisjZGVmaW5lICAgWFlQX1JUUCAgIDMKKyNlbmRpZiAv KiBPUzIgKi8KKworI2RlZmluZSBYWUFMUk0gICAgIDc1CS8qIFNFVCBBTEFSTSAqLworI2RlZmlu ZSBYWVBST1RPICAgIDc2CS8qIFNFVCBQUk9UT0NPTCAqLworI2RlZmluZSBYWVBSRUZJWCAgIDc3 ICAgLyogU0VUIFBSRUZJWElORyAqLworI2RlZmluZSBYWUxPR0lOICAgIDc4ICAgLyogTG9naW4g aW5mbyBmb3Igc2NyaXB0IHByb2dyYW1zLi4uICovCisKKyNkZWZpbmUgIExPR0lfVUlEICAgMAkv KiBVc2VyIElEICAqLworI2RlZmluZSAgTE9HSV9QU1cgICAxCS8qIFBhc3N3b3JkICovCisjZGVm aW5lICBMT0dJX1BSTSAgIDIJLyogUHJvbXB0ICAgKi8KKworI2RlZmluZSBYWVNUQVJUVVAgIDc5 ICAgIC8qIFN0YXJ0dXAgZmlsZSAqLworI2RlZmluZSBYWVRNUERJUiAgIDgwICAgIC8qIFRlbXBv cmFyeSBkaXJlY3RvcnkgKi8KKworI2lmZGVmIE9TMgorI2RlZmluZSBYWVRBUEkgICAgIDgxICAg IC8qIE1pY3Jvc29mdCBUZWxlcGhvbmUgQVBJIG9wdGlvbnMgKi8KKyNkZWZpbmUgICBYWVRBUElf Q0ZHICAgICAxICAvKiBUQVBJIENvbmZpZ3VyZS1MaW5lIERpYWxvZyAqLworI2RlZmluZSAgIFhZ VEFQSV9ESUFMICAgIDIgIC8qIFRBUEkgRGlhbGluZy1Qcm9wZXJ0aWVzIERpYWxvZyAqLworI2Rl ZmluZSAgIFhZVEFQSV9MSU4gICAgIDMgIC8qIFRBUEkgTGluZSAqLworI2RlZmluZSAgIFhZVEFQ SV9MT0MgICAgIDQgIC8qIFRBUEkgTG9jYXRpb24gKi8KKyNkZWZpbmUgICBYWVRBUElfUEFTUyAg ICA1ICAvKiBUQVBJIFBhc3N0aHJvdWdoICovCisjZGVmaW5lICAgWFlUQVBJX0NPTiAgICAgNiAg LyogVEFQSSBDb252ZXJzaW9ucyAqLworI2RlZmluZSAgIFhZVEFQSV9MR0hUICAgIDcgIC8qIFRB UEkgTW9kZW0gTGlnaHRzICovCisjZGVmaW5lICAgWFlUQVBJX1BSRSAgICAgOCAgLyogVEFQSSBQ cmUtZGlhbGluZyBUZXJtaW5hbCAqLworI2RlZmluZSAgIFhZVEFQSV9QU1QgICAgIDkgIC8qIFRB UEkgUG9zdC1kaWFsaW5nIFRlcm1pbmFsICovCisjZGVmaW5lICAgWFlUQVBJX0lOQSAgICAxMCAg LyogVEFQSSBJbmFjdGl2aXR5IFRpbWVvdXQgKi8KKyNkZWZpbmUgICBYWVRBUElfQk5HICAgIDEx ICAvKiBUQVBJIFdhaXQgZm9yIENyZWRpdCBDYXJkIFRvbmUgKi8KKyNkZWZpbmUgICBYWVRBUElf TUFOICAgIDEyICAvKiBUQVBJIE1hbnVhbCBEaWFsaW5nICovCisjZGVmaW5lICAgWFlUQVBJX1VT RSAgICAxMyAgLyogVEFQSSBVc2UgTGluZSBDb25maWcgc2V0dGluZ3MgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorI2RlZmluZSBYWVRDUCAgODIgICAgICAgLyogVENQ IG9wdGlvbnMgKi8KKyNkZWZpbmUgIFhZVENQX05PREVMQVkgICAxICAvKiBObyBEZWxheSAqLwor I2RlZmluZSAgWFlUQ1BfU0VOREJVRiAgIDIgIC8qIFNlbmQgQnVmZmVyIFNpemUgKi8KKyNkZWZp bmUgIFhZVENQX0xJTkdFUiAgICAzICAvKiBMaW5nZXIgKi8KKyNkZWZpbmUgIFhZVENQX1JFQ1ZC VUYgICA0ICAvKiBSZWNlaXZlIEJ1ZmZlciBTaXplICovCisjZGVmaW5lICBYWVRDUF9LRUVQQUxJ VkUgNSAgLyogS2VlcCBBbGl2ZSBwYWNrZXRzICovCisjZGVmaW5lICBYWVRDUF9VQ1ggICAgICAg NiAgLyogVUNYIDIuMCBwb3J0IHN3YWJiaW5nIGJ1ZyAqLworI2RlZmluZSAgWFlUQ1BfTkFHTEUg ICAgIDcgIC8qIERlbGF5IC0gaW52ZXJzZSBvZiAxICovCisjZGVmaW5lICBYWVRDUF9SRE5TICAg ICAgOCAgLyogUmV2ZXJzZSBETlMgbG9va3VwICovCisjZGVmaW5lICBYWVRDUF9BRERSRVNTICAg OSAgLyogU2V0IHByZWZlcnJlZCBJUCBBZGRyZXNzICovCisjZGVmaW5lICBYWVRDUF9ETlNfU1JW ICAxMCAgLyogVXNlIEROUyBTZXJ2aWNlIFJlY29yZHMgKi8KKyNkZWZpbmUgIFhZVENQX0RPTlRS T1VURSAxMSAvKiBEb250IFJvdXRlICovCisjZGVmaW5lICBYWVRDUF9TT0NLU19TVlIgMTIgLyog TmFtZSBvZiBTb2NrcyBTZXJ2ZXIgKi8KKyNkZWZpbmUgIFhZVENQX0hUVFBfUFJPWFkgMTMgLyog TmFtZS9Qb3J0IG9mIEhUVFAgUHJveHkgU2VydmVyICovCisjZGVmaW5lICBYWVRDUF9TT0NLU19O UyAgMTQgLyogTmFtZSBvZiBTb2NrcyBOYW1lIFNlcnZlciAqLworI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworCisjaWZkZWYgT1MyCisjZGVmaW5lIFhZTVNLICA4MyAgICAgICAvKiBNUy1ET1MgS2Vy bWl0IGNvbXBhdGliaWxpdHkgb3B0aW9ucyAqLworI2RlZmluZSAgTVNLX0NPTE9SIDAgICAgLyog IFRlcm1pbmFsIGNvbG9yIGhhbmRsaW5nICAgKi8KKyNkZWZpbmUgIE1TS19LRVlTICAxICAgIC8q ICBTRVQgS0VZIHVzZXMgTVNLIGtleWNvZGVzICovCisjZGVmaW5lICBNU0tfUkVOICAgMiAgICAv KiAgRmlsZSByZW5hbWluZyB1c2VzIDguMyBub3RhdGlvbiBhbHdheXMgKi8KKyNlbmRpZiAvKiBP UzIgKi8KKworI2RlZmluZSBYWURFU1QgIDg0CS8qIFNFVCBERVNUSU5BVElPTiBhcyBpbiBNUy1E T1MgS2VybWl0ICovCisKKyNpZmRlZiBPUzIKKyNkZWZpbmUgWFlXSU45NSA4NQkvKiBTRVQgV0lO OTUgd29yayBhcm91bmRzICAqLworI2RlZmluZSAgIFhZV0tFWSAwCS8qICAgIEtleWJvYXJkIHRy YW5zbGF0aW9uICovCisjZGVmaW5lICAgWFlXQUdSIDEgICAgICAvKiAgICBBbHQtR3IgICAgICAg ICAgICAgICAqLworI2RlZmluZSAgIFhZV09JTyAyICAgICAgLyogICAgT3ZlcmxhcHBlZCBJL08g ICAgICAgKi8KKyNkZWZpbmUgICBYWVdMVUMgMwkvKiAgICBMdWNpZGEgQ29uc29sZSBzdWJzdGl0 dXRpb25zICovCisjZGVmaW5lICAgWFlXU0VMRUNUIDQgICAvKiAgICBTZWxlY3Qgb24gV3JpdGUg QnVnICovCisjZGVmaW5lICAgWFlXOF8zIDUgICAgICAvKiAgICBVc2UgOC4zIGZpbGVuYW1lcz8g Ki8KKyNkZWZpbmUgICBYWVdQT1BVUCA2ICAgIC8qICAgIFVzZSBQb3B1cHM/ICAqLworI2RlZmlu ZSAgIFhZV0hTTCA3ICAgICAgLyogICAgSG9yeiBTY2FuIExpbmUgc3Vic3RpdHV0aW9ucyAqLwor I2RlZmluZSBYWURMUiAgIDg2IAkvKiBTRVQgSzk1IERJQUxFUiB3b3JrIGFyb3VuZHMgKi8KKyNk ZWZpbmUgWFlUSVRMRSA4NwkvKiBTRVQgVElUTEUgb2Ygd2luZG93ICovCisjZW5kaWYgLyogT1My ICovCisKKyNkZWZpbmUgWFlJR04gICA4OAkvKiBTRVQgSUdOT1JFLUNIQVJBQ1RFUiAqLworI2Rl ZmluZSBYWUVESVQgIDg5ICAgICAgLyogU0VUIEVESVRPUiAqLworI2RlZmluZSBYWUZMVFIgIDkw ICAgICAgLyogU0VUIHsgU0VORCwgUkVDRUlWRSB9IEZJTFRFUiAqLworI2RlZmluZSBYWUJST1dT RSA5MSAgICAgLyogU0VUIEJST1dTRVIgKi8KKyNkZWZpbmUgWFlFT0YgICAgOTIgICAgIC8qIEVP RiAoPSBGSUxFIEVPRikgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgWFlCRENQICAgOTMgICAgIC8q IEJQUklOVEVSICovCisjZW5kaWYgLyogT1MyICovCisjZGVmaW5lIFhZRkxBRyAgIDk0CS8qIEZM QUcgKi8KKyNkZWZpbmUgWFlMSU1JVCAgOTUgICAgIC8qIFNFU1NJT04tTElNSVQgKi8KKyNkZWZp bmUgWFlJTklMICAgOTYgICAgIC8qIFByb3RvY29sIG5lZ290aWF0aW9uIHN0cmluZyBtYXggbGVu Z3RoICovCisjZGVmaW5lIFhZUkVMWSAgIDk3ICAgICAvKiBSRUxJQUJMRSAqLworI2RlZmluZSBY WVNUUkVBTSA5OCAgICAgLyogU1RSRUFNSU5HICovCisjZGVmaW5lIFhZVExPRyAgIDk5ICAgICAv KiBUUkFOU0FDVElPTi1MT0cgKi8KKyNkZWZpbmUgWFlDTEVBUiAxMDAgICAgIC8qIENMRUFSQ0hB Tk5FTCAqLworI2RlZmluZSBYWUFVVEggIDEwMQkvKiBBVVRIRU5USUNBVElPTiAqLworCisjaWZk ZWYgVE5DT0RFCisjZGVmaW5lIFhZS1JCUFIgICAwCS8qIEtlcmJlcm9zIFByaW5jaXBhbCAqLwor I2RlZmluZSBYWUtSQlJMICAgMQkvKiBLZXJiZXJvcyBSZWFsbSAqLworI2RlZmluZSBYWUtSQkND ICAgMgkvKiBLZXJiZXJvcyA1IENyZWRlbnRpYWxzLUNhY2hlICovCisjZGVmaW5lIFhZS1JCU1JW ICAzICAgICAvKiBLZXJiZXJvcyBTZXJ2aWNlIE5hbWUgKi8KKyNkZWZpbmUgWFlLUkJEQkcgIDQg ICAgIC8qIEtlcmJlcm9zIERlYnVnZ2luZyAqLworI2RlZmluZSBYWUtSQkxJRiAgNSAgICAgLyog S2VyYmVyb3MgTGlmZXRpbWUgKi8KKyNkZWZpbmUgWFlLUkJQUkUgIDYgICAgIC8qIEtlcmJlcm9z IDQgUHJlYXV0aCAqLworI2RlZmluZSBYWUtSQklOUyAgNyAgICAgLyogS2VyYmVyb3MgNCBJbnN0 YW5jZSAqLworI2RlZmluZSBYWUtSQkZXRCAgOCAgICAgLyogS2VyYmVyb3MgNSBGb3J3YXJkYWJs ZSAqLworI2RlZmluZSBYWUtSQlBSWCAgOSAgICAgLyogS2VyYmVyb3MgNSBQcm94aWFibGUgKi8K KyNkZWZpbmUgWFlLUkJSTlcgIDEwICAgIC8qIEtlcmJlcm9zIDUgUmVuZXdhYmxlIGxpZmV0aW1l ICovCisjZGVmaW5lIFhZS1JCR0VUICAxMSAgICAvKiBLZXJiZXJvcyBBdXRvLUdldC1UR1RzICov CisjZGVmaW5lIFhZS1JCREVMICAxMiAgICAvKiBLZXJiZXJvcyBBdXRvLURlc3Ryb3ktVEdUcyAq LworI2RlZmluZSAgIEtSQl9ERUxfTk8gIDAgLyogICBLZXJiZXJvcyBObyBBdXRvIERlc3Ryb3kg Ki8KKyNkZWZpbmUgICBLUkJfREVMX0NMICAxIC8qICAgS2VyYmVyb3MgQXV0byBEZXN0b3J5IG9u IENsb3NlICovCisjZGVmaW5lICAgS1JCX0RFTF9FWCAgMiAvKiAgIEtlcmJlcm9zIEF1dG8gRGVz dHJveSBvbiBFeGl0ICAqLworI2RlZmluZSBYWUtSQks1SzQgMTMgICAgLyogS2VyYmVyb3MgNSBH ZXQgSzQgVGlja2V0cyAqLworI2RlZmluZSBYWUtSQlBSTSAgMTQgICAgLyogS2VyYmVyb3MgNC81 IFByb21wdCAqLworI2RlZmluZSBYWUtSQkFEUiAgMTUgICAgLyogS2VyYmVyb3MgNC81IENoZWNr QWRkcnMgKi8KKyNkZWZpbmUgWFlLUkJOQUQgIDE2ICAgIC8qIEtlcmJlcm9zIDUgTm8gQWRkcmVz c2VzICovCisjZGVmaW5lIFhZS1JCQUREICAxNyAgICAvKiBLZXJiZXJvcyA1IEFkZHJlc3MgTGlz dCAqLworI2RlZmluZSBYWUtSQktUQiAgMTggICAgLyogS2VyYmVyb3MgNC81IEtleSBUYWJsZSAq LworI2RlZmluZSBYWVNSUFBSTSAgIDAgICAgLyogU1JQIFByb21wdCAqLworI2RlZmluZSBYWVNT TFJDRkwgIDAgICAgLyogU1NML1RMUyBSU0EgQ2VydHMgZmlsZSAqLworI2RlZmluZSBYWVNTTENP SyAgIDEgICAgLyogU1NML1RMUyBDZXJ0cy1PayBmbGFnICovCisjZGVmaW5lIFhZU1NMQ1JRICAg MiAgICAvKiBTU0wvVExTIENlcnRzLVJlcXVpcmVkIGZsYWcgKi8KKyNkZWZpbmUgWFlTU0xDTCAg ICAzICAgIC8qIFNTTC9UTFMgQ2lwaGVyIExpc3QgKi8KKyNkZWZpbmUgWFlTU0xEQkcgICA0ICAg IC8qIFNTTC9UTFMgRGVidWcgZmxhZyAqLworI2RlZmluZSBYWVNTTFJLRkwgIDUgICAgLyogU1NM L1RMUyBSU0EgS2V5IEZpbGUgKi8KKyNkZWZpbmUgWFlTU0xMRkwgICA2ICAgIC8qIFNTTC9UTFMg TG9nIEZpbGUgKi8KKyNkZWZpbmUgWFlTU0xPTiAgICA3ICAgIC8qIFNTTC9UTFMgT25seSBmbGFn ICovCisjZGVmaW5lIFhZU1NMU0VDICAgOCAgICAvKiBTU0wvVExTIFNlY3VyZSBmbGFnICovCisj ZGVmaW5lIFhZU1NMVlJCICAgOSAgICAvKiBTU0wvVExTIFZlcmJvc2UgZmxhZyAqLworI2RlZmlu ZSBYWVNTTFZSRiAgMTAgICAgLyogU1NML1RMUyBWZXJpZnkgZmxhZyAqLworI2RlZmluZSBYWVNT TERVTSAgMTEgICAgLyogU1NML1RMUyBEdW1teSBmbGFnICovCisjZGVmaW5lIFhZU1NMRENGTCAx MiAgICAvKiBTU0wvVExTIERTQSBDZXJ0cyBmaWxlICovCisjZGVmaW5lIFhZU1NMREtGTCAxMyAg ICAvKiBTU0wvVExTIERIIENlcnRzIGZpbGUgKi8KKyNkZWZpbmUgWFlTU0xEUEZMIDE0ICAgIC8q IFNTTC9UTFMgREggUGFyYW0gZmlsZSAqLworI2RlZmluZSBYWVNTTENSTCAgMTUgICAgLyogU1NM L1RMUyBDUkwgZmlsZSAqLworI2RlZmluZSBYWVNTTENSTEQgMTYgICAgLyogU1NML1RMUyBDUkwg ZGlyICovCisjZGVmaW5lIFhZU1NMVlJGRiAxNyAgICAvKiBTU0wvVExTIFZlcmlmeSBmaWxlICov CisjZGVmaW5lIFhZU1NMVlJGRCAxOCAgICAvKiBTU0wvVExTIFZlcmlmeSBkaXIgKi8KKyNkZWZp bmUgWFlTU0xSTkQgIDE5ICAgIC8qIFNTTC9UTFMgUmFuZG9tIGZpbGUgKi8KKyNkZWZpbmUgWFlT U0xEQ0NGIDIwICAgIC8qIFNTTC9UTFMgRFNBIENlcnRzIENoYWluIEZpbGUgKi8KKyNkZWZpbmUg WFlTU0xSQ0NGIDIxICAgIC8qIFNTTC9UTFMgUlNBIENlcnRzIENoYWluIEZpbGUgKi8KKworLyog VGhlIGZvbGxvd2luZyBtdXN0IGJlIHBvd2VycyBvZiAyIGZvciBhIGJpdCBtYXNrICovCisKKyNk ZWZpbmUgIFhZS0xDRU4gIDEJLyogS2VyYmVyb3MgTGlzdCBDcmVkZW50aWFsczogRW5jcnlwdGlv biAqLworI2RlZmluZSAgWFlLTENGTCAgMgkvKiBLZXJiZXJvcyBMaXN0IENyZWRlbnRpYWxzOiBG bGFncyAqLworI2RlZmluZSAgWFlLTENBRCAgNCAgICAgLyogS2VyYmVyb3MgTGlzdCBDcmVkZW50 aWFsczogQWRkcmVzc2VzICovCisjZW5kaWYgLyogVE5DT0RFICovCisKKyNkZWZpbmUgWFlGVU5D ICAgMTAyCS8qIFNFVCBGVU5DVElPTiAqLworCisjZGVmaW5lICBGVU5DX0RJICAgMAkvKiBGVU5D VElPTiBESUFHTk9TVElDUyAqLworI2RlZmluZSAgRlVOQ19FUiAgIDEgICAgLyogRlVOQ1RJT04g RVJST1IgKi8KKworI2RlZmluZSBYWUZUUCAgICAxMDMJLyogRlRQIGFwcGxpY2F0aW9uICovCisj ZGVmaW5lIFhZU0xFRVAgIDEwNAkvKiBTTEVFUCAvIFBBVVNFIG9wdGlvbnMgKi8KKyNkZWZpbmUg WFlTU0ggICAgMTA1CS8qIFNTSCBvcHRpb25zICovCisjZGVmaW5lIFhZVEVMT1AgIDEwNiAgICAv KiBURUxORVQgT1BUSU9OUyAoVEVMT1BUKSAqLworI2RlZmluZSBYWUNEICAgICAxMDcgICAgLyog U0VUIENEICovCisjZGVmaW5lIFhZQ1NFVCAgIDEwOAkvKiBDSEFSQUNURVItU0VUICovCisjZGVm aW5lIFhZU1RPUCAgIDEwOSAgICAvKiBTVE9QLUJJVFMgKi8KKyNkZWZpbmUgWFlTRVJJQUwgMTEw CS8qIFNFUklBTCAqLworI2RlZmluZSBYWURJU0MgICAxMTEgICAgLyogQ0xPU0UtT04tRElTQ09O TkVDVCAqLworI2RlZmluZSBYWU9QVFMgICAxMTIgICAgLyogT1BUSU9OUyAqLworI2RlZmluZSBY WVE4RkxHICAxMTMgICAgLyogUThGTEFHIChpbnZpc2libGUpICovCisjZGVmaW5lIFhZVElNRVIg IDExNCAgICAvKiBUSU1FUiAqLworI2RlZmluZSBYWUZBQ0tCICAxMTUgICAgLyogRi1BQ0stQlVH ICovCisjZGVmaW5lIFhZQlVQICAgIDExNiAgICAvKiBTRVQgU0VORC9SRUNFSVZFIEJBQ0tVUCAq LworI2RlZmluZSBYWU1PVkUgICAxMTcJLyogU0VUIFNFTkQvUkVDRUlWRSBNT1ZFLVRPICovCisj ZGVmaW5lIFhZUkVOQU1FIDExOAkvKiBTRVQgU0VORC9SRUNFSVZFIFJFTkFNRS1UTyAqLworI2Rl ZmluZSBYWUhJTlRTICAxMTkgICAgLyogU0VUIEhJTlRTICovCisjZGVmaW5lIFhZRVZBTCAgIDEy MCAgICAvKiBTRVQgRVZBTFVBVEUgKi8KKyNkZWZpbmUgWFlGQUNLUCAgMTIxICAgIC8qIEYtQUNL LVBBVEggKi8KKyNkZWZpbmUgWFlTWVNMICAgMTIyICAgIC8qIFN5c0xvZyAqLworI2RlZmluZSBY WVFOWFBMICAxMjMJLyogUU5YIFBvcnQgTG9jayAqLworI2RlZmluZSBYWUlLUyAgICAxMjQgICAg LyogU0VUIElLUyAuLi4gKi8KKyNkZWZpbmUgWFlST09UICAgMTI1ICAgIC8qIFNFVCBST09UICov CisjZGVmaW5lIFhZRlRQWCAgIDEyNiAgICAvKiBTRVQgRlRQICovCisjZGVmaW5lIFhZU0VYUCAg IDEyNwkvKiBTRVQgU0VYUCAqLworI2RlZmluZSBYWUdQUiAgICAxMjggICAgLyogU0VUIEdFVC1Q VVQtUkVNT1RFICovCisjZGVmaW5lIFhZTE9DVVMgIDEyOQkvKiBTRVQgTE9DVVMgKi8KKyNkZWZp bmUgWFlHVUkgICAgMTMwCS8qIFNFVCBHVUkgKi8KKyNkZWZpbmUgWFlBTlNXRVIgMTMxICAgIC8q IFNFVCBBTlNXRVIgKi8KKyNkZWZpbmUgWFlNQVRDSCAgMTMyICAgIC8qIFNFVCBNQVRDSERPVCAq LworI2RlZmluZSBYWVNGVFAgICAxMzMgICAgLyogU0VUIFNGVFAgKi8KKyNkZWZpbmUgWFlfUkVO ICAgMTM0ICAgIC8qIFNFVCBSRU5BTUUgKi8KKyNkZWZpbmUgWFlFWFRSTiAgMTM1ICAgIC8qIFNF VCBFWFRFUk5BTC1QUk9UT0NPTCAqLworI2RlZmluZSBYWVZBUkVWICAxMzYgICAgLyogU0VUIFZB UklBQkxFLUVWQUxVQVRJT04gKi8KKworLyogRW5kIG9mIFNFVCBjb21tYW5kcyAqLworCisvKiBT LUV4cHJlc3Npb25zIC0tIGZsb2F0aW5nLXBvaW50IHN1cHBvcnQgcmVxdWlyZWQgKi8KKworI2lm bmRlZiBDS0ZMT0FUCisjaWZuZGVmIE5PU0VYUAorI2RlZmluZSBOT1NFWFAKKyNlbmRpZiAvKiBO T1NFWFAgKi8KKyNlbmRpZiAvKiBDS0ZMT0FUICovCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGVs ZW1lbnRzIGluIGFuIFMtRXhwcmVzc2lvbiAqLworCisjaWZuZGVmIE5PU0VYUAorI2lmbmRlZiBT RVhQTUFYCisjaWZkZWYgQklHQlVGT0sKKyNkZWZpbmUgU0VYUE1BWCAxMDI0CisjZWxzZQorI2Rl ZmluZSBTRVhQTUFYIDMyCisjZW5kaWYgLyogQklHQlVGT0sgKi8KKyNlbmRpZiAvKiBTRVhQTUFY ICovCisjZW5kaWYgLyogTk9TRVhQICovCisKKyNpZmRlZiBBTllYMjUKKy8qIFBBRCBjb21tYW5k IHBhcmFtZXRlcnMgKi8KKworI2RlZmluZSBYWVBBREwgMCAgICAgICAgLyogY2xlYXIgdmlydHVh bCBjYWxsICovCisjZGVmaW5lIFhZUEFEUyAxICAgICAgICAvKiBzdGF0dXMgb2YgdmlydHVhbCBj YWxsICovCisjZGVmaW5lIFhZUEFEUiAyICAgICAgICAvKiByZXNldCBvZiB2aXJ0dWFsIGNhbGwg Ki8KKyNkZWZpbmUgWFlQQURJIDMgICAgICAgIC8qIHNlbmQgYW4gaW50ZXJydXB0IHBhY2tldCAq LworCisvKiBVc2VkIHdpdGggWFlYMjUuLi4gKi8KKyNkZWZpbmUgWFlVREFUIDAgICAgICAgLyog WC4yNSBjYWxsIHVzZXIgZGF0YSAqLworI2RlZmluZSBYWUNMT1MgMSAgICAgICAvKiBYLjI1IGNs b3NlZCB1c2VyIGdyb3VwIGNhbGwgKi8KKyNkZWZpbmUgWFlSRVZDIDIgICAgICAgLyogWC4yNSBy ZXZlcnNlIGNoYXJnZSBjYWxsICovCisjZW5kaWYgLyogQU5ZWDI1ICovCisKKyNpZmRlZiBPUzIK Ky8qIFNFVCBQUklOVEVSIHN3aXRjaGVzICovCisKKyNkZWZpbmUgUFJOX09VVCAwCQkJLyogT3V0 cHV0IG9ubHkgKi8KKyNkZWZpbmUgUFJOX0JJRCAxCQkJLyogQmlkaXJlY3Rpb25hbCAqLworI2Rl ZmluZSBQUk5fRE9TIDIJCQkvKiBET1MgZGV2aWNlICovCisjZGVmaW5lIFBSTl9XSU4gMwkJCS8q IFdpbmRvd3MgcXVldWUgKi8KKyNkZWZpbmUgUFJOX1RNTyA0CQkJLyogVGltZW91dCAqLworI2Rl ZmluZSBQUk5fVFJNIDUJCQkvKiBUZXJtaW5hdG9yICovCisjZGVmaW5lIFBSTl9TRVAgNgkJCS8q IFNlcGFyYXRvciAqLworI2RlZmluZSBQUk5fU1BEIDcJCQkvKiBDT00tcG9ydCBzcGVlZCAqLwor I2RlZmluZSBQUk5fRkxPIDgJCQkvKiBDT00tcG9ydCBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUg UFJOX1BBUiA5CQkJLyogQ09NLXBvcnQgcGFyaXR5ICovCisjZGVmaW5lIFBSTl9OT04gMTAJCQkv KiBObyBwcmludGVyICovCisjZGVmaW5lIFBSTl9GSUwgMTEJCQkvKiBGaWxlbmFtZSAqLworI2Rl ZmluZSBQUk5fUElQIDEyCQkJLyogUGlwZW5hbWUgKi8KKyNkZWZpbmUgUFJOX1BTICAxMyAgICAg ICAgICAgICAgICAgICAgICAvKiBUZXh0IHRvIFBTICovCisjZGVmaW5lIFBSTl9XSUQgMTQgICAg ICAgICAgICAgICAgICAgICAgLyogUFMgV2lkdGggKi8KKyNkZWZpbmUgUFJOX0xFTiAxNSAgICAg ICAgICAgICAgICAgICAgICAvKiBQUyBMZW5ndGggKi8KKyNkZWZpbmUgUFJOX1JBVyAxNiAgICAg ICAgICAgICAgICAgICAgICAvKiBOb24tUFMgKi8KKyNkZWZpbmUgUFJOX0NTICAxNyAgICAgICAg ICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgU2V0ICovCisjZGVmaW5lIFBSTl9NQVggMTcJCQkv KiBOdW1iZXIgb2Ygc3dpdGNoZXMgZGVmaW5lZCAqLworCisvKiBQcmludGVyIHR5cGVzICovCisK KyNkZWZpbmUgUFJUX0RPUyAwCQkJLyogRE9TICovCisjZGVmaW5lIFBSVF9XSU4gMQkJCS8qIFdp bmRvd3MgUXVldWUgKi8KKyNkZWZpbmUgUFJUX0ZJTCAyCQkJLyogRmlsZSAqLworI2RlZmluZSBQ UlRfUElQIDMJCQkvKiBQaXBlICovCisjZGVmaW5lIFBSVF9OT04gNAkJCS8qIE5vbmUgKi8KKwor I2RlZmluZSBQUklOVFNXSQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PSUNQICovCisK KyNpZm5kZWYgTk9ESUFMCisvKgorICBTeW1ib2xzIGZvciBtb2RlbSB0eXBlcywgbW92ZWQgaGVy ZSBmcm9tIGNrdWRpYS5jLCBNYXkgMTk5NywgYmVjYXVzZSBub3cKKyAgdGhleSBhcmUgYWxzbyB1 c2VkIGluIHNvbWUgb3RoZXIgbW9kdWxlcy4gIFRoZSBudW1iZXJzIE1VU1QgY29ycmVzcG9uZCB0 bworICB0aGUgb3JkZXJpbmcgb2YgZW50cmllcyB3aXRoaW4gdGhlIG1vZGVtcFtdIGFycmF5Lgor Ki8KKyNpZmRlZiBNSU5JRElBTAkJCQkvKiBNaW5pbXVtIGRpYWxlciBzdXBwb3J0ICovCisKKyNk ZWZpbmUgICAgICAgICBuX0RJUkVDVCAgICAgICAgIDAJLyogRGlyZWN0IGNvbm5lY3Rpb24gLS0g bm8gbW9kZW0gKi8KKyNkZWZpbmUJCW5fQ0NJVFQJCSAxCS8qIENDSVRUL0lUVS1UIFYuMjViaXMg Ki8KKyNkZWZpbmUJCW5fSEFZRVMJCSAyCS8qIEhheWVzIDI0MDAgKi8KKyNkZWZpbmUJCW5fVU5L Tk9XTgkgMwkvKiBVbmtub3duICovCisjZGVmaW5lICAgICAgICAgbl9VREVGICAgICAgICAgICA0 CS8qIFVzZXItRGVmaW5lZCAqLworI2RlZmluZSAgICAgICAgIG5fR0VORVJJQyAgICAgICAgNQkv KiBHZW5lcmljIEhpZ2ggU3BlZWQgKi8KKyNkZWZpbmUgICAgICAgICBuX0lUVVRWMjUwICAgICAg IDYJLyogSVRVLVQgVi4yNTAgKi8KKyNkZWZpbmUJCU1BWF9NRE0JCSA2CS8qIE51bWJlciBvZiBt b2RlbSB0eXBlcyAqLworCisjZWxzZQkJCQkJLyogRnVsbC1ibG93biBkaWFsZXIgc3VwcG9ydCAq LworCisjZGVmaW5lICAgICAgICAgbl9ESVJFQ1QgICAgICAgICAwCS8qIERpcmVjdCBjb25uZWN0 aW9uIC0tIG5vIG1vZGVtICovCisjZGVmaW5lCQluX0FUVERURE0JIDEKKyNkZWZpbmUgICAgICAg ICBuX0FUVElTTiAgICAgICAgIDIKKyNkZWZpbmUJCW5fQVRUTU9ERU0JIDMKKyNkZWZpbmUJCW5f Q0NJVFQJCSA0CisjZGVmaW5lCQluX0NFUk1FVEVLCSA1CisjZGVmaW5lCQluX0RGMDMJCSA2Cisj ZGVmaW5lCQluX0RGMTAwCQkgNworI2RlZmluZQkJbl9ERjIwMAkJIDgKKyNkZWZpbmUJCW5fR0RD CQkgOQorI2RlZmluZQkJbl9IQVlFUwkJMTAKKyNkZWZpbmUJCW5fUEVOUklMCTExCisjZGVmaW5l CQluX1JBQ0FMCQkxMgorI2RlZmluZQkJbl9VTktOT1dOICAgICAgIDEzCisjZGVmaW5lCQluX1ZF TlRFTAkxNAorI2RlZmluZQkJbl9DT05DT1JECTE1CisjZGVmaW5lCQluX0FUVFVQQwkxNgkvKiBh a2EgVU5JWCBQQyBhbmQgQVRUNzMwMCAqLworI2RlZmluZQkJbl9ST0xNICAgICAgICAgIDE3ICAg ICAgLyogUm9sbSBDQlggRENNICovCisjZGVmaW5lCQluX01JQ1JPQ09NCTE4CS8qIE1pY3JvY29t cyBpbiBTWCBjb21tYW5kIG1vZGUgKi8KKyNkZWZpbmUgICAgICAgICBuX1VTUiAgICAgICAgICAg MTkJLyogTW9kZXJuIFVTUnMgKi8KKyNkZWZpbmUgICAgICAgICBuX1RFTEVCSVQgICAgICAgMjAg ICAgICAvKiBUZWxlYml0cyBvZiBhbGwga2luZHMgKi8KKyNkZWZpbmUgICAgICAgICBuX0RJR0lU RUwgICAgICAgMjEJLyogRGlnaXRlbCBEVC0yMiAoQ0NJVFQgdmFyaWFudCkgKi8KKyNkZWZpbmUg ICAgICAgICBuX0hfMTIwMCAgICAgICAgMjIJLyogSGF5ZXMgMTIwMCAqLworI2RlZmluZQkJbl9I X1VMVFJBICAgICAgIDIzCS8qIEhheWVzIFVsdHJhIGFuZCBtYXliZSBPcHRpbWEgKi8KKyNkZWZp bmUJCW5fSF9BQ0NVUkEgICAgICAyNAkvKiBIYXllcyBBY2N1cmEgYW5kIG1heWJlIE9wdGltYSAq LworI2RlZmluZSAgICAgICAgIG5fUFBJICAgICAgICAgICAyNQkvKiBQcmFjdGljYWwgUGVyaXBo ZXJhbHMgKi8KKyNkZWZpbmUgICAgICAgICBuX0RBVEFQT1JUICAgICAgMjYJLyogQVQmVCBEYXRh cG9ydCAqLworI2RlZmluZSAgICAgICAgIG5fQk9DQSAgICAgICAgICAyNwkvKiBCb2NhICovCisj ZGVmaW5lCQluX01PVE9ST0xBICAgICAgMjgJLyogTW90b3JvbGEgRmFzdGFsayBvciBMaWZlc3R5 bGUgKi8KKyNkZWZpbmUJCW5fRElHSUNPTU0JMjkJLyogRGlnaWNvbW0gQ29ubmVjdGlvbiAqLwor I2RlZmluZQkJbl9EWU5BTElOSyAgICAgIDMwCS8qIER5bmFsaW5rIDE0MTRWRSAqLworI2RlZmlu ZQkJbl9JTlRFTAkJMzEJLyogSW50ZWwgMTQ0MDAgRmF4bW9kZW0gKi8KKyNkZWZpbmUJCW5fVUNP TV9BVAkzMgkvKiBNaWNyb2NvbXMgaW4gQVQgbW9kZSAqLworI2RlZmluZQkJbl9NVUxUSQkJMzMJ LyogTXVsdGl0ZWNoIE1UMTQzMiAqLworI2RlZmluZQkJbl9TVVBSQQkJMzQJLyogU3VwcmFGQVht b2RlbSAqLworI2RlZmluZQkgICAgICAgIG5fWk9MVFJJWAkzNQkvKiBab2x0cml4ICovCisjZGVm aW5lCQluX1pPT00JCTM2CS8qIFpvb20gKi8KKyNkZWZpbmUJCW5fWllYRUwJCTM3CS8qIFp5WEVM ICovCisjZGVmaW5lICAgICAgICAgbl9UQVBJICAgICAgICAgIDM4CS8qIFRBUEkgTGluZSBtb2Rl bSAtIHdoYXRldmVyIGl0IGlzICovCisjZGVmaW5lICAgICAgICAgbl9UQk5FVyAgICAgICAgIDM5 CS8qIE5ld2VyIFRlbGViaXQgbW9kZWxzICovCisjZGVmaW5lCQluX01BWFRFQ0ggICAgICAgNDAJ LyogTWF4VGVjaCBYTTI4OEVBICovCisjZGVmaW5lICAgICAgICAgbl9VREVGICAgICAgICAgIDQx CS8qIFVzZXItRGVmaW5lZCAqLworI2RlZmluZSAgICAgICAgIG5fUldWMzIgICAgICAgICA0Mgkv KiBHZW5lcmljIFJvY2t3ZWxsIFYuMzIgKi8KKyNkZWZpbmUgICAgICAgICBuX1JXVjMyQiAgICAg ICAgNDMJLyogR2VuZXJpYyBSb2Nrd2VsbCBWLjMyYmlzICovCisjZGVmaW5lICAgICAgICAgbl9S V1YzNCAgICAgICAgIDQ0CS8qIEdlbmVyaWMgUm9ja3dlbGwgVi4zNCAqLworI2RlZmluZQkJbl9N V0FWRQkJNDUJLyogSUJNIE13YXZlIEFkYXB0ZXIgKi8KKyNkZWZpbmUgICAgICAgICBuX1RFTEVQ QVRIICAgICAgNDYJLyogR2F0ZXdheSBUZWxlcGF0aCAqLworI2RlZmluZSAgICAgICAgIG5fTUlD Uk9MSU5LICAgICA0NwkvKiBNaWNyb0xpbmsgbW9kZW1zICovCisjZGVmaW5lICAgICAgICAgbl9D QVJESU5BTCAgICAgIDQ4CS8qIENhcmRpbmFsIG1vZGVtcyAqLworI2RlZmluZSAgICAgICAgIG5f R0VORVJJQyAgICAgICA0OSAgICAgIC8qIEdlbmVyaWMgaGlnaC1zcGVlZCAqLworI2RlZmluZSAg ICAgICAgIG5fWEpBQ0sgICAgICAgICA1MAkvKiBNZWdhaGVydHogWC1KYWNrICovCisjZGVmaW5l ICAgICAgICAgbl9TUElSSVRJSSAgICAgIDUxCS8qIFF1aWNrY29tbSBTcGlyaXQgSUkgKi8KKyNk ZWZpbmUgICAgICAgICBuX01PTlRBTkEgICAgICAgNTIJLyogTW90b3JvbGEgTW9udGFuYSAqLwor I2RlZmluZSAgICAgICAgIG5fQ09NUEFRICAgICAgICA1MwkvKiBDb21wYXEgRGF0YStGYXggTW9k ZW0gKi8KKyNkZWZpbmUgICAgICAgICBuX0ZVSklUU1UgICAgICAgNTQJLyogRnVqaXRzdSBGYXgv TW9kZW0gQWRwYXRlciAqLworI2RlZmluZSAgICAgICAgIG5fTUhaQVRUICAgICAgICA1NQkvKiBN ZWdhaGVydHogQVQmVCBWLjM0ICovCisjZGVmaW5lICAgICAgICAgbl9TVVBSQVNPTiAgICAgIDU2 CS8qIFN1cHJhU29uaWMgKi8KKyNkZWZpbmUgICAgICAgICBuX0JFU1REQVRBICAgICAgNTcJLyog QmVzdCBEYXRhICovCisjZGVmaW5lICAgICAgICAgbl9BVFQxOTAwICAgICAgIDU4ICAgICAgLyog QVQmVCBTVFUgSUlJIE1vZGVsIDE5MDAgKi8KKyNkZWZpbmUgICAgICAgICBuX0FUVDE5MTAgICAg ICAgNTkgICAgICAvKiBBVCZUIFNUVSBJSUkgTW9kZWwgMTkxMCAqLworI2RlZmluZSAgICAgICAg IG5fS0VFUElOVE9VQ0ggICA2MAkvKiBBVCZUIEtlZXBpblRvdWNoICovCisjZGVmaW5lICAgICAg ICAgbl9VU1JYMiAgICAgICAgIDYxCS8qIFVTUiBYSi0xNTYwIFgyIDU2SyAqLworI2RlZmluZSAg ICAgICAgIG5fUk9MTUFUICAgICAgICA2MgkvKiBSb2xtIHdpdGggQVQgY29tbWFuZCBzZXQgKi8K KyNkZWZpbmUJCW5fQVRMQVMgICAgICAgICA2MyAgICAgIC8qIEF0bGFzIC8gTmV3Y29tIGl4ZkMg MzMuNiAqLworI2RlZmluZSAgICAgICAgIG5fQ09ERVggICAgICAgICA2NAkvKiBNb3Rvcm9sYSBD b2RleCAzMjZYIFNlcmllcyAqLworI2RlZmluZSAgICAgICAgIG5fTVQ1NjM0WlBYICAgICA2NQkv KiBNdWx0aXRlY2ggTVQ1NjM0WlBYICovCisjZGVmaW5lICAgICAgICAgbl9VTElOS1YyNTAgICAg IDY2CS8qIE1pY3JvbGluayBJVFUtVCBWLjI1MCA1NksgKi8KKyNkZWZpbmUgICAgICAgICBuX0lU VVRWMjUwICAgICAgNjcJLyogR2VuZXJpYyBJVFUtVCBWLjI1MCAqLworI2RlZmluZSAgICAgICAg IG5fUldWOTAgICAgICAgICA2OAkvKiBHZW5lcmljIFJvY2t3ZWxsIFYuOTAgKi8KKyNkZWZpbmUg ICAgICAgICBuX1NVUFJBWCAgICAgICAgNjkgICAgICAvKiBEaWFtb25kIFN1cHJhIEV4cHJlc3Mg Vi45MCAqLworI2RlZmluZSAgICAgICAgIG5fTFVDRU5UICAgICAgICA3MCAgICAgIC8qIEx1Y2Vu dCBWZW51cyBjaGlwc2V0ICovCisjZGVmaW5lICAgICAgICAgbl9QQ1RFTCAgICAgICAgIDcxICAg ICAgLyogUENUZWwgY2hpcHNldCAqLworI2RlZmluZSAgICAgICAgIG5fQ09ORVhBTlQgICAgICA3 MiAgICAgIC8qIENvbmV4YW50IG1vZGVtIGZhbWlseSAqLworI2RlZmluZQkJbl9aT09NVjM0CTcz CS8qIFpvb20gKi8KKyNkZWZpbmUJCW5fWk9PTVY5MAk3NAkvKiBab29tICovCisjZGVmaW5lICAg ICAgICAgbl9aT09NVjkyICAgICAgIDc1ICAgICAgLyogWk9PTSBWLjkyICovCisjZGVmaW5lICAg ICAgICAgbl9NT1RTTTU2ICAgICAgIDc2CS8qIE1vdG9yb2xhIFNNNTYgY2hpcHNldCAqLworI2Rl ZmluZQkJTUFYX01ETQkJNzYJLyogTnVtYmVyIG9mIG1vZGVtIHR5cGVzICovCisKKyNlbmRpZiAv KiBNSU5JRElBTCAqLworI2VuZGlmIC8qIE5PRElBTCAqLworCisjaWZuZGVmIE5PSUNQCisvKiBT SE9XIGNvbW1hbmQgc3ltYm9scyAqLworCisjZGVmaW5lIFNIUEFSIDAJCQkJLyogUGFyYW1ldGVy cyAqLworI2RlZmluZSBTSFZFUiAxCQkJCS8qIFZlcnNpb25zICovCisjZGVmaW5lIFNIQ09NIDIJ CQkJLyogQ29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUgU0hQUk8gMwkJCQkvKiBQcm90b2NvbCAq LworI2RlZmluZSBTSEZJTCA0CQkJCS8qIEZpbGUgKi8KKyNkZWZpbmUgU0hMTkcgNQkJCQkvKiBM YW5ndWFnZSAqLworI2RlZmluZSBTSENPVSA2CQkJCS8qIENvdW50ICovCisjZGVmaW5lIFNITUFD IDcJCQkJLyogTWFjcm9zICovCisjZGVmaW5lIFNIS0VZIDgJCQkJLyogS2V5ICovCisjZGVmaW5l IFNIU0NSIDkJCQkJLyogU2NyaXB0cyAqLworI2RlZmluZSBTSFNQRCAxMAkJCS8qIFNwZWVkICov CisjZGVmaW5lIFNIU1RBIDExCQkJLyogU3RhdHVzICovCisjZGVmaW5lIFNIU0VSIDEyCQkJLyog U2VydmVyICovCisjZGVmaW5lIFNIWE1JIDEzCQkJLyogVHJhbnNtaXQgKi8KKyNkZWZpbmUgU0hB VFQgMTQJCQkvKiBBdHRyaWJ1dGVzICovCisjZGVmaW5lIFNITU9EIDE1CQkJLyogTW9kZW0gKi8K KyNkZWZpbmUgU0hERkxUIDE2CQkJLyogRGVmYXVsdCAoYXMgaW4gVk1TKSAqLworI2RlZmluZSBT SFZBUiAxNwkJCS8qIFNob3cgZ2xvYmFsIHZhcmlhYmxlcyAqLworI2RlZmluZSBTSEFSRyAxOAkJ CS8qIFNob3cgbWFjcm8gYXJndW1lbnRzICovCisjZGVmaW5lIFNIQVJSIDE5CQkJLyogU2hvdyBh cnJheXMgKi8KKyNkZWZpbmUgU0hCVUkgMjAJCQkvKiBTaG93IGJ1aWx0aW4gdmFyaWFibGVzICov CisjZGVmaW5lIFNIRlVOIDIxCQkJLyogU2hvdyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgU0hQQUQg MjIJCQkvKiBTaG93IChYLjI1KSBQQUQgKi8KKyNkZWZpbmUgU0hURVIgMjMJCQkvKiBTaG93IHRl cm1pbmFsIHNldHRpbmdzICovCisjZGVmaW5lIFNIRVNDIDI0CQkJLyogU2hvdyBlc2NhcGUgY2hh cmFjdGVyICovCisjZGVmaW5lIFNIRElBIDI1CQkJLyogU2hvdyBESUFMIHBhcmFtZXRlcnMgKi8K KyNkZWZpbmUgU0hORVQgMjYJCQkvKiBTaG93IG5ldHdvcmsgcGFyYW1ldGVycyAqLworI2RlZmlu ZSBTSExCTCAyNwkJCS8qIFNob3cgVk1TIGxhYmVsZWQgZmlsZSBwYXJhbWV0ZXJzICovCisjZGVm aW5lIFNIU1RLIDI4CQkJLyogU2hvdyBzdGFjaywgTUFDIGRlYnVnZ2luZyAqLworI2RlZmluZSBT SENTRSAyOQkJCS8qIFNob3cgY2hhcmFjdGVyIHNldHMgKi8KKyNkZWZpbmUgU0hGRUEgMzAJCQkv KiBTaG93IGZlYXR1cmVzICovCisjZGVmaW5lIFNIQ1RMIDMxCQkJLyogU2hvdyBjb250cm9sLXBy ZWZpeCB0YWJsZSAqLworI2RlZmluZSBTSEVYSSAzMgkJCS8qIFNob3cgRVhJVCBpdGVtcyAqLwor I2RlZmluZSBTSFBSVCAzMwkJCS8qIFNob3cgcHJpbnRlciAqLworI2RlZmluZSBTSENNRCAzNAkJ CS8qIFNob3cgY29tbWFuZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFNIS1ZCIDM1CQkJLyogU2hv dyBcS3ZlcmJzICovCisjZGVmaW5lIFNITU9VIDM2CQkJLyogU2hvdyBNb3VzZSAobGlrZSBTaG93 IEtleSkgKi8KKyNkZWZpbmUgU0hUQUIgMzcJCQkvKiBTaG93IFRhYnMgKE9TLzIpICovCisjZGVm aW5lIFNIVlNDUk4gMzgJCQkvKiBTaG93IFZpcnR1YWwgU2NyZWVuIChPUy8yKSAqLworI2RlZmlu ZSBTSEFMUk0gIDM5CQkJLyogQUxBUk0gKi8KKyNkZWZpbmUgU0hTRkwgICA0MAkJCS8qIFNFTkQt TElTVCAqLworI2RlZmluZSBTSFVESyAgIDQxICAgICAgICAgICAgICAgICAgICAgIC8qIERFQyBW VCBVREtzIChPUy8yKSAqLworI2RlZmluZSBTSERCTCAgIDQyCQkJLyogRE9VQkxFL0lHTk9SRSBj aGFyYWN0ZXJzICovCisjZGVmaW5lIFNIRURJVCAgICA0MwkJCS8qIEVESVRPUiAqLworI2RlZmlu ZSBTSEJST1dTRSAgNDQJCQkvKiBCUk9XU0VSICovCisjZGVmaW5lIFNIVEFQSSAgICA0NQkJCS8q IFRBUEkgKi8KKyNkZWZpbmUgU0hUQVBJX0wgIDQ2CQkJLyogVEFQSSBMb2NhdGlvbiAqLworI2Rl ZmluZSBTSFRBUElfTSAgNDcJCQkvKiBUQVBJIE1vZGVtIFByb3BlcnRpZXMgKi8KKyNkZWZpbmUg U0hUQVBJX0MgIDQ4CQkJLyogVEFQSSBDb21tIFByb3BlcnRpZXMgICovCisjZGVmaW5lIFNIVEVM ICAgICA0OQkJCS8qIFNIT1cgVEVMTkVUICovCisjZGVmaW5lIFNISU5QICAgICA1MAkJCS8qIFNI T1cgSU5QVVQgKi8KKyNkZWZpbmUgU0hUUklHICAgIDUxCQkJLyogU0hPVyBUUklHR0VSICovCisj ZGVmaW5lIFNITE9HICAgICA1MgkJCS8qIFNIT1cgTE9HUyAqLworI2RlZmluZSBTSE9VVFAgICAg NTMJCQkvKiBTSE9XIE9VVFBVVCAqLworI2RlZmluZSBTSE9QQVQgICAgNTQJCQkvKiBTSE9XIFBB VFRFUk5TICovCisjZGVmaW5lIFNIT1NUUiAgICA1NQkJCS8qIFNIT1cgU1RSRUFNSU5HICovCisj ZGVmaW5lIFNIT0FVVEggICA1NgkJCS8qIFNIT1cgQVVUSEVOVElDQVRJT04gKi8KKyNkZWZpbmUg U0hPRlRQICAgIDU3CQkJLyogU0hPVyBGVFAgKi8KKyNkZWZpbmUgU0hUT1BUICAgIDU4ICAgICAg ICAgICAgICAgICAgICAvKiBTSE9XIFRFTE9QVCAqLworI2RlZmluZSBTSFhPUFQgICAgNTkJCQkv KiBTSE9XIEVYVEVOREVELU9QVElPTlMgKi8KKyNkZWZpbmUgU0hDRCAgICAgIDYwCQkJLyogU0hP VyBDRCAqLworI2RlZmluZSBTSEFTU09DICAgNjEJCQkvKiBTSE9XIEFTU09DSUFUSU9OUyAqLwor I2RlZmluZSBTSENPTk5YICAgNjIJCQkvKiBTSE9XIENPTk5FQ1RJT04gKi8KKyNkZWZpbmUgU0hP UFRTICAgIDYzCQkJLyogU0hPVyBPUFRJT05TICovCisjZGVmaW5lIFNIT0ZMTyAgICA2NAkJCS8q IFNIT1cgRkxPVy1DT05UUk9MICovCisjZGVmaW5lIFNIT1hGRVIgICA2NQkJCS8qIFNIT1cgVFJB TlNGRVIgKi8KKyNkZWZpbmUgU0hUQ1AgICAgIDY2ICAgICAgICAgICAgICAgICAgICAvKiBTSE9X IFRDUCAqLworI2RlZmluZSBTSEhJU1RPUlkgNjcJCQkvKiBTSE9XIChjb21tYW5kKSBISVNUT1JZ ICovCisjZGVmaW5lIFNIU0VYUCAgICA2OAkJCS8qIFNIT1cgU0VYUFJFU1NJT05TICovCisjZGVm aW5lIFNIT1NTSCAgICA2OQkJCS8qIFNIT1cgU1NIICovCisjZGVmaW5lIFNIT0lLUyAgICA3MCAg ICAgICAgICAgICAgICAgICAgLyogU0hPVyBJS1MgKi8KKyNkZWZpbmUgU0hPR1VJICAgIDcxCQkJ LyogU0hPVyBHVUkgKEs5NSkgKi8KKyNkZWZpbmUgU0hPUkVOICAgIDcyCQkJLyogU0hPVyBSRU5B TUUgKi8KKworLyogUkVNT1RFIGNvbW1hbmQgc3ltYm9scyAqLworCisjZGVmaW5lIFhaQ1BZICAw CS8qIENvcHkgKi8KKyNkZWZpbmUgWFpDV0QgIDEJLyogQ2hhbmdlIFdvcmtpbmcgRGlyZWN0b3J5 ICovCisjZGVmaW5lIFhaREVMICAyCS8qIERlbGV0ZSAqLworI2RlZmluZSBYWkRJUiAgMwkvKiBE aXJlY3RvcnkgKi8KKyNkZWZpbmUgWFpITFAgIDQJLyogSGVscCAqLworI2RlZmluZSBYWkhPUyAg NQkvKiBIb3N0ICovCisjZGVmaW5lIFhaS0VSICA2CS8qIEtlcm1pdCAqLworI2RlZmluZSBYWkxH SSAgNwkvKiBMb2dpbiAqLworI2RlZmluZSBYWkxHTyAgOAkvKiBMb2dvdXQgKi8KKyNkZWZpbmUg WFpNQUkgIDkJLyogTWFpbCA8LS0gd3JvbmcsIHRoaXMgc2hvdWxkIGJlIHRvcC1sZXZlbCAqLwor I2RlZmluZSBYWk1PVSAxMAkvKiBNb3VudCAqLworI2RlZmluZSBYWk1TRyAxMQkvKiBNZXNzYWdl ICovCisjZGVmaW5lIFhaUFJJIDEyCS8qIFByaW50ICovCisjZGVmaW5lIFhaUkVOIDEzCS8qIFJl bmFtZSAqLworI2RlZmluZSBYWlNFVCAxNAkvKiBTZXQgKi8KKyNkZWZpbmUgWFpTUEEgMTUJLyog U3BhY2UgKi8KKyNkZWZpbmUgWFpTVUIgMTYJLyogU3VibWl0ICovCisjZGVmaW5lIFhaVFlQIDE3 CS8qIFR5cGUgKi8KKyNkZWZpbmUgWFpXSE8gMTgJLyogV2hvICovCisjZGVmaW5lIFhaUFdEIDE5 CS8qIFByaW50IFdvcmtpbmcgRGlyZWN0b3J5ICovCisjZGVmaW5lIFhaUVVFIDIwCS8qIFF1ZXJ5 ICovCisjZGVmaW5lIFhaQVNHIDIxCS8qIEFzc2lnbiAqLworI2RlZmluZSBYWk1LRCAyMgkvKiBt a2RpciAqLworI2RlZmluZSBYWlJNRCAyMwkvKiBybWRpciAqLworI2RlZmluZSBYWlhJVCAyNAkv KiBFeGl0ICovCisjZGVmaW5lIFhaQ0RVIDI1ICAgICAgICAvKiBDRFVQICovCisKKy8qIFNFVCBJ TlBVVCBjb21tYW5kIHBhcmFtZXRlcnMgKi8KKworI2RlZmluZSBJTl9ERUYgIDAJCQkvKiBEZWZh dWx0IHRpbWVvdXQgKi8KKyNkZWZpbmUgSU5fVElNICAxCQkJLyogVGltZW91dCBhY3Rpb24gKi8K KyNkZWZpbmUgSU5fQ0FTICAyCQkJLyogQ2FzZSAobWF0Y2hpbmcpICovCisjZGVmaW5lIElOX0VD SCAgMwkJCS8qIEVjaG8gKi8KKyNkZWZpbmUgSU5fU0lMICA0CQkJLyogU2lsZW5jZSAqLworI2Rl ZmluZSBJTl9CVUYgIDUJCQkvKiBCdWZmZXIgc2l6ZSAqLworI2RlZmluZSBJTl9QQUMgIDYgICAg ICAgICAgICAgICAgICAgICAgIC8qIElucHV0IFBhY2luZyAoZGVidWcpICovCisjZGVmaW5lIElO X1RSTSAgNwkJCS8qIElucHV0IFRlcm1pbmFsIERpc3BsYXkgKi8KKyNkZWZpbmUgSU5fQURMICA4 CQkJLyogSW5wdXQgYXV0b2Rvd25sb2FkICovCisjZGVmaW5lIElOX1BBVCAgOQkJCS8qIFBhdHRl cm4gdG8gbWF0Y2ggKi8KKyNkZWZpbmUgSU5fQVNHIDEwIAkJCS8qIEFzc2lnbiBtYXRjaGluZyB0 ZXh0IHRvIHZhcmlhYmxlICovCisjZGVmaW5lIElOX0NBTiAxMQkJCS8qIEtleWJvYXJkIGNhbmNl bGxhdGlvbiBvZiBJTlBVVCAqLworI2RlZmluZSBJTl9TQ0EgMTIJCQkvKiBUaW1lb3V0IHNjYWxp bmcgKi8KKworLyogRU5BQkxFL0RJU0FCTEUgY29tbWFuZCBwYXJhbWV0ZXJzICovCisKKyNkZWZp bmUgRU5fQUxMICAwCQkJLyogQUxMICovCisjZGVmaW5lIEVOX0NXRCAgMQkJCS8qIENEL0NXRCAq LworI2RlZmluZSBFTl9ESVIgIDIJCQkvKiBESVJFQ1RPUlkgKi8KKyNkZWZpbmUgRU5fRklOICAz CQkJLyogRklOSVNIICovCisjZGVmaW5lIEVOX0dFVCAgNAkJCS8qIEdFVCAqLworI2RlZmluZSBF Tl9IT1MgIDUJCQkvKiBIT1NUIGNvbW1hbmQgKi8KKyNkZWZpbmUgRU5fS0VSICA2CQkJLyogS0VS TUlUIGNvbW1hbmQgKi8KKyNkZWZpbmUgRU5fTE9HICA3CQkJLyogTE9HSU4gKi8KKyNkZWZpbmUg RU5fU0VOICA4CQkJLyogU0VORCAqLworI2RlZmluZSBFTl9TRVQgIDkJCQkvKiBTRVQgKi8KKyNk ZWZpbmUgRU5fU1BBIDEwCQkJLyogU1BBQ0UgKi8KKyNkZWZpbmUgRU5fVFlQIDExCQkJLyogVFlQ RSAqLworI2RlZmluZSBFTl9XSE8gMTIJCQkvKiBXSE8sIGZpbmdlciAqLworI2RlZmluZSBFTl9E RUwgMTMJCQkvKiBEZWxldGUgKi8KKyNkZWZpbmUgRU5fQllFIDE0CQkJLyogQllFIChhcyBvcHBv c2VkIHRvIEZJTklTSCkgKi8KKyNkZWZpbmUgRU5fUVVFIDE1CQkJLyogUVVFUlkgKi8KKyNkZWZp bmUgRU5fQVNHIDE2CQkJLyogQVNTSUdOICovCisjZGVmaW5lIEVOX0NQWSAxNwkJCS8qIENPUFkg Ki8KKyNkZWZpbmUgRU5fUkVOIDE4CQkJLyogUkVOQU1FICovCisjZGVmaW5lIEVOX1JFVCAxOQkJ CS8qIFJFVFJJRVZFICovCisjZGVmaW5lIEVOX01BSSAyMAkJCS8qIE1BSUwgKi8KKyNkZWZpbmUg RU5fUFJJIDIxCQkJLyogUFJJTlQgKi8KKyNkZWZpbmUgRU5fTUtEIDIyCQkJLyogTUtESVIgKi8K KyNkZWZpbmUgRU5fUk1EIDIzCQkJLyogUk1ESVIgKi8KKyNkZWZpbmUgRU5fWElUIDI0CQkJLyog RVhJVCAqLworI2RlZmluZSBFTl9FTkEgMjUJCQkvKiBFTkFCTEUgKi8KKyNlbmRpZiAvKiBOT0lD UCAqLworCisjaWZuZGVmIE5PSUNQCisvKiBDTEVBUiBjb21tYW5kIHN5bWJvbHMgKi8KKyNkZWZp bmUgQ0xSX0RFViAgICAxCQkJLyogQ2xlYXIgRGV2aWNlIEJ1ZmZlcnMgKi8KKyNkZWZpbmUgQ0xS X0lOUCAgICAyCQkJLyogQ2xlYXIgSW5wdXQgQnVmZmVycyAqLworI2RlZmluZSBDTFJfQlRIICAg IENMUl9ERVZ8Q0xSX0lOUAkvKiBDbGVhciBEZXZpY2UgYW5kIElucHV0ICovCisjZGVmaW5lIENM Ul9TQ0wgICAgNAkJCS8qIENsZWFyIFNjcm9sbGJhY2sgYnVmZmVyICovCisjZGVmaW5lIENMUl9D TUQgICAgOAkJCS8qIENsZWFyIENvbW1hbmQgU2NyZWVuICovCisjZGVmaW5lIENMUl9UUk0gICAx NgkJCS8qIENsZWFyIFRlcm1pbmFsIFNjcmVlbiAqLworI2RlZmluZSBDTFJfRElBICAgMzIJCQkv KiBDbGVhciBEaWFsIFN0YXR1cyAqLworI2RlZmluZSBDTFJfU0ZMICAgNjQJCQkvKiBDbGVhciBT ZW5kLUZpbGUtTGlzdCAqLworI2RlZmluZSBDTFJfQVBDICAxMjgJCQkvKiBDbGVhciBBUEMgKi8K KyNkZWZpbmUgQ0xSX0FMUiAgMjU2CQkJLyogQ2xlYXIgQWxhcm0gKi8KKyNkZWZpbmUgQ0xSX1RY VCAgNTEyCQkJLyogQ2xlYXIgdGV4dC1wYXR0ZXJucyAqLworI2RlZmluZSBDTFJfQklOIDEwMjQJ CQkvKiBDbGVhciBiaW5hcnktcGF0dGVybnMgKi8KKyNkZWZpbmUgQ0xSX1NDUiAyMDQ4CQkJLyog Q2xlYXIgc2NyZWVuICovCisjZGVmaW5lIENMUl9LQkQgNDA5NgkJCS8qIENsZWFyIGtleWJvYXJk IGJ1ZmZlciAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKy8qIFN5bWJvbHMgZm9yIGxvZ3MgKi8K KworI2RlZmluZSBMT0dEIDAJCQkJLyogRGVidWdnaW5nICovCisjZGVmaW5lIExPR1AgMQkJCQkv KiBQYWNrZXRzICovCisjZGVmaW5lIExPR1MgMgkJCQkvKiBTZXNzaW9uICovCisjZGVmaW5lIExP R1QgMwkJCQkvKiBUcmFuc2FjdGlvbiAqLworI2RlZmluZSBMT0dYIDQJCQkJLyogU2NyZWVuICov CisjZGVmaW5lIExPR1IgNQkJCQkvKiBUaGUgIm9wZW4gcmVhZCIgZmlsZSAqLworI2RlZmluZSBM T0dXIDYJCQkJLyogVGhlICJvcGVuIHdyaXRlL2FwcGVuZCIgZmlsZSAqLworI2RlZmluZSBMT0dF IDcJCQkJLyogRXJyb3IgKGUuZy4gc3RkZXJyKSAqLworI2RlZmluZSBMT0dNIDgJCQkJLyogVGhl IGRpYWxpbmcgbG9nICovCisKKyNpZm5kZWYgTk9TUEwKKy8qIFN5bWJvbHMgZm9yIGJ1aWx0aW4g dmFyaWFibGVzICovCisKKyNkZWZpbmUgVk5fQVJHQyAwCQkJLyogQVJHQyAqLworI2RlZmluZSBW Tl9DT1VOIDEJCQkvKiBDT1VOVCAqLworI2RlZmluZSBWTl9EQVRFIDIJCQkvKiBEQVRFICovCisj ZGVmaW5lIFZOX0RJUkUgMwkJCS8qIERJUkVDVE9SWSAqLworI2RlZmluZSBWTl9FUlJPIDQJCQkv KiBFUlJPUkxFVkVMICovCisjZGVmaW5lIFZOX1RJTUUgNQkJCS8qIFRJTUUgKi8KKyNkZWZpbmUg Vk5fVkVSUyA2CQkJLyogVkVSU0lPTiAqLworI2RlZmluZSBWTl9JQlVGIDcJCQkvKiBJTlBVVCBi dWZmZXIgKi8KKyNkZWZpbmUgVk5fU1VDQyA4CQkJLyogU1VDQ0VTUyBmbGFnICovCisjZGVmaW5l IFZOX0xJTkUgOQkJCS8qIExJTkUgKi8KKyNkZWZpbmUgVk5fQVJHUyAxMAkJCS8qIFByb2dyYW0g Y29tbWFuZC1saW5lIGFyZyBjb3VudCAqLworI2RlZmluZSBWTl9TWVNUIDExCQkJLyogU3lzdGVt IHR5cGUgKi8KKyNkZWZpbmUgVk5fU1lTViAxMgkJCS8qIFN5c3RlbSB2ZXJzaW9uICovCisjZGVm aW5lIFZOX1JFVCAgMTMJCQkvKiBSRVRVUk4gdmFsdWUgKi8KKyNkZWZpbmUgVk5fRklMRSAxNAkJ CS8qIE1vc3QgcmVjZW50IGZpbGVzcGVjICovCisjZGVmaW5lIFZOX05EQVQgMTUJCQkvKiBOdW1l cmljIGRhdGUgeXl5eS9tbS9kZCAqLworI2RlZmluZSBWTl9IT01FIDE2CQkJLyogSG9tZSBkaXJl Y3RvcnkgKi8KKyNkZWZpbmUgVk5fU1BFRSAxNwkJCS8qIFRyYW5zbWlzc2lvbiBzcGVlZCAqLwor I2RlZmluZSBWTl9IT1NUIDE4CQkJLyogSG9zdCBuYW1lICovCisjZGVmaW5lIFZOX1RUWUYgMTkJ CQkvKiBUVFkgZmlsZSBkZXNjcmlwdG9yIChVTklYIG9ubHkpICovCisjZGVmaW5lIFZOX1BST0cg MjAJCQkvKiBQcm9ncmFtIG5hbWUgKi8KKyNkZWZpbmUgVk5fTlRJTSAyMQkJCS8qIE5USU1FICov CisjZGVmaW5lIFZOX0ZGQyAgMjIJCQkvKiBDaGFyYWN0ZXJzIGluIGxhc3QgZmlsZSB4ZmVycmVk ICovCisjZGVmaW5lIFZOX1RGQyAgMjMJCQkvKiBDaGFycyBpbiBsYXN0IGZpbGUgZ3JvdXAgeGZl cnJlZCAqLworI2RlZmluZSBWTl9DUFUgIDI0CQkJLyogQ1BVIHR5cGUgKi8KKyNkZWZpbmUgVk5f Q01ETCAyNQkJCS8qIENvbW1hbmQgbGV2ZWwgKi8KKyNkZWZpbmUgVk5fREFZICAyNiAgICAgICAg ICAgICAgICAgICAgICAvKiBEYXkgb2Ygd2Vlaywgc3RyaW5nICovCisjZGVmaW5lIFZOX05EQVkg MjcgICAgICAgICAgICAgICAgICAgICAgLyogRGF5IG9mIHdlZWssIG51bWVyaWMgKi8KKyNkZWZp bmUgVk5fTENMICAyOAkJCS8qIExvY2FsICh2cykgcmVtb3RlIG1vZGUgKi8KKyNkZWZpbmUgVk5f Q01EUyAyOQkJCS8qIENvbW1hbmQgc291cmNlICovCisjZGVmaW5lIFZOX0NNREYgMzAJCQkvKiBD b21tYW5kIGZpbGUgbmFtZSAqLworI2RlZmluZSBWTl9NQUMgIDMxCQkJLyogTWFjcm8gbmFtZSAq LworI2RlZmluZSBWTl9FWElUIDMyCQkJLyogRXhpdCBzdGF0dXMgKi8KKyNkZWZpbmUgVk5fSUNI UiAzMwkJCS8qIElOUFVUIGNoYXJhY3RlciAqLworI2RlZmluZSBWTl9JQ05UIDM0CQkJLyogSU5Q VVQgY291bnQgKi8KKyNkZWZpbmUgVk5fUFJUWSAzNQkJCS8qIEN1cnJlbnQgcGFyaXR5ICovCisj ZGVmaW5lIFZOX0RJQUwgMzYJCQkvKiBESUFMIHN0YXR1cyAqLworI2RlZmluZSBWTl9LRVlCIDM3 CQkJLyogS2V5Ym9hcmQgdHlwZSAqLworI2RlZmluZSBWTl9DUFMgIDM4CQkJLyogQ2hhcnMgcGVy IHNlY29uZCwgbGFzdCB0cmFuc2ZlciAqLworI2RlZmluZSBWTl9SUEwgIDM5CQkJLyogUmVjZWl2 ZSBwYWNrZXQgbGVuZ3RoICovCisjZGVmaW5lIFZOX1NQTCAgNDAJCQkvKiBTZW5kIHBhY2tldCBs ZW5ndGggKi8KKyNkZWZpbmUgVk5fTU9ERSA0MQkJCS8qIFRyYW5zZmVyIG1vZGUgKHRleHQsIGJp bmFyeSkgKi8KKyNkZWZpbmUgVk5fUkVYWCA0MgkJCS8qIFJleHggcmV0dXJuIHZhbHVlICovCisj ZGVmaW5lIFZOX05FV0wgNDMJCQkvKiBOZXdsaW5lIGNoYXJhY3RlciBvciBzZXF1ZW5jZSAqLwor I2RlZmluZSBWTl9DT0xTIDQ0CQkJLyogQ29sdW1ucyBvbiBjb25zb2xlIHNjcmVlbiAqLworI2Rl ZmluZSBWTl9ST1dTIDQ1CQkJLyogUm93cyBvbiBjb25zb2xlIHNjcmVlbiAqLworI2RlZmluZSBW Tl9UVFlQIDQ2CQkJLyogVGVybWluYWwgdHlwZSAqLworI2RlZmluZSBWTl9NSU5QIDQ3CQkJLyog TUlOUFVUIHJlc3VsdCAqLworI2RlZmluZSBWTl9DT05OIDQ4CQkJLyogQ29ubmVjdGlvbiB0eXBl ICovCisjZGVmaW5lIFZOX1NZU0kgNDkJCQkvKiBTeXN0ZW0gSUQgKi8KKyNkZWZpbmUgVk5fVFog ICA1MAkJCS8qIFRpbWV6b25lICovCisjZGVmaW5lIFZOX1NQQSAgNTEJCQkvKiBTcGFjZSAqLwor I2RlZmluZSBWTl9RVUUgIDUyCQkJLyogUXVlcnkgKi8KKyNkZWZpbmUgVk5fU1RBUiA1MwkJCS8q IFN0YXJ0dXAgZGlyZWN0b3J5ICovCisjZGVmaW5lIFZOX0NTRVQgNTQJCQkvKiBMb2NhbCBjaGFy YWN0ZXIgc2V0ICovCisjZGVmaW5lIFZOX01ETSAgNTUJCQkvKiBNb2RlbSB0eXBlICovCisjZGVm aW5lIFZOX0VWQUwgNTYJCQkvKiBNb3N0IHJlY2VudCBFVkFMVUFURSByZXN1bHQgKi8KKworI2Rl ZmluZSBWTl9EX0NDIDU3CQkJLyogRElBTCBDT1VOVFJZLUNPREUgKi8KKyNkZWZpbmUgVk5fRF9B QyA1OAkJCS8qIERJQUwgQVJFQS1DT0RFICovCisjZGVmaW5lIFZOX0RfSVAgNTkJCQkvKiBESUFM IElOVEVSTkFUSU9OQUwtUFJFRklYICovCisjZGVmaW5lIFZOX0RfTFAgNjAJCQkvKiBESUFMIExE LVBSRUZJWCAqLworCisjZGVmaW5lIFZOX1VJRCAgNjEKKyNkZWZpbmUgVk5fUFdEICA2MgorI2Rl ZmluZSBWTl9QUk0gIDYzCisKKyNkZWZpbmUgVk5fUFJPVE8gNjQJCQkvKiBQcm90b2NvbCAqLwor I2RlZmluZSBWTl9ETERJUiA2NQkJCS8qIERvd25sb2FkIGRpcmVjdG9yeSAqLworCisjZGVmaW5l IFZOX01fQUFBIDY2CQkJLyogRmlyc3QgTU9ERU0gb25lICovCisjZGVmaW5lIFZOX01fSU5JIDY2 CQkJLyogTW9kZW0gaW5pdCBzdHJpbmcgKi8KKyNkZWZpbmUgVk5fTV9EQ00gNjcJCQkvKiBNb2Rl bSBkaWFsIGNvbW1hbmQgKi8KKyNkZWZpbmUgVk5fTV9EQ08gNjgJCQkvKiBNb2RlbSBkYXRhIGNv bXByZXNzaW9uIG9uICovCisjZGVmaW5lIFZOX01fRENYIDY5CQkJLyogTW9kZW0gZGF0YSBjb21w cmVzc2lvbiBvZmYgKi8KKyNkZWZpbmUgVk5fTV9FQ08gNzAJCQkvKiBNb2RlbSBlcnJvciBjb3Jy ZWN0aW9uIG9uICovCisjZGVmaW5lIFZOX01fRUNYIDcxCQkJLyogTW9kZW0gZXJyb3IgY29ycmVj dGlvbiBvZmYgKi8KKyNkZWZpbmUgVk5fTV9BQU8gNzIJCQkvKiBNb2RlbSBhdXRvYW5zd2VyIG9u ICovCisjZGVmaW5lIFZOX01fQUFYIDczCQkJLyogTW9kZW0gYXV0b2Fuc3dlciBvZmYgKi8KKyNk ZWZpbmUgVk5fTV9IVVAgNzQJCQkvKiBNb2RlbSBoYW5ndXAgY29tbWFuZCAqLworI2RlZmluZSBW Tl9NX0hXRiA3NQkJCS8qIE1vZGVtIGhhcmR3YXJlIGZsb3cgY29tbWFuZCAqLworI2RlZmluZSBW Tl9NX1NXRiA3NgkJCS8qIE1vZGVtIHNvZnR3YXJlIGZsb3cgY29tbWFuZCAqLworI2RlZmluZSBW Tl9NX05GQyA3NwkJCS8qIE1vZGVtIG5vIGZsb3ctY29udHJvbCBjb21tYW5kICovCisjZGVmaW5l IFZOX01fUERNIDc4CQkJLyogTW9kZW0gcHVsc2UgZGlhbGluZyBtb2RlICovCisjZGVmaW5lIFZO X01fVERNIDc5CQkJLyogTW9kZW0gdG9uZSBkaWFsaW5nIG1vZGUgKi8KKyNkZWZpbmUgVk5fTV9a WlogNzkJCQkvKiBMYXN0IE1PREVNIG9uZSAqLworCisjZGVmaW5lIFZOX1NFTENUIDgwCQkJLyog U2VsZWN0ZWQgVGV4dCBmcm9tIE1hcmsgTW9kZSAqLworI2RlZmluZSBWTl9URU1QICA4MQkJCS8q IFRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgVk5fSVNUQVQgODIJCQkvKiBJTlBVVCBj b21tYW5kIHN0YXR1cyAqLworI2RlZmluZSBWTl9JTkkgICA4MwkJCS8qIElOSSAoa2VybXJjKSBk aXJlY3RvcnkgKi8KKyNkZWZpbmUgVk5fRVhFRElSIDg0CQkJLyogRVhFIGRpcmVjdG9yeSAqLwor I2RlZmluZSBWTl9FUlJOTyAgODUJCQkvKiBWYWx1ZSBvZiBlcnJubyAqLworI2RlZmluZSBWTl9F UlNUUiAgODYJCQkvKiBDb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2UgKi8KKyNkZWZpbmUgVk5f VEZMTiAgIDg3CQkJLyogVEFLRSBmaWxlIGxpbmUgbnVtYmVyICovCisjZGVmaW5lIFZOX1hWTlVN ICA4OAkJCS8qIFByb2R1Y3Qtc3BlY2lmaWMgdmVyc2lvbiBudW1iZXIgKi8KKyNkZWZpbmUgVk5f UlBTSVogIDg5CQkJLyogUmVjZWl2ZSBwYWNrZXQgbGVuZ3RoICovCisjZGVmaW5lIFZOX1dJTkRP ICA5MAkJCS8qIFdpbmRvdyBzaXplICovCisjZGVmaW5lIFZOX01ETVNHICA5MQkJCS8qIE1vZGVt IG1lc3NhZ2UgKi8KKyNkZWZpbmUgVk5fRE5VTSAgIDkyCQkJLyogRGlhbCBudW1iZXIgKi8KKyNk ZWZpbmUgVk5fQVBDICAgIDkzCQkJLyogQVBDIGFjdGl2ZSAqLworI2RlZmluZSBWTl9JUEFERFIg OTQJCQkvKiBNeSBJUCBhZGRyZXNzICovCisjZGVmaW5lIFZOX0NSQzE2ICA5NQkJCS8qIENSQy0x NiBvZiBtb3N0IHJlY2VudCBmaWxlIGdyb3VwICovCisjZGVmaW5lIFZOX1RSTUsgICA5NiAgICAg ICAgICAgICAgICAgICAgLyogTWFjcm8gZXhlY3V0ZWQgZnJvbSBUZXJtaW5hbCBNb2RlICovCisj ZGVmaW5lIFZOX1BJRCAgICA5NwkJCS8qIFByb2Nlc3MgSUQgKi8KKyNkZWZpbmUgVk5fRk5BTSAg IDk4CQkJLyogTmFtZSBvZiBmaWxlIGJlaW5nIHRyYW5zZmVycmVkICovCisjZGVmaW5lIFZOX0ZO VU0gICA5OQkJCS8qIE51bWJlciBvZiBmaWxlIGJlaW5nIHRyYW5zZmVycmVkICovCisjZGVmaW5l IFZOX1BFWElUICAxMDAJCQkvKiBQcm9jZXNzIGV4aXQgc3RhdHVzICovCisjZGVmaW5lIFZOX1Bf Q1RMICAxMDEgCQkJLyogQ29udHJvbCBQcmVmaXggKi8KKyNkZWZpbmUgVk5fUF84QklUIDEwMgkJ CS8qIDgtYml0IHByZWZpeCAqLworI2RlZmluZSBWTl9QX1JQVCAgMTAzCQkJLyogUmVwZWF0IGNv dW50IHByZWZpeCAqLworI2RlZmluZSBWTl9EX0xDUCAgMTA0CQkJLyogRElBTCBMT0NBTC1QUkVG SVggKi8KKyNkZWZpbmUgVk5fVVJMICAgIDEwNQkJCS8qIExhc3QgVVJMIHNlbGVjdGVkICovCisj ZGVmaW5lIFZOX1JFR04gICAxMDYJCQkvKiBSZWdpc3RyYXRpb24gTmFtZSAqLworI2RlZmluZSBW Tl9SRUdPICAgMTA3CQkJLyogUmVnaXN0cmF0aW9uIE9yZ2FuaXphdGlvbiAqLworI2RlZmluZSBW Tl9SRUdTICAgMTA4CQkJLyogUmVnaXN0cmF0aW9uIFNlcmlhbCBudW1iZXIgKi8KKyNkZWZpbmUg Vk5fWFBST0cgIDEwOQkJCS8qIHhwcm9ncmFtIChsaWtlIHh2ZXJzaW9uKSAqLworI2RlZmluZSBW Tl9FRElUT1IgMTEwCQkJLyogRWRpdG9yICovCisjZGVmaW5lIFZOX0VET1BUICAxMTEJCQkvKiBF ZGl0b3Igb3B0aW9ucyAqLworI2RlZmluZSBWTl9FREZJTEUgMTEyCQkJLyogRWRpdG9yIGZpbGUg Ki8KKyNkZWZpbmUgVk5fQlJPV1NSIDExMwkJCS8qIEJyb3dzZXIgKi8KKyNkZWZpbmUgVk5fQlJP UFQgIDExNAkJCS8qIEJyb3dzZXIgb3B0aW9ucyAqLworI2RlZmluZSBWTl9IRVJBTEQgMTE1CQkJ LyogUHJvZ3JhbSBoZXJhbGQgKi8KKyNkZWZpbmUgVk5fVEVTVCAgIDExNgkJCS8qIFByb2dyYW0g dGVzdCBsZXZlbCBvciAiMCIgKi8KKyNkZWZpbmUgVk5fWEZTVEFUIDExNwkJCS8qIEZpbGUtVHJh bnNmZXIgc3RhdHVzICovCisjZGVmaW5lIFZOX1hGTVNHICAxMTkJCQkvKiBGaWxlLVRyYW5zZmVy IG1lc3NhZ2UgKi8KKyNkZWZpbmUgVk5fU05ETCAgIDEyMAkJCS8qIFNlbmQtbGlzdCBzdGF0dXMg Ki8KKyNkZWZpbmUgVk5fVFJJRyAgIDEyMQkJCS8qIFRyaWdnZXIgdmFsdWUgKi8KKyNkZWZpbmUg Vk5fTU9VX1ggIDEyMiAgICAgICAgICAgICAgICAgICAvKiBPUy8yIE1vdXNlIEN1cnNvciBYICov CisjZGVmaW5lIFZOX01PVV9ZICAxMjMgICAgICAgICAgICAgICAgICAgLyogT1MvMiBNb3VzZSBD dXJzb3IgWSAqLworI2RlZmluZSBWTl9QUklOVCAgMTI0CQkJLyogUHJpbnRlciAqLworI2RlZmlu ZSBWTl9FU0MgICAgMTI1CQkJLyogRXNjYXBlIGNoYXJhY3RlciAqLworI2RlZmluZSBWTl9JTlRJ TUUgMTI2CQkJLyogSU5QVVQgZWxhcHNlZCB0aW1lICovCisjZGVmaW5lIFZOX0s0UkxNICAxMjcJ CQkvKiBLZXJiZXJvcyA0IFJlYWxtICovCisjZGVmaW5lIFZOX0s1UkxNICAxMjgJCQkvKiBLZXJi ZXJvcyA1IFJlYWxtICovCisjZGVmaW5lIFZOX0s0UFJOICAxMjkJCQkvKiBLZXJiZXJvcyA0IFBy aW5jaXBhbCAqLworI2RlZmluZSBWTl9LNVBSTiAgMTMwCQkJLyogS2VyYmVyb3MgNSBQcmluY2lw YWwgKi8KKyNkZWZpbmUgVk5fSzRDQyAgIDEzMQkJCS8qIEtlcmJlcm9zIDQgQ3JlZGVudGlhbHMg Q2FjaGUgKi8KKyNkZWZpbmUgVk5fSzVDQyAgIDEzMgkJCS8qIEtlcmJlcm9zIDUgQ3JlZGVudGlh bHMgQ2FjaGUgKi8KKyNkZWZpbmUgVk5fT1NOQU0gIDEzMwkJCS8qIE9TIG5hbWUgKi8KKyNkZWZp bmUgVk5fT1NWRVIgIDEzNAkJCS8qIE9TIHZlcnNpb24gKi8KKyNkZWZpbmUgVk5fT1NSRUwgIDEz NQkJCS8qIE9TIHJlbGVhc2UgKi8KKyNkZWZpbmUgVk5fTkFNRSAgIDEzNgkJCS8qIE5hbWUgSSB3 YXMgY2FsbGVkIGJ5ICovCisjZGVmaW5lIFZOX01PREwgICAxMzcJCQkvKiBDUFUgbW9kZWwgKi8K KyNkZWZpbmUgVk5fWDI1TEEgIDEzOAkJCS8qIFguMjUgbG9jYWwgYWRkcmVzcyAqLworI2RlZmlu ZSBWTl9YMjVSQSAgMTM5CQkJLyogWC4yNSByZW1vdGUgYWRkcmVzcyAqLworI2RlZmluZSBWTl9L NFNSViAgMTQwICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDQgU2VydmljZSBOYW1lICov CisjZGVmaW5lIFZOX0s1U1JWICAxNDEgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNSBT ZXJ2aWNlIE5hbWUgKi8KKyNkZWZpbmUgVk5fUERTRlggIDE0MgkJCS8qIFBESUFMIHN1ZmZpeCAq LworI2RlZmluZSBWTl9EVFlQRSAgMTQzCQkJLyogRElBTCB0eXBlICovCisjZGVmaW5lIFZOX0xD S1BJRCAxNDQJCQkvKiBMb2NrZmlsZSBQSUQgKFVOSVgpICovCisjZGVmaW5lIFZOX0JMSyAgICAx NDUJCQkvKiBCbG9jayBjaGVjayAqLworI2RlZmluZSBWTl9URlRJTSAgMTQ2CQkJLyogRmlsZSB0 cmFuc2ZlciBlbGFwc2VkIHRpbWUgKi8KKyNkZWZpbmUgVk5fRF9QWFggIDE0NyAJCQkvKiBESUFM IFBCWC1FWENIQU5HRSAqLworI2RlZmluZSBWTl9IV1BBUiAgMTQ4IAkJCS8qIEhhcmR3YXJlIFBh cml0eSAqLworI2RlZmluZSBWTl9TRVJJQUwgMTQ5IAkJCS8qIFNFVCBTRVJJQUwgdmFsdWUgKi8K KyNkZWZpbmUgVk5fTENLRElSIDE1MAkJCS8qIExvY2tmaWxlIGRpcmVjdG9yeSAoVU5JWCkgKi8K KworI2RlZmluZSBWTl9LNEVOTyAgMTUxICAgICAgICAgICAgICAgICAgIC8qIEtlcmJlcm9zIDQg TGFzdCBFcnJubyAqLworI2RlZmluZSBWTl9LNEVNU0cgMTUyICAgICAgICAgICAgICAgICAgIC8q IEtlcmJlcm9zIDQgTGFzdCBFcnIgTXNnICovCisjZGVmaW5lIFZOX0s1RU5PICAxNTMgICAgICAg ICAgICAgICAgICAgLyogS2VyYmVyb3MgNSBMYXN0IEVycm5vICovCisjZGVmaW5lIFZOX0s1RU1T RyAxNTQgICAgICAgICAgICAgICAgICAgLyogS2VyYmVyb3MgNSBMYXN0IEVyciBNc2cgKi8KKwor I2RlZmluZSBWTl9JTlRNTyAgMTU1CQkJLyogSW5wdXQgdGltZW91dCAqLworI2RlZmluZSBWTl9B VVRIUyAgMTU2ICAgICAgICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIFN0YXRlICovCisK KyNkZWZpbmUgVk5fRE1fTFAgIDE1NwkJCS8qIERpYWwgTW9kaWZpZXI6IExvbmcgUGF1c2UgKi8K KyNkZWZpbmUgVk5fRE1fU1AgIDE1OAkJCS8qIERpYWwgTW9kaWZpZXI6IFNob3J0IFBhdXNlICov CisjZGVmaW5lIFZOX0RNX1BEICAxNTkJCQkvKiBEaWFsIE1vZGlmaWVyOiBQdWxzZSBEaWFsICov CisjZGVmaW5lIFZOX0RNX1REICAxNjAJCQkvKiBEaWFsIE1vZGlmaWVyOiBUb25lIERpYWwgKi8K KyNkZWZpbmUgVk5fRE1fV0EgIDE2MQkJCS8qIERpYWwgTW9kaWZpZXI6IFdhaXQgZm9yIEFuc3dl ciAqLworI2RlZmluZSBWTl9ETV9XRCAgMTYyCQkJLyogRGlhbCBNb2RpZmllcjogV2FpdCBmb3Ig RGlhbHRvbmUgKi8KKyNkZWZpbmUgVk5fRE1fUkMgIDE2MwkJCS8qIERpYWwgTW9kaWZpZXI6IFJl dHVybiB0byBDb21tYW5kICovCisKKy8qIChtb3JlIGJlbG93Li4uKSAqLworCisjZGVmaW5lIFZO X1RZX0xOICAxNjQJCQkvKiBUWVBFIGNvbW1hbmQgbGluZSBudW1iZXIgKi8KKyNkZWZpbmUgVk5f VFlfTEMgIDE2NQkJCS8qIFRZUEUgY29tbWFuZCBsaW5lIGNvdW50ICovCisjZGVmaW5lIFZOX1RZ X0xNICAxNjYJCQkvKiBUWVBFIGNvbW1hbmQgbWF0Y2ggY291bnQgKi8KKworI2RlZmluZSBWTl9N QUNMVkwgMTY3CQkJLyogXHYobWFjbGV2ZWwpICovCisKKyNkZWZpbmUgVk5fWEZfQkMgIDE2OAkJ CS8qIFRyYW5zZmVyIGJsb2NrY2hlY2sgZXJyb3JzICovCisjZGVmaW5lIFZOX1hGX1RNICAxNjkJ CQkvKiBUcmFuc2ZlciB0aW1lb3V0cyAqLworI2RlZmluZSBWTl9YRl9SWCAgMTcwCQkJLyogVHJh bnNmZXIgcmV0cmFuc21pc3Npb25zICovCisKKyNkZWZpbmUgVk5fTV9OQU0gIDE3MQkJCS8qIE1v ZGVtIGZ1bGwgbmFtZSAgKi8KKyNkZWZpbmUgVk5fTVNfQ0QgIDE3MgkJCS8qIE1vZGVtIHNpZ25h bCBDRCAgKi8KKyNkZWZpbmUgVk5fTVNfQ1RTIDE3MwkJCS8qIE1vZGVtIHNpZ25hbCBDVFMgKi8K KyNkZWZpbmUgVk5fTVNfRFNSIDE3NAkJCS8qIE1vZGVtIHNpZ25hbCBEU1IgKi8KKyNkZWZpbmUg Vk5fTVNfRFRSIDE3NQkJCS8qIE1vZGVtIHNpZ25hbCBEVFIgKi8KKyNkZWZpbmUgVk5fTVNfUkkg IDE3NgkJCS8qIE1vZGVtIHNpZ25hbCBSSSAgKi8KKyNkZWZpbmUgVk5fTVNfUlRTIDE3NwkJCS8q IE1vZGVtIHNpZ25hbCBSVFMgKi8KKworI2RlZmluZSBWTl9NQVRDSCAgMTc4CQkJLyogTW9zdCBy ZWNlbnQgcGF0dGVybiBtYXRjaCAqLworI2RlZmluZSBWTl9TTE1TRyAgMTc5CQkJLyogU0VUIExJ TkUgKGVycm9yKSBtZXNzYWdlICovCisjZGVmaW5lIFZOX1RYVERJUiAxODAJCQkvKiBLZXJtaXQg dGV4dC1maWxlIGRpcmVjdG9yeSAqLworI2RlZmluZSBWTl9NQV9QSSAgMTgxCQkJLyogTWF0aCBj b25zdGFudCBQaSAqLworI2RlZmluZSBWTl9NQV9FICAgMTgyCQkJLyogTWF0aCBjb25zdGFudCBl ICovCisjZGVmaW5lIFZOX01BX1BSICAxODMJCQkvKiBNYXRoIHByZWNpc2lvbiAoZGlnaXRzKSAq LworI2RlZmluZSBWTl9DTURCTCAgMTg0CQkJLyogQ29tbWFuZCBidWZmZXIgbGVuZ3RoICovCisK KyNkZWZpbmUgVk5fQVVUSFQgIDE4NSAgICAgICAgICAgICAgICAgICAvKiBBdXRoZW50aWNhdGlv biBUeXBlICovCisKKyNpZmRlZiBDS0NIQU5ORUxJTworI2RlZmluZSBWTl9GRVJSICAgMTg2CQkJ LyogRklMRSBlcnJvciAqLworI2RlZmluZSBWTl9GTUFYICAgMTg3CQkJLyogRklMRSBtYXggKi8K KyNkZWZpbmUgVk5fRkNPVSAgIDE4OAkJCS8qIFJlc3VsdCBvZiBsYXN0IEZJTEUgQ09VTlQgKi8K KyNlbmRpZiAvKiBDS0NIQU5ORUxJTyAqLworCisjZGVmaW5lIFZOX0RSVFIgICAxODkJCQkvKiBE SUFMIHJldHJ5IGNvdW50ZXIgKi8KKyNkZWZpbmUgVk5fQ1hUSU1FIDE5MAkJCS8qIEVsYXBzZWQg dGltZSBpbiBzZXNzaW9uICovCisjZGVmaW5lIFZOX0JZVEUgICAxOTEJCQkvKiBCeXRlIG9yZGVy ICovCisjZGVmaW5lIFZOX0FVVEhOICAxOTIgICAgICAgICAgICAgICAgICAgLyogQXV0aGVudGlj YXRpb24gTmFtZSAqLworI2RlZmluZSBWTl9LQkNIQVIgMTkzCQkJLyoga2JjaGFyICovCisjZGVm aW5lIFZOX1RUWU5BTSAxOTQJCQkvKiBOYW1lIG9mIGNvbnRyb2xsaW5nIHRlcm1pbmFsICovCisK KyNkZWZpbmUgVk5fWDUwOV9TIDE5NSAgICAgICAgICAgICAgICAgICAvKiBYLjUwOSBDZXJ0aWZp Y2F0ZSBTdWJqZWN0ICovCisjZGVmaW5lIFZOX1g1MDlfSSAxOTYgICAgICAgICAgICAgICAgICAg LyogWC41MDkgQ2VydGlmaWNhdGUgSXNzdWVyICAqLworCisjZGVmaW5lIFZOX1BST01QVCAxOTcJ CQkvKiBDLUtlcm1pdCdzIHByb21wdCAqLworI2RlZmluZSBWTl9CVUlMRCAgMTk4CQkJLyogQnVp bGQgSUQgc3RyaW5nICovCisKKyNkZWZpbmUgVk5fU0VYUCAgIDE5OQkJCS8qIExhc3QgUy1FeHBy ZXNzaW9uICovCisjZGVmaW5lIFZOX1ZTRVhQICAyMDAJCQkvKiBWYWx1ZSBvZiBsYXN0IFMtRXhw cmVzc2lvbiAqLworI2RlZmluZSBWTl9MU0VYUCAgMjAxCQkJLyogU0VYUCBkZXB0aCAqLworCisj ZGVmaW5lIFZOX0ZUSU1FICAyMDIJCQkvKiBUaW1lIGFzIGZsb2F0aW5nLXBvaW5nIG51bWJlciAq LworCisjZGVmaW5lIFZOX0ZUUF9DICAyMDMgICAgICAgICAgICAgICAgICAgLyogRlRQIFJlcGx5 IENvZGUgKi8KKyNkZWZpbmUgVk5fRlRQX00gIDIwNCAgICAgICAgICAgICAgICAgICAvKiBGVFAg UmVwbHkgTWVzc2FnZSAqLworI2RlZmluZSBWTl9GVFBfUyAgMjA1CQkJLyogRlRQIFNlcnZlciB0 eXBlICovCisjZGVmaW5lIFZOX0ZUUF9IICAyMDYJCQkvKiBGVFAgSG9zdCAqLworI2RlZmluZSBW Tl9GVFBfWCAgMjA3CQkJLyogRlRQIENvbm5lY3RlZCAqLworI2RlZmluZSBWTl9GVFBfTCAgMjA4 CQkJLyogRlRQIExvZ2dlZCBpbiAqLworI2RlZmluZSBWTl9GVFBfRyAgMjA5CQkJLyogRlRQIEdF VC1QVVQtUkVNT1RFIHNldHRpbmcgKi8KKworI2RlZmluZSBWTl9TRUNVUkUgMjEwICAgICAgICAg ICAgICAgICAgIC8qIEVuY3J5cHRlZCBjb25uZWN0aW9uIDAgb3IgMSAqLworCisjZGVmaW5lIFZO X0RNX0hGICAyMTEJCQkvKiBEaWFsIE1vZGlmaWVyOiBIb29rIEZsYXNoICovCisjZGVmaW5lIFZO X0RNX1dCICAyMTIJCQkvKiBEaWFsIE1vZGlmaWVyOiBXYWl0IGZvciBCb25nICovCisjZGVmaW5l IFZOX0NYX1NUQSAyMTMJCQkvKiBDWF9TVEFUVVMgKi8KKworI2RlZmluZSBWTl9GVFBfQiAgMjE0 ICAgICAgICAgICAgICAgICAgIC8qIEZUUCBDUEwgKi8KKyNkZWZpbmUgVk5fRlRQX0QgIDIxNSAg ICAgICAgICAgICAgICAgICAvKiBGVFAgRFBMICovCisjZGVmaW5lIFZOX0ZUUF9aICAyMTYgICAg ICAgICAgICAgICAgICAgLyogRlRQIFNFQ1VSSVRZICovCisjZGVmaW5lIFZOX0hUVFBfQyAyMTcg ICAgICAgICAgICAgICAgICAgLyogSFRUUCBDb2RlICovCisjZGVmaW5lIFZOX0hUVFBfTiAyMTgg ICAgICAgICAgICAgICAgICAgLyogSFRUUCBDb25uZWN0ZWQgKi8KKyNkZWZpbmUgVk5fSFRUUF9I IDIxOSAgICAgICAgICAgICAgICAgICAvKiBIVFRQIEhvc3QgKi8KKyNkZWZpbmUgVk5fSFRUUF9N IDIyMCAgICAgICAgICAgICAgICAgICAvKiBIVFRQIE1lc3NhZ2UgKi8KKyNkZWZpbmUgVk5fSFRU UF9TIDIyMSAgICAgICAgICAgICAgICAgICAvKiBIVFRQIFNlY3VyaXR5ICovCisKKyNkZWZpbmUg Vk5fTk9XICAgIDIyMgkJCS8qIFRpbWVzdGFtcCB5eXl5bW1kZCBoaDptbTpzcyAqLworI2RlZmlu ZSBWTl9IT1VSICAgMjIzCQkJLyogQ3VycmVudCBob3VyIG9mIHRoZSBkYXkgMC0yMyAqLworCisj ZGVmaW5lIFZOX0NJX0RBICAyMjQJCQkvKiBDYWxsZXIgSUQgZGF0ZSAqLworI2RlZmluZSBWTl9D SV9USSAgMjI1CQkJLyogQ2FsbGVyIElEIHRpbWUgKi8KKyNkZWZpbmUgVk5fQ0lfTkEgIDIyNgkJ CS8qIENhbGxlciBJRCBuYW1lICovCisjZGVmaW5lIFZOX0NJX05VICAyMjcJCQkvKiBDYWxsZXIg SUQgbnVtYmVyICovCisjZGVmaW5lIFZOX0NJX01FICAyMjgJCQkvKiBDYWxsZXIgSUQgbWVzc2Fn ZSAqLworI2RlZmluZSBWTl9QRVJTT05BTCAyMjkgICAgICAgICAgICAgICAgIC8qIFBlcnNvbmFs IERpcmVjdG9yeSBvbiBXaW5kb3dzICovCisjZGVmaW5lIFZOX0FQUERBVEEgIDIzMCAgICAgICAg ICAgICAgICAgLyogVXNlciBBcHBEYXRhIGRpcmVjdG9yeSAqLworI2RlZmluZSBWTl9DT01NT04g ICAyMzEgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBBcHBEYXRhIGRpcmVjdG9yeSAqLworI2Rl ZmluZSBWTl9ERVNLVE9QICAyMzIgICAgICAgICAgICAgICAgIC8qIFVzZXIgRGVza3RvcCBkaXJl Y3RvcnkgKi8KKyNkZWZpbmUgVk5fVE5DX1NJRyAgMjMzICAgICAgICAgICAgICAgICAvKiBSRkMg MjcxNyBTaWduYXR1cmUgKi8KKworI2lmZGVmIEtVSQorI2RlZmluZSBWTl9HVUlfWFAgICAyMzQg ICAgICAgICAgICAgICAgIC8qIEdVSSBXaW5kb3cgWCBwb3NpdGlvbiAqLworI2RlZmluZSBWTl9H VUlfWVAgICAyMzUgICAgICAgICAgICAgICAgIC8qIEdVSSBXaW5kb3cgWSBwb3NpdGlvbiAqLwor I2RlZmluZSBWTl9HVUlfWFIgICAyMzYgICAgICAgICAgICAgICAgIC8qIEdVSSBXaW5kb3cgWCBy ZXNvbHV0aW9uICovCisjZGVmaW5lIFZOX0dVSV9ZUiAgIDIzNyAgICAgICAgICAgICAgICAgLyog R1VJIFdpbmRvdyBZIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgVk5fR1VJX1JVTiAgMjM4ICAgICAg ICAgICAgICAgICAvKiBHVUkgV2luZG93IFJ1biBtb2RlICovCisjZGVmaW5lIFZOX0dVSV9GTk0g IDIzOSAgICAgICAgICAgICAgICAgLyogR1VJIFdpbmRvdyBGb250IE5hbWUgKi8KKyNkZWZpbmUg Vk5fR1VJX0ZTWiAgMjQwICAgICAgICAgICAgICAgICAvKiBHVUkgV2luZG93IEZvbnQgU2l6ZSAq LworI2VuZGlmIC8qIEtVSSAqLworCisjZGVmaW5lIFZOX0xPR19QS1QgIDI0MSAgICAgICAgICAg ICAgICAgLyogUGFja2V0IExvZyBGaWxlbmFtZSAqLworI2RlZmluZSBWTl9MT0dfVFJBICAyNDIg ICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIExvZyBGaWxlbmFtZSAqLworI2RlZmluZSBW Tl9MT0dfU0VTICAyNDMgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24gTG9nIEZpbGVuYW1lICov CisjZGVmaW5lIFZOX0xPR19ERUIgIDI0NCAgICAgICAgICAgICAgICAgLyogRGVidWcgTG9nIEZp bGVuYW1lICovCisjZGVmaW5lIFZOX0xPR19DT04gIDI0NSAgICAgICAgICAgICAgICAgLyogQ29u bmVjdGlvbiBMb2cgRmlsZW5hbWUgKi8KKworI2RlZmluZSBWTl9JU0NBTEUgICAyNDYJCQkvKiBJ TlBVVCBzY2FsZSBmYWN0b3IgKi8KKyNkZWZpbmUgVk5fQklUUyAgICAgMjQ3CQkJLyogQml0cyBv ZiB0aGlzIGJ1aWxkICgxNiwgMzIsIDY0KSAqLworI2RlZmluZSBWTl9MQVNURklMICAyNDgJCQkv KiBMYXN0IGlucHV0IGZpbGVzcGVjICovCisjZGVmaW5lIFZOX0xBU1RLV1YgIDI0OQkJCS8qIExh c3QgXGZrZXl3b3JkdmFsdWUoKSBrZXl3b3JkICovCisjZGVmaW5lIFZOX0RNU0cgICAgIDI1MAkJ CS8qIE1zZyBjb3JyZXNwb25kaW5nIHRvIGRpYWxzdGF0dXMgKi8KKyNkZWZpbmUgVk5fSE9TVElQ ICAgMjUxCQkJLyogSVAgYWRkcmVzcyBvZiByZW1vdGUgaG9zdCAqLworI2RlZmluZSBWTl9JTlBN U0cgICAyNTIJCQkvKiBNc2cgY29ycmVzcG9uZGluZyB0byBpbnN0YXR1cyAqLworI2RlZmluZSBW Tl9WQVJFVkFMICAyNTMJCQkvKiBTRVQgVkFSSUFCTEUtRVZBTFVBVElPTiBzZXR0aW5nICovCisj ZGVmaW5lIFZOX1BSRVZDTUQgIDI1NAkJCS8qIFByZXZpb3VzIGNvbW1hbmQgKi8KKyNlbmRpZiAv KiBOT1NQTCAqLworCisvKiBJTlBVVCBzdGF0dXMgdmFsdWVzICovCisKKyNkZWZpbmUgSU5QX09L ICAwCQkJLyogU3VjY2VlZGVkICovCisjZGVmaW5lIElOUF9UTyAgMQkJCS8qIFRpbWVkIG91dCAq LworI2RlZmluZSBJTlBfVUkgIDIJCQkvKiBVc2VyIGludGVycnVwdGVkICovCisjZGVmaW5lIElO UF9JRSAgMwkJCS8qIEludGVybmFsIGVycm9yICovCisjZGVmaW5lIElOUF9JTyAgNAkJCS8qIEkv TyBlcnJvciBvciBjb25uZWN0aW9uIGxvc3QgKi8KKyNkZWZpbmUgSU5QX0lLUyA1ICAgICAgICAg ICAgICAgICAgICAgICAvKiBLZXJtaXQgU2VydmVyIEFjdGl2ZSAqLworI2RlZmluZSBJTlBfQkYg IDYJCQkvKiBCdWZmZXIgZnVsbCAqLworCisvKiBJTlBVVCBzd2l0Y2ggdmFsdWVzICovCisKKyNk ZWZpbmUgSU5QU1dfTk9NIDEJCQkvKiAvTk9NQVRDSCAqLworI2RlZmluZSBJTlBTV19DTFIgMgkJ CS8qIC9DTEVBUiAqLworI2RlZmluZSBJTlBTV19OT1cgNAkJCS8qIC9OT1dSQVAgKi8KKyNkZWZp bmUgSU5QU1dfQ09VIDgJCQkvKiAvQ09VTlQgKi8KKworI2lmbmRlZiBOT1NQTAorLyogU3ltYm9s cyBmb3IgYnVpbHRpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBGTkFSR1MgNgkJCS8qIE1heGlt dW0gbnVtYmVyIG9mIGZ1bmN0aW9uIGFyZ3MgKi8KKworI2RlZmluZSBGTl9JTkQgICAgICAwCQkJ LyogSW5kZXggKG9mIHN0cmluZyAxIGluIHN0cmluZyAyKSAqLworI2RlZmluZSBGTl9MRU4gICAg ICAxCQkJLyogTGVuZ3RoIChvZiBzdHJpbmcpICovCisjZGVmaW5lIEZOX0xJVCAgICAgIDIJCQkv KiBMaXRlcmFsIChkb24ndCBleHBhbmQgdGhlIHN0cmluZykgKi8KKyNkZWZpbmUgRk5fTE9XICAg ICAgMwkJCS8qIExvd2VyIChjb252ZXJ0IHRvIGxvd2VyY2FzZSkgKi8KKyNkZWZpbmUgRk5fTUFY ICAgICAgNAkJCS8qIE1heCAobWF4aW11bSkgKi8KKyNkZWZpbmUgRk5fTUlOICAgICAgNQkJCS8q IE1pbiAobWluaW11bSkgKi8KKyNkZWZpbmUgRk5fTU9EICAgICAgNgkJCS8qIE1vZCAobW9kdWx1 cykgKi8KKyNkZWZpbmUgRk5fRVZBICAgICAgNwkJCS8qIEV2YWwgKGV2YWx1YXRlIGFyaXRoIGV4 cHJlc3Npb24pICovCisjZGVmaW5lIEZOX1NVQiAgICAgIDgJCQkvKiBTdWJzdHIgKHN1YnN0cmlu ZykgKi8KKyNkZWZpbmUgRk5fVVBQICAgICAgOQkJCS8qIFVwcGVyIChjb252ZXJ0IHRvIHVwcGVy Y2FzZSkgKi8KKyNkZWZpbmUgRk5fUkVWICAgICAgMTAJCQkvKiBSZXZlcnNlIChhIHN0cmluZykg Ki8KKyNkZWZpbmUgRk5fUkVQICAgICAgMTEJCQkvKiBSZXBlYXQgKGEgc3RyaW5nKSAqLworI2Rl ZmluZSBGTl9FWEUgICAgICAxMgkJCS8qIEV4ZWN1dGUgKGEgbWFjcm8pICovCisjZGVmaW5lIEZO X1ZBTCAgICAgIDEzCQkJLyogUmV0dXJuIHZhbHVlIChvZiBhIG1hY3JvKSAqLworI2RlZmluZSBG Tl9MUEEgICAgICAxNAkJCS8qIExQQUQgKGxlZnQgcGFkKSAqLworI2RlZmluZSBGTl9SUEEgICAg ICAxNQkJCS8qIFJQQUQgKHJpZ2h0IHBhZCkgKi8KKyNkZWZpbmUgRk5fREVGICAgICAgMTYJCQkv KiBEZWZpbml0aW9uIG9mIGEgbWFjcm8sIHVuZXhwYW5kZWQgKi8KKyNkZWZpbmUgRk5fQ09OICAg ICAgMTcJCQkvKiBDb250ZW50cyBvZiBhIHZhcmlhYmxlLCBkaXR0byAqLworI2RlZmluZSBGTl9G SUwgICAgICAxOAkJCS8qIEZpbGUgbGlzdCAqLworI2RlZmluZSBGTl9GQyAgICAgICAxOQkJCS8q IEZpbGUgY291bnQgKi8KKyNkZWZpbmUgRk5fQ0hSICAgICAgMjAJCQkvKiBDaGFyYWN0ZXIgKGxp a2UgQkFTSUMgQ0hSJCgpKSAqLworI2RlZmluZSBGTl9SSUcgICAgICAyMQkJCS8qIFJpZ2h0IChs aWtlIEJBU0lDIFJJR0hUJCgpKSAqLworI2RlZmluZSBGTl9DT0QgICAgICAyMgkJCS8qIENvZGUg dmFsdWUgb2YgY2hhcmFjdGVyICovCisjZGVmaW5lIEZOX1JQTCAgICAgIDIzCQkJLyogUmVwbGFj ZSAqLworI2RlZmluZSBGTl9GRCAgICAgICAyNAkJCS8qIEZpbGUgZGF0ZSAqLworI2RlZmluZSBG Tl9GUyAgICAgICAyNQkJCS8qIEZpbGUgc2l6ZSAqLworI2RlZmluZSBGTl9SSVggICAgICAyNgkJ CS8qIFJpbmRleCAoaW5kZXggZnJvbSByaWdodCkgKi8KKyNkZWZpbmUgRk5fVkVSICAgICAgMjcJ CQkvKiBWZXJpZnkgKi8KKyNkZWZpbmUgRk5fSVBBICAgICAgMjgJCQkvKiBGaW5kIGFuZCByZXR1 cm4gSVAgYWRkcmVzcyAqLworI2RlZmluZSBGTl9DUlkgICAgICAzOQkJCS8qIC4uLiAqLworI2Rl ZmluZSBGTl9PT1ggICAgICA0MAkJCS8qIC4uLiAqLworI2RlZmluZSBGTl9IRVggICAgICA0MQkJ CS8qIEhleGlmeSAqLworI2RlZmluZSBGTl9VTkggICAgICA0MgkJCS8qIFVuaGV4aWZ5ICovCisj ZGVmaW5lIEZOX0JSSyAgICAgIDQzCQkJLyogQnJlYWsgKi8KKyNkZWZpbmUgRk5fU1BOICAgICAg NDQJCQkvKiBTcGFuICovCisjZGVmaW5lIEZOX1RSTSAgICAgIDQ1CQkJLyogVHJpbSAqLworI2Rl ZmluZSBGTl9MVFIgICAgICA0NgkJCS8qIExlZnQtVHJpbSAqLworI2RlZmluZSBGTl9DQVAgICAg ICA0NwkJCS8qIENhcGl0YWxpemUgKi8KKyNkZWZpbmUgRk5fVE9EICAgICAgNDgJCQkvKiBUaW1l LW9mLWRheS10by1zZWNzLXNpbmNlLW1pZG5pdGUgKi8KKyNkZWZpbmUgRk5fU0VDICAgICAgNDkJ CQkvKiBTZWNzLXNpbmNlLW1pZG5pdGUtdG8tdGltZS1vZi1kYXkgKi8KKyNkZWZpbmUgRk5fRkZO ICAgICAgNTAJCQkvKiBGdWxsIGZpbGUgbmFtZSAqLworI2RlZmluZSBGTl9DSEsgICAgICA1MQkJ CS8qIENoZWNrc3VtIG9mIHRleHQgKi8KKyNkZWZpbmUgRk5fQ1JDICAgICAgNTIJCQkvKiBDUkMt MTYgb2YgdGV4dCAqLworI2RlZmluZSBGTl9CU04gICAgICA1MwkJCS8qIEJhc2VuYW1lIG9mIGZp bGUgKi8KKyNkZWZpbmUgRk5fQ01EICAgICAgNTQJCQkvKiBPdXRwdXQgb2YgYSBjb21tYW5kIChj b29rZWQpICovCisjZGVmaW5lIEZOX1JBVyAgICAgIDU1CQkJLyogT3V0cHV0IG9mIGEgY29tbWFu ZCAocmF3KSAqLworI2RlZmluZSBGTl9TVFggICAgICA1NgkJCS8qIFN0cmlwIGZyb20gcmlnaHQg Ki8KKyNkZWZpbmUgRk5fU1RMICAgICAgNTcJCQkvKiBTdHJpcCBmcm9tIGxlZnQgKi8KKyNkZWZp bmUgRk5fU1ROICAgICAgNTgJCQkvKiBTdHJpcCBuIGNoYXJzICovCisjZGVmaW5lIEZOX1NDUk5f Q1ggIDU5CQkJLyogU2NyZWVuIEN1cnNvciBYIFBvcyAqLworI2RlZmluZSBGTl9TQ1JOX0NZICA2 MAkJCS8qIFNjcmVlbiBDdXJzb3IgWSBQb3MgKi8KKyNkZWZpbmUgRk5fU0NSTl9TVFIgNjEJCQkv KiBTY3JlZW4gU3RyaW5nICovCisjZGVmaW5lIEZOXzJIRVggICAgIDYyCQkJLyogTnVtYmVyIChu b3Qgc3RyaW5nKSB0byBoZXggKi8KKyNkZWZpbmUgRk5fMk9DVCAgICAgNjMJCQkvKiBOdW1iZXIg KG5vdCBzdHJpbmcpIHRvIG9jdGFsICovCisjZGVmaW5lIEZOX1JGSUwgICAgIDY0CQkJLyogUmVj dXJzaXZlIGZpbGUgbGlzdCAqLworI2RlZmluZSBGTl9ESVIgICAgICA2NQkJCS8qIERpcmVjdG9y eSBsaXN0ICovCisjZGVmaW5lIEZOX1JESVIgICAgIDY2CQkJLyogUmVjdXJzaXZlIGRpcmVjdG9y eSBsaXN0ICovCisjZGVmaW5lIEZOX0ROQU0gICAgIDY3CQkJLyogRGlyZWN0b3J5IHBhcnQgb2Yg ZmlsZW5hbWUgKi8KKyNkZWZpbmUgRk5fUkFORCAgICAgNjgJCQkvKiBSYW5kb20gbnVtYmVyICov CisjZGVmaW5lIEZOX1dPUkQgICAgIDY5CQkJLyogV29yZCBleHRyYWN0aW9uICovCisjZGVmaW5l IEZOX1NQTElUICAgIDcwCQkJLyogU3BsaXQgc3RyaW5nIGludG8gd29yZHMgKi8KKyNkZWZpbmUg Rk5fS1JCX1RLICAgNzEJCQkvKiBLZXJiZXJvcyB0aWNrZXRzICovCisjZGVmaW5lIEZOX0tSQl9O WCAgIDcyCQkJLyogS2VyYmVyb3MgbmV4dCB0aWNrZXQgKi8KKyNkZWZpbmUgRk5fS1JCX0lWICAg NzMJCQkvKiBLZXJiZXJvcyB0aWNrZXQgaXMgdmFsaWQgKi8KKyNkZWZpbmUgRk5fS1JCX1RUICAg NzQJCQkvKiBLZXJiZXJvcyB0aWNrZXQgdGltZSAqLworI2RlZmluZSBGTl9FUlJNU0cgICA3NQkJ CS8qIEVycm9yIGNvZGUgdG8gbWVzc2FnZSAqLworCisjaWZuZGVmIFVOSVgKKyNpZm5kZWYgVk1T CisjdW5kZWYgRk5fRVJSTVNHCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVU5JWCAqLwor CisjZGVmaW5lIEZOX0RJTSAgICAgIDc2CQkJLyogRGltZW5zaW9uIG9mIGFycmF5ICovCisjZGVm aW5lIEZOX0RUSU0gICAgIDc3CQkJLyogQ29udmVydCB0byBzdGFuZGFyZCBkYXRlL3RpbWUgKi8K KyNkZWZpbmUgRk5fSkRBVEUgICAgNzgJCQkvKiBSZWd1bGFyIGRhdGUgdG8gZGF5IG9mIHllYXIg Ki8KKyNkZWZpbmUgRk5fUE5DVlQgICAgNzkJCQkvKiBDb252ZXJ0IHBob25lIG51bWJlciBmb3Ig ZGlhbGluZyAqLworI2RlZmluZSBGTl9EQVRFSiAgICA4MAkJCS8qIERheSBvZiB5ZWFyIHRvIGRh dGUgKi8KKyNkZWZpbmUgRk5fTUpEICAgICAgODEJCQkvKiBEYXRlIHRvIG1vZGlmaWVkIEp1bGlh biBkYXRlICovCisjZGVmaW5lIEZOX01KRDIgICAgIDgyCQkJLyogTW9kaWZpZWQgSnVsaWFuIGRh dGUgdG8gZGF0ZSAqLworI2RlZmluZSBGTl9EQVkgICAgICA4MwkJCS8qIERheSBvZiB3ZWVrIG9m IGdpdmVuIGRhdGUgKi8KKyNkZWZpbmUgRk5fTkRBWSAgICAgODQJCQkvKiBOdW1lcmljIGRheSBv ZiB3ZWVrIG9mIGdpdmVuIGRhdGUgKi8KKyNkZWZpbmUgRk5fVElNRSAgICAgODUJCQkvKiBDb252 ZXJ0IHRvIGhoOm1tOnNzICovCisjZGVmaW5lIEZOX05USU0gICAgIDg2CQkJLyogQ29udmVydCB0 byBzZWNvbmRzIHNpbmNlIG1pZG5pdGUgKi8KKyNkZWZpbmUgRk5fTjJUSU0gICAgODcJCQkvKiBT ZWMgc2luY2UgbWlkbml0ZSB0byBoaDptbTpzcyAqLworI2RlZmluZSBGTl9QRVJNICAgICA4OAkJ CS8qIFBlcm1pc3Npb25zIG9mIGZpbGUgKi8KKyNkZWZpbmUgRk5fS1JCX0ZHICAgODkJCQkvKiBL ZXJiZXJvcyBUaWNrZXQgRmxhZ3MgKi8KKyNkZWZpbmUgRk5fU0VBUkNIICAgOTAJCQkvKiBTZWFy Y2ggZm9yIHBhdHRlcm4gaW4gc3RyaW5nICovCisjZGVmaW5lIEZOX1JTRUFSQ0ggIDkxCQkJLyog RGl0dG8sIGJ1dCByaWdodCB0byBsZWZ0ICovCisjZGVmaW5lIEZOX1hMQVRFICAgIDkyCQkJLyog VHJhbnNsYXRlIHN0cmluZyBjaGFyc2V0ICovCisjZGVmaW5lIEZOX0FMT09LICAgIDkzCQkJLyog QXJyYXkgbG9va3VwICovCisjZGVmaW5lIEZOX1RMT09LICAgIDk0CQkJLyogVGFibGUgbG9va3Vw ICovCisjZGVmaW5lIEZOX1RPQjY0ICAgIDk1CQkJLyogRW5jb2RlIGludG8gQmFzZTY0ICovCisj ZGVmaW5lIEZOX0ZNQjY0ICAgIDk2CQkJLyogRGVjb2RlIGZyb20gQmFzZTY0ICovCisKKyNkZWZp bmUgRk5fQUJTICAgICAgOTcJCQkvKiBBYnNvbHV0ZSB2YWx1ZSAqLworCisjaWZkZWYgQ0tGTE9B VAorI2RlZmluZSBGTl9GUEFERCAgICA5OAkJCS8qIEZsb2F0aW5nLXBvaW50IGFkZCAqLworI2Rl ZmluZSBGTl9GUFNVQiAgICA5OQkJCS8qIEZsb2F0aW5nLXBvaW50IHN1YnN0cmFjdCAqLworI2Rl ZmluZSBGTl9GUE1VTCAgIDEwMAkJCS8qIEZsb2F0aW5nLXBvaW50IG11bHRpcGx5ICovCisjZGVm aW5lIEZOX0ZQRElWICAgMTAxCQkJLyogRmxvYXRpbmctcG9pbnQgZGl2aWRlICovCisjZGVmaW5l IEZOX0ZQRVhQICAgMTAyCQkJLyogRmxvYXRpbmctcG9pbnQgZSB0byB0aGUgeCAqLworI2RlZmlu ZSBGTl9GUExOICAgIDEwMwkJCS8qIEZsb2F0aW5nLXBvaW50IG5hdHVyYWwgbG9nICovCisjZGVm aW5lIEZOX0ZQTE9HICAgMTA0CQkJLyogRmxvYXRpbmctcG9pbnQgYmFzZS0xMCBsb2cgKi8KKyNk ZWZpbmUgRk5fRlBQT1cgICAxMDUJCQkvKiBGbG9hdGluZy1wb2ludCByYWlzZSB0byBwb3dlciAq LworI2RlZmluZSBGTl9GUFNRUiAgIDEwNgkJCS8qIEZsb2F0aW5nLXBvaW50IHNxdWFyZSByb290 ICovCisjZGVmaW5lIEZOX0ZQQUJTICAgMTA3CQkJLyogRmxvYXRpbmctcG9pbnQgYWJzb2x1dGUg dmFsdWUgKi8KKyNkZWZpbmUgRk5fRlBNT0QgICAxMDgJCQkvKiBGbG9hdGluZy1wb2ludCBtb2R1 bHVzICovCisjZGVmaW5lIEZOX0ZQTUFYICAgMTA5CQkJLyogRmxvYXRpbmctcG9pbnQgbWF4aW11 bSAqLworI2RlZmluZSBGTl9GUE1JTiAgIDExMAkJCS8qIEZsb2F0aW5nLXBvaW50IG1pbmltdW0q LworI2RlZmluZSBGTl9GUElOVCAgIDExMQkJCS8qIEZsb2F0aW5nLXBvaW50IHRvIGludGVnZXIg Ki8KKyNkZWZpbmUgRk5fRlBST1UgICAxMTIJCQkvKiBGbG9hdGluZy1wb2ludCByb3VuZCAqLwor I2RlZmluZSBGTl9GUFNJTiAgIDExMwkJCS8qIEZQIHNpbmUgKi8KKyNkZWZpbmUgRk5fRlBDT1Mg ICAxMTQJCQkvKiBGUCBjb3NpbmUgKi8KKyNkZWZpbmUgRk5fRlBUQU4gICAxMTUJCQkvKiBGUCB0 YW5nZW50ICovCisjZW5kaWYgLyogQ0tGTE9BVCAqLworCisjaWZkZWYgQ0tDSEFOTkVMSU8KKyNk ZWZpbmUgRk5fRlNUQVQgICAxMTYJCQkvKiBGaWxlIHN0YXR1cyAqLworI2RlZmluZSBGTl9GUE9T ICAgIDExNwkJCS8qIEZpbGUgcG9zaXRpb24gKi8KKyNkZWZpbmUgRk5fRkVPRiAgICAxMTgJCQkv KiBGaWxlIGVvZiAqLworI2RlZmluZSBGTl9GSUxOTyAgIDExOQkJCS8qIEZpbGUgbnVtYmVyIC8g aGFuZGxlICovCisjZGVmaW5lIEZOX0ZHQ0hBUiAgMTIwCQkJLyogRmlsZSBnZXRjaGFyICovCisj ZGVmaW5lIEZOX0ZHTElORSAgMTIxCQkJLyogRmlsZSBnZXRsaW5lICovCisjZGVmaW5lIEZOX0ZH QkxLICAgMTIyCQkJLyogRmlsZSBnZXRibG9jayAqLworI2RlZmluZSBGTl9GUENIQVIgIDEyMwkJ CS8qIEZpbGUgcHV0Y2hhciAqLworI2RlZmluZSBGTl9GUExJTkUgIDEyNAkJCS8qIEZpbGUgcHV0 bGluZSAqLworI2RlZmluZSBGTl9GUEJMSyAgIDEyNQkJCS8qIEZpbGUgcHV0YmxvY2sgKi8KKyNk ZWZpbmUgRk5fTkxJTkUgICAxMjYJCQkvKiBGaWxlIGdldCBjdXJyZW50IGxpbmUgbnVtYmVyICov CisjZGVmaW5lIEZOX0ZFUk1TRyAgMTI3CQkJLyogRmlsZSBlcnJvciBtZXNzYWdlICovCisjZW5k aWYgLyogQ0tDSEFOTkVMSU8gKi8KKworI2RlZmluZSBGTl9MRUYgICAgIDEyOAkJCS8qIExlZnQg KD0gc3Vic3RyIHN0YXJ0aW5nIG9uIGxlZnQpICovCisjZGVmaW5lIEZOX0FBRFVNUCAgMTI5CQkJ LyogQXNzb2NpYXRpdmUgQXJyYXkgRHVtcCAqLworI2RlZmluZSBGTl9TVEIgICAgIDEzMAkJCS8q IFxmc3RyaXBiKCkgICovCisjZGVmaW5lIEZOX1BBVFRFUk4gMTMxCQkJLyogXGZwYXR0ZXJuKCkg Ki8KKyNkZWZpbmUgRk5fSEVYMk4gICAxMzIJCQkvKiBcZmhleHRvbigpICAqLworI2RlZmluZSBG Tl9PQ1QyTiAgIDEzMwkJCS8qIFxmb2N0dG9uKCkgICovCisjZGVmaW5lIEZOX0hFWDJJUCAgMTM0 CQkJLyogXGZoZXh0b2lwKCkgKi8KKyNkZWZpbmUgRk5fSVAySEVYICAxMzUJCQkvKiBcZmlwdG9o ZXgoKSAqLworI2RlZmluZSBGTl9SQURJWCAgIDEzNgkJCS8qIFxmcmFkaXgoKSAgICovCisjZGVm aW5lIEZOX0pPSU4gICAgMTM3CQkJLyogXGZqb2luKCkgICAgKi8KKyNkZWZpbmUgRk5fU1VCU1Qg ICAxMzgJCQkvKiBcZnN1YnN0aXR1dGUoKSAqLworI2RlZmluZSBGTl9TRVhQICAgIDEzOQkJCS8q IFxmc2V4cHJlc3Npb24oKSAqLworI2RlZmluZSBGTl9DTURTVEsgIDE0MAkJCS8qIFxmY21kc3Rh Y2soKSAqLworI2RlZmluZSBGTl9UT0dNVCAgIDE0MQkJCS8qIFxmdG9nbXQoKSAqLworI2RlZmlu ZSBGTl9DTVBEQVRFIDE0MgkJCS8qIFxmY21wZGF0ZXMoKSAqLworI2RlZmluZSBGTl9ESUZEQVRF IDE0MwkJCS8qIFxmZGlmZmRhdGVzKCkgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyNkZWZpbmUgRk5f SFNUQUREICAxNDQJCQkvKiBcZmFkZHIybmFtZSgpICovCisjZGVmaW5lIEZOX0hTVE5BTSAgMTQ1 CQkJLyogXGZuYW1lMmFkZHIoKSAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2RlZmluZSBG Tl9ERUxTRUMgIDE0NgkJCS8qIFxmZGVsdGEyc2VjKCkgKi8KKyNkZWZpbmUgRk5fUENfRFUgICAx NDcJCQkvKiBQYXRoIGNvbnZlcnNpb24gRE9TIHRvIFVuaXggKi8KKyNkZWZpbmUgRk5fUENfVlUg ICAxNDgJCQkvKiBQYXRoIGNvbnZlcnNpb24gVk1TIHRvIFVuaXggKi8KKyNkZWZpbmUgRk5fUENf VUQgICAxNDkJCQkvKiBQYXRoIGNvbnZlcnNpb24gVW5peCB0byBET1MgKi8KKyNkZWZpbmUgRk5f UENfVVYgICAxNTAJCQkvKiBQYXRoIGNvbnZlcnNpb24gVW5peCB0byBWTVMgKi8KKyNkZWZpbmUg Rk5fS1dWQUwgICAxNTEJCQkvKiBcZmtleXdvcmR2YWx1ZSgpICovCisjZGVmaW5lIEZOX1NMRUVQ ICAgMTUyCQkJLyogXGZzbGVlcCgpICovCisjZGVmaW5lIEZOX01TTEVFUCAgMTUzCQkJLyogXGZt c2xlZXAoKSAqLworI2RlZmluZSBGTl9MTkFNRSAgIDE1NAkJCS8qIFxmTG9uZ1BhdGhOYW1lKCkg KFdpbmRvd3MpICovCisjZGVmaW5lIEZOX1NOQU1FICAgMTU1CQkJLyogXGZTaG9ydFBhdGhOYW1l KCkgKFdpbmRvd3MpICovCisjZGVmaW5lIEZOX1VOVEFCICAgMTU2CQkJLyogXGZ1bnRhYmlmeSgp ICovCisjZGVmaW5lIEZOX0xPUFggICAgMTU3CQkJLyogXGZsb3B4KCkgKi8KKyNkZWZpbmUgRk5f RU1BSUwgICAxNTgJCQkvKiBcZmVtYWlsYWRkcmVzcygpICovCisjZGVmaW5lIEZOX1BJQ1RVUkUg MTU5CQkJLyogXGZwaWN0dXJlaW5mbygpICovCisjZGVmaW5lIEZOX1BJRCAgICAgMTYwCQkJLyog XGZwaWRpbmZvKCkgKi8KKyNkZWZpbmUgRk5fQ09VTlQgICAxNjEJCQkvKiBcZmNvdW50KCkgKi8K KyNkZWZpbmUgRk5fRlVOQyAgICAxNjIJCQkvKiBcZmZ1bmN0aW9uKCkgKi8KKyNkZWZpbmUgRk5f UkVDVVJTRSAxNjMJCQkvKiBcZnJlY3Vyc2UoKSAqLworI2RlZmluZSBGTl9TUVVFRVpFIDE2NAkJ CS8qIFxmc3F1ZWV6ZSgpICovCisjZGVmaW5lIEZOX1VOUENUICAgMTY1CQkJLyogXGZkZWNvZGVo ZXgoKSAqLworI2RlZmluZSBGTl9TVFJJTkdUIDE2NgkJCS8qIFxmc3RyaW5ndHlwZSgpICovCisj ZGVmaW5lIEZOX1NUUkNNUCAgMTY3CQkJLyogXGZzdHJjbXAoKSAqLworCisjZW5kaWYgLyogTk9T UEwgKi8KKworLyogVGltZSBVbml0cyAqLworCisjZGVmaW5lIFRVX0RBWVMgICAwCisjZGVmaW5l IFRVX1dFRUtTICAxCisjZGVmaW5lIFRVX01PTlRIUyAyCisjZGVmaW5lIFRVX1lFQVJTICAzCisK KyNpZmRlZiBDS19DVVJTRVMKKy8qIFNjcmVlbiBsaW5lIG51bWJlcnMgZm9yIGZ1bGxzY3JlZW4g ZmlsZS10cmFuc2ZlciBkaXNwbGF5ICovCisKKyNkZWZpbmUgQ1dfQkFOICAwCQkJLyogQ3Vyc2Vz IFdpbmRvdyBCYW5uZXIgKi8KKyNkZWZpbmUgQ1dfRElSICAyCQkJLyogQ3VycmVudCBkaXJlY3Rv cnkgKi8KKyNkZWZpbmUgQ1dfTElOICAzCQkJLyogQ29tbXVuaWNhdGlvbiBkZXZpY2UgKi8KKyNk ZWZpbmUgQ1dfU1BEICA0CQkJLyogQ29tbXVuaWNhdGlvbiBzcGVlZCAqLworI2RlZmluZSBDV19Q QVIgIDUJCQkvKiBQYXJpdHkgKi8KKyNkZWZpbmUgQ1dfVE1PICA2CisjZGVmaW5lIENXX05BTSAg NwkJCS8qIEZpbGVuYW1lICovCisjZGVmaW5lIENXX1RZUCAgOAkJCS8qIEZpbGUgdHlwZSAqLwor I2RlZmluZSBDV19TSVogIDkJCQkvKiBGaWxlIHNpemUgKi8KKyNkZWZpbmUgQ1dfUENEIDEwCQkJ LyogUGVyY2VudCBkb25lICovCisKKyNpZm5kZWYgQ0tfUENUX0JBUgorI2RlZmluZSBDV19UUiAg MTEJCQkvKiBUaW1lIHJlbWFpbmluZyAqLworI2RlZmluZSBDV19DUCAgMTIJCQkvKiBDaGFyYWN0 ZXJzIHBlciBzZWNvbmQgKi8KKyNkZWZpbmUgQ1dfV1MgIDEzCQkJLyogV2luZG93IHNsb3RzICov CisjZGVmaW5lIENXX1BUICAxNAkJCS8qIFBhY2tldCB0eXBlICovCisjZGVmaW5lIENXX1BDICAx NQkJCS8qIFBhY2tldCBjb3VudCAqLworI2RlZmluZSBDV19QTCAgMTYJCQkvKiBQYWNrZXQgbGVu Z3RoICovCisjZGVmaW5lIENXX1BSICAxNwkJCS8qIFBhY2tldCByZXRyeSAqLworI2lmZGVmIENP TU1FTlQKKyNkZWZpbmUgQ1dfUEIgIDE3CQkJLyogUGFja2V0IGJsb2NrIGNoZWNrICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworI2Vsc2UgLyogQ0tfUENUX0JBUiAqLworI2RlZmluZSBDV19CQVIg MTEJCQkvKiBQZXJjZW50IEJhciBTY2FsZSAqLworI2RlZmluZSBDV19UUiAgMTIJCQkvKiBUaW1l IHJlbWFpbmluZyAqLworI2RlZmluZSBDV19DUCAgMTMJCQkvKiBDaGFycyBwZXIgc2VjICovCisj ZGVmaW5lIENXX1dTICAxNAkJCS8qIFdpbmRvdyBzbG90cyAqLworI2RlZmluZSBDV19QVCAgMTUJ CQkvKiBQYWNrZXQgdHlwZSAqLworI2RlZmluZSBDV19QQyAgMTYJCQkvKiBQYWNrZXQgY291bnQg Ki8KKyNkZWZpbmUgQ1dfUEwgIDE3CQkJLyogUGFja2V0IGxlbmd0aCAqLworI2RlZmluZSBDV19Q UiAgMTgJCQkvKiBQYWNrZXQgcmV0cnkgKi8KKyNpZmRlZiBDT01NRU5UCisjZGVmaW5lIENXX1BC ICAxOAkJCS8qIFBhY2tldCBibG9jayBjaGVjayAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNl bmRpZiAvKiBDS19QQ1RfQkFSICovCisKKyNkZWZpbmUgQ1dfRVJSIDE5CQkJLyogRXJyb3IgbWVz c2FnZSAqLworI2RlZmluZSBDV19NU0cgMjAJCQkvKiBJbmZvIG1lc3NhZ2UgKi8KKyNkZWZpbmUg Q1dfSU5UIDIyCQkJLyogSW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIENXX0ZGQyA5OSAgICAgICAg ICAgICAgICAgICAgICAgLyogRmlsZSBDaGFyYWN0ZXJzIFNlbnQvUmVjZWl2ZWQgKi8KKyNlbmRp ZiAvKiBDS19DVVJTRVMgKi8KKworI2lmbmRlZiBOT0lDUAorLyogU2F2ZSBDb21tYW5kcyAqLwor I2RlZmluZSBYU0tFWSAgIDAJCQkvKiBLZXkgbWFwIGZpbGUgKi8KKyNkZWZpbmUgWFNDTUQgICAx ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIG1vZGUgKi8KKyNkZWZpbmUgWFNURVJN ICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hbCBtb2RlICovCisjZW5kaWYgLyog Tk9JQ1AgKi8KKworI2lmbmRlZiBOT0RJQUwKKy8qIERpYWwgcm91dGluZSBzb3J0IHByaW9yaXRp ZXMgKi8KKyNkZWZpbmUgRE5fSU5URVJOIDAKKyNkZWZpbmUgRE5fRlJFRSAgIDEKKyNkZWZpbmUg RE5fTE9DQUwgIDIKKyNkZWZpbmUgRE5fVU5LICAgIDMKKyNkZWZpbmUgRE5fTE9ORyAgIDQKKyNk ZWZpbmUgRE5fSU5UTCAgIDUKKyNlbmRpZiAvKiBOT0RJQUwgKi8KKworI2lmZGVmIFNTSEJVSUxU SU4KKyNkZWZpbmUgWFNTSF9PUE4gMQorI2RlZmluZSBYU1NIX1YyICAyCisjZGVmaW5lIFhTU0hf RkxQIDMKKyNkZWZpbmUgWFNTSF9GUlAgNAorI2RlZmluZSBYU1NIX0FERCA1CisjZGVmaW5lIFhT U0hfS0VZIDYKKyNkZWZpbmUgWFNTSF9DTFIgNworI2RlZmluZSBYU1NIX0FHVCA4CisKKyNkZWZp bmUgU1NIS1RfMVIgICAwCQkJLyogU1NIIEtFWSBUWVBFIHN5bWJvbHMgKi8KKyNkZWZpbmUgU1NI S1RfMlIgICAxICAgICAgICAgICAgICAgICAgICAvKiBtdXN0IG1hdGNoIHNzaC9rZXkuaCB2YWx1 ZXMgKi8KKyNkZWZpbmUgU1NIS1RfMkQgICAyCisjZGVmaW5lIFNTSEtUX1NSUCAgMworCisjZGVm aW5lIFNTSEtEX0lOICAgMQkJCS8qIFNTSCBLRVkgRElTUExBWSAvSU4tRk9STUFUICovCisjZGVm aW5lIFNTSEtEX09VVCAgMgkJCS8qIFNTSCBLRVkgRElTUExBWSAvT1VULUZPUk1BVCAqLworCisj ZGVmaW5lIFNLREZfT1NTSCAgMQkJCS8qIEtleSBkaXNwbGF5IGZvcm1hdCBPcGVuU1NIICovCisj ZGVmaW5lIFNLREZfU1NIQyAgMgkJCS8qIEtleSBkaXNwbGF5IGZvcm1hdCBTU0guQ09NICovCisj ZGVmaW5lIFNLREZfSUVURiAgMwkJCS8qIEtleSBkaXNwbGF5IGZvcm1hdCBJRVRGICovCisjZGVm aW5lIFNLREZfRklORyAgNAkJCS8qIEtleSBkaXNwbGF5IGZvcm1hdCBGSU5HRVJQUklOVCAqLwor CisjZGVmaW5lIFNTSFNXX1VTUiAxCisjZGVmaW5lIFNTSFNXX1ZFUiAyCisjZGVmaW5lIFNTSFNX X0NNRCAzCisjZGVmaW5lIFNTSFNXX1gxMSA0CisjZGVmaW5lIFNTSFNXX1BXRCA1CisjZGVmaW5l IFNTSFNXX1NVQiA2CisKKyNkZWZpbmUgU1NIQ19MUEYgMQorI2RlZmluZSBTU0hDX1JQRiAyCisK KyNkZWZpbmUgWFNTSDJfUktFIDEKKworI2RlZmluZSBTU0hGX0xDTCAgIDEKKyNkZWZpbmUgU1NI Rl9STVQgICAyCisKKyNkZWZpbmUgU1NIQV9BREQgICAxCisjZGVmaW5lIFNTSEFfREVMICAgMgor I2RlZmluZSBTU0hBX0xTVCAgIDMKKworI2RlZmluZSBTU0hBU1dfRlAgMQorCisjZGVmaW5lIFNT SEtfUEFTUyAgMQorI2RlZmluZSBTU0hLX0NSRUEgIDIKKyNkZWZpbmUgU1NIS19ESVNQICAzCisj ZGVmaW5lIFNTSEtfVjEgICAgNAorCisjZGVmaW5lIFNTSEtDX0JJICAxCisjZGVmaW5lIFNTSEtD X1BQICAyCisjZGVmaW5lIFNTSEtDX1RZICAzCisjZGVmaW5lIFNTSEtDXzFSICA0CisKKyNkZWZp bmUgU0tSTV9PUE4gIDEKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisKKyNpZmRlZiBTRlRQX0JV SUxUSU4KKyNkZWZpbmUgU0ZUUF9PUE4gICAgMQorI2RlZmluZSBTRlRQX0NEICAgICAyCisjZGVm aW5lIFNGVFBfQ0hHUlAgIDMKKyNkZWZpbmUgU0ZUUF9DSE1PRCAgNAorI2RlZmluZSBTRlRQX0NI T1dOICA1CisjZGVmaW5lIFNGVFBfRElSICAgIDYKKyNkZWZpbmUgU0ZUUF9HRVQgICAgNworI2Rl ZmluZSBTRlRQX01LRElSICA4CisjZGVmaW5lIFNGVFBfUFdEICAgIDkKKyNkZWZpbmUgU0ZUUF9Q VVQgICAgMTAKKyNkZWZpbmUgU0ZUUF9SRU4gICAgMTEKKyNkZWZpbmUgU0ZUUF9STSAgICAgMTIK KyNkZWZpbmUgU0ZUUF9STURJUiAgMTMKKyNkZWZpbmUgU0ZUUF9MSU5LICAgMTQKKyNkZWZpbmUg U0ZUUF9WRVIgICAgMTUKKworI2RlZmluZSBYWV9TRlRQX1JDUyAxCisjZGVmaW5lIFhZX1NGVFBf RU9MIDIKKyNlbmRpZiAvKiBTRlRQX0JVSUxUSU4gKi8KKworLyogQU5TSS1DIHByb3RvdHlwZXMg Zm9yIHVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyAqLworCisjaWZkZWYgVU5JWAorX1BST1RPVFlQ KCBpbnQgZG9wdXRlbnYsICggY2hhciAqLCBjaGFyICogKSApOworI2VuZGlmCS8qIFVOSVggKi8K KworX1BST1RPVFlQKCBpbnQgY2hrYWVzLCAoIGNoYXIsIGludCApICk7CisKKyNpZm5kZWYgTk9J Q1AKK19QUk9UT1RZUCggaW50IG1hdGNobmFtZSwgKCBjaGFyICosIGludCwgaW50ICkgKTsKK19Q Uk9UT1RZUCggaW50IGNrX2NscywgKCB2b2lkICkgKTsKK19QUk9UT1RZUCggaW50IGNrX2NsZW9s LCAoIHZvaWQgKSApOworX1BST1RPVFlQKCBpbnQgY2tfY3VycG9zLCAoIGludCwgaW50ICkgKTsK K19QUk9UT1RZUCggaW50IGNtZHNyYywgKCB2b2lkICkgKTsKK19QUk9UT1RZUCggaW50IHBhcnNl ciwgKCBpbnQgKSApOworX1BST1RPVFlQKCBpbnQgY2hrdmFyLCAoY2hhciAqKSApOworX1BST1RP VFlQKCBpbnQgenpzdHJpbmcsIChjaGFyICosIGNoYXIgKiosIGludCAqKSApOworI2lmbmRlZiBO T0ZSSUxMUworX1BST1RPVFlQKCBpbnQgeXlzdHJpbmcsIChjaGFyICosIGNoYXIgKiopICk7Cisj ZW5kaWYgLyogTk9GUklMTFMgKi8KK19QUk9UT1RZUCggaW50IGdldG5jbSwgKGNoYXIgKiwgaW50 KSApOworX1BST1RPVFlQKCBpbnQgZ2V0bmN0LCAoY2hhciAqLCBpbnQsIEZJTEUgKiwgaW50KSAp OworI2VuZGlmIC8qIE5PSUNQICovCitfUFJPVE9UWVAoIFZPSUQgYmdjaGssICh2b2lkKSApOwor X1BST1RPVFlQKCBjaGFyICogbnZsb29rLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgeGFy cmF5LCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgYXJyYXluYW0sIChjaGFyICosIGludCAq LCBpbnQgKikgKTsKK19QUk9UT1RZUCggaW50IGFycmF5Ym91bmRzLCAoY2hhciAqLCBpbnQgKiwg aW50ICopICk7CitfUFJPVE9UWVAoIGludCBib3VuZHNwYWlyLCAoY2hhciAqLCBjaGFyICosIGlu dCAqLCBpbnQgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgYXJyYXlpdG9hLCAoaW50KSAp OworX1BST1RPVFlQKCBpbnQgYXJyYXlhdG9pLCAoaW50KSApOworX1BST1RPVFlQKCBjaGFyICog YmxkbGVuLCAoY2hhciAqLCBjaGFyICopICk7CitfUFJPVE9UWVAoIGludCBjaGthcnJheSwgKGlu dCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgZGNsYXJyYXksIChjaGFyLCBpbnQpICk7CitfUFJP VE9UWVAoIGludCBwdXNoYXJyYXksIChpbnQsIGludCkgKTsKK19QUk9UT1RZUCggaW50IHBhcnNl dmFyLCAoY2hhciAqLCBpbnQgKiwgaW50ICopICk7CitfUFJPVE9UWVAoIGludCBtYWNpbmksICh2 b2lkKSApOworX1BST1RPVFlQKCBWT0lEIGluaXRtYWMsICh2b2lkKSApOworX1BST1RPVFlQKCBp bnQgZGVsbWFjLCAoY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBhZGRtYWMsIChjaGFy ICosIGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IGRvbWFjLCAoY2hhciAqLCBjaGFyICosIGlu dCkgKTsKK19QUk9UT1RZUCggaW50IGFkZG1tYWMsIChjaGFyICosIGNoYXIgKltdKSApOworX1BS T1RPVFlQKCBpbnQgZG9idWcsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG9jZCwgKGludCkg KTsKK19QUk9UT1RZUCggaW50IGRvY2xzbG9nLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9j bWQsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBkb2RpciwgKGludCkgKTsKK19QUk9UT1RZUCgg aW50IGRvZG8sIChpbnQsIGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9lbmFibGUs IChpbnQsIGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvZ290bywgKGNoYXIgKiwgaW50KSApOwor X1BST1RPVFlQKCBpbnQgZG9ndGEsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBkb2hscCwgKGlu dCkgKTsKK19QUk9UT1RZUCAoaW50IGRvaW5jciwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRv aHJtdCwgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvaWYsIChpbnQpICk7CitfUFJPVE9UWVAo IGludCBkb2lucHV0LCAoaW50LCBjaGFyICpbXSwgaW50W10sIGludCwgaW50KSApOworX1BST1RP VFlQKCBpbnQgZG9yZWlucCwgKGludCwgY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBk b2xvZywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvbG9naW4sIChjaGFyICopICk7CitfUFJP VE9UWVAoIGludCBkb29wZW4sICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG9wcm0sIChpbnQs IGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvcmV0dXJuLCAoY2hhciAqKSApOworX1BST1RPVFlQ KCBpbnQgZG9ybXQsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBkb3NvcnQsICh2b2lkKSApOwor X1BST1RPVFlQKCBpbnQgZG9zdGF0LCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgZG9zdG9wLCAo dm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGRvdHlwZSwgKGNoYXIgKiwgaW50LCBpbnQsIGludCwg Y2hhciAqLCBpbnQsIGNoYXIgKiwgaW50LCBpbnQsCisJCQljaGFyICosIGludCkpOworX1BST1RP VFlQKCBpbnQgdHJhbnNtaXQsIChjaGFyICosIGNoYXIsIGludCwgaW50LCBpbnQpICk7CitfUFJP VE9UWVAoIGludCB4bGF0ZSwgKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCkgKTsKK19QUk9UT1RZ UCggaW50IGxpdGNtZCwgKGNoYXIgKiosIGNoYXIgKiosIGludCkgKTsKK19QUk9UT1RZUCggaW50 IGluY3ZhciwgKGNoYXIgKiwgQ0tfT0ZGX1QsIGludCkgKTsKK19QUk9UT1RZUCggaW50IGNrZGlh bCwgKGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgaG1zZywg KGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IGhtc2dhLCAoY2hhciAqIFtdKSApOworX1BST1RP VFlQKCBpbnQgbWxvb2ssIChzdHJ1Y3QgbXRhYiBbXSwgY2hhciAqLCBpbnQpICk7CitfUFJPVE9U WVAoIGludCBteGxvb2ssIChzdHJ1Y3QgbXRhYiBbXSwgY2hhciAqLCBpbnQpICk7CitfUFJPVE9U WVAoIGludCBteHhsb29rLCAoc3RydWN0IG10YWIgW10sIGNoYXIgKiwgaW50KSApOworX1BST1RP VFlQKCBpbnQgcHJ0b3B0LCAoaW50ICosIGNoYXIgKikgKTsKK19QUk9UT1RZUCggQ0hBUiByZmls b3AsIChjaGFyICosIGNoYXIpICk7CitfUFJPVE9UWVAoIGludCBzZXRjYywgKGNoYXIgKiwgaW50 ICopICk7CitfUFJPVE9UWVAoIGludCBzZXRudW0sIChpbnQgKiwgaW50LCBpbnQsIGludCkgKTsK K19QUk9UT1RZUCggaW50IHNldG9uLCAoaW50ICopICk7CitfUFJPVE9UWVAoIGludCBzZXRvbmF1 dCwgKGludCAqKSApOworX1BST1RPVFlQKCBWT0lEIHNobWRtbGluLCAodm9pZCkgKTsKK19QUk9U T1RZUCggVk9JRCBpbml0bWRtLCAoaW50KSApOworX1BST1RPVFlQKCBjaGFyICogc2hvd29mZiwg KGludCkgKTsKK19QUk9UT1RZUCggY2hhciAqIHNob3dvb2EsIChpbnQpICk7CitfUFJPVE9UWVAo IGNoYXIgKiBzaG93c3RyaW5nLCAoY2hhciAqKSApOworX1BST1RPVFlQKCBpbnQgcGt0b3BuLCAo Y2hhciAqLGludCkgKTsKK19QUk9UT1RZUCggaW50IHRyYW9wbiwgKGNoYXIgKixpbnQpICk7Citf UFJPVE9UWVAoIGludCBzZXNvcG4sIChjaGFyICosaW50KSApOworX1BST1RPVFlQKCBpbnQgZGVi b3BuLCAoY2hhciAqLGludCkgKTsKK19QUk9UT1RZUCggaW50IGRpYW9wbiwgKGNoYXIgKixpbnQs aW50KSApOworX1BST1RPVFlQKCBpbnQgcHJlcG9wLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50 IHBvcGNsdmwsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgdmFydmFsLCAoY2hhciAqLCBDS19P RkZfVCAqKSApOworX1BST1RPVFlQKCBjaGFyICogZXZhbGEsIChjaGFyICopICk7CitfUFJPVE9U WVAoIGNoYXIgKiBldmFseCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IHNldGFsYXJtLCAo bG9uZykgKTsKK19QUk9UT1RZUCggaW50IHNldGF0LCAoaW50KSApOworX1BST1RPVFlQKCBpbnQg c2V0aW5wLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBkb2xvZ25ldCwgKHZvaWQpICk7Citf UFJPVE9UWVAoIFZPSUQgZG9sb2dsaW5lLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNldGxp biwgKGludCwgaW50LCBpbnQpICk7CitfUFJPVE9UWVAoIGludCBzZXRtb2RlbSwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIGludCBzZXRmaWwsIChpbnQpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBob21l cGF0aCwgKHZvaWQpICk7CisjaWZkZWYgT1MyCitfUFJPVE9UWVAoIGludCBzZXR0YXBpLCAodm9p ZCkgKSA7CisjaWZkZWYgT1MyTU9VU0UKK19QUk9UT1RZUCggaW50IHNldG1vdSwgKHZvaWQpICk7 CisjZW5kaWYgLyogT1MyTU9VU0UgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBMT0NVUwor X1BST1RPVFlQKCBWT0lEIHNldGxvY3VzLCAoaW50LGludCkgKTsKK19QUk9UT1RZUCggVk9JRCBz ZXRhdXRvbG9jdXMsIChpbnQpICk7CisjZW5kaWYgLyogTE9DVVMgKi8KK19QUk9UT1RZUCggaW50 IHNldGJlbGwsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHNldGNtYXNrLCAoaW50KSk7Citf UFJPVE9UWVAoIFZPSUQgc2V0YXV0b2RsLCAoaW50LGludCkpOworX1BST1RPVFlQKCBWT0lEIHNl dGRlYnNlcywgKGludCkpOworX1BST1RPVFlQKCBWT0lEIHNldHNlc2xvZywgKGludCkpOworX1BS T1RPVFlQKCBWT0lEIHNldGFwcmludCwgKGludCkpOworX1BST1RPVFlQKCBpbnQgc2V0dHJtLCAo dm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNldHRybXR5cCwgKHZvaWQpICk7CitfUFJPVE9UWVAo IGludCBzZXRzciwgKGludCwgaW50KSApOworX1BST1RPVFlQKCBpbnQgc2V0eG1pdCwgKHZvaWQp ICk7CitfUFJPVE9UWVAoIGludCBkb3NldGtleSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBk b2NoaywgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBsdWRpYWwsIChjaGFyICosIGludCkgKTsK K19QUk9UT1RZUCggY2hhciAqIGdldGRudW0sIChpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgZ2V0 bmV0ZW52LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IGdldHllc25vLCAoY2hhciAqLCBpbnQp ICk7CitfUFJPVE9UWVAoIFZPSUQgeHdvcmRzLCAoY2hhciAqLCBpbnQsIGNoYXIgKltdLCBpbnQp ICk7CisjaWZkZWYgT1MyCitfUFJPVE9UWVAoIFZPSUQga2V5bmFtaW5pdCwgKHZvaWQpICk7Cisj ZW5kaWYgLyogT1MyICovCitfUFJPVE9UWVAoIGludCB4bG9va3VwLCAoc3RydWN0IGtleXRhYltd LCBjaGFyICosIGludCwgaW50ICopICk7CitfUFJPVE9UWVAoIGNoYXIgKiBybG9va3VwLCAoc3Ry dWN0IGtleXRhYltdLCBpbnQsIGludCkgKTsKK19QUk9UT1RZUCggaW50IGh1cG9rLCAoaW50KSAp OworX1BST1RPVFlQKCBjaGFyICogenpuZGF0ZSwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGNoYXIg KiB6amRhdGUsIChjaGFyICopICk7CitfUFJPVE9UWVAoIGNoYXIgKiBqemRhdGUsIChjaGFyICop ICk7CitfUFJPVE9UWVAoIGNoYXIgKiBja2RhdGUsICh2b2lkKSApOworX1BST1RPVFlQKCBjaGFy ICogY2hrX2FjLCAoaW50LCBjaGFyW10pICk7CitfUFJPVE9UWVAoIGNoYXIgKiBnbWRtdHlwLCAo dm9pZCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGdmbW9kZSwgKGludCwgaW50KSApOworX1BST1RP VFlQKCBpbnQgc2V0ZGVzdCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgbmRpbml0LCAodm9p ZCkgKTsKK19QUk9UT1RZUCggaW50IGRvc3dpdGNoLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50 IGRvbG9jYWwsICh2b2lkKSApOworX1BST1RPVFlQKCBsb25nIHRvZDJzZWMsIChjaGFyICopICk7 CitfUFJPVE9UWVAoIGludCBsdW5ldCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggaW50IGRveGRp cywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvc2F2ZSwgKGludCkgKTsKK19QUk9UT1RZUCgg aW50IGRveHNlbmQsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBkb3hnZXQsIChpbnQpICk7Citf UFJPVE9UWVAoIGludCBkb3hjb25uLCAoaW50KSApOworX1BST1RPVFlQKCBpbnQgY2xzY29ubngs IChpbnQpICk7CitfUFJPVE9UWVAoIFZPSUQgZnRyZXNldCwgKHZvaWQpICk7CisjaWZkZWYgQ0tf S0VSQkVST1MKK19QUk9UT1RZUCAoaW50IGNwX2F1dGgsICggdm9pZCApICk7CisjZW5kaWYgLyog Q0tfS0VSQkVST1MgKi8KK19QUk9UT1RZUCggbG9uZyBtamQsIChjaGFyICopICk7CitfUFJPVE9U WVAoIGNoYXIgKiBtamQyZGF0ZSwgKGxvbmcpICk7CitfUFJPVE9UWVAoIGNoYXIgKiBja2dldHBp ZCwgKHZvaWQpICk7CisKK19QUk9UT1RZUCggaW50IGRvZ3JlcCwgKHZvaWQpICk7CisKKyNpZm5k ZWYgTk9GVFAKKyNpZm5kZWYgU1lTRlRQCitfUFJPVE9UWVAoIGludCBkb3hmdHAsICh2b2lkKSAp OworX1BST1RPVFlQKCBpbnQgZG9mdHBobHAsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG9z ZXRmdHAsICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG9zZXRmdHBobHAsICh2b2lkKSApOwor X1BST1RPVFlQKCBpbnQgc2hvZnRwLCAoaW50KSApOworI2VuZGlmIC8qIFNZU0ZUUCAqLworI2Vu ZGlmIC8qIE5PRlRQICovCisKK19QUk9UT1RZUCggVk9JRCBjbWhpc3RvcnksICh2b2lkKSApOwor X1BST1RPVFlQKCBjaGFyICogZ2V0ZGNzZXQsICh2b2lkKSApOworX1BST1RPVFlQKCBjaGFyICog dHRndHBuLCAodm9pZCkgKTsKKworI2lmbmRlZiBOT1NIT1cKK19QUk9UT1RZUCggaW50IGRvc2hv dywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IHNob3RjcCwgKGludCkgKTsKK19QUk9UT1RZUCgg Vk9JRCBzaG9wYXIsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHNob2ZpbCwgKHZvaWQpICk7 CitfUFJPVE9UWVAoIFZPSUQgc2hvcGFycCwgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBzaG9h dHQsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHNob3ZlciwgKHZvaWQpICk7CitfUFJPVE9U WVAoIFZPSUQgc2hvY3RsLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBzaG9kYmwsICh2b2lk KSApOworI2lmbmRlZiBOT1NQTAorX1BST1RPVFlQKCBpbnQgc2hvbWFjLCAoY2hhciAqLCBjaGFy ICopICk7CitfUFJPVE9UWVAoIGludCBkb3NoaWZ0LCAoaW50KSApOworI2VuZGlmIC8qIE5PU1BM ICovCisjaWZuZGVmIE5PQ1NFVFMKK19QUk9UT1RZUCggVk9JRCBzaG9jaGFyc2V0LCAodm9pZCkg KTsKK19QUk9UT1RZUCggVk9JRCBzaG9wYXJsLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBz aG90Y3MsIChpbnQsIGludCkgKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisjaWZuZGVmIE5PTE9D QUwKK19QUk9UT1RZUCggVk9JRCBzaG9wYXJjLCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50IHNo b21vZGVtLCAodm9pZCkgKTsKKyNpZm5kZWYgTk9ESUFMCitfUFJPVE9UWVAoIFZPSUQgc2hvZHMs IChjaGFyICopICk7CitfUFJPVE9UWVAoIFZPSUQgc2hvZGlhbCwgKHZvaWQpICk7CitfUFJPVE9U WVAoIGludCBkb3Nob2RpYWwsICh2b2lkKSApOworI2VuZGlmIC8qIE5PRElBTCAqLworI2lmbmRl ZiBOT05FVAorX1BST1RPVFlQKCBpbnQgc2hvbmV0LCAodm9pZCkgKTsKK19QUk9UT1RZUCggaW50 IHNob3RvcHQsIChpbnQpICk7CitfUFJPVE9UWVAoIGludCBzaG90ZWwsIChpbnQpICk7CisjaWZk ZWYgQ0tfQVVUSEVOVElDQVRJT04KK19QUk9UT1RZUCAoaW50IHNob19hdXRoLCggaW50ICApICk7 CisjZW5kaWYgLyogQ0tfQVVUSEVOVElDQVRJT04gKi8KKyNlbmRpZiAvKiBOT05FVCAqLworX1BS T1RPVFlQKCBWT0lEIHNob21kbSwgKHZvaWQpICk7CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lm ZGVmIE9TMgorX1BST1RPVFlQKCBWT0lEIHNob2tleWNvZGUsIChpbnQsaW50KSApOworI2Vsc2UK K19QUk9UT1RZUCggVk9JRCBzaG9rZXljb2RlLCAoaW50KSApOworI2VuZGlmIC8qIE9TMiAqLwor X1BST1RPVFlQKCBWT0lEIHNob3dhc3NvYywgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZPSUQgc2hv d2Rpcm9wdHMsICh2b2lkKSApOworX1BST1RPVFlQKCBWT0lEIHNob3dkZWxvcHRzLCAodm9pZCkg KTsKK19QUk9UT1RZUCggVk9JRCBzaG93dHlwb3B0cywgKHZvaWQpICk7CitfUFJPVE9UWVAoIFZP SUQgc2hvd3B1cmdvcHRzLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBzaG9mbG93LCAodm9p ZCkgKTsKK19QUk9UT1RZUCggVk9JRCBzaG94ZmVyLCAodm9pZCkgKTsKKyNpZmRlZiBBTllTU0gK K19QUk9UT1RZUCggVk9JRCBzaG9zc2gsICh2b2lkKSApOworI2VuZGlmCS8qIEFOWVNTSCAqLwor I2VuZGlmIC8qIE5PU0hPVyAqLworCitfUFJPVE9UWVAoIFZPSUQgc2hvc3RyZGVmLCAoQ0hBUiAq KSApOworCisjaWZuZGVmIE5PU1BMCitfUFJPVE9UWVAoIGludCBhZGRsb2NhbCwgKGNoYXIgKikg KTsKKyNlbmRpZiAvKiBOT1NQTCAqLworCitfUFJPVE9UWVAoIGludCBzZXRkZWxvcHRzLCAodm9p ZCkgKTsKKworI2lmZGVmIFZNUworX1BST1RPVFlQKCBpbnQgY3Z0ZGlyLCAoY2hhciAqLCBjaGFy ICosIGludCkgKTsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIEZORkxPQVQKK19QUk9UT1RZ UCggVk9JRCBpbml0ZmxvYXQsICh2b2lkKSApOworI2VuZGlmIC8qIEZORkxPQVQgKi8KKworI2lm ZGVmIENLQ0hBTk5FTElPCitfUFJPVE9UWVAoIGludCBkb2ZpbGUsIChpbnQpICk7CisjZW5kaWYg LyogQ0tDSEFOTkVMSU8gKi8KKworI2lmZGVmIENLUk9PVAorX1BST1RPVFlQKCBpbnQgZG9jaHJv b3QsICh2b2lkKSApOworI2VuZGlmIC8qIENLUk9PVCAqLworCisjaWZkZWYgTkVXRlRQCitfUFJP VE9UWVAoIGludCBkb2Z0cHVzciwgICAgKHZvaWQpICk7CitfUFJPVE9UWVAoIGludCBkb2Z0cHB1 dCwgICAgKGludCxpbnQpICk7CitfUFJPVE9UWVAoIGludCBkb2Z0cGdldCwgICAgKGludCxpbnQp ICk7CitfUFJPVE9UWVAoIGludCBkb2Z0cHJtdCwgICAgKGludCxpbnQpICk7CitfUFJPVE9UWVAo IGludCBmdHBvcGVuLCAgICAgKGNoYXIgKiwgY2hhciAqLCBpbnQpICk7CitfUFJPVE9UWVAoIGlu dCBjbWRsaW5nZXQsICAgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGNtZGxpbnB1dCwgICAoaW50 KSApOworX1BST1RPVFlQKCBpbnQgZG9mdHBhcmcsICAgIChjaGFyKSApOworX1BST1RPVFlQKCBp bnQgZG9mdHBhY2N0LCAgICh2b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG9mdHBzaXRlLCAgICh2 b2lkKSApOworX1BST1RPVFlQKCBpbnQgZG9zZXRmdHBwc3YsICh2b2lkKSApOworX1BST1RPVFlQ KCBpbnQgZnRwYnllLCAgICAgICh2b2lkKSApOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCisjaWZk ZWYgQ09NTUVOVAorLyogVGhlc2UgcHJvdG90eXBlcyBhcmUgbm8gbG9uZ2VyIHVzZWQgKi8KK19Q Uk9UT1RZUCggY2hhciAqIGdldGR3cywgKGludCkgKTsKK19QUk9UT1RZUCggY2hhciAqIGdldGRj cywgKGludCkgKTsKK19QUk9UT1RZUCggaW50IGRvZ2V0LCAoaW50KSApOworX1BST1RPVFlQKCBj aGFyICogYXJyYXl2YWwsIChpbnQsIGludCkgKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNp ZmRlZiBLVUkKK19QUk9UT1RZUChpbnQgQnVpbGRGb250VGFibGUsCisgICAgICAgICAgKHN0cnVj dCBrZXl0YWIgKiogcFRhYmxlLCBzdHJ1Y3Qga2V5dGFiICoqIHBUYWJsZTIsIGludCAqIHBOKSk7 CisjZW5kaWYgLyogS1VJICovCisKK19QUk9UT1RZUChpbnQgY3hfbmV0LCAoaW50IG5ldCwgaW50 IHByb3RvY29sLCBjaGFyICogeGhvc3QsIGNoYXIgKiBzdmMsIAorICAgICAgICBjaGFyICogdXNl cm5hbWUsIGNoYXIgKiBwYXNzd29yZCwgY2hhciAqIGNvbW1hbmQsCisgICAgICAgIGludCBwYXJh bTEsIGludCBwYXJhbTIsIGludCBwYXJhbTMsIAorICAgICAgICBpbnQgY3gsIGludCBzeCwgaW50 IGZsYWcsIGludCBndWkpKTsKK19QUk9UT1RZUChpbnQgY3hfc2VyaWFsLCAoY2hhciAqZGV2aWNl LCAKKyAgICAgICAgaW50IGN4LCBpbnQgc3gsIGludCBzaHIsIGludCBmbGFnLCBpbnQgZ3VpLCBp bnQgc3BlY2lhbCkpOworCisjZW5kaWYgLyogQ0tVVVNSX0ggKi8KKworLyogRW5kIG9mIGNrdXVz ci5oICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMw Mi9ja3V1c3guYyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXN4 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM0NjRmNwotLS0gL2Rldi9u dWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXN4LmMK QEAgLTAsMCArMSw5NzIxIEBACisjaW5jbHVkZSAiY2tjc3ltLmgiCisKKy8qICBDIEsgVSBVIFMg WCAtLSAgIlVzZXIgSW50ZXJmYWNlIiBjb21tb24gZnVuY3Rpb25zLiAqLworCisvKgorICBBdXRo b3JzOgorICAgIEZyYW5rIGRhIENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICAgICAgVGhlIEtl cm1pdCBQcm9qZWN0LCBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5CisgICAgSmVm ZnJleSBFIEFsdG1hbiA8amFsdG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgICAgIFNlY3Vy ZSBFbmRwb2ludHMgSW5jLiwgTmV3IFlvcmsgQ2l0eQorCisgIENvcHlyaWdodCAoQykgMTk4NSwg MjAxMSwKKyAgICBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9m IE5ldyBZb3JrLgorICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENP UFlJTkcuVFhUIGZpbGUgb3IgdGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5j IG1vZHVsZSBmb3IgZGlzY2xhaW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBUaGlz IG1vZHVsZSBjb250YWlucyB1c2VyIGludGVyZmFjZSBmdW5jdGlvbnMgbmVlZGVkIGJ5IGJvdGgg dGhlIGludGVyYWN0aXZlCisgIHVzZXIgaW50ZXJmYWNlIGFuZCB0aGUgY29tbWFuZC1saW5lLW9u bHkgdXNlciBpbnRlcmZhY2UsIGFzIHdlbGwgYXMgdGhlCisgIHNjcmVlbi1jb250cm9sIHJvdXRp bmVzIChjdXJzZXMgYW5kIGVxdWl2YWxlbnQpLgorKi8KKworLyogSW5jbHVkZXMgKi8KKworI2lu Y2x1ZGUgImNrY2RlYi5oIgorI2luY2x1ZGUgImNrY2FzYy5oIgorI2luY2x1ZGUgImNrY2tlci5o IgorI2luY2x1ZGUgImNrdXVzci5oIgorI2luY2x1ZGUgImNrY3hsYS5oIgorCisjaWZuZGVmIE5P SFRFUk1DQVAKKyNpZmRlZiBOT1RFUk1DQVAKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2Vsc2UKKyNp Zm5kZWYgQlNENDQKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2Vsc2UKKyNpZmRlZiBfX2JzZGlfXwor I2RlZmluZSBOT0hURVJNQ0FQCisjZWxzZQorI2lmZGVmIE9QRU5CU0QKKyNkZWZpbmUgTk9IVEVS TUNBUAorI2Vsc2UKKyNpZmRlZiBNQUNPU1gKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2VuZGlmIC8q IE1BQ09TWCAqLworI2VuZGlmIC8qIE9QRU5CU0QgKi8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLwor I2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogTk9URVJNQ0FQICovCisjZW5kaWYgLyogTk9I VEVSTUNBUCAqLworCisjaWZuZGVmIE5PVEVSTUNBUAorI2lmZGVmIEJTRDQ0CisjaWZuZGVmIE5P SFRFUk1DQVAKKyNpbmNsdWRlIDx0ZXJtY2FwLmg+CisjZW5kaWYgLyogTk9IVEVSTUNBUCAqLwor I2VuZGlmIC8qIEJTRDQ0ICovCisjZWxzZSAgLyogIUJTRDQ0ICovCisjaWZkZWYgbGludXgKKyNp bmNsdWRlIDx0ZXJtLmg+CisjZW5kaWYgLyogbGludXggKi8KKyNlbmRpZiAvKiBOT1RFUk1DQVAg Ki8KKworI2lmZGVmIE9TMgorI2luY2x1ZGUgPHN0cmluZy5oPgorX1BST1RPVFlQKGNoYXIgKiBv czJfZ2V0aG9zdG5hbWUsICh2b2lkKSk7CisjZGVmaW5lIGdldHBpZCBfZ2V0cGlkCisjZW5kaWYg LyogT1MyICovCisjaWZkZWYgQlNENDQKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmIC8qIEJT RDQ0ICovCisKK2V4dGVybiB4eF9zdHJwIHh4c3RyaW5nOworCisjaWZkZWYgT1MyCisjaW5jbHVk ZSAiY2tjbmV0LmgiCisjZWxzZSAvKiBPUzIgKi8KK19QUk9UT1RZUCggY2hhciAqIGNrZ2V0cGVl ciwgKFZPSUQpKTsKK19QUk9UT1RZUChpbnQgZ2V0bG9jYWxpcGFkZHIsICh2b2lkKSk7CitfUFJP VE9UWVAoaW50IGlzdG5jb21wb3J0LCAodm9pZCkpOworI2lmbmRlZiBOT0NLR0VURlFIT1NUCitf UFJPVE9UWVAoIGNoYXIgKiBja2dldGZxaG9zdG5hbWUsKGNoYXIgKikpOworI2VuZGlmCS8qIE5P Q0tHRVRGUUhPU1QgKi8KKyNpZm5kZWYgTkVUQ09OTgorLyoKKyAgV2Ugc2hvdWxkIGp1c3QgcHVs bCBpbiBja2NuZXQuaCBoZXJlLCBidXQgaXQgY2F1c2VzIGEgY29uZmxpY3Qgd2l0aCBjdXJzZXMu aC4KKyovCisjaWZkZWYgVENQU09DS0VUCisjZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYg U1VOWDI1CisjZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgU1RSQVRVU1gyNQorI2RlZmlu ZSBORVRDT05OCisjZWxzZQorI2lmZGVmIElCTVgyNQorI2RlZmluZSBORVRDT05OCisjZWxzZQor I2lmZGVmIEhQWDI1CisjZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgREVDTkVUCisjZGVm aW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgTlBJUEUKKyNkZWZpbmUgTkVUQ09OTgorI2Vsc2UK KyNpZmRlZiBDS19ORVRCSU9TCisjZGVmaW5lIE5FVENPTk4KKyNpZmRlZiBTVVBFUkxBVAorI2Rl ZmluZSBORVRDT05OCisjZWxzZQorI2VuZGlmIC8qIFNVUEVSTEFUICovCisjZW5kaWYgLyogVENQ U09DS0VUICovCisjZW5kaWYgLyogU1VOWDI1ICovCisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLwor I2VuZGlmIC8qIElCTVgyNSAqLworI2VuZGlmIC8qIEhQWDI1ICovCisjZW5kaWYgLyogREVDTkVU ICovCisjZW5kaWYgLyogTlBJUEUgKi8KKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisjZW5kaWYg LyogTkVUQ09OTiAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIFRDUFNPQ0tFVAorI2lm ZGVmIE1VTFRJTkVUCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIE1VTFRJTkVUICovCisj aWZkZWYgREVDX1RDUElQCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIERFQ19UQ1BJUCAq LworI2lmZGVmIFdJTlRDUAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBXSU5UQ1AgKi8K KyNpZmRlZiBUQ1BXQVJFCisjZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFdBUkUgKi8K KyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjaW5jbHVk ZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHRhcGkuaD4KKyNpbmNsdWRlICJja250YXAuaCIKKyNl bHNlIC8qIE5UICovCisjZGVmaW5lIElOQ0xfVklPCisjaW5jbHVkZSA8b3MyLmg+CisjZW5kaWYg LyogTlQgKi8KKyNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3Vs ZCB5b3UgYmVsaWV2ZSAqLworI3VuZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIDxvczIuaD4gZGVmaW5lcyB0aGlzID8gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZk ZWYgQ0tfTkVUQklPUworI2luY2x1ZGUgImNrb25iaS5oIgorI2VuZGlmIC8qIENLX05FVEJJT1Mg Ki8KKworI2luY2x1ZGUgImNrb2Nvbi5oIgorZXh0ZXJuIGFzY3JlZW4gY29tbWFuZHNjcmVlbjsK KyNpZmRlZiBLVUkKKyNpbmNsdWRlICJpa3VpLmgiCisjZW5kaWYgLyogS1VJICovCisjZW5kaWYg LyogT1MyICovCisKKyNpZmRlZiBOVAorI2luY2x1ZGUgImNrbndpbi5oIgorI2VuZGlmIC8qIE5U ICovCisjaWZkZWYgT1MyCisjaW5jbHVkZSAiY2tvd2luLmgiCisjaW5jbHVkZSAiY2tvc3luLmgi CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBDS19UQVBJCitleHRlcm4gaW50IHR0dGFwaTsK K2V4dGVybiBpbnQgdGFwaXBhc3M7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisjaWZkZWYgQ0tf S0VSQkVST1MKKyNpbmNsdWRlICJja3VhdGguaCIKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLwor CisjaWZuZGVmIFdJTlRDUAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmIC8qIFdJTlRDUCAq LworCisjaWZkZWYgVk1TCisjaW5jbHVkZSA8ZGVzY3JpcC5oPgorI2luY2x1ZGUgPHNzZGVmLmg+ CisjaW5jbHVkZSA8c3RzZGVmLmg+CisjaWZuZGVmIE9MRF9WTVMKKyNpbmNsdWRlIDxsaWIkcm91 dGluZXMuaD4gIC8qIE5vdCBmb3IgVkFYIEMgMi4zICovCisjZWxzZQorI2luY2x1ZGUgPGxpYmRl Zi5oPgorI2VuZGlmIC8qIE9MRF9WTVMgKi8KKyNpZmRlZiBXSU5UQ1AKKyNpbmNsdWRlIDxzaWdu YWwuaD4KKyNlbmRpZiAvKiBXSU5UQ1AgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIERD TEZET1BFTgorLyogZmRvcGVuKCkgbmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVj bGFyZWQgaW4gPHN0ZGlvLmg+ICovCitfUFJPVE9UWVAoIEZJTEUgKiBmZG9wZW4sIChpbnQsIGNo YXIgKikgKTsKKyNlbmRpZiAvKiBEQ0xGRE9QRU4gKi8KKworI2lmZGVmIERDTFBPUEVOCisvKiBw b3BlbigpIG5lZWRzIGRlY2xhcmluZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRp by5oPiAqLworX1BST1RPVFlQKCBGSUxFICogcG9wZW4sIChjaGFyICosIGNoYXIgKikgKTsKKyNl bmRpZiAvKiBEQ0xQT1BFTiAqLworCitpbnQgdHRfY3JkID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ2FycmlhZ2UgcmV0dXJuIGRpc3BsYXkgKi8KK2ludCB0dF9sZmQgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBMaW5lZmVlZCBkaXNwbGF5ICovCitpbnQgaW50ZXJydXB0 ZWQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQgZnJvbSBrZXlib2FyZCBm bGFnICovCitpbnQgZnhkX2luaXRlZCA9IDA7CQkJLyogRnVsbHNjcmVlbiBzdHVmZiBpbml0aWFs aXplZCAqLworCisjaWZkZWYgREVCVUcKK2NoYXIgZGViZmlsW0NLTUFYUEFUSCsxXTsgICAgICAg ICAgICAgICAvKiBEZWJ1Z2dpbmcgbG9nIGZpbGUgbmFtZSAqLworI2VuZGlmIC8qIERFQlVHICov CisKKyNpZmRlZiBUTE9HCitjaGFyIHRyYWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAg LyogVHJhbnNhY3Rpb24gbG9nIGZpbGUgbmFtZSAqLworI2VuZGlmIC8qIFRMT0cgKi8KKworY2hh ciBzZXNmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGZpbGUg bmFtZSAqLworCisjaWZkZWYgQ0tMT0dESUFMCitjaGFyIGRpYWZpbFtDS01BWFBBVEgrMV07ICAg ICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBsb2cgZmlsZSBuYW1lICovCitjaGFyIGN4bG9nYnVm W0NYTE9HQlVGTCsxXTsgICAgICAgICAgICAgLyogQ29ubmVjdGlvbiBsb2cgcmVjb3JkIGJ1ZmZl ciAqLworaW50IGN4X2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rp b24gaXMgYWN0aXZlICovCitleHRlcm4gaW50IGRpYWxvZzsKKyNlbmRpZiAvKiBDS0xPR0RJQUwg Ki8KKworI2lmZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFyICpjbWRzdHIgPSBOVUxMOyAgICAgICAg ICAgICAvKiBQbGFjZSB0byBidWlsZCBnZW5lcmljIGNvbW1hbmQgKi8KKyNlbHNlCisjaWZkZWYg cGRwMTEKK3N0YXRpYyBjaGFyIGNtZHN0clsyNTZdOworI2Vsc2UKK3N0YXRpYyBjaGFyIGNtZHN0 cls0MDk2XTsKKyNlbmRpZiAvKiBwZHAxMSAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworI2lm bmRlZiBOT01TRU5ECitjaGFyIGZzcGVjW0NNREJMKzRdOyAgICAgICAgICAgICAgICAgICAgLyog RmlsZW5hbWUgc3RyaW5nIGZvciBcdihmaWxlc3BlYykgKi8KK2ludCBmc3BlY2xlbiA9IENNREJM OworI2Vsc2UKK2NoYXIgZnNwZWNbQ0tNQVhQQVRIKzRdOworaW50IGZzcGVjbGVuID0gQ0tNQVhQ QVRIOworI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworY2hhciAqIHJmc3BlYyA9IE5VTEw7CQkJLyog UmVjZWl2ZWQgZmlsZXNwZWM6IGxvY2FsICovCitjaGFyICogcHJmc3BlYyA9IE5VTEw7CQkJLyog UHJlbGltaW5hcnkgcmZzcGVjICovCitjaGFyICogc2ZzcGVjID0gTlVMTDsJCQkvKiBTZW50IGZp bGVzcGVjOiBsb2NhbCAqLworY2hhciAqIHBzZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5 IHNmc3BlYyAqLworY2hhciAqIHNyZnNwZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZpbGVzcGVj OiByZW1vdGUgKi8KK2NoYXIgKiBwc3Jmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgc3Jm c3BlYyAqLworY2hhciAqIHJyZnNwZWMgPSBOVUxMOwkJCS8qIFNlbnQgZmlsZXNwZWM6IHJlbW90 ZSAqLworY2hhciAqIHBycmZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBycmZzcGVjICov CisKK2ludCBzdWNjZXNzID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHN1 Y2Nlc3MvZmFpbHVyZSBmbGFnICovCisgICAgY21kbHZsID0gMCwgICAgICAgICAgICAgICAgICAg ICAgICAgLyogQ29tbWFuZCBsZXZlbCAqLworICAgIGFjdGlvbiA9IDAsCQkJCS8qIEFjdGlvbiBz ZWxlY3RlZCBvbiBjb21tYW5kIGxpbmUgKi8KKyAgICBzbG9ndHMgPSAwLAkJCQkvKiBTZXNzaW9u LWxvZyB0aW1lc3RhbXBzIG9uL29mZiAqLworICAgIHNsb2dudWwgPSAwLAkJCS8qIFNlc3Npb24t bG9nIG51bGwtdGVybWluYXRlZCBsaW5lcyAqLworI2lmZGVmIFVOSVgKKyAgICBzZXNzZnQgPSBY WUZUX1QsICAgICAgICAgICAgICAgICAgICAvKiBTZXNzaW9uIGxvZyBmaWxlIHR5cGUgKi8KKyNl bHNlCisgICAgc2Vzc2Z0ID0gWFlGVF9CLAkJCS8qICh0ZXh0IGZvciBVTklYIGJpbmFyeSBmb3Ig b3RoZXJzKSAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICBwZmxhZyA9IDEsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBQcmludCBwcm9tcHQgKi8KKyAgICBtc2dmbGcgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCisKK2V4 dGVybiBpbnQgeGFza21vcmUsIHNhdmVhc2s7CQkvKiBNb3JlLXByb21wdGluZyAqLworCisjaWZk ZWYgQ0tfQVBDCitleHRlcm4gaW50IGFwY2FjdGl2ZTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKy8q IEV4dGVybmFsIHZhcmlhYmxlcyAqLworCitleHRlcm4gaW50IGxvY2FsLCBxdWlldCwgYmluYXJ5 LCBuZXR3b3JrLCB3aGF0LCBwYXJpdHksIHhpdHN0YSwgZXNjYXBlLAorICB0bGV2ZWwsIGJnc2V0 LCBiYWNrZ3JkLCB4c3VzcGVuZCwgY21kaW50LCBuZXR0eXBlLCBzZXNsb2csIGRmbG9jOworCitl eHRlcm4gaW50IGNtZF9yb3dzLCBjbWRfY29scywgeGNtZHNyYzsKKworZXh0ZXJuIGNoYXIgY21k ZmlsW107CisKKyNpZmRlZiBWTVMKK2V4dGVybiBpbnQgYmF0Y2g7CisjZW5kaWYgLyogVk1TICov CisKKyNpZmRlZiBkYXRhZ2VuZXJhbCAgICAgICAgICAgICAgICAgICAgICAvKiAyLzEyLzkyIEVO SCAqLworI2luY2x1ZGUgPHN5c2lkLmg+CitleHRlcm4gaW50IGNvbl9yZWFkc19tdCwgY29uaW50 X2NoLCBjb25pbnRfYXZsOworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKK2V4dGVybiBsb25n IHNwZWVkOworCitleHRlcm4gY2hhciB0dG5hbWVbXSwgKmRmdHR5LCAqY21hcmcsICoqY21saXN0 LCAqdmVyc2lvLCBteWhvc3RbXTsKKworI2lmbmRlZiBOT0NTRVRTCitleHRlcm4gaW50IGZjaGFy c2V0LCB0Y2hhcnNldCwgeGZyeGxhOworZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdLCB0 Y3NpbmZvW107CisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgT1MyCitleHRlcm4gdW5z aWduZWQgY2hhciBjb2xvcmNtZDsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5PWEZFUgor CitpbnQgZmRpc3BsYSA9IFhZRkRfTjsKKworI2Vsc2UgIC8qIE5PWEZFUiBpcyBub3QgZGVmaW5l ZCAqLworCisjaWZkZWYgT1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0 cmFuc2ZlciBkaXNwbGF5IHR5cGUgKi8KK2ludCBmZGlzcGxhID0gWFlGRF9DOyAgICAgICAgICAg ICAgICAgICAvKiBDdXJzZXMgKGZ1bGxzY3JlZW4pIGlmIHdlIGhhdmUgaXQgKi8KKyNlbHNlCisj aWZkZWYgQ0tfQ1VSU0VTCitpbnQgZmRpc3BsYSA9IFhZRkRfQzsKKyNlbHNlCitpbnQgZmRpc3Bs YSA9IFhZRkRfUzsgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIENSVCAqLworI2VuZGlm IC8qIENLX0NVUlNFUyAqLworI2VuZGlmIC8qIE9TMiAqLworCitleHRlcm4gc3RydWN0IGNrX3Ag cHRhYltdOworZXh0ZXJuIGludCBwcm90b2NvbCwgeGZyYmVsLCB4ZnJpbnQ7CisKKyNpZmRlZiBT VFJFQU1JTkcKK2V4dGVybiBpbnQgc3RyZWFtaW5nLCBzdHJlYW1vazsKKyNlbmRpZiAvKiBTVFJF QU1JTkcgKi8KKworLyogVXNlZCBpbnRlcm5hbGx5ICovCisKKyNpZmRlZiBLVUkKK19QUk9UT1RZ UCggVk9JRCBzY3JlZW5nLCAoaW50LCBjaGFyLCBsb25nLCBjaGFyICopICk7CisjZW5kaWYJLyog S1VJICovCitfUFJPVE9UWVAoIFZPSUQgc2NyZWVuYywgKGludCwgY2hhciwgQ0tfT0ZGX1QsIGNo YXIgKikgKTsKKworCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZuZGVmIERZTkFNSUMKK3N0YXRpYyBj aGFyIHh0cm1idWZbVFJNQlVGTF07ICAgICAgICAgICAvKiB0Z2V0ZW50KCkgYnVmZmVyICovCitj aGFyICogdHJtYnVmID0geHRybWJ1ZjsKKyNlbHNlCitjaGFyICogdHJtYnVmID0gTlVMTDsKKyNl bmRpZiAvKiBEWU5BTUlDICovCitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGRweWluaXQsICh2b2lk KSApOworX1BST1RPVFlQKCBzdGF0aWMgbG9uZyBzaG9jcHMsIChpbnQsIENLX09GRl9ULCBDS19P RkZfVCkgKTsKK19QUk9UT1RZUCggc3RhdGljIENLX09GRl9UIHNob2V0bCwgKENLX09GRl9ULCBs b25nLCBDS19PRkZfVCwgQ0tfT0ZGX1QpICk7CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKK3N0 YXRpYyBpbnQgZnRfd2luID0gMDsgIC8qIEZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5 IHdpbmRvdyBpcyBhY3RpdmUgKi8KKworLyogVmFyaWFibGVzIGRlY2xhcmVkIGhlcmUgKi8KKwor c3RhdGljIGNoYXIgKiBza3JlYXNvbltdID0geworICAgICIiLAkJCQkJLyogMCAqLworICAgICJS ZW1vdGUgZmlsZSBub3Qgb2xkZXIiLAkJLyogU0tQX0RBVCAqLworICAgICJJZGVudGljYWwgbW9k aWZpY2F0aW9uIHRpbWVzIiwJLyogU0tQX0VRVSAqLworICAgICJUeXBlIiwJCQkJLyogU0tQX1RZ UCAqLworICAgICJTaXplIiwJCQkJLyogU0tQX1NJWiAqLworICAgICJOYW1lIGNvbGxpc2lvbiIs CQkJLyogU0tQX05BTSAqLworICAgICJFeGNlcHRpb24gTGlzdCIsCQkJLyogU0tQX0VYTCAqLwor ICAgICJEb3QgZmlsZSIsCQkJCS8qIFNLUF9ET1QgKi8KKyAgICAiQmFja3VwIGZpbGUiLAkJCS8q IFNLUF9CS1UgKi8KKyAgICAiUmVjb3Zlcnkgbm90IG5lZWRlZCIsCQkvKiBTS1BfUkVTICovCisg ICAgIkFjY2VzcyBkZW5pZWQiLAkJCS8qIFNLUF9BQ0MgKi8KKyAgICAiTm90IGEgcmVndWxhciBm aWxlIiwJCS8qIFNLUF9OUkYgKi8KKyAgICAiU2ltdWxhdGVkIiwJCQkvKiBTS1BfU0lNICovCisg ICAgIlNpbXVsYXRlZCAtIFJlbW90ZSBmaWxlIG9sZGVyIiwJLyogU0tQX1hVUCAqLworICAgICJT aW11bGF0ZWQgLSBObyByZW1vdGUgZmlsZSIsCS8qIFNLUF9YTlggKi8KK307CitzdGF0aWMgaW50 IG5za3JlYXNvbiA9IChzaXplb2Yoc2tyZWFzb24pIC8gc2l6ZW9mKGNoYXIgKikpOworCitjaGFy ICoKK2dza3JlYXNvbihuKSBpbnQgbjsgeworICAgIHJldHVybigobiA+IDAgJiYgbiA8IG5za3Jl YXNvbikgPyBza3JlYXNvbltuXSA6ICIiKTsKK30KKworY2hhciBwa3RmaWxbQ0tNQVhQQVRIKzFd OyAgICAgICAgICAgICAgIC8qIFBhY2tldCBsb2cgZmlsZSBuYW1lICovCisKKyNpZm5kZWYgTk9N U0VORCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdWx0aXBsZSBTRU5EICovCitjaGFyICpt c2ZpbGVzW01TRU5ETUFYXTsKKyNlbmRpZiAvKiBOT01TRU5EICovCisKKyNpZmRlZiBDS19USU1F UlMKK2V4dGVybiBsb25nIHJ0dGRlbGF5OworZXh0ZXJuIGludCAgcnR0ZmxnOworI2VuZGlmIC8q IENLX1RJTUVSUyAqLworZXh0ZXJuIGludCByY3Z0aW1vOworCisjaWZkZWYgQ0tfUkVTRU5ECitl eHRlcm4gaW50IHNlbmRtb2RlOworZXh0ZXJuIENLX09GRl9UIHNlbmRzdGFydCwgcnNfbGVuOwor I2VuZGlmIC8qIENLX1JFU0VORCAqLworCisjaWZkZWYgQ0tfUENUX0JBUiAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciB0aGVybW9tZXRlciAqLworaW50IHRoZXJtb21ldGVy ID0gMTsgICAgICAgICAgICAgICAgICAgIC8qIE9OIGJ5IGRlZmF1bHQgKi8KKyNlbmRpZiAvKiBD S19QQ1RfQkFSICovCisKKyNpZmRlZiBHRlRJTUVSCitDS0ZMT0FUIGd0diA9IC0xLjAsIG9sZGd0 diA9IC0xLjA7CisjZWxzZQorI2lmbmRlZiBPUzIKK3N0YXRpYworI2VuZGlmIC8qIE9TMiAqLwor ICBsb25nIGd0diA9IC0xTCwgb2xkZ3R2ID0gLTFMOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKwor ZXh0ZXJuIGludCBzZXJ2ZXIsIGJjdHUsIHJwdGZsZywgZWJxZmxnLCBzcHNpeiwgdXJwc2l6LCB3 bWF4LCBjenNlZW4sIGN4c2VlbiwKKyAgd2lubG8sIGRpc3BsYSwgdGltaW50LCBucGFkLCBlYnEs IGJjdHIsIHJwdHEsIGF0Y2FwdSwgbHBjYXB1LAorICBzd2NhcHUsIHdzbG90biwgd3Nsb3RyLCBy dGltbywgbXlwYWRuLCBzcSwgY2FwYXMsIHJwc2l6LCB0c2VjcywKKyAgcGt0bG9nLCBsc2NhcHUs IGRlc3QsIHNydmRpcywgd3Nsb3RzLCBzcGFja2V0cywgc3BrdGwsIHJwa3RsLAorICByZXRyYW5z LCB3Y3VyLCBudW1lcnJzLCBmc2Vjcywgd2hhdHJ1LCBjcnVuY2hlZCwgdGltZW91dHMsCisgIHJw YWNrZXRzLCBmbmNudiwgYnllX2FjdGl2ZSwgZGlzY2FyZCwgaW5zZXJ2ZXIsIGRpcmFjdGl2ZSwg Y2RhY3RpdmU7CisKK2V4dGVybiBsb25nIGZpbGNudCwgZmlscmVqLCBycHRuLCBmaWxjcHMsIHRm Y3BzLCBjcHMsIHBlYWtjcHM7CitleHRlcm4gQ0tfT0ZGX1QgZmZjLCB0ZmMsIGZzaXplOyAKKwor bG9uZyBvbGRjcHMgPSAwTDsKKworZXh0ZXJuIENIQVIgKnJkYXRhcCwgcGFkY2gsIHNlb2wsIGN0 bHEsIG15cGFkYywgZW9sLCAqZXBrdG1zZzsKK2V4dGVybiBjaGFyICp4ZnJtc2c7CisKKyNpZmRl ZiBJS1NEQgorRklMRSAqIGRiZnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUg cG9pbnRlciB0byBkYXRhYmFzZSBmaWxlICovCisKK2ludCBkYmVuYWJsZWQgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAvKiBGbGFnIGZvciBkYXRhYmFzZSBpcyBlbmFibGVkICovCitleHRlcm4g aW50IGlrZGJvcGVuOyAgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZGF0YWJhc2UgaXMg b3BlbiAqLworCit1bnNpZ25lZCBsb25nIG15ZGJzZWVrID0gMEw7ICAgICAgICAgICAgLyogU2Vl ayBwb2ludGVyIHRvIG15IHJlY29yZCAqLworaW50IG15ZGJzbG90ID0gMDsgICAgICAgICAgICAg ICAgICAgICAgIC8qIE15IHNsb3QgbnVtYmVyICovCit1bnNpZ25lZCBsb25nIG15ZmxhZ3MgPSAw TDsgICAgICAgICAgICAgLyogTXkgZmxhZ3MgKi8KK3Vuc2lnbmVkIGxvbmcgbXlhdHlwZSA9IDBM OyAgICAgICAgICAgICAvKiBNeSBhdXRob3JpemF0aW9uIHR5cGUgKi8KK3Vuc2lnbmVkIGxvbmcg bXlhbW9kZSA9IDBMOyAgICAgICAgICAgICAvKiBNeSBhdXRob3JpemF0aW9uIG1vZGUgKi8KK3Vu c2lnbmVkIGxvbmcgbXlzdGF0ZSA9IDBMOyAgICAgICAgICAgICAvKiBNeSBzdGF0ZSAoU0VORCwg UkVDRUlWRSwgZXRjKSAqLwordW5zaWduZWQgbG9uZyBteXBpZCA9IDBMOyAgICAgICAgICAgICAg IC8qIE15IFBJRCAqLwordW5zaWduZWQgbG9uZyBteWlwID0gMEw7ICAgICAgICAgICAgICAgIC8q IE15IElQIGFkZHJlc3MgKi8KK3Vuc2lnbmVkIGxvbmcgcGVlcmlwID0gMEw7ICAgICAgICAgICAg ICAvKiBNeSBwZWVyJ3MgSVAgYWRkcmVzcyAqLworCit1bnNpZ25lZCBsb25nIGRiaXAgPSAwTDsg ICAgICAgICAgICAgICAgLyogSVAgYWRkcmVzcyBpbiBkYiByZWNvcmQgKi8KK3Vuc2lnbmVkIGxv bmcgZGJwaWQgPSAwTDsgICAgICAgICAgICAgICAvKiBQSUQgaW4gZGIgcmVjb3JkICovCit1bnNp Z25lZCBsb25nIGRiZmxhZ3MgPSAwTDsgICAgICAgICAgICAgLyogRmxhZ3MgZmllbGQgaW4gZGIg cmVjb3JkICovCit1bnNpZ25lZCBsb25nIGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgLyogTGFz dCBpbi11c2UgcmVjb3JkIGluIGRiICovCitjaGFyIGRicmVjW0RCX1JFQ0xdOyAgICAgICAgICAg ICAgICAgICAgLyogRGF0YWJhc2UgcmVjb3JkIGJ1ZmZlciAqLworCitjaGFyICogZGJkaXIgICA9 IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogRGF0YWJhc2UgZGlyZWN0b3J5ICovCitjaGFyICog ZGJmaWxlICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogRGF0YWJhc2UgZmlsZSBmdWxsIHBh dGhuYW1lICovCitjaGFyIG15aGV4aXBbMzNdID0geyBOVUwsIE5VTCB9OyAgICAgICAgLyogTXkg SVAgYWRkcmVzcyBpbiBoZXggKi8KK2NoYXIgcGVlcmhleGlwWzMzXSA9IHsgTlVMLCBOVUwgfTsg ICAgICAvKiBDbGllbnQncyBJUCBhZGRyZXNzIGluIGhleCAqLworI2VuZGlmIC8qIElLU0RCICov CisKKyNpZmRlZiBHRlRJTUVSCitleHRlcm4gQ0tGTE9BVCBmcGZzZWNzLCBmcHRzZWNzLCBmcHhm c2VjczsKKyNlbHNlCitleHRlcm4gbG9uZyB4ZnNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLwor I2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYgTkVXRlRQCitl eHRlcm4gY2hhciAqIGZ0cF9ob3N0LCBmdHBfc3J2dHlwW107CitleHRlcm4gaW50IGZ0cF9jc3gs IGZ0cF9jc2wsIGZ0cF9kZWI7CisjZW5kaWYgLyogTkVXRlRQICovCitleHRlcm4gY2hhciBteWlw YWRkcltdOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisjaWZuZGVmIE5PSUNQCisjaWZuZGVm IE5PU1BMCisgICAgZXh0ZXJuIHN0cnVjdCBtdGFiICptYWN0YWI7ICAgICAgICAgLyogRm9yIE9O X0VYSVQgbWFjcm8uICovCisgICAgZXh0ZXJuIGludCBubWFjOworI2VuZGlmIC8qIE5PU1BMICov CisjaWZkZWYgRENNREJVRgorZXh0ZXJuIGNoYXIgKmNtZGJ1ZjsgICAgICAgICAgICAgICAgICAg IC8qIENvbW1hbmQgYnVmZmVyICovCisjZWxzZQorZXh0ZXJuIGNoYXIgY21kYnVmW107ICAgICAg ICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICovCisjZW5kaWYgLyogRENNREJVRiAqLwor ZXh0ZXJuIGludCBjbWRfcXVvdGluZzsKKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5P Q0NUUkFQCisjaWZkZWYgTlQKKyNpbmNsdWRlIDxzZXRqbXBleC5oPgorI2Vsc2UgLyogTlQgKi8K KyNpbmNsdWRlIDxzZXRqbXAuaD4KKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImNrY3NpZy5o IgorZXh0ZXJuIGNram1wYnVmIGNtamJ1ZjsKKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworCitleHRl cm4gaW50IHhmaWxldHlwZSwgbnNjYW5maWxlOworCitpbnQKK3Nob2VzYyhlc2NhcGUpIGludCBl c2NhcGU7IHsKKyAgICBleHRlcm4gY2hhciAqIGNjbnRhYltdOwkJLyogQzAgY29udHJvbCBjaGFy YWN0ZXIgbmFtZSB0YWJsZSAqLworICAgIGV4dGVybiBpbnQgdHRfZXNjYXBlOworICAgIGlmICgo ZXNjYXBlID4gMCAmJiBlc2NhcGUgPCAzMikgfHwgKGVzY2FwZSA9PSAxMjcpKSB7CisJcHJpbnRm KCIgRXNjYXBlIGNoYXJhY3RlcjogQ3RybC0lYyAoQVNDSUkgJWQsICVzKTogJXNcclxuIiwKKwkg ICAgICAgY3RsKGVzY2FwZSksCisJICAgICAgIGVzY2FwZSwKKwkgICAgICAgKGVzY2FwZSA9PSAx MjcgPyAiREVMIiA6IGNjbnRhYltlc2NhcGVdKSwKKwkgICAgICAgdHRfZXNjYXBlID8gImVuYWJs ZWQiIDogImRpc2FibGVkIgorCSAgICAgICApOworICAgIH0gZWxzZSB7CisJcHJpbnRmKCIgRXNj YXBlIGNoYXJhY3RlcjogQ29kZSAlZCIsZXNjYXBlKTsKKwlpZiAoZXNjYXBlID4gMTYwICYmIGVz Y2FwZSA8IDI1NikKKwkgIHByaW50ZigiICglYykiLGVzY2FwZSk7CisJcHJpbnRmKCI6ICVzXHJc biIsIHR0X2VzY2FwZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwkKKyAgICB9CisgICAgcmV0 dXJuKDApOworfQorCisjaWZuZGVmIE5PWEZFUgorLyogIFAgUiBFIFMgRSBUICAtLSAgUmVzZXQg Z2xvYmFsIHByb3RvY29sIHZhcmlhYmxlcyAgKi8KKworZXh0ZXJuIGludCByZWN1cnNpdmU7CisK KyNpZmRlZiBQQVRURVJOUworaW50IHBhdHRlcm5zID0gU0VUX0FVVE87ICAgICAgICAgICAgICAg IC8qIFdoZXRoZXIgdG8gdXNlIGZpbGVuYW1lIHBhdHRlcm5zICovCitleHRlcm4gaW50IGdfcGF0 dGVybnM7CQkJLyogRm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nICovCisjZWxzZQoraW50IHBhdHRl cm5zID0gU0VUX09GRjsKKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCisjaWZuZGVmIE5PSUNQCisj aWZkZWYgQ0tfTEFCRUxFRAorZXh0ZXJuIGludCBnX2xmX29wdHMsIGxmX29wdHM7CisjZW5kaWYg LyogQ0tfTEFCRUxFRCAqLworZXh0ZXJuIGludCBnX21hdGNoZG90LCBnX3VzZXBpcGVzLCB1c2Vw aXBlczsKK2V4dGVybiBpbnQgZ19iaW5hcnksIGdfcHJvdG8sIGdfZGlzcGxhLCBnX3NwYXRoLCBn X3JwYXRoLCBnX2ZuY252OworZXh0ZXJuIGludCBnX3JlY3Vyc2l2ZTsKK2V4dGVybiBpbnQgZ194 ZmVybW9kZSwgeGZlcm1vZGU7CitleHRlcm4gaW50IGdfdXJwc2l6LCBnX3Nwc2l6ZiwgZ19zcHNp ejsKK2V4dGVybiBpbnQgZ19zcHNpenIsIGdfc3BtYXgsIGdfd3Nsb3RyLCBnX3ByZWZpeGluZywg Z19mbmNhY3Q7CitleHRlcm4gaW50IGdfZm5zcGF0aCwgZ19mbnJwYXRoLCBnX3NraXBidXA7Citl eHRlcm4gaW50IG5vbGlua3M7CisjaWZkZWYgQ0tTWU1MSU5LCitleHRlcm4gaW50IHpnZnNfbGlu azsKKyNlbmRpZiAvKiBDS1NZTUxJTksgKi8KKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgZ19w ZmxnLCBwd2ZsZywgZ19wY3B0LCBwd2NyeXB0OworZXh0ZXJuIGNoYXIgKiBnX3Bzd2QsIHB3YnVm W107CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCitleHRlcm4gaW50 IHNwc2l6Ziwgc3BzaXpyLCBzcG1heCwgcHJlZml4aW5nLCBmbmNhY3QsIGZuc3BhdGgsIGZucnBh dGg7CitleHRlcm4gaW50IG1vdmluZzsgICAgICAgICAgICAgICAgICAgICAgLyogU0VORCBjcml0 ZXJpYSAqLworZXh0ZXJuIGNoYXIgc25kYWZ0ZXJbXSwgc25kYmVmb3JlW10sICpzbmRleGNlcHRb XSwgKnJjdmV4Y2VwdFtdOworZXh0ZXJuIENLX09GRl9UIHNuZGxhcmdlciwgc25kc21hbGxlciwg Y2FsaWJyYXRlOworZXh0ZXJuIGludCBybWFpbGYsIHJwcmludGYsIHNraXBidXA7CitleHRlcm4g Y2hhciBvcHRidWZbXTsKKworI2lmZGVmIFBJUEVTRU5ECitleHRlcm4gY2hhciAqIGdfc2ZpbHRl ciwgKiBnX3JmaWx0ZXI7CitleHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0ZXI7Cisj ZW5kaWYgLyogUElQRVNFTkQgKi8KK2V4dGVybiBjaGFyICoqIHNuZGFycmF5OworCitWT0lECitm dHJlc2V0KCkgeworI2lmbmRlZiBOT0lDUAorICAgIGludCBpOworICAgIGV4dGVybiBjaGFyICog ZmlsZWZpbGU7CisgICAgZXh0ZXJuIGludCByZWxpYWJsZSwgeHJlbGlhYmxlLCBjX3NhdmUsIHNz X3NhdmUsIHNsb3N0YXJ0LCB1cmNsZWFyOworICAgIGV4dGVybiBpbnQgb29wdHMsIG9tb2RlLCBv bmFtZSwgb3BhdGgsIGthY3RpdmUsIGF1dG9wYXRoOworICAgIGV4dGVybiBjaGFyICogc25kX21v dmU7ICAgICAgICAgICAgIC8qIERpcmVjdG9yeSB0byBtb3ZlIHNlbnQgZmlsZXMgdG8gKi8KKyAg ICBleHRlcm4gY2hhciAqIHNuZF9yZW5hbWU7ICAgICAgICAgICAvKiBXaGF0IHRvIHJlbmFtZSBz ZW50IGZpbGVzIHRvICovCisgICAgZXh0ZXJuIGNoYXIgKiByY3ZfbW92ZTsKKyAgICBleHRlcm4g Y2hhciAqIHJjdl9yZW5hbWU7CisgICAgZXh0ZXJuIGNoYXIgKiBnX3NuZF9tb3ZlOworICAgIGV4 dGVybiBjaGFyICogZ19zbmRfcmVuYW1lOworICAgIGV4dGVybiBjaGFyICogZ19yY3ZfbW92ZTsK KyAgICBleHRlcm4gY2hhciAqIGdfcmN2X3JlbmFtZTsKKworI2lmZGVmIENLX1RNUERJUgorICAg IGV4dGVybiBpbnQgZl90bXBkaXI7CisgICAgZXh0ZXJuIGNoYXIgc2F2ZGlyW107CisjZW5kaWYg LyogQ0tfVE1QRElSICovCisKKyNpZmRlZiBDS19TUEVFRAorI2lmZGVmIENPTU1FTlQKKyAgICBl eHRlcm4gaW50IGZfY3RscDsKKyAgICBleHRlcm4gc2hvcnQgc19jdGxwW10sIGN0bHBbXTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworI2lmbmRlZiBOT0NT RVRTCisgICAgZXh0ZXJuIGludCBmY3Nfc2F2ZSwgdGNzX3NhdmU7CisgICAgZXh0ZXJuIGludCBn X3hmcnhsYSwgeGZyeGxhOworI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworLyogUmVzdG9yZSAvIHJl c2V0IHBlci1jb21tYW5kIGZpbGUtdHJhbnNmZXIgc3dpdGNoZXMgKi8KKworICAgIG1ha2VzdHIo JnNuZF9tb3ZlLGdfc25kX21vdmUpOworICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGdfcmN2X21vdmUp OworICAgIG1ha2VzdHIoJnNuZF9yZW5hbWUsZ19zbmRfcmVuYW1lKTsKKyAgICBtYWtlc3RyKCZy Y3ZfcmVuYW1lLGdfcmN2X3JlbmFtZSk7CisKKyAgICBrYWN0aXZlID0gMDsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBLZXJtaXQgcHJvdG9jb2wgbm8gbG9uZ2VyIGFjdGl2ZSAqLworICAgIG9v cHRzID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IE9wdGlvbnMgKi8K KyAgICBvbW9kZSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBUcmFu c2ZlciBNb2RlICovCisgICAgb25hbWUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog Ty1QYWNrZXQgRmlsZW5hbWUgT3B0aW9ucyAqLworICAgIG9wYXRoID0gLTE7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE8tUGFja2V0IFBhdGhuYW1lIE9wdGlvbnMgKi8KKworI2lmZGVmIENL X1JFU0VORAorICAgIHJzX2xlbiA9IDBMOwkJCS8qIFJFR0VUIHBvc2l0aW9uICovCisjZW5kaWYg LyogQ0tfUkVTRU5EICovCisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tfU1BFRUQKKyAgICBp ZiAoZl9jdGxwKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAg ICBjdGxwW2ldID0gc19jdGxwW2ldOworICAgICAgICBmX2N0bHAgPSAwOworICAgIH0KKyNlbmRp ZiAvKiBDS19TUEVFRCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENLX1RNUERJ UgorICAgIGlmIChmX3RtcGRpcikgewkJCS8qIElmIHdlIGNoYW5nZWQgdG8gZG93bmxvYWQgZGly ICovCisJemNoZGlyKChjaGFyICopIHNhdmRpcik7CS8qIEdvIGJhY2sgd2hlcmUgd2UgY2FtZSBm cm9tICovCisJZl90bXBkaXIgPSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKwor ICAgIGNhbGlicmF0ZSA9IDBMOyAgICAgICAgICAgICAgICAgICAgIC8qIENhbGlicmF0aW9uIHJ1 biAqLworICAgIGlmICh4cmVsaWFibGUgPiAtMSkgeworCXJlbGlhYmxlID0geHJlbGlhYmxlOwor CWRlYnVnKEYxMDEsImZ0cmVzZXQgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKKyAgICB9CisgICAg dXJjbGVhciA9IDA7CisKKyAgICBpZiAoYXV0b3BhdGgpIHsgICAgICAgICAgICAgICAgICAgICAv KiBTRVQgUkVDRUlWRSBQQVRITkFNRVMgQVVUTyAqLworICAgICAgICBmbnJwYXRoID0gUEFUSF9B VVRPOworICAgICAgICBhdXRvcGF0aCA9IDA7CisgICAgfQorICAgIGlmIChmaWxlZmlsZSkgeyAg ICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgbGlzdCAqLworICAgICAgICB6Y2xvc2UoWk1GSUxF KTsKKyAgICAgICAgbWFrZXN0cigmZmlsZWZpbGUsTlVMTCk7CisgICAgfQorICAgIGlmIChjX3Nh dmUgPiAtMSkgeyAgICAgICAgICAgICAgICAgIC8qIEJsb2NrIENoZWNrIFR5cGUgKi8KKyAgICAg ICAgYmN0ciA9IGNfc2F2ZTsKKyAgICAgICAgY19zYXZlID0gLTE7CisgICAgfQorICAgIGlmIChz c19zYXZlID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIFNsb3cgU3RhcnQgKi8KKyAgICAgICAg c2xvc3RhcnQgPSBzc19zYXZlOworICAgICAgICBzc19zYXZlID0gLTE7CisgICAgfQorI2lmZGVm IENLX0xBQkVMRUQKKyAgICBpZiAoZ19sZl9vcHRzID4gLTEpIHsKKyAgICAgICAgbGZfb3B0cyA9 IGdfbGZfb3B0czsgICAgICAgICAgICAvKiBSZXN0b3JlIGxhYmVsZWQgdHJhbnNmZXIgb3B0aW9u cyAqLworICAgICAgICBnX2xmX29wdHMgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogQ0tfTEFCRUxF RCAqLworCisjaWZuZGVmIE5PQ1NFVFMKKyAgICBpZiAodGNzX3NhdmUgPiAtMSkgeyAgICAgICAg ICAgICAgICAvKiBDaGFyYWN0ZXIgc2V0cyAqLworICAgICAgICB0Y2hhcnNldCA9IHRjc19zYXZl OworICAgICAgICB0Y3Nfc2F2ZSA9IC0xOworICAgIH0KKyAgICBpZiAoZmNzX3NhdmUgPiAtMSkg eworICAgICAgICBmY2hhcnNldCA9IGZjc19zYXZlOworICAgICAgICBmY3Nfc2F2ZSA9IC0xOwor ICAgIH0KKyAgICBpZiAoZ194ZnJ4bGEgPiAtMSkgeworCXhmcnhsYSA9IGdfeGZyeGxhOworCWdf eGZyeGxhID0gLTE7CisgICAgfQorICAgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAg ICAgIC8qIFRyYW5zbGF0aW9uIHR5cGUgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZmRl ZiBORVRDT05OCisjaWZuZGVmIE5PU1BMCisgICAgaWYgKGdfcHN3ZCkgeworICAgICAgICBja3N0 cm5jcHkocHdidWYsZ19wc3dkLFBXQlVGTCk7CisgICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxOVUxM KTsKKyAgICB9CisgICAgaWYgKGdfcGZsZyA+IC0xKSB7CisgICAgICAgIHB3ZmxnID0gZ19wZmxn OworICAgICAgICBnX3BmbGcgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfcGNwdCA+IC0xKSB7Cisg ICAgICAgIHB3Y3J5cHQgPSBnX3BjcHQ7CisgICAgICAgIGdfcGNwdCA9IC0xOworICAgIH0KKyNl bmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworICAgIGlmIChnX2JpbmFy eSA+IC0xKSB7ICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSAqLworICAgICAgICBiaW5hcnkg PSBnX2JpbmFyeTsKKyAgICAgICAgZ19iaW5hcnkgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfeGZl cm1vZGUgPiAtMSkgeyAgICAgICAgICAgICAgLyogVHJhbnNmZXIgbW9kZSAqLworICAgICAgICB4 ZmVybW9kZSA9IGdfeGZlcm1vZGU7CisgICAgICAgIGdfeGZlcm1vZGUgPSAtMTsKKyAgICB9Cisj aWZkZWYgUEFUVEVSTlMKKyAgICBpZiAoZ19wYXR0ZXJucyA+IC0xKSB7ICAgICAgICAgICAgICAv KiBGaWxlbmFtZSBwYXR0ZXJucyAqLworICAgICAgICBwYXR0ZXJucyA9IGdfcGF0dGVybnM7Cisg ICAgICAgIGdfcGF0dGVybnMgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKwor ICAgIGlmIChnX3VzZXBpcGVzID4gLTEpIHsKKyAgICAgICAgdXNlcGlwZXMgPSBnX3VzZXBpcGVz OworICAgICAgICBnX3VzZXBpcGVzID0gLTE7CisgICAgfQorICAgIGlmIChnX21hdGNoZG90ID4g LTEpIHsKKyAgICAgICAgbWF0Y2hkb3QgPSBnX21hdGNoZG90OworICAgICAgICBnX21hdGNoZG90 ID0gLTE7CisgICAgfQorICAgIGlmIChnX3Byb3RvID4gLTEpIHsgICAgICAgICAgICAgICAgIC8q IFByb3RvY29sICovCisgICAgICAgIHByb3RvY29sID0gZ19wcm90bzsKKyAgICAgICAgZ19wcm90 byA9IC0xOworICAgIH0KKyAgICBpZiAoZ191cnBzaXogPiAtMSkgeworICAgICAgICB1cnBzaXog PSBnX3VycHNpejsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3JpbmcgdXJwc2l6 IiwiIix1cnBzaXopOworICAgICAgICBnX3VycHNpeiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19z cHNpemYgPiAtMSkgeworICAgICAgICBzcHNpemYgPSBnX3Nwc2l6ZjsKKyAgICAgICAgZGVidWco RjEwMSwiZnRyZXNldCByZXN0b3Jpbmcgc3BzaXpmIiwiIixzcHNpemYpOworICAgICAgICBnX3Nw c2l6ZiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcHNpeiA+IC0xKSB7CisgICAgICAgIHNwc2l6 ID0gZ19zcHNpejsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jpbmcgc3BzaXoi LCIiLHNwc2l6KTsKKyAgICAgICAgZ19zcHNpeiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcHNp enIgPiAtMSkgeworICAgICAgICBzcHNpenIgPSBnX3Nwc2l6cjsKKyAgICAgICAgZGVidWcoRjEw MSwiZnRyZXNldCByZXN0b3Jpbmcgc3BzaXpyIiwiIixzcHNpenIpOworICAgICAgICBnX3Nwc2l6 ciA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcG1heCA+IC0xKSB7CisgICAgICAgIHNwbWF4ID0g Z19zcG1heDsKKyAgICAgICAgZ19zcG1heCA9IC0xOworICAgIH0KKyAgICBpZiAoZ193c2xvdHIg PiAtMSkgeworICAgICAgICB3c2xvdHIgPSBnX3dzbG90cjsKKyAgICAgICAgZ193c2xvdHIgPSAt MTsKKyAgICB9CisgICAgaWYgKGdfcHJlZml4aW5nID4gLTEpIHsKKyAgICAgICAgcHJlZml4aW5n ID0gZ19wcmVmaXhpbmc7CisgICAgICAgIGdfcHJlZml4aW5nID0gLTE7CisgICAgfQorICAgIGlm IChnX2ZuY2FjdCA+IC0xKSB7CisgICAgICAgIGZuY2FjdCA9IGdfZm5jYWN0OworICAgICAgICBn X2ZuY2FjdCA9IC0xOworICAgIH0KKyAgICBpZiAoZ19mbmNudiA+IC0xKSB7CisgICAgICAgIGZu Y252ID0gZ19mbmNudjsKKyAgICAgICAgZ19mbmNudiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19m bnNwYXRoID4gLTEpIHsKKyAgICAgICAgZm5zcGF0aCA9IGdfZm5zcGF0aDsKKyAgICAgICAgZ19m bnNwYXRoID0gLTE7CisgICAgfQorICAgIGlmIChnX2ZucnBhdGggPiAtMSkgeworICAgICAgICBm bnJwYXRoID0gZ19mbnJwYXRoOworICAgICAgICBnX2ZucnBhdGggPSAtMTsKKyAgICB9CisgICAg aWYgKGdfc2tpcGJ1cCA+IC0xKSB7CisgICAgICAgIHNraXBidXAgPSBnX3NraXBidXA7CisgICAg ICAgIGdfc2tpcGJ1cCA9IC0xOworICAgIH0KKyAgICBub2xpbmtzID0gMjsJCQkvKiAvRk9MTE9X TElOS1MgaXMgbmV2ZXIgZ2xvYmFsICovCisgICAgcmVjdXJzaXZlID0gMDsgICAgICAgICAgICAg ICAgICAgICAgLyogL1JFQ1VSU0lWRSBjYW4gbmV2ZXIgYmUgZ2xvYmFsICovCisgICAgeGZpbGV0 eXBlID0gLTE7CisKKyAgICBpZiAoZ19kaXNwbGEgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBG aWxlIHRyYW5zZmVyIGRpc3BsYXkgKi8KKyAgICAgICAgZmRpc3BsYSA9IGdfZGlzcGxhOworICAg ICAgICBnX2Rpc3BsYSA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcGF0aCA+IC0xKSB7ICAgICAg ICAgICAgICAgICAvKiBTZW5kIHBhdGhuYW1lcyAqLworICAgICAgICBmbnNwYXRoID0gZ19zcGF0 aDsKKyAgICAgICAgZ19zcGF0aCA9IC0xOworICAgIH0KKyAgICBpZiAoZ19ycGF0aCA+IC0xKSB7 ICAgICAgICAgICAgICAgICAvKiBSZWNlaXZlIHBhdGhuYW1lcyAqLworICAgICAgICBmbnJwYXRo ID0gZ19ycGF0aDsKKyAgICAgICAgZ19ycGF0aCA9IC0xOworICAgIH0KKyAgICBpZiAoZ19mbmNu diA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBjb252ZXJzaW9uICovCisgICAg ICAgIGZuY252ID0gZ19mbmNudjsKKyAgICAgICAgZ19mbmNudiA9IC0xOworICAgIH0KKyNpZmRl ZiBQSVBFU0VORAorICAgIG1ha2VzdHIoJnNuZGZpbHRlcixnX3NmaWx0ZXIpOyAgICAgIC8qIFNl bmQgZmlsdGVyICovCisgICAgbWFrZXN0cigmcmN2ZmlsdGVyLGdfcmZpbHRlcik7ICAgICAgLyog UmVjZWl2ZSBmaWx0ZXIgKi8KKyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZuZGVmIE5PRlJJ TExTCisgICAgcm1haWxmID0gcnByaW50ZiA9IDA7ICAgICAgICAgICAgICAgLyogTUFJTCBhbmQg UFJJTlQgbW9kaWZpZXJzIGZvciBTRU5EICovCisgICAgb3B0YnVmWzBdID0gTlVMOyAgICAgICAg ICAgICAgICAgICAgLyogTUFJTCBhbmQgUFJJTlQgb3B0aW9ucyAqLworI2VuZGlmIC8qIE5PRlJJ TExTICovCisKKyAgICBtb3ZpbmcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNl dCBkZWxldGUtYWZ0ZXItc2VuZCBpbmRpY2F0b3IgKi8KKyAgICBzbmRhZnRlclswXSAgPSBOVUw7 ICAgICAgICAgICAgICAgICAvKiBSZXNldCBTRU5EIHNlbGVjdGlvbiBzd2l0Y2hlcyAqLworICAg IHNuZGJlZm9yZVswXSA9IE5VTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOU05ERVhDRVBUOyBp KyspIHsKKyAgICAgICAgaWYgKHNuZGV4Y2VwdFtpXSkKKyAgICAgICAgICBmcmVlKHNuZGV4Y2Vw dFtpXSk7CisgICAgICAgIHNuZGV4Y2VwdFtpXSA9IE5VTEw7CisgICAgICAgIGlmIChyY3ZleGNl cHRbaV0pCisgICAgICAgICAgZnJlZShyY3ZleGNlcHRbaV0pOworICAgICAgICByY3ZleGNlcHRb aV0gPSBOVUxMOworICAgIH0KKyAgICBzbmRsYXJnZXIgPSAgKENLX09GRl9UKS0xOworICAgIHNu ZHNtYWxsZXIgPSAoQ0tfT0ZGX1QpLTE7CisgICAgZGVidWcoRjEwMSwicHJlc2VudCBzbmRzbWFs bGVyIiwiIixzbmRzbWFsbGVyKTsKKyNpZmRlZiBHRlRJTUVSCisgICAgZ3R2ID0gLTEuMDsKKyAg ICBvbGRndHYgPSAtMS4wOworI2Vsc2UKKyAgICBndHYgPSAtMUw7CisgICAgb2xkZ3R2ID0gLTFM OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworfQorI2VuZGlmIC8q IE5PWEZFUiAqLworCitjaGFyICoKK3R0Z3RwbigpIHsJCQkJLyogR2V0IHR5cGljYWwgcG9ydCBu YW1lICovCisvKgorICBJZGVhbGx5IHRoaXMgcm91dGluZSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBp biBlYWNoIG9mIHRoZSBja3U/aW8uKiBtb2R1bGVzLAorICBidXQgdGhhdCByZXF1aXJlcyBjaGFu Z2luZyB0aGUgQVBJIGRlZmluaXRpb24uCisqLworICAgIHJldHVybigKKyNpZmRlZiBPUzIKKyNp ZmRlZiBPUzJPTkxZCisiQ09NMSIKKyNlbHNlICAvKiBPUzJPTkxZICovCisiVEFQSSBbIG5hbWUg XSBvciBDT00xIgorI2VuZGlmIC8qIE9TMk9OTFkgKi8KKyNlbHNlICAvKiBPUzIgKi8KKyNpZmRl ZiBWTVMKKyJUWEEwOiwgVFRBMDosIG9yIExUQTA6IgorI2Vsc2UgIC8qIFZNUyAqLworI2lmZGVm IFNPTEFSSVMKKyIvZGV2L2N1YS9hIgorI2Vsc2UgIC8qIFNPTEFSSVMgKi8KKyNpZmRlZiBIUFVY MTAKKyIvZGV2L2N1YTBwMCIKKyNlbHNlICAvKiBIUFVYMTAgKi8KKyNpZmRlZiBIUFVYCisiL2Rl di9jdWEwMCIKKyNlbHNlICAvKiBIUFVYICovCisjaWZkZWYgX19GcmVlQlNEX18KKyIvZGV2L2N1 YWEwIgorI2Vsc2UgIC8qIF9fRnJlZUJTRF9fICovCisjaWZkZWYgX19saW51eF9fCisiL2Rldi90 dHlTMCIKKyNlbHNlICAvKiBfX2xpbnV4X18gKi8KKyNpZmRlZiBCU0Q0NAorIi9kZXYvdHR5MDAi CisjZWxzZSAgLyogQlNENDQgKi8KKyNpZmRlZiBPU0sKKyIvdDEiCisjZWxzZSAgLyogT1NLICov CisjaWZkZWYgUU5YCisiL2Rldi9zZXIxIgorI2Vsc2UgIC8qIFFOWCAqLworI2lmZGVmIFFOWDYK KyIvZGV2L3NlcjEiCisjZWxzZSAgLyogUU5YNiAqLworI2lmZGVmIFVOSVhXQVJFCisiL2Rldi90 ZXJtLzAwIG9yIC9kZXYvdHR5MDAiCisjZWxzZSAgLyogVU5JWFdBUkUgKi8KKyNpZmRlZiBDS19T Q09WNQorIi9kZXYvdHR5MUEiCisjZWxzZSAgLyogQ0tfU0NPVjUgKi8KKyNpZmRlZiBDS19TQ08z MlY0CisiL2Rldi90dHkxQSIKKyNlbHNlICAvKiBDS19TQ08zMlY0ICovCisjaWZkZWYgTV9YRU5J WAorIi9kZXYvdHR5MUEiCisjZWxzZSAgLyogTV9YRU5JWCAqLworI2lmZGVmIEFJWFJTCisiL2Rl di90dHkwIgorI2Vsc2UgIC8qIEFJWFJTICovCisjaWZkZWYgREdVWAorIi9kZXYvdHR5MDAiCisj ZWxzZSAgLyogREdVWCAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisiQGNvbjEiCisjZWxzZSAgLyog ZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBJUklYCisiL2Rldi90dHltMCIKKyNlbHNlICAvKiBJUklY ICovCisjaWZkZWYgU1VOT1M0CisiL2Rldi90dHloMCIKKyNlbHNlICAvKiBTVU5PUzQgKi8KKyNp ZmRlZiBTVjY4UjNWNgorIi9kZXYvc2NjMCIKKyNlbHNlICAvKiBTVjY4UjNWNiAqLworI2lmZGVm IE1PVFNWODhSNAorIi9kZXYvY29udHR5MDAiCisjZWxzZSAgLyogTU9UU1Y4OFI0ICovCisjaWZk ZWYgTkVYVAorIi9kZXYvY3VmYSIKKyNlbHNlCisjaWZkZWYgT1NGCisiL2Rldi90dHlkMSIKKyNl bHNlCisjaWZkZWYgU0lOSVgKKyIvZGV2L3R0eWMxIgorI2Vsc2UKKyNpZmRlZiBVTklYCisiL2Rl di9jdWEsIC9kZXYvYWN1LCAvZGV2L3R0eTAsIGV0YyIKKyNlbHNlICAvKiBVTklYICovCisiKHNv cnJ5IG5vIGV4YW1wbGUgYXZhaWxhYmxlKSIKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyog U0lOSVggKi8KKyNlbmRpZiAvKiBPU0YgKi8KKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyog TU9UU1Y4OFI0ICovCisjZW5kaWYgLyogU1Y2OFIzVjYgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8K KyNlbmRpZiAvKiBJUklYICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBE R1VYICovCisjZW5kaWYgLyogQUlYICovCisjZW5kaWYgLyogTV9YRU5JWCAqLworI2VuZGlmIC8q IENLX1NDTzMyVjQgKi8KKyNlbmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIFVOSVhXQVJF ICovCisjZW5kaWYgLyogUU5YNiAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIE9TSyAq LworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyog X19GcmVlQlNEX18gKi8KKyNlbmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogSFBVWDEwICovCisj ZW5kaWYgLyogU09MQVJJUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLwor CSAgICk7Cit9CisKKy8qICBDIEsgXyBFIFIgUiBTIFQgUiAgLS0gIFJldHVybiBtZXNzYWdlIGZy b20gbW9zdCByZWNlbnQgc3lzdGVtIGVycm9yICovCisKKyNpZmRlZiBDS1JPT1QKK2V4dGVybiBp bnQgY2tyb290ZXJyOworI2VuZGlmIC8qIENLUk9PVCAqLworCitjaGFyICoKK2NrX2VycnN0cigp IHsKKyNpZmRlZiBVU0VfU1RSRVJST1IKKyNpZm5kZWYgQ0tfQU5TSUxJQlMKKyAgICAvKiBTaG91 bGQgaGF2ZSBiZWVuIGRlY2xhcmVkIGluIDxzdHJpbmcuaD4gKi8KK19QUk9UT1RZUCggY2hhciAq IHN0cmVycm9yLCAoaW50KSApOworI2VuZGlmIC8qIENLX0FOU0lMSUJTICovCisjaWZkZWYgQ0tS T09UCisgICAgaWYgKGNrcm9vdGVycikKKyAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOworI2Vu ZGlmIC8qIENLUk9PVCAqLworICAgIHJldHVybihzdHJlcnJvcihlcnJubykpOworI2Vsc2UgIC8q ICFVU0VfU1RSRVJST1IgKi8KKyNpZmRlZiBWTVMKKyAgICBleHRlcm4gY2hhciAqIGNrdm1zZXJy c3RyKHVuc2lnbmVkIGxvbmcpOworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisg ICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAgICByZXR1 cm4oY2t2bXNlcnJzdHIoMEwpKTsKKyNlbHNlICAvKiAhVk1TICovCisjaWZkZWYgQlNENDQKKyNp ZmRlZiBfXzM4NkJTRF9fCisjaWZuZGVmIE5EU1lTRVJSTElTVAorICAgIGV4dGVybiBpbnQgc3lz X25lcnI7CisgICAgZXh0ZXJuIGNoYXIgKnN5c19lcnJsaXN0W107CisjZW5kaWYgLyogTkRTWVNF UlJMSVNUICovCisjZWxzZSAgLyogIV9fMzg2QlNEX18gKi8KKyNpZm5kZWYgX19ic2RpX18KKyNp Zm5kZWYgTkRTWVNFUlJMSVNUCisgICAgZXh0ZXJuIGludCBzeXNfbmVycjsKKyAgICBleHRlcm4g Y29uc3QgY2hhciAqY29uc3Qgc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZU0VSUkxJU1Qg Ki8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNpZmRl ZiBDS1JPT1QKKyAgICBpZiAoY2tyb290ZXJyKQorICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7 CisgICAgZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLworICAgIGlmIChlcnJubyA+PSBzeXNfbmVy cikKKyAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiByYW5nZSIpOworICAgIGVsc2UK KyAgICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10pOworI2Vsc2UgLyogIUJT RDQ0ICovCisjaWZkZWYgQVRUU1YKKyNpZm5kZWYgTkRTWVNFUlJMSVNUCisgICAgZXh0ZXJuIGlu dCBzeXNfbmVycjsKKyAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBO RFNZU0VSUkxJU1QgKi8KKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAoY2tyb290ZXJyKQorICAgICAg cmV0dXJuKCJPZmYgbGltaXRzIik7CisgICAgZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLworICAg IGlmIChlcnJubyA+PSBzeXNfbmVycikKKyAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBv ZiByYW5nZSIpOworICAgIGVsc2UKKyAgICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtl cnJub10pOworI2Vsc2UgLyogIUFUVFNWICovCisjaWZkZWYgQlNENAorI2lmbmRlZiBORFNZU0VS UkxJU1QKKyAgICBleHRlcm4gaW50IHN5c19uZXJyOworICAgIGV4dGVybiBjaGFyICpzeXNfZXJy bGlzdFtdOworI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLworI2lmZGVmIENLUk9PVAorICAgIGlm IChja3Jvb3RlcnIpCisgICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyAgICBlbHNlCisjZW5k aWYgLyogQ0tST09UICovCisgICAgaWYgKGVycm5vID49IHN5c19uZXJyKQorICAgICAgcmV0dXJu KCJFcnJvciBudW1iZXIgb3V0IG9mIHJhbmdlIik7CisgICAgZWxzZQorICAgICAgcmV0dXJuKChj aGFyICopIHN5c19lcnJsaXN0W2Vycm5vXSk7CisjZWxzZQorI2lmZGVmIE9TMgorI2lmbmRlZiBO RFNZU0VSUkxJU1QKKyAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBO RFNZU0VSUkxJU1QgKi8KKyNpZmRlZiBOVAorICAgIGV4dGVybiBpbnRfc3lzX25lcnI7CisjZW5k aWYgLyogTlQgKi8KKyAgICBjaGFyICplOworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3Rl cnIpCisgICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAg ICBlID0gKGVycm5vID4gLTEKKyNpZmRlZiBOVAorICAgICAgICAgJiYgZXJybm8gPD0gX3N5c19u ZXJyCisjZW5kaWYgLyogTlQgKi8KKyAgICAgICAgICkgPworI2lmZGVmIE5UCisgICAgICAgICAo Y2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10KKyNlbHNlIC8qIE5UICovCisgICAgICAgICAvKiBJ IGRvbid0IGtub3cgaG93IHRvIGdldCBhIENMSUIgZXJyb3Igc3RyaW5nIGluIE9TLzIgKi8KKyAg ICAgICAgIHN0cmVycm9yKGVycm5vKQorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgOiAi IjsKKyAgICByZXR1cm4oZSA/IGUgOiAiIik7CisjZWxzZSAvKiBPUzIgKi8KKyAgICByZXR1cm4o IiIpOworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBBVFRT ViAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVVNF X1NUUkVSUk9SICovCit9CisKKyNpZmRlZiBQQVRURVJOUworLyoKKyAgRmlsZW5hbWUgcGF0dGVy biByZWNvZ25pdGlvbiBsaXN0cyBmb3IgYXV0b21hdGljIHRleHQvYmluYXJ5IHN3aXRjaGluZy4K KyAgVGhlc2UgYXJlIHNvbWV3aGF0IHBhc3NlIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiBzY2FuZmls ZSgpICAoNy4wKS4KKyAgQnV0IHdpdGggdGhlIGFkZGl0aW9uIG9mIEZUUCBbTV1HRVQsIHRoZXkn cmUgYmFjayBpbiBzdHlsZSAoOC4wKS4KKworICBBbHRob3VnaCwgd2l0aCBGVFAgdGhlIGxpc3Rz IG5lZWQgdG8gYmUgdXNlZCBpbiB0aGUgcmV2ZXJzZS4gIFdpdGgKKyAgS2VybWl0IHRoZSBsaXN0 IGlzIHVzZWQgdG8gaW1wbHkgdGhlIHR5cGVzIG9mIHRoZSBsb2NhbCBzeXN0ZW0uICBXaGVyZWFz CisgIHdpdGggRlRQLCB0aGUgbGlzdCBtdXN0IGJlIHVzZWQgdG8gaW1wbHkgdGhlIHR5cGUgb2Yg dGhlIHJlbW90ZSBzeXN0ZW0uCisgIFRoZXJlZm9yZSwgYWxsIHBsYXRmb3JtcyBtdXN0IG5vdyBz dXBwb3J0IGFsbCBvZiB0aGUgbGlzdHMuCisqLworY2hhciAqdHh0cGF0dGVybnNbRlRQQVRURVJO UysxXSA9IHsgTlVMTCwgTlVMTCB9OworY2hhciAqYmlucGF0dGVybnNbRlRQQVRURVJOUysxXSA9 IHsgTlVMTCwgTlVMTCB9OworLyoKKyAgRGVmYXVsdCBwYXR0ZXJuIGxpc3RzIGZvciBlYWNoIHBs YXRmb3JtLi4uCisKKyAgTk9URTogSW4gbW9zdCBjYXNlcyB3ZSBsZWF2ZSAiLmhscCIsICIuaW5p IiwgYW5kICIuc2NyIiBhbG9uZTsgYWx0aG91Z2ggdGhleQorICBhcmUgdHJhZGl0aW9uYWxseSB0 ZXh0IHR5cGVzLCB0aGV5IGFyZSBiaW5hcnkgaW4gV2luZG93cy4gIFNvIHRoZXkgYXJlCisgIGhh bmRsZWQgYnkgdGhlIHByZXZhaWxpbmcgU0VUIEZJTEUgVFlQRSwgcmF0aGVyIHRoYW4gYXV0b21h dGljYWxseS4KKyAgU2ltaWxhcmx5IGZvciAiLmRhdCIsICIuaW5mIiwgYW5kIHNvIG9uLiAgQWxz byAiLnBzIiBzaW5jZSBQb3N0U2NyaXB0IGZpbGVzCisgIGFyZSBub3QgYWx3YXlzIHRleHQuICAi LmxvZyIgaXMgb21pdHRlZCBzaW5jZSBsb2dzIGNhbiBiZSB0ZXh0IG9yIGJpbmFyeSwKKyAgZXhj ZXB0IGluIFZNUyB0aGV5IGFyZSB1c3VhbGx5IHRleHQsIGV0YyBldGMuCisKKyAgTGF0ZXIgKFNl cCAyMDAzKTogQWRkIFBvc3RTY3JpcHQgdG8gYmluYXJ5IHBhdHRlcm5zLgorKi8KK3N0YXRpYyBj aGFyICp0eHRwW1NZU19NQVhdW0ZUUEFUVEVSTlNdID0geworICAgIC8qIFVOS05PV04gKi8gewor CU5VTEwsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFVOSVggKi8KKyAgICAiKi50eHQiLCIq LmMiLCIqLmgiLCIqLnIiLCIqLnciLCIqLmNwcCIsIiouY2MiLCIqLmtzYyIsIiouYndyIiwiKi51 cGQiLAorICAgICIqLmh0bWwiLCIqLmh0bSIsIioubXNzIiwiKi50ZXgiLCIqLm5yIiwiW01tXWFr ZWZpbGUiLCAiKi5oZXgiLCAiKi5ocXgiLAorICAgICIqLmZvciIsIiouZjc3IiwiKi5mIiwiKi5G IiwiKi5zIiwiKi5wYXMiLCIqLmphdmEiLCIqLmVsIiwiKi5saXNwIiwiKi5zaCIsCisgICAgIiou bTQiLCIqLnBlcmwiLCIqLnBsIiwiKi5wb2QiLCIqLnBtIiwiKi5hd2siLCIqLnNubyIsIiouc3B0 IiwiKi5zZWQiLAorICAgICIqLmtzYyIsIiouVFhUIiwgIipyZWFkLm1lIiwgIipSRUFELk1FIiwg Ii4qIiwgIiovLioiLCAiKi5tZW0iLCIqLm1hYyIsCisgICAgTlVMTAorICAgIH0sCisgICAgewkJ CQkJLyogV0lOMzIgKi8KKyAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwiKi5i YXQiLCIqLmNtZCIsIiouamF2IiwiKi5hc20iLCAiKi5oZXgiLAorICAgICIqLmhxeCIsICIqLmMi LCAiKi5oIiwgIiouY3BwIiwgIiouaHBwIiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCisgICAg IiouamF2YSIsICIqLmJ3ciIsICIqLnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwg Im1ha2VmaWxlIiwKKyAgICAiKi5tZW0iLCIqLm1hYyIsIiouY2MiLCIqLnBsIiwiKi5wb2QiLCIq LnBtIiwiKi5tNCIsTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVk1TICovCisgICAgIiouY29t IiwiKi50eHQiLCIqLmMiLCAgIiouZm9yIiwiKi5wYXMiLCIqLnJubyIsIioucm5oIiwiKi5tYXIi LCIqLmJsaSIsCisgICAgIiouaGxwIiwiKi5tc3MiLCIqLmRvYyIsIiouYndyIiwiKi5jbGQiLCIq LmhleCIsIiouYmFzIiwiKi5pbmkiLCIqLmxvZyIsCisgICAgIioubW1zIiwiKi5vcHQiLCIqLmtz YyIsIioucGVybCIsIioucGwiLCIqLnBvZCIsIioucG0iLCIqLnNubyIsIiouc3B0IiwKKyAgICAi Ki5tZW0iLE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIE9TMiAqLworICAgICIqLnR4dCIsIiou a3NjIiwiKi5odG0iLCIqLmh0bWwiLCIqLmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsICIq LmhleCIsCisgICAgIiouaHF4IiwgIiouYyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAiKi5j eHgiLCAiKi5jeHgiLCAiKi53IiwKKyAgICAiKi5qYXZhIiwgIiouYndyIiwgIioudXBkIiwgIiou bWFrIiwgInJlYWQubWUiLCAiKi5tYXAiLCAibWFrZWZpbGUiLAorICAgIE5VTEwKKyAgICB9LAor ICAgIHsJCQkJCS8qIERPUyAqLworICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmJhdCIs IiouY21kIiwiKi5qYXYiLCIqLmFzbSIsICIqLmhleCIsCisgICAgIiouaHF4IiwgIiouYyIsICIq LmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53IiwKKyAgICAiKi5i d3IiLCAiKi51cGQiLCAiKi5tYWsiLCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsIE5V TEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFRPUFMtMTAgKi8KKyAgICAiKi5jbWQiLCIqLmhscCIs IiouZG9jIiwiKi5pbmkiLCIqLnR4dCIsIioubWFjIiwiKi5mb3IiLCIqLnNhaSIsIiouYmxpIiwK KyAgICAiKi5wYXMiLCIqLnNubyIsIiouc3B0IiwiKi5wY2wiLCIqLm1zcyIsIioucm5vIiwiKi5i MzYiLCIqLnRleCIsIioucHViIiwKKyAgICAiKi5yZXEiLCIqLnIzNiIsIioubWVtIiwiKi5id3Ii LCIqLmNjbCIsIiouY3RsIiwiKi5ybmgiLCIqLmtzYyIsTlVMTAorICAgIH0sCisgICAgewkJCQkJ LyogVE9QUy0yMCAqLworICAgICIqLmNtZCIsIiouaGxwIiwiKi5kb2MiLCIqLmluaSIsIioudHh0 IiwiKi5tYWMiLCIqLmZvciIsIiouc2FpIiwiKi5ibGkiLAorICAgICIqLnBhcyIsIiouc25vIiwi Ki5zcHQiLCIqLnBjbCIsIioubXNzIiwiKi5ybm8iLCIqLmIzNiIsIioudGV4IiwiKi5wdWIiLAor ICAgICIqLnJlcSIsIioucjM2IiwiKi5tZW0iLCIqLmJ3ciIsIiouY2NsIiwiKi5jdGwiLCIqLnJu aCIsIioua3NjIixOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLworICAg ICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmh0bWwiLCIqLmJhdCIsICIqLmNtZCIsIiouamF2 IiwiKi5hc20iLCIqLmhleCIsCisgICAgIiouaHF4IiwiKi5jIiwgICIqLmgiLCAgIioudyIsICAg IiouamF2YSIsIiouYndyIiwiKi51cGQiLCIqLnR0cCIsIiouY20iLAorICAgICIqLnBsMSIsIiou ZW1hY3MiLCAicmVhZC5tZSIsICIqLnBsIiwgIm1ha2VmaWxlIiwgTlVMTAorICAgIH0sCisgICAg ewkJCQkJLyogREcgQU9TL1ZTICovCisgICAgIioudHh0IiwgIiouYyIsICIqLmgiLCAiKi53Iiwg IiouZXIiLCAiKi5id3IiLCAiKi51cGQiLCAicmVhZC5tZSIsCisgICAgIiouY2xpIiwgIioua3Nj IiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogT1NLICovCisgICAgIiouYyIsIiouY3BwIiwi Ki5oIiwiKi5hIiwiKmFrZWZpbGUiLCAvKiBwcm9ncmFtIHNvdXJjZXMgKi8KKyAgICAiKi5mb3Ii LCIqLmY3NyIsIiouZiIsIiouRiIsIioucyIsIioucGFzIiwiKi5qYXZhIiwiKi5lbCIsIioubGlz cCIsCisgICAgIiouc2giLCIqLnBlcmwiLCIqLmF3ayIsIiouc25vIiwiKi5zcHQiLCIqLnNlZCIs CisgICAgIioudHh0IiwiKi53IiwJCQkvKiBnZW5lcmFsIHRleHQgKi8KKyAgICAiKi5rc2MiLCIq LmJ3ciIsIioudXBkIiwKKyAgICAiKi5odG1sIiwiKi5odG0iLCIqLm1zcyIsIioudGV4IiwiKi5u ciIsIiouaGV4IiwgIiouaHF4IiwKKyAgICAiKi5UWFQiLCAiKnJlYWQubWUiLCAiKlJFQUQuTUUi LCAiLioiLCAiKi8uKiIsCisgICAgTlVMTAorICAgIH0KK307CisKKy8qIE5vdGU6IC5ET0MgYWRk ZWQgdG8gKHNvbWUpIGJpbmFyeSBwYXR0ZXJucyBKdW5lIDE5OTguLi4gTWljcm9zb2Z0IHdpbnMu ICovCisKK3N0YXRpYyBjaGFyICpiaW5wW1NZU19NQVhdW0ZUUEFUVEVSTlNdID0geworICAgIHsJ CQkJCS8qIFVOS05PV04gKi8KKyAgICBOVUxMLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBV TklYICovCisgICAgIiouZ3oiLCIqLloiLCIqLnRneiIsIiouZ2lmIiwgIioudGFyIiwiKi56aXAi LCIqLm8iLCIqLnNvIiwiKi5hIiwiKi5vdXQiLAorICAgICIqLmV4ZSIsICIqLmpwZyIsICIqLmpw ZWciLCAiKi50aWYiLCIqLnRpZmYiLCAiKi5wZGYiLCAiKi5zby4qIiwgIiouY2xhc3MiLAorICAg ICIqLnJwbSIsICIqLmJtcCIsICIqLmJ6MiIsICIqLkJNUCIsICIqLmRsbCIsICIqLmRvYyIsICIq LnZ4ZCIsICIqLmRjeCIsCisgICAgIioueGwqIiwgIioubHpoIiwgIioubGh6IiwgIiouYXUiLCAi Ki52b2MiLCAiKi5tcGciLCAiKi5tcGVnIiwiW3drXWVybWl0IiwKKyAgICAiKi5wcyIsIE5VTEwK KyAgICB9LAorICAgIHsJCQkJCS8qIFdJTjMyICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIiou b2JqIiwgIiouY29tIiwgIiouZ2lmIiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAi Ki5jbGFzcyIsIiouY2xhIiwiKi5kbGwiLCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5s aWIiLCAiKi5pY28iLAorICAgICIqLmJtcCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgICIq LnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIsCisgICAgIioucGRmIiwgIioubHpoIiwg IioudnhkIiwgIiouc25kIiwgIiouYXUiLCAiKiAudm9jIiwgIioubXBnIiwgIioubXBlZyIsCisg ICAgIioucHMiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBWTVMgKi8KKyAgICAiKi5leGUi LCIqLm9iaiIsIiouYmFrIiwiKi5iaW4iLCIqLmFkZiIsIiouc3RiIiwiKi5tYWkiLCIqLnN5cyIs IiouZG1wIiwKKyAgICAiKi5wcyIsICIqLmRhdCIsIioucGFyIiwgTlVMTAorICAgIH0sCisgICAg ewkJCQkJLyogT1MyICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwg IiouZ2lmIiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAiKi5jbGFzcyIsICIqLmNs YSIsICIqLmRsbCIsICIqLmRydiIsICIqLm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIs CisgICAgIiouYm1wIiwgIioudGlmIiwgIioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54bCoi LCAiKi5kb2MiLCAiKi52eGQiLAorICAgICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgTlVMTAor ICAgIH0sCisgICAgewkJCQkJLyogRE9TICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIioub2Jq IiwgIiouY29tIiwgIiouZ2lmIiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAiKi5j bGEiLCAiKi5kbGwiLCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28i LAorICAgICIqLmJtcCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwq IiwgIiouZG9jIiwgIioudnhkIiwKKyAgICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsIE5VTEwK KyAgICB9LAorICAgIHsJCQkJCS8qIFRPUFMxMCAqLworICAgICIqLmV4ZSIsIiouc2F2IiwiKi5i aW4iLCIqLnJpbSIsIioucmVsIiwiKi51bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAorICAg ICIqLnBzIiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVE9QUzIwICovCisgICAgIiouZXhl IiwiKi5zYXYiLCIqLmJpbiIsIioucmltIiwiKi5yZWwiLCIqLnVudiIsIioubGliIiwiKi50YXAi LCIqLmR2aSIsCisgICAgIioucHMiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBTVFJBVFVT IFZPUyAqLworICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIs ICIqLmpwZyIsICIqLndhdiIsICIqLnJhbSIsCisgICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5k bGwiLCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAorICAgICIq LmJtcCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9j IiwgIioudnhkIiwKKyAgICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsICIqLnBtIiwgTlVMTAor ICAgIH0sCisgICAgewkJCQkJLyogREcgKi8KKyAgICAiKi5vYiIsICIqLnByIiwgIiouZG1wIiwg IioucHMiLCBOVUxMCisgICAgfSwKKyAgICB7IC8qIE9TSyAqLworICAgICIqLmd6IiwiKi5aIiwi Ki56IiwiKi50Z3oiLCIqLmxoeiIsIioudGFyIiwJLyogYXJjaGl2ZXJzICovCisgICAgIiouemlw IiwiKi5hciIsIiouem9vIiwiKi5ycG0iLCIqLmx6aCIsCisgICAgLyogb2JqZWN0IGZpbGVzLCBs aWJyYXJpZXMsIGV4ZWN1dGFibGVzICovCisgICAgIiouciIsIioubCIsIiouZXhlIiwgIiouZGxs IiwgIiouc28uKiIsICIqLmNsYXNzIiwKKyAgICAvKiBpbWFnZXMgKi8KKyAgICAiKi5naWYiLCAi Ki5qcGciLCAiKi5qcGVnIiwgIioudGlmIiwiKi50aWZmIiwgIioucGRmIiwgIioucHMiLAorICAg ICIqLmJtcCIsICIqLmJ6MiIsICIqLkJNUCIsIioucGN4IiwKKyAgICBOVUxMCisgICAgfQorfTsK KworLyoKKyAgU2V0IHVwIGRlZmF1bHQgcGF0dGVybiBsaXN0cyBzbyB0aGV5IGNhbiBiZSBmcmVl ZCBhbmQgcmUtbWFsbG9jJ2QuCisgIEVhY2ggcGF0dGVybiBsaXN0IG11c3QgdGVybWluYXRlZCBi eSBhIG51bGwgZWxlbWVudC4KKyovCitWT0lECitpbml0cGF0KCkgeworICAgIGludCBpOworICAg IGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKKyAgICAgICAgdHh0cGF0dGVybnNb aV0gPSBOVUxMOworICAgICAgICBiaW5wYXR0ZXJuc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGZv ciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKKyNpZmRlZiBVTklYCisgICAgICAgIG1h a2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfVU5JWF1baV0pOworI2Vsc2UgLyogVU5J WCAqLworI2lmZGVmIE9TMgorI2lmZGVmIE5UCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJu c1tpXSksdHh0cFtTWVNfV0lOMzJdW2ldKTsKKyNlbHNlIC8qIE5UICovCisgICAgICAgIG1ha2Vz dHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfT1MyXVtpXSk7CisjZW5kaWYgLyogTlQgKi8K KyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIFZNUworICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVy bnNbaV0pLHR4dHBbU1lTX1ZNU11baV0pOworI2Vsc2UgLyogVk1TICovCisjaWZkZWYgU1RSQVRV UworICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1ZPU11baV0pOwor I2Vsc2UgLyogU1RSQVRVUyAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAgIG1ha2VzdHIo Jih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfREddW2ldKTsKKyNlbHNlIC8qIGRhdGFnZW5lcmFs ICovCisjaWZkZWYgT1NLCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtT WVNfT1NLXVtpXSk7CisjZWxzZSAvKiBPU0sgKi8KKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRl cm5zW2ldKSx0eHRwW1NZU19VTktdW2ldKTsKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgIGlmICghdHh0cFtpXSkK KyAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7 IGkrKykgeworI2lmZGVmIFVOSVgKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxi aW5wW1NZU19VTklYXVtpXSk7CisjZWxzZSAvKiBVTklYICovCisjaWZkZWYgT1MyCisjaWZkZWYg TlQKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19XSU4zMl1baV0p OworI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5w W1NZU19PUzJdW2ldKTsKKyNlbmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICovCisjaWZkZWYg Vk1TCisgICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVk1TXVtpXSk7 CisjZWxzZSAvKiBWTVMgKi8KKyNpZmRlZiBTVFJBVFVTCisgICAgICAgIG1ha2VzdHIoJihiaW5w YXR0ZXJuc1tpXSksYmlucFtTWVNfVk9TXVtpXSk7CisjZWxzZSAvKiBTVFJBVFVTICovCisjaWZk ZWYgZGF0YWdlbmVyYWwKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZ U19ER11baV0pOworI2Vsc2UgLyogZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBPU0sKKyAgICAgICAg bWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19PU0tdW2ldKTsKKyNlbHNlIC8qIE9T SyAqLworICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1VOS11baV0p OworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyog U1RSQVRVUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8q IFVOSVggKi8KKyAgICAgICAgaWYgKCFiaW5wW2ldKQorICAgICAgICAgIGJyZWFrOworICAgIH0K K30KKworLyoKKyAgbSBhIHQgYyBoIG4gYSBtIGUgIC0tICBDb21wYXJlIGZpbGVuYW1lIHdpdGgg dGV4dCAmIGJpbmFyeSBuYW1lIHBhdHRlcm5zLgorCisgIFJldHVybnM6CisgICAgMCBpZiBuYW1l IG1hdGNoZXMgYSB0ZXh0IHBhdHRlcm4gYnV0IG5vdCBhIGJpbmFyeSBwYXR0ZXJuLgorICAgIDEg aWYgbmFtZSBtYXRjaGVzIGEgYmluYXJ5IHBhdHRlcm4gYnV0IG5vdCBhIHRleHQgcGF0dGVybi4K KyAgIC0xIGlmIG5hbWUgbWF0Y2hlcyBubyBwYXR0ZXJucy4KKyAgIC0yIGlmIG5hbWUgbWF0Y2hl cyBhIGJpbmFyeSBwYXR0ZXJuIGFuZCBhIHRleHQgcGF0dGVybi4KKyovCitpbnQKK21hdGNobmFt ZShmaWxlbmFtZSwgbG9jYWwsIG9zKSBjaGFyICogZmlsZW5hbWU7IGludCBsb2NhbDsgaW50IG9z OyB7CisgICAgaW50IHJjID0gLTE7CQkJLyogUmV0dXJuIGNvZGUgKi8KKyAgICBjaGFyICogbmFt ZSwgKiBwOworI2lmZGVmIE9TMk9SVU5JWAorICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsK KyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKworICAgIG5hbWUgPSBmaWxlbmFtZSA/IGZpbGVuYW1l IDogIiI7CS8qIENvcHkgb2Ygb3JpZ2luYWwgYXJnICovCisgICAgaWYgKHBhdHRlcm5zICYmICpu YW1lKSB7CQkvKiBJZiBQQVRURVJOUyBPTi4uLiAqLworCWludCBpOworCisjaWZkZWYgT1MyT1JV TklYCisJaWYgKGNrbWF0Y2goIiouflsxLTldKn4iLG5hbWUsMSwxKSkgeyAvKiBOYW1lIGhhcyBi YWNrdXAgc3VmZml4PyAqLworCSAgICBpbnQgazsKKwkgICAgayA9IGNrc3RybmNweSh0bXBidWYs bmFtZSxDS01BWFBBVEgrMSk7IC8qIFllcywgY29weSBhbmQgc3RyaXAgKi8KKwkgICAgZm9yIChp ID0gayAtIDM7IGkgPiA0OyBpLS0pIHsKKwkJaWYgKHRtcGJ1ZltpXSA9PSAnficgJiYgdG1wYnVm W2ktMV0gPT0gJy4nKSB7CisJCSAgICB0bXBidWZbaS0xXSA9IE5VTDsKKwkJICAgIGJyZWFrOwor CQl9CisJICAgIH0KKwkgICAgbmFtZSA9IHRtcGJ1ZjsJCS8qIEFuZCBwb2ludCB0byBzdHJpcHBl ZCBjb3B5ICovCisJfQorI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworCXpzdHJpcChuYW1lLCZwKTsJ CS8qIFN0cmlwIHBhdGhuYW1lIHRvbyAqLworCW5hbWUgPSBwOworCisgICAgICAgIGlmIChsb2Nh bCkgeworICAgICAgICAgICAgaWYgKHR4dHBhdHRlcm5zWzBdKSB7CS8qIFNlYXJjaCB0ZXh0IHBh dHRlcm5zICovCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYg dHh0cGF0dGVybnNbaV07IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaCh0 eHRwYXR0ZXJuc1tpXSxuYW1lLGZpbGVjYXNlLDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICByYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChiaW5wYXR0ZXJuc1swXSkgewkvKiBBbmQgc2VhcmNoIGJpbmFyeSBwYXR0ZXJucyAqLworICAg ICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBhdHRlcm5zW2ld OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNrbWF0Y2goYmlucGF0dGVybnNbaV0s bmFtZSxmaWxlY2FzZSwxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAocmMgPiAt MSkgPyAtMiA6IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwl9IGVsc2Ugewor ICAgICAgICAgICAgaWYgKG9zID49IDAgJiYgb3MgPCBTWVNfTUFYKSB7CisJCWlmICh0eHRwW29z XVswXSkgeworCQkgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cFtvc11baV07 IGkrKykgeworCQkJaWYgKGNrbWF0Y2godHh0cFtvc11baV0sbmFtZSxmaWxlY2FzZSwxKSkgewor CQkJICAgIHJjID0gMDsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQlpZiAo YmlucFtvc11bMF0pIHsKKwkJICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBb b3NdW2ldOyBpKyspIHsKKwkJCWlmIChja21hdGNoKGJpbnBbb3NdW2ldLG5hbWUsZmlsZWNhc2Us MSkpIHsKKwkJCSAgICByYyA9IChyYyA+IC0xKSA/IC0yIDogMTsKKwkJCSAgICBicmVhazsKKwkJ CX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjEx MSwibWF0Y2huYW1lIixuYW1lLHJjKTsKKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIFBB VFRFUk5TICovCisKKyNpZmRlZiBVTklDT0RFCisjaWZuZGVmIE5PRVZFTk1BWAorI2RlZmluZSBF VkVOTUFYCisjZW5kaWYgLyogTk9FVkVOTUFYICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworCisv KiAgUyBDIEEgTiBGIEkgTCBFICAtLSAgQW5hbHl6ZSBhIGZpbGUncyBjb250ZW50cyAgKi8KKwor LyoKKyAgQ2FsbCB3aXRoOgorICAgIG5hbWU6ICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBleGlzdGlu ZyBmaWxlLgorICAgIGZsYWc6ICAgIFBvaW50ZXIgdG8gaW50IGluIHdoaWNoIHRvIHJldHVybiBh ZGRpdGlvbmFsIG51bWVyaWMgZGF0YS4KKworICBSZXR1cm5zOgorICAgIC0xIG9uIGZhaWx1cmUg KHRvIG9wZW4gZmlsZSBvciB0byByZWFkIGZyb20gaXQpLgorICAgIEludGVnZXIsIDAuLjQsIG9u IHN1Y2Nlc3MgaW5kaWNhdGluZyBmaWxlIHR5cGU6CisgICAgIDAgPSA3LWJpdCB0ZXh0IChmbGFn ID0gLTEpCisgICAgIDEgPSBVVEYtOCB0ZXh0IChmbGFnID0gLTEpCisgICAgIDIgPSBVQ1MtMiB0 ZXh0IChmbGFnID0gIDA6IGJpZy1lbmRpYW47IGZsYWcgPSAxOiBsaXR0bGUtZW5kaWFuKQorICAg ICAzID0gOC1iaXQgdGV4dCAoZmxhZyA9ICAwOiBubyBDMSBieXRlczsgZmxhZyA9IDE6IGluY2x1 ZGVzIEMxIGJ5dGVzKQorICAgICA0ID0gVGV4dCAgICAgICAodHlwZSB1bmtub3duKQorICAgICA1 ID0gYmluYXJ5ICAgICAoZmxhZyA9IC0xKQorCisgIElmIFVOSUNPREUgaXMgZGVmaW5lZDoKKwor ICAgMS4gSWYgZmlsZSBiZWdpbnMgd2l0aCBhIHZhbGlkIEJPTSwgaXQgaXMgYmVsaWV2ZWQuICBP dGhlcndpc2Ugd2UKKyAgICAgIHJlYWQgdGhlIGZpcnN0IDRLIG9mIHRoZSBmaWxlIChzaW5jZSBp dCBtaWdodCBiZSBlbWFpbCB3aXRoIHZlcmJvc2UKKyAgICAgIGhlYWRlcnMpIGFuZCBhbmFseXpl IGl0OgorCisgICAyLiBJZiBmaWxlIGNvbnRhaW5zIG9ubHkgdmFsaWQgVVRGLTggc2VxdWVuY2Vz LCB3ZSBjYWxsIGl0IFVURi04OworICAgICAgb3RoZXJ3aXNlOgorCisgICAzLiBJZiB0aGUgZmls ZSBjb250YWlucyBsb3RzIG9mIGFsdGVybmF0ZSAwIGJ5dGVzLCB3ZSBjYWxsIGl0IFVDUy0yLCBh bmQKKyAgICAgIHNldCB0aGUgcG9sYXJpdHkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIHByZXBv bmRlcmFuY2Ugb2YgdGhlbSBhcmUgaW4KKyAgICAgIGV2ZW4gb3Igb2RkIHBvc2l0aW9uczsgb3Ro ZXJ3aXNlOgorCisgICA0LiBJZiBFVkVOTUFYIGlzIGRlZmluZWQgYW5kIHRoZSBmaWxlIGNvbnRh aW5zIGxvdHMgb2YgYWx0ZXJuYXRlIGJ5dGVzIHRoYXQKKyAgICAgIGFyZSBpZGVudGljYWwsIGV2 ZW4gaWYgdGhleSBhcmVuJ3QgemVybywgYW5kIHRoZSBudW1iZXIgb2Ygc3VjaCBieXRlcworICAg ICAgaXMgYXQgbGVhc3QgZm91ciB0aW1lcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXhpbXVtIHJ1biBv ZiBhbHRlcm5hdGluZworICAgICAgaWRlbnRpY2FsIGJ5dGVzIG9mIHRoZSBvcHBvc2l0ZSBwb2xh cml0eSwgd2UgY2FsbCBpdCBVQ1MtMjsgb3RoZXJ3aXNlOgorCisgICA1LiBJZiB0aGUgZmlsZSBj b250YWluZWQgbm8gYnl0ZXMgd2l0aCB0aGVpciA4dGggYml0cyBvbiBhbmQgbm8gY29udHJvbHMK KyAgICAgIG90aGVyIHRoYW4gQ1IsIExGLCBIVCwgYW5kIEZGLCB3ZSBjYWxsIGl0IEFTQ0lJOyBv dGhlcndpc2U6CisKKyAgIDYuIElmIGl0IGNvbnRhaW5zIEMwIGNvbnRyb2wgY2hhcmFjdGVycyBv dGhlciB0aGFuIENSLCBMRiwgSFQsIGFuZCBGRiwgd2UKKyAgICAgIGNhbGwgaXQgYmluYXJ5OyBv dGhlcndpc2U6CisKKyAgIDcuIFdlIGNhbGwgaXQgOC1iaXQgdGV4dCwgY2hhcmFjdGVyIHNldCB1 bmtub3duIChjb3VsZCBiZSBMYXRpbi0xIG9yCisgICAgICBhbnl0aGluZyBlbHNlKS4KKworICAg Tm90ZSB0aGF0IG1hbGZvcm1lZCBVVEYtOCBpcyBub3QgZGlhZ25vc2VkIGFzIFVURi04LgorCisg ICBJZiBVTklDT0RFIGlzIG5vdCBkZWZpbmVkOgorCisgICAxLiBJZiB0aGUgZmlsZSBjb250YWlu cyBDMCBjb250cm9sIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQKKyAgICAg IEZGLCB3ZSBjYWxsIGl0IGJpbmFyeTsgb3RoZXJ3aXNlOgorCisgICAyLiBJZiB0aGUgZmlsZSBj b250YWlucyBhbnkgOC1iaXQgYnl0ZXMsIHdlIGNhbGwgaXQgOC1iaXQgdGV4dDsgb3RoZXJ3aXNl OgorCisgICAzLiBXZSBjYWxsIGl0IDctYml0IHRleHQuCisKKyAgIEluIHRoZSBub24tVW5pY29k ZSBjYXNlLCBVQ1MtMiBpcyBkaWFnbm9zZWQgYXMgYmluYXJ5LCBidXQgVVRGLTggYXMKKyAgIDgt Yml0IHRleHQuCisKKyAgIFRoZXJlIGlzIG5vIHNpZ25pZmljYW50IHNwZWVkIGRpZmZlcmVuY2Ug YmV0d2VlbiB0aGUgVW5pY29kZSBhbmQKKyAgIG5vbi1Vbmljb2RlIGNhc2VzLgorKi8KK2ludAor c2NhbmZpbGUobmFtZSxmbGFnLG5zY2FuZmlsZSkgY2hhciAqIG5hbWU7IGludCAqIGZsYWcsIG5z Y2FuZmlsZTsgeworICAgIEZJTEUgKiBmcDsJCQkJLyogRmlsZSBwb2ludGVyICovCisgICAgdW5z aWduZWQgY2hhciBidWZbU0NBTkZJTEVCVUZdOwkvKiBGaWxlIGRhdGEgYnVmZmVyIGZvciBhbmFs eXNpcyAqLworICAgIGludCB4LCB2YWwgPSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLwor ICAgIGludCByYyA9IC0xOwkJCS8qIFJldHVybiBjb2RlICovCisgICAgaW50IHB2ID0gLTE7CQkJ LyogUGF0dGVybi1tYXRjaCB2YWx1ZSAqLworICAgIGludCBlb2YgPSAwOwkJCS8qIEZsYWcgZm9y IGZpbGUgRU9GIGVuY291bnRlcmVkICovCisgICAgaW50IGJ5dGVzID0gMDsJCQkvKiBUb3RhbCBi eXRlIGNvdW50ICovCisjaWZkZWYgVU5JQ09ERQorICAgIHVuc2lnbmVkIGludCBjMCwgYzE7CQkv KiBGaXJzdCAyIGZpbGUgYnl0ZXMgKGZvciBCT00pICovCisjZW5kaWYgLyogVU5JQ09ERSAqLwor ICAgIGV4dGVybiBpbnQgcGlwZXNlbmQsIGZpbGVwZWVrOworCisgICAgcmVnaXN0ZXIgaW50IGk7 CQkJLyogTG9vcCBjb250cm9sICovCisgICAgaW50IHJlYWRzaXplID0gMDsJCQkvKiBIb3cgbXVj aCB0byByZWFkICovCisgICAgaW50IGVpZ2h0Yml0ID0gMDsJCQkvKiBOdW1iZXIgb2YgYnl0ZXMg d2l0aCA4dGggYml0IG9uICovCisgICAgaW50IGMwY29udHJvbHMgPSAwOwkJCS8qIEMwIG5vbi10 ZXh0IGNvbnRyb2wtY2hhciBjb3VudGVyICovCisgICAgaW50IGMwbm9uaXNvID0gMDsJCQkvKiBD MCBub24tSVNPIGNvbnRyb2wtY2hhciBjb3VudGVyICovCisgICAgaW50IGMxY29udHJvbHMgPSAw OwkJCS8qIEMxIGNvbnRyb2wtY2hhcmFjdGVyIGNvdW50ZXIgKi8KKyAgICB1bnNpZ25lZCBpbnQg YzsJCQkvKiBDdXJyZW50IGNoYXJhY3RlciAqLworICAgIGludCBydW5tYXggPSAwOwkJCS8qIExv bmdlc3QgcnVuIG9mIDAgYnl0ZXMgKi8KKyAgICBpbnQgcnVuemVybyA9IDA7CQkJLyogUnVuIG9m IDAgYnl0ZXMgKi8KKyAgICBpbnQgcGN0emVybyA9IDA7CQkJLyogUGVyY2VudGFnZSBvZiAwIGJ5 dGVzICovCisgICAgaW50IHR4dGN6ID0gMDsKKyNpZmRlZiBDS19DVFJMWgorICAgIGV4dGVybiBp bnQgZW9mbWV0aG9kOworI2VuZGlmIC8qIENLX0NUUkxaICovCisKKyNpZmRlZiBVTklDT0RFCisg ICAgaW50IG5vdHV0ZjggPSAwOwkJCS8qIE5vbnplcm8gaWYgZGVmaW5pdGVseSBub3QgVVRGLTgg Ki8KKyAgICBpbnQgdXRmOHN0YXRlID0gMDsJCQkvKiBVVEYtOCByZWNvZ25pemVyIHN0YXRlICov CisgICAgaW50IG9kZHplcm8gPSAwOwkJCS8qIE51bWJlciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0 aW9ucyAqLworICAgIGludCBldmVuemVybyA9IDA7CQkJLyogYW5kIGluIGV2ZW4gcG9zaXRpb25z ICovCisgICAgaW50IGxmbnVsID0gMDsJCQkvKiBOdW1iZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNl cyAqLworICAgIGludCBjcmxmID0gMDsJCQkvKiBOdW1iZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAq LworI2Vsc2UKKyAgICBpbnQgbm90dXRmOCA9IDE7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisj aWZkZWYgQ09NTUVOVAorI2lmZGVmIEVWRU5NQVgKKyAgICBpbnQgb2RkcnVuID0gMCwgb2RkbWF4 ID0gMCwgb2RkYnl0ZSA9IDAsIG9kZG1heGJ5dGUgPSAwOworICAgIGludCBldmVucnVuID0gMCwg ZXZlbm1heCA9IDAsIGV2ZW5ieXRlID0gMCwgZXZlbm1heGJ5dGUgPSAwOworI2VuZGlmIC8qIEVW RU5NQVggKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYg KHBpcGVzZW5kIHx8IGNhbGlicmF0ZSB8fCBzbmRhcnJheSkgLyogT25seSBmb3IgcmVhbCBmaWxl cyAqLworICAgICAgcmV0dXJuKC0xKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICBkZWJ1ZyhG MTExLCJzY2FuZmlsZSIsbmFtZSxuc2NhbmZpbGUpOworI2lmZGVmIFBBVFRFUk5TCisgICAgaWYg KCFmaWxlcGVlaykgeworCXB2ID0gbWF0Y2huYW1lKG5hbWUsMSwtMSk7CisJaWYgKHB2IDwgMCkK KwkgIHJjID0gLTE7CisJZWxzZQorCSAgcmMgPSAocHYgPT0gMSkgPyBGVF9CSU4gOiBGVF9URVhU OworCWRlYnVnKEYxMTEsInNjYW5maWxlICFmaWxlcGVlayByZXN1bHQiLG5hbWUscmMpOworCXJl dHVybihyYyk7CisgICAgfQorI2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyNpZmRlZiBWTVMKKy8q IFdlIGRvbid0IHNjYW4gaW4gVk1TIHdoZXJlIHRleHQgZmlsZXMgaGF2ZSB2YXJpb3VzIHJlY29y ZCBmb3JtYXRzIGluICAqLworLyogd2hpY2ggcmVjb3JkIGhlYWRlcnMgY29udGFpbiBzZWVtaW5n bHkgbm9uLXRleHQgYnl0ZXMuICBTbyB0aGUgYmVzdCAgICovCisvKiB3ZSBjYW4gZG8gaW4gVk1T IGlzIHRlbGwgd2hldGhlciB0aGUgZmlsZSBpcyB0ZXh0IG9yIGJpbmFyeSwgcGVyaW9kLiAgKi8K KyAgICB7CisJaW50IGIsIHg7CisJYiA9IGJpbmFyeTsJCQkvKiBTYXZlIGN1cnJlbnQgYmluYXJ5 IHNldHRpbmcgKi8KKwlpZiAoem9wZW5pKFpJRklMRSxuYW1lKSA+IDApIHsJLyogSW4gVk1TIHRo aXMgc2V0cyBiaW5hcnkgKi8KKwkgICAgeCA9IGJpbmFyeTsJCQkvKiBHZXQgcmVzdWx0ICovCisJ ICAgIHpjbG9zZShaSUZJTEUpOwkJLyogQ2xvc2UgdGhlIGZpbGUgKi8KKwkgICAgYmluYXJ5ID0g YjsJCQkvKiBSZXN0b3JlIHByZXZpb3VzIGJpbmFyeSBzZXR0aW5nICovCisJICAgIHJjID0geCA/ IEZUX0JJTiA6IEZUX1RFWFQ7CisJICAgIHZhbCA9IDA7CisJICAgIGdvdG8geHNjYW5maWxlOwor CX0KKyAgICB9CisjZW5kaWYgLyogVk1TICovCisKKyAgICBlb2YgPSAwOwkJCQkvKiBFbmQtb2Yt ZmlsZSByZWFjaGVkIGluZGljYXRvciAqLworI2lmZGVmIE9TMgorICAgIGZwID0gZm9wZW4obmFt ZSwgInJiIik7CQkvKiBPcGVuIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlICovCisjZWxzZQorICAg IGZwID0gZm9wZW4obmFtZSwgInIiKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICghZnAp CQkJCS8qIEZhaWxlZD8gKi8KKyAgICAgIHJldHVybigtMSk7CisKKyAgICB3aGlsZSAoMSkgewkJ CQkvKiBPbmUgb3IgbW9yZSBndWxwcyBmcm9tIGZpbGUgKi8KKwlpZiAoZW9mKSB7CQkJLyogRU9G IGZyb20gbGFzdCB0aW1lPyAqLworCSAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSBhdCBFT0YiLG5h bWUsYnl0ZXMpOworCSAgICBpZiAocnVuemVybyA+IHJ1bm1heCkKKwkgICAgICBydW5tYXggPSBy dW56ZXJvOworCSAgICBicmVhazsKKwl9CisJaWYgKG5zY2FuZmlsZSA8IDApIHsJCS8qIFJlYWRp bmcgd2hvbGUgZmlsZSAqLworCSAgICByZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOworCX0gZWxzZSB7 CQkJLyogUmVhZGluZyBmaXJzdCBuc2NhbmZpbGVlIGJ5dGVzICovCisJICAgIHJlYWRzaXplID0g bnNjYW5maWxlIC0gYnl0ZXM7CisJICAgIGlmIChyZWFkc2l6ZSA8IDEpCisJICAgICAgYnJlYWs7 CisJICAgIGlmIChyZWFkc2l6ZSA+IFNDQU5GSUxFQlVGKQorCSAgICAgIHJlYWRzaXplID0gU0NB TkZJTEVCVUY7CisJfQorCWRlYnVnKEYxMDEsInNjYW5maWxlIHJlYWRzaXplIiwiIixyZWFkc2l6 ZSk7CisJY291bnQgPSBmcmVhZChidWYsMSxyZWFkc2l6ZSxmcCk7IC8qIFJlYWQgYSBidWZmZXIg Ki8KKwlpZiAoY291bnQgPT0gRU9GIHx8IGNvdW50ID09IDApIHsKKwkgICAgZGVidWcoRjExMSwi c2NhbmZpbGUgRU9GIixuYW1lLGNvdW50KTsKKwkgICAgYnJlYWs7CisJfQorCWRlYnVnKEYxMTEs InNjYW5maWxlIGJ1ZmZlciBvayIsbmFtZSxjb3VudCk7CisKKwlpZiAoYnl0ZXMgPT0gMCAmJiBj b3VudCA+IDgpIHsKKwkgICAgLyogUERGIGZpbGVzIGNhbiBsb29rIGxpa2UgdGV4dCBpbiB0aGUg YmVnaW5uaW5nLiAqLworCSAgICBpZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIlUERGLTEuIiw3 LDEpKSB7CisJCWlmIChpc2RpZ2l0KGJ1Zls3XSkpIHsKKwkJICAgIGlmIChidWZbOF0gPT0gJ1ww MTUnIHx8CisJCQljb3VudCA+IDkgJiYgYnVmWzhdID09IFNQICYmIGJ1Zls5XSA9PSAnXDAxNScp IHsKKyNpZmRlZiBERUJVRworCQkJYnVmWzhdID0gTlVMOworCQkJZGVidWcoRjExMCwic2NhbmZp bGUgUERGIixidWYsMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJCWJpbmFyeSA9IDE7CS8qIEJ1 dCB0aGV5IGFyZSBiaW5hcnkuICovCisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9IGVs c2UgaWYgKCFja3N0cmNtcCgoY2hhciAqKWJ1ZiwiJSFQUy1BZG8iLDgsMSkpIHsKKwkJLyogRGl0 dG8gZm9yIFBvc3RTY3JpcHQgKi8KKyNpZmRlZiBERUJVRworCQlpbnQgaTsKKwkJZm9yIChpID0g ODsgaSA8IGNvdW50OyBpKyspIHsKKwkJICAgIGlmIChidWZbaV0gPCAnIScpIHsKKwkJCWJ1Zltp XSA9IE5VTDsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWRlYnVnKEYxMTAsInNjYW5maWxl IFBvc3RTY3JpcHQiLGJ1ZiwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQliaW5hcnkgPSAxOwor CQlicmVhazsKKyNpZm5kZWYgTk9QQ0xTQ0FOCisJICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKChj aGFyICopYnVmLCIpIEhQLVBDTCIsOCwxKSkgeworCQkvKiBIUCBQQ0wgcHJpbnRlciBsYW5ndWFn ZSAqLworI2lmZGVmIERFQlVHCisJCWludCBpOworCQlmb3IgKGkgPSA4OyBpIDwgY291bnQ7IGkr KykgeworCQkgICAgaWYgKGJ1ZltpXSA8ICchJykgeworCQkJYnVmW2ldID0gTlVMOworCQkJYnJl YWs7CisJCSAgICB9CisJCX0KKwkJZGVidWcoRjExMCwic2NhbmZpbGUgUENMIixidWYsMCk7Cisj ZW5kaWYgLyogREVCVUcgKi8KKwkJYmluYXJ5ID0gMTsKKwkJYnJlYWs7CisJICAgIH0gCisjZW5k aWYgLyogTk9QQ0xTQ0FOICovCisjaWZuZGVmIE5PUEpMU0NBTgorCSAgICAgIGVsc2UgaWYgKGJ1 ZlswXSA9PSAnXDAzMycgJiYgKGJ1ZlsxXSA9PSAnRScgfHwgYnVmWzFdID09ICclJykpIHsKKwkJ LyogRGl0dG8gZm9yIFBKTCBKb2IgcHJpbnRlciBoZWFkZXIgKi8KKyNpZmRlZiBERUJVRworCQlp bnQgaTsKKwkJZm9yIChpID0gMjsgaSA8IGNvdW50OyBpKyspIHsKKwkJICAgIGlmIChidWZbaV0g PCAnIScpIHsKKwkJCWJ1ZltpXSA9IE5VTDsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWRl YnVnKEYxMTAsInNjYW5maWxlIFBKTCBKb2IgcHJpbnRlciBoZWFkZXIiLGJ1ZiwwKTsKKyNlbmRp ZiAvKiBERUJVRyAqLworCQliaW5hcnkgPSAxOworCQlicmVhazsKKyNlbmRpZiAvKiBOT1BKTFND QU4gKi8KKwkgICAgfQorCX0KKworI2lmZGVmIFVOSUNPREUKKwlpZiAoYnl0ZXMgPT0gMCAmJiBj b3VudCA+IDEpIHsKKwkgICAgaW50IGluY2xfY250ID0gMDsKKworCSAgICAvKiBGaXJzdCBsb29r IGZvciBCT00gKi8KKworCSAgICBjMCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlswXSYweEZG KTsgLyogRmlyc3QgZmlsZSBieXRlICovCisJICAgIGMxID0gKHVuc2lnbmVkKSgodW5zaWduZWQp YnVmWzFdJjB4RkYpOyAvKiBTZWNvbmQgYnl0ZSAqLworCisJICAgIGlmIChjMCA9PSAweEZFICYm IGMxID09IDB4RkYpIHsJLyogVUNTLTIgQkUgKi8KKwkJcmMgPSBGVF9VQ1MyOworCQl2YWwgPSAw OworCQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBVQ1MyIEJPTSBCRSIsY2tpdG9hKHZhbCkscmMpOwor CQlpbmNsX2NudCsrOworCSAgICB9IGVsc2UgaWYgKGMwID09IDB4RkYgJiYgYzEgPT0gMHhGRSkg eyAvKiBVQ1MtMiBMRSAqLworCQlyYyA9IEZUX1VDUzI7CisJCXZhbCA9IDE7CisJCWRlYnVnKEYx MTEsInNjYW5maWxlIFVDUzIgQk9NIExFIixja2l0b2EodmFsKSxyYyk7CisJCWluY2xfY250Kys7 CisJICAgIH0gZWxzZSBpZiAoY291bnQgPiAyKSBpZiAoYzAgPT0gMHhFRiAmJiBjMSA9PSAweEJC ICYmCisJCSAgICAgICAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMl0mMHhGRikgPT0gMHhCRikg eworCQlyYyA9IEZUX1VURjg7CisJCWRlYnVnKEYxMTEsInNjYW5maWxlIFVURjggQk9NIixja2l0 b2EodmFsKSxyYyk7CisJCWluY2xfY250Kys7CisJICAgIH0KKwkgICAgaWYgKGluY2xfY250KSB7 CQkvKiBIYXZlIEJPTSAqLworCQlieXRlcyArPSBjb3VudDsKKwkJZ290byB4c2NhbmZpbGU7CisJ ICAgIH0KKwl9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisJYnl0ZXMgKz0gY291bnQ7CQkJLyog Q291bnQgYnl0ZXMgcmVhZCAqLworCWVvZiA9IGZlb2YoZnApOwkJCS8qIEZsYWcgZm9yIGF0IEVP RiAgKi8KKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUu Li4gKi8KKwkgICAgYyA9ICh1bnNpZ25lZClidWZbaV07CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5j ZSAqLworCSAgICBpZiAoIWMpIHsJCQkvKiBaZXJvIGJ5dGU/ICovCisjaWZkZWYgRVZFTk1BWAor CQlpZiAoaSYxKQkJLyogSW4gb2RkIHBvc2l0aW9uICovCisJCSAgb2RkemVybysrOworCQllbHNl CisJCSAgZXZlbnplcm8rKzsJCS8qIEluIGV2ZW4gcG9zaXRpb24gKi8KKyNlbmRpZiAvKiBFVkVO TUFYICovCisJCXJ1bnplcm8rKzsKKwkgICAgfSBlbHNlIHsJCQkvKiBOb3QgYSB6ZXJvIGJ5dGUg Ki8KKwkJaWYgKHJ1bnplcm8gPiBydW5tYXgpCisJCSAgcnVubWF4ID0gcnVuemVybzsKKwkJaWYg KHJ1bm1heCA+IDIpCQkvKiBUaGF0J3MgYWxsIHdlIG5lZWQgdG8gYmUgY2VydGFpbiAqLworCQkg IGJyZWFrOwkJLyogaXQncyBhIGJpbmFyeSBmaWxlLiAqLworCQlydW56ZXJvID0gMDsKKwkgICAg fQorCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIEVWRU5NQVgKKworLyogVGhpcyBpcyB0byBjYXRj aCBVQ1MtMiB3aXRoIGEgbm9uLUFTQ0lJLCBub24tTGF0aW4tMSByZXBlcnRvaXJlICAqLworCisJ ICAgIGlmIChpID4gMSkgewkgICAgICAvKiBMb29rIGZvciBydW5zIG9mIGFsdGVybmF0aW5nIGNo YXJzICovCisJCWlmIChpJjEpIHsKKwkJICAgIGlmIChjID09IGJ1ZltpLTJdKSB7IC8qIEluIG9k ZCBwb3NpdGlvbnMgKi8KKwkJCW9kZHJ1bisrOworCQkJb2RkYnl0ZSA9IGM7CisJCSAgICB9IGVs c2UgeworCQkJb2RkbWF4ID0gb2RkcnVuOworCQkJb2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7CisJCSAg ICB9CisJCX0gZWxzZSB7CQkvKiBhbmQgZXZlbiBwb3NpdGlvbnMgKi8KKwkJICAgIGlmIChjID09 IGJ1ZltpLTJdKSB7CisJCQlldmVucnVuKys7CisJCQlldmVuYnl0ZSA9IGM7CisJCSAgICB9IGVs c2UgeworCQkJZXZlbm1heCA9IGV2ZW5ydW47CisJCQlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOwor CQkgICAgfQorCQl9CisJICAgIH0KKyNlbmRpZiAvKiBFVkVOTUFYICovCisjZW5kaWYgLyogQ09N TUVOVCAqLworCisJICAgIGlmICgoYyAmIDB4ODApID09IDApIHsJLyogV2UgaGF2ZSBhIDctYml0 IGJ5dGUgKi8KKyNpZmRlZiBVTklDT0RFCisJCWlmIChpID4gMCAmJiBjID09IDEwKSB7IC8qIExp bmVmZWVkICovCisJCSAgICBpZiAoYnVmW2ktMV0gPT0gMCkgbGZudWwrKzsgLyogUHJlY2VkZWQg YnkgTlVMICovCisJCSAgICBlbHNlIGlmIChidWZbaS0xXSA9PSAxMykgY3JsZisrOyAvKiBvciBi eSBDUi4uLiAqLworCQl9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCQlpZiAoYyA8ICcgJykgewkJ LyogQ2hlY2sgZm9yIENPIGNvbnRyb2xzICovCisJCSAgICBpZiAoYyAhPSBMRiAmJiBjICE9IENS ICYmIGMgIT0gSFQgJiYgYyAhPSBGRikgeworCQkJYzBjb250cm9scysrOworCQkJaWYgKGMgIT0g RVNDICYmIGMgIT0gU08gJiYgYyAhPSBTSSkKKwkJCSAgYzBub25pc28rKzsKKwkJICAgIH0KKwkJ ICAgIGlmICgoYyA9PSAnXDAzMicpCS8qIEN0cmwtWiAqLworI2lmZGVmIENPTU1FTlQKKwkJCSYm IGVvZiAmJiAoaSA+PSBjb3VudCAtIDIpCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkJKSB7CisJ CQljMGNvbnRyb2xzLS07CisJCQljMG5vbmlzby0tOworI2lmZGVmIENLX0NUUkxaCisJCQlpZiAo ZW9mbWV0aG9kID09IFhZRU9GX1ogJiYgdHh0Y3ogPT0gMCkgeworCQkJICAgIGlmIChjMGNvbnRy b2xzID09IDApIC8qIEFsbCB0ZXh0IHByaW9yIHRvIEN0cmwtWiAqLworCQkJICAgICAgdHh0Y3og PSAxOworCQkJfQorI2VuZGlmIC8qIENLX0NUUkxaICovCisJCSAgICB9CisJCX0KKyNpZmRlZiBV TklDT0RFCisJCWlmICghbm90dXRmOCAmJiB1dGY4c3RhdGUpIHsgLyogSW4gVVRGLTggc2VxdWVu Y2U/ICovCisJCSAgICB1dGY4c3RhdGUgPSAwOworCQkgICAgZGVidWcoRjAwMCwic2NhbmZpbGUi LCI3LWJpdCBieXRlIGluIFVURjggc2VxdWVuY2UiLGMpOworCQkgICAgbm90dXRmOCsrOwkJLyog VGhlbiBpdCdzIG5vdCBVVEYtOCAqLworCQkgICAgY29udGludWU7CisJCX0KKyNlbmRpZiAvKiBV TklDT0RFICovCisJICAgIH0gZWxzZSB7CQkJLyogV2UgaGF2ZSBhbiA4LWJpdCBieXRlICovCisJ CWVpZ2h0Yml0Kys7CQkvKiBDb3VudCBpdCAqLworCQlpZiAoYyA+PSAweDgwICYmIGMgPCAweEEw KSAvKiBDaGVjayBmb3IgQzEgY29udHJvbHMgKi8KKwkJICBjMWNvbnRyb2xzKys7CisjaWZkZWYg VU5JQ09ERQorCQlpZiAoIW5vdHV0ZjgpIHsJCS8qIElmIGl0IG1pZ2h0IHN0aWxsIGJlIFVURjgu Li4gKi8KKwkJICAgIHN3aXRjaCAodXRmOHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBzdGF0 ZSBtYWNoaW5lICovCisJCSAgICAgIGNhc2UgMDoJCSAvKiBGaXJzdCBieXRlLi4uICovCisJCQlp ZiAoKGMgJiAweEUwKSA9PSAweEMwKSB7IC8qIFRlbGxzIG51bWJlciBvZiAqLworCQkJICAgIHV0 ZjhzdGF0ZSA9IDE7ICAgICAgICAvKiBzdWJzZXF1ZW50IGJ5dGVzICovCisJCQl9IGVsc2UgaWYg KChjICYgMHhGMCkgPT0gMHhFMCkgeworCQkJICAgIHV0ZjhzdGF0ZSA9IDI7CisJCQl9IGVsc2Ug aWYgKChjICYgMHhGOCkgPT0gMHhGMCkgeworCQkJICAgIHV0ZjhzdGF0ZSA9IDM7CisJCQl9IGVs c2UgeworCQkJICAgIG5vdHV0ZjgrKzsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgICBjYXNlIDE6 CQkvKiBTdWJzZXF1ZW50IGJ5dGUgKi8KKwkJICAgICAgY2FzZSAyOgorCQkgICAgICBjYXNlIDM6 CisJCQlpZiAoKGMgJiAweEMwKSAhPSAweDgwKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAxMCAqLwor CQkJICAgIGRlYnVnKEYwMDAsInNjYW5maWxlIiwKKwkJCQkgICJiYWQgYnl0ZSBpbiBVVEY4IHNl cXVlbmNlIixjKTsKKwkJCSAgICBub3R1dGY4Kys7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQl1 dGY4c3RhdGUtLTsJLyogR29vZCwgb25lIGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLworCQkJYnJl YWs7CisJCSAgICAgIGRlZmF1bHQ6CQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJCQlkZWJ1ZyhG MTExLCJzY2FuZmlsZSIsImJhZCBVVEY4IHN0YXRlIix1dGY4c3RhdGUpOworCQkJbm90dXRmOCsr OworCQkgICAgfQorCQl9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCSAgICB9CisJfQorICAgIH0K KyAgICBmY2xvc2UoZnApOwkJCQkvKiBDbG9zZSB0aGUgZmlsZSAqLworICAgIGRlYnVnKEYxMDEs InNjYW5maWxlIGJ5dGVzIiwiIixieXRlcyk7CisKKyAgICBpZiAoYnl0ZXMgPT0gMCkJCQkvKiBJ ZiBub3RoaW5nIHdhcyByZWFkICovCisgICAgICByZXR1cm4oLTEpOwkJCS8qIHdlJ3JlIGRvbmUu ICovCisKKyNpZmRlZiBFVkVOTUFYCisgICAgLyogSW4gY2FzZSB3ZSBoYWQgYSBydW4gdGhhdCBu ZXZlciBicm9rZS4uLiAqLworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAob2RkbWF4ID09IDApIHsK KwlvZGRtYXggPSBvZGRydW47CisJb2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7CisgICAgfQorICAgIGlm IChldmVubWF4ID09IDApIHsKKwlldmVubWF4ID0gZXZlbnJ1bjsKKwlldmVubWF4Ynl0ZSA9IGV2 ZW5ieXRlOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKHJ1bm1heCA9PSAw KSB7CisJcnVubWF4ID0gcnVuemVybzsKKyAgICB9CisjZW5kaWYgLyogRVZFTk1BWCAqLworCisj aWZkZWYgVU5JQ09ERQorICAgIGlmIChieXRlcyA+IDEwMCkJCQkvKiBCeXRlcyBpcyBub3QgMCAq LworICAgICAgcGN0emVybyA9IChldmVuemVybyArIG9kZHplcm8pIC8gKGJ5dGVzIC8gMTAwKTsK KyAgICBlbHNlCisgICAgICBwY3R6ZXJvID0gKChldmVuemVybyArIG9kZHplcm8pICogMTAwKSAv IGJ5dGVzOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRl YmxvZykgewkJCS8qIElmIGRlYnVnZ2luZywgZHVtcCBzdGF0aXN0aWNzICovCisJZGVidWcoRjEw MSwic2NhbmZpbGUgYzBjb250cm9scyAiLCIiLGMwY29udHJvbHMpOworCWRlYnVnKEYxMDEsInNj YW5maWxlIGMwbm9uaXNvICAgIiwiIixjMG5vbmlzbyk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUg YzFjb250cm9scyAiLCIiLGMxY29udHJvbHMpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGVpZ2h0 Yml0ICAgIiwiIixlaWdodGJpdCk7CisjaWZkZWYgVU5JQ09ERQorCWRlYnVnKEYxMDEsInNjYW5m aWxlIGNybGYgICAgICAgIiwiIixjcmxmKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBsZm51bCAg ICAgICIsIiIsbGZudWwpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIG5vdHV0ZjggICAgIiwiIixu b3R1dGY4KTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVuemVybyAgICIsIiIsZXZlbnplcm8p OworCWRlYnVnKEYxMDEsInNjYW5maWxlIG9kZHplcm8gICAgIiwiIixvZGR6ZXJvKTsKKwlkZWJ1 ZyhGMTAxLCJzY2FuZmlsZSBldmVuL29kZCAgICIsIiIsKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAx KSkpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIG9kZC9ldmVuICAgIiwiIiwob2RkemVybyAvIChl dmVuemVybyArIDEpKSk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgcGN0emVybyAgICAiLCIiLHBj dHplcm8pOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgRVZF Tk1BWAorCWRlYnVnKEYxMDEsInNjYW5maWxlIG9kZG1heCAgICAgIiwiIixvZGRtYXgpOworCWRl YnVnKEYxMDEsInNjYW5maWxlIG9kZG1heGJ5dGUgIiwiIixvZGRtYXhieXRlKTsKKwlkZWJ1ZyhG MTAxLCJzY2FuZmlsZSBldmVubWF4ICAgICIsIiIsZXZlbm1heCk7CisJZGVidWcoRjEwMSwic2Nh bmZpbGUgZXZlbm1heGJ5dGUiLCIiLGV2ZW5tYXhieXRlKTsKKyNlbmRpZiAvKiBFVkVOTUFYICov CisjZW5kaWYgLyogQ09NTUVOVCAqLworCWRlYnVnKEYxMDEsInNjYW5maWxlIHJ1bm1heCAgICAg IiwiIixydW5tYXgpOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVU5JQ09E RQorICAgIHggPSBlaWdodGJpdCA/IGJ5dGVzIC8gMjAgOiBieXRlcyAvIDQ7IC8qIEZvciBVQ1Mt Mi4uLiAqLworCisgICAgaWYgKHJ1bm1heCA+IDIpIHsJCQkvKiBGaWxlIGhhcyBydW4gb2YgbW9y ZSB0aGFuIDIgTlVMcyAqLworCWRlYnVnKEYxMDAsInNjYW5maWxlIEJJTiBydW5tYXgiLCIiLDAp OworCXJjID0gRlRfQklOOwkJCS8qIHNvIGl0IGNhbid0IGJlIGFueSBraW5kIG9mIHRleHQuICov CisJZ290byB4c2NhbmZpbGU7CisKKyAgICB9IGVsc2UgaWYgKHJjID09IEZUX1VDUzIgfHwgKHJj ID09IEZUX1VURjggJiYgcnVubWF4ID09IDApKSB7CisJZ290byB4c2NhbmZpbGU7CQkJLyogRmls ZSBzdGFydHMgd2l0aCBhIEJPTSAqLworCisgICAgfSBlbHNlIGlmIChlaWdodGJpdCA+IDAgJiYg IW5vdHV0ZjgpIHsgLyogRmlsZSBoYXMgOC1iaXQgZGF0YSAqLworCWlmIChydW5tYXggPiAwKSB7 CQkgICAvKiBhbmQgcnVucyBvZiBOVUxzICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIEJJ TiAobm5VVEY4KSBydW5tYXgiLCIiLDApOworCSAgICByYyA9IEZUX0JJTjsJCSAgIC8qIFVURi04 IGRvZXNuJ3QgaGF2ZSBOVUxzICovCisJfSBlbHNlIHsJCQkgICAvKiBObyBOVUxzICovCisJICAg IGRlYnVnKEYxMDAsInNjYW5maWxlIFVURjggKG5uVVRGOCArIHJ1bm1heCA9PSAwKSIsIiIsMCk7 CisJICAgIHJjID0gRlRfVVRGODsJCSAgIC8qIGFuZCBub3Qgbm90IFVURi04LCBzbyBpcyBVVEYt OCAqLworCX0KKwlnb3RvIHhzY2FuZmlsZTsKKyAgICB9CisvKgorICBGb3IgVUNTLTIgZGV0ZWN0 aW9uLCBzZWUgaWYgdGhlIHRleHQgY29udGFpbnMgbGluZXMgZGVsaW1pdGVkIGJ5CisgIEFTQ0lJ IGNvbnRyb2xzIGFuZCBjb250YWluaW5nIHNwYWNlcywgQVNDSUkgZGlnaXRzLCBvciBvdGhlciBB U0NJSQorICBjaGFyYWN0ZXJzLCB0aHVzIGZvcmNpbmcgdGhlIHByZXNlbmNlIG9mIGEgY2VydGFp biBwZXJjZW50YWdlIG9mIHplcm8gYnl0ZXMuCisgIEZvciB0aGlzIHB1cnBvc2UgcmVxdWlyZSAy MCUgemVybyBieXRlcywgd2l0aCBhdCBsZWFzdCBzaXggdGltZXMgYXMgbWFueQorICBpbiBldmVu IChvZGQpIHBvc2l0aW9ucyBhcyBpbiBvZGQgKGV2ZW4pIHBvc2l0aW9ucy4KKyovCisgICAgaWYg KChldmVuemVybyA+PSB4ICYmIG9kZHplcm8gPT0gMCkgfHwKKwkoKCgoZXZlbnplcm8gLyAob2Rk emVybyArIDEpKSA+IDYpICYmIChwY3R6ZXJvID4gMjApKSAmJgorCShjcmxmID09IDApICYmCisJ KGxmbnVsID4gMSkpCisJKSB7CisJICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgbm9CT00g QkUgKGV2ZW4vb2RkemVybykiLCIiLDApOworCXJjID0gRlRfVUNTMjsKKwl2YWwgPSAwOworICAg IH0gZWxzZSBpZiAoKGV2ZW56ZXJvID09IDAgJiYgb2RkemVybyA+PSB4KSB8fAorCSAgICAgICAo KCgob2RkemVybyAvIChldmVuemVybyArIDEpKSA+IDYpICYmIChwY3R6ZXJvID4gMjApKSAmJgor CSAgICAgICAoY3JsZiA9PSAwKSAmJgorCSAgICAgICAobGZudWwgPiAxKSkKKwkgICAgICAgKSB7 CisJZGVidWcoRjEwMCwic2NhbmZpbGUgVUNTMiBub0JPTSBMRSAoZXZlbi9vZGR6ZXJvKSIsIiIs MCk7CisJcmMgPSBGVF9VQ1MyOworCXZhbCA9IDE7CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYg RVZFTk1BWAorLyoKKyAgSWYgdGhlIHRlc3RzIGFib3ZlIGZhaWwsIHdlIHN0aWxsIG1pZ2h0IGhh dmUgVUNTLTIgaWYgdGhlcmUgYXJlIHNpZ25pZmljYW50CisgIHJ1bnMgb2YgaWRlbnRpY2FsIGJ5 dGVzIGluIGFsdGVybmF0aW5nIHBvc2l0aW9ucywgYnV0IG9ubHkgaWYgaXQgYWxzbyBoYXMKKyAg dW51c3VhbCBDMCBjb250cm9scyAob3RoZXJ3aXNlIHdlJ2QgcGljayB1cCBoZXggZmlsZXMgaGVy ZSkuICBOT1RFOiBXZQorICBkb24ndCBhY3R1YWxseSBkbyB0aGlzIC0tIEVWRU5NQVggaXMgbm90 IGRlZmluZWQgKHNlZSBjb21tZW50cyBhYm92ZSBhdAorICBmaXJzdCBvY2N1cnJlbmNlIG9mIEVW RU5NQVgpLgorKi8KKyAgICB9IGVsc2UgaWYgKGMwbm9uaXNvICYmIGV2ZW5tYXggPiBieXRlcyAv IDQpIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIEJFIChldmVubWF4KSIsIiIsMCk7CisJ cmMgPSBGVF9VQ1MyOworCXZhbCA9IDA7CisgICAgfSBlbHNlIGlmIChjMG5vbmlzbyAmJiBvZGRt YXggPiBieXRlcyAvIDQpIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIExFIChldmVubWF4 KSIsIiIsMCk7CisJcmMgPSBGVF9VQ1MyOworCXZhbCA9IDE7CisjZW5kaWYgLyogRVZFTk1BWCAq LworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIH0KKy8qCisgIEl0IHNlZW1zIHRvIGJlIFVD Uy0yIGJ1dCBsZXQncyBiZSBtb3JlIGNlcnRhaW4gc2luY2UgdGhlcmUgaXMgbm8gQk9NLi4uCisg IElmIHRoZSBudW1iZXIgb2YgNy0gYW5kIDgtYml0IGNoYXJhY3RlcnMgaXMgYXBwcm94aW1hdGVs eSBlcXVhbCwgaXQgbWlnaHQKKyAgYmUgYSBjb21wcmVzc2VkIGZpbGUuICBJbiB0aGlzIGNhc2Ug d2UgZGVjaWRlIGJhc2VkIG9uIHRoZSBuYW1lLgorKi8KKyAgICBpZiAocmMgPT0gRlRfVUNTMikg eworCWlmIChlaWdodGJpdCA+IDApIHsKKwkgICAgaW50IGosIGs7CisJICAgIGogPSAoYzFjb250 cm9scyAqIDEwMCkgLyAoYzBjb250cm9scyArIDEpOworCSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmls ZSBjMS9jMCAgICAgICIsIiIsaik7CisJICAgIGsgPSAoYnl0ZXMgKiAxMDApIC8gZWlnaHRiaXQ7 CisJICAgIGRlYnVnKEYxMDEsInNjYW5maWxlIHBjdCA4Yml0ICAgIiwiIixrKTsKKwkgICAgaWYg KGsgPiA0MCAmJiBrIDwgNjAgJiYgaiA+IDYwKSB7CisJCWlmIChja21hdGNoKCJ7Ki5aLCouZ3os Ki56aXAsKi5aSVB9IixuYW1lLDEsMSkpIHsKKwkJICAgIGRlYnVnKEYxMTAsInNjYW5maWxlIDgt Yml0IEJJTiBjb21wcmVzc2VkIixuYW1lLDApOworCQkgICAgcmMgPSBGVF9CSU47CisJCSAgICBn b3RvIHhzY2FuZmlsZTsKKwkJfQorCSAgICB9CisJfQorCS8qIFNtYWxsIGZpbGUgLSBub3QgZW5v dWdoIGV2aWRlbmNlIHVubGVzcyAuLi4gKi8KKworCWlmIChieXRlcyA8IDEwMCkgeworCSAgICBp ZiAob2RkemVybyAhPSAwICYmIGV2ZW56ZXJvICE9IDApIHsKKwkJZGVidWcoRjEwMCwic2NhbmZp bGUgc21hbGwgVUNTMiBkb3VidGZ1bCIsIiIsMCk7CisJCXJjID0gRlRfQklOOworCQlnb3RvIHhz Y2FuZmlsZTsKKwkgICAgfSBlbHNlIGlmIChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0gMCkg eworCQlyYyA9IGVpZ2h0Yml0ID8gRlRfOEJJVCA6IEZUXzdCSVQ7CisJICAgIH0KKwl9CisJZ290 byB4c2NhbmZpbGU7CQkJLyogU2VlbXMgdG8gYmUgVUNTLTIgKi8KKyAgICB9CisKKy8qIElmIG5v bmUgb2YgdGhlIGFib3ZlLCBpdCdzIHByb2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KKworICAgIGlm ICghZWlnaHRiaXQpIHsJCQkvKiBJdCdzIDctYml0ICovCisJaWYgKGMwY29udHJvbHMpIHsJCS8q IFRoaXMgd291bGQgYmUgc3RyYW5nZSAqLworCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYgKHR4 dGN6ID09IDApKSB7CisJCWRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0IEJJTiAoYzBjb25pc28p IiwiIiwwKTsKKwkJcmMgPSBGVF9CSU47CisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMDAsInNj YW5maWxlIDctYml0IElTTzIwMjIgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwkJcmMgPSBG VF83QklUOworCSAgICB9CisJfSBlbHNlIHsJCQkvKiA3LWJpdCB0ZXh0ICovCisJICAgIGRlYnVn KEYxMDAsInNjYW5maWxlIDctYml0IFRFWFQgKG5vIGMwY29udHJvbHMpIiwiIiwwKTsKKwkgICAg cmMgPSBGVF83QklUOworCX0KKyAgICB9IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0eHRjeikgewkv KiA4LWJpdCB0ZXh0ICovCisJZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBu b25pc28pIiwiIiwwKTsKKwlyYyA9IEZUXzhCSVQ7CisJdmFsID0gYzFjb250cm9scyA/IDEgOiAw OworICAgIH0gZWxzZSB7CQkJCS8qIDgtYml0IGJpbmFyeSAqLworCWRlYnVnKEYxMDAsInNjYW5m aWxlIDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUX0JJTjsKKyAgICB9CisK KyNlbHNlICAvKiAhVU5JQ09ERSAqLworCisgICAgaWYgKGMwbm9uaXNvKSB7CisJZGVidWcoRjEw MCwic2NhbmZpbGUgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfQklOOwor ICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQpIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBU RVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfOEJJVDsKKwl2YWwgPSBjMWNvbnRy b2xzID8gMSA6IDA7CisgICAgfSBlbHNlIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBU RVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfN0JJVDsKKyAgICB9CisKKyNlbmRp ZiAvKiBVTklDT0RFICovCisKKyAgeHNjYW5maWxlOgorICAgIGlmIChmbGFnKSAqZmxhZyA9IHZh bDsKKyAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSByZXN1bHQgICAgICIsIiIscmMpOworICAgIHJl dHVybihyYyk7Cit9CisKKy8qCisgIHNjYW5zdHJpbmcgLSBsaWtlIHNjYW4gZmlsZSBidXQgZm9y IGEgc3RyaW5nLgorICBUaGlzIGlzIGp1c3QgYSBxdWljayBidXRjaGVyeSBvZiBzY2FuZmlsZSB3 aXRob3V0IHRoaW5raW5nIHRvbyBtdWNoLgorKi8KK2ludAorc2NhbnN0cmluZyhzKSBjaGFyICog czsgeworICAgIGludCB4LCB2YWwgPSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLworICAg IGludCByYyA9IC0xOwkJCS8qIFJldHVybiBjb2RlICovCisgICAgaW50IHB2ID0gLTE7CQkJLyog UGF0dGVybi1tYXRjaCB2YWx1ZSAqLworICAgIGludCBieXRlcyA9IDA7CQkJLyogVG90YWwgYnl0 ZSBjb3VudCAqLworI2lmZGVmIFVOSUNPREUKKyAgICB1bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyog Rmlyc3QgMiBmaWxlIGJ5dGVzIChmb3IgQk9NKSAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAg ICBleHRlcm4gaW50IHBpcGVzZW5kLCBmaWxlcGVlazsKKworICAgIHJlZ2lzdGVyIGludCBpOwkJ CS8qIExvb3AgY29udHJvbCAqLworICAgIGludCByZWFkc2l6ZSA9IDA7CQkJLyogSG93IG11Y2gg dG8gcmVhZCAqLworICAgIGludCBlaWdodGJpdCA9IDA7CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdp dGggOHRoIGJpdCBvbiAqLworICAgIGludCBjMGNvbnRyb2xzID0gMDsJCQkvKiBDMCBub24tdGV4 dCBjb250cm9sLWNoYXIgY291bnRlciAqLworICAgIGludCBjMG5vbmlzbyA9IDA7CQkJLyogQzAg bm9uLUlTTyBjb250cm9sLWNoYXIgY291bnRlciAqLworICAgIGludCBjMWNvbnRyb2xzID0gMDsJ CQkvKiBDMSBjb250cm9sLWNoYXJhY3RlciBjb3VudGVyICovCisgICAgdW5zaWduZWQgaW50IGM7 CQkJLyogQ3VycmVudCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgcnVubWF4ID0gMDsJCQkvKiBMb25n ZXN0IHJ1biBvZiAwIGJ5dGVzICovCisgICAgaW50IHJ1bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAw IGJ5dGVzICovCisgICAgaW50IHBjdHplcm8gPSAwOwkJCS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRl cyAqLworICAgIGludCB0eHRjeiA9IDA7CisKKyNpZmRlZiBVTklDT0RFCisgICAgaW50IG5vdHV0 ZjggPSAwOwkJCS8qIE5vbnplcm8gaWYgZGVmaW5pdGVseSBub3QgVVRGLTggKi8KKyAgICBpbnQg dXRmOHN0YXRlID0gMDsJCQkvKiBVVEYtOCByZWNvZ25pemVyIHN0YXRlICovCisgICAgaW50IG9k ZHplcm8gPSAwOwkJCS8qIE51bWJlciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLworICAg IGludCBldmVuemVybyA9IDA7CQkJLyogYW5kIGluIGV2ZW4gcG9zaXRpb25zICovCisgICAgaW50 IGxmbnVsID0gMDsJCQkvKiBOdW1iZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLworICAgIGlu dCBjcmxmID0gMDsJCQkvKiBOdW1iZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAqLworI2Vsc2UKKyAg ICBpbnQgbm90dXRmOCA9IDE7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisgICAgY2hhciAqIGJ1 ZiA9IHM7CisgICAgaWYgKCFzKSBzID0gIiI7CisgICAgY291bnQgPSBzdHJsZW4ocyk7CisKKyNp ZmRlZiBVTklDT0RFCisgICAgaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiAxKSB7CisJaW50IGlu Y2xfY250ID0gMDsKKworCS8qIEZpcnN0IGxvb2sgZm9yIEJPTSAqLworCisJYzAgPSAodW5zaWdu ZWQpKCh1bnNpZ25lZClidWZbMF0mMHhGRik7IC8qIEZpcnN0IGZpbGUgYnl0ZSAqLworCWMxID0g KHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzFdJjB4RkYpOyAvKiBTZWNvbmQgYnl0ZSAqLworCisJ aWYgKGMwID09IDB4RkUgJiYgYzEgPT0gMHhGRikgewkvKiBVQ1MtMiBCRSAqLworCSAgICByYyA9 IEZUX1VDUzI7CisJICAgIHZhbCA9IDA7CisJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNT MiBCT00gQkUiLGNraXRvYSh2YWwpLHJjKTsKKwkgICAgaW5jbF9jbnQrKzsKKwl9IGVsc2UgaWYg KGMwID09IDB4RkYgJiYgYzEgPT0gMHhGRSkgeyAvKiBVQ1MtMiBMRSAqLworCSAgICByYyA9IEZU X1VDUzI7CisJICAgIHZhbCA9IDE7CisJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBC T00gTEUiLGNraXRvYSh2YWwpLHJjKTsKKwkgICAgaW5jbF9jbnQrKzsKKwl9IGVsc2UgaWYgKGNv dW50ID4gMikgaWYgKGMwID09IDB4RUYgJiYgYzEgPT0gMHhCQiAmJgorCQkgICAodW5zaWduZWQp KCh1bnNpZ25lZClidWZbMl0mMHhGRikgPT0gMHhCRikgeworCSAgICByYyA9IEZUX1VURjg7CisJ ICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVVRGOCBCT00iLGNraXRvYSh2YWwpLHJjKTsKKwkg ICAgaW5jbF9jbnQrKzsKKwl9CisJaWYgKGluY2xfY250KSB7CQkvKiBIYXZlIEJPTSAqLworCSAg ICBieXRlcyArPSBjb3VudDsKKwkgICAgZ290byB4c2NhbnN0cmluZzsKKwl9CisgICAgfQorI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKworICAgIGJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVz IHJlYWQgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNo IGJ5dGUuLi4gKi8KKwljID0gKHVuc2lnbmVkKWJ1ZltpXTsJLyogRm9yIGVhc2Ugb2YgcmVmZXJl bmNlICovCisJaWYgKCFjKSB7CQkJLyogWmVybyBieXRlPyAqLworCSAgICBnb3RvIHhzY2Fuc3Ry aW5nOwkvKiBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nICovCisJfQorCWlmICgoYyAmIDB4ODApID09 IDApIHsJLyogV2UgaGF2ZSBhIDctYml0IGJ5dGUgKi8KKyNpZmRlZiBVTklDT0RFCisJICAgIGlm IChpID4gMCAmJiBjID09IDEwKSB7IC8qIExpbmVmZWVkICovCisJCWlmIChidWZbaS0xXSA9PSAw KSBsZm51bCsrOyAvKiBQcmVjZWRlZCBieSBOVUwgKi8KKwkJZWxzZSBpZiAoYnVmW2ktMV0gPT0g MTMpIGNybGYrKzsgLyogb3IgYnkgQ1IuLi4gKi8KKwkgICAgfQorI2VuZGlmIC8qIFVOSUNPREUg Ki8KKwkgICAgaWYgKGMgPCAnICcpIHsJCS8qIENoZWNrIGZvciBDTyBjb250cm9scyAqLworCQlp ZiAoYyAhPSBMRiAmJiBjICE9IENSICYmIGMgIT0gSFQgJiYgYyAhPSBGRikgeworCQkgICAgYzBj b250cm9scysrOworCQkgICAgaWYgKGMgIT0gRVNDICYmIGMgIT0gU08gJiYgYyAhPSBTSSkKKwkJ ICAgICAgYzBub25pc28rKzsKKwkJfQorCQlpZiAoKGMgPT0gJ1wwMzInKQkvKiBDdHJsLVogKi8K KwkJICAgICkgeworCQkgICAgYzBjb250cm9scy0tOworCQkgICAgYzBub25pc28tLTsKKwkJfQor CSAgICB9CisjaWZkZWYgVU5JQ09ERQorCSAgICBpZiAoIW5vdHV0ZjggJiYgdXRmOHN0YXRlKSB7 IC8qIEluIFVURi04IHNlcXVlbmNlPyAqLworCQl1dGY4c3RhdGUgPSAwOworCQlkZWJ1ZyhGMDAw LCJzY2Fuc3RyaW5nIiwiNy1iaXQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKKwkJbm90dXRm OCsrOwkJLyogVGhlbiBpdCdzIG5vdCBVVEYtOCAqLworCQljb250aW51ZTsKKwkgICAgfQorI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKwl9IGVsc2UgewkJCS8qIFdlIGhhdmUgYW4gOC1iaXQgYnl0ZSAq LworCSAgICBlaWdodGJpdCsrOwkJLyogQ291bnQgaXQgKi8KKwkgICAgaWYgKGMgPj0gMHg4MCAm JiBjIDwgMHhBMCkgLyogQ2hlY2sgZm9yIEMxIGNvbnRyb2xzICovCisJICAgICAgYzFjb250cm9s cysrOworI2lmZGVmIFVOSUNPREUKKwkgICAgaWYgKCFub3R1dGY4KSB7CQkvKiBJZiBpdCBtaWdo dCBzdGlsbCBiZSBVVEY4Li4uICovCisJCXN3aXRjaCAodXRmOHN0YXRlKSB7IC8qIEVudGVyIHRo ZSBVVEYtOCBzdGF0ZSBtYWNoaW5lICovCisJCSAgY2FzZSAwOgkJIC8qIEZpcnN0IGJ5dGUuLi4g Ki8KKwkJICAgIGlmICgoYyAmIDB4RTApID09IDB4QzApIHsgLyogVGVsbHMgbnVtYmVyIG9mICov CisJCQl1dGY4c3RhdGUgPSAxOyAgICAgICAgLyogc3Vic2VxdWVudCBieXRlcyAqLworCQkgICAg fSBlbHNlIGlmICgoYyAmIDB4RjApID09IDB4RTApIHsKKwkJCXV0ZjhzdGF0ZSA9IDI7CisJCSAg ICB9IGVsc2UgaWYgKChjICYgMHhGOCkgPT0gMHhGMCkgeworCQkJdXRmOHN0YXRlID0gMzsKKwkJ ICAgIH0gZWxzZSB7CisJCQlub3R1dGY4Kys7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJICBj YXNlIDE6CQkvKiBTdWJzZXF1ZW50IGJ5dGUgKi8KKwkJICBjYXNlIDI6CisJCSAgY2FzZSAzOgor CQkgICAgaWYgKChjICYgMHhDMCkgIT0gMHg4MCkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggMTAgKi8K KwkJCWRlYnVnKEYwMDAsInNjYW5zdHJpbmciLAorCQkJICAgICAgImJhZCBieXRlIGluIFVURjgg c2VxdWVuY2UiLGMpOworCQkJbm90dXRmOCsrOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICB1 dGY4c3RhdGUtLTsJLyogR29vZCwgb25lIGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLworCQkgICAg YnJlYWs7CisJCSAgZGVmYXVsdDoJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwkJICAgIGRlYnVn KEYxMTEsInNjYW5zdHJpbmciLCJiYWQgVVRGOCBzdGF0ZSIsdXRmOHN0YXRlKTsKKwkJICAgIG5v dHV0ZjgrKzsKKwkJfQorCSAgICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCX0KKyAgICB9Cisg ICAgaWYgKGJ5dGVzID09IDApCQkJLyogSWYgbm90aGluZyB3YXMgcmVhZCAqLworICAgICAgcmV0 dXJuKC0xKTsJCQkvKiB3ZSdyZSBkb25lLiAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIGlmIChi eXRlcyA+IDEwMCkJCQkvKiBCeXRlcyBpcyBub3QgMCAqLworICAgICAgcGN0emVybyA9IChldmVu emVybyArIG9kZHplcm8pIC8gKGJ5dGVzIC8gMTAwKTsKKyAgICBlbHNlCisgICAgICBwY3R6ZXJv ID0gKChldmVuemVybyArIG9kZHplcm8pICogMTAwKSAvIGJ5dGVzOworI2VuZGlmIC8qIFVOSUNP REUgKi8KKworI2lmZGVmIFVOSUNPREUKKyAgICB4ID0gZWlnaHRiaXQgPyBieXRlcyAvIDIwIDog Ynl0ZXMgLyA0OyAvKiBGb3IgVUNTLTIuLi4gKi8KKworICAgIGlmIChydW5tYXggPiAyKSB7CQkJ LyogRmlsZSBoYXMgcnVuIG9mIG1vcmUgdGhhbiAyIE5VTHMgKi8KKwlkZWJ1ZyhGMTAwLCJzY2Fu c3RyaW5nIEJJTiBydW5tYXgiLCIiLDApOworCXJjID0gRlRfQklOOwkJCS8qIHNvIGl0IGNhbid0 IGJlIGFueSBraW5kIG9mIHRleHQuICovCisJZ290byB4c2NhbnN0cmluZzsKKworICAgIH0gZWxz ZSBpZiAocmMgPT0gRlRfVUNTMiB8fCAocmMgPT0gRlRfVVRGOCAmJiBydW5tYXggPT0gMCkpIHsK Kwlnb3RvIHhzY2Fuc3RyaW5nOwkJCS8qIEZpbGUgc3RhcnRzIHdpdGggYSBCT00gKi8KKworICAg IH0gZWxzZSBpZiAoZWlnaHRiaXQgPiAwICYmICFub3R1dGY4KSB7IC8qIEZpbGUgaGFzIDgtYml0 IGRhdGEgKi8KKwlpZiAocnVubWF4ID4gMCkgewkJICAgLyogYW5kIHJ1bnMgb2YgTlVMcyAqLwor CSAgICBkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIEJJTiAobm5VVEY4KSBydW5tYXgiLCIiLDApOwor CSAgICByYyA9IEZUX0JJTjsJCSAgIC8qIFVURi04IGRvZXNuJ3QgaGF2ZSBOVUxzICovCisJfSBl bHNlIHsJCQkgICAvKiBObyBOVUxzICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgVVRG OCAobm5VVEY4ICsgcnVubWF4ID09IDApIiwiIiwwKTsKKwkgICAgcmMgPSBGVF9VVEY4OwkJICAg LyogYW5kIG5vdCBub3QgVVRGLTgsIHNvIGlzIFVURi04ICovCisJfQorCWdvdG8geHNjYW5zdHJp bmc7CisgICAgfQorLyoKKyAgSXQgc2VlbXMgdG8gYmUgVUNTLTIgYnV0IGxldCdzIGJlIG1vcmUg Y2VydGFpbiBzaW5jZSB0aGVyZSBpcyBubyBCT00uLi4KKyAgSWYgdGhlIG51bWJlciBvZiA3LSBh bmQgOC1iaXQgY2hhcmFjdGVycyBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsLCBpdCBtaWdodAorICBi ZSBhIGNvbXByZXNzZWQgZmlsZS4gIEluIHRoaXMgY2FzZSB3ZSBkZWNpZGUgYmFzZWQgb24gdGhl IG5hbWUuCisqLworICAgIGlmIChyYyA9PSBGVF9VQ1MyKSB7CisJaWYgKGJ5dGVzIDwgMTAwKSB7 CisJICAgIGlmIChvZGR6ZXJvICE9IDAgJiYgZXZlbnplcm8gIT0gMCkgeworCQlkZWJ1ZyhGMTAw LCJzY2Fuc3RyaW5nIHNtYWxsIFVDUzIgZG91YnRmdWwiLCIiLDApOworCQlyYyA9IEZUX0JJTjsK KwkJZ290byB4c2NhbnN0cmluZzsKKwkgICAgfSBlbHNlIGlmIChvZGR6ZXJvID09IDAgJiYgZXZl bnplcm8gPT0gMCkgeworCQlyYyA9IGVpZ2h0Yml0ID8gRlRfOEJJVCA6IEZUXzdCSVQ7CisJICAg IH0KKwl9CisJZ290byB4c2NhbnN0cmluZzsJCQkvKiBTZWVtcyB0byBiZSBVQ1MtMiAqLworICAg IH0KKworLyogSWYgbm9uZSBvZiB0aGUgYWJvdmUsIGl0J3MgcHJvYmFibHkgbm90IFVuaWNvZGUu ICAqLworCisgICAgaWYgKCFlaWdodGJpdCkgewkJCS8qIEl0J3MgNy1iaXQgKi8KKwlpZiAoYzBj b250cm9scykgewkJLyogVGhpcyB3b3VsZCBiZSBzdHJhbmdlICovCisJICAgIGlmICgoYzBub25p c28gPiAwKSAmJiAodHh0Y3ogPT0gMCkpIHsKKwkJZGVidWcoRjEwMCwic2NhbnN0cmluZyA3LWJp dCBCSU4gKGMwY29uaXNvKSIsIiIsMCk7CisJCXJjID0gRlRfQklOOworCSAgICB9IGVsc2Ugewor CQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDctYml0IElTTzIwMjIgVEVYVCAobm8gYzBub25pc28p IiwiIiwwKTsKKwkJcmMgPSBGVF83QklUOworCSAgICB9CisJfSBlbHNlIHsJCQkvKiA3LWJpdCB0 ZXh0ICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgVEVYVCAobm8gYzBjb250 cm9scykiLCIiLDApOworCSAgICByYyA9IEZUXzdCSVQ7CisJfQorICAgIH0gZWxzZSBpZiAoIWMw bm9uaXNvIHx8IHR4dGN6KSB7CS8qIDgtYml0IHRleHQgKi8KKwlkZWJ1ZyhGMTAwLCJzY2Fuc3Ry aW5nIDgtYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF84QklUOworCXZh bCA9IGMxY29udHJvbHMgPyAxIDogMDsKKyAgICB9IGVsc2UgewkJCQkvKiA4LWJpdCBiaW5hcnkg Ki8KKwlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsK KwlyYyA9IEZUX0JJTjsKKyAgICB9CisKKyNlbHNlICAvKiAhVU5JQ09ERSAqLworCisgICAgaWYg KGMwbm9uaXNvKSB7CisJZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBCSU4gKGMwbm9uaXNv KSIsIiIsMCk7CisJcmMgPSBGVF9CSU47CisgICAgfSBlbHNlIGlmIChlaWdodGJpdCkgeworCWRl YnVnKEYxMDAsInNjYW5zdHJpbmcgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwly YyA9IEZUXzhCSVQ7CisJdmFsID0gYzFjb250cm9scyA/IDEgOiAwOworICAgIH0gZWxzZSB7CisJ ZGVidWcoRjEwMCwic2NhbnN0cmluZyA3LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOwor CXJjID0gRlRfN0JJVDsKKyAgICB9CisKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyAgeHNjYW5z dHJpbmc6CisgICAgZGVidWcoRjEwMSwic2NhbnN0cmluZyByZXN1bHQgICAgICIsIiIscmMpOwor ICAgIHJldHVybihyYyk7Cit9CisKKworCisvKiAgRiBJIEwgRSBTIEUgTCBFIEMgVCAgLS0gIFNl bGVjdCB0aGlzIGZpbGUgZm9yIHNlbmRpbmcgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitm aWxlc2VsZWN0KAorICAgIGNoYXIgKmYsIGNoYXIgKnNhLCBjaGFyICpzYiwgY2hhciAqc25hLCBj aGFyICpzbmIsCisgICAgQ0tfT0ZGX1QgbWluc2l6LCBDS19PRkZfVCBtYXhzaXosCisgICAgaW50 IG5idSwgaW50IG54bGlzdCwKKyAgICBjaGFyICoqIHhsaXN0CispCisjZWxzZQorZmlsZXNlbGVj dChmLHNhLHNiLHNuYSxzbmIsbWluc2l6LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0KQorIGNoYXIg KmYsKnNhLCpzYiwqc25hLCpzbmI7IENLX09GRl9UIG1pbnNpeixtYXhzaXo7CisgaW50IG5idSxu eGxpc3Q7IGNoYXIgKiogeGxpc3Q7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZpbGVzZWxl Y3QgKi8geworICAgIGNoYXIgKmZkYXRlOworICAgIGludCBuOworICAgIENLX09GRl9UIHo7CisK KyAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1pbnNpeiIsY2tmc3RvYShtaW5zaXopLG1pbnNp eik7CisgICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtYXhzaXoiLGNrZnN0b2EobWF4c2l6KSxt YXhzaXopOworICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgKENLX09GRl9UKS0xIixja2ZzdG9h KChDS19PRkZfVCktMSksKENLX09GRl9UKS0xKTsKKworICAgIGlmICghc2EpIHNhID0gIiI7Cisg ICAgaWYgKCFzYikgc2IgPSAiIjsKKyAgICBpZiAoIXNuYSkgc25hID0gIiI7CisgICAgaWYgKCFz bmIpIHNuYiA9ICIiOworCisjaWZkZWYgQ0tTWU1MSU5LCisjaWZuZGVmIE5PSUNQCisjaWZuZGVm IE5PWEZFUgorICAgIGlmIChub2xpbmtzKSB7CisJQ0tfT0ZGX1Qgeno7CisJenogPSB6Z2V0ZnMo Zik7CisJZGVidWcoRjExMSwiZmlsZXNlbGVjdCBOT0xJTktTIHpnZXRmcyIsZix6eik7CisJaWYg KHp6IDwgKENLX09GRl9UKTApCisJICByZXR1cm4oMCk7CisJZGVidWcoRjExMSwiZmlsZXNlbGVj dCBOT0xJTktTIHpnZnNfbGluayIsZix6Z2ZzX2xpbmspOworCWlmICh6Z2ZzX2xpbmspCisJICBy ZXR1cm4oMCk7CisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIE5PSUNQICov CisjZW5kaWYgLyogQ0tTWU1MSU5LICovCisKKyAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0Iixm LDApOworICAgIGlmICgqc2EgfHwgKnNiIHx8ICpzbmEgfHwgKnNuYikgeworCWZkYXRlID0gemZj ZGF0KGYpOwkJLyogRGF0ZS90aW1lIG9mIHRoaXMgZmlsZSAqLworCWlmICghZmRhdGUpIGZkYXRl ID0gIiI7CisJbiA9IHN0cmxlbihmZGF0ZSk7CisJZGVidWcoRjExMSwiZmlsZXNlbGVjdCBmZGF0 ZSIsZmRhdGUsbik7CisJaWYgKG4gIT0gMTcpCQkJLyogRmFpbGVkIHRvIGdldCBpdCAqLworCSAg cmV0dXJuKDEpOworCS8qIC9BRlRFUjogKi8KKwlpZiAoc2FbMF0gJiYgKHN0cmNtcChmZGF0ZSwo Y2hhciAqKXNhKSA8PSAwKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNhIixzYSww KTsKKwkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG9sZCkiLGYsMCk7ICovCisJICAg IHJldHVybigwKTsKKwl9CisJLyogL0JFRk9SRTogKi8KKwlpZiAoc2JbMF0gJiYgKHN0cmNtcChm ZGF0ZSwoY2hhciAqKXNiKSA+PSAwKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNi IixzYiwwKTsKKwkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7ICov CisJICAgIHJldHVybigwKTsKKwl9CisJLyogL05PVC1BRlRFUjogKi8KKwlpZiAoc25hWzBdICYm IChzdHJjbXAoZmRhdGUsKGNoYXIgKilzbmEpID4gMCkpIHsKKwkgICAgZGVidWcoRjExMCwiZmls ZXNlbGVjdCBzbmEiLHNuYSwwKTsKKwkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG5l dykiLGYsMCk7ICovCisJICAgIHJldHVybigwKTsKKwl9CisJLyogL05PVC1CRUZPUkU6ICovCisJ aWYgKHNuYlswXSAmJiAoc3RyY21wKGZkYXRlLChjaGFyICopc25iKSA8IDApKSB7CisJICAgIGRl YnVnKEYxMTAsImZpbGVzZWxlY3Qgc25iIixzbmIsMCk7CisJICAgIC8qIHRsb2coRjExMCwiU2tp cHBpbmcgKHRvbyBvbGQpIixmLDApOyAqLworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0KKyAg ICAvKiBTbWFsbGVyIG9yIGxhcmdlciAqLworICAgIGlmIChtaW5zaXogPiAoQ0tfT0ZGX1QpLTEg fHwgbWF4c2l6ID4gKENLX09GRl9UKS0xKSB7CisJeiA9IHpjaGtpKGYpOwkJCS8qIEdldCBzaXpl ICovCisJZGVidWcoRjEwMSwiZmlsZXNlbGVjdCBmaWxlc2l6ZSIsIiIseik7CisJaWYgKHogPCAo Q0tfT0ZGX1QpMCkKKwkgIHJldHVybigxKTsKKwlpZiAoKG1pbnNpeiA+IChDS19PRkZfVCktMSkg JiYgKHogPj0gbWluc2l6KSkgeworCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1pbnNpeiBz a2lwcGluZyIsZixtaW5zaXopOworCSAgICAvKiB0bG9nKEYxMTEsIlNraXBwaW5nICh0b28gYmln KSIsZix6KTsgKi8KKwkgICAgcmV0dXJuKDApOworCX0KKwlpZiAoKG1heHNpeiA+IChDS19PRkZf VCktMSkgJiYgKHogPD0gbWF4c2l6KSkgeworCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1h eHNpeiBza2lwcGluZyIsZixtYXhzaXopOworCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0 b28gc21hbGwpIixmLDApOyAqLworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0KKyAgICBpZiAo bmJ1KSB7CQkJCS8qIFNraXBwaW5nIGJhY2t1cCBmaWxlcz8gKi8KKwlpZiAoY2ttYXRjaCgKKyNp ZmRlZiBDS1JFR0VYCisJCSAgICAiKi5+WzAtOV0qfiIJLyogTm90IHBlcmZlY3QgYnV0IGNsb3Nl IGVub3VnaC4gKi8KKyNlbHNlCisJCSAgICAiKi5+Kn4iCQkvKiBMZXNzIGNsb3NlLiAqLworI2Vu ZGlmIC8qIENLUkVHRVggKi8KKwkJICAgICxmLGZpbGVjYXNlLDEpKSB7CisJICAgIGRlYnVnKEYx MTAsImZpbGVzZWxlY3Qgc2tpcHBpbmcgYmFja3VwIixmLDApOworCSAgICByZXR1cm4oMCk7CisJ fQorICAgIH0KKyAgICBmb3IgKG4gPSAwOyB4bGlzdCAmJiBuIDwgbnhsaXN0OyBuKyspIHsKKwlp ZiAoIXhsaXN0W25dKSB7CisJICAgIGRlYnVnKEYxMDEsImZpbGVzZWxlY3QgeGxpc3QgZW1wdHki LDAsbik7CisJICAgIGJyZWFrOworCX0KKwlpZiAoY2ttYXRjaCh4bGlzdFtuXSxmLGZpbGVjYXNl LDEpKSB7CisJICAgIGRlYnVnKEYxMTEsImZpbGVzZWxlY3QgeGxpc3QiLHhsaXN0W25dLG4pOwor CSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNraXBwaW5nIixmLDApOworCSAgICByZXR1cm4o MCk7CisJfQorICAgIH0KKyAgICBpZiAoeGZpbGV0eXBlID4gLTEpIHsKKwluID0gc2NhbmZpbGUo ZixOVUxMLG5zY2FuZmlsZSk7CisJaWYgKG4gPCAwKSB7CisJICAgIG4gPSBiaW5hcnkgPyAxIDog MDsKKwl9IGVsc2UgeworCSAgICBuID0gKG4gPT0gRlRfQklOKSA/IDEgOiAwOworCX0KKwlpZiAo biAhPSB4ZmlsZXR5cGUpCisJICByZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImZp bGVzZWxlY3Qgc2VsZWN0aW5nIixmLDApOworICAgIHJldHVybigxKTsKK30KKworCisjaWZkZWYg VENQU09DS0VUCisjaWZkZWYgTlQKK2V4dGVybiBpbnQgV1NBU2FmZVRvQ2FuY2VsOworI2VuZGlm IC8qIE5UICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisKK1ZPSUQKK3NldGZsb3coKSB7Cisg ICAgZXh0ZXJuIGludCBmbG93LCBhdXRvZmxvdywgbWRtdHlwLCBjeHR5cGUsIGN4Zmxvd1tdOwor I2lmbmRlZiBOT0RJQUwKKyAgICBleHRlcm4gaW50IGRpYWxjYXBhcywgZGlhbGZjOworICAgIGV4 dGVybiBNRE1JTkYgKiBtb2RlbXBbXTsKKyAgICBNRE1JTkYgKiBwID0gTlVMTDsKKyAgICBsb25n IGJpdHMgPSAwOworI2VuZGlmIC8qIE5PRElBTCAqLworCisgICAgZGVidWcoRjEwMSwic2V0Zmxv dyBhdXRvZmxvdyIsIiIsYXV0b2Zsb3cpOworCisvKiAjaWZkZWYgQ09NTUVOVCAqLworLyogV0hZ IFdBUyBUSElTIENPTU1FTlRFRCBPVVQ/ICovCisgICAgaWYgKCFhdXRvZmxvdykgICAgICAgICAg ICAgICAgICAgICAgLyogT25seSBpZiBGTE9XIGlzIEFVVE8gKi8KKyAgICAgIHJldHVybjsKKy8q ICNlbmRpZiAqLyAvKiBDT01NRU5UICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGxvY2Fs IiwiIixsb2NhbCk7CisgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBuZXR3b3JrIiwiIixuZXR3b3Jr KTsKKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGN4dHlwZSIsIiIsY3h0eXBlKTsKKworI2lmZGVm IFROX0NPTVBPUlQKKyAgICBpZiAobmV0d29yayAmJiBpc3RuY29tcG9ydCgpKSB7CisJZmxvdyA9 IGN4Zmxvd1tDWFRfTU9ERU1dOworICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IFROX0NPTVBP UlQgZmxvdyIsIiIsZmxvdyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogVE5f Q09NUE9SVCAqLworCisgICAgaWYgKG5ldHdvcmsgfHwgIWxvY2FsIHx8IGN4dHlwZSA9PSBDWFRf RElSRUNUKSB7CisgICAgICAgIGZsb3cgPSBjeGZsb3dbY3h0eXBlXTsgICAgICAgICAgLyogU2V0 IGFwcHJvcHJpYXRlIGZsb3cgY29udHJvbCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93 IGZsb3ciLCIiLGZsb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjeHR5cGUg IT0gQ1hUX01PREVNKSAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gdHlwZSBzaG91bGQgYmUgbW9k ZW0gKi8KKyAgICAgIHJldHVybjsKKworI2lmbmRlZiBOT0RJQUwKKyAgICBiaXRzID0gZGlhbGNh cGFzOyAgICAgICAgICAgICAgICAgICAvKiBDYXBhYmlsaXR5IGJpdHMgKi8KKyAgICBpZiAoIWJp dHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBiaXRzPyAqLworICAgICAgICBwID0g bW9kZW1wW21kbXR5cF07ICAgICAgICAgICAgIC8qIExvb2sgaW4gbW9kZW0gaW5mbyBzdHJ1Y3R1 cmUgKi8KKyAgICAgICAgaWYgKHApCisgICAgICAgICAgYml0cyA9IHAtPmNhcGFzOworICAgIH0K KyAgICBpZiAoZGlhbGZjID09IEZMT19BVVRPKSB7ICAgICAgICAgICAvKiBJZiBESUFMIGZsb3cg aXMgQVVUTyAqLworI2lmZGVmIENLX1JUU0NUUyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElm IHdlIGNhbiBkbyBSVFMvQ1RTIGZsb3cgY29udHJvbCAqLworICAgICAgICBpZiAoYml0cyAmIENL RF9IVykgICAgICAgICAgICAgIC8qIGFuZCBtb2RlbSBjYW4gZG8gaXQgdG9vICovCisgICAgICAg ICAgZmxvdyA9IEZMT19SVFNDOyAgICAgICAgICAgICAgLyogdGhlbiBzd2l0Y2ggdG8gUlRTL0NU UyAqLworICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lz ZSAqLworICAgICAgICAgIGZsb3cgPSBGTE9fWE9OWDsgICAgICAgICAgICAgIC8qIHVzZSBYb24v WG9mZi4gKi8KKyNlbHNlCisjaWZuZGVmIE5FWFQKKyNpZm5kZWYgSVJJWAorICAgICAgICBmbG93 ID0gRkxPX1hPTlg7ICAgICAgICAgICAgICAgIC8qIFVzZSBYb24vWG9mZi4gKi8KKyNlbmRpZiAv KiBJUklYICovCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIENLX1JUU0NUUyAqLworICAg IH0KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IG1vZGVtIGZs b3ciLCIiLGZsb3cpOworICAgIHJldHVybjsKK30KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYg Q0tfVFJJR0dFUgorCisvKiAgQSBVIFQgTyBFIFggSSBUIEMgSCBLICAtLSAgQ2hlY2sgZm9yIENP Tk5FQ1QtbW9kZSB0cmlnZ2VyIHN0cmluZyAgKi8KKy8qCisgIFJldHVybnMgLTEgaWYgdHJpZ2dl ciBub3QgZm91bmQsIG9yIGVsc2UgdGhlIHRyaWdnZXIgaW5kZXgsIDAgb3IgZ3JlYXRlci4KKyAg KFJlcGxhY2Ugd2l0aCBmYW5jaWVyIGFuZCBtb3JlIGVmZmljaWVudCBtYXRjaGVyIGxhdGVyLi4u KQorICBOT1RFOiB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQs IGNhbGwgdGhpcyB3YXk6CisKKyAgICB4ID0gdHRfdHJpZ2dlclswXSA/IGF1dG9leGl0Y2hrKGMp IDogLTE7CisKKyovCitpbnQKKyNpZmRlZiBDS19BTlNJQworYXV0b2V4aXRjaGsoQ0hBUiBjKQor I2Vsc2UKK2F1dG9leGl0Y2hrKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog YXV0b2V4aXRjaGsgKi8geworICAgIGV4dGVybiBDSEFSICogdHRfdHJtYXRjaFtdOworICAgIGV4 dGVybiBjaGFyICogdHRfdHJpZ2dlcltdOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkg PCBUUklHR0VSUzsgaSsrKSB7CisgICAgICAgIGlmICghdHRfdHJpZ2dlcltpXSkgeyAgICAgICAg ICAgLyogTm8gbW9yZSB0cmlnZ2VycyBpbiBsaXN0ICovCisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfSBlbHNlIGlmICgqdHRfdHJpZ2dlcltpXSkgeworICAgICAgICAgICAgaWYgKCF0dF90 cm1hdGNoW2ldKSAgICAgICAgIC8qIEp1c3Qgc3RhcnRpbmc/ICovCisgICAgICAgICAgICAgIHR0 X3RybWF0Y2hbaV0gPSAoQ0hBUiAqKXR0X3RyaWdnZXJbaV07IC8qIFNldCBtYXRjaCBwb2ludGVy ICovCisgICAgICAgICAgICBpZiAoYyA9PSAqdHRfdHJtYXRjaFtpXSkgeyAgLyogQ29tcGFyZSB0 aGlzIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0rKzsgICAgICAg IC8qIEl0IG1hdGNoZXMgKi8KKyAgICAgICAgICAgICAgICBpZiAoISp0dF90cm1hdGNoW2ldKSB7 ICAvKiBFbmQgb2YgbWF0Y2ggc3RyaW5nPyAqLworICAgICAgICAgICAgICAgICAgICB0dF90cm1h dGNoW2ldID0gKENIQVIgKikgdHRfdHJpZ2dlcltpXTsgLyogWWVzLCByZXdpbmQsICovCisgICAg ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImF1dG9leGl0Y2hrIix0dF90cmlnZ2VyW2ldLGkp OyAvKiBsb2csICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybihpKTsgICAgICAgICAgLyog YW5kIHJldHVybiBzdWNjZXNzICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1hdGNoICovCisgICAgICAgICAgICAgIHR0 X3RybWF0Y2hbaV0gPSAoQ0hBUiAqKSB0dF90cmlnZ2VyW2ldOyAvKiBSZXdpbmQgbWF0Y2ggc3Ry aW5nICovCisgICAgICAgIH0gLyogYW5kIGdvIG9uIHRoZSBuZXh0IG1hdGNoIHN0cmluZyAqLwor ICAgIH0KKyAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtYXRj aCBmb3VuZCAqLworfQorI2VuZGlmIC8qIENLX1RSSUdHRVIgKi8KKworI2lmbmRlZiBOT1NIT1cK Ky8qICBTIEggTyBNIEQgTSAgLS0gIFNob3cgbW9kZW0gc2lnbmFscyAgKi8KKworVk9JRAorc2hv bWRtKCkgeworLyoKKyAgTm90ZSB1c2Ugb2YgIlxyXG4iIHRvIG1ha2Ugc3VyZSB0aGlzIHJlcG9y dCBwcmludHMgcmlnaHQsIGV2ZW4gd2hlbgorICBjYWxsZWQgZHVyaW5nIENPTk5FQ1QgbW9kZS4K KyovCisgICAgaW50IHk7CisgICAgeSA9IHR0Z21kbSgpOworICAgIHN3aXRjaCAoeSkgeworICAg ICAgY2FzZSAtMzogcHJpbnRmKAorICAgICAgICAgICAgICAgICAiTW9kZW0gc2lnbmFscyB1bmF2 YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24gb2YgS2VybWl0XHJcbiIpOworICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICBjYXNlIC0yOiBwcmludGYoIk5vIG1vZGVtIGNvbnRyb2wgZm9yIHRoaXMg ZGV2aWNlXHJcbiIpOyBicmVhazsKKyAgICAgIGNhc2UgLTE6IHByaW50ZigiTW9kZW0gc2lnbmFs cyB1bmF2YWlsYWJsZVxyXG4iKTsgYnJlYWs7CisgICAgICBkZWZhdWx0OgorI2lmbmRlZiBNQUMK KyAgICAgICAgcHJpbnRmKAorICAgICAgICAgICIgQ2FycmllciBEZXRlY3QgICAgICAoQ0QpOiAg JXNcclxuIiwoeSAmIEJNX0RDRCkgPyAiT24iOiAiT2ZmIik7CisgICAgICAgIHByaW50ZigKKyAg ICAgICAgICAiIERhdGFzZXQgUmVhZHkgICAgICAgKERTUik6ICVzXHJcbiIsKHkgJiBCTV9EU1Ip ID8gIk9uIjogIk9mZiIpOworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICBwcmludGYoCisgICAg ICAgICAgIiBDbGVhciBUbyBTZW5kICAgICAgIChDVFMpOiAlc1xyXG4iLCh5ICYgQk1fQ1RTKSA/ ICJPbiI6ICJPZmYiKTsKKyNpZm5kZWYgU1RSQVRVUworI2lmbmRlZiBNQUMKKyAgICAgICAgcHJp bnRmKAorICAgICAgICAgICIgUmluZyBJbmRpY2F0b3IgICAgICAoUkkpOiAgJXNcclxuIiwoeSAm IEJNX1JORykgPyAiT24iOiAiT2ZmIik7CisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHByaW50 ZigKKyAgICAgICAgICAiIERhdGEgVGVybWluYWwgUmVhZHkgKERUUik6ICVzXHJcbiIsCisjaWZk ZWYgTlQKKyAgICAgICAgICAiKHVua25vd24pIgorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAo eSAmIEJNX0RUUikgPyAiT24iOiAiT2ZmIgorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgKTsK KyNpZm5kZWYgTUFDCisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAiIFJlcXVlc3QgVG8gU2Vu ZCAgICAgKFJUUyk6ICVzXHJcbiIsCisjaWZkZWYgTlQKKyAgICAgICAgICAiKHVua25vd24pIgor I2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAoeSAmIEJNX1JUUykgPyAiT24iOiAiT2ZmIgorI2Vu ZGlmIC8qIE5UICovCisgICAgICAgICAgKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBT VFJBVFVTICovCisgICAgfQorI2lmZGVmIEJFVEFERUJVRworI2lmZGVmIENLX1RBUEkKKyAgICBp ZiAodHR0YXBpICYmICF0YXBpcGFzcykgeworICAgICAgICBMUERFVkNGRyAgICAgICAgbHBEZXZD ZmcgPSBOVUxMOworICAgICAgICBMUENPTU1DT05GSUcgICAgbHBDb21tQ29uZmlnID0gTlVMTDsK KyAgICAgICAgTFBNT0RFTVNFVFRJTkdTIGxwTW9kZW1TZXR0aW5ncyA9IE5VTEw7CisgICAgICAg IERDQiAqICAgICAgICAgICBscERDQiA9IE5VTEw7CisKKyAgICAgICAgaWYgKGNrdGFwaUdldE1v ZGVtU2V0dGluZ3MoJmxwRGV2Q2ZnLCZscE1vZGVtU2V0dGluZ3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmbHBDb21tQ29uZmlnLCZscERDQikpIHsKKyAgICAgICAgICAg IHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIGNrdGFwaURpc3BsYXlNb2RlbVNldHRpbmdzKGxw RGV2Q2ZnLGxwTW9kZW1TZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxwQ29tbUNvbmZpZyxscERDQik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyog Q0tfVEFQSSAqLworI2VuZGlmIC8qIEJFVEFERUJVRyAqLworfQorI2VuZGlmIC8qIE5PU0hPVyAq LworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmbmRlZiBOT1hGRVIKKy8qICBTIEQgRSBCIFUg IC0tIFJlY29yZCBzcGFyIHJlc3VsdHMgaW4gZGVidWdnaW5nIGxvZyAgKi8KKworVk9JRAorc2Rl YnUobGVuKSBpbnQgbGVuOyB7CisgICAgZGVidWcoRjExMSwic3BhcjogZGF0YSIsKGNoYXIgKikg cmRhdGFwLGxlbik7CisgICAgZGVidWcoRjEwMSwiIHNwc2l6ICIsIiIsIHNwc2l6KTsKKyAgICBk ZWJ1ZyhGMTAxLCIgdGltaW50IiwiIix0aW1pbnQpOworICAgIGRlYnVnKEYxMDEsIiBucGFkICAi LCIiLCAgbnBhZCk7CisgICAgZGVidWcoRjEwMSwiIHBhZGNoICIsIiIsIHBhZGNoKTsKKyAgICBk ZWJ1ZyhGMTAxLCIgc2VvbCAgIiwiIiwgIHNlb2wpOworICAgIGRlYnVnKEYxMDEsIiBjdGxxICAi LCIiLCAgY3RscSk7CisgICAgZGVidWcoRjEwMSwiIGVicSAgICIsIiIsICAgZWJxKTsKKyAgICBk ZWJ1ZyhGMTAxLCIgZWJxZmxnIiwiIixlYnFmbGcpOworICAgIGRlYnVnKEYxMDEsIiBiY3RyICAi LCIiLCAgYmN0cik7CisgICAgZGVidWcoRjEwMSwiIHJwdHEgICIsIiIsICBycHRxKTsKKyAgICBk ZWJ1ZyhGMTAxLCIgcnB0ZmxnIiwiIixycHRmbGcpOworICAgIGRlYnVnKEYxMDEsIiBsc2NhcHUi LCIiLGxzY2FwdSk7CisgICAgZGVidWcoRjEwMSwiIGF0Y2FwdSIsIiIsYXRjYXB1KTsKKyAgICBk ZWJ1ZyhGMTAxLCIgbHBjYXB1IiwiIixscGNhcHUpOworICAgIGRlYnVnKEYxMDEsIiBzd2NhcHUi LCIiLHN3Y2FwdSk7CisgICAgZGVidWcoRjEwMSwiIHdzbG90biIsIiIsIHdzbG90bik7CisgICAg ZGVidWcoRjEwMSwiIHdoYXRydSIsIiIsIHdoYXRydSk7Cit9CisvKiAgUiBEIEUgQiBVIC0tIERl YnVnZ2luZyBkaXNwbGF5IG9mIHJwYXIoKSB2YWx1ZXMgICovCisKK1ZPSUQKK3JkZWJ1KGQsbGVu KSBDSEFSICpkOyBpbnQgbGVuOyB7CisgICAgZGVidWcoRjExMSwicnBhcjogZGF0YSIsZCxsZW4p OworICAgIGRlYnVnKEYxMDEsIiBycHNpeiAiLCIiLCB4dW5jaGFyKGRbMF0pKTsKKyAgICBkZWJ1 ZyhGMTAxLCIgcnRpbW8gIiwiIiwgcnRpbW8pOworICAgIGRlYnVnKEYxMDEsIiBteXBhZG4iLCIi LG15cGFkbik7CisgICAgZGVidWcoRjEwMSwiIG15cGFkYyIsIiIsbXlwYWRjKTsKKyAgICBkZWJ1 ZyhGMTAxLCIgZW9sICAgIiwiIiwgICBlb2wpOworICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIi LCAgY3RscSk7CisgICAgZGVidWcoRjEwMSwiIHNxICAgICIsIiIsICAgIHNxKTsKKyAgICBkZWJ1 ZyhGMTAxLCIgZWJxICAgIiwiIiwgICBlYnEpOworICAgIGRlYnVnKEYxMDEsIiBlYnFmbGciLCIi LGVicWZsZyk7CisgICAgZGVidWcoRjEwMSwiIGJjdHIgICIsIiIsICBiY3RyKTsKKyAgICBkZWJ1 ZyhGMTAxLCIgcnB0cSAgIiwiIiwgIGRbOF0pOworICAgIGRlYnVnKEYxMDEsIiBycHRmbGciLCIi LHJwdGZsZyk7CisgICAgZGVidWcoRjEwMSwiIGNhcGFzICIsIiIsIGNhcGFzKTsKKyAgICBkZWJ1 ZyhGMTAxLCIgYml0cyAgIiwiIixkW2NhcGFzXSk7CisgICAgZGVidWcoRjEwMSwiIGxzY2FwdSIs IiIsbHNjYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIgYXRjYXB1IiwiIixhdGNhcHUpOworICAgIGRl YnVnKEYxMDEsIiBscGNhcHUiLCIiLGxwY2FwdSk7CisgICAgZGVidWcoRjEwMSwiIHN3Y2FwdSIs IiIsc3djYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIgd3Nsb3RyIiwiIiwgd3Nsb3RyKTsKKyAgICBk ZWJ1ZyhGMTAxLCIgcnBzaXooZXh0ZW5kZWQpIiwiIixycHNpeik7Cit9CisKKyNpZmRlZiBDT01N RU5UCisvKiAgQyBIIEsgRSBSIFIgIC0tICBEZWNpZGUgd2hldGhlciB0byBleGl0IHVwb24gYSBw cm90b2NvbCBlcnJvciAgKi8KKworVk9JRAorY2hrZXJyKCkgeworICAgIGlmIChiYWNrZ3JkICYm ICFzZXJ2ZXIpIGZhdGFsKCJQcm90b2NvbCBlcnJvciIpOworfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworLyogIEYgQSBUIEEgTCAgLS0gIEZhdGFsIGVycm9y IG1lc3NhZ2UgKi8KKworVk9JRAorZmF0YWwobXNnKSBjaGFyICptc2c7IHsKKyAgICBleHRlcm4g aW50IGluaXRmbGc7CisgICAgc3RhdGljIGludCBpbml0aW5nID0gMDsKKyAgICBpZiAoIW1zZykg bXNnID0gIiI7CisgICAgZGVidWcoRjExMSwiZmF0YWwiLG1zZyxpbml0ZmxnKTsKKworICAgIGlm ICghaW5pdGZsZykgewkJCS8qIElmIGNhbGxlZCBmcm9tIHByZXNjYW4gKi8KKwlpZiAoaW5pdGlu ZykJCQkvKiBvciBjYWxsZWQgZnJvbSBzeXNpbml0KCkgKi8KKyAgICAgICAgICBleGl0KDI1Myk7 CisJaW5pdGluZyA9IDE7CisJc3lzaW5pdCgpOworICAgIH0KKworICAgIGRlYnVnKEYxMTEsImZh dGFsIixtc2cseGl0c3RhKTsKKyAgICB0bG9nKEYxMTAsIkZhdGFsOiIsbXNnLDBMKTsKKyNpZmRl ZiBWTVMKKyAgICBpZiAoc3RybmNtcChtc2csIiVDS0VSTUlUIiw4KSkKKyAgICAgIGNvbm9sKCIl Q0tFUk1JVC1FLUZBVEFMLCAiKTsKKyAgICBjb25vbGwobXNnKTsKKyNlbHNlIC8qICFWTVMgKi8K KyAgICBjb25vbGwobXNnKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYg Tk9YRkVSCisgICAgaWYgKHhmcmJlbCkgeworICAgICAgICBibGVlcChCUF9GQUlMKTsKKyAgICAg ICAgc2xlZXAoMSk7CisgICAgICAgIGJsZWVwKEJQX0ZBSUwpOworICAgIH0KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworI2VuZGlmIC8qIE9TMiAqLworICAgIGRvZXhpdChCQURfRVhJVCx4aXRzdGEg fCAxKTsgICAgICAgIC8qIEV4aXQgaW5kaWNhdGluZyBmYWlsdXJlICovCit9CisKKyNpZm5kZWYg Tk9YRkVSCisvKiAgQiBMIEQgTCBFIE4gIC0tICBNYWtlIGxlbmd0aC1lbmNvZGVkIGNvcHkgb2Yg c3RyaW5nICAqLworCitjaGFyICoKK2JsZGxlbihzdHIsZGVzdCkgY2hhciAqc3RyLCAqZGVzdDsg eworICAgIGludCBsZW47CisgICAgbGVuID0gKGludClzdHJsZW4oc3RyKTsKKyAgICBpZiAobGVu ID4gOTQpCisgICAgICAqZGVzdCA9IFNQOworICAgIGVsc2UKKyAgICAgICpkZXN0ID0gKGNoYXIp IHRvY2hhcihsZW4pOworICAgIHN0cmNweShkZXN0KzEsc3RyKTsJCQkvKiBDaGVja2VkIGJlbG93 IGluIHNldGdlbigpICovCisgICAgcmV0dXJuKGRlc3QrbGVuKzEpOworfQorCisKKy8qICBTIEUg VCBHIEUgTiAgLS0gIENvbnN0cnVjdCBhIGdlbmVyaWMgY29tbWFuZCAgKi8KKy8qCisgIENhbGwg d2l0aCBHZW5lcmljIGNvbW1hbmQgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRocmVlIHN0cmluZyBh cmd1bWVudHMuCisgIFRyYWlsaW5nIHN0cmluZ3MgYXJlIGFsbG93ZWQgdG8gYmUgZW1wdHkgKCIi KS4gIEVhY2ggc3RyaW5nIGV4Y2VwdCB0aGUgbGFzdAorICBub24tZW1wdHkgc3RyaW5nIG11c3Qg YmUgbGVzcyB0aGFuIDk1IGNoYXJhY3RlcnMgbG9uZy4gIFRoZSBmaW5hbCBub25lbXB0eQorICBz dHJpbmcgaXMgYWxsb3dlZCB0byBiZSBsb25nZXIuCisqLworQ0hBUgorI2lmZGVmIENLX0FOU0lD CitzZXRnZW4oY2hhciB0eXBlLCBjaGFyICogYXJnMSwgY2hhciAqIGFyZzIsIGNoYXIgKiBhcmcz KQorI2Vsc2UKK3NldGdlbih0eXBlLGFyZzEsYXJnMixhcmczKSBjaGFyIHR5cGUsICphcmcxLCAq YXJnMiwgKmFyZzM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNldGdlbiAqLyB7CisgICAg Y2hhciAqdXBzdHIsICpjcDsKKyNpZmRlZiBEWU5BTUlDCisgICAgaWYgKCFjbWRzdHIpCisgICAg ICBpZiAoIShjbWRzdHIgPSBtYWxsb2MoTUFYU1AgKyAxKSkpCisgICAgICAgIGZhdGFsKCJzZXRn ZW46IGNhbid0IGFsbG9jYXRlIG1lbW9yeSIpOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworICAg IGNwID0gY21kc3RyOworICAgICpjcCsrID0gdHlwZTsKKyAgICAqY3AgPSBOVUw7CisgICAgaWYg KCFhcmcxKSBhcmcxID0gIiI7CisgICAgaWYgKCFhcmcyKSBhcmcyID0gIiI7CisgICAgaWYgKCFh cmczKSBhcmczID0gIiI7CisgICAgaWYgKCgoaW50KXN0cmxlbihhcmcxKSsoaW50KXN0cmxlbihh cmcyKSsoaW50KXN0cmxlbihhcmczKSs0KSA8IE1BWFNQKSB7CisJaWYgKCphcmcxICE9IE5VTCkg eworCSAgICB1cHN0ciA9IGJsZGxlbihhcmcxLGNwKTsKKwkgICAgaWYgKCphcmcyICE9IE5VTCkg eworCQl1cHN0ciA9IGJsZGxlbihhcmcyLHVwc3RyKTsKKwkJaWYgKCphcmczICE9IE5VTCkgYmxk bGVuKGFyZzMsdXBzdHIpOworCSAgICB9CisJfQorCWNtYXJnID0gY21kc3RyOworCWRlYnVnKEYx MTAsInNldGdlbiIsY21hcmcsMCk7CisJcmV0dXJuKCdnJyk7CisgICAgfQorICAgIHJldHVybign RScpOworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5PTVNFTkQKK3N0YXRpYyBj aGFyICptZ2J1ZnAgPSBOVUxMOworCisvKiAgRiBOIFAgQSBSIFMgRSAgLS0gICovCisKKy8qCisg IEFyZ3VtZW50IGlzIGEgY2hhcmFjdGVyIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIGZp bGVzcGVjcy4KKyAgVGhpcyBmdW5jdGlvbiBicmVha3MgdGhlIHN0cmluZyBhcGFydCBpbnRvIGFu IGFycmF5IG9mIHBvaW50ZXJzLCBvbmUKKyAgdG8gZWFjaCBmaWxlc3BlYywgYW5kIHJldHVybnMg dGhlIG51bWJlciBvZiBmaWxlc3BlY3MuICBVc2VkIGJ5IHNlcnZlcgorICB3aGVuIGl0IHJlY2Vp dmVzIGEgR0VUIGNvbW1hbmQgdG8gYWxsb3cgaXQgdG8gcHJvY2VzcyBtdWx0aXBsZSBmaWxlCisg IHNwZWNpZmljYXRpb25zIGluIG9uZSB0cmFuc2FjdGlvbi4gIFNldHMgY21saXN0IHRvIHBvaW50 IHRvIGEgbGlzdCBvZgorICBmaWxlIHBvaW50ZXJzLCBleGFjdGx5IGFzIGlmIHRoZXkgd2VyZSBj b21tYW5kIGxpbmUgYXJndW1lbnRzLgorCisgIFRoaXMgdmVyc2lvbiBvZiBmbnBhcnNlIHRyZWF0 cyBzcGFjZXMgYXMgZmlsZW5hbWUgc2VwYXJhdG9ycy4gIElmIHlvdXIKKyAgb3BlcmF0aW5nIHN5 c3RlbSBhbGxvd3Mgc3BhY2VzIGluIGZpbGVuYW1lcywgeW91J2xsIG5lZWQgYSBkaWZmZXJlbnQK KyAgc2VwYXJhdG9yLgorCisgIFRoaXMgdmVyc2lvbiBvZiBmbnBhcnNlIG1hbGxvY3MgYSBzdHJp bmcgYnVmZmVyIHRvIGNvbnRhaW4gdGhlIG5hbWVzLiAgSXQKKyAgY2Fubm90IGFzc3VtZSB0aGF0 IHRoZSBzdHJpbmcgdGhhdCBpcyBwb2ludGVkIHRvIGJ5IHRoZSBhcmd1bWVudCBpcyBzYWZlLgor Ki8KK2ludAorZm5wYXJzZShzdHJpbmcpIGNoYXIgKnN0cmluZzsgeworICAgIGNoYXIgKnAsICpz LCAqcTsKKyAgICBpbnQgciA9IDAsIHg7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4g Y29kZSAqLworI2lmZGVmIFJFQ1VSU0lWRQorICAgIGRlYnVnKEYxMTEsImZucGFyc2UiLHN0cmlu ZyxyZWN1cnNpdmUpOworI2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworCisgICAgaWYgKG1nYnVmcCkg ZnJlZShtZ2J1ZnApOyAgICAgICAgICAgLyogRnJlZSB0aGlzIGZyb20gbGFzdCB0aW1lLiAqLwor ICAgIG1nYnVmcCA9IG1hbGxvYygoaW50KXN0cmxlbihzdHJpbmcpKzIpOworICAgIGlmICghbWdi dWZwKSB7CisgICAgICAgIGRlYnVnKEYxMDAsImZucGFyc2UgbWFsbG9jIGVycm9yIiwiIiwwKTsK KyAgICAgICAgcmV0dXJuKDApOworICAgIH0KKyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9TUEwK KyAgICBja3N0cm5jcHkoZnNwZWMsc3RyaW5nLGZzcGVjbGVuKTsgICAvKiBNYWtlIGNvcHkgZm9y IFx2KGZpbGVzcGVjKSAqLworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9JQ1AgKi8K KyAgICBzID0gc3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBzdHJpbmcg Ki8KKyAgICBwID0gcSA9IG1nYnVmcDsgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byB0 aGUgY29weSAqLworICAgIHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElu aXRpYWxpemUgb3VyIHJldHVybiBjb2RlICovCisgICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09 IEhUKSAgICAgICAgLyogU2tpcCBsZWFkaW5nIHNwYWNlcyBhbmQgdGFicyAqLworICAgICAgcysr OworICAgIGZvciAoeCA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIHRyYWls aW5nIHNwYWNlcyAqLworICAgICAgICAgKHggPiAxKSAmJiAoc1t4LTFdID09IFNQIHx8IHNbeC0x XSA9PSBIVCk7CisgICAgICAgICB4LS0pCisgICAgICBzW3gtMV0gPSBOVUw7CisgICAgd2hpbGUg KDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9vcCB0aHJvdWdoIHJlc3Qgb2Ygc3Ry aW5nICovCisgICAgICAgIGlmICgqcyA9PSBDTURRKSB7ICAgICAgICAgICAgICAgLyogQmFja3Ns YXNoIChxdW90ZSBjaGFyYWN0ZXIpPyAqLworICAgICAgICAgICAgaWYgKCh4ID0geHhlc2MoJnMp KSA+IC0xKSB7IC8qIEdvIGludGVycHJldCBpdC4gKi8KKyAgICAgICAgICAgICAgICAqcSsrID0g KGNoYXIpIHg7ICAgICAgICAvKiBOdW1lcmljIGJhY2tzbGFzaCBjb2RlLCBvayAqLworICAgICAg ICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIEp1c3QgbGV0IGl0IHF1b3RlIG5l eHQgY2hhciAqLworICAgICAgICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgIC8qIGdl dCBwYXN0IHRoZSBiYWNrc2xhc2ggKi8KKyAgICAgICAgICAgICAgICAqcSsrID0gKnMrKzsgICAg ICAgICAgICAvKiBkZXBvc2l0IG5leHQgY2hhciAqLworICAgICAgICAgICAgfQorICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSBpZiAoKnMgPT0gU1AgfHwgKnMgPT0gTlVMKSB7 IC8qIFVucXVvdGVkIHNwYWNlIG9yIE5VTD8gKi8KKyAgICAgICAgICAgICpxKysgPSBOVUw7ICAg ICAgICAgICAgICAgICAvKiBFbmQgb2Ygb3V0cHV0IGZpbGVuYW1lLiAqLworICAgICAgICAgICAg bXNmaWxlc1tyXSA9IHA7ICAgICAgICAgICAgIC8qIEFkZCB0aGlzIGZpbGVuYW1lIHRvIHRoZSBs aXN0ICovCisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmbnBhcnNlIixtc2ZpbGVzW3JdLHIpOwor ICAgICAgICAgICAgcisrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCisg ICAgICAgICAgICBpZiAoKnMgPT0gTlVMKSBicmVhazsgICAgICAgLyogRW5kIG9mIHN0cmluZz8g Ki8KKyAgICAgICAgICAgIHdoaWxlICgqcyA9PSBTUCkgcysrOyAgICAgICAvKiBTa2lwIHJlcGVh dGVkIHNwYWNlcyAqLworICAgICAgICAgICAgcCA9IHE7ICAgICAgICAgICAgICAgICAgICAgIC8q IFN0YXJ0IG9mIG5leHQgbmFtZSAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0g ZWxzZSAqcSsrID0gKnM7ICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIGNvcHkgdGhlIGNoYXJh Y3RlciAqLworICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5leHQg aW5wdXQgY2hhcmFjdGVyICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsImZucGFyc2UgciIsIiIs cik7CisgICAgbXNmaWxlc1tyXSA9ICIiOyAgICAgICAgICAgICAgICAgICAgLyogUHV0IGVtcHR5 IHN0cmluZyBhdCBlbmQgb2YgbGlzdCAqLworICAgIGNtbGlzdCA9IG1zZmlsZXM7CisgICAgcmV0 dXJuKHIpOworfQorI2VuZGlmIC8qIE5PTVNFTkQgKi8KKworY2hhciAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGRiY2hyKCkgZm9yIERFQlVHIFNFU1NJT04gKi8KK2RiY2hy KGMpIGludCBjOyB7CisgICAgc3RhdGljIGNoYXIgc1s4XTsKKyAgICBjaGFyICpjcCA9IHM7CisK KyAgICBjICY9IDB4ZmY7CisgICAgaWYgKGMgJiAweDgwKSB7ICAgICAgICAgICAgICAgICAgICAg LyogOHRoIGJpdCBvbiAqLworICAgICAgICAqY3ArKyA9ICd+JzsKKyAgICAgICAgYyAmPSAweDdm OworICAgIH0KKyAgICBpZiAoYyA8IFNQKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250 cm9sIGNoYXJhY3RlciAqLworICAgICAgICAqY3ArKyA9ICdeJzsKKyAgICAgICAgKmNwKysgPSAo Y2hhcikgY3RsKGMpOworICAgIH0gZWxzZSBpZiAoYyA9PSBERUwpIHsKKyAgICAgICAgKmNwKysg PSAnXic7CisgICAgICAgICpjcCsrID0gJz8nOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFByaW50aW5nIGNoYXJhY3RlciAqLworICAgICAgICAqY3ArKyA9IChj aGFyKSBjOworICAgIH0KKyAgICAqY3AgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBUZXJtaW5hdGUgc3RyaW5nICovCisgICAgY3AgPSBzOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUmV0dXJuIHBvaW50ZXIgdG8gaXQgKi8KKyAgICByZXR1cm4oY3ApOworfQorCisv KiAgQyBLIEggTyBTIFQgIC0tICBHZXQgbmFtZSBvZiBsb2NhbCBob3N0ICh3aGVyZSBDLUtlcm1p dCBpcyBydW5uaW5nKSAgKi8KKworLyoKKyAgQ2FsbCB3aXRoIHBvaW50ZXIgdG8gYnVmZmVyIHRv IHB1dCBob3N0bmFtZSBpbiwgYW5kIGxlbmd0aCBvZiBidWZmZXIuCisgIENvcGllcyBob3N0bmFt ZSBpbnRvIGJ1ZmZlciBvbiBzdWNjZXNzLCBwdXRzIG51bGwgc3RyaW5nIGluIGJ1ZmZlciBvbgor ICBmYWlsdXJlLgorKi8KKyNpZmRlZiBCU0Q0NAorI2RlZmluZSBCU0Q0CisjdW5kZWYgQVRUU1YK KyNlbmRpZiAvKiBCU0Q0NCAqLworCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZuZGVmIEJTRDQ0Cisj aWZuZGVmIGFwb2xsbworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYgLyogYXBvbGxv ICovCisjZW5kaWYgLyogQlNENDQgKi8KKyNlbHNlCisjaWZkZWYgQkVMTFYxMAorI2luY2x1ZGUg PHV0c25hbWUuaD4KKyNlbmRpZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogU1ZPUlBPU0lYKi8K KworI2lmZGVmIENLU1lTTE9HCitleHRlcm4gY2hhciB1aWRidWZbXSwgKiBjbGllbnRob3N0Owor I2VuZGlmIC8qIENLU1lTTE9HICovCisKK1ZPSUQKK2NraG9zdCh2dmJ1Zix2dmxlbikgY2hhciAq IHZ2YnVmOyBpbnQgdnZsZW47IHsKKworI2lmbmRlZiBOT1BVU0gKKyAgICBleHRlcm4gaW50IG5v cHVzaDsKKyNpZm5kZWYgTk9TRVJWRVIKKyAgICBleHRlcm4gaW50IGVuX2hvczsKKyNlbmRpZiAv KiBOT1NFUlZFUiAqLworI2VuZGlmIC8qIE5PUFVTSCAqLworCisjaWZkZWYgcGRwMTEKKyAgICAq dnZidWYgPSBOVUw7CisjZWxzZSAgLyogRXZlcnl0aGluZyBlbHNlIC0gcmVzdCBvZiB0aGlzIHJv dXRpbmUgKi8KKworICAgIGNoYXIgKmc7CisgICAgaW50IGhhdmVmdWxsID0gMDsKKyNpZmRlZiBW TVMKKyAgICBpbnQgeDsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIFNWT1JQT1NJWAorI2lm bmRlZiBCU0Q0NAorI2lmbmRlZiBfMzg2QlNECisjaWZuZGVmIEFQT0xMT1NSMTAKKyAgICBzdHJ1 Y3QgdXRzbmFtZSBobmFtZTsKKyNlbmRpZiAvKiBBUE9MTE9TUjEwICovCisjZW5kaWYgLyogXzM4 NkJTRCAqLworI2VuZGlmIC8qIEJTRDQ0ICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjaWZk ZWYgZGF0YWdlbmVyYWwKKyAgICBpbnQgYWMwID0gKGNoYXIgKikgdnZidWYsIGFjMSA9IC0xLCBh YzIgPSAwOworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyNpZm5kZWYgTk9QVVNICisgICAg aWYgKGdldGVudigiQ0tfTk9QVVNIIikpIHsgICAgICAgICAgLyogTm8gc2hlbGwgYWNjZXNzIGFs bG93ZWQgKi8KKyAgICAgICAgbm9wdXNoID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBvbiB0 aGlzIGhvc3QuLi4gKi8KKyNpZm5kZWYgTk9TRVJWRVIKKyAgICAgICAgZW5faG9zID0gMDsKKyNl bmRpZiAvKiBOT1NFUlZFUiAqLworICAgIH0KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworICAgICp2 dmJ1ZiA9IE5VTDsgICAgICAgICAgICAgICAgICAgICAgIC8qIEhvdyBsZXQncyBnZXQgb3VyIGhv c3QgbmFtZSAuLi4gKi8KKworI2lmbmRlZiBCRUxMVjEwICAgICAgICAgICAgICAgICAgICAgICAg IC8qIERvZXMgbm90IGhhdmUgZ2V0aG9zdG5hbWUoKSAqLworI2lmbmRlZiBPWE9TCisjaWZkZWYg U1ZPUlBPU0lYCisjaWZkZWYgQVBPTExPU1IxMAorICAgIGNrc3RybmNweSh2dmJ1ZiwiQXBvbGxv Iix2dmxlbik7CisjZWxzZQorI2lmZGVmIEJTRDQ0CisgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVm LHZ2bGVuKSA8IDApCisgICAgICAqdnZidWYgPSBOVUw7CisjZWxzZQorI2lmZGVmIF8zODZCU0QK KyAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOworI2Vs c2UKKyNpZmRlZiBRTlgKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBpZiAoZ2V0aG9zdG5hbWUodnZi dWYsdnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOworI2Vsc2UKKyAgICBpZiAodW5hbWUoJmhuYW1l KSA+IC0xKSBja3N0cm5jcHkodnZidWYsaG5hbWUubm9kZW5hbWUsdnZsZW4pOworI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworI2Vsc2UgLyogU1ZPUlBPU0lYIGJ1dCBub3QgXzM4NkJTRCBvciBCU0Q0 NCAqLworI2lmZGVmIF9faWE2NF9fCisgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tzdHJu Y3B5KHZ2YnVmLGhuYW1lLm5vZGVuYW1lLHZ2bGVuKTsKKyNlbHNlCisgICAgaWYgKHVuYW1lKCZo bmFtZSkgPiAtMSkgeworCWNoYXIgKiBwOworCXAgPSBobmFtZS5ub2RlbmFtZTsKKyNpZmRlZiBU Q1BTT0NLRVQKKyNpZm5kZWYgTk9DS0dFVEZRSE9TVAorCWlmICghY2tzdHJjaHIocCwnLicpKQor CSAgcCA9IChjaGFyICopY2tnZXRmcWhvc3RuYW1lKHApOworI2VuZGlmIC8qIE5PQ0tHRVRGUUhP U1QgKi8KKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKwlpZiAoIXApIHAgPSAiIjsKKwlpZiAoISpw KSBwID0gIih1bmtub3duKSI7CisJY2tzdHJuY3B5KHZ2YnVmLHAsdnZsZW4pOworICAgIH0KKyNl bmRpZiAvKiBfX2lhNjRfXyAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIF8zODZCU0Qg Ki8KKyNlbmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIEFQT0xMT1NSMTAgKi8KKyNlbHNlIC8q ICFTVk9SUE9TSVggKi8KKyNpZmRlZiBCU0Q0CisgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2 bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsKKyNlbHNlIC8qICFCU0Q0ICovCisjaWZkZWYgVk1TCisg ICAgZyA9IGdldGVudigiU1lTJE5PREUiKTsKKyAgICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcs dnZsZW4pOworICAgIHggPSAoaW50KXN0cmxlbih2dmJ1Zik7CisgICAgaWYgKHggPiAxICYmIHZ2 YnVmW3gtMV0gPT0gJzonICYmIHZ2YnVmW3gtMl0gPT0gJzonKSB2dmJ1Zlt4LTJdID0gTlVMOwor I2Vsc2UKKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgIGlmIChzeXMoJEhOQU1FLCZhYzAsJmFjMSwm YWMyKSA9PSAwKSAvKiBzdWNjZXNzZnVsICovCisgICAgICAgIHZ2bGVuID0gYWMyICsgMTsgICAg ICAgICAgICAgICAgLyogZW5oIC0gaGF2ZSB0byBhZGQgb25lICovCisjZWxzZQorI2lmZGVmIE9T MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9TLzIgKi8KKyAgICBnID0gb3MyX2dl dGhvc3RuYW1lKCk7CisgICAgaWYgKGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKKyNlbHNl IC8qIE9TMiAqLworI2lmZGVmIE9TSworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBpZiAoZ2V0 aG9zdG5hbWUodnZidWYsIHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsKKyNlbmRpZiAvKiBUQ1BT T0NLRVQgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBk YXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRp ZiAvKiBTVk9SUE9TSVggKi8KKyNlbHNlIC8qIE9YT1MgKi8KKyAgICAvKiBJZiBUQ1AvSVAgaXMg bm90IGluc3RhbGxlZCwgZ2V0aG9zdG5hbWUoKSBmYWlscywgdXNlIHVuYW1lKCkgKi8KKyAgICBp ZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkgeworICAgICAgICBpZiAodW5hbWUoJmhu YW1lKSA+IC0xKQorICAgICAgICAgICAgY2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVuYW1lLHZ2 bGVuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnZ2YnVmID0gTlVMOworICAgIH0KKyNl bmRpZiAvKiBPWE9TICovCisjZW5kaWYgLyogQkVMTFYxMCAqLworICAgIGlmICgqdnZidWYgPT0g TlVMKSB7ICAgICAgICAgICAgICAgIC8qIElmIGl0J3Mgc3RpbGwgZW1wdHkgKi8KKyAgICAgICAg ZyA9IGdldGVudigiSE9TVCIpOyAgICAgICAgICAgICAvKiB0cnkgdGhpcyAqLworICAgICAgICBp ZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcsdnZsZW4pOworICAgIH0KKyAgICB2dmJ1Zlt2dmxlbi0x XSA9IE5VTDsgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgcmVzdWx0IGlzIHRlcm1pbmF0ZWQu ICovCisjZW5kaWYgLyogcGRwMTEgKi8KK30KKyNpZmRlZiBCU0Q0NAorI3VuZGVmIEJTRDQKKyNk ZWZpbmUgQVRUU1YKKyNlbmRpZiAvKiBCU0Q0NCAqLworCisvKgorICBBIFMgSyBNIE8gUiBFICAt LSAgUG9vciBwZXJzb24ncyAibW9yZSIuCisgIFJldHVybnMgMCBpZiBubyBtb3JlLCAxIGlmIG1v cmUgd2FudGVkLgorKi8KK2ludAorYXNrbW9yZSgpIHsKKyAgICBjaGFyIGM7CisgICAgaW50IHJ2 LCBjeDsKKyNpZmRlZiBJS1NECisgICAgZXh0ZXJuIGludCB0aW1lbGltaXQ7CisjZW5kaWYgLyog SUtTRCAqLworI2lmZGVmIElLU0RDT05GCisgICAgZXh0ZXJuIGludCBpa3NkY2Y7CisjZW5kaWYg LyogSUtTRENPTkYgKi8KKyNpZmRlZiBDS19BUEMKKyAgICBleHRlcm4gaW50IGFwY3N0YXR1cywg YXBjYWN0aXZlOworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZkZWYgTk9JQ1AKKyAgICByZXR1 cm4oMSk7CisjZWxzZQorICAgIGlmICgheGFza21vcmUpCisgICAgICByZXR1cm4oMSk7CisjaWZk ZWYgSUtTRENPTkYKKyAgICBpZiAoaW5zZXJ2ZXIgJiYgIWlrc2RjZikKKyAgICAgIHJldHVybigx KTsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworI2lmZGVmIENLX0FQQworICAgIGlmIChhcGNhY3Rp dmUgPT0gQVBDX0xPQ0FMIHx8CisgICAgICAgIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAo YXBjc3RhdHVzICYgQVBDX05PSU5QKSkpCisgICAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBD S19BUEMgKi8KKyNpZmRlZiBWTVMKKyAgICBpZiAoYmF0Y2gpCisgICAgICByZXR1cm4oMSk7Cisj ZWxzZQorI2lmZGVmIFVOSVgKKyAgICBpZiAoYmFja2dyZCkKKyAgICAgIHJldHVybigxKTsKKyNl bmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZm5kZWYgVk1TCisgICAgY29u Y2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAgICAgLyogRm9yY2UgQ0JSRUFLIG1vZGUuICov CisjZW5kaWYgLyogVk1TICovCisKKyAgICBydiA9IC0xOworICAgIHdoaWxlIChydiA8IDApIHsK KyNpZm5kZWYgT1MyCisgICAgICAgIHByaW50ZigibW9yZT8gIik7CisjaWZkZWYgVU5JWAorI2lm ZGVmIE5PU0VUQlVGCisgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVG ICovCisjZW5kaWYgLyogVU5JWCAqLworI2Vsc2UKKyAgICAgICAgcHJpbnRmKCJtb3JlPyAiKTsK KyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBJS1NE CisgICAgICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICAgICAgY3ggPSBjbWRnZXRjKHRpbWVs aW1pdCk7CisgICAgICAgICAgICBpZiAoY3ggPCAtMSAmJiB0aW1lbGltaXQpIHsKKyAgICAgICAg ICAgICAgICBwcmludGYoIlxuP0lLUyBpZGxlIHRpbWVvdXQgLSBHb29kYnllLlxuIik7CisgICAg ICAgICAgICAgICAgZG9leGl0KEdPT0RfRVhJVCwwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo Y3ggPT0gLTEpIHsJLyogQ29ubmVjdGlvbiBsb3N0ICovCisgICAgICAgICAgICAgICAgZG9leGl0 KEJBRF9FWElULDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYyA9IChjaGFyKSBjeDsK KyAgICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgVk1TCisJICAgIGNv bmJpbigoY2hhcillc2NhcGUpOwkvKiBQcm90ZWN0IGFnYWluc3QgQ3RybC1aICovCisJICAgIGN4 ID0gY29uaW5jKDApOworCSAgICBjb25jYigoY2hhcillc2NhcGUpOworI2Vsc2UKKwkgICAgY3gg PSBjbWRnZXRjKDApOworI2VuZGlmIC8qIFZNUyAqLworCSAgICBkZWJ1ZyhGMTAxLCJhc2ttb3Jl IGNtZGdldGMiLCIiLGN4KTsKKwkgICAgaWYgKGN4ID09IEVPRikgeworCQlkZWJ1ZyhGMTAwLCJh c2ttb3JlIEVPRiIsIiIsMCk7CisjaWZkZWYgVk1TCisJCWMgPSAnXDAzMic7CisjZWxzZQorCQlj ID0gJ24nOworI2VuZGlmIC8qIFZNUyAqLworCSAgICB9IGVsc2UgeworCQljID0gKGNoYXIpY3g7 CisJICAgIH0KKwkgICAgZGVidWcoRjEwMSwiYXNrbW9yZSBjIiwiIixjKTsKKworI2lmZGVmIElL U0QKKwl9CisjZW5kaWYgLyogSUtTRCAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAg ICAvKiBZZXMgKi8KKwkgIGNhc2UgJ3AnOiBjYXNlICdQJzogY2FzZSAnZyc6IGNhc2UgJ0cnOiAv KiBQcm9jZWVkIG9yIEdvICovCisJICAgIHhhc2ttb3JlID0gMDsKKwkgICAgLyogZmFsbCB0aHJ1 IG9uIHB1cnBvc2UgKi8KKworICAgICAgICAgIGNhc2UgU1A6IGNhc2UgJ3knOiBjYXNlICdZJzog Y2FzZSAwMTI6ICBjYXNlIDAxNToKKyNpZmRlZiBPU0sKKyAgICAgICAgICAgIHdyaXRlKDEsICJc MDE1ICAgICAgXDAxNSIsIHNpemVvZiAiXDAxNSAgICAgIFwwMTUiIC0gMSk7CisjZWxzZQorICAg ICAgICAgICAgcHJpbnRmKCJcMDE1ICAgICAgXDAxNSIpOworI2VuZGlmIC8qIE9TSyAqLworICAg ICAgICAgICAgcnYgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgLyogTm8gKi8K KyAgICAgICAgICBjYXNlICduJzogY2FzZSAnTic6IGNhc2UgJ3EnOiBjYXNlICdRJzoKKyNpZmRl ZiBPU0sKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbHNlCisgICAgICAgICAgICBwcmlu dGYoIlwwMTVcMDEyIik7CisjZW5kaWYgLyogT1NLICovCisgICAgICAgICAgICBydiA9IDA7Cisg ICAgICAgICAgICBicmVhazsKKwkgIGNhc2UgJ1wwMDMnOgorCSAgY2FzZSAnXDAwNCc6CisJICBj YXNlICdcMDMyJzoKKyNpZmRlZiBPU0sKKwkgICAgcHJpbnRmKCJeJWMuLi5cbiIsIChjICsgMDEw MCkpOworI2Vsc2UKKwkgICAgcHJpbnRmKCJeJWMuLi5cMDE1XDAxMiIsIChjICsgMDEwMCkpOwor I2VuZGlmIC8qIE9TSyAqLworCSAgICBydiA9IDA7CisJICAgIGJyZWFrOworICAgICAgICAgIC8q IEludmFsaWQgYW5zd2VyICovCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRlYnVn KEYxMTEsImFza21vcmUiLCJpbnZhbGlkIGFuc3dlciIsYyk7CisgICAgICAgICAgICBwcmludGYo Ilkgb3Igc3BhY2UtYmFyIGZvciB5ZXMsIE4gZm9yIG5vLCBHIHRvIHNob3cgdGhlIHJlc3RcbiIp OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAg cHJpbnRmKCJcciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFxyIik7CisgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE9TMiAqLworICAg IH0KKyAgICByZXR1cm4ocnYpOworI2VuZGlmIC8qIE5PSUNQICovCit9CisKKy8qICBUIFIgQSBQ ICAtLSAgVGVybWluYWwgaW50ZXJydXB0IGhhbmRsZXIgKi8KKworU0lHVFlQCisjaWZkZWYgQ0tf QU5TSUMKK3RyYXAoaW50IHNpZykKKyNlbHNlCit0cmFwKHNpZykgaW50IHNpZzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworLyogdHJhcCAqLyB7CisgICAgZXh0ZXJuIGludCBiX3NhdmUsIGZfc2F2 ZTsKKyNpZm5kZWYgTk9JQ1AKKyAgICBleHRlcm4gaW50IHRpbWVsaW1pdDsKKyNlbmRpZiAvKiBO T0lDUCAqLworI2lmZGVmIE9TMgorICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHN0YXJ0ZmxhZ3M7 CisjaWZuZGVmIE5PU0VUS0VZCisgICAgZXh0ZXJuIGludCBvczJna3M7CisjZW5kaWYgLyogTk9T RVRLRVkgKi8KKyAgICBpbnQgaTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9TUEwKKyAg ICBleHRlcm4gaW50IGlfYWN0aXZlLCBpbnN0YXR1czsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lm ZGVmIFZNUworICAgIGludCBpOyBGSUxFICpmOworI2VuZGlmIC8qIFZNUyAqLworICAgIGV4dGVy biBpbnQgemNoa29kLCB6Y2hraWQ7CisjaWZuZGVmIE5PU1BMCisgICAgZXh0ZXJuIGludCB1bmtt YWNybzsKKyNlbmRpZiAvKiBOT1NQTCAqLworCisgICAgZGVib2sgPSAxOworI2lmZGVmIE5UU0lH CisgICAgY29ubm9pKCk7CisjZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBfX0VNWF9fCisgICAg c2lnbmFsKFNJR0lOVCwgU0lHX0FDSyk7CisjZW5kaWYKKyNpZmRlZiBHRU1ET1MKKy8qIEdFTSBp cyBub3QgcmVlbnRyYW50LCBubyBpL28gZnJvbSBpbnRlcnJ1cHQgbGV2ZWwgKi8KKyAgICBja2xv bmdqbXAoY21qYnVmLDEpOyAgICAgICAgICAgICAgICAvKiBKdW1wIGJhY2sgdG8gcGFyc2VyIG5v dyEgKi8KKyNlbmRpZiAvKiBHRU1ET1MgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxv ZykgeworCWRlYnVnKEYxMDAsIioqKioqKioqKioqKioqKioqKioqKiIsIiIsMCk7CisJaWYgKHNp ZyA9PSBTSUdJTlQpCisJICBkZWJ1ZyhGMTAxLCJ0cmFwIGNhdWdodCBTSUdJTlQiLCIiLHNpZyk7 CisJZWxzZSAKKwkgIGRlYnVnKEYxMDEsInRyYXAgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKKwlk ZWJ1ZyhGMTAwLCIqKioqKioqKioqKioqKioqKioqKioiLCIiLDApOworICAgIH0KKyNlbmRpZiAv KiBERUJVRyAqLworCisjaWZkZWYgT1MyCisgICAgaWYgKCBzaWcgPT0gU0lHQlJFQUsgJiYgKHN0 YXJ0ZmxhZ3MgJiAxMjgpICkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmFwIGlnbm9yaW5nIFNJ R0JSRUFLIiwiIixzaWcpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIE9TMiAq LworCisjaWZuZGVmIE5PSUNQCisgICAgdGltZWxpbWl0ID0gMDsgICAgICAgICAgICAgICAgICAg ICAgLyogSW4gY2FzZSB0aW1lZCBBU0sgaW50ZXJydXB0ZWQgKi8KKyNpZm5kZWYgTk9TUEwKKyAg ICB1bmttYWNybyA9IDA7CQkJLyogT3IgT05fVU5LTk9XTl9NQUNSTyBpbnRlcnJ1cHRlZC4uICov CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIHpjaGtvZCA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9yIGZpbGUgZXhwYW5zaW9uIGludGVycnVwdGVk Li4uICovCisgICAgemNoa2lkID0gMDsKKyAgICBpbnRlcnJ1cHRlZCA9IDE7CisKKyAgICBpZiAo d2hhdCAmIFdfQ09OTkVDVCkgewkJLyogQXJlIHdlIGluIENPTk5FQ1QgbW9kZT8gKi8KKy8qCisg IFRoZSBIUCB3b3Jrc3RhdGlvbiBSZXNldCBrZXkgc2VuZHMgc29tZSBraW5kIG9mIHVlYmVyLVNJ R0lOVCB0aGF0IGNhbiBub3QKKyAgYmUgU0lHX0lHTm9yZWQsIHNvIHdlIHdpbmQgdXAgaGVyZSBz b21laG93IChldmVuIHRob3VnaCB0aGlzIGlzICpub3QqIHRoZQorICBjdXJyZW50IFNJR0lOVCBo YW5kbGVyKS4gIEp1c3QgcmV0dXJuLgorKi8KKyAgICAgICAgZGVidWcoRjEwMSwidHJhcDogU0lH SU5UIGNhdWdodCBkdXJpbmcgQ09OTkVDVCIsIiIsc2lnKTsKKyAgICAgICAgU0lHUkVUVVJOOwor ICAgIH0KKyNpZm5kZWYgTk9TUEwKKyAgICBpZiAoaV9hY3RpdmUpIHsgICAgICAgICAgICAgICAg ICAgICAvKiBJTlBVVCBjb21tYW5kIHdhcyBhY3RpdmU/ICovCisgICAgICAgIGlfYWN0aXZlID0g MDsgICAgICAgICAgICAgICAgICAgLyogTm90IGFueSBtb3JlLi4uICovCisgICAgICAgIGluc3Rh dHVzID0gSU5QX1VJOyAgICAgICAgICAgICAgLyogSU5QVVQgc3RhdHVzID0gVXNlciBJbnRlcnJ1 cHRlZCAqLworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAg IGZ0cmVzZXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgZ2xvYmFsIHBy b3RvY29sIHNldHRpbmdzICovCisgICAgYmluYXJ5ID0gYl9zYXZlOyAgICAgICAgICAgICAgICAg ICAgLyogVGhlbiByZXN0b3JlIHRoZXNlICovCisgICAgZm5jbnYgID0gZl9zYXZlOworICAgIGJ5 ZV9hY3RpdmUgPSAwOworICAgIGRpcmFjdGl2ZSA9IDA7CisgICAgY2RhY3RpdmUgPSAwOworI2Vu ZGlmIC8qIE5PWEZFUiAqLworICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAg IC8qIElmIHdlIHdlcmUgdHJhbnNmZXJyaW5nIGEgZmlsZSwgKi8KKyAgICB6Y2xvc2UoWk9GSUxF KTsgICAgICAgICAgICAgICAgICAgICAvKiBjbG9zZSBpdC4gKi8KKyNpZm5kZWYgTk9JQ1AKKyAg ICBjbWRzcXVvKGNtZF9xdW90aW5nKTsgICAgICAgICAgICAgICAvKiBJZiBjb21tYW5kIHF1b3Rp bmcgd2FzIHR1cm5lZCBvZmYgKi8KKyNpZmRlZiBDS0xFQVJOCisgICAgeworCWV4dGVybiBGSUxF ICogbGVhcm5mcDsKKwlleHRlcm4gaW50IGxlYXJuaW5nOworCWlmIChsZWFybmZwKSB7CisJICAg IGZjbG9zZShsZWFybmZwKTsKKwkgICAgbGVhcm5mcCA9IE5VTEw7CisJICAgIGxlYXJuaW5nID0g MDsKKwl9CisgICAgfQorI2VuZGlmIC8qIENLTEVBUk4gKi8KKyNlbmRpZiAvKiBOT0lDUCAqLwor I2lmZGVmIENLX0FQQworICAgIGRlbG1hYygiX2FwY19jb21tYW5kcyIsMSk7CisgICAgYXBjYWN0 aXZlID0gQVBDX0lOQUNUSVZFOworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZkZWYgVk1TCisv KgorICBGaXggdGVybWluYWwuCisqLworICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAg ICAgICAgIC8qIElmIGN1cnNlcyB3aW5kb3cgb3BlbiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJe QyB0cmFwKCkgY3Vyc2VzIiwiIiwwKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIp OyAgICAgICAvKiBDbG9zZSBpdCAqLworICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlc3RvcmUgdGVybWluYWwgKi8KKyAgICAgICAgaSA9IHByaW50ZigiXkMuLi4i KTsgICAgICAgICAgICAvKiBFY2hvIF5DIHRvIHN0YW5kYXJkIG91dHB1dCAqLworICAgIH0gZWxz ZSB7CisgICAgICAgIGNvbnJlcygpOworICAgICAgICBpID0gcHJpbnRmKCJeQy4uLlxuIik7ICAg ICAgICAgIC8qIEVjaG8gXkMgdG8gc3RhbmRhcmQgb3V0cHV0ICovCisgICAgfQorICAgIGlmIChp IDwgMSAmJiBmZXJyb3Ioc3Rkb3V0KSkgeyAgICAgIC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciAq LworICAgICAgICBkZWJ1ZyhGMTAwLCJeQyB0cmFwKCkgZXJyb3IiLCIiLDApOworICAgICAgICBm Y2xvc2Uoc3Rkb3V0KTsgICAgICAgICAgICAgICAgIC8qIGNsb3NlIHN0YW5kYXJkIG91dHB1dCAq LworICAgICAgICBmID0gZm9wZW4oZGZ0dHksICJ3Iik7ICAgICAgICAgIC8qIG9wZW4gdGhlIGNv bnRyb2xsaW5nIHRlcm1pbmFsICovCisgICAgICAgIGlmIChmKSBzdGRvdXQgPSBmOyAgICAgICAg ICAgICAgLyogYW5kIG1ha2UgaXQgc3RhbmRhcmQgb3V0cHV0ICovCisgICAgICAgIHByaW50Zigi XkMuLi5cbiIpOyAgICAgICAgICAgICAgLyogYW5kIGVjaG8gdGhlIF5DIGFnYWluLiAqLworICAg IH0KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgVk1TICov CisjaWZkZWYgU1RSQVRVUworICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFNldCBjb25zb2xlIGJhY2sgdG8gbm9ybWFsIG1vZGUgKi8KKyNlbmRpZiAvKiBTVFJBVFVT ICovCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAg ICAgIC8qIElmIGN1cnNlcyB3aW5kb3cgb3BlbiwgKi8KKyAgICAgICAgZGVidWcoRjEwMCwiXkMg dHJhcCgpIGN1cnNlcyIsIiIsMCk7CisgICAgICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsJ LyogY2xvc2UgaXQuICovCisgICAgICAgIHByaW50ZigiXkMuLi4iKTsgICAgICAgICAgICAgICAg LyogRWNobyBeQyB0byBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICB9IGVsc2UgeworI2VuZGlmIC8q IE5PWEZFUiAqLworICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsKKyNpZm5kZWYgTk9YRkVSCisg ICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIGRhdGFn ZW5lcmFsCisgICAgY29ubm9pX210KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2lsbCBh c3luY2ggdGFzayB0aGF0IGxpc3RlbnMgdG8gKi8KKyAgICB0dGltb2ZmKCk7CisgICAgY29ucmVz KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGtleWJvYXJkICovCisjZW5kaWYg LyogZGF0YWdlbmVyYWwgKi8KKworI2lmbmRlZiBOT0NDVFJBUAorLyogIFRoaXMgaXMgc3R1cGlk IC0tIGV2ZXJ5IHZlcnNpb24gc2hvdWxkIGhhdmUgdHRpbW9mZigpLi4uICAqLworI2lmZGVmIFVO SVgKKyAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBh bnkgdGltZXIgaW50ZXJydXB0cyAqLworI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICB0dGltb2ZmKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0 cyAqLworI2Vsc2UKKyNpZmRlZiBTVFJBVFVTCisgICAgdHRpbW9mZigpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyNlbHNlCisj aWZkZWYgT1MyCisjaWZuZGVmIE5PU0VUS0VZCisgICAgb3MyZ2tzID0gMTsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogVHVybiBiYWNrIG9uIGtleWNvZGUgbWFwcGluZyAgKi8KKyNlbmRpZiAv KiBOT1NFVEtFWSAqLworI2lmbmRlZiBOT0xPQ0FMCisgICAgZm9yIChpID0gMDsgaSA8IFZOVU07 IGkrKykKKyAgICAgIFZzY3JuUmVzZXRQb3B1cChpKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisj aWZkZWYgVENQU09DS0VUCisjaWZkZWYgTlQKKyAgICAvKiBXU0FJc0Jsb2NraW5nKCkgcmV0dXJu cyBGQUxTRSBpbiBXaW45NSBkdXJpbmcgYSBibG9ja2luZyBhY2NlcHQgY2FsbCAqLworICAgIGlm ICggV1NBU2FmZVRvQ2FuY2VsIC8qICYmIFdTQUlzQmxvY2tpbmcoKSAqLyApIHsKKyAgICAgICAg V1NBQ2FuY2VsQmxvY2tpbmdDYWxsKCk7CisgICAgfQorI2VuZGlmIC8qIE5UICovCisjZW5kaWYg LyogVENQU09DS0VUICovCisjaWZkZWYgQ0tfTkVUQklPUworICAgIE5DQkNhbmNlbE91dHN0YW5k aW5nKCk7CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworICAgIHR0aW1vZmYoKTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisjZWxz ZQorI2lmZGVmIFZNUworICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisjZW5kaWYgLyogVk1TICovCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE9TSyAqLworI2Vu ZGlmIC8qIFVOSVggKi8KKworI2lmZGVmIE5FVFBUWQorICAgIC8qIENsZWFuIHVwIEN0cmwtQyBv dXQgb2YgUkVESVJFQ1Qgb3IgZXh0ZXJuYWwgcHJvdG9jb2wgKi8KKyAgICB7CisJZXh0ZXJuIFBJ RF9UIHB0eV9mb3JrX3BpZDsKKwlleHRlcm4gaW50IHB0eV9tYXN0ZXJfZmQsIHB0eV9zbGF2ZV9m ZDsKKwlpbnQgeDsKKworCXNpZ25hbChTSUdDSExELFNJR19JR04pOwkvKiBXZSBkb24ndCB3YW50 IHRoaXMgYW55IG1vcmUgKi8KKworCWRlYnVnKEYxMDEsInRyYXAgcHR5X21hc3Rlcl9mZCIsIiIs cHR5X21hc3Rlcl9mZCk7CisJaWYgKHB0eV9tYXN0ZXJfZmQgPiAyKSB7CisJICAgIHggPSBjbG9z ZShwdHlfbWFzdGVyX2ZkKTsKKwkgICAgZGVidWcoRjEwMSwidHJhcCBwdHlfbWFzdGVyX2ZkIGNs b3NlIiwiIix4KTsKKwl9CisJcHR5X21hc3Rlcl9mZCA9IC0xOworCWRlYnVnKEYxMDEsInRyYXAg cHR5X3NsYXZlX2ZkIiwiIixwdHlfc2xhdmVfZmQpOworCWlmIChwdHlfc2xhdmVfZmQgPiAyKSB7 CisJICAgIHggPSBjbG9zZShwdHlfc2xhdmVfZmQpOworCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0 eV9zbGF2ZV9mZCBjbG9zZSIsIiIseCk7CisJfQorCXB0eV9zbGF2ZV9mZCA9IC0xOworCWRlYnVn KEYxMDEsInRyYXAgcHR5X2ZvcmtfcGlkIiwiIixwdHlfZm9ya19waWQpOworCWlmIChwdHlfZm9y a19waWQgPiAwKSB7CisJICAgIHggPSBraWxsKHB0eV9mb3JrX3BpZCwwKTsJLyogU2VlIGlmIHRo ZSBmb3JrIGlzIHJlYWxseSB0aGVyZSAqLworCSAgICBkZWJ1ZyhGMTExLCJ0cmFwIHB0eV9mb3Jr X3BpZCBraWxsIDAgZXJybm8iLGNraXRvYSh4KSxlcnJubyk7CisJICAgIGlmICh4ID09IDApIHsJ CS8qIFNlZW1zIHRvIGJlIGFjdGl2ZSAqLworCQl4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHSFVQ KTsgLyogQXNrIGl0IHRvIGNsZWFuIHVwICYgZXhpdCAqLworCQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0 eV9mb3JrX3BpZCBraWxsIFNJR0hVUCIsIiIseCk7CisJCW1zbGVlcCgxMDApOworCQllcnJubyA9 IDA7CisJCXggPSBraWxsKHB0eV9mb3JrX3BpZCwwKTsgLyogSXMgaXQgc3RpbGwgdGhlcmU/ICov CisJCWlmICh4ID09IDAKKyNpZmRlZiBFU1JDSAorCQkgICAgLyogVGhpcyBtb2R1bGUgaXMgbm90 IGFsd2F5cyBleHBvc2VkIHRvIDxlcnJuby5oPiAqLworCQkgICAgfHwgZXJybm8gIT0gRVNSQ0gK KyNlbmRpZgkvKiBFU1JDSCAqLworCQkgICAgKSB7CisJCSAgICB4ID0ga2lsbChwdHlfZm9ya19w aWQsU0lHS0lMTCk7CisJCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIFNJ R0tJTEwiLCIiLHgpOworCQl9CisJICAgIH0KKwkgICAgcHR5X2ZvcmtfcGlkID0gLTE7CisJfQor ICAgIH0KKyNlbmRpZgkvKiBORVRQVFkgKi8KKworI2lmZGVmIE9TSworICAgIHNpZ21hc2soLTEp OworLyoKKyAgV2UgYXJlIGluIGFuIGludGVyY2VwdCByb3V0aW5lIGJ1dCBkbyBub3QgcGVyZm9y bSBhIEYkUlRFIChkb25lIGltcGxpY2l0bHkKKyAgYnkgcnRzKS4gIFdlIGhhdmUgdG8gZGVjcmVt ZW50IHRoZSBzaWdtYXNrIGFzIEYkUlRFIGRvZXMuICBXYXJuaW5nOiBsb25nanVtcAorICBvbmx5 IHJlc3RvcmVzIHRoZSBjcHUgcmVnaXN0ZXJzLCBOT1QgdGhlIGZwdSByZWdpc3RlcnMuICBTbyBk b24ndCB1c2UgZnB1IGF0CisgIGFsbCBvciBhdCBsZWFzdCBkb24ndCB1c2UgY29tbW9uIGZwdSAo ZG91YmxlIG9yIGZsb2F0KSByZWdpc3RlciB2YXJpYWJsZXMuCisqLworI2VuZGlmIC8qIE9TSyAq LworCisjaWZkZWYgTlRTSUcKKyAgICBQb3N0Q3RybENTZW0oKTsKKyNlbHNlIC8qIE5UU0lHICov CisgICAgZGVidWcoRjEwMCwidHJhcCBhYm91dCB0byBsb25nam1wIiwiIiwwKTsKKyNpZmRlZiBO VAorICAgIGNrbG9uZ2ptcChja2phZGRyKGNtamJ1ZiksMSk7CisjZWxzZSAvKiBOVCAqLworICAg IGNrbG9uZ2ptcChjbWpidWYsMSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBOVFNJRyAq LworI2Vsc2UgLyogTk9DQ1RSQVAgKi8KKy8qIE5vIEN0cmwtQyB0cmFwLCBqdXN0IGV4aXQuICov CisjaWZkZWYgQ0tfQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3Vyc2VzIHN1cHBv cnQ/ICovCisgICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIpOyAgICAgICAgICAgLyogQ2xvc2Ug Y3Vyc2VzIHdpbmRvdyAqLworI2VuZGlmIC8qIENLX0NVUlNFUyAqLworICAgIGRvZXhpdChCQURf RVhJVCx3aGF0KTsgICAgICAgICAgICAgIC8qIEV4aXQgcG9vcmx5ICovCisjZW5kaWYgLyogTk9D Q1RSQVAgKi8KKyAgICBTSUdSRVRVUk47Cit9CisKKworLyogIEMgSyBfIFQgSSBNIEUgIC0tIFJl dHVybnMgcG9pbnRlciB0byBjdXJyZW50IHRpbWUuICovCisKK2NoYXIgKgorY2tfdGltZSgpIHsK KyAgICBzdGF0aWMgY2hhciB0YnVmWzEwXTsKKyAgICBjaGFyICpwOworICAgIGludCB4OworCisg ICAgenRpbWUoJnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6 MDA6MDAgMTk5MCIgKi8KKyAgICBpZiAoIXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBsaWtlIGFzY3RpbWUoKSEgKi8KKyAgICAgIHJldHVybigiIik7CisgICAgaWYgKCpwKSB7Cisg ICAgICAgIGZvciAoeCA9IDExOyB4IDwgMTk7IHgrKykgICAgICAgLyogY29weSBoaDptbTpzcyAq LworICAgICAgICAgIHRidWZbeCAtIDExXSA9IHBbeF07ICAgICAgICAgIC8qIHRvIHRidWYgKi8K KyAgICAgICAgdGJ1Zls4XSA9IE5VTDsgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8K KyAgICB9CisgICAgcmV0dXJuKHRidWYpOyAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJl dHVybiBpdCAqLworfQorCisvKiAgQyBDIF8gQyBMIEUgQSBOICAtLSAgQ2xlYW51cCBhZnRlciB0 ZXJtaW5hbCBpbnRlcnJ1cHQgaGFuZGxlciAqLworCisjaWZkZWYgR0VNRE9TCitpbnQKK2NjX2Ns ZWFuKCkgeworICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdl IHdlcmUgdHJhbnNmZXJyaW5nIGEgZmlsZSwgKi8KKyAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAg ICAgICAgICAgICAgICAvKiBjbG9zZSBpdC4gKi8KKyAgICBwcmludGYoIl5DLi4uXG4iKTsgICAg ICAgICAgICAgICAgICAvKiBOb3QgVk1TLCBubyBwcm9ibGVtLi4uICovCit9CisjZW5kaWYgLyog R0VNRE9TICovCisKKworLyogIFMgVCBQIFQgUiBBIFAgLS0gSGFuZGxlIFNJR1RTVFAgKHN1c3Bl bmQpIHNpZ25hbHMgKi8KKworU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK3N0cHRyYXAoaW50IHNp ZykKKyNlbHNlCitzdHB0cmFwKHNpZykgaW50IHNpZzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor Lyogc3RwdHJhcCAqLyB7CisKKyNpZm5kZWYgTk9KQworICAgIGludCB4OyBleHRlcm4gaW50IGNt ZmxnczsKKyAgICBkZWJ1ZyhGMTAxLCJzdHB0cmFwKCkgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsK KyAgICBpZiAoIXhzdXNwZW5kKSB7CisgICAgICAgIHByaW50ZigiXHJcbnN1c3BlbmQgZGlzYWJs ZWRcclxuIik7CisjaWZuZGVmIE5PSUNQCisgICAgICAgIGlmICh3aGF0ICYgV19DT01NQU5EKSB7 CQkvKiBJZiB3ZSB3ZXJlIHBhcnNpbmcgY29tbWFuZHMgKi8KKyAgICAgICAgICAgIHByb21wdCh4 eHN0cmluZyk7ICAgICAgICAgICAvKiByZWlzc3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8K KyAgICAgICAgICAgIGlmICghY21mbGdzKSAgICAgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBh bnkpICovCisgICAgICAgICAgICAgIHByaW50ZigiJXMiLGNtZGJ1Zik7CisgICAgICAgIH0KKyNl bmRpZiAvKiBOT0lDUCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnJlcygpOyAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIGNvbnNvbGUgKi8KKyNpZm5kZWYgT1MyCisgICAg ICAgIC8qIEZsdXNoIHBlbmRpbmcgb3V0cHV0IGZpcnN0LCBpbiBjYXNlIHdlIGFyZSBjb250aW51 ZWQgKi8KKyAgICAgICAgLyogaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGNvdWxkIG1ha2UgdXMg YmxvY2sgKi8KKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisKKyAgICAgICAgeCA9IHBzdXNwZW5k KHhzdXNwZW5kKTsJCS8qIFRyeSB0byBzdXNwZW5kLiAqLworICAgICAgICBpZiAoeCA8IDApCisj ZW5kaWYgLyogT1MyICovCisgICAgICAgICAgcHJpbnRmKCJKb2IgY29udHJvbCBub3Qgc3VwcG9y dGVkXHJcbiIpOworICAgICAgICBjb25pbnQodHJhcCxzdHB0cmFwKTsgICAgICAgICAgIC8qIFJl YXJtIHRoZSB0cmFwLiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIGJhY2sgZnJvbSBz dXNwZW5kIiwiIiwwKTsKKyAgICAgICAgc3dpdGNoICh3aGF0KSB7CisgICAgICAgICAgY2FzZSBX X0NPTk5FQ1Q6ICAgICAgICAgICAgICAgLyogSWYgc3VzcGVuZGVkIGR1cmluZyBDT05ORUNUPyAq LworICAgICAgICAgICAgY29uYmluKChjaGFyKWVzY2FwZSk7ICAgICAgIC8qIHB1dCBjb25zb2xl IGJhY2sgaW4gYmluYXJ5IG1vZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInN0cHRyYXAg V19DT05ORUNUIiwiIiwwKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBOT0lDUAorICAg ICAgICAgIGNhc2UgV19DT01NQU5EOiAgICAgICAgICAgICAgIC8qIFN1c3BlbmRlZCBpbiBjb21t YW5kIG1vZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInN0cHRyYXAgV19DT01NQU5EIHBm bGFnIiwiIixwZmxhZyk7CisgICAgICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAg LyogUHV0IGJhY2sgQ0JSRUFLIHR0eSBtb2RlICovCisgICAgICAgICAgICBpZiAocGZsYWcpIHsg ICAgICAgICAgICAgICAgLyogSWYgY29tbWFuZCBwYXJzaW5nIHdhcyAqLworICAgICAgICAgICAg ICAgIHByb21wdCh4eHN0cmluZyk7ICAgICAgIC8qIHJlaXNzdWUgdGhlIHByb21wdCBhbmQgcGFy dGlhbCAqLworICAgICAgICAgICAgICAgIGlmICghY21mbGdzKSAgICAgICAgICAgIC8qIGNvbW1h bmQgKGlmIGFueSkgKi8KKyAgICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLGNtZGJ1Zik7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0lDUCAqLworICAg ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbCBvdGhlciBjYXNlcy4u LiAqLworICAgICAgICAgICAgZGVidWcoRjEwMCwic3RwdHJhcCBkZWZhdWx0IiwiIiwwKTsKKyAg ICAgICAgICAgIGNvbmNiKChjaGFyKWVzY2FwZSk7ICAgICAgICAvKiBQdXQgaXQgYmFjayBpbiBD QlJFQUsgbW9kZSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5k aWYgLyogTk9KQyAqLworICAgIFNJR1JFVFVSTjsKK30KKworI2lmZGVmIFRMT0cKKyNkZWZpbmUg VEJVRkwgMzAwCisKKy8qICBUIEwgTyBHICAtLSAgTG9nIGEgcmVjb3JkIGluIHRoZSB0cmFuc2Fj dGlvbiBmaWxlICAqLworLyoKKyBDYWxsIHdpdGggYSBmb3JtYXQgYW5kIDMgYXJndW1lbnRzOiB0 d28gc3RyaW5ncyBhbmQgYSBudW1iZXI6CisgICBmICAgICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5n IGluIHJhbmdlIDAtNywgYml0IHggaXMgb24sIGFyZyAjeCBpcyBwcmludGVkLgorICAgczEsczIg LSBTdHJpbmcgYXJndW1lbnRzIDAgYW5kIDEuCisgICBuICAgICAtIExvbmcsIGFyZ3VtZW50IDIu CisqLworVk9JRAorI2lmZGVmIENLX0FOU0lDCitkb3Rsb2coaW50IGYsIGNoYXIgKnMxLCBjaGFy ICpzMiwgQ0tfT0ZGX1QgbikKKyNlbHNlCitkb3Rsb2coZixzMSxzMixuKSBpbnQgZjsgQ0tfT0ZG X1QgbjsgY2hhciAqczEsICpzMjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG90bG9nICov IHsKKyAgICBzdGF0aWMgY2hhciBzW1RCVUZMXTsKKyAgICBleHRlcm4gaW50IHRsb2dmbXQ7Cisg ICAgY2hhciAqc3AgPSBzOyBpbnQgeDsKKyAgICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGlmICgh czIpIHMyID0gIiI7CisKKyAgICBpZiAoIXRyYWxvZykgcmV0dXJuOyAgICAgICAgICAgICAgICAv KiBJZiBubyB0cmFuc2FjdGlvbiBsb2csIGRvbid0ICovCisgICAgaWYgKHRsb2dmbXQgIT0gMSkg cmV0dXJuOworICAgIHN3aXRjaCAoZikgeworICAgICAgY2FzZSBGMDAwOiAgICAgICAgICAgICAg ICAgICAgICAgIC8qIDAgKHNwZWNpYWwpICJzMSBuIHMyIiAgKi8KKyAgICAgICAgaWYgKChpbnQp c3RybGVuKHMxKSArIChpbnQpc3RybGVuKHMyKSArIDE1ID4gVEJVRkwpCisgICAgICAgICAgc3By aW50ZihzcCwiP1QtTG9nIHN0cmluZyB0b28gbG9uZyIpOworICAgICAgICBlbHNlCisJICBzcHJp bnRmKHNwLCIlcyAlcyAlcyIsczEsY2tmc3RvYShuKSxzMik7CisgICAgICAgIGlmICh6c291dGwo WlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYw MDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSwgIiBuIiAqLworICAgICAgICBzcHJpbnRm KHNwLCIgJXMiLGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDAp IHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMDEwOiAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDIsICJbczJdIiAqLworICAgICAgICB4ID0gKGludClzdHJsZW4oczIp OworICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOworICAgICAgICBpZiAo eCArIDYgPiBUQlVGTCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7 CisgICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiWyVzXSIsczIpOworICAgICAgICBpZiAoenNvdXRs KFpURklMRSwiIikgPCAwKSB0cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug RjAxMTogICAgICAgICAgICAgICAgICAgICAgICAvKiAzLCAiW3MyXSBuIiAqLworICAgICAgICB4 ID0gKGludClzdHJsZW4oczIpOworICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAn XDAnOworICAgICAgICBpZiAoeCArIDYgPiBUQlVGTCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCI/ U3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiWyVzXSAlcyIsczIs Y2tmc3RvYShuKSk7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0g MDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAg ICAgLyogNCwgInMxIiAqLworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzMSkgPCAwKSB0cmFs b2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjEwMTogICAgICAgICAgICAgICAg ICAgICAgICAvKiA1LCAiczE6IG4iICovCisgICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyAx NSA+IFRCVUZMKQorICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKKyAg ICAgICAgZWxzZSBzcHJpbnRmKHNwLCIlczogJXMiLHMxLGNrZnN0b2EobikpOworICAgICAgICBp ZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAg ICAgY2FzZSBGMTEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYsICJzMSBzMiIgKi8KKyAg ICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKKyAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMy W3hdID0gJ1wwJzsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIHggKyA0ID4gVEJVRkwp CisgICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOworICAgICAgICBlbHNl CisJICBzcHJpbnRmKHNwLCIlcyVzJXMiLHMxLCgoKnMyID09ICc6JykgPyAiIiA6ICIgIiksczIp OworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBGMTExOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcsICJz MSBzMjogbiIgKi8KKyAgICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKKyAgICAgICAgaWYgKHMy W3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSAr IHggKyAxNSA+IFRCVUZMKQorICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmci KTsKKyAgICAgICAgZWxzZQorCSAgc3ByaW50ZihzcCwiJXMlcyVzOiAlcyIsczEsKCgqczIgPT0g JzonKSA/ICIiIDogIiAiKSxzMixja2ZzdG9hKG4pKTsKKyAgICAgICAgaWYgKHpzb3V0bChaVEZJ TEUscykgPCAwKSB0cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6Cisg ICAgICAgIHNwcmludGYoc3AsIj9JbnZhbGlkIGZvcm1hdCBmb3IgdGxvZygpIC0gJWQiLGYpOwor ICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgfQorfQor CisvKgorICBEIE8gWCBMIE8gRworCisgIFRoaXMgaXMgdGhlIHRyYW5zYWN0aW9uLWxvZyB3cml0 ZXIgZm9yIEJSSUVGIGZvcm1hdC4KKyAgVGhlIGlkZWEgaXMgcHJvZHVjZSBvbmUgcmVjb3JkIChs aW5lKSBwZXIgZmlsZS4gIEVhY2ggcmVjb3JkCisgIGhhcyB0aGUgZm9sbG93aW5nIGRlbGltaXRl ZCBmaWVsZHM6CisgICAgRGF0ZSAoeXl5eW1tZGQpCisgICAgVGltZSAoaGg6bW06c3MpCisgICAg QWN0aW9uOiBTRU5EIG9yIFJFQ1YKKyAgICBGaWxlIG5hbWUKKyAgICBGaWxlIHNpemUKKyAgICBU cmFuc2ZlciBtb2RlICh0ZXh0LCBiaW5hcnksIGltYWdlLCBsYWJlbGVkLCBldGMpLgorICAgIFN0 YXR1czogT0sgb3IgRkFJTEVECisgICAgRnJlZS1mb3JtIGNvbW1lbnRzIGluIGRvdWJsZXF1b3Rl cworICBUaGUgZGVmYXVsdCBzZXBhcmF0b3IgaXMgY29tbWEuCisgIElmIGEgZmllbGQgY29udGFp bnMgdGhlIHNlcGFyYXRvciwgaXQgaXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzLgorKi8KK1ZP SUQKKyNpZmRlZiBDS19BTlNJQworZG94bG9nKGludCB4LCBjaGFyICogZm4sIENLX09GRl9UIGZz LCBpbnQgZm0sIGludCBzdGF0dXMsIGNoYXIgKiBtc2cpCisjZWxzZQorZG94bG9nKHgsIGZuLCBm cywgZm0sIHN0YXR1cywgbXNnKQorICAgIGludCB4OyBjaGFyICogZm47IENLX09GRl9UIGZzOyBp bnQgZm07IGludCBzdGF0dXM7IGNoYXIgKiBtc2c7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8q IGRveGxvZyAqLyB7CisgICAgZXh0ZXJuIGludCB0bG9nc2VwOworICAgIGNoYXIgc2VwWzJdOwor ICAgIGNoYXIgYnVmW0NLTUFYUEFUSCsyNTZdLCAqIGJ1ZnA7CisgICAgY2hhciB0bXBidWZbMzJd OworICAgIGNoYXIgKiBzLCAqIHA7CisgICAgaW50IGxlbiwgbGVmdCwgZnRwID0gMCwgazsKKwor ICAgIGlmICghdHJhbG9nKSByZXR1cm47ICAgICAgICAgICAgICAgIC8qIElmIG5vIHRyYW5zYWN0 aW9uIGxvZywgZG9uJ3QgKi8KKworICAgIGlmICghZm4pIGZuID0gIiI7ICAgICAgICAgICAgICAg ICAgIC8qIFByb3RlY3QgYWdhaW5zdCBudWxsIHBvaW50ZXJzICovCisgICAgaWYgKCFtc2cpIG1z ZyA9ICIiOworICAgIGlmICh4ICYgV19GVFApCisgICAgICBmdHArKzsKKworICAgIHNlcFswXSA9 IChjaGFyKSB0bG9nc2VwOworICAgIHNlcFsxXSA9IE5VTDsKKyAgICBpZiAoIXNlcFswXSkgc2Vw WzBdID0gJywnOworCisgICAgYnVmcCA9IGJ1ZjsKKyAgICBsZWZ0ID0gc2l6ZW9mKGJ1Zik7Cisg ICAgZGVidWcoRjEwMSwiWFhYIGRveGxvZyBsZWZ0IDEiLCIiLGxlZnQpOworCisgICAgcCA9IHp6 bmRhdGUoKTsgICAgICAgICAgICAgICAgICAgICAgLyogRGF0ZSAqLworICAgIGNrbWFrbXNnKGJ1 ZiwgbGVmdCwgcCA/IHAgOiAiMDAwMDAwMDAiLCBzZXAsIE5VTEwsIE5VTEwpOworICAgIGJ1ZnAg Kz0gOTsKKyAgICBsZWZ0IC09IDk7CisgICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDIi LGJ1ZixsZWZ0KTsKKworICAgIHp0aW1lKCZwKTsKKyAgICBja3N0cm5jcHkoYnVmcCxwKzExLGxl ZnQpOworICAgIGJ1ZnAgKz0gODsKKyAgICBsZWZ0IC09IDg7CisgICAgZGVidWcoRjExMSwiWFhY IGRveGxvZyBsZWZ0IDMiLGJ1ZixsZWZ0KTsKKworICAgIGlmIChmdHApIHsKKwlpZiAoISh4ICYg KFdfU0VORHxXX1JFQ1YpKSkKKwkgIHJldHVybjsKKwlzID0gICh4ICYgV19TRU5EKSA/ICJQVVQi IDogIkdFVCI7CisJayA9IDM7CisgICAgfSBlbHNlIHsKKwlzID0gICh4ICYgV19TRU5EKSA/ICJT RU5EIiA6ICJSRUNWIjsKKwlrID0gNDsKKyAgICB9CisgICAgY2ttYWttc2coYnVmcCxsZWZ0LHNl cCxzLHNlcCxOVUxMKTsKKyAgICBidWZwICs9IGsgKyAyOworICAgIGxlZnQgLT0gKGsgKyAyKTsK KyAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNCIsYnVmLGxlZnQpOworCisgICAgcyA9 ICIiOworICAgIGlmIChja3N0cmNocihmbixzZXBbMF0pKQkJLyogRmlsZW5hbWUgKi8KKyAgICAg IHMgPSAiXCIiOworICAgIGNrbWFrbXNnKGJ1ZnAsbGVmdCxzLGZuLHMsc2VwKTsKKyAgICBzcHJp bnRmKHRtcGJ1ZiwiJXMiLGNrZnN0b2EoZnMpKTsJLyogU2l6ZSAqLworICAgIGNrc3RybmNhdChi dWYsdG1wYnVmLENLTUFYUEFUSCk7CisgICAgY2tzdHJuY2F0KGJ1ZixzZXAsQ0tNQVhQQVRIKTsK KyAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgNCIsYnVmLDApOworCisjaWZkZWYgTk9JQ1AKKyAgICAv KiBUcmFuc2ZlciBtb2RlICovCisgICAgY2tzdHJuY3B5KHRtcGJ1ZiwgKGJpbmFyeSA/ICJiaW5h cnkiIDogInRleHQiKSwgVE1QQlVGU0laKTsKKyNlbHNlCisgICAgY2tzdHJuY3B5KHRtcGJ1Zixn Zm1vZGUoZm0sMCksVE1QQlVGU0laKTsKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIGlmIChja3N0 cmNocih0bXBidWYsc2VwWzBdKSkgeyAgICAgIC8qIE1pZ2h0IGNvbnRhaW4gc3BhY2VzICovCisg ICAgICAgIGNrc3RybmNhdChidWYsIlwiIixDS01BWFBBVEgpOworICAgICAgICBja3N0cm5jYXQo YnVmLHRtcGJ1ZixDS01BWFBBVEgpOworICAgICAgICBja3N0cm5jYXQoYnVmLCJcIiIsQ0tNQVhQ QVRIKTsKKyAgICB9IGVsc2UKKyAgICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFUSCk7 CisgICAgY2tzdHJuY2F0KGJ1ZixzZXAsQ0tNQVhQQVRIKTsKKyAgICBkZWJ1ZyhGMTEwLCJkb3hs b2cgNSIsYnVmLDApOworCisgICAgY2tzdHJuY2F0KGJ1Ziwgc3RhdHVzID8gIkZBSUxFRCIgOiAi T0siLENLTUFYUEFUSCk7CisgICAgbGVuID0gc3RybGVuKGJ1Zik7CisgICAgbGVmdCA9IENLTUFY UEFUSCsyNTYgLSBsZW47CisgICAgaWYgKGxlZnQgPCAyKSBmYXRhbCgiZG94bG9nIGJ1ZmZlciBv dmVybG93Iik7CisKKyAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNSIsYnVmLGxlZnQp OworCisgICAgZGVidWcoRjExMCwiZG94bG9nIGJ1ZiAxIiwgYnVmLCBsZW4pOworICAgIHMgPSBi dWYgKyBsZW47CisgICAgaWYgKHN0YXR1cyA9PSAwICYmIGxlZnQgPiAzMikgeworICAgICAgICBs b25nIGNwcyA9IDBMOworI2lmZGVmIEdGVElNRVIKKwlkZWJ1ZyhGMTAxLCJET1hMT0cgZnB4ZnNl Y3MiLCIiLChsb25nKShmcHhmc2VjcyAqIDEwMDApKTsKKyAgICAgICAgaWYgKGZweGZzZWNzKSBj cHMgPSAobG9uZykoKENLRkxPQVQpIGZzIC8gZnB4ZnNlY3MpOworICAgICAgICBzcHJpbnRmKHMs IiVzXCIlMC4zZnNlYyAlbGRjcHNcIiIsc2VwLGZweGZzZWNzLGNwcyk7CisjZWxzZQorICAgICAg ICBpZiAoeGZzZWNzKSBjcHMgPSBmcyAvIHhmc2VjczsKKyAgICAgICAgc3ByaW50ZihzLCIlc1wi JWxkc2VjICVsZGNwc1wiIixzZXAseGZzZWNzLGNwcyk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLwor ICAgIH0gZWxzZSBpZiAoKGludClzdHJsZW4obXNnKSArIDQgPCBsZWZ0KSB7CisgICAgICAgIHNw cmludGYocywiJXNcIiVzXCIiLHNlcCxtc2cpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJYWFgg ZG94bG9nIGxlZnQgNSIsYnVmLGxlZnQpOworCisgICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1 ZiwwKTsKKyAgICB4ID0genNvdXRsKFpURklMRSxidWYpOworICAgIGRlYnVnKEYxMDEsImRveGxv ZyB6c291dGwiLCIiLHgpOworICAgIGlmICh4IDwgMCkgdHJhbG9nID0gMDsKK30KKyNlbmRpZiAv KiBUTE9HICovCisKKyNpZm5kZWYgTUFDCisvKgorICBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMg Zm9yIGFsbCBpbXBsZW1lbnRhdGlvbnMgYnV0IHRoZSBNYWNpbnRvc2guCisqLworCisjaWZkZWYg Q0tfQ1VSU0VTCitzdGF0aWMgaW50IHJlcGFpbnQgPSAwOyAgICAgICAgICAgICAgICAgLyogVHJh bnNmZXIgZGlzcGxheSBuZWVkcyByZXBhaW50aW5nICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICov CisKKyNpZm5kZWYgTk9YRkVSCisvKiAgQyBIIEsgSSBOIFQgIC0tICBDaGVjayBmb3IgY29uc29s ZSBpbnRlcnJ1cHRzICAqLworCisvKgorICBVc2VkIGR1cmluZyBmaWxlIHRyYW5zZmVyIGluIGxv Y2FsIG1vZGUgb25seToKKyAgLiBJZiB1c2VyIGhhcyBub3QgdG91Y2hlZCB0aGUga2V5Ym9hcmQs IHJldHVybnMgMCB3aXRoIG5vIHNpZGUgZWZmZWN0cy4KKyAgLiBJZiB1c2VyIHR5cGVkIFMgb3Ig QSAoZXRjLCBzZWUgYmVsb3cpIHByaW50cyBzdGF0dXMgbWVzc2FnZSBhbmQgcmV0dXJucyAwLgor ICAuIElmIHVzZXIgdHlwZWQgWCBvciBGIChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAwIHdpdGgg Y3hzZWVuIHNldCB0byAxLgorICAuIElmIHVzZXIgdHlwZWQgWiBvciBCIChldGMsIHNlZSBiZWxv dykgcmV0dXJucyAwIHdpdGggY3pzZWVuIHNldCB0byAxLgorICAuIElmIHVzZXIgdHlwZWQgRSBv ciBDIChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAtMS4KKyovCitpbnQKK2Noa2ludCgpIHsKKyAg ICBpbnQgY2gsIGNuLCBvZmQ7IGxvbmcgeno7CisgICAgaWYgKCF4ZnJpbnQpCisgICAgICByZXR1 cm4oMCk7CisgICAgaWYgKCghbG9jYWwpIHx8IChxdWlldCkpIHJldHVybigwKTsgLyogT25seSBk byB0aGlzIGlmIGxvY2FsICYgbm90IHF1aWV0ICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBp ZiAoY29uX3JlYWRzX210KSAgICAgICAgICAgICAgICAgICAvKiBpZiBjb25pbnRfbXQgdGFzayBp cyBhY3RpdmUgKi8KKyAgICAgIGlmIChjb25pbnRfYXZsKSB7ICAgICAgICAgICAgICAgICAvKiBh bmQgdGhlcmUncyBhbiBpbnRlcnJ1cHQgcGVuZGluZyAqLworICAgICAgICAgIGNuID0gMTsgICAg ICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3MgaXQgKi8KKyAgICAgICAgICBjaCA9IGNvbmlu dF9jaDsKKyAgICAgICAgICBjb25pbnRfYXZsID0gMDsgICAgICAgICAgICAgICAvKiB0dXJuIG9m ZiBmbGFnIHNvIGNvbmludF9tdCBjYW4gKi8KKyAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBwcm9jZWVkICovCisgICAgICAgIHJldHVybigwKTsKKyAgICBlbHNlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBjb25pbnRfbXQgbm90IGFjdGl2ZSAq LworICAgICAgaWYgKChjaCA9IGNvbmluYygyKSkgPCAwKSAgICAgICAgIC8qIHRyeSB0byBnZXQg Y2hhciBtYW51YWxseSAqLworICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAg IC8qIEkvTyBlcnJvciwgb3Igbm8gZGF0YSAqLworICAgICAgZWxzZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGlmIHN1Y2Nlc3NmdWwsIHNldCBjbiBzbyB3ZSAqLworICAgICAgICBj biA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGtub3cgd2UgZ290IG9uZSAqLworICAg IGRlYnVnKEYxMDEsImNoa2ludCBnb3Qga2V5Ym9hcmQgY2hhcmFjdGVyIixjaCxjbik7CisjZWxz ZSAvKiAhZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBOVFNJRworICAgIHsKKyAgICAgICAgZXh0ZXJu IGludCBUbHNJbmRleDsKKyAgICAgICAgc3RydWN0IF90aHJlYWRpbmZvICogdGhyZWFkaW5mbzsK KyAgICAgICAgdGhyZWFkaW5mbyA9IChzdHJ1Y3QgX3RocmVhZGluZm8gKikgVGxzR2V0VmFsdWUo VGxzSW5kZXgpOworICAgICAgICBpZiAodGhyZWFkaW5mbykgeworICAgICAgICAgICAgaWYgKCFX YWl0U2VtKHRocmVhZGluZm8tPkRpZVNlbSwwKSkKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOyAg ICAgICAgICAgICAgICAvKiBDYW5jZWwgSW1tZWRpYXRlbHkgKi8KKyAgICAgICAgfQorICAgIH0K KyNlbmRpZiAvKiBOVFNJRyAqLworICAgIGNuID0gY29uY2hrKCk7ICAgICAgICAgICAgICAgICAg ICAgIC8qIEFueSBpbnB1dCB3YWl0aW5nPyAqLworICAgIGRlYnVnKEYxMDEsImNvbmNoayIsIiIs Y24pOworICAgIGlmIChjbiA8IDEpIHJldHVybigwKTsKKyAgICBjaCA9IGNvbmluYyg1KSA7Cisg ICAgZGVidWcoRjEwMSwiY29uaW5jIiwiIixjaCk7CisgICAgaWYgKGNoIDwgMCkgcmV0dXJuKDAp OworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyAgICBjaCAmPSAwMTc3OworICAgIHN3aXRj aCAoY2gpIHsKKyAgICAgIGNhc2UgJ0EnOiBjYXNlICdhJzogY2FzZSAwMDAxOiAgICAvKiBTdGF0 dXMgcmVwb3J0ICovCisgICAgICBjYXNlICdTJzogY2FzZSAncyc6CisgICAgICAgIGlmIChmZGlz cGxhICE9IFhZRkRfUiAmJiBmZGlzcGxhICE9IFhZRkRfUyAmJiBmZGlzcGxhICE9IFhZRkRfTikK KyAgICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGZvciBzZXJp YWwsIHNpbXBsZSBvciBub25lICovCisgICAgICAgIG9mZCA9IGZkaXNwbGE7ICAgICAgICAgICAg ICAgICAgLyogW01GXSBTYXZlIGZpbGUgZGlzcGxheSB0eXBlICovCisgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfTikKKyAgICAgICAgICBmZGlzcGxhID0gWFlGRF9SOyAgICAgICAgICAgICAv KiBbTUZdIFByZXRlbmQgc2VyaWFsIGlmIG5vIGRpc3BsYXkgKi8KKyAgICAgICAgeHhzY3JlZW4o U0NSX1ROLDAsMGwsIlN0YXR1cyByZXBvcnQ6Iik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9UTiww LDBsLCIgZmlsZSB0eXBlOiAiKTsKKyAgICAgICAgaWYgKGJpbmFyeSkgeworICAgICAgICAgICAg c3dpdGNoKGJpbmFyeSkgeworICAgICAgICAgICAgICBjYXNlIFhZRlRfTDogeHhzY3JlZW4oU0NS X1RaLDAsMGwsImxhYmVsZWQiKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9JOiB4 eHNjcmVlbihTQ1JfVFosMCwwbCwiaW1hZ2UiKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug WFlGVF9VOiB4eHNjcmVlbihTQ1JfVFosMCwwbCwiYmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsK KyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0I6IHh4c2Ny ZWVuKFNDUl9UWiwwLDBsLCJiaW5hcnkiKTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg IH0gZWxzZSB7CisjaWZkZWYgTk9DU0VUUworICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAs MGwsInRleHQiKTsKKyNlbHNlCisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwidGV4 dCwgIik7CisgICAgICAgICAgICBpZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9 PSAwKSB7CisgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsInRyYW5zcGFyZW50 Iik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19T RU5EKSB7CisgICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLHRjc2luZm9b dGNoYXJzZXRdLmtleXdvcmQpOworICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUs MCwwbCwiID0+ICIpOworICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCxm Y3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCxmY3NpbmZvW2ZjaGFyc2V0XS5r ZXl3b3JkKTsKKyAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAi KTsKKyAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsdGNzaW5mb1t0Y2hh cnNldF0ua2V5d29yZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlm IC8qIE5PQ1NFVFMgKi8KKyAgICAgICAgfQorICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmaWxj bnQsIiBmaWxlIG51bWJlciIpOworICAgICAgICBpZiAoZnNpemUpIHh4c2NyZWVuKFNDUl9RRSww LGZzaXplLCIgc2l6ZSIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmZmMsIiBjaGFyYWN0 ZXJzIHNvIGZhciIpOworICAgICAgICBpZiAoZnNpemUgPiAwTCkgeworI2lmZGVmIENLX1JFU0VO RAorICAgICAgICAgICAgenogPSB3aGF0ICYgV19TRU5EID8gc2VuZHN0YXJ0IDogd2hhdCAmIFdf UkVDViA/IHJzX2xlbiA6IDA7CisgICAgICAgICAgICB6eiA9ICggKGZmYyArIHp6KSAqIDEwMEwg KSAvIGZzaXplOworI2Vsc2UKKyAgICAgICAgICAgIHp6ID0gKCBmZmMgKiAxMDBMICkgLyBmc2l6 ZTsKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSww LHp6LCAgICAgICIgcGVyY2VudCBkb25lIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJjdHUg PT0gNCkgeyAgICAgICAgICAgICAgICAvKiBCbG9jayBjaGVjayAqLworICAgICAgICAgICAgeHhz Y3JlZW4oU0NSX1RVLDAsMEwsIiBibG9jayBjaGVjazogIik7CisgICAgICAgICAgICB4eHNjcmVl bihTQ1JfVFosMCwwTCwiYmxhbmstZnJlZS0yIik7CisgICAgICAgIH0gZWxzZSB4eHNjcmVlbihT Q1JfUUUsMCwobG9uZyliY3R1LCAgIiBibG9jayBjaGVjayIpOworICAgICAgICB4eHNjcmVlbihT Q1JfUUUsMCwobG9uZylycHRmbGcsIiBjb21wcmVzc2lvbiIpOworICAgICAgICB4eHNjcmVlbihT Q1JfUUUsMCwobG9uZyllYnFmbGcsIiA4dGgtYml0IHByZWZpeGluZyIpOworICAgICAgICB4eHNj cmVlbihTQ1JfUUUsMCwobG9uZylsc2NhcHUsIiBsb2NraW5nIHNoaWZ0cyIpOworICAgICAgICBp ZiAoIW5ldHdvcmspCisgICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsIHNwZWVkLCAiIHNwZWVk Iik7CisgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKQorCisgICAgICAgICAgeHhzY3JlZW4oU0NS X1FFLDAsc3BzaXosICIgcGFja2V0IGxlbmd0aCIpOworICAgICAgICBlbHNlIGlmICh3aGF0ICYg V19SRUNWIHx8IHdoYXQgJiBXX1JFTU8pCisgICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsdXJw c2l6LCIgcGFja2V0IGxlbmd0aCIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx3c2xvdHMs ICAiIHdpbmRvdyBzbG90cyIpOworICAgICAgICBmZGlzcGxhID0gb2ZkOyAvKiBbTUZdIFJlc3Rv cmUgZmlsZSBkaXNwbGF5IHR5cGUgKi8KKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNl ICdCJzogY2FzZSAnYic6IGNhc2UgMDAwMjogICAgLyogQ2FuY2VsIGJhdGNoICovCisgICAgICBj YXNlICdaJzogY2FzZSAneic6IGNhc2UgMDAzMjoKKyAgICAgICAgY3pzZWVuID0gMTsKKyAgICAg ICAgaW50ZXJydXB0ZWQgPSAxOworICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAor ICAgICAgICAgICAgICAgICAoKCh3aGF0ICYgV19SRUNWKSAmJiAod3Nsb3RzID4gMSkpID8KKyAg ICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgYmF0Y2gsIHdhaXQuLi4gIiA6CisgICAgICAgICAg ICAgICAgICAiQ2FuY2VsaW5nIGJhdGNoLi4uICIpCisgICAgICAgICAgICAgICAgICk7CisgICAg ICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSAnRic6IGNhc2UgJ2YnOiBjYXNlIDAwMDY6ICAg IC8qIENhbmNlbCBmaWxlICovCisgICAgICBjYXNlICdYJzogY2FzZSAneCc6IGNhc2UgMDAzMDoK KyAgICAgICAgY3hzZWVuID0gMTsKKyAgICAgICAgaW50ZXJydXB0ZWQgPSAxOworICAgICAgICB4 eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAorICAgICAgICAgICAgICAgICAoKCh3aGF0ICYgV19S RUNWKSAmJiAod3Nsb3RzID4gMSkpID8KKyAgICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgZmls ZSwgd2FpdC4uLiAiIDoKKyAgICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgZmlsZS4uLiAiKQor ICAgICAgICAgICAgICAgICApOworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgJ1In OiBjYXNlICdyJzogY2FzZSAwMDIyOiAgICAvKiBSZXNlbmQgcGFja2V0ICovCisgICAgICBjYXNl IDAwMTU6IGNhc2UgMDAxMjoKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgaWYgKHN0cmVhbWlu ZykKKyAgICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAg IHh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsIlJlc2VuZGluZyBwYWNrZXQuLi4gIik7CisgICAg ICAgIG51bWVycnMrKzsKKyAgICAgICAgcmVzZW5kKHdpbmxvKTsKKyAgICAgICAgcmV0dXJuKDAp OworCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICAgIGNhc2UgJ1wwMyc6ICAgICAgICAgICAgICAg ICAgICAgICAvKiBXZSdyZSBub3QgdHJhcHBpbmcgXkMncyB3aXRoICovCisgICAgICAgIHRyYXAo MCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogc2lnbmFscywgc28gd2UgY2hlY2sgaGVyZSAg ICAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyAgICAgIGNhc2UgJ0MnOiBjYXNlICdj JzogICAgICAgICAgICAgICAvKiBDdHJsLUMgKi8KKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICAg IGNhc2UgJ1wwMyc6CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworICAgICAgY2FzZSAnRSc6 IGNhc2UgJ2UnOiAgICAgICAgICAgICAgIC8qIFNlbmQgZXJyb3IgcGFja2V0ICovCisgICAgICBj YXNlIDAwMDU6CisgICAgICAgIGludGVycnVwdGVkID0gMTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KworI2lmZGVmIENLX0NVUlNFUworICAgICAgY2FzZSAwMDE0OiAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEN0cmwtTCB0byByZWZyZXNoIHNjcmVlbiAqLworICAgICAgY2FzZSAnTCc6IGNhc2Ug J2wnOiAgICAgICAgICAgICAgIC8qIEFsc28gYWNjZXB0IEwgKHVwcGVyLCBsb3dlcikgKi8KKyAg ICAgIGNhc2UgMDAyNzogICAgICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLVcgc3lub255bSBm b3IgVk1TICYgSW5ncmVzICovCisgICAgICAgIHJlcGFpbnQgPSAxOworICAgICAgICByZXR1cm4o MCk7CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKyAgICAgIGNhc2UgJ1QnOgorICAgICAgY2Fz ZSAndCc6CQkJCS8qIFR1cm4gb24gZGVidWctbG9nIHRpbWVzdGFtcHMgKi8KKyNpZmRlZiBERUJV RworCXsKKwkgICAgZXh0ZXJuIGludCBkZWJ0aW07CisJICAgIGlmIChjaCA9PSAnVCcpIHsKKwkJ ZGVidGltID0gMTsKKwkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwKKwkJCSAiRGVidWcgdGlt ZXN0YW1wcyBPbi4uLiAiKTsKKwkgICAgfSBlbHNlIHsKKwkJZGVidGltID0gMTsKKwkJeHhzY3Jl ZW4oU0NSX1NULFNUX01TRywwbCwKKwkJCSAiRGVidWcgdGltZXN0YW1wcyBPZmYuLi4gIik7CisJ ICAgIH0KKwl9CisjZW5kaWYgLyogREVCVUcgKi8KKwlyZXR1cm4oMCk7CisKKyAgICAgIGNhc2Ug J0QnOgorI2lmZGVmIERFQlVHCisJaWYgKCFkZWJsb2cpIHsKKwkgICAgZGVib3BuKCJkZWJ1Zy5s b2ciLDApOworCSAgICBpZiAoZGVibG9nKSB7CisJCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGws ImRlYnVnLmxvZyBvcGVuLi4uICIpOworCSAgICB9IGVsc2UgeworCQl4eHNjcmVlbihTQ1JfU1Qs U1RfTVNHLDBsLCJkZWJ1Zy5sb2cgb3BlbiBGQUlMRUQuLi4gIik7CisJICAgIH0KKwl9IGVsc2Ug eworCSAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJEZWJ1ZyBsb2cgT24uLi4gIik7CisJ fQorCWlmIChkZWJsb2cpCisJICBkZWJvayA9IDE7CisjZW5kaWYgLyogREVCVUcgKi8KKwlyZXR1 cm4oMCk7CisKKyAgICAgIGNhc2UgJ2QnOgkJCQkvKiBUdXJuIG9mZiBkZWJ1Z2dpbmcgKi8KKyNp ZmRlZiBERUJVRworCWlmIChkZWJsb2cpCisJICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJE ZWJ1ZyBsb2cgT2ZmLi4uICIpOworCWRlYm9rID0gMDsKKyNlbmRpZiAvKiBERUJVRyAqLworCXJl dHVybigwKTsKKworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFu eXRoaW5nIGVsc2UsIHByaW50IG1lc3NhZ2UgKi8KKyAgICAgICAgaW50bXNnKDFMKTsKKyAgICAg ICAgcmV0dXJuKDApOworICAgIH0KK30KKworLyogIEkgTiBUIE0gUyBHICAtLSAgSXNzdWUgbWVz c2FnZSBhYm91dCB0ZXJtaW5hbCBpbnRlcnJ1cHRzICAqLworCitWT0lECisjaWZkZWYgQ0tfQU5T SUMKK2ludG1zZyhsb25nIG4pCisjZWxzZQoraW50bXNnKG4pIGxvbmcgbjsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworLyogaW50bXNnICovIHsKKyNpZmRlZiBDS19ORUVEX1NJRworICAgIGNoYXIg YnVmWzgwXTsKKyNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLworCisgICAgaWYgKCFkaXNwbGEgfHwg cXVpZXQpICAgICAgICAgICAgICAgLyogTm90IGlmIHdlJ3JlIGJlaW5nIHF1aWV0ICovCisgICAg ICByZXR1cm47CisgICAgaWYgKHNlcnZlciAmJiAoIXNydmRpcyB8fCBuID4gLTFMKSkgLyogU3Bl Y2lhbCBmb3Igc2VydmVyICovCisgICAgICByZXR1cm47CisjaWZkZWYgQ0tfTkVFRF9TSUcKKyAg ICBidWZbMF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgICAgICAvKiBLZWVwIGNvbXBpbGVycyBo YXBweSAqLworI2VuZGlmIC8qIENLX05FRURfU0lHICovCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBT Vk9SUE9TSVgKKyAgICBjb25jaGsoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVh ciBvdXQgcGVuZGluZyBlc2NhcGUtc2lnbmFscyAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLwor I2VuZGlmIC8qICEgT1hPUyAqLworI2lmZGVmIFZNUworICAgIGNvbnJlcygpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFNvIEN0cmwtQyB3aWxsIHdvcmsgKi8KKyNlbmRpZiAvKiBWTVMg Ki8KKyAgICBpZiAoKCFzZXJ2ZXIgJiYgbiA9PSAxTCkgfHwgKHNlcnZlciAmJiBuIDwgMEwpKSB7 CisKKyNpZmRlZiBDS19ORUVEX1NJRworICAgICAgICBpZiAoeGZyaW50KSB7CisJICAgIGNrbWFr bXNnKGJ1ZiwKKwkJICAgICA4MCwKKwkJICAgICAiVHlwZSBlc2NhcGUgY2hhcmFjdGVyICgiLAor CQkgICAgIGRiY2hyKGVzY2FwZSksCisJCSAgICAgIikgZm9sbG93ZWQgYnk6IiwKKwkJICAgICBO VUxMCisJCSAgICAgKTsKKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLGJ1Zik7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBDS19ORUVEX1NJRyAqLworCisgICAgICAgIGlmICh4ZnJpbnQp IHsKKyAgICAgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgeHhzY3JlZW4oU0NS X1ROLDAsMGwsIlggdG8gY2FuY2VsIGZpbGUsICBDUiB0byByZXNlbmQgY3VycmVudCBwYWNrZXQi KTsKKyB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiWiB0byBjYW5jZWwgZ3JvdXAsIEEgZm9yIHN0YXR1 cyByZXBvcnQiKTsKKyB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiRSB0byBzZW5kIEVycm9yIHBhY2tl dCwgQ3RybC1DIHRvIHF1aXQgaW1tZWRpYXRlbHk6ICIpOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiQ3RybC1DIHRvIGNhbmNlbCBm aWxlIHRyYW5zZmVyOiAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJUcmFuc2ZlciBpbnRlcnJ1cHRpb24gZGlzYWJs ZWQuICIpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeHhzY3JlZW4oU0NSX1RVLDAsMGws IiAiKTsKK30KKworI2lmbmRlZiBOT0RJU1BMQVkKK3N0YXRpYyBpbnQgbmV3ZHB5ID0gMDsgICAg ICAgICAgICAgICAgICAvKiBOZXcgZGlzcGxheSBmbGFnICovCitzdGF0aWMgY2hhciBmYnVmWzgw XTsgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgYnVmZmVyICovCitzdGF0aWMgY2hhciBh YnVmWzgwXTsgICAgICAgICAgICAgICAgICAgLyogQXMtbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBj aGFyIGEyYnVmWzgwXTsgICAgICAgICAgICAgICAgICAvKiBTZWNvbmQgQXMtbmFtZSBidWZmZXIg Ki8KK3N0YXRpYyBDS19PRkZfVCBvbGRmZmMgPSAwTDsKK3N0YXRpYyBDS19PRkZfVCBkb3RzID0g MEw7CitzdGF0aWMgaW50IGhwb3MgPSAwOworCitzdGF0aWMgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBTZXJpYWwgb3IgQ1JUIGRpc3BsYXkgKi8KK2RweWlu aXQoKSB7CisgICAgaW50IG0gPSAwLCBuID0gMDsKKyAgICBjaGFyICogcyA9ICIiOworCisgICAg bmV3ZHB5ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogIERvbid0IGRvIHRoaXMgYWdh aW4gKi8KKyAgICBvbGRmZmMgPSAoQ0tfT0ZGX1QpMDsJCS8qICBSZXNldCB0aGlzICovCisgICAg ZG90cyA9IChDS19PRkZfVCkwOwkJCS8qICBhbmQgdGhpcy4uICovCisgICAgb2xkY3BzID0gY3Bz ID0gMEw7CisKKyAgICBjb25vbGwoIiIpOwkJCQkvKiBOZXcgbGluZSAqLworICAgIGlmICh3aGF0 ICYgV19TRU5EKSBzID0gIlNlbmRpbmc6ICI7CS8qIEFjdGlvbiAqLworICAgIGVsc2UgaWYgKHdo YXQgJiBXX1JFQ1YpIHMgPSAiUmVjZWl2aW5nOiAiOworICAgIG4gPSAoaW50KXN0cmxlbihzKSAr IChpbnQpc3RybGVuKGZidWYpOworICAgIGNvbm9sKGZidWYpOworICAgIG0gPSAoaW50KXN0cmxl bihhYnVmKSArIDQ7CisgICAgaWYgKG4gKyBtID4gY21kX2NvbHMpIHsKKyAgICAgICAgY29ub2xs KCIiKTsKKyAgICAgICAgbiA9IDA7CisgICAgfSBlbHNlCisgICAgICBuICs9IG07CisgICAgaWYg KCphYnVmKSB7CisgICAgICAgIGNvbm9sKCIgPT4gIik7CisgICAgICAgIGNvbm9sKGFidWYpOwor ICAgIH0KKyAgICBtID0gKGludClzdHJsZW4oYTJidWYpICsgNDsKKyAgICBpZiAobiArIG0gPiBj bWRfY29scykgeworICAgICAgICBjb25vbGwoIiIpOworICAgICAgICBuID0gMDsKKyAgICB9IGVs c2UKKyAgICAgIG4gKz0gbTsKKyAgICBpZiAoKmEyYnVmKSB7CisgICAgICAgIGNvbm9sKCIgPT4g Iik7CisgICAgICAgIGNvbm9sKGEyYnVmKTsKKyAgICB9CisgICAgKmZidWYgPSBOVUw7ICphYnVm ID0gTlVMOyAqYTJidWYgPSBOVUw7CisgICAgY29ub2xsKCIiKTsKKyAgICBpZiAoZnNpemUgPiAo Q0tfT0ZGX1QpLTEpIHsJCS8qIFNpemUgKi8KKyAgICAgICAgc3ByaW50ZihmYnVmLCJTaXplOiAl cywgVHlwZTogIixja2ZzdG9hKGZzaXplKSk7IC8qIFNBRkUgKDgwKSAqLworICAgICAgICBjb25v bChmYnVmKTsgKmZidWYgPSBOVUw7CisgICAgfSBlbHNlIGNvbm9sKCJTaXplOiB1bmtub3duLCBU eXBlOiAiKTsKKyAgICBpZiAoYmluYXJ5KSB7CQkJLyogVHlwZSAqLworICAgICAgICBzd2l0Y2go YmluYXJ5KSB7CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9MOiBjb25vbCgibGFiZWxlZCIpOyBi cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0k6IGNvbm9sKCJpbWFnZSIpOyBicmVhazsK KyAgICAgICAgICAgICAgY2FzZSBYWUZUX1U6IGNvbm9sKCJiaW5hcnkgdW5kZWZpbmVkIik7IGJy ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBjYXNlIFhZRlRfQjog Y29ub2woImJpbmFyeSIpOyBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisjaWZkZWYg Tk9DU0VUUworICAgICAgICBjb25vbCgidGV4dCIpOworI2Vsc2UKKyAgICAgICAgY29ub2woInRl eHQsICIpOworICAgICAgICBpZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAw KSB7CisgICAgICAgICAgICBjb25vbCgidHJhbnNwYXJlbnQiKTsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7CisgICAgICAgICAgICAgICAgY29ub2wo ZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7CisgICAgICAgICAgICAgICAgY29ub2woIiA9PiAi KTsKKyAgICAgICAgICAgICAgICBjb25vbCh0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29ub2wodGNzaW5mb1t0Y2hhcnNl dF0ua2V5d29yZCk7CisgICAgICAgICAgICAgICAgY29ub2woIiA9PiAiKTsKKyAgICAgICAgICAg ICAgICBjb25vbChmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAgICB9CisjaWZkZWYgU1RSRUFNSU5HCisg ICAgaWYgKHN0cmVhbWluZykKKyAgICAgIGNvbm9sKCIsIFNUUkVBTUlORyIpOworI2VuZGlmIC8q IFNUUkVBTUlORyAqLworICAgIGNvbm9sbCgiIik7CisKKyAgICBpZiAoZmRpc3BsYSA9PSBYWUZE X1MpIHsgICAgICAgICAgICAvKiBDUlQgZmllbGQgaGVhZGluZ3MgKi8KKy8qCisgIERlZmluZSBD S19DUFMgdG8gc2hvdyBjdXJyZW50IHRyYW5zZmVyIHJhdGUuCisgIExlYXZlIGl0IHVuZGVmaW5l ZCB0byBzaG93IGVzdGltYXRlZCB0aW1lIHJlbWFpbmluZy4KKyAgRXN0aW1hdGVkLXRpbWUtcmVt YWluaW5nIGNvZGUgZnJvbSBBbmR5IEZ5ZmUsIG5vdCB0ZXN0ZWQgb24KKyAgcGF0aG9sb2dpY2Fs IGNhc2VzLgorKi8KKyNkZWZpbmUgQ0tfQ1BTCisKKyNpZmRlZiBDS19DUFMKKyAgICAgICAgY29u b2xsKCIgICAgRmlsZSAgIFBlcmNlbnQgICAgICAgUGFja2V0Iik7CisgICAgICAgIGNvbm9sbCgi ICAgIEJ5dGVzICBEb25lICAgICBDUFMgIExlbmd0aCIpOworI2Vsc2UKKyAgICAgICAgY29ub2xs KCIgICAgRmlsZSAgIFBlcmNlbnQgIFNlY3MgUGFja2V0Iik7CisgICAgICAgIGNvbm9sbCgiICAg IEJ5dGVzICBEb25lICAgICBMZWZ0IExlbmd0aCIpOworI2VuZGlmIC8qIENLX0NQUyAqLworICAg ICAgICBuZXdkcHkgPSAwOworICAgIH0KKyAgICBocG9zID0gMDsKK30KKworLyoKKyAgc2hvd3Br dChjKQorICBjID0gY29tcGxldGlvbiBjb2RlOiAwIG1lYW5zIHRyYW5zZmVyIGluIHByb2dyZXNz LCBub256ZXJvIG1lYW5zIGl0J3MgZG9uZS4KKyAgU2hvdyB0aGUgZmlsZSB0cmFuc2ZlciBwcm9n cmVzcyBjb3VudGVyIGFuZCBwZXJoYXBzIHZlcmJvc2UgcGFja2V0IHR5cGUuCisqLworVk9JRAor I2lmZGVmIENLX0FOU0lDCitzaG93cGt0KGNoYXIgYykKKyNlbHNlCitzaG93cGt0KGMpIGNoYXIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2hvd3BrdCAqLyB7CisKKyNpZm5kZWYgR0ZU SU1FUgorICAgIGxvbmcgZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsYXBzZWQg dGltZSwgZW50aXJlIGJhdGNoICAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICBDS19PRkZf VCBob3dmYXI7CQkJLyogSG93IGZhciBpbnRvIGZpbGUgKi8KKyAgICBsb25nIHBkOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUsIHRoaXMgZmlsZSAgICAgKi8KKyAg ICBsb25nIHRwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciByYXRlLCBl bnRpcmUgYmF0Y2ggKi8KKyAgICBsb25nIHBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQYWNrZXQgc2l6ZSwgY3VycmVudCBwYWNrZXQgKi8KKyAgICBDS19PRkZfVCBteXRmYzsJCQkv KiBMb2NhbCBjb3B5IG9mIGJ5dGUgY291bnRlciAgKi8KKworI2lmZGVmIEdGVElNRVIKKyAgICBD S0ZMT0FUIHRub3c7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgICAgaWYgKG5ld2RweSkgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUHV0IHVwIGZpbGVuYW1lcywgZXRjLCAqLworICAgICAg ZHB5aW5pdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHRoZXkncmUgbm90IHRoZXJl IGFscmVhZHkuICovCisKKyAgICBob3dmYXIgPSBmZmM7ICAgICAgICAgICAgICAgICAgICAgICAv KiBIb3cgZmFyICovCisvKgorICBDYWxjdWxhdGUgQ1BTIHJhdGUgZXZlbiBpZiBub3QgZGlzcGxh eWluZyBvbiBzY3JlZW4gZm9yIHVzZSBpbiBmaWxlCisgIHRyYW5zZmVyIHN0YXRpc3RpY3MuCisq LworI2lmZGVmIEdGVElNRVIKKyAgICB0bm93ID0gZ2Z0aW1lcigpOyAgICAgICAgICAgICAgICAg ICAvKiBUaW1lIHNpbmNlIHdlIHN0YXJ0ZWQgKi8KKyAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/ IHJwa3RsIDogc3BrdGw7IC8qIFBhY2tldCBzaXplICovCisjaWZkZWYgQ0tfUkVTRU5ECisgICAg aWYgKHdoYXQgJiBXX1NFTkQpCQkJLyogSW4gY2FzZSB3ZSBkaWRuJ3Qgc3RhcnQgYXQgKi8KKyAg ICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7ICAgICAgICAgICAgICAvKiAgdGhlIGJlZ2lubmluZy4u LiAqLworICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpCisgICAgICBob3dmYXIgKz0gcnNfbGVu OworI2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgIHBkID0gLTE7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZS4gKi8KKyAgICBpZiAoYyA9PSBOVUwpIHsgICAgICAg ICAgICAgICAgICAgICAvKiBTdGlsbCBnb2luZywgZmlndXJlICUgZG9uZSAqLworICAgICAgICBp ZiAoIWZzaXplKSByZXR1cm47CQkvKiBFbXB0eSBmaWxlLCBkb24ndCBib3RoZXIgKi8KKyAgICAg ICAgcGQgPSAoZnNpemUgPiA5OSkgPyAoaG93ZmFyIC8gKGZzaXplIC8gKENLX09GRl9UKTEwMCkp IDogMDsKKyAgICAgICAgaWYgKHBkID4gMTAwKSBwZCA9IDEwMDsgICAgICAgICAvKiBFeHBhbnNp b24gKi8KKyAgICB9CisgICAgaWYgKGMgIT0gTlVMKQorICAgICAgaWYgKCFjeHNlZW4gJiYgIWRp c2NhcmQgJiYgIWN6c2VlbikKKyAgICAgICAgcGQgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaWxlIGNvbXBsZXRlLCBzbyAxMDAlLiAqLworCisgICAgbXl0ZmMgPSAocGQgPCAxMDAp ID8gdGZjICsgZmZjIDogdGZjOyAgICAvKiBDUFMgKi8KKyAgICB0cCA9IChsb25nKSgodG5vdyA+ IDAuMCkgPyAoQ0tGTE9BVCkgbXl0ZmMgLyB0bm93IDogMCk7CisgICAgaWYgKGMgJiYgKHRwID09 IDApKQorICAgICAgdHAgPSBmZmM7CisKKyAgICBjcHMgPSB0cDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBTZXQgZ2xvYmFsIHZhcmlhYmxlICovCisgICAgaWYgKGNwcyA+IHBlYWtjcHMg JiYgICAgICAgICAgICAgICAgLyogUGVhayB0cmFuc2ZlciByYXRlICovCisgICAgICAgICAoKHdo YXQgJiBXX1NFTkQgJiYgc3BhY2tldHMgPiB3c2xvdHMgKyA0KSB8fAorCSAgKCEod2hhdCAmIFdf U0VORCkgJiYgc3BhY2tldHMgPiAxMCkpKSB7CisgICAgICAgIHBlYWtjcHMgPSBjcHM7CisgICAg fQorCisjZWxzZSAgLyogTm90IEdGVElNRVIgKi8KKworICAgIGV0ID0gZ3RpbWVyKCk7ICAgICAg ICAgICAgICAgICAgICAgIC8qIEVsYXBzZWQgdGltZSAgKi8KKyAgICBwcyA9ICh3aGF0ICYgV19S RUNWKSA/IHJwa3RsIDogc3BrdGw7IC8qIFBhY2tldCBsZW5ndGggKi8KKyNpZmRlZiBDS19SRVNF TkQKKyAgICBpZiAod2hhdCAmIFdfU0VORCkJCQkvKiBBbmQgaWYgd2UgZGlkbid0IHN0YXJ0IGF0 ICovCisgICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OyAgICAgICAgICAgICAgLyogIHRoZSBiZWdp bm5pbmcuLi4gKi8KKyAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKQorICAgICAgaG93ZmFyICs9 IHJzX2xlbjsKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICBwZCA9IC0xOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUuICovCisgICAgaWYgKGMgPT0gTlVMKSB7 ICAgICAgICAgICAgICAgICAgICAgLyogU3RpbGwgZ29pbmcsIGZpZ3VyZSAlIGRvbmUgKi8KKyAg ICAgICAgaWYgKGZzaXplID09IDBMKSByZXR1cm47ICAgICAgICAvKiBFbXB0eSBmaWxlLCBkb24n dCBib3RoZXIgKi8KKyAgICAgICAgcGQgPSAoZnNpemUgPiA5OSkgPyAoaG93ZmFyIC8gKGZzaXpl IC8gKENLX09GRl9UKTEwMCkpIDogMDsKKyAgICAgICAgaWYgKHBkID4gMTAwKSBwZCA9IDEwMDsg ICAgICAgICAvKiBFeHBhbnNpb24gKi8KKyAgICB9CisgICAgaWYgKGMgIT0gTlVMKQorICAgICAg aWYgKCFjeHNlZW4gJiYgIWRpc2NhcmQgJiYgIWN6c2VlbikKKyAgICAgICAgcGQgPSAxMDA7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGNvbXBsZXRlLCBzbyAxMDAlLiAqLworCisKKyNp Zm5kZWYgQ0tfQ1BTCisvKgorICBmc2VjcyA9IHRpbWUgKGZyb20gZ3RpbWVyKSB0aGF0IHRoaXMg ZmlsZSBzdGFydGVkIChzZXQgaW4gc2ZpbGUoKSkuCisgIFJhdGUgc28gZmFyIGlzIGZmYyAvIChl dCAtIGZzZWNzKSwgIGVzdGltYXRlZCB0aW1lIGZvciByZW1haW5pbmcgYnl0ZXMKKyAgaXMgKGZz aXplIC0gZmZjKSAvIChmZmMgLyAoZXQgLSBmc2VjcykpLgorKi8KKyAgICB0cCA9IChob3dmYXIg PiAwKSA/IChmc2l6ZSAtIGhvd2ZhcikgKiAoZXQgLSBmc2VjcykgLyBob3dmYXIgOiAwOworI2Vu ZGlmIC8qIENLX0NQUyAqLworCisjaWZkZWYgQ0tfQ1BTCisgICAgbXl0ZmMgPSAocGQgPCAxMDAp ID8gdGZjICsgZmZjIDogdGZjOworICAgIHRwID0gKGV0ID4gMCkgPyBteXRmYyAvIGV0IDogMDsJ LyogVHJhbnNmZXIgcmF0ZSAqLworICAgIGlmIChjICYmICh0cCA9PSAwKSkJCQkvKiBXYXRjaCBv dXQgZm9yIHN1YnNlY29uZCB0aW1lcyAqLworICAgICAgICB0cCA9IGZmYzsKKworICAgIGNwcyA9 IHRwOwkJCQkvKiBTZXQgZ2xvYmFsIHZhcmlhYmxlICovCisgICAgaWYgKGNwcyA+IHBlYWtjcHMg JiYgICAgICAgICAgICAgICAgLyogUGVhayB0cmFuc2ZlciByYXRlICovCisgICAgICAgICAoKHdo YXQgJiBXX1NFTkQgJiYgc3BhY2tldHMgPiB3c2xvdHMgKyA0KSB8fAorCSAgKCEod2hhdCAmIFdf U0VORCkgJiYgc3BhY2tldHMgPiAxMCkpKSB7CisgICAgICAgIHBlYWtjcHMgPSBjcHM7CisgICAg fQorI2VuZGlmIC8qIENLX0NQUyAqLworCisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgICAgaWYg KGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgICAgICAgICAgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAg ICAgY2hhciBidWZmZXJbMTI4XTsKKwkvKiBUaGVzZSBzcHJpbnRmcyBzaG91bGQgYmUgc2FmZSB1 bnRpbCB3ZSBoYXZlIDMyLWRpZ2l0IG51bWJlcnMgKi8KKworICAgICAgICBpZiAocGQgPiAtMUwp CisgICAgICAgICAgc3ByaW50ZihidWZmZXIsICIlYyU5cyU1bGQlJSU4bGQlOGxkICIsIENSLGNr ZnN0b2EoaG93ZmFyKSxwZCx0cCxwcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzcHJpbnRm KGJ1ZmZlciwgIiVjJTlzICAgICAgJThsZCU4bGQgIiwgQ1IsY2tmc3RvYShob3dmYXIpLHRwLHBz KTsKKyAgICAgICAgY29ub2woYnVmZmVyKTsKKyAgICAgICAgaHBvcyA9IDMxOworICAgIH0gZWxz ZSBpZiAoZmRpc3BsYSA9PSBYWUZEX1IpIHsgICAgIC8qIFNFUklBTCAqLworICAgICAgICBsb25n IGksIGs7CisgICAgICAgIGlmIChob3dmYXIgLSBvbGRmZmMgPCAxMDI0KSAgICAgLyogVXBkYXRl IGRpc3BsYXkgZXZlcnkgMUsgKi8KKyAgICAgICAgICByZXR1cm47CisgICAgICAgIG9sZGZmYyA9 IGhvd2ZhcjsgICAgICAgICAgICAgICAgLyogVGltZSBmb3IgbmV3IGRpc3BsYXkgKi8KKyAgICAg ICAgayA9IChob3dmYXIgLyAxMDI0TCkgLSBkb3RzOyAgICAvKiBIb3cgbWFueSBLIHNvIGZhciAq LworICAgICAgICBmb3IgKGkgPSAwTDsgaSA8IGs7IGkrKykgeworICAgICAgICAgICAgaWYgKGhw b3MrKyA+IChjbWRfY29scyAtIDMpKSB7IC8qIFRpbWUgdG8gd3JhcD8gKi8KKyAgICAgICAgICAg ICAgICBjb25vbGwoIiIpOworICAgICAgICAgICAgICAgIGhwb3MgPSAwOworICAgICAgICAgICAg fQorICAgICAgICAgICAgY29ub2MoJy4nKTsgICAgICAgICAgICAgICAgIC8qIFByaW50IGEgZG90 IGZvciB0aGlzIEsgKi8KKyAgICAgICAgICAgIGRvdHMrKzsgICAgICAgICAgICAgICAgICAgICAv KiBDb3VudCBpdCAqLworICAgICAgICB9CisgICAgfQorfQorCisKKy8qICBDIEsgUyBDIFIgRSBF IE4gIC0tICBTY3JlZW4gZGlzcGxheSBmdW5jdGlvbiAgKi8KKworLyoKKyAgY2tzY3JlZW4oZixj LG4scykKKyAgICBmIC0gYXJndW1lbnQgZGVzY3JpcHRvcgorICAgIGMgLSBhIGNoYXJhY3RlciBv ciBzbWFsbCBpbnRlZ2VyCisgICAgbiAtIGEgbG9uZyBpbnRlZ2VyCisgICAgcyAtIGEgc3RyaW5n LgorCisgIGFuZCBnbG9iYWwgZmRpc3BsYSA9IFNFVCBGSUxFIERJU1BMQVkgdmFsdWU6CisKKyAg ICBYWUZEX04gPSBOT05FCisgICAgWFlGRF9SID0gU0VSSUFMOiAgICAgRG90cywgZXRjLCB3b3Jr cyBvbiBhbnkgdGVybWluYWwsIGV2ZW4gaGFyZGNvcHkuCisgICAgWFlGRF9TID0gQ1JUOiAgICAg ICAgV29ya3Mgb24gYW55IENSVCwgd3JpdGVzIG92ZXIgY3VycmVudCBsaW5lLgorICAgIFhZRkRf QyA9IEZVTExTQ1JFRU46IFJlcXVpcmVzIHRlcm1pbmFsLWRlcGVuZGVudCBzY3JlZW4gY29udHJv bC4KKyAgICBYWUZEX0IgPSBCUklFRjogICAgICBMaWtlIFNFUklBTCBidXQgb25seSBmaWxlbmFt ZSAmIGNvbXBsZXRpb24gc3RhdHVzLgorICAgIFhZRkRfRyA9IEdVSTsgICAgICAgIFdpbmRvd3Mg R1VJLCBzYW1lIGJlaGF2aW9yIGFzIEZVTExTQ1JFRU4KKyovCitWT0lECisjaWZkZWYgQ0tfQU5T SUMKK2Nrc2NyZWVuKGludCBmLCBjaGFyIGMsQ0tfT0ZGX1QgbixjaGFyICpzKQorI2Vsc2UKK2Nr c2NyZWVuKGYsYyxuLHMpIGludCBmOyBjaGFyIGM7IENLX09GRl9UIG47IGNoYXIgKnM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNjcmVlbiAqLyB7CisgICAgY2hhciBidWZbODBdOworICAg IGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcg Ki8KKyNpZmRlZiBVTklYCisjaWZuZGVmIE5PSkMKKyAgICBpbnQgb2JnOworX1BST1RPVFlQKCBW T0lEIGNvbmJndCwgKGludCkgKTsKKyNlbmRpZiAvKiBOT0pDICovCisjZW5kaWYgLyogVU5JWCAq LworICAgIGludCBmdHAgPSAwOworCisgICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJ LyogRlRQIG9yIEtlcm1pdD8gKi8KKworICAgIGlmICghbG9jYWwgJiYgIWZ0cCkJCQkvKiBJbiBy ZW1vdGUgbW9kZSAtIGRvbid0IGRvIHRoaXMgKi8KKyAgICAgIHJldHVybjsKKworICAgIGlmICgh cykgcyA9ICIiOworCisgICAgaWYgKCFmeGRfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgLyog SW5pdGlhbGl6ZSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGZ4ZGluaXQoZmRpc3BsYSk7CisKKyNp ZmRlZiBVTklYCisjaWZuZGVmIE5PSkMKKyAgICBvYmcgPSBiYWNrZ3JkOyAgICAgICAgICAgICAg ICAgICAgICAvKiBQcmV2aW91cyBiYWNrZ3JvdW5kIHN0YXR1cyAqLworICAgIGNvbmJndCgxKTsg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZSBpZiBydW5uaW5nIGluIGJhY2tncm91bmQg Ki8KKyAgICBpZiAoIWJhY2tncmQgJiYgb2JnKSB7ICAgICAgICAgICAgICAvKiBKdXN0IGNhbWUg aW50byBmb3JlZ3JvdW5kPyAqLworICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAg ICAgIC8qIFB1dCBjb25zb2xlIGJhY2sgaW4gQ0JSRUFLIG1vZGUgKi8KKyAgICAgICAgc2V0aW50 KCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGludGVycnVwdHMgKi8KKyAgICB9 CisjZW5kaWYgLyogTk9KQyAqLworI2VuZGlmIC8qIFVOSVggKi8KKworICAgIGlmICgoZiAhPSBT Q1JfV00pICYmIChmICE9IFNDUl9FTSkpIC8qIEFsd2F5cyB1cGRhdGUgd2FybmluZ3MgJiBlcnJv cnMgKi8KKyAgICAgIGlmICghZGlzcGxhIHx8CisgICAgICAgICAgKGJhY2tncmQgJiYgYmdzZXQp IHx8CisgICAgICAgICAgZmRpc3BsYSA9PSBYWUZEX04gfHwKKyAgICAgICAgICAoc2VydmVyICYm ICFzcnZkaXMpCisgICAgICAgICAgKQorICAgICAgICByZXR1cm47CisKKyNpZmRlZiBWTVMKKyAg ICBpZiAoZiA9PSBTQ1JfRk4pICAgICAgICAgICAgICAgICAgICAvKiBWTVMgLSBzaG9ydGVuIHRo ZSBuYW1lICovCisgICAgICBzID0genJlbG5hbWUocyx6Z3RkaXIoKSk7CisjZW5kaWYgLyogVk1T ICovCisKKyAgICBpZiAoZGVzdCA9PSBERVNUX1MpICAgICAgICAgICAgICAgICAvKiBTRVQgREVT VElOQVRJT04gU0NSRUVOICovCisgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogIHdvdWxkIGludGVyZmVyZS4uLiAqLworCisjaWZkZWYgS1VJCisgICAgaWYgKGZkaXNw bGEgPT0gWFlGRF9HKSB7ICAgICAgICAgICAgLyogSWYgZ3VpIGRpc3BsYXkgc2VsZWN0ZWQgKi8K KyAgICAgICAgc2NyZWVuZyhmLGMsbixzKTsgICAgICAgICAgICAgICAvKiBjYWxsIHRoZSBndWkg dmVyc2lvbiAqLworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIEtVSSAqLworI2lm ZGVmIENLX0NVUlNFUworICAgIGlmIChmZGlzcGxhID09IFhZRkRfQykgeyAgICAgICAgICAgIC8q IElmIGZ1bGxzY3JlZW4gZGlzcGxheSBzZWxlY3RlZCAqLworICAgICAgICBzY3JlZW5jKGYsYyxu LHMpOyAgICAgICAgICAgICAgIC8qIGNhbGwgdGhlIGZ1bGxzY3JlZW4gdmVyc2lvbiAqLworICAg ICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIENLX0NVUlNFUyAqLworCisgICAgbGVuID0g KGludClzdHJsZW4ocyk7ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLworCisg ICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIG91ciBmdW5j dGlvbiBjb2RlICovCisgICAgICBjYXNlIFNDUl9GTjogICAgICAgICAgICAgICAgICAgICAgLyog RmlsZW5hbWUgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisjaWZkZWYgTkVX RlRQCisJICAgIGlmIChmdHApCisJICAgICAgcHJpbnRmKCIgJXMgJXMiLCB3aGF0ICYgV19TRU5E ID8gIlBVVCIgOiAiR0VUIiwgcyk7CisJICAgIGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkg ICAgICBwcmludGYoIiAlcyAlcyIsIHdoYXQgJiBXX1NFTkQgPyAiU0VORCIgOiAiUkVDViIsIHMp OworI2lmZGVmIFVOSVgKKyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVO SVggKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2lmZGVmIE1BQworICAgICAg ICBjb25vbGwoIiIpOyBjb25vbChzKTsgY29ub2MoU1ApOyBocG9zID0gbGVuICsgMTsKKyNlbHNl CisgICAgICAgIGNrc3RybmNweShmYnVmLHMsODApOworICAgICAgICBhYnVmWzBdID0gYTJidWZb MF0gPSBOVUw7CisgICAgICAgIG5ld2RweSA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogTmV3 IGZpbGUgc28gcmVmcmVzaCBkaXNwbGF5ICovCisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHJl dHVybjsKKworICAgICAgY2FzZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAgIC8qIEFzLW5h bWUgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisjaWZkZWYgQ09NTUVOVAor ICAgICAgICAgICAgcHJpbnRmKCIoYXMgJXMpICIscyk7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWZkZWYgTUFDCisgICAgICAgIGlmICho cG9zICsgbGVuID4gNzUpIHsgY29ub2xsKCIiKTsgaHBvcyA9IDA7IH0KKyAgICAgICAgY29ub2wo Ij0+ICIpOyBjb25vbChzKTsKKyAgICAgICAgaWYgKChocG9zICs9IChsZW4gKyAzKSkgPiA3OCkg eyBjb25vbGwoIiIpOyBocG9zID0gMDsgfQorI2Vsc2UKKyAgICAgICAgaWYgKGFidWZbMF0pIHsK KyAgICAgICAgICAgIGNrc3RybmNweShhMmJ1ZixzLDgwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGNrc3RybmNweShhYnVmLHMsODApOworICAgICAgICB9CisjZW5kaWYgLyogTUFD ICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAg ICAgICAgIC8qIEZpbGUtc2l6ZSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsK KyAgICAgICAgICAgIHByaW50ZigiICglcykgKCVzIGJ5dGUlcykiLAorI2lmZGVmIE5PSUNQCisg ICAgICAgICAgICAgICAgICAgKGJpbmFyeSA/ICJiaW5hcnkiIDogInRleHQiKQorI2Vsc2UKKyAg ICAgICAgICAgICAgICAgICBnZm1vZGUoYmluYXJ5LDApCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAg ICAgICAgICAgICAgICAgICAsIGNrZnN0b2EobiksIG4gPT0gMSA/ICIiIDogInMiKTsKKyNpZmRl ZiBVTklYCisgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICovCisg ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZmRlZiBNQUMKKyAgICAgICAgc3ByaW50 ZihidWYsIiwgU2l6ZTogJXMiLGNrZnN0b2EobikpOyAgY29ub2xsKGJ1Zik7ICBocG9zID0gMDsK KyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9YRDog ICAgICAgICAgICAgICAgICAgICAgLyogWC1wYWNrZXQgZGF0YSAqLworICAgICAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJuOworI2lmZGVmIE1BQworICAgICAgICBj b25vbGwoIiIpOyBjb25vbGwocyk7IGhwb3MgPSAwOworI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5 KGZidWYscyw4MCk7CisgICAgICAgIGFidWZbMF0gPSBhMmJ1ZlswXSA9IE5VTDsKKyNlbmRpZiAv KiBNQUMgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9TVDogICAgICAgICAg ICAgICAgICAgICAgLyogRmlsZSBzdGF0dXMgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAg ICAgICAgY2FzZSBTVF9PSzogICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXJyZWQgT0sgKi8K KyAgICAgICAgICAgIHNob3dwa3QoJ1onKTsgICAgICAgICAgICAgICAvKiBVcGRhdGUgbnVtYmVy cyBvbmUgbGFzdCB0aW1lICovCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsK KyNpZmRlZiBHRlRJTUVSCisJCWlmIChmcHhmc2VjcykKKwkJICBwcmludGYoIjogT0sgKCUwLjNm IHNlYywgJWxkIGNwcykiLGZweGZzZWNzLAorCQkJIChsb25nKSgoQ0tGTE9BVClmZmMgLyBmcHhm c2VjcykpOworI2Vsc2UKKwkJaWYgKHhmc2VjcykKKwkJICBwcmludGYoIjogT0sgKCVkIHNlYywg JWxkIGNwcykiLHhmc2VjcyxmZmMveGZzZWNzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJCXBy aW50ZigiXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAoKGhwb3MgKz0gNSkgPiA3OCkgY29ub2xsKCIiKTsgLyogV3JhcCBzY3JlZW4g bGluZS4gKi8KKyAgICAgICAgICAgIGNvbm9sbCgiIFtPS10iKTsgaHBvcyA9IDA7ICAvKiBQcmlu dCBPSyBtZXNzYWdlLiAqLworICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAg IC8qIFdlIGRpZG4ndCBzaG93IFogcGFja2V0IHdoZW4gKi8KKyAgICAgICAgICAgICAgICBjb25v YygnWicpOyAgICAgICAgICAgICAvKiBpdCBjYW1lLCBzbyBzaG93IGl0IG5vdy4gKi8KKyAgICAg ICAgICAgICAgICBocG9zID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsK KworICAgICAgICAgIGNhc2UgU1RfRElTQzogICAgICAgICAgICAgICAgIC8qICBEaXNjYXJkZWQg Ki8KKyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgICAg IHByaW50ZigiOiBESVNDQVJERURcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaHBvcyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsK KyAgICAgICAgICAgIGNvbm9sbCgiIFtkaXNjYXJkZWRdIik7IGhwb3MgPSAwOworICAgICAgICAg ICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyog IEludGVycnVwdGVkICovCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAg ICAgICAgICAgICAgICBwcmludGYoIjogSU5URVJSVVBURURcbiIpOworICAgICAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaHBvcyArPSAxNCkgPiA3 OCkgY29ub2xsKCIiKTsKKyAgICAgICAgICAgIGNvbm9sbCgiIFtpbnRlcnJ1cHRlZF0iKTsgaHBv cyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKwkgIGNhc2UgU1RfU0lNOgorICAgICAgICAg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisJCWlmIChuID09IFNLUF9YTlgpCisJCSAgcHJp bnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChOZXcgZmlsZSlcbiIpOworCQllbHNlIGlmIChu ID09IFNLUF9YVVApCisJCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChSZW1vdGUg ZmlsZSBvbGRlcilcbiIpOworCQllbHNlIGlmIChuID09IFNLUF9TSU0pCisJCSAgcHJpbnRmKCI6 IFdPVUxEIEJFIFRSQU5TRkVSUkVEXG4iKTsKKwkJZWxzZSBpZiAobiA+IDAgJiYgbiA8IG5za3Jl YXNvbikKKwkJICBwcmludGYoIjogU0tJUFBFRCAoJXMpXG4iLHNrcmVhc29uW25dKTsKKwkJZWxz ZQorCQkgIHByaW50ZigiOiBTS0lQUEVEXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9IGVsc2UgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7CisgICAgICAgICAgICAg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TICYmIGZidWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8K KyAgICAgICAgICAgICAgICAgICAgY29ub2xsKCIiKTsgICAgICAgICAvKiBOZXcgbGluZSAqLwor ICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgY29ub2woIldvdWxkIFNlbmQ6 ICIpOyAvKiBBY3Rpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdf UkVDVikgY29ub2woIldvdWxkIFJlY2VpdmU6ICIpOworICAgICAgICAgICAgICAgICAgICBjb25v bChmYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBj b25vbChhYnVmKTsgLyogTmFtZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCphMmJ1Zikg Y29ub2woIiA9PiAiKTsgY29ub2woYTJidWYpOyAvKiBOYW1lcyAqLworICAgICAgICAgICAgICAg ICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgY29ub2xsKCIgW3NpbXVsYXRlZF0iKTsKKyAgICAgICAg ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGhwb3MgKz0g MTApID4gNzgpIGNvbm9sbCgiIik7CisgICAgICAgICAgICBjb25vbCgiIFtzaW11bGF0ZWRdIik7 IGhwb3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9TS0lQ OiAgICAgICAgICAgICAgICAgLyogIFNraXBwZWQgKi8KKyAgICAgICAgICAgIGlmIChmZGlzcGxh ID09IFhZRkRfQikgeworCQlpZiAobiA9PSBTS1BfWE5YKQorCQkgIHByaW50ZigiOiBXT1VMRCBC RSBUUkFOU0ZFUlJFRCAoTmV3IGZpbGUpXG4iKTsKKwkJZWxzZSBpZiAobiA9PSBTS1BfWFVQKQor CQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIpXG4i KTsKKwkJZWxzZSBpZiAobiA9PSBTS1BfU0lNKQorCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFO U0ZFUlJFRFxuIik7CisJCWVsc2UgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCisJCSAgcHJp bnRmKCI6IFNLSVBQRUQgKCVzKVxuIixza3JlYXNvbltuXSk7CisJCWVsc2UKKwkJICBwcmludGYo IjogU0tJUFBFRFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBl bHNlIGlmIChmZGlzcGxhID09IFhZRkRfUykgeworICAgICAgICAgICAgICAgIGlmIChmZGlzcGxh ID09IFhZRkRfUyAmJiBmYnVmWzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCisgICAgICAgICAgICAg ICAgICAgIGNvbm9sbCgiIik7ICAgICAgICAgLyogTmV3IGxpbmUgKi8KKyAgICAgICAgICAgICAg ICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICov CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNl aXZpbmc6ICIpOworICAgICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgLyogTmFtZXMg Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2wo YTJidWYpOyAvKiBOYW1lcyAqLworICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFi dWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgY29ub2xsKCIgW3NraXBwZWRdIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKChocG9zICs9IDEwKSA+IDc4KSBjb25vbGwoIiIpOwor CSAgICBjb25vbCgiICIpOyBjb25vbChmYnVmKTsKKyAgICAgICAgICAgIGNvbm9sbCgiIFtza2lw cGVkXSIpOyBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2Ug U1RfRVJSOiAgICAgICAgICAgICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIjogRVJST1I6ICVzXG4i LHMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGNvbm9sbCgiIik7CisgICAgICAgICAgICBjb25vbCgiRXJyb3I6ICIpOyBjb25vbGwocyk7IGhw b3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9NU0c6ICAg ICAgICAgICAgICAgICAgLyogTWVzc2FnZSAqLworI2lmZGVmIE5FV0ZUUAorICAgICAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ0cCAmJiBmdHBf ZGViKQorCQkgIHByaW50ZigiOiBNRVNTQUdFOiAlc1xuIixzKTsKKyAgICAgICAgICAgICAgICBy ZXR1cm47CisgICAgICAgICAgICB9CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAgICAgICBj b25vbGwoIiIpOworICAgICAgICAgICAgY29ub2woIk1lc3NhZ2U6ICIpOworICAgICAgICAgICAg Y29ub2xsKHMpOworICAgICAgICAgICAgaHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisK KyAgICAgICAgICBjYXNlIFNUX1JFRlU6ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2VkICovCisg ICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIjogUkVGVVNFRFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg fSBlbHNlIGlmIChmZGlzcGxhID09IFhZRkRfUykgeworICAgICAgICAgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfUyAmJiBmYnVmWzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCisgICAgICAgICAg ICAgICAgICAgIGNvbm9sbCgiIik7ICAgICAgICAgLyogTmV3IGxpbmUgKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9u ICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJS ZWNlaXZpbmc6ICIpOworICAgICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgICAgICAv KiBOYW1lcyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIp OyBjb25vbChhMmJ1Zik7ICAgIC8qIE5hbWVzICovCisgICAgICAgICAgICAgICAgICAgICpmYnVm ID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEyYnVmID0gTlVMOworICAgICAgICAgICAgICAgICAgICBj b25vbGwoIiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25vbCgiUmVm dXNlZDogIik7IGNvbm9sbChzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBjb25vbGwoIiIpOworICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6 ICIpOyBjb25vbGwocyk7IGhwb3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg ICAgY2FzZSBTVF9JTkM6ICAgICAgICAgICAgICAgICAgLyogSW5jb21wbGV0ZSAqLworICAgICAg ICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI6 IElOQ09NUExFVEVcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmICgoaHBvcyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsKKyAgICAgICAg ICAgIGNvbm9sbCgiIFtpbmNvbXBsZXRlXSIpOyBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVy bjsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjb25vbGwoIioqKiBzY3JlZW4o KSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoqKiIpOworICAgICAgICAgICAgaHBvcyA9IDA7Cisg ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworI2lmZGVmIE1BQworICAgICAgY2FzZSBT Q1JfUE46ICAgICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCBudW1iZXIgKi8KKyAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K Kwlja21ha21zZyhidWYsODAscywiOiAiLGNrbHRvYShuKSxOVUxMKTsKKyAgICAgICAgY29ub2wo YnVmKTsgaHBvcyArPSAoaW50KXN0cmxlbihidWYpOyByZXR1cm47CisjZW5kaWYgLyogTUFDICov CisKKyAgICAgIGNhc2UgU0NSX1BUOiAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgdHlw ZSBvciBwc2V1ZG90eXBlICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKKyAgICAg ICAgICByZXR1cm47CisgICAgICAgIGlmIChjID09ICdZJykgcmV0dXJuOyAgICAgICAgICAgLyog RG9uJ3QgYm90aGVyIHdpdGggQUNLcyAqLworICAgICAgICBpZiAoYyA9PSAnRCcpIHsgICAgICAg ICAgICAgICAgIC8qIEluIGRhdGEgdHJhbnNmZXIgcGhhc2UsICovCisgICAgICAgICAgICBzaG93 cGt0KE5VTCk7ICAgICAgICAgICAgICAgLyogc2hvdyBwcm9ncmVzcy4gKi8KKyAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgfQorI2lmbmRlZiBBTUlHQQorICAgICAgICBpZiAoaHBvcysrID4g NzcpIHsgICAgICAgICAgICAgIC8qIElmIG5lYXIgcmlnaHQgbWFyZ2luLCAqLworICAgICAgICAg ICAgY29ub2xsKCIiKTsgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG5ldyBsaW5lICovCisgICAg ICAgICAgICBocG9zID0gMDsgICAgICAgICAgICAgICAgICAgLyogYW5kIHJlc2V0IGNvdW50ZXIu ICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBBTUlHQSAqLworICAgICAgICBpZiAoYyA9PSAnWicg JiYgZmRpc3BsYSA9PSBYWUZEX1MpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBlbHNlCisg ICAgICAgICAgY29ub2MoYyk7ICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgcGFj a2V0IHR5cGUuICovCisjaWZkZWYgQU1JR0EKKyAgICAgICAgaWYgKGMgPT0gJ0cnKSBjb25vbGwo IiIpOyAgICAgICAvKiBOZXcgbGluZSBhZnRlciBHIHBhY2tldHMgKi8KKyNlbmRpZiAvKiBBTUlH QSAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1RDOiAgICAgICAgICAgICAg ICAgICAgICAvKiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLworICAgICAgICBpZiAoeGZyYmVsKSBi bGVlcChCUF9OT1RFKTsKKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7ICAgICAgICAv KiBCcmllZiBkaXNwbGF5Li4uICovCisgICAgICAgICAgICBpZiAoZmlsY250ID4gMSkgeworICAg ICAgICAgICAgICAgIGxvbmcgZng7CisgICAgICAgICAgICAgICAgZnggPSBmaWxjbnQgLSBmaWxy ZWo7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgU1VNTUFSWTogJWxkIGZpbGUlcyIsIGZ4LCAo KGZ4ID09IDEpID8gIiIgOiAicyIpKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiwgJXMgYnl0 ZSVzIiwgY2tmc3RvYSh0ZmMpLCAoKHRmYyA9PSAxKSA/ICIiIDogInMiKSk7CisjaWZkZWYgR0ZU SU1FUgorICAgICAgICAgICAgICAgIHByaW50ZigiLCAlMC4zZiBzZWMsICVsZCBjcHMiLCBmcHRz ZWNzLCB0ZmNwcyk7CisjZWxzZQorICAgICAgICAgICAgICAgIHByaW50ZigiLCAlbGQgc2VjLCAl bGQgY3BzIiwgdHNlY3MsIHRmY3BzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAg ICAgICAgcHJpbnRmKCIuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGNvbm9sbCgiIik7CisgICAgICAgIH0KKyNpZmRlZiBVTklYCisgICAgICAgIGZm bHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgcmV0dXJuOworCisgICAg ICBjYXNlIFNDUl9FTTogICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLwor ICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgIHByaW50ZigiIEVS Uk9SOiAlc1xuIixzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBj b25vbGwoIiIpOyBjb25vYygnPycpOyBjb25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47CisKKyAg ICAgIGNhc2UgU0NSX1dNOiAgICAgICAgICAgICAgICAgICAgICAvKiBXYXJuaW5nIG1lc3NhZ2Ug Ki8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICBwcmludGYo IiBXQVJOSU5HOiAlc1xuIixzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg ICAgICBjb25vbGwoIiIpOyBjb25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47CisKKyAgICAgIGNh c2UgU0NSX01TOiAgICAgICAgICAgICAgICAgICAgICAvKiBNZXNzYWdlIGZyb20gb3RoZXIgS2Vy bWl0ICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgcHJp bnRmKCIgTUVTU0FHRTogJXNcbiIscyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K KyAgICAgICAgY29ub2xsKCIiKTsgY29ub2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOworCisgICAg ICBjYXNlIFNDUl9UVTogICAgICAgICAgICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAq LworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJuOworICAg ICAgICBpZiAoKGhwb3MgKz0gbGVuKSA+IDc3KSB7IGNvbm9sbCgiIik7IGhwb3MgPSBsZW47IH0K KyAgICAgICAgY29ub2wocyk7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAg ICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IGJlZ2lubmluZyAqLworICAgICAgICBp ZiAoZmRpc3BsYSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBjb25vbGwo IiIpOyBjb25vbChzKTsgaHBvcyA9IGxlbjsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9UWjog ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCisgICAgICAg IGlmIChmZGlzcGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgo aHBvcyArPSBsZW4pID4gNzcpIHsgY29ub2xsKCIiKTsgaHBvcyA9IGxlbjsgfQorICAgICAgICBj b25vbGwocyk7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAg ICAgIC8qIFF1YW50aXR5IGVxdWFscyAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0Ip CisgICAgICAgICAgcmV0dXJuOworCWNrbWFrbXNnKGJ1Ziw4MCxzLCI6ICIsY2tsdG9hKG4pLE5V TEwpOworICAgICAgICBjb25vbGwoYnVmKTsgaHBvcyA9IDA7IHJldHVybjsKKworICAgICAgY2Fz ZSBTQ1JfQ1c6ICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGZ1bGxzY3JlZW4gd2luZG93 ICovCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2luZG93 IHRvIGNsb3NlICovCisKKyAgICAgIGNhc2UgU0NSX0NEOgorICAgICAgICByZXR1cm47CisKKyAg ICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbm9sbCgiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJh ZCBvYmplY3QgKioqIik7CisgICAgICAgIGhwb3MgPSAwOworICAgICAgICByZXR1cm47CisgICAg fQorfQorI2VuZGlmIC8qIE5PRElTUExBWSAqLworCisvKiAgRSBSIE0gUyBHICAtLSAgTm9uZmF0 YWwgZXJyb3IgbWVzc2FnZSAgKi8KKworLyogU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgcHJpbnRp bmcgdGhlIG1lc3NhZ2UgdGV4dCBmcm9tIGFuIEVycm9yIHBhY2tldC4gKi8KKworVk9JRAorZXJt c2cobXNnKSBjaGFyICptc2c7IHsgICAgICAgICAgICAgICAgIC8qIFByaW50IGVycm9yIG1lc3Nh Z2UgKi8KKyAgICBkZWJ1ZyhGMTEwLCJlcm1zZyIsbXNnLDApOworICAgIGlmIChsb2NhbCkKKyAg ICAgIHh4c2NyZWVuKFNDUl9FTSwwLDBMLG1zZyk7CisgICAgdGxvZyhGMTEwLCJQcm90b2NvbCBF cnJvcjoiLG1zZywwTCk7Cit9CisjZW5kaWYgLyogTk9YRkVSICovCisKK1ZPSUQKK3NldHNlc2xv Zyh4KSBpbnQgeDsgeworICAgIHNlc2xvZyA9IHg7CisjaWZkZWYgS1VJCisgICAgS3VpU2V0UHJv cGVydHkoS1VJX1RFUk1fQ0FQVFVSRSx4LDApOworI2VuZGlmIC8qIEtVSSAqLworfQorCitWT0lE Citkb2NsZWFuKGZjKSBpbnQgZmM7IHsgICAgICAgICAgICAgICAgICAgLyogR2VuZXJhbCBjbGVh bnVwICovCisjaWZkZWYgT1MyT1JVTklYCisgICAgZXh0ZXJuIGludCB0dHlmZDsKKyNlbmRpZiAv KiBPUzJPUlVOSVggKi8KKyAgICBleHRlcm4gaW50ICBrZWVwOworICAgIGV4dGVybiBpbnQgZXhp dGhhbmd1cDsKKyNpZm5kZWYgTk9YRkVSCisgICAgZXh0ZXJuIGNoYXIgZmlsbmFtW107CisjZW5k aWYgLyogTk9YRkVSICovCisjaWZuZGVmIE5PSUNQCisgICAgaW50IHg7CisKKyAgICBpZiAoZmMg PiAwKQorICAgICAgZG9zdG9wKCk7ICAgICAgICAgICAgICAgICAvKiBTdG9wIGFsbCBjb21tYW5k IGZpbGVzIGFuZCBlbmQgbWFjcm9zICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBO T1hGRVIKKyAgICBpZiAocGt0bG9nKSB7CisgICAgICAgICpwa3RmaWwgPSAnXDAnOworICAgICAg ICBwa3Rsb2cgPSAwOworICAgICAgICB6Y2xvc2UoWlBGSUxFKTsKKyAgICB9CisjZW5kaWYgLyog Tk9YRkVSICovCisgICAgaWYgKHNlc2xvZykgeworICAgICAgICAqc2VzZmlsID0gJ1wwJzsKKyAg ICAgICAgc2V0c2VzbG9nKDApOworICAgICAgICB6Y2xvc2UoWlNGSUxFKTsKKyAgICB9CisjaWZk ZWYgVExPRworICAgIGlmICh0cmFsb2cpIHsKKyAgICAgICAgdGxvZyhGMTAwLCJUcmFuc2FjdGlv biBMb2cgQ2xvc2VkIiwiIiwwTCk7CisgICAgICAgICp0cmFmaWwgPSAnXDAnOworICAgICAgICB0 cmFsb2cgPSAwOworICAgICAgICB6Y2xvc2UoWlRGSUxFKTsKKyAgICB9CisjZW5kaWYgLyogVExP RyAqLworCisgICAgZGVidWcoRjEwMCwiZG9jbGVhbiBjYWxsaW5nIGRvbG9nZW5kIiwiIiwwKTsK KyAgICBkb2xvZ2VuZCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3VycmVudCBs b2cgcmVjb3JkIGlmIGFueSAqLworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoZGlhbG9nKSB7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBJZiBjb25uZWN0aW9uIGxvZyBvcGVuICovCisJZGlhbG9n ID0gMDsKKyAgICAgICAgKmRpYWZpbCA9ICdcMCc7ICAgICAgICAgICAgICAgICAvKiBjbG9zZSBp dC4gKi8KKyAgICAgICAgemNsb3NlKFpESUZJTCk7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKworI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT1NQTAorICAgIHpjbG9zZShaUkZJTEUpOyAg ICAgICAgICAgICAgICAgICAgIC8qIFJFQUQgYW5kIFdSSVRFIGZpbGVzLCBpZiBhbnkuICovCisg ICAgemNsb3NlKFpXRklMRSk7CisjaWZuZGVmIE5PWEZFUgorICAgIHpjbG9zZShaSUZJTEUpOyAg ICAgICAgICAgICAgICAgICAgIC8qIEFuZCBvdGhlciBmaWxlcyB0b28gKi8KKyAgICB4ID0gY2hr Zm4oWk9GSUxFKTsJCQkvKiBEb3dubG9hZCBpbiBwcm9ncmVzcz8gKi8KKyAgICBkZWJ1ZyhGMTEx LCJkb2NsZWFuIGNoa2ZuIFpPRklMRSIsZmlsbmFtLHgpOworICAgIGRlYnVnKEYxMTEsImRvY2xl YW4ga2VlcCIsIiIsa2VlcCk7CisgICAgemNsb3NlKFpPRklMRSk7CQkJLyogQ2xvc2Ugb3V0cHV0 IGZpbGUgKi8KKyAgICBpZiAoeCA+IDAgJiYgIWtlZXApIHsJCS8qIElmIGl0IHdhcyBiZWluZyBk b3dubG9hZGVkICovCisJaWYgKGZpbG5hbVswXSkKKwkgIHggPSB6ZGVsZXQoZmlsbmFtKTsJCS8q IERlbGV0ZSBpZiBJTkNPTVBMRVRFID0gRElTQ0FSRCAqLworCWRlYnVnKEYxMTEsImRvY2xlYW4g ZG93bmxvYWQgZmlsZW5hbWUiLGZpbG5hbSx4KTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICov CisgICAgemNsb3NlKFpTWVNGTik7CisgICAgemNsb3NlKFpNRklMRSk7CisKKyAgICBpZiAoZmMg PCAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSRVNFVGluZywgbm90IEVYSVRpbmcgKi8K KyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgIC8q IENsb3NlIHRoZSBkZWJ1ZyBsb2cuICovCisgICAgICAgICAgICAqZGViZmlsID0gJ1wwJzsKKyAg ICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIERFQlVHICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYg LyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICBk ZWJ1ZyhGMTAxLCJkb2NsZWFuIGV4aXRoYW5ndXAiLCIiLGV4aXRoYW5ndXApOworICAgIGlmIChs b2NhbCAmJiBleGl0aGFuZ3VwKSB7CQkvKiBDbG9zZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb24g Ki8KKyAgICAgICAgZXh0ZXJuIGludCBoYXNsb2NrOworCWludCB4OworCQorCXggPSB0dGNoaygp OworCWRlYnVnKEYxMDEsImRvY2xlYW4gdHRjaGsoKSIsIiIseCk7CisjaWZkZWYgT1MyT1JVTklY CisJZGVidWcoRjEwMSwiZG9jbGVhbiB0dHlmZCIsIiIsdHR5ZmQpOworI2VuZGlmIC8qIE9TMk9S VU5JWCAqLworICAgICAgICBpZiAoeCA+PSAwCisjaWZkZWYgT1MyCisgICAgICAgICAgICB8fCB0 dHlmZCAhPSAtMQorI2Vsc2UKKyNpZmRlZiBVTklYCisgICAgICAgICAgICB8fCBoYXNsb2NrICAg ICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGdldCBsb2NrZmlsZSEgKi8KKyAgICAgICAg ICAgIHx8ICghbmV0d29yayAmJiB0dHlmZCA+IC0xKQorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRp ZiAvKiBPUzIgKi8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgZXh0ZXJuIGludCB3YXNj bG9zZWQsIHdoeWNsb3NlZDsKKwkgICAgZGVidWcoRjEwMCwiZG9jbGVhbiBoYW5naW5nIHVwIGFu ZCBjbG9zaW5nIiwiIiwwKTsKKyAgICAgICAgICAgIGlmIChtc2dmbGcpIHsKKyNpZmRlZiBVTklY CisgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLworICAg ICAgICAgICAgICAgIHByaW50ZigiQ2xvc2luZyAlcy4uLiIsdHRuYW1lKTsKKyAgICAgICAgICAg IH0KKyNpZm5kZWYgTk9ESUFMCisgICAgICAgICAgICBtZG1odXAoKTsgICAgICAgICAgICAgICAg ICAgLyogSGFuZ3VwIHRoZSBtb2RlbT8/PyAqLworI2VuZGlmIC8qIE5PRElBTCAqLworICAgICAg ICAgICAgdHRjbG9zKDApOyAgICAgICAgICAgICAgICAgIC8qIENsb3NlIGV4dGVybmFsIGxpbmUs IGlmIGFueSAqLworICAgICAgICAgICAgaWYgKG1zZ2ZsZykgeworICAgICAgICAgICAgICAgIHBy aW50ZigiT0tcbiIpOworI2lmZGVmIFVOSVgKKyAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0 KTsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2Fz Y2xvc2VkKSB7CisgICAgICAgICAgICAgICAgd2h5Y2xvc2VkID0gV0NfQ0xPUzsKKyNpZm5kZWYg Tk9TUEwKKyAgICAgICAgICAgICAgICBpZiAobm1hYykgeyAgICAgICAgICAgICAvKiBBbnkgbWFj cm9zIGRlZmluZWQ/ICovCisgICAgICAgICAgICAgICAgICAgIGludCBrOyAgICAgICAgICAgICAg LyogWWVzICovCisgICAgICAgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX2Nsb3Nl IixubWFjKTsgIC8qIExvb2sgdGhpcyB1cCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoayA+ PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIHdhc2Nsb3NlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBw cmludGYoIk9OX0NMT1NFIERPQ0xFQU5cbiIpOyAqLworICAgICAgICAgICAgICAgICAgICAgICAg KihtYWN0YWJba10ua3dkKSA9IE5VTDsgICAgICAgICAvKiBTZWUgY29tbWVudCBiZWxvdyAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvZG8oayxja2l0b2Eod2h5Y2xvc2VkKSwwKSA+ IC0xKSAvKiBzZXQgaXQgdXAsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigx KTsgICAgICAgICAgICAgICAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAg ICAgICAgICB3YXNjbG9zZWQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGNrc3RybmNweSh0dG5hbWUsZGZ0dHksVFROQU1MRU4pOyAvKiBSZXN0b3JlIGRlZmF1bHQgdHR5 ICovCisgICAgICAgIGxvY2FsID0gZGZsb2M7ICAgICAgICAgICAgICAgICAgLyogQW5kIGRlZmF1 bHQgcmVtb3RlL2xvY2FsIHN0YXR1cyAqLworICAgIH0KKyNpZmRlZiBERUJVRworICAgIGVsc2Ug aWYgKGxvY2FsKSBkZWJ1ZyhGMTAwLCJkb2NsZWFuIGhhbmd1cC9jbG9zZSBza2lwcGVkIiwiIiww KTsKKyNlbmRpZiAvKiBERUJVRyAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE5F V0ZUUAorICAgIGZ0cGJ5ZSgpOwkJCQkvKiBJZiBGVFAgY29ubmVjdGlvbiBvcGVuLCBjbG9zZSBp dCAqLworI2VuZGlmIC8qIE5FV0ZUUCAqLworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZl cikKKyAgICAgIHR0Y2xvcygwKTsJCQkvKiBJZiBJS1NELCBjbG9zZSBzb2NrZXQgKi8KKyNlbmRp ZiAvKiBJS1NEICovCisKKyNpZm5kZWYgTk9TUEwKKy8qCisgIElmIGEgbWFjcm8gbmFtZWQgIm9u X2V4aXQiIGlzIGRlZmluZWQsIGV4ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQor ICBtYWNybyB0YWJsZSwgaW4gY2FzZSBpdHMgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbiBFWElUIG9y IFFVSVQgY29tbWFuZCwgd2hpY2gKKyAgd291bGQgY2F1c2UgbXVjaCByZWN1cnNpb24gYW5kIHdv dWxkIHByZXZlbnQgdGhlIHByb2dyYW0gZnJvbSBldmVyIGFjdHVhbGx5CisgIEVYSVRpbmcuCisq LworICAgIGlmIChubWFjKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBtYWNyb3Mg ZGVmaW5lZD8gKi8KKyAgICAgICAgaW50IGs7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBZ ZXMgKi8KKyAgICAgICAgY2hhciAqIGNtZCA9ICJvbl9leGl0IjsgICAgICAgICAvKiBNU1ZDIDIu eCBjb21waWxlciBlcnJvciAqLworICAgICAgICBrID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsg ICAgIC8qIExvb2sgdXAgIm9uX2V4aXQiICovCisgICAgICAgIGlmIChrID49IDApIHsgICAgICAg ICAgICAgICAgICAgLyogSWYgZm91bmQsICovCisjaWZkZWYgQ09NTUVOVAorCSAgICAvKiBUaGlz IG1ha2VzIGEgbWVzcyBpZiBPTl9FWElUIGl0c2VsZiBleGVjdXRlcyBtYWNyb3MgKi8KKyAgICAg ICAgICAgICoobWFjdGFiW2tdLmt3ZCkgPSBOVUw7ICAgICAvKiBwb2tlIGl0cyBuYW1lIGZyb20g dGhlIHRhYmxlLCAqLworI2Vsc2UKKwkgICAgLyogUmVwbGFjZSB0aGUga2V5d29yZCB3aXRoIHNv bWV0aGluZyB0aGF0IGRvZXNuJ3Qgd3JlY2sgdGhlICovCisJICAgIC8qIG9yZGVyIG9mIHRoZSBr ZXl3b3JkIHRhYmxlICovCisJICAgIGNrc3RybmNweShtYWN0YWJba10ua3dkLCJvbl9leHh4Iiw4 KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBpZiAoZG9kbyhrLCIiLDApID4g LTEpICAgICAgLyogc2V0IGl0IHVwLCAqLworICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAg ICAgICAgICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYg LyogTk9TUEwgKi8KKy8qCisgIFB1dCBjb25zb2xlIHRlcm1pbmFsIGJhY2sgdG8gbm9ybWFsLiAg VGhpcyBpcyBkb25lIGhlcmUgYmVjYXVzZSB0aGUKKyAgT05fRVhJVCBtYWNybyBjYWxscyB0aGUg cGFyc2VyLCB3aGljaCBtZWRkbGVzIHdpdGggY29uc29sZSB0ZXJtaW5hbCBtb2Rlcy4KKyovCisg ICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xl IHRlcm1pbmFsLiAqLworCisjaWZkZWYgQ09NTUVOVAorLyogU2hvdWxkIGJlIG5vIG5lZWQgZm9y IHRoaXMsIGFuZCBtYXliZSBpdCdzIHNjcmV3aW5nIHRoaW5ncyB1cD8gKi8KKyAgICBjb25ub2ko KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBjb25zb2xlIGludGVycnVw dCB0cmFwcyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIC8qIERlbGV0ZSB0aGUgU3Rh cnR1cCBGaWxlIGlmIHdlIGFyZSBzdXBwb3NlZCB0by4gKi8KKyNpZm5kZWYgTk9JQ1AKKyAgICB7 CisgICAgICAgIGV4dGVybiBpbnQgRGVsZXRlU3RhcnR1cEZpbGU7CisgICAgICAgIGRlYnVnKEYx MTEsImRvY2xlYW4gRGVsZXRlU3RhcnR1cEZpbGUiLGNtZGZpbCxEZWxldGVTdGFydHVwRmlsZSk7 CisgICAgICAgIGlmIChEZWxldGVTdGFydHVwRmlsZSkgeworICAgICAgICAgICAgaW50IHJjID0g emRlbGV0KGNtZGZpbCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIHpkZWxldCIs Y21kZmlsLHJjKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIHN5 c2NsZWFudXAoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBlbmRlbnQgY2xl YW51cCwgbGFzdCAqLworfQorCisvKiAgRCBPIEUgWCBJIFQgIC0tICBFeGl0IGZyb20gdGhlIHBy b2dyYW0uICAqLworCisvKgorICBGaXJzdCBhcmcgaXMgZ2VuZXJhbCwgc3lzdGVtLWluZGVwZW5k ZW50IHN5bWJvbDogR09PRF9FWElUIG9yIEJBRF9FWElULgorICBJZiBzZWNvbmQgYXJnIGlzIC0x LCB0YWtlIDFzdCBhcmcgbGl0ZXJhbGx5LgorICBJZiBzZWNvbmQgYXJnIGlzIG5vdCAtMSwgd29y ayBpdCBpbnRvIHRoZSBleGl0IGNvZGUuCisqLworVk9JRAorZG9leGl0KGV4aXRzdGF0LGNvZGUp IGludCBleGl0c3RhdCwgY29kZTsgeworICAgIGV4dGVybiBpbnQgeF9sb2dnZWQsIHF1aXR0aW5n OworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQgZGlzcGxheV9kZW1vOworICAgIGV4dGVybiBp bnQgU3lzSW5pdGVkOworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZk ZWYgS1JCNAorICAgIGV4dGVybiBpbnQga3JiNF9hdXRvZGVsOworI2VuZGlmIC8qIEtSQjQgKi8K KyNpZmRlZiBLUkI1CisgICAgZXh0ZXJuIGludCBrcmI1X2F1dG9kZWw7CisjZW5kaWYgLyogS1JC NSAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisKKyNpZmRlZiBWTVMKKyAgICBjaGFyIGVu dnN0cls2NF07CisgICAgc3RhdGljICRERVNDUklQVE9SKHN5bW5hbSwiQ0tFUk1JVF9TVEFUVVMi KTsKKyAgICBzdGF0aWMgc3RydWN0IGRzYyRkZXNjcmlwdG9yX3Mgc3ltdmFsOworI2VuZGlmIC8q IFZNUyAqLworICAgIGludCBpOworCisjaWZkZWYgREVCVUcKKyNpZmRlZiBVU0VfTFVDQUNIRQor ICAgIGV4dGVybiBsb25nIGx1Y2FsbHMsIGx1aGl0cywgeHhoaXRzLCBsdWxvb3A7CisgICAgZXh0 ZXJuIGludCBsdXNpemU7CisjZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KKyNpZm5kZWYgTk9TUEwK KyAgICBleHRlcm4gaW50IGNtZHN0YXRzW107CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIHF1 aXR0aW5nKys7CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoICFTeXNJbml0ZWQgKSB7CisgICAgICAg IHN0YXRpYyBpbnQgaW5pdGluZyA9IDA7CisgICAgICAgIGlmICggaW5pdGluZyApCisJICBleGl0 KDI1Myk7CisgICAgICAgIGluaXRpbmcgPSAxOworICAgICAgICBzeXNpbml0KCk7CisgICAgfQor I2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKGRlYmxvZykgeworI2lmZGVmIFVTRV9MVUNBQ0hF CisJZGVidWcoRjEwMSwibG9va3VwIGNhY2hlIHNpemUiLCIiLGx1c2l6ZSk7CisJZGVidWcoRjEw MSwibG9va3VwIGNhbGxzIC4uLi4iLCIiLGx1Y2FsbHMpOworCWRlYnVnKEYxMDEsImxvb2t1cCBj YWNoZSBoaXRzIiwiIixsdWhpdHMpOworCWRlYnVnKEYxMDEsImxvb2t1cCBzdGFydCBoaXRzIiwi Iix4eGhpdHMpOworCWRlYnVnKEYxMDEsImxvb2t1cCBsb29wIGl0ZXJhdGlvbnMiLCIiLGx1bG9v cCk7CisjZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KKyNpZm5kZWYgTk9TUEwKKwlmb3IgKGkgPSAw OyBpIDwgMjU2OyBpKyspIHsKKwkgICAgaWYgKGNtZHN0YXRzW2ldKQorCSAgICAgIGRlYnVnKEYx MTEsIkNNU1RBVFMiLGNraXRvYShpKSxjbWRzdGF0c1tpXSk7CisJfQorI2VuZGlmIC8qIE5PU1BM ICovCisJZGVidWcoRjEwMSwiZG9leGl0IGV4aXRzdGF0IiwiIixleGl0c3RhdCk7CisJZGVidWco RjEwMSwiZG9leGl0IGNvZGUiLCIiLGNvZGUpOworCWRlYnVnKEYxMDEsImRvZXhpdCB4aXRzdGEi LCIiLHhpdHN0YSk7CisgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBDS19LRVJC RVJPUworICAgIC8qIElmIHdlIGFyZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3lpbmcgS2VyYmVyb3Mg Y3JlZGVudGlhbHMgb24gRXhpdCAqLworICAgIC8qIGRvIGl0IG5vdy4gKi8KKyNpZmRlZiBLUkI0 CisgICAgaWYgKGtyYjRfYXV0b2RlbCA9PSBLUkJfREVMX0VYKSB7CisgICAgICAgIGV4dGVybiBz dHJ1Y3Qga3JiX29wX2RhdGEga3JiX29wOworICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDQ7Cisg ICAgICAgIGtyYl9vcC5jYWNoZSA9IE5VTEw7CisgICAgICAgIGNrX2tyYjRfZGVzdHJveSgma3Ji X29wKTsKKyAgICB9CisjZW5kaWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyAgICBpZiAoa3Ji NV9hdXRvZGVsID09IEtSQl9ERUxfRVgpIHsKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3Bf ZGF0YSBrcmJfb3A7CisgICAgICAgIGV4dGVybiBjaGFyICoga3JiNV9kX2NjOworICAgICAgICBr cmJfb3AudmVyc2lvbiA9IDU7CisgICAgICAgIGtyYl9vcC5jYWNoZSA9IGtyYjVfZF9jYzsKKyAg ICAgICAgY2tfa3JiNV9kZXN0cm95KCZrcmJfb3ApOworICAgIH0KKyNlbmRpZiAvKiBLUkI1ICov CisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1My CisgICAgaWYgKFN5c0luaXRlZCkKKyAgICB7CisjaWZkZWYgRENNREJVRgorICAgICAgICBleHRl cm4gc3RydWN0IGNtZHB0ciAqY21kc3RrOworI2Vsc2UKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBj bWRwdHIgY21kc3RrW107CisjZW5kaWYgLyogRENNREJVRiAqLworICAgICAgICBleHRlcm4gaW50 IHR0X3N0YXR1c1tdOworICAgICAgICBleHRlcm4gaW50IHZtb2RlOworCisgICAgICAgIC8qIElm IHRoZXJlIGlzIGEgZGVtbyBzY3JlZW4gdG8gYmUgZGlzcGxheWVkLCBkaXNwbGF5IGl0ICovCisg ICAgICAgIGlmIChkaXNwbGF5X2RlbW8pIHsKKyAgICAgICAgICAgIGRlbW9zY3JuKFZDTUQpOwor ICAgICAgICAgICAgZGlzcGxheV9kZW1vID0gMDsKKyAgICAgICAgfQorI2lmbmRlZiBLVUkKKyAg ICAgICAgLyogVGhpcyBpcyBnb2luZyB0byBiZSBoaWRlb3VzLiAgSWYgd2UgaGF2ZSBhIHN0YXR1 cyBsaW5lICovCisgICAgICAgIC8qIGluIHRoZSBjb21tYW5kIHdpbmRvdyB0dXJuIGl0IG9mZiBi ZWZvcmUgd2UgZXhpdC4gICAgICAqLworCisgICAgICAgIGlmICggdHRfc3RhdHVzW1ZDTURdICYm IHZtb2RlID09IFZDTUQgKSB7CisgICAgICAgICAgICBkb21hYygiX2NsZWFyX3N0YXR1c2xpbmUi LCJzZXQgY29tbWFuZCBzdGF0dXNsaW5lIG9mZiIsCisgICAgICAgICAgICAgICAgICAgY21kc3Rr W2NtZGx2bF0uY2NmbGdzKTsKKyAgICAgICAgICAgIGRlbG1hYygiX2NsZWFyX3N0YXR1c2xpbmUi LDEpOworICAgICAgICAgICAgUmVxdWVzdFNjcmVlbk11dGV4KC0xKTsKKyAgICAgICAgICAgIFZz Y3JuSXNEaXJ0eSh2bW9kZSk7CisgICAgICAgICAgICBSZWxlYXNlU2NyZWVuTXV0ZXgoKTsKKyAg ICAgICAgICAgIHdoaWxlICggSXNWc2NybkRpcnR5KHZtb2RlKSApCisgICAgICAgICAgICAgICAg bXNsZWVwKDIwMCk7CisgICAgICAgICAgICBSZXF1ZXN0U2NyZWVuTXV0ZXgoLTEpOworICAgICAg ICAgICAgUmVsZWFzZVNjcmVlbk11dGV4KCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBLVUkgKi8K KyAgICAgICAgRGlhbGVyU2VuZChPUFRfS0VSTUlUX0VYSVQsZXhpdHN0YXQpOworI2lmbmRlZiBL VUkKKyAgICAgICAgZGVidWcoRjEwMCwiZG9leGl0IGFib3V0IHRvIG1zbGVlcCIsIiIsMCk7CisK KyAgICAgICAgaWYgKCBpc1dpbjk1KCkgKQorICAgICAgICAgICAgbXNsZWVwKDI1MCk7CisjZW5k aWYgLyogS1VJICovCisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwg Ki8KKworI2lmZGVmIElLU0QKKyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChpbnNlcnZlciAmJiB4 X2xvZ2dlZCkgeworI2lmbmRlZiBOT1NQTAorLyoKKyAgSWYgYSBtYWNybyBuYW1lZCAib25fbG9n b3V0IiBpcyBkZWZpbmVkLCBleGVjdXRlIGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKKyAg bWFjcm8gdGFibGUsIGluIGNhc2UgaXRzIGRlZmluaXRpb24gaW5jbHVkZXMgYW4gRVhJVCBvciBR VUlUIGNvbW1hbmQsIHdoaWNoCisgIHdvdWxkIGNhdXNlIG11Y2ggcmVjdXJzaW9uIGFuZCB3b3Vs ZCBwcmV2ZW50IHRoZSBwcm9ncmFtIGZyb20gZXZlciBhY3R1YWxseQorICBFWElUaW5nLgorKi8K KwlpZiAobm1hYykgewkJCS8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKwkgICAgaW50IGs7CQkJ LyogWWVzICovCisJICAgIGNoYXIgKiBjbWQgPSAib25fbG9nb3V0IjsJLyogTVNWQyAyLnggY29t cGlsZXIgZXJyb3IgKi8KKwkgICAgayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7CS8qIExvb2sg dXAgIm9uX2xvZ291dCIgKi8KKwkgICAgaWYgKGsgPj0gMCkgewkJLyogSWYgZm91bmQsICovCisJ CSoobWFjdGFiW2tdLmt3ZCkgPSBOVUw7CS8qIHBva2UgaXRzIG5hbWUgZnJvbSB0aGUgdGFibGUs ICovCisJCWlmIChkb2RvKGssIiIsMCkgPiAtMSkJLyogc2V0IGl0IHVwLCAqLworCQkgIHBhcnNl cigxKTsJCS8qIGFuZCBleGVjdXRlIGl0ICovCisJICAgIH0KKwl9CisjZW5kaWYgLyogTk9TUEwg Ki8KKwl6dmxvZ291dCgpOworICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8q IElLU0QgKi8KKworICAgIGRlYnVnKEYxMDAsImRvZXhpdCBhYm91dCB0byBkb2NsZWFuIiwiIiww KTsKKyAgICBkb2NsZWFuKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhbiB1cCBt b3N0IHRoaW5ncyAqLworCisjaWZkZWYgVk1TCisgICAgaWYgKGNvZGUgPT0gLTEpCisgICAgICBj b2RlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2luY2Ugd2Ugc2V0IHR3byBkaWZm ZXJlbnQgaXRlbXMgKi8KKyAgICBzcHJpbnRmKGVudnN0ciwiJWQiLCBleGl0c3RhdCB8IGNvZGUp OyAvKiBTQUZFICovCisgICAgc3ltdmFsLmRzYyR3X2xlbmd0aCA9IChpbnQpc3RybGVuKGVudnN0 cik7CisgICAgc3ltdmFsLmRzYyRhX3BvaW50ZXIgPSBlbnZzdHI7CisgICAgc3ltdmFsLmRzYyRi X2NsYXNzID0gRFNDJEtfQ0xBU1NfUzsKKyAgICBzeW12YWwuZHNjJGJfZHR5cGUgPSBEU0MkS19E VFlQRV9UOworICAgIGkgPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3Jl IGluIGdsb2JhbCB0YWJsZSAqLworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KKyAgICBMSUIkU0VUX1NZTUJPTCgmc3ltbmFtLCAmc3lt dmFsLCAmaSk7CisjZWxzZQorICAgIGxpYiRzZXRfc3ltYm9sKCZzeW1uYW0sICZzeW12YWwsICZp KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKGV4aXRzdGF0ID09IEJBRF9FWElUKQor ICAgICAgZXhpdHN0YXQgPSBTUyRfQUJPUlQgfCBTVFMkTV9JTkhJQl9NU0c7CisgICAgaWYgKGV4 aXRzdGF0ID09IEdPT0RfRVhJVCkKKyAgICAgIGV4aXRzdGF0ID0gU1MkX05PUk1BTCB8IFNUUyRN X0lOSElCX01TRzsKKyNlbHNlIC8qIE5vdCBWTVMgKi8KKyAgICBpZiAoY29kZSAhPSAtMSkgICAg ICAgICAgICAgICAgICAgICAvKiBUYWtlIDFzdCBhcmcgbGl0ZXJhbGx5ICovCisgICAgICBleGl0 c3RhdCB8PSBjb2RlOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYgSUtTRAorI2lmZGVmIElL U0RCCisgICAgZGVidWcoRjEwMSwiZG9leGl0IGlrZGJvcGVuIiwiIixpa2Rib3Blbik7CisgICAg aWYgKGlrZGJvcGVuICYmIGRiZnApIHsgICAgICAgICAgICAgLyogSWYgSUtTRCBkYXRhYmFzZSBv cGVuICovCisgICAgICAgIGludCB4OworICAgICAgICB4ID0gZnJlZXNsb3QobXlkYnNsb3QpOyAg ICAgICAgIC8qIEZyZWUgb3VyIHNsb3QuLi4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9leGl0 IGZyZWVzbG90IiwiIix4KTsKKyAgICAgICAgZmNsb3NlKGRiZnApOyAgICAgICAgICAgICAgICAg ICAvKiBhbmQgY2xvc2UgaXQuICovCisgICAgfQorI2VuZGlmIC8qIElLU0RCICovCisjZW5kaWYg LyogSUtTRCAqLworCisvKiBXZSBoYXZlIHB1dCB0aGlzIG9mZiB0aWxsIHRoZSB2ZXJ5IGxhc3Qg bW9tZW50Li4uICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsgICAgICAgICAg ICAgICAgICAgICAgIC8qIENsb3NlIHRoZSBkZWJ1ZyBsb2cuICovCisgICAgICAgIGRlYnVnKEYx MDEsIkMtS2VybWl0IEVYSVQgc3RhdHVzIiwiIixleGl0c3RhdCk7CisgICAgICAgICpkZWJmaWwg PSAnXDAnOworICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAg ICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIE9TMgorICAgIF9leGl0KGV4aXRzdGF0 KTsgICAgICAgICAgICAvKiBFeGl0IGZyb20gQy1LZXJtaXQgKG5vIG1hdHRlciB3aGF0KSAqLwor I2Vsc2UgLyogT1MyICovCisgICAgZXhpdChleGl0c3RhdCk7ICAgICAgICAgICAgICAgICAgICAg LyogRXhpdCBmcm9tIEMtS2VybWl0ICovCisjZW5kaWYgLyogT1MyICovCit9CisKK1ZPSUQKK2Jn Y2hrKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5k IHN0YXR1cyAqLworICAgIGlmIChiZ3NldCA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIFRo ZXkgZGlkbid0IHR5cGUgU0VUIEJBQ0tHUk9VTkQgKi8KKyNpZmRlZiBWTVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBTZXQgcHJvbXB0IGZsYWcgYmFzZWQgb24gKi8KKyAgICAgICAg cGZsYWcgPSAhYmF0Y2g7ICAgICAgICAgICAgICAgICAvKiB3aGF0IHdlIGRldGVjdGVkIGF0IHN0 YXJ0dXAuICovCisjZWxzZQorICAgICAgICBwZmxhZyA9ICFiYWNrZ3JkOworI2VuZGlmIC8qIFZN UyAqLworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lz ZSBTRVQgQkFDS0dST1VORCB2YWx1ZSAqLworICAgICAgICBwZmxhZyA9IChiZ3NldCA9PSAwID8g MSA6IDApOworICAgIH0KKworI2lmbmRlZiBOT0lDUAorICAgIC8qIE1lc3NhZ2UgZmxhZyBvbiBv bmx5IGlmIGF0IHRvcCBsZXZlbCwgcGZsYWcgaXMgb24sIGFuZCBRVUlFVCBpcyBPRkYgKi8KKyAg ICBpZiAoIXhjbWRzcmMpCisgICAgICBtc2dmbGcgPSAocGZsYWcgPT0gMCkgPyAwIDogIXF1aWV0 OworICAgIGVsc2UgbXNnZmxnID0gMDsKKyNlbHNlCisgICAgbXNnZmxnID0gMDsKKyNlbmRpZiAv KiBOT0lDUCAqLworfQorCisvKiBTZXQgY29uc29sZSBpbnRlcnJ1cHRzICovCisKK1ZPSUQKK3Nl dGludCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBY2NvcmRpbmcgdG8gU0VU IENPTU1BTkQgSU5URVJSVVAgKi8KKyAgICBpbnQgeCA9IDA7CisgICAgaWYgKGNtZGludCkgIHgg fD0gMTsKKyAgICBpZiAoeHN1c3BlbmQpIHggfD0gMjsKKyAgICBkZWJ1ZyhGMTAxLCJzZXRpbnQi LCIiLHgpOworCisgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0 IHRoZSBkZXNpcmVkIGNvbWJpbmF0aW9uICovCisgICAgICBjYXNlIDA6IGNvbm5vaSgpOyBicmVh azsgICAgICAgICAgLyogTm8gaW50ZXJydXB0cyAqLworICAgICAgY2FzZSAxOiBjb25pbnQodHJh cCxTSUdfSUdOKTsgYnJlYWs7CisgICAgICBjYXNlIDI6IGNvbmludChTSUdfSUdOLHN0cHRyYXAp OyBicmVhazsKKyAgICAgIGNhc2UgMzogY29uaW50KHRyYXAsc3RwdHJhcCk7IGJyZWFrOworICAg IH0KKyAgICBiZ2NoaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNr Z3JvdW5kIHN0YXR1cyAqLworfQorCisjaWZkZWYgREVCVUcKKy8qICBEIEUgQiBVIEcgIC0tICBF bnRlciBhIHJlY29yZCBpbiB0aGUgZGVidWdnaW5nIGxvZyAgKi8KKworLyoKKyBDYWxsIHdpdGgg YSBmb3JtYXQsIHR3byBzdHJpbmdzLCBhbmQgYSBudW1iZXI6CisgICBmICAtIEZvcm1hdCwgYSBi aXQgc3RyaW5nIGluIHJhbmdlIDAtNy4KKyAgICAgICAgSWYgYml0IHggaXMgb24sIHRoZW4gYXJn dW1lbnQgbnVtYmVyIHggaXMgcHJpbnRlZC4KKyAgIHMxIC0gU3RyaW5nLCBhcmd1bWVudCBudW1i ZXIgMS4gIElmIHNlbGVjdGVkLCBwcmludGVkIGFzIGlzLgorICAgczIgLSBTdHJpbmcsIGFyZ3Vt ZW50IG51bWJlciAyLiAgSWYgc2VsZWN0ZWQsIHByaW50ZWQgaW4gYnJhY2tldHMuCisgICBuICAt IExvbmcgaW50LCBhcmd1bWVudCAzLiAgSWYgc2VsZWN0ZWQsIHByaW50ZWQgcHJlY2VkZWQgYnkg ZXF1YWxzIHNpZ24uCisKKyAgIGY9MCBpcyBzcGVjaWFsOiBwcmludCBzMSxzMiwgYW5kIGludGVy cHJldCBuIGFzIGEgY2hhci4KKworICAgZj1GMDExICgzKSBpcyBhbHNvIHNwZWNpYWw7IGluIHRo aXMgY2FzZSBzMiBpcyBpbnRlcnBldGVkIGFzIGEgY291bnRlZAorICAgc3RyaW5nIHRoYXQgbWln aHQgY29udGFpbiBOVUxzLiAgbiBpcyB0aGUgbGVuZ3RoLiAgSWYgbiBpcyBuZWdhdGl2ZSwgdGhp cworICAgbWVhbnMgdGhlIHN0cmluZyBoYXMgYmVlbiB0cnVuY2F0ZWQgYW5kICIuLiIgc2hvdWxk IGJlIHByaW50ZWQgYWZ0ZXIgdGhlCisgICBmaXJzdCBuIGJ5dGVzLiAgTlVMIGFuZCBMRiBieXRl cyBhcmUgcHJpbnRlZCBhcyAiPE5VTD4iIGFuZCAiPExGPiIuCisKKyAgIEdsb2JhbHM6CisgICAg IGRlYmxvZzogbm9uemVybyBpZiBkZWJ1ZyBsb2cgb3Blbi4KKyAgICAgZGVib2s6ICBub256ZXJv IGlmIG9rIHRvIHdyaXRlIGVudHJpZXMuCisqLworLyoKKyAgV0FSTklORzogRG9uJ3QgY2hhbmdl IERFQlVGTCB3aXRob3V0IGNoYW5naW5nIHNwcmludGYoKSBmb3JtYXRzIGJlbG93LAorICBhY2Nv cmRpbmdseS4KKyovCisjZGVmaW5lIERCVUZMIDQwMDAKKy8qCisgIFdBUk5JTkc6IFRoaXMgcm91 dGluZSBpcyBub3QgdGhyZWFkLXNhZmUsIGVzcGVjaWFsbHkgd2hlbiBLZXJtaXQgaXMKKyAgZXhl Y3V0aW5nIG9uIG11bHRpcGxlIENQVXMgLS0gYXMgZGlmZmVyZW50IHRocmVhZHMgd3JpdGUgdG8g dGhlIHNhbWUKKyAgc3RhdGljIGJ1ZmZlciwgdGhlIGRlYnVnIHN0YXRlbWVudHMgYXJlIGFsbCBp bnRlcmxlYXZlZC4gIFRvIGJlIGZpeGVkCisgIGxhdGVyLi4uCisqLworc3RhdGljIGNoYXIgKmRi cHRyID0gKGNoYXIgKikwOworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZG9kZWJ1ZyhpbnQgZiwg Y2hhciAqczEsIGNoYXIgKnMyLCBDS19PRkZfVCBuKQorI2Vsc2UKK2RvZGVidWcoZixzMSxzMixu KSBpbnQgZjsgY2hhciAqczEsICpzMjsgQ0tfT0ZGX1QgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworLyogZG9kZWJ1ZyAqLyB7CisgICAgY2hhciAqc3A7CisgICAgaW50IGxlbjEsIGxlbjI7Cisg ICAgZXh0ZXJuIGludCBkZWJ0aW07CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBTeXNJbml0 ZWQ7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoIWRlYmxvZyB8fCAhZGVib2spCisgICAg ICByZXR1cm4oMCk7CisKKyNpZmRlZiBDT01NRU5UCisgICAgLyogZXhwZW5zaXZlLi4uICovCisg ICAgaWYgKCFjaGtmbihaREZJTEUpKQkJCS8qIERlYnVnIGxvZyBub3Qgb3BlbiwgZG9uJ3QuICov CisgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGlmICghZGJwdHIp IHsgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBidWZmZXIgKi8KKyAg ICAgICAgZGJwdHIgPSBtYWxsb2MoREJVRkwrNCk7ICAgICAgICAvKiBUaGlzIG9ubHkgaGFwcGVu cyBvbmNlICovCisgICAgICAgIGlmICghZGJwdHIpIHsKKyAgICAgICAgICAgIHpjbG9zZShaREZJ TEUpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9CisgICAgfQorLyoKKyAgVGhp cyBwcmV2ZW50cyBpbmZpbml0ZSByZWN1cnNpb24gaW4gY2FzZSB3ZSBhY2NpZGVudGFsbHkgcHV0 IGEgZGVidWcoKQorICBjYWxsIGluIHRoaXMgcm91dGluZSwgb3IgY2FsbCBhbm90aGVyIHJvdXRp bmUgdGhhdCBjb250YWlucyBkZWJ1ZygpIGNhbGxzLgorICBGcm9tIHRoaXMgcG9pbnQgb24sIGFs bCByZXR1cm5zIGZyb20gdGhpcyByZXR1cm4gbXVzdCBiZSB2aWEgZ290byB4ZGVidWcsCisgIHdo aWNoIHNldHMgZGVibG9nIGJhY2sgdG8gMS4KKyovCisjaWZkZWYgT1MyCisgICAgaWYgKFN5c0lu aXRlZCkgeworCWlmIChSZXF1ZXN0RGVidWdNdXRleCgzMDAwMCkpCisJICAgIGdvdG8geGRlYnVn OworICAgIH0KKyNlbHNlIC8qIE9TMiAqLworICAgIGRlYmxvZyA9IDA7ICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uICovCisjZW5kaWYgLyogT1My ICovCisKKyAgICBpZiAoZGVidGltKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lc3Rh bXAgKi8KKyAgICAgICAgY2hhciAqdGIsIHRzYnVmWzQ4XTsKKyAgICAgICAgenRpbWUoJnRiKTsK KyAgICAgICAgY2tzdHJuY3B5KHRzYnVmLHRiLDMyKTsKKyAgICAgICAgaWYgKHp0bXNlYyA+IC0x TCkgeworCSAgICBzcHJpbnRmKHRzYnVmKzE5LCIuJTAzbGQgIix6dG1zZWMpOyAvKiBTQUZFICov CisJfSBlbHNlIHsKKwkgICAgdHNidWZbMTldID0gJzonOworCSAgICB0c2J1ZlsyMF0gPSBTUDsK KwkgICAgdHNidWZbMjFdID0gTlVMOworCX0KKyAgICAgICAgenNvdXQoWkRGSUxFLHRzYnVmKzEx KTsKKyAgICB9CisgICAgaWYgKCFzMSkgczE9IihOVUxMKSI7CisgICAgaWYgKCFzMikgczI9IihO VUxMKSI7CisKKyAgICBsZW4xID0gc3RybGVuKHMxKTsKKyAgICBsZW4yID0gc3RybGVuKHMyKTsK KworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoaXMgc2hvdWxkIHdvcmssIGJ1dCBpdCBkb2Vzbid0 LgorICBTbyBpbnN0ZWFkIHdlJ2xsIGNvcGUgd2l0aCBvdmVyZmxvdyB2aWEgc3ByaW50ZiBmb3Jt YXRzLgorICBOLkIuOiBVTkZPUlRVTkFURUxZLCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gcHV0IGNv bnN0YW50cyBpbiB0aGUKKyAgc3ByaW50ZiBmb3JtYXRzLgorKi8KKyAgICBpZiAoZiAhPSBGMDEx ICYmICghZiB8fCAoZiAmIDYpKSkgeyAvKiBTdHJpbmcgYXJndW1lbnQocykgaW5jbHVkZWQ/ICov CisgICAgICAgIHggPSAoaW50KSBzdHJsZW4oczEpICsgKGludCkgc3RybGVuKHMyKSArIDE4Owor ICAgICAgICBpZiAoeCA+IGRidWZsKSB7ICAgICAgICAgICAgICAgIC8qIExvbmdlciB0aGFuIGJ1 ZmZlcj8gKi8KKyAgICAgICAgICAgIGlmIChkYnB0cikgICAgICAgICAgICAgICAgICAvKiBZZXMs IGZyZWUgcHJldmlvdXMgYnVmZmVyICovCisgICAgICAgICAgICAgIGZyZWUoZGJwdHIpOworICAg ICAgICAgICAgZGJwdHIgPSAoY2hhciAqKSBtYWxsb2MoeCArIDIpOyAvKiBBbGxvY2F0ZSBhIG5l dyBvbmUgKi8KKyAgICAgICAgICAgIGlmICghZGJwdHIpIHsKKyAgICAgICAgICAgICAgICB6c291 dGwoWkRGSUxFLCJERUJVRzogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgICAgICAg ICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAg ICAgICAgICAgICAgZ290byB4ZGVidWc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIGRidWZsID0geDsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGRicHRyLCJERUJVRzog QnVmZmVyIGV4cGFuZGVkIHRvICVkXG4iLCB4ICsgMTgpOworICAgICAgICAgICAgICAgIHpzb3V0 bChaREZJTEUsZGJwdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlm IC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIFRoZSBhZm9yZW1lbnRpb25lZCBz cHJpbnRmKCkgZm9ybWF0cyB3ZXJlIGxpa2UgdGhpczogKi8KKyAgICAgICAgaWYgKG4gPiAzMSAm JiBuIDwgMTI3KQorICAgICAgICAgIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6JWNcbiIsczEs czIsKENIQVIpIG4pOworICAgICAgICBlbHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCisgICAg ICAgICAgc3ByaW50ZihzcCwiJS4xMDBzJS4yMDAwczpeJWNcbiIsczEsczIsKENIQVIpICgobis2 NCkgJiAweDdGKSk7CisgICAgICAgIGVsc2UgaWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKKyAgICAg ICAgICBzcHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOn5eJWNcbiIsczEsczIsKENIQVIpKChuLTY0 KSAmIDB4N0YpKTsKKyAgICAgICAgZWxzZSBpZiAobiA+IDE1OSAmJiBuIDwgMjU2KQorICAgICAg ICAgIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6fiVjXG4iLHMxLHMyLChDSEFSKSAobiAmIDB4 N0YpKTsKKyAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOiVsZFxuIixzMSxz MixuKTsKKy8qCisgIEJ1dCwgbmF0dXJhbGx5LCBpdCB0dXJucyBvdXQgdGhlc2UgYXJlIG5vdCBw b3J0YWJsZSBlaXRoZXIsIHNvIG5vdworICB3ZSBkbyB0aGUgc3R1cGlkZXN0IHBvc3NpYmxlIHRo aW5nLgorKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBCSUdCVUZPSworLyogTmVl ZCB0byBhY2NlcHQgbG9uZ2VyIHN0cmluZ3Mgd2hlbiBkZWJ1Z2dpbmcgYXV0aGVudGljYXRlZCBj b25uZWN0aW9ucyAqLworICAgIGlmIChmID09IEYwMTApIHsKKyAgICAgICAgaWYgKGxlbjIgKyAy ID49IERCVUZMKSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7CisgICAgfSBlbHNlIGlmIChmICE9 IEYwMTEgJiYgZiAhPSBGMTAwKSB7CisgICAgICAgIGlmIChsZW4xID4gMTAwKSBzMSA9ICIoc3Ry aW5nIHRvbyBsb25nKSI7CisgICAgICAgIGlmIChsZW4yICsgMTAxID49IERCVUZMKSBzMiA9ICIo c3RyaW5nIHRvbyBsb25nKSI7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZiAhPSBGMDExKSB7Cisg ICAgICAgIGlmIChsZW4xID4gMTAwKSBzMSA9ICIoc3RyaW5nIHRvbyBsb25nKSI7CisgICAgICAg IGlmIChsZW4yICsgMTAxID49IERCVUZMKSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7CisgICAg fQorI2VuZGlmIC8qIEJJR0JVRk9LICovCisKKyAgICBzcCA9IGRicHRyOworCisgICAgc3dpdGNo IChmKSB7ICAgICAgICAgICAgICAgIC8qIFdyaXRlIGxvZyByZWNvcmQgYWNjb3JkaW5nIHRvIGZv cm1hdC4gKi8KKyAgICAgIGNhc2UgRjAwMDogICAgICAgICAgICAgICAgLyogMCA9IHByaW50IGJv dGggc3RyaW5ncywgYW5kIG4gYXMgYSBjaGFyLiAqLworICAgICAgICBpZiAobGVuMiA+IDApIHsK KyAgICAgICAgICAgIGlmICgobiA+IDMxICYmIG4gPCAxMjcpIHx8IChuID4gMTU5ICYmIG4gPCAy NTYpKQorICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlc1slc109JWNcbiIsczEsczIsKENIQVIp IG4pOworICAgICAgICAgICAgZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQorICAgICAgICAg ICAgICBzcHJpbnRmKHNwLCIlc1slc109XiVjXG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3 RikpOworICAgICAgICAgICAgZWxzZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQorICAgICAgICAg ICAgICBzcHJpbnRmKHNwLCIlc1slc109fl4lY1xuIixzMSxzMiwoQ0hBUikoKG4tNjQpICYgMHg3 RikpOworICAgICAgICAgICAgZWxzZSBzcHJpbnRmKHNwLCIlc1slc109MHglbFhcbiIsczEsczIs KGxvbmcpbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKG4gPiAzMSAmJiBu IDwgMTI3KSB8fCAobiA+IDE1OSAmJiBuIDwgMjU2KSkKKyAgICAgICAgICAgICAgc3ByaW50Zihz cCwiJXM9JWNcbiIsczEsKENIQVIpIG4pOworICAgICAgICAgICAgZWxzZSBpZiAobiA8IDMyIHx8 IG4gPT0gMTI3KQorICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIlcz1eJWNcbiIsczEsKENIQVIp ICgobis2NCkgJiAweDdGKSk7CisgICAgICAgICAgICBlbHNlIGlmIChuID4gMTI3ICYmIG4gPCAx NjApCisgICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzPX5eJWNcbiIsczEsKENIQVIpKChuLTY0 KSAmIDB4N0YpKTsKKyAgICAgICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiJXM9MHglbFhcbiIsczEs KGxvbmcpbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAw KSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7 CisgICAgICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEs ImRlYnVnIixkYnB0cixOVUxMKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisg ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEYwMDE6ICAgICAgICAgICAgICAgICAgICAgICAg LyogMSwgIj1uIiAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgLyogVGhpcyB3YXMgbmV2ZXIg dXNlZCAqLworICAgICAgICBzcHJpbnRmKHNwLCI9JXNcbiIsY2tmc3RvYShuKSk7CisjZWxzZQor ICAgICAgICAvKiBMaWtlIEYxMTEsIGJ1dCBzaG93cyBudW1iZXIgbiBpbiBoZXggKi8KKwlja21h a3htc2coc3AsREJVRkwsCisJCSAgczEsCisJCSAgKCpzMSA/ICI6IiA6ICIiKSwKKwkJICBzMiwK KwkJICAoKnMyID8gIjoiIDogIiIpLAorCQkgIGNrbHRveChuKSwKKwkJICAiXG4iLAorCQkgIE5V TEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisJCSAgKTsKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVi bG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9CisjaWZkZWYg Q0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5n KSB7CisgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7 CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICBicmVhazsKKworLyoK KyAgVGhpcyBvbmUgd2FzIG5ldmVyIHVzZWQgc28gKE9jdG9iZXIgMjAwMCkgd2Ugbm93IHVzZSBp dCBsaWtlIEYwMTEsCisgIGV4Y2VwdCBpbiB0aGlzIGNhc2Ugd2UgdHJlYXQgczIgYXMgTlVMIHRl cm1pbmF0ZWQuCisqLworICAgICAgY2FzZSBGMDEwOgorCW4gPSAtZGVieGxlbjsKKy8qCisgIFRo aXMgb25lIHRyZWF0cyBuIGFzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBzMiwgd2hpY2ggbWF5 IGNvbnRhaW4gTlVMcy4KKyAgSXQncyBnb29kIGZvciBsb2dnaW5nIE5VTC1iZWFyaW5nIGRhdGEg aW4gdGhlIGRlYnVnIGxvZy4KKyovCisgICAgICBjYXNlIEYwMTE6IHsKKwkgIGludCBpLCBqLCBj b250ZCA9IDA7CisJICBjaGFyICogcCA9IHMyLCAqcGJ1ZiA9IE5VTEw7CS8qIHAgPSBzb3VyY2Ug cG9pbnRlciAqLworCSAgaW50IG07CQkJLyogcGJ1ZiA9IGRlc3RpbmF0aW9uIHBvaW50ZXIgKi8K KworCSAgaWYgKGYgPT0gRjAxMSkgeworCSAgICAgIGlmIChuIDwgMCkgewkJLyogbiA9IHNpemUg b2Ygc291cmNlICovCisJCSAgbiA9IDAgLSBuOwkJLyogTmVnYXRpdmUgbWVhbnMgdG8gYWRkICIu Li4iICovCisJCSAgY29udGQgPSAxOworCSAgICAgIH0KKwkgIH0gZWxzZSB7CisJICAgICAgaW50 IHgsIGZsYWcgPSAwOworCSAgICAgIHggPSBzdHJsZW4oczIpOworCSAgICAgIGlmIChuIDwgMCkg eworCQkgIGZsYWcgPSAxOworCQkgIG4gPSAwIC0gbjsKKwkgICAgICB9CisJICAgICAgaWYgKHgg PCBuKQorCQluID0geDsKKwkgIH0KKwkgIGlmIChuID09IDApCQkJLyogMCBtZWFucyBkbyBub3Ro aW5nICovCisJICAgIGdvdG8geGRlYnVnOworCSAgbSA9IERCVUZMIC0gODsJCS8qIEdldCBzaXpl IGZvciBpbnRlcnByZXRlZCBwYXJ0ICovCisJICBpZiAobiA+IG0pCQkJLyogRW5zdXJlIHJlcXVl c3RlZCBzaXplIG5vdCB0b28gYmlnICovCisJICAgIG4gPSBtOworCSAgcGJ1ZiA9IGRicHRyOwkJ CS8qIENvbnN0cnVjdGlvbiBwb2ludGVyICovCisJICBpID0gMDsKKwkgIHBidWZbaSsrXSA9ICdb JzsJCS8qIEludGVycHJldCB0aGUgc3RyaW5nIGludG8gaXQgKi8KKwkgIGZvciAoaiA9IDA7IGog PCBuICYmIGkgPCBtLTQ7IHArKyxqKyspIHsgLyogY2hhciBieSBjaGFyLi4uICovCisJICAgICAg aWYgKCpwID09IExGKSB7CisJCSAgaWYgKGkgPj0gbS00KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1 ZltpKytdID0gJzwnOworCQkgIHBidWZbaSsrXSA9ICdMJzsKKwkJICBwYnVmW2krK10gPSAnRic7 CisJCSAgcGJ1ZltpKytdID0gJz4nOworCQkgIGNvbnRpbnVlOworCSAgICAgIH0gZWxzZSBpZiAo KnAgPT0gQ1IpIHsKKwkJICBpZiAoaSA+PSBtLTQpCisJCSAgICBicmVhazsKKwkJICBwYnVmW2kr K10gPSAnPCc7CisJCSAgcGJ1ZltpKytdID0gJ0MnOworCQkgIHBidWZbaSsrXSA9ICdSJzsKKwkJ ICBwYnVmW2krK10gPSAnPic7CisJCSAgY29udGludWU7CisJICAgICAgfSBlbHNlIGlmICgqcCA9 PSBIVCkgeworCQkgIGlmIChpID49IG0tNSkKKwkJICAgIGJyZWFrOworCQkgIHBidWZbaSsrXSA9 ICc8JzsKKwkJICBwYnVmW2krK10gPSAnVCc7CisJCSAgcGJ1ZltpKytdID0gJ0EnOworCQkgIHBi dWZbaSsrXSA9ICdCJzsKKwkJICBwYnVmW2krK10gPSAnPic7CisJCSAgY29udGludWU7CisJICAg ICAgfSBlbHNlIGlmICgqcCkgeworCQkgIHBidWZbaSsrXSA9ICpwOworCQkgIGNvbnRpbnVlOwor CSAgICAgIH0gZWxzZSB7CisJCSAgaWYgKGkgPj0gbS01KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1 ZltpKytdID0gJzwnOworCQkgIHBidWZbaSsrXSA9ICdOJzsKKwkJICBwYnVmW2krK10gPSAnVSc7 CisJCSAgcGJ1ZltpKytdID0gJ0wnOworCQkgIHBidWZbaSsrXSA9ICc+JzsKKwkJICBjb250aW51 ZTsKKwkgICAgICB9CisJICB9CisJICBpZiAoaSA8IG0tMiAmJiAoKnAgfHwgY29udGQpKSB7CisJ ICAgICAgcGJ1ZltpKytdID0gJy4nOworCSAgICAgIHBidWZbaSsrXSA9ICcuJzsKKwkgIH0KKwkg IHBidWZbaSsrXSA9ICddJzsKKwkgIHBidWZbaV0gPSBOVUw7CisJICBpZiAoenNvdXQoWkRGSUxF LHMxKSA8IDApIHsKKwkgICAgICBkZWJsb2cgPSAwOworCSAgICAgIHpjbG9zZShaREZJTEUpOwor CSAgfQorCSAgaWYgKHpzb3V0bChaREZJTEUscGJ1ZikgPCAwKSB7CisJICAgICAgZGVibG9nID0g MDsKKwkgICAgICB6Y2xvc2UoWkRGSUxFKTsKKwkgIH0KKyNpZmRlZiBDS1NZU0xPRworCSAgaWYg KGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisJICAgICAgY2tzeXNsb2co U1lTTEdfREIsMSwiZGVidWciLHMxLHBidWYpOworCSAgfQorI2VuZGlmIC8qIENLU1lTTE9HICov CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRjEwMDogICAgICAgICAg ICAgICAgICAgICAgICAvKiA0LCAiczEiICovCisgICAgICAgIGlmICh6c291dGwoWkRGSUxFLHMx KSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRG SUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cg Pj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdf REIsMSwiZGVidWciLHMxLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAg LyogNSwgInMxPW4iICovCisgICAgICAgIHNwcmludGYoc3AsIiVzPSVzXG4iLHMxLGNrZnN0b2Eo bikpOworICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAg IGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lm ZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9n Z2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5V TEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7Cisg ICAgICBjYXNlIEYxMTA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNiwgInMxW3MyXSIgKi8K KyAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdXG4iLHMxLHMyKTsKKyAgICAgICAgaWYgKHpzb3V0 KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAg ICAgemNsb3NlKFpERklMRSk7CisgICAgICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBp ZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgIGNr c3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKKyAgICAgICAgfQorI2VuZGlm IC8qIENLU1lTTE9HICovCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMTExOiAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDcsICJzMVtzMl09biIgKi8KKyAgICAgICAgc3ByaW50ZihzcCwi JXNbJXNdPSVzXG4iLHMxLHMyLGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXQoWkRGSUxF LGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xv c2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hz eXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2co U1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tT WVNMT0cgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBzcHJpbnRm KHNwLCJcbj9JbnZhbGlkIGZvcm1hdCBmb3IgZGVidWcoKSAtICVkXG4iLGYpOworICAgICAgICBp ZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7Cisg ICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisg ICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAg ICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9 CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7CisgICAgfQorICB4ZGVidWc6 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1vbiBleGl0IHBvaW50ICovCisj aWZkZWYgT1MyCisgICAgaWYgKFN5c0luaXRlZCkKKwlSZWxlYXNlRGVidWdNdXRleCgpOworI2Vs c2UgLyogT1MyICovCisgICAgZGVibG9nID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyog UmVzdG9yZSB0aGlzICovCisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuKDApOworfQorCitp bnQKKyNpZmRlZiBDS19BTlNJQworZG9oZXhkdW1wKENIQVIgKm1zZywgQ0hBUiAqc3QsIGludCBj bnQpCisjZWxzZQorZG9oZXhkdW1wKG1zZyxzdCxjbnQpIENIQVIgKm1zZzsgQ0hBUiAqc3Q7IGlu dCBjbnQ7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvaGV4ZHVtcCAqLyB7CisgICAgaW50 IGkgPSAwLCBqID0gMCwgayA9IDA7CisgICAgY2hhciB0bXBbOF07CisjaWZkZWYgT1MyCisgICAg ZXh0ZXJuIGludCBTeXNJbml0ZWQ7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoIWRlYmxv ZykgcmV0dXJuKDApOwkJLyogSWYgbm8gZGVidWcgbG9nLCBkb24ndC4gKi8KKyAgICBpZiAoIWRi cHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVyICov CisgICAgICAgIGRicHRyID0gbWFsbG9jKERCVUZMKzEpOyAgICAgICAgLyogVGhpcyBvbmx5IGhh cHBlbnMgb25jZSAqLworICAgICAgICBpZiAoIWRicHRyKSB7CisgICAgICAgICAgICBkZWJsb2cg PSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgICAgICByZXR1cm4oMCk7 CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoU3lzSW5pdGVkKSB7CisJ aWYgKFJlcXVlc3REZWJ1Z011dGV4KDMwMDAwKSkKKwkgICAgZ290byB4ZGVidWc7CisgICAgfQor I2Vsc2UgLyogT1MyICovCisgICAgZGVibG9nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg LyogUHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAg IGlmIChtc2cgIT0gTlVMTCkgeworCWNrbWFreG1zZyhkYnB0ciwKKwkJICBEQlVGTCwKKwkJICAi SEVYRFVNUDogIiwKKwkJICAoY2hhciAqKW1zZywKKwkJICAiICgiLAorCQkgIGNraXRvYShjbnQp LAorCQkgICIgYnl0ZXMpXG4iLAorCQkgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5V TEwKKwkJICk7CisgICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAg ICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworCSAgICBnb3Rv IHhkZWJ1ZzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisJY2ttYWttc2coZGJwdHIsCisJCSBE QlVGTCwKKwkJICJIRVhEVU1QOiAoIiwKKwkJIGNraXRvYShjbnQpLAorCQkgIiBieXRlcylcbiIs CisJCSBOVUxMCisJCSApOworICAgICAgICB6c291dChaREZJTEUsZGJwdHIpOworICAgICAgICBp ZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7Cisg ICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKwkgICAgZ290byB4ZGVidWc7CisgICAgICAgIH0K KyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7CisgICAgICAgIGRicHRyWzBd ID0gJ1wwJzsKKyAgICAgICAgZm9yIChqID0gMCA7IChqIDwgMTYpOyBqKyspIHsKKyAgICAgICAg ICAgIGlmICgoaSArIGopIDwgY250KQorCSAgICAgIHNwcmludGYodG1wLAorCQkgICAgICAiJXMl MDJ4ICIsCisJCSAgICAgIChqID09IDggPyAifCAiIDogIiIpLAorCQkgICAgICAoQ0hBUikgc3Rb aSArIGpdCisJCSAgICAgICk7CisgICAgICAgICAgICBlbHNlCisJICAgICAgc3ByaW50Zih0bXAs CisJCSAgICAgICIlcyAgICIsCisJCSAgICAgIChqID09IDggPyAifCAiIDogIiIpCisJCSAgICAg ICk7CisgICAgICAgICAgICBja3N0cm5jYXQoZGJwdHIsdG1wLERCVUZMKzEpOworICAgICAgICB9 CisgICAgICAgIGNrc3RybmNhdChkYnB0ciwiICIsREJVRkwrMSk7CisgICAgICAgIGZvciAoayA9 IDA7IChrIDwgMTYpICYmICgoaSArIGspIDwgY250KTsgaysrKSB7CisgICAgICAgICAgICBzcHJp bnRmKHRtcCwKKyAgICAgICAgICAgICAgICAgICAgIiVzJWMiLAorICAgICAgICAgICAgICAgICAg ICAoayA9PSA4ID8gIiAiIDogIiIpLAorICAgICAgICAgICAgICAgICAgICBpc3ByaW50KHN0W2kg KyBrXSkgPyBzdFtpICsga10gOiAnLicKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIGNrc3RybmNhdChkYnB0cix0bXAsREJVRkwrMSk7CisgICAgICAgIH0KKyAgICAgICAgY2tz dHJuY2F0KGRicHRyLCJcbiIsREJVRkwrMSk7CisgICAgICAgIGkgKz0gaiAtIDE7CisgICAgICAg IGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsK KyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICAgICAg fQorICAgIH0gLyogZW5kIGZvciAqLworCisKKyAgeGRlYnVnOgorI2lmZGVmIE9TMgorICAgIGlm IChTeXNJbml0ZWQpCisgICAgICBSZWxlYXNlRGVidWdNdXRleCgpOworI2Vsc2UgLyogT1MyICov CisgICAgZGVibG9nID0gMTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm4oMCk7Cit9Cisj ZW5kaWYgLyogREVCVUcgKi8KKworLyogIFNlc3Npb24gTG9nLi4uICovCisKK2ludCB0c3N0YXRl ID0gMDsKKworVk9JRAorI2lmZGVmIE9TMgorbG9nY2hhcih1bnNpZ25lZCBzaG9ydCBjKQorI2Vs c2UgLyogT1MyICovCisjaWZkZWYgQ0tfQU5TSUMKK2xvZ2NoYXIoY2hhciBjKQorI2Vsc2UKK2xv Z2NoYXIoYykgY2hhciBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1MyICov CisvKiBsb2djaGFyICovIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9nIGNoYXJhY3Rl ciBjIHRvIHNlc3Npb24gbG9nICovCisgICAgZXh0ZXJuIGludCBzbG9nbnVsOworICAgIGludCBv a3RvbG9nID0gMDsKKyNpZm5kZWYgTk9MT0NBTAorICAgIGlmICghc2VzbG9nKQorICAgICAgcmV0 dXJuOworCisgICAgaWYgKChzZXNzZnQgIT0gWFlGVF9UKSB8fCAoCisjaWZkZWYgVU5JWAorCSBj ICE9ICdccicgJiYKKyNlbHNlCisjaWZkZWYgZGF0YWdlbmVyYWwKKwkgYyAhPSAnXHInICYmCisj ZWxzZQorI2lmZGVmIFNUUkFUVVMKKwkgYyAhPSAnXHInICYmCisjZWxzZQorI2lmZGVmIEFNSUdB CisJIGMgIT0gJ1xyJyAmJgorI2Vsc2UKKyNpZmRlZiBHRU1ET1MKKwkgYyAhPSAnXHInICYmCisj ZW5kaWYgLyogR0VNRE9TICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyNlbmRpZiAvKiBTVFJBVFVT ICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYg T1NLCisJIGMgIT0gJ1xuJyAmJgorI2Vsc2UKKyNpZmRlZiBNQUMKKwkgYyAhPSAnXG4nICYmCisj ZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogT1NLICovCisJIGMgIT0gWE9OICYmCisJIGMgIT0g WE9GRikpCisgICAgICBva3RvbG9nID0gMTsKKyAgICBpZiAoYyA9PSAnXDAnICYmICFzZXNzZnQp CQkvKiBOVUwgaW4gdGV4dCBtb2RlICovCisgICAgICBpZiAoc2xvZ251bCkgb2t0b2xvZyA9IDE7 CQkvKiBvbmx5IGlmIHBhZGRpbmcgKDIwMDkvMTAvMjIpICovCisgICAgaWYgKCFva3RvbG9nKQor ICAgICAgcmV0dXJuOworICAgIGlmIChzbG9ndHMpIHsJCQkvKiBMb2cgaXMgdGltZXN0YW1wZWQg Ki8KKwlpZiAodHNzdGF0ZSA9PSAwKSB7CQkvKiBTdGF0ZSA9IGJldHdlZW4tbGluZXMgKi8KKwkg ICAgY2hhciAqIHA7CQkJLyogenN0aW1lKCkgcG9pbnRlciAqLworCSAgICBjaGFyIHRzWzQ4XTsJ CS8qIHRpbWVzdGFtcCBidWZmZXIgKi8KKwkgICAgenRpbWUoJnApOwkJCS8qIEdldCBhc2N0aW1l KCkgc3RyaW5nICovCisJICAgIGNrc3RybmNweSh0cyxwLDMyKTsJCS8qIE1ha2Ugc2FmZSBjb3B5 ICovCisJICAgIGlmICh6dG1zZWMgPiAtMUwpIHsJCS8qIEFkZCBtc2VjcyBpZiB3ZSBoYXZlIHRo ZW0gKi8KKwkJc3ByaW50ZigmdHNbMTldLCIuJTAzbGQ6ICIsenRtc2VjKTsgLyogU0FGRSAqLwor CSAgICB9IGVsc2UgeworCQl0c1sxOV0gPSAnOic7CisJCXRzWzIwXSA9IFNQOworCQl0c1syMV0g PSBOVUw7CisJICAgIH0KKwkgICAgaWYgKHpzb3V0KFpTRklMRSwmdHNbMTFdKSA8IDApCisJICAg ICAgZ290byB4bG9nY2hhcjsKKwl9CisgICAgfQorICAgIGlmIChjID09ICdcbicpCQkJLyogQXQg ZW5kIG9mIGxpbmU/ICovCisgICAgICB0c3N0YXRlID0gMDsJCQkvKiB5ZXMgKi8KKyAgICBlbHNl CisgICAgICB0c3N0YXRlID0gMTsJCQkvKiBubyAqLworICAgIGlmICh6Y2hvdXQoWlNGSUxFLChD SEFSKShjICYgMHhGRikpIDwgMCkgLyogTG9nIHRoZSBjaGFyYWN0ZXIgKi8KKyAgICAgIGdvdG8g eGxvZ2NoYXI7CisgICAgaWYgKHRzc3RhdGUgPT0gMCAmJiBzbG9nbnVsICE9IDApIHsJLyogTnVs bC10ZXJtaW5hdGluZyBsaW5lcz8gKi8KKwlpZiAoemNob3V0KFpTRklMRSwoQ0hBUikwKSA8IDAp CS8qIEFkZCBhIE5VTCAqLworCSAgZ290byB4bG9nY2hhcjsKKyAgICB9CisgICAgcmV0dXJuOwor CisgIHhsb2djaGFyOgorICAgIGNvbm9sbCgiIik7CisgICAgY29ub2xsKCJFUlJPUiBXUklUSU5H IFNFU1NJT04gTE9HLCBMT0cgQ0xPU0VEISIpOworICAgIHNldHNlc2xvZygwKTsKKyAgICB6Y2xv c2UoWlNGSUxFKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCit9CisKK1ZPSUQKK2xvZ3N0cihzLCBs ZW4pIGNoYXIgKiBzOyBpbnQgbGVuOyB7ICAgICAvKiBMb2cgc3RyaW5nIHRvIHNlc3Npb24gbG9n ICovCisjaWZuZGVmIE5PTE9DQUwKKyAgICBpbnQgbiA9IDA7CisgICAgaWYgKCFzKQorICAgICAg cmV0dXJuOworICAgIHdoaWxlIChzZXNsb2cgJiYgKG4gPCBsZW4pKQorICAgICAgbG9nY2hhcihz W24rK10pOworI2VuZGlmIC8qIE5PTE9DQUwgKi8KK30KKworI2lmZGVmIENLX0NVUlNFUworaW50 Citja19yZXBhaW50KCkgeworICAgIHJlcGFpbnQgPSAxOworICAgIHJldHVybigwKTsKK30KKwor I2lmZGVmIFNUUkFUVVMKKy8qIFZPUyBoYXMgY3Vyc2VzIGJ1dCBubyB0Z2V0ZW50KCkgKi8KK2lu dAordGdldGVudChzMSwgczIpIGNoYXIgKiBzMSwgKiBzMjsgeworICAgIHJldHVybigxKTsKK30K KyNlbmRpZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBWTVMKKyNpZmRlZiBfX0RFQ0MKK19QUk9U T1RZUChpbnQgdGdldGVudCwoY2hhciAqLCBjaGFyICopKTsKKyNlbmRpZiAvKiBfX0RFQ0MgKi8K KyNlbmRpZiAvKiBWTVMgKi8KKworLyoKKyAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB3YXlz IHRvIGRvIGZ1bGxzY3JlZW4gb24gVk1TLgorICAxLiBVc2UgdGhlIHJlYWwgY3Vyc2VzIGxpYnJh cnksIFZBWENDVVJTRS4KKyAgMi4gVXNlIGRvLWl0LXlvdXJzZWxmIGNvZGUuCisgIDMuIFVzZSB0 aGUgU2NyZWVuIE1hbmFnZXIsIFNNRyQuCisKKyAgTWV0aG9kIDEgZG9lc24ndCB3b3JrIHF1aXRl IHJpZ2h0OyB5b3UgY2FuJ3QgY2FsbCBlbmR3aW4oKSwgc28gb25jZSB5b3UndmUKKyAgc3RhcnRl ZCBjdXJzZXMgbW9kZSwgeW91IGNhbiBuZXZlciBsZWF2ZS4KKworICBNZXRob2QgMiBkb2Vzbid0 IG9wdGltaXplIHRoZSBzY3JlZW4sIGFuZCBzbyBtdWNoIG1vcmUgdGltZSBpcyBzcGVudCBpbgor ICBzY3JlZW4gd3JpdGVzLiAgVGhpcyBhY3R1YWxseSBjYXVzZXMgZmlsZSB0cmFuc2ZlcnMgdG8g ZmFpbCBiZWNhdXNlIHRoZQorICB0dHkgZGV2aWNlIGlucHV0IGJ1ZmZlciBjYW4gYmUgb3ZlcnJ1 biB3aGlsZSB0aGUgc2NyZWVuIGlzIGJlaW5nIHVwZGF0ZWQsCisgIGVzcGVjaWFsbHkgb24gYSBz bG93IE1pY3JvVkFYIHRoYXQgaGFzIHNtYWxsIHR5cGVhaGVhZCBidWZmZXJzLgorCisgIEluIHRo ZSBmb2xsb3dpbmcgI2lmZGVmIGJsb2NrLCAjZGVmaW5lIG9uZSBvZiB0aGVtIGFuZCAjdW5kZWYg dGhlIG90aGVyIDIuCisKKyAgU28gbm93IGxldCdzIHRyeSBtZXRob2QgMy4uLgorKi8KKyNpZmRl ZiBWTVMKKyNkZWZpbmUgQ0tfU01HICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTY3JlZW4g TWFuYWdlciAqLworI3VuZGVmIE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERv LWl0LXlvdXJzZWxmICovCisjdW5kZWYgVk1TQ1VSU0UgICAgICAgICAgICAgICAgICAgICAgICAg LyogVkFYQ0NVUlNFIGxpYnJhcnkgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKy8qCisgIEJ1dCBqdXN0 IGJlZm9yZSBOZXcgWWVhcnMsIDIwMDAsIHRoZSBTTUcgbGlicmFyeSBzZWVtZWQgdG8gYnJlYWsg b24KKyAgYm90aCBWTVMgc3lzdGVtcyB3ZSBoYXZlIGhlcmUgKGFuIEFscGhhIHdpdGggVk1TIDcu MSBhbmQgYSBWQVggd2l0aCA1LjUpLgorICBTbyBiYWNrIHRvIE1ZQ1VSU0VTLCB3aGljaCB3b3Jr cyBmaW5lLgorKi8KKyNpZmRlZiBWTVMKKyN1bmRlZiBDS19TTUcKKyNkZWZpbmUgTVlDVVJTRVMK KyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIE1ZQ1VSU0VTCisjZGVmaW5lIHN0ZHNjciAwCisj aWZkZWYgQ0tfV1JFRlJFU0gKKyN1bmRlZiBDS19XUkVGUkVTSAorI2VuZGlmIC8qIENLX1dSRUZS RVNIICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKworLyogIFMgQyBSIEUgRSBOIEMgIC0tICBT Y3JlZW4gZGlzcGxheSBmdW5jdGlvbiwgdXNlcyBjdXJzZXMgICovCisKKy8qIElkZWEgZm9yIGN1 cnNlcyBkaXNwbGF5IGNvbnRyaWJ1dGVkIGJ5IENocmlzIFByYXR0IG9mIEFQViBCYWtlciwgVUsg Ki8KKworLyogQXZvaWQgY29uZmljdHMgd2l0aCBjdXJzZXMuaCAqLworCisjaWZkZWYgUU5YCisv KiBTYW1lIGFzIGNrY2FzYy5oLCBidXQgaW4gYSBkaWZmZXJlbnQgcmFkaXguLi4gKi8KKyNpZmRl ZiBFU0MKKyN1bmRlZiBFU0MKKyNlbmRpZiAvKiBFU0MgKi8KKyNlbmRpZiAvKiBRTlggKi8KKwor I2lmbmRlZiBNWUNVUlNFUworI3VuZGVmIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFRoaXMgd2FzIGRlZmluZWQgaW4gY2tjZGViLmggKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAq LworCisjdW5kZWYgQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2Ugd2Vy ZSBkZWZpbmVkIGluIGNrY2FzYy5oICovCisjdW5kZWYgQ1IKKyN1bmRlZiBOTAorI3VuZGVmIFNP CisjaWZkZWYgVVMKKyN1bmRlZiBVUworI2VuZGlmCS8qIFVTICovCisjdW5kZWYgU1AgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlZCBpbiBuY3Vyc2VzICovCisjZGVmaW5lIENI Ul9TUCAzMiAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlIHRoaXMgaW5zdGVhZCAqLworCisj aWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVk1TIGZ1bGxzY3JlZW4g ZGlzcGxheSAqLworI2lmZGVmIE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERv LWl0LXlvdXJzZWxmIG1ldGhvZCAqLworZXh0ZXJuIGludCBpc3Z0NTI7ICAgICAgICAgICAgICAg ICAgICAgIC8qIEZyb20gQ0tWVElPLkMgKi8KKyNkZWZpbmUgcHJpbnR3IHByaW50ZgorI2Vsc2UK KyNpZmRlZiBWTVNDVVJTRSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgY3Vyc2VzIGxp YnJhcnkgVkFYQ0NVUlNFICovCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisvKiBOb3RlOiBTY3JlZW4g bWFuYWdlciBkb2Vzbid0IG5lZWQgYSBoZWFkZXIgZmlsZSAqLworI2VuZGlmIC8qIFZNU0NVUlNF ICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBOb3QgVk1TICovCisjaWZkZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRG8taXQteW91cnNlbGYgbWV0aG9kICovCisjZGVmaW5lIGlzdnQ1MiAwICAg ICAgICAgICAgICAgICAgICAgICAgLyogVXNlZCBieSBPUy8yLCBWVC0xMDAvQU5TSSBhbHdheXMg Ki8KKyNpZmRlZiBDS1hQUklOVEYKKyNkZWZpbmUgcHJpbnR3IGNreHByaW50ZgorI2Vsc2UgLyog Q0tYUFJJTlRGICovCisjaWZkZWYgS1VJCisjZGVmaW5lIHByaW50dyBWc2NybnByaW50dworI2Vs c2UgLyogS1VJICovCisjZGVmaW5lIHByaW50dyBwcmludGYKKyNlbmRpZiAvKiBLVUkgKi8KKyNl bmRpZiAvKiBDS1hQUklOVEYgKi8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBVc2UgcmVhbCBjdXJzZXMgKi8KKyNpZmRlZiBDS19OQ1VSU0VTICAgICAgICAgICAg ICAgICAgICAgICAvKiBvciBuY3Vyc2VzLi4uICovCisjaWZkZWYgQ0tYUFJJTlRGICAgICAgICAg ICAgICAgICAgICAgICAgLyogT3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLworI3Vu ZGVmIHByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSBvZiAicHJpbnRmIiBp biBuY3Vyc2VzLmggKi8KKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNpbmNsdWRlIDxuY3Vyc2Vz Lmg+CisjaWZkZWYgQ0tYUFJJTlRGCisjZGVmaW5lIHByaW50ZiBja3hwcmludGYKKyNlbmRpZiAv KiBDS1hQUklOVEYgKi8KKyNlbHNlICAvKiBOb3QgbmN1cnNlcyAqLworI2lmZGVmIENLWFBSSU5U RiAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdp dGggKi8KKyN1bmRlZiBwcmludGYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2Ugb2Yg InByaW50ZiIgaW4gY3Vyc2VzLmggKi8KKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNpZmRlZiBN X1hFTklYCQkJCS8qIFNDTyBYRU5JWC4uLiAqLworI2lmZGVmIE1fVEVSTUNBUAorI3VuZGVmIE1f VEVSTUNBUAorI2VuZGlmIC8qIE1fVEVSTUNBUCAqLworI2lmbmRlZiBNX1RFUk1JTkZPCisjZGVm aW5lIE1fVEVSTUlORk8KKyNlbmRpZiAvKiBNX1RFUk1JTkZPICovCisjZW5kaWYgLyogTV9YRU5J WCAqLworI2lmZGVmIFJUQUlYCisjdW5kZWYgTkxTCQkJCS8qIEF2b2lkICdyZWRlY2xhcmF0aW9u IG9mIGZyZWUnLiAqLworI2VuZGlmIC8qIFJUQUlYICovCisjaW5jbHVkZSA8Y3Vyc2VzLmg+Cisj aWZkZWYgQ0tYUFJJTlRGCisjZGVmaW5lIHByaW50ZiBja3hwcmludGYKKyNlbmRpZiAvKiBDS1hQ UklOVEYgKi8KKyNlbmRpZiAvKiBDS19OQ1VSU0VTICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8K KyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIEJVRzk5OQorX1BST1RPVFlQKGludCB0Z2V0ZW50 LChjaGFyICosIGNoYXIgKikpOworX1BST1RPVFlQKGNoYXIgKnRnZXRzdHIsKGNoYXIgKiwgY2hh ciAqKikpOworX1BST1RPVFlQKGludCB0cHV0cywoY2hhciAqLCBpbnQsIGludCAoKikoKSkpOwor X1BST1RPVFlQKGNoYXIgKnRnb3RvLChjb25zdCBjaGFyICosIGludCwgaW50KSk7CisjZW5kaWYJ LyogQlVHOTk5ICovCisjaWZkZWYgbGludXgKKyNpbmNsdWRlIDx0ZXJtLmg+CisjZW5kaWYKKwor I2VuZGlmIC8qIENLX0NVUlNFUyAqLworCisvKiAgRiBYIEQgSSBOIEkgVCAgLS0gIEZpbGUgWGZl ciBEaXNwbGF5IEluaXRpYWxpemF0aW9uICAqLworCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZuZGVm IE1ZQ1VSU0VTCisjaWZuZGVmIENLX1NNRworc3RhdGljCisjaWZkZWYgQ0tfQU5TSUMKKy8qIENh bid0IHVzZSBWT0lEIGJlY2F1c2Ugb2YgY3Vyc2VzLmggKi8KK3ZvaWQKK2NrX3Rlcm1zZXQoaW50 KTsKKyNlbHNlCitja190ZXJtc2V0KCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAv KiBDS19TTUcgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworI2VuZGlmIC8qIENLX0NVUlNFUyAq LworCisjaWZkZWYgTk9URVJNQ0FQCitzdGF0aWMgaW50IG5vdGVybWNhcCA9IDE7CisjZWxzZQor c3RhdGljIGludCBub3Rlcm1jYXAgPSAwOworI2VuZGlmIC8qIE5PVEVSTUNBUCAqLworCisjaWZu ZGVmIE5PRElTUExBWQorQ0tWT0lECitmeGRpbml0KHhkaXNwbGEpIGludCB4ZGlzcGxhOyB7Cisj aWZuZGVmIENPSEVSRU5UCisjaWZuZGVmIE9TMgorI2lmbmRlZiBTVFJBVFVTCisgICAgY2hhciAq czsKKyAgICBpbnQgeCwgZHVtbXk7CisKKyAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IHhkaXNwbGEi LCIiLHhkaXNwbGEpOworICAgIGRlYnVnKEYxMDEsImZ4ZGluaXQgZnhkX2luaXRlZCIsIiIsZnhk X2luaXRlZCk7CisKKyNpZmRlZiBJS1NECisjaWZuZGVmIE5PWEZFUgorICAgIC8qIE5vIGN1cnNl cyBmb3IgSUtTRCAqLworICAgIGlmIChpbnNlcnZlcikgeworICAgICAgICBmZGlzcGxhID0gWFlG RF9OOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmeGRfaW5pdGVkKSAgICAgICAg ICAgICAgICAgICAgIC8qIE9ubHkgZG8gdGhpcyBvbmNlICovCisgICAgICByZXR1cm47CisjZW5k aWYgLyogTk9YRkVSICovCisjZW5kaWYgLyogSUtTRCAqLworCisgICAgaWYgKHhkaXNwbGEgPT0g WFlGRF9SIHx8IHhkaXNwbGEgPT0gWFlGRF9TIHx8IHhkaXNwbGEgPT0gWFlGRF9CKSB7CisJaWYg KHhmcm1zZykgeworCSAgICBwcmludGYoIiVzXG4iLHhmcm1zZyk7CisJICAgIG1ha2VzdHIoJnhm cm1zZyxOVUxMKTsKKwl9CisgICAgfQorCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZkZWYgVk1TCisg ICAgLyogRm9yY2UgQlJJRUYgaW4gQmF0Y2ggbG9ncyAqLworICAgIGlmIChiYXRjaCAmJiAoeGRp c3BsYSA9PSBYWUZEX0MgfHwgeGRpc3BsYSA9PSBYWUZEX1MpKQorICAgICAgeGRpc3BsYSA9IFhZ RkRfQjsKKyNlbHNlCisgICAgaWYgKHhkaXNwbGEgPT0gWFlGRF9DIHx8IHhkaXNwbGEgPT0gOTk5 OSkgeworCisjaWZkZWYgRFlOQU1JQworICAgICAgICBpZiAoIXRybWJ1ZikgeworLyoKKyAgQWxs b2NhdGUgdGdldGVudCgpIGJ1ZmZlci4gIE1ha2UgaXQgYmlnIC0tIHNvbWUgdGVybWNhcHMgY2Fu IGJlIGh1Z2U7CisgIHRnZXRlbnQoKSBtZXJyaWx5IHdyaXRlcyBwYXN0IHRoZSBlbmQgb2YgdGhl IGJ1ZmZlciwgY2F1c2luZyBjb3JlIGR1bXBzCisgIG9yIHdvcnNlLgorKi8KKyAgICAgICAgICAg IHRybWJ1ZiA9IChjaGFyICopbWFsbG9jKFRSTUJVRkwpOworICAgICAgICAgICAgaWYgKCF0cm1i dWYpIHsKKyAgICAgICAgICAgICAgICBub3Rlcm1jYXAgPSAxOworICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsImZ4ZGluaXQgbWFsbG9jIHRybWJ1ZiIsIkZBSUxFRCIsVFJNQlVGTCk7CisgICAg ICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgZGVidWcoRjExMSwiZnhk aW5pdCBtYWxsb2MgdHJtYnVmIiwiT0siLFRSTUJVRkwpOworICAgICAgICAgICAgZGVidWcoRjAw MSwiZnhkaW5pdCB0cm1idWYiLCIiLHRybWJ1Zik7CisgICAgICAgICAgICBtZW1zZXQodHJtYnVm LCdcMCcsKHNpemVfdClUUk1CVUZMKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImZ4ZGluaXQg bWVtc2V0IE9LIiwiIiwwKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0KKyNlbmRp ZiAvKiBEWU5BTUlDICovCisKKyAgICAgICAgZGVidWcoRjEwMCwiZnhkaW5pdCBiZWZvcmUgZ2V0 ZW52KFRFUk0pIiwiIiwwKTsKKyAgICAgICAgcyA9IGdldGVudigiVEVSTSIpOworICAgICAgICBk ZWJ1ZyhGMTEwLCJmeGRpbml0IGFmdGVyIGdldGVudihURVJNKSIscywwKTsKKyAgICAgICAgaWYg KCFzKSBzID0gIiI7CisgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgZGVidWcoRjExMCwi ZnhkaW5pdCBiZWZvcmUgdGdldGVudCgpIixzLDApOworICAgICAgICAgICAgeCA9IHRnZXRlbnQo dHJtYnVmLHMpOworICAgICAgICAgICAgZGVidWcoRjExMSwiZnhkaW5pdCB0Z2V0ZW50IixzLHgp OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgICBub3Rl cm1jYXAgPSAxOworICAgICAgICAgICAgZGVidWcoRjExMCwiZnhkaW5pdCBURVJNIG51bGwgLSBu byB0Z2V0ZW50IixzLDApOworICAgICAgICB9CisgICAgICAgIGlmICh4IDwgMSAmJiAhcXVpZXQg JiYgIWJhY2tncmQKKyNpZmRlZiBWTVMKKyAgICAgICAgICAgICYmICFiYXRjaAorI2VuZGlmIC8q IFZNUyAqLworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBwcmludGYoIldhcm5pbmc6IHRl cm1pbmFsIHR5cGUgdW5rbm93bjogXCIlc1wiXG4iLHMpOworI2lmZGVmIENPTU1FTlQKKwkgICAg LyogQ29uZnVzaW5nIC0gbm9ib2R5IGtub3dzIHdoYXQgdGhpcyBtZWFucyAqLworICAgICAgICAg ICAgcHJpbnRmKCJTQ1JFRU4gY29tbWFuZCB3aWxsIHVzZSBBTlNJIHNlcXVlbmNlcy5cbiIpOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGlmIChsb2NhbCkKKyAgICAgICAgICAg ICAgcHJpbnRmKCJGdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBkaXNhYmxlZC5cbiIp OworICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsKKyAgICAgICAgfQorI2lmbmRlZiBNWUNV UlNFUworI2lmbmRlZiBDS19TTUcKKyAgICAgICAgY2tfdGVybXNldCh4KTsKKyNlbmRpZiAvKiBD S19TTUcgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworICAgICAgICBmeGRfaW5pdGVkID0gMTsK KyAgICB9CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYg LyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENPSEVSRU5UICovCit9 CisjZW5kaWYgLyogTk9ESVNQTEFZICovCisKKyNpZmRlZiBDS19DVVJTRVMKKyNpZmRlZiBDS19T TUcKKy8qCisgIExvbmcgc2VjdGlvbiBmb3IgU2NyZWVuIE1hbmFnZXIgc3RhcnRzIGhlcmUuLi4K KyAgQnkgV2lsbGlhbSBCYWRlci4KKyovCisjaW5jbHVkZSAiY2t2dm1zLmgiCisjaWZkZWYgT0xE X1ZNUworI2luY2x1ZGUgPHNtZ2RlZi5oPiAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSB0aGlz IG9uIFZBWCBDIDIuNCAqLworLyogI2luY2x1ZGUgPHNtZ21zZy5oPiAqLworI2Vsc2UKKyNpbmNs dWRlIDxzbWckcm91dGluZXMuaD4gICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCisj ZW5kaWYgLyogT0xEX1ZNUyAqLworCitleHRlcm4gdW5zaWduZWQgaW50IHZtc19zdGF0dXM7ICAg ICAvKiBVc2VkIGZvciBzeXN0ZW0gc2VydmljZSByZXR1cm4gc3RhdHVzICovCisKK3N0YXRpYyBs b25nIHNtZ19wYXN0ZWJvYXJkX2lkID0gLTE7ICAgICAvKiBwYXN0ZWJvYXJkIGlkZW50aWZpZXIg Ki8KK3N0YXRpYyBsb25nIHNtZ19kaXNwbGF5X2lkID0gLTE7ICAgICAgICAvKiBkaXNwbGF5IGlk ZW50aWZpZXIgKi8KK3N0YXRpYyBpbnQgc21nX29wZW4gPSAwOyAgICAgICAgICAgICAgICAvKiBm bGFnIGlmIHNtZyBjdXJyZW50IG9wZW4gKi8KK3N0YXRpYyBpbnQgc21nX2luaXRlZCA9IDA7ICAg ICAgICAgICAgICAvKiBmbGFnIGlmIHNtZyBpbml0aWFsaXplZCAqLworCisjaWZkZWYgQ09NTUVO VAorI2RlZmluZSBjbHJ0b2VvbCgpICAgICAgU01HJEVSQVNFX0xJTkUoJnNtZ19kaXNwbGF5X2lk LCAwLCAwKQorCisjZGVmaW5lIGNsZWFyKCkgICAgICAgICBTTUckRVJBU0VfRElTUExBWSgmc21n X2Rpc3BsYXlfaWQsIDAsIDAsIDAsIDApCisKKyNkZWZpbmUgdG91Y2h3aW4oc2NyKSAgIFNNRyRS RVBBSU5UX1NDUkVFTigmc21nX3Bhc3RlYm9hcmRfaWQpCisKKyNlbHNlICAvKiBOb3QgQ09NTUVO VCAqLworCisjZGVmaW5lIGNscnRvZW9sKCkgICAgICBzbWckZXJhc2VfbGluZSgmc21nX2Rpc3Bs YXlfaWQsIDAsIDApCisKKyNkZWZpbmUgY2xlYXIoKSAgICAgICAgIHNtZyRlcmFzZV9kaXNwbGF5 KCZzbWdfZGlzcGxheV9pZCwgMCwgMCwgMCwgMCkKKworI2RlZmluZSB0b3VjaHdpbihzY3IpICAg c21nJHJlcGFpbnRfc2NyZWVuKCZzbWdfcGFzdGVib2FyZF9pZCkKKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKyNkZWZpbmUgY2xlYXJvayhjdXJzY3Isb2spICAgICAgICAgICAgICAvKiBMZXQgd3Jl ZnJlc2goKSBkbyB0aGUgd29yayAqLworCisjZGVmaW5lIHdyZWZyZXNoKGN1cnNyYykgdG91Y2h3 aW4oc2NyKQorCitzdGF0aWMgdm9pZAorbW92ZShyb3csIGNvbCkgaW50IHJvdywgY29sOyB7Cisg ICAgLyogQ2hhbmdlIGZyb20gMC1iYXNlZCBmb3IgY3Vyc2VzIHRvIDEtYmFzZWQgZm9yIFNNRyAq LworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm47CisgICAgKytyb3c7ICsrY29sOwor ICAgIGRlYnVnKEYxMTEsIlZNUyBzbWcgbW92ZSIsY2tpdG9hKHJvdyksY29sKTsKKyNpZmRlZiBD T01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCisgICAg Q0hFQ0tfRVJSKCJtb3ZlOiBzbWckc2V0X2N1cnNvcl9hYnMiLAorICAgICAgICAgICAgICBTTUck U0VUX0NVUlNPUl9BQlMoJnNtZ19kaXNwbGF5X2lkLCAmcm93LCAmY29sKSk7CisjZWxzZQorICAg IENIRUNLX0VSUigibW92ZTogc21nJHNldF9jdXJzb3JfYWJzIiwKKyAgICAgICAgICAgICAgc21n JHNldF9jdXJzb3JfYWJzKCZzbWdfZGlzcGxheV9pZCwgJnJvdywgJmNvbCkpOworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIG1vdmUgdm1zX3N0YXR1cyIsIiIs dm1zX3N0YXR1cyk7Cit9CisKKyNpZmRlZiBWTVNfVjQwCisjZGVmaW5lIE9MRF9WTVMKKyNlbmRp ZiAvKiBWTVNfVjQwICovCisjaWZkZWYgVk1TX1Y0MgorI2RlZmluZSBPTERfVk1TCisjZW5kaWYg LyogVk1TX1Y0MiAqLworI2lmZGVmIFZNU19WNDQKKyNkZWZpbmUgT0xEX1ZNUworI2VuZGlmIC8q IFZNU19WNDQgKi8KKworc3RhdGljIGludAoraW5pdHNjcigpIHsKKyAgICBpbnQgcm93cyA9IDI0 LCBjb2xzID0gODA7CisgICAgaW50IHJvdyA9IDEsIGNvbCA9IDE7CisKKyAgICBkZWJ1ZyhGMTAx LCJWTVMgaW5pdHNjciBzbWdfcGFzdGVib2FyZF9pZCBBIiwiIixzbWdfcGFzdGVib2FyZF9pZCk7 CisKKyAgICBpZiAoc21nX3Bhc3RlYm9hcmRfaWQgPT0gLTEpIHsgLyogT3BlbiB0aGUgc2NyZWVu ICovCisjaWZkZWYgT0xEX1ZNUyAgICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IFJvdXRpbmUg Y2FsbHMgbG93ZXJjYXNlZCA5Lzk2ICovCisgICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21n JGNyZWF0ZV9wYXN0ZWJvYXJkIiwKKyAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfcGFzdGVi b2FyZCgmc21nX3Bhc3RlYm9hcmRfaWQsIDAsIDAsIDAsIDApKTsKKyNlbHNlCisgICAgICAgIC8q IEZvciBWTVMgVjUsIG5vdCB0ZXN0ZWQgKi8KKyAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBz bWckY3JlYXRlX3Bhc3RlYm9hcmQiLAorICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV9wYXN0 ZWJvYXJkKCZzbWdfcGFzdGVib2FyZF9pZCwgMCwgMCwgMCwgMCwgMCkpOworI2VuZGlmIC8qIE9M RF9WTVMgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX3Bhc3RlYm9h cmRfaWQgQiIsIiIsc21nX3Bhc3RlYm9hcmRfaWQpOworICAgIGlmIChzbWdfcGFzdGVib2FyZF9p ZCA9PSAtMSkgeworCXByaW50ZigiP0Vycm9yIGluaXRpYWxpemluZyBmdWxsc2NyZWVuIGRpc3Bs YXlcbiIpOworCWZkaXNwbGEgPSBYWUZEX1M7CisJZHB5aW5pdCgpOworCXJldHVybigwKTsKKyAg ICB9CisgICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX2Rpc3BsYXlfaWQiLCIiLHNtZ19k aXNwbGF5X2lkKTsKKyAgICBpZiAoc21nX2Rpc3BsYXlfaWQgPT0gLTEpIHsgICAgICAgICAvKiBD cmVhdGUgYSBkaXNwbGF5IHdpbmRvdyAqLworCisjaWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLworICAgICAgICBDSEVDS19FUlIoImluaXRz Y3I6IHNtZyRjcmVhdGVfdmlydHVhbF9kaXNwbGF5IiwKKyAgICAgICAgICAgICAgICAgIFNNRyRD UkVBVEVfVklSVFVBTF9ESVNQTEFZKCZyb3dzLCAmY29scywgJnNtZ19kaXNwbGF5X2lkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCkpOworCisg ICAgICAgIC8qIENvbm5lY3QgdGhlIGRpc3BsYXkgd2luZG93IHRvIHRoZSBzY3JlZW4gKi8KKyAg ICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5IiwKKyAg ICAgICAgICAgICAgICAgIFNNRyRQQVNURV9WSVJUVUFMX0RJU1BMQVkoJnNtZ19kaXNwbGF5X2lk LCZzbWdfcGFzdGVib2FyZF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnJvdywmY29sKSk7CisjZWxzZQorICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6 IHNtZyRjcmVhdGVfdmlydHVhbF9kaXNwbGF5IiwKKyAgICAgICAgICAgICAgICAgIHNtZyRjcmVh dGVfdmlydHVhbF9kaXNwbGF5KCZyb3dzLCAmY29scywgJnNtZ19kaXNwbGF5X2lkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCkpOworCisgICAg ICAgIC8qIENvbm5lY3QgdGhlIGRpc3BsYXkgd2luZG93IHRvIHRoZSBzY3JlZW4gKi8KKyAgICAg ICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5IiwKKyAgICAg ICAgICAgICAgICAgIHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkoJnNtZ19kaXNwbGF5X2lkLCZz bWdfcGFzdGVib2FyZF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnJvdywmY29sKSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0KKyAgICBkZWJ1 ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfb3BlbiBBIiwiIixzbWdfb3Blbik7CisgICAgaWYgKCFz bWdfb3BlbikgeyAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgYSBiYXRjaCB1cGRhdGUgKi8K KyAgICAgICAgc21nX29wZW4gPSAxOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgQ0hFQ0tfRVJS KCJpbml0c2NyOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICAg ICAgU01HJEJFR0lOX1BBU1RFQk9BUkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOworI2Vs c2UKKyAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRh dGUiLAorICAgICAgICAgICAgICAgICAgc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdf cGFzdGVib2FyZF9pZCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwlkZWJ1ZyhGMTAxLCJWTVMg aW5pdHNjciBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLCIiLHZtc19zdGF0dXMpOworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfb3BlbiBCIiwiIixzbWdfb3Blbik7 CisgICAgc21nX2luaXRlZCA9IDE7CisgICAgcmV0dXJuKDEpOworfQorCitzdGF0aWMgdm9pZAor cmVmcmVzaCgpIHsKKyAgICBkZWJ1ZyhGMTAxLCJyZWZyZXNoIHNtZ19wYXN0ZWJvYXJkX2lkIiwi IixzbWdfcGFzdGVib2FyZF9pZCk7CisKKyAgICBpZiAoc21nX29wZW4gPT0gMCB8fCBzbWdfcGFz dGVib2FyZF9pZCA9PSAtMSkKKyAgICAgIHJldHVybjsKKworI2lmZGVmIENPTU1FTlQgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KKyAgICBDSEVDS19FUlIoInJl ZnJlc2g6IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICBTTUckRU5E X1BBU1RFQk9BUkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOworICAgIENIRUNLX0VSUigi cmVmcmVzaDogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgU01H JEJFR0lOX1BBU1RFQk9BUkRfVVBEQVRFKCZzbWdfcGFzdGVib2FyZF9pZCkpOworI2Vsc2UKKyAg ICBDSEVDS19FUlIoInJlZnJlc2g6IHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUiLAorICAgICAg ICAgICAgICBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOwor ICAgIENIRUNLX0VSUigicmVmcmVzaDogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAg ICAgICAgICAgICAgc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlKCZzbWdfcGFzdGVib2FyZF9p ZCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK30KKworc3RhdGljIHZvaWQKK2VuZHdpbigpIHsK KyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuOworCisgICAgc21nX29wZW4gPSAwOwor CisjaWZkZWYgQ09NTUVOVAorICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZW5kX3Bhc3RlYm9h cmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgU01HJEVORF9QQVNURUJPQVJEX1VQREFURSgmc21n X3Bhc3RlYm9hcmRfaWQpKTsKKyNlbHNlCisgICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRlbmRf cGFzdGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICBzbWckZW5kX3Bhc3RlYm9hcmRfdXBk YXRlKCZzbWdfcGFzdGVib2FyZF9pZCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworICAgIG1v dmUoMjIsIDApOworCisjaWZkZWYgQ09NTUVOVAorLyoKKyAgVGhlc2UgY2FsbHMgY2xlYXIgdGhl IHNjcmVlbi4KKyAgKGNvbnZlcnQgcm91dGluZSBjYWxscyB0byBsb3dlcmNhc2UgLSBNYXJ0aW4g Wmluc2VyKQorKi8KKyAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGRlbGV0ZV92aXJ0dWFsX2Rp c3BsYXkiLAorICAgICAgICAgICAgICBTTUckREVMRVRFX1ZJUlRVQUxfRElTUExBWSgmc21nX2Rp c3BsYXlfaWQpKTsKKyAgICBzbWdfZGlzcGxheV9pZCA9IC0xOworCisgICAgQ0hFQ0tfRVJSKCJl bmR3aW46IHNtZyRkZWxldGVfcGFzdGVib2FyZCIsCisgICAgICAgICAgICAgIFNNRyRERUxFVEVf UEFTVEVCT0FSRCgmc21nX3Bhc3RlYm9hcmRfaWQsIDApKTsKKyAgICBzbWdfcGFzdGVib2FyZF9p ZCA9IC0xOworI2VuZGlmIC8qIENPTU1FTlQgKi8KK30KKworI2lmZGVmIENPTU1FTlQKKy8qIERF Q0MgNi4yIHNjcmVhbXMgYmxvb2R5IG11cmRlciBhYm91dCBwcmludHcgKCJub3QgZW5vdWdoIGFy Z3MiKSAqLworLyogYnV0IGFkZGluZyB0aGUgZm9sbG93aW5nIHByb3RvdHlwZSBvbmx5IG1ha2Vz IGl0IGhvbGxlciBsb3VkZXIuICovCisjaWZkZWYgX19ERUNDCisvKiAidmFyYXJncyIgcHJvdG90 eXBlIGZvciBwcmludHcgKi8KK19QUk9UT1RZUChzdGF0aWMgaW50IHByaW50dywoY2hhciAqLCAu Li4pKTsKKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRl ZiBfX0RFQ0MKKyNpbmNsdWRlIDxzdGRhcmcuaD4KK19QUk9UT1RZUChzdGF0aWMgdm9pZCBwcmlu dHcsKGNoYXIgKiwgLi4uKSk7CitzdGF0aWMgdm9pZAorcHJpbnR3KGNoYXIgKnN0ciwuLi4pIHsK KyAgICBjaGFyIGJ1ZlsyNTVdOworICAgIHZhX2xpc3QgYXA7CisgICAgJERFU0NSSVBUT1IodGV4 dF9kc2MsIDApOworICAgIHRleHRfZHNjLmRzYyRhX3BvaW50ZXI9YnVmOworICAgIGlmICghc21n X29wZW4pCisgICAgICByZXR1cm47CisgICAgdmFfc3RhcnQoYXAsc3RyKTsKKyAgICB0ZXh0X2Rz Yy5kc2Mkd19sZW5ndGggPSB2c3ByaW50ZihidWYsIHN0ciwgYXApOworICAgIHZhX2VuZChhcCk7 CisgICAgQ0hFQ0tfRVJSKCJwcmludHc6IHNtZyRwdXRfY2hhcnMiLAorICAgICAgICAgICAgICBz bWckcHV0X2NoYXJzKCZzbWdfZGlzcGxheV9pZCwgJnRleHRfZHNjLCAwLCAwLCAwLCAwLCAwKSk7 Cit9CisjZWxzZQorc3RhdGljIHZvaWQKK3ByaW50dyhzdHIsIGExLCBhMiwgYTMsIGE0LCBhNSwg YTYsIGE3LCBhOCkKKyAgICBjaGFyICpzdHI7CisgICAgbG9uZyBhMSwgYTIsIGEzLCBhNCwgYTUs IGE2LCBhNywgYTg7CisvKiBwcmludHcgKi8geworICAgIGNoYXIgYnVmWzI1NV07CisgICAgJERF U0NSSVBUT1IodGV4dF9kc2MsIDApOworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm47 CisgICAgdGV4dF9kc2MuZHNjJGFfcG9pbnRlcj1idWY7CisgICAgdGV4dF9kc2MuZHNjJHdfbGVu Z3RoID0gc3ByaW50ZihidWYsIHN0ciwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsK KyAgICBDSEVDS19FUlIoInByaW50dzogc21nJHB1dF9jaGFycyIsCisgICAgICAgICAgICAgIHNt ZyRwdXRfY2hhcnMoJnNtZ19kaXNwbGF5X2lkLCAmdGV4dF9kc2MsIDAsIDAsIDAsIDAsIDApKTsK K30KKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKworI2RlZmluZSBDS19DVVJQT1MKK2ludAorY2tfY3Vy cG9zKHJvdywgY29sKSB7CisgICAgZGVidWcoRjExMSwiVk1TIHNtZyBja19jdXJwb3MiLGNraXRv YShyb3cpLGNvbCk7CisgICAgaWYgKCFzbWdfaW5pdGVkIHx8ICFzbWdfb3BlbikgeworICAgICAg ICBpbml0c2NyKCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY3VycG9zIHNtZ19v cGVuIiwiIixzbWdfb3Blbik7CisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVybigwKTsK KyAgICBkZWJ1ZyhGMTExLCJWTVMgc21nIGNrX2N1cnBvcyIsY2tpdG9hKHJvdy0xKSxjb2wtMSk7 CisgICAgbW92ZShyb3cgLSAxLCBjb2wgLSAxKTsgICAgICAgICAgICAgLyogU01HIGlzIDAtYmFz ZWQgKi8KKyAgICByZWZyZXNoKCk7CisgICAgLyogZW5kd2luKCk7ICovCisgICAgcmV0dXJuKDAp OworfQorCitpbnQKK2NrX2NscygpIHsKKyAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2NscyBz bWdfaW5pdGVkIiwiIixzbWdfaW5pdGVkKTsKKyAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19v cGVuKSB7CisgICAgICAgIGluaXRzY3IoKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiVk1TIHNt ZyBja19jbHMgc21nX29wZW4iLCIiLHNtZ19vcGVuKTsKKyAgICBpZiAoIXNtZ19vcGVuKQorICAg ICAgcmV0dXJuKDApOworICAgIGNsZWFyKCk7CisgICAgcmVmcmVzaCgpOworICAgIC8qIGVuZHdp bigpOyAqLworICAgIHJldHVybigwKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyAgICBkZWJ1 ZyhGMTAxLCJWTVMgc21nIGNrX2NsZW9sIHNtZ19pbml0ZWQiLCIiLHNtZ19pbml0ZWQpOworICAg IGlmICghc21nX2luaXRlZCB8fCAhc21nX29wZW4pIHsKKyAgICAgICAgaW5pdHNjcigpOworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGNrX2NsZW9sIHNtZ19vcGVuIiwiIixzbWdfb3Bl bik7CisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVybigwKTsKKyAgICBjbHJ0b2VvbCgp OworICAgIHJlZnJlc2goKTsKKyAgICAvKiBlbmR3aW4oKTsgKi8KKyAgICByZXR1cm4oMCk7Cit9 CisjZW5kaWYgLyogQ0tfU01HICovCisKKyNpZmRlZiBNWUNVUlNFUworLyoKKyAgRG8taXQteW91 cnNlbGYgY3Vyc2VzIGltcGxlbWVudGF0aW9uIGZvciBWTVMsIE9TLzIgYW5kIG90aGVyIEFOU0kv VlQtMTAwJ3MuCisgIFN1cHBvcnRzIG9ubHkgdGhlIFZUNTIgYW5kIFZUMXh4IChhbmQgbGF0ZXIg VlQyeHgvM3h4LzR4eCkgdGVybWluYWxzLgorICBCeSBUZXJyeSBLZW5uZWR5LCBTdCBQZXRlcnMg Q29sbGVnZS4KKworICBGaXJzdCwgc29tZSBzdHVmZiB3ZSBjYW4ganVzdCBpZ25vcmU6CisqLwor CitzdGF0aWMgaW50Cit0b3VjaHdpbih4KSBpbnQgeDsgeworICAgIHJldHVybigwKTsKK30KK3N0 YXRpYyBpbnQKK2luaXRzY3IoKSB7CisgICAgcmV0dXJuKDApOworfQorc3RhdGljIGludAorcmVm cmVzaCgpIHsKKyAgICByZXR1cm4oMCk7Cit9CitzdGF0aWMgaW50CitlbmR3aW4oKSB7CisgICAg cmV0dXJuKDApOworfQorCisvKgorICogTm93LCBzb21lIHN0dWZmIHdlIG5lZWQgdG8gZG86Cisg Ki8KKworX1BST1RPVFlQKCBpbnQgbW92ZSwgKGludCwgaW50KSApOworI2lmbmRlZiBPUzIKK2lu dAorbW92ZShyb3csIGNvbCkgaW50IHJvdywgY29sOyB7CisgICAgaWYgKGlzdnQ1MikKKyAgICAg IHByaW50ZigiXDAzM1klYyVjIiwgcm93ICsgMDM3LCBjb2wgKyAwMzcpOworICAgIGVsc2UKKyAg ICAgIHByaW50ZigiXDAzM1slZDslZEgiLCByb3cgKyAxLCBjb2wgKyAxKTsKKyAgICByZXR1cm4o MCk7Cit9CisKK2ludAorY2xlYXIoKSB7CisgICAgbW92ZSgwLDApOworICAgIGlmIChpc3Z0NTIp CisgICAgICBwcmludGYoIlwwMzNKIik7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCJcMDMzW0oi KTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2xydG9lb2woKSB7CisgICAgaWYgKGlzdnQ1 MikKKyAgICAgIHByaW50ZigiXDAzM0siKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIlwwMzNb SyIpOworICAgIHJldHVybigwKTsKK30KKworI2RlZmluZSBDS19DVVJQT1MKK2ludAorY2tfY2xz KCkgeworICAgIHJldHVybihjbGVhcigpKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyAgICBy ZXR1cm4oY2xydG9lb2woKSk7Cit9CisKK2ludAorY2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93 LCBjb2w7IHsKKyAgICBtb3ZlKHJvdywgY29sKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNlbHNl IC8qIE9TMiAqLworLyogV2luZG93cyBOVCBhbmQgV2luZG93cyA5NSBkbyBub3QgcHJvdmlkZSBB TlNJIGVtdWxhdGlvbiAqLworLyogVGhlcmVmb3JlIHdlIG1pZ2h0IGFzIHdlbGwgbm90IHVzZSBp dCBmb3IgT1MvMiBlaXRoZXIgICAqLworCitpbnQKK21vdmUocm93LCBjb2wpIGludCByb3csIGNv bDsgeworI2lmbmRlZiBPTkVURVJNVVBECisgICAgU2V0Q3VyUG9zKHJvdywgY29sKTsKKyNlbmRp ZiAvKiBPTkVURVJNVVBEICovCisgICAgbGdvdG94eSggVkNNRCwgY29sKzEsIHJvdysxKTsKKyAg ICBWc2NybklzRGlydHkoVkNNRCk7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NsZWFyKCkg eworICAgIHZpb2NlbGwgY2VsbDsKKyAgICBtb3ZlKDAsMCk7CisjaWZkZWYgT05FVEVSTVVQRAor ICAgIGlmIChWc2NybkdldEJ1ZmZlclNpemUoVkNNRCkgPiAwKSB7CisgICAgICAgIFZzY3JuU2Ny b2xsKFZDTUQsIFVQV0FSRCwgMCwKKyAgICAgICAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQo VkNNRCktKDEpLAorICAgICAgICAgICAgICAgICAgICBWc2NybkdldEhlaWdodChWQ01EKS0oMCks IFRSVUUsIENIUl9TUCk7CisgICAgICAgIGNsZWFydGVybXNjcmVlbihWQ01EKTsKKyAgICB9Cisj ZWxzZQorICAgIGNlbGwuYyA9ICcgJzsKKyAgICBjZWxsLmEgPSBjb2xvcmNtZDsKKyAgICBXcnRO Q2VsbChjZWxsLCBjbWRfcm93cyAqIGNtZF9jb2xzLCAwLCAwKTsKKyNlbmRpZiAvKiBPTkVURVJN VVBEICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NscnRvZW9sKCkgeworICAgIFVTSE9S VCByb3csIGNvbDsKKyAgICB2aW9jZWxsIGNlbGw7CisKKyAgICBjZWxsLmMgPSAnICc7CisgICAg Y2VsbC5hID0gY29sb3JjbWQ7CisjaWZuZGVmIE9ORVRFUk1VUEQKKyAgICBHZXRDdXJQb3MoJnJv dywgJmNvbCApOworICAgIFdydE5DZWxsKGNlbGwsIGNtZF9jb2xzIC0gY29sIC0xLCByb3csIGNv bCk7CisjZW5kaWYgLyogT05FVEVSTVVQRCAqLworICAgIGNscnRvZW9sbihWQ01ELENIUl9TUCk7 CisgICAgcmV0dXJuKDApOworfQorCisjZGVmaW5lIENLX0NVUlBPUworaW50Citja19jdXJwb3Mo cm93LCBjb2wpIGludCByb3csIGNvbDsgeworICAgIG1vdmUocm93LCBjb2wpOworICAgIHJldHVy bigwKTsKK30KKworaW50Citja19jbHMoKSB7CisgICAgcmV0dXJuKGNsZWFyKCkpOworfQorCitp bnQKK2NrX2NsZW9sKCkgeworICAgIHJldHVybihjbHJ0b2VvbCgpKTsKK30KKworI2VuZGlmIC8q IE9TMiAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisKKyNpZm5kZWYgTk9URVJNQ0FQCisjaWZu ZGVmIENLX0NVUlBPUworI2RlZmluZSBDS19DVVJQT1MKKworLyogVGVybWNhcC9UZXJtaW5mbyBz ZWN0aW9uICovCisKK3N0YXRpYyBjaGFyIGN1cl9jbHNbMzJdID0geyBOVUwsIE5VTCB9Oworc3Rh dGljIGNoYXIgY3VyX2NsZW9sWzMyXSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRpYyBjaGFyIGN1cl9j bVs2NF0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMgY2hhciB0Z3NidWZbMTI4XSA9IHsgTlVMLCBO VUwgfTsKKworc3RhdGljCisjaWZkZWYgQ0tfQU5TSUMKK3ZvaWQKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworY2tfdGVybXNldCh4KSBpbnQgeDsgeworICAgIGN1cl9jbHNbMF0gPSBOVUw7CisgICAg Y3VyX2NsZW9sWzBdID0gTlVMOworICAgIGN1cl9jbVswXSA9IE5VTDsKKyNpZmRlZiB0Z2V0ZW50 CisgICAgZGVidWcoRjEwMCwidGdldGVudCBpcyBhIG1hY3JvIiwiIiwwKTsKKyNlbmRpZiAvKiB0 Z2V0ZW50ICovCisjaWZkZWYgdGdldHN0cgorICAgIGRlYnVnKEYxMDAsInRnZXRzdHIgaXMgYSBt YWNybyIsIiIsMCk7CisjZW5kaWYgLyogdGdldHN0ciAqLworI2lmZGVmIHRwdXRzCisgICAgZGVi dWcoRjEwMCwidHB1dHMgaXMgYSBtYWNybyIsIiIsMCk7CisjZW5kaWYgLyogdHB1dHMgKi8KKyNp ZmRlZiB0Z290bworICAgIGRlYnVnKEYxMDAsInRnb3RvIGlzIGEgbWFjcm8iLCIiLDApOworI2Vu ZGlmIC8qIHRnb3RvICovCisjaWZkZWYgTk9URVJNQ0FQCisgICAgLyogdGdldHN0cigpIGdldHMg YSBzZWdtZW50YXRpb24gZmF1bHQgb24gT1NGLzEgKi8KKyAgICBkZWJ1ZyhGMTAwLCJja190ZXJt c2V0IE5PVEVSTUNBUCIsIiIsMCk7CisjZWxzZQorICAgIGlmIChub3Rlcm1jYXApIHsKKyAgICAg ICAgZGVidWcoRjEwMCwiY2tfdGVybXNldCBub3Rlcm1jYXAiLCIiLDApOworICAgICAgICByZXR1 cm47CisgICAgfQorICAgIGRlYnVnKEYxMDEsImNrX3Rlcm1zZXQgeCIsIiIseCk7CisgICAgaWYg KHggPiAwKSB7CisgICAgICAgIGNoYXIgKiBicDsKKyAgICAgICAgYnAgPSB0Z3NidWY7CisgICAg ICAgICpicCA9IE5VTDsKKyAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCBjYWxsaW5nIHRn ZXRzdHIiLCJjbCIsMCk7CisgICAgICAgIGlmICh0Z2V0c3RyKCJjbCIsICZicCkpIHsgICAgICAg LyogR2V0IGNsZWFyLXNjcmVlbiBjb2RlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190 ZXJtc2V0IHRnZXRzdHIgY2wiLHRnc2J1ZiwiIik7CisgICAgICAgICAgICBpZiAoKGludClzdHJs ZW4odGdzYnVmKSA8IDMyKQorICAgICAgICAgICAgICBja3N0cm5jcHkoY3VyX2Nscyx0Z3NidWYs MzIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGJwID0gdGdz YnVmOworICAgICAgICBpZiAodGdldHN0cigiY2UiLCAmYnApKSB7ICAgICAgIC8qIEdldCBjbGVh ci10by1lbmQtb2YtbGluZSBjb2RlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJt c2V0IHRnZXRzdHIgY2UiLHRnc2J1ZiwiIik7CisgICAgICAgICAgICBpZiAoKGludClzdHJsZW4o dGdzYnVmKSA8IDMyKQorICAgICAgICAgICAgICBja3N0cm5jcHkoY3VyX2NsZW9sLHRnc2J1Ziwz Mik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnAgPSB0Z3Ni dWY7CisgICAgICAgIGlmICh0Z2V0c3RyKCJjbSIsICZicCkpIHsgICAgICAgLyogR2V0IGN1cnNv ci1tb3ZlbWVudCBjb2RlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IHRn ZXRzdHIgY20iLHRnc2J1ZiwiIik7CisgICAgICAgICAgICBpZiAoKGludClzdHJsZW4odGdzYnVm KSA8IDY0KQorICAgICAgICAgICAgICBja3N0cm5jcHkoY3VyX2NtLHRnc2J1Ziw2NCk7CisgICAg ICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogTk9URVJNQ0FQ ICovCit9CisKKyNpZm5kZWYgVFBVVFNGTlRZUEUKKyNpZmRlZiBUUFVUU0lTVk9JRAorI2RlZmlu ZSBUUFVUU0ZOVFlQRSB2b2lkCisjZWxzZQorI2RlZmluZSBUUFVUU0ZOVFlQRSBpbnQKKyNlbmRp ZiAvKiBUUFVUU0lTVk9JRCAqLworI2VuZGlmIC8qIFRQVVRTRk5UWVBFICovCisKKyNpZm5kZWYg VFBVVFNBUkdUWVBFCisjaWZkZWYgSFBVWDkKKyNkZWZpbmUgVFBVVFNBUkdUWVBFIGNoYXIKKyNl bHNlCisjaWZkZWYgSFBVWDEwCisjZGVmaW5lIFRQVVRTQVJHVFlQRSBjaGFyCisjZWxzZQorI2Rl ZmluZSBUUFVUU0FSR1RZUEUgaW50CisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyogSFBV WDkgKi8KKyNlbmRpZiAvKiBUUFVUU0FSR1RZUEUgKi8KKworc3RhdGljIFRQVVRTRk5UWVBFCisj aWZkZWYgQ0tfQU5TSUMKK2NrX291dGMoVFBVVFNBUkdUWVBFIHgpCisjZWxzZQorY2tfb3V0Yyh4 KSBUUFVUU0FSR1RZUEUgeDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvIHNhdGlzZnkgdHB1dHMoKSBhcmczIHByb3Rv dHlwZSAqLworICAgIGludCByYzsKKyAgICBjaGFyIGM7CisgICAgYyA9IChjaGFyKSB4OworICAg IHJjID0gKGluc2VydmVyKSA/IHR0b2MoYykgOiBjb25vYyhjKTsKKyNpZm5kZWYgVFBVVFNJU1ZP SUQKKyAgICByZXR1cm4ocmMpOworI2VuZGlmIC8qIFRQVVRTSVNWT0lEICovCit9CisKK2ludAor Y2tfY3VycG9zKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKKyNpZmRlZiBDS19BTlNJQworICAg IFRQVVRTRk5UWVBFICgqZm4pKFRQVVRTQVJHVFlQRSk7CisjZWxzZQorICAgIFRQVVRTRk5UWVBF ICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICBpZiAoIWZ4ZF9pbml0ZWQpCisg ICAgICBmeGRpbml0KDk5OTkpOworICAgIGlmICghY3VyX2NtWzBdKSB7ICAgICAgICAgICAgICAg ICAgIC8qIFdlIGRvbid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLworI2lmZGVmIENPTU1FTlQK KyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBEbyBub3RoaW5nICov CisjZWxzZQorICAgICAgICAvKiBCb3RoIEMtS2VybWl0J3MgU0NSRUVOIGNvbW1hbmQgYW5kIEFO U0kvVlQxMDAgYXJlIDEtYmFzZWQgKi8KKyAgICAgICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJv dywgY29sKTsgLyogT3IgZGVmYXVsdCB0byBBTlNJICovCisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgIH0gZWxzZSB7CisgICAgICAgIGZuID0gY2tfb3V0YzsKKyAgICAgICAgLyogdGVybWNhcC90 ZXJtaW5mbyBpcyAwLWJhc2VkICovCisgICAgICAgIHRwdXRzKAorI2lmZGVmIFRQVVRTQVJHMUNP TlNUCisgICAgICAgICAgICAgIChjb25zdCBjaGFyICopCisjZW5kaWYgLyogVFBVVFNBUkcxQ09O U1QgKi8KKyAgICAgICAgICAgICAgdGdvdG8oY3VyX2NtLGNvbC0xLHJvdy0xKSwxLGZuKTsKKyAg ICB9CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2NscygpIHsKKyNpZmRlZiBDS19BTlNJ QworICAgIFRQVVRTRk5UWVBFICgqZm4pKFRQVVRTQVJHVFlQRSk7CisjZWxzZQorICAgIFRQVVRT Rk5UWVBFICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICBpZiAoIWZ4ZF9pbml0 ZWQpCisgICAgICBmeGRpbml0KDk5OTkpOworICAgIGlmICghY3VyX2Nsc1swXSkgeyAgICAgICAg ICAgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiBEbyBu b3RoaW5nICovCisjZWxzZQorICAgICAgICBwcmludGYoIlwwMzNbO0hcMDMzWzJKIik7ICAgICAg IC8qIE9yIGRlZmF1bHQgdG8gQU5TSSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9IGVs c2UgeworICAgICAgICBmbiA9IGNrX291dGM7CisgICAgICAgIGRlYnVnKEYxMTEsImNrX2NscyAy IixjdXJfY2xzLGZ4ZF9pbml0ZWQpOworICAgICAgICB0cHV0cyhjdXJfY2xzLGNtZF9yb3dzLGZu KTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworI2lmZGVm IENLX0FOU0lDCisgICAgVFBVVFNGTlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKKyNlbHNlCisg ICAgVFBVVFNGTlRZUEUgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIGlmICgh ZnhkX2luaXRlZCkKKyAgICAgIGZ4ZGluaXQoOTk5OSk7CisgICAgaWYgKCFjdXJfY2xlb2xbMF0p IHsgICAgICAgICAgICAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICov CisjaWZkZWYgQ09NTUVOVAorICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAg IC8qIERvIG5vdGhpbmcgKi8KKyNlbHNlCisgICAgICAgIHByaW50ZigiXDAzM1tLIik7ICAgICAg ICAgICAgICAgLyogT3IgdXNlIEFOU0kgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfSBl bHNlIHsKKyAgICAgICAgZm4gPSBja19vdXRjOworICAgICAgICB0cHV0cyhjdXJfY2xlb2wsMSxm bik7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBDS19DVVJQT1MgKi8KKyNl bHNlCitzdGF0aWMgdm9pZAorY2tfdGVybXNldCh4KSBpbnQgeDsgeworICAgIGlmICh4KSByZXR1 cm47Cit9CisjZW5kaWYgLyogTk9URVJNQ0FQICovCisKKyNpZm5kZWYgQ0tfQ1VSUE9TCisjZGVm aW5lIENLX0NVUlBPUworaW50Citja19jbHMoKSB7CisgICAgcHJpbnRmKCJcMDMzWztIXDAzM1sy SiIpOworICAgIHJldHVybigwKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyAgICBwcmludGYo IlwwMzNbSyIpOworICAgIHJldHVybigwKTsKK30KKworaW50Citja19jdXJwb3Mocm93LCBjb2wp IGludCByb3csIGNvbDsgeworICAgIHByaW50ZigiXDAzM1slZDslZEgiLCByb3csIGNvbCk7Cisg ICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENLX0NVUlBPUyAqLworCisKKyNpZm5kZWYgTk9Y RkVSCitzdGF0aWMgaW50IGNpbml0ID0gMDsgICAgICAgICAgICAgICAgICAgLyogRmxhZyBmb3Ig Y3Vyc2VzIGluaXQnZCAqLworc3RhdGljIGludCBjZW5kdyA9IDA7ICAgICAgICAgICAgICAgICAg IC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgKi8KKworc3RhdGljCisjaWZkZWYgQ0tfQU5TSUMgICAg ICAgICAgICAgICAgICAgICAgICAgLyogQmVjYXVzZSBWT0lEIHVzZWQgYnkgY3Vyc2VzLmggKi8K K3ZvaWQKKyNlbHNlCisjaWZkZWYgTVlDVVJTRVMKK1ZPSUQKKyNlbHNlCitpbnQKKyNlbmRpZiAv KiBNWUNVUlNFUyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisjaWZkZWYgQ0tfQU5TSUMgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlICUgdHJhbnNmZXJlZCBhbmQgJSBiYXIgKi8K K3VwZHBjdChsb25nIG9sZCwgbG9uZyBuZXcpCisjZWxzZSAvKiBDS19BTlNJQyAqLwordXBkcGN0 KG9sZCwgbmV3KSBsb25nIG9sZCwgbmV3OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiB1cGRw Y3QgKi8geworI2lmZGVmIENPTU1FTlQKKyAgICBpbnQgbSwgbjsKKyAgICBtb3ZlKENXX1BDRCwy Mik7CisgICAgcHJpbnR3KCIlbGQiLCBuZXcpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25n KSBuZXcpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDS19Q Q1RfQkFSCisgICAgaWYgKHRoZXJtb21ldGVyKSB7CisgICAgICAgIGlmIChvbGQgPiBuZXcpIHsK KyAgICAgICAgICAgIG9sZCA9IDA7CisgICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYpOworICAg ICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgfQorICAgICAgICBtID0gb2xkLzI7CisgICAg ICAgIG1vdmUoQ1dfUENELCAyNiArIG0pOworICAgICAgICBuID0gbmV3IC8gMiAtIG07CisjaWZu ZGVmIE9TMgorICAgICAgICB3aGlsZSAobiA+IDApIHsKKyAgICAgICAgICAgIGlmICgobSArIDEp ICUgNSA9PSAwKQorICAgICAgICAgICAgICBwcmludHcoIioiKTsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgcHJpbnR3KCI9Iik7CisgICAgICAgICAgICBtKys7CisgICAgICAgICAg ICBuLS07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ldyAlIDIgIT0gMCkgcHJpbnR3KCItIik7 CisgICAgICAgIC8qIG1vdmUoQ1dfUENELCAyMis1Myk7ICovCisjZWxzZSAvKiBPUzIgKi8KKyAg ICAgICAgd2hpbGUgKG4gPiAwKSB7CisgICAgICAgICAgICBwcmludHcoIiVjIiwgJ1wzMzMnKTsK KyAgICAgICAgICAgIG0rKzsgbi0tOworICAgICAgICB9CisgICAgICAgIGlmIChuZXcgJSAyICE9 IDApCisgICAgICAgICAgcHJpbnR3KCIlYyIsICdcMjYxJyk7CisjZW5kaWYgLyogT1MyICovCisg ICAgfQorI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKyAgICAvKiBjbHJ0b2VvbCgpOyAqLworI2Vs c2UgIC8qICFDT01NRU5UICovCisjaWZkZWYgT1MyCisjZGVmaW5lIENIQVIxICAgJ1wzMzMnICAg ICAgICAgIC8qIE9TMiAtIENQNDM3ICovCisjZGVmaW5lIENIQVIyICAgJ1wyNjEnCisjZWxzZQor I2RlZmluZSBDSEFSMSAgICcvJyAgICAgICAgICAgICAvKiBEZWZhdWx0ICovCisjZGVmaW5lIENI QVIyICAgJy0nCisjZW5kaWYgLyogT1MyICovCisgICAgZGVidWcoRjEwMSwidXBkcGN0IG9sZCIs IiIsb2xkKTsKKyAgICBkZWJ1ZyhGMTAxLCJ1cGRwY3QgbmV3IiwiIixuZXcpOworICAgIG1vdmUo Q1dfUENELDIyKTsKKyAgICBwcmludHcoIiUtM2xkIiwgbmV3KTsgLyogICh3YXMpICAgcHJpbnR3 KCIlbGQiLCBuZXcpOyAgKi8KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIG5ldyApOwor I2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDS19QQ1RfQkFSCisg ICAgaWYgKHRoZXJtb21ldGVyKSB7CisgICAgICAgIGludCBtLCBuOworCisgICAgICAgIGlmIChv bGQgPiBuZXcpIHsKKyAgICAgICAgICAgIG9sZCA9IDAgOworICAgICAgICAgICAgbW92ZShDV19Q Q0QsIDI2KTsKKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KG5ldyA8PSAxMDBMKSB7CisgICAgICAgICAgICBtID0gb2xkIC8gMjsKKyAgICAgICAgICAgIG4g PSBuZXcgLyAyIC0gbTsKKyAgICAgICAgICAgIG1vdmUoQ1dfUENELCAyNittKTsKKyAgICAgICAg ICAgIHdoaWxlIChuLS0gPiAwKQorICAgICAgICAgICAgICBwcmludHcoIiVjIiwgQ0hBUjEpOwor ICAgICAgICAgICAgaWYgKG5ldyAlIDIgIT0gMCkKKyAgICAgICAgICAgICAgcHJpbnR3KCIlYyIs IENIQVIyKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworfQorCitzdGF0aWMgQ0tfT0ZGX1Qgb2xkX3RyID0gKENLX09GRl9U KS0xOwkvKiBUaW1lIHJlbWFpbmluZyBwcmV2aW91c2x5ICovCisKK3N0YXRpYyBDS19PRkZfVAor I2lmZGVmIENLX0FOU0lDCitzaG9ldGwoQ0tfT0ZGX1Qgb2xkX3RyLCBsb25nIGNwcywgQ0tfT0ZG X1QgZnNpeiwgQ0tfT0ZGX1QgaG93ZmFyKQorI2Vsc2UKKyAgICBzaG9ldGwob2xkX3RyLCBjcHMs IGZzaXosIGhvd2ZhcikgbG9uZyBjcHM7IENLX09GRl9UIG9sZF90ciwgZnNpeiwgaG93ZmFyOwor I2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzaG9ldGwgKi8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogRXN0aW1hdGVkIHRpbWUgbGVmdCBpbiB0cmFuc2ZlciAqLworICAgIENLX09GRl9U IHRyOwkJCS8qIFRpbWUgcmVtYWluaW5nLCBzZWNvbmRzICovCisKKyNpZmRlZiBHRlRJTUVSCisg ICAgaWYgKGZzaXogPiAwTCAmJiBjcHMgPiAwTCkKKyAgICAgIHRyID0gKENLX09GRl9UKSgoQ0tG TE9BVCkoZnNpeiAtIGhvd2ZhcikgLyAoQ0tGTE9BVCljcHMpOworICAgIGVsc2UKKyAgICAgIHRy ID0gKENLX09GRl9UKS0xOworI2Vsc2UKKyAgICB0ciA9IChmc2l6ID4gMEwgJiYgY3BzID4gMEwp ID8KKyAgICAgICgoZnNpeiAtIGhvd2ZhcikgLyBjcHMpIDoKKyAgICAgICAgKENLX09GRl9UKS0x OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICBtb3ZlKENXX1RSLDIyKTsKKyAgICBpZiAodHIg PiAoQ0tfT0ZGX1QpLTEpIHsKKyAgICAgICAgaWYgKHRyICE9IG9sZF90cikgeworICAgICAgICAg ICAgcHJpbnR3KCIlcyIsaGhtbXNzKHRyKSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZylDV19UUiwg KGxvbmcpaGhtbXNzKHRyKSk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLwor ICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg IHByaW50dygiKHVua25vd24pIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFIsIChsb25nKSAi KHVua25vd24pIiApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgY2xydG9lb2woKTsKKyAgICB9CisgICAgcmV0dXJuKHRyKTsKK30KKworc3RhdGljIGxvbmcK KyNpZmRlZiBDS19BTlNJQworc2hvY3BzKGludCBwY3QsIENLX09GRl9UIGZzaXosIENLX09GRl9U IGhvd2ZhcikKKyNlbHNlCitzaG9jcHMocGN0LCBmc2l6LCBob3dmYXIpIGludCBwY3Q7IENLX09G Rl9UIGZzaXosIGhvd2ZhcjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2hvY3BzICovIHsK KyNpZmRlZiBDUFNfV0VJR0hURUQKKyAgICBzdGF0aWMgQ0tfT0ZGX1Qgb2xkZmZjID0gMEw7Cisj ZW5kaWYgLyogQ1BTX1dFSUdIVEVEICovCisjaWZkZWYgR0ZUSU1FUgorICAgIENLRkxPQVQgc2Vj cywgeHg7CisjZWxzZQorICAgIENLX09GRl9UIHNlY3MsIHh4OworI2VuZGlmIC8qIEdGVElNRVIg Ki8KKworI2lmZGVmIEdGVElNRVIKKyAgICB4eCA9IChndHYgPj0gMC4wKSA/IGd0diA6IDAuMDsg ICAgICAvKiBGbG9hdGluZy1wb2ludCB2ZXJzaW9uICovCisgICAgZ3R2ID0gZ2Z0aW1lcigpOwor ICAgIGlmICgoZ3R2IC0gb2xkZ3R2KSA8IChDS0ZMT0FUKSAxLjApIC8qIE9ubHkgZG8gdGhpcyBv bmNlIHBlciBzZWNvbmQgKi8KKyAgICAgIHJldHVybihvbGRjcHMpOworICAgIG9sZGd0diA9IHh4 OworI2Vsc2UKKyAgICB4eCA9IChndHYgPj0gMCkgPyBndHYgOiAwOyAgICAgICAgICAvKiBXaG9s ZS1udW1iZXIgdmVyc2lvbiAqLworICAgIGd0diA9IGd0aW1lcigpOworICAgIGlmICgoZ3R2IC0g b2xkZ3R2KSA8IDEpCisgICAgICByZXR1cm4ob2xkY3BzKTsKKyAgICBvbGRndHYgPSB4eDsKKyNl bmRpZiAvKiBHRlRJTUVSICovCisKKyNpZmRlZiBDUFNfV0VJR0hURUQKKyAgICAvKiBkZWJ1ZyhG MTAwLCJTSE9DUFM6IFdFSUdIVEVEIiwiIiwwKTsgKi8KKyAgICBpZiAoZ3R2ICE9IG9sZGd0dikg eyAgICAgICAgICAgICAgICAvKiBUaGUgZmlyc3QgcGFja2V0IGlzIGlnbm9yZWQgKi8KKyAgICAg ICAgaWYgKGZmYyA8IG9sZGZmYykKKyAgICAgICAgICBvbGRmZmMgPSBmZmM7CisgICAgICAgIG9s ZGNwcyA9IGNwczsKKyAgICAgICAgaWYgKG9sZGNwcyAmJiBvbGRndHYgPgorI2lmZGVmIEdGVElN RVIKKyAgICAgICAgICAgIDEuMAorI2Vsc2UKKyAgICAgICAgICAgIDEKKyNlbmRpZiAvKiBHRlRJ TUVSICovCisgICAgICAgICAgICApIHsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGZp cnN0IHNlY29uZCBpcyBpZ25vcmVkICovCisvKgorICBUaGlzIHZlcnNpb24gb2Ygc2hvY3BzKCkg cHJvZHVjZXMgYSB3ZWlnaHRlZCBhdmVyYWdlIHRoYXQgc29tZQorICBwZW9wbGUgbGlrZSwgYnV0 IG1vc3QgcGVvcGxlIGZpbmQgaXQgZGlzY29uY2VydGluZyBhbmQgYm9tYmFyZCB1cworICB3aXRo IHF1ZXN0aW9ucyBhbmQgY29tcGxhaW50cyBhYm91dCB3aHkgdGhlIENQUyBmaWd1cmUgZmx1Y3R1 YXRlcyBzbworICB3aWxkbHkuICBTbyBub3cgeW91IG9ubHkgZ2V0IHRoZSB3ZWlnaHRlZCBhdmVy YWdlIGlmIHlvdSBidWlsZCB0aGUKKyAgcHJvZ3JhbSB5b3Vyc2VsZiB3aXRoIENQU19XRUlHSFRF RCBkZWZpbmVkLgorKi8KKyNpZm5kZWYgQ1BTX1ZJTkNFCisjaWZkZWYgR0ZUSU1FUgorICAgICAg ICAgICAgY3BzID0gKGxvbmcpKCgoKENLRkxPQVQpb2xkY3BzICogMy4wKSArCisgICAgICAgICAg ICAgICAgICAgKENLRkxPQVQpKGZmYyAtIG9sZGZmYykgLyAoZ3R2LW9sZGd0dikgKSAvIDQuMCk7 CisjZWxzZQorICAgICAgICAgICAgY3BzID0gKCAob2xkY3BzICogMykgKyAoZmZjIC0gb2xkZmZj KSAvIChndHYtb2xkZ3R2KSApIC8gNDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisjZWxzZQorLyog QW5kIGFuIGFsdGVybmF0ZSB3ZWlnaHRpbmcgc2NoZW1lIGZyb20gVmluY2VudCBGYXRpY2EuLi4g Ki8KKyAgICAgICAgICAgIGNwcyA9ICgzICoKKyAgICAgICAgICAgICAoKDErcGN0LzMwMCkqb2xk ZmZjL29sZGd0disoMS1wY3QvMTAwKSooZmZjLW9sZGZmYykvKGd0di1vbGRndHYpKSkKKyAgICAg ICAgICAgICAgLyA0OworI2VuZGlmIC8qIENQU19WSU5DRSAqLworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgLyogTm8gd2VpZ2h0ZWQgYXZlcmFnZSBzaW5jZSB0aGVyZSBpcyBub3RoaW5n IHRvIHdlaWdoICovCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgICAgY3BzID0gKGxvbmcpKGd0 diAhPSAwLjAgPworICAgICAgICAgICAgICAoQ0tGTE9BVCkoZmZjIC0gb2xkZmZjKSAvIChndHYg LSBvbGRndHYpIDoKKyAgICAgICAgICAgICAgICAoZmZjIC0gb2xkZmZjKSkgOworI2Vsc2UKKyAg ICAgICAgICAgIGNwcyA9IGd0diA/IChmZmMgLSBvbGRmZmMpIC8gKGd0diAtIG9sZGd0dikgOiAo ZmZjIC0gb2xkZmZjKSA7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICB9CisjaWZkZWYg Q09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAg IGRlYnVnKEYxMDEsIlNIT0NQUzogcGN0ICAgIiwiIixwY3QpOworICAgICAgICAgICAgZGVidWco RjEwMSwiU0hPQ1BTOiBndHYgICAiLCIiLGd0dik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJT SE9DUFM6IG9sZGd0diIsIiIsb2xkZ3R2KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQ UzogZGd0diAgIiwiIiwobG9uZykoZ3R2LW9sZGd0dikpOworICAgICAgICAgICAgZGVidWcoRjEw MSwiU0hPQ1BTOiBmZmMgICAiLCIiLGZmYyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9D UFM6IG9sZGZmYyIsIiIsb2xkZmZjKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzog ZGZmYyAgIiwiIixmZmMtb2xkZmZjKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzog Y3BzICAgIiwiIixjcHMpOworICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOworICAgICAgICBwcmludHcoIiVs ZCIsIGNwcyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIChsb25nKSBjcHMgKTsKKyNlbmRp ZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisgICAg ICAgIG9sZGZmYyA9IGZmYzsKKyAgICB9CisjZWxzZSAvKiAhQ1BTX1dFSUdIVEVEICovCisjaWZk ZWYgQ09NTUVOVAorI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDAs IlNIT0NQUzogTk9UIFdFSUdIVEVEIiwiIiwwKTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BT OiBwY3QgICAgIiwiIixwY3QpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGd0diAgICAi LCIiLGd0dik7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogb2xkZ3R2ICIsIiIsb2xkZ3R2 KTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBkZ3R2ICAgIiwiIiwobG9uZylndHYgLSAo bG9uZylvbGRndHYpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZmYyAgICAiLCIiLGZm Yyk7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogb2xkZmZjICIsIiIsb2xkZmZjKTsKKyAg ICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBkZmZjICAgIiwiIixmZmMtb2xkZmZjKTsKKyAgICAg ICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBjcHMgICAgIiwiIixjcHMpOworICAgICAgICBkZWJ1ZyhG MTAxLCJTSE9DUFM6IGZpbGNudCAiLCIiLGZpbGNudCk7CisjaWZkZWYgR0ZUSU1FUgorICAgICAg ICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGZwZnNlY3MiLCIiLGZwZnNlY3MpOworI2VuZGlmIC8qIEdG VElNRVIgKi8KKyAgICB9CisgICAgZGVidWcoRjEwMSwic2hvY3BzIGd0diIsIiIsZ3R2KTsKKyNl bmRpZiAvKiBERUJVRyAqLworI2lmZGVmIEdGVElNRVIKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgLyogZGVidWcoRjEwMSwic2hvY3BzIGZwZnNlY3MiLCIiLGZwZnNlY3MpOyAqLworICAgIHNl Y3MgPSBndHYgLSBmcGZzZWNzOworICAgIC8qIGRlYnVnKEYxMDEsInNob2NwcyBzZWNzIiwiIiwo bG9uZylzZWNzKTsgKi8KKyAgICBpZiAoc2VjcyA+IDAuMCkgeworICAgICAgICBjcHMgPSAobG9u ZykoKENLRkxPQVQpIGZmYyAvIHNlY3MpOworICAgICAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMg Y3BzIiwiIixjcHMpOyAqLworICAgICAgICBtb3ZlKENXX0NQLDIyKTsKKyNpZmRlZiBLVUkKKyNp Zm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19DUCwgKGxvbmcpIGNwcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICAgICAgcHJpbnR3KCIlbGQiLCBjcHMpOworICAgICAgICBjbHJ0b2VvbCgpOwor ICAgIH0KKyNlbHNlICAvKiBOb3QgR0ZUSU1FUiAqLworICAgIGlmICgoc2VjcyA9IGd0diAtIGZz ZWNzKSA+IDApIHsKKyAgICAgICAgY3BzID0gKHNlY3MgPCAxTCkgPyBmZmMgOiBmZmMgLyBzZWNz OworICAgICAgICBtb3ZlKENXX0NQLDIyKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxv bmcpIGNwcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg cHJpbnR3KCIlbGQiLCBjcHMpOworICAgICAgICBjbHJ0b2VvbCgpOworICAgIH0KKyNlbmRpZiAv KiBHRlRJTUVSICovCisjZW5kaWYgLyogQ1BTX1dFSUdIVEVEICovCisKKyAgICBpZiAoY3BzID4g cGVha2NwcyAmJiAgICAgICAgICAgICAgICAvKiBQZWFrIHRyYW5zZmVyIHJhdGUgKi8KKyAgICAg ICAgKCh3aGF0ICYgV19TRU5EICYmIHNwYWNrZXRzID4gd3Nsb3RzICsgNCkgfHwKKwkgKCEod2hh dCAmIFdfU0VORCkgJiYgc3BhY2tldHMgPiAxMCkpKSB7CisgICAgICAgIHBlYWtjcHMgPSBjcHM7 CisgICAgfQorICAgIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsK KyAgICByZXR1cm4oY3BzKTsKK30KKworc3RhdGljCisjaWZkZWYgQ0tfQU5TSUMgICAgICAgICAg ICAgICAgICAgICAgICAgLyogQmVjYXVzZSBWT0lEIHVzZWQgYnkgY3Vyc2VzLmggKi8KK3ZvaWQK KyNlbHNlCisjaWZkZWYgTVlDVVJTRVMKK1ZPSUQKKyNlbHNlCitpbnQKKyNlbmRpZiAvKiBNWUNV UlNFUyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCitzY3JmdCgpIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogRGlzcGxheSBmaWxlIHR5cGUgKi8KKyAgICBjaGFyIHhmZXJzdHJb MjU2XTsKKyAgICB4ZmVyc3RyWzBdID0gTlVMOworICAgIGRlYnVnKEYxMDEsInNjcmZ0IGJpbmFy eSIsIiIsYmluYXJ5KTsKKyAgICBpZiAoYmluYXJ5KSB7CisgICAgICAgIHN3aXRjaChiaW5hcnkp IHsKKyAgICAgICAgICBjYXNlIFhZRlRfTDoKKyAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3Ry LCJMQUJFTEVEIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWUZU X0k6CisgICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiSU1BR0UiLDI1Nik7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhZRlRfVToKKyAgICAgICAgICAgIGNrc3RybmNw eSh4ZmVyc3RyLCJCSU5BUlkgVU5ERUZJTkVEIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7CisJ ICBjYXNlIFhZRlRfTToKKyAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJNQUNCSU5BUlki LDI1Nik7CisgICAgICAgICAgICBicmVhazsKKwkgIGNhc2UgWFlGVF9YOgorICAgICAgICAgICAg Y2tzdHJuY3B5KHhmZXJzdHIsIlRFTkVYIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBjYXNlIFhZRlRfQjoKKyAgICAgICAgICAgIGNrc3Ry bmNweSh4ZmVyc3RyLCJCSU5BUlkiLDI1Nik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorI2lmZGVmIENLX1JFU0VORAorICAgICAgICBpZiAod2hhdCAmIFdfU0VORCAmJiBzZW5kc3Rh cnQgPiAwTCkgeworICAgICAgICAgICAgaWYgKHNlbmRtb2RlID09IFNNX1BTRU5EKSB7CisgICAg ICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIsICIgLyBwYXJ0aWFsIiwgMjU2KTsKKyAgICAg ICAgICAgIH0gZWxzZSBpZiAoc2VuZG1vZGUgPT0gU01fUkVTRU5EKSB7CisgICAgICAgICAgICAg ICAgY2tzdHJuY2F0KHhmZXJzdHIsICIgLyByZXNlbmQiLCAyNTYpOworICAgICAgICAgICAgfQor ICAgICAgICB9IGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YgJiYgcnNfbGVuID4gMEwpIHsKKyAgICAg ICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAiIC8gcmVzZW5kIiwgMjU2KTsKKyAgICAgICAgfQor I2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgIH0gZWxzZSB7CisKKyNpZm5kZWYgTk9DU0VUUwor ICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiVEVYVCIsMjU2KTsKKyNpZmRlZiBORVdGVFAKKyNp Zm5kZWYgTk9VTklDT0RFCisJaWYgKHdoYXQgJiBXX0ZUUCkgeworCSAgICBpZiAoZnRwX2NzeCA8 IDApCisJICAgICAgY2tzdHJuY2F0KHhmZXJzdHIsIiAobm8gdHJhbnNsYXRpb24pIiwgMjU2KTsK KwkgICAgZWxzZQorCSAgICAgIGNrbWFreG1zZygmeGZlcnN0cls0XSwyNTIsCisJCSAgICAgICAi ICgiLAorCQkgICAgICAgZmNzaW5mb1sod2hhdCAmIFdfU0VORCkgPyBmdHBfY3NsIDogZnRwX2Nz eF0ua2V5d29yZCwKKwkJICAgICAgICIgPT4gIiwKKwkJICAgICAgIGZjc2luZm9bKHdoYXQgJiBX X1NFTkQpID8gZnRwX2NzeCA6IGZ0cF9jc2xdLmtleXdvcmQsCisJCSAgICAgICAiKSIsCisJCSAg ICAgICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisJCSAgICAgICApOworCX0g ZWxzZQorI2VuZGlmIC8qIE5PVU5JQ09ERSAqLworI2VuZGlmIC8qIE5FV0ZUUCAqLworCSAgaWYg KHRjaGFyc2V0ID09IFRDX1RSQU5TUCkgeworICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIs ICIgKG5vIHRyYW5zbGF0aW9uKSIsIDI1Nik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBpZiAod2hhdCAmIFdfU0VORCkgeworICAgICAgICAgICAgICAgIHNwcmludGYoICZ4ZmVyc3Ry W3N0cmxlbih4ZmVyc3RyKV0sIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICIg KCVzID0+ICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5r ZXl3b3JkLCAvKiBidWlsdC1pbiBrZXl3b3JkcyAqLworICAgICAgICAgICAgICAgICAgICAgICAg dGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCAgLyogbGVuZ3RocyBhcmUgY29udHJvbGxlZCAqLwor CQkJKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ByaW50ZiggJnhm ZXJzdHJbc3RybGVuKHhmZXJzdHIpXSwgLyogc2FmZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgIiAoJXMgPT4gJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRjc2luZm9bdGNoYXJz ZXRdLmtleXdvcmQsIC8qIGJ1aWx0LWluIGtleXdvcmRzICovCisgICAgICAgICAgICAgICAgICAg ICAgICBmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsgLyogbGVuZ3RocyBjb250cm9sbGVkICov CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRTICovCisgICAgfQor ICAgIG1vdmUoQ1dfVFlQLDIyKTsKKyAgICBwcmludHcoIiVzIiwgeGZlcnN0cik7CisgICAgY2xy dG9lb2woKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RZUCwgKGxvbmcpIHhmZXJzdHIgKTsKKyNlbmRp ZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgcmV0dXJuOworfQorCisjaWZkZWYg Q0tfTkVXVEVSTQorc3RhdGljIEZJTEUgKmNrX3N0ZG91dCA9IE5VTEw7CitzdGF0aWMgaW50IGNr X2ZkID0gLTE7CisjZW5kaWYgLyogQ0tfTkVXVEVSTSAqLworCitzdGF0aWMgbG9uZyBwY3QgPSAw TCwgb2xkcGN0ID0gMEwsIG9sZHJ0dCA9IC0xTDsKK3N0YXRpYyBpbnQgb2xkdHlwID0gMCwgb2xk d2luID0gLTEsIG9sZHRyeSA9IC0xLCBvbGRsZW4gPSAtMSwgb2xkdGltID0gLTE7CisKKyNpZmRl ZiBORVRDT05OCitzdGF0aWMgY2hhciAqbmV0bmFtZVtdID0geworICAgICJub25lIiwJCQkJLyog MDAgKi8KKyAgICAiVENQL0lQIiwJCQkJLyogMDEgVENQIChTb2NrZXRzKSAqLworICAgICJUQ1Av SVAiLAkJCQkvKiAwMiBUQ1AgKFN0cmVhbXMpICovCisgICAgIlguMjUiLAkJCQkvKiAwMyBTdW5M aW5rIFguMjQgICovCisgICAgIkRFQ25ldCIsCQkJCS8qIDA0IERFQ25ldCAgKi8KKyAgICAiVkFY IFBTSSIsCQkJCS8qIDA1IFZBWCBQU0kgKi8KKyAgICAiTmFtZWQgUGlwZXMiLAkJCS8qIDA2IExB TiBNYW5hZ2VyIE5hbWVkIFBpcGUgKi8KKyAgICAiWC4yNSIsCQkJCS8qIDA3IFN0cmF0dXMgVk9T IFguMjUgKi8KKyAgICAiTmV0QklPUyIsCQkJCS8qIDA4IElCTSBORVRCSU9TICovCisgICAgIlN1 cGVyTEFUIiwJCQkJLyogMDcgTWVyaWRpYW4gU3VwZXJMQVQgKi8KKyAgICAiRmlsZSIsCQkJCS8q IDEwIEZpbGUgKi8KKyAgICAiQ29tbWFuZCIsCQkJCS8qIDExIFN1YnByb2Nlc3MgKHBpcGUpICov CisgICAgIkRMTCIsCQkJCS8qIDEyIERMTCBkb2VzIGkvbyAqLworICAgICJYLjI1IiwJCQkJLyog MTMgSUJNIEFJWExpbmsgWC4yNSAqLworICAgICJYLjI1IiwJCQkJLyogMTQgSFAtVVggWC4yNSAq LworICAgICJQVFkiLAkJCQkvKiAxNSBQc2V1ZG90ZXJtaW5hbCAqLworICAgICJTU0giLAkJCQkv KiAxNiBTU0ggKi8KKyAgICAiPEVSUk9SPiIsCQkJCS8qIDE3IEluIGNhc2UgbmV3IHR5cGVzIGFy ZSBhZGRlZCAqLworICAgICI8RVJST1I+IiwJCQkJLyogMTggYnV0IG5vYm9keSByZW1lbWJlcnMg dG8gdXBkYXRlICovCisgICAgIjxFUlJPUj4iLAkJCQkvKiAxOSB0aGlzIHRhYmxlIC4uLiAqLwor ICAgIE5VTEwJCQkJLyogMjAgKi8KK307CitzdGF0aWMgaW50IG5uZXRuYW1lID0gKHNpemVvZihu ZXRuYW1lKSAvIHNpemVvZihjaGFyICopKTsKKworI2VuZGlmIC8qIE5FVENPTk4gKi8KKworI2lm ZGVmIENLX0FOU0lDCit2b2lkCitzY3JlZW5jKGludCBmLCBjaGFyIGMsQ0tfT0ZGX1QgbixjaGFy ICpzKQorI2Vsc2UKK0NLVk9JRAorc2NyZWVuYyhmLGMsbixzKQoraW50IGY7ICAgICAgICAgIC8q IGFyZ3VtZW50IGRlc2NyaXB0b3IgKi8KK2NoYXIgYzsgICAgICAgICAvKiBhIGNoYXJhY3RlciBv ciBzbWFsbCBpbnRlZ2VyICovCitDS19PRkZfVCBuOyAgICAgLyogYSBsb25nIGludGVnZXIgKi8K K2NoYXIgKnM7ICAgICAgICAvKiBhIHN0cmluZyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisv KiBzY3JlZW5jKCkgKi8geworI2lmZGVmIENLX1NTTAorICAgIGV4dGVybiBpbnQgdGxzX2FjdGl2 ZV9mbGFnLCBzc2xfYWN0aXZlX2ZsYWc7CisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxP R0NPREUKKyAgICBleHRlcm4gaW50IHR0bnByb3RvOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisg ICAgc3RhdGljIGludCBxID0gMDsKKyAgICBzdGF0aWMgbG9uZyBmY250ID0gMEw7CQkvKiBOdW1i ZXIgb2YgZmlsZXMgdHJhbnNmZXJyZWQgKi8KKyAgICBzdGF0aWMgQ0tfT0ZGX1QgZnNpeiA9IChD S19PRkZfVCktMTsgLyogQ29weSBvZiBmaWxlIHNpemUgKi8KKyAgICBzdGF0aWMgQ0tfT0ZGX1Qg ZmJ5dCA9IDBMOyAvKiBUb3RhbCBmaWxlIGJ5dGVzIG9mIGFsbCBmaWxlcyB0cmFuc2ZlcnJlZCAq LworICAgIHN0YXRpYyBDS19PRkZfVCBob3dmYXIgPSAwTDsgLyogSG93IG11Y2ggb2YgY3VycmVu dCBmaWxlIGhhcyBiZWVuIHhmZXInZCAqLworICAgIHN0YXRpYyBpbnQgIHBjdGxibCA9IDBMOyAg LyogUGVyY2VudCBkb25lIHZzIEJ5dGVzIHNvIGZhciAqLworICAgIGxvbmcgY3BzID0gMEw7CisK KyAgICBpbnQgbmV0ID0gMDsKKyAgICBpbnQgeG5ldCA9IDA7CisgICAgaW50IGZ0cCA9IDA7Cisg ICAgaW50IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmlu ZyAqLworICAgIGludCBlcnJvcnMgPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIGNv dW50ZXIgKi8KKyAgICBpbnQgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3Jr ZXIgKi8KKworICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgY2luaXQiLCIiLGNpbml0KTsKKyAgICBk ZWJ1ZyhGMTAxLCJzY3JlZW5jIGNlbmR3IiwiIixjZW5kdyk7CisKKyAgICBpZiAoIXMpIHMgPSAi IjsgICAgICAgICAgICAgICAgICAgICAvKiBBbHdheXMgZG8gdGhpcy4gKi8KKworICAgIGZ0cCA9 ICh3aGF0ICYgV19GVFApID8gMSA6IDA7CS8qIEZUUCBvciBLZXJtaXQgKi8KKyAgICBuZXQgPSBu ZXR3b3JrIHx8IGZ0cDsKKyAgICB4bmV0ID0gZnRwID8gMSA6IG5ldHR5cGU7CQkvKiBORVRfVENQ QiA9PSAxICovCisKKyAgICBpZiAoY2luaXQgPT0gMCB8fCBjZW5kdyA+IDApIHsgICAgICAvKiBI YW5kbGUgYm9yZGVybGluZSBjYXNlcy4uLiAqLworICAgICAgICBpZiAoZiA9PSBTQ1JfQ1cpIHsg ICAgICAgICAgICAgIC8qIENsb3NlIHdpbmRvdywgYnV0IGl0J3Mgbm90IG9wZW4gKi8KKyAgICAg ICAgICAgIGZ0X3dpbiA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg ICAgZGVidWcoRjExMSwic2NyZWVuYyBBIixzLGYpOworICAgICAgICBpZiAoZiA9PSBTQ1JfRU0g fHwKKyAgICAgICAgICAgKGYgPT0gU0NSX1BUICYmIGMgPT0gJ0UnKSkgeyAvKiBGYXRhbCBlcnJv ciBiZWZvcmUgd2luZG93IG9wZW4gKi8KKyAgICAgICAgICAgIGNvbm9sbCgiIik7IGNvbm9jKCc/ Jyk7IGNvbm9sbChzKTsgcmV0dXJuOyAvKiBSZWd1bGFyIGRpc3BsYXkgKi8KKyAgICAgICAgfQor ICAgIH0KKyAgICBpZiAoY2luaXQgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGNh bGwgaW5pdHNjcigpIG9uY2UgKi8KKwljaGFyICogczsKKwkvKiBDaGVjayB0aGVzZSBub3cgLS0g aWYgdGhleSBhcmUgZGVmaW5lZCBidXQgbm90IG51bWVyaWMgKi8KKwkvKiB0aGV5IGNhbiBjcmFz aCBjdXJzZXMgKi8KKwlzID0gZ2V0ZW52KCJMSU5FUyIpOworCWlmIChzKSBpZiAoIXJkaWdpdHMo cykpIHsKKwkgICAgcHJpbnRmKCI/TElORVMgdmFyaWFibGUgbm90IG51bWVyaWM6IFwiJXNcIi5c biIscyk7CisJICAgIHByaW50ZigiKEZ1bGxzY3JlZW4gZGlzcGxheSBkaXNhYmxlZClcbiIpOwor CSAgICBmZGlzcGxhID0gWFlGRF9TOworCSAgICByZXR1cm47CisJfQorCXMgPSBnZXRlbnYoIkNP TFVNTlMiKTsKKwlpZiAocykgaWYgKCFyZGlnaXRzKHMpKSB7CisJICAgIHByaW50ZigiP0NPTFVN TlMgdmFyaWFibGUgbm90IG51bWVyaWM6IFwiJXNcIi5cbiIscyk7CisJICAgIHByaW50ZigiKEZ1 bGxzY3JlZW4gZGlzcGxheSBkaXNhYmxlZClcbiIpOworCSAgICBmZGlzcGxhID0gWFlGRF9TOwor CSAgICByZXR1cm47CisJfQorICAgICAgICBjZW5kdyA9IDE7ICAgICAgICAgICAgICAgICAgICAg IC8qIE5ldyB3aW5kb3cgbmVlZHMgcmVwYWludGluZyAqLworI2lmZGVmIENPTU1FTlQKKyAgICAg ICAgaWYgKCFpbml0c2NyKCkpIHsgICAgICAgICAgICAgICAvKiBPb3BzLCBjYW4ndCBpbml0aWFs aXplIHdpbmRvdz8gKi8KKy8qCisgIEluIGZhY3QsIHRoaXMgZG9lc24ndCBoYXBwZW4uICAibWFu IGN1cnNlcyIgc2F5cyBpbml0c2NyKCkgaGFsdHMgdGhlCisgIGVudGlyZSBwcm9ncmFtIGlmIGl0 IGZhaWxzLCB3aGljaCBpcyB0cnVlIG9uIHRoZSBzeXN0ZW1zIHdoZXJlIEkndmUKKyAgdGVzdGVk IGl0LiAgSXQgd2lsbCBmYWlsIGlmIHlvdXIgdGVybWluYWwgdHlwZSBpcyBub3Qga25vd24gdG8g aXQuCisgIFRoYXQncyB3aHkgU0VUIEZJTEUgRElTUExBWSBGVUxMU0NSRUVOIGNhbGxzIHRnZXRl bnQoKSB0byBtYWtlIHN1cmUgdGhlCisgIHRlcm1pbmFsIHR5cGUgaXMga25vd24gYmVmb3JlIGFs bG93aW5nIGEgY3Vyc2VzIGRpc3BsYXkuCisqLworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs IkNVUlNFUyBJTklUU0NSIEVSUk9SXHJcbiIpOworICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRf UzsgICAgICAgICAgIC8qIEZhbGwgYmFjayB0byBDUlQgZGlzcGxheSAqLworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2luaXQrKzsgICAgICAgICAg ICAgICAgICAgIC8qIFdpbmRvdyBpbml0aWFsaXplZCBvayAqLworICAgICAgICAgICAgZGVidWco RjEwMCwiQ1VSU0VTIElOSVRTQ1IgT0siLCIiLDApOworICAgICAgICB9CisjZWxzZSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBzb21lIG1lbW9yeS4gKi8KKyNpZmRl ZiBDS19ORVdURVJNCisgICAgICAgIC8qIChGcm9tIEFuZHkgRnlmZSA8YW5keUB2bHNpLmNzLmNh bHRlY2guZWR1PikKKyAgICAgICAgICAgU3lzdGVtIFYgY3Vyc2VzIHNlZW1zIHRvIHJlc2VydmUg dGhlIHJpZ2h0IHRvIGFsdGVyIHRoZSBidWZmZXJpbmcKKyAgICAgICAgICAgb24gdGhlIG91dHB1 dCBGSUxFKiB3aXRob3V0IHJlc3RvcmluZyBpdC4gIEZvcnR1bmF0ZWx5IFN5c3RlbSBWCisgICAg ICAgICAgIGN1cnNlcyBwcm92aWRlcyBuZXd0ZXJtKCksIGFuIGFsdGVybmF0aXZlIHRvIGluaXRz Y3IoKSwgdGhhdAorICAgICAgICAgICBhbGxvd3MgdXMgdG8gc3BlY2lmeSBleHBsaWNpdGx5IHRo ZSB0ZXJtaW5hbCB0eXBlIGFuZCBpbnB1dCBhbmQKKyAgICAgICAgICAgb3V0cHV0IEZJTEUgcG9p bnRlcnMuICBUaHVzIHdlIGR1cGxpY2F0ZSBzdGRvdXQsIGFuZCBsZXQgY3Vyc2VzCisgICAgICAg ICAgIGhhdmUgdGhlIGNvcHkuICBUaGUgb3JpZ2luYWwgcmVtYWlucyB1bmFsdGVyZWQuICBVbmZv cnR1bmF0ZWx5LAorICAgICAgICAgICBuZXd0ZXJtKCkgc2VlbXMgdG8gYmUgcGFydGljdWxhciB0 byBTeXN0ZW0gVi4KKyAgICAgICAgKi8KKyAgICAgICAgcyA9IGdldGVudigiVEVSTSIpOworICAg ICAgICBpZiAoY2tfZmQgPCAwKSB7CisgICAgICAgICAgICBja19mZCA9IGR1cChmaWxlbm8oc3Rk b3V0KSk7CisgICAgICAgICAgICBja19zdGRvdXQgPSAoY2tfZmQgPj0gMCkgPyAoRklMRSAqKWZk b3Blbihja19mZCwgInciKSA6IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjEwMCwi c2NyZWVuYyBuZXd0ZXJtLi4uIiwiIiwwKTsKKworLyogTk9URTogSXQgbWlnaHQgYmUgbmVjZXNz YXJ5IHRvIGRvIHRoaXMgd2l0aCBzdGRpbiB0b28hICovCisvKiBUaGlzIHdvdWxkIGhhdmUgYmVl biB0aGUgY2FzZSBpbiBGcmVlQlNEIDQuMSBidXQgdGhleSBmaXhlZCB0aGUgKi8KKy8qIHByb2Js ZW0gYnkgcmVzdG9yaW5nIHRoZSBidWZmZXJpbmcgb2Ygc3RkaW4gYmVmb3JlIHRoZSBmaW5hbCBy ZWxlYXNlLiAqLworLyogKEJ1dCBULkUuIERpY2tleSBzYXlzIHN0ZGluIGlzIG5vdCBidWZmZXJl ZD8pICovCisKKyAgICAgICAgaWYgKGNrX3N0ZG91dCA9PSBOVUxMIHx8IG5ld3Rlcm0ocywgY2tf c3Rkb3V0LCBzdGRpbikgPT0gMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAg ICAgICAgICAgICJGdWxsc2NyZWVuIGRpc3BsYXkgbm90IHN1cHBvcnRlZCBmb3IgdGVybWluYWwg dHlwZTogJXNcclxuIixzKTsKKyAgICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7ICAgICAgICAg ICAvKiBVc2UgQ1JUIGluc3RlYWQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor ICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIG5ld3Rlcm0gb2siLCIiLDApOworI2Vsc2UKKyAg ICAgICAgZGVidWcoRjEwMCwic2NyZWVuIGNhbGxpbmcgaW5pdHNjciIsIiIsMCk7CisgICAgICAg IGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMuICov CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbiBpbml0c2NyIG9rIiwiIiwwKTsKKyNlbmRpZiAv KiBDS19ORVdURVJNICovCisgICAgICAgIGNpbml0Kys7ICAgICAgICAgICAgICAgICAgICAgICAg LyogUmVtZW1iZXIgY3Vyc2VzIHdhcyBpbml0aWFsaXplZC4gKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgfQorICAgIGZ0X3dpbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdp bmRvdyBpcyBvcGVuICovCisgICAgaWYgKHJlcGFpbnQpIHsKKyNpZmRlZiBDS19XUkVGUkVTSAor LyoKKyAgVGhpcyB0b3RhbGx5IHJlcGFpbnRzIHRoZSBzY3JlZW4sIGp1c3Qgd2hhdCB3ZSB3YW50 LCBidXQgd2UgY2FuIG9ubHkKKyAgZG8gdGhpcyB3aXRoIHJlYWwgY3Vyc2VzLCBhbmQgdGhlbiBv bmx5IGlmIGNsZWFyb2soKSBhbmQgd3JlZnJlc2goKSBhcmUKKyAgcHJvdmlkZWQgaW4gdGhlIGN1 cnNlcyBsaWJyYXJ5LgorKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgUmVzdG9yZUNtZE1vZGUoKTsK KyNlbHNlCisjaWZkZWYgUU5YCisjaWZuZGVmIFFOWDE2CisgICAgICAgIGNsZWFyb2soc3Rkc2Ny LCAxKTsgICAgICAgICAgICAgLyogUU5YIGRvZXNuJ3QgaGF2ZSBjdXJzY3IgKi8KKyNlbmRpZiAv KiBRTlgxNiAqLworICAgICAgICB3cmVmcmVzaChzdGRzY3IpOworI2Vsc2UKKyAgICAgICAgd3Jl ZnJlc2goY3Vyc2NyKTsKKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbHNl ICAvKiBObyBDS19XUkVGUkVTSCAqLworLyoKKyAgS2VybWl0J3MgZG8taXQteW91cnNlbGYgbWV0 aG9kLCB3b3JrcyB3aXRoIGFsbCB0eXBlcyBvZiBmdWxsc2NyZWVuCisgIHN1cHBvcnQsIGJ1dCBk b2VzIG5vdCByZXBhaW50IGFsbCB0aGUgZmllbGRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlbmFt ZQorICBpcyBsb3N0LCBiZWNhdXNlIGl0IGFycml2ZXMgYXQgYSBjZXJ0YWluIHRpbWUgYW5kIG5l dmVyIGNvbWVzIGFnYWluLCBhbmQKKyAgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBzYXZlIGl0 IGFueXdoZXJlLiAgTWFraW5nIHRoaXMgbWV0aG9kIHdvcmsgZm9yCisgIGFsbCBmaWVsZHMgd291 bGQgYmUgYSByYXRoZXIgbWFqb3IgcmVjb2RpbmcgdGFzaywgZHVwbGljYXRpbmcgd2hhdCBjdXJz ZXMKKyAgYWxyZWFkeSBkb2VzLCBhbmQgd291bGQgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkgYW5k IHN0b3JhZ2Ugc3BhY2UuCisqLworICAgICAgICBjZW5kdyA9IDE7CisjZW5kaWYgLyogQ0tfV1JF RlJFU0ggKi8KKyAgICAgICAgcmVwYWludCA9IDA7CisgICAgfQorICAgIGlmIChjZW5kdykgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgcHJldmlvdXNseSAq LworI2lmZGVmIFZNUworICAgICAgICBpbml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8q IChvciBzaG91bGQgaGF2ZSBiZWVuISkgKi8KKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgdG91 Y2h3aW4oc3Rkc2NyKTsKKyAgICAgICAgcmVmcmVzaCgpOworI2Vsc2UKKyNpZmRlZiBRTlgKKy8q CisgIEluIFFOWCwgaWYgd2UgZG9uJ3QgY2FsbCBpbml0c2NyKCkgaGVyZSB3ZSBjb3JlIGR1bXAu CisgIEkgZG9uJ3QgaGF2ZSBhbnkgUU5YIGN1cnNlcyBkb2N1bWVudGF0aW9uLCBidXQgb3RoZXIg Y3Vyc2VzIG1hbnVhbHMKKyAgc2F5IHRoYXQgaW5pdHNjcigpIHNob3VsZCBiZSBjYWxsZWQgb25s eSBvbmNlIHBlciBhcHBsaWNhdGlvbiwgYW5kCisgIGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBvbiBv dGhlciBzeXN0ZW1zLCBjYWxsaW5nIGluaXRzY3IoKSBoZXJlIGdlbmVyYWxseQorICByZXN1bHRz IGluIGEgY29yZSBkdW1wLgorKi8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyByZS1jYWxs aW5nIGluaXRzY3IgUU5YIiwiIiwwKTsKKyAgICAgICAgaW5pdHNjcigpOworICAgICAgICBjbGVh cigpOworICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgQnV0IGV2ZW4g c28sIHNlY29uZCBhbmQgc3Vic2VxdWVudCBjdXJzZXMgZGlzcGxheXMgYXJlIG1lc3NlZCB1cC4K KyAgQ2FsbGluZyB0b3VjaHdpbiwgcmVmcmVzaCwgZXRjLCBkb2Vzbid0IG1ha2UgYW55IGRpZmZl cmVuY2UuCisqLworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgdG91Y2h3aW4g UU5YIiwiIiwwKTsKKyAgICAgICAgdG91Y2h3aW4oc3Rkc2NyKTsKKyAgICAgICAgZGVidWcoRjEw MCwic2NyZWVuYyBjYWxsaW5nIHJlZnJlc2ggUU5YIiwiIiwwKTsKKyAgICAgICAgcmVmcmVzaCgp OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2Vsc2UgLyogQWxsIG90aGVycy4uLiAqLworICAg ICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgY2xlYXIiLCIiLDApOworICAgICAgICBj bGVhcigpOworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNsZWFyIG9rIiwiIiwwKTsKKyNl bmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICAgICAgZGVidWcoRjEwMCwic2Ny ZWVuYyBzZXR1cCBvayIsIiIsMCk7CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgZG9pbmcg Zmlyc3QgbW92ZSIsIiIsMCk7CisgICAgICAgIG1vdmUoQ1dfQkFOLDApOyAgICAgICAgICAgICAg ICAgLyogRGlzcGxheSB0aGUgYmFubmVyICovCisgICAgICAgIGRlYnVnKEYxMTAsInNjcmVlbmMg bXlob3N0IixteWhvc3QsMCk7CisjaWZkZWYgVENQU09DS0VUCisgICAgICAgIGRlYnVnKEYxMTAs InNjcmVlbmMgbXlpcGFkZHIiLG15aXBhZGRyLDApOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor I2lmZGVmIEhQVVgxMDEwCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyBmaXJz dCBwcmludHcuLi4iLCIiLDApOworLyogUmlnaHQgaGVyZSBpcyB3aGVyZSBIUC1VWCAxMC4xMCBs aWJ4Y3Vyc2UuMSBSZXYgNzYuMjAgaGFuZ3MuLi4gKi8KKyNlbmRpZiAvKiBIUFVYMTAxMCAqLwor ICAgICAgICBpZiAobXlob3N0WzBdKSB7CisjaWZkZWYgVENQU09DS0VUCisgICAgICAgICAgICBp ZiAoIW15aXBhZGRyWzBdCisjaWZkZWYgT1MyCisgICAgICAgICAgICAgICAgIC8qIFdlIG5lZWQg dG8gcGVyZm9ybSB0aGlzIHRlc3QgYmVjYXVzZSBvbiBub24tVENQL0lQICovCisgICAgICAgICAg ICAgICAgIC8qIHN5c3RlbXMgdGhlIGNhbGwgdG8gZ2V0bG9jYWxpcGFkZHIoKSByZXN1bHRzIGlu IGEgICovCisgICAgICAgICAgICAgICAgIC8qIEROUyBMb29rdXAgd2hpY2ggdGFrZXMgc2V2ZXJh bCBtaW51dGVzIHRvIHRpbWUgb3V0ICovCisgICAgICAgICAgICAgICAgICYmIG5ldCAmJgorICAg ICAgICAgICAgICAgICAoeG5ldCA9PSBORVRfVENQQSB8fCB4bmV0ID09IE5FVF9UQ1BCCisjaWZk ZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgICAgICAgfHwgeG5ldCA9PSBORVRfU1NICisjZW5k aWYgLyogU1NIQlVJTFRJTiAqLworICAgICAgICAgICAgICAgICAgKQorI2VuZGlmIC8qIE9TMiAq LworICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgIGdldGxvY2FsaXBhZGRyKCk7Cisg ICAgICAgICAgICBpZiAobXlpcGFkZHJbMF0gJiYgc3RyY21wKChjaGFyICopbXlob3N0LChjaGFy ICopbXlpcGFkZHIpKQorICAgICAgICAgICAgICBwcmludHcoIiVzLCAlcyBbJXNdIix2ZXJzaW8s KGNoYXIgKilteWhvc3QsKGNoYXIgKilteWlwYWRkcik7CisgICAgICAgICAgICBlbHNlCisjZW5k aWYgLyogVENQU09DS0VUICovCisgICAgICAgICAgICAgIHByaW50dygiJXMsICVzIix2ZXJzaW8s KGNoYXIgKilteWhvc3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnR3KCIl cyIsdmVyc2lvKTsKKyAgICAgICAgfQorI2lmZGVmIEhQVVgxMDEwCisgICAgICAgIGRlYnVnKEYx MDAsInNjcmVlbmMgZmlyc3QgcHJpbnR3IHJldHVybnMiLCIiLDApOworI2VuZGlmIC8qIEhQVVgx MDEwICovCisgICAgICAgIG1vdmUoQ1dfRElSLDMpOworICAgICAgICBwcmludHcoIkN1cnJlbnQg RGlyZWN0b3J5OiAlcyIsemd0ZGlyKCkpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxv bmcpIHpndGRpcigpICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICBpZiAobmV0KSB7CisgICAgICAgICAgICBtb3ZlKENXX0xJTiw4KTsKKyAgICAgICAgICAg IHByaW50dygiTmV0d29yayBIb3N0OiAlcyIsCisjaWZkZWYgTkVXRlRQCisJCSAgIGZ0cCA/IChm dHBfaG9zdCA/IGZ0cF9ob3N0IDogIih1bmtub3duKSIpIDoKKyNlbmRpZiAvKiBORVdGVFAgKi8K KwkJICAgdHRuYW1lCisJCSAgICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtb3Zl KENXX0xJTiwwKTsKKyAgICAgICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVz Iix0dG5hbWUpOworICAgICAgICB9CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTElOLCAobG9uZykg dHRuYW1lICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworCisgICAgICAg IGlmIChuZXQpIHsKKyAgICAgICAgICAgIG1vdmUoQ1dfU1BELDgpOworICAgICAgICAgICAgcHJp bnR3KCJOZXR3b3JrIFR5cGU6ICIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92 ZShDV19TUEQsMSk7CisgICAgICAgICAgICBwcmludHcoIkNvbW11bmljYXRpb24gU3BlZWQ6ICIp OworICAgICAgICB9CisgICAgICAgIG1vdmUoQ1dfU1BELDIyKTsgICAgICAgICAgICAgICAgLyog U2VyaWFsIHNwZWVkIG9yIG5ldHdvcmsgdHlwZSAqLworICAgICAgICBpZiAobmV0KSB7CisjaWZk ZWYgTkVUQ09OTgorCSAgICBpbnQgc2VjdXJlID0gMDsKKwkgICAgY2hhciAqIHhuYW1lOworCSAg ICBpZiAoeG5ldCA+IG5uZXRuYW1lKQorCSAgICAgIHhuYW1lID0gIltFUlJPUl0iOworCSAgICBl bHNlCisJICAgICAgeG5hbWUgPSBuZXRuYW1lW3huZXRdOworI2lmZGVmIE5FV0ZUUAorICAgICAg ICAgICAgaWYgKGZ0cCkgeworCQlpZiAoZnRwaXNzZWN1cmUoKSkKKwkJICBzZWN1cmUgPSAxOwor CSAgICB9IGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkgICAgICBpZiAoMAorI2lmZGVmIFNT SEJVSUxUSU4KKyAgICAgICAgICAgICAgICB8fCBJU19TU0goKQorI2VuZGlmIC8qIFNTSEJVSUxU SU4gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgfHwgY2tfdG5fZW5j cnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJT04g Ki8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2ZsYWcgfHwg c3NsX2FjdGl2ZV9mbGFnCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NPREUKKyNp ZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICB8 fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgorI2Vu ZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2VuZGlm IC8qIFJMT0dDT0RFICovCisgICAgICAgICAgICAgICAgICkgeworCQlzZWN1cmUgPSAxOworCSAg ICB9CisJICAgIGlmIChzZWN1cmUpIHsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICAgICAgICAgIGNoYXIgYnVmWzMwXTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwiJXMg KFNFQ1VSRSkiLHhuYW1lKTsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BE LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBidWYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyAgICAgICAgICAgICAgICBwcmludHcoIiVzIChTRUNVUkUpIix4bmFtZSk7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50dygiJXMiLHhuYW1lKTsKKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19T UEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHhuYW1lCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyog S1VJICovCisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgcHJpbnR3KCIobmV0d29y aykiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIobmV0d29yaykiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAv KiBLVUkgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBpZiAoc3BlZWQgPCAwTCkKKyAgICAgICAgICAgICAgc3BlZWQgPSB0dGdzcGQoKTsKKyAg ICAgICAgICAgIGlmIChzcGVlZCA+IDBMKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWVkID09 IDg4ODApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCI3NS8xMjAwIik7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiNzUv MTIwMCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBL OTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgY2hhciBzcGVlZGJ1Zls2NF0gOworICAgICAgICAgICAgICAgICAgICBz cHJpbnRmKHNwZWVkYnVmLCAiJWxkIiwgc3BlZWQpOworICAgICAgICAgICAgICAgICAgICBwcmlu dHcoIiVzIixzcGVlZGJ1Zik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBzcGVlZGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50 dygidW5rbm93biIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgIih1bmtub3duKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vu ZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBtb3ZlKENXX1BBUiwxNCk7CisgICAgICAgIHByaW50dygiUGFyaXR5OiAlcyIs ZnRwID8gIm5vbmUiIDogcGFybmFtKChjaGFyKXBhcml0eSkpOworI2lmZGVmIEtVSQorI2lmbmRl ZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUEFSLAorICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgcGFybmFtKChjaGFyKXBhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNl bmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ0tfVElNRVJTCisgICAg ICAgIGlmICgvKiBydHRmbGcgJiYgKi8gcHJvdG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAg ICAgbW92ZShDV19UTU8sIDkpOyBwcmludHcoIlJUVC9UaW1lb3V0OiIpOyB9CisjZW5kaWYgLyog Q0tfVElNRVJTICovCisgICAgICAgIG1vdmUoQ1dfVFlQLDExKTsgcHJpbnR3KCJGaWxlIFR5cGU6 Iik7CisgICAgICAgIG1vdmUoQ1dfU0laLDExKTsgcHJpbnR3KCJGaWxlIFNpemU6Iik7CisgICAg ICAgIG1vdmUoQ1dfUENELCA4KTsKKyAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgcGN0bGJs ID0gKHdoYXQgJiBXX1NFTkQpOworICAgICAgICBwcmludHcoIiVzOiIsIHBjdGxibCA/ICJQZXJj ZW50IERvbmUiIDogIkJ5dGVzIFNvIEZhciIpOworCisjaWZkZWYgWFlaX0lOVEVSTkFMCisgICAg ICAgIG1vdmUoQ1dfQkFSLCAxKTsKKyAgICAgICAgcHJpbnR3KCIlMTBzIFByb3RvY29sOiIsIGZ0 cCA/ICJGVFAiIDogcHRhYltwcm90b2NvbF0ucF9uYW1lKTsKKyNlbmRpZiAvKiBYWVpfSU5URVJO QUwgKi8KKyNpZmRlZiBDS19QQ1RfQkFSCisgICAgICAgIGlmICh0aGVybW9tZXRlcikgeworICAg ICAgICAgICAgb2xkcGN0ID0gcGN0ID0gMDsKKyAgICAgICAgICAgIG1vdmUoQ1dfQkFSLDIyKTsK KyAgICAgICAgICAgIHByaW50dygiICAgIC4uLjEwLi4uMjAuLi4zMC4uLjQwLi4uNTAuLi42MC4u LjcwLi4uODAuLi45MC4uMTAwIik7CisgICAgICAgICAgICBtb3ZlKENXX0JBUiwyMis1Nik7Cisg ICAgICAgIH0KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisgICAgICAgIG1vdmUoQ1dfVFIsICAx KTsgcHJpbnR3KCJFc3RpbWF0ZWQgVGltZSBMZWZ0OiIpOworICAgICAgICBtb3ZlKENXX0NQLCAg Mik7IHByaW50dygiVHJhbnNmZXIgUmF0ZSwgQ1BTOiIpOworICAgICAgICBtb3ZlKENXX1dTLCAg OCk7IHByaW50dygiV2luZG93IFNsb3RzOiVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAmJiAhZnRwKSA/CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiIDogIiBOL0EiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgIG1vdmUoQ1dfUFQsICA5KTsgcHJpbnR3KCJQYWNrZXQgVHlwZToiKTsK KyAgICAgICAgaWYgKGZ0cCB8fCBwcm90b2NvbCAhPSBQUk9UT19LKSB7CisJICAgIG1vdmUoQ1df UFQsMjIpOworICAgICAgICAgICAgcHJpbnR3KCIlcyIsICJOL0EiKTsKKyAgICAgICAgICAgIG1v dmUoQ1dfUEMsICAxMSk7IHByaW50dygiSS9PIENvdW50OiIpOworICAgICAgICAgICAgbW92ZShD V19QTCwgIDEwKTsgcHJpbnR3KCJJL08gTGVuZ3RoOiIpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgbW92ZShDV19QQywgIDgpOyBwcmludHcoIlBhY2tldCBDb3VudDoiKTsKKyAgICAg ICAgICAgIG1vdmUoQ1dfUEwsICA3KTsgcHJpbnR3KCJQYWNrZXQgTGVuZ3RoOiIpOworICAgICAg ICB9CisjaWZuZGVmIENPTU1FTlQKKyAgICAgICAgbW92ZShDV19QUiwgIDkpOyBwcmludHcoIkVy cm9yIENvdW50OiIpOworI2Vsc2UKKyAgICAgICAgbW92ZShDV19QUiwgIDIpOyBwcmludHcoIlBh Y2tldCBSZXRyeSBDb3VudDoiKTsKKyNlbmRpZgorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgbW92 ZShDV19QQiwgIDIpOyBwcmludHcoIlBhY2tldCBCbG9jayBDaGVjazoiKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgICAgIG1vdmUoQ1dfRVJSLDEwKTsgcHJpbnR3KCJMYXN0IEVycm9yOiIp OworICAgICAgICBtb3ZlKENXX01TRywgOCk7IHByaW50dygiTGFzdCBNZXNzYWdlOiIpOworCWlm ICh4ZnJtc2cpIHsKKwkgICAgbW92ZShDV19NU0csIDIyKTsgcHJpbnR3KCIlcyIseGZybXNnKTsK KwkgICAgbWFrZXN0cigmeGZybXNnLE5VTEwpOworCX0KKyAgICAgICAgbW92ZShDV19JTlQsIDAp OworICAgICAgICBpZiAoIXhmcmludCkgeworICAgICAgICAgICAgcHJpbnR3KCIoVHJhbnNmZXIg aW50ZXJydXB0aW9uIGlzIGRpc2FibGVkKSIpOworICAgICAgICB9IGVsc2UgeworI2lmZGVmIENL X05FRURfU0lHCisgICAgICAgICAgICBwcmludHcoCisiPCVzPlggdG8gY2FuY2VsIGZpbGUsIDwl cz5aIHRvIGNhbmNlbCBncm91cCwgPCVzPjxDUj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0IiwKKyAg ICAgICAgICAgICAgICAgICBkYmNocihlc2NhcGUpLCBkYmNocihlc2NhcGUpLCBkYmNocihlc2Nh cGUpCisgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIG1vdmUoQ1dfSU5UICsgMSwg MCk7CisgICAgICAgICAgICBwcmludHcoCisiPCVzPkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIF5D IHRvIHF1aXQgaW1tZWRpYXRlbHksIDwlcz5MIHRvIHJlZnJlc2ggc2NyZWVuLiIsCisgICAgICAg ICAgICAgICAgICAgZGJjaHIoZXNjYXBlKSwgZGJjaHIoZXNjYXBlKQorICAgICAgICAgICAgICAg ICAgICk7CisjZWxzZSAvKiAhQ0tfTkVFRF9TSUcgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfSU5U LCAwKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LKSB7 CisgICAgICAgICAgICAgICAgcHJpbnR3KAorIlggdG8gY2FuY2VsIGZpbGUsIFogdG8gY2FuY2Vs IGdyb3VwLCA8RW50ZXI+IHRvIHJlc2VuZCBsYXN0IHBhY2tldCwiCisgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICB9CisjZWxzZSAvKiAhT1MyICovCisjaWZkZWYgVk1TICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gVk1TIGF2b2lkIGJvdHRvbSBsaW5lICov CisgICAgICAgICAgICBwcmludHcoCisiWDogQ2FuY2VsIHRoaXMgZmlsZTsgRTogQ2FuY2VsIHRy YW5zZmVyOyBeQzogUXVpdCBub3c7IF5XOiBSZWZyZXNoIHNjcmVlbi4iCisgICAgICAgICAgICAg ICAgICAgKTsKKyNlbHNlCisgICAgICAgICAgICBwcmludHcoCisiWCB0byBjYW5jZWwgZmlsZSwg WiB0byBjYW5jZWwgZ3JvdXAsIDxDUj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0LCIKKyAgICAgICAg ICAgICAgICAgICApOworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworCisjaWZu ZGVmIFZNUworICAgICAgICAgICAgbW92ZShDV19JTlQgKyAxLCAwKTsKKyAgICAgICAgICAgIGlm IChwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICAgICAgcHJpbnR3KAorIkUgdG8g c2VuZCBFcnJvciBwYWNrZXQsIF5DIHRvIHF1aXQgaW1tZWRpYXRlbHksIF5MIHRvIHJlZnJlc2gg c2NyZWVuLiIKKyAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgcHJpbnR3KCJeQyB0byBjYW5jZWwgZmlsZSB0cmFuc2Zlci4iKTsK KyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBDS19ORUVEX1NJRyAq LworICAgICAgICB9CisgICAgICAgIHJlZnJlc2goKTsKKyAgICAgICAgY2VuZHcgPSAwOworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIHN3aXRjaCIsIiIsZik7CisgICAgZGVidWcoRjAw MCwiU0NSRUVOQyBjIiwiIixjKTsKKyAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIG4iLCIiLG4pOwor CisgICAgbGVuID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGFy Z3VtZW50IHN0cmluZyAqLworICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAgICAgICAgICAg IC8qIEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAqLworICAgICAgY2FzZSBTQ1JfRk46ICAgICAg ICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCisgICAgICAgIG9sZHBjdCA9IHBjdCA9IDBM OyAgICAgICAgICAgICAgLyogUmVzZXQgcGVyY2VudHMgKi8KKyNpZmRlZiBHRlRJTUVSCisgICAg ICAgIGd0diA9IChDS0ZMT0FUKSAtMS4wOworICAgICAgICAvKiBvbGRndHYgPSAoQ0tGTE9BVCkg LTEuMDsgKi8KKyNlbHNlCisgICAgICAgIGd0diA9IC0xTDsKKyAgICAgICAgLyogb2xkZ3R2ID0g LTFMOyAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgb2xkd2luID0gLTE7CisgICAg ICAgIGZzaXogPSAoQ0tfT0ZGX1QpLTE7CQkvKiBJbnZhbGlkYXRlIHByZXZpb3VzIGZpbGUgc2l6 ZSAqLworICAgICAgICBtb3ZlKENXX1BDRCwyMik7ICAgICAgICAgICAgICAgIC8qIEVyYXNlIHBl cmNlbnQgZG9uZSBmcm9tIGxhc3QgdGltZSAqLworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwg KGxvbmcpIDAgKTsKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfRkZDLCAobG9uZykgMCApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgbW92ZShDV19TSVosMjIpOyAgICAg ICAgICAgICAgICAvKiBFcmFzZSBmaWxlIHNpemUgZnJvbSBsYXN0IHRpbWUgKi8KKyNpZmRlZiBL VUkKKyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19TSVosIChsb25nKSAwICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlm IC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICBtb3ZlKENXX0VSUiwyMik7 ICAgICAgICAgICAgICAgIC8qIEFuZCBsYXN0IGVycm9yIG1lc3NhZ2UgKi8KKyNpZmRlZiBLVUkK KyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19FUlIsIChsb25nKSAiIiApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAv KiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgU1RS RUFNSU5HCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LICYmIHN0cmVhbW9rKSB7Cisg ICAgICAgICAgICBtb3ZlKENXX0JBUiwgMSk7CisjaWZkZWYgWFlaX0lOVEVSTkFMCisgICAgICAg ICAgICBwcmludHcoIiAgIEtlcm1pdCBTVFJFQU1JTkc6Iik7CisjZWxzZQorICAgICAgICAgICAg cHJpbnR3KCIgICAgICAgICAgU1RSRUFNSU5HOiIpOworI2VuZGlmIC8qIFhZWl9JTlRFUk5BTCAq LworICAgICAgICB9CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworCisgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7CQkvKiBJZiB3ZSdyZSBzZW5kaW5nLi4u ICovCisjaWZkZWYgTkVXRlRQCisJICAgIGlmICh3aGF0ICYgV19GVFApIHsJCS8qIEZUUCAqLwor ICAgICAgICAgICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKKyAgICAgICAgICAgICAgICBwcmludHco IiAgIEZUUCBQVVQ6Iik7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworI2lmZGVm IENLX1JFU0VORAorICAgICAgICAgICAgc3dpdGNoIChzZW5kbW9kZSkgewkJLyogS2VybWl0ICov CisgICAgICAgICAgICAgIGNhc2UgU01fUkVTRU5EOgorICAgICAgICAgICAgICAgIG1vdmUoQ1df TkFNLDEwKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiBSRVNFTkRJTkc6Iik7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg bW92ZShDV19OQU0sMTApOworICAgICAgICAgICAgICAgIHByaW50dygiICAgU0VORElORzoiKTsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAg ICBtb3ZlKENXX05BTSwxMCk7CisgICAgICAgICAgICBwcmludHcoIiAgIFNFTkRJTkc6Iik7Cisj ZW5kaWYgLyogQ0tfUkVTRU5EICovCisKKyAgICAgICAgfSBlbHNlIGlmICh3aGF0ICYgV19SRUNW KSB7CS8qIElmIHdlJ3JlIHJlY2VpdmluZy4uLiAqLworI2lmZGVmIE5FV0ZUUAorCSAgICBpZiAo d2hhdCAmIFdfRlRQKSB7CQkvKiBGVFAgKi8KKyAgICAgICAgICAgICAgICBtb3ZlKENXX05BTSwx MCk7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIgICBGVFAgR0VUOiIpOworCSAgICB9IGVsc2Ug eworI2VuZGlmIC8qIE5FV0ZUUCAqLworCQltb3ZlKENXX05BTSwxMCk7CisJCXByaW50dygiIFJF Q0VJVklORzoiKTsKKyNpZmRlZiBORVdGVFAKKwkgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHdo YXQgPT0gKFdfRlRQfFdfRlRfREVMRSkpIHsKKwkJbW92ZShDV19OQU0sMTApOworCQlwcmludHco IkZUUCBERUxFVEU6Iik7CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAgIH0gZWxzZSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZG9uJ3Qga25vdy4uLiAqLworICAgICAgICAg ICAgbW92ZShDV19OQU0sMTApOyAgICAgICAgICAgIC8qIChzaG91bGQgbmV2ZXIgc2VlIHRoaXMp ICovCisgICAgICAgICAgICBwcmludHcoIiBGaWxlIE5hbWU6Iik7CisgICAgICAgIH0KKyAgICAg ICAgbW92ZShDV19OQU0sMjIpOyAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IHRoZSBmaWxlbmFt ZSAqLworICAgICAgICBpZiAobGVuID4gNTcpIHsKKyAgICAgICAgICAgIHByaW50dygiJS41NXMu LiIscyk7CisgICAgICAgICAgICBsZW4gPSA1NzsKKyAgICAgICAgfSBlbHNlIHByaW50dygiJXMi LHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBL OTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgIHEgPSBsZW47ICAgICAgICAgICAgICAg ICAgICAgICAgLyogUmVtZW1iZXIgbmFtZSBsZW5ndGggZm9yIGxhdGVyICovCisgICAgICAgIGNs cnRvZW9sKCk7CisgICAgICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlz cGxheSBmaWxlIHR5cGUgKGNhbiBjaGFuZ2UpICovCisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRl ZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAg ICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAgIC8q IEZpbGUgYXMtbmFtZSAqLworICAgICAgICBpZiAocSArIGxlbiArIDQgPCA1OCkgeyAgICAgICAg IC8qIFdpbGwgZml0ICovCisgICAgICAgICAgICBtb3ZlKENXX05BTSwgMjIgKyBxKTsKKyAgICAg ICAgICAgIHByaW50dygiID0+ICVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFN LCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBUb28gbG9uZyAqLworICAgICAg ICAgICAgbW92ZShDV19OQU0sIDIyKTsgICAgICAgICAgIC8qIE92ZXJ3cml0ZSBwcmV2aW91cyBu YW1lICovCisgICAgICAgICAgICBxID0gMDsKKyAgICAgICAgICAgIGlmIChsZW4gKyA0ID4gNTcp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZzE1ICovCisgICAgICAgICAg ICAgICAgcHJpbnR3KCIgPT4gJS41MXMuLiIscyk7ICAgICAgICAgICAgICAgICAgICAgICAgLyog d2cxNSAqLworICAgICAgICAgICAgICAgIGxlbiA9IDUzOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KKyAgICAgICAgICAgIH0gZWxzZSBwcmludHcoIiA9 PiAlcyIscyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3ZzE1ICovCisjaWZkZWYgS1VJ CisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2Vu ZGlmIC8qIEtVSSAqLworICAgICAgICB9CisgICAgICAgIHEgKz0gbGVuICsgNDsgICAgICAgICAg ICAgICAgICAgLyogUmVtZW1iZXIgaG9yaXpvbnRhbCBwb3NpdGlvbiAqLworICAgICAgICBjbHJ0 b2VvbCgpOworICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRN b2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNh c2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHNpemUgKi8KKyAgICAgICAg ZnNpeiA9IG47CisgICAgICAgIG1vdmUoQ1dfU0laLDIyKTsKKyAgICAgICAgaWYgKGZzaXogPiAo Q0tfT0ZGX1QpLTEpIHsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgbiAp OworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIHByaW50 dygiJXMiLGNrZnN0b2EobikpOworICAgICAgICB9CisJaWYgKGZzaXogPT0gLTJMKSB7CisJICAg IHByaW50dygiUE9TU0lCTFkgRVhDRUVEUyBMT0NBTCBGSUxFIFNJWkUgTElNSVQiKTsKKwl9Cisg ICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBtb3ZlKENXX1BDRCwg OCk7CisgICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50 IGxhYmVsICovCisgICAgICAgICAgICBwY3RsYmwgPSAxOworCSAgICBjbHJ0b2VvbCgpOworICAg ICAgICAgICAgcHJpbnR3KCJQZXJjZW50IERvbmU6Iik7CisgICAgICAgIH0KKyNlbHNlCisJbW92 ZShDV19QQ0QsIDgpOworCWNscnRvZW9sKCk7CisgICAgICAgIGlmIChmc2l6ID4gKENLX09GRl9U KS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50IGxhYmVsICovCisgICAgICAgICAgICBwY3RsYmwgPSAx OworICAgICAgICAgICAgcHJpbnR3KCJQZXJjZW50IERvbmU6Iik7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBwY3RsYmwgPSAwOworICAgICAgICAgICAgcHJpbnR3KCJCeXRlcyBTbyBG YXI6Iik7CisJfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyAg ICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHR5cGUgKi8KKyAg ICAgICAgcmVmcmVzaCgpOworI2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9QVDog ICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLworICAg ICAgICBpZiAoc3BhY2tldHMgPCA1KSB7CisgICAgICAgICAgICBleHRlcm4gaW50IHN5c2luZGV4 OworICAgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBzeXNkYXRhIHN5c2lkbGlzdFtdOworICAgICAg ICAgICAgLyogVGhpbmdzIHRoYXQgd29uJ3QgY2hhbmdlIGFmdGVyIHRoZSA0dGggcGFja2V0ICov CisgICAgICAgICAgICBtb3ZlKENXX1BBUiwyMik7CisgICAgICAgICAgICBwcmludHcoIiVzIixw YXJuYW0oKGNoYXIpcGFyaXR5KSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBDV19QQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgcGFybmFtKChjaGFyKXBhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisj ZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2wo KTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBtb3ZlKENXX1BCLCAyMik7ICAgICAgICAg ICAgLyogQmxvY2sgY2hlY2sgb24gdGhpcyBwYWNrZXQgKi8KKyAgICAgICAgICAgIGlmIChiY3R1 ID09IDQpCisgICAgICAgICAgICAgIHByaW50dygiQiIpOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICBwcmludHcoIiVkIixiY3R1KTsKKyAgICAgICAgICAgIGNscnRvZW9sKCk7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgaWYgKAorI2lmZGVmIE5FV0ZUUAorCQko ZnRwICYmIChzcGFja2V0cyA9PSAxIHx8IHJwYWNrZXRzID09IDEpKSB8fAorI2VuZGlmIC8qIE5F V0ZUUCAqLworCQlzcGFja2V0cyA9PSA0CisJCSkgeworICAgICAgICAgICAgICAgIG1vdmUoQ1df TElOLDgpOworICAgICAgICAgICAgICAgIGlmICgKKyNpZmRlZiBORVdGVFAKKwkJICAgIGZ0cCB8 fAorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAmJiAo c3lzaW5kZXggPiAtMSkpCisJCSAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ldCkg eworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShDV19MSU4sOCk7CisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludHcoIk5ldHdvcmsgSG9zdDogJXMgKCVzKSIsCisjaWZkZWYgTkVXRlRQ CisJCQkgICAgICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiIikgOgorI2VuZGlmIC8q IE5FV0ZUUCAqLworCQkJICAgICAgIHR0bmFtZSwKKyNpZmRlZiBORVdGVFAKKwkJCSAgICAgICBm dHAgPyBmdHBfc3J2dHlwIDoKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJCSAgICAgICBzeXNpZGxp c3Rbc3lzaW5kZXhdLnNpZF9uYW1lCisJCQkgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDApOworICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIERldmljZTogJXMgKHJlbW90 ZSBob3N0IGlzICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0bmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisjaWZkZWYgQ0tfVElNRVJTCisgICAgICAgIGlmICgvKiBydHRm bGcgJiYgKi8gcHJvdG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAgICAgbG9uZyB4eDsKKyAg ICAgICAgICAgIGlmICgKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgICAgICAgICBzdHJlYW1p bmcgJiYgb2xkd2luICE9IC0yCisjZWxzZQorICAgICAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBT VFJFQU1JTkcgKi8KKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBtb3ZlKENX X1RNTywgMjIpOworICAgICAgICAgICAgICAgIHByaW50dygiMDAgLyAwMCIpOworICAgICAgICAg ICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IHh4ID0gKHJ0dGRlbGF5ICsgNTAwKSAvIDEwMDA7CisgICAgICAgICAgICAgICAgaWYgKHh4ICE9 IG9sZHJ0dCB8fCByY3Z0aW1vICE9IG9sZHRpbSkgeworICAgICAgICAgICAgICAgICAgICBtb3Zl KENXX1RNTywgMjIpOworICAgICAgICAgICAgICAgICAgICBwcmludHcoIiUwMmxkIC8gJTAyZCIs IHh4LCByY3Z0aW1vKTsKKyAgICAgICAgICAgICAgICAgICAgb2xkcnR0ID0geHg7CisgICAgICAg ICAgICAgICAgICAgIG9sZHRpbSA9IHJjdnRpbW87CisgICAgICAgICAgICAgICAgICAgIGNscnRv ZW9sKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5k aWYgLyogQ0tfVElNRVJTICovCisKKyAgICAgICAgeCA9ICh3aGF0ICYgV19SRUNWKSA/ICAgICAg ICAgIC8qIFBhY2tldCBsZW5ndGggKi8KKyAgICAgICAgICBycGt0bCsocHJvdG9jb2w9PVBST1RP X0s/MTowKSA6CisgICAgICAgICAgICBzcGt0bDsKKyAgICAgICAgaWYgKHggIT0gb2xkbGVuKSB7 ICAgICAgICAgICAgICAvKiBCdXQgb25seSBpZiBpdCBjaGFuZ2VkLiAqLworICAgICAgICAgICAg bW92ZShDV19QTCwgMjIpOworICAgICAgICAgICAgcHJpbnR3KCIlZCIseCk7CisjaWZkZWYgS1VJ CisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX1BMLCAobG9uZykgeCApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRp ZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICBvbGRsZW4g PSB4OworICAgICAgICB9CisgICAgICAgIG1vdmUoQ1dfUEMsIDIyKTsgICAgICAgICAgICAgICAg LyogUGFja2V0IGNvdW50IChhbHdheXMpLiAqLworCisgICAgICAgIHByaW50dygiJWQiLCAod2hh dCAmIFdfUkVDVikgPyBycGFja2V0cyA6IHNwYWNrZXRzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19QQywgKGxvbmcpIHNwYWNrZXRzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICBjbHJ0b2VvbCgpOworCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9U T19LICYmICFmdHApIHsgLyogV2luZG93IHNsb3RzICovCisgICAgICAgICAgICBjaGFyIHdzWzE2 XTsKKyAgICAgICAgICAgIGludCBmbGFnOworICAgICAgICAgICAgZmxhZyA9IDA7CisjaWZkZWYg U1RSRUFNSU5HCisgICAgICAgICAgICBpZiAoc3RyZWFtaW5nKSB7CisgICAgICAgICAgICAgICAg aWYgKG9sZHdpbiAhPSAtMikgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCJTVFJF QU1JTkciKTsKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICAgICAg ICAgIG9sZHdpbiA9IC0yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQor I2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgICAgICAgICAgICBpZiAod2N1ciAhPSBvbGR3aW4p IHsKKyAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsICIlZCBvZiAlZCIsIHdjdXIgPCAxID8g MSA6IHdjdXIsIHdzbG90bik7CisgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAg ICAgICAgICAgIG9sZHdpbiA9IHdjdXI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChmbGFnKSB7CisgICAgICAgICAgICAgICAgbW92ZShDV19XUywgMjIpOworICAgICAgICAgICAg ICAgIHByaW50dygiJXMiLCB3cyk7CisgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1dTLCAobG9uZykgd3MgKTsKKyNlbmRpZiAvKiBLOTVH ICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg ZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAgICAgIGlmIChlcnJv cnMgIT0gb2xkdHJ5KSB7ICAgICAgICAgLyogUmV0cnkgY291bnQsIGlmIGNoYW5nZWQgKi8KKyAg ICAgICAgICAgIG1vdmUoQ1dfUFIsIDIyKTsKKyAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9y cyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzICk7CisjZW5k aWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsK KyAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKKyAgICAgICAgfQorCS8qIFNlbmRlcidzIHBh Y2tldCB0eXBlICovCisgICAgICAgIGlmICghZnRwICYmIChjICE9IG9sZHR5cCAmJiBjICE9ICdZ JyAmJiBjICE9ICdOJykpIHsKKyAgICAgICAgICAgIGNoYXIgdHlwZVsyXTsKKyAgICAgICAgICAg IHNwcmludGYodHlwZSwgIiVjIixjKTsKKyAgICAgICAgICAgIG1vdmUoQ1dfUFQsMjIpOworICAg ICAgICAgICAgcHJpbnR3KCIlcyIsIHR5cGUpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19Q VCwgKGxvbmcpIHR5cGUgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisg ICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgb2xkdHlwID0gYzsKKyAgICAgICAg fQorICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBoYW5kbGUg c3BlY2lmaWMgcGFja2V0IHR5cGVzICovCisgICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAg ICAgICAgICAgLyogQmVnaW5uaW5nIG9mIHRyYW5zZmVyICovCisgICAgICAgICAgICBmY250ID0g ZmJ5dCA9IDBMOyAgICAgICAgICAgLyogQ2xlYXIgY291bnRlcnMgKi8KKyNpZmRlZiBHRlRJTUVS CisgICAgICAgICAgICBndHYgPSAtMS4wOworI2Vsc2UgLyogR0ZUSU1FUiAqLworICAgICAgICAg ICAgZ3R2ID0gLTFMOyAgICAgICAgICAgICAgICAgIC8qIEFuZCBvbGQvbmV3IHRoaW5ncy4uLiAq LworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOwor ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICdaJzogICAgICAgICAgICAgICAg ICAgICAvKiBvciBFT0YgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BU IFogcGt0bnVtIiwiIixuKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1BU IFogb2xkcGN0IiwiIixvbGRwY3QpOworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBT Q1JfUFQgWiBwY3QiLCIiLHBjdCk7CisgICAgICAgICAgY2FzZSAnRCc6ICAgICAgICAgICAgICAg ICAgICAgLyogRGF0YSBwYWNrZXQgKi8KKyAgICAgICAgICAgIGlmIChmc2l6ID4gMEwpIHsgICAg ICAgICAgICAvKiBTaG93IHBlcmNlbnQgZG9uZSBpZiBrbm93biAqLworICAgICAgICAgICAgICAg IG9sZHBjdCA9IHBjdDsgICAgICAgICAgIC8qIFJlbWVtYmVyIHByZXZpb3VzIHBlcmNlbnQgKi8K KyAgICAgICAgICAgICAgICBob3dmYXIgPSBmZmM7CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgICAg ICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpCS8qIEFjY291bnQgZm9yIFBTRU5EIG9yIFJFU0VO RCAqLworICAgICAgICAgICAgICAgICAgaG93ZmFyICs9IHNlbmRzdGFydDsKKyAgICAgICAgICAg ICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKQorICAgICAgICAgICAgICAgICAgaG93ZmFyICs9 IHJzX2xlbjsKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICAgICAgICAgICAgICAvKiBQZXJj ZW50IGRvbmUsIHRvIGJlIGRpc3BsYXllZC4uLiAqLworICAgICAgICAgICAgICAgIGlmIChjID09 ICdaJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAh Y3pzZWVuKSBwY3QgPSAxMDBMOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg ICAgICAgcGN0ID0gKGZzaXogPiA5OUwpID8gKGhvd2ZhciAvIChmc2l6IC8gMTAwTCkpIDogMEw7 CisgICAgICAgICAgICAgICAgaWYgKHBjdCA+IDEwMEwgfHwgICAgICAgLyogQWxsb3cgZm9yIGV4 cGFuc2lvbiBhbmQgKi8KKyAgICAgICAgICAgICAgICAgICAob2xkcGN0ID09IDk5TCAmJiBwY3Qg PCAwTCkpIC8qIG90aGVyIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi8KKyAgICAgICAgICAgICAgICAg IHBjdCA9IDEwMEw7CisgICAgICAgICAgICAgICAgaWYgKHBjdCAhPSBvbGRwY3QpICAgICAgLyog T25seSBkbyB0aGlzIDEwMCB0aW1lcyBwZXIgZmlsZSAqLworICAgICAgICAgICAgICAgICAgdXBk cGN0KG9sZHBjdCwgcGN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg bW92ZShDV19QQ0QsMjIpOworICAgICAgICAgICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9hKGZm YykpOworICAgICAgICAgICAgfQorI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcp IGhvd2Zhcik7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAg ICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8q IG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnJSc6ICAgICAgICAgICAgICAgICAgICAgLyog VGltZW91dHMsIHJldHJhbnNtaXNzaW9ucyAqLworICAgICAgICAgICAgY3BzID0gc2hvY3BzKChp bnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChv bGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKworICAgICAgICAgICAgZXJyb3JzID0gcmV0 cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAgICAgICAgICBpZiAoZXJyb3JzICE9IG9s ZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQgKi8KKyAgICAgICAgICAgICAg ICBtb3ZlKENXX1BSLCAyMik7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlZCIsZXJyb3JzKTsK KyAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYg LyogS1VJICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVy cm9yczsKKyAgICAgICAgICAgICAgICBpZiAocykgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAg ICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7 CisgICAgICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19FUlIsIChsb25nKSBzKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyog S1VJICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNh c2UgJ0UnOiAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tldCAqLworI2lmZGVmIENP TU1FTlQKKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsgICAgICAgICAgICAvKiBQcmludCBp dHMgZGF0YSBmaWVsZCAqLworICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAg cHJpbnR3KCIlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25n KSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAg fQorICAgICAgICAgICAgY2xydG9lb2woKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAg ICAgICBmY250ID0gZmJ5dCA9IDBMOyAgICAgICAgICAgLyogU28gbm8gYnl0ZXMgZm9yIHRoaXMg ZmlsZSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnUSc6ICAgICAgICAg ICAgICAgICAgICAgLyogQ3J1bmNoZWQgcGFja2V0ICovCisgICAgICAgICAgICBjcHMgPSBzaG9j cHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hv ZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAgICAgICAgICAgbW92ZShDV19F UlIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCJEYW1hZ2VkIFBhY2tldCIpOworI2lmZGVmIEtV SQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRhbWFnZWQgUGFja2V0IgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisg ICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSAncSc6ICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1DIG9yIGNvbm5lY3Rpb24gbG9zdCAq LworICAgICAgICAgICAgbW92ZShDV19NU0csMjIpOworCSAgICBjbHJ0b2VvbCgpOworICAgICAg ICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgICAgICBwcmludHcoIiVzIiwgKnMgPyBzIDog IlVzZXIgaW50ZXJydXB0aW9uIG9yIGNvbm5lY3Rpb24gbG9zdCIpOworI2lmZGVmIEtVSQorI2lm bmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgcworICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNl bmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlICdUJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0ICovCisgICAg ICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAg ICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAg ICAgICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCJUaW1lb3V0ICVk IHNlYyIscmN2dGltbyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVGlt ZW91dCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLwor I2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIGVy cm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAgICAgICAgaWYgKGVy cm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCisgICAg ICAgICAgICAgICAgbW92ZShDV19QUiwgMjIpOworICAgICAgICAgICAgICAgIHByaW50dygiJWQi LGVycm9ycyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg ICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAg ICAgICAgICAgICAgICAgIC8qIE90aGVycywgZG8gbm90aGluZyAqLworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKyAgICAgICAgcmVmcmVzaCgpOworI2lmZGVmIE9TMgorICAgICAgICBT YXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisg ICAgICBjYXNlIFNDUl9TVDogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBz dGF0dXMgKi8KKyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfU1QgYyIsIiIsYyk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1NUIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9TVCBjeHNlZW4iLCIiLGN4c2Vlbik7Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICBtb3ZlKENXX1BDRCwyMik7ICAgICAgICAgICAgICAgIC8q IFVwZGF0ZSBwZXJjZW50IGRvbmUgKi8KKyAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAg ICAgICAgICAvKiBPSywgcHJpbnQgMTAwICUgKi8KKyAgICAgICAgICAgIGlmIChwY3RsYmwpCisg ICAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsMTAwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0b2EoZmZjKSk7CisjaWZkZWYgS1VJCisjaWZuZGVm IEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJ ICovCisgICAgICAgICAgICBwY3QgPSAxMDA7CisgICAgICAgICAgICBvbGRwY3QgPSAwOworICAg ICAgICB9IGVsc2UgaWYgKGZzaXogPiAwTCkgICAgICAgICAgIC8qIE5vdCBPSywgdXBkYXRlIGZp bmFsIHBlcmNlbnQgKi8KKy8qCisgIFRoZSBlbHNlIHBhcnQgd3JpdGVzIGFsbCBvdmVyIHRoZSBz Y3JlZW4gLS0gaG93ZmFyIGFuZC9vciBmc2l6IGhhdmUKKyAgYmVlbiByZXNldCBhcyBhIGNvbnNl cXVlbmNlIG9mIHRoZSBub3QtT0tuZXNzIG9mIHRoZSB0cmFuc2Zlci4KKyovCisgICAgICAgICAg aWYgKHBjdGxibCkKKyAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsIChob3dmYXIgKiAxMDBMKSAv IGZzaXopOworICAgICAgICBjbHJ0b2VvbCgpOworI2Vsc2UKKyAgICAgICAgaWYgKGMgPT0gU1Rf T0spIHsgICAgICAgICAgICAgICAvKiBPSywgcHJpbnQgMTAwICUgKi8KKyAgICAgICAgICAgIG1v dmUoQ1dfUENELDIyKTsgICAgICAgICAgICAvKiBVcGRhdGUgcGVyY2VudCBkb25lICovCisgICAg ICAgICAgICBpZiAocGN0bGJsKSB7CisJCWlmIChvbGRwY3QgPT0gMCkJLyogU3dpdGNoaW5nIGZy b20gImJ5dGVzIHNvIGZhciIgKi8KKwkJICBjbHJ0b2VvbCgpOwkJLyogdG8gInBlcmNlbnQgZG9u ZSIuLi4gKi8KKwkJdXBkcGN0KG9sZHBjdCwxMDApOworCSAgICB9IGVsc2UKKyAgICAgICAgICAg ICAgcHJpbnR3KCIlcyIsIGNrZnN0b2EoZmZjKSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df RkZDLCAobG9uZykgZmZjKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisj aWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gMTAwOworICAgICAgICAgICAgb2xkcGN0 ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAg ICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQ09NTUVOVAorLyogTm8sIGxl YXZlIGl0IHRoZXJlIHNvIHRoZXkgY2FuIHJlYWQgaXQgKi8KKyAgICAgICAgbW92ZShDV19NU0cs MjIpOyAgICAgICAgICAgICAgICAvKiBSZW1vdmUgYW55IHByZXZpb3VzIG1lc3NhZ2UgKi8KKyNp ZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVf VFJBTlNGRVIsIChsb25nKSBDV19NU0csIChsb25nKSAiIiApOworI2VuZGlmIC8qIEs5NUcgKi8K KyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworICAgICAgICBtb3ZlKENXX1RSLCAyMik7CisjaWZkZWYgS1VJCisj aWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfVFIsIChsb25nKSAiIiApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBL VUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworCisgICAgICAgIHN3aXRjaCAo YykgeyAgICAgICAgICAgICAgICAgICAgLyogUHJpbnQgbmV3IHN0YXR1cyBtZXNzYWdlICovCisg ICAgICAgICAgY2FzZSBTVF9PSzogICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgT0sgKi8K KyAgICAgICAgICAgIGZjbnQrKzsgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGZp bGUgKi8KKwkgICAgaWYgKHdoYXQgPT0gKFdfRlRQfFdfRlRfREVMRSkpIHsKKwkJbW92ZShDV19N U0csMjIpOworCQljbHJ0b2VvbCgpOworCQlwcmludHcoIkRlbGV0ZSBPSyIpOworCSAgICB9IGVs c2UgeworCQlmYnl0ICs9IGZmYzsKKwkJbW92ZShDV19NU0csMjIpOworCQljbHJ0b2VvbCgpOwor CQlwcmludHcoIlRyYW5zZmVyIE9LIik7CisJICAgIH0KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1 RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpICJUcmFuc2ZlciBPSyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9l b2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBT VF9ESVNDOiAgICAgICAgICAgICAgICAgLyogRGlzY2FyZGVkICovCisgICAgICAgICAgICBtb3Zl KENXX0VSUiwyMik7CisgICAgICAgICAgICBwcmludHcoIkZpbGUgZGlzY2FyZGVkIik7CisjaWZk ZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRmlsZSBkaXNjYXJkZWQiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKyAgICAg ICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfSU5UOiAgICAgICAgICAgICAgICAg IC8qIEludGVycnVwdGVkICovCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAg ICAgICBwcmludHcoIlRyYW5zZmVyIGludGVycnVwdGVkIik7CisjaWZkZWYgS1VJCisjaWZuZGVm IEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIgaW50ZXJydXB0ZWQiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAgIHJl dHVybjsKKworICAgICAgICAgIGNhc2UgU1RfU0tJUDogICAgICAgICAgICAgICAgIC8qIFNraXBw ZWQgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKKwkgICAgaWYgKG4gPiAwICYmIG4g PCBuc2tyZWFzb24pCisJICAgICAgcHJpbnR3KCJGaWxlIHNraXBwZWQgKCVzKSIsc2tyZWFzb25b bl0pOworCSAgICBlbHNlCisJICAgICAgcHJpbnR3KCJGaWxlIHNraXBwZWQiKTsKKyNpZmRlZiBL VUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJB TlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJGaWxlIHNraXBwZWQiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNp ZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAg IHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfRVJSOiAgICAgICAgICAgICAgICAgIC8qIEVy cm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAg IGlmICghcykgcyA9IChjaGFyICopZXBrdG1zZzsKKyAgICAgICAgICAgIHByaW50dygiJXMiLHMp OworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7CisjZW5kaWYgLyog Szk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBj dCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9l b2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBT VF9SRUZVOiAgICAgICAgICAgICAgICAgLyogUmVmdXNlZCAqLworICAgICAgICAgICAgbW92ZShD V19FUlIsMjIpOworICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAgY2hhciBl cnJidWZbNjRdIDsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJSZWZ1c2VkLCAl cyIsIHMgKSA7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIGVycmJ1Zik7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwobG9uZykgQ1dfRVJSLChsb25nKSBlcnJidWYpOworI2VuZGlmIC8qIEs5NUcg Ki8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgcHJpbnR3KCJSZWZ1c2VkIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxv bmcpIlJlZnVzZWQiKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAg ICAgICAgICB9CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsK KyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7 CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0lOQzoKKyAgICAgICAg ICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygiSW5jb21wbGV0ZSIpOwor I2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcpIkluY29tcGxldGUiKTsKKyNlbmRpZiAv KiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAg cGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0 b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNl IFNUX01TRzoKKyAgICAgICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsKKyAgICAgICAgICAgIHByaW50 dygiJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19NU0csKGxvbmcpcyk7CisjZW5kaWYg LyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVm cmVzaCgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIy KTsKKyAgICAgICAgICAgIHByaW50dygiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0 dXMgKioqIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1cyAqKioi ICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xy dG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47CisgICAgICAgIH0KKworICAgICAgY2FzZSBTQ1Jf VEM6IHsgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRlICovCisgICAg ICAgICAgY2hhciBtc2didWZbMTI4XTsKKyAgICAgICAgICBtb3ZlKENXX0NQLDIyKTsgICAgICAg ICAgICAgICAvKiBPdmVyYWxsIHRyYW5zZmVyIHJhdGUgKi8KKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX0NQLCB0ZmNwcyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9hKHRmY3BzKSk7CisgICAgICAgICAgY2xydG9lb2wo KTsKKyAgICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgICBtb3ZlKENXX01TRywy Mik7ICAgICAgICAgIC8qIFByaW50IHN0YXRpc3RpY3MgaW4gbWVzc2FnZSBsaW5lICovCisgICAg ICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChzdWNjZXNz KSB7CisgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLAorICAgICAgICAgICAgICAgICAgICAg ICJTVUNDRVNTLiAgRmlsZXM6ICVsZCwgQnl0ZXM6ICVzLCAlbGQgQ1BTIiwKKyAgICAgICAgICAg ICAgICAgICAgICBmaWxjbnQgLSBmaWxyZWosCisgICAgICAgICAgICAgICAgICAgICAgY2tmc3Rv YShmYnl0KSwKKyAgICAgICAgICAgICAgICAgICAgICB0ZmNwcworICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICAgIHByaW50dygiJXMiLCBtc2didWYpOworI2lmZGVmIEtVSQor I2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgbXNnYnVmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAg ICAgICAgICBjbHJ0b2VvbCgpOworCisgICAgICAgICAgfQorICAgICAgICAgIG1vdmUoQ1dfVFIs IDEpOworICAgICAgICAgIHByaW50dygiICAgICAgIEVsYXBzZWQgVGltZTogJXMiLGhobW1zcygo bG9uZykKKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmcHRzZWNzICsgMC41KQorI2Vsc2UKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3MKKyNlbmRpZiAvKiBHRlRJTUVS ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp KTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19UUiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgaGhtbXNzKChsb25nKQorI2lmZGVmIEdG VElNRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRzZWNzICsg MC41KQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNz CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKSk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAg IGNscnRvZW9sKCk7CisgICAgICAgICAgbW92ZSgyMywwKTsgY2xydG9lb2woKTsgICAgICAgLyog Q2xlYXIgaW5zdHJ1Y3Rpb25zIGxpbmVzICovCisgICAgICAgICAgbW92ZSgyMiwwKTsgY2xydG9l b2woKTsgICAgICAgLyogdG8gbWFrZSByb29tIGZvciBwcm9tcHQuICovCisgICAgICAgICAgcmVm cmVzaCgpOworCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgIG9sZGd0diA9IChDS0ZMT0FUKSAt MS4wOworI2Vsc2UKKyAgICAgICAgICBvbGRndHYgPSAtMUw7CisjZW5kaWYgLyogR0ZUSU1FUiAq LworCisjaWZuZGVmIFZNU0NVUlNFCisJICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGVuZHdpbiBBIiwi IiwwKTsKKyAgICAgICAgICBlbmR3aW4oKTsKKyNpZmRlZiBDT01NRU5UCisvKgorICBXaHkgYW5k IHdoZW4gd2FzIHRoaXMgY2FsbCB0byBjb25yZXMoKSBhZGRlZD8gIEl0IG1ha2VzIG5vIHNlbnNl LAorICBhbmQgaXQgYnJlYWtzIGVjaG9pbmcgb24gU29sYXJpcyA4LgorKi8KKyNpZmRlZiBTT0xB UklTCisgICAgICAgICAgY29ucmVzKCk7CisjZW5kaWYgLyogU09MQVJJUyAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyNlbmRpZiAvKiBWTVNDVVJTRSAqLworCisjaWZkZWYgQ09NTUVOVAorICAg ICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBu ZXh0IHRpbWUuICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgIG9sZHR5cCA9IDA7 IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0xOworICAgICAgICAgIG9sZHRp bSA9IC0xOworICAgICAgICAgIGNlbmR3ID0gMTsKKyAgICAgICAgICBpZiAoeGZyYmVsKSBibGVl cChCUF9OT1RFKTsgICAvKiBDbG9zZSB3aW5kb3csIHRoZW4gYmVlcC4gKi8KKyNpZmRlZiBVTklY CisgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAg IGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIFdpbmRvdyBjbG9zZWQuICovCisgICAg ICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgY2FzZSBTQ1JfRU06ICAgICAgICAgICAgICAg ICAgICAgIC8qIEVycm9yIHBhY2tldCAoZmF0YWwpICovCisgICAgICAgIG1vdmUgKENXX0VSUiwy Mik7CisgICAgICAgIHByaW50dygiRkFJTFVSRTogJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRl ZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX0VSUiwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX0ZBSUwpOworI2lmZGVmIENPTU1FTlQKKyAg ICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGNs cnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9RRTogICAgICAg ICAgICAgICAgICAgICAgLyogUXVhbnRpdHkgZXF1YWxzICovCisgICAgICBjYXNlIFNDUl9UVTog ICAgICAgICAgICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAqLworICAgICAgY2FzZSBT Q1JfVE46ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IHN0YXJ0ICov CisgICAgICBjYXNlIFNDUl9UWjogICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0 ZWQgYXQgZW5kICovCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyog KGlnbm9yZWQgaW4gZnVsbHNjcmVlbiBkaXNwbGF5KSAqLworCisgICAgICBjYXNlIFNDUl9NUzoJ CQkvKiBNZXNzYWdlIGZyb20gS2VybWl0IHBhcnRuZXIgKi8KKyAgICAgICAgbW92ZShDV19NU0cs MjIpOworCXByaW50dygiJXMiLHMpOworICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJl dHVybjsKKworICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIFgtcGFj a2V0IGRhdGEgKi8KKyAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyAgICAgICAgbW92ZShDV19O QU0sMjIpOworICAgICAgICBwcmludHcoIiVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1 RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19O QU0sIChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQ1c6 ICAgICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIFdpbmRvdyAqLworICAgICAgICBjbHJ0b2Vv bCgpOyBtb3ZlKDIzLDApOyBjbHJ0b2VvbCgpOyBtb3ZlKDIyLDApOyBjbHJ0b2VvbCgpOworICAg ICAgICByZWZyZXNoKCk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBwY3QgPSAxMDA7IG9sZHBj dCA9IDA7ICAgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9 IC0xOyBvbGRsZW4gPSAtMTsKKyAgICAgICAgb2xkdGltID0gLTE7CisKKyNpZm5kZWYgVk1TQ1VS U0UKKwlkZWJ1ZyhGMTAwLCJzY3JlZW5jIGVuZHdpbiBCIiwiIiwwKTsKKyAgICAgICAgZW5kd2lu KCk7CisjZW5kaWYgLyogVk1TQ1VSU0UgKi8KKyAgICAgICAgZnRfd2luID0gMDsgICAgICAgICAg ICAgICAgICAgICAvKiBGbGFnIHRoYXQgd2luZG93IGlzIGNsb3NlZC4gKi8KKyAgICAgICAgY2Vu ZHcgPSAxOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0NEOiAgICAgICAgICAgICAgICAgICAg ICAvKiBEaXNwbGF5IGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgICAgIG1vdmUoQ1dfRElSLDIy KTsKKyAgICAgICAgIHByaW50dygiJXMiLCBzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1Rwor ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIs IChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAg ICBjbHJ0b2VvbCgpOworICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgT1MyCisgICAgICAgIFNh dmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAg ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLworICAg ICAgICBtb3ZlIChDV19FUlIsMjIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3Jl ZW4oKSBjYWxsZWQgd2l0aCBiYWQgZnVuY3Rpb24gY29kZSAqKioiCisgICAgICAgICAgICAgICAg ICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICBw cmludHcoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgZnVuY3Rpb24gY29kZSAqKioiKTsK KyAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47CisgICAgfQorfQorI2VuZGlm IC8qIENLX0NVUlNFUyAqLworCisjaWZkZWYgS1VJCisjaWZkZWYgQ0tfQU5TSUMKK3ZvaWQKK3Nj cmVlbmcoaW50IGYsIGNoYXIgYyxsb25nIG4sY2hhciAqcykKKyNlbHNlCitDS1ZPSUQKK3NjcmVl bmcoZixjLG4scykKK2ludCBmOyAgICAgICAgICAvKiBhcmd1bWVudCBkZXNjcmlwdG9yICovCitj aGFyIGM7ICAgICAgICAgLyogYSBjaGFyYWN0ZXIgb3Igc21hbGwgaW50ZWdlciAqLworbG9uZyBu OyAgICAgICAgIC8qIGEgbG9uZyBpbnRlZ2VyICovCitjaGFyICpzOyAgICAgICAgLyogYSBzdHJp bmcgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc2NyZWVuZygpICovIHsKKyNpZmRlZiBD S19TU0wKKyAgICBleHRlcm4gaW50IHRsc19hY3RpdmVfZmxhZywgc3NsX2FjdGl2ZV9mbGFnOwor I2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFJMT0dDT0RFCisgICAgZXh0ZXJuIGludCB0dG5w cm90bzsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAgIHN0YXRpYyBpbnQgcSA9IDA7CisgICAg c3RhdGljIENLX09GRl9UIGZzaXogPSAoQ0tfT0ZGX1QpLTE7IC8qIENvcHkgb2YgZmlsZSBzaXpl ICovCisgICAgc3RhdGljIGxvbmcgZmNudCA9IDBMOyAgICAvKiBOdW1iZXIgb2YgZmlsZXMgdHJh bnNmZXJyZWQgKi8KKyAgICBzdGF0aWMgbG9uZyBmYnl0ID0gMEw7ICAgIC8qIFRvdGFsIGZpbGUg Ynl0ZXMgb2YgYWxsIGZpbGVzIHRyYW5zZmVycmVkICovCisgICAgc3RhdGljIENLX09GRl9UIGhv d2ZhciA9IChDS19PRkZfVCkwOyAvKiBIb3cgbXVjaCBvZiBmaWxlIHhmZXInZCBzbyBmYXIgKi8K KyAgICBzdGF0aWMgaW50ICBwY3RsYmwgPSAwTDsgIC8qIFBlcmNlbnQgZG9uZSB2cyBCeXRlcyBz byBmYXIgKi8KKyAgICBsb25nIGNwcyA9IDBMOworCisgICAgaW50IG5ldCA9IDA7CisgICAgaW50 IHhuZXQgPSAwOworICAgIGludCBmdHAgPSAwOworICAgIGludCBsZW47ICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KKyAgICBpbnQgZXJyb3JzID0gMDsg ICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBjb3VudGVyICovCisgICAgaW50IHg7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2VyICovCisKKyAgICBkZWJ1ZyhGMTAxLCJz Y3JlZW5nIGNpbml0IiwiIixjaW5pdCk7CisgICAgZGVidWcoRjEwMSwic2NyZWVuZyBjZW5kdyIs IiIsY2VuZHcpOworCisgICAgaWYgKCFzKSBzID0gIiI7ICAgICAgICAgICAgICAgICAgICAgLyog QWx3YXlzIGRvIHRoaXMuICovCisKKyAgICBmdHAgPSAod2hhdCAmIFdfRlRQKSA/IDEgOiAwOwkv KiBGVFAgb3IgS2VybWl0ICovCisgICAgbmV0ID0gbmV0d29yayB8fCBmdHA7CisgICAgeG5ldCA9 IGZ0cCA/IDEgOiBuZXR0eXBlOwkJLyogTkVUX1RDUEIgPT0gMSAqLworCisgICAgaWYgKGNpbml0 ID09IDAgfHwgY2VuZHcgPiAwKSB7ICAgICAgLyogSGFuZGxlIGJvcmRlcmxpbmUgY2FzZXMuLi4g Ki8KKyAgICAgICAgaWYgKGYgPT0gU0NSX0NXKSB7ICAgICAgICAgICAgICAvKiBDbG9zZSB3aW5k b3csIGJ1dCBpdCdzIG5vdCBvcGVuICovCisgICAgICAgICAgICBmdF93aW4gPSAwOworICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMTEsInNjcmVlbmcgQSIs cyxmKTsKKyAgICAgICAgaWYgKGYgPT0gU0NSX0VNIHx8CisgICAgICAgICAgIChmID09IFNDUl9Q VCAmJiBjID09ICdFJykpIHsgLyogRmF0YWwgZXJyb3IgYmVmb3JlIHdpbmRvdyBvcGVuICovCisg ICAgICAgICAgICBjb25vbGwoIiIpOyBjb25vYygnPycpOyBjb25vbGwocyk7IHJldHVybjsgLyog UmVndWxhciBkaXNwbGF5ICovCisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNpbml0ID09IDAp IHsgICAgICAgICAgICAgICAgICAgLyogT25seSBjYWxsIGluaXRzY3IoKSBvbmNlICovCisJLyog Q2hlY2sgdGhlc2Ugbm93IC0tIGlmIHRoZXkgYXJlIGRlZmluZWQgYnV0IG5vdCBudW1lcmljICov CisJLyogdGhleSBjYW4gY3Jhc2ggY3Vyc2VzICovCisgICAgICAgIGNlbmR3ID0gMTsgICAgICAg ICAgICAgICAgICAgICAgLyogTmV3IHdpbmRvdyBuZWVkcyByZXBhaW50aW5nICovCisgICAgICAg IGRlYnVnKEYxMDAsInNjcmVlbmcgY2FsbGluZyBpbml0c2NyIiwiIiwwKTsKKyAgICAgICAgaW5p dHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNlcy4gKi8KKyAg ICAgICAgZGVidWcoRjEwMCwic2NyZWVuZyBpbml0c2NyIG9rIiwiIiwwKTsKKyAgICAgICAgY2lu aXQrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBjdXJzZXMgd2FzIGluaXRp YWxpemVkLiAqLworICAgIH0KKyAgICBmdF93aW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBXaW5kb3cgaXMgb3BlbiAqLworICAgIGlmIChyZXBhaW50KSB7CisjaWZkZWYgQ0tfV1JF RlJFU0gKKy8qCisgIFRoaXMgdG90YWxseSByZXBhaW50cyB0aGUgc2NyZWVuLCBqdXN0IHdoYXQg d2Ugd2FudCwgYnV0IHdlIGNhbiBvbmx5CisgIGRvIHRoaXMgd2l0aCByZWFsIGN1cnNlcywgYW5k IHRoZW4gb25seSBpZiBjbGVhcm9rKCkgYW5kIHdyZWZyZXNoKCkgYXJlCisgIHByb3ZpZGVkIGlu IHRoZSBjdXJzZXMgbGlicmFyeS4KKyovCisgICAgICAgIFJlc3RvcmVDbWRNb2RlKCk7CisjZWxz ZSAgLyogTm8gQ0tfV1JFRlJFU0ggKi8KKy8qCisgIEtlcm1pdCdzIGRvLWl0LXlvdXJzZWxmIG1l dGhvZCwgd29ya3Mgd2l0aCBhbGwgdHlwZXMgb2YgZnVsbHNjcmVlbgorICBzdXBwb3J0LCBidXQg ZG9lcyBub3QgcmVwYWludCBhbGwgdGhlIGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUgZmlsZW5h bWUKKyAgaXMgbG9zdCwgYmVjYXVzZSBpdCBhcnJpdmVzIGF0IGEgY2VydGFpbiB0aW1lIGFuZCBu ZXZlciBjb21lcyBhZ2FpbiwgYW5kCisgIEtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3Qgc2F2ZSBp dCBhbnl3aGVyZS4gIE1ha2luZyB0aGlzIG1ldGhvZCB3b3JrIGZvcgorICBhbGwgZmllbGRzIHdv dWxkIGJlIGEgcmF0aGVyIG1ham9yIHJlY29kaW5nIHRhc2ssIGR1cGxpY2F0aW5nIHdoYXQgY3Vy c2VzCisgIGFscmVhZHkgZG9lcywgYW5kIHdvdWxkIGFkZCBhIGxvdCBvZiBjb21wbGV4aXR5IGFu ZCBzdG9yYWdlIHNwYWNlLgorKi8KKyAgICAgICAgY2VuZHcgPSAxOworI2VuZGlmIC8qIENLX1dS RUZSRVNIICovCisgICAgICAgIHJlcGFpbnQgPSAwOworICAgIH0KKyAgICBpZiAoY2VuZHcpIHsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVkIHByZXZpb3VzbHkg Ki8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuZyBzZXR1cCBvayIsIiIsMCk7CisgICAgICAg IEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwgKGxvbmcp IHpndGRpcigpICk7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX0xJTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAoCisjaWZkZWYg TkVXRlRQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0cCA/IChmdHBfaG9zdCA/ IGZ0cF9ob3N0IDogIih1bmtub3duKSIpIDoKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHRuYW1lKSApOworCisgICAgICAgIGlmIChuZXQpIHsK KyNpZmRlZiBORVRDT05OCisJICAgIGludCBzZWN1cmUgPSAwOworCSAgICBjaGFyICogeG5hbWU7 CisJICAgIGlmICh4bmV0ID4gbm5ldG5hbWUpCisJICAgICAgeG5hbWUgPSAiW0VSUk9SXSI7CisJ ICAgIGVsc2UKKwkgICAgICB4bmFtZSA9IG5ldG5hbWVbeG5ldF07CisjaWZkZWYgTkVXRlRQCisg ICAgICAgICAgICBpZiAoZnRwKSB7CisJCWlmIChmdHBpc3NlY3VyZSgpKQorCQkgIHNlY3VyZSA9 IDE7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCSAgICAgIGlmICgwCisjaWZk ZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgICAgIHx8IElTX1NTSCgpCisjZW5kaWYgLyogU1NI QlVJTFRJTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICB8fCBja190 bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpCisjZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxh ZyB8fCBzc2xfYWN0aXZlX2ZsYWcKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBSTE9HQ09E RQorI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAg ICAgIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lO CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisj ZW5kaWYgLyogUkxPR0NPREUgKi8KKyAgICAgICAgICAgICAgICAgKSB7CisJCXNlY3VyZSA9IDE7 CisJICAgIH0KKwkgICAgaWYgKHNlY3VyZSkgeworICAgICAgICAgICAgICAgIGNoYXIgYnVmWzMw XTsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKKyAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSB4bmFtZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisjZWxzZQorICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpICIobmV0d29yaykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlm IC8qIE5FVENPTk4gKi8KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzcGVlZCA8 IDBMKQorICAgICAgICAgICAgICBzcGVlZCA9IHR0Z3NwZCgpOworICAgICAgICAgICAgaWYgKHNw ZWVkID4gMEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3BlZWQgPT0gODg4MCkgeworICAgICAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICI3NS8xMjAwIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGNoYXIgc3BlZWRidWZbNjRdIDsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50 ZihzcGVlZGJ1ZiwgIiVsZCIsIHNwZWVkKTsKKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBzcGVlZGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgIih1bmtub3duKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUEFSLAorICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgcGFybmFtKChjaGFyKXBhcml0eSkKKyAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgcGN0bGJsID0gKHdoYXQgJiBXX1NFTkQpOworICAgICAgICBjZW5k dyA9IDA7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgc3dpdGNoIiwiIixmKTsKKyAg ICBkZWJ1ZyhGMDAwLCJTQ1JFRU5DIGMiLCIiLGMpOworICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMg biIsIiIsbik7CisKKyAgICBsZW4gPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAvKiBM ZW5ndGggb2YgYXJndW1lbnQgc3RyaW5nICovCisgICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogSGFuZGxlIG91ciBmdW5jdGlvbiBjb2RlICovCisgICAgICBjYXNlIFND Ul9GTjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgKi8KKyAgICAgICAgb2xkcGN0 ID0gcGN0ID0gMEw7ICAgICAgICAgICAgICAvKiBSZXNldCBwZXJjZW50cyAqLworI2lmZGVmIEdG VElNRVIKKyAgICAgICAgZ3R2ID0gKENLRkxPQVQpIC0xLjA7CisgICAgICAgIC8qIG9sZGd0diA9 IChDS0ZMT0FUKSAtMS4wOyAqLworI2Vsc2UKKyAgICAgICAgZ3R2ID0gLTFMOworICAgICAgICAv KiBvbGRndHYgPSAtMUw7ICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICBvbGR3aW4g PSAtMTsKKyAgICAgICAgZnNpeiA9IChDS19PRkZfVCktMUw7CQkvKiBJbnZhbGlkYXRlIHByZXZp b3VzIGZpbGUgc2l6ZSAqLworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19QQ0QsIChsb25nKSAwICk7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIDAgKTsKKyAgICAgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgMCAp OworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19F UlIsIChsb25nKSAiIiApOworCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKKyAgICAgICAgcSA9IGxlbjsgICAgICAg ICAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBuYW1lIGxlbmd0aCBmb3IgbGF0ZXIgKi8KKyAg ICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGZpbGUgdHlw ZSAoY2FuIGNoYW5nZSkgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7 CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQU46 ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgYXMtbmFtZSAqLworICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7Cisj aWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAg ICAvKiBGaWxlIHNpemUgKi8KKyAgICAgICAgZnNpeiA9IG47CisgICAgICAgIGlmIChmc2l6ID4g KENLX09GRl9UKS0xKSB7CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJB TlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSBuICk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsJLyogUHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8KKyAgICAg ICAgICAgIHBjdGxibCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwY3RsYmwg PSAwOworCX0KKyAgICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxl IHR5cGUgKi8KKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYg LyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUFQ6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KKyAgICAgICAgaWYg KHNwYWNrZXRzIDwgNSkgeworICAgICAgICAgICAgZXh0ZXJuIGludCBzeXNpbmRleDsKKyAgICAg ICAgICAgIGV4dGVybiBzdHJ1Y3Qgc3lzZGF0YSBzeXNpZGxpc3RbXTsKKyAgICAgICAgICAgIC8q IFRoaW5ncyB0aGF0IHdvbid0IGNoYW5nZSBhZnRlciB0aGUgNHRoIHBhY2tldCAqLworICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBwYXJuYW0oKGNoYXIpcGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgIGlmICgKKyNpZmRlZiBORVdGVFAKKwkJKGZ0cCAmJiAoc3BhY2tldHMgPT0g MSB8fCBycGFja2V0cyA9PSAxKSkgfHwKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJc3BhY2tldHMg PT0gNAorCQkpIHsKKyAgICAgICAgICAgICAgICBpZiAoCisjaWZkZWYgTkVXRlRQCisJCSAgICBm dHAgfHwKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykg JiYgKHN5c2luZGV4ID4gLTEpKQorCQkgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIg bXNnYnVmWzEyOF07CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXQpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLCJOZXR3b3JrIEhvc3Q6ICVzICglcykiLAorI2lm ZGVmIE5FV0ZUUAorCQkJICAgICAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpIDoK KyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJCSAgICAgICB0dG5hbWUsCisjaWZkZWYgTkVXRlRQCisJ CQkgICAgICAgZnRwID8gZnRwX3NydnR5cCA6CisjZW5kaWYgLyogTkVXRlRQICovCisJCQkgICAg ICAgc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQorCQkJICAgICAgICk7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1 ZiwKKwkJCQkiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVzIChyZW1vdGUgaG9zdCBpcyAlcykiLAor CQkJCXR0bmFtZSwKKwkJCQlzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lCisJCQkJKTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsCisJCQkJICAgIChsb25nKSBDV19MSU4sCisJCQkJICAgIChsb25n KSBtc2didWYKKwkJCQkgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyNpZmRlZiBDS19USU1FUlMKKyAgICAgICAgaWYgKC8qIHJ0dGZsZyAmJiAqLyBw cm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICBsb25nIHh4OworICAgICAgICAgICAg aWYgKAorI2lmZGVmIFNUUkVBTUlORworICAgICAgICAgICAgICAgIHN0cmVhbWluZyAmJiBvbGR3 aW4gIT0gLTIKKyNlbHNlCisgICAgICAgICAgICAgICAgMAorI2VuZGlmIC8qIFNUUkVBTUlORyAq LworICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGNoYXIgbXNnYnVmWzY0XTsK KyAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwiMDAgLyAwMCIpOworICAgICAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKKwkJCQkobG9uZykgQ1dfVE1P LAorCQkJCShsb25nKSBtc2didWYKKwkJCQkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICB4eCA9IChydHRkZWxheSArIDUwMCkgLyAxMDAwOworICAgICAgICAgICAgICAg IGlmICh4eCAhPSBvbGRydHQgfHwgcmN2dGltbyAhPSBvbGR0aW0pIHsKKyAgICAgICAgICAgICAg ICAgICAgY2hhciBtc2didWZbNjRdOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1 ZiwiJTAybGQgLyAlMDJkIiwgeHgsIHJjdnRpbW8pOworICAgICAgICAgICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCisJCQkJICAgIChsb25nKSBDV19UTU8sCisJ CQkJICAgIChsb25nKSBtc2didWYKKwkJCQkgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgb2xk cnR0ID0geHg7CisgICAgICAgICAgICAgICAgICAgIG9sZHRpbSA9IHJjdnRpbW87CisgICAgICAg ICAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisjZW5kaWYgLyogQ0tfVElNRVJTICovCisKKyAgICAgICAgeCA9ICh3aGF0 ICYgV19SRUNWKSA/ICAgICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KKyAgICAgICAgICBycGt0 bCsocHJvdG9jb2w9PVBST1RPX0s/MTowKSA6CisgICAgICAgICAgICBzcGt0bDsKKyAgICAgICAg aWYgKHggIT0gb2xkbGVuKSB7ICAgICAgICAgICAgICAvKiBCdXQgb25seSBpZiBpdCBjaGFuZ2Vk LiAqLworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfUEwsIChsb25nKSB4ICk7CisgICAgICAgICAgICBvbGRsZW4gPSB4OworICAgICAgICB9 CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BD LCAobG9uZykgc3BhY2tldHMgKTsKKworICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAm JiAhZnRwKSB7IC8qIFdpbmRvdyBzbG90cyAqLworICAgICAgICAgICAgY2hhciB3c1sxNl07Cisg ICAgICAgICAgICBpbnQgZmxhZzsKKyAgICAgICAgICAgIGZsYWcgPSAwOworI2lmZGVmIFNUUkVB TUlORworICAgICAgICAgICAgaWYgKHN0cmVhbWluZykgeworICAgICAgICAgICAgICAgIGlmIChv bGR3aW4gIT0gLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50Zih3cywiU1RSRUFNSU5H Iik7CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICBv bGR3aW4gPSAtMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRp ZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgICAgICAgaWYgKHdjdXIgIT0gb2xkd2luKSB7Cisg ICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCAiJWQgb2YgJWQiLCB3Y3VyIDwgMSA/IDEgOiB3 Y3VyLCB3c2xvdG4pOworICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICAg ICAgICBvbGR3aW4gPSB3Y3VyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmxh ZykgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwg KGxvbmcpIENXX1dTLCAobG9uZykgd3MgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAgICAgaWYg KGVycm9ycyAhPSBvbGR0cnkpIHsgICAgICAgICAvKiBSZXRyeSBjb3VudCwgaWYgY2hhbmdlZCAq LworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykg Q1dfUFIsIChsb25nKSBlcnJvcnMgKTsKKyAgICAgICAgICAgIG9sZHRyeSA9IGVycm9yczsKKyAg ICAgICAgfQorCS8qIFNlbmRlcidzIHBhY2tldCB0eXBlICovCisgICAgICAgIGlmICghZnRwICYm IChjICE9IG9sZHR5cCAmJiBjICE9ICdZJyAmJiBjICE9ICdOJykpIHsKKyAgICAgICAgICAgIGNo YXIgdHlwZVsyXTsKKyAgICAgICAgICAgIHNwcmludGYodHlwZSwgIiVjIixjKTsKKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BULCAobG9u ZykgdHlwZSApOworICAgICAgICAgICAgb2xkdHlwID0gYzsKKyAgICAgICAgfQorICAgICAgICBz d2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBoYW5kbGUgc3BlY2lmaWMgcGFj a2V0IHR5cGVzICovCisgICAgICAgICAgY2FzZSAnUyc6ICAgICAgICAgICAgICAgICAgICAgLyog QmVnaW5uaW5nIG9mIHRyYW5zZmVyICovCisgICAgICAgICAgICBmY250ID0gZmJ5dCA9IDBMOyAg ICAgICAgICAgLyogQ2xlYXIgY291bnRlcnMgKi8KKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAg ICBndHYgPSAtMS4wOworI2Vsc2UgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgZ3R2ID0gLTFM OyAgICAgICAgICAgICAgICAgIC8qIEFuZCBvbGQvbmV3IHRoaW5ncy4uLiAqLworI2VuZGlmIC8q IEdGVElNRVIgKi8KKyAgICAgICAgICAgIG9sZHBjdCA9IHBjdCA9IDBMOworICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICBjYXNlICdaJzogICAgICAgICAgICAgICAgICAgICAvKiBvciBF T0YgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogcGt0bnVtIiwi IixuKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogb2xkcGN0Iiwi IixvbGRwY3QpOworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBwY3Qi LCIiLHBjdCk7CisgICAgICAgICAgY2FzZSAnRCc6ICAgICAgICAgICAgICAgICAgICAgLyogRGF0 YSBwYWNrZXQgKi8KKyAgICAgICAgICAgIGlmIChmc2l6ID4gMEwpIHsgICAgICAgICAgICAvKiBT aG93IHBlcmNlbnQgZG9uZSBpZiBrbm93biAqLworICAgICAgICAgICAgICAgIG9sZHBjdCA9IHBj dDsgICAgICAgICAgIC8qIFJlbWVtYmVyIHByZXZpb3VzIHBlcmNlbnQgKi8KKyAgICAgICAgICAg ICAgICBob3dmYXIgPSBmZmM7CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgICAgICAgICAgICAgaWYg KHdoYXQgJiBXX1NFTkQpCS8qIEFjY291bnQgZm9yIFBTRU5EIG9yIFJFU0VORCAqLworICAgICAg ICAgICAgICAgICAgaG93ZmFyICs9IHNlbmRzdGFydDsKKyAgICAgICAgICAgICAgICBlbHNlIGlm ICh3aGF0ICYgV19SRUNWKQorICAgICAgICAgICAgICAgICAgaG93ZmFyICs9IHJzX2xlbjsKKyNl bmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICAgICAgICAgICAgICAvKiBQZXJjZW50IGRvbmUsIHRv IGJlIGRpc3BsYXllZC4uLiAqLworICAgICAgICAgICAgICAgIGlmIChjID09ICdaJykgeworICAg ICAgICAgICAgICAgICAgICBpZiAoIWRpc2NhcmQgJiYgIWN4c2VlbiAmJiAhY3pzZWVuKSBwY3Qg PSAxMDBMOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgcGN0ID0g KGZzaXogPiA5OUwpID8gKGhvd2ZhciAvIChmc2l6IC8gMTAwTCkpIDogMEw7CisgICAgICAgICAg ICAgICAgaWYgKHBjdCA+IDEwMEwgfHwgICAgICAgLyogQWxsb3cgZm9yIGV4cGFuc2lvbiBhbmQg Ki8KKyAgICAgICAgICAgICAgICAgICAob2xkcGN0ID09IDk5TCAmJiBwY3QgPCAwTCkpIC8qIG90 aGVyIGJvdW5kYXJ5IGNvbmRpdGlvbnMgKi8KKyAgICAgICAgICAgICAgICAgIHBjdCA9IDEwMEw7 CisgICAgICAgICAgICAgICAgaWYgKHBjdCAhPSBvbGRwY3QpICAgICAgLyogT25seSBkbyB0aGlz IDEwMCB0aW1lcyBwZXIgZmlsZSAqLworICAgICAgICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwg cGN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19GRkMsIChsb25nKSBob3dmYXIpOworICAgICAgICAgICAgY3BzID0gc2hvY3BzKChp bnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChv bGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgICAgY2FzZSAnJSc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dHMsIHJldHJhbnNt aXNzaW9ucyAqLworICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93 ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwg aG93ZmFyKTsgKi8KKworICAgICAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsg dGltZW91dHM7CisgICAgICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJy b3IgY291bnQsIGlmIGNoYW5nZWQgKi8KKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfUFIsCisJCQkgICAgICAgKGxvbmcpIGVycm9ycworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9sZHRyeSA9IGVy cm9yczsKKyAgICAgICAgICAgICAgICBpZiAocykgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9u Zykgcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNh c2UgJ0UnOiAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tldCAqLworICAgICAgICAg ICAgaWYgKCpzKSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZmNudCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8qIFNvIG5vIGJ5dGVzIGZvciB0aGlz IGZpbGUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ1EnOiAgICAgICAg ICAgICAgICAgICAgIC8qIENydW5jaGVkIHBhY2tldCAqLworICAgICAgICAgICAgY3BzID0gc2hv Y3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNo b2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGFtYWdlZCBQ YWNrZXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSAncSc6ICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1DIG9yIGNv bm5lY3Rpb24gbG9zdCAqLworICAgICAgICAgICAgaWYgKCFzKSBzID0gIiI7CisgICAgICAgICAg ICBpZiAoISpzKSBzID0gIlVzZXIgaW50ZXJydXB0aW9uIG9yIGNvbm5lY3Rpb24gbG9zdCI7Cisg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgcworICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgIGNhc2UgJ1QnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQg Ki8KKyAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7Cisg ICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7 ICovCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgIlRpbWVvdXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAg ICAgICAgICBpZiAoZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNo YW5nZWQgKi8KKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBl cnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg IG9sZHRyeSA9IGVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVycywgZG8gbm90aGlu ZyAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAg U2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKwor ICAgICAgY2FzZSBTQ1JfU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIg c3RhdHVzICovCisgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1NUIGMiLCIiLGMpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9TVCBzdWNjZXNzIiwiIixzdWNjZXNzKTsK KyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfU1QgY3hzZWVuIiwiIixjeHNlZW4pOwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAgICAv KiBPSywgcHJpbnQgMTAwICUgKi8KKyAgICAgICAgICAgIGlmIChwY3RsYmwpCisgICAgICAgICAg ICAgIHVwZHBjdChvbGRwY3QsMTAwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcp IGZmYyk7CisgICAgICAgICAgICBwY3QgPSAxMDA7CisgICAgICAgICAgICBvbGRwY3QgPSAwOwor ICAgICAgICB9IGVsc2UgaWYgKGZzaXogPiAwTCkgICAgICAgICAgIC8qIE5vdCBPSywgdXBkYXRl IGZpbmFsIHBlcmNlbnQgKi8KKy8qCisgIFRoZSBlbHNlIHBhcnQgd3JpdGVzIGFsbCBvdmVyIHRo ZSBzY3JlZW4gLS0gaG93ZmFyIGFuZC9vciBmc2l6IGhhdmUKKyAgYmVlbiByZXNldCBhcyBhIGNv bnNlcXVlbmNlIG9mIHRoZSBub3QtT0tuZXNzIG9mIHRoZSB0cmFuc2Zlci4KKyovCisgICAgICAg ICAgaWYgKHBjdGxibCkKKyAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsIChob3dmYXIgKiAxMDBM KSAvIGZzaXopOworI2Vsc2UKKyAgICAgICAgaWYgKGMgPT0gU1RfT0spIHsgICAgICAgICAgICAg ICAvKiBPSywgcHJpbnQgMTAwICUgKi8KKyAgICAgICAgICAgIGlmIChwY3RsYmwpIHsKKwkJdXBk cGN0KG9sZHBjdCwxMDApOworCSAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gMTAwOworICAgICAgICAgICAgb2xkcGN0ID0g MDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICov CisKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df VFIsIChsb25nKSAiIiApOworCisgICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAg ICAgLyogUHJpbnQgbmV3IHN0YXR1cyBtZXNzYWdlICovCisgICAgICAgICAgY2FzZSBTVF9PSzog ICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgT0sgKi8KKyAgICAgICAgICAgIGZjbnQrKzsg ICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCB0aGlzIGZpbGUgKi8KKwkgICAgaWYgKHdoYXQg PT0gKFdfRlRQfFdfRlRfREVMRSkpIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IENXX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEZWxldGUg T0siCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJICAgIH0gZWxzZSB7CisJ CWZieXQgKz0gZmZjOworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRyYW5zZmVyIE9LIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCSAgICB9CisgICAgICAgICAgICByZXR1 cm47CisKKyAgICAgICAgICBjYXNlIFNUX0RJU0M6ICAgICAgICAgICAgICAgICAvKiBEaXNjYXJk ZWQgKi8KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSAiRmlsZSBkaXNjYXJkZWQiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2Fz ZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0ZWQgKi8KKyAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAi VHJhbnNmZXIgaW50ZXJydXB0ZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgU1RfU0tJUDogeyAg ICAgICAgICAgICAgICAvKiBTa2lwcGVkICovCisgICAgICAgICAgICBjaGFyIGVycmJ1Zls2NF0g OworCSAgICBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKKyAgICAgICAgICAgICAgICBzcHJp bnRmKCBlcnJidWYsICJGaWxlIHNraXBwZWQsICglcykiLCBza3JlYXNvbltuXSApIDsKKwkgICAg ZWxzZQorICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIkZpbGUgc2tpcHBlZCIgKSA7 CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgZXJyYnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgY2FzZSBTVF9F UlI6ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgICAgaWYg KCFzKSBzID0gKGNoYXIgKillcGt0bXNnOworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOworI2lmZGVmIENPTU1F TlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9SRUZVOiAgICAgICAgICAg ICAgICAgLyogUmVmdXNlZCAqLworICAgICAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICAg ICAgY2hhciBlcnJidWZbNjRdIDsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJS ZWZ1c2VkLCAlcyIsIHMgKSA7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsKGxvbmcpIENXX0VSUiwobG9uZykgZXJyYnVmKTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs KGxvbmcpQ1dfRVJSLChsb25nKSJSZWZ1c2VkIik7CisgICAgICAgICAgICB9CisjaWZkZWYgQ09N TUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0lOQzoKKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZyki SW5jb21wbGV0ZSIpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9 IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg ICAgY2FzZSBTVF9NU0c6CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwobG9uZylDV19NU0csKGxvbmcpcyk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLworICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLAor ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBi YWQgc3RhdHVzICoqKiIgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg ICBjYXNlIFNDUl9UQzogeyAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxl dGUgKi8KKyAgICAgICAgICBjaGFyIG1zZ2J1ZlsxMjhdOworICAgICAgICAgIEt1aVNldFByb3Bl cnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCB0ZmNwcyk7CisgICAgICAgICAg aWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsCisgICAgICAgICAg ICAgICAgICAgICAgIlNVQ0NFU1MuICBGaWxlczogJXMsIEJ5dGVzOiAlbGQsICVsZCBDUFMiLAor ICAgICAgICAgICAgICAgICAgICAgIGZpbGNudCAtIGZpbHJlaiwKKyAgICAgICAgICAgICAgICAg ICAgICBja2ZzdG9hKGZieXQpLAorICAgICAgICAgICAgICAgICAgICAgIHRmY3BzCisgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBtc2didWYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1RS LAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBoaG1tc3MoKGxvbmcpCisjaWZkZWYg R0ZUSU1FUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwdHNlY3Mg KyAwLjUpCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNl Y3MKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApKTsKKworI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICBvbGRndHYgPSAoQ0tGTE9B VCkgLTEuMDsKKyNlbHNlCisgICAgICAgICAgb2xkZ3R2ID0gLTFMOworI2VuZGlmIC8qIEdGVElN RVIgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7 ICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICBvbGR0eXAgPSAwOyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBv bGRsZW4gPSAtMTsKKyAgICAgICAgICBvbGR0aW0gPSAtMTsKKyAgICAgICAgICBjZW5kdyA9IDE7 CisgICAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfTk9URSk7ICAgLyogQ2xvc2Ugd2luZG93 LCB0aGVuIGJlZXAuICovCisgICAgICAgICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAg LyogV2luZG93IGNsb3NlZC4gKi8KKyAgICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBj YXNlIFNDUl9FTTogICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0IChmYXRhbCkg Ki8KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df RVJSLCAobG9uZykgcyApOworICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9GQUlMKTsKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAg ICAgICAgICAvKiBRdWFudGl0eSBlcXVhbHMgKi8KKyAgICAgIGNhc2UgU0NSX1RVOiAgICAgICAg ICAgICAgICAgICAgICAvKiBVbmRlbGltaXRlZCB0ZXh0ICovCisgICAgICBjYXNlIFNDUl9UTjog ICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgc3RhcnQgKi8KKyAgICAg IGNhc2UgU0NSX1RaOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBl bmQgKi8KKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoaWdub3Jl ZCBpbiBmdWxsc2NyZWVuIGRpc3BsYXkpICovCisKKyAgICAgIGNhc2UgU0NSX1hEOiAgICAgICAg ICAgICAgICAgICAgICAvKiBYLXBhY2tldCBkYXRhICovCisgICAgICAgIHBjdCA9IG9sZHBjdCA9 IDA7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X05BTSwgKGxvbmcpIHMgKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9DVzog ICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgV2luZG93ICovCisjaWZkZWYgQ09NTUVOVAor ICAgICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7ICAgICAgICAgIC8qIFJlc2V0IHRoZXNlIGZv ciBuZXh0IHRpbWUuICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBvbGR0eXAgPSAw OyBvbGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKKyAgICAgICAgb2xkdGlt ID0gLTE7CisKKyAgICAgICAgZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBGbGFn IHRoYXQgd2luZG93IGlzIGNsb3NlZC4gKi8KKyAgICAgICAgY2VuZHcgPSAxOyByZXR1cm47CisK KyAgICAgIGNhc2UgU0NSX0NEOiAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGN1cnJl bnQgZGlyZWN0b3J5ICovCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0RJUiwgKGxvbmcpIHMgKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNt ZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAg ZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCisgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIioqKiBzY3Jl ZW4oKSBjYWxsZWQgd2l0aCBiYWQgZnVuY3Rpb24gY29kZSAqKioiCisgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYgLyogS1VJICovCisj ZW5kaWYgLyogTUFDICovCisKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBDS19DVVJQ T1MKKy8qIER1bW1pZXMgZm9yIHdoZW4gY3Vyc29yIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCAq LworaW50Citja19jdXJwb3Mocm93LCBjb2wpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitpbnQK K2NrX2NscygpIHsKKyAgICByZXR1cm4oLTEpOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworICAg IHJldHVybigtMSk7Cit9CisjZW5kaWYgLyogQ0tfQ1VSUE9TICovCisKKyNpZm5kZWYgTk9JS1NE CisjaWZkZWYgSUtTREIKKworc3RydWN0IGlrc2RiZmxkIGRiZmxkW10gPSB7CisgICAvKiBPZmZz ZXQgICAgTGVuZ3RoICAgIFR5cGUgICAqLworICAgIHsgREJfRkxBR1MsIGRCX0ZMQUdTLCBEQlRf SEVYIH0sICAgIC8qICAwIGRiX0ZMQUdTIEZsYWdzICovCisgICAgeyBEQl9BVFlQRSwgZEJfQVRZ UEUsIERCVF9IRVggfSwgICAgLyogIDEgZGJfQVRZUEUgQXV0aCB0eXBlICovCisgICAgeyBEQl9B TU9ERSwgZEJfQU1PREUsIERCVF9IRVggfSwgICAgLyogIDMgZGJfQU1PREUgQXV0aCBtb2RlICov CisgICAgeyBEQl9TVEFURSwgZEJfU1RBVEUsIERCVF9IRVggfSwgICAgLyogIDIgZGJfU1RBVEUg U3RhdGUgKi8KKyAgICB7IERCX01ZUElELCBkQl9NWVBJRCwgREJUX0hFWCB9LCAgICAvKiAgNSBk Yl9NWVBJRCBQSUQgKi8KKyAgICB7IERCX1NBRERSLCBkQl9TQUREUiwgREJUX0hFWCB9LCAgICAv KiAgNCBkYl9TQUREUiBTZXJ2ZXIgYWRkcmVzcyAqLworICAgIHsgREJfQ0FERFIsIGRCX0NBRERS LCBEQlRfSEVYIH0sICAgIC8qICA2IGRiX0NBRERSIENsaWVudCBhZGRyZXNzICovCisgICAgeyBE Ql9TVEFSVCwgZEJfU1RBUlQsIERCVF9EQVQgfSwgICAgLyogIDcgZGJfU1RBUlQgU2Vzc2lvbiBz dGFydCAqLworICAgIHsgREJfTEFTVFUsIGRCX0xBU1RVLCBEQlRfREFUIH0sICAgIC8qICA4IGRi X0xBU1RVIExhc3QgdXBkYXRlICovCisgICAgeyBEQl9VTEVOLCAgZEJfVUxFTiwgIERCVF9IRVgg fSwgICAgLyogIDkgZGJfVUxFTiAgVXNlcm5hbWUgbGVuZ3RoICovCisgICAgeyBEQl9ETEVOLCAg ZEJfRExFTiwgIERCVF9IRVggfSwgICAgLyogMTAgZGJfRExFTiAgRGlyZWN0b3J5IG5hbWUgbGVu Z3RoICovCisgICAgeyBEQl9JTEVOLCAgZEJfSUxFTiwgIERCVF9IRVggfSwgICAgLyogMTEgZGJf SUxFTiAgSW5mbyBsZW5ndGggKi8KKyAgICB7IERCX1BBRDEsICBkQl9QQUQxLCAgREJUX1VORCB9 LCAgICAvKiAxMiBkYl9QQUQxICAoUmVzZXJ2ZWQpICovCisgICAgeyBEQl9VU0VSLCAgZEJfVVNF UiwgIERCVF9TVFIgfSwgICAgLyogMTMgZGJfVVNFUiAgVXNlcm5hbWUgKi8KKyAgICB7IERCX0RJ UiwgICBkQl9ESVIsICAgREJUX1NUUiB9LCAgICAvKiAxNCBkYl9ESVIgICBDdXJyZW50IERpcmVj dG9yeSAqLworICAgIHsgREJfSU5GTywgIGRCX0lORk8sICBEQlRfU1RSIH0gICAgIC8qIDE1IGRi X0lORk8gIFN0YXRlLXNwZWNpZmljIGluZm8gKi8KK307CisKK3N0YXRpYyBjaGFyIGxja25hbVtD S01BWFBBVEgrMV07ICAgICAgICAvKiBMb2NrZmlsZSBwYXRobmFtZSAqLworc3RhdGljIGNoYXIg dG1wbGNrW0NLTUFYUEFUSCsxXTsgICAgICAgIC8qIFRlbXBvcmFyeSBsb2NrZmlsZSBuYW1lICov CisKK3N0YXRpYyBjaGFyICogdXBkbW9kZSA9ICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgbW9k ZSBmb3IgZm9wZW4oKSAqLworI2lmZGVmIE9TMgorICAicitiIgorI2Vsc2UKKyNpZmRlZiBWTVMK KyAgInIrYiIKKyNlbHNlCisgICJyKyIKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIg Ki8KKyAgOworCisvKiAgRCBCIEkgTiBJIFQgIC0tICBJbml0aWFsaXplIHRoZSBJS1NEIGRhdGFi YXNlLi4uICAqLworCitpbnQKK2RiaW5pdCgpIHsKKyAgICBleHRlcm4gaW50IGRiaW5pdGVkOwor ICAgIGludCB4ID0gMDsKKyAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJkaXIgMSIsZGJkaXIsMCk7 CisgICAgZGVidWcoRjExMCwiZGJpbml0IGRiZmlsZSAxIixkYmZpbGUsMCk7CisgICAgaWYgKGRi aW5pdGVkKQorICAgICAgcmV0dXJuKDApOworI2lmZGVmIE9TMgorICAgIGlmICghZGJkaXIpIHsK KyNpZmRlZiBOVAorICAgICAgICBjaGFyICogcCA9IE5VTEw7CisgICAgICAgIGlmICghaXNXaW45 NSgpKSB7CisgICAgICAgICAgICBwID0gZ2V0ZW52KCJTeXN0ZW1Sb290Iik7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBwID0gZ2V0ZW52KCJ3aW5ib290ZGlyIik7CisgICAgICAgICAg ICBpZiAoIXApICBwID0gZ2V0ZW52KCJ3aW5kaXIiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo IXApIHAgPSAiQzovIjsKKyAgICAgICAgZGJkaXIgPSBtYWxsb2Moc3RybGVuKHApKzIpOworICAg ICAgICBzdHJjcHkoZGJkaXIscCk7CQkvKiBzYWZlICovCisgICAgICAgIHAgPSBkYmRpcjsKKyAg ICAgICAgd2hpbGUgKCpwKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xcJykKKyAgICAgICAg ICAgICAgKnAgPSAnLyc7CisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCoocC0xKSAhPSAnLycgKSB7CisgICAgICAgICAgICAqcCsrID0gJy8nOworICAgICAgICAgICAg KnAgPSAnXDAnOworICAgICAgICB9CisjZWxzZSAvKiBOVCAqLworICAgICAgICBtYWtlc3RyKCZk YmRpciwiQzovIik7CisjZW5kaWYgLyogTlQgKi8KKyAgICB9CisjZWxzZSAvKiBPUzIgKi8KKyAg ICBpZiAoIWRiZGlyKQorICAgICAgbWFrZXN0cigmZGJkaXIsSUtfREJBU0VESVIpOworI2VuZGlm IC8qIE9TMiAqLworCisgICAgaWYgKCFkYmZpbGUpIHsKKyAgICAgICAgY2hhciAqIHMgPSAiIjsK KyAgICAgICAgeCA9IHN0cmxlbihkYmRpcik7CisgICAgICAgIGlmIChkYmRpclt4LTFdICE9ICcv JykgeworICAgICAgICAgICAgcyA9ICIvIjsKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgfQor ICAgICAgICB4ICs9IChpbnQpc3RybGVuKElLX0RCQVNFRklMKTsKKyAgICAgICAgZGJmaWxlID0g KGNoYXIgKiltYWxsb2MoeCsxKTsKKyAgICAgICAgc3ByaW50ZihkYmZpbGUsIiVzJXMlcyIsZGJk aXIscyxJS19EQkFTRUZJTCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmRpciAy IixkYmRpciwwKTsKKyAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJmaWxlIDIiLGRiZmlsZSwwKTsK KyAgICBteXBpZCA9IGdldHBpZCgpOyAgICAgICAgICAgICAgICAgICAvKiBHZXQgbXkgcGlkICov CisgICAgZGVidWcoRjEwMSwiZGJpbml0IG15cGlkIiwiIixteXBpZCk7CisKKyAgICBpZiAoIW15 aGV4aXBbMF0pIHsgICAgICAgICAgICAgICAgICAvKiBTZXQgbXkgaGV4IElQIGFkZHJlc3MgKi8K KyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbXl4aXBhZGRy OworICAgICAgICBpZiAoZ2V0bG9jYWxpcGFkZHIoKSA+IC0xKSB7CisgICAgICAgICAgICBteWlw ID0gbXl4aXBhZGRyOworICAgICAgICAgICAgc3ByaW50ZihteWhleGlwLCIlMDhseCIsbXlpcCk7 IC8qIChOZWVkcyBmaXhpbmcgZm9yIElQdjYpICovCisgICAgICAgIH0gZWxzZQorI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworICAgICAgICAgIGNrc3RybmNweShteWhleGlwLCIwMDAwMDAwMCIsOSk7 CisgICAgfQorICAgIGRlYnVnKEYxMTEsImRiaW5pdCBteWlwIixteWhleGlwLG15aXApOworICAg IGlmICghcGVlcmhleGlwWzBdKSB7ICAgICAgICAgICAgICAgIC8qIEdldCBwZWVyJ3MgIGhleCBJ UCBhZGRyZXNzICovCisjaWZkZWYgVENQU09DS0VUCisgICAgICAgIGV4dGVybiB1bnNpZ25lZCBs b25nIHBlZXJ4aXBhZGRyOworICAgICAgICBpZiAoY2tnZXRwZWVyKCkpIHsKKyAgICAgICAgICAg IHBlZXJpcCA9IHBlZXJ4aXBhZGRyOworICAgICAgICAgICAgc3ByaW50ZihwZWVyaGV4aXAsIiUw OGx4IixwZWVyaXApOyAvKiAoTmVlZHMgZml4aW5nIGZvciBJUHY2KSAqLworICAgICAgICAgICAg ZGVidWcoRjExMSwiZGJpbml0IHBlZXJpcCIscGVlcmhleGlwLHBlZXJpcCk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJkYmluaXQgY2tnZXRwZWVyIGZhaWx1cmUi LCIiLGVycm5vKTsKKyAgICAgICAgICAgIGNrc3RybmNweShwZWVyaGV4aXAsIjAwMDAwMDAwIiw5 KTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KHBlZXJoZXhpcCwiMDAwMDAw MDAiLDkpOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJk YmluaXQgcGVlcmlwIixwZWVyaGV4aXAscGVlcmlwKTsKKyAgICBkZWJ1ZyhGMTAxLCJkYmluaXQg ZGJlbmFibGVkIiwiIixkYmVuYWJsZWQpOworICAgIGlmIChkYmVuYWJsZWQgJiYgaW5zZXJ2ZXIp IHsKKyAgICAgICAgbXlkYnNsb3QgPSBnZXRzbG90KCk7CisgICAgICAgIGRlYnVnKEYxMTEsImRi aW5pdCBnZXRzbG90Iixja2l0b2EoaWtkYm9wZW4pLHgpOworICAgICAgICBpZiAoaWtkYm9wZW4p IGRiaW5pdGVkID0gMTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisvKiAgVSBQIEQgUyBM IE8gVCAgLS0gIFVwZGF0ZSBzbG90IG4gICovCisKKy8qCisgIE9wZW5zIHRoZSBkYXRhYmFzZSBp ZiBuZWNlc3NhcnksIHNlZWtzIHRvIHNsb3Qgbiwgd3JpdGVzIGN1cnJlbnQgcmVjb3JkCisgIGFu ZCBhZGRzIGN1cnJlbnQgdGltZSB0byBsYXN0LXVwZGF0ZSBmaWVsZC4gIG4gaXMgdGhlIHJlY29y ZCBzZXF1ZW5jZSBudW1iZXIKKyAgKDAsIDEsIDIsIC4uLiksIG5vdCB0aGUgc2VlayBwb2ludGVy LiAgIFJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLgorKi8KK2ludAordXBkc2xv dChuKSBpbnQgbjsgeyAgICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBvdXIgc2xvdCAqLwor ICAgIGludCByYyA9IDA7CisgICAgQ0tfT0ZGX1QgcG9zaXRpb247CisKKyAgICBkZWJ1ZyhGMTEx LCJ1cGRzbG90IiwiaWtkYm9wZW4iLGlrZGJvcGVuKTsKKyAgICBpZiAoIWlrZGJvcGVuKSAgICAg ICAgICAgICAgICAgICAgICAvKiBOb3QgaWYgbm90IG9rICovCisgICAgICByZXR1cm4oMCk7Cisg ICAgaWYgKCFkYmZwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT3BlbiBkYXRhYmFzZSBp ZiBub3Qgb3BlbiAqLworICAgICAgICBkYmZwID0gZm9wZW4oZGJmaWxlLHVwZG1vZGUpOyAgIC8q IEluIHVwZGF0ZSBuby10cnVuY2F0ZSBtb2RlICovCisgICAgICAgIGlmICghZGJmcCkgeworICAg ICAgICAgICAgZGVidWcoRjExMCwidXBkc2xvdCBmb3BlbiBmYWlsZWQiLGRiZmlsZSwwKTsKKyAg ICAgICAgICAgIGlrZGJvcGVuID0gMDsKKyAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAg IH0KKyAgICB9CisgICAgLyogZGVidWcoRjExMSwidXBkc2xvdCBkYmZpbGUiLGRiZmlsZSxkYmZw KTsgKi8KKyAgICBwb3NpdGlvbiA9IG4gKiBEQl9SRUNMOworICAgIGlmIChDS0ZTRUVLKGRiZnAs cG9zaXRpb24sMCkgPCAwKSB7CS8qIFNlZWsgdG8gZGVzaXJlZCBzbG90ICovCisgICAgICAgIGRl YnVnKEYxMTEsInVwZHNsb3QgZnNlZWsgZmFpbGVkIixkYmZpbGUsbXlkYnNlZWspOworICAgICAg ICBpa2Rib3BlbiA9IDA7CisgICAgICAgIHJjID0gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAg LyogVXBkYXRlIHRoZSB1cGRhdGUgdGltZSAqLworICAgICAgICBzdHJuY3B5KCZkYnJlY1tkYmZs ZFtkYl9MQVNUVV0ub2ZmXSwKKyAgICAgICAgICAgICAgICBja2RhdGUoKSwKKyAgICAgICAgICAg ICAgICBkYmZsZFtkYl9MQVNUVV0ubGVuCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYg KGZ3cml0ZShkYnJlYywxLERCX1JFQ0wsZGJmcCkgPCBEQl9SRUNMKSB7IC8qIFdyaXRlIHRoZSBy ZWNvcmQgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsInVwZHNsb3QgZndyaXRlIGZhaWxlZCIs ZGJmaWxlLDApOworICAgICAgICAgICAgaWtkYm9wZW4gPSAwOworICAgICAgICAgICAgcmMgPSAt MTsKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbHVzaCB0aGUg d3JpdGUgKi8KKyAgICAgICAgICAgIGZmbHVzaChkYmZwKTsKKyAgICAgICAgfQorICAgIH0KKyAg ICByZXR1cm4ocmMpOworfQorCisvKiAgSSBOIEkgVCBTIEwgTyBUIC0tICBJbml0aWFsaXplIHNs b3QgbiB3aXRoIG15IGluZm8gICovCisKK2ludAoraW5pdHNsb3QobikgaW50IG47IHsgICAgICAg ICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgc2xvdCAqLworICAgIGludCBrOworI2lmZGVmIFRD UFNPQ0tFVAorICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHBlZXJ4aXBhZGRyOworI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworCisgICAgZGVidWcoRjEwMSwiaW5pdHNsb3QiLCIiLG4pOworCisjaWZk ZWYgVVNFX01FTUNQWQorICAgIG1lbXNldChkYnJlYywzMixEQl9SRUNMKTsKKyNlbHNlCisgICAg Zm9yIChrID0gMDsgayA8IERCX1JFQ0w7IGsrKykKKyAgICAgIGRicmVjW2tdID0gJ1wwNDAnOwor I2VuZGlmIC8qIFVTRV9NRU1DUFkgKi8KKworICAgIG15ZmxhZ3MgPSBEQkZfSU5VU0U7ICAgICAg ICAgICAgICAgIC8qIFNldCBpbi11c2UgZmxhZyAqLworICAgIG15c3RhdGUgPSBXX05PVEhJTkc7 CisgICAgbXlhdHlwZSA9IDBMOworICAgIG15YW1vZGUgPSAwTDsKKworICAgIGsgPSBkYmZsZFtk Yl9GTEFHU10ubGVuOyAgICAgICAgICAgIC8qIExlbmd0aCBvZiBmbGFncyBmaWVsZCAqLworICAg IHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0ZMQUdTXS5vZmZdLHVsb25ndG9oZXgobXlmbGFncyxr KSxrKTsKKworICAgIGsgPSBkYmZsZFtkYl9BVFlQRV0ubGVuOworICAgIHN0cm5jcHkoJmRicmVj W2RiZmxkW2RiX0FUWVBFXS5vZmZdLHVsb25ndG9oZXgobXlhdHlwZSxrKSxrKTsKKworICAgIGsg PSBkYmZsZFtkYl9BTU9ERV0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0FNT0RF XS5vZmZdLHVsb25ndG9oZXgobXlhbW9kZSxrKSxrKTsKKworICAgIGsgPSBkYmZsZFtkYl9TVEFU RV0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX1NUQVRFXS5vZmZdLHVsb25ndG9o ZXgobXlzdGF0ZSxrKSxrKTsKKworICAgIGsgPSBkYmZsZFtkYl9TQUREUl0ubGVuOworICAgIHN0 cm5jcHkoJmRicmVjW2RiZmxkW2RiX1NBRERSXS5vZmZdLHVsb25ndG9oZXgobXlpcCxrKSxrKTsK KworI2lmZGVmIFRDUFNPQ0tFVAorICAgIGNrZ2V0cGVlcigpOworICAgIGsgPSBkYmZsZFtkYl9D QUREUl0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0NBRERSXS5vZmZdLHVsb25n dG9oZXgocGVlcnhpcGFkZHIsayksayk7CisjZWxzZQorICAgIGsgPSBkYmZsZFtkYl9DQUREUl0u bGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0NBRERSXS5vZmZdLHVsb25ndG9oZXgo MEwsayksayk7CisjZW5kaWYgLyogVENQU09DS0VUICovCisKKyAgICBrID0gZGJmbGRbZGJfTVlQ SURdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9NWVBJRF0ub2ZmXSx1bG9uZ3Rv aGV4KG15cGlkLGspLGspOworCisgICAgayA9IGRiZmxkW2RiX1NUQVJUXS5sZW47CisgICAgc3Ry bmNweSgmZGJyZWNbZGJmbGRbZGJfU1RBUlRdLm9mZl0sY2tkYXRlKCksayk7CisKKyAgICBrID0g ZGJmbGRbZGJfVUxFTl0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX1VMRU5dLm9m Zl0sIjAwMDAiLDQpOworCisgICAgayA9IGRiZmxkW2RiX0RMRU5dLmxlbjsKKyAgICBzdHJuY3B5 KCZkYnJlY1tkYmZsZFtkYl9ETEVOXS5vZmZdLCIwMDAwIiw0KTsKKworICAgIGsgPSBkYmZsZFtk Yl9JTEVOXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfSUxFTl0ub2ZmXSwiMDAw MCIsNCk7CisKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9JTkZPXS5vZmZdLCJJTklUIiw0 KTsKKyAgICByZXR1cm4odXBkc2xvdChuKSk7Cit9CisKK2ludAorc2xvdHN0YXRlKHgsczEsczIs czMpIGludCB4OyBjaGFyICpzMSwgKnMyLCAqczM7IHsKKyAgICBpbnQgaywgbDEsIGwyLCBsMywg ejsKKyAgICBteXN0YXRlID0geDsKKyAgICBkZWJ1ZyhGMTAxLCJzbG90c3RhdGUgaWtkYm9wZW4i LCIiLGlrZGJvcGVuKTsKKyAgICBpZiAoIWlrZGJvcGVuKQorICAgICAgcmV0dXJuKC0xKTsKKyAg ICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGwxID0gc3RybGVuKHMxKTsKKyAgICBpZiAoIXMyKSBz MiA9ICIiOworICAgIGwyID0gc3RybGVuKHMyKTsKKyAgICBpZiAoIXMzKSBzMyA9ICIiOworICAg IGwzID0gc3RybGVuKHMzKTsKKyAgICBzdHJuY3B5KCZkYnJlY1tEQl9TVEFURV0sdWxvbmd0b2hl eChteXN0YXRlLDQpLDQpOworICAgIGsgPSBkYmZsZFtkYl9JTEVOXS5sZW47CisgICAgeiA9IGwx ICsgbDIgKyBsMyArIDI7CisgICAgaWYgKHogPiBkQl9JTkZPKQorICAgICAgeiA9IGRCX0lORk87 CisgICAgc3RybmNweSgmZGJyZWNbREJfSUxFTl0sdWxvbmd0b2hleCgodW5zaWduZWQgbG9uZyl6 LGspLGspOworICAgIGsgPSBkYmZsZFtkYl9JTkZPXS5sZW47CisgICAgeiA9IGRiZmxkW2RiX0lO Rk9dLm9mZjsKKyAgICBpZiAobDEgPD0gaykgeworICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMSxs MSsxLDMyKTsKKyAgICAgICAgeiArPSBsMSsxOworICAgICAgICBrIC09IGwxKzE7CisgICAgICAg IGlmIChsMiA8PSBrKSB7CisgICAgICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMixsMisxLDMyKTsK KyAgICAgICAgICAgIHogKz0gbDIrMTsKKyAgICAgICAgICAgIGsgLT0gbDIrMTsKKyAgICAgICAg ICAgIGlmIChsMyA8PSBrKQorICAgICAgICAgICAgICBsc2V0KCZkYnJlY1t6XSxzMyxrLDMyKTsK KyAgICAgICAgfQorICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyAgICAg ICAgY2hhciBidWZbMTI4XTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHN0cm5jcHkoYnVmLCZk YnJlY1tEQl9JTkZPXSwxMjcpOworICAgICAgICBidWZbMTI3XSA9IE5VTDsKKyAgICAgICAgZm9y IChpID0gMTI2OyBpID4gMCAmJiBidWZbaV0gPT0gMzI7IGktLSkgYnVmW2ldID0gMDsKKyAgICAg ICAgZGVidWcoRjExMSwic2xvdHN0YXRlIixidWYsbXlzdGF0ZSk7CisgICAgfQorI2VuZGlmIC8q IERFQlVHICovCisgICAgeiA9IHVwZHNsb3QobXlkYnNsb3QpOworICAgIGRlYnVnKEYxMDEsInNs b3RzdGF0ZSB1cGRzbG90IiwiIix6KTsKKyAgICByZXR1cm4oeik7Cit9CisKK2ludAorc2xvdGRp cihzMSxzMikgY2hhciAqIHMxLCAqIHMyOyB7ICAgICAgIC8qIFVwZGF0ZSBjdXJyZW50IGRpcmVj dG9yeSAqLworICAgIGludCBrLCBsZW4xLCBsZW4yOworICAgIGlmICghaWtkYm9wZW4pCisgICAg ICByZXR1cm4oLTEpOworICAgIGlmICghczEpIHMxID0gIiI7CisgICAgaWYgKCFzMikgczIgPSAi IjsKKyAgICBsZW4xID0gc3RybGVuKHMxKTsKKyAgICBsZW4yID0gc3RybGVuKHMyKTsKKyAgICBr ID0gZGJmbGRbZGJfRExFTl0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW0RCX0RMRU5dLHVsb25n dG9oZXgoKHVuc2lnbmVkIGxvbmcpKGxlbjErbGVuMiksayksayk7CisgICAgayA9IGRiZmxkW2Ri X0RJUl0ubGVuOworICAgIGlmIChsZW4xID4gMCkgeworICAgICAgICBsc2V0KCZkYnJlY1tkYmZs ZFtkYl9ESVJdLm9mZl0sczEsbGVuMSwzMik7CisgICAgICAgIGxzZXQoJmRicmVjW2RiZmxkW2Ri X0RJUl0ub2ZmK2xlbjFdLHMyLGstbGVuMSwzMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbHNl dCgmZGJyZWNbZGJmbGRbZGJfRElSXS5vZmZdLHMyLGssMzIpOworICAgIH0KKyAgICByZXR1cm4o dXBkc2xvdChteWRic2xvdCkpOworfQorCisvKiAgRiBSIEUgRSBTIEwgTyBUICAtLSAgRnJlZSBz bG90IG4gICovCisKK2ludAorZnJlZXNsb3QobikgaW50IG47IHsKKyAgICBpbnQgazsKKyAgICBp ZiAoIWlrZGJvcGVuKQorICAgICAgcmV0dXJuKDApOworICAgIGRiZmxhZ3MgPSAwTDsKKyAgICBp ZiAobiA9PSBteWRic2xvdCkgeworICAgICAgICBkYmZsYWdzID0gbXlmbGFncyAmIH5EQkZfSU5V U0U7CisgICAgICAgIGRiZmxhZ3MgJj0gfkRCRl9MT0dHRUQ7CisgICAgfQorICAgIGsgPSBkYmZs ZFtkYl9GTEFHU10ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0ZMQUdTXS5vZmZd LHVsb25ndG9oZXgoZGJmbGFncyxrKSxrKTsKKyAgICByZXR1cm4odXBkc2xvdChuKSk7Cit9CisK Ky8qICBHIEUgVCBTIEwgTyBUICAtLSAgRmluZCBhIGZyZWUgZGF0YWJhc2Ugc2xvdDsgcmV0dXJu cyBzbG90IG51bWJlciAgKi8KKworI2lmZGVmIFVOSVgKKyNpbmNsdWRlIDxmY250bC5oPgkJCS8q IEZvciBjcmVhdCgpICovCisjZW5kaWYJLyogVU5JWCAqLworCitpbnQKK2dldHNsb3QoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIGEgZnJlZSBzbG90IGZvciB1cyAqLwor ICAgIEZJTEUgKiByZnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgIC8qIFJldHVybnMgc2xvdCBu dW1iZXIgKDAsIDEsIC4uLikgKi8KKyAgICBjaGFyIGlkc3RyaW5nWzY0XTsgICAgICAgICAgICAg ICAgICAvKiBQSUQgc3RyaW5nIGJ1ZmZlciAoZGVjaW1hbCkgKi8KKyAgICBjaGFyIHBpZGJ1Zls2 NF0sICogczsKKyAgICBpbnQgaiwgaywgbiwgeCwgcmMgPSAtMTsKKyAgICBpbnQgbG9ja2ZkLCB0 cmllcywgaGF2ZXNsb3QgPSAwOworICAgIGxvbmcgbG9ja3BpZDsKKyAgICBDS19PRkZfVCBpOwor ICAgIC8qIGNoYXIgaXBidWZbMTddOyAqLworCisgICAgaWYgKCFteWhleGlwWzBdKSAgICAgICAg ICAgICAgICAgICAgLyogU2V0IG15IGhleCBJUCBhZGRyZXNzIGlmIG5vdCBzZXQgKi8KKyAgICAg IGNrc3RybmNweSgoY2hhciAqKW15aGV4aXAsIjdGMDAwMDAxIiwzMyk7CisgICAgc3ByaW50Zihp ZHN0cmluZywiJTA4bHg6JTAxMGxkXG4iLG15aXAsbXlwaWQpOworICAgIGRlYnVnKEYxMTAsImdl dHNsb3QgaWRzdHJpbmciLCBpZHN0cmluZywgMCk7CisKKyAgICAvKiBNYWtlIHRlbXBvcmFyeSBs b2NrZmlsZSBuYW1lIElQLlBJRCAoaGV4LmhleCkgKi8KKyAgICAvKiBUaGlzIHNob3VsZCBmaXQg aW4gMTQgY2hhcnMgLS0gaHVnZSBQSURzIGFyZSB1c3VhbGx5IG5vdCBwb3NzaWJsZSAqLworICAg IC8qIG9uIDE0LWNoYXIgZmlsZW5hbWUgc3lzdGVtcy4gKi8KKworICAgIHNwcmludGYodG1wbGNr LCIlcyUwOGx4LiVseCIsZGJkaXIsbXlpcCxteXBpZCk7CisgICAgZGVidWcoRjExMCwiZ2V0c2xv dCB0ZW1wZmlsZSIsdG1wbGNrLDApOworCisgICAgLyogTWFrZSBhIHRlbXBvcmFyeSBmaWxlICov CisKKyAgICBsb2NrZmQgPSBjcmVhdCh0bXBsY2ssIDA2MDApOwkvKiBCVVQgVEhJUyBJU04nVCBQ T1JUQUJMRSAqLworICAgIGlmIChsb2NrZmQgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTEsImdl dHNsb2NrIHRlbXAgbG9ja2ZpbGUgY3JlYXRlIGZhaWx1cmUiLCB0bXBsY2ssIGVycm5vKTsKKyAg ICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgLyogV3JpdGUgbXkgKGRlY2ltYWwpIFBJRCBp bnRvIHRoZSB0ZW1wIGZpbGUgKi8KKworICAgIHdyaXRlKGxvY2tmZCxpZHN0cmluZywoaW50KXN0 cmxlbihpZHN0cmluZykpOworICAgIGlmIChjbG9zZShsb2NrZmQpIDwgMCkgeyAgICAgICAgICAg IC8qIENsb3NlIGxvY2tmaWxlICovCisgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZXJyb3Ig Y2xvc2luZyB0ZW1wIGxvY2tmaWxlIiwgIiIsIGVycm5vKTsKKyAgICAgICAgcmV0dXJuKC0xKTsK KyAgICB9CisgICAgc3ByaW50ZihsY2tuYW0sIiVzJXMiLGRiZGlyLElLX0xPQ0tGSUxFKTsgLyog QnVpbGQgbG9ja2ZpbGUgbmFtZSAqLworICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9ja2ZpbGUi LGxja25hbSwwKTsKKworICAgIHJmcCA9IGZvcGVuKGxja25hbSwiciIpOyAgICAgICAgICAgIC8q IFNlZSBpZiBsb2NrZmlsZSBleGlzdHMgKi8KKyAgICBpZiAocmZwKSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBzby4uLiAqLworICAgICAgICByc2V0KHBpZGJ1ZiwiIiw2NCwwKTsK KyAgICAgICAgeCA9IGZyZWFkKHBpZGJ1ZiwxLDYzLHJmcCk7ICAgICAvKiBSZWFkIElEIHN0cmlu ZyBmcm9tIGl0ICovCisgICAgICAgIGZjbG9zZShyZnApOyAgICAgICAgICAgICAgICAgICAgLyog YW5kIGNsb3NlIGl0IHF1aWNrbHkgKi8KKyAgICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2Nr IGV4aXN0cyIscGlkYnVmLDApOworICAgICAgICBpZiAoeCA+IDApIHsgICAgICAgICAgICAgICAg ICAgIC8qIElmIHdlIGhhdmUgYSBQSUQsIGNoZWNrIGl0ICovCisgICAgICAgICAgICBjaGFyICog cyA9IHBpZGJ1ZjsKKyAgICAgICAgICAgIHdoaWxlICgqcykgeworICAgICAgICAgICAgICAgIGlm IChpc2xvd2VyKCpzKSkgKnMgPSB0b3VwcGVyKCpzKTsKKyAgICAgICAgICAgICAgICBpZiAoKnMg PT0gJzonKSB7CisgICAgICAgICAgICAgICAgICAgICpzID0gTlVMOworICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2sgSVAiLHBpZGJ1ZiwwKTsKKyAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiZ3Rlc2xvdCBteSAgIElQIixteWhleGlwLDApOworICAgICAg ICAgICAgICAgICAgICBpZiAoIXN0cmNtcChwaWRidWYsbXloZXhpcCkpIHsgLyogU2FtZSBJUCBh ZGRyZXNzPyAqLworICAgICAgICAgICAgICAgICAgICAgICAgbG9ja3BpZCA9IGF0b2wocysxKTsg LyogWWVzLCBub3cgZ2V0IFBJRCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwiZ2V0c2xvdCBsb2NrcGlkIiwiIixsb2NrcGlkKTsKKworICAgICAgICAgICAgICAgICAgICAg ICAgLyogQ2hlY2sgaWYgUElEIGxvY2twaWQgb24gdGhpcyBjb21wdXRlciBpcyBhbGl2ZSAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHpjaGtwaWQobG9ja3BpZCk7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoIXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAwLCJnZXRzbG90IFBJRCBzdGFsZSxyZW1vdmluZyBsb2NrIiwiIiwwKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bmxpbmsobGNrbmFtKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgbG9j a2ZpbGUgb3BlbiBmYWlsdXJlIixsY2tuYW0sZXJybm8pOworICAgICAgICB9CisgICAgfQorICAg IC8qIFRyeSBJS19MQ0tUUklFUyAoMTYpIHRpbWVzIHRvIHJlbmFtZSB0ZW1wIGZpbGUgdG8gbG9j a2ZpbGUgKi8KKworICAgIGZvciAodHJpZXMgPSBJS19MQ0tUUklFUzsgdHJpZXMgPiAwOyB0cmll cy0tKSB7CisgICAgICAgIGlmICh6cmVuYW1lKHRtcGxjayxsY2tuYW0pID09IDApCisgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZGF0YWJhc2UgbG9ja2VkIGJ5 IHBpZCIsICIiLCBkYnBpZCk7CisgICAgICAgIHNsZWVwKElLX0xDS1NMRUVQKTsKKyAgICB9Cisg ICAgaWYgKHRyaWVzIDwgMSkgeyAgICAgICAgICAgICAgICAgICAgLyogQ291bGRuJ3QgKi8KKyAg ICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBjcmVhdGUgbG9jayBmYWlsdXJlIixsY2tuYW0sMCk7 CisgICAgICAgIHJldHVybigtMSk7CisgICAgfQorICAgIC8qIEhhdmUgbG9jaywgb3BlbiBkYXRh YmFzZSAqLworCisgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBoYXMgbG9jayIsbGNrbmFtLDApOyAv KiBIYXZlIGxvY2sgKi8KKworICAgIGlmICghZGJmaWxlKQorICAgICAgcmV0dXJuKC0xKTsKKwor ICAgIC8qIElmIGRhdGFiYXNlIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdC4gKi8KKworICAgIGRl YnVnKEYxMTAsImdldHNsb3QgZGJmaWxlIixkYmZpbGUsMCk7CisgICAgaWYgKHpjaGtpKGRiZmls ZSkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMTAsImdldHNsb3QgY3JlYXRpbmcgbmV3IGRhdGFi YXNlIixkYmZpbGUsMCk7CisgICAgICAgIHggPSBjcmVhdChkYmZpbGUsMDY2MCk7CisgICAgICAg IGlmICh4IDwgMCkgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBjcmVhdCgpIGZh aWxlZCIsIGRiZmlsZSwgZXJybm8pOworICAgICAgICAgICAgZ290byB4c2xvdDsKKyAgICAgICAg fQorICAgICAgICBjbG9zZSh4KTsKKyAgICB9CisgICAgZGJmcCA9IGZvcGVuKGRiZmlsZSx1cGRt b2RlKTsgICAgICAgLyogT3BlbiBpdCBpbiB1cGRhdGUgbW9kZSAqLworICAgIGlmICghZGJmcCkg eworICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGZvcGVuIGZhaWxlZCIsZGJmaWxlLGVycm5v KTsKKyAgICAgICAgZ290byB4c2xvdDsKKyAgICB9CisgICAgLyogTm93IGZpbmQgYSBmcmVlIChv ciBuZXcpIHNsb3QuLi4gKi8KKworICAgIGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgICAgICAg ICAgIC8qIFNlZWsgcG9pbnRlciB0byBsYXN0IHJlY29yZCBpbnVzZSAqLworICAgIG15ZGJzZWVr ID0gMEw7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNlZWsgcG9pbnRlciBmb3IgbXkgcmVjb3Jk ICovCisKKyAgICAvKiBRdWlja2x5IHJlYWQgdGhlIHdob2xlIGRhdGFiYXNlOyBuID0gcmVjb3Jk IGNvdW50ZXIsIGkgPSBzZWVrIHBvaW50ZXIgKi8KKworICAgIGZvciAobiA9IDAsIGkgPSAwOyAh ZmVvZihkYmZwKTsgaSArPSBEQl9SRUNMLCBuKyspIHsKKyAgICAgICAgeCA9IGZyZWFkKGRicmVj LDEsREJfUkVDTCxkYmZwKTsgLyogUmVhZCBhIHJlY29yZCAqLworICAgICAgICBpZiAoeCA8IDEp ICAgICAgICAgICAgICAgICAgICAgIC8qIEVPRiBub3QgY2F1Z2h0IGJ5IGZlb2YoKSAqLworICAg ICAgICAgIGJyZWFrOworI2lmbmRlZiBOT0ZUUlVOQ0FURQorICAgICAgICBpZiAoeCAhPSBEQl9S RUNMKSB7ICAgICAgICAgICAgIC8qIFdhdGNoIG91dCBmb3IgdHJhaWxpbmcganVuayAqLworICAg ICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBiYWQgc2l6ZSIsIiIseCk7ICAvKiAoU2hvdWxk bid0IGhhcHBlbi4uLikgKi8KKyNpZmRlZiBDT0hFUkVOVAorICAgICAgICAgICAgY2hzaXplKGZp bGVubyhkYmZwKSxpKTsKKyNlbHNlCisgICAgICAgICAgICBmdHJ1bmNhdGUoZmlsZW5vKGRiZnAp LChDS19PRkZfVClpKTsKKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworICAgICAgICAgICAgeCA9IDA7 CisgICAgICAgICAgICBDS0ZTRUVLKGRiZnAsaSwwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisjZW5kaWYgLyogTk9GVFJVTkNBVEUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0 c2xvdCByZWNvcmQiLCIiLG4pOworICAgICAgICBrID0gZGJmbGRbZGJfRkxBR1NdLm9mZjsKKyAg ICAgICAgaiA9IGRiZmxkW2RiX0ZMQUdTXS5sZW47CisgICAgICAgIGRiZmxhZ3MgPSBoZXh0b3Vs b25nKCZkYnJlY1trXSxqKTsKKyAgICAgICAgZGVidWcoRjAwMSwiZ2V0c2xvdCBkYmZsYWdzIiwi IixkYmZsYWdzKTsKKyAgICAgICAgayA9IGRiZmxkW2RiX01ZUElEXS5vZmY7CisgICAgICAgIGog PSBkYmZsZFtkYl9NWVBJRF0ubGVuOworICAgICAgICBkYnBpZCAgPSBoZXh0b3Vsb25nKCZkYnJl Y1trXSxqKTsKKyAgICAgICAgZGVidWcoRjAwMSwiZ2V0c2xvdCBkYnBpZCIsIiIsZGJwaWQpOwor ICAgICAgICBrID0gZGJmbGRbZGJfU0FERFJdLm9mZjsKKyAgICAgICAgaiA9IGRiZmxkW2RiX1NB RERSXS5sZW47CisgICAgICAgIGRiaXAgPSBoZXh0b3Vsb25nKCZkYnJlY1trXSxqKTsKKyAgICAg ICAgZGVidWcoRjAwMSwiZ2V0c2xvdCBkYmlwIiwiIixkYmlwKTsKKworICAgICAgICBpZiAoZGJm bGFncyAmIERCRl9JTlVTRSkgeyAgICAgIC8qIFJlbWVtYmVyIGxhc3Qgc2xvdCBpbiB1c2UgKi8K KyAgICAgICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgaXQn cyBSRUFMTFkgaW4gdXNlICovCisgICAgICAgICAgICBpZiAoZGJwaWQgPT0gbXlwaWQgJiYgZGJp cCA9PSBteWlwKSB7IC8qIENoZWNrIGZvciBQSUQgPT0gbXkgUElEICovCisgICAgICAgICAgICAg ICAgeCA9IDE7CisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCByZWNvcmQgcGlk IiwiIixkYnBpZCk7CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgLyog T3IgZm9yIHN0YWxlIFBJRCAqLworICAgICAgICAgICAgICAgIHggPSB6Y2hrcGlkKGRicGlkKTsK KyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHpjaGtwaWQoKSIsIiIseCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXgpIHsgICAgICAgICAgICAgICAgICAgLyog Qm9ndXMgcmVjb3JkICovCisgICAgICAgICAgICAgICAgeCA9IGZyZWVzbG90KG4pOworICAgICAg ICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3Qgc3RhbGUgcmVjb3JkIHBpZDogZnJlZXNsb3Qo KSIsIiIseCk7CisgICAgICAgICAgICAgICAgaWYgKHggPiAtMSAmJiAhaGF2ZXNsb3QpCisgICAg ICAgICAgICAgICAgICBkYmZsYWdzID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAg ICAgICAgICAgICAvKiBJdCdzIHJlYWxseSBpbiB1c2UgKi8KKyAgICAgICAgICAgICAgICBkYmxh c3R1c2VkID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWhhdmVz bG90KSB7ICAgICAgICAgICAgICAgIC8qIElmIEkgZG9uJ3QgaGF2ZSBhIHNsb3QgeWV0ICovCisg ICAgICAgICAgICBpZiAoIShkYmZsYWdzICYgREJGX0lOVVNFKSkgeyAgICAgICAvKiBDbGFpbSB0 aGlzIG9uZSAqLworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZnJlZSBzbG90 IiwgIiIsIG4pOworICAgICAgICAgICAgICAgIGhhdmVzbG90ID0gMTsKKyAgICAgICAgICAgICAg ICBteWRic2VlayA9IGk7CisgICAgICAgICAgICAgICAgbXlkYnNsb3QgPSBuOyAgICAgICAgICAg LyogQnV0IGtlZXAgZ29pbmcuLi4gKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgICAvKiBDb21lIGhlcmUgd2l0aCBpID09IHNlZWsgcG9pbnRlciB0byBmaXJzdCByZWNvcmQg YWZ0ZXIgZW9mICovCisKKyAgICBpZiAoIWhhdmVzbG90KSB7ICAgICAgICAgICAgICAgICAgICAv KiBGb3VuZCBubyBmcmVlIHNsb3Qgc28gYWRkIHRvIGVuZCAqLworICAgICAgICBkZWJ1ZyhGMTAx LCJnZXRzbG90IG5ldyBzbG90IiwiIixuKTsKKyAgICAgICAgaGF2ZXNsb3QgPSAxOworICAgICAg ICBteWRic2VlayA9IGk7CisgICAgICAgIG15ZGJzbG90ID0gbjsKKyAgICB9CisgICAgaWtkYm9w ZW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLyogT0sgdG8gbWFrZSBkYXRhYmFzZSBlbnRy aWVzICovCisgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCByZWNvcmRzIiwiIixuKTsKKyAgICBkZWJ1 ZyhGMTAxLCJnZXRzbG90IGRibGFzdHVzZWQiLCIiLGRibGFzdHVzZWQpOworICAgIGRlYnVnKEYx MDEsImdldHNsb3QgaSIsIiIsaSk7CisKKyAgICAvKiBUcmltIHN0YWxlIHJlY29yZHMgZnJvbSBl bmQgKi8KKworI2lmbmRlZiBOT0ZUUlVOQ0FURQorICAgIGlmIChpID4gZGJsYXN0dXNlZCtEQl9S RUNMKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgdHJ1bmNhdGluZyBhdCIsIiIsZGJs YXN0dXNlZCtEQl9SRUNMKTsKKyNpZmRlZiBDT0hFUkVOVAorICAgICAgICB4ID0gY2hzaXplKGZp bGVubyhkYmZwKSxkYmxhc3R1c2VkK0RCX1JFQ0wpOworI2Vsc2UKKyAgICAgICAgeCA9IGZ0cnVu Y2F0ZShmaWxlbm8oZGJmcCksKENLX09GRl9UKShkYmxhc3R1c2VkK0RCX1JFQ0wpKTsKKyNlbmRp ZiAvKiBDT0hFUkVOVCAqLworICAgICAgICBpZiAoeCA8IDApICAgICAgICAgICAgICAgICAgICAg IC8qIChOb3QgZmF0YWwpICovCisgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBmdHJ1bmNh dGUgZmFpbGVkIiwgIiIsIGVycm5vKTsKKyAgICB9CisjZW5kaWYgLyogTk9GVFJVTkNBVEUgKi8K KworICAgIC8qIEluaXRpYWxpemUgbXkgcmVjb3JkICovCisKKyAgICBpZiAoaW5pdHNsb3QobXlk YnNsb3QpIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGluaXRzbG90KCkgZXJy b3IiLCIiLG4pOworICAgICAgICBpa2Rib3BlbiA9IDA7CisgICAgICAgIGdvdG8geHNsb3Q7Cisg ICAgfQorICAgIGRlYnVnKEYxMDEsImdldHNsb3QgT0siLCIiLG15ZGJzbG90KTsKKyAgICByYyA9 IG15ZGJzbG90OyAgICAgICAgICAgICAgICAgICAgICAvKiBPSyByZXR1cm4gY29kZSAqLworCisg IHhzbG90OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5sb2NrIHRoZSBkYXRh YmFzZSBhbmQgcmV0dXJuICovCisgICAgaWYgKHVubGluayhsY2tuYW0pIDwgMCkgeworICAgICAg ICBkZWJ1ZyhGMTExLCJnZXRzbG90IGxvY2tmaWxlIHJlbW92YWwgZmFpbGVkIixsY2tuYW0sZXJy bm8pOworICAgICAgICByYyA9IC0xOworICAgIH0KKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlm IC8qIElLU0RCICovCisjZW5kaWYgLyogTk9JS1NEICovCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3guYy5jOTkgYi9ja2VybWl0LTkuMC4z MDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeC5jLmM5OQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5hOGE4NTdiCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3guYy5jOTkKQEAgLTAsMCArMSw5NzE4IEBA CisjaW5jbHVkZSAiY2tjc3ltLmgiCisKKy8qICBDIEsgVSBVIFMgWCAtLSAgIlVzZXIgSW50ZXJm YWNlIiBjb21tb24gZnVuY3Rpb25zLiAqLworCisvKgorICBBdXRob3JzOgorICAgIEZyYW5rIGRh IENydXogPGZkY0Bjb2x1bWJpYS5lZHU+LAorICAgICAgVGhlIEtlcm1pdCBQcm9qZWN0LCBDb2x1 bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yayBDaXR5CisgICAgSmVmZnJleSBFIEFsdG1hbiA8amFs dG1hbkBzZWN1cmUtZW5kcG9pbnRzLmNvbT4KKyAgICAgIFNlY3VyZSBFbmRwb2ludHMgSW5jLiwg TmV3IFlvcmsgQ2l0eQorCisgIENvcHlyaWdodCAoQykgMTk4NSwgMjAxMSwKKyAgICBUcnVzdGVl cyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICAgIEFs bCByaWdodHMgcmVzZXJ2ZWQuICBTZWUgdGhlIEMtS2VybWl0IENPUFlJTkcuVFhUIGZpbGUgb3Ig dGhlCisgICAgY29weXJpZ2h0IHRleHQgaW4gdGhlIGNrY21haS5jIG1vZHVsZSBmb3IgZGlzY2xh aW1lciBhbmQgcGVybWlzc2lvbnMuCisqLworCisvKgorICBUaGlzIG1vZHVsZSBjb250YWlucyB1 c2VyIGludGVyZmFjZSBmdW5jdGlvbnMgbmVlZGVkIGJ5IGJvdGggdGhlIGludGVyYWN0aXZlCisg IHVzZXIgaW50ZXJmYWNlIGFuZCB0aGUgY29tbWFuZC1saW5lLW9ubHkgdXNlciBpbnRlcmZhY2Us IGFzIHdlbGwgYXMgdGhlCisgIHNjcmVlbi1jb250cm9sIHJvdXRpbmVzIChjdXJzZXMgYW5kIGVx dWl2YWxlbnQpLgorKi8KKworLyogSW5jbHVkZXMgKi8KKworI2luY2x1ZGUgImNrY2RlYi5oIgor I2luY2x1ZGUgImNrY2FzYy5oIgorI2luY2x1ZGUgImNrY2tlci5oIgorI2luY2x1ZGUgImNrdXVz ci5oIgorI2luY2x1ZGUgImNrY3hsYS5oIgorCisjaWZuZGVmIE5PSFRFUk1DQVAKKyNpZmRlZiBO T1RFUk1DQVAKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2Vsc2UKKyNpZm5kZWYgQlNENDQKKyNkZWZp bmUgTk9IVEVSTUNBUAorI2Vsc2UKKyNpZmRlZiBfX2JzZGlfXworI2RlZmluZSBOT0hURVJNQ0FQ CisjZWxzZQorI2lmZGVmIE9QRU5CU0QKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2Vsc2UKKyNpZmRl ZiBNQUNPU1gKKyNkZWZpbmUgTk9IVEVSTUNBUAorI2VuZGlmIC8qIE1BQ09TWCAqLworI2VuZGlm IC8qIE9QRU5CU0QgKi8KKyNlbmRpZiAvKiBfX2JzZGlfXyAqLworI2VuZGlmIC8qIEJTRDQ0ICov CisjZW5kaWYgLyogTk9URVJNQ0FQICovCisjZW5kaWYgLyogTk9IVEVSTUNBUCAqLworCisjaWZu ZGVmIE5PVEVSTUNBUAorI2lmZGVmIEJTRDQ0CisjaWZuZGVmIE5PSFRFUk1DQVAKKyNpbmNsdWRl IDx0ZXJtY2FwLmg+CisjZW5kaWYgLyogTk9IVEVSTUNBUCAqLworI2VuZGlmIC8qIEJTRDQ0ICov CisjZWxzZSAgLyogIUJTRDQ0ICovCisjaWZkZWYgbGludXgKKyNpbmNsdWRlIDx0ZXJtLmg+Cisj ZW5kaWYgLyogbGludXggKi8KKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KKworI2lmZGVmIE9TMgor I2luY2x1ZGUgPHN0cmluZy5oPgorX1BST1RPVFlQKGNoYXIgKiBvczJfZ2V0aG9zdG5hbWUsICh2 b2lkKSk7CisjZGVmaW5lIGdldHBpZCBfZ2V0cGlkCisjZW5kaWYgLyogT1MyICovCisjaWZkZWYg QlNENDQKKyNpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmIC8qIEJTRDQ0ICovCisKK2V4dGVybiB4 eF9zdHJwIHh4c3RyaW5nOworCisjaWZkZWYgT1MyCisjaW5jbHVkZSAiY2tjbmV0LmgiCisjZWxz ZSAvKiBPUzIgKi8KK19QUk9UT1RZUCggY2hhciAqIGNrZ2V0cGVlciwgKFZPSUQpKTsKK19QUk9U T1RZUChpbnQgZ2V0bG9jYWxpcGFkZHIsICh2b2lkKSk7CitfUFJPVE9UWVAoaW50IGlzdG5jb21w b3J0LCAodm9pZCkpOworI2lmbmRlZiBOT0NLR0VURlFIT1NUCitfUFJPVE9UWVAoIGNoYXIgKiBj a2dldGZxaG9zdG5hbWUsKGNoYXIgKikpOworI2VuZGlmCS8qIE5PQ0tHRVRGUUhPU1QgKi8KKyNp Zm5kZWYgTkVUQ09OTgorLyoKKyAgV2Ugc2hvdWxkIGp1c3QgcHVsbCBpbiBja2NuZXQuaCBoZXJl LCBidXQgaXQgY2F1c2VzIGEgY29uZmxpY3Qgd2l0aCBjdXJzZXMuaC4KKyovCisjaWZkZWYgVENQ U09DS0VUCisjZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgU1VOWDI1CisjZGVmaW5lIE5F VENPTk4KKyNlbHNlCisjaWZkZWYgU1RSQVRVU1gyNQorI2RlZmluZSBORVRDT05OCisjZWxzZQor I2lmZGVmIElCTVgyNQorI2RlZmluZSBORVRDT05OCisjZWxzZQorI2lmZGVmIEhQWDI1CisjZGVm aW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgREVDTkVUCisjZGVmaW5lIE5FVENPTk4KKyNlbHNl CisjaWZkZWYgTlBJUEUKKyNkZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBDS19ORVRCSU9T CisjZGVmaW5lIE5FVENPTk4KKyNpZmRlZiBTVVBFUkxBVAorI2RlZmluZSBORVRDT05OCisjZWxz ZQorI2VuZGlmIC8qIFNVUEVSTEFUICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisjZW5kaWYg LyogU1VOWDI1ICovCisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLworI2VuZGlmIC8qIElCTVgyNSAq LworI2VuZGlmIC8qIEhQWDI1ICovCisjZW5kaWYgLyogREVDTkVUICovCisjZW5kaWYgLyogTlBJ UEUgKi8KKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworI2Vu ZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIFRDUFNPQ0tFVAorI2lmZGVmIE1VTFRJTkVUCisjZGVm aW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIE1VTFRJTkVUICovCisjaWZkZWYgREVDX1RDUElQCisj ZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIERFQ19UQ1BJUCAqLworI2lmZGVmIFdJTlRDUAor I2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBXSU5UQ1AgKi8KKyNpZmRlZiBUQ1BXQVJFCisj ZGVmaW5lIFRDUFNPQ0tFVAorI2VuZGlmIC8qIFRDUFdBUkUgKi8KKyNlbmRpZiAvKiBUQ1BTT0NL RVQgKi8KKworI2lmZGVmIE9TMgorI2lmZGVmIE5UCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2lu Y2x1ZGUgPHRhcGkuaD4KKyNpbmNsdWRlICJja250YXAuaCIKKyNlbHNlIC8qIE5UICovCisjZGVm aW5lIElOQ0xfVklPCisjaW5jbHVkZSA8b3MyLmg+CisjZW5kaWYgLyogTlQgKi8KKyNpZmRlZiBD T01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3VsZCB5b3UgYmVsaWV2ZSAqLwor I3VuZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDxvczIuaD4gZGVmaW5l cyB0aGlzID8gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZkZWYgQ0tfTkVUQklPUworI2lu Y2x1ZGUgImNrb25iaS5oIgorI2VuZGlmIC8qIENLX05FVEJJT1MgKi8KKworI2luY2x1ZGUgImNr b2Nvbi5oIgorZXh0ZXJuIGFzY3JlZW4gY29tbWFuZHNjcmVlbjsKKyNpZmRlZiBLVUkKKyNpbmNs dWRlICJpa3VpLmgiCisjZW5kaWYgLyogS1VJICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRl ZiBOVAorI2luY2x1ZGUgImNrbndpbi5oIgorI2VuZGlmIC8qIE5UICovCisjaWZkZWYgT1MyCisj aW5jbHVkZSAiY2tvd2luLmgiCisjaW5jbHVkZSAiY2tvc3luLmgiCisjZW5kaWYgLyogT1MyICov CisKKyNpZmRlZiBDS19UQVBJCitleHRlcm4gaW50IHR0dGFwaTsKK2V4dGVybiBpbnQgdGFwaXBh c3M7CisjZW5kaWYgLyogQ0tfVEFQSSAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpbmNsdWRl ICJja3VhdGguaCIKKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZuZGVmIFdJTlRDUAor I2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmIC8qIFdJTlRDUCAqLworCisjaWZkZWYgVk1TCisj aW5jbHVkZSA8ZGVzY3JpcC5oPgorI2luY2x1ZGUgPHNzZGVmLmg+CisjaW5jbHVkZSA8c3RzZGVm Lmg+CisjaWZuZGVmIE9MRF9WTVMKKyNpbmNsdWRlIDxsaWIkcm91dGluZXMuaD4gIC8qIE5vdCBm b3IgVkFYIEMgMi4zICovCisjZWxzZQorI2luY2x1ZGUgPGxpYmRlZi5oPgorI2VuZGlmIC8qIE9M RF9WTVMgKi8KKyNpZmRlZiBXSU5UQ1AKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZiAvKiBX SU5UQ1AgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIERDTEZET1BFTgorLyogZmRvcGVu KCkgbmVlZHMgZGVjbGFyaW5nIGJlY2F1c2UgaXQncyBub3QgZGVjbGFyZWQgaW4gPHN0ZGlvLmg+ ICovCitfUFJPVE9UWVAoIEZJTEUgKiBmZG9wZW4sIChpbnQsIGNoYXIgKikgKTsKKyNlbmRpZiAv KiBEQ0xGRE9QRU4gKi8KKworI2lmZGVmIERDTFBPUEVOCisvKiBwb3BlbigpIG5lZWRzIGRlY2xh cmluZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxzdGRpby5oPiAqLworX1BST1RPVFlQ KCBGSUxFICogcG9wZW4sIChjaGFyICosIGNoYXIgKikgKTsKKyNlbmRpZiAvKiBEQ0xQT1BFTiAq LworCitpbnQgdHRfY3JkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2FycmlhZ2Ug cmV0dXJuIGRpc3BsYXkgKi8KK2ludCB0dF9sZmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBMaW5lZmVlZCBkaXNwbGF5ICovCitpbnQgaW50ZXJydXB0ZWQgPSAwOyAgICAgICAgICAg ICAgICAgICAgLyogSW50ZXJydXB0ZWQgZnJvbSBrZXlib2FyZCBmbGFnICovCitpbnQgZnhkX2lu aXRlZCA9IDA7CQkJLyogRnVsbHNjcmVlbiBzdHVmZiBpbml0aWFsaXplZCAqLworCisjaWZkZWYg REVCVUcKK2NoYXIgZGViZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBEZWJ1Z2dp bmcgbG9nIGZpbGUgbmFtZSAqLworI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBUTE9HCitj aGFyIHRyYWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gbG9n IGZpbGUgbmFtZSAqLworI2VuZGlmIC8qIFRMT0cgKi8KKworY2hhciBzZXNmaWxbQ0tNQVhQQVRI KzFdOyAgICAgICAgICAgICAgIC8qIFNlc3Npb24gbG9nIGZpbGUgbmFtZSAqLworCisjaWZkZWYg Q0tMT0dESUFMCitjaGFyIGRpYWZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyogQ29u bmVjdGlvbiBsb2cgZmlsZSBuYW1lICovCitjaGFyIGN4bG9nYnVmW0NYTE9HQlVGTCsxXTsgICAg ICAgICAgICAgLyogQ29ubmVjdGlvbiBsb2cgcmVjb3JkIGJ1ZmZlciAqLworaW50IGN4X2FjdGl2 ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gaXMgYWN0aXZlICovCitl eHRlcm4gaW50IGRpYWxvZzsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKworI2lmZGVmIERZTkFN SUMKK3N0YXRpYyBjaGFyICpjbWRzdHIgPSBOVUxMOyAgICAgICAgICAgICAvKiBQbGFjZSB0byBi dWlsZCBnZW5lcmljIGNvbW1hbmQgKi8KKyNlbHNlCisjaWZkZWYgcGRwMTEKK3N0YXRpYyBjaGFy IGNtZHN0clsyNTZdOworI2Vsc2UKK3N0YXRpYyBjaGFyIGNtZHN0cls0MDk2XTsKKyNlbmRpZiAv KiBwZHAxMSAqLworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworI2lmbmRlZiBOT01TRU5ECitjaGFy IGZzcGVjW0NNREJMKzRdOyAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgc3RyaW5nIGZv ciBcdihmaWxlc3BlYykgKi8KK2ludCBmc3BlY2xlbiA9IENNREJMOworI2Vsc2UKK2NoYXIgZnNw ZWNbQ0tNQVhQQVRIKzRdOworaW50IGZzcGVjbGVuID0gQ0tNQVhQQVRIOworI2VuZGlmIC8qIE5P TVNFTkQgKi8KKworY2hhciAqIHJmc3BlYyA9IE5VTEw7CQkJLyogUmVjZWl2ZWQgZmlsZXNwZWM6 IGxvY2FsICovCitjaGFyICogcHJmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgcmZzcGVj ICovCitjaGFyICogc2ZzcGVjID0gTlVMTDsJCQkvKiBTZW50IGZpbGVzcGVjOiBsb2NhbCAqLwor Y2hhciAqIHBzZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHNmc3BlYyAqLworY2hhciAq IHNyZnNwZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZpbGVzcGVjOiByZW1vdGUgKi8KK2NoYXIg KiBwc3Jmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgc3Jmc3BlYyAqLworY2hhciAqIHJy ZnNwZWMgPSBOVUxMOwkJCS8qIFNlbnQgZmlsZXNwZWM6IHJlbW90ZSAqLworY2hhciAqIHBycmZz cGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBycmZzcGVjICovCisKK2ludCBzdWNjZXNzID0g MSwgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHN1Y2Nlc3MvZmFpbHVyZSBmbGFn ICovCisgICAgY21kbHZsID0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBs ZXZlbCAqLworICAgIGFjdGlvbiA9IDAsCQkJCS8qIEFjdGlvbiBzZWxlY3RlZCBvbiBjb21tYW5k IGxpbmUgKi8KKyAgICBzbG9ndHMgPSAwLAkJCQkvKiBTZXNzaW9uLWxvZyB0aW1lc3RhbXBzIG9u L29mZiAqLworICAgIHNsb2dudWwgPSAwLAkJCS8qIFNlc3Npb24tbG9nIG51bGwtdGVybWluYXRl ZCBsaW5lcyAqLworI2lmZGVmIFVOSVgKKyAgICBzZXNzZnQgPSBYWUZUX1QsICAgICAgICAgICAg ICAgICAgICAvKiBTZXNzaW9uIGxvZyBmaWxlIHR5cGUgKi8KKyNlbHNlCisgICAgc2Vzc2Z0ID0g WFlGVF9CLAkJCS8qICh0ZXh0IGZvciBVTklYIGJpbmFyeSBmb3Igb3RoZXJzKSAqLworI2VuZGlm IC8qIFVOSVggKi8KKyAgICBwZmxhZyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQ cmludCBwcm9tcHQgKi8KKyAgICBtc2dmbGcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzICovCisKK2V4dGVybiBpbnQgeGFza21vcmUs IHNhdmVhc2s7CQkvKiBNb3JlLXByb21wdGluZyAqLworCisjaWZkZWYgQ0tfQVBDCitleHRlcm4g aW50IGFwY2FjdGl2ZTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKy8qIEV4dGVybmFsIHZhcmlhYmxl cyAqLworCitleHRlcm4gaW50IGxvY2FsLCBxdWlldCwgYmluYXJ5LCBuZXR3b3JrLCB3aGF0LCBw YXJpdHksIHhpdHN0YSwgZXNjYXBlLAorICB0bGV2ZWwsIGJnc2V0LCBiYWNrZ3JkLCB4c3VzcGVu ZCwgY21kaW50LCBuZXR0eXBlLCBzZXNsb2csIGRmbG9jOworCitleHRlcm4gaW50IGNtZF9yb3dz LCBjbWRfY29scywgeGNtZHNyYzsKKworZXh0ZXJuIGNoYXIgY21kZmlsW107CisKKyNpZmRlZiBW TVMKK2V4dGVybiBpbnQgYmF0Y2g7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBkYXRhZ2Vu ZXJhbCAgICAgICAgICAgICAgICAgICAgICAvKiAyLzEyLzkyIEVOSCAqLworI2luY2x1ZGUgPHN5 c2lkLmg+CitleHRlcm4gaW50IGNvbl9yZWFkc19tdCwgY29uaW50X2NoLCBjb25pbnRfYXZsOwor I2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKK2V4dGVybiBsb25nIHNwZWVkOworCitleHRlcm4g Y2hhciB0dG5hbWVbXSwgKmRmdHR5LCAqY21hcmcsICoqY21saXN0LCAqdmVyc2lvLCBteWhvc3Rb XTsKKworI2lmbmRlZiBOT0NTRVRTCitleHRlcm4gaW50IGZjaGFyc2V0LCB0Y2hhcnNldCwgeGZy eGxhOworZXh0ZXJuIHN0cnVjdCBjc2luZm8gZmNzaW5mb1tdLCB0Y3NpbmZvW107CisjZW5kaWYg LyogTk9DU0VUUyAqLworCisjaWZkZWYgT1MyCitleHRlcm4gdW5zaWduZWQgY2hhciBjb2xvcmNt ZDsKKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIE5PWEZFUgorCitpbnQgZmRpc3BsYSA9IFhZ RkRfTjsKKworI2Vsc2UgIC8qIE5PWEZFUiBpcyBub3QgZGVmaW5lZCAqLworCisjaWZkZWYgT1My ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBkaXNwbGF5IHR5 cGUgKi8KK2ludCBmZGlzcGxhID0gWFlGRF9DOyAgICAgICAgICAgICAgICAgICAvKiBDdXJzZXMg KGZ1bGxzY3JlZW4pIGlmIHdlIGhhdmUgaXQgKi8KKyNlbHNlCisjaWZkZWYgQ0tfQ1VSU0VTCitp bnQgZmRpc3BsYSA9IFhZRkRfQzsKKyNlbHNlCitpbnQgZmRpc3BsYSA9IFhZRkRfUzsgICAgICAg ICAgICAgICAgICAgLyogT3RoZXJ3aXNlIENSVCAqLworI2VuZGlmIC8qIENLX0NVUlNFUyAqLwor I2VuZGlmIC8qIE9TMiAqLworCitleHRlcm4gc3RydWN0IGNrX3AgcHRhYltdOworZXh0ZXJuIGlu dCBwcm90b2NvbCwgeGZyYmVsLCB4ZnJpbnQ7CisKKyNpZmRlZiBTVFJFQU1JTkcKK2V4dGVybiBp bnQgc3RyZWFtaW5nLCBzdHJlYW1vazsKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKworLyogVXNl ZCBpbnRlcm5hbGx5ICovCisKKyNpZmRlZiBLVUkKK19QUk9UT1RZUCggVk9JRCBzY3JlZW5nLCAo aW50LCBjaGFyLCBsb25nLCBjaGFyICopICk7CisjZW5kaWYJLyogS1VJICovCitfUFJPVE9UWVAo IFZPSUQgc2NyZWVuYywgKGludCwgY2hhciwgQ0tfT0ZGX1QsIGNoYXIgKikgKTsKKworCisjaWZk ZWYgQ0tfQ1VSU0VTCisjaWZuZGVmIERZTkFNSUMKK3N0YXRpYyBjaGFyIHh0cm1idWZbVFJNQlVG TF07ICAgICAgICAgICAvKiB0Z2V0ZW50KCkgYnVmZmVyICovCitjaGFyICogdHJtYnVmID0geHRy bWJ1ZjsKKyNlbHNlCitjaGFyICogdHJtYnVmID0gTlVMTDsKKyNlbmRpZiAvKiBEWU5BTUlDICov CitfUFJPVE9UWVAoIHN0YXRpYyBWT0lEIGRweWluaXQsICh2b2lkKSApOworX1BST1RPVFlQKCBz dGF0aWMgbG9uZyBzaG9jcHMsIChpbnQsIENLX09GRl9ULCBDS19PRkZfVCkgKTsKK19QUk9UT1RZ UCggc3RhdGljIENLX09GRl9UIHNob2V0bCwgKENLX09GRl9ULCBsb25nLCBDS19PRkZfVCwgQ0tf T0ZGX1QpICk7CisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKK3N0YXRpYyBpbnQgZnRfd2luID0g MDsgIC8qIEZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IHdpbmRvdyBpcyBhY3RpdmUg Ki8KKworLyogVmFyaWFibGVzIGRlY2xhcmVkIGhlcmUgKi8KKworc3RhdGljIGNoYXIgKiBza3Jl YXNvbltdID0geworICAgICIiLAkJCQkJLyogMCAqLworICAgICJSZW1vdGUgZmlsZSBub3Qgb2xk ZXIiLAkJLyogU0tQX0RBVCAqLworICAgICJJZGVudGljYWwgbW9kaWZpY2F0aW9uIHRpbWVzIiwJ LyogU0tQX0VRVSAqLworICAgICJUeXBlIiwJCQkJLyogU0tQX1RZUCAqLworICAgICJTaXplIiwJ CQkJLyogU0tQX1NJWiAqLworICAgICJOYW1lIGNvbGxpc2lvbiIsCQkJLyogU0tQX05BTSAqLwor ICAgICJFeGNlcHRpb24gTGlzdCIsCQkJLyogU0tQX0VYTCAqLworICAgICJEb3QgZmlsZSIsCQkJ CS8qIFNLUF9ET1QgKi8KKyAgICAiQmFja3VwIGZpbGUiLAkJCS8qIFNLUF9CS1UgKi8KKyAgICAi UmVjb3Zlcnkgbm90IG5lZWRlZCIsCQkvKiBTS1BfUkVTICovCisgICAgIkFjY2VzcyBkZW5pZWQi LAkJCS8qIFNLUF9BQ0MgKi8KKyAgICAiTm90IGEgcmVndWxhciBmaWxlIiwJCS8qIFNLUF9OUkYg Ki8KKyAgICAiU2ltdWxhdGVkIiwJCQkvKiBTS1BfU0lNICovCisgICAgIlNpbXVsYXRlZCAtIFJl bW90ZSBmaWxlIG9sZGVyIiwJLyogU0tQX1hVUCAqLworICAgICJTaW11bGF0ZWQgLSBObyByZW1v dGUgZmlsZSIsCS8qIFNLUF9YTlggKi8KK307CitzdGF0aWMgaW50IG5za3JlYXNvbiA9IChzaXpl b2Yoc2tyZWFzb24pIC8gc2l6ZW9mKGNoYXIgKikpOworCitjaGFyICoKK2dza3JlYXNvbihuKSBp bnQgbjsgeworICAgIHJldHVybigobiA+IDAgJiYgbiA8IG5za3JlYXNvbikgPyBza3JlYXNvbltu XSA6ICIiKTsKK30KKworY2hhciBwa3RmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8q IFBhY2tldCBsb2cgZmlsZSBuYW1lICovCisKKyNpZm5kZWYgTk9NU0VORCAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBNdWx0aXBsZSBTRU5EICovCitjaGFyICptc2ZpbGVzW01TRU5ETUFYXTsK KyNlbmRpZiAvKiBOT01TRU5EICovCisKKyNpZmRlZiBDS19USU1FUlMKK2V4dGVybiBsb25nIHJ0 dGRlbGF5OworZXh0ZXJuIGludCAgcnR0ZmxnOworI2VuZGlmIC8qIENLX1RJTUVSUyAqLworZXh0 ZXJuIGludCByY3Z0aW1vOworCisjaWZkZWYgQ0tfUkVTRU5ECitleHRlcm4gaW50IHNlbmRtb2Rl OworZXh0ZXJuIENLX09GRl9UIHNlbmRzdGFydCwgcnNfbGVuOworI2VuZGlmIC8qIENLX1JFU0VO RCAqLworCisjaWZkZWYgQ0tfUENUX0JBUiAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0 cmFuc2ZlciB0aGVybW9tZXRlciAqLworaW50IHRoZXJtb21ldGVyID0gMTsgICAgICAgICAgICAg ICAgICAgIC8qIE9OIGJ5IGRlZmF1bHQgKi8KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisKKyNp ZmRlZiBHRlRJTUVSCitDS0ZMT0FUIGd0diA9IC0xLjAsIG9sZGd0diA9IC0xLjA7CisjZWxzZQor I2lmbmRlZiBPUzIKK3N0YXRpYworI2VuZGlmIC8qIE9TMiAqLworICBsb25nIGd0diA9IC0xTCwg b2xkZ3R2ID0gLTFMOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworZXh0ZXJuIGludCBzZXJ2ZXIs IGJjdHUsIHJwdGZsZywgZWJxZmxnLCBzcHNpeiwgdXJwc2l6LCB3bWF4LCBjenNlZW4sIGN4c2Vl biwKKyAgd2lubG8sIGRpc3BsYSwgdGltaW50LCBucGFkLCBlYnEsIGJjdHIsIHJwdHEsIGF0Y2Fw dSwgbHBjYXB1LAorICBzd2NhcHUsIHdzbG90biwgd3Nsb3RyLCBydGltbywgbXlwYWRuLCBzcSwg Y2FwYXMsIHJwc2l6LCB0c2VjcywKKyAgcGt0bG9nLCBsc2NhcHUsIGRlc3QsIHNydmRpcywgd3Ns b3RzLCBzcGFja2V0cywgc3BrdGwsIHJwa3RsLAorICByZXRyYW5zLCB3Y3VyLCBudW1lcnJzLCBm c2Vjcywgd2hhdHJ1LCBjcnVuY2hlZCwgdGltZW91dHMsCisgIHJwYWNrZXRzLCBmbmNudiwgYnll X2FjdGl2ZSwgZGlzY2FyZCwgaW5zZXJ2ZXIsIGRpcmFjdGl2ZSwgY2RhY3RpdmU7CisKK2V4dGVy biBsb25nIGZpbGNudCwgZmlscmVqLCBycHRuLCBmaWxjcHMsIHRmY3BzLCBjcHMsIHBlYWtjcHM7 CitleHRlcm4gQ0tfT0ZGX1QgZmZjLCB0ZmMsIGZzaXplOyAKKworbG9uZyBvbGRjcHMgPSAwTDsK KworZXh0ZXJuIENIQVIgKnJkYXRhcCwgcGFkY2gsIHNlb2wsIGN0bHEsIG15cGFkYywgZW9sLCAq ZXBrdG1zZzsKK2V4dGVybiBjaGFyICp4ZnJtc2c7CisKKyNpZmRlZiBJS1NEQgorRklMRSAqIGRi ZnAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgcG9pbnRlciB0byBkYXRhYmFz ZSBmaWxlICovCisKK2ludCBkYmVuYWJsZWQgPSAxOyAgICAgICAgICAgICAgICAgICAgICAvKiBG bGFnIGZvciBkYXRhYmFzZSBpcyBlbmFibGVkICovCitleHRlcm4gaW50IGlrZGJvcGVuOyAgICAg ICAgICAgICAgICAgICAgLyogRmxhZyBmb3IgZGF0YWJhc2UgaXMgb3BlbiAqLworCit1bnNpZ25l ZCBsb25nIG15ZGJzZWVrID0gMEw7ICAgICAgICAgICAgLyogU2VlayBwb2ludGVyIHRvIG15IHJl Y29yZCAqLworaW50IG15ZGJzbG90ID0gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE15IHNs b3QgbnVtYmVyICovCit1bnNpZ25lZCBsb25nIG15ZmxhZ3MgPSAwTDsgICAgICAgICAgICAgLyog TXkgZmxhZ3MgKi8KK3Vuc2lnbmVkIGxvbmcgbXlhdHlwZSA9IDBMOyAgICAgICAgICAgICAvKiBN eSBhdXRob3JpemF0aW9uIHR5cGUgKi8KK3Vuc2lnbmVkIGxvbmcgbXlhbW9kZSA9IDBMOyAgICAg ICAgICAgICAvKiBNeSBhdXRob3JpemF0aW9uIG1vZGUgKi8KK3Vuc2lnbmVkIGxvbmcgbXlzdGF0 ZSA9IDBMOyAgICAgICAgICAgICAvKiBNeSBzdGF0ZSAoU0VORCwgUkVDRUlWRSwgZXRjKSAqLwor dW5zaWduZWQgbG9uZyBteXBpZCA9IDBMOyAgICAgICAgICAgICAgIC8qIE15IFBJRCAqLwordW5z aWduZWQgbG9uZyBteWlwID0gMEw7ICAgICAgICAgICAgICAgIC8qIE15IElQIGFkZHJlc3MgKi8K K3Vuc2lnbmVkIGxvbmcgcGVlcmlwID0gMEw7ICAgICAgICAgICAgICAvKiBNeSBwZWVyJ3MgSVAg YWRkcmVzcyAqLworCit1bnNpZ25lZCBsb25nIGRiaXAgPSAwTDsgICAgICAgICAgICAgICAgLyog SVAgYWRkcmVzcyBpbiBkYiByZWNvcmQgKi8KK3Vuc2lnbmVkIGxvbmcgZGJwaWQgPSAwTDsgICAg ICAgICAgICAgICAvKiBQSUQgaW4gZGIgcmVjb3JkICovCit1bnNpZ25lZCBsb25nIGRiZmxhZ3Mg PSAwTDsgICAgICAgICAgICAgLyogRmxhZ3MgZmllbGQgaW4gZGIgcmVjb3JkICovCit1bnNpZ25l ZCBsb25nIGRibGFzdHVzZWQgPSAwTDsgICAgICAgICAgLyogTGFzdCBpbi11c2UgcmVjb3JkIGlu IGRiICovCitjaGFyIGRicmVjW0RCX1JFQ0xdOyAgICAgICAgICAgICAgICAgICAgLyogRGF0YWJh c2UgcmVjb3JkIGJ1ZmZlciAqLworCitjaGFyICogZGJkaXIgICA9IE5VTEw7ICAgICAgICAgICAg ICAgICAgLyogRGF0YWJhc2UgZGlyZWN0b3J5ICovCitjaGFyICogZGJmaWxlICA9IE5VTEw7ICAg ICAgICAgICAgICAgICAgLyogRGF0YWJhc2UgZmlsZSBmdWxsIHBhdGhuYW1lICovCitjaGFyIG15 aGV4aXBbMzNdID0geyBOVUwsIE5VTCB9OyAgICAgICAgLyogTXkgSVAgYWRkcmVzcyBpbiBoZXgg Ki8KK2NoYXIgcGVlcmhleGlwWzMzXSA9IHsgTlVMLCBOVUwgfTsgICAgICAvKiBDbGllbnQncyBJ UCBhZGRyZXNzIGluIGhleCAqLworI2VuZGlmIC8qIElLU0RCICovCisKKyNpZmRlZiBHRlRJTUVS CitleHRlcm4gQ0tGTE9BVCBmcGZzZWNzLCBmcHRzZWNzLCBmcHhmc2VjczsKKyNlbHNlCitleHRl cm4gbG9uZyB4ZnNlY3M7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2VuZGlmIC8qIE5PWEZFUiAq LworCisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYgTkVXRlRQCitleHRlcm4gY2hhciAqIGZ0cF9o b3N0LCBmdHBfc3J2dHlwW107CitleHRlcm4gaW50IGZ0cF9jc3gsIGZ0cF9jc2wsIGZ0cF9kZWI7 CisjZW5kaWYgLyogTkVXRlRQICovCitleHRlcm4gY2hhciBteWlwYWRkcltdOworI2VuZGlmIC8q IFRDUFNPQ0tFVCAqLworCisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PU1BMCisgICAgZXh0ZXJu IHN0cnVjdCBtdGFiICptYWN0YWI7ICAgICAgICAgLyogRm9yIE9OX0VYSVQgbWFjcm8uICovCisg ICAgZXh0ZXJuIGludCBubWFjOworI2VuZGlmIC8qIE5PU1BMICovCisjaWZkZWYgRENNREJVRgor ZXh0ZXJuIGNoYXIgKmNtZGJ1ZjsgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgYnVmZmVy ICovCisjZWxzZQorZXh0ZXJuIGNoYXIgY21kYnVmW107ICAgICAgICAgICAgICAgICAgIC8qIENv bW1hbmQgYnVmZmVyICovCisjZW5kaWYgLyogRENNREJVRiAqLworZXh0ZXJuIGludCBjbWRfcXVv dGluZzsKKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PQ0NUUkFQCisjaWZkZWYgTlQK KyNpbmNsdWRlIDxzZXRqbXBleC5oPgorI2Vsc2UgLyogTlQgKi8KKyNpbmNsdWRlIDxzZXRqbXAu aD4KKyNlbmRpZiAvKiBOVCAqLworI2luY2x1ZGUgImNrY3NpZy5oIgorZXh0ZXJuIGNram1wYnVm IGNtamJ1ZjsKKyNlbmRpZiAvKiBOT0NDVFJBUCAqLworCitleHRlcm4gaW50IHhmaWxldHlwZSwg bnNjYW5maWxlOworCitpbnQKK3Nob2VzYyhlc2NhcGUpIGludCBlc2NhcGU7IHsKKyAgICBleHRl cm4gY2hhciAqIGNjbnRhYltdOwkJLyogQzAgY29udHJvbCBjaGFyYWN0ZXIgbmFtZSB0YWJsZSAq LworICAgIGV4dGVybiBpbnQgdHRfZXNjYXBlOworICAgIGlmICgoZXNjYXBlID4gMCAmJiBlc2Nh cGUgPCAzMikgfHwgKGVzY2FwZSA9PSAxMjcpKSB7CisJcHJpbnRmKCIgRXNjYXBlIGNoYXJhY3Rl cjogQ3RybC0lYyAoQVNDSUkgJWQsICVzKTogJXNcclxuIiwKKwkgICAgICAgY3RsKGVzY2FwZSks CisJICAgICAgIGVzY2FwZSwKKwkgICAgICAgKGVzY2FwZSA9PSAxMjcgPyAiREVMIiA6IGNjbnRh Yltlc2NhcGVdKSwKKwkgICAgICAgdHRfZXNjYXBlID8gImVuYWJsZWQiIDogImRpc2FibGVkIgor CSAgICAgICApOworICAgIH0gZWxzZSB7CisJcHJpbnRmKCIgRXNjYXBlIGNoYXJhY3RlcjogQ29k ZSAlZCIsZXNjYXBlKTsKKwlpZiAoZXNjYXBlID4gMTYwICYmIGVzY2FwZSA8IDI1NikKKwkgIHBy aW50ZigiICglYykiLGVzY2FwZSk7CisJcHJpbnRmKCI6ICVzXHJcbiIsIHR0X2VzY2FwZSA/ICJl bmFibGVkIiA6ICJkaXNhYmxlZCIpOwkKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisjaWZu ZGVmIE5PWEZFUgorLyogIFAgUiBFIFMgRSBUICAtLSAgUmVzZXQgZ2xvYmFsIHByb3RvY29sIHZh cmlhYmxlcyAgKi8KKworZXh0ZXJuIGludCByZWN1cnNpdmU7CisKKyNpZmRlZiBQQVRURVJOUwor aW50IHBhdHRlcm5zID0gU0VUX0FVVE87ICAgICAgICAgICAgICAgIC8qIFdoZXRoZXIgdG8gdXNl IGZpbGVuYW1lIHBhdHRlcm5zICovCitleHRlcm4gaW50IGdfcGF0dGVybnM7CQkJLyogRm9yIHNh dmluZyBhbmQgcmVzdG9yaW5nICovCisjZWxzZQoraW50IHBhdHRlcm5zID0gU0VUX09GRjsKKyNl bmRpZiAvKiBQQVRURVJOUyAqLworCisjaWZuZGVmIE5PSUNQCisjaWZkZWYgQ0tfTEFCRUxFRAor ZXh0ZXJuIGludCBnX2xmX29wdHMsIGxmX29wdHM7CisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLwor ZXh0ZXJuIGludCBnX21hdGNoZG90LCBnX3VzZXBpcGVzLCB1c2VwaXBlczsKK2V4dGVybiBpbnQg Z19iaW5hcnksIGdfcHJvdG8sIGdfZGlzcGxhLCBnX3NwYXRoLCBnX3JwYXRoLCBnX2ZuY252Owor ZXh0ZXJuIGludCBnX3JlY3Vyc2l2ZTsKK2V4dGVybiBpbnQgZ194ZmVybW9kZSwgeGZlcm1vZGU7 CitleHRlcm4gaW50IGdfdXJwc2l6LCBnX3Nwc2l6ZiwgZ19zcHNpejsKK2V4dGVybiBpbnQgZ19z cHNpenIsIGdfc3BtYXgsIGdfd3Nsb3RyLCBnX3ByZWZpeGluZywgZ19mbmNhY3Q7CitleHRlcm4g aW50IGdfZm5zcGF0aCwgZ19mbnJwYXRoLCBnX3NraXBidXA7CitleHRlcm4gaW50IG5vbGlua3M7 CisjaWZkZWYgQ0tTWU1MSU5LCitleHRlcm4gaW50IHpnZnNfbGluazsKKyNlbmRpZiAvKiBDS1NZ TUxJTksgKi8KKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgZ19wZmxnLCBwd2ZsZywgZ19wY3B0 LCBwd2NyeXB0OworZXh0ZXJuIGNoYXIgKiBnX3Bzd2QsIHB3YnVmW107CisjZW5kaWYgLyogTk9T UEwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCitleHRlcm4gaW50IHNwc2l6Ziwgc3BzaXpyLCBz cG1heCwgcHJlZml4aW5nLCBmbmNhY3QsIGZuc3BhdGgsIGZucnBhdGg7CitleHRlcm4gaW50IG1v dmluZzsgICAgICAgICAgICAgICAgICAgICAgLyogU0VORCBjcml0ZXJpYSAqLworZXh0ZXJuIGNo YXIgc25kYWZ0ZXJbXSwgc25kYmVmb3JlW10sICpzbmRleGNlcHRbXSwgKnJjdmV4Y2VwdFtdOwor ZXh0ZXJuIENLX09GRl9UIHNuZGxhcmdlciwgc25kc21hbGxlciwgY2FsaWJyYXRlOworZXh0ZXJu IGludCBybWFpbGYsIHJwcmludGYsIHNraXBidXA7CitleHRlcm4gY2hhciBvcHRidWZbXTsKKwor I2lmZGVmIFBJUEVTRU5ECitleHRlcm4gY2hhciAqIGdfc2ZpbHRlciwgKiBnX3JmaWx0ZXI7Citl eHRlcm4gY2hhciAqIHNuZGZpbHRlciwgKiByY3ZmaWx0ZXI7CisjZW5kaWYgLyogUElQRVNFTkQg Ki8KK2V4dGVybiBjaGFyICoqIHNuZGFycmF5OworCitWT0lECitmdHJlc2V0KCkgeworI2lmbmRl ZiBOT0lDUAorICAgIGludCBpOworICAgIGV4dGVybiBjaGFyICogZmlsZWZpbGU7CisgICAgZXh0 ZXJuIGludCByZWxpYWJsZSwgeHJlbGlhYmxlLCBjX3NhdmUsIHNzX3NhdmUsIHNsb3N0YXJ0LCB1 cmNsZWFyOworICAgIGV4dGVybiBpbnQgb29wdHMsIG9tb2RlLCBvbmFtZSwgb3BhdGgsIGthY3Rp dmUsIGF1dG9wYXRoOworICAgIGV4dGVybiBjaGFyICogc25kX21vdmU7ICAgICAgICAgICAgIC8q IERpcmVjdG9yeSB0byBtb3ZlIHNlbnQgZmlsZXMgdG8gKi8KKyAgICBleHRlcm4gY2hhciAqIHNu ZF9yZW5hbWU7ICAgICAgICAgICAvKiBXaGF0IHRvIHJlbmFtZSBzZW50IGZpbGVzIHRvICovCisg ICAgZXh0ZXJuIGNoYXIgKiByY3ZfbW92ZTsKKyAgICBleHRlcm4gY2hhciAqIHJjdl9yZW5hbWU7 CisgICAgZXh0ZXJuIGNoYXIgKiBnX3NuZF9tb3ZlOworICAgIGV4dGVybiBjaGFyICogZ19zbmRf cmVuYW1lOworICAgIGV4dGVybiBjaGFyICogZ19yY3ZfbW92ZTsKKyAgICBleHRlcm4gY2hhciAq IGdfcmN2X3JlbmFtZTsKKworI2lmZGVmIENLX1RNUERJUgorICAgIGV4dGVybiBpbnQgZl90bXBk aXI7CisgICAgZXh0ZXJuIGNoYXIgc2F2ZGlyW107CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisK KyNpZmRlZiBDS19TUEVFRAorI2lmZGVmIENPTU1FTlQKKyAgICBleHRlcm4gaW50IGZfY3RscDsK KyAgICBleHRlcm4gc2hvcnQgc19jdGxwW10sIGN0bHBbXTsKKyNlbmRpZiAvKiBDT01NRU5UICov CisjZW5kaWYgLyogQ0tfU1BFRUQgKi8KKworI2lmbmRlZiBOT0NTRVRTCisgICAgZXh0ZXJuIGlu dCBmY3Nfc2F2ZSwgdGNzX3NhdmU7CisgICAgZXh0ZXJuIGludCBnX3hmcnhsYSwgeGZyeGxhOwor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworLyogUmVzdG9yZSAvIHJlc2V0IHBlci1jb21tYW5kIGZp bGUtdHJhbnNmZXIgc3dpdGNoZXMgKi8KKworICAgIG1ha2VzdHIoJnNuZF9tb3ZlLGdfc25kX21v dmUpOworICAgIG1ha2VzdHIoJnJjdl9tb3ZlLGdfcmN2X21vdmUpOworICAgIG1ha2VzdHIoJnNu ZF9yZW5hbWUsZ19zbmRfcmVuYW1lKTsKKyAgICBtYWtlc3RyKCZyY3ZfcmVuYW1lLGdfcmN2X3Jl bmFtZSk7CisKKyAgICBrYWN0aXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXJt aXQgcHJvdG9jb2wgbm8gbG9uZ2VyIGFjdGl2ZSAqLworICAgIG9vcHRzID0gLTE7ICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IE9wdGlvbnMgKi8KKyAgICBvbW9kZSA9IC0xOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBUcmFuc2ZlciBNb2RlICovCisgICAg b25hbWUgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgRmlsZW5hbWUg T3B0aW9ucyAqLworICAgIG9wYXRoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8t UGFja2V0IFBhdGhuYW1lIE9wdGlvbnMgKi8KKworI2lmZGVmIENLX1JFU0VORAorICAgIHJzX2xl biA9IDBMOwkJCS8qIFJFR0VUIHBvc2l0aW9uICovCisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisK KyNpZmRlZiBDT01NRU5UCisjaWZkZWYgQ0tfU1BFRUQKKyAgICBpZiAoZl9jdGxwKSB7CisgICAg ICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAgICBjdGxwW2ldID0gc19jdGxw W2ldOworICAgICAgICBmX2N0bHAgPSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19TUEVFRCAqLwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENLX1RNUERJUgorICAgIGlmIChmX3RtcGRp cikgewkJCS8qIElmIHdlIGNoYW5nZWQgdG8gZG93bmxvYWQgZGlyICovCisJemNoZGlyKChjaGFy ICopIHNhdmRpcik7CS8qIEdvIGJhY2sgd2hlcmUgd2UgY2FtZSBmcm9tICovCisJZl90bXBkaXIg PSAwOworICAgIH0KKyNlbmRpZiAvKiBDS19UTVBESVIgKi8KKworICAgIGNhbGlicmF0ZSA9IDBM OyAgICAgICAgICAgICAgICAgICAgIC8qIENhbGlicmF0aW9uIHJ1biAqLworICAgIGlmICh4cmVs aWFibGUgPiAtMSkgeworCXJlbGlhYmxlID0geHJlbGlhYmxlOworCWRlYnVnKEYxMDEsImZ0cmVz ZXQgcmVsaWFibGUiLCIiLHJlbGlhYmxlKTsKKyAgICB9CisgICAgdXJjbGVhciA9IDA7CisKKyAg ICBpZiAoYXV0b3BhdGgpIHsgICAgICAgICAgICAgICAgICAgICAvKiBTRVQgUkVDRUlWRSBQQVRI TkFNRVMgQVVUTyAqLworICAgICAgICBmbnJwYXRoID0gUEFUSF9BVVRPOworICAgICAgICBhdXRv cGF0aCA9IDA7CisgICAgfQorICAgIGlmIChmaWxlZmlsZSkgeyAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgbGlzdCAqLworICAgICAgICB6Y2xvc2UoWk1GSUxFKTsKKyAgICAgICAgbWFrZXN0 cigmZmlsZWZpbGUsTlVMTCk7CisgICAgfQorICAgIGlmIChjX3NhdmUgPiAtMSkgeyAgICAgICAg ICAgICAgICAgIC8qIEJsb2NrIENoZWNrIFR5cGUgKi8KKyAgICAgICAgYmN0ciA9IGNfc2F2ZTsK KyAgICAgICAgY19zYXZlID0gLTE7CisgICAgfQorICAgIGlmIChzc19zYXZlID4gLTEpIHsgICAg ICAgICAgICAgICAgIC8qIFNsb3cgU3RhcnQgKi8KKyAgICAgICAgc2xvc3RhcnQgPSBzc19zYXZl OworICAgICAgICBzc19zYXZlID0gLTE7CisgICAgfQorI2lmZGVmIENLX0xBQkVMRUQKKyAgICBp ZiAoZ19sZl9vcHRzID4gLTEpIHsKKyAgICAgICAgbGZfb3B0cyA9IGdfbGZfb3B0czsgICAgICAg ICAgICAvKiBSZXN0b3JlIGxhYmVsZWQgdHJhbnNmZXIgb3B0aW9ucyAqLworICAgICAgICBnX2xm X29wdHMgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogQ0tfTEFCRUxFRCAqLworCisjaWZuZGVmIE5P Q1NFVFMKKyAgICBpZiAodGNzX3NhdmUgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBDaGFyYWN0 ZXIgc2V0cyAqLworICAgICAgICB0Y2hhcnNldCA9IHRjc19zYXZlOworICAgICAgICB0Y3Nfc2F2 ZSA9IC0xOworICAgIH0KKyAgICBpZiAoZmNzX3NhdmUgPiAtMSkgeworICAgICAgICBmY2hhcnNl dCA9IGZjc19zYXZlOworICAgICAgICBmY3Nfc2F2ZSA9IC0xOworICAgIH0KKyAgICBpZiAoZ194 ZnJ4bGEgPiAtMSkgeworCXhmcnhsYSA9IGdfeGZyeGxhOworCWdfeGZyeGxhID0gLTE7CisgICAg fQorICAgIHNldHhsYXR5cGUodGNoYXJzZXQsZmNoYXJzZXQpOyAgICAgIC8qIFRyYW5zbGF0aW9u IHR5cGUgKi8KKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKyNpZmRlZiBORVRDT05OCisjaWZuZGVm IE5PU1BMCisgICAgaWYgKGdfcHN3ZCkgeworICAgICAgICBja3N0cm5jcHkocHdidWYsZ19wc3dk LFBXQlVGTCk7CisgICAgICAgIG1ha2VzdHIoJmdfcHN3ZCxOVUxMKTsKKyAgICB9CisgICAgaWYg KGdfcGZsZyA+IC0xKSB7CisgICAgICAgIHB3ZmxnID0gZ19wZmxnOworICAgICAgICBnX3BmbGcg PSAtMTsKKyAgICB9CisgICAgaWYgKGdfcGNwdCA+IC0xKSB7CisgICAgICAgIHB3Y3J5cHQgPSBn X3BjcHQ7CisgICAgICAgIGdfcGNwdCA9IC0xOworICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLwor I2VuZGlmIC8qIE5FVENPTk4gKi8KKworICAgIGlmIChnX2JpbmFyeSA+IC0xKSB7ICAgICAgICAg ICAgICAgIC8qIEZpbGUgdHlwZSAqLworICAgICAgICBiaW5hcnkgPSBnX2JpbmFyeTsKKyAgICAg ICAgZ19iaW5hcnkgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfeGZlcm1vZGUgPiAtMSkgeyAgICAg ICAgICAgICAgLyogVHJhbnNmZXIgbW9kZSAqLworICAgICAgICB4ZmVybW9kZSA9IGdfeGZlcm1v ZGU7CisgICAgICAgIGdfeGZlcm1vZGUgPSAtMTsKKyAgICB9CisjaWZkZWYgUEFUVEVSTlMKKyAg ICBpZiAoZ19wYXR0ZXJucyA+IC0xKSB7ICAgICAgICAgICAgICAvKiBGaWxlbmFtZSBwYXR0ZXJu cyAqLworICAgICAgICBwYXR0ZXJucyA9IGdfcGF0dGVybnM7CisgICAgICAgIGdfcGF0dGVybnMg PSAtMTsKKyAgICB9CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworICAgIGlmIChnX3VzZXBpcGVz ID4gLTEpIHsKKyAgICAgICAgdXNlcGlwZXMgPSBnX3VzZXBpcGVzOworICAgICAgICBnX3VzZXBp cGVzID0gLTE7CisgICAgfQorICAgIGlmIChnX21hdGNoZG90ID4gLTEpIHsKKyAgICAgICAgbWF0 Y2hkb3QgPSBnX21hdGNoZG90OworICAgICAgICBnX21hdGNoZG90ID0gLTE7CisgICAgfQorICAg IGlmIChnX3Byb3RvID4gLTEpIHsgICAgICAgICAgICAgICAgIC8qIFByb3RvY29sICovCisgICAg ICAgIHByb3RvY29sID0gZ19wcm90bzsKKyAgICAgICAgZ19wcm90byA9IC0xOworICAgIH0KKyAg ICBpZiAoZ191cnBzaXogPiAtMSkgeworICAgICAgICB1cnBzaXogPSBnX3VycHNpejsKKyAgICAg ICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3JpbmcgdXJwc2l6IiwiIix1cnBzaXopOworICAg ICAgICBnX3VycHNpeiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcHNpemYgPiAtMSkgeworICAg ICAgICBzcHNpemYgPSBnX3Nwc2l6ZjsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0 b3Jpbmcgc3BzaXpmIiwiIixzcHNpemYpOworICAgICAgICBnX3Nwc2l6ZiA9IC0xOworICAgIH0K KyAgICBpZiAoZ19zcHNpeiA+IC0xKSB7CisgICAgICAgIHNwc2l6ID0gZ19zcHNpejsKKyAgICAg ICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jpbmcgc3BzaXoiLCIiLHNwc2l6KTsKKyAgICAg ICAgZ19zcHNpeiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19zcHNpenIgPiAtMSkgeworICAgICAg ICBzcHNpenIgPSBnX3Nwc2l6cjsKKyAgICAgICAgZGVidWcoRjEwMSwiZnRyZXNldCByZXN0b3Jp bmcgc3BzaXpyIiwiIixzcHNpenIpOworICAgICAgICBnX3Nwc2l6ciA9IC0xOworICAgIH0KKyAg ICBpZiAoZ19zcG1heCA+IC0xKSB7CisgICAgICAgIHNwbWF4ID0gZ19zcG1heDsKKyAgICAgICAg Z19zcG1heCA9IC0xOworICAgIH0KKyAgICBpZiAoZ193c2xvdHIgPiAtMSkgeworICAgICAgICB3 c2xvdHIgPSBnX3dzbG90cjsKKyAgICAgICAgZ193c2xvdHIgPSAtMTsKKyAgICB9CisgICAgaWYg KGdfcHJlZml4aW5nID4gLTEpIHsKKyAgICAgICAgcHJlZml4aW5nID0gZ19wcmVmaXhpbmc7Cisg ICAgICAgIGdfcHJlZml4aW5nID0gLTE7CisgICAgfQorICAgIGlmIChnX2ZuY2FjdCA+IC0xKSB7 CisgICAgICAgIGZuY2FjdCA9IGdfZm5jYWN0OworICAgICAgICBnX2ZuY2FjdCA9IC0xOworICAg IH0KKyAgICBpZiAoZ19mbmNudiA+IC0xKSB7CisgICAgICAgIGZuY252ID0gZ19mbmNudjsKKyAg ICAgICAgZ19mbmNudiA9IC0xOworICAgIH0KKyAgICBpZiAoZ19mbnNwYXRoID4gLTEpIHsKKyAg ICAgICAgZm5zcGF0aCA9IGdfZm5zcGF0aDsKKyAgICAgICAgZ19mbnNwYXRoID0gLTE7CisgICAg fQorICAgIGlmIChnX2ZucnBhdGggPiAtMSkgeworICAgICAgICBmbnJwYXRoID0gZ19mbnJwYXRo OworICAgICAgICBnX2ZucnBhdGggPSAtMTsKKyAgICB9CisgICAgaWYgKGdfc2tpcGJ1cCA+IC0x KSB7CisgICAgICAgIHNraXBidXAgPSBnX3NraXBidXA7CisgICAgICAgIGdfc2tpcGJ1cCA9IC0x OworICAgIH0KKyAgICBub2xpbmtzID0gMjsJCQkvKiAvRk9MTE9XTElOS1MgaXMgbmV2ZXIgZ2xv YmFsICovCisgICAgcmVjdXJzaXZlID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogL1JFQ1VS U0lWRSBjYW4gbmV2ZXIgYmUgZ2xvYmFsICovCisgICAgeGZpbGV0eXBlID0gLTE7CisKKyAgICBp ZiAoZ19kaXNwbGEgPiAtMSkgeyAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIGRpc3Bs YXkgKi8KKyAgICAgICAgZmRpc3BsYSA9IGdfZGlzcGxhOworICAgICAgICBnX2Rpc3BsYSA9IC0x OworICAgIH0KKyAgICBpZiAoZ19zcGF0aCA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBTZW5k IHBhdGhuYW1lcyAqLworICAgICAgICBmbnNwYXRoID0gZ19zcGF0aDsKKyAgICAgICAgZ19zcGF0 aCA9IC0xOworICAgIH0KKyAgICBpZiAoZ19ycGF0aCA+IC0xKSB7ICAgICAgICAgICAgICAgICAv KiBSZWNlaXZlIHBhdGhuYW1lcyAqLworICAgICAgICBmbnJwYXRoID0gZ19ycGF0aDsKKyAgICAg ICAgZ19ycGF0aCA9IC0xOworICAgIH0KKyAgICBpZiAoZ19mbmNudiA+IC0xKSB7ICAgICAgICAg ICAgICAgICAvKiBGaWxlbmFtZSBjb252ZXJzaW9uICovCisgICAgICAgIGZuY252ID0gZ19mbmNu djsKKyAgICAgICAgZ19mbmNudiA9IC0xOworICAgIH0KKyNpZmRlZiBQSVBFU0VORAorICAgIG1h a2VzdHIoJnNuZGZpbHRlcixnX3NmaWx0ZXIpOyAgICAgIC8qIFNlbmQgZmlsdGVyICovCisgICAg bWFrZXN0cigmcmN2ZmlsdGVyLGdfcmZpbHRlcik7ICAgICAgLyogUmVjZWl2ZSBmaWx0ZXIgKi8K KyNlbmRpZiAvKiBQSVBFU0VORCAqLworCisjaWZuZGVmIE5PRlJJTExTCisgICAgcm1haWxmID0g cnByaW50ZiA9IDA7ICAgICAgICAgICAgICAgLyogTUFJTCBhbmQgUFJJTlQgbW9kaWZpZXJzIGZv ciBTRU5EICovCisgICAgb3B0YnVmWzBdID0gTlVMOyAgICAgICAgICAgICAgICAgICAgLyogTUFJ TCBhbmQgUFJJTlQgb3B0aW9ucyAqLworI2VuZGlmIC8qIE5PRlJJTExTICovCisKKyAgICBtb3Zp bmcgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBkZWxldGUtYWZ0ZXItc2Vu ZCBpbmRpY2F0b3IgKi8KKyAgICBzbmRhZnRlclswXSAgPSBOVUw7ICAgICAgICAgICAgICAgICAv KiBSZXNldCBTRU5EIHNlbGVjdGlvbiBzd2l0Y2hlcyAqLworICAgIHNuZGJlZm9yZVswXSA9IE5V TDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOU05ERVhDRVBUOyBpKyspIHsKKyAgICAgICAgaWYg KHNuZGV4Y2VwdFtpXSkKKyAgICAgICAgICBmcmVlKHNuZGV4Y2VwdFtpXSk7CisgICAgICAgIHNu ZGV4Y2VwdFtpXSA9IE5VTEw7CisgICAgICAgIGlmIChyY3ZleGNlcHRbaV0pCisgICAgICAgICAg ZnJlZShyY3ZleGNlcHRbaV0pOworICAgICAgICByY3ZleGNlcHRbaV0gPSBOVUxMOworICAgIH0K KyAgICBzbmRsYXJnZXIgPSAgKENLX09GRl9UKS0xOworICAgIHNuZHNtYWxsZXIgPSAoQ0tfT0ZG X1QpLTE7CisgICAgZGVidWcoRjEwMSwicHJlc2VudCBzbmRzbWFsbGVyIiwiIixzbmRzbWFsbGVy KTsKKyNpZmRlZiBHRlRJTUVSCisgICAgZ3R2ID0gLTEuMDsKKyAgICBvbGRndHYgPSAtMS4wOwor I2Vsc2UKKyAgICBndHYgPSAtMUw7CisgICAgb2xkZ3R2ID0gLTFMOworI2VuZGlmIC8qIEdGVElN RVIgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCitjaGFy ICoKK3R0Z3RwbigpIHsJCQkJLyogR2V0IHR5cGljYWwgcG9ydCBuYW1lICovCisvKgorICBJZGVh bGx5IHRoaXMgcm91dGluZSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBlYWNoIG9mIHRoZSBja3U/ aW8uKiBtb2R1bGVzLAorICBidXQgdGhhdCByZXF1aXJlcyBjaGFuZ2luZyB0aGUgQVBJIGRlZmlu aXRpb24uCisqLworICAgIHJldHVybigKKyNpZmRlZiBPUzIKKyNpZmRlZiBPUzJPTkxZCisiQ09N MSIKKyNlbHNlICAvKiBPUzJPTkxZICovCisiVEFQSSBbIG5hbWUgXSBvciBDT00xIgorI2VuZGlm IC8qIE9TMk9OTFkgKi8KKyNlbHNlICAvKiBPUzIgKi8KKyNpZmRlZiBWTVMKKyJUWEEwOiwgVFRB MDosIG9yIExUQTA6IgorI2Vsc2UgIC8qIFZNUyAqLworI2lmZGVmIFNPTEFSSVMKKyIvZGV2L2N1 YS9hIgorI2Vsc2UgIC8qIFNPTEFSSVMgKi8KKyNpZmRlZiBIUFVYMTAKKyIvZGV2L2N1YTBwMCIK KyNlbHNlICAvKiBIUFVYMTAgKi8KKyNpZmRlZiBIUFVYCisiL2Rldi9jdWEwMCIKKyNlbHNlICAv KiBIUFVYICovCisjaWZkZWYgX19GcmVlQlNEX18KKyIvZGV2L2N1YWEwIgorI2Vsc2UgIC8qIF9f RnJlZUJTRF9fICovCisjaWZkZWYgX19saW51eF9fCisiL2Rldi90dHlTMCIKKyNlbHNlICAvKiBf X2xpbnV4X18gKi8KKyNpZmRlZiBCU0Q0NAorIi9kZXYvdHR5MDAiCisjZWxzZSAgLyogQlNENDQg Ki8KKyNpZmRlZiBPU0sKKyIvdDEiCisjZWxzZSAgLyogT1NLICovCisjaWZkZWYgUU5YCisiL2Rl di9zZXIxIgorI2Vsc2UgIC8qIFFOWCAqLworI2lmZGVmIFFOWDYKKyIvZGV2L3NlcjEiCisjZWxz ZSAgLyogUU5YNiAqLworI2lmZGVmIFVOSVhXQVJFCisiL2Rldi90ZXJtLzAwIG9yIC9kZXYvdHR5 MDAiCisjZWxzZSAgLyogVU5JWFdBUkUgKi8KKyNpZmRlZiBDS19TQ09WNQorIi9kZXYvdHR5MUEi CisjZWxzZSAgLyogQ0tfU0NPVjUgKi8KKyNpZmRlZiBDS19TQ08zMlY0CisiL2Rldi90dHkxQSIK KyNlbHNlICAvKiBDS19TQ08zMlY0ICovCisjaWZkZWYgTV9YRU5JWAorIi9kZXYvdHR5MUEiCisj ZWxzZSAgLyogTV9YRU5JWCAqLworI2lmZGVmIEFJWFJTCisiL2Rldi90dHkwIgorI2Vsc2UgIC8q IEFJWFJTICovCisjaWZkZWYgREdVWAorIi9kZXYvdHR5MDAiCisjZWxzZSAgLyogREdVWCAqLwor I2lmZGVmIGRhdGFnZW5lcmFsCisiQGNvbjEiCisjZWxzZSAgLyogZGF0YWdlbmVyYWwgKi8KKyNp ZmRlZiBJUklYCisiL2Rldi90dHltMCIKKyNlbHNlICAvKiBJUklYICovCisjaWZkZWYgU1VOT1M0 CisiL2Rldi90dHloMCIKKyNlbHNlICAvKiBTVU5PUzQgKi8KKyNpZmRlZiBTVjY4UjNWNgorIi9k ZXYvc2NjMCIKKyNlbHNlICAvKiBTVjY4UjNWNiAqLworI2lmZGVmIE1PVFNWODhSNAorIi9kZXYv Y29udHR5MDAiCisjZWxzZSAgLyogTU9UU1Y4OFI0ICovCisjaWZkZWYgTkVYVAorIi9kZXYvY3Vm YSIKKyNlbHNlCisjaWZkZWYgT1NGCisiL2Rldi90dHlkMSIKKyNlbHNlCisjaWZkZWYgU0lOSVgK KyIvZGV2L3R0eWMxIgorI2Vsc2UKKyNpZmRlZiBVTklYCisiL2Rldi9jdWEsIC9kZXYvYWN1LCAv ZGV2L3R0eTAsIGV0YyIKKyNlbHNlICAvKiBVTklYICovCisiKHNvcnJ5IG5vIGV4YW1wbGUgYXZh aWxhYmxlKSIKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogU0lOSVggKi8KKyNlbmRpZiAv KiBPU0YgKi8KKyNlbmRpZiAvKiBORVhUICovCisjZW5kaWYgLyogTU9UU1Y4OFI0ICovCisjZW5k aWYgLyogU1Y2OFIzVjYgKi8KKyNlbmRpZiAvKiBTVU5PUzQgKi8KKyNlbmRpZiAvKiBJUklYICov CisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBER1VYICovCisjZW5kaWYgLyog QUlYICovCisjZW5kaWYgLyogTV9YRU5JWCAqLworI2VuZGlmIC8qIENLX1NDTzMyVjQgKi8KKyNl bmRpZiAvKiBDS19TQ09WNSAqLworI2VuZGlmIC8qIFVOSVhXQVJFICovCisjZW5kaWYgLyogUU5Y NiAqLworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIEJTRDQ0 ICovCisjZW5kaWYgLyogX19saW51eF9fICovCisjZW5kaWYgLyogX19GcmVlQlNEX18gKi8KKyNl bmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogSFBVWDEwICovCisjZW5kaWYgLyogU09MQVJJUyAq LworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworCSAgICk7Cit9CisKKy8qICBD IEsgXyBFIFIgUiBTIFQgUiAgLS0gIFJldHVybiBtZXNzYWdlIGZyb20gbW9zdCByZWNlbnQgc3lz dGVtIGVycm9yICovCisKKyNpZmRlZiBDS1JPT1QKK2V4dGVybiBpbnQgY2tyb290ZXJyOworI2Vu ZGlmIC8qIENLUk9PVCAqLworCitjaGFyICoKK2NrX2VycnN0cigpIHsKKyNpZmRlZiBVU0VfU1RS RVJST1IKKyNpZm5kZWYgQ0tfQU5TSUxJQlMKKyAgICAvKiBTaG91bGQgaGF2ZSBiZWVuIGRlY2xh cmVkIGluIDxzdHJpbmcuaD4gKi8KK19QUk9UT1RZUCggY2hhciAqIHN0cmVycm9yLCAoaW50KSAp OworI2VuZGlmIC8qIENLX0FOU0lMSUJTICovCisjaWZkZWYgQ0tST09UCisgICAgaWYgKGNrcm9v dGVycikKKyAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOworI2VuZGlmIC8qIENLUk9PVCAqLwor ICAgIHJldHVybihzdHJlcnJvcihlcnJubykpOworI2Vsc2UgIC8qICFVU0VfU1RSRVJST1IgKi8K KyNpZmRlZiBWTVMKKyAgICBleHRlcm4gY2hhciAqIGNrdm1zZXJyc3RyKHVuc2lnbmVkIGxvbmcp OworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisgICAgICByZXR1cm4oIk9mZiBs aW1pdHMiKTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAgICByZXR1cm4oY2t2bXNlcnJzdHIoMEwp KTsKKyNlbHNlICAvKiAhVk1TICovCisjaWZkZWYgQlNENDQKKyNpZmRlZiBfXzM4NkJTRF9fCisj aWZuZGVmIE5EU1lTRVJSTElTVAorICAgIGV4dGVybiBpbnQgc3lzX25lcnI7CisgICAgZXh0ZXJu IGNoYXIgKnN5c19lcnJsaXN0W107CisjZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCisjZWxzZSAg LyogIV9fMzg2QlNEX18gKi8KKyNpZm5kZWYgX19ic2RpX18KKyNpZm5kZWYgTkRTWVNFUlJMSVNU CisgICAgZXh0ZXJuIGludCBzeXNfbmVycjsKKyAgICBleHRlcm4gY29uc3QgY2hhciAqY29uc3Qg c3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KKyNlbmRpZiAvKiBfX2Jz ZGlfXyAqLworI2VuZGlmIC8qIF9fMzg2QlNEX18gKi8KKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAo Y2tyb290ZXJyKQorICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7CisgICAgZWxzZQorI2VuZGlm IC8qIENLUk9PVCAqLworICAgIGlmIChlcnJubyA+PSBzeXNfbmVycikKKyAgICAgIHJldHVybigi RXJyb3IgbnVtYmVyIG91dCBvZiByYW5nZSIpOworICAgIGVsc2UKKyAgICAgIHJldHVybigoY2hh ciAqKSBzeXNfZXJybGlzdFtlcnJub10pOworI2Vsc2UgLyogIUJTRDQ0ICovCisjaWZkZWYgQVRU U1YKKyNpZm5kZWYgTkRTWVNFUlJMSVNUCisgICAgZXh0ZXJuIGludCBzeXNfbmVycjsKKyAgICBl eHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KKyNp ZmRlZiBDS1JPT1QKKyAgICBpZiAoY2tyb290ZXJyKQorICAgICAgcmV0dXJuKCJPZmYgbGltaXRz Iik7CisgICAgZWxzZQorI2VuZGlmIC8qIENLUk9PVCAqLworICAgIGlmIChlcnJubyA+PSBzeXNf bmVycikKKyAgICAgIHJldHVybigiRXJyb3IgbnVtYmVyIG91dCBvZiByYW5nZSIpOworICAgIGVs c2UKKyAgICAgIHJldHVybigoY2hhciAqKSBzeXNfZXJybGlzdFtlcnJub10pOworI2Vsc2UgLyog IUFUVFNWICovCisjaWZkZWYgQlNENAorI2lmbmRlZiBORFNZU0VSUkxJU1QKKyAgICBleHRlcm4g aW50IHN5c19uZXJyOworICAgIGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOworI2VuZGlmIC8q IE5EU1lTRVJSTElTVCAqLworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisgICAg ICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyAgICBlbHNlCisjZW5kaWYgLyogQ0tST09UICovCisg ICAgaWYgKGVycm5vID49IHN5c19uZXJyKQorICAgICAgcmV0dXJuKCJFcnJvciBudW1iZXIgb3V0 IG9mIHJhbmdlIik7CisgICAgZWxzZQorICAgICAgcmV0dXJuKChjaGFyICopIHN5c19lcnJsaXN0 W2Vycm5vXSk7CisjZWxzZQorI2lmZGVmIE9TMgorI2lmbmRlZiBORFNZU0VSUkxJU1QKKyAgICBl eHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KKyNp ZmRlZiBOVAorICAgIGV4dGVybiBpbnRfc3lzX25lcnI7CisjZW5kaWYgLyogTlQgKi8KKyAgICBj aGFyICplOworI2lmZGVmIENLUk9PVAorICAgIGlmIChja3Jvb3RlcnIpCisgICAgICByZXR1cm4o Ik9mZiBsaW1pdHMiKTsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAgICBlID0gKGVycm5vID4gLTEK KyNpZmRlZiBOVAorICAgICAgICAgJiYgZXJybm8gPD0gX3N5c19uZXJyCisjZW5kaWYgLyogTlQg Ki8KKyAgICAgICAgICkgPworI2lmZGVmIE5UCisgICAgICAgICAoY2hhciAqKSBzeXNfZXJybGlz dFtlcnJub10KKyNlbHNlIC8qIE5UICovCisgICAgICAgICAvKiBJIGRvbid0IGtub3cgaG93IHRv IGdldCBhIENMSUIgZXJyb3Igc3RyaW5nIGluIE9TLzIgKi8KKyAgICAgICAgIHN0cmVycm9yKGVy cm5vKQorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgICAgOiAiIjsKKyAgICByZXR1cm4oZSA/ IGUgOiAiIik7CisjZWxzZSAvKiBPUzIgKi8KKyAgICByZXR1cm4oIiIpOworI2VuZGlmIC8qIE9T MiAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIEJT RDQ0ICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogVVNFX1NUUkVSUk9SICovCit9CisK KyNpZmRlZiBQQVRURVJOUworLyoKKyAgRmlsZW5hbWUgcGF0dGVybiByZWNvZ25pdGlvbiBsaXN0 cyBmb3IgYXV0b21hdGljIHRleHQvYmluYXJ5IHN3aXRjaGluZy4KKyAgVGhlc2UgYXJlIHNvbWV3 aGF0IHBhc3NlIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiBzY2FuZmlsZSgpICAoNy4wKS4KKyAgQnV0 IHdpdGggdGhlIGFkZGl0aW9uIG9mIEZUUCBbTV1HRVQsIHRoZXkncmUgYmFjayBpbiBzdHlsZSAo OC4wKS4KKworICBBbHRob3VnaCwgd2l0aCBGVFAgdGhlIGxpc3RzIG5lZWQgdG8gYmUgdXNlZCBp biB0aGUgcmV2ZXJzZS4gIFdpdGgKKyAgS2VybWl0IHRoZSBsaXN0IGlzIHVzZWQgdG8gaW1wbHkg dGhlIHR5cGVzIG9mIHRoZSBsb2NhbCBzeXN0ZW0uICBXaGVyZWFzCisgIHdpdGggRlRQLCB0aGUg bGlzdCBtdXN0IGJlIHVzZWQgdG8gaW1wbHkgdGhlIHR5cGUgb2YgdGhlIHJlbW90ZSBzeXN0ZW0u CisgIFRoZXJlZm9yZSwgYWxsIHBsYXRmb3JtcyBtdXN0IG5vdyBzdXBwb3J0IGFsbCBvZiB0aGUg bGlzdHMuCisqLworY2hhciAqdHh0cGF0dGVybnNbRlRQQVRURVJOUysxXSA9IHsgTlVMTCwgTlVM TCB9OworY2hhciAqYmlucGF0dGVybnNbRlRQQVRURVJOUysxXSA9IHsgTlVMTCwgTlVMTCB9Owor LyoKKyAgRGVmYXVsdCBwYXR0ZXJuIGxpc3RzIGZvciBlYWNoIHBsYXRmb3JtLi4uCisKKyAgTk9U RTogSW4gbW9zdCBjYXNlcyB3ZSBsZWF2ZSAiLmhscCIsICIuaW5pIiwgYW5kICIuc2NyIiBhbG9u ZTsgYWx0aG91Z2ggdGhleQorICBhcmUgdHJhZGl0aW9uYWxseSB0ZXh0IHR5cGVzLCB0aGV5IGFy ZSBiaW5hcnkgaW4gV2luZG93cy4gIFNvIHRoZXkgYXJlCisgIGhhbmRsZWQgYnkgdGhlIHByZXZh aWxpbmcgU0VUIEZJTEUgVFlQRSwgcmF0aGVyIHRoYW4gYXV0b21hdGljYWxseS4KKyAgU2ltaWxh cmx5IGZvciAiLmRhdCIsICIuaW5mIiwgYW5kIHNvIG9uLiAgQWxzbyAiLnBzIiBzaW5jZSBQb3N0 U2NyaXB0IGZpbGVzCisgIGFyZSBub3QgYWx3YXlzIHRleHQuICAiLmxvZyIgaXMgb21pdHRlZCBz aW5jZSBsb2dzIGNhbiBiZSB0ZXh0IG9yIGJpbmFyeSwKKyAgZXhjZXB0IGluIFZNUyB0aGV5IGFy ZSB1c3VhbGx5IHRleHQsIGV0YyBldGMuCisKKyAgTGF0ZXIgKFNlcCAyMDAzKTogQWRkIFBvc3RT Y3JpcHQgdG8gYmluYXJ5IHBhdHRlcm5zLgorKi8KK3N0YXRpYyBjaGFyICp0eHRwW1NZU19NQVhd W0ZUUEFUVEVSTlNdID0geworICAgIC8qIFVOS05PV04gKi8geworCU5VTEwsIE5VTEwKKyAgICB9 LAorICAgIHsJCQkJCS8qIFVOSVggKi8KKyAgICAiKi50eHQiLCIqLmMiLCIqLmgiLCIqLnIiLCIq LnciLCIqLmNwcCIsIiouY2MiLCIqLmtzYyIsIiouYndyIiwiKi51cGQiLAorICAgICIqLmh0bWwi LCIqLmh0bSIsIioubXNzIiwiKi50ZXgiLCIqLm5yIiwiW01tXWFrZWZpbGUiLCAiKi5oZXgiLCAi Ki5ocXgiLAorICAgICIqLmZvciIsIiouZjc3IiwiKi5mIiwiKi5GIiwiKi5zIiwiKi5wYXMiLCIq LmphdmEiLCIqLmVsIiwiKi5saXNwIiwiKi5zaCIsCisgICAgIioubTQiLCIqLnBlcmwiLCIqLnBs IiwiKi5wb2QiLCIqLnBtIiwiKi5hd2siLCIqLnNubyIsIiouc3B0IiwiKi5zZWQiLAorICAgICIq LmtzYyIsIiouVFhUIiwgIipyZWFkLm1lIiwgIipSRUFELk1FIiwgIi4qIiwgIiovLioiLCAiKi5t ZW0iLCIqLm1hYyIsCisgICAgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogV0lOMzIgKi8KKyAg ICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5odG1sIiwiKi5iYXQiLCIqLmNtZCIsIiouamF2 IiwiKi5hc20iLCAiKi5oZXgiLAorICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwgIiouY3BwIiwg IiouaHBwIiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCisgICAgIiouamF2YSIsICIqLmJ3ciIs ICIqLnVwZCIsICIqLm1hayIsICJyZWFkLm1lIiwgIioubWFwIiwgIm1ha2VmaWxlIiwKKyAgICAi Ki5tZW0iLCIqLm1hYyIsIiouY2MiLCIqLnBsIiwiKi5wb2QiLCIqLnBtIiwiKi5tNCIsTlVMTAor ICAgIH0sCisgICAgewkJCQkJLyogVk1TICovCisgICAgIiouY29tIiwiKi50eHQiLCIqLmMiLCAg IiouZm9yIiwiKi5wYXMiLCIqLnJubyIsIioucm5oIiwiKi5tYXIiLCIqLmJsaSIsCisgICAgIiou aGxwIiwiKi5tc3MiLCIqLmRvYyIsIiouYndyIiwiKi5jbGQiLCIqLmhleCIsIiouYmFzIiwiKi5p bmkiLCIqLmxvZyIsCisgICAgIioubW1zIiwiKi5vcHQiLCIqLmtzYyIsIioucGVybCIsIioucGwi LCIqLnBvZCIsIioucG0iLCIqLnNubyIsIiouc3B0IiwKKyAgICAiKi5tZW0iLE5VTEwKKyAgICB9 LAorICAgIHsJCQkJCS8qIE9TMiAqLworICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmh0 bWwiLCIqLmJhdCIsIiouY21kIiwiKi5qYXYiLCIqLmFzbSIsICIqLmhleCIsCisgICAgIiouaHF4 IiwgIiouYyIsICIqLmgiLCAiKi5jcHAiLCAiKi5ocHAiLCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53 IiwKKyAgICAiKi5qYXZhIiwgIiouYndyIiwgIioudXBkIiwgIioubWFrIiwgInJlYWQubWUiLCAi Ki5tYXAiLCAibWFrZWZpbGUiLAorICAgIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIERPUyAq LworICAgICIqLnR4dCIsIioua3NjIiwiKi5odG0iLCIqLmJhdCIsIiouY21kIiwiKi5qYXYiLCIq LmFzbSIsICIqLmhleCIsCisgICAgIiouaHF4IiwgIiouYyIsICIqLmgiLCAiKi5jcHAiLCAiKi5o cHAiLCAiKi5jeHgiLCAiKi5jeHgiLCAiKi53IiwKKyAgICAiKi5id3IiLCAiKi51cGQiLCAiKi5t YWsiLCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIsIE5VTEwKKyAgICB9LAorICAgIHsJ CQkJCS8qIFRPUFMtMTAgKi8KKyAgICAiKi5jbWQiLCIqLmhscCIsIiouZG9jIiwiKi5pbmkiLCIq LnR4dCIsIioubWFjIiwiKi5mb3IiLCIqLnNhaSIsIiouYmxpIiwKKyAgICAiKi5wYXMiLCIqLnNu byIsIiouc3B0IiwiKi5wY2wiLCIqLm1zcyIsIioucm5vIiwiKi5iMzYiLCIqLnRleCIsIioucHVi IiwKKyAgICAiKi5yZXEiLCIqLnIzNiIsIioubWVtIiwiKi5id3IiLCIqLmNjbCIsIiouY3RsIiwi Ki5ybmgiLCIqLmtzYyIsTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVE9QUy0yMCAqLworICAg ICIqLmNtZCIsIiouaGxwIiwiKi5kb2MiLCIqLmluaSIsIioudHh0IiwiKi5tYWMiLCIqLmZvciIs Iiouc2FpIiwiKi5ibGkiLAorICAgICIqLnBhcyIsIiouc25vIiwiKi5zcHQiLCIqLnBjbCIsIiou bXNzIiwiKi5ybm8iLCIqLmIzNiIsIioudGV4IiwiKi5wdWIiLAorICAgICIqLnJlcSIsIioucjM2 IiwiKi5tZW0iLCIqLmJ3ciIsIiouY2NsIiwiKi5jdGwiLCIqLnJuaCIsIioua3NjIixOVUxMCisg ICAgfSwKKyAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLworICAgICIqLnR4dCIsIioua3NjIiwi Ki5odG0iLCIqLmh0bWwiLCIqLmJhdCIsICIqLmNtZCIsIiouamF2IiwiKi5hc20iLCIqLmhleCIs CisgICAgIiouaHF4IiwiKi5jIiwgICIqLmgiLCAgIioudyIsICAgIiouamF2YSIsIiouYndyIiwi Ki51cGQiLCIqLnR0cCIsIiouY20iLAorICAgICIqLnBsMSIsIiouZW1hY3MiLCAicmVhZC5tZSIs ICIqLnBsIiwgIm1ha2VmaWxlIiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogREcgQU9TL1ZT ICovCisgICAgIioudHh0IiwgIiouYyIsICIqLmgiLCAiKi53IiwgIiouZXIiLCAiKi5id3IiLCAi Ki51cGQiLCAicmVhZC5tZSIsCisgICAgIiouY2xpIiwgIioua3NjIiwgTlVMTAorICAgIH0sCisg ICAgewkJCQkJLyogT1NLICovCisgICAgIiouYyIsIiouY3BwIiwiKi5oIiwiKi5hIiwiKmFrZWZp bGUiLCAvKiBwcm9ncmFtIHNvdXJjZXMgKi8KKyAgICAiKi5mb3IiLCIqLmY3NyIsIiouZiIsIiou RiIsIioucyIsIioucGFzIiwiKi5qYXZhIiwiKi5lbCIsIioubGlzcCIsCisgICAgIiouc2giLCIq LnBlcmwiLCIqLmF3ayIsIiouc25vIiwiKi5zcHQiLCIqLnNlZCIsCisgICAgIioudHh0IiwiKi53 IiwJCQkvKiBnZW5lcmFsIHRleHQgKi8KKyAgICAiKi5rc2MiLCIqLmJ3ciIsIioudXBkIiwKKyAg ICAiKi5odG1sIiwiKi5odG0iLCIqLm1zcyIsIioudGV4IiwiKi5uciIsIiouaGV4IiwgIiouaHF4 IiwKKyAgICAiKi5UWFQiLCAiKnJlYWQubWUiLCAiKlJFQUQuTUUiLCAiLioiLCAiKi8uKiIsCisg ICAgTlVMTAorICAgIH0KK307CisKKy8qIE5vdGU6IC5ET0MgYWRkZWQgdG8gKHNvbWUpIGJpbmFy eSBwYXR0ZXJucyBKdW5lIDE5OTguLi4gTWljcm9zb2Z0IHdpbnMuICovCisKK3N0YXRpYyBjaGFy ICpiaW5wW1NZU19NQVhdW0ZUUEFUVEVSTlNdID0geworICAgIHsJCQkJCS8qIFVOS05PV04gKi8K KyAgICBOVUxMLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBVTklYICovCisgICAgIiouZ3oi LCIqLloiLCIqLnRneiIsIiouZ2lmIiwgIioudGFyIiwiKi56aXAiLCIqLm8iLCIqLnNvIiwiKi5h IiwiKi5vdXQiLAorICAgICIqLmV4ZSIsICIqLmpwZyIsICIqLmpwZWciLCAiKi50aWYiLCIqLnRp ZmYiLCAiKi5wZGYiLCAiKi5zby4qIiwgIiouY2xhc3MiLAorICAgICIqLnJwbSIsICIqLmJtcCIs ICIqLmJ6MiIsICIqLkJNUCIsICIqLmRsbCIsICIqLmRvYyIsICIqLnZ4ZCIsICIqLmRjeCIsCisg ICAgIioueGwqIiwgIioubHpoIiwgIioubGh6IiwgIiouYXUiLCAiKi52b2MiLCAiKi5tcGciLCAi Ki5tcGVnIiwiW3drXWVybWl0IiwKKyAgICAiKi5wcyIsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJ CS8qIFdJTjMyICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiou Z2lmIiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAiKi5jbGFzcyIsIiouY2xhIiwi Ki5kbGwiLCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAorICAg ICIqLmJtcCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgICIqLnRneiIsICIqLnhsKiIsICIq LmRvYyIsICIqLnZ4ZCIsCisgICAgIioucGRmIiwgIioubHpoIiwgIioudnhkIiwgIiouc25kIiwg IiouYXUiLCAiKiAudm9jIiwgIioubXBnIiwgIioubXBlZyIsCisgICAgIioucHMiLCBOVUxMCisg ICAgfSwKKyAgICB7CQkJCQkvKiBWTVMgKi8KKyAgICAiKi5leGUiLCIqLm9iaiIsIiouYmFrIiwi Ki5iaW4iLCIqLmFkZiIsIiouc3RiIiwiKi5tYWkiLCIqLnN5cyIsIiouZG1wIiwKKyAgICAiKi5w cyIsICIqLmRhdCIsIioucGFyIiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogT1MyICovCisg ICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lmIiwgIiouanBnIiwg Iioud2F2IiwgIioucmFtIiwKKyAgICAiKi5jbGFzcyIsICIqLmNsYSIsICIqLmRsbCIsICIqLmRy diIsICIqLm9jeCIsICIqLnZieCIsICIqLmxpYiIsICIqLmljbyIsCisgICAgIiouYm1wIiwgIiou dGlmIiwgIioudGFyIiwgIiouZ3oiLCAiKi50Z3oiLCAiKi54bCoiLCAiKi5kb2MiLCAiKi52eGQi LAorICAgICIqLnBkZiIsICIqLnBzIiwgIioubHpoIiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJ LyogRE9TICovCisgICAgIiouZXhlIiwgIiouemlwIiwgIioub2JqIiwgIiouY29tIiwgIiouZ2lm IiwgIiouanBnIiwgIioud2F2IiwgIioucmFtIiwKKyAgICAiKi5jbGEiLCAiKi5kbGwiLCAiKi5k cnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAorICAgICIqLmJtcCIsICIq LnRpZiIsICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhk IiwKKyAgICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJ CS8qIFRPUFMxMCAqLworICAgICIqLmV4ZSIsIiouc2F2IiwiKi5iaW4iLCIqLnJpbSIsIioucmVs IiwiKi51bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAorICAgICIqLnBzIiwgTlVMTAorICAg IH0sCisgICAgewkJCQkJLyogVE9QUzIwICovCisgICAgIiouZXhlIiwiKi5zYXYiLCIqLmJpbiIs IioucmltIiwiKi5yZWwiLCIqLnVudiIsIioubGliIiwiKi50YXAiLCIqLmR2aSIsCisgICAgIiou cHMiLCBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkvKiBTVFJBVFVTIFZPUyAqLworICAgICIqLmV4 ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIqLmpwZyIsICIqLndhdiIs ICIqLnJhbSIsCisgICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5kbGwiLCAiKi5kcnYiLCAiKi5v Y3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAorICAgICIqLmJtcCIsICIqLnRpZiIsICIq LnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwgIioudnhkIiwKKyAgICAi Ki5wZGYiLCAiKi5wcyIsICIqLmx6aCIsICIqLnBtIiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJ LyogREcgKi8KKyAgICAiKi5vYiIsICIqLnByIiwgIiouZG1wIiwgIioucHMiLCBOVUxMCisgICAg fSwKKyAgICB7IC8qIE9TSyAqLworICAgICIqLmd6IiwiKi5aIiwiKi56IiwiKi50Z3oiLCIqLmxo eiIsIioudGFyIiwJLyogYXJjaGl2ZXJzICovCisgICAgIiouemlwIiwiKi5hciIsIiouem9vIiwi Ki5ycG0iLCIqLmx6aCIsCisgICAgLyogb2JqZWN0IGZpbGVzLCBsaWJyYXJpZXMsIGV4ZWN1dGFi bGVzICovCisgICAgIiouciIsIioubCIsIiouZXhlIiwgIiouZGxsIiwgIiouc28uKiIsICIqLmNs YXNzIiwKKyAgICAvKiBpbWFnZXMgKi8KKyAgICAiKi5naWYiLCAiKi5qcGciLCAiKi5qcGVnIiwg IioudGlmIiwiKi50aWZmIiwgIioucGRmIiwgIioucHMiLAorICAgICIqLmJtcCIsICIqLmJ6MiIs ICIqLkJNUCIsIioucGN4IiwKKyAgICBOVUxMCisgICAgfQorfTsKKworLyoKKyAgU2V0IHVwIGRl ZmF1bHQgcGF0dGVybiBsaXN0cyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBhbmQgcmUtbWFsbG9jJ2Qu CisgIEVhY2ggcGF0dGVybiBsaXN0IG11c3QgdGVybWluYXRlZCBieSBhIG51bGwgZWxlbWVudC4K KyovCitWT0lECitpbml0cGF0KCkgeworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBG VFBBVFRFUk5TOyBpKyspIHsKKyAgICAgICAgdHh0cGF0dGVybnNbaV0gPSBOVUxMOworICAgICAg ICBiaW5wYXR0ZXJuc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBGVFBB VFRFUk5TOyBpKyspIHsKKyNpZmRlZiBVTklYCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJu c1tpXSksdHh0cFtTWVNfVU5JWF1baV0pOworI2Vsc2UgLyogVU5JWCAqLworI2lmZGVmIE9TMgor I2lmZGVmIE5UCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfV0lO MzJdW2ldKTsKKyNlbHNlIC8qIE5UICovCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tp XSksdHh0cFtTWVNfT1MyXVtpXSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLwor I2lmZGVmIFZNUworICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1ZN U11baV0pOworI2Vsc2UgLyogVk1TICovCisjaWZkZWYgU1RSQVRVUworICAgICAgICBtYWtlc3Ry KCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX1ZPU11baV0pOworI2Vsc2UgLyogU1RSQVRVUyAq LworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSks dHh0cFtTWVNfREddW2ldKTsKKyNlbHNlIC8qIGRhdGFnZW5lcmFsICovCisjaWZkZWYgT1NLCisg ICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0cFtTWVNfT1NLXVtpXSk7CisjZWxz ZSAvKiBPU0sgKi8KKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19V TktdW2ldKTsKKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2Vu ZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNl bmRpZiAvKiBVTklYICovCisgICAgICAgIGlmICghdHh0cFtpXSkKKyAgICAgICAgICBicmVhazsK KyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlM7IGkrKykgeworI2lmZGVmIFVO SVgKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19VTklYXVtpXSk7 CisjZWxzZSAvKiBVTklYICovCisjaWZkZWYgT1MyCisjaWZkZWYgTlQKKyAgICAgICAgbWFrZXN0 cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19XSU4zMl1baV0pOworI2Vsc2UgLyogTlQgKi8K KyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19PUzJdW2ldKTsKKyNl bmRpZiAvKiBOVCAqLworI2Vsc2UgLyogT1MyICovCisjaWZkZWYgVk1TCisgICAgICAgIG1ha2Vz dHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVk1TXVtpXSk7CisjZWxzZSAvKiBWTVMgKi8K KyNpZmRlZiBTVFJBVFVTCisgICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtT WVNfVk9TXVtpXSk7CisjZWxzZSAvKiBTVFJBVFVTICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAg ICAgICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19ER11baV0pOworI2Vsc2Ug LyogZGF0YWdlbmVyYWwgKi8KKyNpZmRlZiBPU0sKKyAgICAgICAgbWFrZXN0cigmKGJpbnBhdHRl cm5zW2ldKSxiaW5wW1NZU19PU0tdW2ldKTsKKyNlbHNlIC8qIE9TSyAqLworICAgICAgICBtYWtl c3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1VOS11baV0pOworI2VuZGlmIC8qIE9TSyAq LworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlm IC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAg aWYgKCFiaW5wW2ldKQorICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLyoKKyAgbSBhIHQg YyBoIG4gYSBtIGUgIC0tICBDb21wYXJlIGZpbGVuYW1lIHdpdGggdGV4dCAmIGJpbmFyeSBuYW1l IHBhdHRlcm5zLgorCisgIFJldHVybnM6CisgICAgMCBpZiBuYW1lIG1hdGNoZXMgYSB0ZXh0IHBh dHRlcm4gYnV0IG5vdCBhIGJpbmFyeSBwYXR0ZXJuLgorICAgIDEgaWYgbmFtZSBtYXRjaGVzIGEg YmluYXJ5IHBhdHRlcm4gYnV0IG5vdCBhIHRleHQgcGF0dGVybi4KKyAgIC0xIGlmIG5hbWUgbWF0 Y2hlcyBubyBwYXR0ZXJucy4KKyAgIC0yIGlmIG5hbWUgbWF0Y2hlcyBhIGJpbmFyeSBwYXR0ZXJu IGFuZCBhIHRleHQgcGF0dGVybi4KKyovCitpbnQKK21hdGNobmFtZShmaWxlbmFtZSwgbG9jYWws IG9zKSBjaGFyICogZmlsZW5hbWU7IGludCBsb2NhbDsgaW50IG9zOyB7CisgICAgaW50IHJjID0g LTE7CQkJLyogUmV0dXJuIGNvZGUgKi8KKyAgICBjaGFyICogbmFtZSwgKiBwOworI2lmZGVmIE9T Mk9SVU5JWAorICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKyNlbmRpZiAvKiBPUzJPUlVO SVggKi8KKworICAgIG5hbWUgPSBmaWxlbmFtZSA/IGZpbGVuYW1lIDogIiI7CS8qIENvcHkgb2Yg b3JpZ2luYWwgYXJnICovCisgICAgaWYgKHBhdHRlcm5zICYmICpuYW1lKSB7CQkvKiBJZiBQQVRU RVJOUyBPTi4uLiAqLworCWludCBpOworCisjaWZkZWYgT1MyT1JVTklYCisJaWYgKGNrbWF0Y2go IiouflsxLTldKn4iLG5hbWUsMSwxKSkgeyAvKiBOYW1lIGhhcyBiYWNrdXAgc3VmZml4PyAqLwor CSAgICBpbnQgazsKKwkgICAgayA9IGNrc3RybmNweSh0bXBidWYsbmFtZSxDS01BWFBBVEgrMSk7 IC8qIFllcywgY29weSBhbmQgc3RyaXAgKi8KKwkgICAgZm9yIChpID0gayAtIDM7IGkgPiA0OyBp LS0pIHsKKwkJaWYgKHRtcGJ1ZltpXSA9PSAnficgJiYgdG1wYnVmW2ktMV0gPT0gJy4nKSB7CisJ CSAgICB0bXBidWZbaS0xXSA9IE5VTDsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KKwkgICAg bmFtZSA9IHRtcGJ1ZjsJCS8qIEFuZCBwb2ludCB0byBzdHJpcHBlZCBjb3B5ICovCisJfQorI2Vu ZGlmIC8qIE9TMk9SVU5JWCAqLworCXpzdHJpcChuYW1lLCZwKTsJCS8qIFN0cmlwIHBhdGhuYW1l IHRvbyAqLworCW5hbWUgPSBwOworCisgICAgICAgIGlmIChsb2NhbCkgeworICAgICAgICAgICAg aWYgKHR4dHBhdHRlcm5zWzBdKSB7CS8qIFNlYXJjaCB0ZXh0IHBhdHRlcm5zICovCisgICAgICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cGF0dGVybnNbaV07IGkr KykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ttYXRjaCh0eHRwYXR0ZXJuc1tpXSxuYW1l LGZpbGVjYXNlLDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiaW5wYXR0ZXJuc1swXSkg ewkvKiBBbmQgc2VhcmNoIGJpbmFyeSBwYXR0ZXJucyAqLworICAgICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBhdHRlcm5zW2ldOyBpKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKGNrbWF0Y2goYmlucGF0dGVybnNbaV0sbmFtZSxmaWxlY2FzZSwxKSkg eworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAocmMgPiAtMSkgPyAtMiA6IDE7CisgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwl9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9z ID49IDAgJiYgb3MgPCBTWVNfTUFYKSB7CisJCWlmICh0eHRwW29zXVswXSkgeworCQkgICAgZm9y IChpID0gMDsgaSA8IEZUUEFUVEVSTlMgJiYgdHh0cFtvc11baV07IGkrKykgeworCQkJaWYgKGNr bWF0Y2godHh0cFtvc11baV0sbmFtZSxmaWxlY2FzZSwxKSkgeworCQkJICAgIHJjID0gMDsKKwkJ CSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQorCQlpZiAoYmlucFtvc11bMF0pIHsKKwkJ ICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIGJpbnBbb3NdW2ldOyBpKyspIHsKKwkJ CWlmIChja21hdGNoKGJpbnBbb3NdW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKKwkJCSAgICByYyA9 IChyYyA+IC0xKSA/IC0yIDogMTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJfQor CSAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZGVidWcoRjExMSwibWF0Y2huYW1lIixuYW1l LHJjKTsKKyAgICByZXR1cm4ocmMpOworfQorI2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyNpZmRl ZiBVTklDT0RFCisjaWZuZGVmIE5PRVZFTk1BWAorI2RlZmluZSBFVkVOTUFYCisjZW5kaWYgLyog Tk9FVkVOTUFYICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworCisvKiAgUyBDIEEgTiBGIEkgTCBF ICAtLSAgQW5hbHl6ZSBhIGZpbGUncyBjb250ZW50cyAgKi8KKworLyoKKyAgQ2FsbCB3aXRoOgor ICAgIG5hbWU6ICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBleGlzdGluZyBmaWxlLgorICAgIGZsYWc6 ICAgIFBvaW50ZXIgdG8gaW50IGluIHdoaWNoIHRvIHJldHVybiBhZGRpdGlvbmFsIG51bWVyaWMg ZGF0YS4KKworICBSZXR1cm5zOgorICAgIC0xIG9uIGZhaWx1cmUgKHRvIG9wZW4gZmlsZSBvciB0 byByZWFkIGZyb20gaXQpLgorICAgIEludGVnZXIsIDAuLjQsIG9uIHN1Y2Nlc3MgaW5kaWNhdGlu ZyBmaWxlIHR5cGU6CisgICAgIDAgPSA3LWJpdCB0ZXh0IChmbGFnID0gLTEpCisgICAgIDEgPSBV VEYtOCB0ZXh0IChmbGFnID0gLTEpCisgICAgIDIgPSBVQ1MtMiB0ZXh0IChmbGFnID0gIDA6IGJp Zy1lbmRpYW47IGZsYWcgPSAxOiBsaXR0bGUtZW5kaWFuKQorICAgICAzID0gOC1iaXQgdGV4dCAo ZmxhZyA9ICAwOiBubyBDMSBieXRlczsgZmxhZyA9IDE6IGluY2x1ZGVzIEMxIGJ5dGVzKQorICAg ICA0ID0gVGV4dCAgICAgICAodHlwZSB1bmtub3duKQorICAgICA1ID0gYmluYXJ5ICAgICAoZmxh ZyA9IC0xKQorCisgIElmIFVOSUNPREUgaXMgZGVmaW5lZDoKKworICAgMS4gSWYgZmlsZSBiZWdp bnMgd2l0aCBhIHZhbGlkIEJPTSwgaXQgaXMgYmVsaWV2ZWQuICBPdGhlcndpc2Ugd2UKKyAgICAg IHJlYWQgdGhlIGZpcnN0IDRLIG9mIHRoZSBmaWxlIChzaW5jZSBpdCBtaWdodCBiZSBlbWFpbCB3 aXRoIHZlcmJvc2UKKyAgICAgIGhlYWRlcnMpIGFuZCBhbmFseXplIGl0OgorCisgICAyLiBJZiBm aWxlIGNvbnRhaW5zIG9ubHkgdmFsaWQgVVRGLTggc2VxdWVuY2VzLCB3ZSBjYWxsIGl0IFVURi04 OworICAgICAgb3RoZXJ3aXNlOgorCisgICAzLiBJZiB0aGUgZmlsZSBjb250YWlucyBsb3RzIG9m IGFsdGVybmF0ZSAwIGJ5dGVzLCB3ZSBjYWxsIGl0IFVDUy0yLCBhbmQKKyAgICAgIHNldCB0aGUg cG9sYXJpdHkgYWNjb3JkaW5nIHRvIHdoZXRoZXIgdGhlIHByZXBvbmRlcmFuY2Ugb2YgdGhlbSBh cmUgaW4KKyAgICAgIGV2ZW4gb3Igb2RkIHBvc2l0aW9uczsgb3RoZXJ3aXNlOgorCisgICA0LiBJ ZiBFVkVOTUFYIGlzIGRlZmluZWQgYW5kIHRoZSBmaWxlIGNvbnRhaW5zIGxvdHMgb2YgYWx0ZXJu YXRlIGJ5dGVzIHRoYXQKKyAgICAgIGFyZSBpZGVudGljYWwsIGV2ZW4gaWYgdGhleSBhcmVuJ3Qg emVybywgYW5kIHRoZSBudW1iZXIgb2Ygc3VjaCBieXRlcworICAgICAgaXMgYXQgbGVhc3QgZm91 ciB0aW1lcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXhpbXVtIHJ1biBvZiBhbHRlcm5hdGluZworICAg ICAgaWRlbnRpY2FsIGJ5dGVzIG9mIHRoZSBvcHBvc2l0ZSBwb2xhcml0eSwgd2UgY2FsbCBpdCBV Q1MtMjsgb3RoZXJ3aXNlOgorCisgICA1LiBJZiB0aGUgZmlsZSBjb250YWluZWQgbm8gYnl0ZXMg d2l0aCB0aGVpciA4dGggYml0cyBvbiBhbmQgbm8gY29udHJvbHMKKyAgICAgIG90aGVyIHRoYW4g Q1IsIExGLCBIVCwgYW5kIEZGLCB3ZSBjYWxsIGl0IEFTQ0lJOyBvdGhlcndpc2U6CisKKyAgIDYu IElmIGl0IGNvbnRhaW5zIEMwIGNvbnRyb2wgY2hhcmFjdGVycyBvdGhlciB0aGFuIENSLCBMRiwg SFQsIGFuZCBGRiwgd2UKKyAgICAgIGNhbGwgaXQgYmluYXJ5OyBvdGhlcndpc2U6CisKKyAgIDcu IFdlIGNhbGwgaXQgOC1iaXQgdGV4dCwgY2hhcmFjdGVyIHNldCB1bmtub3duIChjb3VsZCBiZSBM YXRpbi0xIG9yCisgICAgICBhbnl0aGluZyBlbHNlKS4KKworICAgTm90ZSB0aGF0IG1hbGZvcm1l ZCBVVEYtOCBpcyBub3QgZGlhZ25vc2VkIGFzIFVURi04LgorCisgICBJZiBVTklDT0RFIGlzIG5v dCBkZWZpbmVkOgorCisgICAxLiBJZiB0aGUgZmlsZSBjb250YWlucyBDMCBjb250cm9sIGNoYXJh Y3RlcnMgb3RoZXIgdGhhbiBDUiwgTEYsIEhULCBhbmQKKyAgICAgIEZGLCB3ZSBjYWxsIGl0IGJp bmFyeTsgb3RoZXJ3aXNlOgorCisgICAyLiBJZiB0aGUgZmlsZSBjb250YWlucyBhbnkgOC1iaXQg Ynl0ZXMsIHdlIGNhbGwgaXQgOC1iaXQgdGV4dDsgb3RoZXJ3aXNlOgorCisgICAzLiBXZSBjYWxs IGl0IDctYml0IHRleHQuCisKKyAgIEluIHRoZSBub24tVW5pY29kZSBjYXNlLCBVQ1MtMiBpcyBk aWFnbm9zZWQgYXMgYmluYXJ5LCBidXQgVVRGLTggYXMKKyAgIDgtYml0IHRleHQuCisKKyAgIFRo ZXJlIGlzIG5vIHNpZ25pZmljYW50IHNwZWVkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgVW5pY29k ZSBhbmQKKyAgIG5vbi1Vbmljb2RlIGNhc2VzLgorKi8KK2ludAorc2NhbmZpbGUobmFtZSxmbGFn LG5zY2FuZmlsZSkgY2hhciAqIG5hbWU7IGludCAqIGZsYWcsIG5zY2FuZmlsZTsgeworICAgIEZJ TEUgKiBmcDsJCQkJLyogRmlsZSBwb2ludGVyICovCisgICAgdW5zaWduZWQgY2hhciBidWZbU0NB TkZJTEVCVUZdOwkvKiBGaWxlIGRhdGEgYnVmZmVyIGZvciBhbmFseXNpcyAqLworICAgIGludCB4 LCB2YWwgPSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLworICAgIGludCByYyA9IC0xOwkJ CS8qIFJldHVybiBjb2RlICovCisgICAgaW50IHB2ID0gLTE7CQkJLyogUGF0dGVybi1tYXRjaCB2 YWx1ZSAqLworICAgIGludCBlb2YgPSAwOwkJCS8qIEZsYWcgZm9yIGZpbGUgRU9GIGVuY291bnRl cmVkICovCisgICAgaW50IGJ5dGVzID0gMDsJCQkvKiBUb3RhbCBieXRlIGNvdW50ICovCisjaWZk ZWYgVU5JQ09ERQorICAgIHVuc2lnbmVkIGludCBjMCwgYzE7CQkvKiBGaXJzdCAyIGZpbGUgYnl0 ZXMgKGZvciBCT00pICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgIGV4dGVybiBpbnQgcGlw ZXNlbmQsIGZpbGVwZWVrOworCisgICAgcmVnaXN0ZXIgaW50IGk7CQkJLyogTG9vcCBjb250cm9s ICovCisgICAgaW50IHJlYWRzaXplID0gMDsJCQkvKiBIb3cgbXVjaCB0byByZWFkICovCisgICAg aW50IGVpZ2h0Yml0ID0gMDsJCQkvKiBOdW1iZXIgb2YgYnl0ZXMgd2l0aCA4dGggYml0IG9uICov CisgICAgaW50IGMwY29udHJvbHMgPSAwOwkJCS8qIEMwIG5vbi10ZXh0IGNvbnRyb2wtY2hhciBj b3VudGVyICovCisgICAgaW50IGMwbm9uaXNvID0gMDsJCQkvKiBDMCBub24tSVNPIGNvbnRyb2wt Y2hhciBjb3VudGVyICovCisgICAgaW50IGMxY29udHJvbHMgPSAwOwkJCS8qIEMxIGNvbnRyb2wt Y2hhcmFjdGVyIGNvdW50ZXIgKi8KKyAgICB1bnNpZ25lZCBpbnQgYzsJCQkvKiBDdXJyZW50IGNo YXJhY3RlciAqLworICAgIGludCBydW5tYXggPSAwOwkJCS8qIExvbmdlc3QgcnVuIG9mIDAgYnl0 ZXMgKi8KKyAgICBpbnQgcnVuemVybyA9IDA7CQkJLyogUnVuIG9mIDAgYnl0ZXMgKi8KKyAgICBp bnQgcGN0emVybyA9IDA7CQkJLyogUGVyY2VudGFnZSBvZiAwIGJ5dGVzICovCisgICAgaW50IHR4 dGN6ID0gMDsKKyNpZmRlZiBDS19DVFJMWgorICAgIGV4dGVybiBpbnQgZW9mbWV0aG9kOworI2Vu ZGlmIC8qIENLX0NUUkxaICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgaW50IG5vdHV0ZjggPSAw OwkJCS8qIE5vbnplcm8gaWYgZGVmaW5pdGVseSBub3QgVVRGLTggKi8KKyAgICBpbnQgdXRmOHN0 YXRlID0gMDsJCQkvKiBVVEYtOCByZWNvZ25pemVyIHN0YXRlICovCisgICAgaW50IG9kZHplcm8g PSAwOwkJCS8qIE51bWJlciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLworICAgIGludCBl dmVuemVybyA9IDA7CQkJLyogYW5kIGluIGV2ZW4gcG9zaXRpb25zICovCisgICAgaW50IGxmbnVs ID0gMDsJCQkvKiBOdW1iZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLworICAgIGludCBjcmxm ID0gMDsJCQkvKiBOdW1iZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAqLworI2Vsc2UKKyAgICBpbnQg bm90dXRmOCA9IDE7CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisjaWZkZWYgQ09NTUVOVAorI2lm ZGVmIEVWRU5NQVgKKyAgICBpbnQgb2RkcnVuID0gMCwgb2RkbWF4ID0gMCwgb2RkYnl0ZSA9IDAs IG9kZG1heGJ5dGUgPSAwOworICAgIGludCBldmVucnVuID0gMCwgZXZlbm1heCA9IDAsIGV2ZW5i eXRlID0gMCwgZXZlbm1heGJ5dGUgPSAwOworI2VuZGlmIC8qIEVWRU5NQVggKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKHBpcGVzZW5kIHx8IGNhbGli cmF0ZSB8fCBzbmRhcnJheSkgLyogT25seSBmb3IgcmVhbCBmaWxlcyAqLworICAgICAgcmV0dXJu KC0xKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSIsbmFt ZSxuc2NhbmZpbGUpOworI2lmZGVmIFBBVFRFUk5TCisgICAgaWYgKCFmaWxlcGVlaykgeworCXB2 ID0gbWF0Y2huYW1lKG5hbWUsMSwtMSk7CisJaWYgKHB2IDwgMCkKKwkgIHJjID0gLTE7CisJZWxz ZQorCSAgcmMgPSAocHYgPT0gMSkgPyBGVF9CSU4gOiBGVF9URVhUOworCWRlYnVnKEYxMTEsInNj YW5maWxlICFmaWxlcGVlayByZXN1bHQiLG5hbWUscmMpOworCXJldHVybihyYyk7CisgICAgfQor I2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyNpZmRlZiBWTVMKKy8qIFdlIGRvbid0IHNjYW4gaW4g Vk1TIHdoZXJlIHRleHQgZmlsZXMgaGF2ZSB2YXJpb3VzIHJlY29yZCBmb3JtYXRzIGluICAqLwor Lyogd2hpY2ggcmVjb3JkIGhlYWRlcnMgY29udGFpbiBzZWVtaW5nbHkgbm9uLXRleHQgYnl0ZXMu ICBTbyB0aGUgYmVzdCAgICovCisvKiB3ZSBjYW4gZG8gaW4gVk1TIGlzIHRlbGwgd2hldGhlciB0 aGUgZmlsZSBpcyB0ZXh0IG9yIGJpbmFyeSwgcGVyaW9kLiAgKi8KKyAgICB7CisJaW50IGIsIHg7 CisJYiA9IGJpbmFyeTsJCQkvKiBTYXZlIGN1cnJlbnQgYmluYXJ5IHNldHRpbmcgKi8KKwlpZiAo em9wZW5pKFpJRklMRSxuYW1lKSA+IDApIHsJLyogSW4gVk1TIHRoaXMgc2V0cyBiaW5hcnkgKi8K KwkgICAgeCA9IGJpbmFyeTsJCQkvKiBHZXQgcmVzdWx0ICovCisJICAgIHpjbG9zZShaSUZJTEUp OwkJLyogQ2xvc2UgdGhlIGZpbGUgKi8KKwkgICAgYmluYXJ5ID0gYjsJCQkvKiBSZXN0b3JlIHBy ZXZpb3VzIGJpbmFyeSBzZXR0aW5nICovCisJICAgIHJjID0geCA/IEZUX0JJTiA6IEZUX1RFWFQ7 CisJICAgIHZhbCA9IDA7CisJICAgIGdvdG8geHNjYW5maWxlOworCX0KKyAgICB9CisjZW5kaWYg LyogVk1TICovCisKKyAgICBlb2YgPSAwOwkJCQkvKiBFbmQtb2YtZmlsZSByZWFjaGVkIGluZGlj YXRvciAqLworI2lmZGVmIE9TMgorICAgIGZwID0gZm9wZW4obmFtZSwgInJiIik7CQkvKiBPcGVu IHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlICovCisjZWxzZQorICAgIGZwID0gZm9wZW4obmFtZSwg InIiKTsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmICghZnApCQkJCS8qIEZhaWxlZD8gKi8K KyAgICAgIHJldHVybigtMSk7CisKKyAgICB3aGlsZSAoMSkgewkJCQkvKiBPbmUgb3IgbW9yZSBn dWxwcyBmcm9tIGZpbGUgKi8KKwlpZiAoZW9mKSB7CQkJLyogRU9GIGZyb20gbGFzdCB0aW1lPyAq LworCSAgICBkZWJ1ZyhGMTExLCJzY2FuZmlsZSBhdCBFT0YiLG5hbWUsYnl0ZXMpOworCSAgICBp ZiAocnVuemVybyA+IHJ1bm1heCkKKwkgICAgICBydW5tYXggPSBydW56ZXJvOworCSAgICBicmVh azsKKwl9CisJaWYgKG5zY2FuZmlsZSA8IDApIHsJCS8qIFJlYWRpbmcgd2hvbGUgZmlsZSAqLwor CSAgICByZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOworCX0gZWxzZSB7CQkJLyogUmVhZGluZyBmaXJz dCBuc2NhbmZpbGVlIGJ5dGVzICovCisJICAgIHJlYWRzaXplID0gbnNjYW5maWxlIC0gYnl0ZXM7 CisJICAgIGlmIChyZWFkc2l6ZSA8IDEpCisJICAgICAgYnJlYWs7CisJICAgIGlmIChyZWFkc2l6 ZSA+IFNDQU5GSUxFQlVGKQorCSAgICAgIHJlYWRzaXplID0gU0NBTkZJTEVCVUY7CisJfQorCWRl YnVnKEYxMDEsInNjYW5maWxlIHJlYWRzaXplIiwiIixyZWFkc2l6ZSk7CisJY291bnQgPSBmcmVh ZChidWYsMSxyZWFkc2l6ZSxmcCk7IC8qIFJlYWQgYSBidWZmZXIgKi8KKwlpZiAoY291bnQgPT0g RU9GIHx8IGNvdW50ID09IDApIHsKKwkgICAgZGVidWcoRjExMSwic2NhbmZpbGUgRU9GIixuYW1l LGNvdW50KTsKKwkgICAgYnJlYWs7CisJfQorCWRlYnVnKEYxMTEsInNjYW5maWxlIGJ1ZmZlciBv ayIsbmFtZSxjb3VudCk7CisKKwlpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDgpIHsKKwkgICAg LyogUERGIGZpbGVzIGNhbiBsb29rIGxpa2UgdGV4dCBpbiB0aGUgYmVnaW5uaW5nLiAqLworCSAg ICBpZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIlUERGLTEuIiw3LDEpKSB7CisJCWlmIChpc2Rp Z2l0KGJ1Zls3XSkpIHsKKwkJICAgIGlmIChidWZbOF0gPT0gJ1wwMTUnIHx8CisJCQljb3VudCA+ IDkgJiYgYnVmWzhdID09IFNQICYmIGJ1Zls5XSA9PSAnXDAxNScpIHsKKyNpZmRlZiBERUJVRwor CQkJYnVmWzhdID0gTlVMOworCQkJZGVidWcoRjExMCwic2NhbmZpbGUgUERGIixidWYsMCk7Cisj ZW5kaWYgLyogREVCVUcgKi8KKwkJCWJpbmFyeSA9IDE7CS8qIEJ1dCB0aGV5IGFyZSBiaW5hcnku ICovCisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgo Y2hhciAqKWJ1ZiwiJSFQUy1BZG8iLDgsMSkpIHsKKwkJLyogRGl0dG8gZm9yIFBvc3RTY3JpcHQg Ki8KKyNpZmRlZiBERUJVRworCQlpbnQgaTsKKwkJZm9yIChpID0gODsgaSA8IGNvdW50OyBpKysp IHsKKwkJICAgIGlmIChidWZbaV0gPCAnIScpIHsKKwkJCWJ1ZltpXSA9IE5VTDsKKwkJCWJyZWFr OworCQkgICAgfQorCQl9CisJCWRlYnVnKEYxMTAsInNjYW5maWxlIFBvc3RTY3JpcHQiLGJ1Ziww KTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQliaW5hcnkgPSAxOworCQlicmVhazsKKyNpZm5kZWYg Tk9QQ0xTQ0FOCisJICAgIH0gZWxzZSBpZiAoIWNrc3RyY21wKChjaGFyICopYnVmLCIpIEhQLVBD TCIsOCwxKSkgeworCQkvKiBIUCBQQ0wgcHJpbnRlciBsYW5ndWFnZSAqLworI2lmZGVmIERFQlVH CisJCWludCBpOworCQlmb3IgKGkgPSA4OyBpIDwgY291bnQ7IGkrKykgeworCQkgICAgaWYgKGJ1 ZltpXSA8ICchJykgeworCQkJYnVmW2ldID0gTlVMOworCQkJYnJlYWs7CisJCSAgICB9CisJCX0K KwkJZGVidWcoRjExMCwic2NhbmZpbGUgUENMIixidWYsMCk7CisjZW5kaWYgLyogREVCVUcgKi8K KwkJYmluYXJ5ID0gMTsKKwkJYnJlYWs7CisJICAgIH0gCisjZW5kaWYgLyogTk9QQ0xTQ0FOICov CisjaWZuZGVmIE5PUEpMU0NBTgorCSAgICAgIGVsc2UgaWYgKGJ1ZlswXSA9PSAnXDAzMycgJiYg KGJ1ZlsxXSA9PSAnRScgfHwgYnVmWzFdID09ICclJykpIHsKKwkJLyogRGl0dG8gZm9yIFBKTCBK b2IgcHJpbnRlciBoZWFkZXIgKi8KKyNpZmRlZiBERUJVRworCQlpbnQgaTsKKwkJZm9yIChpID0g MjsgaSA8IGNvdW50OyBpKyspIHsKKwkJICAgIGlmIChidWZbaV0gPCAnIScpIHsKKwkJCWJ1Zltp XSA9IE5VTDsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJCWRlYnVnKEYxMTAsInNjYW5maWxl IFBKTCBKb2IgcHJpbnRlciBoZWFkZXIiLGJ1ZiwwKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCQli aW5hcnkgPSAxOworCQlicmVhazsKKyNlbmRpZiAvKiBOT1BKTFNDQU4gKi8KKwkgICAgfQorCX0K KworI2lmZGVmIFVOSUNPREUKKwlpZiAoYnl0ZXMgPT0gMCAmJiBjb3VudCA+IDEpIHsKKwkgICAg aW50IGluY2xfY250ID0gMDsKKworCSAgICAvKiBGaXJzdCBsb29rIGZvciBCT00gKi8KKworCSAg ICBjMCA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlswXSYweEZGKTsgLyogRmlyc3QgZmlsZSBi eXRlICovCisJICAgIGMxID0gKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzFdJjB4RkYpOyAvKiBT ZWNvbmQgYnl0ZSAqLworCisJICAgIGlmIChjMCA9PSAweEZFICYmIGMxID09IDB4RkYpIHsJLyog VUNTLTIgQkUgKi8KKwkJcmMgPSBGVF9VQ1MyOworCQl2YWwgPSAwOworCQlkZWJ1ZyhGMTExLCJz Y2FuZmlsZSBVQ1MyIEJPTSBCRSIsY2tpdG9hKHZhbCkscmMpOworCQlpbmNsX2NudCsrOworCSAg ICB9IGVsc2UgaWYgKGMwID09IDB4RkYgJiYgYzEgPT0gMHhGRSkgeyAvKiBVQ1MtMiBMRSAqLwor CQlyYyA9IEZUX1VDUzI7CisJCXZhbCA9IDE7CisJCWRlYnVnKEYxMTEsInNjYW5maWxlIFVDUzIg Qk9NIExFIixja2l0b2EodmFsKSxyYyk7CisJCWluY2xfY250Kys7CisJICAgIH0gZWxzZSBpZiAo Y291bnQgPiAyKSBpZiAoYzAgPT0gMHhFRiAmJiBjMSA9PSAweEJCICYmCisJCSAgICAgICAodW5z aWduZWQpKCh1bnNpZ25lZClidWZbMl0mMHhGRikgPT0gMHhCRikgeworCQlyYyA9IEZUX1VURjg7 CisJCWRlYnVnKEYxMTEsInNjYW5maWxlIFVURjggQk9NIixja2l0b2EodmFsKSxyYyk7CisJCWlu Y2xfY250Kys7CisJICAgIH0KKwkgICAgaWYgKGluY2xfY250KSB7CQkvKiBIYXZlIEJPTSAqLwor CQlieXRlcyArPSBjb3VudDsKKwkJZ290byB4c2NhbmZpbGU7CisJICAgIH0KKwl9CisjZW5kaWYg LyogVU5JQ09ERSAqLworCisJYnl0ZXMgKz0gY291bnQ7CQkJLyogQ291bnQgYnl0ZXMgcmVhZCAq LworCWVvZiA9IGZlb2YoZnApOwkJCS8qIEZsYWcgZm9yIGF0IEVPRiAgKi8KKworCWZvciAoaSA9 IDA7IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUuLi4gKi8KKwkgICAgYyA9ICh1 bnNpZ25lZClidWZbaV07CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5jZSAqLworCSAgICBpZiAoIWMp IHsJCQkvKiBaZXJvIGJ5dGU/ICovCisjaWZkZWYgRVZFTk1BWAorCQlpZiAoaSYxKQkJLyogSW4g b2RkIHBvc2l0aW9uICovCisJCSAgb2RkemVybysrOworCQllbHNlCisJCSAgZXZlbnplcm8rKzsJ CS8qIEluIGV2ZW4gcG9zaXRpb24gKi8KKyNlbmRpZiAvKiBFVkVOTUFYICovCisJCXJ1bnplcm8r KzsKKwkgICAgfSBlbHNlIHsJCQkvKiBOb3QgYSB6ZXJvIGJ5dGUgKi8KKwkJaWYgKHJ1bnplcm8g PiBydW5tYXgpCisJCSAgcnVubWF4ID0gcnVuemVybzsKKwkJaWYgKHJ1bm1heCA+IDIpCQkvKiBU aGF0J3MgYWxsIHdlIG5lZWQgdG8gYmUgY2VydGFpbiAqLworCQkgIGJyZWFrOwkJLyogaXQncyBh IGJpbmFyeSBmaWxlLiAqLworCQlydW56ZXJvID0gMDsKKwkgICAgfQorCisjaWZkZWYgQ09NTUVO VAorI2lmZGVmIEVWRU5NQVgKKworLyogVGhpcyBpcyB0byBjYXRjaCBVQ1MtMiB3aXRoIGEgbm9u LUFTQ0lJLCBub24tTGF0aW4tMSByZXBlcnRvaXJlICAqLworCisJICAgIGlmIChpID4gMSkgewkg ICAgICAvKiBMb29rIGZvciBydW5zIG9mIGFsdGVybmF0aW5nIGNoYXJzICovCisJCWlmIChpJjEp IHsKKwkJICAgIGlmIChjID09IGJ1ZltpLTJdKSB7IC8qIEluIG9kZCBwb3NpdGlvbnMgKi8KKwkJ CW9kZHJ1bisrOworCQkJb2RkYnl0ZSA9IGM7CisJCSAgICB9IGVsc2UgeworCQkJb2RkbWF4ID0g b2RkcnVuOworCQkJb2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7CisJCSAgICB9CisJCX0gZWxzZSB7CQkv KiBhbmQgZXZlbiBwb3NpdGlvbnMgKi8KKwkJICAgIGlmIChjID09IGJ1ZltpLTJdKSB7CisJCQll dmVucnVuKys7CisJCQlldmVuYnl0ZSA9IGM7CisJCSAgICB9IGVsc2UgeworCQkJZXZlbm1heCA9 IGV2ZW5ydW47CisJCQlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOworCQkgICAgfQorCQl9CisJICAg IH0KKyNlbmRpZiAvKiBFVkVOTUFYICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisJICAgIGlm ICgoYyAmIDB4ODApID09IDApIHsJLyogV2UgaGF2ZSBhIDctYml0IGJ5dGUgKi8KKyNpZmRlZiBV TklDT0RFCisJCWlmIChpID4gMCAmJiBjID09IDEwKSB7IC8qIExpbmVmZWVkICovCisJCSAgICBp ZiAoYnVmW2ktMV0gPT0gMCkgbGZudWwrKzsgLyogUHJlY2VkZWQgYnkgTlVMICovCisJCSAgICBl bHNlIGlmIChidWZbaS0xXSA9PSAxMykgY3JsZisrOyAvKiBvciBieSBDUi4uLiAqLworCQl9Cisj ZW5kaWYgLyogVU5JQ09ERSAqLworCQlpZiAoYyA8ICcgJykgewkJLyogQ2hlY2sgZm9yIENPIGNv bnRyb2xzICovCisJCSAgICBpZiAoYyAhPSBMRiAmJiBjICE9IENSICYmIGMgIT0gSFQgJiYgYyAh PSBGRikgeworCQkJYzBjb250cm9scysrOworCQkJaWYgKGMgIT0gRVNDICYmIGMgIT0gU08gJiYg YyAhPSBTSSkKKwkJCSAgYzBub25pc28rKzsKKwkJICAgIH0KKwkJICAgIGlmICgoYyA9PSAnXDAz MicpCS8qIEN0cmwtWiAqLworI2lmZGVmIENPTU1FTlQKKwkJCSYmIGVvZiAmJiAoaSA+PSBjb3Vu dCAtIDIpCisjZW5kaWYgLyogQ09NTUVOVCAqLworCQkJKSB7CisJCQljMGNvbnRyb2xzLS07CisJ CQljMG5vbmlzby0tOworI2lmZGVmIENLX0NUUkxaCisJCQlpZiAoZW9mbWV0aG9kID09IFhZRU9G X1ogJiYgdHh0Y3ogPT0gMCkgeworCQkJICAgIGlmIChjMGNvbnRyb2xzID09IDApIC8qIEFsbCB0 ZXh0IHByaW9yIHRvIEN0cmwtWiAqLworCQkJICAgICAgdHh0Y3ogPSAxOworCQkJfQorI2VuZGlm IC8qIENLX0NUUkxaICovCisJCSAgICB9CisJCX0KKyNpZmRlZiBVTklDT0RFCisJCWlmICghbm90 dXRmOCAmJiB1dGY4c3RhdGUpIHsgLyogSW4gVVRGLTggc2VxdWVuY2U/ICovCisJCSAgICB1dGY4 c3RhdGUgPSAwOworCQkgICAgZGVidWcoRjAwMCwic2NhbmZpbGUiLCI3LWJpdCBieXRlIGluIFVU Rjggc2VxdWVuY2UiLGMpOworCQkgICAgbm90dXRmOCsrOwkJLyogVGhlbiBpdCdzIG5vdCBVVEYt OCAqLworCQkgICAgY29udGludWU7CisJCX0KKyNlbmRpZiAvKiBVTklDT0RFICovCisJICAgIH0g ZWxzZSB7CQkJLyogV2UgaGF2ZSBhbiA4LWJpdCBieXRlICovCisJCWVpZ2h0Yml0Kys7CQkvKiBD b3VudCBpdCAqLworCQlpZiAoYyA+PSAweDgwICYmIGMgPCAweEEwKSAvKiBDaGVjayBmb3IgQzEg Y29udHJvbHMgKi8KKwkJICBjMWNvbnRyb2xzKys7CisjaWZkZWYgVU5JQ09ERQorCQlpZiAoIW5v dHV0ZjgpIHsJCS8qIElmIGl0IG1pZ2h0IHN0aWxsIGJlIFVURjguLi4gKi8KKwkJICAgIHN3aXRj aCAodXRmOHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBzdGF0ZSBtYWNoaW5lICovCisJCSAg ICAgIGNhc2UgMDoJCSAvKiBGaXJzdCBieXRlLi4uICovCisJCQlpZiAoKGMgJiAweEUwKSA9PSAw eEMwKSB7IC8qIFRlbGxzIG51bWJlciBvZiAqLworCQkJICAgIHV0ZjhzdGF0ZSA9IDE7ICAgICAg ICAvKiBzdWJzZXF1ZW50IGJ5dGVzICovCisJCQl9IGVsc2UgaWYgKChjICYgMHhGMCkgPT0gMHhF MCkgeworCQkJICAgIHV0ZjhzdGF0ZSA9IDI7CisJCQl9IGVsc2UgaWYgKChjICYgMHhGOCkgPT0g MHhGMCkgeworCQkJICAgIHV0ZjhzdGF0ZSA9IDM7CisJCQl9IGVsc2UgeworCQkJICAgIG5vdHV0 ZjgrKzsKKwkJCX0KKwkJCWJyZWFrOworCQkgICAgICBjYXNlIDE6CQkvKiBTdWJzZXF1ZW50IGJ5 dGUgKi8KKwkJICAgICAgY2FzZSAyOgorCQkgICAgICBjYXNlIDM6CisJCQlpZiAoKGMgJiAweEMw KSAhPSAweDgwKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAxMCAqLworCQkJICAgIGRlYnVnKEYwMDAs InNjYW5maWxlIiwKKwkJCQkgICJiYWQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKKwkJCSAg ICBub3R1dGY4Kys7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQl1dGY4c3RhdGUtLTsJLyogR29v ZCwgb25lIGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLworCQkJYnJlYWs7CisJCSAgICAgIGRlZmF1 bHQ6CQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJCQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSIsImJh ZCBVVEY4IHN0YXRlIix1dGY4c3RhdGUpOworCQkJbm90dXRmOCsrOworCQkgICAgfQorCQl9Cisj ZW5kaWYgLyogVU5JQ09ERSAqLworCSAgICB9CisJfQorICAgIH0KKyAgICBmY2xvc2UoZnApOwkJ CQkvKiBDbG9zZSB0aGUgZmlsZSAqLworICAgIGRlYnVnKEYxMDEsInNjYW5maWxlIGJ5dGVzIiwi IixieXRlcyk7CisKKyAgICBpZiAoYnl0ZXMgPT0gMCkJCQkvKiBJZiBub3RoaW5nIHdhcyByZWFk ICovCisgICAgICByZXR1cm4oLTEpOwkJCS8qIHdlJ3JlIGRvbmUuICovCisKKyNpZmRlZiBFVkVO TUFYCisgICAgLyogSW4gY2FzZSB3ZSBoYWQgYSBydW4gdGhhdCBuZXZlciBicm9rZS4uLiAqLwor I2lmZGVmIENPTU1FTlQKKyAgICBpZiAob2RkbWF4ID09IDApIHsKKwlvZGRtYXggPSBvZGRydW47 CisJb2RkbWF4Ynl0ZSA9IG9kZGJ5dGU7CisgICAgfQorICAgIGlmIChldmVubWF4ID09IDApIHsK KwlldmVubWF4ID0gZXZlbnJ1bjsKKwlldmVubWF4Ynl0ZSA9IGV2ZW5ieXRlOworICAgIH0KKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgaWYgKHJ1bm1heCA9PSAwKSB7CisJcnVubWF4ID0gcnVu emVybzsKKyAgICB9CisjZW5kaWYgLyogRVZFTk1BWCAqLworCisjaWZkZWYgVU5JQ09ERQorICAg IGlmIChieXRlcyA+IDEwMCkJCQkvKiBCeXRlcyBpcyBub3QgMCAqLworICAgICAgcGN0emVybyA9 IChldmVuemVybyArIG9kZHplcm8pIC8gKGJ5dGVzIC8gMTAwKTsKKyAgICBlbHNlCisgICAgICBw Y3R6ZXJvID0gKChldmVuemVybyArIG9kZHplcm8pICogMTAwKSAvIGJ5dGVzOworI2VuZGlmIC8q IFVOSUNPREUgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgewkJCS8qIElmIGRl YnVnZ2luZywgZHVtcCBzdGF0aXN0aWNzICovCisJZGVidWcoRjEwMSwic2NhbmZpbGUgYzBjb250 cm9scyAiLCIiLGMwY29udHJvbHMpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGMwbm9uaXNvICAg IiwiIixjMG5vbmlzbyk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgYzFjb250cm9scyAiLCIiLGMx Y29udHJvbHMpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGVpZ2h0Yml0ICAgIiwiIixlaWdodGJp dCk7CisjaWZkZWYgVU5JQ09ERQorCWRlYnVnKEYxMDEsInNjYW5maWxlIGNybGYgICAgICAgIiwi IixjcmxmKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBsZm51bCAgICAgICIsIiIsbGZudWwpOwor CWRlYnVnKEYxMDEsInNjYW5maWxlIG5vdHV0ZjggICAgIiwiIixub3R1dGY4KTsKKwlkZWJ1ZyhG MTAxLCJzY2FuZmlsZSBldmVuemVybyAgICIsIiIsZXZlbnplcm8pOworCWRlYnVnKEYxMDEsInNj YW5maWxlIG9kZHplcm8gICAgIiwiIixvZGR6ZXJvKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBl dmVuL29kZCAgICIsIiIsKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAxKSkpOworCWRlYnVnKEYxMDEs InNjYW5maWxlIG9kZC9ldmVuICAgIiwiIiwob2RkemVybyAvIChldmVuemVybyArIDEpKSk7CisJ ZGVidWcoRjEwMSwic2NhbmZpbGUgcGN0emVybyAgICAiLCIiLHBjdHplcm8pOworI2VuZGlmIC8q IFVOSUNPREUgKi8KKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgRVZFTk1BWAorCWRlYnVnKEYxMDEs InNjYW5maWxlIG9kZG1heCAgICAgIiwiIixvZGRtYXgpOworCWRlYnVnKEYxMDEsInNjYW5maWxl IG9kZG1heGJ5dGUgIiwiIixvZGRtYXhieXRlKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBldmVu bWF4ICAgICIsIiIsZXZlbm1heCk7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbm1heGJ5dGUi LCIiLGV2ZW5tYXhieXRlKTsKKyNlbmRpZiAvKiBFVkVOTUFYICovCisjZW5kaWYgLyogQ09NTUVO VCAqLworCWRlYnVnKEYxMDEsInNjYW5maWxlIHJ1bm1heCAgICAgIiwiIixydW5tYXgpOworICAg IH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIHggPSBlaWdodGJp dCA/IGJ5dGVzIC8gMjAgOiBieXRlcyAvIDQ7IC8qIEZvciBVQ1MtMi4uLiAqLworCisgICAgaWYg KHJ1bm1heCA+IDIpIHsJCQkvKiBGaWxlIGhhcyBydW4gb2YgbW9yZSB0aGFuIDIgTlVMcyAqLwor CWRlYnVnKEYxMDAsInNjYW5maWxlIEJJTiBydW5tYXgiLCIiLDApOworCXJjID0gRlRfQklOOwkJ CS8qIHNvIGl0IGNhbid0IGJlIGFueSBraW5kIG9mIHRleHQuICovCisJZ290byB4c2NhbmZpbGU7 CisKKyAgICB9IGVsc2UgaWYgKHJjID09IEZUX1VDUzIgfHwgKHJjID09IEZUX1VURjggJiYgcnVu bWF4ID09IDApKSB7CisJZ290byB4c2NhbmZpbGU7CQkJLyogRmlsZSBzdGFydHMgd2l0aCBhIEJP TSAqLworCisgICAgfSBlbHNlIGlmIChlaWdodGJpdCA+IDAgJiYgIW5vdHV0ZjgpIHsgLyogRmls ZSBoYXMgOC1iaXQgZGF0YSAqLworCWlmIChydW5tYXggPiAwKSB7CQkgICAvKiBhbmQgcnVucyBv ZiBOVUxzICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIEJJTiAobm5VVEY4KSBydW5tYXgi LCIiLDApOworCSAgICByYyA9IEZUX0JJTjsJCSAgIC8qIFVURi04IGRvZXNuJ3QgaGF2ZSBOVUxz ICovCisJfSBlbHNlIHsJCQkgICAvKiBObyBOVUxzICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5m aWxlIFVURjggKG5uVVRGOCArIHJ1bm1heCA9PSAwKSIsIiIsMCk7CisJICAgIHJjID0gRlRfVVRG ODsJCSAgIC8qIGFuZCBub3Qgbm90IFVURi04LCBzbyBpcyBVVEYtOCAqLworCX0KKwlnb3RvIHhz Y2FuZmlsZTsKKyAgICB9CisvKgorICBGb3IgVUNTLTIgZGV0ZWN0aW9uLCBzZWUgaWYgdGhlIHRl eHQgY29udGFpbnMgbGluZXMgZGVsaW1pdGVkIGJ5CisgIEFTQ0lJIGNvbnRyb2xzIGFuZCBjb250 YWluaW5nIHNwYWNlcywgQVNDSUkgZGlnaXRzLCBvciBvdGhlciBBU0NJSQorICBjaGFyYWN0ZXJz LCB0aHVzIGZvcmNpbmcgdGhlIHByZXNlbmNlIG9mIGEgY2VydGFpbiBwZXJjZW50YWdlIG9mIHpl cm8gYnl0ZXMuCisgIEZvciB0aGlzIHB1cnBvc2UgcmVxdWlyZSAyMCUgemVybyBieXRlcywgd2l0 aCBhdCBsZWFzdCBzaXggdGltZXMgYXMgbWFueQorICBpbiBldmVuIChvZGQpIHBvc2l0aW9ucyBh cyBpbiBvZGQgKGV2ZW4pIHBvc2l0aW9ucy4KKyovCisgICAgaWYgKChldmVuemVybyA+PSB4ICYm IG9kZHplcm8gPT0gMCkgfHwKKwkoKCgoZXZlbnplcm8gLyAob2RkemVybyArIDEpKSA+IDYpICYm IChwY3R6ZXJvID4gMjApKSAmJgorCShjcmxmID09IDApICYmCisJKGxmbnVsID4gMSkpCisJKSB7 CisJICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIFVDUzIgbm9CT00gQkUgKGV2ZW4vb2RkemVybyki LCIiLDApOworCXJjID0gRlRfVUNTMjsKKwl2YWwgPSAwOworICAgIH0gZWxzZSBpZiAoKGV2ZW56 ZXJvID09IDAgJiYgb2RkemVybyA+PSB4KSB8fAorCSAgICAgICAoKCgob2RkemVybyAvIChldmVu emVybyArIDEpKSA+IDYpICYmIChwY3R6ZXJvID4gMjApKSAmJgorCSAgICAgICAoY3JsZiA9PSAw KSAmJgorCSAgICAgICAobGZudWwgPiAxKSkKKwkgICAgICAgKSB7CisJZGVidWcoRjEwMCwic2Nh bmZpbGUgVUNTMiBub0JPTSBMRSAoZXZlbi9vZGR6ZXJvKSIsIiIsMCk7CisJcmMgPSBGVF9VQ1My OworCXZhbCA9IDE7CisKKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgRVZFTk1BWAorLyoKKyAgSWYg dGhlIHRlc3RzIGFib3ZlIGZhaWwsIHdlIHN0aWxsIG1pZ2h0IGhhdmUgVUNTLTIgaWYgdGhlcmUg YXJlIHNpZ25pZmljYW50CisgIHJ1bnMgb2YgaWRlbnRpY2FsIGJ5dGVzIGluIGFsdGVybmF0aW5n IHBvc2l0aW9ucywgYnV0IG9ubHkgaWYgaXQgYWxzbyBoYXMKKyAgdW51c3VhbCBDMCBjb250cm9s cyAob3RoZXJ3aXNlIHdlJ2QgcGljayB1cCBoZXggZmlsZXMgaGVyZSkuICBOT1RFOiBXZQorICBk b24ndCBhY3R1YWxseSBkbyB0aGlzIC0tIEVWRU5NQVggaXMgbm90IGRlZmluZWQgKHNlZSBjb21t ZW50cyBhYm92ZSBhdAorICBmaXJzdCBvY2N1cnJlbmNlIG9mIEVWRU5NQVgpLgorKi8KKyAgICB9 IGVsc2UgaWYgKGMwbm9uaXNvICYmIGV2ZW5tYXggPiBieXRlcyAvIDQpIHsKKwlkZWJ1ZyhGMTAw LCJzY2FuZmlsZSBVQ1MyIEJFIChldmVubWF4KSIsIiIsMCk7CisJcmMgPSBGVF9VQ1MyOworCXZh bCA9IDA7CisgICAgfSBlbHNlIGlmIChjMG5vbmlzbyAmJiBvZGRtYXggPiBieXRlcyAvIDQpIHsK KwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIExFIChldmVubWF4KSIsIiIsMCk7CisJcmMgPSBG VF9VQ1MyOworCXZhbCA9IDE7CisjZW5kaWYgLyogRVZFTk1BWCAqLworI2VuZGlmIC8qIENPTU1F TlQgKi8KKworICAgIH0KKy8qCisgIEl0IHNlZW1zIHRvIGJlIFVDUy0yIGJ1dCBsZXQncyBiZSBt b3JlIGNlcnRhaW4gc2luY2UgdGhlcmUgaXMgbm8gQk9NLi4uCisgIElmIHRoZSBudW1iZXIgb2Yg Ny0gYW5kIDgtYml0IGNoYXJhY3RlcnMgaXMgYXBwcm94aW1hdGVseSBlcXVhbCwgaXQgbWlnaHQK KyAgYmUgYSBjb21wcmVzc2VkIGZpbGUuICBJbiB0aGlzIGNhc2Ugd2UgZGVjaWRlIGJhc2VkIG9u IHRoZSBuYW1lLgorKi8KKyAgICBpZiAocmMgPT0gRlRfVUNTMikgeworCWlmIChlaWdodGJpdCA+ IDApIHsKKwkgICAgaW50IGosIGs7CisJICAgIGogPSAoYzFjb250cm9scyAqIDEwMCkgLyAoYzBj b250cm9scyArIDEpOworCSAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMS9jMCAgICAgICIsIiIs aik7CisJICAgIGsgPSAoYnl0ZXMgKiAxMDApIC8gZWlnaHRiaXQ7CisJICAgIGRlYnVnKEYxMDEs InNjYW5maWxlIHBjdCA4Yml0ICAgIiwiIixrKTsKKwkgICAgaWYgKGsgPiA0MCAmJiBrIDwgNjAg JiYgaiA+IDYwKSB7CisJCWlmIChja21hdGNoKCJ7Ki5aLCouZ3osKi56aXAsKi5aSVB9IixuYW1l LDEsMSkpIHsKKwkJICAgIGRlYnVnKEYxMTAsInNjYW5maWxlIDgtYml0IEJJTiBjb21wcmVzc2Vk IixuYW1lLDApOworCQkgICAgcmMgPSBGVF9CSU47CisJCSAgICBnb3RvIHhzY2FuZmlsZTsKKwkJ fQorCSAgICB9CisJfQorCS8qIFNtYWxsIGZpbGUgLSBub3QgZW5vdWdoIGV2aWRlbmNlIHVubGVz cyAuLi4gKi8KKworCWlmIChieXRlcyA8IDEwMCkgeworCSAgICBpZiAob2RkemVybyAhPSAwICYm IGV2ZW56ZXJvICE9IDApIHsKKwkJZGVidWcoRjEwMCwic2NhbmZpbGUgc21hbGwgVUNTMiBkb3Vi dGZ1bCIsIiIsMCk7CisJCXJjID0gRlRfQklOOworCQlnb3RvIHhzY2FuZmlsZTsKKwkgICAgfSBl bHNlIGlmIChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0gMCkgeworCQlyYyA9IGVpZ2h0Yml0 ID8gRlRfOEJJVCA6IEZUXzdCSVQ7CisJICAgIH0KKwl9CisJZ290byB4c2NhbmZpbGU7CQkJLyog U2VlbXMgdG8gYmUgVUNTLTIgKi8KKyAgICB9CisKKy8qIElmIG5vbmUgb2YgdGhlIGFib3ZlLCBp dCdzIHByb2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KKworICAgIGlmICghZWlnaHRiaXQpIHsJCQkv KiBJdCdzIDctYml0ICovCisJaWYgKGMwY29udHJvbHMpIHsJCS8qIFRoaXMgd291bGQgYmUgc3Ry YW5nZSAqLworCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYgKHR4dGN6ID09IDApKSB7CisJCWRl YnVnKEYxMDAsInNjYW5maWxlIDctYml0IEJJTiAoYzBjb25pc28pIiwiIiwwKTsKKwkJcmMgPSBG VF9CSU47CisJICAgIH0gZWxzZSB7CisJCWRlYnVnKEYxMDAsInNjYW5maWxlIDctYml0IElTTzIw MjIgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwkJcmMgPSBGVF83QklUOworCSAgICB9CisJ fSBlbHNlIHsJCQkvKiA3LWJpdCB0ZXh0ICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5maWxlIDct Yml0IFRFWFQgKG5vIGMwY29udHJvbHMpIiwiIiwwKTsKKwkgICAgcmMgPSBGVF83QklUOworCX0K KyAgICB9IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0eHRjeikgewkvKiA4LWJpdCB0ZXh0ICovCisJ ZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwly YyA9IEZUXzhCSVQ7CisJdmFsID0gYzFjb250cm9scyA/IDEgOiAwOworICAgIH0gZWxzZSB7CQkJ CS8qIDgtYml0IGJpbmFyeSAqLworCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0IEJJTiAoYzBu b25pc28pIiwiIiwwKTsKKwlyYyA9IEZUX0JJTjsKKyAgICB9CisKKyNlbHNlICAvKiAhVU5JQ09E RSAqLworCisgICAgaWYgKGMwbm9uaXNvKSB7CisJZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQg QklOIChjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfQklOOworICAgIH0gZWxzZSBpZiAoZWln aHRiaXQpIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBURVhUIChubyBjMG5vbmlzbyki LCIiLDApOworCXJjID0gRlRfOEJJVDsKKwl2YWwgPSBjMWNvbnRyb2xzID8gMSA6IDA7CisgICAg fSBlbHNlIHsKKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBURVhUIChubyBjMG5vbmlzbyki LCIiLDApOworCXJjID0gRlRfN0JJVDsKKyAgICB9CisKKyNlbmRpZiAvKiBVTklDT0RFICovCisK KyAgeHNjYW5maWxlOgorICAgIGlmIChmbGFnKSAqZmxhZyA9IHZhbDsKKyAgICBkZWJ1ZyhGMTAx LCJzY2FuZmlsZSByZXN1bHQgICAgICIsIiIscmMpOworICAgIHJldHVybihyYyk7Cit9CisKKy8q CisgIHNjYW5zdHJpbmcgLSBsaWtlIHNjYW4gZmlsZSBidXQgZm9yIGEgc3RyaW5nLgorICBUaGlz IGlzIGp1c3QgYSBxdWljayBidXRjaGVyeSBvZiBzY2FuZmlsZSB3aXRob3V0IHRoaW5raW5nIHRv byBtdWNoLgorKi8KK2ludAorc2NhbnN0cmluZyhzKSBjaGFyICogczsgeworICAgIGludCB4LCB2 YWwgPSAtMSwgY291bnQgPSAwOwkJLyogV29ya2VycyAqLworICAgIGludCByYyA9IC0xOwkJCS8q IFJldHVybiBjb2RlICovCisgICAgaW50IHB2ID0gLTE7CQkJLyogUGF0dGVybi1tYXRjaCB2YWx1 ZSAqLworICAgIGludCBieXRlcyA9IDA7CQkJLyogVG90YWwgYnl0ZSBjb3VudCAqLworI2lmZGVm IFVOSUNPREUKKyAgICB1bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyogRmlyc3QgMiBmaWxlIGJ5dGVz IChmb3IgQk9NKSAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICBleHRlcm4gaW50IHBpcGVz ZW5kLCBmaWxlcGVlazsKKworICAgIHJlZ2lzdGVyIGludCBpOwkJCS8qIExvb3AgY29udHJvbCAq LworICAgIGludCByZWFkc2l6ZSA9IDA7CQkJLyogSG93IG11Y2ggdG8gcmVhZCAqLworICAgIGlu dCBlaWdodGJpdCA9IDA7CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdpdGggOHRoIGJpdCBvbiAqLwor ICAgIGludCBjMGNvbnRyb2xzID0gMDsJCQkvKiBDMCBub24tdGV4dCBjb250cm9sLWNoYXIgY291 bnRlciAqLworICAgIGludCBjMG5vbmlzbyA9IDA7CQkJLyogQzAgbm9uLUlTTyBjb250cm9sLWNo YXIgY291bnRlciAqLworICAgIGludCBjMWNvbnRyb2xzID0gMDsJCQkvKiBDMSBjb250cm9sLWNo YXJhY3RlciBjb3VudGVyICovCisgICAgdW5zaWduZWQgaW50IGM7CQkJLyogQ3VycmVudCBjaGFy YWN0ZXIgKi8KKyAgICBpbnQgcnVubWF4ID0gMDsJCQkvKiBMb25nZXN0IHJ1biBvZiAwIGJ5dGVz ICovCisgICAgaW50IHJ1bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAwIGJ5dGVzICovCisgICAgaW50 IHBjdHplcm8gPSAwOwkJCS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRlcyAqLworICAgIGludCB0eHRj eiA9IDA7CisKKyNpZmRlZiBVTklDT0RFCisgICAgaW50IG5vdHV0ZjggPSAwOwkJCS8qIE5vbnpl cm8gaWYgZGVmaW5pdGVseSBub3QgVVRGLTggKi8KKyAgICBpbnQgdXRmOHN0YXRlID0gMDsJCQkv KiBVVEYtOCByZWNvZ25pemVyIHN0YXRlICovCisgICAgaW50IG9kZHplcm8gPSAwOwkJCS8qIE51 bWJlciBvZiAwIGJ5dGVzIGluIG9kZCBwb3N0aW9ucyAqLworICAgIGludCBldmVuemVybyA9IDA7 CQkJLyogYW5kIGluIGV2ZW4gcG9zaXRpb25zICovCisgICAgaW50IGxmbnVsID0gMDsJCQkvKiBO dW1iZXIgb2YgPExGPjxOVUw+IHNlcXVlbmNlcyAqLworICAgIGludCBjcmxmID0gMDsJCQkvKiBO dW1iZXIgb2YgPENSTEY+IHNlcXVlbmNlcyAqLworI2Vsc2UKKyAgICBpbnQgbm90dXRmOCA9IDE7 CisjZW5kaWYgLyogVU5JQ09ERSAqLworCisgICAgY2hhciAqIGJ1ZiA9IHM7CisgICAgaWYgKCFz KSBzID0gIiI7CisgICAgY291bnQgPSBzdHJsZW4ocyk7CisKKyNpZmRlZiBVTklDT0RFCisgICAg aWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiAxKSB7CisJaW50IGluY2xfY250ID0gMDsKKworCS8q IEZpcnN0IGxvb2sgZm9yIEJPTSAqLworCisJYzAgPSAodW5zaWduZWQpKCh1bnNpZ25lZClidWZb MF0mMHhGRik7IC8qIEZpcnN0IGZpbGUgYnl0ZSAqLworCWMxID0gKHVuc2lnbmVkKSgodW5zaWdu ZWQpYnVmWzFdJjB4RkYpOyAvKiBTZWNvbmQgYnl0ZSAqLworCisJaWYgKGMwID09IDB4RkUgJiYg YzEgPT0gMHhGRikgewkvKiBVQ1MtMiBCRSAqLworCSAgICByYyA9IEZUX1VDUzI7CisJICAgIHZh bCA9IDA7CisJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBCT00gQkUiLGNraXRvYSh2 YWwpLHJjKTsKKwkgICAgaW5jbF9jbnQrKzsKKwl9IGVsc2UgaWYgKGMwID09IDB4RkYgJiYgYzEg PT0gMHhGRSkgeyAvKiBVQ1MtMiBMRSAqLworCSAgICByYyA9IEZUX1VDUzI7CisJICAgIHZhbCA9 IDE7CisJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmcgVUNTMiBCT00gTEUiLGNraXRvYSh2YWwp LHJjKTsKKwkgICAgaW5jbF9jbnQrKzsKKwl9IGVsc2UgaWYgKGNvdW50ID4gMikgaWYgKGMwID09 IDB4RUYgJiYgYzEgPT0gMHhCQiAmJgorCQkgICAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMl0m MHhGRikgPT0gMHhCRikgeworCSAgICByYyA9IEZUX1VURjg7CisJICAgIGRlYnVnKEYxMTEsInNj YW5zdHJpbmcgVVRGOCBCT00iLGNraXRvYSh2YWwpLHJjKTsKKwkgICAgaW5jbF9jbnQrKzsKKwl9 CisJaWYgKGluY2xfY250KSB7CQkvKiBIYXZlIEJPTSAqLworCSAgICBieXRlcyArPSBjb3VudDsK KwkgICAgZ290byB4c2NhbnN0cmluZzsKKwl9CisgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8K KworICAgIGJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVzIHJlYWQgKi8KKworICAgIGZv ciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CS8qIEZvciBlYWNoIGJ5dGUuLi4gKi8KKwljID0g KHVuc2lnbmVkKWJ1ZltpXTsJLyogRm9yIGVhc2Ugb2YgcmVmZXJlbmNlICovCisJaWYgKCFjKSB7 CQkJLyogWmVybyBieXRlPyAqLworCSAgICBnb3RvIHhzY2Fuc3RyaW5nOwkvKiBOdWxsIHRlcm1p bmF0ZWQgc3RyaW5nICovCisJfQorCWlmICgoYyAmIDB4ODApID09IDApIHsJLyogV2UgaGF2ZSBh IDctYml0IGJ5dGUgKi8KKyNpZmRlZiBVTklDT0RFCisJICAgIGlmIChpID4gMCAmJiBjID09IDEw KSB7IC8qIExpbmVmZWVkICovCisJCWlmIChidWZbaS0xXSA9PSAwKSBsZm51bCsrOyAvKiBQcmVj ZWRlZCBieSBOVUwgKi8KKwkJZWxzZSBpZiAoYnVmW2ktMV0gPT0gMTMpIGNybGYrKzsgLyogb3Ig YnkgQ1IuLi4gKi8KKwkgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkgICAgaWYgKGMgPCAn ICcpIHsJCS8qIENoZWNrIGZvciBDTyBjb250cm9scyAqLworCQlpZiAoYyAhPSBMRiAmJiBjICE9 IENSICYmIGMgIT0gSFQgJiYgYyAhPSBGRikgeworCQkgICAgYzBjb250cm9scysrOworCQkgICAg aWYgKGMgIT0gRVNDICYmIGMgIT0gU08gJiYgYyAhPSBTSSkKKwkJICAgICAgYzBub25pc28rKzsK KwkJfQorCQlpZiAoKGMgPT0gJ1wwMzInKQkvKiBDdHJsLVogKi8KKwkJICAgICkgeworCQkgICAg YzBjb250cm9scy0tOworCQkgICAgYzBub25pc28tLTsKKwkJfQorCSAgICB9CisjaWZkZWYgVU5J Q09ERQorCSAgICBpZiAoIW5vdHV0ZjggJiYgdXRmOHN0YXRlKSB7IC8qIEluIFVURi04IHNlcXVl bmNlPyAqLworCQl1dGY4c3RhdGUgPSAwOworCQlkZWJ1ZyhGMDAwLCJzY2Fuc3RyaW5nIiwiNy1i aXQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKKwkJbm90dXRmOCsrOwkJLyogVGhlbiBpdCdz IG5vdCBVVEYtOCAqLworCQljb250aW51ZTsKKwkgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8K Kwl9IGVsc2UgewkJCS8qIFdlIGhhdmUgYW4gOC1iaXQgYnl0ZSAqLworCSAgICBlaWdodGJpdCsr OwkJLyogQ291bnQgaXQgKi8KKwkgICAgaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhBMCkgLyogQ2hl Y2sgZm9yIEMxIGNvbnRyb2xzICovCisJICAgICAgYzFjb250cm9scysrOworI2lmZGVmIFVOSUNP REUKKwkgICAgaWYgKCFub3R1dGY4KSB7CQkvKiBJZiBpdCBtaWdodCBzdGlsbCBiZSBVVEY4Li4u ICovCisJCXN3aXRjaCAodXRmOHN0YXRlKSB7IC8qIEVudGVyIHRoZSBVVEYtOCBzdGF0ZSBtYWNo aW5lICovCisJCSAgY2FzZSAwOgkJIC8qIEZpcnN0IGJ5dGUuLi4gKi8KKwkJICAgIGlmICgoYyAm IDB4RTApID09IDB4QzApIHsgLyogVGVsbHMgbnVtYmVyIG9mICovCisJCQl1dGY4c3RhdGUgPSAx OyAgICAgICAgLyogc3Vic2VxdWVudCBieXRlcyAqLworCQkgICAgfSBlbHNlIGlmICgoYyAmIDB4 RjApID09IDB4RTApIHsKKwkJCXV0ZjhzdGF0ZSA9IDI7CisJCSAgICB9IGVsc2UgaWYgKChjICYg MHhGOCkgPT0gMHhGMCkgeworCQkJdXRmOHN0YXRlID0gMzsKKwkJICAgIH0gZWxzZSB7CisJCQlu b3R1dGY4Kys7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJICBjYXNlIDE6CQkvKiBTdWJzZXF1 ZW50IGJ5dGUgKi8KKwkJICBjYXNlIDI6CisJCSAgY2FzZSAzOgorCQkgICAgaWYgKChjICYgMHhD MCkgIT0gMHg4MCkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggMTAgKi8KKwkJCWRlYnVnKEYwMDAsInNj YW5zdHJpbmciLAorCQkJICAgICAgImJhZCBieXRlIGluIFVURjggc2VxdWVuY2UiLGMpOworCQkJ bm90dXRmOCsrOworCQkJYnJlYWs7CisJCSAgICB9CisJCSAgICB1dGY4c3RhdGUtLTsJLyogR29v ZCwgb25lIGxlc3MgaW4gdGhpcyBzZXF1ZW5jZSAqLworCQkgICAgYnJlYWs7CisJCSAgZGVmYXVs dDoJCS8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwkJICAgIGRlYnVnKEYxMTEsInNjYW5zdHJpbmci LCJiYWQgVVRGOCBzdGF0ZSIsdXRmOHN0YXRlKTsKKwkJICAgIG5vdHV0ZjgrKzsKKwkJfQorCSAg ICB9CisjZW5kaWYgLyogVU5JQ09ERSAqLworCX0KKyAgICB9CisgICAgaWYgKGJ5dGVzID09IDAp CQkJLyogSWYgbm90aGluZyB3YXMgcmVhZCAqLworICAgICAgcmV0dXJuKC0xKTsJCQkvKiB3ZSdy ZSBkb25lLiAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIGlmIChieXRlcyA+IDEwMCkJCQkvKiBC eXRlcyBpcyBub3QgMCAqLworICAgICAgcGN0emVybyA9IChldmVuemVybyArIG9kZHplcm8pIC8g KGJ5dGVzIC8gMTAwKTsKKyAgICBlbHNlCisgICAgICBwY3R6ZXJvID0gKChldmVuemVybyArIG9k ZHplcm8pICogMTAwKSAvIGJ5dGVzOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworI2lmZGVmIFVO SUNPREUKKyAgICB4ID0gZWlnaHRiaXQgPyBieXRlcyAvIDIwIDogYnl0ZXMgLyA0OyAvKiBGb3Ig VUNTLTIuLi4gKi8KKworICAgIGlmIChydW5tYXggPiAyKSB7CQkJLyogRmlsZSBoYXMgcnVuIG9m IG1vcmUgdGhhbiAyIE5VTHMgKi8KKwlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIEJJTiBydW5tYXgi LCIiLDApOworCXJjID0gRlRfQklOOwkJCS8qIHNvIGl0IGNhbid0IGJlIGFueSBraW5kIG9mIHRl eHQuICovCisJZ290byB4c2NhbnN0cmluZzsKKworICAgIH0gZWxzZSBpZiAocmMgPT0gRlRfVUNT MiB8fCAocmMgPT0gRlRfVVRGOCAmJiBydW5tYXggPT0gMCkpIHsKKwlnb3RvIHhzY2Fuc3RyaW5n OwkJCS8qIEZpbGUgc3RhcnRzIHdpdGggYSBCT00gKi8KKworICAgIH0gZWxzZSBpZiAoZWlnaHRi aXQgPiAwICYmICFub3R1dGY4KSB7IC8qIEZpbGUgaGFzIDgtYml0IGRhdGEgKi8KKwlpZiAocnVu bWF4ID4gMCkgewkJICAgLyogYW5kIHJ1bnMgb2YgTlVMcyAqLworCSAgICBkZWJ1ZyhGMTAwLCJz Y2Fuc3RyaW5nIEJJTiAobm5VVEY4KSBydW5tYXgiLCIiLDApOworCSAgICByYyA9IEZUX0JJTjsJ CSAgIC8qIFVURi04IGRvZXNuJ3QgaGF2ZSBOVUxzICovCisJfSBlbHNlIHsJCQkgICAvKiBObyBO VUxzICovCisJICAgIGRlYnVnKEYxMDAsInNjYW5zdHJpbmcgVVRGOCAobm5VVEY4ICsgcnVubWF4 ID09IDApIiwiIiwwKTsKKwkgICAgcmMgPSBGVF9VVEY4OwkJICAgLyogYW5kIG5vdCBub3QgVVRG LTgsIHNvIGlzIFVURi04ICovCisJfQorCWdvdG8geHNjYW5zdHJpbmc7CisgICAgfQorLyoKKyAg SXQgc2VlbXMgdG8gYmUgVUNTLTIgYnV0IGxldCdzIGJlIG1vcmUgY2VydGFpbiBzaW5jZSB0aGVy ZSBpcyBubyBCT00uLi4KKyAgSWYgdGhlIG51bWJlciBvZiA3LSBhbmQgOC1iaXQgY2hhcmFjdGVy cyBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsLCBpdCBtaWdodAorICBiZSBhIGNvbXByZXNzZWQgZmls ZS4gIEluIHRoaXMgY2FzZSB3ZSBkZWNpZGUgYmFzZWQgb24gdGhlIG5hbWUuCisqLworICAgIGlm IChyYyA9PSBGVF9VQ1MyKSB7CisJaWYgKGJ5dGVzIDwgMTAwKSB7CisJICAgIGlmIChvZGR6ZXJv ICE9IDAgJiYgZXZlbnplcm8gIT0gMCkgeworCQlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIHNtYWxs IFVDUzIgZG91YnRmdWwiLCIiLDApOworCQlyYyA9IEZUX0JJTjsKKwkJZ290byB4c2NhbnN0cmlu ZzsKKwkgICAgfSBlbHNlIGlmIChvZGR6ZXJvID09IDAgJiYgZXZlbnplcm8gPT0gMCkgeworCQly YyA9IGVpZ2h0Yml0ID8gRlRfOEJJVCA6IEZUXzdCSVQ7CisJICAgIH0KKwl9CisJZ290byB4c2Nh bnN0cmluZzsJCQkvKiBTZWVtcyB0byBiZSBVQ1MtMiAqLworICAgIH0KKworLyogSWYgbm9uZSBv ZiB0aGUgYWJvdmUsIGl0J3MgcHJvYmFibHkgbm90IFVuaWNvZGUuICAqLworCisgICAgaWYgKCFl aWdodGJpdCkgewkJCS8qIEl0J3MgNy1iaXQgKi8KKwlpZiAoYzBjb250cm9scykgewkJLyogVGhp cyB3b3VsZCBiZSBzdHJhbmdlICovCisJICAgIGlmICgoYzBub25pc28gPiAwKSAmJiAodHh0Y3og PT0gMCkpIHsKKwkJZGVidWcoRjEwMCwic2NhbnN0cmluZyA3LWJpdCBCSU4gKGMwY29uaXNvKSIs IiIsMCk7CisJCXJjID0gRlRfQklOOworCSAgICB9IGVsc2UgeworCQlkZWJ1ZyhGMTAwLCJzY2Fu c3RyaW5nIDctYml0IElTTzIwMjIgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwkJcmMgPSBG VF83QklUOworCSAgICB9CisJfSBlbHNlIHsJCQkvKiA3LWJpdCB0ZXh0ICovCisJICAgIGRlYnVn KEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgVEVYVCAobm8gYzBjb250cm9scykiLCIiLDApOworCSAg ICByYyA9IEZUXzdCSVQ7CisJfQorICAgIH0gZWxzZSBpZiAoIWMwbm9uaXNvIHx8IHR4dGN6KSB7 CS8qIDgtYml0IHRleHQgKi8KKwlkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDgtYml0IFRFWFQgKG5v IGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF84QklUOworCXZhbCA9IGMxY29udHJvbHMgPyAx IDogMDsKKyAgICB9IGVsc2UgewkJCQkvKiA4LWJpdCBiaW5hcnkgKi8KKwlkZWJ1ZyhGMTAwLCJz Y2Fuc3RyaW5nIDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUX0JJTjsKKyAg ICB9CisKKyNlbHNlICAvKiAhVU5JQ09ERSAqLworCisgICAgaWYgKGMwbm9uaXNvKSB7CisJZGVi dWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBG VF9CSU47CisgICAgfSBlbHNlIGlmIChlaWdodGJpdCkgeworCWRlYnVnKEYxMDAsInNjYW5zdHJp bmcgOC1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUXzhCSVQ7CisJdmFs ID0gYzFjb250cm9scyA/IDEgOiAwOworICAgIH0gZWxzZSB7CisJZGVidWcoRjEwMCwic2NhbnN0 cmluZyA3LWJpdCBURVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfN0JJVDsKKyAg ICB9CisKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyAgeHNjYW5zdHJpbmc6CisgICAgZGVidWco RjEwMSwic2NhbnN0cmluZyByZXN1bHQgICAgICIsIiIscmMpOworICAgIHJldHVybihyYyk7Cit9 CisKKworCisvKiAgRiBJIEwgRSBTIEUgTCBFIEMgVCAgLS0gIFNlbGVjdCB0aGlzIGZpbGUgZm9y IHNlbmRpbmcgICovCisKK2ludAorI2lmZGVmIENLX0FOU0lDCitmaWxlc2VsZWN0KAorICAgIGNo YXIgKmYsIGNoYXIgKnNhLCBjaGFyICpzYiwgY2hhciAqc25hLCBjaGFyICpzbmIsCisgICAgQ0tf T0ZGX1QgbWluc2l6LCBDS19PRkZfVCBtYXhzaXosCisgICAgaW50IG5idSwgaW50IG54bGlzdCwK KyAgICBjaGFyICoqIHhsaXN0CispCisjZWxzZQorZmlsZXNlbGVjdChmLHNhLHNiLHNuYSxzbmIs bWluc2l6LG1heHNpeixuYnUsbnhsaXN0LHhsaXN0KQorIGNoYXIgKmYsKnNhLCpzYiwqc25hLCpz bmI7IENLX09GRl9UIG1pbnNpeixtYXhzaXo7CisgaW50IG5idSxueGxpc3Q7IGNoYXIgKiogeGxp c3Q7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGZpbGVzZWxlY3QgKi8geworICAgIGNoYXIg KmZkYXRlOworICAgIGludCBuOworICAgIENLX09GRl9UIHo7CisKKyAgICBkZWJ1ZyhGMTExLCJm aWxlc2VsZWN0IG1pbnNpeiIsY2tmc3RvYShtaW5zaXopLG1pbnNpeik7CisgICAgZGVidWcoRjEx MSwiZmlsZXNlbGVjdCBtYXhzaXoiLGNrZnN0b2EobWF4c2l6KSxtYXhzaXopOworICAgIGRlYnVn KEYxMTEsImZpbGVzZWxlY3QgKENLX09GRl9UKS0xIixja2ZzdG9hKChDS19PRkZfVCktMSksKENL X09GRl9UKS0xKTsKKworICAgIGlmICghc2EpIHNhID0gIiI7CisgICAgaWYgKCFzYikgc2IgPSAi IjsKKyAgICBpZiAoIXNuYSkgc25hID0gIiI7CisgICAgaWYgKCFzbmIpIHNuYiA9ICIiOworCisj aWZkZWYgQ0tTWU1MSU5LCisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChu b2xpbmtzKSB7CisJQ0tfT0ZGX1Qgeno7CisJenogPSB6Z2V0ZnMoZik7CisJZGVidWcoRjExMSwi ZmlsZXNlbGVjdCBOT0xJTktTIHpnZXRmcyIsZix6eik7CisJaWYgKHp6IDwgKENLX09GRl9UKTAp CisJICByZXR1cm4oMCk7CisJZGVidWcoRjExMSwiZmlsZXNlbGVjdCBOT0xJTktTIHpnZnNfbGlu ayIsZix6Z2ZzX2xpbmspOworCWlmICh6Z2ZzX2xpbmspCisJICByZXR1cm4oMCk7CisgICAgfQor I2VuZGlmIC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIE5PSUNQICovCisjZW5kaWYgLyogQ0tTWU1M SU5LICovCisKKyAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IixmLDApOworICAgIGlmICgqc2Eg fHwgKnNiIHx8ICpzbmEgfHwgKnNuYikgeworCWZkYXRlID0gemZjZGF0KGYpOwkJLyogRGF0ZS90 aW1lIG9mIHRoaXMgZmlsZSAqLworCWlmICghZmRhdGUpIGZkYXRlID0gIiI7CisJbiA9IHN0cmxl bihmZGF0ZSk7CisJZGVidWcoRjExMSwiZmlsZXNlbGVjdCBmZGF0ZSIsZmRhdGUsbik7CisJaWYg KG4gIT0gMTcpCQkJLyogRmFpbGVkIHRvIGdldCBpdCAqLworCSAgcmV0dXJuKDEpOworCS8qIC9B RlRFUjogKi8KKwlpZiAoc2FbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNhKSA8PSAwKSkg eworCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNhIixzYSwwKTsKKwkgICAgLyogdGxvZyhG MTEwLCJTa2lwcGluZyAodG9vIG9sZCkiLGYsMCk7ICovCisJICAgIHJldHVybigwKTsKKwl9CisJ LyogL0JFRk9SRTogKi8KKwlpZiAoc2JbMF0gJiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNiKSA+ PSAwKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNiIixzYiwwKTsKKwkgICAgLyog dGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7ICovCisJICAgIHJldHVybigwKTsK Kwl9CisJLyogL05PVC1BRlRFUjogKi8KKwlpZiAoc25hWzBdICYmIChzdHJjbXAoZmRhdGUsKGNo YXIgKilzbmEpID4gMCkpIHsKKwkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzbmEiLHNuYSww KTsKKwkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIG5ldykiLGYsMCk7ICovCisJICAg IHJldHVybigwKTsKKwl9CisJLyogL05PVC1CRUZPUkU6ICovCisJaWYgKHNuYlswXSAmJiAoc3Ry Y21wKGZkYXRlLChjaGFyICopc25iKSA8IDApKSB7CisJICAgIGRlYnVnKEYxMTAsImZpbGVzZWxl Y3Qgc25iIixzbmIsMCk7CisJICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBvbGQpIixm LDApOyAqLworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0KKyAgICAvKiBTbWFsbGVyIG9yIGxh cmdlciAqLworICAgIGlmIChtaW5zaXogPiAoQ0tfT0ZGX1QpLTEgfHwgbWF4c2l6ID4gKENLX09G Rl9UKS0xKSB7CisJeiA9IHpjaGtpKGYpOwkJCS8qIEdldCBzaXplICovCisJZGVidWcoRjEwMSwi ZmlsZXNlbGVjdCBmaWxlc2l6ZSIsIiIseik7CisJaWYgKHogPCAoQ0tfT0ZGX1QpMCkKKwkgIHJl dHVybigxKTsKKwlpZiAoKG1pbnNpeiA+IChDS19PRkZfVCktMSkgJiYgKHogPj0gbWluc2l6KSkg eworCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1pbnNpeiBza2lwcGluZyIsZixtaW5zaXop OworCSAgICAvKiB0bG9nKEYxMTEsIlNraXBwaW5nICh0b28gYmlnKSIsZix6KTsgKi8KKwkgICAg cmV0dXJuKDApOworCX0KKwlpZiAoKG1heHNpeiA+IChDS19PRkZfVCktMSkgJiYgKHogPD0gbWF4 c2l6KSkgeworCSAgICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IG1heHNpeiBza2lwcGluZyIsZixt YXhzaXopOworCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28gc21hbGwpIixmLDApOyAq LworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0KKyAgICBpZiAobmJ1KSB7CQkJCS8qIFNraXBw aW5nIGJhY2t1cCBmaWxlcz8gKi8KKwlpZiAoY2ttYXRjaCgKKyNpZmRlZiBDS1JFR0VYCisJCSAg ICAiKi5+WzAtOV0qfiIJLyogTm90IHBlcmZlY3QgYnV0IGNsb3NlIGVub3VnaC4gKi8KKyNlbHNl CisJCSAgICAiKi5+Kn4iCQkvKiBMZXNzIGNsb3NlLiAqLworI2VuZGlmIC8qIENLUkVHRVggKi8K KwkJICAgICxmLGZpbGVjYXNlLDEpKSB7CisJICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2tp cHBpbmcgYmFja3VwIixmLDApOworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0KKyAgICBmb3Ig KG4gPSAwOyB4bGlzdCAmJiBuIDwgbnhsaXN0OyBuKyspIHsKKwlpZiAoIXhsaXN0W25dKSB7CisJ ICAgIGRlYnVnKEYxMDEsImZpbGVzZWxlY3QgeGxpc3QgZW1wdHkiLDAsbik7CisJICAgIGJyZWFr OworCX0KKwlpZiAoY2ttYXRjaCh4bGlzdFtuXSxmLGZpbGVjYXNlLDEpKSB7CisJICAgIGRlYnVn KEYxMTEsImZpbGVzZWxlY3QgeGxpc3QiLHhsaXN0W25dLG4pOworCSAgICBkZWJ1ZyhGMTEwLCJm aWxlc2VsZWN0IHNraXBwaW5nIixmLDApOworCSAgICByZXR1cm4oMCk7CisJfQorICAgIH0KKyAg ICBpZiAoeGZpbGV0eXBlID4gLTEpIHsKKwluID0gc2NhbmZpbGUoZixOVUxMLG5zY2FuZmlsZSk7 CisJaWYgKG4gPCAwKSB7CisJICAgIG4gPSBiaW5hcnkgPyAxIDogMDsKKwl9IGVsc2UgeworCSAg ICBuID0gKG4gPT0gRlRfQklOKSA/IDEgOiAwOworCX0KKwlpZiAobiAhPSB4ZmlsZXR5cGUpCisJ ICByZXR1cm4oMCk7CisgICAgfQorICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc2VsZWN0aW5n IixmLDApOworICAgIHJldHVybigxKTsKK30KKworCisjaWZkZWYgVENQU09DS0VUCisjaWZkZWYg TlQKK2V4dGVybiBpbnQgV1NBU2FmZVRvQ2FuY2VsOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYg LyogVENQU09DS0VUICovCisKK1ZPSUQKK3NldGZsb3coKSB7CisgICAgZXh0ZXJuIGludCBmbG93 LCBhdXRvZmxvdywgbWRtdHlwLCBjeHR5cGUsIGN4Zmxvd1tdOworI2lmbmRlZiBOT0RJQUwKKyAg ICBleHRlcm4gaW50IGRpYWxjYXBhcywgZGlhbGZjOworICAgIGV4dGVybiBNRE1JTkYgKiBtb2Rl bXBbXTsKKyAgICBNRE1JTkYgKiBwID0gTlVMTDsKKyAgICBsb25nIGJpdHMgPSAwOworI2VuZGlm IC8qIE5PRElBTCAqLworCisgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBhdXRvZmxvdyIsIiIsYXV0 b2Zsb3cpOworCisvKiAjaWZkZWYgQ09NTUVOVCAqLworLyogV0hZIFdBUyBUSElTIENPTU1FTlRF RCBPVVQ/ICovCisgICAgaWYgKCFhdXRvZmxvdykgICAgICAgICAgICAgICAgICAgICAgLyogT25s eSBpZiBGTE9XIGlzIEFVVE8gKi8KKyAgICAgIHJldHVybjsKKy8qICNlbmRpZiAqLyAvKiBDT01N RU5UICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGxvY2FsIiwiIixsb2NhbCk7CisgICAg ZGVidWcoRjEwMSwic2V0ZmxvdyBuZXR3b3JrIiwiIixuZXR3b3JrKTsKKyAgICBkZWJ1ZyhGMTAx LCJzZXRmbG93IGN4dHlwZSIsIiIsY3h0eXBlKTsKKworI2lmZGVmIFROX0NPTVBPUlQKKyAgICBp ZiAobmV0d29yayAmJiBpc3RuY29tcG9ydCgpKSB7CisJZmxvdyA9IGN4Zmxvd1tDWFRfTU9ERU1d OworICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IFROX0NPTVBPUlQgZmxvdyIsIiIsZmxvdyk7 CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogVE5fQ09NUE9SVCAqLworCisgICAg aWYgKG5ldHdvcmsgfHwgIWxvY2FsIHx8IGN4dHlwZSA9PSBDWFRfRElSRUNUKSB7CisgICAgICAg IGZsb3cgPSBjeGZsb3dbY3h0eXBlXTsgICAgICAgICAgLyogU2V0IGFwcHJvcHJpYXRlIGZsb3cg Y29udHJvbCAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IGZsb3ciLCIiLGZsb3cpOwor ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjeHR5cGUgIT0gQ1hUX01PREVNKSAgICAg ICAgICAgIC8qIENvbm5lY3Rpb24gdHlwZSBzaG91bGQgYmUgbW9kZW0gKi8KKyAgICAgIHJldHVy bjsKKworI2lmbmRlZiBOT0RJQUwKKyAgICBiaXRzID0gZGlhbGNhcGFzOyAgICAgICAgICAgICAg ICAgICAvKiBDYXBhYmlsaXR5IGJpdHMgKi8KKyAgICBpZiAoIWJpdHMpIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBObyBiaXRzPyAqLworICAgICAgICBwID0gbW9kZW1wW21kbXR5cF07ICAg ICAgICAgICAgIC8qIExvb2sgaW4gbW9kZW0gaW5mbyBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgaWYg KHApCisgICAgICAgICAgYml0cyA9IHAtPmNhcGFzOworICAgIH0KKyAgICBpZiAoZGlhbGZjID09 IEZMT19BVVRPKSB7ICAgICAgICAgICAvKiBJZiBESUFMIGZsb3cgaXMgQVVUTyAqLworI2lmZGVm IENLX1JUU0NUUyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGNhbiBkbyBSVFMvQ1RT IGZsb3cgY29udHJvbCAqLworICAgICAgICBpZiAoYml0cyAmIENLRF9IVykgICAgICAgICAgICAg IC8qIGFuZCBtb2RlbSBjYW4gZG8gaXQgdG9vICovCisgICAgICAgICAgZmxvdyA9IEZMT19SVFND OyAgICAgICAgICAgICAgLyogdGhlbiBzd2l0Y2ggdG8gUlRTL0NUUyAqLworICAgICAgICBlbHNl ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSAqLworICAgICAgICAgIGZs b3cgPSBGTE9fWE9OWDsgICAgICAgICAgICAgIC8qIHVzZSBYb24vWG9mZi4gKi8KKyNlbHNlCisj aWZuZGVmIE5FWFQKKyNpZm5kZWYgSVJJWAorICAgICAgICBmbG93ID0gRkxPX1hPTlg7ICAgICAg ICAgICAgICAgIC8qIFVzZSBYb24vWG9mZi4gKi8KKyNlbmRpZiAvKiBJUklYICovCisjZW5kaWYg LyogTkVYVCAqLworI2VuZGlmIC8qIENLX1JUU0NUUyAqLworICAgIH0KKyNlbmRpZiAvKiBOT0RJ QUwgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzZXRmbG93IG1vZGVtIGZsb3ciLCIiLGZsb3cpOworICAg IHJldHVybjsKK30KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgQ0tfVFJJR0dFUgorCisvKiAg QSBVIFQgTyBFIFggSSBUIEMgSCBLICAtLSAgQ2hlY2sgZm9yIENPTk5FQ1QtbW9kZSB0cmlnZ2Vy IHN0cmluZyAgKi8KKy8qCisgIFJldHVybnMgLTEgaWYgdHJpZ2dlciBub3QgZm91bmQsIG9yIGVs c2UgdGhlIHRyaWdnZXIgaW5kZXgsIDAgb3IgZ3JlYXRlci4KKyAgKFJlcGxhY2Ugd2l0aCBmYW5j aWVyIGFuZCBtb3JlIGVmZmljaWVudCBtYXRjaGVyIGxhdGVyLi4uKQorICBOT1RFOiB0byBwcmV2 ZW50IHVubmVjZXNzYXJ5IGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQsIGNhbGwgdGhpcyB3YXk6CisK KyAgICB4ID0gdHRfdHJpZ2dlclswXSA/IGF1dG9leGl0Y2hrKGMpIDogLTE7CisKKyovCitpbnQK KyNpZmRlZiBDS19BTlNJQworYXV0b2V4aXRjaGsoQ0hBUiBjKQorI2Vsc2UKK2F1dG9leGl0Y2hr KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogYXV0b2V4aXRjaGsgKi8gewor ICAgIGV4dGVybiBDSEFSICogdHRfdHJtYXRjaFtdOworICAgIGV4dGVybiBjaGFyICogdHRfdHJp Z2dlcltdOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBUUklHR0VSUzsgaSsrKSB7 CisgICAgICAgIGlmICghdHRfdHJpZ2dlcltpXSkgeyAgICAgICAgICAgLyogTm8gbW9yZSB0cmln Z2VycyBpbiBsaXN0ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmICgq dHRfdHJpZ2dlcltpXSkgeworICAgICAgICAgICAgaWYgKCF0dF90cm1hdGNoW2ldKSAgICAgICAg IC8qIEp1c3Qgc3RhcnRpbmc/ICovCisgICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0gPSAoQ0hB UiAqKXR0X3RyaWdnZXJbaV07IC8qIFNldCBtYXRjaCBwb2ludGVyICovCisgICAgICAgICAgICBp ZiAoYyA9PSAqdHRfdHJtYXRjaFtpXSkgeyAgLyogQ29tcGFyZSB0aGlzIGNoYXJhY3RlciAqLwor ICAgICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0rKzsgICAgICAgIC8qIEl0IG1hdGNoZXMgKi8K KyAgICAgICAgICAgICAgICBpZiAoISp0dF90cm1hdGNoW2ldKSB7ICAvKiBFbmQgb2YgbWF0Y2gg c3RyaW5nPyAqLworICAgICAgICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldID0gKENIQVIgKikg dHRfdHJpZ2dlcltpXTsgLyogWWVzLCByZXdpbmQsICovCisgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMDEsImF1dG9leGl0Y2hrIix0dF90cmlnZ2VyW2ldLGkpOyAvKiBsb2csICovCisgICAg ICAgICAgICAgICAgICAgIHJldHVybihpKTsgICAgICAgICAgLyogYW5kIHJldHVybiBzdWNjZXNz ICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAg ICAgICAgIC8qIE5vIG1hdGNoICovCisgICAgICAgICAgICAgIHR0X3RybWF0Y2hbaV0gPSAoQ0hB UiAqKSB0dF90cmlnZ2VyW2ldOyAvKiBSZXdpbmQgbWF0Y2ggc3RyaW5nICovCisgICAgICAgIH0g LyogYW5kIGdvIG9uIHRoZSBuZXh0IG1hdGNoIHN0cmluZyAqLworICAgIH0KKyAgICByZXR1cm4o LTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtYXRjaCBmb3VuZCAqLworfQorI2Vu ZGlmIC8qIENLX1RSSUdHRVIgKi8KKworI2lmbmRlZiBOT1NIT1cKKy8qICBTIEggTyBNIEQgTSAg LS0gIFNob3cgbW9kZW0gc2lnbmFscyAgKi8KKworVk9JRAorc2hvbWRtKCkgeworLyoKKyAgTm90 ZSB1c2Ugb2YgIlxyXG4iIHRvIG1ha2Ugc3VyZSB0aGlzIHJlcG9ydCBwcmludHMgcmlnaHQsIGV2 ZW4gd2hlbgorICBjYWxsZWQgZHVyaW5nIENPTk5FQ1QgbW9kZS4KKyovCisgICAgaW50IHk7Cisg ICAgeSA9IHR0Z21kbSgpOworICAgIHN3aXRjaCAoeSkgeworICAgICAgY2FzZSAtMzogcHJpbnRm KAorICAgICAgICAgICAgICAgICAiTW9kZW0gc2lnbmFscyB1bmF2YWlsYWJsZSBpbiB0aGlzIHZl cnNpb24gb2YgS2VybWl0XHJcbiIpOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IC0yOiBwcmludGYoIk5vIG1vZGVtIGNvbnRyb2wgZm9yIHRoaXMgZGV2aWNlXHJcbiIpOyBicmVh azsKKyAgICAgIGNhc2UgLTE6IHByaW50ZigiTW9kZW0gc2lnbmFscyB1bmF2YWlsYWJsZVxyXG4i KTsgYnJlYWs7CisgICAgICBkZWZhdWx0OgorI2lmbmRlZiBNQUMKKyAgICAgICAgcHJpbnRmKAor ICAgICAgICAgICIgQ2FycmllciBEZXRlY3QgICAgICAoQ0QpOiAgJXNcclxuIiwoeSAmIEJNX0RD RCkgPyAiT24iOiAiT2ZmIik7CisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAiIERhdGFzZXQg UmVhZHkgICAgICAgKERTUik6ICVzXHJcbiIsKHkgJiBCTV9EU1IpID8gIk9uIjogIk9mZiIpOwor I2VuZGlmIC8qIE1BQyAqLworICAgICAgICBwcmludGYoCisgICAgICAgICAgIiBDbGVhciBUbyBT ZW5kICAgICAgIChDVFMpOiAlc1xyXG4iLCh5ICYgQk1fQ1RTKSA/ICJPbiI6ICJPZmYiKTsKKyNp Zm5kZWYgU1RSQVRVUworI2lmbmRlZiBNQUMKKyAgICAgICAgcHJpbnRmKAorICAgICAgICAgICIg UmluZyBJbmRpY2F0b3IgICAgICAoUkkpOiAgJXNcclxuIiwoeSAmIEJNX1JORykgPyAiT24iOiAi T2ZmIik7CisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAiIERh dGEgVGVybWluYWwgUmVhZHkgKERUUik6ICVzXHJcbiIsCisjaWZkZWYgTlQKKyAgICAgICAgICAi KHVua25vd24pIgorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgICAoeSAmIEJNX0RUUikgPyAiT24i OiAiT2ZmIgorI2VuZGlmIC8qIE5UICovCisgICAgICAgICAgKTsKKyNpZm5kZWYgTUFDCisgICAg ICAgIHByaW50ZigKKyAgICAgICAgICAiIFJlcXVlc3QgVG8gU2VuZCAgICAgKFJUUyk6ICVzXHJc biIsCisjaWZkZWYgTlQKKyAgICAgICAgICAiKHVua25vd24pIgorI2Vsc2UgLyogTlQgKi8KKyAg ICAgICAgICAoeSAmIEJNX1JUUykgPyAiT24iOiAiT2ZmIgorI2VuZGlmIC8qIE5UICovCisgICAg ICAgICAgKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisgICAgfQor I2lmZGVmIEJFVEFERUJVRworI2lmZGVmIENLX1RBUEkKKyAgICBpZiAodHR0YXBpICYmICF0YXBp cGFzcykgeworICAgICAgICBMUERFVkNGRyAgICAgICAgbHBEZXZDZmcgPSBOVUxMOworICAgICAg ICBMUENPTU1DT05GSUcgICAgbHBDb21tQ29uZmlnID0gTlVMTDsKKyAgICAgICAgTFBNT0RFTVNF VFRJTkdTIGxwTW9kZW1TZXR0aW5ncyA9IE5VTEw7CisgICAgICAgIERDQiAqICAgICAgICAgICBs cERDQiA9IE5VTEw7CisKKyAgICAgICAgaWYgKGNrdGFwaUdldE1vZGVtU2V0dGluZ3MoJmxwRGV2 Q2ZnLCZscE1vZGVtU2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmbHBDb21tQ29uZmlnLCZscERDQikpIHsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAg ICAgICAgICAgIGNrdGFwaURpc3BsYXlNb2RlbVNldHRpbmdzKGxwRGV2Q2ZnLGxwTW9kZW1TZXR0 aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwQ29tbUNvbmZp ZyxscERDQik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfVEFQSSAqLworI2VuZGlm IC8qIEJFVEFERUJVRyAqLworfQorI2VuZGlmIC8qIE5PU0hPVyAqLworI2VuZGlmIC8qIE5PTE9D QUwgKi8KKworI2lmbmRlZiBOT1hGRVIKKy8qICBTIEQgRSBCIFUgIC0tIFJlY29yZCBzcGFyIHJl c3VsdHMgaW4gZGVidWdnaW5nIGxvZyAgKi8KKworVk9JRAorc2RlYnUobGVuKSBpbnQgbGVuOyB7 CisgICAgZGVidWcoRjExMSwic3BhcjogZGF0YSIsKGNoYXIgKikgcmRhdGFwLGxlbik7CisgICAg ZGVidWcoRjEwMSwiIHNwc2l6ICIsIiIsIHNwc2l6KTsKKyAgICBkZWJ1ZyhGMTAxLCIgdGltaW50 IiwiIix0aW1pbnQpOworICAgIGRlYnVnKEYxMDEsIiBucGFkICAiLCIiLCAgbnBhZCk7CisgICAg ZGVidWcoRjEwMSwiIHBhZGNoICIsIiIsIHBhZGNoKTsKKyAgICBkZWJ1ZyhGMTAxLCIgc2VvbCAg IiwiIiwgIHNlb2wpOworICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIiLCAgY3RscSk7CisgICAg ZGVidWcoRjEwMSwiIGVicSAgICIsIiIsICAgZWJxKTsKKyAgICBkZWJ1ZyhGMTAxLCIgZWJxZmxn IiwiIixlYnFmbGcpOworICAgIGRlYnVnKEYxMDEsIiBiY3RyICAiLCIiLCAgYmN0cik7CisgICAg ZGVidWcoRjEwMSwiIHJwdHEgICIsIiIsICBycHRxKTsKKyAgICBkZWJ1ZyhGMTAxLCIgcnB0Zmxn IiwiIixycHRmbGcpOworICAgIGRlYnVnKEYxMDEsIiBsc2NhcHUiLCIiLGxzY2FwdSk7CisgICAg ZGVidWcoRjEwMSwiIGF0Y2FwdSIsIiIsYXRjYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIgbHBjYXB1 IiwiIixscGNhcHUpOworICAgIGRlYnVnKEYxMDEsIiBzd2NhcHUiLCIiLHN3Y2FwdSk7CisgICAg ZGVidWcoRjEwMSwiIHdzbG90biIsIiIsIHdzbG90bik7CisgICAgZGVidWcoRjEwMSwiIHdoYXRy dSIsIiIsIHdoYXRydSk7Cit9CisvKiAgUiBEIEUgQiBVIC0tIERlYnVnZ2luZyBkaXNwbGF5IG9m IHJwYXIoKSB2YWx1ZXMgICovCisKK1ZPSUQKK3JkZWJ1KGQsbGVuKSBDSEFSICpkOyBpbnQgbGVu OyB7CisgICAgZGVidWcoRjExMSwicnBhcjogZGF0YSIsZCxsZW4pOworICAgIGRlYnVnKEYxMDEs IiBycHNpeiAiLCIiLCB4dW5jaGFyKGRbMF0pKTsKKyAgICBkZWJ1ZyhGMTAxLCIgcnRpbW8gIiwi IiwgcnRpbW8pOworICAgIGRlYnVnKEYxMDEsIiBteXBhZG4iLCIiLG15cGFkbik7CisgICAgZGVi dWcoRjEwMSwiIG15cGFkYyIsIiIsbXlwYWRjKTsKKyAgICBkZWJ1ZyhGMTAxLCIgZW9sICAgIiwi IiwgICBlb2wpOworICAgIGRlYnVnKEYxMDEsIiBjdGxxICAiLCIiLCAgY3RscSk7CisgICAgZGVi dWcoRjEwMSwiIHNxICAgICIsIiIsICAgIHNxKTsKKyAgICBkZWJ1ZyhGMTAxLCIgZWJxICAgIiwi IiwgICBlYnEpOworICAgIGRlYnVnKEYxMDEsIiBlYnFmbGciLCIiLGVicWZsZyk7CisgICAgZGVi dWcoRjEwMSwiIGJjdHIgICIsIiIsICBiY3RyKTsKKyAgICBkZWJ1ZyhGMTAxLCIgcnB0cSAgIiwi IiwgIGRbOF0pOworICAgIGRlYnVnKEYxMDEsIiBycHRmbGciLCIiLHJwdGZsZyk7CisgICAgZGVi dWcoRjEwMSwiIGNhcGFzICIsIiIsIGNhcGFzKTsKKyAgICBkZWJ1ZyhGMTAxLCIgYml0cyAgIiwi IixkW2NhcGFzXSk7CisgICAgZGVidWcoRjEwMSwiIGxzY2FwdSIsIiIsbHNjYXB1KTsKKyAgICBk ZWJ1ZyhGMTAxLCIgYXRjYXB1IiwiIixhdGNhcHUpOworICAgIGRlYnVnKEYxMDEsIiBscGNhcHUi LCIiLGxwY2FwdSk7CisgICAgZGVidWcoRjEwMSwiIHN3Y2FwdSIsIiIsc3djYXB1KTsKKyAgICBk ZWJ1ZyhGMTAxLCIgd3Nsb3RyIiwiIiwgd3Nsb3RyKTsKKyAgICBkZWJ1ZyhGMTAxLCIgcnBzaXoo ZXh0ZW5kZWQpIiwiIixycHNpeik7Cit9CisKKyNpZmRlZiBDT01NRU5UCisvKiAgQyBIIEsgRSBS IFIgIC0tICBEZWNpZGUgd2hldGhlciB0byBleGl0IHVwb24gYSBwcm90b2NvbCBlcnJvciAgKi8K KworVk9JRAorY2hrZXJyKCkgeworICAgIGlmIChiYWNrZ3JkICYmICFzZXJ2ZXIpIGZhdGFsKCJQ cm90b2NvbCBlcnJvciIpOworfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRpZiAvKiBOT1hG RVIgKi8KKworLyogIEYgQSBUIEEgTCAgLS0gIEZhdGFsIGVycm9yIG1lc3NhZ2UgKi8KKworVk9J RAorZmF0YWwobXNnKSBjaGFyICptc2c7IHsKKyAgICBleHRlcm4gaW50IGluaXRmbGc7CisgICAg c3RhdGljIGludCBpbml0aW5nID0gMDsKKyAgICBpZiAoIW1zZykgbXNnID0gIiI7CisgICAgZGVi dWcoRjExMSwiZmF0YWwiLG1zZyxpbml0ZmxnKTsKKworICAgIGlmICghaW5pdGZsZykgewkJCS8q IElmIGNhbGxlZCBmcm9tIHByZXNjYW4gKi8KKwlpZiAoaW5pdGluZykJCQkvKiBvciBjYWxsZWQg ZnJvbSBzeXNpbml0KCkgKi8KKyAgICAgICAgICBleGl0KDI1Myk7CisJaW5pdGluZyA9IDE7CisJ c3lzaW5pdCgpOworICAgIH0KKworICAgIGRlYnVnKEYxMTEsImZhdGFsIixtc2cseGl0c3RhKTsK KyAgICB0bG9nKEYxMTAsIkZhdGFsOiIsbXNnLDBMKTsKKyNpZmRlZiBWTVMKKyAgICBpZiAoc3Ry bmNtcChtc2csIiVDS0VSTUlUIiw4KSkKKyAgICAgIGNvbm9sKCIlQ0tFUk1JVC1FLUZBVEFMLCAi KTsKKyAgICBjb25vbGwobXNnKTsKKyNlbHNlIC8qICFWTVMgKi8KKyAgICBjb25vbGwobXNnKTsK KyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBPUzIKKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKHhm cmJlbCkgeworICAgICAgICBibGVlcChCUF9GQUlMKTsKKyAgICAgICAgc2xlZXAoMSk7CisgICAg ICAgIGJsZWVwKEJQX0ZBSUwpOworICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2VuZGlm IC8qIE9TMiAqLworICAgIGRvZXhpdChCQURfRVhJVCx4aXRzdGEgfCAxKTsgICAgICAgIC8qIEV4 aXQgaW5kaWNhdGluZyBmYWlsdXJlICovCit9CisKKyNpZm5kZWYgTk9YRkVSCisvKiAgQiBMIEQg TCBFIE4gIC0tICBNYWtlIGxlbmd0aC1lbmNvZGVkIGNvcHkgb2Ygc3RyaW5nICAqLworCitjaGFy ICoKK2JsZGxlbihzdHIsZGVzdCkgY2hhciAqc3RyLCAqZGVzdDsgeworICAgIGludCBsZW47Cisg ICAgbGVuID0gKGludClzdHJsZW4oc3RyKTsKKyAgICBpZiAobGVuID4gOTQpCisgICAgICAqZGVz dCA9IFNQOworICAgIGVsc2UKKyAgICAgICpkZXN0ID0gKGNoYXIpIHRvY2hhcihsZW4pOworICAg IHN0cmNweShkZXN0KzEsc3RyKTsJCQkvKiBDaGVja2VkIGJlbG93IGluIHNldGdlbigpICovCisg ICAgcmV0dXJuKGRlc3QrbGVuKzEpOworfQorCisKKy8qICBTIEUgVCBHIEUgTiAgLS0gIENvbnN0 cnVjdCBhIGdlbmVyaWMgY29tbWFuZCAgKi8KKy8qCisgIENhbGwgd2l0aCBHZW5lcmljIGNvbW1h bmQgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRocmVlIHN0cmluZyBhcmd1bWVudHMuCisgIFRyYWls aW5nIHN0cmluZ3MgYXJlIGFsbG93ZWQgdG8gYmUgZW1wdHkgKCIiKS4gIEVhY2ggc3RyaW5nIGV4 Y2VwdCB0aGUgbGFzdAorICBub24tZW1wdHkgc3RyaW5nIG11c3QgYmUgbGVzcyB0aGFuIDk1IGNo YXJhY3RlcnMgbG9uZy4gIFRoZSBmaW5hbCBub25lbXB0eQorICBzdHJpbmcgaXMgYWxsb3dlZCB0 byBiZSBsb25nZXIuCisqLworQ0hBUgorI2lmZGVmIENLX0FOU0lDCitzZXRnZW4oY2hhciB0eXBl LCBjaGFyICogYXJnMSwgY2hhciAqIGFyZzIsIGNoYXIgKiBhcmczKQorI2Vsc2UKK3NldGdlbih0 eXBlLGFyZzEsYXJnMixhcmczKSBjaGFyIHR5cGUsICphcmcxLCAqYXJnMiwgKmFyZzM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNldGdlbiAqLyB7CisgICAgY2hhciAqdXBzdHIsICpjcDsK KyNpZmRlZiBEWU5BTUlDCisgICAgaWYgKCFjbWRzdHIpCisgICAgICBpZiAoIShjbWRzdHIgPSBt YWxsb2MoTUFYU1AgKyAxKSkpCisgICAgICAgIGZhdGFsKCJzZXRnZW46IGNhbid0IGFsbG9jYXRl IG1lbW9yeSIpOworI2VuZGlmIC8qIERZTkFNSUMgKi8KKworICAgIGNwID0gY21kc3RyOworICAg ICpjcCsrID0gdHlwZTsKKyAgICAqY3AgPSBOVUw7CisgICAgaWYgKCFhcmcxKSBhcmcxID0gIiI7 CisgICAgaWYgKCFhcmcyKSBhcmcyID0gIiI7CisgICAgaWYgKCFhcmczKSBhcmczID0gIiI7Cisg ICAgaWYgKCgoaW50KXN0cmxlbihhcmcxKSsoaW50KXN0cmxlbihhcmcyKSsoaW50KXN0cmxlbihh cmczKSs0KSA8IE1BWFNQKSB7CisJaWYgKCphcmcxICE9IE5VTCkgeworCSAgICB1cHN0ciA9IGJs ZGxlbihhcmcxLGNwKTsKKwkgICAgaWYgKCphcmcyICE9IE5VTCkgeworCQl1cHN0ciA9IGJsZGxl bihhcmcyLHVwc3RyKTsKKwkJaWYgKCphcmczICE9IE5VTCkgYmxkbGVuKGFyZzMsdXBzdHIpOwor CSAgICB9CisJfQorCWNtYXJnID0gY21kc3RyOworCWRlYnVnKEYxMTAsInNldGdlbiIsY21hcmcs MCk7CisJcmV0dXJuKCdnJyk7CisgICAgfQorICAgIHJldHVybignRScpOworfQorI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZuZGVmIE5PTVNFTkQKK3N0YXRpYyBjaGFyICptZ2J1ZnAgPSBOVUxM OworCisvKiAgRiBOIFAgQSBSIFMgRSAgLS0gICovCisKKy8qCisgIEFyZ3VtZW50IGlzIGEgY2hh cmFjdGVyIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIGZpbGVzcGVjcy4KKyAgVGhpcyBm dW5jdGlvbiBicmVha3MgdGhlIHN0cmluZyBhcGFydCBpbnRvIGFuIGFycmF5IG9mIHBvaW50ZXJz LCBvbmUKKyAgdG8gZWFjaCBmaWxlc3BlYywgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBmaWxl c3BlY3MuICBVc2VkIGJ5IHNlcnZlcgorICB3aGVuIGl0IHJlY2VpdmVzIGEgR0VUIGNvbW1hbmQg dG8gYWxsb3cgaXQgdG8gcHJvY2VzcyBtdWx0aXBsZSBmaWxlCisgIHNwZWNpZmljYXRpb25zIGlu IG9uZSB0cmFuc2FjdGlvbi4gIFNldHMgY21saXN0IHRvIHBvaW50IHRvIGEgbGlzdCBvZgorICBm aWxlIHBvaW50ZXJzLCBleGFjdGx5IGFzIGlmIHRoZXkgd2VyZSBjb21tYW5kIGxpbmUgYXJndW1l bnRzLgorCisgIFRoaXMgdmVyc2lvbiBvZiBmbnBhcnNlIHRyZWF0cyBzcGFjZXMgYXMgZmlsZW5h bWUgc2VwYXJhdG9ycy4gIElmIHlvdXIKKyAgb3BlcmF0aW5nIHN5c3RlbSBhbGxvd3Mgc3BhY2Vz IGluIGZpbGVuYW1lcywgeW91J2xsIG5lZWQgYSBkaWZmZXJlbnQKKyAgc2VwYXJhdG9yLgorCisg IFRoaXMgdmVyc2lvbiBvZiBmbnBhcnNlIG1hbGxvY3MgYSBzdHJpbmcgYnVmZmVyIHRvIGNvbnRh aW4gdGhlIG5hbWVzLiAgSXQKKyAgY2Fubm90IGFzc3VtZSB0aGF0IHRoZSBzdHJpbmcgdGhhdCBp cyBwb2ludGVkIHRvIGJ5IHRoZSBhcmd1bWVudCBpcyBzYWZlLgorKi8KK2ludAorZm5wYXJzZShz dHJpbmcpIGNoYXIgKnN0cmluZzsgeworICAgIGNoYXIgKnAsICpzLCAqcTsKKyAgICBpbnQgciA9 IDAsIHg7ICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gY29kZSAqLworI2lmZGVmIFJF Q1VSU0lWRQorICAgIGRlYnVnKEYxMTEsImZucGFyc2UiLHN0cmluZyxyZWN1cnNpdmUpOworI2Vu ZGlmIC8qIFJFQ1VSU0lWRSAqLworCisgICAgaWYgKG1nYnVmcCkgZnJlZShtZ2J1ZnApOyAgICAg ICAgICAgLyogRnJlZSB0aGlzIGZyb20gbGFzdCB0aW1lLiAqLworICAgIG1nYnVmcCA9IG1hbGxv YygoaW50KXN0cmxlbihzdHJpbmcpKzIpOworICAgIGlmICghbWdidWZwKSB7CisgICAgICAgIGRl YnVnKEYxMDAsImZucGFyc2UgbWFsbG9jIGVycm9yIiwiIiwwKTsKKyAgICAgICAgcmV0dXJuKDAp OworICAgIH0KKyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9TUEwKKyAgICBja3N0cm5jcHkoZnNw ZWMsc3RyaW5nLGZzcGVjbGVuKTsgICAvKiBNYWtlIGNvcHkgZm9yIFx2KGZpbGVzcGVjKSAqLwor I2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICBzID0gc3RyaW5nOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBzdHJpbmcgKi8KKyAgICBwID0gcSA9IG1n YnVmcDsgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludCB0byB0aGUgY29weSAqLworICAgIHIg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgb3VyIHJldHVy biBjb2RlICovCisgICAgd2hpbGUgKCpzID09IFNQIHx8ICpzID09IEhUKSAgICAgICAgLyogU2tp cCBsZWFkaW5nIHNwYWNlcyBhbmQgdGFicyAqLworICAgICAgcysrOworICAgIGZvciAoeCA9IHN0 cmxlbihzKTsgICAgICAgICAgICAgICAgIC8qIFN0cmlwIHRyYWlsaW5nIHNwYWNlcyAqLworICAg ICAgICAgKHggPiAxKSAmJiAoc1t4LTFdID09IFNQIHx8IHNbeC0xXSA9PSBIVCk7CisgICAgICAg ICB4LS0pCisgICAgICBzW3gtMV0gPSBOVUw7CisgICAgd2hpbGUgKDEpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTG9vcCB0aHJvdWdoIHJlc3Qgb2Ygc3RyaW5nICovCisgICAgICAgIGlm ICgqcyA9PSBDTURRKSB7ICAgICAgICAgICAgICAgLyogQmFja3NsYXNoIChxdW90ZSBjaGFyYWN0 ZXIpPyAqLworICAgICAgICAgICAgaWYgKCh4ID0geHhlc2MoJnMpKSA+IC0xKSB7IC8qIEdvIGlu dGVycHJldCBpdC4gKi8KKyAgICAgICAgICAgICAgICAqcSsrID0gKGNoYXIpIHg7ICAgICAgICAv KiBOdW1lcmljIGJhY2tzbGFzaCBjb2RlLCBvayAqLworICAgICAgICAgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgIC8qIEp1c3QgbGV0IGl0IHF1b3RlIG5leHQgY2hhciAqLworICAgICAg ICAgICAgICAgIHMrKzsgICAgICAgICAgICAgICAgICAgIC8qIGdldCBwYXN0IHRoZSBiYWNrc2xh c2ggKi8KKyAgICAgICAgICAgICAgICAqcSsrID0gKnMrKzsgICAgICAgICAgICAvKiBkZXBvc2l0 IG5leHQgY2hhciAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgIH0gZWxzZSBpZiAoKnMgPT0gU1AgfHwgKnMgPT0gTlVMKSB7IC8qIFVucXVvdGVkIHNwYWNl IG9yIE5VTD8gKi8KKyAgICAgICAgICAgICpxKysgPSBOVUw7ICAgICAgICAgICAgICAgICAvKiBF bmQgb2Ygb3V0cHV0IGZpbGVuYW1lLiAqLworICAgICAgICAgICAgbXNmaWxlc1tyXSA9IHA7ICAg ICAgICAgICAgIC8qIEFkZCB0aGlzIGZpbGVuYW1lIHRvIHRoZSBsaXN0ICovCisgICAgICAgICAg ICBkZWJ1ZyhGMTExLCJmbnBhcnNlIixtc2ZpbGVzW3JdLHIpOworICAgICAgICAgICAgcisrOyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IGl0ICovCisgICAgICAgICAgICBpZiAoKnMg PT0gTlVMKSBicmVhazsgICAgICAgLyogRW5kIG9mIHN0cmluZz8gKi8KKyAgICAgICAgICAgIHdo aWxlICgqcyA9PSBTUCkgcysrOyAgICAgICAvKiBTa2lwIHJlcGVhdGVkIHNwYWNlcyAqLworICAg ICAgICAgICAgcCA9IHE7ICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIG5leHQgbmFt ZSAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSAqcSsrID0gKnM7ICAg ICAgICAgICAgICAgLyogT3RoZXJ3aXNlIGNvcHkgdGhlIGNoYXJhY3RlciAqLworICAgICAgICBz Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5leHQgaW5wdXQgY2hhcmFjdGVyICov CisgICAgfQorICAgIGRlYnVnKEYxMDEsImZucGFyc2UgciIsIiIscik7CisgICAgbXNmaWxlc1ty XSA9ICIiOyAgICAgICAgICAgICAgICAgICAgLyogUHV0IGVtcHR5IHN0cmluZyBhdCBlbmQgb2Yg bGlzdCAqLworICAgIGNtbGlzdCA9IG1zZmlsZXM7CisgICAgcmV0dXJuKHIpOworfQorI2VuZGlm IC8qIE5PTVNFTkQgKi8KKworY2hhciAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGRiY2hyKCkgZm9yIERFQlVHIFNFU1NJT04gKi8KK2RiY2hyKGMpIGludCBjOyB7CisgICAg c3RhdGljIGNoYXIgc1s4XTsKKyAgICBjaGFyICpjcCA9IHM7CisKKyAgICBjICY9IDB4ZmY7Cisg ICAgaWYgKGMgJiAweDgwKSB7ICAgICAgICAgICAgICAgICAgICAgLyogOHRoIGJpdCBvbiAqLwor ICAgICAgICAqY3ArKyA9ICd+JzsKKyAgICAgICAgYyAmPSAweDdmOworICAgIH0KKyAgICBpZiAo YyA8IFNQKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGNoYXJhY3RlciAqLwor ICAgICAgICAqY3ArKyA9ICdeJzsKKyAgICAgICAgKmNwKysgPSAoY2hhcikgY3RsKGMpOworICAg IH0gZWxzZSBpZiAoYyA9PSBERUwpIHsKKyAgICAgICAgKmNwKysgPSAnXic7CisgICAgICAgICpj cCsrID0gJz8nOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBy aW50aW5nIGNoYXJhY3RlciAqLworICAgICAgICAqY3ArKyA9IChjaGFyKSBjOworICAgIH0KKyAg ICAqY3AgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGUgc3RyaW5n ICovCisgICAgY3AgPSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHBv aW50ZXIgdG8gaXQgKi8KKyAgICByZXR1cm4oY3ApOworfQorCisvKiAgQyBLIEggTyBTIFQgIC0t ICBHZXQgbmFtZSBvZiBsb2NhbCBob3N0ICh3aGVyZSBDLUtlcm1pdCBpcyBydW5uaW5nKSAgKi8K KworLyoKKyAgQ2FsbCB3aXRoIHBvaW50ZXIgdG8gYnVmZmVyIHRvIHB1dCBob3N0bmFtZSBpbiwg YW5kIGxlbmd0aCBvZiBidWZmZXIuCisgIENvcGllcyBob3N0bmFtZSBpbnRvIGJ1ZmZlciBvbiBz dWNjZXNzLCBwdXRzIG51bGwgc3RyaW5nIGluIGJ1ZmZlciBvbgorICBmYWlsdXJlLgorKi8KKyNp ZmRlZiBCU0Q0NAorI2RlZmluZSBCU0Q0CisjdW5kZWYgQVRUU1YKKyNlbmRpZiAvKiBCU0Q0NCAq LworCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZuZGVmIEJTRDQ0CisjaWZuZGVmIGFwb2xsbworI2lu Y2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYgLyogYXBvbGxvICovCisjZW5kaWYgLyogQlNE NDQgKi8KKyNlbHNlCisjaWZkZWYgQkVMTFYxMAorI2luY2x1ZGUgPHV0c25hbWUuaD4KKyNlbmRp ZiAvKiBCRUxMVjEwICovCisjZW5kaWYgLyogU1ZPUlBPU0lYKi8KKworI2lmZGVmIENLU1lTTE9H CitleHRlcm4gY2hhciB1aWRidWZbXSwgKiBjbGllbnRob3N0OworI2VuZGlmIC8qIENLU1lTTE9H ICovCisKK1ZPSUQKK2NraG9zdCh2dmJ1Zix2dmxlbikgY2hhciAqIHZ2YnVmOyBpbnQgdnZsZW47 IHsKKworI2lmbmRlZiBOT1BVU0gKKyAgICBleHRlcm4gaW50IG5vcHVzaDsKKyNpZm5kZWYgTk9T RVJWRVIKKyAgICBleHRlcm4gaW50IGVuX2hvczsKKyNlbmRpZiAvKiBOT1NFUlZFUiAqLworI2Vu ZGlmIC8qIE5PUFVTSCAqLworCisjaWZkZWYgcGRwMTEKKyAgICAqdnZidWYgPSBOVUw7CisjZWxz ZSAgLyogRXZlcnl0aGluZyBlbHNlIC0gcmVzdCBvZiB0aGlzIHJvdXRpbmUgKi8KKworICAgIGNo YXIgKmc7CisgICAgaW50IGhhdmVmdWxsID0gMDsKKyNpZmRlZiBWTVMKKyAgICBpbnQgeDsKKyNl bmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIFNWT1JQT1NJWAorI2lmbmRlZiBCU0Q0NAorI2lmbmRl ZiBfMzg2QlNECisjaWZuZGVmIEFQT0xMT1NSMTAKKyAgICBzdHJ1Y3QgdXRzbmFtZSBobmFtZTsK KyNlbmRpZiAvKiBBUE9MTE9TUjEwICovCisjZW5kaWYgLyogXzM4NkJTRCAqLworI2VuZGlmIC8q IEJTRDQ0ICovCisjZW5kaWYgLyogU1ZPUlBPU0lYICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAg ICBpbnQgYWMwID0gKGNoYXIgKikgdnZidWYsIGFjMSA9IC0xLCBhYzIgPSAwOworI2VuZGlmIC8q IGRhdGFnZW5lcmFsICovCisKKyNpZm5kZWYgTk9QVVNICisgICAgaWYgKGdldGVudigiQ0tfTk9Q VVNIIikpIHsgICAgICAgICAgLyogTm8gc2hlbGwgYWNjZXNzIGFsbG93ZWQgKi8KKyAgICAgICAg bm9wdXNoID0gMTsgICAgICAgICAgICAgICAgICAgICAvKiBvbiB0aGlzIGhvc3QuLi4gKi8KKyNp Zm5kZWYgTk9TRVJWRVIKKyAgICAgICAgZW5faG9zID0gMDsKKyNlbmRpZiAvKiBOT1NFUlZFUiAq LworICAgIH0KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworICAgICp2dmJ1ZiA9IE5VTDsgICAgICAg ICAgICAgICAgICAgICAgIC8qIEhvdyBsZXQncyBnZXQgb3VyIGhvc3QgbmFtZSAuLi4gKi8KKwor I2lmbmRlZiBCRUxMVjEwICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvZXMgbm90IGhhdmUg Z2V0aG9zdG5hbWUoKSAqLworI2lmbmRlZiBPWE9TCisjaWZkZWYgU1ZPUlBPU0lYCisjaWZkZWYg QVBPTExPU1IxMAorICAgIGNrc3RybmNweSh2dmJ1ZiwiQXBvbGxvIix2dmxlbik7CisjZWxzZQor I2lmZGVmIEJTRDQ0CisgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApCisgICAg ICAqdnZidWYgPSBOVUw7CisjZWxzZQorI2lmZGVmIF8zODZCU0QKKyAgICBpZiAoZ2V0aG9zdG5h bWUodnZidWYsdnZsZW4pIDwgMCkgKnZ2YnVmID0gTlVMOworI2Vsc2UKKyNpZmRlZiBRTlgKKyNp ZmRlZiBUQ1BTT0NLRVQKKyAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsdnZsZW4pIDwgMCkgKnZ2 YnVmID0gTlVMOworI2Vsc2UKKyAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKSBja3N0cm5jcHko dnZidWYsaG5hbWUubm9kZW5hbWUsdnZsZW4pOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworI2Vs c2UgLyogU1ZPUlBPU0lYIGJ1dCBub3QgXzM4NkJTRCBvciBCU0Q0NCAqLworI2lmZGVmIF9faWE2 NF9fCisgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5v ZGVuYW1lLHZ2bGVuKTsKKyNlbHNlCisgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgeworCWNo YXIgKiBwOworCXAgPSBobmFtZS5ub2RlbmFtZTsKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYg Tk9DS0dFVEZRSE9TVAorCWlmICghY2tzdHJjaHIocCwnLicpKQorCSAgcCA9IChjaGFyICopY2tn ZXRmcWhvc3RuYW1lKHApOworI2VuZGlmIC8qIE5PQ0tHRVRGUUhPU1QgKi8KKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKwlpZiAoIXApIHAgPSAiIjsKKwlpZiAoISpwKSBwID0gIih1bmtub3duKSI7 CisJY2tzdHJuY3B5KHZ2YnVmLHAsdnZsZW4pOworICAgIH0KKyNlbmRpZiAvKiBfX2lhNjRfXyAq LworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIF8zODZCU0QgKi8KKyNlbmRpZiAvKiBCU0Q0 NCAqLworI2VuZGlmIC8qIEFQT0xMT1NSMTAgKi8KKyNlbHNlIC8qICFTVk9SUE9TSVggKi8KKyNp ZmRlZiBCU0Q0CisgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApICp2dmJ1ZiA9 IE5VTDsKKyNlbHNlIC8qICFCU0Q0ICovCisjaWZkZWYgVk1TCisgICAgZyA9IGdldGVudigiU1lT JE5PREUiKTsKKyAgICBpZiAoZykgY2tzdHJuY3B5KHZ2YnVmLGcsdnZsZW4pOworICAgIHggPSAo aW50KXN0cmxlbih2dmJ1Zik7CisgICAgaWYgKHggPiAxICYmIHZ2YnVmW3gtMV0gPT0gJzonICYm IHZ2YnVmW3gtMl0gPT0gJzonKSB2dmJ1Zlt4LTJdID0gTlVMOworI2Vsc2UKKyNpZmRlZiBkYXRh Z2VuZXJhbAorICAgIGlmIChzeXMoJEhOQU1FLCZhYzAsJmFjMSwmYWMyKSA9PSAwKSAvKiBzdWNj ZXNzZnVsICovCisgICAgICAgIHZ2bGVuID0gYWMyICsgMTsgICAgICAgICAgICAgICAgLyogZW5o IC0gaGF2ZSB0byBhZGQgb25lICovCisjZWxzZQorI2lmZGVmIE9TMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIE9TLzIgKi8KKyAgICBnID0gb3MyX2dldGhvc3RuYW1lKCk7CisgICAg aWYgKGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKKyNlbHNlIC8qIE9TMiAqLworI2lmZGVm IE9TSworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBpZiAoZ2V0aG9zdG5hbWUodnZidWYsIHZ2 bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNlbmRpZiAv KiBPU0sgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2Vu ZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8K KyNlbHNlIC8qIE9YT1MgKi8KKyAgICAvKiBJZiBUQ1AvSVAgaXMgbm90IGluc3RhbGxlZCwgZ2V0 aG9zdG5hbWUoKSBmYWlscywgdXNlIHVuYW1lKCkgKi8KKyAgICBpZiAoZ2V0aG9zdG5hbWUodnZi dWYsdnZsZW4pIDwgMCkgeworICAgICAgICBpZiAodW5hbWUoJmhuYW1lKSA+IC0xKQorICAgICAg ICAgICAgY2tzdHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVuYW1lLHZ2bGVuKTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgKnZ2YnVmID0gTlVMOworICAgIH0KKyNlbmRpZiAvKiBPWE9TICovCisj ZW5kaWYgLyogQkVMTFYxMCAqLworICAgIGlmICgqdnZidWYgPT0gTlVMKSB7ICAgICAgICAgICAg ICAgIC8qIElmIGl0J3Mgc3RpbGwgZW1wdHkgKi8KKyAgICAgICAgZyA9IGdldGVudigiSE9TVCIp OyAgICAgICAgICAgICAvKiB0cnkgdGhpcyAqLworICAgICAgICBpZiAoZykgY2tzdHJuY3B5KHZ2 YnVmLGcsdnZsZW4pOworICAgIH0KKyAgICB2dmJ1Zlt2dmxlbi0xXSA9IE5VTDsgICAgICAgICAg ICAgICAvKiBNYWtlIHN1cmUgcmVzdWx0IGlzIHRlcm1pbmF0ZWQuICovCisjZW5kaWYgLyogcGRw MTEgKi8KK30KKyNpZmRlZiBCU0Q0NAorI3VuZGVmIEJTRDQKKyNkZWZpbmUgQVRUU1YKKyNlbmRp ZiAvKiBCU0Q0NCAqLworCisvKgorICBBIFMgSyBNIE8gUiBFICAtLSAgUG9vciBwZXJzb24ncyAi bW9yZSIuCisgIFJldHVybnMgMCBpZiBubyBtb3JlLCAxIGlmIG1vcmUgd2FudGVkLgorKi8KK2lu dAorYXNrbW9yZSgpIHsKKyAgICBjaGFyIGM7CisgICAgaW50IHJ2LCBjeDsKKyNpZmRlZiBJS1NE CisgICAgZXh0ZXJuIGludCB0aW1lbGltaXQ7CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIElL U0RDT05GCisgICAgZXh0ZXJuIGludCBpa3NkY2Y7CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKyNp ZmRlZiBDS19BUEMKKyAgICBleHRlcm4gaW50IGFwY3N0YXR1cywgYXBjYWN0aXZlOworI2VuZGlm IC8qIENLX0FQQyAqLworCisjaWZkZWYgTk9JQ1AKKyAgICByZXR1cm4oMSk7CisjZWxzZQorICAg IGlmICgheGFza21vcmUpCisgICAgICByZXR1cm4oMSk7CisjaWZkZWYgSUtTRENPTkYKKyAgICBp ZiAoaW5zZXJ2ZXIgJiYgIWlrc2RjZikKKyAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBJS1NE Q09ORiAqLworI2lmZGVmIENLX0FQQworICAgIGlmIChhcGNhY3RpdmUgPT0gQVBDX0xPQ0FMIHx8 CisgICAgICAgIChhcGNhY3RpdmUgPT0gQVBDX1JFTU9URSAmJiAoYXBjc3RhdHVzICYgQVBDX05P SU5QKSkpCisgICAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKyNpZmRlZiBW TVMKKyAgICBpZiAoYmF0Y2gpCisgICAgICByZXR1cm4oMSk7CisjZWxzZQorI2lmZGVmIFVOSVgK KyAgICBpZiAoYmFja2dyZCkKKyAgICAgIHJldHVybigxKTsKKyNlbmRpZiAvKiBVTklYICovCisj ZW5kaWYgLyogVk1TICovCisKKyNpZm5kZWYgVk1TCisgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsg ICAgICAgICAgICAgICAgLyogRm9yY2UgQ0JSRUFLIG1vZGUuICovCisjZW5kaWYgLyogVk1TICov CisKKyAgICBydiA9IC0xOworICAgIHdoaWxlIChydiA8IDApIHsKKyNpZm5kZWYgT1MyCisgICAg ICAgIHByaW50ZigibW9yZT8gIik7CisjaWZkZWYgVU5JWAorI2lmZGVmIE5PU0VUQlVGCisgICAg ICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE5PU0VUQlVGICovCisjZW5kaWYgLyogVU5J WCAqLworI2Vsc2UKKyAgICAgICAgcHJpbnRmKCJtb3JlPyAiKTsKKyAgICAgICAgZmZsdXNoKHN0 ZG91dCk7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBJS1NECisgICAgICAgIGlmIChpbnNl cnZlcikgeworICAgICAgICAgICAgY3ggPSBjbWRnZXRjKHRpbWVsaW1pdCk7CisgICAgICAgICAg ICBpZiAoY3ggPCAtMSAmJiB0aW1lbGltaXQpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxu P0lLUyBpZGxlIHRpbWVvdXQgLSBHb29kYnllLlxuIik7CisgICAgICAgICAgICAgICAgZG9leGl0 KEdPT0RfRVhJVCwwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY3ggPT0gLTEpIHsJLyogQ29u bmVjdGlvbiBsb3N0ICovCisgICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDApOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYyA9IChjaGFyKSBjeDsKKyAgICAgICAgfSBlbHNlIHsK KyNlbmRpZiAvKiBJS1NEICovCisjaWZkZWYgVk1TCisJICAgIGNvbmJpbigoY2hhcillc2NhcGUp OwkvKiBQcm90ZWN0IGFnYWluc3QgQ3RybC1aICovCisJICAgIGN4ID0gY29uaW5jKDApOworCSAg ICBjb25jYigoY2hhcillc2NhcGUpOworI2Vsc2UKKwkgICAgY3ggPSBjbWRnZXRjKDApOworI2Vu ZGlmIC8qIFZNUyAqLworCSAgICBkZWJ1ZyhGMTAxLCJhc2ttb3JlIGNtZGdldGMiLCIiLGN4KTsK KwkgICAgaWYgKGN4ID09IEVPRikgeworCQlkZWJ1ZyhGMTAwLCJhc2ttb3JlIEVPRiIsIiIsMCk7 CisjaWZkZWYgVk1TCisJCWMgPSAnXDAzMic7CisjZWxzZQorCQljID0gJ24nOworI2VuZGlmIC8q IFZNUyAqLworCSAgICB9IGVsc2UgeworCQljID0gKGNoYXIpY3g7CisJICAgIH0KKwkgICAgZGVi dWcoRjEwMSwiYXNrbW9yZSBjIiwiIixjKTsKKworI2lmZGVmIElLU0QKKwl9CisjZW5kaWYgLyog SUtTRCAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAvKiBZZXMgKi8KKwkgIGNh c2UgJ3AnOiBjYXNlICdQJzogY2FzZSAnZyc6IGNhc2UgJ0cnOiAvKiBQcm9jZWVkIG9yIEdvICov CisJICAgIHhhc2ttb3JlID0gMDsKKwkgICAgLyogZmFsbCB0aHJ1IG9uIHB1cnBvc2UgKi8KKwor ICAgICAgICAgIGNhc2UgU1A6IGNhc2UgJ3knOiBjYXNlICdZJzogY2FzZSAwMTI6ICBjYXNlIDAx NToKKyNpZmRlZiBPU0sKKyAgICAgICAgICAgIHdyaXRlKDEsICJcMDE1ICAgICAgXDAxNSIsIHNp emVvZiAiXDAxNSAgICAgIFwwMTUiIC0gMSk7CisjZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJc MDE1ICAgICAgXDAxNSIpOworI2VuZGlmIC8qIE9TSyAqLworICAgICAgICAgICAgcnYgPSAxOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgLyogTm8gKi8KKyAgICAgICAgICBjYXNlICdu JzogY2FzZSAnTic6IGNhc2UgJ3EnOiBjYXNlICdRJzoKKyNpZmRlZiBPU0sKKyAgICAgICAgICAg IHByaW50ZigiXG4iKTsKKyNlbHNlCisgICAgICAgICAgICBwcmludGYoIlwwMTVcMDEyIik7Cisj ZW5kaWYgLyogT1NLICovCisgICAgICAgICAgICBydiA9IDA7CisgICAgICAgICAgICBicmVhazsK KwkgIGNhc2UgJ1wwMDMnOgorCSAgY2FzZSAnXDAwNCc6CisJICBjYXNlICdcMDMyJzoKKyNpZmRl ZiBPU0sKKwkgICAgcHJpbnRmKCJeJWMuLi5cbiIsIChjICsgMDEwMCkpOworI2Vsc2UKKwkgICAg cHJpbnRmKCJeJWMuLi5cMDE1XDAxMiIsIChjICsgMDEwMCkpOworI2VuZGlmIC8qIE9TSyAqLwor CSAgICBydiA9IDA7CisJICAgIGJyZWFrOworICAgICAgICAgIC8qIEludmFsaWQgYW5zd2VyICov CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImFza21vcmUiLCJp bnZhbGlkIGFuc3dlciIsYyk7CisgICAgICAgICAgICBwcmludGYoIlkgb3Igc3BhY2UtYmFyIGZv ciB5ZXMsIE4gZm9yIG5vLCBHIHRvIHNob3cgdGhlIHJlc3RcbiIpOworICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIH0KKyNpZmRlZiBPUzIKKyAgICAgICAgcHJpbnRmKCJcciAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyIik7CisgICAgICAg IGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE9TMiAqLworICAgIH0KKyAgICByZXR1cm4ocnYp OworI2VuZGlmIC8qIE5PSUNQICovCit9CisKKy8qICBUIFIgQSBQICAtLSAgVGVybWluYWwgaW50 ZXJydXB0IGhhbmRsZXIgKi8KKworU0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK3RyYXAoaW50IHNp ZykKKyNlbHNlCit0cmFwKHNpZykgaW50IHNpZzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog dHJhcCAqLyB7CisgICAgZXh0ZXJuIGludCBiX3NhdmUsIGZfc2F2ZTsKKyNpZm5kZWYgTk9JQ1AK KyAgICBleHRlcm4gaW50IHRpbWVsaW1pdDsKKyNlbmRpZiAvKiBOT0lDUCAqLworI2lmZGVmIE9T MgorICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIHN0YXJ0ZmxhZ3M7CisjaWZuZGVmIE5PU0VUS0VZ CisgICAgZXh0ZXJuIGludCBvczJna3M7CisjZW5kaWYgLyogTk9TRVRLRVkgKi8KKyAgICBpbnQg aTsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICBleHRlcm4gaW50IGlfYWN0 aXZlLCBpbnN0YXR1czsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIFZNUworICAgIGludCBp OyBGSUxFICpmOworI2VuZGlmIC8qIFZNUyAqLworICAgIGV4dGVybiBpbnQgemNoa29kLCB6Y2hr aWQ7CisjaWZuZGVmIE5PU1BMCisgICAgZXh0ZXJuIGludCB1bmttYWNybzsKKyNlbmRpZiAvKiBO T1NQTCAqLworCisgICAgZGVib2sgPSAxOworI2lmZGVmIE5UU0lHCisgICAgY29ubm9pKCk7Cisj ZW5kaWYgLyogTlRTSUcgKi8KKyNpZmRlZiBfX0VNWF9fCisgICAgc2lnbmFsKFNJR0lOVCwgU0lH X0FDSyk7CisjZW5kaWYKKyNpZmRlZiBHRU1ET1MKKy8qIEdFTSBpcyBub3QgcmVlbnRyYW50LCBu byBpL28gZnJvbSBpbnRlcnJ1cHQgbGV2ZWwgKi8KKyAgICBja2xvbmdqbXAoY21qYnVmLDEpOyAg ICAgICAgICAgICAgICAvKiBKdW1wIGJhY2sgdG8gcGFyc2VyIG5vdyEgKi8KKyNlbmRpZiAvKiBH RU1ET1MgKi8KKworI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworCWRlYnVnKEYxMDAs IioqKioqKioqKioqKioqKioqKioqKiIsIiIsMCk7CisJaWYgKHNpZyA9PSBTSUdJTlQpCisJICBk ZWJ1ZyhGMTAxLCJ0cmFwIGNhdWdodCBTSUdJTlQiLCIiLHNpZyk7CisJZWxzZSAKKwkgIGRlYnVn KEYxMDEsInRyYXAgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKKwlkZWJ1ZyhGMTAwLCIqKioqKioq KioqKioqKioqKioqKioiLCIiLDApOworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZk ZWYgT1MyCisgICAgaWYgKCBzaWcgPT0gU0lHQlJFQUsgJiYgKHN0YXJ0ZmxhZ3MgJiAxMjgpICkg eworICAgICAgICBkZWJ1ZyhGMTAxLCJ0cmFwIGlnbm9yaW5nIFNJR0JSRUFLIiwiIixzaWcpOwor ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLworCisjaWZuZGVmIE5PSUNQ CisgICAgdGltZWxpbWl0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogSW4gY2FzZSB0aW1l ZCBBU0sgaW50ZXJydXB0ZWQgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICB1bmttYWNybyA9IDA7CQkJ LyogT3IgT05fVU5LTk9XTl9NQUNSTyBpbnRlcnJ1cHRlZC4uICovCisjZW5kaWYgLyogTk9TUEwg Ki8KKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIHpjaGtvZCA9IDA7ICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE9yIGZpbGUgZXhwYW5zaW9uIGludGVycnVwdGVkLi4uICovCisgICAgemNoa2lk ID0gMDsKKyAgICBpbnRlcnJ1cHRlZCA9IDE7CisKKyAgICBpZiAod2hhdCAmIFdfQ09OTkVDVCkg ewkJLyogQXJlIHdlIGluIENPTk5FQ1QgbW9kZT8gKi8KKy8qCisgIFRoZSBIUCB3b3Jrc3RhdGlv biBSZXNldCBrZXkgc2VuZHMgc29tZSBraW5kIG9mIHVlYmVyLVNJR0lOVCB0aGF0IGNhbiBub3QK KyAgYmUgU0lHX0lHTm9yZWQsIHNvIHdlIHdpbmQgdXAgaGVyZSBzb21laG93IChldmVuIHRob3Vn aCB0aGlzIGlzICpub3QqIHRoZQorICBjdXJyZW50IFNJR0lOVCBoYW5kbGVyKS4gIEp1c3QgcmV0 dXJuLgorKi8KKyAgICAgICAgZGVidWcoRjEwMSwidHJhcDogU0lHSU5UIGNhdWdodCBkdXJpbmcg Q09OTkVDVCIsIiIsc2lnKTsKKyAgICAgICAgU0lHUkVUVVJOOworICAgIH0KKyNpZm5kZWYgTk9T UEwKKyAgICBpZiAoaV9hY3RpdmUpIHsgICAgICAgICAgICAgICAgICAgICAvKiBJTlBVVCBjb21t YW5kIHdhcyBhY3RpdmU/ICovCisgICAgICAgIGlfYWN0aXZlID0gMDsgICAgICAgICAgICAgICAg ICAgLyogTm90IGFueSBtb3JlLi4uICovCisgICAgICAgIGluc3RhdHVzID0gSU5QX1VJOyAgICAg ICAgICAgICAgLyogSU5QVVQgc3RhdHVzID0gVXNlciBJbnRlcnJ1cHRlZCAqLworICAgIH0KKyNl bmRpZiAvKiBOT1NQTCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGZ0cmVzZXQoKTsgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgZ2xvYmFsIHByb3RvY29sIHNldHRpbmdzICov CisgICAgYmluYXJ5ID0gYl9zYXZlOyAgICAgICAgICAgICAgICAgICAgLyogVGhlbiByZXN0b3Jl IHRoZXNlICovCisgICAgZm5jbnYgID0gZl9zYXZlOworICAgIGJ5ZV9hY3RpdmUgPSAwOworICAg IGRpcmFjdGl2ZSA9IDA7CisgICAgY2RhY3RpdmUgPSAwOworI2VuZGlmIC8qIE5PWEZFUiAqLwor ICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIHdlcmUgdHJh bnNmZXJyaW5nIGEgZmlsZSwgKi8KKyAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAgICAgICAgICAg ICAgICAvKiBjbG9zZSBpdC4gKi8KKyNpZm5kZWYgTk9JQ1AKKyAgICBjbWRzcXVvKGNtZF9xdW90 aW5nKTsgICAgICAgICAgICAgICAvKiBJZiBjb21tYW5kIHF1b3Rpbmcgd2FzIHR1cm5lZCBvZmYg Ki8KKyNpZmRlZiBDS0xFQVJOCisgICAgeworCWV4dGVybiBGSUxFICogbGVhcm5mcDsKKwlleHRl cm4gaW50IGxlYXJuaW5nOworCWlmIChsZWFybmZwKSB7CisJICAgIGZjbG9zZShsZWFybmZwKTsK KwkgICAgbGVhcm5mcCA9IE5VTEw7CisJICAgIGxlYXJuaW5nID0gMDsKKwl9CisgICAgfQorI2Vu ZGlmIC8qIENLTEVBUk4gKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2lmZGVmIENLX0FQQworICAg IGRlbG1hYygiX2FwY19jb21tYW5kcyIsMSk7CisgICAgYXBjYWN0aXZlID0gQVBDX0lOQUNUSVZF OworI2VuZGlmIC8qIENLX0FQQyAqLworCisjaWZkZWYgVk1TCisvKgorICBGaXggdGVybWluYWwu CisqLworICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnNl cyB3aW5kb3cgb3BlbiAqLworICAgICAgICBkZWJ1ZyhGMTAwLCJeQyB0cmFwKCkgY3Vyc2VzIiwi IiwwKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX0NXLDAsMEwsIiIpOyAgICAgICAvKiBDbG9zZSBp dCAqLworICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUg dGVybWluYWwgKi8KKyAgICAgICAgaSA9IHByaW50ZigiXkMuLi4iKTsgICAgICAgICAgICAvKiBF Y2hvIF5DIHRvIHN0YW5kYXJkIG91dHB1dCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnJl cygpOworICAgICAgICBpID0gcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgIC8qIEVjaG8gXkMg dG8gc3RhbmRhcmQgb3V0cHV0ICovCisgICAgfQorICAgIGlmIChpIDwgMSAmJiBmZXJyb3Ioc3Rk b3V0KSkgeyAgICAgIC8qIElmIHRoZXJlIHdhcyBhbiBlcnJvciAqLworICAgICAgICBkZWJ1ZyhG MTAwLCJeQyB0cmFwKCkgZXJyb3IiLCIiLDApOworICAgICAgICBmY2xvc2Uoc3Rkb3V0KTsgICAg ICAgICAgICAgICAgIC8qIGNsb3NlIHN0YW5kYXJkIG91dHB1dCAqLworICAgICAgICBmID0gZm9w ZW4oZGZ0dHksICJ3Iik7ICAgICAgICAgIC8qIG9wZW4gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFs ICovCisgICAgICAgIGlmIChmKSBzdGRvdXQgPSBmOyAgICAgICAgICAgICAgLyogYW5kIG1ha2Ug aXQgc3RhbmRhcmQgb3V0cHV0ICovCisgICAgICAgIHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAg ICAgICAgLyogYW5kIGVjaG8gdGhlIF5DIGFnYWluLiAqLworICAgIH0KKyNlbHNlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3QgVk1TICovCisjaWZkZWYgU1RSQVRVUwor ICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBjb25zb2xlIGJh Y2sgdG8gbm9ybWFsIG1vZGUgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjaWZuZGVmIE5PWEZF UgorICAgIGlmIChmdF93aW4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIGN1cnNlcyB3 aW5kb3cgb3BlbiwgKi8KKyAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGN1cnNlcyIsIiIs MCk7CisgICAgICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsJLyogY2xvc2UgaXQuICovCisg ICAgICAgIHByaW50ZigiXkMuLi4iKTsgICAgICAgICAgICAgICAgLyogRWNobyBeQyB0byBzdGFu ZGFyZCBvdXRwdXQgKi8KKyAgICB9IGVsc2UgeworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgICAg ICBwcmludGYoIl5DLi4uXG4iKTsKKyNpZm5kZWYgTk9YRkVSCisgICAgfQorI2VuZGlmIC8qIE5P WEZFUiAqLworI2VuZGlmIC8qIFZNUyAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgY29ubm9p X210KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogS2lsbCBhc3luY2ggdGFzayB0aGF0IGxp c3RlbnMgdG8gKi8KKyAgICB0dGltb2ZmKCk7CisgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogdGhlIGtleWJvYXJkICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8K KworI2lmbmRlZiBOT0NDVFJBUAorLyogIFRoaXMgaXMgc3R1cGlkIC0tIGV2ZXJ5IHZlcnNpb24g c2hvdWxkIGhhdmUgdHRpbW9mZigpLi4uICAqLworI2lmZGVmIFVOSVgKKyAgICB0dGltb2ZmKCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0 cyAqLworI2Vsc2UKKyNpZmRlZiBPU0sKKyAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworI2Vsc2UKKyNpZmRl ZiBTVFJBVFVTCisgICAgdHRpbW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVy biBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyNlbHNlCisjaWZkZWYgT1MyCisjaWZuZGVm IE5PU0VUS0VZCisgICAgb3MyZ2tzID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVy biBiYWNrIG9uIGtleWNvZGUgbWFwcGluZyAgKi8KKyNlbmRpZiAvKiBOT1NFVEtFWSAqLworI2lm bmRlZiBOT0xPQ0FMCisgICAgZm9yIChpID0gMDsgaSA8IFZOVU07IGkrKykKKyAgICAgIFZzY3Ju UmVzZXRQb3B1cChpKTsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisjaWZkZWYgVENQU09DS0VUCisj aWZkZWYgTlQKKyAgICAvKiBXU0FJc0Jsb2NraW5nKCkgcmV0dXJucyBGQUxTRSBpbiBXaW45NSBk dXJpbmcgYSBibG9ja2luZyBhY2NlcHQgY2FsbCAqLworICAgIGlmICggV1NBU2FmZVRvQ2FuY2Vs IC8qICYmIFdTQUlzQmxvY2tpbmcoKSAqLyApIHsKKyAgICAgICAgV1NBQ2FuY2VsQmxvY2tpbmdD YWxsKCk7CisgICAgfQorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogVENQU09DS0VUICovCisj aWZkZWYgQ0tfTkVUQklPUworICAgIE5DQkNhbmNlbE91dHN0YW5kaW5nKCk7CisjZW5kaWYgLyog Q0tfTkVUQklPUyAqLworICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisjZWxzZQorI2lmZGVmIFZNUworICAg IHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb2ZmIGFueSB0aW1l ciBpbnRlcnJ1cHRzICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisjZW5k aWYgLyogU1RSQVRVUyAqLworI2VuZGlmIC8qIE9TSyAqLworI2VuZGlmIC8qIFVOSVggKi8KKwor I2lmZGVmIE5FVFBUWQorICAgIC8qIENsZWFuIHVwIEN0cmwtQyBvdXQgb2YgUkVESVJFQ1Qgb3Ig ZXh0ZXJuYWwgcHJvdG9jb2wgKi8KKyAgICB7CisJZXh0ZXJuIFBJRF9UIHB0eV9mb3JrX3BpZDsK KwlleHRlcm4gaW50IHB0eV9tYXN0ZXJfZmQsIHB0eV9zbGF2ZV9mZDsKKwlpbnQgeDsKKworCXNp Z25hbChTSUdDSExELFNJR19JR04pOwkvKiBXZSBkb24ndCB3YW50IHRoaXMgYW55IG1vcmUgKi8K KworCWRlYnVnKEYxMDEsInRyYXAgcHR5X21hc3Rlcl9mZCIsIiIscHR5X21hc3Rlcl9mZCk7CisJ aWYgKHB0eV9tYXN0ZXJfZmQgPiAyKSB7CisJICAgIHggPSBjbG9zZShwdHlfbWFzdGVyX2ZkKTsK KwkgICAgZGVidWcoRjEwMSwidHJhcCBwdHlfbWFzdGVyX2ZkIGNsb3NlIiwiIix4KTsKKwl9CisJ cHR5X21hc3Rlcl9mZCA9IC0xOworCWRlYnVnKEYxMDEsInRyYXAgcHR5X3NsYXZlX2ZkIiwiIixw dHlfc2xhdmVfZmQpOworCWlmIChwdHlfc2xhdmVfZmQgPiAyKSB7CisJICAgIHggPSBjbG9zZShw dHlfc2xhdmVfZmQpOworCSAgICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9zbGF2ZV9mZCBjbG9zZSIs IiIseCk7CisJfQorCXB0eV9zbGF2ZV9mZCA9IC0xOworCWRlYnVnKEYxMDEsInRyYXAgcHR5X2Zv cmtfcGlkIiwiIixwdHlfZm9ya19waWQpOworCWlmIChwdHlfZm9ya19waWQgPiAwKSB7CisJICAg IHggPSBraWxsKHB0eV9mb3JrX3BpZCwwKTsJLyogU2VlIGlmIHRoZSBmb3JrIGlzIHJlYWxseSB0 aGVyZSAqLworCSAgICBkZWJ1ZyhGMTExLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIDAgZXJybm8i LGNraXRvYSh4KSxlcnJubyk7CisJICAgIGlmICh4ID09IDApIHsJCS8qIFNlZW1zIHRvIGJlIGFj dGl2ZSAqLworCQl4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHSFVQKTsgLyogQXNrIGl0IHRvIGNs ZWFuIHVwICYgZXhpdCAqLworCQlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIFNJ R0hVUCIsIiIseCk7CisJCW1zbGVlcCgxMDApOworCQllcnJubyA9IDA7CisJCXggPSBraWxsKHB0 eV9mb3JrX3BpZCwwKTsgLyogSXMgaXQgc3RpbGwgdGhlcmU/ICovCisJCWlmICh4ID09IDAKKyNp ZmRlZiBFU1JDSAorCQkgICAgLyogVGhpcyBtb2R1bGUgaXMgbm90IGFsd2F5cyBleHBvc2VkIHRv IDxlcnJuby5oPiAqLworCQkgICAgfHwgZXJybm8gIT0gRVNSQ0gKKyNlbmRpZgkvKiBFU1JDSCAq LworCQkgICAgKSB7CisJCSAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsU0lHS0lMTCk7CisJCSAg ICBkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9mb3JrX3BpZCBraWxsIFNJR0tJTEwiLCIiLHgpOworCQl9 CisJICAgIH0KKwkgICAgcHR5X2ZvcmtfcGlkID0gLTE7CisJfQorICAgIH0KKyNlbmRpZgkvKiBO RVRQVFkgKi8KKworI2lmZGVmIE9TSworICAgIHNpZ21hc2soLTEpOworLyoKKyAgV2UgYXJlIGlu IGFuIGludGVyY2VwdCByb3V0aW5lIGJ1dCBkbyBub3QgcGVyZm9ybSBhIEYkUlRFIChkb25lIGlt cGxpY2l0bHkKKyAgYnkgcnRzKS4gIFdlIGhhdmUgdG8gZGVjcmVtZW50IHRoZSBzaWdtYXNrIGFz IEYkUlRFIGRvZXMuICBXYXJuaW5nOiBsb25nanVtcAorICBvbmx5IHJlc3RvcmVzIHRoZSBjcHUg cmVnaXN0ZXJzLCBOT1QgdGhlIGZwdSByZWdpc3RlcnMuICBTbyBkb24ndCB1c2UgZnB1IGF0Cisg IGFsbCBvciBhdCBsZWFzdCBkb24ndCB1c2UgY29tbW9uIGZwdSAoZG91YmxlIG9yIGZsb2F0KSBy ZWdpc3RlciB2YXJpYWJsZXMuCisqLworI2VuZGlmIC8qIE9TSyAqLworCisjaWZkZWYgTlRTSUcK KyAgICBQb3N0Q3RybENTZW0oKTsKKyNlbHNlIC8qIE5UU0lHICovCisgICAgZGVidWcoRjEwMCwi dHJhcCBhYm91dCB0byBsb25nam1wIiwiIiwwKTsKKyNpZmRlZiBOVAorICAgIGNrbG9uZ2ptcChj a2phZGRyKGNtamJ1ZiksMSk7CisjZWxzZSAvKiBOVCAqLworICAgIGNrbG9uZ2ptcChjbWpidWYs MSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbmRpZiAvKiBOVFNJRyAqLworI2Vsc2UgLyogTk9DQ1RS QVAgKi8KKy8qIE5vIEN0cmwtQyB0cmFwLCBqdXN0IGV4aXQuICovCisjaWZkZWYgQ0tfQ1VSU0VT ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3Vyc2VzIHN1cHBvcnQ/ICovCisgICAgeHhzY3Jl ZW4oU0NSX0NXLDAsMEwsIiIpOyAgICAgICAgICAgLyogQ2xvc2UgY3Vyc2VzIHdpbmRvdyAqLwor I2VuZGlmIC8qIENLX0NVUlNFUyAqLworICAgIGRvZXhpdChCQURfRVhJVCx3aGF0KTsgICAgICAg ICAgICAgIC8qIEV4aXQgcG9vcmx5ICovCisjZW5kaWYgLyogTk9DQ1RSQVAgKi8KKyAgICBTSUdS RVRVUk47Cit9CisKKworLyogIEMgSyBfIFQgSSBNIEUgIC0tIFJldHVybnMgcG9pbnRlciB0byBj dXJyZW50IHRpbWUuICovCisKK2NoYXIgKgorY2tfdGltZSgpIHsKKyAgICBzdGF0aWMgY2hhciB0 YnVmWzEwXTsKKyAgICBjaGFyICpwOworICAgIGludCB4OworCisgICAgenRpbWUoJnApOyAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogIlRodSBGZWIgIDggMTI6MDA6MDAgMTk5MCIgKi8KKyAg ICBpZiAoIXApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaWtlIGFzY3RpbWUoKSEg Ki8KKyAgICAgIHJldHVybigiIik7CisgICAgaWYgKCpwKSB7CisgICAgICAgIGZvciAoeCA9IDEx OyB4IDwgMTk7IHgrKykgICAgICAgLyogY29weSBoaDptbTpzcyAqLworICAgICAgICAgIHRidWZb eCAtIDExXSA9IHBbeF07ICAgICAgICAgIC8qIHRvIHRidWYgKi8KKyAgICAgICAgdGJ1Zls4XSA9 IE5VTDsgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KKyAgICB9CisgICAgcmV0dXJu KHRidWYpOyAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIHJldHVybiBpdCAqLworfQorCisv KiAgQyBDIF8gQyBMIEUgQSBOICAtLSAgQ2xlYW51cCBhZnRlciB0ZXJtaW5hbCBpbnRlcnJ1cHQg aGFuZGxlciAqLworCisjaWZkZWYgR0VNRE9TCitpbnQKK2NjX2NsZWFuKCkgeworICAgIHpjbG9z ZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIHdlcmUgdHJhbnNmZXJyaW5n IGEgZmlsZSwgKi8KKyAgICB6Y2xvc2UoWk9GSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBj bG9zZSBpdC4gKi8KKyAgICBwcmludGYoIl5DLi4uXG4iKTsgICAgICAgICAgICAgICAgICAvKiBO b3QgVk1TLCBubyBwcm9ibGVtLi4uICovCit9CisjZW5kaWYgLyogR0VNRE9TICovCisKKworLyog IFMgVCBQIFQgUiBBIFAgLS0gSGFuZGxlIFNJR1RTVFAgKHN1c3BlbmQpIHNpZ25hbHMgKi8KKwor U0lHVFlQCisjaWZkZWYgQ0tfQU5TSUMKK3N0cHRyYXAoaW50IHNpZykKKyNlbHNlCitzdHB0cmFw KHNpZykgaW50IHNpZzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogc3RwdHJhcCAqLyB7CisK KyNpZm5kZWYgTk9KQworICAgIGludCB4OyBleHRlcm4gaW50IGNtZmxnczsKKyAgICBkZWJ1ZyhG MTAxLCJzdHB0cmFwKCkgY2F1Z2h0IHNpZ25hbCIsIiIsc2lnKTsKKyAgICBpZiAoIXhzdXNwZW5k KSB7CisgICAgICAgIHByaW50ZigiXHJcbnN1c3BlbmQgZGlzYWJsZWRcclxuIik7CisjaWZuZGVm IE5PSUNQCisgICAgICAgIGlmICh3aGF0ICYgV19DT01NQU5EKSB7CQkvKiBJZiB3ZSB3ZXJlIHBh cnNpbmcgY29tbWFuZHMgKi8KKyAgICAgICAgICAgIHByb21wdCh4eHN0cmluZyk7ICAgICAgICAg ICAvKiByZWlzc3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8KKyAgICAgICAgICAgIGlmICgh Y21mbGdzKSAgICAgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBhbnkpICovCisgICAgICAgICAg ICAgIHByaW50ZigiJXMiLGNtZGJ1Zik7CisgICAgICAgIH0KKyNlbmRpZiAvKiBOT0lDUCAqLwor ICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgLyog UmVzZXQgdGhlIGNvbnNvbGUgKi8KKyNpZm5kZWYgT1MyCisgICAgICAgIC8qIEZsdXNoIHBlbmRp bmcgb3V0cHV0IGZpcnN0LCBpbiBjYXNlIHdlIGFyZSBjb250aW51ZWQgKi8KKyAgICAgICAgLyog aW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGNvdWxkIG1ha2UgdXMgYmxvY2sgKi8KKyAgICAgICAg ZmZsdXNoKHN0ZG91dCk7CisKKyAgICAgICAgeCA9IHBzdXNwZW5kKHhzdXNwZW5kKTsJCS8qIFRy eSB0byBzdXNwZW5kLiAqLworICAgICAgICBpZiAoeCA8IDApCisjZW5kaWYgLyogT1MyICovCisg ICAgICAgICAgcHJpbnRmKCJKb2IgY29udHJvbCBub3Qgc3VwcG9ydGVkXHJcbiIpOworICAgICAg ICBjb25pbnQodHJhcCxzdHB0cmFwKTsgICAgICAgICAgIC8qIFJlYXJtIHRoZSB0cmFwLiAqLwor ICAgICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIGJhY2sgZnJvbSBzdXNwZW5kIiwiIiwwKTsKKyAg ICAgICAgc3dpdGNoICh3aGF0KSB7CisgICAgICAgICAgY2FzZSBXX0NPTk5FQ1Q6ICAgICAgICAg ICAgICAgLyogSWYgc3VzcGVuZGVkIGR1cmluZyBDT05ORUNUPyAqLworICAgICAgICAgICAgY29u YmluKChjaGFyKWVzY2FwZSk7ICAgICAgIC8qIHB1dCBjb25zb2xlIGJhY2sgaW4gYmluYXJ5IG1v ZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMDAsInN0cHRyYXAgV19DT05ORUNUIiwiIiwwKTsK KyAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBOT0lDUAorICAgICAgICAgIGNhc2UgV19DT01N QU5EOiAgICAgICAgICAgICAgIC8qIFN1c3BlbmRlZCBpbiBjb21tYW5kIG1vZGUgKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMDEsInN0cHRyYXAgV19DT01NQU5EIHBmbGFnIiwiIixwZmxhZyk7Cisg ICAgICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgLyogUHV0IGJhY2sgQ0JSRUFL IHR0eSBtb2RlICovCisgICAgICAgICAgICBpZiAocGZsYWcpIHsgICAgICAgICAgICAgICAgLyog SWYgY29tbWFuZCBwYXJzaW5nIHdhcyAqLworICAgICAgICAgICAgICAgIHByb21wdCh4eHN0cmlu Zyk7ICAgICAgIC8qIHJlaXNzdWUgdGhlIHByb21wdCBhbmQgcGFydGlhbCAqLworICAgICAgICAg ICAgICAgIGlmICghY21mbGdzKSAgICAgICAgICAgIC8qIGNvbW1hbmQgKGlmIGFueSkgKi8KKyAg ICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLGNtZGJ1Zik7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgICAgICAgIGRlZmF1bHQ6ICAg ICAgICAgICAgICAgICAgICAgIC8qIEFsbCBvdGhlciBjYXNlcy4uLiAqLworICAgICAgICAgICAg ZGVidWcoRjEwMCwic3RwdHJhcCBkZWZhdWx0IiwiIiwwKTsKKyAgICAgICAgICAgIGNvbmNiKChj aGFyKWVzY2FwZSk7ICAgICAgICAvKiBQdXQgaXQgYmFjayBpbiBDQlJFQUsgbW9kZSAqLworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9KQyAqLworICAg IFNJR1JFVFVSTjsKK30KKworI2lmZGVmIFRMT0cKKyNkZWZpbmUgVEJVRkwgMzAwCisKKy8qICBU IEwgTyBHICAtLSAgTG9nIGEgcmVjb3JkIGluIHRoZSB0cmFuc2FjdGlvbiBmaWxlICAqLworLyoK KyBDYWxsIHdpdGggYSBmb3JtYXQgYW5kIDMgYXJndW1lbnRzOiB0d28gc3RyaW5ncyBhbmQgYSBu dW1iZXI6CisgICBmICAgICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5nIGluIHJhbmdlIDAtNywgYml0 IHggaXMgb24sIGFyZyAjeCBpcyBwcmludGVkLgorICAgczEsczIgLSBTdHJpbmcgYXJndW1lbnRz IDAgYW5kIDEuCisgICBuICAgICAtIExvbmcsIGFyZ3VtZW50IDIuCisqLworVk9JRAorI2lmZGVm IENLX0FOU0lDCitkb3Rsb2coaW50IGYsIGNoYXIgKnMxLCBjaGFyICpzMiwgQ0tfT0ZGX1QgbikK KyNlbHNlCitkb3Rsb2coZixzMSxzMixuKSBpbnQgZjsgQ0tfT0ZGX1QgbjsgY2hhciAqczEsICpz MjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG90bG9nICovIHsKKyAgICBzdGF0aWMgY2hh ciBzW1RCVUZMXTsKKyAgICBleHRlcm4gaW50IHRsb2dmbXQ7CisgICAgY2hhciAqc3AgPSBzOyBp bnQgeDsKKyAgICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGlmICghczIpIHMyID0gIiI7CisKKyAg ICBpZiAoIXRyYWxvZykgcmV0dXJuOyAgICAgICAgICAgICAgICAvKiBJZiBubyB0cmFuc2FjdGlv biBsb2csIGRvbid0ICovCisgICAgaWYgKHRsb2dmbXQgIT0gMSkgcmV0dXJuOworICAgIHN3aXRj aCAoZikgeworICAgICAgY2FzZSBGMDAwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgKHNw ZWNpYWwpICJzMSBuIHMyIiAgKi8KKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIChpbnQp c3RybGVuKHMyKSArIDE1ID4gVEJVRkwpCisgICAgICAgICAgc3ByaW50ZihzcCwiP1QtTG9nIHN0 cmluZyB0b28gbG9uZyIpOworICAgICAgICBlbHNlCisJICBzcHJpbnRmKHNwLCIlcyAlcyAlcyIs czEsY2tmc3RvYShuKSxzMik7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJh bG9nID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYwMDE6ICAgICAgICAgICAgICAg ICAgICAgICAgLyogMSwgIiBuIiAqLworICAgICAgICBzcHJpbnRmKHNwLCIgJXMiLGNrZnN0b2Eo bikpOworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSBGMDEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIs ICJbczJdIiAqLworICAgICAgICB4ID0gKGludClzdHJsZW4oczIpOworICAgICAgICBpZiAoczJb eF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOworICAgICAgICBpZiAoeCArIDYgPiBUQlVGTCkKKyAg ICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgIGVsc2Ugc3By aW50ZihzcCwiWyVzXSIsczIpOworICAgICAgICBpZiAoenNvdXRsKFpURklMRSwiIikgPCAwKSB0 cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjAxMTogICAgICAgICAgICAg ICAgICAgICAgICAvKiAzLCAiW3MyXSBuIiAqLworICAgICAgICB4ID0gKGludClzdHJsZW4oczIp OworICAgICAgICBpZiAoczJbeF0gPT0gJ1xuJykgczJbeF0gPSAnXDAnOworICAgICAgICBpZiAo eCArIDYgPiBUQlVGTCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7 CisgICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiWyVzXSAlcyIsczIsY2tmc3RvYShuKSk7CisgICAg ICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkgdHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7 CisgICAgICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNCwgInMxIiAqLwor ICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzMSkgPCAwKSB0cmFsb2cgPSAwOworICAgICAgICBi cmVhazsKKyAgICAgIGNhc2UgRjEwMTogICAgICAgICAgICAgICAgICAgICAgICAvKiA1LCAiczE6 IG4iICovCisgICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyAxNSA+IFRCVUZMKQorICAgICAg ICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgZWxzZSBzcHJpbnRm KHNwLCIlczogJXMiLHMxLGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxz KSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMTEwOiAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDYsICJzMSBzMiIgKi8KKyAgICAgICAgeCA9IChpbnQpc3Ry bGVuKHMyKTsKKyAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKKyAgICAg ICAgaWYgKChpbnQpc3RybGVuKHMxKSArIHggKyA0ID4gVEJVRkwpCisgICAgICAgICAgc3ByaW50 ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOworICAgICAgICBlbHNlCisJICBzcHJpbnRmKHNwLCIl cyVzJXMiLHMxLCgoKnMyID09ICc6JykgPyAiIiA6ICIgIiksczIpOworICAgICAgICBpZiAoenNv dXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSBGMTExOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDcsICJzMSBzMjogbiIgKi8KKyAgICAg ICAgeCA9IChpbnQpc3RybGVuKHMyKTsKKyAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hd ID0gJ1wwJzsKKyAgICAgICAgaWYgKChpbnQpc3RybGVuKHMxKSArIHggKyAxNSA+IFRCVUZMKQor ICAgICAgICAgIHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgZWxzZQor CSAgc3ByaW50ZihzcCwiJXMlcyVzOiAlcyIsczEsKCgqczIgPT0gJzonKSA/ICIiIDogIiAiKSxz Mixja2ZzdG9hKG4pKTsKKyAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cg PSAwOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHNwcmludGYoc3As Ij9JbnZhbGlkIGZvcm1hdCBmb3IgdGxvZygpIC0gJWQiLGYpOworICAgICAgICBpZiAoenNvdXRs KFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgfQorfQorCisvKgorICBEIE8gWCBMIE8g RworCisgIFRoaXMgaXMgdGhlIHRyYW5zYWN0aW9uLWxvZyB3cml0ZXIgZm9yIEJSSUVGIGZvcm1h dC4KKyAgVGhlIGlkZWEgaXMgcHJvZHVjZSBvbmUgcmVjb3JkIChsaW5lKSBwZXIgZmlsZS4gIEVh Y2ggcmVjb3JkCisgIGhhcyB0aGUgZm9sbG93aW5nIGRlbGltaXRlZCBmaWVsZHM6CisgICAgRGF0 ZSAoeXl5eW1tZGQpCisgICAgVGltZSAoaGg6bW06c3MpCisgICAgQWN0aW9uOiBTRU5EIG9yIFJF Q1YKKyAgICBGaWxlIG5hbWUKKyAgICBGaWxlIHNpemUKKyAgICBUcmFuc2ZlciBtb2RlICh0ZXh0 LCBiaW5hcnksIGltYWdlLCBsYWJlbGVkLCBldGMpLgorICAgIFN0YXR1czogT0sgb3IgRkFJTEVE CisgICAgRnJlZS1mb3JtIGNvbW1lbnRzIGluIGRvdWJsZXF1b3RlcworICBUaGUgZGVmYXVsdCBz ZXBhcmF0b3IgaXMgY29tbWEuCisgIElmIGEgZmllbGQgY29udGFpbnMgdGhlIHNlcGFyYXRvciwg aXQgaXMgZW5jbG9zZWQgaW4gZG91YmxlcXVvdGVzLgorKi8KK1ZPSUQKKyNpZmRlZiBDS19BTlNJ QworZG94bG9nKGludCB4LCBjaGFyICogZm4sIENLX09GRl9UIGZzLCBpbnQgZm0sIGludCBzdGF0 dXMsIGNoYXIgKiBtc2cpCisjZWxzZQorZG94bG9nKHgsIGZuLCBmcywgZm0sIHN0YXR1cywgbXNn KQorICAgIGludCB4OyBjaGFyICogZm47IENLX09GRl9UIGZzOyBpbnQgZm07IGludCBzdGF0dXM7 IGNoYXIgKiBtc2c7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRveGxvZyAqLyB7CisgICAg ZXh0ZXJuIGludCB0bG9nc2VwOworICAgIGNoYXIgc2VwWzJdOworICAgIGNoYXIgYnVmW0NLTUFY UEFUSCsyNTZdLCAqIGJ1ZnA7CisgICAgY2hhciB0bXBidWZbMzJdOworICAgIGNoYXIgKiBzLCAq IHA7CisgICAgaW50IGxlbiwgbGVmdCwgZnRwID0gMCwgazsKKworICAgIGlmICghdHJhbG9nKSBy ZXR1cm47ICAgICAgICAgICAgICAgIC8qIElmIG5vIHRyYW5zYWN0aW9uIGxvZywgZG9uJ3QgKi8K KworICAgIGlmICghZm4pIGZuID0gIiI7ICAgICAgICAgICAgICAgICAgIC8qIFByb3RlY3QgYWdh aW5zdCBudWxsIHBvaW50ZXJzICovCisgICAgaWYgKCFtc2cpIG1zZyA9ICIiOworICAgIGlmICh4 ICYgV19GVFApCisgICAgICBmdHArKzsKKworICAgIHNlcFswXSA9IChjaGFyKSB0bG9nc2VwOwor ICAgIHNlcFsxXSA9IE5VTDsKKyAgICBpZiAoIXNlcFswXSkgc2VwWzBdID0gJywnOworCisgICAg YnVmcCA9IGJ1ZjsKKyAgICBsZWZ0ID0gc2l6ZW9mKGJ1Zik7CisgICAgZGVidWcoRjEwMSwiWFhY IGRveGxvZyBsZWZ0IDEiLCIiLGxlZnQpOworCisgICAgcCA9IHp6bmRhdGUoKTsgICAgICAgICAg ICAgICAgICAgICAgLyogRGF0ZSAqLworICAgIGNrbWFrbXNnKGJ1ZiwgbGVmdCwgcCA/IHAgOiAi MDAwMDAwMDAiLCBzZXAsIE5VTEwsIE5VTEwpOworICAgIGJ1ZnAgKz0gOTsKKyAgICBsZWZ0IC09 IDk7CisgICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDIiLGJ1ZixsZWZ0KTsKKworICAg IHp0aW1lKCZwKTsKKyAgICBja3N0cm5jcHkoYnVmcCxwKzExLGxlZnQpOworICAgIGJ1ZnAgKz0g ODsKKyAgICBsZWZ0IC09IDg7CisgICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDMiLGJ1 ZixsZWZ0KTsKKworICAgIGlmIChmdHApIHsKKwlpZiAoISh4ICYgKFdfU0VORHxXX1JFQ1YpKSkK KwkgIHJldHVybjsKKwlzID0gICh4ICYgV19TRU5EKSA/ICJQVVQiIDogIkdFVCI7CisJayA9IDM7 CisgICAgfSBlbHNlIHsKKwlzID0gICh4ICYgV19TRU5EKSA/ICJTRU5EIiA6ICJSRUNWIjsKKwlr ID0gNDsKKyAgICB9CisgICAgY2ttYWttc2coYnVmcCxsZWZ0LHNlcCxzLHNlcCxOVUxMKTsKKyAg ICBidWZwICs9IGsgKyAyOworICAgIGxlZnQgLT0gKGsgKyAyKTsKKyAgICBkZWJ1ZyhGMTExLCJY WFggZG94bG9nIGxlZnQgNCIsYnVmLGxlZnQpOworCisgICAgcyA9ICIiOworICAgIGlmIChja3N0 cmNocihmbixzZXBbMF0pKQkJLyogRmlsZW5hbWUgKi8KKyAgICAgIHMgPSAiXCIiOworICAgIGNr bWFrbXNnKGJ1ZnAsbGVmdCxzLGZuLHMsc2VwKTsKKyAgICBzcHJpbnRmKHRtcGJ1ZiwiJXMiLGNr ZnN0b2EoZnMpKTsJLyogU2l6ZSAqLworICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFU SCk7CisgICAgY2tzdHJuY2F0KGJ1ZixzZXAsQ0tNQVhQQVRIKTsKKyAgICBkZWJ1ZyhGMTEwLCJk b3hsb2cgNCIsYnVmLDApOworCisjaWZkZWYgTk9JQ1AKKyAgICAvKiBUcmFuc2ZlciBtb2RlICov CisgICAgY2tzdHJuY3B5KHRtcGJ1ZiwgKGJpbmFyeSA/ICJiaW5hcnkiIDogInRleHQiKSwgVE1Q QlVGU0laKTsKKyNlbHNlCisgICAgY2tzdHJuY3B5KHRtcGJ1ZixnZm1vZGUoZm0sMCksVE1QQlVG U0laKTsKKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIGlmIChja3N0cmNocih0bXBidWYsc2VwWzBd KSkgeyAgICAgIC8qIE1pZ2h0IGNvbnRhaW4gc3BhY2VzICovCisgICAgICAgIGNrc3RybmNhdChi dWYsIlwiIixDS01BWFBBVEgpOworICAgICAgICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBB VEgpOworICAgICAgICBja3N0cm5jYXQoYnVmLCJcIiIsQ0tNQVhQQVRIKTsKKyAgICB9IGVsc2UK KyAgICAgIGNrc3RybmNhdChidWYsdG1wYnVmLENLTUFYUEFUSCk7CisgICAgY2tzdHJuY2F0KGJ1 ZixzZXAsQ0tNQVhQQVRIKTsKKyAgICBkZWJ1ZyhGMTEwLCJkb3hsb2cgNSIsYnVmLDApOworCisg ICAgY2tzdHJuY2F0KGJ1Ziwgc3RhdHVzID8gIkZBSUxFRCIgOiAiT0siLENLTUFYUEFUSCk7Cisg ICAgbGVuID0gc3RybGVuKGJ1Zik7CisgICAgbGVmdCA9IENLTUFYUEFUSCsyNTYgLSBsZW47Cisg ICAgaWYgKGxlZnQgPCAyKSBmYXRhbCgiZG94bG9nIGJ1ZmZlciBvdmVybG93Iik7CisKKyAgICBk ZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNSIsYnVmLGxlZnQpOworCisgICAgZGVidWcoRjEx MCwiZG94bG9nIGJ1ZiAxIiwgYnVmLCBsZW4pOworICAgIHMgPSBidWYgKyBsZW47CisgICAgaWYg KHN0YXR1cyA9PSAwICYmIGxlZnQgPiAzMikgeworICAgICAgICBsb25nIGNwcyA9IDBMOworI2lm ZGVmIEdGVElNRVIKKwlkZWJ1ZyhGMTAxLCJET1hMT0cgZnB4ZnNlY3MiLCIiLChsb25nKShmcHhm c2VjcyAqIDEwMDApKTsKKyAgICAgICAgaWYgKGZweGZzZWNzKSBjcHMgPSAobG9uZykoKENLRkxP QVQpIGZzIC8gZnB4ZnNlY3MpOworICAgICAgICBzcHJpbnRmKHMsIiVzXCIlMC4zZnNlYyAlbGRj cHNcIiIsc2VwLGZweGZzZWNzLGNwcyk7CisjZWxzZQorICAgICAgICBpZiAoeGZzZWNzKSBjcHMg PSBmcyAvIHhmc2VjczsKKyAgICAgICAgc3ByaW50ZihzLCIlc1wiJWxkc2VjICVsZGNwc1wiIixz ZXAseGZzZWNzLGNwcyk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIH0gZWxzZSBpZiAoKGlu dClzdHJsZW4obXNnKSArIDQgPCBsZWZ0KSB7CisgICAgICAgIHNwcmludGYocywiJXNcIiVzXCIi LHNlcCxtc2cpOworICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJYWFggZG94bG9nIGxlZnQgNSIsYnVm LGxlZnQpOworCisgICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1ZiwwKTsKKyAgICB4ID0genNv dXRsKFpURklMRSxidWYpOworICAgIGRlYnVnKEYxMDEsImRveGxvZyB6c291dGwiLCIiLHgpOwor ICAgIGlmICh4IDwgMCkgdHJhbG9nID0gMDsKK30KKyNlbmRpZiAvKiBUTE9HICovCisKKyNpZm5k ZWYgTUFDCisvKgorICBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgZm9yIGFsbCBpbXBsZW1lbnRh dGlvbnMgYnV0IHRoZSBNYWNpbnRvc2guCisqLworCisjaWZkZWYgQ0tfQ1VSU0VTCitzdGF0aWMg aW50IHJlcGFpbnQgPSAwOyAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgZGlzcGxheSBuZWVk cyByZXBhaW50aW5nICovCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKyNpZm5kZWYgTk9YRkVS CisvKiAgQyBIIEsgSSBOIFQgIC0tICBDaGVjayBmb3IgY29uc29sZSBpbnRlcnJ1cHRzICAqLwor CisvKgorICBVc2VkIGR1cmluZyBmaWxlIHRyYW5zZmVyIGluIGxvY2FsIG1vZGUgb25seToKKyAg LiBJZiB1c2VyIGhhcyBub3QgdG91Y2hlZCB0aGUga2V5Ym9hcmQsIHJldHVybnMgMCB3aXRoIG5v IHNpZGUgZWZmZWN0cy4KKyAgLiBJZiB1c2VyIHR5cGVkIFMgb3IgQSAoZXRjLCBzZWUgYmVsb3cp IHByaW50cyBzdGF0dXMgbWVzc2FnZSBhbmQgcmV0dXJucyAwLgorICAuIElmIHVzZXIgdHlwZWQg WCBvciBGIChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAwIHdpdGggY3hzZWVuIHNldCB0byAxLgor ICAuIElmIHVzZXIgdHlwZWQgWiBvciBCIChldGMsIHNlZSBiZWxvdykgcmV0dXJucyAwIHdpdGgg Y3pzZWVuIHNldCB0byAxLgorICAuIElmIHVzZXIgdHlwZWQgRSBvciBDIChldGMsIHNlZSBiZWxv dykgcmV0dXJucyAtMS4KKyovCitpbnQKK2Noa2ludCgpIHsKKyAgICBpbnQgY2gsIGNuLCBvZmQ7 IGxvbmcgeno7CisgICAgaWYgKCF4ZnJpbnQpCisgICAgICByZXR1cm4oMCk7CisgICAgaWYgKCgh bG9jYWwpIHx8IChxdWlldCkpIHJldHVybigwKTsgLyogT25seSBkbyB0aGlzIGlmIGxvY2FsICYg bm90IHF1aWV0ICovCisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBpZiAoY29uX3JlYWRzX210KSAg ICAgICAgICAgICAgICAgICAvKiBpZiBjb25pbnRfbXQgdGFzayBpcyBhY3RpdmUgKi8KKyAgICAg IGlmIChjb25pbnRfYXZsKSB7ICAgICAgICAgICAgICAgICAvKiBhbmQgdGhlcmUncyBhbiBpbnRl cnJ1cHQgcGVuZGluZyAqLworICAgICAgICAgIGNuID0gMTsgICAgICAgICAgICAgICAgICAgICAg IC8qIHByb2Nlc3MgaXQgKi8KKyAgICAgICAgICBjaCA9IGNvbmludF9jaDsKKyAgICAgICAgICBj b25pbnRfYXZsID0gMDsgICAgICAgICAgICAgICAvKiB0dXJuIG9mZiBmbGFnIHNvIGNvbmludF9t dCBjYW4gKi8KKyAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9j ZWVkICovCisgICAgICAgIHJldHVybigwKTsKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBpZiBjb25pbnRfbXQgbm90IGFjdGl2ZSAqLworICAgICAgaWYgKChjaCA9 IGNvbmluYygyKSkgPCAwKSAgICAgICAgIC8qIHRyeSB0byBnZXQgY2hhciBtYW51YWxseSAqLwor ICAgICAgICByZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEkvTyBlcnJvciwgb3Ig bm8gZGF0YSAqLworICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlm IHN1Y2Nlc3NmdWwsIHNldCBjbiBzbyB3ZSAqLworICAgICAgICBjbiA9IDE7ICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIGtub3cgd2UgZ290IG9uZSAqLworICAgIGRlYnVnKEYxMDEsImNoa2lu dCBnb3Qga2V5Ym9hcmQgY2hhcmFjdGVyIixjaCxjbik7CisjZWxzZSAvKiAhZGF0YWdlbmVyYWwg Ki8KKyNpZmRlZiBOVFNJRworICAgIHsKKyAgICAgICAgZXh0ZXJuIGludCBUbHNJbmRleDsKKyAg ICAgICAgc3RydWN0IF90aHJlYWRpbmZvICogdGhyZWFkaW5mbzsKKyAgICAgICAgdGhyZWFkaW5m byA9IChzdHJ1Y3QgX3RocmVhZGluZm8gKikgVGxzR2V0VmFsdWUoVGxzSW5kZXgpOworICAgICAg ICBpZiAodGhyZWFkaW5mbykgeworICAgICAgICAgICAgaWYgKCFXYWl0U2VtKHRocmVhZGluZm8t PkRpZVNlbSwwKSkKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAvKiBD YW5jZWwgSW1tZWRpYXRlbHkgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBOVFNJRyAq LworICAgIGNuID0gY29uY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBpbnB1dCB3 YWl0aW5nPyAqLworICAgIGRlYnVnKEYxMDEsImNvbmNoayIsIiIsY24pOworICAgIGlmIChjbiA8 IDEpIHJldHVybigwKTsKKyAgICBjaCA9IGNvbmluYyg1KSA7CisgICAgZGVidWcoRjEwMSwiY29u aW5jIiwiIixjaCk7CisgICAgaWYgKGNoIDwgMCkgcmV0dXJuKDApOworI2VuZGlmIC8qIGRhdGFn ZW5lcmFsICovCisKKyAgICBjaCAmPSAwMTc3OworICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgIGNh c2UgJ0EnOiBjYXNlICdhJzogY2FzZSAwMDAxOiAgICAvKiBTdGF0dXMgcmVwb3J0ICovCisgICAg ICBjYXNlICdTJzogY2FzZSAncyc6CisgICAgICAgIGlmIChmZGlzcGxhICE9IFhZRkRfUiAmJiBm ZGlzcGxhICE9IFhZRkRfUyAmJiBmZGlzcGxhICE9IFhZRkRfTikKKyAgICAgICAgICByZXR1cm4o MCk7ICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGZvciBzZXJpYWwsIHNpbXBsZSBvciBub25l ICovCisgICAgICAgIG9mZCA9IGZkaXNwbGE7ICAgICAgICAgICAgICAgICAgLyogW01GXSBTYXZl IGZpbGUgZGlzcGxheSB0eXBlICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfTikKKyAg ICAgICAgICBmZGlzcGxhID0gWFlGRF9SOyAgICAgICAgICAgICAvKiBbTUZdIFByZXRlbmQgc2Vy aWFsIGlmIG5vIGRpc3BsYXkgKi8KKyAgICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIlN0YXR1 cyByZXBvcnQ6Iik7CisgICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCIgZmlsZSB0eXBlOiAi KTsKKyAgICAgICAgaWYgKGJpbmFyeSkgeworICAgICAgICAgICAgc3dpdGNoKGJpbmFyeSkgewor ICAgICAgICAgICAgICBjYXNlIFhZRlRfTDogeHhzY3JlZW4oU0NSX1RaLDAsMGwsImxhYmVsZWQi KTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9JOiB4eHNjcmVlbihTQ1JfVFosMCww bCwiaW1hZ2UiKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9VOiB4eHNjcmVlbihT Q1JfVFosMCwwbCwiYmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsKKyAgICAgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0I6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJi aW5hcnkiKTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisjaWZkZWYg Tk9DU0VUUworICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsInRleHQiKTsKKyNlbHNl CisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwidGV4dCwgIik7CisgICAgICAgICAg ICBpZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7CisgICAgICAgICAg ICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsInRyYW5zcGFyZW50Iik7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7CisgICAgICAgICAg ICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQp OworICAgICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFUsMCwwbCwiID0+ICIpOworICAg ICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCxmY3NpbmZvW2ZjaGFyc2V0XS5r ZXl3b3JkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB4 eHNjcmVlbihTQ1JfVFosMCwwbCxmY3NpbmZvW2ZjaGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAg ICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAiKTsKKyAgICAgICAgICAgICAg ICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsdGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAg ICAgICAgfQorICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmaWxjbnQsIiBmaWxlIG51bWJlciIp OworICAgICAgICBpZiAoZnNpemUpIHh4c2NyZWVuKFNDUl9RRSwwLGZzaXplLCIgc2l6ZSIpOwor ICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCxmZmMsIiBjaGFyYWN0ZXJzIHNvIGZhciIpOworICAg ICAgICBpZiAoZnNpemUgPiAwTCkgeworI2lmZGVmIENLX1JFU0VORAorICAgICAgICAgICAgenog PSB3aGF0ICYgV19TRU5EID8gc2VuZHN0YXJ0IDogd2hhdCAmIFdfUkVDViA/IHJzX2xlbiA6IDA7 CisgICAgICAgICAgICB6eiA9ICggKGZmYyArIHp6KSAqIDEwMEwgKSAvIGZzaXplOworI2Vsc2UK KyAgICAgICAgICAgIHp6ID0gKCBmZmMgKiAxMDBMICkgLyBmc2l6ZTsKKyNlbmRpZiAvKiBDS19S RVNFTkQgKi8KKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHp6LCAgICAgICIgcGVyY2Vu dCBkb25lIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJjdHUgPT0gNCkgeyAgICAgICAgICAg ICAgICAvKiBCbG9jayBjaGVjayAqLworICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMEws IiBibG9jayBjaGVjazogIik7CisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwTCwiYmxh bmstZnJlZS0yIik7CisgICAgICAgIH0gZWxzZSB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZyliY3R1 LCAgIiBibG9jayBjaGVjayIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZylycHRm bGcsIiBjb21wcmVzc2lvbiIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9uZyllYnFm bGcsIiA4dGgtYml0IHByZWZpeGluZyIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCwobG9u Zylsc2NhcHUsIiBsb2NraW5nIHNoaWZ0cyIpOworICAgICAgICBpZiAoIW5ldHdvcmspCisgICAg ICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsIHNwZWVkLCAiIHNwZWVkIik7CisgICAgICAgIGlmICh3 aGF0ICYgV19TRU5EKQorCisgICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsc3BzaXosICIgcGFj a2V0IGxlbmd0aCIpOworICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWIHx8IHdoYXQgJiBX X1JFTU8pCisgICAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsdXJwc2l6LCIgcGFja2V0IGxlbmd0 aCIpOworICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx3c2xvdHMsICAiIHdpbmRvdyBzbG90cyIp OworICAgICAgICBmZGlzcGxhID0gb2ZkOyAvKiBbTUZdIFJlc3RvcmUgZmlsZSBkaXNwbGF5IHR5 cGUgKi8KKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlICdCJzogY2FzZSAnYic6IGNh c2UgMDAwMjogICAgLyogQ2FuY2VsIGJhdGNoICovCisgICAgICBjYXNlICdaJzogY2FzZSAneic6 IGNhc2UgMDAzMjoKKyAgICAgICAgY3pzZWVuID0gMTsKKyAgICAgICAgaW50ZXJydXB0ZWQgPSAx OworICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLAorICAgICAgICAgICAgICAgICAo KCh3aGF0ICYgV19SRUNWKSAmJiAod3Nsb3RzID4gMSkpID8KKyAgICAgICAgICAgICAgICAgICJD YW5jZWxpbmcgYmF0Y2gsIHdhaXQuLi4gIiA6CisgICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5n IGJhdGNoLi4uICIpCisgICAgICAgICAgICAgICAgICk7CisgICAgICAgIHJldHVybigwKTsKKwor ICAgICAgY2FzZSAnRic6IGNhc2UgJ2YnOiBjYXNlIDAwMDY6ICAgIC8qIENhbmNlbCBmaWxlICov CisgICAgICBjYXNlICdYJzogY2FzZSAneCc6IGNhc2UgMDAzMDoKKyAgICAgICAgY3hzZWVuID0g MTsKKyAgICAgICAgaW50ZXJydXB0ZWQgPSAxOworICAgICAgICB4eHNjcmVlbihTQ1JfU1QsU1Rf TVNHLDBsLAorICAgICAgICAgICAgICAgICAoKCh3aGF0ICYgV19SRUNWKSAmJiAod3Nsb3RzID4g MSkpID8KKyAgICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgZmlsZSwgd2FpdC4uLiAiIDoKKyAg ICAgICAgICAgICAgICAgICJDYW5jZWxpbmcgZmlsZS4uLiAiKQorICAgICAgICAgICAgICAgICAp OworICAgICAgICByZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgJ1InOiBjYXNlICdyJzogY2FzZSAw MDIyOiAgICAvKiBSZXNlbmQgcGFja2V0ICovCisgICAgICBjYXNlIDAwMTU6IGNhc2UgMDAxMjoK KyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgaWYgKHN0cmVhbWluZykKKyAgICAgICAgICByZXR1 cm4oMCk7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAgIHh4c2NyZWVuKFNDUl9TVCxT VF9NU0csMGwsIlJlc2VuZGluZyBwYWNrZXQuLi4gIik7CisgICAgICAgIG51bWVycnMrKzsKKyAg ICAgICAgcmVzZW5kKHdpbmxvKTsKKyAgICAgICAgcmV0dXJuKDApOworCisjaWZkZWYgZGF0YWdl bmVyYWwKKyAgICAgIGNhc2UgJ1wwMyc6ICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSdyZSBu b3QgdHJhcHBpbmcgXkMncyB3aXRoICovCisgICAgICAgIHRyYXAoMCk7ICAgICAgICAgICAgICAg ICAgICAgICAgLyogc2lnbmFscywgc28gd2UgY2hlY2sgaGVyZSAgICAqLworI2VuZGlmIC8qIGRh dGFnZW5lcmFsICovCisKKyAgICAgIGNhc2UgJ0MnOiBjYXNlICdjJzogICAgICAgICAgICAgICAv KiBDdHJsLUMgKi8KKyNpZm5kZWYgZGF0YWdlbmVyYWwKKyAgICAgIGNhc2UgJ1wwMyc6CisjZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KKworICAgICAgY2FzZSAnRSc6IGNhc2UgJ2UnOiAgICAgICAg ICAgICAgIC8qIFNlbmQgZXJyb3IgcGFja2V0ICovCisgICAgICBjYXNlIDAwMDU6CisgICAgICAg IGludGVycnVwdGVkID0gMTsKKyAgICAgICAgcmV0dXJuKC0xKTsKKworI2lmZGVmIENLX0NVUlNF UworICAgICAgY2FzZSAwMDE0OiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtTCB0byBy ZWZyZXNoIHNjcmVlbiAqLworICAgICAgY2FzZSAnTCc6IGNhc2UgJ2wnOiAgICAgICAgICAgICAg IC8qIEFsc28gYWNjZXB0IEwgKHVwcGVyLCBsb3dlcikgKi8KKyAgICAgIGNhc2UgMDAyNzogICAg ICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLVcgc3lub255bSBmb3IgVk1TICYgSW5ncmVzICov CisgICAgICAgIHJlcGFpbnQgPSAxOworICAgICAgICByZXR1cm4oMCk7CisjZW5kaWYgLyogQ0tf Q1VSU0VTICovCisKKyAgICAgIGNhc2UgJ1QnOgorICAgICAgY2FzZSAndCc6CQkJCS8qIFR1cm4g b24gZGVidWctbG9nIHRpbWVzdGFtcHMgKi8KKyNpZmRlZiBERUJVRworCXsKKwkgICAgZXh0ZXJu IGludCBkZWJ0aW07CisJICAgIGlmIChjaCA9PSAnVCcpIHsKKwkJZGVidGltID0gMTsKKwkJeHhz Y3JlZW4oU0NSX1NULFNUX01TRywwbCwKKwkJCSAiRGVidWcgdGltZXN0YW1wcyBPbi4uLiAiKTsK KwkgICAgfSBlbHNlIHsKKwkJZGVidGltID0gMTsKKwkJeHhzY3JlZW4oU0NSX1NULFNUX01TRyww bCwKKwkJCSAiRGVidWcgdGltZXN0YW1wcyBPZmYuLi4gIik7CisJICAgIH0KKwl9CisjZW5kaWYg LyogREVCVUcgKi8KKwlyZXR1cm4oMCk7CisKKyAgICAgIGNhc2UgJ0QnOgorI2lmZGVmIERFQlVH CisJaWYgKCFkZWJsb2cpIHsKKwkgICAgZGVib3BuKCJkZWJ1Zy5sb2ciLDApOworCSAgICBpZiAo ZGVibG9nKSB7CisJCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsImRlYnVnLmxvZyBvcGVuLi4u ICIpOworCSAgICB9IGVsc2UgeworCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJkZWJ1Zy5s b2cgb3BlbiBGQUlMRUQuLi4gIik7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICB4eHNjcmVlbihT Q1JfU1QsU1RfTVNHLDBsLCJEZWJ1ZyBsb2cgT24uLi4gIik7CisJfQorCWlmIChkZWJsb2cpCisJ ICBkZWJvayA9IDE7CisjZW5kaWYgLyogREVCVUcgKi8KKwlyZXR1cm4oMCk7CisKKyAgICAgIGNh c2UgJ2QnOgkJCQkvKiBUdXJuIG9mZiBkZWJ1Z2dpbmcgKi8KKyNpZmRlZiBERUJVRworCWlmIChk ZWJsb2cpCisJICB4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJEZWJ1ZyBsb2cgT2ZmLi4uICIp OworCWRlYm9rID0gMDsKKyNlbmRpZiAvKiBERUJVRyAqLworCXJldHVybigwKTsKKworICAgICAg ZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueXRoaW5nIGVsc2UsIHByaW50 IG1lc3NhZ2UgKi8KKyAgICAgICAgaW50bXNnKDFMKTsKKyAgICAgICAgcmV0dXJuKDApOworICAg IH0KK30KKworLyogIEkgTiBUIE0gUyBHICAtLSAgSXNzdWUgbWVzc2FnZSBhYm91dCB0ZXJtaW5h bCBpbnRlcnJ1cHRzICAqLworCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2ludG1zZyhsb25nIG4p CisjZWxzZQoraW50bXNnKG4pIGxvbmcgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogaW50 bXNnICovIHsKKyNpZmRlZiBDS19ORUVEX1NJRworICAgIGNoYXIgYnVmWzgwXTsKKyNlbmRpZiAv KiBDS19ORUVEX1NJRyAqLworCisgICAgaWYgKCFkaXNwbGEgfHwgcXVpZXQpICAgICAgICAgICAg ICAgLyogTm90IGlmIHdlJ3JlIGJlaW5nIHF1aWV0ICovCisgICAgICByZXR1cm47CisgICAgaWYg KHNlcnZlciAmJiAoIXNydmRpcyB8fCBuID4gLTFMKSkgLyogU3BlY2lhbCBmb3Igc2VydmVyICov CisgICAgICByZXR1cm47CisjaWZkZWYgQ0tfTkVFRF9TSUcKKyAgICBidWZbMF0gPSBOVUw7ICAg ICAgICAgICAgICAgICAgICAgICAvKiBLZWVwIGNvbXBpbGVycyBoYXBweSAqLworI2VuZGlmIC8q IENLX05FRURfU0lHICovCisjaWZuZGVmIE9YT1MKKyNpZmRlZiBTVk9SUE9TSVgKKyAgICBjb25j aGsoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBvdXQgcGVuZGluZyBlc2Nh cGUtc2lnbmFscyAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2VuZGlmIC8qICEgT1hPUyAq LworI2lmZGVmIFZNUworICAgIGNvbnJlcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFNvIEN0cmwtQyB3aWxsIHdvcmsgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBpZiAoKCFzZXJ2 ZXIgJiYgbiA9PSAxTCkgfHwgKHNlcnZlciAmJiBuIDwgMEwpKSB7CisKKyNpZmRlZiBDS19ORUVE X1NJRworICAgICAgICBpZiAoeGZyaW50KSB7CisJICAgIGNrbWFrbXNnKGJ1ZiwKKwkJICAgICA4 MCwKKwkJICAgICAiVHlwZSBlc2NhcGUgY2hhcmFjdGVyICgiLAorCQkgICAgIGRiY2hyKGVzY2Fw ZSksCisJCSAgICAgIikgZm9sbG93ZWQgYnk6IiwKKwkJICAgICBOVUxMCisJCSAgICAgKTsKKyAg ICAgICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBsLGJ1Zik7CisgICAgICAgIH0KKyNlbmRpZiAv KiBDS19ORUVEX1NJRyAqLworCisgICAgICAgIGlmICh4ZnJpbnQpIHsKKyAgICAgICAgICAgIGlm IChwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIlggdG8gY2Fu Y2VsIGZpbGUsICBDUiB0byByZXNlbmQgY3VycmVudCBwYWNrZXQiKTsKKyB4eHNjcmVlbihTQ1Jf VE4sMCwwbCwiWiB0byBjYW5jZWwgZ3JvdXAsIEEgZm9yIHN0YXR1cyByZXBvcnQiKTsKKyB4eHNj cmVlbihTQ1JfVE4sMCwwbCwiRSB0byBzZW5kIEVycm9yIHBhY2tldCwgQ3RybC1DIHRvIHF1aXQg aW1tZWRpYXRlbHk6ICIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB4 eHNjcmVlbihTQ1JfVE4sMCwwbCwiQ3RybC1DIHRvIGNhbmNlbCBmaWxlIHRyYW5zZmVyOiAiKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHh4c2NyZWVuKFND Ul9UTiwwLDBsLCJUcmFuc2ZlciBpbnRlcnJ1cHRpb24gZGlzYWJsZWQuICIpOworICAgICAgICB9 CisgICAgfQorICAgIGVsc2UgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiAiKTsKK30KKworI2lmbmRl ZiBOT0RJU1BMQVkKK3N0YXRpYyBpbnQgbmV3ZHB5ID0gMDsgICAgICAgICAgICAgICAgICAvKiBO ZXcgZGlzcGxheSBmbGFnICovCitzdGF0aWMgY2hhciBmYnVmWzgwXTsgICAgICAgICAgICAgICAg ICAgLyogRmlsZW5hbWUgYnVmZmVyICovCitzdGF0aWMgY2hhciBhYnVmWzgwXTsgICAgICAgICAg ICAgICAgICAgLyogQXMtbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBjaGFyIGEyYnVmWzgwXTsgICAg ICAgICAgICAgICAgICAvKiBTZWNvbmQgQXMtbmFtZSBidWZmZXIgKi8KK3N0YXRpYyBDS19PRkZf VCBvbGRmZmMgPSAwTDsKK3N0YXRpYyBDS19PRkZfVCBkb3RzID0gMEw7CitzdGF0aWMgaW50IGhw b3MgPSAwOworCitzdGF0aWMgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5p dGlhbGl6ZSBTZXJpYWwgb3IgQ1JUIGRpc3BsYXkgKi8KK2RweWluaXQoKSB7CisgICAgaW50IG0g PSAwLCBuID0gMDsKKyAgICBjaGFyICogcyA9ICIiOworCisgICAgbmV3ZHB5ID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgLyogIERvbid0IGRvIHRoaXMgYWdhaW4gKi8KKyAgICBvbGRmZmMg PSAoQ0tfT0ZGX1QpMDsJCS8qICBSZXNldCB0aGlzICovCisgICAgZG90cyA9IChDS19PRkZfVCkw OwkJCS8qICBhbmQgdGhpcy4uICovCisgICAgb2xkY3BzID0gY3BzID0gMEw7CisKKyAgICBjb25v bGwoIiIpOwkJCQkvKiBOZXcgbGluZSAqLworICAgIGlmICh3aGF0ICYgV19TRU5EKSBzID0gIlNl bmRpbmc6ICI7CS8qIEFjdGlvbiAqLworICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIHMgPSAi UmVjZWl2aW5nOiAiOworICAgIG4gPSAoaW50KXN0cmxlbihzKSArIChpbnQpc3RybGVuKGZidWYp OworICAgIGNvbm9sKGZidWYpOworICAgIG0gPSAoaW50KXN0cmxlbihhYnVmKSArIDQ7CisgICAg aWYgKG4gKyBtID4gY21kX2NvbHMpIHsKKyAgICAgICAgY29ub2xsKCIiKTsKKyAgICAgICAgbiA9 IDA7CisgICAgfSBlbHNlCisgICAgICBuICs9IG07CisgICAgaWYgKCphYnVmKSB7CisgICAgICAg IGNvbm9sKCIgPT4gIik7CisgICAgICAgIGNvbm9sKGFidWYpOworICAgIH0KKyAgICBtID0gKGlu dClzdHJsZW4oYTJidWYpICsgNDsKKyAgICBpZiAobiArIG0gPiBjbWRfY29scykgeworICAgICAg ICBjb25vbGwoIiIpOworICAgICAgICBuID0gMDsKKyAgICB9IGVsc2UKKyAgICAgIG4gKz0gbTsK KyAgICBpZiAoKmEyYnVmKSB7CisgICAgICAgIGNvbm9sKCIgPT4gIik7CisgICAgICAgIGNvbm9s KGEyYnVmKTsKKyAgICB9CisgICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBO VUw7CisgICAgY29ub2xsKCIiKTsKKyAgICBpZiAoZnNpemUgPiAoQ0tfT0ZGX1QpLTEpIHsJCS8q IFNpemUgKi8KKyAgICAgICAgc3ByaW50ZihmYnVmLCJTaXplOiAlcywgVHlwZTogIixja2ZzdG9h KGZzaXplKSk7IC8qIFNBRkUgKDgwKSAqLworICAgICAgICBjb25vbChmYnVmKTsgKmZidWYgPSBO VUw7CisgICAgfSBlbHNlIGNvbm9sKCJTaXplOiB1bmtub3duLCBUeXBlOiAiKTsKKyAgICBpZiAo YmluYXJ5KSB7CQkJLyogVHlwZSAqLworICAgICAgICBzd2l0Y2goYmluYXJ5KSB7CisgICAgICAg ICAgICAgIGNhc2UgWFlGVF9MOiBjb25vbCgibGFiZWxlZCIpOyBicmVhazsKKyAgICAgICAgICAg ICAgY2FzZSBYWUZUX0k6IGNvbm9sKCJpbWFnZSIpOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz ZSBYWUZUX1U6IGNvbm9sKCJiaW5hcnkgdW5kZWZpbmVkIik7IGJyZWFrOworICAgICAgICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgICBjYXNlIFhZRlRfQjogY29ub2woImJpbmFyeSIpOyBi cmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisjaWZkZWYgTk9DU0VUUworICAgICAgICBj b25vbCgidGV4dCIpOworI2Vsc2UKKyAgICAgICAgY29ub2woInRleHQsICIpOworICAgICAgICBp ZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQIHx8IHhmcnhsYSA9PSAwKSB7CisgICAgICAgICAgICBj b25vbCgidHJhbnNwYXJlbnQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh3 aGF0ICYgV19TRU5EKSB7CisgICAgICAgICAgICAgICAgY29ub2woZmNzaW5mb1tmY2hhcnNldF0u a2V5d29yZCk7CisgICAgICAgICAgICAgICAgY29ub2woIiA9PiAiKTsKKyAgICAgICAgICAgICAg ICBjb25vbCh0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgY29ub2wodGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7CisgICAg ICAgICAgICAgICAgY29ub2woIiA9PiAiKTsKKyAgICAgICAgICAgICAgICBjb25vbChmY3NpbmZv W2ZjaGFyc2V0XS5rZXl3b3JkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8q IE5PQ1NFVFMgKi8KKyAgICB9CisjaWZkZWYgU1RSRUFNSU5HCisgICAgaWYgKHN0cmVhbWluZykK KyAgICAgIGNvbm9sKCIsIFNUUkVBTUlORyIpOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAg IGNvbm9sbCgiIik7CisKKyAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1MpIHsgICAgICAgICAgICAv KiBDUlQgZmllbGQgaGVhZGluZ3MgKi8KKy8qCisgIERlZmluZSBDS19DUFMgdG8gc2hvdyBjdXJy ZW50IHRyYW5zZmVyIHJhdGUuCisgIExlYXZlIGl0IHVuZGVmaW5lZCB0byBzaG93IGVzdGltYXRl ZCB0aW1lIHJlbWFpbmluZy4KKyAgRXN0aW1hdGVkLXRpbWUtcmVtYWluaW5nIGNvZGUgZnJvbSBB bmR5IEZ5ZmUsIG5vdCB0ZXN0ZWQgb24KKyAgcGF0aG9sb2dpY2FsIGNhc2VzLgorKi8KKyNkZWZp bmUgQ0tfQ1BTCisKKyNpZmRlZiBDS19DUFMKKyAgICAgICAgY29ub2xsKCIgICAgRmlsZSAgIFBl cmNlbnQgICAgICAgUGFja2V0Iik7CisgICAgICAgIGNvbm9sbCgiICAgIEJ5dGVzICBEb25lICAg ICBDUFMgIExlbmd0aCIpOworI2Vsc2UKKyAgICAgICAgY29ub2xsKCIgICAgRmlsZSAgIFBlcmNl bnQgIFNlY3MgUGFja2V0Iik7CisgICAgICAgIGNvbm9sbCgiICAgIEJ5dGVzICBEb25lICAgICBM ZWZ0IExlbmd0aCIpOworI2VuZGlmIC8qIENLX0NQUyAqLworICAgICAgICBuZXdkcHkgPSAwOwor ICAgIH0KKyAgICBocG9zID0gMDsKK30KKworLyoKKyAgc2hvd3BrdChjKQorICBjID0gY29tcGxl dGlvbiBjb2RlOiAwIG1lYW5zIHRyYW5zZmVyIGluIHByb2dyZXNzLCBub256ZXJvIG1lYW5zIGl0 J3MgZG9uZS4KKyAgU2hvdyB0aGUgZmlsZSB0cmFuc2ZlciBwcm9ncmVzcyBjb3VudGVyIGFuZCBw ZXJoYXBzIHZlcmJvc2UgcGFja2V0IHR5cGUuCisqLworVk9JRAorI2lmZGVmIENLX0FOU0lDCitz aG93cGt0KGNoYXIgYykKKyNlbHNlCitzaG93cGt0KGMpIGNoYXIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworLyogc2hvd3BrdCAqLyB7CisKKyNpZm5kZWYgR0ZUSU1FUgorICAgIGxvbmcgZXQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsYXBzZWQgdGltZSwgZW50aXJlIGJhdGNo ICAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICBDS19PRkZfVCBob3dmYXI7CQkJLyogSG93 IGZhciBpbnRvIGZpbGUgKi8KKyAgICBsb25nIHBkOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQZXJjZW50IGRvbmUsIHRoaXMgZmlsZSAgICAgKi8KKyAgICBsb25nIHRwOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciByYXRlLCBlbnRpcmUgYmF0Y2ggKi8KKyAg ICBsb25nIHBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgc2l6ZSwgY3Vy cmVudCBwYWNrZXQgKi8KKyAgICBDS19PRkZfVCBteXRmYzsJCQkvKiBMb2NhbCBjb3B5IG9mIGJ5 dGUgY291bnRlciAgKi8KKworI2lmZGVmIEdGVElNRVIKKyAgICBDS0ZMT0FUIHRub3c7CisjZW5k aWYgLyogR0ZUSU1FUiAqLworCisgICAgaWYgKG5ld2RweSkgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUHV0IHVwIGZpbGVuYW1lcywgZXRjLCAqLworICAgICAgZHB5aW5pdCgpOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGlmIHRoZXkncmUgbm90IHRoZXJlIGFscmVhZHkuICovCisKKyAg ICBob3dmYXIgPSBmZmM7ICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3cgZmFyICovCisvKgor ICBDYWxjdWxhdGUgQ1BTIHJhdGUgZXZlbiBpZiBub3QgZGlzcGxheWluZyBvbiBzY3JlZW4gZm9y IHVzZSBpbiBmaWxlCisgIHRyYW5zZmVyIHN0YXRpc3RpY3MuCisqLworI2lmZGVmIEdGVElNRVIK KyAgICB0bm93ID0gZ2Z0aW1lcigpOyAgICAgICAgICAgICAgICAgICAvKiBUaW1lIHNpbmNlIHdl IHN0YXJ0ZWQgKi8KKyAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/IHJwa3RsIDogc3BrdGw7IC8q IFBhY2tldCBzaXplICovCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgaWYgKHdoYXQgJiBXX1NFTkQp CQkJLyogSW4gY2FzZSB3ZSBkaWRuJ3Qgc3RhcnQgYXQgKi8KKyAgICAgIGhvd2ZhciArPSBzZW5k c3RhcnQ7ICAgICAgICAgICAgICAvKiAgdGhlIGJlZ2lubmluZy4uLiAqLworICAgIGVsc2UgaWYg KHdoYXQgJiBXX1JFQ1YpCisgICAgICBob3dmYXIgKz0gcnNfbGVuOworI2VuZGlmIC8qIENLX1JF U0VORCAqLworICAgIHBkID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBlcmNl bnQgZG9uZS4gKi8KKyAgICBpZiAoYyA9PSBOVUwpIHsgICAgICAgICAgICAgICAgICAgICAvKiBT dGlsbCBnb2luZywgZmlndXJlICUgZG9uZSAqLworICAgICAgICBpZiAoIWZzaXplKSByZXR1cm47 CQkvKiBFbXB0eSBmaWxlLCBkb24ndCBib3RoZXIgKi8KKyAgICAgICAgcGQgPSAoZnNpemUgPiA5 OSkgPyAoaG93ZmFyIC8gKGZzaXplIC8gKENLX09GRl9UKTEwMCkpIDogMDsKKyAgICAgICAgaWYg KHBkID4gMTAwKSBwZCA9IDEwMDsgICAgICAgICAvKiBFeHBhbnNpb24gKi8KKyAgICB9CisgICAg aWYgKGMgIT0gTlVMKQorICAgICAgaWYgKCFjeHNlZW4gJiYgIWRpc2NhcmQgJiYgIWN6c2VlbikK KyAgICAgICAgcGQgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGNvbXBsZXRl LCBzbyAxMDAlLiAqLworCisgICAgbXl0ZmMgPSAocGQgPCAxMDApID8gdGZjICsgZmZjIDogdGZj OyAgICAvKiBDUFMgKi8KKyAgICB0cCA9IChsb25nKSgodG5vdyA+IDAuMCkgPyAoQ0tGTE9BVCkg bXl0ZmMgLyB0bm93IDogMCk7CisgICAgaWYgKGMgJiYgKHRwID09IDApKQorICAgICAgdHAgPSBm ZmM7CisKKyAgICBjcHMgPSB0cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgZ2xv YmFsIHZhcmlhYmxlICovCisgICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAgICAgICAgICAg LyogUGVhayB0cmFuc2ZlciByYXRlICovCisgICAgICAgICAoKHdoYXQgJiBXX1NFTkQgJiYgc3Bh Y2tldHMgPiB3c2xvdHMgKyA0KSB8fAorCSAgKCEod2hhdCAmIFdfU0VORCkgJiYgc3BhY2tldHMg PiAxMCkpKSB7CisgICAgICAgIHBlYWtjcHMgPSBjcHM7CisgICAgfQorCisjZWxzZSAgLyogTm90 IEdGVElNRVIgKi8KKworICAgIGV0ID0gZ3RpbWVyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8q IEVsYXBzZWQgdGltZSAgKi8KKyAgICBwcyA9ICh3aGF0ICYgV19SRUNWKSA/IHJwa3RsIDogc3Br dGw7IC8qIFBhY2tldCBsZW5ndGggKi8KKyNpZmRlZiBDS19SRVNFTkQKKyAgICBpZiAod2hhdCAm IFdfU0VORCkJCQkvKiBBbmQgaWYgd2UgZGlkbid0IHN0YXJ0IGF0ICovCisgICAgICBob3dmYXIg Kz0gc2VuZHN0YXJ0OyAgICAgICAgICAgICAgLyogIHRoZSBiZWdpbm5pbmcuLi4gKi8KKyAgICBl bHNlIGlmICh3aGF0ICYgV19SRUNWKQorICAgICAgaG93ZmFyICs9IHJzX2xlbjsKKyNlbmRpZiAv KiBDS19SRVNFTkQgKi8KKyAgICBwZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQZXJjZW50IGRvbmUuICovCisgICAgaWYgKGMgPT0gTlVMKSB7ICAgICAgICAgICAgICAgICAg ICAgLyogU3RpbGwgZ29pbmcsIGZpZ3VyZSAlIGRvbmUgKi8KKyAgICAgICAgaWYgKGZzaXplID09 IDBMKSByZXR1cm47ICAgICAgICAvKiBFbXB0eSBmaWxlLCBkb24ndCBib3RoZXIgKi8KKyAgICAg ICAgcGQgPSAoZnNpemUgPiA5OSkgPyAoaG93ZmFyIC8gKGZzaXplIC8gKENLX09GRl9UKTEwMCkp IDogMDsKKyAgICAgICAgaWYgKHBkID4gMTAwKSBwZCA9IDEwMDsgICAgICAgICAvKiBFeHBhbnNp b24gKi8KKyAgICB9CisgICAgaWYgKGMgIT0gTlVMKQorICAgICAgaWYgKCFjeHNlZW4gJiYgIWRp c2NhcmQgJiYgIWN6c2VlbikKKyAgICAgICAgcGQgPSAxMDA7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBGaWxlIGNvbXBsZXRlLCBzbyAxMDAlLiAqLworCisKKyNpZm5kZWYgQ0tfQ1BTCisvKgor ICBmc2VjcyA9IHRpbWUgKGZyb20gZ3RpbWVyKSB0aGF0IHRoaXMgZmlsZSBzdGFydGVkIChzZXQg aW4gc2ZpbGUoKSkuCisgIFJhdGUgc28gZmFyIGlzIGZmYyAvIChldCAtIGZzZWNzKSwgIGVzdGlt YXRlZCB0aW1lIGZvciByZW1haW5pbmcgYnl0ZXMKKyAgaXMgKGZzaXplIC0gZmZjKSAvIChmZmMg LyAoZXQgLSBmc2VjcykpLgorKi8KKyAgICB0cCA9IChob3dmYXIgPiAwKSA/IChmc2l6ZSAtIGhv d2ZhcikgKiAoZXQgLSBmc2VjcykgLyBob3dmYXIgOiAwOworI2VuZGlmIC8qIENLX0NQUyAqLwor CisjaWZkZWYgQ0tfQ1BTCisgICAgbXl0ZmMgPSAocGQgPCAxMDApID8gdGZjICsgZmZjIDogdGZj OworICAgIHRwID0gKGV0ID4gMCkgPyBteXRmYyAvIGV0IDogMDsJLyogVHJhbnNmZXIgcmF0ZSAq LworICAgIGlmIChjICYmICh0cCA9PSAwKSkJCQkvKiBXYXRjaCBvdXQgZm9yIHN1YnNlY29uZCB0 aW1lcyAqLworICAgICAgICB0cCA9IGZmYzsKKworICAgIGNwcyA9IHRwOwkJCQkvKiBTZXQgZ2xv YmFsIHZhcmlhYmxlICovCisgICAgaWYgKGNwcyA+IHBlYWtjcHMgJiYgICAgICAgICAgICAgICAg LyogUGVhayB0cmFuc2ZlciByYXRlICovCisgICAgICAgICAoKHdoYXQgJiBXX1NFTkQgJiYgc3Bh Y2tldHMgPiB3c2xvdHMgKyA0KSB8fAorCSAgKCEod2hhdCAmIFdfU0VORCkgJiYgc3BhY2tldHMg PiAxMCkpKSB7CisgICAgICAgIHBlYWtjcHMgPSBjcHM7CisgICAgfQorI2VuZGlmIC8qIENLX0NQ UyAqLworCisjZW5kaWYgLyogR0ZUSU1FUiAqLworCisgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9T KSB7ICAgICAgICAgICAgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAgY2hhciBidWZmZXJbMTI4 XTsKKwkvKiBUaGVzZSBzcHJpbnRmcyBzaG91bGQgYmUgc2FmZSB1bnRpbCB3ZSBoYXZlIDMyLWRp Z2l0IG51bWJlcnMgKi8KKworICAgICAgICBpZiAocGQgPiAtMUwpCisgICAgICAgICAgc3ByaW50 ZihidWZmZXIsICIlYyU5cyU1bGQlJSU4bGQlOGxkICIsIENSLGNrZnN0b2EoaG93ZmFyKSxwZCx0 cCxwcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVjJTlzICAg ICAgJThsZCU4bGQgIiwgQ1IsY2tmc3RvYShob3dmYXIpLHRwLHBzKTsKKyAgICAgICAgY29ub2wo YnVmZmVyKTsKKyAgICAgICAgaHBvcyA9IDMxOworICAgIH0gZWxzZSBpZiAoZmRpc3BsYSA9PSBY WUZEX1IpIHsgICAgIC8qIFNFUklBTCAqLworICAgICAgICBsb25nIGksIGs7CisgICAgICAgIGlm IChob3dmYXIgLSBvbGRmZmMgPCAxMDI0KSAgICAgLyogVXBkYXRlIGRpc3BsYXkgZXZlcnkgMUsg Ki8KKyAgICAgICAgICByZXR1cm47CisgICAgICAgIG9sZGZmYyA9IGhvd2ZhcjsgICAgICAgICAg ICAgICAgLyogVGltZSBmb3IgbmV3IGRpc3BsYXkgKi8KKyAgICAgICAgayA9IChob3dmYXIgLyAx MDI0TCkgLSBkb3RzOyAgICAvKiBIb3cgbWFueSBLIHNvIGZhciAqLworICAgICAgICBmb3IgKGkg PSAwTDsgaSA8IGs7IGkrKykgeworICAgICAgICAgICAgaWYgKGhwb3MrKyA+IChjbWRfY29scyAt IDMpKSB7IC8qIFRpbWUgdG8gd3JhcD8gKi8KKyAgICAgICAgICAgICAgICBjb25vbGwoIiIpOwor ICAgICAgICAgICAgICAgIGhwb3MgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29u b2MoJy4nKTsgICAgICAgICAgICAgICAgIC8qIFByaW50IGEgZG90IGZvciB0aGlzIEsgKi8KKyAg ICAgICAgICAgIGRvdHMrKzsgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLworICAg ICAgICB9CisgICAgfQorfQorCisKKy8qICBDIEsgUyBDIFIgRSBFIE4gIC0tICBTY3JlZW4gZGlz cGxheSBmdW5jdGlvbiAgKi8KKworLyoKKyAgY2tzY3JlZW4oZixjLG4scykKKyAgICBmIC0gYXJn dW1lbnQgZGVzY3JpcHRvcgorICAgIGMgLSBhIGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyCisg ICAgbiAtIGEgbG9uZyBpbnRlZ2VyCisgICAgcyAtIGEgc3RyaW5nLgorCisgIGFuZCBnbG9iYWwg ZmRpc3BsYSA9IFNFVCBGSUxFIERJU1BMQVkgdmFsdWU6CisKKyAgICBYWUZEX04gPSBOT05FCisg ICAgWFlGRF9SID0gU0VSSUFMOiAgICAgRG90cywgZXRjLCB3b3JrcyBvbiBhbnkgdGVybWluYWws IGV2ZW4gaGFyZGNvcHkuCisgICAgWFlGRF9TID0gQ1JUOiAgICAgICAgV29ya3Mgb24gYW55IENS VCwgd3JpdGVzIG92ZXIgY3VycmVudCBsaW5lLgorICAgIFhZRkRfQyA9IEZVTExTQ1JFRU46IFJl cXVpcmVzIHRlcm1pbmFsLWRlcGVuZGVudCBzY3JlZW4gY29udHJvbC4KKyAgICBYWUZEX0IgPSBC UklFRjogICAgICBMaWtlIFNFUklBTCBidXQgb25seSBmaWxlbmFtZSAmIGNvbXBsZXRpb24gc3Rh dHVzLgorICAgIFhZRkRfRyA9IEdVSTsgICAgICAgIFdpbmRvd3MgR1VJLCBzYW1lIGJlaGF2aW9y IGFzIEZVTExTQ1JFRU4KKyovCitWT0lECisjaWZkZWYgQ0tfQU5TSUMKK2Nrc2NyZWVuKGludCBm LCBjaGFyIGMsQ0tfT0ZGX1QgbixjaGFyICpzKQorI2Vsc2UKK2Nrc2NyZWVuKGYsYyxuLHMpIGlu dCBmOyBjaGFyIGM7IENLX09GRl9UIG47IGNoYXIgKnM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIHNjcmVlbiAqLyB7CisgICAgY2hhciBidWZbODBdOworICAgIGludCBsZW47ICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KKyNpZmRlZiBVTklYCisj aWZuZGVmIE5PSkMKKyAgICBpbnQgb2JnOworX1BST1RPVFlQKCBWT0lEIGNvbmJndCwgKGludCkg KTsKKyNlbmRpZiAvKiBOT0pDICovCisjZW5kaWYgLyogVU5JWCAqLworICAgIGludCBmdHAgPSAw OworCisgICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyogRlRQIG9yIEtlcm1pdD8g Ki8KKworICAgIGlmICghbG9jYWwgJiYgIWZ0cCkJCQkvKiBJbiByZW1vdGUgbW9kZSAtIGRvbid0 IGRvIHRoaXMgKi8KKyAgICAgIHJldHVybjsKKworICAgIGlmICghcykgcyA9ICIiOworCisgICAg aWYgKCFmeGRfaW5pdGVkKSAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBpZiBuZWNl c3NhcnkgKi8KKyAgICAgIGZ4ZGluaXQoZmRpc3BsYSk7CisKKyNpZmRlZiBVTklYCisjaWZuZGVm IE5PSkMKKyAgICBvYmcgPSBiYWNrZ3JkOyAgICAgICAgICAgICAgICAgICAgICAvKiBQcmV2aW91 cyBiYWNrZ3JvdW5kIHN0YXR1cyAqLworICAgIGNvbmJndCgxKTsgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFNlZSBpZiBydW5uaW5nIGluIGJhY2tncm91bmQgKi8KKyAgICBpZiAoIWJhY2tn cmQgJiYgb2JnKSB7ICAgICAgICAgICAgICAvKiBKdXN0IGNhbWUgaW50byBmb3JlZ3JvdW5kPyAq LworICAgICAgICBjb25jYigoY2hhcillc2NhcGUpOyAgICAgICAgICAgIC8qIFB1dCBjb25zb2xl IGJhY2sgaW4gQ0JSRUFLIG1vZGUgKi8KKyAgICAgICAgc2V0aW50KCk7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBSZXN0b3JlIGludGVycnVwdHMgKi8KKyAgICB9CisjZW5kaWYgLyogTk9KQyAq LworI2VuZGlmIC8qIFVOSVggKi8KKworICAgIGlmICgoZiAhPSBTQ1JfV00pICYmIChmICE9IFND Ul9FTSkpIC8qIEFsd2F5cyB1cGRhdGUgd2FybmluZ3MgJiBlcnJvcnMgKi8KKyAgICAgIGlmICgh ZGlzcGxhIHx8CisgICAgICAgICAgKGJhY2tncmQgJiYgYmdzZXQpIHx8CisgICAgICAgICAgZmRp c3BsYSA9PSBYWUZEX04gfHwKKyAgICAgICAgICAoc2VydmVyICYmICFzcnZkaXMpCisgICAgICAg ICAgKQorICAgICAgICByZXR1cm47CisKKyNpZmRlZiBWTVMKKyAgICBpZiAoZiA9PSBTQ1JfRk4p ICAgICAgICAgICAgICAgICAgICAvKiBWTVMgLSBzaG9ydGVuIHRoZSBuYW1lICovCisgICAgICBz ID0genJlbG5hbWUocyx6Z3RkaXIoKSk7CisjZW5kaWYgLyogVk1TICovCisKKyAgICBpZiAoZGVz dCA9PSBERVNUX1MpICAgICAgICAgICAgICAgICAvKiBTRVQgREVTVElOQVRJT04gU0NSRUVOICov CisgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHdvdWxkIGludGVy ZmVyZS4uLiAqLworCisjaWZkZWYgS1VJCisgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9HKSB7ICAg ICAgICAgICAgLyogSWYgZ3VpIGRpc3BsYXkgc2VsZWN0ZWQgKi8KKyAgICAgICAgc2NyZWVuZyhm LGMsbixzKTsgICAgICAgICAgICAgICAvKiBjYWxsIHRoZSBndWkgdmVyc2lvbiAqLworICAgICAg ICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENLX0NVUlNFUworICAg IGlmIChmZGlzcGxhID09IFhZRkRfQykgeyAgICAgICAgICAgIC8qIElmIGZ1bGxzY3JlZW4gZGlz cGxheSBzZWxlY3RlZCAqLworICAgICAgICBzY3JlZW5jKGYsYyxuLHMpOyAgICAgICAgICAgICAg IC8qIGNhbGwgdGhlIGZ1bGxzY3JlZW4gdmVyc2lvbiAqLworICAgICAgICByZXR1cm47CisgICAg fQorI2VuZGlmIC8qIENLX0NVUlNFUyAqLworCisgICAgbGVuID0gKGludClzdHJsZW4ocyk7ICAg ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLworCisgICAgc3dpdGNoIChmKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogSGFuZGxlIG91ciBmdW5jdGlvbiBjb2RlICovCisgICAg ICBjYXNlIFNDUl9GTjogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgKi8KKyAgICAg ICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisjaWZkZWYgTkVXRlRQCisJICAgIGlmIChmdHAp CisJICAgICAgcHJpbnRmKCIgJXMgJXMiLCB3aGF0ICYgV19TRU5EID8gIlBVVCIgOiAiR0VUIiwg cyk7CisJICAgIGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkgICAgICBwcmludGYoIiAlcyAl cyIsIHdoYXQgJiBXX1NFTkQgPyAiU0VORCIgOiAiUkVDViIsIHMpOworI2lmZGVmIFVOSVgKKyAg ICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgfQorI2lmZGVmIE1BQworICAgICAgICBjb25vbGwoIiIpOyBjb25v bChzKTsgY29ub2MoU1ApOyBocG9zID0gbGVuICsgMTsKKyNlbHNlCisgICAgICAgIGNrc3RybmNw eShmYnVmLHMsODApOworICAgICAgICBhYnVmWzBdID0gYTJidWZbMF0gPSBOVUw7CisgICAgICAg IG5ld2RweSA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogTmV3IGZpbGUgc28gcmVmcmVzaCBk aXNwbGF5ICovCisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2Fz ZSBTQ1JfQU46ICAgICAgICAgICAgICAgICAgICAgIC8qIEFzLW5hbWUgKi8KKyAgICAgICAgaWYg KGZkaXNwbGEgPT0gWFlGRF9CKSB7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcHJpbnRm KCIoYXMgJXMpICIscyk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgcmV0dXJu OworICAgICAgICB9CisjaWZkZWYgTUFDCisgICAgICAgIGlmIChocG9zICsgbGVuID4gNzUpIHsg Y29ub2xsKCIiKTsgaHBvcyA9IDA7IH0KKyAgICAgICAgY29ub2woIj0+ICIpOyBjb25vbChzKTsK KyAgICAgICAgaWYgKChocG9zICs9IChsZW4gKyAzKSkgPiA3OCkgeyBjb25vbGwoIiIpOyBocG9z ID0gMDsgfQorI2Vsc2UKKyAgICAgICAgaWYgKGFidWZbMF0pIHsKKyAgICAgICAgICAgIGNrc3Ry bmNweShhMmJ1ZixzLDgwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNrc3RybmNw eShhYnVmLHMsODApOworICAgICAgICB9CisjZW5kaWYgLyogTUFDICovCisgICAgICAgIHJldHVy bjsKKworICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUtc2l6 ZSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgIHByaW50 ZigiICglcykgKCVzIGJ5dGUlcykiLAorI2lmZGVmIE5PSUNQCisgICAgICAgICAgICAgICAgICAg KGJpbmFyeSA/ICJiaW5hcnkiIDogInRleHQiKQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICBn Zm1vZGUoYmluYXJ5LDApCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICAgICAs IGNrZnN0b2EobiksIG4gPT0gMSA/ICIiIDogInMiKTsKKyNpZmRlZiBVTklYCisgICAgICAgICAg ICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgICAgICByZXR1cm47 CisgICAgICAgIH0KKyNpZmRlZiBNQUMKKyAgICAgICAgc3ByaW50ZihidWYsIiwgU2l6ZTogJXMi LGNrZnN0b2EobikpOyAgY29ub2xsKGJ1Zik7ICBocG9zID0gMDsKKyNlbmRpZiAvKiBNQUMgKi8K KyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9YRDogICAgICAgICAgICAgICAgICAg ICAgLyogWC1wYWNrZXQgZGF0YSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCisg ICAgICAgICAgcmV0dXJuOworI2lmZGVmIE1BQworICAgICAgICBjb25vbGwoIiIpOyBjb25vbGwo cyk7IGhwb3MgPSAwOworI2Vsc2UKKyAgICAgICAgY2tzdHJuY3B5KGZidWYscyw4MCk7CisgICAg ICAgIGFidWZbMF0gPSBhMmJ1ZlswXSA9IE5VTDsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAg cmV0dXJuOworCisgICAgICBjYXNlIFNDUl9TVDogICAgICAgICAgICAgICAgICAgICAgLyogRmls ZSBzdGF0dXMgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgY2FzZSBTVF9PSzog ICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXJyZWQgT0sgKi8KKyAgICAgICAgICAgIHNob3dw a3QoJ1onKTsgICAgICAgICAgICAgICAvKiBVcGRhdGUgbnVtYmVycyBvbmUgbGFzdCB0aW1lICov CisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyNpZmRlZiBHRlRJTUVSCisJ CWlmIChmcHhmc2VjcykKKwkJICBwcmludGYoIjogT0sgKCUwLjNmIHNlYywgJWxkIGNwcykiLGZw eGZzZWNzLAorCQkJIChsb25nKSgoQ0tGTE9BVClmZmMgLyBmcHhmc2VjcykpOworI2Vsc2UKKwkJ aWYgKHhmc2VjcykKKwkJICBwcmludGYoIjogT0sgKCVkIHNlYywgJWxkIGNwcykiLHhmc2Vjcyxm ZmMveGZzZWNzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisJCXByaW50ZigiXG4iKTsKKyAgICAg ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGhwb3Mg Kz0gNSkgPiA3OCkgY29ub2xsKCIiKTsgLyogV3JhcCBzY3JlZW4gbGluZS4gKi8KKyAgICAgICAg ICAgIGNvbm9sbCgiIFtPS10iKTsgaHBvcyA9IDA7ICAvKiBQcmludCBPSyBtZXNzYWdlLiAqLwor ICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgIC8qIFdlIGRpZG4ndCBzaG93 IFogcGFja2V0IHdoZW4gKi8KKyAgICAgICAgICAgICAgICBjb25vYygnWicpOyAgICAgICAgICAg ICAvKiBpdCBjYW1lLCBzbyBzaG93IGl0IG5vdy4gKi8KKyAgICAgICAgICAgICAgICBocG9zID0g MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2Ug U1RfRElTQzogICAgICAgICAgICAgICAgIC8qICBEaXNjYXJkZWQgKi8KKyAgICAgICAgICAgIGlm IChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgIHByaW50ZigiOiBESVNDQVJE RURcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmICgoaHBvcyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsKKyAgICAgICAgICAgIGNvbm9s bCgiIFtkaXNjYXJkZWRdIik7IGhwb3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg ICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAgLyogIEludGVycnVwdGVkICovCisg ICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIjogSU5URVJSVVBURURcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICgoaHBvcyArPSAxNCkgPiA3OCkgY29ub2xsKCIiKTsKKyAg ICAgICAgICAgIGNvbm9sbCgiIFtpbnRlcnJ1cHRlZF0iKTsgaHBvcyA9IDA7CisgICAgICAgICAg ICByZXR1cm47CisKKwkgIGNhc2UgU1RfU0lNOgorICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0g WFlGRF9CKSB7CisJCWlmIChuID09IFNLUF9YTlgpCisJCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRS QU5TRkVSUkVEIChOZXcgZmlsZSlcbiIpOworCQllbHNlIGlmIChuID09IFNLUF9YVVApCisJCSAg cHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVSUkVEIChSZW1vdGUgZmlsZSBvbGRlcilcbiIpOwor CQllbHNlIGlmIChuID09IFNLUF9TSU0pCisJCSAgcHJpbnRmKCI6IFdPVUxEIEJFIFRSQU5TRkVS UkVEXG4iKTsKKwkJZWxzZSBpZiAobiA+IDAgJiYgbiA8IG5za3JlYXNvbikKKwkJICBwcmludGYo IjogU0tJUFBFRCAoJXMpXG4iLHNrcmVhc29uW25dKTsKKwkJZWxzZQorCQkgIHByaW50ZigiOiBT S0lQUEVEXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2Ug aWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7CisgICAgICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0g WFlGRF9TICYmIGZidWZbMF0pIHsgLyogQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAgICAgICAgICAg ICAgY29ub2xsKCIiKTsgICAgICAgICAvKiBOZXcgbGluZSAqLworICAgICAgICAgICAgICAgICAg ICBpZiAod2hhdCAmIFdfU0VORCkgY29ub2woIldvdWxkIFNlbmQ6ICIpOyAvKiBBY3Rpb24gKi8K KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikgY29ub2woIldvdWxk IFJlY2VpdmU6ICIpOworICAgICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKCphYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgLyogTmFt ZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29u b2woYTJidWYpOyAvKiBOYW1lcyAqLworICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsg KmFidWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgY29ub2xsKCIgW3NpbXVsYXRlZF0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTApID4gNzgpIGNvbm9sbCgi Iik7CisgICAgICAgICAgICBjb25vbCgiIFtzaW11bGF0ZWRdIik7IGhwb3MgPSAwOworICAgICAg ICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9TS0lQOiAgICAgICAgICAgICAgICAg LyogIFNraXBwZWQgKi8KKyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworCQlp ZiAobiA9PSBTS1BfWE5YKQorCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoTmV3 IGZpbGUpXG4iKTsKKwkJZWxzZSBpZiAobiA9PSBTS1BfWFVQKQorCQkgIHByaW50ZigiOiBXT1VM RCBCRSBUUkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIpXG4iKTsKKwkJZWxzZSBpZiAobiA9 PSBTS1BfU0lNKQorCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRFxuIik7CisJCWVs c2UgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCisJCSAgcHJpbnRmKCI6IFNLSVBQRUQgKCVz KVxuIixza3JlYXNvbltuXSk7CisJCWVsc2UKKwkJICBwcmludGYoIjogU0tJUFBFRFxuIik7Cisg ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxhID09 IFhZRkRfUykgeworICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUyAmJiBmYnVm WzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCisgICAgICAgICAgICAgICAgICAgIGNvbm9sbCgiIik7 ICAgICAgICAgLyogTmV3IGxpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgJiBX X1NFTkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICovCisgICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNlaXZpbmc6ICIpOworICAgICAg ICAgICAgICAgICAgICBjb25vbChmYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCphYnVm KSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgLyogTmFtZXMgKi8KKyAgICAgICAgICAgICAg ICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJidWYpOyAvKiBOYW1lcyAq LworICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFidWYgPSBOVUw7ICphMmJ1ZiA9 IE5VTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29ub2xsKCIgW3NraXBw ZWRdIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKChocG9zICs9IDEwKSA+IDc4KSBjb25vbGwoIiIpOworCSAgICBjb25vbCgiICIpOyBj b25vbChmYnVmKTsKKyAgICAgICAgICAgIGNvbm9sbCgiIFtza2lwcGVkXSIpOyBocG9zID0gMDsK KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfRVJSOiAgICAgICAgICAg ICAgICAgIC8qIEVycm9yICovCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsK KyAgICAgICAgICAgICAgICBwcmludGYoIjogRVJST1I6ICVzXG4iLHMpOworICAgICAgICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbm9sbCgiIik7CisgICAg ICAgICAgICBjb25vbCgiRXJyb3I6ICIpOyBjb25vbGwocyk7IGhwb3MgPSAwOworICAgICAgICAg ICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9NU0c6ICAgICAgICAgICAgICAgICAgLyog TWVzc2FnZSAqLworI2lmZGVmIE5FV0ZUUAorICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9CKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ0cCAmJiBmdHBfZGViKQorCQkgIHByaW50Zigi OiBNRVNTQUdFOiAlc1xuIixzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg ICB9CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAgICAgICBjb25vbGwoIiIpOworICAgICAg ICAgICAgY29ub2woIk1lc3NhZ2U6ICIpOworICAgICAgICAgICAgY29ub2xsKHMpOworICAgICAg ICAgICAgaHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNU X1JFRlU6ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2VkICovCisgICAgICAgICAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIjogUkVGVVNFRFxuIik7 CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIGlmIChmZGlzcGxh ID09IFhZRkRfUykgeworICAgICAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUyAmJiBm YnVmWzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCisgICAgICAgICAgICAgICAgICAgIGNvbm9sbCgi Iik7ICAgICAgICAgLyogTmV3IGxpbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQg JiBXX1NFTkQpIGNvbm9sKCJTZW5kaW5nOiAiKTsgLyogQWN0aW9uICovCisgICAgICAgICAgICAg ICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9sKCJSZWNlaXZpbmc6ICIpOworICAg ICAgICAgICAgICAgICAgICBjb25vbChmYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCph YnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhYnVmKTsgICAgICAvKiBOYW1lcyAqLworICAgICAg ICAgICAgICAgICAgICBpZiAoKmEyYnVmKSBjb25vbCgiID0+ICIpOyBjb25vbChhMmJ1Zik7ICAg IC8qIE5hbWVzICovCisgICAgICAgICAgICAgICAgICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5V TDsgKmEyYnVmID0gTlVMOworICAgICAgICAgICAgICAgICAgICBjb25vbGwoIiIpOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25vbCgiUmVmdXNlZDogIik7IGNvbm9sbChz KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj b25vbGwoIiIpOworICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6ICIpOyBjb25vbGwocyk7IGhw b3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9JTkM6ICAg ICAgICAgICAgICAgICAgLyogSW5jb21wbGV0ZSAqLworICAgICAgICAgICAgaWYgKGZkaXNwbGEg PT0gWFlGRF9CKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI6IElOQ09NUExFVEVcbiIpOwor ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo aHBvcyArPSAxMikgPiA3OCkgY29ub2xsKCIiKTsKKyAgICAgICAgICAgIGNvbm9sbCgiIFtpbmNv bXBsZXRlXSIpOyBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICBjb25vbGwoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQg c3RhdHVzICoqKiIpOworICAgICAgICAgICAgaHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47 CisgICAgICAgIH0KKworI2lmZGVmIE1BQworICAgICAgY2FzZSBTQ1JfUE46ICAgICAgICAgICAg ICAgICAgICAgIC8qIFBhY2tldCBudW1iZXIgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9CKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwlja21ha21zZyhidWYsODAs cywiOiAiLGNrbHRvYShuKSxOVUxMKTsKKyAgICAgICAgY29ub2woYnVmKTsgaHBvcyArPSAoaW50 KXN0cmxlbihidWYpOyByZXR1cm47CisjZW5kaWYgLyogTUFDICovCisKKyAgICAgIGNhc2UgU0NS X1BUOiAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICov CisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikKKyAgICAgICAgICByZXR1cm47CisgICAg ICAgIGlmIChjID09ICdZJykgcmV0dXJuOyAgICAgICAgICAgLyogRG9uJ3QgYm90aGVyIHdpdGgg QUNLcyAqLworICAgICAgICBpZiAoYyA9PSAnRCcpIHsgICAgICAgICAgICAgICAgIC8qIEluIGRh dGEgdHJhbnNmZXIgcGhhc2UsICovCisgICAgICAgICAgICBzaG93cGt0KE5VTCk7ICAgICAgICAg ICAgICAgLyogc2hvdyBwcm9ncmVzcy4gKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg fQorI2lmbmRlZiBBTUlHQQorICAgICAgICBpZiAoaHBvcysrID4gNzcpIHsgICAgICAgICAgICAg IC8qIElmIG5lYXIgcmlnaHQgbWFyZ2luLCAqLworICAgICAgICAgICAgY29ub2xsKCIiKTsgICAg ICAgICAgICAgICAgIC8qIFN0YXJ0IG5ldyBsaW5lICovCisgICAgICAgICAgICBocG9zID0gMDsg ICAgICAgICAgICAgICAgICAgLyogYW5kIHJlc2V0IGNvdW50ZXIuICovCisgICAgICAgIH0KKyNl bmRpZiAvKiBBTUlHQSAqLworICAgICAgICBpZiAoYyA9PSAnWicgJiYgZmRpc3BsYSA9PSBYWUZE X1MpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBlbHNlCisgICAgICAgICAgY29ub2MoYyk7 ICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgcGFja2V0IHR5cGUuICovCisjaWZk ZWYgQU1JR0EKKyAgICAgICAgaWYgKGMgPT0gJ0cnKSBjb25vbGwoIiIpOyAgICAgICAvKiBOZXcg bGluZSBhZnRlciBHIHBhY2tldHMgKi8KKyNlbmRpZiAvKiBBTUlHQSAqLworICAgICAgICByZXR1 cm47CisKKyAgICAgIGNhc2UgU0NSX1RDOiAgICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2Fj dGlvbiBjb21wbGV0ZSAqLworICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9OT1RFKTsKKyAg ICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7ICAgICAgICAvKiBCcmllZiBkaXNwbGF5Li4u ICovCisgICAgICAgICAgICBpZiAoZmlsY250ID4gMSkgeworICAgICAgICAgICAgICAgIGxvbmcg Zng7CisgICAgICAgICAgICAgICAgZnggPSBmaWxjbnQgLSBmaWxyZWo7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCIgU1VNTUFSWTogJWxkIGZpbGUlcyIsIGZ4LCAoKGZ4ID09IDEpID8gIiIgOiAi cyIpKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiwgJXMgYnl0ZSVzIiwgY2tmc3RvYSh0ZmMp LCAoKHRmYyA9PSAxKSA/ICIiIDogInMiKSk7CisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgICAg ICAgIHByaW50ZigiLCAlMC4zZiBzZWMsICVsZCBjcHMiLCBmcHRzZWNzLCB0ZmNwcyk7CisjZWxz ZQorICAgICAgICAgICAgICAgIHByaW50ZigiLCAlbGQgc2VjLCAlbGQgY3BzIiwgdHNlY3MsIHRm Y3BzKTsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAgICAgICAgcHJpbnRmKCIuXG4i KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbm9sbCgi Iik7CisgICAgICAgIH0KKyNpZmRlZiBVTklYCisgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2Vu ZGlmIC8qIFVOSVggKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9FTTogICAg ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgbWVzc2FnZSAqLworICAgICAgICBpZiAoZmRpc3Bs YSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgIHByaW50ZigiIEVSUk9SOiAlc1xuIixzKTsKKyAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25vbGwoIiIpOyBjb25vYygn PycpOyBjb25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1dNOiAg ICAgICAgICAgICAgICAgICAgICAvKiBXYXJuaW5nIG1lc3NhZ2UgKi8KKyAgICAgICAgaWYgKGZk aXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICBwcmludGYoIiBXQVJOSU5HOiAlc1xuIixz KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjb25vbGwoIiIpOyBj b25vbGwocyk7IGhwb3MgPSAwOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX01TOiAgICAgICAg ICAgICAgICAgICAgICAvKiBNZXNzYWdlIGZyb20gb3RoZXIgS2VybWl0ICovCisgICAgICAgIGlm IChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgcHJpbnRmKCIgTUVTU0FHRTogJXNc biIscyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29ub2xsKCIi KTsgY29ub2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9UVTogICAg ICAgICAgICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAqLworICAgICAgICBpZiAoZmRp c3BsYSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoKGhwb3MgKz0g bGVuKSA+IDc3KSB7IGNvbm9sbCgiIik7IGhwb3MgPSBsZW47IH0KKyAgICAgICAgY29ub2wocyk7 IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfVE46ICAgICAgICAgICAgICAgICAgICAgIC8qIFRl eHQgZGVsaW1pdGVkIGF0IGJlZ2lubmluZyAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZE X0IpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBjb25vbGwoIiIpOyBjb25vbChzKTsgaHBv cyA9IGxlbjsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9UWjogICAgICAgICAgICAgICAgICAg ICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5kICovCisgICAgICAgIGlmIChmZGlzcGxhID09IFhZ RkRfQikKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgoaHBvcyArPSBsZW4pID4gNzcp IHsgY29ub2xsKCIiKTsgaHBvcyA9IGxlbjsgfQorICAgICAgICBjb25vbGwocyk7IHJldHVybjsK KworICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFF1YW50aXR5IGVx dWFscyAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJu OworCWNrbWFrbXNnKGJ1Ziw4MCxzLCI6ICIsY2tsdG9hKG4pLE5VTEwpOworICAgICAgICBjb25v bGwoYnVmKTsgaHBvcyA9IDA7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQ1c6ICAgICAgICAg ICAgICAgICAgICAgIC8qIENsb3NlIGZ1bGxzY3JlZW4gd2luZG93ICovCisgICAgICAgIHJldHVy bjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gd2luZG93IHRvIGNsb3NlICovCisKKyAg ICAgIGNhc2UgU0NSX0NEOgorICAgICAgICByZXR1cm47CisKKyAgICAgIGRlZmF1bHQ6CisgICAg ICAgIGNvbm9sbCgiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBvYmplY3QgKioqIik7Cisg ICAgICAgIGhwb3MgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorfQorI2VuZGlmIC8qIE5P RElTUExBWSAqLworCisvKiAgRSBSIE0gUyBHICAtLSAgTm9uZmF0YWwgZXJyb3IgbWVzc2FnZSAg Ki8KKworLyogU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgcHJpbnRpbmcgdGhlIG1lc3NhZ2UgdGV4 dCBmcm9tIGFuIEVycm9yIHBhY2tldC4gKi8KKworVk9JRAorZXJtc2cobXNnKSBjaGFyICptc2c7 IHsgICAgICAgICAgICAgICAgIC8qIFByaW50IGVycm9yIG1lc3NhZ2UgKi8KKyAgICBkZWJ1ZyhG MTEwLCJlcm1zZyIsbXNnLDApOworICAgIGlmIChsb2NhbCkKKyAgICAgIHh4c2NyZWVuKFNDUl9F TSwwLDBMLG1zZyk7CisgICAgdGxvZyhGMTEwLCJQcm90b2NvbCBFcnJvcjoiLG1zZywwTCk7Cit9 CisjZW5kaWYgLyogTk9YRkVSICovCisKK1ZPSUQKK3NldHNlc2xvZyh4KSBpbnQgeDsgeworICAg IHNlc2xvZyA9IHg7CisjaWZkZWYgS1VJCisgICAgS3VpU2V0UHJvcGVydHkoS1VJX1RFUk1fQ0FQ VFVSRSx4LDApOworI2VuZGlmIC8qIEtVSSAqLworfQorCitWT0lECitkb2NsZWFuKGZjKSBpbnQg ZmM7IHsgICAgICAgICAgICAgICAgICAgLyogR2VuZXJhbCBjbGVhbnVwICovCisjaWZkZWYgT1My T1JVTklYCisgICAgZXh0ZXJuIGludCB0dHlmZDsKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAg ICBleHRlcm4gaW50ICBrZWVwOworICAgIGV4dGVybiBpbnQgZXhpdGhhbmd1cDsKKyNpZm5kZWYg Tk9YRkVSCisgICAgZXh0ZXJuIGNoYXIgZmlsbmFtW107CisjZW5kaWYgLyogTk9YRkVSICovCisj aWZuZGVmIE5PSUNQCisgICAgaW50IHg7CisKKyAgICBpZiAoZmMgPiAwKQorICAgICAgZG9zdG9w KCk7ICAgICAgICAgICAgICAgICAvKiBTdG9wIGFsbCBjb21tYW5kIGZpbGVzIGFuZCBlbmQgbWFj cm9zICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICBpZiAocGt0 bG9nKSB7CisgICAgICAgICpwa3RmaWwgPSAnXDAnOworICAgICAgICBwa3Rsb2cgPSAwOworICAg ICAgICB6Y2xvc2UoWlBGSUxFKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgaWYg KHNlc2xvZykgeworICAgICAgICAqc2VzZmlsID0gJ1wwJzsKKyAgICAgICAgc2V0c2VzbG9nKDAp OworICAgICAgICB6Y2xvc2UoWlNGSUxFKTsKKyAgICB9CisjaWZkZWYgVExPRworICAgIGlmICh0 cmFsb2cpIHsKKyAgICAgICAgdGxvZyhGMTAwLCJUcmFuc2FjdGlvbiBMb2cgQ2xvc2VkIiwiIiww TCk7CisgICAgICAgICp0cmFmaWwgPSAnXDAnOworICAgICAgICB0cmFsb2cgPSAwOworICAgICAg ICB6Y2xvc2UoWlRGSUxFKTsKKyAgICB9CisjZW5kaWYgLyogVExPRyAqLworCisgICAgZGVidWco RjEwMCwiZG9jbGVhbiBjYWxsaW5nIGRvbG9nZW5kIiwiIiwwKTsKKyAgICBkb2xvZ2VuZCgpOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgY3VycmVudCBsb2cgcmVjb3JkIGlmIGFueSAq LworI2lmZGVmIENPTU1FTlQKKyAgICBpZiAoZGlhbG9nKSB7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBJZiBjb25uZWN0aW9uIGxvZyBvcGVuICovCisJZGlhbG9nID0gMDsKKyAgICAgICAgKmRp YWZpbCA9ICdcMCc7ICAgICAgICAgICAgICAgICAvKiBjbG9zZSBpdC4gKi8KKyAgICAgICAgemNs b3NlKFpESUZJTCk7CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmbmRlZiBOT0lD UAorI2lmbmRlZiBOT1NQTAorICAgIHpjbG9zZShaUkZJTEUpOyAgICAgICAgICAgICAgICAgICAg IC8qIFJFQUQgYW5kIFdSSVRFIGZpbGVzLCBpZiBhbnkuICovCisgICAgemNsb3NlKFpXRklMRSk7 CisjaWZuZGVmIE5PWEZFUgorICAgIHpjbG9zZShaSUZJTEUpOyAgICAgICAgICAgICAgICAgICAg IC8qIEFuZCBvdGhlciBmaWxlcyB0b28gKi8KKyAgICB4ID0gY2hrZm4oWk9GSUxFKTsJCQkvKiBE b3dubG9hZCBpbiBwcm9ncmVzcz8gKi8KKyAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIGNoa2ZuIFpP RklMRSIsZmlsbmFtLHgpOworICAgIGRlYnVnKEYxMTEsImRvY2xlYW4ga2VlcCIsIiIsa2VlcCk7 CisgICAgemNsb3NlKFpPRklMRSk7CQkJLyogQ2xvc2Ugb3V0cHV0IGZpbGUgKi8KKyAgICBpZiAo eCA+IDAgJiYgIWtlZXApIHsJCS8qIElmIGl0IHdhcyBiZWluZyBkb3dubG9hZGVkICovCisJaWYg KGZpbG5hbVswXSkKKwkgIHggPSB6ZGVsZXQoZmlsbmFtKTsJCS8qIERlbGV0ZSBpZiBJTkNPTVBM RVRFID0gRElTQ0FSRCAqLworCWRlYnVnKEYxMTEsImRvY2xlYW4gZG93bmxvYWQgZmlsZW5hbWUi LGZpbG5hbSx4KTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgemNsb3NlKFpTWVNG Tik7CisgICAgemNsb3NlKFpNRklMRSk7CisKKyAgICBpZiAoZmMgPCAxKSB7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBSRVNFVGluZywgbm90IEVYSVRpbmcgKi8KKyNpZmRlZiBERUJVRworICAg ICAgICBpZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIHRoZSBkZWJ1ZyBs b2cuICovCisgICAgICAgICAgICAqZGViZmlsID0gJ1wwJzsKKyAgICAgICAgICAgIGRlYmxvZyA9 IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyNlbmRp ZiAvKiBOT0lDUCAqLworCisjaWZuZGVmIE5PTE9DQUwKKyAgICBkZWJ1ZyhGMTAxLCJkb2NsZWFu IGV4aXRoYW5ndXAiLCIiLGV4aXRoYW5ndXApOworICAgIGlmIChsb2NhbCAmJiBleGl0aGFuZ3Vw KSB7CQkvKiBDbG9zZSBjb21tdW5pY2F0aW9uIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgZXh0ZXJu IGludCBoYXNsb2NrOworCWludCB4OworCQorCXggPSB0dGNoaygpOworCWRlYnVnKEYxMDEsImRv Y2xlYW4gdHRjaGsoKSIsIiIseCk7CisjaWZkZWYgT1MyT1JVTklYCisJZGVidWcoRjEwMSwiZG9j bGVhbiB0dHlmZCIsIiIsdHR5ZmQpOworI2VuZGlmIC8qIE9TMk9SVU5JWCAqLworICAgICAgICBp ZiAoeCA+PSAwCisjaWZkZWYgT1MyCisgICAgICAgICAgICB8fCB0dHlmZCAhPSAtMQorI2Vsc2UK KyNpZmRlZiBVTklYCisgICAgICAgICAgICB8fCBoYXNsb2NrICAgICAgICAgICAgICAgICAgLyog TWFrZSBzdXJlIHdlIGdldCBsb2NrZmlsZSEgKi8KKyAgICAgICAgICAgIHx8ICghbmV0d29yayAm JiB0dHlmZCA+IC0xKQorI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg ICAgICAgICkgeworICAgICAgICAgICAgZXh0ZXJuIGludCB3YXNjbG9zZWQsIHdoeWNsb3NlZDsK KwkgICAgZGVidWcoRjEwMCwiZG9jbGVhbiBoYW5naW5nIHVwIGFuZCBjbG9zaW5nIiwiIiwwKTsK KyAgICAgICAgICAgIGlmIChtc2dmbGcpIHsKKyNpZmRlZiBVTklYCisgICAgICAgICAgICAgICAg ZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAgICAgICAgIHByaW50 ZigiQ2xvc2luZyAlcy4uLiIsdHRuYW1lKTsKKyAgICAgICAgICAgIH0KKyNpZm5kZWYgTk9ESUFM CisgICAgICAgICAgICBtZG1odXAoKTsgICAgICAgICAgICAgICAgICAgLyogSGFuZ3VwIHRoZSBt b2RlbT8/PyAqLworI2VuZGlmIC8qIE5PRElBTCAqLworICAgICAgICAgICAgdHRjbG9zKDApOyAg ICAgICAgICAgICAgICAgIC8qIENsb3NlIGV4dGVybmFsIGxpbmUsIGlmIGFueSAqLworICAgICAg ICAgICAgaWYgKG1zZ2ZsZykgeworICAgICAgICAgICAgICAgIHByaW50ZigiT0tcbiIpOworI2lm ZGVmIFVOSVgKKyAgICAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklY ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2FzY2xvc2VkKSB7CisgICAgICAg ICAgICAgICAgd2h5Y2xvc2VkID0gV0NfQ0xPUzsKKyNpZm5kZWYgTk9TUEwKKyAgICAgICAgICAg ICAgICBpZiAobm1hYykgeyAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCisg ICAgICAgICAgICAgICAgICAgIGludCBrOyAgICAgICAgICAgICAgLyogWWVzICovCisgICAgICAg ICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX2Nsb3NlIixubWFjKTsgIC8qIExvb2sg dGhpcyB1cCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdhc2Ns b3NlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmludGYoIk9OX0NMT1NFIERP Q0xFQU5cbiIpOyAqLworICAgICAgICAgICAgICAgICAgICAgICAgKihtYWN0YWJba10ua3dkKSA9 IE5VTDsgICAgICAgICAvKiBTZWUgY29tbWVudCBiZWxvdyAqLworICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGRvZG8oayxja2l0b2Eod2h5Y2xvc2VkKSwwKSA+IC0xKSAvKiBzZXQgaXQgdXAs ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAg ICAgIC8qIGFuZCBleGVjdXRlIGl0ICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKyAgICAgICAgICAgICAgICB3YXNjbG9zZWQg PSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNrc3RybmNweSh0dG5hbWUs ZGZ0dHksVFROQU1MRU4pOyAvKiBSZXN0b3JlIGRlZmF1bHQgdHR5ICovCisgICAgICAgIGxvY2Fs ID0gZGZsb2M7ICAgICAgICAgICAgICAgICAgLyogQW5kIGRlZmF1bHQgcmVtb3RlL2xvY2FsIHN0 YXR1cyAqLworICAgIH0KKyNpZmRlZiBERUJVRworICAgIGVsc2UgaWYgKGxvY2FsKSBkZWJ1ZyhG MTAwLCJkb2NsZWFuIGhhbmd1cC9jbG9zZSBza2lwcGVkIiwiIiwwKTsKKyNlbmRpZiAvKiBERUJV RyAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIE5FV0ZUUAorICAgIGZ0cGJ5ZSgp OwkJCQkvKiBJZiBGVFAgY29ubmVjdGlvbiBvcGVuLCBjbG9zZSBpdCAqLworI2VuZGlmIC8qIE5F V0ZUUCAqLworCisjaWZkZWYgSUtTRAorICAgIGlmIChpbnNlcnZlcikKKyAgICAgIHR0Y2xvcygw KTsJCQkvKiBJZiBJS1NELCBjbG9zZSBzb2NrZXQgKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKyNp Zm5kZWYgTk9TUEwKKy8qCisgIElmIGEgbWFjcm8gbmFtZWQgIm9uX2V4aXQiIGlzIGRlZmluZWQs IGV4ZWN1dGUgaXQuICBBbHNvIHJlbW92ZSBpdCBmcm9tIHRoZQorICBtYWNybyB0YWJsZSwgaW4g Y2FzZSBpdHMgZGVmaW5pdGlvbiBpbmNsdWRlcyBhbiBFWElUIG9yIFFVSVQgY29tbWFuZCwgd2hp Y2gKKyAgd291bGQgY2F1c2UgbXVjaCByZWN1cnNpb24gYW5kIHdvdWxkIHByZXZlbnQgdGhlIHBy b2dyYW0gZnJvbSBldmVyIGFjdHVhbGx5CisgIEVYSVRpbmcuCisqLworICAgIGlmIChubWFjKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKyAgICAg ICAgaW50IGs7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBZZXMgKi8KKyAgICAgICAgY2hh ciAqIGNtZCA9ICJvbl9leGl0IjsgICAgICAgICAvKiBNU1ZDIDIueCBjb21waWxlciBlcnJvciAq LworICAgICAgICBrID0gbWxvb2sobWFjdGFiLGNtZCxubWFjKTsgICAgIC8qIExvb2sgdXAgIm9u X2V4aXQiICovCisgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAgICAgICAgICAgLyogSWYg Zm91bmQsICovCisjaWZkZWYgQ09NTUVOVAorCSAgICAvKiBUaGlzIG1ha2VzIGEgbWVzcyBpZiBP Tl9FWElUIGl0c2VsZiBleGVjdXRlcyBtYWNyb3MgKi8KKyAgICAgICAgICAgICoobWFjdGFiW2td Lmt3ZCkgPSBOVUw7ICAgICAvKiBwb2tlIGl0cyBuYW1lIGZyb20gdGhlIHRhYmxlLCAqLworI2Vs c2UKKwkgICAgLyogUmVwbGFjZSB0aGUga2V5d29yZCB3aXRoIHNvbWV0aGluZyB0aGF0IGRvZXNu J3Qgd3JlY2sgdGhlICovCisJICAgIC8qIG9yZGVyIG9mIHRoZSBrZXl3b3JkIHRhYmxlICovCisJ ICAgIGNrc3RybmNweShtYWN0YWJba10ua3dkLCJvbl9leHh4Iiw4KTsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgICAgICBpZiAoZG9kbyhrLCIiLDApID4gLTEpICAgICAgLyogc2V0IGl0 IHVwLCAqLworICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAgICAgICAgIC8qIGFuZCBl eGVjdXRlIGl0ICovCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKy8qCisg IFB1dCBjb25zb2xlIHRlcm1pbmFsIGJhY2sgdG8gbm9ybWFsLiAgVGhpcyBpcyBkb25lIGhlcmUg YmVjYXVzZSB0aGUKKyAgT05fRVhJVCBtYWNybyBjYWxscyB0aGUgcGFyc2VyLCB3aGljaCBtZWRk bGVzIHdpdGggY29uc29sZSB0ZXJtaW5hbCBtb2Rlcy4KKyovCisgICAgY29ucmVzKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBjb25zb2xlIHRlcm1pbmFsLiAqLworCisj aWZkZWYgQ09NTUVOVAorLyogU2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMsIGFuZCBtYXliZSBp dCdzIHNjcmV3aW5nIHRoaW5ncyB1cD8gKi8KKyAgICBjb25ub2koKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBUdXJuIG9mZiBjb25zb2xlIGludGVycnVwdCB0cmFwcyAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KKworICAgIC8qIERlbGV0ZSB0aGUgU3RhcnR1cCBGaWxlIGlmIHdlIGFy ZSBzdXBwb3NlZCB0by4gKi8KKyNpZm5kZWYgTk9JQ1AKKyAgICB7CisgICAgICAgIGV4dGVybiBp bnQgRGVsZXRlU3RhcnR1cEZpbGU7CisgICAgICAgIGRlYnVnKEYxMTEsImRvY2xlYW4gRGVsZXRl U3RhcnR1cEZpbGUiLGNtZGZpbCxEZWxldGVTdGFydHVwRmlsZSk7CisgICAgICAgIGlmIChEZWxl dGVTdGFydHVwRmlsZSkgeworICAgICAgICAgICAgaW50IHJjID0gemRlbGV0KGNtZGZpbCk7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIHpkZWxldCIsY21kZmlsLHJjKTsKKyAgICAg ICAgfQorICAgIH0KKyNlbmRpZiAvKiBOT0lDUCAqLworICAgIHN5c2NsZWFudXAoKTsgICAgICAg ICAgICAgICAgICAgICAgIC8qIFN5c3RlbS1kZXBlbmRlbnQgY2xlYW51cCwgbGFzdCAqLworfQor CisvKiAgRCBPIEUgWCBJIFQgIC0tICBFeGl0IGZyb20gdGhlIHByb2dyYW0uICAqLworCisvKgor ICBGaXJzdCBhcmcgaXMgZ2VuZXJhbCwgc3lzdGVtLWluZGVwZW5kZW50IHN5bWJvbDogR09PRF9F WElUIG9yIEJBRF9FWElULgorICBJZiBzZWNvbmQgYXJnIGlzIC0xLCB0YWtlIDFzdCBhcmcgbGl0 ZXJhbGx5LgorICBJZiBzZWNvbmQgYXJnIGlzIG5vdCAtMSwgd29yayBpdCBpbnRvIHRoZSBleGl0 IGNvZGUuCisqLworVk9JRAorZG9leGl0KGV4aXRzdGF0LGNvZGUpIGludCBleGl0c3RhdCwgY29k ZTsgeworICAgIGV4dGVybiBpbnQgeF9sb2dnZWQsIHF1aXR0aW5nOworI2lmZGVmIE9TMgorICAg IGV4dGVybiBpbnQgZGlzcGxheV9kZW1vOworICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOworI2Vu ZGlmIC8qIE9TMiAqLworI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgS1JCNAorICAgIGV4dGVy biBpbnQga3JiNF9hdXRvZGVsOworI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisgICAg ZXh0ZXJuIGludCBrcmI1X2F1dG9kZWw7CisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8qIENL X0tFUkJFUk9TICovCisKKyNpZmRlZiBWTVMKKyAgICBjaGFyIGVudnN0cls2NF07CisgICAgc3Rh dGljICRERVNDUklQVE9SKHN5bW5hbSwiQ0tFUk1JVF9TVEFUVVMiKTsKKyAgICBzdGF0aWMgc3Ry dWN0IGRzYyRkZXNjcmlwdG9yX3Mgc3ltdmFsOworI2VuZGlmIC8qIFZNUyAqLworICAgIGludCBp OworCisjaWZkZWYgREVCVUcKKyNpZmRlZiBVU0VfTFVDQUNIRQorICAgIGV4dGVybiBsb25nIGx1 Y2FsbHMsIGx1aGl0cywgeHhoaXRzLCBsdWxvb3A7CisgICAgZXh0ZXJuIGludCBsdXNpemU7Cisj ZW5kaWYgLyogVVNFX0xVQ0FDSEUgKi8KKyNpZm5kZWYgTk9TUEwKKyAgICBleHRlcm4gaW50IGNt ZHN0YXRzW107CisjZW5kaWYgLyogTk9TUEwgKi8KKworICAgIHF1aXR0aW5nKys7CisKKyNpZmRl ZiBPUzIKKyAgICBpZiAoICFTeXNJbml0ZWQgKSB7CisgICAgICAgIHN0YXRpYyBpbnQgaW5pdGlu ZyA9IDA7CisgICAgICAgIGlmICggaW5pdGluZyApCisJICBleGl0KDI1Myk7CisgICAgICAgIGlu aXRpbmcgPSAxOworICAgICAgICBzeXNpbml0KCk7CisgICAgfQorI2VuZGlmIC8qIE9TMiAqLwor CisgICAgaWYgKGRlYmxvZykgeworI2lmZGVmIFVTRV9MVUNBQ0hFCisJZGVidWcoRjEwMSwibG9v a3VwIGNhY2hlIHNpemUiLCIiLGx1c2l6ZSk7CisJZGVidWcoRjEwMSwibG9va3VwIGNhbGxzIC4u Li4iLCIiLGx1Y2FsbHMpOworCWRlYnVnKEYxMDEsImxvb2t1cCBjYWNoZSBoaXRzIiwiIixsdWhp dHMpOworCWRlYnVnKEYxMDEsImxvb2t1cCBzdGFydCBoaXRzIiwiIix4eGhpdHMpOworCWRlYnVn KEYxMDEsImxvb2t1cCBsb29wIGl0ZXJhdGlvbnMiLCIiLGx1bG9vcCk7CisjZW5kaWYgLyogVVNF X0xVQ0FDSEUgKi8KKyNpZm5kZWYgTk9TUEwKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsK KwkgICAgaWYgKGNtZHN0YXRzW2ldKQorCSAgICAgIGRlYnVnKEYxMTEsIkNNU1RBVFMiLGNraXRv YShpKSxjbWRzdGF0c1tpXSk7CisJfQorI2VuZGlmIC8qIE5PU1BMICovCisJZGVidWcoRjEwMSwi ZG9leGl0IGV4aXRzdGF0IiwiIixleGl0c3RhdCk7CisJZGVidWcoRjEwMSwiZG9leGl0IGNvZGUi LCIiLGNvZGUpOworCWRlYnVnKEYxMDEsImRvZXhpdCB4aXRzdGEiLCIiLHhpdHN0YSk7CisgICAg fQorI2VuZGlmIC8qIERFQlVHICovCisKKyNpZmRlZiBDS19LRVJCRVJPUworICAgIC8qIElmIHdl IGFyZSBhdXRvbWF0aWNhbGx5IGRlc3Ryb3lpbmcgS2VyYmVyb3MgY3JlZGVudGlhbHMgb24gRXhp dCAqLworICAgIC8qIGRvIGl0IG5vdy4gKi8KKyNpZmRlZiBLUkI0CisgICAgaWYgKGtyYjRfYXV0 b2RlbCA9PSBLUkJfREVMX0VYKSB7CisgICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEg a3JiX29wOworICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDQ7CisgICAgICAgIGtyYl9vcC5jYWNo ZSA9IE5VTEw7CisgICAgICAgIGNrX2tyYjRfZGVzdHJveSgma3JiX29wKTsKKyAgICB9CisjZW5k aWYgLyogS1JCNCAqLworI2lmZGVmIEtSQjUKKyAgICBpZiAoa3JiNV9hdXRvZGVsID09IEtSQl9E RUxfRVgpIHsKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBrcmJfb3BfZGF0YSBrcmJfb3A7CisgICAg ICAgIGV4dGVybiBjaGFyICoga3JiNV9kX2NjOworICAgICAgICBrcmJfb3AudmVyc2lvbiA9IDU7 CisgICAgICAgIGtyYl9vcC5jYWNoZSA9IGtyYjVfZF9jYzsKKyAgICAgICAgY2tfa3JiNV9kZXN0 cm95KCZrcmJfb3ApOworICAgIH0KKyNlbmRpZiAvKiBLUkI1ICovCisjZW5kaWYgLyogQ0tfS0VS QkVST1MgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisjaWZkZWYgT1MyCisgICAgaWYgKFN5c0luaXRl ZCkKKyAgICB7CisjaWZkZWYgRENNREJVRgorICAgICAgICBleHRlcm4gc3RydWN0IGNtZHB0ciAq Y21kc3RrOworI2Vsc2UKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBjbWRwdHIgY21kc3RrW107Cisj ZW5kaWYgLyogRENNREJVRiAqLworICAgICAgICBleHRlcm4gaW50IHR0X3N0YXR1c1tdOworICAg ICAgICBleHRlcm4gaW50IHZtb2RlOworCisgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgZGVtbyBz Y3JlZW4gdG8gYmUgZGlzcGxheWVkLCBkaXNwbGF5IGl0ICovCisgICAgICAgIGlmIChkaXNwbGF5 X2RlbW8pIHsKKyAgICAgICAgICAgIGRlbW9zY3JuKFZDTUQpOworICAgICAgICAgICAgZGlzcGxh eV9kZW1vID0gMDsKKyAgICAgICAgfQorI2lmbmRlZiBLVUkKKyAgICAgICAgLyogVGhpcyBpcyBn b2luZyB0byBiZSBoaWRlb3VzLiAgSWYgd2UgaGF2ZSBhIHN0YXR1cyBsaW5lICovCisgICAgICAg IC8qIGluIHRoZSBjb21tYW5kIHdpbmRvdyB0dXJuIGl0IG9mZiBiZWZvcmUgd2UgZXhpdC4gICAg ICAqLworCisgICAgICAgIGlmICggdHRfc3RhdHVzW1ZDTURdICYmIHZtb2RlID09IFZDTUQgKSB7 CisgICAgICAgICAgICBkb21hYygiX2NsZWFyX3N0YXR1c2xpbmUiLCJzZXQgY29tbWFuZCBzdGF0 dXNsaW5lIG9mZiIsCisgICAgICAgICAgICAgICAgICAgY21kc3RrW2NtZGx2bF0uY2NmbGdzKTsK KyAgICAgICAgICAgIGRlbG1hYygiX2NsZWFyX3N0YXR1c2xpbmUiLDEpOworICAgICAgICAgICAg UmVxdWVzdFNjcmVlbk11dGV4KC0xKTsKKyAgICAgICAgICAgIFZzY3JuSXNEaXJ0eSh2bW9kZSk7 CisgICAgICAgICAgICBSZWxlYXNlU2NyZWVuTXV0ZXgoKTsKKyAgICAgICAgICAgIHdoaWxlICgg SXNWc2NybkRpcnR5KHZtb2RlKSApCisgICAgICAgICAgICAgICAgbXNsZWVwKDIwMCk7CisgICAg ICAgICAgICBSZXF1ZXN0U2NyZWVuTXV0ZXgoLTEpOworICAgICAgICAgICAgUmVsZWFzZVNjcmVl bk11dGV4KCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgRGlhbGVyU2Vu ZChPUFRfS0VSTUlUX0VYSVQsZXhpdHN0YXQpOworI2lmbmRlZiBLVUkKKyAgICAgICAgZGVidWco RjEwMCwiZG9leGl0IGFib3V0IHRvIG1zbGVlcCIsIiIsMCk7CisKKyAgICAgICAgaWYgKCBpc1dp bjk1KCkgKQorICAgICAgICAgICAgbXNsZWVwKDI1MCk7CisjZW5kaWYgLyogS1VJICovCisgICAg fQorI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKworI2lmZGVmIElLU0QK KyNpZmRlZiBDS19MT0dJTgorICAgIGlmIChpbnNlcnZlciAmJiB4X2xvZ2dlZCkgeworI2lmbmRl ZiBOT1NQTAorLyoKKyAgSWYgYSBtYWNybyBuYW1lZCAib25fbG9nb3V0IiBpcyBkZWZpbmVkLCBl eGVjdXRlIGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKKyAgbWFjcm8gdGFibGUsIGluIGNh c2UgaXRzIGRlZmluaXRpb24gaW5jbHVkZXMgYW4gRVhJVCBvciBRVUlUIGNvbW1hbmQsIHdoaWNo CisgIHdvdWxkIGNhdXNlIG11Y2ggcmVjdXJzaW9uIGFuZCB3b3VsZCBwcmV2ZW50IHRoZSBwcm9n cmFtIGZyb20gZXZlciBhY3R1YWxseQorICBFWElUaW5nLgorKi8KKwlpZiAobm1hYykgewkJCS8q IEFueSBtYWNyb3MgZGVmaW5lZD8gKi8KKwkgICAgaW50IGs7CQkJLyogWWVzICovCisJICAgIGNo YXIgKiBjbWQgPSAib25fbG9nb3V0IjsJLyogTVNWQyAyLnggY29tcGlsZXIgZXJyb3IgKi8KKwkg ICAgayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7CS8qIExvb2sgdXAgIm9uX2xvZ291dCIgKi8K KwkgICAgaWYgKGsgPj0gMCkgewkJLyogSWYgZm91bmQsICovCisJCSoobWFjdGFiW2tdLmt3ZCkg PSBOVUw7CS8qIHBva2UgaXRzIG5hbWUgZnJvbSB0aGUgdGFibGUsICovCisJCWlmIChkb2RvKGss IiIsMCkgPiAtMSkJLyogc2V0IGl0IHVwLCAqLworCQkgIHBhcnNlcigxKTsJCS8qIGFuZCBleGVj dXRlIGl0ICovCisJICAgIH0KKwl9CisjZW5kaWYgLyogTk9TUEwgKi8KKwl6dmxvZ291dCgpOwor ICAgIH0KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworICAgIGRl YnVnKEYxMDAsImRvZXhpdCBhYm91dCB0byBkb2NsZWFuIiwiIiwwKTsKKyAgICBkb2NsZWFuKDEp OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhbiB1cCBtb3N0IHRoaW5ncyAqLworCisj aWZkZWYgVk1TCisgICAgaWYgKGNvZGUgPT0gLTEpCisgICAgICBjb2RlID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgLyogU2luY2Ugd2Ugc2V0IHR3byBkaWZmZXJlbnQgaXRlbXMgKi8KKyAg ICBzcHJpbnRmKGVudnN0ciwiJWQiLCBleGl0c3RhdCB8IGNvZGUpOyAvKiBTQUZFICovCisgICAg c3ltdmFsLmRzYyR3X2xlbmd0aCA9IChpbnQpc3RybGVuKGVudnN0cik7CisgICAgc3ltdmFsLmRz YyRhX3BvaW50ZXIgPSBlbnZzdHI7CisgICAgc3ltdmFsLmRzYyRiX2NsYXNzID0gRFNDJEtfQ0xB U1NfUzsKKyAgICBzeW12YWwuZHNjJGJfZHR5cGUgPSBEU0MkS19EVFlQRV9UOworICAgIGkgPSAy OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0b3JlIGluIGdsb2JhbCB0YWJsZSAq LworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5z ZXIgKi8KKyAgICBMSUIkU0VUX1NZTUJPTCgmc3ltbmFtLCAmc3ltdmFsLCAmaSk7CisjZWxzZQor ICAgIGxpYiRzZXRfc3ltYm9sKCZzeW1uYW0sICZzeW12YWwsICZpKTsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgaWYgKGV4aXRzdGF0ID09IEJBRF9FWElUKQorICAgICAgZXhpdHN0YXQgPSBT UyRfQUJPUlQgfCBTVFMkTV9JTkhJQl9NU0c7CisgICAgaWYgKGV4aXRzdGF0ID09IEdPT0RfRVhJ VCkKKyAgICAgIGV4aXRzdGF0ID0gU1MkX05PUk1BTCB8IFNUUyRNX0lOSElCX01TRzsKKyNlbHNl IC8qIE5vdCBWTVMgKi8KKyAgICBpZiAoY29kZSAhPSAtMSkgICAgICAgICAgICAgICAgICAgICAv KiBUYWtlIDFzdCBhcmcgbGl0ZXJhbGx5ICovCisgICAgICBleGl0c3RhdCB8PSBjb2RlOworI2Vu ZGlmIC8qIFZNUyAqLworCisjaWZkZWYgSUtTRAorI2lmZGVmIElLU0RCCisgICAgZGVidWcoRjEw MSwiZG9leGl0IGlrZGJvcGVuIiwiIixpa2Rib3Blbik7CisgICAgaWYgKGlrZGJvcGVuICYmIGRi ZnApIHsgICAgICAgICAgICAgLyogSWYgSUtTRCBkYXRhYmFzZSBvcGVuICovCisgICAgICAgIGlu dCB4OworICAgICAgICB4ID0gZnJlZXNsb3QobXlkYnNsb3QpOyAgICAgICAgIC8qIEZyZWUgb3Vy IHNsb3QuLi4gKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZG9leGl0IGZyZWVzbG90IiwiIix4KTsK KyAgICAgICAgZmNsb3NlKGRiZnApOyAgICAgICAgICAgICAgICAgICAvKiBhbmQgY2xvc2UgaXQu ICovCisgICAgfQorI2VuZGlmIC8qIElLU0RCICovCisjZW5kaWYgLyogSUtTRCAqLworCisvKiBX ZSBoYXZlIHB1dCB0aGlzIG9mZiB0aWxsIHRoZSB2ZXJ5IGxhc3QgbW9tZW50Li4uICovCisKKyNp ZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIENs b3NlIHRoZSBkZWJ1ZyBsb2cuICovCisgICAgICAgIGRlYnVnKEYxMDEsIkMtS2VybWl0IEVYSVQg c3RhdHVzIiwiIixleGl0c3RhdCk7CisgICAgICAgICpkZWJmaWwgPSAnXDAnOworICAgICAgICBk ZWJsb2cgPSAwOworICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICB9CisjZW5kaWYgLyogREVC VUcgKi8KKworI2lmZGVmIE9TMgorICAgIF9leGl0KGV4aXRzdGF0KTsgICAgICAgICAgICAvKiBF eGl0IGZyb20gQy1LZXJtaXQgKG5vIG1hdHRlciB3aGF0KSAqLworI2Vsc2UgLyogT1MyICovCisg ICAgZXhpdChleGl0c3RhdCk7ICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBmcm9tIEMtS2Vy bWl0ICovCisjZW5kaWYgLyogT1MyICovCit9CisKK1ZPSUQKK2JnY2hrKCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLworICAgIGlm IChiZ3NldCA8IDApIHsgICAgICAgICAgICAgICAgICAgIC8qIFRoZXkgZGlkbid0IHR5cGUgU0VU IEJBQ0tHUk9VTkQgKi8KKyNpZmRlZiBWTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBTZXQgcHJvbXB0IGZsYWcgYmFzZWQgb24gKi8KKyAgICAgICAgcGZsYWcgPSAhYmF0Y2g7ICAg ICAgICAgICAgICAgICAvKiB3aGF0IHdlIGRldGVjdGVkIGF0IHN0YXJ0dXAuICovCisjZWxzZQor ICAgICAgICBwZmxhZyA9ICFiYWNrZ3JkOworI2VuZGlmIC8qIFZNUyAqLworICAgIH0gZWxzZSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBTRVQgQkFDS0dST1VORCB2 YWx1ZSAqLworICAgICAgICBwZmxhZyA9IChiZ3NldCA9PSAwID8gMSA6IDApOworICAgIH0KKwor I2lmbmRlZiBOT0lDUAorICAgIC8qIE1lc3NhZ2UgZmxhZyBvbiBvbmx5IGlmIGF0IHRvcCBsZXZl bCwgcGZsYWcgaXMgb24sIGFuZCBRVUlFVCBpcyBPRkYgKi8KKyAgICBpZiAoIXhjbWRzcmMpCisg ICAgICBtc2dmbGcgPSAocGZsYWcgPT0gMCkgPyAwIDogIXF1aWV0OworICAgIGVsc2UgbXNnZmxn ID0gMDsKKyNlbHNlCisgICAgbXNnZmxnID0gMDsKKyNlbmRpZiAvKiBOT0lDUCAqLworfQorCisv KiBTZXQgY29uc29sZSBpbnRlcnJ1cHRzICovCisKK1ZPSUQKK3NldGludCgpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBBY2NvcmRpbmcgdG8gU0VUIENPTU1BTkQgSU5URVJSVVAg Ki8KKyAgICBpbnQgeCA9IDA7CisgICAgaWYgKGNtZGludCkgIHggfD0gMTsKKyAgICBpZiAoeHN1 c3BlbmQpIHggfD0gMjsKKyAgICBkZWJ1ZyhGMTAxLCJzZXRpbnQiLCIiLHgpOworCisgICAgc3dp dGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSBkZXNpcmVkIGNvbWJp bmF0aW9uICovCisgICAgICBjYXNlIDA6IGNvbm5vaSgpOyBicmVhazsgICAgICAgICAgLyogTm8g aW50ZXJydXB0cyAqLworICAgICAgY2FzZSAxOiBjb25pbnQodHJhcCxTSUdfSUdOKTsgYnJlYWs7 CisgICAgICBjYXNlIDI6IGNvbmludChTSUdfSUdOLHN0cHRyYXApOyBicmVhazsKKyAgICAgIGNh c2UgMzogY29uaW50KHRyYXAsc3RwdHJhcCk7IGJyZWFrOworICAgIH0KKyAgICBiZ2NoaygpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBiYWNrZ3JvdW5kIHN0YXR1cyAqLwor fQorCisjaWZkZWYgREVCVUcKKy8qICBEIEUgQiBVIEcgIC0tICBFbnRlciBhIHJlY29yZCBpbiB0 aGUgZGVidWdnaW5nIGxvZyAgKi8KKworLyoKKyBDYWxsIHdpdGggYSBmb3JtYXQsIHR3byBzdHJp bmdzLCBhbmQgYSBudW1iZXI6CisgICBmICAtIEZvcm1hdCwgYSBiaXQgc3RyaW5nIGluIHJhbmdl IDAtNy4KKyAgICAgICAgSWYgYml0IHggaXMgb24sIHRoZW4gYXJndW1lbnQgbnVtYmVyIHggaXMg cHJpbnRlZC4KKyAgIHMxIC0gU3RyaW5nLCBhcmd1bWVudCBudW1iZXIgMS4gIElmIHNlbGVjdGVk LCBwcmludGVkIGFzIGlzLgorICAgczIgLSBTdHJpbmcsIGFyZ3VtZW50IG51bWJlciAyLiAgSWYg c2VsZWN0ZWQsIHByaW50ZWQgaW4gYnJhY2tldHMuCisgICBuICAtIExvbmcgaW50LCBhcmd1bWVu dCAzLiAgSWYgc2VsZWN0ZWQsIHByaW50ZWQgcHJlY2VkZWQgYnkgZXF1YWxzIHNpZ24uCisKKyAg IGY9MCBpcyBzcGVjaWFsOiBwcmludCBzMSxzMiwgYW5kIGludGVycHJldCBuIGFzIGEgY2hhci4K KworICAgZj1GMDExICgzKSBpcyBhbHNvIHNwZWNpYWw7IGluIHRoaXMgY2FzZSBzMiBpcyBpbnRl cnBldGVkIGFzIGEgY291bnRlZAorICAgc3RyaW5nIHRoYXQgbWlnaHQgY29udGFpbiBOVUxzLiAg biBpcyB0aGUgbGVuZ3RoLiAgSWYgbiBpcyBuZWdhdGl2ZSwgdGhpcworICAgbWVhbnMgdGhlIHN0 cmluZyBoYXMgYmVlbiB0cnVuY2F0ZWQgYW5kICIuLiIgc2hvdWxkIGJlIHByaW50ZWQgYWZ0ZXIg dGhlCisgICBmaXJzdCBuIGJ5dGVzLiAgTlVMIGFuZCBMRiBieXRlcyBhcmUgcHJpbnRlZCBhcyAi PE5VTD4iIGFuZCAiPExGPiIuCisKKyAgIEdsb2JhbHM6CisgICAgIGRlYmxvZzogbm9uemVybyBp ZiBkZWJ1ZyBsb2cgb3Blbi4KKyAgICAgZGVib2s6ICBub256ZXJvIGlmIG9rIHRvIHdyaXRlIGVu dHJpZXMuCisqLworLyoKKyAgV0FSTklORzogRG9uJ3QgY2hhbmdlIERFQlVGTCB3aXRob3V0IGNo YW5naW5nIHNwcmludGYoKSBmb3JtYXRzIGJlbG93LAorICBhY2NvcmRpbmdseS4KKyovCisjZGVm aW5lIERCVUZMIDQwMDAKKy8qCisgIFdBUk5JTkc6IFRoaXMgcm91dGluZSBpcyBub3QgdGhyZWFk LXNhZmUsIGVzcGVjaWFsbHkgd2hlbiBLZXJtaXQgaXMKKyAgZXhlY3V0aW5nIG9uIG11bHRpcGxl IENQVXMgLS0gYXMgZGlmZmVyZW50IHRocmVhZHMgd3JpdGUgdG8gdGhlIHNhbWUKKyAgc3RhdGlj IGJ1ZmZlciwgdGhlIGRlYnVnIHN0YXRlbWVudHMgYXJlIGFsbCBpbnRlcmxlYXZlZC4gIFRvIGJl IGZpeGVkCisgIGxhdGVyLi4uCisqLworc3RhdGljIGNoYXIgKmRicHRyID0gKGNoYXIgKikwOwor CitpbnQKKyNpZmRlZiBDS19BTlNJQworZG9kZWJ1ZyhpbnQgZiwgY2hhciAqczEsIGNoYXIgKnMy LCBDS19PRkZfVCBuKQorI2Vsc2UKK2RvZGVidWcoZixzMSxzMixuKSBpbnQgZjsgY2hhciAqczEs ICpzMjsgQ0tfT0ZGX1QgbjsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9kZWJ1ZyAqLyB7 CisgICAgY2hhciAqc3A7CisgICAgaW50IGxlbjEsIGxlbjI7CisgICAgZXh0ZXJuIGludCBkZWJ0 aW07CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBTeXNJbml0ZWQ7CisjZW5kaWYgLyogT1My ICovCisKKyAgICBpZiAoIWRlYmxvZyB8fCAhZGVib2spCisgICAgICByZXR1cm4oMCk7CisKKyNp ZmRlZiBDT01NRU5UCisgICAgLyogZXhwZW5zaXZlLi4uICovCisgICAgaWYgKCFjaGtmbihaREZJ TEUpKQkJCS8qIERlYnVnIGxvZyBub3Qgb3BlbiwgZG9uJ3QuICovCisgICAgICByZXR1cm4oMCk7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGlmICghZGJwdHIpIHsgICAgICAgICAgICAgICAg ICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBidWZmZXIgKi8KKyAgICAgICAgZGJwdHIgPSBtYWxs b2MoREJVRkwrNCk7ICAgICAgICAvKiBUaGlzIG9ubHkgaGFwcGVucyBvbmNlICovCisgICAgICAg IGlmICghZGJwdHIpIHsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICAgICAg cmV0dXJuKDApOworICAgICAgICB9CisgICAgfQorLyoKKyAgVGhpcyBwcmV2ZW50cyBpbmZpbml0 ZSByZWN1cnNpb24gaW4gY2FzZSB3ZSBhY2NpZGVudGFsbHkgcHV0IGEgZGVidWcoKQorICBjYWxs IGluIHRoaXMgcm91dGluZSwgb3IgY2FsbCBhbm90aGVyIHJvdXRpbmUgdGhhdCBjb250YWlucyBk ZWJ1ZygpIGNhbGxzLgorICBGcm9tIHRoaXMgcG9pbnQgb24sIGFsbCByZXR1cm5zIGZyb20gdGhp cyByZXR1cm4gbXVzdCBiZSB2aWEgZ290byB4ZGVidWcsCisgIHdoaWNoIHNldHMgZGVibG9nIGJh Y2sgdG8gMS4KKyovCisjaWZkZWYgT1MyCisgICAgaWYgKFN5c0luaXRlZCkgeworCWlmIChSZXF1 ZXN0RGVidWdNdXRleCgzMDAwMCkpCisJICAgIGdvdG8geGRlYnVnOworICAgIH0KKyNlbHNlIC8q IE9TMiAqLworICAgIGRlYmxvZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZl bnQgaW5maW5pdGUgcmVjdXJzaW9uICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoZGVi dGltKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBUaW1lc3RhbXAgKi8KKyAgICAgICAgY2hh ciAqdGIsIHRzYnVmWzQ4XTsKKyAgICAgICAgenRpbWUoJnRiKTsKKyAgICAgICAgY2tzdHJuY3B5 KHRzYnVmLHRiLDMyKTsKKyAgICAgICAgaWYgKHp0bXNlYyA+IC0xTCkgeworCSAgICBzcHJpbnRm KHRzYnVmKzE5LCIuJTAzbGQgIix6dG1zZWMpOyAvKiBTQUZFICovCisJfSBlbHNlIHsKKwkgICAg dHNidWZbMTldID0gJzonOworCSAgICB0c2J1ZlsyMF0gPSBTUDsKKwkgICAgdHNidWZbMjFdID0g TlVMOworCX0KKyAgICAgICAgenNvdXQoWkRGSUxFLHRzYnVmKzExKTsKKyAgICB9CisgICAgaWYg KCFzMSkgczE9IihOVUxMKSI7CisgICAgaWYgKCFzMikgczI9IihOVUxMKSI7CisKKyAgICBsZW4x ID0gc3RybGVuKHMxKTsKKyAgICBsZW4yID0gc3RybGVuKHMyKTsKKworI2lmZGVmIENPTU1FTlQK Ky8qCisgIFRoaXMgc2hvdWxkIHdvcmssIGJ1dCBpdCBkb2Vzbid0LgorICBTbyBpbnN0ZWFkIHdl J2xsIGNvcGUgd2l0aCBvdmVyZmxvdyB2aWEgc3ByaW50ZiBmb3JtYXRzLgorICBOLkIuOiBVTkZP UlRVTkFURUxZLCB0aGlzIG1lYW5zIHdlIGhhdmUgdG8gcHV0IGNvbnN0YW50cyBpbiB0aGUKKyAg c3ByaW50ZiBmb3JtYXRzLgorKi8KKyAgICBpZiAoZiAhPSBGMDExICYmICghZiB8fCAoZiAmIDYp KSkgeyAvKiBTdHJpbmcgYXJndW1lbnQocykgaW5jbHVkZWQ/ICovCisgICAgICAgIHggPSAoaW50 KSBzdHJsZW4oczEpICsgKGludCkgc3RybGVuKHMyKSArIDE4OworICAgICAgICBpZiAoeCA+IGRi dWZsKSB7ICAgICAgICAgICAgICAgIC8qIExvbmdlciB0aGFuIGJ1ZmZlcj8gKi8KKyAgICAgICAg ICAgIGlmIChkYnB0cikgICAgICAgICAgICAgICAgICAvKiBZZXMsIGZyZWUgcHJldmlvdXMgYnVm ZmVyICovCisgICAgICAgICAgICAgIGZyZWUoZGJwdHIpOworICAgICAgICAgICAgZGJwdHIgPSAo Y2hhciAqKSBtYWxsb2MoeCArIDIpOyAvKiBBbGxvY2F0ZSBhIG5ldyBvbmUgKi8KKyAgICAgICAg ICAgIGlmICghZGJwdHIpIHsKKyAgICAgICAgICAgICAgICB6c291dGwoWkRGSUxFLCJERUJVRzog TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworICAgICAgICAgICAgICAgIGRlYmxvZyA9IDA7 CisgICAgICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgICAgICAgICAgZ290byB4 ZGVidWc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRidWZsID0geDsK KyAgICAgICAgICAgICAgICBzcHJpbnRmKGRicHRyLCJERUJVRzogQnVmZmVyIGV4cGFuZGVkIHRv ICVkXG4iLCB4ICsgMTgpOworICAgICAgICAgICAgICAgIHpzb3V0bChaREZJTEUsZGJwdHIpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwor I2lmZGVmIENPTU1FTlQKKy8qIFRoZSBhZm9yZW1lbnRpb25lZCBzcHJpbnRmKCkgZm9ybWF0cyB3 ZXJlIGxpa2UgdGhpczogKi8KKyAgICAgICAgaWYgKG4gPiAzMSAmJiBuIDwgMTI3KQorICAgICAg ICAgIHNwcmludGYoc3AsIiUuMTAwcyUuMjAwMHM6JWNcbiIsczEsczIsKENIQVIpIG4pOworICAg ICAgICBlbHNlIGlmIChuIDwgMzIgfHwgbiA9PSAxMjcpCisgICAgICAgICAgc3ByaW50ZihzcCwi JS4xMDBzJS4yMDAwczpeJWNcbiIsczEsczIsKENIQVIpICgobis2NCkgJiAweDdGKSk7CisgICAg ICAgIGVsc2UgaWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCIl LjEwMHMlLjIwMDBzOn5eJWNcbiIsczEsczIsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKKyAgICAg ICAgZWxzZSBpZiAobiA+IDE1OSAmJiBuIDwgMjU2KQorICAgICAgICAgIHNwcmludGYoc3AsIiUu MTAwcyUuMjAwMHM6fiVjXG4iLHMxLHMyLChDSEFSKSAobiAmIDB4N0YpKTsKKyAgICAgICAgZWxz ZSBzcHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOiVsZFxuIixzMSxzMixuKTsKKy8qCisgIEJ1dCwg bmF0dXJhbGx5LCBpdCB0dXJucyBvdXQgdGhlc2UgYXJlIG5vdCBwb3J0YWJsZSBlaXRoZXIsIHNv IG5vdworICB3ZSBkbyB0aGUgc3R1cGlkZXN0IHBvc3NpYmxlIHRoaW5nLgorKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyNpZmRlZiBCSUdCVUZPSworLyogTmVlZCB0byBhY2NlcHQgbG9uZ2Vy IHN0cmluZ3Mgd2hlbiBkZWJ1Z2dpbmcgYXV0aGVudGljYXRlZCBjb25uZWN0aW9ucyAqLworICAg IGlmIChmID09IEYwMTApIHsKKyAgICAgICAgaWYgKGxlbjIgKyAyID49IERCVUZMKSBzMiA9ICIo c3RyaW5nIHRvbyBsb25nKSI7CisgICAgfSBlbHNlIGlmIChmICE9IEYwMTEgJiYgZiAhPSBGMTAw KSB7CisgICAgICAgIGlmIChsZW4xID4gMTAwKSBzMSA9ICIoc3RyaW5nIHRvbyBsb25nKSI7Cisg ICAgICAgIGlmIChsZW4yICsgMTAxID49IERCVUZMKSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7 CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZiAhPSBGMDExKSB7CisgICAgICAgIGlmIChsZW4xID4g MTAwKSBzMSA9ICIoc3RyaW5nIHRvbyBsb25nKSI7CisgICAgICAgIGlmIChsZW4yICsgMTAxID49 IERCVUZMKSBzMiA9ICIoc3RyaW5nIHRvbyBsb25nKSI7CisgICAgfQorI2VuZGlmIC8qIEJJR0JV Rk9LICovCisKKyAgICBzcCA9IGRicHRyOworCisgICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAg ICAgIC8qIFdyaXRlIGxvZyByZWNvcmQgYWNjb3JkaW5nIHRvIGZvcm1hdC4gKi8KKyAgICAgIGNh c2UgRjAwMDogICAgICAgICAgICAgICAgLyogMCA9IHByaW50IGJvdGggc3RyaW5ncywgYW5kIG4g YXMgYSBjaGFyLiAqLworICAgICAgICBpZiAobGVuMiA+IDApIHsKKyAgICAgICAgICAgIGlmICgo biA+IDMxICYmIG4gPCAxMjcpIHx8IChuID4gMTU5ICYmIG4gPCAyNTYpKQorICAgICAgICAgICAg ICBzcHJpbnRmKHNwLCIlc1slc109JWNcbiIsczEsczIsKENIQVIpIG4pOworICAgICAgICAgICAg ZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQorICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIl c1slc109XiVjXG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3RikpOworICAgICAgICAgICAg ZWxzZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQorICAgICAgICAgICAgICBzcHJpbnRmKHNwLCIl c1slc109fl4lY1xuIixzMSxzMiwoQ0hBUikoKG4tNjQpICYgMHg3RikpOworICAgICAgICAgICAg ZWxzZSBzcHJpbnRmKHNwLCIlc1slc109MHglbFhcbiIsczEsczIsKGxvbmcpbik7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKG4gPiAzMSAmJiBuIDwgMTI3KSB8fCAobiA+IDE1 OSAmJiBuIDwgMjU2KSkKKyAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXM9JWNcbiIsczEsKENI QVIpIG4pOworICAgICAgICAgICAgZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQorICAgICAg ICAgICAgICBzcHJpbnRmKHNwLCIlcz1eJWNcbiIsczEsKENIQVIpICgobis2NCkgJiAweDdGKSk7 CisgICAgICAgICAgICBlbHNlIGlmIChuID4gMTI3ICYmIG4gPCAxNjApCisgICAgICAgICAgICAg IHNwcmludGYoc3AsIiVzPX5eJWNcbiIsczEsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKKyAgICAg ICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiJXM9MHglbFhcbiIsczEsKGxvbmcpbik7CisgICAgICAg IH0KKyAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBk ZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgIH0KKyNpZmRl ZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dp bmcpIHsKKyAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxM KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIGJyZWFrOworCisg ICAgICBjYXNlIEYwMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogMSwgIj1uIiAqLworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgLyogVGhpcyB3YXMgbmV2ZXIgdXNlZCAqLworICAgICAgICBz cHJpbnRmKHNwLCI9JXNcbiIsY2tmc3RvYShuKSk7CisjZWxzZQorICAgICAgICAvKiBMaWtlIEYx MTEsIGJ1dCBzaG93cyBudW1iZXIgbiBpbiBoZXggKi8KKwlja21ha3htc2coc3AsREJVRkwsCisJ CSAgczEsCisJCSAgKCpzMSA/ICI6IiA6ICIiKSwKKwkJICBzMiwKKwkJICAoKnMyID8gIjoiIDog IiIpLAorCQkgIGNrbHRveChuKSwKKwkJICAiXG4iLAorCQkgIE5VTEwsTlVMTCxOVUxMLE5VTEws TlVMTCxOVUxMCisJCSAgKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGlmICh6c291 dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAg ICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAg aWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICBj a3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBDS1NZU0xPRyAqLworICAgICAgICBicmVhazsKKworLyoKKyAgVGhpcyBvbmUgd2FzIG5l dmVyIHVzZWQgc28gKE9jdG9iZXIgMjAwMCkgd2Ugbm93IHVzZSBpdCBsaWtlIEYwMTEsCisgIGV4 Y2VwdCBpbiB0aGlzIGNhc2Ugd2UgdHJlYXQgczIgYXMgTlVMIHRlcm1pbmF0ZWQuCisqLworICAg ICAgY2FzZSBGMDEwOgorCW4gPSAtZGVieGxlbjsKKy8qCisgIFRoaXMgb25lIHRyZWF0cyBuIGFz IHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBzMiwgd2hpY2ggbWF5IGNvbnRhaW4gTlVMcy4KKyAg SXQncyBnb29kIGZvciBsb2dnaW5nIE5VTC1iZWFyaW5nIGRhdGEgaW4gdGhlIGRlYnVnIGxvZy4K KyovCisgICAgICBjYXNlIEYwMTE6IHsKKwkgIGludCBpLCBqLCBjb250ZCA9IDA7CisJICBjaGFy ICogcCA9IHMyLCAqcGJ1ZiA9IE5VTEw7CS8qIHAgPSBzb3VyY2UgcG9pbnRlciAqLworCSAgaW50 IG07CQkJLyogcGJ1ZiA9IGRlc3RpbmF0aW9uIHBvaW50ZXIgKi8KKworCSAgaWYgKGYgPT0gRjAx MSkgeworCSAgICAgIGlmIChuIDwgMCkgewkJLyogbiA9IHNpemUgb2Ygc291cmNlICovCisJCSAg biA9IDAgLSBuOwkJLyogTmVnYXRpdmUgbWVhbnMgdG8gYWRkICIuLi4iICovCisJCSAgY29udGQg PSAxOworCSAgICAgIH0KKwkgIH0gZWxzZSB7CisJICAgICAgaW50IHgsIGZsYWcgPSAwOworCSAg ICAgIHggPSBzdHJsZW4oczIpOworCSAgICAgIGlmIChuIDwgMCkgeworCQkgIGZsYWcgPSAxOwor CQkgIG4gPSAwIC0gbjsKKwkgICAgICB9CisJICAgICAgaWYgKHggPCBuKQorCQluID0geDsKKwkg IH0KKwkgIGlmIChuID09IDApCQkJLyogMCBtZWFucyBkbyBub3RoaW5nICovCisJICAgIGdvdG8g eGRlYnVnOworCSAgbSA9IERCVUZMIC0gODsJCS8qIEdldCBzaXplIGZvciBpbnRlcnByZXRlZCBw YXJ0ICovCisJICBpZiAobiA+IG0pCQkJLyogRW5zdXJlIHJlcXVlc3RlZCBzaXplIG5vdCB0b28g YmlnICovCisJICAgIG4gPSBtOworCSAgcGJ1ZiA9IGRicHRyOwkJCS8qIENvbnN0cnVjdGlvbiBw b2ludGVyICovCisJICBpID0gMDsKKwkgIHBidWZbaSsrXSA9ICdbJzsJCS8qIEludGVycHJldCB0 aGUgc3RyaW5nIGludG8gaXQgKi8KKwkgIGZvciAoaiA9IDA7IGogPCBuICYmIGkgPCBtLTQ7IHAr KyxqKyspIHsgLyogY2hhciBieSBjaGFyLi4uICovCisJICAgICAgaWYgKCpwID09IExGKSB7CisJ CSAgaWYgKGkgPj0gbS00KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1ZltpKytdID0gJzwnOworCQkg IHBidWZbaSsrXSA9ICdMJzsKKwkJICBwYnVmW2krK10gPSAnRic7CisJCSAgcGJ1ZltpKytdID0g Jz4nOworCQkgIGNvbnRpbnVlOworCSAgICAgIH0gZWxzZSBpZiAoKnAgPT0gQ1IpIHsKKwkJICBp ZiAoaSA+PSBtLTQpCisJCSAgICBicmVhazsKKwkJICBwYnVmW2krK10gPSAnPCc7CisJCSAgcGJ1 ZltpKytdID0gJ0MnOworCQkgIHBidWZbaSsrXSA9ICdSJzsKKwkJICBwYnVmW2krK10gPSAnPic7 CisJCSAgY29udGludWU7CisJICAgICAgfSBlbHNlIGlmICgqcCA9PSBIVCkgeworCQkgIGlmIChp ID49IG0tNSkKKwkJICAgIGJyZWFrOworCQkgIHBidWZbaSsrXSA9ICc8JzsKKwkJICBwYnVmW2kr K10gPSAnVCc7CisJCSAgcGJ1ZltpKytdID0gJ0EnOworCQkgIHBidWZbaSsrXSA9ICdCJzsKKwkJ ICBwYnVmW2krK10gPSAnPic7CisJCSAgY29udGludWU7CisJICAgICAgfSBlbHNlIGlmICgqcCkg eworCQkgIHBidWZbaSsrXSA9ICpwOworCQkgIGNvbnRpbnVlOworCSAgICAgIH0gZWxzZSB7CisJ CSAgaWYgKGkgPj0gbS01KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1ZltpKytdID0gJzwnOworCQkg IHBidWZbaSsrXSA9ICdOJzsKKwkJICBwYnVmW2krK10gPSAnVSc7CisJCSAgcGJ1ZltpKytdID0g J0wnOworCQkgIHBidWZbaSsrXSA9ICc+JzsKKwkJICBjb250aW51ZTsKKwkgICAgICB9CisJICB9 CisJICBpZiAoaSA8IG0tMiAmJiAoKnAgfHwgY29udGQpKSB7CisJICAgICAgcGJ1ZltpKytdID0g Jy4nOworCSAgICAgIHBidWZbaSsrXSA9ICcuJzsKKwkgIH0KKwkgIHBidWZbaSsrXSA9ICddJzsK KwkgIHBidWZbaV0gPSBOVUw7CisJICBpZiAoenNvdXQoWkRGSUxFLHMxKSA8IDApIHsKKwkgICAg ICBkZWJsb2cgPSAwOworCSAgICAgIHpjbG9zZShaREZJTEUpOworCSAgfQorCSAgaWYgKHpzb3V0 bChaREZJTEUscGJ1ZikgPCAwKSB7CisJICAgICAgZGVibG9nID0gMDsKKwkgICAgICB6Y2xvc2Uo WkRGSUxFKTsKKwkgIH0KKyNpZmRlZiBDS1NZU0xPRworCSAgaWYgKGNreHN5c2xvZyA+PSBTWVNM R19EQiAmJiBja3hsb2dnaW5nKSB7CisJICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWci LHMxLHBidWYpOworCSAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIH0KKyAgICAg ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgRjEwMDogICAgICAgICAgICAgICAgICAgICAgICAvKiA0 LCAiczEiICovCisgICAgICAgIGlmICh6c291dGwoWkRGSUxFLHMxKSA8IDApIHsKKyAgICAgICAg ICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQor I2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4 bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLHMxLE5V TEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7Cisg ICAgICBjYXNlIEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyogNSwgInMxPW4iICovCisg ICAgICAgIHNwcmludGYoc3AsIiVzPSVzXG4iLHMxLGNrZnN0b2EobikpOworICAgICAgICBpZiAo enNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAg ICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAg ICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAg ICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9Cisj ZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYxMTA6ICAg ICAgICAgICAgICAgICAgICAgICAgLyogNiwgInMxW3MyXSIgKi8KKyAgICAgICAgc3ByaW50Zihz cCwiJXNbJXNdXG4iLHMxLHMyKTsKKyAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAw KSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7 CisgICAgICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEs ImRlYnVnIixkYnB0cixOVUxMKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisg ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMTExOiAgICAgICAgICAgICAgICAgICAgICAgIC8q IDcsICJzMVtzMl09biIgKi8KKyAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPSVzXG4iLHMxLHMy LGNrZnN0b2EobikpOworICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAg ICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAg ICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIg JiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWci LGRicHRyLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAg YnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBzcHJpbnRmKHNwLCJcbj9JbnZhbGlkIGZv cm1hdCBmb3IgZGVidWcoKSAtICVkXG4iLGYpOworICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRi cHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2Uo WkRGSUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisgICAgICAgIGlmIChja3hzeXNs b2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAgICAgICAgY2tzeXNsb2coU1lT TEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9CisjZW5kaWYgLyogQ0tTWVNM T0cgKi8KKyAgICAgICAgYnJlYWs7CisgICAgfQorICB4ZGVidWc6ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIENvbW1vbiBleGl0IHBvaW50ICovCisjaWZkZWYgT1MyCisgICAgaWYg KFN5c0luaXRlZCkKKwlSZWxlYXNlRGVidWdNdXRleCgpOworI2Vsc2UgLyogT1MyICovCisgICAg ZGVibG9nID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSB0aGlzICovCisj ZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJ QworZG9oZXhkdW1wKENIQVIgKm1zZywgQ0hBUiAqc3QsIGludCBjbnQpCisjZWxzZQorZG9oZXhk dW1wKG1zZyxzdCxjbnQpIENIQVIgKm1zZzsgQ0hBUiAqc3Q7IGludCBjbnQ7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KKy8qIGRvaGV4ZHVtcCAqLyB7CisgICAgaW50IGkgPSAwLCBqID0gMCwgayA9 IDA7CisgICAgY2hhciB0bXBbOF07CisjaWZkZWYgT1MyCisgICAgZXh0ZXJuIGludCBTeXNJbml0 ZWQ7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoIWRlYmxvZykgcmV0dXJuKDApOwkJLyog SWYgbm8gZGVidWcgbG9nLCBkb24ndC4gKi8KKyAgICBpZiAoIWRicHRyKSB7ICAgICAgICAgICAg ICAgICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVyICovCisgICAgICAgIGRicHRyID0g bWFsbG9jKERCVUZMKzEpOyAgICAgICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgb25jZSAqLworICAg ICAgICBpZiAoIWRicHRyKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAg emNsb3NlKFpERklMRSk7CisgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KKyAgICB9 CisKKyNpZmRlZiBPUzIKKyAgICBpZiAoU3lzSW5pdGVkKSB7CisJaWYgKFJlcXVlc3REZWJ1Z011 dGV4KDMwMDAwKSkKKwkgICAgZ290byB4ZGVidWc7CisgICAgfQorI2Vsc2UgLyogT1MyICovCisg ICAgZGVibG9nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJldmVudCBpbmZpbml0 ZSByZWN1cnNpb24gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIGlmIChtc2cgIT0gTlVMTCkg eworCWNrbWFreG1zZyhkYnB0ciwKKwkJICBEQlVGTCwKKwkJICAiSEVYRFVNUDogIiwKKwkJICAo Y2hhciAqKW1zZywKKwkJICAiICgiLAorCQkgIGNraXRvYShjbnQpLAorCQkgICIgYnl0ZXMpXG4i LAorCQkgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKwkJICk7CisgICAgICAg IGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsK KyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICAgICAg fQorICAgIH0gZWxzZSB7CisJY2ttYWttc2coZGJwdHIsCisJCSBEQlVGTCwKKwkJICJIRVhEVU1Q OiAoIiwKKwkJIGNraXRvYShjbnQpLAorCQkgIiBieXRlcylcbiIsCisJCSBOVUxMCisJCSApOwor ICAgICAgICB6c291dChaREZJTEUsZGJwdHIpOworICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRi cHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2Uo WkRGSUxFKTsKKwkgICAgZ290byB4ZGVidWc7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChp ID0gMDsgaSA8IGNudDsgaSsrKSB7CisgICAgICAgIGRicHRyWzBdID0gJ1wwJzsKKyAgICAgICAg Zm9yIChqID0gMCA7IChqIDwgMTYpOyBqKyspIHsKKyAgICAgICAgICAgIGlmICgoaSArIGopIDwg Y250KQorCSAgICAgIHNwcmludGYodG1wLAorCQkgICAgICAiJXMlMDJ4ICIsCisJCSAgICAgIChq ID09IDggPyAifCAiIDogIiIpLAorCQkgICAgICAoQ0hBUikgc3RbaSArIGpdCisJCSAgICAgICk7 CisgICAgICAgICAgICBlbHNlCisJICAgICAgc3ByaW50Zih0bXAsCisJCSAgICAgICIlcyAgICIs CisJCSAgICAgIChqID09IDggPyAifCAiIDogIiIpCisJCSAgICAgICk7CisgICAgICAgICAgICBj a3N0cm5jYXQoZGJwdHIsdG1wLERCVUZMKzEpOworICAgICAgICB9CisgICAgICAgIGNrc3RybmNh dChkYnB0ciwiICIsREJVRkwrMSk7CisgICAgICAgIGZvciAoayA9IDA7IChrIDwgMTYpICYmICgo aSArIGspIDwgY250KTsgaysrKSB7CisgICAgICAgICAgICBzcHJpbnRmKHRtcCwKKyAgICAgICAg ICAgICAgICAgICAgIiVzJWMiLAorICAgICAgICAgICAgICAgICAgICAoayA9PSA4ID8gIiAiIDog IiIpLAorICAgICAgICAgICAgICAgICAgICBpc3ByaW50KHN0W2kgKyBrXSkgPyBzdFtpICsga10g OiAnLicKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNrc3RybmNhdChkYnB0 cix0bXAsREJVRkwrMSk7CisgICAgICAgIH0KKyAgICAgICAgY2tzdHJuY2F0KGRicHRyLCJcbiIs REJVRkwrMSk7CisgICAgICAgIGkgKz0gaiAtIDE7CisgICAgICAgIGlmICh6c291dChaREZJTEUs ZGJwdHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9z ZShaREZJTEUpOworCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICAgICAgfQorICAgIH0gLyogZW5kIGZv ciAqLworCisKKyAgeGRlYnVnOgorI2lmZGVmIE9TMgorICAgIGlmIChTeXNJbml0ZWQpCisgICAg ICBSZWxlYXNlRGVidWdNdXRleCgpOworI2Vsc2UgLyogT1MyICovCisgICAgZGVibG9nID0gMTsK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogREVCVUcgKi8K KworLyogIFNlc3Npb24gTG9nLi4uICovCisKK2ludCB0c3N0YXRlID0gMDsKKworVk9JRAorI2lm ZGVmIE9TMgorbG9nY2hhcih1bnNpZ25lZCBzaG9ydCBjKQorI2Vsc2UgLyogT1MyICovCisjaWZk ZWYgQ0tfQU5TSUMKK2xvZ2NoYXIoY2hhciBjKQorI2Vsc2UKK2xvZ2NoYXIoYykgY2hhciBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyogT1MyICovCisvKiBsb2djaGFyICovIHsg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9nIGNoYXJhY3RlciBjIHRvIHNlc3Npb24gbG9n ICovCisgICAgZXh0ZXJuIGludCBzbG9nbnVsOworICAgIGludCBva3RvbG9nID0gMDsKKyNpZm5k ZWYgTk9MT0NBTAorICAgIGlmICghc2VzbG9nKQorICAgICAgcmV0dXJuOworCisgICAgaWYgKChz ZXNzZnQgIT0gWFlGVF9UKSB8fCAoCisjaWZkZWYgVU5JWAorCSBjICE9ICdccicgJiYKKyNlbHNl CisjaWZkZWYgZGF0YWdlbmVyYWwKKwkgYyAhPSAnXHInICYmCisjZWxzZQorI2lmZGVmIFNUUkFU VVMKKwkgYyAhPSAnXHInICYmCisjZWxzZQorI2lmZGVmIEFNSUdBCisJIGMgIT0gJ1xyJyAmJgor I2Vsc2UKKyNpZmRlZiBHRU1ET1MKKwkgYyAhPSAnXHInICYmCisjZW5kaWYgLyogR0VNRE9TICov CisjZW5kaWYgLyogQU1JR0EgKi8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogZGF0 YWdlbmVyYWwgKi8KKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgT1NLCisJIGMgIT0gJ1xuJyAm JgorI2Vsc2UKKyNpZmRlZiBNQUMKKwkgYyAhPSAnXG4nICYmCisjZW5kaWYgLyogTUFDICovCisj ZW5kaWYgLyogT1NLICovCisJIGMgIT0gWE9OICYmCisJIGMgIT0gWE9GRikpCisgICAgICBva3Rv bG9nID0gMTsKKyAgICBpZiAoYyA9PSAnXDAnICYmICFzZXNzZnQpCQkvKiBOVUwgaW4gdGV4dCBt b2RlICovCisgICAgICBpZiAoc2xvZ251bCkgb2t0b2xvZyA9IDE7CQkvKiBvbmx5IGlmIHBhZGRp bmcgKDIwMDkvMTAvMjIpICovCisgICAgaWYgKCFva3RvbG9nKQorICAgICAgcmV0dXJuOworICAg IGlmIChzbG9ndHMpIHsJCQkvKiBMb2cgaXMgdGltZXN0YW1wZWQgKi8KKwlpZiAodHNzdGF0ZSA9 PSAwKSB7CQkvKiBTdGF0ZSA9IGJldHdlZW4tbGluZXMgKi8KKwkgICAgY2hhciAqIHA7CQkJLyog enN0aW1lKCkgcG9pbnRlciAqLworCSAgICBjaGFyIHRzWzQ4XTsJCS8qIHRpbWVzdGFtcCBidWZm ZXIgKi8KKwkgICAgenRpbWUoJnApOwkJCS8qIEdldCBhc2N0aW1lKCkgc3RyaW5nICovCisJICAg IGNrc3RybmNweSh0cyxwLDMyKTsJCS8qIE1ha2Ugc2FmZSBjb3B5ICovCisJICAgIGlmICh6dG1z ZWMgPiAtMUwpIHsJCS8qIEFkZCBtc2VjcyBpZiB3ZSBoYXZlIHRoZW0gKi8KKwkJc3ByaW50Zigm dHNbMTldLCIuJTAzbGQ6ICIsenRtc2VjKTsgLyogU0FGRSAqLworCSAgICB9IGVsc2UgeworCQl0 c1sxOV0gPSAnOic7CisJCXRzWzIwXSA9IFNQOworCQl0c1syMV0gPSBOVUw7CisJICAgIH0KKwkg ICAgaWYgKHpzb3V0KFpTRklMRSwmdHNbMTFdKSA8IDApCisJICAgICAgZ290byB4bG9nY2hhcjsK Kwl9CisgICAgfQorICAgIGlmIChjID09ICdcbicpCQkJLyogQXQgZW5kIG9mIGxpbmU/ICovCisg ICAgICB0c3N0YXRlID0gMDsJCQkvKiB5ZXMgKi8KKyAgICBlbHNlCisgICAgICB0c3N0YXRlID0g MTsJCQkvKiBubyAqLworICAgIGlmICh6Y2hvdXQoWlNGSUxFLChDSEFSKShjICYgMHhGRikpIDwg MCkgLyogTG9nIHRoZSBjaGFyYWN0ZXIgKi8KKyAgICAgIGdvdG8geGxvZ2NoYXI7CisgICAgaWYg KHRzc3RhdGUgPT0gMCAmJiBzbG9nbnVsICE9IDApIHsJLyogTnVsbC10ZXJtaW5hdGluZyBsaW5l cz8gKi8KKwlpZiAoemNob3V0KFpTRklMRSwoQ0hBUikwKSA8IDApCS8qIEFkZCBhIE5VTCAqLwor CSAgZ290byB4bG9nY2hhcjsKKyAgICB9CisgICAgcmV0dXJuOworCisgIHhsb2djaGFyOgorICAg IGNvbm9sbCgiIik7CisgICAgY29ub2xsKCJFUlJPUiBXUklUSU5HIFNFU1NJT04gTE9HLCBMT0cg Q0xPU0VEISIpOworICAgIHNldHNlc2xvZygwKTsKKyAgICB6Y2xvc2UoWlNGSUxFKTsKKyNlbmRp ZiAvKiBOT0xPQ0FMICovCit9CisKK1ZPSUQKK2xvZ3N0cihzLCBsZW4pIGNoYXIgKiBzOyBpbnQg bGVuOyB7ICAgICAvKiBMb2cgc3RyaW5nIHRvIHNlc3Npb24gbG9nICovCisjaWZuZGVmIE5PTE9D QUwKKyAgICBpbnQgbiA9IDA7CisgICAgaWYgKCFzKQorICAgICAgcmV0dXJuOworICAgIHdoaWxl IChzZXNsb2cgJiYgKG4gPCBsZW4pKQorICAgICAgbG9nY2hhcihzW24rK10pOworI2VuZGlmIC8q IE5PTE9DQUwgKi8KK30KKworI2lmZGVmIENLX0NVUlNFUworaW50Citja19yZXBhaW50KCkgewor ICAgIHJlcGFpbnQgPSAxOworICAgIHJldHVybigwKTsKK30KKworI2lmZGVmIFNUUkFUVVMKKy8q IFZPUyBoYXMgY3Vyc2VzIGJ1dCBubyB0Z2V0ZW50KCkgKi8KK2ludAordGdldGVudChzMSwgczIp IGNoYXIgKiBzMSwgKiBzMjsgeworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBTVFJBVFVT ICovCisKKyNpZmRlZiBWTVMKKyNpZmRlZiBfX0RFQ0MKK19QUk9UT1RZUChpbnQgdGdldGVudCwo Y2hhciAqLCBjaGFyICopKTsKKyNlbmRpZiAvKiBfX0RFQ0MgKi8KKyNlbmRpZiAvKiBWTVMgKi8K KworLyoKKyAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB3YXlzIHRvIGRvIGZ1bGxzY3JlZW4g b24gVk1TLgorICAxLiBVc2UgdGhlIHJlYWwgY3Vyc2VzIGxpYnJhcnksIFZBWENDVVJTRS4KKyAg Mi4gVXNlIGRvLWl0LXlvdXJzZWxmIGNvZGUuCisgIDMuIFVzZSB0aGUgU2NyZWVuIE1hbmFnZXIs IFNNRyQuCisKKyAgTWV0aG9kIDEgZG9lc24ndCB3b3JrIHF1aXRlIHJpZ2h0OyB5b3UgY2FuJ3Qg Y2FsbCBlbmR3aW4oKSwgc28gb25jZSB5b3UndmUKKyAgc3RhcnRlZCBjdXJzZXMgbW9kZSwgeW91 IGNhbiBuZXZlciBsZWF2ZS4KKworICBNZXRob2QgMiBkb2Vzbid0IG9wdGltaXplIHRoZSBzY3Jl ZW4sIGFuZCBzbyBtdWNoIG1vcmUgdGltZSBpcyBzcGVudCBpbgorICBzY3JlZW4gd3JpdGVzLiAg VGhpcyBhY3R1YWxseSBjYXVzZXMgZmlsZSB0cmFuc2ZlcnMgdG8gZmFpbCBiZWNhdXNlIHRoZQor ICB0dHkgZGV2aWNlIGlucHV0IGJ1ZmZlciBjYW4gYmUgb3ZlcnJ1biB3aGlsZSB0aGUgc2NyZWVu IGlzIGJlaW5nIHVwZGF0ZWQsCisgIGVzcGVjaWFsbHkgb24gYSBzbG93IE1pY3JvVkFYIHRoYXQg aGFzIHNtYWxsIHR5cGVhaGVhZCBidWZmZXJzLgorCisgIEluIHRoZSBmb2xsb3dpbmcgI2lmZGVm IGJsb2NrLCAjZGVmaW5lIG9uZSBvZiB0aGVtIGFuZCAjdW5kZWYgdGhlIG90aGVyIDIuCisKKyAg U28gbm93IGxldCdzIHRyeSBtZXRob2QgMy4uLgorKi8KKyNpZmRlZiBWTVMKKyNkZWZpbmUgQ0tf U01HICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTY3JlZW4gTWFuYWdlciAqLworI3VuZGVm IE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJzZWxmICovCisj dW5kZWYgVk1TQ1VSU0UgICAgICAgICAgICAgICAgICAgICAgICAgLyogVkFYQ0NVUlNFIGxpYnJh cnkgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKy8qCisgIEJ1dCBqdXN0IGJlZm9yZSBOZXcgWWVhcnMs IDIwMDAsIHRoZSBTTUcgbGlicmFyeSBzZWVtZWQgdG8gYnJlYWsgb24KKyAgYm90aCBWTVMgc3lz dGVtcyB3ZSBoYXZlIGhlcmUgKGFuIEFscGhhIHdpdGggVk1TIDcuMSBhbmQgYSBWQVggd2l0aCA1 LjUpLgorICBTbyBiYWNrIHRvIE1ZQ1VSU0VTLCB3aGljaCB3b3JrcyBmaW5lLgorKi8KKyNpZmRl ZiBWTVMKKyN1bmRlZiBDS19TTUcKKyNkZWZpbmUgTVlDVVJTRVMKKyNlbmRpZiAvKiBWTVMgKi8K KworI2lmZGVmIE1ZQ1VSU0VTCisjZGVmaW5lIHN0ZHNjciAwCisjaWZkZWYgQ0tfV1JFRlJFU0gK KyN1bmRlZiBDS19XUkVGUkVTSAorI2VuZGlmIC8qIENLX1dSRUZSRVNIICovCisjZW5kaWYgLyog TVlDVVJTRVMgKi8KKworLyogIFMgQyBSIEUgRSBOIEMgIC0tICBTY3JlZW4gZGlzcGxheSBmdW5j dGlvbiwgdXNlcyBjdXJzZXMgICovCisKKy8qIElkZWEgZm9yIGN1cnNlcyBkaXNwbGF5IGNvbnRy aWJ1dGVkIGJ5IENocmlzIFByYXR0IG9mIEFQViBCYWtlciwgVUsgKi8KKworLyogQXZvaWQgY29u ZmljdHMgd2l0aCBjdXJzZXMuaCAqLworCisjaWZkZWYgUU5YCisvKiBTYW1lIGFzIGNrY2FzYy5o LCBidXQgaW4gYSBkaWZmZXJlbnQgcmFkaXguLi4gKi8KKyNpZmRlZiBFU0MKKyN1bmRlZiBFU0MK KyNlbmRpZiAvKiBFU0MgKi8KKyNlbmRpZiAvKiBRTlggKi8KKworI2lmbmRlZiBNWUNVUlNFUwor I3VuZGVmIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgd2FzIGRlZmlu ZWQgaW4gY2tjZGViLmggKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworCisjdW5kZWYgQlMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlc2Ugd2VyZSBkZWZpbmVkIGluIGNrY2Fz Yy5oICovCisjdW5kZWYgQ1IKKyN1bmRlZiBOTAorI3VuZGVmIFNPCisjaWZkZWYgVVMKKyN1bmRl ZiBVUworI2VuZGlmCS8qIFVTICovCisjdW5kZWYgU1AgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogVXNlZCBpbiBuY3Vyc2VzICovCisjZGVmaW5lIENIUl9TUCAzMiAgICAgICAgICAg ICAgICAgICAgICAgLyogVXNlIHRoaXMgaW5zdGVhZCAqLworCisjaWZkZWYgVk1TICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogVk1TIGZ1bGxzY3JlZW4gZGlzcGxheSAqLworI2lmZGVm IE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERvLWl0LXlvdXJzZWxmIG1ldGhv ZCAqLworZXh0ZXJuIGludCBpc3Z0NTI7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZyb20gQ0tW VElPLkMgKi8KKyNkZWZpbmUgcHJpbnR3IHByaW50ZgorI2Vsc2UKKyNpZmRlZiBWTVNDVVJTRSAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBWTVMgY3Vyc2VzIGxpYnJhcnkgVkFYQ0NVUlNFICov CisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisvKiBOb3RlOiBTY3JlZW4gbWFuYWdlciBkb2Vzbid0IG5l ZWQgYSBoZWFkZXIgZmlsZSAqLworI2VuZGlmIC8qIFZNU0NVUlNFICovCisjZW5kaWYgLyogTVlD VVJTRVMgKi8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3Qg Vk1TICovCisjaWZkZWYgTVlDVVJTRVMgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG8taXQt eW91cnNlbGYgbWV0aG9kICovCisjZGVmaW5lIGlzdnQ1MiAwICAgICAgICAgICAgICAgICAgICAg ICAgLyogVXNlZCBieSBPUy8yLCBWVC0xMDAvQU5TSSBhbHdheXMgKi8KKyNpZmRlZiBDS1hQUklO VEYKKyNkZWZpbmUgcHJpbnR3IGNreHByaW50ZgorI2Vsc2UgLyogQ0tYUFJJTlRGICovCisjaWZk ZWYgS1VJCisjZGVmaW5lIHByaW50dyBWc2NybnByaW50dworI2Vsc2UgLyogS1VJICovCisjZGVm aW5lIHByaW50dyBwcmludGYKKyNlbmRpZiAvKiBLVUkgKi8KKyNlbmRpZiAvKiBDS1hQUklOVEYg Ki8KKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVc2UgcmVhbCBj dXJzZXMgKi8KKyNpZmRlZiBDS19OQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAvKiBvciBu Y3Vyc2VzLi4uICovCisjaWZkZWYgQ0tYUFJJTlRGICAgICAgICAgICAgICAgICAgICAgICAgLyog T3VyIHByaW50ZiBtYWNybyBjb25mbGljdHMgd2l0aCAqLworI3VuZGVmIHByaW50ZiAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHVzZSBvZiAicHJpbnRmIiBpbiBuY3Vyc2VzLmggKi8KKyNl bmRpZiAvKiBDS1hQUklOVEYgKi8KKyNpbmNsdWRlIDxuY3Vyc2VzLmg+CisjaWZkZWYgQ0tYUFJJ TlRGCisjZGVmaW5lIHByaW50ZiBja3hwcmludGYKKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNl bHNlICAvKiBOb3QgbmN1cnNlcyAqLworI2lmZGVmIENLWFBSSU5URiAgICAgICAgICAgICAgICAg ICAgICAgIC8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KKyN1bmRlZiBwcmlu dGYgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2Ugb2YgInByaW50ZiIgaW4gY3Vyc2Vz LmggKi8KKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNpZmRlZiBNX1hFTklYCQkJCS8qIFNDTyBY RU5JWC4uLiAqLworI2lmZGVmIE1fVEVSTUNBUAorI3VuZGVmIE1fVEVSTUNBUAorI2VuZGlmIC8q IE1fVEVSTUNBUCAqLworI2lmbmRlZiBNX1RFUk1JTkZPCisjZGVmaW5lIE1fVEVSTUlORk8KKyNl bmRpZiAvKiBNX1RFUk1JTkZPICovCisjZW5kaWYgLyogTV9YRU5JWCAqLworI2lmZGVmIFJUQUlY CisjdW5kZWYgTkxTCQkJCS8qIEF2b2lkICdyZWRlY2xhcmF0aW9uIG9mIGZyZWUnLiAqLworI2Vu ZGlmIC8qIFJUQUlYICovCisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjaWZkZWYgQ0tYUFJJTlRGCisj ZGVmaW5lIHByaW50ZiBja3hwcmludGYKKyNlbmRpZiAvKiBDS1hQUklOVEYgKi8KKyNlbmRpZiAv KiBDS19OQ1VSU0VTICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8K KworI2lmZGVmIEJVRzk5OQorX1BST1RPVFlQKGludCB0Z2V0ZW50LChjaGFyICosIGNoYXIgKikp OworX1BST1RPVFlQKGNoYXIgKnRnZXRzdHIsKGNoYXIgKiwgY2hhciAqKikpOworX1BST1RPVFlQ KGludCB0cHV0cywoY2hhciAqLCBpbnQsIGludCAoKikoKSkpOworX1BST1RPVFlQKGNoYXIgKnRn b3RvLChjb25zdCBjaGFyICosIGludCwgaW50KSk7CisjZW5kaWYJLyogQlVHOTk5ICovCisKKyNl bmRpZiAvKiBDS19DVVJTRVMgKi8KKworLyogIEYgWCBEIEkgTiBJIFQgIC0tICBGaWxlIFhmZXIg RGlzcGxheSBJbml0aWFsaXphdGlvbiAgKi8KKworI2lmZGVmIENLX0NVUlNFUworI2lmbmRlZiBN WUNVUlNFUworI2lmbmRlZiBDS19TTUcKK3N0YXRpYworI2lmZGVmIENLX0FOU0lDCisvKiBDYW4n dCB1c2UgVk9JRCBiZWNhdXNlIG9mIGN1cnNlcy5oICovCit2b2lkCitja190ZXJtc2V0KGludCk7 CisjZWxzZQorY2tfdGVybXNldCgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisjZW5kaWYgLyog Q0tfU01HICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8K KworI2lmZGVmIE5PVEVSTUNBUAorc3RhdGljIGludCBub3Rlcm1jYXAgPSAxOworI2Vsc2UKK3N0 YXRpYyBpbnQgbm90ZXJtY2FwID0gMDsKKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KKworI2lmbmRl ZiBOT0RJU1BMQVkKK0NLVk9JRAorZnhkaW5pdCh4ZGlzcGxhKSBpbnQgeGRpc3BsYTsgeworI2lm bmRlZiBDT0hFUkVOVAorI2lmbmRlZiBPUzIKKyNpZm5kZWYgU1RSQVRVUworICAgIGNoYXIgKnM7 CisgICAgaW50IHgsIGR1bW15OworCisgICAgZGVidWcoRjEwMSwiZnhkaW5pdCB4ZGlzcGxhIiwi Iix4ZGlzcGxhKTsKKyAgICBkZWJ1ZyhGMTAxLCJmeGRpbml0IGZ4ZF9pbml0ZWQiLCIiLGZ4ZF9p bml0ZWQpOworCisjaWZkZWYgSUtTRAorI2lmbmRlZiBOT1hGRVIKKyAgICAvKiBObyBjdXJzZXMg Zm9yIElLU0QgKi8KKyAgICBpZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgZmRpc3BsYSA9IFhZRkRf TjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZnhkX2luaXRlZCkgICAgICAgICAg ICAgICAgICAgICAvKiBPbmx5IGRvIHRoaXMgb25jZSAqLworICAgICAgcmV0dXJuOworI2VuZGlm IC8qIE5PWEZFUiAqLworI2VuZGlmIC8qIElLU0QgKi8KKworICAgIGlmICh4ZGlzcGxhID09IFhZ RkRfUiB8fCB4ZGlzcGxhID09IFhZRkRfUyB8fCB4ZGlzcGxhID09IFhZRkRfQikgeworCWlmICh4 ZnJtc2cpIHsKKwkgICAgcHJpbnRmKCIlc1xuIix4ZnJtc2cpOworCSAgICBtYWtlc3RyKCZ4ZnJt c2csTlVMTCk7CisJfQorICAgIH0KKworI2lmZGVmIENLX0NVUlNFUworI2lmZGVmIFZNUworICAg IC8qIEZvcmNlIEJSSUVGIGluIEJhdGNoIGxvZ3MgKi8KKyAgICBpZiAoYmF0Y2ggJiYgKHhkaXNw bGEgPT0gWFlGRF9DIHx8IHhkaXNwbGEgPT0gWFlGRF9TKSkKKyAgICAgIHhkaXNwbGEgPSBYWUZE X0I7CisjZWxzZQorICAgIGlmICh4ZGlzcGxhID09IFhZRkRfQyB8fCB4ZGlzcGxhID09IDk5OTkp IHsKKworI2lmZGVmIERZTkFNSUMKKyAgICAgICAgaWYgKCF0cm1idWYpIHsKKy8qCisgIEFsbG9j YXRlIHRnZXRlbnQoKSBidWZmZXIuICBNYWtlIGl0IGJpZyAtLSBzb21lIHRlcm1jYXBzIGNhbiBi ZSBodWdlOworICB0Z2V0ZW50KCkgbWVycmlseSB3cml0ZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBi dWZmZXIsIGNhdXNpbmcgY29yZSBkdW1wcworICBvciB3b3JzZS4KKyovCisgICAgICAgICAgICB0 cm1idWYgPSAoY2hhciAqKW1hbGxvYyhUUk1CVUZMKTsKKyAgICAgICAgICAgIGlmICghdHJtYnVm KSB7CisgICAgICAgICAgICAgICAgbm90ZXJtY2FwID0gMTsKKyAgICAgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJmeGRpbml0IG1hbGxvYyB0cm1idWYiLCJGQUlMRUQiLFRSTUJVRkwpOworICAgICAg ICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ4ZGlu aXQgbWFsbG9jIHRybWJ1ZiIsIk9LIixUUk1CVUZMKTsKKyAgICAgICAgICAgIGRlYnVnKEYwMDEs ImZ4ZGluaXQgdHJtYnVmIiwiIix0cm1idWYpOworICAgICAgICAgICAgbWVtc2V0KHRybWJ1Ziwn XDAnLChzaXplX3QpVFJNQlVGTCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJmeGRpbml0IG1l bXNldCBPSyIsIiIsMCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB9CisjZW5kaWYg LyogRFlOQU1JQyAqLworCisgICAgICAgIGRlYnVnKEYxMDAsImZ4ZGluaXQgYmVmb3JlIGdldGVu dihURVJNKSIsIiIsMCk7CisgICAgICAgIHMgPSBnZXRlbnYoIlRFUk0iKTsKKyAgICAgICAgZGVi dWcoRjExMCwiZnhkaW5pdCBhZnRlciBnZXRlbnYoVEVSTSkiLHMsMCk7CisgICAgICAgIGlmICgh cykgcyA9ICIiOworICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ4 ZGluaXQgYmVmb3JlIHRnZXRlbnQoKSIscywwKTsKKyAgICAgICAgICAgIHggPSB0Z2V0ZW50KHRy bWJ1ZixzKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImZ4ZGluaXQgdGdldGVudCIscyx4KTsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgbm90ZXJt Y2FwID0gMTsKKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImZ4ZGluaXQgVEVSTSBudWxsIC0gbm8g dGdldGVudCIscywwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeCA8IDEgJiYgIXF1aWV0ICYm ICFiYWNrZ3JkCisjaWZkZWYgVk1TCisgICAgICAgICAgICAmJiAhYmF0Y2gKKyNlbmRpZiAvKiBW TVMgKi8KKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgcHJpbnRmKCJXYXJuaW5nOiB0ZXJt aW5hbCB0eXBlIHVua25vd246IFwiJXNcIlxuIixzKTsKKyNpZmRlZiBDT01NRU5UCisJICAgIC8q IENvbmZ1c2luZyAtIG5vYm9keSBrbm93cyB3aGF0IHRoaXMgbWVhbnMgKi8KKyAgICAgICAgICAg IHByaW50ZigiU0NSRUVOIGNvbW1hbmQgd2lsbCB1c2UgQU5TSSBzZXF1ZW5jZXMuXG4iKTsKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBpZiAobG9jYWwpCisgICAgICAgICAgICAg IHByaW50ZigiRnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgZGlzYWJsZWQuXG4iKTsK KyAgICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7CisgICAgICAgIH0KKyNpZm5kZWYgTVlDVVJT RVMKKyNpZm5kZWYgQ0tfU01HCisgICAgICAgIGNrX3Rlcm1zZXQoeCk7CisjZW5kaWYgLyogQ0tf U01HICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKyAgICAgICAgZnhkX2luaXRlZCA9IDE7Cisg ICAgfQorI2VuZGlmIC8qIENLX0NVUlNFUyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8q IFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBDT0hFUkVOVCAqLworfQor I2VuZGlmIC8qIE5PRElTUExBWSAqLworCisjaWZkZWYgQ0tfQ1VSU0VTCisjaWZkZWYgQ0tfU01H CisvKgorICBMb25nIHNlY3Rpb24gZm9yIFNjcmVlbiBNYW5hZ2VyIHN0YXJ0cyBoZXJlLi4uCisg IEJ5IFdpbGxpYW0gQmFkZXIuCisqLworI2luY2x1ZGUgImNrdnZtcy5oIgorI2lmZGVmIE9MRF9W TVMKKyNpbmNsdWRlIDxzbWdkZWYuaD4gICAgICAgICAgICAgICAgICAgICAvKiB1c2UgdGhpcyBv biBWQVggQyAyLjQgKi8KKy8qICNpbmNsdWRlIDxzbWdtc2cuaD4gKi8KKyNlbHNlCisjaW5jbHVk ZSA8c21nJHJvdXRpbmVzLmg+ICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLworI2Vu ZGlmIC8qIE9MRF9WTVMgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCB2bXNfc3RhdHVzOyAgICAg LyogVXNlZCBmb3Igc3lzdGVtIHNlcnZpY2UgcmV0dXJuIHN0YXR1cyAqLworCitzdGF0aWMgbG9u ZyBzbWdfcGFzdGVib2FyZF9pZCA9IC0xOyAgICAgLyogcGFzdGVib2FyZCBpZGVudGlmaWVyICov CitzdGF0aWMgbG9uZyBzbWdfZGlzcGxheV9pZCA9IC0xOyAgICAgICAgLyogZGlzcGxheSBpZGVu dGlmaWVyICovCitzdGF0aWMgaW50IHNtZ19vcGVuID0gMDsgICAgICAgICAgICAgICAgLyogZmxh ZyBpZiBzbWcgY3VycmVudCBvcGVuICovCitzdGF0aWMgaW50IHNtZ19pbml0ZWQgPSAwOyAgICAg ICAgICAgICAgLyogZmxhZyBpZiBzbWcgaW5pdGlhbGl6ZWQgKi8KKworI2lmZGVmIENPTU1FTlQK KyNkZWZpbmUgY2xydG9lb2woKSAgICAgIFNNRyRFUkFTRV9MSU5FKCZzbWdfZGlzcGxheV9pZCwg MCwgMCkKKworI2RlZmluZSBjbGVhcigpICAgICAgICAgU01HJEVSQVNFX0RJU1BMQVkoJnNtZ19k aXNwbGF5X2lkLCAwLCAwLCAwLCAwKQorCisjZGVmaW5lIHRvdWNod2luKHNjcikgICBTTUckUkVQ QUlOVF9TQ1JFRU4oJnNtZ19wYXN0ZWJvYXJkX2lkKQorCisjZWxzZSAgLyogTm90IENPTU1FTlQg Ki8KKworI2RlZmluZSBjbHJ0b2VvbCgpICAgICAgc21nJGVyYXNlX2xpbmUoJnNtZ19kaXNwbGF5 X2lkLCAwLCAwKQorCisjZGVmaW5lIGNsZWFyKCkgICAgICAgICBzbWckZXJhc2VfZGlzcGxheSgm c21nX2Rpc3BsYXlfaWQsIDAsIDAsIDAsIDApCisKKyNkZWZpbmUgdG91Y2h3aW4oc2NyKSAgIHNt ZyRyZXBhaW50X3NjcmVlbigmc21nX3Bhc3RlYm9hcmRfaWQpCisjZW5kaWYgLyogQ09NTUVOVCAq LworCisjZGVmaW5lIGNsZWFyb2soY3Vyc2NyLG9rKSAgICAgICAgICAgICAgLyogTGV0IHdyZWZy ZXNoKCkgZG8gdGhlIHdvcmsgKi8KKworI2RlZmluZSB3cmVmcmVzaChjdXJzcmMpIHRvdWNod2lu KHNjcikKKworc3RhdGljIHZvaWQKK21vdmUocm93LCBjb2wpIGludCByb3csIGNvbDsgeworICAg IC8qIENoYW5nZSBmcm9tIDAtYmFzZWQgZm9yIGN1cnNlcyB0byAxLWJhc2VkIGZvciBTTUcgKi8K KyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuOworICAgICsrcm93OyArK2NvbDsKKyAg ICBkZWJ1ZyhGMTExLCJWTVMgc21nIG1vdmUiLGNraXRvYShyb3cpLGNvbCk7CisjaWZkZWYgQ09N TUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLworICAgIENI RUNLX0VSUigibW92ZTogc21nJHNldF9jdXJzb3JfYWJzIiwKKyAgICAgICAgICAgICAgU01HJFNF VF9DVVJTT1JfQUJTKCZzbWdfZGlzcGxheV9pZCwgJnJvdywgJmNvbCkpOworI2Vsc2UKKyAgICBD SEVDS19FUlIoIm1vdmU6IHNtZyRzZXRfY3Vyc29yX2FicyIsCisgICAgICAgICAgICAgIHNtZyRz ZXRfY3Vyc29yX2Ficygmc21nX2Rpc3BsYXlfaWQsICZyb3csICZjb2wpKTsKKyNlbmRpZiAvKiBD T01NRU5UICovCisgICAgZGVidWcoRjEwMSwiVk1TIHNtZyBtb3ZlIHZtc19zdGF0dXMiLCIiLHZt c19zdGF0dXMpOworfQorCisjaWZkZWYgVk1TX1Y0MAorI2RlZmluZSBPTERfVk1TCisjZW5kaWYg LyogVk1TX1Y0MCAqLworI2lmZGVmIFZNU19WNDIKKyNkZWZpbmUgT0xEX1ZNUworI2VuZGlmIC8q IFZNU19WNDIgKi8KKyNpZmRlZiBWTVNfVjQ0CisjZGVmaW5lIE9MRF9WTVMKKyNlbmRpZiAvKiBW TVNfVjQ0ICovCisKK3N0YXRpYyBpbnQKK2luaXRzY3IoKSB7CisgICAgaW50IHJvd3MgPSAyNCwg Y29scyA9IDgwOworICAgIGludCByb3cgPSAxLCBjb2wgPSAxOworCisgICAgZGVidWcoRjEwMSwi Vk1TIGluaXRzY3Igc21nX3Bhc3RlYm9hcmRfaWQgQSIsIiIsc21nX3Bhc3RlYm9hcmRfaWQpOwor CisgICAgaWYgKHNtZ19wYXN0ZWJvYXJkX2lkID09IC0xKSB7IC8qIE9wZW4gdGhlIHNjcmVlbiAq LworI2lmZGVmIE9MRF9WTVMgICAgICAgICAgICAgICAgICAgICAvKiBOb3RlOiBSb3V0aW5lIGNh bGxzIGxvd2VyY2FzZWQgOS85NiAqLworICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRj cmVhdGVfcGFzdGVib2FyZCIsCisgICAgICAgICAgICAgICAgICBzbWckY3JlYXRlX3Bhc3RlYm9h cmQoJnNtZ19wYXN0ZWJvYXJkX2lkLCAwLCAwLCAwLCAwKSk7CisjZWxzZQorICAgICAgICAvKiBG b3IgVk1TIFY1LCBub3QgdGVzdGVkICovCisgICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21n JGNyZWF0ZV9wYXN0ZWJvYXJkIiwKKyAgICAgICAgICAgICAgICAgIHNtZyRjcmVhdGVfcGFzdGVi b2FyZCgmc21nX3Bhc3RlYm9hcmRfaWQsIDAsIDAsIDAsIDAsIDApKTsKKyNlbmRpZiAvKiBPTERf Vk1TICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19wYXN0ZWJvYXJk X2lkIEIiLCIiLHNtZ19wYXN0ZWJvYXJkX2lkKTsKKyAgICBpZiAoc21nX3Bhc3RlYm9hcmRfaWQg PT0gLTEpIHsKKwlwcmludGYoIj9FcnJvciBpbml0aWFsaXppbmcgZnVsbHNjcmVlbiBkaXNwbGF5 XG4iKTsKKwlmZGlzcGxhID0gWFlGRF9TOworCWRweWluaXQoKTsKKwlyZXR1cm4oMCk7CisgICAg fQorICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19kaXNwbGF5X2lkIiwiIixzbWdfZGlz cGxheV9pZCk7CisgICAgaWYgKHNtZ19kaXNwbGF5X2lkID09IC0xKSB7ICAgICAgICAgLyogQ3Jl YXRlIGEgZGlzcGxheSB3aW5kb3cgKi8KKworI2lmZGVmIENPTU1FTlQgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8KKyAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2Ny OiBzbWckY3JlYXRlX3ZpcnR1YWxfZGlzcGxheSIsCisgICAgICAgICAgICAgICAgICBTTUckQ1JF QVRFX1ZJUlRVQUxfRElTUExBWSgmcm93cywgJmNvbHMsICZzbWdfZGlzcGxheV9pZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDApKTsKKworICAg ICAgICAvKiBDb25uZWN0IHRoZSBkaXNwbGF5IHdpbmRvdyB0byB0aGUgc2NyZWVuICovCisgICAg ICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSIsCisgICAg ICAgICAgICAgICAgICBTTUckUEFTVEVfVklSVFVBTF9ESVNQTEFZKCZzbWdfZGlzcGxheV9pZCwm c21nX3Bhc3RlYm9hcmRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZyb3csJmNvbCkpOworI2Vsc2UKKyAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2NyOiBz bWckY3JlYXRlX3ZpcnR1YWxfZGlzcGxheSIsCisgICAgICAgICAgICAgICAgICBzbWckY3JlYXRl X3ZpcnR1YWxfZGlzcGxheSgmcm93cywgJmNvbHMsICZzbWdfZGlzcGxheV9pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDApKTsKKworICAgICAg ICAvKiBDb25uZWN0IHRoZSBkaXNwbGF5IHdpbmRvdyB0byB0aGUgc2NyZWVuICovCisgICAgICAg IENIRUNLX0VSUigiaW5pdHNjcjogc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSIsCisgICAgICAg ICAgICAgICAgICBzbWckcGFzdGVfdmlydHVhbF9kaXNwbGF5KCZzbWdfZGlzcGxheV9pZCwmc21n X3Bhc3RlYm9hcmRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZyb3csJmNvbCkpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICB9CisgICAgZGVidWco RjEwMSwiVk1TIGluaXRzY3Igc21nX29wZW4gQSIsIiIsc21nX29wZW4pOworICAgIGlmICghc21n X29wZW4pIHsgICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IGEgYmF0Y2ggdXBkYXRlICovCisg ICAgICAgIHNtZ19vcGVuID0gMTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIENIRUNLX0VSUigi aW5pdHNjcjogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgICAg IFNNRyRCRUdJTl9QQVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyNlbHNl CisgICAgICAgIENIRUNLX0VSUigiaW5pdHNjcjogc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRl IiwKKyAgICAgICAgICAgICAgICAgIHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bh c3RlYm9hcmRfaWQpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisJZGVidWcoRjEwMSwiVk1TIGlu aXRzY3Igc21nJGJlZ2luX3Bhc3RlYm9hcmRfdXBkYXRlIiwiIix2bXNfc3RhdHVzKTsKKyAgICB9 CisgICAgZGVidWcoRjEwMSwiVk1TIGluaXRzY3Igc21nX29wZW4gQiIsIiIsc21nX29wZW4pOwor ICAgIHNtZ19pbml0ZWQgPSAxOworICAgIHJldHVybigxKTsKK30KKworc3RhdGljIHZvaWQKK3Jl ZnJlc2goKSB7CisgICAgZGVidWcoRjEwMSwicmVmcmVzaCBzbWdfcGFzdGVib2FyZF9pZCIsIiIs c21nX3Bhc3RlYm9hcmRfaWQpOworCisgICAgaWYgKHNtZ19vcGVuID09IDAgfHwgc21nX3Bhc3Rl Ym9hcmRfaWQgPT0gLTEpCisgICAgICByZXR1cm47CisKKyNpZmRlZiBDT01NRU5UICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCisgICAgQ0hFQ0tfRVJSKCJyZWZy ZXNoOiBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgU01HJEVORF9Q QVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyAgICBDSEVDS19FUlIoInJl ZnJlc2g6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAgICAgIFNNRyRC RUdJTl9QQVNURUJPQVJEX1VQREFURSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyNlbHNlCisgICAg Q0hFQ0tfRVJSKCJyZWZyZXNoOiBzbWckZW5kX3Bhc3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAg ICAgICAgc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyAg ICBDSEVDS19FUlIoInJlZnJlc2g6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAg ICAgICAgICAgIHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSgmc21nX3Bhc3RlYm9hcmRfaWQp KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisKK3N0YXRpYyB2b2lkCitlbmR3aW4oKSB7Cisg ICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVybjsKKworICAgIHNtZ19vcGVuID0gMDsKKwor I2lmZGVmIENPTU1FTlQKKyAgICBDSEVDS19FUlIoImVuZHdpbjogc21nJGVuZF9wYXN0ZWJvYXJk X3VwZGF0ZSIsCisgICAgICAgICAgICAgIFNNRyRFTkRfUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19w YXN0ZWJvYXJkX2lkKSk7CisjZWxzZQorICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZW5kX3Bh c3RlYm9hcmRfdXBkYXRlIiwKKyAgICAgICAgICAgICAgc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0 ZSgmc21nX3Bhc3RlYm9hcmRfaWQpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICBtb3Zl KDIyLCAwKTsKKworI2lmZGVmIENPTU1FTlQKKy8qCisgIFRoZXNlIGNhbGxzIGNsZWFyIHRoZSBz Y3JlZW4uCisgIChjb252ZXJ0IHJvdXRpbmUgY2FsbHMgdG8gbG93ZXJjYXNlIC0gTWFydGluIFpp bnNlcikKKyovCisgICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRkZWxldGVfdmlydHVhbF9kaXNw bGF5IiwKKyAgICAgICAgICAgICAgU01HJERFTEVURV9WSVJUVUFMX0RJU1BMQVkoJnNtZ19kaXNw bGF5X2lkKSk7CisgICAgc21nX2Rpc3BsYXlfaWQgPSAtMTsKKworICAgIENIRUNLX0VSUigiZW5k d2luOiBzbWckZGVsZXRlX3Bhc3RlYm9hcmQiLAorICAgICAgICAgICAgICBTTUckREVMRVRFX1BB U1RFQk9BUkQoJnNtZ19wYXN0ZWJvYXJkX2lkLCAwKSk7CisgICAgc21nX3Bhc3RlYm9hcmRfaWQg PSAtMTsKKyNlbmRpZiAvKiBDT01NRU5UICovCit9CisKKyNpZmRlZiBDT01NRU5UCisvKiBERUND IDYuMiBzY3JlYW1zIGJsb29keSBtdXJkZXIgYWJvdXQgcHJpbnR3ICgibm90IGVub3VnaCBhcmdz IikgKi8KKy8qIGJ1dCBhZGRpbmcgdGhlIGZvbGxvd2luZyBwcm90b3R5cGUgb25seSBtYWtlcyBp dCBob2xsZXIgbG91ZGVyLiAqLworI2lmZGVmIF9fREVDQworLyogInZhcmFyZ3MiIHByb3RvdHlw ZSBmb3IgcHJpbnR3ICovCitfUFJPVE9UWVAoc3RhdGljIGludCBwcmludHcsKGNoYXIgKiwgLi4u KSk7CisjZW5kaWYgLyogX19ERUNDICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYg X19ERUNDCisjaW5jbHVkZSA8c3RkYXJnLmg+CitfUFJPVE9UWVAoc3RhdGljIHZvaWQgcHJpbnR3 LChjaGFyICosIC4uLikpOworc3RhdGljIHZvaWQKK3ByaW50dyhjaGFyICpzdHIsLi4uKSB7Cisg ICAgY2hhciBidWZbMjU1XTsKKyAgICB2YV9saXN0IGFwOworICAgICRERVNDUklQVE9SKHRleHRf ZHNjLCAwKTsKKyAgICB0ZXh0X2RzYy5kc2MkYV9wb2ludGVyPWJ1ZjsKKyAgICBpZiAoIXNtZ19v cGVuKQorICAgICAgcmV0dXJuOworICAgIHZhX3N0YXJ0KGFwLHN0cik7CisgICAgdGV4dF9kc2Mu ZHNjJHdfbGVuZ3RoID0gdnNwcmludGYoYnVmLCBzdHIsIGFwKTsKKyAgICB2YV9lbmQoYXApOwor ICAgIENIRUNLX0VSUigicHJpbnR3OiBzbWckcHV0X2NoYXJzIiwKKyAgICAgICAgICAgICAgc21n JHB1dF9jaGFycygmc21nX2Rpc3BsYXlfaWQsICZ0ZXh0X2RzYywgMCwgMCwgMCwgMCwgMCkpOwor fQorI2Vsc2UKK3N0YXRpYyB2b2lkCitwcmludHcoc3RyLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2 LCBhNywgYTgpCisgICAgY2hhciAqc3RyOworICAgIGxvbmcgYTEsIGEyLCBhMywgYTQsIGE1LCBh NiwgYTcsIGE4OworLyogcHJpbnR3ICovIHsKKyAgICBjaGFyIGJ1ZlsyNTVdOworICAgICRERVND UklQVE9SKHRleHRfZHNjLCAwKTsKKyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuOwor ICAgIHRleHRfZHNjLmRzYyRhX3BvaW50ZXI9YnVmOworICAgIHRleHRfZHNjLmRzYyR3X2xlbmd0 aCA9IHNwcmludGYoYnVmLCBzdHIsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7Cisg ICAgQ0hFQ0tfRVJSKCJwcmludHc6IHNtZyRwdXRfY2hhcnMiLAorICAgICAgICAgICAgICBzbWck cHV0X2NoYXJzKCZzbWdfZGlzcGxheV9pZCwgJnRleHRfZHNjLCAwLCAwLCAwLCAwLCAwKSk7Cit9 CisjZW5kaWYgLyogX19ERUNDICovCisKKyNkZWZpbmUgQ0tfQ1VSUE9TCitpbnQKK2NrX2N1cnBv cyhyb3csIGNvbCkgeworICAgIGRlYnVnKEYxMTEsIlZNUyBzbWcgY2tfY3VycG9zIixja2l0b2Eo cm93KSxjb2wpOworICAgIGlmICghc21nX2luaXRlZCB8fCAhc21nX29wZW4pIHsKKyAgICAgICAg aW5pdHNjcigpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgc21nIGN1cnBvcyBzbWdfb3Bl biIsIiIsc21nX29wZW4pOworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm4oMCk7Cisg ICAgZGVidWcoRjExMSwiVk1TIHNtZyBja19jdXJwb3MiLGNraXRvYShyb3ctMSksY29sLTEpOwor ICAgIG1vdmUocm93IC0gMSwgY29sIC0gMSk7ICAgICAgICAgICAgIC8qIFNNRyBpcyAwLWJhc2Vk ICovCisgICAgcmVmcmVzaCgpOworICAgIC8qIGVuZHdpbigpOyAqLworICAgIHJldHVybigwKTsK K30KKworaW50Citja19jbHMoKSB7CisgICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbHMgc21n X2luaXRlZCIsIiIsc21nX2luaXRlZCk7CisgICAgaWYgKCFzbWdfaW5pdGVkIHx8ICFzbWdfb3Bl bikgeworICAgICAgICBpbml0c2NyKCk7CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcg Y2tfY2xzIHNtZ19vcGVuIiwiIixzbWdfb3Blbik7CisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAg IHJldHVybigwKTsKKyAgICBjbGVhcigpOworICAgIHJlZnJlc2goKTsKKyAgICAvKiBlbmR3aW4o KTsgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7CisgICAgZGVidWco RjEwMSwiVk1TIHNtZyBja19jbGVvbCBzbWdfaW5pdGVkIiwiIixzbWdfaW5pdGVkKTsKKyAgICBp ZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7CisgICAgICAgIGluaXRzY3IoKTsKKyAgICB9 CisgICAgZGVidWcoRjEwMSwiVk1TIHNtZyBja19jbGVvbCBzbWdfb3BlbiIsIiIsc21nX29wZW4p OworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm4oMCk7CisgICAgY2xydG9lb2woKTsK KyAgICByZWZyZXNoKCk7CisgICAgLyogZW5kd2luKCk7ICovCisgICAgcmV0dXJuKDApOworfQor I2VuZGlmIC8qIENLX1NNRyAqLworCisjaWZkZWYgTVlDVVJTRVMKKy8qCisgIERvLWl0LXlvdXJz ZWxmIGN1cnNlcyBpbXBsZW1lbnRhdGlvbiBmb3IgVk1TLCBPUy8yIGFuZCBvdGhlciBBTlNJL1ZU LTEwMCdzLgorICBTdXBwb3J0cyBvbmx5IHRoZSBWVDUyIGFuZCBWVDF4eCAoYW5kIGxhdGVyIFZU Mnh4LzN4eC80eHgpIHRlcm1pbmFscy4KKyAgQnkgVGVycnkgS2VubmVkeSwgU3QgUGV0ZXJzIENv bGxlZ2UuCisKKyAgRmlyc3QsIHNvbWUgc3R1ZmYgd2UgY2FuIGp1c3QgaWdub3JlOgorKi8KKwor c3RhdGljIGludAordG91Y2h3aW4oeCkgaW50IHg7IHsKKyAgICByZXR1cm4oMCk7Cit9CitzdGF0 aWMgaW50Citpbml0c2NyKCkgeworICAgIHJldHVybigwKTsKK30KK3N0YXRpYyBpbnQKK3JlZnJl c2goKSB7CisgICAgcmV0dXJuKDApOworfQorc3RhdGljIGludAorZW5kd2luKCkgeworICAgIHJl dHVybigwKTsKK30KKworLyoKKyAqIE5vdywgc29tZSBzdHVmZiB3ZSBuZWVkIHRvIGRvOgorICov CisKK19QUk9UT1RZUCggaW50IG1vdmUsIChpbnQsIGludCkgKTsKKyNpZm5kZWYgT1MyCitpbnQK K21vdmUocm93LCBjb2wpIGludCByb3csIGNvbDsgeworICAgIGlmIChpc3Z0NTIpCisgICAgICBw cmludGYoIlwwMzNZJWMlYyIsIHJvdyArIDAzNywgY29sICsgMDM3KTsKKyAgICBlbHNlCisgICAg ICBwcmludGYoIlwwMzNbJWQ7JWRIIiwgcm93ICsgMSwgY29sICsgMSk7CisgICAgcmV0dXJuKDAp OworfQorCitpbnQKK2NsZWFyKCkgeworICAgIG1vdmUoMCwwKTsKKyAgICBpZiAoaXN2dDUyKQor ICAgICAgcHJpbnRmKCJcMDMzSiIpOworICAgIGVsc2UKKyAgICAgIHByaW50ZigiXDAzM1tKIik7 CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NscnRvZW9sKCkgeworICAgIGlmIChpc3Z0NTIp CisgICAgICBwcmludGYoIlwwMzNLIik7CisgICAgZWxzZQorICAgICAgcHJpbnRmKCJcMDMzW0si KTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNkZWZpbmUgQ0tfQ1VSUE9TCitpbnQKK2NrX2Nscygp IHsKKyAgICByZXR1cm4oY2xlYXIoKSk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7CisgICAgcmV0 dXJuKGNscnRvZW9sKCkpOworfQorCitpbnQKK2NrX2N1cnBvcyhyb3csIGNvbCkgaW50IHJvdywg Y29sOyB7CisgICAgbW92ZShyb3csIGNvbCk7CisgICAgcmV0dXJuKDApOworfQorCisjZWxzZSAv KiBPUzIgKi8KKy8qIFdpbmRvd3MgTlQgYW5kIFdpbmRvd3MgOTUgZG8gbm90IHByb3ZpZGUgQU5T SSBlbXVsYXRpb24gKi8KKy8qIFRoZXJlZm9yZSB3ZSBtaWdodCBhcyB3ZWxsIG5vdCB1c2UgaXQg Zm9yIE9TLzIgZWl0aGVyICAgKi8KKworaW50Cittb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7 IHsKKyNpZm5kZWYgT05FVEVSTVVQRAorICAgIFNldEN1clBvcyhyb3csIGNvbCk7CisjZW5kaWYg LyogT05FVEVSTVVQRCAqLworICAgIGxnb3RveHkoIFZDTUQsIGNvbCsxLCByb3crMSk7CisgICAg VnNjcm5Jc0RpcnR5KFZDTUQpOworICAgIHJldHVybigwKTsKK30KKworaW50CitjbGVhcigpIHsK KyAgICB2aW9jZWxsIGNlbGw7CisgICAgbW92ZSgwLDApOworI2lmZGVmIE9ORVRFUk1VUEQKKyAg ICBpZiAoVnNjcm5HZXRCdWZmZXJTaXplKFZDTUQpID4gMCkgeworICAgICAgICBWc2NyblNjcm9s bChWQ01ELCBVUFdBUkQsIDAsCisgICAgICAgICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZD TUQpLSgxKSwKKyAgICAgICAgICAgICAgICAgICAgVnNjcm5HZXRIZWlnaHQoVkNNRCktKDApLCBU UlVFLCBDSFJfU1ApOworICAgICAgICBjbGVhcnRlcm1zY3JlZW4oVkNNRCk7CisgICAgfQorI2Vs c2UKKyAgICBjZWxsLmMgPSAnICc7CisgICAgY2VsbC5hID0gY29sb3JjbWQ7CisgICAgV3J0TkNl bGwoY2VsbCwgY21kX3Jvd3MgKiBjbWRfY29scywgMCwgMCk7CisjZW5kaWYgLyogT05FVEVSTVVQ RCAqLworICAgIHJldHVybigwKTsKK30KKworaW50CitjbHJ0b2VvbCgpIHsKKyAgICBVU0hPUlQg cm93LCBjb2w7CisgICAgdmlvY2VsbCBjZWxsOworCisgICAgY2VsbC5jID0gJyAnOworICAgIGNl bGwuYSA9IGNvbG9yY21kOworI2lmbmRlZiBPTkVURVJNVVBECisgICAgR2V0Q3VyUG9zKCZyb3cs ICZjb2wgKTsKKyAgICBXcnROQ2VsbChjZWxsLCBjbWRfY29scyAtIGNvbCAtMSwgcm93LCBjb2wp OworI2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8KKyAgICBjbHJ0b2VvbG4oVkNNRCxDSFJfU1ApOwor ICAgIHJldHVybigwKTsKK30KKworI2RlZmluZSBDS19DVVJQT1MKK2ludAorY2tfY3VycG9zKHJv dywgY29sKSBpbnQgcm93LCBjb2w7IHsKKyAgICBtb3ZlKHJvdywgY29sKTsKKyAgICByZXR1cm4o MCk7Cit9CisKK2ludAorY2tfY2xzKCkgeworICAgIHJldHVybihjbGVhcigpKTsKK30KKworaW50 Citja19jbGVvbCgpIHsKKyAgICByZXR1cm4oY2xydG9lb2woKSk7Cit9CisKKyNlbmRpZiAvKiBP UzIgKi8KKyNlbmRpZiAvKiBNWUNVUlNFUyAqLworCisjaWZuZGVmIE5PVEVSTUNBUAorI2lmbmRl ZiBDS19DVVJQT1MKKyNkZWZpbmUgQ0tfQ1VSUE9TCisKKy8qIFRlcm1jYXAvVGVybWluZm8gc2Vj dGlvbiAqLworCitzdGF0aWMgY2hhciBjdXJfY2xzWzMyXSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRp YyBjaGFyIGN1cl9jbGVvbFszMl0gPSB7IE5VTCwgTlVMIH07CitzdGF0aWMgY2hhciBjdXJfY21b NjRdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGNoYXIgdGdzYnVmWzEyOF0gPSB7IE5VTCwgTlVM IH07CisKK3N0YXRpYworI2lmZGVmIENLX0FOU0lDCit2b2lkCisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK2NrX3Rlcm1zZXQoeCkgaW50IHg7IHsKKyAgICBjdXJfY2xzWzBdID0gTlVMOworICAgIGN1 cl9jbGVvbFswXSA9IE5VTDsKKyAgICBjdXJfY21bMF0gPSBOVUw7CisjaWZkZWYgdGdldGVudAor ICAgIGRlYnVnKEYxMDAsInRnZXRlbnQgaXMgYSBtYWNybyIsIiIsMCk7CisjZW5kaWYgLyogdGdl dGVudCAqLworI2lmZGVmIHRnZXRzdHIKKyAgICBkZWJ1ZyhGMTAwLCJ0Z2V0c3RyIGlzIGEgbWFj cm8iLCIiLDApOworI2VuZGlmIC8qIHRnZXRzdHIgKi8KKyNpZmRlZiB0cHV0cworICAgIGRlYnVn KEYxMDAsInRwdXRzIGlzIGEgbWFjcm8iLCIiLDApOworI2VuZGlmIC8qIHRwdXRzICovCisjaWZk ZWYgdGdvdG8KKyAgICBkZWJ1ZyhGMTAwLCJ0Z290byBpcyBhIG1hY3JvIiwiIiwwKTsKKyNlbmRp ZiAvKiB0Z290byAqLworI2lmZGVmIE5PVEVSTUNBUAorICAgIC8qIHRnZXRzdHIoKSBnZXRzIGEg c2VnbWVudGF0aW9uIGZhdWx0IG9uIE9TRi8xICovCisgICAgZGVidWcoRjEwMCwiY2tfdGVybXNl dCBOT1RFUk1DQVAiLCIiLDApOworI2Vsc2UKKyAgICBpZiAobm90ZXJtY2FwKSB7CisgICAgICAg IGRlYnVnKEYxMDAsImNrX3Rlcm1zZXQgbm90ZXJtY2FwIiwiIiwwKTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJja190ZXJtc2V0IHgiLCIiLHgpOworICAgIGlmICh4 ID4gMCkgeworICAgICAgICBjaGFyICogYnA7CisgICAgICAgIGJwID0gdGdzYnVmOworICAgICAg ICAqYnAgPSBOVUw7CisgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1zZXQgY2FsbGluZyB0Z2V0 c3RyIiwiY2wiLDApOworICAgICAgICBpZiAodGdldHN0cigiY2wiLCAmYnApKSB7ICAgICAgIC8q IEdldCBjbGVhci1zY3JlZW4gY29kZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVy bXNldCB0Z2V0c3RyIGNsIix0Z3NidWYsIiIpOworICAgICAgICAgICAgaWYgKChpbnQpc3RybGVu KHRnc2J1ZikgPCAzMikKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbHMsdGdzYnVmLDMy KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBicCA9IHRnc2J1 ZjsKKyAgICAgICAgaWYgKHRnZXRzdHIoImNlIiwgJmJwKSkgeyAgICAgICAvKiBHZXQgY2xlYXIt dG8tZW5kLW9mLWxpbmUgY29kZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNl dCB0Z2V0c3RyIGNlIix0Z3NidWYsIiIpOworICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHRn c2J1ZikgPCAzMikKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbGVvbCx0Z3NidWYsMzIp OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIGJwID0gdGdzYnVm OworICAgICAgICBpZiAodGdldHN0cigiY20iLCAmYnApKSB7ICAgICAgIC8qIEdldCBjdXJzb3It bW92ZW1lbnQgY29kZSAqLworICAgICAgICAgICAgZGVidWcoRjExMCwiY2tfdGVybXNldCB0Z2V0 c3RyIGNtIix0Z3NidWYsIiIpOworICAgICAgICAgICAgaWYgKChpbnQpc3RybGVuKHRnc2J1Zikg PCA2NCkKKyAgICAgICAgICAgICAgY2tzdHJuY3B5KGN1cl9jbSx0Z3NidWYsNjQpOworICAgICAg ICB9IGVsc2UKKyAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIE5PVEVSTUNBUCAq LworfQorCisjaWZuZGVmIFRQVVRTRk5UWVBFCisjaWZkZWYgVFBVVFNJU1ZPSUQKKyNkZWZpbmUg VFBVVFNGTlRZUEUgdm9pZAorI2Vsc2UKKyNkZWZpbmUgVFBVVFNGTlRZUEUgaW50CisjZW5kaWYg LyogVFBVVFNJU1ZPSUQgKi8KKyNlbmRpZiAvKiBUUFVUU0ZOVFlQRSAqLworCisjaWZuZGVmIFRQ VVRTQVJHVFlQRQorI2lmZGVmIEhQVVg5CisjZGVmaW5lIFRQVVRTQVJHVFlQRSBjaGFyCisjZWxz ZQorI2lmZGVmIEhQVVgxMAorI2RlZmluZSBUUFVUU0FSR1RZUEUgY2hhcgorI2Vsc2UKKyNkZWZp bmUgVFBVVFNBUkdUWVBFIGludAorI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIEhQVVg5 ICovCisjZW5kaWYgLyogVFBVVFNBUkdUWVBFICovCisKK3N0YXRpYyBUUFVUU0ZOVFlQRQorI2lm ZGVmIENLX0FOU0lDCitja19vdXRjKFRQVVRTQVJHVFlQRSB4KQorI2Vsc2UKK2NrX291dGMoeCkg VFBVVFNBUkdUWVBFIHg7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBUbyBzYXRpc2Z5IHRwdXRzKCkgYXJnMyBwcm90b3R5 cGUgKi8KKyAgICBpbnQgcmM7CisgICAgY2hhciBjOworICAgIGMgPSAoY2hhcikgeDsKKyAgICBy YyA9IChpbnNlcnZlcikgPyB0dG9jKGMpIDogY29ub2MoYyk7CisjaWZuZGVmIFRQVVRTSVNWT0lE CisgICAgcmV0dXJuKHJjKTsKKyNlbmRpZiAvKiBUUFVUU0lTVk9JRCAqLworfQorCitpbnQKK2Nr X2N1cnBvcyhyb3csIGNvbCkgaW50IHJvdywgY29sOyB7CisjaWZkZWYgQ0tfQU5TSUMKKyAgICBU UFVUU0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOworI2Vsc2UKKyAgICBUUFVUU0ZOVFlQRSAo KmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgaWYgKCFmeGRfaW5pdGVkKQorICAg ICAgZnhkaW5pdCg5OTk5KTsKKyAgICBpZiAoIWN1cl9jbVswXSkgeyAgICAgICAgICAgICAgICAg ICAvKiBXZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8KKyNpZmRlZiBDT01NRU5UCisg ICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZyAqLwor I2Vsc2UKKyAgICAgICAgLyogQm90aCBDLUtlcm1pdCdzIFNDUkVFTiBjb21tYW5kIGFuZCBBTlNJ L1ZUMTAwIGFyZSAxLWJhc2VkICovCisgICAgICAgIHByaW50ZigiXDAzM1slZDslZEgiLCByb3cs IGNvbCk7IC8qIE9yIGRlZmF1bHQgdG8gQU5TSSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICB9IGVsc2UgeworICAgICAgICBmbiA9IGNrX291dGM7CisgICAgICAgIC8qIHRlcm1jYXAvdGVy bWluZm8gaXMgMC1iYXNlZCAqLworICAgICAgICB0cHV0cygKKyNpZmRlZiBUUFVUU0FSRzFDT05T VAorICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKQorI2VuZGlmIC8qIFRQVVRTQVJHMUNPTlNU ICovCisgICAgICAgICAgICAgIHRnb3RvKGN1cl9jbSxjb2wtMSxyb3ctMSksMSxmbik7CisgICAg fQorICAgIHJldHVybigwKTsKK30KKworaW50Citja19jbHMoKSB7CisjaWZkZWYgQ0tfQU5TSUMK KyAgICBUUFVUU0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOworI2Vsc2UKKyAgICBUUFVUU0ZO VFlQRSAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAgaWYgKCFmeGRfaW5pdGVk KQorICAgICAgZnhkaW5pdCg5OTk5KTsKKyAgICBpZiAoIWN1cl9jbHNbMF0pIHsgICAgICAgICAg ICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5jZXMgKi8KKyNpZmRlZiBD T01NRU5UCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90 aGluZyAqLworI2Vsc2UKKyAgICAgICAgcHJpbnRmKCJcMDMzWztIXDAzM1sySiIpOyAgICAgICAv KiBPciBkZWZhdWx0IHRvIEFOU0kgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfSBlbHNl IHsKKyAgICAgICAgZm4gPSBja19vdXRjOworICAgICAgICBkZWJ1ZyhGMTExLCJja19jbHMgMiIs Y3VyX2NscyxmeGRfaW5pdGVkKTsKKyAgICAgICAgdHB1dHMoY3VyX2NscyxjbWRfcm93cyxmbik7 CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyNpZmRlZiBD S19BTlNJQworICAgIFRQVVRTRk5UWVBFICgqZm4pKFRQVVRTQVJHVFlQRSk7CisjZWxzZQorICAg IFRQVVRTRk5UWVBFICgqZm4pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyAgICBpZiAoIWZ4 ZF9pbml0ZWQpCisgICAgICBmeGRpbml0KDk5OTkpOworICAgIGlmICghY3VyX2NsZW9sWzBdKSB7 ICAgICAgICAgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgZXNjYXBlIHNlcXVlbmNlcyAqLwor I2lmZGVmIENPTU1FTlQKKyAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAv KiBEbyBub3RoaW5nICovCisjZWxzZQorICAgICAgICBwcmludGYoIlwwMzNbSyIpOyAgICAgICAg ICAgICAgIC8qIE9yIHVzZSBBTlNJICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIH0gZWxz ZSB7CisgICAgICAgIGZuID0gY2tfb3V0YzsKKyAgICAgICAgdHB1dHMoY3VyX2NsZW9sLDEsZm4p OworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogQ0tfQ1VSUE9TICovCisjZWxz ZQorc3RhdGljIHZvaWQKK2NrX3Rlcm1zZXQoeCkgaW50IHg7IHsKKyAgICBpZiAoeCkgcmV0dXJu OworfQorI2VuZGlmIC8qIE5PVEVSTUNBUCAqLworCisjaWZuZGVmIENLX0NVUlBPUworI2RlZmlu ZSBDS19DVVJQT1MKK2ludAorY2tfY2xzKCkgeworICAgIHByaW50ZigiXDAzM1s7SFwwMzNbMkoi KTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7CisgICAgcHJpbnRmKCJc MDMzW0siKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY3VycG9zKHJvdywgY29sKSBp bnQgcm93LCBjb2w7IHsKKyAgICBwcmludGYoIlwwMzNbJWQ7JWRIIiwgcm93LCBjb2wpOworICAg IHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBDS19DVVJQT1MgKi8KKworCisjaWZuZGVmIE5PWEZF Ugorc3RhdGljIGludCBjaW5pdCA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGN1 cnNlcyBpbml0J2QgKi8KK3N0YXRpYyBpbnQgY2VuZHcgPSAwOyAgICAgICAgICAgICAgICAgICAv KiBlbmR3aW4oKSB3YXMgY2FsbGVkICovCisKK3N0YXRpYworI2lmZGVmIENLX0FOU0lDICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIEJlY2F1c2UgVk9JRCB1c2VkIGJ5IGN1cnNlcy5oICovCit2 b2lkCisjZWxzZQorI2lmZGVmIE1ZQ1VSU0VTCitWT0lECisjZWxzZQoraW50CisjZW5kaWYgLyog TVlDVVJTRVMgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2lmZGVmIENLX0FOU0lDICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSAlIHRyYW5zZmVyZWQgYW5kICUgYmFyICovCit1 cGRwY3QobG9uZyBvbGQsIGxvbmcgbmV3KQorI2Vsc2UgLyogQ0tfQU5TSUMgKi8KK3VwZHBjdChv bGQsIG5ldykgbG9uZyBvbGQsIG5ldzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogdXBkcGN0 ICovIHsKKyNpZmRlZiBDT01NRU5UCisgICAgaW50IG0sIG47CisgICAgbW92ZShDV19QQ0QsMjIp OworICAgIHByaW50dygiJWxkIiwgbmV3KTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykg bmV3KTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ0tfUENU X0JBUgorICAgIGlmICh0aGVybW9tZXRlcikgeworICAgICAgICBpZiAob2xkID4gbmV3KSB7Cisg ICAgICAgICAgICBvbGQgPSAwOworICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2KTsKKyAgICAg ICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIH0KKyAgICAgICAgbSA9IG9sZC8yOworICAgICAg ICBtb3ZlKENXX1BDRCwgMjYgKyBtKTsKKyAgICAgICAgbiA9IG5ldyAvIDIgLSBtOworI2lmbmRl ZiBPUzIKKyAgICAgICAgd2hpbGUgKG4gPiAwKSB7CisgICAgICAgICAgICBpZiAoKG0gKyAxKSAl IDUgPT0gMCkKKyAgICAgICAgICAgICAgcHJpbnR3KCIqIik7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgIHByaW50dygiPSIpOworICAgICAgICAgICAgbSsrOworICAgICAgICAgICAg bi0tOworICAgICAgICB9CisgICAgICAgIGlmIChuZXcgJSAyICE9IDApIHByaW50dygiLSIpOwor ICAgICAgICAvKiBtb3ZlKENXX1BDRCwgMjIrNTMpOyAqLworI2Vsc2UgLyogT1MyICovCisgICAg ICAgIHdoaWxlIChuID4gMCkgeworICAgICAgICAgICAgcHJpbnR3KCIlYyIsICdcMzMzJyk7Cisg ICAgICAgICAgICBtKys7IG4tLTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3ICUgMiAhPSAw KQorICAgICAgICAgIHByaW50dygiJWMiLCAnXDI2MScpOworI2VuZGlmIC8qIE9TMiAqLworICAg IH0KKyNlbmRpZiAvKiBDS19QQ1RfQkFSICovCisgICAgLyogY2xydG9lb2woKTsgKi8KKyNlbHNl ICAvKiAhQ09NTUVOVCAqLworI2lmZGVmIE9TMgorI2RlZmluZSBDSEFSMSAgICdcMzMzJyAgICAg ICAgICAvKiBPUzIgLSBDUDQzNyAqLworI2RlZmluZSBDSEFSMiAgICdcMjYxJworI2Vsc2UKKyNk ZWZpbmUgQ0hBUjEgICAnLycgICAgICAgICAgICAgLyogRGVmYXVsdCAqLworI2RlZmluZSBDSEFS MiAgICctJworI2VuZGlmIC8qIE9TMiAqLworICAgIGRlYnVnKEYxMDEsInVwZHBjdCBvbGQiLCIi LG9sZCk7CisgICAgZGVidWcoRjEwMSwidXBkcGN0IG5ldyIsIiIsbmV3KTsKKyAgICBtb3ZlKENX X1BDRCwyMik7CisgICAgcHJpbnR3KCIlLTNsZCIsIG5ldyk7IC8qICAod2FzKSAgIHByaW50dygi JWxkIiwgbmV3KTsgICovCisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChsb25nKSBuZXcgKTsKKyNl bmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ0tfUENUX0JBUgorICAg IGlmICh0aGVybW9tZXRlcikgeworICAgICAgICBpbnQgbSwgbjsKKworICAgICAgICBpZiAob2xk ID4gbmV3KSB7CisgICAgICAgICAgICBvbGQgPSAwIDsKKyAgICAgICAgICAgIG1vdmUoQ1dfUENE LCAyNik7CisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICB9CisgICAgICAgIGlmIChu ZXcgPD0gMTAwTCkgeworICAgICAgICAgICAgbSA9IG9sZCAvIDI7CisgICAgICAgICAgICBuID0g bmV3IC8gMiAtIG07CisgICAgICAgICAgICBtb3ZlKENXX1BDRCwgMjYrbSk7CisgICAgICAgICAg ICB3aGlsZSAobi0tID4gMCkKKyAgICAgICAgICAgICAgcHJpbnR3KCIlYyIsIENIQVIxKTsKKyAg ICAgICAgICAgIGlmIChuZXcgJSAyICE9IDApCisgICAgICAgICAgICAgIHByaW50dygiJWMiLCBD SEFSMik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworI2VuZGlm IC8qIENPTU1FTlQgKi8KK30KKworc3RhdGljIENLX09GRl9UIG9sZF90ciA9IChDS19PRkZfVCkt MTsJLyogVGltZSByZW1haW5pbmcgcHJldmlvdXNseSAqLworCitzdGF0aWMgQ0tfT0ZGX1QKKyNp ZmRlZiBDS19BTlNJQworc2hvZXRsKENLX09GRl9UIG9sZF90ciwgbG9uZyBjcHMsIENLX09GRl9U IGZzaXosIENLX09GRl9UIGhvd2ZhcikKKyNlbHNlCisgICAgc2hvZXRsKG9sZF90ciwgY3BzLCBm c2l6LCBob3dmYXIpIGxvbmcgY3BzOyBDS19PRkZfVCBvbGRfdHIsIGZzaXosIGhvd2ZhcjsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworLyogc2hvZXRsICovIHsgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIEVzdGltYXRlZCB0aW1lIGxlZnQgaW4gdHJhbnNmZXIgKi8KKyAgICBDS19PRkZfVCB0 cjsJCQkvKiBUaW1lIHJlbWFpbmluZywgc2Vjb25kcyAqLworCisjaWZkZWYgR0ZUSU1FUgorICAg IGlmIChmc2l6ID4gMEwgJiYgY3BzID4gMEwpCisgICAgICB0ciA9IChDS19PRkZfVCkoKENLRkxP QVQpKGZzaXogLSBob3dmYXIpIC8gKENLRkxPQVQpY3BzKTsKKyAgICBlbHNlCisgICAgICB0ciA9 IChDS19PRkZfVCktMTsKKyNlbHNlCisgICAgdHIgPSAoZnNpeiA+IDBMICYmIGNwcyA+IDBMKSA/ CisgICAgICAoKGZzaXogLSBob3dmYXIpIC8gY3BzKSA6CisgICAgICAgIChDS19PRkZfVCktMTsK KyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgbW92ZShDV19UUiwyMik7CisgICAgaWYgKHRyID4g KENLX09GRl9UKS0xKSB7CisgICAgICAgIGlmICh0ciAhPSBvbGRfdHIpIHsKKyAgICAgICAgICAg IHByaW50dygiJXMiLGhobW1zcyh0cikpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpQ1dfVFIsIChs b25nKWhobW1zcyh0cikpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAg ICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBw cmludHcoIih1bmtub3duKSIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1 aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RSLCAobG9uZykgIih1 bmtub3duKSIgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg IGNscnRvZW9sKCk7CisgICAgfQorICAgIHJldHVybih0cik7Cit9CisKK3N0YXRpYyBsb25nCisj aWZkZWYgQ0tfQU5TSUMKK3Nob2NwcyhpbnQgcGN0LCBDS19PRkZfVCBmc2l6LCBDS19PRkZfVCBo b3dmYXIpCisjZWxzZQorc2hvY3BzKHBjdCwgZnNpeiwgaG93ZmFyKSBpbnQgcGN0OyBDS19PRkZf VCBmc2l6LCBob3dmYXI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNob2NwcyAqLyB7Cisj aWZkZWYgQ1BTX1dFSUdIVEVECisgICAgc3RhdGljIENLX09GRl9UIG9sZGZmYyA9IDBMOworI2Vu ZGlmIC8qIENQU19XRUlHSFRFRCAqLworI2lmZGVmIEdGVElNRVIKKyAgICBDS0ZMT0FUIHNlY3Ms IHh4OworI2Vsc2UKKyAgICBDS19PRkZfVCBzZWNzLCB4eDsKKyNlbmRpZiAvKiBHRlRJTUVSICov CisKKyNpZmRlZiBHRlRJTUVSCisgICAgeHggPSAoZ3R2ID49IDAuMCkgPyBndHYgOiAwLjA7ICAg ICAgLyogRmxvYXRpbmctcG9pbnQgdmVyc2lvbiAqLworICAgIGd0diA9IGdmdGltZXIoKTsKKyAg ICBpZiAoKGd0diAtIG9sZGd0dikgPCAoQ0tGTE9BVCkgMS4wKSAvKiBPbmx5IGRvIHRoaXMgb25j ZSBwZXIgc2Vjb25kICovCisgICAgICByZXR1cm4ob2xkY3BzKTsKKyAgICBvbGRndHYgPSB4eDsK KyNlbHNlCisgICAgeHggPSAoZ3R2ID49IDApID8gZ3R2IDogMDsgICAgICAgICAgLyogV2hvbGUt bnVtYmVyIHZlcnNpb24gKi8KKyAgICBndHYgPSBndGltZXIoKTsKKyAgICBpZiAoKGd0diAtIG9s ZGd0dikgPCAxKQorICAgICAgcmV0dXJuKG9sZGNwcyk7CisgICAgb2xkZ3R2ID0geHg7CisjZW5k aWYgLyogR0ZUSU1FUiAqLworCisjaWZkZWYgQ1BTX1dFSUdIVEVECisgICAgLyogZGVidWcoRjEw MCwiU0hPQ1BTOiBXRUlHSFRFRCIsIiIsMCk7ICovCisgICAgaWYgKGd0diAhPSBvbGRndHYpIHsg ICAgICAgICAgICAgICAgLyogVGhlIGZpcnN0IHBhY2tldCBpcyBpZ25vcmVkICovCisgICAgICAg IGlmIChmZmMgPCBvbGRmZmMpCisgICAgICAgICAgb2xkZmZjID0gZmZjOworICAgICAgICBvbGRj cHMgPSBjcHM7CisgICAgICAgIGlmIChvbGRjcHMgJiYgb2xkZ3R2ID4KKyNpZmRlZiBHRlRJTUVS CisgICAgICAgICAgICAxLjAKKyNlbHNlCisgICAgICAgICAgICAxCisjZW5kaWYgLyogR0ZUSU1F UiAqLworICAgICAgICAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBmaXJz dCBzZWNvbmQgaXMgaWdub3JlZCAqLworLyoKKyAgVGhpcyB2ZXJzaW9uIG9mIHNob2NwcygpIHBy b2R1Y2VzIGEgd2VpZ2h0ZWQgYXZlcmFnZSB0aGF0IHNvbWUKKyAgcGVvcGxlIGxpa2UsIGJ1dCBt b3N0IHBlb3BsZSBmaW5kIGl0IGRpc2NvbmNlcnRpbmcgYW5kIGJvbWJhcmQgdXMKKyAgd2l0aCBx dWVzdGlvbnMgYW5kIGNvbXBsYWludHMgYWJvdXQgd2h5IHRoZSBDUFMgZmlndXJlIGZsdWN0dWF0 ZXMgc28KKyAgd2lsZGx5LiAgU28gbm93IHlvdSBvbmx5IGdldCB0aGUgd2VpZ2h0ZWQgYXZlcmFn ZSBpZiB5b3UgYnVpbGQgdGhlCisgIHByb2dyYW0geW91cnNlbGYgd2l0aCBDUFNfV0VJR0hURUQg ZGVmaW5lZC4KKyovCisjaWZuZGVmIENQU19WSU5DRQorI2lmZGVmIEdGVElNRVIKKyAgICAgICAg ICAgIGNwcyA9IChsb25nKSgoKChDS0ZMT0FUKW9sZGNwcyAqIDMuMCkgKworICAgICAgICAgICAg ICAgICAgIChDS0ZMT0FUKShmZmMgLSBvbGRmZmMpIC8gKGd0di1vbGRndHYpICkgLyA0LjApOwor I2Vsc2UKKyAgICAgICAgICAgIGNwcyA9ICggKG9sZGNwcyAqIDMpICsgKGZmYyAtIG9sZGZmYykg LyAoZ3R2LW9sZGd0dikgKSAvIDQ7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworI2Vsc2UKKy8qIEFu ZCBhbiBhbHRlcm5hdGUgd2VpZ2h0aW5nIHNjaGVtZSBmcm9tIFZpbmNlbnQgRmF0aWNhLi4uICov CisgICAgICAgICAgICBjcHMgPSAoMyAqCisgICAgICAgICAgICAgKCgxK3BjdC8zMDApKm9sZGZm Yy9vbGRndHYrKDEtcGN0LzEwMCkqKGZmYy1vbGRmZmMpLyhndHYtb2xkZ3R2KSkpCisgICAgICAg ICAgICAgIC8gNDsKKyNlbmRpZiAvKiBDUFNfVklOQ0UgKi8KKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIC8qIE5vIHdlaWdodGVkIGF2ZXJhZ2Ugc2luY2UgdGhlcmUgaXMgbm90aGluZyB0 byB3ZWlnaCAqLworI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICAgIGNwcyA9IChsb25nKShndHYg IT0gMC4wID8KKyAgICAgICAgICAgICAgKENLRkxPQVQpKGZmYyAtIG9sZGZmYykgLyAoZ3R2IC0g b2xkZ3R2KSA6CisgICAgICAgICAgICAgICAgKGZmYyAtIG9sZGZmYykpIDsKKyNlbHNlCisgICAg ICAgICAgICBjcHMgPSBndHYgPyAoZmZjIC0gb2xkZmZjKSAvIChndHYgLSBvbGRndHYpIDogKGZm YyAtIG9sZGZmYykgOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgfQorI2lmZGVmIENP TU1FTlQKKyNpZmRlZiBERUJVRworICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJTSE9DUFM6IHBjdCAgICIsIiIscGN0KTsKKyAgICAgICAgICAgIGRlYnVnKEYx MDEsIlNIT0NQUzogZ3R2ICAgIiwiIixndHYpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hP Q1BTOiBvbGRndHYiLCIiLG9sZGd0dik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6 IGRndHYgICIsIiIsKGxvbmcpKGd0di1vbGRndHYpKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs IlNIT0NQUzogZmZjICAgIiwiIixmZmMpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BT OiBvbGRmZmMiLCIiLG9sZGZmYyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRm ZmMgICIsIiIsZmZjLW9sZGZmYyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGNw cyAgICIsIiIsY3BzKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworICAgICAgICBtb3ZlKENXX0NQLDIyKTsKKyAgICAgICAgcHJpbnR3KCIlbGQi LCBjcHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5 KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQLCAobG9uZykgY3BzICk7CisjZW5kaWYg LyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAg ICBvbGRmZmMgPSBmZmM7CisgICAgfQorI2Vsc2UgLyogIUNQU19XRUlHSFRFRCAqLworI2lmZGVm IENPTU1FTlQKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1ZyhGMTAwLCJT SE9DUFM6IE5PVCBXRUlHSFRFRCIsIiIsMCk7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzog cGN0ICAgICIsIiIscGN0KTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBndHYgICAgIiwi IixndHYpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGd0diAiLCIiLG9sZGd0dik7 CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGd0diAgICIsIiIsKGxvbmcpZ3R2IC0gKGxv bmcpb2xkZ3R2KTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBmZmMgICAgIiwiIixmZmMp OworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IG9sZGZmYyAiLCIiLG9sZGZmYyk7CisgICAg ICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZGZmYyAgICIsIiIsZmZjLW9sZGZmYyk7CisgICAgICAg IGRlYnVnKEYxMDEsIlNIT0NQUzogY3BzICAgICIsIiIsY3BzKTsKKyAgICAgICAgZGVidWcoRjEw MSwiU0hPQ1BTOiBmaWxjbnQgIiwiIixmaWxjbnQpOworI2lmZGVmIEdGVElNRVIKKyAgICAgICAg ZGVidWcoRjEwMSwiU0hPQ1BTOiBmcGZzZWNzIiwiIixmcGZzZWNzKTsKKyNlbmRpZiAvKiBHRlRJ TUVSICovCisgICAgfQorICAgIGRlYnVnKEYxMDEsInNob2NwcyBndHYiLCIiLGd0dik7CisjZW5k aWYgLyogREVCVUcgKi8KKyNpZmRlZiBHRlRJTUVSCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg IC8qIGRlYnVnKEYxMDEsInNob2NwcyBmcGZzZWNzIiwiIixmcGZzZWNzKTsgKi8KKyAgICBzZWNz ID0gZ3R2IC0gZnBmc2VjczsKKyAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMgc2VjcyIsIiIsKGxv bmcpc2Vjcyk7ICovCisgICAgaWYgKHNlY3MgPiAwLjApIHsKKyAgICAgICAgY3BzID0gKGxvbmcp KChDS0ZMT0FUKSBmZmMgLyBzZWNzKTsKKyAgICAgICAgLyogZGVidWcoRjEwMSwic2hvY3BzIGNw cyIsIiIsY3BzKTsgKi8KKyAgICAgICAgbW92ZShDV19DUCwyMik7CisjaWZkZWYgS1VJCisjaWZu ZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfQ1AsIChsb25nKSBjcHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJ ICovCisgICAgICAgIHByaW50dygiJWxkIiwgY3BzKTsKKyAgICAgICAgY2xydG9lb2woKTsKKyAg ICB9CisjZWxzZSAgLyogTm90IEdGVElNRVIgKi8KKyAgICBpZiAoKHNlY3MgPSBndHYgLSBmc2Vj cykgPiAwKSB7CisgICAgICAgIGNwcyA9IChzZWNzIDwgMUwpID8gZmZjIDogZmZjIC8gc2VjczsK KyAgICAgICAgbW92ZShDV19DUCwyMik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIChsb25n KSBjcHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgIHBy aW50dygiJWxkIiwgY3BzKTsKKyAgICAgICAgY2xydG9lb2woKTsKKyAgICB9CisjZW5kaWYgLyog R0ZUSU1FUiAqLworI2VuZGlmIC8qIENQU19XRUlHSFRFRCAqLworCisgICAgaWYgKGNwcyA+IHBl YWtjcHMgJiYgICAgICAgICAgICAgICAgLyogUGVhayB0cmFuc2ZlciByYXRlICovCisgICAgICAg ICgod2hhdCAmIFdfU0VORCAmJiBzcGFja2V0cyA+IHdzbG90cyArIDQpIHx8CisJICghKHdoYXQg JiBXX1NFTkQpICYmIHNwYWNrZXRzID4gMTApKSkgeworICAgICAgICBwZWFrY3BzID0gY3BzOwor ICAgIH0KKyAgICBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7Cisg ICAgcmV0dXJuKGNwcyk7Cit9CisKK3N0YXRpYworI2lmZGVmIENLX0FOU0lDICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIEJlY2F1c2UgVk9JRCB1c2VkIGJ5IGN1cnNlcy5oICovCit2b2lkCisj ZWxzZQorI2lmZGVmIE1ZQ1VSU0VTCitWT0lECisjZWxzZQoraW50CisjZW5kaWYgLyogTVlDVVJT RVMgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworc2NyZnQoKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERpc3BsYXkgZmlsZSB0eXBlICovCisgICAgY2hhciB4ZmVyc3RyWzI1 Nl07CisgICAgeGZlcnN0clswXSA9IE5VTDsKKyAgICBkZWJ1ZyhGMTAxLCJzY3JmdCBiaW5hcnki LCIiLGJpbmFyeSk7CisgICAgaWYgKGJpbmFyeSkgeworICAgICAgICBzd2l0Y2goYmluYXJ5KSB7 CisgICAgICAgICAgY2FzZSBYWUZUX0w6CisgICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwi TEFCRUxFRCIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWFlGVF9J OgorICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIklNQUdFIiwyNTYpOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYWUZUX1U6CisgICAgICAgICAgICBja3N0cm5jcHko eGZlcnN0ciwiQklOQVJZIFVOREVGSU5FRCIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworCSAg Y2FzZSBYWUZUX006CisgICAgICAgICAgICBja3N0cm5jcHkoeGZlcnN0ciwiTUFDQklOQVJZIiwy NTYpOworICAgICAgICAgICAgYnJlYWs7CisJICBjYXNlIFhZRlRfWDoKKyAgICAgICAgICAgIGNr c3RybmNweSh4ZmVyc3RyLCJURU5FWCIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgY2FzZSBYWUZUX0I6CisgICAgICAgICAgICBja3N0cm5j cHkoeGZlcnN0ciwiQklOQVJZIiwyNTYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyNpZmRlZiBDS19SRVNFTkQKKyAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQgJiYgc2VuZHN0YXJ0 ID4gMEwpIHsKKyAgICAgICAgICAgIGlmIChzZW5kbW9kZSA9PSBTTV9QU0VORCkgeworICAgICAg ICAgICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAiIC8gcGFydGlhbCIsIDI1Nik7CisgICAgICAg ICAgICB9IGVsc2UgaWYgKHNlbmRtb2RlID09IFNNX1JFU0VORCkgeworICAgICAgICAgICAgICAg IGNrc3RybmNhdCh4ZmVyc3RyLCAiIC8gcmVzZW5kIiwgMjU2KTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfSBlbHNlIGlmICh3aGF0ICYgV19SRUNWICYmIHJzX2xlbiA+IDBMKSB7CisgICAgICAg ICAgICBja3N0cm5jYXQoeGZlcnN0ciwgIiAvIHJlc2VuZCIsIDI1Nik7CisgICAgICAgIH0KKyNl bmRpZiAvKiBDS19SRVNFTkQgKi8KKyAgICB9IGVsc2UgeworCisjaWZuZGVmIE5PQ1NFVFMKKyAg ICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIlRFWFQiLDI1Nik7CisjaWZkZWYgTkVXRlRQCisjaWZu ZGVmIE5PVU5JQ09ERQorCWlmICh3aGF0ICYgV19GVFApIHsKKwkgICAgaWYgKGZ0cF9jc3ggPCAw KQorCSAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCIgKG5vIHRyYW5zbGF0aW9uKSIsIDI1Nik7CisJ ICAgIGVsc2UKKwkgICAgICBja21ha3htc2coJnhmZXJzdHJbNF0sMjUyLAorCQkgICAgICAgIiAo IiwKKwkJICAgICAgIGZjc2luZm9bKHdoYXQgJiBXX1NFTkQpID8gZnRwX2NzbCA6IGZ0cF9jc3hd LmtleXdvcmQsCisJCSAgICAgICAiID0+ICIsCisJCSAgICAgICBmY3NpbmZvWyh3aGF0ICYgV19T RU5EKSA/IGZ0cF9jc3ggOiBmdHBfY3NsXS5rZXl3b3JkLAorCQkgICAgICAgIikiLAorCQkgICAg ICAgTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTAorCQkgICAgICAgKTsKKwl9IGVs c2UKKyNlbmRpZiAvKiBOT1VOSUNPREUgKi8KKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkgIGlmICh0 Y2hhcnNldCA9PSBUQ19UUkFOU1ApIHsKKyAgICAgICAgICAgIGNrc3RybmNhdCh4ZmVyc3RyLCAi IChubyB0cmFuc2xhdGlvbikiLCAyNTYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aWYgKHdoYXQgJiBXX1NFTkQpIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCAmeGZlcnN0cltz dHJsZW4oeGZlcnN0cildLCAvKiBzYWZlICovCisgICAgICAgICAgICAgICAgICAgICAgICAiICgl cyA9PiAlcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZmNzaW5mb1tmY2hhcnNldF0ua2V5 d29yZCwgLyogYnVpbHQtaW4ga2V5d29yZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHRj c2luZm9bdGNoYXJzZXRdLmtleXdvcmQgIC8qIGxlbmd0aHMgYXJlIGNvbnRyb2xsZWQgKi8KKwkJ CSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwcmludGYoICZ4ZmVy c3RyW3N0cmxlbih4ZmVyc3RyKV0sIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICIgKCVzID0+ICVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0Y3NpbmZvW3RjaGFyc2V0 XS5rZXl3b3JkLCAvKiBidWlsdC1pbiBrZXl3b3JkcyAqLworICAgICAgICAgICAgICAgICAgICAg ICAgZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7IC8qIGxlbmd0aHMgY29udHJvbGxlZCAqLwor ICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworICAgIH0KKyAg ICBtb3ZlKENXX1RZUCwyMik7CisgICAgcHJpbnR3KCIlcyIsIHhmZXJzdHIpOworICAgIGNscnRv ZW9sKCk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UWVAsIChsb25nKSB4ZmVyc3RyICk7CisjZW5kaWYg LyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgIHJldHVybjsKK30KKworI2lmZGVmIENL X05FV1RFUk0KK3N0YXRpYyBGSUxFICpja19zdGRvdXQgPSBOVUxMOworc3RhdGljIGludCBja19m ZCA9IC0xOworI2VuZGlmIC8qIENLX05FV1RFUk0gKi8KKworc3RhdGljIGxvbmcgcGN0ID0gMEws IG9sZHBjdCA9IDBMLCBvbGRydHQgPSAtMUw7CitzdGF0aWMgaW50IG9sZHR5cCA9IDAsIG9sZHdp biA9IC0xLCBvbGR0cnkgPSAtMSwgb2xkbGVuID0gLTEsIG9sZHRpbSA9IC0xOworCisjaWZkZWYg TkVUQ09OTgorc3RhdGljIGNoYXIgKm5ldG5hbWVbXSA9IHsKKyAgICAibm9uZSIsCQkJCS8qIDAw ICovCisgICAgIlRDUC9JUCIsCQkJCS8qIDAxIFRDUCAoU29ja2V0cykgKi8KKyAgICAiVENQL0lQ IiwJCQkJLyogMDIgVENQIChTdHJlYW1zKSAqLworICAgICJYLjI1IiwJCQkJLyogMDMgU3VuTGlu ayBYLjI0ICAqLworICAgICJERUNuZXQiLAkJCQkvKiAwNCBERUNuZXQgICovCisgICAgIlZBWCBQ U0kiLAkJCQkvKiAwNSBWQVggUFNJICovCisgICAgIk5hbWVkIFBpcGVzIiwJCQkvKiAwNiBMQU4g TWFuYWdlciBOYW1lZCBQaXBlICovCisgICAgIlguMjUiLAkJCQkvKiAwNyBTdHJhdHVzIFZPUyBY LjI1ICovCisgICAgIk5ldEJJT1MiLAkJCQkvKiAwOCBJQk0gTkVUQklPUyAqLworICAgICJTdXBl ckxBVCIsCQkJCS8qIDA3IE1lcmlkaWFuIFN1cGVyTEFUICovCisgICAgIkZpbGUiLAkJCQkvKiAx MCBGaWxlICovCisgICAgIkNvbW1hbmQiLAkJCQkvKiAxMSBTdWJwcm9jZXNzIChwaXBlKSAqLwor ICAgICJETEwiLAkJCQkvKiAxMiBETEwgZG9lcyBpL28gKi8KKyAgICAiWC4yNSIsCQkJCS8qIDEz IElCTSBBSVhMaW5rIFguMjUgKi8KKyAgICAiWC4yNSIsCQkJCS8qIDE0IEhQLVVYIFguMjUgKi8K KyAgICAiUFRZIiwJCQkJLyogMTUgUHNldWRvdGVybWluYWwgKi8KKyAgICAiU1NIIiwJCQkJLyog MTYgU1NIICovCisgICAgIjxFUlJPUj4iLAkJCQkvKiAxNyBJbiBjYXNlIG5ldyB0eXBlcyBhcmUg YWRkZWQgKi8KKyAgICAiPEVSUk9SPiIsCQkJCS8qIDE4IGJ1dCBub2JvZHkgcmVtZW1iZXJzIHRv IHVwZGF0ZSAqLworICAgICI8RVJST1I+IiwJCQkJLyogMTkgdGhpcyB0YWJsZSAuLi4gKi8KKyAg ICBOVUxMCQkJCS8qIDIwICovCit9Oworc3RhdGljIGludCBubmV0bmFtZSA9IChzaXplb2YobmV0 bmFtZSkgLyBzaXplb2YoY2hhciAqKSk7CisKKyNlbmRpZiAvKiBORVRDT05OICovCisKKyNpZmRl ZiBDS19BTlNJQwordm9pZAorc2NyZWVuYyhpbnQgZiwgY2hhciBjLENLX09GRl9UIG4sY2hhciAq cykKKyNlbHNlCitDS1ZPSUQKK3NjcmVlbmMoZixjLG4scykKK2ludCBmOyAgICAgICAgICAvKiBh cmd1bWVudCBkZXNjcmlwdG9yICovCitjaGFyIGM7ICAgICAgICAgLyogYSBjaGFyYWN0ZXIgb3Ig c21hbGwgaW50ZWdlciAqLworQ0tfT0ZGX1QgbjsgICAgIC8qIGEgbG9uZyBpbnRlZ2VyICovCitj aGFyICpzOyAgICAgICAgLyogYSBzdHJpbmcgKi8KKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyog c2NyZWVuYygpICovIHsKKyNpZmRlZiBDS19TU0wKKyAgICBleHRlcm4gaW50IHRsc19hY3RpdmVf ZmxhZywgc3NsX2FjdGl2ZV9mbGFnOworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFJMT0dD T0RFCisgICAgZXh0ZXJuIGludCB0dG5wcm90bzsKKyNlbmRpZiAvKiBSTE9HQ09ERSAqLworICAg IHN0YXRpYyBpbnQgcSA9IDA7CisgICAgc3RhdGljIGxvbmcgZmNudCA9IDBMOwkJLyogTnVtYmVy IG9mIGZpbGVzIHRyYW5zZmVycmVkICovCisgICAgc3RhdGljIENLX09GRl9UIGZzaXogPSAoQ0tf T0ZGX1QpLTE7IC8qIENvcHkgb2YgZmlsZSBzaXplICovCisgICAgc3RhdGljIENLX09GRl9UIGZi eXQgPSAwTDsgLyogVG90YWwgZmlsZSBieXRlcyBvZiBhbGwgZmlsZXMgdHJhbnNmZXJyZWQgKi8K KyAgICBzdGF0aWMgQ0tfT0ZGX1QgaG93ZmFyID0gMEw7IC8qIEhvdyBtdWNoIG9mIGN1cnJlbnQg ZmlsZSBoYXMgYmVlbiB4ZmVyJ2QgKi8KKyAgICBzdGF0aWMgaW50ICBwY3RsYmwgPSAwTDsgIC8q IFBlcmNlbnQgZG9uZSB2cyBCeXRlcyBzbyBmYXIgKi8KKyAgICBsb25nIGNwcyA9IDBMOworCisg ICAgaW50IG5ldCA9IDA7CisgICAgaW50IHhuZXQgPSAwOworICAgIGludCBmdHAgPSAwOworICAg IGludCBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcg Ki8KKyAgICBpbnQgZXJyb3JzID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBjb3Vu dGVyICovCisgICAgaW50IHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV29ya2Vy ICovCisKKyAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIGNpbml0IiwiIixjaW5pdCk7CisgICAgZGVi dWcoRjEwMSwic2NyZWVuYyBjZW5kdyIsIiIsY2VuZHcpOworCisgICAgaWYgKCFzKSBzID0gIiI7 ICAgICAgICAgICAgICAgICAgICAgLyogQWx3YXlzIGRvIHRoaXMuICovCisKKyAgICBmdHAgPSAo d2hhdCAmIFdfRlRQKSA/IDEgOiAwOwkvKiBGVFAgb3IgS2VybWl0ICovCisgICAgbmV0ID0gbmV0 d29yayB8fCBmdHA7CisgICAgeG5ldCA9IGZ0cCA/IDEgOiBuZXR0eXBlOwkJLyogTkVUX1RDUEIg PT0gMSAqLworCisgICAgaWYgKGNpbml0ID09IDAgfHwgY2VuZHcgPiAwKSB7ICAgICAgLyogSGFu ZGxlIGJvcmRlcmxpbmUgY2FzZXMuLi4gKi8KKyAgICAgICAgaWYgKGYgPT0gU0NSX0NXKSB7ICAg ICAgICAgICAgICAvKiBDbG9zZSB3aW5kb3csIGJ1dCBpdCdzIG5vdCBvcGVuICovCisgICAgICAg ICAgICBmdF93aW4gPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg IGRlYnVnKEYxMTEsInNjcmVlbmMgQSIscyxmKTsKKyAgICAgICAgaWYgKGYgPT0gU0NSX0VNIHx8 CisgICAgICAgICAgIChmID09IFNDUl9QVCAmJiBjID09ICdFJykpIHsgLyogRmF0YWwgZXJyb3Ig YmVmb3JlIHdpbmRvdyBvcGVuICovCisgICAgICAgICAgICBjb25vbGwoIiIpOyBjb25vYygnPycp OyBjb25vbGwocyk7IHJldHVybjsgLyogUmVndWxhciBkaXNwbGF5ICovCisgICAgICAgIH0KKyAg ICB9CisgICAgaWYgKGNpbml0ID09IDApIHsgICAgICAgICAgICAgICAgICAgLyogT25seSBjYWxs IGluaXRzY3IoKSBvbmNlICovCisJY2hhciAqIHM7CisJLyogQ2hlY2sgdGhlc2Ugbm93IC0tIGlm IHRoZXkgYXJlIGRlZmluZWQgYnV0IG5vdCBudW1lcmljICovCisJLyogdGhleSBjYW4gY3Jhc2gg Y3Vyc2VzICovCisJcyA9IGdldGVudigiTElORVMiKTsKKwlpZiAocykgaWYgKCFyZGlnaXRzKHMp KSB7CisJICAgIHByaW50ZigiP0xJTkVTIHZhcmlhYmxlIG5vdCBudW1lcmljOiBcIiVzXCIuXG4i LHMpOworCSAgICBwcmludGYoIihGdWxsc2NyZWVuIGRpc3BsYXkgZGlzYWJsZWQpXG4iKTsKKwkg ICAgZmRpc3BsYSA9IFhZRkRfUzsKKwkgICAgcmV0dXJuOworCX0KKwlzID0gZ2V0ZW52KCJDT0xV TU5TIik7CisJaWYgKHMpIGlmICghcmRpZ2l0cyhzKSkgeworCSAgICBwcmludGYoIj9DT0xVTU5T IHZhcmlhYmxlIG5vdCBudW1lcmljOiBcIiVzXCIuXG4iLHMpOworCSAgICBwcmludGYoIihGdWxs c2NyZWVuIGRpc3BsYXkgZGlzYWJsZWQpXG4iKTsKKwkgICAgZmRpc3BsYSA9IFhZRkRfUzsKKwkg ICAgcmV0dXJuOworCX0KKyAgICAgICAgY2VuZHcgPSAxOyAgICAgICAgICAgICAgICAgICAgICAv KiBOZXcgd2luZG93IG5lZWRzIHJlcGFpbnRpbmcgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAg IGlmICghaW5pdHNjcigpKSB7ICAgICAgICAgICAgICAgLyogT29wcywgY2FuJ3QgaW5pdGlhbGl6 ZSB3aW5kb3c/ICovCisvKgorICBJbiBmYWN0LCB0aGlzIGRvZXNuJ3QgaGFwcGVuLiAgIm1hbiBj dXJzZXMiIHNheXMgaW5pdHNjcigpIGhhbHRzIHRoZQorICBlbnRpcmUgcHJvZ3JhbSBpZiBpdCBm YWlscywgd2hpY2ggaXMgdHJ1ZSBvbiB0aGUgc3lzdGVtcyB3aGVyZSBJJ3ZlCisgIHRlc3RlZCBp dC4gIEl0IHdpbGwgZmFpbCBpZiB5b3VyIHRlcm1pbmFsIHR5cGUgaXMgbm90IGtub3duIHRvIGl0 LgorICBUaGF0J3Mgd2h5IFNFVCBGSUxFIERJU1BMQVkgRlVMTFNDUkVFTiBjYWxscyB0Z2V0ZW50 KCkgdG8gbWFrZSBzdXJlIHRoZQorICB0ZXJtaW5hbCB0eXBlIGlzIGtub3duIGJlZm9yZSBhbGxv d2luZyBhIGN1cnNlcyBkaXNwbGF5LgorKi8KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJD VVJTRVMgSU5JVFNDUiBFUlJPUlxyXG4iKTsKKyAgICAgICAgICAgIGZkaXNwbGEgPSBYWUZEX1M7 ICAgICAgICAgICAvKiBGYWxsIGJhY2sgdG8gQ1JUIGRpc3BsYXkgKi8KKyAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNpbml0Kys7ICAgICAgICAgICAg ICAgICAgICAvKiBXaW5kb3cgaW5pdGlhbGl6ZWQgb2sgKi8KKyAgICAgICAgICAgIGRlYnVnKEYx MDAsIkNVUlNFUyBJTklUU0NSIE9LIiwiIiwwKTsKKyAgICAgICAgfQorI2Vsc2UgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgc29tZSBtZW1vcnkuICovCisjaWZkZWYg Q0tfTkVXVEVSTQorICAgICAgICAvKiAoRnJvbSBBbmR5IEZ5ZmUgPGFuZHlAdmxzaS5jcy5jYWx0 ZWNoLmVkdT4pCisgICAgICAgICAgIFN5c3RlbSBWIGN1cnNlcyBzZWVtcyB0byByZXNlcnZlIHRo ZSByaWdodCB0byBhbHRlciB0aGUgYnVmZmVyaW5nCisgICAgICAgICAgIG9uIHRoZSBvdXRwdXQg RklMRSogd2l0aG91dCByZXN0b3JpbmcgaXQuICBGb3J0dW5hdGVseSBTeXN0ZW0gVgorICAgICAg ICAgICBjdXJzZXMgcHJvdmlkZXMgbmV3dGVybSgpLCBhbiBhbHRlcm5hdGl2ZSB0byBpbml0c2Ny KCksIHRoYXQKKyAgICAgICAgICAgYWxsb3dzIHVzIHRvIHNwZWNpZnkgZXhwbGljaXRseSB0aGUg dGVybWluYWwgdHlwZSBhbmQgaW5wdXQgYW5kCisgICAgICAgICAgIG91dHB1dCBGSUxFIHBvaW50 ZXJzLiAgVGh1cyB3ZSBkdXBsaWNhdGUgc3Rkb3V0LCBhbmQgbGV0IGN1cnNlcworICAgICAgICAg ICBoYXZlIHRoZSBjb3B5LiAgVGhlIG9yaWdpbmFsIHJlbWFpbnMgdW5hbHRlcmVkLiAgVW5mb3J0 dW5hdGVseSwKKyAgICAgICAgICAgbmV3dGVybSgpIHNlZW1zIHRvIGJlIHBhcnRpY3VsYXIgdG8g U3lzdGVtIFYuCisgICAgICAgICovCisgICAgICAgIHMgPSBnZXRlbnYoIlRFUk0iKTsKKyAgICAg ICAgaWYgKGNrX2ZkIDwgMCkgeworICAgICAgICAgICAgY2tfZmQgPSBkdXAoZmlsZW5vKHN0ZG91 dCkpOworICAgICAgICAgICAgY2tfc3Rkb3V0ID0gKGNrX2ZkID49IDApID8gKEZJTEUgKilmZG9w ZW4oY2tfZmQsICJ3IikgOiBOVUxMOworICAgICAgICB9CisgICAgICAgIGRlYnVnKEYxMDAsInNj cmVlbmMgbmV3dGVybS4uLiIsIiIsMCk7CisKKy8qIE5PVEU6IEl0IG1pZ2h0IGJlIG5lY2Vzc2Fy eSB0byBkbyB0aGlzIHdpdGggc3RkaW4gdG9vISAqLworLyogVGhpcyB3b3VsZCBoYXZlIGJlZW4g dGhlIGNhc2UgaW4gRnJlZUJTRCA0LjEgYnV0IHRoZXkgZml4ZWQgdGhlICovCisvKiBwcm9ibGVt IGJ5IHJlc3RvcmluZyB0aGUgYnVmZmVyaW5nIG9mIHN0ZGluIGJlZm9yZSB0aGUgZmluYWwgcmVs ZWFzZS4gKi8KKy8qIChCdXQgVC5FLiBEaWNrZXkgc2F5cyBzdGRpbiBpcyBub3QgYnVmZmVyZWQ/ KSAqLworCisgICAgICAgIGlmIChja19zdGRvdXQgPT0gTlVMTCB8fCBuZXd0ZXJtKHMsIGNrX3N0 ZG91dCwgc3RkaW4pID09IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAg ICAgICAgICAiRnVsbHNjcmVlbiBkaXNwbGF5IG5vdCBzdXBwb3J0ZWQgZm9yIHRlcm1pbmFsIHR5 cGU6ICVzXHJcbiIscyk7CisgICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOyAgICAgICAgICAg LyogVXNlIENSVCBpbnN0ZWFkICovCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg ICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBuZXd0ZXJtIG9rIiwiIiwwKTsKKyNlbHNlCisgICAg ICAgIGRlYnVnKEYxMDAsInNjcmVlbiBjYWxsaW5nIGluaXRzY3IiLCIiLDApOworICAgICAgICBp bml0c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzLiAqLwor ICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW4gaW5pdHNjciBvayIsIiIsMCk7CisjZW5kaWYgLyog Q0tfTkVXVEVSTSAqLworICAgICAgICBjaW5pdCsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IFJlbWVtYmVyIGN1cnNlcyB3YXMgaW5pdGlhbGl6ZWQuICovCisjZW5kaWYgLyogQ09NTUVOVCAq LworICAgIH0KKyAgICBmdF93aW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaW5k b3cgaXMgb3BlbiAqLworICAgIGlmIChyZXBhaW50KSB7CisjaWZkZWYgQ0tfV1JFRlJFU0gKKy8q CisgIFRoaXMgdG90YWxseSByZXBhaW50cyB0aGUgc2NyZWVuLCBqdXN0IHdoYXQgd2Ugd2FudCwg YnV0IHdlIGNhbiBvbmx5CisgIGRvIHRoaXMgd2l0aCByZWFsIGN1cnNlcywgYW5kIHRoZW4gb25s eSBpZiBjbGVhcm9rKCkgYW5kIHdyZWZyZXNoKCkgYXJlCisgIHByb3ZpZGVkIGluIHRoZSBjdXJz ZXMgbGlicmFyeS4KKyovCisjaWZkZWYgT1MyCisgICAgICAgIFJlc3RvcmVDbWRNb2RlKCk7Cisj ZWxzZQorI2lmZGVmIFFOWAorI2lmbmRlZiBRTlgxNgorICAgICAgICBjbGVhcm9rKHN0ZHNjciwg MSk7ICAgICAgICAgICAgIC8qIFFOWCBkb2Vzbid0IGhhdmUgY3Vyc2NyICovCisjZW5kaWYgLyog UU5YMTYgKi8KKyAgICAgICAgd3JlZnJlc2goc3Rkc2NyKTsKKyNlbHNlCisgICAgICAgIHdyZWZy ZXNoKGN1cnNjcik7CisjZW5kaWYgLyogUU5YICovCisjZW5kaWYgLyogT1MyICovCisjZWxzZSAg LyogTm8gQ0tfV1JFRlJFU0ggKi8KKy8qCisgIEtlcm1pdCdzIGRvLWl0LXlvdXJzZWxmIG1ldGhv ZCwgd29ya3Mgd2l0aCBhbGwgdHlwZXMgb2YgZnVsbHNjcmVlbgorICBzdXBwb3J0LCBidXQgZG9l cyBub3QgcmVwYWludCBhbGwgdGhlIGZpZWxkcy4gIEZvciBleGFtcGxlLCB0aGUgZmlsZW5hbWUK KyAgaXMgbG9zdCwgYmVjYXVzZSBpdCBhcnJpdmVzIGF0IGEgY2VydGFpbiB0aW1lIGFuZCBuZXZl ciBjb21lcyBhZ2FpbiwgYW5kCisgIEtlcm1pdCBwcmVzZW50bHkgZG9lcyBub3Qgc2F2ZSBpdCBh bnl3aGVyZS4gIE1ha2luZyB0aGlzIG1ldGhvZCB3b3JrIGZvcgorICBhbGwgZmllbGRzIHdvdWxk IGJlIGEgcmF0aGVyIG1ham9yIHJlY29kaW5nIHRhc2ssIGR1cGxpY2F0aW5nIHdoYXQgY3Vyc2Vz CisgIGFscmVhZHkgZG9lcywgYW5kIHdvdWxkIGFkZCBhIGxvdCBvZiBjb21wbGV4aXR5IGFuZCBz dG9yYWdlIHNwYWNlLgorKi8KKyAgICAgICAgY2VuZHcgPSAxOworI2VuZGlmIC8qIENLX1dSRUZS RVNIICovCisgICAgICAgIHJlcGFpbnQgPSAwOworICAgIH0KKyAgICBpZiAoY2VuZHcpIHsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aW4oKSB3YXMgY2FsbGVkIHByZXZpb3VzbHkgKi8K KyNpZmRlZiBWTVMKKyAgICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiAo b3Igc2hvdWxkIGhhdmUgYmVlbiEpICovCisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHRvdWNo d2luKHN0ZHNjcik7CisgICAgICAgIHJlZnJlc2goKTsKKyNlbHNlCisjaWZkZWYgUU5YCisvKgor ICBJbiBRTlgsIGlmIHdlIGRvbid0IGNhbGwgaW5pdHNjcigpIGhlcmUgd2UgY29yZSBkdW1wLgor ICBJIGRvbid0IGhhdmUgYW55IFFOWCBjdXJzZXMgZG9jdW1lbnRhdGlvbiwgYnV0IG90aGVyIGN1 cnNlcyBtYW51YWxzCisgIHNheSB0aGF0IGluaXRzY3IoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkg b25jZSBwZXIgYXBwbGljYXRpb24sIGFuZAorICBleHBlcmllbmNlIHNob3dzIHRoYXQgb24gb3Ro ZXIgc3lzdGVtcywgY2FsbGluZyBpbml0c2NyKCkgaGVyZSBnZW5lcmFsbHkKKyAgcmVzdWx0cyBp biBhIGNvcmUgZHVtcC4KKyovCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgcmUtY2FsbGlu ZyBpbml0c2NyIFFOWCIsIiIsMCk7CisgICAgICAgIGluaXRzY3IoKTsKKyAgICAgICAgY2xlYXIo KTsKKyAgICAgICAgcmVmcmVzaCgpOworI2lmZGVmIENPTU1FTlQKKy8qCisgIEJ1dCBldmVuIHNv LCBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgY3Vyc2VzIGRpc3BsYXlzIGFyZSBtZXNzZWQgdXAuCisg IENhbGxpbmcgdG91Y2h3aW4sIHJlZnJlc2gsIGV0YywgZG9lc24ndCBtYWtlIGFueSBkaWZmZXJl bmNlLgorKi8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIHRvdWNod2luIFFO WCIsIiIsMCk7CisgICAgICAgIHRvdWNod2luKHN0ZHNjcik7CisgICAgICAgIGRlYnVnKEYxMDAs InNjcmVlbmMgY2FsbGluZyByZWZyZXNoIFFOWCIsIiIsMCk7CisgICAgICAgIHJlZnJlc2goKTsK KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNlbHNlIC8qIEFsbCBvdGhlcnMuLi4gKi8KKyAgICAg ICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5nIGNsZWFyIiwiIiwwKTsKKyAgICAgICAgY2xl YXIoKTsKKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjbGVhciBvayIsIiIsMCk7CisjZW5k aWYgLyogUU5YICovCisjZW5kaWYgLyogVk1TICovCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVl bmMgc2V0dXAgb2siLCIiLDApOworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGRvaW5nIGZp cnN0IG1vdmUiLCIiLDApOworICAgICAgICBtb3ZlKENXX0JBTiwwKTsgICAgICAgICAgICAgICAg IC8qIERpc3BsYXkgdGhlIGJhbm5lciAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJzY3JlZW5jIG15 aG9zdCIsbXlob3N0LDApOworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBkZWJ1ZyhGMTEwLCJz Y3JlZW5jIG15aXBhZGRyIixteWlwYWRkciwwKTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyNp ZmRlZiBIUFVYMTAxMAorICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgZmlyc3Qg cHJpbnR3Li4uIiwiIiwwKTsKKy8qIFJpZ2h0IGhlcmUgaXMgd2hlcmUgSFAtVVggMTAuMTAgbGli eGN1cnNlLjEgUmV2IDc2LjIwIGhhbmdzLi4uICovCisjZW5kaWYgLyogSFBVWDEwMTAgKi8KKyAg ICAgICAgaWYgKG15aG9zdFswXSkgeworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICAgICAgaWYg KCFteWlwYWRkclswXQorI2lmZGVmIE9TMgorICAgICAgICAgICAgICAgICAvKiBXZSBuZWVkIHRv IHBlcmZvcm0gdGhpcyB0ZXN0IGJlY2F1c2Ugb24gbm9uLVRDUC9JUCAqLworICAgICAgICAgICAg ICAgICAvKiBzeXN0ZW1zIHRoZSBjYWxsIHRvIGdldGxvY2FsaXBhZGRyKCkgcmVzdWx0cyBpbiBh ICAqLworICAgICAgICAgICAgICAgICAvKiBETlMgTG9va3VwIHdoaWNoIHRha2VzIHNldmVyYWwg bWludXRlcyB0byB0aW1lIG91dCAqLworICAgICAgICAgICAgICAgICAmJiBuZXQgJiYKKyAgICAg ICAgICAgICAgICAgKHhuZXQgPT0gTkVUX1RDUEEgfHwgeG5ldCA9PSBORVRfVENQQgorI2lmZGVm IFNTSEJVSUxUSU4KKyAgICAgICAgICAgICAgICAgIHx8IHhuZXQgPT0gTkVUX1NTSAorI2VuZGlm IC8qIFNTSEJVSUxUSU4gKi8KKyAgICAgICAgICAgICAgICAgICkKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICBnZXRsb2NhbGlwYWRkcigpOworICAg ICAgICAgICAgaWYgKG15aXBhZGRyWzBdICYmIHN0cmNtcCgoY2hhciAqKW15aG9zdCwoY2hhciAq KW15aXBhZGRyKSkKKyAgICAgICAgICAgICAgcHJpbnR3KCIlcywgJXMgWyVzXSIsdmVyc2lvLChj aGFyICopbXlob3N0LChjaGFyICopbXlpcGFkZHIpOworICAgICAgICAgICAgZWxzZQorI2VuZGlm IC8qIFRDUFNPQ0tFVCAqLworICAgICAgICAgICAgICBwcmludHcoIiVzLCAlcyIsdmVyc2lvLChj aGFyICopbXlob3N0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50dygiJXMi LHZlcnNpbyk7CisgICAgICAgIH0KKyNpZmRlZiBIUFVYMTAxMAorICAgICAgICBkZWJ1ZyhGMTAw LCJzY3JlZW5jIGZpcnN0IHByaW50dyByZXR1cm5zIiwiIiwwKTsKKyNlbmRpZiAvKiBIUFVYMTAx MCAqLworICAgICAgICBtb3ZlKENXX0RJUiwzKTsKKyAgICAgICAgcHJpbnR3KCJDdXJyZW50IERp cmVjdG9yeTogJXMiLHpndGRpcigpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25n KSB6Z3RkaXIoKSApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgaWYgKG5ldCkgeworICAgICAgICAgICAgbW92ZShDV19MSU4sOCk7CisgICAgICAgICAgICBw cmludHcoIk5ldHdvcmsgSG9zdDogJXMiLAorI2lmZGVmIE5FV0ZUUAorCQkgICBmdHAgPyAoZnRw X2hvc3QgPyBmdHBfaG9zdCA6ICIodW5rbm93bikiKSA6CisjZW5kaWYgLyogTkVXRlRQICovCisJ CSAgIHR0bmFtZQorCQkgICApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbW92ZShD V19MSU4sMCk7CisgICAgICAgICAgICBwcmludHcoIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyIs dHRuYW1lKTsKKyAgICAgICAgfQorI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1 aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0xJTiwgKGxvbmcpIHR0 bmFtZSApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKworICAgICAgICBp ZiAobmV0KSB7CisgICAgICAgICAgICBtb3ZlKENXX1NQRCw4KTsKKyAgICAgICAgICAgIHByaW50 dygiTmV0d29yayBUeXBlOiAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUo Q1dfU1BELDEpOworICAgICAgICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIFNwZWVkOiAiKTsK KyAgICAgICAgfQorICAgICAgICBtb3ZlKENXX1NQRCwyMik7ICAgICAgICAgICAgICAgIC8qIFNl cmlhbCBzcGVlZCBvciBuZXR3b3JrIHR5cGUgKi8KKyAgICAgICAgaWYgKG5ldCkgeworI2lmZGVm IE5FVENPTk4KKwkgICAgaW50IHNlY3VyZSA9IDA7CisJICAgIGNoYXIgKiB4bmFtZTsKKwkgICAg aWYgKHhuZXQgPiBubmV0bmFtZSkKKwkgICAgICB4bmFtZSA9ICJbRVJST1JdIjsKKwkgICAgZWxz ZQorCSAgICAgIHhuYW1lID0gbmV0bmFtZVt4bmV0XTsKKyNpZmRlZiBORVdGVFAKKyAgICAgICAg ICAgIGlmIChmdHApIHsKKwkJaWYgKGZ0cGlzc2VjdXJlKCkpCisJCSAgc2VjdXJlID0gMTsKKwkg ICAgfSBlbHNlCisjZW5kaWYgLyogTkVXRlRQICovCisJICAgICAgaWYgKDAKKyNpZmRlZiBTU0hC VUlMVElOCisgICAgICAgICAgICAgICAgfHwgSVNfU1NIKCkKKyNlbmRpZiAvKiBTU0hCVUlMVElO ICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIHx8IGNrX3RuX2VuY3J5 cHRpbmcoKSAmJiBja190bl9kZWNyeXB0aW5nKCkKKyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICov CisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9mbGFnIHx8IHNz bF9hY3RpdmVfZmxhZworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFJMT0dDT0RFCisjaWZk ZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgfHwg dHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4KKyNlbmRp ZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNlbmRpZiAv KiBSTE9HQ09ERSAqLworICAgICAgICAgICAgICAgICApIHsKKwkJc2VjdXJlID0gMTsKKwkgICAg fQorCSAgICBpZiAoc2VjdXJlKSB7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg ICAgICAgICBjaGFyIGJ1ZlszMF07CisgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsIiVzIChT RUNVUkUpIix4bmFtZSk7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgYnVmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyAoU0VDVVJFKSIseG5hbWUpOworICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVzIix4bmFtZSk7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BE LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSB4bmFtZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIHByaW50dygiKG5ldHdvcmsp Iik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKG5ldHdvcmspIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyog S1VJICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgaWYgKHNwZWVkIDwgMEwpCisgICAgICAgICAgICAgIHNwZWVkID0gdHRnc3BkKCk7CisgICAg ICAgICAgICBpZiAoc3BlZWQgPiAwTCkgeworICAgICAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4 ODgwKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50dygiNzUvMTIwMCIpOworI2lmZGVmIEtV SQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIjc1LzEy MDAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1 RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIGNoYXIgc3BlZWRidWZbNjRdIDsKKyAgICAgICAgICAgICAgICAgICAgc3By aW50ZihzcGVlZGJ1ZiwgIiVsZCIsIHNwZWVkKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnR3 KCIlcyIsc3BlZWRidWYpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgc3BlZWRidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludHco InVua25vd24iKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1 aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpICIodW5rbm93bikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRp ZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgbW92ZShDV19QQVIsMTQpOworICAgICAgICBwcmludHcoIlBhcml0eTogJXMiLGZ0 cCA/ICJub25lIiA6IHBhcm5hbSgoY2hhcilwYXJpdHkpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIHBhcm5hbSgoY2hhcilwYXJpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5k aWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENLX1RJTUVSUworICAgICAg ICBpZiAoLyogcnR0ZmxnICYmICovIHByb3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAg IG1vdmUoQ1dfVE1PLCA5KTsgcHJpbnR3KCJSVFQvVGltZW91dDoiKTsgfQorI2VuZGlmIC8qIENL X1RJTUVSUyAqLworICAgICAgICBtb3ZlKENXX1RZUCwxMSk7IHByaW50dygiRmlsZSBUeXBlOiIp OworICAgICAgICBtb3ZlKENXX1NJWiwxMSk7IHByaW50dygiRmlsZSBTaXplOiIpOworICAgICAg ICBtb3ZlKENXX1BDRCwgOCk7CisgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIHBjdGxibCA9 ICh3aGF0ICYgV19TRU5EKTsKKyAgICAgICAgcHJpbnR3KCIlczoiLCBwY3RsYmwgPyAiUGVyY2Vu dCBEb25lIiA6ICJCeXRlcyBTbyBGYXIiKTsKKworI2lmZGVmIFhZWl9JTlRFUk5BTAorICAgICAg ICBtb3ZlKENXX0JBUiwgMSk7CisgICAgICAgIHByaW50dygiJTEwcyBQcm90b2NvbDoiLCBmdHAg PyAiRlRQIiA6IHB0YWJbcHJvdG9jb2xdLnBfbmFtZSk7CisjZW5kaWYgLyogWFlaX0lOVEVSTkFM ICovCisjaWZkZWYgQ0tfUENUX0JBUgorICAgICAgICBpZiAodGhlcm1vbWV0ZXIpIHsKKyAgICAg ICAgICAgIG9sZHBjdCA9IHBjdCA9IDA7CisgICAgICAgICAgICBtb3ZlKENXX0JBUiwyMik7Cisg ICAgICAgICAgICBwcmludHcoIiAgICAuLi4xMC4uLjIwLi4uMzAuLi40MC4uLjUwLi4uNjAuLi43 MC4uLjgwLi4uOTAuLjEwMCIpOworICAgICAgICAgICAgbW92ZShDV19CQVIsMjIrNTYpOworICAg ICAgICB9CisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworICAgICAgICBtb3ZlKENXX1RSLCAgMSk7 IHByaW50dygiRXN0aW1hdGVkIFRpbWUgTGVmdDoiKTsKKyAgICAgICAgbW92ZShDV19DUCwgIDIp OyBwcmludHcoIlRyYW5zZmVyIFJhdGUsIENQUzoiKTsKKyAgICAgICAgbW92ZShDV19XUywgIDgp OyBwcmludHcoIldpbmRvdyBTbG90czolcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykgJiYgIWZ0cCkgPworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiIiA6ICIgTi9BIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICBtb3ZlKENXX1BULCAgOSk7IHByaW50dygiUGFja2V0IFR5cGU6Iik7Cisg ICAgICAgIGlmIChmdHAgfHwgcHJvdG9jb2wgIT0gUFJPVE9fSykgeworCSAgICBtb3ZlKENXX1BU LDIyKTsKKyAgICAgICAgICAgIHByaW50dygiJXMiLCAiTi9BIik7CisgICAgICAgICAgICBtb3Zl KENXX1BDLCAgMTEpOyBwcmludHcoIkkvTyBDb3VudDoiKTsKKyAgICAgICAgICAgIG1vdmUoQ1df UEwsICAxMCk7IHByaW50dygiSS9PIExlbmd0aDoiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIG1vdmUoQ1dfUEMsICA4KTsgcHJpbnR3KCJQYWNrZXQgQ291bnQ6Iik7CisgICAgICAg ICAgICBtb3ZlKENXX1BMLCAgNyk7IHByaW50dygiUGFja2V0IExlbmd0aDoiKTsKKyAgICAgICAg fQorI2lmbmRlZiBDT01NRU5UCisgICAgICAgIG1vdmUoQ1dfUFIsICA5KTsgcHJpbnR3KCJFcnJv ciBDb3VudDoiKTsKKyNlbHNlCisgICAgICAgIG1vdmUoQ1dfUFIsICAyKTsgcHJpbnR3KCJQYWNr ZXQgUmV0cnkgQ291bnQ6Iik7CisjZW5kaWYKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIG1vdmUo Q1dfUEIsICAyKTsgcHJpbnR3KCJQYWNrZXQgQmxvY2sgQ2hlY2s6Iik7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgICAgICBtb3ZlKENXX0VSUiwxMCk7IHByaW50dygiTGFzdCBFcnJvcjoiKTsK KyAgICAgICAgbW92ZShDV19NU0csIDgpOyBwcmludHcoIkxhc3QgTWVzc2FnZToiKTsKKwlpZiAo eGZybXNnKSB7CisJICAgIG1vdmUoQ1dfTVNHLCAyMik7IHByaW50dygiJXMiLHhmcm1zZyk7CisJ ICAgIG1ha2VzdHIoJnhmcm1zZyxOVUxMKTsKKwl9CisgICAgICAgIG1vdmUoQ1dfSU5ULCAwKTsK KyAgICAgICAgaWYgKCF4ZnJpbnQpIHsKKyAgICAgICAgICAgIHByaW50dygiKFRyYW5zZmVyIGlu dGVycnVwdGlvbiBpcyBkaXNhYmxlZCkiKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBDS19O RUVEX1NJRworICAgICAgICAgICAgcHJpbnR3KAorIjwlcz5YIHRvIGNhbmNlbCBmaWxlLCA8JXM+ WiB0byBjYW5jZWwgZ3JvdXAsIDwlcz48Q1I+IHRvIHJlc2VuZCBsYXN0IHBhY2tldCIsCisgICAg ICAgICAgICAgICAgICAgZGJjaHIoZXNjYXBlKSwgZGJjaHIoZXNjYXBlKSwgZGJjaHIoZXNjYXBl KQorICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBtb3ZlKENXX0lOVCArIDEsIDAp OworICAgICAgICAgICAgcHJpbnR3KAorIjwlcz5FIHRvIHNlbmQgRXJyb3IgcGFja2V0LCBeQyB0 byBxdWl0IGltbWVkaWF0ZWx5LCA8JXM+TCB0byByZWZyZXNoIHNjcmVlbi4iLAorICAgICAgICAg ICAgICAgICAgIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSkKKyAgICAgICAgICAgICAgICAg ICApOworI2Vsc2UgLyogIUNLX05FRURfU0lHICovCisgICAgICAgICAgICBtb3ZlKENXX0lOVCwg MCk7CisjaWZkZWYgT1MyCisgICAgICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgewor ICAgICAgICAgICAgICAgIHByaW50dygKKyJYIHRvIGNhbmNlbCBmaWxlLCBaIHRvIGNhbmNlbCBn cm91cCwgPEVudGVyPiB0byByZXNlbmQgbGFzdCBwYWNrZXQsIgorICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgfQorI2Vsc2UgLyogIU9TMiAqLworI2lmZGVmIFZNUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluIFZNUyBhdm9pZCBib3R0b20gbGluZSAqLwor ICAgICAgICAgICAgcHJpbnR3KAorIlg6IENhbmNlbCB0aGlzIGZpbGU7IEU6IENhbmNlbCB0cmFu c2ZlcjsgXkM6IFF1aXQgbm93OyBeVzogUmVmcmVzaCBzY3JlZW4uIgorICAgICAgICAgICAgICAg ICAgICk7CisjZWxzZQorICAgICAgICAgICAgcHJpbnR3KAorIlggdG8gY2FuY2VsIGZpbGUsIFog dG8gY2FuY2VsIGdyb3VwLCA8Q1I+IHRvIHJlc2VuZCBsYXN0IHBhY2tldCwiCisgICAgICAgICAg ICAgICAgICAgKTsKKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRl ZiBWTVMKKyAgICAgICAgICAgIG1vdmUoQ1dfSU5UICsgMSwgMCk7CisgICAgICAgICAgICBpZiAo cHJvdG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAgICAgICAgIHByaW50dygKKyJFIHRvIHNl bmQgRXJyb3IgcGFja2V0LCBeQyB0byBxdWl0IGltbWVkaWF0ZWx5LCBeTCB0byByZWZyZXNoIHNj cmVlbi4iCisgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIHByaW50dygiXkMgdG8gY2FuY2VsIGZpbGUgdHJhbnNmZXIuIik7Cisg ICAgICAgICAgICB9CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8K KyAgICAgICAgfQorICAgICAgICByZWZyZXNoKCk7CisgICAgICAgIGNlbmR3ID0gMDsKKyAgICB9 CisgICAgZGVidWcoRjEwMSwiU0NSRUVOQyBzd2l0Y2giLCIiLGYpOworICAgIGRlYnVnKEYwMDAs IlNDUkVFTkMgYyIsIiIsYyk7CisgICAgZGVidWcoRjEwMSwiU0NSRUVOQyBuIiwiIixuKTsKKwor ICAgIGxlbiA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBhcmd1 bWVudCBzdHJpbmcgKi8KKyAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAgICAgICAgICAgICAv KiBIYW5kbGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KKyAgICAgIGNhc2UgU0NSX0ZOOiAgICAgICAg ICAgICAgICAgICAgICAvKiBGaWxlbmFtZSAqLworICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsg ICAgICAgICAgICAgIC8qIFJlc2V0IHBlcmNlbnRzICovCisjaWZkZWYgR0ZUSU1FUgorICAgICAg ICBndHYgPSAoQ0tGTE9BVCkgLTEuMDsKKyAgICAgICAgLyogb2xkZ3R2ID0gKENLRkxPQVQpIC0x LjA7ICovCisjZWxzZQorICAgICAgICBndHYgPSAtMUw7CisgICAgICAgIC8qIG9sZGd0diA9IC0x TDsgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgIG9sZHdpbiA9IC0xOworICAgICAg ICBmc2l6ID0gKENLX09GRl9UKS0xOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91cyBmaWxlIHNpemUg Ki8KKyAgICAgICAgbW92ZShDV19QQ0QsMjIpOyAgICAgICAgICAgICAgICAvKiBFcmFzZSBwZXJj ZW50IGRvbmUgZnJvbSBsYXN0IHRpbWUgKi8KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQ0QsIChs b25nKSAwICk7CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX0ZGQywgKGxvbmcpIDAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJ ICovCisgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIG1vdmUoQ1dfU0laLDIyKTsgICAgICAg ICAgICAgICAgLyogRXJhc2UgZmlsZSBzaXplIGZyb20gbGFzdCB0aW1lICovCisjaWZkZWYgS1VJ CisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfU0laLCAobG9uZykgMCApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAv KiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgbW92ZShDV19FUlIsMjIpOyAg ICAgICAgICAgICAgICAvKiBBbmQgbGFzdCBlcnJvciBtZXNzYWdlICovCisjaWZkZWYgS1VJCisj aWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfRVJSLCAobG9uZykgIiIgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyog S1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIFNUUkVB TUlORworICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSyAmJiBzdHJlYW1vaykgeworICAg ICAgICAgICAgbW92ZShDV19CQVIsIDEpOworI2lmZGVmIFhZWl9JTlRFUk5BTAorICAgICAgICAg ICAgcHJpbnR3KCIgICBLZXJtaXQgU1RSRUFNSU5HOiIpOworI2Vsc2UKKyAgICAgICAgICAgIHBy aW50dygiICAgICAgICAgIFNUUkVBTUlORzoiKTsKKyNlbmRpZiAvKiBYWVpfSU5URVJOQUwgKi8K KyAgICAgICAgfQorI2VuZGlmIC8qIFNUUkVBTUlORyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8K KworICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgewkJLyogSWYgd2UncmUgc2VuZGluZy4uLiAq LworI2lmZGVmIE5FV0ZUUAorCSAgICBpZiAod2hhdCAmIFdfRlRQKSB7CQkvKiBGVFAgKi8KKyAg ICAgICAgICAgICAgICBtb3ZlKENXX05BTSwxMCk7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIg ICBGVFAgUFVUOiIpOworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNpZmRlZiBD S19SRVNFTkQKKyAgICAgICAgICAgIHN3aXRjaCAoc2VuZG1vZGUpIHsJCS8qIEtlcm1pdCAqLwor ICAgICAgICAgICAgICBjYXNlIFNNX1JFU0VORDoKKyAgICAgICAgICAgICAgICBtb3ZlKENXX05B TSwxMCk7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIgUkVTRU5ESU5HOiIpOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1v dmUoQ1dfTkFNLDEwKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiAgIFNFTkRJTkc6Iik7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAg bW92ZShDV19OQU0sMTApOworICAgICAgICAgICAgcHJpbnR3KCIgICBTRU5ESU5HOiIpOworI2Vu ZGlmIC8qIENLX1JFU0VORCAqLworCisgICAgICAgIH0gZWxzZSBpZiAod2hhdCAmIFdfUkVDVikg ewkvKiBJZiB3ZSdyZSByZWNlaXZpbmcuLi4gKi8KKyNpZmRlZiBORVdGVFAKKwkgICAgaWYgKHdo YXQgJiBXX0ZUUCkgewkJLyogRlRQICovCisgICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTAp OworICAgICAgICAgICAgICAgIHByaW50dygiICAgRlRQIEdFVDoiKTsKKwkgICAgfSBlbHNlIHsK KyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJbW92ZShDV19OQU0sMTApOworCQlwcmludHcoIiBSRUNF SVZJTkc6Iik7CisjaWZkZWYgTkVXRlRQCisJICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh3aGF0 ID09IChXX0ZUUHxXX0ZUX0RFTEUpKSB7CisJCW1vdmUoQ1dfTkFNLDEwKTsKKwkJcHJpbnR3KCJG VFAgREVMRVRFOiIpOworI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgICAgICB9IGVsc2UgeyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGRvbid0IGtub3cuLi4gKi8KKyAgICAgICAgICAg IG1vdmUoQ1dfTkFNLDEwKTsgICAgICAgICAgICAvKiAoc2hvdWxkIG5ldmVyIHNlZSB0aGlzKSAq LworICAgICAgICAgICAgcHJpbnR3KCIgRmlsZSBOYW1lOiIpOworICAgICAgICB9CisgICAgICAg IG1vdmUoQ1dfTkFNLDIyKTsgICAgICAgICAgICAgICAgLyogRGlzcGxheSB0aGUgZmlsZW5hbWUg Ki8KKyAgICAgICAgaWYgKGxlbiA+IDU3KSB7CisgICAgICAgICAgICBwcmludHcoIiUuNTVzLi4i LHMpOworICAgICAgICAgICAgbGVuID0gNTc7CisgICAgICAgIH0gZWxzZSBwcmludHcoIiVzIixz KTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1 RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICBxID0gbGVuOyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFJlbWVtYmVyIG5hbWUgbGVuZ3RoIGZvciBsYXRlciAqLworICAgICAgICBjbHJ0 b2VvbCgpOworICAgICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3Bs YXkgZmlsZSB0eXBlIChjYW4gY2hhbmdlKSAqLworICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYg T1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAg ICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0FOOiAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlIGFzLW5hbWUgKi8KKyAgICAgICAgaWYgKHEgKyBsZW4gKyA0IDwgNTgpIHsgICAgICAgICAv KiBXaWxsIGZpdCAqLworICAgICAgICAgICAgbW92ZShDV19OQU0sIDIyICsgcSk7CisgICAgICAg ICAgICBwcmludHcoIiA9PiAlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwg KGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg IH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVG9vIGxvbmcgKi8KKyAgICAgICAg ICAgIG1vdmUoQ1dfTkFNLCAyMik7ICAgICAgICAgICAvKiBPdmVyd3JpdGUgcHJldmlvdXMgbmFt ZSAqLworICAgICAgICAgICAgcSA9IDA7CisgICAgICAgICAgICBpZiAobGVuICsgNCA+IDU3KSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLworICAgICAgICAgICAg ICAgIHByaW50dygiID0+ICUuNTFzLi4iLHMpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdn MTUgKi8KKyAgICAgICAgICAgICAgICBsZW4gPSA1MzsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB3ZzE1ICovCisgICAgICAgICAgICB9IGVsc2UgcHJpbnR3KCIgPT4g JXMiLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLworI2lmZGVmIEtVSQor I2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRp ZiAvKiBLVUkgKi8KKyAgICAgICAgfQorICAgICAgICBxICs9IGxlbiArIDQ7ICAgICAgICAgICAg ICAgICAgIC8qIFJlbWVtYmVyIGhvcml6b250YWwgcG9zaXRpb24gKi8KKyAgICAgICAgY2xydG9l b2woKTsKKyAgICAgICAgcmVmcmVzaCgpOworI2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9k ZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNl IFNDUl9GUzogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBzaXplICovCisgICAgICAgIGZz aXogPSBuOworICAgICAgICBtb3ZlKENXX1NJWiwyMik7CisgICAgICAgIGlmIChmc2l6ID4gKENL X09GRl9UKS0xKSB7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIG4gKTsK KyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBwcmludHco IiVzIixja2ZzdG9hKG4pKTsKKyAgICAgICAgfQorCWlmIChmc2l6ID09IC0yTCkgeworCSAgICBw cmludHcoIlBPU1NJQkxZIEVYQ0VFRFMgTE9DQUwgRklMRSBTSVpFIExJTUlUIik7CisJfQorICAg ICAgICBjbHJ0b2VvbCgpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgbW92ZShDV19QQ0QsIDgp OworICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCktMSkgewkvKiBQdXQgdXAgcGVyY2VudCBs YWJlbCAqLworICAgICAgICAgICAgcGN0bGJsID0gMTsKKwkgICAgY2xydG9lb2woKTsKKyAgICAg ICAgICAgIHByaW50dygiUGVyY2VudCBEb25lOiIpOworICAgICAgICB9CisjZWxzZQorCW1vdmUo Q1dfUENELCA4KTsKKwljbHJ0b2VvbCgpOworICAgICAgICBpZiAoZnNpeiA+IChDS19PRkZfVCkt MSkgewkvKiBQdXQgdXAgcGVyY2VudCBsYWJlbCAqLworICAgICAgICAgICAgcGN0bGJsID0gMTsK KyAgICAgICAgICAgIHByaW50dygiUGVyY2VudCBEb25lOiIpOworICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgcGN0bGJsID0gMDsKKyAgICAgICAgICAgIHByaW50dygiQnl0ZXMgU28gRmFy OiIpOworCX0KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIGNscnRvZW9sKCk7CisgICAg ICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0eXBlICovCisgICAg ICAgIHJlZnJlc2goKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7Cisj ZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUFQ6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFBhY2tldCB0eXBlIG9yIHBzZXVkb3R5cGUgKi8KKyAgICAg ICAgaWYgKHNwYWNrZXRzIDwgNSkgeworICAgICAgICAgICAgZXh0ZXJuIGludCBzeXNpbmRleDsK KyAgICAgICAgICAgIGV4dGVybiBzdHJ1Y3Qgc3lzZGF0YSBzeXNpZGxpc3RbXTsKKyAgICAgICAg ICAgIC8qIFRoaW5ncyB0aGF0IHdvbid0IGNoYW5nZSBhZnRlciB0aGUgNHRoIHBhY2tldCAqLwor ICAgICAgICAgICAgbW92ZShDV19QQVIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCIlcyIscGFy bmFtKChjaGFyKXBhcml0eSkpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgQ1dfUEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IHBhcm5hbSgoY2hhcilwYXJpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vu ZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7 CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgbW92ZShDV19QQiwgMjIpOyAgICAgICAgICAg IC8qIEJsb2NrIGNoZWNrIG9uIHRoaXMgcGFja2V0ICovCisgICAgICAgICAgICBpZiAoYmN0dSA9 PSA0KQorICAgICAgICAgICAgICBwcmludHcoIkIiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgcHJpbnR3KCIlZCIsYmN0dSk7CisgICAgICAgICAgICBjbHJ0b2VvbCgpOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGlmICgKKyNpZmRlZiBORVdGVFAKKwkJKGZ0 cCAmJiAoc3BhY2tldHMgPT0gMSB8fCBycGFja2V0cyA9PSAxKSkgfHwKKyNlbmRpZiAvKiBORVdG VFAgKi8KKwkJc3BhY2tldHMgPT0gNAorCQkpIHsKKyAgICAgICAgICAgICAgICBtb3ZlKENXX0xJ Tiw4KTsKKyAgICAgICAgICAgICAgICBpZiAoCisjaWZkZWYgTkVXRlRQCisJCSAgICBmdHAgfHwK KyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJICAgICgocHJvdG9jb2wgPT0gUFJPVE9fSykgJiYgKHN5 c2luZGV4ID4gLTEpKQorCQkgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXQpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOworICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnR3KCJOZXR3b3JrIEhvc3Q6ICVzICglcykiLAorI2lmZGVmIE5FV0ZUUAor CQkJICAgICAgIGZ0cCA/IChmdHBfaG9zdCA/IGZ0cF9ob3N0IDogIiIpIDoKKyNlbmRpZiAvKiBO RVdGVFAgKi8KKwkJCSAgICAgICB0dG5hbWUsCisjaWZkZWYgTkVXRlRQCisJCQkgICAgICAgZnRw ID8gZnRwX3NydnR5cCA6CisjZW5kaWYgLyogTkVXRlRQICovCisJCQkgICAgICAgc3lzaWRsaXN0 W3N5c2luZGV4XS5zaWRfbmFtZQorCQkJICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKENXX0xJTiwwKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBEZXZpY2U6ICVzIChyZW1vdGUg aG9zdCBpcyAlcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dG5hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorI2lmZGVmIENLX1RJTUVSUworICAgICAgICBpZiAoLyogcnR0Zmxn ICYmICovIHByb3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAgIGxvbmcgeHg7CisgICAg ICAgICAgICBpZiAoCisjaWZkZWYgU1RSRUFNSU5HCisgICAgICAgICAgICAgICAgc3RyZWFtaW5n ICYmIG9sZHdpbiAhPSAtMgorI2Vsc2UKKyAgICAgICAgICAgICAgICAwCisjZW5kaWYgLyogU1RS RUFNSU5HICovCisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgbW92ZShDV19U TU8sIDIyKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIjAwIC8gMDAiKTsKKyAgICAgICAgICAg ICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB4 eCA9IChydHRkZWxheSArIDUwMCkgLyAxMDAwOworICAgICAgICAgICAgICAgIGlmICh4eCAhPSBv bGRydHQgfHwgcmN2dGltbyAhPSBvbGR0aW0pIHsKKyAgICAgICAgICAgICAgICAgICAgbW92ZShD V19UTU8sIDIyKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnR3KCIlMDJsZCAvICUwMmQiLCB4 eCwgcmN2dGltbyk7CisgICAgICAgICAgICAgICAgICAgIG9sZHJ0dCA9IHh4OworICAgICAgICAg ICAgICAgICAgICBvbGR0aW0gPSByY3Z0aW1vOworICAgICAgICAgICAgICAgICAgICBjbHJ0b2Vv bCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlm IC8qIENLX1RJTUVSUyAqLworCisgICAgICAgIHggPSAod2hhdCAmIFdfUkVDVikgPyAgICAgICAg ICAvKiBQYWNrZXQgbGVuZ3RoICovCisgICAgICAgICAgcnBrdGwrKHByb3RvY29sPT1QUk9UT19L PzE6MCkgOgorICAgICAgICAgICAgc3BrdGw7CisgICAgICAgIGlmICh4ICE9IG9sZGxlbikgeyAg ICAgICAgICAgICAgLyogQnV0IG9ubHkgaWYgaXQgY2hhbmdlZC4gKi8KKyAgICAgICAgICAgIG1v dmUoQ1dfUEwsIDIyKTsKKyAgICAgICAgICAgIHByaW50dygiJWQiLHgpOworI2lmZGVmIEtVSQor I2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19QTCwgKGxvbmcpIHggKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYg LyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgb2xkbGVuID0g eDsKKyAgICAgICAgfQorICAgICAgICBtb3ZlKENXX1BDLCAyMik7ICAgICAgICAgICAgICAgIC8q IFBhY2tldCBjb3VudCAoYWx3YXlzKS4gKi8KKworICAgICAgICBwcmludHcoIiVkIiwgKHdoYXQg JiBXX1JFQ1YpID8gcnBhY2tldHMgOiBzcGFja2V0cyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df UEMsIChsb25nKSBzcGFja2V0cyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyAgICAgICAgY2xydG9lb2woKTsKKworICAgICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9f SyAmJiAhZnRwKSB7IC8qIFdpbmRvdyBzbG90cyAqLworICAgICAgICAgICAgY2hhciB3c1sxNl07 CisgICAgICAgICAgICBpbnQgZmxhZzsKKyAgICAgICAgICAgIGZsYWcgPSAwOworI2lmZGVmIFNU UkVBTUlORworICAgICAgICAgICAgaWYgKHN0cmVhbWluZykgeworICAgICAgICAgICAgICAgIGlm IChvbGR3aW4gIT0gLTIpIHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50Zih3cywiU1RSRUFN SU5HIik7CisgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgICAgICAg ICBvbGR3aW4gPSAtMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyNl bmRpZiAvKiBTVFJFQU1JTkcgKi8KKyAgICAgICAgICAgICAgaWYgKHdjdXIgIT0gb2xkd2luKSB7 CisgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCAiJWQgb2YgJWQiLCB3Y3VyIDwgMSA/IDEg OiB3Y3VyLCB3c2xvdG4pOworICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAg ICAgICAgICBvbGR3aW4gPSB3Y3VyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo ZmxhZykgeworICAgICAgICAgICAgICAgIG1vdmUoQ1dfV1MsIDIyKTsKKyAgICAgICAgICAgICAg ICBwcmludHcoIiVzIiwgd3MpOworICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYg S1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJ TEVfVFJBTlNGRVIsIChsb25nKSBDV19XUywgKGxvbmcpIHdzICk7CisjZW5kaWYgLyogSzk1RyAq LworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVy cm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAgICBpZiAoZXJyb3Jz ICE9IG9sZHRyeSkgeyAgICAgICAgIC8qIFJldHJ5IGNvdW50LCBpZiBjaGFuZ2VkICovCisgICAg ICAgICAgICBtb3ZlKENXX1BSLCAyMik7CisgICAgICAgICAgICBwcmludHcoIiVkIixlcnJvcnMp OworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSgg S1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycyApOworI2VuZGlm IC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7Cisg ICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7CisgICAgICAgIH0KKwkvKiBTZW5kZXIncyBwYWNr ZXQgdHlwZSAqLworICAgICAgICBpZiAoIWZ0cCAmJiAoYyAhPSBvbGR0eXAgJiYgYyAhPSAnWScg JiYgYyAhPSAnTicpKSB7CisgICAgICAgICAgICBjaGFyIHR5cGVbMl07CisgICAgICAgICAgICBz cHJpbnRmKHR5cGUsICIlYyIsYyk7CisgICAgICAgICAgICBtb3ZlKENXX1BULDIyKTsKKyAgICAg ICAgICAgIHByaW50dygiJXMiLCB0eXBlKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFQs IChsb25nKSB0eXBlICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIG9sZHR5cCA9IGM7CisgICAgICAgIH0K KyAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBOb3cgaGFuZGxlIHNw ZWNpZmljIHBhY2tldCB0eXBlcyAqLworICAgICAgICAgIGNhc2UgJ1MnOiAgICAgICAgICAgICAg ICAgICAgIC8qIEJlZ2lubmluZyBvZiB0cmFuc2ZlciAqLworICAgICAgICAgICAgZmNudCA9IGZi eXQgPSAwTDsgICAgICAgICAgIC8qIENsZWFyIGNvdW50ZXJzICovCisjaWZkZWYgR0ZUSU1FUgor ICAgICAgICAgICAgZ3R2ID0gLTEuMDsKKyNlbHNlIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAg IGd0diA9IC0xTDsgICAgICAgICAgICAgICAgICAvKiBBbmQgb2xkL25ldyB0aGluZ3MuLi4gKi8K KyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsKKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnWic6ICAgICAgICAgICAgICAgICAg ICAgLyogb3IgRU9GICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9QVCBa IHBrdG51bSIsIiIsbik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9QVCBa IG9sZHBjdCIsIiIsb2xkcGN0KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NS X1BUIFogcGN0IiwiIixwY3QpOworICAgICAgICAgIGNhc2UgJ0QnOiAgICAgICAgICAgICAgICAg ICAgIC8qIERhdGEgcGFja2V0ICovCisgICAgICAgICAgICBpZiAoZnNpeiA+IDBMKSB7ICAgICAg ICAgICAgLyogU2hvdyBwZXJjZW50IGRvbmUgaWYga25vd24gKi8KKyAgICAgICAgICAgICAgICBv bGRwY3QgPSBwY3Q7ICAgICAgICAgICAvKiBSZW1lbWJlciBwcmV2aW91cyBwZXJjZW50ICovCisg ICAgICAgICAgICAgICAgaG93ZmFyID0gZmZjOworI2lmZGVmIENLX1JFU0VORAorICAgICAgICAg ICAgICAgIGlmICh3aGF0ICYgV19TRU5EKQkvKiBBY2NvdW50IGZvciBQU0VORCBvciBSRVNFTkQg Ki8KKyAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7CisgICAgICAgICAgICAg ICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikKKyAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSBy c19sZW47CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAgICAgICAgICAgICAgLyogUGVyY2Vu dCBkb25lLCB0byBiZSBkaXNwbGF5ZWQuLi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAn WicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXNjYXJkICYmICFjeHNlZW4gJiYgIWN6 c2VlbikgcGN0ID0gMTAwTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg ICAgIHBjdCA9IChmc2l6ID4gOTlMKSA/IChob3dmYXIgLyAoZnNpeiAvIDEwMEwpKSA6IDBMOwor ICAgICAgICAgICAgICAgIGlmIChwY3QgPiAxMDBMIHx8ICAgICAgIC8qIEFsbG93IGZvciBleHBh bnNpb24gYW5kICovCisgICAgICAgICAgICAgICAgICAgKG9sZHBjdCA9PSA5OUwgJiYgcGN0IDwg MEwpKSAvKiBvdGhlciBib3VuZGFyeSBjb25kaXRpb25zICovCisgICAgICAgICAgICAgICAgICBw Y3QgPSAxMDBMOworICAgICAgICAgICAgICAgIGlmIChwY3QgIT0gb2xkcGN0KSAgICAgIC8qIE9u bHkgZG8gdGhpcyAxMDAgdGltZXMgcGVyIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgIHVwZHBj dChvbGRwY3QsIHBjdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1v dmUoQ1dfUENELDIyKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVzIiwgY2tmc3RvYShmZmMp KTsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBo b3dmYXIpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAg IGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBv bGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisgICAgICAgICAg ICBicmVhazsKKworICAgICAgICAgIGNhc2UgJyUnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRp bWVvdXRzLCByZXRyYW5zbWlzc2lvbnMgKi8KKyAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50 KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xk X3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisKKyAgICAgICAgICAgIGVycm9ycyA9IHJldHJh bnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0 cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFuZ2VkICovCisgICAgICAgICAgICAgICAg bW92ZShDV19QUiwgMjIpOworICAgICAgICAgICAgICAgIHByaW50dygiJWQiLGVycm9ycyk7Cisg ICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8q IEtVSSAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJv cnM7CisgICAgICAgICAgICAgICAgaWYgKHMpIGlmICgqcykgeworICAgICAgICAgICAgICAgICAg ICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAgICAgICAgICAgICAgIHByaW50dygiJXMiLHMpOwor ICAgICAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVH CisgICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfRVJSLCAobG9uZykgcyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl ICdFJzogICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKi8KKyNpZmRlZiBDT01N RU5UCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7ICAgICAgICAgICAgLyogUHJpbnQgaXRz IGRhdGEgZmllbGQgKi8KKyAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgICAgIHBy aW50dygiJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykg cyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGNscnRvZW9sKCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAg ICAgZmNudCA9IGZieXQgPSAwTDsgICAgICAgICAgIC8qIFNvIG5vIGJ5dGVzIGZvciB0aGlzIGZp bGUgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ1EnOiAgICAgICAgICAg ICAgICAgICAgIC8qIENydW5jaGVkIHBhY2tldCAqLworICAgICAgICAgICAgY3BzID0gc2hvY3Bz KChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0 bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJS LDIyKTsKKyAgICAgICAgICAgIHByaW50dygiRGFtYWdlZCBQYWNrZXQiKTsKKyNpZmRlZiBLVUkK KyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpICJEYW1hZ2VkIFBhY2tldCIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2Ug J3EnOiAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtQyBvciBjb25uZWN0aW9uIGxvc3QgKi8K KyAgICAgICAgICAgIG1vdmUoQ1dfTVNHLDIyKTsKKwkgICAgY2xydG9lb2woKTsKKyAgICAgICAg ICAgIGlmICghcykgcyA9ICIiOworICAgICAgICAgICAgcHJpbnR3KCIlcyIsICpzID8gcyA6ICJV c2VyIGludGVycnVwdGlvbiBvciBjb25uZWN0aW9uIGxvc3QiKTsKKyNpZmRlZiBLVUkKKyNpZm5k ZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5k aWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSAnVCc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCAqLworICAgICAg ICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAgICAgICAgICAg IC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsgKi8KKyAgICAg ICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygiVGltZW91dCAlZCBz ZWMiLHJjdnRpbW8pOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRpbWVv dXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNl bmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICBlcnJv cnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAgICAgICAgIGlmIChlcnJv cnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLworICAgICAg ICAgICAgICAgIG1vdmUoQ1dfUFIsIDIyKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVkIixl cnJvcnMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJyb3JzCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAg ICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiAgICAgICAg ICAgICAgICAgICAgICAvKiBPdGhlcnMsIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2 ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAg ICAgY2FzZSBTQ1JfU1Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgc3Rh dHVzICovCisgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1NUIGMiLCIiLGMpOworICAg ICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9TVCBzdWNjZXNzIiwiIixzdWNjZXNzKTsKKyAg ICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfU1QgY3hzZWVuIiwiIixjeHNlZW4pOworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgbW92ZShDV19QQ0QsMjIpOyAgICAgICAgICAgICAgICAvKiBV cGRhdGUgcGVyY2VudCBkb25lICovCisgICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAg ICAgICAgLyogT0ssIHByaW50IDEwMCAlICovCisgICAgICAgICAgICBpZiAocGN0bGJsKQorICAg ICAgICAgICAgICB1cGRwY3Qob2xkcGN0LDEwMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgIHByaW50dygiJXMiLCBja2ZzdG9hKGZmYykpOworI2lmZGVmIEtVSQorI2lmbmRlZiBL OTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX0ZGQywgKGxvbmcpIGZmYyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAq LworICAgICAgICAgICAgcGN0ID0gMTAwOworICAgICAgICAgICAgb2xkcGN0ID0gMDsKKyAgICAg ICAgfSBlbHNlIGlmIChmc2l6ID4gMEwpICAgICAgICAgICAvKiBOb3QgT0ssIHVwZGF0ZSBmaW5h bCBwZXJjZW50ICovCisvKgorICBUaGUgZWxzZSBwYXJ0IHdyaXRlcyBhbGwgb3ZlciB0aGUgc2Ny ZWVuIC0tIGhvd2ZhciBhbmQvb3IgZnNpeiBoYXZlCisgIGJlZW4gcmVzZXQgYXMgYSBjb25zZXF1 ZW5jZSBvZiB0aGUgbm90LU9LbmVzcyBvZiB0aGUgdHJhbnNmZXIuCisqLworICAgICAgICAgIGlm IChwY3RsYmwpCisgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCAoaG93ZmFyICogMTAwTCkgLyBm c2l6KTsKKyAgICAgICAgY2xydG9lb2woKTsKKyNlbHNlCisgICAgICAgIGlmIChjID09IFNUX09L KSB7ICAgICAgICAgICAgICAgLyogT0ssIHByaW50IDEwMCAlICovCisgICAgICAgICAgICBtb3Zl KENXX1BDRCwyMik7ICAgICAgICAgICAgLyogVXBkYXRlIHBlcmNlbnQgZG9uZSAqLworICAgICAg ICAgICAgaWYgKHBjdGxibCkgeworCQlpZiAob2xkcGN0ID09IDApCS8qIFN3aXRjaGluZyBmcm9t ICJieXRlcyBzbyBmYXIiICovCisJCSAgY2xydG9lb2woKTsJCS8qIHRvICJwZXJjZW50IGRvbmUi Li4uICovCisJCXVwZHBjdChvbGRwY3QsMTAwKTsKKwkgICAgfSBlbHNlCisgICAgICAgICAgICAg IHByaW50dygiJXMiLCBja2ZzdG9hKGZmYykpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZG QywgKGxvbmcpIGZmYyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IDEwMDsKKyAgICAgICAgICAgIG9sZHBjdCA9 IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKworI2lmZGVmIENPTU1FTlQKKy8qIE5vLCBsZWF2 ZSBpdCB0aGVyZSBzbyB0aGV5IGNhbiByZWFkIGl0ICovCisgICAgICAgIG1vdmUoQ1dfTVNHLDIy KTsgICAgICAgICAgICAgICAgLyogUmVtb3ZlIGFueSBwcmV2aW91cyBtZXNzYWdlICovCisjaWZk ZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RS QU5TRkVSLCAobG9uZykgQ1dfTVNHLCAobG9uZykgIiIgKTsKKyNlbmRpZiAvKiBLOTVHICovCisj ZW5kaWYgLyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyAgICAgICAgbW92ZShDV19UUiwgMjIpOworI2lmZGVmIEtVSQorI2lm bmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX1RSLCAobG9uZykgIiIgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJ ICovCisgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsKKworICAgICAgICBzd2l0Y2ggKGMp IHsgICAgICAgICAgICAgICAgICAgIC8qIFByaW50IG5ldyBzdGF0dXMgbWVzc2FnZSAqLworICAg ICAgICAgIGNhc2UgU1RfT0s6ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIE9LICovCisg ICAgICAgICAgICBmY250Kys7ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBmaWxl ICovCisJICAgIGlmICh3aGF0ID09IChXX0ZUUHxXX0ZUX0RFTEUpKSB7CisJCW1vdmUoQ1dfTVNH LDIyKTsKKwkJY2xydG9lb2woKTsKKwkJcHJpbnR3KCJEZWxldGUgT0siKTsKKwkgICAgfSBlbHNl IHsKKwkJZmJ5dCArPSBmZmM7CisJCW1vdmUoQ1dfTVNHLDIyKTsKKwkJY2xydG9lb2woKTsKKwkJ cHJpbnR3KCJUcmFuc2ZlciBPSyIpOworCSAgICB9CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSAiVHJhbnNmZXIgT0siCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor I2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9s KCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1Rf RElTQzogICAgICAgICAgICAgICAgIC8qIERpc2NhcmRlZCAqLworICAgICAgICAgICAgbW92ZShD V19FUlIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCJGaWxlIGRpc2NhcmRlZCIpOworI2lmZGVm IEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9U UkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkZpbGUgZGlzY2FyZGVkIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAg ICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0lOVDogICAgICAgICAgICAgICAgICAv KiBJbnRlcnJ1cHRlZCAqLworICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAg ICAgcHJpbnR3KCJUcmFuc2ZlciBpbnRlcnJ1cHRlZCIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBL OTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgIlRyYW5zZmVyIGludGVycnVwdGVkIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYg Q09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICByZXR1 cm47CisKKyAgICAgICAgICBjYXNlIFNUX1NLSVA6ICAgICAgICAgICAgICAgICAvKiBTa2lwcGVk ICovCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisJICAgIGlmIChuID4gMCAmJiBuIDwg bnNrcmVhc29uKQorCSAgICAgIHByaW50dygiRmlsZSBza2lwcGVkICglcykiLHNrcmVhc29uW25d KTsKKwkgICAgZWxzZQorCSAgICAgIHByaW50dygiRmlsZSBza2lwcGVkIik7CisjaWZkZWYgS1VJ CisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSAiRmlsZSBza2lwcGVkIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICBy ZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0VSUjogICAgICAgICAgICAgICAgICAvKiBFcnJv ciBtZXNzYWdlICovCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAgICAgICBp ZiAoIXMpIHMgPSAoY2hhciAqKWVwa3Rtc2c7CisgICAgICAgICAgICBwcmludHcoIiVzIixzKTsK KyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5 NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3Qg PSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9s KCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1Rf UkVGVTogICAgICAgICAgICAgICAgIC8qIFJlZnVzZWQgKi8KKyAgICAgICAgICAgIG1vdmUoQ1df RVJSLDIyKTsKKyAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgICAgIGNoYXIgZXJy YnVmWzY0XSA7CisgICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiUmVmdXNlZCwgJXMi LCBzICkgOworICAgICAgICAgICAgICAgIHByaW50dygiJXMiLCBlcnJidWYpOworI2lmZGVmIEtV SQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsKGxvbmcpIENXX0VSUiwobG9uZykgZXJyYnVmKTsKKyNlbmRpZiAvKiBLOTVHICov CisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IHByaW50dygiUmVmdXNlZCIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAg ICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25n KSJSZWZ1c2VkIik7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAg ICAgICAgfQorI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7Cisj ZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOwor ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9JTkM6CisgICAgICAgICAg ICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAgICAgICBwcmludHcoIkluY29tcGxldGUiKTsKKyNp ZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJ TEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJJbmNvbXBsZXRlIik7CisjZW5kaWYgLyog Szk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBj dCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9l b2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBT VF9NU0c6CisgICAgICAgICAgICBtb3ZlKENXX01TRywyMik7CisgICAgICAgICAgICBwcmludHco IiVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfTVNHLChsb25nKXMpOworI2VuZGlmIC8q IEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJl c2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCisgICAgICAgICAgICBtb3ZlKENXX0VSUiwyMik7 CisgICAgICAgICAgICBwcmludHcoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVz ICoqKiIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBzdGF0dXMgKioqIiAp OworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGNscnRv ZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgIGNhc2UgU0NSX1RD OiB7ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBjb21wbGV0ZSAqLworICAgICAg ICAgIGNoYXIgbXNnYnVmWzEyOF07CisgICAgICAgICAgbW92ZShDV19DUCwyMik7ICAgICAgICAg ICAgICAgLyogT3ZlcmFsbCB0cmFuc2ZlciByYXRlICovCisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19DUCwgdGZjcHMpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgICBwcmludHcoIiVzIiwgY2tmc3RvYSh0ZmNwcykpOworICAgICAgICAgIGNscnRvZW9sKCk7 CisgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgbW92ZShDV19NU0csMjIp OyAgICAgICAgICAvKiBQcmludCBzdGF0aXN0aWNzIGluIG1lc3NhZ2UgbGluZSAqLworICAgICAg ICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoc3VjY2Vzcykg eworICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAi U1VDQ0VTUy4gIEZpbGVzOiAlbGQsIEJ5dGVzOiAlcywgJWxkIENQUyIsCisgICAgICAgICAgICAg ICAgICAgICAgZmlsY250IC0gZmlscmVqLAorICAgICAgICAgICAgICAgICAgICAgIGNrZnN0b2Eo ZmJ5dCksCisgICAgICAgICAgICAgICAgICAgICAgdGZjcHMKKyAgICAgICAgICAgICAgICAgICAg ICApOworICAgICAgICAgICAgICBwcmludHcoIiVzIiwgbXNnYnVmKTsKKyNpZmRlZiBLVUkKKyNp Zm5kZWYgSzk1RworICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG1zZ2J1ZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg ICAgICAgY2xydG9lb2woKTsKKworICAgICAgICAgIH0KKyAgICAgICAgICBtb3ZlKENXX1RSLCAx KTsKKyAgICAgICAgICBwcmludHcoIiAgICAgICBFbGFwc2VkIFRpbWU6ICVzIixoaG1tc3MoKGxv bmcpCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoZnB0c2VjcyArIDAuNSkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNzCisjZW5kaWYgLyogR0ZUSU1FUiAq LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7 CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlf RklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfVFIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGhobW1zcygobG9uZykKKyNpZmRlZiBHRlRJ TUVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2VjcyArIDAu NSkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2Vjcwor I2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICBj bHJ0b2VvbCgpOworICAgICAgICAgIG1vdmUoMjMsMCk7IGNscnRvZW9sKCk7ICAgICAgIC8qIENs ZWFyIGluc3RydWN0aW9ucyBsaW5lcyAqLworICAgICAgICAgIG1vdmUoMjIsMCk7IGNscnRvZW9s KCk7ICAgICAgIC8qIHRvIG1ha2Ugcm9vbSBmb3IgcHJvbXB0LiAqLworICAgICAgICAgIHJlZnJl c2goKTsKKworI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICBvbGRndHYgPSAoQ0tGTE9BVCkgLTEu MDsKKyNlbHNlCisgICAgICAgICAgb2xkZ3R2ID0gLTFMOworI2VuZGlmIC8qIEdGVElNRVIgKi8K KworI2lmbmRlZiBWTVNDVVJTRQorCSAgZGVidWcoRjEwMCwic2NyZWVuYyBlbmR3aW4gQSIsIiIs MCk7CisgICAgICAgICAgZW5kd2luKCk7CisjaWZkZWYgQ09NTUVOVAorLyoKKyAgV2h5IGFuZCB3 aGVuIHdhcyB0aGlzIGNhbGwgdG8gY29ucmVzKCkgYWRkZWQ/ICBJdCBtYWtlcyBubyBzZW5zZSwK KyAgYW5kIGl0IGJyZWFrcyBlY2hvaW5nIG9uIFNvbGFyaXMgOC4KKyovCisjaWZkZWYgU09MQVJJ UworICAgICAgICAgIGNvbnJlcygpOworI2VuZGlmIC8qIFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBD T01NRU5UICovCisjZW5kaWYgLyogVk1TQ1VSU0UgKi8KKworI2lmZGVmIENPTU1FTlQKKyAgICAg ICAgICBwY3QgPSAxMDA7IG9sZHBjdCA9IDA7ICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4 dCB0aW1lLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICBvbGR0eXAgPSAwOyBv bGRydHQgPSAtMUw7IG9sZHRyeSA9IC0xOyBvbGRsZW4gPSAtMTsKKyAgICAgICAgICBvbGR0aW0g PSAtMTsKKyAgICAgICAgICBjZW5kdyA9IDE7CisgICAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAo QlBfTk9URSk7ICAgLyogQ2xvc2Ugd2luZG93LCB0aGVuIGJlZXAuICovCisjaWZkZWYgVU5JWAor ICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgICBm dF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgY2xvc2VkLiAqLworICAgICAg ICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGNhc2UgU0NSX0VNOiAgICAgICAgICAgICAgICAg ICAgICAvKiBFcnJvciBwYWNrZXQgKGZhdGFsKSAqLworICAgICAgICBtb3ZlIChDV19FUlIsMjIp OworICAgICAgICBwcmludHcoIkZBSUxVUkU6ICVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19FUlIsIChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLwor ICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9GQUlMKTsKKyNpZmRlZiBDT01NRU5UCisgICAg ICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBjbHJ0 b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFF1YW50aXR5IGVxdWFscyAqLworICAgICAgY2FzZSBTQ1JfVFU6ICAg ICAgICAgICAgICAgICAgICAgIC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KKyAgICAgIGNhc2UgU0NS X1ROOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBzdGFydCAqLwor ICAgICAgY2FzZSBTQ1JfVFo6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVk IGF0IGVuZCAqLworICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChp Z25vcmVkIGluIGZ1bGxzY3JlZW4gZGlzcGxheSkgKi8KKworICAgICAgY2FzZSBTQ1JfTVM6CQkJ LyogTWVzc2FnZSBmcm9tIEtlcm1pdCBwYXJ0bmVyICovCisgICAgICAgIG1vdmUoQ1dfTVNHLDIy KTsKKwlwcmludHcoIiVzIixzKTsKKyAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyByZXR1 cm47CisKKyAgICAgIGNhc2UgU0NSX1hEOiAgICAgICAgICAgICAgICAgICAgICAvKiBYLXBhY2tl dCBkYXRhICovCisgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisgICAgICAgIG1vdmUoQ1dfTkFN LDIyKTsKKyAgICAgICAgcHJpbnR3KCIlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFN LCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0NXOiAg ICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBXaW5kb3cgKi8KKyAgICAgICAgY2xydG9lb2wo KTsgbW92ZSgyMywwKTsgY2xydG9lb2woKTsgbW92ZSgyMiwwKTsgY2xydG9lb2woKTsKKyAgICAg ICAgcmVmcmVzaCgpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3Qg PSAwOyAgICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3IgbmV4dCB0aW1lLiAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKyAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAt MTsgb2xkbGVuID0gLTE7CisgICAgICAgIG9sZHRpbSA9IC0xOworCisjaWZuZGVmIFZNU0NVUlNF CisJZGVidWcoRjEwMCwic2NyZWVuYyBlbmR3aW4gQiIsIiIsMCk7CisgICAgICAgIGVuZHdpbigp OworI2VuZGlmIC8qIFZNU0NVUlNFICovCisgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAg ICAgICAgICAgLyogRmxhZyB0aGF0IHdpbmRvdyBpcyBjbG9zZWQuICovCisgICAgICAgIGNlbmR3 ID0gMTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9DRDogICAgICAgICAgICAgICAgICAgICAg LyogRGlzcGxheSBjdXJyZW50IGRpcmVjdG9yeSAqLworICAgICAgICBtb3ZlKENXX0RJUiwyMik7 CisgICAgICAgICBwcmludHcoIiVzIiwgcyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAg ICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAo bG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAg Y2xydG9lb2woKTsKKyAgICAgICAgcmVmcmVzaCgpOworI2lmZGVmIE9TMgorICAgICAgICBTYXZl Q21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAg ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KKyAgICAg ICAgbW92ZSAoQ1dfRVJSLDIyKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICBL dWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVu KCkgY2FsbGVkIHdpdGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIgorICAgICAgICAgICAgICAgICAg ICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgcHJp bnR3KCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIik7Cisg ICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOworICAgIH0KK30KKyNlbmRpZiAv KiBDS19DVVJTRVMgKi8KKworI2lmZGVmIEtVSQorI2lmZGVmIENLX0FOU0lDCit2b2lkCitzY3Jl ZW5nKGludCBmLCBjaGFyIGMsbG9uZyBuLGNoYXIgKnMpCisjZWxzZQorQ0tWT0lECitzY3JlZW5n KGYsYyxuLHMpCitpbnQgZjsgICAgICAgICAgLyogYXJndW1lbnQgZGVzY3JpcHRvciAqLworY2hh ciBjOyAgICAgICAgIC8qIGEgY2hhcmFjdGVyIG9yIHNtYWxsIGludGVnZXIgKi8KK2xvbmcgbjsg ICAgICAgICAvKiBhIGxvbmcgaW50ZWdlciAqLworY2hhciAqczsgICAgICAgIC8qIGEgc3RyaW5n ICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNjcmVlbmcoKSAqLyB7CisjaWZkZWYgQ0tf U1NMCisgICAgZXh0ZXJuIGludCB0bHNfYWN0aXZlX2ZsYWcsIHNzbF9hY3RpdmVfZmxhZzsKKyNl bmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBSTE9HQ09ERQorICAgIGV4dGVybiBpbnQgdHRucHJv dG87CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyAgICBzdGF0aWMgaW50IHEgPSAwOworICAgIHN0 YXRpYyBDS19PRkZfVCBmc2l6ID0gKENLX09GRl9UKS0xOyAvKiBDb3B5IG9mIGZpbGUgc2l6ZSAq LworICAgIHN0YXRpYyBsb25nIGZjbnQgPSAwTDsgICAgLyogTnVtYmVyIG9mIGZpbGVzIHRyYW5z ZmVycmVkICovCisgICAgc3RhdGljIGxvbmcgZmJ5dCA9IDBMOyAgICAvKiBUb3RhbCBmaWxlIGJ5 dGVzIG9mIGFsbCBmaWxlcyB0cmFuc2ZlcnJlZCAqLworICAgIHN0YXRpYyBDS19PRkZfVCBob3dm YXIgPSAoQ0tfT0ZGX1QpMDsgLyogSG93IG11Y2ggb2YgZmlsZSB4ZmVyJ2Qgc28gZmFyICovCisg ICAgc3RhdGljIGludCAgcGN0bGJsID0gMEw7ICAvKiBQZXJjZW50IGRvbmUgdnMgQnl0ZXMgc28g ZmFyICovCisgICAgbG9uZyBjcHMgPSAwTDsKKworICAgIGludCBuZXQgPSAwOworICAgIGludCB4 bmV0ID0gMDsKKyAgICBpbnQgZnRwID0gMDsKKyAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCisgICAgaW50IGVycm9ycyA9IDA7ICAg ICAgICAgICAgICAgICAgICAgLyogRXJyb3IgY291bnRlciAqLworICAgIGludCB4OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFdvcmtlciAqLworCisgICAgZGVidWcoRjEwMSwic2Ny ZWVuZyBjaW5pdCIsIiIsY2luaXQpOworICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgY2VuZHciLCIi LGNlbmR3KTsKKworICAgIGlmICghcykgcyA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIEFs d2F5cyBkbyB0aGlzLiAqLworCisgICAgZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyog RlRQIG9yIEtlcm1pdCAqLworICAgIG5ldCA9IG5ldHdvcmsgfHwgZnRwOworICAgIHhuZXQgPSBm dHAgPyAxIDogbmV0dHlwZTsJCS8qIE5FVF9UQ1BCID09IDEgKi8KKworICAgIGlmIChjaW5pdCA9 PSAwIHx8IGNlbmR3ID4gMCkgeyAgICAgIC8qIEhhbmRsZSBib3JkZXJsaW5lIGNhc2VzLi4uICov CisgICAgICAgIGlmIChmID09IFNDUl9DVykgeyAgICAgICAgICAgICAgLyogQ2xvc2Ugd2luZG93 LCBidXQgaXQncyBub3Qgb3BlbiAqLworICAgICAgICAgICAgZnRfd2luID0gMDsKKyAgICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhGMTExLCJzY3JlZW5nIEEiLHMs Zik7CisgICAgICAgIGlmIChmID09IFNDUl9FTSB8fAorICAgICAgICAgICAoZiA9PSBTQ1JfUFQg JiYgYyA9PSAnRScpKSB7IC8qIEZhdGFsIGVycm9yIGJlZm9yZSB3aW5kb3cgb3BlbiAqLworICAg ICAgICAgICAgY29ub2xsKCIiKTsgY29ub2MoJz8nKTsgY29ub2xsKHMpOyByZXR1cm47IC8qIFJl Z3VsYXIgZGlzcGxheSAqLworICAgICAgICB9CisgICAgfQorICAgIGlmIChjaW5pdCA9PSAwKSB7 ICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgY2FsbCBpbml0c2NyKCkgb25jZSAqLworCS8qIENo ZWNrIHRoZXNlIG5vdyAtLSBpZiB0aGV5IGFyZSBkZWZpbmVkIGJ1dCBub3QgbnVtZXJpYyAqLwor CS8qIHRoZXkgY2FuIGNyYXNoIGN1cnNlcyAqLworICAgICAgICBjZW5kdyA9IDE7ICAgICAgICAg ICAgICAgICAgICAgIC8qIE5ldyB3aW5kb3cgbmVlZHMgcmVwYWludGluZyAqLworICAgICAgICBk ZWJ1ZyhGMTAwLCJzY3JlZW5nIGNhbGxpbmcgaW5pdHNjciIsIiIsMCk7CisgICAgICAgIGluaXRz Y3IoKTsgICAgICAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBjdXJzZXMuICovCisgICAg ICAgIGRlYnVnKEYxMDAsInNjcmVlbmcgaW5pdHNjciBvayIsIiIsMCk7CisgICAgICAgIGNpbml0 Kys7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgY3Vyc2VzIHdhcyBpbml0aWFs aXplZC4gKi8KKyAgICB9CisgICAgZnRfd2luID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAg LyogV2luZG93IGlzIG9wZW4gKi8KKyAgICBpZiAocmVwYWludCkgeworI2lmZGVmIENLX1dSRUZS RVNICisvKgorICBUaGlzIHRvdGFsbHkgcmVwYWludHMgdGhlIHNjcmVlbiwganVzdCB3aGF0IHdl IHdhbnQsIGJ1dCB3ZSBjYW4gb25seQorICBkbyB0aGlzIHdpdGggcmVhbCBjdXJzZXMsIGFuZCB0 aGVuIG9ubHkgaWYgY2xlYXJvaygpIGFuZCB3cmVmcmVzaCgpIGFyZQorICBwcm92aWRlZCBpbiB0 aGUgY3Vyc2VzIGxpYnJhcnkuCisqLworICAgICAgICBSZXN0b3JlQ21kTW9kZSgpOworI2Vsc2Ug IC8qIE5vIENLX1dSRUZSRVNIICovCisvKgorICBLZXJtaXQncyBkby1pdC15b3Vyc2VsZiBtZXRo b2QsIHdvcmtzIHdpdGggYWxsIHR5cGVzIG9mIGZ1bGxzY3JlZW4KKyAgc3VwcG9ydCwgYnV0IGRv ZXMgbm90IHJlcGFpbnQgYWxsIHRoZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGVuYW1l CisgIGlzIGxvc3QsIGJlY2F1c2UgaXQgYXJyaXZlcyBhdCBhIGNlcnRhaW4gdGltZSBhbmQgbmV2 ZXIgY29tZXMgYWdhaW4sIGFuZAorICBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IHNhdmUgaXQg YW55d2hlcmUuICBNYWtpbmcgdGhpcyBtZXRob2Qgd29yayBmb3IKKyAgYWxsIGZpZWxkcyB3b3Vs ZCBiZSBhIHJhdGhlciBtYWpvciByZWNvZGluZyB0YXNrLCBkdXBsaWNhdGluZyB3aGF0IGN1cnNl cworICBhbHJlYWR5IGRvZXMsIGFuZCB3b3VsZCBhZGQgYSBsb3Qgb2YgY29tcGxleGl0eSBhbmQg c3RvcmFnZSBzcGFjZS4KKyovCisgICAgICAgIGNlbmR3ID0gMTsKKyNlbmRpZiAvKiBDS19XUkVG UkVTSCAqLworICAgICAgICByZXBhaW50ID0gMDsKKyAgICB9CisgICAgaWYgKGNlbmR3KSB7ICAg ICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCBwcmV2aW91c2x5ICov CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmcgc2V0dXAgb2siLCIiLDApOworICAgICAgICBL dWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19ESVIsIChsb25nKSB6 Z3RkaXIoKSApOworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19MSU4sCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgKAorI2lmZGVmIE5F V0ZUUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdHAgPyAoZnRwX2hvc3QgPyBm dHBfaG9zdCA6ICIodW5rbm93bikiKSA6CisjZW5kaWYgLyogTkVXRlRQICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHR0bmFtZSkgKTsKKworICAgICAgICBpZiAobmV0KSB7Cisj aWZkZWYgTkVUQ09OTgorCSAgICBpbnQgc2VjdXJlID0gMDsKKwkgICAgY2hhciAqIHhuYW1lOwor CSAgICBpZiAoeG5ldCA+IG5uZXRuYW1lKQorCSAgICAgIHhuYW1lID0gIltFUlJPUl0iOworCSAg ICBlbHNlCisJICAgICAgeG5hbWUgPSBuZXRuYW1lW3huZXRdOworI2lmZGVmIE5FV0ZUUAorICAg ICAgICAgICAgaWYgKGZ0cCkgeworCQlpZiAoZnRwaXNzZWN1cmUoKSkKKwkJICBzZWN1cmUgPSAx OworCSAgICB9IGVsc2UKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkgICAgICBpZiAoMAorI2lmZGVm IFNTSEJVSUxUSU4KKyAgICAgICAgICAgICAgICB8fCBJU19TU0goKQorI2VuZGlmIC8qIFNTSEJV SUxUSU4gKi8KKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAgICAgfHwgY2tfdG5f ZW5jcnlwdGluZygpICYmIGNrX3RuX2RlY3J5cHRpbmcoKQorI2VuZGlmIC8qIENLX0VOQ1JZUFRJ T04gKi8KKyNpZmRlZiBDS19TU0wKKyAgICAgICAgICAgICAgICB8fCB0bHNfYWN0aXZlX2ZsYWcg fHwgc3NsX2FjdGl2ZV9mbGFnCisjZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NPREUK KyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAg ICB8fCB0dG5wcm90byA9PSBOUF9FSzRMT0dJTiB8fCB0dG5wcm90byA9PSBOUF9FSzVMT0dJTgor I2VuZGlmIC8qIENLX0VOQ1JZUFRJT04gKi8KKyNlbmRpZiAvKiBDS19LRVJCRVJPUyAqLworI2Vu ZGlmIC8qIFJMT0dDT0RFICovCisgICAgICAgICAgICAgICAgICkgeworCQlzZWN1cmUgPSAxOwor CSAgICB9CisJICAgIGlmIChzZWN1cmUpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMF07 CisgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsIiVzIChTRUNVUkUpIix4bmFtZSk7CisgICAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgYnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgeG5hbWUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSAiKG5ldHdvcmspIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAv KiBORVRDT05OICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc3BlZWQgPCAw TCkKKyAgICAgICAgICAgICAgc3BlZWQgPSB0dGdzcGQoKTsKKyAgICAgICAgICAgIGlmIChzcGVl ZCA+IDBMKSB7CisgICAgICAgICAgICAgICAgaWYgKHNwZWVkID09IDg4ODApIHsKKyAgICAgICAg ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSAiNzUvMTIwMCIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICBjaGFyIHNwZWVkYnVmWzY0XSA7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYo c3BlZWRidWYsICIlbGQiLCBzcGVlZCk7CisgICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3Bl cnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u Zykgc3BlZWRidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp ICIodW5rbm93bikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZF UiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKKyAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpIHBhcm5hbSgoY2hhcilwYXJpdHkpCisgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgICAgIHBjdGxibCA9ICh3aGF0ICYgV19TRU5EKTsKKyAgICAgICAgY2VuZHcg PSAwOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIHN3aXRjaCIsIiIsZik7CisgICAg ZGVidWcoRjAwMCwiU0NSRUVOQyBjIiwiIixjKTsKKyAgICBkZWJ1ZyhGMTAxLCJTQ1JFRU5DIG4i LCIiLG4pOworCisgICAgbGVuID0gc3RybGVuKHMpOyAgICAgICAgICAgICAgICAgICAgLyogTGVu Z3RoIG9mIGFyZ3VtZW50IHN0cmluZyAqLworICAgIHN3aXRjaCAoZikgeyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAqLworICAgICAgY2FzZSBTQ1Jf Rk46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lICovCisgICAgICAgIG9sZHBjdCA9 IHBjdCA9IDBMOyAgICAgICAgICAgICAgLyogUmVzZXQgcGVyY2VudHMgKi8KKyNpZmRlZiBHRlRJ TUVSCisgICAgICAgIGd0diA9IChDS0ZMT0FUKSAtMS4wOworICAgICAgICAvKiBvbGRndHYgPSAo Q0tGTE9BVCkgLTEuMDsgKi8KKyNlbHNlCisgICAgICAgIGd0diA9IC0xTDsKKyAgICAgICAgLyog b2xkZ3R2ID0gLTFMOyAqLworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgb2xkd2luID0g LTE7CisgICAgICAgIGZzaXogPSAoQ0tfT0ZGX1QpLTFMOwkJLyogSW52YWxpZGF0ZSBwcmV2aW91 cyBmaWxlIHNpemUgKi8KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfUENELCAobG9uZykgMCApOworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSAwICk7CisgICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIDAgKTsK KyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJS LCAobG9uZykgIiIgKTsKKworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19OQU0sIChsb25nKSBzICk7CisgICAgICAgIHEgPSBsZW47ICAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgbmFtZSBsZW5ndGggZm9yIGxhdGVyICovCisgICAg ICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBmaWxlIHR5cGUg KGNhbiBjaGFuZ2UpICovCisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOwor I2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0FOOiAg ICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGFzLW5hbWUgKi8KKyAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOworI2lm ZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAg ICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9GUzogICAgICAgICAgICAgICAgICAgICAg LyogRmlsZSBzaXplICovCisgICAgICAgIGZzaXogPSBuOworICAgICAgICBpZiAoZnNpeiA+IChD S19PRkZfVCktMSkgeworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfU0laLCAobG9uZykgbiApOworICAgICAgICB9CisgICAgICAgIGlmIChm c2l6ID4gKENLX09GRl9UKS0xKSB7CS8qIFB1dCB1cCBwZXJjZW50IGxhYmVsICovCisgICAgICAg ICAgICBwY3RsYmwgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGN0bGJsID0g MDsKKwl9CisgICAgICAgIHNjcmZ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0 eXBlICovCisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8q IE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1BUOiAgICAgICAgICAg ICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICovCisgICAgICAgIGlmIChz cGFja2V0cyA8IDUpIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgc3lzaW5kZXg7CisgICAgICAg ICAgICBleHRlcm4gc3RydWN0IHN5c2RhdGEgc3lzaWRsaXN0W107CisgICAgICAgICAgICAvKiBU aGluZ3MgdGhhdCB3b24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIDR0aCBwYWNrZXQgKi8KKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBDV19QQVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgcGFybmFtKChjaGFyKXBhcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICBpZiAoCisjaWZkZWYgTkVXRlRQCisJCShmdHAgJiYgKHNwYWNrZXRzID09IDEg fHwgcnBhY2tldHMgPT0gMSkpIHx8CisjZW5kaWYgLyogTkVXRlRQICovCisJCXNwYWNrZXRzID09 IDQKKwkJKSB7CisgICAgICAgICAgICAgICAgaWYgKAorI2lmZGVmIE5FV0ZUUAorCQkgICAgZnRw IHx8CisjZW5kaWYgLyogTkVXRlRQICovCisJCSAgICAoKHByb3RvY29sID09IFBST1RPX0spICYm IChzeXNpbmRleCA+IC0xKSkKKwkJICAgICkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIG1z Z2J1ZlsxMjhdOworICAgICAgICAgICAgICAgICAgICBpZiAobmV0KSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwiTmV0d29yayBIb3N0OiAlcyAoJXMpIiwKKyNpZmRl ZiBORVdGVFAKKwkJCSAgICAgICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKSA6Cisj ZW5kaWYgLyogTkVXRlRQICovCisJCQkgICAgICAgdHRuYW1lLAorI2lmZGVmIE5FV0ZUUAorCQkJ ICAgICAgIGZ0cCA/IGZ0cF9zcnZ0eXAgOgorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkJICAgICAg IHN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKKwkJCSAgICAgICApOworICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYs CisJCQkJIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyAocmVtb3RlIGhvc3QgaXMgJXMpIiwKKwkJ CQl0dG5hbWUsCisJCQkJc3lzaWRsaXN0W3N5c2luZGV4XS5zaWRfbmFtZQorCQkJCSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLAorCQkJCSAgICAobG9uZykgQ1dfTElOLAorCQkJCSAgICAobG9uZykg bXNnYnVmCisJCQkJICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CisjaWZkZWYgQ0tfVElNRVJTCisgICAgICAgIGlmICgvKiBydHRmbGcgJiYgKi8gcHJv dG9jb2wgPT0gUFJPVE9fSykgeworICAgICAgICAgICAgbG9uZyB4eDsKKyAgICAgICAgICAgIGlm ICgKKyNpZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgICAgICAgICBzdHJlYW1pbmcgJiYgb2xkd2lu ICE9IC0yCisjZWxzZQorICAgICAgICAgICAgICAgIDAKKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8K KyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBjaGFyIG1zZ2J1Zls2NF07Cisg ICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsIjAwIC8gMDAiKTsKKyAgICAgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCisJCQkJKGxvbmcpIENXX1RNTywK KwkJCQkobG9uZykgbXNnYnVmCisJCQkJKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgeHggPSAocnR0ZGVsYXkgKyA1MDApIC8gMTAwMDsKKyAgICAgICAgICAgICAgICBp ZiAoeHggIT0gb2xkcnR0IHx8IHJjdnRpbW8gIT0gb2xkdGltKSB7CisgICAgICAgICAgICAgICAg ICAgIGNoYXIgbXNnYnVmWzY0XTsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYs IiUwMmxkIC8gJTAyZCIsIHh4LCByY3Z0aW1vKTsKKyAgICAgICAgICAgICAgICAgICAgS3VpU2V0 UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAorCQkJCSAgICAobG9uZykgQ1dfVE1PLAorCQkJ CSAgICAobG9uZykgbXNnYnVmCisJCQkJICAgICk7CisgICAgICAgICAgICAgICAgICAgIG9sZHJ0 dCA9IHh4OworICAgICAgICAgICAgICAgICAgICBvbGR0aW0gPSByY3Z0aW1vOworICAgICAgICAg ICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorI2VuZGlmIC8qIENLX1RJTUVSUyAqLworCisgICAgICAgIHggPSAod2hhdCAm IFdfUkVDVikgPyAgICAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovCisgICAgICAgICAgcnBrdGwr KHByb3RvY29sPT1QUk9UT19LPzE6MCkgOgorICAgICAgICAgICAgc3BrdGw7CisgICAgICAgIGlm ICh4ICE9IG9sZGxlbikgeyAgICAgICAgICAgICAgLyogQnV0IG9ubHkgaWYgaXQgY2hhbmdlZC4g Ki8KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX1BMLCAobG9uZykgeCApOworICAgICAgICAgICAgb2xkbGVuID0geDsKKyAgICAgICAgfQor ICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QQywg KGxvbmcpIHNwYWNrZXRzICk7CisKKyAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sgJiYg IWZ0cCkgeyAvKiBXaW5kb3cgc2xvdHMgKi8KKyAgICAgICAgICAgIGNoYXIgd3NbMTZdOworICAg ICAgICAgICAgaW50IGZsYWc7CisgICAgICAgICAgICBmbGFnID0gMDsKKyNpZmRlZiBTVFJFQU1J TkcKKyAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAob2xk d2luICE9IC0yKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYod3MsIlNUUkVBTUlORyIp OworICAgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgb2xk d2luID0gLTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYg LyogU1RSRUFNSU5HICovCisgICAgICAgICAgICAgIGlmICh3Y3VyICE9IG9sZHdpbikgeworICAg ICAgICAgICAgICAgICAgc3ByaW50Zih3cywgIiVkIG9mICVkIiwgd2N1ciA8IDEgPyAxIDogd2N1 ciwgd3Nsb3RuKTsKKyAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAgICAgICAgICAgICAg ICAgb2xkd2luID0gd2N1cjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZsYWcp IHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19XUywgKGxvbmcpIHdzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZXJyb3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAgICAgIGlmIChl cnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAgICAgLyogUmV0cnkgY291bnQsIGlmIGNoYW5nZWQgKi8K KyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENX X1BSLCAobG9uZykgZXJyb3JzICk7CisgICAgICAgICAgICBvbGR0cnkgPSBlcnJvcnM7CisgICAg ICAgIH0KKwkvKiBTZW5kZXIncyBwYWNrZXQgdHlwZSAqLworICAgICAgICBpZiAoIWZ0cCAmJiAo YyAhPSBvbGR0eXAgJiYgYyAhPSAnWScgJiYgYyAhPSAnTicpKSB7CisgICAgICAgICAgICBjaGFy IHR5cGVbMl07CisgICAgICAgICAgICBzcHJpbnRmKHR5cGUsICIlYyIsYyk7CisgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19QVCwgKGxvbmcp IHR5cGUgKTsKKyAgICAgICAgICAgIG9sZHR5cCA9IGM7CisgICAgICAgIH0KKyAgICAgICAgc3dp dGNoIChjKSB7ICAgICAgICAgICAgICAgICAgICAvKiBOb3cgaGFuZGxlIHNwZWNpZmljIHBhY2tl dCB0eXBlcyAqLworICAgICAgICAgIGNhc2UgJ1MnOiAgICAgICAgICAgICAgICAgICAgIC8qIEJl Z2lubmluZyBvZiB0cmFuc2ZlciAqLworICAgICAgICAgICAgZmNudCA9IGZieXQgPSAwTDsgICAg ICAgICAgIC8qIENsZWFyIGNvdW50ZXJzICovCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgICAg Z3R2ID0gLTEuMDsKKyNlbHNlIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgIGd0diA9IC0xTDsg ICAgICAgICAgICAgICAgICAvKiBBbmQgb2xkL25ldyB0aGluZ3MuLi4gKi8KKyNlbmRpZiAvKiBH RlRJTUVSICovCisgICAgICAgICAgICBvbGRwY3QgPSBwY3QgPSAwTDsKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgY2FzZSAnWic6ICAgICAgICAgICAgICAgICAgICAgLyogb3IgRU9G ICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIHBrdG51bSIsIiIs bik7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIG9sZHBjdCIsIiIs b2xkcGN0KTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1BUIFogcGN0Iiwi IixwY3QpOworICAgICAgICAgIGNhc2UgJ0QnOiAgICAgICAgICAgICAgICAgICAgIC8qIERhdGEg cGFja2V0ICovCisgICAgICAgICAgICBpZiAoZnNpeiA+IDBMKSB7ICAgICAgICAgICAgLyogU2hv dyBwZXJjZW50IGRvbmUgaWYga25vd24gKi8KKyAgICAgICAgICAgICAgICBvbGRwY3QgPSBwY3Q7 ICAgICAgICAgICAvKiBSZW1lbWJlciBwcmV2aW91cyBwZXJjZW50ICovCisgICAgICAgICAgICAg ICAgaG93ZmFyID0gZmZjOworI2lmZGVmIENLX1JFU0VORAorICAgICAgICAgICAgICAgIGlmICh3 aGF0ICYgV19TRU5EKQkvKiBBY2NvdW50IGZvciBQU0VORCBvciBSRVNFTkQgKi8KKyAgICAgICAg ICAgICAgICAgIGhvd2ZhciArPSBzZW5kc3RhcnQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo d2hhdCAmIFdfUkVDVikKKyAgICAgICAgICAgICAgICAgIGhvd2ZhciArPSByc19sZW47CisjZW5k aWYgLyogQ0tfUkVTRU5EICovCisgICAgICAgICAgICAgICAgLyogUGVyY2VudCBkb25lLCB0byBi ZSBkaXNwbGF5ZWQuLi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnWicpIHsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKCFkaXNjYXJkICYmICFjeHNlZW4gJiYgIWN6c2VlbikgcGN0ID0g MTAwTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgIHBjdCA9IChm c2l6ID4gOTlMKSA/IChob3dmYXIgLyAoZnNpeiAvIDEwMEwpKSA6IDBMOworICAgICAgICAgICAg ICAgIGlmIChwY3QgPiAxMDBMIHx8ICAgICAgIC8qIEFsbG93IGZvciBleHBhbnNpb24gYW5kICov CisgICAgICAgICAgICAgICAgICAgKG9sZHBjdCA9PSA5OUwgJiYgcGN0IDwgMEwpKSAvKiBvdGhl ciBib3VuZGFyeSBjb25kaXRpb25zICovCisgICAgICAgICAgICAgICAgICBwY3QgPSAxMDBMOwor ICAgICAgICAgICAgICAgIGlmIChwY3QgIT0gb2xkcGN0KSAgICAgIC8qIE9ubHkgZG8gdGhpcyAx MDAgdGltZXMgcGVyIGZpbGUgKi8KKyAgICAgICAgICAgICAgICAgIHVwZHBjdChvbGRwY3QsIHBj dCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5 KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9u ZykgQ1dfRkZDLCAobG9uZykgaG93ZmFyKTsKKyAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50 KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xk X3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAg ICAgIGNhc2UgJyUnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXRzLCByZXRyYW5zbWlz c2lvbnMgKi8KKyAgICAgICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zh cik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhv d2Zhcik7ICovCisKKyAgICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRp bWVvdXRzOworICAgICAgICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9y IGNvdW50LCBpZiBjaGFuZ2VkICovCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENX X1BSLAorCQkJICAgICAgIChsb25nKSBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvbGR0cnkgPSBlcnJv cnM7CisgICAgICAgICAgICAgICAgaWYgKHMpIGlmICgqcykgeworICAgICAgICAgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcp IHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl ICdFJzogICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKi8KKyAgICAgICAgICAg IGlmICgqcykgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGZjbnQgPSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBTbyBubyBieXRlcyBmb3IgdGhpcyBm aWxlICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdRJzogICAgICAgICAg ICAgICAgICAgICAvKiBDcnVuY2hlZCBwYWNrZXQgKi8KKyAgICAgICAgICAgIGNwcyA9IHNob2Nw cygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIgPSBzaG9l dGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRhbWFnZWQgUGFj a2V0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgJ3EnOiAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtQyBvciBjb25u ZWN0aW9uIGxvc3QgKi8KKyAgICAgICAgICAgIGlmICghcykgcyA9ICIiOworICAgICAgICAgICAg aWYgKCEqcykgcyA9ICJVc2VyIGludGVycnVwdGlvbiBvciBjb25uZWN0aW9uIGxvc3QiOworICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlICdUJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0ICov CisgICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAg ICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAq LworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxvbmcpICJUaW1lb3V0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAg ICAgICAgaWYgKGVycm9ycyAhPSBvbGR0cnkpIHsgICAgIC8qIEVycm9yIGNvdW50LCBpZiBjaGFu Z2VkICovCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1BSLCAobG9uZykgZXJy b3JzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBv bGR0cnkgPSBlcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcnMsIGRvIG5vdGhpbmcg Ki8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAgIFNh dmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAg ICAgIGNhc2UgU0NSX1NUOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIHN0 YXR1cyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9TVCBjIiwiIixjKTsKKyAg ICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfU1Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1NUIGN4c2VlbiIsIiIsY3hzZWVuKTsKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAgLyog T0ssIHByaW50IDEwMCAlICovCisgICAgICAgICAgICBpZiAocGN0bGJsKQorICAgICAgICAgICAg ICB1cGRwY3Qob2xkcGN0LDEwMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBm ZmMpOworICAgICAgICAgICAgcGN0ID0gMTAwOworICAgICAgICAgICAgb2xkcGN0ID0gMDsKKyAg ICAgICAgfSBlbHNlIGlmIChmc2l6ID4gMEwpICAgICAgICAgICAvKiBOb3QgT0ssIHVwZGF0ZSBm aW5hbCBwZXJjZW50ICovCisvKgorICBUaGUgZWxzZSBwYXJ0IHdyaXRlcyBhbGwgb3ZlciB0aGUg c2NyZWVuIC0tIGhvd2ZhciBhbmQvb3IgZnNpeiBoYXZlCisgIGJlZW4gcmVzZXQgYXMgYSBjb25z ZXF1ZW5jZSBvZiB0aGUgbm90LU9LbmVzcyBvZiB0aGUgdHJhbnNmZXIuCisqLworICAgICAgICAg IGlmIChwY3RsYmwpCisgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCAoaG93ZmFyICogMTAwTCkg LyBmc2l6KTsKKyNlbHNlCisgICAgICAgIGlmIChjID09IFNUX09LKSB7ICAgICAgICAgICAgICAg LyogT0ssIHByaW50IDEwMCAlICovCisgICAgICAgICAgICBpZiAocGN0bGJsKSB7CisJCXVwZHBj dChvbGRwY3QsMTAwKTsKKwkgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19GRkMsIChsb25nKSBmZmMpOworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IDEwMDsKKyAgICAgICAgICAgIG9sZHBjdCA9IDA7 CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLwor CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1RS LCAobG9uZykgIiIgKTsKKworICAgICAgICBzd2l0Y2ggKGMpIHsgICAgICAgICAgICAgICAgICAg IC8qIFByaW50IG5ldyBzdGF0dXMgbWVzc2FnZSAqLworICAgICAgICAgIGNhc2UgU1RfT0s6ICAg ICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIE9LICovCisgICAgICAgICAgICBmY250Kys7ICAg ICAgICAgICAgICAgICAgICAgLyogQ291bnQgdGhpcyBmaWxlICovCisJICAgIGlmICh3aGF0ID09 IChXX0ZUUHxXX0ZUX0RFTEUpKSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBD V19NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGVsZXRlIE9L IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCSAgICB9IGVsc2UgeworCQlm Ynl0ICs9IGZmYzsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUcmFuc2ZlciBPSyIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwkgICAgfQorICAgICAgICAgICAgcmV0dXJu OworCisgICAgICAgICAgY2FzZSBTVF9ESVNDOiAgICAgICAgICAgICAgICAgLyogRGlzY2FyZGVk ICovCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgIkZpbGUgZGlzY2FyZGVkIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2Ug U1RfSU5UOiAgICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkICovCisgICAgICAgICAgICBL dWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIlRy YW5zZmVyIGludGVycnVwdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1F TlQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIFNUX1NLSVA6IHsgICAg ICAgICAgICAgICAgLyogU2tpcHBlZCAqLworICAgICAgICAgICAgY2hhciBlcnJidWZbNjRdIDsK KwkgICAgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCisgICAgICAgICAgICAgICAgc3ByaW50 ZiggZXJyYnVmLCAiRmlsZSBza2lwcGVkLCAoJXMpIiwgc2tyZWFzb25bbl0gKSA7CisJICAgIGVs c2UKKyAgICAgICAgICAgICAgICBzcHJpbnRmKCBlcnJidWYsICJGaWxlIHNraXBwZWQiICkgOwor ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIGVycmJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNpZmRlZiBD T01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgIGNhc2UgU1RfRVJS OiAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIGlmICgh cykgcyA9IChjaGFyICopZXBrdG1zZzsKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlf RklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKKyNpZmRlZiBDT01NRU5U CisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfUkVGVTogICAgICAgICAgICAg ICAgIC8qIFJlZnVzZWQgKi8KKyAgICAgICAgICAgIGlmICgqcykgeworICAgICAgICAgICAgICAg IGNoYXIgZXJyYnVmWzY0XSA7CisgICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiUmVm dXNlZCwgJXMiLCBzICkgOworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLChsb25nKSBDV19FUlIsKGxvbmcpIGVycmJ1Zik7CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChs b25nKUNXX0VSUiwobG9uZykiUmVmdXNlZCIpOworICAgICAgICAgICAgfQorI2lmZGVmIENPTU1F TlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVOVCAqLwor ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9JTkM6CisgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwobG9uZylDV19FUlIsKGxvbmcpIklu Y29tcGxldGUiKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAw OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg IGNhc2UgU1RfTVNHOgorICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsKGxvbmcpQ1dfTVNHLChsb25nKXMpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg ICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KKyAgICAgICAg ICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFk IHN0YXR1cyAqKioiICk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg Y2FzZSBTQ1JfVEM6IHsgICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0aW9uIGNvbXBsZXRl ICovCisgICAgICAgICAgY2hhciBtc2didWZbMTI4XTsKKyAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgdGZjcHMpOworICAgICAgICAgIGlm IChzdWNjZXNzKSB7CisgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLAorICAgICAgICAgICAg ICAgICAgICAgICJTVUNDRVNTLiAgRmlsZXM6ICVzLCBCeXRlczogJWxkLCAlbGQgQ1BTIiwKKyAg ICAgICAgICAgICAgICAgICAgICBmaWxjbnQgLSBmaWxyZWosCisgICAgICAgICAgICAgICAgICAg ICAgY2tmc3RvYShmYnl0KSwKKyAgICAgICAgICAgICAgICAgICAgICB0ZmNwcworICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RS QU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfTVNHLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgbXNnYnVmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgfQorICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19UUiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgaGhtbXNzKChsb25nKQorI2lmZGVmIEdG VElNRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcHRzZWNzICsg MC41KQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZWNz CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKSk7CisKKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAgb2xkZ3R2ID0gKENLRkxPQVQp IC0xLjA7CisjZWxzZQorICAgICAgICAgIG9sZGd0diA9IC0xTDsKKyNlbmRpZiAvKiBHRlRJTUVS ICovCisKKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAg ICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgICAgb2xkdHlwID0gMDsgb2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xk bGVuID0gLTE7CisgICAgICAgICAgb2xkdGltID0gLTE7CisgICAgICAgICAgY2VuZHcgPSAxOwor ICAgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX05PVEUpOyAgIC8qIENsb3NlIHdpbmRvdywg dGhlbiBiZWVwLiAqLworICAgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgIC8q IFdpbmRvdyBjbG9zZWQuICovCisgICAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgY2Fz ZSBTQ1JfRU06ICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIHBhY2tldCAoZmF0YWwpICov CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VS UiwgKGxvbmcpIHMgKTsKKyAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfRkFJTCk7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9RRTogICAgICAgICAgICAgICAg ICAgICAgLyogUXVhbnRpdHkgZXF1YWxzICovCisgICAgICBjYXNlIFNDUl9UVTogICAgICAgICAg ICAgICAgICAgICAgLyogVW5kZWxpbWl0ZWQgdGV4dCAqLworICAgICAgY2FzZSBTQ1JfVE46ICAg ICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IHN0YXJ0ICovCisgICAgICBj YXNlIFNDUl9UWjogICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgZW5k ICovCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogKGlnbm9yZWQg aW4gZnVsbHNjcmVlbiBkaXNwbGF5KSAqLworCisgICAgICBjYXNlIFNDUl9YRDogICAgICAgICAg ICAgICAgICAgICAgLyogWC1wYWNrZXQgZGF0YSAqLworICAgICAgICBwY3QgPSBvbGRwY3QgPSAw OworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19O QU0sIChsb25nKSBzICk7CisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQ1c6ICAg ICAgICAgICAgICAgICAgICAgIC8qIENsb3NlIFdpbmRvdyAqLworI2lmZGVmIENPTU1FTlQKKyAg ICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAgICAgICAgICAvKiBSZXNldCB0aGVzZSBmb3Ig bmV4dCB0aW1lLiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgb2xkdHlwID0gMDsg b2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7CisgICAgICAgIG9sZHRpbSA9 IC0xOworCisgICAgICAgIGZ0X3dpbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRmxhZyB0 aGF0IHdpbmRvdyBpcyBjbG9zZWQuICovCisgICAgICAgIGNlbmR3ID0gMTsgcmV0dXJuOworCisg ICAgICBjYXNlIFNDUl9DRDogICAgICAgICAgICAgICAgICAgICAgLyogRGlzcGxheSBjdXJyZW50 IGRpcmVjdG9yeSAqLworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIs IChsb25nKSBDV19ESVIsIChsb25nKSBzICk7CisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRN b2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGRl ZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLworICAgICAgICBL dWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICIqKiogc2NyZWVu KCkgY2FsbGVkIHdpdGggYmFkIGZ1bmN0aW9uIGNvZGUgKioqIgorICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICByZXR1cm47CisgICAgfQorfQorI2VuZGlmIC8qIEtVSSAqLworI2Vu ZGlmIC8qIE1BQyAqLworCisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgQ0tfQ1VSUE9T CisvKiBEdW1taWVzIGZvciB3aGVuIGN1cnNvciBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgKi8K K2ludAorY2tfY3VycG9zKHJvdywgY29sKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworaW50Citj a19jbHMoKSB7CisgICAgcmV0dXJuKC0xKTsKK30KKworaW50Citja19jbGVvbCgpIHsKKyAgICBy ZXR1cm4oLTEpOworfQorI2VuZGlmIC8qIENLX0NVUlBPUyAqLworCisjaWZuZGVmIE5PSUtTRAor I2lmZGVmIElLU0RCCisKK3N0cnVjdCBpa3NkYmZsZCBkYmZsZFtdID0geworICAgLyogT2Zmc2V0 ICAgIExlbmd0aCAgICBUeXBlICAgKi8KKyAgICB7IERCX0ZMQUdTLCBkQl9GTEFHUywgREJUX0hF WCB9LCAgICAvKiAgMCBkYl9GTEFHUyBGbGFncyAqLworICAgIHsgREJfQVRZUEUsIGRCX0FUWVBF LCBEQlRfSEVYIH0sICAgIC8qICAxIGRiX0FUWVBFIEF1dGggdHlwZSAqLworICAgIHsgREJfQU1P REUsIGRCX0FNT0RFLCBEQlRfSEVYIH0sICAgIC8qICAzIGRiX0FNT0RFIEF1dGggbW9kZSAqLwor ICAgIHsgREJfU1RBVEUsIGRCX1NUQVRFLCBEQlRfSEVYIH0sICAgIC8qICAyIGRiX1NUQVRFIFN0 YXRlICovCisgICAgeyBEQl9NWVBJRCwgZEJfTVlQSUQsIERCVF9IRVggfSwgICAgLyogIDUgZGJf TVlQSUQgUElEICovCisgICAgeyBEQl9TQUREUiwgZEJfU0FERFIsIERCVF9IRVggfSwgICAgLyog IDQgZGJfU0FERFIgU2VydmVyIGFkZHJlc3MgKi8KKyAgICB7IERCX0NBRERSLCBkQl9DQUREUiwg REJUX0hFWCB9LCAgICAvKiAgNiBkYl9DQUREUiBDbGllbnQgYWRkcmVzcyAqLworICAgIHsgREJf U1RBUlQsIGRCX1NUQVJULCBEQlRfREFUIH0sICAgIC8qICA3IGRiX1NUQVJUIFNlc3Npb24gc3Rh cnQgKi8KKyAgICB7IERCX0xBU1RVLCBkQl9MQVNUVSwgREJUX0RBVCB9LCAgICAvKiAgOCBkYl9M QVNUVSBMYXN0IHVwZGF0ZSAqLworICAgIHsgREJfVUxFTiwgIGRCX1VMRU4sICBEQlRfSEVYIH0s ICAgIC8qICA5IGRiX1VMRU4gIFVzZXJuYW1lIGxlbmd0aCAqLworICAgIHsgREJfRExFTiwgIGRC X0RMRU4sICBEQlRfSEVYIH0sICAgIC8qIDEwIGRiX0RMRU4gIERpcmVjdG9yeSBuYW1lIGxlbmd0 aCAqLworICAgIHsgREJfSUxFTiwgIGRCX0lMRU4sICBEQlRfSEVYIH0sICAgIC8qIDExIGRiX0lM RU4gIEluZm8gbGVuZ3RoICovCisgICAgeyBEQl9QQUQxLCAgZEJfUEFEMSwgIERCVF9VTkQgfSwg ICAgLyogMTIgZGJfUEFEMSAgKFJlc2VydmVkKSAqLworICAgIHsgREJfVVNFUiwgIGRCX1VTRVIs ICBEQlRfU1RSIH0sICAgIC8qIDEzIGRiX1VTRVIgIFVzZXJuYW1lICovCisgICAgeyBEQl9ESVIs ICAgZEJfRElSLCAgIERCVF9TVFIgfSwgICAgLyogMTQgZGJfRElSICAgQ3VycmVudCBEaXJlY3Rv cnkgKi8KKyAgICB7IERCX0lORk8sICBkQl9JTkZPLCAgREJUX1NUUiB9ICAgICAvKiAxNSBkYl9J TkZPICBTdGF0ZS1zcGVjaWZpYyBpbmZvICovCit9OworCitzdGF0aWMgY2hhciBsY2tuYW1bQ0tN QVhQQVRIKzFdOyAgICAgICAgLyogTG9ja2ZpbGUgcGF0aG5hbWUgKi8KK3N0YXRpYyBjaGFyIHRt cGxja1tDS01BWFBBVEgrMV07ICAgICAgICAvKiBUZW1wb3JhcnkgbG9ja2ZpbGUgbmFtZSAqLwor CitzdGF0aWMgY2hhciAqIHVwZG1vZGUgPSAgICAgICAgICAgICAgICAgLyogVXBkYXRlIG1vZGUg Zm9yIGZvcGVuKCkgKi8KKyNpZmRlZiBPUzIKKyAgInIrYiIKKyNlbHNlCisjaWZkZWYgVk1TCisg ICJyK2IiCisjZWxzZQorICAicisiCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICov CisgIDsKKworLyogIEQgQiBJIE4gSSBUICAtLSAgSW5pdGlhbGl6ZSB0aGUgSUtTRCBkYXRhYmFz ZS4uLiAgKi8KKworaW50CitkYmluaXQoKSB7CisgICAgZXh0ZXJuIGludCBkYmluaXRlZDsKKyAg ICBpbnQgeCA9IDA7CisgICAgZGVidWcoRjExMCwiZGJpbml0IGRiZGlyIDEiLGRiZGlyLDApOwor ICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmZpbGUgMSIsZGJmaWxlLDApOworICAgIGlmIChkYmlu aXRlZCkKKyAgICAgIHJldHVybigwKTsKKyNpZmRlZiBPUzIKKyAgICBpZiAoIWRiZGlyKSB7Cisj aWZkZWYgTlQKKyAgICAgICAgY2hhciAqIHAgPSBOVUxMOworICAgICAgICBpZiAoIWlzV2luOTUo KSkgeworICAgICAgICAgICAgcCA9IGdldGVudigiU3lzdGVtUm9vdCIpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgcCA9IGdldGVudigid2luYm9vdGRpciIpOworICAgICAgICAgICAg aWYgKCFwKSAgcCA9IGdldGVudigid2luZGlyIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFw KSBwID0gIkM6LyI7CisgICAgICAgIGRiZGlyID0gbWFsbG9jKHN0cmxlbihwKSsyKTsKKyAgICAg ICAgc3RyY3B5KGRiZGlyLHApOwkJLyogc2FmZSAqLworICAgICAgICBwID0gZGJkaXI7CisgICAg ICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgaWYgKCpwID09ICdcXCcpCisgICAgICAgICAg ICAgICpwID0gJy8nOworICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgICAgIGlmICgq KHAtMSkgIT0gJy8nICkgeworICAgICAgICAgICAgKnArKyA9ICcvJzsKKyAgICAgICAgICAgICpw ID0gJ1wwJzsKKyAgICAgICAgfQorI2Vsc2UgLyogTlQgKi8KKyAgICAgICAgbWFrZXN0cigmZGJk aXIsIkM6LyIpOworI2VuZGlmIC8qIE5UICovCisgICAgfQorI2Vsc2UgLyogT1MyICovCisgICAg aWYgKCFkYmRpcikKKyAgICAgIG1ha2VzdHIoJmRiZGlyLElLX0RCQVNFRElSKTsKKyNlbmRpZiAv KiBPUzIgKi8KKworICAgIGlmICghZGJmaWxlKSB7CisgICAgICAgIGNoYXIgKiBzID0gIiI7Cisg ICAgICAgIHggPSBzdHJsZW4oZGJkaXIpOworICAgICAgICBpZiAoZGJkaXJbeC0xXSAhPSAnLycp IHsKKyAgICAgICAgICAgIHMgPSAiLyI7CisgICAgICAgICAgICB4Kys7CisgICAgICAgIH0KKyAg ICAgICAgeCArPSAoaW50KXN0cmxlbihJS19EQkFTRUZJTCk7CisgICAgICAgIGRiZmlsZSA9IChj aGFyICopbWFsbG9jKHgrMSk7CisgICAgICAgIHNwcmludGYoZGJmaWxlLCIlcyVzJXMiLGRiZGly LHMsSUtfREJBU0VGSUwpOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJkaXIgMiIs ZGJkaXIsMCk7CisgICAgZGVidWcoRjExMCwiZGJpbml0IGRiZmlsZSAyIixkYmZpbGUsMCk7Cisg ICAgbXlwaWQgPSBnZXRwaWQoKTsgICAgICAgICAgICAgICAgICAgLyogR2V0IG15IHBpZCAqLwor ICAgIGRlYnVnKEYxMDEsImRiaW5pdCBteXBpZCIsIiIsbXlwaWQpOworCisgICAgaWYgKCFteWhl eGlwWzBdKSB7ICAgICAgICAgICAgICAgICAgLyogU2V0IG15IGhleCBJUCBhZGRyZXNzICovCisj aWZkZWYgVENQU09DS0VUCisgICAgICAgIGV4dGVybiB1bnNpZ25lZCBsb25nIG15eGlwYWRkcjsK KyAgICAgICAgaWYgKGdldGxvY2FsaXBhZGRyKCkgPiAtMSkgeworICAgICAgICAgICAgbXlpcCA9 IG15eGlwYWRkcjsKKyAgICAgICAgICAgIHNwcmludGYobXloZXhpcCwiJTA4bHgiLG15aXApOyAv KiAoTmVlZHMgZml4aW5nIGZvciBJUHY2KSAqLworICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKyAgICAgICAgICBja3N0cm5jcHkobXloZXhpcCwiMDAwMDAwMDAiLDkpOwor ICAgIH0KKyAgICBkZWJ1ZyhGMTExLCJkYmluaXQgbXlpcCIsbXloZXhpcCxteWlwKTsKKyAgICBp ZiAoIXBlZXJoZXhpcFswXSkgeyAgICAgICAgICAgICAgICAvKiBHZXQgcGVlcidzICBoZXggSVAg YWRkcmVzcyAqLworI2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9u ZyBwZWVyeGlwYWRkcjsKKyAgICAgICAgaWYgKGNrZ2V0cGVlcigpKSB7CisgICAgICAgICAgICBw ZWVyaXAgPSBwZWVyeGlwYWRkcjsKKyAgICAgICAgICAgIHNwcmludGYocGVlcmhleGlwLCIlMDhs eCIscGVlcmlwKTsgLyogKE5lZWRzIGZpeGluZyBmb3IgSVB2NikgKi8KKyAgICAgICAgICAgIGRl YnVnKEYxMTEsImRiaW5pdCBwZWVyaXAiLHBlZXJoZXhpcCxwZWVyaXApOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgZGVidWcoRjEwMSwiZGJpbml0IGNrZ2V0cGVlciBmYWlsdXJlIiwi IixlcnJubyk7CisgICAgICAgICAgICBja3N0cm5jcHkocGVlcmhleGlwLCIwMDAwMDAwMCIsOSk7 CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGNrc3RybmNweShwZWVyaGV4aXAsIjAwMDAwMDAw Iiw5KTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICB9CisgICAgZGVidWcoRjExMSwiZGJp bml0IHBlZXJpcCIscGVlcmhleGlwLHBlZXJpcCk7CisgICAgZGVidWcoRjEwMSwiZGJpbml0IGRi ZW5hYmxlZCIsIiIsZGJlbmFibGVkKTsKKyAgICBpZiAoZGJlbmFibGVkICYmIGluc2VydmVyKSB7 CisgICAgICAgIG15ZGJzbG90ID0gZ2V0c2xvdCgpOworICAgICAgICBkZWJ1ZyhGMTExLCJkYmlu aXQgZ2V0c2xvdCIsY2tpdG9hKGlrZGJvcGVuKSx4KTsKKyAgICAgICAgaWYgKGlrZGJvcGVuKSBk YmluaXRlZCA9IDE7CisgICAgfQorICAgIHJldHVybigwKTsKK30KKworLyogIFUgUCBEIFMgTCBP IFQgIC0tICBVcGRhdGUgc2xvdCBuICAqLworCisvKgorICBPcGVucyB0aGUgZGF0YWJhc2UgaWYg bmVjZXNzYXJ5LCBzZWVrcyB0byBzbG90IG4sIHdyaXRlcyBjdXJyZW50IHJlY29yZAorICBhbmQg YWRkcyBjdXJyZW50IHRpbWUgdG8gbGFzdC11cGRhdGUgZmllbGQuICBuIGlzIHRoZSByZWNvcmQg c2VxdWVuY2UgbnVtYmVyCisgICgwLCAxLCAyLCAuLi4pLCBub3QgdGhlIHNlZWsgcG9pbnRlci4g ICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUsIDAgb24gc3VjY2Vzcy4KKyovCitpbnQKK3VwZHNsb3Qo bikgaW50IG47IHsgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgb3VyIHNsb3QgKi8KKyAg ICBpbnQgcmMgPSAwOworICAgIENLX09GRl9UIHBvc2l0aW9uOworCisgICAgZGVidWcoRjExMSwi dXBkc2xvdCIsImlrZGJvcGVuIixpa2Rib3Blbik7CisgICAgaWYgKCFpa2Rib3BlbikgICAgICAg ICAgICAgICAgICAgICAgLyogTm90IGlmIG5vdCBvayAqLworICAgICAgcmV0dXJuKDApOworICAg IGlmICghZGJmcCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wZW4gZGF0YWJhc2UgaWYg bm90IG9wZW4gKi8KKyAgICAgICAgZGJmcCA9IGZvcGVuKGRiZmlsZSx1cGRtb2RlKTsgICAvKiBJ biB1cGRhdGUgbm8tdHJ1bmNhdGUgbW9kZSAqLworICAgICAgICBpZiAoIWRiZnApIHsKKyAgICAg ICAgICAgIGRlYnVnKEYxMTAsInVwZHNsb3QgZm9wZW4gZmFpbGVkIixkYmZpbGUsMCk7CisgICAg ICAgICAgICBpa2Rib3BlbiA9IDA7CisgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICB9 CisgICAgfQorICAgIC8qIGRlYnVnKEYxMTEsInVwZHNsb3QgZGJmaWxlIixkYmZpbGUsZGJmcCk7 ICovCisgICAgcG9zaXRpb24gPSBuICogREJfUkVDTDsKKyAgICBpZiAoQ0tGU0VFSyhkYmZwLHBv c2l0aW9uLDApIDwgMCkgewkvKiBTZWVrIHRvIGRlc2lyZWQgc2xvdCAqLworICAgICAgICBkZWJ1 ZyhGMTExLCJ1cGRzbG90IGZzZWVrIGZhaWxlZCIsZGJmaWxlLG15ZGJzZWVrKTsKKyAgICAgICAg aWtkYm9wZW4gPSAwOworICAgICAgICByYyA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIC8q IFVwZGF0ZSB0aGUgdXBkYXRlIHRpbWUgKi8KKyAgICAgICAgc3RybmNweSgmZGJyZWNbZGJmbGRb ZGJfTEFTVFVdLm9mZl0sCisgICAgICAgICAgICAgICAgY2tkYXRlKCksCisgICAgICAgICAgICAg ICAgZGJmbGRbZGJfTEFTVFVdLmxlbgorICAgICAgICAgICAgICAgICk7CisgICAgICAgIGlmIChm d3JpdGUoZGJyZWMsMSxEQl9SRUNMLGRiZnApIDwgREJfUkVDTCkgeyAvKiBXcml0ZSB0aGUgcmVj b3JkICovCisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJ1cGRzbG90IGZ3cml0ZSBmYWlsZWQiLGRi ZmlsZSwwKTsKKyAgICAgICAgICAgIGlrZGJvcGVuID0gMDsKKyAgICAgICAgICAgIHJjID0gLTE7 CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggdGhlIHdy aXRlICovCisgICAgICAgICAgICBmZmx1c2goZGJmcCk7CisgICAgICAgIH0KKyAgICB9CisgICAg cmV0dXJuKHJjKTsKK30KKworLyogIEkgTiBJIFQgUyBMIE8gVCAtLSAgSW5pdGlhbGl6ZSBzbG90 IG4gd2l0aCBteSBpbmZvICAqLworCitpbnQKK2luaXRzbG90KG4pIGludCBuOyB7ICAgICAgICAg ICAgICAgICAgICAvKiBJbml0aWFsaXplIHNsb3QgKi8KKyAgICBpbnQgazsKKyNpZmRlZiBUQ1BT T0NLRVQKKyAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBwZWVyeGlwYWRkcjsKKyNlbmRpZiAvKiBU Q1BTT0NLRVQgKi8KKworICAgIGRlYnVnKEYxMDEsImluaXRzbG90IiwiIixuKTsKKworI2lmZGVm IFVTRV9NRU1DUFkKKyAgICBtZW1zZXQoZGJyZWMsMzIsREJfUkVDTCk7CisjZWxzZQorICAgIGZv ciAoayA9IDA7IGsgPCBEQl9SRUNMOyBrKyspCisgICAgICBkYnJlY1trXSA9ICdcMDQwJzsKKyNl bmRpZiAvKiBVU0VfTUVNQ1BZICovCisKKyAgICBteWZsYWdzID0gREJGX0lOVVNFOyAgICAgICAg ICAgICAgICAvKiBTZXQgaW4tdXNlIGZsYWcgKi8KKyAgICBteXN0YXRlID0gV19OT1RISU5HOwor ICAgIG15YXR5cGUgPSAwTDsKKyAgICBteWFtb2RlID0gMEw7CisKKyAgICBrID0gZGJmbGRbZGJf RkxBR1NdLmxlbjsgICAgICAgICAgICAvKiBMZW5ndGggb2YgZmxhZ3MgZmllbGQgKi8KKyAgICBz dHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9GTEFHU10ub2ZmXSx1bG9uZ3RvaGV4KG15ZmxhZ3Msayks ayk7CisKKyAgICBrID0gZGJmbGRbZGJfQVRZUEVdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tk YmZsZFtkYl9BVFlQRV0ub2ZmXSx1bG9uZ3RvaGV4KG15YXR5cGUsayksayk7CisKKyAgICBrID0g ZGJmbGRbZGJfQU1PREVdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9BTU9ERV0u b2ZmXSx1bG9uZ3RvaGV4KG15YW1vZGUsayksayk7CisKKyAgICBrID0gZGJmbGRbZGJfU1RBVEVd LmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9TVEFURV0ub2ZmXSx1bG9uZ3RvaGV4 KG15c3RhdGUsayksayk7CisKKyAgICBrID0gZGJmbGRbZGJfU0FERFJdLmxlbjsKKyAgICBzdHJu Y3B5KCZkYnJlY1tkYmZsZFtkYl9TQUREUl0ub2ZmXSx1bG9uZ3RvaGV4KG15aXAsayksayk7CisK KyNpZmRlZiBUQ1BTT0NLRVQKKyAgICBja2dldHBlZXIoKTsKKyAgICBrID0gZGJmbGRbZGJfQ0FE RFJdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9DQUREUl0ub2ZmXSx1bG9uZ3Rv aGV4KHBlZXJ4aXBhZGRyLGspLGspOworI2Vsc2UKKyAgICBrID0gZGJmbGRbZGJfQ0FERFJdLmxl bjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9DQUREUl0ub2ZmXSx1bG9uZ3RvaGV4KDBM LGspLGspOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCisgICAgayA9IGRiZmxkW2RiX01ZUElE XS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfTVlQSURdLm9mZl0sdWxvbmd0b2hl eChteXBpZCxrKSxrKTsKKworICAgIGsgPSBkYmZsZFtkYl9TVEFSVF0ubGVuOworICAgIHN0cm5j cHkoJmRicmVjW2RiZmxkW2RiX1NUQVJUXS5vZmZdLGNrZGF0ZSgpLGspOworCisgICAgayA9IGRi ZmxkW2RiX1VMRU5dLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9VTEVOXS5vZmZd LCIwMDAwIiw0KTsKKworICAgIGsgPSBkYmZsZFtkYl9ETEVOXS5sZW47CisgICAgc3RybmNweSgm ZGJyZWNbZGJmbGRbZGJfRExFTl0ub2ZmXSwiMDAwMCIsNCk7CisKKyAgICBrID0gZGJmbGRbZGJf SUxFTl0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0lMRU5dLm9mZl0sIjAwMDAi LDQpOworCisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfSU5GT10ub2ZmXSwiSU5JVCIsNCk7 CisgICAgcmV0dXJuKHVwZHNsb3QobikpOworfQorCitpbnQKK3Nsb3RzdGF0ZSh4LHMxLHMyLHMz KSBpbnQgeDsgY2hhciAqczEsICpzMiwgKnMzOyB7CisgICAgaW50IGssIGwxLCBsMiwgbDMsIHo7 CisgICAgbXlzdGF0ZSA9IHg7CisgICAgZGVidWcoRjEwMSwic2xvdHN0YXRlIGlrZGJvcGVuIiwi Iixpa2Rib3Blbik7CisgICAgaWYgKCFpa2Rib3BlbikKKyAgICAgIHJldHVybigtMSk7CisgICAg aWYgKCFzMSkgczEgPSAiIjsKKyAgICBsMSA9IHN0cmxlbihzMSk7CisgICAgaWYgKCFzMikgczIg PSAiIjsKKyAgICBsMiA9IHN0cmxlbihzMik7CisgICAgaWYgKCFzMykgczMgPSAiIjsKKyAgICBs MyA9IHN0cmxlbihzMyk7CisgICAgc3RybmNweSgmZGJyZWNbREJfU1RBVEVdLHVsb25ndG9oZXgo bXlzdGF0ZSw0KSw0KTsKKyAgICBrID0gZGJmbGRbZGJfSUxFTl0ubGVuOworICAgIHogPSBsMSAr IGwyICsgbDMgKyAyOworICAgIGlmICh6ID4gZEJfSU5GTykKKyAgICAgIHogPSBkQl9JTkZPOwor ICAgIHN0cm5jcHkoJmRicmVjW0RCX0lMRU5dLHVsb25ndG9oZXgoKHVuc2lnbmVkIGxvbmcpeixr KSxrKTsKKyAgICBrID0gZGJmbGRbZGJfSU5GT10ubGVuOworICAgIHogPSBkYmZsZFtkYl9JTkZP XS5vZmY7CisgICAgaWYgKGwxIDw9IGspIHsKKyAgICAgICAgbHNldCgmZGJyZWNbel0sczEsbDEr MSwzMik7CisgICAgICAgIHogKz0gbDErMTsKKyAgICAgICAgayAtPSBsMSsxOworICAgICAgICBp ZiAobDIgPD0gaykgeworICAgICAgICAgICAgbHNldCgmZGJyZWNbel0sczIsbDIrMSwzMik7Cisg ICAgICAgICAgICB6ICs9IGwyKzE7CisgICAgICAgICAgICBrIC09IGwyKzE7CisgICAgICAgICAg ICBpZiAobDMgPD0gaykKKyAgICAgICAgICAgICAgbHNldCgmZGJyZWNbel0sczMsaywzMik7Cisg ICAgICAgIH0KKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisgICAgICAg IGNoYXIgYnVmWzEyOF07CisgICAgICAgIGludCBpOworICAgICAgICBzdHJuY3B5KGJ1ZiwmZGJy ZWNbREJfSU5GT10sMTI3KTsKKyAgICAgICAgYnVmWzEyN10gPSBOVUw7CisgICAgICAgIGZvciAo aSA9IDEyNjsgaSA+IDAgJiYgYnVmW2ldID09IDMyOyBpLS0pIGJ1ZltpXSA9IDA7CisgICAgICAg IGRlYnVnKEYxMTEsInNsb3RzdGF0ZSIsYnVmLG15c3RhdGUpOworICAgIH0KKyNlbmRpZiAvKiBE RUJVRyAqLworICAgIHogPSB1cGRzbG90KG15ZGJzbG90KTsKKyAgICBkZWJ1ZyhGMTAxLCJzbG90 c3RhdGUgdXBkc2xvdCIsIiIseik7CisgICAgcmV0dXJuKHopOworfQorCitpbnQKK3Nsb3RkaXIo czEsczIpIGNoYXIgKiBzMSwgKiBzMjsgeyAgICAgICAvKiBVcGRhdGUgY3VycmVudCBkaXJlY3Rv cnkgKi8KKyAgICBpbnQgaywgbGVuMSwgbGVuMjsKKyAgICBpZiAoIWlrZGJvcGVuKQorICAgICAg cmV0dXJuKC0xKTsKKyAgICBpZiAoIXMxKSBzMSA9ICIiOworICAgIGlmICghczIpIHMyID0gIiI7 CisgICAgbGVuMSA9IHN0cmxlbihzMSk7CisgICAgbGVuMiA9IHN0cmxlbihzMik7CisgICAgayA9 IGRiZmxkW2RiX0RMRU5dLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tEQl9ETEVOXSx1bG9uZ3Rv aGV4KCh1bnNpZ25lZCBsb25nKShsZW4xK2xlbjIpLGspLGspOworICAgIGsgPSBkYmZsZFtkYl9E SVJdLmxlbjsKKyAgICBpZiAobGVuMSA+IDApIHsKKyAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRb ZGJfRElSXS5vZmZdLHMxLGxlbjEsMzIpOworICAgICAgICBsc2V0KCZkYnJlY1tkYmZsZFtkYl9E SVJdLm9mZitsZW4xXSxzMixrLWxlbjEsMzIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxzZXQo JmRicmVjW2RiZmxkW2RiX0RJUl0ub2ZmXSxzMixrLDMyKTsKKyAgICB9CisgICAgcmV0dXJuKHVw ZHNsb3QobXlkYnNsb3QpKTsKK30KKworLyogIEYgUiBFIEUgUyBMIE8gVCAgLS0gIEZyZWUgc2xv dCBuICAqLworCitpbnQKK2ZyZWVzbG90KG4pIGludCBuOyB7CisgICAgaW50IGs7CisgICAgaWYg KCFpa2Rib3BlbikKKyAgICAgIHJldHVybigwKTsKKyAgICBkYmZsYWdzID0gMEw7CisgICAgaWYg KG4gPT0gbXlkYnNsb3QpIHsKKyAgICAgICAgZGJmbGFncyA9IG15ZmxhZ3MgJiB+REJGX0lOVVNF OworICAgICAgICBkYmZsYWdzICY9IH5EQkZfTE9HR0VEOworICAgIH0KKyAgICBrID0gZGJmbGRb ZGJfRkxBR1NdLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9GTEFHU10ub2ZmXSx1 bG9uZ3RvaGV4KGRiZmxhZ3Msayksayk7CisgICAgcmV0dXJuKHVwZHNsb3QobikpOworfQorCisv KiAgRyBFIFQgUyBMIE8gVCAgLS0gIEZpbmQgYSBmcmVlIGRhdGFiYXNlIHNsb3Q7IHJldHVybnMg c2xvdCBudW1iZXIgICovCisKKyNpZmRlZiBVTklYCisjaW5jbHVkZSA8ZmNudGwuaD4JCQkvKiBG b3IgY3JlYXQoKSAqLworI2VuZGlmCS8qIFVOSVggKi8KKworaW50CitnZXRzbG90KCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogRmluZCBhIGZyZWUgc2xvdCBmb3IgdXMgKi8KKyAg ICBGSUxFICogcmZwID0gTlVMTDsgICAgICAgICAgICAgICAgICAvKiBSZXR1cm5zIHNsb3QgbnVt YmVyICgwLCAxLCAuLi4pICovCisgICAgY2hhciBpZHN0cmluZ1s2NF07ICAgICAgICAgICAgICAg ICAgLyogUElEIHN0cmluZyBidWZmZXIgKGRlY2ltYWwpICovCisgICAgY2hhciBwaWRidWZbNjRd LCAqIHM7CisgICAgaW50IGosIGssIG4sIHgsIHJjID0gLTE7CisgICAgaW50IGxvY2tmZCwgdHJp ZXMsIGhhdmVzbG90ID0gMDsKKyAgICBsb25nIGxvY2twaWQ7CisgICAgQ0tfT0ZGX1QgaTsKKyAg ICAvKiBjaGFyIGlwYnVmWzE3XTsgKi8KKworICAgIGlmICghbXloZXhpcFswXSkgICAgICAgICAg ICAgICAgICAgIC8qIFNldCBteSBoZXggSVAgYWRkcmVzcyBpZiBub3Qgc2V0ICovCisgICAgICBj a3N0cm5jcHkoKGNoYXIgKilteWhleGlwLCI3RjAwMDAwMSIsMzMpOworICAgIHNwcmludGYoaWRz dHJpbmcsIiUwOGx4OiUwMTBsZFxuIixteWlwLG15cGlkKTsKKyAgICBkZWJ1ZyhGMTEwLCJnZXRz bG90IGlkc3RyaW5nIiwgaWRzdHJpbmcsIDApOworCisgICAgLyogTWFrZSB0ZW1wb3JhcnkgbG9j a2ZpbGUgbmFtZSBJUC5QSUQgKGhleC5oZXgpICovCisgICAgLyogVGhpcyBzaG91bGQgZml0IGlu IDE0IGNoYXJzIC0tIGh1Z2UgUElEcyBhcmUgdXN1YWxseSBub3QgcG9zc2libGUgKi8KKyAgICAv KiBvbiAxNC1jaGFyIGZpbGVuYW1lIHN5c3RlbXMuICovCisKKyAgICBzcHJpbnRmKHRtcGxjaywi JXMlMDhseC4lbHgiLGRiZGlyLG15aXAsbXlwaWQpOworICAgIGRlYnVnKEYxMTAsImdldHNsb3Qg dGVtcGZpbGUiLHRtcGxjaywwKTsKKworICAgIC8qIE1ha2UgYSB0ZW1wb3JhcnkgZmlsZSAqLwor CisgICAgbG9ja2ZkID0gY3JlYXQodG1wbGNrLCAwNjAwKTsJLyogQlVUIFRISVMgSVNOJ1QgUE9S VEFCTEUgKi8KKyAgICBpZiAobG9ja2ZkIDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTExLCJnZXRz bG9jayB0ZW1wIGxvY2tmaWxlIGNyZWF0ZSBmYWlsdXJlIiwgdG1wbGNrLCBlcnJubyk7CisgICAg ICAgIHJldHVybigtMSk7CisgICAgfQorICAgIC8qIFdyaXRlIG15IChkZWNpbWFsKSBQSUQgaW50 byB0aGUgdGVtcCBmaWxlICovCisKKyAgICB3cml0ZShsb2NrZmQsaWRzdHJpbmcsKGludClzdHJs ZW4oaWRzdHJpbmcpKTsKKyAgICBpZiAoY2xvc2UobG9ja2ZkKSA8IDApIHsgICAgICAgICAgICAv KiBDbG9zZSBsb2NrZmlsZSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGVycm9yIGNs b3NpbmcgdGVtcCBsb2NrZmlsZSIsICIiLCBlcnJubyk7CisgICAgICAgIHJldHVybigtMSk7Cisg ICAgfQorICAgIHNwcmludGYobGNrbmFtLCIlcyVzIixkYmRpcixJS19MT0NLRklMRSk7IC8qIEJ1 aWxkIGxvY2tmaWxlIG5hbWUgKi8KKyAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2tmaWxlIixs Y2tuYW0sMCk7CisKKyAgICByZnAgPSBmb3BlbihsY2tuYW0sInIiKTsgICAgICAgICAgICAvKiBT ZWUgaWYgbG9ja2ZpbGUgZXhpc3RzICovCisgICAgaWYgKHJmcCkgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgc28uLi4gKi8KKyAgICAgICAgcnNldChwaWRidWYsIiIsNjQsMCk7Cisg ICAgICAgIHggPSBmcmVhZChwaWRidWYsMSw2MyxyZnApOyAgICAgLyogUmVhZCBJRCBzdHJpbmcg ZnJvbSBpdCAqLworICAgICAgICBmY2xvc2UocmZwKTsgICAgICAgICAgICAgICAgICAgIC8qIGFu ZCBjbG9zZSBpdCBxdWlja2x5ICovCisgICAgICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9jayBl eGlzdHMiLHBpZGJ1ZiwwKTsKKyAgICAgICAgaWYgKHggPiAwKSB7ICAgICAgICAgICAgICAgICAg ICAvKiBJZiB3ZSBoYXZlIGEgUElELCBjaGVjayBpdCAqLworICAgICAgICAgICAgY2hhciAqIHMg PSBwaWRidWY7CisgICAgICAgICAgICB3aGlsZSAoKnMpIHsKKyAgICAgICAgICAgICAgICBpZiAo aXNsb3dlcigqcykpICpzID0gdG91cHBlcigqcyk7CisgICAgICAgICAgICAgICAgaWYgKCpzID09 ICc6JykgeworICAgICAgICAgICAgICAgICAgICAqcyA9IE5VTDsKKyAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2NrIElQIixwaWRidWYsMCk7CisgICAgICAgICAgICAg ICAgICAgIGRlYnVnKEYxMTAsImd0ZXNsb3QgbXkgICBJUCIsbXloZXhpcCwwKTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKCFzdHJjbXAocGlkYnVmLG15aGV4aXApKSB7IC8qIFNhbWUgSVAgYWRk cmVzcz8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2twaWQgPSBhdG9sKHMrMSk7IC8q IFllcywgbm93IGdldCBQSUQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEs ImdldHNsb3QgbG9ja3BpZCIsIiIsbG9ja3BpZCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg IC8qIENoZWNrIGlmIFBJRCBsb2NrcGlkIG9uIHRoaXMgY29tcHV0ZXIgaXMgYWxpdmUgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIHggPSB6Y2hrcGlkKGxvY2twaWQpOworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKCF4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWco RjEwMCwiZ2V0c2xvdCBQSUQgc3RhbGUscmVtb3ZpbmcgbG9jayIsIiIsMCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5saW5rKGxja25hbSk7CisgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICB9 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGxvY2tm aWxlIG9wZW4gZmFpbHVyZSIsbGNrbmFtLGVycm5vKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAv KiBUcnkgSUtfTENLVFJJRVMgKDE2KSB0aW1lcyB0byByZW5hbWUgdGVtcCBmaWxlIHRvIGxvY2tm aWxlICovCisKKyAgICBmb3IgKHRyaWVzID0gSUtfTENLVFJJRVM7IHRyaWVzID4gMDsgdHJpZXMt LSkgeworICAgICAgICBpZiAoenJlbmFtZSh0bXBsY2ssbGNrbmFtKSA9PSAwKQorICAgICAgICAg IGJyZWFrOworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGRhdGFiYXNlIGxvY2tlZCBieSBw aWQiLCAiIiwgZGJwaWQpOworICAgICAgICBzbGVlcChJS19MQ0tTTEVFUCk7CisgICAgfQorICAg IGlmICh0cmllcyA8IDEpIHsgICAgICAgICAgICAgICAgICAgIC8qIENvdWxkbid0ICovCisgICAg ICAgIGRlYnVnKEYxMTAsImdldHNsb3QgY3JlYXRlIGxvY2sgZmFpbHVyZSIsbGNrbmFtLDApOwor ICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAvKiBIYXZlIGxvY2ssIG9wZW4gZGF0YWJh c2UgKi8KKworICAgIGRlYnVnKEYxMTAsImdldHNsb3QgaGFzIGxvY2siLGxja25hbSwwKTsgLyog SGF2ZSBsb2NrICovCisKKyAgICBpZiAoIWRiZmlsZSkKKyAgICAgIHJldHVybigtMSk7CisKKyAg ICAvKiBJZiBkYXRhYmFzZSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQuICovCisKKyAgICBkZWJ1 ZyhGMTEwLCJnZXRzbG90IGRiZmlsZSIsZGJmaWxlLDApOworICAgIGlmICh6Y2hraShkYmZpbGUp IDwgMCkgeworICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGNyZWF0aW5nIG5ldyBkYXRhYmFz ZSIsZGJmaWxlLDApOworICAgICAgICB4ID0gY3JlYXQoZGJmaWxlLDA2NjApOworICAgICAgICBp ZiAoeCA8IDApIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgY3JlYXQoKSBmYWls ZWQiLCBkYmZpbGUsIGVycm5vKTsKKyAgICAgICAgICAgIGdvdG8geHNsb3Q7CisgICAgICAgIH0K KyAgICAgICAgY2xvc2UoeCk7CisgICAgfQorICAgIGRiZnAgPSBmb3BlbihkYmZpbGUsdXBkbW9k ZSk7ICAgICAgIC8qIE9wZW4gaXQgaW4gdXBkYXRlIG1vZGUgKi8KKyAgICBpZiAoIWRiZnApIHsK KyAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBmb3BlbiBmYWlsZWQiLGRiZmlsZSxlcnJubyk7 CisgICAgICAgIGdvdG8geHNsb3Q7CisgICAgfQorICAgIC8qIE5vdyBmaW5kIGEgZnJlZSAob3Ig bmV3KSBzbG90Li4uICovCisKKyAgICBkYmxhc3R1c2VkID0gMEw7ICAgICAgICAgICAgICAgICAg ICAvKiBTZWVrIHBvaW50ZXIgdG8gbGFzdCByZWNvcmQgaW51c2UgKi8KKyAgICBteWRic2VlayA9 IDBMOyAgICAgICAgICAgICAgICAgICAgICAvKiBTZWVrIHBvaW50ZXIgZm9yIG15IHJlY29yZCAq LworCisgICAgLyogUXVpY2tseSByZWFkIHRoZSB3aG9sZSBkYXRhYmFzZTsgbiA9IHJlY29yZCBj b3VudGVyLCBpID0gc2VlayBwb2ludGVyICovCisKKyAgICBmb3IgKG4gPSAwLCBpID0gMDsgIWZl b2YoZGJmcCk7IGkgKz0gREJfUkVDTCwgbisrKSB7CisgICAgICAgIHggPSBmcmVhZChkYnJlYywx LERCX1JFQ0wsZGJmcCk7IC8qIFJlYWQgYSByZWNvcmQgKi8KKyAgICAgICAgaWYgKHggPCAxKSAg ICAgICAgICAgICAgICAgICAgICAvKiBFT0Ygbm90IGNhdWdodCBieSBmZW9mKCkgKi8KKyAgICAg ICAgICBicmVhazsKKyNpZm5kZWYgTk9GVFJVTkNBVEUKKyAgICAgICAgaWYgKHggIT0gREJfUkVD TCkgeyAgICAgICAgICAgICAvKiBXYXRjaCBvdXQgZm9yIHRyYWlsaW5nIGp1bmsgKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgYmFkIHNpemUiLCIiLHgpOyAgLyogKFNob3VsZG4n dCBoYXBwZW4uLi4pICovCisjaWZkZWYgQ09IRVJFTlQKKyAgICAgICAgICAgIGNoc2l6ZShmaWxl bm8oZGJmcCksaSk7CisjZWxzZQorICAgICAgICAgICAgZnRydW5jYXRlKGZpbGVubyhkYmZwKSwo Q0tfT0ZGX1QpaSk7CisjZW5kaWYgLyogQ09IRVJFTlQgKi8KKyAgICAgICAgICAgIHggPSAwOwor ICAgICAgICAgICAgQ0tGU0VFSyhkYmZwLGksMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorI2VuZGlmIC8qIE5PRlRSVU5DQVRFICovCisgICAgICAgIGRlYnVnKEYxMDEsImdldHNs b3QgcmVjb3JkIiwiIixuKTsKKyAgICAgICAgayA9IGRiZmxkW2RiX0ZMQUdTXS5vZmY7CisgICAg ICAgIGogPSBkYmZsZFtkYl9GTEFHU10ubGVuOworICAgICAgICBkYmZsYWdzID0gaGV4dG91bG9u ZygmZGJyZWNba10saik7CisgICAgICAgIGRlYnVnKEYwMDEsImdldHNsb3QgZGJmbGFncyIsIiIs ZGJmbGFncyk7CisgICAgICAgIGsgPSBkYmZsZFtkYl9NWVBJRF0ub2ZmOworICAgICAgICBqID0g ZGJmbGRbZGJfTVlQSURdLmxlbjsKKyAgICAgICAgZGJwaWQgID0gaGV4dG91bG9uZygmZGJyZWNb a10saik7CisgICAgICAgIGRlYnVnKEYwMDEsImdldHNsb3QgZGJwaWQiLCIiLGRicGlkKTsKKyAg ICAgICAgayA9IGRiZmxkW2RiX1NBRERSXS5vZmY7CisgICAgICAgIGogPSBkYmZsZFtkYl9TQURE Ul0ubGVuOworICAgICAgICBkYmlwID0gaGV4dG91bG9uZygmZGJyZWNba10saik7CisgICAgICAg IGRlYnVnKEYwMDEsImdldHNsb3QgZGJpcCIsIiIsZGJpcCk7CisKKyAgICAgICAgaWYgKGRiZmxh Z3MgJiBEQkZfSU5VU0UpIHsgICAgICAvKiBSZW1lbWJlciBsYXN0IHNsb3QgaW4gdXNlICovCisg ICAgICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogTWFrZSBzdXJlIGl0J3Mg UkVBTExZIGluIHVzZSAqLworICAgICAgICAgICAgaWYgKGRicGlkID09IG15cGlkICYmIGRiaXAg PT0gbXlpcCkgeyAvKiBDaGVjayBmb3IgUElEID09IG15IFBJRCAqLworICAgICAgICAgICAgICAg IHggPSAxOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgcmVjb3JkIHBpZCIs IiIsZGJwaWQpOworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIE9y IGZvciBzdGFsZSBQSUQgKi8KKyAgICAgICAgICAgICAgICB4ID0gemNoa3BpZChkYnBpZCk7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCB6Y2hrcGlkKCkiLCIiLHgpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF4KSB7ICAgICAgICAgICAgICAgICAgIC8qIEJv Z3VzIHJlY29yZCAqLworICAgICAgICAgICAgICAgIHggPSBmcmVlc2xvdChuKTsKKyAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHN0YWxlIHJlY29yZCBwaWQ6IGZyZWVzbG90KCki LCIiLHgpOworICAgICAgICAgICAgICAgIGlmICh4ID4gLTEgJiYgIWhhdmVzbG90KQorICAgICAg ICAgICAgICAgICAgZGJmbGFncyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAg ICAgICAgICAgLyogSXQncyByZWFsbHkgaW4gdXNlICovCisgICAgICAgICAgICAgICAgZGJsYXN0 dXNlZCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFoYXZlc2xv dCkgeyAgICAgICAgICAgICAgICAvKiBJZiBJIGRvbid0IGhhdmUgYSBzbG90IHlldCAqLworICAg ICAgICAgICAgaWYgKCEoZGJmbGFncyAmIERCRl9JTlVTRSkpIHsgICAgICAgLyogQ2xhaW0gdGhp cyBvbmUgKi8KKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGZyZWUgc2xvdCIs ICIiLCBuKTsKKyAgICAgICAgICAgICAgICBoYXZlc2xvdCA9IDE7CisgICAgICAgICAgICAgICAg bXlkYnNlZWsgPSBpOworICAgICAgICAgICAgICAgIG15ZGJzbG90ID0gbjsgICAgICAgICAgIC8q IEJ1dCBrZWVwIGdvaW5nLi4uICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg ICAgLyogQ29tZSBoZXJlIHdpdGggaSA9PSBzZWVrIHBvaW50ZXIgdG8gZmlyc3QgcmVjb3JkIGFm dGVyIGVvZiAqLworCisgICAgaWYgKCFoYXZlc2xvdCkgeyAgICAgICAgICAgICAgICAgICAgLyog Rm91bmQgbm8gZnJlZSBzbG90IHNvIGFkZCB0byBlbmQgKi8KKyAgICAgICAgZGVidWcoRjEwMSwi Z2V0c2xvdCBuZXcgc2xvdCIsIiIsbik7CisgICAgICAgIGhhdmVzbG90ID0gMTsKKyAgICAgICAg bXlkYnNlZWsgPSBpOworICAgICAgICBteWRic2xvdCA9IG47CisgICAgfQorICAgIGlrZGJvcGVu ID0gMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIE9LIHRvIG1ha2UgZGF0YWJhc2UgZW50cmll cyAqLworICAgIGRlYnVnKEYxMDEsImdldHNsb3QgcmVjb3JkcyIsIiIsbik7CisgICAgZGVidWco RjEwMSwiZ2V0c2xvdCBkYmxhc3R1c2VkIiwiIixkYmxhc3R1c2VkKTsKKyAgICBkZWJ1ZyhGMTAx LCJnZXRzbG90IGkiLCIiLGkpOworCisgICAgLyogVHJpbSBzdGFsZSByZWNvcmRzIGZyb20gZW5k ICovCisKKyNpZm5kZWYgTk9GVFJVTkNBVEUKKyAgICBpZiAoaSA+IGRibGFzdHVzZWQrREJfUkVD TCkgeworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHRydW5jYXRpbmcgYXQiLCIiLGRibGFz dHVzZWQrREJfUkVDTCk7CisjaWZkZWYgQ09IRVJFTlQKKyAgICAgICAgeCA9IGNoc2l6ZShmaWxl bm8oZGJmcCksZGJsYXN0dXNlZCtEQl9SRUNMKTsKKyNlbHNlCisgICAgICAgIHggPSBmdHJ1bmNh dGUoZmlsZW5vKGRiZnApLChDS19PRkZfVCkoZGJsYXN0dXNlZCtEQl9SRUNMKSk7CisjZW5kaWYg LyogQ09IRVJFTlQgKi8KKyAgICAgICAgaWYgKHggPCAwKSAgICAgICAgICAgICAgICAgICAgICAv KiAoTm90IGZhdGFsKSAqLworICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgZnRydW5jYXRl IGZhaWxlZCIsICIiLCBlcnJubyk7CisgICAgfQorI2VuZGlmIC8qIE5PRlRSVU5DQVRFICovCisK KyAgICAvKiBJbml0aWFsaXplIG15IHJlY29yZCAqLworCisgICAgaWYgKGluaXRzbG90KG15ZGJz bG90KSA8IDApIHsKKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBpbml0c2xvdCgpIGVycm9y IiwiIixuKTsKKyAgICAgICAgaWtkYm9wZW4gPSAwOworICAgICAgICBnb3RvIHhzbG90OworICAg IH0KKyAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IE9LIiwiIixteWRic2xvdCk7CisgICAgcmMgPSBt eWRic2xvdDsgICAgICAgICAgICAgICAgICAgICAgLyogT0sgcmV0dXJuIGNvZGUgKi8KKworICB4 c2xvdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVubG9jayB0aGUgZGF0YWJh c2UgYW5kIHJldHVybiAqLworICAgIGlmICh1bmxpbmsobGNrbmFtKSA8IDApIHsKKyAgICAgICAg ZGVidWcoRjExMSwiZ2V0c2xvdCBsb2NrZmlsZSByZW1vdmFsIGZhaWxlZCIsbGNrbmFtLGVycm5v KTsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAv KiBJS1NEQiAqLworI2VuZGlmIC8qIE5PSUtTRCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4w LjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXN4LmMucHJpbnR3IGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3guYy5wcmludHcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzMmJlZAotLS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQt OS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1dXN4LmMucHJpbnR3CkBAIC0wLDAgKzEs OTcxOCBAQAorI2luY2x1ZGUgImNrY3N5bS5oIgorCisvKiAgQyBLIFUgVSBTIFggLS0gICJVc2Vy IEludGVyZmFjZSIgY29tbW9uIGZ1bmN0aW9ucy4gKi8KKworLyoKKyAgQXV0aG9yczoKKyAgICBG cmFuayBkYSBDcnV6IDxmZGNAY29sdW1iaWEuZWR1PiwKKyAgICAgIFRoZSBLZXJtaXQgUHJvamVj dCwgQ29sdW1iaWEgVW5pdmVyc2l0eSwgTmV3IFlvcmsgQ2l0eQorICAgIEplZmZyZXkgRSBBbHRt YW4gPGphbHRtYW5Ac2VjdXJlLWVuZHBvaW50cy5jb20+CisgICAgICBTZWN1cmUgRW5kcG9pbnRz IEluYy4sIE5ldyBZb3JrIENpdHkKKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCisgICAg VHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9yay4K KyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRYVCBm aWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUgZm9y IGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyoKKyAgVGhpcyBtb2R1bGUgY29u dGFpbnMgdXNlciBpbnRlcmZhY2UgZnVuY3Rpb25zIG5lZWRlZCBieSBib3RoIHRoZSBpbnRlcmFj dGl2ZQorICB1c2VyIGludGVyZmFjZSBhbmQgdGhlIGNvbW1hbmQtbGluZS1vbmx5IHVzZXIgaW50 ZXJmYWNlLCBhcyB3ZWxsIGFzIHRoZQorICBzY3JlZW4tY29udHJvbCByb3V0aW5lcyAoY3Vyc2Vz IGFuZCBlcXVpdmFsZW50KS4KKyovCisKKy8qIEluY2x1ZGVzICovCisKKyNpbmNsdWRlICJja2Nk ZWIuaCIKKyNpbmNsdWRlICJja2Nhc2MuaCIKKyNpbmNsdWRlICJja2NrZXIuaCIKKyNpbmNsdWRl ICJja3V1c3IuaCIKKyNpbmNsdWRlICJja2N4bGEuaCIKKworI2lmbmRlZiBOT0hURVJNQ0FQCisj aWZkZWYgTk9URVJNQ0FQCisjZGVmaW5lIE5PSFRFUk1DQVAKKyNlbHNlCisjaWZuZGVmIEJTRDQ0 CisjZGVmaW5lIE5PSFRFUk1DQVAKKyNlbHNlCisjaWZkZWYgX19ic2RpX18KKyNkZWZpbmUgTk9I VEVSTUNBUAorI2Vsc2UKKyNpZmRlZiBPUEVOQlNECisjZGVmaW5lIE5PSFRFUk1DQVAKKyNlbHNl CisjaWZkZWYgTUFDT1NYCisjZGVmaW5lIE5PSFRFUk1DQVAKKyNlbmRpZiAvKiBNQUNPU1ggKi8K KyNlbmRpZiAvKiBPUEVOQlNEICovCisjZW5kaWYgLyogX19ic2RpX18gKi8KKyNlbmRpZiAvKiBC U0Q0NCAqLworI2VuZGlmIC8qIE5PVEVSTUNBUCAqLworI2VuZGlmIC8qIE5PSFRFUk1DQVAgKi8K KworI2lmbmRlZiBOT1RFUk1DQVAKKyNpZmRlZiBCU0Q0NAorI2lmbmRlZiBOT0hURVJNQ0FQCisj aW5jbHVkZSA8dGVybWNhcC5oPgorI2VuZGlmIC8qIE5PSFRFUk1DQVAgKi8KKyNlbmRpZiAvKiBC U0Q0NCAqLworI2Vsc2UgIC8qICFCU0Q0NCAqLworI2lmZGVmIGxpbnV4CisjaW5jbHVkZSA8dGVy bS5oPgorI2VuZGlmIC8qIGxpbnV4ICovCisjZW5kaWYgLyogTk9URVJNQ0FQICovCisKKyNpZmRl ZiBPUzIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KK19QUk9UT1RZUChjaGFyICogb3MyX2dldGhvc3Ru YW1lLCAodm9pZCkpOworI2RlZmluZSBnZXRwaWQgX2dldHBpZAorI2VuZGlmIC8qIE9TMiAqLwor I2lmZGVmIEJTRDQ0CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZiAvKiBCU0Q0NCAqLworCitl eHRlcm4geHhfc3RycCB4eHN0cmluZzsKKworI2lmZGVmIE9TMgorI2luY2x1ZGUgImNrY25ldC5o IgorI2Vsc2UgLyogT1MyICovCitfUFJPVE9UWVAoIGNoYXIgKiBja2dldHBlZXIsIChWT0lEKSk7 CitfUFJPVE9UWVAoaW50IGdldGxvY2FsaXBhZGRyLCAodm9pZCkpOworX1BST1RPVFlQKGludCBp c3RuY29tcG9ydCwgKHZvaWQpKTsKKyNpZm5kZWYgTk9DS0dFVEZRSE9TVAorX1BST1RPVFlQKCBj aGFyICogY2tnZXRmcWhvc3RuYW1lLChjaGFyICopKTsKKyNlbmRpZgkvKiBOT0NLR0VURlFIT1NU ICovCisjaWZuZGVmIE5FVENPTk4KKy8qCisgIFdlIHNob3VsZCBqdXN0IHB1bGwgaW4gY2tjbmV0 LmggaGVyZSwgYnV0IGl0IGNhdXNlcyBhIGNvbmZsaWN0IHdpdGggY3Vyc2VzLmguCisqLworI2lm ZGVmIFRDUFNPQ0tFVAorI2RlZmluZSBORVRDT05OCisjZWxzZQorI2lmZGVmIFNVTlgyNQorI2Rl ZmluZSBORVRDT05OCisjZWxzZQorI2lmZGVmIFNUUkFUVVNYMjUKKyNkZWZpbmUgTkVUQ09OTgor I2Vsc2UKKyNpZmRlZiBJQk1YMjUKKyNkZWZpbmUgTkVUQ09OTgorI2Vsc2UKKyNpZmRlZiBIUFgy NQorI2RlZmluZSBORVRDT05OCisjZWxzZQorI2lmZGVmIERFQ05FVAorI2RlZmluZSBORVRDT05O CisjZWxzZQorI2lmZGVmIE5QSVBFCisjZGVmaW5lIE5FVENPTk4KKyNlbHNlCisjaWZkZWYgQ0tf TkVUQklPUworI2RlZmluZSBORVRDT05OCisjaWZkZWYgU1VQRVJMQVQKKyNkZWZpbmUgTkVUQ09O TgorI2Vsc2UKKyNlbmRpZiAvKiBTVVBFUkxBVCAqLworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLwor I2VuZGlmIC8qIFNVTlgyNSAqLworI2VuZGlmIC8qIFNUUkFUVVNYMjUgKi8KKyNlbmRpZiAvKiBJ Qk1YMjUgKi8KKyNlbmRpZiAvKiBIUFgyNSAqLworI2VuZGlmIC8qIERFQ05FVCAqLworI2VuZGlm IC8qIE5QSVBFICovCisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworI2VuZGlmIC8qIE5FVENPTk4g Ki8KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBUQ1BTT0NLRVQKKyNpZmRlZiBNVUxUSU5F VAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBNVUxUSU5FVCAqLworI2lmZGVmIERFQ19U Q1BJUAorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBERUNfVENQSVAgKi8KKyNpZmRlZiBX SU5UQ1AKKyNkZWZpbmUgVENQU09DS0VUCisjZW5kaWYgLyogV0lOVENQICovCisjaWZkZWYgVENQ V0FSRQorI2RlZmluZSBUQ1BTT0NLRVQKKyNlbmRpZiAvKiBUQ1BXQVJFICovCisjZW5kaWYgLyog VENQU09DS0VUICovCisKKyNpZmRlZiBPUzIKKyNpZmRlZiBOVAorI2luY2x1ZGUgPHdpbmRvd3Mu aD4KKyNpbmNsdWRlIDx0YXBpLmg+CisjaW5jbHVkZSAiY2tudGFwLmgiCisjZWxzZSAvKiBOVCAq LworI2RlZmluZSBJTkNMX1ZJTworI2luY2x1ZGUgPG9zMi5oPgorI2VuZGlmIC8qIE5UICovCisj aWZkZWYgQ09NTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV291bGQgeW91IGJlbGll dmUgKi8KKyN1bmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA8b3MyLmg+ IGRlZmluZXMgdGhpcyA/ICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworI2lmZGVmIENLX05FVEJJ T1MKKyNpbmNsdWRlICJja29uYmkuaCIKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisKKyNpbmNs dWRlICJja29jb24uaCIKK2V4dGVybiBhc2NyZWVuIGNvbW1hbmRzY3JlZW47CisjaWZkZWYgS1VJ CisjaW5jbHVkZSAiaWt1aS5oIgorI2VuZGlmIC8qIEtVSSAqLworI2VuZGlmIC8qIE9TMiAqLwor CisjaWZkZWYgTlQKKyNpbmNsdWRlICJja253aW4uaCIKKyNlbmRpZiAvKiBOVCAqLworI2lmZGVm IE9TMgorI2luY2x1ZGUgImNrb3dpbi5oIgorI2luY2x1ZGUgImNrb3N5bi5oIgorI2VuZGlmIC8q IE9TMiAqLworCisjaWZkZWYgQ0tfVEFQSQorZXh0ZXJuIGludCB0dHRhcGk7CitleHRlcm4gaW50 IHRhcGlwYXNzOworI2VuZGlmIC8qIENLX1RBUEkgKi8KKworI2lmZGVmIENLX0tFUkJFUk9TCisj aW5jbHVkZSAiY2t1YXRoLmgiCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKworI2lmbmRlZiBX SU5UQ1AKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZiAvKiBXSU5UQ1AgKi8KKworI2lmZGVm IFZNUworI2luY2x1ZGUgPGRlc2NyaXAuaD4KKyNpbmNsdWRlIDxzc2RlZi5oPgorI2luY2x1ZGUg PHN0c2RlZi5oPgorI2lmbmRlZiBPTERfVk1TCisjaW5jbHVkZSA8bGliJHJvdXRpbmVzLmg+ICAv KiBOb3QgZm9yIFZBWCBDIDIuMyAqLworI2Vsc2UKKyNpbmNsdWRlIDxsaWJkZWYuaD4KKyNlbmRp ZiAvKiBPTERfVk1TICovCisjaWZkZWYgV0lOVENQCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5k aWYgLyogV0lOVENQICovCisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBEQ0xGRE9QRU4KKy8q IGZkb3BlbigpIG5lZWRzIGRlY2xhcmluZyBiZWNhdXNlIGl0J3Mgbm90IGRlY2xhcmVkIGluIDxz dGRpby5oPiAqLworX1BST1RPVFlQKCBGSUxFICogZmRvcGVuLCAoaW50LCBjaGFyICopICk7Cisj ZW5kaWYgLyogRENMRkRPUEVOICovCisKKyNpZmRlZiBEQ0xQT1BFTgorLyogcG9wZW4oKSBuZWVk cyBkZWNsYXJpbmcgYmVjYXVzZSBpdCdzIG5vdCBkZWNsYXJlZCBpbiA8c3RkaW8uaD4gKi8KK19Q Uk9UT1RZUCggRklMRSAqIHBvcGVuLCAoY2hhciAqLCBjaGFyICopICk7CisjZW5kaWYgLyogRENM UE9QRU4gKi8KKworaW50IHR0X2NyZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENh cnJpYWdlIHJldHVybiBkaXNwbGF5ICovCitpbnQgdHRfbGZkID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgLyogTGluZWZlZWQgZGlzcGxheSAqLworaW50IGludGVycnVwdGVkID0gMDsgICAg ICAgICAgICAgICAgICAgIC8qIEludGVycnVwdGVkIGZyb20ga2V5Ym9hcmQgZmxhZyAqLworaW50 IGZ4ZF9pbml0ZWQgPSAwOwkJCS8qIEZ1bGxzY3JlZW4gc3R1ZmYgaW5pdGlhbGl6ZWQgKi8KKwor I2lmZGVmIERFQlVHCitjaGFyIGRlYmZpbFtDS01BWFBBVEgrMV07ICAgICAgICAgICAgICAgLyog RGVidWdnaW5nIGxvZyBmaWxlIG5hbWUgKi8KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYg VExPRworY2hhciB0cmFmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAgIC8qIFRyYW5zYWN0 aW9uIGxvZyBmaWxlIG5hbWUgKi8KKyNlbmRpZiAvKiBUTE9HICovCisKK2NoYXIgc2VzZmlsW0NL TUFYUEFUSCsxXTsgICAgICAgICAgICAgICAvKiBTZXNzaW9uIGxvZyBmaWxlIG5hbWUgKi8KKwor I2lmZGVmIENLTE9HRElBTAorY2hhciBkaWFmaWxbQ0tNQVhQQVRIKzFdOyAgICAgICAgICAgICAg IC8qIENvbm5lY3Rpb24gbG9nIGZpbGUgbmFtZSAqLworY2hhciBjeGxvZ2J1ZltDWExPR0JVRkwr MV07ICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gbG9nIHJlY29yZCBidWZmZXIgKi8KK2ludCBj eF9hY3RpdmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBDb25uZWN0aW9uIGlzIGFjdGl2 ZSAqLworZXh0ZXJuIGludCBkaWFsb2c7CisjZW5kaWYgLyogQ0tMT0dESUFMICovCisKKyNpZmRl ZiBEWU5BTUlDCitzdGF0aWMgY2hhciAqY21kc3RyID0gTlVMTDsgICAgICAgICAgICAgLyogUGxh Y2UgdG8gYnVpbGQgZ2VuZXJpYyBjb21tYW5kICovCisjZWxzZQorI2lmZGVmIHBkcDExCitzdGF0 aWMgY2hhciBjbWRzdHJbMjU2XTsKKyNlbHNlCitzdGF0aWMgY2hhciBjbWRzdHJbNDA5Nl07Cisj ZW5kaWYgLyogcGRwMTEgKi8KKyNlbmRpZiAvKiBEWU5BTUlDICovCisKKyNpZm5kZWYgTk9NU0VO RAorY2hhciBmc3BlY1tDTURCTCs0XTsgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lIHN0 cmluZyBmb3IgXHYoZmlsZXNwZWMpICovCitpbnQgZnNwZWNsZW4gPSBDTURCTDsKKyNlbHNlCitj aGFyIGZzcGVjW0NLTUFYUEFUSCs0XTsKK2ludCBmc3BlY2xlbiA9IENLTUFYUEFUSDsKKyNlbmRp ZiAvKiBOT01TRU5EICovCisKK2NoYXIgKiByZnNwZWMgPSBOVUxMOwkJCS8qIFJlY2VpdmVkIGZp bGVzcGVjOiBsb2NhbCAqLworY2hhciAqIHByZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5 IHJmc3BlYyAqLworY2hhciAqIHNmc3BlYyA9IE5VTEw7CQkJLyogU2VudCBmaWxlc3BlYzogbG9j YWwgKi8KK2NoYXIgKiBwc2ZzcGVjID0gTlVMTDsJCQkvKiBQcmVsaW1pbmFyeSBzZnNwZWMgKi8K K2NoYXIgKiBzcmZzcGVjID0gTlVMTDsJCQkvKiBSZWNlaXZlZCBmaWxlc3BlYzogcmVtb3RlICov CitjaGFyICogcHNyZnNwZWMgPSBOVUxMOwkJCS8qIFByZWxpbWluYXJ5IHNyZnNwZWMgKi8KK2No YXIgKiBycmZzcGVjID0gTlVMTDsJCQkvKiBTZW50IGZpbGVzcGVjOiByZW1vdGUgKi8KK2NoYXIg KiBwcnJmc3BlYyA9IE5VTEw7CQkJLyogUHJlbGltaW5hcnkgcnJmc3BlYyAqLworCitpbnQgc3Vj Y2VzcyA9IDEsICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBzdWNjZXNzL2ZhaWx1 cmUgZmxhZyAqLworICAgIGNtZGx2bCA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENv bW1hbmQgbGV2ZWwgKi8KKyAgICBhY3Rpb24gPSAwLAkJCQkvKiBBY3Rpb24gc2VsZWN0ZWQgb24g Y29tbWFuZCBsaW5lICovCisgICAgc2xvZ3RzID0gMCwJCQkJLyogU2Vzc2lvbi1sb2cgdGltZXN0 YW1wcyBvbi9vZmYgKi8KKyAgICBzbG9nbnVsID0gMCwJCQkvKiBTZXNzaW9uLWxvZyBudWxsLXRl cm1pbmF0ZWQgbGluZXMgKi8KKyNpZmRlZiBVTklYCisgICAgc2Vzc2Z0ID0gWFlGVF9ULCAgICAg ICAgICAgICAgICAgICAgLyogU2Vzc2lvbiBsb2cgZmlsZSB0eXBlICovCisjZWxzZQorICAgIHNl c3NmdCA9IFhZRlRfQiwJCQkvKiAodGV4dCBmb3IgVU5JWCBiaW5hcnkgZm9yIG90aGVycykgKi8K KyNlbmRpZiAvKiBVTklYICovCisgICAgcGZsYWcgPSAxLCAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogUHJpbnQgcHJvbXB0ICovCisgICAgbXNnZmxnID0gMTsgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAqLworCitleHRlcm4gaW50IHhh c2ttb3JlLCBzYXZlYXNrOwkJLyogTW9yZS1wcm9tcHRpbmcgKi8KKworI2lmZGVmIENLX0FQQwor ZXh0ZXJuIGludCBhcGNhY3RpdmU7CisjZW5kaWYgLyogQ0tfQVBDICovCisvKiBFeHRlcm5hbCB2 YXJpYWJsZXMgKi8KKworZXh0ZXJuIGludCBsb2NhbCwgcXVpZXQsIGJpbmFyeSwgbmV0d29yaywg d2hhdCwgcGFyaXR5LCB4aXRzdGEsIGVzY2FwZSwKKyAgdGxldmVsLCBiZ3NldCwgYmFja2dyZCwg eHN1c3BlbmQsIGNtZGludCwgbmV0dHlwZSwgc2VzbG9nLCBkZmxvYzsKKworZXh0ZXJuIGludCBj bWRfcm93cywgY21kX2NvbHMsIHhjbWRzcmM7CisKK2V4dGVybiBjaGFyIGNtZGZpbFtdOworCisj aWZkZWYgVk1TCitleHRlcm4gaW50IGJhdGNoOworI2VuZGlmIC8qIFZNUyAqLworCisjaWZkZWYg ZGF0YWdlbmVyYWwgICAgICAgICAgICAgICAgICAgICAgLyogMi8xMi85MiBFTkggKi8KKyNpbmNs dWRlIDxzeXNpZC5oPgorZXh0ZXJuIGludCBjb25fcmVhZHNfbXQsIGNvbmludF9jaCwgY29uaW50 X2F2bDsKKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCitleHRlcm4gbG9uZyBzcGVlZDsKKwor ZXh0ZXJuIGNoYXIgdHRuYW1lW10sICpkZnR0eSwgKmNtYXJnLCAqKmNtbGlzdCwgKnZlcnNpbywg bXlob3N0W107CisKKyNpZm5kZWYgTk9DU0VUUworZXh0ZXJuIGludCBmY2hhcnNldCwgdGNoYXJz ZXQsIHhmcnhsYTsKK2V4dGVybiBzdHJ1Y3QgY3NpbmZvIGZjc2luZm9bXSwgdGNzaW5mb1tdOwor I2VuZGlmIC8qIE5PQ1NFVFMgKi8KKworI2lmZGVmIE9TMgorZXh0ZXJuIHVuc2lnbmVkIGNoYXIg Y29sb3JjbWQ7CisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBOT1hGRVIKKworaW50IGZkaXNw bGEgPSBYWUZEX047CisKKyNlbHNlICAvKiBOT1hGRVIgaXMgbm90IGRlZmluZWQgKi8KKworI2lm ZGVmIE9TMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHJhbnNmZXIgZGlz cGxheSB0eXBlICovCitpbnQgZmRpc3BsYSA9IFhZRkRfQzsgICAgICAgICAgICAgICAgICAgLyog Q3Vyc2VzIChmdWxsc2NyZWVuKSBpZiB3ZSBoYXZlIGl0ICovCisjZWxzZQorI2lmZGVmIENLX0NV UlNFUworaW50IGZkaXNwbGEgPSBYWUZEX0M7CisjZWxzZQoraW50IGZkaXNwbGEgPSBYWUZEX1M7 ICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBDUlQgKi8KKyNlbmRpZiAvKiBDS19DVVJT RVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKworZXh0ZXJuIHN0cnVjdCBja19wIHB0YWJbXTsKK2V4 dGVybiBpbnQgcHJvdG9jb2wsIHhmcmJlbCwgeGZyaW50OworCisjaWZkZWYgU1RSRUFNSU5HCitl eHRlcm4gaW50IHN0cmVhbWluZywgc3RyZWFtb2s7CisjZW5kaWYgLyogU1RSRUFNSU5HICovCisK Ky8qIFVzZWQgaW50ZXJuYWxseSAqLworCisjaWZkZWYgS1VJCitfUFJPVE9UWVAoIFZPSUQgc2Ny ZWVuZywgKGludCwgY2hhciwgbG9uZywgY2hhciAqKSApOworI2VuZGlmCS8qIEtVSSAqLworX1BS T1RPVFlQKCBWT0lEIHNjcmVlbmMsIChpbnQsIGNoYXIsIENLX09GRl9ULCBjaGFyICopICk7CisK KworI2lmZGVmIENLX0NVUlNFUworI2lmbmRlZiBEWU5BTUlDCitzdGF0aWMgY2hhciB4dHJtYnVm W1RSTUJVRkxdOyAgICAgICAgICAgLyogdGdldGVudCgpIGJ1ZmZlciAqLworY2hhciAqIHRybWJ1 ZiA9IHh0cm1idWY7CisjZWxzZQorY2hhciAqIHRybWJ1ZiA9IE5VTEw7CisjZW5kaWYgLyogRFlO QU1JQyAqLworX1BST1RPVFlQKCBzdGF0aWMgVk9JRCBkcHlpbml0LCAodm9pZCkgKTsKK19QUk9U T1RZUCggc3RhdGljIGxvbmcgc2hvY3BzLCAoaW50LCBDS19PRkZfVCwgQ0tfT0ZGX1QpICk7Citf UFJPVE9UWVAoIHN0YXRpYyBDS19PRkZfVCBzaG9ldGwsIChDS19PRkZfVCwgbG9uZywgQ0tfT0ZG X1QsIENLX09GRl9UKSApOworI2VuZGlmIC8qIENLX0NVUlNFUyAqLworCitzdGF0aWMgaW50IGZ0 X3dpbiA9IDA7ICAvKiBGdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheSB3aW5kb3cgaXMg YWN0aXZlICovCisKKy8qIFZhcmlhYmxlcyBkZWNsYXJlZCBoZXJlICovCisKK3N0YXRpYyBjaGFy ICogc2tyZWFzb25bXSA9IHsKKyAgICAiIiwJCQkJCS8qIDAgKi8KKyAgICAiUmVtb3RlIGZpbGUg bm90IG9sZGVyIiwJCS8qIFNLUF9EQVQgKi8KKyAgICAiSWRlbnRpY2FsIG1vZGlmaWNhdGlvbiB0 aW1lcyIsCS8qIFNLUF9FUVUgKi8KKyAgICAiVHlwZSIsCQkJCS8qIFNLUF9UWVAgKi8KKyAgICAi U2l6ZSIsCQkJCS8qIFNLUF9TSVogKi8KKyAgICAiTmFtZSBjb2xsaXNpb24iLAkJCS8qIFNLUF9O QU0gKi8KKyAgICAiRXhjZXB0aW9uIExpc3QiLAkJCS8qIFNLUF9FWEwgKi8KKyAgICAiRG90IGZp bGUiLAkJCQkvKiBTS1BfRE9UICovCisgICAgIkJhY2t1cCBmaWxlIiwJCQkvKiBTS1BfQktVICov CisgICAgIlJlY292ZXJ5IG5vdCBuZWVkZWQiLAkJLyogU0tQX1JFUyAqLworICAgICJBY2Nlc3Mg ZGVuaWVkIiwJCQkvKiBTS1BfQUNDICovCisgICAgIk5vdCBhIHJlZ3VsYXIgZmlsZSIsCQkvKiBT S1BfTlJGICovCisgICAgIlNpbXVsYXRlZCIsCQkJLyogU0tQX1NJTSAqLworICAgICJTaW11bGF0 ZWQgLSBSZW1vdGUgZmlsZSBvbGRlciIsCS8qIFNLUF9YVVAgKi8KKyAgICAiU2ltdWxhdGVkIC0g Tm8gcmVtb3RlIGZpbGUiLAkvKiBTS1BfWE5YICovCit9Oworc3RhdGljIGludCBuc2tyZWFzb24g PSAoc2l6ZW9mKHNrcmVhc29uKSAvIHNpemVvZihjaGFyICopKTsKKworY2hhciAqCitnc2tyZWFz b24obikgaW50IG47IHsKKyAgICByZXR1cm4oKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pID8gc2ty ZWFzb25bbl0gOiAiIik7Cit9CisKK2NoYXIgcGt0ZmlsW0NLTUFYUEFUSCsxXTsgICAgICAgICAg ICAgICAvKiBQYWNrZXQgbG9nIGZpbGUgbmFtZSAqLworCisjaWZuZGVmIE5PTVNFTkQgICAgICAg ICAgICAgICAgICAgICAgICAgLyogTXVsdGlwbGUgU0VORCAqLworY2hhciAqbXNmaWxlc1tNU0VO RE1BWF07CisjZW5kaWYgLyogTk9NU0VORCAqLworCisjaWZkZWYgQ0tfVElNRVJTCitleHRlcm4g bG9uZyBydHRkZWxheTsKK2V4dGVybiBpbnQgIHJ0dGZsZzsKKyNlbmRpZiAvKiBDS19USU1FUlMg Ki8KK2V4dGVybiBpbnQgcmN2dGltbzsKKworI2lmZGVmIENLX1JFU0VORAorZXh0ZXJuIGludCBz ZW5kbW9kZTsKK2V4dGVybiBDS19PRkZfVCBzZW5kc3RhcnQsIHJzX2xlbjsKKyNlbmRpZiAvKiBD S19SRVNFTkQgKi8KKworI2lmZGVmIENLX1BDVF9CQVIgICAgICAgICAgICAgICAgICAgICAgIC8q IEZpbGUgdHJhbnNmZXIgdGhlcm1vbWV0ZXIgKi8KK2ludCB0aGVybW9tZXRlciA9IDE7ICAgICAg ICAgICAgICAgICAgICAvKiBPTiBieSBkZWZhdWx0ICovCisjZW5kaWYgLyogQ0tfUENUX0JBUiAq LworCisjaWZkZWYgR0ZUSU1FUgorQ0tGTE9BVCBndHYgPSAtMS4wLCBvbGRndHYgPSAtMS4wOwor I2Vsc2UKKyNpZm5kZWYgT1MyCitzdGF0aWMKKyNlbmRpZiAvKiBPUzIgKi8KKyAgbG9uZyBndHYg PSAtMUwsIG9sZGd0diA9IC0xTDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisKK2V4dGVybiBpbnQg c2VydmVyLCBiY3R1LCBycHRmbGcsIGVicWZsZywgc3BzaXosIHVycHNpeiwgd21heCwgY3pzZWVu LCBjeHNlZW4sCisgIHdpbmxvLCBkaXNwbGEsIHRpbWludCwgbnBhZCwgZWJxLCBiY3RyLCBycHRx LCBhdGNhcHUsIGxwY2FwdSwKKyAgc3djYXB1LCB3c2xvdG4sIHdzbG90ciwgcnRpbW8sIG15cGFk biwgc3EsIGNhcGFzLCBycHNpeiwgdHNlY3MsCisgIHBrdGxvZywgbHNjYXB1LCBkZXN0LCBzcnZk aXMsIHdzbG90cywgc3BhY2tldHMsIHNwa3RsLCBycGt0bCwKKyAgcmV0cmFucywgd2N1ciwgbnVt ZXJycywgZnNlY3MsIHdoYXRydSwgY3J1bmNoZWQsIHRpbWVvdXRzLAorICBycGFja2V0cywgZm5j bnYsIGJ5ZV9hY3RpdmUsIGRpc2NhcmQsIGluc2VydmVyLCBkaXJhY3RpdmUsIGNkYWN0aXZlOwor CitleHRlcm4gbG9uZyBmaWxjbnQsIGZpbHJlaiwgcnB0biwgZmlsY3BzLCB0ZmNwcywgY3BzLCBw ZWFrY3BzOworZXh0ZXJuIENLX09GRl9UIGZmYywgdGZjLCBmc2l6ZTsgCisKK2xvbmcgb2xkY3Bz ID0gMEw7CisKK2V4dGVybiBDSEFSICpyZGF0YXAsIHBhZGNoLCBzZW9sLCBjdGxxLCBteXBhZGMs IGVvbCwgKmVwa3Rtc2c7CitleHRlcm4gY2hhciAqeGZybXNnOworCisjaWZkZWYgSUtTREIKK0ZJ TEUgKiBkYmZwID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHBvaW50ZXIgdG8g ZGF0YWJhc2UgZmlsZSAqLworCitpbnQgZGJlbmFibGVkID0gMTsgICAgICAgICAgICAgICAgICAg ICAgLyogRmxhZyBmb3IgZGF0YWJhc2UgaXMgZW5hYmxlZCAqLworZXh0ZXJuIGludCBpa2Rib3Bl bjsgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcgZm9yIGRhdGFiYXNlIGlzIG9wZW4gKi8KKwor dW5zaWduZWQgbG9uZyBteWRic2VlayA9IDBMOyAgICAgICAgICAgIC8qIFNlZWsgcG9pbnRlciB0 byBteSByZWNvcmQgKi8KK2ludCBteWRic2xvdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAv KiBNeSBzbG90IG51bWJlciAqLwordW5zaWduZWQgbG9uZyBteWZsYWdzID0gMEw7ICAgICAgICAg ICAgIC8qIE15IGZsYWdzICovCit1bnNpZ25lZCBsb25nIG15YXR5cGUgPSAwTDsgICAgICAgICAg ICAgLyogTXkgYXV0aG9yaXphdGlvbiB0eXBlICovCit1bnNpZ25lZCBsb25nIG15YW1vZGUgPSAw TDsgICAgICAgICAgICAgLyogTXkgYXV0aG9yaXphdGlvbiBtb2RlICovCit1bnNpZ25lZCBsb25n IG15c3RhdGUgPSAwTDsgICAgICAgICAgICAgLyogTXkgc3RhdGUgKFNFTkQsIFJFQ0VJVkUsIGV0 YykgKi8KK3Vuc2lnbmVkIGxvbmcgbXlwaWQgPSAwTDsgICAgICAgICAgICAgICAvKiBNeSBQSUQg Ki8KK3Vuc2lnbmVkIGxvbmcgbXlpcCA9IDBMOyAgICAgICAgICAgICAgICAvKiBNeSBJUCBhZGRy ZXNzICovCit1bnNpZ25lZCBsb25nIHBlZXJpcCA9IDBMOyAgICAgICAgICAgICAgLyogTXkgcGVl cidzIElQIGFkZHJlc3MgKi8KKwordW5zaWduZWQgbG9uZyBkYmlwID0gMEw7ICAgICAgICAgICAg ICAgIC8qIElQIGFkZHJlc3MgaW4gZGIgcmVjb3JkICovCit1bnNpZ25lZCBsb25nIGRicGlkID0g MEw7ICAgICAgICAgICAgICAgLyogUElEIGluIGRiIHJlY29yZCAqLwordW5zaWduZWQgbG9uZyBk YmZsYWdzID0gMEw7ICAgICAgICAgICAgIC8qIEZsYWdzIGZpZWxkIGluIGRiIHJlY29yZCAqLwor dW5zaWduZWQgbG9uZyBkYmxhc3R1c2VkID0gMEw7ICAgICAgICAgIC8qIExhc3QgaW4tdXNlIHJl Y29yZCBpbiBkYiAqLworY2hhciBkYnJlY1tEQl9SRUNMXTsgICAgICAgICAgICAgICAgICAgIC8q IERhdGFiYXNlIHJlY29yZCBidWZmZXIgKi8KKworY2hhciAqIGRiZGlyICAgPSBOVUxMOyAgICAg ICAgICAgICAgICAgIC8qIERhdGFiYXNlIGRpcmVjdG9yeSAqLworY2hhciAqIGRiZmlsZSAgPSBO VUxMOyAgICAgICAgICAgICAgICAgIC8qIERhdGFiYXNlIGZpbGUgZnVsbCBwYXRobmFtZSAqLwor Y2hhciBteWhleGlwWzMzXSA9IHsgTlVMLCBOVUwgfTsgICAgICAgIC8qIE15IElQIGFkZHJlc3Mg aW4gaGV4ICovCitjaGFyIHBlZXJoZXhpcFszM10gPSB7IE5VTCwgTlVMIH07ICAgICAgLyogQ2xp ZW50J3MgSVAgYWRkcmVzcyBpbiBoZXggKi8KKyNlbmRpZiAvKiBJS1NEQiAqLworCisjaWZkZWYg R0ZUSU1FUgorZXh0ZXJuIENLRkxPQVQgZnBmc2VjcywgZnB0c2VjcywgZnB4ZnNlY3M7CisjZWxz ZQorZXh0ZXJuIGxvbmcgeGZzZWNzOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyNlbmRpZiAvKiBO T1hGRVIgKi8KKworI2lmZGVmIFRDUFNPQ0tFVAorI2lmZGVmIE5FV0ZUUAorZXh0ZXJuIGNoYXIg KiBmdHBfaG9zdCwgZnRwX3NydnR5cFtdOworZXh0ZXJuIGludCBmdHBfY3N4LCBmdHBfY3NsLCBm dHBfZGViOworI2VuZGlmIC8qIE5FV0ZUUCAqLworZXh0ZXJuIGNoYXIgbXlpcGFkZHJbXTsKKyNl bmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT1NQTAorICAg IGV4dGVybiBzdHJ1Y3QgbXRhYiAqbWFjdGFiOyAgICAgICAgIC8qIEZvciBPTl9FWElUIG1hY3Jv LiAqLworICAgIGV4dGVybiBpbnQgbm1hYzsKKyNlbmRpZiAvKiBOT1NQTCAqLworI2lmZGVmIERD TURCVUYKK2V4dGVybiBjaGFyICpjbWRidWY7ICAgICAgICAgICAgICAgICAgICAvKiBDb21tYW5k IGJ1ZmZlciAqLworI2Vsc2UKK2V4dGVybiBjaGFyIGNtZGJ1ZltdOyAgICAgICAgICAgICAgICAg ICAvKiBDb21tYW5kIGJ1ZmZlciAqLworI2VuZGlmIC8qIERDTURCVUYgKi8KK2V4dGVybiBpbnQg Y21kX3F1b3Rpbmc7CisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0NDVFJBUAorI2lm ZGVmIE5UCisjaW5jbHVkZSA8c2V0am1wZXguaD4KKyNlbHNlIC8qIE5UICovCisjaW5jbHVkZSA8 c2V0am1wLmg+CisjZW5kaWYgLyogTlQgKi8KKyNpbmNsdWRlICJja2NzaWcuaCIKK2V4dGVybiBj a2ptcGJ1ZiBjbWpidWY7CisjZW5kaWYgLyogTk9DQ1RSQVAgKi8KKworZXh0ZXJuIGludCB4Zmls ZXR5cGUsIG5zY2FuZmlsZTsKKworaW50CitzaG9lc2MoZXNjYXBlKSBpbnQgZXNjYXBlOyB7Cisg ICAgZXh0ZXJuIGNoYXIgKiBjY250YWJbXTsJCS8qIEMwIGNvbnRyb2wgY2hhcmFjdGVyIG5hbWUg dGFibGUgKi8KKyAgICBleHRlcm4gaW50IHR0X2VzY2FwZTsKKyAgICBpZiAoKGVzY2FwZSA+IDAg JiYgZXNjYXBlIDwgMzIpIHx8IChlc2NhcGUgPT0gMTI3KSkgeworCXByaW50ZigiIEVzY2FwZSBj aGFyYWN0ZXI6IEN0cmwtJWMgKEFTQ0lJICVkLCAlcyk6ICVzXHJcbiIsCisJICAgICAgIGN0bChl c2NhcGUpLAorCSAgICAgICBlc2NhcGUsCisJICAgICAgIChlc2NhcGUgPT0gMTI3ID8gIkRFTCIg OiBjY250YWJbZXNjYXBlXSksCisJICAgICAgIHR0X2VzY2FwZSA/ICJlbmFibGVkIiA6ICJkaXNh YmxlZCIKKwkgICAgICAgKTsKKyAgICB9IGVsc2UgeworCXByaW50ZigiIEVzY2FwZSBjaGFyYWN0 ZXI6IENvZGUgJWQiLGVzY2FwZSk7CisJaWYgKGVzY2FwZSA+IDE2MCAmJiBlc2NhcGUgPCAyNTYp CisJICBwcmludGYoIiAoJWMpIixlc2NhcGUpOworCXByaW50ZigiOiAlc1xyXG4iLCB0dF9lc2Nh cGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsJCisgICAgfQorICAgIHJldHVybigwKTsKK30K KworI2lmbmRlZiBOT1hGRVIKKy8qICBQIFIgRSBTIEUgVCAgLS0gIFJlc2V0IGdsb2JhbCBwcm90 b2NvbCB2YXJpYWJsZXMgICovCisKK2V4dGVybiBpbnQgcmVjdXJzaXZlOworCisjaWZkZWYgUEFU VEVSTlMKK2ludCBwYXR0ZXJucyA9IFNFVF9BVVRPOyAgICAgICAgICAgICAgICAvKiBXaGV0aGVy IHRvIHVzZSBmaWxlbmFtZSBwYXR0ZXJucyAqLworZXh0ZXJuIGludCBnX3BhdHRlcm5zOwkJCS8q IEZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyAqLworI2Vsc2UKK2ludCBwYXR0ZXJucyA9IFNFVF9P RkY7CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKworI2lmbmRlZiBOT0lDUAorI2lmZGVmIENLX0xB QkVMRUQKK2V4dGVybiBpbnQgZ19sZl9vcHRzLCBsZl9vcHRzOworI2VuZGlmIC8qIENLX0xBQkVM RUQgKi8KK2V4dGVybiBpbnQgZ19tYXRjaGRvdCwgZ191c2VwaXBlcywgdXNlcGlwZXM7CitleHRl cm4gaW50IGdfYmluYXJ5LCBnX3Byb3RvLCBnX2Rpc3BsYSwgZ19zcGF0aCwgZ19ycGF0aCwgZ19m bmNudjsKK2V4dGVybiBpbnQgZ19yZWN1cnNpdmU7CitleHRlcm4gaW50IGdfeGZlcm1vZGUsIHhm ZXJtb2RlOworZXh0ZXJuIGludCBnX3VycHNpeiwgZ19zcHNpemYsIGdfc3BzaXo7CitleHRlcm4g aW50IGdfc3BzaXpyLCBnX3NwbWF4LCBnX3dzbG90ciwgZ19wcmVmaXhpbmcsIGdfZm5jYWN0Owor ZXh0ZXJuIGludCBnX2Zuc3BhdGgsIGdfZm5ycGF0aCwgZ19za2lwYnVwOworZXh0ZXJuIGludCBu b2xpbmtzOworI2lmZGVmIENLU1lNTElOSworZXh0ZXJuIGludCB6Z2ZzX2xpbms7CisjZW5kaWYg LyogQ0tTWU1MSU5LICovCisjaWZuZGVmIE5PU1BMCitleHRlcm4gaW50IGdfcGZsZywgcHdmbGcs IGdfcGNwdCwgcHdjcnlwdDsKK2V4dGVybiBjaGFyICogZ19wc3dkLCBwd2J1ZltdOworI2VuZGlm IC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworZXh0ZXJuIGludCBzcHNpemYsIHNw c2l6ciwgc3BtYXgsIHByZWZpeGluZywgZm5jYWN0LCBmbnNwYXRoLCBmbnJwYXRoOworZXh0ZXJu IGludCBtb3Zpbmc7ICAgICAgICAgICAgICAgICAgICAgIC8qIFNFTkQgY3JpdGVyaWEgKi8KK2V4 dGVybiBjaGFyIHNuZGFmdGVyW10sIHNuZGJlZm9yZVtdLCAqc25kZXhjZXB0W10sICpyY3ZleGNl cHRbXTsKK2V4dGVybiBDS19PRkZfVCBzbmRsYXJnZXIsIHNuZHNtYWxsZXIsIGNhbGlicmF0ZTsK K2V4dGVybiBpbnQgcm1haWxmLCBycHJpbnRmLCBza2lwYnVwOworZXh0ZXJuIGNoYXIgb3B0YnVm W107CisKKyNpZmRlZiBQSVBFU0VORAorZXh0ZXJuIGNoYXIgKiBnX3NmaWx0ZXIsICogZ19yZmls dGVyOworZXh0ZXJuIGNoYXIgKiBzbmRmaWx0ZXIsICogcmN2ZmlsdGVyOworI2VuZGlmIC8qIFBJ UEVTRU5EICovCitleHRlcm4gY2hhciAqKiBzbmRhcnJheTsKKworVk9JRAorZnRyZXNldCgpIHsK KyNpZm5kZWYgTk9JQ1AKKyAgICBpbnQgaTsKKyAgICBleHRlcm4gY2hhciAqIGZpbGVmaWxlOwor ICAgIGV4dGVybiBpbnQgcmVsaWFibGUsIHhyZWxpYWJsZSwgY19zYXZlLCBzc19zYXZlLCBzbG9z dGFydCwgdXJjbGVhcjsKKyAgICBleHRlcm4gaW50IG9vcHRzLCBvbW9kZSwgb25hbWUsIG9wYXRo LCBrYWN0aXZlLCBhdXRvcGF0aDsKKyAgICBleHRlcm4gY2hhciAqIHNuZF9tb3ZlOyAgICAgICAg ICAgICAvKiBEaXJlY3RvcnkgdG8gbW92ZSBzZW50IGZpbGVzIHRvICovCisgICAgZXh0ZXJuIGNo YXIgKiBzbmRfcmVuYW1lOyAgICAgICAgICAgLyogV2hhdCB0byByZW5hbWUgc2VudCBmaWxlcyB0 byAqLworICAgIGV4dGVybiBjaGFyICogcmN2X21vdmU7CisgICAgZXh0ZXJuIGNoYXIgKiByY3Zf cmVuYW1lOworICAgIGV4dGVybiBjaGFyICogZ19zbmRfbW92ZTsKKyAgICBleHRlcm4gY2hhciAq IGdfc25kX3JlbmFtZTsKKyAgICBleHRlcm4gY2hhciAqIGdfcmN2X21vdmU7CisgICAgZXh0ZXJu IGNoYXIgKiBnX3Jjdl9yZW5hbWU7CisKKyNpZmRlZiBDS19UTVBESVIKKyAgICBleHRlcm4gaW50 IGZfdG1wZGlyOworICAgIGV4dGVybiBjaGFyIHNhdmRpcltdOworI2VuZGlmIC8qIENLX1RNUERJ UiAqLworCisjaWZkZWYgQ0tfU1BFRUQKKyNpZmRlZiBDT01NRU5UCisgICAgZXh0ZXJuIGludCBm X2N0bHA7CisgICAgZXh0ZXJuIHNob3J0IHNfY3RscFtdLCBjdGxwW107CisjZW5kaWYgLyogQ09N TUVOVCAqLworI2VuZGlmIC8qIENLX1NQRUVEICovCisKKyNpZm5kZWYgTk9DU0VUUworICAgIGV4 dGVybiBpbnQgZmNzX3NhdmUsIHRjc19zYXZlOworICAgIGV4dGVybiBpbnQgZ194ZnJ4bGEsIHhm cnhsYTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisKKy8qIFJlc3RvcmUgLyByZXNldCBwZXItY29t bWFuZCBmaWxlLXRyYW5zZmVyIHN3aXRjaGVzICovCisKKyAgICBtYWtlc3RyKCZzbmRfbW92ZSxn X3NuZF9tb3ZlKTsKKyAgICBtYWtlc3RyKCZyY3ZfbW92ZSxnX3Jjdl9tb3ZlKTsKKyAgICBtYWtl c3RyKCZzbmRfcmVuYW1lLGdfc25kX3JlbmFtZSk7CisgICAgbWFrZXN0cigmcmN2X3JlbmFtZSxn X3Jjdl9yZW5hbWUpOworCisgICAga2FjdGl2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg LyogS2VybWl0IHByb3RvY29sIG5vIGxvbmdlciBhY3RpdmUgKi8KKyAgICBvb3B0cyA9IC0xOyAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBPLVBhY2tldCBPcHRpb25zICovCisgICAgb21vZGUg PSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTy1QYWNrZXQgVHJhbnNmZXIgTW9kZSAq LworICAgIG9uYW1lID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE8tUGFja2V0IEZp bGVuYW1lIE9wdGlvbnMgKi8KKyAgICBvcGF0aCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBPLVBhY2tldCBQYXRobmFtZSBPcHRpb25zICovCisKKyNpZmRlZiBDS19SRVNFTkQKKyAg ICByc19sZW4gPSAwTDsJCQkvKiBSRUdFVCBwb3NpdGlvbiAqLworI2VuZGlmIC8qIENLX1JFU0VO RCAqLworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIENLX1NQRUVECisgICAgaWYgKGZfY3RscCkg eworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgICAgICAgY3RscFtpXSA9 IHNfY3RscFtpXTsKKyAgICAgICAgZl9jdGxwID0gMDsKKyAgICB9CisjZW5kaWYgLyogQ0tfU1BF RUQgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBDS19UTVBESVIKKyAgICBpZiAo Zl90bXBkaXIpIHsJCQkvKiBJZiB3ZSBjaGFuZ2VkIHRvIGRvd25sb2FkIGRpciAqLworCXpjaGRp cigoY2hhciAqKSBzYXZkaXIpOwkvKiBHbyBiYWNrIHdoZXJlIHdlIGNhbWUgZnJvbSAqLworCWZf dG1wZGlyID0gMDsKKyAgICB9CisjZW5kaWYgLyogQ0tfVE1QRElSICovCisKKyAgICBjYWxpYnJh dGUgPSAwTDsgICAgICAgICAgICAgICAgICAgICAvKiBDYWxpYnJhdGlvbiBydW4gKi8KKyAgICBp ZiAoeHJlbGlhYmxlID4gLTEpIHsKKwlyZWxpYWJsZSA9IHhyZWxpYWJsZTsKKwlkZWJ1ZyhGMTAx LCJmdHJlc2V0IHJlbGlhYmxlIiwiIixyZWxpYWJsZSk7CisgICAgfQorICAgIHVyY2xlYXIgPSAw OworCisgICAgaWYgKGF1dG9wYXRoKSB7ICAgICAgICAgICAgICAgICAgICAgLyogU0VUIFJFQ0VJ VkUgUEFUSE5BTUVTIEFVVE8gKi8KKyAgICAgICAgZm5ycGF0aCA9IFBBVEhfQVVUTzsKKyAgICAg ICAgYXV0b3BhdGggPSAwOworICAgIH0KKyAgICBpZiAoZmlsZWZpbGUpIHsgICAgICAgICAgICAg ICAgICAgICAvKiBGaWxlIGxpc3QgKi8KKyAgICAgICAgemNsb3NlKFpNRklMRSk7CisgICAgICAg IG1ha2VzdHIoJmZpbGVmaWxlLE5VTEwpOworICAgIH0KKyAgICBpZiAoY19zYXZlID4gLTEpIHsg ICAgICAgICAgICAgICAgICAvKiBCbG9jayBDaGVjayBUeXBlICovCisgICAgICAgIGJjdHIgPSBj X3NhdmU7CisgICAgICAgIGNfc2F2ZSA9IC0xOworICAgIH0KKyAgICBpZiAoc3Nfc2F2ZSA+IC0x KSB7ICAgICAgICAgICAgICAgICAvKiBTbG93IFN0YXJ0ICovCisgICAgICAgIHNsb3N0YXJ0ID0g c3Nfc2F2ZTsKKyAgICAgICAgc3Nfc2F2ZSA9IC0xOworICAgIH0KKyNpZmRlZiBDS19MQUJFTEVE CisgICAgaWYgKGdfbGZfb3B0cyA+IC0xKSB7CisgICAgICAgIGxmX29wdHMgPSBnX2xmX29wdHM7 ICAgICAgICAgICAgLyogUmVzdG9yZSBsYWJlbGVkIHRyYW5zZmVyIG9wdGlvbnMgKi8KKyAgICAg ICAgZ19sZl9vcHRzID0gLTE7CisgICAgfQorI2VuZGlmIC8qIENLX0xBQkVMRUQgKi8KKworI2lm bmRlZiBOT0NTRVRTCisgICAgaWYgKHRjc19zYXZlID4gLTEpIHsgICAgICAgICAgICAgICAgLyog Q2hhcmFjdGVyIHNldHMgKi8KKyAgICAgICAgdGNoYXJzZXQgPSB0Y3Nfc2F2ZTsKKyAgICAgICAg dGNzX3NhdmUgPSAtMTsKKyAgICB9CisgICAgaWYgKGZjc19zYXZlID4gLTEpIHsKKyAgICAgICAg ZmNoYXJzZXQgPSBmY3Nfc2F2ZTsKKyAgICAgICAgZmNzX3NhdmUgPSAtMTsKKyAgICB9CisgICAg aWYgKGdfeGZyeGxhID4gLTEpIHsKKwl4ZnJ4bGEgPSBnX3hmcnhsYTsKKwlnX3hmcnhsYSA9IC0x OworICAgIH0KKyAgICBzZXR4bGF0eXBlKHRjaGFyc2V0LGZjaGFyc2V0KTsgICAgICAvKiBUcmFu c2xhdGlvbiB0eXBlICovCisjZW5kaWYgLyogTk9DU0VUUyAqLworCisjaWZkZWYgTkVUQ09OTgor I2lmbmRlZiBOT1NQTAorICAgIGlmIChnX3Bzd2QpIHsKKyAgICAgICAgY2tzdHJuY3B5KHB3YnVm LGdfcHN3ZCxQV0JVRkwpOworICAgICAgICBtYWtlc3RyKCZnX3Bzd2QsTlVMTCk7CisgICAgfQor ICAgIGlmIChnX3BmbGcgPiAtMSkgeworICAgICAgICBwd2ZsZyA9IGdfcGZsZzsKKyAgICAgICAg Z19wZmxnID0gLTE7CisgICAgfQorICAgIGlmIChnX3BjcHQgPiAtMSkgeworICAgICAgICBwd2Ny eXB0ID0gZ19wY3B0OworICAgICAgICBnX3BjcHQgPSAtMTsKKyAgICB9CisjZW5kaWYgLyogTk9T UEwgKi8KKyNlbmRpZiAvKiBORVRDT05OICovCisKKyAgICBpZiAoZ19iaW5hcnkgPiAtMSkgeyAg ICAgICAgICAgICAgICAvKiBGaWxlIHR5cGUgKi8KKyAgICAgICAgYmluYXJ5ID0gZ19iaW5hcnk7 CisgICAgICAgIGdfYmluYXJ5ID0gLTE7CisgICAgfQorICAgIGlmIChnX3hmZXJtb2RlID4gLTEp IHsgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIG1vZGUgKi8KKyAgICAgICAgeGZlcm1vZGUgPSBn X3hmZXJtb2RlOworICAgICAgICBnX3hmZXJtb2RlID0gLTE7CisgICAgfQorI2lmZGVmIFBBVFRF Uk5TCisgICAgaWYgKGdfcGF0dGVybnMgPiAtMSkgeyAgICAgICAgICAgICAgLyogRmlsZW5hbWUg cGF0dGVybnMgKi8KKyAgICAgICAgcGF0dGVybnMgPSBnX3BhdHRlcm5zOworICAgICAgICBnX3Bh dHRlcm5zID0gLTE7CisgICAgfQorI2VuZGlmIC8qIFBBVFRFUk5TICovCisKKyAgICBpZiAoZ191 c2VwaXBlcyA+IC0xKSB7CisgICAgICAgIHVzZXBpcGVzID0gZ191c2VwaXBlczsKKyAgICAgICAg Z191c2VwaXBlcyA9IC0xOworICAgIH0KKyAgICBpZiAoZ19tYXRjaGRvdCA+IC0xKSB7CisgICAg ICAgIG1hdGNoZG90ID0gZ19tYXRjaGRvdDsKKyAgICAgICAgZ19tYXRjaGRvdCA9IC0xOworICAg IH0KKyAgICBpZiAoZ19wcm90byA+IC0xKSB7ICAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCAq LworICAgICAgICBwcm90b2NvbCA9IGdfcHJvdG87CisgICAgICAgIGdfcHJvdG8gPSAtMTsKKyAg ICB9CisgICAgaWYgKGdfdXJwc2l6ID4gLTEpIHsKKyAgICAgICAgdXJwc2l6ID0gZ191cnBzaXo7 CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHVycHNpeiIsIiIsdXJwc2l6 KTsKKyAgICAgICAgZ191cnBzaXogPSAtMTsKKyAgICB9CisgICAgaWYgKGdfc3BzaXpmID4gLTEp IHsKKyAgICAgICAgc3BzaXpmID0gZ19zcHNpemY7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cmVz ZXQgcmVzdG9yaW5nIHNwc2l6ZiIsIiIsc3BzaXpmKTsKKyAgICAgICAgZ19zcHNpemYgPSAtMTsK KyAgICB9CisgICAgaWYgKGdfc3BzaXogPiAtMSkgeworICAgICAgICBzcHNpeiA9IGdfc3BzaXo7 CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQgcmVzdG9yaW5nIHNwc2l6IiwiIixzcHNpeik7 CisgICAgICAgIGdfc3BzaXogPSAtMTsKKyAgICB9CisgICAgaWYgKGdfc3BzaXpyID4gLTEpIHsK KyAgICAgICAgc3BzaXpyID0gZ19zcHNpenI7CisgICAgICAgIGRlYnVnKEYxMDEsImZ0cmVzZXQg cmVzdG9yaW5nIHNwc2l6ciIsIiIsc3BzaXpyKTsKKyAgICAgICAgZ19zcHNpenIgPSAtMTsKKyAg ICB9CisgICAgaWYgKGdfc3BtYXggPiAtMSkgeworICAgICAgICBzcG1heCA9IGdfc3BtYXg7Cisg ICAgICAgIGdfc3BtYXggPSAtMTsKKyAgICB9CisgICAgaWYgKGdfd3Nsb3RyID4gLTEpIHsKKyAg ICAgICAgd3Nsb3RyID0gZ193c2xvdHI7CisgICAgICAgIGdfd3Nsb3RyID0gLTE7CisgICAgfQor ICAgIGlmIChnX3ByZWZpeGluZyA+IC0xKSB7CisgICAgICAgIHByZWZpeGluZyA9IGdfcHJlZml4 aW5nOworICAgICAgICBnX3ByZWZpeGluZyA9IC0xOworICAgIH0KKyAgICBpZiAoZ19mbmNhY3Qg PiAtMSkgeworICAgICAgICBmbmNhY3QgPSBnX2ZuY2FjdDsKKyAgICAgICAgZ19mbmNhY3QgPSAt MTsKKyAgICB9CisgICAgaWYgKGdfZm5jbnYgPiAtMSkgeworICAgICAgICBmbmNudiA9IGdfZm5j bnY7CisgICAgICAgIGdfZm5jbnYgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfZm5zcGF0aCA+IC0x KSB7CisgICAgICAgIGZuc3BhdGggPSBnX2Zuc3BhdGg7CisgICAgICAgIGdfZm5zcGF0aCA9IC0x OworICAgIH0KKyAgICBpZiAoZ19mbnJwYXRoID4gLTEpIHsKKyAgICAgICAgZm5ycGF0aCA9IGdf Zm5ycGF0aDsKKyAgICAgICAgZ19mbnJwYXRoID0gLTE7CisgICAgfQorICAgIGlmIChnX3NraXBi dXAgPiAtMSkgeworICAgICAgICBza2lwYnVwID0gZ19za2lwYnVwOworICAgICAgICBnX3NraXBi dXAgPSAtMTsKKyAgICB9CisgICAgbm9saW5rcyA9IDI7CQkJLyogL0ZPTExPV0xJTktTIGlzIG5l dmVyIGdsb2JhbCAqLworICAgIHJlY3Vyc2l2ZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8q IC9SRUNVUlNJVkUgY2FuIG5ldmVyIGJlIGdsb2JhbCAqLworICAgIHhmaWxldHlwZSA9IC0xOwor CisgICAgaWYgKGdfZGlzcGxhID4gLTEpIHsgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2Zl ciBkaXNwbGF5ICovCisgICAgICAgIGZkaXNwbGEgPSBnX2Rpc3BsYTsKKyAgICAgICAgZ19kaXNw bGEgPSAtMTsKKyAgICB9CisgICAgaWYgKGdfc3BhdGggPiAtMSkgeyAgICAgICAgICAgICAgICAg LyogU2VuZCBwYXRobmFtZXMgKi8KKyAgICAgICAgZm5zcGF0aCA9IGdfc3BhdGg7CisgICAgICAg IGdfc3BhdGggPSAtMTsKKyAgICB9CisgICAgaWYgKGdfcnBhdGggPiAtMSkgeyAgICAgICAgICAg ICAgICAgLyogUmVjZWl2ZSBwYXRobmFtZXMgKi8KKyAgICAgICAgZm5ycGF0aCA9IGdfcnBhdGg7 CisgICAgICAgIGdfcnBhdGggPSAtMTsKKyAgICB9CisgICAgaWYgKGdfZm5jbnYgPiAtMSkgeyAg ICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgY29udmVyc2lvbiAqLworICAgICAgICBmbmNudiA9 IGdfZm5jbnY7CisgICAgICAgIGdfZm5jbnYgPSAtMTsKKyAgICB9CisjaWZkZWYgUElQRVNFTkQK KyAgICBtYWtlc3RyKCZzbmRmaWx0ZXIsZ19zZmlsdGVyKTsgICAgICAvKiBTZW5kIGZpbHRlciAq LworICAgIG1ha2VzdHIoJnJjdmZpbHRlcixnX3JmaWx0ZXIpOyAgICAgIC8qIFJlY2VpdmUgZmls dGVyICovCisjZW5kaWYgLyogUElQRVNFTkQgKi8KKworI2lmbmRlZiBOT0ZSSUxMUworICAgIHJt YWlsZiA9IHJwcmludGYgPSAwOyAgICAgICAgICAgICAgIC8qIE1BSUwgYW5kIFBSSU5UIG1vZGlm aWVycyBmb3IgU0VORCAqLworICAgIG9wdGJ1ZlswXSA9IE5VTDsgICAgICAgICAgICAgICAgICAg IC8qIE1BSUwgYW5kIFBSSU5UIG9wdGlvbnMgKi8KKyNlbmRpZiAvKiBOT0ZSSUxMUyAqLworCisg ICAgbW92aW5nID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgZGVsZXRlLWFm dGVyLXNlbmQgaW5kaWNhdG9yICovCisgICAgc25kYWZ0ZXJbMF0gID0gTlVMOyAgICAgICAgICAg ICAgICAgLyogUmVzZXQgU0VORCBzZWxlY3Rpb24gc3dpdGNoZXMgKi8KKyAgICBzbmRiZWZvcmVb MF0gPSBOVUw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlNOREVYQ0VQVDsgaSsrKSB7CisgICAg ICAgIGlmIChzbmRleGNlcHRbaV0pCisgICAgICAgICAgZnJlZShzbmRleGNlcHRbaV0pOworICAg ICAgICBzbmRleGNlcHRbaV0gPSBOVUxMOworICAgICAgICBpZiAocmN2ZXhjZXB0W2ldKQorICAg ICAgICAgIGZyZWUocmN2ZXhjZXB0W2ldKTsKKyAgICAgICAgcmN2ZXhjZXB0W2ldID0gTlVMTDsK KyAgICB9CisgICAgc25kbGFyZ2VyID0gIChDS19PRkZfVCktMTsKKyAgICBzbmRzbWFsbGVyID0g KENLX09GRl9UKS0xOworICAgIGRlYnVnKEYxMDEsInByZXNlbnQgc25kc21hbGxlciIsIiIsc25k c21hbGxlcik7CisjaWZkZWYgR0ZUSU1FUgorICAgIGd0diA9IC0xLjA7CisgICAgb2xkZ3R2ID0g LTEuMDsKKyNlbHNlCisgICAgZ3R2ID0gLTFMOworICAgIG9sZGd0diA9IC0xTDsKKyNlbmRpZiAv KiBHRlRJTUVSICovCisjZW5kaWYgLyogTk9JQ1AgKi8KK30KKyNlbmRpZiAvKiBOT1hGRVIgKi8K KworY2hhciAqCit0dGd0cG4oKSB7CQkJCS8qIEdldCB0eXBpY2FsIHBvcnQgbmFtZSAqLworLyoK KyAgSWRlYWxseSB0aGlzIHJvdXRpbmUgd291bGQgYmUgaW1wbGVtZW50ZWQgaW4gZWFjaCBvZiB0 aGUgY2t1P2lvLiogbW9kdWxlcywKKyAgYnV0IHRoYXQgcmVxdWlyZXMgY2hhbmdpbmcgdGhlIEFQ SSBkZWZpbml0aW9uLgorKi8KKyAgICByZXR1cm4oCisjaWZkZWYgT1MyCisjaWZkZWYgT1MyT05M WQorIkNPTTEiCisjZWxzZSAgLyogT1MyT05MWSAqLworIlRBUEkgWyBuYW1lIF0gb3IgQ09NMSIK KyNlbmRpZiAvKiBPUzJPTkxZICovCisjZWxzZSAgLyogT1MyICovCisjaWZkZWYgVk1TCisiVFhB MDosIFRUQTA6LCBvciBMVEEwOiIKKyNlbHNlICAvKiBWTVMgKi8KKyNpZmRlZiBTT0xBUklTCisi L2Rldi9jdWEvYSIKKyNlbHNlICAvKiBTT0xBUklTICovCisjaWZkZWYgSFBVWDEwCisiL2Rldi9j dWEwcDAiCisjZWxzZSAgLyogSFBVWDEwICovCisjaWZkZWYgSFBVWAorIi9kZXYvY3VhMDAiCisj ZWxzZSAgLyogSFBVWCAqLworI2lmZGVmIF9fRnJlZUJTRF9fCisiL2Rldi9jdWFhMCIKKyNlbHNl ICAvKiBfX0ZyZWVCU0RfXyAqLworI2lmZGVmIF9fbGludXhfXworIi9kZXYvdHR5UzAiCisjZWxz ZSAgLyogX19saW51eF9fICovCisjaWZkZWYgQlNENDQKKyIvZGV2L3R0eTAwIgorI2Vsc2UgIC8q IEJTRDQ0ICovCisjaWZkZWYgT1NLCisiL3QxIgorI2Vsc2UgIC8qIE9TSyAqLworI2lmZGVmIFFO WAorIi9kZXYvc2VyMSIKKyNlbHNlICAvKiBRTlggKi8KKyNpZmRlZiBRTlg2CisiL2Rldi9zZXIx IgorI2Vsc2UgIC8qIFFOWDYgKi8KKyNpZmRlZiBVTklYV0FSRQorIi9kZXYvdGVybS8wMCBvciAv ZGV2L3R0eTAwIgorI2Vsc2UgIC8qIFVOSVhXQVJFICovCisjaWZkZWYgQ0tfU0NPVjUKKyIvZGV2 L3R0eTFBIgorI2Vsc2UgIC8qIENLX1NDT1Y1ICovCisjaWZkZWYgQ0tfU0NPMzJWNAorIi9kZXYv dHR5MUEiCisjZWxzZSAgLyogQ0tfU0NPMzJWNCAqLworI2lmZGVmIE1fWEVOSVgKKyIvZGV2L3R0 eTFBIgorI2Vsc2UgIC8qIE1fWEVOSVggKi8KKyNpZmRlZiBBSVhSUworIi9kZXYvdHR5MCIKKyNl bHNlICAvKiBBSVhSUyAqLworI2lmZGVmIERHVVgKKyIvZGV2L3R0eTAwIgorI2Vsc2UgIC8qIERH VVggKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorIkBjb24xIgorI2Vsc2UgIC8qIGRhdGFnZW5lcmFs ICovCisjaWZkZWYgSVJJWAorIi9kZXYvdHR5bTAiCisjZWxzZSAgLyogSVJJWCAqLworI2lmZGVm IFNVTk9TNAorIi9kZXYvdHR5aDAiCisjZWxzZSAgLyogU1VOT1M0ICovCisjaWZkZWYgU1Y2OFIz VjYKKyIvZGV2L3NjYzAiCisjZWxzZSAgLyogU1Y2OFIzVjYgKi8KKyNpZmRlZiBNT1RTVjg4UjQK KyIvZGV2L2NvbnR0eTAwIgorI2Vsc2UgIC8qIE1PVFNWODhSNCAqLworI2lmZGVmIE5FWFQKKyIv ZGV2L2N1ZmEiCisjZWxzZQorI2lmZGVmIE9TRgorIi9kZXYvdHR5ZDEiCisjZWxzZQorI2lmZGVm IFNJTklYCisiL2Rldi90dHljMSIKKyNlbHNlCisjaWZkZWYgVU5JWAorIi9kZXYvY3VhLCAvZGV2 L2FjdSwgL2Rldi90dHkwLCBldGMiCisjZWxzZSAgLyogVU5JWCAqLworIihzb3JyeSBubyBleGFt cGxlIGF2YWlsYWJsZSkiCisjZW5kaWYgLyogVU5JWCAqLworI2VuZGlmIC8qIFNJTklYICovCisj ZW5kaWYgLyogT1NGICovCisjZW5kaWYgLyogTkVYVCAqLworI2VuZGlmIC8qIE1PVFNWODhSNCAq LworI2VuZGlmIC8qIFNWNjhSM1Y2ICovCisjZW5kaWYgLyogU1VOT1M0ICovCisjZW5kaWYgLyog SVJJWCAqLworI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogREdVWCAqLworI2Vu ZGlmIC8qIEFJWCAqLworI2VuZGlmIC8qIE1fWEVOSVggKi8KKyNlbmRpZiAvKiBDS19TQ08zMlY0 ICovCisjZW5kaWYgLyogQ0tfU0NPVjUgKi8KKyNlbmRpZiAvKiBVTklYV0FSRSAqLworI2VuZGlm IC8qIFFOWDYgKi8KKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAv KiBCU0Q0NCAqLworI2VuZGlmIC8qIF9fbGludXhfXyAqLworI2VuZGlmIC8qIF9fRnJlZUJTRF9f ICovCisjZW5kaWYgLyogSFBVWCAqLworI2VuZGlmIC8qIEhQVVgxMCAqLworI2VuZGlmIC8qIFNP TEFSSVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwkgICApOworfQor CisvKiAgQyBLIF8gRSBSIFIgUyBUIFIgIC0tICBSZXR1cm4gbWVzc2FnZSBmcm9tIG1vc3QgcmVj ZW50IHN5c3RlbSBlcnJvciAqLworCisjaWZkZWYgQ0tST09UCitleHRlcm4gaW50IGNrcm9vdGVy cjsKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKworY2hhciAqCitja19lcnJzdHIoKSB7CisjaWZkZWYg VVNFX1NUUkVSUk9SCisjaWZuZGVmIENLX0FOU0lMSUJTCisgICAgLyogU2hvdWxkIGhhdmUgYmVl biBkZWNsYXJlZCBpbiA8c3RyaW5nLmg+ICovCitfUFJPVE9UWVAoIGNoYXIgKiBzdHJlcnJvciwg KGludCkgKTsKKyNlbmRpZiAvKiBDS19BTlNJTElCUyAqLworI2lmZGVmIENLUk9PVAorICAgIGlm IChja3Jvb3RlcnIpCisgICAgICByZXR1cm4oIk9mZiBsaW1pdHMiKTsKKyNlbmRpZiAvKiBDS1JP T1QgKi8KKyAgICByZXR1cm4oc3RyZXJyb3IoZXJybm8pKTsKKyNlbHNlICAvKiAhVVNFX1NUUkVS Uk9SICovCisjaWZkZWYgVk1TCisgICAgZXh0ZXJuIGNoYXIgKiBja3Ztc2VycnN0cih1bnNpZ25l ZCBsb25nKTsKKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAoY2tyb290ZXJyKQorICAgICAgcmV0dXJu KCJPZmYgbGltaXRzIik7CisjZW5kaWYgLyogQ0tST09UICovCisgICAgcmV0dXJuKGNrdm1zZXJy c3RyKDBMKSk7CisjZWxzZSAgLyogIVZNUyAqLworI2lmZGVmIEJTRDQ0CisjaWZkZWYgX18zODZC U0RfXworI2lmbmRlZiBORFNZU0VSUkxJU1QKKyAgICBleHRlcm4gaW50IHN5c19uZXJyOworICAg IGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOworI2VuZGlmIC8qIE5EU1lTRVJSTElTVCAqLwor I2Vsc2UgIC8qICFfXzM4NkJTRF9fICovCisjaWZuZGVmIF9fYnNkaV9fCisjaWZuZGVmIE5EU1lT RVJSTElTVAorICAgIGV4dGVybiBpbnQgc3lzX25lcnI7CisgICAgZXh0ZXJuIGNvbnN0IGNoYXIg KmNvbnN0IHN5c19lcnJsaXN0W107CisjZW5kaWYgLyogTkRTWVNFUlJMSVNUICovCisjZW5kaWYg LyogX19ic2RpX18gKi8KKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisjaWZkZWYgQ0tST09UCisg ICAgaWYgKGNrcm9vdGVycikKKyAgICAgIHJldHVybigiT2ZmIGxpbWl0cyIpOworICAgIGVsc2UK KyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAgICBpZiAoZXJybm8gPj0gc3lzX25lcnIpCisgICAgICBy ZXR1cm4oIkVycm9yIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKKyAgICBlbHNlCisgICAgICByZXR1 cm4oKGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9dKTsKKyNlbHNlIC8qICFCU0Q0NCAqLworI2lm ZGVmIEFUVFNWCisjaWZuZGVmIE5EU1lTRVJSTElTVAorICAgIGV4dGVybiBpbnQgc3lzX25lcnI7 CisgICAgZXh0ZXJuIGNoYXIgKnN5c19lcnJsaXN0W107CisjZW5kaWYgLyogTkRTWVNFUlJMSVNU ICovCisjaWZkZWYgQ0tST09UCisgICAgaWYgKGNrcm9vdGVycikKKyAgICAgIHJldHVybigiT2Zm IGxpbWl0cyIpOworICAgIGVsc2UKKyNlbmRpZiAvKiBDS1JPT1QgKi8KKyAgICBpZiAoZXJybm8g Pj0gc3lzX25lcnIpCisgICAgICByZXR1cm4oIkVycm9yIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4oKGNoYXIgKikgc3lzX2Vycmxpc3RbZXJybm9dKTsKKyNl bHNlIC8qICFBVFRTViAqLworI2lmZGVmIEJTRDQKKyNpZm5kZWYgTkRTWVNFUlJMSVNUCisgICAg ZXh0ZXJuIGludCBzeXNfbmVycjsKKyAgICBleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNl bmRpZiAvKiBORFNZU0VSUkxJU1QgKi8KKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAoY2tyb290ZXJy KQorICAgICAgcmV0dXJuKCJPZmYgbGltaXRzIik7CisgICAgZWxzZQorI2VuZGlmIC8qIENLUk9P VCAqLworICAgIGlmIChlcnJubyA+PSBzeXNfbmVycikKKyAgICAgIHJldHVybigiRXJyb3IgbnVt YmVyIG91dCBvZiByYW5nZSIpOworICAgIGVsc2UKKyAgICAgIHJldHVybigoY2hhciAqKSBzeXNf ZXJybGlzdFtlcnJub10pOworI2Vsc2UKKyNpZmRlZiBPUzIKKyNpZm5kZWYgTkRTWVNFUlJMSVNU CisgICAgZXh0ZXJuIGNoYXIgKnN5c19lcnJsaXN0W107CisjZW5kaWYgLyogTkRTWVNFUlJMSVNU ICovCisjaWZkZWYgTlQKKyAgICBleHRlcm4gaW50X3N5c19uZXJyOworI2VuZGlmIC8qIE5UICov CisgICAgY2hhciAqZTsKKyNpZmRlZiBDS1JPT1QKKyAgICBpZiAoY2tyb290ZXJyKQorICAgICAg cmV0dXJuKCJPZmYgbGltaXRzIik7CisjZW5kaWYgLyogQ0tST09UICovCisgICAgZSA9IChlcnJu byA+IC0xCisjaWZkZWYgTlQKKyAgICAgICAgICYmIGVycm5vIDw9IF9zeXNfbmVycgorI2VuZGlm IC8qIE5UICovCisgICAgICAgICApID8KKyNpZmRlZiBOVAorICAgICAgICAgKGNoYXIgKikgc3lz X2Vycmxpc3RbZXJybm9dCisjZWxzZSAvKiBOVCAqLworICAgICAgICAgLyogSSBkb24ndCBrbm93 IGhvdyB0byBnZXQgYSBDTElCIGVycm9yIHN0cmluZyBpbiBPUy8yICovCisgICAgICAgICBzdHJl cnJvcihlcnJubykKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICAgIDogIiI7CisgICAgcmV0 dXJuKGUgPyBlIDogIiIpOworI2Vsc2UgLyogT1MyICovCisgICAgcmV0dXJuKCIiKTsKKyNlbmRp ZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogQVRUU1YgKi8KKyNlbmRp ZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIFVTRV9TVFJFUlJPUiAq LworfQorCisjaWZkZWYgUEFUVEVSTlMKKy8qCisgIEZpbGVuYW1lIHBhdHRlcm4gcmVjb2duaXRp b24gbGlzdHMgZm9yIGF1dG9tYXRpYyB0ZXh0L2JpbmFyeSBzd2l0Y2hpbmcuCisgIFRoZXNlIGFy ZSBzb21ld2hhdCBwYXNzZSBhZnRlciB0aGUgYWRkaXRpb24gb2Ygc2NhbmZpbGUoKSAgKDcuMCku CisgIEJ1dCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBGVFAgW01dR0VULCB0aGV5J3JlIGJhY2sgaW4g c3R5bGUgKDguMCkuCisKKyAgQWx0aG91Z2gsIHdpdGggRlRQIHRoZSBsaXN0cyBuZWVkIHRvIGJl IHVzZWQgaW4gdGhlIHJldmVyc2UuICBXaXRoCisgIEtlcm1pdCB0aGUgbGlzdCBpcyB1c2VkIHRv IGltcGx5IHRoZSB0eXBlcyBvZiB0aGUgbG9jYWwgc3lzdGVtLiAgV2hlcmVhcworICB3aXRoIEZU UCwgdGhlIGxpc3QgbXVzdCBiZSB1c2VkIHRvIGltcGx5IHRoZSB0eXBlIG9mIHRoZSByZW1vdGUg c3lzdGVtLgorICBUaGVyZWZvcmUsIGFsbCBwbGF0Zm9ybXMgbXVzdCBub3cgc3VwcG9ydCBhbGwg b2YgdGhlIGxpc3RzLgorKi8KK2NoYXIgKnR4dHBhdHRlcm5zW0ZUUEFUVEVSTlMrMV0gPSB7IE5V TEwsIE5VTEwgfTsKK2NoYXIgKmJpbnBhdHRlcm5zW0ZUUEFUVEVSTlMrMV0gPSB7IE5VTEwsIE5V TEwgfTsKKy8qCisgIERlZmF1bHQgcGF0dGVybiBsaXN0cyBmb3IgZWFjaCBwbGF0Zm9ybS4uLgor CisgIE5PVEU6IEluIG1vc3QgY2FzZXMgd2UgbGVhdmUgIi5obHAiLCAiLmluaSIsIGFuZCAiLnNj ciIgYWxvbmU7IGFsdGhvdWdoIHRoZXkKKyAgYXJlIHRyYWRpdGlvbmFsbHkgdGV4dCB0eXBlcywg dGhleSBhcmUgYmluYXJ5IGluIFdpbmRvd3MuICBTbyB0aGV5IGFyZQorICBoYW5kbGVkIGJ5IHRo ZSBwcmV2YWlsaW5nIFNFVCBGSUxFIFRZUEUsIHJhdGhlciB0aGFuIGF1dG9tYXRpY2FsbHkuCisg IFNpbWlsYXJseSBmb3IgIi5kYXQiLCAiLmluZiIsIGFuZCBzbyBvbi4gIEFsc28gIi5wcyIgc2lu Y2UgUG9zdFNjcmlwdCBmaWxlcworICBhcmUgbm90IGFsd2F5cyB0ZXh0LiAgIi5sb2ciIGlzIG9t aXR0ZWQgc2luY2UgbG9ncyBjYW4gYmUgdGV4dCBvciBiaW5hcnksCisgIGV4Y2VwdCBpbiBWTVMg dGhleSBhcmUgdXN1YWxseSB0ZXh0LCBldGMgZXRjLgorCisgIExhdGVyIChTZXAgMjAwMyk6IEFk ZCBQb3N0U2NyaXB0IHRvIGJpbmFyeSBwYXR0ZXJucy4KKyovCitzdGF0aWMgY2hhciAqdHh0cFtT WVNfTUFYXVtGVFBBVFRFUk5TXSA9IHsKKyAgICAvKiBVTktOT1dOICovIHsKKwlOVUxMLCBOVUxM CisgICAgfSwKKyAgICB7CQkJCQkvKiBVTklYICovCisgICAgIioudHh0IiwiKi5jIiwiKi5oIiwi Ki5yIiwiKi53IiwiKi5jcHAiLCIqLmNjIiwiKi5rc2MiLCIqLmJ3ciIsIioudXBkIiwKKyAgICAi Ki5odG1sIiwiKi5odG0iLCIqLm1zcyIsIioudGV4IiwiKi5uciIsIltNbV1ha2VmaWxlIiwgIiou aGV4IiwgIiouaHF4IiwKKyAgICAiKi5mb3IiLCIqLmY3NyIsIiouZiIsIiouRiIsIioucyIsIiou cGFzIiwiKi5qYXZhIiwiKi5lbCIsIioubGlzcCIsIiouc2giLAorICAgICIqLm00IiwiKi5wZXJs IiwiKi5wbCIsIioucG9kIiwiKi5wbSIsIiouYXdrIiwiKi5zbm8iLCIqLnNwdCIsIiouc2VkIiwK KyAgICAiKi5rc2MiLCIqLlRYVCIsICIqcmVhZC5tZSIsICIqUkVBRC5NRSIsICIuKiIsICIqLy4q IiwgIioubWVtIiwiKi5tYWMiLAorICAgIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFdJTjMy ICovCisgICAgIioudHh0IiwiKi5rc2MiLCIqLmh0bSIsIiouaHRtbCIsIiouYmF0IiwiKi5jbWQi LCIqLmphdiIsIiouYXNtIiwgIiouaGV4IiwKKyAgICAiKi5ocXgiLCAiKi5jIiwgIiouaCIsICIq LmNwcCIsICIqLmhwcCIsICIqLmN4eCIsICIqLmN4eCIsICIqLnciLAorICAgICIqLmphdmEiLCAi Ki5id3IiLCAiKi51cGQiLCAiKi5tYWsiLCAicmVhZC5tZSIsICIqLm1hcCIsICJtYWtlZmlsZSIs CisgICAgIioubWVtIiwiKi5tYWMiLCIqLmNjIiwiKi5wbCIsIioucG9kIiwiKi5wbSIsIioubTQi LE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFZNUyAqLworICAgICIqLmNvbSIsIioudHh0Iiwi Ki5jIiwgICIqLmZvciIsIioucGFzIiwiKi5ybm8iLCIqLnJuaCIsIioubWFyIiwiKi5ibGkiLAor ICAgICIqLmhscCIsIioubXNzIiwiKi5kb2MiLCIqLmJ3ciIsIiouY2xkIiwiKi5oZXgiLCIqLmJh cyIsIiouaW5pIiwiKi5sb2ciLAorICAgICIqLm1tcyIsIioub3B0IiwiKi5rc2MiLCIqLnBlcmwi LCIqLnBsIiwiKi5wb2QiLCIqLnBtIiwiKi5zbm8iLCIqLnNwdCIsCisgICAgIioubWVtIixOVUxM CisgICAgfSwKKyAgICB7CQkJCQkvKiBPUzIgKi8KKyAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRt IiwiKi5odG1sIiwiKi5iYXQiLCIqLmNtZCIsIiouamF2IiwiKi5hc20iLCAiKi5oZXgiLAorICAg ICIqLmhxeCIsICIqLmMiLCAiKi5oIiwgIiouY3BwIiwgIiouaHBwIiwgIiouY3h4IiwgIiouY3h4 IiwgIioudyIsCisgICAgIiouamF2YSIsICIqLmJ3ciIsICIqLnVwZCIsICIqLm1hayIsICJyZWFk Lm1lIiwgIioubWFwIiwgIm1ha2VmaWxlIiwKKyAgICBOVUxMCisgICAgfSwKKyAgICB7CQkJCQkv KiBET1MgKi8KKyAgICAiKi50eHQiLCIqLmtzYyIsIiouaHRtIiwiKi5iYXQiLCIqLmNtZCIsIiou amF2IiwiKi5hc20iLCAiKi5oZXgiLAorICAgICIqLmhxeCIsICIqLmMiLCAiKi5oIiwgIiouY3Bw IiwgIiouaHBwIiwgIiouY3h4IiwgIiouY3h4IiwgIioudyIsCisgICAgIiouYndyIiwgIioudXBk IiwgIioubWFrIiwgInJlYWQubWUiLCAiKi5tYXAiLCAibWFrZWZpbGUiLCBOVUxMCisgICAgfSwK KyAgICB7CQkJCQkvKiBUT1BTLTEwICovCisgICAgIiouY21kIiwiKi5obHAiLCIqLmRvYyIsIiou aW5pIiwiKi50eHQiLCIqLm1hYyIsIiouZm9yIiwiKi5zYWkiLCIqLmJsaSIsCisgICAgIioucGFz IiwiKi5zbm8iLCIqLnNwdCIsIioucGNsIiwiKi5tc3MiLCIqLnJubyIsIiouYjM2IiwiKi50ZXgi LCIqLnB1YiIsCisgICAgIioucmVxIiwiKi5yMzYiLCIqLm1lbSIsIiouYndyIiwiKi5jY2wiLCIq LmN0bCIsIioucm5oIiwiKi5rc2MiLE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFRPUFMtMjAg Ki8KKyAgICAiKi5jbWQiLCIqLmhscCIsIiouZG9jIiwiKi5pbmkiLCIqLnR4dCIsIioubWFjIiwi Ki5mb3IiLCIqLnNhaSIsIiouYmxpIiwKKyAgICAiKi5wYXMiLCIqLnNubyIsIiouc3B0IiwiKi5w Y2wiLCIqLm1zcyIsIioucm5vIiwiKi5iMzYiLCIqLnRleCIsIioucHViIiwKKyAgICAiKi5yZXEi LCIqLnIzNiIsIioubWVtIiwiKi5id3IiLCIqLmNjbCIsIiouY3RsIiwiKi5ybmgiLCIqLmtzYyIs TlVMTAorICAgIH0sCisgICAgewkJCQkJLyogU1RSQVRVUyBWT1MgKi8KKyAgICAiKi50eHQiLCIq LmtzYyIsIiouaHRtIiwiKi5odG1sIiwiKi5iYXQiLCAiKi5jbWQiLCIqLmphdiIsIiouYXNtIiwi Ki5oZXgiLAorICAgICIqLmhxeCIsIiouYyIsICAiKi5oIiwgICIqLnciLCAgICIqLmphdmEiLCIq LmJ3ciIsIioudXBkIiwiKi50dHAiLCIqLmNtIiwKKyAgICAiKi5wbDEiLCIqLmVtYWNzIiwgInJl YWQubWUiLCAiKi5wbCIsICJtYWtlZmlsZSIsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIERH IEFPUy9WUyAqLworICAgICIqLnR4dCIsICIqLmMiLCAiKi5oIiwgIioudyIsICIqLmVyIiwgIiou YndyIiwgIioudXBkIiwgInJlYWQubWUiLAorICAgICIqLmNsaSIsICIqLmtzYyIsIE5VTEwKKyAg ICB9LAorICAgIHsJCQkJCS8qIE9TSyAqLworICAgICIqLmMiLCIqLmNwcCIsIiouaCIsIiouYSIs Iipha2VmaWxlIiwgLyogcHJvZ3JhbSBzb3VyY2VzICovCisgICAgIiouZm9yIiwiKi5mNzciLCIq LmYiLCIqLkYiLCIqLnMiLCIqLnBhcyIsIiouamF2YSIsIiouZWwiLCIqLmxpc3AiLAorICAgICIq LnNoIiwiKi5wZXJsIiwiKi5hd2siLCIqLnNubyIsIiouc3B0IiwiKi5zZWQiLAorICAgICIqLnR4 dCIsIioudyIsCQkJLyogZ2VuZXJhbCB0ZXh0ICovCisgICAgIioua3NjIiwiKi5id3IiLCIqLnVw ZCIsCisgICAgIiouaHRtbCIsIiouaHRtIiwiKi5tc3MiLCIqLnRleCIsIioubnIiLCIqLmhleCIs ICIqLmhxeCIsCisgICAgIiouVFhUIiwgIipyZWFkLm1lIiwgIipSRUFELk1FIiwgIi4qIiwgIiov LioiLAorICAgIE5VTEwKKyAgICB9Cit9OworCisvKiBOb3RlOiAuRE9DIGFkZGVkIHRvIChzb21l KSBiaW5hcnkgcGF0dGVybnMgSnVuZSAxOTk4Li4uIE1pY3Jvc29mdCB3aW5zLiAqLworCitzdGF0 aWMgY2hhciAqYmlucFtTWVNfTUFYXVtGVFBBVFRFUk5TXSA9IHsKKyAgICB7CQkJCQkvKiBVTktO T1dOICovCisgICAgTlVMTCwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVU5JWCAqLworICAg ICIqLmd6IiwiKi5aIiwiKi50Z3oiLCIqLmdpZiIsICIqLnRhciIsIiouemlwIiwiKi5vIiwiKi5z byIsIiouYSIsIioub3V0IiwKKyAgICAiKi5leGUiLCAiKi5qcGciLCAiKi5qcGVnIiwgIioudGlm IiwiKi50aWZmIiwgIioucGRmIiwgIiouc28uKiIsICIqLmNsYXNzIiwKKyAgICAiKi5ycG0iLCAi Ki5ibXAiLCAiKi5iejIiLCAiKi5CTVAiLCAiKi5kbGwiLCAiKi5kb2MiLCAiKi52eGQiLCAiKi5k Y3giLAorICAgICIqLnhsKiIsICIqLmx6aCIsICIqLmxoeiIsICIqLmF1IiwgIioudm9jIiwgIiou bXBnIiwgIioubXBlZyIsIlt3a11lcm1pdCIsCisgICAgIioucHMiLCBOVUxMCisgICAgfSwKKyAg ICB7CQkJCQkvKiBXSU4zMiAqLworICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNv bSIsICIqLmdpZiIsICIqLmpwZyIsICIqLndhdiIsICIqLnJhbSIsCisgICAgIiouY2xhc3MiLCIq LmNsYSIsIiouZGxsIiwgIiouZHJ2IiwgIioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNv IiwKKyAgICAiKi5ibXAiLCAiKi50aWYiLCAiKi50YXIiLCAiKi5neiIsICAiKi50Z3oiLCAiKi54 bCoiLCAiKi5kb2MiLCAiKi52eGQiLAorICAgICIqLnBkZiIsICIqLmx6aCIsICIqLnZ4ZCIsICIq LnNuZCIsICIqLmF1IiwgIiogLnZvYyIsICIqLm1wZyIsICIqLm1wZWciLAorICAgICIqLnBzIiwg TlVMTAorICAgIH0sCisgICAgewkJCQkJLyogVk1TICovCisgICAgIiouZXhlIiwiKi5vYmoiLCIq LmJhayIsIiouYmluIiwiKi5hZGYiLCIqLnN0YiIsIioubWFpIiwiKi5zeXMiLCIqLmRtcCIsCisg ICAgIioucHMiLCAiKi5kYXQiLCIqLnBhciIsIE5VTEwKKyAgICB9LAorICAgIHsJCQkJCS8qIE9T MiAqLworICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIsICIqLmdpZiIsICIq LmpwZyIsICIqLndhdiIsICIqLnJhbSIsCisgICAgIiouY2xhc3MiLCAiKi5jbGEiLCAiKi5kbGwi LCAiKi5kcnYiLCAiKi5vY3giLCAiKi52YngiLCAiKi5saWIiLCAiKi5pY28iLAorICAgICIqLmJt cCIsICIqLnRpZiIsICIqLnRhciIsICIqLmd6IiwgIioudGd6IiwgIioueGwqIiwgIiouZG9jIiwg IioudnhkIiwKKyAgICAiKi5wZGYiLCAiKi5wcyIsICIqLmx6aCIsIE5VTEwKKyAgICB9LAorICAg IHsJCQkJCS8qIERPUyAqLworICAgICIqLmV4ZSIsICIqLnppcCIsICIqLm9iaiIsICIqLmNvbSIs ICIqLmdpZiIsICIqLmpwZyIsICIqLndhdiIsICIqLnJhbSIsCisgICAgIiouY2xhIiwgIiouZGxs IiwgIiouZHJ2IiwgIioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKKyAgICAiKi5i bXAiLCAiKi50aWYiLCAiKi50YXIiLCAiKi5neiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIs ICIqLnZ4ZCIsCisgICAgIioucGRmIiwgIioucHMiLCAiKi5semgiLCBOVUxMCisgICAgfSwKKyAg ICB7CQkJCQkvKiBUT1BTMTAgKi8KKyAgICAiKi5leGUiLCIqLnNhdiIsIiouYmluIiwiKi5yaW0i LCIqLnJlbCIsIioudW52IiwiKi5saWIiLCIqLnRhcCIsIiouZHZpIiwKKyAgICAiKi5wcyIsIE5V TEwKKyAgICB9LAorICAgIHsJCQkJCS8qIFRPUFMyMCAqLworICAgICIqLmV4ZSIsIiouc2F2Iiwi Ki5iaW4iLCIqLnJpbSIsIioucmVsIiwiKi51bnYiLCIqLmxpYiIsIioudGFwIiwiKi5kdmkiLAor ICAgICIqLnBzIiwgTlVMTAorICAgIH0sCisgICAgewkJCQkJLyogU1RSQVRVUyBWT1MgKi8KKyAg ICAiKi5leGUiLCAiKi56aXAiLCAiKi5vYmoiLCAiKi5jb20iLCAiKi5naWYiLCAiKi5qcGciLCAi Ki53YXYiLCAiKi5yYW0iLAorICAgICIqLmNsYXNzIiwgIiouY2xhIiwgIiouZGxsIiwgIiouZHJ2 IiwgIioub2N4IiwgIioudmJ4IiwgIioubGliIiwgIiouaWNvIiwKKyAgICAiKi5ibXAiLCAiKi50 aWYiLCAiKi50YXIiLCAiKi5neiIsICIqLnRneiIsICIqLnhsKiIsICIqLmRvYyIsICIqLnZ4ZCIs CisgICAgIioucGRmIiwgIioucHMiLCAiKi5semgiLCAiKi5wbSIsIE5VTEwKKyAgICB9LAorICAg IHsJCQkJCS8qIERHICovCisgICAgIioub2IiLCAiKi5wciIsICIqLmRtcCIsICIqLnBzIiwgTlVM TAorICAgIH0sCisgICAgeyAvKiBPU0sgKi8KKyAgICAiKi5neiIsIiouWiIsIioueiIsIioudGd6 IiwiKi5saHoiLCIqLnRhciIsCS8qIGFyY2hpdmVycyAqLworICAgICIqLnppcCIsIiouYXIiLCIq LnpvbyIsIioucnBtIiwiKi5semgiLAorICAgIC8qIG9iamVjdCBmaWxlcywgbGlicmFyaWVzLCBl eGVjdXRhYmxlcyAqLworICAgICIqLnIiLCIqLmwiLCIqLmV4ZSIsICIqLmRsbCIsICIqLnNvLioi LCAiKi5jbGFzcyIsCisgICAgLyogaW1hZ2VzICovCisgICAgIiouZ2lmIiwgIiouanBnIiwgIiou anBlZyIsICIqLnRpZiIsIioudGlmZiIsICIqLnBkZiIsICIqLnBzIiwKKyAgICAiKi5ibXAiLCAi Ki5iejIiLCAiKi5CTVAiLCIqLnBjeCIsCisgICAgTlVMTAorICAgIH0KK307CisKKy8qCisgIFNl dCB1cCBkZWZhdWx0IHBhdHRlcm4gbGlzdHMgc28gdGhleSBjYW4gYmUgZnJlZWQgYW5kIHJlLW1h bGxvYydkLgorICBFYWNoIHBhdHRlcm4gbGlzdCBtdXN0IHRlcm1pbmF0ZWQgYnkgYSBudWxsIGVs ZW1lbnQuCisqLworVk9JRAoraW5pdHBhdCgpIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgRlRQQVRURVJOUzsgaSsrKSB7CisgICAgICAgIHR4dHBhdHRlcm5zW2ldID0gTlVMTDsK KyAgICAgICAgYmlucGF0dGVybnNbaV0gPSBOVUxMOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBp IDwgRlRQQVRURVJOUzsgaSsrKSB7CisjaWZkZWYgVU5JWAorICAgICAgICBtYWtlc3RyKCYodHh0 cGF0dGVybnNbaV0pLHR4dHBbU1lTX1VOSVhdW2ldKTsKKyNlbHNlIC8qIFVOSVggKi8KKyNpZmRl ZiBPUzIKKyNpZmRlZiBOVAorICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBb U1lTX1dJTjMyXVtpXSk7CisjZWxzZSAvKiBOVCAqLworICAgICAgICBtYWtlc3RyKCYodHh0cGF0 dGVybnNbaV0pLHR4dHBbU1lTX09TMl1baV0pOworI2VuZGlmIC8qIE5UICovCisjZWxzZSAvKiBP UzIgKi8KKyNpZmRlZiBWTVMKKyAgICAgICAgbWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRw W1NZU19WTVNdW2ldKTsKKyNlbHNlIC8qIFZNUyAqLworI2lmZGVmIFNUUkFUVVMKKyAgICAgICAg bWFrZXN0cigmKHR4dHBhdHRlcm5zW2ldKSx0eHRwW1NZU19WT1NdW2ldKTsKKyNlbHNlIC8qIFNU UkFUVVMgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVy bnNbaV0pLHR4dHBbU1lTX0RHXVtpXSk7CisjZWxzZSAvKiBkYXRhZ2VuZXJhbCAqLworI2lmZGVm IE9TSworICAgICAgICBtYWtlc3RyKCYodHh0cGF0dGVybnNbaV0pLHR4dHBbU1lTX09TS11baV0p OworI2Vsc2UgLyogT1NLICovCisgICAgICAgIG1ha2VzdHIoJih0eHRwYXR0ZXJuc1tpXSksdHh0 cFtTWVNfVU5LXVtpXSk7CisjZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KKyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1My ICovCisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICBpZiAoIXR4dHBbaV0pCisgICAgICAgICAg YnJlYWs7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TOyBpKyspIHsKKyNp ZmRlZiBVTklYCisgICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfVU5J WF1baV0pOworI2Vsc2UgLyogVU5JWCAqLworI2lmZGVmIE9TMgorI2lmZGVmIE5UCisgICAgICAg IG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfV0lOMzJdW2ldKTsKKyNlbHNlIC8q IE5UICovCisgICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfT1MyXVtp XSk7CisjZW5kaWYgLyogTlQgKi8KKyNlbHNlIC8qIE9TMiAqLworI2lmZGVmIFZNUworICAgICAg ICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0pLGJpbnBbU1lTX1ZNU11baV0pOworI2Vsc2UgLyog Vk1TICovCisjaWZkZWYgU1RSQVRVUworICAgICAgICBtYWtlc3RyKCYoYmlucGF0dGVybnNbaV0p LGJpbnBbU1lTX1ZPU11baV0pOworI2Vsc2UgLyogU1RSQVRVUyAqLworI2lmZGVmIGRhdGFnZW5l cmFsCisgICAgICAgIG1ha2VzdHIoJihiaW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfREddW2ldKTsK KyNlbHNlIC8qIGRhdGFnZW5lcmFsICovCisjaWZkZWYgT1NLCisgICAgICAgIG1ha2VzdHIoJihi aW5wYXR0ZXJuc1tpXSksYmlucFtTWVNfT1NLXVtpXSk7CisjZWxzZSAvKiBPU0sgKi8KKyAgICAg ICAgbWFrZXN0cigmKGJpbnBhdHRlcm5zW2ldKSxiaW5wW1NZU19VTktdW2ldKTsKKyNlbmRpZiAv KiBPU0sgKi8KKyNlbmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8K KyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBVTklYICovCisg ICAgICAgIGlmICghYmlucFtpXSkKKyAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qCisg IG0gYSB0IGMgaCBuIGEgbSBlICAtLSAgQ29tcGFyZSBmaWxlbmFtZSB3aXRoIHRleHQgJiBiaW5h cnkgbmFtZSBwYXR0ZXJucy4KKworICBSZXR1cm5zOgorICAgIDAgaWYgbmFtZSBtYXRjaGVzIGEg dGV4dCBwYXR0ZXJuIGJ1dCBub3QgYSBiaW5hcnkgcGF0dGVybi4KKyAgICAxIGlmIG5hbWUgbWF0 Y2hlcyBhIGJpbmFyeSBwYXR0ZXJuIGJ1dCBub3QgYSB0ZXh0IHBhdHRlcm4uCisgICAtMSBpZiBu YW1lIG1hdGNoZXMgbm8gcGF0dGVybnMuCisgICAtMiBpZiBuYW1lIG1hdGNoZXMgYSBiaW5hcnkg cGF0dGVybiBhbmQgYSB0ZXh0IHBhdHRlcm4uCisqLworaW50CittYXRjaG5hbWUoZmlsZW5hbWUs IGxvY2FsLCBvcykgY2hhciAqIGZpbGVuYW1lOyBpbnQgbG9jYWw7IGludCBvczsgeworICAgIGlu dCByYyA9IC0xOwkJCS8qIFJldHVybiBjb2RlICovCisgICAgY2hhciAqIG5hbWUsICogcDsKKyNp ZmRlZiBPUzJPUlVOSVgKKyAgICBjaGFyIHRtcGJ1ZltDS01BWFBBVEgrMV07CisjZW5kaWYgLyog T1MyT1JVTklYICovCisKKyAgICBuYW1lID0gZmlsZW5hbWUgPyBmaWxlbmFtZSA6ICIiOwkvKiBD b3B5IG9mIG9yaWdpbmFsIGFyZyAqLworICAgIGlmIChwYXR0ZXJucyAmJiAqbmFtZSkgewkJLyog SWYgUEFUVEVSTlMgT04uLi4gKi8KKwlpbnQgaTsKKworI2lmZGVmIE9TMk9SVU5JWAorCWlmIChj a21hdGNoKCIqLn5bMS05XSp+IixuYW1lLDEsMSkpIHsgLyogTmFtZSBoYXMgYmFja3VwIHN1ZmZp eD8gKi8KKwkgICAgaW50IGs7CisJICAgIGsgPSBja3N0cm5jcHkodG1wYnVmLG5hbWUsQ0tNQVhQ QVRIKzEpOyAvKiBZZXMsIGNvcHkgYW5kIHN0cmlwICovCisJICAgIGZvciAoaSA9IGsgLSAzOyBp ID4gNDsgaS0tKSB7CisJCWlmICh0bXBidWZbaV0gPT0gJ34nICYmIHRtcGJ1ZltpLTFdID09ICcu JykgeworCQkgICAgdG1wYnVmW2ktMV0gPSBOVUw7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9 CisJICAgIG5hbWUgPSB0bXBidWY7CQkvKiBBbmQgcG9pbnQgdG8gc3RyaXBwZWQgY29weSAqLwor CX0KKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKwl6c3RyaXAobmFtZSwmcCk7CQkvKiBTdHJpcCBw YXRobmFtZSB0b28gKi8KKwluYW1lID0gcDsKKworICAgICAgICBpZiAobG9jYWwpIHsKKyAgICAg ICAgICAgIGlmICh0eHRwYXR0ZXJuc1swXSkgewkvKiBTZWFyY2ggdGV4dCBwYXR0ZXJucyAqLwor ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIHR4dHBhdHRlcm5z W2ldOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNrbWF0Y2godHh0cGF0dGVybnNb aV0sbmFtZSxmaWxlY2FzZSwxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYmlucGF0dGVy bnNbMF0pIHsJLyogQW5kIHNlYXJjaCBiaW5hcnkgcGF0dGVybnMgKi8KKyAgICAgICAgICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUyAmJiBiaW5wYXR0ZXJuc1tpXTsgaSsrKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChja21hdGNoKGJpbnBhdHRlcm5zW2ldLG5hbWUsZmlsZWNh c2UsMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gKHJjID4gLTEpID8gLTIgOiAx OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisJfSBlbHNlIHsKKyAgICAgICAgICAg IGlmIChvcyA+PSAwICYmIG9zIDwgU1lTX01BWCkgeworCQlpZiAodHh0cFtvc11bMF0pIHsKKwkJ ICAgIGZvciAoaSA9IDA7IGkgPCBGVFBBVFRFUk5TICYmIHR4dHBbb3NdW2ldOyBpKyspIHsKKwkJ CWlmIChja21hdGNoKHR4dHBbb3NdW2ldLG5hbWUsZmlsZWNhc2UsMSkpIHsKKwkJCSAgICByYyA9 IDA7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9CisJCX0KKwkJaWYgKGJpbnBbb3NdWzBd KSB7CisJCSAgICBmb3IgKGkgPSAwOyBpIDwgRlRQQVRURVJOUyAmJiBiaW5wW29zXVtpXTsgaSsr KSB7CisJCQlpZiAoY2ttYXRjaChiaW5wW29zXVtpXSxuYW1lLGZpbGVjYXNlLDEpKSB7CisJCQkg ICAgcmMgPSAocmMgPiAtMSkgPyAtMiA6IDE7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCSAgICB9 CisJCX0KKwkgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGRlYnVnKEYxMTEsIm1hdGNobmFt ZSIsbmFtZSxyYyk7CisgICAgcmV0dXJuKHJjKTsKK30KKyNlbmRpZiAvKiBQQVRURVJOUyAqLwor CisjaWZkZWYgVU5JQ09ERQorI2lmbmRlZiBOT0VWRU5NQVgKKyNkZWZpbmUgRVZFTk1BWAorI2Vu ZGlmIC8qIE5PRVZFTk1BWCAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworLyogIFMgQyBBIE4g RiBJIEwgRSAgLS0gIEFuYWx5emUgYSBmaWxlJ3MgY29udGVudHMgICovCisKKy8qCisgIENhbGwg d2l0aDoKKyAgICBuYW1lOiAgICBQb2ludGVyIHRvIG5hbWUgb2YgZXhpc3RpbmcgZmlsZS4KKyAg ICBmbGFnOiAgICBQb2ludGVyIHRvIGludCBpbiB3aGljaCB0byByZXR1cm4gYWRkaXRpb25hbCBu dW1lcmljIGRhdGEuCisKKyAgUmV0dXJuczoKKyAgICAtMSBvbiBmYWlsdXJlICh0byBvcGVuIGZp bGUgb3IgdG8gcmVhZCBmcm9tIGl0KS4KKyAgICBJbnRlZ2VyLCAwLi40LCBvbiBzdWNjZXNzIGlu ZGljYXRpbmcgZmlsZSB0eXBlOgorICAgICAwID0gNy1iaXQgdGV4dCAoZmxhZyA9IC0xKQorICAg ICAxID0gVVRGLTggdGV4dCAoZmxhZyA9IC0xKQorICAgICAyID0gVUNTLTIgdGV4dCAoZmxhZyA9 ICAwOiBiaWctZW5kaWFuOyBmbGFnID0gMTogbGl0dGxlLWVuZGlhbikKKyAgICAgMyA9IDgtYml0 IHRleHQgKGZsYWcgPSAgMDogbm8gQzEgYnl0ZXM7IGZsYWcgPSAxOiBpbmNsdWRlcyBDMSBieXRl cykKKyAgICAgNCA9IFRleHQgICAgICAgKHR5cGUgdW5rbm93bikKKyAgICAgNSA9IGJpbmFyeSAg ICAgKGZsYWcgPSAtMSkKKworICBJZiBVTklDT0RFIGlzIGRlZmluZWQ6CisKKyAgIDEuIElmIGZp bGUgYmVnaW5zIHdpdGggYSB2YWxpZCBCT00sIGl0IGlzIGJlbGlldmVkLiAgT3RoZXJ3aXNlIHdl CisgICAgICByZWFkIHRoZSBmaXJzdCA0SyBvZiB0aGUgZmlsZSAoc2luY2UgaXQgbWlnaHQgYmUg ZW1haWwgd2l0aCB2ZXJib3NlCisgICAgICBoZWFkZXJzKSBhbmQgYW5hbHl6ZSBpdDoKKworICAg Mi4gSWYgZmlsZSBjb250YWlucyBvbmx5IHZhbGlkIFVURi04IHNlcXVlbmNlcywgd2UgY2FsbCBp dCBVVEYtODsKKyAgICAgIG90aGVyd2lzZToKKworICAgMy4gSWYgdGhlIGZpbGUgY29udGFpbnMg bG90cyBvZiBhbHRlcm5hdGUgMCBieXRlcywgd2UgY2FsbCBpdCBVQ1MtMiwgYW5kCisgICAgICBz ZXQgdGhlIHBvbGFyaXR5IGFjY29yZGluZyB0byB3aGV0aGVyIHRoZSBwcmVwb25kZXJhbmNlIG9m IHRoZW0gYXJlIGluCisgICAgICBldmVuIG9yIG9kZCBwb3NpdGlvbnM7IG90aGVyd2lzZToKKwor ICAgNC4gSWYgRVZFTk1BWCBpcyBkZWZpbmVkIGFuZCB0aGUgZmlsZSBjb250YWlucyBsb3RzIG9m IGFsdGVybmF0ZSBieXRlcyB0aGF0CisgICAgICBhcmUgaWRlbnRpY2FsLCBldmVuIGlmIHRoZXkg YXJlbid0IHplcm8sIGFuZCB0aGUgbnVtYmVyIG9mIHN1Y2ggYnl0ZXMKKyAgICAgIGlzIGF0IGxl YXN0IGZvdXIgdGltZXMgdGhlIGxlbmd0aCBvZiB0aGUgbWF4aW11bSBydW4gb2YgYWx0ZXJuYXRp bmcKKyAgICAgIGlkZW50aWNhbCBieXRlcyBvZiB0aGUgb3Bwb3NpdGUgcG9sYXJpdHksIHdlIGNh bGwgaXQgVUNTLTI7IG90aGVyd2lzZToKKworICAgNS4gSWYgdGhlIGZpbGUgY29udGFpbmVkIG5v IGJ5dGVzIHdpdGggdGhlaXIgOHRoIGJpdHMgb24gYW5kIG5vIGNvbnRyb2xzCisgICAgICBvdGhl ciB0aGFuIENSLCBMRiwgSFQsIGFuZCBGRiwgd2UgY2FsbCBpdCBBU0NJSTsgb3RoZXJ3aXNlOgor CisgICA2LiBJZiBpdCBjb250YWlucyBDMCBjb250cm9sIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBD UiwgTEYsIEhULCBhbmQgRkYsIHdlCisgICAgICBjYWxsIGl0IGJpbmFyeTsgb3RoZXJ3aXNlOgor CisgICA3LiBXZSBjYWxsIGl0IDgtYml0IHRleHQsIGNoYXJhY3RlciBzZXQgdW5rbm93biAoY291 bGQgYmUgTGF0aW4tMSBvcgorICAgICAgYW55dGhpbmcgZWxzZSkuCisKKyAgIE5vdGUgdGhhdCBt YWxmb3JtZWQgVVRGLTggaXMgbm90IGRpYWdub3NlZCBhcyBVVEYtOC4KKworICAgSWYgVU5JQ09E RSBpcyBub3QgZGVmaW5lZDoKKworICAgMS4gSWYgdGhlIGZpbGUgY29udGFpbnMgQzAgY29udHJv bCBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gQ1IsIExGLCBIVCwgYW5kCisgICAgICBGRiwgd2UgY2Fs bCBpdCBiaW5hcnk7IG90aGVyd2lzZToKKworICAgMi4gSWYgdGhlIGZpbGUgY29udGFpbnMgYW55 IDgtYml0IGJ5dGVzLCB3ZSBjYWxsIGl0IDgtYml0IHRleHQ7IG90aGVyd2lzZToKKworICAgMy4g V2UgY2FsbCBpdCA3LWJpdCB0ZXh0LgorCisgICBJbiB0aGUgbm9uLVVuaWNvZGUgY2FzZSwgVUNT LTIgaXMgZGlhZ25vc2VkIGFzIGJpbmFyeSwgYnV0IFVURi04IGFzCisgICA4LWJpdCB0ZXh0Lgor CisgICBUaGVyZSBpcyBubyBzaWduaWZpY2FudCBzcGVlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhl IFVuaWNvZGUgYW5kCisgICBub24tVW5pY29kZSBjYXNlcy4KKyovCitpbnQKK3NjYW5maWxlKG5h bWUsZmxhZyxuc2NhbmZpbGUpIGNoYXIgKiBuYW1lOyBpbnQgKiBmbGFnLCBuc2NhbmZpbGU7IHsK KyAgICBGSUxFICogZnA7CQkJCS8qIEZpbGUgcG9pbnRlciAqLworICAgIHVuc2lnbmVkIGNoYXIg YnVmW1NDQU5GSUxFQlVGXTsJLyogRmlsZSBkYXRhIGJ1ZmZlciBmb3IgYW5hbHlzaXMgKi8KKyAg ICBpbnQgeCwgdmFsID0gLTEsIGNvdW50ID0gMDsJCS8qIFdvcmtlcnMgKi8KKyAgICBpbnQgcmMg PSAtMTsJCQkvKiBSZXR1cm4gY29kZSAqLworICAgIGludCBwdiA9IC0xOwkJCS8qIFBhdHRlcm4t bWF0Y2ggdmFsdWUgKi8KKyAgICBpbnQgZW9mID0gMDsJCQkvKiBGbGFnIGZvciBmaWxlIEVPRiBl bmNvdW50ZXJlZCAqLworICAgIGludCBieXRlcyA9IDA7CQkJLyogVG90YWwgYnl0ZSBjb3VudCAq LworI2lmZGVmIFVOSUNPREUKKyAgICB1bnNpZ25lZCBpbnQgYzAsIGMxOwkJLyogRmlyc3QgMiBm aWxlIGJ5dGVzIChmb3IgQk9NKSAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyAgICBleHRlcm4g aW50IHBpcGVzZW5kLCBmaWxlcGVlazsKKworICAgIHJlZ2lzdGVyIGludCBpOwkJCS8qIExvb3Ag Y29udHJvbCAqLworICAgIGludCByZWFkc2l6ZSA9IDA7CQkJLyogSG93IG11Y2ggdG8gcmVhZCAq LworICAgIGludCBlaWdodGJpdCA9IDA7CQkJLyogTnVtYmVyIG9mIGJ5dGVzIHdpdGggOHRoIGJp dCBvbiAqLworICAgIGludCBjMGNvbnRyb2xzID0gMDsJCQkvKiBDMCBub24tdGV4dCBjb250cm9s LWNoYXIgY291bnRlciAqLworICAgIGludCBjMG5vbmlzbyA9IDA7CQkJLyogQzAgbm9uLUlTTyBj b250cm9sLWNoYXIgY291bnRlciAqLworICAgIGludCBjMWNvbnRyb2xzID0gMDsJCQkvKiBDMSBj b250cm9sLWNoYXJhY3RlciBjb3VudGVyICovCisgICAgdW5zaWduZWQgaW50IGM7CQkJLyogQ3Vy cmVudCBjaGFyYWN0ZXIgKi8KKyAgICBpbnQgcnVubWF4ID0gMDsJCQkvKiBMb25nZXN0IHJ1biBv ZiAwIGJ5dGVzICovCisgICAgaW50IHJ1bnplcm8gPSAwOwkJCS8qIFJ1biBvZiAwIGJ5dGVzICov CisgICAgaW50IHBjdHplcm8gPSAwOwkJCS8qIFBlcmNlbnRhZ2Ugb2YgMCBieXRlcyAqLworICAg IGludCB0eHRjeiA9IDA7CisjaWZkZWYgQ0tfQ1RSTFoKKyAgICBleHRlcm4gaW50IGVvZm1ldGhv ZDsKKyNlbmRpZiAvKiBDS19DVFJMWiAqLworCisjaWZkZWYgVU5JQ09ERQorICAgIGludCBub3R1 dGY4ID0gMDsJCQkvKiBOb256ZXJvIGlmIGRlZmluaXRlbHkgbm90IFVURi04ICovCisgICAgaW50 IHV0ZjhzdGF0ZSA9IDA7CQkJLyogVVRGLTggcmVjb2duaXplciBzdGF0ZSAqLworICAgIGludCBv ZGR6ZXJvID0gMDsJCQkvKiBOdW1iZXIgb2YgMCBieXRlcyBpbiBvZGQgcG9zdGlvbnMgKi8KKyAg ICBpbnQgZXZlbnplcm8gPSAwOwkJCS8qIGFuZCBpbiBldmVuIHBvc2l0aW9ucyAqLworICAgIGlu dCBsZm51bCA9IDA7CQkJLyogTnVtYmVyIG9mIDxMRj48TlVMPiBzZXF1ZW5jZXMgKi8KKyAgICBp bnQgY3JsZiA9IDA7CQkJLyogTnVtYmVyIG9mIDxDUkxGPiBzZXF1ZW5jZXMgKi8KKyNlbHNlCisg ICAgaW50IG5vdHV0ZjggPSAxOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworI2lmZGVmIENPTU1F TlQKKyNpZmRlZiBFVkVOTUFYCisgICAgaW50IG9kZHJ1biA9IDAsIG9kZG1heCA9IDAsIG9kZGJ5 dGUgPSAwLCBvZGRtYXhieXRlID0gMDsKKyAgICBpbnQgZXZlbnJ1biA9IDAsIGV2ZW5tYXggPSAw LCBldmVuYnl0ZSA9IDAsIGV2ZW5tYXhieXRlID0gMDsKKyNlbmRpZiAvKiBFVkVOTUFYICovCisj ZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZuZGVmIE5PWEZFUgorICAgIGlmIChwaXBlc2VuZCB8 fCBjYWxpYnJhdGUgfHwgc25kYXJyYXkpIC8qIE9ubHkgZm9yIHJlYWwgZmlsZXMgKi8KKyAgICAg IHJldHVybigtMSk7CisjZW5kaWYgLyogTk9YRkVSICovCisgICAgZGVidWcoRjExMSwic2NhbmZp bGUiLG5hbWUsbnNjYW5maWxlKTsKKyNpZmRlZiBQQVRURVJOUworICAgIGlmICghZmlsZXBlZWsp IHsKKwlwdiA9IG1hdGNobmFtZShuYW1lLDEsLTEpOworCWlmIChwdiA8IDApCisJICByYyA9IC0x OworCWVsc2UKKwkgIHJjID0gKHB2ID09IDEpID8gRlRfQklOIDogRlRfVEVYVDsKKwlkZWJ1ZyhG MTExLCJzY2FuZmlsZSAhZmlsZXBlZWsgcmVzdWx0IixuYW1lLHJjKTsKKwlyZXR1cm4ocmMpOwor ICAgIH0KKyNlbmRpZiAvKiBQQVRURVJOUyAqLworCisjaWZkZWYgVk1TCisvKiBXZSBkb24ndCBz Y2FuIGluIFZNUyB3aGVyZSB0ZXh0IGZpbGVzIGhhdmUgdmFyaW91cyByZWNvcmQgZm9ybWF0cyBp biAgKi8KKy8qIHdoaWNoIHJlY29yZCBoZWFkZXJzIGNvbnRhaW4gc2VlbWluZ2x5IG5vbi10ZXh0 IGJ5dGVzLiAgU28gdGhlIGJlc3QgICAqLworLyogd2UgY2FuIGRvIGluIFZNUyBpcyB0ZWxsIHdo ZXRoZXIgdGhlIGZpbGUgaXMgdGV4dCBvciBiaW5hcnksIHBlcmlvZC4gICovCisgICAgeworCWlu dCBiLCB4OworCWIgPSBiaW5hcnk7CQkJLyogU2F2ZSBjdXJyZW50IGJpbmFyeSBzZXR0aW5nICov CisJaWYgKHpvcGVuaShaSUZJTEUsbmFtZSkgPiAwKSB7CS8qIEluIFZNUyB0aGlzIHNldHMgYmlu YXJ5ICovCisJICAgIHggPSBiaW5hcnk7CQkJLyogR2V0IHJlc3VsdCAqLworCSAgICB6Y2xvc2Uo WklGSUxFKTsJCS8qIENsb3NlIHRoZSBmaWxlICovCisJICAgIGJpbmFyeSA9IGI7CQkJLyogUmVz dG9yZSBwcmV2aW91cyBiaW5hcnkgc2V0dGluZyAqLworCSAgICByYyA9IHggPyBGVF9CSU4gOiBG VF9URVhUOworCSAgICB2YWwgPSAwOworCSAgICBnb3RvIHhzY2FuZmlsZTsKKwl9CisgICAgfQor I2VuZGlmIC8qIFZNUyAqLworCisgICAgZW9mID0gMDsJCQkJLyogRW5kLW9mLWZpbGUgcmVhY2hl ZCBpbmRpY2F0b3IgKi8KKyNpZmRlZiBPUzIKKyAgICBmcCA9IGZvcGVuKG5hbWUsICJyYiIpOwkJ LyogT3BlbiB0aGUgZmlsZSBpbiBiaW5hcnkgbW9kZSAqLworI2Vsc2UKKyAgICBmcCA9IGZvcGVu KG5hbWUsICJyIik7CisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAoIWZwKQkJCQkvKiBGYWls ZWQ/ICovCisgICAgICByZXR1cm4oLTEpOworCisgICAgd2hpbGUgKDEpIHsJCQkJLyogT25lIG9y IG1vcmUgZ3VscHMgZnJvbSBmaWxlICovCisJaWYgKGVvZikgewkJCS8qIEVPRiBmcm9tIGxhc3Qg dGltZT8gKi8KKwkgICAgZGVidWcoRjExMSwic2NhbmZpbGUgYXQgRU9GIixuYW1lLGJ5dGVzKTsK KwkgICAgaWYgKHJ1bnplcm8gPiBydW5tYXgpCisJICAgICAgcnVubWF4ID0gcnVuemVybzsKKwkg ICAgYnJlYWs7CisJfQorCWlmIChuc2NhbmZpbGUgPCAwKSB7CQkvKiBSZWFkaW5nIHdob2xlIGZp bGUgKi8KKwkgICAgcmVhZHNpemUgPSBTQ0FORklMRUJVRjsKKwl9IGVsc2UgewkJCS8qIFJlYWRp bmcgZmlyc3QgbnNjYW5maWxlZSBieXRlcyAqLworCSAgICByZWFkc2l6ZSA9IG5zY2FuZmlsZSAt IGJ5dGVzOworCSAgICBpZiAocmVhZHNpemUgPCAxKQorCSAgICAgIGJyZWFrOworCSAgICBpZiAo cmVhZHNpemUgPiBTQ0FORklMRUJVRikKKwkgICAgICByZWFkc2l6ZSA9IFNDQU5GSUxFQlVGOwor CX0KKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSByZWFkc2l6ZSIsIiIscmVhZHNpemUpOworCWNvdW50 ID0gZnJlYWQoYnVmLDEscmVhZHNpemUsZnApOyAvKiBSZWFkIGEgYnVmZmVyICovCisJaWYgKGNv dW50ID09IEVPRiB8fCBjb3VudCA9PSAwKSB7CisJICAgIGRlYnVnKEYxMTEsInNjYW5maWxlIEVP RiIsbmFtZSxjb3VudCk7CisJICAgIGJyZWFrOworCX0KKwlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBi dWZmZXIgb2siLG5hbWUsY291bnQpOworCisJaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiA4KSB7 CisJICAgIC8qIFBERiBmaWxlcyBjYW4gbG9vayBsaWtlIHRleHQgaW4gdGhlIGJlZ2lubmluZy4g Ki8KKwkgICAgaWYgKCFja3N0cmNtcCgoY2hhciAqKWJ1ZiwiJVBERi0xLiIsNywxKSkgeworCQlp ZiAoaXNkaWdpdChidWZbN10pKSB7CisJCSAgICBpZiAoYnVmWzhdID09ICdcMDE1JyB8fAorCQkJ Y291bnQgPiA5ICYmIGJ1Zls4XSA9PSBTUCAmJiBidWZbOV0gPT0gJ1wwMTUnKSB7CisjaWZkZWYg REVCVUcKKwkJCWJ1Zls4XSA9IE5VTDsKKwkJCWRlYnVnKEYxMTAsInNjYW5maWxlIFBERiIsYnVm LDApOworI2VuZGlmIC8qIERFQlVHICovCisJCQliaW5hcnkgPSAxOwkvKiBCdXQgdGhleSBhcmUg YmluYXJ5LiAqLworCQkJYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfSBlbHNlIGlmICghY2tz dHJjbXAoKGNoYXIgKilidWYsIiUhUFMtQWRvIiw4LDEpKSB7CisJCS8qIERpdHRvIGZvciBQb3N0 U2NyaXB0ICovCisjaWZkZWYgREVCVUcKKwkJaW50IGk7CisJCWZvciAoaSA9IDg7IGkgPCBjb3Vu dDsgaSsrKSB7CisJCSAgICBpZiAoYnVmW2ldIDwgJyEnKSB7CisJCQlidWZbaV0gPSBOVUw7CisJ CQlicmVhazsKKwkJICAgIH0KKwkJfQorCQlkZWJ1ZyhGMTEwLCJzY2FuZmlsZSBQb3N0U2NyaXB0 IixidWYsMCk7CisjZW5kaWYgLyogREVCVUcgKi8KKwkJYmluYXJ5ID0gMTsKKwkJYnJlYWs7Cisj aWZuZGVmIE5PUENMU0NBTgorCSAgICB9IGVsc2UgaWYgKCFja3N0cmNtcCgoY2hhciAqKWJ1Ziwi KSBIUC1QQ0wiLDgsMSkpIHsKKwkJLyogSFAgUENMIHByaW50ZXIgbGFuZ3VhZ2UgKi8KKyNpZmRl ZiBERUJVRworCQlpbnQgaTsKKwkJZm9yIChpID0gODsgaSA8IGNvdW50OyBpKyspIHsKKwkJICAg IGlmIChidWZbaV0gPCAnIScpIHsKKwkJCWJ1ZltpXSA9IE5VTDsKKwkJCWJyZWFrOworCQkgICAg fQorCQl9CisJCWRlYnVnKEYxMTAsInNjYW5maWxlIFBDTCIsYnVmLDApOworI2VuZGlmIC8qIERF QlVHICovCisJCWJpbmFyeSA9IDE7CisJCWJyZWFrOworCSAgICB9IAorI2VuZGlmIC8qIE5PUENM U0NBTiAqLworI2lmbmRlZiBOT1BKTFNDQU4KKwkgICAgICBlbHNlIGlmIChidWZbMF0gPT0gJ1ww MzMnICYmIChidWZbMV0gPT0gJ0UnIHx8IGJ1ZlsxXSA9PSAnJScpKSB7CisJCS8qIERpdHRvIGZv ciBQSkwgSm9iIHByaW50ZXIgaGVhZGVyICovCisjaWZkZWYgREVCVUcKKwkJaW50IGk7CisJCWZv ciAoaSA9IDI7IGkgPCBjb3VudDsgaSsrKSB7CisJCSAgICBpZiAoYnVmW2ldIDwgJyEnKSB7CisJ CQlidWZbaV0gPSBOVUw7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCQlkZWJ1ZyhGMTEwLCJz Y2FuZmlsZSBQSkwgSm9iIHByaW50ZXIgaGVhZGVyIixidWYsMCk7CisjZW5kaWYgLyogREVCVUcg Ki8KKwkJYmluYXJ5ID0gMTsKKwkJYnJlYWs7CisjZW5kaWYgLyogTk9QSkxTQ0FOICovCisJICAg IH0KKwl9CisKKyNpZmRlZiBVTklDT0RFCisJaWYgKGJ5dGVzID09IDAgJiYgY291bnQgPiAxKSB7 CisJICAgIGludCBpbmNsX2NudCA9IDA7CisKKwkgICAgLyogRmlyc3QgbG9vayBmb3IgQk9NICov CisKKwkgICAgYzAgPSAodW5zaWduZWQpKCh1bnNpZ25lZClidWZbMF0mMHhGRik7IC8qIEZpcnN0 IGZpbGUgYnl0ZSAqLworCSAgICBjMSA9ICh1bnNpZ25lZCkoKHVuc2lnbmVkKWJ1ZlsxXSYweEZG KTsgLyogU2Vjb25kIGJ5dGUgKi8KKworCSAgICBpZiAoYzAgPT0gMHhGRSAmJiBjMSA9PSAweEZG KSB7CS8qIFVDUy0yIEJFICovCisJCXJjID0gRlRfVUNTMjsKKwkJdmFsID0gMDsKKwkJZGVidWco RjExMSwic2NhbmZpbGUgVUNTMiBCT00gQkUiLGNraXRvYSh2YWwpLHJjKTsKKwkJaW5jbF9jbnQr KzsKKwkgICAgfSBlbHNlIGlmIChjMCA9PSAweEZGICYmIGMxID09IDB4RkUpIHsgLyogVUNTLTIg TEUgKi8KKwkJcmMgPSBGVF9VQ1MyOworCQl2YWwgPSAxOworCQlkZWJ1ZyhGMTExLCJzY2FuZmls ZSBVQ1MyIEJPTSBMRSIsY2tpdG9hKHZhbCkscmMpOworCQlpbmNsX2NudCsrOworCSAgICB9IGVs c2UgaWYgKGNvdW50ID4gMikgaWYgKGMwID09IDB4RUYgJiYgYzEgPT0gMHhCQiAmJgorCQkgICAg ICAgKHVuc2lnbmVkKSgodW5zaWduZWQpYnVmWzJdJjB4RkYpID09IDB4QkYpIHsKKwkJcmMgPSBG VF9VVEY4OworCQlkZWJ1ZyhGMTExLCJzY2FuZmlsZSBVVEY4IEJPTSIsY2tpdG9hKHZhbCkscmMp OworCQlpbmNsX2NudCsrOworCSAgICB9CisJICAgIGlmIChpbmNsX2NudCkgewkJLyogSGF2ZSBC T00gKi8KKwkJYnl0ZXMgKz0gY291bnQ7CisJCWdvdG8geHNjYW5maWxlOworCSAgICB9CisJfQor I2VuZGlmIC8qIFVOSUNPREUgKi8KKworCWJ5dGVzICs9IGNvdW50OwkJCS8qIENvdW50IGJ5dGVz IHJlYWQgKi8KKwllb2YgPSBmZW9mKGZwKTsJCQkvKiBGbGFnIGZvciBhdCBFT0YgICovCisKKwlm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewkvKiBGb3IgZWFjaCBieXRlLi4uICovCisJICAg IGMgPSAodW5zaWduZWQpYnVmW2ldOwkvKiBGb3IgZWFzZSBvZiByZWZlcmVuY2UgKi8KKwkgICAg aWYgKCFjKSB7CQkJLyogWmVybyBieXRlPyAqLworI2lmZGVmIEVWRU5NQVgKKwkJaWYgKGkmMSkJ CS8qIEluIG9kZCBwb3NpdGlvbiAqLworCQkgIG9kZHplcm8rKzsKKwkJZWxzZQorCQkgIGV2ZW56 ZXJvKys7CQkvKiBJbiBldmVuIHBvc2l0aW9uICovCisjZW5kaWYgLyogRVZFTk1BWCAqLworCQly dW56ZXJvKys7CisJICAgIH0gZWxzZSB7CQkJLyogTm90IGEgemVybyBieXRlICovCisJCWlmIChy dW56ZXJvID4gcnVubWF4KQorCQkgIHJ1bm1heCA9IHJ1bnplcm87CisJCWlmIChydW5tYXggPiAy KQkJLyogVGhhdCdzIGFsbCB3ZSBuZWVkIHRvIGJlIGNlcnRhaW4gKi8KKwkJICBicmVhazsJCS8q IGl0J3MgYSBiaW5hcnkgZmlsZS4gKi8KKwkJcnVuemVybyA9IDA7CisJICAgIH0KKworI2lmZGVm IENPTU1FTlQKKyNpZmRlZiBFVkVOTUFYCisKKy8qIFRoaXMgaXMgdG8gY2F0Y2ggVUNTLTIgd2l0 aCBhIG5vbi1BU0NJSSwgbm9uLUxhdGluLTEgcmVwZXJ0b2lyZSAgKi8KKworCSAgICBpZiAoaSA+ IDEpIHsJICAgICAgLyogTG9vayBmb3IgcnVucyBvZiBhbHRlcm5hdGluZyBjaGFycyAqLworCQlp ZiAoaSYxKSB7CisJCSAgICBpZiAoYyA9PSBidWZbaS0yXSkgeyAvKiBJbiBvZGQgcG9zaXRpb25z ICovCisJCQlvZGRydW4rKzsKKwkJCW9kZGJ5dGUgPSBjOworCQkgICAgfSBlbHNlIHsKKwkJCW9k ZG1heCA9IG9kZHJ1bjsKKwkJCW9kZG1heGJ5dGUgPSBvZGRieXRlOworCQkgICAgfQorCQl9IGVs c2UgewkJLyogYW5kIGV2ZW4gcG9zaXRpb25zICovCisJCSAgICBpZiAoYyA9PSBidWZbaS0yXSkg eworCQkJZXZlbnJ1bisrOworCQkJZXZlbmJ5dGUgPSBjOworCQkgICAgfSBlbHNlIHsKKwkJCWV2 ZW5tYXggPSBldmVucnVuOworCQkJZXZlbm1heGJ5dGUgPSBldmVuYnl0ZTsKKwkJICAgIH0KKwkJ fQorCSAgICB9CisjZW5kaWYgLyogRVZFTk1BWCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwor CSAgICBpZiAoKGMgJiAweDgwKSA9PSAwKSB7CS8qIFdlIGhhdmUgYSA3LWJpdCBieXRlICovCisj aWZkZWYgVU5JQ09ERQorCQlpZiAoaSA+IDAgJiYgYyA9PSAxMCkgeyAvKiBMaW5lZmVlZCAqLwor CQkgICAgaWYgKGJ1ZltpLTFdID09IDApIGxmbnVsKys7IC8qIFByZWNlZGVkIGJ5IE5VTCAqLwor CQkgICAgZWxzZSBpZiAoYnVmW2ktMV0gPT0gMTMpIGNybGYrKzsgLyogb3IgYnkgQ1IuLi4gKi8K KwkJfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkJaWYgKGMgPCAnICcpIHsJCS8qIENoZWNrIGZv ciBDTyBjb250cm9scyAqLworCQkgICAgaWYgKGMgIT0gTEYgJiYgYyAhPSBDUiAmJiBjICE9IEhU ICYmIGMgIT0gRkYpIHsKKwkJCWMwY29udHJvbHMrKzsKKwkJCWlmIChjICE9IEVTQyAmJiBjICE9 IFNPICYmIGMgIT0gU0kpCisJCQkgIGMwbm9uaXNvKys7CisJCSAgICB9CisJCSAgICBpZiAoKGMg PT0gJ1wwMzInKQkvKiBDdHJsLVogKi8KKyNpZmRlZiBDT01NRU5UCisJCQkmJiBlb2YgJiYgKGkg Pj0gY291bnQgLSAyKQorI2VuZGlmIC8qIENPTU1FTlQgKi8KKwkJCSkgeworCQkJYzBjb250cm9s cy0tOworCQkJYzBub25pc28tLTsKKyNpZmRlZiBDS19DVFJMWgorCQkJaWYgKGVvZm1ldGhvZCA9 PSBYWUVPRl9aICYmIHR4dGN6ID09IDApIHsKKwkJCSAgICBpZiAoYzBjb250cm9scyA9PSAwKSAv KiBBbGwgdGV4dCBwcmlvciB0byBDdHJsLVogKi8KKwkJCSAgICAgIHR4dGN6ID0gMTsKKwkJCX0K KyNlbmRpZiAvKiBDS19DVFJMWiAqLworCQkgICAgfQorCQl9CisjaWZkZWYgVU5JQ09ERQorCQlp ZiAoIW5vdHV0ZjggJiYgdXRmOHN0YXRlKSB7IC8qIEluIFVURi04IHNlcXVlbmNlPyAqLworCQkg ICAgdXRmOHN0YXRlID0gMDsKKwkJICAgIGRlYnVnKEYwMDAsInNjYW5maWxlIiwiNy1iaXQgYnl0 ZSBpbiBVVEY4IHNlcXVlbmNlIixjKTsKKwkJICAgIG5vdHV0ZjgrKzsJCS8qIFRoZW4gaXQncyBu b3QgVVRGLTggKi8KKwkJICAgIGNvbnRpbnVlOworCQl9CisjZW5kaWYgLyogVU5JQ09ERSAqLwor CSAgICB9IGVsc2UgewkJCS8qIFdlIGhhdmUgYW4gOC1iaXQgYnl0ZSAqLworCQllaWdodGJpdCsr OwkJLyogQ291bnQgaXQgKi8KKwkJaWYgKGMgPj0gMHg4MCAmJiBjIDwgMHhBMCkgLyogQ2hlY2sg Zm9yIEMxIGNvbnRyb2xzICovCisJCSAgYzFjb250cm9scysrOworI2lmZGVmIFVOSUNPREUKKwkJ aWYgKCFub3R1dGY4KSB7CQkvKiBJZiBpdCBtaWdodCBzdGlsbCBiZSBVVEY4Li4uICovCisJCSAg ICBzd2l0Y2ggKHV0ZjhzdGF0ZSkgeyAvKiBFbnRlciB0aGUgVVRGLTggc3RhdGUgbWFjaGluZSAq LworCQkgICAgICBjYXNlIDA6CQkgLyogRmlyc3QgYnl0ZS4uLiAqLworCQkJaWYgKChjICYgMHhF MCkgPT0gMHhDMCkgeyAvKiBUZWxscyBudW1iZXIgb2YgKi8KKwkJCSAgICB1dGY4c3RhdGUgPSAx OyAgICAgICAgLyogc3Vic2VxdWVudCBieXRlcyAqLworCQkJfSBlbHNlIGlmICgoYyAmIDB4RjAp ID09IDB4RTApIHsKKwkJCSAgICB1dGY4c3RhdGUgPSAyOworCQkJfSBlbHNlIGlmICgoYyAmIDB4 RjgpID09IDB4RjApIHsKKwkJCSAgICB1dGY4c3RhdGUgPSAzOworCQkJfSBlbHNlIHsKKwkJCSAg ICBub3R1dGY4Kys7CisJCQl9CisJCQlicmVhazsKKwkJICAgICAgY2FzZSAxOgkJLyogU3Vic2Vx dWVudCBieXRlICovCisJCSAgICAgIGNhc2UgMjoKKwkJICAgICAgY2FzZSAzOgorCQkJaWYgKChj ICYgMHhDMCkgIT0gMHg4MCkgeyAvKiBNdXN0IHN0YXJ0IHdpdGggMTAgKi8KKwkJCSAgICBkZWJ1 ZyhGMDAwLCJzY2FuZmlsZSIsCisJCQkJICAiYmFkIGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7 CisJCQkgICAgbm90dXRmOCsrOworCQkJICAgIGJyZWFrOworCQkJfQorCQkJdXRmOHN0YXRlLS07 CS8qIEdvb2QsIG9uZSBsZXNzIGluIHRoaXMgc2VxdWVuY2UgKi8KKwkJCWJyZWFrOworCQkgICAg ICBkZWZhdWx0OgkJLyogU2hvdWxkbid0IGhhcHBlbiAqLworCQkJZGVidWcoRjExMSwic2NhbmZp bGUiLCJiYWQgVVRGOCBzdGF0ZSIsdXRmOHN0YXRlKTsKKwkJCW5vdHV0ZjgrKzsKKwkJICAgIH0K KwkJfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwkgICAgfQorCX0KKyAgICB9CisgICAgZmNsb3Nl KGZwKTsJCQkJLyogQ2xvc2UgdGhlIGZpbGUgKi8KKyAgICBkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBi eXRlcyIsIiIsYnl0ZXMpOworCisgICAgaWYgKGJ5dGVzID09IDApCQkJLyogSWYgbm90aGluZyB3 YXMgcmVhZCAqLworICAgICAgcmV0dXJuKC0xKTsJCQkvKiB3ZSdyZSBkb25lLiAqLworCisjaWZk ZWYgRVZFTk1BWAorICAgIC8qIEluIGNhc2Ugd2UgaGFkIGEgcnVuIHRoYXQgbmV2ZXIgYnJva2Uu Li4gKi8KKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKG9kZG1heCA9PSAwKSB7CisJb2RkbWF4ID0g b2RkcnVuOworCW9kZG1heGJ5dGUgPSBvZGRieXRlOworICAgIH0KKyAgICBpZiAoZXZlbm1heCA9 PSAwKSB7CisJZXZlbm1heCA9IGV2ZW5ydW47CisJZXZlbm1heGJ5dGUgPSBldmVuYnl0ZTsKKyAg ICB9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgIGlmIChydW5tYXggPT0gMCkgeworCXJ1bm1h eCA9IHJ1bnplcm87CisgICAgfQorI2VuZGlmIC8qIEVWRU5NQVggKi8KKworI2lmZGVmIFVOSUNP REUKKyAgICBpZiAoYnl0ZXMgPiAxMDApCQkJLyogQnl0ZXMgaXMgbm90IDAgKi8KKyAgICAgIHBj dHplcm8gPSAoZXZlbnplcm8gKyBvZGR6ZXJvKSAvIChieXRlcyAvIDEwMCk7CisgICAgZWxzZQor ICAgICAgcGN0emVybyA9ICgoZXZlbnplcm8gKyBvZGR6ZXJvKSAqIDEwMCkgLyBieXRlczsKKyNl bmRpZiAvKiBVTklDT0RFICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsJCQkv KiBJZiBkZWJ1Z2dpbmcsIGR1bXAgc3RhdGlzdGljcyAqLworCWRlYnVnKEYxMDEsInNjYW5maWxl IGMwY29udHJvbHMgIiwiIixjMGNvbnRyb2xzKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjMG5v bmlzbyAgICIsIiIsYzBub25pc28pOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGMxY29udHJvbHMg IiwiIixjMWNvbnRyb2xzKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBlaWdodGJpdCAgICIsIiIs ZWlnaHRiaXQpOworI2lmZGVmIFVOSUNPREUKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBjcmxmICAg ICAgICIsIiIsY3JsZik7CisJZGVidWcoRjEwMSwic2NhbmZpbGUgbGZudWwgICAgICAiLCIiLGxm bnVsKTsKKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBub3R1dGY4ICAgICIsIiIsbm90dXRmOCk7CisJ ZGVidWcoRjEwMSwic2NhbmZpbGUgZXZlbnplcm8gICAiLCIiLGV2ZW56ZXJvKTsKKwlkZWJ1ZyhG MTAxLCJzY2FuZmlsZSBvZGR6ZXJvICAgICIsIiIsb2RkemVybyk7CisJZGVidWcoRjEwMSwic2Nh bmZpbGUgZXZlbi9vZGQgICAiLCIiLChldmVuemVybyAvIChvZGR6ZXJvICsgMSkpKTsKKwlkZWJ1 ZyhGMTAxLCJzY2FuZmlsZSBvZGQvZXZlbiAgICIsIiIsKG9kZHplcm8gLyAoZXZlbnplcm8gKyAx KSkpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIHBjdHplcm8gICAgIiwiIixwY3R6ZXJvKTsKKyNl bmRpZiAvKiBVTklDT0RFICovCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIEVWRU5NQVgKKwlkZWJ1 ZyhGMTAxLCJzY2FuZmlsZSBvZGRtYXggICAgICIsIiIsb2RkbWF4KTsKKwlkZWJ1ZyhGMTAxLCJz Y2FuZmlsZSBvZGRtYXhieXRlICIsIiIsb2RkbWF4Ynl0ZSk7CisJZGVidWcoRjEwMSwic2NhbmZp bGUgZXZlbm1heCAgICAiLCIiLGV2ZW5tYXgpOworCWRlYnVnKEYxMDEsInNjYW5maWxlIGV2ZW5t YXhieXRlIiwiIixldmVubWF4Ynl0ZSk7CisjZW5kaWYgLyogRVZFTk1BWCAqLworI2VuZGlmIC8q IENPTU1FTlQgKi8KKwlkZWJ1ZyhGMTAxLCJzY2FuZmlsZSBydW5tYXggICAgICIsIiIscnVubWF4 KTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8KKworI2lmZGVmIFVOSUNPREUKKyAgICB4ID0g ZWlnaHRiaXQgPyBieXRlcyAvIDIwIDogYnl0ZXMgLyA0OyAvKiBGb3IgVUNTLTIuLi4gKi8KKwor ICAgIGlmIChydW5tYXggPiAyKSB7CQkJLyogRmlsZSBoYXMgcnVuIG9mIG1vcmUgdGhhbiAyIE5V THMgKi8KKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBCSU4gcnVubWF4IiwiIiwwKTsKKwlyYyA9IEZU X0JJTjsJCQkvKiBzbyBpdCBjYW4ndCBiZSBhbnkga2luZCBvZiB0ZXh0LiAqLworCWdvdG8geHNj YW5maWxlOworCisgICAgfSBlbHNlIGlmIChyYyA9PSBGVF9VQ1MyIHx8IChyYyA9PSBGVF9VVEY4 ICYmIHJ1bm1heCA9PSAwKSkgeworCWdvdG8geHNjYW5maWxlOwkJCS8qIEZpbGUgc3RhcnRzIHdp dGggYSBCT00gKi8KKworICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQgPiAwICYmICFub3R1dGY4KSB7 IC8qIEZpbGUgaGFzIDgtYml0IGRhdGEgKi8KKwlpZiAocnVubWF4ID4gMCkgewkJICAgLyogYW5k IHJ1bnMgb2YgTlVMcyAqLworCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBCSU4gKG5uVVRGOCkg cnVubWF4IiwiIiwwKTsKKwkgICAgcmMgPSBGVF9CSU47CQkgICAvKiBVVEYtOCBkb2Vzbid0IGhh dmUgTlVMcyAqLworCX0gZWxzZSB7CQkJICAgLyogTm8gTlVMcyAqLworCSAgICBkZWJ1ZyhGMTAw LCJzY2FuZmlsZSBVVEY4IChublVURjggKyBydW5tYXggPT0gMCkiLCIiLDApOworCSAgICByYyA9 IEZUX1VURjg7CQkgICAvKiBhbmQgbm90IG5vdCBVVEYtOCwgc28gaXMgVVRGLTggKi8KKwl9CisJ Z290byB4c2NhbmZpbGU7CisgICAgfQorLyoKKyAgRm9yIFVDUy0yIGRldGVjdGlvbiwgc2VlIGlm IHRoZSB0ZXh0IGNvbnRhaW5zIGxpbmVzIGRlbGltaXRlZCBieQorICBBU0NJSSBjb250cm9scyBh bmQgY29udGFpbmluZyBzcGFjZXMsIEFTQ0lJIGRpZ2l0cywgb3Igb3RoZXIgQVNDSUkKKyAgY2hh cmFjdGVycywgdGh1cyBmb3JjaW5nIHRoZSBwcmVzZW5jZSBvZiBhIGNlcnRhaW4gcGVyY2VudGFn ZSBvZiB6ZXJvIGJ5dGVzLgorICBGb3IgdGhpcyBwdXJwb3NlIHJlcXVpcmUgMjAlIHplcm8gYnl0 ZXMsIHdpdGggYXQgbGVhc3Qgc2l4IHRpbWVzIGFzIG1hbnkKKyAgaW4gZXZlbiAob2RkKSBwb3Np dGlvbnMgYXMgaW4gb2RkIChldmVuKSBwb3NpdGlvbnMuCisqLworICAgIGlmICgoZXZlbnplcm8g Pj0geCAmJiBvZGR6ZXJvID09IDApIHx8CisJKCgoKGV2ZW56ZXJvIC8gKG9kZHplcm8gKyAxKSkg PiA2KSAmJiAocGN0emVybyA+IDIwKSkgJiYKKwkoY3JsZiA9PSAwKSAmJgorCShsZm51bCA+IDEp KQorCSkgeworCSAgICBkZWJ1ZyhGMTAwLCJzY2FuZmlsZSBVQ1MyIG5vQk9NIEJFIChldmVuL29k ZHplcm8pIiwiIiwwKTsKKwlyYyA9IEZUX1VDUzI7CisJdmFsID0gMDsKKyAgICB9IGVsc2UgaWYg KChldmVuemVybyA9PSAwICYmIG9kZHplcm8gPj0geCkgfHwKKwkgICAgICAgKCgoKG9kZHplcm8g LyAoZXZlbnplcm8gKyAxKSkgPiA2KSAmJiAocGN0emVybyA+IDIwKSkgJiYKKwkgICAgICAgKGNy bGYgPT0gMCkgJiYKKwkgICAgICAgKGxmbnVsID4gMSkpCisJICAgICAgICkgeworCWRlYnVnKEYx MDAsInNjYW5maWxlIFVDUzIgbm9CT00gTEUgKGV2ZW4vb2RkemVybykiLCIiLDApOworCXJjID0g RlRfVUNTMjsKKwl2YWwgPSAxOworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIEVWRU5NQVgKKy8q CisgIElmIHRoZSB0ZXN0cyBhYm92ZSBmYWlsLCB3ZSBzdGlsbCBtaWdodCBoYXZlIFVDUy0yIGlm IHRoZXJlIGFyZSBzaWduaWZpY2FudAorICBydW5zIG9mIGlkZW50aWNhbCBieXRlcyBpbiBhbHRl cm5hdGluZyBwb3NpdGlvbnMsIGJ1dCBvbmx5IGlmIGl0IGFsc28gaGFzCisgIHVudXN1YWwgQzAg Y29udHJvbHMgKG90aGVyd2lzZSB3ZSdkIHBpY2sgdXAgaGV4IGZpbGVzIGhlcmUpLiAgTk9URTog V2UKKyAgZG9uJ3QgYWN0dWFsbHkgZG8gdGhpcyAtLSBFVkVOTUFYIGlzIG5vdCBkZWZpbmVkIChz ZWUgY29tbWVudHMgYWJvdmUgYXQKKyAgZmlyc3Qgb2NjdXJyZW5jZSBvZiBFVkVOTUFYKS4KKyov CisgICAgfSBlbHNlIGlmIChjMG5vbmlzbyAmJiBldmVubWF4ID4gYnl0ZXMgLyA0KSB7CisJZGVi dWcoRjEwMCwic2NhbmZpbGUgVUNTMiBCRSAoZXZlbm1heCkiLCIiLDApOworCXJjID0gRlRfVUNT MjsKKwl2YWwgPSAwOworICAgIH0gZWxzZSBpZiAoYzBub25pc28gJiYgb2RkbWF4ID4gYnl0ZXMg LyA0KSB7CisJZGVidWcoRjEwMCwic2NhbmZpbGUgVUNTMiBMRSAoZXZlbm1heCkiLCIiLDApOwor CXJjID0gRlRfVUNTMjsKKwl2YWwgPSAxOworI2VuZGlmIC8qIEVWRU5NQVggKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisKKyAgICB9CisvKgorICBJdCBzZWVtcyB0byBiZSBVQ1MtMiBidXQgbGV0 J3MgYmUgbW9yZSBjZXJ0YWluIHNpbmNlIHRoZXJlIGlzIG5vIEJPTS4uLgorICBJZiB0aGUgbnVt YmVyIG9mIDctIGFuZCA4LWJpdCBjaGFyYWN0ZXJzIGlzIGFwcHJveGltYXRlbHkgZXF1YWwsIGl0 IG1pZ2h0CisgIGJlIGEgY29tcHJlc3NlZCBmaWxlLiAgSW4gdGhpcyBjYXNlIHdlIGRlY2lkZSBi YXNlZCBvbiB0aGUgbmFtZS4KKyovCisgICAgaWYgKHJjID09IEZUX1VDUzIpIHsKKwlpZiAoZWln aHRiaXQgPiAwKSB7CisJICAgIGludCBqLCBrOworCSAgICBqID0gKGMxY29udHJvbHMgKiAxMDAp IC8gKGMwY29udHJvbHMgKyAxKTsKKwkgICAgZGVidWcoRjEwMSwic2NhbmZpbGUgYzEvYzAgICAg ICAiLCIiLGopOworCSAgICBrID0gKGJ5dGVzICogMTAwKSAvIGVpZ2h0Yml0OworCSAgICBkZWJ1 ZyhGMTAxLCJzY2FuZmlsZSBwY3QgOGJpdCAgICIsIiIsayk7CisJICAgIGlmIChrID4gNDAgJiYg ayA8IDYwICYmIGogPiA2MCkgeworCQlpZiAoY2ttYXRjaCgieyouWiwqLmd6LCouemlwLCouWklQ fSIsbmFtZSwxLDEpKSB7CisJCSAgICBkZWJ1ZyhGMTEwLCJzY2FuZmlsZSA4LWJpdCBCSU4gY29t cHJlc3NlZCIsbmFtZSwwKTsKKwkJICAgIHJjID0gRlRfQklOOworCQkgICAgZ290byB4c2NhbmZp bGU7CisJCX0KKwkgICAgfQorCX0KKwkvKiBTbWFsbCBmaWxlIC0gbm90IGVub3VnaCBldmlkZW5j ZSB1bmxlc3MgLi4uICovCisKKwlpZiAoYnl0ZXMgPCAxMDApIHsKKwkgICAgaWYgKG9kZHplcm8g IT0gMCAmJiBldmVuemVybyAhPSAwKSB7CisJCWRlYnVnKEYxMDAsInNjYW5maWxlIHNtYWxsIFVD UzIgZG91YnRmdWwiLCIiLDApOworCQlyYyA9IEZUX0JJTjsKKwkJZ290byB4c2NhbmZpbGU7CisJ ICAgIH0gZWxzZSBpZiAob2RkemVybyA9PSAwICYmIGV2ZW56ZXJvID09IDApIHsKKwkJcmMgPSBl aWdodGJpdCA/IEZUXzhCSVQgOiBGVF83QklUOworCSAgICB9CisJfQorCWdvdG8geHNjYW5maWxl OwkJCS8qIFNlZW1zIHRvIGJlIFVDUy0yICovCisgICAgfQorCisvKiBJZiBub25lIG9mIHRoZSBh Ym92ZSwgaXQncyBwcm9iYWJseSBub3QgVW5pY29kZS4gICovCisKKyAgICBpZiAoIWVpZ2h0Yml0 KSB7CQkJLyogSXQncyA3LWJpdCAqLworCWlmIChjMGNvbnRyb2xzKSB7CQkvKiBUaGlzIHdvdWxk IGJlIHN0cmFuZ2UgKi8KKwkgICAgaWYgKChjMG5vbmlzbyA+IDApICYmICh0eHRjeiA9PSAwKSkg eworCQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJpdCBCSU4gKGMwY29uaXNvKSIsIiIsMCk7CisJ CXJjID0gRlRfQklOOworCSAgICB9IGVsc2UgeworCQlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA3LWJp dCBJU08yMDIyIFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7CisJCXJjID0gRlRfN0JJVDsKKwkg ICAgfQorCX0gZWxzZSB7CQkJLyogNy1iaXQgdGV4dCAqLworCSAgICBkZWJ1ZyhGMTAwLCJzY2Fu ZmlsZSA3LWJpdCBURVhUIChubyBjMGNvbnRyb2xzKSIsIiIsMCk7CisJICAgIHJjID0gRlRfN0JJ VDsKKwl9CisgICAgfSBlbHNlIGlmICghYzBub25pc28gfHwgdHh0Y3opIHsJLyogOC1iaXQgdGV4 dCAqLworCWRlYnVnKEYxMDAsInNjYW5maWxlIDgtYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIs MCk7CisJcmMgPSBGVF84QklUOworCXZhbCA9IGMxY29udHJvbHMgPyAxIDogMDsKKyAgICB9IGVs c2UgewkJCQkvKiA4LWJpdCBiaW5hcnkgKi8KKwlkZWJ1ZyhGMTAwLCJzY2FuZmlsZSA4LWJpdCBC SU4gKGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF9CSU47CisgICAgfQorCisjZWxzZSAgLyog IVVOSUNPREUgKi8KKworICAgIGlmIChjMG5vbmlzbykgeworCWRlYnVnKEYxMDAsInNjYW5maWxl IDgtYml0IEJJTiAoYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUX0JJTjsKKyAgICB9IGVsc2Ug aWYgKGVpZ2h0Yml0KSB7CisJZGVidWcoRjEwMCwic2NhbmZpbGUgOC1iaXQgVEVYVCAobm8gYzBu b25pc28pIiwiIiwwKTsKKwlyYyA9IEZUXzhCSVQ7CisJdmFsID0gYzFjb250cm9scyA/IDEgOiAw OworICAgIH0gZWxzZSB7CisJZGVidWcoRjEwMCwic2NhbmZpbGUgNy1iaXQgVEVYVCAobm8gYzBu b25pc28pIiwiIiwwKTsKKwlyYyA9IEZUXzdCSVQ7CisgICAgfQorCisjZW5kaWYgLyogVU5JQ09E RSAqLworCisgIHhzY2FuZmlsZToKKyAgICBpZiAoZmxhZykgKmZsYWcgPSB2YWw7CisgICAgZGVi dWcoRjEwMSwic2NhbmZpbGUgcmVzdWx0ICAgICAiLCIiLHJjKTsKKyAgICByZXR1cm4ocmMpOwor fQorCisvKgorICBzY2Fuc3RyaW5nIC0gbGlrZSBzY2FuIGZpbGUgYnV0IGZvciBhIHN0cmluZy4K KyAgVGhpcyBpcyBqdXN0IGEgcXVpY2sgYnV0Y2hlcnkgb2Ygc2NhbmZpbGUgd2l0aG91dCB0aGlu a2luZyB0b28gbXVjaC4KKyovCitpbnQKK3NjYW5zdHJpbmcocykgY2hhciAqIHM7IHsKKyAgICBp bnQgeCwgdmFsID0gLTEsIGNvdW50ID0gMDsJCS8qIFdvcmtlcnMgKi8KKyAgICBpbnQgcmMgPSAt MTsJCQkvKiBSZXR1cm4gY29kZSAqLworICAgIGludCBwdiA9IC0xOwkJCS8qIFBhdHRlcm4tbWF0 Y2ggdmFsdWUgKi8KKyAgICBpbnQgYnl0ZXMgPSAwOwkJCS8qIFRvdGFsIGJ5dGUgY291bnQgKi8K KyNpZmRlZiBVTklDT0RFCisgICAgdW5zaWduZWQgaW50IGMwLCBjMTsJCS8qIEZpcnN0IDIgZmls ZSBieXRlcyAoZm9yIEJPTSkgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgZXh0ZXJuIGlu dCBwaXBlc2VuZCwgZmlsZXBlZWs7CisKKyAgICByZWdpc3RlciBpbnQgaTsJCQkvKiBMb29wIGNv bnRyb2wgKi8KKyAgICBpbnQgcmVhZHNpemUgPSAwOwkJCS8qIEhvdyBtdWNoIHRvIHJlYWQgKi8K KyAgICBpbnQgZWlnaHRiaXQgPSAwOwkJCS8qIE51bWJlciBvZiBieXRlcyB3aXRoIDh0aCBiaXQg b24gKi8KKyAgICBpbnQgYzBjb250cm9scyA9IDA7CQkJLyogQzAgbm9uLXRleHQgY29udHJvbC1j aGFyIGNvdW50ZXIgKi8KKyAgICBpbnQgYzBub25pc28gPSAwOwkJCS8qIEMwIG5vbi1JU08gY29u dHJvbC1jaGFyIGNvdW50ZXIgKi8KKyAgICBpbnQgYzFjb250cm9scyA9IDA7CQkJLyogQzEgY29u dHJvbC1jaGFyYWN0ZXIgY291bnRlciAqLworICAgIHVuc2lnbmVkIGludCBjOwkJCS8qIEN1cnJl bnQgY2hhcmFjdGVyICovCisgICAgaW50IHJ1bm1heCA9IDA7CQkJLyogTG9uZ2VzdCBydW4gb2Yg MCBieXRlcyAqLworICAgIGludCBydW56ZXJvID0gMDsJCQkvKiBSdW4gb2YgMCBieXRlcyAqLwor ICAgIGludCBwY3R6ZXJvID0gMDsJCQkvKiBQZXJjZW50YWdlIG9mIDAgYnl0ZXMgKi8KKyAgICBp bnQgdHh0Y3ogPSAwOworCisjaWZkZWYgVU5JQ09ERQorICAgIGludCBub3R1dGY4ID0gMDsJCQkv KiBOb256ZXJvIGlmIGRlZmluaXRlbHkgbm90IFVURi04ICovCisgICAgaW50IHV0ZjhzdGF0ZSA9 IDA7CQkJLyogVVRGLTggcmVjb2duaXplciBzdGF0ZSAqLworICAgIGludCBvZGR6ZXJvID0gMDsJ CQkvKiBOdW1iZXIgb2YgMCBieXRlcyBpbiBvZGQgcG9zdGlvbnMgKi8KKyAgICBpbnQgZXZlbnpl cm8gPSAwOwkJCS8qIGFuZCBpbiBldmVuIHBvc2l0aW9ucyAqLworICAgIGludCBsZm51bCA9IDA7 CQkJLyogTnVtYmVyIG9mIDxMRj48TlVMPiBzZXF1ZW5jZXMgKi8KKyAgICBpbnQgY3JsZiA9IDA7 CQkJLyogTnVtYmVyIG9mIDxDUkxGPiBzZXF1ZW5jZXMgKi8KKyNlbHNlCisgICAgaW50IG5vdHV0 ZjggPSAxOworI2VuZGlmIC8qIFVOSUNPREUgKi8KKworICAgIGNoYXIgKiBidWYgPSBzOworICAg IGlmICghcykgcyA9ICIiOworICAgIGNvdW50ID0gc3RybGVuKHMpOworCisjaWZkZWYgVU5JQ09E RQorICAgIGlmIChieXRlcyA9PSAwICYmIGNvdW50ID4gMSkgeworCWludCBpbmNsX2NudCA9IDA7 CisKKwkvKiBGaXJzdCBsb29rIGZvciBCT00gKi8KKworCWMwID0gKHVuc2lnbmVkKSgodW5zaWdu ZWQpYnVmWzBdJjB4RkYpOyAvKiBGaXJzdCBmaWxlIGJ5dGUgKi8KKwljMSA9ICh1bnNpZ25lZCko KHVuc2lnbmVkKWJ1ZlsxXSYweEZGKTsgLyogU2Vjb25kIGJ5dGUgKi8KKworCWlmIChjMCA9PSAw eEZFICYmIGMxID09IDB4RkYpIHsJLyogVUNTLTIgQkUgKi8KKwkgICAgcmMgPSBGVF9VQ1MyOwor CSAgICB2YWwgPSAwOworCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIFVDUzIgQk9NIEJFIixj a2l0b2EodmFsKSxyYyk7CisJICAgIGluY2xfY250Kys7CisJfSBlbHNlIGlmIChjMCA9PSAweEZG ICYmIGMxID09IDB4RkUpIHsgLyogVUNTLTIgTEUgKi8KKwkgICAgcmMgPSBGVF9VQ1MyOworCSAg ICB2YWwgPSAxOworCSAgICBkZWJ1ZyhGMTExLCJzY2Fuc3RyaW5nIFVDUzIgQk9NIExFIixja2l0 b2EodmFsKSxyYyk7CisJICAgIGluY2xfY250Kys7CisJfSBlbHNlIGlmIChjb3VudCA+IDIpIGlm IChjMCA9PSAweEVGICYmIGMxID09IDB4QkIgJiYKKwkJICAgKHVuc2lnbmVkKSgodW5zaWduZWQp YnVmWzJdJjB4RkYpID09IDB4QkYpIHsKKwkgICAgcmMgPSBGVF9VVEY4OworCSAgICBkZWJ1ZyhG MTExLCJzY2Fuc3RyaW5nIFVURjggQk9NIixja2l0b2EodmFsKSxyYyk7CisJICAgIGluY2xfY250 Kys7CisJfQorCWlmIChpbmNsX2NudCkgewkJLyogSGF2ZSBCT00gKi8KKwkgICAgYnl0ZXMgKz0g Y291bnQ7CisJICAgIGdvdG8geHNjYW5zdHJpbmc7CisJfQorICAgIH0KKyNlbmRpZiAvKiBVTklD T0RFICovCisKKyAgICBieXRlcyArPSBjb3VudDsJCQkvKiBDb3VudCBieXRlcyByZWFkICovCisK KyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewkvKiBGb3IgZWFjaCBieXRlLi4uICov CisJYyA9ICh1bnNpZ25lZClidWZbaV07CS8qIEZvciBlYXNlIG9mIHJlZmVyZW5jZSAqLworCWlm ICghYykgewkJCS8qIFplcm8gYnl0ZT8gKi8KKwkgICAgZ290byB4c2NhbnN0cmluZzsJLyogTnVs bCB0ZXJtaW5hdGVkIHN0cmluZyAqLworCX0KKwlpZiAoKGMgJiAweDgwKSA9PSAwKSB7CS8qIFdl IGhhdmUgYSA3LWJpdCBieXRlICovCisjaWZkZWYgVU5JQ09ERQorCSAgICBpZiAoaSA+IDAgJiYg YyA9PSAxMCkgeyAvKiBMaW5lZmVlZCAqLworCQlpZiAoYnVmW2ktMV0gPT0gMCkgbGZudWwrKzsg LyogUHJlY2VkZWQgYnkgTlVMICovCisJCWVsc2UgaWYgKGJ1ZltpLTFdID09IDEzKSBjcmxmKys7 IC8qIG9yIGJ5IENSLi4uICovCisJICAgIH0KKyNlbmRpZiAvKiBVTklDT0RFICovCisJICAgIGlm IChjIDwgJyAnKSB7CQkvKiBDaGVjayBmb3IgQ08gY29udHJvbHMgKi8KKwkJaWYgKGMgIT0gTEYg JiYgYyAhPSBDUiAmJiBjICE9IEhUICYmIGMgIT0gRkYpIHsKKwkJICAgIGMwY29udHJvbHMrKzsK KwkJICAgIGlmIChjICE9IEVTQyAmJiBjICE9IFNPICYmIGMgIT0gU0kpCisJCSAgICAgIGMwbm9u aXNvKys7CisJCX0KKwkJaWYgKChjID09ICdcMDMyJykJLyogQ3RybC1aICovCisJCSAgICApIHsK KwkJICAgIGMwY29udHJvbHMtLTsKKwkJICAgIGMwbm9uaXNvLS07CisJCX0KKwkgICAgfQorI2lm ZGVmIFVOSUNPREUKKwkgICAgaWYgKCFub3R1dGY4ICYmIHV0ZjhzdGF0ZSkgeyAvKiBJbiBVVEYt OCBzZXF1ZW5jZT8gKi8KKwkJdXRmOHN0YXRlID0gMDsKKwkJZGVidWcoRjAwMCwic2NhbnN0cmlu ZyIsIjctYml0IGJ5dGUgaW4gVVRGOCBzZXF1ZW5jZSIsYyk7CisJCW5vdHV0ZjgrKzsJCS8qIFRo ZW4gaXQncyBub3QgVVRGLTggKi8KKwkJY29udGludWU7CisJICAgIH0KKyNlbmRpZiAvKiBVTklD T0RFICovCisJfSBlbHNlIHsJCQkvKiBXZSBoYXZlIGFuIDgtYml0IGJ5dGUgKi8KKwkgICAgZWln aHRiaXQrKzsJCS8qIENvdW50IGl0ICovCisJICAgIGlmIChjID49IDB4ODAgJiYgYyA8IDB4QTAp IC8qIENoZWNrIGZvciBDMSBjb250cm9scyAqLworCSAgICAgIGMxY29udHJvbHMrKzsKKyNpZmRl ZiBVTklDT0RFCisJICAgIGlmICghbm90dXRmOCkgewkJLyogSWYgaXQgbWlnaHQgc3RpbGwgYmUg VVRGOC4uLiAqLworCQlzd2l0Y2ggKHV0ZjhzdGF0ZSkgeyAvKiBFbnRlciB0aGUgVVRGLTggc3Rh dGUgbWFjaGluZSAqLworCQkgIGNhc2UgMDoJCSAvKiBGaXJzdCBieXRlLi4uICovCisJCSAgICBp ZiAoKGMgJiAweEUwKSA9PSAweEMwKSB7IC8qIFRlbGxzIG51bWJlciBvZiAqLworCQkJdXRmOHN0 YXRlID0gMTsgICAgICAgIC8qIHN1YnNlcXVlbnQgYnl0ZXMgKi8KKwkJICAgIH0gZWxzZSBpZiAo KGMgJiAweEYwKSA9PSAweEUwKSB7CisJCQl1dGY4c3RhdGUgPSAyOworCQkgICAgfSBlbHNlIGlm ICgoYyAmIDB4RjgpID09IDB4RjApIHsKKwkJCXV0ZjhzdGF0ZSA9IDM7CisJCSAgICB9IGVsc2Ug eworCQkJbm90dXRmOCsrOworCQkgICAgfQorCQkgICAgYnJlYWs7CisJCSAgY2FzZSAxOgkJLyog U3Vic2VxdWVudCBieXRlICovCisJCSAgY2FzZSAyOgorCQkgIGNhc2UgMzoKKwkJICAgIGlmICgo YyAmIDB4QzApICE9IDB4ODApIHsgLyogTXVzdCBzdGFydCB3aXRoIDEwICovCisJCQlkZWJ1ZyhG MDAwLCJzY2Fuc3RyaW5nIiwKKwkJCSAgICAgICJiYWQgYnl0ZSBpbiBVVEY4IHNlcXVlbmNlIixj KTsKKwkJCW5vdHV0ZjgrKzsKKwkJCWJyZWFrOworCQkgICAgfQorCQkgICAgdXRmOHN0YXRlLS07 CS8qIEdvb2QsIG9uZSBsZXNzIGluIHRoaXMgc2VxdWVuY2UgKi8KKwkJICAgIGJyZWFrOworCQkg IGRlZmF1bHQ6CQkvKiBTaG91bGRuJ3QgaGFwcGVuICovCisJCSAgICBkZWJ1ZyhGMTExLCJzY2Fu c3RyaW5nIiwiYmFkIFVURjggc3RhdGUiLHV0ZjhzdGF0ZSk7CisJCSAgICBub3R1dGY4Kys7CisJ CX0KKwkgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KKwl9CisgICAgfQorICAgIGlmIChieXRl cyA9PSAwKQkJCS8qIElmIG5vdGhpbmcgd2FzIHJlYWQgKi8KKyAgICAgIHJldHVybigtMSk7CQkJ Lyogd2UncmUgZG9uZS4gKi8KKworI2lmZGVmIFVOSUNPREUKKyAgICBpZiAoYnl0ZXMgPiAxMDAp CQkJLyogQnl0ZXMgaXMgbm90IDAgKi8KKyAgICAgIHBjdHplcm8gPSAoZXZlbnplcm8gKyBvZGR6 ZXJvKSAvIChieXRlcyAvIDEwMCk7CisgICAgZWxzZQorICAgICAgcGN0emVybyA9ICgoZXZlbnpl cm8gKyBvZGR6ZXJvKSAqIDEwMCkgLyBieXRlczsKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyNp ZmRlZiBVTklDT0RFCisgICAgeCA9IGVpZ2h0Yml0ID8gYnl0ZXMgLyAyMCA6IGJ5dGVzIC8gNDsg LyogRm9yIFVDUy0yLi4uICovCisKKyAgICBpZiAocnVubWF4ID4gMikgewkJCS8qIEZpbGUgaGFz IHJ1biBvZiBtb3JlIHRoYW4gMiBOVUxzICovCisJZGVidWcoRjEwMCwic2NhbnN0cmluZyBCSU4g cnVubWF4IiwiIiwwKTsKKwlyYyA9IEZUX0JJTjsJCQkvKiBzbyBpdCBjYW4ndCBiZSBhbnkga2lu ZCBvZiB0ZXh0LiAqLworCWdvdG8geHNjYW5zdHJpbmc7CisKKyAgICB9IGVsc2UgaWYgKHJjID09 IEZUX1VDUzIgfHwgKHJjID09IEZUX1VURjggJiYgcnVubWF4ID09IDApKSB7CisJZ290byB4c2Nh bnN0cmluZzsJCQkvKiBGaWxlIHN0YXJ0cyB3aXRoIGEgQk9NICovCisKKyAgICB9IGVsc2UgaWYg KGVpZ2h0Yml0ID4gMCAmJiAhbm90dXRmOCkgeyAvKiBGaWxlIGhhcyA4LWJpdCBkYXRhICovCisJ aWYgKHJ1bm1heCA+IDApIHsJCSAgIC8qIGFuZCBydW5zIG9mIE5VTHMgKi8KKwkgICAgZGVidWco RjEwMCwic2NhbnN0cmluZyBCSU4gKG5uVVRGOCkgcnVubWF4IiwiIiwwKTsKKwkgICAgcmMgPSBG VF9CSU47CQkgICAvKiBVVEYtOCBkb2Vzbid0IGhhdmUgTlVMcyAqLworCX0gZWxzZSB7CQkJICAg LyogTm8gTlVMcyAqLworCSAgICBkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIFVURjggKG5uVVRGOCAr IHJ1bm1heCA9PSAwKSIsIiIsMCk7CisJICAgIHJjID0gRlRfVVRGODsJCSAgIC8qIGFuZCBub3Qg bm90IFVURi04LCBzbyBpcyBVVEYtOCAqLworCX0KKwlnb3RvIHhzY2Fuc3RyaW5nOworICAgIH0K Ky8qCisgIEl0IHNlZW1zIHRvIGJlIFVDUy0yIGJ1dCBsZXQncyBiZSBtb3JlIGNlcnRhaW4gc2lu Y2UgdGhlcmUgaXMgbm8gQk9NLi4uCisgIElmIHRoZSBudW1iZXIgb2YgNy0gYW5kIDgtYml0IGNo YXJhY3RlcnMgaXMgYXBwcm94aW1hdGVseSBlcXVhbCwgaXQgbWlnaHQKKyAgYmUgYSBjb21wcmVz c2VkIGZpbGUuICBJbiB0aGlzIGNhc2Ugd2UgZGVjaWRlIGJhc2VkIG9uIHRoZSBuYW1lLgorKi8K KyAgICBpZiAocmMgPT0gRlRfVUNTMikgeworCWlmIChieXRlcyA8IDEwMCkgeworCSAgICBpZiAo b2RkemVybyAhPSAwICYmIGV2ZW56ZXJvICE9IDApIHsKKwkJZGVidWcoRjEwMCwic2NhbnN0cmlu ZyBzbWFsbCBVQ1MyIGRvdWJ0ZnVsIiwiIiwwKTsKKwkJcmMgPSBGVF9CSU47CisJCWdvdG8geHNj YW5zdHJpbmc7CisJICAgIH0gZWxzZSBpZiAob2RkemVybyA9PSAwICYmIGV2ZW56ZXJvID09IDAp IHsKKwkJcmMgPSBlaWdodGJpdCA/IEZUXzhCSVQgOiBGVF83QklUOworCSAgICB9CisJfQorCWdv dG8geHNjYW5zdHJpbmc7CQkJLyogU2VlbXMgdG8gYmUgVUNTLTIgKi8KKyAgICB9CisKKy8qIElm IG5vbmUgb2YgdGhlIGFib3ZlLCBpdCdzIHByb2JhYmx5IG5vdCBVbmljb2RlLiAgKi8KKworICAg IGlmICghZWlnaHRiaXQpIHsJCQkvKiBJdCdzIDctYml0ICovCisJaWYgKGMwY29udHJvbHMpIHsJ CS8qIFRoaXMgd291bGQgYmUgc3RyYW5nZSAqLworCSAgICBpZiAoKGMwbm9uaXNvID4gMCkgJiYg KHR4dGN6ID09IDApKSB7CisJCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgNy1iaXQgQklOIChjMGNv bmlzbykiLCIiLDApOworCQlyYyA9IEZUX0JJTjsKKwkgICAgfSBlbHNlIHsKKwkJZGVidWcoRjEw MCwic2NhbnN0cmluZyA3LWJpdCBJU08yMDIyIFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7CisJ CXJjID0gRlRfN0JJVDsKKwkgICAgfQorCX0gZWxzZSB7CQkJLyogNy1iaXQgdGV4dCAqLworCSAg ICBkZWJ1ZyhGMTAwLCJzY2Fuc3RyaW5nIDctYml0IFRFWFQgKG5vIGMwY29udHJvbHMpIiwiIiww KTsKKwkgICAgcmMgPSBGVF83QklUOworCX0KKyAgICB9IGVsc2UgaWYgKCFjMG5vbmlzbyB8fCB0 eHRjeikgewkvKiA4LWJpdCB0ZXh0ICovCisJZGVidWcoRjEwMCwic2NhbnN0cmluZyA4LWJpdCBU RVhUIChubyBjMG5vbmlzbykiLCIiLDApOworCXJjID0gRlRfOEJJVDsKKwl2YWwgPSBjMWNvbnRy b2xzID8gMSA6IDA7CisgICAgfSBlbHNlIHsJCQkJLyogOC1iaXQgYmluYXJ5ICovCisJZGVidWco RjEwMCwic2NhbnN0cmluZyA4LWJpdCBCSU4gKGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF9C SU47CisgICAgfQorCisjZWxzZSAgLyogIVVOSUNPREUgKi8KKworICAgIGlmIChjMG5vbmlzbykg eworCWRlYnVnKEYxMDAsInNjYW5zdHJpbmcgOC1iaXQgQklOIChjMG5vbmlzbykiLCIiLDApOwor CXJjID0gRlRfQklOOworICAgIH0gZWxzZSBpZiAoZWlnaHRiaXQpIHsKKwlkZWJ1ZyhGMTAwLCJz Y2Fuc3RyaW5nIDgtYml0IFRFWFQgKG5vIGMwbm9uaXNvKSIsIiIsMCk7CisJcmMgPSBGVF84QklU OworCXZhbCA9IGMxY29udHJvbHMgPyAxIDogMDsKKyAgICB9IGVsc2UgeworCWRlYnVnKEYxMDAs InNjYW5zdHJpbmcgNy1iaXQgVEVYVCAobm8gYzBub25pc28pIiwiIiwwKTsKKwlyYyA9IEZUXzdC SVQ7CisgICAgfQorCisjZW5kaWYgLyogVU5JQ09ERSAqLworCisgIHhzY2Fuc3RyaW5nOgorICAg IGRlYnVnKEYxMDEsInNjYW5zdHJpbmcgcmVzdWx0ICAgICAiLCIiLHJjKTsKKyAgICByZXR1cm4o cmMpOworfQorCisKKworLyogIEYgSSBMIEUgUyBFIEwgRSBDIFQgIC0tICBTZWxlY3QgdGhpcyBm aWxlIGZvciBzZW5kaW5nICAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZmlsZXNlbGVjdCgK KyAgICBjaGFyICpmLCBjaGFyICpzYSwgY2hhciAqc2IsIGNoYXIgKnNuYSwgY2hhciAqc25iLAor ICAgIENLX09GRl9UIG1pbnNpeiwgQ0tfT0ZGX1QgbWF4c2l6LAorICAgIGludCBuYnUsIGludCBu eGxpc3QsCisgICAgY2hhciAqKiB4bGlzdAorKQorI2Vsc2UKK2ZpbGVzZWxlY3QoZixzYSxzYixz bmEsc25iLG1pbnNpeixtYXhzaXosbmJ1LG54bGlzdCx4bGlzdCkKKyBjaGFyICpmLCpzYSwqc2Is KnNuYSwqc25iOyBDS19PRkZfVCBtaW5zaXosbWF4c2l6OworIGludCBuYnUsbnhsaXN0OyBjaGFy ICoqIHhsaXN0OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBmaWxlc2VsZWN0ICovIHsKKyAg ICBjaGFyICpmZGF0ZTsKKyAgICBpbnQgbjsKKyAgICBDS19PRkZfVCB6OworCisgICAgZGVidWco RjExMSwiZmlsZXNlbGVjdCBtaW5zaXoiLGNrZnN0b2EobWluc2l6KSxtaW5zaXopOworICAgIGRl YnVnKEYxMTEsImZpbGVzZWxlY3QgbWF4c2l6Iixja2ZzdG9hKG1heHNpeiksbWF4c2l6KTsKKyAg ICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IChDS19PRkZfVCktMSIsY2tmc3RvYSgoQ0tfT0ZGX1Qp LTEpLChDS19PRkZfVCktMSk7CisKKyAgICBpZiAoIXNhKSBzYSA9ICIiOworICAgIGlmICghc2Ip IHNiID0gIiI7CisgICAgaWYgKCFzbmEpIHNuYSA9ICIiOworICAgIGlmICghc25iKSBzbmIgPSAi IjsKKworI2lmZGVmIENLU1lNTElOSworI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT1hGRVIKKyAg ICBpZiAobm9saW5rcykgeworCUNLX09GRl9UIHp6OworCXp6ID0gemdldGZzKGYpOworCWRlYnVn KEYxMTEsImZpbGVzZWxlY3QgTk9MSU5LUyB6Z2V0ZnMiLGYsenopOworCWlmICh6eiA8IChDS19P RkZfVCkwKQorCSAgcmV0dXJuKDApOworCWRlYnVnKEYxMTEsImZpbGVzZWxlY3QgTk9MSU5LUyB6 Z2ZzX2xpbmsiLGYsemdmc19saW5rKTsKKwlpZiAoemdmc19saW5rKQorCSAgcmV0dXJuKDApOwor ICAgIH0KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8q IENLU1lNTElOSyAqLworCisgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCIsZiwwKTsKKyAgICBp ZiAoKnNhIHx8ICpzYiB8fCAqc25hIHx8ICpzbmIpIHsKKwlmZGF0ZSA9IHpmY2RhdChmKTsJCS8q IERhdGUvdGltZSBvZiB0aGlzIGZpbGUgKi8KKwlpZiAoIWZkYXRlKSBmZGF0ZSA9ICIiOworCW4g PSBzdHJsZW4oZmRhdGUpOworCWRlYnVnKEYxMTEsImZpbGVzZWxlY3QgZmRhdGUiLGZkYXRlLG4p OworCWlmIChuICE9IDE3KQkJCS8qIEZhaWxlZCB0byBnZXQgaXQgKi8KKwkgIHJldHVybigxKTsK KwkvKiAvQUZURVI6ICovCisJaWYgKHNhWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIgKilzYSkg PD0gMCkpIHsKKwkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzYSIsc2EsMCk7CisJICAgIC8q IHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBvbGQpIixmLDApOyAqLworCSAgICByZXR1cm4oMCk7 CisJfQorCS8qIC9CRUZPUkU6ICovCisJaWYgKHNiWzBdICYmIChzdHJjbXAoZmRhdGUsKGNoYXIg KilzYikgPj0gMCkpIHsKKwkgICAgZGVidWcoRjExMCwiZmlsZXNlbGVjdCBzYiIsc2IsMCk7CisJ ICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBuZXcpIixmLDApOyAqLworCSAgICByZXR1 cm4oMCk7CisJfQorCS8qIC9OT1QtQUZURVI6ICovCisJaWYgKHNuYVswXSAmJiAoc3RyY21wKGZk YXRlLChjaGFyICopc25hKSA+IDApKSB7CisJICAgIGRlYnVnKEYxMTAsImZpbGVzZWxlY3Qgc25h IixzbmEsMCk7CisJICAgIC8qIHRsb2coRjExMCwiU2tpcHBpbmcgKHRvbyBuZXcpIixmLDApOyAq LworCSAgICByZXR1cm4oMCk7CisJfQorCS8qIC9OT1QtQkVGT1JFOiAqLworCWlmIChzbmJbMF0g JiYgKHN0cmNtcChmZGF0ZSwoY2hhciAqKXNuYikgPCAwKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJm aWxlc2VsZWN0IHNuYiIsc25iLDApOworCSAgICAvKiB0bG9nKEYxMTAsIlNraXBwaW5nICh0b28g b2xkKSIsZiwwKTsgKi8KKwkgICAgcmV0dXJuKDApOworCX0KKyAgICB9CisgICAgLyogU21hbGxl ciBvciBsYXJnZXIgKi8KKyAgICBpZiAobWluc2l6ID4gKENLX09GRl9UKS0xIHx8IG1heHNpeiA+ IChDS19PRkZfVCktMSkgeworCXogPSB6Y2hraShmKTsJCQkvKiBHZXQgc2l6ZSAqLworCWRlYnVn KEYxMDEsImZpbGVzZWxlY3QgZmlsZXNpemUiLCIiLHopOworCWlmICh6IDwgKENLX09GRl9UKTAp CisJICByZXR1cm4oMSk7CisJaWYgKChtaW5zaXogPiAoQ0tfT0ZGX1QpLTEpICYmICh6ID49IG1p bnNpeikpIHsKKwkgICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtaW5zaXogc2tpcHBpbmciLGYs bWluc2l6KTsKKwkgICAgLyogdGxvZyhGMTExLCJTa2lwcGluZyAodG9vIGJpZykiLGYseik7ICov CisJICAgIHJldHVybigwKTsKKwl9CisJaWYgKChtYXhzaXogPiAoQ0tfT0ZGX1QpLTEpICYmICh6 IDw9IG1heHNpeikpIHsKKwkgICAgZGVidWcoRjExMSwiZmlsZXNlbGVjdCBtYXhzaXogc2tpcHBp bmciLGYsbWF4c2l6KTsKKwkgICAgLyogdGxvZyhGMTEwLCJTa2lwcGluZyAodG9vIHNtYWxsKSIs ZiwwKTsgKi8KKwkgICAgcmV0dXJuKDApOworCX0KKyAgICB9CisgICAgaWYgKG5idSkgewkJCQkv KiBTa2lwcGluZyBiYWNrdXAgZmlsZXM/ICovCisJaWYgKGNrbWF0Y2goCisjaWZkZWYgQ0tSRUdF WAorCQkgICAgIiouflswLTldKn4iCS8qIE5vdCBwZXJmZWN0IGJ1dCBjbG9zZSBlbm91Z2guICov CisjZWxzZQorCQkgICAgIioufip+IgkJLyogTGVzcyBjbG9zZS4gKi8KKyNlbmRpZiAvKiBDS1JF R0VYICovCisJCSAgICAsZixmaWxlY2FzZSwxKSkgeworCSAgICBkZWJ1ZyhGMTEwLCJmaWxlc2Vs ZWN0IHNraXBwaW5nIGJhY2t1cCIsZiwwKTsKKwkgICAgcmV0dXJuKDApOworCX0KKyAgICB9Cisg ICAgZm9yIChuID0gMDsgeGxpc3QgJiYgbiA8IG54bGlzdDsgbisrKSB7CisJaWYgKCF4bGlzdFtu XSkgeworCSAgICBkZWJ1ZyhGMTAxLCJmaWxlc2VsZWN0IHhsaXN0IGVtcHR5IiwwLG4pOworCSAg ICBicmVhazsKKwl9CisJaWYgKGNrbWF0Y2goeGxpc3Rbbl0sZixmaWxlY2FzZSwxKSkgeworCSAg ICBkZWJ1ZyhGMTExLCJmaWxlc2VsZWN0IHhsaXN0Iix4bGlzdFtuXSxuKTsKKwkgICAgZGVidWco RjExMCwiZmlsZXNlbGVjdCBza2lwcGluZyIsZiwwKTsKKwkgICAgcmV0dXJuKDApOworCX0KKyAg ICB9CisgICAgaWYgKHhmaWxldHlwZSA+IC0xKSB7CisJbiA9IHNjYW5maWxlKGYsTlVMTCxuc2Nh bmZpbGUpOworCWlmIChuIDwgMCkgeworCSAgICBuID0gYmluYXJ5ID8gMSA6IDA7CisJfSBlbHNl IHsKKwkgICAgbiA9IChuID09IEZUX0JJTikgPyAxIDogMDsKKwl9CisJaWYgKG4gIT0geGZpbGV0 eXBlKQorCSAgcmV0dXJuKDApOworICAgIH0KKyAgICBkZWJ1ZyhGMTEwLCJmaWxlc2VsZWN0IHNl bGVjdGluZyIsZiwwKTsKKyAgICByZXR1cm4oMSk7Cit9CisKKworI2lmZGVmIFRDUFNPQ0tFVAor I2lmZGVmIE5UCitleHRlcm4gaW50IFdTQVNhZmVUb0NhbmNlbDsKKyNlbmRpZiAvKiBOVCAqLwor I2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworCitWT0lECitzZXRmbG93KCkgeworICAgIGV4dGVybiBp bnQgZmxvdywgYXV0b2Zsb3csIG1kbXR5cCwgY3h0eXBlLCBjeGZsb3dbXTsKKyNpZm5kZWYgTk9E SUFMCisgICAgZXh0ZXJuIGludCBkaWFsY2FwYXMsIGRpYWxmYzsKKyAgICBleHRlcm4gTURNSU5G ICogbW9kZW1wW107CisgICAgTURNSU5GICogcCA9IE5VTEw7CisgICAgbG9uZyBiaXRzID0gMDsK KyNlbmRpZiAvKiBOT0RJQUwgKi8KKworICAgIGRlYnVnKEYxMDEsInNldGZsb3cgYXV0b2Zsb3ci LCIiLGF1dG9mbG93KTsKKworLyogI2lmZGVmIENPTU1FTlQgKi8KKy8qIFdIWSBXQVMgVEhJUyBD T01NRU5URUQgT1VUPyAqLworICAgIGlmICghYXV0b2Zsb3cpICAgICAgICAgICAgICAgICAgICAg IC8qIE9ubHkgaWYgRkxPVyBpcyBBVVRPICovCisgICAgICByZXR1cm47CisvKiAjZW5kaWYgKi8g LyogQ09NTUVOVCAqLworCisgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBsb2NhbCIsIiIsbG9jYWwp OworICAgIGRlYnVnKEYxMDEsInNldGZsb3cgbmV0d29yayIsIiIsbmV0d29yayk7CisgICAgZGVi dWcoRjEwMSwic2V0ZmxvdyBjeHR5cGUiLCIiLGN4dHlwZSk7CisKKyNpZmRlZiBUTl9DT01QT1JU CisgICAgaWYgKG5ldHdvcmsgJiYgaXN0bmNvbXBvcnQoKSkgeworCWZsb3cgPSBjeGZsb3dbQ1hU X01PREVNXTsKKyAgICAgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBUTl9DT01QT1JUIGZsb3ciLCIi LGZsb3cpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIFROX0NPTVBPUlQgKi8K KworICAgIGlmIChuZXR3b3JrIHx8ICFsb2NhbCB8fCBjeHR5cGUgPT0gQ1hUX0RJUkVDVCkgewor ICAgICAgICBmbG93ID0gY3hmbG93W2N4dHlwZV07ICAgICAgICAgIC8qIFNldCBhcHByb3ByaWF0 ZSBmbG93IGNvbnRyb2wgKi8KKyAgICAgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBmbG93IiwiIixm bG93KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoY3h0eXBlICE9IENYVF9NT0RF TSkgICAgICAgICAgICAvKiBDb25uZWN0aW9uIHR5cGUgc2hvdWxkIGJlIG1vZGVtICovCisgICAg ICByZXR1cm47CisKKyNpZm5kZWYgTk9ESUFMCisgICAgYml0cyA9IGRpYWxjYXBhczsgICAgICAg ICAgICAgICAgICAgLyogQ2FwYWJpbGl0eSBiaXRzICovCisgICAgaWYgKCFiaXRzKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgLyogTm8gYml0cz8gKi8KKyAgICAgICAgcCA9IG1vZGVtcFttZG10 eXBdOyAgICAgICAgICAgICAvKiBMb29rIGluIG1vZGVtIGluZm8gc3RydWN0dXJlICovCisgICAg ICAgIGlmIChwKQorICAgICAgICAgIGJpdHMgPSBwLT5jYXBhczsKKyAgICB9CisgICAgaWYgKGRp YWxmYyA9PSBGTE9fQVVUTykgeyAgICAgICAgICAgLyogSWYgRElBTCBmbG93IGlzIEFVVE8gKi8K KyNpZmRlZiBDS19SVFNDVFMgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBjYW4gZG8g UlRTL0NUUyBmbG93IGNvbnRyb2wgKi8KKyAgICAgICAgaWYgKGJpdHMgJiBDS0RfSFcpICAgICAg ICAgICAgICAvKiBhbmQgbW9kZW0gY2FuIGRvIGl0IHRvbyAqLworICAgICAgICAgIGZsb3cgPSBG TE9fUlRTQzsgICAgICAgICAgICAgIC8qIHRoZW4gc3dpdGNoIHRvIFJUUy9DVFMgKi8KKyAgICAg ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvdGhlcndpc2UgKi8KKyAgICAg ICAgICBmbG93ID0gRkxPX1hPTlg7ICAgICAgICAgICAgICAvKiB1c2UgWG9uL1hvZmYuICovCisj ZWxzZQorI2lmbmRlZiBORVhUCisjaWZuZGVmIElSSVgKKyAgICAgICAgZmxvdyA9IEZMT19YT05Y OyAgICAgICAgICAgICAgICAvKiBVc2UgWG9uL1hvZmYuICovCisjZW5kaWYgLyogSVJJWCAqLwor I2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBDS19SVFNDVFMgKi8KKyAgICB9CisjZW5kaWYg LyogTk9ESUFMICovCisgICAgZGVidWcoRjEwMSwic2V0ZmxvdyBtb2RlbSBmbG93IiwiIixmbG93 KTsKKyAgICByZXR1cm47Cit9CisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIENLX1RSSUdHRVIK KworLyogIEEgVSBUIE8gRSBYIEkgVCBDIEggSyAgLS0gIENoZWNrIGZvciBDT05ORUNULW1vZGUg dHJpZ2dlciBzdHJpbmcgICovCisvKgorICBSZXR1cm5zIC0xIGlmIHRyaWdnZXIgbm90IGZvdW5k LCBvciBlbHNlIHRoZSB0cmlnZ2VyIGluZGV4LCAwIG9yIGdyZWF0ZXIuCisgIChSZXBsYWNlIHdp dGggZmFuY2llciBhbmQgbW9yZSBlZmZpY2llbnQgbWF0Y2hlciBsYXRlci4uLikKKyAgTk9URTog dG8gcHJldmVudCB1bm5lY2Vzc2FyeSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLCBjYWxsIHRoaXMg d2F5OgorCisgICAgeCA9IHR0X3RyaWdnZXJbMF0gPyBhdXRvZXhpdGNoayhjKSA6IC0xOworCisq LworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2F1dG9leGl0Y2hrKENIQVIgYykKKyNlbHNlCithdXRv ZXhpdGNoayhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGF1dG9leGl0Y2hr ICovIHsKKyAgICBleHRlcm4gQ0hBUiAqIHR0X3RybWF0Y2hbXTsKKyAgICBleHRlcm4gY2hhciAq IHR0X3RyaWdnZXJbXTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgVFJJR0dFUlM7 IGkrKykgeworICAgICAgICBpZiAoIXR0X3RyaWdnZXJbaV0pIHsgICAgICAgICAgIC8qIE5vIG1v cmUgdHJpZ2dlcnMgaW4gbGlzdCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxz ZSBpZiAoKnR0X3RyaWdnZXJbaV0pIHsKKyAgICAgICAgICAgIGlmICghdHRfdHJtYXRjaFtpXSkg ICAgICAgICAvKiBKdXN0IHN0YXJ0aW5nPyAqLworICAgICAgICAgICAgICB0dF90cm1hdGNoW2ld ID0gKENIQVIgKil0dF90cmlnZ2VyW2ldOyAvKiBTZXQgbWF0Y2ggcG9pbnRlciAqLworICAgICAg ICAgICAgaWYgKGMgPT0gKnR0X3RybWF0Y2hbaV0pIHsgIC8qIENvbXBhcmUgdGhpcyBjaGFyYWN0 ZXIgKi8KKyAgICAgICAgICAgICAgICB0dF90cm1hdGNoW2ldKys7ICAgICAgICAvKiBJdCBtYXRj aGVzICovCisgICAgICAgICAgICAgICAgaWYgKCEqdHRfdHJtYXRjaFtpXSkgeyAgLyogRW5kIG9m IG1hdGNoIHN0cmluZz8gKi8KKyAgICAgICAgICAgICAgICAgICAgdHRfdHJtYXRjaFtpXSA9IChD SEFSICopIHR0X3RyaWdnZXJbaV07IC8qIFllcywgcmV3aW5kLCAqLworICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJhdXRvZXhpdGNoayIsdHRfdHJpZ2dlcltpXSxpKTsgLyogbG9nLCAq LworICAgICAgICAgICAgICAgICAgICByZXR1cm4oaSk7ICAgICAgICAgIC8qIGFuZCByZXR1cm4g c3VjY2VzcyAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSAgICAgICAg ICAgICAgICAgICAgICAvKiBObyBtYXRjaCAqLworICAgICAgICAgICAgICB0dF90cm1hdGNoW2ld ID0gKENIQVIgKikgdHRfdHJpZ2dlcltpXTsgLyogUmV3aW5kIG1hdGNoIHN0cmluZyAqLworICAg ICAgICB9IC8qIGFuZCBnbyBvbiB0aGUgbmV4dCBtYXRjaCBzdHJpbmcgKi8KKyAgICB9CisgICAg cmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gbWF0Y2ggZm91bmQgKi8K K30KKyNlbmRpZiAvKiBDS19UUklHR0VSICovCisKKyNpZm5kZWYgTk9TSE9XCisvKiAgUyBIIE8g TSBEIE0gIC0tICBTaG93IG1vZGVtIHNpZ25hbHMgICovCisKK1ZPSUQKK3Nob21kbSgpIHsKKy8q CisgIE5vdGUgdXNlIG9mICJcclxuIiB0byBtYWtlIHN1cmUgdGhpcyByZXBvcnQgcHJpbnRzIHJp Z2h0LCBldmVuIHdoZW4KKyAgY2FsbGVkIGR1cmluZyBDT05ORUNUIG1vZGUuCisqLworICAgIGlu dCB5OworICAgIHkgPSB0dGdtZG0oKTsKKyAgICBzd2l0Y2ggKHkpIHsKKyAgICAgIGNhc2UgLTM6 IHByaW50ZigKKyAgICAgICAgICAgICAgICAgIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFibGUgaW4g dGhpcyB2ZXJzaW9uIG9mIEtlcm1pdFxyXG4iKTsKKyAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgY2FzZSAtMjogcHJpbnRmKCJObyBtb2RlbSBjb250cm9sIGZvciB0aGlzIGRldmljZVxyXG4i KTsgYnJlYWs7CisgICAgICBjYXNlIC0xOiBwcmludGYoIk1vZGVtIHNpZ25hbHMgdW5hdmFpbGFi bGVcclxuIik7IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyNpZm5kZWYgTUFDCisgICAgICAgIHBy aW50ZigKKyAgICAgICAgICAiIENhcnJpZXIgRGV0ZWN0ICAgICAgKENEKTogICVzXHJcbiIsKHkg JiBCTV9EQ0QpID8gIk9uIjogIk9mZiIpOworICAgICAgICBwcmludGYoCisgICAgICAgICAgIiBE YXRhc2V0IFJlYWR5ICAgICAgIChEU1IpOiAlc1xyXG4iLCh5ICYgQk1fRFNSKSA/ICJPbiI6ICJP ZmYiKTsKKyNlbmRpZiAvKiBNQUMgKi8KKyAgICAgICAgcHJpbnRmKAorICAgICAgICAgICIgQ2xl YXIgVG8gU2VuZCAgICAgICAoQ1RTKTogJXNcclxuIiwoeSAmIEJNX0NUUykgPyAiT24iOiAiT2Zm Iik7CisjaWZuZGVmIFNUUkFUVVMKKyNpZm5kZWYgTUFDCisgICAgICAgIHByaW50ZigKKyAgICAg ICAgICAiIFJpbmcgSW5kaWNhdG9yICAgICAgKFJJKTogICVzXHJcbiIsKHkgJiBCTV9STkcpID8g Ik9uIjogIk9mZiIpOworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICBwcmludGYoCisgICAgICAg ICAgIiBEYXRhIFRlcm1pbmFsIFJlYWR5IChEVFIpOiAlc1xyXG4iLAorI2lmZGVmIE5UCisgICAg ICAgICAgIih1bmtub3duKSIKKyNlbHNlIC8qIE5UICovCisgICAgICAgICAgKHkgJiBCTV9EVFIp ID8gIk9uIjogIk9mZiIKKyNlbmRpZiAvKiBOVCAqLworICAgICAgICAgICk7CisjaWZuZGVmIE1B QworICAgICAgICBwcmludGYoCisgICAgICAgICAgIiBSZXF1ZXN0IFRvIFNlbmQgICAgIChSVFMp OiAlc1xyXG4iLAorI2lmZGVmIE5UCisgICAgICAgICAgIih1bmtub3duKSIKKyNlbHNlIC8qIE5U ICovCisgICAgICAgICAgKHkgJiBCTV9SVFMpID8gIk9uIjogIk9mZiIKKyNlbmRpZiAvKiBOVCAq LworICAgICAgICAgICk7CisjZW5kaWYgLyogTUFDICovCisjZW5kaWYgLyogU1RSQVRVUyAqLwor ICAgIH0KKyNpZmRlZiBCRVRBREVCVUcKKyNpZmRlZiBDS19UQVBJCisgICAgaWYgKHR0dGFwaSAm JiAhdGFwaXBhc3MpIHsKKyAgICAgICAgTFBERVZDRkcgICAgICAgIGxwRGV2Q2ZnID0gTlVMTDsK KyAgICAgICAgTFBDT01NQ09ORklHICAgIGxwQ29tbUNvbmZpZyA9IE5VTEw7CisgICAgICAgIExQ TU9ERU1TRVRUSU5HUyBscE1vZGVtU2V0dGluZ3MgPSBOVUxMOworICAgICAgICBEQ0IgKiAgICAg ICAgICAgbHBEQ0IgPSBOVUxMOworCisgICAgICAgIGlmIChja3RhcGlHZXRNb2RlbVNldHRpbmdz KCZscERldkNmZywmbHBNb2RlbVNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmxwQ29tbUNvbmZpZywmbHBEQ0IpKSB7CisgICAgICAgICAgICBwcmludGYoIlxu Iik7CisgICAgICAgICAgICBja3RhcGlEaXNwbGF5TW9kZW1TZXR0aW5ncyhscERldkNmZyxscE1v ZGVtU2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscENv bW1Db25maWcsbHBEQ0IpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1RBUEkgKi8K KyNlbmRpZiAvKiBCRVRBREVCVUcgKi8KK30KKyNlbmRpZiAvKiBOT1NIT1cgKi8KKyNlbmRpZiAv KiBOT0xPQ0FMICovCisKKyNpZm5kZWYgTk9YRkVSCisvKiAgUyBEIEUgQiBVICAtLSBSZWNvcmQg c3BhciByZXN1bHRzIGluIGRlYnVnZ2luZyBsb2cgICovCisKK1ZPSUQKK3NkZWJ1KGxlbikgaW50 IGxlbjsgeworICAgIGRlYnVnKEYxMTEsInNwYXI6IGRhdGEiLChjaGFyICopIHJkYXRhcCxsZW4p OworICAgIGRlYnVnKEYxMDEsIiBzcHNpeiAiLCIiLCBzcHNpeik7CisgICAgZGVidWcoRjEwMSwi IHRpbWludCIsIiIsdGltaW50KTsKKyAgICBkZWJ1ZyhGMTAxLCIgbnBhZCAgIiwiIiwgIG5wYWQp OworICAgIGRlYnVnKEYxMDEsIiBwYWRjaCAiLCIiLCBwYWRjaCk7CisgICAgZGVidWcoRjEwMSwi IHNlb2wgICIsIiIsICBzZW9sKTsKKyAgICBkZWJ1ZyhGMTAxLCIgY3RscSAgIiwiIiwgIGN0bHEp OworICAgIGRlYnVnKEYxMDEsIiBlYnEgICAiLCIiLCAgIGVicSk7CisgICAgZGVidWcoRjEwMSwi IGVicWZsZyIsIiIsZWJxZmxnKTsKKyAgICBkZWJ1ZyhGMTAxLCIgYmN0ciAgIiwiIiwgIGJjdHIp OworICAgIGRlYnVnKEYxMDEsIiBycHRxICAiLCIiLCAgcnB0cSk7CisgICAgZGVidWcoRjEwMSwi IHJwdGZsZyIsIiIscnB0ZmxnKTsKKyAgICBkZWJ1ZyhGMTAxLCIgbHNjYXB1IiwiIixsc2NhcHUp OworICAgIGRlYnVnKEYxMDEsIiBhdGNhcHUiLCIiLGF0Y2FwdSk7CisgICAgZGVidWcoRjEwMSwi IGxwY2FwdSIsIiIsbHBjYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIgc3djYXB1IiwiIixzd2NhcHUp OworICAgIGRlYnVnKEYxMDEsIiB3c2xvdG4iLCIiLCB3c2xvdG4pOworICAgIGRlYnVnKEYxMDEs IiB3aGF0cnUiLCIiLCB3aGF0cnUpOworfQorLyogIFIgRCBFIEIgVSAtLSBEZWJ1Z2dpbmcgZGlz cGxheSBvZiBycGFyKCkgdmFsdWVzICAqLworCitWT0lECityZGVidShkLGxlbikgQ0hBUiAqZDsg aW50IGxlbjsgeworICAgIGRlYnVnKEYxMTEsInJwYXI6IGRhdGEiLGQsbGVuKTsKKyAgICBkZWJ1 ZyhGMTAxLCIgcnBzaXogIiwiIiwgeHVuY2hhcihkWzBdKSk7CisgICAgZGVidWcoRjEwMSwiIHJ0 aW1vICIsIiIsIHJ0aW1vKTsKKyAgICBkZWJ1ZyhGMTAxLCIgbXlwYWRuIiwiIixteXBhZG4pOwor ICAgIGRlYnVnKEYxMDEsIiBteXBhZGMiLCIiLG15cGFkYyk7CisgICAgZGVidWcoRjEwMSwiIGVv bCAgICIsIiIsICAgZW9sKTsKKyAgICBkZWJ1ZyhGMTAxLCIgY3RscSAgIiwiIiwgIGN0bHEpOwor ICAgIGRlYnVnKEYxMDEsIiBzcSAgICAiLCIiLCAgICBzcSk7CisgICAgZGVidWcoRjEwMSwiIGVi cSAgICIsIiIsICAgZWJxKTsKKyAgICBkZWJ1ZyhGMTAxLCIgZWJxZmxnIiwiIixlYnFmbGcpOwor ICAgIGRlYnVnKEYxMDEsIiBiY3RyICAiLCIiLCAgYmN0cik7CisgICAgZGVidWcoRjEwMSwiIHJw dHEgICIsIiIsICBkWzhdKTsKKyAgICBkZWJ1ZyhGMTAxLCIgcnB0ZmxnIiwiIixycHRmbGcpOwor ICAgIGRlYnVnKEYxMDEsIiBjYXBhcyAiLCIiLCBjYXBhcyk7CisgICAgZGVidWcoRjEwMSwiIGJp dHMgICIsIiIsZFtjYXBhc10pOworICAgIGRlYnVnKEYxMDEsIiBsc2NhcHUiLCIiLGxzY2FwdSk7 CisgICAgZGVidWcoRjEwMSwiIGF0Y2FwdSIsIiIsYXRjYXB1KTsKKyAgICBkZWJ1ZyhGMTAxLCIg bHBjYXB1IiwiIixscGNhcHUpOworICAgIGRlYnVnKEYxMDEsIiBzd2NhcHUiLCIiLHN3Y2FwdSk7 CisgICAgZGVidWcoRjEwMSwiIHdzbG90ciIsIiIsIHdzbG90cik7CisgICAgZGVidWcoRjEwMSwi IHJwc2l6KGV4dGVuZGVkKSIsIiIscnBzaXopOworfQorCisjaWZkZWYgQ09NTUVOVAorLyogIEMg SCBLIEUgUiBSICAtLSAgRGVjaWRlIHdoZXRoZXIgdG8gZXhpdCB1cG9uIGEgcHJvdG9jb2wgZXJy b3IgICovCisKK1ZPSUQKK2Noa2VycigpIHsKKyAgICBpZiAoYmFja2dyZCAmJiAhc2VydmVyKSBm YXRhbCgiUHJvdG9jb2wgZXJyb3IiKTsKK30KKyNlbmRpZiAvKiBDT01NRU5UICovCisjZW5kaWYg LyogTk9YRkVSICovCisKKy8qICBGIEEgVCBBIEwgIC0tICBGYXRhbCBlcnJvciBtZXNzYWdlICov CisKK1ZPSUQKK2ZhdGFsKG1zZykgY2hhciAqbXNnOyB7CisgICAgZXh0ZXJuIGludCBpbml0Zmxn OworICAgIHN0YXRpYyBpbnQgaW5pdGluZyA9IDA7CisgICAgaWYgKCFtc2cpIG1zZyA9ICIiOwor ICAgIGRlYnVnKEYxMTEsImZhdGFsIixtc2csaW5pdGZsZyk7CisKKyAgICBpZiAoIWluaXRmbGcp IHsJCQkvKiBJZiBjYWxsZWQgZnJvbSBwcmVzY2FuICovCisJaWYgKGluaXRpbmcpCQkJLyogb3Ig Y2FsbGVkIGZyb20gc3lzaW5pdCgpICovCisgICAgICAgICAgZXhpdCgyNTMpOworCWluaXRpbmcg PSAxOworCXN5c2luaXQoKTsKKyAgICB9CisKKyAgICBkZWJ1ZyhGMTExLCJmYXRhbCIsbXNnLHhp dHN0YSk7CisgICAgdGxvZyhGMTEwLCJGYXRhbDoiLG1zZywwTCk7CisjaWZkZWYgVk1TCisgICAg aWYgKHN0cm5jbXAobXNnLCIlQ0tFUk1JVCIsOCkpCisgICAgICBjb25vbCgiJUNLRVJNSVQtRS1G QVRBTCwgIik7CisgICAgY29ub2xsKG1zZyk7CisjZWxzZSAvKiAhVk1TICovCisgICAgY29ub2xs KG1zZyk7CisjZW5kaWYgLyogVk1TICovCisjaWZkZWYgT1MyCisjaWZuZGVmIE5PWEZFUgorICAg IGlmICh4ZnJiZWwpIHsKKyAgICAgICAgYmxlZXAoQlBfRkFJTCk7CisgICAgICAgIHNsZWVwKDEp OworICAgICAgICBibGVlcChCUF9GQUlMKTsKKyAgICB9CisjZW5kaWYgLyogTk9YRkVSICovCisK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICBkb2V4aXQoQkFEX0VYSVQseGl0c3RhIHwgMSk7ICAgICAg ICAvKiBFeGl0IGluZGljYXRpbmcgZmFpbHVyZSAqLworfQorCisjaWZuZGVmIE5PWEZFUgorLyog IEIgTCBEIEwgRSBOICAtLSAgTWFrZSBsZW5ndGgtZW5jb2RlZCBjb3B5IG9mIHN0cmluZyAgKi8K KworY2hhciAqCitibGRsZW4oc3RyLGRlc3QpIGNoYXIgKnN0ciwgKmRlc3Q7IHsKKyAgICBpbnQg bGVuOworICAgIGxlbiA9IChpbnQpc3RybGVuKHN0cik7CisgICAgaWYgKGxlbiA+IDk0KQorICAg ICAgKmRlc3QgPSBTUDsKKyAgICBlbHNlCisgICAgICAqZGVzdCA9IChjaGFyKSB0b2NoYXIobGVu KTsKKyAgICBzdHJjcHkoZGVzdCsxLHN0cik7CQkJLyogQ2hlY2tlZCBiZWxvdyBpbiBzZXRnZW4o KSAqLworICAgIHJldHVybihkZXN0K2xlbisxKTsKK30KKworCisvKiAgUyBFIFQgRyBFIE4gIC0t ICBDb25zdHJ1Y3QgYSBnZW5lcmljIGNvbW1hbmQgICovCisvKgorICBDYWxsIHdpdGggR2VuZXJp YyBjb21tYW5kIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aHJlZSBzdHJpbmcgYXJndW1lbnRzLgor ICBUcmFpbGluZyBzdHJpbmdzIGFyZSBhbGxvd2VkIHRvIGJlIGVtcHR5ICgiIikuICBFYWNoIHN0 cmluZyBleGNlcHQgdGhlIGxhc3QKKyAgbm9uLWVtcHR5IHN0cmluZyBtdXN0IGJlIGxlc3MgdGhh biA5NSBjaGFyYWN0ZXJzIGxvbmcuICBUaGUgZmluYWwgbm9uZW1wdHkKKyAgc3RyaW5nIGlzIGFs bG93ZWQgdG8gYmUgbG9uZ2VyLgorKi8KK0NIQVIKKyNpZmRlZiBDS19BTlNJQworc2V0Z2VuKGNo YXIgdHlwZSwgY2hhciAqIGFyZzEsIGNoYXIgKiBhcmcyLCBjaGFyICogYXJnMykKKyNlbHNlCitz ZXRnZW4odHlwZSxhcmcxLGFyZzIsYXJnMykgY2hhciB0eXBlLCAqYXJnMSwgKmFyZzIsICphcmcz OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzZXRnZW4gKi8geworICAgIGNoYXIgKnVwc3Ry LCAqY3A7CisjaWZkZWYgRFlOQU1JQworICAgIGlmICghY21kc3RyKQorICAgICAgaWYgKCEoY21k c3RyID0gbWFsbG9jKE1BWFNQICsgMSkpKQorICAgICAgICBmYXRhbCgic2V0Z2VuOiBjYW4ndCBh bGxvY2F0ZSBtZW1vcnkiKTsKKyNlbmRpZiAvKiBEWU5BTUlDICovCisKKyAgICBjcCA9IGNtZHN0 cjsKKyAgICAqY3ArKyA9IHR5cGU7CisgICAgKmNwID0gTlVMOworICAgIGlmICghYXJnMSkgYXJn MSA9ICIiOworICAgIGlmICghYXJnMikgYXJnMiA9ICIiOworICAgIGlmICghYXJnMykgYXJnMyA9 ICIiOworICAgIGlmICgoKGludClzdHJsZW4oYXJnMSkrKGludClzdHJsZW4oYXJnMikrKGludClz dHJsZW4oYXJnMykrNCkgPCBNQVhTUCkgeworCWlmICgqYXJnMSAhPSBOVUwpIHsKKwkgICAgdXBz dHIgPSBibGRsZW4oYXJnMSxjcCk7CisJICAgIGlmICgqYXJnMiAhPSBOVUwpIHsKKwkJdXBzdHIg PSBibGRsZW4oYXJnMix1cHN0cik7CisJCWlmICgqYXJnMyAhPSBOVUwpIGJsZGxlbihhcmczLHVw c3RyKTsKKwkgICAgfQorCX0KKwljbWFyZyA9IGNtZHN0cjsKKwlkZWJ1ZyhGMTEwLCJzZXRnZW4i LGNtYXJnLDApOworCXJldHVybignZycpOworICAgIH0KKyAgICByZXR1cm4oJ0UnKTsKK30KKyNl bmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT01TRU5ECitzdGF0aWMgY2hhciAqbWdidWZw ID0gTlVMTDsKKworLyogIEYgTiBQIEEgUiBTIEUgIC0tICAqLworCisvKgorICBBcmd1bWVudCBp cyBhIGNoYXJhY3RlciBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBmaWxlc3BlY3MuCisg IFRoaXMgZnVuY3Rpb24gYnJlYWtzIHRoZSBzdHJpbmcgYXBhcnQgaW50byBhbiBhcnJheSBvZiBw b2ludGVycywgb25lCisgIHRvIGVhY2ggZmlsZXNwZWMsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIg b2YgZmlsZXNwZWNzLiAgVXNlZCBieSBzZXJ2ZXIKKyAgd2hlbiBpdCByZWNlaXZlcyBhIEdFVCBj b21tYW5kIHRvIGFsbG93IGl0IHRvIHByb2Nlc3MgbXVsdGlwbGUgZmlsZQorICBzcGVjaWZpY2F0 aW9ucyBpbiBvbmUgdHJhbnNhY3Rpb24uICBTZXRzIGNtbGlzdCB0byBwb2ludCB0byBhIGxpc3Qg b2YKKyAgZmlsZSBwb2ludGVycywgZXhhY3RseSBhcyBpZiB0aGV5IHdlcmUgY29tbWFuZCBsaW5l IGFyZ3VtZW50cy4KKworICBUaGlzIHZlcnNpb24gb2YgZm5wYXJzZSB0cmVhdHMgc3BhY2VzIGFz IGZpbGVuYW1lIHNlcGFyYXRvcnMuICBJZiB5b3VyCisgIG9wZXJhdGluZyBzeXN0ZW0gYWxsb3dz IHNwYWNlcyBpbiBmaWxlbmFtZXMsIHlvdSdsbCBuZWVkIGEgZGlmZmVyZW50CisgIHNlcGFyYXRv ci4KKworICBUaGlzIHZlcnNpb24gb2YgZm5wYXJzZSBtYWxsb2NzIGEgc3RyaW5nIGJ1ZmZlciB0 byBjb250YWluIHRoZSBuYW1lcy4gIEl0CisgIGNhbm5vdCBhc3N1bWUgdGhhdCB0aGUgc3RyaW5n IHRoYXQgaXMgcG9pbnRlZCB0byBieSB0aGUgYXJndW1lbnQgaXMgc2FmZS4KKyovCitpbnQKK2Zu cGFyc2Uoc3RyaW5nKSBjaGFyICpzdHJpbmc7IHsKKyAgICBjaGFyICpwLCAqcywgKnE7CisgICAg aW50IHIgPSAwLCB4OyAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGNvZGUgKi8KKyNp ZmRlZiBSRUNVUlNJVkUKKyAgICBkZWJ1ZyhGMTExLCJmbnBhcnNlIixzdHJpbmcscmVjdXJzaXZl KTsKKyNlbmRpZiAvKiBSRUNVUlNJVkUgKi8KKworICAgIGlmIChtZ2J1ZnApIGZyZWUobWdidWZw KTsgICAgICAgICAgIC8qIEZyZWUgdGhpcyBmcm9tIGxhc3QgdGltZS4gKi8KKyAgICBtZ2J1ZnAg PSBtYWxsb2MoKGludClzdHJsZW4oc3RyaW5nKSsyKTsKKyAgICBpZiAoIW1nYnVmcCkgeworICAg ICAgICBkZWJ1ZyhGMTAwLCJmbnBhcnNlIG1hbGxvYyBlcnJvciIsIiIsMCk7CisgICAgICAgIHJl dHVybigwKTsKKyAgICB9CisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PU1BMCisgICAgY2tzdHJu Y3B5KGZzcGVjLHN0cmluZyxmc3BlY2xlbik7ICAgLyogTWFrZSBjb3B5IGZvciBcdihmaWxlc3Bl YykgKi8KKyNlbmRpZiAvKiBOT1NQTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisgICAgcyA9IHN0 cmluZzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgc3RyaW5nICovCisgICAgcCA9 IHEgPSBtZ2J1ZnA7ICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnQgdG8gdGhlIGNvcHkgKi8K KyAgICByID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIG91 ciByZXR1cm4gY29kZSAqLworICAgIHdoaWxlICgqcyA9PSBTUCB8fCAqcyA9PSBIVCkgICAgICAg IC8qIFNraXAgbGVhZGluZyBzcGFjZXMgYW5kIHRhYnMgKi8KKyAgICAgIHMrKzsKKyAgICBmb3Ig KHggPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAvKiBTdHJpcCB0cmFpbGluZyBzcGFjZXMg Ki8KKyAgICAgICAgICh4ID4gMSkgJiYgKHNbeC0xXSA9PSBTUCB8fCBzW3gtMV0gPT0gSFQpOwor ICAgICAgICAgeC0tKQorICAgICAgc1t4LTFdID0gTlVMOworICAgIHdoaWxlICgxKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIExvb3AgdGhyb3VnaCByZXN0IG9mIHN0cmluZyAqLworICAg ICAgICBpZiAoKnMgPT0gQ01EUSkgeyAgICAgICAgICAgICAgIC8qIEJhY2tzbGFzaCAocXVvdGUg Y2hhcmFjdGVyKT8gKi8KKyAgICAgICAgICAgIGlmICgoeCA9IHh4ZXNjKCZzKSkgPiAtMSkgeyAv KiBHbyBpbnRlcnByZXQgaXQuICovCisgICAgICAgICAgICAgICAgKnErKyA9IChjaGFyKSB4OyAg ICAgICAgLyogTnVtZXJpYyBiYWNrc2xhc2ggY29kZSwgb2sgKi8KKyAgICAgICAgICAgIH0gZWxz ZSB7ICAgICAgICAgICAgICAgICAgICAvKiBKdXN0IGxldCBpdCBxdW90ZSBuZXh0IGNoYXIgKi8K KyAgICAgICAgICAgICAgICBzKys7ICAgICAgICAgICAgICAgICAgICAvKiBnZXQgcGFzdCB0aGUg YmFja3NsYXNoICovCisgICAgICAgICAgICAgICAgKnErKyA9ICpzKys7ICAgICAgICAgICAgLyog ZGVwb3NpdCBuZXh0IGNoYXIgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICB9IGVsc2UgaWYgKCpzID09IFNQIHx8ICpzID09IE5VTCkgeyAvKiBVbnF1b3Rl ZCBzcGFjZSBvciBOVUw/ICovCisgICAgICAgICAgICAqcSsrID0gTlVMOyAgICAgICAgICAgICAg ICAgLyogRW5kIG9mIG91dHB1dCBmaWxlbmFtZS4gKi8KKyAgICAgICAgICAgIG1zZmlsZXNbcl0g PSBwOyAgICAgICAgICAgICAvKiBBZGQgdGhpcyBmaWxlbmFtZSB0byB0aGUgbGlzdCAqLworICAg ICAgICAgICAgZGVidWcoRjExMSwiZm5wYXJzZSIsbXNmaWxlc1tyXSxyKTsKKyAgICAgICAgICAg IHIrKzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb3VudCBpdCAqLworICAgICAgICAgICAg aWYgKCpzID09IE5VTCkgYnJlYWs7ICAgICAgIC8qIEVuZCBvZiBzdHJpbmc/ICovCisgICAgICAg ICAgICB3aGlsZSAoKnMgPT0gU1ApIHMrKzsgICAgICAgLyogU2tpcCByZXBlYXRlZCBzcGFjZXMg Ki8KKyAgICAgICAgICAgIHAgPSBxOyAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBvZiBu ZXh0IG5hbWUgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9IGVsc2UgKnErKyA9 ICpzOyAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSBjb3B5IHRoZSBjaGFyYWN0ZXIgKi8KKyAg ICAgICAgcysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOZXh0IGlucHV0IGNoYXJh Y3RlciAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJmbnBhcnNlIHIiLCIiLHIpOworICAgIG1z ZmlsZXNbcl0gPSAiIjsgICAgICAgICAgICAgICAgICAgIC8qIFB1dCBlbXB0eSBzdHJpbmcgYXQg ZW5kIG9mIGxpc3QgKi8KKyAgICBjbWxpc3QgPSBtc2ZpbGVzOworICAgIHJldHVybihyKTsKK30K KyNlbmRpZiAvKiBOT01TRU5EICovCisKK2NoYXIgKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBkYmNocigpIGZvciBERUJVRyBTRVNTSU9OICovCitkYmNocihjKSBpbnQgYzsg eworICAgIHN0YXRpYyBjaGFyIHNbOF07CisgICAgY2hhciAqY3AgPSBzOworCisgICAgYyAmPSAw eGZmOworICAgIGlmIChjICYgMHg4MCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIDh0aCBiaXQg b24gKi8KKyAgICAgICAgKmNwKysgPSAnfic7CisgICAgICAgIGMgJj0gMHg3ZjsKKyAgICB9Cisg ICAgaWYgKGMgPCBTUCkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBjaGFyYWN0 ZXIgKi8KKyAgICAgICAgKmNwKysgPSAnXic7CisgICAgICAgICpjcCsrID0gKGNoYXIpIGN0bChj KTsKKyAgICB9IGVsc2UgaWYgKGMgPT0gREVMKSB7CisgICAgICAgICpjcCsrID0gJ14nOworICAg ICAgICAqY3ArKyA9ICc/JzsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBQcmludGluZyBjaGFyYWN0ZXIgKi8KKyAgICAgICAgKmNwKysgPSAoY2hhcikgYzsKKyAg ICB9CisgICAgKmNwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRl IHN0cmluZyAqLworICAgIGNwID0gczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJl dHVybiBwb2ludGVyIHRvIGl0ICovCisgICAgcmV0dXJuKGNwKTsKK30KKworLyogIEMgSyBIIE8g UyBUICAtLSAgR2V0IG5hbWUgb2YgbG9jYWwgaG9zdCAod2hlcmUgQy1LZXJtaXQgaXMgcnVubmlu ZykgICovCisKKy8qCisgIENhbGwgd2l0aCBwb2ludGVyIHRvIGJ1ZmZlciB0byBwdXQgaG9zdG5h bWUgaW4sIGFuZCBsZW5ndGggb2YgYnVmZmVyLgorICBDb3BpZXMgaG9zdG5hbWUgaW50byBidWZm ZXIgb24gc3VjY2VzcywgcHV0cyBudWxsIHN0cmluZyBpbiBidWZmZXIgb24KKyAgZmFpbHVyZS4K KyovCisjaWZkZWYgQlNENDQKKyNkZWZpbmUgQlNENAorI3VuZGVmIEFUVFNWCisjZW5kaWYgLyog QlNENDQgKi8KKworI2lmZGVmIFNWT1JQT1NJWAorI2lmbmRlZiBCU0Q0NAorI2lmbmRlZiBhcG9s bG8KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2VuZGlmIC8qIGFwb2xsbyAqLworI2VuZGlm IC8qIEJTRDQ0ICovCisjZWxzZQorI2lmZGVmIEJFTExWMTAKKyNpbmNsdWRlIDx1dHNuYW1lLmg+ CisjZW5kaWYgLyogQkVMTFYxMCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCovCisKKyNpZmRlZiBD S1NZU0xPRworZXh0ZXJuIGNoYXIgdWlkYnVmW10sICogY2xpZW50aG9zdDsKKyNlbmRpZiAvKiBD S1NZU0xPRyAqLworCitWT0lECitja2hvc3QodnZidWYsdnZsZW4pIGNoYXIgKiB2dmJ1ZjsgaW50 IHZ2bGVuOyB7CisKKyNpZm5kZWYgTk9QVVNICisgICAgZXh0ZXJuIGludCBub3B1c2g7CisjaWZu ZGVmIE5PU0VSVkVSCisgICAgZXh0ZXJuIGludCBlbl9ob3M7CisjZW5kaWYgLyogTk9TRVJWRVIg Ki8KKyNlbmRpZiAvKiBOT1BVU0ggKi8KKworI2lmZGVmIHBkcDExCisgICAgKnZ2YnVmID0gTlVM OworI2Vsc2UgIC8qIEV2ZXJ5dGhpbmcgZWxzZSAtIHJlc3Qgb2YgdGhpcyByb3V0aW5lICovCisK KyAgICBjaGFyICpnOworICAgIGludCBoYXZlZnVsbCA9IDA7CisjaWZkZWYgVk1TCisgICAgaW50 IHg7CisjZW5kaWYgLyogVk1TICovCisKKyNpZmRlZiBTVk9SUE9TSVgKKyNpZm5kZWYgQlNENDQK KyNpZm5kZWYgXzM4NkJTRAorI2lmbmRlZiBBUE9MTE9TUjEwCisgICAgc3RydWN0IHV0c25hbWUg aG5hbWU7CisjZW5kaWYgLyogQVBPTExPU1IxMCAqLworI2VuZGlmIC8qIF8zODZCU0QgKi8KKyNl bmRpZiAvKiBCU0Q0NCAqLworI2VuZGlmIC8qIFNWT1JQT1NJWCAqLworI2lmZGVmIGRhdGFnZW5l cmFsCisgICAgaW50IGFjMCA9IChjaGFyICopIHZ2YnVmLCBhYzEgPSAtMSwgYWMyID0gMDsKKyNl bmRpZiAvKiBkYXRhZ2VuZXJhbCAqLworCisjaWZuZGVmIE5PUFVTSAorICAgIGlmIChnZXRlbnYo IkNLX05PUFVTSCIpKSB7ICAgICAgICAgIC8qIE5vIHNoZWxsIGFjY2VzcyBhbGxvd2VkICovCisg ICAgICAgIG5vcHVzaCA9IDE7ICAgICAgICAgICAgICAgICAgICAgLyogb24gdGhpcyBob3N0Li4u ICovCisjaWZuZGVmIE5PU0VSVkVSCisgICAgICAgIGVuX2hvcyA9IDA7CisjZW5kaWYgLyogTk9T RVJWRVIgKi8KKyAgICB9CisjZW5kaWYgLyogTk9QVVNIICovCisKKyAgICAqdnZidWYgPSBOVUw7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3cgbGV0J3MgZ2V0IG91ciBob3N0IG5hbWUgLi4u ICovCisKKyNpZm5kZWYgQkVMTFYxMCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb2VzIG5v dCBoYXZlIGdldGhvc3RuYW1lKCkgKi8KKyNpZm5kZWYgT1hPUworI2lmZGVmIFNWT1JQT1NJWAor I2lmZGVmIEFQT0xMT1NSMTAKKyAgICBja3N0cm5jcHkodnZidWYsIkFwb2xsbyIsdnZsZW4pOwor I2Vsc2UKKyNpZmRlZiBCU0Q0NAorICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAw KQorICAgICAgKnZ2YnVmID0gTlVMOworI2Vsc2UKKyNpZmRlZiBfMzg2QlNECisgICAgaWYgKGdl dGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8IDApICp2dmJ1ZiA9IE5VTDsKKyNlbHNlCisjaWZkZWYg UU5YCisjaWZkZWYgVENQU09DS0VUCisgICAgaWYgKGdldGhvc3RuYW1lKHZ2YnVmLHZ2bGVuKSA8 IDApICp2dmJ1ZiA9IE5VTDsKKyNlbHNlCisgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkgY2tz dHJuY3B5KHZ2YnVmLGhuYW1lLm5vZGVuYW1lLHZ2bGVuKTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQg Ki8KKyNlbHNlIC8qIFNWT1JQT1NJWCBidXQgbm90IF8zODZCU0Qgb3IgQlNENDQgKi8KKyNpZmRl ZiBfX2lhNjRfXworICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEpIGNrc3RybmNweSh2dmJ1Zixo bmFtZS5ub2RlbmFtZSx2dmxlbik7CisjZWxzZQorICAgIGlmICh1bmFtZSgmaG5hbWUpID4gLTEp IHsKKwljaGFyICogcDsKKwlwID0gaG5hbWUubm9kZW5hbWU7CisjaWZkZWYgVENQU09DS0VUCisj aWZuZGVmIE5PQ0tHRVRGUUhPU1QKKwlpZiAoIWNrc3RyY2hyKHAsJy4nKSkKKwkgIHAgPSAoY2hh ciAqKWNrZ2V0ZnFob3N0bmFtZShwKTsKKyNlbmRpZiAvKiBOT0NLR0VURlFIT1NUICovCisjZW5k aWYgLyogVENQU09DS0VUICovCisJaWYgKCFwKSBwID0gIiI7CisJaWYgKCEqcCkgcCA9ICIodW5r bm93bikiOworCWNrc3RybmNweSh2dmJ1ZixwLHZ2bGVuKTsKKyAgICB9CisjZW5kaWYgLyogX19p YTY0X18gKi8KKyNlbmRpZiAvKiBRTlggKi8KKyNlbmRpZiAvKiBfMzg2QlNEICovCisjZW5kaWYg LyogQlNENDQgKi8KKyNlbmRpZiAvKiBBUE9MTE9TUjEwICovCisjZWxzZSAvKiAhU1ZPUlBPU0lY ICovCisjaWZkZWYgQlNENAorICAgIGlmIChnZXRob3N0bmFtZSh2dmJ1Zix2dmxlbikgPCAwKSAq dnZidWYgPSBOVUw7CisjZWxzZSAvKiAhQlNENCAqLworI2lmZGVmIFZNUworICAgIGcgPSBnZXRl bnYoIlNZUyROT0RFIik7CisgICAgaWYgKGcpIGNrc3RybmNweSh2dmJ1ZixnLHZ2bGVuKTsKKyAg ICB4ID0gKGludClzdHJsZW4odnZidWYpOworICAgIGlmICh4ID4gMSAmJiB2dmJ1Zlt4LTFdID09 ICc6JyAmJiB2dmJ1Zlt4LTJdID09ICc6JykgdnZidWZbeC0yXSA9IE5VTDsKKyNlbHNlCisjaWZk ZWYgZGF0YWdlbmVyYWwKKyAgICBpZiAoc3lzKCRITkFNRSwmYWMwLCZhYzEsJmFjMikgPT0gMCkg Lyogc3VjY2Vzc2Z1bCAqLworICAgICAgICB2dmxlbiA9IGFjMiArIDE7ICAgICAgICAgICAgICAg IC8qIGVuaCAtIGhhdmUgdG8gYWRkIG9uZSAqLworI2Vsc2UKKyNpZmRlZiBPUzIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBPUy8yICovCisgICAgZyA9IG9zMl9nZXRob3N0bmFtZSgp OworICAgIGlmIChnKSBja3N0cm5jcHkodnZidWYsZyx2dmxlbik7CisjZWxzZSAvKiBPUzIgKi8K KyNpZmRlZiBPU0sKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgaWYgKGdldGhvc3RuYW1lKHZ2 YnVmLCB2dmxlbikgPCAwKSAqdnZidWYgPSBOVUw7CisjZW5kaWYgLyogVENQU09DS0VUICovCisj ZW5kaWYgLyogT1NLICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwg Ki8KKyNlbmRpZiAvKiBWTVMgKi8KKyNlbmRpZiAvKiBCU0Q0ICovCisjZW5kaWYgLyogU1ZPUlBP U0lYICovCisjZWxzZSAvKiBPWE9TICovCisgICAgLyogSWYgVENQL0lQIGlzIG5vdCBpbnN0YWxs ZWQsIGdldGhvc3RuYW1lKCkgZmFpbHMsIHVzZSB1bmFtZSgpICovCisgICAgaWYgKGdldGhvc3Ru YW1lKHZ2YnVmLHZ2bGVuKSA8IDApIHsKKyAgICAgICAgaWYgKHVuYW1lKCZobmFtZSkgPiAtMSkK KyAgICAgICAgICAgIGNrc3RybmNweSh2dmJ1ZixobmFtZS5ub2RlbmFtZSx2dmxlbik7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICp2dmJ1ZiA9IE5VTDsKKyAgICB9CisjZW5kaWYgLyogT1hP UyAqLworI2VuZGlmIC8qIEJFTExWMTAgKi8KKyAgICBpZiAoKnZ2YnVmID09IE5VTCkgeyAgICAg ICAgICAgICAgICAvKiBJZiBpdCdzIHN0aWxsIGVtcHR5ICovCisgICAgICAgIGcgPSBnZXRlbnYo IkhPU1QiKTsgICAgICAgICAgICAgLyogdHJ5IHRoaXMgKi8KKyAgICAgICAgaWYgKGcpIGNrc3Ry bmNweSh2dmJ1ZixnLHZ2bGVuKTsKKyAgICB9CisgICAgdnZidWZbdnZsZW4tMV0gPSBOVUw7ICAg ICAgICAgICAgICAgLyogTWFrZSBzdXJlIHJlc3VsdCBpcyB0ZXJtaW5hdGVkLiAqLworI2VuZGlm IC8qIHBkcDExICovCit9CisjaWZkZWYgQlNENDQKKyN1bmRlZiBCU0Q0CisjZGVmaW5lIEFUVFNW CisjZW5kaWYgLyogQlNENDQgKi8KKworLyoKKyAgQSBTIEsgTSBPIFIgRSAgLS0gIFBvb3IgcGVy c29uJ3MgIm1vcmUiLgorICBSZXR1cm5zIDAgaWYgbm8gbW9yZSwgMSBpZiBtb3JlIHdhbnRlZC4K KyovCitpbnQKK2Fza21vcmUoKSB7CisgICAgY2hhciBjOworICAgIGludCBydiwgY3g7CisjaWZk ZWYgSUtTRAorICAgIGV4dGVybiBpbnQgdGltZWxpbWl0OworI2VuZGlmIC8qIElLU0QgKi8KKyNp ZmRlZiBJS1NEQ09ORgorICAgIGV4dGVybiBpbnQgaWtzZGNmOworI2VuZGlmIC8qIElLU0RDT05G ICovCisjaWZkZWYgQ0tfQVBDCisgICAgZXh0ZXJuIGludCBhcGNzdGF0dXMsIGFwY2FjdGl2ZTsK KyNlbmRpZiAvKiBDS19BUEMgKi8KKworI2lmZGVmIE5PSUNQCisgICAgcmV0dXJuKDEpOworI2Vs c2UKKyAgICBpZiAoIXhhc2ttb3JlKQorICAgICAgcmV0dXJuKDEpOworI2lmZGVmIElLU0RDT05G CisgICAgaWYgKGluc2VydmVyICYmICFpa3NkY2YpCisgICAgICByZXR1cm4oMSk7CisjZW5kaWYg LyogSUtTRENPTkYgKi8KKyNpZmRlZiBDS19BUEMKKyAgICBpZiAoYXBjYWN0aXZlID09IEFQQ19M T0NBTCB8fAorICAgICAgICAoYXBjYWN0aXZlID09IEFQQ19SRU1PVEUgJiYgKGFwY3N0YXR1cyAm IEFQQ19OT0lOUCkpKQorICAgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogQ0tfQVBDICovCisj aWZkZWYgVk1TCisgICAgaWYgKGJhdGNoKQorICAgICAgcmV0dXJuKDEpOworI2Vsc2UKKyNpZmRl ZiBVTklYCisgICAgaWYgKGJhY2tncmQpCisgICAgICByZXR1cm4oMSk7CisjZW5kaWYgLyogVU5J WCAqLworI2VuZGlmIC8qIFZNUyAqLworCisjaWZuZGVmIFZNUworICAgIGNvbmNiKChjaGFyKWVz Y2FwZSk7ICAgICAgICAgICAgICAgIC8qIEZvcmNlIENCUkVBSyBtb2RlLiAqLworI2VuZGlmIC8q IFZNUyAqLworCisgICAgcnYgPSAtMTsKKyAgICB3aGlsZSAocnYgPCAwKSB7CisjaWZuZGVmIE9T MgorICAgICAgICBwcmludGYoIm1vcmU/ICIpOworI2lmZGVmIFVOSVgKKyNpZmRlZiBOT1NFVEJV RgorICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBOT1NFVEJVRiAqLworI2VuZGlm IC8qIFVOSVggKi8KKyNlbHNlCisgICAgICAgIHByaW50ZigibW9yZT8gIik7CisgICAgICAgIGZm bHVzaChzdGRvdXQpOworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgSUtTRAorICAgICAgICBp ZiAoaW5zZXJ2ZXIpIHsKKyAgICAgICAgICAgIGN4ID0gY21kZ2V0Yyh0aW1lbGltaXQpOworICAg ICAgICAgICAgaWYgKGN4IDwgLTEgJiYgdGltZWxpbWl0KSB7CisgICAgICAgICAgICAgICAgcHJp bnRmKCJcbj9JS1MgaWRsZSB0aW1lb3V0IC0gR29vZGJ5ZS5cbiIpOworICAgICAgICAgICAgICAg IGRvZXhpdChHT09EX0VYSVQsMCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGN4ID09IC0xKSB7 CS8qIENvbm5lY3Rpb24gbG9zdCAqLworICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCww KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGMgPSAoY2hhcikgY3g7CisgICAgICAgIH0g ZWxzZSB7CisjZW5kaWYgLyogSUtTRCAqLworI2lmZGVmIFZNUworCSAgICBjb25iaW4oKGNoYXIp ZXNjYXBlKTsJLyogUHJvdGVjdCBhZ2FpbnN0IEN0cmwtWiAqLworCSAgICBjeCA9IGNvbmluYygw KTsKKwkgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsKKyNlbHNlCisJICAgIGN4ID0gY21kZ2V0Yygw KTsKKyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgZGVidWcoRjEwMSwiYXNrbW9yZSBjbWRnZXRjIiwi IixjeCk7CisJICAgIGlmIChjeCA9PSBFT0YpIHsKKwkJZGVidWcoRjEwMCwiYXNrbW9yZSBFT0Yi LCIiLDApOworI2lmZGVmIFZNUworCQljID0gJ1wwMzInOworI2Vsc2UKKwkJYyA9ICduJzsKKyNl bmRpZiAvKiBWTVMgKi8KKwkgICAgfSBlbHNlIHsKKwkJYyA9IChjaGFyKWN4OworCSAgICB9CisJ ICAgIGRlYnVnKEYxMDEsImFza21vcmUgYyIsIiIsYyk7CisKKyNpZmRlZiBJS1NECisJfQorI2Vu ZGlmIC8qIElLU0QgKi8KKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgLyogWWVzICov CisJICBjYXNlICdwJzogY2FzZSAnUCc6IGNhc2UgJ2cnOiBjYXNlICdHJzogLyogUHJvY2VlZCBv ciBHbyAqLworCSAgICB4YXNrbW9yZSA9IDA7CisJICAgIC8qIGZhbGwgdGhydSBvbiBwdXJwb3Nl ICovCisKKyAgICAgICAgICBjYXNlIFNQOiBjYXNlICd5JzogY2FzZSAnWSc6IGNhc2UgMDEyOiAg Y2FzZSAwMTU6CisjaWZkZWYgT1NLCisgICAgICAgICAgICB3cml0ZSgxLCAiXDAxNSAgICAgIFww MTUiLCBzaXplb2YgIlwwMTUgICAgICBcMDE1IiAtIDEpOworI2Vsc2UKKyAgICAgICAgICAgIHBy aW50ZigiXDAxNSAgICAgIFwwMTUiKTsKKyNlbmRpZiAvKiBPU0sgKi8KKyAgICAgICAgICAgIHJ2 ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIC8qIE5vICovCisgICAgICAgICAg Y2FzZSAnbic6IGNhc2UgJ04nOiBjYXNlICdxJzogY2FzZSAnUSc6CisjaWZkZWYgT1NLCisgICAg ICAgICAgICBwcmludGYoIlxuIik7CisjZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJcMDE1XDAx MiIpOworI2VuZGlmIC8qIE9TSyAqLworICAgICAgICAgICAgcnYgPSAwOworICAgICAgICAgICAg YnJlYWs7CisJICBjYXNlICdcMDAzJzoKKwkgIGNhc2UgJ1wwMDQnOgorCSAgY2FzZSAnXDAzMic6 CisjaWZkZWYgT1NLCisJICAgIHByaW50ZigiXiVjLi4uXG4iLCAoYyArIDAxMDApKTsKKyNlbHNl CisJICAgIHByaW50ZigiXiVjLi4uXDAxNVwwMTIiLCAoYyArIDAxMDApKTsKKyNlbmRpZiAvKiBP U0sgKi8KKwkgICAgcnYgPSAwOworCSAgICBicmVhazsKKyAgICAgICAgICAvKiBJbnZhbGlkIGFu c3dlciAqLworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJhc2tt b3JlIiwiaW52YWxpZCBhbnN3ZXIiLGMpOworICAgICAgICAgICAgcHJpbnRmKCJZIG9yIHNwYWNl LWJhciBmb3IgeWVzLCBOIGZvciBubywgRyB0byBzaG93IHRoZSByZXN0XG4iKTsKKyAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICB9CisjaWZkZWYgT1MyCisgICAgICAgIHByaW50ZigiXHIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcciIpOwor ICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB9CisgICAgcmV0 dXJuKHJ2KTsKKyNlbmRpZiAvKiBOT0lDUCAqLworfQorCisvKiAgVCBSIEEgUCAgLS0gIFRlcm1p bmFsIGludGVycnVwdCBoYW5kbGVyICovCisKK1NJR1RZUAorI2lmZGVmIENLX0FOU0lDCit0cmFw KGludCBzaWcpCisjZWxzZQordHJhcChzaWcpIGludCBzaWc7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KKy8qIHRyYXAgKi8geworICAgIGV4dGVybiBpbnQgYl9zYXZlLCBmX3NhdmU7CisjaWZuZGVm IE5PSUNQCisgICAgZXh0ZXJuIGludCB0aW1lbGltaXQ7CisjZW5kaWYgLyogTk9JQ1AgKi8KKyNp ZmRlZiBPUzIKKyAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBzdGFydGZsYWdzOworI2lmbmRlZiBO T1NFVEtFWQorICAgIGV4dGVybiBpbnQgb3MyZ2tzOworI2VuZGlmIC8qIE5PU0VUS0VZICovCisg ICAgaW50IGk7CisjZW5kaWYgLyogT1MyICovCisjaWZuZGVmIE5PU1BMCisgICAgZXh0ZXJuIGlu dCBpX2FjdGl2ZSwgaW5zdGF0dXM7CisjZW5kaWYgLyogTk9TUEwgKi8KKyNpZmRlZiBWTVMKKyAg ICBpbnQgaTsgRklMRSAqZjsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICBleHRlcm4gaW50IHpjaGtv ZCwgemNoa2lkOworI2lmbmRlZiBOT1NQTAorICAgIGV4dGVybiBpbnQgdW5rbWFjcm87CisjZW5k aWYgLyogTk9TUEwgKi8KKworICAgIGRlYm9rID0gMTsKKyNpZmRlZiBOVFNJRworICAgIGNvbm5v aSgpOworI2VuZGlmIC8qIE5UU0lHICovCisjaWZkZWYgX19FTVhfXworICAgIHNpZ25hbChTSUdJ TlQsIFNJR19BQ0spOworI2VuZGlmCisjaWZkZWYgR0VNRE9TCisvKiBHRU0gaXMgbm90IHJlZW50 cmFudCwgbm8gaS9vIGZyb20gaW50ZXJydXB0IGxldmVsICovCisgICAgY2tsb25nam1wKGNtamJ1 ZiwxKTsgICAgICAgICAgICAgICAgLyogSnVtcCBiYWNrIHRvIHBhcnNlciBub3chICovCisjZW5k aWYgLyogR0VNRE9TICovCisKKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKwlkZWJ1 ZyhGMTAwLCIqKioqKioqKioqKioqKioqKioqKioiLCIiLDApOworCWlmIChzaWcgPT0gU0lHSU5U KQorCSAgZGVidWcoRjEwMSwidHJhcCBjYXVnaHQgU0lHSU5UIiwiIixzaWcpOworCWVsc2UgCisJ ICBkZWJ1ZyhGMTAxLCJ0cmFwIGNhdWdodCBzaWduYWwiLCIiLHNpZyk7CisJZGVidWcoRjEwMCwi KioqKioqKioqKioqKioqKioqKioqIiwiIiwwKTsKKyAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KworI2lmZGVmIE9TMgorICAgIGlmICggc2lnID09IFNJR0JSRUFLICYmIChzdGFydGZsYWdzICYg MTI4KSApIHsKKyAgICAgICAgZGVidWcoRjEwMSwidHJhcCBpZ25vcmluZyBTSUdCUkVBSyIsIiIs c2lnKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmbmRl ZiBOT0lDUAorICAgIHRpbWVsaW1pdCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluIGNh c2UgdGltZWQgQVNLIGludGVycnVwdGVkICovCisjaWZuZGVmIE5PU1BMCisgICAgdW5rbWFjcm8g PSAwOwkJCS8qIE9yIE9OX1VOS05PV05fTUFDUk8gaW50ZXJydXB0ZWQuLiAqLworI2VuZGlmIC8q IE5PU1BMICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICB6Y2hrb2QgPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPciBmaWxlIGV4cGFuc2lvbiBpbnRlcnJ1cHRlZC4uLiAqLworICAg IHpjaGtpZCA9IDA7CisgICAgaW50ZXJydXB0ZWQgPSAxOworCisgICAgaWYgKHdoYXQgJiBXX0NP Tk5FQ1QpIHsJCS8qIEFyZSB3ZSBpbiBDT05ORUNUIG1vZGU/ICovCisvKgorICBUaGUgSFAgd29y a3N0YXRpb24gUmVzZXQga2V5IHNlbmRzIHNvbWUga2luZCBvZiB1ZWJlci1TSUdJTlQgdGhhdCBj YW4gbm90CisgIGJlIFNJR19JR05vcmVkLCBzbyB3ZSB3aW5kIHVwIGhlcmUgc29tZWhvdyAoZXZl biB0aG91Z2ggdGhpcyBpcyAqbm90KiB0aGUKKyAgY3VycmVudCBTSUdJTlQgaGFuZGxlcikuICBK dXN0IHJldHVybi4KKyovCisgICAgICAgIGRlYnVnKEYxMDEsInRyYXA6IFNJR0lOVCBjYXVnaHQg ZHVyaW5nIENPTk5FQ1QiLCIiLHNpZyk7CisgICAgICAgIFNJR1JFVFVSTjsKKyAgICB9CisjaWZu ZGVmIE5PU1BMCisgICAgaWYgKGlfYWN0aXZlKSB7ICAgICAgICAgICAgICAgICAgICAgLyogSU5Q VVQgY29tbWFuZCB3YXMgYWN0aXZlPyAqLworICAgICAgICBpX2FjdGl2ZSA9IDA7ICAgICAgICAg ICAgICAgICAgIC8qIE5vdCBhbnkgbW9yZS4uLiAqLworICAgICAgICBpbnN0YXR1cyA9IElOUF9V STsgICAgICAgICAgICAgIC8qIElOUFVUIHN0YXR1cyA9IFVzZXIgSW50ZXJydXB0ZWQgKi8KKyAg ICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1hGRVIKKyAgICBmdHJlc2V0KCk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN0b3JlIGdsb2JhbCBwcm90b2NvbCBzZXR0 aW5ncyAqLworICAgIGJpbmFyeSA9IGJfc2F2ZTsgICAgICAgICAgICAgICAgICAgIC8qIFRoZW4g cmVzdG9yZSB0aGVzZSAqLworICAgIGZuY252ICA9IGZfc2F2ZTsKKyAgICBieWVfYWN0aXZlID0g MDsKKyAgICBkaXJhY3RpdmUgPSAwOworICAgIGNkYWN0aXZlID0gMDsKKyNlbmRpZiAvKiBOT1hG RVIgKi8KKyAgICB6Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB3 ZXJlIHRyYW5zZmVycmluZyBhIGZpbGUsICovCisgICAgemNsb3NlKFpPRklMRSk7ICAgICAgICAg ICAgICAgICAgICAgLyogY2xvc2UgaXQuICovCisjaWZuZGVmIE5PSUNQCisgICAgY21kc3F1byhj bWRfcXVvdGluZyk7ICAgICAgICAgICAgICAgLyogSWYgY29tbWFuZCBxdW90aW5nIHdhcyB0dXJu ZWQgb2ZmICovCisjaWZkZWYgQ0tMRUFSTgorICAgIHsKKwlleHRlcm4gRklMRSAqIGxlYXJuZnA7 CisJZXh0ZXJuIGludCBsZWFybmluZzsKKwlpZiAobGVhcm5mcCkgeworCSAgICBmY2xvc2UobGVh cm5mcCk7CisJICAgIGxlYXJuZnAgPSBOVUxMOworCSAgICBsZWFybmluZyA9IDA7CisJfQorICAg IH0KKyNlbmRpZiAvKiBDS0xFQVJOICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNpZmRlZiBDS19B UEMKKyAgICBkZWxtYWMoIl9hcGNfY29tbWFuZHMiLDEpOworICAgIGFwY2FjdGl2ZSA9IEFQQ19J TkFDVElWRTsKKyNlbmRpZiAvKiBDS19BUEMgKi8KKworI2lmZGVmIFZNUworLyoKKyAgRml4IHRl cm1pbmFsLgorKi8KKyAgICBpZiAoZnRfd2luKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJ ZiBjdXJzZXMgd2luZG93IG9wZW4gKi8KKyAgICAgICAgZGVidWcoRjEwMCwiXkMgdHJhcCgpIGN1 cnNlcyIsIiIsMCk7CisgICAgICAgIHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsgICAgICAgLyog Q2xvc2UgaXQgKi8KKyAgICAgICAgY29ucmVzKCk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBS ZXN0b3JlIHRlcm1pbmFsICovCisgICAgICAgIGkgPSBwcmludGYoIl5DLi4uIik7ICAgICAgICAg ICAgLyogRWNobyBeQyB0byBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICB9IGVsc2UgeworICAgICAg ICBjb25yZXMoKTsKKyAgICAgICAgaSA9IHByaW50ZigiXkMuLi5cbiIpOyAgICAgICAgICAvKiBF Y2hvIF5DIHRvIHN0YW5kYXJkIG91dHB1dCAqLworICAgIH0KKyAgICBpZiAoaSA8IDEgJiYgZmVy cm9yKHN0ZG91dCkpIHsgICAgICAvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgKi8KKyAgICAgICAg ZGVidWcoRjEwMCwiXkMgdHJhcCgpIGVycm9yIiwiIiwwKTsKKyAgICAgICAgZmNsb3NlKHN0ZG91 dCk7ICAgICAgICAgICAgICAgICAvKiBjbG9zZSBzdGFuZGFyZCBvdXRwdXQgKi8KKyAgICAgICAg ZiA9IGZvcGVuKGRmdHR5LCAidyIpOyAgICAgICAgICAvKiBvcGVuIHRoZSBjb250cm9sbGluZyB0 ZXJtaW5hbCAqLworICAgICAgICBpZiAoZikgc3Rkb3V0ID0gZjsgICAgICAgICAgICAgIC8qIGFu ZCBtYWtlIGl0IHN0YW5kYXJkIG91dHB1dCAqLworICAgICAgICBwcmludGYoIl5DLi4uXG4iKTsg ICAgICAgICAgICAgIC8qIGFuZCBlY2hvIHRoZSBeQyBhZ2Fpbi4gKi8KKyAgICB9CisjZWxzZSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm90IFZNUyAqLworI2lmZGVmIFNU UkFUVVMKKyAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgY29u c29sZSBiYWNrIHRvIG5vcm1hbCBtb2RlICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2lmbmRl ZiBOT1hGRVIKKyAgICBpZiAoZnRfd2luKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBj dXJzZXMgd2luZG93IG9wZW4sICovCisgICAgICAgIGRlYnVnKEYxMDAsIl5DIHRyYXAoKSBjdXJz ZXMiLCIiLDApOworICAgICAgICB4eHNjcmVlbihTQ1JfQ1csMCwwTCwiIik7CS8qIGNsb3NlIGl0 LiAqLworICAgICAgICBwcmludGYoIl5DLi4uIik7ICAgICAgICAgICAgICAgIC8qIEVjaG8gXkMg dG8gc3RhbmRhcmQgb3V0cHV0ICovCisgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBOT1hGRVIgKi8K KyAgICAgICAgcHJpbnRmKCJeQy4uLlxuIik7CisjaWZuZGVmIE5PWEZFUgorICAgIH0KKyNlbmRp ZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNpZmRlZiBkYXRhZ2VuZXJhbAorICAg IGNvbm5vaV9tdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtpbGwgYXN5bmNoIHRhc2sg dGhhdCBsaXN0ZW5zIHRvICovCisgICAgdHRpbW9mZigpOworICAgIGNvbnJlcygpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRoZSBrZXlib2FyZCAqLworI2VuZGlmIC8qIGRhdGFnZW5l cmFsICovCisKKyNpZm5kZWYgTk9DQ1RSQVAKKy8qICBUaGlzIGlzIHN0dXBpZCAtLSBldmVyeSB2 ZXJzaW9uIHNob3VsZCBoYXZlIHR0aW1vZmYoKS4uLiAgKi8KKyNpZmRlZiBVTklYCisgICAgdHRp bW9mZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGlu dGVycnVwdHMgKi8KKyNlbHNlCisjaWZkZWYgT1NLCisgICAgdHRpbW9mZigpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVHVybiBvZmYgYW55IHRpbWVyIGludGVycnVwdHMgKi8KKyNlbHNl CisjaWZkZWYgU1RSQVRVUworICAgIHR0aW1vZmYoKTsgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFR1cm4gb2ZmIGFueSB0aW1lciBpbnRlcnJ1cHRzICovCisjZWxzZQorI2lmZGVmIE9TMgor I2lmbmRlZiBOT1NFVEtFWQorICAgIG9zMmdrcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFR1cm4gYmFjayBvbiBrZXljb2RlIG1hcHBpbmcgICovCisjZW5kaWYgLyogTk9TRVRLRVkg Ki8KKyNpZm5kZWYgTk9MT0NBTAorICAgIGZvciAoaSA9IDA7IGkgPCBWTlVNOyBpKyspCisgICAg ICBWc2NyblJlc2V0UG9wdXAoaSk7CisjZW5kaWYgLyogTk9MT0NBTCAqLworI2lmZGVmIFRDUFNP Q0tFVAorI2lmZGVmIE5UCisgICAgLyogV1NBSXNCbG9ja2luZygpIHJldHVybnMgRkFMU0UgaW4g V2luOTUgZHVyaW5nIGEgYmxvY2tpbmcgYWNjZXB0IGNhbGwgKi8KKyAgICBpZiAoIFdTQVNhZmVU b0NhbmNlbCAvKiAmJiBXU0FJc0Jsb2NraW5nKCkgKi8gKSB7CisgICAgICAgIFdTQUNhbmNlbEJs b2NraW5nQ2FsbCgpOworICAgIH0KKyNlbmRpZiAvKiBOVCAqLworI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworI2lmZGVmIENLX05FVEJJT1MKKyAgICBOQ0JDYW5jZWxPdXRzdGFuZGluZygpOworI2Vu ZGlmIC8qIENLX05FVEJJT1MgKi8KKyAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBUdXJuIG9mZiBhbnkgdGltZXIgaW50ZXJydXB0cyAqLworI2Vsc2UKKyNpZmRlZiBW TVMKKyAgICB0dGltb2ZmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9mZiBh bnkgdGltZXIgaW50ZXJydXB0cyAqLworI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIFNUUkFUVVMgKi8KKyNlbmRpZiAvKiBPU0sgKi8KKyNlbmRpZiAvKiBVTklY ICovCisKKyNpZmRlZiBORVRQVFkKKyAgICAvKiBDbGVhbiB1cCBDdHJsLUMgb3V0IG9mIFJFRElS RUNUIG9yIGV4dGVybmFsIHByb3RvY29sICovCisgICAgeworCWV4dGVybiBQSURfVCBwdHlfZm9y a19waWQ7CisJZXh0ZXJuIGludCBwdHlfbWFzdGVyX2ZkLCBwdHlfc2xhdmVfZmQ7CisJaW50IHg7 CisKKwlzaWduYWwoU0lHQ0hMRCxTSUdfSUdOKTsJLyogV2UgZG9uJ3Qgd2FudCB0aGlzIGFueSBt b3JlICovCisKKwlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9tYXN0ZXJfZmQiLCIiLHB0eV9tYXN0ZXJf ZmQpOworCWlmIChwdHlfbWFzdGVyX2ZkID4gMikgeworCSAgICB4ID0gY2xvc2UocHR5X21hc3Rl cl9mZCk7CisJICAgIGRlYnVnKEYxMDEsInRyYXAgcHR5X21hc3Rlcl9mZCBjbG9zZSIsIiIseCk7 CisJfQorCXB0eV9tYXN0ZXJfZmQgPSAtMTsKKwlkZWJ1ZyhGMTAxLCJ0cmFwIHB0eV9zbGF2ZV9m ZCIsIiIscHR5X3NsYXZlX2ZkKTsKKwlpZiAocHR5X3NsYXZlX2ZkID4gMikgeworCSAgICB4ID0g Y2xvc2UocHR5X3NsYXZlX2ZkKTsKKwkgICAgZGVidWcoRjEwMSwidHJhcCBwdHlfc2xhdmVfZmQg Y2xvc2UiLCIiLHgpOworCX0KKwlwdHlfc2xhdmVfZmQgPSAtMTsKKwlkZWJ1ZyhGMTAxLCJ0cmFw IHB0eV9mb3JrX3BpZCIsIiIscHR5X2ZvcmtfcGlkKTsKKwlpZiAocHR5X2ZvcmtfcGlkID4gMCkg eworCSAgICB4ID0ga2lsbChwdHlfZm9ya19waWQsMCk7CS8qIFNlZSBpZiB0aGUgZm9yayBpcyBy ZWFsbHkgdGhlcmUgKi8KKwkgICAgZGVidWcoRjExMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCAw IGVycm5vIixja2l0b2EoeCksZXJybm8pOworCSAgICBpZiAoeCA9PSAwKSB7CQkvKiBTZWVtcyB0 byBiZSBhY3RpdmUgKi8KKwkJeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0hVUCk7IC8qIEFzayBp dCB0byBjbGVhbiB1cCAmIGV4aXQgKi8KKwkJZGVidWcoRjEwMSwidHJhcCBwdHlfZm9ya19waWQg a2lsbCBTSUdIVVAiLCIiLHgpOworCQltc2xlZXAoMTAwKTsKKwkJZXJybm8gPSAwOworCQl4ID0g a2lsbChwdHlfZm9ya19waWQsMCk7IC8qIElzIGl0IHN0aWxsIHRoZXJlPyAqLworCQlpZiAoeCA9 PSAwCisjaWZkZWYgRVNSQ0gKKwkJICAgIC8qIFRoaXMgbW9kdWxlIGlzIG5vdCBhbHdheXMgZXhw b3NlZCB0byA8ZXJybm8uaD4gKi8KKwkJICAgIHx8IGVycm5vICE9IEVTUkNICisjZW5kaWYJLyog RVNSQ0ggKi8KKwkJICAgICkgeworCQkgICAgeCA9IGtpbGwocHR5X2ZvcmtfcGlkLFNJR0tJTEwp OworCQkgICAgZGVidWcoRjEwMSwidHJhcCBwdHlfZm9ya19waWQga2lsbCBTSUdLSUxMIiwiIix4 KTsKKwkJfQorCSAgICB9CisJICAgIHB0eV9mb3JrX3BpZCA9IC0xOworCX0KKyAgICB9CisjZW5k aWYJLyogTkVUUFRZICovCisKKyNpZmRlZiBPU0sKKyAgICBzaWdtYXNrKC0xKTsKKy8qCisgIFdl IGFyZSBpbiBhbiBpbnRlcmNlcHQgcm91dGluZSBidXQgZG8gbm90IHBlcmZvcm0gYSBGJFJURSAo ZG9uZSBpbXBsaWNpdGx5CisgIGJ5IHJ0cykuICBXZSBoYXZlIHRvIGRlY3JlbWVudCB0aGUgc2ln bWFzayBhcyBGJFJURSBkb2VzLiAgV2FybmluZzogbG9uZ2p1bXAKKyAgb25seSByZXN0b3JlcyB0 aGUgY3B1IHJlZ2lzdGVycywgTk9UIHRoZSBmcHUgcmVnaXN0ZXJzLiAgU28gZG9uJ3QgdXNlIGZw dSBhdAorICBhbGwgb3IgYXQgbGVhc3QgZG9uJ3QgdXNlIGNvbW1vbiBmcHUgKGRvdWJsZSBvciBm bG9hdCkgcmVnaXN0ZXIgdmFyaWFibGVzLgorKi8KKyNlbmRpZiAvKiBPU0sgKi8KKworI2lmZGVm IE5UU0lHCisgICAgUG9zdEN0cmxDU2VtKCk7CisjZWxzZSAvKiBOVFNJRyAqLworICAgIGRlYnVn KEYxMDAsInRyYXAgYWJvdXQgdG8gbG9uZ2ptcCIsIiIsMCk7CisjaWZkZWYgTlQKKyAgICBja2xv bmdqbXAoY2tqYWRkcihjbWpidWYpLDEpOworI2Vsc2UgLyogTlQgKi8KKyAgICBja2xvbmdqbXAo Y21qYnVmLDEpOworI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogTlRTSUcgKi8KKyNlbHNlIC8q IE5PQ0NUUkFQICovCisvKiBObyBDdHJsLUMgdHJhcCwganVzdCBleGl0LiAqLworI2lmZGVmIENL X0NVUlNFUyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1cnNlcyBzdXBwb3J0PyAqLworICAg IHh4c2NyZWVuKFNDUl9DVywwLDBMLCIiKTsgICAgICAgICAgIC8qIENsb3NlIGN1cnNlcyB3aW5k b3cgKi8KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyAgICBkb2V4aXQoQkFEX0VYSVQsd2hhdCk7 ICAgICAgICAgICAgICAvKiBFeGl0IHBvb3JseSAqLworI2VuZGlmIC8qIE5PQ0NUUkFQICovCisg ICAgU0lHUkVUVVJOOworfQorCisKKy8qICBDIEsgXyBUIEkgTSBFICAtLSBSZXR1cm5zIHBvaW50 ZXIgdG8gY3VycmVudCB0aW1lLiAqLworCitjaGFyICoKK2NrX3RpbWUoKSB7CisgICAgc3RhdGlj IGNoYXIgdGJ1ZlsxMF07CisgICAgY2hhciAqcDsKKyAgICBpbnQgeDsKKworICAgIHp0aW1lKCZw KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJUaHUgRmViICA4IDEyOjAwOjAwIDE5OTAi ICovCisgICAgaWYgKCFwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGlrZSBhc2N0 aW1lKCkhICovCisgICAgICByZXR1cm4oIiIpOworICAgIGlmICgqcCkgeworICAgICAgICBmb3Ig KHggPSAxMTsgeCA8IDE5OyB4KyspICAgICAgIC8qIGNvcHkgaGg6bW06c3MgKi8KKyAgICAgICAg ICB0YnVmW3ggLSAxMV0gPSBwW3hdOyAgICAgICAgICAvKiB0byB0YnVmICovCisgICAgICAgIHRi dWZbOF0gPSBOVUw7ICAgICAgICAgICAgICAgICAgLyogdGVybWluYXRlICovCisgICAgfQorICAg IHJldHVybih0YnVmKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXR1cm4gaXQgKi8K K30KKworLyogIEMgQyBfIEMgTCBFIEEgTiAgLS0gIENsZWFudXAgYWZ0ZXIgdGVybWluYWwgaW50 ZXJydXB0IGhhbmRsZXIgKi8KKworI2lmZGVmIEdFTURPUworaW50CitjY19jbGVhbigpIHsKKyAg ICB6Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHRyYW5z ZmVycmluZyBhIGZpbGUsICovCisgICAgemNsb3NlKFpPRklMRSk7ICAgICAgICAgICAgICAgICAg ICAgLyogY2xvc2UgaXQuICovCisgICAgcHJpbnRmKCJeQy4uLlxuIik7ICAgICAgICAgICAgICAg ICAgLyogTm90IFZNUywgbm8gcHJvYmxlbS4uLiAqLworfQorI2VuZGlmIC8qIEdFTURPUyAqLwor CisKKy8qICBTIFQgUCBUIFIgQSBQIC0tIEhhbmRsZSBTSUdUU1RQIChzdXNwZW5kKSBzaWduYWxz ICovCisKK1NJR1RZUAorI2lmZGVmIENLX0FOU0lDCitzdHB0cmFwKGludCBzaWcpCisjZWxzZQor c3RwdHJhcChzaWcpIGludCBzaWc7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHN0cHRyYXAg Ki8geworCisjaWZuZGVmIE5PSkMKKyAgICBpbnQgeDsgZXh0ZXJuIGludCBjbWZsZ3M7CisgICAg ZGVidWcoRjEwMSwic3RwdHJhcCgpIGNhdWdodCBzaWduYWwiLCIiLHNpZyk7CisgICAgaWYgKCF4 c3VzcGVuZCkgeworICAgICAgICBwcmludGYoIlxyXG5zdXNwZW5kIGRpc2FibGVkXHJcbiIpOwor I2lmbmRlZiBOT0lDUAorICAgICAgICBpZiAod2hhdCAmIFdfQ09NTUFORCkgewkJLyogSWYgd2Ug d2VyZSBwYXJzaW5nIGNvbW1hbmRzICovCisgICAgICAgICAgICBwcm9tcHQoeHhzdHJpbmcpOyAg ICAgICAgICAgLyogcmVpc3N1ZSB0aGUgcHJvbXB0IGFuZCBwYXJ0aWFsICovCisgICAgICAgICAg ICBpZiAoIWNtZmxncykgICAgICAgICAgICAgICAgLyogY29tbWFuZCAoaWYgYW55KSAqLworICAg ICAgICAgICAgICBwcmludGYoIiVzIixjbWRidWYpOworICAgICAgICB9CisjZW5kaWYgLyogTk9J Q1AgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAg ICAgIC8qIFJlc2V0IHRoZSBjb25zb2xlICovCisjaWZuZGVmIE9TMgorICAgICAgICAvKiBGbHVz aCBwZW5kaW5nIG91dHB1dCBmaXJzdCwgaW4gY2FzZSB3ZSBhcmUgY29udGludWVkICovCisgICAg ICAgIC8qIGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBjb3VsZCBtYWtlIHVzIGJsb2NrICovCisg ICAgICAgIGZmbHVzaChzdGRvdXQpOworCisgICAgICAgIHggPSBwc3VzcGVuZCh4c3VzcGVuZCk7 CQkvKiBUcnkgdG8gc3VzcGVuZC4gKi8KKyAgICAgICAgaWYgKHggPCAwKQorI2VuZGlmIC8qIE9T MiAqLworICAgICAgICAgIHByaW50ZigiSm9iIGNvbnRyb2wgbm90IHN1cHBvcnRlZFxyXG4iKTsK KyAgICAgICAgY29uaW50KHRyYXAsc3RwdHJhcCk7ICAgICAgICAgICAvKiBSZWFybSB0aGUgdHJh cC4gKi8KKyAgICAgICAgZGVidWcoRjEwMCwic3RwdHJhcCBiYWNrIGZyb20gc3VzcGVuZCIsIiIs MCk7CisgICAgICAgIHN3aXRjaCAod2hhdCkgeworICAgICAgICAgIGNhc2UgV19DT05ORUNUOiAg ICAgICAgICAgICAgIC8qIElmIHN1c3BlbmRlZCBkdXJpbmcgQ09OTkVDVD8gKi8KKyAgICAgICAg ICAgIGNvbmJpbigoY2hhcillc2NhcGUpOyAgICAgICAvKiBwdXQgY29uc29sZSBiYWNrIGluIGJp bmFyeSBtb2RlICovCisgICAgICAgICAgICBkZWJ1ZyhGMTAwLCJzdHB0cmFwIFdfQ09OTkVDVCIs IiIsMCk7CisgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgICBjYXNl IFdfQ09NTUFORDogICAgICAgICAgICAgICAvKiBTdXNwZW5kZWQgaW4gY29tbWFuZCBtb2RlICov CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzdHB0cmFwIFdfQ09NTUFORCBwZmxhZyIsIiIscGZs YWcpOworICAgICAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgIC8qIFB1dCBiYWNr IENCUkVBSyB0dHkgbW9kZSAqLworICAgICAgICAgICAgaWYgKHBmbGFnKSB7ICAgICAgICAgICAg ICAgIC8qIElmIGNvbW1hbmQgcGFyc2luZyB3YXMgKi8KKyAgICAgICAgICAgICAgICBwcm9tcHQo eHhzdHJpbmcpOyAgICAgICAvKiByZWlzc3VlIHRoZSBwcm9tcHQgYW5kIHBhcnRpYWwgKi8KKyAg ICAgICAgICAgICAgICBpZiAoIWNtZmxncykgICAgICAgICAgICAvKiBjb21tYW5kIChpZiBhbnkp ICovCisgICAgICAgICAgICAgICAgICBwcmludGYoIiVzIixjbWRidWYpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICBkZWZh dWx0OiAgICAgICAgICAgICAgICAgICAgICAvKiBBbGwgb3RoZXIgY2FzZXMuLi4gKi8KKyAgICAg ICAgICAgIGRlYnVnKEYxMDAsInN0cHRyYXAgZGVmYXVsdCIsIiIsMCk7CisgICAgICAgICAgICBj b25jYigoY2hhcillc2NhcGUpOyAgICAgICAgLyogUHV0IGl0IGJhY2sgaW4gQ0JSRUFLIG1vZGUg Ki8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PSkMg Ki8KKyAgICBTSUdSRVRVUk47Cit9CisKKyNpZmRlZiBUTE9HCisjZGVmaW5lIFRCVUZMIDMwMAor CisvKiAgVCBMIE8gRyAgLS0gIExvZyBhIHJlY29yZCBpbiB0aGUgdHJhbnNhY3Rpb24gZmlsZSAg Ki8KKy8qCisgQ2FsbCB3aXRoIGEgZm9ybWF0IGFuZCAzIGFyZ3VtZW50czogdHdvIHN0cmluZ3Mg YW5kIGEgbnVtYmVyOgorICAgZiAgICAgLSBGb3JtYXQsIGEgYml0IHN0cmluZyBpbiByYW5nZSAw LTcsIGJpdCB4IGlzIG9uLCBhcmcgI3ggaXMgcHJpbnRlZC4KKyAgIHMxLHMyIC0gU3RyaW5nIGFy Z3VtZW50cyAwIGFuZCAxLgorICAgbiAgICAgLSBMb25nLCBhcmd1bWVudCAyLgorKi8KK1ZPSUQK KyNpZmRlZiBDS19BTlNJQworZG90bG9nKGludCBmLCBjaGFyICpzMSwgY2hhciAqczIsIENLX09G Rl9UIG4pCisjZWxzZQorZG90bG9nKGYsczEsczIsbikgaW50IGY7IENLX09GRl9UIG47IGNoYXIg KnMxLCAqczI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvdGxvZyAqLyB7CisgICAgc3Rh dGljIGNoYXIgc1tUQlVGTF07CisgICAgZXh0ZXJuIGludCB0bG9nZm10OworICAgIGNoYXIgKnNw ID0gczsgaW50IHg7CisgICAgaWYgKCFzMSkgczEgPSAiIjsKKyAgICBpZiAoIXMyKSBzMiA9ICIi OworCisgICAgaWYgKCF0cmFsb2cpIHJldHVybjsgICAgICAgICAgICAgICAgLyogSWYgbm8gdHJh bnNhY3Rpb24gbG9nLCBkb24ndCAqLworICAgIGlmICh0bG9nZm10ICE9IDEpIHJldHVybjsKKyAg ICBzd2l0Y2ggKGYpIHsKKyAgICAgIGNhc2UgRjAwMDogICAgICAgICAgICAgICAgICAgICAgICAv KiAwIChzcGVjaWFsKSAiczEgbiBzMiIgICovCisgICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkg KyAoaW50KXN0cmxlbihzMikgKyAxNSA+IFRCVUZMKQorICAgICAgICAgIHNwcmludGYoc3AsIj9U LUxvZyBzdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgZWxzZQorCSAgc3ByaW50ZihzcCwiJXMg JXMgJXMiLHMxLGNrZnN0b2EobiksczIpOworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8 IDApIHRyYWxvZyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBGMDAxOiAgICAgICAg ICAgICAgICAgICAgICAgIC8qIDEsICIgbiIgKi8KKyAgICAgICAgc3ByaW50ZihzcCwiICVzIixj a2ZzdG9hKG4pKTsKKyAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAw OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjAxMDogICAgICAgICAgICAgICAgICAgICAg ICAvKiAyLCAiW3MyXSIgKi8KKyAgICAgICAgeCA9IChpbnQpc3RybGVuKHMyKTsKKyAgICAgICAg aWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKKyAgICAgICAgaWYgKHggKyA2ID4gVEJV RkwpCisgICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28gbG9uZyIpOworICAgICAgICBl bHNlIHNwcmludGYoc3AsIlslc10iLHMyKTsKKyAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUsIiIp IDwgMCkgdHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYwMTE6ICAgICAg ICAgICAgICAgICAgICAgICAgLyogMywgIltzMl0gbiIgKi8KKyAgICAgICAgeCA9IChpbnQpc3Ry bGVuKHMyKTsKKyAgICAgICAgaWYgKHMyW3hdID09ICdcbicpIHMyW3hdID0gJ1wwJzsKKyAgICAg ICAgaWYgKHggKyA2ID4gVEJVRkwpCisgICAgICAgICAgc3ByaW50ZihzcCwiP1N0cmluZyB0b28g bG9uZyIpOworICAgICAgICBlbHNlIHNwcmludGYoc3AsIlslc10gJXMiLHMyLGNrZnN0b2Eobikp OworICAgICAgICBpZiAoenNvdXRsKFpURklMRSxzKSA8IDApIHRyYWxvZyA9IDA7CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSBGMTAwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQsICJz MSIgKi8KKyAgICAgICAgaWYgKHpzb3V0bChaVEZJTEUsczEpIDwgMCkgdHJhbG9nID0gMDsKKyAg ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEYxMDE6ICAgICAgICAgICAgICAgICAgICAgICAgLyog NSwgInMxOiBuIiAqLworICAgICAgICBpZiAoKGludClzdHJsZW4oczEpICsgMTUgPiBUQlVGTCkK KyAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgIGVsc2Ug c3ByaW50ZihzcCwiJXM6ICVzIixzMSxja2ZzdG9hKG4pKTsKKyAgICAgICAgaWYgKHpzb3V0bCha VEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjEx MDogICAgICAgICAgICAgICAgICAgICAgICAvKiA2LCAiczEgczIiICovCisgICAgICAgIHggPSAo aW50KXN0cmxlbihzMik7CisgICAgICAgIGlmIChzMlt4XSA9PSAnXG4nKSBzMlt4XSA9ICdcMCc7 CisgICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyB4ICsgNCA+IFRCVUZMKQorICAgICAgICAg IHNwcmludGYoc3AsIj9TdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgZWxzZQorCSAgc3ByaW50 ZihzcCwiJXMlcyVzIixzMSwoKCpzMiA9PSAnOicpID8gIiIgOiAiICIpLHMyKTsKKyAgICAgICAg aWYgKHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOworICAgICAgICBicmVhazsKKyAg ICAgIGNhc2UgRjExMTogICAgICAgICAgICAgICAgICAgICAgICAvKiA3LCAiczEgczI6IG4iICov CisgICAgICAgIHggPSAoaW50KXN0cmxlbihzMik7CisgICAgICAgIGlmIChzMlt4XSA9PSAnXG4n KSBzMlt4XSA9ICdcMCc7CisgICAgICAgIGlmICgoaW50KXN0cmxlbihzMSkgKyB4ICsgMTUgPiBU QlVGTCkKKyAgICAgICAgICBzcHJpbnRmKHNwLCI/U3RyaW5nIHRvbyBsb25nIik7CisgICAgICAg IGVsc2UKKwkgIHNwcmludGYoc3AsIiVzJXMlczogJXMiLHMxLCgoKnMyID09ICc6JykgPyAiIiA6 ICIgIiksczIsY2tmc3RvYShuKSk7CisgICAgICAgIGlmICh6c291dGwoWlRGSUxFLHMpIDwgMCkg dHJhbG9nID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBzcHJp bnRmKHNwLCI/SW52YWxpZCBmb3JtYXQgZm9yIHRsb2coKSAtICVkIixmKTsKKyAgICAgICAgaWYg KHpzb3V0bChaVEZJTEUscykgPCAwKSB0cmFsb2cgPSAwOworICAgIH0KK30KKworLyoKKyAgRCBP IFggTCBPIEcKKworICBUaGlzIGlzIHRoZSB0cmFuc2FjdGlvbi1sb2cgd3JpdGVyIGZvciBCUklF RiBmb3JtYXQuCisgIFRoZSBpZGVhIGlzIHByb2R1Y2Ugb25lIHJlY29yZCAobGluZSkgcGVyIGZp bGUuICBFYWNoIHJlY29yZAorICBoYXMgdGhlIGZvbGxvd2luZyBkZWxpbWl0ZWQgZmllbGRzOgor ICAgIERhdGUgKHl5eXltbWRkKQorICAgIFRpbWUgKGhoOm1tOnNzKQorICAgIEFjdGlvbjogU0VO RCBvciBSRUNWCisgICAgRmlsZSBuYW1lCisgICAgRmlsZSBzaXplCisgICAgVHJhbnNmZXIgbW9k ZSAodGV4dCwgYmluYXJ5LCBpbWFnZSwgbGFiZWxlZCwgZXRjKS4KKyAgICBTdGF0dXM6IE9LIG9y IEZBSUxFRAorICAgIEZyZWUtZm9ybSBjb21tZW50cyBpbiBkb3VibGVxdW90ZXMKKyAgVGhlIGRl ZmF1bHQgc2VwYXJhdG9yIGlzIGNvbW1hLgorICBJZiBhIGZpZWxkIGNvbnRhaW5zIHRoZSBzZXBh cmF0b3IsIGl0IGlzIGVuY2xvc2VkIGluIGRvdWJsZXF1b3Rlcy4KKyovCitWT0lECisjaWZkZWYg Q0tfQU5TSUMKK2RveGxvZyhpbnQgeCwgY2hhciAqIGZuLCBDS19PRkZfVCBmcywgaW50IGZtLCBp bnQgc3RhdHVzLCBjaGFyICogbXNnKQorI2Vsc2UKK2RveGxvZyh4LCBmbiwgZnMsIGZtLCBzdGF0 dXMsIG1zZykKKyAgICBpbnQgeDsgY2hhciAqIGZuOyBDS19PRkZfVCBmczsgaW50IGZtOyBpbnQg c3RhdHVzOyBjaGFyICogbXNnOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb3hsb2cgKi8g eworICAgIGV4dGVybiBpbnQgdGxvZ3NlcDsKKyAgICBjaGFyIHNlcFsyXTsKKyAgICBjaGFyIGJ1 ZltDS01BWFBBVEgrMjU2XSwgKiBidWZwOworICAgIGNoYXIgdG1wYnVmWzMyXTsKKyAgICBjaGFy ICogcywgKiBwOworICAgIGludCBsZW4sIGxlZnQsIGZ0cCA9IDAsIGs7CisKKyAgICBpZiAoIXRy YWxvZykgcmV0dXJuOyAgICAgICAgICAgICAgICAvKiBJZiBubyB0cmFuc2FjdGlvbiBsb2csIGRv bid0ICovCisKKyAgICBpZiAoIWZuKSBmbiA9ICIiOyAgICAgICAgICAgICAgICAgICAvKiBQcm90 ZWN0IGFnYWluc3QgbnVsbCBwb2ludGVycyAqLworICAgIGlmICghbXNnKSBtc2cgPSAiIjsKKyAg ICBpZiAoeCAmIFdfRlRQKQorICAgICAgZnRwKys7CisKKyAgICBzZXBbMF0gPSAoY2hhcikgdGxv Z3NlcDsKKyAgICBzZXBbMV0gPSBOVUw7CisgICAgaWYgKCFzZXBbMF0pIHNlcFswXSA9ICcsJzsK KworICAgIGJ1ZnAgPSBidWY7CisgICAgbGVmdCA9IHNpemVvZihidWYpOworICAgIGRlYnVnKEYx MDEsIlhYWCBkb3hsb2cgbGVmdCAxIiwiIixsZWZ0KTsKKworICAgIHAgPSB6em5kYXRlKCk7ICAg ICAgICAgICAgICAgICAgICAgIC8qIERhdGUgKi8KKyAgICBja21ha21zZyhidWYsIGxlZnQsIHAg PyBwIDogIjAwMDAwMDAwIiwgc2VwLCBOVUxMLCBOVUxMKTsKKyAgICBidWZwICs9IDk7CisgICAg bGVmdCAtPSA5OworICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVmdCAyIixidWYsbGVmdCk7 CisKKyAgICB6dGltZSgmcCk7CisgICAgY2tzdHJuY3B5KGJ1ZnAscCsxMSxsZWZ0KTsKKyAgICBi dWZwICs9IDg7CisgICAgbGVmdCAtPSA4OworICAgIGRlYnVnKEYxMTEsIlhYWCBkb3hsb2cgbGVm dCAzIixidWYsbGVmdCk7CisKKyAgICBpZiAoZnRwKSB7CisJaWYgKCEoeCAmIChXX1NFTkR8V19S RUNWKSkpCisJICByZXR1cm47CisJcyA9ICAoeCAmIFdfU0VORCkgPyAiUFVUIiA6ICJHRVQiOwor CWsgPSAzOworICAgIH0gZWxzZSB7CisJcyA9ICAoeCAmIFdfU0VORCkgPyAiU0VORCIgOiAiUkVD ViI7CisJayA9IDQ7CisgICAgfQorICAgIGNrbWFrbXNnKGJ1ZnAsbGVmdCxzZXAscyxzZXAsTlVM TCk7CisgICAgYnVmcCArPSBrICsgMjsKKyAgICBsZWZ0IC09IChrICsgMik7CisgICAgZGVidWco RjExMSwiWFhYIGRveGxvZyBsZWZ0IDQiLGJ1ZixsZWZ0KTsKKworICAgIHMgPSAiIjsKKyAgICBp ZiAoY2tzdHJjaHIoZm4sc2VwWzBdKSkJCS8qIEZpbGVuYW1lICovCisgICAgICBzID0gIlwiIjsK KyAgICBja21ha21zZyhidWZwLGxlZnQscyxmbixzLHNlcCk7CisgICAgc3ByaW50Zih0bXBidWYs IiVzIixja2ZzdG9hKGZzKSk7CS8qIFNpemUgKi8KKyAgICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixD S01BWFBBVEgpOworICAgIGNrc3RybmNhdChidWYsc2VwLENLTUFYUEFUSCk7CisgICAgZGVidWco RjExMCwiZG94bG9nIDQiLGJ1ZiwwKTsKKworI2lmZGVmIE5PSUNQCisgICAgLyogVHJhbnNmZXIg bW9kZSAqLworICAgIGNrc3RybmNweSh0bXBidWYsIChiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0 IiksIFRNUEJVRlNJWik7CisjZWxzZQorICAgIGNrc3RybmNweSh0bXBidWYsZ2Ztb2RlKGZtLDAp LFRNUEJVRlNJWik7CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICBpZiAoY2tzdHJjaHIodG1wYnVm LHNlcFswXSkpIHsgICAgICAvKiBNaWdodCBjb250YWluIHNwYWNlcyAqLworICAgICAgICBja3N0 cm5jYXQoYnVmLCJcIiIsQ0tNQVhQQVRIKTsKKyAgICAgICAgY2tzdHJuY2F0KGJ1Zix0bXBidWYs Q0tNQVhQQVRIKTsKKyAgICAgICAgY2tzdHJuY2F0KGJ1ZiwiXCIiLENLTUFYUEFUSCk7CisgICAg fSBlbHNlCisgICAgICBja3N0cm5jYXQoYnVmLHRtcGJ1ZixDS01BWFBBVEgpOworICAgIGNrc3Ry bmNhdChidWYsc2VwLENLTUFYUEFUSCk7CisgICAgZGVidWcoRjExMCwiZG94bG9nIDUiLGJ1Ziww KTsKKworICAgIGNrc3RybmNhdChidWYsIHN0YXR1cyA/ICJGQUlMRUQiIDogIk9LIixDS01BWFBB VEgpOworICAgIGxlbiA9IHN0cmxlbihidWYpOworICAgIGxlZnQgPSBDS01BWFBBVEgrMjU2IC0g bGVuOworICAgIGlmIChsZWZ0IDwgMikgZmF0YWwoImRveGxvZyBidWZmZXIgb3ZlcmxvdyIpOwor CisgICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0IDUiLGJ1ZixsZWZ0KTsKKworICAgIGRl YnVnKEYxMTAsImRveGxvZyBidWYgMSIsIGJ1ZiwgbGVuKTsKKyAgICBzID0gYnVmICsgbGVuOwor ICAgIGlmIChzdGF0dXMgPT0gMCAmJiBsZWZ0ID4gMzIpIHsKKyAgICAgICAgbG9uZyBjcHMgPSAw TDsKKyNpZmRlZiBHRlRJTUVSCisJZGVidWcoRjEwMSwiRE9YTE9HIGZweGZzZWNzIiwiIiwobG9u ZykoZnB4ZnNlY3MgKiAxMDAwKSk7CisgICAgICAgIGlmIChmcHhmc2VjcykgY3BzID0gKGxvbmcp KChDS0ZMT0FUKSBmcyAvIGZweGZzZWNzKTsKKyAgICAgICAgc3ByaW50ZihzLCIlc1wiJTAuM2Zz ZWMgJWxkY3BzXCIiLHNlcCxmcHhmc2VjcyxjcHMpOworI2Vsc2UKKyAgICAgICAgaWYgKHhmc2Vj cykgY3BzID0gZnMgLyB4ZnNlY3M7CisgICAgICAgIHNwcmludGYocywiJXNcIiVsZHNlYyAlbGRj cHNcIiIsc2VwLHhmc2VjcyxjcHMpOworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICB9IGVsc2Ug aWYgKChpbnQpc3RybGVuKG1zZykgKyA0IDwgbGVmdCkgeworICAgICAgICBzcHJpbnRmKHMsIiVz XCIlc1wiIixzZXAsbXNnKTsKKyAgICB9CisgICAgZGVidWcoRjExMSwiWFhYIGRveGxvZyBsZWZ0 IDUiLGJ1ZixsZWZ0KTsKKworICAgIGRlYnVnKEYxMTAsImRveGxvZyA1IixidWYsMCk7CisgICAg eCA9IHpzb3V0bChaVEZJTEUsYnVmKTsKKyAgICBkZWJ1ZyhGMTAxLCJkb3hsb2cgenNvdXRsIiwi Iix4KTsKKyAgICBpZiAoeCA8IDApIHRyYWxvZyA9IDA7Cit9CisjZW5kaWYgLyogVExPRyAqLwor CisjaWZuZGVmIE1BQworLyoKKyAgVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlzIGZvciBhbGwgaW1w bGVtZW50YXRpb25zIGJ1dCB0aGUgTWFjaW50b3NoLgorKi8KKworI2lmZGVmIENLX0NVUlNFUwor c3RhdGljIGludCByZXBhaW50ID0gMDsgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGRpc3Bs YXkgbmVlZHMgcmVwYWludGluZyAqLworI2VuZGlmIC8qIENLX0NVUlNFUyAqLworCisjaWZuZGVm IE5PWEZFUgorLyogIEMgSCBLIEkgTiBUICAtLSAgQ2hlY2sgZm9yIGNvbnNvbGUgaW50ZXJydXB0 cyAgKi8KKworLyoKKyAgVXNlZCBkdXJpbmcgZmlsZSB0cmFuc2ZlciBpbiBsb2NhbCBtb2RlIG9u bHk6CisgIC4gSWYgdXNlciBoYXMgbm90IHRvdWNoZWQgdGhlIGtleWJvYXJkLCByZXR1cm5zIDAg d2l0aCBubyBzaWRlIGVmZmVjdHMuCisgIC4gSWYgdXNlciB0eXBlZCBTIG9yIEEgKGV0Yywgc2Vl IGJlbG93KSBwcmludHMgc3RhdHVzIG1lc3NhZ2UgYW5kIHJldHVybnMgMC4KKyAgLiBJZiB1c2Vy IHR5cGVkIFggb3IgRiAoZXRjLCBzZWUgYmVsb3cpIHJldHVybnMgMCB3aXRoIGN4c2VlbiBzZXQg dG8gMS4KKyAgLiBJZiB1c2VyIHR5cGVkIFogb3IgQiAoZXRjLCBzZWUgYmVsb3cpIHJldHVybnMg MCB3aXRoIGN6c2VlbiBzZXQgdG8gMS4KKyAgLiBJZiB1c2VyIHR5cGVkIEUgb3IgQyAoZXRjLCBz ZWUgYmVsb3cpIHJldHVybnMgLTEuCisqLworaW50CitjaGtpbnQoKSB7CisgICAgaW50IGNoLCBj biwgb2ZkOyBsb25nIHp6OworICAgIGlmICgheGZyaW50KQorICAgICAgcmV0dXJuKDApOworICAg IGlmICgoIWxvY2FsKSB8fCAocXVpZXQpKSByZXR1cm4oMCk7IC8qIE9ubHkgZG8gdGhpcyBpZiBs b2NhbCAmIG5vdCBxdWlldCAqLworI2lmZGVmIGRhdGFnZW5lcmFsCisgICAgaWYgKGNvbl9yZWFk c19tdCkgICAgICAgICAgICAgICAgICAgLyogaWYgY29uaW50X210IHRhc2sgaXMgYWN0aXZlICov CisgICAgICBpZiAoY29uaW50X2F2bCkgeyAgICAgICAgICAgICAgICAgLyogYW5kIHRoZXJlJ3Mg YW4gaW50ZXJydXB0IHBlbmRpbmcgKi8KKyAgICAgICAgICBjbiA9IDE7ICAgICAgICAgICAgICAg ICAgICAgICAvKiBwcm9jZXNzIGl0ICovCisgICAgICAgICAgY2ggPSBjb25pbnRfY2g7CisgICAg ICAgICAgY29uaW50X2F2bCA9IDA7ICAgICAgICAgICAgICAgLyogdHVybiBvZmYgZmxhZyBzbyBj b25pbnRfbXQgY2FuICovCisgICAgICB9IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogcHJvY2VlZCAqLworICAgICAgICByZXR1cm4oMCk7CisgICAgZWxzZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogaWYgY29uaW50X210IG5vdCBhY3RpdmUgKi8KKyAgICAgIGlm ICgoY2ggPSBjb25pbmMoMikpIDwgMCkgICAgICAgICAvKiB0cnkgdG8gZ2V0IGNoYXIgbWFudWFs bHkgKi8KKyAgICAgICAgcmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgICAvKiBJL08gZXJy b3IsIG9yIG5vIGRhdGEgKi8KKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBpZiBzdWNjZXNzZnVsLCBzZXQgY24gc28gd2UgKi8KKyAgICAgICAgY24gPSAxOyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBrbm93IHdlIGdvdCBvbmUgKi8KKyAgICBkZWJ1ZyhGMTAx LCJjaGtpbnQgZ290IGtleWJvYXJkIGNoYXJhY3RlciIsY2gsY24pOworI2Vsc2UgLyogIWRhdGFn ZW5lcmFsICovCisjaWZkZWYgTlRTSUcKKyAgICB7CisgICAgICAgIGV4dGVybiBpbnQgVGxzSW5k ZXg7CisgICAgICAgIHN0cnVjdCBfdGhyZWFkaW5mbyAqIHRocmVhZGluZm87CisgICAgICAgIHRo cmVhZGluZm8gPSAoc3RydWN0IF90aHJlYWRpbmZvICopIFRsc0dldFZhbHVlKFRsc0luZGV4KTsK KyAgICAgICAgaWYgKHRocmVhZGluZm8pIHsKKyAgICAgICAgICAgIGlmICghV2FpdFNlbSh0aHJl YWRpbmZvLT5EaWVTZW0sMCkpCisgICAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAg ICAgLyogQ2FuY2VsIEltbWVkaWF0ZWx5ICovCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyog TlRTSUcgKi8KKyAgICBjbiA9IGNvbmNoaygpOyAgICAgICAgICAgICAgICAgICAgICAvKiBBbnkg aW5wdXQgd2FpdGluZz8gKi8KKyAgICBkZWJ1ZyhGMTAxLCJjb25jaGsiLCIiLGNuKTsKKyAgICBp ZiAoY24gPCAxKSByZXR1cm4oMCk7CisgICAgY2ggPSBjb25pbmMoNSkgOworICAgIGRlYnVnKEYx MDEsImNvbmluYyIsIiIsY2gpOworICAgIGlmIChjaCA8IDApIHJldHVybigwKTsKKyNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLworCisgICAgY2ggJj0gMDE3NzsKKyAgICBzd2l0Y2ggKGNoKSB7Cisg ICAgICBjYXNlICdBJzogY2FzZSAnYSc6IGNhc2UgMDAwMTogICAgLyogU3RhdHVzIHJlcG9ydCAq LworICAgICAgY2FzZSAnUyc6IGNhc2UgJ3MnOgorICAgICAgICBpZiAoZmRpc3BsYSAhPSBYWUZE X1IgJiYgZmRpc3BsYSAhPSBYWUZEX1MgJiYgZmRpc3BsYSAhPSBYWUZEX04pCisgICAgICAgICAg cmV0dXJuKDApOyAgICAgICAgICAgICAgICAgICAgLyogT25seSBmb3Igc2VyaWFsLCBzaW1wbGUg b3Igbm9uZSAqLworICAgICAgICBvZmQgPSBmZGlzcGxhOyAgICAgICAgICAgICAgICAgIC8qIFtN Rl0gU2F2ZSBmaWxlIGRpc3BsYXkgdHlwZSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZE X04pCisgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUjsgICAgICAgICAgICAgLyogW01GXSBQcmV0 ZW5kIHNlcmlhbCBpZiBubyBkaXNwbGF5ICovCisgICAgICAgIHh4c2NyZWVuKFNDUl9UTiwwLDBs LCJTdGF0dXMgcmVwb3J0OiIpOworICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCwiIGZpbGUg dHlwZTogIik7CisgICAgICAgIGlmIChiaW5hcnkpIHsKKyAgICAgICAgICAgIHN3aXRjaChiaW5h cnkpIHsKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0w6IHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJs YWJlbGVkIik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFhZRlRfSTogeHhzY3JlZW4oU0NS X1RaLDAsMGwsImltYWdlIik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFhZRlRfVTogeHhz Y3JlZW4oU0NSX1RaLDAsMGwsImJpbmFyeSB1bmRlZmluZWQiKTsgYnJlYWs7CisgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGNhc2UgWFlGVF9COiB4eHNjcmVlbihTQ1JfVFos MCwwbCwiYmluYXJ5Iik7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor I2lmZGVmIE5PQ1NFVFMKKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJ0ZXh0Iik7 CisjZWxzZQorICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsInRleHQsICIpOworICAg ICAgICAgICAgaWYgKHRjaGFyc2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgeworICAg ICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLCJ0cmFuc3BhcmVudCIpOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkgeworICAg ICAgICAgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVFosMCwwbCx0Y3NpbmZvW3RjaGFyc2V0XS5r ZXl3b3JkKTsKKyAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RVLDAsMGwsIiA9PiAi KTsKKyAgICAgICAgICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsZmNzaW5mb1tmY2hh cnNldF0ua2V5d29yZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICAgICAgeHhzY3JlZW4oU0NSX1RaLDAsMGwsZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7Cisg ICAgICAgICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgPT4gIik7CisgICAgICAg ICAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9UWiwwLDBsLHRjc2luZm9bdGNoYXJzZXRdLmtleXdv cmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT0NTRVRT ICovCisgICAgICAgIH0KKyAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsZmlsY250LCIgZmlsZSBu dW1iZXIiKTsKKyAgICAgICAgaWYgKGZzaXplKSB4eHNjcmVlbihTQ1JfUUUsMCxmc2l6ZSwiIHNp emUiKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsZmZjLCIgY2hhcmFjdGVycyBzbyBmYXIi KTsKKyAgICAgICAgaWYgKGZzaXplID4gMEwpIHsKKyNpZmRlZiBDS19SRVNFTkQKKyAgICAgICAg ICAgIHp6ID0gd2hhdCAmIFdfU0VORCA/IHNlbmRzdGFydCA6IHdoYXQgJiBXX1JFQ1YgPyByc19s ZW4gOiAwOworICAgICAgICAgICAgenogPSAoIChmZmMgKyB6eikgKiAxMDBMICkgLyBmc2l6ZTsK KyNlbHNlCisgICAgICAgICAgICB6eiA9ICggZmZjICogMTAwTCApIC8gZnNpemU7CisjZW5kaWYg LyogQ0tfUkVTRU5EICovCisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfUUUsMCx6eiwgICAgICAi IHBlcmNlbnQgZG9uZSIpOworICAgICAgICB9CisgICAgICAgIGlmIChiY3R1ID09IDQpIHsgICAg ICAgICAgICAgICAgLyogQmxvY2sgY2hlY2sgKi8KKyAgICAgICAgICAgIHh4c2NyZWVuKFNDUl9U VSwwLDBMLCIgYmxvY2sgY2hlY2s6ICIpOworICAgICAgICAgICAgeHhzY3JlZW4oU0NSX1RaLDAs MEwsImJsYW5rLWZyZWUtMiIpOworICAgICAgICB9IGVsc2UgeHhzY3JlZW4oU0NSX1FFLDAsKGxv bmcpYmN0dSwgICIgYmxvY2sgY2hlY2siKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxv bmcpcnB0ZmxnLCIgY29tcHJlc3Npb24iKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsKGxv bmcpZWJxZmxnLCIgOHRoLWJpdCBwcmVmaXhpbmciKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX1FF LDAsKGxvbmcpbHNjYXB1LCIgbG9ja2luZyBzaGlmdHMiKTsKKyAgICAgICAgaWYgKCFuZXR3b3Jr KQorICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLCBzcGVlZCwgIiBzcGVlZCIpOworICAgICAg ICBpZiAod2hhdCAmIFdfU0VORCkKKworICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHNwc2l6 LCAiIHBhY2tldCBsZW5ndGgiKTsKKyAgICAgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDViB8fCB3 aGF0ICYgV19SRU1PKQorICAgICAgICAgIHh4c2NyZWVuKFNDUl9RRSwwLHVycHNpeiwiIHBhY2tl dCBsZW5ndGgiKTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX1FFLDAsd3Nsb3RzLCAgIiB3aW5kb3cg c2xvdHMiKTsKKyAgICAgICAgZmRpc3BsYSA9IG9mZDsgLyogW01GXSBSZXN0b3JlIGZpbGUgZGlz cGxheSB0eXBlICovCisgICAgICAgIHJldHVybigwKTsKKworICAgICAgY2FzZSAnQic6IGNhc2Ug J2InOiBjYXNlIDAwMDI6ICAgIC8qIENhbmNlbCBiYXRjaCAqLworICAgICAgY2FzZSAnWic6IGNh c2UgJ3onOiBjYXNlIDAwMzI6CisgICAgICAgIGN6c2VlbiA9IDE7CisgICAgICAgIGludGVycnVw dGVkID0gMTsKKyAgICAgICAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwKKyAgICAgICAgICAg ICAgICAgKCgod2hhdCAmIFdfUkVDVikgJiYgKHdzbG90cyA+IDEpKSA/CisgICAgICAgICAgICAg ICAgICAiQ2FuY2VsaW5nIGJhdGNoLCB3YWl0Li4uICIgOgorICAgICAgICAgICAgICAgICAgIkNh bmNlbGluZyBiYXRjaC4uLiAiKQorICAgICAgICAgICAgICAgICApOworICAgICAgICByZXR1cm4o MCk7CisKKyAgICAgIGNhc2UgJ0YnOiBjYXNlICdmJzogY2FzZSAwMDA2OiAgICAvKiBDYW5jZWwg ZmlsZSAqLworICAgICAgY2FzZSAnWCc6IGNhc2UgJ3gnOiBjYXNlIDAwMzA6CisgICAgICAgIGN4 c2VlbiA9IDE7CisgICAgICAgIGludGVycnVwdGVkID0gMTsKKyAgICAgICAgeHhzY3JlZW4oU0NS X1NULFNUX01TRywwbCwKKyAgICAgICAgICAgICAgICAgKCgod2hhdCAmIFdfUkVDVikgJiYgKHdz bG90cyA+IDEpKSA/CisgICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5nIGZpbGUsIHdhaXQuLi4g IiA6CisgICAgICAgICAgICAgICAgICAiQ2FuY2VsaW5nIGZpbGUuLi4gIikKKyAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgcmV0dXJuKDApOworCisgICAgICBjYXNlICdSJzogY2FzZSAncic6 IGNhc2UgMDAyMjogICAgLyogUmVzZW5kIHBhY2tldCAqLworICAgICAgY2FzZSAwMDE1OiBjYXNl IDAwMTI6CisjaWZkZWYgU1RSRUFNSU5HCisgICAgICAgIGlmIChzdHJlYW1pbmcpCisgICAgICAg ICAgcmV0dXJuKDApOworI2VuZGlmIC8qIFNUUkVBTUlORyAqLworICAgICAgICB4eHNjcmVlbihT Q1JfU1QsU1RfTVNHLDBsLCJSZXNlbmRpbmcgcGFja2V0Li4uICIpOworICAgICAgICBudW1lcnJz Kys7CisgICAgICAgIHJlc2VuZCh3aW5sbyk7CisgICAgICAgIHJldHVybigwKTsKKworI2lmZGVm IGRhdGFnZW5lcmFsCisgICAgICBjYXNlICdcMDMnOiAgICAgICAgICAgICAgICAgICAgICAgLyog V2UncmUgbm90IHRyYXBwaW5nIF5DJ3Mgd2l0aCAqLworICAgICAgICB0cmFwKDApOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIHNpZ25hbHMsIHNvIHdlIGNoZWNrIGhlcmUgICAgKi8KKyNlbmRp ZiAvKiBkYXRhZ2VuZXJhbCAqLworCisgICAgICBjYXNlICdDJzogY2FzZSAnYyc6ICAgICAgICAg ICAgICAgLyogQ3RybC1DICovCisjaWZuZGVmIGRhdGFnZW5lcmFsCisgICAgICBjYXNlICdcMDMn OgorI2VuZGlmIC8qIGRhdGFnZW5lcmFsICovCisKKyAgICAgIGNhc2UgJ0UnOiBjYXNlICdlJzog ICAgICAgICAgICAgICAvKiBTZW5kIGVycm9yIHBhY2tldCAqLworICAgICAgY2FzZSAwMDA1Ogor ICAgICAgICBpbnRlcnJ1cHRlZCA9IDE7CisgICAgICAgIHJldHVybigtMSk7CisKKyNpZmRlZiBD S19DVVJTRVMKKyAgICAgIGNhc2UgMDAxNDogICAgICAgICAgICAgICAgICAgICAgICAvKiBDdHJs LUwgdG8gcmVmcmVzaCBzY3JlZW4gKi8KKyAgICAgIGNhc2UgJ0wnOiBjYXNlICdsJzogICAgICAg ICAgICAgICAvKiBBbHNvIGFjY2VwdCBMICh1cHBlciwgbG93ZXIpICovCisgICAgICBjYXNlIDAw Mjc6ICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3RybC1XIHN5bm9ueW0gZm9yIFZNUyAmIElu Z3JlcyAqLworICAgICAgICByZXBhaW50ID0gMTsKKyAgICAgICAgcmV0dXJuKDApOworI2VuZGlm IC8qIENLX0NVUlNFUyAqLworCisgICAgICBjYXNlICdUJzoKKyAgICAgIGNhc2UgJ3QnOgkJCQkv KiBUdXJuIG9uIGRlYnVnLWxvZyB0aW1lc3RhbXBzICovCisjaWZkZWYgREVCVUcKKwl7CisJICAg IGV4dGVybiBpbnQgZGVidGltOworCSAgICBpZiAoY2ggPT0gJ1QnKSB7CisJCWRlYnRpbSA9IDE7 CisJCXh4c2NyZWVuKFNDUl9TVCxTVF9NU0csMGwsCisJCQkgIkRlYnVnIHRpbWVzdGFtcHMgT24u Li4gIik7CisJICAgIH0gZWxzZSB7CisJCWRlYnRpbSA9IDE7CisJCXh4c2NyZWVuKFNDUl9TVCxT VF9NU0csMGwsCisJCQkgIkRlYnVnIHRpbWVzdGFtcHMgT2ZmLi4uICIpOworCSAgICB9CisJfQor I2VuZGlmIC8qIERFQlVHICovCisJcmV0dXJuKDApOworCisgICAgICBjYXNlICdEJzoKKyNpZmRl ZiBERUJVRworCWlmICghZGVibG9nKSB7CisJICAgIGRlYm9wbigiZGVidWcubG9nIiwwKTsKKwkg ICAgaWYgKGRlYmxvZykgeworCQl4eHNjcmVlbihTQ1JfU1QsU1RfTVNHLDBsLCJkZWJ1Zy5sb2cg b3Blbi4uLiAiKTsKKwkgICAgfSBlbHNlIHsKKwkJeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwi ZGVidWcubG9nIG9wZW4gRkFJTEVELi4uICIpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgeHhz Y3JlZW4oU0NSX1NULFNUX01TRywwbCwiRGVidWcgbG9nIE9uLi4uICIpOworCX0KKwlpZiAoZGVi bG9nKQorCSAgZGVib2sgPSAxOworI2VuZGlmIC8qIERFQlVHICovCisJcmV0dXJuKDApOworCisg ICAgICBjYXNlICdkJzoJCQkJLyogVHVybiBvZmYgZGVidWdnaW5nICovCisjaWZkZWYgREVCVUcK KwlpZiAoZGVibG9nKQorCSAgeHhzY3JlZW4oU0NSX1NULFNUX01TRywwbCwiRGVidWcgbG9nIE9m Zi4uLiAiKTsKKwlkZWJvayA9IDA7CisjZW5kaWYgLyogREVCVUcgKi8KKwlyZXR1cm4oMCk7CisK KyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNl LCBwcmludCBtZXNzYWdlICovCisgICAgICAgIGludG1zZygxTCk7CisgICAgICAgIHJldHVybigw KTsKKyAgICB9Cit9CisKKy8qICBJIE4gVCBNIFMgRyAgLS0gIElzc3VlIG1lc3NhZ2UgYWJvdXQg dGVybWluYWwgaW50ZXJydXB0cyAgKi8KKworVk9JRAorI2lmZGVmIENLX0FOU0lDCitpbnRtc2co bG9uZyBuKQorI2Vsc2UKK2ludG1zZyhuKSBsb25nIG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K Ky8qIGludG1zZyAqLyB7CisjaWZkZWYgQ0tfTkVFRF9TSUcKKyAgICBjaGFyIGJ1Zls4MF07Cisj ZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KKworICAgIGlmICghZGlzcGxhIHx8IHF1aWV0KSAgICAg ICAgICAgICAgIC8qIE5vdCBpZiB3ZSdyZSBiZWluZyBxdWlldCAqLworICAgICAgcmV0dXJuOwor ICAgIGlmIChzZXJ2ZXIgJiYgKCFzcnZkaXMgfHwgbiA+IC0xTCkpIC8qIFNwZWNpYWwgZm9yIHNl cnZlciAqLworICAgICAgcmV0dXJuOworI2lmZGVmIENLX05FRURfU0lHCisgICAgYnVmWzBdID0g TlVMOyAgICAgICAgICAgICAgICAgICAgICAgLyogS2VlcCBjb21waWxlcnMgaGFwcHkgKi8KKyNl bmRpZiAvKiBDS19ORUVEX1NJRyAqLworI2lmbmRlZiBPWE9TCisjaWZkZWYgU1ZPUlBPU0lYCisg ICAgY29uY2hrKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgb3V0IHBlbmRp bmcgZXNjYXBlLXNpZ25hbHMgKi8KKyNlbmRpZiAvKiBTVk9SUE9TSVggKi8KKyNlbmRpZiAvKiAh IE9YT1MgKi8KKyNpZmRlZiBWTVMKKyAgICBjb25yZXMoKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTbyBDdHJsLUMgd2lsbCB3b3JrICovCisjZW5kaWYgLyogVk1TICovCisgICAgaWYg KCghc2VydmVyICYmIG4gPT0gMUwpIHx8IChzZXJ2ZXIgJiYgbiA8IDBMKSkgeworCisjaWZkZWYg Q0tfTkVFRF9TSUcKKyAgICAgICAgaWYgKHhmcmludCkgeworCSAgICBja21ha21zZyhidWYsCisJ CSAgICAgODAsCisJCSAgICAgIlR5cGUgZXNjYXBlIGNoYXJhY3RlciAoIiwKKwkJICAgICBkYmNo cihlc2NhcGUpLAorCQkgICAgICIpIGZvbGxvd2VkIGJ5OiIsCisJCSAgICAgTlVMTAorCQkgICAg ICk7CisgICAgICAgICAgICB4eHNjcmVlbihTQ1JfVE4sMCwwbCxidWYpOworICAgICAgICB9Cisj ZW5kaWYgLyogQ0tfTkVFRF9TSUcgKi8KKworICAgICAgICBpZiAoeGZyaW50KSB7CisgICAgICAg ICAgICBpZiAocHJvdG9jb2wgPT0gUFJPVE9fSykgeworIHh4c2NyZWVuKFNDUl9UTiwwLDBsLCJY IHRvIGNhbmNlbCBmaWxlLCAgQ1IgdG8gcmVzZW5kIGN1cnJlbnQgcGFja2V0Iik7CisgeHhzY3Jl ZW4oU0NSX1ROLDAsMGwsIlogdG8gY2FuY2VsIGdyb3VwLCBBIGZvciBzdGF0dXMgcmVwb3J0Iik7 CisgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIkUgdG8gc2VuZCBFcnJvciBwYWNrZXQsIEN0cmwtQyB0 byBxdWl0IGltbWVkaWF0ZWx5OiAiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgeHhzY3JlZW4oU0NSX1ROLDAsMGwsIkN0cmwtQyB0byBjYW5jZWwgZmlsZSB0cmFuc2Zl cjogIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4eHNj cmVlbihTQ1JfVE4sMCwwbCwiVHJhbnNmZXIgaW50ZXJydXB0aW9uIGRpc2FibGVkLiAiKTsKKyAg ICAgICAgfQorICAgIH0KKyAgICBlbHNlIHh4c2NyZWVuKFNDUl9UVSwwLDBsLCIgIik7Cit9CisK KyNpZm5kZWYgTk9ESVNQTEFZCitzdGF0aWMgaW50IG5ld2RweSA9IDA7ICAgICAgICAgICAgICAg ICAgLyogTmV3IGRpc3BsYXkgZmxhZyAqLworc3RhdGljIGNoYXIgZmJ1Zls4MF07ICAgICAgICAg ICAgICAgICAgIC8qIEZpbGVuYW1lIGJ1ZmZlciAqLworc3RhdGljIGNoYXIgYWJ1Zls4MF07ICAg ICAgICAgICAgICAgICAgIC8qIEFzLW5hbWUgYnVmZmVyICovCitzdGF0aWMgY2hhciBhMmJ1Zls4 MF07ICAgICAgICAgICAgICAgICAgLyogU2Vjb25kIEFzLW5hbWUgYnVmZmVyICovCitzdGF0aWMg Q0tfT0ZGX1Qgb2xkZmZjID0gMEw7CitzdGF0aWMgQ0tfT0ZGX1QgZG90cyA9IDBMOworc3RhdGlj IGludCBocG9zID0gMDsKKworc3RhdGljIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIEluaXRpYWxpemUgU2VyaWFsIG9yIENSVCBkaXNwbGF5ICovCitkcHlpbml0KCkgeworICAg IGludCBtID0gMCwgbiA9IDA7CisgICAgY2hhciAqIHMgPSAiIjsKKworICAgIG5ld2RweSA9IDA7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBEb24ndCBkbyB0aGlzIGFnYWluICovCisgICAg b2xkZmZjID0gKENLX09GRl9UKTA7CQkvKiAgUmVzZXQgdGhpcyAqLworICAgIGRvdHMgPSAoQ0tf T0ZGX1QpMDsJCQkvKiAgYW5kIHRoaXMuLiAqLworICAgIG9sZGNwcyA9IGNwcyA9IDBMOworCisg ICAgY29ub2xsKCIiKTsJCQkJLyogTmV3IGxpbmUgKi8KKyAgICBpZiAod2hhdCAmIFdfU0VORCkg cyA9ICJTZW5kaW5nOiAiOwkvKiBBY3Rpb24gKi8KKyAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNW KSBzID0gIlJlY2VpdmluZzogIjsKKyAgICBuID0gKGludClzdHJsZW4ocykgKyAoaW50KXN0cmxl bihmYnVmKTsKKyAgICBjb25vbChmYnVmKTsKKyAgICBtID0gKGludClzdHJsZW4oYWJ1ZikgKyA0 OworICAgIGlmIChuICsgbSA+IGNtZF9jb2xzKSB7CisgICAgICAgIGNvbm9sbCgiIik7CisgICAg ICAgIG4gPSAwOworICAgIH0gZWxzZQorICAgICAgbiArPSBtOworICAgIGlmICgqYWJ1Zikgewor ICAgICAgICBjb25vbCgiID0+ICIpOworICAgICAgICBjb25vbChhYnVmKTsKKyAgICB9CisgICAg bSA9IChpbnQpc3RybGVuKGEyYnVmKSArIDQ7CisgICAgaWYgKG4gKyBtID4gY21kX2NvbHMpIHsK KyAgICAgICAgY29ub2xsKCIiKTsKKyAgICAgICAgbiA9IDA7CisgICAgfSBlbHNlCisgICAgICBu ICs9IG07CisgICAgaWYgKCphMmJ1ZikgeworICAgICAgICBjb25vbCgiID0+ICIpOworICAgICAg ICBjb25vbChhMmJ1Zik7CisgICAgfQorICAgICpmYnVmID0gTlVMOyAqYWJ1ZiA9IE5VTDsgKmEy YnVmID0gTlVMOworICAgIGNvbm9sbCgiIik7CisgICAgaWYgKGZzaXplID4gKENLX09GRl9UKS0x KSB7CQkvKiBTaXplICovCisgICAgICAgIHNwcmludGYoZmJ1ZiwiU2l6ZTogJXMsIFR5cGU6ICIs Y2tmc3RvYShmc2l6ZSkpOyAvKiBTQUZFICg4MCkgKi8KKyAgICAgICAgY29ub2woZmJ1Zik7ICpm YnVmID0gTlVMOworICAgIH0gZWxzZSBjb25vbCgiU2l6ZTogdW5rbm93biwgVHlwZTogIik7Cisg ICAgaWYgKGJpbmFyeSkgewkJCS8qIFR5cGUgKi8KKyAgICAgICAgc3dpdGNoKGJpbmFyeSkgewor ICAgICAgICAgICAgICBjYXNlIFhZRlRfTDogY29ub2woImxhYmVsZWQiKTsgYnJlYWs7CisgICAg ICAgICAgICAgIGNhc2UgWFlGVF9JOiBjb25vbCgiaW1hZ2UiKTsgYnJlYWs7CisgICAgICAgICAg ICAgIGNhc2UgWFlGVF9VOiBjb25vbCgiYmluYXJ5IHVuZGVmaW5lZCIpOyBicmVhazsKKyAgICAg ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgY2FzZSBYWUZUX0I6IGNvbm9sKCJiaW5h cnkiKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworI2lmZGVmIE5PQ1NFVFMKKyAg ICAgICAgY29ub2woInRleHQiKTsKKyNlbHNlCisgICAgICAgIGNvbm9sKCJ0ZXh0LCAiKTsKKyAg ICAgICAgaWYgKHRjaGFyc2V0ID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgeworICAgICAg ICAgICAgY29ub2woInRyYW5zcGFyZW50Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBpZiAod2hhdCAmIFdfU0VORCkgeworICAgICAgICAgICAgICAgIGNvbm9sKGZjc2luZm9bZmNo YXJzZXRdLmtleXdvcmQpOworICAgICAgICAgICAgICAgIGNvbm9sKCIgPT4gIik7CisgICAgICAg ICAgICAgICAgY29ub2wodGNzaW5mb1t0Y2hhcnNldF0ua2V5d29yZCk7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbm9sKHRjc2luZm9bdGNoYXJzZXRdLmtleXdvcmQp OworICAgICAgICAgICAgICAgIGNvbm9sKCIgPT4gIik7CisgICAgICAgICAgICAgICAgY29ub2wo ZmNzaW5mb1tmY2hhcnNldF0ua2V5d29yZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNl bmRpZiAvKiBOT0NTRVRTICovCisgICAgfQorI2lmZGVmIFNUUkVBTUlORworICAgIGlmIChzdHJl YW1pbmcpCisgICAgICBjb25vbCgiLCBTVFJFQU1JTkciKTsKKyNlbmRpZiAvKiBTVFJFQU1JTkcg Ki8KKyAgICBjb25vbGwoIiIpOworCisgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9TKSB7ICAgICAg ICAgICAgLyogQ1JUIGZpZWxkIGhlYWRpbmdzICovCisvKgorICBEZWZpbmUgQ0tfQ1BTIHRvIHNo b3cgY3VycmVudCB0cmFuc2ZlciByYXRlLgorICBMZWF2ZSBpdCB1bmRlZmluZWQgdG8gc2hvdyBl c3RpbWF0ZWQgdGltZSByZW1haW5pbmcuCisgIEVzdGltYXRlZC10aW1lLXJlbWFpbmluZyBjb2Rl IGZyb20gQW5keSBGeWZlLCBub3QgdGVzdGVkIG9uCisgIHBhdGhvbG9naWNhbCBjYXNlcy4KKyov CisjZGVmaW5lIENLX0NQUworCisjaWZkZWYgQ0tfQ1BTCisgICAgICAgIGNvbm9sbCgiICAgIEZp bGUgICBQZXJjZW50ICAgICAgIFBhY2tldCIpOworICAgICAgICBjb25vbGwoIiAgICBCeXRlcyAg RG9uZSAgICAgQ1BTICBMZW5ndGgiKTsKKyNlbHNlCisgICAgICAgIGNvbm9sbCgiICAgIEZpbGUg ICBQZXJjZW50ICBTZWNzIFBhY2tldCIpOworICAgICAgICBjb25vbGwoIiAgICBCeXRlcyAgRG9u ZSAgICAgTGVmdCBMZW5ndGgiKTsKKyNlbmRpZiAvKiBDS19DUFMgKi8KKyAgICAgICAgbmV3ZHB5 ID0gMDsKKyAgICB9CisgICAgaHBvcyA9IDA7Cit9CisKKy8qCisgIHNob3dwa3QoYykKKyAgYyA9 IGNvbXBsZXRpb24gY29kZTogMCBtZWFucyB0cmFuc2ZlciBpbiBwcm9ncmVzcywgbm9uemVybyBt ZWFucyBpdCdzIGRvbmUuCisgIFNob3cgdGhlIGZpbGUgdHJhbnNmZXIgcHJvZ3Jlc3MgY291bnRl ciBhbmQgcGVyaGFwcyB2ZXJib3NlIHBhY2tldCB0eXBlLgorKi8KK1ZPSUQKKyNpZmRlZiBDS19B TlNJQworc2hvd3BrdChjaGFyIGMpCisjZWxzZQorc2hvd3BrdChjKSBjaGFyIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KKy8qIHNob3dwa3QgKi8geworCisjaWZuZGVmIEdGVElNRVIKKyAgICBs b25nIGV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbGFwc2VkIHRpbWUsIGVudGly ZSBiYXRjaCAgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgQ0tfT0ZGX1QgaG93ZmFyOwkJ CS8qIEhvdyBmYXIgaW50byBmaWxlICovCisgICAgbG9uZyBwZDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogUGVyY2VudCBkb25lLCB0aGlzIGZpbGUgICAgICovCisgICAgbG9uZyB0cDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgcmF0ZSwgZW50aXJlIGJhdGNo ICovCisgICAgbG9uZyBwczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHNp emUsIGN1cnJlbnQgcGFja2V0ICovCisgICAgQ0tfT0ZGX1QgbXl0ZmM7CQkJLyogTG9jYWwgY29w eSBvZiBieXRlIGNvdW50ZXIgICovCisKKyNpZmRlZiBHRlRJTUVSCisgICAgQ0tGTE9BVCB0bm93 OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworICAgIGlmIChuZXdkcHkpICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFB1dCB1cCBmaWxlbmFtZXMsIGV0YywgKi8KKyAgICAgIGRweWluaXQoKTsg ICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiB0aGV5J3JlIG5vdCB0aGVyZSBhbHJlYWR5LiAq LworCisgICAgaG93ZmFyID0gZmZjOyAgICAgICAgICAgICAgICAgICAgICAgLyogSG93IGZhciAq LworLyoKKyAgQ2FsY3VsYXRlIENQUyByYXRlIGV2ZW4gaWYgbm90IGRpc3BsYXlpbmcgb24gc2Ny ZWVuIGZvciB1c2UgaW4gZmlsZQorICB0cmFuc2ZlciBzdGF0aXN0aWNzLgorKi8KKyNpZmRlZiBH RlRJTUVSCisgICAgdG5vdyA9IGdmdGltZXIoKTsgICAgICAgICAgICAgICAgICAgLyogVGltZSBz aW5jZSB3ZSBzdGFydGVkICovCisgICAgcHMgPSAod2hhdCAmIFdfUkVDVikgPyBycGt0bCA6IHNw a3RsOyAvKiBQYWNrZXQgc2l6ZSAqLworI2lmZGVmIENLX1JFU0VORAorICAgIGlmICh3aGF0ICYg V19TRU5EKQkJCS8qIEluIGNhc2Ugd2UgZGlkbid0IHN0YXJ0IGF0ICovCisgICAgICBob3dmYXIg Kz0gc2VuZHN0YXJ0OyAgICAgICAgICAgICAgLyogIHRoZSBiZWdpbm5pbmcuLi4gKi8KKyAgICBl bHNlIGlmICh3aGF0ICYgV19SRUNWKQorICAgICAgaG93ZmFyICs9IHJzX2xlbjsKKyNlbmRpZiAv KiBDS19SRVNFTkQgKi8KKyAgICBwZCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQZXJjZW50IGRvbmUuICovCisgICAgaWYgKGMgPT0gTlVMKSB7ICAgICAgICAgICAgICAgICAg ICAgLyogU3RpbGwgZ29pbmcsIGZpZ3VyZSAlIGRvbmUgKi8KKyAgICAgICAgaWYgKCFmc2l6ZSkg cmV0dXJuOwkJLyogRW1wdHkgZmlsZSwgZG9uJ3QgYm90aGVyICovCisgICAgICAgIHBkID0gKGZz aXplID4gOTkpID8gKGhvd2ZhciAvIChmc2l6ZSAvIChDS19PRkZfVCkxMDApKSA6IDA7CisgICAg ICAgIGlmIChwZCA+IDEwMCkgcGQgPSAxMDA7ICAgICAgICAgLyogRXhwYW5zaW9uICovCisgICAg fQorICAgIGlmIChjICE9IE5VTCkKKyAgICAgIGlmICghY3hzZWVuICYmICFkaXNjYXJkICYmICFj enNlZW4pCisgICAgICAgIHBkID0gMTAwOyAgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBj b21wbGV0ZSwgc28gMTAwJS4gKi8KKworICAgIG15dGZjID0gKHBkIDwgMTAwKSA/IHRmYyArIGZm YyA6IHRmYzsgICAgLyogQ1BTICovCisgICAgdHAgPSAobG9uZykoKHRub3cgPiAwLjApID8gKENL RkxPQVQpIG15dGZjIC8gdG5vdyA6IDApOworICAgIGlmIChjICYmICh0cCA9PSAwKSkKKyAgICAg IHRwID0gZmZjOworCisgICAgY3BzID0gdHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog U2V0IGdsb2JhbCB2YXJpYWJsZSAqLworICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAg ICAgICAgIC8qIFBlYWsgdHJhbnNmZXIgcmF0ZSAqLworICAgICAgICAgKCh3aGF0ICYgV19TRU5E ICYmIHNwYWNrZXRzID4gd3Nsb3RzICsgNCkgfHwKKwkgICghKHdoYXQgJiBXX1NFTkQpICYmIHNw YWNrZXRzID4gMTApKSkgeworICAgICAgICBwZWFrY3BzID0gY3BzOworICAgIH0KKworI2Vsc2Ug IC8qIE5vdCBHRlRJTUVSICovCisKKyAgICBldCA9IGd0aW1lcigpOyAgICAgICAgICAgICAgICAg ICAgICAvKiBFbGFwc2VkIHRpbWUgICovCisgICAgcHMgPSAod2hhdCAmIFdfUkVDVikgPyBycGt0 bCA6IHNwa3RsOyAvKiBQYWNrZXQgbGVuZ3RoICovCisjaWZkZWYgQ0tfUkVTRU5ECisgICAgaWYg KHdoYXQgJiBXX1NFTkQpCQkJLyogQW5kIGlmIHdlIGRpZG4ndCBzdGFydCBhdCAqLworICAgICAg aG93ZmFyICs9IHNlbmRzdGFydDsgICAgICAgICAgICAgIC8qICB0aGUgYmVnaW5uaW5nLi4uICov CisgICAgZWxzZSBpZiAod2hhdCAmIFdfUkVDVikKKyAgICAgIGhvd2ZhciArPSByc19sZW47Cisj ZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAgcGQgPSAtMTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogUGVyY2VudCBkb25lLiAqLworICAgIGlmIChjID09IE5VTCkgeyAgICAgICAgICAg ICAgICAgICAgIC8qIFN0aWxsIGdvaW5nLCBmaWd1cmUgJSBkb25lICovCisgICAgICAgIGlmIChm c2l6ZSA9PSAwTCkgcmV0dXJuOyAgICAgICAgLyogRW1wdHkgZmlsZSwgZG9uJ3QgYm90aGVyICov CisgICAgICAgIHBkID0gKGZzaXplID4gOTkpID8gKGhvd2ZhciAvIChmc2l6ZSAvIChDS19PRkZf VCkxMDApKSA6IDA7CisgICAgICAgIGlmIChwZCA+IDEwMCkgcGQgPSAxMDA7ICAgICAgICAgLyog RXhwYW5zaW9uICovCisgICAgfQorICAgIGlmIChjICE9IE5VTCkKKyAgICAgIGlmICghY3hzZWVu ICYmICFkaXNjYXJkICYmICFjenNlZW4pCisgICAgICAgIHBkID0gMTAwOyAgICAgICAgICAgICAg ICAgICAgICAgLyogRmlsZSBjb21wbGV0ZSwgc28gMTAwJS4gKi8KKworCisjaWZuZGVmIENLX0NQ UworLyoKKyAgZnNlY3MgPSB0aW1lIChmcm9tIGd0aW1lcikgdGhhdCB0aGlzIGZpbGUgc3RhcnRl ZCAoc2V0IGluIHNmaWxlKCkpLgorICBSYXRlIHNvIGZhciBpcyBmZmMgLyAoZXQgLSBmc2Vjcyks ICBlc3RpbWF0ZWQgdGltZSBmb3IgcmVtYWluaW5nIGJ5dGVzCisgIGlzIChmc2l6ZSAtIGZmYykg LyAoZmZjIC8gKGV0IC0gZnNlY3MpKS4KKyovCisgICAgdHAgPSAoaG93ZmFyID4gMCkgPyAoZnNp emUgLSBob3dmYXIpICogKGV0IC0gZnNlY3MpIC8gaG93ZmFyIDogMDsKKyNlbmRpZiAvKiBDS19D UFMgKi8KKworI2lmZGVmIENLX0NQUworICAgIG15dGZjID0gKHBkIDwgMTAwKSA/IHRmYyArIGZm YyA6IHRmYzsKKyAgICB0cCA9IChldCA+IDApID8gbXl0ZmMgLyBldCA6IDA7CS8qIFRyYW5zZmVy IHJhdGUgKi8KKyAgICBpZiAoYyAmJiAodHAgPT0gMCkpCQkJLyogV2F0Y2ggb3V0IGZvciBzdWJz ZWNvbmQgdGltZXMgKi8KKyAgICAgICAgdHAgPSBmZmM7CisKKyAgICBjcHMgPSB0cDsJCQkJLyog U2V0IGdsb2JhbCB2YXJpYWJsZSAqLworICAgIGlmIChjcHMgPiBwZWFrY3BzICYmICAgICAgICAg ICAgICAgIC8qIFBlYWsgdHJhbnNmZXIgcmF0ZSAqLworICAgICAgICAgKCh3aGF0ICYgV19TRU5E ICYmIHNwYWNrZXRzID4gd3Nsb3RzICsgNCkgfHwKKwkgICghKHdoYXQgJiBXX1NFTkQpICYmIHNw YWNrZXRzID4gMTApKSkgeworICAgICAgICBwZWFrY3BzID0gY3BzOworICAgIH0KKyNlbmRpZiAv KiBDS19DUFMgKi8KKworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworICAgIGlmIChmZGlzcGxhID09 IFhZRkRfUykgeyAgICAgICAgICAgIC8qIENSVCBkaXNwbGF5ICovCisgICAgICAgIGNoYXIgYnVm ZmVyWzEyOF07CisJLyogVGhlc2Ugc3ByaW50ZnMgc2hvdWxkIGJlIHNhZmUgdW50aWwgd2UgaGF2 ZSAzMi1kaWdpdCBudW1iZXJzICovCisKKyAgICAgICAgaWYgKHBkID4gLTFMKQorICAgICAgICAg IHNwcmludGYoYnVmZmVyLCAiJWMlOXMlNWxkJSUlOGxkJThsZCAiLCBDUixja2ZzdG9hKGhvd2Zh cikscGQsdHAscHMpOworICAgICAgICBlbHNlCisgICAgICAgICAgc3ByaW50ZihidWZmZXIsICIl YyU5cyAgICAgICU4bGQlOGxkICIsIENSLGNrZnN0b2EoaG93ZmFyKSx0cCxwcyk7CisgICAgICAg IGNvbm9sKGJ1ZmZlcik7CisgICAgICAgIGhwb3MgPSAzMTsKKyAgICB9IGVsc2UgaWYgKGZkaXNw bGEgPT0gWFlGRF9SKSB7ICAgICAvKiBTRVJJQUwgKi8KKyAgICAgICAgbG9uZyBpLCBrOworICAg ICAgICBpZiAoaG93ZmFyIC0gb2xkZmZjIDwgMTAyNCkgICAgIC8qIFVwZGF0ZSBkaXNwbGF5IGV2 ZXJ5IDFLICovCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBvbGRmZmMgPSBob3dmYXI7ICAg ICAgICAgICAgICAgIC8qIFRpbWUgZm9yIG5ldyBkaXNwbGF5ICovCisgICAgICAgIGsgPSAoaG93 ZmFyIC8gMTAyNEwpIC0gZG90czsgICAgLyogSG93IG1hbnkgSyBzbyBmYXIgKi8KKyAgICAgICAg Zm9yIChpID0gMEw7IGkgPCBrOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChocG9zKysgPiAoY21k X2NvbHMgLSAzKSkgeyAvKiBUaW1lIHRvIHdyYXA/ICovCisgICAgICAgICAgICAgICAgY29ub2xs KCIiKTsKKyAgICAgICAgICAgICAgICBocG9zID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGNvbm9jKCcuJyk7ICAgICAgICAgICAgICAgICAvKiBQcmludCBhIGRvdCBmb3IgdGhpcyBL ICovCisgICAgICAgICAgICBkb3RzKys7ICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgaXQg Ki8KKyAgICAgICAgfQorICAgIH0KK30KKworCisvKiAgQyBLIFMgQyBSIEUgRSBOICAtLSAgU2Ny ZWVuIGRpc3BsYXkgZnVuY3Rpb24gICovCisKKy8qCisgIGNrc2NyZWVuKGYsYyxuLHMpCisgICAg ZiAtIGFyZ3VtZW50IGRlc2NyaXB0b3IKKyAgICBjIC0gYSBjaGFyYWN0ZXIgb3Igc21hbGwgaW50 ZWdlcgorICAgIG4gLSBhIGxvbmcgaW50ZWdlcgorICAgIHMgLSBhIHN0cmluZy4KKworICBhbmQg Z2xvYmFsIGZkaXNwbGEgPSBTRVQgRklMRSBESVNQTEFZIHZhbHVlOgorCisgICAgWFlGRF9OID0g Tk9ORQorICAgIFhZRkRfUiA9IFNFUklBTDogICAgIERvdHMsIGV0Yywgd29ya3Mgb24gYW55IHRl cm1pbmFsLCBldmVuIGhhcmRjb3B5LgorICAgIFhZRkRfUyA9IENSVDogICAgICAgIFdvcmtzIG9u IGFueSBDUlQsIHdyaXRlcyBvdmVyIGN1cnJlbnQgbGluZS4KKyAgICBYWUZEX0MgPSBGVUxMU0NS RUVOOiBSZXF1aXJlcyB0ZXJtaW5hbC1kZXBlbmRlbnQgc2NyZWVuIGNvbnRyb2wuCisgICAgWFlG RF9CID0gQlJJRUY6ICAgICAgTGlrZSBTRVJJQUwgYnV0IG9ubHkgZmlsZW5hbWUgJiBjb21wbGV0 aW9uIHN0YXR1cy4KKyAgICBYWUZEX0cgPSBHVUk7ICAgICAgICBXaW5kb3dzIEdVSSwgc2FtZSBi ZWhhdmlvciBhcyBGVUxMU0NSRUVOCisqLworVk9JRAorI2lmZGVmIENLX0FOU0lDCitja3NjcmVl bihpbnQgZiwgY2hhciBjLENLX09GRl9UIG4sY2hhciAqcykKKyNlbHNlCitja3NjcmVlbihmLGMs bixzKSBpbnQgZjsgY2hhciBjOyBDS19PRkZfVCBuOyBjaGFyICpzOworI2VuZGlmIC8qIENLX0FO U0lDICovCisvKiBzY3JlZW4gKi8geworICAgIGNoYXIgYnVmWzgwXTsKKyAgICBpbnQgbGVuOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICovCisjaWZkZWYg VU5JWAorI2lmbmRlZiBOT0pDCisgICAgaW50IG9iZzsKK19QUk9UT1RZUCggVk9JRCBjb25iZ3Qs IChpbnQpICk7CisjZW5kaWYgLyogTk9KQyAqLworI2VuZGlmIC8qIFVOSVggKi8KKyAgICBpbnQg ZnRwID0gMDsKKworICAgIGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6IDA7CS8qIEZUUCBvciBL ZXJtaXQ/ICovCisKKyAgICBpZiAoIWxvY2FsICYmICFmdHApCQkJLyogSW4gcmVtb3RlIG1vZGUg LSBkb24ndCBkbyB0aGlzICovCisgICAgICByZXR1cm47CisKKyAgICBpZiAoIXMpIHMgPSAiIjsK KworICAgIGlmICghZnhkX2luaXRlZCkgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUg aWYgbmVjZXNzYXJ5ICovCisgICAgICBmeGRpbml0KGZkaXNwbGEpOworCisjaWZkZWYgVU5JWAor I2lmbmRlZiBOT0pDCisgICAgb2JnID0gYmFja2dyZDsgICAgICAgICAgICAgICAgICAgICAgLyog UHJldmlvdXMgYmFja2dyb3VuZCBzdGF0dXMgKi8KKyAgICBjb25iZ3QoMSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBTZWUgaWYgcnVubmluZyBpbiBiYWNrZ3JvdW5kICovCisgICAgaWYg KCFiYWNrZ3JkICYmIG9iZykgeyAgICAgICAgICAgICAgLyogSnVzdCBjYW1lIGludG8gZm9yZWdy b3VuZD8gKi8KKyAgICAgICAgY29uY2IoKGNoYXIpZXNjYXBlKTsgICAgICAgICAgICAvKiBQdXQg Y29uc29sZSBiYWNrIGluIENCUkVBSyBtb2RlICovCisgICAgICAgIHNldGludCgpOyAgICAgICAg ICAgICAgICAgICAgICAgLyogUmVzdG9yZSBpbnRlcnJ1cHRzICovCisgICAgfQorI2VuZGlmIC8q IE5PSkMgKi8KKyNlbmRpZiAvKiBVTklYICovCisKKyAgICBpZiAoKGYgIT0gU0NSX1dNKSAmJiAo ZiAhPSBTQ1JfRU0pKSAvKiBBbHdheXMgdXBkYXRlIHdhcm5pbmdzICYgZXJyb3JzICovCisgICAg ICBpZiAoIWRpc3BsYSB8fAorICAgICAgICAgIChiYWNrZ3JkICYmIGJnc2V0KSB8fAorICAgICAg ICAgIGZkaXNwbGEgPT0gWFlGRF9OIHx8CisgICAgICAgICAgKHNlcnZlciAmJiAhc3J2ZGlzKQor ICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuOworCisjaWZkZWYgVk1TCisgICAgaWYgKGYgPT0g U0NSX0ZOKSAgICAgICAgICAgICAgICAgICAgLyogVk1TIC0gc2hvcnRlbiB0aGUgbmFtZSAqLwor ICAgICAgcyA9IHpyZWxuYW1lKHMsemd0ZGlyKCkpOworI2VuZGlmIC8qIFZNUyAqLworCisgICAg aWYgKGRlc3QgPT0gREVTVF9TKSAgICAgICAgICAgICAgICAgLyogU0VUIERFU1RJTkFUSU9OIFND UkVFTiAqLworICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB3b3Vs ZCBpbnRlcmZlcmUuLi4gKi8KKworI2lmZGVmIEtVSQorICAgIGlmIChmZGlzcGxhID09IFhZRkRf RykgeyAgICAgICAgICAgIC8qIElmIGd1aSBkaXNwbGF5IHNlbGVjdGVkICovCisgICAgICAgIHNj cmVlbmcoZixjLG4scyk7ICAgICAgICAgICAgICAgLyogY2FsbCB0aGUgZ3VpIHZlcnNpb24gKi8K KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDS19DVVJT RVMKKyAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0MpIHsgICAgICAgICAgICAvKiBJZiBmdWxsc2Ny ZWVuIGRpc3BsYXkgc2VsZWN0ZWQgKi8KKyAgICAgICAgc2NyZWVuYyhmLGMsbixzKTsgICAgICAg ICAgICAgICAvKiBjYWxsIHRoZSBmdWxsc2NyZWVuIHZlcnNpb24gKi8KKyAgICAgICAgcmV0dXJu OworICAgIH0KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKworICAgIGxlbiA9IChpbnQpc3RybGVu KHMpOyAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBzdHJpbmcgKi8KKworICAgIHN3aXRjaCAo ZikgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhhbmRsZSBvdXIgZnVuY3Rpb24gY29kZSAq LworICAgICAgY2FzZSBTQ1JfRk46ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGVuYW1lICov CisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworI2lmZGVmIE5FV0ZUUAorCSAgICBp ZiAoZnRwKQorCSAgICAgIHByaW50ZigiICVzICVzIiwgd2hhdCAmIFdfU0VORCA/ICJQVVQiIDog IkdFVCIsIHMpOworCSAgICBlbHNlCisjZW5kaWYgLyogTkVXRlRQICovCisJICAgICAgcHJpbnRm KCIgJXMgJXMiLCB3aGF0ICYgV19TRU5EID8gIlNFTkQiIDogIlJFQ1YiLCBzKTsKKyNpZmRlZiBV TklYCisgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICovCisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZmRlZiBNQUMKKyAgICAgICAgY29ub2xsKCIi KTsgY29ub2wocyk7IGNvbm9jKFNQKTsgaHBvcyA9IGxlbiArIDE7CisjZWxzZQorICAgICAgICBj a3N0cm5jcHkoZmJ1ZixzLDgwKTsKKyAgICAgICAgYWJ1ZlswXSA9IGEyYnVmWzBdID0gTlVMOwor ICAgICAgICBuZXdkcHkgPSAxOyAgICAgICAgICAgICAgICAgICAgIC8qIE5ldyBmaWxlIHNvIHJl ZnJlc2ggZGlzcGxheSAqLworI2VuZGlmIC8qIE1BQyAqLworICAgICAgICByZXR1cm47CisKKyAg ICAgIGNhc2UgU0NSX0FOOiAgICAgICAgICAgICAgICAgICAgICAvKiBBcy1uYW1lICovCisgICAg ICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAg IHByaW50ZigiKGFzICVzKSAiLHMpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAg IHJldHVybjsKKyAgICAgICAgfQorI2lmZGVmIE1BQworICAgICAgICBpZiAoaHBvcyArIGxlbiA+ IDc1KSB7IGNvbm9sbCgiIik7IGhwb3MgPSAwOyB9CisgICAgICAgIGNvbm9sKCI9PiAiKTsgY29u b2wocyk7CisgICAgICAgIGlmICgoaHBvcyArPSAobGVuICsgMykpID4gNzgpIHsgY29ub2xsKCIi KTsgaHBvcyA9IDA7IH0KKyNlbHNlCisgICAgICAgIGlmIChhYnVmWzBdKSB7CisgICAgICAgICAg ICBja3N0cm5jcHkoYTJidWYscyw4MCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBj a3N0cm5jcHkoYWJ1ZixzLDgwKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIE1BQyAqLworICAgICAg ICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0ZTOiAgICAgICAgICAgICAgICAgICAgICAvKiBG aWxlLXNpemUgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAg ICBwcmludGYoIiAoJXMpICglcyBieXRlJXMpIiwKKyNpZmRlZiBOT0lDUAorICAgICAgICAgICAg ICAgICAgIChiaW5hcnkgPyAiYmluYXJ5IiA6ICJ0ZXh0IikKKyNlbHNlCisgICAgICAgICAgICAg ICAgICAgZ2Ztb2RlKGJpbmFyeSwwKQorI2VuZGlmIC8qIE5PSUNQICovCisgICAgICAgICAgICAg ICAgICAgLCBja2ZzdG9hKG4pLCBuID09IDEgPyAiIiA6ICJzIik7CisjaWZkZWYgVU5JWAorICAg ICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYgLyogVU5JWCAqLworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICB9CisjaWZkZWYgTUFDCisgICAgICAgIHNwcmludGYoYnVmLCIsIFNp emU6ICVzIixja2ZzdG9hKG4pKTsgIGNvbm9sbChidWYpOyAgaHBvcyA9IDA7CisjZW5kaWYgLyog TUFDICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFgtcGFja2V0IGRhdGEgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9CKQorICAgICAgICAgIHJldHVybjsKKyNpZmRlZiBNQUMKKyAgICAgICAgY29ub2xsKCIiKTsg Y29ub2xsKHMpOyBocG9zID0gMDsKKyNlbHNlCisgICAgICAgIGNrc3RybmNweShmYnVmLHMsODAp OworICAgICAgICBhYnVmWzBdID0gYTJidWZbMF0gPSBOVUw7CisjZW5kaWYgLyogTUFDICovCisg ICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfU1Q6ICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgc3RhdHVzICovCisgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgIGNhc2Ug U1RfT0s6ICAgICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVycmVkIE9LICovCisgICAgICAgICAg ICBzaG93cGt0KCdaJyk7ICAgICAgICAgICAgICAgLyogVXBkYXRlIG51bWJlcnMgb25lIGxhc3Qg dGltZSAqLworICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisjaWZkZWYgR0ZU SU1FUgorCQlpZiAoZnB4ZnNlY3MpCisJCSAgcHJpbnRmKCI6IE9LICglMC4zZiBzZWMsICVsZCBj cHMpIixmcHhmc2VjcywKKwkJCSAobG9uZykoKENLRkxPQVQpZmZjIC8gZnB4ZnNlY3MpKTsKKyNl bHNlCisJCWlmICh4ZnNlY3MpCisJCSAgcHJpbnRmKCI6IE9LICglZCBzZWMsICVsZCBjcHMpIix4 ZnNlY3MsZmZjL3hmc2Vjcyk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworCQlwcmludGYoIlxuIik7 CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg KChocG9zICs9IDUpID4gNzgpIGNvbm9sbCgiIik7IC8qIFdyYXAgc2NyZWVuIGxpbmUuICovCisg ICAgICAgICAgICBjb25vbGwoIiBbT0tdIik7IGhwb3MgPSAwOyAgLyogUHJpbnQgT0sgbWVzc2Fn ZS4gKi8KKyAgICAgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfUykgeyAgICAvKiBXZSBkaWRu J3Qgc2hvdyBaIHBhY2tldCB3aGVuICovCisgICAgICAgICAgICAgICAgY29ub2MoJ1onKTsgICAg ICAgICAgICAgLyogaXQgY2FtZSwgc28gc2hvdyBpdCBub3cuICovCisgICAgICAgICAgICAgICAg aHBvcyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg ICBjYXNlIFNUX0RJU0M6ICAgICAgICAgICAgICAgICAvKiAgRGlzY2FyZGVkICovCisgICAgICAg ICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIjog RElTQ0FSREVEXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTIpID4gNzgpIGNvbm9sbCgiIik7CisgICAgICAgICAg ICBjb25vbGwoIiBbZGlzY2FyZGVkXSIpOyBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsK KworICAgICAgICAgIGNhc2UgU1RfSU5UOiAgICAgICAgICAgICAgICAgIC8qICBJbnRlcnJ1cHRl ZCAqLworICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAg ICAgcHJpbnRmKCI6IElOVEVSUlVQVEVEXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGhwb3MgKz0gMTQpID4gNzgpIGNvbm9sbCgi Iik7CisgICAgICAgICAgICBjb25vbGwoIiBbaW50ZXJydXB0ZWRdIik7IGhwb3MgPSAwOworICAg ICAgICAgICAgcmV0dXJuOworCisJICBjYXNlIFNUX1NJTToKKyAgICAgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfQikgeworCQlpZiAobiA9PSBTS1BfWE5YKQorCQkgIHByaW50ZigiOiBXT1VM RCBCRSBUUkFOU0ZFUlJFRCAoTmV3IGZpbGUpXG4iKTsKKwkJZWxzZSBpZiAobiA9PSBTS1BfWFVQ KQorCQkgIHByaW50ZigiOiBXT1VMRCBCRSBUUkFOU0ZFUlJFRCAoUmVtb3RlIGZpbGUgb2xkZXIp XG4iKTsKKwkJZWxzZSBpZiAobiA9PSBTS1BfU0lNKQorCQkgIHByaW50ZigiOiBXT1VMRCBCRSBU UkFOU0ZFUlJFRFxuIik7CisJCWVsc2UgaWYgKG4gPiAwICYmIG4gPCBuc2tyZWFzb24pCisJCSAg cHJpbnRmKCI6IFNLSVBQRUQgKCVzKVxuIixza3JlYXNvbltuXSk7CisJCWVsc2UKKwkJICBwcmlu dGYoIjogU0tJUFBFRFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg fSBlbHNlIGlmIChmZGlzcGxhID09IFhZRkRfUykgeworICAgICAgICAgICAgICAgIGlmIChmZGlz cGxhID09IFhZRkRfUyAmJiBmYnVmWzBdKSB7IC8qIENSVCBkaXNwbGF5ICovCisgICAgICAgICAg ICAgICAgICAgIGNvbm9sbCgiIik7ICAgICAgICAgLyogTmV3IGxpbmUgKi8KKyAgICAgICAgICAg ICAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIGNvbm9sKCJXb3VsZCBTZW5kOiAiKTsgLyogQWN0 aW9uICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpIGNvbm9s KCJXb3VsZCBSZWNlaXZlOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgY29ub2woZmJ1Zik7Cisg ICAgICAgICAgICAgICAgICAgIGlmICgqYWJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYWJ1Zik7 IC8qIE5hbWVzICovCisgICAgICAgICAgICAgICAgICAgIGlmICgqYTJidWYpIGNvbm9sKCIgPT4g Iik7IGNvbm9sKGEyYnVmKTsgLyogTmFtZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgKmZidWYg PSBOVUw7ICphYnVmID0gTlVMOyAqYTJidWYgPSBOVUw7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGNvbm9sbCgiIFtzaW11bGF0ZWRdIik7CisgICAgICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChocG9zICs9IDEwKSA+IDc4KSBj b25vbGwoIiIpOworICAgICAgICAgICAgY29ub2woIiBbc2ltdWxhdGVkXSIpOyBocG9zID0gMDsK KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfU0tJUDogICAgICAgICAg ICAgICAgIC8qICBTa2lwcGVkICovCisgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0Ip IHsKKwkJaWYgKG4gPT0gU0tQX1hOWCkKKwkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJS RUQgKE5ldyBmaWxlKVxuIik7CisJCWVsc2UgaWYgKG4gPT0gU0tQX1hVUCkKKwkJICBwcmludGYo IjogV09VTEQgQkUgVFJBTlNGRVJSRUQgKFJlbW90ZSBmaWxlIG9sZGVyKVxuIik7CisJCWVsc2Ug aWYgKG4gPT0gU0tQX1NJTSkKKwkJICBwcmludGYoIjogV09VTEQgQkUgVFJBTlNGRVJSRURcbiIp OworCQllbHNlIGlmIChuID4gMCAmJiBuIDwgbnNrcmVhc29uKQorCQkgIHByaW50ZigiOiBTS0lQ UEVEICglcylcbiIsc2tyZWFzb25bbl0pOworCQllbHNlCisJCSAgcHJpbnRmKCI6IFNLSVBQRURc biIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZmRp c3BsYSA9PSBYWUZEX1MpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX1Mg JiYgZmJ1ZlswXSkgeyAvKiBDUlQgZGlzcGxheSAqLworICAgICAgICAgICAgICAgICAgICBjb25v bGwoIiIpOyAgICAgICAgIC8qIE5ldyBsaW5lICovCisgICAgICAgICAgICAgICAgICAgIGlmICh3 aGF0ICYgV19TRU5EKSBjb25vbCgiU2VuZGluZzogIik7IC8qIEFjdGlvbiAqLworICAgICAgICAg ICAgICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSBjb25vbCgiUmVjZWl2aW5nOiAiKTsK KyAgICAgICAgICAgICAgICAgICAgY29ub2woZmJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGlm ICgqYWJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYWJ1Zik7IC8qIE5hbWVzICovCisgICAgICAg ICAgICAgICAgICAgIGlmICgqYTJidWYpIGNvbm9sKCIgPT4gIik7IGNvbm9sKGEyYnVmKTsgLyog TmFtZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgKmZidWYgPSBOVUw7ICphYnVmID0gTlVMOyAq YTJidWYgPSBOVUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbm9sbCgi IFtza2lwcGVkXSIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICgoaHBvcyArPSAxMCkgPiA3OCkgY29ub2xsKCIiKTsKKwkgICAgY29ub2wo IiAiKTsgY29ub2woZmJ1Zik7CisgICAgICAgICAgICBjb25vbGwoIiBbc2tpcHBlZF0iKTsgaHBv cyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX0VSUjogICAg ICAgICAgICAgICAgICAvKiBFcnJvciAqLworICAgICAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlG RF9CKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI6IEVSUk9SOiAlc1xuIixzKTsKKyAgICAg ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25vbGwoIiIp OworICAgICAgICAgICAgY29ub2woIkVycm9yOiAiKTsgY29ub2xsKHMpOyBocG9zID0gMDsKKyAg ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfTVNHOiAgICAgICAgICAgICAg ICAgIC8qIE1lc3NhZ2UgKi8KKyNpZmRlZiBORVdGVFAKKyAgICAgICAgICAgIGlmIChmZGlzcGxh ID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgIGlmIChmdHAgJiYgZnRwX2RlYikKKwkJICBw cmludGYoIjogTUVTU0FHRTogJXNcbiIscyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgfQorI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgICAgICAgICAgY29ub2xsKCIiKTsK KyAgICAgICAgICAgIGNvbm9sKCJNZXNzYWdlOiAiKTsKKyAgICAgICAgICAgIGNvbm9sbChzKTsK KyAgICAgICAgICAgIGhwb3MgPSAwOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg Y2FzZSBTVF9SRUZVOiAgICAgICAgICAgICAgICAgLyogUmVmdXNlZCAqLworICAgICAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCI6IFJFRlVT RURcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo ZmRpc3BsYSA9PSBYWUZEX1MpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZE X1MgJiYgZmJ1ZlswXSkgeyAvKiBDUlQgZGlzcGxheSAqLworICAgICAgICAgICAgICAgICAgICBj b25vbGwoIiIpOyAgICAgICAgIC8qIE5ldyBsaW5lICovCisgICAgICAgICAgICAgICAgICAgIGlm ICh3aGF0ICYgV19TRU5EKSBjb25vbCgiU2VuZGluZzogIik7IC8qIEFjdGlvbiAqLworICAgICAg ICAgICAgICAgICAgICBlbHNlIGlmICh3aGF0ICYgV19SRUNWKSBjb25vbCgiUmVjZWl2aW5nOiAi KTsKKyAgICAgICAgICAgICAgICAgICAgY29ub2woZmJ1Zik7CisgICAgICAgICAgICAgICAgICAg IGlmICgqYWJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYWJ1Zik7ICAgICAgLyogTmFtZXMgKi8K KyAgICAgICAgICAgICAgICAgICAgaWYgKCphMmJ1ZikgY29ub2woIiA9PiAiKTsgY29ub2woYTJi dWYpOyAgICAvKiBOYW1lcyAqLworICAgICAgICAgICAgICAgICAgICAqZmJ1ZiA9IE5VTDsgKmFi dWYgPSBOVUw7ICphMmJ1ZiA9IE5VTDsKKyAgICAgICAgICAgICAgICAgICAgY29ub2xsKCIiKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29ub2woIlJlZnVzZWQ6ICIpOyBj b25vbGwocyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgY29ub2xsKCIiKTsKKyAgICAgICAgICAgIGNvbm9sKCJSZWZ1c2VkOiAiKTsgY29ub2xs KHMpOyBocG9zID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1Rf SU5DOiAgICAgICAgICAgICAgICAgIC8qIEluY29tcGxldGUgKi8KKyAgICAgICAgICAgIGlmIChm ZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgICAgIHByaW50ZigiOiBJTkNPTVBMRVRF XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoKGhwb3MgKz0gMTIpID4gNzgpIGNvbm9sbCgiIik7CisgICAgICAgICAgICBjb25vbGwo IiBbaW5jb21wbGV0ZV0iKTsgaHBvcyA9IDA7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29ub2xsKCIqKiogc2NyZWVuKCkgY2FsbGVkIHdp dGggYmFkIHN0YXR1cyAqKioiKTsKKyAgICAgICAgICAgIGhwb3MgPSAwOworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICB9CisKKyNpZmRlZiBNQUMKKyAgICAgIGNhc2UgU0NSX1BOOiAgICAg ICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgbnVtYmVyICovCisgICAgICAgIGlmIChmZGlzcGxh ID09IFhZRkRfQikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisJY2ttYWttc2co YnVmLDgwLHMsIjogIixja2x0b2EobiksTlVMTCk7CisgICAgICAgIGNvbm9sKGJ1Zik7IGhwb3Mg Kz0gKGludClzdHJsZW4oYnVmKTsgcmV0dXJuOworI2VuZGlmIC8qIE1BQyAqLworCisgICAgICBj YXNlIFNDUl9QVDogICAgICAgICAgICAgICAgICAgICAgLyogUGFja2V0IHR5cGUgb3IgcHNldWRv dHlwZSAqLworICAgICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJu OworICAgICAgICBpZiAoYyA9PSAnWScpIHJldHVybjsgICAgICAgICAgIC8qIERvbid0IGJvdGhl ciB3aXRoIEFDS3MgKi8KKyAgICAgICAgaWYgKGMgPT0gJ0QnKSB7ICAgICAgICAgICAgICAgICAv KiBJbiBkYXRhIHRyYW5zZmVyIHBoYXNlLCAqLworICAgICAgICAgICAgc2hvd3BrdChOVUwpOyAg ICAgICAgICAgICAgIC8qIHNob3cgcHJvZ3Jlc3MuICovCisgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgIH0KKyNpZm5kZWYgQU1JR0EKKyAgICAgICAgaWYgKGhwb3MrKyA+IDc3KSB7ICAgICAg ICAgICAgICAvKiBJZiBuZWFyIHJpZ2h0IG1hcmdpbiwgKi8KKyAgICAgICAgICAgIGNvbm9sbCgi Iik7ICAgICAgICAgICAgICAgICAvKiBTdGFydCBuZXcgbGluZSAqLworICAgICAgICAgICAgaHBv cyA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGFuZCByZXNldCBjb3VudGVyLiAqLworICAgICAg ICB9CisjZW5kaWYgLyogQU1JR0EgKi8KKyAgICAgICAgaWYgKGMgPT0gJ1onICYmIGZkaXNwbGEg PT0gWFlGRF9TKQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNv bm9jKGMpOyAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgdGhlIHBhY2tldCB0eXBlLiAq LworI2lmZGVmIEFNSUdBCisgICAgICAgIGlmIChjID09ICdHJykgY29ub2xsKCIiKTsgICAgICAg LyogTmV3IGxpbmUgYWZ0ZXIgRyBwYWNrZXRzICovCisjZW5kaWYgLyogQU1JR0EgKi8KKyAgICAg ICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9UQzogICAgICAgICAgICAgICAgICAgICAgLyog VHJhbnNhY3Rpb24gY29tcGxldGUgKi8KKyAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfTk9U RSk7CisgICAgICAgIGlmIChmZGlzcGxhID09IFhZRkRfQikgeyAgICAgICAgLyogQnJpZWYgZGlz cGxheS4uLiAqLworICAgICAgICAgICAgaWYgKGZpbGNudCA+IDEpIHsKKyAgICAgICAgICAgICAg ICBsb25nIGZ4OworICAgICAgICAgICAgICAgIGZ4ID0gZmlsY250IC0gZmlscmVqOworICAgICAg ICAgICAgICAgIHByaW50ZigiIFNVTU1BUlk6ICVsZCBmaWxlJXMiLCBmeCwgKChmeCA9PSAxKSA/ ICIiIDogInMiKSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIsICVzIGJ5dGUlcyIsIGNrZnN0 b2EodGZjKSwgKCh0ZmMgPT0gMSkgPyAiIiA6ICJzIikpOworI2lmZGVmIEdGVElNRVIKKyAgICAg ICAgICAgICAgICBwcmludGYoIiwgJTAuM2Ygc2VjLCAlbGQgY3BzIiwgZnB0c2VjcywgdGZjcHMp OworI2Vsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIiwgJWxkIHNlYywgJWxkIGNwcyIsIHRz ZWNzLCB0ZmNwcyk7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgICAgIHByaW50 ZigiLlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBj b25vbGwoIiIpOworICAgICAgICB9CisjaWZkZWYgVU5JWAorICAgICAgICBmZmx1c2goc3Rkb3V0 KTsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1Jf RU06ICAgICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgaWYg KGZkaXNwbGEgPT0gWFlGRF9CKSB7CisgICAgICAgICAgICBwcmludGYoIiBFUlJPUjogJXNcbiIs cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29ub2xsKCIiKTsg Y29ub2MoJz8nKTsgY29ub2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOworCisgICAgICBjYXNlIFND Ul9XTTogICAgICAgICAgICAgICAgICAgICAgLyogV2FybmluZyBtZXNzYWdlICovCisgICAgICAg IGlmIChmZGlzcGxhID09IFhZRkRfQikgeworICAgICAgICAgICAgcHJpbnRmKCIgV0FSTklORzog JXNcbiIscyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29ub2xs KCIiKTsgY29ub2xsKHMpOyBocG9zID0gMDsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9NUzog ICAgICAgICAgICAgICAgICAgICAgLyogTWVzc2FnZSBmcm9tIG90aGVyIEtlcm1pdCAqLworICAg ICAgICBpZiAoZmRpc3BsYSA9PSBYWUZEX0IpIHsKKyAgICAgICAgICAgIHByaW50ZigiIE1FU1NB R0U6ICVzXG4iLHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNv bm9sbCgiIik7IGNvbm9sbChzKTsgaHBvcyA9IDA7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1Jf VFU6ICAgICAgICAgICAgICAgICAgICAgIC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KKyAgICAgICAg aWYgKGZkaXNwbGEgPT0gWFlGRF9CKQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCho cG9zICs9IGxlbikgPiA3NykgeyBjb25vbGwoIiIpOyBocG9zID0gbGVuOyB9CisgICAgICAgIGNv bm9sKHMpOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1ROOiAgICAgICAgICAgICAgICAgICAg ICAvKiBUZXh0IGRlbGltaXRlZCBhdCBiZWdpbm5pbmcgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEg PT0gWFlGRF9CKQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29ub2xsKCIiKTsgY29ub2wo cyk7IGhwb3MgPSBsZW47IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfVFo6ICAgICAgICAgICAg ICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IGVuZCAqLworICAgICAgICBpZiAoZmRpc3Bs YSA9PSBYWUZEX0IpCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoKGhwb3MgKz0gbGVu KSA+IDc3KSB7IGNvbm9sbCgiIik7IGhwb3MgPSBsZW47IH0KKyAgICAgICAgY29ub2xsKHMpOyBy ZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1FFOiAgICAgICAgICAgICAgICAgICAgICAvKiBRdWFu dGl0eSBlcXVhbHMgKi8KKyAgICAgICAgaWYgKGZkaXNwbGEgPT0gWFlGRF9CKQorICAgICAgICAg IHJldHVybjsKKwlja21ha21zZyhidWYsODAscywiOiAiLGNrbHRvYShuKSxOVUxMKTsKKyAgICAg ICAgY29ub2xsKGJ1Zik7IGhwb3MgPSAwOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0NXOiAg ICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBmdWxsc2NyZWVuIHdpbmRvdyAqLworICAgICAg ICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIHdpbmRvdyB0byBjbG9zZSAq LworCisgICAgICBjYXNlIFNDUl9DRDoKKyAgICAgICAgcmV0dXJuOworCisgICAgICBkZWZhdWx0 OgorICAgICAgICBjb25vbGwoIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgb2JqZWN0ICoq KiIpOworICAgICAgICBocG9zID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKyNlbmRp ZiAvKiBOT0RJU1BMQVkgKi8KKworLyogIEUgUiBNIFMgRyAgLS0gIE5vbmZhdGFsIGVycm9yIG1l c3NhZ2UgICovCisKKy8qIFNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIHByaW50aW5nIHRoZSBtZXNz YWdlIHRleHQgZnJvbSBhbiBFcnJvciBwYWNrZXQuICovCisKK1ZPSUQKK2VybXNnKG1zZykgY2hh ciAqbXNnOyB7ICAgICAgICAgICAgICAgICAvKiBQcmludCBlcnJvciBtZXNzYWdlICovCisgICAg ZGVidWcoRjExMCwiZXJtc2ciLG1zZywwKTsKKyAgICBpZiAobG9jYWwpCisgICAgICB4eHNjcmVl bihTQ1JfRU0sMCwwTCxtc2cpOworICAgIHRsb2coRjExMCwiUHJvdG9jb2wgRXJyb3I6Iixtc2cs MEwpOworfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCitWT0lECitzZXRzZXNsb2coeCkgaW50IHg7 IHsKKyAgICBzZXNsb2cgPSB4OworI2lmZGVmIEtVSQorICAgIEt1aVNldFByb3BlcnR5KEtVSV9U RVJNX0NBUFRVUkUseCwwKTsKKyNlbmRpZiAvKiBLVUkgKi8KK30KKworVk9JRAorZG9jbGVhbihm YykgaW50IGZjOyB7ICAgICAgICAgICAgICAgICAgIC8qIEdlbmVyYWwgY2xlYW51cCAqLworI2lm ZGVmIE9TMk9SVU5JWAorICAgIGV4dGVybiBpbnQgdHR5ZmQ7CisjZW5kaWYgLyogT1MyT1JVTklY ICovCisgICAgZXh0ZXJuIGludCAga2VlcDsKKyAgICBleHRlcm4gaW50IGV4aXRoYW5ndXA7Cisj aWZuZGVmIE5PWEZFUgorICAgIGV4dGVybiBjaGFyIGZpbG5hbVtdOworI2VuZGlmIC8qIE5PWEZF UiAqLworI2lmbmRlZiBOT0lDUAorICAgIGludCB4OworCisgICAgaWYgKGZjID4gMCkKKyAgICAg IGRvc3RvcCgpOyAgICAgICAgICAgICAgICAgLyogU3RvcCBhbGwgY29tbWFuZCBmaWxlcyBhbmQg ZW5kIG1hY3JvcyAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9YRkVSCisgICAg aWYgKHBrdGxvZykgeworICAgICAgICAqcGt0ZmlsID0gJ1wwJzsKKyAgICAgICAgcGt0bG9nID0g MDsKKyAgICAgICAgemNsb3NlKFpQRklMRSk7CisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLwor ICAgIGlmIChzZXNsb2cpIHsKKyAgICAgICAgKnNlc2ZpbCA9ICdcMCc7CisgICAgICAgIHNldHNl c2xvZygwKTsKKyAgICAgICAgemNsb3NlKFpTRklMRSk7CisgICAgfQorI2lmZGVmIFRMT0cKKyAg ICBpZiAodHJhbG9nKSB7CisgICAgICAgIHRsb2coRjEwMCwiVHJhbnNhY3Rpb24gTG9nIENsb3Nl ZCIsIiIsMEwpOworICAgICAgICAqdHJhZmlsID0gJ1wwJzsKKyAgICAgICAgdHJhbG9nID0gMDsK KyAgICAgICAgemNsb3NlKFpURklMRSk7CisgICAgfQorI2VuZGlmIC8qIFRMT0cgKi8KKworICAg IGRlYnVnKEYxMDAsImRvY2xlYW4gY2FsbGluZyBkb2xvZ2VuZCIsIiIsMCk7CisgICAgZG9sb2dl bmQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIGN1cnJlbnQgbG9nIHJlY29yZCBp ZiBhbnkgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgaWYgKGRpYWxvZykgeyAgICAgICAgICAgICAg ICAgICAgICAgLyogSWYgY29ubmVjdGlvbiBsb2cgb3BlbiAqLworCWRpYWxvZyA9IDA7CisgICAg ICAgICpkaWFmaWwgPSAnXDAnOyAgICAgICAgICAgICAgICAgLyogY2xvc2UgaXQuICovCisgICAg ICAgIHpjbG9zZShaRElGSUwpOworICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZm5k ZWYgTk9JQ1AKKyNpZm5kZWYgTk9TUEwKKyAgICB6Y2xvc2UoWlJGSUxFKTsgICAgICAgICAgICAg ICAgICAgICAvKiBSRUFEIGFuZCBXUklURSBmaWxlcywgaWYgYW55LiAqLworICAgIHpjbG9zZSha V0ZJTEUpOworI2lmbmRlZiBOT1hGRVIKKyAgICB6Y2xvc2UoWklGSUxFKTsgICAgICAgICAgICAg ICAgICAgICAvKiBBbmQgb3RoZXIgZmlsZXMgdG9vICovCisgICAgeCA9IGNoa2ZuKFpPRklMRSk7 CQkJLyogRG93bmxvYWQgaW4gcHJvZ3Jlc3M/ICovCisgICAgZGVidWcoRjExMSwiZG9jbGVhbiBj aGtmbiBaT0ZJTEUiLGZpbG5hbSx4KTsKKyAgICBkZWJ1ZyhGMTExLCJkb2NsZWFuIGtlZXAiLCIi LGtlZXApOworICAgIHpjbG9zZShaT0ZJTEUpOwkJCS8qIENsb3NlIG91dHB1dCBmaWxlICovCisg ICAgaWYgKHggPiAwICYmICFrZWVwKSB7CQkvKiBJZiBpdCB3YXMgYmVpbmcgZG93bmxvYWRlZCAq LworCWlmIChmaWxuYW1bMF0pCisJICB4ID0gemRlbGV0KGZpbG5hbSk7CQkvKiBEZWxldGUgaWYg SU5DT01QTEVURSA9IERJU0NBUkQgKi8KKwlkZWJ1ZyhGMTExLCJkb2NsZWFuIGRvd25sb2FkIGZp bGVuYW1lIixmaWxuYW0seCk7CisgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIHpjbG9z ZShaU1lTRk4pOworICAgIHpjbG9zZShaTUZJTEUpOworCisgICAgaWYgKGZjIDwgMSkgeyAgICAg ICAgICAgICAgICAgICAgICAgLyogUkVTRVRpbmcsIG5vdCBFWElUaW5nICovCisjaWZkZWYgREVC VUcKKyAgICAgICAgaWYgKGRlYmxvZykgeyAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSB0aGUg ZGVidWcgbG9nLiAqLworICAgICAgICAgICAgKmRlYmZpbCA9ICdcMCc7CisgICAgICAgICAgICBk ZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgIH0KKyNlbmRp ZiAvKiBERUJVRyAqLworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICov CisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisgICAgZGVidWcoRjEwMSwi ZG9jbGVhbiBleGl0aGFuZ3VwIiwiIixleGl0aGFuZ3VwKTsKKyAgICBpZiAobG9jYWwgJiYgZXhp dGhhbmd1cCkgewkJLyogQ2xvc2UgY29tbXVuaWNhdGlvbiBjb25uZWN0aW9uICovCisgICAgICAg IGV4dGVybiBpbnQgaGFzbG9jazsKKwlpbnQgeDsKKwkKKwl4ID0gdHRjaGsoKTsKKwlkZWJ1ZyhG MTAxLCJkb2NsZWFuIHR0Y2hrKCkiLCIiLHgpOworI2lmZGVmIE9TMk9SVU5JWAorCWRlYnVnKEYx MDEsImRvY2xlYW4gdHR5ZmQiLCIiLHR0eWZkKTsKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAg ICAgICAgaWYgKHggPj0gMAorI2lmZGVmIE9TMgorICAgICAgICAgICAgfHwgdHR5ZmQgIT0gLTEK KyNlbHNlCisjaWZkZWYgVU5JWAorICAgICAgICAgICAgfHwgaGFzbG9jayAgICAgICAgICAgICAg ICAgIC8qIE1ha2Ugc3VyZSB3ZSBnZXQgbG9ja2ZpbGUhICovCisgICAgICAgICAgICB8fCAoIW5l dHdvcmsgJiYgdHR5ZmQgPiAtMSkKKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogT1MyICov CisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgd2FzY2xvc2VkLCB3aHlj bG9zZWQ7CisJICAgIGRlYnVnKEYxMDAsImRvY2xlYW4gaGFuZ2luZyB1cCBhbmQgY2xvc2luZyIs IiIsMCk7CisgICAgICAgICAgICBpZiAobXNnZmxnKSB7CisjaWZkZWYgVU5JWAorICAgICAgICAg ICAgICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmIC8qIFVOSVggKi8KKyAgICAgICAgICAgICAg ICBwcmludGYoIkNsb3NpbmcgJXMuLi4iLHR0bmFtZSk7CisgICAgICAgICAgICB9CisjaWZuZGVm IE5PRElBTAorICAgICAgICAgICAgbWRtaHVwKCk7ICAgICAgICAgICAgICAgICAgIC8qIEhhbmd1 cCB0aGUgbW9kZW0/Pz8gKi8KKyNlbmRpZiAvKiBOT0RJQUwgKi8KKyAgICAgICAgICAgIHR0Y2xv cygwKTsgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBleHRlcm5hbCBsaW5lLCBpZiBhbnkgKi8K KyAgICAgICAgICAgIGlmIChtc2dmbGcpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIk9LXG4i KTsKKyNpZmRlZiBVTklYCisgICAgICAgICAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYg LyogVU5JWCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdhc2Nsb3NlZCkgewor ICAgICAgICAgICAgICAgIHdoeWNsb3NlZCA9IFdDX0NMT1M7CisjaWZuZGVmIE5PU1BMCisgICAg ICAgICAgICAgICAgaWYgKG5tYWMpIHsgICAgICAgICAgICAgLyogQW55IG1hY3JvcyBkZWZpbmVk PyAqLworICAgICAgICAgICAgICAgICAgICBpbnQgazsgICAgICAgICAgICAgIC8qIFllcyAqLwor ICAgICAgICAgICAgICAgICAgICBrID0gbWxvb2sobWFjdGFiLCJvbl9jbG9zZSIsbm1hYyk7ICAv KiBMb29rIHRoaXMgdXAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPj0gMCkgeyAgICAg ICAgICAgICAgICAgICAgICAgLyogSWYgZm91bmQsICovCisgICAgICAgICAgICAgICAgICAgICAg ICB3YXNjbG9zZWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJpbnRmKCJPTl9D TE9TRSBET0NMRUFOXG4iKTsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICoobWFjdGFiW2td Lmt3ZCkgPSBOVUw7ICAgICAgICAgLyogU2VlIGNvbW1lbnQgYmVsb3cgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChkb2RvKGssY2tpdG9hKHdoeWNsb3NlZCksMCkgPiAtMSkgLyogc2V0 IGl0IHVwLCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIoMSk7ICAgICAgICAg ICAgICAgICAgICAvKiBhbmQgZXhlY3V0ZSBpdCAqLworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgICAgICAgd2Fz Y2xvc2VkID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBja3N0cm5jcHko dHRuYW1lLGRmdHR5LFRUTkFNTEVOKTsgLyogUmVzdG9yZSBkZWZhdWx0IHR0eSAqLworICAgICAg ICBsb2NhbCA9IGRmbG9jOyAgICAgICAgICAgICAgICAgIC8qIEFuZCBkZWZhdWx0IHJlbW90ZS9s b2NhbCBzdGF0dXMgKi8KKyAgICB9CisjaWZkZWYgREVCVUcKKyAgICBlbHNlIGlmIChsb2NhbCkg ZGVidWcoRjEwMCwiZG9jbGVhbiBoYW5ndXAvY2xvc2Ugc2tpcHBlZCIsIiIsMCk7CisjZW5kaWYg LyogREVCVUcgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRlZiBORVdGVFAKKyAgICBm dHBieWUoKTsJCQkJLyogSWYgRlRQIGNvbm5lY3Rpb24gb3BlbiwgY2xvc2UgaXQgKi8KKyNlbmRp ZiAvKiBORVdGVFAgKi8KKworI2lmZGVmIElLU0QKKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICB0 dGNsb3MoMCk7CQkJLyogSWYgSUtTRCwgY2xvc2Ugc29ja2V0ICovCisjZW5kaWYgLyogSUtTRCAq LworCisjaWZuZGVmIE5PU1BMCisvKgorICBJZiBhIG1hY3JvIG5hbWVkICJvbl9leGl0IiBpcyBk ZWZpbmVkLCBleGVjdXRlIGl0LiAgQWxzbyByZW1vdmUgaXQgZnJvbSB0aGUKKyAgbWFjcm8gdGFi bGUsIGluIGNhc2UgaXRzIGRlZmluaXRpb24gaW5jbHVkZXMgYW4gRVhJVCBvciBRVUlUIGNvbW1h bmQsIHdoaWNoCisgIHdvdWxkIGNhdXNlIG11Y2ggcmVjdXJzaW9uIGFuZCB3b3VsZCBwcmV2ZW50 IHRoZSBwcm9ncmFtIGZyb20gZXZlciBhY3R1YWxseQorICBFWElUaW5nLgorKi8KKyAgICBpZiAo bm1hYykgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICov CisgICAgICAgIGludCBrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWWVzICovCisgICAg ICAgIGNoYXIgKiBjbWQgPSAib25fZXhpdCI7ICAgICAgICAgLyogTVNWQyAyLnggY29tcGlsZXIg ZXJyb3IgKi8KKyAgICAgICAgayA9IG1sb29rKG1hY3RhYixjbWQsbm1hYyk7ICAgICAvKiBMb29r IHVwICJvbl9leGl0IiAqLworICAgICAgICBpZiAoayA+PSAwKSB7ICAgICAgICAgICAgICAgICAg IC8qIElmIGZvdW5kLCAqLworI2lmZGVmIENPTU1FTlQKKwkgICAgLyogVGhpcyBtYWtlcyBhIG1l c3MgaWYgT05fRVhJVCBpdHNlbGYgZXhlY3V0ZXMgbWFjcm9zICovCisgICAgICAgICAgICAqKG1h Y3RhYltrXS5rd2QpID0gTlVMOyAgICAgLyogcG9rZSBpdHMgbmFtZSBmcm9tIHRoZSB0YWJsZSwg Ki8KKyNlbHNlCisJICAgIC8qIFJlcGxhY2UgdGhlIGtleXdvcmQgd2l0aCBzb21ldGhpbmcgdGhh dCBkb2Vzbid0IHdyZWNrIHRoZSAqLworCSAgICAvKiBvcmRlciBvZiB0aGUga2V5d29yZCB0YWJs ZSAqLworCSAgICBja3N0cm5jcHkobWFjdGFiW2tdLmt3ZCwib25fZXh4eCIsOCk7CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICAgICAgaWYgKGRvZG8oaywiIiwwKSA+IC0xKSAgICAgIC8q IHNldCBpdCB1cCwgKi8KKyAgICAgICAgICAgICAgcGFyc2VyKDEpOyAgICAgICAgICAgICAgICAv KiBhbmQgZXhlY3V0ZSBpdCAqLworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIE5PU1BMICov CisvKgorICBQdXQgY29uc29sZSB0ZXJtaW5hbCBiYWNrIHRvIG5vcm1hbC4gIFRoaXMgaXMgZG9u ZSBoZXJlIGJlY2F1c2UgdGhlCisgIE9OX0VYSVQgbWFjcm8gY2FsbHMgdGhlIHBhcnNlciwgd2hp Y2ggbWVkZGxlcyB3aXRoIGNvbnNvbGUgdGVybWluYWwgbW9kZXMuCisqLworICAgIGNvbnJlcygp OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgY29uc29sZSB0ZXJtaW5hbC4g Ki8KKworI2lmZGVmIENPTU1FTlQKKy8qIFNob3VsZCBiZSBubyBuZWVkIGZvciB0aGlzLCBhbmQg bWF5YmUgaXQncyBzY3Jld2luZyB0aGluZ3MgdXA/ICovCisgICAgY29ubm9pKCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgY29uc29sZSBpbnRlcnJ1cHQgdHJhcHMgKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCisKKyAgICAvKiBEZWxldGUgdGhlIFN0YXJ0dXAgRmlsZSBp ZiB3ZSBhcmUgc3VwcG9zZWQgdG8uICovCisjaWZuZGVmIE5PSUNQCisgICAgeworICAgICAgICBl eHRlcm4gaW50IERlbGV0ZVN0YXJ0dXBGaWxlOworICAgICAgICBkZWJ1ZyhGMTExLCJkb2NsZWFu IERlbGV0ZVN0YXJ0dXBGaWxlIixjbWRmaWwsRGVsZXRlU3RhcnR1cEZpbGUpOworICAgICAgICBp ZiAoRGVsZXRlU3RhcnR1cEZpbGUpIHsKKyAgICAgICAgICAgIGludCByYyA9IHpkZWxldChjbWRm aWwpOworICAgICAgICAgICAgZGVidWcoRjExMSwiZG9jbGVhbiB6ZGVsZXQiLGNtZGZpbCxyYyk7 CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogTk9JQ1AgKi8KKyAgICBzeXNjbGVhbnVwKCk7 ICAgICAgICAgICAgICAgICAgICAgICAvKiBTeXN0ZW0tZGVwZW5kZW50IGNsZWFudXAsIGxhc3Qg Ki8KK30KKworLyogIEQgTyBFIFggSSBUICAtLSAgRXhpdCBmcm9tIHRoZSBwcm9ncmFtLiAgKi8K KworLyoKKyAgRmlyc3QgYXJnIGlzIGdlbmVyYWwsIHN5c3RlbS1pbmRlcGVuZGVudCBzeW1ib2w6 IEdPT0RfRVhJVCBvciBCQURfRVhJVC4KKyAgSWYgc2Vjb25kIGFyZyBpcyAtMSwgdGFrZSAxc3Qg YXJnIGxpdGVyYWxseS4KKyAgSWYgc2Vjb25kIGFyZyBpcyBub3QgLTEsIHdvcmsgaXQgaW50byB0 aGUgZXhpdCBjb2RlLgorKi8KK1ZPSUQKK2RvZXhpdChleGl0c3RhdCxjb2RlKSBpbnQgZXhpdHN0 YXQsIGNvZGU7IHsKKyAgICBleHRlcm4gaW50IHhfbG9nZ2VkLCBxdWl0dGluZzsKKyNpZmRlZiBP UzIKKyAgICBleHRlcm4gaW50IGRpc3BsYXlfZGVtbzsKKyAgICBleHRlcm4gaW50IFN5c0luaXRl ZDsKKyNlbmRpZiAvKiBPUzIgKi8KKyNpZmRlZiBDS19LRVJCRVJPUworI2lmZGVmIEtSQjQKKyAg ICBleHRlcm4gaW50IGtyYjRfYXV0b2RlbDsKKyNlbmRpZiAvKiBLUkI0ICovCisjaWZkZWYgS1JC NQorICAgIGV4dGVybiBpbnQga3JiNV9hdXRvZGVsOworI2VuZGlmIC8qIEtSQjUgKi8KKyNlbmRp ZiAvKiBDS19LRVJCRVJPUyAqLworCisjaWZkZWYgVk1TCisgICAgY2hhciBlbnZzdHJbNjRdOwor ICAgIHN0YXRpYyAkREVTQ1JJUFRPUihzeW1uYW0sIkNLRVJNSVRfU1RBVFVTIik7CisgICAgc3Rh dGljIHN0cnVjdCBkc2MkZGVzY3JpcHRvcl9zIHN5bXZhbDsKKyNlbmRpZiAvKiBWTVMgKi8KKyAg ICBpbnQgaTsKKworI2lmZGVmIERFQlVHCisjaWZkZWYgVVNFX0xVQ0FDSEUKKyAgICBleHRlcm4g bG9uZyBsdWNhbGxzLCBsdWhpdHMsIHh4aGl0cywgbHVsb29wOworICAgIGV4dGVybiBpbnQgbHVz aXplOworI2VuZGlmIC8qIFVTRV9MVUNBQ0hFICovCisjaWZuZGVmIE5PU1BMCisgICAgZXh0ZXJu IGludCBjbWRzdGF0c1tdOworI2VuZGlmIC8qIE5PU1BMICovCisKKyAgICBxdWl0dGluZysrOwor CisjaWZkZWYgT1MyCisgICAgaWYgKCAhU3lzSW5pdGVkICkgeworICAgICAgICBzdGF0aWMgaW50 IGluaXRpbmcgPSAwOworICAgICAgICBpZiAoIGluaXRpbmcgKQorCSAgZXhpdCgyNTMpOworICAg ICAgICBpbml0aW5nID0gMTsKKyAgICAgICAgc3lzaW5pdCgpOworICAgIH0KKyNlbmRpZiAvKiBP UzIgKi8KKworICAgIGlmIChkZWJsb2cpIHsKKyNpZmRlZiBVU0VfTFVDQUNIRQorCWRlYnVnKEYx MDEsImxvb2t1cCBjYWNoZSBzaXplIiwiIixsdXNpemUpOworCWRlYnVnKEYxMDEsImxvb2t1cCBj YWxscyAuLi4uIiwiIixsdWNhbGxzKTsKKwlkZWJ1ZyhGMTAxLCJsb29rdXAgY2FjaGUgaGl0cyIs IiIsbHVoaXRzKTsKKwlkZWJ1ZyhGMTAxLCJsb29rdXAgc3RhcnQgaGl0cyIsIiIseHhoaXRzKTsK KwlkZWJ1ZyhGMTAxLCJsb29rdXAgbG9vcCBpdGVyYXRpb25zIiwiIixsdWxvb3ApOworI2VuZGlm IC8qIFVTRV9MVUNBQ0hFICovCisjaWZuZGVmIE5PU1BMCisJZm9yIChpID0gMDsgaSA8IDI1Njsg aSsrKSB7CisJICAgIGlmIChjbWRzdGF0c1tpXSkKKwkgICAgICBkZWJ1ZyhGMTExLCJDTVNUQVRT Iixja2l0b2EoaSksY21kc3RhdHNbaV0pOworCX0KKyNlbmRpZiAvKiBOT1NQTCAqLworCWRlYnVn KEYxMDEsImRvZXhpdCBleGl0c3RhdCIsIiIsZXhpdHN0YXQpOworCWRlYnVnKEYxMDEsImRvZXhp dCBjb2RlIiwiIixjb2RlKTsKKwlkZWJ1ZyhGMTAxLCJkb2V4aXQgeGl0c3RhIiwiIix4aXRzdGEp OworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgQ0tfS0VSQkVST1MKKyAgICAv KiBJZiB3ZSBhcmUgYXV0b21hdGljYWxseSBkZXN0cm95aW5nIEtlcmJlcm9zIGNyZWRlbnRpYWxz IG9uIEV4aXQgKi8KKyAgICAvKiBkbyBpdCBub3cuICovCisjaWZkZWYgS1JCNAorICAgIGlmIChr cmI0X2F1dG9kZWwgPT0gS1JCX0RFTF9FWCkgeworICAgICAgICBleHRlcm4gc3RydWN0IGtyYl9v cF9kYXRhIGtyYl9vcDsKKyAgICAgICAga3JiX29wLnZlcnNpb24gPSA0OworICAgICAgICBrcmJf b3AuY2FjaGUgPSBOVUxMOworICAgICAgICBja19rcmI0X2Rlc3Ryb3koJmtyYl9vcCk7CisgICAg fQorI2VuZGlmIC8qIEtSQjQgKi8KKyNpZmRlZiBLUkI1CisgICAgaWYgKGtyYjVfYXV0b2RlbCA9 PSBLUkJfREVMX0VYKSB7CisgICAgICAgIGV4dGVybiBzdHJ1Y3Qga3JiX29wX2RhdGEga3JiX29w OworICAgICAgICBleHRlcm4gY2hhciAqIGtyYjVfZF9jYzsKKyAgICAgICAga3JiX29wLnZlcnNp b24gPSA1OworICAgICAgICBrcmJfb3AuY2FjaGUgPSBrcmI1X2RfY2M7CisgICAgICAgIGNrX2ty YjVfZGVzdHJveSgma3JiX29wKTsKKyAgICB9CisjZW5kaWYgLyogS1JCNSAqLworI2VuZGlmIC8q IENLX0tFUkJFUk9TICovCisKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIE9TMgorICAgIGlmIChT eXNJbml0ZWQpCisgICAgeworI2lmZGVmIERDTURCVUYKKyAgICAgICAgZXh0ZXJuIHN0cnVjdCBj bWRwdHIgKmNtZHN0azsKKyNlbHNlCisgICAgICAgIGV4dGVybiBzdHJ1Y3QgY21kcHRyIGNtZHN0 a1tdOworI2VuZGlmIC8qIERDTURCVUYgKi8KKyAgICAgICAgZXh0ZXJuIGludCB0dF9zdGF0dXNb XTsKKyAgICAgICAgZXh0ZXJuIGludCB2bW9kZTsKKworICAgICAgICAvKiBJZiB0aGVyZSBpcyBh IGRlbW8gc2NyZWVuIHRvIGJlIGRpc3BsYXllZCwgZGlzcGxheSBpdCAqLworICAgICAgICBpZiAo ZGlzcGxheV9kZW1vKSB7CisgICAgICAgICAgICBkZW1vc2NybihWQ01EKTsKKyAgICAgICAgICAg IGRpc3BsYXlfZGVtbyA9IDA7CisgICAgICAgIH0KKyNpZm5kZWYgS1VJCisgICAgICAgIC8qIFRo aXMgaXMgZ29pbmcgdG8gYmUgaGlkZW91cy4gIElmIHdlIGhhdmUgYSBzdGF0dXMgbGluZSAqLwor ICAgICAgICAvKiBpbiB0aGUgY29tbWFuZCB3aW5kb3cgdHVybiBpdCBvZmYgYmVmb3JlIHdlIGV4 aXQuICAgICAgKi8KKworICAgICAgICBpZiAoIHR0X3N0YXR1c1tWQ01EXSAmJiB2bW9kZSA9PSBW Q01EICkgeworICAgICAgICAgICAgZG9tYWMoIl9jbGVhcl9zdGF0dXNsaW5lIiwic2V0IGNvbW1h bmQgc3RhdHVzbGluZSBvZmYiLAorICAgICAgICAgICAgICAgICAgIGNtZHN0a1tjbWRsdmxdLmNj Zmxncyk7CisgICAgICAgICAgICBkZWxtYWMoIl9jbGVhcl9zdGF0dXNsaW5lIiwxKTsKKyAgICAg ICAgICAgIFJlcXVlc3RTY3JlZW5NdXRleCgtMSk7CisgICAgICAgICAgICBWc2NybklzRGlydHko dm1vZGUpOworICAgICAgICAgICAgUmVsZWFzZVNjcmVlbk11dGV4KCk7CisgICAgICAgICAgICB3 aGlsZSAoIElzVnNjcm5EaXJ0eSh2bW9kZSkgKQorICAgICAgICAgICAgICAgIG1zbGVlcCgyMDAp OworICAgICAgICAgICAgUmVxdWVzdFNjcmVlbk11dGV4KC0xKTsKKyAgICAgICAgICAgIFJlbGVh c2VTY3JlZW5NdXRleCgpOworICAgICAgICB9CisjZW5kaWYgLyogS1VJICovCisgICAgICAgIERp YWxlclNlbmQoT1BUX0tFUk1JVF9FWElULGV4aXRzdGF0KTsKKyNpZm5kZWYgS1VJCisgICAgICAg IGRlYnVnKEYxMDAsImRvZXhpdCBhYm91dCB0byBtc2xlZXAiLCIiLDApOworCisgICAgICAgIGlm ICggaXNXaW45NSgpICkKKyAgICAgICAgICAgIG1zbGVlcCgyNTApOworI2VuZGlmIC8qIEtVSSAq LworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKyNpZmRl ZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4KKyAgICBpZiAoaW5zZXJ2ZXIgJiYgeF9sb2dnZWQpIHsK KyNpZm5kZWYgTk9TUEwKKy8qCisgIElmIGEgbWFjcm8gbmFtZWQgIm9uX2xvZ291dCIgaXMgZGVm aW5lZCwgZXhlY3V0ZSBpdC4gIEFsc28gcmVtb3ZlIGl0IGZyb20gdGhlCisgIG1hY3JvIHRhYmxl LCBpbiBjYXNlIGl0cyBkZWZpbml0aW9uIGluY2x1ZGVzIGFuIEVYSVQgb3IgUVVJVCBjb21tYW5k LCB3aGljaAorICB3b3VsZCBjYXVzZSBtdWNoIHJlY3Vyc2lvbiBhbmQgd291bGQgcHJldmVudCB0 aGUgcHJvZ3JhbSBmcm9tIGV2ZXIgYWN0dWFsbHkKKyAgRVhJVGluZy4KKyovCisJaWYgKG5tYWMp IHsJCQkvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCisJICAgIGludCBrOwkJCS8qIFllcyAqLwor CSAgICBjaGFyICogY21kID0gIm9uX2xvZ291dCI7CS8qIE1TVkMgMi54IGNvbXBpbGVyIGVycm9y ICovCisJICAgIGsgPSBtbG9vayhtYWN0YWIsY21kLG5tYWMpOwkvKiBMb29rIHVwICJvbl9sb2dv dXQiICovCisJICAgIGlmIChrID49IDApIHsJCS8qIElmIGZvdW5kLCAqLworCQkqKG1hY3RhYltr XS5rd2QpID0gTlVMOwkvKiBwb2tlIGl0cyBuYW1lIGZyb20gdGhlIHRhYmxlLCAqLworCQlpZiAo ZG9kbyhrLCIiLDApID4gLTEpCS8qIHNldCBpdCB1cCwgKi8KKwkJICBwYXJzZXIoMSk7CQkvKiBh bmQgZXhlY3V0ZSBpdCAqLworCSAgICB9CisJfQorI2VuZGlmIC8qIE5PU1BMICovCisJenZsb2dv dXQoKTsKKyAgICB9CisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNlbmRpZiAvKiBJS1NEICovCisK KyAgICBkZWJ1ZyhGMTAwLCJkb2V4aXQgYWJvdXQgdG8gZG9jbGVhbiIsIiIsMCk7CisgICAgZG9j bGVhbigxKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2xlYW4gdXAgbW9zdCB0aGluZ3Mg Ki8KKworI2lmZGVmIFZNUworICAgIGlmIChjb2RlID09IC0xKQorICAgICAgY29kZSA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIFNpbmNlIHdlIHNldCB0d28gZGlmZmVyZW50IGl0ZW1z ICovCisgICAgc3ByaW50ZihlbnZzdHIsIiVkIiwgZXhpdHN0YXQgfCBjb2RlKTsgLyogU0FGRSAq LworICAgIHN5bXZhbC5kc2Mkd19sZW5ndGggPSAoaW50KXN0cmxlbihlbnZzdHIpOworICAgIHN5 bXZhbC5kc2MkYV9wb2ludGVyID0gZW52c3RyOworICAgIHN5bXZhbC5kc2MkYl9jbGFzcyA9IERT QyRLX0NMQVNTX1M7CisgICAgc3ltdmFsLmRzYyRiX2R0eXBlID0gRFNDJEtfRFRZUEVfVDsKKyAg ICBpID0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdG9yZSBpbiBnbG9iYWwg dGFibGUgKi8KKyNpZmRlZiBDT01NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXJ0 aW4gWmluc2VyICovCisgICAgTElCJFNFVF9TWU1CT0woJnN5bW5hbSwgJnN5bXZhbCwgJmkpOwor I2Vsc2UKKyAgICBsaWIkc2V0X3N5bWJvbCgmc3ltbmFtLCAmc3ltdmFsLCAmaSk7CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgIGlmIChleGl0c3RhdCA9PSBCQURfRVhJVCkKKyAgICAgIGV4aXRz dGF0ID0gU1MkX0FCT1JUIHwgU1RTJE1fSU5ISUJfTVNHOworICAgIGlmIChleGl0c3RhdCA9PSBH T09EX0VYSVQpCisgICAgICBleGl0c3RhdCA9IFNTJF9OT1JNQUwgfCBTVFMkTV9JTkhJQl9NU0c7 CisjZWxzZSAvKiBOb3QgVk1TICovCisgICAgaWYgKGNvZGUgIT0gLTEpICAgICAgICAgICAgICAg ICAgICAgLyogVGFrZSAxc3QgYXJnIGxpdGVyYWxseSAqLworICAgICAgZXhpdHN0YXQgfD0gY29k ZTsKKyNlbmRpZiAvKiBWTVMgKi8KKworI2lmZGVmIElLU0QKKyNpZmRlZiBJS1NEQgorICAgIGRl YnVnKEYxMDEsImRvZXhpdCBpa2Rib3BlbiIsIiIsaWtkYm9wZW4pOworICAgIGlmIChpa2Rib3Bl biAmJiBkYmZwKSB7ICAgICAgICAgICAgIC8qIElmIElLU0QgZGF0YWJhc2Ugb3BlbiAqLworICAg ICAgICBpbnQgeDsKKyAgICAgICAgeCA9IGZyZWVzbG90KG15ZGJzbG90KTsgICAgICAgICAvKiBG cmVlIG91ciBzbG90Li4uICovCisgICAgICAgIGRlYnVnKEYxMDEsImRvZXhpdCBmcmVlc2xvdCIs IiIseCk7CisgICAgICAgIGZjbG9zZShkYmZwKTsgICAgICAgICAgICAgICAgICAgLyogYW5kIGNs b3NlIGl0LiAqLworICAgIH0KKyNlbmRpZiAvKiBJS1NEQiAqLworI2VuZGlmIC8qIElLU0QgKi8K KworLyogV2UgaGF2ZSBwdXQgdGhpcyBvZmYgdGlsbCB0aGUgdmVyeSBsYXN0IG1vbWVudC4uLiAq LworCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7ICAgICAgICAgICAgICAgICAgICAg ICAvKiBDbG9zZSB0aGUgZGVidWcgbG9nLiAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJDLUtlcm1p dCBFWElUIHN0YXR1cyIsIiIsZXhpdHN0YXQpOworICAgICAgICAqZGViZmlsID0gJ1wwJzsKKyAg ICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgfQorI2VuZGlm IC8qIERFQlVHICovCisKKyNpZmRlZiBPUzIKKyAgICBfZXhpdChleGl0c3RhdCk7ICAgICAgICAg ICAgLyogRXhpdCBmcm9tIEMtS2VybWl0IChubyBtYXR0ZXIgd2hhdCkgKi8KKyNlbHNlIC8qIE9T MiAqLworICAgIGV4aXQoZXhpdHN0YXQpOyAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgZnJv bSBDLUtlcm1pdCAqLworI2VuZGlmIC8qIE9TMiAqLworfQorCitWT0lECitiZ2NoaygpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0dXMgKi8K KyAgICBpZiAoYmdzZXQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAvKiBUaGV5IGRpZG4ndCB0 eXBlIFNFVCBCQUNLR1JPVU5EICovCisjaWZkZWYgVk1TICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogU2V0IHByb21wdCBmbGFnIGJhc2VkIG9uICovCisgICAgICAgIHBmbGFnID0gIWJh dGNoOyAgICAgICAgICAgICAgICAgLyogd2hhdCB3ZSBkZXRlY3RlZCBhdCBzdGFydHVwLiAqLwor I2Vsc2UKKyAgICAgICAgcGZsYWcgPSAhYmFja2dyZDsKKyNlbmRpZiAvKiBWTVMgKi8KKyAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UgU0VUIEJBQ0tH Uk9VTkQgdmFsdWUgKi8KKyAgICAgICAgcGZsYWcgPSAoYmdzZXQgPT0gMCA/IDEgOiAwKTsKKyAg ICB9CisKKyNpZm5kZWYgTk9JQ1AKKyAgICAvKiBNZXNzYWdlIGZsYWcgb24gb25seSBpZiBhdCB0 b3AgbGV2ZWwsIHBmbGFnIGlzIG9uLCBhbmQgUVVJRVQgaXMgT0ZGICovCisgICAgaWYgKCF4Y21k c3JjKQorICAgICAgbXNnZmxnID0gKHBmbGFnID09IDApID8gMCA6ICFxdWlldDsKKyAgICBlbHNl IG1zZ2ZsZyA9IDA7CisjZWxzZQorICAgIG1zZ2ZsZyA9IDA7CisjZW5kaWYgLyogTk9JQ1AgKi8K K30KKworLyogU2V0IGNvbnNvbGUgaW50ZXJydXB0cyAqLworCitWT0lECitzZXRpbnQoKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWNjb3JkaW5nIHRvIFNFVCBDT01NQU5EIElO VEVSUlVQICovCisgICAgaW50IHggPSAwOworICAgIGlmIChjbWRpbnQpICB4IHw9IDE7CisgICAg aWYgKHhzdXNwZW5kKSB4IHw9IDI7CisgICAgZGVidWcoRjEwMSwic2V0aW50IiwiIix4KTsKKwor ICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgZGVzaXJl ZCBjb21iaW5hdGlvbiAqLworICAgICAgY2FzZSAwOiBjb25ub2koKTsgYnJlYWs7ICAgICAgICAg IC8qIE5vIGludGVycnVwdHMgKi8KKyAgICAgIGNhc2UgMTogY29uaW50KHRyYXAsU0lHX0lHTik7 IGJyZWFrOworICAgICAgY2FzZSAyOiBjb25pbnQoU0lHX0lHTixzdHB0cmFwKTsgYnJlYWs7Cisg ICAgICBjYXNlIDM6IGNvbmludCh0cmFwLHN0cHRyYXApOyBicmVhazsKKyAgICB9CisgICAgYmdj aGsoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgYmFja2dyb3VuZCBzdGF0 dXMgKi8KK30KKworI2lmZGVmIERFQlVHCisvKiAgRCBFIEIgVSBHICAtLSAgRW50ZXIgYSByZWNv cmQgaW4gdGhlIGRlYnVnZ2luZyBsb2cgICovCisKKy8qCisgQ2FsbCB3aXRoIGEgZm9ybWF0LCB0 d28gc3RyaW5ncywgYW5kIGEgbnVtYmVyOgorICAgZiAgLSBGb3JtYXQsIGEgYml0IHN0cmluZyBp biByYW5nZSAwLTcuCisgICAgICAgIElmIGJpdCB4IGlzIG9uLCB0aGVuIGFyZ3VtZW50IG51bWJl ciB4IGlzIHByaW50ZWQuCisgICBzMSAtIFN0cmluZywgYXJndW1lbnQgbnVtYmVyIDEuICBJZiBz ZWxlY3RlZCwgcHJpbnRlZCBhcyBpcy4KKyAgIHMyIC0gU3RyaW5nLCBhcmd1bWVudCBudW1iZXIg Mi4gIElmIHNlbGVjdGVkLCBwcmludGVkIGluIGJyYWNrZXRzLgorICAgbiAgLSBMb25nIGludCwg YXJndW1lbnQgMy4gIElmIHNlbGVjdGVkLCBwcmludGVkIHByZWNlZGVkIGJ5IGVxdWFscyBzaWdu LgorCisgICBmPTAgaXMgc3BlY2lhbDogcHJpbnQgczEsczIsIGFuZCBpbnRlcnByZXQgbiBhcyBh IGNoYXIuCisKKyAgIGY9RjAxMSAoMykgaXMgYWxzbyBzcGVjaWFsOyBpbiB0aGlzIGNhc2UgczIg aXMgaW50ZXJwZXRlZCBhcyBhIGNvdW50ZWQKKyAgIHN0cmluZyB0aGF0IG1pZ2h0IGNvbnRhaW4g TlVMcy4gIG4gaXMgdGhlIGxlbmd0aC4gIElmIG4gaXMgbmVnYXRpdmUsIHRoaXMKKyAgIG1lYW5z IHRoZSBzdHJpbmcgaGFzIGJlZW4gdHJ1bmNhdGVkIGFuZCAiLi4iIHNob3VsZCBiZSBwcmludGVk IGFmdGVyIHRoZQorICAgZmlyc3QgbiBieXRlcy4gIE5VTCBhbmQgTEYgYnl0ZXMgYXJlIHByaW50 ZWQgYXMgIjxOVUw+IiBhbmQgIjxMRj4iLgorCisgICBHbG9iYWxzOgorICAgICBkZWJsb2c6IG5v bnplcm8gaWYgZGVidWcgbG9nIG9wZW4uCisgICAgIGRlYm9rOiAgbm9uemVybyBpZiBvayB0byB3 cml0ZSBlbnRyaWVzLgorKi8KKy8qCisgIFdBUk5JTkc6IERvbid0IGNoYW5nZSBERUJVRkwgd2l0 aG91dCBjaGFuZ2luZyBzcHJpbnRmKCkgZm9ybWF0cyBiZWxvdywKKyAgYWNjb3JkaW5nbHkuCisq LworI2RlZmluZSBEQlVGTCA0MDAwCisvKgorICBXQVJOSU5HOiBUaGlzIHJvdXRpbmUgaXMgbm90 IHRocmVhZC1zYWZlLCBlc3BlY2lhbGx5IHdoZW4gS2VybWl0IGlzCisgIGV4ZWN1dGluZyBvbiBt dWx0aXBsZSBDUFVzIC0tIGFzIGRpZmZlcmVudCB0aHJlYWRzIHdyaXRlIHRvIHRoZSBzYW1lCisg IHN0YXRpYyBidWZmZXIsIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzIGFyZSBhbGwgaW50ZXJsZWF2ZWQu ICBUbyBiZSBmaXhlZAorICBsYXRlci4uLgorKi8KK3N0YXRpYyBjaGFyICpkYnB0ciA9IChjaGFy ICopMDsKKworaW50CisjaWZkZWYgQ0tfQU5TSUMKK2RvZGVidWcoaW50IGYsIGNoYXIgKnMxLCBj aGFyICpzMiwgQ0tfT0ZGX1QgbikKKyNlbHNlCitkb2RlYnVnKGYsczEsczIsbikgaW50IGY7IGNo YXIgKnMxLCAqczI7IENLX09GRl9UIG47CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvZGVi dWcgKi8geworICAgIGNoYXIgKnNwOworICAgIGludCBsZW4xLCBsZW4yOworICAgIGV4dGVybiBp bnQgZGVidGltOworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQgU3lzSW5pdGVkOworI2VuZGlm IC8qIE9TMiAqLworCisgICAgaWYgKCFkZWJsb2cgfHwgIWRlYm9rKQorICAgICAgcmV0dXJuKDAp OworCisjaWZkZWYgQ09NTUVOVAorICAgIC8qIGV4cGVuc2l2ZS4uLiAqLworICAgIGlmICghY2hr Zm4oWkRGSUxFKSkJCQkvKiBEZWJ1ZyBsb2cgbm90IG9wZW4sIGRvbid0LiAqLworICAgICAgcmV0 dXJuKDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICBpZiAoIWRicHRyKSB7ICAgICAgICAg ICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgYnVmZmVyICovCisgICAgICAgIGRicHRy ID0gbWFsbG9jKERCVUZMKzQpOyAgICAgICAgLyogVGhpcyBvbmx5IGhhcHBlbnMgb25jZSAqLwor ICAgICAgICBpZiAoIWRicHRyKSB7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAg ICAgICAgIHJldHVybigwKTsKKyAgICAgICAgfQorICAgIH0KKy8qCisgIFRoaXMgcHJldmVudHMg aW5maW5pdGUgcmVjdXJzaW9uIGluIGNhc2Ugd2UgYWNjaWRlbnRhbGx5IHB1dCBhIGRlYnVnKCkK KyAgY2FsbCBpbiB0aGlzIHJvdXRpbmUsIG9yIGNhbGwgYW5vdGhlciByb3V0aW5lIHRoYXQgY29u dGFpbnMgZGVidWcoKSBjYWxscy4KKyAgRnJvbSB0aGlzIHBvaW50IG9uLCBhbGwgcmV0dXJucyBm cm9tIHRoaXMgcmV0dXJuIG11c3QgYmUgdmlhIGdvdG8geGRlYnVnLAorICB3aGljaCBzZXRzIGRl YmxvZyBiYWNrIHRvIDEuCisqLworI2lmZGVmIE9TMgorICAgIGlmIChTeXNJbml0ZWQpIHsKKwlp ZiAoUmVxdWVzdERlYnVnTXV0ZXgoMzAwMDApKQorCSAgICBnb3RvIHhkZWJ1ZzsKKyAgICB9Cisj ZWxzZSAvKiBPUzIgKi8KKyAgICBkZWJsb2cgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAv KiBQcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAg aWYgKGRlYnRpbSkgeyAgICAgICAgICAgICAgICAgICAgICAgLyogVGltZXN0YW1wICovCisgICAg ICAgIGNoYXIgKnRiLCB0c2J1Zls0OF07CisgICAgICAgIHp0aW1lKCZ0Yik7CisgICAgICAgIGNr c3RybmNweSh0c2J1Zix0YiwzMik7CisgICAgICAgIGlmICh6dG1zZWMgPiAtMUwpIHsKKwkgICAg c3ByaW50Zih0c2J1ZisxOSwiLiUwM2xkICIsenRtc2VjKTsgLyogU0FGRSAqLworCX0gZWxzZSB7 CisJICAgIHRzYnVmWzE5XSA9ICc6JzsKKwkgICAgdHNidWZbMjBdID0gU1A7CisJICAgIHRzYnVm WzIxXSA9IE5VTDsKKwl9CisgICAgICAgIHpzb3V0KFpERklMRSx0c2J1ZisxMSk7CisgICAgfQor ICAgIGlmICghczEpIHMxPSIoTlVMTCkiOworICAgIGlmICghczIpIHMyPSIoTlVMTCkiOworCisg ICAgbGVuMSA9IHN0cmxlbihzMSk7CisgICAgbGVuMiA9IHN0cmxlbihzMik7CisKKyNpZmRlZiBD T01NRU5UCisvKgorICBUaGlzIHNob3VsZCB3b3JrLCBidXQgaXQgZG9lc24ndC4KKyAgU28gaW5z dGVhZCB3ZSdsbCBjb3BlIHdpdGggb3ZlcmZsb3cgdmlhIHNwcmludGYgZm9ybWF0cy4KKyAgTi5C LjogVU5GT1JUVU5BVEVMWSwgdGhpcyBtZWFucyB3ZSBoYXZlIHRvIHB1dCBjb25zdGFudHMgaW4g dGhlCisgIHNwcmludGYgZm9ybWF0cy4KKyovCisgICAgaWYgKGYgIT0gRjAxMSAmJiAoIWYgfHwg KGYgJiA2KSkpIHsgLyogU3RyaW5nIGFyZ3VtZW50KHMpIGluY2x1ZGVkPyAqLworICAgICAgICB4 ID0gKGludCkgc3RybGVuKHMxKSArIChpbnQpIHN0cmxlbihzMikgKyAxODsKKyAgICAgICAgaWYg KHggPiBkYnVmbCkgeyAgICAgICAgICAgICAgICAvKiBMb25nZXIgdGhhbiBidWZmZXI/ICovCisg ICAgICAgICAgICBpZiAoZGJwdHIpICAgICAgICAgICAgICAgICAgLyogWWVzLCBmcmVlIHByZXZp b3VzIGJ1ZmZlciAqLworICAgICAgICAgICAgICBmcmVlKGRicHRyKTsKKyAgICAgICAgICAgIGRi cHRyID0gKGNoYXIgKikgbWFsbG9jKHggKyAyKTsgLyogQWxsb2NhdGUgYSBuZXcgb25lICovCisg ICAgICAgICAgICBpZiAoIWRicHRyKSB7CisgICAgICAgICAgICAgICAgenNvdXRsKFpERklMRSwi REVCVUc6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKyAgICAgICAgICAgICAgICBkZWJs b2cgPSAwOworICAgICAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICAgICAgICAg IGdvdG8geGRlYnVnOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkYnVm bCA9IHg7CisgICAgICAgICAgICAgICAgc3ByaW50ZihkYnB0ciwiREVCVUc6IEJ1ZmZlciBleHBh bmRlZCB0byAlZFxuIiwgeCArIDE4KTsKKyAgICAgICAgICAgICAgICB6c291dGwoWkRGSUxFLGRi cHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBDT01NRU5U ICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBUaGUgYWZvcmVtZW50aW9uZWQgc3ByaW50ZigpIGZv cm1hdHMgd2VyZSBsaWtlIHRoaXM6ICovCisgICAgICAgIGlmIChuID4gMzEgJiYgbiA8IDEyNykK KyAgICAgICAgICBzcHJpbnRmKHNwLCIlLjEwMHMlLjIwMDBzOiVjXG4iLHMxLHMyLChDSEFSKSBu KTsKKyAgICAgICAgZWxzZSBpZiAobiA8IDMyIHx8IG4gPT0gMTI3KQorICAgICAgICAgIHNwcmlu dGYoc3AsIiUuMTAwcyUuMjAwMHM6XiVjXG4iLHMxLHMyLChDSEFSKSAoKG4rNjQpICYgMHg3Rikp OworICAgICAgICBlbHNlIGlmIChuID4gMTI3ICYmIG4gPCAxNjApCisgICAgICAgICAgc3ByaW50 ZihzcCwiJS4xMDBzJS4yMDAwczp+XiVjXG4iLHMxLHMyLChDSEFSKSgobi02NCkgJiAweDdGKSk7 CisgICAgICAgIGVsc2UgaWYgKG4gPiAxNTkgJiYgbiA8IDI1NikKKyAgICAgICAgICBzcHJpbnRm KHNwLCIlLjEwMHMlLjIwMDBzOn4lY1xuIixzMSxzMiwoQ0hBUikgKG4gJiAweDdGKSk7CisgICAg ICAgIGVsc2Ugc3ByaW50ZihzcCwiJS4xMDBzJS4yMDAwczolbGRcbiIsczEsczIsbik7CisvKgor ICBCdXQsIG5hdHVyYWxseSwgaXQgdHVybnMgb3V0IHRoZXNlIGFyZSBub3QgcG9ydGFibGUgZWl0 aGVyLCBzbyBub3cKKyAgd2UgZG8gdGhlIHN0dXBpZGVzdCBwb3NzaWJsZSB0aGluZy4KKyovCisj ZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZkZWYgQklHQlVGT0sKKy8qIE5lZWQgdG8gYWNjZXB0 IGxvbmdlciBzdHJpbmdzIHdoZW4gZGVidWdnaW5nIGF1dGhlbnRpY2F0ZWQgY29ubmVjdGlvbnMg Ki8KKyAgICBpZiAoZiA9PSBGMDEwKSB7CisgICAgICAgIGlmIChsZW4yICsgMiA+PSBEQlVGTCkg czIgPSAiKHN0cmluZyB0b28gbG9uZykiOworICAgIH0gZWxzZSBpZiAoZiAhPSBGMDExICYmIGYg IT0gRjEwMCkgeworICAgICAgICBpZiAobGVuMSA+IDEwMCkgczEgPSAiKHN0cmluZyB0b28gbG9u ZykiOworICAgICAgICBpZiAobGVuMiArIDEwMSA+PSBEQlVGTCkgczIgPSAiKHN0cmluZyB0b28g bG9uZykiOworICAgIH0KKyNlbHNlCisgICAgaWYgKGYgIT0gRjAxMSkgeworICAgICAgICBpZiAo bGVuMSA+IDEwMCkgczEgPSAiKHN0cmluZyB0b28gbG9uZykiOworICAgICAgICBpZiAobGVuMiAr IDEwMSA+PSBEQlVGTCkgczIgPSAiKHN0cmluZyB0b28gbG9uZykiOworICAgIH0KKyNlbmRpZiAv KiBCSUdCVUZPSyAqLworCisgICAgc3AgPSBkYnB0cjsKKworICAgIHN3aXRjaCAoZikgeyAgICAg ICAgICAgICAgICAvKiBXcml0ZSBsb2cgcmVjb3JkIGFjY29yZGluZyB0byBmb3JtYXQuICovCisg ICAgICBjYXNlIEYwMDA6ICAgICAgICAgICAgICAgIC8qIDAgPSBwcmludCBib3RoIHN0cmluZ3Ms IGFuZCBuIGFzIGEgY2hhci4gKi8KKyAgICAgICAgaWYgKGxlbjIgPiAwKSB7CisgICAgICAgICAg ICBpZiAoKG4gPiAzMSAmJiBuIDwgMTI3KSB8fCAobiA+IDE1OSAmJiBuIDwgMjU2KSkKKyAgICAg ICAgICAgICAgc3ByaW50ZihzcCwiJXNbJXNdPSVjXG4iLHMxLHMyLChDSEFSKSBuKTsKKyAgICAg ICAgICAgIGVsc2UgaWYgKG4gPCAzMiB8fCBuID09IDEyNykKKyAgICAgICAgICAgICAgc3ByaW50 ZihzcCwiJXNbJXNdPV4lY1xuIixzMSxzMiwoQ0hBUikgKChuKzY0KSAmIDB4N0YpKTsKKyAgICAg ICAgICAgIGVsc2UgaWYgKG4gPiAxMjcgJiYgbiA8IDE2MCkKKyAgICAgICAgICAgICAgc3ByaW50 ZihzcCwiJXNbJXNdPX5eJWNcbiIsczEsczIsKENIQVIpKChuLTY0KSAmIDB4N0YpKTsKKyAgICAg ICAgICAgIGVsc2Ugc3ByaW50ZihzcCwiJXNbJXNdPTB4JWxYXG4iLHMxLHMyLChsb25nKW4pOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChuID4gMzEgJiYgbiA8IDEyNykgfHwg KG4gPiAxNTkgJiYgbiA8IDI1NikpCisgICAgICAgICAgICAgIHNwcmludGYoc3AsIiVzPSVjXG4i LHMxLChDSEFSKSBuKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG4gPCAzMiB8fCBuID09IDEyNykK KyAgICAgICAgICAgICAgc3ByaW50ZihzcCwiJXM9XiVjXG4iLHMxLChDSEFSKSAoKG4rNjQpICYg MHg3RikpOworICAgICAgICAgICAgZWxzZSBpZiAobiA+IDEyNyAmJiBuIDwgMTYwKQorICAgICAg ICAgICAgICBzcHJpbnRmKHNwLCIlcz1+XiVjXG4iLHMxLChDSEFSKSgobi02NCkgJiAweDdGKSk7 CisgICAgICAgICAgICBlbHNlIHNwcmludGYoc3AsIiVzPTB4JWxYXG4iLHMxLChsb25nKW4pOwor ICAgICAgICB9CisgICAgICAgIGlmICh6c291dChaREZJTEUsZGJwdHIpIDwgMCkgeworICAgICAg ICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICB9 CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5c2xvZyA+PSBTWVNMR19EQiAmJiBj a3hsb2dnaW5nKSB7CisgICAgICAgICAgICBja3N5c2xvZyhTWVNMR19EQiwxLCJkZWJ1ZyIsZGJw dHIsTlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICBicmVh azsKKworICAgICAgY2FzZSBGMDAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEsICI9biIg Ki8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIC8qIFRoaXMgd2FzIG5ldmVyIHVzZWQgKi8KKyAg ICAgICAgc3ByaW50ZihzcCwiPSVzXG4iLGNrZnN0b2EobikpOworI2Vsc2UKKyAgICAgICAgLyog TGlrZSBGMTExLCBidXQgc2hvd3MgbnVtYmVyIG4gaW4gaGV4ICovCisJY2ttYWt4bXNnKHNwLERC VUZMLAorCQkgIHMxLAorCQkgICgqczEgPyAiOiIgOiAiIiksCisJCSAgczIsCisJCSAgKCpzMiA/ ICI6IiA6ICIiKSwKKwkJICBja2x0b3gobiksCisJCSAgIlxuIiwKKwkJICBOVUxMLE5VTEwsTlVM TCxOVUxMLE5VTEwsTlVMTAorCQkgICk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBp ZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7Cisg ICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKyAgICAgICAgfQorI2lmZGVmIENLU1lTTE9HCisg ICAgICAgIGlmIChja3hzeXNsb2cgPj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworICAgICAg ICAgICAgY2tzeXNsb2coU1lTTEdfREIsMSwiZGVidWciLGRicHRyLE5VTEwpOworICAgICAgICB9 CisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyAgICAgICAgYnJlYWs7CisKKy8qCisgIFRoaXMgb25l IHdhcyBuZXZlciB1c2VkIHNvIChPY3RvYmVyIDIwMDApIHdlIG5vdyB1c2UgaXQgbGlrZSBGMDEx LAorICBleGNlcHQgaW4gdGhpcyBjYXNlIHdlIHRyZWF0IHMyIGFzIE5VTCB0ZXJtaW5hdGVkLgor Ki8KKyAgICAgIGNhc2UgRjAxMDoKKwluID0gLWRlYnhsZW47CisvKgorICBUaGlzIG9uZSB0cmVh dHMgbiBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgczIsIHdoaWNoIG1heSBjb250YWluIE5V THMuCisgIEl0J3MgZ29vZCBmb3IgbG9nZ2luZyBOVUwtYmVhcmluZyBkYXRhIGluIHRoZSBkZWJ1 ZyBsb2cuCisqLworICAgICAgY2FzZSBGMDExOiB7CisJICBpbnQgaSwgaiwgY29udGQgPSAwOwor CSAgY2hhciAqIHAgPSBzMiwgKnBidWYgPSBOVUxMOwkvKiBwID0gc291cmNlIHBvaW50ZXIgKi8K KwkgIGludCBtOwkJCS8qIHBidWYgPSBkZXN0aW5hdGlvbiBwb2ludGVyICovCisKKwkgIGlmIChm ID09IEYwMTEpIHsKKwkgICAgICBpZiAobiA8IDApIHsJCS8qIG4gPSBzaXplIG9mIHNvdXJjZSAq LworCQkgIG4gPSAwIC0gbjsJCS8qIE5lZ2F0aXZlIG1lYW5zIHRvIGFkZCAiLi4uIiAqLworCQkg IGNvbnRkID0gMTsKKwkgICAgICB9CisJICB9IGVsc2UgeworCSAgICAgIGludCB4LCBmbGFnID0g MDsKKwkgICAgICB4ID0gc3RybGVuKHMyKTsKKwkgICAgICBpZiAobiA8IDApIHsKKwkJICBmbGFn ID0gMTsKKwkJICBuID0gMCAtIG47CisJICAgICAgfQorCSAgICAgIGlmICh4IDwgbikKKwkJbiA9 IHg7CisJICB9CisJICBpZiAobiA9PSAwKQkJCS8qIDAgbWVhbnMgZG8gbm90aGluZyAqLworCSAg ICBnb3RvIHhkZWJ1ZzsKKwkgIG0gPSBEQlVGTCAtIDg7CQkvKiBHZXQgc2l6ZSBmb3IgaW50ZXJw cmV0ZWQgcGFydCAqLworCSAgaWYgKG4gPiBtKQkJCS8qIEVuc3VyZSByZXF1ZXN0ZWQgc2l6ZSBu b3QgdG9vIGJpZyAqLworCSAgICBuID0gbTsKKwkgIHBidWYgPSBkYnB0cjsJCQkvKiBDb25zdHJ1 Y3Rpb24gcG9pbnRlciAqLworCSAgaSA9IDA7CisJICBwYnVmW2krK10gPSAnWyc7CQkvKiBJbnRl cnByZXQgdGhlIHN0cmluZyBpbnRvIGl0ICovCisJICBmb3IgKGogPSAwOyBqIDwgbiAmJiBpIDwg bS00OyBwKyssaisrKSB7IC8qIGNoYXIgYnkgY2hhci4uLiAqLworCSAgICAgIGlmICgqcCA9PSBM RikgeworCQkgIGlmIChpID49IG0tNCkKKwkJICAgIGJyZWFrOworCQkgIHBidWZbaSsrXSA9ICc8 JzsKKwkJICBwYnVmW2krK10gPSAnTCc7CisJCSAgcGJ1ZltpKytdID0gJ0YnOworCQkgIHBidWZb aSsrXSA9ICc+JzsKKwkJICBjb250aW51ZTsKKwkgICAgICB9IGVsc2UgaWYgKCpwID09IENSKSB7 CisJCSAgaWYgKGkgPj0gbS00KQorCQkgICAgYnJlYWs7CisJCSAgcGJ1ZltpKytdID0gJzwnOwor CQkgIHBidWZbaSsrXSA9ICdDJzsKKwkJICBwYnVmW2krK10gPSAnUic7CisJCSAgcGJ1ZltpKytd ID0gJz4nOworCQkgIGNvbnRpbnVlOworCSAgICAgIH0gZWxzZSBpZiAoKnAgPT0gSFQpIHsKKwkJ ICBpZiAoaSA+PSBtLTUpCisJCSAgICBicmVhazsKKwkJICBwYnVmW2krK10gPSAnPCc7CisJCSAg cGJ1ZltpKytdID0gJ1QnOworCQkgIHBidWZbaSsrXSA9ICdBJzsKKwkJICBwYnVmW2krK10gPSAn Qic7CisJCSAgcGJ1ZltpKytdID0gJz4nOworCQkgIGNvbnRpbnVlOworCSAgICAgIH0gZWxzZSBp ZiAoKnApIHsKKwkJICBwYnVmW2krK10gPSAqcDsKKwkJICBjb250aW51ZTsKKwkgICAgICB9IGVs c2UgeworCQkgIGlmIChpID49IG0tNSkKKwkJICAgIGJyZWFrOworCQkgIHBidWZbaSsrXSA9ICc8 JzsKKwkJICBwYnVmW2krK10gPSAnTic7CisJCSAgcGJ1ZltpKytdID0gJ1UnOworCQkgIHBidWZb aSsrXSA9ICdMJzsKKwkJICBwYnVmW2krK10gPSAnPic7CisJCSAgY29udGludWU7CisJICAgICAg fQorCSAgfQorCSAgaWYgKGkgPCBtLTIgJiYgKCpwIHx8IGNvbnRkKSkgeworCSAgICAgIHBidWZb aSsrXSA9ICcuJzsKKwkgICAgICBwYnVmW2krK10gPSAnLic7CisJICB9CisJICBwYnVmW2krK10g PSAnXSc7CisJICBwYnVmW2ldID0gTlVMOworCSAgaWYgKHpzb3V0KFpERklMRSxzMSkgPCAwKSB7 CisJICAgICAgZGVibG9nID0gMDsKKwkgICAgICB6Y2xvc2UoWkRGSUxFKTsKKwkgIH0KKwkgIGlm ICh6c291dGwoWkRGSUxFLHBidWYpIDwgMCkgeworCSAgICAgIGRlYmxvZyA9IDA7CisJICAgICAg emNsb3NlKFpERklMRSk7CisJICB9CisjaWZkZWYgQ0tTWVNMT0cKKwkgIGlmIChja3hzeXNsb2cg Pj0gU1lTTEdfREIgJiYgY2t4bG9nZ2luZykgeworCSAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEs ImRlYnVnIixzMSxwYnVmKTsKKwkgIH0KKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworICAgICAgICB9 CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEYxMDA6ICAgICAgICAgICAgICAgICAgICAg ICAgLyogNCwgInMxIiAqLworICAgICAgICBpZiAoenNvdXRsKFpERklMRSxzMSkgPCAwKSB7Cisg ICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAg ICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RC ICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVn IixzMSxOVUxMKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIGJy ZWFrOworICAgICAgY2FzZSBGMTAxOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDUsICJzMT1u IiAqLworICAgICAgICBzcHJpbnRmKHNwLCIlcz0lc1xuIixzMSxja2ZzdG9hKG4pKTsKKyAgICAg ICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAw OworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7CisgICAgICAgIH0KKyNpZmRlZiBDS1NZU0xP RworICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKyAg ICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKKyAgICAg ICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBG MTEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8qIDYsICJzMVtzMl0iICovCisgICAgICAgIHNw cmludGYoc3AsIiVzWyVzXVxuIixzMSxzMik7CisgICAgICAgIGlmICh6c291dChaREZJTEUsZGJw dHIpIDwgMCkgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAgICAgICAgIHpjbG9zZSha REZJTEUpOworICAgICAgICB9CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAgICAgaWYgKGNreHN5c2xv ZyA+PSBTWVNMR19EQiAmJiBja3hsb2dnaW5nKSB7CisgICAgICAgICAgICBja3N5c2xvZyhTWVNM R19EQiwxLCJkZWJ1ZyIsZGJwdHIsTlVMTCk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS1NZU0xP RyAqLworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRjExMTogICAgICAgICAgICAgICAgICAg ICAgICAvKiA3LCAiczFbczJdPW4iICovCisgICAgICAgIHNwcmludGYoc3AsIiVzWyVzXT0lc1xu IixzMSxzMixja2ZzdG9hKG4pKTsKKyAgICAgICAgaWYgKHpzb3V0KFpERklMRSxkYnB0cikgPCAw KSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAgemNsb3NlKFpERklMRSk7 CisgICAgICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAoY2t4c3lzbG9nID49IFNZ U0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgIGNrc3lzbG9nKFNZU0xHX0RCLDEs ImRlYnVnIixkYnB0cixOVUxMKTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLU1lTTE9HICovCisg ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgc3ByaW50ZihzcCwiXG4/SW52 YWxpZCBmb3JtYXQgZm9yIGRlYnVnKCkgLSAlZFxuIixmKTsKKyAgICAgICAgaWYgKHpzb3V0KFpE RklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAg emNsb3NlKFpERklMRSk7CisgICAgICAgIH0KKyNpZmRlZiBDS1NZU0xPRworICAgICAgICBpZiAo Y2t4c3lzbG9nID49IFNZU0xHX0RCICYmIGNreGxvZ2dpbmcpIHsKKyAgICAgICAgICAgIGNrc3lz bG9nKFNZU0xHX0RCLDEsImRlYnVnIixkYnB0cixOVUxMKTsKKyAgICAgICAgfQorI2VuZGlmIC8q IENLU1lTTE9HICovCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgeGRlYnVnOiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBDb21tb24gZXhpdCBwb2ludCAqLworI2lmZGVmIE9TMgor ICAgIGlmIChTeXNJbml0ZWQpCisJUmVsZWFzZURlYnVnTXV0ZXgoKTsKKyNlbHNlIC8qIE9TMiAq LworICAgIGRlYmxvZyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgdGhp cyAqLworI2VuZGlmIC8qIE9TMiAqLworICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZkZWYg Q0tfQU5TSUMKK2RvaGV4ZHVtcChDSEFSICptc2csIENIQVIgKnN0LCBpbnQgY250KQorI2Vsc2UK K2RvaGV4ZHVtcChtc2csc3QsY250KSBDSEFSICptc2c7IENIQVIgKnN0OyBpbnQgY250OworI2Vu ZGlmIC8qIENLX0FOU0lDICovCisvKiBkb2hleGR1bXAgKi8geworICAgIGludCBpID0gMCwgaiA9 IDAsIGsgPSAwOworICAgIGNoYXIgdG1wWzhdOworI2lmZGVmIE9TMgorICAgIGV4dGVybiBpbnQg U3lzSW5pdGVkOworI2VuZGlmIC8qIE9TMiAqLworCisgICAgaWYgKCFkZWJsb2cpIHJldHVybigw KTsJCS8qIElmIG5vIGRlYnVnIGxvZywgZG9uJ3QuICovCisgICAgaWYgKCFkYnB0cikgeyAgICAg ICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGJ1ZmZlciAqLworICAgICAgICBk YnB0ciA9IG1hbGxvYyhEQlVGTCsxKTsgICAgICAgIC8qIFRoaXMgb25seSBoYXBwZW5zIG9uY2Ug Ki8KKyAgICAgICAgaWYgKCFkYnB0cikgeworICAgICAgICAgICAgZGVibG9nID0gMDsKKyAgICAg ICAgICAgIHpjbG9zZShaREZJTEUpOworICAgICAgICAgICAgcmV0dXJuKDApOworICAgICAgICB9 CisgICAgfQorCisjaWZkZWYgT1MyCisgICAgaWYgKFN5c0luaXRlZCkgeworCWlmIChSZXF1ZXN0 RGVidWdNdXRleCgzMDAwMCkpCisJICAgIGdvdG8geGRlYnVnOworICAgIH0KKyNlbHNlIC8qIE9T MiAqLworICAgIGRlYmxvZyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFByZXZlbnQg aW5maW5pdGUgcmVjdXJzaW9uICovCisjZW5kaWYgLyogT1MyICovCisKKyAgICBpZiAobXNnICE9 IE5VTEwpIHsKKwlja21ha3htc2coZGJwdHIsCisJCSAgREJVRkwsCisJCSAgIkhFWERVTVA6ICIs CisJCSAgKGNoYXIgKiltc2csCisJCSAgIiAoIiwKKwkJICBja2l0b2EoY250KSwKKwkJICAiIGJ5 dGVzKVxuIiwKKwkJICBOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMCisJCSApOwor ICAgICAgICBpZiAoenNvdXQoWkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxv ZyA9IDA7CisgICAgICAgICAgICB6Y2xvc2UoWkRGSUxFKTsKKwkgICAgZ290byB4ZGVidWc7Cisg ICAgICAgIH0KKyAgICB9IGVsc2UgeworCWNrbWFrbXNnKGRicHRyLAorCQkgREJVRkwsCisJCSAi SEVYRFVNUDogKCIsCisJCSBja2l0b2EoY250KSwKKwkJICIgYnl0ZXMpXG4iLAorCQkgTlVMTAor CQkgKTsKKyAgICAgICAgenNvdXQoWkRGSUxFLGRicHRyKTsKKyAgICAgICAgaWYgKHpzb3V0KFpE RklMRSxkYnB0cikgPCAwKSB7CisgICAgICAgICAgICBkZWJsb2cgPSAwOworICAgICAgICAgICAg emNsb3NlKFpERklMRSk7CisJICAgIGdvdG8geGRlYnVnOworICAgICAgICB9CisgICAgfQorICAg IGZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworICAgICAgICBkYnB0clswXSA9ICdcMCc7Cisg ICAgICAgIGZvciAoaiA9IDAgOyAoaiA8IDE2KTsgaisrKSB7CisgICAgICAgICAgICBpZiAoKGkg KyBqKSA8IGNudCkKKwkgICAgICBzcHJpbnRmKHRtcCwKKwkJICAgICAgIiVzJTAyeCAiLAorCQkg ICAgICAoaiA9PSA4ID8gInwgIiA6ICIiKSwKKwkJICAgICAgKENIQVIpIHN0W2kgKyBqXQorCQkg ICAgICApOworICAgICAgICAgICAgZWxzZQorCSAgICAgIHNwcmludGYodG1wLAorCQkgICAgICAi JXMgICAiLAorCQkgICAgICAoaiA9PSA4ID8gInwgIiA6ICIiKQorCQkgICAgICApOworICAgICAg ICAgICAgY2tzdHJuY2F0KGRicHRyLHRtcCxEQlVGTCsxKTsKKyAgICAgICAgfQorICAgICAgICBj a3N0cm5jYXQoZGJwdHIsIiAiLERCVUZMKzEpOworICAgICAgICBmb3IgKGsgPSAwOyAoayA8IDE2 KSAmJiAoKGkgKyBrKSA8IGNudCk7IGsrKykgeworICAgICAgICAgICAgc3ByaW50Zih0bXAsCisg ICAgICAgICAgICAgICAgICAgICIlcyVjIiwKKyAgICAgICAgICAgICAgICAgICAgKGsgPT0gOCA/ ICIgIiA6ICIiKSwKKyAgICAgICAgICAgICAgICAgICAgaXNwcmludChzdFtpICsga10pID8gc3Rb aSArIGtdIDogJy4nCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBja3N0cm5j YXQoZGJwdHIsdG1wLERCVUZMKzEpOworICAgICAgICB9CisgICAgICAgIGNrc3RybmNhdChkYnB0 ciwiXG4iLERCVUZMKzEpOworICAgICAgICBpICs9IGogLSAxOworICAgICAgICBpZiAoenNvdXQo WkRGSUxFLGRicHRyKSA8IDApIHsKKyAgICAgICAgICAgIGRlYmxvZyA9IDA7CisgICAgICAgICAg ICB6Y2xvc2UoWkRGSUxFKTsKKwkgICAgZ290byB4ZGVidWc7CisgICAgICAgIH0KKyAgICB9IC8q IGVuZCBmb3IgKi8KKworCisgIHhkZWJ1ZzoKKyNpZmRlZiBPUzIKKyAgICBpZiAoU3lzSW5pdGVk KQorICAgICAgUmVsZWFzZURlYnVnTXV0ZXgoKTsKKyNlbHNlIC8qIE9TMiAqLworICAgIGRlYmxv ZyA9IDE7CisjZW5kaWYgLyogT1MyICovCisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIERF QlVHICovCisKKy8qICBTZXNzaW9uIExvZy4uLiAqLworCitpbnQgdHNzdGF0ZSA9IDA7CisKK1ZP SUQKKyNpZmRlZiBPUzIKK2xvZ2NoYXIodW5zaWduZWQgc2hvcnQgYykKKyNlbHNlIC8qIE9TMiAq LworI2lmZGVmIENLX0FOU0lDCitsb2djaGFyKGNoYXIgYykKKyNlbHNlCitsb2djaGFyKGMpIGNo YXIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2VuZGlmIC8qIE9TMiAqLworLyogbG9nY2hh ciAqLyB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvZyBjaGFyYWN0ZXIgYyB0byBzZXNz aW9uIGxvZyAqLworICAgIGV4dGVybiBpbnQgc2xvZ251bDsKKyAgICBpbnQgb2t0b2xvZyA9IDA7 CisjaWZuZGVmIE5PTE9DQUwKKyAgICBpZiAoIXNlc2xvZykKKyAgICAgIHJldHVybjsKKworICAg IGlmICgoc2Vzc2Z0ICE9IFhZRlRfVCkgfHwgKAorI2lmZGVmIFVOSVgKKwkgYyAhPSAnXHInICYm CisjZWxzZQorI2lmZGVmIGRhdGFnZW5lcmFsCisJIGMgIT0gJ1xyJyAmJgorI2Vsc2UKKyNpZmRl ZiBTVFJBVFVTCisJIGMgIT0gJ1xyJyAmJgorI2Vsc2UKKyNpZmRlZiBBTUlHQQorCSBjICE9ICdc cicgJiYKKyNlbHNlCisjaWZkZWYgR0VNRE9TCisJIGMgIT0gJ1xyJyAmJgorI2VuZGlmIC8qIEdF TURPUyAqLworI2VuZGlmIC8qIEFNSUdBICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworI2VuZGlm IC8qIGRhdGFnZW5lcmFsICovCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIE9TSworCSBjICE9 ICdcbicgJiYKKyNlbHNlCisjaWZkZWYgTUFDCisJIGMgIT0gJ1xuJyAmJgorI2VuZGlmIC8qIE1B QyAqLworI2VuZGlmIC8qIE9TSyAqLworCSBjICE9IFhPTiAmJgorCSBjICE9IFhPRkYpKQorICAg ICAgb2t0b2xvZyA9IDE7CisgICAgaWYgKGMgPT0gJ1wwJyAmJiAhc2Vzc2Z0KQkJLyogTlVMIGlu IHRleHQgbW9kZSAqLworICAgICAgaWYgKHNsb2dudWwpIG9rdG9sb2cgPSAxOwkJLyogb25seSBp ZiBwYWRkaW5nICgyMDA5LzEwLzIyKSAqLworICAgIGlmICghb2t0b2xvZykKKyAgICAgIHJldHVy bjsKKyAgICBpZiAoc2xvZ3RzKSB7CQkJLyogTG9nIGlzIHRpbWVzdGFtcGVkICovCisJaWYgKHRz c3RhdGUgPT0gMCkgewkJLyogU3RhdGUgPSBiZXR3ZWVuLWxpbmVzICovCisJICAgIGNoYXIgKiBw OwkJCS8qIHpzdGltZSgpIHBvaW50ZXIgKi8KKwkgICAgY2hhciB0c1s0OF07CQkvKiB0aW1lc3Rh bXAgYnVmZmVyICovCisJICAgIHp0aW1lKCZwKTsJCQkvKiBHZXQgYXNjdGltZSgpIHN0cmluZyAq LworCSAgICBja3N0cm5jcHkodHMscCwzMik7CQkvKiBNYWtlIHNhZmUgY29weSAqLworCSAgICBp ZiAoenRtc2VjID4gLTFMKSB7CQkvKiBBZGQgbXNlY3MgaWYgd2UgaGF2ZSB0aGVtICovCisJCXNw cmludGYoJnRzWzE5XSwiLiUwM2xkOiAiLHp0bXNlYyk7IC8qIFNBRkUgKi8KKwkgICAgfSBlbHNl IHsKKwkJdHNbMTldID0gJzonOworCQl0c1syMF0gPSBTUDsKKwkJdHNbMjFdID0gTlVMOworCSAg ICB9CisJICAgIGlmICh6c291dChaU0ZJTEUsJnRzWzExXSkgPCAwKQorCSAgICAgIGdvdG8geGxv Z2NoYXI7CisJfQorICAgIH0KKyAgICBpZiAoYyA9PSAnXG4nKQkJCS8qIEF0IGVuZCBvZiBsaW5l PyAqLworICAgICAgdHNzdGF0ZSA9IDA7CQkJLyogeWVzICovCisgICAgZWxzZQorICAgICAgdHNz dGF0ZSA9IDE7CQkJLyogbm8gKi8KKyAgICBpZiAoemNob3V0KFpTRklMRSwoQ0hBUikoYyAmIDB4 RkYpKSA8IDApIC8qIExvZyB0aGUgY2hhcmFjdGVyICovCisgICAgICBnb3RvIHhsb2djaGFyOwor ICAgIGlmICh0c3N0YXRlID09IDAgJiYgc2xvZ251bCAhPSAwKSB7CS8qIE51bGwtdGVybWluYXRp bmcgbGluZXM/ICovCisJaWYgKHpjaG91dChaU0ZJTEUsKENIQVIpMCkgPCAwKQkvKiBBZGQgYSBO VUwgKi8KKwkgIGdvdG8geGxvZ2NoYXI7CisgICAgfQorICAgIHJldHVybjsKKworICB4bG9nY2hh cjoKKyAgICBjb25vbGwoIiIpOworICAgIGNvbm9sbCgiRVJST1IgV1JJVElORyBTRVNTSU9OIExP RywgTE9HIENMT1NFRCEiKTsKKyAgICBzZXRzZXNsb2coMCk7CisgICAgemNsb3NlKFpTRklMRSk7 CisjZW5kaWYgLyogTk9MT0NBTCAqLworfQorCitWT0lECitsb2dzdHIocywgbGVuKSBjaGFyICog czsgaW50IGxlbjsgeyAgICAgLyogTG9nIHN0cmluZyB0byBzZXNzaW9uIGxvZyAqLworI2lmbmRl ZiBOT0xPQ0FMCisgICAgaW50IG4gPSAwOworICAgIGlmICghcykKKyAgICAgIHJldHVybjsKKyAg ICB3aGlsZSAoc2VzbG9nICYmIChuIDwgbGVuKSkKKyAgICAgIGxvZ2NoYXIoc1tuKytdKTsKKyNl bmRpZiAvKiBOT0xPQ0FMICovCit9CisKKyNpZmRlZiBDS19DVVJTRVMKK2ludAorY2tfcmVwYWlu dCgpIHsKKyAgICByZXBhaW50ID0gMTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNpZmRlZiBTVFJB VFVTCisvKiBWT1MgaGFzIGN1cnNlcyBidXQgbm8gdGdldGVudCgpICovCitpbnQKK3RnZXRlbnQo czEsIHMyKSBjaGFyICogczEsICogczI7IHsKKyAgICByZXR1cm4oMSk7Cit9CisjZW5kaWYgLyog U1RSQVRVUyAqLworCisjaWZkZWYgVk1TCisjaWZkZWYgX19ERUNDCitfUFJPVE9UWVAoaW50IHRn ZXRlbnQsKGNoYXIgKiwgY2hhciAqKSk7CisjZW5kaWYgLyogX19ERUNDICovCisjZW5kaWYgLyog Vk1TICovCisKKy8qCisgIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgd2F5cyB0byBkbyBmdWxs c2NyZWVuIG9uIFZNUy4KKyAgMS4gVXNlIHRoZSByZWFsIGN1cnNlcyBsaWJyYXJ5LCBWQVhDQ1VS U0UuCisgIDIuIFVzZSBkby1pdC15b3Vyc2VsZiBjb2RlLgorICAzLiBVc2UgdGhlIFNjcmVlbiBN YW5hZ2VyLCBTTUckLgorCisgIE1ldGhvZCAxIGRvZXNuJ3Qgd29yayBxdWl0ZSByaWdodDsgeW91 IGNhbid0IGNhbGwgZW5kd2luKCksIHNvIG9uY2UgeW91J3ZlCisgIHN0YXJ0ZWQgY3Vyc2VzIG1v ZGUsIHlvdSBjYW4gbmV2ZXIgbGVhdmUuCisKKyAgTWV0aG9kIDIgZG9lc24ndCBvcHRpbWl6ZSB0 aGUgc2NyZWVuLCBhbmQgc28gbXVjaCBtb3JlIHRpbWUgaXMgc3BlbnQgaW4KKyAgc2NyZWVuIHdy aXRlcy4gIFRoaXMgYWN0dWFsbHkgY2F1c2VzIGZpbGUgdHJhbnNmZXJzIHRvIGZhaWwgYmVjYXVz ZSB0aGUKKyAgdHR5IGRldmljZSBpbnB1dCBidWZmZXIgY2FuIGJlIG92ZXJydW4gd2hpbGUgdGhl IHNjcmVlbiBpcyBiZWluZyB1cGRhdGVkLAorICBlc3BlY2lhbGx5IG9uIGEgc2xvdyBNaWNyb1ZB WCB0aGF0IGhhcyBzbWFsbCB0eXBlYWhlYWQgYnVmZmVycy4KKworICBJbiB0aGUgZm9sbG93aW5n ICNpZmRlZiBibG9jaywgI2RlZmluZSBvbmUgb2YgdGhlbSBhbmQgI3VuZGVmIHRoZSBvdGhlciAy LgorCisgIFNvIG5vdyBsZXQncyB0cnkgbWV0aG9kIDMuLi4KKyovCisjaWZkZWYgVk1TCisjZGVm aW5lIENLX1NNRyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2NyZWVuIE1hbmFnZXIgKi8K KyN1bmRlZiBNWUNVUlNFUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2Vs ZiAqLworI3VuZGVmIFZNU0NVUlNFICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZBWENDVVJT RSBsaWJyYXJ5ICovCisjZW5kaWYgLyogVk1TICovCisvKgorICBCdXQganVzdCBiZWZvcmUgTmV3 IFllYXJzLCAyMDAwLCB0aGUgU01HIGxpYnJhcnkgc2VlbWVkIHRvIGJyZWFrIG9uCisgIGJvdGgg Vk1TIHN5c3RlbXMgd2UgaGF2ZSBoZXJlIChhbiBBbHBoYSB3aXRoIFZNUyA3LjEgYW5kIGEgVkFY IHdpdGggNS41KS4KKyAgU28gYmFjayB0byBNWUNVUlNFUywgd2hpY2ggd29ya3MgZmluZS4KKyov CisjaWZkZWYgVk1TCisjdW5kZWYgQ0tfU01HCisjZGVmaW5lIE1ZQ1VSU0VTCisjZW5kaWYgLyog Vk1TICovCisKKyNpZmRlZiBNWUNVUlNFUworI2RlZmluZSBzdGRzY3IgMAorI2lmZGVmIENLX1dS RUZSRVNICisjdW5kZWYgQ0tfV1JFRlJFU0gKKyNlbmRpZiAvKiBDS19XUkVGUkVTSCAqLworI2Vu ZGlmIC8qIE1ZQ1VSU0VTICovCisKKy8qICBTIEMgUiBFIEUgTiBDICAtLSAgU2NyZWVuIGRpc3Bs YXkgZnVuY3Rpb24sIHVzZXMgY3Vyc2VzICAqLworCisvKiBJZGVhIGZvciBjdXJzZXMgZGlzcGxh eSBjb250cmlidXRlZCBieSBDaHJpcyBQcmF0dCBvZiBBUFYgQmFrZXIsIFVLICovCisKKy8qIEF2 b2lkIGNvbmZpY3RzIHdpdGggY3Vyc2VzLmggKi8KKworI2lmZGVmIFFOWAorLyogU2FtZSBhcyBj a2Nhc2MuaCwgYnV0IGluIGEgZGlmZmVyZW50IHJhZGl4Li4uICovCisjaWZkZWYgRVNDCisjdW5k ZWYgRVNDCisjZW5kaWYgLyogRVNDICovCisjZW5kaWYgLyogUU5YICovCisKKyNpZm5kZWYgTVlD VVJTRVMKKyN1bmRlZiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIHdh cyBkZWZpbmVkIGluIGNrY2RlYi5oICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKworI3VuZGVm IEJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIHdlcmUgZGVmaW5lZCBp biBja2Nhc2MuaCAqLworI3VuZGVmIENSCisjdW5kZWYgTkwKKyN1bmRlZiBTTworI2lmZGVmIFVT CisjdW5kZWYgVVMKKyNlbmRpZgkvKiBVUyAqLworI3VuZGVmIFNQICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIFVzZWQgaW4gbmN1cnNlcyAqLworI2RlZmluZSBDSFJfU1AgMzIgICAg ICAgICAgICAgICAgICAgICAgIC8qIFVzZSB0aGlzIGluc3RlYWQgKi8KKworI2lmZGVmIFZNUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZNUyBmdWxsc2NyZWVuIGRpc3BsYXkgKi8K KyNpZmRlZiBNWUNVUlNFUyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEby1pdC15b3Vyc2Vs ZiBtZXRob2QgKi8KK2V4dGVybiBpbnQgaXN2dDUyOyAgICAgICAgICAgICAgICAgICAgICAvKiBG cm9tIENLVlRJTy5DICovCisjZGVmaW5lIHByaW50dyBwcmludGYKKyNlbHNlCisjaWZkZWYgVk1T Q1VSU0UgICAgICAgICAgICAgICAgICAgICAgICAgLyogVk1TIGN1cnNlcyBsaWJyYXJ5IFZBWEND VVJTRSAqLworI2luY2x1ZGUgPGN1cnNlcy5oPgorLyogTm90ZTogU2NyZWVuIG1hbmFnZXIgZG9l c24ndCBuZWVkIGEgaGVhZGVyIGZpbGUgKi8KKyNlbmRpZiAvKiBWTVNDVVJTRSAqLworI2VuZGlm IC8qIE1ZQ1VSU0VTICovCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogTm90IFZNUyAqLworI2lmZGVmIE1ZQ1VSU0VTICAgICAgICAgICAgICAgICAgICAgICAgIC8q IERvLWl0LXlvdXJzZWxmIG1ldGhvZCAqLworI2RlZmluZSBpc3Z0NTIgMCAgICAgICAgICAgICAg ICAgICAgICAgIC8qIFVzZWQgYnkgT1MvMiwgVlQtMTAwL0FOU0kgYWx3YXlzICovCisjaWZkZWYg Q0tYUFJJTlRGCisjZGVmaW5lIHByaW50dyBja3hwcmludGYKKyNlbHNlIC8qIENLWFBSSU5URiAq LworI2lmZGVmIEtVSQorI2RlZmluZSBwcmludHcgVnNjcm5wcmludHcKKyNlbHNlIC8qIEtVSSAq LworI2RlZmluZSBwcmludHcgcHJpbnRmCisjZW5kaWYgLyogS1VJICovCisjZW5kaWYgLyogQ0tY UFJJTlRGICovCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNl IHJlYWwgY3Vyc2VzICovCisjaWZkZWYgQ0tfTkNVUlNFUyAgICAgICAgICAgICAgICAgICAgICAg Lyogb3IgbmN1cnNlcy4uLiAqLworI2lmZGVmIENLWFBSSU5URiAgICAgICAgICAgICAgICAgICAg ICAgIC8qIE91ciBwcmludGYgbWFjcm8gY29uZmxpY3RzIHdpdGggKi8KKyN1bmRlZiBwcmludGYg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1c2Ugb2YgInByaW50ZiIgaW4gbmN1cnNlcy5o ICovCisjZW5kaWYgLyogQ0tYUFJJTlRGICovCisjaW5jbHVkZSA8bmN1cnNlcy5oPgorI2lmZGVm IENLWFBSSU5URgorI2RlZmluZSBwcmludGYgY2t4cHJpbnRmCisjZW5kaWYgLyogQ0tYUFJJTlRG ICovCisjZWxzZSAgLyogTm90IG5jdXJzZXMgKi8KKyNpZmRlZiBDS1hQUklOVEYgICAgICAgICAg ICAgICAgICAgICAgICAvKiBPdXIgcHJpbnRmIG1hY3JvIGNvbmZsaWN0cyB3aXRoICovCisjdW5k ZWYgcHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlIG9mICJwcmludGYiIGlu IGN1cnNlcy5oICovCisjZW5kaWYgLyogQ0tYUFJJTlRGICovCisjaWZkZWYgTV9YRU5JWAkJCQkv KiBTQ08gWEVOSVguLi4gKi8KKyNpZmRlZiBNX1RFUk1DQVAKKyN1bmRlZiBNX1RFUk1DQVAKKyNl bmRpZiAvKiBNX1RFUk1DQVAgKi8KKyNpZm5kZWYgTV9URVJNSU5GTworI2RlZmluZSBNX1RFUk1J TkZPCisjZW5kaWYgLyogTV9URVJNSU5GTyAqLworI2VuZGlmIC8qIE1fWEVOSVggKi8KKyNpZmRl ZiBSVEFJWAorI3VuZGVmIE5MUwkJCQkvKiBBdm9pZCAncmVkZWNsYXJhdGlvbiBvZiBmcmVlJy4g Ki8KKyNlbmRpZiAvKiBSVEFJWCAqLworI2luY2x1ZGUgPGN1cnNlcy5oPgorI2lmZGVmIENLWFBS SU5URgorI2RlZmluZSBwcmludGYgY2t4cHJpbnRmCisjZW5kaWYgLyogQ0tYUFJJTlRGICovCisj ZW5kaWYgLyogQ0tfTkNVUlNFUyAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisjZW5kaWYgLyog Vk1TICovCisKKyNpZmRlZiBCVUc5OTkKK19QUk9UT1RZUChpbnQgdGdldGVudCwoY2hhciAqLCBj aGFyICopKTsKK19QUk9UT1RZUChjaGFyICp0Z2V0c3RyLChjaGFyICosIGNoYXIgKiopKTsKK19Q Uk9UT1RZUChpbnQgdHB1dHMsKGNoYXIgKiwgaW50LCBpbnQgKCopKCkpKTsKK19QUk9UT1RZUChj aGFyICp0Z290bywoY29uc3QgY2hhciAqLCBpbnQsIGludCkpOworI2VuZGlmCS8qIEJVRzk5OSAq LworCisjZW5kaWYgLyogQ0tfQ1VSU0VTICovCisKKy8qICBGIFggRCBJIE4gSSBUICAtLSAgRmls ZSBYZmVyIERpc3BsYXkgSW5pdGlhbGl6YXRpb24gICovCisKKyNpZmRlZiBDS19DVVJTRVMKKyNp Zm5kZWYgTVlDVVJTRVMKKyNpZm5kZWYgQ0tfU01HCitzdGF0aWMKKyNpZmRlZiBDS19BTlNJQwor LyogQ2FuJ3QgdXNlIFZPSUQgYmVjYXVzZSBvZiBjdXJzZXMuaCAqLwordm9pZAorY2tfdGVybXNl dChpbnQpOworI2Vsc2UKK2NrX3Rlcm1zZXQoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworI2Vu ZGlmIC8qIENLX1NNRyAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisjZW5kaWYgLyogQ0tfQ1VS U0VTICovCisKKyNpZmRlZiBOT1RFUk1DQVAKK3N0YXRpYyBpbnQgbm90ZXJtY2FwID0gMTsKKyNl bHNlCitzdGF0aWMgaW50IG5vdGVybWNhcCA9IDA7CisjZW5kaWYgLyogTk9URVJNQ0FQICovCisK KyNpZm5kZWYgTk9ESVNQTEFZCitDS1ZPSUQKK2Z4ZGluaXQoeGRpc3BsYSkgaW50IHhkaXNwbGE7 IHsKKyNpZm5kZWYgQ09IRVJFTlQKKyNpZm5kZWYgT1MyCisjaWZuZGVmIFNUUkFUVVMKKyAgICBj aGFyICpzOworICAgIGludCB4LCBkdW1teTsKKworICAgIGRlYnVnKEYxMDEsImZ4ZGluaXQgeGRp c3BsYSIsIiIseGRpc3BsYSk7CisgICAgZGVidWcoRjEwMSwiZnhkaW5pdCBmeGRfaW5pdGVkIiwi IixmeGRfaW5pdGVkKTsKKworI2lmZGVmIElLU0QKKyNpZm5kZWYgTk9YRkVSCisgICAgLyogTm8g Y3Vyc2VzIGZvciBJS1NEICovCisgICAgaWYgKGluc2VydmVyKSB7CisgICAgICAgIGZkaXNwbGEg PSBYWUZEX047CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGZ4ZF9pbml0ZWQpICAg ICAgICAgICAgICAgICAgICAgLyogT25seSBkbyB0aGlzIG9uY2UgKi8KKyAgICAgIHJldHVybjsK KyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNlbmRpZiAvKiBJS1NEICovCisKKyAgICBpZiAoeGRpc3Bs YSA9PSBYWUZEX1IgfHwgeGRpc3BsYSA9PSBYWUZEX1MgfHwgeGRpc3BsYSA9PSBYWUZEX0IpIHsK KwlpZiAoeGZybXNnKSB7CisJICAgIHByaW50ZigiJXNcbiIseGZybXNnKTsKKwkgICAgbWFrZXN0 cigmeGZybXNnLE5VTEwpOworCX0KKyAgICB9CisKKyNpZmRlZiBDS19DVVJTRVMKKyNpZmRlZiBW TVMKKyAgICAvKiBGb3JjZSBCUklFRiBpbiBCYXRjaCBsb2dzICovCisgICAgaWYgKGJhdGNoICYm ICh4ZGlzcGxhID09IFhZRkRfQyB8fCB4ZGlzcGxhID09IFhZRkRfUykpCisgICAgICB4ZGlzcGxh ID0gWFlGRF9COworI2Vsc2UKKyAgICBpZiAoeGRpc3BsYSA9PSBYWUZEX0MgfHwgeGRpc3BsYSA9 PSA5OTk5KSB7CisKKyNpZmRlZiBEWU5BTUlDCisgICAgICAgIGlmICghdHJtYnVmKSB7CisvKgor ICBBbGxvY2F0ZSB0Z2V0ZW50KCkgYnVmZmVyLiAgTWFrZSBpdCBiaWcgLS0gc29tZSB0ZXJtY2Fw cyBjYW4gYmUgaHVnZTsKKyAgdGdldGVudCgpIG1lcnJpbHkgd3JpdGVzIHBhc3QgdGhlIGVuZCBv ZiB0aGUgYnVmZmVyLCBjYXVzaW5nIGNvcmUgZHVtcHMKKyAgb3Igd29yc2UuCisqLworICAgICAg ICAgICAgdHJtYnVmID0gKGNoYXIgKiltYWxsb2MoVFJNQlVGTCk7CisgICAgICAgICAgICBpZiAo IXRybWJ1ZikgeworICAgICAgICAgICAgICAgIG5vdGVybWNhcCA9IDE7CisgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiZnhkaW5pdCBtYWxsb2MgdHJtYnVmIiwiRkFJTEVEIixUUk1CVUZMKTsK KyAgICAgICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOworICAgICAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBkZWJ1ZyhGMTEx LCJmeGRpbml0IG1hbGxvYyB0cm1idWYiLCJPSyIsVFJNQlVGTCk7CisgICAgICAgICAgICBkZWJ1 ZyhGMDAxLCJmeGRpbml0IHRybWJ1ZiIsIiIsdHJtYnVmKTsKKyAgICAgICAgICAgIG1lbXNldCh0 cm1idWYsJ1wwJywoc2l6ZV90KVRSTUJVRkwpOworICAgICAgICAgICAgZGVidWcoRjEwMCwiZnhk aW5pdCBtZW1zZXQgT0siLCIiLDApOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgfQor I2VuZGlmIC8qIERZTkFNSUMgKi8KKworICAgICAgICBkZWJ1ZyhGMTAwLCJmeGRpbml0IGJlZm9y ZSBnZXRlbnYoVEVSTSkiLCIiLDApOworICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7CisgICAg ICAgIGRlYnVnKEYxMTAsImZ4ZGluaXQgYWZ0ZXIgZ2V0ZW52KFRFUk0pIixzLDApOworICAgICAg ICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJmeGRpbml0IGJlZm9yZSB0Z2V0ZW50KCkiLHMsMCk7CisgICAgICAgICAgICB4ID0gdGdl dGVudCh0cm1idWYscyk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJmeGRpbml0IHRnZXRlbnQi LHMseCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgICAg IG5vdGVybWNhcCA9IDE7CisgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJmeGRpbml0IFRFUk0gbnVs bCAtIG5vIHRnZXRlbnQiLHMsMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPCAxICYmICFx dWlldCAmJiAhYmFja2dyZAorI2lmZGVmIFZNUworICAgICAgICAgICAgJiYgIWJhdGNoCisjZW5k aWYgLyogVk1TICovCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIHByaW50ZigiV2Fybmlu ZzogdGVybWluYWwgdHlwZSB1bmtub3duOiBcIiVzXCJcbiIscyk7CisjaWZkZWYgQ09NTUVOVAor CSAgICAvKiBDb25mdXNpbmcgLSBub2JvZHkga25vd3Mgd2hhdCB0aGlzIG1lYW5zICovCisgICAg ICAgICAgICBwcmludGYoIlNDUkVFTiBjb21tYW5kIHdpbGwgdXNlIEFOU0kgc2VxdWVuY2VzLlxu Iik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICAgICAgaWYgKGxvY2FsKQorICAgICAg ICAgICAgICBwcmludGYoIkZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGRpc2FibGVk LlxuIik7CisgICAgICAgICAgICBmZGlzcGxhID0gWFlGRF9TOworICAgICAgICB9CisjaWZuZGVm IE1ZQ1VSU0VTCisjaWZuZGVmIENLX1NNRworICAgICAgICBja190ZXJtc2V0KHgpOworI2VuZGlm IC8qIENLX1NNRyAqLworI2VuZGlmIC8qIE1ZQ1VSU0VTICovCisgICAgICAgIGZ4ZF9pbml0ZWQg PSAxOworICAgIH0KKyNlbmRpZiAvKiBDS19DVVJTRVMgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogT1MyICovCisjZW5kaWYgLyogQ09IRVJFTlQg Ki8KK30KKyNlbmRpZiAvKiBOT0RJU1BMQVkgKi8KKworI2lmZGVmIENLX0NVUlNFUworI2lmZGVm IENLX1NNRworLyoKKyAgTG9uZyBzZWN0aW9uIGZvciBTY3JlZW4gTWFuYWdlciBzdGFydHMgaGVy ZS4uLgorICBCeSBXaWxsaWFtIEJhZGVyLgorKi8KKyNpbmNsdWRlICJja3Z2bXMuaCIKKyNpZmRl ZiBPTERfVk1TCisjaW5jbHVkZSA8c21nZGVmLmg+ICAgICAgICAgICAgICAgICAgICAgLyogdXNl IHRoaXMgb24gVkFYIEMgMi40ICovCisvKiAjaW5jbHVkZSA8c21nbXNnLmg+ICovCisjZWxzZQor I2luY2x1ZGUgPHNtZyRyb3V0aW5lcy5oPiAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIg Ki8KKyNlbmRpZiAvKiBPTERfVk1TICovCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdm1zX3N0YXR1 czsgICAgIC8qIFVzZWQgZm9yIHN5c3RlbSBzZXJ2aWNlIHJldHVybiBzdGF0dXMgKi8KKworc3Rh dGljIGxvbmcgc21nX3Bhc3RlYm9hcmRfaWQgPSAtMTsgICAgIC8qIHBhc3RlYm9hcmQgaWRlbnRp ZmllciAqLworc3RhdGljIGxvbmcgc21nX2Rpc3BsYXlfaWQgPSAtMTsgICAgICAgIC8qIGRpc3Bs YXkgaWRlbnRpZmllciAqLworc3RhdGljIGludCBzbWdfb3BlbiA9IDA7ICAgICAgICAgICAgICAg IC8qIGZsYWcgaWYgc21nIGN1cnJlbnQgb3BlbiAqLworc3RhdGljIGludCBzbWdfaW5pdGVkID0g MDsgICAgICAgICAgICAgIC8qIGZsYWcgaWYgc21nIGluaXRpYWxpemVkICovCisKKyNpZmRlZiBD T01NRU5UCisjZGVmaW5lIGNscnRvZW9sKCkgICAgICBTTUckRVJBU0VfTElORSgmc21nX2Rpc3Bs YXlfaWQsIDAsIDApCisKKyNkZWZpbmUgY2xlYXIoKSAgICAgICAgIFNNRyRFUkFTRV9ESVNQTEFZ KCZzbWdfZGlzcGxheV9pZCwgMCwgMCwgMCwgMCkKKworI2RlZmluZSB0b3VjaHdpbihzY3IpICAg U01HJFJFUEFJTlRfU0NSRUVOKCZzbWdfcGFzdGVib2FyZF9pZCkKKworI2Vsc2UgIC8qIE5vdCBD T01NRU5UICovCisKKyNkZWZpbmUgY2xydG9lb2woKSAgICAgIHNtZyRlcmFzZV9saW5lKCZzbWdf ZGlzcGxheV9pZCwgMCwgMCkKKworI2RlZmluZSBjbGVhcigpICAgICAgICAgc21nJGVyYXNlX2Rp c3BsYXkoJnNtZ19kaXNwbGF5X2lkLCAwLCAwLCAwLCAwKQorCisjZGVmaW5lIHRvdWNod2luKHNj cikgICBzbWckcmVwYWludF9zY3JlZW4oJnNtZ19wYXN0ZWJvYXJkX2lkKQorI2VuZGlmIC8qIENP TU1FTlQgKi8KKworI2RlZmluZSBjbGVhcm9rKGN1cnNjcixvaykgICAgICAgICAgICAgIC8qIExl dCB3cmVmcmVzaCgpIGRvIHRoZSB3b3JrICovCisKKyNkZWZpbmUgd3JlZnJlc2goY3Vyc3JjKSB0 b3VjaHdpbihzY3IpCisKK3N0YXRpYyB2b2lkCittb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7 IHsKKyAgICAvKiBDaGFuZ2UgZnJvbSAwLWJhc2VkIGZvciBjdXJzZXMgdG8gMS1iYXNlZCBmb3Ig U01HICovCisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJldHVybjsKKyAgICArK3JvdzsgKytj b2w7CisgICAgZGVidWcoRjExMSwiVk1TIHNtZyBtb3ZlIixja2l0b2Eocm93KSxjb2wpOworI2lm ZGVmIENPTU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1hcnRpbiBaaW5zZXIgKi8K KyAgICBDSEVDS19FUlIoIm1vdmU6IHNtZyRzZXRfY3Vyc29yX2FicyIsCisgICAgICAgICAgICAg IFNNRyRTRVRfQ1VSU09SX0FCUygmc21nX2Rpc3BsYXlfaWQsICZyb3csICZjb2wpKTsKKyNlbHNl CisgICAgQ0hFQ0tfRVJSKCJtb3ZlOiBzbWckc2V0X2N1cnNvcl9hYnMiLAorICAgICAgICAgICAg ICBzbWckc2V0X2N1cnNvcl9hYnMoJnNtZ19kaXNwbGF5X2lkLCAmcm93LCAmY29sKSk7CisjZW5k aWYgLyogQ09NTUVOVCAqLworICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgbW92ZSB2bXNfc3RhdHVz IiwiIix2bXNfc3RhdHVzKTsKK30KKworI2lmZGVmIFZNU19WNDAKKyNkZWZpbmUgT0xEX1ZNUwor I2VuZGlmIC8qIFZNU19WNDAgKi8KKyNpZmRlZiBWTVNfVjQyCisjZGVmaW5lIE9MRF9WTVMKKyNl bmRpZiAvKiBWTVNfVjQyICovCisjaWZkZWYgVk1TX1Y0NAorI2RlZmluZSBPTERfVk1TCisjZW5k aWYgLyogVk1TX1Y0NCAqLworCitzdGF0aWMgaW50Citpbml0c2NyKCkgeworICAgIGludCByb3dz ID0gMjQsIGNvbHMgPSA4MDsKKyAgICBpbnQgcm93ID0gMSwgY29sID0gMTsKKworICAgIGRlYnVn KEYxMDEsIlZNUyBpbml0c2NyIHNtZ19wYXN0ZWJvYXJkX2lkIEEiLCIiLHNtZ19wYXN0ZWJvYXJk X2lkKTsKKworICAgIGlmIChzbWdfcGFzdGVib2FyZF9pZCA9PSAtMSkgeyAvKiBPcGVuIHRoZSBz Y3JlZW4gKi8KKyNpZmRlZiBPTERfVk1TICAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogUm91 dGluZSBjYWxscyBsb3dlcmNhc2VkIDkvOTYgKi8KKyAgICAgICAgQ0hFQ0tfRVJSKCJpbml0c2Ny OiBzbWckY3JlYXRlX3Bhc3RlYm9hcmQiLAorICAgICAgICAgICAgICAgICAgc21nJGNyZWF0ZV9w YXN0ZWJvYXJkKCZzbWdfcGFzdGVib2FyZF9pZCwgMCwgMCwgMCwgMCkpOworI2Vsc2UKKyAgICAg ICAgLyogRm9yIFZNUyBWNSwgbm90IHRlc3RlZCAqLworICAgICAgICBDSEVDS19FUlIoImluaXRz Y3I6IHNtZyRjcmVhdGVfcGFzdGVib2FyZCIsCisgICAgICAgICAgICAgICAgICBzbWckY3JlYXRl X3Bhc3RlYm9hcmQoJnNtZ19wYXN0ZWJvYXJkX2lkLCAwLCAwLCAwLCAwLCAwKSk7CisjZW5kaWYg LyogT0xEX1ZNUyAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfcGFz dGVib2FyZF9pZCBCIiwiIixzbWdfcGFzdGVib2FyZF9pZCk7CisgICAgaWYgKHNtZ19wYXN0ZWJv YXJkX2lkID09IC0xKSB7CisJcHJpbnRmKCI/RXJyb3IgaW5pdGlhbGl6aW5nIGZ1bGxzY3JlZW4g ZGlzcGxheVxuIik7CisJZmRpc3BsYSA9IFhZRkRfUzsKKwlkcHlpbml0KCk7CisJcmV0dXJuKDAp OworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJWTVMgaW5pdHNjciBzbWdfZGlzcGxheV9pZCIsIiIs c21nX2Rpc3BsYXlfaWQpOworICAgIGlmIChzbWdfZGlzcGxheV9pZCA9PSAtMSkgeyAgICAgICAg IC8qIENyZWF0ZSBhIGRpc3BsYXkgd2luZG93ICovCisKKyNpZmRlZiBDT01NRU5UICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBNYXJ0aW4gWmluc2VyICovCisgICAgICAgIENIRUNLX0VSUigi aW5pdHNjcjogc21nJGNyZWF0ZV92aXJ0dWFsX2Rpc3BsYXkiLAorICAgICAgICAgICAgICAgICAg U01HJENSRUFURV9WSVJUVUFMX0RJU1BMQVkoJnJvd3MsICZjb2xzLCAmc21nX2Rpc3BsYXlfaWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKSk7 CisKKyAgICAgICAgLyogQ29ubmVjdCB0aGUgZGlzcGxheSB3aW5kb3cgdG8gdGhlIHNjcmVlbiAq LworICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXki LAorICAgICAgICAgICAgICAgICAgU01HJFBBU1RFX1ZJUlRVQUxfRElTUExBWSgmc21nX2Rpc3Bs YXlfaWQsJnNtZ19wYXN0ZWJvYXJkX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmcm93LCZjb2wpKTsKKyNlbHNlCisgICAgICAgIENIRUNLX0VSUigiaW5p dHNjcjogc21nJGNyZWF0ZV92aXJ0dWFsX2Rpc3BsYXkiLAorICAgICAgICAgICAgICAgICAgc21n JGNyZWF0ZV92aXJ0dWFsX2Rpc3BsYXkoJnJvd3MsICZjb2xzLCAmc21nX2Rpc3BsYXlfaWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwKSk7CisK KyAgICAgICAgLyogQ29ubmVjdCB0aGUgZGlzcGxheSB3aW5kb3cgdG8gdGhlIHNjcmVlbiAqLwor ICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRwYXN0ZV92aXJ0dWFsX2Rpc3BsYXkiLAor ICAgICAgICAgICAgICAgICAgc21nJHBhc3RlX3ZpcnR1YWxfZGlzcGxheSgmc21nX2Rpc3BsYXlf aWQsJnNtZ19wYXN0ZWJvYXJkX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmcm93LCZjb2wpKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgfQorICAg IGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19vcGVuIEEiLCIiLHNtZ19vcGVuKTsKKyAgICBp ZiAoIXNtZ19vcGVuKSB7ICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBhIGJhdGNoIHVwZGF0 ZSAqLworICAgICAgICBzbWdfb3BlbiA9IDE7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICBDSEVD S19FUlIoImluaXRzY3I6IHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAg ICAgICAgICBTTUckQkVHSU5fUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7 CisjZWxzZQorICAgICAgICBDSEVDS19FUlIoImluaXRzY3I6IHNtZyRiZWdpbl9wYXN0ZWJvYXJk X3VwZGF0ZSIsCisgICAgICAgICAgICAgICAgICBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUo JnNtZ19wYXN0ZWJvYXJkX2lkKSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCWRlYnVnKEYxMDEs IlZNUyBpbml0c2NyIHNtZyRiZWdpbl9wYXN0ZWJvYXJkX3VwZGF0ZSIsIiIsdm1zX3N0YXR1cyk7 CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBpbml0c2NyIHNtZ19vcGVuIEIiLCIiLHNtZ19v cGVuKTsKKyAgICBzbWdfaW5pdGVkID0gMTsKKyAgICByZXR1cm4oMSk7Cit9CisKK3N0YXRpYyB2 b2lkCityZWZyZXNoKCkgeworICAgIGRlYnVnKEYxMDEsInJlZnJlc2ggc21nX3Bhc3RlYm9hcmRf aWQiLCIiLHNtZ19wYXN0ZWJvYXJkX2lkKTsKKworICAgIGlmIChzbWdfb3BlbiA9PSAwIHx8IHNt Z19wYXN0ZWJvYXJkX2lkID09IC0xKQorICAgICAgcmV0dXJuOworCisjaWZkZWYgQ09NTUVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogTWFydGluIFppbnNlciAqLworICAgIENIRUNLX0VS UigicmVmcmVzaDogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAgICAgIFNN RyRFTkRfUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7CisgICAgQ0hFQ0tf RVJSKCJyZWZyZXNoOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAg ICBTTUckQkVHSU5fUEFTVEVCT0FSRF9VUERBVEUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7CisjZWxz ZQorICAgIENIRUNLX0VSUigicmVmcmVzaDogc21nJGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisg ICAgICAgICAgICAgIHNtZyRlbmRfcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lk KSk7CisgICAgQ0hFQ0tfRVJSKCJyZWZyZXNoOiBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUi LAorICAgICAgICAgICAgICBzbWckYmVnaW5fcGFzdGVib2FyZF91cGRhdGUoJnNtZ19wYXN0ZWJv YXJkX2lkKSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorCitzdGF0aWMgdm9pZAorZW5kd2lu KCkgeworICAgIGlmICghc21nX29wZW4pCisgICAgICByZXR1cm47CisKKyAgICBzbWdfb3BlbiA9 IDA7CisKKyNpZmRlZiBDT01NRU5UCisgICAgQ0hFQ0tfRVJSKCJlbmR3aW46IHNtZyRlbmRfcGFz dGVib2FyZF91cGRhdGUiLAorICAgICAgICAgICAgICBTTUckRU5EX1BBU1RFQk9BUkRfVVBEQVRF KCZzbWdfcGFzdGVib2FyZF9pZCkpOworI2Vsc2UKKyAgICBDSEVDS19FUlIoImVuZHdpbjogc21n JGVuZF9wYXN0ZWJvYXJkX3VwZGF0ZSIsCisgICAgICAgICAgICAgIHNtZyRlbmRfcGFzdGVib2Fy ZF91cGRhdGUoJnNtZ19wYXN0ZWJvYXJkX2lkKSk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisg ICAgbW92ZSgyMiwgMCk7CisKKyNpZmRlZiBDT01NRU5UCisvKgorICBUaGVzZSBjYWxscyBjbGVh ciB0aGUgc2NyZWVuLgorICAoY29udmVydCByb3V0aW5lIGNhbGxzIHRvIGxvd2VyY2FzZSAtIE1h cnRpbiBaaW5zZXIpCisqLworICAgIENIRUNLX0VSUigiZW5kd2luOiBzbWckZGVsZXRlX3ZpcnR1 YWxfZGlzcGxheSIsCisgICAgICAgICAgICAgIFNNRyRERUxFVEVfVklSVFVBTF9ESVNQTEFZKCZz bWdfZGlzcGxheV9pZCkpOworICAgIHNtZ19kaXNwbGF5X2lkID0gLTE7CisKKyAgICBDSEVDS19F UlIoImVuZHdpbjogc21nJGRlbGV0ZV9wYXN0ZWJvYXJkIiwKKyAgICAgICAgICAgICAgU01HJERF TEVURV9QQVNURUJPQVJEKCZzbWdfcGFzdGVib2FyZF9pZCwgMCkpOworICAgIHNtZ19wYXN0ZWJv YXJkX2lkID0gLTE7CisjZW5kaWYgLyogQ09NTUVOVCAqLworfQorCisjaWZkZWYgQ09NTUVOVAor LyogREVDQyA2LjIgc2NyZWFtcyBibG9vZHkgbXVyZGVyIGFib3V0IHByaW50dyAoIm5vdCBlbm91 Z2ggYXJncyIpICovCisvKiBidXQgYWRkaW5nIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlIG9ubHkg bWFrZXMgaXQgaG9sbGVyIGxvdWRlci4gKi8KKyNpZmRlZiBfX0RFQ0MKKy8qICJ2YXJhcmdzIiBw cm90b3R5cGUgZm9yIHByaW50dyAqLworX1BST1RPVFlQKHN0YXRpYyBpbnQgcHJpbnR3LChjaGFy ICosIC4uLikpOworI2VuZGlmIC8qIF9fREVDQyAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKwor I2lmZGVmIF9fREVDQworI2luY2x1ZGUgPHN0ZGFyZy5oPgorX1BST1RPVFlQKHN0YXRpYyB2b2lk IHByaW50dywoY2hhciAqLCAuLi4pKTsKK3N0YXRpYyB2b2lkCitwcmludHcoY2hhciAqc3RyLC4u LikgeworICAgIGNoYXIgYnVmWzI1NV07CisgICAgdmFfbGlzdCBhcDsKKyAgICAkREVTQ1JJUFRP Uih0ZXh0X2RzYywgMCk7CisgICAgdGV4dF9kc2MuZHNjJGFfcG9pbnRlcj1idWY7CisgICAgaWYg KCFzbWdfb3BlbikKKyAgICAgIHJldHVybjsKKyAgICB2YV9zdGFydChhcCxzdHIpOworICAgIHRl eHRfZHNjLmRzYyR3X2xlbmd0aCA9IHZzcHJpbnRmKGJ1Ziwgc3RyLCBhcCk7CisgICAgdmFfZW5k KGFwKTsKKyAgICBDSEVDS19FUlIoInByaW50dzogc21nJHB1dF9jaGFycyIsCisgICAgICAgICAg ICAgIHNtZyRwdXRfY2hhcnMoJnNtZ19kaXNwbGF5X2lkLCAmdGV4dF9kc2MsIDAsIDAsIDAsIDAs IDApKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZAorcHJpbnR3KHN0ciwgYTEsIGEyLCBhMywgYTQs IGE1LCBhNiwgYTcsIGE4KQorICAgIGNoYXIgKnN0cjsKKyAgICBsb25nIGExLCBhMiwgYTMsIGE0 LCBhNSwgYTYsIGE3LCBhODsKKy8qIHByaW50dyAqLyB7CisgICAgY2hhciBidWZbMjU1XTsKKyAg ICAkREVTQ1JJUFRPUih0ZXh0X2RzYywgMCk7CisgICAgaWYgKCFzbWdfb3BlbikKKyAgICAgIHJl dHVybjsKKyAgICB0ZXh0X2RzYy5kc2MkYV9wb2ludGVyPWJ1ZjsKKyAgICB0ZXh0X2RzYy5kc2Mk d19sZW5ndGggPSBzcHJpbnRmKGJ1Ziwgc3RyLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywg YTgpOworICAgIENIRUNLX0VSUigicHJpbnR3OiBzbWckcHV0X2NoYXJzIiwKKyAgICAgICAgICAg ICAgc21nJHB1dF9jaGFycygmc21nX2Rpc3BsYXlfaWQsICZ0ZXh0X2RzYywgMCwgMCwgMCwgMCwg MCkpOworfQorI2VuZGlmIC8qIF9fREVDQyAqLworCisjZGVmaW5lIENLX0NVUlBPUworaW50Citj a19jdXJwb3Mocm93LCBjb2wpIHsKKyAgICBkZWJ1ZyhGMTExLCJWTVMgc21nIGNrX2N1cnBvcyIs Y2tpdG9hKHJvdyksY29sKTsKKyAgICBpZiAoIXNtZ19pbml0ZWQgfHwgIXNtZ19vcGVuKSB7Cisg ICAgICAgIGluaXRzY3IoKTsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiVk1TIHNtZyBjdXJwb3Mg c21nX29wZW4iLCIiLHNtZ19vcGVuKTsKKyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJu KDApOworICAgIGRlYnVnKEYxMTEsIlZNUyBzbWcgY2tfY3VycG9zIixja2l0b2Eocm93LTEpLGNv bC0xKTsKKyAgICBtb3ZlKHJvdyAtIDEsIGNvbCAtIDEpOyAgICAgICAgICAgICAvKiBTTUcgaXMg MC1iYXNlZCAqLworICAgIHJlZnJlc2goKTsKKyAgICAvKiBlbmR3aW4oKTsgKi8KKyAgICByZXR1 cm4oMCk7Cit9CisKK2ludAorY2tfY2xzKCkgeworICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tf Y2xzIHNtZ19pbml0ZWQiLCIiLHNtZ19pbml0ZWQpOworICAgIGlmICghc21nX2luaXRlZCB8fCAh c21nX29wZW4pIHsKKyAgICAgICAgaW5pdHNjcigpOworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJW TVMgc21nIGNrX2NscyBzbWdfb3BlbiIsIiIsc21nX29wZW4pOworICAgIGlmICghc21nX29wZW4p CisgICAgICByZXR1cm4oMCk7CisgICAgY2xlYXIoKTsKKyAgICByZWZyZXNoKCk7CisgICAgLyog ZW5kd2luKCk7ICovCisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworICAg IGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xlb2wgc21nX2luaXRlZCIsIiIsc21nX2luaXRlZCk7 CisgICAgaWYgKCFzbWdfaW5pdGVkIHx8ICFzbWdfb3BlbikgeworICAgICAgICBpbml0c2NyKCk7 CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlZNUyBzbWcgY2tfY2xlb2wgc21nX29wZW4iLCIiLHNt Z19vcGVuKTsKKyAgICBpZiAoIXNtZ19vcGVuKQorICAgICAgcmV0dXJuKDApOworICAgIGNscnRv ZW9sKCk7CisgICAgcmVmcmVzaCgpOworICAgIC8qIGVuZHdpbigpOyAqLworICAgIHJldHVybigw KTsKK30KKyNlbmRpZiAvKiBDS19TTUcgKi8KKworI2lmZGVmIE1ZQ1VSU0VTCisvKgorICBEby1p dC15b3Vyc2VsZiBjdXJzZXMgaW1wbGVtZW50YXRpb24gZm9yIFZNUywgT1MvMiBhbmQgb3RoZXIg QU5TSS9WVC0xMDAncy4KKyAgU3VwcG9ydHMgb25seSB0aGUgVlQ1MiBhbmQgVlQxeHggKGFuZCBs YXRlciBWVDJ4eC8zeHgvNHh4KSB0ZXJtaW5hbHMuCisgIEJ5IFRlcnJ5IEtlbm5lZHksIFN0IFBl dGVycyBDb2xsZWdlLgorCisgIEZpcnN0LCBzb21lIHN0dWZmIHdlIGNhbiBqdXN0IGlnbm9yZToK KyovCisKK3N0YXRpYyBpbnQKK3RvdWNod2luKHgpIGludCB4OyB7CisgICAgcmV0dXJuKDApOwor fQorc3RhdGljIGludAoraW5pdHNjcigpIHsKKyAgICByZXR1cm4oMCk7Cit9CitzdGF0aWMgaW50 CityZWZyZXNoKCkgeworICAgIHJldHVybigwKTsKK30KK3N0YXRpYyBpbnQKK2VuZHdpbigpIHsK KyAgICByZXR1cm4oMCk7Cit9CisKKy8qCisgKiBOb3csIHNvbWUgc3R1ZmYgd2UgbmVlZCB0byBk bzoKKyAqLworCitfUFJPVE9UWVAoIGludCBtb3ZlLCAoaW50LCBpbnQpICk7CisjaWZuZGVmIE9T MgoraW50Cittb3ZlKHJvdywgY29sKSBpbnQgcm93LCBjb2w7IHsKKyAgICBpZiAoaXN2dDUyKQor ICAgICAgcHJpbnRmKCJcMDMzWSVjJWMiLCByb3cgKyAwMzcsIGNvbCArIDAzNyk7CisgICAgZWxz ZQorICAgICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJvdyArIDEsIGNvbCArIDEpOworICAgIHJl dHVybigwKTsKK30KKworaW50CitjbGVhcigpIHsKKyAgICBtb3ZlKDAsMCk7CisgICAgaWYgKGlz dnQ1MikKKyAgICAgIHByaW50ZigiXDAzM0oiKTsKKyAgICBlbHNlCisgICAgICBwcmludGYoIlww MzNbSiIpOworICAgIHJldHVybigwKTsKK30KKworaW50CitjbHJ0b2VvbCgpIHsKKyAgICBpZiAo aXN2dDUyKQorICAgICAgcHJpbnRmKCJcMDMzSyIpOworICAgIGVsc2UKKyAgICAgIHByaW50Zigi XDAzM1tLIik7CisgICAgcmV0dXJuKDApOworfQorCisjZGVmaW5lIENLX0NVUlBPUworaW50Citj a19jbHMoKSB7CisgICAgcmV0dXJuKGNsZWFyKCkpOworfQorCitpbnQKK2NrX2NsZW9sKCkgewor ICAgIHJldHVybihjbHJ0b2VvbCgpKTsKK30KKworaW50Citja19jdXJwb3Mocm93LCBjb2wpIGlu dCByb3csIGNvbDsgeworICAgIG1vdmUocm93LCBjb2wpOworICAgIHJldHVybigwKTsKK30KKwor I2Vsc2UgLyogT1MyICovCisvKiBXaW5kb3dzIE5UIGFuZCBXaW5kb3dzIDk1IGRvIG5vdCBwcm92 aWRlIEFOU0kgZW11bGF0aW9uICovCisvKiBUaGVyZWZvcmUgd2UgbWlnaHQgYXMgd2VsbCBub3Qg dXNlIGl0IGZvciBPUy8yIGVpdGhlciAgICovCisKK2ludAorbW92ZShyb3csIGNvbCkgaW50IHJv dywgY29sOyB7CisjaWZuZGVmIE9ORVRFUk1VUEQKKyAgICBTZXRDdXJQb3Mocm93LCBjb2wpOwor I2VuZGlmIC8qIE9ORVRFUk1VUEQgKi8KKyAgICBsZ290b3h5KCBWQ01ELCBjb2wrMSwgcm93KzEp OworICAgIFZzY3JuSXNEaXJ0eShWQ01EKTsKKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2xl YXIoKSB7CisgICAgdmlvY2VsbCBjZWxsOworICAgIG1vdmUoMCwwKTsKKyNpZmRlZiBPTkVURVJN VVBECisgICAgaWYgKFZzY3JuR2V0QnVmZmVyU2l6ZShWQ01EKSA+IDApIHsKKyAgICAgICAgVnNj cm5TY3JvbGwoVkNNRCwgVVBXQVJELCAwLAorICAgICAgICAgICAgICAgICAgICBWc2NybkdldEhl aWdodChWQ01EKS0oMSksCisgICAgICAgICAgICAgICAgICAgIFZzY3JuR2V0SGVpZ2h0KFZDTUQp LSgwKSwgVFJVRSwgQ0hSX1NQKTsKKyAgICAgICAgY2xlYXJ0ZXJtc2NyZWVuKFZDTUQpOworICAg IH0KKyNlbHNlCisgICAgY2VsbC5jID0gJyAnOworICAgIGNlbGwuYSA9IGNvbG9yY21kOworICAg IFdydE5DZWxsKGNlbGwsIGNtZF9yb3dzICogY21kX2NvbHMsIDAsIDApOworI2VuZGlmIC8qIE9O RVRFUk1VUEQgKi8KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2xydG9lb2woKSB7CisgICAg VVNIT1JUIHJvdywgY29sOworICAgIHZpb2NlbGwgY2VsbDsKKworICAgIGNlbGwuYyA9ICcgJzsK KyAgICBjZWxsLmEgPSBjb2xvcmNtZDsKKyNpZm5kZWYgT05FVEVSTVVQRAorICAgIEdldEN1clBv cygmcm93LCAmY29sICk7CisgICAgV3J0TkNlbGwoY2VsbCwgY21kX2NvbHMgLSBjb2wgLTEsIHJv dywgY29sKTsKKyNlbmRpZiAvKiBPTkVURVJNVVBEICovCisgICAgY2xydG9lb2xuKFZDTUQsQ0hS X1NQKTsKKyAgICByZXR1cm4oMCk7Cit9CisKKyNkZWZpbmUgQ0tfQ1VSUE9TCitpbnQKK2NrX2N1 cnBvcyhyb3csIGNvbCkgaW50IHJvdywgY29sOyB7CisgICAgbW92ZShyb3csIGNvbCk7CisgICAg cmV0dXJuKDApOworfQorCitpbnQKK2NrX2NscygpIHsKKyAgICByZXR1cm4oY2xlYXIoKSk7Cit9 CisKK2ludAorY2tfY2xlb2woKSB7CisgICAgcmV0dXJuKGNscnRvZW9sKCkpOworfQorCisjZW5k aWYgLyogT1MyICovCisjZW5kaWYgLyogTVlDVVJTRVMgKi8KKworI2lmbmRlZiBOT1RFUk1DQVAK KyNpZm5kZWYgQ0tfQ1VSUE9TCisjZGVmaW5lIENLX0NVUlBPUworCisvKiBUZXJtY2FwL1Rlcm1p bmZvIHNlY3Rpb24gKi8KKworc3RhdGljIGNoYXIgY3VyX2Nsc1szMl0gPSB7IE5VTCwgTlVMIH07 CitzdGF0aWMgY2hhciBjdXJfY2xlb2xbMzJdID0geyBOVUwsIE5VTCB9Oworc3RhdGljIGNoYXIg Y3VyX2NtWzY0XSA9IHsgTlVMLCBOVUwgfTsKK3N0YXRpYyBjaGFyIHRnc2J1ZlsxMjhdID0geyBO VUwsIE5VTCB9OworCitzdGF0aWMKKyNpZmRlZiBDS19BTlNJQwordm9pZAorI2VuZGlmIC8qIENL X0FOU0lDICovCitja190ZXJtc2V0KHgpIGludCB4OyB7CisgICAgY3VyX2Nsc1swXSA9IE5VTDsK KyAgICBjdXJfY2xlb2xbMF0gPSBOVUw7CisgICAgY3VyX2NtWzBdID0gTlVMOworI2lmZGVmIHRn ZXRlbnQKKyAgICBkZWJ1ZyhGMTAwLCJ0Z2V0ZW50IGlzIGEgbWFjcm8iLCIiLDApOworI2VuZGlm IC8qIHRnZXRlbnQgKi8KKyNpZmRlZiB0Z2V0c3RyCisgICAgZGVidWcoRjEwMCwidGdldHN0ciBp cyBhIG1hY3JvIiwiIiwwKTsKKyNlbmRpZiAvKiB0Z2V0c3RyICovCisjaWZkZWYgdHB1dHMKKyAg ICBkZWJ1ZyhGMTAwLCJ0cHV0cyBpcyBhIG1hY3JvIiwiIiwwKTsKKyNlbmRpZiAvKiB0cHV0cyAq LworI2lmZGVmIHRnb3RvCisgICAgZGVidWcoRjEwMCwidGdvdG8gaXMgYSBtYWNybyIsIiIsMCk7 CisjZW5kaWYgLyogdGdvdG8gKi8KKyNpZmRlZiBOT1RFUk1DQVAKKyAgICAvKiB0Z2V0c3RyKCkg Z2V0cyBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBPU0YvMSAqLworICAgIGRlYnVnKEYxMDAsImNr X3Rlcm1zZXQgTk9URVJNQ0FQIiwiIiwwKTsKKyNlbHNlCisgICAgaWYgKG5vdGVybWNhcCkgewor ICAgICAgICBkZWJ1ZyhGMTAwLCJja190ZXJtc2V0IG5vdGVybWNhcCIsIiIsMCk7CisgICAgICAg IHJldHVybjsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiY2tfdGVybXNldCB4IiwiIix4KTsKKyAg ICBpZiAoeCA+IDApIHsKKyAgICAgICAgY2hhciAqIGJwOworICAgICAgICBicCA9IHRnc2J1ZjsK KyAgICAgICAgKmJwID0gTlVMOworICAgICAgICBkZWJ1ZyhGMTEwLCJja190ZXJtc2V0IGNhbGxp bmcgdGdldHN0ciIsImNsIiwwKTsKKyAgICAgICAgaWYgKHRnZXRzdHIoImNsIiwgJmJwKSkgeyAg ICAgICAvKiBHZXQgY2xlYXItc2NyZWVuIGNvZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAs ImNrX3Rlcm1zZXQgdGdldHN0ciBjbCIsdGdzYnVmLCIiKTsKKyAgICAgICAgICAgIGlmICgoaW50 KXN0cmxlbih0Z3NidWYpIDwgMzIpCisgICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY2xzLHRn c2J1ZiwzMik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYnAg PSB0Z3NidWY7CisgICAgICAgIGlmICh0Z2V0c3RyKCJjZSIsICZicCkpIHsgICAgICAgLyogR2V0 IGNsZWFyLXRvLWVuZC1vZi1saW5lIGNvZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNr X3Rlcm1zZXQgdGdldHN0ciBjZSIsdGdzYnVmLCIiKTsKKyAgICAgICAgICAgIGlmICgoaW50KXN0 cmxlbih0Z3NidWYpIDwgMzIpCisgICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY2xlb2wsdGdz YnVmLDMyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuOworICAgICAgICBicCA9 IHRnc2J1ZjsKKyAgICAgICAgaWYgKHRnZXRzdHIoImNtIiwgJmJwKSkgeyAgICAgICAvKiBHZXQg Y3Vyc29yLW1vdmVtZW50IGNvZGUgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTAsImNrX3Rlcm1z ZXQgdGdldHN0ciBjbSIsdGdzYnVmLCIiKTsKKyAgICAgICAgICAgIGlmICgoaW50KXN0cmxlbih0 Z3NidWYpIDwgNjQpCisgICAgICAgICAgICAgIGNrc3RybmNweShjdXJfY20sdGdzYnVmLDY0KTsK KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZiAvKiBOT1RF Uk1DQVAgKi8KK30KKworI2lmbmRlZiBUUFVUU0ZOVFlQRQorI2lmZGVmIFRQVVRTSVNWT0lECisj ZGVmaW5lIFRQVVRTRk5UWVBFIHZvaWQKKyNlbHNlCisjZGVmaW5lIFRQVVRTRk5UWVBFIGludAor I2VuZGlmIC8qIFRQVVRTSVNWT0lEICovCisjZW5kaWYgLyogVFBVVFNGTlRZUEUgKi8KKworI2lm bmRlZiBUUFVUU0FSR1RZUEUKKyNpZmRlZiBIUFVYOQorI2RlZmluZSBUUFVUU0FSR1RZUEUgY2hh cgorI2Vsc2UKKyNpZmRlZiBIUFVYMTAKKyNkZWZpbmUgVFBVVFNBUkdUWVBFIGNoYXIKKyNlbHNl CisjZGVmaW5lIFRQVVRTQVJHVFlQRSBpbnQKKyNlbmRpZiAvKiBIUFVYMTAgKi8KKyNlbmRpZiAv KiBIUFVYOSAqLworI2VuZGlmIC8qIFRQVVRTQVJHVFlQRSAqLworCitzdGF0aWMgVFBVVFNGTlRZ UEUKKyNpZmRlZiBDS19BTlNJQworY2tfb3V0YyhUUFVUU0FSR1RZUEUgeCkKKyNlbHNlCitja19v dXRjKHgpIFRQVVRTQVJHVFlQRSB4OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVG8gc2F0aXNmeSB0cHV0cygpIGFyZzMg cHJvdG90eXBlICovCisgICAgaW50IHJjOworICAgIGNoYXIgYzsKKyAgICBjID0gKGNoYXIpIHg7 CisgICAgcmMgPSAoaW5zZXJ2ZXIpID8gdHRvYyhjKSA6IGNvbm9jKGMpOworI2lmbmRlZiBUUFVU U0lTVk9JRAorICAgIHJldHVybihyYyk7CisjZW5kaWYgLyogVFBVVFNJU1ZPSUQgKi8KK30KKwor aW50Citja19jdXJwb3Mocm93LCBjb2wpIGludCByb3csIGNvbDsgeworI2lmZGVmIENLX0FOU0lD CisgICAgVFBVVFNGTlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKKyNlbHNlCisgICAgVFBVVFNG TlRZUEUgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIGlmICghZnhkX2luaXRl ZCkKKyAgICAgIGZ4ZGluaXQoOTk5OSk7CisgICAgaWYgKCFjdXJfY21bMF0pIHsgICAgICAgICAg ICAgICAgICAgLyogV2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCisjaWZkZWYgQ09N TUVOVAorICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8qIERvIG5vdGhp bmcgKi8KKyNlbHNlCisgICAgICAgIC8qIEJvdGggQy1LZXJtaXQncyBTQ1JFRU4gY29tbWFuZCBh bmQgQU5TSS9WVDEwMCBhcmUgMS1iYXNlZCAqLworICAgICAgICBwcmludGYoIlwwMzNbJWQ7JWRI Iiwgcm93LCBjb2wpOyAvKiBPciBkZWZhdWx0IHRvIEFOU0kgKi8KKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgZm4gPSBja19vdXRjOworICAgICAgICAvKiB0ZXJt Y2FwL3Rlcm1pbmZvIGlzIDAtYmFzZWQgKi8KKyAgICAgICAgdHB1dHMoCisjaWZkZWYgVFBVVFNB UkcxQ09OU1QKKyAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikKKyNlbmRpZiAvKiBUUFVUU0FS RzFDT05TVCAqLworICAgICAgICAgICAgICB0Z290byhjdXJfY20sY29sLTEscm93LTEpLDEsZm4p OworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xzKCkgeworI2lmZGVmIENL X0FOU0lDCisgICAgVFBVVFNGTlRZUEUgKCpmbikoVFBVVFNBUkdUWVBFKTsKKyNlbHNlCisgICAg VFBVVFNGTlRZUEUgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworICAgIGlmICghZnhk X2luaXRlZCkKKyAgICAgIGZ4ZGluaXQoOTk5OSk7CisgICAgaWYgKCFjdXJfY2xzWzBdKSB7ICAg ICAgICAgICAgICAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBlc2NhcGUgc2VxdWVuY2VzICovCisj aWZkZWYgQ09NTUVOVAorICAgICAgICByZXR1cm4oLTEpOyAgICAgICAgICAgICAgICAgICAgIC8q IERvIG5vdGhpbmcgKi8KKyNlbHNlCisgICAgICAgIHByaW50ZigiXDAzM1s7SFwwMzNbMkoiKTsg ICAgICAgLyogT3IgZGVmYXVsdCB0byBBTlNJICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworICAg IH0gZWxzZSB7CisgICAgICAgIGZuID0gY2tfb3V0YzsKKyAgICAgICAgZGVidWcoRjExMSwiY2tf Y2xzIDIiLGN1cl9jbHMsZnhkX2luaXRlZCk7CisgICAgICAgIHRwdXRzKGN1cl9jbHMsY21kX3Jv d3MsZm4pOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7Cisj aWZkZWYgQ0tfQU5TSUMKKyAgICBUUFVUU0ZOVFlQRSAoKmZuKShUUFVUU0FSR1RZUEUpOworI2Vs c2UKKyAgICBUUFVUU0ZOVFlQRSAoKmZuKSgpOworI2VuZGlmIC8qIENLX0FOU0lDICovCisgICAg aWYgKCFmeGRfaW5pdGVkKQorICAgICAgZnhkaW5pdCg5OTk5KTsKKyAgICBpZiAoIWN1cl9jbGVv bFswXSkgeyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBkb24ndCBoYXZlIGVzY2FwZSBzZXF1ZW5j ZXMgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgIHJldHVybigtMSk7ICAgICAgICAgICAgICAg ICAgICAgLyogRG8gbm90aGluZyAqLworI2Vsc2UKKyAgICAgICAgcHJpbnRmKCJcMDMzW0siKTsg ICAgICAgICAgICAgICAvKiBPciB1c2UgQU5TSSAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICB9IGVsc2UgeworICAgICAgICBmbiA9IGNrX291dGM7CisgICAgICAgIHRwdXRzKGN1cl9jbGVv bCwxLGZuKTsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIENLX0NVUlBPUyAq LworI2Vsc2UKK3N0YXRpYyB2b2lkCitja190ZXJtc2V0KHgpIGludCB4OyB7CisgICAgaWYgKHgp IHJldHVybjsKK30KKyNlbmRpZiAvKiBOT1RFUk1DQVAgKi8KKworI2lmbmRlZiBDS19DVVJQT1MK KyNkZWZpbmUgQ0tfQ1VSUE9TCitpbnQKK2NrX2NscygpIHsKKyAgICBwcmludGYoIlwwMzNbO0hc MDMzWzJKIik7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2NsZW9sKCkgeworICAgIHBy aW50ZigiXDAzM1tLIik7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKK2NrX2N1cnBvcyhyb3cs IGNvbCkgaW50IHJvdywgY29sOyB7CisgICAgcHJpbnRmKCJcMDMzWyVkOyVkSCIsIHJvdywgY29s KTsKKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogQ0tfQ1VSUE9TICovCisKKworI2lmbmRl ZiBOT1hGRVIKK3N0YXRpYyBpbnQgY2luaXQgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBGbGFn IGZvciBjdXJzZXMgaW5pdCdkICovCitzdGF0aWMgaW50IGNlbmR3ID0gMDsgICAgICAgICAgICAg ICAgICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCAqLworCitzdGF0aWMKKyNpZmRlZiBDS19BTlNJ QyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCZWNhdXNlIFZPSUQgdXNlZCBieSBjdXJzZXMu aCAqLwordm9pZAorI2Vsc2UKKyNpZmRlZiBNWUNVUlNFUworVk9JRAorI2Vsc2UKK2ludAorI2Vu ZGlmIC8qIE1ZQ1VSU0VTICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNpZmRlZiBDS19BTlNJ QyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUgJSB0cmFuc2ZlcmVkIGFuZCAlIGJh ciAqLwordXBkcGN0KGxvbmcgb2xkLCBsb25nIG5ldykKKyNlbHNlIC8qIENLX0FOU0lDICovCit1 cGRwY3Qob2xkLCBuZXcpIGxvbmcgb2xkLCBuZXc7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8q IHVwZHBjdCAqLyB7CisjaWZkZWYgQ09NTUVOVAorICAgIGludCBtLCBuOworICAgIG1vdmUoQ1df UENELDIyKTsKKyAgICBwcmludHcoIiVsZCIsIG5ldyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX1BDRCwg KGxvbmcpIG5ldyk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVm IENLX1BDVF9CQVIKKyAgICBpZiAodGhlcm1vbWV0ZXIpIHsKKyAgICAgICAgaWYgKG9sZCA+IG5l dykgeworICAgICAgICAgICAgb2xkID0gMDsKKyAgICAgICAgICAgIG1vdmUoQ1dfUENELCAyNik7 CisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICB9CisgICAgICAgIG0gPSBvbGQvMjsK KyAgICAgICAgbW92ZShDV19QQ0QsIDI2ICsgbSk7CisgICAgICAgIG4gPSBuZXcgLyAyIC0gbTsK KyNpZm5kZWYgT1MyCisgICAgICAgIHdoaWxlIChuID4gMCkgeworICAgICAgICAgICAgaWYgKCht ICsgMSkgJSA1ID09IDApCisgICAgICAgICAgICAgIHByaW50dygiKiIpOworICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICBwcmludHcoIj0iKTsKKyAgICAgICAgICAgIG0rKzsKKyAgICAg ICAgICAgIG4tLTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3ICUgMiAhPSAwKSBwcmludHco Ii0iKTsKKyAgICAgICAgLyogbW92ZShDV19QQ0QsIDIyKzUzKTsgKi8KKyNlbHNlIC8qIE9TMiAq LworICAgICAgICB3aGlsZSAobiA+IDApIHsKKyAgICAgICAgICAgIHByaW50dygiJWMiLCAnXDMz MycpOworICAgICAgICAgICAgbSsrOyBuLS07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ldyAl IDIgIT0gMCkKKyAgICAgICAgICBwcmludHcoIiVjIiwgJ1wyNjEnKTsKKyNlbmRpZiAvKiBPUzIg Ki8KKyAgICB9CisjZW5kaWYgLyogQ0tfUENUX0JBUiAqLworICAgIC8qIGNscnRvZW9sKCk7ICov CisjZWxzZSAgLyogIUNPTU1FTlQgKi8KKyNpZmRlZiBPUzIKKyNkZWZpbmUgQ0hBUjEgICAnXDMz MycgICAgICAgICAgLyogT1MyIC0gQ1A0MzcgKi8KKyNkZWZpbmUgQ0hBUjIgICAnXDI2MScKKyNl bHNlCisjZGVmaW5lIENIQVIxICAgJy8nICAgICAgICAgICAgIC8qIERlZmF1bHQgKi8KKyNkZWZp bmUgQ0hBUjIgICAnLScKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICBkZWJ1ZyhGMTAxLCJ1cGRwY3Qg b2xkIiwiIixvbGQpOworICAgIGRlYnVnKEYxMDEsInVwZHBjdCBuZXciLCIiLG5ldyk7CisgICAg bW92ZShDV19QQ0QsMjIpOworICAgIHByaW50dygiJS0zbGQiLCBuZXcpOyAvKiAgKHdhcykgICBw cmludHcoIiVsZCIsIG5ldyk7ICAqLworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgS3Vp U2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUENELCAobG9uZykgbmV3 ICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVmIENLX1BDVF9C QVIKKyAgICBpZiAodGhlcm1vbWV0ZXIpIHsKKyAgICAgICAgaW50IG0sIG47CisKKyAgICAgICAg aWYgKG9sZCA+IG5ldykgeworICAgICAgICAgICAgb2xkID0gMCA7CisgICAgICAgICAgICBtb3Zl KENXX1BDRCwgMjYpOworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgfQorICAgICAg ICBpZiAobmV3IDw9IDEwMEwpIHsKKyAgICAgICAgICAgIG0gPSBvbGQgLyAyOworICAgICAgICAg ICAgbiA9IG5ldyAvIDIgLSBtOworICAgICAgICAgICAgbW92ZShDV19QQ0QsIDI2K20pOworICAg ICAgICAgICAgd2hpbGUgKG4tLSA+IDApCisgICAgICAgICAgICAgIHByaW50dygiJWMiLCBDSEFS MSk7CisgICAgICAgICAgICBpZiAobmV3ICUgMiAhPSAwKQorICAgICAgICAgICAgICBwcmludHco IiVjIiwgQ0hBUjIpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8K KyNlbmRpZiAvKiBDT01NRU5UICovCit9CisKK3N0YXRpYyBDS19PRkZfVCBvbGRfdHIgPSAoQ0tf T0ZGX1QpLTE7CS8qIFRpbWUgcmVtYWluaW5nIHByZXZpb3VzbHkgKi8KKworc3RhdGljIENLX09G Rl9UCisjaWZkZWYgQ0tfQU5TSUMKK3Nob2V0bChDS19PRkZfVCBvbGRfdHIsIGxvbmcgY3BzLCBD S19PRkZfVCBmc2l6LCBDS19PRkZfVCBob3dmYXIpCisjZWxzZQorICAgIHNob2V0bChvbGRfdHIs IGNwcywgZnNpeiwgaG93ZmFyKSBsb25nIGNwczsgQ0tfT0ZGX1Qgb2xkX3RyLCBmc2l6LCBob3dm YXI7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIHNob2V0bCAqLyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBFc3RpbWF0ZWQgdGltZSBsZWZ0IGluIHRyYW5zZmVyICovCisgICAgQ0tf T0ZGX1QgdHI7CQkJLyogVGltZSByZW1haW5pbmcsIHNlY29uZHMgKi8KKworI2lmZGVmIEdGVElN RVIKKyAgICBpZiAoZnNpeiA+IDBMICYmIGNwcyA+IDBMKQorICAgICAgdHIgPSAoQ0tfT0ZGX1Qp KChDS0ZMT0FUKShmc2l6IC0gaG93ZmFyKSAvIChDS0ZMT0FUKWNwcyk7CisgICAgZWxzZQorICAg ICAgdHIgPSAoQ0tfT0ZGX1QpLTE7CisjZWxzZQorICAgIHRyID0gKGZzaXogPiAwTCAmJiBjcHMg PiAwTCkgPworICAgICAgKChmc2l6IC0gaG93ZmFyKSAvIGNwcykgOgorICAgICAgICAoQ0tfT0ZG X1QpLTE7CisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgIG1vdmUoQ1dfVFIsMjIpOworICAgIGlm ICh0ciA+IChDS19PRkZfVCktMSkgeworICAgICAgICBpZiAodHIgIT0gb2xkX3RyKSB7CisgICAg ICAgICAgICBwcmludHcoIiVzIixoaG1tc3ModHIpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1 RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKUNX X1RSLCAobG9uZyloaG1tc3ModHIpKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJ ICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg ICAgICAgcHJpbnR3KCIodW5rbm93bikiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19UUiwgKGxv bmcpICIodW5rbm93bikiICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLwor ICAgICAgICBjbHJ0b2VvbCgpOworICAgIH0KKyAgICByZXR1cm4odHIpOworfQorCitzdGF0aWMg bG9uZworI2lmZGVmIENLX0FOU0lDCitzaG9jcHMoaW50IHBjdCwgQ0tfT0ZGX1QgZnNpeiwgQ0tf T0ZGX1QgaG93ZmFyKQorI2Vsc2UKK3Nob2NwcyhwY3QsIGZzaXosIGhvd2ZhcikgaW50IHBjdDsg Q0tfT0ZGX1QgZnNpeiwgaG93ZmFyOworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzaG9jcHMg Ki8geworI2lmZGVmIENQU19XRUlHSFRFRAorICAgIHN0YXRpYyBDS19PRkZfVCBvbGRmZmMgPSAw TDsKKyNlbmRpZiAvKiBDUFNfV0VJR0hURUQgKi8KKyNpZmRlZiBHRlRJTUVSCisgICAgQ0tGTE9B VCBzZWNzLCB4eDsKKyNlbHNlCisgICAgQ0tfT0ZGX1Qgc2VjcywgeHg7CisjZW5kaWYgLyogR0ZU SU1FUiAqLworCisjaWZkZWYgR0ZUSU1FUgorICAgIHh4ID0gKGd0diA+PSAwLjApID8gZ3R2IDog MC4wOyAgICAgIC8qIEZsb2F0aW5nLXBvaW50IHZlcnNpb24gKi8KKyAgICBndHYgPSBnZnRpbWVy KCk7CisgICAgaWYgKChndHYgLSBvbGRndHYpIDwgKENLRkxPQVQpIDEuMCkgLyogT25seSBkbyB0 aGlzIG9uY2UgcGVyIHNlY29uZCAqLworICAgICAgcmV0dXJuKG9sZGNwcyk7CisgICAgb2xkZ3R2 ID0geHg7CisjZWxzZQorICAgIHh4ID0gKGd0diA+PSAwKSA/IGd0diA6IDA7ICAgICAgICAgIC8q IFdob2xlLW51bWJlciB2ZXJzaW9uICovCisgICAgZ3R2ID0gZ3RpbWVyKCk7CisgICAgaWYgKChn dHYgLSBvbGRndHYpIDwgMSkKKyAgICAgIHJldHVybihvbGRjcHMpOworICAgIG9sZGd0diA9IHh4 OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKworI2lmZGVmIENQU19XRUlHSFRFRAorICAgIC8qIGRl YnVnKEYxMDAsIlNIT0NQUzogV0VJR0hURUQiLCIiLDApOyAqLworICAgIGlmIChndHYgIT0gb2xk Z3R2KSB7ICAgICAgICAgICAgICAgIC8qIFRoZSBmaXJzdCBwYWNrZXQgaXMgaWdub3JlZCAqLwor ICAgICAgICBpZiAoZmZjIDwgb2xkZmZjKQorICAgICAgICAgIG9sZGZmYyA9IGZmYzsKKyAgICAg ICAgb2xkY3BzID0gY3BzOworICAgICAgICBpZiAob2xkY3BzICYmIG9sZGd0diA+CisjaWZkZWYg R0ZUSU1FUgorICAgICAgICAgICAgMS4wCisjZWxzZQorICAgICAgICAgICAgMQorI2VuZGlmIC8q IEdGVElNRVIgKi8KKyAgICAgICAgICAgICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBU aGUgZmlyc3Qgc2Vjb25kIGlzIGlnbm9yZWQgKi8KKy8qCisgIFRoaXMgdmVyc2lvbiBvZiBzaG9j cHMoKSBwcm9kdWNlcyBhIHdlaWdodGVkIGF2ZXJhZ2UgdGhhdCBzb21lCisgIHBlb3BsZSBsaWtl LCBidXQgbW9zdCBwZW9wbGUgZmluZCBpdCBkaXNjb25jZXJ0aW5nIGFuZCBib21iYXJkIHVzCisg IHdpdGggcXVlc3Rpb25zIGFuZCBjb21wbGFpbnRzIGFib3V0IHdoeSB0aGUgQ1BTIGZpZ3VyZSBm bHVjdHVhdGVzIHNvCisgIHdpbGRseS4gIFNvIG5vdyB5b3Ugb25seSBnZXQgdGhlIHdlaWdodGVk IGF2ZXJhZ2UgaWYgeW91IGJ1aWxkIHRoZQorICBwcm9ncmFtIHlvdXJzZWxmIHdpdGggQ1BTX1dF SUdIVEVEIGRlZmluZWQuCisqLworI2lmbmRlZiBDUFNfVklOQ0UKKyNpZmRlZiBHRlRJTUVSCisg ICAgICAgICAgICBjcHMgPSAobG9uZykoKCgoQ0tGTE9BVClvbGRjcHMgKiAzLjApICsKKyAgICAg ICAgICAgICAgICAgICAoQ0tGTE9BVCkoZmZjIC0gb2xkZmZjKSAvIChndHYtb2xkZ3R2KSApIC8g NC4wKTsKKyNlbHNlCisgICAgICAgICAgICBjcHMgPSAoIChvbGRjcHMgKiAzKSArIChmZmMgLSBv bGRmZmMpIC8gKGd0di1vbGRndHYpICkgLyA0OworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyNlbHNl CisvKiBBbmQgYW4gYWx0ZXJuYXRlIHdlaWdodGluZyBzY2hlbWUgZnJvbSBWaW5jZW50IEZhdGlj YS4uLiAqLworICAgICAgICAgICAgY3BzID0gKDMgKgorICAgICAgICAgICAgICgoMStwY3QvMzAw KSpvbGRmZmMvb2xkZ3R2KygxLXBjdC8xMDApKihmZmMtb2xkZmZjKS8oZ3R2LW9sZGd0dikpKQor ICAgICAgICAgICAgICAvIDQ7CisjZW5kaWYgLyogQ1BTX1ZJTkNFICovCisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAvKiBObyB3ZWlnaHRlZCBhdmVyYWdlIHNpbmNlIHRoZXJlIGlzIG5v dGhpbmcgdG8gd2VpZ2ggKi8KKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAgICBjcHMgPSAobG9u ZykoZ3R2ICE9IDAuMCA/CisgICAgICAgICAgICAgIChDS0ZMT0FUKShmZmMgLSBvbGRmZmMpIC8g KGd0diAtIG9sZGd0dikgOgorICAgICAgICAgICAgICAgIChmZmMgLSBvbGRmZmMpKSA7CisjZWxz ZQorICAgICAgICAgICAgY3BzID0gZ3R2ID8gKGZmYyAtIG9sZGZmYykgLyAoZ3R2IC0gb2xkZ3R2 KSA6IChmZmMgLSBvbGRmZmMpIDsKKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgIH0KKyNp ZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAg ICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBwY3QgICAiLCIiLHBjdCk7CisgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJTSE9DUFM6IGd0diAgICIsIiIsZ3R2KTsKKyAgICAgICAgICAgIGRlYnVnKEYx MDEsIlNIT0NQUzogb2xkZ3R2IiwiIixvbGRndHYpOworICAgICAgICAgICAgZGVidWcoRjEwMSwi U0hPQ1BTOiBkZ3R2ICAiLCIiLChsb25nKShndHYtb2xkZ3R2KSk7CisgICAgICAgICAgICBkZWJ1 ZyhGMTAxLCJTSE9DUFM6IGZmYyAgICIsIiIsZmZjKTsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEs IlNIT0NQUzogb2xkZmZjIiwiIixvbGRmZmMpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hP Q1BTOiBkZmZjICAiLCIiLGZmYy1vbGRmZmMpOworICAgICAgICAgICAgZGVidWcoRjEwMSwiU0hP Q1BTOiBjcHMgICAiLCIiLGNwcyk7CisgICAgICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLworI2Vu ZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgbW92ZShDV19DUCwyMik7CisgICAgICAgIHByaW50 dygiJWxkIiwgY3BzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQ cm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19DUCwgKGxvbmcpIGNwcyApOwor I2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgY2xydG9lb2woKTsK KyAgICAgICAgb2xkZmZjID0gZmZjOworICAgIH0KKyNlbHNlIC8qICFDUFNfV0VJR0hURUQgKi8K KyNpZmRlZiBDT01NRU5UCisjaWZkZWYgREVCVUcKKyAgICBpZiAoZGVibG9nKSB7CisJZGVidWco RjEwMCwiU0hPQ1BTOiBOT1QgV0VJR0hURUQiLCIiLDApOworICAgICAgICBkZWJ1ZyhGMTAxLCJT SE9DUFM6IHBjdCAgICAiLCIiLHBjdCk7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZ3R2 ICAgICIsIiIsZ3R2KTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRndHYgIiwiIixv bGRndHYpOworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRndHYgICAiLCIiLChsb25nKWd0 diAtIChsb25nKW9sZGd0dik7CisgICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZmZjICAgICIs IiIsZmZjKTsKKyAgICAgICAgZGVidWcoRjEwMSwiU0hPQ1BTOiBvbGRmZmMgIiwiIixvbGRmZmMp OworICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGRmZmMgICAiLCIiLGZmYy1vbGRmZmMpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJTSE9DUFM6IGNwcyAgICAiLCIiLGNwcyk7CisgICAgICAgIGRl YnVnKEYxMDEsIlNIT0NQUzogZmlsY250ICIsIiIsZmlsY250KTsKKyNpZmRlZiBHRlRJTUVSCisg ICAgICAgIGRlYnVnKEYxMDEsIlNIT0NQUzogZnBmc2VjcyIsIiIsZnBmc2Vjcyk7CisjZW5kaWYg LyogR0ZUSU1FUiAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJzaG9jcHMgZ3R2IiwiIixndHYp OworI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgR0ZUSU1FUgorI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICAvKiBkZWJ1ZyhGMTAxLCJzaG9jcHMgZnBmc2VjcyIsIiIsZnBmc2Vjcyk7ICovCisg ICAgc2VjcyA9IGd0diAtIGZwZnNlY3M7CisgICAgLyogZGVidWcoRjEwMSwic2hvY3BzIHNlY3Mi LCIiLChsb25nKXNlY3MpOyAqLworICAgIGlmIChzZWNzID4gMC4wKSB7CisgICAgICAgIGNwcyA9 IChsb25nKSgoQ0tGTE9BVCkgZmZjIC8gc2Vjcyk7CisgICAgICAgIC8qIGRlYnVnKEYxMDEsInNo b2NwcyBjcHMiLCIiLGNwcyk7ICovCisgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOworI2lmZGVmIEtV SQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX0NQLCAobG9uZykgY3BzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlm IC8qIEtVSSAqLworICAgICAgICBwcmludHcoIiVsZCIsIGNwcyk7CisgICAgICAgIGNscnRvZW9s KCk7CisgICAgfQorI2Vsc2UgIC8qIE5vdCBHRlRJTUVSICovCisgICAgaWYgKChzZWNzID0gZ3R2 IC0gZnNlY3MpID4gMCkgeworICAgICAgICBjcHMgPSAoc2VjcyA8IDFMKSA/IGZmYyA6IGZmYyAv IHNlY3M7CisgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVH CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0NQ LCAobG9uZykgY3BzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAg ICAgICBwcmludHcoIiVsZCIsIGNwcyk7CisgICAgICAgIGNscnRvZW9sKCk7CisgICAgfQorI2Vu ZGlmIC8qIEdGVElNRVIgKi8KKyNlbmRpZiAvKiBDUFNfV0VJR0hURUQgKi8KKworICAgIGlmIChj cHMgPiBwZWFrY3BzICYmICAgICAgICAgICAgICAgIC8qIFBlYWsgdHJhbnNmZXIgcmF0ZSAqLwor ICAgICAgICAoKHdoYXQgJiBXX1NFTkQgJiYgc3BhY2tldHMgPiB3c2xvdHMgKyA0KSB8fAorCSAo ISh3aGF0ICYgV19TRU5EKSAmJiBzcGFja2V0cyA+IDEwKSkpIHsKKyAgICAgICAgcGVha2NwcyA9 IGNwczsKKyAgICB9CisgICAgb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dm YXIpOworICAgIHJldHVybihjcHMpOworfQorCitzdGF0aWMKKyNpZmRlZiBDS19BTlNJQyAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBCZWNhdXNlIFZPSUQgdXNlZCBieSBjdXJzZXMuaCAqLwor dm9pZAorI2Vsc2UKKyNpZmRlZiBNWUNVUlNFUworVk9JRAorI2Vsc2UKK2ludAorI2VuZGlmIC8q IE1ZQ1VSU0VTICovCisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3NjcmZ0KCkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvKiBEaXNwbGF5IGZpbGUgdHlwZSAqLworICAgIGNoYXIgeGZl cnN0clsyNTZdOworICAgIHhmZXJzdHJbMF0gPSBOVUw7CisgICAgZGVidWcoRjEwMSwic2NyZnQg YmluYXJ5IiwiIixiaW5hcnkpOworICAgIGlmIChiaW5hcnkpIHsKKyAgICAgICAgc3dpdGNoKGJp bmFyeSkgeworICAgICAgICAgIGNhc2UgWFlGVF9MOgorICAgICAgICAgICAgY2tzdHJuY3B5KHhm ZXJzdHIsIkxBQkVMRUQiLDI1Nik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl IFhZRlRfSToKKyAgICAgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJJTUFHRSIsMjU2KTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWFlGVF9VOgorICAgICAgICAgICAgY2tz dHJuY3B5KHhmZXJzdHIsIkJJTkFSWSBVTkRFRklORUQiLDI1Nik7CisgICAgICAgICAgICBicmVh azsKKwkgIGNhc2UgWFlGVF9NOgorICAgICAgICAgICAgY2tzdHJuY3B5KHhmZXJzdHIsIk1BQ0JJ TkFSWSIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworCSAgY2FzZSBYWUZUX1g6CisgICAgICAg ICAgICBja3N0cm5jcHkoeGZlcnN0ciwiVEVORVgiLDI1Nik7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGNhc2UgWFlGVF9COgorICAgICAgICAgICAg Y2tzdHJuY3B5KHhmZXJzdHIsIkJJTkFSWSIsMjU2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisjaWZkZWYgQ0tfUkVTRU5ECisgICAgICAgIGlmICh3aGF0ICYgV19TRU5EICYmIHNl bmRzdGFydCA+IDBMKSB7CisgICAgICAgICAgICBpZiAoc2VuZG1vZGUgPT0gU01fUFNFTkQpIHsK KyAgICAgICAgICAgICAgICBja3N0cm5jYXQoeGZlcnN0ciwgIiAvIHBhcnRpYWwiLCAyNTYpOwor ICAgICAgICAgICAgfSBlbHNlIGlmIChzZW5kbW9kZSA9PSBTTV9SRVNFTkQpIHsKKyAgICAgICAg ICAgICAgICBja3N0cm5jYXQoeGZlcnN0ciwgIiAvIHJlc2VuZCIsIDI1Nik7CisgICAgICAgICAg ICB9CisgICAgICAgIH0gZWxzZSBpZiAod2hhdCAmIFdfUkVDViAmJiByc19sZW4gPiAwTCkgewor ICAgICAgICAgICAgY2tzdHJuY2F0KHhmZXJzdHIsICIgLyByZXNlbmQiLCAyNTYpOworICAgICAg ICB9CisjZW5kaWYgLyogQ0tfUkVTRU5EICovCisgICAgfSBlbHNlIHsKKworI2lmbmRlZiBOT0NT RVRTCisgICAgICAgIGNrc3RybmNweSh4ZmVyc3RyLCJURVhUIiwyNTYpOworI2lmZGVmIE5FV0ZU UAorI2lmbmRlZiBOT1VOSUNPREUKKwlpZiAod2hhdCAmIFdfRlRQKSB7CisJICAgIGlmIChmdHBf Y3N4IDwgMCkKKwkgICAgICBja3N0cm5jYXQoeGZlcnN0ciwiIChubyB0cmFuc2xhdGlvbikiLCAy NTYpOworCSAgICBlbHNlCisJICAgICAgY2ttYWt4bXNnKCZ4ZmVyc3RyWzRdLDI1MiwKKwkJICAg ICAgICIgKCIsCisJCSAgICAgICBmY3NpbmZvWyh3aGF0ICYgV19TRU5EKSA/IGZ0cF9jc2wgOiBm dHBfY3N4XS5rZXl3b3JkLAorCQkgICAgICAgIiA9PiAiLAorCQkgICAgICAgZmNzaW5mb1sod2hh dCAmIFdfU0VORCkgPyBmdHBfY3N4IDogZnRwX2NzbF0ua2V5d29yZCwKKwkJICAgICAgICIpIiwK KwkJICAgICAgIE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMLE5VTEwKKwkJICAgICAgICk7 CisJfSBlbHNlCisjZW5kaWYgLyogTk9VTklDT0RFICovCisjZW5kaWYgLyogTkVXRlRQICovCisJ ICBpZiAodGNoYXJzZXQgPT0gVENfVFJBTlNQKSB7CisgICAgICAgICAgICBja3N0cm5jYXQoeGZl cnN0ciwgIiAobm8gdHJhbnNsYXRpb24pIiwgMjU2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGlmICh3aGF0ICYgV19TRU5EKSB7CisgICAgICAgICAgICAgICAgc3ByaW50ZiggJnhm ZXJzdHJbc3RybGVuKHhmZXJzdHIpXSwgLyogc2FmZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgIiAoJXMgPT4gJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZjc2luZm9bZmNoYXJz ZXRdLmtleXdvcmQsIC8qIGJ1aWx0LWluIGtleXdvcmRzICovCisgICAgICAgICAgICAgICAgICAg ICAgICB0Y3NpbmZvW3RjaGFyc2V0XS5rZXl3b3JkICAvKiBsZW5ndGhzIGFyZSBjb250cm9sbGVk ICovCisJCQkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRm KCAmeGZlcnN0cltzdHJsZW4oeGZlcnN0cildLCAvKiBzYWZlICovCisgICAgICAgICAgICAgICAg ICAgICAgICAiICglcyA9PiAlcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGNzaW5mb1t0 Y2hhcnNldF0ua2V5d29yZCwgLyogYnVpbHQtaW4ga2V5d29yZHMgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIGZjc2luZm9bZmNoYXJzZXRdLmtleXdvcmQpOyAvKiBsZW5ndGhzIGNvbnRyb2xs ZWQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8qIE5PQ1NFVFMgKi8KKyAg ICB9CisgICAgbW92ZShDV19UWVAsMjIpOworICAgIHByaW50dygiJXMiLCB4ZmVyc3RyKTsKKyAg ICBjbHJ0b2VvbCgpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfVFlQLCAobG9uZykgeGZlcnN0ciApOwor I2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICByZXR1cm47Cit9CisKKyNp ZmRlZiBDS19ORVdURVJNCitzdGF0aWMgRklMRSAqY2tfc3Rkb3V0ID0gTlVMTDsKK3N0YXRpYyBp bnQgY2tfZmQgPSAtMTsKKyNlbmRpZiAvKiBDS19ORVdURVJNICovCisKK3N0YXRpYyBsb25nIHBj dCA9IDBMLCBvbGRwY3QgPSAwTCwgb2xkcnR0ID0gLTFMOworc3RhdGljIGludCBvbGR0eXAgPSAw LCBvbGR3aW4gPSAtMSwgb2xkdHJ5ID0gLTEsIG9sZGxlbiA9IC0xLCBvbGR0aW0gPSAtMTsKKwor I2lmZGVmIE5FVENPTk4KK3N0YXRpYyBjaGFyICpuZXRuYW1lW10gPSB7CisgICAgIm5vbmUiLAkJ CQkvKiAwMCAqLworICAgICJUQ1AvSVAiLAkJCQkvKiAwMSBUQ1AgKFNvY2tldHMpICovCisgICAg IlRDUC9JUCIsCQkJCS8qIDAyIFRDUCAoU3RyZWFtcykgKi8KKyAgICAiWC4yNSIsCQkJCS8qIDAz IFN1bkxpbmsgWC4yNCAgKi8KKyAgICAiREVDbmV0IiwJCQkJLyogMDQgREVDbmV0ICAqLworICAg ICJWQVggUFNJIiwJCQkJLyogMDUgVkFYIFBTSSAqLworICAgICJOYW1lZCBQaXBlcyIsCQkJLyog MDYgTEFOIE1hbmFnZXIgTmFtZWQgUGlwZSAqLworICAgICJYLjI1IiwJCQkJLyogMDcgU3RyYXR1 cyBWT1MgWC4yNSAqLworICAgICJOZXRCSU9TIiwJCQkJLyogMDggSUJNIE5FVEJJT1MgKi8KKyAg ICAiU3VwZXJMQVQiLAkJCQkvKiAwNyBNZXJpZGlhbiBTdXBlckxBVCAqLworICAgICJGaWxlIiwJ CQkJLyogMTAgRmlsZSAqLworICAgICJDb21tYW5kIiwJCQkJLyogMTEgU3VicHJvY2VzcyAocGlw ZSkgKi8KKyAgICAiRExMIiwJCQkJLyogMTIgRExMIGRvZXMgaS9vICovCisgICAgIlguMjUiLAkJ CQkvKiAxMyBJQk0gQUlYTGluayBYLjI1ICovCisgICAgIlguMjUiLAkJCQkvKiAxNCBIUC1VWCBY LjI1ICovCisgICAgIlBUWSIsCQkJCS8qIDE1IFBzZXVkb3Rlcm1pbmFsICovCisgICAgIlNTSCIs CQkJCS8qIDE2IFNTSCAqLworICAgICI8RVJST1I+IiwJCQkJLyogMTcgSW4gY2FzZSBuZXcgdHlw ZXMgYXJlIGFkZGVkICovCisgICAgIjxFUlJPUj4iLAkJCQkvKiAxOCBidXQgbm9ib2R5IHJlbWVt YmVycyB0byB1cGRhdGUgKi8KKyAgICAiPEVSUk9SPiIsCQkJCS8qIDE5IHRoaXMgdGFibGUgLi4u ICovCisgICAgTlVMTAkJCQkvKiAyMCAqLworfTsKK3N0YXRpYyBpbnQgbm5ldG5hbWUgPSAoc2l6 ZW9mKG5ldG5hbWUpIC8gc2l6ZW9mKGNoYXIgKikpOworCisjZW5kaWYgLyogTkVUQ09OTiAqLwor CisjaWZkZWYgQ0tfQU5TSUMKK3ZvaWQKK3NjcmVlbmMoaW50IGYsIGNoYXIgYyxDS19PRkZfVCBu LGNoYXIgKnMpCisjZWxzZQorQ0tWT0lECitzY3JlZW5jKGYsYyxuLHMpCitpbnQgZjsgICAgICAg ICAgLyogYXJndW1lbnQgZGVzY3JpcHRvciAqLworY2hhciBjOyAgICAgICAgIC8qIGEgY2hhcmFj dGVyIG9yIHNtYWxsIGludGVnZXIgKi8KK0NLX09GRl9UIG47ICAgICAvKiBhIGxvbmcgaW50ZWdl ciAqLworY2hhciAqczsgICAgICAgIC8qIGEgc3RyaW5nICovCisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KKy8qIHNjcmVlbmMoKSAqLyB7CisjaWZkZWYgQ0tfU1NMCisgICAgZXh0ZXJuIGludCB0bHNf YWN0aXZlX2ZsYWcsIHNzbF9hY3RpdmVfZmxhZzsKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRl ZiBSTE9HQ09ERQorICAgIGV4dGVybiBpbnQgdHRucHJvdG87CisjZW5kaWYgLyogUkxPR0NPREUg Ki8KKyAgICBzdGF0aWMgaW50IHEgPSAwOworICAgIHN0YXRpYyBsb25nIGZjbnQgPSAwTDsJCS8q IE51bWJlciBvZiBmaWxlcyB0cmFuc2ZlcnJlZCAqLworICAgIHN0YXRpYyBDS19PRkZfVCBmc2l6 ID0gKENLX09GRl9UKS0xOyAvKiBDb3B5IG9mIGZpbGUgc2l6ZSAqLworICAgIHN0YXRpYyBDS19P RkZfVCBmYnl0ID0gMEw7IC8qIFRvdGFsIGZpbGUgYnl0ZXMgb2YgYWxsIGZpbGVzIHRyYW5zZmVy cmVkICovCisgICAgc3RhdGljIENLX09GRl9UIGhvd2ZhciA9IDBMOyAvKiBIb3cgbXVjaCBvZiBj dXJyZW50IGZpbGUgaGFzIGJlZW4geGZlcidkICovCisgICAgc3RhdGljIGludCAgcGN0bGJsID0g MEw7ICAvKiBQZXJjZW50IGRvbmUgdnMgQnl0ZXMgc28gZmFyICovCisgICAgbG9uZyBjcHMgPSAw TDsKKworICAgIGludCBuZXQgPSAwOworICAgIGludCB4bmV0ID0gMDsKKyAgICBpbnQgZnRwID0g MDsKKyAgICBpbnQgbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Yg c3RyaW5nICovCisgICAgaW50IGVycm9ycyA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogRXJy b3IgY291bnRlciAqLworICAgIGludCB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IFdvcmtlciAqLworCisgICAgZGVidWcoRjEwMSwic2NyZWVuYyBjaW5pdCIsIiIsY2luaXQpOwor ICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgY2VuZHciLCIiLGNlbmR3KTsKKworICAgIGlmICghcykg cyA9ICIiOyAgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5cyBkbyB0aGlzLiAqLworCisgICAg ZnRwID0gKHdoYXQgJiBXX0ZUUCkgPyAxIDogMDsJLyogRlRQIG9yIEtlcm1pdCAqLworICAgIG5l dCA9IG5ldHdvcmsgfHwgZnRwOworICAgIHhuZXQgPSBmdHAgPyAxIDogbmV0dHlwZTsJCS8qIE5F VF9UQ1BCID09IDEgKi8KKworICAgIGlmIChjaW5pdCA9PSAwIHx8IGNlbmR3ID4gMCkgeyAgICAg IC8qIEhhbmRsZSBib3JkZXJsaW5lIGNhc2VzLi4uICovCisgICAgICAgIGlmIChmID09IFNDUl9D VykgeyAgICAgICAgICAgICAgLyogQ2xvc2Ugd2luZG93LCBidXQgaXQncyBub3Qgb3BlbiAqLwor ICAgICAgICAgICAgZnRfd2luID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor ICAgICAgICBkZWJ1ZyhGMTExLCJzY3JlZW5jIEEiLHMsZik7CisgICAgICAgIGlmIChmID09IFND Ul9FTSB8fAorICAgICAgICAgICAoZiA9PSBTQ1JfUFQgJiYgYyA9PSAnRScpKSB7IC8qIEZhdGFs IGVycm9yIGJlZm9yZSB3aW5kb3cgb3BlbiAqLworICAgICAgICAgICAgY29ub2xsKCIiKTsgY29u b2MoJz8nKTsgY29ub2xsKHMpOyByZXR1cm47IC8qIFJlZ3VsYXIgZGlzcGxheSAqLworICAgICAg ICB9CisgICAgfQorICAgIGlmIChjaW5pdCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgIC8qIE9u bHkgY2FsbCBpbml0c2NyKCkgb25jZSAqLworCWNoYXIgKiBzOworCS8qIENoZWNrIHRoZXNlIG5v dyAtLSBpZiB0aGV5IGFyZSBkZWZpbmVkIGJ1dCBub3QgbnVtZXJpYyAqLworCS8qIHRoZXkgY2Fu IGNyYXNoIGN1cnNlcyAqLworCXMgPSBnZXRlbnYoIkxJTkVTIik7CisJaWYgKHMpIGlmICghcmRp Z2l0cyhzKSkgeworCSAgICBwcmludGYoIj9MSU5FUyB2YXJpYWJsZSBub3QgbnVtZXJpYzogXCIl c1wiLlxuIixzKTsKKwkgICAgcHJpbnRmKCIoRnVsbHNjcmVlbiBkaXNwbGF5IGRpc2FibGVkKVxu Iik7CisJICAgIGZkaXNwbGEgPSBYWUZEX1M7CisJICAgIHJldHVybjsKKwl9CisJcyA9IGdldGVu digiQ09MVU1OUyIpOworCWlmIChzKSBpZiAoIXJkaWdpdHMocykpIHsKKwkgICAgcHJpbnRmKCI/ Q09MVU1OUyB2YXJpYWJsZSBub3QgbnVtZXJpYzogXCIlc1wiLlxuIixzKTsKKwkgICAgcHJpbnRm KCIoRnVsbHNjcmVlbiBkaXNwbGF5IGRpc2FibGVkKVxuIik7CisJICAgIGZkaXNwbGEgPSBYWUZE X1M7CisJICAgIHJldHVybjsKKwl9CisgICAgICAgIGNlbmR3ID0gMTsgICAgICAgICAgICAgICAg ICAgICAgLyogTmV3IHdpbmRvdyBuZWVkcyByZXBhaW50aW5nICovCisjaWZkZWYgQ09NTUVOVAor ICAgICAgICBpZiAoIWluaXRzY3IoKSkgeyAgICAgICAgICAgICAgIC8qIE9vcHMsIGNhbid0IGlu aXRpYWxpemUgd2luZG93PyAqLworLyoKKyAgSW4gZmFjdCwgdGhpcyBkb2Vzbid0IGhhcHBlbi4g ICJtYW4gY3Vyc2VzIiBzYXlzIGluaXRzY3IoKSBoYWx0cyB0aGUKKyAgZW50aXJlIHByb2dyYW0g aWYgaXQgZmFpbHMsIHdoaWNoIGlzIHRydWUgb24gdGhlIHN5c3RlbXMgd2hlcmUgSSd2ZQorICB0 ZXN0ZWQgaXQuICBJdCB3aWxsIGZhaWwgaWYgeW91ciB0ZXJtaW5hbCB0eXBlIGlzIG5vdCBrbm93 biB0byBpdC4KKyAgVGhhdCdzIHdoeSBTRVQgRklMRSBESVNQTEFZIEZVTExTQ1JFRU4gY2FsbHMg dGdldGVudCgpIHRvIG1ha2Ugc3VyZSB0aGUKKyAgdGVybWluYWwgdHlwZSBpcyBrbm93biBiZWZv cmUgYWxsb3dpbmcgYSBjdXJzZXMgZGlzcGxheS4KKyovCisgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwiQ1VSU0VTIElOSVRTQ1IgRVJST1JcclxuIik7CisgICAgICAgICAgICBmZGlzcGxhID0g WFlGRF9TOyAgICAgICAgICAgLyogRmFsbCBiYWNrIHRvIENSVCBkaXNwbGF5ICovCisgICAgICAg ICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaW5pdCsrOyAgICAg ICAgICAgICAgICAgICAgLyogV2luZG93IGluaXRpYWxpemVkIG9rICovCisgICAgICAgICAgICBk ZWJ1ZyhGMTAwLCJDVVJTRVMgSU5JVFNDUiBPSyIsIiIsMCk7CisgICAgICAgIH0KKyNlbHNlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHNvbWUgbWVtb3J5LiAqLwor I2lmZGVmIENLX05FV1RFUk0KKyAgICAgICAgLyogKEZyb20gQW5keSBGeWZlIDxhbmR5QHZsc2ku Y3MuY2FsdGVjaC5lZHU+KQorICAgICAgICAgICBTeXN0ZW0gViBjdXJzZXMgc2VlbXMgdG8gcmVz ZXJ2ZSB0aGUgcmlnaHQgdG8gYWx0ZXIgdGhlIGJ1ZmZlcmluZworICAgICAgICAgICBvbiB0aGUg b3V0cHV0IEZJTEUqIHdpdGhvdXQgcmVzdG9yaW5nIGl0LiAgRm9ydHVuYXRlbHkgU3lzdGVtIFYK KyAgICAgICAgICAgY3Vyc2VzIHByb3ZpZGVzIG5ld3Rlcm0oKSwgYW4gYWx0ZXJuYXRpdmUgdG8g aW5pdHNjcigpLCB0aGF0CisgICAgICAgICAgIGFsbG93cyB1cyB0byBzcGVjaWZ5IGV4cGxpY2l0 bHkgdGhlIHRlcm1pbmFsIHR5cGUgYW5kIGlucHV0IGFuZAorICAgICAgICAgICBvdXRwdXQgRklM RSBwb2ludGVycy4gIFRodXMgd2UgZHVwbGljYXRlIHN0ZG91dCwgYW5kIGxldCBjdXJzZXMKKyAg ICAgICAgICAgaGF2ZSB0aGUgY29weS4gIFRoZSBvcmlnaW5hbCByZW1haW5zIHVuYWx0ZXJlZC4g IFVuZm9ydHVuYXRlbHksCisgICAgICAgICAgIG5ld3Rlcm0oKSBzZWVtcyB0byBiZSBwYXJ0aWN1 bGFyIHRvIFN5c3RlbSBWLgorICAgICAgICAqLworICAgICAgICBzID0gZ2V0ZW52KCJURVJNIik7 CisgICAgICAgIGlmIChja19mZCA8IDApIHsKKyAgICAgICAgICAgIGNrX2ZkID0gZHVwKGZpbGVu byhzdGRvdXQpKTsKKyAgICAgICAgICAgIGNrX3N0ZG91dCA9IChja19mZCA+PSAwKSA/IChGSUxF ICopZmRvcGVuKGNrX2ZkLCAidyIpIDogTlVMTDsKKyAgICAgICAgfQorICAgICAgICBkZWJ1ZyhG MTAwLCJzY3JlZW5jIG5ld3Rlcm0uLi4iLCIiLDApOworCisvKiBOT1RFOiBJdCBtaWdodCBiZSBu ZWNlc3NhcnkgdG8gZG8gdGhpcyB3aXRoIHN0ZGluIHRvbyEgKi8KKy8qIFRoaXMgd291bGQgaGF2 ZSBiZWVuIHRoZSBjYXNlIGluIEZyZWVCU0QgNC4xIGJ1dCB0aGV5IGZpeGVkIHRoZSAqLworLyog cHJvYmxlbSBieSByZXN0b3JpbmcgdGhlIGJ1ZmZlcmluZyBvZiBzdGRpbiBiZWZvcmUgdGhlIGZp bmFsIHJlbGVhc2UuICovCisvKiAoQnV0IFQuRS4gRGlja2V5IHNheXMgc3RkaW4gaXMgbm90IGJ1 ZmZlcmVkPykgKi8KKworICAgICAgICBpZiAoY2tfc3Rkb3V0ID09IE5VTEwgfHwgbmV3dGVybShz LCBja19zdGRvdXQsIHN0ZGluKSA9PSAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwK KyAgICAgICAgICAgICAgIkZ1bGxzY3JlZW4gZGlzcGxheSBub3Qgc3VwcG9ydGVkIGZvciB0ZXJt aW5hbCB0eXBlOiAlc1xyXG4iLHMpOworICAgICAgICAgICAgZmRpc3BsYSA9IFhZRkRfUzsgICAg ICAgICAgIC8qIFVzZSBDUlQgaW5zdGVhZCAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAg ICB9CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgbmV3dGVybSBvayIsIiIsMCk7CisjZWxz ZQorICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW4gY2FsbGluZyBpbml0c2NyIiwiIiwwKTsKKyAg ICAgICAgaW5pdHNjcigpOyAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGN1cnNl cy4gKi8KKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuIGluaXRzY3Igb2siLCIiLDApOworI2Vu ZGlmIC8qIENLX05FV1RFUk0gKi8KKyAgICAgICAgY2luaXQrKzsgICAgICAgICAgICAgICAgICAg ICAgICAvKiBSZW1lbWJlciBjdXJzZXMgd2FzIGluaXRpYWxpemVkLiAqLworI2VuZGlmIC8qIENP TU1FTlQgKi8KKyAgICB9CisgICAgZnRfd2luID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAg LyogV2luZG93IGlzIG9wZW4gKi8KKyAgICBpZiAocmVwYWludCkgeworI2lmZGVmIENLX1dSRUZS RVNICisvKgorICBUaGlzIHRvdGFsbHkgcmVwYWludHMgdGhlIHNjcmVlbiwganVzdCB3aGF0IHdl IHdhbnQsIGJ1dCB3ZSBjYW4gb25seQorICBkbyB0aGlzIHdpdGggcmVhbCBjdXJzZXMsIGFuZCB0 aGVuIG9ubHkgaWYgY2xlYXJvaygpIGFuZCB3cmVmcmVzaCgpIGFyZQorICBwcm92aWRlZCBpbiB0 aGUgY3Vyc2VzIGxpYnJhcnkuCisqLworI2lmZGVmIE9TMgorICAgICAgICBSZXN0b3JlQ21kTW9k ZSgpOworI2Vsc2UKKyNpZmRlZiBRTlgKKyNpZm5kZWYgUU5YMTYKKyAgICAgICAgY2xlYXJvayhz dGRzY3IsIDEpOyAgICAgICAgICAgICAvKiBRTlggZG9lc24ndCBoYXZlIGN1cnNjciAqLworI2Vu ZGlmIC8qIFFOWDE2ICovCisgICAgICAgIHdyZWZyZXNoKHN0ZHNjcik7CisjZWxzZQorICAgICAg ICB3cmVmcmVzaChjdXJzY3IpOworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIE9TMiAqLwor I2Vsc2UgIC8qIE5vIENLX1dSRUZSRVNIICovCisvKgorICBLZXJtaXQncyBkby1pdC15b3Vyc2Vs ZiBtZXRob2QsIHdvcmtzIHdpdGggYWxsIHR5cGVzIG9mIGZ1bGxzY3JlZW4KKyAgc3VwcG9ydCwg YnV0IGRvZXMgbm90IHJlcGFpbnQgYWxsIHRoZSBmaWVsZHMuICBGb3IgZXhhbXBsZSwgdGhlIGZp bGVuYW1lCisgIGlzIGxvc3QsIGJlY2F1c2UgaXQgYXJyaXZlcyBhdCBhIGNlcnRhaW4gdGltZSBh bmQgbmV2ZXIgY29tZXMgYWdhaW4sIGFuZAorICBLZXJtaXQgcHJlc2VudGx5IGRvZXMgbm90IHNh dmUgaXQgYW55d2hlcmUuICBNYWtpbmcgdGhpcyBtZXRob2Qgd29yayBmb3IKKyAgYWxsIGZpZWxk cyB3b3VsZCBiZSBhIHJhdGhlciBtYWpvciByZWNvZGluZyB0YXNrLCBkdXBsaWNhdGluZyB3aGF0 IGN1cnNlcworICBhbHJlYWR5IGRvZXMsIGFuZCB3b3VsZCBhZGQgYSBsb3Qgb2YgY29tcGxleGl0 eSBhbmQgc3RvcmFnZSBzcGFjZS4KKyovCisgICAgICAgIGNlbmR3ID0gMTsKKyNlbmRpZiAvKiBD S19XUkVGUkVTSCAqLworICAgICAgICByZXBhaW50ID0gMDsKKyAgICB9CisgICAgaWYgKGNlbmR3 KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2luKCkgd2FzIGNhbGxlZCBwcmV2aW91 c2x5ICovCisjaWZkZWYgVk1TCisgICAgICAgIGluaXRzY3IoKTsgICAgICAgICAgICAgICAgICAg ICAgLyogKG9yIHNob3VsZCBoYXZlIGJlZW4hKSAqLworICAgICAgICBjbGVhcigpOworICAgICAg ICB0b3VjaHdpbihzdGRzY3IpOworICAgICAgICByZWZyZXNoKCk7CisjZWxzZQorI2lmZGVmIFFO WAorLyoKKyAgSW4gUU5YLCBpZiB3ZSBkb24ndCBjYWxsIGluaXRzY3IoKSBoZXJlIHdlIGNvcmUg ZHVtcC4KKyAgSSBkb24ndCBoYXZlIGFueSBRTlggY3Vyc2VzIGRvY3VtZW50YXRpb24sIGJ1dCBv dGhlciBjdXJzZXMgbWFudWFscworICBzYXkgdGhhdCBpbml0c2NyKCkgc2hvdWxkIGJlIGNhbGxl ZCBvbmx5IG9uY2UgcGVyIGFwcGxpY2F0aW9uLCBhbmQKKyAgZXhwZXJpZW5jZSBzaG93cyB0aGF0 IG9uIG90aGVyIHN5c3RlbXMsIGNhbGxpbmcgaW5pdHNjcigpIGhlcmUgZ2VuZXJhbGx5CisgIHJl c3VsdHMgaW4gYSBjb3JlIGR1bXAuCisqLworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5jIHJl LWNhbGxpbmcgaW5pdHNjciBRTlgiLCIiLDApOworICAgICAgICBpbml0c2NyKCk7CisgICAgICAg IGNsZWFyKCk7CisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBDT01NRU5UCisvKgorICBCdXQg ZXZlbiBzbywgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGN1cnNlcyBkaXNwbGF5cyBhcmUgbWVzc2Vk IHVwLgorICBDYWxsaW5nIHRvdWNod2luLCByZWZyZXNoLCBldGMsIGRvZXNuJ3QgbWFrZSBhbnkg ZGlmZmVyZW5jZS4KKyovCisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyB0b3Vj aHdpbiBRTlgiLCIiLDApOworICAgICAgICB0b3VjaHdpbihzdGRzY3IpOworICAgICAgICBkZWJ1 ZyhGMTAwLCJzY3JlZW5jIGNhbGxpbmcgcmVmcmVzaCBRTlgiLCIiLDApOworICAgICAgICByZWZy ZXNoKCk7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjZWxzZSAvKiBBbGwgb3RoZXJzLi4uICov CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2FsbGluZyBjbGVhciIsIiIsMCk7CisgICAg ICAgIGNsZWFyKCk7CisgICAgICAgIGRlYnVnKEYxMDAsInNjcmVlbmMgY2xlYXIgb2siLCIiLDAp OworI2VuZGlmIC8qIFFOWCAqLworI2VuZGlmIC8qIFZNUyAqLworICAgICAgICBkZWJ1ZyhGMTAw LCJzY3JlZW5jIHNldHVwIG9rIiwiIiwwKTsKKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBk b2luZyBmaXJzdCBtb3ZlIiwiIiwwKTsKKyAgICAgICAgbW92ZShDV19CQU4sMCk7ICAgICAgICAg ICAgICAgICAvKiBEaXNwbGF5IHRoZSBiYW5uZXIgKi8KKyAgICAgICAgZGVidWcoRjExMCwic2Ny ZWVuYyBteWhvc3QiLG15aG9zdCwwKTsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgZGVidWco RjExMCwic2NyZWVuYyBteWlwYWRkciIsbXlpcGFkZHIsMCk7CisjZW5kaWYgLyogVENQU09DS0VU ICovCisjaWZkZWYgSFBVWDEwMTAKKyAgICAgICAgZGVidWcoRjEwMCwic2NyZWVuYyBjYWxsaW5n IGZpcnN0IHByaW50dy4uLiIsIiIsMCk7CisvKiBSaWdodCBoZXJlIGlzIHdoZXJlIEhQLVVYIDEw LjEwIGxpYnhjdXJzZS4xIFJldiA3Ni4yMCBoYW5ncy4uLiAqLworI2VuZGlmIC8qIEhQVVgxMDEw ICovCisgICAgICAgIGlmIChteWhvc3RbMF0pIHsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAg ICAgIGlmICghbXlpcGFkZHJbMF0KKyNpZmRlZiBPUzIKKyAgICAgICAgICAgICAgICAgLyogV2Ug bmVlZCB0byBwZXJmb3JtIHRoaXMgdGVzdCBiZWNhdXNlIG9uIG5vbi1UQ1AvSVAgKi8KKyAgICAg ICAgICAgICAgICAgLyogc3lzdGVtcyB0aGUgY2FsbCB0byBnZXRsb2NhbGlwYWRkcigpIHJlc3Vs dHMgaW4gYSAgKi8KKyAgICAgICAgICAgICAgICAgLyogRE5TIExvb2t1cCB3aGljaCB0YWtlcyBz ZXZlcmFsIG1pbnV0ZXMgdG8gdGltZSBvdXQgKi8KKyAgICAgICAgICAgICAgICAgJiYgbmV0ICYm CisgICAgICAgICAgICAgICAgICh4bmV0ID09IE5FVF9UQ1BBIHx8IHhuZXQgPT0gTkVUX1RDUEIK KyNpZmRlZiBTU0hCVUlMVElOCisgICAgICAgICAgICAgICAgICB8fCB4bmV0ID09IE5FVF9TU0gK KyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisgICAgICAgICAgICAgICAgICApCisjZW5kaWYgLyog T1MyICovCisgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgZ2V0bG9jYWxpcGFkZHIo KTsKKyAgICAgICAgICAgIGlmIChteWlwYWRkclswXSAmJiBzdHJjbXAoKGNoYXIgKilteWhvc3Qs KGNoYXIgKilteWlwYWRkcikpCisgICAgICAgICAgICAgIHByaW50dygiJXMsICVzIFslc10iLHZl cnNpbywoY2hhciAqKW15aG9zdCwoY2hhciAqKW15aXBhZGRyKTsKKyAgICAgICAgICAgIGVsc2UK KyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICAgICAgICAgICAgcHJpbnR3KCIlcywgJXMiLHZl cnNpbywoY2hhciAqKW15aG9zdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmlu dHcoIiVzIix2ZXJzaW8pOworICAgICAgICB9CisjaWZkZWYgSFBVWDEwMTAKKyAgICAgICAgZGVi dWcoRjEwMCwic2NyZWVuYyBmaXJzdCBwcmludHcgcmV0dXJucyIsIiIsMCk7CisjZW5kaWYgLyog SFBVWDEwMTAgKi8KKyAgICAgICAgbW92ZShDV19ESVIsMyk7CisgICAgICAgIHByaW50dygiQ3Vy cmVudCBEaXJlY3Rvcnk6ICVzIix6Z3RkaXIoKSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcK KyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElS LCAobG9uZykgemd0ZGlyKCkgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICov CisgICAgICAgIGlmIChuZXQpIHsKKyAgICAgICAgICAgIG1vdmUoQ1dfTElOLDgpOworICAgICAg ICAgICAgcHJpbnR3KCJOZXR3b3JrIEhvc3Q6ICVzIiwKKyNpZmRlZiBORVdGVFAKKwkJICAgZnRw ID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiKHVua25vd24pIikgOgorI2VuZGlmIC8qIE5FV0ZU UCAqLworCQkgICB0dG5hbWUKKwkJICAgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IG1vdmUoQ1dfTElOLDApOworICAgICAgICAgICAgcHJpbnR3KCJDb21tdW5pY2F0aW9uIERldmlj ZTogJXMiLHR0bmFtZSk7CisgICAgICAgIH0KKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19MSU4sIChs b25nKSB0dG5hbWUgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisKKyAg ICAgICAgaWYgKG5ldCkgeworICAgICAgICAgICAgbW92ZShDV19TUEQsOCk7CisgICAgICAgICAg ICBwcmludHcoIk5ldHdvcmsgVHlwZTogIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBtb3ZlKENXX1NQRCwxKTsKKyAgICAgICAgICAgIHByaW50dygiQ29tbXVuaWNhdGlvbiBTcGVl ZDogIik7CisgICAgICAgIH0KKyAgICAgICAgbW92ZShDV19TUEQsMjIpOyAgICAgICAgICAgICAg ICAvKiBTZXJpYWwgc3BlZWQgb3IgbmV0d29yayB0eXBlICovCisgICAgICAgIGlmIChuZXQpIHsK KyNpZmRlZiBORVRDT05OCisJICAgIGludCBzZWN1cmUgPSAwOworCSAgICBjaGFyICogeG5hbWU7 CisJICAgIGlmICh4bmV0ID4gbm5ldG5hbWUpCisJICAgICAgeG5hbWUgPSAiW0VSUk9SXSI7CisJ ICAgIGVsc2UKKwkgICAgICB4bmFtZSA9IG5ldG5hbWVbeG5ldF07CisjaWZkZWYgTkVXRlRQCisg ICAgICAgICAgICBpZiAoZnRwKSB7CisJCWlmIChmdHBpc3NlY3VyZSgpKQorCQkgIHNlY3VyZSA9 IDE7CisJICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FV0ZUUCAqLworCSAgICAgIGlmICgwCisjaWZk ZWYgU1NIQlVJTFRJTgorICAgICAgICAgICAgICAgIHx8IElTX1NTSCgpCisjZW5kaWYgLyogU1NI QlVJTFRJTiAqLworI2lmZGVmIENLX0VOQ1JZUFRJT04KKyAgICAgICAgICAgICAgICB8fCBja190 bl9lbmNyeXB0aW5nKCkgJiYgY2tfdG5fZGVjcnlwdGluZygpCisjZW5kaWYgLyogQ0tfRU5DUllQ VElPTiAqLworI2lmZGVmIENLX1NTTAorICAgICAgICAgICAgICAgIHx8IHRsc19hY3RpdmVfZmxh ZyB8fCBzc2xfYWN0aXZlX2ZsYWcKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyNpZmRlZiBSTE9HQ09E RQorI2lmZGVmIENLX0tFUkJFUk9TCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAg ICAgIHx8IHR0bnByb3RvID09IE5QX0VLNExPR0lOIHx8IHR0bnByb3RvID09IE5QX0VLNUxPR0lO CisjZW5kaWYgLyogQ0tfRU5DUllQVElPTiAqLworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisj ZW5kaWYgLyogUkxPR0NPREUgKi8KKyAgICAgICAgICAgICAgICAgKSB7CisJCXNlY3VyZSA9IDE7 CisJICAgIH0KKwkgICAgaWYgKHNlY3VyZSkgeworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgICAgICAgICAgY2hhciBidWZbMzBdOworICAgICAgICAgICAgICAgIHNwcmludGYoYnVm LCIlcyAoU0VDVVJFKSIseG5hbWUpOworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBD V19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGJ1ZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8q IEtVSSAqLworICAgICAgICAgICAgICAgIHByaW50dygiJXMgKFNFQ1VSRSkiLHhuYW1lKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIseG5hbWUpOwor I2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko S1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp IENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgeG5hbWUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRp ZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBwcmludHcoIihu ZXR3b3JrKSIpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQ cm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChs b25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIihuZXR3b3Jr KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2Vu ZGlmIC8qIEtVSSAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGlmIChzcGVlZCA8IDBMKQorICAgICAgICAgICAgICBzcGVlZCA9IHR0Z3NwZCgp OworICAgICAgICAgICAgaWYgKHNwZWVkID4gMEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3Bl ZWQgPT0gODg4MCkgeworICAgICAgICAgICAgICAgICAgICBwcmludHcoIjc1LzEyMDAiKTsKKyNp ZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcp ICI3NS8xMjAwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlm IC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgICAgICBjaGFyIHNwZWVkYnVmWzY0XSA7CisgICAgICAgICAgICAgICAg ICAgIHNwcmludGYoc3BlZWRidWYsICIlbGQiLCBzcGVlZCk7CisgICAgICAgICAgICAgICAgICAg IHByaW50dygiJXMiLHNwZWVkYnVmKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAg ICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHNwZWVkYnVmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg cHJpbnR3KCJ1bmtub3duIik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSAiKHVua25vd24pIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIG1vdmUoQ1dfUEFSLDE0KTsKKyAgICAgICAgcHJpbnR3KCJQYXJpdHk6 ICVzIixmdHAgPyAibm9uZSIgOiBwYXJuYW0oKGNoYXIpcGFyaXR5KSk7CisjaWZkZWYgS1VJCisj aWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QQVIsCisgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBwYXJuYW0oKGNoYXIpcGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAp OworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDS19USU1FUlMK KyAgICAgICAgaWYgKC8qIHJ0dGZsZyAmJiAqLyBwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAg ICAgICAgICBtb3ZlKENXX1RNTywgOSk7IHByaW50dygiUlRUL1RpbWVvdXQ6Iik7IH0KKyNlbmRp ZiAvKiBDS19USU1FUlMgKi8KKyAgICAgICAgbW92ZShDV19UWVAsMTEpOyBwcmludHcoIkZpbGUg VHlwZToiKTsKKyAgICAgICAgbW92ZShDV19TSVosMTEpOyBwcmludHcoIkZpbGUgU2l6ZToiKTsK KyAgICAgICAgbW92ZShDV19QQ0QsIDgpOworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICBw Y3RsYmwgPSAod2hhdCAmIFdfU0VORCk7CisgICAgICAgIHByaW50dygiJXM6IiwgcGN0bGJsID8g IlBlcmNlbnQgRG9uZSIgOiAiQnl0ZXMgU28gRmFyIik7CisKKyNpZmRlZiBYWVpfSU5URVJOQUwK KyAgICAgICAgbW92ZShDV19CQVIsIDEpOworICAgICAgICBwcmludHcoIiUxMHMgUHJvdG9jb2w6 IiwgZnRwID8gIkZUUCIgOiBwdGFiW3Byb3RvY29sXS5wX25hbWUpOworI2VuZGlmIC8qIFhZWl9J TlRFUk5BTCAqLworI2lmZGVmIENLX1BDVF9CQVIKKyAgICAgICAgaWYgKHRoZXJtb21ldGVyKSB7 CisgICAgICAgICAgICBvbGRwY3QgPSBwY3QgPSAwOworICAgICAgICAgICAgbW92ZShDV19CQVIs MjIpOworICAgICAgICAgICAgcHJpbnR3KCIgICAgLi4uMTAuLi4yMC4uLjMwLi4uNDAuLi41MC4u LjYwLi4uNzAuLi44MC4uLjkwLi4xMDAiKTsKKyAgICAgICAgICAgIG1vdmUoQ1dfQkFSLDIyKzU2 KTsKKyAgICAgICAgfQorI2VuZGlmIC8qIENLX1BDVF9CQVIgKi8KKyAgICAgICAgbW92ZShDV19U UiwgIDEpOyBwcmludHcoIkVzdGltYXRlZCBUaW1lIExlZnQ6Iik7CisgICAgICAgIG1vdmUoQ1df Q1AsICAyKTsgcHJpbnR3KCJUcmFuc2ZlciBSYXRlLCBDUFM6Iik7CisgICAgICAgIG1vdmUoQ1df V1MsICA4KTsgcHJpbnR3KCJXaW5kb3cgU2xvdHM6JXMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoKHByb3RvY29sID09IFBST1RPX0spICYmICFmdHApID8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiIgOiAiIE4vQSIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgbW92ZShDV19QVCwgIDkpOyBwcmludHcoIlBhY2tldCBUeXBl OiIpOworICAgICAgICBpZiAoZnRwIHx8IHByb3RvY29sICE9IFBST1RPX0spIHsKKwkgICAgbW92 ZShDV19QVCwyMik7CisgICAgICAgICAgICBwcmludHcoIiVzIiwgIk4vQSIpOworICAgICAgICAg ICAgbW92ZShDV19QQywgIDExKTsgcHJpbnR3KCJJL08gQ291bnQ6Iik7CisgICAgICAgICAgICBt b3ZlKENXX1BMLCAgMTApOyBwcmludHcoIkkvTyBMZW5ndGg6Iik7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBtb3ZlKENXX1BDLCAgOCk7IHByaW50dygiUGFja2V0IENvdW50OiIpOwor ICAgICAgICAgICAgbW92ZShDV19QTCwgIDcpOyBwcmludHcoIlBhY2tldCBMZW5ndGg6Iik7Cisg ICAgICAgIH0KKyNpZm5kZWYgQ09NTUVOVAorICAgICAgICBtb3ZlKENXX1BSLCAgOSk7IHByaW50 dygiRXJyb3IgQ291bnQ6Iik7CisjZWxzZQorICAgICAgICBtb3ZlKENXX1BSLCAgMik7IHByaW50 dygiUGFja2V0IFJldHJ5IENvdW50OiIpOworI2VuZGlmCisjaWZkZWYgQ09NTUVOVAorICAgICAg ICBtb3ZlKENXX1BCLCAgMik7IHByaW50dygiUGFja2V0IEJsb2NrIENoZWNrOiIpOworI2VuZGlm IC8qIENPTU1FTlQgKi8KKyAgICAgICAgbW92ZShDV19FUlIsMTApOyBwcmludHcoIkxhc3QgRXJy b3I6Iik7CisgICAgICAgIG1vdmUoQ1dfTVNHLCA4KTsgcHJpbnR3KCJMYXN0IE1lc3NhZ2U6Iik7 CisJaWYgKHhmcm1zZykgeworCSAgICBtb3ZlKENXX01TRywgMjIpOyBwcmludHcoIiVzIix4ZnJt c2cpOworCSAgICBtYWtlc3RyKCZ4ZnJtc2csTlVMTCk7CisJfQorICAgICAgICBtb3ZlKENXX0lO VCwgMCk7CisgICAgICAgIGlmICgheGZyaW50KSB7CisgICAgICAgICAgICBwcmludHcoIihUcmFu c2ZlciBpbnRlcnJ1cHRpb24gaXMgZGlzYWJsZWQpIik7CisgICAgICAgIH0gZWxzZSB7CisjaWZk ZWYgQ0tfTkVFRF9TSUcKKyAgICAgICAgICAgIHByaW50dygKKyI8JXM+WCB0byBjYW5jZWwgZmls ZSwgPCVzPlogdG8gY2FuY2VsIGdyb3VwLCA8JXM+PENSPiB0byByZXNlbmQgbGFzdCBwYWNrZXQi LAorICAgICAgICAgICAgICAgICAgIGRiY2hyKGVzY2FwZSksIGRiY2hyKGVzY2FwZSksIGRiY2hy KGVzY2FwZSkKKyAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgbW92ZShDV19JTlQg KyAxLCAwKTsKKyAgICAgICAgICAgIHByaW50dygKKyI8JXM+RSB0byBzZW5kIEVycm9yIHBhY2tl dCwgXkMgdG8gcXVpdCBpbW1lZGlhdGVseSwgPCVzPkwgdG8gcmVmcmVzaCBzY3JlZW4uIiwKKyAg ICAgICAgICAgICAgICAgICBkYmNocihlc2NhcGUpLCBkYmNocihlc2NhcGUpCisgICAgICAgICAg ICAgICAgICAgKTsKKyNlbHNlIC8qICFDS19ORUVEX1NJRyAqLworICAgICAgICAgICAgbW92ZShD V19JTlQsIDApOworI2lmZGVmIE9TMgorICAgICAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RP X0spIHsKKyAgICAgICAgICAgICAgICBwcmludHcoCisiWCB0byBjYW5jZWwgZmlsZSwgWiB0byBj YW5jZWwgZ3JvdXAsIDxFbnRlcj4gdG8gcmVzZW5kIGxhc3QgcGFja2V0LCIKKyAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNlbHNlIC8qICFPUzIgKi8KKyNpZmRlZiBW TVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiBWTVMgYXZvaWQgYm90dG9tIGxp bmUgKi8KKyAgICAgICAgICAgIHByaW50dygKKyJYOiBDYW5jZWwgdGhpcyBmaWxlOyBFOiBDYW5j ZWwgdHJhbnNmZXI7IF5DOiBRdWl0IG5vdzsgXlc6IFJlZnJlc2ggc2NyZWVuLiIKKyAgICAgICAg ICAgICAgICAgICApOworI2Vsc2UKKyAgICAgICAgICAgIHByaW50dygKKyJYIHRvIGNhbmNlbCBm aWxlLCBaIHRvIGNhbmNlbCBncm91cCwgPENSPiB0byByZXNlbmQgbGFzdCBwYWNrZXQsIgorICAg ICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogVk1TICovCisjZW5kaWYgLyogT1MyICovCisK KyNpZm5kZWYgVk1TCisgICAgICAgICAgICBtb3ZlKENXX0lOVCArIDEsIDApOworICAgICAgICAg ICAgaWYgKHByb3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAgICAgICBwcmludHcoCisi RSB0byBzZW5kIEVycm9yIHBhY2tldCwgXkMgdG8gcXVpdCBpbW1lZGlhdGVseSwgXkwgdG8gcmVm cmVzaCBzY3JlZW4uIgorICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBwcmludHcoIl5DIHRvIGNhbmNlbCBmaWxlIHRyYW5zZmVy LiIpOworICAgICAgICAgICAgfQorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIENLX05FRURf U0lHICovCisgICAgICAgIH0KKyAgICAgICAgcmVmcmVzaCgpOworICAgICAgICBjZW5kdyA9IDA7 CisgICAgfQorICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgc3dpdGNoIiwiIixmKTsKKyAgICBkZWJ1 ZyhGMDAwLCJTQ1JFRU5DIGMiLCIiLGMpOworICAgIGRlYnVnKEYxMDEsIlNDUkVFTkMgbiIsIiIs bik7CisKKyAgICBsZW4gPSBzdHJsZW4ocyk7ICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGgg b2YgYXJndW1lbnQgc3RyaW5nICovCisgICAgc3dpdGNoIChmKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLyogSGFuZGxlIG91ciBmdW5jdGlvbiBjb2RlICovCisgICAgICBjYXNlIFNDUl9GTjog ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZW5hbWUgKi8KKyAgICAgICAgb2xkcGN0ID0gcGN0 ID0gMEw7ICAgICAgICAgICAgICAvKiBSZXNldCBwZXJjZW50cyAqLworI2lmZGVmIEdGVElNRVIK KyAgICAgICAgZ3R2ID0gKENLRkxPQVQpIC0xLjA7CisgICAgICAgIC8qIG9sZGd0diA9IChDS0ZM T0FUKSAtMS4wOyAqLworI2Vsc2UKKyAgICAgICAgZ3R2ID0gLTFMOworICAgICAgICAvKiBvbGRn dHYgPSAtMUw7ICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICBvbGR3aW4gPSAtMTsK KyAgICAgICAgZnNpeiA9IChDS19PRkZfVCktMTsJCS8qIEludmFsaWRhdGUgcHJldmlvdXMgZmls ZSBzaXplICovCisgICAgICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAgICAgICAgICAgLyogRXJh c2UgcGVyY2VudCBkb25lIGZyb20gbGFzdCB0aW1lICovCisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df UENELCAobG9uZykgMCApOworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNG RVIsIChsb25nKSBDV19GRkMsIChsb25nKSAwICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlm IC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICBtb3ZlKENXX1NJWiwyMik7 ICAgICAgICAgICAgICAgIC8qIEVyYXNlIGZpbGUgc2l6ZSBmcm9tIGxhc3QgdGltZSAqLworI2lm ZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9U UkFOU0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIDAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisj ZW5kaWYgLyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgIG1vdmUoQ1dfRVJS LDIyKTsgICAgICAgICAgICAgICAgLyogQW5kIGxhc3QgZXJyb3IgbWVzc2FnZSAqLworI2lmZGVm IEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpICIiICk7CisjZW5kaWYgLyogSzk1RyAqLworI2Vu ZGlmIC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOworI2lmZGVmIENPTU1FTlQKKyNpZmRl ZiBTVFJFQU1JTkcKKyAgICAgICAgaWYgKHByb3RvY29sID09IFBST1RPX0sgJiYgc3RyZWFtb2sp IHsKKyAgICAgICAgICAgIG1vdmUoQ1dfQkFSLCAxKTsKKyNpZmRlZiBYWVpfSU5URVJOQUwKKyAg ICAgICAgICAgIHByaW50dygiICAgS2VybWl0IFNUUkVBTUlORzoiKTsKKyNlbHNlCisgICAgICAg ICAgICBwcmludHcoIiAgICAgICAgICBTVFJFQU1JTkc6Iik7CisjZW5kaWYgLyogWFlaX0lOVEVS TkFMICovCisgICAgICAgIH0KKyNlbmRpZiAvKiBTVFJFQU1JTkcgKi8KKyNlbmRpZiAvKiBDT01N RU5UICovCisKKyAgICAgICAgaWYgKHdoYXQgJiBXX1NFTkQpIHsJCS8qIElmIHdlJ3JlIHNlbmRp bmcuLi4gKi8KKyNpZmRlZiBORVdGVFAKKwkgICAgaWYgKHdoYXQgJiBXX0ZUUCkgewkJLyogRlRQ ICovCisgICAgICAgICAgICAgICAgbW92ZShDV19OQU0sMTApOworICAgICAgICAgICAgICAgIHBy aW50dygiICAgRlRQIFBVVDoiKTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogTkVXRlRQICovCisj aWZkZWYgQ0tfUkVTRU5ECisgICAgICAgICAgICBzd2l0Y2ggKHNlbmRtb2RlKSB7CQkvKiBLZXJt aXQgKi8KKyAgICAgICAgICAgICAgY2FzZSBTTV9SRVNFTkQ6CisgICAgICAgICAgICAgICAgbW92 ZShDV19OQU0sMTApOworICAgICAgICAgICAgICAgIHByaW50dygiIFJFU0VORElORzoiKTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg ICAgICBtb3ZlKENXX05BTSwxMCk7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIgICBTRU5ESU5H OiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAg ICAgICAgIG1vdmUoQ1dfTkFNLDEwKTsKKyAgICAgICAgICAgIHByaW50dygiICAgU0VORElORzoi KTsKKyNlbmRpZiAvKiBDS19SRVNFTkQgKi8KKworICAgICAgICB9IGVsc2UgaWYgKHdoYXQgJiBX X1JFQ1YpIHsJLyogSWYgd2UncmUgcmVjZWl2aW5nLi4uICovCisjaWZkZWYgTkVXRlRQCisJICAg IGlmICh3aGF0ICYgV19GVFApIHsJCS8qIEZUUCAqLworICAgICAgICAgICAgICAgIG1vdmUoQ1df TkFNLDEwKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiAgIEZUUCBHRVQ6Iik7CisJICAgIH0g ZWxzZSB7CisjZW5kaWYgLyogTkVXRlRQICovCisJCW1vdmUoQ1dfTkFNLDEwKTsKKwkJcHJpbnR3 KCIgUkVDRUlWSU5HOiIpOworI2lmZGVmIE5FV0ZUUAorCSAgICB9CisgICAgICAgIH0gZWxzZSBp ZiAod2hhdCA9PSAoV19GVFB8V19GVF9ERUxFKSkgeworCQltb3ZlKENXX05BTSwxMCk7CisJCXBy aW50dygiRlRQIERFTEVURToiKTsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyAgICAgICAgfSBlbHNl IHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBkb24ndCBrbm93Li4uICovCisgICAg ICAgICAgICBtb3ZlKENXX05BTSwxMCk7ICAgICAgICAgICAgLyogKHNob3VsZCBuZXZlciBzZWUg dGhpcykgKi8KKyAgICAgICAgICAgIHByaW50dygiIEZpbGUgTmFtZToiKTsKKyAgICAgICAgfQor ICAgICAgICBtb3ZlKENXX05BTSwyMik7ICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgdGhlIGZp bGVuYW1lICovCisgICAgICAgIGlmIChsZW4gPiA1NykgeworICAgICAgICAgICAgcHJpbnR3KCIl LjU1cy4uIixzKTsKKyAgICAgICAgICAgIGxlbiA9IDU3OworICAgICAgICB9IGVsc2UgcHJpbnR3 KCIlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOworI2VuZGlm IC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgcSA9IGxlbjsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBSZW1lbWJlciBuYW1lIGxlbmd0aCBmb3IgbGF0ZXIgKi8KKyAgICAg ICAgY2xydG9lb2woKTsKKyAgICAgICAgc2NyZnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAv KiBEaXNwbGF5IGZpbGUgdHlwZSAoY2FuIGNoYW5nZSkgKi8KKyAgICAgICAgcmVmcmVzaCgpOwor I2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8K KyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9BTjogICAgICAgICAgICAgICAgICAg ICAgLyogRmlsZSBhcy1uYW1lICovCisgICAgICAgIGlmIChxICsgbGVuICsgNCA8IDU4KSB7ICAg ICAgICAgLyogV2lsbCBmaXQgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfTkFNLCAyMiArIHEpOwor ICAgICAgICAgICAgcHJpbnR3KCIgPT4gJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVH CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19OQU0sIChsb25nKSBzICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLwor ICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvbyBsb25nICovCisg ICAgICAgICAgICBtb3ZlKENXX05BTSwgMjIpOyAgICAgICAgICAgLyogT3ZlcndyaXRlIHByZXZp b3VzIG5hbWUgKi8KKyAgICAgICAgICAgIHEgPSAwOworICAgICAgICAgICAgaWYgKGxlbiArIDQg PiA1NykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KKyAgICAg ICAgICAgICAgICBwcmludHcoIiA9PiAlLjUxcy4uIixzKTsgICAgICAgICAgICAgICAgICAgICAg ICAvKiB3ZzE1ICovCisgICAgICAgICAgICAgICAgbGVuID0gNTM7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogd2cxNSAqLworICAgICAgICAgICAgfSBlbHNlIHByaW50 dygiID0+ICVzIixzKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdnMTUgKi8KKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyAgKTsKKyNlbmRpZiAvKiBLOTVHICov CisjZW5kaWYgLyogS1VJICovCisgICAgICAgIH0KKyAgICAgICAgcSArPSBsZW4gKyA0OyAgICAg ICAgICAgICAgICAgICAvKiBSZW1lbWJlciBob3Jpem9udGFsIHBvc2l0aW9uICovCisgICAgICAg IGNscnRvZW9sKCk7CisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2 ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAg ICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgc2l6ZSAqLworICAg ICAgICBmc2l6ID0gbjsKKyAgICAgICAgbW92ZShDV19TSVosMjIpOworICAgICAgICBpZiAoZnNp eiA+IChDS19PRkZfVCktMSkgeworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAg ICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChsb25n KSBuICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAg cHJpbnR3KCIlcyIsY2tmc3RvYShuKSk7CisgICAgICAgIH0KKwlpZiAoZnNpeiA9PSAtMkwpIHsK KwkgICAgcHJpbnR3KCJQT1NTSUJMWSBFWENFRURTIExPQ0FMIEZJTEUgU0laRSBMSU1JVCIpOwor CX0KKyAgICAgICAgY2xydG9lb2woKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIG1vdmUoQ1df UENELCA4KTsKKyAgICAgICAgaWYgKGZzaXogPiAoQ0tfT0ZGX1QpLTEpIHsJLyogUHV0IHVwIHBl cmNlbnQgbGFiZWwgKi8KKyAgICAgICAgICAgIHBjdGxibCA9IDE7CisJICAgIGNscnRvZW9sKCk7 CisgICAgICAgICAgICBwcmludHcoIlBlcmNlbnQgRG9uZToiKTsKKyAgICAgICAgfQorI2Vsc2UK Kwltb3ZlKENXX1BDRCwgOCk7CisJY2xydG9lb2woKTsKKyAgICAgICAgaWYgKGZzaXogPiAoQ0tf T0ZGX1QpLTEpIHsJLyogUHV0IHVwIHBlcmNlbnQgbGFiZWwgKi8KKyAgICAgICAgICAgIHBjdGxi bCA9IDE7CisgICAgICAgICAgICBwcmludHcoIlBlcmNlbnQgRG9uZToiKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIHBjdGxibCA9IDA7CisgICAgICAgICAgICBwcmludHcoIkJ5dGVz IFNvIEZhcjoiKTsKKwl9CisjZW5kaWYgLyogQ09NTUVOVCAqLworICAgICAgICBjbHJ0b2VvbCgp OworICAgICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUgdHlwZSAq LworICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgT1MyCisgICAgICAgIFNhdmVDbWRNb2RlKDAs IDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NS X1BUOiAgICAgICAgICAgICAgICAgICAgICAvKiBQYWNrZXQgdHlwZSBvciBwc2V1ZG90eXBlICov CisgICAgICAgIGlmIChzcGFja2V0cyA8IDUpIHsKKyAgICAgICAgICAgIGV4dGVybiBpbnQgc3lz aW5kZXg7CisgICAgICAgICAgICBleHRlcm4gc3RydWN0IHN5c2RhdGEgc3lzaWRsaXN0W107Cisg ICAgICAgICAgICAvKiBUaGluZ3MgdGhhdCB3b24ndCBjaGFuZ2UgYWZ0ZXIgdGhlIDR0aCBwYWNr ZXQgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfUEFSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygi JXMiLHBhcm5hbSgoY2hhcilwYXJpdHkpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAg ICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIENXX1BBUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBwYXJuYW0oKGNoYXIpcGFyaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0 b2VvbCgpOworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIG1vdmUoQ1dfUEIsIDIyKTsgICAg ICAgICAgICAvKiBCbG9jayBjaGVjayBvbiB0aGlzIHBhY2tldCAqLworICAgICAgICAgICAgaWYg KGJjdHUgPT0gNCkKKyAgICAgICAgICAgICAgcHJpbnR3KCJCIik7CisgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgIHByaW50dygiJWQiLGJjdHUpOworICAgICAgICAgICAgY2xydG9lb2wo KTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBpZiAoCisjaWZkZWYgTkVXRlRQ CisJCShmdHAgJiYgKHNwYWNrZXRzID09IDEgfHwgcnBhY2tldHMgPT0gMSkpIHx8CisjZW5kaWYg LyogTkVXRlRQICovCisJCXNwYWNrZXRzID09IDQKKwkJKSB7CisgICAgICAgICAgICAgICAgbW92 ZShDV19MSU4sOCk7CisgICAgICAgICAgICAgICAgaWYgKAorI2lmZGVmIE5FV0ZUUAorCQkgICAg ZnRwIHx8CisjZW5kaWYgLyogTkVXRlRQICovCisJCSAgICAoKHByb3RvY29sID09IFBST1RPX0sp ICYmIChzeXNpbmRleCA+IC0xKSkKKwkJICAgICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo bmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlKENXX0xJTiw4KTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50dygiTmV0d29yayBIb3N0OiAlcyAoJXMpIiwKKyNpZmRlZiBO RVdGVFAKKwkJCSAgICAgICBmdHAgPyAoZnRwX2hvc3QgPyBmdHBfaG9zdCA6ICIiKSA6CisjZW5k aWYgLyogTkVXRlRQICovCisJCQkgICAgICAgdHRuYW1lLAorI2lmZGVmIE5FV0ZUUAorCQkJICAg ICAgIGZ0cCA/IGZ0cF9zcnZ0eXAgOgorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkJICAgICAgIHN5 c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKKwkJCSAgICAgICApOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbW92ZShDV19MSU4sMCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwcmludHcoIkNvbW11bmljYXRpb24gRGV2aWNlOiAlcyAo cmVtb3RlIGhvc3QgaXMgJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRuYW1l LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9u YW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBDS19USU1FUlMKKyAgICAgICAgaWYgKC8q IHJ0dGZsZyAmJiAqLyBwcm90b2NvbCA9PSBQUk9UT19LKSB7CisgICAgICAgICAgICBsb25nIHh4 OworICAgICAgICAgICAgaWYgKAorI2lmZGVmIFNUUkVBTUlORworICAgICAgICAgICAgICAgIHN0 cmVhbWluZyAmJiBvbGR3aW4gIT0gLTIKKyNlbHNlCisgICAgICAgICAgICAgICAgMAorI2VuZGlm IC8qIFNUUkVBTUlORyAqLworICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIG1v dmUoQ1dfVE1PLCAyMik7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIwMCAvIDAwIik7CisgICAg ICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgeHggPSAocnR0ZGVsYXkgKyA1MDApIC8gMTAwMDsKKyAgICAgICAgICAgICAgICBpZiAo eHggIT0gb2xkcnR0IHx8IHJjdnRpbW8gIT0gb2xkdGltKSB7CisgICAgICAgICAgICAgICAgICAg IG1vdmUoQ1dfVE1PLCAyMik7CisgICAgICAgICAgICAgICAgICAgIHByaW50dygiJTAybGQgLyAl MDJkIiwgeHgsIHJjdnRpbW8pOworICAgICAgICAgICAgICAgICAgICBvbGRydHQgPSB4eDsKKyAg ICAgICAgICAgICAgICAgICAgb2xkdGltID0gcmN2dGltbzsKKyAgICAgICAgICAgICAgICAgICAg Y2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKworICAgICAgICB4ID0gKHdoYXQgJiBXX1JFQ1YpID8g ICAgICAgICAgLyogUGFja2V0IGxlbmd0aCAqLworICAgICAgICAgIHJwa3RsKyhwcm90b2NvbD09 UFJPVE9fSz8xOjApIDoKKyAgICAgICAgICAgIHNwa3RsOworICAgICAgICBpZiAoeCAhPSBvbGRs ZW4pIHsgICAgICAgICAgICAgIC8qIEJ1dCBvbmx5IGlmIGl0IGNoYW5nZWQuICovCisgICAgICAg ICAgICBtb3ZlKENXX1BMLCAyMik7CisgICAgICAgICAgICBwcmludHcoIiVkIix4KTsKKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxF X1RSQU5TRkVSLCAobG9uZykgQ1dfUEwsIChsb25nKSB4ICk7CisjZW5kaWYgLyogSzk1RyAqLwor I2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgIG9s ZGxlbiA9IHg7CisgICAgICAgIH0KKyAgICAgICAgbW92ZShDV19QQywgMjIpOyAgICAgICAgICAg ICAgICAvKiBQYWNrZXQgY291bnQgKGFsd2F5cykuICovCisKKyAgICAgICAgcHJpbnR3KCIlZCIs ICh3aGF0ICYgV19SRUNWKSA/IHJwYWNrZXRzIDogc3BhY2tldHMpOworI2lmZGVmIEtVSQorI2lm bmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX1BDLCAobG9uZykgc3BhY2tldHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYg LyogS1VJICovCisgICAgICAgIGNscnRvZW9sKCk7CisKKyAgICAgICAgaWYgKHByb3RvY29sID09 IFBST1RPX0sgJiYgIWZ0cCkgeyAvKiBXaW5kb3cgc2xvdHMgKi8KKyAgICAgICAgICAgIGNoYXIg d3NbMTZdOworICAgICAgICAgICAgaW50IGZsYWc7CisgICAgICAgICAgICBmbGFnID0gMDsKKyNp ZmRlZiBTVFJFQU1JTkcKKyAgICAgICAgICAgIGlmIChzdHJlYW1pbmcpIHsKKyAgICAgICAgICAg ICAgICBpZiAob2xkd2luICE9IC0yKSB7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYod3Ms IlNUUkVBTUlORyIpOworICAgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgb2xkd2luID0gLTI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlCisjZW5kaWYgLyogU1RSRUFNSU5HICovCisgICAgICAgICAgICAgIGlmICh3Y3VyICE9IG9s ZHdpbikgeworICAgICAgICAgICAgICAgICAgc3ByaW50Zih3cywgIiVkIG9mICVkIiwgd2N1ciA8 IDEgPyAxIDogd2N1ciwgd3Nsb3RuKTsKKyAgICAgICAgICAgICAgICAgIGZsYWcgPSAxOworICAg ICAgICAgICAgICAgICAgb2xkd2luID0gd2N1cjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICBtb3ZlKENXX1dTLCAyMik7CisgICAgICAg ICAgICAgICAgcHJpbnR3KCIlcyIsIHdzKTsKKyAgICAgICAgICAgICAgICBjbHJ0b2VvbCgpOwor I2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHko IEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfV1MsIChsb25nKSB3cyApOworI2VuZGlmIC8q IEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAgICAgaWYg KGVycm9ycyAhPSBvbGR0cnkpIHsgICAgICAgICAvKiBSZXRyeSBjb3VudCwgaWYgY2hhbmdlZCAq LworICAgICAgICAgICAgbW92ZShDV19QUiwgMjIpOworICAgICAgICAgICAgcHJpbnR3KCIlZCIs ZXJyb3JzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMgKTsK KyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2Vv bCgpOworICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOworICAgICAgICB9CisJLyogU2VuZGVy J3MgcGFja2V0IHR5cGUgKi8KKyAgICAgICAgaWYgKCFmdHAgJiYgKGMgIT0gb2xkdHlwICYmIGMg IT0gJ1knICYmIGMgIT0gJ04nKSkgeworICAgICAgICAgICAgY2hhciB0eXBlWzJdOworICAgICAg ICAgICAgc3ByaW50Zih0eXBlLCAiJWMiLGMpOworICAgICAgICAgICAgbW92ZShDV19QVCwyMik7 CisgICAgICAgICAgICBwcmludHcoIiVzIiwgdHlwZSk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcp IENXX1BULCAobG9uZykgdHlwZSApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICBvbGR0eXAgPSBjOworICAg ICAgICB9CisgICAgICAgIHN3aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogTm93IGhh bmRsZSBzcGVjaWZpYyBwYWNrZXQgdHlwZXMgKi8KKyAgICAgICAgICBjYXNlICdTJzogICAgICAg ICAgICAgICAgICAgICAvKiBCZWdpbm5pbmcgb2YgdHJhbnNmZXIgKi8KKyAgICAgICAgICAgIGZj bnQgPSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBDbGVhciBjb3VudGVycyAqLworI2lmZGVmIEdG VElNRVIKKyAgICAgICAgICAgIGd0diA9IC0xLjA7CisjZWxzZSAvKiBHRlRJTUVSICovCisgICAg ICAgICAgICBndHYgPSAtMUw7ICAgICAgICAgICAgICAgICAgLyogQW5kIG9sZC9uZXcgdGhpbmdz Li4uICovCisjZW5kaWYgLyogR0ZUSU1FUiAqLworICAgICAgICAgICAgb2xkcGN0ID0gcGN0ID0g MEw7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgJ1onOiAgICAgICAgICAg ICAgICAgICAgIC8qIG9yIEVPRiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBT Q1JfUFQgWiBwa3RudW0iLCIiLG4pOworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBT Q1JfUFQgWiBvbGRwY3QiLCIiLG9sZHBjdCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3Jl ZW5jIFNDUl9QVCBaIHBjdCIsIiIscGN0KTsKKyAgICAgICAgICBjYXNlICdEJzogICAgICAgICAg ICAgICAgICAgICAvKiBEYXRhIHBhY2tldCAqLworICAgICAgICAgICAgaWYgKGZzaXogPiAwTCkg eyAgICAgICAgICAgIC8qIFNob3cgcGVyY2VudCBkb25lIGlmIGtub3duICovCisgICAgICAgICAg ICAgICAgb2xkcGN0ID0gcGN0OyAgICAgICAgICAgLyogUmVtZW1iZXIgcHJldmlvdXMgcGVyY2Vu dCAqLworICAgICAgICAgICAgICAgIGhvd2ZhciA9IGZmYzsKKyNpZmRlZiBDS19SRVNFTkQKKyAg ICAgICAgICAgICAgICBpZiAod2hhdCAmIFdfU0VORCkJLyogQWNjb3VudCBmb3IgUFNFTkQgb3Ig UkVTRU5EICovCisgICAgICAgICAgICAgICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OworICAgICAg ICAgICAgICAgIGVsc2UgaWYgKHdoYXQgJiBXX1JFQ1YpCisgICAgICAgICAgICAgICAgICBob3dm YXIgKz0gcnNfbGVuOworI2VuZGlmIC8qIENLX1JFU0VORCAqLworICAgICAgICAgICAgICAgIC8q IFBlcmNlbnQgZG9uZSwgdG8gYmUgZGlzcGxheWVkLi4uICovCisgICAgICAgICAgICAgICAgaWYg KGMgPT0gJ1onKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZGlzY2FyZCAmJiAhY3hzZWVu ICYmICFjenNlZW4pIHBjdCA9IDEwMEw7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg ICAgICAgICAgICBwY3QgPSAoZnNpeiA+IDk5TCkgPyAoaG93ZmFyIC8gKGZzaXogLyAxMDBMKSkg OiAwTDsKKyAgICAgICAgICAgICAgICBpZiAocGN0ID4gMTAwTCB8fCAgICAgICAvKiBBbGxvdyBm b3IgZXhwYW5zaW9uIGFuZCAqLworICAgICAgICAgICAgICAgICAgIChvbGRwY3QgPT0gOTlMICYm IHBjdCA8IDBMKSkgLyogb3RoZXIgYm91bmRhcnkgY29uZGl0aW9ucyAqLworICAgICAgICAgICAg ICAgICAgcGN0ID0gMTAwTDsKKyAgICAgICAgICAgICAgICBpZiAocGN0ICE9IG9sZHBjdCkgICAg ICAvKiBPbmx5IGRvIHRoaXMgMTAwIHRpbWVzIHBlciBmaWxlICovCisgICAgICAgICAgICAgICAg ICB1cGRwY3Qob2xkcGN0LCBwY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBtb3ZlKENXX1BDRCwyMik7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0 b2EoZmZjKSk7CisgICAgICAgICAgICB9CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAo bG9uZykgaG93ZmFyKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAg ICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAg ICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICclJzogICAgICAgICAgICAgICAgICAg ICAvKiBUaW1lb3V0cywgcmV0cmFuc21pc3Npb25zICovCisgICAgICAgICAgICBjcHMgPSBzaG9j cHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hv ZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworCisgICAgICAgICAgICBlcnJvcnMg PSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAgICAgICAgIGlmIChlcnJvcnMg IT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hhbmdlZCAqLworICAgICAgICAg ICAgICAgIG1vdmUoQ1dfUFIsIDIyKTsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVkIixlcnJv cnMpOworICAgICAgICAgICAgICAgIGNscnRvZW9sKCk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5 NUcKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfUFIsIChsb25nKSBlcnJvcnMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNl bmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2xkdHJ5 ID0gZXJyb3JzOworICAgICAgICAgICAgICAgIGlmIChzKSBpZiAoKnMpIHsKKyAgICAgICAgICAg ICAgICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAgICAgICAgICAgICBwcmludHcoIiVz IixzKTsKKyAgICAgICAgICAgICAgICAgICAgY2xydG9lb2woKTsKKyNpZmRlZiBLVUkKKyNpZm5k ZWYgSzk1RworICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRp ZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg ICAgY2FzZSAnRSc6ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0ICovCisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOyAgICAgICAgICAgIC8qIFBy aW50IGl0cyBkYXRhIGZpZWxkICovCisgICAgICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAg ICAgICBwcmludHcoIiVzIixzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwg KGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg ICAgICB9CisgICAgICAgICAgICBjbHJ0b2VvbCgpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAg ICAgICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7ICAgICAgICAgICAvKiBTbyBubyBieXRlcyBmb3Ig dGhpcyBmaWxlICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdRJzogICAg ICAgICAgICAgICAgICAgICAvKiBDcnVuY2hlZCBwYWNrZXQgKi8KKyAgICAgICAgICAgIGNwcyA9 IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAgICAvKiBvbGRfdHIg PSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisgICAgICAgICAgICBtb3Zl KENXX0VSUiwyMik7CisgICAgICAgICAgICBwcmludHcoIkRhbWFnZWQgUGFja2V0Iik7CisjaWZk ZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiRGFtYWdlZCBQYWNrZXQiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICBjYXNlICdxJzogICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUMgb3IgY29ubmVjdGlvbiBs b3N0ICovCisgICAgICAgICAgICBtb3ZlKENXX01TRywyMik7CisJICAgIGNscnRvZW9sKCk7Cisg ICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgICAgIHByaW50dygqcyA/IHMgOiAi VXNlciBpbnRlcnJ1cHRpb24gb3IgY29ubmVjdGlvbiBsb3N0Iik7CisjaWZkZWYgS1VJCisjaWZu ZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2Vu ZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgJ1QnOiAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVvdXQgKi8KKyAgICAg ICAgICAgIGNwcyA9IHNob2NwcygoaW50KSBwY3QsIGZzaXosIGhvd2Zhcik7CisgICAgICAgICAg ICAvKiBvbGRfdHIgPSBzaG9ldGwob2xkX3RyLCBjcHMsIGZzaXosIGhvd2Zhcik7ICovCisgICAg ICAgICAgICBtb3ZlKENXX0VSUiwyMik7CisgICAgICAgICAgICBwcmludHcoIlRpbWVvdXQgJWQg c2VjIixyY3Z0aW1vKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3Vp U2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJUaW1l b3V0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisj ZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOworICAgICAgICAgICAgZXJy b3JzID0gcmV0cmFucyArIGNydW5jaGVkICsgdGltZW91dHM7CisgICAgICAgICAgICBpZiAoZXJy b3JzICE9IG9sZHRyeSkgeyAgICAgLyogRXJyb3IgY291bnQsIGlmIGNoYW5nZWQgKi8KKyAgICAg ICAgICAgICAgICBtb3ZlKENXX1BSLCAyMik7CisgICAgICAgICAgICAgICAgcHJpbnR3KCIlZCIs ZXJyb3JzKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBDV19QUiwgKGxvbmcpIGVycm9ycworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAg ICAgICAgIGNscnRvZW9sKCk7CisgICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogICAgICAg ICAgICAgICAgICAgICAgLyogT3RoZXJzLCBkbyBub3RoaW5nICovCisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgICAgICByZWZyZXNoKCk7CisjaWZkZWYgT1MyCisgICAgICAgIFNh dmVDbWRNb2RlKDAsIDApOworI2VuZGlmIC8qIE9TMiAqLworICAgICAgICByZXR1cm47CisKKyAg ICAgIGNhc2UgU0NSX1NUOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIHRyYW5zZmVyIHN0 YXR1cyAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5jIFNDUl9TVCBjIiwiIixjKTsKKyAg ICAgICAgZGVidWcoRjEwMSwic2NyZWVuYyBTQ1JfU1Qgc3VjY2VzcyIsIiIsc3VjY2Vzcyk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmMgU0NSX1NUIGN4c2VlbiIsIiIsY3hzZWVuKTsKKyNp ZmRlZiBDT01NRU5UCisgICAgICAgIG1vdmUoQ1dfUENELDIyKTsgICAgICAgICAgICAgICAgLyog VXBkYXRlIHBlcmNlbnQgZG9uZSAqLworICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAg ICAgICAgIC8qIE9LLCBwcmludCAxMDAgJSAqLworICAgICAgICAgICAgaWYgKHBjdGxibCkKKyAg ICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwxMDApOworICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICBwcmludHcoIiVzIiwgY2tmc3RvYShmZmMpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25n KSBDV19GRkMsIChsb25nKSBmZmMpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkg Ki8KKyAgICAgICAgICAgIHBjdCA9IDEwMDsKKyAgICAgICAgICAgIG9sZHBjdCA9IDA7CisgICAg ICAgIH0gZWxzZSBpZiAoZnNpeiA+IDBMKSAgICAgICAgICAgLyogTm90IE9LLCB1cGRhdGUgZmlu YWwgcGVyY2VudCAqLworLyoKKyAgVGhlIGVsc2UgcGFydCB3cml0ZXMgYWxsIG92ZXIgdGhlIHNj cmVlbiAtLSBob3dmYXIgYW5kL29yIGZzaXogaGF2ZQorICBiZWVuIHJlc2V0IGFzIGEgY29uc2Vx dWVuY2Ugb2YgdGhlIG5vdC1PS25lc3Mgb2YgdGhlIHRyYW5zZmVyLgorKi8KKyAgICAgICAgICBp ZiAocGN0bGJsKQorICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgKGhvd2ZhciAqIDEwMEwpIC8g ZnNpeik7CisgICAgICAgIGNscnRvZW9sKCk7CisjZWxzZQorICAgICAgICBpZiAoYyA9PSBTVF9P SykgeyAgICAgICAgICAgICAgIC8qIE9LLCBwcmludCAxMDAgJSAqLworICAgICAgICAgICAgbW92 ZShDV19QQ0QsMjIpOyAgICAgICAgICAgIC8qIFVwZGF0ZSBwZXJjZW50IGRvbmUgKi8KKyAgICAg ICAgICAgIGlmIChwY3RsYmwpIHsKKwkJaWYgKG9sZHBjdCA9PSAwKQkvKiBTd2l0Y2hpbmcgZnJv bSAiYnl0ZXMgc28gZmFyIiAqLworCQkgIGNscnRvZW9sKCk7CQkvKiB0byAicGVyY2VudCBkb25l Ii4uLiAqLworCQl1cGRwY3Qob2xkcGN0LDEwMCk7CisJICAgIH0gZWxzZQorICAgICAgICAgICAg ICBwcmludHcoIiVzIiwgY2tmc3RvYShmZmMpKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1Rwor ICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19G RkMsIChsb25nKSBmZmMpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNp ZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSAxMDA7CisgICAgICAgICAgICBvbGRwY3Qg PSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBDT01NRU5UICovCisKKyNpZmRlZiBDT01NRU5UCisvKiBObywgbGVh dmUgaXQgdGhlcmUgc28gdGhleSBjYW4gcmVhZCBpdCAqLworICAgICAgICBtb3ZlKENXX01TRywy Mik7ICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBhbnkgcHJldmlvdXMgbWVzc2FnZSAqLworI2lm ZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9U UkFOU0ZFUiwgKGxvbmcpIENXX01TRywgKGxvbmcpICIiICk7CisjZW5kaWYgLyogSzk1RyAqLwor I2VuZGlmIC8qIEtVSSAqLworICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisjZW5kaWYg LyogQ09NTUVOVCAqLworCisgICAgICAgIG1vdmUoQ1dfVFIsIDIyKTsKKyNpZmRlZiBLVUkKKyNp Zm5kZWYgSzk1RworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChs b25nKSBDV19UUiwgKGxvbmcpICIiICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtV SSAqLworICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7CisKKyAgICAgICAgc3dpdGNoIChj KSB7ICAgICAgICAgICAgICAgICAgICAvKiBQcmludCBuZXcgc3RhdHVzIG1lc3NhZ2UgKi8KKyAg ICAgICAgICBjYXNlIFNUX09LOiAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBPSyAqLwor ICAgICAgICAgICAgZmNudCsrOyAgICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgZmls ZSAqLworCSAgICBpZiAod2hhdCA9PSAoV19GVFB8V19GVF9ERUxFKSkgeworCQltb3ZlKENXX01T RywyMik7CisJCWNscnRvZW9sKCk7CisJCXByaW50dygiRGVsZXRlIE9LIik7CisJICAgIH0gZWxz ZSB7CisJCWZieXQgKz0gZmZjOworCQltb3ZlKENXX01TRywyMik7CisJCWNscnRvZW9sKCk7CisJ CXByaW50dygiVHJhbnNmZXIgT0siKTsKKwkgICAgfQorI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVH CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgIlRyYW5zZmVyIE9LIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2Vv bCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNU X0RJU0M6ICAgICAgICAgICAgICAgICAvKiBEaXNjYXJkZWQgKi8KKyAgICAgICAgICAgIG1vdmUo Q1dfRVJSLDIyKTsKKyAgICAgICAgICAgIHByaW50dygiRmlsZSBkaXNjYXJkZWQiKTsKKyNpZmRl ZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVf VFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJGaWxlIGRpc2NhcmRlZCIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAq LworI2lmZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYg LyogQ09NTUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworICAgICAg ICAgICAgcmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9JTlQ6ICAgICAgICAgICAgICAgICAg LyogSW50ZXJydXB0ZWQgKi8KKyAgICAgICAgICAgIG1vdmUoQ1dfRVJSLDIyKTsKKyAgICAgICAg ICAgIHByaW50dygiVHJhbnNmZXIgaW50ZXJydXB0ZWQiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYg Szk1RworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpICJUcmFuc2ZlciBpbnRlcnJ1cHRlZCIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lmZGVm IENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAgcmV0 dXJuOworCisgICAgICAgICAgY2FzZSBTVF9TS0lQOiAgICAgICAgICAgICAgICAgLyogU2tpcHBl ZCAqLworICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOworCSAgICBpZiAobiA+IDAgJiYgbiA8 IG5za3JlYXNvbikKKwkgICAgICBwcmludHcoIkZpbGUgc2tpcHBlZCAoJXMpIixza3JlYXNvbltu XSk7CisJICAgIGVsc2UKKwkgICAgICBwcmludHcoIkZpbGUgc2tpcHBlZCIpOworI2lmZGVmIEtV SQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFO U0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19FUlIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgIkZpbGUgc2tpcHBlZCIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisjZW5kaWYgLyogSzk1RyAqLworI2VuZGlmIC8qIEtVSSAqLworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgICAgIHBjdCA9IG9sZHBjdCA9IDA7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgICAgICAgICAgY2xydG9lb2woKTsgcmVmcmVzaCgpOworICAgICAgICAgICAg cmV0dXJuOworCisgICAgICAgICAgY2FzZSBTVF9FUlI6ICAgICAgICAgICAgICAgICAgLyogRXJy b3IgbWVzc2FnZSAqLworICAgICAgICAgICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAgICAg aWYgKCFzKSBzID0gKGNoYXIgKillcGt0bXNnOworICAgICAgICAgICAgcHJpbnR3KCIlcyIscyk7 CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VSUiwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBL OTVHICovCisjZW5kaWYgLyogS1VJICovCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0 ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICBjbHJ0b2Vv bCgpOyByZWZyZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNU X1JFRlU6ICAgICAgICAgICAgICAgICAvKiBSZWZ1c2VkICovCisgICAgICAgICAgICBtb3ZlKENX X0VSUiwyMik7CisgICAgICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGVy cmJ1Zls2NF0gOworICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIlJlZnVzZWQsICVz IiwgcyApIDsKKyAgICAgICAgICAgICAgICBwcmludHcoIiVzIiwgZXJyYnVmKTsKKyNpZmRlZiBL VUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxF X1RSQU5TRkVSLChsb25nKSBDV19FUlIsKGxvbmcpIGVycmJ1Zik7CisjZW5kaWYgLyogSzk1RyAq LworI2VuZGlmIC8qIEtVSSAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICBwcmludHcoIlJlZnVzZWQiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAg ICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9u ZykiUmVmdXNlZCIpOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyAgICAg ICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsK KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfSU5DOgorICAgICAgICAg ICAgbW92ZShDV19FUlIsMjIpOworICAgICAgICAgICAgcHJpbnR3KCJJbmNvbXBsZXRlIik7Cisj aWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9G SUxFX1RSQU5TRkVSLChsb25nKUNXX0VSUiwobG9uZykiSW5jb21wbGV0ZSIpOworI2VuZGlmIC8q IEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDT01NRU5UCisgICAgICAgICAgICBw Y3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgICAgIGNscnRv ZW9sKCk7IHJlZnJlc2goKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2Ug U1RfTVNHOgorICAgICAgICAgICAgbW92ZShDV19NU0csMjIpOworICAgICAgICAgICAgcHJpbnR3 KCIlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAgICAgIEt1aVNldFBy b3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLChsb25nKUNXX01TRywobG9uZylzKTsKKyNlbmRpZiAv KiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0b2VvbCgpOyByZWZy ZXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBkZWZhdWx0OiAgICAgICAg ICAgICAgICAgICAgICAvKiBCYWQgY2FsbCAqLworICAgICAgICAgICAgbW92ZShDV19FUlIsMjIp OworICAgICAgICAgICAgcHJpbnR3KCIqKiogc2NyZWVuKCkgY2FsbGVkIHdpdGggYmFkIHN0YXR1 cyAqKioiKTsKKyNpZmRlZiBLVUkKKyNpZm5kZWYgSzk1RworICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAg ICAgICAgICAobG9uZykgIioqKiBzY3JlZW4oKSBjYWxsZWQgd2l0aCBiYWQgc3RhdHVzICoqKiIg KTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAgICBjbHJ0 b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICBjYXNlIFNDUl9U QzogeyAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gY29tcGxldGUgKi8KKyAgICAg ICAgICBjaGFyIG1zZ2J1ZlsxMjhdOworICAgICAgICAgIG1vdmUoQ1dfQ1AsMjIpOyAgICAgICAg ICAgICAgIC8qIE92ZXJhbGwgdHJhbnNmZXIgcmF0ZSAqLworI2lmZGVmIEtVSQorI2lmbmRlZiBL OTVHCisgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykg Q1dfQ1AsIHRmY3BzKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAg ICAgICAgcHJpbnR3KCIlcyIsIGNrZnN0b2EodGZjcHMpKTsKKyAgICAgICAgICBjbHJ0b2VvbCgp OworICAgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAgIG1vdmUoQ1dfTVNHLDIy KTsgICAgICAgICAgLyogUHJpbnQgc3RhdGlzdGljcyBpbiBtZXNzYWdlIGxpbmUgKi8KKyAgICAg ICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHN1Y2Nlc3Mp IHsKKyAgICAgICAgICAgICAgc3ByaW50Zihtc2didWYsCisgICAgICAgICAgICAgICAgICAgICAg IlNVQ0NFU1MuICBGaWxlczogJWxkLCBCeXRlczogJXMsICVsZCBDUFMiLAorICAgICAgICAgICAg ICAgICAgICAgIGZpbGNudCAtIGZpbHJlaiwKKyAgICAgICAgICAgICAgICAgICAgICBja2ZzdG9h KGZieXQpLAorICAgICAgICAgICAgICAgICAgICAgIHRmY3BzCisgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgICAgICAgcHJpbnR3KCIlcyIsIG1zZ2J1Zik7CisjaWZkZWYgS1VJCisj aWZuZGVmIEs5NUcKKyAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBtc2didWYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg ICAgICAgIGNscnRvZW9sKCk7CisKKyAgICAgICAgICB9CisgICAgICAgICAgbW92ZShDV19UUiwg MSk7CisgICAgICAgICAgcHJpbnR3KCIgICAgICAgRWxhcHNlZCBUaW1lOiAlcyIsaGhtbXNzKChs b25nKQorI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGZwdHNlY3MgKyAwLjUpCisjZWxzZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2VjcworI2VuZGlmIC8qIEdGVElNRVIg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkp OworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJ X0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX1RSLAor ICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBoaG1tc3MoKGxvbmcpCisjaWZkZWYgR0ZU SU1FUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZwdHNlY3MgKyAw LjUpCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3MK KyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgICAg Y2xydG9lb2woKTsKKyAgICAgICAgICBtb3ZlKDIzLDApOyBjbHJ0b2VvbCgpOyAgICAgICAvKiBD bGVhciBpbnN0cnVjdGlvbnMgbGluZXMgKi8KKyAgICAgICAgICBtb3ZlKDIyLDApOyBjbHJ0b2Vv bCgpOyAgICAgICAvKiB0byBtYWtlIHJvb20gZm9yIHByb21wdC4gKi8KKyAgICAgICAgICByZWZy ZXNoKCk7CisKKyNpZmRlZiBHRlRJTUVSCisgICAgICAgICAgb2xkZ3R2ID0gKENLRkxPQVQpIC0x LjA7CisjZWxzZQorICAgICAgICAgIG9sZGd0diA9IC0xTDsKKyNlbmRpZiAvKiBHRlRJTUVSICov CisKKyNpZm5kZWYgVk1TQ1VSU0UKKwkgIGRlYnVnKEYxMDAsInNjcmVlbmMgZW5kd2luIEEiLCIi LDApOworICAgICAgICAgIGVuZHdpbigpOworI2lmZGVmIENPTU1FTlQKKy8qCisgIFdoeSBhbmQg d2hlbiB3YXMgdGhpcyBjYWxsIHRvIGNvbnJlcygpIGFkZGVkPyAgSXQgbWFrZXMgbm8gc2Vuc2Us CisgIGFuZCBpdCBicmVha3MgZWNob2luZyBvbiBTb2xhcmlzIDguCisqLworI2lmZGVmIFNPTEFS SVMKKyAgICAgICAgICBjb25yZXMoKTsKKyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworI2VuZGlmIC8qIFZNU0NVUlNFICovCisKKyNpZmRlZiBDT01NRU5UCisgICAg ICAgICAgcGN0ID0gMTAwOyBvbGRwY3QgPSAwOyAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5l eHQgdGltZS4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgb2xkdHlwID0gMDsg b2xkcnR0ID0gLTFMOyBvbGR0cnkgPSAtMTsgb2xkbGVuID0gLTE7CisgICAgICAgICAgb2xkdGlt ID0gLTE7CisgICAgICAgICAgY2VuZHcgPSAxOworICAgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVw KEJQX05PVEUpOyAgIC8qIENsb3NlIHdpbmRvdywgdGhlbiBiZWVwLiAqLworI2lmZGVmIFVOSVgK KyAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyNlbmRpZiAvKiBVTklYICovCisgICAgICAgICAg ZnRfd2luID0gMDsgICAgICAgICAgICAgICAgICAgLyogV2luZG93IGNsb3NlZC4gKi8KKyAgICAg ICAgICByZXR1cm47CisgICAgICB9CisgICAgICBjYXNlIFNDUl9FTTogICAgICAgICAgICAgICAg ICAgICAgLyogRXJyb3IgcGFja2V0IChmYXRhbCkgKi8KKyAgICAgICAgbW92ZSAoQ1dfRVJSLDIy KTsKKyAgICAgICAgcHJpbnR3KCJGQUlMVVJFOiAlcyIscyk7CisjaWZkZWYgS1VJCisjaWZuZGVm IEs5NUcKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykg Q1dfRVJSLCAobG9uZykgcyApOworI2VuZGlmIC8qIEs5NUcgKi8KKyNlbmRpZiAvKiBLVUkgKi8K KyAgICAgICAgaWYgKHhmcmJlbCkgYmxlZXAoQlBfRkFJTCk7CisjaWZkZWYgQ09NTUVOVAorICAg ICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgY2xy dG9lb2woKTsgcmVmcmVzaCgpOyByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX1FFOiAgICAgICAg ICAgICAgICAgICAgICAvKiBRdWFudGl0eSBlcXVhbHMgKi8KKyAgICAgIGNhc2UgU0NSX1RVOiAg ICAgICAgICAgICAgICAgICAgICAvKiBVbmRlbGltaXRlZCB0ZXh0ICovCisgICAgICBjYXNlIFND Ul9UTjogICAgICAgICAgICAgICAgICAgICAgLyogVGV4dCBkZWxpbWl0ZWQgYXQgc3RhcnQgKi8K KyAgICAgIGNhc2UgU0NSX1RaOiAgICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRl ZCBhdCBlbmQgKi8KKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAo aWdub3JlZCBpbiBmdWxsc2NyZWVuIGRpc3BsYXkpICovCisKKyAgICAgIGNhc2UgU0NSX01TOgkJ CS8qIE1lc3NhZ2UgZnJvbSBLZXJtaXQgcGFydG5lciAqLworICAgICAgICBtb3ZlKENXX01TRywy Mik7CisJcHJpbnR3KCIlcyIscyk7CisgICAgICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0 dXJuOworCisgICAgICBjYXNlIFNDUl9YRDogICAgICAgICAgICAgICAgICAgICAgLyogWC1wYWNr ZXQgZGF0YSAqLworICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworICAgICAgICBtb3ZlKENXX05B TSwyMik7CisgICAgICAgIHByaW50dygiJXMiLHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVH CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05B TSwgKGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAg ICAgIGNscnRvZW9sKCk7IHJlZnJlc2goKTsgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9DVzog ICAgICAgICAgICAgICAgICAgICAgLyogQ2xvc2UgV2luZG93ICovCisgICAgICAgIGNscnRvZW9s KCk7IG1vdmUoMjMsMCk7IGNscnRvZW9sKCk7IG1vdmUoMjIsMCk7IGNscnRvZW9sKCk7CisgICAg ICAgIHJlZnJlc2goKTsKKyNpZmRlZiBDT01NRU5UCisgICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0 ID0gMDsgICAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9yIG5leHQgdGltZS4gKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisgICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0g LTE7IG9sZGxlbiA9IC0xOworICAgICAgICBvbGR0aW0gPSAtMTsKKworI2lmbmRlZiBWTVNDVVJT RQorCWRlYnVnKEYxMDAsInNjcmVlbmMgZW5kd2luIEIiLCIiLDApOworICAgICAgICBlbmR3aW4o KTsKKyNlbmRpZiAvKiBWTVNDVVJTRSAqLworICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAg ICAgICAgICAgIC8qIEZsYWcgdGhhdCB3aW5kb3cgaXMgY2xvc2VkLiAqLworICAgICAgICBjZW5k dyA9IDE7IHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfQ0Q6ICAgICAgICAgICAgICAgICAgICAg IC8qIERpc3BsYXkgY3VycmVudCBkaXJlY3RvcnkgKi8KKyAgICAgICAgbW92ZShDV19ESVIsMjIp OworICAgICAgICAgcHJpbnR3KCIlcyIsIHMpOworI2lmZGVmIEtVSQorI2lmbmRlZiBLOTVHCisg ICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0RJUiwg KGxvbmcpIHMgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAg IGNscnRvZW9sKCk7CisgICAgICAgIHJlZnJlc2goKTsKKyNpZmRlZiBPUzIKKyAgICAgICAgU2F2 ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisgICAgICAgIHJldHVybjsKKworICAg ICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCisgICAg ICAgIG1vdmUgKENXX0VSUiwyMik7CisjaWZkZWYgS1VJCisjaWZuZGVmIEs5NUcKKyAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNjcmVl bigpIGNhbGxlZCB3aXRoIGJhZCBmdW5jdGlvbiBjb2RlICoqKiIKKyAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyNlbmRpZiAvKiBLOTVHICovCisjZW5kaWYgLyogS1VJICovCisgICAgICAgIHBy aW50dygiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJhZCBmdW5jdGlvbiBjb2RlICoqKiIpOwor ICAgICAgICBjbHJ0b2VvbCgpOyByZWZyZXNoKCk7IHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYg LyogQ0tfQ1VSU0VTICovCisKKyNpZmRlZiBLVUkKKyNpZmRlZiBDS19BTlNJQwordm9pZAorc2Ny ZWVuZyhpbnQgZiwgY2hhciBjLGxvbmcgbixjaGFyICpzKQorI2Vsc2UKK0NLVk9JRAorc2NyZWVu ZyhmLGMsbixzKQoraW50IGY7ICAgICAgICAgIC8qIGFyZ3VtZW50IGRlc2NyaXB0b3IgKi8KK2No YXIgYzsgICAgICAgICAvKiBhIGNoYXJhY3RlciBvciBzbWFsbCBpbnRlZ2VyICovCitsb25nIG47 ICAgICAgICAgLyogYSBsb25nIGludGVnZXIgKi8KK2NoYXIgKnM7ICAgICAgICAvKiBhIHN0cmlu ZyAqLworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBzY3JlZW5nKCkgKi8geworI2lmZGVmIENL X1NTTAorICAgIGV4dGVybiBpbnQgdGxzX2FjdGl2ZV9mbGFnLCBzc2xfYWN0aXZlX2ZsYWc7Cisj ZW5kaWYgLyogQ0tfU1NMICovCisjaWZkZWYgUkxPR0NPREUKKyAgICBleHRlcm4gaW50IHR0bnBy b3RvOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisgICAgc3RhdGljIGludCBxID0gMDsKKyAgICBz dGF0aWMgQ0tfT0ZGX1QgZnNpeiA9IChDS19PRkZfVCktMTsgLyogQ29weSBvZiBmaWxlIHNpemUg Ki8KKyAgICBzdGF0aWMgbG9uZyBmY250ID0gMEw7ICAgIC8qIE51bWJlciBvZiBmaWxlcyB0cmFu c2ZlcnJlZCAqLworICAgIHN0YXRpYyBsb25nIGZieXQgPSAwTDsgICAgLyogVG90YWwgZmlsZSBi eXRlcyBvZiBhbGwgZmlsZXMgdHJhbnNmZXJyZWQgKi8KKyAgICBzdGF0aWMgQ0tfT0ZGX1QgaG93 ZmFyID0gKENLX09GRl9UKTA7IC8qIEhvdyBtdWNoIG9mIGZpbGUgeGZlcidkIHNvIGZhciAqLwor ICAgIHN0YXRpYyBpbnQgIHBjdGxibCA9IDBMOyAgLyogUGVyY2VudCBkb25lIHZzIEJ5dGVzIHNv IGZhciAqLworICAgIGxvbmcgY3BzID0gMEw7CisKKyAgICBpbnQgbmV0ID0gMDsKKyAgICBpbnQg eG5ldCA9IDA7CisgICAgaW50IGZ0cCA9IDA7CisgICAgaW50IGxlbjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHN0cmluZyAqLworICAgIGludCBlcnJvcnMgPSAwOyAg ICAgICAgICAgICAgICAgICAgIC8qIEVycm9yIGNvdW50ZXIgKi8KKyAgICBpbnQgeDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JrZXIgKi8KKworICAgIGRlYnVnKEYxMDEsInNj cmVlbmcgY2luaXQiLCIiLGNpbml0KTsKKyAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIGNlbmR3Iiwi IixjZW5kdyk7CisKKyAgICBpZiAoIXMpIHMgPSAiIjsgICAgICAgICAgICAgICAgICAgICAvKiBB bHdheXMgZG8gdGhpcy4gKi8KKworICAgIGZ0cCA9ICh3aGF0ICYgV19GVFApID8gMSA6IDA7CS8q IEZUUCBvciBLZXJtaXQgKi8KKyAgICBuZXQgPSBuZXR3b3JrIHx8IGZ0cDsKKyAgICB4bmV0ID0g ZnRwID8gMSA6IG5ldHR5cGU7CQkvKiBORVRfVENQQiA9PSAxICovCisKKyAgICBpZiAoY2luaXQg PT0gMCB8fCBjZW5kdyA+IDApIHsgICAgICAvKiBIYW5kbGUgYm9yZGVybGluZSBjYXNlcy4uLiAq LworICAgICAgICBpZiAoZiA9PSBTQ1JfQ1cpIHsgICAgICAgICAgICAgIC8qIENsb3NlIHdpbmRv dywgYnV0IGl0J3Mgbm90IG9wZW4gKi8KKyAgICAgICAgICAgIGZ0X3dpbiA9IDA7CisgICAgICAg ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMSwic2NyZWVuZyBBIixz LGYpOworICAgICAgICBpZiAoZiA9PSBTQ1JfRU0gfHwKKyAgICAgICAgICAgKGYgPT0gU0NSX1BU ICYmIGMgPT0gJ0UnKSkgeyAvKiBGYXRhbCBlcnJvciBiZWZvcmUgd2luZG93IG9wZW4gKi8KKyAg ICAgICAgICAgIGNvbm9sbCgiIik7IGNvbm9jKCc/Jyk7IGNvbm9sbChzKTsgcmV0dXJuOyAvKiBS ZWd1bGFyIGRpc3BsYXkgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY2luaXQgPT0gMCkg eyAgICAgICAgICAgICAgICAgICAvKiBPbmx5IGNhbGwgaW5pdHNjcigpIG9uY2UgKi8KKwkvKiBD aGVjayB0aGVzZSBub3cgLS0gaWYgdGhleSBhcmUgZGVmaW5lZCBidXQgbm90IG51bWVyaWMgKi8K KwkvKiB0aGV5IGNhbiBjcmFzaCBjdXJzZXMgKi8KKyAgICAgICAgY2VuZHcgPSAxOyAgICAgICAg ICAgICAgICAgICAgICAvKiBOZXcgd2luZG93IG5lZWRzIHJlcGFpbnRpbmcgKi8KKyAgICAgICAg ZGVidWcoRjEwMCwic2NyZWVuZyBjYWxsaW5nIGluaXRzY3IiLCIiLDApOworICAgICAgICBpbml0 c2NyKCk7ICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgY3Vyc2VzLiAqLworICAg ICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5nIGluaXRzY3Igb2siLCIiLDApOworICAgICAgICBjaW5p dCsrOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIGN1cnNlcyB3YXMgaW5pdGlh bGl6ZWQuICovCisgICAgfQorICAgIGZ0X3dpbiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAg IC8qIFdpbmRvdyBpcyBvcGVuICovCisgICAgaWYgKHJlcGFpbnQpIHsKKyNpZmRlZiBDS19XUkVG UkVTSAorLyoKKyAgVGhpcyB0b3RhbGx5IHJlcGFpbnRzIHRoZSBzY3JlZW4sIGp1c3Qgd2hhdCB3 ZSB3YW50LCBidXQgd2UgY2FuIG9ubHkKKyAgZG8gdGhpcyB3aXRoIHJlYWwgY3Vyc2VzLCBhbmQg dGhlbiBvbmx5IGlmIGNsZWFyb2soKSBhbmQgd3JlZnJlc2goKSBhcmUKKyAgcHJvdmlkZWQgaW4g dGhlIGN1cnNlcyBsaWJyYXJ5LgorKi8KKyAgICAgICAgUmVzdG9yZUNtZE1vZGUoKTsKKyNlbHNl ICAvKiBObyBDS19XUkVGUkVTSCAqLworLyoKKyAgS2VybWl0J3MgZG8taXQteW91cnNlbGYgbWV0 aG9kLCB3b3JrcyB3aXRoIGFsbCB0eXBlcyBvZiBmdWxsc2NyZWVuCisgIHN1cHBvcnQsIGJ1dCBk b2VzIG5vdCByZXBhaW50IGFsbCB0aGUgZmllbGRzLiAgRm9yIGV4YW1wbGUsIHRoZSBmaWxlbmFt ZQorICBpcyBsb3N0LCBiZWNhdXNlIGl0IGFycml2ZXMgYXQgYSBjZXJ0YWluIHRpbWUgYW5kIG5l dmVyIGNvbWVzIGFnYWluLCBhbmQKKyAgS2VybWl0IHByZXNlbnRseSBkb2VzIG5vdCBzYXZlIGl0 IGFueXdoZXJlLiAgTWFraW5nIHRoaXMgbWV0aG9kIHdvcmsgZm9yCisgIGFsbCBmaWVsZHMgd291 bGQgYmUgYSByYXRoZXIgbWFqb3IgcmVjb2RpbmcgdGFzaywgZHVwbGljYXRpbmcgd2hhdCBjdXJz ZXMKKyAgYWxyZWFkeSBkb2VzLCBhbmQgd291bGQgYWRkIGEgbG90IG9mIGNvbXBsZXhpdHkgYW5k IHN0b3JhZ2Ugc3BhY2UuCisqLworICAgICAgICBjZW5kdyA9IDE7CisjZW5kaWYgLyogQ0tfV1JF RlJFU0ggKi8KKyAgICAgICAgcmVwYWludCA9IDA7CisgICAgfQorICAgIGlmIChjZW5kdykgeyAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdpbigpIHdhcyBjYWxsZWQgcHJldmlvdXNseSAq LworICAgICAgICBkZWJ1ZyhGMTAwLCJzY3JlZW5nIHNldHVwIG9rIiwiIiwwKTsKKyAgICAgICAg S3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRElSLCAobG9uZykg emd0ZGlyKCkgKTsKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfTElOLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICgKKyNpZmRlZiBO RVdGVFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRwID8gKGZ0cF9ob3N0ID8g ZnRwX2hvc3QgOiAiKHVua25vd24pIikgOgorI2VuZGlmIC8qIE5FV0ZUUCAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0dG5hbWUpICk7CisKKyAgICAgICAgaWYgKG5ldCkgewor I2lmZGVmIE5FVENPTk4KKwkgICAgaW50IHNlY3VyZSA9IDA7CisJICAgIGNoYXIgKiB4bmFtZTsK KwkgICAgaWYgKHhuZXQgPiBubmV0bmFtZSkKKwkgICAgICB4bmFtZSA9ICJbRVJST1JdIjsKKwkg ICAgZWxzZQorCSAgICAgIHhuYW1lID0gbmV0bmFtZVt4bmV0XTsKKyNpZmRlZiBORVdGVFAKKyAg ICAgICAgICAgIGlmIChmdHApIHsKKwkJaWYgKGZ0cGlzc2VjdXJlKCkpCisJCSAgc2VjdXJlID0g MTsKKwkgICAgfSBlbHNlCisjZW5kaWYgLyogTkVXRlRQICovCisJICAgICAgaWYgKDAKKyNpZmRl ZiBTU0hCVUlMVElOCisgICAgICAgICAgICAgICAgfHwgSVNfU1NIKCkKKyNlbmRpZiAvKiBTU0hC VUlMVElOICovCisjaWZkZWYgQ0tfRU5DUllQVElPTgorICAgICAgICAgICAgICAgIHx8IGNrX3Ru X2VuY3J5cHRpbmcoKSAmJiBja190bl9kZWNyeXB0aW5nKCkKKyNlbmRpZiAvKiBDS19FTkNSWVBU SU9OICovCisjaWZkZWYgQ0tfU1NMCisgICAgICAgICAgICAgICAgfHwgdGxzX2FjdGl2ZV9mbGFn IHx8IHNzbF9hY3RpdmVfZmxhZworI2VuZGlmIC8qIENLX1NTTCAqLworI2lmZGVmIFJMT0dDT0RF CisjaWZkZWYgQ0tfS0VSQkVST1MKKyNpZmRlZiBDS19FTkNSWVBUSU9OCisgICAgICAgICAgICAg ICAgfHwgdHRucHJvdG8gPT0gTlBfRUs0TE9HSU4gfHwgdHRucHJvdG8gPT0gTlBfRUs1TE9HSU4K KyNlbmRpZiAvKiBDS19FTkNSWVBUSU9OICovCisjZW5kaWYgLyogQ0tfS0VSQkVST1MgKi8KKyNl bmRpZiAvKiBSTE9HQ09ERSAqLworICAgICAgICAgICAgICAgICApIHsKKwkJc2VjdXJlID0gMTsK KwkgICAgfQorCSAgICBpZiAoc2VjdXJlKSB7CisgICAgICAgICAgICAgICAgY2hhciBidWZbMzBd OworICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCIlcyAoU0VDVVJFKSIseG5hbWUpOworICAg ICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxvbmcpIGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBD V19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIHhuYW1lCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAg ICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIChsb25nKSBDV19TUEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAo bG9uZykgIihuZXR3b3JrKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjZW5kaWYg LyogTkVUQ09OTiAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNwZWVkIDwg MEwpCisgICAgICAgICAgICAgIHNwZWVkID0gdHRnc3BkKCk7CisgICAgICAgICAgICBpZiAoc3Bl ZWQgPiAwTCkgeworICAgICAgICAgICAgICAgIGlmIChzcGVlZCA9PSA4ODgwKSB7CisgICAgICAg ICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAobG9uZykgIjc1LzEyMDAiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgY2hhciBzcGVlZGJ1Zls2NF0gOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRm KHNwZWVkYnVmLCAiJWxkIiwgc3BlZWQpOworICAgICAgICAgICAgICAgICAgICBLdWlTZXRQcm9w ZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxvbmcpIENXX1NQRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIHNwZWVkYnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBLdWlT ZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfU1BELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25n KSAiKHVua25vd24pIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNG RVIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QQVIsCisgICAgICAgICAgICAg ICAgICAgICAgIChsb25nKSBwYXJuYW0oKGNoYXIpcGFyaXR5KQorICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICBwY3RsYmwgPSAod2hhdCAmIFdfU0VORCk7CisgICAgICAgIGNlbmR3 ID0gMDsKKyAgICB9CisgICAgZGVidWcoRjEwMSwiU0NSRUVOQyBzd2l0Y2giLCIiLGYpOworICAg IGRlYnVnKEYwMDAsIlNDUkVFTkMgYyIsIiIsYyk7CisgICAgZGVidWcoRjEwMSwiU0NSRUVOQyBu IiwiIixuKTsKKworICAgIGxlbiA9IHN0cmxlbihzKTsgICAgICAgICAgICAgICAgICAgIC8qIExl bmd0aCBvZiBhcmd1bWVudCBzdHJpbmcgKi8KKyAgICBzd2l0Y2ggKGYpIHsgICAgICAgICAgICAg ICAgICAgICAgICAvKiBIYW5kbGUgb3VyIGZ1bmN0aW9uIGNvZGUgKi8KKyAgICAgIGNhc2UgU0NS X0ZOOiAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlbmFtZSAqLworICAgICAgICBvbGRwY3Qg PSBwY3QgPSAwTDsgICAgICAgICAgICAgIC8qIFJlc2V0IHBlcmNlbnRzICovCisjaWZkZWYgR0ZU SU1FUgorICAgICAgICBndHYgPSAoQ0tGTE9BVCkgLTEuMDsKKyAgICAgICAgLyogb2xkZ3R2ID0g KENLRkxPQVQpIC0xLjA7ICovCisjZWxzZQorICAgICAgICBndHYgPSAtMUw7CisgICAgICAgIC8q IG9sZGd0diA9IC0xTDsgKi8KKyNlbmRpZiAvKiBHRlRJTUVSICovCisgICAgICAgIG9sZHdpbiA9 IC0xOworICAgICAgICBmc2l6ID0gKENLX09GRl9UKS0xTDsJCS8qIEludmFsaWRhdGUgcHJldmlv dXMgZmlsZSBzaXplICovCisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZF UiwgKGxvbmcpIENXX1BDRCwgKGxvbmcpIDAgKTsKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtV SV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgMCApOworICAgICAgICBLdWlT ZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19TSVosIChsb25nKSAwICk7 CisgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0VS UiwgKGxvbmcpICIiICk7CisKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5T RkVSLCAobG9uZykgQ1dfTkFNLCAobG9uZykgcyApOworICAgICAgICBxID0gbGVuOyAgICAgICAg ICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIG5hbWUgbGVuZ3RoIGZvciBsYXRlciAqLworICAg ICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgZmlsZSB0eXBl IChjYW4gY2hhbmdlKSAqLworI2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsK KyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9BTjog ICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBhcy1uYW1lICovCisgICAgICAgIEt1aVNldFBy b3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX05BTSwgKGxvbmcpIHMgKTsKKyNp ZmRlZiBPUzIKKyAgICAgICAgU2F2ZUNtZE1vZGUoMCwgMCk7CisjZW5kaWYgLyogT1MyICovCisg ICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfRlM6ICAgICAgICAgICAgICAgICAgICAg IC8qIEZpbGUgc2l6ZSAqLworICAgICAgICBmc2l6ID0gbjsKKyAgICAgICAgaWYgKGZzaXogPiAo Q0tfT0ZGX1QpLTEpIHsKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBLVUlfRklMRV9UUkFO U0ZFUiwgKGxvbmcpIENXX1NJWiwgKGxvbmcpIG4gKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo ZnNpeiA+IChDS19PRkZfVCktMSkgewkvKiBQdXQgdXAgcGVyY2VudCBsYWJlbCAqLworICAgICAg ICAgICAgcGN0bGJsID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBjdGxibCA9 IDA7CisJfQorICAgICAgICBzY3JmdCgpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbGUg dHlwZSAqLworI2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAv KiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBjYXNlIFNDUl9QVDogICAgICAgICAg ICAgICAgICAgICAgLyogUGFja2V0IHR5cGUgb3IgcHNldWRvdHlwZSAqLworICAgICAgICBpZiAo c3BhY2tldHMgPCA1KSB7CisgICAgICAgICAgICBleHRlcm4gaW50IHN5c2luZGV4OworICAgICAg ICAgICAgZXh0ZXJuIHN0cnVjdCBzeXNkYXRhIHN5c2lkbGlzdFtdOworICAgICAgICAgICAgLyog VGhpbmdzIHRoYXQgd29uJ3QgY2hhbmdlIGFmdGVyIHRoZSA0dGggcGFja2V0ICovCisgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAobG9uZykgQ1dfUEFSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxv bmcpIHBhcm5hbSgoY2hhcilwYXJpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgaWYgKAorI2lmZGVmIE5FV0ZUUAorCQkoZnRwICYmIChzcGFja2V0cyA9PSAx IHx8IHJwYWNrZXRzID09IDEpKSB8fAorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQlzcGFja2V0cyA9 PSA0CisJCSkgeworICAgICAgICAgICAgICAgIGlmICgKKyNpZmRlZiBORVdGVFAKKwkJICAgIGZ0 cCB8fAorI2VuZGlmIC8qIE5FV0ZUUCAqLworCQkgICAgKChwcm90b2NvbCA9PSBQUk9UT19LKSAm JiAoc3lzaW5kZXggPiAtMSkpCisJCSAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBt c2didWZbMTI4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ldCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgc3ByaW50Zihtc2didWYsIk5ldHdvcmsgSG9zdDogJXMgKCVzKSIsCisjaWZk ZWYgTkVXRlRQCisJCQkgICAgICAgZnRwID8gKGZ0cF9ob3N0ID8gZnRwX2hvc3QgOiAiIikgOgor I2VuZGlmIC8qIE5FV0ZUUCAqLworCQkJICAgICAgIHR0bmFtZSwKKyNpZmRlZiBORVdGVFAKKwkJ CSAgICAgICBmdHAgPyBmdHBfc3J2dHlwIDoKKyNlbmRpZiAvKiBORVdGVFAgKi8KKwkJCSAgICAg ICBzeXNpZGxpc3Rbc3lzaW5kZXhdLnNpZF9uYW1lCisJCQkgICAgICAgKTsKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYobXNnYnVm LAorCQkJCSJDb21tdW5pY2F0aW9uIERldmljZTogJXMgKHJlbW90ZSBob3N0IGlzICVzKSIsCisJ CQkJdHRuYW1lLAorCQkJCXN5c2lkbGlzdFtzeXNpbmRleF0uc2lkX25hbWUKKwkJCQkpOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KCBL VUlfRklMRV9UUkFOU0ZFUiwKKwkJCQkgICAgKGxvbmcpIENXX0xJTiwKKwkJCQkgICAgKGxvbmcp IG1zZ2J1ZgorCQkJCSAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorI2lmZGVmIENLX1RJTUVSUworICAgICAgICBpZiAoLyogcnR0ZmxnICYmICovIHBy b3RvY29sID09IFBST1RPX0spIHsKKyAgICAgICAgICAgIGxvbmcgeHg7CisgICAgICAgICAgICBp ZiAoCisjaWZkZWYgU1RSRUFNSU5HCisgICAgICAgICAgICAgICAgc3RyZWFtaW5nICYmIG9sZHdp biAhPSAtMgorI2Vsc2UKKyAgICAgICAgICAgICAgICAwCisjZW5kaWYgLyogU1RSRUFNSU5HICov CisgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgY2hhciBtc2didWZbNjRdOwor ICAgICAgICAgICAgICAgIHNwcmludGYobXNnYnVmLCIwMCAvIDAwIik7CisgICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLAorCQkJCShsb25nKSBDV19UTU8s CisJCQkJKGxvbmcpIG1zZ2J1ZgorCQkJCSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIHh4ID0gKHJ0dGRlbGF5ICsgNTAwKSAvIDEwMDA7CisgICAgICAgICAgICAgICAg aWYgKHh4ICE9IG9sZHJ0dCB8fCByY3Z0aW1vICE9IG9sZHRpbSkgeworICAgICAgICAgICAgICAg ICAgICBjaGFyIG1zZ2J1Zls2NF07CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYobXNnYnVm LCIlMDJsZCAvICUwMmQiLCB4eCwgcmN2dGltbyk7CisgICAgICAgICAgICAgICAgICAgIEt1aVNl dFByb3BlcnR5KCBLVUlfRklMRV9UUkFOU0ZFUiwKKwkJCQkgICAgKGxvbmcpIENXX1RNTywKKwkJ CQkgICAgKGxvbmcpIG1zZ2J1ZgorCQkJCSAgICApOworICAgICAgICAgICAgICAgICAgICBvbGRy dHQgPSB4eDsKKyAgICAgICAgICAgICAgICAgICAgb2xkdGltID0gcmN2dGltbzsKKyAgICAgICAg ICAgICAgICAgICAgY2xydG9lb2woKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyNlbmRpZiAvKiBDS19USU1FUlMgKi8KKworICAgICAgICB4ID0gKHdoYXQg JiBXX1JFQ1YpID8gICAgICAgICAgLyogUGFja2V0IGxlbmd0aCAqLworICAgICAgICAgIHJwa3Rs Kyhwcm90b2NvbD09UFJPVE9fSz8xOjApIDoKKyAgICAgICAgICAgIHNwa3RsOworICAgICAgICBp ZiAoeCAhPSBvbGRsZW4pIHsgICAgICAgICAgICAgIC8qIEJ1dCBvbmx5IGlmIGl0IGNoYW5nZWQu ICovCisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25n KSBDV19QTCwgKGxvbmcpIHggKTsKKyAgICAgICAgICAgIG9sZGxlbiA9IHg7CisgICAgICAgIH0K KyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUEMs IChsb25nKSBzcGFja2V0cyApOworCisgICAgICAgIGlmIChwcm90b2NvbCA9PSBQUk9UT19LICYm ICFmdHApIHsgLyogV2luZG93IHNsb3RzICovCisgICAgICAgICAgICBjaGFyIHdzWzE2XTsKKyAg ICAgICAgICAgIGludCBmbGFnOworICAgICAgICAgICAgZmxhZyA9IDA7CisjaWZkZWYgU1RSRUFN SU5HCisgICAgICAgICAgICBpZiAoc3RyZWFtaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKG9s ZHdpbiAhPSAtMikgeworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHdzLCJTVFJFQU1JTkci KTsKKyAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIG9s ZHdpbiA9IC0yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlm IC8qIFNUUkVBTUlORyAqLworICAgICAgICAgICAgICBpZiAod2N1ciAhPSBvbGR3aW4pIHsKKyAg ICAgICAgICAgICAgICAgIHNwcmludGYod3MsICIlZCBvZiAlZCIsIHdjdXIgPCAxID8gMSA6IHdj dXIsIHdzbG90bik7CisgICAgICAgICAgICAgICAgICBmbGFnID0gMTsKKyAgICAgICAgICAgICAg ICAgIG9sZHdpbiA9IHdjdXI7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGFn KSB7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAo bG9uZykgQ1dfV1MsIChsb25nKSB3cyApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGVycm9ycyA9IHJldHJhbnMgKyBjcnVuY2hlZCArIHRpbWVvdXRzOworICAgICAgICBpZiAo ZXJyb3JzICE9IG9sZHRyeSkgeyAgICAgICAgIC8qIFJldHJ5IGNvdW50LCBpZiBjaGFuZ2VkICov CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBD V19QUiwgKGxvbmcpIGVycm9ycyApOworICAgICAgICAgICAgb2xkdHJ5ID0gZXJyb3JzOworICAg ICAgICB9CisJLyogU2VuZGVyJ3MgcGFja2V0IHR5cGUgKi8KKyAgICAgICAgaWYgKCFmdHAgJiYg KGMgIT0gb2xkdHlwICYmIGMgIT0gJ1knICYmIGMgIT0gJ04nKSkgeworICAgICAgICAgICAgY2hh ciB0eXBlWzJdOworICAgICAgICAgICAgc3ByaW50Zih0eXBlLCAiJWMiLGMpOworICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfUFQsIChsb25n KSB0eXBlICk7CisgICAgICAgICAgICBvbGR0eXAgPSBjOworICAgICAgICB9CisgICAgICAgIHN3 aXRjaCAoYykgeyAgICAgICAgICAgICAgICAgICAgLyogTm93IGhhbmRsZSBzcGVjaWZpYyBwYWNr ZXQgdHlwZXMgKi8KKyAgICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAgICAgICAvKiBC ZWdpbm5pbmcgb2YgdHJhbnNmZXIgKi8KKyAgICAgICAgICAgIGZjbnQgPSBmYnl0ID0gMEw7ICAg ICAgICAgICAvKiBDbGVhciBjb3VudGVycyAqLworI2lmZGVmIEdGVElNRVIKKyAgICAgICAgICAg IGd0diA9IC0xLjA7CisjZWxzZSAvKiBHRlRJTUVSICovCisgICAgICAgICAgICBndHYgPSAtMUw7 ICAgICAgICAgICAgICAgICAgLyogQW5kIG9sZC9uZXcgdGhpbmdzLi4uICovCisjZW5kaWYgLyog R0ZUSU1FUiAqLworICAgICAgICAgICAgb2xkcGN0ID0gcGN0ID0gMEw7CisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICAgIGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgIC8qIG9yIEVP RiAqLworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBwa3RudW0iLCIi LG4pOworICAgICAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfUFQgWiBvbGRwY3QiLCIi LG9sZHBjdCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9QVCBaIHBjdCIs IiIscGN0KTsKKyAgICAgICAgICBjYXNlICdEJzogICAgICAgICAgICAgICAgICAgICAvKiBEYXRh IHBhY2tldCAqLworICAgICAgICAgICAgaWYgKGZzaXogPiAwTCkgeyAgICAgICAgICAgIC8qIFNo b3cgcGVyY2VudCBkb25lIGlmIGtub3duICovCisgICAgICAgICAgICAgICAgb2xkcGN0ID0gcGN0 OyAgICAgICAgICAgLyogUmVtZW1iZXIgcHJldmlvdXMgcGVyY2VudCAqLworICAgICAgICAgICAg ICAgIGhvd2ZhciA9IGZmYzsKKyNpZmRlZiBDS19SRVNFTkQKKyAgICAgICAgICAgICAgICBpZiAo d2hhdCAmIFdfU0VORCkJLyogQWNjb3VudCBmb3IgUFNFTkQgb3IgUkVTRU5EICovCisgICAgICAg ICAgICAgICAgICBob3dmYXIgKz0gc2VuZHN0YXJ0OworICAgICAgICAgICAgICAgIGVsc2UgaWYg KHdoYXQgJiBXX1JFQ1YpCisgICAgICAgICAgICAgICAgICBob3dmYXIgKz0gcnNfbGVuOworI2Vu ZGlmIC8qIENLX1JFU0VORCAqLworICAgICAgICAgICAgICAgIC8qIFBlcmNlbnQgZG9uZSwgdG8g YmUgZGlzcGxheWVkLi4uICovCisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1onKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmICghZGlzY2FyZCAmJiAhY3hzZWVuICYmICFjenNlZW4pIHBjdCA9 IDEwMEw7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICBwY3QgPSAo ZnNpeiA+IDk5TCkgPyAoaG93ZmFyIC8gKGZzaXogLyAxMDBMKSkgOiAwTDsKKyAgICAgICAgICAg ICAgICBpZiAocGN0ID4gMTAwTCB8fCAgICAgICAvKiBBbGxvdyBmb3IgZXhwYW5zaW9uIGFuZCAq LworICAgICAgICAgICAgICAgICAgIChvbGRwY3QgPT0gOTlMICYmIHBjdCA8IDBMKSkgLyogb3Ro ZXIgYm91bmRhcnkgY29uZGl0aW9ucyAqLworICAgICAgICAgICAgICAgICAgcGN0ID0gMTAwTDsK KyAgICAgICAgICAgICAgICBpZiAocGN0ICE9IG9sZHBjdCkgICAgICAvKiBPbmx5IGRvIHRoaXMg MTAwIHRpbWVzIHBlciBmaWxlICovCisgICAgICAgICAgICAgICAgICB1cGRwY3Qob2xkcGN0LCBw Y3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0 eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxvbmcpIENXX0ZGQywgKGxvbmcpIGZmYyk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwgKGxv bmcpIENXX0ZGQywgKGxvbmcpIGhvd2Zhcik7CisgICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGlu dCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9s ZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgICBjYXNlICclJzogICAgICAgICAgICAgICAgICAgICAvKiBUaW1lb3V0cywgcmV0cmFuc21p c3Npb25zICovCisgICAgICAgICAgICBjcHMgPSBzaG9jcHMoKGludCkgcGN0LCBmc2l6LCBob3dm YXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hvZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBo b3dmYXIpOyAqLworCisgICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0 aW1lb3V0czsKKyAgICAgICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJv ciBjb3VudCwgaWYgY2hhbmdlZCAqLworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBD V19QUiwKKwkJCSAgICAgICAobG9uZykgZXJyb3JzCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2xkdHJ5ID0gZXJy b3JzOworICAgICAgICAgICAgICAgIGlmIChzKSBpZiAoKnMpIHsKKyAgICAgICAgICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25n KSBzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2Fz ZSAnRSc6ICAgICAgICAgICAgICAgICAgICAgLyogRXJyb3IgcGFja2V0ICovCisgICAgICAgICAg ICBpZiAoKnMpIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJB TlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBmY250ID0gZmJ5dCA9IDBMOyAgICAgICAgICAgLyogU28gbm8gYnl0ZXMgZm9yIHRoaXMg ZmlsZSAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnUSc6ICAgICAgICAg ICAgICAgICAgICAgLyogQ3J1bmNoZWQgcGFja2V0ICovCisgICAgICAgICAgICBjcHMgPSBzaG9j cHMoKGludCkgcGN0LCBmc2l6LCBob3dmYXIpOworICAgICAgICAgICAgLyogb2xkX3RyID0gc2hv ZXRsKG9sZF90ciwgY3BzLCBmc2l6LCBob3dmYXIpOyAqLworICAgICAgICAgICAgS3VpU2V0UHJv cGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9u ZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJEYW1hZ2VkIFBh Y2tldCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICBjYXNlICdxJzogICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUMgb3IgY29u bmVjdGlvbiBsb3N0ICovCisgICAgICAgICAgICBpZiAoIXMpIHMgPSAiIjsKKyAgICAgICAgICAg IGlmICghKnMpIHMgPSAiVXNlciBpbnRlcnJ1cHRpb24gb3IgY29ubmVjdGlvbiBsb3N0IjsKKyAg ICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSAnVCc6ICAgICAgICAgICAgICAgICAgICAgLyogVGltZW91dCAq LworICAgICAgICAgICAgY3BzID0gc2hvY3BzKChpbnQpIHBjdCwgZnNpeiwgaG93ZmFyKTsKKyAg ICAgICAgICAgIC8qIG9sZF90ciA9IHNob2V0bChvbGRfdHIsIGNwcywgZnNpeiwgaG93ZmFyKTsg Ki8KKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsb25nKSAiVGltZW91dCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgICAgICBlcnJvcnMgPSByZXRyYW5zICsgY3J1bmNoZWQgKyB0aW1lb3V0czsKKyAgICAg ICAgICAgIGlmIChlcnJvcnMgIT0gb2xkdHJ5KSB7ICAgICAvKiBFcnJvciBjb3VudCwgaWYgY2hh bmdlZCAqLworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVS LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19QUiwgKGxvbmcpIGVy cm9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAg b2xkdHJ5ID0gZXJyb3JzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJzLCBkbyBub3RoaW5n ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lmZGVmIE9TMgorICAgICAgICBT YXZlQ21kTW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisg ICAgICBjYXNlIFNDUl9TVDogICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSB0cmFuc2ZlciBz dGF0dXMgKi8KKyAgICAgICAgZGVidWcoRjEwMSwic2NyZWVuZyBTQ1JfU1QgYyIsIiIsYyk7Cisg ICAgICAgIGRlYnVnKEYxMDEsInNjcmVlbmcgU0NSX1NUIHN1Y2Nlc3MiLCIiLHN1Y2Nlc3MpOwor ICAgICAgICBkZWJ1ZyhGMTAxLCJzY3JlZW5nIFNDUl9TVCBjeHNlZW4iLCIiLGN4c2Vlbik7Cisj aWZkZWYgQ09NTUVOVAorICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAgIC8q IE9LLCBwcmludCAxMDAgJSAqLworICAgICAgICAgICAgaWYgKHBjdGxibCkKKyAgICAgICAgICAg ICAgdXBkcGN0KG9sZHBjdCwxMDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykg ZmZjKTsKKyAgICAgICAgICAgIHBjdCA9IDEwMDsKKyAgICAgICAgICAgIG9sZHBjdCA9IDA7Cisg ICAgICAgIH0gZWxzZSBpZiAoZnNpeiA+IDBMKSAgICAgICAgICAgLyogTm90IE9LLCB1cGRhdGUg ZmluYWwgcGVyY2VudCAqLworLyoKKyAgVGhlIGVsc2UgcGFydCB3cml0ZXMgYWxsIG92ZXIgdGhl IHNjcmVlbiAtLSBob3dmYXIgYW5kL29yIGZzaXogaGF2ZQorICBiZWVuIHJlc2V0IGFzIGEgY29u c2VxdWVuY2Ugb2YgdGhlIG5vdC1PS25lc3Mgb2YgdGhlIHRyYW5zZmVyLgorKi8KKyAgICAgICAg ICBpZiAocGN0bGJsKQorICAgICAgICAgICAgdXBkcGN0KG9sZHBjdCwgKGhvd2ZhciAqIDEwMEwp IC8gZnNpeik7CisjZWxzZQorICAgICAgICBpZiAoYyA9PSBTVF9PSykgeyAgICAgICAgICAgICAg IC8qIE9LLCBwcmludCAxMDAgJSAqLworICAgICAgICAgICAgaWYgKHBjdGxibCkgeworCQl1cGRw Y3Qob2xkcGN0LDEwMCk7CisJICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEt1aVNldFByb3Bl cnR5KEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfRkZDLCAobG9uZykgZmZjKTsKKyNpZmRl ZiBDT01NRU5UCisgICAgICAgICAgICBwY3QgPSAxMDA7CisgICAgICAgICAgICBvbGRwY3QgPSAw OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIENPTU1FTlQgKi8K KworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19U UiwgKGxvbmcpICIiICk7CisKKyAgICAgICAgc3dpdGNoIChjKSB7ICAgICAgICAgICAgICAgICAg ICAvKiBQcmludCBuZXcgc3RhdHVzIG1lc3NhZ2UgKi8KKyAgICAgICAgICBjYXNlIFNUX09LOiAg ICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBPSyAqLworICAgICAgICAgICAgZmNudCsrOyAg ICAgICAgICAgICAgICAgICAgIC8qIENvdW50IHRoaXMgZmlsZSAqLworCSAgICBpZiAod2hhdCA9 PSAoV19GVFB8V19GVF9ERUxFKSkgeworICAgICAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtV SV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykg Q1dfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgIkRlbGV0ZSBP SyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwkgICAgfSBlbHNlIHsKKwkJ ZmJ5dCArPSBmZmM7CisgICAgICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJB TlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBDV19NU0csCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiVHJhbnNmZXIgT0siCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJICAgIH0KKyAgICAgICAgICAgIHJldHVy bjsKKworICAgICAgICAgIGNhc2UgU1RfRElTQzogICAgICAgICAgICAgICAgIC8qIERpc2NhcmRl ZCAqLworICAgICAgICAgICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpICJGaWxlIGRpc2NhcmRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNl bmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNl IFNUX0lOVDogICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRlZCAqLworICAgICAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAobG9uZykgQ1dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpICJU cmFuc2ZlciBpbnRlcnJ1cHRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjaWZk ZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01N RU5UICovCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBTVF9TS0lQOiB7ICAg ICAgICAgICAgICAgIC8qIFNraXBwZWQgKi8KKyAgICAgICAgICAgIGNoYXIgZXJyYnVmWzY0XSA7 CisJICAgIGlmIChuID4gMCAmJiBuIDwgbnNrcmVhc29uKQorICAgICAgICAgICAgICAgIHNwcmlu dGYoIGVycmJ1ZiwgIkZpbGUgc2tpcHBlZCwgKCVzKSIsIHNrcmVhc29uW25dICkgOworCSAgICBl bHNlCisgICAgICAgICAgICAgICAgc3ByaW50ZiggZXJyYnVmLCAiRmlsZSBza2lwcGVkIiApIDsK KyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5TRkVSLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb25nKSBlcnJidWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisjaWZkZWYg Q09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICBjYXNlIFNUX0VS UjogICAgICAgICAgICAgICAgICAvKiBFcnJvciBtZXNzYWdlICovCisgICAgICAgICAgICBpZiAo IXMpIHMgPSAoY2hhciAqKWVwa3Rtc2c7CisgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJ X0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsIChsb25nKSBzICk7CisjaWZkZWYgQ09NTUVO VAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisg ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICBjYXNlIFNUX1JFRlU6ICAgICAgICAgICAg ICAgICAvKiBSZWZ1c2VkICovCisgICAgICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgICAg ICBjaGFyIGVycmJ1Zls2NF0gOworICAgICAgICAgICAgICAgIHNwcmludGYoIGVycmJ1ZiwgIlJl ZnVzZWQsICVzIiwgcyApIDsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklM RV9UUkFOU0ZFUiwobG9uZykgQ1dfRVJSLChsb25nKSBlcnJidWYpOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9UUkFOU0ZFUiwo bG9uZylDV19FUlIsKGxvbmcpIlJlZnVzZWQiKTsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBDT01N RU5UCisgICAgICAgICAgICBwY3QgPSBvbGRwY3QgPSAwOworI2VuZGlmIC8qIENPTU1FTlQgKi8K KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIGNhc2UgU1RfSU5DOgorICAgICAgICAg ICAgS3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsKGxvbmcpQ1dfRVJSLChsb25nKSJJ bmNvbXBsZXRlIik7CisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgICAgcGN0ID0gb2xkcGN0ID0g MDsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg ICBjYXNlIFNUX01TRzoKKyAgICAgICAgICAgIEt1aVNldFByb3BlcnR5KEtVSV9GSUxFX1RSQU5T RkVSLChsb25nKUNXX01TRywobG9uZylzKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIC8qIEJhZCBjYWxsICovCisgICAgICAg ICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19FUlIsCisg ICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNjcmVlbigpIGNhbGxlZCB3aXRoIGJh ZCBzdGF0dXMgKioqIiApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg IGNhc2UgU0NSX1RDOiB7ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2FjdGlvbiBjb21wbGV0 ZSAqLworICAgICAgICAgIGNoYXIgbXNnYnVmWzEyOF07CisgICAgICAgICAgS3VpU2V0UHJvcGVy dHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1dfQ1AsIHRmY3BzKTsKKyAgICAgICAgICBp ZiAoc3VjY2VzcykgeworICAgICAgICAgICAgICBzcHJpbnRmKG1zZ2J1ZiwKKyAgICAgICAgICAg ICAgICAgICAgICAiU1VDQ0VTUy4gIEZpbGVzOiAlcywgQnl0ZXM6ICVsZCwgJWxkIENQUyIsCisg ICAgICAgICAgICAgICAgICAgICAgZmlsY250IC0gZmlscmVqLAorICAgICAgICAgICAgICAgICAg ICAgIGNrZnN0b2EoZmJ5dCksCisgICAgICAgICAgICAgICAgICAgICAgdGZjcHMKKyAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShLVUlfRklMRV9U UkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIENXX01TRywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIG1zZ2J1ZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAgICAgICAgICBLdWlTZXRQcm9wZXJ0eShL VUlfRklMRV9UUkFOU0ZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgQ1dfVFIs CisgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGhobW1zcygobG9uZykKKyNpZmRlZiBH RlRJTUVSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnB0c2VjcyAr IDAuNSkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2Vj cworI2VuZGlmIC8qIEdGVElNRVIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkpOworCisjaWZkZWYgR0ZUSU1FUgorICAgICAgICAgIG9sZGd0diA9IChDS0ZMT0FU KSAtMS4wOworI2Vsc2UKKyAgICAgICAgICBvbGRndHYgPSAtMUw7CisjZW5kaWYgLyogR0ZUSU1F UiAqLworCisjaWZkZWYgQ09NTUVOVAorICAgICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsg ICAgICAgIC8qIFJlc2V0IHRoZXNlIGZvciBuZXh0IHRpbWUuICovCisjZW5kaWYgLyogQ09NTUVO VCAqLworICAgICAgICAgIG9sZHR5cCA9IDA7IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9s ZGxlbiA9IC0xOworICAgICAgICAgIG9sZHRpbSA9IC0xOworICAgICAgICAgIGNlbmR3ID0gMTsK KyAgICAgICAgICBpZiAoeGZyYmVsKSBibGVlcChCUF9OT1RFKTsgICAvKiBDbG9zZSB3aW5kb3cs IHRoZW4gYmVlcC4gKi8KKyAgICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAv KiBXaW5kb3cgY2xvc2VkLiAqLworICAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGNh c2UgU0NSX0VNOiAgICAgICAgICAgICAgICAgICAgICAvKiBFcnJvciBwYWNrZXQgKGZhdGFsKSAq LworICAgICAgICBLdWlTZXRQcm9wZXJ0eSggS1VJX0ZJTEVfVFJBTlNGRVIsIChsb25nKSBDV19F UlIsIChsb25nKSBzICk7CisgICAgICAgIGlmICh4ZnJiZWwpIGJsZWVwKEJQX0ZBSUwpOworI2lm ZGVmIENPTU1FTlQKKyAgICAgICAgcGN0ID0gb2xkcGN0ID0gMDsKKyNlbmRpZiAvKiBDT01NRU5U ICovCisgICAgICAgIHJldHVybjsKKworICAgICAgY2FzZSBTQ1JfUUU6ICAgICAgICAgICAgICAg ICAgICAgIC8qIFF1YW50aXR5IGVxdWFscyAqLworICAgICAgY2FzZSBTQ1JfVFU6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFVuZGVsaW1pdGVkIHRleHQgKi8KKyAgICAgIGNhc2UgU0NSX1ROOiAg ICAgICAgICAgICAgICAgICAgICAvKiBUZXh0IGRlbGltaXRlZCBhdCBzdGFydCAqLworICAgICAg Y2FzZSBTQ1JfVFo6ICAgICAgICAgICAgICAgICAgICAgIC8qIFRleHQgZGVsaW1pdGVkIGF0IGVu ZCAqLworICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChpZ25vcmVk IGluIGZ1bGxzY3JlZW4gZGlzcGxheSkgKi8KKworICAgICAgY2FzZSBTQ1JfWEQ6ICAgICAgICAg ICAgICAgICAgICAgIC8qIFgtcGFja2V0IGRhdGEgKi8KKyAgICAgICAgcGN0ID0gb2xkcGN0ID0g MDsKKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVSLCAobG9uZykgQ1df TkFNLCAobG9uZykgcyApOworICAgICAgICByZXR1cm47CisKKyAgICAgIGNhc2UgU0NSX0NXOiAg ICAgICAgICAgICAgICAgICAgICAvKiBDbG9zZSBXaW5kb3cgKi8KKyNpZmRlZiBDT01NRU5UCisg ICAgICAgIHBjdCA9IDEwMDsgb2xkcGN0ID0gMDsgICAgICAgICAgLyogUmVzZXQgdGhlc2UgZm9y IG5leHQgdGltZS4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgICAgIG9sZHR5cCA9IDA7 IG9sZHJ0dCA9IC0xTDsgb2xkdHJ5ID0gLTE7IG9sZGxlbiA9IC0xOworICAgICAgICBvbGR0aW0g PSAtMTsKKworICAgICAgICBmdF93aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgIC8qIEZsYWcg dGhhdCB3aW5kb3cgaXMgY2xvc2VkLiAqLworICAgICAgICBjZW5kdyA9IDE7IHJldHVybjsKKwor ICAgICAgY2FzZSBTQ1JfQ0Q6ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc3BsYXkgY3VycmVu dCBkaXJlY3RvcnkgKi8KKyAgICAgICAgS3VpU2V0UHJvcGVydHkoIEtVSV9GSUxFX1RSQU5TRkVS LCAobG9uZykgQ1dfRElSLCAobG9uZykgcyApOworI2lmZGVmIE9TMgorICAgICAgICBTYXZlQ21k TW9kZSgwLCAwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgICBk ZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFkIGNhbGwgKi8KKyAgICAgICAg S3VpU2V0UHJvcGVydHkoS1VJX0ZJTEVfVFJBTlNGRVIsCisgICAgICAgICAgICAgICAgICAgICAg IChsb25nKSBDV19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSAiKioqIHNjcmVl bigpIGNhbGxlZCB3aXRoIGJhZCBmdW5jdGlvbiBjb2RlICoqKiIKKyAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKyNlbmRpZiAvKiBLVUkgKi8KKyNl bmRpZiAvKiBNQUMgKi8KKworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIENLX0NVUlBP UworLyogRHVtbWllcyBmb3Igd2hlbiBjdXJzb3IgY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkICov CitpbnQKK2NrX2N1cnBvcyhyb3csIGNvbCkgeworICAgIHJldHVybigtMSk7Cit9CisKK2ludAor Y2tfY2xzKCkgeworICAgIHJldHVybigtMSk7Cit9CisKK2ludAorY2tfY2xlb2woKSB7CisgICAg cmV0dXJuKC0xKTsKK30KKyNlbmRpZiAvKiBDS19DVVJQT1MgKi8KKworI2lmbmRlZiBOT0lLU0QK KyNpZmRlZiBJS1NEQgorCitzdHJ1Y3QgaWtzZGJmbGQgZGJmbGRbXSA9IHsKKyAgIC8qIE9mZnNl dCAgICBMZW5ndGggICAgVHlwZSAgICovCisgICAgeyBEQl9GTEFHUywgZEJfRkxBR1MsIERCVF9I RVggfSwgICAgLyogIDAgZGJfRkxBR1MgRmxhZ3MgKi8KKyAgICB7IERCX0FUWVBFLCBkQl9BVFlQ RSwgREJUX0hFWCB9LCAgICAvKiAgMSBkYl9BVFlQRSBBdXRoIHR5cGUgKi8KKyAgICB7IERCX0FN T0RFLCBkQl9BTU9ERSwgREJUX0hFWCB9LCAgICAvKiAgMyBkYl9BTU9ERSBBdXRoIG1vZGUgKi8K KyAgICB7IERCX1NUQVRFLCBkQl9TVEFURSwgREJUX0hFWCB9LCAgICAvKiAgMiBkYl9TVEFURSBT dGF0ZSAqLworICAgIHsgREJfTVlQSUQsIGRCX01ZUElELCBEQlRfSEVYIH0sICAgIC8qICA1IGRi X01ZUElEIFBJRCAqLworICAgIHsgREJfU0FERFIsIGRCX1NBRERSLCBEQlRfSEVYIH0sICAgIC8q ICA0IGRiX1NBRERSIFNlcnZlciBhZGRyZXNzICovCisgICAgeyBEQl9DQUREUiwgZEJfQ0FERFIs IERCVF9IRVggfSwgICAgLyogIDYgZGJfQ0FERFIgQ2xpZW50IGFkZHJlc3MgKi8KKyAgICB7IERC X1NUQVJULCBkQl9TVEFSVCwgREJUX0RBVCB9LCAgICAvKiAgNyBkYl9TVEFSVCBTZXNzaW9uIHN0 YXJ0ICovCisgICAgeyBEQl9MQVNUVSwgZEJfTEFTVFUsIERCVF9EQVQgfSwgICAgLyogIDggZGJf TEFTVFUgTGFzdCB1cGRhdGUgKi8KKyAgICB7IERCX1VMRU4sICBkQl9VTEVOLCAgREJUX0hFWCB9 LCAgICAvKiAgOSBkYl9VTEVOICBVc2VybmFtZSBsZW5ndGggKi8KKyAgICB7IERCX0RMRU4sICBk Ql9ETEVOLCAgREJUX0hFWCB9LCAgICAvKiAxMCBkYl9ETEVOICBEaXJlY3RvcnkgbmFtZSBsZW5n dGggKi8KKyAgICB7IERCX0lMRU4sICBkQl9JTEVOLCAgREJUX0hFWCB9LCAgICAvKiAxMSBkYl9J TEVOICBJbmZvIGxlbmd0aCAqLworICAgIHsgREJfUEFEMSwgIGRCX1BBRDEsICBEQlRfVU5EIH0s ICAgIC8qIDEyIGRiX1BBRDEgIChSZXNlcnZlZCkgKi8KKyAgICB7IERCX1VTRVIsICBkQl9VU0VS LCAgREJUX1NUUiB9LCAgICAvKiAxMyBkYl9VU0VSICBVc2VybmFtZSAqLworICAgIHsgREJfRElS LCAgIGRCX0RJUiwgICBEQlRfU1RSIH0sICAgIC8qIDE0IGRiX0RJUiAgIEN1cnJlbnQgRGlyZWN0 b3J5ICovCisgICAgeyBEQl9JTkZPLCAgZEJfSU5GTywgIERCVF9TVFIgfSAgICAgLyogMTUgZGJf SU5GTyAgU3RhdGUtc3BlY2lmaWMgaW5mbyAqLworfTsKKworc3RhdGljIGNoYXIgbGNrbmFtW0NL TUFYUEFUSCsxXTsgICAgICAgIC8qIExvY2tmaWxlIHBhdGhuYW1lICovCitzdGF0aWMgY2hhciB0 bXBsY2tbQ0tNQVhQQVRIKzFdOyAgICAgICAgLyogVGVtcG9yYXJ5IGxvY2tmaWxlIG5hbWUgKi8K Kworc3RhdGljIGNoYXIgKiB1cGRtb2RlID0gICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSBtb2Rl IGZvciBmb3BlbigpICovCisjaWZkZWYgT1MyCisgICJyK2IiCisjZWxzZQorI2lmZGVmIFZNUwor ICAicitiIgorI2Vsc2UKKyAgInIrIgorI2VuZGlmIC8qIFZNUyAqLworI2VuZGlmIC8qIE9TMiAq LworICA7CisKKy8qICBEIEIgSSBOIEkgVCAgLS0gIEluaXRpYWxpemUgdGhlIElLU0QgZGF0YWJh c2UuLi4gICovCisKK2ludAorZGJpbml0KCkgeworICAgIGV4dGVybiBpbnQgZGJpbml0ZWQ7Cisg ICAgaW50IHggPSAwOworICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmRpciAxIixkYmRpciwwKTsK KyAgICBkZWJ1ZyhGMTEwLCJkYmluaXQgZGJmaWxlIDEiLGRiZmlsZSwwKTsKKyAgICBpZiAoZGJp bml0ZWQpCisgICAgICByZXR1cm4oMCk7CisjaWZkZWYgT1MyCisgICAgaWYgKCFkYmRpcikgewor I2lmZGVmIE5UCisgICAgICAgIGNoYXIgKiBwID0gTlVMTDsKKyAgICAgICAgaWYgKCFpc1dpbjk1 KCkpIHsKKyAgICAgICAgICAgIHAgPSBnZXRlbnYoIlN5c3RlbVJvb3QiKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIHAgPSBnZXRlbnYoIndpbmJvb3RkaXIiKTsKKyAgICAgICAgICAg IGlmICghcCkgIHAgPSBnZXRlbnYoIndpbmRpciIpOworICAgICAgICB9CisgICAgICAgIGlmICgh cCkgcCA9ICJDOi8iOworICAgICAgICBkYmRpciA9IG1hbGxvYyhzdHJsZW4ocCkrMik7CisgICAg ICAgIHN0cmNweShkYmRpcixwKTsJCS8qIHNhZmUgKi8KKyAgICAgICAgcCA9IGRiZGlyOworICAg ICAgICB3aGlsZSAoKnApIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXFwnKQorICAgICAgICAg ICAgICAqcCA9ICcvJzsKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAo KihwLTEpICE9ICcvJyApIHsKKyAgICAgICAgICAgICpwKysgPSAnLyc7CisgICAgICAgICAgICAq cCA9ICdcMCc7CisgICAgICAgIH0KKyNlbHNlIC8qIE5UICovCisgICAgICAgIG1ha2VzdHIoJmRi ZGlyLCJDOi8iKTsKKyNlbmRpZiAvKiBOVCAqLworICAgIH0KKyNlbHNlIC8qIE9TMiAqLworICAg IGlmICghZGJkaXIpCisgICAgICBtYWtlc3RyKCZkYmRpcixJS19EQkFTRURJUik7CisjZW5kaWYg LyogT1MyICovCisKKyAgICBpZiAoIWRiZmlsZSkgeworICAgICAgICBjaGFyICogcyA9ICIiOwor ICAgICAgICB4ID0gc3RybGVuKGRiZGlyKTsKKyAgICAgICAgaWYgKGRiZGlyW3gtMV0gIT0gJy8n KSB7CisgICAgICAgICAgICBzID0gIi8iOworICAgICAgICAgICAgeCsrOworICAgICAgICB9Cisg ICAgICAgIHggKz0gKGludClzdHJsZW4oSUtfREJBU0VGSUwpOworICAgICAgICBkYmZpbGUgPSAo Y2hhciAqKW1hbGxvYyh4KzEpOworICAgICAgICBzcHJpbnRmKGRiZmlsZSwiJXMlcyVzIixkYmRp cixzLElLX0RCQVNFRklMKTsKKyAgICB9CisgICAgZGVidWcoRjExMCwiZGJpbml0IGRiZGlyIDIi LGRiZGlyLDApOworICAgIGRlYnVnKEYxMTAsImRiaW5pdCBkYmZpbGUgMiIsZGJmaWxlLDApOwor ICAgIG15cGlkID0gZ2V0cGlkKCk7ICAgICAgICAgICAgICAgICAgIC8qIEdldCBteSBwaWQgKi8K KyAgICBkZWJ1ZyhGMTAxLCJkYmluaXQgbXlwaWQiLCIiLG15cGlkKTsKKworICAgIGlmICghbXlo ZXhpcFswXSkgeyAgICAgICAgICAgICAgICAgIC8qIFNldCBteSBoZXggSVAgYWRkcmVzcyAqLwor I2lmZGVmIFRDUFNPQ0tFVAorICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBteXhpcGFkZHI7 CisgICAgICAgIGlmIChnZXRsb2NhbGlwYWRkcigpID4gLTEpIHsKKyAgICAgICAgICAgIG15aXAg PSBteXhpcGFkZHI7CisgICAgICAgICAgICBzcHJpbnRmKG15aGV4aXAsIiUwOGx4IixteWlwKTsg LyogKE5lZWRzIGZpeGluZyBmb3IgSVB2NikgKi8KKyAgICAgICAgfSBlbHNlCisjZW5kaWYgLyog VENQU09DS0VUICovCisgICAgICAgICAgY2tzdHJuY3B5KG15aGV4aXAsIjAwMDAwMDAwIiw5KTsK KyAgICB9CisgICAgZGVidWcoRjExMSwiZGJpbml0IG15aXAiLG15aGV4aXAsbXlpcCk7CisgICAg aWYgKCFwZWVyaGV4aXBbMF0pIHsgICAgICAgICAgICAgICAgLyogR2V0IHBlZXIncyAgaGV4IElQ IGFkZHJlc3MgKi8KKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGxv bmcgcGVlcnhpcGFkZHI7CisgICAgICAgIGlmIChja2dldHBlZXIoKSkgeworICAgICAgICAgICAg cGVlcmlwID0gcGVlcnhpcGFkZHI7CisgICAgICAgICAgICBzcHJpbnRmKHBlZXJoZXhpcCwiJTA4 bHgiLHBlZXJpcCk7IC8qIChOZWVkcyBmaXhpbmcgZm9yIElQdjYpICovCisgICAgICAgICAgICBk ZWJ1ZyhGMTExLCJkYmluaXQgcGVlcmlwIixwZWVyaGV4aXAscGVlcmlwKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDEsImRiaW5pdCBja2dldHBlZXIgZmFpbHVyZSIs IiIsZXJybm8pOworICAgICAgICAgICAgY2tzdHJuY3B5KHBlZXJoZXhpcCwiMDAwMDAwMDAiLDkp OworICAgICAgICB9CisjZWxzZQorICAgICAgICBja3N0cm5jcHkocGVlcmhleGlwLCIwMDAwMDAw MCIsOSk7CisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgfQorICAgIGRlYnVnKEYxMTEsImRi aW5pdCBwZWVyaXAiLHBlZXJoZXhpcCxwZWVyaXApOworICAgIGRlYnVnKEYxMDEsImRiaW5pdCBk YmVuYWJsZWQiLCIiLGRiZW5hYmxlZCk7CisgICAgaWYgKGRiZW5hYmxlZCAmJiBpbnNlcnZlcikg eworICAgICAgICBteWRic2xvdCA9IGdldHNsb3QoKTsKKyAgICAgICAgZGVidWcoRjExMSwiZGJp bml0IGdldHNsb3QiLGNraXRvYShpa2Rib3BlbikseCk7CisgICAgICAgIGlmIChpa2Rib3Blbikg ZGJpbml0ZWQgPSAxOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKKy8qICBVIFAgRCBTIEwg TyBUICAtLSAgVXBkYXRlIHNsb3QgbiAgKi8KKworLyoKKyAgT3BlbnMgdGhlIGRhdGFiYXNlIGlm IG5lY2Vzc2FyeSwgc2Vla3MgdG8gc2xvdCBuLCB3cml0ZXMgY3VycmVudCByZWNvcmQKKyAgYW5k IGFkZHMgY3VycmVudCB0aW1lIHRvIGxhc3QtdXBkYXRlIGZpZWxkLiAgbiBpcyB0aGUgcmVjb3Jk IHNlcXVlbmNlIG51bWJlcgorICAoMCwgMSwgMiwgLi4uKSwgbm90IHRoZSBzZWVrIHBvaW50ZXIu ICAgUmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuCisqLworaW50Cit1cGRzbG90 KG4pIGludCBuOyB7ICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIG91ciBzbG90ICovCisg ICAgaW50IHJjID0gMDsKKyAgICBDS19PRkZfVCBwb3NpdGlvbjsKKworICAgIGRlYnVnKEYxMTEs InVwZHNsb3QiLCJpa2Rib3BlbiIsaWtkYm9wZW4pOworICAgIGlmICghaWtkYm9wZW4pICAgICAg ICAgICAgICAgICAgICAgIC8qIE5vdCBpZiBub3Qgb2sgKi8KKyAgICAgIHJldHVybigwKTsKKyAg ICBpZiAoIWRiZnApIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBPcGVuIGRhdGFiYXNlIGlm IG5vdCBvcGVuICovCisgICAgICAgIGRiZnAgPSBmb3BlbihkYmZpbGUsdXBkbW9kZSk7ICAgLyog SW4gdXBkYXRlIG5vLXRydW5jYXRlIG1vZGUgKi8KKyAgICAgICAgaWYgKCFkYmZwKSB7CisgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJ1cGRzbG90IGZvcGVuIGZhaWxlZCIsZGJmaWxlLDApOworICAg ICAgICAgICAgaWtkYm9wZW4gPSAwOworICAgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAg fQorICAgIH0KKyAgICAvKiBkZWJ1ZyhGMTExLCJ1cGRzbG90IGRiZmlsZSIsZGJmaWxlLGRiZnAp OyAqLworICAgIHBvc2l0aW9uID0gbiAqIERCX1JFQ0w7CisgICAgaWYgKENLRlNFRUsoZGJmcCxw b3NpdGlvbiwwKSA8IDApIHsJLyogU2VlayB0byBkZXNpcmVkIHNsb3QgKi8KKyAgICAgICAgZGVi dWcoRjExMSwidXBkc2xvdCBmc2VlayBmYWlsZWQiLGRiZmlsZSxteWRic2Vlayk7CisgICAgICAg IGlrZGJvcGVuID0gMDsKKyAgICAgICAgcmMgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICAv KiBVcGRhdGUgdGhlIHVwZGF0ZSB0aW1lICovCisgICAgICAgIHN0cm5jcHkoJmRicmVjW2RiZmxk W2RiX0xBU1RVXS5vZmZdLAorICAgICAgICAgICAgICAgIGNrZGF0ZSgpLAorICAgICAgICAgICAg ICAgIGRiZmxkW2RiX0xBU1RVXS5sZW4KKyAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAo ZndyaXRlKGRicmVjLDEsREJfUkVDTCxkYmZwKSA8IERCX1JFQ0wpIHsgLyogV3JpdGUgdGhlIHJl Y29yZCAqLworICAgICAgICAgICAgZGVidWcoRjExMCwidXBkc2xvdCBmd3JpdGUgZmFpbGVkIixk YmZpbGUsMCk7CisgICAgICAgICAgICBpa2Rib3BlbiA9IDA7CisgICAgICAgICAgICByYyA9IC0x OworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZsdXNoIHRoZSB3 cml0ZSAqLworICAgICAgICAgICAgZmZsdXNoKGRiZnApOworICAgICAgICB9CisgICAgfQorICAg IHJldHVybihyYyk7Cit9CisKKy8qICBJIE4gSSBUIFMgTCBPIFQgLS0gIEluaXRpYWxpemUgc2xv dCBuIHdpdGggbXkgaW5mbyAgKi8KKworaW50Citpbml0c2xvdChuKSBpbnQgbjsgeyAgICAgICAg ICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBzbG90ICovCisgICAgaW50IGs7CisjaWZkZWYgVENQ U09DS0VUCisgICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVlcnhpcGFkZHI7CisjZW5kaWYgLyog VENQU09DS0VUICovCisKKyAgICBkZWJ1ZyhGMTAxLCJpbml0c2xvdCIsIiIsbik7CisKKyNpZmRl ZiBVU0VfTUVNQ1BZCisgICAgbWVtc2V0KGRicmVjLDMyLERCX1JFQ0wpOworI2Vsc2UKKyAgICBm b3IgKGsgPSAwOyBrIDwgREJfUkVDTDsgaysrKQorICAgICAgZGJyZWNba10gPSAnXDA0MCc7Cisj ZW5kaWYgLyogVVNFX01FTUNQWSAqLworCisgICAgbXlmbGFncyA9IERCRl9JTlVTRTsgICAgICAg ICAgICAgICAgLyogU2V0IGluLXVzZSBmbGFnICovCisgICAgbXlzdGF0ZSA9IFdfTk9USElORzsK KyAgICBteWF0eXBlID0gMEw7CisgICAgbXlhbW9kZSA9IDBMOworCisgICAgayA9IGRiZmxkW2Ri X0ZMQUdTXS5sZW47ICAgICAgICAgICAgLyogTGVuZ3RoIG9mIGZsYWdzIGZpZWxkICovCisgICAg c3RybmNweSgmZGJyZWNbZGJmbGRbZGJfRkxBR1NdLm9mZl0sdWxvbmd0b2hleChteWZsYWdzLGsp LGspOworCisgICAgayA9IGRiZmxkW2RiX0FUWVBFXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNb ZGJmbGRbZGJfQVRZUEVdLm9mZl0sdWxvbmd0b2hleChteWF0eXBlLGspLGspOworCisgICAgayA9 IGRiZmxkW2RiX0FNT0RFXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQU1PREVd Lm9mZl0sdWxvbmd0b2hleChteWFtb2RlLGspLGspOworCisgICAgayA9IGRiZmxkW2RiX1NUQVRF XS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfU1RBVEVdLm9mZl0sdWxvbmd0b2hl eChteXN0YXRlLGspLGspOworCisgICAgayA9IGRiZmxkW2RiX1NBRERSXS5sZW47CisgICAgc3Ry bmNweSgmZGJyZWNbZGJmbGRbZGJfU0FERFJdLm9mZl0sdWxvbmd0b2hleChteWlwLGspLGspOwor CisjaWZkZWYgVENQU09DS0VUCisgICAgY2tnZXRwZWVyKCk7CisgICAgayA9IGRiZmxkW2RiX0NB RERSXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQ0FERFJdLm9mZl0sdWxvbmd0 b2hleChwZWVyeGlwYWRkcixrKSxrKTsKKyNlbHNlCisgICAgayA9IGRiZmxkW2RiX0NBRERSXS5s ZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfQ0FERFJdLm9mZl0sdWxvbmd0b2hleCgw TCxrKSxrKTsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKworICAgIGsgPSBkYmZsZFtkYl9NWVBJ RF0ubGVuOworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX01ZUElEXS5vZmZdLHVsb25ndG9o ZXgobXlwaWQsayksayk7CisKKyAgICBrID0gZGJmbGRbZGJfU1RBUlRdLmxlbjsKKyAgICBzdHJu Y3B5KCZkYnJlY1tkYmZsZFtkYl9TVEFSVF0ub2ZmXSxja2RhdGUoKSxrKTsKKworICAgIGsgPSBk YmZsZFtkYl9VTEVOXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfVUxFTl0ub2Zm XSwiMDAwMCIsNCk7CisKKyAgICBrID0gZGJmbGRbZGJfRExFTl0ubGVuOworICAgIHN0cm5jcHko JmRicmVjW2RiZmxkW2RiX0RMRU5dLm9mZl0sIjAwMDAiLDQpOworCisgICAgayA9IGRiZmxkW2Ri X0lMRU5dLmxlbjsKKyAgICBzdHJuY3B5KCZkYnJlY1tkYmZsZFtkYl9JTEVOXS5vZmZdLCIwMDAw Iiw0KTsKKworICAgIHN0cm5jcHkoJmRicmVjW2RiZmxkW2RiX0lORk9dLm9mZl0sIklOSVQiLDQp OworICAgIHJldHVybih1cGRzbG90KG4pKTsKK30KKworaW50CitzbG90c3RhdGUoeCxzMSxzMixz MykgaW50IHg7IGNoYXIgKnMxLCAqczIsICpzMzsgeworICAgIGludCBrLCBsMSwgbDIsIGwzLCB6 OworICAgIG15c3RhdGUgPSB4OworICAgIGRlYnVnKEYxMDEsInNsb3RzdGF0ZSBpa2Rib3BlbiIs IiIsaWtkYm9wZW4pOworICAgIGlmICghaWtkYm9wZW4pCisgICAgICByZXR1cm4oLTEpOworICAg IGlmICghczEpIHMxID0gIiI7CisgICAgbDEgPSBzdHJsZW4oczEpOworICAgIGlmICghczIpIHMy ID0gIiI7CisgICAgbDIgPSBzdHJsZW4oczIpOworICAgIGlmICghczMpIHMzID0gIiI7CisgICAg bDMgPSBzdHJsZW4oczMpOworICAgIHN0cm5jcHkoJmRicmVjW0RCX1NUQVRFXSx1bG9uZ3RvaGV4 KG15c3RhdGUsNCksNCk7CisgICAgayA9IGRiZmxkW2RiX0lMRU5dLmxlbjsKKyAgICB6ID0gbDEg KyBsMiArIGwzICsgMjsKKyAgICBpZiAoeiA+IGRCX0lORk8pCisgICAgICB6ID0gZEJfSU5GTzsK KyAgICBzdHJuY3B5KCZkYnJlY1tEQl9JTEVOXSx1bG9uZ3RvaGV4KCh1bnNpZ25lZCBsb25nKXos ayksayk7CisgICAgayA9IGRiZmxkW2RiX0lORk9dLmxlbjsKKyAgICB6ID0gZGJmbGRbZGJfSU5G T10ub2ZmOworICAgIGlmIChsMSA8PSBrKSB7CisgICAgICAgIGxzZXQoJmRicmVjW3pdLHMxLGwx KzEsMzIpOworICAgICAgICB6ICs9IGwxKzE7CisgICAgICAgIGsgLT0gbDErMTsKKyAgICAgICAg aWYgKGwyIDw9IGspIHsKKyAgICAgICAgICAgIGxzZXQoJmRicmVjW3pdLHMyLGwyKzEsMzIpOwor ICAgICAgICAgICAgeiArPSBsMisxOworICAgICAgICAgICAgayAtPSBsMisxOworICAgICAgICAg ICAgaWYgKGwzIDw9IGspCisgICAgICAgICAgICAgIGxzZXQoJmRicmVjW3pdLHMzLGssMzIpOwor ICAgICAgICB9CisgICAgfQorI2lmZGVmIERFQlVHCisgICAgaWYgKGRlYmxvZykgeworICAgICAg ICBjaGFyIGJ1ZlsxMjhdOworICAgICAgICBpbnQgaTsKKyAgICAgICAgc3RybmNweShidWYsJmRi cmVjW0RCX0lORk9dLDEyNyk7CisgICAgICAgIGJ1ZlsxMjddID0gTlVMOworICAgICAgICBmb3Ig KGkgPSAxMjY7IGkgPiAwICYmIGJ1ZltpXSA9PSAzMjsgaS0tKSBidWZbaV0gPSAwOworICAgICAg ICBkZWJ1ZyhGMTExLCJzbG90c3RhdGUiLGJ1ZixteXN0YXRlKTsKKyAgICB9CisjZW5kaWYgLyog REVCVUcgKi8KKyAgICB6ID0gdXBkc2xvdChteWRic2xvdCk7CisgICAgZGVidWcoRjEwMSwic2xv dHN0YXRlIHVwZHNsb3QiLCIiLHopOworICAgIHJldHVybih6KTsKK30KKworaW50CitzbG90ZGly KHMxLHMyKSBjaGFyICogczEsICogczI7IHsgICAgICAgLyogVXBkYXRlIGN1cnJlbnQgZGlyZWN0 b3J5ICovCisgICAgaW50IGssIGxlbjEsIGxlbjI7CisgICAgaWYgKCFpa2Rib3BlbikKKyAgICAg IHJldHVybigtMSk7CisgICAgaWYgKCFzMSkgczEgPSAiIjsKKyAgICBpZiAoIXMyKSBzMiA9ICIi OworICAgIGxlbjEgPSBzdHJsZW4oczEpOworICAgIGxlbjIgPSBzdHJsZW4oczIpOworICAgIGsg PSBkYmZsZFtkYl9ETEVOXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbREJfRExFTl0sdWxvbmd0 b2hleCgodW5zaWduZWQgbG9uZykobGVuMStsZW4yKSxrKSxrKTsKKyAgICBrID0gZGJmbGRbZGJf RElSXS5sZW47CisgICAgaWYgKGxlbjEgPiAwKSB7CisgICAgICAgIGxzZXQoJmRicmVjW2RiZmxk W2RiX0RJUl0ub2ZmXSxzMSxsZW4xLDMyKTsKKyAgICAgICAgbHNldCgmZGJyZWNbZGJmbGRbZGJf RElSXS5vZmYrbGVuMV0sczIsay1sZW4xLDMyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsc2V0 KCZkYnJlY1tkYmZsZFtkYl9ESVJdLm9mZl0sczIsaywzMik7CisgICAgfQorICAgIHJldHVybih1 cGRzbG90KG15ZGJzbG90KSk7Cit9CisKKy8qICBGIFIgRSBFIFMgTCBPIFQgIC0tICBGcmVlIHNs b3QgbiAgKi8KKworaW50CitmcmVlc2xvdChuKSBpbnQgbjsgeworICAgIGludCBrOworICAgIGlm ICghaWtkYm9wZW4pCisgICAgICByZXR1cm4oMCk7CisgICAgZGJmbGFncyA9IDBMOworICAgIGlm IChuID09IG15ZGJzbG90KSB7CisgICAgICAgIGRiZmxhZ3MgPSBteWZsYWdzICYgfkRCRl9JTlVT RTsKKyAgICAgICAgZGJmbGFncyAmPSB+REJGX0xPR0dFRDsKKyAgICB9CisgICAgayA9IGRiZmxk W2RiX0ZMQUdTXS5sZW47CisgICAgc3RybmNweSgmZGJyZWNbZGJmbGRbZGJfRkxBR1NdLm9mZl0s dWxvbmd0b2hleChkYmZsYWdzLGspLGspOworICAgIHJldHVybih1cGRzbG90KG4pKTsKK30KKwor LyogIEcgRSBUIFMgTCBPIFQgIC0tICBGaW5kIGEgZnJlZSBkYXRhYmFzZSBzbG90OyByZXR1cm5z IHNsb3QgbnVtYmVyICAqLworCisjaWZkZWYgVU5JWAorI2luY2x1ZGUgPGZjbnRsLmg+CQkJLyog Rm9yIGNyZWF0KCkgKi8KKyNlbmRpZgkvKiBVTklYICovCisKK2ludAorZ2V0c2xvdCgpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgYSBmcmVlIHNsb3QgZm9yIHVzICovCisg ICAgRklMRSAqIHJmcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgLyogUmV0dXJucyBzbG90IG51 bWJlciAoMCwgMSwgLi4uKSAqLworICAgIGNoYXIgaWRzdHJpbmdbNjRdOyAgICAgICAgICAgICAg ICAgIC8qIFBJRCBzdHJpbmcgYnVmZmVyIChkZWNpbWFsKSAqLworICAgIGNoYXIgcGlkYnVmWzY0 XSwgKiBzOworICAgIGludCBqLCBrLCBuLCB4LCByYyA9IC0xOworICAgIGludCBsb2NrZmQsIHRy aWVzLCBoYXZlc2xvdCA9IDA7CisgICAgbG9uZyBsb2NrcGlkOworICAgIENLX09GRl9UIGk7Cisg ICAgLyogY2hhciBpcGJ1ZlsxN107ICovCisKKyAgICBpZiAoIW15aGV4aXBbMF0pICAgICAgICAg ICAgICAgICAgICAvKiBTZXQgbXkgaGV4IElQIGFkZHJlc3MgaWYgbm90IHNldCAqLworICAgICAg Y2tzdHJuY3B5KChjaGFyICopbXloZXhpcCwiN0YwMDAwMDEiLDMzKTsKKyAgICBzcHJpbnRmKGlk c3RyaW5nLCIlMDhseDolMDEwbGRcbiIsbXlpcCxteXBpZCk7CisgICAgZGVidWcoRjExMCwiZ2V0 c2xvdCBpZHN0cmluZyIsIGlkc3RyaW5nLCAwKTsKKworICAgIC8qIE1ha2UgdGVtcG9yYXJ5IGxv Y2tmaWxlIG5hbWUgSVAuUElEIChoZXguaGV4KSAqLworICAgIC8qIFRoaXMgc2hvdWxkIGZpdCBp biAxNCBjaGFycyAtLSBodWdlIFBJRHMgYXJlIHVzdWFsbHkgbm90IHBvc3NpYmxlICovCisgICAg Lyogb24gMTQtY2hhciBmaWxlbmFtZSBzeXN0ZW1zLiAqLworCisgICAgc3ByaW50Zih0bXBsY2ss IiVzJTA4bHguJWx4IixkYmRpcixteWlwLG15cGlkKTsKKyAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90 IHRlbXBmaWxlIix0bXBsY2ssMCk7CisKKyAgICAvKiBNYWtlIGEgdGVtcG9yYXJ5IGZpbGUgKi8K KworICAgIGxvY2tmZCA9IGNyZWF0KHRtcGxjaywgMDYwMCk7CS8qIEJVVCBUSElTIElTTidUIFBP UlRBQkxFICovCisgICAgaWYgKGxvY2tmZCA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMSwiZ2V0 c2xvY2sgdGVtcCBsb2NrZmlsZSBjcmVhdGUgZmFpbHVyZSIsIHRtcGxjaywgZXJybm8pOworICAg ICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICAvKiBXcml0ZSBteSAoZGVjaW1hbCkgUElEIGlu dG8gdGhlIHRlbXAgZmlsZSAqLworCisgICAgd3JpdGUobG9ja2ZkLGlkc3RyaW5nLChpbnQpc3Ry bGVuKGlkc3RyaW5nKSk7CisgICAgaWYgKGNsb3NlKGxvY2tmZCkgPCAwKSB7ICAgICAgICAgICAg LyogQ2xvc2UgbG9ja2ZpbGUgKi8KKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBlcnJvciBj bG9zaW5nIHRlbXAgbG9ja2ZpbGUiLCAiIiwgZXJybm8pOworICAgICAgICByZXR1cm4oLTEpOwor ICAgIH0KKyAgICBzcHJpbnRmKGxja25hbSwiJXMlcyIsZGJkaXIsSUtfTE9DS0ZJTEUpOyAvKiBC dWlsZCBsb2NrZmlsZSBuYW1lICovCisgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBsb2NrZmlsZSIs bGNrbmFtLDApOworCisgICAgcmZwID0gZm9wZW4obGNrbmFtLCJyIik7ICAgICAgICAgICAgLyog U2VlIGlmIGxvY2tmaWxlIGV4aXN0cyAqLworICAgIGlmIChyZnApIHsgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIElmIHNvLi4uICovCisgICAgICAgIHJzZXQocGlkYnVmLCIiLDY0LDApOwor ICAgICAgICB4ID0gZnJlYWQocGlkYnVmLDEsNjMscmZwKTsgICAgIC8qIFJlYWQgSUQgc3RyaW5n IGZyb20gaXQgKi8KKyAgICAgICAgZmNsb3NlKHJmcCk7ICAgICAgICAgICAgICAgICAgICAvKiBh bmQgY2xvc2UgaXQgcXVpY2tseSAqLworICAgICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGxvY2sg ZXhpc3RzIixwaWRidWYsMCk7CisgICAgICAgIGlmICh4ID4gMCkgeyAgICAgICAgICAgICAgICAg ICAgLyogSWYgd2UgaGF2ZSBhIFBJRCwgY2hlY2sgaXQgKi8KKyAgICAgICAgICAgIGNoYXIgKiBz ID0gcGlkYnVmOworICAgICAgICAgICAgd2hpbGUgKCpzKSB7CisgICAgICAgICAgICAgICAgaWYg KGlzbG93ZXIoKnMpKSAqcyA9IHRvdXBwZXIoKnMpOworICAgICAgICAgICAgICAgIGlmICgqcyA9 PSAnOicpIHsKKyAgICAgICAgICAgICAgICAgICAgKnMgPSBOVUw7CisgICAgICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTAsImdldHNsb3QgbG9jayBJUCIscGlkYnVmLDApOworICAgICAgICAgICAg ICAgICAgICBkZWJ1ZyhGMTEwLCJndGVzbG90IG15ICAgSVAiLG15aGV4aXAsMCk7CisgICAgICAg ICAgICAgICAgICAgIGlmICghc3RyY21wKHBpZGJ1ZixteWhleGlwKSkgeyAvKiBTYW1lIElQIGFk ZHJlc3M/ICovCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrcGlkID0gYXRvbChzKzEpOyAv KiBZZXMsIG5vdyBnZXQgUElEICovCisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAx LCJnZXRzbG90IGxvY2twaWQiLCIiLGxvY2twaWQpOworCisgICAgICAgICAgICAgICAgICAgICAg ICAvKiBDaGVjayBpZiBQSUQgbG9ja3BpZCBvbiB0aGlzIGNvbXB1dGVyIGlzIGFsaXZlICovCisg ICAgICAgICAgICAgICAgICAgICAgICB4ID0gemNoa3BpZChsb2NrcGlkKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgheCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMDAsImdldHNsb3QgUElEIHN0YWxlLHJlbW92aW5nIGxvY2siLCIiLDApOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVubGluayhsY2tuYW0pOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAg fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWcoRjExMSwiZ2V0c2xvdCBsb2Nr ZmlsZSBvcGVuIGZhaWx1cmUiLGxja25hbSxlcnJubyk7CisgICAgICAgIH0KKyAgICB9CisgICAg LyogVHJ5IElLX0xDS1RSSUVTICgxNikgdGltZXMgdG8gcmVuYW1lIHRlbXAgZmlsZSB0byBsb2Nr ZmlsZSAqLworCisgICAgZm9yICh0cmllcyA9IElLX0xDS1RSSUVTOyB0cmllcyA+IDA7IHRyaWVz LS0pIHsKKyAgICAgICAgaWYgKHpyZW5hbWUodG1wbGNrLGxja25hbSkgPT0gMCkKKyAgICAgICAg ICBicmVhazsKKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBkYXRhYmFzZSBsb2NrZWQgYnkg cGlkIiwgIiIsIGRicGlkKTsKKyAgICAgICAgc2xlZXAoSUtfTENLU0xFRVApOworICAgIH0KKyAg ICBpZiAodHJpZXMgPCAxKSB7ICAgICAgICAgICAgICAgICAgICAvKiBDb3VsZG4ndCAqLworICAg ICAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGNyZWF0ZSBsb2NrIGZhaWx1cmUiLGxja25hbSwwKTsK KyAgICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgICAgLyogSGF2ZSBsb2NrLCBvcGVuIGRhdGFi YXNlICovCisKKyAgICBkZWJ1ZyhGMTEwLCJnZXRzbG90IGhhcyBsb2NrIixsY2tuYW0sMCk7IC8q IEhhdmUgbG9jayAqLworCisgICAgaWYgKCFkYmZpbGUpCisgICAgICByZXR1cm4oLTEpOworCisg ICAgLyogSWYgZGF0YWJhc2UgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0LiAqLworCisgICAgZGVi dWcoRjExMCwiZ2V0c2xvdCBkYmZpbGUiLGRiZmlsZSwwKTsKKyAgICBpZiAoemNoa2koZGJmaWxl KSA8IDApIHsKKyAgICAgICAgZGVidWcoRjExMCwiZ2V0c2xvdCBjcmVhdGluZyBuZXcgZGF0YWJh c2UiLGRiZmlsZSwwKTsKKyAgICAgICAgeCA9IGNyZWF0KGRiZmlsZSwwNjYwKTsKKyAgICAgICAg aWYgKHggPCAwKSB7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJnZXRzbG90IGNyZWF0KCkgZmFp bGVkIiwgZGJmaWxlLCBlcnJubyk7CisgICAgICAgICAgICBnb3RvIHhzbG90OworICAgICAgICB9 CisgICAgICAgIGNsb3NlKHgpOworICAgIH0KKyAgICBkYmZwID0gZm9wZW4oZGJmaWxlLHVwZG1v ZGUpOyAgICAgICAvKiBPcGVuIGl0IGluIHVwZGF0ZSBtb2RlICovCisgICAgaWYgKCFkYmZwKSB7 CisgICAgICAgIGRlYnVnKEYxMTEsImdldHNsb3QgZm9wZW4gZmFpbGVkIixkYmZpbGUsZXJybm8p OworICAgICAgICBnb3RvIHhzbG90OworICAgIH0KKyAgICAvKiBOb3cgZmluZCBhIGZyZWUgKG9y IG5ldykgc2xvdC4uLiAqLworCisgICAgZGJsYXN0dXNlZCA9IDBMOyAgICAgICAgICAgICAgICAg ICAgLyogU2VlayBwb2ludGVyIHRvIGxhc3QgcmVjb3JkIGludXNlICovCisgICAgbXlkYnNlZWsg PSAwTDsgICAgICAgICAgICAgICAgICAgICAgLyogU2VlayBwb2ludGVyIGZvciBteSByZWNvcmQg Ki8KKworICAgIC8qIFF1aWNrbHkgcmVhZCB0aGUgd2hvbGUgZGF0YWJhc2U7IG4gPSByZWNvcmQg Y291bnRlciwgaSA9IHNlZWsgcG9pbnRlciAqLworCisgICAgZm9yIChuID0gMCwgaSA9IDA7ICFm ZW9mKGRiZnApOyBpICs9IERCX1JFQ0wsIG4rKykgeworICAgICAgICB4ID0gZnJlYWQoZGJyZWMs MSxEQl9SRUNMLGRiZnApOyAvKiBSZWFkIGEgcmVjb3JkICovCisgICAgICAgIGlmICh4IDwgMSkg ICAgICAgICAgICAgICAgICAgICAgLyogRU9GIG5vdCBjYXVnaHQgYnkgZmVvZigpICovCisgICAg ICAgICAgYnJlYWs7CisjaWZuZGVmIE5PRlRSVU5DQVRFCisgICAgICAgIGlmICh4ICE9IERCX1JF Q0wpIHsgICAgICAgICAgICAgLyogV2F0Y2ggb3V0IGZvciB0cmFpbGluZyBqdW5rICovCisgICAg ICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGJhZCBzaXplIiwiIix4KTsgIC8qIChTaG91bGRu J3QgaGFwcGVuLi4uKSAqLworI2lmZGVmIENPSEVSRU5UCisgICAgICAgICAgICBjaHNpemUoZmls ZW5vKGRiZnApLGkpOworI2Vsc2UKKyAgICAgICAgICAgIGZ0cnVuY2F0ZShmaWxlbm8oZGJmcCks KENLX09GRl9UKWkpOworI2VuZGlmIC8qIENPSEVSRU5UICovCisgICAgICAgICAgICB4ID0gMDsK KyAgICAgICAgICAgIENLRlNFRUsoZGJmcCxpLDApOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyNlbmRpZiAvKiBOT0ZUUlVOQ0FURSAqLworICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRz bG90IHJlY29yZCIsIiIsbik7CisgICAgICAgIGsgPSBkYmZsZFtkYl9GTEFHU10ub2ZmOworICAg ICAgICBqID0gZGJmbGRbZGJfRkxBR1NdLmxlbjsKKyAgICAgICAgZGJmbGFncyA9IGhleHRvdWxv bmcoJmRicmVjW2tdLGopOworICAgICAgICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRiZmxhZ3MiLCIi LGRiZmxhZ3MpOworICAgICAgICBrID0gZGJmbGRbZGJfTVlQSURdLm9mZjsKKyAgICAgICAgaiA9 IGRiZmxkW2RiX01ZUElEXS5sZW47CisgICAgICAgIGRicGlkICA9IGhleHRvdWxvbmcoJmRicmVj W2tdLGopOworICAgICAgICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRicGlkIiwiIixkYnBpZCk7Cisg ICAgICAgIGsgPSBkYmZsZFtkYl9TQUREUl0ub2ZmOworICAgICAgICBqID0gZGJmbGRbZGJfU0FE RFJdLmxlbjsKKyAgICAgICAgZGJpcCA9IGhleHRvdWxvbmcoJmRicmVjW2tdLGopOworICAgICAg ICBkZWJ1ZyhGMDAxLCJnZXRzbG90IGRiaXAiLCIiLGRiaXApOworCisgICAgICAgIGlmIChkYmZs YWdzICYgREJGX0lOVVNFKSB7ICAgICAgLyogUmVtZW1iZXIgbGFzdCBzbG90IGluIHVzZSAqLwor ICAgICAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBpdCdz IFJFQUxMWSBpbiB1c2UgKi8KKyAgICAgICAgICAgIGlmIChkYnBpZCA9PSBteXBpZCAmJiBkYmlw ID09IG15aXApIHsgLyogQ2hlY2sgZm9yIFBJRCA9PSBteSBQSUQgKi8KKyAgICAgICAgICAgICAg ICB4ID0gMTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHJlY29yZCBwaWQi LCIiLGRicGlkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAvKiBP ciBmb3Igc3RhbGUgUElEICovCisgICAgICAgICAgICAgICAgeCA9IHpjaGtwaWQoZGJwaWQpOwor ICAgICAgICAgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgemNoa3BpZCgpIiwiIix4KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgheCkgeyAgICAgICAgICAgICAgICAgICAvKiBC b2d1cyByZWNvcmQgKi8KKyAgICAgICAgICAgICAgICB4ID0gZnJlZXNsb3Qobik7CisgICAgICAg ICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBzdGFsZSByZWNvcmQgcGlkOiBmcmVlc2xvdCgp IiwiIix4KTsKKyAgICAgICAgICAgICAgICBpZiAoeCA+IC0xICYmICFoYXZlc2xvdCkKKyAgICAg ICAgICAgICAgICAgIGRiZmxhZ3MgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgIC8qIEl0J3MgcmVhbGx5IGluIHVzZSAqLworICAgICAgICAgICAgICAgIGRibGFz dHVzZWQgPSBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghaGF2ZXNs b3QpIHsgICAgICAgICAgICAgICAgLyogSWYgSSBkb24ndCBoYXZlIGEgc2xvdCB5ZXQgKi8KKyAg ICAgICAgICAgIGlmICghKGRiZmxhZ3MgJiBEQkZfSU5VU0UpKSB7ICAgICAgIC8qIENsYWltIHRo aXMgb25lICovCisgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBmcmVlIHNsb3Qi LCAiIiwgbik7CisgICAgICAgICAgICAgICAgaGF2ZXNsb3QgPSAxOworICAgICAgICAgICAgICAg IG15ZGJzZWVrID0gaTsKKyAgICAgICAgICAgICAgICBteWRic2xvdCA9IG47ICAgICAgICAgICAv KiBCdXQga2VlcCBnb2luZy4uLiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor ICAgIC8qIENvbWUgaGVyZSB3aXRoIGkgPT0gc2VlayBwb2ludGVyIHRvIGZpcnN0IHJlY29yZCBh ZnRlciBlb2YgKi8KKworICAgIGlmICghaGF2ZXNsb3QpIHsgICAgICAgICAgICAgICAgICAgIC8q IEZvdW5kIG5vIGZyZWUgc2xvdCBzbyBhZGQgdG8gZW5kICovCisgICAgICAgIGRlYnVnKEYxMDEs ImdldHNsb3QgbmV3IHNsb3QiLCIiLG4pOworICAgICAgICBoYXZlc2xvdCA9IDE7CisgICAgICAg IG15ZGJzZWVrID0gaTsKKyAgICAgICAgbXlkYnNsb3QgPSBuOworICAgIH0KKyAgICBpa2Rib3Bl biA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBPSyB0byBtYWtlIGRhdGFiYXNlIGVudHJp ZXMgKi8KKyAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IHJlY29yZHMiLCIiLG4pOworICAgIGRlYnVn KEYxMDEsImdldHNsb3QgZGJsYXN0dXNlZCIsIiIsZGJsYXN0dXNlZCk7CisgICAgZGVidWcoRjEw MSwiZ2V0c2xvdCBpIiwiIixpKTsKKworICAgIC8qIFRyaW0gc3RhbGUgcmVjb3JkcyBmcm9tIGVu ZCAqLworCisjaWZuZGVmIE5PRlRSVU5DQVRFCisgICAgaWYgKGkgPiBkYmxhc3R1c2VkK0RCX1JF Q0wpIHsKKyAgICAgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCB0cnVuY2F0aW5nIGF0IiwiIixkYmxh c3R1c2VkK0RCX1JFQ0wpOworI2lmZGVmIENPSEVSRU5UCisgICAgICAgIHggPSBjaHNpemUoZmls ZW5vKGRiZnApLGRibGFzdHVzZWQrREJfUkVDTCk7CisjZWxzZQorICAgICAgICB4ID0gZnRydW5j YXRlKGZpbGVubyhkYmZwKSwoQ0tfT0ZGX1QpKGRibGFzdHVzZWQrREJfUkVDTCkpOworI2VuZGlm IC8qIENPSEVSRU5UICovCisgICAgICAgIGlmICh4IDwgMCkgICAgICAgICAgICAgICAgICAgICAg LyogKE5vdCBmYXRhbCkgKi8KKyAgICAgICAgICBkZWJ1ZyhGMTAxLCJnZXRzbG90IGZ0cnVuY2F0 ZSBmYWlsZWQiLCAiIiwgZXJybm8pOworICAgIH0KKyNlbmRpZiAvKiBOT0ZUUlVOQ0FURSAqLwor CisgICAgLyogSW5pdGlhbGl6ZSBteSByZWNvcmQgKi8KKworICAgIGlmIChpbml0c2xvdChteWRi c2xvdCkgPCAwKSB7CisgICAgICAgIGRlYnVnKEYxMDEsImdldHNsb3QgaW5pdHNsb3QoKSBlcnJv ciIsIiIsbik7CisgICAgICAgIGlrZGJvcGVuID0gMDsKKyAgICAgICAgZ290byB4c2xvdDsKKyAg ICB9CisgICAgZGVidWcoRjEwMSwiZ2V0c2xvdCBPSyIsIiIsbXlkYnNsb3QpOworICAgIHJjID0g bXlkYnNsb3Q7ICAgICAgICAgICAgICAgICAgICAgIC8qIE9LIHJldHVybiBjb2RlICovCisKKyAg eHNsb3Q6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmxvY2sgdGhlIGRhdGFi YXNlIGFuZCByZXR1cm4gKi8KKyAgICBpZiAodW5saW5rKGxja25hbSkgPCAwKSB7CisgICAgICAg IGRlYnVnKEYxMTEsImdldHNsb3QgbG9ja2ZpbGUgcmVtb3ZhbCBmYWlsZWQiLGxja25hbSxlcnJu byk7CisgICAgICAgIHJjID0gLTE7CisgICAgfQorICAgIHJldHVybihyYyk7Cit9CisjZW5kaWYg LyogSUtTREIgKi8KKyNlbmRpZiAvKiBOT0lLU0QgKi8KCmRpZmYgLS1naXQgYS9ja2VybWl0LTku MC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXVzeS5jIGIvY2tlcm1pdC05LjAuMzAyLWJ1 aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V1c3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4xODAyYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxk L2NrZXJtaXQtOS4wLjMwMi9ja3V1c3kuYwpAQCAtMCwwICsxLDQ3NDQgQEAKKyNpbmNsdWRlICJj a2NzeW0uaCIKKyNkZWZpbmUgWEZBVEFMIGZhdGFsCisKKy8qICBDIEsgVSBVIFMgWSAtLSAgIlVz ZXIgSW50ZXJmYWNlIiBmb3IgQy1LZXJtaXQgS2VybWl0LCBwYXJ0IFkgICovCisKKy8qICBDb21t YW5kLUxpbmUgQXJndW1lbnQgUGFyc2VyICovCisKKy8qCisgIEF1dGhvcnM6CisgICAgRnJhbmsg ZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgICAgICBUaGUgS2VybWl0IFByb2plY3QsIENv bHVtYmlhIFVuaXZlcnNpdHksIE5ldyBZb3JrIENpdHkKKyAgICBKZWZmcmV5IEUgQWx0bWFuIDxq YWx0bWFuQHNlY3VyZS1lbmRwb2ludHMuY29tPgorICAgICAgU2VjdXJlIEVuZHBvaW50cyBJbmMu LCBOZXcgWW9yayBDaXR5CisKKyAgQ29weXJpZ2h0IChDKSAxOTg1LCAyMDA5LAorICAgIFRydXN0 ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAg QWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUgQy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBv ciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNj bGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisjaW5jbHVkZSAiY2tjZGViLmgiCisKK2NoYXIg KiBiYW5uZXJmaWxlID0gTlVMTDsKK2NoYXIgKiBoZWxwZmlsZSA9IE5VTEw7CitleHRlcm4gaW50 IHhmZXJsb2csIGZpbGVwZWVrLCBub2xpbmtzOworZXh0ZXJuIGNoYXIgKiB4ZmVyZmlsZTsKK2V4 dGVybiBpbnQgZGVidGltOworCisjaW5jbHVkZSAiY2tjYXNjLmgiCisjaW5jbHVkZSAiY2tja2Vy LmgiCisjaW5jbHVkZSAiY2t1Y21kLmgiCisjaW5jbHVkZSAiY2tjbmV0LmgiCisjaW5jbHVkZSAi Y2t1dXNyLmgiCisjaW5jbHVkZSAiY2tjeGxhLmgiCisjaWZkZWYgQ0tfU1NMCisjaW5jbHVkZSAi Y2tfc3NsLmgiCisjZW5kaWYgLyogQ0tfU1NMICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNp ZmRlZiBPUzIKKyNpbmNsdWRlIDxpby5oPgorI2lmZGVmIEtVSQorI2luY2x1ZGUgImlrdWkuaCIK K2V4dGVybiBzdHJ1Y3QgX2t1aV9pbml0IGt1aV9pbml0OworI2VuZGlmIC8qIEtVSSAqLworI2Vu ZGlmIC8qIE9TMiAqLworCitleHRlcm4gaW50IGluc2VydmVyLCBmbmNudiwgZl9zYXZlLCB4ZmVy bW9kZTsKKyNpZmRlZiBQQVRURVJOUworZXh0ZXJuIGludCBwYXR0ZXJuczsKKyNlbmRpZiAvKiBQ QVRURVJOUyAqLworCisjaWZuZGVmIE5PSUNQCitleHRlcm4gaW50IGNtZGludDsKKyNlbmRpZiAv KiBOT0lDUCAqLworZXh0ZXJuIGludCB4c3VzcGVuZDsKKworI2lmZGVmIE5FVENPTk4KKyNpZmRl ZiBBTllYMjUKK2V4dGVybiBpbnQgcmV2Y2FsbCwgY2xvc2dyLCBjdWRhdGE7CitleHRlcm4gY2hh ciB1ZGF0YVtdOworZXh0ZXJuIGludCB4MjVmZDsKKyNlbmRpZiAvKiBBTllYMjUgKi8KKyNpZm5k ZWYgVk1TCisjaWZuZGVmIE9TMgorI2lmbmRlZiBPU0sKK2V4dGVybgorI2VuZGlmIC8qIE9TSyAq LworI2VuZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIFZNUyAqLworCitpbnQgdGVsbmV0ZmQ7Citl eHRlcm4gc3RydWN0IGtleXRhYiBuZXRjbWRbXTsKK2V4dGVybiBpbnQgdG5fZXhpdDsKKyNpZm5k ZWYgTk9JQ1AKKyNpZm5kZWYgTk9ESUFMCitleHRlcm4gaW50IG5uZXRzLCBubmV0ZGlyOyAgICAg ICAgICAgICAgLyogTmV0d29yayBzZXJ2aWNlcyBkaXJlY3RvcnkgKi8KK2V4dGVybiBjaGFyICpu ZXRkaXJbXTsKK2V4dGVybiBjaGFyICpuaF9wW107ICAgICAgICAgICAgICAgICAgICAvKiBOZXR3 b3JrIGRpcmVjdG9yeSBlbnRyeSBwb2ludGVycyAqLworZXh0ZXJuIGNoYXIgKm5oX3AyW107ICAg ICAgICAgICAgICAgICAgIC8qIE5ldHdvcmsgZGlyZWN0b3J5IGVudHJ5IG5ldHR5cGUgKi8KK2V4 dGVybiBjaGFyICpuaF9weFs0XVtNQVhETlVNUyArIDFdOworI2VuZGlmIC8qIE5PRElBTCAqLwor ZXh0ZXJuIGludCBuaGNvdW50OworZXh0ZXJuIGNoYXIgKiBuX25hbWU7ICAgICAgICAgICAgICAg ICAgIC8qIE5ldHdvcmsgbmFtZSBwb2ludGVyICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKyNlbmRp ZiAvKiBORVRDT05OICovCisKKyNpZm5kZWYgTk9TUEwKK2V4dGVybiBpbnQgbm1hYzsKK2V4dGVy biBzdHJ1Y3QgbXRhYiAqbWFjdGFiOworI2VuZGlmIC8qIE5PU1BMICovCitleHRlcm4gY2hhciB1 aWRidWZbXTsKKworI2lmZGVmIENLX0xPR0lOCitleHRlcm4gaW50IGxvZ2ludGltbzsKKyNlbmRp ZiAvKiBDS19MT0dJTiAqLworCitleHRlcm4gY2hhciAqIG15bmFtZSwgKiBkZnR0eTsKK2V4dGVy biBpbnQgaG93Y2FsbGVkOworCitleHRlcm4gY2hhciAqY2t4c3lzLCAqY2t6c3lzLCAqKnhhcmd2 LCAqeGFyZzAsICoqY21saXN0LCAqY2xjbWRzOworCitleHRlcm4gaW50IGFjdGlvbiwgY2ZsZywg eGFyZ2MsIGNuZmxnLCBsb2NhbCwgcXVpZXQsIGVzY2FwZSwgbmV0d29yaywgbWRtdHlwLAorICBi Z3NldCwgYmFja2dyZCwgeGFyZ3MsIGJpbmFyeSwgcGFyaXR5LCB0dXJuLCB0dXJuY2gsIGR1cGxl eCwgZmxvdywgY2xmaWxzLAorICBub2luaXQsIHN0YXlmbGcsIG5ldHR5cGUsIGNmaWxlZiwgbm9o ZXJhbGQsIGNtYXNrLCBjbWRtc2ssIGV4aXRvbmNsb3NlLAorICBoYXZlbGluZSwganVzdG9uZSwg Y3h0eXBlLCB4ZmluaXNoLCB0dG5wcm90bzsKKworZXh0ZXJuIGxvbmcgc3BlZWQ7CitleHRlcm4g Y2hhciB0dG5hbWVbXTsKK2V4dGVybiBjaGFyICogcGlwZWRhdGEsICogY21kZmlsOworCisjaWZu ZGVmIE5PWEZFUgorZXh0ZXJuIGNoYXIgKmNtYXJnLCAqY21hcmcyOworCitleHRlcm4gaW50IG5m aWxzLCBzdGRvdWYsIHN0ZGluZiwgZGlzcGxhLCBtYXhycHMsIHJwc2l6LCBja3dhcm4sIHVycHNp eiwKKyAgd3Nsb3RyLCBzd2NhcHIsIGNrZGVsYXksIHJlY3Vyc2l2ZSwgcmVsaWFibGUsIHhyZWxp YWJsZSwgZm5zcGF0aCwgZm5jYWN0LAorICBjbGVhcnJxLCBzZXRyZWxpYWJsZTsKKworI2lmZGVm IFBJUEVTRU5ECitleHRlcm4gaW50IHVzZXBpcGVzLCBwaXBlc2VuZDsKKyNlbmRpZiAvKiBQSVBF U0VORCAqLworZXh0ZXJuIGludCBwcm90b2NvbDsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lm bmRlZiBOT1BVU0gKK2V4dGVybiBpbnQgbm9wdXNoOworI2VuZGlmIC8qIE5PUFVTSCAqLworCisj aWZkZWYgT1MyCitleHRlcm4gc3RydWN0IGtleXRhYiBvczJkZXZ0YWJbXTsKK2V4dGVybiBpbnQg bm9zMmRldjsKK2V4dGVybiBpbnQgdHRzbGlwOworZXh0ZXJuIGludCB0dF9zY3JvbGwsIHR0X2Vz Y2FwZTsKKyNpZmRlZiBPUzJQTQorZXh0ZXJuIGludCBvczJwbTsKKyNlbmRpZiAvKiBPUzJQTSAq LworI2VuZGlmIC8qIE9TMiAqLworCisjaWZkZWYgQ0tfTkVUQklPUworZXh0ZXJuIHVuc2lnbmVk IGNoYXIgTmV0Qmlvc0FkYXB0ZXI7CisjZW5kaWYgLyogQ0tfTkVUQklPUyAqLworCisjaWZkZWYg WEZBVEFMCisjdW5kZWYgWEZBVEFMCisjZW5kaWYgLyogWEZBVEFMICovCisKKyNpZmRlZiBUTkNP REUKK19QUk9UT1RZUChzdGF0aWMgaW50IGRvdG5hcmcsIChjaGFyIHgpICk7CisjZW5kaWYgLyog VE5DT0RFICovCisjaWZkZWYgUkxPR0NPREUKK19QUk9UT1RZUChzdGF0aWMgaW50IGRvcmxnYXJn LCAoY2hhciB4KSApOworI2VuZGlmIC8qIFJMT0dDT0RFICovCisjaWZkZWYgU1NIQlVJTFRJTgor X1BST1RPVFlQKHN0YXRpYyBpbnQgZG9zc2hhcmcsIChjaGFyIHgpICk7CisjZW5kaWYgLyogU1NI QlVJTFRJTiAqLworCitpbnQgaGF2ZWZ0cHVpZCA9IDA7CQkJLyogSGF2ZSBGVFAgdXNlciBJRCAq Lworc3RhdGljIGludCBoYXZlX2N4ID0gMDsJCQkvKiBIYXZlIGNvbm5lY3Rpb24gKi8KKworc3Rh dGljIGNoYXIgKiBmYWlsbXNnID0gTlVMTDsJCS8qIEZhaWx1cmUgbWVzc2FnZSAqLworCisjaWZk ZWYgTkVXRlRQCitleHRlcm4gY2hhciAqIGZ0cF9ob3N0OworI2VuZGlmIC8qIE5FV0ZUUCAqLwor CitleHRlcm4gaW50IHdoYXQ7CisKKyNpZm5kZWYgTk9JQ1AKKyNpZm5kZWYgTk9ESUFMCitleHRl cm4gaW50IG5tZG0sIHRlbGVwaG9ueTsKK2V4dGVybiBzdHJ1Y3Qga2V5dGFiIG1kbXRhYltdOwor ZXh0ZXJuIGludCB1c2VybWRtLCBkaWFsdWR0OworI2VuZGlmIC8qIE5PRElBTCAqLworX1BST1RP VFlQKHN0YXRpYyBpbnQgcG1zZywgKGNoYXIgKikgKTsKK19QUk9UT1RZUChzdGF0aWMgaW50IGZt c2csIChjaGFyICopICk7CitzdGF0aWMgaW50IHBtc2cocykgY2hhciAqczsgeyBwcmludGYoIiVz XG4iLCBzKTsgcmV0dXJuKDApOyB9CitzdGF0aWMgaW50IGZtc2cocykgY2hhciAqczsgeyBmYXRh bChzKTsgcmV0dXJuKDApOyB9CisjZGVmaW5lIFhGQVRBTChzKSByZXR1cm4od2hhdD09V19DT01N QU5EP3Btc2cocyk6Zm1zZyhzKSkKKyNlbHNlCisjZGVmaW5lIFhGQVRBTCBmYXRhbAorI2VuZGlm IC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9IVFRQCisjZGVmaW5lIEhUVFBfR0VUIDEKKyNkZWZp bmUgSFRUUF9QVVQgMgorI2RlZmluZSBIVFRQX0hFRCAzCisjZW5kaWYgLyogTk9IVFRQICovCisK KyNpZmRlZiBDS19VUkwKKy8qIFVSTHMgd2UgcmVjb2duaXplICovCisKKyNkZWZpbmUgVVJMX0ZU UCAgICAxCisjZGVmaW5lIFVSTF9IVFRQICAgMgorI2RlZmluZSBVUkxfSFRUUFMgIDMKKyNkZWZp bmUgVVJMX0lLU0QgICA0CisjZGVmaW5lIFVSTF9URUxORVQgNQorI2RlZmluZSBVUkxfTE9HSU4g IDYKKworc3RydWN0IGtleXRhYiB1cmx0YWJbXSA9IHsKKyNpZmRlZiBORVdGVFAKKyAgICAiZnRw IiwgICAgVVJMX0ZUUCwgICAgMCwKKyNlbmRpZiAvKiBORVdGVFAgKi8KKyNpZm5kZWYgTk9IVFRQ CisgICAgImh0dHAiLCAgIFVSTF9IVFRQLCAgIDAsCisgICAgImh0dHBzIiwgIFVSTF9IVFRQUywg IDAsCisjZW5kaWYgLyogTk9IVFRQICovCisgICAgImlrc2QiLCAgIFVSTF9JS1NELCAgIDAsCisg ICAgImtlcm1pdCIsIFVSTF9JS1NELCAgIDAsCisgICAgInRlbG5ldCIsIFVSTF9URUxORVQsIDAs CisgICAgIiIsIDAsIDAKK307CitpbnQgbnVybHRhYiA9IHNpemVvZih1cmx0YWIpL3NpemVvZihz dHJ1Y3Qga2V5dGFiKSAtIDE7CisKKyNpZm5kZWYgVVJMQlVGTEVOCisjZGVmaW5lIFVSTEJVRkxF TiAxMDI0CisjZW5kaWYgLyogVVJMQlVGTEVOICovCitzdGF0aWMgY2hhciB1cmxidWZbVVJMQlVG TEVOXTsKK3N0cnVjdCB1cmxkYXRhIGdfdXJsID0ge05VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCxO VUxMLE5VTEx9OworCisvKiB1IHIgbCBwIGEgciBzIGUgIC0tICBQYXJzZSBhIHBvc3NpYmxlIFVS TCAqLworCisvKgorICBSZXR1cm5zIDAgaWYgdGhlIGNhbmRpZGF0ZSBkb2VzIG5vdCBzZWVtIHRv IGJlIGEgVVJMLgorICBSZXR1cm5zIDEgaWYgaXQgbWlnaHQgYmUgYSBVUkwsIHdpdGggdGhlIGFi b3ZlIHBvaW50ZXJzIHNldCB0byBpdHMgcGllY2VzOgorICAgIHNlcnZpY2UgOiBbIC8vIF0gWyB1 c2VyIFsgOiBwYXNzd29yZCBdIEAgXSBob3N0IFsgOiBzZXJ2aWNlIF0gWyAvIHBhdGggXSAtCisg ICAgICAgICAgICAgIFsgPyBuYW1lIFsgPSB2YWx1ZSBdXQorCisgIEV4YW1wbGU6IGZ0cDovL2Rz LmludGVybmljLm5ldDoyMS9yZmMvcmZjMTIzNC50eHQKKyAgICB1cmwuc3ZjID0gW2Z0cF0KKyAg ICB1cmwudXNyID0gWyhOVUxMKV0KKyAgICB1cmwucHN3ID0gWyhOVUxMKV0KKyAgICB1cmwuaG9z ID0gW2RzLmludGVybmljLm5ldF0KKyAgICB1cmwucG9yID0gWzIxXQorICAgIHVybC5wdGggPSBb cmZjL3JmYzEyMzQudHh0XQorCisgIEl0IG1pZ2h0IGJlIGEgVVJMIGlmIGl0IGNvbnRhaW5zIGEg cG9zc2libGUgc2VydmljZSBuYW1lIGZvbGxvd2VkIGJ5IGEKKyAgYSBjb2xvbiAoOikuICBUaHVz ICJ0ZWxuZXQ6eHl6Y29ycC5jb20iIGlzIGEgbWluaW1hbCBVUkwsIHdoZXJlYXMgYQorICBmdWxs LWJsb3duIGV4YW1wbGUgd291bGQgYmU6CisKKyAgICBmdHA6Ly9vbGdhOnNlY3JldEBmdHAueHl6 Y29ycC5jb20vcHVibGljL29vZmEudHh0CisKKyAgVGhlIGNhbGxlciBtdXN0IHZlcmlmeSB0aGUg cmVzdWx0cywgaS5lLiB0aGF0IHRoZSBzZXJ2aWNlIHN0cmluZyBpcyBhIHJlYWwKKyAgVENQIHNl cnZpY2UsIGV0Yy4gIFRoaXMgcm91dGluZSBqdXN0IHBhcnNlcyB0aGUgZmllbGRzLgorCisgIHN0 cnVjdCB1cmxkYXRhIGRlZmluZWQgaW4gY2tja2VyLmgKKyovCisKK2ludAordXJscGFyc2Uocyx1 cmwpIGNoYXIgKnM7IHN0cnVjdCB1cmxkYXRhICogdXJsOyB7CisgICAgY2hhciAqIHAgPSBOVUxM LCAqIHVybGJ1ZiA9IE5VTEw7CisgICAgaW50IHg7CisKKyAgICBpZiAoIXMgfHwgIXVybCkKKyAg ICAgICAgcmV0dXJuKDApOworCisgICAgaWYgKCEqcykKKyAgICAgICAgcmV0dXJuKDApOworCisg ICAgbWFrZXN0cigmdXJsYnVmLHMpOworCisgICAgaWYgKHVybC0+c2F2KSB7CQkJLyogSW4gY2Fz ZSB3ZSB3ZXJlIGNhbGxlZCBiZWZvcmUuLi4gKi8KKyAgICAgICAgZnJlZSh1cmwtPnNhdik7Cisg ICAgICAgIHVybC0+c2F2ID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHVybC0+c3ZjKSB7CisgICAg ICAgIGZyZWUodXJsLT5zdmMpOworICAgICAgICB1cmwtPnN2YyA9IE5VTEw7CisgICAgfQorICAg IGlmICh1cmwtPmhvcykgeworICAgICAgICBmcmVlKHVybC0+aG9zKTsKKyAgICAgICAgdXJsLT5o b3MgPSBOVUxMOworICAgIH0KKyAgICBpZiAodXJsLT5wb3IpIHsKKyAgICAgICAgZnJlZSh1cmwt PnBvcik7CisgICAgICAgIHVybC0+cG9yID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHVybC0+dXNy KSB7CisgICAgICAgIGZyZWUodXJsLT51c3IpOworICAgICAgICB1cmwtPnVzciA9IE5VTEw7Cisg ICAgfQorICAgIGlmICh1cmwtPnBzdykgeworICAgICAgICBmcmVlKHVybC0+cHN3KTsKKyAgICAg ICAgdXJsLT5wc3cgPSBOVUxMOworICAgIH0KKyAgICBpZiAodXJsLT5wdGgpIHsKKyAgICAgICAg ZnJlZSh1cmwtPnB0aCk7CisgICAgICAgIHVybC0+cHRoID0gTlVMTDsKKyAgICB9CisgICAgaWYg KHVybC0+bm9wdHMpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB1 cmwtPm5vcHRzICYmIGkgPCBNQVhfVVJMX09QVFM7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICh1 cmwtPm9wdFtpXS5uYW0pIHsKKyAgICAgICAgICAgICAgICBmcmVlKHVybC0+b3B0W2ldLm5hbSk7 CisgICAgICAgICAgICAgICAgdXJsLT5vcHRbaV0ubmFtID0gTlVMTDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGlmICh1cmwtPm9wdFtpXS52YWwpIHsKKyAgICAgICAgICAgICAgICBmcmVl KHVybC0+b3B0W2ldLnZhbCk7CisgICAgICAgICAgICAgICAgdXJsLT5vcHRbaV0udmFsID0gTlVM TDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB1cmwtPm5vcHRzID0gMDsKKyAg ICB9CisgICAgcCA9IHVybGJ1ZjsJCQkJLyogV2FzIGEgc2VydmljZSByZXF1ZXN0ZWQ/ICovCisg ICAgd2hpbGUgKCpwICYmICpwICE9ICc6JykJCS8qIExvb2sgZm9yIGNvbG9uICovCisgICAgICBw Kys7CisgICAgaWYgKCpwID09ICc6JykgeyAgICAgICAgICAgICAgICAgICAgLyogSGF2ZSBhIGNv bG9uICovCisgICAgICAgICpwKysgPSBOVUw7CQkJLyogR2V0IHNlcnZpY2UgbmFtZSBvciBudW1i ZXIgKi8KKyAgICAgICAgaWYgKCpwID09ICc6JykJCQkvKiBhIHNlY29uZCBjb2xvbiAqLworICAg ICAgICAgICpwKysgPSBOVUw7CQkJLyogZ2V0IHJpZCBvZiB0aGF0IG9uZSB0b28gKi8KKyAgICAg ICAgd2hpbGUgKCpwID09ICcvJykgKnArKyA9IE5VTDsJLyogYW5kIHNsYXNoZXMgKi8KKyNpZmRl ZiBDT01NRU5UCisgICAgICAgIC8qIFRyYWlsaW5nIHNsYXNoIGlzIHBhcnQgb2YgcGF0aCAtIGxl YXZlIGl0IC0gamFsdG1hbiAqLworICAgICAgICB4ID0gc3RybGVuKHApOyAgICAgICAgICAgICAg ICAgIC8qIExlbmd0aCBvZiByZW1haW5kZXIgKi8KKyAgICAgICAgaWYgKHBbeC0xXSA9PSAnLycp ICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBhIHRyYWlsaW5nIHNsYXNoICovCisgICAgICAg ICAgcFt4LTFdID0gTlVMOwkJCS8qIHJlbW92ZSBpdC4gKi8KKyNlbmRpZiAvKiBDT01NRU5UICov CisgICAgICAgIGlmICh1cmxidWZbMF0pIHsJCS8qIEFueXRoaW5nIGxlZnQ/ICovCisgICAgICAg ICAgICBjaGFyICpxID0gcCwgKnIgPSBwLCAqdyA9IHA7CisJICAgIG1ha2VzdHIoJnVybC0+c3Zj LHVybGJ1Zik7CisKKyAgICAgICAgICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAgIT0gJ0AnKSAv KiBsb29rIGZvciBAICovCisJICAgICAgcCsrOworICAgICAgICAgICAgaWYgKCpwID09ICdAJykg ewkJLyogU2lnbmlmaWVzIHVzZXIgSUQsIG1heWJlIHBhc3N3b3JkICovCisgICAgICAgICAgICAg ICAgKnArKyA9IE5VTDsKKwkJdXJsLT5ob3MgPSBwOworICAgICAgICAgICAgICAgIHdoaWxlICgq dyAhPSBOVUwgJiYgKncgIT0gJzonKQorICAgICAgICAgICAgICAgICAgdysrOworICAgICAgICAg ICAgICAgIGlmICgqdyA9PSAnOicpCisgICAgICAgICAgICAgICAgICAqdysrID0gTlVMOworCQl1 cmwtPnVzciA9IHI7CQkvKiBVc2VybmFtZSAqLworCQlpZiAoKncpCisJCSAgdXJsLT5wc3cgPSB3 OwkJLyogUGFzc3dvcmQgKi8KKyAgICAgICAgICAgICAgICBxID0gcDsKKyAgICAgICAgICAgIH0g ZWxzZSB7CQkJLyogTm8gdXNlcm5hbWUgb3IgcGFzc3dvcmQgKi8KKyAgICAgICAgICAgICAgICBw ID0gcTsKKwkJdXJsLT5ob3MgPSBwOworICAgICAgICAgICAgfQorI2lmZGVmIENPTU1FTlQKKwkg ICAgZGVidWcoRjExMSwidXJscGFyc2UgdXJsLT51c3IiLHVybC0+dXNyLHVybC0+dXNyKTsKKwkg ICAgZGVidWcoRjExMSwidXJscGFyc2UgdXJsLT5wc3ciLHVybC0+dXNyLHVybC0+cHN3KTsKKwkg ICAgZGVidWcoRjExMSwidXJscGFyc2UgdXJsLT5ob3MiLHVybC0+dXNyLHVybC0+aG9zKTsKKyNl bmRpZgkvKiBDT01NRU5UICovCisKKyAgICAgICAgICAgIHdoaWxlICgqcCAhPSBOVUwgJiYgKnAg IT0gJzonICYmICpwICE9ICcvJykJLyogUG9ydD8gKi8KKyAgICAgICAgICAgICAgcCsrOworICAg ICAgICAgICAgaWYgKCpwID09ICc6JykgewkJLyogVENQIHBvcnQgKi8KKyAgICAgICAgICAgICAg ICAqcCsrID0gTlVMOworICAgICAgICAgICAgICAgIHIgPSBwOworCQl1cmwtPnBvciA9IHI7Cisg ICAgICAgICAgICAgICAgd2hpbGUgKCpwICE9IE5VTCAmJiAqcCAhPSAnLycpCisJCSAgcCsrOwor ICAgICAgICAgICAgICAgIC8qICcvJyBpcyBwYXJ0IG9mIHBhdGgsIGxlYXZlIGl0IHVudGlsIHdl IGNhbiBjb3B5ICovCisgICAgICAgICAgICAgICAgaWYgKCpwID09ICcvJykgeworCQkgICAgbWFr ZXN0cigmdXJsLT5wdGgscCk7ICAvKiBQYXRoICovCisJCSAgICAqcCA9IE5VTDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgewkJCS8qIE5vIHBvcnQgKi8KKyAgICAgICAg ICAgICAgICAvKiAnLycgaXMgcGFydCBvZiBwYXRoLCBsZWF2ZSBpdCAqLworICAgICAgICAgICAg ICAgIGlmICgqcCA9PSAnLycpIHsKKwkJICAgIG1ha2VzdHIoJnVybC0+cHRoLHApOyAgLyogUGF0 aCAqLworCQkgICAgKnAgPSBOVUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisJLyogQ29weSBub24tTlVMTCByZXN1bHQgc3RyaW5ncyAqLworCWlmICh1cmwt PnN2YykgaWYgKCp1cmwtPnN2YykgeworICAgICAgICAgICAgcCA9IHVybC0+c3ZjOworICAgICAg ICAgICAgdXJsLT5zdmMgPSBOVUxMOworICAgICAgICAgICAgbWFrZXN0cigmdXJsLT5zdmMscCk7 CisgICAgICAgIH0KKwlpZiAodXJsLT5ob3MpIGlmICgqdXJsLT5ob3MpIHsKKyAgICAgICAgICAg IHAgPSB1cmwtPmhvczsKKyAgICAgICAgICAgIHVybC0+aG9zID0gTlVMTDsKKyAgICAgICAgICAg IG1ha2VzdHIoJnVybC0+aG9zLHApOworICAgICAgICB9CisJaWYgKHVybC0+cG9yKSBpZiAoKnVy bC0+cG9yKSB7CisgICAgICAgICAgICBwID0gdXJsLT5wb3I7CisgICAgICAgICAgICB1cmwtPnBv ciA9IE5VTEw7CisgICAgICAgICAgICBtYWtlc3RyKCZ1cmwtPnBvcixwKTsKKyAgICAgICAgfQor LyoKKyAgV0FSTklORyAoV2VkIE9jdCAgOSAxNjowOTowMyAyMDAyKTogV2Ugbm93IGFsbG93IHRo ZSB1c2VybmFtZSBhbmQKKyAgcGFzc3dvcmQgdG8gYmUgZW1wdHkgc3RyaW5ncy4gIFRoZXNlIGFy ZSB0cmVhdGVkIGRpZmZlcmVudGx5IGZyb20gbnVsbAorICBwb2ludGVyczogYW4gZW1wdHkgc3Ry aW5nIG1lYW5zIHRoZSBVUkwgaW5jbHVkZWQgdXNlcm5hbWUgYW5kL29yIHBhc3N3b3JkCisgIGZp ZWxkcyB0aGF0IHdlcmUgZW1wdHksIGUuZy4gZnRwOi8vOkBmdHAueHl6Y29ycC5jb20vc29tZXBh dGgvc29tZWZpbGUsCisgIHdoaWNoIGNhdXNlcyB0aGUgY2xpZW50IHRvIHByb21wdCBmb3IgdGhl IHVzZXJuYW1lIGFuZC9vciBwYXNzd29yZC4KKyovCisJaWYgKHVybC0+dXNyKSAvKiBpZiAoKnVy bC0+dXNyKSAqLyB7CisgICAgICAgICAgICBwID0gdXJsLT51c3I7CisgICAgICAgICAgICB1cmwt PnVzciA9IE5VTEw7CisgICAgICAgICAgICBtYWtlc3RyKCZ1cmwtPnVzcixwKTsKKyAgICAgICAg fQorCWlmICh1cmwtPnBzdykgLyogaWYgKCp1cmwtPnBzdykgKi8geworICAgICAgICAgICAgcCA9 IHVybC0+cHN3OworICAgICAgICAgICAgdXJsLT5wc3cgPSBOVUxMOworICAgICAgICAgICAgbWFr ZXN0cigmdXJsLT5wc3cscCk7CisgICAgICAgIH0KKyAgICAgICAgLyogU2F2ZSBhIGNvcHkgb2Yg dGhlIGZ1bGwgdXJsIGlmIG9uZSB3YXMgZm91bmQuICovCisJaWYgKHVybC0+c3ZjKSAKKwkgIG1h a2VzdHIoJnVybC0+c2F2LHMpOworICAgICAgICBmcmVlKHVybGJ1Zik7CisJcmV0dXJuKHVybC0+ c3ZjID8gMSA6IDApOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisjZW5kaWYgLyogQ0tfVVJM ICovCisKKyNpZm5kZWYgTk9DTURMCisKK2NoYXIgKmhscDFbXSA9IHsKKyNpZm5kZWYgTk9JQ1AK KyIgW2ZpbGVuYW1lXSBbLXggYXJnIFsteCBhcmddLi4uWy15eXldLi5dIFsgPSB0ZXh0IF0gXVxu IiwKKyNlbHNlCisiWy14IGFyZyBbLXggYXJnXS4uLlsteXl5XS4uXVxuIiwKKyNlbmRpZiAvKiBO T0lDUCAqLworIlxuIiwKKyIgIC14IGlzIGFuIG9wdGlvbiByZXF1aXJpbmcgYW4gYXJndW1lbnQs IC15IGFuIG9wdGlvbiB3aXRoIG5vIGFyZ3VtZW50LlxuIiwKKyIgIElmIHRoZSBmaXJzdCBjb21t YW5kLWxpbmUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgYSBmaWxlLCBpbnRlcmFjdGl2ZS1cbiIs CisiICBtb2RlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBmcm9tIHRoZSBmaWxlLiAgVGhlICc9JyBh cmd1bWVudCB0ZWxscyBLZXJtaXRcbiIsCisiICBub3QgdG8gcGFyc2UgdGhlIHJlbWFpbmRlciBv ZiB0aGUgY29tbWFuZCBsaW5lLCBidXQgdG8gbWFrZSB0aGUgd29yZHNcbiIsCisiICBmb2xsb3dp bmcgJz0nIGF2YWlsYWJsZSBhcyBcXCUxLCBcXCUyLCAuLi4gXFwlOS4gIFRoZSBjb21tYW5kIGZp bGUgXAorKGlmIGFueSlcbiIsCisiICBpcyBleGVjdXRlZCBiZWZvcmUgdGhlIGNvbW1hbmQtbGlu ZSBvcHRpb25zLlxuIiwKKyJcbiIsCisjaWZuZGVmIE5PSUNQCisiSWYgbm8gYWN0aW9uIGNvbW1h bmQgaXMgaW5jbHVkZWQsIG9yIC1TIGlzLCB0aGVuIGFmdGVyIHRoZSBjb21tYW5kIGxpbmUgaXNc biIsCisiZXhlY3V0ZWQsIEtlcm1pdCBpc3N1ZXMgaXRzIHByb21wdCBhbmQgd2FpdHMgZm9yIHlv dSB0byB0eXBlIGNvbW1hbmRzLlxuIiwKKyNlbHNlCisiT3BlcmF0aW9uIGJ5IGNvbW1hbmQtbGlu ZSBvcHRpb25zIG9ubHkuXG4iLAorI2VuZGlmIC8qIE5PSUNQICovCisiIgorfTsKKworc3RhdGlj CitjaGFyICpobHAyW10gPSB7CisiICBbb3B0aW9uLWxpc3RdIGhvc3RbOnBvcnRdIFtwb3J0XVxu IiwKKyIgIFRoZSBvcHRpb24tbGlzdCBjb25zaXN0cyBvZiB6ZXJvLCBvbmUsIG9yIG1vcmUgb2Y6 XG4iLAorIiAgLTggICAgICAgICAgICAgICAgTmVnb3RpYXRlIFRlbG5ldCBCaW5hcnkgaW4gYm90 aCBkaXJlY3Rpb25zXG4iLAorIiAgLWEgICAgICAgICAgICAgICAgUmVxdWlyZSB1c2Ugb2YgVGVs bmV0IGF1dGhlbnRpY2F0aW9uXG4iLAorIiAgLWQgICAgICAgICAgICAgICAgVHVybiBvbiBkZWJ1 ZyBtb2RlXG4iLAorIiAgLUUgICAgICAgICAgICAgICAgTm8gZXNjYXBlIGNoYXJhY3RlclxuIiwK KyIgIC1LICAgICAgICAgICAgICAgIFJlZnVzZSB1c2Ugb2YgYXV0aGVudGljYXRpb247IGRvIG5v dCBzZW5kIHVzZXJuYW1lXG4iLAorIiAgLWwgdXNlciAgICAgICAgICAgU2V0IHVzZXJuYW1lIGFu ZCByZXF1ZXN0IFRlbG5ldCBhdXRoZW50aWNhdGlvblxuIiwKKyIgIC1MICAgICAgICAgICAgICAg IE5lZ290aWF0ZSBUZWxuZXQgQmluYXJ5IE91dHB1dCBvbmx5XG4iLAorIiAgLXggICAgICAgICAg ICAgICAgUmVxdWlyZSBFbmNyeXB0aW9uXG4iLAorIiAgLUQgICAgICAgICAgICAgICAgRGlzYWJs ZSBmb3J3YXJkLVhcbiIsCisiICAtVCBjZXJ0PWZpbGUgICAgICBVc2UgY2VydGlmaWNhdGUgaW4g ZmlsZVxuIiwKKyIgIC1UIGtleT1maWxlICAgICAgIFVzZSBwcml2YXRlIGtleSBpbiBmaWxlXG4i LAorIiAgLVQgY3JsZmlsZT1maWxlICAgVXNlIENSTCBpbiBmaWxlXG4iLAorIiAgLVQgY3JsZGly PWRpciAgICAgVXNlIENSTHMgaW4gZGlyZWN0b3J5XG4iLAorIiAgLVQgY2lwaGVyPXN0cmluZyAg VXNlIG9ubHkgY2lwaGVycyBpbiBzdHJpbmdcbiIsCisiICAtZiAgICAgICAgICAgICAgICBGb3J3 YXJkIGNyZWRlbnRpYWxzIHRvIGhvc3RcbiIsCisiICAtayByZWFsbSAgICAgICAgICBTZXQgZGVm YXVsdCBLZXJiZXJvcyByZWFsbVxuIiwKKyIiCit9OworCitzdGF0aWMKK2NoYXIgKmhscDNbXSA9 IHsgICAgICAgIC8qIHJsb2dpbiAqLworIiAgW29wdGlvbi1saXN0XSBob3N0Wzpwb3J0XSBbcG9y dF1cbiIsCisiICBUaGUgb3B0aW9uLWxpc3QgY29uc2lzdHMgb2YgemVybywgb25lLCBvciBtb3Jl IG9mOlxuIiwKKyIgIC1kICAgICAgICAgICAgICAgIFR1cm4gb24gZGVidWcgbW9kZVxuIiwKKyIg IC1sIHVzZXIgICAgICAgICAgIFNldCB1c2VybmFtZVxuIiwKKyIiCit9OworCitzdGF0aWMKK2No YXIgKmhscDRbXSA9IHsgICAgICAgIC8qIHNzaCAqLworIiAgW29wdGlvbi1saXN0XSBob3N0Wzpw b3J0XSBbcG9ydF1cbiIsCisiICBUaGUgb3B0aW9uLWxpc3QgY29uc2lzdHMgb2YgemVybywgb25l LCBvciBtb3JlIG9mOlxuIiwKKyNpZmRlZiBPUzIKKyIgIC0jIGZsYWdzICAgICAgICAgIEtlcm1p dCA5NSBTdGFydHVwIEZsYWdzXG4iLAorIiAgICAgICAxICAgICAgICAgICAgICB0dXJuIG9mZiBX aW45NSBzcGVjaWFsIGZpeGVzXG4iLAorIiAgICAgICAyICAgICAgICAgICAgICBkbyBub3QgbG9h ZCBvcHRpb25hbCBuZXR3b3JrIGRsbHNcbiIsCisiICAgICAgIDQgICAgICAgICAgICAgIGRvIG5v dCBsb2FkIG9wdGlvbmFsIHRhcGkgZGxsc1xuIiwKKyIgICAgICAgOCAgICAgICAgICAgICAgZG8g bm90IGxvYWQgb3B0aW9uYWwga2VyYmVyb3MgZGxsc1xuIiwKKyIgICAgICAxNiAgICAgICAgICAg ICAgZG8gbm90IGxvYWQgb3B0aW9uYWwgem1vZGVtIGRsbHNcbiIsCisiICAgICAgMzIgICAgICAg ICAgICAgIHVzZSBzdGRpbiBmb3IgaW5wdXQgaW5zdGVhZCBvZiB0aGUgY29uc29sZVxuIiwKKyIg ICAgICA2NCAgICAgICAgICAgICAgdXNlIHN0ZG91dCBmb3Igb3V0cHV0IGluc3RlYWQgb2YgdGhl IGNvbnNvbGVcbiIsCisiICAgICAxMjggICAgICAgICAgICAgIGRvIG5vdCB0ZXJtaW5hdGUgcHJv Y2VzcyBpbiByZXNwb25zZSB0byBTZXNzaW9uIExvZ29mZlxuIiwKKyNlbmRpZiAvKiBPUzIgKi8K KyIgIC1kICAgICAgICAgICAgICAgIFR1cm4gb24gZGVidWcgbW9kZVxuIiwKKyIgIC1ZICAgICAg ICAgICAgICAgIERpc2FibGUgaW5pdCBmaWxlIHByb2Nlc3NpbmdcbiIsCisiICAtbCB1c2VyICAg ICAgICAgICBTZXQgdXNlcm5hbWVcbiIsCisiIgorfTsKKworLyogQ29tbWFuZC1saW5lIG9wdGlv biBoZWxwIGxpbmVzLiAgVXBkYXRlIHRoaXMgd2hlbiBhZGRpbmcgbmV3IG9wdGlvbnMhICovCisK K2NoYXIgKiBvcHRobHBbMTI4XTsgICAgICAgICAgICAgICAgICAgICAvKiBPcHRpb24gaGVscCAq LworY2hhciAqIGFyZ2hscFsxMjhdOyAgICAgICAgICAgICAgICAgICAgIC8qIEFyZ3VtZW50IGZv ciBvcHRpb24gKi8KK2ludCBvcHRhY3RbMTI4XTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBB Y3Rpb24tb3B0aW9uIGZsYWcgKi8KKworVk9JRAorZmF0YWwyKG1zZzEsbXNnMikgY2hhciAqbXNn MSwgKm1zZzI7IHsKKyAgICBjaGFyIGJ1ZlsyNTZdOworICAgIGlmICghbXNnMSkgbXNnMSA9ICIi OworICAgIGlmICghbXNnMikgbXNnMiA9ICIiOworICAgIGNrbWFrbXNnKGJ1ZiwyNTYsIlwiIixt c2cxLCJcIiAtICIsbXNnMik7CisjaWZuZGVmIE5PSUNQCisgICAgaWYgKHdoYXQgPT0gV19DT01N QU5EKQorICAgICAgcHJpbnRmKCIlc1xuIixidWYpOworICAgIGVsc2UKKyNlbmRpZiAvKiBOT0lD UCAqLworICAgICAgZmF0YWwoKGNoYXIgKilidWYpOworfQorCitzdGF0aWMgU0lHVFlQCisjaWZk ZWYgQ0tfQU5TSQorY2xfaW50KGludCBkdW1teSkKKyNlbHNlIC8qIENLX0FOU0kgKi8KK2NsX2lu dChkdW1teSkgaW50IGR1bW15OworI2VuZGlmIC8qIENLX0FOU0kgKi8KK3sJCQkJCS8qIENvbW1h bmQtbGluZSBpbnRlcnJ1cHQgaGFuZGxlciAqLworICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAg ICBTSUdSRVRVUk47Cit9CisKKyNpZmRlZiBORVdGVFAKK2V4dGVybiBpbnQgZnRwX2FjdGlvbiwg ZnRwX2NtZGxpbjsKKworc3RhdGljIGludAoreHhfZnRwKGhvc3QsIHBvcnQpIGNoYXIgKiBob3N0 LCAqIHBvcnQ7IHsKKyNpZmRlZiBDS19VUkwKKyAgICBleHRlcm4gaW50IGhhdmV1cmw7CisjZW5k aWYgLyogQ0tfVVJMICovCisgICAgZXh0ZXJuIGNoYXIgKiBmdHBfbG9nbmFtZTsKKyAgICBpbnQg dXNlX3RscyA9IDA7CisgICAgY2hhciAqIHA7CisKKyAgICBpZiAocG9ydCkgaWYgKCEqcG9ydCkg cG9ydCA9IE5VTEw7CisKKyAgICBpZiAoIWhvc3QpCisgICAgICByZXR1cm4oMCk7CisgICAgaWYg KCEqaG9zdCkKKyAgICAgIHJldHVybigwKTsKKyAgICBkZWJ1ZyhGMTExLCJmdHAgeHhfZnRwIGhv c3QiLGZ0cF9ob3N0LGhhdmVmdHB1aWQpOworICAgIGRlYnVnKEYxMTEsImZ0cCB4eF9mdHAgdWlk YnVmIDEiLHVpZGJ1ZixoYXZlZnRwdWlkKTsKKyAgICBmdHBfY21kbGluID0gMTsJCQkvKiAxID0g RlRQIHN0YXJ0ZWQgZnJvbSBjb21tYW5kIGxpbmUgKi8KKyAgICBpZiAobmZpbHMgPiAwKQorICAg ICAgZnRwX2NtZGxpbisrOwkJCS8qIDIgPSBzYW1lIHBsdXMgZmlsZSB0cmFuc2ZlciAqLworCisj aWZuZGVmIE5PVVJMCisgICAgLyogZGVidWcoRjExMSwiZnRwIHh4X2Z0cCBnX3VybC51c3IiLGdf dXJsLnVzcixnX3VybC51c3IpOyAqLworICAgIGlmIChoYXZldXJsICYmIGdfdXJsLnVzcikgewkJ LyogV2VkIE9jdCAgOSAxNToxNToyMiAyMDAyICovCisJaWYgKCEqKGdfdXJsLnVzcikpIHsJCS8q IEZvcmNlIHVzZXJuYW1lIHByb21wdCBpZiAqLworCSAgICBoYXZlZnRwdWlkID0gMDsJCS8qICJm dHA6Ly86QGhvc3QiIGdpdmVuLiAqLworCSAgICB1aWRidWZbMF0gPSBOVUw7CisJICAgIG1ha2Vz dHIoJmZ0cF9sb2duYW1lLE5VTEwpOworCX0JICAKKwlkZWJ1ZyhGMTExLCJmdHAgeHhfZnRwIHVp ZGJ1ZiAyIix1aWRidWYsaGF2ZWZ0cHVpZCk7CisgICAgfQorI2VuZGlmIC8qIE5PVVJMICovCisg ICAgZGVidWcoRjExMSwiZnRwIHh4X2Z0cCB1aWRidWYgMyIsdWlkYnVmLGhhdmVmdHB1aWQpOwor ICAgIGlmIChoYXZlZnRwdWlkKSB7CisJbWFrZXN0cigmZnRwX2xvZ25hbWUsdWlkYnVmKTsKKwlk ZWJ1ZyhGMTExLCJmdHBfbG9nbmFtZSIsZnRwX2xvZ25hbWUsaGF2ZWZ0cHVpZCk7CisgICAgfQor ICAgIGlmICghcG9ydCkgeworCWlmICgocCA9IGNrc3RyY2hyKGZ0cF9ob3N0LCc6JykpKQorCSAg KnArKyA9IE5VTDsKKwlwb3J0ID0gcDsKKyAgICB9CisgICAgaWYgKCFwb3J0KSB7CisjaWZkZWYg Q0tfVVJMCisgICAgICAgIGlmIChoYXZldXJsKSB7CisJICAgIGlmIChnX3VybC5wb3IpIAorCSAg ICAgIHBvcnQgPSBnX3VybC5wb3I7CisgICAgICAgICAgICBlbHNlIGlmIChnX3VybC5zdmMpCisJ ICAgICAgcG9ydCA9IGdfdXJsLnN2YzsKKyAgICAgICAgICAgIGVsc2UgCisJICAgICAgcG9ydCA9 ICJmdHAiOworICAgICAgICB9IGVsc2UKKyNlbmRpZiAvKiBDS19VUkwgKi8KKwkgIHBvcnQgPSAi ZnRwIjsKKyAgICB9CisKKyNpZmRlZiBDS19TU0wKKyAgICBpZiAoaGF2ZXVybCAmJiBnX3VybC5z dmMpCisgICAgICB1c2VfdGxzID0gIWNrc3RyY21wKCJmdHBzIixnX3VybC5zdmMsLTEsMCk7Cisj ZW5kaWYgLyogQ0tfU1NMICovCisKKyAgICBpZiAoZnRwb3BlbihmdHBfaG9zdCxwb3J0LHVzZV90 bHMpIDwgMSkKKyAgICAgIHJldHVybigtMSk7CisgICAgZGVidWcoRjExMSwiZnRwIHh4X2Z0cCBh Y3Rpb24iLGNrY3RvYSgoY2hhcilmdHBfYWN0aW9uKSxuZmlscyk7CisgICAgaWYgKG5maWxzID4g MCkgeworCXN3aXRjaCAoZnRwX2FjdGlvbikgeworCSAgY2FzZSAnZyc6CisJICAgIHJldHVybihj bWRsaW5nZXQoc3RheWZsZykpOworCSAgY2FzZSAncCc6CisJICBjYXNlICdzJzoKKwkgICAgcmV0 dXJuKGNtZGxpbnB1dChzdGF5ZmxnKSk7CisJfQorICAgIH0KKyAgICByZXR1cm4oMSk7Cit9Cisj ZW5kaWYgLyogTkVXRlRQICovCisKKworI2lmbmRlZiBOT0hUVFAKK3N0YXRpYworY2hhciAqIGh0 dHBfaGxwW10gPSB7CisgICAgIiAtaCAgICAgICAgICAgICBUaGlzIG1lc3NhZ2UuXG4iLAorICAg ICIgLWQgICAgICAgICAgICAgRGVidWcgdG8gZGVidWcubG9nLlxuIiwKKyAgICAiIC1TICAgICAg ICAgICAgIFN0YXkgKGlzc3VlIGNvbW1hbmQgcHJvbXB0IHdoZW4gZG9uZSkuXG4iLAorICAgICIg LVkgICAgICAgICAgICAgRG8gbm90IGV4ZWN1dGUgS2VybWl0IGluaXRpYWxpemF0aW9uIGZpbGUu XG4iLAorICAgICIgLXEgICAgICAgICAgICAgUXVpZXQgKHN1cHByZXNzIG1vc3QgbWVzc2FnZXMp LlxuIiwKKyAgICAiIC11IG5hbWUgICAgICAgIFVzZXJuYW1lLlxuIiwKKyAgICAiIC1QIHBhc3N3 b3JkICAgIFBhc3N3b3JkLlxuIiwKKyAgICAiIC1nIHBhdGhuYW1lICAgIEdldCByZW1vdGUgcGF0 aG5hbWUuXG4iLAorICAgICIgLXAgcGF0aG5hbWUgICAgUHV0IHJlbW90ZSBwYXRobmFtZS5cbiIs CisgICAgIiAtSCBwYXRobmFtZSAgICBIZWFkIHJlbW90ZSBwYXRobmFtZS5cbiIsCisgICAgIiAt bCBwYXRobmFtZSAgICBMb2NhbCBwYXRoIGZvciAtZywgLXAsIGFuZCAtSC5cbiIsCisjaWZkZWYg Q0tfU1NMCisgICAgIiAteiBvcHRbPXZhbHVlXSBTZWN1cml0eSBvcHRpb25zLi4uXG4iLAorICAg ICIgICAgY2VydD1maWxlICAgQ2xpZW50IGNlcnRpZmljYXRlIGZpbGVcbiIsCisgICAgIiAgICBj ZXJ0c29rICAgICBBY2NlcHQgYWxsIGNlcnRpZmljYXRlc1xuIiwKKyAgICAiICAgIGtleT1maWxl ICAgIENsaWVudCBwcml2YXRlIGtleSBmaWxlXG4iLAorICAgICIgICAgc2VjdXJlICAgICAgVXNl IFNTTFxuIiwKKyAgICAiICAgIHZlcmlmeT1uICAgIDAgPSBub25lLCAxID0gcGVlciAsIDIgPSBj ZXJ0aWZpY2F0ZSByZXF1aXJlZFxuIiwKKyNlbmRpZiAvKiBDS19TU0wgKi8KKyAgICAiIgorfTsK KworI2RlZmluZSBIVF9DRVJURkkgMAorI2RlZmluZSBIVF9PS0NFUlQgMQorI2RlZmluZSBIVF9L RVkgICAgMgorI2RlZmluZSBIVF9TRUNVUkUgMworI2RlZmluZSBIVF9WRVJJRlkgNAorCitzdGF0 aWMgc3RydWN0IGtleXRhYiBodHRwenRhYltdID0geworICAgIHsgImNlcnQiLCAgICBIVF9DRVJU RkksIENNX0FSRyB9LAorICAgIHsgImNlcnRzb2siLCBIVF9PS0NFUlQsIDAgfSwKKyAgICB7ICJr ZXkiLCAgICAgSFRfS0VZLCAgICBDTV9BUkcgfSwKKyAgICB7ICJzZWN1cmUiLCAgSFRfU0VDVVJF LCAwIH0sCisgICAgeyAidmVyaWZ5IiwgIEhUX1ZFUklGWSwgQ01fQVJHIH0sCisgICAgeyAiIiwg MCwgMCB9Cit9Oworc3RhdGljIGludCBuaHR0cHp0YWIgPSBzaXplb2YoaHR0cHp0YWIpIC8gc2l6 ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKyNlbmRpZiAvKiBOT0hUVFAgKi8KKworLyogIFUgUyBB IEcgRSAqLworCitWT0lECit1c2FnZSgpIHsKKyNpZmRlZiBNSU5JWAorICAgIGNvbm9sKCJVc2Fn ZTogIik7CisgICAgY29ub2woeGFyZzApOworICAgIGNvbm9sKCIgWy14IGFyZyBbLXggYXJnXS4u LlsteXl5XS4uXSBdXG4iKTsKKyNlbHNlCisgICAgY29ub2woIlVzYWdlOiAiKTsKKyAgICBjb25v bCh4YXJnMCk7CisgICAgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX0tFUk1JVCB8fCBob3djYWxsZWQg PT0gSV9BTV9JS1NEIHx8CisgICAgICAgIGhvd2NhbGxlZCA9PSBJX0FNX1NTSFNVQikKKyAgICAg IGNvbm9sYShobHAxKTsKKyAgICBlbHNlIGlmIChob3djYWxsZWQgPT0gSV9BTV9URUxORVQpCisg ICAgICBjb25vbGEoaGxwMik7CisgICAgZWxzZSBpZiAoaG93Y2FsbGVkID09IElfQU1fUkxPR0lO KQorICAgICAgY29ub2xhKGhscDMpOworICAgIGVsc2UgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX1NT SCkKKyAgICAgIGNvbm9sYShobHA0KTsKKyAgICBpZiAoaG93Y2FsbGVkID09IElfQU1fS0VSTUlU IHx8IGhvd2NhbGxlZCA9PSBJX0FNX0lLU0QgfHwKKyAgICAgICAgaG93Y2FsbGVkID09IElfQU1f U1NIU1VCKSB7CisJaW50IGM7CisJY29ub2xsKCIiKTsKKwljb25vbGwoIkNvbXBsZXRlIGxpc3Rp bmcgb2YgY29tbWFuZC1saW5lIG9wdGlvbnM6Iik7CisJY29ub2xsKCIiKTsKKwlmb3IgKGMgPSAz MTsgYyA8IDEyODsgYysrKSB7CisJICAgIGlmICghb3B0aGxwW2NdKQorCSAgICAgIGNvbnRpbnVl OworCSAgICBpZiAoYXJnaGxwW2NdKSB7CisJCXByaW50ZigiIC0lYyA8YXJnPiVzXG4iLAorCQkg ICAgICAgKGNoYXIpYywKKwkJICAgICAgIChvcHRhY3RbY10gPyAiIChhY3Rpb24gb3B0aW9uKSIg OiAiIikKKwkJICAgICAgICk7CisJCXByaW50ZigiICAgICAlc1xuIixvcHRobHBbY10pOworCQlw cmludGYoIiAgICAgQXJndW1lbnQ6ICVzXG5cbiIsYXJnaGxwW2NdKTsKKwkgICAgfSBlbHNlIHsJ CQkvKiBPcHRpb24gd2l0aG91dCBhcmcgKi8KKwkJcHJpbnRmKCIgLSVjICAlcyVzXG4iLAorCQkg ICAgICAgKGNoYXIpYywgb3B0aGxwW2NdLAorCQkgICAgICAgKG9wdGFjdFtjXT8iIChhY3Rpb24g b3B0aW9uKSI6IiIpCisJCSAgICAgICApOworCQlwcmludGYoIiAgICAgQXJndW1lbnQ6IChub25l KVxuXG4iKTsKKwkgICAgfQorCX0KKyNpZmRlZiBPUzJPUlVOSVgKKwlwcmludGYoIlRvIHByZXZl bnQgdGhpcyBtZXNzYWdlIGZyb20gc2Nyb2xsaW5nLCB1c2UgJyVzIC1oIHwgbW9yZScuXG4iLAor CSAgICAgICB4YXJnMCk7CisjZW5kaWYgLyogT1MyT1JVTklYICovCisJcHJpbnRmKCJGb3IgYSBs aXN0IG9mIGV4dGVuZGVkIG9wdGlvbnMgdXNlICclcyAtLWhlbHAnLlxuIiwKKwkgICAgICAgeGFy ZzApOworICAgIH0KKyNlbmRpZiAvKiBNSU5JWCAqLworfQorCisKKy8qICBDIE0gRCBMIEkgTiAg LS0gIEdldCBhcmd1bWVudHMgZnJvbSBjb21tYW5kIGxpbmUgICovCisKK2ludAorY21kbGluKCkg eworICAgIGNoYXIgeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvY2FsIGdlbmVy YWwtcHVycG9zZSBjaGFyICovCisgICAgZXh0ZXJuIGludCBoYXZldXJsOworCisjaWZkZWYgTkVX RlRQCisgICAgY2hhciAqIHBvcnQgPSBOVUxMOworI2VuZGlmIC8qIE5FV0ZUUCAqLworCisjaWZu ZGVmIE5PWEZFUgorICAgIGNtYXJnID0gIiI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElu aXRpYWxpemUgZ2xvYmFscyAqLworICAgIGNtYXJnMiA9ICIiOworI2VuZGlmIC8qIE5PWEZFUiAq LworICAgIGFjdGlvbiA9IDA7CisgICAgY2ZsZyA9IDA7CisKKyAgICBzaWduYWwoU0lHSU5ULGNs X2ludCk7CisKKy8qIEhlcmUgd2UgaGFuZGxlIGRpZmZlcmVudCAiQ29tbWFuZCBMaW5lIFBlcnNv bmFsaXRpZXMiICovCisKKyNpZmRlZiBUQ1BTT0NLRVQKKyNpZm5kZWYgTk9IVFRQCisgICAgaWYg KGhvd2NhbGxlZCA9PSBJX0FNX0hUVFApIHsgICAgICAgLyogSWYgSSB3YXMgY2FsbGVkIGFzIEhU VFAuLi4gKi8KKwljaGFyIHJkbnNbMTI4XTsKKyNpZmRlZiBPUzIKKwljaGFyICogYWdlbnQgPSAi S2VybWl0IDk1IjsKKyNlbHNlICAgCisJY2hhciAqIGFnZW50ID0gIkMtS2VybWl0IjsKKyNlbmRp ZiAvKiBPUzIgKi8KKworICAgICAgICBkZWJ1ZyhGMTAwLCJodHRwIHBlcnNvbmFsaXR5IiwiIiww KTsKKyNpZmRlZiBDS19VUkwKKyAgICAgICAgaWYgKGhhdmV1cmwpIHsKKyAgICAgICAgICAgIGlu dCB0eXBlOworICAgICAgICAgICAgY2hhciAqIGxmaWxlOworCisJICAgIHR5cGUgPSBsb29rdXAo dXJsdGFiLGdfdXJsLnN2YyxudXJsdGFiLE5VTEwpOworICAgICAgICAgICAgaWYgKCEodHlwZSA9 PSBVUkxfSFRUUCB8fCB0eXBlID09IFVSTF9IVFRQUykpIHsKKyAgICAgICAgICAgICAgICBwcmlu dGYoIj9JbnRlcm5hbCBFcnJvcjogSFRUUCBjb21tYW5kIGxpbmUgcHJvY2Vzc2luZ1xuIik7Cisg ICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiRXJyb3I6IEhUVFAgY29tbWFuZCBsaW5lIHByb2Nl c3NpbmciLCIiLDApOworICAgICAgICAgICAgICAgIGRvZXhpdChCQURfRVhJVCwxKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHJkbnNbMF0gPSAnXDAnOworICAgICAgICAgICAgbGZpbGUg PSAiIjsKKyAgICAgICAgICAgIHggPSAoaHR0cF9vcGVuKGdfdXJsLmhvcyxnX3VybC5wb3IgPyBn X3VybC5wb3IgOiBnX3VybC5zdmMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9 PSBVUkxfSFRUUFMsIHJkbnMsMTI4LE5VTEwpID09IDApOworICAgICAgICAgICAgaWYgKHgpIHsK KyNpZmRlZiBLVUkKKwkJY2hhciBhc25hbWVbQ0tNQVhQQVRIKzFdOworI2VuZGlmIC8qIEtVSSAq LworICAgICAgICAgICAgICAgIGlmICghcXVpZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KHJkbnNbMF0pCisJCSAgICAgIHByaW50ZigiQ29ubmVjdGVkIHRvICVzIFslc11cclxuIixnX3Vy bC5ob3MscmRucyk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKwkJICAgICAgcHJpbnRmKCJD b25uZWN0ZWQgdG8gJXNcclxuIixnX3VybC5ob3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBpZiAoZ191cmwucHRoKQorICAgICAgICAgICAgICAgICAgenN0cmlwKGdfdXJs LnB0aCwmbGZpbGUpOworICAgICAgICAgICAgICAgIGVsc2UKKwkJICBnX3VybC5wdGggPSAiLyI7 CisKKyAgICAgICAgICAgICAgICBpZiAoISpsZmlsZSkKKyAgICAgICAgICAgICAgICAgIGxmaWxl ID0gImluZGV4Lmh0bWwiOworCisjaWZkZWYgS1VJCisJCWlmICh1cV9maWxlKE5VTEwsCS8qIEs5 NSBHVUk6IFB1dCB1cCBmaWxlIGJveC4gKi8KKwkJCSAgICBOVUxMLAkvKiAobm90IHRlc3RlZC4u LikgKi8KKwkJCSAgICA0LAorCQkJICAgIE5VTEwsCisJCQkgICAgbGZpbGUsCisJCQkgICAgYXNu YW1lLAorCQkJICAgIENLTUFYUEFUSCsxCisJCQkgICAgKSA+IDApCisJCSAgbGZpbGUgPSBhc25h bWU7CisjZW5kaWYgLyogS1VJICovCisKKyAgICAgICAgICAgICAgICB4ID0gaHR0cF9nZXQoYWdl bnQsCisJCQkgICAgIE5VTEwsCS8qIGhkcmxpc3QgKi8KKwkJCSAgICAgZ191cmwudXNyLAorCQkJ ICAgICBnX3VybC5wc3csCisJCQkgICAgIDAsCisJCQkgICAgIGxmaWxlLAorCQkJICAgICBnX3Vy bC5wdGgsCisJCQkgICAgIDAJCS8qIHN0ZGlvICovCisJCQkgICAgICk7CisgICAgICAgICAgICAg ICAgeCA9IChodHRwX2Nsb3NlKCkgPT0gMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIGlmICghcXVpZXQpCisJCSAgcHJpbnRmKCI/SFRUUCBDb25uZWN0aW9uIGZhaWxl ZC5cclxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkb2V4aXQoeCA/IEdPT0RfRVhJ VCA6IEJBRF9FWElULCAtMSk7CisgICAgICAgIH0gZWxzZSAKKyNlbmRpZiAvKiBDS19VUkwgKi8K KwkgIHsKKwkgICAgICBpbnQgaHR0cF9hY3Rpb24gPSAwOworCSAgICAgIGNoYXIgKiBob3N0ID0g TlVMTCwgKiBzdmMgPSBOVUxMLCAqIGxwYXRoID0gTlVMTDsKKwkgICAgICBjaGFyICogdXNlciA9 IE5VTEwsICogcHN3ZCA9IE5VTEwsICogcGF0aCA9IE5VTEw7CisJICAgICAgY2hhciAqIHhwOwor CisJICAgICAgd2hpbGUgKC0teGFyZ2MgPiAwKSB7CS8qIEdvIHRocm91Z2ggY29tbWFuZCBsaW5l IHdvcmRzICovCisJCSAgeGFyZ3YrKzsKKwkJICBkZWJ1ZyhGMTExLCJjbWRsaW4gaHR0cCB4YXJn diIsKnhhcmd2LHhhcmdjKTsKKwkJICB4cCA9ICp4YXJndisxOworCQkgIGlmICgqKnhhcmd2ID09 ICctJykgeyAvKiBHb3QgYW4gb3B0aW9uICovCisJCSAgICAgIGludCB4eDsKKwkJICAgICAgeCA9 ICooKnhhcmd2KzEpOwkvKiBHZXQgdGhlIG9wdGlvbiBsZXR0ZXIgKi8KKwkJICAgICAgc3dpdGNo ICh4KSB7CisJCQljYXNlICdkJzoJLyogRGVidWcgKi8KKyNpZmRlZiBERUJVRworCQkJICBpZiAo ZGVibG9nKSB7CisJCQkgICAgICBkZWJ0aW0gPSAxOworCQkJICB9IGVsc2UgeworCQkJICAgICAg ZGVibG9nID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOworCQkJICB9CisjZW5kaWYgLyogREVCVUcg Ki8KKwkJCSAgYnJlYWs7CisJCQljYXNlICdTJzoJLyogU3RheSAqLworCQkJY2FzZSAnWSc6CS8q IE5vIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KKwkJCSAgYnJlYWs7CS8qIChhbHJlYWR5IGRvbmUg aW4gcHJlc2NhbikgKi8KKwkJCWNhc2UgJ3EnOgkvKiBRdWlldCAqLworCQkJICBxdWlldCA9IDE7 CisJCQkgIGJyZWFrOworCQkJY2FzZSAndSc6CS8qIE9wdGlvbnMgdGhhdCByZXF1aXJlIGFyZ3Vt ZW50cyAqLworCQkJY2FzZSAnUCc6CisJCQljYXNlICdnJzoKKwkJCWNhc2UgJ3AnOgorCQkJY2Fz ZSAnSCc6CisJCQljYXNlICdsJzoKKwkJCSAgaWYgKCooeHArMSkpIHsKKwkJCSAgICAgIFhGQVRB TCgiSW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworCQkJICB9CisJCQkgIHhhcmd2KyssIHhh cmdjLS07CisJCQkgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7CisJCQkg ICAgICBYRkFUQUwoIk1pc3NpbmcgYXJndW1lbnQiKTsKKwkJCSAgfQorCQkJICBzd2l0Y2ggKHgp IHsKKwkJCSAgICBjYXNlICd1JzoKKwkJCSAgICAgIHVzZXIgPSAqeGFyZ3Y7CisJCQkgICAgICBi cmVhazsKKwkJCSAgICBjYXNlICdQJzoKKwkJCSAgICAgIHBzd2QgPSAqeGFyZ3Y7CisJCQkgICAg ICBicmVhazsKKwkJCSAgICBjYXNlICdsJzoKKwkJCSAgICAgIGlmIChodHRwX2FjdGlvbiAhPSBI VFRQX1BVVCkKKwkJCQlscGF0aCA9ICp4YXJndjsKKwkJCSAgICAgIGJyZWFrOworCQkJICAgIGNh c2UgJ2cnOgorCQkJICAgICAgaHR0cF9hY3Rpb24gPSBIVFRQX0dFVDsKKwkJCSAgICAgIHBhdGgg PSAqeGFyZ3Y7CisJCQkgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gaHR0cCBHRVQiLHBhdGgsaHR0 cF9hY3Rpb24pOworCQkJICAgICAgYnJlYWs7CisJCQkgICAgY2FzZSAncCc6CisJCQkgICAgICBo dHRwX2FjdGlvbiA9IEhUVFBfUFVUOworCQkJICAgICAgcGF0aCA9ICp4YXJndjsKKwkJCSAgICAg IGJyZWFrOworCQkJICAgIGNhc2UgJ0gnOgorCQkJICAgICAgaHR0cF9hY3Rpb24gPSBIVFRQX0hF RDsKKwkJCSAgICAgIHBhdGggPSAqeGFyZ3Y7CisJCQkgIH0KKwkJCSAgYnJlYWs7CisKKyNpZmRl ZiBDS19TU0wKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3onOiB7CisJCQkgICAgLyog Knhhcmd2IGNvbnRhaW5zIGEgdmFsdWUgb2YgdGhlIGZvcm0gdGFnPXZhbHVlICovCisJCQkgICAg Lyogd2UgbmVlZCB0byBsb29rdXAgdGhlIHRhZyBhbmQgc2F2ZSB0aGUgdmFsdWUgICovCisJCQkg ICAgaW50IHgseSx6OworCQkJICAgIGNoYXIgKiBwLCAqIHE7CisJCQkgICAgbWFrZXN0cigmcCwq eGFyZ3YpOworCQkJICAgIHkgPSBja2luZGV4KCI9IixwLDAsMCwxKTsKKwkJCSAgICBpZiAoeSA+ IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3ktMV0gPSAnXDAnOworCQkJICAg IHggPSBsb29rdXAoaHR0cHp0YWIscCxuaHR0cHp0YWIsJnopOworCQkJICAgIGlmICh4IDwgMCkg eworCQkJCXByaW50ZigiP0ludmFsaWQgc2VjdXJpdHkgb3B0aW9uOiBcIiVzXCJcbiIscCk7CisJ CQkgICAgfSBlbHNlIHsKKwkJCQlwcmludGYoIlNlY3VyaXR5IG9wdGlvbjogXCIlcyIscCk7CisJ CQkJaWYgKGh0dHB6dGFiW3pdLmZsZ3MgJiBDTV9BUkcpIHsKKwkJCQkgICAgcSA9ICZwW3ldOwor CQkJCSAgICBpZiAoISpxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm YXRhbCgiP01pc3NpbmcgcmVxdWlyZWQgdmFsdWUiKTsKKwkJCQl9CisJCQkJLyogLXogb3B0aW9u cyB3L2FyZ3MgKi8KKwkJCQlzd2l0Y2ggKGh0dHB6dGFiW3pdLmt3dmFsKSB7CisJCQkJICBjYXNl IEhUX0NFUlRGSToKKwkJCQkgICAgbWFrZXN0cigmc3NsX3JzYV9jZXJ0X2ZpbGUscSk7CisJCQkJ ICAgIGJyZWFrOworCQkJCSAgY2FzZSBIVF9PS0NFUlQ6CisJCQkJICAgIHNzbF9jZXJ0c29rX2Zs YWcgPSAxOworCQkJCSAgICBicmVhazsKKwkJCQkgIGNhc2UgSFRfS0VZOgorCQkJCSAgICBtYWtl c3RyKCZzc2xfcnNhX2tleV9maWxlLHEpOworCQkJCSAgICBicmVhazsKKwkJCQkgIGNhc2UgSFRf U0VDVVJFOgorCQkJCSAgICBzdmM9Imh0dHBzIjsKKwkJCQkgICAgYnJlYWs7CisJCQkJICBjYXNl IEhUX1ZFUklGWToKKwkJCQkgICAgaWYgKCFyZGlnaXRzKHEpKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmludGYoIj9CYWQgbnVtYmVyOiAlc1xuIixxKTsKKwkJCQkg ICAgc3NsX3ZlcmlmeV9mbGFnID0gYXRvaShxKTsKKwkJCQkgICAgYnJlYWs7CisJCQkJfQorCQkJ ICAgIH0KKwkJCSAgICBmcmVlKHApOworCQkJICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICAgICAgfQorI2VuZGlmIC8qIENLX1NTTCAqLworCisJCQljYXNlICdoJzoJLyogSGVscCAqLwor CQkJZGVmYXVsdDoKKwkJCSAgcHJpbnRmKCJVc2FnZTogJXMgaG9zdCBbIG9wdGlvbnMuLi4gXVxu Iix4YXJnMCk7CisJCQkgIGNvbm9sYShodHRwX2hscCk7CisJCQkgIGRvZXhpdChHT09EX0VYSVQs LTEpOworCQkgICAgICB9CisJCSAgfSBlbHNlIHsJCS8qIE5vIGRhc2ggLSBtdXN0IGJlIGhvc3Ru YW1lICovCisJCSAgICAgIGhvc3QgPSAqeGFyZ3Y7CisJCSAgICAgIGlmICh4YXJnYyA+IDEpIHsK KwkJCSAgc3ZjID0gKih4YXJndisxKTsKKwkJCSAgaWYgKHN2YykgaWYgKCpzdmMgPT0gJy0nIHx8 ICEqc3ZjKQorCQkJICAgIHN2YyA9IE5VTEw7CisJCQkgIGlmIChzdmMpIHsKKwkJCSAgICAgIHhh cmd2Kys7CisJCQkgICAgICB4YXJnYy0tOworCQkJICB9CisJCSAgICAgIH0KKwkJICB9CisJICAg ICAgfQorCSAgICAgIGlmICghc3ZjKSBzdmMgPSAiIjsKKwkgICAgICBpZiAoISpzdmMpIHN2YyA9 ICJodHRwIjsKKwkgICAgICBpZiAoIWhvc3QpIFhGQVRBTCgiTm8gaHR0cCBob3N0IGdpdmVuIik7 CisKKwkgICAgICAvKiBDaGVjayBhY3Rpb24gYXJncyBiZWZvcmUgb3BlbmluZyB0aGUgY29ubmVj dGlvbiAqLworCSAgICAgIGlmIChodHRwX2FjdGlvbikgeworCQkgIGlmIChodHRwX2FjdGlvbiA9 PSBIVFRQX1BVVCkgeworCQkgICAgICBpZiAoIWxwYXRoKQorCQkJWEZBVEFMKCJObyBsb2NhbCBw YXRoIGZvciBodHRwIFBVVCIpOworCQkgIH0KKwkJICBpZiAoIXBhdGgpCisJCSAgICBYRkFUQUwo Ik5vIHJlbW90ZSBwYXRoIGZvciBodHRwIGFjdGlvbiIpOworCSAgICAgIH0KKwkgICAgICAvKiBO b3cgaXQncyBPSyB0byBvcGVuIHRoZSBjb25uZWN0aW9uICovCisJICAgICAgcmRuc1swXSA9IE5V TDsKKwkgICAgICB4ID0gKGh0dHBfb3Blbihob3N0LAorCQkJICAgICBzdmMsIWNrc3RyY21wKCJo dHRwcyIsc3ZjLC0xLDApLHJkbnMsMTI4LE5VTEwKKwkJCSAgICAgKSA9PSAwKTsKKwkgICAgICBp ZiAoIXgpIHsKKwkJICBpZiAoIXF1aWV0KQorCQkgICAgcHJpbnRmKCI/SFRUUCBDb25uZWN0aW9u IGZhaWxlZC5cclxuIik7CisJCSAgZG9leGl0KEJBRF9FWElULC0xKTsKKwkgICAgICB9CisJICAg ICAgaWYgKCFxdWlldCkgeworCQkgIGlmIChyZG5zWzBdKQorCQkgICAgcHJpbnRmKCJDb25uZWN0 ZWQgdG8gJXMgWyVzXVxyXG4iLGhvc3QscmRucyk7CisJCSAgZWxzZQorCQkgICAgcHJpbnRmKCJD b25uZWN0ZWQgdG8gJXNcclxuIixob3N0KTsKKwkgICAgICB9CisJICAgICAgaWYgKGh0dHBfYWN0 aW9uKSB7CisgICAgICAgICAgICAgICAgICBpbnQgcGNweSA9IDA7CisJCSAgaWYgKGh0dHBfYWN0 aW9uICE9IEhUVFBfUFVUKSB7IC8qIFN1cHBseSBkZWZhdWx0ICovCisJCSAgICAgIGlmICghbHBh dGgpIHsJCSAvKiBsb2NhbCBwYXRoLi4uICovCisJCQkgIHpzdHJpcChwYXRoLCZscGF0aCk7CisJ CQkgIGlmICghbHBhdGgpCisJCQkgICAgbHBhdGggPSAiIjsKKwkJCSAgaWYgKCEqbHBhdGgpCisJ CQkgICAgbHBhdGggPSAiaW5kZXguaHRtbCI7CisJCSAgICAgIH0KKwkJICB9CisgICAgICAgICAg ICAgICAgICBpZiAoKnBhdGggIT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgY2hhciAq IHAgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKHBhdGgpKzIpOworICAgICAgICAgICAgICAgICAg ICAgIGlmICghcCkgZmF0YWwoIj9NZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisgICAgICAg ICAgICAgICAgICAgICAgKnAgPSAnLyc7CisgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5KCZw WzFdLHBhdGgpOyAgICAgIC8qIHNhZmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBwYXRoID0g cDsKKyAgICAgICAgICAgICAgICAgICAgICBwY3B5ID0gMTsKKyAgICAgICAgICAgICAgICAgIH0K KwkJICBzd2l0Y2ggKGh0dHBfYWN0aW9uKSB7CisJCSAgICBjYXNlIEhUVFBfR0VUOgorCQkgICAg ICB4ID0gaHR0cF9nZXQoYWdlbnQsTlVMTCx1c2VyLHBzd2QsMCxscGF0aCxwYXRoLDApOworCQkg ICAgICBicmVhazsKKwkJICAgICAgCisJCSAgICBjYXNlIEhUVFBfUFVUOgorCQkgICAgICB4ID0g aHR0cF9wdXQoYWdlbnQsTlVMTCwidGV4dC9IVE1MIiwKKwkJCQkgICB1c2VyLHBzd2QsMCxscGF0 aCxwYXRoLE5VTEwsMCk7CisJCSAgICAgIGJyZWFrOworCisJCSAgICBjYXNlIEhUVFBfSEVEOgor CQkgICAgICB4ID0gaHR0cF9oZWFkKGFnZW50LE5VTEwsdXNlcixwc3dkLDAsbHBhdGgscGF0aCww KTsKKwkJICAgICAgYnJlYWs7CisJCSAgfQorCQkgIGRlYnVnKEYxMDEsImNtZGxpbmUgaHR0cCBy ZXN1bHQiLCIiLHgpOworICAgICAgICAgICAgICAgICAgeCA9IChodHRwX2Nsb3NlKCkgPT0gMCk7 CisgICAgICAgICAgICAgICAgICBpZiAocGNweSkgZnJlZShwYXRoKTsKKyAgICAgICAgICAgICAg ICAgIGRvZXhpdCh4ID8gR09PRF9FWElUIDogQkFEX0VYSVQsIC0xKTsKKwkgICAgICB9CisJICAg ICAgcmV0dXJuKDApOworCSAgfQorICAgIH0gZWxzZQorI2VuZGlmIC8qIE5PSFRUUCAqLworI2lm ZGVmIE5FV0ZUUAorICAgICAgaWYgKGhvd2NhbGxlZCA9PSBJX0FNX0ZUUCkgewkvKiBJZiBJIHdh cyBjYWxsZWQgYXMgRlRQLi4uICovCisJICBkZWJ1ZyhGMTAwLCJmdHAgcGVyc29uYWxpdHkiLCIi LDApOworI2lmZGVmIENLX1VSTAorCSAgaWYgKGhhdmV1cmwpCisgICAgICAgICAgICBkb2Z0cGFy ZygnVScpOworCSAgZWxzZSAKKyNlbmRpZiAvKiBDS19VUkwgKi8KKwkgICAgeworCQl3aGlsZSAo LS14YXJnYyA+IDApIHsJLyogR28gdGhyb3VnaCBjb21tYW5kIGxpbmUgd29yZHMgKi8KKwkJICAg IHhhcmd2Kys7CisJCSAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gZnRwIHhhcmd2IiwqeGFyZ3YseGFy Z2MpOworCQkgICAgaWYgKCoqeGFyZ3YgPT0gJy0nKSB7IC8qIEdvdCBhbiBvcHRpb24gKi8KKwkJ CWludCB4eDsKKwkJCXggPSAqKCp4YXJndisxKTsgLyogR2V0IHRoZSBvcHRpb24gbGV0dGVyICov CisJCQl4eCA9IGRvZnRwYXJnKHgpOworCQkJaWYgKHh4IDwgMCkgeworCQkJICAgIGlmICh3aGF0 ID09IFdfQ09NTUFORCkKKwkJCSAgICAgIHJldHVybigwKTsKKwkJCSAgICBlbHNlCisJCQkgICAg ICBkb2V4aXQoQkFEX0VYSVQsMSk7CisJCQl9CisJCSAgICB9IGVsc2UgewkJLyogTm8gZGFzaCAt IG11c3QgYmUgaG9zdG5hbWUgKi8KKwkJCW1ha2VzdHIoJmZ0cF9ob3N0LCp4YXJndik7CisJCQlp ZiAoeGFyZ2MgPiAxKSB7CisJCQkgICAgcG9ydCA9ICooeGFyZ3YrMSk7CisJCQkgICAgaWYgKHBv cnQpIGlmICgqcG9ydCA9PSAnLScgfHwgISpwb3J0KQorCQkJICAgICAgcG9ydCA9IE5VTEw7CisJ CQkgICAgaWYgKHBvcnQpIHsKKwkJCQl4YXJndisrOworCQkJCXhhcmdjLS07CisJCQkgICAgfQor CQkJfQorCQkJZGVidWcoRjExMCwiY21kbGluIGZ0cCBob3N0IixmdHBfaG9zdCwwKTsKKwkJCWRl YnVnKEYxMTAsImNtZGxpbiBmdHAgcG9ydCIscG9ydCwwKTsKKwkJICAgIH0KKwkJfSAvKiB3aGls ZSAqLworCSAgICB9IC8qIGlmIChoYXZldXJsKSAqLworCisJICBpZiAoZnRwX2hvc3QpIHsKKwkg ICAgICBpbnQgeHg7CisjaWZkZWYgTk9ESUFMCisJICAgICAgeHggPSB4eF9mdHAoZnRwX2hvc3Qs cG9ydCk7CisJICAgICAgaWYgKHh4IDwgMCAmJiAoaGF2ZXVybCB8fCBmdHBfY21kbGluID4gMSkp IGRvZXhpdChCQURfRVhJVCwtMSk7CisjZWxzZQorI2lmZGVmIE5PSUNQCisJICAgICAgeHggPSB4 eF9mdHAoZnRwX2hvc3QscG9ydCk7CisJICAgICAgaWYgKHh4IDwgMCAmJiAoaGF2ZXVybCB8fCBm dHBfY21kbGluID4gMSkpIGRvZXhpdChCQURfRVhJVCwtMSk7CisjZWxzZQorCSAgICAgIGlmICgq ZnRwX2hvc3QgPT0gJz0nKSB7CS8qIFNraXAgZGlyZWN0b3J5IGxvb2t1cCAqLworCQkgIHh4ID0g eHhfZnRwKCZmdHBfaG9zdFsxXSxwb3J0KTsKKwkJICBpZiAoeHggPCAwICYmIChoYXZldXJsIHx8 IGZ0cF9jbWRsaW4gPiAxKSkKKwkJICAgIGRvZXhpdChCQURfRVhJVCwtMSk7CisJICAgICAgfSBl bHNlIHsJCQkvKiBXYW50IGxvb2t1cCAqLworCQkgIGludCBpOworCQkgIG5oY291bnQgPSAwOwkJ LyogQ2hlY2sgbmV0d29yayBkaXJlY3RvcnkgKi8KKwkJICBkZWJ1ZyhGMTAxLCJjbWRsaW4gbm5l dGRpciIsIiIsbm5ldGRpcik7CisJCSAgaWYgKG5uZXRkaXIgPiAwKQkvKiBJZiB0aGVyZSBpcyBh IGRpcmVjdG9yeS4uLiAqLworCQkgICAgbHVuZXQoZnRwX2hvc3QpOwkvKiBMb29rIHVwIHRoZSBu YW1lICovCisJCSAgZWxzZQkJCS8qIElmIG5vIGRpcmVjdG9yeSAqLworCQkgICAgbmhjb3VudCA9 IDA7CS8qIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIHRoZXJlICovCisjaWZkZWYgREVCVUcKKwkJ ICBpZiAoZGVibG9nKSB7CisJCSAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiBsdW5ldCBuaGNvdW50 IiwiIixuaGNvdW50KTsKKwkJICAgICAgaWYgKG5oY291bnQgPiAwKSB7CisJCQkgIGRlYnVnKEYx MTAsImNtZGxpbiBsdW5ldCBuaF9wWzBdIixuaF9wWzBdLDApOworCQkJICBkZWJ1ZyhGMTEwLCJj bWRsaW4gbHVuZXQgbmhfcDJbMF0iLG5oX3AyWzBdLDApOworCQkJICBkZWJ1ZyhGMTEwLCJjbWRs aW4gbHVuZXQgbmhfcHhbMF1bMF0iLAorCQkJCW5oX3B4WzBdWzBdLDApOworCQkgICAgICB9CisJ CSAgfQorI2VuZGlmIC8qIERFQlVHICovCisJCSAgaWYgKG5oY291bnQgPT0gMCkgeworCQkgICAg ICB4eCA9IHh4X2Z0cChmdHBfaG9zdCxwb3J0KTsKKwkJICAgICAgaWYgKHh4IDwgMCAmJiAoaGF2 ZXVybCB8fCBmdHBfY21kbGluID4gMSkpCisJCQlkb2V4aXQoQkFEX0VYSVQsLTEpOworCQkgIH0g ZWxzZSB7CisJCSAgICAgIGZvciAoaSA9IDA7IGkgPCBuaGNvdW50OyBpKyspIHsKKwkJCSAgaWYg KGNrc3RyY21wKG5oX3AyW2ldLCJ0Y3AvaXAiLDYsMCkpCisJCQkgICAgY29udGludWU7CisJCQkg IG1ha2VzdHIoJmZ0cF9ob3N0LG5oX3BbaV0pOworCQkJICBkZWJ1ZyhGMTEwLCJjbWRsaW4gY2Fs bGluZyB4eF9mdHAiLGZ0cF9ob3N0LDApOworCQkJICBpZiAoIXF1aWV0KQorCQkJICAgIHByaW50 ZigiVHJ5aW5nICVzLi4uXG4iLGZ0cF9ob3N0KTsKKwkJCSAgaWYgKHh4X2Z0cChmdHBfaG9zdCxw b3J0KSA+IC0xKQorCQkJICAgIGJyZWFrOworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0KKyNl bmRpZiAvKiBOT0RJQUwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCSAgICAgIGlmICghZnRwaXNj b25uZWN0ZWQoKSkKKwkJZG9leGl0KEJBRF9FWElULC0xKTsKKwkgIH0KKwkgIHJldHVybigwKTsK KyAgICAgIH0KKyNlbmRpZiAvKiBORVdGVFAgKi8KKworI2lmZGVmIFROQ09ERQorICAgIGlmICho b3djYWxsZWQgPT0gSV9BTV9URUxORVQpIHsgICAgIC8qIElmIEkgd2FzIGNhbGxlZCBhcyBUZWxu ZXQuLi4gKi8KKworICAgICAgICB3aGlsZSAoLS14YXJnYyA+IDApIHsJCS8qIEdvIHRocm91Z2gg Y29tbWFuZCBsaW5lIHdvcmRzICovCisgICAgICAgICAgICB4YXJndisrOworICAgICAgICAgICAg ZGVidWcoRjExMSwiY21kbGluIHRlbG5ldCB4YXJndiIsKnhhcmd2LHhhcmdjKTsKKyAgICAgICAg ICAgIGlmICgqKnhhcmd2ID09ICc9JykKKwkgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICBp ZiAoIXN0cmNtcCgqeGFyZ3YsIi0tIikpCS8qIGdldG9wdCgpIGNvbmZvcm1hbmNlICovCisJICAg ICAgcmV0dXJuKDApOworI2lmZGVmIFZNUworICAgICAgICAgICAgZWxzZSBpZiAoKip4YXJndiA9 PSAnLycpCisJICAgICAgY29udGludWU7CisjZW5kaWYgLyogVk1TICovCisgICAgICAgICAgICBl bHNlIGlmICgqKnhhcmd2ID09ICctJykgewkvKiBHb3QgYW4gb3B0aW9uIChiZWdpbnMgd2l0aCBk YXNoKSAqLworICAgICAgICAgICAgICAgIGludCB4eDsKKyAgICAgICAgICAgICAgICB4ID0gKigq eGFyZ3YrMSk7CS8qIEdldCB0aGUgb3B0aW9uIGxldHRlciAqLworICAgICAgICAgICAgICAgIGRl YnVnKEYxMTEsImNtZGxpbiB0ZWxuZXQgYXJncyAxIiwqeGFyZ3YseGFyZ2MpOworICAgICAgICAg ICAgICAgIHh4ID0gZG90bmFyZyh4KTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRs aW4gdGVsbmV0IGRvYXJnIiwiIix4eCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjExMSwiY21k bGluIHRlbG5ldCBhcmdzIDIiLCp4YXJndix4YXJnYyk7CisgICAgICAgICAgICAgICAgaWYgKHh4 IDwgMCkgeworI2lmbmRlZiBOT0lDUAorICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCA9PSBX X0NPTU1BTkQpCisJCSAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor I2VuZGlmIC8qIE5PSUNQICovCisJCSAgICAgIHsKKyNpZmRlZiBPUzIKKwkJCSAgc2xlZXAoMSk7 CS8qIEdpdmUgaXQgYSBjaGFuY2UuLi4gKi8KKyNlbmRpZiAvKiBPUzIgKi8KKwkJCSAgZG9leGl0 KEJBRF9FWElULDEpOyAvKiBHbyBoYW5kbGUgb3B0aW9uICovCisJCSAgICAgIH0KKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgewkJCS8qIE5vIGRhc2ggbXVzdCBiZSBob3N0 bmFtZSAqLworICAgICAgICAgICAgICAgIGNrc3RybmNweSh0dG5hbWUsKnhhcmd2LFRUTkFNTEVO KzEpOworICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiB0ZWxuZXQgaG9zdCIsdHRu YW1lLDApOworCisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PRElBTAorICAgICAgICAgICAgICAg IG5oY291bnQgPSAwOwkJLyogQ2hlY2sgbmV0d29yayBkaXJlY3RvcnkgKi8KKyAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gdGVsbmV0IG5uZXRkaXIiLCIiLG5uZXRkaXIpOworICAg ICAgICAgICAgICAgIGlmIChubmV0ZGlyID4gMCkJLyogSWYgdGhlcmUgaXMgYSBkaXJlY3Rvcnku Li4gKi8KKwkJICBsdW5ldCgqeGFyZ3YpOwkvKiBMb29rIHVwIHRoZSBuYW1lICovCisgICAgICAg ICAgICAgICAgZWxzZQkJCS8qIElmIG5vIGRpcmVjdG9yeSAqLworCQkgIG5oY291bnQgPSAwOwkJ Lyogd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgdGhlcmUgKi8KKyNpZmRlZiBERUJVRworICAgICAg ICAgICAgICAgIGlmIChkZWJsb2cpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjEwMSwi Y21kbGluIHRlbG5ldCBsdW5ldCBuaGNvdW50IiwiIixuaGNvdW50KTsKKyAgICAgICAgICAgICAg ICAgICAgaWYgKG5oY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhG MTEwLCJjbWRsaW4gdGVsbmV0IGx1bmV0IG5oX3BbMF0iLG5oX3BbMF0sMCk7CisgICAgICAgICAg ICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gdGVsbmV0IGx1bmV0IG5oX3AyWzBdIixu aF9wMlswXSwwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiB0 ZWxuZXQgbHVuZXQgbmhfcHhbMF1bMF0iLAorCQkJICAgICAgbmhfcHhbMF1bMF0sMCk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogREVCVUcgKi8K KyAgICAgICAgICAgICAgICBpZiAobmhjb3VudCA+IDAgJiYgbmhfcDJbMF0pIC8qIElmIG5ldHdv cmsgdHlwZSBzcGVjaWZpZWQgKi8KKwkJICBpZiAoY2tzdHJjbXAobmhfcDJbMF0sInRjcC9pcCIs NiwwKSkgLyogaXQgbXVzdCBiZSBUQ1AvSVAgKi8KKwkJICAgIG5oY291bnQgPSAwOworICAgICAg ICAgICAgICAgIGlmIChuaGNvdW50ID09IDEpIHsJLyogU3RpbGwgT0ssIHNvIG1ha2Ugc3Vic3Rp dHV0aW9uICovCisgICAgICAgICAgICAgICAgICAgIGNrc3RybmNweSh0dG5hbWUsbmhfcFswXSxU VE5BTUxFTisxKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHRlbG5l dCBsdW5ldCBzdWJzdGl0dXRpb24iLHR0bmFtZSwwKTsKKyAgICAgICAgICAgICAgICB9CisjZW5k aWYgLyogTk9ESUFMICovCisjZW5kaWYgLyogTk9JQ1AgKi8KKworICAgICAgICAgICAgICAgIGlm ICgtLXhhcmdjID4gMCAmJiAhaGF2ZXVybCkgeyAvKiBTZXJ2aWNlIGZyb20gY29tbWFuZCBsaW5l PyAqLworICAgICAgICAgICAgICAgICAgICB4YXJndisrOworICAgICAgICAgICAgICAgICAgICBj a3N0cm5jYXQodHRuYW1lLCI6IixUVE5BTUxFTisxKTsKKyAgICAgICAgICAgICAgICAgICAgY2tz dHJuY2F0KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7CisgICAgICAgICAgICAgICAgICAgIGRl YnVnKEYxMTAsImNtZGxpbiB0ZWxuZXQgaG9zdDIiLHR0bmFtZSwwKTsKKyAgICAgICAgICAgICAg ICB9CisjaWZuZGVmIE5PSUNQCisjaWZuZGVmIE5PRElBTAorICAgICAgICAgICAgICAgIGVsc2Ug aWYgKG5oY291bnQpIHsJLyogTm8gLSBob3cgYWJvdXQgaW4gbmV0IGRpcmVjdG9yeT8gKi8KKyAg ICAgICAgICAgICAgICAgICAgaWYgKG5oX3B4WzBdWzBdKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBja3N0cm5jYXQodHRuYW1lLCI6IixUVE5BTUxFTisxKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGNrc3RybmNhdCh0dG5hbWUsbmhfcHhbMF1bMF0sVFROQU1MRU4rMSk7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLyogTk9ESUFMICovCisj ZW5kaWYgLyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICBsb2NhbCA9IDE7CQkvKiBUcnkgdG8g b3BlbiB0aGUgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgICAgIG5ldHR5cGUgPSBORVRfVENQ QjsKKyAgICAgICAgICAgICAgICBtZG10eXAgPSAtbmV0dHlwZTsKKyAgICAgICAgICAgICAgICBp ZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApIDwgMCkgeworICAgICAgICAgICAgICAg ICAgICBYRkFUQUwoImNhbid0IG9wZW4gaG9zdCBjb25uZWN0aW9uIik7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIG5ldHdvcmsgPSAxOwkJLyogSXQncyBvcGVuICovCisjaWZk ZWYgQ0tMT0dESUFMCisgICAgICAgICAgICAgICAgZG9sb2duZXQoKTsKKyNlbmRpZiAvKiBDS0xP R0RJQUwgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgICAgICAgICAgICAgcmVsaWFibGUgPSAxOwkJ LyogSXQncyByZWxpYWJsZSAqLworICAgICAgICAgICAgICAgIHhyZWxpYWJsZSA9IDE7CQkvKiAu Li4gKi8KKyAgICAgICAgICAgICAgICBzZXRyZWxpYWJsZSA9IDE7CisjZW5kaWYgLyogTk9YRkVS ICovCisgICAgICAgICAgICAgICAgY2ZsZyA9IDE7CQkvKiBDb25uZWN0ICovCisgICAgICAgICAg ICAgICAgc3RheWZsZyA9IDE7CQkvKiBTdGF5ICovCisgICAgICAgICAgICAgICAgdG5fZXhpdCA9 IDE7CQkvKiBUZWxuZXQtbGlrZSBleGl0IGNvbmRpdGlvbiAqLworICAgICAgICAgICAgICAgIHF1 aWV0ID0gMTsKKyAgICAgICAgICAgICAgICBleGl0b25jbG9zZSA9IDE7CS8qIEV4aXQgd2hlbiBj b25uZWN0aW9uIGNsb3NlcyAqLworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAgICAgIGlmIChs b2NhbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm1hYykgewkJLyogQW55IG1hY3JvcyBk ZWZpbmVkPyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGs7CQkvKiBZZXMgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX29wZW4iLG5tYWMpOyAv KiBMb29rIHRoaXMgdXAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID49IDApIHsg ICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZG9kbyhrLHR0bmFtZSwwKSA+IC0xKSAgICAvKiBzZXQgaXQgdXAsICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAg LyogYW5kIGV4ZWN1dGUgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQTCAqLworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgUkxPR0NPREUKKyAg ICBlbHNlIGlmIChob3djYWxsZWQgPT0gSV9BTV9STE9HSU4pIHsgLyogSWYgSSB3YXMgY2FsbGVk IGFzIFJsb2dpbi4uLiAqLworICAgICAgICB3aGlsZSAoLS14YXJnYyA+IDApIHsJCS8qIEdvIHRo cm91Z2ggY29tbWFuZCBsaW5lIHdvcmRzICovCisgICAgICAgICAgICB4YXJndisrOworICAgICAg ICAgICAgZGVidWcoRjExMSwiY21kbGluIHJsb2dpbiB4YXJndiIsKnhhcmd2LHhhcmdjKTsKKyAg ICAgICAgICAgIGlmICgqKnhhcmd2ID09ICc9JykKKwkgICAgICByZXR1cm4oMCk7CisgICAgICAg ICAgICBpZiAoIXN0cmNtcCgqeGFyZ3YsIi0tIikpCS8qIGdldG9wdCgpIGNvbmZvcm1hbmNlICov CisJICAgICAgcmV0dXJuKDApOworI2lmZGVmIFZNUworICAgICAgICAgICAgZWxzZSBpZiAoKip4 YXJndiA9PSAnLycpCisJICAgICAgY29udGludWU7CisjZW5kaWYgLyogVk1TICovCisgICAgICAg ICAgICBlbHNlIGlmICgqKnhhcmd2ID09ICctJykgewkvKiBHb3QgYW4gb3B0aW9uIChiZWdpbnMg d2l0aCBkYXNoKSAqLworICAgICAgICAgICAgICAgIGludCB4eDsKKyAgICAgICAgICAgICAgICB4 ID0gKigqeGFyZ3YrMSk7CS8qIEdldCB0aGUgb3B0aW9uIGxldHRlciAqLworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMTEsImNtZGxpbiBybG9naW4gYXJncyAxIiwqeGFyZ3YseGFyZ2MpOworICAg ICAgICAgICAgICAgIHh4ID0gZG9ybGdhcmcoeCk7CisgICAgICAgICAgICAgICAgZGVidWcoRjEw MSwiY21kbGluIHJsb2dpbiBkb2FyZyIsIiIseHgpOworICAgICAgICAgICAgICAgIGRlYnVnKEYx MTEsImNtZGxpbiBybG9naW4gYXJncyAyIiwqeGFyZ3YseGFyZ2MpOworICAgICAgICAgICAgICAg IGlmICh4eCA8IDApIHsKKyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdo YXQgPT0gV19DT01NQU5EKQorCQkgICAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgICAg IGVsc2UKKyNlbmRpZiAvKiBOT0lDUCAqLworCQkgICAgICB7CisjaWZkZWYgT1MyCisJCQkgIHNs ZWVwKDEpOwkvKiBHaXZlIGl0IGEgY2hhbmNlLi4uICovCisjZW5kaWYgLyogT1MyICovCisJCQkg IGRvZXhpdChCQURfRVhJVCwxKTsgLyogR28gaGFuZGxlIG9wdGlvbiAqLworCQkgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsJCQkvKiBObyBkYXNoIG11c3Qg YmUgaG9zdG5hbWUgKi8KKyAgICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLCp4YXJndixU VE5BTUxFTisxKTsKKyAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gcmxvZ2luIGhv c3QiLHR0bmFtZSwwKTsKKworI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT0RJQUwKKyAgICAgICAg ICAgICAgICBuaGNvdW50ID0gMDsJCS8qIENoZWNrIG5ldHdvcmsgZGlyZWN0b3J5ICovCisgICAg ICAgICAgICAgICAgZGVidWcoRjEwMSwiY21kbGluIHJsb2dpbiBubmV0ZGlyIiwiIixubmV0ZGly KTsKKyAgICAgICAgICAgICAgICBpZiAobm5ldGRpciA+IDApCS8qIElmIHRoZXJlIGlzIGEgZGly ZWN0b3J5Li4uICovCisJCSAgbHVuZXQoKnhhcmd2KTsJLyogTG9vayB1cCB0aGUgbmFtZSAqLwor ICAgICAgICAgICAgICAgIGVsc2UJCQkvKiBJZiBubyBkaXJlY3RvcnkgKi8KKwkJICBuaGNvdW50 ID0gMDsJCS8qIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIHRoZXJlICovCisjaWZkZWYgREVCVUcK KyAgICAgICAgICAgICAgICBpZiAoZGVibG9nKSB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVn KEYxMDEsImNtZGxpbiBybG9naW4gbHVuZXQgbmhjb3VudCIsIiIsbmhjb3VudCk7CisgICAgICAg ICAgICAgICAgICAgIGlmIChuaGNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAg ZGVidWcoRjExMCwiY21kbGluIHJsb2dpbiBsdW5ldCBuaF9wWzBdIixuaF9wWzBdLDApOworICAg ICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHJsb2dpbiBsdW5ldCBuaF9w MlswXSIsbmhfcDJbMF0sMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJj bWRsaW4gcmxvZ2luIGx1bmV0IG5oX3B4WzBdWzBdIiwKKwkJCSAgICAgIG5oX3B4WzBdWzBdLDAp OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIERF QlVHICovCisgICAgICAgICAgICAgICAgaWYgKG5oY291bnQgPiAwICYmIG5oX3AyWzBdKSAvKiBJ ZiBuZXR3b3JrIHR5cGUgc3BlY2lmaWVkICovCisJCSAgaWYgKGNrc3RyY21wKG5oX3AyWzBdLCJ0 Y3AvaXAiLDYsMCkpIC8qIGl0IG11c3QgYmUgVENQL0lQICovCisJCSAgICBuaGNvdW50ID0gMDsK KyAgICAgICAgICAgICAgICBpZiAobmhjb3VudCA9PSAxKSB7CS8qIFN0aWxsIE9LLCBzbyBtYWtl IHN1YnN0aXR1dGlvbiAqLworICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLG5o X3BbMF0sVFROQU1MRU4rMSk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxp biBybG9naW4gbHVuZXQgc3Vic3RpdHV0aW9uIix0dG5hbWUsMCk7CisgICAgICAgICAgICAgICAg fQorI2VuZGlmIC8qIE5PRElBTCAqLworI2VuZGlmIC8qIE5PSUNQICovCisKKyAgICAgICAgICAg ICAgICBpZiAoIWhhdmV1cmwpIHsgLyogU2VydmljZSBmcm9tIGNvbW1hbmQgbGluZT8gKi8KKyAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSwiOmxvZ2luIixUVE5BTUxFTisxKTsK KyAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHJsb2dpbiBob3N0MiIsdHRu YW1lLDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2NhbCA9IDE7CQkv KiBUcnkgdG8gb3BlbiB0aGUgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgICAgIG5ldHR5cGUg PSBORVRfVENQQjsKKyAgICAgICAgICAgICAgICBtZG10eXAgPSAtbmV0dHlwZTsKKyAgICAgICAg ICAgICAgICBpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRtdHlwLDApIDwgMCkgeworICAgICAg ICAgICAgICAgICAgICBYRkFUQUwoImNhbid0IG9wZW4gaG9zdCBjb25uZWN0aW9uIik7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5ldHdvcmsgPSAxOwkJLyogSXQncyBvcGVu ICovCisjaWZkZWYgQ0tMT0dESUFMCisgICAgICAgICAgICAgICAgZG9sb2duZXQoKTsKKyNlbmRp ZiAvKiBDS0xPR0RJQUwgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgICAgICAgICAgICAgcmVsaWFi bGUgPSAxOwkJLyogSXQncyByZWxpYWJsZSAqLworICAgICAgICAgICAgICAgIHhyZWxpYWJsZSA9 IDE7CQkvKiAuLi4gKi8KKyAgICAgICAgICAgICAgICBzZXRyZWxpYWJsZSA9IDE7CisjZW5kaWYg LyogTk9YRkVSICovCisgICAgICAgICAgICAgICAgY2ZsZyA9IDE7CQkvKiBDb25uZWN0ICovCisg ICAgICAgICAgICAgICAgc3RheWZsZyA9IDE7CQkvKiBTdGF5ICovCisgICAgICAgICAgICAgICAg dG5fZXhpdCA9IDE7CQkvKiBUZWxuZXQtbGlrZSBleGl0IGNvbmRpdGlvbiAqLworICAgICAgICAg ICAgICAgIHF1aWV0ID0gMTsKKyAgICAgICAgICAgICAgICBleGl0b25jbG9zZSA9IDE7CS8qIEV4 aXQgd2hlbiBjb25uZWN0aW9uIGNsb3NlcyAqLworI2lmbmRlZiBOT1NQTAorICAgICAgICAgICAg ICAgIGlmIChsb2NhbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm1hYykgewkJLyogQW55 IG1hY3JvcyBkZWZpbmVkPyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGs7CQkvKiBZ ZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX29wZW4i LG5tYWMpOyAvKiBMb29rIHRoaXMgdXAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChr ID49IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoZG9kbyhrLHR0bmFtZSwwKSA+IC0xKSAgICAvKiBzZXQgaXQg dXAsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcigxKTsgICAgICAg ICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBOT1NQ TCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIHJldHVybigwKTsKKyAgICB9CisjZW5kaWYgLyogUkxPR0NPREUgKi8KKyNlbmRpZiAv KiBUQ1BTT0NLRVQgKi8KKworI2lmZGVmIFNTSEJVSUxUSU4KKyAgICAgIGlmIChob3djYWxsZWQg PT0gSV9BTV9TU0gpIHsJLyogSWYgSSB3YXMgY2FsbGVkIGFzIFNTSC4uLiAqLworICAgICAgICAg IGV4dGVybiBjaGFyICogc3NoX2hzdCwgKiBzc2hfY21kLCAqIHNzaF9wcnQ7CisJICBkZWJ1ZyhG MTAwLCJzc2ggcGVyc29uYWxpdHkiLCIiLDApOworI2lmZGVmIENLX1VSTAorCSAgaWYgKGhhdmV1 cmwpIHsKKyAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX2hzdCxnX3VybC5ob3MpOworICAgICAg ICAgICAgICBtYWtlc3RyKCZzc2hfcHJ0LGdfdXJsLnN2Yyk7CisJICAgICAgY2tzdHJuY3B5KHR0 bmFtZSxzc2hfaHN0LFRUTkFNTEVOKzEpOworICAgICAgICAgICAgICBja3N0cm5jYXQodHRuYW1l LCI6IixUVE5BTUxFTisxKTsKKyAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSxzc2hfcHJ0 LFRUTkFNTEVOKzEpOworICAgICAgICAgIH0KKwkgIGVsc2UgCisjZW5kaWYgLyogQ0tfVVJMICov CisJICB7CisgICAgICAgICAgICAgIHdoaWxlICgtLXhhcmdjID4gMCkgewkvKiBHbyB0aHJvdWdo IGNvbW1hbmQgbGluZSB3b3JkcyAqLworICAgICAgICAgICAgICAgICAgeGFyZ3YrKzsKKyAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiBzc2ggeGFyZ3YiLCp4YXJndix4YXJnYyk7 CisgICAgICAgICAgICAgICAgICBpZiAoKip4YXJndiA9PSAnPScpCisgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoKnhhcmd2LCIt LSIpKSAvKiBnZXRvcHQoKSBjb25mb3JtYW5jZSAqLworICAgICAgICAgICAgICAgICAgICAgIHJl dHVybigwKTsKKyNpZmRlZiBWTVMKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCoqeGFyZ3Yg PT0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIFZNUyAq LworCQkgIC8qIEdvdCBhbiBvcHRpb24gKGJlZ2lucyB3aXRoIGRhc2gpICovCisgICAgICAgICAg ICAgICAgICBlbHNlIGlmICgqKnhhcmd2ID09ICctJykgeworICAgICAgICAgICAgICAgICAgICAg IGludCB4eDsKKyAgICAgICAgICAgICAgICAgICAgICB4ID0gKigqeGFyZ3YrMSk7CS8qIEdldCB0 aGUgb3B0aW9uIGxldHRlciAqLworICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEYxMTEsImNt ZGxpbiBhcmdzIDEiLCp4YXJndix4YXJnYyk7CisgICAgICAgICAgICAgICAgICAgICAgeHggPSBk b3NzaGFyZyh4KTsKKyAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gZG9h cmciLCIiLHh4KTsKKyAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTExLCJjbWRsaW4gYXJn cyAyIiwqeGFyZ3YseGFyZ2MpOworICAgICAgICAgICAgICAgICAgICAgIGlmICh4eCA8IDApIHsK KyNpZm5kZWYgTk9JQ1AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gV19D T01NQU5EKQorCQkJICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQorI2VuZGlmIC8qIE5PSUNQICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyNpZmRl ZiBPUzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDEpOwkvKiBHaXZlIGl0 IGEgY2hhbmNlLi4uICovCisjZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkb2V4aXQoQkFEX0VYSVQsMSk7IC8qIEdvIGhhbmRsZSBvcHRpb24gKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CQkJLyogTm8gZGFzaCBtdXN0IGJlIGhvc3RuYW1lICovCisgICAg ICAgICAgICAgICAgICAgICAgY2tzdHJuY3B5KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4rMSk7Cisg ICAgICAgICAgICAgICAgICAgICAgbWFrZXN0cigmc3NoX2hzdCx0dG5hbWUpOworICAgICAgICAg ICAgICAgICAgICAgIGRlYnVnKEYxMTAsImNtZGxpbiBzc2ggaG9zdCIsdHRuYW1lLDApOworI2lm bmRlZiBOT0lDUAorI2lmbmRlZiBOT0RJQUwKKyAgICAgICAgICAgICAgICAgICAgICBuaGNvdW50 ID0gMDsJCS8qIENoZWNrIG5ldHdvcmsgZGlyZWN0b3J5ICovCisgICAgICAgICAgICAgICAgICAg ICAgZGVidWcoRjEwMSwiY21kbGluIG5uZXRkaXIiLCIiLG5uZXRkaXIpOworICAgICAgICAgICAg ICAgICAgICAgIGlmIChubmV0ZGlyID4gMCkJLyogSWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkuLi4g Ki8KKwkJCWx1bmV0KCp4YXJndik7CS8qIExvb2sgdXAgdGhlIG5hbWUgKi8KKyAgICAgICAgICAg ICAgICAgICAgICBlbHNlCQkvKiBJZiBubyBkaXJlY3RvcnkgKi8KKwkJCW5oY291bnQgPSAwOwkv KiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyB0aGVyZSAqLworI2lmZGVmIERFQlVHCisgICAgICAg ICAgICAgICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWJ1ZyhGMTAxLCJjbWRsaW4gbHVuZXQgbmhjb3VudCIsIiIsbmhjb3VudCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChuaGNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIGx1bmV0IG5oX3BbMF0iLG5oX3BbMF0sMCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhGMTEwLCJjbWRsaW4gbHVuZXQgbmhf cDJbMF0iLG5oX3AyWzBdLDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWco RjExMCwKKwkJCQkgICAgImNtZGxpbiBsdW5ldCBuaF9weFswXVswXSIsbmhfcHhbMF1bMF0sMCk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9Cisj ZW5kaWYgLyogREVCVUcgKi8KKwkJICAgICAgLyogSWYgbmV0d29yayB0eXBlIHNwZWNpZmllZCAq LworCQkgICAgICAvKiBpdCBtdXN0IGJlIFRDUC9JUCAqLworICAgICAgICAgICAgICAgICAgICAg IGlmIChuaGNvdW50ID4gMCAmJiBuaF9wMlswXSkKKwkJCWlmIChja3N0cmNtcChuaF9wMlswXSwi dGNwL2lwIiw2LDApKQorCQkJICBuaGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAobmhjb3VudCA9PSAxKSB7IC8qIFN0aWxsIE9LLCBzbyBtYWtlIHN1YnN0aXR1dGlvbiAqLwor ICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0cm5jcHkodHRuYW1lLG5oX3BbMF0sVFROQU1M RU4rMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9oc3QsdHRuYW1l KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIGx1bmV0IHN1 YnN0aXR1dGlvbiIsdHRuYW1lLDApOworICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAv KiBOT0RJQUwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworCQkgICAgICAvKiBTZXJ2aWNlIGZyb20g Y29tbWFuZCBsaW5lPyAqLworICAgICAgICAgICAgICAgICAgICAgIGlmICgtLXhhcmdjID4gMCAm JiAhaGF2ZXVybCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICB4YXJndisrOworICAgICAg ICAgICAgICAgICAgICAgICAgICBja3N0cm5jYXQodHRuYW1lLCI6IixUVE5BTUxFTisxKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0bmFtZSwqeGFyZ3YsVFROQU1MRU4r MSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VzdHIoJnNzaF9wcnQsKnhhcmd2KTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoRjExMCwiY21kbGluIHRlbG5ldCBob3N0 MiIsdHRuYW1lLDApOworICAgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBDT01NRU5UCisg ICAgICAgICAgICAgICAgICAgICAgLyogRG8gbm90IHN1YnN0aXR1dGUgbmV0IGRpciBzZXJ2aWNl IGZvciBzc2ggcG9ydCAqLworI2lmbmRlZiBOT0lDUAorI2lmbmRlZiBOT0RJQUwKKwkJICAgICAg LyogTm8gLSBob3cgYWJvdXQgaW4gbmV0IGRpcmVjdG9yeT8gKi8KKyAgICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmIChuaGNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu aF9weFswXVswXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2tzdHJuY2F0KHR0 bmFtZSwiOiIsVFROQU1MRU4rMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja3N0 cm5jYXQodHRuYW1lLG5oX3B4WzBdWzBdLFRUTkFNTEVOKzEpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWFrZXN0cigmc3NoX3BydCxuaF9weFswXVswXSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICB9CisKKyNlbmRpZiAvKiBOT0RJ QUwgKi8KKyNlbmRpZiAvKiBOT0lDUCAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgICBsb2NhbCA9IDE7CQkJLyogVHJ5IHRvIG9wZW4gdGhl IGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICBuZXR0eXBlID0gTkVUX1NTSDsKKyAgICAgICAgICBt ZG10eXAgPSAtbmV0dHlwZTsKKyAgICAgICAgICBpZiAodHRvcGVuKHR0bmFtZSwmbG9jYWwsbWRt dHlwLDApIDwgMCkgeworICAgICAgICAgICAgICBYRkFUQUwoImNhbid0IG9wZW4gaG9zdCBjb25u ZWN0aW9uIik7CisgICAgICAgICAgfQorICAgICAgICAgIG5ldHdvcmsgPSAxOwkJCS8qIEl0J3Mg b3BlbiAqLworI2lmZGVmIENLTE9HRElBTAorICAgICAgICAgIGRvbG9nbmV0KCk7CisjZW5kaWYg LyogQ0tMT0dESUFMICovCisjaWZuZGVmIE5PWEZFUgorICAgICAgICAgIHJlbGlhYmxlID0gMTsJ CQkvKiBJdCdzIHJlbGlhYmxlICovCisgICAgICAgICAgeHJlbGlhYmxlID0gMTsJCS8qIC4uLiAq LworICAgICAgICAgIHNldHJlbGlhYmxlID0gMTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyAgICAg ICAgICBjZmxnID0gMTsJCQkvKiBDb25uZWN0ICovCisgICAgICAgICAgc3RheWZsZyA9IDE7CQkJ LyogU3RheSAqLworICAgICAgICAgIHRuX2V4aXQgPSAxOwkJCS8qIFRlbG5ldC1saWtlIGV4aXQg Y29uZGl0aW9uICovCisgICAgICAgICAgcXVpZXQgPSAxOworICAgICAgICAgIGV4aXRvbmNsb3Nl ID0gMTsJCS8qIEV4aXQgd2hlbiBjb25uZWN0aW9uIGNsb3NlcyAqLworI2lmbmRlZiBOT1NQTAor ICAgICAgICAgIGlmIChsb2NhbCkgeworICAgICAgICAgICAgICBpZiAobm1hYykgewkJLyogQW55 IG1hY3JvcyBkZWZpbmVkPyAqLworICAgICAgICAgICAgICAgICAgaW50IGs7CQkvKiBZZXMgKi8K KyAgICAgICAgICAgICAgICAgIGsgPSBtbG9vayhtYWN0YWIsIm9uX29wZW4iLG5tYWMpOyAvKiBM b29rIHRoaXMgdXAgKi8KKyAgICAgICAgICAgICAgICAgIGlmIChrID49IDApIHsgICAgICAgICAg ICAgICAgICAgICAvKiBJZiBmb3VuZCwgKi8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9k byhrLHR0bmFtZSwwKSA+IC0xKSAgICAvKiBzZXQgaXQgdXAsICovCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHBhcnNlcigxKTsgICAgICAgICAgICAgICAgLyogYW5kIGV4ZWN1dGUgaXQgKi8K KyAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgIH0gICAgIAorICAgICAgICAgIH0K KyNlbmRpZiAvKiBOT1NQTCAqLworCSAgcmV0dXJuKDApOworICAgICAgfQorI2VuZGlmIC8qIFNT SEJVSUxUSU4gKi8KKworICAgIGlmIChob3djYWxsZWQgPT0gSV9BTV9TU0hTVUIpCisgICAgICBy ZXR1cm4oMCk7CisKKy8qCisgIEZyb20gaGVyZSBkb3duOiBXZSB3ZXJlIGNhbGxlZCBhcyAia2Vy bWl0IiBvciAiaWtzZCIuCisKKyAgSWYgd2Ugd2VyZSBzdGFydGVkIGRpcmVjdGx5IGZyb20gYSBL ZXJtaXQgc2NyaXB0IGZpbGUsCisgIHRoZSBmaWxlbmFtZSBvZiB0aGUgc2NyaXB0IGlzIGluIGFy Z3ZbMV0sIHNvIHNraXAgcGFzdCBpdC4KKyovCisgICAgaWYgKHhhcmdjID4gMSkgeworICAgICAg ICBpbnQgbiA9IDE7CisgICAgICAgIGlmICgqeGFyZ3ZbMV0gIT0gJy0nKSB7CisKKyNpZmRlZiBL RVJCQU5HCisgICAgICAgICAgICAvKiBJZiB3ZSB3ZXJlIHN0YXJ0ZWQgd2l0aCBhIEtlcmJhbmcg c2NyaXB0LCB0aGUgc2NyaXB0ICovCisgICAgICAgICAgICAvKiBhcmd1bWVudHMgd2VyZSBhbHJl YWR5IHBpY2tlZCB1cCBpbiBwcmVzY2FuIC8gY21kaW5pKCkgKi8KKyAgICAgICAgICAgIC8qIGFu ZCB0aGVyZSBpcyBub3RoaW5nIGhlcmUgZm9yIHVzIGFueXdheS4gKi8KKyAgICAgICAgICAgIGlm ICghc3RyY21wKHhhcmd2WzFdLCIrIikpCisgICAgICAgICAgICAgIHJldHVybigwKTsKKyNlbmRp ZiAvKiBLRVJCQU5HICovCisKKyAgICAgICAgICAgIGlmIChjZmlsZWYpIHsgICAgICAgICAgICAg ICAvKiBDb21tYW5kIGZpbGUgZm91bmQgaW4gcHJlc2NhbigpICovCisgICAgICAgICAgICAgICAg eGFyZ2MgLT0gbjsgICAgICAgICAgICAgLyogU2tpcCBwYXN0IGl0ICovCisgICAgICAgICAgICAg ICAgeGFyZ3YgKz0gbjsKKyAgICAgICAgICAgICAgICBjZmlsZWYgPSAwOworICAgICAgICAgICAg ICAgIGRlYnVnKEYxMDEsImNtZGxpbiBjZmlsZWYgc2V0IHRvIDAiLCIiLGNmaWxlZik7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisvKgorICBSZWd1bGFyIFVuaXgtc3R5bGUgY29t bWFuZCBsaW5lIHBhcnNlciwgbW9zdGx5IGNvbmZvcm1pbmcgd2l0aCAnQSBQcm9wb3NlZAorICBD b21tYW5kIFN5bnRheCBTdGFuZGFyZCBmb3IgVW5peCBTeXN0ZW1zJywgSGVtZW53YXkgJiBBcm1p dGFnZSwgVW5peC9Xb3JsZCwKKyAgVm9sLjEsIE5vLjMsIDE5ODQuCisqLworICAgIHdoaWxlICgt LXhhcmdjID4gMCkgeyAgICAgICAgICAgICAgIC8qIEdvIHRocm91Z2ggY29tbWFuZCBsaW5lIHdv cmRzICovCisgICAgICAgIHhhcmd2Kys7CisgICAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiB4YXJn diIsKnhhcmd2LHhhcmdjKTsKKyAgICAgICAgaWYgKCoqeGFyZ3YgPT0gJz0nKQorICAgICAgICAg IHJldHVybigwKTsKKyAgICAgICAgaWYgKCFzdHJjbXAoKnhhcmd2LCItLSIpKSAgICAgICAvKiBn ZXRvcHQoKSBjb25mb3JtYW5jZSAqLworICAgICAgICAgIHJldHVybigwKTsKKyNpZmRlZiBWTVMK KyAgICAgICAgZWxzZSBpZiAoKip4YXJndiA9PSAnLycpCisgICAgICAgICAgY29udGludWU7Cisj ZW5kaWYgLyogVk1TICovCisgICAgICAgIGVsc2UgaWYgKCoqeGFyZ3YgPT0gJy0nKSB7ICAgICAg LyogR290IGFuIG9wdGlvbiAoYmVnaW5zIHdpdGggZGFzaCkgKi8KKyAgICAgICAgICAgIGludCB4 eDsKKyAgICAgICAgICAgIHggPSAqKCp4YXJndisxKTsgICAgICAgICAgICAvKiBHZXQgdGhlIG9w dGlvbiBsZXR0ZXIgKi8KKyAgICAgICAgICAgIGRlYnVnKEYxMTEsImNtZGxpbiBhcmdzIDEiLCp4 YXJndix4YXJnYyk7CisgICAgICAgICAgICB4eCA9IGRvYXJnKHgpOworICAgICAgICAgICAgZGVi dWcoRjEwMSwiY21kbGluIGRvYXJnIiwiIix4eCk7CisgICAgICAgICAgICBkZWJ1ZyhGMTExLCJj bWRsaW4gYXJncyAyIiwqeGFyZ3YseGFyZ2MpOworICAgICAgICAgICAgaWYgKHh4IDwgMCkgewor I2lmbmRlZiBOT0lDUAorICAgICAgICAgICAgICAgIGlmICh3aGF0ID09IFdfQ09NTUFORCkKKyAg ICAgICAgICAgICAgICAgIHJldHVybigwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYg LyogTk9JQ1AgKi8KKyAgICAgICAgICAgICAgICAgIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgICAg ICAgICAgICAgICBzbGVlcCgxKTsgICAgICAgICAvKiBHaXZlIGl0IGEgY2hhbmNlLi4uICovCisj ZW5kaWYgLyogT1MyICovCisgICAgICAgICAgICAgICAgICAgICAgZG9leGl0KEJBRF9FWElULDEp OyAvKiBHbyBoYW5kbGUgb3B0aW9uICovCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0gZWxzZSBpZiAoIWhhdmV1cmwpIHsJCS8qIE5vIGRhc2ggd2hlcmUgZXhw ZWN0ZWQgKi8KKwkgICAgY2hhciB4YnVmWzMyXTsKKyAgICAgICAgICAgIGNoYXIgYnVmWzEyOF07 CisJICAgIGludCBrOworCSAgICBrID0gY2tzdHJuY3B5KHhidWYsKnhhcmd2LDQwKTsKKwkgICAg aWYgKGsgPiAzMCkgeworCQl4YnVmWzMwXSA9ICcuJzsKKwkJeGJ1ZlsyOV0gPSAnLic7CisJCXhi dWZbMjhdID0gJy4nOworCSAgICB9CisJICAgIHhidWZbMzFdID0gTlVMOworICAgICAgICAgICAg Y2ttYWttc2coYnVmLAorCQkgICAgIDEyOCwKKwkJICAgICAiaW52YWxpZCBjb21tYW5kLWxpbmUg b3B0aW9uLCB0eXBlIFwiIiwKKwkJICAgICBteW5hbWUsCisJCSAgICAgIiAtaFwiIGZvciBoZWxw IiwKKwkJICAgICBOVUxMCisJCSAgICAgKTsKKwkgICAgZmF0YWwyKHhidWYsYnVmKTsKKyAgICAg ICAgfQorICAgIH0KKyNpZmRlZiBERUJVRworICAgIGlmIChkZWJsb2cpIHsKKyNpZm5kZWYgTk9J Q1AKKyAgICAgICAgZGVidWcoRjEwMSwiY21kbGluIHdoYXQiLCIiLHdoYXQpOworI2VuZGlmIC8q IE5PSUNQICovCisgICAgICAgIGRlYnVnKEYxMDEsImNtZGxpbiBhY3Rpb24iLCIiLGFjdGlvbik7 CisjaWZuZGVmIE5PWEZFUgorICAgICAgICBkZWJ1ZyhGMTAxLCJjbWRsaW4gc3Rkb3VmIiwiIixz dGRvdWYpOworI2VuZGlmIC8qIE5PWEZFUiAqLworICAgIH0KKyNlbmRpZiAvKiBERUJVRyAqLwor CisjaWZkZWYgTk9JQ1AKKyAgICBpZiAoIWFjdGlvbiAmJiAhY2ZsZyAmJiAhY25mbGcpIHsKKyAg ICAgICAgZGVidWcoRjEwMCwiY21kbGluIE5PSUNQIGZhdGFsIG5vIGFjdGlvbiIsIiIsMCk7Cisg ICAgICAgIFhGQVRBTCgiP05vIGFjdGlvbnMgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZSIpOwor ICAgIH0KKyNlbHNlCisgICAgaWYgKGluc2VydmVyICYmIHdoYXQgPT0gMCkgeyAgICAgICAgLyog SW50ZXJuZXQgS2VybWl0IHNlcnZlciBjaGVja3MgKi8KKyAgICAgICAgaWYgKGxvY2FsIHx8IChh Y3Rpb24gIT0gMCAmJiBhY3Rpb24gIT0gJ3gnKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsKQor ICAgICAgICAgICAgICBwcmludGYoImxvY2FsXHJcbiIpOworICAgICAgICAgICAgaWYgKGFjdGlv bikKKyAgICAgICAgICAgICAgcHJpbnRmKCJhY3Rpb249JWNcclxuIixhY3Rpb24pOworICAgICAg ICAgICAgZGVidWcoRjEwMCwiY21kbGluIGZhdGFsIDEiLCIiLDApOworICAgICAgICAgICAgWEZB VEFMKCJObyBhY3Rpb25zIG9yIGNvbm5lY3Rpb25zIGFsbG93ZWQgd2l0aCAtQSIpOworICAgICAg ICB9CisgICAgfQorI2VuZGlmIC8qIE5PSUNQICovCisKKyNpZm5kZWYgTk9MT0NBTAorICAgIGlm ICghbG9jYWwpIHsKKyAgICAgICAgaWYgKChhY3Rpb24gPT0gJ2MnKSB8fCAoY2ZsZyAhPSAwKSkg eworICAgICAgICAgICAgZGVidWcoRjEwMCwiY21kbGluIGZhdGFsIDIiLCIiLDApOworICAgICAg ICAgICAgWEZBVEFMKCItbCBvciAtaiBvciAtWCByZXF1aXJlZCIpOworICAgICAgICB9CisgICAg fQorI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9YRkVSCisgICAgaWYgKCpjbWFyZzIg IT0gMCkgeworICAgICAgICBpZiAoKGFjdGlvbiAhPSAncycpICYmIChhY3Rpb24gIT0gJ3InKSAm JiAoYWN0aW9uICE9ICd2JykpIHsKKyAgICAgICAgICAgIGRlYnVnKEYxMDAsImNtZGxpbiBmYXRh bCAzIiwiIiwwKTsKKyAgICAgICAgICAgIFhGQVRBTCgiLWEgd2l0aG91dCAtcywgLXIsIG9yIC1n Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFjdGlvbiA9PSAncicgfHwgYWN0aW9uID09ICd2 JykgeworI2lmZGVmIENLX1RNUERJUgorICAgICAgICAgICAgaWYgKGlzZGlyKGNtYXJnMikpIHsg ICAgICAgIC8qIC1hIGlzIGEgZGlyZWN0b3J5ICovCisgICAgICAgICAgICAgICAgaWYgKCF6Y2hk aXIoY21hcmcyKSkgeyAgLyogdHJ5IHRvIGNoYW5nZSB0byBpdCAqLworICAgICAgICAgICAgICAg ICAgICBkZWJ1ZyhGMTAwLCJjbWRsaW4gZmF0YWwgNCIsIiIsMCk7CisgICAgICAgICAgICAgICAg ICAgIFhGQVRBTCgiY2FuJ3QgY2hhbmdlIHRvICctYScgZGlyZWN0b3J5Iik7CisgICAgICAgICAg ICAgICAgfSBlbHNlIGNtYXJnMiA9ICIiOworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyog Q0tfVE1QRElSICovCisgICAgICAgICAgICAgIGlmICh6Y2hrbyhjbWFyZzIpIDwgMCkgeworICAg ICAgICAgICAgICAgICAgZGVidWcoRjEwMCwiY21kbGluIGZhdGFsIDUiLCIiLDApOworICAgICAg ICAgICAgICAgICAgWEZBVEFMKCJ3cml0ZSBhY2Nlc3MgdG8gLWEgZmlsZSBkZW5pZWQiKTsKKyAg ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICgoYWN0aW9uID09ICd2Jykg JiYgKHN0ZG91ZikgJiYgKCFsb2NhbCkpIHsKKyAgICAgICAgaWYgKGlzX2FfdHR5KDEpKSB7Cisg ICAgICAgICAgICBkZWJ1ZyhGMTAwLCJjbWRsaW4gZmF0YWwgNiIsIiIsMCk7CisgICAgICAgICAg ICBYRkFUQUwoInVucmVkaXJlY3RlZCAtayBjYW4gb25seSBiZSB1c2VkIGluIGxvY2FsIG1vZGUi KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKGFjdGlvbiA9PSAncycpIHx8IChhY3Rpb24g PT0gJ3YnKSB8fAorICAgICAgICAoYWN0aW9uID09ICdyJykgfHwgKGFjdGlvbiA9PSAneCcpKSB7 CisgICAgICAgIGlmIChsb2NhbCkKKyAgICAgICAgICBkaXNwbGEgPSAxOworICAgICAgICBpZiAo c3Rkb3VmKSB7CisgICAgICAgICAgICBkaXNwbGEgPSAwOworICAgICAgICAgICAgcXVpZXQgPSAx OworICAgICAgICB9CisgICAgfQorICAgIGlmIChxdWlldCkgZGlzcGxhID0gMDsgICAgICAgICAg ICAgIC8qIE5vIGRpc3BsYXkgaWYgcXVpZXQgcmVxdWVzdGVkICovCisjZW5kaWYgLyogTk9YRkVS ICovCisjaWZkZWYgREVCVUcKKyAgICBpZiAoYWN0aW9uKQorICAgICAgZGVidWcoRjAwMCwiY21k bGluIHJldHVybnMgYWN0aW9uIiwiIixhY3Rpb24pOworICAgIGVsc2UKKyAgICAgIGRlYnVnKEYx MDEsImNtZGxpbiByZXR1cm5zIGFjdGlvbiIsIiIsYWN0aW9uKTsKKyNlbmRpZiAvKiBERUJVRyAq LworCisgICAgcmV0dXJuKGFjdGlvbik7ICAgICAgICAgICAgICAgICAgICAgLyogVGhlbiBkbyBh bnkgcmVxdWVzdGVkIHByb3RvY29sICovCit9CisKKy8qIEV4dGVuZGVkIGFyZ3VtZW50IHBhcnNp bmc6IC0ta2V5d29yZFs6dmFsdWVdIChvciA9dmFsdWUpICovCisKKy8qCisgIFhBX3h4eHggc3lt Ym9scyBhcmUgZGVmaW5lZCBpbiBja3V1c3IuaC4KKyAgSWYgeW91IGFkZCBhIG5ldyBvbmUsIGFs c28gcmVtZW1iZXIgdG8gdXBkYXRlIGRvc2hvdygpLAorICBTSFhPUFQgc2VjdGlvbiwgaW4gY2t1 dXM1LmMuCisqLworc3RydWN0IGtleXRhYiB4YXJndGFiW10gPSB7CisjaWZkZWYgQ0tfTE9HSU4K KyAgICB7ICJhbm9ueW1vdXMiLCAgIFhBX0FOT04sIENNX0FSR3xDTV9QUkUgfSwKKyNlbmRpZiAv KiBDS19MT0dJTiAqLworICAgIHsgImJhbm5lcmZpbGUiLCAgWEFfQkFGSSwgQ01fQVJHIH0sCisg ICAgeyAiY2RmaWxlIiwgICAgICBYQV9DREZJLCBDTV9BUkcgfSwKKyAgICB7ICJjZG1lc3NhZ2Ui LCAgIFhBX0NETVMsIENNX0FSRyB9LAorICAgIHsgImNkbXNnIiwgICAgICAgWEFfQ0RNUywgQ01f QVJHfENNX0lOViB9LAorI2lmZGVmIEtVSQorICAgIHsgImNoYW5nZWRpbSIsICAgWEFfQ0hHRCwg Q01fUFJFIH0sCisjZW5kaWYgLyogS1VJICovCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJjaGFy c2V0IiwgICAgIFhBX0NTRVQsIENNX0FSR3xDTV9QUkUgfSwKKyNlbmRpZiAvKiBOT0NTRVRTICov CisjaWZkZWYgSUtTREIKKyAgICB7ICJkYXRhYmFzZSIsICAgIFhBX0RCQVMsIENNX0FSR3xDTV9Q UkUgfSwKKyAgICB7ICJkYmZpbGUiLCAgICAgIFhBX0RCRkksIENNX0FSR3xDTV9QUkUgfSwKKyNl bmRpZiAvKiBJS1NEQiAqLworI2lmZGVmIEtVSQorICAgIHsgImZhY2VuYW1lIiwgICAgWEFfRk5B TSwgQ01fQVJHfENNX1BSRXxDTV9JTlYgfSwKKyAgICB7ICJmb250bmFtZSIsICAgIFhBX0ZOQU0s IENNX0FSR3xDTV9QUkUgfSwKKyAgICB7ICJmb250c2l6ZSIsICAgIFhBX0ZTSVosIENNX0FSR3xD TV9QUkUgfSwKKyNlbmRpZiAvKiBLVUkgKi8KKyNpZmRlZiBDT01NRU5UCisjaWZkZWYgTkVXRlRQ CisgICAgeyAiZnRwIiwgICAgICAgICBYQV9GVFAsICBDTV9BUkcgfSwKKyNlbmRpZiAvKiBORVdG VFAgKi8KKyNlbmRpZiAvKiBDT01NRU5UICovCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIK KyAgICB7ICJoZWlnaHQiLCAgICAgIFhBX1JPV1MsIENNX0FSR3xDTV9QUkUgfSwKKyNlbmRpZiAv KiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgeyAiaGVscCIsICAgICAgICBYQV9I RUxQLCAwIH0sCisjaWZuZGVmIE5PSEVMUAorICAgIHsgImhlbHBmaWxlIiwgICAgWEFfSEVGSSwg Q01fQVJHIH0sCisjZW5kaWYgLyogTk9IRUxQICovCisjaWZkZWYgQ0tfTE9HSU4KKyAgICB7ICJp bml0ZmlsZSIsICAgIFhBX0FORkksIENNX0FSR3xDTV9QUkUgfSwKKyNlbmRpZiAvKiBDS19MT0dJ TiAqLworI2lmZGVmIE9TMgorICAgIHsgImxvY2tkb3duIiwgICAgWEFfTE9DSywgQ01fUFJFIH0s CisjaWZkZWYgS1VJCisgICAgeyAibWF4aW1pemUiLCAgICBYQV9XTUFYLCAgQ01fUFJFIH0sCisg ICAgeyAibWluaW1pemUiLCAgICBYQV9XTUlOLCAgQ01fUFJFIH0sCisgICAgeyAibm9iYXJzIiwg ICAgICBYQV9OT0JBUiwgQ01fUFJFIH0sCisgICAgeyAibm9jbG9zZSIgLCAgICBYQV9OT0NMT1NF LCBDTV9QUkUgfSwKKyNlbmRpZiAvKiBLVUkgKi8KKyAgICB7ICJub2VzY2FwZSIsICAgIFhBX05P RVNDQVBFLCBDTV9QUkUgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICJub2ludGVycnVwdHMi LFhBX05PSU4sIENNX1BSRSB9LAorI2lmZGVmIEtVSQorICAgIHsgIm5vbWVudWJhciIsICAgWEFf Tk9NTiwgQ01fUFJFIH0sCisjZW5kaWYgLyogS1VJICovCisgICAgeyAibm9wZXJtcyIsICAgICBY QV9OUFJNLCAwIH0sCisjaWZuZGVmIE5PUFVTSAorICAgIHsgIm5vcHVzaCIsICAgICAgWEFfTk9Q VVNILCBDTV9QUkUgfSwKKyNlbmRpZiAvKiBOT1BVU0ggKi8KKyNpZmRlZiBPUzIKKyAgICB7ICJu b3Njcm9sbCIsICAgIFhBX05PU0NST0xMLCBDTV9QUkUgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNp ZmRlZiBLVUkKKyAgICB7ICJub3N0YXR1c2JhciIsIFhBX05PU0IsIENNX1BSRSB9LAorICAgIHsg Im5vdG9vbGJhciIsICAgWEFfTk9UQiwgQ01fUFJFIH0sCisjZW5kaWYgLyogS1VJICovCisjaWZk ZWYgQ09NTUVOVAorICAgIHsgInBhc3N3b3JkIiwgICAgWEFfUEFTUywgQ01fQVJHfENNX0lOViB9 LAorI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBDS19MT0dJTgorI2lmbmRlZiBOT1hGRVIK KyNpZmRlZiBDS19QRVJNCisgICAgeyAicGVybWlzc2lvbnMiLCBYQV9QRVJNLCBDTV9BUkd8Q01f UFJFIH0sCisgICAgeyAicGVybXMiLCAgICAgICBYQV9QRVJNLCBDTV9BUkd8Q01fUFJFfENNX0lO ViB9LAorI2VuZGlmIC8qIENLX1BFUk0gKi8KKyNlbmRpZiAvKiBOT1hGRVIgKi8KKyNpZmRlZiBV TklYCisgICAgeyAicHJpdmlkIiwgICAgICBYQV9QUklWLCBDTV9BUkd8Q01fUFJFIH0sCisjZW5k aWYgLyogVU5JWCAqLworI2lmbmRlZiBOT0xPQ0FMCisjaWZuZGVmIE5PQ1NFVFMKKyAgICB7ICJy Y2hhcnNldCIsICAgIFhBX0NTRVQsIENNX0FSR3xDTV9QUkV8Q01fSU5WIH0sCisjZW5kaWYgLyog Tk9DU0VUUyAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZmRlZiBVTklYCisgICAgeyAicm9v dCIsICAgICAgICBYQV9ST09ULCBDTV9BUkd8Q01fUFJFIH0sCisjZWxzZSAvKiBVTklYICovCisj aWZkZWYgQ0tST09UCisgICAgeyAicm9vdCIsICAgICAgICBYQV9ST09ULCBDTV9BUkd8Q01fUFJF IH0sCisjZW5kaWYgLyogQ0tST09UICovCisjZW5kaWYgLyogVU5JWCAqLworI2lmZGVmIEtVSQor ICAgIHsgInNjYWxlZm9udCIsICAgWEFfU0NBTEUsIENNX1BSRSB9LAorI2VuZGlmIC8qIEtVSSAq LworI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBTU0hCVUlMVElOCisgICAgeyAic3NoIiwgICAgICAg ICBYQV9TU0gsICBDTV9BUkcgfSwKKyNlbmRpZiAvKiBTU0hCVUlMVElOICovCisjZW5kaWYgLyog Q09NTUVOVCAqLworI2lmZGVmIENLU1lTTE9HCisgICAgeyAic3lzbG9nIiwgICAgICBYQV9TWVNM LCBDTV9BUkd8Q01fUFJFIH0sCisjZW5kaWYgLyogQ0tTWVNMT0cgKi8KKyNpZm5kZWYgTk9MT0NB TAorI2lmZGVmIENPTU1FTlQKKyNpZmRlZiBUTkNPREUKKyAgICB7ICJ0ZWxuZXQiLCAgICAgIFhB X1RFTCwgIENNX0FSRyB9LAorI2VuZGlmIC8qIFROQ09ERSAqLworI2VuZGlmIC8qIENPTU1FTlQg Ki8KKyAgICB7ICJ0ZXJtdHlwZSIsICAgIFhBX1RFUk0sIENNX0FSR3xDTV9QUkUgfSwKKyNlbmRp ZiAvKiBOT0xPQ0FMICovCisgICAgeyAidGltZW91dCIsICAgICBYQV9USU1PLCBDTV9BUkd8Q01f UFJFIH0sCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICB7ICJ0aXRsZSIsICAgICAg IFhBX1RJVEwsIENNX0FSRyB9LAorI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIFVOSVgKKyAgICB7 ICJ1bmJ1ZmZlcmVkIiwgIFhBX1VOQlVGLCAwIH0sCisjZW5kaWYJLyogVU5JWCAqLworI2lmbmRl ZiBOT1NQTAorICAgIHsgInVzZXIiLCAgICAgICAgWEFfVVNFUiwgQ01fQVJHIH0sCisjZW5kaWYg LyogTk9TUEwgKi8KKyNlbmRpZiAvKiBOT0xPQ0FMICovCisgICAgeyAidXNlcmZpbGUiLCAgICBY QV9VU0ZJLCBDTV9BUkd8Q01fUFJFIH0sCisgICAgeyAidmVyc2lvbiIsICAgICBYQV9WRVJTLCAw IH0sCisjaWZuZGVmIE5PTE9DQUwKKyNpZmRlZiBPUzIKKyAgICB7ICJ3aWR0aCIsICAgICAgIFhB X0NPTFMsIENNX0FSR3xDTV9QUkUgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyNlbmRpZiAvKiBOT0xP Q0FMICovCisjaWZkZWYgQ0tXVE1QCisgICAgeyAid3RtcGZpbGUiLCAgICBYQV9XVEZJLCBDTV9B Ukd8Q01fUFJFIH0sCisgICAgeyAid3RtcGxvZyIsICAgICBYQV9XVE1QLCBDTV9BUkd8Q01fUFJF IH0sCisjZW5kaWYgLyogQ0tXVE1QICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICB7ICJ4 ZmVyZmlsZSIsICAgIFhBX0lLRkksIENNX0FSR3xDTV9QUkUgfSwKKyAgICB7ICJ4ZmVybG9nIiwg ICAgIFhBX0lLTEcsIENNX0FSR3xDTV9QUkUgfSwKKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIEtV SQorICAgIHsgInhwb3MiLCAgICAgICAgWEFfWFBPUywgQ01fQVJHfENNX1BSRSB9LAorICAgIHsg Inlwb3MiLCAgICAgICAgWEFfWVBPUywgQ01fQVJHfENNX1BSRSB9LAorI2VuZGlmIC8qIEtVSSAq LworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyAgICB7IiIsIDAsIDAgfQorfTsKK2ludCBueGFyZ3Mg PSBzaXplb2YoeGFyZ3RhYikvc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKworc3RhdGljIHN0 cnVjdCBrZXl0YWIgb2t0YWJbXSA9IHsKKyAgICB7ICIwIiwgICAgIDAsIDAgfSwKKyAgICB7ICIx IiwgICAgIDEsIDAgfSwKKyAgICB7ICIyIiwgICAgIDIsIDAgfSwKKyAgICB7ICIzIiwgICAgIDMs IDAgfSwKKyAgICB7ICI0IiwgICAgIDQsIDAgfSwKKyAgICB7ICI1IiwgICAgIDUsIDAgfSwKKyAg ICB7ICI2IiwgICAgIDYsIDAgfSwKKyAgICB7ICI3IiwgICAgIDcsIDAgfSwKKyAgICB7ICI4Iiwg ICAgIDgsIDAgfSwKKyAgICB7ICI5IiwgICAgIDksIDAgfSwKKyAgICB7ICJmYWxzZSIsIDAsIDAg fSwKKyAgICB7ICJubyIsICAgIDAsIDAgfSwKKyAgICB7ICJvZmYiLCAgIDAsIDAgfSwKKyAgICB7 ICJvayIsICAgIDEsIDAgfSwKKyAgICB7ICJvbiIsICAgIDEsIDAgfSwKKyAgICB7ICJ0cnVlIiwg IDEsIDAgfSwKKyAgICB7ICJ5ZXMiLCAgIDEsIDAgfQorfTsKK3N0YXRpYyBpbnQgbm9rdGFiID0g c2l6ZW9mKG9rdGFiKS9zaXplb2Yoc3RydWN0IGtleXRhYik7CisKKyNkZWZpbmUgWEFSR0JVRkwg MzIKKworY2hhciAqIHhvcHRobHBbWEFfTUFYKzFdOyAgICAgICAgICAgICAgIC8qIEV4dGVuZGVk IG9wdGlvbiBoZWxwICovCitjaGFyICogeGFyZ2hscFtYQV9NQVgrMV07ICAgICAgICAgICAgICAg LyogRXh0ZW5kZWQgYXJndW1lbnQgZm9yIG9wdGlvbiAqLworCitzdGF0aWMgVk9JRAoraW5peG9w dGhscCgpIHsKKyAgICBpbnQgaSwgajsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IFhBX01BWDsgaSsr KSB7ICAgICAvKiBJbml0aWFsaXplIGFsbCB0byBudWxsICovCisgICAgICAgIHhvcHRobHBbaV0g PSBOVUxMOworICAgICAgICB4YXJnaGxwW2ldID0gTlVMTDsKKyAgICB9CisgICAgZm9yIChpID0g MDsgaSA8IG54YXJnczsgaSsrKSB7ICAgICAgLyogVGhlbiBmb3IgZWFjaCBkZWZpbmVkIGtleXdv cmQgKi8KKyAgICAgICAgaiA9IHhhcmd0YWJbaV0ua3d2YWw7ICAgICAgICAgICAvKiBpbmRleCBi eSBhc3NvY2lhdGVkIHZhbHVlICovCisgICAgICAgIGlmIChqIDwgMCB8fCBqID4gWEFfTUFYKQor ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzd2l0Y2ggKGopIHsKKyNpZmRlZiBDS19MT0dJ TgorICAgICAgICAgIGNhc2UgWEFfQU5PTjogICAgICAgICAgICAgICAgIC8qICItLWFub255bW91 cyIgKi8KKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1hbm9ueW1vdXM6e29uLG9mZn0gW0lL U0Qgb25seV0iOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJXaGV0aGVyIHRvIGFsbG93IGFu b255bW91cyBJS1NEIGxvZ2lucyI7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBVTklYCisJ ICBjYXNlIFhBX1BSSVY6CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tcHJpdmlkOntvbixv ZmZ9IFtJS1NEIG9ubHldIjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiV2hldGhlciB0byBh bGxvdyBwcml2aWxlZ2VkIElEcyB0byBsb2dpbiB0byBJS1NEIjsKKyAgICAgICAgICAgIGJyZWFr OworI2VuZGlmIC8qIFVOSVggKi8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworICAgICAgICAgIGNh c2UgWEFfQkFGSTogICAgICAgICAgICAgICAgIC8qICItLWJhbm5lcmZpbGUiICovCisgICAgICAg ICAgICB4b3B0aGxwW2pdID0gIi0tYmFubmVyZmlsZTo8ZmlsZW5hbWU+IjsKKyAgICAgICAgICAg IHhhcmdobHBbal0gPSAiRmlsZSB0byBkaXNwbGF5IHVwb24gc3RhcnR1cCBvciBJS1NEIGxvZ2lu IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfQ0RGSTogICAgICAgICAg ICAgICAgIC8qICItLWNkZmlsZSIgKi8KKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1jZGZp bGU6PGZpbGVuYW1lPiI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIkZpbGUgdG8gZGlzcGxh eSB3aGVuIHNlcnZlciBjaGFuZ2VzIGRpcmVjdG9yeSI7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICBjYXNlIFhBX0NETVM6ICAgICAgICAgICAgICAgICAvKiAiLS1jZG1lc3NhZ2UiICov CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tY2RtZXNzYWdlOntvbixvZmZ9IjsKKyAgICAg ICAgICAgIHhhcmdobHBbal0gPSAiV2hldGhlciB0byBkaXNwbGF5IENEIG1lc3NhZ2UgZmlsZSI7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhBX0hFTFA6ICAgICAgICAgICAg ICAgICAvKiAiLS1oZWxwIiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLWhlbHAiOwor ICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJQcmludCB0aGlzIGhlbHAgdGV4dCBhYm91dCBleHRl bmRlZCBvcHRpb25zIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfSEVG STogICAgICAgICAgICAgICAgIC8qICItLWhlbHAiICovCisgICAgICAgICAgICB4b3B0aGxwW2pd ID0gIi0taGVscGZpbGU6PGZpbGVuYW1lPiI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIkZp bGUgY29udGFpbmluZyBjdXN0b20gaW5mbyBmb3IgSEVMUCBjb21tYW5kIjsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfSUtGSTogICAgICAgICAgICAgICAgIC8qICItLXhm ZXJmaWxlIiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXhmZXJmaWxlOjxmaWxlbmFt ZT4gW0lLU0Qgb25seV0iOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJOYW1lIG9mIGZ0cGQt bGlrZSBsb2dmaWxlLiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhBX0lL TEc6ICAgICAgICAgICAgICAgICAvKiAiLS14ZmVybG9nIiAqLworICAgICAgICAgICAgeG9wdGhs cFtqXSA9ICItLXhmZXJsb2c6e29uLG9mZn0gW0lLU0Qgb25seV0iOworICAgICAgICAgICAgeGFy Z2hscFtqXSA9ICJXaGV0aGVyIHRvIGtlZXAgYW4gZnRwZC1saWtlIGxvZ2ZpbGUuIjsKKyAgICAg ICAgICAgIGJyZWFrOworI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgY2FzZSBYQV9BTkZJOiAg ICAgICAgICAgICAgICAgLyogIi0taW5pdGZpbGUiICovCisgICAgICAgICAgICB4b3B0aGxwW2pd ID0gIi0taW5pdGZpbGU6PGZpbGVuYW1lPiBbSUtTRCBvbmx5XSI7CisgICAgICAgICAgICB4YXJn aGxwW2pdID0gIkluaXRpYWxpemF0aW9uIGZpbGUgZm9yIGFub255bW91cyB1c2Vycy4iOworICAg ICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0tfUEVSTQorICAgICAgICAgIGNhc2UgWEFfUEVSTTog ICAgICAgICAgICAgICAgIC8qICItLXBlcm1pc3Npb25zIiAqLworICAgICAgICAgICAgeG9wdGhs cFtqXSA9ICItLXBlcm1pc3Npb25zOjxvY3RhbG51bT4gW0lLU0Qgb25seV0iOworICAgICAgICAg ICAgeGFyZ2hscFtqXSA9ICJQZXJtaXNzaW9ucyBmb3IgZmlsZXMgdXBsb2FkZWQgYnkgYW5vbnlt b3VzIHVzZXJzLiI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19QRVJNICovCisj aWZkZWYgVU5JWAorICAgICAgICAgIGNhc2UgWEFfUk9PVDogICAgICAgICAgICAgICAgIC8qICIt LXJvb3QiICovCisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tcm9vdDo8ZGlyZWN0b3J5PiBb SUtTRCBvbmx5XSI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIkZpbGUtc3lzdGVtIHJvb3Qg Zm9yIGFub255bW91cyB1c2Vycy4iOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZSAvKiBVTklY ICovCisjaWZkZWYgQ0tST09UCisgICAgICAgICAgY2FzZSBYQV9ST09UOiAgICAgICAgICAgICAg ICAgLyogIi0tcm9vdCIgKi8KKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1yb290OjxkaXJl Y3Rvcnk+IFtJS1NEIG9ubHldIjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiRmlsZS1zeXN0 ZW0gcm9vdCBmb3IgYW5vbnltb3VzIHVzZXJzLiI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBDS1JPT1QgKi8KKyNlbmRpZiAvKiBVTklYICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8K KyNpZmRlZiBDS1NZU0xPRworICAgICAgICAgIGNhc2UgWEFfU1lTTDogICAgICAgICAgICAgICAg IC8qICItLXN5c2xvZyIgKi8KKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1zeXNsb2c6PGRp Z2l0PiBbSUtTRCBvbmx5XSI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIlN5c2xvZyByZWNv cmRpbmcgbGV2ZWwsIDAtNi4iOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQ0tTWVNM T0cgKi8KKyAgICAgICAgICBjYXNlIFhBX1VTRkk6ICAgICAgICAgICAgICAgICAvKiAiLS11c2Vy ZmlsZSIgKi8KKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS11c2VyZmlsZTo8ZmlsZW5hbWU+ IFtJS1NEIG9ubHldIjsKKyAgICAgICAgICAgIHhhcmdobHBbal0gPSAiRm9yYmlkZGVuIHVzZXIg ZmlsZS4iOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0tXVE1QCisgICAgICAgICAgY2Fz ZSBYQV9XVEZJOiAgICAgICAgICAgICAgICAgLyogIi0td3RtcGZpbGUiICovCisgICAgICAgICAg ICB4b3B0aGxwW2pdID0gIi0td3RtcGZpbGU6PGZpbGVuYW1lPiBbSUtTRCBvbmx5XSI7CisgICAg ICAgICAgICB4YXJnaGxwW2pdID0gIk5hbWUgb2Ygd3RtcCBsb2dmaWxlLiI7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICBjYXNlIFhBX1dUTVA6ICAgICAgICAgICAgICAgICAvKiAiLS13 dG1wbG9nIiAqLworICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXd0bXBsb2c6e29uLG9mZn0g W0lLU0Qgb25seV0iOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJXaGV0aGVyIHRvIGtlZXAg YSB3dG1wIGxvZ2ZpbGUuIjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLV1RNUCAq LworI2lmZGVmIENLX0xPR0lOCisgICAgICAgICAgY2FzZSBYQV9USU1POiAgICAgICAgICAgICAg ICAgLyogIi0tdGltZW91dCIgKi8KKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS10aW1lb3V0 OjxzZWNvbmRzPiBbSUtTRCBvbmx5XSI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0KKyAiSG93 IGxvbmcgdG8gd2FpdCBmb3IgbG9naW4gYmVmb3JlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uIjsK KyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICAgICAgY2Fz ZSBYQV9OT0lOOgorICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5vaW50ZXJydXB0cyI7Cisg ICAgICAgICAgICB4YXJnaGxwW2pdID0gIkRpc2FibGUga2V5Ym9hcmQgaW50ZXJydXB0cy4iOwor ICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgVU5JWAorICAgICAgICAgIGNhc2UgWEFfVU5CVUY6 CisgICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tdW5idWZmZXJlZCI7CisgICAgICAgICAgICB4 YXJnaGxwW2pdID0gIkZvcmNlIHVuYnVmZmVyZWQgY29uc29sZSBpL28uIjsKKyAgICAgICAgICAg IGJyZWFrOworI2VuZGlmCS8qIFVOSVggKi8KKyNpZmRlZiBJS1NEQgorICAgICAgICAgIGNhc2Ug WEFfREJBUzoKKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1kYXRhYmFzZTp7b24sb2ZmfSI7 CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIkVuYWJsZS9EaXNhYmxlIElLU0QgZGF0YWJhc2Ug KElLU0Qgb25seSkiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYQV9EQkZJ OgorICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLWRiZmlsZTo8ZmlsZW5hbWU+IjsKKyAgICAg ICAgICAgIHhhcmdobHBbal0gPSAiU3BlY2lmeSBJS1NEIGRhdGFiYXNlIGZpbGUgKElLU0Qgb25s eSkiOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogSUtTREIgKi8KKyNpZmRlZiBDS19Q RVJNUworCSAgY2FzZSBYQV9OUFJNOgorICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5vcGVy bXMiOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJEaXNhYmxlIGZpbGUtdHJhbnNmZXIgUGVy bWlzc2lvbnMgYXR0cmlidXRlLiI7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS19Q RVJNUyAqLworI2lmZGVmIEtVSQorICAgICAgICAgIGNhc2UgWEFfQ0hHRDoKKwkgICAgeG9wdGhs cFtqXSA9ICItLWNoYW5nZWRpbSI7CisJICAgIHhhcmdobHBbal0gPSAiQ2hhbmdlIERpbWVuc2lv biBvbiBXaW5kb3cgUmVzaXplIjsKKyAgICAgICAgICBjYXNlIFhBX1NDQUxFOgorCSAgICB4b3B0 aGxwW2pdID0gIi0tc2NhbGVmb250IjsKKwkgICAgeGFyZ2hscFtqXSA9ICJTY2FsZSBGb250IG9u IFdpbmRvdyBSZXNpemUiOworICAgICAgICAgIGNhc2UgWEFfV01BWDoKKwkgICAgeG9wdGhscFtq XSA9ICItLW1heGltaXplIjsKKwkgICAgeGFyZ2hscFtqXSA9ICJzdGFydCBLOTVHIHdpbmRvdyBt YXhpbWl6ZWQuIjsKKwkgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYQV9XTUlOOgorCSAgICB4 b3B0aGxwW2pdID0gIi0tbWluaW1pemUiOworCSAgICB4YXJnaGxwW2pdID0gInN0YXJ0IEs5NUcg d2luZG93IG1pbmltaXplZC4iOworCSAgICBicmVhazsKKwkgIGNhc2UgWEFfWFBPUzoKKwkgICAg eG9wdGhscFtqXSA9ICItLXhwb3M6biI7CisJICAgIHhhcmdobHBbal0gPSAiWC1jb29yZGluYXRl IG9mIHdpbmRvdyBwb3NpdGlvbiAobnVtYmVyKS4iOworCSAgICBicmVhazsKKwkgIGNhc2UgWEFf WVBPUzoKKwkgICAgeG9wdGhscFtqXSA9ICItLXlwb3M6biI7CisJICAgIHhhcmdobHBbal0gPSAi WS1jb29yZGluYXRlIG9mIHdpbmRvdyBwb3NpdGlvbiAobnVtYmVyKS4iOworCSAgICBicmVhazsK KwkgIGNhc2UgWEFfRk5BTToKKwkgICAgeG9wdGhscFtqXSA9ICItLWZvbnRuYW1lOnMgKG9yIC0t ZmFjZW5hbWU6cykiOworCSAgICB4YXJnaGxwW2pdID0gIkZvbnQvdHlwZWZhY2UgbmFtZTogc3Ry aW5nIHdpdGggXyByZXBsYWNpbmcgYmxhbmsuIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIFhBX0ZT SVo6CisJICAgIHhvcHRobHBbal0gPSAiLS1mb250c2l6ZTpuIjsKKwkgICAgeGFyZ2hscFtqXSA9 ICJGb250IHBvaW50IHNpemUgKG51bWJlcikuIjsKKwkgICAgYnJlYWs7CisgICAgICAgICAgY2Fz ZSBYQV9OT01OOgorICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5vbWVudWJhciI7CisgICAg ICAgICAgICB4YXJnaGxwW2pdID0gIk5vIE1lbnUgQmFyIjsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgWEFfTk9UQjoKKyAgICAgICAgICAgIHhvcHRobHBbal0gPSAiLS1ub3Rv b2xiYXIiOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJObyBUb29sIEJhciI7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhBX05PU0I6CisgICAgICAgICAgICB4b3B0aGxw W2pdID0gIi0tbm9zdGF0dXNiYXIiOworICAgICAgICAgICAgeGFyZ2hscFtqXSA9ICJObyBTdGF0 dXMgQmFyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfTk9CQVI6Cisg ICAgICAgICAgICB4b3B0aGxwW2pdID0gIi0tbm9iYXJzIjsKKyAgICAgICAgICAgIHhhcmdobHBb al0gPSAiTm8gTWVudSwgU3RhdHVzLCBvciBUb29sIEJhcnMiOworICAgICAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogS1VJICovCisjaWZuZGVmIE5PUFVTSAorICAgICAgICAgIGNhc2UgWEFfTk9Q VVNIOgorCSAgICB4b3B0aGxwW2pdID0gIi0tbm9wdXNoIjsKKwkgICAgeGFyZ2hscFtqXSA9ICJE aXNhYmxlIGV4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uLiI7CisJICAgIGJyZWFrOworI2VuZGlm IC8qIE5PUFVTSCAqLworI2lmZGVmIE9TMgorICAgICAgICAgIGNhc2UgWEFfTE9DSzoKKwkgICAg eG9wdGhscFtqXSA9ICItLWxvY2tkb3duIjsKKwkgICAgeGFyZ2hscFtqXSA9ICJFbmFibGUgYWxs IGxvY2tkb3duIG9wdGlvbnMuIjsKKwkgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBYQV9OT0NM T1NFOgorICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLW5vY2xvc2UiOworICAgICAgICAgICAg eGFyZ2hscFtqXSA9ICJEaXNhYmxlIENsb3NlIFdpbmRvdyBhbmQgTWVudSBFeGl0LiI7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFhBX05PU0NST0xMOgorCSAgICB4b3B0aGxw W2pdID0gIi0tbm9zY3JvbGwiOworCSAgICB4YXJnaGxwW2pdID0gIkRpc2FibGUgc2Nyb2xsYmFj ayBvcGVyYXRpb25zLiI7CisJICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgWEFfTk9FU0NBUEU6 CisJICAgIHhvcHRobHBbal0gPSAiLS1ub2VzY2FwZSI7CisJICAgIHhhcmdobHBbal0gPSAiRGlz YWJsZSBlc2NhcGUgZnJvbSBjb25uZWN0IG1vZGUuIjsKKwkgICAgYnJlYWs7CisJICBjYXNlIFhB X1JPV1M6CisJICAgIHhvcHRobHBbal0gPSAiLS1oZWlnaHQ6biI7CisJICAgIHhhcmdobHBbal0g PSAiU2NyZWVuIGhlaWdodCAobnVtYmVyIG9mIHJvd3MpLiI7CisJICAgIGJyZWFrOworCSAgY2Fz ZSBYQV9DT0xTOgorCSAgICB4b3B0aGxwW2pdID0gIi0td2lkdGg6biI7CisJICAgIHhhcmdobHBb al0gPSAiU2NyZWVuIHdpZHRoIChudW1iZXIgb2YgY29sdW1ucykuIjsKKwkgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSBYQV9USVRMOgorICAgICAgICAgICAgeG9wdGhscFtqXSA9ICItLXRpdGxl OnN0cmluZyI7CisgICAgICAgICAgICB4YXJnaGxwW2pdID0gIldpbmRvdyBUaXRsZS4iOworICAg ICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogT1MyICovCisJICBjYXNlIFhBX0NTRVQ6CisJICAg IHhvcHRobHBbal0gPSAiLS1yY2hhcnNldDpuYW1lIjsKKwkgICAgeGFyZ2hscFtqXSA9ICJOYW1l IG9mIHJlbW90ZSB0ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0LiI7CisJICAgIGJyZWFrOworCSAgY2Fz ZSBYQV9URVJNOgorCSAgICB4b3B0aGxwW2pdID0gIi0tdGVybXR5cGU6bmFtZSI7CisjaWZkZWYg T1MyCisJICAgIHhhcmdobHBbal0gPSAiQ2hvb3NlIHRlcm1pbmFsIGVtdWxhdGlvbi4iOworI2Vs c2UKKwkgICAgeGFyZ2hscFtqXSA9ICJDaG9vc2UgdGVybWluYWwgdHlwZS4iOworI2VuZGlmIC8q IE9TMiAqLworCSAgICBicmVhazsKKwkgIGNhc2UgWEFfVVNFUjoKKwkgICAgeG9wdGhscFtqXSA9 ICItLXVzZXI6bmFtZSI7CisjaWZuZGVmIE5FVENPTk4KKwkgICAgeGFyZ2hscFtqXSA9ICJVc2Vy bmFtZSAoZm9yIG5ldHdvcmsgbG9naW4pIjsKKyNlbHNlCisJICAgIHhhcmdobHBbal0gPSAiVXNl cm5hbWUuIjsKKyNlbmRpZiAvKiBORVRDT05OICovCisJICAgIGJyZWFrOworICAgICAgIH0KKyAg ICB9Cit9CisKK1ZPSUQKK2luaW9wdGhscCgpIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgMTI4OyBpKyspIHsKKyAgICAgICAgb3B0YWN0W2ldID0gMDsKKyAgICAgICAgc3dpdGNo KGkpIHsKKyNpZmRlZiBPUzIKKyAgICAgICAgICBjYXNlICcjJzogICAgICAgICAgICAgICAgICAg ICAvKiBLOTUgU3RhcnR1cCBGbGFncyAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIktlcm1p dCA5NSBTdGFydHVwIEZsYWdzIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJcbiJcCisgICAg ICAgICAgICAgICIgICAxIC0gdHVybiBvZmYgV2luOTUgc3BlY2lhbCBmaXhlc1xuIlwKKyAgICAg ICAgICAgICAgIiAgIDIgLSBkbyBub3QgbG9hZCBvcHRpb25hbCBuZXR3b3JrIGRsbHNcbiJcCisg ICAgICAgICAgICAgICIgICA0IC0gZG8gbm90IGxvYWQgb3B0aW9uYWwgdGFwaSBkbGxzXG4iXAor ICAgICAgICAgICAgICAiICAgOCAtIGRvIG5vdCBsb2FkIG9wdGlvbmFsIGtlcmJlcm9zIGRsbHNc biJcCisgICAgICAgICAgICAgICIgIDE2IC0gZG8gbm90IGxvYWQgb3B0aW9uYWwgem1vZGVtIGRs bHNcbiJcCisgICAgICAgICAgICAgICIgIDMyIC0gdXNlIHN0ZGluIGZvciBpbnB1dCBpbnN0ZWFk IG9mIHRoZSBjb25zb2xlXG4iXAorICAgICAgICAgICAgICAiICA2NCAtIHVzZSBzdGRvdXQgZm9y IG91dHB1dCBpbnN0ZWFkIG9mIHRoZSBjb25zb2xlXG4iXAorICAgICAgICAgICAgICAiIDEyOCAt IGRvIG5vdCB0ZXJtaW5hdGUgcHJvY2VzcyBpbiByZXNwb25zZSB0byBTZXNzaW9uIExvZ29mZiI7 CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAgICAgICBjYXNlICcw JzogICAgICAgICAgICAgICAgICAgICAvKiBJbiB0aGUgbWlkZGxlICovCisgICAgICAgICAgICBv cHRobHBbaV0gPQorICAgICAgICAgICAgICAiMTAwJSB0cmFuc3BhcmVudCBDT05ORUNUIG1vZGUg Zm9yIFwiaW4tdGhlLW1pZGRsZVwiIG9wZXJhdGlvbiI7CisgICAgICAgICAgICBhcmdobHBbaV0g PSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICc4JzoKKyAgICAg ICAgICAgIG9wdGhscFtpXSA9ICJDb25uZWN0aW9uIGlzIDgtYml0IGNsZWFuIjsKKyAgICAgICAg ICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIE5FV0ZU UAorICAgICAgICAgIGNhc2UgJzknOgorICAgICAgICAgICAgb3B0aGxwW2ldID0gIk1ha2UgYSBj b25uZWN0aW9uIHRvIGFuIEZUUCBzZXJ2ZXIiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIklQ LWFkZHJlc3Mtb3ItaG9zdG5hbWVbOm9wdGlvbmFsLVRDUC1wb3J0XSI7CisgICAgICAgICAgICBi cmVhazsKKyNlbmRpZiAvKiBORVdGVFAgKi8KKworI2lmZGVmIElLU0QKKyAgICAgICAgICBjYXNl ICdBJzoKKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJLZXJtaXQgaXMgdG8gYmUgc3RhcnRlZCBh cyBhbiBJbnRlcm5ldCBzZXJ2aWNlIjsKKyNpZmRlZiBOVAorICAgICAgICAgICAgYXJnaGxwW2ld ID0gIiAgc29ja2V0IGhhbmRsZSBvZiBpbmNvbWluZyBjb25uZWN0aW9uIjsKKyNlbHNlIC8qIE5U ICovCisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworI2VuZGlmIC8qIE5UICovCisgICAg ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBJS1NEICovCisgICAgICAgICAgY2FzZSAnQic6IG9w dGhscFtpXSA9CisJICAiS2VybWl0IGlzIHJ1bm5pbmcgaW4gQmF0Y2ggb3IgQmFja2dyb3VuZCAo bm8gY29udHJvbGxpbmcgdGVybWluYWwpIjsKKyAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBO T1NQTAorICAgICAgICAgIGNhc2UgJ0MnOgorICAgICAgICAgICAgb3B0aGxwW2ldID0gIkludGVy YWN0aXZlLW1vZGUgQ29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQiOworICAgICAgICAgICAgYXJnaGxw W2ldID0gIkNvbW1hbmRzIHNlcGFyYXRlZCBieSBjb21tYXMsIGxpc3QgaW4gZG91YmxlcXVvdGVz IjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PU1BMICovCisgICAgICAgICAgY2Fz ZSAnRCc6CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiRGVsYXkgYmVmb3JlIHN0YXJ0aW5nIHRv IHNlbmQiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51bWJlciBvZiBzZWNvbmRzIjsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ0UnOgorICAgICAgICAgICAgb3B0aGxw W2ldID0gIkV4aXQgYXV0b21hdGljYWxseSB3aGVuIGNvbm5lY3Rpb24gY2xvc2VzIjsKKyAgICAg ICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBUQ1BT T0NLRVQKKyAgICAgICAgICBjYXNlICdGJzoKKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJVc2Ug YW4gZXhpc3RpbmcgVENQIGNvbm5lY3Rpb24iOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51 bWVyaWMgZmlsZSBkZXNjcmlwdG9yIG9mIG9wZW4gVENQIGNvbm5lY3Rpb24iOworICAgICAgICAg ICAgYnJlYWs7CisjZW5kaWYgLyogVENQU09DS0VUICovCisgICAgICAgICAgY2FzZSAnRyc6Cisg ICAgICAgICAgICBvcHRobHBbaV0gPSAiR0VUIGZyb20gc2VydmVyLCBzZW5kIHRvIHN0YW5kYXJk IG91dHB1dCI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiUmVtb3RlIGZpbGUgc3BlY2lmaWNh dGlvbiI7CisgICAgICAgICAgICBvcHRhY3RbaV0gPSAxOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSAnSCc6CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiU3VwcHJlc3MgcHJv Z3JhbSBzdGFydHVwIEhlcmFsZCBhbmQgZ3JlZXRpbmciOworICAgICAgICAgICAgYXJnaGxwW2ld ID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ0knOgorICAgICAg ICAgICAgb3B0aGxwW2ldID0gIkNvbm5lY3Rpb24gaXMgcmVsaWFibGUsIHN0cmVhbWluZyBpcyBh bGxvd2VkIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVh azsKKyNpZmRlZiBUQ1BTT0NLRVQKKyAgICAgICAgICBjYXNlICdKJzoKKyAgICAgICAgICAgIG9w dGhscFtpXSA9ICInQmUgbGlrZSBUZWxuZXQnIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9ICJJ UCBob3N0bmFtZS9hZGRyZXNzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgc2VydmljZSI7CisgICAg ICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBUQ1BTT0NLRVQgKi8KKyAgICAgICAgICBjYXNlICdM JzoKKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJSZWN1cnNpdmUgZGlyZWN0b3J5IGRlc2NlbnQg Zm9yIGZpbGVzIGluIC1zIG9wdGlvbiI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnTSc6CisgICAgICAgICAgICBvcHRo bHBbaV0gPSAiTXkgdXNlciBuYW1lIChmb3IgdXNlIHdpdGggVGVsbmV0LCBSbG9naW4sIGV0Yyki OworICAgICAgICAgICAgYXJnaGxwW2ldID0gIlVzZXJuYW1lIHN0cmluZyI7CisgICAgICAgICAg ICBicmVhazsKKyNpZmRlZiBORVRCSU9TCisgICAgICAgICAgY2FzZSAnTic6CisgICAgICAgICAg ICBvcHRobHBbaV0gPSAiTkVUQklPUyBhZGFwdGVyIG51bWJlciI7CisgICAgICAgICAgICBhcmdo bHBbaV0gPSAiTnVtYmVyIjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVEJJT1Mg Ki8KKyAgICAgICAgICBjYXNlICdPJzogICAgICAgICAgICAgICAgICAgICAvKiBCZSBhIHNlcnZl ciBmb3IgT25lIGNvbW1hbmQgb25seSAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIkJlIGEg c2VydmVyIGZvciBPbmUgY29tbWFuZCBvbmx5IjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5V TEw7CisgICAgICAgICAgICBvcHRhY3RbaV0gPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgY2FzZSAnUCc6CisgICAgICAgICAgICBvcHRobHBbaV0gPSAiRG9uJ3QgY29udmVydCBm aWxlIChQYXRoKSBuYW1lcyI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnUSc6CisgICAgICAgICAgICBvcHRobHBbaV0g PSAiUXVpY2sgKEZBU1QpIEtlcm1pdCBwcm90b2NvbCBzZXR0aW5ncyI7CisgICAgICAgICAgICBh cmdobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnUic6 ICAgICAgICAgICAgICAgICAgICAgLyogUmVtb3RlLU9ubHkgKi8KKyAgICAgICAgICAgIG9wdGhs cFtpXSA9ICJSZW1vdGUtb25seSAobWFrZXMgSUYgUkVNT1RFIHRydWUpIjsKKyAgICAgICAgICAg IGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdT JzogICAgICAgICAgICAgICAgICAgICAvKiAiU3RheSIgLSBlbnRlciBpbnRlcmFjdGl2ZSAqLwor ICAgICAgICAgICAgb3B0aGxwW2ldID0gIlN0YXkgKGVudGVyIGNvbW1hbmQgcGFyc2VyIGFmdGVy IGFjdGlvbiBvcHRpb25zKSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnVCc6ICAgICAgICAgICAgICAgICAgICAgLyog VGV4dCBmaWxlIHRyYW5zZmVyIG1vZGUgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJUcmFu c2ZlciBmaWxlcyBpbiBUZXh0IG1vZGUiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsK KyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIEFOWVgyNQorICAgICAgICAgIGNhc2UgJ1UnOiAg ICAgICAgICAgICAgICAgICAgIC8qIFguMjUgY2FsbCB1c2VyIGRhdGEgKi8KKyAgICAgICAgICAg IG9wdGhscFtpXSA9ICJYLjI1IGNhbGwgVXNlciBkYXRhIjsKKyAgICAgICAgICAgIGFyZ2hscFtp XSA9ICJDYWxsLXVzZXItZGF0YSBzdHJpbmciOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogQU5ZWDI1ICovCisgICAgICAgICAgY2FzZSAnVic6ICAgICAgICAgICAgICAgICAgICAgLyog Tm8gYXV0b21hdGljIGZpbGV0eXBlIHN3aXRjaGluZyAqLworICAgICAgICAgICAgb3B0aGxwW2ld ID0gIkRpc2FibGUgYXV0b21hdGljIHBlci1maWxlIHRleHQvYmluYXJ5IHN3aXRjaGluZyI7Cisg ICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYg Q09NTUVOVAorI2lmZGVmIE9TMgorICAgICAgICAgIGNhc2UgJ1cnOiAgICAgICAgICAgICAgICAg ICAgIC8qIFdpbjMyIFdpbmRvdyBIYW5kbGUgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICIi OworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworI2Vu ZGlmIC8qIE9TMiAqLworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNpZmRlZiBBTllYMjUKKyAgICAg ICAgICBjYXNlICdYJzogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSE9TVCB0byBYLjI1IGFk ZHJlc3MgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJNYWtlIGFuIFguMjUgY29ubmVjdGlv biI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSAiWC4yNSBvciBYLjEyMSBhZGRyZXNzIjsKKyAg ICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEFOWVgyNSAqLworICAgICAgICAgIGNhc2UgJ1kn OiAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KKyAgICAg ICAgICAgIG9wdGhscFtpXSA9ICJTa2lwIGluaXRpYWxpemF0aW9uIGZpbGUiOworICAgICAgICAg ICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIEFOWVgyNQor ICAgICAgICAgIGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBIT1NUIHRvIFgu MjUgZmlsZSBkZXNjcmlwdG9yICovCisgICAgICAgICAgICBvcHRobHBbaV0gPSAiTWFrZSBhbiBY LjI1IGNvbm5lY3Rpb24iOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51bWVyaWMgZmlsZSBk ZXNjcmlwdG9yIG9mIG9wZW4gWC4yNSBjb25uZWN0aW9uIjsKKyAgICAgICAgICAgIGJyZWFrOwor I2VuZGlmIC8qIEFOWVgyNSAqLworICAgICAgICAgIGNhc2UgJ2EnOiAgICAgICAgICAgICAgICAg ICAgIC8qIGFzLW5hbWUgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJBcy1uYW1lIGZvciBm aWxlKHMpIGluIC1zLCAtciwgb3IgLWciOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIkFzLW5h bWUgc3RyaW5nIChhbHRlcm5hdGl2ZSBmaWxlbmFtZSkiOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgY2FzZSAnYic6ICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGJpdHMtcGVyLXNl Y29uZCBmb3Igc2VyaWFsICovCisgICAgICAgICAgICBvcHRobHBbaV0gPSAiU3BlZWQgZm9yIHNl cmlhbCBkZXZpY2UiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIk51bWVyaWMgQml0cyBwZXIg c2Vjb25kIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ2MnOiAgICAgICAg ICAgICAgICAgICAgIC8qIENvbm5lY3QgYmVmb3JlICovCisgICAgICAgICAgICBvcHRhY3RbaV0g PSAxOworICAgICAgICAgICAgb3B0aGxwW2ldID0gIkNPTk5FQ1QgYmVmb3JlIHRyYW5zZmVycmlu ZyBmaWxlcyI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgY2FzZSAnZCc6ICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8K KyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJDcmVhdGUgZGVidWcubG9nIGZpbGUgKGEgc2Vjb25k IC1kIGFkZHMgdGltZXN0YW1wcykiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ2UnOiAgICAgICAgICAgICAgICAgICAg IC8qIEV4dGVuZGVkIHBhY2tldCBsZW5ndGggKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJN YXhpbXVtIGxlbmd0aCBmb3IgaW5jb21pbmcgZmlsZS10cmFuc2ZlciBwYWNrZXRzIjsKKyAgICAg ICAgICAgIGFyZ2hscFtpXSA9ICJMZW5ndGggaW4gYnl0ZXMiOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgY2FzZSAnZic6ICAgICAgICAgICAgICAgICAgICAgLyogZmluaXNoICovCisg ICAgICAgICAgICBvcHRhY3RbaV0gPSAxOworICAgICAgICAgICAgb3B0aGxwW2ldID0gIlNlbmQg RmluaXNoIGNvbW1hbmQgdG8gYSBLZXJtaXQgc2VydmVyIjsKKyAgICAgICAgICAgIGFyZ2hscFtp XSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdnJzogICAgICAg ICAgICAgICAgICAgICAvKiBnZXQgKi8KKyAgICAgICAgICAgIG9wdGFjdFtpXSA9IDE7CisgICAg ICAgICAgICBvcHRobHBbaV0gPSAiR0VUIGZpbGUocykgZnJvbSBhIEtlcm1pdCBzZXJ2ZXIiOwor ICAgICAgICAgICAgYXJnaGxwW2ldID0gIlJlbW90ZSBmaWxlIHNwZWNpZmljYXRpb24iOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnaCc6ICAgICAgICAgICAgICAgICAgICAg LyogaGVscCAqLworICAgICAgICAgICAgb3B0YWN0W2ldID0gMTsKKyNpZmRlZiBPUzJPUlVOSVgK KyAgICAgICAgICAgIG9wdGhscFtpXSA9CisJICAgICAgIlByaW50IHRoaXMgbWVzc2FnZSAocGlw ZSB0aHJ1ICdtb3JlJyB0byBwcmV2ZW50IHNjcm9sbGluZykiOworI2Vsc2UKKwkgICAgICAiUHJp bnQgdGhpcyBtZXNzYWdlIjsKKyNlbmRpZiAvKiBPUzJPUlVOSVggKi8KKyAgICAgICAgICAgIGFy Z2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICdpJzog ICAgICAgICAgICAgICAgICAgICAvKiBUcmVhdCBmaWxlcyBhcyBiaW5hcnkgKi8KKyAgICAgICAg ICAgIG9wdGhscFtpXSA9IlRyYW5zZmVyIGZpbGVzIGluIGJpbmFyeSBtb2RlIjsKKyAgICAgICAg ICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBUQ1BTT0NL RVQKKyAgICAgICAgICBjYXNlICdqJzogICAgICAgICAgICAgICAgICAgICAvKiBTRVQgSE9TVCAo VENQL0lQIHNvY2tldCkgKi8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJNYWtlIGEgVENQIGNv bm5lY3Rpb24iOworICAgICAgICAgICAgYXJnaGxwW2ldID0KKwkgICAgICAiVENQIGhvc3QgbmFt ZS9hZGRyZXNzIGFuZCBvcHRpb25hbCBzZXJ2aWNlIG5hbWUgb3IgbnVtYmVyIjsKKyAgICAgICAg ICAgIGJyZWFrOworI2VuZGlmIC8qIFRDUFNPQ0tFVCAqLworICAgICAgICAgIGNhc2UgJ2snOiAg ICAgICAgICAgICAgICAgICAgIC8qIHJlY2VpdmUgdG8gc3Rkb3V0ICovCisgICAgICAgICAgICBv cHRhY3RbaV0gPSAxOworICAgICAgICAgICAgb3B0aGxwW2ldID0gIlJFQ0VJVkUgZmlsZShzKSB0 byBzdGFuZGFyZCBvdXRwdXQiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ2wnOiAgICAgICAgICAgICAgICAgICAgIC8q IFNFVCBMSU5FICovCisgICAgICAgICAgICBvcHRobHBbaV0gPSAiTWFrZSBjb25uZWN0aW9uIG9u IHNlcmlhbCBjb21tdW5pY2F0aW9ucyBkZXZpY2UiOworICAgICAgICAgICAgYXJnaGxwW2ldID0g IlNlcmlhbCBkZXZpY2UgbmFtZSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl ICdtJzogICAgICAgICAgICAgICAgICAgICAvKiBNb2RlbSB0eXBlICovCisgICAgICAgICAgICBv cHRobHBbaV0gPSAiTW9kZW0gdHlwZSBmb3IgdXNlIHdpdGggLWwgZGV2aWNlIjsKKyAgICAgICAg ICAgIGFyZ2hscFtpXSA9ICJNb2RlbSBuYW1lIGFzIGluIFNFVCBNT0RFTSBUWVBFIGNvbW1hbmQi OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAnbic6ICAgICAgICAgICAgICAg ICAgICAgLyogY29ubmVjdCBhZnRlciAqLworICAgICAgICAgICAgb3B0YWN0W2ldID0gMTsKKyAg ICAgICAgICAgIG9wdGhscFtpXSA9ICJDT05ORUNUIGFmdGVyIHRyYW5zZmVycmluZyBmaWxlcyI7 CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisjaWZk ZWYgQU5ZWDI1CisgICAgICAgICAgY2FzZSAnbyc6ICAgICAgICAgICAgICAgICAgICAgLyogWC4y NSBjbG9zZWQgdXNlciBncm91cCAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIlguMjUgY2xv c2VkIHVzZXIgZ3JvdXAiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIlVzZXIgZ3JvdXAgc3Ry aW5nIjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEFOWVgyNSAqLworICAgICAgICAg IGNhc2UgJ3AnOiAgICAgICAgICAgICAgICAgICAgIC8qIFNFVCBQQVJJVFkgKi8KKyAgICAgICAg ICAgIG9wdGhscFtpXSA9ICJQYXJpdHkiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIk9uZSBv ZiB0aGUgZm9sbG93aW5nOiBldmVuLCBvZGQsIG1hcmssIG5vbmUsIHNwYWNlIjsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgJ3EnOiAgICAgICAgICAgICAgICAgICAgIC8qIFF1 aWV0ICovCisgICAgICAgICAgICBvcHRobHBbaV0gPSAiUXVpZXQgKHN1cHByZXNzIG1vc3QgbWVz c2FnZXMpIjsKKyAgICAgICAgICAgIGFyZ2hscFtpXSA9IE5VTEw7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICBjYXNlICdyJzogICAgICAgICAgICAgICAgICAgICAvKiByZWNlaXZlICov CisgICAgICAgICAgICBvcHRhY3RbaV0gPSAxOworICAgICAgICAgICAgb3B0aGxwW2ldID0gIlJF Q0VJVkUgZmlsZShzKSI7CisgICAgICAgICAgICBhcmdobHBbaV0gPSBOVUxMOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAncyc6ICAgICAgICAgICAgICAgICAgICAgLyogc2Vu ZCAqLworICAgICAgICAgICAgb3B0YWN0W2ldID0gMTsKKyAgICAgICAgICAgIG9wdGhscFtpXSA9 ICJTRU5EIGZpbGUocykiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIk9uZSBvciBtb3JlIGZp bGUgc3BlY2lmaWNhdGlvbnMiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAn dCc6ICAgICAgICAgICAgICAgICAgICAgLyogTGluZSB0dXJuYXJvdW5kIGhhbmRzaGFrZSAqLwor ICAgICAgICAgICAgb3B0aGxwW2ldID0gIlhPTiBUdXJuYXJvdW5kIGNoYXJhY3RlciBmb3IgaGFs Zi1kdXBsZXggY29ubmVjdGlvbnMiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAg ICAgICAgICAgIGJyZWFrOworI2lmZGVmIEFOWVgyNQorICAgICAgICAgIGNhc2UgJ3UnOiAgICAg ICAgICAgICAgICAgICAgIC8qIFguMjUgcmV2ZXJzZSBjaGFyZ2UgY2FsbCAqLworICAgICAgICAg ICAgb3B0aGxwW2ldID0gIlguMjUgcmV2ZXJzZSBjaGFyZ2UgY2FsbCI7CisgICAgICAgICAgICBh cmdobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQU5ZWDI1ICov CisgICAgICAgICAgY2FzZSAndic6ICAgICAgICAgICAgICAgICAgICAgLyogVmluZG93IHNpemUg Ki8KKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJXaW5kb3cgc2l6ZSI7CisgICAgICAgICAgICBh cmdobHBbaV0gPSAiTnVtYmVyLCAxIHRvIDMyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgIGNhc2UgJ3cnOiAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlb3ZlciAqLworICAgICAg ICAgICAgb3B0aGxwW2ldID0gIkluY29taW5nIGZpbGVzIFdyaXRlIG92ZXIgZXhpc3RpbmcgZmls ZXMiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgIGNhc2UgJ3gnOiAgICAgICAgICAgICAgICAgICAgIC8qIFNlcnZlciAqLworICAg ICAgICAgICAgb3B0YWN0W2ldID0gMTsKKyAgICAgICAgICAgIG9wdGhscFtpXSA9ICJCZSBhIEtl cm1pdCBTRVJWRVIiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgIGNhc2UgJ3knOiAgICAgICAgICAgICAgICAgICAgIC8qIEFsdGVy bmF0ZSBpbml0LWZpbGUgbmFtZSAqLworICAgICAgICAgICAgb3B0aGxwW2ldID0gIkFsdGVybmF0 aXZlIGluaXRpYWxpemF0aW9uIGZpbGUiOworICAgICAgICAgICAgYXJnaGxwW2ldID0gIkZpbGUg c3BlY2lmaWNhdGlvbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlICd6Jzog ICAgICAgICAgICAgICAgICAgICAvKiBOb3QgYmFja2dyb3VuZCAqLworICAgICAgICAgICAgb3B0 aGxwW2ldID0gIkZvcmNlIGZvcmVncm91bmQgYmVoYXZpb3IiOworICAgICAgICAgICAgYXJnaGxw W2ldID0gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICBvcHRobHBbaV0gPSBOVUxMOworICAgICAgICAgICAgYXJnaGxwW2ldID0gTlVMTDsK KyAgICAgICAgfQorICAgIH0KKyAgICBpbml4b3B0aGxwKCk7Cit9CisKK2ludAorZG94YXJnKHMs cHJlKSBjaGFyICoqIHM7IGludCBwcmU7IHsKKyNpZmRlZiBJS1NECisjaWZkZWYgQ0tfTE9HSU4K KyAgICBleHRlcm4gaW50IGNreHN5c2xvZywgY2t4d3RtcCwgY2t4YW5vbjsKKyNpZmRlZiBVTklY CisgICAgZXh0ZXJuIGludCBja3hwcml2OworI2VuZGlmIC8qIFVOSVggKi8KKyNpZmRlZiBDS19Q RVJNUworICAgIGV4dGVybiBpbnQgY2t4cGVybXM7CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKyAg ICBleHRlcm4gY2hhciAqIGFub25maWxlLCAqIHVzZXJmaWxlLCAqIGFub25yb290OworI2VuZGlm IC8qIENLX0xPR0lOICovCisjaWZkZWYgQ0tXVE1QCisgICAgZXh0ZXJuIGNoYXIgKiB3dG1wZmls ZTsKKyNlbmRpZiAvKiBDS1dUTVAgKi8KKyNlbmRpZiAvKiBJS1NEICovCisgICAgZXh0ZXJuIGlu dCBzcnZjZG1zZzsKKyAgICBleHRlcm4gY2hhciAqIGNkbXNnZmlsZVtdLCAqIGNkbXNnc3RyOwor ICAgIGNoYXIgdG1wYnVmW0NLTUFYUEFUSCsxXTsKKworICAgIGludCBpLCB4LCB5LCB6LCBoYXZl YXJnID0gMDsKKyAgICBjaGFyIGJ1ZltYQVJHQlVGTF0sIGMsICogcDsKKworICAgIGlmIChueGFy Z3MgPCAxKQorICAgICAgcmV0dXJuKC0xKTsKKworICAgIGMgPSAqKCpzICsgMSk7ICAgICAgICAg ICAgICAgICAgICAgIC8qIEh5cGhlbiBvciBQbHVzIHNpZ24gKi8KKworICAgIHAgPSAqcyArIDI7 CisgICAgZm9yIChpID0gMDsgKnAgJiYgaSA8IFhBUkdCVUZMOyBpKyspIHsKKyAgICAgICAgYnVm W2ldID0gKnArKzsKKyAgICAgICAgaWYgKGJ1ZltpXSA9PSAnPScgfHwgYnVmW2ldID09ICc6Jykg eworICAgICAgICAgICAgaGF2ZWFyZyA9IDE7CisgICAgICAgICAgICBidWZbaV0gPSBOVUw7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChidWZbaV0gPCAnICcpIHsKKyAg ICAgICAgICAgIGJ1ZltpXSA9IE5VTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgfQorICAgIGlmIChpID4gWEFSR0JVRkwgLSAxKQorICAgICAgcmV0dXJuKC0xKTsKKyAgICBi dWZbaV0gPSBOVUw7CisKKyAgICB4ID0gbG9va3VwKHhhcmd0YWIsYnVmLG54YXJncywmeik7ICAv KiBMb29rdXAgdGhlIG9wdGlvbiBrZXl3b3JkICovCisKKyAgICBpZiAoeCA8IDApICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBPbiBhbnkga2luZCBvZiBlcnJvciAqLworICAgICAgcmV0dXJu KC0xKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZhaWwuICovCisKKyAgICAvKiBIYW5kbGUg cHJlc2NhbiB2ZXJzdXMgcG9zdC1pbml0aWFsaXphdGlvbiBmaWxlICovCisKKyAgICBpZiAoKCh4 YXJndGFiW3pdLmZsZ3MgJiBDTV9QUkUpIHx8IChjID09ICcrJykpICYmICFwcmUpCisgICAgICBy ZXR1cm4oMCk7CisgICAgZWxzZSBpZiAocHJlICYmICEoeGFyZ3RhYlt6XS5mbGdzICYgQ01fUFJF KSAmJiAoYyAhPSAnKycpKQorICAgICAgcmV0dXJuKDApOworCisgICAgLyogRW5zdXJlIHRoYXQg YXJndW1lbnQgaXMgZ2l2ZW4gaWYgYW5kIG9ubHkgaWYgcmVxdWlyZWQgKi8KKworICAgIHAgPSBo YXZlYXJnID8gKnMgKyBpICsgMyA6IE5VTEw7CisKKyAgICBpZiAoKHhhcmd0YWJbel0uZmxncyAm IENNX0FSRykgJiYgIWhhdmVhcmcpCisgICAgICByZXR1cm4oLTEpOworICAgIGVsc2UgaWYgKCgh KHhhcmd0YWJbel0uZmxncyAmIENNX0FSRykpICYmIGhhdmVhcmcpCisgICAgICByZXR1cm4oLTEp OworCisgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogT0sgdG8gcHJv Y2VzcyB0aGlzIG9wdGlvbi4uLiAqLworI2lmZGVmIENLU1lTTE9HCisgICAgICBjYXNlIFhBX1NZ U0w6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBTeXNsb2cgbGV2ZWwgKi8KKyAgICAgICAg eSA9IDA7CisgICAgICAgIGlmIChpc2RpZ2l0KCpwKSkgeworICAgICAgICAgICAgd2hpbGUgKCpw KSB7CisgICAgICAgICAgICAgICAgaWYgKCpwIDwgJzAnIHx8ICpwID4gJzknKQorICAgICAgICAg ICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICAgICAgICB5ID0geSAqIDEwICsgKCpwKysg LSAnMCcpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeSA9 IGxvb2t1cChva3RhYixwLG5va3RhYiwmeik7CisgICAgICAgICAgICBpZiAoeSA+IDApIHkgPSBT WVNMR19ERjsgICAgLyogWWVzID0gZGVmYXVsdCBsb2dnaW5nIGxldmVsICovCisgICAgICAgIH0K KyNpZm5kZWYgU1lTTE9HTEVWRUwKKyAgICAgICAgLyogSWYgc3BlY2lmaWVkIG9uIGNjIGNvbW1h bmQgbGluZSwgdXNlciBjYW4ndCBjaGFuZ2UgaXQuICovCisgICAgICAgIGlmICghaW5zZXJ2ZXIp ICAgICAgICAgICAgICAgICAgLyogRG9uJ3QgYWxsb3cgdm9sdW1pbm91cyBzeXNsb2dnaW5nICov CisgICAgICAgICAgaWYgKHkgPiBTWVNMR19GQSkgICAgICAgICAgICAgLyogYnkgb3JkaW5hcnkg dXNlcnMuICovCisgICAgICAgICAgICB5ID0gU1lTTEdfRkE7CisjZW5kaWYgLyogU1lTTE9HTEVW RUwgKi8KKyAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oLTEpOworI2lmZGVmIERFQlVHCisgICAg ICAgIGlmICh5ID49IFNZU0xHX0RCKQorICAgICAgICAgIGlmICghZGVibG9nKQorICAgICAgICAg ICAgZGVibG9nID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOworI2VuZGlmIC8qIERFQlVHICovCisj aWZkZWYgU1lTTE9HTEVWRUwKKyAgICAgICAgLyogSWYgc3BlY2lmaWVkIG9uIGNjIGNvbW1hbmQg bGluZSwgdXNlciBjYW4ndCBjaGFuZ2UgaXQuICovCisgICAgICAgIHkgPSBTWVNMT0dMRVZFTDsK KyNlbmRpZiAvKiBTWVNMT0dMRVZFTCAqLworICAgICAgICBja3hzeXNsb2cgPSB5OworICAgICAg ICAvKiBwcmludGYoImNreHN5c2xvZz0lZFxuIixja3hzeXNsb2cpOyAqLworICAgICAgICBicmVh azsKKyNlbmRpZiAvKiBDS1NZU0xPRyAqLworCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBDS1dU TVAKKyAgICAgIGNhc2UgWEFfV1RNUDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IHd0bXAg bG9nICovCisgICAgICAgIHkgPSBsb29rdXAob2t0YWIscCxub2t0YWIsJnopOworICAgICAgICBp ZiAoeSA8IDApIHJldHVybigtMSk7CisgICAgICAgIGNreHd0bXAgPSB5OworICAgICAgICAvKiBw cmludGYoImNreHd0bXA9JWRcbiIsY2t4d3RtcCk7ICovCisgICAgICAgIGJyZWFrOworCisgICAg ICBjYXNlIFhBX1dURkk6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiB3dG1wIGxvZ2ZpbGUg Ki8KKyAgICAgICAgaWYgKHpmbnFmcChwLENLTUFYUEFUSCx0bXBidWYpKQorICAgICAgICAgIHAg PSB0bXBidWY7CisgICAgICAgIG1ha2VzdHIoJnd0bXBmaWxlLHApOworICAgICAgICAvKiBwcmlu dGYoInd0bXBmaWxlPSVzXG4iLHd0bXBmaWxlKTsgKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYg LyogQ0tXVE1QICovCisKKyAgICAgIGNhc2UgWEFfQU5PTjogICAgICAgICAgICAgICAgICAgICAv KiBJS1M6IEFub255bW91cyBsb2dpbiBhbGxvd2VkICovCisgICAgICAgIHkgPSBsb29rdXAob2t0 YWIscCxub2t0YWIsJnopOworICAgICAgICBpZiAoeSA8IDApIHJldHVybigtMSk7CisgICAgICAg IGNreGFub24gPSB5OworICAgICAgICAvKiBwcmludGYoImNreGFub249JWRcbiIsY2t4YW5vbik7 ICovCisgICAgICAgIGJyZWFrOworCisjaWZkZWYgVU5JWAorICAgICAgY2FzZSBYQV9QUklWOiAg ICAgICAgICAgICAgICAgICAgIC8qIElLUzogUHJpdidkIGxvZ2luIGFsbG93ZWQgKi8KKyAgICAg ICAgeSA9IGxvb2t1cChva3RhYixwLG5va3RhYiwmeik7CisgICAgICAgIGlmICh5IDwgMCkgcmV0 dXJuKC0xKTsKKyAgICAgICAgY2t4cHJpdiA9IHk7CisgICAgICAgIC8qIHByaW50ZigiY2t4cHJp dj0lZFxuIixja3hwcml2KTsgKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogVU5JWCAqLwor CisjaWZkZWYgQ0tfUEVSTVMKKyAgICAgIGNhc2UgWEFfUEVSTTogICAgICAgICAgICAgICAgICAg ICAvKiBJS1M6IEFub255bW91cyBVcGxvYWQgUGVybWlzc2lvbnMgKi8KKyAgICAgICAgeSA9IDA7 CisgICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgaWYgKCpwIDwgJzAnIHx8ICpwID4g JzcnKQorICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgeSA9IHkgKiA4ICsg KCpwKysgLSAnMCcpOworICAgICAgICB9CisgICAgICAgIGNreHBlcm1zID0geTsKKyAgICAgICAg LyogcHJpbnRmKCJja3hwZXJtcz0lMDRvXG4iLGNreHBlcm1zKTsgKi8KKyAgICAgICAgYnJlYWs7 CisjZW5kaWYgLyogQ0tfUEVSTVMgKi8KKworICAgICAgY2FzZSBYQV9BTkZJOiAgICAgICAgICAg ICAgICAgICAgIC8qIEFub255bW91cyBpbml0IGZpbGUgKi8KKwlpZiAoIWlzYWJzb2x1dGUocCkp CisJICBpZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCisJICAgIHAgPSB0bXBidWY7Cisg ICAgICAgIG1ha2VzdHIoJmFub25maWxlLHApOworICAgICAgICAvKiBwcmludGYoImFub25maWxl PSVzXG4iLGFub25maWxlKTsgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWEFfVVNG STogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IEZvcmJpZGRlbiB1c2VyIGZpbGUgKi8KKwlp ZiAoIWlzYWJzb2x1dGUocCkpCisJICBpZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCisJ ICAgIHAgPSB0bXBidWY7CisgICAgICAgIG1ha2VzdHIoJnVzZXJmaWxlLHApOworICAgICAgICAv KiBwcmludGYoInVzZXJmaWxlPSVzXG4iLHVzZXJmaWxlKTsgKi8KKyAgICAgICAgYnJlYWs7CisK KyAgICAgIGNhc2UgWEFfUk9PVDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IEFub255bW91 cyByb290ICovCisJaWYgKCFpc2Fic29sdXRlKHApKQorCSAgaWYgKHpmbnFmcChwLENLTUFYUEFU SCx0bXBidWYpKQorCSAgICBwID0gdG1wYnVmOworICAgICAgICBtYWtlc3RyKCZhbm9ucm9vdCxw KTsKKyAgICAgICAgLyogcHJpbnRmKCJhbm9ucm9vdD0lc1xuIixhbm9ucm9vdCk7ICovCisgICAg ICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAgICAgIGNhc2UgWEFfQ0RGSTog ICAgICAgICAgICAgICAgICAgICAvKiBDRCBmaWxlbmFtZSAqLworI2lmZGVmIENPTU1FTlQKKyAg ICAgICAgLyogRG8gTk9UIGV4cGFuZCB0aGlzIG9uZSEgKi8KKyAgICAgICAgaWYgKHpmbnFmcChw LENLTUFYUEFUSCx0bXBidWYpKQorICAgICAgICAgIHAgPSB0bXBidWY7CisjZW5kaWYgLyogQ09N TUVOVCAqLworICAgICAgICBtYWtlbGlzdChwLGNkbXNnZmlsZSwxNik7CisgICAgICAgIG1ha2Vz dHIoJmNkbXNnc3RyLHApOworICAgICAgICAvKiBwcmludGYoImNkbXNnc3RyPSVzXG4iLGNkbXNn c3RyKTsgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWEFfQ0RNUzogICAgICAgICAg ICAgICAgICAgICAvKiBDRCBtZXNzYWdlcyAqLworICAgICAgICB5ID0gbG9va3VwKG9rdGFiLHAs bm9rdGFiLCZ6KTsKKyAgICAgICAgaWYgKHkgPCAwKSByZXR1cm4oLTEpOworICAgICAgICBzcnZj ZG1zZyA9IHk7CisgICAgICAgIC8qIHByaW50Zigic3J2Y2Rtc2c9JWRcbiIsc3J2Y2Rtc2cpOyAq LworICAgICAgICBicmVhazsKKworI2lmbmRlZiBOT1hGRVIKKyAgICAgIGNhc2UgWEFfSUtMRzog ICAgICAgICAgICAgICAgICAgICAvKiBUcmFuc2ZlciBsb2cgb24vb2ZmICovCisgICAgICAgIHkg PSBsb29rdXAob2t0YWIscCxub2t0YWIsJnopOworICAgICAgICBpZiAoeSA8IDApIHJldHVybigt MSk7CisgICAgICAgIHhmZXJsb2cgPSB5OworICAgICAgICAvKiBwcmludGYoInhmZXJsb2c9JWRc biIseGZlcmxvZyk7ICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFhBX0lLRkk6ICAg ICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgbG9nIGZpbGUgKi8KKwlpZiAoIWlzYWJzb2x1 dGUocCkpCisJICBpZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCisJICAgIHAgPSB0bXBi dWY7CisgICAgICAgIG1ha2VzdHIoJnhmZXJmaWxlLHApOworICAgICAgICB4ZmVybG9nID0gMTsK KyAgICAgICAgLyogcHJpbnRmKCJ4ZmVyZmlsZT0lc1xuIix4ZmVyZmlsZSk7ICovCisgICAgICAg IGJyZWFrOworCisgICAgICBjYXNlIFhBX0JBRkk6ICAgICAgICAgICAgICAgICAgICAgLyogSUtT OiBiYW5uZXIgKGdyZWV0aW5nKSBmaWxlICovCisJaWYgKCFpc2Fic29sdXRlKHApKQorCSAgaWYg KHpmbnFmcChwLENLTUFYUEFUSCx0bXBidWYpKQorCSAgICBwID0gdG1wYnVmOworICAgICAgICBt YWtlc3RyKCZiYW5uZXJmaWxlLHApOworICAgICAgICAvKiBwcmludGYoImJhbm5lcmZpbGU9JXNc biIsYmFubmVyZmlsZSk7ICovCisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5PWEZFUiAqLwor CisjaWZuZGVmIE5PSEVMUAorICAgICAgY2FzZSBYQV9IRUxQOiAgICAgICAgICAgICAgICAgICAg IC8qIEhlbHAgKi8KKyAgICAgICAgLyogcHJpbnRmKCJoZWxwXG4iKTsgKi8KKyAgICAgICAgZm9y IChpID0gMDsgaSA8PSBYQV9NQVg7IGkrKykKKyAgICAgICAgICBpZiAoeG9wdGhscFtpXSkKKyAg ICAgICAgICAgIHByaW50ZigiJXNcbiAgICVzXG5cbiIseG9wdGhscFtpXSx4YXJnaGxwW2ldKTsK KyAgICAgICAgaWYgKHN0YXlmbGcgfHwgd2hhdCA9PSBXX0NPTU1BTkQpCisgICAgICAgICAgYnJl YWs7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBkb2V4aXQoR09PRF9FWElULC0xKTsKKyNlbmRp ZiAvKiBOT0hFTFAgKi8KKworI2lmbmRlZiBOT0hFTFAKKyAgICAgIGNhc2UgWEFfSEVGSTogICAg ICAgICAgICAgICAgICAgICAvKiBJS1M6IGN1c3RvbSBoZWxwIGZpbGUgKi8KKwlpZiAoIWlzYWJz b2x1dGUocCkpCisJICBpZiAoemZucWZwKHAsQ0tNQVhQQVRILHRtcGJ1ZikpCisJICAgIHAgPSB0 bXBidWY7CisgICAgICAgIG1ha2VzdHIoJmhlbHBmaWxlLHApOworICAgICAgICAvKiBwcmludGYo ImhlbHBmaWxlPSVzXG4iLGhlbHBmaWxlKTsgKi8KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyog Tk9IRUxQICovCisKKyNpZmRlZiBDS19MT0dJTgorICAgICAgY2FzZSBYQV9USU1POgorICAgICAg ICBpZiAoIXJkaWdpdHMocCkpCisgICAgICAgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgbG9naW50 aW1vID0gYXRvaShwKTsKKyAgICAgICAgLyogcHJpbnRmKCJsb2dpbnRpbW89JWRcbiIscCk7ICov CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0xPR0lOICovCisKKyAgICAgIGNhc2UgWEFf Tk9JTjogICAgICAgICAgICAgICAgICAgICAvKiBObyBpbnRlcnJ1cHRzICovCisjaWZuZGVmIE5P SUNQCisgICAgICAgIGNtZGludCA9IDA7CisjZW5kaWYgLyogTk9JQ1AgKi8KKwl4c3VzcGVuZCA9 IDA7CisgICAgICAgIGJyZWFrOworCisjaWZkZWYgVU5JWAorICAgICAgY2FzZSBYQV9VTkJVRjoJ CQkvKiBVbmJ1ZmZlcmVkIGNvbnNvbGUgaS9vKi8KKwlicmVhazsJCQkJLyogVGhpcyBvbmUgaXMg aGFuZGxlZCBpbiBja2NtYWkuYyAqLworI2VuZGlmCS8qIFVOSVggKi8KKworI2lmZGVmIElLU0RC CisgICAgICBjYXNlIFhBX0RCRkk6IHsKKyAgICAgICAgICBleHRlcm4gY2hhciAqIGRiZGlyLCAq IGRiZmlsZTsKKyAgICAgICAgICBleHRlcm4gaW50IGRiZW5hYmxlZDsKKyAgICAgICAgICBzdHJ1 Y3QgemZuZnAgKiB6ejsKKyAgICAgICAgICBpZiAoKHp6ID0gemZucWZwKHAsQ0tNQVhQQVRILHRt cGJ1ZikpKSB7CisJICAgICAgY2hhciAqcywgKnMyID0gTlVMTDsKKyAgICAgICAgICAgICAgbWFr ZXN0cigmZGJkaXIsenotPmZwYXRoKTsKKyAgICAgICAgICAgICAgbWFrZXN0cigmZGJmaWxlLHp6 LT5mcGF0aCk7CisJICAgICAgZm9yIChzID0gZGJkaXI7ICpzOyBzKyspIHsKKwkJICBpZiAoSVNE SVJTRVAoKnMpKQorCQkgICAgczIgPSBzKzE7CisJICAgICAgfQorCSAgICAgIGlmIChzMikgKnMy ID0gTlVMOworCSAgICAgIGRlYnVnKEYxMTAsIlhBX0RCRkkgZGJkaXIiLGRiZGlyLDApOworCSAg ICAgIGRlYnVnKEYxMTAsIlhBX0RCRkkgZGJmaWxlIixkYmZpbGUsMCk7CisgICAgICAgICAgICAg IGRiZW5hYmxlZCA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgfQor ICAgICAgY2FzZSBYQV9EQkFTOiB7CisgICAgICAgICAgZXh0ZXJuIGludCBkYmVuYWJsZWQ7Cisg ICAgICAgICAgeSA9IGxvb2t1cChva3RhYixwLG5va3RhYiwmeik7CisgICAgICAgICAgaWYgKHkg PCAwKSByZXR1cm4oLTEpOworICAgICAgICAgIGRiZW5hYmxlZCA9IHk7CisgICAgICAgICAgYnJl YWs7CisgICAgICB9CisjZW5kaWYgLyogSUtTREIgKi8KKworICAgICAgY2FzZSBYQV9WRVJTOiB7 CisJICBleHRlcm4gY2hhciAqIGNrX3NfdmVyLCAqIGNrX3NfeHZlcjsKKwkgIHByaW50ZigiJXMi LGNrX3NfdmVyKTsKKwkgIGlmICgqY2tfc194dmVyKQorCSAgICBwcmludGYoIiBbJXNdXG4iLGNr X3NfeHZlcik7CisJICBwcmludGYoIlxuIik7CisJICBpZiAoc3RheWZsZyB8fCB3aGF0ID09IFdf Q09NTUFORCkKKwkgICAgYnJlYWs7CisJICBlbHNlCisJICAgIGRvZXhpdChHT09EX0VYSVQsLTEp OworICAgICAgfQorI2lmbmRlZiBOT1hGRVIKKyNpZmRlZiBDS19QRVJNUworICAgICAgY2FzZSBY QV9OUFJNOiB7CisJICBleHRlcm4gaW50IGF0bHByaSwgYXRscHJvLCBhdGdwcmksIGF0Z3BybzsK KwkgIGF0bHByaSA9IDA7CisJICBhdGxwcm8gPSAwOworCSAgYXRncHJpID0gMDsKKwkgIGF0Z3By byA9IDA7CisJICBicmVhazsKKyAgICAgIH0KKyNlbmRpZiAvKiBDS19QRVJNUyAqLworI2VuZGlm IC8qIE5PWEZFUiAqLworCisjaWZkZWYgS1VJCisgICAgICBjYXNlIFhBX1NDQUxFOgorICAgICAg ICBrdWlfaW5pdC5yZXNpemVNb2RlID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFhB X0NIR0Q6CisgICAgICAgIGt1aV9pbml0LnJlc2l6ZU1vZGUgPSAyOworICAgICAgICBicmVhazsK KyAgICAgIGNhc2UgWEFfV01BWDoKKyAgICAgICAga3VpX2luaXQubkNtZFNob3cgPSBTV19NQVhJ TUlaRTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFhBX1dNSU46CisgICAgICAgIGt1aV9p bml0Lm5DbWRTaG93ID0gU1dfTUlOSU1JWkU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl IFhBX1hQT1M6CisgICAgICAgIGlmICghcmRpZ2l0cyhwKSkKKyAgICAgICAgICByZXR1cm4oLTEp OworCWt1aV9pbml0LnBvc19pbml0Kys7CisJa3VpX2luaXQucG9zX3ggPSBhdG9pKHApOworICAg ICAgICBicmVhazsKKworICAgICAgY2FzZSBYQV9ZUE9TOgorICAgICAgICBpZiAoIXJkaWdpdHMo cCkpCisgICAgICAgICAgcmV0dXJuKC0xKTsKKwlrdWlfaW5pdC5wb3NfaW5pdCsrOworCWt1aV9p bml0LnBvc195ID0gYXRvaShwKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgWEFfRk5B TTogeworCSAgZXh0ZXJuIHN0cnVjdCBfa3VpX2luaXQga3VpX2luaXQ7CisJICBleHRlcm4gc3Ry dWN0IGtleXRhYiAqIHRlcm1fZm9udDsKKwkgIGV4dGVybiBzdHJ1Y3Qga2V5dGFiICogX3Rlcm1f Zm9udDsKKwkgIGV4dGVybiBpbnQgdHRfZm9udCwgbnRlcm1mb250OworCSAgaW50IHgsIHo7CisJ ICBpZiAobnRlcm1mb250ID09IDApCisJICAgIEJ1aWxkRm9udFRhYmxlKCZ0ZXJtX2ZvbnQsICZf dGVybV9mb250LCAmbnRlcm1mb250KTsKKwkgIGlmICghKHRlcm1fZm9udCAmJiBfdGVybV9mb250 ICYmIG50ZXJtZm9udCA+IDApKSB7CisgICAgICAgICAgICBwcmludGYoIj9VbmFibGUgdG8gY29u c3RydWN0IEZvbnQgRmFjZW5hbWUgVGFibGVcbiIpOworCSAgICByZXR1cm4oMCk7CisgICAgICAg ICAgfQorCSAgeCA9IGxvb2t1cCh0ZXJtX2ZvbnQscCxudGVybWZvbnQsJnopOworCSAgaWYgKHgg PCAwKSB7CisgICAgICAgICAgICAgIHggPSBsb29rdXAoX3Rlcm1fZm9udCxwLG50ZXJtZm9udCwm eik7CisgICAgICAgICAgICAgIGlmICh4IDwgMCkgeworICAgICAgICAgICAgICAgICAgcHJpbnRm KCI/SW52YWxpZCBGb250IEZhY2VuYW1lOiAlc1xuIixwKTsKKyAgICAgICAgICAgICAgICAgIHJl dHVybigwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KKwkgIHR0X2ZvbnQgPSB4Owor CSAga3VpX2luaXQuZmFjZV9pbml0Kys7CisJICBtYWtlc3RyKCZrdWlfaW5pdC5mYWNlbmFtZSx0 ZXJtX2ZvbnRbel0ua3dkKTsKKwkgIGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBYQV9GU0la OiB7CisJICBleHRlcm4gc3RydWN0IF9rdWlfaW5pdCBrdWlfaW5pdDsKKwkgIGV4dGVybiBpbnQg dHRfZm9udF9zaXplOworICAgICAgICAgIGNoYXIgKiBxOworICAgICAgICAgIGludCBoYWxmcG9p bnQgPSAwOworCisJICBrdWlfaW5pdC5mb250X2luaXQrKzsKKyAgICAgICAgICBmb3IgKCBxPXAg OyAqcSA7IHErKyApIHsKKyAgICAgICAgICAgICAgaWYgKCAqcSA9PSAnLicpIHsKKyAgICAgICAg ICAgICAgICAgICpxKysgPSAnXDAnOworICAgICAgICAgICAgICAgICAgaWYgKCFyZGlnaXRzKHEp KQorICAgICAgICAgICAgICAgICAgICAgIHJldHVybigtMSk7CisgICAgICAgICAgICAgICAgICBp ZiAoISpxIHx8IGF0b2kocSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAg Lyogbm8gaGFsZnBvaW50ICovCisgICAgICAgICAgICAgICAgICBoYWxmcG9pbnQgPSAxOworICAg ICAgICAgICAgICAgICAgaWYgKGF0b2kocSkgIT0gNSkKKyAgICAgICAgICAgICAgICBwcmludGYo Ij8gRm9udCBzaXplcyBhcmUgdHJlYXRlZCBpbiBoYWxmLXBvaW50IGluY3JlbWVudHNcbiIpOwor ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisJ ICBpZiAoIXJkaWdpdHMocCkpCisJICAgIHJldHVybigtMSk7CisJICB0dF9mb250X3NpemUgPSBr dWlfaW5pdC5mb250X3NpemUgPSAyICogYXRvaShwKSArIGhhbGZwb2ludDsKKwkgIGJyZWFrOwor ICAgICAgfQorICAgICAgY2FzZSBYQV9OT01OOgorICAgICAgICBrdWlfaW5pdC5ub21lbnViYXIg PSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgWEFfTk9UQjoKKyAgICAgICAga3VpX2lu aXQubm90b29sYmFyID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFhBX05PU0I6Cisg ICAgICAgIGt1aV9pbml0Lm5vc3RhdHVzYmFyID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj YXNlIFhBX05PQkFSOgorICAgICAgICBrdWlfaW5pdC5ub21lbnViYXIgPSAxOworICAgICAgICBr dWlfaW5pdC5ub3Rvb2xiYXIgPSAxOworICAgICAgICBrdWlfaW5pdC5ub3N0YXR1c2JhciA9IDE7 CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEtVSSAqLworCisjaWZuZGVmIE5PUFVTSAorICAg IGNhc2UgWEFfTk9QVVNIOgorICAgICAgICBub3B1c2ggPSAxOworICAgICAgICBicmVhazsKKyNl bmRpZiAvKiBOT1BVU0ggKi8KKyNpZmRlZiBPUzIKKyAgICBjYXNlIFhBX0xPQ0s6CisgICAgICAg IHR0X3Njcm9sbCA9IDA7CisgICAgICAgIHR0X2VzY2FwZSA9IDA7CisjaWZuZGVmIE5PUFVTSAor ICAgICAgICBub3B1c2ggPSAxOworI2VuZGlmCisjaWZkZWYgS1VJCisgICAgICAgIGt1aV9pbml0 Lm5vbWVudWJhciA9IDE7CisgICAgICAgIGt1aV9pbml0Lm5vdG9vbGJhciA9IDE7CisgICAgICAg IGt1aV9pbml0Lm5vc3RhdHVzYmFyID0gMTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyNpZmRl ZiBLVUkKKyAgICAgIGNhc2UgWEFfTk9DTE9TRToKKyAgICAgICAga3VpX2luaXQubm9jbG9zZSA9 IDE7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEtVSSAqLworICAgICAgY2FzZSBYQV9OT1ND Uk9MTDoKKyAgICAgICAgdHRfc2Nyb2xsID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl IFhBX05PRVNDQVBFOgorICAgICAgICB0dF9lc2NhcGUgPSAwOworICAgICAgICBicmVhazsKKyNl bmRpZiAvKiBPUzIgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisgICAgICBjYXNlIFhBX1RFUk06IHsJ CQkvKiBUZXJtaW5hbCB0eXBlICovCisgICAgICAgICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdHR5 cHRhYltdOworICAgICAgICAgIGV4dGVybiBpbnQgbnR0eXA7CisjaWZkZWYgVE5DT0RFCisJICBl eHRlcm4gY2hhciAqIHRuX3Rlcm07CisjZW5kaWYgLyogVE5DT0RFICovCisjaWZkZWYgT1MyCisJ ICBpbnQgeCwgejsKKwkgIGV4dGVybiBpbnQgdHRfdHlwZSwgdHRfdHlwZV9tb2RlOworCSAgeCA9 IGxvb2t1cCh0dHlwdGFiLHAsbnR0eXAsJnopOworCSAgaWYgKHggPCAwKQorCSAgICByZXR1cm4o LTEpOworCSAgdHRfdHlwZV9tb2RlID0gdHRfdHlwZSA9IHg7CisjZW5kaWYgLyogT1MyICovCisj aWZkZWYgVE5DT0RFCisJICBtYWtlc3RyKCZ0bl90ZXJtLHApOworI2VuZGlmIC8qIFROQ09ERSAq LworCSAgYnJlYWs7CisgICAgICB9CisgICAgICBjYXNlIFhBX0NTRVQ6IHsJCQkvKiBSZW1vdGUg Q2hhcmFjdGVyIFNldCAqLworI2lmbmRlZiBOT0NTRVRTCisjaWZkZWYgQ0tPVU5JCisgICAgICAg ICAgZXh0ZXJuIHN0cnVjdCBrZXl0YWIgdHhydGFiW107CisgICAgICAgICAgZXh0ZXJuIGludCBu dHhydGFiOworICAgICAgICAgIHggPSBsb29rdXAodHhydGFiLHAsbnR4cnRhYiwmeik7CisjZWxz ZSAvKiBDS09VTkkgKi8KKyAgICAgICAgICBleHRlcm4gc3RydWN0IGtleXRhYiB0dGNzdGFiW107 CisgICAgICAgICAgZXh0ZXJuIGludCBudGVybWM7CisgICAgICAgICAgeCA9IGxvb2t1cCh0dGNz dGFiLHAsbnRlcm1jLCZ6KTsKKyNlbmRpZiAvKiBDS09VTkkgKi8KKwkgIGlmICh4IDwgMCkKKwkg ICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICBzZXRyZW1jaGFyc2V0KHosNCAvKiBUVF9HUl9BTEwg KGluIGNrdXVzNy5jKSAqLyk7CisjZWxzZSAvKiBOT0NTRVRTICovCisgICAgICAgICAgcmV0dXJu KC0xKTsKKyNlbmRpZiAvKiBOT0NTRVRTICovCisJICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNh c2UgWEFfUk9XUzogewkJCS8qIFNjcmVlbiByb3dzIChoZWlnaHQpICovCisjaWZkZWYgT1MyCisg ICAgICAgICAgZXh0ZXJuIGludCByb3dfaW5pdDsKKyNlbHNlIC8qIE9TMiAqLworCSAgZXh0ZXJu IGludCB0dF9yb3dzOworI2VuZGlmIC8qIE9TMiAqLworCSAgaWYgKCFyZGlnaXRzKHApKQorCSAg ICByZXR1cm4oLTEpOworI2lmZGVmIE9TMgorCSAgaWYgKCFvczJfc2V0dGVybWhlaWdodChhdG9p KHApKSkKKwkgICAgcmV0dXJuKC0xKTsKKyAgICAgICAgICByb3dfaW5pdCsrOworI2Vsc2UgIC8q IE5vdCBPUy8yICovCisJICB0dF9yb3dzID0gYXRvaShwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwkg IGJyZWFrOworICAgICAgfQorICAgICAgY2FzZSBYQV9DT0xTOiB7CQkJLyogU2NyZWVuIGNvbHVt bnMgKHdpZHRoKSAqLworI2lmZGVmIE9TMgorICAgICAgICAgIGV4dGVybiBpbnQgY29sX2luaXQ7 CisjZWxzZSAvKiBPUzIgKi8KKwkgIGV4dGVybiBpbnQgdHRfY29sczsKKyNlbmRpZiAvKiBPUzIg Ki8KKwkgIGlmICghcmRpZ2l0cyhwKSkKKwkgICAgcmV0dXJuKC0xKTsKKyNpZmRlZiBPUzIKKwkg IGlmICghb3MyX3NldHRlcm13aWR0aChhdG9pKHApKSkKKwkgICAgcmV0dXJuKC0xKTsKKyAgICAg ICAgICBjb2xfaW5pdCsrOworI2Vsc2UgIC8qIE5vdCBPUy8yICovCisJICB0dF9jb2xzID0gYXRv aShwKTsKKyNlbmRpZiAvKiBPUzIgKi8KKwkgIGJyZWFrOworICAgICAgfQorI2lmZGVmIE9TMgor ICAgIGNhc2UgWEFfVElUTDogeworICAgICAgICBleHRlcm4gY2hhciB1c2VydGl0bGVbXTsKKyAg ICAgICAgY2tzdHJuY3B5KHVzZXJ0aXRsZSxwLDY0KTsKKyAgICAgICAgb3Myc2V0dGl0bGUoIiIs MSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBPUzIgKi8KKworI2lmZGVmIENP TU1FTlQJCQkJLyogVE8gQkUgRklMTEVEIElOIC4uLiAqLworICAgICAgY2FzZSBYQV9URUw6CQkJ LyogTWFrZSBhIFRlbG5ldCBjb25uZWN0aW9uICovCisgICAgICBjYXNlIFhBX0ZUUDoJCQkvKiBN YWtlIGFuIEZUUCBjb25uZWN0aW9uICovCisgICAgICBjYXNlIFhBX1NTSDoJCQkvKiBNYWtlIGFu IFNTSCBjb25uZWN0aW9uICovCisjZW5kaWYgLyogQ09NTUVOVCAqLworCisjaWZuZGVmIE5PU1BM CisgICAgICBjYXNlIFhBX1VTRVI6CQkJLyogVXNlcm5hbWUgZm9yIGxvZ2luICovCisjaWZkZWYg SUtTRAorCWlmICghaW5zZXJ2ZXIpCisjZW5kaWYgLyogSUtTRCAqLworCXsKKwkgICAgY2tzdHJu Y3B5KHVpZGJ1ZiwqeGFyZ3YsVUlEQlVGTEVOKTsKKwkgICAgaGF2ZWZ0cHVpZCA9IDE7CisJfQor CWJyZWFrOworI2VuZGlmIC8qIE5PU1BMICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisgICAg ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgICByZXR1cm4oMCk7Cit9 CisKKyNpZmRlZiBJS1NECisjaWZkZWYgSUtTRENPTkYKKyNkZWZpbmUgSUtTX0FOT04gMAorI2Rl ZmluZSBJS1NfQkFGSSAxCisjZGVmaW5lIElLU19DREZJIDIKKyNkZWZpbmUgSUtTX0NETVMgMwor I2RlZmluZSBJS1NfSEVGSSA0CisjZGVmaW5lIElLU19BTkZJIDUKKyNkZWZpbmUgSUtTX1VTRkkg NgorI2RlZmluZSBJS1NfSUtMRyA3CisjZGVmaW5lIElLU19JS0ZJIDgKKyNkZWZpbmUgSUtTX0RC QVMgOQorI2RlZmluZSBJS1NfREJGSSAxMAorI2RlZmluZSBJS1NfUEVSTSAxMQorI2RlZmluZSBJ S1NfUFJJViAxMgorI2RlZmluZSBJS1NfUk9PVCAxMworI2RlZmluZSBJS1NfVElNTyAxNAorI2Rl ZmluZSBJS1NfV1RGSSAxNQorI2RlZmluZSBJS1NfV1RNUCAxNgorI2RlZmluZSBJS1NfU1JWUiAx NworI2RlZmluZSBJS1NfTk9JTiAxOAorI2RlZmluZSBJS1NfSU5JVCAxOQorI2RlZmluZSBJS1Nf QU5MRyAyMAorI2RlZmluZSBJS1NfQUNDVCAyMQorI2RlZmluZSBJS1NfTlRET00gMjIKKyNkZWZp bmUgSUtTX1NZU0wgMjMKKworI2lmZGVmIENLX0xPR0lOCitzdGF0aWMgc3RydWN0IGtleXRhYiBp a3NhbnRhYltdID0geworI2lmZGVmIE9TMgorICAgIHsgImFjY291bnQiLCAgICAgSUtTX0FDQ1Qs IDAgfSwKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICB7ICJpbml0ZmlsZSIsICAgIElLU19BTkZJLCAw IH0sCisgICAgeyAibG9naW4iLCAgICAgICBJS1NfQU5MRywgMCB9LAorI2lmZGVmIFVOSVgKKyAg ICB7ICJyb290IiwgICAgICAgIElLU19ST09ULCAwIH0sCisjZWxzZQorI2lmZGVmIENLUk9PVAor ICAgIHsgInJvb3QiLCAgICAgICAgSUtTX1JPT1QsIDAgfSwKKyNlbmRpZiAvKiBDS1JPT1QgKi8K KyNlbmRpZiAvKiBVTklYICovCisgICAgeyAiIiwgMCwgMCB9Cit9Oworc3RhdGljIGludCBuaWtz YW50YWIgPSBzaXplb2YoaWtzYW50YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpIC0gMTsKKyNl bmRpZiAvKiBDS19MT0dJTiAqLworCitzdGF0aWMgc3RydWN0IGtleXRhYiBpa3N0YWJbXSA9IHsK KyNpZmRlZiBDS19MT0dJTgorICAgIHsgImFub255bW91cyIsICAgSUtTX0FOT04sIDAgfSwKKyNl bmRpZiAvKiBDS19MT0dJTiAqLworICAgIHsgImJhbm5lcmZpbGUiLCAgSUtTX0JBRkksIDAgfSwK KyAgICB7ICJjZGZpbGUiLCAgICAgIElLU19DREZJLCAwIH0sCisgICAgeyAiY2RtZXNzYWdlIiwg ICBJS1NfQ0RNUywgMCB9LAorICAgIHsgImNkbXNnIiwgICAgICAgSUtTX0NETVMsIENNX0lOViB9 LAorI2lmZGVmIElLU0RCCisgICAgeyAiZGF0YWJhc2UiLCAgICBJS1NfREJBUywgMCB9LAorICAg IHsgImRiZmlsZSIsICAgICAgSUtTX0RCRkksIDAgfSwKKyNlbmRpZiAvKiBJS1NEQiAqLworI2lm ZGVmIENLX0xPR0lOCisjaWZkZWYgTlQKKyAgICB7ICJkZWZhdWx0LWRvbWFpbiIsIElLU19OVERP TSwgMCB9LAorI2VuZGlmIC8qIE5UICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyNpZm5kZWYg Tk9IRUxQCisgICAgeyAiaGVscGZpbGUiLCAgICBJS1NfSEVGSSwgMCB9LAorI2VuZGlmIC8qIE5P SEVMUCAqLworICAgIHsgImluaXRmaWxlIiwgICAgSUtTX0lOSVQsIDAgfSwKKyAgICB7ICJuby1p bml0ZmlsZSIsIElLU19OT0lOLCAwIH0sCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBDS19QRVJN CisgICAgeyAicGVybWlzc2lvbnMiLCBJS1NfUEVSTSwgMCB9LAorICAgIHsgInBlcm1zIiwgICAg ICAgSUtTX1BFUk0sIENNX0lOViB9LAorI2VuZGlmIC8qIENLX1BFUk0gKi8KKyNpZmRlZiBVTklY CisgICAgeyAicHJpdmlkIiwgICAgICBJS1NfUFJJViwgMCB9LAorI2VuZGlmIC8qIFVOSVggKi8K KyAgICB7ICJzZXJ2ZXItb25seSIsIElLU19TUlZSLCAwIH0sCisjaWZkZWYgQ0tTWVNMT0cKKyAg ICB7ICJzeXNsb2ciLCAgICAgIElLU19TWVNMLCAwIH0sCisjZW5kaWYgLyogQ0tTWVNMT0cgKi8K KyAgICB7ICJ0aW1lb3V0IiwgICAgIElLU19USU1PLCAwIH0sCisgICAgeyAidXNlcmZpbGUiLCAg ICBJS1NfVVNGSSwgMCB9LAorI2lmZGVmIENLV1RNUAorICAgIHsgInd0bXBmaWxlIiwgICAgSUtT X1dURkksIDAgfSwKKyAgICB7ICJ3dG1wbG9nIiwgICAgIElLU19XVE1QLCAwIH0sCisjZW5kaWYg LyogQ0tXVE1QICovCisjZW5kaWYgLyogQ0tfTE9HSU4gKi8KKyAgICB7ICJ4ZmVyZmlsZSIsICAg IElLU19JS0ZJLCAwIH0sCisgICAgeyAieGZlcmxvZyIsICAgICBJS1NfSUtMRywgMCB9Cit9Owor c3RhdGljIGludCBuaWtzdGFiID0gc2l6ZW9mKGlrc3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRh Yik7CisjZW5kaWYgLyogSUtTRENPTkYgKi8KKworI2lmbmRlZiBOT0lDUAoraW50CitzZXRpa3Mo KSB7CQkJCS8qIFNFVCBJS1MgKi8KKyNpZmRlZiBJS1NEQ09ORgorI2lmZGVmIENLX0xPR0lOCisg ICAgZXh0ZXJuIGludCBja3hzeXNsb2csIGNreHd0bXAsIGNreGFub247CisjaWZkZWYgVU5JWAor ICAgIGV4dGVybiBpbnQgY2t4cHJpdjsKKyNlbmRpZiAvKiBVTklYICovCisjaWZkZWYgQ0tfUEVS TVMKKyAgICBleHRlcm4gaW50IGNreHBlcm1zOworI2VuZGlmIC8qIENLX1BFUk1TICovCisgICAg ZXh0ZXJuIGNoYXIgKiBhbm9uZmlsZSwgKiB1c2VyZmlsZSwgKiBhbm9ucm9vdDsKKyNpZmRlZiBP UzIKKyAgICBleHRlcm4gY2hhciAqIGFub25hY2N0OworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVm IE5UCisgICAgZXh0ZXJuIGNoYXIgKiBpa3NfZG9tYWluOworI2VuZGlmIC8qIE5UICovCisjZW5k aWYgLyogQ0tfTE9HSU4gKi8KKyNpZmRlZiBDS1dUTVAKKyAgICBleHRlcm4gY2hhciAqIHd0bXBm aWxlOworI2VuZGlmIC8qIENLV1RNUCAqLworICAgIGV4dGVybiBpbnQgc3J2Y2Rtc2csIHN1Y2Nl c3MsIGlrc2RjZiwgcmNmbGFnLCBub2luaXQsIGFyZ194OworICAgIGV4dGVybiBjaGFyICogY2Rt c2dmaWxlW10sICogY2Rtc2dzdHIsICprZXJtcmM7CisgICAgZXh0ZXJuIHh4X3N0cnAgeHhzdHJp bmc7CisgICAgaW50IHgsIHksIHo7CisgICAgY2hhciAqczsKKyAgICBjaGFyIHRtcGJ1ZltDS01B WFBBVEgrMV07CisKKyAgICBpZiAoKHkgPSBjbWtleShpa3N0YWIsbmlrc3RhYiwiIiwiIix4eHN0 cmluZykpIDwgMCkKKyAgICAgIHJldHVybih5KTsKKworI2lmZGVmIENLX0xPR0lOCisgICAgaWYg KHkgPT0gSUtTX0FOT04pIHsKKyAgICAgICAgaWYgKCh5ID0gY21rZXkoaWtzYW50YWIsbmlrc2Fu dGFiLCIiLCIiLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHkpOworICAgIH0KKyNlbmRpZiAv KiBDS19MT0dJTiAqLworCisgICAgc3dpdGNoICh5KSB7CisjaWZkZWYgQ0tTWVNMT0cKKyAgICAg IGNhc2UgSUtTX1NZU0w6ICAgICAgICAgICAgICAgICAgICAgLyogSUtTOiBTeXNsb2cgbGV2ZWwg Ki8KKyAgICAgICAgaWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIiLCIiLHh4c3RyaW5nKSkg PCAwKQorCSAgcmV0dXJuKHopOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVy bih4KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyNpZm5kZWYg U1lTTE9HTEVWRUwKKyAgICAgICAgLyogSWYgc3BlY2lmaWVkIG9uIGNjIGNvbW1hbmQgbGluZSwg dXNlciBjYW4ndCBjaGFuZ2UgaXQuICovCisgICAgICAgIGlmICghaW5zZXJ2ZXIpICAgICAgICAg ICAgICAgICAgLyogRG9uJ3QgYWxsb3cgdm9sdW1pbm91cyBzeXNsb2dnaW5nICovCisgICAgICAg ICAgaWYgKHkgPiBTWVNMR19GQSkgICAgICAgICAgICAgLyogYnkgb3JkaW5hcnkgdXNlcnMuICov CisgICAgICAgICAgICB5ID0gU1lTTEdfRkE7CisjZW5kaWYgLyogU1lTTE9HTEVWRUwgKi8KKyAg ICAgICAgaWYgKHkgPCAwKSByZXR1cm4oLTEpOworI2lmZGVmIERFQlVHCisgICAgICAgIGlmICh5 ID49IFNZU0xHX0RCKQorICAgICAgICAgIGlmICghZGVibG9nKQorICAgICAgICAgICAgZGVibG9n ID0gZGVib3BuKCJkZWJ1Zy5sb2ciLDApOworI2VuZGlmIC8qIERFQlVHICovCisjaWZkZWYgU1lT TE9HTEVWRUwKKyAgICAgICAgLyogSWYgc3BlY2lmaWVkIG9uIGNjIGNvbW1hbmQgbGluZSwgdXNl ciBjYW4ndCBjaGFuZ2UgaXQuICovCisgICAgICAgIHkgPSBTWVNMT0dMRVZFTDsKKyNlbmRpZiAv KiBTWVNMT0dMRVZFTCAqLworICAgICAgICBja3hzeXNsb2cgPSB5OworICAgICAgICAvKiBwcmlu dGYoImNreHN5c2xvZz0lZFxuIixja3hzeXNsb2cpOyAqLworICAgICAgICBicmVhazsKKyNlbmRp ZiAvKiBDS1NZU0xPRyAqLworCisjaWZkZWYgQ0tfTE9HSU4KKyNpZmRlZiBOVAorICAgICAgY2Fz ZSBJS1NfTlRET006CisgICAgICAgIGlmICgoeiA9IGNtdHh0KAorICJET01BSU4gdG8gYmUgdXNl ZCBmb3IgdXNlciBhdXRoZW50aWNhdGlvbiB3aGVuIG5vbmUgaXMgc3BlY2lmaWVkIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgIiIsICZzLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOwor ICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBpZiAoISpz KSBzPSBOVUxMOworICAgICAgICAgIG1ha2VzdHIoJmlrc19kb21haW4scyk7CisgICAgICAgIGJy ZWFrOworI2VuZGlmIC8qIE5UICovCisjaWZkZWYgT1MyCisgICAgICBjYXNlIElLU19BQ0NUOgor ICAgICAgICBpZiAoKHogPSBjbXR4dCgiTmFtZSBvZiBsb2NhbCBhY2NvdW50IHRvIHVzZSBmb3Ig YW5vbnltb3VzIGxvZ2lucyIsCisJCQkiR1VFU1QiLCAmcyx4eHN0cmluZykpIDwgMCkKKwkgIHJl dHVybih6KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAg ICAgaWYgKCpzKSB7CisgICAgICAgICAgICBtYWtlc3RyKCZhbm9uYWNjdCxzKTsKKyAgICAgICAg fSBlbHNlIGlmICggYW5vbmFjY3QgKSB7CisJICAgIGZyZWUoYW5vbmFjY3QpOworCSAgICBhbm9u YWNjdCA9IE5VTEw7CisJfQorICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBPUzIgKi8KKyAgICAg IGNhc2UgSUtTX0FOTEc6CisgICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwiIiwi bm8iLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworICAgICAgICBpZiAoKHggPSBjbWNm bSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3Mg PSAwKTsKKyAgICAgICAgY2t4YW5vbiA9IHo7CisjaWZkZWYgT1MyCisJaWYgKGNreGFub24gJiYg IWFub25hY2N0KQorCSAgbWFrZXN0cigmYW5vbmFjY3QsIkdVRVNUIik7CisjZW5kaWYgLyogT1My ICovCisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIENLX0xPR0lOICovCisgICAgICBjYXNlIElL U19CQUZJOgorICAgICAgICBpZiAoKHogPSBjbWlmaSgiRmlsZW5hbWUiLCIiLCZzLCZ4LHh4c3Ry aW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAg cHJpbnRmKCI/V2lsZGNhcmRzIG5vdCBhbGxvd2VkXG4iKTsKKyAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgIH0KKyAgICAgICAgZGVidWcoRjExMCwiYmFubmVyZmlsZSBiZWZvcmUgemZu cWZwKCkiLHMsMCk7CisgICAgICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkgewor ICAgICAgICAgICAgZGVidWcoRjExMCwiYmFubmVyZmlsZSBhZnRlciB6Zm5xZnAoKSIsdG1wYnVm LDApOworICAgICAgICAgICAgcyA9IHRtcGJ1ZjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHgg PSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyAgICAgICAgaWYgKCpzKQorCSAgbWFrZXN0cigmYmFubmVyZmlsZSxzKTsK KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIElLU19DREZJOgorICAgICAgICBpZiAoKHogPSBj bXR4dCgibGlzdCBvZiBjZCBtZXNzYWdlIGZpbGUgbmFtZXMiLCJSRUFELk1FIiwKKwkJICAgICAg ICZzLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworICAgICAgICBpZiAoaWtzZGNmKSBy ZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBpZiAoKnMpIHsKKyAgICAgICAgICAgIG1ha2Vs aXN0KHMsY2Rtc2dmaWxlLDE2KTsKKyAgICAgICAgICAgIG1ha2VzdHIoJmNkbXNnc3RyLHMpOwor ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBJS1NfQ0RNUzoKKyAgICAgICAg aWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIiLCJubyIseHhzdHJpbmcpKSA8IDApCisJICBy ZXR1cm4oeik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAg ICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICBzcnZjZG1zZyA9 IHo7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBJS1NfSEVGSToKKyAgICAgICAgaWYgKCh6 ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih6 KTsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3Qg YWxsb3dlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAg IGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkKKyAgICAgICAgICBzID0gdG1wYnVmOwor ICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKGlr c2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgaWYgKCpzKQorCSAgbWFrZXN0cigm aGVscGZpbGUscyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBJS1NfQU5GSToKKyAgICAg ICAgaWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwgMCkKKwkg IHJldHVybih6KTsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgIHByaW50ZigiP1dpbGRj YXJkcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9 CisgICAgICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkKKyAgICAgICAgICBzID0g dG1wYnVmOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAg ICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgaWYgKCpzKQorCSAg bWFrZXN0cigmYW5vbmZpbGUscyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBJS1NfVVNG SToKKyAgICAgICAgaWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykp IDwgMCkKKwkgIHJldHVybih6KTsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgIHByaW50 ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgICAgICByZXR1cm4oLTkpOwor ICAgICAgICB9CisgICAgICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVmKSkKKyAgICAg ICAgICBzID0gdG1wYnVmOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgaWYg KCpzKQorCSAgbWFrZXN0cigmdXNlcmZpbGUscyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSBJS1NfSUtGSToKKyAgICAgICAgaWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4 eHN0cmluZykpIDwgMCkKKwkgIHJldHVybih6KTsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAg ICAgIHByaW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgICAgICByZXR1 cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmICh6Zm5xZnAocyxDS01BWFBBVEgsdG1wYnVm KSkKKyAgICAgICAgICBzID0gdG1wYnVmOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDAp IHJldHVybih4KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAg ICAgICAgaWYgKCpzKSB7CisgICAgICAgICAgICBtYWtlc3RyKCZ4ZmVyZmlsZSxzKTsKKyAgICAg ICAgICAgIHhmZXJsb2cgPSAxOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSBJS1NfSUtMRzoKKyAgICAgICAgaWYgKCh6ID0gY21rZXkob2t0YWIsbm9rdGFiLCIiLCJubyIs eHhzdHJpbmcpKSA8IDApCisJICByZXR1cm4oeik7CisgICAgICAgIGlmICgoeCA9IGNtY2ZtKCkp IDwgMCkgcmV0dXJuKHgpOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDAp OworICAgICAgICB4ZmVybG9nID0gejsKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBDS19MT0dJ TgorI2lmZGVmIENLX1BFUk0KKyAgICAgIGNhc2UgSUtTX1BFUk06CisgICAgICAgIGlmICgoeiA9 IGNtdHh0KCJPY3RhbCBmaWxlIHBlcm1zc2lvbiBjb2RlIiwiMDAwIiwKKwkJICAgICAgICZzLHh4 c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworCWlmICh6IDwgMCkgcmV0dXJuKHopOworICAg ICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2VzcyA9IDApOworICAgICAgICB5ID0gMDsKKyAg ICAgICAgd2hpbGUgKCpzKSB7CisgICAgICAgICAgICBpZiAoKnMgPCAnMCcgfHwgKnMgPiAnNycp CisgICAgICAgICAgICAgIHJldHVybigtOSk7CisgICAgICAgICAgICB5ID0geSAqIDggKyAoKnMr KyAtICcwJyk7CisgICAgICAgIH0KKyAgICAgICAgY2t4cGVybXMgPSB5OworICAgICAgICBicmVh azsKKyNlbmRpZiAvKiBDS19QRVJNICovCisjaWZkZWYgVU5JWAorICAgICAgY2FzZSBJS1NfUFJJ VjogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IFByaXYnZCBsb2dpbiBhbGxvd2VkICovCisg ICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwiIiwibm8iLHh4c3RyaW5nKSkgPCAw KQorCSAgcmV0dXJuKHopOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4 KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgY2t4 cHJpdiA9IHo7CisgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIFVOSVggKi8KKworICAgICAgY2Fz ZSBJS1NfUk9PVDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6IEFub255bW91cyByb290ICov CisJaWYgKCh6ID0gY21kaXIoIk5hbWUgb2YgZGlzayBhbmQvb3IgZGlyZWN0b3J5IiwiIiwmcywK KwkJICAgICAgIHh4c3RyaW5nKSkgPCAwICkgeworCSAgICBpZiAoeiAhPSAtMykKKwkgICAgICBy ZXR1cm4oeik7CisJfQorICAgICAgICBpZiAoKnMpIHsKKwkgICAgaWYgKHpmbnFmcChzLENLTUFY UEFUSCx0bXBidWYpKQorCSAgICAgIHMgPSB0bXBidWY7CisgICAgICAgIH0gZWxzZQorCSAgcyA9 ICIiOworICAgICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAg aWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgaWYgKCpzKQorCSAgbWFr ZXN0cigmYW5vbnJvb3Qscyk7CisgICAgICAgIC8qIHByaW50ZigiYW5vbnJvb3Q9JXNcbiIsYW5v bnJvb3QpOyAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBJS1NfVElNTzoKKwl6ID0g Y21udW0oImxvZ2luIHRpbWVvdXQsIHNlY29uZHMiLCIwIiwxMCwmeCx4eHN0cmluZyk7CisJaWYg KHogPCAwKSByZXR1cm4oeik7CisgICAgICAgIGlmICh4IDwgMCB8fCB4ID4gNzIwMCkgeworICAg ICAgICAgICAgcHJpbnRmKCI/VmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDcyMDBcclxuIik7 CisgICAgICAgICAgICByZXR1cm4oLTkpOworICAgICAgICB9CisgICAgICAgIGlmICgoeiA9IGNt Y2ZtKCkpIDwgMCkgcmV0dXJuKHopOworICAgICAgICBpZiAoaWtzZGNmKSByZXR1cm4oc3VjY2Vz cyA9IDApOworICAgICAgICBsb2dpbnRpbW8gPSB4OworICAgICAgICBicmVhazsKKworI2lmZGVm IENLV1RNUAorICAgICAgY2FzZSBJS1NfV1RNUDogICAgICAgICAgICAgICAgICAgICAvKiBJS1M6 IHd0bXAgbG9nICovCisgICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFiLG5va3RhYiwiIiwibm8i LHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworICAgICAgICBpZiAoKHggPSBjbWNmbSgp KSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAw KTsKKyAgICAgICAgY2t4d3RtcCA9IHo7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIElL U19XVEZJOiAgICAgICAgICAgICAgICAgICAgIC8qIElLUzogd3RtcCBsb2dmaWxlICovCisgICAg ICAgIGlmICgoeiA9IGNtaWZpKCJGaWxlbmFtZSIsIiIsJnMsJngseHhzdHJpbmcpKSA8IDApCisJ ICByZXR1cm4oeik7CisgICAgICAgIGlmICh4KSB7CisgICAgICAgICAgICBwcmludGYoIj9XaWxk Y2FyZHMgbm90IGFsbG93ZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuKC05KTsKKyAgICAgICAg fQorICAgICAgICBpZiAoemZucWZwKHMsQ0tNQVhQQVRILHRtcGJ1ZikpCisgICAgICAgICAgcyA9 IHRtcGJ1ZjsKKyAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAg ICAgIGlmIChpa3NkY2YpIHJldHVybihzdWNjZXNzID0gMCk7CisgICAgICAgIGlmICgqcykKKwkg IG1ha2VzdHIoJnd0bXBmaWxlLHMpOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDS1dUTVAg Ki8KKyNlbmRpZiAvKiBDS19MT0dJTiAqLworI2lmZGVmIElLU0RCCisgICAgICBjYXNlIElLU19E QkZJOiB7CisgICAgICAgICAgZXh0ZXJuIGNoYXIgKiBkYmRpciwgKiBkYmZpbGU7CisgICAgICAg ICAgZXh0ZXJuIGludCBkYmVuYWJsZWQ7CisgICAgICAgICAgc3RydWN0IHpmbmZwICogeno7Cisg ICAgICAgICAgaWYgKCh6ID0gY21pZmkoIkZpbGVuYW1lIiwiIiwmcywmeCx4eHN0cmluZykpIDwg MCkKKwkgICAgcmV0dXJuKHopOworICAgICAgICAgIGlmICh4KSB7CisgICAgICAgICAgICAgIHBy aW50ZigiP1dpbGRjYXJkcyBub3QgYWxsb3dlZFxuIik7CisgICAgICAgICAgICAgIHJldHVybigt OSk7CisgICAgICAgICAgfQorICAgICAgICAgIHp6ID0gemZucWZwKHMsQ0tNQVhQQVRILHRtcGJ1 Zik7CisgICAgICAgICAgaWYgKCh4ID0gY21jZm0oKSkgPCAwKSByZXR1cm4oeCk7CisgICAgICAg ICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgICBpZiAoenopIHsK KyAgICAgICAgICAgICAgbWFrZXN0cigmZGJkaXIsenotPmZwYXRoKTsKKyAgICAgICAgICAgICAg bWFrZXN0cigmZGJmaWxlLChjaGFyICopdG1wYnVmKTsKKyAgICAgICAgICAgICAgZGJlbmFibGVk ID0gMTsKKyAgICAgICAgICB9IGVsc2UKKwkgICAgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAg ICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGNhc2UgSUtTX0RCQVM6IHsKKyAgICAgICAgICBl eHRlcm4gaW50IGRiZW5hYmxlZDsKKyAgICAgICAgICBpZiAoKHogPSBjbWtleShva3RhYixub2t0 YWIsIiIsIm5vIix4eHN0cmluZykpIDwgMCkKKwkgICAgcmV0dXJuKHopOworICAgICAgICAgIGlm ICgoeCA9IGNtY2ZtKCkpIDwgMCkgcmV0dXJuKHgpOworICAgICAgICAgIGlmIChpa3NkY2YpIHJl dHVybihzdWNjZXNzID0gMCk7CisgICAgICAgICAgZGJlbmFibGVkID0gejsKKyAgICAgICAgICBi cmVhazsKKyAgICAgIH0KKyNlbmRpZiAvKiBJS1NEQiAqLworCisgICAgICBjYXNlIElLU19JTklU OgorICAgICAgICBpZiAoKHogPSBjbXR4dCgiQWx0ZXJuYXRlIGluaXQgZmlsZSBzcGVjaWZpY2F0 aW9uIiwiIiwKKwkJICAgICAgICZzLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworICAg ICAgICBpZiAoeiA8IDApIHJldHVybih6KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0dXJuKHN1 Y2Nlc3MgPSAwKTsKKyAgICAgICAgY2tzdHJuY3B5KGtlcm1yYyxzLEtFUk1SQ0wpOworICAgICAg ICByY2ZsYWcgPSAxOwkJCS8qIEZsYWcgdGhhdCB0aGlzIGhhcyBiZWVuIGRvbmUgKi8KKyAgICAg ICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSUtTX05PSU46CisgICAgICAgIGlmICgoeiA9IGNta2V5 KG9rdGFiLG5va3RhYiwiIiwibm8iLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworICAg ICAgICBpZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKGlrc2Rj ZikgcmV0dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgbm9pbml0ID0gejsKKyAgICAgICAgYnJl YWs7CisKKyAgICAgIGNhc2UgSUtTX1NSVlI6CisgICAgICAgIGlmICgoeiA9IGNta2V5KG9rdGFi LG5va3RhYiwiIiwibm8iLHh4c3RyaW5nKSkgPCAwKQorCSAgcmV0dXJuKHopOworICAgICAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApIHJldHVybih4KTsKKyAgICAgICAgaWYgKGlrc2RjZikgcmV0 dXJuKHN1Y2Nlc3MgPSAwKTsKKyAgICAgICAgYXJnX3ggPSB6OworICAgICAgICBicmVhazsKKwor ICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuKC05KTsKKyAgICB9CisgICAgcmV0dXJuKHN1 Y2Nlc3MgPSAoaW5zZXJ2ZXIgPyAxIDogMCkpOworI2Vsc2UgLyogSUtTRENPTkYgKi8KKyAgICBp ZiAoKHggPSBjbWNmbSgpKSA8IDApCisgICAgICByZXR1cm4oeCk7CisgICAgcmV0dXJuKHN1Y2Nl c3MgPSAwKTsKKyNlbmRpZiAvKiBJS1NEQ09ORiAqLworfQorI2VuZGlmIC8qIE5PSUNQICovCisj ZW5kaWYgLyogSUtTRCAqLworCisvKiAgRCBPIEEgUiBHICAtLSAgRG8gYSBjb21tYW5kLWxpbmUg YXJndW1lbnQuICAqLworCitpbnQKKyNpZmRlZiBDS19BTlNJQworZG9hcmcoY2hhciB4KQorI2Vs c2UKK2RvYXJnKHgpIGNoYXIgeDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9hcmcgKi8g eworICAgIGludCBpLCBuLCB5LCB6LCB4eDsgbG9uZyB6ejsgY2hhciAqeHA7CisKKyNpZmRlZiBO RVRDT05OCitleHRlcm4gY2hhciAqbGluZSwgKnRtcGJ1ZjsgICAgICAgICAgICAgLyogQ2hhcmFj dGVyIGJ1ZmZlcnMgZm9yIGFueXRoaW5nICovCisjZW5kaWYgLyogTkVUQ09OTiAqLworCisjaWZk ZWYgSUtTRAorICAgIC8qIEludGVybmV0IEtlcm1pdCBTZXJ2ZXIgc2V0IHNvbWUgd2F5IGJlc2lk ZXMgLUEuLi4gKi8KKyAgICBpZiAoaW5zZXJ2ZXIpCisgICAgICBkb2Zhc3QoKTsKKyNlbmRpZiAv KiBJS1NEICovCisKKyAgICB4cCA9ICp4YXJndisxOyAgICAgICAgICAgICAgICAgICAgICAvKiBQ b2ludGVyIGZvciBidW5kbGVkIGFyZ3MgKi8KKyAgICBkZWJ1ZyhGMTExLCJkb2FyZyBlbnRyeSIs eHAseGFyZ2MpOworICAgIHdoaWxlICh4KSB7CisgICAgICAgIGRlYnVnKEYwMDAsImRvYXJnIGFy ZyIsIiIseCk7CisgICAgICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgLyogQmln IHN3aXRjaCBvbiBhcmcgKi8KKworI2lmbmRlZiBDT01NRU5UCisJICBjYXNlICctJzoJCQkvKiBF eHRlbmRlZCBjb21tYW5kcy4uLiAqLworCSAgICBpZiAoZG94YXJnKHhhcmd2LDApIDwgMCkgewor CQlYRkFUQUwoIkV4dGVuZGVkIG9wdGlvbiBlcnJvciIpOworCSAgICB9IC8qIEZ1bGwgdGhydS4u LiAqLworCSAgY2FzZSAnKyc6CQkJLyogRXh0ZW5kZWQgY29tbWFuZCBmb3IgcHJlc2NhbigpICov CisJICAgIHJldHVybigwKTsKKyNlbHNlICAvKiBOT0lDUCAqLworCSAgY2FzZSAnLSc6CisJICBj YXNlICcrJzoKKwkgICAgWEZBVEFMKCJFeHRlbmRlZCBvcHRpb25zIG5vdCBjb25maWd1cmVkIik7 CisjZW5kaWYgLyogTk9JQ1AgKi8KKworI2lmbmRlZiBOT1NQTAorCSAgY2FzZSAnQyc6IHsJCQkv KiBDb21tYW5kcyBmb3IgcGFyc2VyICovCisJICAgICAgY2hhciAqIHM7CisJICAgICAgeGFyZ3Yr KywgeGFyZ2MtLTsKKwkgICAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkg eworCQkgIFhGQVRBTCgiTm8gY29tbWFuZHMgZ2l2ZW4gZm9yIC1DIik7CisJICAgICAgfQorCSAg ICAgIHMgPSAqeGFyZ3Y7CQkvKiBHZXQgdGhlIGFyZ3VtZW50IChtdXN0IGJlIHF1b3RlZCkgKi8K KwkgICAgICBpZiAoISpzKQkJCS8qIElmIGVtcHR5IHF1b3RlcyAqLworCQlzID0gTlVMTDsJCS8q IGlnbm9yZSB0aGlzIG9wdGlvbiAqLworCSAgICAgIGlmIChzKSB7CisJCSAgbWFrZXN0cigmY2xj bWRzLHMpOwkvKiBNYWtlIHBva2VhYmxlIGNvcHkgKi8KKwkJICBzID0gY2xjbWRzOwkJLyogQ2hh bmdlIHRhYnMgdG8gc3BhY2VzICovCisJCSAgd2hpbGUgKCpzKSB7CisJCSAgICAgIGlmICgqcyA9 PSAnXHQnKSAqcyA9ICcgJzsKKwkJICAgICAgcysrOworCQkgIH0KKwkgICAgICB9CisJICAgICAg YnJlYWs7CisJICB9CisjZW5kaWYgLyogTk9TUEwgKi8KKworI2lmbmRlZiBOT1hGRVIKKwkgIGNh c2UgJ0QnOgkJCS8qIERlbGF5ICovCisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgiaW52 YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworCSAgICB9CisJICAgIHhhcmd2KyssIHhhcmdjLS07 CisJICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7CisJCVhGQVRBTCgi bWlzc2luZyBkZWxheSB2YWx1ZSIpOworCSAgICB9CisJICAgIHogPSBhdG9pKCp4YXJndik7CQkv KiBDb252ZXJ0IHRvIG51bWJlciAqLworCSAgICBpZiAoeiA+IC0xKQkJCS8qIElmIGluIHJhbmdl ICovCisJICAgICAgY2tkZWxheSA9IHo7CQkvKiBzZXQgaXQgKi8KKwkgICAgZWxzZSB7CisJCVhG QVRBTCgiYmFkIGRlbGF5IHZhbHVlIik7CisJICAgIH0KKwkgICAgYnJlYWs7CisjZW5kaWYgLyog Tk9YRkVSICovCisKKwkgIGNhc2UgJ0UnOgkJCS8qIEV4aXQgb24gY2xvc2UgKi8KKyNpZmRlZiBO RVRDT05OCisJICAgIHRuX2V4aXQgPSAxOworI2VuZGlmIC8qIE5FVENPTk4gKi8KKwkgICAgZXhp dG9uY2xvc2UgPSAxOworCSAgICBicmVhazsKKworI2lmbmRlZiBOT0lDUAorCSAgY2FzZSAnUyc6 CQkJLyogIlN0YXkiIC0gZW50ZXIgaW50ZXJhY3RpdmUgKi8KKwkgICAgc3RheWZsZyA9IDE7CQkv KiBjb21tYW5kIHBhcnNlciBhZnRlciBleGVjdXRpbmcgKi8KKwkgICAgeGZpbmlzaCA9IDA7CQkv KiBjb21tYW5kLWxpbmUgYWN0aW9ucy4gKi8KKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTk9JQ1Ag Ki8KKworCSAgY2FzZSAnVCc6CQkJLyogRmlsZSB0cmFuc2ZlciBtb2RlID0gdGV4dCAqLworCSAg ICBiaW5hcnkgPSBYWUZUX1Q7CisJICAgIHhmZXJtb2RlID0gWE1PREVfTTsJCS8qIFRyYW5zZmVy IG1vZGUgbWFudWFsICovCisJICAgIGZpbGVwZWVrID0gMDsKKyNpZmRlZiBQQVRURVJOUworCSAg ICBwYXR0ZXJucyA9IDA7CisjZW5kaWYgLyogUEFUVEVSTlMgKi8KKwkgICAgYnJlYWs7CisKKwkg IGNhc2UgJzcnOgorCSAgICBicmVhazsKKworI2lmZGVmIElLU0QKKwkgIGNhc2UgJ0EnOiB7CQkJ LyogSW50ZXJuZXQgc2VydmVyICovCisJICAgICAgLyogQWxyZWFkeSBkb25lIGluIHByZXNjYW4o KSAqLworCSAgICAgIC8qIGJ1dCBpbXBsaWVzICd4JyAmJiAgJ1EnICAgKi8KKyNpZmRlZiBPUzIK KwkgICAgICBjaGFyICogcDsKKwkgICAgICBpZiAoKih4cCsxKSkgeworCQkgIFhGQVRBTCgiaW52 YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOworCSAgICAgIH0KKyNpZmRlZiBOVAorCSAgICAgIC8q IFN1cHBvcnQgZm9yIFByYWdtYSBTeXN0ZW1zIFRlbG5ldC9UZXJtaW5hbCBTZXJ2ZXJzICovCisJ ICAgICAgcCA9IGdldGVudigiUFJBR01BU1lTX0lORVREX1NPQ0siKTsKKwkgICAgICBpZiAoIShw ICYmIGF0b2kocCkgIT0gMCkpIHsKKwkJICB4YXJndisrLCB4YXJnYy0tOworCQkgIGlmICh4YXJn YyA8IDEgfHwgKip4YXJndiA9PSAnLScpIHsKKwkJICAgICAgWEZBVEFMKCJtaXNzaW5nIHNvY2tl dCBoYW5kbGUiKTsKKwkJICB9CisJICAgICAgfQorI2Vsc2UgLyogTlQgKi8KKwkgICAgICB4YXJn disrLCB4YXJnYy0tOworCSAgICAgIGlmICh4YXJnYyA8IDEgfHwgKip4YXJndiA9PSAnLScpIHsK KwkJICBYRkFUQUwoIm1pc3Npbmcgc29ja2V0IGhhbmRsZSIpOworCSAgICAgIH0KKyNlbmRpZiAv KiBOVCAqLworI2VuZGlmIC8qIE9TMiAqLworI2lmZGVmIE5PSUNQICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIElmIG5vIEludGVyYWN0aXZlIENvbW1hbmQgUGFyc2VyICovCisJICAgICAg YWN0aW9uID0gJ3gnOwkJLyogLUEgaW1wbGllcyAteC4gKi8KKyNlbmRpZiAvKiBOT0lDUCAqLwor I2lmbmRlZiBOT1hGRVIKKwkgICAgICBkb2Zhc3QoKTsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKwkg ICAgICBicmVhazsKKwkgIH0KKyNlbmRpZiAvKiBJS1NEICovCisKKyNpZm5kZWYgTk9YRkVSCisJ ICBjYXNlICdRJzoJCQkvKiBRdWljayAoaS5lLiBGQVNUKSAqLworCSAgICBkb2Zhc3QoKTsKKwkg ICAgYnJlYWs7CisjZW5kaWYgLyogTk9YRkVSICovCisKKwkgIGNhc2UgJ1InOgkJCS8qIFJlbW90 ZS1Pbmx5ICovCisJICAgIGJyZWFrOwkJCS8qIFRoaXMgaXMgaGFuZGxlZCBpbiBwcmVzY2FuKCku ICovCisKKyNpZm5kZWYgTk9TRVJWRVIKKwkgIGNhc2UgJ3gnOgkJCS8qIHNlcnZlciAqLworCSAg Y2FzZSAnTyc6CQkJLyogKGZvciBPbmUgY29tbWFuZCBvbmx5KSAqLworCSAgICBpZiAoYWN0aW9u KSB7CisJCVhGQVRBTCgiY29uZmxpY3RpbmcgYWN0aW9ucyIpOworCSAgICB9CisJICAgIGlmICh4 ID09ICdPJykganVzdG9uZSA9IDE7CisJICAgIHhmaW5pc2ggPSAxOworCSAgICBhY3Rpb24gPSAn eCc7CisJICAgIGJyZWFrOworI2VuZGlmIC8qIE5PU0VSVkVSICovCisKKyNpZm5kZWYgTk9YRkVS CisJICBjYXNlICdmJzoJCQkvKiBmaW5pc2ggKi8KKwkgICAgaWYgKGFjdGlvbikgeworCQlYRkFU QUwoImNvbmZsaWN0aW5nIGFjdGlvbnMiKTsKKwkgICAgfQorCSAgICBhY3Rpb24gPSBzZXRnZW4o J0YnLCIiLCIiLCIiKTsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTk9YRkVSICovCisKKwkgIGNh c2UgJ3InOiB7CQkJLyogcmVjZWl2ZSAqLworCSAgICAgIGlmIChhY3Rpb24pIHsKKwkJICBYRkFU QUwoImNvbmZsaWN0aW5nIGFjdGlvbnMiKTsKKwkgICAgICB9CisJICAgICAgYWN0aW9uID0gJ3Yn OworCSAgICAgIGJyZWFrOworCSAgfQorCisjaWZuZGVmIE5PWEZFUgorCSAgY2FzZSAnayc6CQkJ LyogcmVjZWl2ZSB0byBzdGRvdXQgKi8KKwkgICAgaWYgKGFjdGlvbikgeworCQlYRkFUQUwoImNv bmZsaWN0aW5nIGFjdGlvbnMiKTsKKwkgICAgfQorCSAgICBzdGRvdWYgPSAxOworCSAgICBhY3Rp b24gPSAndic7CisJICAgIGJyZWFrOworCisJICBjYXNlICdzJzogewkJCS8qIHNlbmQgKi8KKwkg ICAgICBpbnQgZmlsMnNuZCwgcmM7CisJICAgICAgaWYgKCFyZWN1cnNpdmUpCisJICAgICAgbm9s aW5rcyA9IDA7CQkvKiBGb2xsb3cgbGlua3MgYnkgZGVmYXVsdCAqLworCisJICAgICAgaWYgKGFj dGlvbikgeworCQkgIFhGQVRBTCgiY29uZmxpY3RpbmcgYWN0aW9ucyIpOworCSAgICAgIH0KKwkg ICAgICBpZiAoKih4cCsxKSkgeworCQkgIFhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGlu ZyBhZnRlciAtcyIpOworCSAgICAgIH0KKwkgICAgICBuZmlscyA9IDA7CQkvKiBJbml0aWFsaXpl IGZpbGUgY291bnRlciAqLworCSAgICAgIGZpbDJzbmQgPSAwOwkJLyogQXNzdW1lIG5vdGhpbmcg dG8gc2VuZCAgKi8KKwkgICAgICB6ID0gMDsJCQkvKiBGbGFnIGZvciBzdGRpbiAqLworCSAgICAg IGNtbGlzdCA9IHhhcmd2ICsgMTsJLyogUmVtZW1iZXIgdGhpcyBwb2ludGVyICovCisJICAgICAg d2hpbGUgKCsreGFyZ3YsIC0teGFyZ2MgPiAwKSB7IC8qIFRyYXZlcnNlIHRoZSBsaXN0ICovCisj aWZkZWYgUElQRVNFTkQKKwkJICBpZiAodXNlcGlwZXMgJiYgcHJvdG9jb2wgPT0gUFJPVE9fSyAm JiAqKnhhcmd2ID09ICchJykgeworCQkgICAgICBjbWFyZyA9ICp4YXJndjsKKwkJICAgICAgY21h cmcrKzsKKwkJICAgICAgZGVidWcoRjExMCwiZG9hcmcgcGlwZXNlbmQiLGNtYXJnLDApOworCQkg ICAgICBuZmlscyA9IC0xOworCQkgICAgICB6ID0gMTsKKwkJICAgICAgcGlwZXNlbmQgPSAxOwor CQkgIH0gZWxzZQorI2VuZGlmIC8qIFBJUEVTRU5EICovCisJCSAgICBpZiAoKip4YXJndiA9PSAn LScpIHsgLyogQ2hlY2sgZm9yIHNlbmRpbmcgc3RkaW4gKi8KKwkJCWlmIChzdHJjbXAoKnhhcmd2 LCItIikgIT0gMCkgLyogbmV4dCBvcHRpb24/ICovCisJCQkgIGJyZWFrOworCQkJeisrOwkJLyog Ii0iIGFsb25lIG1lYW5zIHNlbmQgZnJvbSBzdGRpbi4gKi8KKyNpZmRlZiBSRUNVUlNJVkUKKwkJ ICAgIH0gZWxzZSBpZiAoIXN0cmNtcCgqeGFyZ3YsIi4iKSkgeworCQkJZmlsMnNuZCA9IDE7CisJ CQluZmlscysrOworCQkJcmVjdXJzaXZlID0gMTsKKwkJCW5vbGlua3MgPSAyOworI2VuZGlmIC8q IFJFQ1VSU0lWRSAqLworCQkgICAgfSBlbHNlIC8qIENoZWNrIGlmIGZpbGUgZXhpc3RzICovCisJ CSAgICAgIGlmICgocmMgPSB6Y2hraSgqeGFyZ3YpKSA+IC0xIHx8IChyYyA9PSAtMikpIHsKKwkJ CSAgaWYgIChyYyAhPSAtMikKKwkJCSAgICBmaWwyc25kID0gMTsKKwkJCSAgbmZpbHMrKzsJLyog QnVtcCBmaWxlIGNvdW50ZXIgKi8KKwkJICAgICAgfSBlbHNlIGlmIChpc3dpbGQoKnhhcmd2KSAm JiBuenhwYW5kKCp4YXJndiwwKSA+IDApIHsKKwkJICAgICAgLyogb3IgY29udGFpbnMgd2lsZGNh cmQgY2hhcmFjdGVycyBtYXRjaGluZyByZWFsIGZpbGVzICovCisJCQkgIGZpbDJzbmQgPSAxOwor CQkJICBuZmlscysrOworCQkgICAgICB9IGVsc2UgeworCQkJICBpZiAoIWZhaWxtc2cpCisJCQkg ICAgZmFpbG1zZyA9IChjaGFyICopbWFsbG9jKDIwMDApOworCQkJICBpZiAoZmFpbG1zZykgewor CQkJICAgICAgY2ttYWttc2coZmFpbG1zZywyMDAwLAorI2lmZGVmIFZNUworCQkJCSAgICAgICAi JUNLRVJNSVQtRS1TRUFSQ0hGQUlMICIKKyNlbHNlCisJCQkJICAgICAgICJrZXJtaXQgLXMgIgor I2VuZGlmCS8qIFZNUyAqLworCQkJCSAgICAgICAsCisJCQkJICAgICAgICp4YXJndiwKKwkJCQkg ICAgICAgIjogIiwKKwkJCQkgICAgICAgY2tfZXJyc3RyKCkKKwkJCQkgICAgICAgKTsKKwkJCSAg fQorCQkgICAgICB9CisJICAgICAgfQorCSAgICAgIHhhcmdjKyssIHhhcmd2LS07CQkvKiBBZGp1 c3QgYXJndi9hcmdjICovCisJICAgICAgaWYgKCFmaWwyc25kICYmIHogPT0gMCkgeworCQkgIGlm ICghZmFpbG1zZykgeworI2lmZGVmIFZNUworCQkgICAgICBmYWlsbXNnID0gIiVDS0VSTUlULUUt U0VBUkNIRkFJTCwgbm8gZmlsZXMgZm9yIC1zIjsKKyNlbHNlCisJCSAgICAgIGZhaWxtc2cgPSAi Tm8gZmlsZXMgZm9yIC1zIjsKKyNlbmRpZiAvKiBWTVMgKi8KKwkJICB9CisJCSAgWEZBVEFMKGZh aWxtc2cpOworCSAgICAgIH0KKwkgICAgICBpZiAoeiA+IDEpIHsKKwkJICBYRkFUQUwoImtlcm1p dCAtczogdG9vIG1hbnkgLSdzIik7CisJICAgICAgfQorCSAgICAgIGlmICh6ID09IDEgJiYgZmls MnNuZCkgeworCQkgIFhGQVRBTCgiaW52YWxpZCBtaXh0dXJlIG9mIGZpbGVuYW1lcyBhbmQgJy0n IGluIC1zIik7CisJICAgICAgfQorCSAgICAgIGRlYnVnKEYxMDEsImRvYXJnIHMgbmZpbHMiLCIi LG5maWxzKTsKKwkgICAgICBkZWJ1ZyhGMTAxLCJkb2FyZyBzIHoiLCIiLHopOworCSAgICAgIGlm IChuZmlscyA9PSAwKSB7CQkvKiBubyBmaWxlIHBhcmFtZXRlcnMgd2VyZSBzcGVjaWZpZWQgKi8K KwkJICBpZiAoaXNfYV90dHkoMCkpIHsJLyogKHVzZWQgdG8gYmUgaXNfYV90dHkoMSkgLSB3aHk/ KSAqLworCQkgICAgICBYRkFUQUwoInNlbmRpbmcgZnJvbSB0ZXJtaW5hbCBub3QgYWxsb3dlZCIp OworCQkgIH0gZWxzZSBzdGRpbmYgPSAxOworCSAgICAgIH0KKwkgICAgICBkZWJ1ZyhGMTAxLCJk b2FyZyBzIHN0ZGluZiIsIiIsc3RkaW5mKTsKKwkgICAgICBkZWJ1ZyhGMTExLCJkb2FyZyIsKnhh cmd2LG5maWxzKTsKKwkgICAgICBhY3Rpb24gPSAncyc7CisJICAgICAgYnJlYWs7CisJICB9CisK KwkgIGNhc2UgJ2cnOgkJCS8qIGdldCAqLworCSAgY2FzZSAnRyc6CQkJLyogZ2V0IHRvIHN0ZG91 dCAqLworCSAgICBpZiAoYWN0aW9uKSB7CisJCVhGQVRBTCgiY29uZmxpY3RpbmcgYWN0aW9ucyIp OworCSAgICB9CisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVu dCBidW5kbGluZyBhZnRlciAtZyIpOworCSAgICB9CisJICAgIHhhcmd2KyssIHhhcmdjLS07CisJ ICAgIGlmICgoeGFyZ2MgPT0gMCkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworCQlYRkFUQUwoIm1p c3NpbmcgZmlsZW5hbWUgZm9yIC1nIik7CisJICAgIH0KKwkgICAgaWYgKHggPT0gJ0cnKSBzdGRv dWYgPSAxOworCSAgICBjbWFyZyA9ICp4YXJndjsKKwkgICAgYWN0aW9uID0gJ3InOworCSAgICBi cmVhazsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworI2lmbmRlZiBOT0xPQ0FMCisJICBjYXNlICdj JzoJCQkvKiBjb25uZWN0IGJlZm9yZSAqLworCSAgICBjZmxnID0gMTsKKwkgICAgYnJlYWs7CisK KwkgIGNhc2UgJ24nOgkJCS8qIGNvbm5lY3QgYWZ0ZXIgKi8KKwkgICAgY25mbGcgPSAxOworCSAg ICBicmVhazsKKyNlbmRpZiAvKiBOT0xPQ0FMICovCisKKwkgIGNhc2UgJ2gnOgkJCS8qIGhlbHAg Ki8KKwkgICAgdXNhZ2UoKTsKKyNpZm5kZWYgTk9JQ1AKKwkgICAgaWYgKHN0YXlmbGcgfHwgd2hh dCA9PSBXX0NPTU1BTkQpCisJICAgICAgYnJlYWs7CisJICAgIGVsc2UKKyNlbmRpZiAvKiBOT0lD UCAqLworCSAgICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOworCisjaWZuZGVmIE5PWEZFUgorCSAg Y2FzZSAnYSc6CQkJLyogImFzIiAqLworCSAgICBpZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImlu dmFsaWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLWEiKTsKKwkgICAgfQorCSAgICB4YXJndisr LCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewor CQlYRkFUQUwoIm1pc3NpbmcgbmFtZSBpbiAtYSIpOworCSAgICB9CisJICAgIGNtYXJnMiA9ICp4 YXJndjsKKwkgICAgZGVidWcoRjExMSwiZG9hcmcgYSIsY21hcmcyLHhhcmdjKTsKKwkgICAgYnJl YWs7CisjZW5kaWYgLyogTk9YRkVSICovCisKKyNpZm5kZWYgTk9JQ1AKKwkgIGNhc2UgJ1knOgkJ CS8qIE5vIGluaXRpYWxpemF0aW9uIGZpbGUgKi8KKwkgICAgbm9pbml0ID0gMTsKKwkgICAgYnJl YWs7CisKKwkgIGNhc2UgJ3knOgkJCS8qIEFsdGVybmF0ZSBpbml0LWZpbGUgbmFtZSAqLworCSAg ICBub2luaXQgPSAwOworCSAgICBpZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImludmFsaWQgYXJn dW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLXkiKTsKKwkgICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0t OworCSAgICBpZiAoeGFyZ2MgPCAxKSB7CisJCVhGQVRBTCgibWlzc2luZyBmaWxlbmFtZSBpbiAt eSIpOworCSAgICB9CisJICAgIC8qIHN0cmNweShrZXJtcmMsKnhhcmd2KTsgLi4uIGFscmVhZHkg ZG9uZSBpbiBwcmVzY2FuKCkuLi4gKi8KKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTk9JQ1AgKi8K KworI2lmbmRlZiBOT1hGRVIKKwkgIGNhc2UgJ0knOgkJCS8qIEFzc3VtZSB3ZSBoYXZlIGFuICJJ bnRlcm5ldCIgKi8KKwkgICAgcmVsaWFibGUgPSAxOwkJLyogb3Igb3RoZXIgcmVsaWFibGUgY29u bmVjdGlvbiAqLworCSAgICB4cmVsaWFibGUgPSAxOworCSAgICBzZXRyZWxpYWJsZSA9IDE7CisK KwkgICAgLyogSSdtIG5vdCBzbyBzdXJlIGFib3V0IHRoaXMgLS0gd2hhdCBhYm91dCBWTVM/IChu ZXh0IGNvbW1lbnQpICovCisJICAgIGNsZWFycnEgPSAxOwkJLyogdGhlcmVmb3JlIHRoZSBjaGFu bmVsIGlzIGNsZWFyICovCisKKyNpZm5kZWYgVk1TCisvKgorICBTaW5jZSB0aGlzIGNhbiB0cmln Z2VyIGZ1bGwgY29udHJvbC1jaGFyYWN0ZXIgdW5wcmVmaXhpbmcsIHdlIG5lZWQgdG8KKyAgZW5z dXJlIHRoYXQgb3VyIHRlcm1pbmFsIG9yIHB0eSBkcml2ZXIgaXMgbm90IGRvaW5nIFhvbi9Yb2Zm OyBvdGhlcndpc2UKKyAgd2UgY2FuIGJlY29tZSBkZWFkbG9ja2VkIHRoZSBmaXJzdCB0aW1lIHdl IHJlY2VpdmUgYSBmaWxlIHRoYXQgY29udGFpbnMKKyAgWG9mZi4KKyovCisJICAgIGZsb3cgPSBG TE9fTk9ORTsKKyNlbmRpZiAvKiBWTVMgKi8KKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTk9YRkVS ICovCisKKyNpZm5kZWYgTk9MT0NBTAorCSAgY2FzZSAnbCc6CQkJLyogU0VUIExJTkUgKi8KKyNp ZmRlZiBORVRDT05OCisjaWZkZWYgQU5ZWDI1CisJICBjYXNlICdYJzoJCQkvKiBTRVQgSE9TVCB0 byBYLjI1IGFkZHJlc3MgKi8KKyNpZmRlZiBTVU5YMjUKKwkgIGNhc2UgJ1onOgkJCS8qIFNFVCBI T1NUIHRvIFguMjUgZmlsZSBkZXNjcmlwdG9yICovCisjZW5kaWYgLyogU1VOWDI1ICovCisjZW5k aWYgLyogQU5ZWDI1ICovCisjaWZkZWYgVENQU09DS0VUCisJICBjYXNlICdKJzoKKwkgIGNhc2Ug J2onOgkJCS8qIFNFVCBIT1NUIChUQ1AvSVAgc29ja2V0KSAqLworI2VuZGlmIC8qIFRDUFNPQ0tF VCAqLworI2VuZGlmIC8qIE5FVENPTk4gKi8KKyNpZm5kZWYgTk9YRkVSCisJICAgIGlmICh4ID09 ICdqJyB8fCB4ID09ICdKJyB8fCB4ID09ICdYJyB8fCB4ID09ICdaJykgeworCQlyZWxpYWJsZSA9 IDE7CQkvKiBvciBvdGhlciByZWxpYWJsZSBjb25uZWN0aW9uICovCisJCXhyZWxpYWJsZSA9IDE7 CisJCXNldHJlbGlhYmxlID0gMTsKKwkgICAgfQorI2VuZGlmIC8qIE5PWEZFUiAqLworCSAgICBu ZXR3b3JrID0gMDsKKwkgICAgaWYgKCooeHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3Vt ZW50IGJ1bmRsaW5nIGFmdGVyIC1sIG9yIC1qIik7CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFy Z2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKKwkJWEZB VEFMKCJjb21tdW5pY2F0aW9uIGxpbmUgZGV2aWNlIG5hbWUgbWlzc2luZyIpOworCSAgICB9CisK KyNpZmRlZiBORVRDT05OCisJICAgIGlmICh4ID09ICdKJykgeworCQljZmxnICAgID0gMTsJCS8q IENvbm5lY3QgKi8KKwkJc3RheWZsZyA9IDE7CQkvKiBTdGF5ICovCisJCXRuX2V4aXQgPSAxOwkJ LyogVGVsbmV0LWxpa2UgZXhpdCBjb25kaXRpb24gKi8KKwkJZXhpdG9uY2xvc2UgPSAxOworCSAg ICB9CisjZW5kaWYgLyogTkVUQ09OTiAqLworCSAgICBja3N0cm5jcHkodHRuYW1lLCp4YXJndixU VE5BTUxFTisxKTsKKwkgICAgbG9jYWwgPSAoc3RyY21wKHR0bmFtZSxDVFROQU0pICE9IDApOwor CSAgICBpZiAobG9jYWwgJiYgc3RyY21wKHR0bmFtZSwiMCIpID09IDApCisJICAgICAgbG9jYWwg PSAwOworLyoKKyAgTk9URTogV2UgcmVhbGx5IGRvIG5vdCBuZWVkIHRvIGNhbGwgdHRvcGVuIGhl cmUsIHNpbmNlIGl0IHNob3VsZCBiZSBjYWxsZWQKKyAgYWdhaW4gbGF0ZXIsIGF1dG9tYXRpY2Fs bHksIHdoZW4gd2UgZmlyc3QgdHJ5IHRvIGNvbmRpdGlvbiB0aGUgZGV2aWNlIHZpYQorICB0dHBr dCBvciB0dHZ0LiAgQ2FsbGluZyB0dG9wZW4gaGVyZSBoYXMgdGhlIGJhZCBzaWRlIGVmZmVjdCBv ZiBtYWtpbmcgdGhlCisgIG9yZGVyIG9mIHRoZSAtYiBhbmQgLWwgb3B0aW9ucyBzaWduaWZpY2Fu dCB3aGVuIHRoZSBvcmRlciBvZiBjb21tYW5kLWxpbmUKKyAgb3B0aW9ucyBzaG91bGQgbm90IG1h dHRlci4gIEhvd2V2ZXIsIHRoZSBuZXR3b3JrIGNhc2VzIGltbWVkaWF0ZWx5IGJlbG93CisgIGNv bXBsaWNhdGUgbWF0dGVycyBhIGJpdCwgc28gd2UnbGwgc2V0dGxlIHRoaXMgaW4gYSBmdXR1cmUg ZWRpdC4KKyovCisJICAgIGlmICh4ID09ICdsJykgeworCQlpZiAodHRvcGVuKHR0bmFtZSwmbG9j YWwsbWRtdHlwLDApIDwgMCkgeworCQkgICAgWEZBVEFMKCJjYW4ndCBvcGVuIGRldmljZSIpOwor CQl9CisjaWZkZWYgQ0tMT0dESUFMCisJCWRvbG9nbGluZSgpOworI2VuZGlmIC8qIENLTE9HRElB TCAqLworCQlkZWJ1ZyhGMTAxLCJkb2FyZyBzcGVlZCIsIiIsc3BlZWQpOworCQljeHR5cGUgPSAo bWRtdHlwID4gMCkgPyBDWFRfTU9ERU0gOiBDWFRfRElSRUNUOworCQlzcGVlZCA9IHR0Z3NwZCgp OwkvKiBHZXQgdGhlIHNwZWVkLiAqLworCQlzZXRmbG93KCk7CQkvKiBEbyBzb21ldGhpbmcgYWJv dXQgZmxvdyBjb250cm9sLiAqLworI2lmbmRlZiBOT1NQTAorCQlpZiAobG9jYWwpIHsKKwkJICAg IGlmIChubWFjKSB7CQkvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCisJCQlpbnQgazsJCS8qIFll cyAqLworCQkJayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7IC8qIExvb2sgdGhpcyB1 cCAqLworCQkJaWYgKGsgPj0gMCkgewkvKiBJZiBmb3VuZCwgKi8KKwkJCSAgICBpZiAoZG9kbyhr LHR0bmFtZSwwKSA+IC0xKSAvKiBzZXQgaXQgdXAsICovCisJCQkgICAgICBwYXJzZXIoMSk7IC8q IGFuZCBleGVjdXRlIGl0ICovCisJCQl9CisJCSAgICB9CisJCX0KKyNlbmRpZiAvKiBOT1NQTCAq LworCisjaWZkZWYgTkVUQ09OTgorCSAgICB9IGVsc2UgeworCQlpZiAoeCA9PSAnaicgfHwgeCA9 PSAnSicpIHsgLyogSVAgbmV0d29yayBob3N0IG5hbWUgKi8KKwkJICAgIGNoYXIgKiBzID0gbGlu ZTsKKwkJICAgIGNoYXIgKiBzZXJ2aWNlID0gdG1wYnVmOworCQkgICAgaWYgKHhhcmdjID4gMCkg ewkvKiBDaGVjayBpZiBpdCdzIGZvbGxvd2VkIGJ5ICovCisJCQkvKiBBIHNlcnZpY2UgbmFtZSBv ciBudW1iZXIgKi8KKwkJCWlmICgqKHhhcmd2KzEpICYmICooKih4YXJndisxKSkgIT0gJy0nKSB7 CisJCQkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkJCSAgICBja3N0cm5jYXQodHRuYW1lLCI6IixU VE5BTUxFTisxKTsKKwkJCSAgICBja3N0cm5jYXQodHRuYW1lLCp4YXJndixUVE5BTUxFTisxKTsK KwkJCX0KKwkJICAgIH0KKwkJICAgIG5ldHR5cGUgPSBORVRfVENQQjsKKwkJICAgIG1kbXR5cCA9 IC1uZXR0eXBlOwkvKiBQZXJoYXBzIGFscmVhZHkgc2V0IGluIGluaXQgZmlsZSAqLworCQkgICAg dGVsbmV0ZmQgPSAxOwkvKiBPciBtYXliZSBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciAqLworCQkg ICAgY2tzdHJuY3B5KGxpbmUsIHR0bmFtZSwgTElOQlVGU0laKTsgLyogV29ya2luZyBjb3B5ICov CisJCSAgICBmb3IgKHMgPSBsaW5lOyAqcyAhPSBOVUwgJiYgKnMgIT0gJzonOyBzKyspOworCQkg ICAgaWYgKCpzKSB7CisJCQkqcysrID0gTlVMOworCQkJY2tzdHJuY3B5KHNlcnZpY2UsIHMsIFRN UEJVRlNJWik7CisJCSAgICB9IGVsc2UgKnNlcnZpY2UgPSBOVUw7CisJCSAgICBzID0gbGluZTsK KyNpZm5kZWYgTk9ESUFMCisjaWZuZGVmIE5PSUNQCisJCSAgICAvKiBMb29rIHVwIGluIG5ldHdv cmsgZGlyZWN0b3J5ICovCisJCSAgICB4ID0gMDsKKwkJICAgIGlmICgqcyA9PSAnPScpIHsJLyog SWYgbnVtYmVyIHN0YXJ0cyB3aXRoID0gc2lnbiAqLworCQkJcysrOwkJLyogc3RyaXAgaXQgKi8K KwkJCXdoaWxlICgqcyA9PSBTUCkgLyogYW5kIGFsc28gYW55IGxlYWRpbmcgc3BhY2VzICovCisJ CQkgIHMrKzsKKwkJCWNrc3RybmNweShsaW5lLHMsTElOQlVGU0laKTsgLyogRG8gdGhpcyBhZ2Fp bi4gKi8KKwkJCW5oY291bnQgPSAwOworCQkgICAgfSBlbHNlIGlmICghaXNkaWdpdChsaW5lWzBd KSkgeworLyoKKyAgbm5ldGRpciB3aWxsIGJlIGdyZWF0ZXIgdGhhbiAwIGlmIHRoZSBpbml0IGZp bGUgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBpdAorICBjb250YWluZWQgYSBTRVQgTkVUV09SSyBE SVJFQ1RPUlkgY29tbWFuZC4KKyovCisJCQl4eCA9IDA7CQkvKiBJbml0aWFsaXplIHRoaXMgKi8K KwkJCWlmIChubmV0ZGlyID4gMCkgLyogSWYgdGhlcmUgaXMgYSBkaXJlY3RvcnkuLi4gKi8KKwkJ CSAgeHggPSBsdW5ldChsaW5lKTsgLyogTG9vayB1cCB0aGUgbmFtZSAqLworCQkJZWxzZQkJLyog SWYgbm8gZGlyZWN0b3J5ICovCisJCQkgIG5oY291bnQgPSAwOwkvKiB3ZSBkaWRuJ3QgZmluZCBh bnl0aGluZyB0aGVyZSAqLworCQkJaWYgKHh4IDwgMCkgewkvKiBMb29rdXAgZXJyb3I6ICovCisJ CQkgICAgY2ttYWttc2codG1wYnVmLAorCQkJCSAgICAgVE1QQlVGU0laLAorCQkJCSAgICAiP0Zh dGFsIG5ldHdvcmsgZGlyZWN0b3J5IGxvb2t1cCBlcnJvciAtICIsCisJCQkJICAgICBsaW5lLAor CQkJCSAgICAgIlxuIiwKKwkJCQkgICAgIE5VTEwKKwkJCQkgICAgICk7CisJCQkgICAgWEZBVEFM KHRtcGJ1Zik7CisJCQl9CisJCSAgICB9CisjZW5kaWYgLyogTk9JQ1AgKi8KKyNlbmRpZiAvKiBO T0RJQUwgKi8KKwkJICAgIC8qIEFkZCBzZXJ2aWNlIHRvIGxpbmUgc3BlY2lmaWNhdGlvbiBmb3Ig dHRvcGVuKCkgKi8KKwkJICAgIGlmICgqc2VydmljZSkgewkvKiBUaGVyZSBpcyBhIHNlcnZpY2Ug c3BlY2lmaWVkICovCisJCQlja3N0cm5jYXQobGluZSwgIjoiLExJTkJVRlNJWik7CisJCQlja3N0 cm5jYXQobGluZSwgc2VydmljZSxMSU5CVUZTSVopOworCQkJdHRucHJvdG8gPSBOUF9ERUZBVUxU OworCQkgICAgfSBlbHNlIHsKKwkJCWNrc3RybmNhdChsaW5lLCAiOnRlbG5ldCIsTElOQlVGU0la KTsKKwkJCXR0bnByb3RvID0gTlBfVEVMTkVUOworCQkgICAgfQorCisjaWZuZGVmIE5PSUNQCisj aWZuZGVmIE5PRElBTAorCQkgICAgaWYgKChuaGNvdW50ID4gMSkgJiYgIXF1aWV0ICYmICFiYWNr Z3JkKSB7CisJCQlwcmludGYoIiVkIGVudHIlcyBmb3VuZCBmb3IgXCIlc1wiJXNcbiIsCisJCQkg ICAgICAgbmhjb3VudCwKKwkJCSAgICAgICAobmhjb3VudCA9PSAxKSA/ICJ5IiA6ICJpZXMiLAor CQkJICAgICAgIHMsCisJCQkgICAgICAgKG5oY291bnQgPiAwKSA/ICI6IiA6ICIuIgorCQkJICAg ICAgICk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbmhjb3VudDsgaSsrKQorCQkJICBwcmludGYoIiUz ZC4gJXMgJS0xMnMgPT4gJXNcbiIsCisJCQkJIGkrMSwgbl9uYW1lLCBuaF9wMltpXSwgbmhfcFtp XQorCQkJCSApOworCQkgICAgfQorCQkgICAgaWYgKG5oY291bnQgPT0gMCkKKwkJICAgICAgbiA9 IDE7CisJCSAgICBlbHNlCisJCSAgICAgIG4gPSBuaGNvdW50OworI2Vsc2UKKwkJICAgIG4gPSAx OworCQkgICAgbmhjb3VudCA9IDA7CisjZW5kaWYgLyogTk9ESUFMICovCisJCSAgICBmb3IgKGkg PSAwOyBpIDwgbjsgaSsrKSB7CisjaWZuZGVmIE5PRElBTAorCQkJaWYgKG5oY291bnQgPj0gMSkg eworCQkJICAgIC8qIENvcHkgdGhlIGN1cnJlbnQgZW50cnkgdG8gbGluZSAqLworCQkJICAgIGNr c3RybmNweShsaW5lLG5oX3BbaV0sTElOQlVGU0laKTsKKyAgICAgICAgICAgICAgICAgICAgLyog Q2hlY2sgdG8gc2VlIGlmIHRoZSBuZXR3b3JrIGVudHJ5IGNvbnRhaW5zIGEgc2VydmljZSAqLwor CQkJICAgIGZvciAocyA9IGxpbmUgOyAoKnMgIT0gTlVMKSAmJiAoKnMgIT0gJzonKTsgcysrKQor CQkJICAgICAgOworCQkJICAgIC8qIElmIGRpcmVjdG9yeSBkb2VzIG5vdCBoYXZlIGEgc2Vydmlj ZSAuLi4gKi8KKwkJCSAgICAvKiBhbmQgdGhlIHVzZXIgc3BlY2lmaWVkIG9uZSAqLworCQkJICAg IGlmICghKnMgJiYgKnNlcnZpY2UpIHsKKwkJCQlja3N0cm5jYXQobGluZSwgIjoiLExJTkJVRlNJ Wik7CisJCQkJY2tzdHJuY2F0KGxpbmUsIHNlcnZpY2UsTElOQlVGU0laKTsKKwkJCSAgICB9CisJ CQkgICAgaWYgKGxvb2t1cChuZXRjbWQsbmhfcDJbaV0sbm5ldHMsJnopID4gLTEpIHsKKwkJCQlt ZG10eXAgPSAwIC0gbmV0Y21kW3pdLmt3dmFsOworCQkJICAgIH0gZWxzZSB7CisJCQkJcHJpbnRm KAorCQkJCSAiRXJyb3IgLSBuZXR3b3JrIHR5cGUgXCIlc1wiIG5vdCBzdXBwb3J0ZWRcbiIsCisJ CQkJICAgICAgIG5oX3AyW2ldCisJCQkJICAgICAgICk7CisJCQkJY29udGludWU7CisJCQkgICAg fQorCQkJfQorI2VuZGlmIC8qIE5PRElBTCAqLworCQkgICAgfQorI2VuZGlmIC8qIE5PSUNQICov CisJCSAgICBja3N0cm5jcHkodHRuYW1lLCBsaW5lLFRUTkFNTEVOKzEpOworCQkgICAgY3h0eXBl ID0gQ1hUX1RDUElQOwkvKiBTZXQgY29ubmVjdGlvbiB0eXBlICovCisJCSAgICBzZXRmbG93KCk7 CQkvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBjb250cm9sLiAqLworI2lmZGVmIFNVTlgyNQorCQl9 IGVsc2UgaWYgKHggPT0gJ1gnKSB7CS8qIFguMjUgYWRkcmVzcyAqLworCQkgICAgbmV0dHlwZSA9 IE5FVF9TWDI1OworCQkgICAgbWRtdHlwID0gLW5ldHR5cGU7CisJCX0gZWxzZSBpZiAoeCA9PSAn WicpIHsJLyogT3BlbiBYLjI1IGZpbGUgZGVzY3JpcHRvciAqLworCQkgICAgbmV0dHlwZSA9IE5F VF9TWDI1OworCQkgICAgbWRtdHlwID0gLW5ldHR5cGU7CisJCSAgICB4MjVmZCA9IDE7CisjZW5k aWYgLyogU1VOWDI1ICovCisjaWZkZWYgU1RSQVRVU1gyNQorCQl9IGVsc2UgaWYgKHggPT0gJ1gn KSB7CS8qIFguMjUgYWRkcmVzcyAqLworCQkgICAgbmV0dHlwZSA9IE5FVF9WWDI1OworCQkgICAg bWRtdHlwID0gLW5ldHR5cGU7CisjZW5kaWYgLyogU1RSQVRVU1gyNSAqLworI2lmZGVmIElCTVgy NQorCQl9IGVsc2UgaWYgKHggPT0gJ1gnKSB7CS8qIFguMjUgYWRkcmVzcyAqLworCQkgICAgbmV0 dHlwZSA9IE5FVF9JWDI1OworCQkgICAgbWRtdHlwID0gLW5ldHR5cGU7CisjZW5kaWYgLyogSUJN WDI1ICovCisjaWZkZWYgSFBYMjUKKwkJfSBlbHNlIGlmICh4ID09ICdYJykgewkvKiBYLjI1IGFk ZHJlc3MgKi8KKwkJICAgIG5ldHR5cGUgPSBORVRfSFgyNTsKKwkJICAgIG1kbXR5cCA9IC1uZXR0 eXBlOworI2VuZGlmIC8qIEhQWDI1ICovCisJCX0KKwkJaWYgKHR0b3Blbih0dG5hbWUsJmxvY2Fs LG1kbXR5cCwwKSA8IDApIHsKKwkJICAgIFhGQVRBTCgiY2FuJ3Qgb3BlbiBob3N0IGNvbm5lY3Rp b24iKTsKKwkJfQorCQluZXR3b3JrID0gMTsKKyNpZmRlZiBDS0xPR0RJQUwKKwkJZG9sb2duZXQo KTsKKyNlbmRpZiAvKiBDS0xPR0RJQUwgKi8KKwkJY3h0eXBlID0gQ1hUX1gyNTsJLyogU2V0IGNv bm5lY3Rpb24gdHlwZSAqLworCQlzZXRmbG93KCk7CQkvKiBTZXQgYXBwcm9wcmlhdGUgZmxvdyBj b250cm9sLiAqLworI2lmbmRlZiBOT1NQTAorCQlpZiAobG9jYWwpIHsKKwkJICAgIGlmIChubWFj KSB7CQkvKiBBbnkgbWFjcm9zIGRlZmluZWQ/ICovCisJCQlpbnQgazsJCS8qIFllcyAqLworCQkJ ayA9IG1sb29rKG1hY3RhYiwib25fb3BlbiIsbm1hYyk7IC8qIExvb2sgdGhpcyB1cCAqLworCQkJ aWYgKGsgPj0gMCkgewkvKiBJZiBmb3VuZCwgKi8KKwkJCSAgICBpZiAoZG9kbyhrLHR0bmFtZSww KSA+IC0xKSAvKiBzZXQgaXQgdXAsICovCisJCQkgICAgICBwYXJzZXIoMSk7ICAgICAgICAvKiBh bmQgZXhlY3V0ZSBpdCAqLworCQkJfQorCQkgICAgfQorCQl9CisjZW5kaWYgLyogTk9TUEwgKi8K KyNlbmRpZiAvKiBORVRDT05OICovCisJICAgIH0KKwkgICAgLyogYWRkIG1vcmUgaGVyZSAtLSBk ZWNuZXQsIGV0Yy4uLiAqLworCSAgICBoYXZlbGluZSA9IDE7CisJICAgIGJyZWFrOworCisjaWZk ZWYgQU5ZWDI1CisJICBjYXNlICdVJzoJCQkvKiBYLjI1IGNhbGwgdXNlciBkYXRhICovCisJICAg IGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyIpOwor CSAgICB9CisJICAgIHhhcmd2KyssIHhhcmdjLS07CisJICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAo Kip4YXJndiA9PSAnLScpKSB7CisJCVhGQVRBTCgibWlzc2luZyBjYWxsIHVzZXIgZGF0YSBzdHJp bmciKTsKKwkgICAgfQorCSAgICBja3N0cm5jcHkodWRhdGEsKnhhcmd2LE1BWENVREFUQSk7CisJ ICAgIGlmICgoaW50KXN0cmxlbih1ZGF0YSkgPD0gTUFYQ1VEQVRBKSB7CisJCWN1ZGF0YSA9IDE7 CisJICAgIH0gZWxzZSB7CisJCVhGQVRBTCgiSW52YWxpZCBjYWxsIHVzZXIgZGF0YSIpOworCSAg ICB9CisJICAgIGJyZWFrOworCisJICBjYXNlICdvJzoJCQkvKiBYLjI1IGNsb3NlZCB1c2VyIGdy b3VwICovCisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBi dW5kbGluZyIpOworCSAgICB9CisJICAgIHhhcmd2KyssIHhhcmdjLS07CisJICAgIGlmICgoeGFy Z2MgPCAxKSB8fCAoKip4YXJndiA9PSAnLScpKSB7CisJCVhGQVRBTCgibWlzc2luZyBjbG9zZWQg dXNlciBncm91cCBpbmRleCIpOworCSAgICB9CisJICAgIHogPSBhdG9pKCp4YXJndik7CQkvKiBD b252ZXJ0IHRvIG51bWJlciAqLworCSAgICBpZiAoeiA+PSAwICYmIHogPD0gOTkpIHsKKwkJY2xv c2dyID0gejsKKwkgICAgfSBlbHNlIHsKKwkJWEZBVEFMKCJJbnZhbGlkIGNsb3NlZCB1c2VyIGdy b3VwIGluZGV4Iik7CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ3UnOgkJCS8qIFgu MjUgcmV2ZXJzZSBjaGFyZ2UgY2FsbCAqLworCSAgICByZXZjYWxsID0gMTsKKwkgICAgYnJlYWs7 CisjZW5kaWYgLyogQU5ZWDI1ICovCisjZW5kaWYgLyogTk9MT0NBTCAqLworCisJICBjYXNlICdi JzoJCQkvKiBCaXRzLXBlci1zZWNvbmQgZm9yIHNlcmlhbCBkZXZpY2UgKi8KKwkgICAgaWYgKCoo eHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisJICAgIH0K KwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2 ID09ICctJykpIHsKKwkJWEZBVEFMKCJtaXNzaW5nIGJwcyIpOworCSAgICB9CisJICAgIHp6ID0g YXRvbCgqeGFyZ3YpOwkJLyogQ29udmVydCB0byBsb25nIGludCAqLworCSAgICBpID0genogLyAx MEw7CisjaWZuZGVmIE5PTE9DQUwKKwkgICAgaWYgKHR0c3NwZChpKSA+IC0xKQkJLyogQ2hlY2sg YW5kIHNldCBpdCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKwkgICAgICBzcGVlZCA9IHR0Z3Nw ZCgpOwkJLyogYW5kIHJlYWQgaXQgYmFjay4gKi8KKyNpZm5kZWYgTk9MT0NBTAorCSAgICBlbHNl IHsKKwkJWEZBVEFMKCJ1bnN1cHBvcnRlZCB0cmFuc21pc3Npb24gcmF0ZSIpOworCSAgICB9Cisj ZW5kaWYgLyogTk9MT0NBTCAqLworCSAgICBicmVhazsKKworI2lmbmRlZiBOT0RJQUwKKyNpZm5k ZWYgTk9JQ1AKKwkgIGNhc2UgJ20nOgkJCS8qIE1vZGVtIHR5cGUgKi8KKwkgICAgaWYgKCooeHAr MSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVyIC1tIik7CisJ ICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgq Knhhcmd2ID09ICctJykpIHsKKwkJWEZBVEFMKCJtb2RlbSB0eXBlIG1pc3NpbmciKTsKKwkgICAg fQorCSAgICB5ID0gbG9va3VwKG1kbXRhYiwqeGFyZ3Ysbm1kbSwmeik7CisJICAgIGlmICh5IDwg MCkgeworCQlYRkFUQUwoInVua25vd24gbW9kZW0gdHlwZSIpOworCSAgICB9CisJICAgIHVzZXJt ZG0gPSAwOworCSAgICB1c2VybWRtID0gKHkgPT0gZGlhbHVkdCkgPyB4IDogMDsKKwkgICAgaW5p dG1kbSh5KTsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTk9JQ1AgKi8KKyNlbmRpZiAvKiBOT0RJ QUwgKi8KKworI2lmbmRlZiBOT1hGRVIKKwkgIGNhc2UgJ2UnOgkJCS8qIEV4dGVuZGVkIHBhY2tl dCBsZW5ndGggKi8KKwkgICAgaWYgKCooeHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3Vt ZW50IGJ1bmRsaW5nIGFmdGVyIC1lIik7CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsK KwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKKwkJWEZBVEFMKCJt aXNzaW5nIGxlbmd0aCIpOworCSAgICB9CisJICAgIHogPSBhdG9pKCp4YXJndik7CQkvKiBDb252 ZXJ0IHRvIG51bWJlciAqLworCSAgICBpZiAoeiA+IDEwICYmIHogPD0gbWF4cnBzKSB7CisJCXJw c2l6ID0gdXJwc2l6ID0gejsKKwkJaWYgKHogPiA5NCkgcnBzaXogPSA5NDsJLyogRmFsbGJhY2sg aWYgb3RoZXIgS2VybWl0IGNhbid0ICovCisJICAgIH0gZWxzZSB7CisJCVhGQVRBTCgiVW5zdXBw b3J0ZWQgcGFja2V0IGxlbmd0aCIpOworCSAgICB9CisJICAgIGJyZWFrOworCisJICBjYXNlICd2 JzoJCQkvKiBWaW5kb3cgc2l6ZSAqLworCSAgICBpZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImlu dmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKwkgICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0t OworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworCQlYRkFUQUwo Im1pc3Npbmcgb3IgYmFkIHdpbmRvdyBzaXplIik7CisJICAgIH0KKwkgICAgeiA9IGF0b2koKnhh cmd2KTsJCS8qIENvbnZlcnQgdG8gbnVtYmVyICovCisJICAgIGlmICh6IDwgMzIpIHsJCS8qIElm IGluIHJhbmdlICovCisJCXdzbG90ciA9IHo7CQkvKiBzZXQgaXQgKi8KKwkJaWYgKHogPiAxKSBz d2NhcHIgPSAxOwkvKiBTZXQgY2FwYXMgYml0IGlmIHdpbmRvd2luZyAqLworCSAgICB9IGVsc2Ug eworCQlYRkFUQUwoIlVuc3VwcG9ydGVkIHBhY2tldCBsZW5ndGgiKTsKKwkgICAgfQorCSAgICBi cmVhazsKKyNlbmRpZiAvKiBOT1hGRVIgKi8KKworCSAgY2FzZSAnaSc6CQkJLyogVHJlYXQgZmls ZXMgYXMgYmluYXJ5ICovCisJICAgIGJpbmFyeSA9IFhZRlRfQjsKKwkgICAgeGZlcm1vZGUgPSBY TU9ERV9NOwkJLyogVHJhbnNmZXIgbW9kZSBtYW51YWwgKi8KKwkgICAgZmlsZXBlZWsgPSAwOwor I2lmZGVmIFBBVFRFUk5TCisJICAgIHBhdHRlcm5zID0gMDsKKyNlbmRpZiAvKiBQQVRURVJOUyAq LworCSAgICBicmVhazsKKworI2lmbmRlZiBOT1hGRVIKKwkgIGNhc2UgJ3cnOgkJCS8qIFdyaXRl b3ZlciAqLworCSAgICBja3dhcm4gPSAwOworCSAgICBmbmNhY3QgPSBYWUZYX1g7CisJICAgIGJy ZWFrOworI2VuZGlmIC8qIE5PWEZFUiAqLworCisJICBjYXNlICdxJzoJCQkvKiBRdWlldCAqLwor CSAgICBxdWlldCA9IDE7CisJICAgIGJyZWFrOworCisjaWZkZWYgREVCVUcKKwkgIGNhc2UgJ2Qn OgkJCS8qIERFQlVHICovCisJICAgIGJyZWFrOwkJCS8qIEhhbmRsZWQgaW4gcHJlc2NhbigpICov CisjZW5kaWYgLyogREVCVUcgKi8KKworCSAgY2FzZSAnMCc6IHsJCQkvKiBJbiB0aGUgbWlkZGxl ICovCisJICAgICAgZXh0ZXJuIGludCB0dF9lc2NhcGUsIGxzY2FwcjsKKwkgICAgICB0dF9lc2Nh cGUgPSAwOwkJLyogTm8gZXNjYXBlIGNoYXJhY3RlciAqLworCSAgICAgIGZsb3cgPSAwOwkJCS8q IE5vIFhvbi9Yb2ZmICh3aGF0IGFib3V0IGh3ZmM/KSAqLworI2lmbmRlZiBOT1hGRVIKKwkgICAg ICBsc2NhcHIgPSAwOwkJLyogTm8gbG9ja2luZyBzaGlmdHMgKi8KKyNlbmRpZiAvKiBOT1hGRVIg Ki8KKyNpZmRlZiBDS19BUEMKKwkgICAgICB7CisJCSAgZXh0ZXJuIGludCBhcGNzdGF0dXM7CS8q IE5vIEFQQ3MgKi8KKwkJICBhcGNzdGF0dXMgPSBBUENfT0ZGOworCSAgICAgIH0KKyNlbmRpZiAv KiBDS19BUEMgKi8KKyNpZm5kZWYgTk9MT0NBTAorI2lmZGVmIENLX0FVVE9ETAorICAgICAgICAg ICAgICBzZXRhdXRvZGwoMCwwKTsJCS8qIE5vIGF1dG9kb3dubG9hZCAqLworI2VuZGlmIC8qIENL X0FVVE9ETCAqLworI2VuZGlmIC8qIE5PTE9DQUwgKi8KKyNpZm5kZWYgTk9DU0VUUworCSAgICAg IHsKKwkJICBleHRlcm4gaW50IHRjc3IsIHRjc2w7IC8qIE5vIGNoYXJhY3Rlci1zZXQgdHJhbnNs YXRpb24gKi8KKwkJICB0Y3NyID0gMDsKKwkJICB0Y3NsID0gdGNzcjsJCS8qIE1ha2UgdGhlc2Ug ZXF1YWwgKi8KKwkgICAgICB9CisjZW5kaWYgLyogTk9DU0VUUyAqLworI2lmZGVmIFROQ09ERQor CSAgICAgIFRFTE9QVF9ERUZfQ19VX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19SRjsKKwkg ICAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JGOworCSAg ICAgIFRFTE9QVF9ERUZfU19VX01PREUoVEVMT1BUX0tFUk1JVCkgPSBUTl9OR19SRjsKKwkgICAg ICBURUxPUFRfREVGX1NfTUVfTU9ERShURUxPUFRfS0VSTUlUKSA9IFROX05HX1JGOworI2VuZGlm IC8qIFROQ09ERSAqLworCSAgfQorLyogRmFsbCB0aHJ1Li4uICovCisKKwkgIGNhc2UgJzgnOgkJ CS8qIDgtYml0IGNsZWFuICovCisJICAgIHBhcml0eSA9IDA7CisJICAgIGNtZG1zayA9IDB4ZmY7 CisJICAgIGNtYXNrID0gMHhmZjsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ1YnOiB7CisJICAg ICAgZXh0ZXJuIGludCB4ZmVybW9kZTsKKyNpZmRlZiBQQVRURVJOUworCSAgICAgIGV4dGVybiBp bnQgcGF0dGVybnM7CisJICAgICAgcGF0dGVybnMgPSAwOwkJLyogTm8gcGF0dGVybnMgKi8KKyNl bmRpZiAvKiBQQVRURVJOUyAqLworCSAgICAgIHhmZXJtb2RlID0gWE1PREVfTTsJLyogTWFudWFs IHRyYW5zZmVyIG1vZGUgKi8KKwkgICAgICBmaWxlcGVlayA9IDA7CisJICAgICAgYnJlYWs7CisJ ICB9CisKKwkgIGNhc2UgJ3AnOgkJCS8qIFNFVCBQQVJJVFkgKi8KKwkgICAgaWYgKCooeHArMSkp IHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisJICAgIH0KKwkgICAg eGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICct JykpIHsKKwkJWEZBVEFMKCJtaXNzaW5nIHBhcml0eSIpOworCSAgICB9CisJICAgIHN3aXRjaCh4 ID0gKip4YXJndikgeworCSAgICAgIGNhc2UgJ2UnOgorCSAgICAgIGNhc2UgJ28nOgorCSAgICAg IGNhc2UgJ20nOgorCSAgICAgIGNhc2UgJ3MnOiBwYXJpdHkgPSB4OyBicmVhazsKKwkgICAgICBj YXNlICduJzogcGFyaXR5ID0gMDsgYnJlYWs7CisJICAgICAgZGVmYXVsdDogIHsgWEZBVEFMKCJp bnZhbGlkIHBhcml0eSIpOyB9CisJICAgIH0KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ3QnOgkJ CS8qIExpbmUgdHVybmFyb3VuZCBoYW5kc2hha2UgKi8KKwkgICAgdHVybiA9IDE7CisJICAgIHR1 cm5jaCA9IFhPTjsJCS8qIFhPTiBpcyB0dXJuYXJvdW5kIGNoYXJhY3RlciAqLworCSAgICBkdXBs ZXggPSAxOwkJCS8qIEhhbGYgZHVwbGV4ICovCisJICAgIGZsb3cgPSAwOwkJCS8qIE5vIGZsb3cg Y29udHJvbCAqLworCSAgICBicmVhazsKKworCSAgY2FzZSAnQic6CisJICAgIGJnc2V0ID0gMTsJ CQkvKiBGb3JjZSBiYWNrZ3JvdW5kIChiYXRjaCkgKi8KKwkgICAgYmFja2dyZCA9IDE7CisJICAg IGJyZWFrOworCisJICBjYXNlICd6JzoJCQkvKiBGb3JjZSBmb3JlZ3JvdW5kICovCisJICAgIGJn c2V0ID0gMDsKKwkgICAgYmFja2dyZCA9IDA7CisJICAgIGJyZWFrOworCisjaWZuZGVmIE5PWEZF UgorI2lmZGVmIFJFQ1VSU0lWRQorCSAgY2FzZSAnTCc6CisJICAgIHJlY3Vyc2l2ZSA9IDI7CisJ ICAgIG5vbGlua3MgPSAyOworCSAgICBmbnNwYXRoID0gUEFUSF9SRUw7CisJICAgIGJyZWFrOwor I2VuZGlmIC8qIFJFQ1VSU0lWRSAqLworI2VuZGlmIC8qIE5PWEZFUiAqLworCisjaWZuZGVmIE5P U1BMCisJICBjYXNlICdNJzoJCQkvKiBNeSBVc2VyIE5hbWUgKi8KKwkgICAgaWYgKCooeHArMSkp IHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisJICAgIH0KKwkgICAg eGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICct JykpIHsKKwkJWEZBVEFMKCJtaXNzaW5nIHVzZXJuYW1lIik7CisJICAgIH0KKwkgICAgaWYgKChp bnQpc3RybGVuKCp4YXJndikgPiA2MykgeworCQlYRkFUQUwoInVzZXJuYW1lIHRvbyBsb25nIik7 CisJICAgIH0KKyNpZmRlZiBJS1NECisJICAgIGlmICghaW5zZXJ2ZXIpCisjZW5kaWYgLyogSUtT RCAqLworCSAgICAgIHsKKwkJICBja3N0cm5jcHkodWlkYnVmLCp4YXJndixVSURCVUZMRU4pOwor CQkgIGhhdmVmdHB1aWQgPSAxOworCSAgICAgIH0KKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTk9T UEwgKi8KKworI2lmZGVmIENLX05FVEJJT1MKKwkgIGNhc2UgJ04nOgkJCS8qIE5ldEJpb3MgQWRh cHRlciBOdW1iZXIgZm9sbG93cyAqLworCSAgICBpZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImlu dmFsaWQgYXJndW1lbnQgYnVuZGxpbmcgYWZ0ZXIgLU4iKTsKKwkgICAgfQorCSAgICB4YXJndisr LCB4YXJnYy0tOworCSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgewor CQlYRkFUQUwoIm1pc3NpbmcgTmV0QmlvcyBBZGFwdGVyIG51bWJlciIpOworCSAgICB9CisJICAg IGlmICgoc3RybGVuKCp4YXJndikgIT0gMSkgfHwKKwkJKCp4YXJndilbMF0gIT0gJ1gnICYmCisJ CShhdG9pKCp4YXJndikgPCAwKSAmJgorCQkoYXRvaSgqeGFyZ3YpID4gOSkpIHsKKwkJWEZBVEFM KCJJbnZhbGlkIE5ldEJpb3MgQWRhcHRlciAtIEFkYXB0ZXJzIDAgdG8gOSBhcmUgdmFsaWQiKTsK KwkgICAgfQorCSAgICBicmVhazsKKyNlbmRpZiAvKiBDS19ORVRCSU9TICovCisKKyNpZmRlZiBO RVRDT05OCisJICBjYXNlICdGJzoKKwkgICAgbmV0d29yayA9IDE7CisJICAgIGlmICgqKHhwKzEp KSB7CisJCVhGQVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtRiIpOworCSAg ICB9CisJICAgIHhhcmd2KyssIHhhcmdjLS07CisJICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4 YXJndiA9PSAnLScpKSB7CisJCVhGQVRBTCgibmV0d29yayBmaWxlIGRlc2NyaXB0b3IgbWlzc2lu ZyIpOworCSAgICB9CisJICAgIGNrc3RybmNweSh0dG5hbWUsKnhhcmd2LFRUTkFNTEVOKzEpOwor CSAgICBuZXR0eXBlID0gTkVUX1RDUEI7CisJICAgIG1kbXR5cCA9IC1uZXR0eXBlOworCSAgICB0 ZWxuZXRmZCA9IDE7CisJICAgIGxvY2FsID0gMTsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogTkVU Q09OTiAqLworCisjaWZkZWYgQ09NTUVOVAorI2lmZGVmIE9TMlBNCisJICBjYXNlICdQJzoJCQkv KiBPUy8yIFByZXNlbnRhdGlvbiBNYW5hZ2VyICovCisJICAgIGlmICgqKHhwKzEpKSB7CisJCVhG QVRBTCgiaW52YWxpZCBhcmd1bWVudCBidW5kbGluZyBhZnRlciAtUCIpOworCSAgICB9CisJICAg IHhhcmd2KyssIHhhcmdjLS07CisJICAgIGlmICgoeGFyZ2MgPCAxKSB8fCAoKip4YXJndiA9PSAn LScpKSB7CisJCVhGQVRBTCgicGlwZSBkYXRhIG1pc3NpbmciKTsKKwkgICAgfQorCSAgICBwaXBl ZGF0YSA9ICp4YXJndjsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogT1MyUE0gKi8KKyNlbHNlCisJ ICBjYXNlICdQJzoJCQkvKiBGaWxlbmFtZXMgbGl0ZXJhbCAqLworCSAgICBmbmNudiAgPSBYWUZO X0w7CisJICAgIGZfc2F2ZSA9IFhZRk5fTDsKKwkgICAgYnJlYWs7CisjZW5kaWYgLyogQ09NTUVO VCAqLworCisjaWZuZGVmIE5PSUNQCisJICBjYXNlICdIJzoKKwkgICAgbm9oZXJhbGQgPSAxOwor CSAgICBicmVhazsKKyNlbmRpZiAvKiBOT0lDUCAqLworCisjaWZkZWYgT1MyCisJICBjYXNlICdX JzoKKwkgICAgaWYgKCooeHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRs aW5nIGFmdGVyIC1XIik7CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYg KCh4YXJnYyA8IDEpKSB7IC8qIGNvdWxkIGJlIG5lZ2F0aXZlICovCisJCVhGQVRBTCgiV2luZG93 IGhhbmRsZSBtaXNzaW5nIik7CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAg aWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsKKwkJWEZBVEFMKCJLZXJtaXQg SW5zdGFuY2UgbWlzc2luZyIpOworCSAgICB9CisJICAgIC8qIEFjdGlvbiBkb25lIGluIHByZXNj YW4gKi8KKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyMnOgkJCS8qIEs5NSBzdGRpbyB0aHJlYWRz ICovCisJICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJndW1lbnQgKi8KKwkg ICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLworI2VuZGlmIC8qIE9TMiAq LworCisjaWZkZWYgTkVXRlRQCisJICBjYXNlICc5JzoJCQkvKiBGVFAgKi8KKwkgICAgaWYgKCoo eHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIGFmdGVyIC05Iik7 CisJICAgIH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8 ICgqKnhhcmd2ID09ICctJykpIHsKKwkJWEZBVEFMKCJGVFAgc2VydmVyIGFkZHJlc3MgbWlzc2lu ZyIpOworCSAgICB9CisJICAgIG1ha2VzdHIoJmZ0cF9ob3N0LCp4YXJndik7CisJICAgIGJyZWFr OworI2VuZGlmIC8qIE5FV0ZUUCAqLworCisJICBkZWZhdWx0OgorCSAgICBmYXRhbDIoKnhhcmd2 LAorI2lmZGVmIE5UCisgICAgICAgICAgICAgICAgICAgImludmFsaWQgY29tbWFuZC1saW5lIG9w dGlvbiwgdHlwZSBcIms5NSAtaFwiIGZvciBoZWxwIgorI2Vsc2UKKyNpZmRlZiBPUzIKKyAgICAg ICAgICAgICAgICAgICAiaW52YWxpZCBjb21tYW5kLWxpbmUgb3B0aW9uLCB0eXBlIFwiazIgLWhc IiBmb3IgaGVscCIKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgImludmFsaWQgY29tbWFuZC1s aW5lIG9wdGlvbiwgdHlwZSBcImtlcm1pdCAtaFwiIGZvciBoZWxwIgorI2VuZGlmIC8qIE9TMiAq LworI2VuZGlmIC8qIE5UICovCisJCSAgICk7CisgICAgICAgIH0KKwlpZiAoIXhwKSBicmVhazsK Kwl4ID0gKisreHA7CQkJLyogU2VlIGlmIG9wdGlvbnMgYXJlIGJ1bmRsZWQgKi8KKyAgICB9Cisg ICAgcmV0dXJuKDApOworfQorCisjaWZkZWYgVE5DT0RFCisvKiAgRCBPIFQgTiBBIFIgRyAgLS0g IERvIGEgdGVsbmV0IGNvbW1hbmQtbGluZSBhcmd1bWVudC4gICovCisKK3N0YXRpYyBpbnQKKyNp ZmRlZiBDS19BTlNJQworZG90bmFyZyhjaGFyIHgpCisjZWxzZQorZG90bmFyZyh4KSBjaGFyIHg7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKy8qIGRvdG5hcmcgKi8geworICAgIGNoYXIgKnhwOwor CisgICAgeHAgPSAqeGFyZ3YrMTsgICAgICAgICAgICAgICAgICAgICAgLyogUG9pbnRlciBmb3Ig YnVuZGxlZCBhcmdzICovCisgICAgZGVidWcoRjExMSwiZG90bmFyZyBlbnRyeSIseHAseGFyZ2Mp OworICAgIHdoaWxlICh4KSB7CisgICAgICAgIGRlYnVnKEYwMDAsImRvdG5hcmcgYXJnIiwiIix4 KTsKKyAgICAgICAgc3dpdGNoICh4KSB7ICAgICAgICAgICAgICAgICAgICAvKiBCaWcgc3dpdGNo IG9uIGFyZyAqLworCisjaWZuZGVmIENPTU1FTlQKKwkgIGNhc2UgJy0nOgkJCS8qIEV4dGVuZGVk IGNvbW1hbmRzLi4uICovCisgICAgICAgICAgICBpZiAoZG94YXJnKHhhcmd2LDApIDwgMCkgewor ICAgICAgICAgICAgICAgIFhGQVRBTCgiRXh0ZW5kZWQgb3B0aW9uIGVycm9yIik7CisgICAgICAg ICAgICB9IC8qIEZ1bGwgdGhydS4uLiAqLworCSAgY2FzZSAnKyc6CQkJLyogRXh0ZW5kZWQgY29t bWFuZCBmb3IgcHJlc2NhbigpICovCisgICAgICAgICAgICByZXR1cm4oMCk7CisjZWxzZSAgLyog Q09NTUVOVCAqLworCSAgY2FzZSAnLSc6CisJICBjYXNlICcrJzoKKwkgICAgWEZBVEFMKCJFeHRl bmRlZCBvcHRpb25zIG5vdCBjb25maWd1cmVkIik7CisjZW5kaWYgLyogQ09NTUVOVCAqLworCisv KgorICogLSMgICAgICAgICAgICAgICAgS2VybWl0IDk1IFN0YXJ0dXAgRmxhZ3MKKyAqIC04ICAg ICAgICAgICAgICAgIE5lZ290aWF0ZSBUZWxuZXQgQmluYXJ5IGluIGJvdGggZGlyZWN0aW9ucwor ICogLWEgICAgICAgICAgICAgICAgUmVxdWlyZSB1c2Ugb2YgVGVsbmV0IGF1dGhlbnRpY2F0aW9u CisgKiAtYyAgICAgICAgICAgICAgICBEbyBub3QgcmVhZCB0aGUgLnRlbG5ldHJjIGZpbGUKKyAq IC1kICAgICAgICAgICAgICAgIFR1cm4gb24gZGVidWcgbW9kZQorICogLUUgICAgICAgICAgICAg ICAgTm8gZXNjYXBlIGNoYXJhY3RlcgorICogLWYgICAgICAgICAgICAgICAgRm9yd2FyZCBjcmVk ZW50aWFscyB0byBob3N0CisgKiAtSyAgICAgICAgICAgICAgICBSZWZ1c2UgdXNlIG9mIGF1dGhl bnRpY2F0aW9uOyBkbyBub3Qgc2VuZCB1c2VybmFtZQorICogLWsgcmVhbG0gICAgICAgICAgU2V0 IGRlZmF1bHQgcmVhbG0KKyAqIC1sIHVzZXIgICAgICAgICAgIFNldCB1c2VybmFtZSBhbmQgcmVx dWVzdCBUZWxuZXQgYXV0aGVudGljYXRpb24KKyAqIC1MICAgICAgICAgICAgICAgIE5lZ290aWF0 ZSBUZWxuZXQgQmluYXJ5IE91dHB1dCBvbmx5CisgKiAtcSAgICAgICAgICAgICAgICBRdWlldCBt b2RlIChzdXBwcmVzcyBtZXNzYWdlcykKKyAqIC1TIHRvcyAgICAgICAgICAgIFVzZSB0aGUgSVAg dHlwZS1vZi1zZXJ2aWNlIHRvcworICogLXggICAgICAgICAgICAgICAgUmVxdWlyZSBFbmNyeXB0 aW9uCisgKiAtRCAgICAgICAgICAgICAgICBEaXNhYmxlIGZvcndhcmQtWAorICogLVQgY2VydD1m aWxlICAgICAgVXNlIGNlcnRpZmljYXRlIGluIGZpbGUKKyAqIC1UIGtleT1maWxlICAgICAgIFVz ZSBwcml2YXRlIGtleSBpbiBmaWxlCisgKiAtVCBjcmxmaWxlPWZpbGUgICBVc2UgQ1JMIGluIGZp bGUKKyAqIC1UIGNybGRpcj1kaXIgICAgIFVzZSBDUkxzIGluIGRpcmVjdG9yeQorICogLVQgY2lw aGVyPXN0cmluZyAgVXNlIG9ubHkgY2lwaGVycyBpbiBzdHJpbmcKKyAqIC1YIGF0eXBlICAgICAg ICAgIERpc2FibGUgdXNlIG9mIGF0eXBlIGF1dGhlbnRpY2F0aW9uCisgKiAtWSAgICAgICAgICAg ICAgICBEaXNhYmxlIGluaXQgZmlsZSBwcm9jZXNzaW5nCisgKgorICovCisJICBjYXNlICdoJzoJ CQkvKiBoZWxwICovCisJICAgIHVzYWdlKCk7CisJICAgIGRvZXhpdChHT09EX0VYSVQsLTEpOwor CSAgICBicmVhazsKKworCSAgY2FzZSAnOCc6CQkJLyogVGVsbmV0IEJpbmFyeSBpbiBib3RoIGRp cmVjdGlvbnMgKi8KKwkgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfQklOQVJZKSA9IFRO X05HX01VOworCSAgICBURUxPUFRfREVGX0NfTUVfTU9ERShURUxPUFRfQklOQVJZKSA9IFROX05H X01VOworCSAgICBwYXJpdHkgPSAwOworCSAgICBjbWRtc2sgPSAweGZmOworCSAgICBjbWFzayA9 IDB4ZmY7CisJICAgIGJyZWFrOworCisJICBjYXNlICdhJzoJCQkvKiBSZXF1aXJlIFRlbG5ldCBB dXRoICovCisJICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikg PSBUTl9OR19NVTsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJ1knOgorCSAgICB4YXJndisrLCB4 YXJnYy0tOwkJLyogU2tpcCBwYXN0IGFyZ3VtZW50ICovCisJICAgIGJyZWFrOwkJCS8qIEFjdGlv biBkb25lIGluIHByZXNjYW4gKi8KKworI2lmZGVmIE9TMgorICAgICAgICAgIGNhc2UgJyMnOgkJ CS8qIEs5NSBzdGRpbyB0aHJlYWRzICovCisJICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lw IHBhc3QgYXJndW1lbnQgKi8KKwkgICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2Nh biAqLworI2VuZGlmIC8qIE9TMiAqLworCisgICAgICAgICAgY2FzZSAncSc6CSAgICAgICAgICAg ICAgICAvKiBRdWlldCAqLworCSAgICBxdWlldCA9IDE7CisJICAgIGJyZWFrOworCisJICBjYXNl ICdkJzoKKyNpZmRlZiBERUJVRworCSAgICBpZiAoZGVibG9nKSB7CisJCWRlYnRpbSA9IDE7CisJ ICAgIH0gZWxzZSB7CisJCWRlYmxvZyA9IGRlYm9wbigiZGVidWcubG9nIiwwKTsKKwkgICAgfQor I2VuZGlmIC8qIERFQlVHICovCisJICAgIGJyZWFrOworCisJICBjYXNlICdFJzogewkJCS8qIE5v IEVzY2FwZSBjaGFyYWN0ZXIgKi8KKwkgICAgICBleHRlcm4gaW50IHR0X2VzY2FwZTsKKwkgICAg ICB0dF9lc2NhcGUgPSAwOworCSAgfQorCSAgICBicmVhazsKKworCSAgY2FzZSAnSyc6CisJICAg IFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9BVVRIRU5USUNBVElPTikgPSBUTl9OR19SRjsK KwkgICAgdWlkYnVmWzBdID0gTlVMOworCSAgICBicmVhazsKKworCSAgY2FzZSAnbCc6IC8qIFNl dCB1c2VybmFtZSBhbmQgcmVxdWVzdCB0ZWxuZXQgYXV0aGVudGljYXRpb24gKi8KKwkgICAgaWYg KCooeHArMSkpIHsKKwkJWEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisJICAg IH0KKwkgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhh cmd2ID09ICctJykpIHsKKwkJWEZBVEFMKCJtaXNzaW5nIHVzZXJuYW1lIik7CisJICAgIH0KKwkg ICAgaWYgKChpbnQpc3RybGVuKCp4YXJndikgPiA2MykgeworCQlYRkFUQUwoInVzZXJuYW1lIHRv byBsb25nIik7CisJICAgIH0KKwkgICAgY2tzdHJuY3B5KHVpZGJ1ZiwqeGFyZ3YsVUlEQlVGTEVO KTsKKwkgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0FVVEhFTlRJQ0FUSU9OKSA9IFRO X05HX01VOworCSAgICBicmVhazsKKworCSAgY2FzZSAnTCc6CQkJLyogUmVxdWlyZSBCSU5BUlkg bW9kZSBvdXRib3VuZCBvbmx5ICovCisJICAgIFRFTE9QVF9ERUZfQ19NRV9NT0RFKFRFTE9QVF9C SU5BUlkpID0gVE5fTkdfTVU7CisJICAgIGJyZWFrOworCisJICBjYXNlICd4JzoJCQkvKiBSZXF1 aXJlIEVuY3J5cHRpb24gKi8KKwkgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRfRU5DUllQ VElPTikgPSBUTl9OR19NVTsKKwkgICAgVEVMT1BUX0RFRl9DX01FX01PREUoVEVMT1BUX0VOQ1JZ UFRJT04pID0gVE5fTkdfTVU7CisJICAgIGJyZWFrOworCisJICBjYXNlICdEJzoJCQkvKiBEaXNh YmxlIHVzZSBvZiBGb3J3YXJkIFggKi8KKwkgICAgVEVMT1BUX0RFRl9DX1VfTU9ERShURUxPUFRf Rk9SV0FSRF9YKSA9IFROX05HX1JGOworCSAgICBicmVhazsKKworCSAgY2FzZSAnZic6CQkJLyog Rm9yd2FyZCBjcmVkZW50aWFscyB0byBob3N0ICovCisJICAgIHsKKyNpZmRlZiBDS19BVVRIRU5U SUNBVElPTgorCQlleHRlcm4gaW50IGZvcndhcmRfZmxhZzsKKwkJZm9yd2FyZF9mbGFnID0gMTsK KyNlbmRpZgorCQlicmVhazsKKwkgICAgfQorCisJICBjYXNlICdrJzogeworI2lmZGVmIENLX0tF UkJFUk9TCisJICAgICAgZXh0ZXJuIGNoYXIgKiBrcmI1X2RfcmVhbG0sICoga3JiNF9kX3JlYWxt OworI2VuZGlmIC8qIENLX0tFUkJFUk9TICovCisJICAgICAgaWYgKCooeHArMSkpIHsKKwkJICBY RkFUQUwoImludmFsaWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKwkgICAgICB9CisJICAgICAgeGFy Z3YrKywgeGFyZ2MtLTsKKwkgICAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0n KSkgeworCQkgIFhGQVRBTCgibWlzc2luZyByZWFsbSIpOworCSAgICAgIH0KKyNpZmRlZiBDS19L RVJCRVJPUworCSAgICAgIGlmICgoaW50KXN0cmxlbigqeGFyZ3YpID4gNjMpIHsKKwkJICBYRkFU QUwoInJlYWxtIHRvbyBsb25nIik7CisJICAgICAgfQorCSAgICAgIG1ha2VzdHIoJmtyYjVfZF9y ZWFsbSwqeGFyZ3YpOworCSAgICAgIG1ha2VzdHIoJmtyYjRfZF9yZWFsbSwqeGFyZ3YpOworI2Vu ZGlmIC8qIENLX0tFUkJFUk9TICovCisJICAgICAgYnJlYWs7CisJICB9CisKKwkgIGNhc2UgJ1Qn OiB7CisJICAgICAgaWYgKCooeHArMSkpIHsKKwkJICBYRkFUQUwoImludmFsaWQgYXJndW1lbnQg YnVuZGxpbmciKTsKKwkgICAgICB9CisJICAgICAgeGFyZ3YrKywgeGFyZ2MtLTsKKwkgICAgICBp ZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworCQkgIFhGQVRBTCgibWlzc2lu ZyBjZXJ0PSwga2V5PSwgY3JsZmlsZT0sIGNybGRpcj0sIG9yIGNpcGhlcj0iKTsKKwkgICAgICB9 CisjaWZkZWYgQ0tfU1NMCisJICAgICAgaWYgKCFzdHJuY21wKCp4YXJndiwiY2VydD0iLDUpKSB7 CisJCSAgZXh0ZXJuIGNoYXIgKiBzc2xfcnNhX2NlcnRfZmlsZTsKKwkJICBtYWtlc3RyKCZzc2xf cnNhX2NlcnRfZmlsZSwmKCp4YXJndls1XSkpOworCSAgICAgIH0gZWxzZSBpZiAoICFzdHJuY21w KCp4YXJndiwia2V5PSIsNCkgKSB7CisJCSAgZXh0ZXJuIGNoYXIgKiBzc2xfcnNhX2tleV9maWxl OworCQkgIG1ha2VzdHIoJnNzbF9yc2Ffa2V5X2ZpbGUsJigqeGFyZ3ZbNF0pKTsKKwkgICAgICB9 IGVsc2UgaWYgKCAhc3RybmNtcCgqeGFyZ3YsImNybGZpbGU9Iiw4KSApIHsKKwkJICBleHRlcm4g Y2hhciAqIHNzbF9jcmxfZmlsZTsKKwkJICBtYWtlc3RyKCZzc2xfY3JsX2ZpbGUsJigqeGFyZ3Zb OF0pKTsKKwkgICAgICB9IGVsc2UgaWYgKCAhc3RybmNtcCgqeGFyZ3YsImNybGRpcj0iLDcpICkg eworCQkgIGV4dGVybiBjaGFyICogc3NsX2NybF9kaXI7CisJCSAgbWFrZXN0cigmc3NsX2NybF9k aXIsJigqeGFyZ3ZbN10pKTsKKwkgICAgICB9IGVsc2UgaWYgKCAhc3RybmNtcCgqeGFyZ3YsImNp cGhlcj0iLDcpICkgeworCQkgIGV4dGVybiBjaGFyICogc3NsX2NpcGhlcl9saXN0OworCQkgIG1h a2VzdHIoJnNzbF9jaXBoZXJfbGlzdCwmKCp4YXJndls3XSkpOworCSAgICAgIH0gZWxzZSB7CisJ CSAgWEZBVEFMKCJpbnZhbGlkIHBhcmFtZXRlciIpOworCSAgICAgIH0KKyNlbmRpZiAvKiBDS19T U0wgKi8KKwkgICAgICBicmVhazsKKwkgIH0KKworCSAgZGVmYXVsdDoKKwkgICAgZmF0YWwyKCp4 YXJndiwKKwkJICAgImludmFsaWQgY29tbWFuZC1saW5lIG9wdGlvbiwgdHlwZSBcInRlbG5ldCAt aFwiIGZvciBoZWxwIgorCQkgICApOworICAgICAgICB9CisKKwlpZiAoIXhwKSBicmVhazsKKwl4 ID0gKisreHA7CQkJLyogU2VlIGlmIG9wdGlvbnMgYXJlIGJ1bmRsZWQgKi8KKyAgICB9CisgICAg cmV0dXJuKDApOworfQorI2VuZGlmIC8qIFROQ09ERSAqLworCisjaWZkZWYgUkxPR0NPREUKKwor LyogIEQgTyBSIEwgRyBBIFIgRyAgLS0gIERvIGEgcmxvZ2luIGNvbW1hbmQtbGluZSBhcmd1bWVu dC4gICovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBDS19BTlNJQworZG9ybGdhcmcoY2hhciB4KQor I2Vsc2UKK2RvcmxnYXJnKHgpIGNoYXIgeDsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworLyogZG9y bGdhcmcgKi8geworICAgIGNoYXIgKnhwOworCisgICAgeHAgPSAqeGFyZ3YrMTsgICAgICAgICAg ICAgICAgICAgICAgLyogUG9pbnRlciBmb3IgYnVuZGxlZCBhcmdzICovCisgICAgZGVidWcoRjEx MSwiZG9ybGdhcmcgZW50cnkiLHhwLHhhcmdjKTsKKyAgICB3aGlsZSAoeCkgeworICAgICAgICBk ZWJ1ZyhGMDAwLCJkb3JsZ2FyZyBhcmciLCIiLHgpOworICAgICAgICBzd2l0Y2ggKHgpIHsgICAg ICAgICAgICAgICAgICAgIC8qIEJpZyBzd2l0Y2ggb24gYXJnICovCisKKyNpZm5kZWYgQ09NTUVO VAorCSAgY2FzZSAnLSc6CQkJLyogRXh0ZW5kZWQgY29tbWFuZHMuLi4gKi8KKyAgICAgICAgICAg IGlmIChkb3hhcmcoeGFyZ3YsMCkgPCAwKSB7CisgICAgICAgICAgICBYRkFUQUwoIkV4dGVuZGVk IG9wdGlvbiBlcnJvciIpOworICAgICAgICAgICAgfSAvKiBGdWxsIHRocnUuLi4gKi8KKwkgIGNh c2UgJysnOgkJCS8qIEV4dGVuZGVkIGNvbW1hbmQgZm9yIHByZXNjYW4oKSAqLworICAgICAgICAg ICAgcmV0dXJuKDApOworI2Vsc2UgIC8qIENPTU1FTlQgKi8KKwkgIGNhc2UgJy0nOgorCSAgY2Fz ZSAnKyc6CisJICAgIFhGQVRBTCgiRXh0ZW5kZWQgb3B0aW9ucyBub3QgY29uZmlndXJlZCIpOwor I2VuZGlmIC8qIENPTU1FTlQgKi8KKworLyoKKyAqIC1kICAgICAgICAgICAgICAgIERlYnVnCisg KiAtbCB1c2VyICAgICAgICAgICBTZXQgdXNlcm5hbWUKKyAqCisgKi8KKwkgIGNhc2UgJ2gnOgkJ CS8qIGhlbHAgKi8KKwkgICAgdXNhZ2UoKTsKKwkgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7CisJ ICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAnWSc6CisJICAgIHhhcmd2KyssIHhhcmdjLS07 CQkvKiBTa2lwIHBhc3QgYXJndW1lbnQgKi8KKwkgICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUg aW4gcHJlc2NhbiAqLworI2lmZGVmIE9TMgorICAgICAgICAgIGNhc2UgJyMnOgkJCS8qIEs5NSBz dGRpbyB0aHJlYWRzICovCisJICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJn dW1lbnQgKi8KKwkgICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLworI2Vu ZGlmIC8qIE9TMiAqLworICAgICAgICAgIGNhc2UgJ3EnOgkgICAgICAgICAgICAgICAgLyogUXVp ZXQgKi8KKwkgICAgcXVpZXQgPSAxOworCSAgICBicmVhazsKKworCSAgY2FzZSAnZCc6CisjaWZk ZWYgREVCVUcKKwkgICAgaWYgKGRlYmxvZykgeworCQlkZWJ0aW0gPSAxOworCSAgICB9IGVsc2Ug eworCQlkZWJsb2cgPSBkZWJvcG4oImRlYnVnLmxvZyIsMCk7CisJICAgIH0KKyNlbmRpZiAvKiBE RUJVRyAqLworCSAgICBicmVhazsKKworCSAgY2FzZSAnbCc6IC8qIFNldCB1c2VybmFtZSBhbmQg cmVxdWVzdCB0ZWxuZXQgYXV0aGVudGljYXRpb24gKi8KKwkgICAgaWYgKCooeHArMSkpIHsKKwkJ WEZBVEFMKCJpbnZhbGlkIGFyZ3VtZW50IGJ1bmRsaW5nIik7CisJICAgIH0KKwkgICAgeGFyZ3Yr KywgeGFyZ2MtLTsKKwkgICAgaWYgKCh4YXJnYyA8IDEpIHx8ICgqKnhhcmd2ID09ICctJykpIHsK KwkJWEZBVEFMKCJtaXNzaW5nIHVzZXJuYW1lIik7CisJICAgIH0KKwkgICAgaWYgKChpbnQpc3Ry bGVuKCp4YXJndikgPiA2MykgeworCQlYRkFUQUwoInVzZXJuYW1lIHRvbyBsb25nIik7CisJICAg IH0KKwkgICAgY2tzdHJuY3B5KHVpZGJ1ZiwqeGFyZ3YsVUlEQlVGTEVOKTsKKwkgICAgYnJlYWs7 CisKKwkgIGRlZmF1bHQ6CisJICAgIGZhdGFsMigqeGFyZ3YsCisJCSAgICJpbnZhbGlkIGNvbW1h bmQtbGluZSBvcHRpb24sIHR5cGUgXCJybG9naW4gLWhcIiBmb3IgaGVscCIKKwkJICAgKTsKKyAg ICAgICAgfQorCisJaWYgKCF4cCkgYnJlYWs7CisJeCA9ICorK3hwOwkJCS8qIFNlZSBpZiBvcHRp b25zIGFyZSBidW5kbGVkICovCisgICAgfQorICAgIHJldHVybigwKTsKK30KKyNlbmRpZiAvKiBS TE9HQ09ERSAqLworCisjaWZkZWYgU1NIQlVJTFRJTgorCisvKiAgRCBPIFMgUyBIIEEgUiBHICAt LSAgRG8gYSBzc2ggY29tbWFuZC1saW5lIGFyZ3VtZW50LiAgKi8KKworc3RhdGljIGludAorI2lm ZGVmIENLX0FOU0lDCitkb3NzaGFyZyhjaGFyIHgpCisjZWxzZQorZG9zc2hhcmcoeCkgY2hhciB4 OworI2VuZGlmIC8qIENLX0FOU0lDICovCisvKiBkb3NzaGFyZyAqLyB7CisgICAgY2hhciAqeHA7 CisKKyAgICB4cCA9ICp4YXJndisxOyAgICAgICAgICAgICAgICAgICAgICAvKiBQb2ludGVyIGZv ciBidW5kbGVkIGFyZ3MgKi8KKyAgICBkZWJ1ZyhGMTExLCJkb3NzaGFyZyBlbnRyeSIseHAseGFy Z2MpOworICAgIHdoaWxlICh4KSB7CisgICAgICAgIGRlYnVnKEYwMDAsImRvc3NoYXJnIGFyZyIs IiIseCk7CisgICAgICAgIHN3aXRjaCAoeCkgeyAgICAgICAgICAgICAgICAgICAgLyogQmlnIHN3 aXRjaCBvbiBhcmcgKi8KKworI2lmbmRlZiBDT01NRU5UCisJICBjYXNlICctJzoJCQkvKiBFeHRl bmRlZCBjb21tYW5kcy4uLiAqLworICAgICAgICAgICAgaWYgKGRveGFyZyh4YXJndiwwKSA8IDAp IHsKKyAgICAgICAgICAgICAgICBYRkFUQUwoIkV4dGVuZGVkIG9wdGlvbiBlcnJvciIpOworICAg ICAgICAgICAgfSAvKiBGdWxsIHRocnUuLi4gKi8KKwkgIGNhc2UgJysnOgkJCS8qIEV4dGVuZGVk IGNvbW1hbmQgZm9yIHByZXNjYW4oKSAqLworICAgICAgICAgICAgcmV0dXJuKDApOworI2Vsc2Ug IC8qIENPTU1FTlRQICovCisJICBjYXNlICctJzoKKwkgIGNhc2UgJysnOgorCSAgICBYRkFUQUwo IkV4dGVuZGVkIG9wdGlvbnMgbm90IGNvbmZpZ3VyZWQiKTsKKyNlbmRpZiAvKiBDT01NRU5UICov CisKKy8qCisgKiAtZCAgICAgICAgICAgICAgICBEZWJ1ZworICogLSMgYXJncyAgICAgICAgICAg SW5pdAorICogLVkgICAgICAgICAgICAgICAgbm8gaW5pdCBmaWxlCisgKiAtbCB1c2VyICAgICAg ICAgICBTZXQgdXNlcm5hbWUKKyAqCisgKi8KKwkgIGNhc2UgJ2gnOgkJCS8qIGhlbHAgKi8KKwkg ICAgdXNhZ2UoKTsKKwkgICAgZG9leGl0KEdPT0RfRVhJVCwtMSk7CisJICAgIGJyZWFrOworCisg ICAgICAgICAgY2FzZSAnWSc6CisJICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3Qg YXJndW1lbnQgKi8KKwkgICAgYnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLwor I2lmZGVmIE9TMgorICAgICAgICAgIGNhc2UgJyMnOgkJCS8qIEs5NSBzdGRpbyB0aHJlYWRzICov CisJICAgIHhhcmd2KyssIHhhcmdjLS07CQkvKiBTa2lwIHBhc3QgYXJndW1lbnQgKi8KKwkgICAg YnJlYWs7CQkJLyogQWN0aW9uIGRvbmUgaW4gcHJlc2NhbiAqLworI2VuZGlmIC8qIE9TMiAqLwor ICAgICAgICAgIGNhc2UgJ3EnOgkgICAgICAgICAgICAgICAgLyogUXVpZXQgKi8KKwkgICAgcXVp ZXQgPSAxOworCSAgICBicmVhazsKKworCSAgY2FzZSAnZCc6CisjaWZkZWYgREVCVUcKKyAgICAg ICAgICAgICAgaWYgKGRlYmxvZykgeworICAgICAgICAgICAgICAgICAgZGVidGltID0gMTsKKyAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGRlYmxvZyA9IGRlYm9wbigi ZGVidWcubG9nIiwwKTsKKyAgICAgICAgICAgICAgfQorI2VuZGlmIC8qIERFQlVHICovCisJICAg IGJyZWFrOworCisJICBjYXNlICdsJzogLyogU2V0IHVzZXJuYW1lIGFuZCByZXF1ZXN0IHRlbG5l dCBhdXRoZW50aWNhdGlvbiAqLworCSAgICBpZiAoKih4cCsxKSkgeworCQlYRkFUQUwoImludmFs aWQgYXJndW1lbnQgYnVuZGxpbmciKTsKKwkgICAgfQorCSAgICB4YXJndisrLCB4YXJnYy0tOwor CSAgICBpZiAoKHhhcmdjIDwgMSkgfHwgKCoqeGFyZ3YgPT0gJy0nKSkgeworCQlYRkFUQUwoIm1p c3NpbmcgdXNlcm5hbWUiKTsKKwkgICAgfQorCSAgICBpZiAoKGludClzdHJsZW4oKnhhcmd2KSA+ IDYzKSB7CisJCVhGQVRBTCgidXNlcm5hbWUgdG9vIGxvbmciKTsKKwkgICAgfQorCSAgICBja3N0 cm5jcHkodWlkYnVmLCp4YXJndixVSURCVUZMRU4pOworCSAgICBicmVhazsKKworCSAgZGVmYXVs dDoKKwkgICAgZmF0YWwyKCp4YXJndiwKKwkJICAgImludmFsaWQgY29tbWFuZC1saW5lIG9wdGlv biwgdHlwZSBcInNzaCAtaFwiIGZvciBoZWxwIgorCQkgICApOworICAgICAgICB9CisKKwlpZiAo IXhwKSBicmVhazsKKwl4ID0gKisreHA7CQkJLyogU2VlIGlmIG9wdGlvbnMgYXJlIGJ1bmRsZWQg Ki8KKyAgICB9CisgICAgcmV0dXJuKDApOworfQorI2VuZGlmIC8qIFNTSEJVSUxUSU4gKi8KKwor I2Vsc2UgLyogTm8gY29tbWFuZC1saW5lIGludGVyZmFjZS4uLiAqLworCitpbnQKK2NtZGxpbigp IHsKKyAgICBleHRlcm4gaW50IHhhcmdjOworICAgIGlmICh4YXJnYyA+IDEpIHsKKyAgICAgICAg WEZBVEFMKCJTb3JyeSwgY29tbWFuZC1saW5lIG9wdGlvbnMgZGlzYWJsZWQuIik7CisgICAgfQor fQorI2VuZGlmIC8qIE5PQ01ETCAqLwoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWls ZC9ja2VybWl0LTkuMC4zMDIvY2t1dmVyLmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1p dC05LjAuMzAyL2NrdXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdh MTExZmIKLS0tIC9kZXYvbnVsbAorKysgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL2NrdXZlci5oCkBAIC0wLDAgKzEsMTI2MiBAQAorLyogY2t1dmVyLmggLS0gQy1LZXJt aXQgVU5JWCBWZXJzaW9uIGhlcmFsZHMgKi8KKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8 ZmRjQGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3Jt YXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIw MTAsCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBO ZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZ SU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBt b2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworI2lmbmRlZiBDS1VW RVJfSAorI2RlZmluZSBDS1VWRVJfSAorCisvKiBBcnJhbmdlZCBtb3JlIG9yIGxlc3MgYWxwaGFi ZXRpY2FsbHkgYnkgY29tcGlsZXIgc3ltYm9sICovCisvKiBNdXN0IGJlIGluY2x1ZGVkIEFGVEVS IGNrY2RlYi5oLiAqLworCisjaWZkZWYgQkVPUworI2lmZGVmIEJFT1M0NQorI2RlZmluZSBIRVJB TEQgIiBCZU9TIDQuNSIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIEJlT1MiCisjZW5kaWYgLyog QkVPUzQ1ICovCisjZWxzZQorI2lmZGVmIEJFQk9YCisjaWZkZWYgQkVfRFJfNworI2RlZmluZSBI RVJBTEQgIiBCZUJveCBEUjciCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBCZUJveCIKKyNlbmRp ZiAvKiBCRV9EUl83ICovCisjZW5kaWYgLyogQkVCT1ggKi8KKyNlbmRpZiAvKiBCRU9TICovCisK KyNpZmRlZiBCRUxMVjEwCisjZGVmaW5lIEhFUkFMRCAiIEJlbGwgTGFicyBSZXNlYXJjaCBVTklY IFYxMCIKKyNlbmRpZiAvKiBCRUxMVjEwICovCisKKyNpZmRlZiBBUE9MTE9TUjEwCisjZGVmaW5l IEhFUkFMRCAiIEFwb2xsbyBTUjEwIgorI2VuZGlmIC8qIEFQT0xMT1NSMTAgKi8KKworI2lmZGVm IE1BQworI2RlZmluZSBIRVJBTEQgIiBBcHBsZSBNYWNpbnRvc2giCisjZW5kaWYgLyogTUFDICov CisKKyNpZmRlZiBBOTg2CisjZGVmaW5lIEhFUkFMRCAiIEFsdG9zIDk4NiAvIFhlbml4IDMuMCIK KyNlbmRpZiAvKiBBOTg2ICovCisKKyNpZmRlZiBBUzQwMAorI2RlZmluZSBIRVJBTEQgIiBBUy80 MDAiCisjZW5kaWYgLyogQVM0MDAgKi8KKworI2lmZGVmIGFlZ2lzCisjaWZkZWYgQlNENAorI2Rl ZmluZSBIRVJBTEQgIiBBcG9sbG8gRE9NQUlOL0lYIDQuMiBCU0QiCisjZWxzZQorI2lmZGVmIEFU VFNWCisjZGVmaW5lIEhFUkFMRCAiIEFwb2xsbyBET01BSU4vSVggU3lzdGVtIFYiCisjZWxzZQor I2RlZmluZSBIRVJBTEQgIiBBcG9sbG8gQWVnaXMiCisjZW5kaWYgLyogQlNENCAgKi8KKyNlbmRp ZiAvKiBBVFRTViAqLworI2VuZGlmIC8qIGFlZ2lzICovCisKKyNpZm5kZWYgSEVSQUxECisKKyNp ZmRlZiBBSVhSUworCisjaWZkZWYgQUlYNTMKKyNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA1LjMi CisjZWxzZQorI2lmZGVmIEFJWDUyCisjZGVmaW5lIEhFUkFMRCAiIElCTSBBSVggNS4yIgorI2Vs c2UKKyNpZmRlZiBBSVg1MQorI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDUuMSIKKyNlbHNlCisj aWZkZWYgQUlYNDUKKyNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA1LjAiCisjZWxzZQorI2lmZGVm IEFJWDQ1CisjZGVmaW5lIEhFUkFMRCAiIElCTSBBSVggNC41IgorI2Vsc2UKKyNpZmRlZiBBSVg0 NAorI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYIDQuNCIKKyNlbHNlCisjaWZkZWYgQUlYNDMKKyNk ZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA0LjMiCisjZWxzZQorI2lmZGVmIEFJWDQyCisjZGVmaW5l IEhFUkFMRCAiIElCTSBBSVggNC4yIgorI2Vsc2UKKyNpZmRlZiBTVlI0CisjaWZkZWYgQUlYNDEK KyNkZWZpbmUgSEVSQUxEICIgSUJNIEFJWCA0LjEiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBJ Qk0gUlMvNjAwMCBBSVggMy4yIgorI2VuZGlmIC8qIEFJWDQxICovCisjZWxzZQorI2RlZmluZSBI RVJBTEQgIiBJQk0gUlMvNjAwMCBBSVggMy4wLzMuMSIKKyNlbmRpZiAvKiBTVlI0ICovCisjZW5k aWYgLyogQUlYNDIgKi8KKyNlbmRpZiAvKiBBSVg0MyAqLworI2VuZGlmIC8qIEFJWDQ0ICovCisj ZW5kaWYgLyogQUlYNDUgKi8KKyNlbmRpZiAvKiBBSVg1MCAqLworI2VuZGlmIC8qIEFJWDUxICov CisjZW5kaWYgLyogQUlYNTIgKi8KKyNlbmRpZiAvKiBBSVg1MyAqLworI2VuZGlmIC8qIEFJWFJT ICovCisKKyNpZmRlZiBQUzJBSVgxMAorI2RlZmluZSBIRVJBTEQgIiBJQk0gUFMvMiBBSVggMS54 IgorI2VuZGlmIC8qIFBTMkFJWDEwICovCisKKyNpZmRlZiBBSVhQUzIKKyNkZWZpbmUgSEVSQUxE ICIgSUJNIFBTLzIgQUlYIDMueCIKKyNlbmRpZiAvKiBBSVhQUzIgKi8KKworI2lmZGVmIEFJWDM3 MAorI2lmbmRlZiBIRVJBTEQKKyNkZWZpbmUgSEVSQUxEICIgSUJNIFN5c3RlbS8zNzAgQUlYLzM3 MCIKKyNlbmRpZgorI2VuZGlmIC8qIEFJWDM3MCAqLworCisjaWZkZWYgQUlYRVNBCisjaWZuZGVm IEhFUkFMRAorI2RlZmluZSBIRVJBTEQgIiBJQk0gQUlYL0VTQSB2ZXJzaW9uIDIuMSIKKyNlbmRp ZgorI2VuZGlmIC8qIEFJWEVTQSAqLworCisjaWZkZWYgQVRUNjMwMAorI2RlZmluZSBIRVJBTEQg IiBBVCZUIDYzMDAiCisjZW5kaWYgLyogQVRUNjMwMCAqLworCisjaWZkZWYgQVRUNzMwMAorI2lm ZGVmIFVOSVgzNTFNCisjZGVmaW5lIEhFUkFMRCAiIEFUJlQgNzMwMCBVTklYIFBDIFVOSVggMy41 MW0iCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBBVCZUIDczMDAgVU5JWCBQQyIKKyNlbmRpZiAv KiBVTklYMzUxTSAqLworI2VuZGlmIC8qIEFUVDczMDAgKi8KKworI2lmZGVmIEFVWAorI2RlZmlu ZSBIRVJBTEQgIiBBcHBsZSBNYWNpbnRvc2ggQVVYIgorI2VuZGlmIC8qIEFVWCAqLworCisjaWZk ZWYgQlNENDQKKyNpZmRlZiBNQUNPU1gKKyNkZWZpbmUgSEVSQUxEICIgTWFjIE9TIFgiCisjZWxz ZQorI2lmZGVmIF9fT3BlbkJTRF9fCisjZGVmaW5lIEhFUkFMRCAiIE9wZW5CU0QiCisjZWxzZQor I2lmZGVmIF9fYnNkaV9fCisjaWZkZWYgQlNESTQKKyNkZWZpbmUgSEVSQUxEICIgQlNESSBCU0Qv T1MgNC4wIgorI2Vsc2UKKyNpZmRlZiBCU0RJMworI2RlZmluZSBIRVJBTEQgIiBCU0RJIEJTRC9P UyAzLjAiCisjZWxzZQorI2lmZGVmIEJTREkyCisjZGVmaW5lIEhFUkFMRCAiIEJTREkgQlNEL09T IDIuMCIJLyogMS4xKysgbmFtZS4uLiAqLworI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgQlNESSBC U0QvMzg2IgkJLyogT3JpZ2luYWwgMS4wIG5hbWUgKi8KKyNlbmRpZiAvKiBCU0RJMiAqLworI2Vu ZGlmIC8qIEJTREkzICovCisjZW5kaWYgLyogQlNESTQgKi8KKyNlbHNlICAvKiBfX2JzZGlfXyAq LworI2lmZGVmIF9fTmV0QlNEX18KKyNpZm5kZWYgSEVSQUxECisjaWZkZWYgTkVUQlNEMTYKKyNk ZWZpbmUgSEVSQUxEICIgTmV0QlNEIDEuNiIKKyNlbHNlCisjaWZkZWYgTkVUQlNEMTUKKyNkZWZp bmUgSEVSQUxEICIgTmV0QlNEIDEuNSIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIE5ldEJTRCIK KyNlbmRpZiAvKiBORVRCU0QxNSAqLworI2VuZGlmIC8qIE5FVEJTRDE2ICovCisjZW5kaWYgLyog SEVSQUxEICovCisjZWxzZSAgLyogX19OZXRCU0RfXyAqLworI2lmZGVmIF9fRnJlZUJTRF9fCisj aWZkZWYgRlJFRUJTRDUxCisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNS4xIgorI2Vsc2UKKyNp ZmRlZiBGUkVFQlNENTAKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA1LjAiCisjZWxzZQorI2lm ZGVmIEZSRUVCU0Q0OQorI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuOSIKKyNlbHNlCisjaWZk ZWYgRlJFRUJTRDQ4CisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC44IgorI2Vsc2UKKyNpZmRl ZiBGUkVFQlNENDcKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjciCisjZWxzZQorI2lmZGVm IEZSRUVCU0Q0NgorI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuNiIKKyNlbHNlCisjaWZkZWYg RlJFRUJTRDQ1CisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC41IgorI2Vsc2UKKyNpZmRlZiBG UkVFQlNENDQKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjQiCisjZWxzZQorI2lmZGVmIEZS RUVCU0Q0MworI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDQuMyIKKyNlbHNlCisjaWZkZWYgRlJF RUJTRDQyCisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC4yIgorI2Vsc2UKKyNpZmRlZiBGUkVF QlNENDEKKyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCA0LjEiCisjZWxzZQorI2lmZGVmIEZSRUVC U0Q0CisjZGVmaW5lIEhFUkFMRCAiIEZyZWVCU0QgNC4wIgorI2Vsc2UKKyNpZmRlZiBGUkVFQlNE MworI2RlZmluZSBIRVJBTEQgIiBGcmVlQlNEIDMuMCIKKyNlbHNlCisjaWZkZWYgRlJFRUJTRDIK KyNkZWZpbmUgSEVSQUxEICIgRnJlZUJTRCAyLjAiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBG cmVlQlNEIgorI2VuZGlmIC8qIEZSRUVCU0QyICovCisjZW5kaWYgLyogRlJFRUJTRDMgKi8KKyNl bmRpZiAvKiBGUkVFQlNENCAqLworI2VuZGlmIC8qIEZSRUVCU0Q0MSAqLworI2VuZGlmIC8qIEZS RUVCU0Q0MiAqLworI2VuZGlmIC8qIEZSRUVCU0Q0MyAqLworI2VuZGlmIC8qIEZSRUVCU0Q0NCAq LworI2VuZGlmIC8qIEZSRUVCU0Q0NSAqLworI2VuZGlmIC8qIEZSRUVCU0Q0NiAqLworI2VuZGlm IC8qIEZSRUVCU0Q0NyAqLworI2VuZGlmIC8qIEZSRUVCU0Q0OCAqLworI2VuZGlmIC8qIEZSRUVC U0Q0OSAqLworI2VuZGlmIC8qIEZSRUVCU0Q1MCAqLworI2VuZGlmIC8qIEZSRUVCU0Q1MSAqLwor I2Vsc2UKKyNpZmRlZiBfXzM4NkJTRF9fCisjZGVmaW5lIEhFUkFMRCAiIDM4NkJTRCIKKyNlbHNl CisjZGVmaW5lIEhFUkFMRCAiIDQuNEJTRCIKKyNlbmRpZiAvKiBfXzM4NkJTRF9fICovCisjZW5k aWYgLyogX19GcmVlQlNEX18gKi8KKyNlbmRpZiAvKiBfX05ldEJTRF9fICovCisjZW5kaWYgLyog X19ic2RpX18gKi8KKyNlbmRpZiAvKiBfX09wZW5CU0RfXyAqLworI2VuZGlmIC8qIE1BQ09TWCAq LworI2VuZGlmIC8qIEJTRDQ0ICovCisKKyNpZmRlZiBFTkNPUkUKKyNpZmRlZiBCU0Q0MworI2Rl ZmluZSBIRVJBTEQgIiBFbmNvcmUgTXVsdGltYXggVU1BWCA0LjMiCisjZWxzZQorI2RlZmluZSBI RVJBTEQgIiBFbmNvcmUgTXVsdGltYXggVU1BWCA0LjIiCisjZW5kaWYKKyNlbmRpZiAvKiBFTkNP UkUgKi8KKworI2lmZGVmIEJTRDI5CisjZGVmaW5lIEhFUkFMRCAiIDIuOSBCU0QiCisjZW5kaWYg LyogQlNEMjkgKi8KKworI2lmZGVmIEJTRDQxCisjZGVmaW5lIEhFUkFMRCAiIDQuMSBCU0QiCisj ZW5kaWYgLyogQlNENDEgKi8KKworI2lmZGVmIEM3MAorI2RlZmluZSBIRVJBTEQgIiBCQk4gQy83 MCIKKyNlbmRpZiAvKiBjNzAgKi8KKworI2lmZGVmIENJRQorI2RlZmluZSBIRVJBTEQgIiBDSUUg U3lzdGVtcyA2ODAvMjAgUmVndWx1cyIKKyNlbmRpZiAvKiBDSUUgKi8KKworI2lmZGVmIENPSEVS RU5UCisjaWZkZWYgX0kzODYKKyNkZWZpbmUgSEVSQUxEICIgTVdDIENvaGVyZW50IDM4NiA0Lngi CisjaWZuZGVmIGkzODYKKyNkZWZpbmUgaTM4NgorI2VuZGlmIC8qIGkzODYgKi8KKyNlbHNlCisj ZGVmaW5lIEhFUkFMRCAiIFBDL0FUIE1XQyBDb2hlcmVudCAyODYgMy54IgorI2lmbmRlZiBpMjg2 CisjZGVmaW5lIGkyODYKKyNlbmRpZiAvKiBpMjg2ICovCisjZW5kaWYgLyogX0kzODYgKi8KKyNl bmRpZiAvKiBDT0hFUkVOVCAqLworCisjaWZkZWYgQ09OVkVYOQorI2RlZmluZSBIRVJBTEQgIiBD b252ZXgvT1MiCisjZW5kaWYgLyogQ09OVkVYOSAqLworCisjaWZkZWYgQ09OVkVYMTAKKyNkZWZp bmUgSEVSQUxEICIgQ29udmV4L09TIDEwLjEiCisjZW5kaWYgLyogQ09OVkVYMTAgKi8KKworI2lm ZGVmIF9DUkFZCisjaWZkZWYgX0NSQVlDT00KKyNkZWZpbmUgSEVSQUxEICIgQ3JheSBDU09TIgor I2Vsc2UgLyogX0NSQVlDT00gKi8KKyNkZWZpbmUgSEVSQUxEICIgQ3JheSBVTklDT1MiCisjZW5k aWYgLyogX0NSQVlDT00gKi8KKyNlbmRpZiAvKiBfQ1JBWSAqLworCisjaWZkZWYgREdVWAorI2lm ZGVmIERHVVg1NDQyMAorI2RlZmluZSBIRVJBTEQgIiBEYXRhIEdlbmVyYWwgREcvVVggUjQuMjAi CisjZWxzZQorI2lmZGVmIERHVVg1NDQxMQorI2RlZmluZSBIRVJBTEQgIiBEYXRhIEdlbmVyYWwg REcvVVggUjQuMTEiCisjZWxzZQorI2lmZGVmIERHVVg1NDQxMAorI2RlZmluZSBIRVJBTEQgIiBE YXRhIEdlbmVyYWwgREcvVVggUjQuMTAiCisjZWxzZQorI2lmZGVmIERHVVg1NDMxMAorI2RlZmlu ZSBIRVJBTEQgIiBEYXRhIEdlbmVyYWwgREcvVVggNS40UjMuMTAiCisjZWxzZQorI2lmZGVmIERH VVg1NDMKKyNkZWZpbmUgSEVSQUxEICIgRGF0YSBHZW5lcmFsIERHL1VYIDUuNFIzLjAwIgorI2Vs c2UKKyNpZmRlZiBER1VYNTQwCisjZGVmaW5lIEhFUkFMRCAiIERhdGEgR2VuZXJhbCBERy9VWCA1 LjQiCisjZWxzZQorI2lmZGVmIERHVVg0MzAKKyNkZWZpbmUgSEVSQUxEICIgRGF0YSBHZW5lcmFs IERHL1VYIDQuMzAiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBEYXRhIEdlbmVyYWwgREcvVVgi CisjZW5kaWYgLyogREdVWDQzMCAqLworI2VuZGlmIC8qIERHVVg1NDAgKi8KKyNlbmRpZiAvKiBE R1VYNTQzICovCisjZW5kaWYgLyogREdVWDU0MzEwICovCisjZW5kaWYgLyogREdVWDU0NDEwICov CisjZW5kaWYgLyogREdVWDU0NDExICovCisjZW5kaWYgLyogREdVWDU0NDIwICovCisjZW5kaWYg LyogREdVWCAqLworCisjaWZkZWYgZGF0YWdlbmVyYWwKKyNpZm5kZWYgSEVSQUxECisjZGVmaW5l IEhFUkFMRCAiIERhdGEgR2VuZXJhbCBBT1MvVlMiCisjZW5kaWYgLyogSEVSQUxEICovCisjZW5k aWYgLyogZGF0YWdlbmVyYWwgKi8KKworI2lmZGVmIFNJTklYCisjaWZkZWYgU05JNTQ0CisjZGVm aW5lIEhFUkFMRCAiIFNpZW1lbnMgTml4ZG9yZiBSZWxpYW50IFVOSVggVjUuNDQiCisjZWxzZQor I2lmZGVmIFNOSTU0MworI2RlZmluZSBIRVJBTEQgIiBTaWVtZW5zIE5peGRvcmYgUmVsaWFudCBV TklYIFY1LjQzIgorI2Vsc2UKKyNpZmRlZiBTTkk1NDEKKyNkZWZpbmUgSEVSQUxEICIgU2llbWVu cyBOaXhkb3JmIFNJTklYIFY1LjQxIgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgU2llbWVucyBO aXhkb3JmIFNJTklYIFY1LjQyIgorI2VuZGlmIC8qIFNOSTU0MSAqLworI2VuZGlmIC8qIFNOSTU0 MyAqLworI2VuZGlmIC8qIFNOSTU0NCAqLworI2VuZGlmIC8qIFNJTklYICovCisKKyNpZmRlZiBQ T1dFUk1BWAorI2RlZmluZSBIRVJBTEQgIiBDb25jdXJyZW50IFBvd2VyTUFYIE9TIgorI2VuZGlm IC8qIFBPV0VSTUFYICovCisKKyNpZmRlZiBERUxMX1NWUjQKKyNkZWZpbmUgSEVSQUxEICIgRGVs bCBTeXN0ZW0gViBSNCIKKyNlbmRpZiAvKiBERUxMX1NWUjQgKi8KKworI2lmZGVmIE5DUk1QUkFT CisjZGVmaW5lIEhFUkFMRCAiIE5DUiBNUC1SQVMiCisjZW5kaWYgLyogTkNSTVBSQVMgKi8KKwor I2lmZGVmIFVOSVhXQVJFCisjZGVmaW5lIEhFUkFMRCAiIFVuaXhXYXJlIgorI2Vsc2UKKyNpZmRl ZiBPTERfVU5JWFdBUkUKKyNkZWZpbmUgSEVSQUxEICIgVW5peFdhcmUiCisjZW5kaWYgLyogT0xE X1VOSVhXQVJFICovCisjZW5kaWYgLyogVU5JWFdBUkUgKi8KKworI2lmZGVmIElDTF9TVlI0Cisj ZGVmaW5lIEhFUkFMRCAiIElDTCBTeXN0ZW0gViBSNCBEUlMgTi9YIgorI2VuZGlmIC8qIElDTF9T VlI0ICovCisKKyNpZmRlZiBGVDE4CisjaWZkZWYgRlQyMQorI2RlZmluZSBIRVJBTEQgIiBGb3J0 dW5lIEZvcjpQcm8gMi4xIgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgRm9ydHVuZSBGb3I6UHJv IDEuOCIKKyNlbmRpZiAvKiBGVDIxICovCisjZW5kaWYgLyogRlQxOCAqLworCisjaWZkZWYgR0VN RE9TCisjZGVmaW5lIEhFUkFMRCAiIEF0YXJpIFNUIEdFTSAxLjAiCisjZW5kaWYgLyogR0VNRE9T ICovCisKKyNpZmRlZiBYRjY4UjNWNgorI2RlZmluZSBIRVJBTEQgIiBNb3Rvcm9sYSBVTklYIFN5 c3RlbSBWLzY4IFIzVjYiCisjZW5kaWYgLyogWEY2OFIzVjYgKi8KKworI2lmZGVmIFhGODhSMzIK KyNkZWZpbmUgSEVSQUxEICIgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi84OCBSMzIiCisjZW5kaWYg LyogWEY4OFIzMiAqLworCisjaWZkZWYgSTM4NklYCisjaWZkZWYgU1ZSM0pDCisjZGVmaW5lIEhF UkFMRCAiIEludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYvMzg2IFIzLjIiCisjZWxzZQorI2RlZmlu ZSBIRVJBTEQgIiBJbnRlcmFjdGl2ZSBTeXN0ZW1zIENvcnAgMzg2L2l4IgorI2VuZGlmIC8qIFNW UjNKQyAqLworI2VuZGlmIC8qIEkzODZJWCAqLworCisjaWZkZWYgSVJJWDY1CisjZGVmaW5lIEhF UkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJWCA2LjUiCisjZWxzZQorI2lmZGVmIElSSVg2NAor I2RlZmluZSBIRVJBTEQgIiBTaWxpY29uIEdyYXBoaWNzIElSSVggNi40IgorI2Vsc2UKKyNpZmRl ZiBJUklYNjMKKyNkZWZpbmUgSEVSQUxEICIgU2lsaWNvbiBHcmFwaGljcyBJUklYIDYuMyIKKyNl bHNlCisjaWZkZWYgSVJJWDYyCisjZGVmaW5lIEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJ WCA2LjIiCisjZWxzZQorI2lmZGVmIElSSVg2MAorI2RlZmluZSBIRVJBTEQgIiBTaWxpY29uIEdy YXBoaWNzIElSSVggNi4wIgorI2Vsc2UKKyNpZmRlZiBJUklYNTMKKyNkZWZpbmUgSEVSQUxEICIg U2lsaWNvbiBHcmFwaGljcyBJUklYIDUuMyIKKyNlbHNlCisjaWZkZWYgSVJJWDUyCisjZGVmaW5l IEhFUkFMRCAiIFNpbGljb24gR3JhcGhpY3MgSVJJWCA1LjIiCisjZWxzZQorI2lmZGVmIElSSVg1 MQorI2RlZmluZSBIRVJBTEQgIiBTaWxpY29uIEdyYXBoaWNzIElSSVggNS4xIgorI2Vsc2UKKyNp ZmRlZiBJUklYNDAKKyNkZWZpbmUgSEVSQUxEICIgU2lsaWNvbiBHcmFwaGljcyBJUklYIDQuMCIK KyNlbmRpZiAvKiBJUklYNDAgKi8KKyNlbmRpZiAvKiBJUklYNTEgKi8KKyNlbmRpZiAvKiBJUklY NTIgKi8KKyNlbmRpZiAvKiBJUklYNTMgKi8KKyNlbmRpZiAvKiBJUklYNjAgKi8KKyNlbmRpZiAv KiBJUklYNjIgKi8KKyNlbmRpZiAvKiBJUklYNjMgKi8KKyNlbmRpZiAvKiBJUklYNjQgKi8KKyNl bmRpZiAvKiBJUklYNjUgKi8KKworI2lmZGVmIElTSUlJCisjZGVmaW5lIEhFUkFMRCAiIEludGVy YWN0aXZlIFN5c3RlbXMgQ29ycCBTeXN0ZW0gSUlJIgorI2VuZGlmIC8qIElTSUlJICovCisKKyNp ZmRlZiBJWDM3MAorI2RlZmluZSBIRVJBTEQgIiBJQk0gSVgvMzcwIgorI2VuZGlmIC8qIElYMzcw ICovCisKKyNpZmRlZiBIUFVYCisjaWZkZWYgSFBVWDUKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVgg NS4wMCIKKyNlbHNlCisjaWZkZWYgSFBVWDYKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVggNi4wMCIK KyNlbHNlCisjaWZkZWYgSFBVWDcKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVggNy4wMCIKKyNlbHNl CisjaWZkZWYgSFBVWDgKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVggOC4wMCIKKyNlbHNlCisjaWZk ZWYgSFBVWDkKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVggOS4wMCIKKyNlbHNlCisjaWZkZWYgSFBV WDExMDAKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVggMTEuMDAiCisjZWxzZQorI2lmZGVmIEhQVVgx MAorI2lmZGVmIEhQVVgxMDMwCisjZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDEwLjMwIgorI2Vsc2UK KyNpZmRlZiBIUFVYMTAyMAorI2RlZmluZSBIRVJBTEQgIiBIUC1VWCAxMC4yMCIKKyNlbHNlCisj aWZkZWYgSFBVWDEwMTAKKyNkZWZpbmUgSEVSQUxEICIgSFAtVVggMTAuMTAiCisjZWxzZQorI2lm ZGVmIEhQVVgxMHh4CisjZGVmaW5lIEhFUkFMRCAiIEhQLVVYIDEwLnh4IgorI2Vsc2UKKyNkZWZp bmUgSEVSQUxEICIgSFAtVVggMTAuMDAiCisjZW5kaWYgLyogSFBVWDEwWFggKi8KKyNlbmRpZiAv KiBIUFVYMTAxMCAqLworI2VuZGlmIC8qIEhQVVgxMDIwICovCisjZW5kaWYgLyogSFBVWDEwMzAg Ki8KKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIEhQLVVYIgorI2VuZGlmIC8qIEhQVVgxMCAqLwor I2VuZGlmIC8qIEhQVVgxMTAwICovCisjZW5kaWYgLyogSFBVWDkgICovCisjZW5kaWYgLyogSFBV WDggICovCisjZW5kaWYgLyogSFBVWDcgICovCisjZW5kaWYgLyogSFBVWDYgICovCisjZW5kaWYg LyogSFBVWDUgICovCisjZW5kaWYgLyogSFBVWCAgICovCisKKyNpZm5kZWYgTUlOSVgKKyNpZmRl ZiBNSU5JWDMxNQorI2RlZmluZSBNSU5JWAorI2VuZGlmCS8qIE1JTklYMzE1ICovCisjZW5kaWYJ LyogTUlOSVggKi8KKworI2lmbmRlZiBNSU5JWAorI2lmZGVmIE1JTklYMworI2RlZmluZSBNSU5J WAorI2VuZGlmCS8qIE1JTklYMyAqLworI2VuZGlmCS8qIE1JTklYICovCisKKyNpZmRlZiBNSU5J WAorI2lmZGVmIE1JTklYMzE1CisjZGVmaW5lIEhFUkFMRCAiIE1pbml4IDMuMS41IgorI2lmbmRl ZiBNSU5JWDMKKyNkZWZpbmUgTUlOSVgzCisjZW5kaWYJLyogTUlOSVgzICovCisjZW5kaWYJLyog TUlOSVgzMTUgKi8KKyNpZmRlZiBNSU5JWDMKKyNpZm5kZWYgTUlOSVgyCisjZGVmaW5lIE1JTklY MgorI2VuZGlmCS8qIE1JTklYMiAqLworI2lmbmRlZiBIRVJBTEQKKyNkZWZpbmUgSEVSQUxEICIg TWluaXggMy4wIgorI2VuZGlmCS8qIEhFUkFMRCAqLworI2Vsc2UKKyNpZmRlZiBNSU5JWDIKKyNk ZWZpbmUgSEVSQUxEICIgTWluaXggMi4wIgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgTWluaXgg MS4wIgorI2VuZGlmIC8qIE1JTklYMyAqLworI2VuZGlmIC8qIE1JTklYMiAqLworI2VuZGlmIC8q IE1JTklYICovCisKKyNpZmRlZiBNSVBTCisjZGVmaW5lIEhFUkFMRCAiIE1JUFMgUklTQy9PUyBT VlIzIgorI2VuZGlmIC8qIE1JUFMgKi8KKworI2lmZGVmIE5FWFQKKyNpZmRlZiBPUEVOU1RFUDQy CisjZGVmaW5lIEhFUkFMRCAiIE9QRU5TVEVQIDQuMiIKKyNlbHNlCisjaWZkZWYgTkVYVDMzCisj ZGVmaW5lIEhFUkFMRCAiIE5lWFRTVEVQIDMuMyIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIE5l WFRTVEVQIgorI2VuZGlmIC8qIE5FWFQzMyAqLworI2VuZGlmIC8qIE9QRU5TVEVQNDIgKi8KKyNl bmRpZiAvKiBORVhUICovCisKKyNpZmRlZiBPU0YKKyNpZmRlZiBpMzg2CisjZGVmaW5lIEhFUkFM RCAiIERFQ3BjIE9TRi8xIgorI2lmZGVmIF9fR05VQworI2RlZmluZSBPU0ZQQworI2VuZGlmIC8q IF9fR05VQyAqLworI2Vsc2UgIC8qIE5vdCBpMzg2IHNvIEFscGhhICovCisKKyNpZmRlZiBUUlU2 NAorCisjaWZkZWYgT1NGNTFCCisjZGVmaW5lIEhFUkFMRCAiIENvbXBhcSBUcnU2NCBVTklYIDUu MUIiCisjZWxzZQorI2lmZGVmIE9TRjUxQQorI2RlZmluZSBIRVJBTEQgIiBDb21wYXEgVHJ1NjQg VU5JWCA1LjFBIgorI2Vsc2UKKyNpZmRlZiBPU0Y1MAorI2RlZmluZSBIRVJBTEQgIiBDb21wYXEg VHJ1NjQgVU5JWCA1LjBBIgorI2Vsc2UKKyNpZmRlZiBPU0Y0MEcKKyNkZWZpbmUgSEVSQUxEICIg Q29tcGFxIFRydTY0IFVOSVggNC4wRyIKKyNlbHNlCisjaWZkZWYgT1NGNDBGCisjZGVmaW5lIEhF UkFMRCAiIENvbXBhcSBUcnU2NCBVTklYIDQuMEYiCisjZWxzZQorI2lmZGVmIE9TRjQwRQorI2Rl ZmluZSBIRVJBTEQgIiBDb21wYXEgVHJ1NjQgVU5JWCA0LjBFIgorI2VuZGlmIC8qIE9TRjQwRSAq LworI2VuZGlmIC8qIE9TRjQwRiAqLworI2VuZGlmIC8qIE9TRjQwRyAqLworI2VuZGlmIC8qIE9T RjUwICovCisjZW5kaWYgLyogT1NGNTFBICovCisjZW5kaWYgLyogT1NGNTFCICovCisKKyNlbHNl ICAvKiBOb3QgVFJVNjQgKi8KKworI2lmZGVmIE9TRjQwCisjZGVmaW5lIEhFUkFMRCAiIERpZ2l0 YWwgVU5JWCA0LjAiCisjZWxzZQorI2lmZGVmIE9TRjMyCisjZGVmaW5lIEhFUkFMRCAiIERpZ2l0 YWwgVU5JWCAzLjIiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBERUMgT1NGLzEgQWxwaGEiCisj ZW5kaWYgLyogT1NGNDAgKi8KKyNlbmRpZiAvKiBPU0YzMiAqLworCisjZW5kaWYgLyogVFJVNjQg Ki8KKyNlbmRpZiAvKiBpMzg2ICovCisjZW5kaWYgLyogT1NGICovCisKKyNpZmRlZiBQQ0lYCisj ZGVmaW5lIEhFUkFMRCAiIFBDL0lYIgorI2VuZGlmIC8qIFBDSVggKi8KKworI2lmZGVmIHN4YUU1 MAorI2RlZmluZSBIRVJBTEQgIiBQRlUgU1gvQSBWMTAvTDUwIgorI2VuZGlmIC8qIHN4YUU1MCAq LworCisjaWZkZWYgUFJPVlgxCisjZGVmaW5lIEhFUkFMRCAiIERFQyBQcm9mZXNzaW9uYWwgMzAw IChWZW5peCAxLjApIgorI2VuZGlmIC8qIFBST1ZYMSAqLworCisjaWZkZWYgUFlSQU1JRAorI2lm ZGVmIFNWUjQKKyNkZWZpbmUgSEVSQUxEICIgUHlyYW1pZCBEQy9PU3giCisjZWxzZQorI2RlZmlu ZSBIRVJBTEQgIiBQeXJhbWlkIER1YWwgUG9ydCBPU3giCisjZW5kaWYgLyogU1ZSNCAqLworI2Vu ZGlmIC8qIFBZUkFNSUQgKi8KKworI2lmZGVmIFJUQUlYCisjZGVmaW5lIEhFUkFMRCAiIElCTSBS VCBQQyAoQUlYIDIuMikiCisjZW5kaWYgLyogUlRBSVggKi8KKworI2lmZGVmIFJUVQorI2RlZmlu ZSBIRVJBTEQgIiBNYXNzY29tcC9Db25jdXJyZW50IFJUVSIKKyNlbmRpZiAvKiBSVFUgKi8KKwor I2lmZGVmIHNvbnlfbmV3cworI2RlZmluZSBIRVJBTEQgIiBTT05ZIE5FV1MiCisjZW5kaWYgLyog c29ueV9uZXdzICovCisKKyNpZmRlZiBTT0xBUklTMjQKKyNkZWZpbmUgSEVSQUxEICIgU29sYXJp cyAyLjQiCisjZWxzZQorI2lmZGVmIFNPTEFSSVMyMworI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlz IDIuMyIKKyNlbHNlCisjaWZkZWYgU09MQVJJUworI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDIu eCIKKyNlbmRpZiAvKiBTT0xBUklTICovCisjZW5kaWYgLyogU09MQVJJUzIzICovCisjZW5kaWYg LyogU09MQVJJUzI0ICovCisKKyNpZmRlZiBTVU5PUzQKKyNpZmRlZiBCU0Q0CisjaWZkZWYgU1VO T1M0MQorI2RlZmluZSBIRVJBTEQgIiBTdW5PUyA0LjEiCisjZWxzZQorI2RlZmluZSBIRVJBTEQg IiBTdW5PUyA0LjAiCisjZW5kaWYgLyogU1VOT1M0MSAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNl bmRpZiAvKiBTVU5PUzQgKi8KKworI2lmZGVmIFNVTjRTNQorI2lmZGVmIEhEQlVVQ1AKKyNkZWZp bmUgSEVSQUxEICIgU3VuT1MgNC4xIChTVlIzKSIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIFN1 bk9TIDQuMCAoU1ZSMykiCisjZW5kaWYgLyogSERCVVVDUCAqLworI2VuZGlmIC8qIFNVTjRTNSAq LworCisjaWZkZWYgU1RSQVRVUworI2RlZmluZSBIRVJBTEQgIiBTdHJhdHVzIFZPUyIKKyNlbmRp ZiAvKiBTVFJBVFVTICovCisKKyNpZmRlZiBUT1dFUjEKKyNkZWZpbmUgSEVSQUxEICIgTkNSIFRv d2VyIDE2MzIgT1MgMS4wMiIKKyNlbmRpZiAvKiBUT1dFUjEgKi8KKworI2lmZGVmIFRSUzE2Cisj ZGVmaW5lIEhFUkFMRCAiIFRhbmR5IDE2LzYwMDAgWGVuaXggMy4wIgorI2lmbmRlZiBDS0NQVQor I2RlZmluZSBDS0NQVSAibWM2ODAwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIFRS UzE2ICovCisKKyNpZmRlZiB1M2IyCisjaWZuZGVmIEhFUkFMRAorI2lmZGVmIFNWUjMKKyNkZWZp bmUgSEVSQUxEICIgQVQmVCAzQjIgU3lzdGVtIFYgUjMiCisjZWxzZQorI2RlZmluZSBIRVJBTEQg IiBBVCZUIDNCMiBTeXN0ZW0gViIKKyNlbmRpZiAvKiBTVlIzICovCisjZW5kaWYgLyogSEVSQUxE ICovCisjZW5kaWYgLyogdTNiMiAqLworCisjaWZkZWYgdWx0cml4CisjaWZkZWYgdmF4CisjaWZk ZWYgVUxUUklYMworI2RlZmluZSBIRVJBTEQgIiBWQVgvVUxUUklYIDMuMCIKKyNlbHNlCisjZGVm aW5lIEhFUkFMRCAiIFZBWC9VTFRSSVgiCisjZW5kaWYgLyogVUxUUklYMyAqLworI2Vsc2UKKyNp ZmRlZiBtaXBzCisjaWZkZWYgVUxUUklYNDMKKyNkZWZpbmUgSEVSQUxEICIgREVDc3RhdGlvbi9V TFRSSVggNC4zIgorI2Vsc2UKKyNpZmRlZiBVTFRSSVg0NAorI2RlZmluZSBIRVJBTEQgIiBERUNz dGF0aW9uL1VMVFJJWCA0LjQiCisjZWxzZQorI2lmZGVmIFVMVFJJWDQ1CisjZGVmaW5lIEhFUkFM RCAiIERFQ3N0YXRpb24vVUxUUklYIDQuNSIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIERFQ3N0 YXRpb24vVUxUUklYIgorI2VuZGlmIC8qIFVMVFJJWDQ1ICovCisjZW5kaWYgLyogVUxUUklYNDQg Ki8KKyNlbmRpZiAvKiBVTFRSSVg0MyAqLworI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgVUxUUklY IgorI2VuZGlmIC8qIG1pcHMgKi8KKyNlbmRpZiAvKiB2YXggKi8KKyNlbmRpZiAvKiB1bHRyaXgg Ki8KKworI2lmZGVmIE9YT1MKKyNkZWZpbmUgSEVSQUxEICIgT2xpdmV0dGkgWC9PUyIKKyNlbmRp ZiAvKiBPWE9TICovCisKKyNpZmRlZiBfMzg2QlNECisjZGVmaW5lIEhFUkFMRCAiIDM4NkJTRCIK KyNlbmRpZiAvKiBfMzg2QlNEICovCisKKyNpZmRlZiBQT1NJWAorI2lmZGVmIFBUWAorI2lmZGVm IFBUWDQKKyNkZWZpbmUgSEVSQUxEICIgRFlOSVgvcHR4IFY0IgorI2Vsc2UKKyNkZWZpbmUgSEVS QUxEICIgRFlOSVgvcHR4IgorI2VuZGlmIC8qIFBUWDQgKi8KKyNlbHNlICAvKiBQVFggKi8KKyNp Zm5kZWYgT1NGCQkvKiBMZXQgT1NGIC1EUE9TSVgga2VlcCBwcmV2aW91c2x5IGRlZmluZWQgSEVS QUxEICovCisjaWZkZWYgSEVSQUxECisjdW5kZWYgSEVSQUxECisjZW5kaWYgLyogSEVSQUxEICov CisjZW5kaWYgLyogT1NGICovCisjaWZkZWYgT1U4CisjZGVmaW5lIEhFUkFMRCAiIE9wZW5VTklY IDgiCisjZWxzZQorI2lmZGVmIFVXNworI2RlZmluZSBIRVJBTEQgIiBVbml4d2FyZSA3IgorI2Vs c2UKKyNpZmRlZiBRTlgKKyNpZmRlZiBRTlgxNgorI2RlZmluZSBIRVJBTEQgIiBRTlggMTYtYml0 IgorI2Vsc2UKKyNkZWZpbmUgSEVSQUxEICIgUU5YIDMyLWJpdCIKKyNlbmRpZiAvKiBRTlgxNiAq LworI2Vsc2UKKyNpZmRlZiBORVVUUklOTworI2RlZmluZSBIRVJBTEQgIiBRTlggTmV1dHJpbm8g MiIKKyNlbHNlICAvKiBORVVUUklOTyAqLworI2lmZGVmIFFOWDYKKyNkZWZpbmUgSEVSQUxEICIg UU5YNiIKKyNlbHNlICAvKiBRTlg2ICovCisjaWZkZWYgX19saW51eF9fCisjaWZkZWYgWlNMNTUw MAorI2RlZmluZSBIRVJBTEQgIiBTaGFycCBaYXVydXMgU0wtNTUwMCIKKyNlbHNlCisjaWZkZWYg Ukg5MAorI2RlZmluZSBIRVJBTEQgIiBSZWQgSGF0IExpbnV4IDkuMCIKKyNlbHNlCisjaWZkZWYg Ukg4MAorI2RlZmluZSBIRVJBTEQgIiBSZWQgSGF0IExpbnV4IDguMCIKKyNlbHNlCisjaWZkZWYg Ukg3MworI2RlZmluZSBIRVJBTEQgIiBSZWQgSGF0IExpbnV4IDcuMyIKKyNlbHNlCisjaWZkZWYg Ukg3MgorI2RlZmluZSBIRVJBTEQgIiBSZWQgSGF0IExpbnV4IDcuMiIKKyNlbHNlCisjaWZkZWYg Ukg3MQorI2RlZmluZSBIRVJBTEQgIiBSZWQgSGF0IExpbnV4IDcuMSIKKyNlbHNlCisjZGVmaW5l IEhFUkFMRCAiIExpbnV4IgorI2VuZGlmIC8qIFJINzEgKi8KKyNlbmRpZiAvKiBSSDcyICovCisj ZW5kaWYgLyogUkg3MyAqLworI2VuZGlmIC8qIFJIODAgKi8KKyNlbmRpZiAvKiBSSDkwICovCisj ZW5kaWYgLyogWlNMNTUwMCAqLworI2Vsc2UgIC8qIF9fbGludXhfXyAqLworI2lmZGVmIF8zODZC U0QJCQkJLyogMzg2QlNEIEpvbGl4ICovCisjZGVmaW5lIEhFUkFMRCAiIDM4NkJTRCIKKyNlbHNl CisjaWZkZWYgTFlOWE9TCQkJCS8qIEx5bnggT1MgMi4yICovCisjZGVmaW5lIEhFUkFMRCAiIEx5 bnggT1MiCisjZWxzZQorI2lmZGVmIFBsYW45CisjZGVmaW5lIEhFUkFMRCAiIFBsYW4gOSBmcm9t IEJlbGwgTGFicyIKKyNlbHNlCisjaWZkZWYgU09MQVJJUzExCisjZGVmaW5lIEhFUkFMRCAiIFNv bGFyaXMgMTEiCisjZWxzZQorI2lmZGVmIFNPTEFSSVMxMAorI2RlZmluZSBIRVJBTEQgIiBTb2xh cmlzIDEwIgorI2Vsc2UKKyNpZmRlZiBTT0xBUklTOQorI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlz IDkiCisjZWxzZQorI2lmZGVmIFNPTEFSSVM4CisjZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgOCIK KyNlbHNlCisjaWZkZWYgU09MQVJJUzcKKyNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyA3IgorI2Vs c2UKKyNpZmRlZiBTT0xBUklTMjYKKyNkZWZpbmUgSEVSQUxEICIgU29sYXJpcyAyLjYiCisjZWxz ZQorI2lmZGVmIFNPTEFSSVMyNQorI2RlZmluZSBIRVJBTEQgIiBTb2xhcmlzIDIuNSIKKyNlbHNl CisjaWZkZWYgU09MQVJJUzI0CisjZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMi40IgorI2Vsc2UK KyNpZmRlZiBTT0xBUklTCisjZGVmaW5lIEhFUkFMRCAiIFNvbGFyaXMgMi54IgorI2VuZGlmIC8q IFNPTEFSSVMgKi8KKyNlbmRpZiAvKiBTT0xBUklTMjQgKi8KKyNlbmRpZiAvKiBTT0xBUklTMjUg Ki8KKyNlbmRpZiAvKiBTT0xBUklTMjYgKi8KKyNlbmRpZiAvKiBTT0xBUklTNyAqLworI2VuZGlm IC8qIFNPTEFSSVM4ICovCisjZW5kaWYgLyogU09MQVJJUzkgKi8KKyNlbmRpZiAvKiBTT0xBUklT MTAgKi8KKyNlbmRpZiAvKiBTT0xBUklTMTEgKi8KKyNlbmRpZiAvKiBQbGFuOSAqLworI2VuZGlm IC8qIExZTlhPUyAqLworI2VuZGlmIC8qIF8zODZCU0QgKi8KKyNlbmRpZiAvKiBfX2xpbnV4X18g Ki8KKyNlbmRpZiAvKiBRTlg2ICovCisjZW5kaWYgLyogTkVVVFJJTk8gKi8KKyNlbmRpZiAvKiBR TlggKi8KKyNlbmRpZiAvKiBVVzcgKi8KKyNlbmRpZiAvKiBPVTggKi8KKyNlbmRpZiAvKiBQVFgg Ki8KKyNlbmRpZiAvKiBQT1NJWCAqLworCisjaWZkZWYgVVRTMjQKKyNkZWZpbmUgSEVSQUxEICIg QW1kYWhsIFVUUyAyLjQiCisjZW5kaWYgLyogVVRTMjQgKi8KKworI2lmZGVmIFVUU1YKKyNkZWZp bmUgSEVSQUxEICIgQW1kYWhsIFVUUyBWIgorI2VuZGlmIC8qIFVUU1YgKi8KKworI2lmZGVmIFZY VkUKKyNkZWZpbmUgSEVSQUxEICIgQ0RDIFZYL1ZFIDUuMi4xIFN5c3RlbSBWIgorI2VuZGlmIC8q IFZYVkUgKi8KKworI2lmZGVmIFNDTzIzNAorI2lmZGVmIEhFUkFMRAorI3VuZGVmIEhFUkFMRAor I2VuZGlmIC8qIEhFUkFMRCAqLworI2RlZmluZSBIRVJBTEQgIiBTQ08gWEVOSVggMi4zLjQiCisj ZWxzZQorI2lmZGVmIENLX1NDTzMyVjQKKyNpZmRlZiBIRVJBTEQKKyN1bmRlZiBIRVJBTEQKKyNl bmRpZiAvKiBIRVJBTEQgKi8KKyNpZmRlZiBPRFQzMAorI2RlZmluZSBIRVJBTEQgIiBTQ08gT0RU IDMuMCIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIFNDTyBVTklYLzM4NiBWNCIKKyNlbmRpZiAv KiBPRFQzMCAqLworI2Vsc2UKKyNpZmRlZiBDS19TQ09WNQorI2lmZGVmIEhFUkFMRAorI3VuZGVm IEhFUkFMRAorI2VuZGlmIC8qIEhFUkFMRCAqLworI2lmZGVmIFNDT19PU1I1MDcKKyNkZWZpbmUg SEVSQUxEICIgU0NPIE9wZW5TZXJ2ZXIgUjUuMC43IgorI2Vsc2UKKyNpZmRlZiBTQ09fT1NSNTA2 QQorI2RlZmluZSBIRVJBTEQgIiBTQ08gT3BlblNlcnZlciBSNS4wLjZhIgorI2Vsc2UKKyNpZmRl ZiBTQ09fT1NSNTA2CisjZGVmaW5lIEhFUkFMRCAiIFNDTyBPcGVuU2VydmVyIFI1LjAuNiIKKyNl bHNlCisjaWZkZWYgU0NPX09TUjUwNQorI2RlZmluZSBIRVJBTEQgIiBTQ08gT3BlblNlcnZlciBS NS4wLjUiCisjZWxzZQorI2lmZGVmIFNDT19PU1I1MDQKKyNkZWZpbmUgSEVSQUxEICIgU0NPIE9w ZW5TZXJ2ZXIgUjUuMC40IgorI2Vsc2UKKyNpZmRlZiBTQ09fT1NSNTAyCisjZGVmaW5lIEhFUkFM RCAiIFNDTyBPcGVuU2VydmVyIFI1LjAuMiIKKyNlbHNlCisjZGVmaW5lIEhFUkFMRCAiIFNDTyBP cGVuU2VydmVyIFI1LjAiCisjZW5kaWYgLyogU0NPX09TUjUwMiAqLworI2VuZGlmIC8qIFNDT19P U1I1MDQgKi8KKyNlbmRpZiAvKiBTQ09fT1NSNTA1ICovCisjZW5kaWYgLyogU0NPX09TUjUwNiAq LworI2VuZGlmIC8qIFNDT19PU1I1MDZBICovCisjZW5kaWYgLyogU0NPX09TUjUwNyAqLworI2Vs c2UKKyNpZmRlZiBYRU5JWAorI2lmZGVmIEhFUkFMRAorI3VuZGVmIEhFUkFMRAorI2VuZGlmIC8q IEhFUkFMRCAqLworI2lmZGVmIE1fVU5JWAorI2RlZmluZSBIRVJBTEQgIiBTQ08gVU5JWC8zODYi CisjZWxzZQorI2lmZGVmIE1fSTM4NgorI2RlZmluZSBIRVJBTEQgIiBYZW5peC8zODYiCisjZWxz ZQorI2lmZGVmIE1fSTI4NgorI2RlZmluZSBIRVJBTEQgIiBYZW5peC8yODYiCisjZWxzZQorI2Rl ZmluZSBIRVJBTEQgIiBYZW5peCIKKyNlbmRpZiAvKiBNX0kyODYgKi8KKyNlbmRpZiAvKiBNX0kz ODYgKi8KKyNlbmRpZiAvKiBNX1VOSVggKi8KKyNlbmRpZiAvKiBYRU5JWCAgKi8KKyNlbmRpZiAv KiBDS19TQ09WNSAqLworI2VuZGlmIC8qIENLX1NDT1YzMlY0ICovCisjZW5kaWYgLyogU0NPMjM0 ICovCisKKyNpZmRlZiBaSUxPRworI2RlZmluZSBIRVJBTEQgIiBaaWxvZyBTODAwMCBaZXVzIDMu MjErIgorI2VuZGlmIC8qIFpJTE9HICovCisKKyNpZmRlZiBVVEVLCisjZGVmaW5lIEhFUkFMRCAi IFVUZWsiCisjZW5kaWYgLyogVVRFSyAqLworCisvKiBDYXRjaC1hbGxzIGZvciBhbnl0aGluZyBu b3QgZGVmaW5lZCBleHBsaWNpdGx5IGFib3ZlICovCisKKyNpZm5kZWYgSEVSQUxECisjaWZkZWYg U1ZSNAorI2lmZGVmIGkzODYKKyNkZWZpbmUgSEVSQUxEICIgQVQmVCBTeXN0ZW0gVi8zODYgUjQi CisjZWxzZQorI2lmZGVmIEFNSVgKKyNkZWZpbmUgSEVSQUxEICIgQ29tbW9kb3JlIEFtaWdhIFN5 c3RlbSBWL202OGsgUjQiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiBBVCZUIFN5c3RlbSBWIFI0 IgorI2VuZGlmIC8qIEFNSVggKi8KKyNlbmRpZiAvKiBpMzg2ICovCisjZWxzZQorI2lmZGVmIFNW UjMKKyNkZWZpbmUgSEVSQUxEICIgQVQmVCBTeXN0ZW0gViBSMyIKKyNlbHNlCisjaWZkZWYgQVRU U1YKKyNkZWZpbmUgSEVSQUxEICIgQVQmVCBTeXN0ZW0gSUlJIC8gU3lzdGVtIFYiCisjZWxzZQor I2lmZGVmIEJTRDQzCisjaWZkZWYgcGRwMTEKKyNkZWZpbmUgSEVSQUxEICIgMi4xMCBCU0QgUERQ LTExIgorI2Vsc2UKKyNpZmRlZiB2YXgKKyNkZWZpbmUgSEVSQUxEICIgNC4zIEJTRCBWQVgiCisj ZWxzZQorI2RlZmluZSBIRVJBTEQgIiA0LjMgQlNEIgorI2VuZGlmIC8qIHZheCAqLworI2VuZGlm IC8qIHBkcDExICovCisjZWxzZQorI2lmZGVmIEJTRDQKKyNpZmRlZiB2YXgKKyNkZWZpbmUgSEVS QUxEICIgNC4yIEJTRCBWQVgiCisjZWxzZQorI2RlZmluZSBIRVJBTEQgIiA0LjIgQlNEIgorI2Vu ZGlmIC8qIHZheCAqLworI2Vsc2UKKyNpZmRlZiBWNworI2RlZmluZSBIRVJBTEQgIiBVTklYIFZl cnNpb24gNyIKKyNlbmRpZiAvKiBWNyAqLworI2VuZGlmIC8qIEJTRDQgKi8KKyNlbmRpZiAvKiBC U0Q0MyAqLworI2VuZGlmIC8qIEFUVFNWICovCisjZW5kaWYgLyogU1ZSMyAqLworI2VuZGlmIC8q IFNWUjQgKi8KKyNlbmRpZiAvKiBIRVJBTEQgKi8KKyNlbmRpZiAvKiBIRVJBTEQgKi8KKworI2lm ZGVmIE9TMgorI2lmZGVmIEhFUkFMRAorI3VuZGVmIEhFUkFMRAorI2VuZGlmIC8qIEhFUkFMRCAq LworI2lmZGVmIE5UCisjZGVmaW5lIEhFUkFMRCAiIDMyLWJpdCBXaW5kb3dzIgorI2Vsc2UgLyog TlQgKi8KKyNkZWZpbmUgSEVSQUxEICIgMzItYml0IE9TLzIiCisjZW5kaWYgLyogTlQgKi8KKyNl bmRpZiAvKiBPUy8yICovCisKKyNpZm5kZWYgSEVSQUxECisjZGVmaW5lIEhFUkFMRCAiIFVua25v d24gVmVyc2lvbiIKKyNlbmRpZiAvKiBIRVJBTEQgKi8KKworLyogSGFyZHdhcmUgdHlwZSAqLwor CisjaWZkZWYgdmF4CQkJCS8qIERFQyBWQVggKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tD UFUgInZheCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qICB2YXggKi8KKyNpZmRlZiBw ZHAxMQkJCQkvKiBERUMgUERQLTExICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJw ZHAxMSIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIHBkcDExICovCisKKyNpZmRlZiBf X0FMUEhBCQkJCS8qIERFQyBBbHBoYSAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAi QWxwaGEiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBfX0FMUEhBICovCisKKyNpZmRl ZiBfX2FscGhhCQkJCS8qIE9TRi8xIHVzZXMgbG93ZXJjYXNlLi4uICovCisjaWZuZGVmIENLQ1BV CisjZGVmaW5lIENLQ1BVICJBbHBoYSIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIF9f YWxwaGEgKi8KKworI2lmZGVmIERHVVgJCQkJLyogT3ZlcnJpZGUgTW90b3JvbGEgODhrIGFzc3Vt cHRpb24gKi8KKyNpZm5kZWYgQ0tDUFUJCQkJLyogTmV3IEFWaWlPTnMgYXJlIEludGVsIGJhc2Vk Li4uICovCisjaWZkZWYgaTU4NgorI2RlZmluZSBDS0NQVSAiaTU4NiIKKyNlbHNlCisjaWZkZWYg aTQ4NgorI2RlZmluZSBDS0NQVSAiaTQ4NiIKKyNlbHNlCisjaWZkZWYgaTM4NgorI2RlZmluZSBD S0NQVSAiaTM4NiIKKyNlbmRpZiAvKiBpMzg2ICovCisjZW5kaWYgLyogaTQ4NiAqLworI2VuZGlm IC8qIGk1ODYgKi8KKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIERHVVggKi8KKworLyog SFAgOTAwMCAqLworCisjaWZkZWYgX19ocDkwMDBzNzAwCisjaWZuZGVmIENLQ1BVCisjZGVmaW5l IENLQ1BVICJocDkwMDBzNzAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogX19ocDkw MDBzNzAwICovCisKKyNpZmRlZiBfX2hwOTAwMHM4MDAKKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUg Q0tDUFUgImhwOTAwMHM4MDAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBfX2hwOTAw MHM4MDAgKi8KKworI2lmZGVmIF9faHA5MDAwczUwMAorI2lmbmRlZiBDS0NQVQorI2RlZmluZSBD S0NQVSAiaHA5MDAwczUwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIF9faHA5MDAw czUwMCAqLworCisjaWZkZWYgX19ocDkwMDBzNDAwCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENL Q1BVICJocDkwMDBzNDAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogX19ocDkwMDBz NDAwICovCisKKyNpZmRlZiBfX2hwOTAwMHMzMDAKKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tD UFUgImhwOTAwMHMzMDAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBfX2hwOTAwMHMz MDAgKi8KKworI2lmZGVmIF9faHA5MDAwczIwMAorI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQ VSAiaHA5MDAwczIwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIF9faHA5MDAwczIw MCAqLworCisjaWZkZWYgbTg4MDAwCQkJCS8qIE1vdG9yb2xhIDg4MDAwICovCisjaWZuZGVmIENL Q1BVCisjZGVmaW5lIENLQ1BVICJtYzg4MDAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYg LyogbTg4MDAwICovCisjaWZkZWYgX191c2luZ19NODhLQkNTCQkJLyogREcgc3ltYm9sIGZvciBN b3Rvcm9sYSA4ODAwMCAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAibWM4ODAwMCIK KyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIF9fdXNpbmdfTTg4S0JDUyAqLworI2lmZGVm IG04OGsJCQkJLyogTW90b3JvbGEgc3ltYm9sIGZvciA4ODAwMCAqLworI2lmbmRlZiBDS0NQVQor I2RlZmluZSBDS0NQVSAibWM4ODAwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIG04 OGsgKi8KKyNpZmRlZiBtYzY4MDQwCQkJCS8qIE1vdG9yb2xhIDY4MDQwICovCisjaWZuZGVmIENL Q1BVCisjZGVmaW5lIENLQ1BVICJtYzY4MDQwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYg LyogbWM2ODA0MCAqLworI2lmZGVmIG1jNjgwMzAJCQkJLyogTW90b3JvbGEgNjgwMzAgKi8KKyNp Zm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgIm1jNjgwMzAiCisjZW5kaWYgLyogQ0tDUFUgKi8K KyNlbmRpZiAvKiBtYzY4MDMwICovCisjaWZkZWYgbWM2ODAyMAkJCQkvKiBNb3Rvcm9sYSA2ODAy MCAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAibWM2ODAyMCIKKyNlbmRpZiAvKiBD S0NQVSAqLworI2VuZGlmIC8qIG1jNjgwMjAgKi8KKyNpZmRlZiBtYzY4MDEwCQkJCS8qIE1vdG9y b2xhIDY4MDEwICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJtYzY4MDEwIgorI2Vu ZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogbWM2ODAxMCAqLworI2lmZGVmIG1jNjgwMDAJCQkJ LyogTW90b3JvbGEgNjgwMDAgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgIm1jNjgw MDAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBtYzY4MDAwICovCisjaWZkZWYgbWM2 OGsJCQkJLyogRGl0dG8gKHVzZWQgYnkgRElBQiBEUzkwKSAqLworI2lmbmRlZiBDS0NQVQorI2Rl ZmluZSBDS0NQVSAibWM2ODAwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIG1jNjhr ICovCisjaWZkZWYgbTY4CQkJCS8qIERpdHRvICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENL Q1BVICJtYzY4MDAwIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogbTY4ICovCisjaWZk ZWYgbTY4awkJCQkvKiBEaXR0byAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAibWM2 ODAwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIG02OGsgKi8KKworI2lmZGVmIGlh NjQJCQkJLyogSUE2NCAvIEl0YW5pdW0gKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUg ImlhNjQiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBpNjg2ICovCisKKyNpZmRlZiBp Njg2CQkJCS8qIEludGVsIDgwNjg2ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJp Njg2IgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogaTY4NiAqLworCisjaWZkZWYgaTU4 NgkJCQkvKiBJbnRlbCA4MDU4NiAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAiaTU4 NiIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIGk1ODYgKi8KKworI2lmZGVmIGk0ODYJ CQkJLyogSW50ZWwgODA0ODYgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgImk0ODYi CisjZW5kaWYgLyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBpODA0ODYgKi8KKyNpZmRlZiBpMzg2CQkJ CS8qIEludGVsIDgwMzg2ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJpMzg2Igor I2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogaTgwMzg2ICovCisjaWZkZWYgaTI4NgkJCQkv KiBJbnRlbCA4MDI4NiAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAiaTI4NiIKKyNl bmRpZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIGkyODYgKi8KKyNpZmRlZiBpMTg2CQkJCS8qIElu dGVsIDgwMTg2ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJpMTg2IgorI2VuZGlm IC8qIENLQ1BVICovCisjZW5kaWYgLyogaTE4NiAqLworI2lmZGVmIE1fSTU4NgkJCQkvKiBJbnRl bCA4MDU4NiAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAiaTU4NiIKKyNlbmRpZiAv KiBDS0NQVSAqLworI2VuZGlmIC8qIE1fSTU4NiAqLworI2lmZGVmIE1fSTQ4NgkJCQkvKiBJbnRl bCA4MDQ4NiAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAiaTQ4NiIKKyNlbmRpZiAv KiBDS0NQVSAqLworI2VuZGlmIC8qIE1fSTQ4NiAqLworI2lmZGVmIF9NX0kzODYJCQkJLyogSW50 ZWwgODAzODYgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgImkzODYiCisjZW5kaWYg LyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBfTV9JMzg2ICovCisjaWZkZWYgTV9JMjg2CQkJCS8qIElu dGVsIDgwMjg2ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJpMjg2IgorI2VuZGlm IC8qIENLQ1BVICovCisjZW5kaWYgLyogTV9JMjg2ICovCisjaWZkZWYgTV9JODYJCQkJLyogSW50 ZWwgODB4ODYgKi8KKyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgIml4ODYiCisjZW5kaWYg LyogQ0tDUFUgKi8KKyNlbmRpZiAvKiBNX0k4NiAqLworI2lmZGVmIHNwYXJjCQkJCS8qIFNVTiBT UEFSQyAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAic3BhcmMiCisjZW5kaWYgLyog Q0tDUFUgKi8KKyNlbmRpZiAvKiBzcGFyYyAqLworI2lmZGVmIG1pcHMJCQkJLyogTUlQUyBSSVND IHByb2Nlc3NvciAqLworI2lmbmRlZiBDS0NQVQorI2RlZmluZSBDS0NQVSAibWlwcyIKKyNlbmRp ZiAvKiBDS0NQVSAqLworI2VuZGlmIC8qIG1pcHMgKi8KKyNpZmRlZiBfSUJNUjIJCQkJLyogSUJN IFJTLzYwMDAgKi8KKyNpZm5kZWYgQ0tDUFUJCQkJLyogKHdoYXQgZG8gdGhleSBjYWxsIHRoZSBj aGlwPykgKi8KKyNkZWZpbmUgQ0tDUFUgInJzNjAwMCIKKyNlbmRpZiAvKiBDS0NQVSAqLworI2Vu ZGlmIC8qIHJzNjAwMCAqLworI2lmZGVmIHUzYjUJCQkJLyogV0UzMjAwMCBNQUMtMzIsIEFUJlQg M0J4ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJ1M2I1IgorI2VuZGlmIC8qIENL Q1BVICovCisjZW5kaWYgLyogdTNiNSAqLworI2lmZGVmIG4zYgorI2lmbmRlZiBDS0NQVQorI2Rl ZmluZSBDS0NQVSAibjNiIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyogbjNiICovCisj aWZkZWYgdTNiCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJ1M2IiCisjZW5kaWYgLyog Q0tDUFUgKi8KKyNlbmRpZiAvKiB1M2IgKi8KKyNpZmRlZiBuMTYJCQkJLyogRW5jb3JlIE11bHRp bWF4ICovCisjaWZuZGVmIENLQ1BVCisjZGVmaW5lIENLQ1BVICJuMTYiCisjZW5kaWYgLyogQ0tD UFUgKi8KKyNlbmRpZiAvKiBuMTYgKi8KKyNpZmRlZiB1MzcwCQkJCS8qIElCTSAzNzAgKi8KKyNp Zm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgInUzNzAiCisjZW5kaWYgLyogQ0tDUFUgKi8KKyNl bmRpZiAvKiB1MzcwICovCisjaWZkZWYgTUFDCQkJCS8qIE1hY2ludG9zaCBjYXRjaC1hbGwgKi8K KyNpZm5kZWYgQ0tDUFUKKyNkZWZpbmUgQ0tDUFUgIm1jNjgwMDAiCisjZW5kaWYgLyogQ0tDUFUg Ki8KKyNlbmRpZiAvKiBNQUMgKi8KKworI2lmZGVmIFNUUkFUVVMKKyNpZm5kZWYgQ0tDUFUKKyNp ZmRlZiBfX0k4NjBfXworI2RlZmluZSBDS0NQVSAiSTg2MCBGYW1pbHkiCisjZWxzZQorI2lmZGVm IF9fTUM2OEtfXworI2RlZmluZSBDS0NQVSAiTUM2ODB4MCBGYW1pbHkiCisjZWxzZQorI2RlZmlu ZSBDS0NQVSAiU3RyYXR1cyB1bmtub3duIHByb2Nlc3NvciIKKyNlbmRpZiAvKiBfX01DNjhLX18g Ki8KKyNlbmRpZiAvKiBfX0k4NjBfXyAqLworI2VuZGlmIC8qIENLQ1BVICovCisjZW5kaWYgLyog U1RSQVRVUyAqLworCisjaWZkZWYgQ09NTUVOVAorI2lmbmRlZiBDS0NQVQkJCQkvKiBBbGwgb3Ro ZXJzICovCisjZGVmaW5lIENLQ1BVICJ1bmtub3duIgorI2VuZGlmIC8qIENLQ1BVICovCisjZW5k aWYgLyogQ09NTUVOVCAqLworCisjZW5kaWYgLyogQ0tVVkVSX0ggKi8KCmRpZmYgLS1naXQgYS9j a2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXhsYS5jIGIvY2tlcm1pdC05 LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V4bGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5kNTU2NmZhCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAu MzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9ja3V4bGEuYwpAQCAtMCwwICsxLDc1ODggQEAKKyNp bmNsdWRlICJja2NzeW0uaCIKKworI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIEluY2x1ZGVzLi4u ICovCisjaW5jbHVkZSAiY2tja2VyLmgiCisjaW5jbHVkZSAiY2t1Y21kLmgiCisjaW5jbHVkZSAi Y2tjeGxhLmgiCisKKyNpZmRlZiBOT1hGRVIKKyNkZWZpbmUgemRzdHVmZihhKQorI2VuZGlmIC8q IE5PWEZFUiAqLworCisjaWZuZGVmIE5PQ1NFVFMKK2NoYXIgKnhsYXYgPSAiQ2hhcmFjdGVyIFNl dCBUcmFuc2xhdGlvbiA5LjAuMDQ0LCAyIEp1biAyMDExIjsKKworLyogIEMgSyBVIFggTCBBICAq LworCisvKiAgQy1LZXJtaXQgdGFibGVzIGFuZCBmdW5jdGlvbnMgc3VwcG9ydGluZyBjaGFyYWN0 ZXIgc2V0IHRyYW5zbGF0aW9uLiAgKi8KKy8qCisgIEF1dGhvcjogRnJhbmsgZGEgQ3J1eiA8ZmRj QGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNhZGVtaWMgSW5mb3JtYXRp b24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEs CisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcg WW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5H LlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1 bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorKi8KKworLyogQ2hhcmFjdGVyIHNl dCB0cmFuc2xhdGlvbiBkYXRhIGFuZCBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIGludCB6aW5jbnQ7 CQkJLyogRmlsZSBpL28gbWFjcm9zIGFuZCB2YXJpYWJsZXMgKi8KK2V4dGVybiBjaGFyICp6aW5w dHI7CitleHRlcm4gaW50IHpvdXRjbnQ7CitleHRlcm4gY2hhciAqem91dHB0cjsKK2V4dGVybiBp bnQgYnl0ZW9yZGVyOworZXh0ZXJuIGludCB4ZnJ4bGE7CisKK2ludCB0c2xldmVsICA9IFRTX0ww OwkJCS8qIFRyYW5zZmVyIHN5bnRheCBsZXZlbCAoMCwxLDIpICovCitpbnQgdGNoYXJzZXQgPSBU Q19UUkFOU1A7CQkvKiBUcmFuc2ZlciBzeW50YXggY2hhcmFjdGVyIHNldCAqLworaW50IHRjc19z YXZlID0gLTE7CQkJLyogRm9yIHNhdmUvcmVzdG9yZSB0ZXJtIGNoYXJzZXQgKi8KK2ludCB0Y3Nf dHJhbnNwID0gMDsJCQkvKiBUZXJtIGNoYXJzZXQgaXMgVFJBTlNQQVJFTlQgZmxhZyAqLworCisj aWZkZWYgQ0tPVU5JCitpbnQgdGNzciAgICAgPSBUWF84ODU5XzE7CQkvKiBSZW1vdGUgdGVybWlu YWwgY2hhcmFjdGVyIHNldCAqLworI2Vsc2UgLyogQ0tPVU5JICovCitpbnQgdGNzciAgICAgPSBG Q19VU0FTQ0lJOworI2VuZGlmIC8qIENLT1VOSSAqLworaW50IGxhbmd1YWdlID0gTF9VU0FTQ0lJ OwkJLyogTGFuZ3VhZ2UgKi8KKworI2lmZGVmIFVOSUNPREUKK2ludCB1Y3Nib20gPSAxOwkJCQkv KiBBZGQgQk9NIHRvIG5ldyBVQ1MgZmlsZXM/ICovCitpbnQgdWNzb3JkZXIgPSAtMTsJCQkvKiBE ZWZhdWx0IGJ5dGUgb3JkZXIgZm9yIFVDUyBmaWxlcyAqLworaW50IGZpbGVvcmRlciA9IC0xOwkJ CS8qIEJ5dGUgb3JkZXIgb2YgY3VycmVudCBmaWxlICovCisJCQkJCS8qIDAgPSBCRSwgMSA9IExF ICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworLyoKKyAgRGVmYXVsdCBsb2NhbCBmaWxlIGFuZCB0 ZXJtaW5hbCBjaGFyYWN0ZXIgc2V0LgorICBOb3JtYWxseSBBU0NJSSwgYnV0IGZvciBzb21lIHN5 c3RlbXMgd2Uga25vdyBvdGhlcndpc2UuCisqLworaW50IGZjc19zYXZlID0gLTE7CisjaWZkZWYg ZGF0YWdlbmVyYWwJCQkvKiBEYXRhIEdlbmVyYWwgQU9TL1ZTICovCitpbnQgZmNoYXJzZXQgPSBG Q19ER01DUzsJCS8qIHVzZXMgdGhlIERHIEludGVybmF0aW9uYWwgc2V0ICovCitpbnQgZGNzZXQ4 ICAgPSBGQ19ER01DUzsKK2ludCBkY3NldDcgICA9IEZDX1VTQVNDSUk7CitpbnQgdGNzbCAgICAg PSBGQ19ER01DUzsKKyNlbHNlCisjaWZkZWYgTkVYVAkJCQkvKiBUaGUgTmVYVCB3b3Jrc3RhdGlv biAqLworaW50IGZjaGFyc2V0ID0gRkNfTkVYVDsJCQkvKiB1c2VzIGl0cyBvd24gOC1iaXQgc2V0 ICovCitpbnQgZGNzZXQ4ICAgPSBGQ19ORVhUOworaW50IGRjc2V0NyAgID0gRkNfVVNBU0NJSTsK K2ludCB0Y3NsICAgICA9IEZDX05FWFQ7CisjZWxzZQorI2lmZGVmIE1BQwkJCQkvKiBUaGUgTWFj aW50b3NoICovCitpbnQgZmNoYXJzZXQgPSBGQ19BUFBRRDsJCS8qIHVzZXMgYW4gZXh0ZW5kZWQg dmVyc2lvbiBvZiAqLworaW50IGRjc2V0OCAgID0gRkNfQVBQUUQ7CitpbnQgZGNzZXQ3ICAgPSBG Q19VU0FTQ0lJOworaW50IHRjc2wgICAgID0gRkNfQVBQUUQ7CQkvKiBBcHBsZSBRdWlja2RyYXcg Ki8KKyNlbHNlCisjaWZkZWYgQVVYCitpbnQgZmNoYXJzZXQgPSBGQ19BUFBRRDsJCS8qIERpdHRv IGZvciBBcHBsZSBBL1VYICovCitpbnQgZGNzZXQ4ICAgPSBGQ19BUFBRRDsKK2ludCBkY3NldDcg ICA9IEZDX1VTQVNDSUk7CitpbnQgdGNzbCAgICAgPSBGQ19BUFBRRDsKKyNlbHNlCisjaWZkZWYg QU1JR0EJCQkJLyogVGhlIENvbW1vZG9yZSBBbWlnYSAqLworaW50IGZjaGFyc2V0ID0gRkNfMUxB VElOOwkJLyogdXNlcyBMYXRpbi0xICovCitpbnQgZGNzZXQ4ICAgPSBGQ18xTEFUSU47CitpbnQg ZGNzZXQ3ICAgPSBGQ19VU0FTQ0lJOworaW50IHRjc2wgICAgID0gRkNfMUxBVElOOworI2Vsc2UJ CQkJCS8qIEFsbCBvdGhlcnMgKi8KKyNpZmRlZiBDS09VTkkgCQkJCS8qIE9TLzIgVW5pY29kZSAq LworaW50IGZjaGFyc2V0ID0gRkNfMUxBVElOOworaW50IGRjc2V0OCAgID0gRkNfMUxBVElOOwor aW50IGRjc2V0NyAgID0gRkNfVVNBU0NJSTsKK2ludCB0Y3NsICAgICA9IFRYXzg4NTlfMTsKK2lu dCBwcm5jcyAgICA9IFRYX0NQNDM3OworI2Vsc2UJCQkJCS8qIEFsbCBvdGhlcnMgKi8KK2ludCBm Y2hhcnNldCA9IEZDX1VTQVNDSUk7CQkvKiB1c2UgQVNDSUkgYnkgZGVmYXVsdCAqLworaW50IGRj c2V0OCAgID0gRkNfMUxBVElOOwkJLyogQnV0IGRlZmF1bHQgOC1iaXQgc2V0IGlzIExhdGluLTEg Ki8KK2ludCBkY3NldDcgICA9IEZDX1VTQVNDSUk7CitpbnQgdGNzbCAgICAgPSBGQ19VU0FTQ0lJ OworaW50IHBybmNzICAgID0gRkNfQ1A0Mzc7CisjZW5kaWYgLyogQ0tPVU5JICovCisjZW5kaWYg LyogQU1JR0EgKi8KKyNlbmRpZiAvKiBBVVggKi8KKyNlbmRpZiAvKiBNQUMgKi8KKyNlbmRpZiAv KiBORVhUICovCisjZW5kaWYgLyogZGF0YWdlbmVyYWwgKi8KKworaW50IHNfY3NldCA9IFhNT0RF X0E7CQkJLyogU0VORCBjaGFyc2V0IHNlbGVjdGlvbiA9IEFVVE8gKi8KK2ludCByX2NzZXQgPSBY TU9ERV9BOwkJCS8qIFJFQ1YgY2hhcnNldCBzZWxlY3Rpb24gPSBBVVRPICovCitpbnQgYWZjc2V0 W01BWEZDU0VUUysxXTsJCS8qIENoYXJhY3Rlci1zZXQgYXNzb2NpYXRpb25zICovCitpbnQgYXhj c2V0W01BWFRDU0VUUysxXTsKK2ludCB4bGF0eXBlID0gWExBX05PTkU7CQkJLyogVHJhbnNsYXRp b24gdHlwZSAqLworCisjaWZkZWYgVU5JQ09ERQorI2lmZGVmIENLX0FOU0lDCitleHRlcm4gaW50 ICgqeGxfdXRjW01BWFRDU0VUUysxXSkoVVNIT1JUKTsgIC8qIFVuaWNvZGUgdG8gVENTICovCitl eHRlcm4gaW50ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoVVNIT1JUKTsgIC8qIFVuaWNvZGUgdG8g RkNTICovCitleHRlcm4gVVNIT1JUICgqeGxfdGN1W01BWFRDU0VUUysxXSkoQ0hBUik7IC8qIFRD UyB0byBVbmljb2RlICovCitleHRlcm4gVVNIT1JUICgqeGxfZmN1W01BWEZDU0VUUysxXSkoQ0hB Uik7IC8qIEZDUyB0byBVbmljb2RlICovCisjZWxzZQorZXh0ZXJuIGludCAoKnhsX3V0Y1tNQVhU Q1NFVFMrMV0pKCk7CitleHRlcm4gaW50ICgqeGxfdWZjW01BWEZDU0VUUysxXSkoKTsKK2V4dGVy biBVU0hPUlQgKCp4bF90Y3VbTUFYVENTRVRTKzFdKSgpOworZXh0ZXJuIFVTSE9SVCAoKnhsX2Zj dVtNQVhGQ1NFVFMrMV0pKCk7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KKyNlbmRpZiAvKiBVTklD T0RFICovCisKKy8qIEJ1cmVhdWNyYWN5IHNlY3Rpb24gKi8KKworX1BST1RPVFlQKCBDSEFSIHhu ZWwxLCAoQ0hBUiBjKSApOwkvKiBOZVhUIHRvIExhdGluLTEgKi8KK19QUk9UT1RZUCggQ0hBUiB4 bDE0MywgKENIQVIgYykgKTsJLyogTGF0aW4tMSB0byBJQk0gQ1A0MzcgKi8KK19QUk9UT1RZUCgg Q0hBUiB4bDFhcywgKENIQVIgYykgKTsJLyogTGF0aW4tMSB0byBVUyBBU0NJSSAqLworX1BST1RP VFlQKCBDSEFSIHpsMWFzLCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0xIHRvIFVTIEFTQ0lJICovCisK KyNpZmRlZiBDWVJJTExJQworX1BST1RPVFlQKCBDSEFSIHhhc3NrLCAoQ0hBUiBjKSApOwkvKiBB U0NJSSB0byBTaG9ydCBLT0kgKi8KK19QUk9UT1RZUCggQ0hBUiB4c2tjeSwgKENIQVIgYykgKTsJ LyogU2hvcnQgS09JIHRvIExhdGluL0N5cmlsbGljICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8K KworI2lmZGVmIExBVElOMgorX1BST1RPVFlQKCBDSEFSIHhuZWwyLCAoQ0hBUiBjKSApOwkvKiBO ZVhUIHRvIExhdGluLTIgKi8KK19QUk9UT1RZUCggQ0hBUiB4bDI0MywgKENIQVIgYykgKTsJLyog TGF0aW4tMiB0byBJQk0gQ1A0MzcgKi8KK19QUk9UT1RZUCggQ0hBUiB4bDJhcywgKENIQVIgYykg KTsJLyogTGF0aW4tMiB0byBVUyBBU0NJSSAqLworX1BST1RPVFlQKCBDSEFSIHpsMmFzLCAoQ0hB UiBjKSApOwkvKiBMYXRpbi0yIHRvIFVTIEFTQ0lJICovCitfUFJPVE9UWVAoIENIQVIgeGwycjgs IChDSEFSIGMpICk7CS8qIExhdGluLTIgdG8gSFAgKi8KK19QUk9UT1RZUCggQ0hBUiB4bDJsOSwg KENIQVIgYykgKTsJLyogTGF0aW4tMiB0byBMYXRpbi05ICovCitfUFJPVE9UWVAoIENIQVIgeGw5 bDIsIChDSEFSIGMpICk7CS8qIExhdGluLTkgdG8gTGF0aW4tMiAqLworX1BST1RPVFlQKCBDSEFS IHhsMm16LCAoQ0hBUiBjKSApOwkvKiBMYXRpbi0yIHRvIE1hem92aWEgKi8KK19QUk9UT1RZUCgg Q0hBUiB4bXpsMiwgKENIQVIgYykgKTsJLyogTWF6b3ZpYSB0byBMYXRpbi0yICovCitfUFJPVE9U WVAoIENIQVIgeGwxbXosIChDSEFSIGMpICk7CS8qIExhdGluLTEgdG8gTWF6b3ZpYSAqLworX1BS T1RPVFlQKCBDSEFSIHhtemwxLCAoQ0hBUiBjKSApOwkvKiBNYXpvdmlhIHRvIExhdGluLTEgKi8K K19QUk9UT1RZUCggQ0hBUiB4bXpsOSwgKENIQVIgYykgKTsJLyogTGF0aW4tOSB0byBNYXpvdmlh ICovCitfUFJPVE9UWVAoIENIQVIgeGw5bXosIChDSEFSIGMpICk7CS8qIE1hem92aWEgdG8gTGF0 aW4tOSAqLworI2VuZGlmIC8qIExBVElOMiAqLworCisvKiBUcmFuc2ZlciBjaGFyYWN0ZXItc2V0 IGluZm8gKi8KKworc3RydWN0IGNzaW5mbyB0Y3NpbmZvW10gPSB7CisvKiAgTmFtZSAgICAgICAg ICAgICAgc2l6ZSBjb2RlICAgICAgZGVzaWduYXRvciBhbHBoYWJldCBrZXl3b3JkICAgICAgICAg ICAgKi8KKyAgIlRSQU5TUEFSRU5UIiwgICAgICAgMjU2LFRDX1RSQU5TUCwgIiIsICAgICAgQUxf VU5LLCAgInRyYW5zcGFyZW50IiwgIC8qIDAgKi8KKyAgIkFTQ0lJIiwgICAgICAgICAgICAgMTI4 LFRDX1VTQVNDSUksIiIsICAgICAgQUxfUk9NQU4sImFzY2lpIiwgICAgICAgIC8qIDEgKi8KKyAg IklTTyA4ODU5LTEgTGF0aW4tMSIsMjU2LFRDXzFMQVRJTiwgIkk2LzEwMCIsQUxfUk9NQU4sImxh dGluMS1pc28iLCAgIC8qIDIgKi8KKyNpZmRlZiBMQVRJTjIKKyAgIklTTyA4ODU5LTIgTGF0aW4t MiIsMjU2LFRDXzJMQVRJTiwgIkk2LzEwMSIsQUxfUk9NQU4sImxhdGluMi1pc28iLCAgIC8qIDMg Ki8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyNpZmRlZiBDWVJJTExJQworICAvKiA0ICovCisgICJJ U08gODg1OS01IExhdGluL0N5cmlsbGljIiwyNTYsVENfQ1lSSUxMLCJJNi8xNDQiLEFMX0NZUklM LCJjeXJpbGxpYy1pc28iLAorI2VuZGlmIC8qIENZUklMTElDICovCisjaWZkZWYgS0FOSkkKKyAg IkphcGFuZXNlIEVVQyIsMTYzODQsVENfSkVVQywgICJJMTQvODcvMTMiLCBBTF9KQVBBTiwgImV1 Yy1qcCIsICAgICAgIC8qIDUgKi8KKyNlbmRpZiAvKiBLQU5KSSAqLworI2lmZGVmIEhFQlJFVwor ICAvKiA2ICovCisgICJJU08gODg1OS04IExhdGluL0hlYnJldyIsMjU2LFRDX0hFQlJFVywiSTYv MTM4IixBTF9IRUJSRVcsImhlYnJldy1pc28iLAorI2VuZGlmIC8qIEhFQlJFVyAqLworI2lmZGVm IEdSRUVLCisgICJJU08gODg1OS03IExhdGluL0dyZWVrIiwyNTYsVENfR1JFRUssIkk2LzEyNiIs QUxfR1JFRUssImdyZWVrLWlzbyIsIC8qICA3ICovCisjZW5kaWYgLyogR1JFRUsgKi8KKyAgIklT TyA4ODU5LTE1IExhdGluLTkiLDI1NixUQ185TEFUSU4sIkk2LzIwMyIsQUxfUk9NQU4sImxhdGlu OS1pc28iLCAgLyogIDggKi8KKyAgIklTTyAxMDY0NiAvIFVuaWNvZGUgVUNTLTIiLDY0MDAwLFRD X1VDUzIsIkkxNjIiLEFMX1VOSVYsInVjczIiLCAgICAgLyogIDkgKi8KKyAgIklTTyAxMDY0NiAv IFVuaWNvZGUgVVRGLTgiLDY0MDAwLFRDX1VURjgsIkkxOTAiLEFMX1VOSVYsInV0ZjgiLCAgICAg LyogMTAgKi8KKyAgIiIsMCwwLCIiLDAsIiIKK307CitpbnQgbnRjc2V0cyA9IChzaXplb2YodGNz aW5mbykgLyBzaXplb2Yoc3RydWN0IGNzaW5mbykpIC0gMTsKKworc3RydWN0IGtleXRhYiB0Y3N0 YWJbXSA9IHsJCS8qIEtleXdvcmQgdGFibGUgZm9yICovCisgICAgImFzY2lpIiwgICAgICAgICBU Q19VU0FTQ0lJLCAwLAkvKiBTRVQgVFJBTlNGRVIgQ0hBUkFDVEVSLVNFVCAqLworI2lmZGVmIENZ UklMTElDCisgICAgImN5cmlsbGljLWlzbyIsICBUQ19DWVJJTEwsICAwLAorI2VuZGlmIC8qIENZ UklMTElDICovCisjaWZkZWYgR1JFRUsKKyAgICAiZWxvdDkyOC1ncmVlayIsIFRDX0dSRUVLLCAg IENNX0lOViwKKyNlbmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIEtBTkpJCisgICAgImV1Yy1qcCIs ICAgICAgICBUQ19KRVVDLCAgICAwLAorI2VuZGlmIC8qIEtBTkpJICovCisjaWZkZWYgR1JFRUsK KyAgICAiZ3JlZWstaXNvIiwgICAgIFRDX0dSRUVLLCAgIDAsCisjZW5kaWYgLyogR1JFRUsgKi8K KyNpZmRlZiBIRUJSRVcKKyAgICAiaGVicmV3LWlzbyIsICAgIFRDX0hFQlJFVywgIDAsCisjZW5k aWYgLyogSEVCUkVXICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgImlzby0xMDY0Ni11Y3MtMiIs IFRDX1VDUzIsICAgIENNX0lOViwgLyogSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiAqLworI2Vu ZGlmIC8qIFVOSUNPREUgKi8KKyAgICAiaXNvLTg4NTktMSIsICAgIFRDXzFMQVRJTiwgIENNX0lO ViwgLyogSVNPIExhdGluIEFscGhhYmV0IDEgKi8KKyAgICAiaXNvLTg4NTktMTUiLCAgIFRDXzlM QVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDkgKHllcykgKi8KKyAgICAiaXNv LTg4NTktMiIsICAgIFRDXzJMQVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDIg Ki8KKyNpZmRlZiBDWVJJTExJQworICAgICJpc28tODg1OS01IiwgICAgVENfQ1lSSUxMLCAgQ01f SU5WLCAvKiBJU08gTGF0aW4vQ3lyaWxsaWMgQWxwaGFiZXQgKi8KKyNlbmRpZiAvKiBDWVJJTExJ QyAqLworI2lmZGVmIEdSRUVLCisgICAgImlzby04ODU5LTciLCAgICBUQ19HUkVFSywgICBDTV9J TlYsIC8qIElTTyA4ODU5LTcgTGF0aW4vR3JlZWsgKi8KKyNlbmRpZiAvKiBHUkVFSyAqLworI2lm ZGVmIEhFQlJFVworICAgICJpc28tODg1OS04IiwgICAgVENfSEVCUkVXLCAgQ01fSU5WLCAvKiBJ U08gTGF0aW4vSGVicmV3ICovCisjZW5kaWYgLyogSEVCUkVXICovCisKKyNpZmRlZiBLQU5KSQor ICAgICJqYXBhbmVzZS1ldWMiLCAgVENfSkVVQywgICAgQ01fSU5WLAorI2VuZGlmIC8qIEtBTkpJ ICovCisgICAgImwiLCAgICAgICAgICAgICBUQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAg ICJsYSIsICAgICAgICAgICAgVENfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0Iiwg ICAgICAgICAgIFRDXzFMQVRJTiwgIENNX0FCUnxDTV9JTlYsCisgICAgImxhdGkiLCAgICAgICAg ICBUQ18xTEFUSU4sICBDTV9BQlJ8Q01fSU5WLAorICAgICJsYXRpbiIsICAgICAgICAgVENfMUxB VElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0aW4xLWlzbyIsICAgIFRDXzFMQVRJTiwgIDAs CisjaWZkZWYgTEFUSU4yCisgICAgImxhdGluMi1pc28iLCAgICBUQ18yTEFUSU4sICAwLAorI2Vu ZGlmIC8qIExBVElOMiAqLworICAgICJsYXRpbjktaXNvIiwgICAgVENfOUxBVElOLCAgMCwKKyAg ICAidHJhbnNwYXJlbnQiLCAgIFRDX1RSQU5TUCwgIDAsCisjaWZkZWYgVU5JQ09ERQorICAgICJ1 Y3MyIiwgICAgICAgICAgVENfVUNTMiwgICAgMCwKKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAg InVzLWFzY2lpIiwgICAgICBUQ19VU0FTQ0lJLCBDTV9JTlYsCisgICAgInVzYXNjaWkiLCAgICAg ICBUQ19VU0FTQ0lJLCBDTV9JTlYsCisjaWZkZWYgVU5JQ09ERQorICAgICJ1dGYtOCIsICAgICAg ICAgVENfVVRGOCwgICAgQ01fSU5WLAorICAgICJ1dGY4IiwgICAgICAgICAgVENfVVRGOCwgICAg MCwKKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgIiIsIDAsIDAKK307CitpbnQgbnRjcyA9IChz aXplb2YodGNzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOworCisvKiBGaWxlIGNo YXJhY3RlciBzZXQgaW5mb3JtYXRpb24gc3RydWN0dXJlLCBpbmRleGVkIGJ5IGNoYXJhY3RlciBz ZXQgY29kZSwgKi8KKy8qIGFzIGRlZmluZWQgaW4gY2t1eGxhLmguICBUaGlzIHRhYmxlIG11c3Qg YmUgaW4gb3JkZXIgb2YgZmlsZSBjaGFyYWN0ZXIgKi8KKy8qIHNldCBudW1iZXIhICovCisKK3N0 cnVjdCBjc2luZm8gZmNzaW5mb1tdID0geyAvKiBGaWxlIGNoYXJhY3RlciBzZXQgaW5mb3JtYXRp b24uLi4gKi8KKyAgLyogRGVzY3JpcHRpdmUgTmFtZSAgICAgICAgICAgICAgU2l6ZSAgRGVzaWdu YXRvciAqLworICAiVVMgQVNDSUkiLCAgICAgICAgICAgICAgICAgICAgIDEyOCwgRkNfVVNBU0NJ SSwgTlVMTCwgQUxfUk9NQU4sICJhc2NpaSIsCisgICJCcml0aXNoL1VLIElTTy02NDYiLCAgICAg ICAgICAgMTI4LCBGQ19VS0FTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImJyaXRpc2giLAorICAiRHV0 Y2ggSVNPLTY0NiIsICAgICAgICAgICAgICAgIDEyOCwgRkNfRFVBU0NJSSwgTlVMTCwgQUxfUk9N QU4sICJkdXRjaCIsCisgICJGaW5uaXNoIElTTy02NDYiLCAgICAgICAgICAgICAgMTI4LCBGQ19G SUFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgImZpbm5pc2giLAorICAiRnJlbmNoIElTTy02NDYiLCAg ICAgICAgICAgICAgIDEyOCwgRkNfRlJBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJmcmVuY2giLAor ICAiQ2FuYWRpYW4tRnJlbmNoIE5SQyIsIDEyOCwgRkNfRkNBU0NJSSwgTlVMTCwgQUxfUk9NQU4s ICJjYW5hZGlhbi1mcmVuY2giLAorICAiR2VybWFuIElTTy02NDYiLCAgICAgICAgICAgICAgIDEy OCwgRkNfR0VBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJnZXJtYW4iLAorICAiSHVuZ2FyaWFuIElT Ty02NDYiLCAgICAgICAgICAgIDEyOCwgRkNfSFVBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJodW5n YXJpYW4iLAorICAiSXRhbGlhbiBJU08tNjQ2IiwgICAgICAgICAgICAgIDEyOCwgRkNfSVRBU0NJ SSwgTlVMTCwgQUxfUk9NQU4sICJpdGFsaWFuIiwKKyAgIk5vcndlZ2lhbi9EYW5pc2ggSVNPLTY0 NiIsMTI4LEZDX05PQVNDSUksTlVMTCxBTF9ST01BTiwibm9yd2VnaWFuL2RhbmlzaCIsCisgICJQ b3J0dWd1ZXNlIElTTy02NDYiLCAgICAgICAgICAgMTI4LCBGQ19QT0FTQ0lJLCBOVUxMLCBBTF9S T01BTiwicG9ydHVndWVzZSIsCisgICJTcGFuaXNoIElTTy02NDYiLCAgICAgICAgICAgICAgMTI4 LCBGQ19TUEFTQ0lJLCBOVUxMLCBBTF9ST01BTiwgInNwYW5pc2giLAorICAiU3dlZGlzaCBJU08t NjQ2IiwgICAgICAgICAgICAgIDEyOCwgRkNfU1dBU0NJSSwgTlVMTCwgQUxfUk9NQU4sICJzd2Vk aXNoIiwKKyAgIlN3aXNzIE5SQyIsICAgICAgICAgICAgICAgICAgICAxMjgsIEZDX0NIQVNDSUks IE5VTEwsIEFMX1JPTUFOLCAic3dpc3MiLAorICAiSVNPIDg4NTktMSBMYXRpbi0xIiwgICAgICAg ICAgIDI1NiwgRkNfMUxBVElOLCAgTlVMTCwgQUxfUk9NQU4sImxhdGluMS1pc28iLAorICAiSVNP IDg4NTktMiBMYXRpbi0yIiwgICAgICAgICAgIDI1NiwgRkNfMkxBVElOLCAgTlVMTCwgQUxfUk9N QU4sImxhdGluMi1pc28iLAorICAiREVDIE11bHRpbmF0aW9uYWwiLCAyNTYsICBGQ19ERUNNQ1Ms IE5VTEwsQUxfUk9NQU4sImRlYy1tdWx0aW5hdGlvbmFsIiwKKyAgIk5lWFQgTXVsdGluYXRpb25h bCIsIDI1NiwgRkNfTkVYVCwgICBOVUxMLEFMX1JPTUFOLCJuZXh0LW11bHRpbmF0aW9uYWwiLAor ICAiUEMgQ29kZSBQYWdlIDQzNyIsICAgICAgICAgICAgMjU2LCBGQ19DUDQzNywgICBOVUxMLCBB TF9ST01BTiwiY3A0MzciLAorICAiUEMgQ29kZSBQYWdlIDg1MCIsICAgICAgICAgICAgMjU2LCBG Q19DUDg1MCwgICBOVUxMLCBBTF9ST01BTiwiY3A4NTAiLAorICAiUEMgQ29kZSBQYWdlIDg1MiIs ICAgICAgICAgICAgMjU2LCBGQ19DUDg1MiwgICBOVUxMLCBBTF9ST01BTiwiY3A4NTIiLAorICAi QXBwbGUgTWFjaW50b3NoIExhdGluIiwgMjU2LCBGQ19BUFBRRCwgICBOVUxMLCBBTF9ST01BTiwi bWFjaW50b3NoLWxhdGluIiwKKyAgIkRhdGEgR2VuZXJhbCBJbnRlcm5hdGlvbmFsIiwyNTYsRkNf REdNQ1MsTlVMTCxBTF9ST01BTiwiZGctaW50ZXJuYXRpb25hbCIsCisgICJIZXdsZXR0IFBhY2th cmQgUm9tYW44IiwgICAgMjU2LCBGQ19IUFI4LCAgICBOVUxMLCBBTF9ST01BTiwgImhwLXJvbWFu OCIsCisgICJJU08gODg1OS01IExhdGluL0N5cmlsbGljIiwgMjU2LCBGQ19DWVJJTEwsICBOVUxM LCBBTF9DWVJJTCwiY3lyaWxsaWMtaXNvIiwKKyAgIkNQODY2IEN5cmlsbGljIiwJICAgICAgIDI1 NiwgRkNfQ1A4NjYsICAgTlVMTCwgQUxfQ1lSSUwsImNwODY2IiwKKyAgIlNob3J0IEtPSSIsICAg ICAgICAgICAgICAgICAxMjgsIEZDX0tPSTcsICAgIE5VTEwsIEFMX0NZUklMLCJzaG9ydC1rb2ki LAorICAiT2xkIEtPSS04IEN5cmlsbGljIiwgICAgICAgIDI1NiwgRkNfS09JOCwgICAgTlVMTCwg QUxfQ1lSSUwsImtvaTgtY3lyaWxsaWMiLAorICAiSmFwYW5lc2UgSklTNyIsCSAgMTYzODQsIEZD X0pJUzcsICAgIE5VTEwsIEFMX0pBUEFOLCAiamlzNy1rYW5qaSIsCisgICJKYXBhbmVzZSBTaGlm dCBKSVMiLAkgIDE2Mzg0LCBGQ19TSEpJUywgICBOVUxMLCBBTF9KQVBBTiwgInNoaWZ0LWppcy1r YW5qaSIsCisgICJKYXBhbmVzZSBFVUMiLAkgIDE2Mzg0LCBGQ19KRVVDLCAgICBOVUxMLCBBTF9K QVBBTiwgImV1Yy1qcCIsCisgICJKYXBhbmVzZSBERUMgS2FuamkiLAkgIDE2Mzg0LCBGQ19KREVD LCAgICBOVUxMLCBBTF9KQVBBTiwgImRlYy1rYW5qaSIsCisgICJIZWJyZXctNyBERUMiLCAgICAg ICAgICAgMTI4LCBGQ19IRTcsICAgICBOVUxMLCBBTF9IRUJSRVcsICJoZWJyZXctNyIsCisgICJJ U08gODg1OS04IExhdGluL0hlYnJldyIsMjU2LCBGQ19IRUJSRVcsICBOVUxMLCBBTF9IRUJSRVcs ICJoZWJyZXctaXNvIiwKKyAgIkNQODYyIEhlYnJldyIsICAgICAgICAgICAyNTYsIEZDX0NQODYy LCAgIE5VTEwsIEFMX0hFQlJFVywgImNwODYyLWhlYnJldyIsCisgICJFTE9UIDkyNyBHcmVlayIs ICAgICAgICAgMTI4LCBGQ19FTE9ULCAgICBOVUxMLCBBTF9HUkVFSywgImVsb3Q5MjctZ3JlZWsi LAorICAiSVNPIDg4NTktNyBMYXRpbi9HcmVlayIsIDI1NiwgRkNfR1JFRUssICAgTlVMTCwgQUxf R1JFRUssICJncmVlay1pc28iLAorICAiQ1A4NjkgR3JlZWsiLCAgICAgICAgICAgIDI1NiwgRkNf Q1A4NjksICAgTlVMTCwgQUxfR1JFRUssICJjcDg2OS1ncmVlayIsCisgICJJU08gODg1OS0xNSBM YXRpbi05IiwgICAgMjU2LCBGQ185TEFUSU4sICBOVUxMLCBBTF9ST01BTiwgImxhdGluOS1pc28i LAorICAiUEMgQ29kZSBQYWdlIDg1OCIsICAgICAgIDI1NiwgRkNfQ1A4NTAsICAgTlVMTCwgQUxf Uk9NQU4sICJjcDg1OCIsCisgICJQQyBDb2RlIFBhZ2UgODU1IiwgICAgICAgMjU2LCBGQ19DUDg1 NSwgICBOVUxMLCBBTF9DWVJJTCwgImNwODU1LWN5cmlsbGljIiwKKyAgIldpbmRvd3MgQ29kZSBQ YWdlIDEyNTEiLCAyNTYsIEZDX0NQMTI1MSwgIE5VTEwsIEFMX0NZUklMLCAiY3AxMjUxLWN5cmls bGljIiwKKyAgIkJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2UiLCAyNTYsIEZDX0JVTEdBUiwgIE5VTEws IEFMX0NZUklMLCAiYnVsZ2FyaWEtcGMiLAorICAiV2luZG93cyBDb2RlIFBhZ2UgMTI1MCIsIDI1 NiwgRkNfQ1AxMjUwLCAgTlVMTCwgQUxfUk9NQU4sICJjcDEyNTAiLAorICAiUG9saXNoIE1hem92 aWEgUEMgQ29kZSBQYWdlIiwgMjU2LCBGQ19NQVpPVklBLCBOVUxMLCBBTF9ST01BTiwgIm1hem92 aWEtcGMiLAorICAiSVNPIDEwNjQ2IC8gVW5pY29kZSBVQ1MtMiIsIDY0MDAwLCBGQ19VQ1MyLCBO VUxMLCBBTF9VTklWLCAidWNzMiIsCisgICJJU08gMTA2NDYgLyBVbmljb2RlIFVURi04IiwgNjQw MDAsIEZDX1VDUzIsIE5VTEwsIEFMX1VOSVYsICJ1dGY4IiwKKyAgIktPSTgtUiBSdXNzaWFuK0Jv eGRyYXdpbmciLDI1NiwgIEZDX0tPSThSLCBOVUxMLCBBTF9DWVJJTCwia29pOHIiLAorICAiS09J OC1VIFVrcmFpbmlhbitCb3hkcmF3aW5nIiwyNTYsRkNfS09JOFUsIE5VTEwsIEFMX0NZUklMLCJr b2k4dSIsCisgICJXaW5kb3dzIENvZGUgUGFnZSAxMjUyIiwgMjU2LCBGQ19DUDEyNTIsICBOVUxM LCBBTF9ST01BTiwgImNwMTI1MiIsCisgICIiLDAsMCxOVUxMLDAsTlVMTAorfTsKKworLyogTG9j YWwgZmlsZSBjaGFyYWN0ZXIgc2V0cyAqLworLyogSW5jbHVkZXMgNy1iaXQgTmF0aW9uYWwgUmVw bGFjZW1lbnQgQ2hhcmFjdGVyIFNldHMgb2YgSVNPIDY0NiAqLworLyogUGx1cyBJU08gTGF0aW4t MSwgREVDIE11bHRpbmF0aW9uYWwgQ2hhcmFjdGVyIFNldCAoTUNTKSwgTmVYVCBjaGFyIHNldCwg Ki8KKy8qIFZhcmlvdXMgUEMgYW5kIFdpbmRvd3MgY29kZSBwYWdlcywgZXRjLiAqLworLyogQXMg b2YgQy1LZXJtaXQgOS4wIE1JTUUgbmFtZXMgYXJlIGluY2x1ZGVkIGFzIGludmlzaWJsZSBzeW5v bXltcyBmb3IgKi8KKy8qIHRob3NlIGNoYXJhY3RlciBzZXRzIHRoYXQgaGF2ZSBNSU1FIG5hbWVz LiAqLworCitzdHJ1Y3Qga2V5dGFiIGZjc3RhYltdID0geyAvKiBLZXl3b3JkIHRhYmxlIGZvciAn c2V0IGZpbGUgY2hhcmFjdGVyLXNldCcgKi8KKy8qCisgIElNUE9SVEFOVDogVGhpcyB0YWJsZSBp cyByZXBsaWNhdGVkIGJlbG93IGFzIHR0Y3N0YWIgKHRlcm1pbmFsIGNoYXJhY3RlcgorICBzZXQg dGFibGUpLiAgVGhlIG9ubHkgZGlmZmVyZW5jZXMgYXJlIHRoZSBhZGRpdGlvbiBvZiBUUkFOU1BB UkVOVAorICBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIEthbmppIHNldHMsIHdoaWNoIGFyZSBub3Qg c3VwcG9ydGVkIGZvciB0ZXJtaW5hbAorICBlbXVsYXRpb24uICBJZiB5b3UgbWFrZSBjaGFuZ2Vz IHRvIHRoaXMgdGFibGUsIGFsc28gY2hhbmdlIHR0Y3N0YWIuCisqLworCisvKiBLZXl3b3JkICAg ICAgICAgICAgICAgVmFsdWUgICAgICAgRmxhZ3MgKi8KKyAgICAiYXBwbGUtcXVpY2tkcmF3Iiwg ICAgRkNfQVBQUUQsICAgQ01fSU5WLCAvKiBBcHBsZSBRdWlja2RyYXcgKi8KKyAgICAiYXNjaWki LCAgICAgICAgICAgICAgRkNfVVNBU0NJSSwgMCwgLyogQVNDSUkgKi8KKyAgICAiYnJpdGlzaCIs ICAgICAgICAgICAgRkNfVUtBU0NJSSwgMCwgLyogQnJpdGlzaCBOUkMgKi8KKyAgICAiYnVsZ2Fy aWEtcGMiLCAgICAgICAgRkNfQlVMR0FSLCAgMCwgLyogQnVsZ2FyaWFuIFBDIENvZGUgUGFnZSAq LworICAgICJjYW5hZGlhbi1mcmVuY2giLCAgICBGQ19GQ0FTQ0lJLCAwLCAvKiBGcmVuY2ggQ2Fu YWRpYW4gTlJDICovCisjaWZkZWYgTEFUSU4yCisgICAgImNwMTI1MCIsICAgICAgICAgICAgIEZD X0NQMTI1MCwgIDAsIC8qIFdpbmRvd3MgQ1AgMTI1MCAqLworI2VuZGlmIC8qIExBVElOMiAqLwor I2lmZGVmIENZUklMTElDCisgICAgImNwMTI1MS1jeXJpbGxpYyIsICAgIEZDX0NQMTI1MSwgIDAs IC8qIFdpbmRvd3MgQ1AgMTI1MSAqLworI2VuZGlmIC8qIENZUklMTElDICovCisgICAgImNwMTI1 MiIsICAgICAgICAgICAgIEZDX0NQMTI1MiwgIDAsIC8qIFdpbmRvd3MgQ1AgMTI1MiAqLworICAg ICJjcDQzNyIsICAgICAgICAgICAgICBGQ19DUDQzNywgICAwLCAvKiBQQyBDUDQzNyAqLworICAg ICJjcDg1MCIsICAgICAgICAgICAgICBGQ19DUDg1MCwgICAwLCAvKiBQQyBDUDg1MCAqLworI2lm ZGVmIExBVElOMgorICAgICJjcDg1MiIsICAgICAgICAgICAgICBGQ19DUDg1MiwgICAwLCAvKiBQ QyBDUDg1MiAqLworI2VuZGlmIC8qIExBVElOMiAqLworI2lmZGVmIENZUklMTElDCisgICAgImNw ODU1LWN5cmlsbGljIiwgICAgIEZDX0NQODU1LCAgIDAsIC8qIFBDIENQODU1ICovCisjZW5kaWYg LyogQ1lSSUxMSUMgKi8KKyAgICAiY3A4NTgiLCAgICAgICAgICAgICAgRkNfQ1A4NTgsICAgMCwg LyogUEMgQ1A4NTggKi8KKyNpZmRlZiBIRUJSRVcKKyAgICAiY3A4NjItaGVicmV3IiwgICAgICAg RkNfQ1A4NjIsICAgMCwgLyogUEMgQ1A4NjIgKi8KKyNlbmRpZiAvKiBIRUJSRVcgKi8KKyNpZmRl ZiBDWVJJTExJQworICAgICJjcDg2Ni1jeXJpbGxpYyIsICAgICBGQ19DUDg2NiwgICAwLCAvKiBD UDg2NiBDeXJpbGxpYyAqLworI2VuZGlmIC8qIENZUklMTElDICovCisjaWZkZWYgR1JFRUsKKyAg ICAiY3A4NjktZ3JlZWsiLCAgICAgICAgRkNfQ1A4NjksICAgMCwgLyogQ1A4NjkgR3JlZWsgKi8K KyNlbmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIENZUklMTElDCisgICAgImN5cmlsbGljLWlzbyIs ICAgICAgIEZDX0NZUklMTCwgIDAsIC8qIElTTyBMYXRpbi9DeXJpbGxpYyBBbHBoYWJldCAqLwor I2VuZGlmIC8qIENZUklMTElDICovCisgICAgImRhbmlzaCIsICAgICAgICAgICAgIEZDX05PQVND SUksIDAsIC8qIE5vcndlZ2lhbiBhbmQgRGFuaXNoIE5SQyAqLworI2lmZGVmIEtBTkpJCisgICAg ImRlYy1rYW5qaSIsICAgICAgICAgIEZDX0pERUMsICAgIDAsIC8qIEphcGFuZXNlIERFQyBLYW5q aSAqLworI2VuZGlmIC8qIEtBTkpJICovCisgICAgImRlYy1tY3MiLCAgICAgICAgICAgIEZDX0RF Q01DUywgIENNX0lOViwgLyogREVDIG11bHRpbmF0aW9uYWwgY2hhciBzZXQgKi8KKyAgICAiZGVj LW11bHRpbmF0aW9uYWwiLCAgRkNfREVDTUNTLCAgMCwgLyogREVDIG11bHRpbmF0aW9uYWwgY2hh cmFjdGVyIHNldCAqLworICAgICJkZy1pbnRlcm5hdGlvbmFsIiwgICBGQ19ER01DUywgICAwLCAv KiBEYXRhIEdlbmVyYWwgbXVsdGluYXRpb25hbCAqLworICAgICJkdXRjaCIsICAgICAgICAgICAg ICBGQ19EVUFTQ0lJLCAwLCAvKiBEdXRjaCBOUkMgKi8KKyNpZmRlZiBHUkVFSworICAgICJlbG90 OTI3LWdyZWVrIiwgICAgICBGQ19FTE9ULCAgICAwLCAvKiBFTE9UIDkyNyBHcmVlayAqLworICAg ICJlbG90OTI4LWdyZWVrIiwgICAgICBGQ19HUkVFSywgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5 LTcgTGF0aW4vR3JlZWsgKi8KKyNlbmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIEtBTkpJCisgICAg ImV1Yy1qcCIsICAgICAgICAgICAgIEZDX0pFVUMsICAgIDAsIC8qIEphcGFuZXNlIEVVQyAqLwor I2VuZGlmIC8qIEtBTkpJICovCisgICAgImZpbm5pc2giLCAgICAgICAgICAgIEZDX0ZJQVNDSUks IDAsIC8qIEZpbm5pc2ggTlJDICovCisgICAgImZyZW5jaCIsICAgICAgICAgICAgIEZDX0ZSQVND SUksIDAsIC8qIEZyZW5jaCBOUkMgKi8KKyAgICAiZnItY2FuYWRpYW4iLCAgICAgICAgRkNfRkNB U0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggQ2FuYWRpYW4gTlJDICovCisgICAgImdlcm1hbiIsICAg ICAgICAgICAgIEZDX0dFQVNDSUksIDAsIC8qIEdlcm1hbiBOUkMgKi8KKyNpZmRlZiBHUkVFSwor ICAgICJncmVlay1pc28iLCAgICAgICAgICBGQ19HUkVFSywgICAwLCAvKiBJU08gODg1OS03IExh dGluL0dyZWVrICovCisjZW5kaWYgLyogR1JFRUsgKi8KKyNpZmRlZiBIRUJSRVcKKyAgICAiaGUi LCAgICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGViIiwg ICAgICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGViciIsICAg ICAgICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGVicmUiLCAgICAg ICAgICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGVicmV3IiwgICAgICAg ICAgICAgRkNfSEVCUkVXLCAgQ01fQUJSfENNX0lOViwKKyAgICAiaGVicmV3LTciLCAgICAgICAg ICAgRkNfSEU3LCAgICAgMCwgLyogREVDIDctQml0IEhlYnJldyAqLworICAgICJoZWJyZXctaXNv IiwgICAgICAgICBGQ19IRUJSRVcsICAwLCAvKiBJU08gTGF0aW4vSGVicmV3ICovCisjZW5kaWYg LyogSEVCUkVXICovCisgICAgImhwLXJvbWFuOCIsICAgICAgICAgIEZDX0hQUjgsICAgIDAsIC8q IEhld2xldHQgUGFja2FyZCBSb21hbjggKi8KKyAgICAiaHVuZ2FyaWFuIiwgICAgICAgICAgRkNf SFVBU0NJSSwgMCwgLyogSHVuZ2FyaWFuIE5SQyAqLworCisgICAgImlibTQzNyIsICAgICAgICAg ICAgIEZDX0NQNDM3LCAgIENNX0lOViwgLyogUEMgQ1A0MzcgKi8KKyAgICAiaWJtODUwIiwgICAg ICAgICAgICAgRkNfQ1A4NTAsICAgQ01fSU5WLCAvKiBQQyBDUDg1MCAobm90IGluIE1JTUUpICov CisjaWZkZWYgTEFUSU4yCisgICAgImlibTg1MiIsICAgICAgICAgICAgIEZDX0NQODUyLCAgIENN X0lOViwgLyogUEMgQ1A4NTIgKi8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyNpZmRlZiBDWVJJTExJ QworICAgICJpYm04NTUiLCAgICAgICAgICAgICBGQ19DUDg1NSwgICBDTV9JTlYsIC8qIFBDIENQ ODU1ICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICAiaWJtODU4IiwgICAgICAgICAgICAg RkNfQ1A4NTgsICAgQ01fSU5WLCAvKiBQQyBDUDg1OCAobm90IGluIE1JTUUpICovCisjaWZkZWYg SEVCUkVXCisgICAgImlibTg2MiIsICAgICAgICAgICAgIEZDX0NQODYyLCAgIENNX0lOViwgLyog UEMgQ1A4NjIgKG5vdCBpbiBNSU1FKSAqLworI2VuZGlmIC8qIEhFQlJFVyAqLworI2lmZGVmIENZ UklMTElDCisgICAgImlibTg2NiIsICAgICAgICAgICAgIEZDX0NQODY2LCAgIENNX0lOViwgLyog Q1A4NjYgQ3lyaWxsaWMgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLworI2lmZGVmIEdSRUVLCisg ICAgImlibTg2OSIsICAgICAgICAgICAgIEZDX0NQODY5LCAgIENNX0lOViwgLyogQ1A4NjkgR3Jl ZWsgKi8KKyNlbmRpZiAvKiBHUkVFSyAqLworCisjaWZkZWYgVU5JQ09ERQorICAgICJpc28tMTA2 NDYtdWNzLTIiLCAgICBGQ19VQ1MyLCAgICBDTV9JTlYsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUg VUNTLTIgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgImlzby04ODU5LTEiLCAgICAgICAg IEZDXzFMQVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFscGhhYmV0IDEgKi8KKyAgICAiaXNv LTg4NTktMTUiLCAgICAgICAgRkNfOUxBVElOLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFi ZXQgOSAoeWVzKSAqLworICAgICJpc28tODg1OS0yIiwgICAgICAgICBGQ18yTEFUSU4sICBDTV9J TlYsIC8qIElTTyBMYXRpbiBBbHBoYWJldCAyICovCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAiaXNv LTg4NTktNSIsICAgICAgICAgRkNfQ1lSSUxMLCAgQ01fSU5WLCAvKiBJU08gTGF0aW4vQ3lyaWxs aWMgQWxwaGFiZXQgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLworI2lmZGVmIEdSRUVLCisgICAg Imlzby04ODU5LTciLCAgICAgICAgIEZDX0dSRUVLLCAgIENNX0lOViwgLyogSVNPIDg4NTktNyBM YXRpbi9HcmVlayAqLworI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgSEVCUkVXCisgICAgImlz by04ODU5LTgiLCAgICAgICAgIEZDX0hFQlJFVywgIENNX0lOViwgLyogSVNPIExhdGluL0hlYnJl dyAqLworI2VuZGlmIC8qIEhFQlJFVyAqLworI2lmZGVmIEtBTkpJCisgICAgImlzbzIwMjJqcC1r YW5qaSIsICAgIEZDX0pJUzcsICAgIENNX0lOViwgLyogU3lub255bSBmb3IgSklTLTcgKi8KKyNl bmRpZiAvKiBLQU5KSSAqLworCisgICAgImlzbzY0Ni1nYiIsICAgICAgICAgIEZDX1VLQVNDSUks IENNX0lOViwgLyogQnJpdGlzaCBOUkMgKi8KKyAgICAiaXNvNjQ2LWNhIiwgICAgICAgICAgRkNf RkNBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggQ2FuYWRpYW4gTlJDICovCisgICAgImlzbzY0Ni1k ZSIsICAgICAgICAgIEZDX0dFQVNDSUksIENNX0lOViwgLyogR2VybWFuIE5SQyAqLworICAgICJp c282NDYtZGsiLCAgICAgICAgICBGQ19OT0FTQ0lJLCBDTV9JTlYsIC8qIE5vcndlZ2lhbiBhbmQg RGFuaXNoIE5SQyAqLworICAgICJpc282NDYtZXMiLCAgICAgICAgICBGQ19TUEFTQ0lJLCBDTV9J TlYsIC8qIFNwYW5pc2ggTlJDICovCisgICAgImlzbzY0Ni1maSIsICAgICAgICAgIEZDX0ZJQVND SUksIENNX0lOViwgLyogRmlubmlzaCBOUkMgKi8KKyAgICAiaXNvNjQ2LWZyIiwgICAgICAgICAg RkNfRlJBU0NJSSwgQ01fSU5WLCAvKiBGcmVuY2ggTlJDICovCisgICAgImlzbzY0Ni1odSIsICAg ICAgICAgIEZDX0hVQVNDSUksIENNX0lOViwgLyogSHVuZ2FyaWFuIE5SQyAqLworICAgICJpc282 NDYtaXQiLCAgICAgICAgICBGQ19JVEFTQ0lJLCBDTV9JTlYsIC8qIEl0YWxpYW4gTlJDICovCisg ICAgImlzbzY0Ni1ubyIsICAgICAgICAgIEZDX05PQVNDSUksIENNX0lOViwgLyogTm9yd2VnaWFu IGFuZCBEYW5pc2ggTlJDICovCisgICAgImlzbzY0Ni1wbyIsICAgICAgICAgIEZDX1BPQVNDSUks IENNX0lOViwgLyogUG9ydHVndWVzZSBOUkMgKi8KKyAgICAiaXNvNjQ2LXNlIiwgICAgICAgICAg RkNfU1dBU0NJSSwgQ01fSU5WLCAvKiBTd2VkaXNoIE5SQyAqLworCisgICAgIml0YWxpYW4iLCAg ICAgICAgICAgIEZDX0lUQVNDSUksIENNX0lOViwgLyogSXRhbGlhbiBOUkMgKi8KKyNpZmRlZiBL QU5KSQorICAgICJqYXBhbmVzZS1ldWMiLCAgICAgICBGQ19KRVVDLCAgICBDTV9JTlYsIC8qIEph cGFuZXNlIEVVQyAqLworICAgICJqaXM3LWthbmppIiwgICAgICAgICBGQ19KSVM3LCAgICAwLCAv KiBKYXBhbmVzZSBKSVM3IDdiaXQgY29kZSAqLworI2VuZGlmIC8qIEtBTkpJICovCisjaWZkZWYg Q1lSSUxMSUMKKyAgICAiayIsICAgICAgICAgICAgICAgICAgRkNfS09JOCwgICAgQ01fQUJSfENN X0lOViwKKyAgICAia28iLCAgICAgICAgICAgICAgICAgRkNfS09JOCwgICAgQ01fQUJSfENNX0lO ViwKKyAgICAia29pIiwgICAgICAgICAgICAgICAgRkNfS09JOCwgICAgQ01fQUJSfENNX0lOViwK KyAgICAia29pNyIsICAgICAgICAgICAgICAgRkNfS09JNywgICAgMCwgLyogU2hvcnQgS09JIEN5 cmlsbGljICovCisgICAgImtvaTgiLCAgICAgICAgICAgICAgIEZDX0tPSTgsICAgIDAsIC8qIE9s ZCBLT0ktOCBDeXJpbGxpYyAqLworICAgICJrb2k4LWUiLCAgICAgICAgICAgICBGQ19LT0k4LCAg ICBDTV9JTlYsIC8qIE9sZCBLT0ktOCBDeXJpbGxpYyAqLworICAgICJrb2k4LWN5cmlsbGljIiwg ICAgICBGQ19LT0k4LCAgICBDTV9JTlYsCisgICAgImtvaTgtciIsICAgICAgICAgICAgIEZDX0tP SThSLCAgIENNX0lOViwgLyogS09JOC1SIFJGQzE0ODkgKi8KKyAgICAia29pOC11IiwgICAgICAg ICAgICAgRkNfS09JOFUsICAgQ01fSU5WLCAvKiBLT0k4LVUgUkZDMjMxOSAqLworICAgICJrb2k4 ciIsICAgICAgICAgICAgICBGQ19LT0k4UiwgICAwLCAvKiBLT0k4LVIgUkZDMTQ4OSAqLworICAg ICJrb2k4dSIsICAgICAgICAgICAgICBGQ19LT0k4VSwgICAwLCAvKiBLT0k4LVUgUkZDMjMxOSAq LworI2VuZGlmIC8qIENZUklMTElDICovCisgICAgImwiLCAgICAgICAgICAgICAgICAgIEZDXzFM QVRJTiwgIENNX0FCUnxDTV9JTlYsCisgICAgImxhIiwgICAgICAgICAgICAgICAgIEZDXzFMQVRJ TiwgIENNX0FCUnxDTV9JTlYsCisgICAgImxhdCIsICAgICAgICAgICAgICAgIEZDXzFMQVRJTiwg IENNX0FCUnxDTV9JTlYsCisgICAgImxhdGkiLCAgICAgICAgICAgICAgIEZDXzFMQVRJTiwgIENN X0FCUnxDTV9JTlYsCisgICAgImxhdGluIiwgICAgICAgICAgICAgIEZDXzFMQVRJTiwgIENNX0FC UnxDTV9JTlYsCisgICAgImxhdGluMS1pc28iLCAgICAgICAgIEZDXzFMQVRJTiwgIDAsIC8qIElT TyBMYXRpbiBBbHBoYWJldCAxICovCisjaWZkZWYgTEFUSU4yCisgICAgImxhdGluMi1pc28iLCAg ICAgICAgIEZDXzJMQVRJTiwgIDAsIC8qIElTTyBMYXRpbiBBbHBoYWJldCAyICovCisjZW5kaWYg LyogTEFUSU4yICovCisgICAgImxhdGluOS1pc28iLCAgICAgICAgIEZDXzlMQVRJTiwgIDAsIC8q IElTTyBMYXRpbiBBbHBoYWJldCA5ICovCisgICAgIm1hY2ludG9zaC1sYXRpbiIsICAgIEZDX0FQ UFFELCAgIDAsIC8qICJFeHRlbmRlZCBNYWMgTGF0aW4iICovCisjaWZkZWYgTEFUSU4yCisgICAg Im1hem92aWEtcGMiLCAgICAgICAgIEZDX01BWk9WSUEsIDAsIC8qIFBvbGlzaCBNYXpvdmlhIFBD IGNvZGUgcGFnZSAqLworI2VuZGlmIC8qIExBVElOMiAqLworICAgICJuZXh0LW11bHRpbmF0aW9u YWwiLCBGQ19ORVhULCAgICAwLCAvKiBOZVhUIHdvcmtzdGF0aW9uICovCisgICAgIm5vcndlZ2lh biIsICAgICAgICAgIEZDX05PQVNDSUksIDAsIC8qIE5vcndlZ2lhbiBhbmQgRGFuaXNoIE5SQyAq LworICAgICJwb3J0dWd1ZXNlIiwgICAgICAgICBGQ19QT0FTQ0lJLCAwLCAvKiBQb3J0dWd1ZXNl IE5SQyAqLworI2lmZGVmIEtBTkpJCisgICAgInNoaWZ0LWppcy1rYW5qaSIsICAgIEZDX1NISklT LCAgIDAsIC8qIEphcGFuZXNlIEthbmppIFNoaWZ0LUpJUyAqLworICAgICJzaGlmdF9qaXMiLCAg ICAgICAgICBGQ19TSEpJUywgICBDTV9JTlYsIC8qIEphcGFuZXNlIEthbmppIFNoaWZ0LUpJUyAq LworI2VuZGlmIC8qIEtBTkpJICovCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAic2hvcnQta29pIiwg ICAgICAgICAgRkNfS09JNywgICAgMCwgLyogU2hvcnQgS09JIEN5cmlsbGljICovCisjZW5kaWYg LyogQ1lSSUxMSUMgKi8KKyAgICAic3BhbmlzaCIsICAgICAgICAgICAgRkNfU1BBU0NJSSwgMCwg LyogU3BhbmlzaCBOUkMgKi8KKyAgICAic3dlZGlzaCIsICAgICAgICAgICAgRkNfU1dBU0NJSSwg MCwgLyogU3dlZGlzaCBOUkMgKi8KKyAgICAic3dpc3MiLCAgICAgICAgICAgICAgRkNfQ0hBU0NJ SSwgMCwgLyogU3dpc3MgTlJDICovCisjaWZkZWYgVU5JQ09ERQorICAgICJ1Y3MyIiwgICAgICAg ICAgICAgICBGQ19VQ1MyLCAgICAwLCAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVDUy0yICovCisj ZW5kaWYgLyogVU5JQ09ERSAqLworICAgICJ1cy1hc2NpaSIsICAgICAgICAgICBGQ19VU0FTQ0lJ LCBDTV9JTlYsIC8qIE1JTUUgKi8KKyAgICAidXNhc2NpaSIsICAgICAgICAgICAgRkNfVVNBU0NJ SSwgQ01fSU5WLAorI2lmZGVmIFVOSUNPREUKKyAgICAidXRmLTgiLCAgICAgICAgICAgICAgRkNf VVRGOCwgICAgQ01fSU5WLCAvKiBJU08gMTA2NDYgLyBVbmljb2RlIFVURi04ICovCisgICAgInV0 ZjgiLCAgICAgICAgICAgICAgIEZDX1VURjgsICAgIDAsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUg VVRGLTggKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisjaWZkZWYgTEFUSU4yCisgICAgIndpbmRv d3MtMTI1MCIsICAgICAgIEZDX0NQMTI1MCwgIENNX0lOViwgLyogV2luZG93cyBDUCAxMjUwICov CisjZW5kaWYgLyogTEFUSU4yICovCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAid2luZG93cy0xMjUx IiwgICAgICAgRkNfQ1AxMjUxLCAgQ01fSU5WLCAvKiBXaW5kb3dzIENQIDEyNTEgKi8KKyNlbmRp ZiAvKiBDWVJJTExJQyAqLworICAgICJ3aW5kb3dzLTEyNTIiLCAgICAgICBGQ19DUDEyNTIsICBD TV9JTlYsIC8qIFdpbmRvd3MgQ1AgMTI1MiAqLworICAgICIiLCAwLCAwCit9OworaW50IG5maWxj ID0gKHNpemVvZihmY3N0YWIpIC8gc2l6ZW9mKHN0cnVjdCBrZXl0YWIpKSAtIDE7CisKK3N0cnVj dCBrZXl0YWIgdHRjc3RhYltdID0geyAvKiBLZXl3b3JkIHRhYmxlIGZvciBTRVQgVEVSTUlOQUwg Q0hBUkFDVEVSLVNFVCAqLworLyoKKyAgSU1QT1JUQU5UOiBUaGlzIHRhYmxlIGlzIGEgcmVwbGlj YSBvZiBmY3N0YWIsIGltbWVkaWF0ZWx5IGFib3ZlLCB3aXRoIHRoZQorICBhZGRpdGlvbiBvZiBU UkFOU1BBUkVOVCBhbmQgZGVsZXRpb24gb2YgdGhlIEphcGFuZXNlIHNldHMuICBJZiB5b3UgbWFr ZQorICBjaGFuZ2VzIHRvIHRoaXMgdGFibGUsIG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdl cyB0byBmY3N0YWIuCisqLworLyogS2V5d29yZCAgICAgICAgICAgICBWYWx1ZSAgICAgICBGbGFn cyAqLworICAgICJhcHBsZS1xdWlja2RyYXciLCAgICBGQ19BUFBRRCwgICBDTV9JTlYsIC8qIEFw cGxlIFF1aWNrZHJhdyAqLworICAgICJhc2NpaSIsICAgICAgICAgICAgICBGQ19VU0FTQ0lJLCAw LCAvKiBBU0NJSSAqLworICAgICJicml0aXNoIiwgICAgICAgICAgICBGQ19VS0FTQ0lJLCAwLCAv KiBCcml0aXNoIE5SQyAqLworICAgICJidWxnYXJpYS1wYyIsICAgICAgICBGQ19CVUxHQVIsICAw LCAvKiBCdWxnYXJpYW4gUEMgQ29kZSBQYWdlICovCisgICAgImNhbmFkaWFuLWZyZW5jaCIsICAg IEZDX0ZDQVNDSUksIDAsIC8qIEZyZW5jaCBDYW5hZGlhbiBOUkMgKi8KKyNpZmRlZiBMQVRJTjIK KyAgICAiY3AxMjUwIiwgICAgICAgICAgICAgRkNfQ1AxMjUwLCAgMCwgLyogV2luZG93cyBDUCAx MjUwICovCisjZW5kaWYgLyogTEFUSU4yICovCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAiY3AxMjUx LWN5cmlsbGljIiwgICAgRkNfQ1AxMjUxLCAgMCwgLyogV2luZG93cyBDUCAxMjUxICovCisjZW5k aWYgLyogQ1lSSUxMSUMgKi8KKyAgICAiY3AxMjUyIiwgICAgICAgICAgICAgRkNfQ1AxMjUyLCAg MCwgLyogV2luZG93cyBDUCAxMjUyICovCisgICAgImNwNDM3IiwgICAgICAgICAgICAgIEZDX0NQ NDM3LCAgIDAsIC8qIFBDIENQNDM3ICovCisgICAgImNwODUwIiwgICAgICAgICAgICAgIEZDX0NQ ODUwLCAgIDAsIC8qIFBDIENQODUwICovCisjaWZkZWYgTEFUSU4yCisgICAgImNwODUyIiwgICAg ICAgICAgICAgIEZDX0NQODUyLCAgIDAsIC8qIFBDIENQODUyICovCisjZW5kaWYgLyogTEFUSU4y ICovCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAiY3A4NTUtY3lyaWxsaWMiLCAgICAgRkNfQ1A4NTUs ICAgMCwgLyogUEMgQ1A4NTUgKi8KKyNlbmRpZiAvKiBDWVJJTExJQyAqLworICAgICJjcDg1OCIs ICAgICAgICAgICAgICBGQ19DUDg1OCwgICAwLCAvKiBQQyBDUDg1OCAqLworI2lmZGVmIEhFQlJF VworICAgICJjcDg2Mi1oZWJyZXciLCAgICAgICBGQ19DUDg2MiwgICAwLCAvKiBQQyBDUDg2MiAq LworI2VuZGlmIC8qIEhFQlJFVyAqLworI2lmZGVmIENZUklMTElDCisgICAgImNwODY2LWN5cmls bGljIiwgICAgIEZDX0NQODY2LCAgIDAsIC8qIENQODY2IEN5cmlsbGljICovCisjZW5kaWYgLyog Q1lSSUxMSUMgKi8KKyNpZmRlZiBHUkVFSworICAgICJjcDg2OS1ncmVlayIsICAgICAgICBGQ19D UDg2OSwgICAwLCAvKiBDUDg2OSBHcmVlayAqLworI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYg Q1lSSUxMSUMKKyAgICAiY3lyaWxsaWMtaXNvIiwgICAgICAgRkNfQ1lSSUxMLCAgMCwgLyogSVNP IExhdGluL0N5cmlsbGljIEFscGhhYmV0ICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICAi ZGFuaXNoIiwgICAgICAgICAgICAgRkNfTk9BU0NJSSwgMCwgLyogTm9yd2VnaWFuIGFuZCBEYW5p c2ggTlJDICovCisgICAgImRlYy1tY3MiLCAgICAgICAgICAgIEZDX0RFQ01DUywgIENNX0lOViwg LyogREVDIG11bHRpbmF0aW9uYWwgY2hhciBzZXQgKi8KKyAgICAiZGVjLW11bHRpbmF0aW9uYWwi LCAgRkNfREVDTUNTLCAgMCwgLyogREVDIG11bHRpbmF0aW9uYWwgY2hhcmFjdGVyIHNldCAqLwor ICAgICJkZy1pbnRlcm5hdGlvbmFsIiwgICBGQ19ER01DUywgICAwLCAvKiBEYXRhIEdlbmVyYWwg bXVsdGluYXRpb25hbCAqLworICAgICJkdXRjaCIsICAgICAgICAgICAgICBGQ19EVUFTQ0lJLCAw LCAvKiBEdXRjaCBOUkMgKi8KKyNpZmRlZiBHUkVFSworICAgICJlbG90OTI3LWdyZWVrIiwgICAg ICBGQ19FTE9ULCAgICAwLCAvKiBFTE9UIDkyNyBHcmVlayAqLworICAgICJlbG90OTI4LWdyZWVr IiwgICAgICBGQ19HUkVFSywgICAwLCAvKiBTYW1lIGFzIElTTyA4ODU5LTcgTGF0aW4vR3JlZWsg Ki8KKyNlbmRpZiAvKiBHUkVFSyAqLworICAgICJmaW5uaXNoIiwgICAgICAgICAgICBGQ19GSUFT Q0lJLCAwLCAvKiBGaW5uaXNoIE5SQyAqLworICAgICJmcmVuY2giLCAgICAgICAgICAgICBGQ19G UkFTQ0lJLCAwLCAvKiBGcmVuY2ggTlJDICovCisgICAgImZyLWNhbmFkaWFuIiwgICAgICAgIEZD X0ZDQVNDSUksIENNX0lOViwgLyogRnJlbmNoIENhbmFkaWFuIE5SQyAqLworICAgICJnZXJtYW4i LCAgICAgICAgICAgICBGQ19HRUFTQ0lJLCAwLCAvKiBHZXJtYW4gTlJDICovCisjaWZkZWYgR1JF RUsKKyAgICAiZ3JlZWstaXNvIiwgICAgICAgICAgRkNfR1JFRUssICAgMCwgLyogSVNPIDg4NTkt NyBMYXRpbi9HcmVlayAqLworI2VuZGlmIC8qIEdSRUVLICovCisjaWZkZWYgSEVCUkVXCisgICAg ImhlIiwgICAgICAgICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCisgICAgImhl YiIsICAgICAgICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCisgICAgImhlYnIi LCAgICAgICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCisgICAgImhlYnJlIiwg ICAgICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCisgICAgImhlYnJldyIsICAg ICAgICAgICAgIEZDX0hFQlJFVywgIENNX0FCUnxDTV9JTlYsCisgICAgImhlYnJldy03IiwgICAg ICAgICAgIEZDX0hFNywgICAgIDAsIC8qIERFQyA3LUJpdCBIZWJyZXcgKi8KKyAgICAiaGVicmV3 LWlzbyIsICAgICAgICAgRkNfSEVCUkVXLCAgMCwgLyogSVNPIExhdGluL0hlYnJldyAqLworI2Vu ZGlmIC8qIEhFQlJFVyAqLworICAgICJocC1yb21hbjgiLCAgICAgICAgICBGQ19IUFI4LCAgICAw LCAvKiBIZXdsZXR0IFBhY2thcmQgUm9tYW44ICovCisgICAgImh1bmdhcmlhbiIsICAgICAgICAg IEZDX0hVQVNDSUksIDAsIC8qIEh1bmdhcmlhbiBOUkMgKi8KKworICAgICJpYm00MzciLCAgICAg ICAgICAgICBGQ19DUDQzNywgICBDTV9JTlYsIC8qIFBDIENQNDM3ICovCisgICAgImlibTg1MCIs ICAgICAgICAgICAgIEZDX0NQODUwLCAgIENNX0lOViwgLyogUEMgQ1A4NTAgKG5vdCBpbiBNSU1F KSAqLworI2lmZGVmIExBVElOMgorICAgICJpYm04NTIiLCAgICAgICAgICAgICBGQ19DUDg1Miwg ICBDTV9JTlYsIC8qIFBDIENQODUyICovCisjZW5kaWYgLyogTEFUSU4yICovCisjaWZkZWYgQ1lS SUxMSUMKKyAgICAiaWJtODU1IiwgICAgICAgICAgICAgRkNfQ1A4NTUsICAgQ01fSU5WLCAvKiBQ QyBDUDg1NSAqLworI2VuZGlmIC8qIENZUklMTElDICovCisgICAgImlibTg1OCIsICAgICAgICAg ICAgIEZDX0NQODU4LCAgIENNX0lOViwgLyogUEMgQ1A4NTggKG5vdCBpbiBNSU1FKSAqLworI2lm ZGVmIEhFQlJFVworICAgICJpYm04NjIiLCAgICAgICAgICAgICBGQ19DUDg2MiwgICBDTV9JTlYs IC8qIFBDIENQODYyIChub3QgaW4gTUlNRSkgKi8KKyNlbmRpZiAvKiBIRUJSRVcgKi8KKyNpZmRl ZiBDWVJJTExJQworICAgICJpYm04NjYiLCAgICAgICAgICAgICBGQ19DUDg2NiwgICBDTV9JTlYs IC8qIENQODY2IEN5cmlsbGljICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyNpZmRlZiBHUkVF SworICAgICJpYm04NjkiLCAgICAgICAgICAgICBGQ19DUDg2OSwgICBDTV9JTlYsIC8qIENQODY5 IEdyZWVrICovCisjZW5kaWYgLyogR1JFRUsgKi8KKworI2lmZGVmIFVOSUNPREUKKyAgICAiaXNv LTEwNjQ2LXVjcy0yIiwgICAgRkNfVUNTMiwgICAgQ01fSU5WLCAvKiBJU08gMTA2NDYgLyBVbmlj b2RlIFVDUy0yICovCisjZW5kaWYgLyogVU5JQ09ERSAqLworICAgICJpc28tODg1OS0xIiwgICAg ICAgICBGQ18xTEFUSU4sICBDTV9JTlYsIC8qIElTTyBMYXRpbiBBbHBoYWJldCAxICovCisgICAg Imlzby04ODU5LTE1IiwgICAgICAgIEZDXzlMQVRJTiwgIENNX0lOViwgLyogSVNPIExhdGluIEFs cGhhYmV0IDkgKHllcykgKi8KKyAgICAiaXNvLTg4NTktMiIsICAgICAgICAgRkNfMkxBVElOLCAg Q01fSU5WLCAvKiBJU08gTGF0aW4gQWxwaGFiZXQgMiAqLworI2lmZGVmIENZUklMTElDCisgICAg Imlzby04ODU5LTUiLCAgICAgICAgIEZDX0NZUklMTCwgIENNX0lOViwgLyogSVNPIExhdGluL0N5 cmlsbGljIEFscGhhYmV0ICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyNpZmRlZiBHUkVFSwor ICAgICJpc28tODg1OS03IiwgICAgICAgICBGQ19HUkVFSywgICBDTV9JTlYsIC8qIElTTyA4ODU5 LTcgTGF0aW4vR3JlZWsgKi8KKyNlbmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIEhFQlJFVworICAg ICJpc28tODg1OS04IiwgICAgICAgICBGQ19IRUJSRVcsICBDTV9JTlYsIC8qIElTTyBMYXRpbi9I ZWJyZXcgKi8KKyNlbmRpZiAvKiBIRUJSRVcgKi8KKworICAgICJpc282NDYtZ2IiLCAgICAgICAg ICBGQ19VS0FTQ0lJLCBDTV9JTlYsIC8qIEJyaXRpc2ggTlJDICovCisgICAgImlzbzY0Ni1jYSIs ICAgICAgICAgIEZDX0ZDQVNDSUksIENNX0lOViwgLyogRnJlbmNoIENhbmFkaWFuIE5SQyAqLwor ICAgICJpc282NDYtZGUiLCAgICAgICAgICBGQ19HRUFTQ0lJLCBDTV9JTlYsIC8qIEdlcm1hbiBO UkMgKi8KKyAgICAiaXNvNjQ2LWRrIiwgICAgICAgICAgRkNfTk9BU0NJSSwgQ01fSU5WLCAvKiBO b3J3ZWdpYW4gYW5kIERhbmlzaCBOUkMgKi8KKyAgICAiaXNvNjQ2LWVzIiwgICAgICAgICAgRkNf U1BBU0NJSSwgQ01fSU5WLCAvKiBTcGFuaXNoIE5SQyAqLworICAgICJpc282NDYtZmkiLCAgICAg ICAgICBGQ19GSUFTQ0lJLCBDTV9JTlYsIC8qIEZpbm5pc2ggTlJDICovCisgICAgImlzbzY0Ni1m ciIsICAgICAgICAgIEZDX0ZSQVNDSUksIENNX0lOViwgLyogRnJlbmNoIE5SQyAqLworICAgICJp c282NDYtaHUiLCAgICAgICAgICBGQ19IVUFTQ0lJLCBDTV9JTlYsIC8qIEh1bmdhcmlhbiBOUkMg Ki8KKyAgICAiaXNvNjQ2LWl0IiwgICAgICAgICAgRkNfSVRBU0NJSSwgQ01fSU5WLCAvKiBJdGFs aWFuIE5SQyAqLworICAgICJpc282NDYtbm8iLCAgICAgICAgICBGQ19OT0FTQ0lJLCBDTV9JTlYs IC8qIE5vcndlZ2lhbiBhbmQgRGFuaXNoIE5SQyAqLworICAgICJpc282NDYtcG8iLCAgICAgICAg ICBGQ19QT0FTQ0lJLCBDTV9JTlYsIC8qIFBvcnR1Z3Vlc2UgTlJDICovCisgICAgImlzbzY0Ni1z ZSIsICAgICAgICAgIEZDX1NXQVNDSUksIENNX0lOViwgLyogU3dlZGlzaCBOUkMgKi8KKworICAg ICJpdGFsaWFuIiwgICAgICAgICAgICBGQ19JVEFTQ0lJLCBDTV9JTlYsIC8qIEl0YWxpYW4gTlJD ICovCisKKyNpZmRlZiBDWVJJTExJQworICAgICJrIiwgICAgICAgICAgICAgICAgICBGQ19LT0k4 LCAgICBDTV9BQlJ8Q01fSU5WLAorICAgICJrbyIsICAgICAgICAgICAgICAgICBGQ19LT0k4LCAg ICBDTV9BQlJ8Q01fSU5WLAorICAgICJrb2kiLCAgICAgICAgICAgICAgICBGQ19LT0k4LCAgICBD TV9BQlJ8Q01fSU5WLAorICAgICJrb2k3IiwgICAgICAgICAgICAgICBGQ19LT0k3LCAgICAwLCAv KiBTaG9ydCBLT0kgQ3lyaWxsaWMgKi8KKyAgICAia29pOCIsICAgICAgICAgICAgICAgRkNfS09J OCwgICAgMCwgLyogT2xkIEtPSS04IEN5cmlsbGljICovCisgICAgImtvaTgtZSIsICAgICAgICAg ICAgIEZDX0tPSTgsICAgIENNX0lOViwgLyogT2xkIEtPSS04IEN5cmlsbGljICovCisgICAgImtv aTgtY3lyaWxsaWMiLCAgICAgIEZDX0tPSTgsICAgIENNX0lOViwKKyAgICAia29pOC1yIiwgICAg ICAgICAgICAgRkNfS09JOFIsICAgQ01fSU5WLCAvKiBLT0k4LVIgUkZDMTQ4OSAqLworICAgICJr b2k4LXUiLCAgICAgICAgICAgICBGQ19LT0k4VSwgICBDTV9JTlYsIC8qIEtPSTgtVSBSRkMyMzE5 ICovCisgICAgImtvaThyIiwgICAgICAgICAgICAgIEZDX0tPSThSLCAgIDAsIC8qIEtPSTgtUiBS RkMxNDg5ICovCisgICAgImtvaTh1IiwgICAgICAgICAgICAgIEZDX0tPSThVLCAgIDAsIC8qIEtP STgtVSBSRkMyMzE5ICovCisjZW5kaWYgLyogQ1lSSUxMSUMgKi8KKyAgICAibCIsICAgICAgICAg ICAgICAgICAgRkNfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGEiLCAgICAgICAgICAg ICAgICAgRkNfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0IiwgICAgICAgICAgICAg ICAgRkNfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0aSIsICAgICAgICAgICAgICAg RkNfMUxBVElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0aW4iLCAgICAgICAgICAgICAgRkNf MUxBVElOLCAgQ01fQUJSfENNX0lOViwKKyAgICAibGF0aW4xLWlzbyIsICAgICAgICAgRkNfMUxB VElOLCAgMCwgLyogSVNPIExhdGluIEFscGhhYmV0IDEgKi8KKyNpZmRlZiBMQVRJTjIKKyAgICAi bGF0aW4yLWlzbyIsICAgICAgICAgRkNfMkxBVElOLCAgMCwgLyogSVNPIExhdGluIEFscGhhYmV0 IDIgKi8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyAgICAibGF0aW45LWlzbyIsICAgICAgICAgRkNf OUxBVElOLCAgMCwgLyogSVNPIExhdGluIEFscGhhYmV0IDkgKi8KKyAgICAibWFjaW50b3NoLWxh dGluIiwgICAgRkNfQVBQUUQsICAgMCwgLyogIkV4dGVuZGVkIE1hYyBMYXRpbiIgKi8KKyNpZmRl ZiBMQVRJTjIKKyAgICAibWF6b3ZpYS1wYyIsICAgICAgICAgRkNfTUFaT1ZJQSwgMCwgLyogUG9s aXNoIE1hem92aWEgUEMgY29kZSBwYWdlICovCisjZW5kaWYgLyogTEFUSU4yICovCisgICAgIm5l eHQtbXVsdGluYXRpb25hbCIsIEZDX05FWFQsICAgIDAsIC8qIE5lWFQgd29ya3N0YXRpb24gKi8K KyAgICAibm9yd2VnaWFuIiwgICAgICAgICAgRkNfTk9BU0NJSSwgMCwgLyogTm9yd2VnaWFuIGFu ZCBEYW5pc2ggTlJDICovCisgICAgInBvcnR1Z3Vlc2UiLCAgICAgICAgIEZDX1BPQVNDSUksIDAs IC8qIFBvcnR1Z3Vlc2UgTlJDICovCisKKyNpZmRlZiBDWVJJTExJQworICAgICJzaG9ydC1rb2ki LCAgICAgICAgICBGQ19LT0k3LCAgICAwLCAvKiBTaG9ydCBLT0kgQ3lyaWxsaWMgKi8KKyNlbmRp ZiAvKiBDWVJJTExJQyAqLworICAgICJzcGFuaXNoIiwgICAgICAgICAgICBGQ19TUEFTQ0lJLCAw LCAvKiBTcGFuaXNoIE5SQyAqLworICAgICJzd2VkaXNoIiwgICAgICAgICAgICBGQ19TV0FTQ0lJ LCAwLCAvKiBTd2VkaXNoIE5SQyAqLworICAgICJzd2lzcyIsICAgICAgICAgICAgICBGQ19DSEFT Q0lJLCAwLCAvKiBTd2lzcyBOUkMgKi8KKyAgICAidHJhbnNwYXJlbnQiLCAgICAgICAgRkNfVFJB TlNQLCAgMCwgLyogVHJhbnNwYXJlbnQgKi8KKyNpZmRlZiBVTklDT0RFCisgICAgInVjczIiLCAg ICAgICAgICAgICAgIEZDX1VDUzIsICAgIDAsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVUNTLTIg Ki8KKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgInVzLWFzY2lpIiwgICAgICAgICAgIEZDX1VT QVNDSUksIENNX0lOViwgLyogTUlNRSAqLworICAgICJ1c2FzY2lpIiwgICAgICAgICAgICBGQ19V U0FTQ0lJLCBDTV9JTlYsCisjaWZkZWYgVU5JQ09ERQorICAgICJ1dGYtOCIsICAgICAgICAgICAg ICBGQ19VVEY4LCAgICBDTV9JTlYsIC8qIElTTyAxMDY0NiAvIFVuaWNvZGUgVVRGLTggKi8KKyAg ICAidXRmOCIsICAgICAgICAgICAgICAgRkNfVVRGOCwgICAgMCwgLyogSVNPIDEwNjQ2IC8gVW5p Y29kZSBVVEYtOCAqLworI2VuZGlmIC8qIFVOSUNPREUgKi8KKyNpZmRlZiBMQVRJTjIKKyAgICAi d2luZG93cy0xMjUwIiwgICAgICAgRkNfQ1AxMjUwLCAgQ01fSU5WLCAvKiBXaW5kb3dzIENQIDEy NTAgKi8KKyNlbmRpZiAvKiBMQVRJTjIgKi8KKyNpZmRlZiBDWVJJTExJQworICAgICJ3aW5kb3dz LTEyNTEiLCAgICAgICBGQ19DUDEyNTEsICBDTV9JTlYsIC8qIFdpbmRvd3MgQ1AgMTI1MSAqLwor I2VuZGlmIC8qIENZUklMTElDICovCisgICAgIndpbmRvd3MtMTI1MiIsICAgICAgIEZDX0NQMTI1 MiwgIENNX0lOViwgLyogV2luZG93cyBDUCAxMjUyICovCisgICAgIiIsIDAsIDAKK307CitpbnQg bnRlcm1jID0gKHNpemVvZih0dGNzdGFiKSAvIHNpemVvZihzdHJ1Y3Qga2V5dGFiKSkgLSAxOwor CisvKiBUaGlzIHRhYmxlIGNvbnRhaW5zIHRoZSBlcXVpdmFsZW50IEZDUyBudW1iZXIgZm9yIGVh Y2ggVENTLiAqLworLyogSWYgdGhlIFRDX3h4eCBzeW1ib2wgZGVmaW5pdGlvbnMgYXJlIGV2ZXIg Y2hhbmdlZCwgZml4IHRoaXMgdGFibGUuICovCisvKiBEaXR0byBpZiBhbm90aGVyIFRDUyBpcyBh ZGRlZC4gKi8KKworaW50Citjc2VxdGFiW01BWFRDU0VUUysxXSA9IHsJCS8qIFRDUy9GQ1MgZXF1 aXZhbGVuY3kgdGFibGUgKi8KKyAgICAtMSwJCQkJCS8qICAwID0gVHJhbnNwYXJlbnQgKi8KKyAg ICBGQ19VU0FTQ0lJLAkJCQkvKiAgMSA9IEFTQ0lJICovCisgICAgRkNfMUxBVElOLAkJCQkvKiAg MiA9IExhdGluLTEgKi8KKyAgICBGQ18yTEFUSU4sCQkJCS8qICAzID0gTGF0aW4tMiAqLworICAg IEZDX0NZUklMTCwJCQkJLyogIDQgPSBMYXRpbi9DeXJpbGxpYyAqLworICAgIEZDX0pFVUMsCQkJ CS8qICA1ID0gSmFwYW5lc2UgRVVDICovCisgICAgRkNfSEVCUkVXLAkJCQkvKiAgNiA9IExhdGlu L0hlYnJldyAqLworICAgIEZDX0dSRUVLLAkJCQkvKiAgNyA9IExhdGluL0dyZWVrICovCisgICAg RkNfOUxBVElOLAkJCQkvKiAgOCA9IExhdGluLTkgKi8KKyAgICBGQ19VQ1MyLAkJCQkvKiAgOSA9 IFVDUy0yICovCisgICAgRkNfVVRGOAkJCQkvKiAxMCA9IFVURi04ICovCit9OworCisvKgorIExh bmd1YWdlczoKKworIFRoaXMgdGFibGUgYWxsb3dzIEMtS2VybWl0IHRvIGhhdmUgYSBTRVQgTEFO R1VBR0UgY29tbWFuZCB0byBhcHBseSBzcGVjaWFsCisgbGFuZ3VhZ2Utc3BlY2lmaWMgcnVsZXMg d2hlbiB0cmFuc2xhdGluZyBmcm9tIGEgY2hhcmFjdGVyIHNldCB0aGF0IGNvbnRhaW5zCisgbmF0 aW9uYWwgY2hhcmFjdGVycyBpbnRvIHBsYWluIEFTQ0lJLCBsaWtlIEdlcm1hbiB1bWxhdXQtYSBi ZWNvbWVzIGFlLgorCisgT3JpZ2luYWxseSwgSSB0aG91Z2h0IGl0IHdvdWxkIGJlIGEgZ29vZCBp ZGVhIHRvIGxldCBTRVQgTEFOR1VBR0UgYWxzbyBzZWxlY3QKKyBhbiBhcHByb3ByaWF0ZSBGSUxF IENIQVJBQ1RFUi1TRVQgYW5kIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQgYXV0b21hdGljYWxseSwK KyBhbmQgdGhlc2UgYXJlIGluY2x1ZGVkIGluIHRoZSBsYW5naW5mbyBzdHJ1Y3R1cmUuICBMYXRl ciBJIHJlYWxpemVkIHRoYXQgdGhpcworIHdhcyBhIGJhZCBpZGVhLiAgQW55IHBhcnRpY3VsYXIg bGFuZ3VhZ2UgKGUuZy4gRHV0Y2gpIGNhbiBiZSByZXByZXNlbnRlZCBieQorIG1hbnkgZGlmZmVy ZW50IGFuZCBpbmNvbXBhdGlibGUgY2hhcmFjdGVyIHNldHMuCisKKyAoQnV0IHdlIGNvdWxkIHVz ZSB0aGUgbmV3ICgxOTk4KSBBU1NPQ0lBVEUgY29tbWFuZCBmb3IgdGhpcy4uLikKKyovCisKK3N0 cnVjdCBsYW5naW5mbyBsYW5nc1tdID0geworLyogIExhbmd1YWdlIGNvZGUgICBGaWxlIENoYXJz ZXQgWGZlciBDaGFyc2V0IE5hbWUgKi8KKyAgICBMX1VTQVNDSUksICAgICAgRkNfVVNBU0NJSSwg IFRDX1VTQVNDSUksICAiQVNDSUkgKEFtZXJpY2FuIEVuZ2xpc2gpIiwKKyAgICBMX0RBTklTSCwg ICAgICAgRkNfTk9BU0NJSSwgIFRDXzFMQVRJTiwgICAiRGFuaXNoIiwKKyAgICBMX0RVVENILCAg ICAgICAgRkNfRFVBU0NJSSwgIFRDXzFMQVRJTiwgICAiRHV0Y2giLAorICAgIExfRklOTklTSCwg ICAgICBGQ19GSUFTQ0lJLCAgVENfMUxBVElOLCAgICJGaW5uaXNoIiwKKyAgICBMX0ZSRU5DSCwg ICAgICAgRkNfRlJBU0NJSSwgIFRDXzFMQVRJTiwgICAiRnJlbmNoIiwKKyAgICBMX0dFUk1BTiwg ICAgICAgRkNfR0VBU0NJSSwgIFRDXzFMQVRJTiwgICAiR2VybWFuIiwKKyNpZmRlZiBHUkVFSwor ICAgIExfR1JFRUssICAgICAgICBGQ19HUkVFSywgICAgVENfR1JFRUssICAgICJHcmVlayIsCisj ZW5kaWYgLyogR1JFRUsgKi8KKyNpZmRlZiBIRUJSRVcKKyAgICBMX0hFQlJFVywgICAgICAgRkNf SEVCUkVXLCAgIFRDX0hFQlJFVywgICAiSGVicmV3IiwKKyNlbmRpZiAvKiBIRUJSRVcgKi8KKyAg ICBMX0hVTkdBUklBTiwgICAgRkNfSFVBU0NJSSwgIFRDXzJMQVRJTiwgICAiSHVuZ2FyaWFuIiwK KyAgICBMX0lDRUxBTkRJQywgICAgRkNfVVNBU0NJSSwgIFRDXzFMQVRJTiwgICAiSWNlbGFuZGlj IiwKKyAgICBMX0lUQUxJQU4sICAgICAgRkNfSVRBU0NJSSwgIFRDXzFMQVRJTiwgICAiSXRhbGlh biIsCisjaWZkZWYgS0FOSkkKKyAgICBMX0pBUEFORVNFLCAgICAgRkNfSkVVQywgICAgIFRDX0pF VUMsICAgICAiSmFwYW5lc2UiLAorI2VuZGlmIC8qIEtBTkpJICovCisgICAgTF9OT1JXRUdJQU4s ICAgIEZDX05PQVNDSUksICBUQ18xTEFUSU4sICAgIk5vcndlZ2lhbiIsCisgICAgTF9QT1JUVUdV RVNFLCAgIEZDX1BPQVNDSUksICBUQ18xTEFUSU4sICAgIlBvcnR1Z3Vlc2UiLAorI2lmZGVmIENZ UklMTElDCisgICAgTF9SVVNTSUFOLCAgICAgIEZDX0NQODY2LCAgICBUQ19DWVJJTEwsICAgIlJ1 c3NpYW4iLAorI2VuZGlmIC8qIENZUklMTElDICovCisgICAgTF9TUEFOSVNILCAgICAgIEZDX1NQ QVNDSUksICBUQ18xTEFUSU4sICAgIlNwYW5pc2giLAorICAgIExfU1dFRElTSCwgICAgICBGQ19T V0FTQ0lJLCAgVENfMUxBVElOLCAgICJTd2VkaXNoIiwKKyAgICBMX1NXSVNTLCAgICAgICAgRkNf Q0hBU0NJSSwgIFRDXzFMQVRJTiwgICAiU3dpc3MiCit9OworaW50IG5sYW5ncyA9IChzaXplb2Yo bGFuZ3MpIC8gc2l6ZW9mKHN0cnVjdCBsYW5naW5mbykpOworCisvKgorICBLZXl3b3JkIHRhYmxl IGZvciB0aGUgU0VUIExBTkdVQUdFIGNvbW1hbmQuCisgIE9ubHkgYSBmZXcgb2YgdGhlc2UgKEdl cm1hbiwgU2NhbmRpbmF2aWFuLCBldGMpIGFjdHVhbGx5IGRvIGFueXRoaW5nLgorICBUaGUgbGFu Z3VhZ2UgaXMgdXNlZCB0byBpbnZva2Ugc3BlY2lhbCB0cmFuc2xhdGlvbiBydWxlcyB3aGVuIGNv bnZlcnRpbmcKKyAgZnJvbSBhbiA4LWJpdCBjaGFyYWN0ZXIgc2V0IHRvIEFTQ0lJOyBmb3IgZXhh bXBsZSwgR2VybWFuIHUtZGlhZXJlc2lzCisgIGJlY29tZXMgInVlIiwgRHV0Y2ggeS1kaWFlcmVz aXMgYmVjb21lcyAiaWoiLiAgTGFuZ3VhZ2VzIHdpdGhvdXQgYXNzb2NpYXRlZAorICBydWxlcyBh cmUgaW52aXNpYmxlIChDTV9JTlYpLgorKi8KK3N0cnVjdCBrZXl0YWIgbG5ndGFiW10gPSB7Cisg ICAgImFzY2lpIiwgICAgICAgICAgICBMX1VTQVNDSUksICAgIENNX0lOViwKKyAgICAiZGFuaXNo IiwgICAgICAgICAgIExfREFOSVNILCAgICAgMCwKKyAgICAiZHV0Y2giLCAgICAgICAgICAgIExf RFVUQ0gsICAgICAgMCwKKyAgICAiZW5nbGlzaCIsICAgICAgICAgIExfVVNBU0NJSSwgICAgQ01f SU5WLAorICAgICJmaW5uaXNoIiwgICAgICAgICAgTF9GSU5OSVNILCAgICAwLAorICAgICJmcmVu Y2giLCAgICAgICAgICAgTF9GUkVOQ0gsICAgICAwLAorICAgICJnZXJtYW4iLCAgICAgICAgICAg TF9HRVJNQU4sICAgICAwLAorI2lmZGVmIEdSRUVLCisgICAgImdyZWVrIiwgICAgICAgICAgICBM X0dSRUVLLCAgICAgIENNX0lOViwKKyNlbmRpZiAvKiBHUkVFSyAqLworI2lmZGVmIEhFQlJFVwor ICAgICJoZWJyZXciLCAgICAgICAgICAgTF9IRUJSRVcsICAgICBDTV9JTlYsCisjZW5kaWYgLyog SEVCUkVXICovCisgICAgImh1bmdhcmlhbiIsICAgICAgICBMX0hVTkdBUklBTiwgIENNX0lOViwK KyAgICAiaWNlbGFuZGljIiwgICAgICAgIExfSUNFTEFORElDLCAgMCwKKyAgICAiaXRhbGlhbiIs ICAgICAgICAgIExfSVRBTElBTiwgICAgQ01fSU5WLAorI2lmZGVmIEtBTkpJCisgICAgImphcGFu ZXNlIiwgICAgICAgICBMX0pBUEFORVNFLCAgIENNX0lOViwKKyNlbmRpZiAvKiBLQU5KSSAqLwor ICAgICJub3J3ZWdpYW4iLCAgICAgICAgTF9OT1JXRUdJQU4sICAwLAorICAgICJub25lIiwgICAg ICAgICAgICAgTF9VU0FTQ0lJLCAgICAwLAorICAgICJwb3J0dWd1ZXNlIiwgICAgICAgTF9QT1JU VUdVRVNFLCBDTV9JTlYsCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAicnVzc2lhbiIsICAgICAgICAg IExfUlVTU0lBTiwgICAgMCwKKyNlbmRpZiAvKiBDWVJJTExJQyAqLworICAgICJzcGFuaXNoIiwg ICAgICAgICAgTF9TUEFOSVNILCAgICBDTV9JTlYsCisgICAgInN3ZWRpc2giLCAgICAgICAgICBM X1NXRURJU0gsICAgIDAsCisjaWZkZWYgQ1lSSUxMSUMKKyAgICAidWtyYWluaWFuIiwgICAgICAg IExfUlVTU0lBTiwgICAgMCwKKyNlbmRpZiAvKiBDWVJJTExJQyAqLworICAgICIiLCAwLCAwCit9 OworaW50IG5sbmcgPSAoc2l6ZW9mKGxuZ3RhYikgLyBzaXplb2Yoc3RydWN0IGtleXRhYikpIC0g MTsgLyogaG93IG1hbnkgKi8KKworCisvKiBUcmFuc2xhdGlvbiB0YWJsZXMgLi4uICovCisKKy8q CisgIEZvciBlYWNoIHBhaXIgb2YgKHRyYW5zZmVyLGZpbGUpIGNoYXJhY3RlciBzZXRzLCB3ZSBu ZWVkIHR3byB0cmFuc2xhdGlvbgorICBmdW5jdGlvbnMsIG9uZSBmb3Igc2VuZGluZywgb25lIGZv ciByZWNlaXZpbmcuCisqLworCisvKgorICBIZXJlIGlzIHRoZSBmaXJzdCB0YWJsZSwgTGF0aW4t MSB0byBBU0NJSSwgZnVsbHkgYW5ub3RhdGVkLi4uCisgIFRoaXMgb25lIGlzIGFic29sdXRlbHkg Tk9UIGludmVydGlibGUsIHNpbmNlIHdlJ3JlIGdvaW5nIGZyb20gYW4gOC1iaXQKKyAgc2V0IHRv IGEgNy1iaXQgc2V0LiAgQWNjZW50ZWQgbGV0dGVycyBhcmUgbWFwcGVkIHRvIHVuYWNjZW50ZWQK KyAgZXF1aXZhbGVudHMsIEMxIGNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxsIHRyYW5zbGF0ZWQg dG8gIj8iLCBldGMuCisqLworQ09OU1QgQ0hBUgoreWwxYXNbXSA9IHsgIC8qIElTTyA4ODU5LTEg TGF0aW4gQWxwaGFiZXQgMSB0byBVUyBBU0NJSSAqLworICAgICAgLyogIFNvdXJjZSBjaGFyYWN0 ZXIgICAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICA9PiBUcmFuc2xhdGlvbiAqLworICAgICAg LyogIERlYyByb3cvY29sIFNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLworICAwLCAgLyogIDAwMCAgMDAvMDAgIEMwIE5VTCAgQ3RybC1AICAgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLworICAxLCAgLyogIDAwMSAgMDAvMDEgIEMwIFNPSCAgQ3Ry bC1BICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworICAyLCAgLyogIDAwMiAgMDAv MDIgIEMwIFNUWCAgQ3RybC1CICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworICAz LCAgLyogIDAwMyAgMDAvMDMgIEMwIEVUWCAgQ3RybC1DICAgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLworICA0LCAgLyogIDAwNCAgMDAvMDQgIEMwIEVPVCAgQ3RybC1EICAgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLworICA1LCAgLyogIDAwNSAgMDAvMDUgIEMwIEVOUSAg Q3RybC1FICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworICA2LCAgLyogIDAwNiAg MDAvMDYgIEMwIEFDSyAgQ3RybC1GICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwor ICA3LCAgLyogIDAwNyAgMDAvMDcgIEMwIEJFTCAgQ3RybC1HICAgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLworICA4LCAgLyogIDAwOCAgMDAvMDggIEMwIEJTICAgQ3RybC1IICAgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworICA5LCAgLyogIDAwOSAgMDAvMDkgIEMwIEhU ICAgQ3RybC1JICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDEwLCAgLyogIDAx MCAgMDAvMTAgIEMwIExGICAgQ3RybC1KICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LworIDExLCAgLyogIDAxMSAgMDAvMTEgIEMwIFZUICAgQ3RybC1LICAgICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLworIDEyLCAgLyogIDAxMiAgMDAvMTIgIEMwIEZGICAgQ3RybC1MICAg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDEzLCAgLyogIDAxMyAgMDAvMTMgIEMw IENSICAgQ3RybC1NICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDE0LCAgLyog IDAxNCAgMDAvMTQgIEMwIFNPICAgQ3RybC1OICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLworIDE1LCAgLyogIDAxNSAgMDAvMTUgIEMwIFNJICAgQ3RybC1PICAgICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLworIDE2LCAgLyogIDAxNiAgMDEvMDAgIEMwIERMRSAgQ3RybC1Q ICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDE3LCAgLyogIDAxNyAgMDEvMDEg IEMwIERDMSAgQ3RybC1RICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDE4LCAg LyogIDAxOCAgMDEvMDIgIEMwIERDMiAgQ3RybC1SICAgICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLworIDE5LCAgLyogIDAxOSAgMDEvMDMgIEMwIERDMyAgQ3RybC1TICAgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLworIDIwLCAgLyogIDAyMCAgMDEvMDQgIEMwIERDNCAgQ3Ry bC1UICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDIxLCAgLyogIDAyMSAgMDEv MDUgIEMwIE5BSyAgQ3RybC1VICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDIy LCAgLyogIDAyMiAgMDEvMDYgIEMwIFNZTiAgQ3RybC1WICAgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLworIDIzLCAgLyogIDAyMyAgMDEvMDcgIEMwIEVUQiAgQ3RybC1XICAgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDI0LCAgLyogIDAyNCAgMDEvMDggIEMwIENBTiAg Q3RybC1YICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDI1LCAgLyogIDAyNSAg MDEvMDkgIEMwIEVNICAgQ3RybC1ZICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwor IDI2LCAgLyogIDAyNiAgMDEvMTAgIEMwIFNVQiAgQ3RybC1aICAgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLworIDI3LCAgLyogIDAyNyAgMDEvMTEgIEMwIEVTQyAgQ3RybC1bICAgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDI4LCAgLyogIDAyOCAgMDEvMTIgIEMwIEZT ICAgQ3RybC1cICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDI5LCAgLyogIDAy OSAgMDEvMTMgIEMwIEdTICAgQ3RybC1dICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LworIDMwLCAgLyogIDAzMCAgMDEvMTQgIEMwIFJTICAgQ3RybC1eICAgICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLworIDMxLCAgLyogIDAzMSAgMDEvMTUgIEMwIFVTICAgQ3RybC1fICAg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDMyLCAgLyogIDAzMiAgMDIvMDAgICAg IFNQICAgU3BhY2UgICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDMzLCAgLyog IDAzMyAgMDIvMDEgIEcwICEgICAgRXhjbGFtYXRpb24gbWFyayAgICAgICAgICA9PiAgKHNlbGYp ICAqLworIDM0LCAgLyogIDAzNCAgMDIvMDIgIEcwICIgICAgRG91YmxlcXVvdGUgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLworIDM1LCAgLyogIDAzNSAgMDIvMDMgIEcwICMgICAgTnVtYmVy IHNpZ24gICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDM2LCAgLyogIDAzNiAgMDIvMDQg IEcwICQgICAgRG9sbGFyIHNpZ24gICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDM3LCAg LyogIDAzNyAgMDIvMDUgIEcwICUgICAgUGVyY2VudCBzaWduICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLworIDM4LCAgLyogIDAzOCAgMDIvMDYgIEcwICYgICAgQW1wZXJzYW5kICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLworIDM5LCAgLyogIDAzOSAgMDIvMDcgIEcwICcgICAgQXBv c3Ryb3BoZSAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDQwLCAgLyogIDA0MCAgMDIv MDggIEcwICggICAgTGVmdCBwYXJlbnRoZXNpcyAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDQx LCAgLyogIDA0MSAgMDIvMDkgIEcwICkgICAgUmlnaHQgcGFyZW50aGVzaXMgICAgICAgICA9PiAg KHNlbGYpICAqLworIDQyLCAgLyogIDA0MiAgMDIvMTAgIEcwICogICAgQXN0ZXJpc2sgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDQzLCAgLyogIDA0MyAgMDIvMTEgIEcwICsgICAg UGx1cyBzaWduICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDQ0LCAgLyogIDA0NCAg MDIvMTIgIEcwICwgICAgQ29tbWEgICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwor IDQ1LCAgLyogIDA0NSAgMDIvMTMgIEcwIC0gICAgSHlwaGVuLCBtaW51cyBzaWduICAgICAgICA9 PiAgKHNlbGYpICAqLworIDQ2LCAgLyogIDA0NiAgMDIvMTQgIEcwIC4gICAgUGVyaW9kLCBmdWxs IHN0b3AgICAgICAgICA9PiAgKHNlbGYpICAqLworIDQ3LCAgLyogIDA0NyAgMDIvMTUgIEcwIC8g ICAgU2xhc2gsIHNvbGlkdXMgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDQ4LCAgLyogIDA0 OCAgMDMvMDAgIEcwIDAgICAgRGlnaXQgMCAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LworIDQ5LCAgLyogIDA0OSAgMDMvMDEgIEcwIDEgICAgRGlnaXQgMSAgICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLworIDUwLCAgLyogIDA1MCAgMDMvMDIgIEcwIDIgICAgRGlnaXQgMiAg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDUxLCAgLyogIDA1MSAgMDMvMDMgIEcw IDMgICAgRGlnaXQgMyAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDUyLCAgLyog IDA1MiAgMDMvMDQgIEcwIDQgICAgRGlnaXQgNCAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLworIDUzLCAgLyogIDA1MyAgMDMvMDUgIEcwIDUgICAgRGlnaXQgNSAgICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLworIDU0LCAgLyogIDA1NCAgMDMvMDYgIEcwIDYgICAgRGlnaXQg NiAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDU1LCAgLyogIDA1NSAgMDMvMDcg IEcwIDcgICAgRGlnaXQgNyAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDU2LCAg LyogIDA1NiAgMDMvMDggIEcwIDggICAgRGlnaXQgOCAgICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLworIDU3LCAgLyogIDA1NyAgMDMvMDkgIEcwIDkgICAgRGlnaXQgOSAgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLworIDU4LCAgLyogIDA1OCAgMDMvMTAgIEcwIDogICAgQ29s b24gICAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDU5LCAgLyogIDA1OSAgMDMv MTEgIEcwIDsgICAgU2VtaWNvbG9uICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDYw LCAgLyogIDA2MCAgMDMvMTIgIEcwIDwgICAgTGVzcy10aGFuIHNpZ24gICAgICAgICAgICA9PiAg KHNlbGYpICAqLworIDYxLCAgLyogIDA2MSAgMDMvMTMgIEcwID0gICAgRXF1YWxzIHNpZ24gICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDYyLCAgLyogIDA2MiAgMDMvMTQgIEcwID4gICAg R3JlYXRlci10aGFuIHNpZ24gICAgICAgICA9PiAgKHNlbGYpICAqLworIDYzLCAgLyogIDA2MyAg MDMvMTUgIEcwID8gICAgUXVlc3Rpb24gbWFyayAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwor IDY0LCAgLyogIDA2NCAgMDQvMDAgIEcwIEAgICAgQ29tbWVyY2lhbCBhdCBzaWduICAgICAgICA9 PiAgKHNlbGYpICAqLworIDY1LCAgLyogIDA2NSAgMDQvMDEgIEcwIEEgICAgTGV0dGVyIEEgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDY2LCAgLyogIDA2NiAgMDQvMDIgIEcwIEIg ICAgTGV0dGVyIEIgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDY3LCAgLyogIDA2 NyAgMDQvMDMgIEcwIEMgICAgTGV0dGVyIEMgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LworIDY4LCAgLyogIDA2OCAgMDQvMDQgIEcwIEQgICAgTGV0dGVyIEQgICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLworIDY5LCAgLyogIDA2OSAgMDQvMDUgIEcwIEUgICAgTGV0dGVyIEUg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDcwLCAgLyogIDA3MCAgMDQvMDYgIEcw IEYgICAgTGV0dGVyIEYgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDcxLCAgLyog IDA3MSAgMDQvMDcgIEcwIEcgICAgTGV0dGVyIEcgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLworIDcyLCAgLyogIDA3MiAgMDQvMDggIEcwIEggICAgTGV0dGVyIEggICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLworIDczLCAgLyogIDA3MyAgMDQvMDkgIEcwIEkgICAgTGV0dGVy IEkgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDc0LCAgLyogIDA3NCAgMDQvMTAg IEcwIEogICAgTGV0dGVyIEogICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDc1LCAg LyogIDA3NSAgMDQvMTEgIEcwIEsgICAgTGV0dGVyIEsgICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLworIDc2LCAgLyogIDA3NiAgMDQvMTIgIEcwIEwgICAgTGV0dGVyIEwgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLworIDc3LCAgLyogIDA3NyAgMDQvMTMgIEcwIE0gICAgTGV0 dGVyIE0gICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDc4LCAgLyogIDA3OCAgMDQv MTQgIEcwIE4gICAgTGV0dGVyIE4gICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDc5 LCAgLyogIDA3OSAgMDQvMTUgIEcwIE8gICAgTGV0dGVyIE8gICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLworIDgwLCAgLyogIDA4MCAgMDUvMDAgIEcwIFAgICAgTGV0dGVyIFAgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDgxLCAgLyogIDA4MSAgMDUvMDEgIEcwIFEgICAg TGV0dGVyIFEgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDgyLCAgLyogIDA4MiAg MDUvMDIgIEcwIFIgICAgTGV0dGVyIFIgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwor IDgzLCAgLyogIDA4MyAgMDUvMDMgIEcwIFMgICAgTGV0dGVyIFMgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLworIDg0LCAgLyogIDA4NCAgMDUvMDQgIEcwIFQgICAgTGV0dGVyIFQgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDg1LCAgLyogIDA4NSAgMDUvMDUgIEcwIFUg ICAgTGV0dGVyIFUgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDg2LCAgLyogIDA4 NiAgMDUvMDYgIEcwIFYgICAgTGV0dGVyIFYgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LworIDg3LCAgLyogIDA4NyAgMDUvMDcgIEcwIFcgICAgTGV0dGVyIFcgICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLworIDg4LCAgLyogIDA4OCAgMDUvMDggIEcwIFggICAgTGV0dGVyIFgg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDg5LCAgLyogIDA4OSAgMDUvMDkgIEcw IFkgICAgTGV0dGVyIFkgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDkwLCAgLyog IDA5MCAgMDUvMTAgIEcwIFogICAgTGV0dGVyIFogICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLworIDkxLCAgLyogIDA5MSAgMDUvMTEgIEcwIFsgICAgTGVmdCBzcXVhcmUgYnJhY2tldCAg ICAgICA9PiAgKHNlbGYpICAqLworIDkyLCAgLyogIDA5MiAgMDUvMTIgIEcwIFwgICAgUmV2ZXJz ZSBzbGFzaCAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDkzLCAgLyogIDA5MyAgMDUvMTMg IEcwIF0gICAgUmlnaHQgc3F1YXJlIGJyYWNrZXQgICAgICA9PiAgKHNlbGYpICAqLworIDk0LCAg LyogIDA5NCAgMDUvMTQgIEcwIF4gICAgQ2lyY3VtZmxleCBhY2NlbnQgICAgICAgICA9PiAgKHNl bGYpICAqLworIDk1LCAgLyogIDA5NSAgMDUvMTUgIEcwIF8gICAgVW5kZXJsaW5lLCBsb3cgbGlu ZSAgICAgICA9PiAgKHNlbGYpICAqLworIDk2LCAgLyogIDA5NiAgMDYvMDAgIEcwIGAgICAgR3Jh dmUgYWNjZW50ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDk3LCAgLyogIDA5NyAgMDYv MDEgIEcwIGEgICAgTGV0dGVyIGEgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworIDk4 LCAgLyogIDA5OCAgMDYvMDIgIEcwIGIgICAgTGV0dGVyIGIgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLworIDk5LCAgLyogIDA5OSAgMDYvMDMgIEcwIGMgICAgTGV0dGVyIGMgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTAwLCAgLyogIDEwMCAgMDYvMDQgIEcwIGQgICAg TGV0dGVyIGQgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTAxLCAgLyogIDEwMSAg MDYvMDUgIEcwIGUgICAgTGV0dGVyIGUgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwor MTAyLCAgLyogIDEwMiAgMDYvMDYgIEcwIGYgICAgTGV0dGVyIGYgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLworMTAzLCAgLyogIDEwMyAgMDYvMDcgIEcwIGcgICAgTGV0dGVyIGcgICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTA0LCAgLyogIDEwNCAgMDYvMDggIEcwIGgg ICAgTGV0dGVyIGggICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTA1LCAgLyogIDEw NSAgMDYvMDkgIEcwIGkgICAgTGV0dGVyIGkgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LworMTA2LCAgLyogIDEwNiAgMDYvMTAgIEcwIGogICAgTGV0dGVyIGogICAgICAgICAgICAgICAg ICA9PiAgKHNlbGYpICAqLworMTA3LCAgLyogIDEwNyAgMDYvMTEgIEcwIGsgICAgTGV0dGVyIGsg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTA4LCAgLyogIDEwOCAgMDYvMTIgIEcw IGwgICAgTGV0dGVyIGwgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTA5LCAgLyog IDEwOSAgMDYvMTMgIEcwIG0gICAgTGV0dGVyIG0gICAgICAgICAgICAgICAgICA9PiAgKHNlbGYp ICAqLworMTEwLCAgLyogIDExMCAgMDYvMTQgIEcwIG4gICAgTGV0dGVyIG4gICAgICAgICAgICAg ICAgICA9PiAgKHNlbGYpICAqLworMTExLCAgLyogIDExMSAgMDYvMTUgIEcwIG8gICAgTGV0dGVy IG8gICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTEyLCAgLyogIDExMiAgMDcvMDAg IEcwIHAgICAgTGV0dGVyIHAgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTEzLCAg LyogIDExMyAgMDcvMDEgIEcwIHEgICAgTGV0dGVyIHEgICAgICAgICAgICAgICAgICA9PiAgKHNl bGYpICAqLworMTE0LCAgLyogIDExNCAgMDcvMDIgIEcwIHIgICAgTGV0dGVyIHIgICAgICAgICAg ICAgICAgICA9PiAgKHNlbGYpICAqLworMTE1LCAgLyogIDExNSAgMDcvMDMgIEcwIHMgICAgTGV0 dGVyIHMgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTE2LCAgLyogIDExNiAgMDcv MDQgIEcwIHQgICAgTGV0dGVyIHQgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTE3 LCAgLyogIDExNyAgMDcvMDUgIEcwIHUgICAgTGV0dGVyIHUgICAgICAgICAgICAgICAgICA9PiAg KHNlbGYpICAqLworMTE4LCAgLyogIDExOCAgMDcvMDYgIEcwIHYgICAgTGV0dGVyIHYgICAgICAg ICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTE5LCAgLyogIDExOSAgMDcvMDcgIEcwIHcgICAg TGV0dGVyIHcgICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTIwLCAgLyogIDEyMCAg MDcvMDggIEcwIHggICAgTGV0dGVyIHggICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLwor MTIxLCAgLyogIDEyMSAgMDcvMDkgIEcwIHkgICAgTGV0dGVyIHkgICAgICAgICAgICAgICAgICA9 PiAgKHNlbGYpICAqLworMTIyLCAgLyogIDEyMiAgMDcvMTAgIEcwIHogICAgTGV0dGVyIHogICAg ICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTIzLCAgLyogIDEyMyAgMDcvMTEgIEcwIHsg ICAgTGVmdCBjdXJseSBicmFja2V0ICAgICAgICA9PiAgKHNlbGYpICAqLworMTI0LCAgLyogIDEy NCAgMDcvMTIgIEcwIHwgICAgVmVydGljYWwgYmFyICAgICAgICAgICAgICA9PiAgKHNlbGYpICAq LworMTI1LCAgLyogIDEyNSAgMDcvMTMgIEcwIH0gICAgUmlnaHQgY3VybHkgYnJhY2tldCAgICAg ICA9PiAgKHNlbGYpICAqLworMTI2LCAgLyogIDEyNiAgMDcvMTQgIEcwIH4gICAgVGlsZGUgICAg ICAgICAgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworMTI3LCAgLyogIDEyNyAgMDcvMTUgICAg IERFTCAgRGVsZXRlLCBSdWJvdXQgICAgICAgICAgICA9PiAgKHNlbGYpICAqLworVU5LLCAgLyog IDEyOCAgMDgvMDAgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAg ICAqLworVU5LLCAgLyogIDEyOSAgMDgvMDEgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDEzMCAgMDgvMDIgIEMxICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDEzMSAgMDgvMDMg IEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAg LyogIDEzMiAgMDgvMDQgIEMxIElORCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5L ICAgICAqLworVU5LLCAgLyogIDEzMyAgMDgvMDUgIEMxIE5FTCAgICAgICAgICAgICAgICAgICAg ICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDEzNCAgMDgvMDYgIEMxIFNTQSAgICAg ICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDEzNSAgMDgv MDcgIEMxIEVTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5L LCAgLyogIDEzNiAgMDgvMDggIEMxIEhUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAg VU5LICAgICAqLworVU5LLCAgLyogIDEzNyAgMDgvMDkgIEMxICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDEzOCAgMDgvMTAgIEMxICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDEzOSAg MDgvMTEgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwor VU5LLCAgLyogIDE0MCAgMDgvMTIgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE0MSAgMDgvMTMgIEMxIFJJICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE0MiAgMDgvMTQgIEMxIFNT MiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE0 MyAgMDgvMTUgIEMxIFNTMyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAq LworVU5LLCAgLyogIDE0NCAgMDkvMDAgIEMxIERDUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE0NSAgMDkvMDEgIEMxICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE0NiAgMDkvMDIgIEMx ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyog IDE0NyAgMDkvMDMgIEMxIFNUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAg ICAqLworVU5LLCAgLyogIDE0OCAgMDkvMDQgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE0OSAgMDkvMDUgIEMxICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE1MCAgMDkvMDYg IEMxIFNQQSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAg LyogIDE1MSAgMDkvMDcgIEMxIEVQQSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5L ICAgICAqLworVU5LLCAgLyogIDE1MiAgMDkvMDggIEMxICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE1MyAgMDkvMDkgIEMxICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE1NCAgMDkv MTAgIEMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5L LCAgLyogIDE1NSAgMDkvMTEgIEMxIENTSSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAg VU5LICAgICAqLworVU5LLCAgLyogIDE1NiAgMDkvMTIgIEMxIFNUICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE1NyAgMDkvMTMgIEMxIE9TQyAg ICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAgLyogIDE1OCAg MDkvMTQgIEMxIFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLwor VU5LLCAgLyogIDE1OSAgMDkvMTUgIEMxIEFQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9 PiAgVU5LICAgICAqLworIDMyLCAgLyogIDE2MCAgMTAvMDAgIEcxICAgICAgTm8tYnJlYWsgc3Bh Y2UgICAgICAgICAgICA9PiAgU1AgICAgICAqLworIDMzLCAgLyogIDE2MSAgMTAvMDEgIEcxICAg ICAgSW52ZXJ0ZWQgZXhjbGFtYXRpb24gICAgICA9PiAgISAgICAgICAqLworIDk5LCAgLyogIDE2 MiAgMTAvMDIgIEcxICAgICAgQ2VudCBzaWduICAgICAgICAgICAgICAgICA9PiAgYyAgICAgICAq LworIDM1LCAgLyogIDE2MyAgMTAvMDMgIEcxICAgICAgUG91bmQgc2lnbiAgICAgICAgICAgICAg ICA9PiAgIyAgICAgICAqLworIDM2LCAgLyogIDE2NCAgMTAvMDQgIEcxICAgICAgQ3VycmVuY3kg c2lnbiAgICAgICAgICAgICA9PiAgJCAgICAgICAqLworIDg5LCAgLyogIDE2NSAgMTAvMDUgIEcx ICAgICAgWWVuIHNpZ24gICAgICAgICAgICAgICAgICA9PiAgWSAgICAgICAqLworMTI0LCAgLyog IDE2NiAgMTAvMDYgIEcxICAgICAgQnJva2VuIGJhciAgICAgICAgICAgICAgICA9PiAgfCAgICAg ICAqLworIDgwLCAgLyogIDE2NyAgMTAvMDcgIEcxICAgICAgUGFyYWdyYXBoIHNpZ24gICAgICAg ICAgICA9PiAgUCAgICAgICAqLworIDM0LCAgLyogIDE2OCAgMTAvMDggIEcxICAgICAgRGlhZXJl c2lzICAgICAgICAgICAgICAgICA9PiAgIiAgICAgICAqLworIDY3LCAgLyogIDE2OSAgMTAvMDkg IEcxICAgICAgQ29weXJpZ2h0IHNpZ24gICAgICAgICAgICA9PiAgQyAgICAgICAqLworIDk3LCAg LyogIDE3MCAgMTAvMTAgIEcxICAgICAgRmVtaW5pbmUgb3JkaW5hbCAgICAgICAgICA9PiAgYSAg ICAgICAqLworIDM0LCAgLyogIDE3MSAgMTAvMTEgIEcxICAgICAgTGVmdCBhbmdsZSBxdW90YXRp b24gICAgICA9PiAgIiAgICAgICAqLworMTI2LCAgLyogIDE3MiAgMTAvMTIgIEcxICAgICAgTm90 IHNpZ24gICAgICAgICAgICAgICAgICA9PiAgfiAgICAgICAqLworIDQ1LCAgLyogIDE3MyAgMTAv MTMgIEcxICAgICAgU29mdCBoeXBoZW4gICAgICAgICAgICAgICA9PiAgLSAgICAgICAqLworIDgy LCAgLyogIDE3NCAgMTAvMTQgIEcxICAgICAgUmVnaXN0ZXJlZCB0cmFkZSBtYXJrICAgICA9PiAg UiAgICAgICAqLworIDk1LCAgLyogIDE3NSAgMTAvMTUgIEcxICAgICAgTWFjcm9uICAgICAgICAg ICAgICAgICAgICA9PiAgXyAgICAgICAqLworMTExLCAgLyogIDE3NiAgMTEvMDAgIEcxICAgICAg RGVncmVlIHNpZ24sIHJpbmcgYWJvdmUgICA9PiAgbyAgICAgICAqLworVU5LLCAgLyogIDE3NyAg MTEvMDEgIEcxICAgICAgUGx1cy1taW51cyBzaWduICAgICAgICAgICA9PiAgVU5LICAgICAqLwor IDUwLCAgLyogIDE3OCAgMTEvMDIgIEcxICAgICAgU3VwZXJzY3JpcHQgdHdvICAgICAgICAgICA9 PiAgMiAgICAgICAqLworIDUxLCAgLyogIDE3OSAgMTEvMDMgIEcxICAgICAgU3VwZXJzY3JpcHQg dGhyZWUgICAgICAgICA9PiAgMyAgICAgICAqLworIDM5LCAgLyogIDE4MCAgMTEvMDQgIEcxICAg ICAgQWN1dGUgYWNjZW50ICAgICAgICAgICAgICA9PiAgJyAgICAgICAqLworMTE3LCAgLyogIDE4 MSAgMTEvMDUgIEcxICAgICAgTWljcm8gc2lnbiAgICAgICAgICAgICAgICA9PiAgdSAgICAgICAq LworIDQ1LCAgLyogIDE4MiAgMTEvMDYgIEcxICAgICAgUGlsY3JvdyBzaWduICAgICAgICAgICAg ICA9PiAgLSAgICAgICAqLworIDQ1LCAgLyogIDE4MyAgMTEvMDcgIEcxICAgICAgTWlkZGxlIGRv dCAgICAgICAgICAgICAgICA9PiAgLSAgICAgICAqLworIDQ0LCAgLyogIDE4NCAgMTEvMDggIEcx ICAgICAgQ2VkaWxsYSAgICAgICAgICAgICAgICAgICA9PiAgLCAgICAgICAqLworIDQ5LCAgLyog IDE4NSAgMTEvMDkgIEcxICAgICAgU3VwZXJzY3JpcHQgb25lICAgICAgICAgICA9PiAgMSAgICAg ICAqLworMTExLCAgLyogIDE4NiAgMTEvMTAgIEcxICAgICAgTWFzY3VsaW5lIG9yZGluYWwgICAg ICAgICA9PiAgbyAgICAgICAqLworIDM0LCAgLyogIDE4NyAgMTEvMTEgIEcxICAgICAgUmlnaHQg YW5nbGUgcXVvdGF0aW9uICAgICA9PiAgIiAgICAgICAqLworVU5LLCAgLyogIDE4OCAgMTEvMTIg IEcxICAgICAgT25lIHF1YXJ0ZXIgICAgICAgICAgICAgICA9PiAgVU5LICAgICAqLworVU5LLCAg LyogIDE4OSAgMTEvMTMgIEcxICAgICAgT25lIGhhbGYgICAgICAgICAgICAgICAgICA9PiAgVU5L ICAgICAqLworVU5LLCAgLyogIDE5MCAgMTEvMTQgIEcxICAgICAgVGhyZWUgcXVhcnRlcnMgICAg ICAgICAgICA9PiAgVU5LICAgICAqLworIDYzLCAgLyogIDE5MSAgMTEvMTUgIEcxICAgICAgSW52 ZXJ0ZWQgcXVlc3Rpb24gbWFyayAgICA9PiAgPyAgICAgICAqLworIDY1LCAgLyogIDE5MiAgMTIv MDAgIEcxICAgICAgQSBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgQSAgICAgICAqLworIDY1 LCAgLyogIDE5MyAgMTIvMDEgIEcxICAgICAgQSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAg QSAgICAgICAqLworIDY1LCAgLyogIDE5NCAgMTIvMDIgIEcxICAgICAgQSBjaXJjdW1mbGV4ICAg ICAgICAgICAgICA9PiAgQSAgICAgICAqLworIDY1LCAgLyogIDE5NSAgMTIvMDMgIEcxICAgICAg QSB0aWxkZSAgICAgICAgICAgICAgICAgICA9PiAgQSAgICAgICAqLworIDY1LCAgLyogIDE5NiAg MTIvMDQgIEcxICAgICAgQSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgQSAgICAgICAqLwor IDY1LCAgLyogIDE5NyAgMTIvMDUgIEcxICAgICAgQSByaW5nIGFib3ZlICAgICAgICAgICAgICA9 PiAgQSAgICAgICAqLworIDY1LCAgLyogIDE5OCAgMTIvMDYgIEcxICAgICAgQSB3aXRoIEUgICAg ICAgICAgICAgICAgICA9PiAgQSAgICAgICAqLworIDY3LCAgLyogIDE5OSAgMTIvMDcgIEcxICAg ICAgQyBDZWRpbGxhICAgICAgICAgICAgICAgICA9PiAgQyAgICAgICAqLworIDY5LCAgLyogIDIw MCAgMTIvMDggIEcxICAgICAgRSBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgRSAgICAgICAq LworIDY5LCAgLyogIDIwMSAgMTIvMDkgIEcxICAgICAgRSBhY3V0ZSAgICAgICAgICAgICAgICAg ICA9PiAgRSAgICAgICAqLworIDY5LCAgLyogIDIwMiAgMTIvMTAgIEcxICAgICAgRSBjaXJjdW1m bGV4ICAgICAgICAgICAgICA9PiAgRSAgICAgICAqLworIDY5LCAgLyogIDIwMyAgMTIvMTEgIEcx ICAgICAgRSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgRSAgICAgICAqLworIDczLCAgLyog IDIwNCAgMTIvMTIgIEcxICAgICAgSSBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgSSAgICAg ICAqLworIDczLCAgLyogIDIwNSAgMTIvMTMgIEcxICAgICAgSSBhY3V0ZSAgICAgICAgICAgICAg ICAgICA9PiAgSSAgICAgICAqLworIDczLCAgLyogIDIwNiAgMTIvMTQgIEcxICAgICAgSSBjaXJj dW1mbGV4ICAgICAgICAgICAgICA9PiAgSSAgICAgICAqLworIDczLCAgLyogIDIwNyAgMTIvMTUg IEcxICAgICAgSSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgSSAgICAgICAqLworIDY4LCAg LyogIDIwOCAgMTMvMDAgIEcxICAgICAgSWNlbGFuZGljIEV0aCAgICAgICAgICAgICA9PiAgRCAg ICAgICAqLworIDc4LCAgLyogIDIwOSAgMTMvMDEgIEcxICAgICAgTiB0aWxkZSAgICAgICAgICAg ICAgICAgICA9PiAgTiAgICAgICAqLworIDc5LCAgLyogIDIxMCAgMTMvMDIgIEcxICAgICAgTyBn cmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgTyAgICAgICAqLworIDc5LCAgLyogIDIxMSAgMTMv MDMgIEcxICAgICAgTyBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgTyAgICAgICAqLworIDc5 LCAgLyogIDIxMiAgMTMvMDQgIEcxICAgICAgTyBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAg TyAgICAgICAqLworIDc5LCAgLyogIDIxMyAgMTMvMDUgIEcxICAgICAgTyB0aWxkZSAgICAgICAg ICAgICAgICAgICA9PiAgTyAgICAgICAqLworIDc5LCAgLyogIDIxNCAgMTMvMDYgIEcxICAgICAg TyBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgTyAgICAgICAqLworMTIwLCAgLyogIDIxNSAg MTMvMDcgIEcxICAgICAgTXVsdGlwbGljYXRpb24gc2lnbiAgICAgICA9PiAgeCAgICAgICAqLwor IDc5LCAgLyogIDIxNiAgMTMvMDggIEcxICAgICAgTyBvYmxpcXVlIHN0cm9rZSAgICAgICAgICA9 PiAgTyAgICAgICAqLworIDg1LCAgLyogIDIxNyAgMTMvMDkgIEcxICAgICAgVSBncmF2ZSAgICAg ICAgICAgICAgICAgICA9PiAgVSAgICAgICAqLworIDg1LCAgLyogIDIxOCAgMTMvMTAgIEcxICAg ICAgVSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgVSAgICAgICAqLworIDg1LCAgLyogIDIx OSAgMTMvMTEgIEcxICAgICAgVSBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgVSAgICAgICAq LworIDg1LCAgLyogIDIyMCAgMTMvMTIgIEcxICAgICAgVSBkaWFlcmVzaXMgICAgICAgICAgICAg ICA9PiAgVSAgICAgICAqLworIDg5LCAgLyogIDIyMSAgMTMvMTMgIEcxICAgICAgWSBhY3V0ZSAg ICAgICAgICAgICAgICAgICA9PiAgWSAgICAgICAqLworIDg0LCAgLyogIDIyMiAgMTMvMTQgIEcx ICAgICAgSWNlbGFuZGljIFRob3JuICAgICAgICAgICA9PiAgVCAgICAgICAqLworMTE1LCAgLyog IDIyMyAgMTMvMTUgIEcxICAgICAgR2VybWFuIHNoYXJwIHMgICAgICAgICAgICA9PiAgcyAgICAg ICAqLworIDk3LCAgLyogIDIyNCAgMTQvMDAgIEcxICAgICAgYSBncmF2ZSAgICAgICAgICAgICAg ICAgICA9PiAgYSAgICAgICAqLworIDk3LCAgLyogIDIyNSAgMTQvMDEgIEcxICAgICAgYSBhY3V0 ZSAgICAgICAgICAgICAgICAgICA9PiAgYSAgICAgICAqLworIDk3LCAgLyogIDIyNiAgMTQvMDIg IEcxICAgICAgYSBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgYSAgICAgICAqLworIDk3LCAg LyogIDIyNyAgMTQvMDMgIEcxICAgICAgYSB0aWxkZSAgICAgICAgICAgICAgICAgICA9PiAgYSAg ICAgICAqLworIDk3LCAgLyogIDIyOCAgMTQvMDQgIEcxICAgICAgYSBkaWFlcmVzaXMgICAgICAg ICAgICAgICA9PiAgYSAgICAgICAqLworIDk3LCAgLyogIDIyOSAgMTQvMDUgIEcxICAgICAgYSBy aW5nIGFib3ZlICAgICAgICAgICAgICA9PiAgYSAgICAgICAqLworIDk3LCAgLyogIDIzMCAgMTQv MDYgIEcxICAgICAgYSB3aXRoIGUgICAgICAgICAgICAgICAgICA9PiAgYSAgICAgICAqLworIDk5 LCAgLyogIDIzMSAgMTQvMDcgIEcxICAgICAgYyBjZWRpbGxhICAgICAgICAgICAgICAgICA9PiAg YyAgICAgICAqLworMTAxLCAgLyogIDIzMiAgMTQvMDggIEcxICAgICAgZSBncmF2ZSAgICAgICAg ICAgICAgICAgICA9PiAgZSAgICAgICAqLworMTAxLCAgLyogIDIzMyAgMTQvMDkgIEcxICAgICAg ZSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgZSAgICAgICAqLworMTAxLCAgLyogIDIzNCAg MTQvMTAgIEcxICAgICAgZSBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgZSAgICAgICAqLwor MTAxLCAgLyogIDIzNSAgMTQvMTEgIEcxICAgICAgZSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9 PiAgZSAgICAgICAqLworMTA1LCAgLyogIDIzNiAgMTQvMTIgIEcxICAgICAgaSBncmF2ZSAgICAg ICAgICAgICAgICAgICA9PiAgaSAgICAgICAqLworMTA1LCAgLyogIDIzNyAgMTQvMTMgIEcxICAg ICAgaSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgaSAgICAgICAqLworMTA1LCAgLyogIDIz OCAgMTQvMTQgIEcxICAgICAgaSBjaXJjdW1mbGV4ICAgICAgICAgICAgICA9PiAgaSAgICAgICAq LworMTA1LCAgLyogIDIzOSAgMTQvMTUgIEcxICAgICAgaSBkaWFlcmVzaXMgICAgICAgICAgICAg ICA9PiAgaSAgICAgICAqLworMTAwLCAgLyogIDI0MCAgMTUvMDAgIEcxICAgICAgSWNlbGFuZGlj IGV0aCAgICAgICAgICAgICA9PiAgZCAgICAgICAqLworMTEwLCAgLyogIDI0MSAgMTUvMDEgIEcx ICAgICAgbiB0aWxkZSAgICAgICAgICAgICAgICAgICA9PiAgbiAgICAgICAqLworMTExLCAgLyog IDI0MiAgMTUvMDIgIEcxICAgICAgbyBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgbyAgICAg ICAqLworMTExLCAgLyogIDI0MyAgMTUvMDMgIEcxICAgICAgbyBhY3V0ZSAgICAgICAgICAgICAg ICAgICA9PiAgbyAgICAgICAqLworMTExLCAgLyogIDI0NCAgMTUvMDQgIEcxICAgICAgbyBjaXJj dW1mbGV4ICAgICAgICAgICAgICA9PiAgbyAgICAgICAqLworMTExLCAgLyogIDI0NSAgMTUvMDUg IEcxICAgICAgbyB0aWxkZSAgICAgICAgICAgICAgICAgICA9PiAgbyAgICAgICAqLworMTExLCAg LyogIDI0NiAgMTUvMDYgIEcxICAgICAgbyBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgbyAg ICAgICAqLworIDQ3LCAgLyogIDI0NyAgMTUvMDcgIEcxICAgICAgRGl2aXNpb24gc2lnbiAgICAg ICAgICAgICA9PiAgLyAgICAgICAqLworMTExLCAgLyogIDI0OCAgMTUvMDggIEcxICAgICAgbyBv YmxpcXVlIHN0cm9rZSAgICAgICAgICA9PiAgbyAgICAgICAqLworMTE3LCAgLyogIDI0OSAgMTUv MDkgIEcxICAgICAgdSBncmF2ZSAgICAgICAgICAgICAgICAgICA9PiAgdSAgICAgICAqLworMTE3 LCAgLyogIDI1MCAgMTUvMTAgIEcxICAgICAgdSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAg dSAgICAgICAqLworMTE3LCAgLyogIDI1MSAgMTUvMTEgIEcxICAgICAgdSBjaXJjdW1mbGV4ICAg ICAgICAgICAgICA9PiAgdSAgICAgICAqLworMTE3LCAgLyogIDI1MiAgMTUvMTIgIEcxICAgICAg dSBkaWFlcmVzaXMgICAgICAgICAgICAgICA9PiAgdSAgICAgICAqLworMTIxLCAgLyogIDI1MyAg MTUvMTMgIEcxICAgICAgeSBhY3V0ZSAgICAgICAgICAgICAgICAgICA9PiAgeSAgICAgICAqLwor MTE2LCAgLyogIDI1NCAgMTUvMTQgIEcxICAgICAgSWNlbGFuZGljIHRob3JuICAgICAgICAgICA9 PiAgdCAgICAgICAqLworMTIxICAgLyogIDI1NSAgMTUvMTUgIEcxICAgICAgeSBkaWFlcmVzaXMg ICAgICAgICAgICAgICA9PiAgeSAgICAgICAqLworfTsKKworCisvKiBUcmFuc2xhdGlvbiB0YWJs ZXMgZm9yIElTTyBMYXRpbiBBbHBoYWJldCAxIHRvIGxvY2FsIGZpbGUgY2hhcmFjdGVyIHNldHMg Ki8KKworLyoKKyAgTW9zdCBvZiB0aGUgcmVtYWluaW5nIHRhYmxlcyBhcmUgbm90IGFubm90YXRl ZCBsaWtlIHRoZSBvbmUgYWJvdmUsIGJlY2F1c2UKKyAgdGhlIHNpemUgb2YgdGhlIHJlc3VsdGlu ZyBzb3VyY2UgZmlsZSB3b3VsZCBiZSByaWRpY3Vsb3VzLiAgRWFjaCByb3cgaW4gdGhlCisgIGZv bGxvd2luZyB0YWJsZXMgY29ycmVzcG9uZHMgdG8gYSBjb2x1bW4gb2YgSVNPIDg4NTktMS4KKyov CisKK0NPTlNUIENIQVIKK3lsMTg1W10gPSB7ICAvKiBJU08gODg1OS0xIExhdGluIEFscGhhYmV0 IDEgKExhdGluLTEpIHRvIElCTSBDb2RlIFBhZ2UgODUwICovCisvKgorICBUaGlzIGlzIGJhc2Vk IG9uIElCTSdzIG9mZmljaWFsIGludmVydGlibGUgdHJhbnNsYXRpb24uICBSZWZlcmVuY2U6IElC TQorICBDaGFyYWN0ZXIgRGF0YSBSZXByZXNlbnRhdGlvbiBBcmNoaXRlY3R1cmUgKENEUkEpLCBM ZXZlbCAxLCBSZWdpc3RyeSwKKyAgU0MwOS0xMjkxLTAwICgxOTkwKSwgcC4xNTIuICAoTm90ZTog TGF0aW4tMSBpcyBJQk0gQ29kZSBQYWdlIDAwODE5LikgIE5vdGU6CisgIElCTSdzIGJpemFycmUg cmVhcnJhbmdlbWVudCBvZiBDMCBjb250cm9scyBhbmQgREVMIGhhcyBiZWVuIHVuZG9uZSBpbiB0 aGlzCisgIHRhYmxlLgorKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3 LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgs ICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAg MzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0 MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUy LCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywK KyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAg NzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4 NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3 LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwg MTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAx MjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzE4NiwgMjA1LCAyMDEsIDE4 NywgMjAwLCAxODgsIDIwNCwgMTg1LCAyMDMsIDIwMiwgMjA2LCAyMjMsIDIyMCwgMjE5LCAyNTQs IDI0MiwKKzE3OSwgMTk2LCAyMTgsIDE5MSwgMTkyLCAyMTcsIDE5NSwgMTgwLCAxOTQsIDE5Mywg MTk3LCAxNzYsIDE3NywgMTc4LCAyMTMsIDE1OSwKKzI1NSwgMTczLCAxODksIDE1NiwgMjA3LCAx OTAsIDIyMSwgMjQ1LCAyNDksIDE4NCwgMTY2LCAxNzQsIDE3MCwgMjQwLCAxNjksIDIzOCwKKzI0 OCwgMjQxLCAyNTMsIDI1MiwgMjM5LCAyMzAsIDI0NCwgMjUwLCAyNDcsIDI1MSwgMTY3LCAxNzUs IDE3MiwgMTcxLCAyNDMsIDE2OCwKKzE4MywgMTgxLCAxODIsIDE5OSwgMTQyLCAxNDMsIDE0Niwg MTI4LCAyMTIsIDE0NCwgMjEwLCAyMTEsIDIyMiwgMjE0LCAyMTUsIDIxNiwKKzIwOSwgMTY1LCAy MjcsIDIyNCwgMjI2LCAyMjksIDE1MywgMTU4LCAxNTcsIDIzNSwgMjMzLCAyMzQsIDE1NCwgMjM3 LCAyMzIsIDIyNSwKKzEzMywgMTYwLCAxMzEsIDE5OCwgMTMyLCAxMzQsIDE0NSwgMTM1LCAxMzgs IDEzMCwgMTM2LCAxMzcsIDE0MSwgMTYxLCAxNDAsIDEzOSwKKzIwOCwgMTY0LCAxNDksIDE2Miwg MTQ3LCAyMjgsIDE0OCwgMjQ2LCAxNTUsIDE1MSwgMTYzLCAxNTAsIDEyOSwgMjM2LCAyMzEsIDE1 MgorfTsKKworQ09OU1QgQ0hBUgoreTg1bDFbXSA9IHsgIC8qIElCTSBDb2RlIFBhZ2UgODUwIHRv IExhdGluLTEgKi8KKy8qCisgIFRoaXMgaXMgZnJvbSBJQk0gQ0RSQSBwYWdlIDE1My4gIEl0IGlz IHRoZSBpbnZlcnNlIG9mIHlsMTg1W10uCisgIEFzIG9mIGVkaXQgMTgzLCB0aGlzIHRhYmxlIGlz IG5vIGxvbmdlciBwdXJlIENEUkEuICBUaGUgdHJhbnNsYXRpb25zCisgIGludm9sdmluZyBDMCBj b250cm9scyBhbmQgREVMIGhhdmUgYmVlbiByZW1vdmVkLgorKi8KKyAgMCwgICAxLCAgIDIsICAg MywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQs ICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwg IDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAg MzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0 OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTks ICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwg IDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAg ODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkz LCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQs IDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwg MTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEy NywKKzE5OSwgMjUyLCAyMzMsIDIyNiwgMjI4LCAyMjQsIDIyOSwgMjMxLCAyMzQsIDIzNSwgMjMy LCAyMzksIDIzOCwgMjM2LCAxOTYsIDE5NywKKzIwMSwgMjMwLCAxOTgsIDI0NCwgMjQ2LCAyNDIs IDI1MSwgMjQ5LCAyNTUsIDIxNCwgMjIwLCAyNDgsIDE2MywgMjE2LCAyMTUsIDE1OSwKKzIyNSwg MjM3LCAyNDMsIDI1MCwgMjQxLCAyMDksIDE3MCwgMTg2LCAxOTEsIDE3NCwgMTcyLCAxODksIDE4 OCwgMTYxLCAxNzEsIDE4NywKKzE1NSwgMTU2LCAxNTcsIDE0NCwgMTUxLCAxOTMsIDE5NCwgMTky LCAxNjksIDEzNSwgMTI4LCAxMzEsIDEzMywgMTYyLCAxNjUsIDE0NywKKzE0OCwgMTUzLCAxNTIs IDE1MCwgMTQ1LCAxNTQsIDIyNywgMTk1LCAxMzIsIDEzMCwgMTM3LCAxMzYsIDEzNCwgMTI5LCAx MzgsIDE2NCwKKzI0MCwgMjA4LCAyMDIsIDIwMywgMjAwLCAxNTgsIDIwNSwgMjA2LCAyMDcsIDE0 OSwgMTQ2LCAxNDEsIDE0MCwgMTY2LCAyMDQsIDEzOSwKKzIxMSwgMjIzLCAyMTIsIDIxMCwgMjQ1 LCAyMTMsIDE4MSwgMjU0LCAyMjIsIDIxOCwgMjE5LCAyMTcsIDI1MywgMjIxLCAxNzUsIDE4MCwK KzE3MywgMTc3LCAxNDMsIDE5MCwgMTgyLCAxNjcsIDI0NywgMTg0LCAxNzYsIDE2OCwgMTgzLCAx ODUsIDE3OSwgMTc4LCAxNDIsIDE2MAorfTsKKworI2lmZGVmIENPTU1FTlQKK0NPTlNUIENIQVIK K3lsMXI4W10gPSB7ICAvKiBMYXRpbi0xIHRvIEhld2xldHQgUGFja2FyZCBSb21hbjggKi8KKy8q IFRoaXMgaXMgSFAncyBvZmZpY2lhbCB0cmFuc2xhdGlvbiwgc3RyYWlnaHQgZnJvbSBpY29udiAq LworLyogSXQgaXMgTk9UIGludmVydGlibGUuICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwg ICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisg MTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3 LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgs ICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwg IDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2 MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcy LCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMs ICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAg OTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEw NiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3 LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgs IDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAx NDAsIDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1 MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisxNjAsIDE4NCwgMTkx LCAxODcsIDE4NiwgMTg4LCAxMjQsIDE4OSwgMTcxLCAgOTksIDI0OSwgMjUxLCAxMjYsICA0NSwg IDgyLCAxNzYsCisxNzksIDI1NCwgIDUwLCAgNTEsIDE2OCwgMjQzLCAyNDQsIDI0MiwgIDQ0LCAg NDksIDI1MCwgMjUzLCAyNDcsIDI0OCwgMjQ1LCAxODUsCisxNjEsIDIyNCwgMTYyLCAyMjUsIDIx NiwgMjA4LCAyMTEsIDE4MCwgMTYzLCAyMjAsIDE2NCwgMTY1LCAyMzAsIDIyOSwgMTY2LCAxNjcs CisyMjcsIDE4MiwgMjMyLCAyMzEsIDIyMywgMjMzLCAyMTgsIDEyMCwgMjEwLCAxNzMsIDIzNywg MTc0LCAyMTksIDE3NywgMjQwLCAyMjIsCisyMDAsIDE5NiwgMTkyLCAyMjYsIDIwNCwgMjEyLCAy MTUsIDE4MSwgMjAxLCAxOTcsIDE5MywgMjA1LCAyMTcsIDIxMywgMjA5LCAyMjEsCisyMjgsIDE4 MywgMjAyLCAxOTgsIDE5NCwgMjM0LCAyMDYsICA0NywgMjE0LCAyMDMsIDE5OSwgMTk1LCAyMDcs IDE3OCwgMjQxLCAyMzkKK307CitDT05TVCBDSEFSCit5cjhsMVtdID0geyAgLyogSGV3bGV0dCBQ YWNrYXJkIFJvbWFuOCB0byBMYXRpbi0xICovCisvKiBUaGlzIGlzIEhQJ3Mgb2ZmaWNpYWwgdHJh bnNsYXRpb24sIHN0cmFpZ2h0IGZyb20gaWNvbnYgKi8KKy8qIEl0IGlzIE5PVCBpbnZlcnRpYmxl LiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAg MTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAy MSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMy LCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0Mywg IDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAg NTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2 NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcs ICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwg IDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAx MDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx LAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIs IDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywg MTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAx NDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2 LCAxNTcsIDE1OCwgMTU5LAorMTYwLCAxOTIsIDE5NCwgMjAwLCAyMDIsIDIwMywgMjA2LCAyMDcs IDE4MCwgIDk2LCAgOTQsIDE2OCwgMTI2LCAyMTcsIDIxOSwgMTYzLAorMTc1LCAyMjEsIDI1Mywg MTc2LCAxOTksIDIzMSwgMjA5LCAyNDEsIDE2MSwgMTkxLCAxNjQsIDE2MywgMTY1LCAxNjcsIDEw MiwgMTYyLAorMjI2LCAyMzQsIDI0NCwgMjUxLCAyMjUsIDIzMywgMjQzLCAyNTAsIDIyNCwgMjMy LCAyNDIsIDI0OSwgMjI4LCAyMzUsIDI0NiwgMjUyLAorMTk3LCAyMzgsIDIxNiwgMTk4LCAyMjks IDIzNywgMjQ4LCAyMzAsIDE5NiwgMjM2LCAyMTQsIDIyMCwgMjAxLCAyMzksIDIyMywgMjEyLAor MTkzLCAxOTUsIDIyNywgMjA4LCAyNDAsIDIwNSwgMjA0LCAyMTEsIDIxMCwgMjEzLCAyNDUsICA4 MywgMTE1LCAyMTgsICA4OSwgMjU1LAorMjIyLCAyNTQsIDE4MywgMTgxLCAxODIsIDE5MCwgIDQ1 LCAxODgsIDE4OSwgMTcwLCAxODYsIDE3MSwgIDQyLCAxODcsIDE3NywgMTYwCit9OworI2Vsc2Ug LyogIUNPTU1FTlQgKi8KKy8qIFRoaXMgaXMgYW4gaW52ZXJ0aWJsZSBtYXBwaW5nLCBhcHByb3Zl ZCBieSBIUCBpbiBKYW51YXJ5IDE5OTQuICovCitDT05TVCBDSEFSCit5bDFyOFtdID0geyAgLyog SVNPIExhdGluLTEgdG8gSFAgUm9tYW44LCBJbnZlcnRpYmxlICovCisgIDAsICAgMSwgICAyLCAg IDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0 LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUs ICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwg IDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisg NDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5 LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAs ICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwg IDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5 MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0 LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUs IDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAx MjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEz OCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5 LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisxNjAs IDE4NCwgMTkxLCAxODcsIDE4NiwgMTg4LCAxNjksIDE4OSwgMTcxLCAxNzAsIDI0OSwgMjUxLCAx NzIsIDE3NSwgMTkwLCAxNzYsCisxNzksIDI1NCwgMjM1LCAyMzYsIDE2OCwgMjQzLCAyNDQsIDI0 MiwgMjM4LCAyNDYsIDI1MCwgMjUzLCAyNDcsIDI0OCwgMjQ1LCAxODUsCisxNjEsIDIyNCwgMTYy LCAyMjUsIDIxNiwgMjA4LCAyMTEsIDE4MCwgMTYzLCAyMjAsIDE2NCwgMTY1LCAyMzAsIDIyOSwg MTY2LCAxNjcsCisyMjcsIDE4MiwgMjMyLCAyMzEsIDIyMywgMjMzLCAyMTgsIDI1MiwgMjEwLCAx NzMsIDIzNywgMTc0LCAyMTksIDE3NywgMjQwLCAyMjIsCisyMDAsIDE5NiwgMTkyLCAyMjYsIDIw NCwgMjEyLCAyMTUsIDE4MSwgMjAxLCAxOTcsIDE5MywgMjA1LCAyMTcsIDIxMywgMjA5LCAyMjEs CisyMjgsIDE4MywgMjAyLCAxOTgsIDE5NCwgMjM0LCAyMDYsIDI1NSwgMjE0LCAyMDMsIDE5OSwg MTk1LCAyMDcsIDE3OCwgMjQxLCAyMzkKK307CisKK0NPTlNUIENIQVIKK3lyOGwxW10gPSB7IC8q IEhQIFJvbWFuOCB0byBJU08gTGF0aW4tMSwgSW52ZXJ0aWJsZSAqLworICAwLCAgIDEsICAgMiwg ICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAx NCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1 LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYs ICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAor IDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1 OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcw LCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEs ICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAg OTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEw NCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1 LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwg MTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAx MzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0 OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorMTYw LCAxOTIsIDE5NCwgMjAwLCAyMDIsIDIwMywgMjA2LCAyMDcsIDE4MCwgMTY2LCAxNjksIDE2OCwg MTcyLCAyMTcsIDIxOSwgMTczLAorMTc1LCAyMjEsIDI1MywgMTc2LCAxOTksIDIzMSwgMjA5LCAy NDEsIDE2MSwgMTkxLCAxNjQsIDE2MywgMTY1LCAxNjcsIDE3NCwgMTYyLAorMjI2LCAyMzQsIDI0 NCwgMjUxLCAyMjUsIDIzMywgMjQzLCAyNTAsIDIyNCwgMjMyLCAyNDIsIDI0OSwgMjI4LCAyMzUs IDI0NiwgMjUyLAorMTk3LCAyMzgsIDIxNiwgMTk4LCAyMjksIDIzNywgMjQ4LCAyMzAsIDE5Niwg MjM2LCAyMTQsIDIyMCwgMjAxLCAyMzksIDIyMywgMjEyLAorMTkzLCAxOTUsIDIyNywgMjA4LCAy NDAsIDIwNSwgMjA0LCAyMTEsIDIxMCwgMjEzLCAyNDUsIDE3OCwgMTc5LCAyMTgsIDE4NCwgMjU1 LAorMjIyLCAyNTQsIDE4MywgMTgxLCAxODIsIDE5MCwgMTg1LCAxODgsIDE4OSwgMTcwLCAxODYs IDE3MSwgMjE1LCAxODcsIDE3NywgMjQ3Cit9OworI2VuZGlmIC8qIENPTU1FTlQgKi8KKworQ09O U1QgQ0hBUgoreWwxNDNbXSA9IHsgIC8qIExhdGluLTEgdG8gSUJNIENvZGUgUGFnZSA0MzcgKi8K Ky8qCisgIEFsdGhvdWdoIHRoZSBJQk0gQ0RSQSBkb2VzIG5vdCBpbmNsdWRlIGFuIG9mZmljaWFs IHRyYW5zbGF0aW9uIGJldHdlZW4gQ1A0MzcKKyAgYW5kIElTTyBMYXRpbiBBbHBoYWJldCAxLCBp dCBkb2VzIGluY2x1ZGUgYW4gb2ZmaWNpYWwsIGludmVydGlibGUKKyAgdHJhbnNsYXRpb24gYmV0 d2VlbiBDUDQzNyBhbmQgQ1A4NTAgKHBhZ2UgMTk2KSwgYW5kIGFub3RoZXIgZnJvbSBDUDg1MCB0 bworICBMYXRpbi0xIChDUDgxOSkgKHBhZ2UgMTUzKS4gIFRoaXMgdHJhbnNsYXRpb24gd2FzIG9i dGFpbmVkIHdpdGggYSB0d28tc3RlcAorICBwcm9jZXNzIGJhc2VkIG9uIHRob3NlIHRhYmxlcy4K KyAgQXMgb2YgZWRpdCAxODMsIHRoZSB0cmFuc2xhdGlvbiBpcyBtb2RpZmllZCB0byBsZWF2ZSBD MCBjb250cm9scyBhbG9uZS4KKyovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxODYsIDIwNSwgMjAx LCAxODcsIDIwMCwgMTg4LCAyMDQsIDE4NSwgMjAzLCAyMDIsIDIwNiwgMjIzLCAyMjAsIDIxOSwg MjU0LCAyNDIsCisxNzksIDE5NiwgMjE4LCAxOTEsIDE5MiwgMjE3LCAxOTUsIDE4MCwgMTk0LCAx OTMsIDE5NywgMTc2LCAxNzcsIDE3OCwgMjEzLCAxNTksCisyNTUsIDE3MywgMTU1LCAxNTYsIDIw NywgMTU3LCAyMjEsIDI0NSwgMjQ5LCAxODQsIDE2NiwgMTc0LCAxNzAsIDI0MCwgMTY5LCAyMzgs CisyNDgsIDI0MSwgMjUzLCAyNTIsIDIzOSwgMjMwLCAyNDQsIDI1MCwgMjQ3LCAyNTEsIDE2Nywg MTc1LCAxNzIsIDE3MSwgMjQzLCAxNjgsCisxODMsIDE4MSwgMTgyLCAxOTksIDE0MiwgMTQzLCAx NDYsIDEyOCwgMjEyLCAxNDQsIDIxMCwgMjExLCAyMjIsIDIxNCwgMjE1LCAyMTYsCisyMDksIDE2 NSwgMjI3LCAyMjQsIDIyNiwgMjI5LCAxNTMsIDE1OCwgMTkwLCAyMzUsIDIzMywgMjM0LCAxNTQs IDIzNywgMjMyLCAyMjUsCisxMzMsIDE2MCwgMTMxLCAxOTgsIDEzMiwgMTM0LCAxNDUsIDEzNSwg MTM4LCAxMzAsIDEzNiwgMTM3LCAxNDEsIDE2MSwgMTQwLCAxMzksCisyMDgsIDE2NCwgMTQ5LCAx NjIsIDE0NywgMjI4LCAxNDgsIDI0NiwgMTg5LCAxNTEsIDE2MywgMTUwLCAxMjksIDIzNiwgMjMx LCAxNTIKK307CisKK0NPTlNUIENIQVIKK3k0M2wxW10gPSB7ICAvKiBJQk0gQ29kZSBQYWdlIDQz NyB0byBMYXRpbi0xICovCisvKgorICBUaGlzIHRhYmxlIGlzIHRoZSBpbnZlcnNlIG9mIHlsMTQz W10uCisqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5 LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAs ICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAor IDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0 MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0 LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUs ICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAg NzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4 OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5 LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwg MTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAx MjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTk5LCAyNTIsIDIzMywgMjI2LCAyMjgsIDIy NCwgMjI5LCAyMzEsIDIzNCwgMjM1LCAyMzIsIDIzOSwgMjM4LCAyMzYsIDE5NiwgMTk3LAorMjAx LCAyMzAsIDE5OCwgMjQ0LCAyNDYsIDI0MiwgMjUxLCAyNDksIDI1NSwgMjE0LCAyMjAsIDE2Miwg MTYzLCAxNjUsIDIxNSwgMTU5LAorMjI1LCAyMzcsIDI0MywgMjUwLCAyNDEsIDIwOSwgMTcwLCAx ODYsIDE5MSwgMTc0LCAxNzIsIDE4OSwgMTg4LCAxNjEsIDE3MSwgMTg3LAorMTU1LCAxNTYsIDE1 NywgMTQ0LCAxNTEsIDE5MywgMTk0LCAxOTIsIDE2OSwgMTM1LCAxMjgsIDEzMSwgMTMzLCAyNDgs IDIxNiwgMTQ3LAorMTQ4LCAxNTMsIDE1MiwgMTUwLCAxNDUsIDE1NCwgMjI3LCAxOTUsIDEzMiwg MTMwLCAxMzcsIDEzNiwgMTM0LCAxMjksIDEzOCwgMTY0LAorMjQwLCAyMDgsIDIwMiwgMjAzLCAy MDAsIDE1OCwgMjA1LCAyMDYsIDIwNywgMTQ5LCAxNDYsIDE0MSwgMTQwLCAxNjYsIDIwNCwgMTM5 LAorMjExLCAyMjMsIDIxMiwgMjEwLCAyNDUsIDIxMywgMTgxLCAyNTQsIDIyMiwgMjE4LCAyMTks IDIxNywgMjUzLCAyMjEsIDE3NSwgMTgwLAorMTczLCAxNzcsIDE0MywgMTkwLCAxODIsIDE2Nywg MjQ3LCAxODQsIDE3NiwgMTY4LCAxODMsIDE4NSwgMTc5LCAxNzgsIDE0MiwgMTYwCit9OworCitD T05TVCBDSEFSCit5bDFhcVtdID0geyAgLyogTGF0aW4tMSB0byBFeHRlbmRlZCBNYWMgTGF0aW4g KGJhc2VkIG9uIEFwcGxlIFF1aWNrRHJhdykgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAg IDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAx NiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcs ICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwg IDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAg NTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYx LCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIs ICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4Mywg IDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5 NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2 LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcs IDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzE4Miwg MTgzLCAxODQsIDE4NSwgMTg5LCAxOTYsIDE5NywgMTk4LCAyMDYsIDIwNywgMjEwLCAyMTEsIDIx NywgMjE4LCAxOTUsIDIxMiwKKzIwOSwgMjE1LCAyMTMsIDIyNiwgMjI3LCAyMjgsIDI0MCwgMjQ1 LCAyNDYsIDI0NywgMjQ5LCAyNTAsIDI1MSwgMjUzLCAyNTQsIDI1NSwKKzIwMiwgMTkzLCAxNjIs IDE2MywgMjE5LCAxODAsIDIwMSwgMTY0LCAxNzIsIDE2OSwgMTg3LCAxOTksIDE5NCwgMjA4LCAx NjgsIDI0OCwKKzE2MSwgMTc3LCAxNzAsIDE3MywgMTcxLCAxODEsIDE2NiwgMjI1LCAyNTIsIDE3 NiwgMTg4LCAyMDAsIDE3OCwgMTc5LCAxODYsIDE5MiwKKzIwMywgMjMxLCAyMjksIDIwNCwgMTI4 LCAxMjksIDE3NCwgMTMwLCAyMzMsIDEzMSwgMjMwLCAyMzIsIDIzNywgMjM0LCAyMzUsIDIzNiwK KzIyMCwgMTMyLCAyNDEsIDIzOCwgMjM5LCAyMDUsIDEzMywgMTY1LCAxNzUsIDI0NCwgMjQyLCAy NDMsIDEzNCwgMTYwLCAyMjIsIDE2NywKKzEzNiwgMTM1LCAxMzcsIDEzOSwgMTM4LCAxNDAsIDE5 MCwgMTQxLCAxNDMsIDE0MiwgMTQ0LCAxNDUsIDE0NywgMTQ2LCAxNDgsIDE0OSwKKzIyMSwgMTUw LCAxNTIsIDE1MSwgMTUzLCAxNTUsIDE1NCwgMjE0LCAxOTEsIDE1NywgMTU2LCAxNTgsIDE1OSwg MjI0LCAyMjMsIDIxNgorfTsKKworQ09OU1QgQ0hBUgoreWwxZHVbXSA9IHsgIC8qIExhdGluLTEg dG8gRHV0Y2ggSVNPIDY0NiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgVU5LLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwg IDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAg NTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYz LAorVU5LLCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQs ICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwg IDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIFVOSywgVU5LLCBVTkssICA5NCwgIDk1LAorIDk2LCAg OTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4 LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTks IDEyMCwgMTIxLCAxMjIsIFVOSywgVU5LLCBVTkssICAzOSwgMTI3LAorMTI4LCAxMjksIDEzMCwg MTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0 MiwgMTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUz LCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorIDMyLCAgMzMsIFVOSywgIDM1LCAxMjQs IFVOSywgVU5LLCAgOTMsIDEyMywgIDY3LCBVTkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAor IDkxLCBVTkssIFVOSywgVU5LLCAxMjYsIDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAz NCwgMTI1LCAgOTIsICA2NCwgIDYzLAorIDY1LCAgNjUsICA2NSwgIDY1LCAgOTEsICA2NSwgIDY1 LCAgNjcsICA2OSwgIDY5LCAgNjksICA2OSwgIDczLCAgNzMsICA3MywgIDczLAorVU5LLCAgNzgs ICA3OSwgIDc5LCAgNzksICA3OSwgIDc5LCAxMjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDg1LCAg ODksIFVOSywgMTE1LAorIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTksIDEw MSwgMTAxLCAxMDEsIDEwMSwgMTA1LCAxMDUsIDEwNSwgMTA1LAorVU5LLCAxMTAsIDExMSwgMTEx LCAxMTEsIDExMSwgMTExLCAgNDcsIDExMSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMjEsIFVOSywg IDkxCit9OworCitDT05TVCBDSEFSCit5bDFmaVtdID0geyAgLyogTGF0aW4tMSB0byBGaW5uaXNo IElTTyBOUkMgKCpub3QqIElTTyA2NDYpICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1 LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYs ICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAg MjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAz OSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUw LCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwg IDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAg NzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4 NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgVU5LLCAgOTUs CitVTkssICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwg MTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAx MTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCAxMjcsCisxMjgsIDEy OSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAs IDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwg MTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisgMzIsICAzMywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgy LCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkss IFVOSywgIDM0LCBVTkssIFVOSywgVU5LLCAgNjMsCisgNjUsICA2NSwgIDY1LCAgNjUsICA5MSwg IDkzLCAgNjUsICA2NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitV TkssICA3OCwgIDc5LCAgNzksICA3OSwgIDc5LCAgOTIsIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1 LCAgOTQsICA4OSwgVU5LLCAxMTUsCisgOTcsICA5NywgIDk3LCAgOTcsIDEyMywgMTI1LCAgOTcs ICA5OSwgMTAxLCAgOTYsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCitVTkssIDExMCwg MTExLCAxMTEsIDExMSwgMTExLCAxMjQsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMjYsIDEy MSwgVU5LLCAxMjEKK307CisKK0NPTlNUIENIQVIKK3lsMWZyW10gPSB7ICAvKiBMYXRpbi0xIHRv IEZyZW5jaCBJU08gNjQ2ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAg NywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4 LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwg IDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCBVTkssICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAg NDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1 MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMs CitVTkssICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwg IDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAg ODYsICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCisgOTYsICA5 NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgs IDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwg MTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCAxMjcsCisxMjgsIDEyOSwgMTMwLCAx MzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQy LCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMs IDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisgMzIsICAzMywgVU5LLCAgMzUsIFVOSywg VU5LLCBVTkssICA5MywgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCisg OTEsIFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0 LCBVTkssIFVOSywgVU5LLCAgNjMsCisgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUs ICA2NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA3OCwg IDc5LCAgNzksICA3OSwgIDc5LCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4 OSwgVU5LLCAxMTUsCisgNjQsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5MiwgMTI1 LCAxMjMsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCitVTkssIDExMCwgMTExLCAxMTEs IDExMSwgMTExLCAxMTEsICA0NywgMTExLCAxMjQsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5LLCAx MjEKK307CisKK0NPTlNUIENIQVIKK3lsMWZjW10gPSB7ICAvKiBMYXRpbi0xIHRvIEZyZW5jaC1D YW5hZGlhbiBJU08gNjQ2ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAg NywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4 LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwg IDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAg NDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1 MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMs CitVTkssICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwg IDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAg ODYsICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgVU5LLCAgOTUsCitVTkssICA5 NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgs IDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwg MTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCAxMjcsCisxMjgsIDEyOSwgMTMwLCAx MzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQy LCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMs IDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisgMzIsICAzMywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCitV TkssIFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0 LCBVTkssIFVOSywgVU5LLCAgNjMsCisgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUs ICA2NywgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA3OCwg IDc5LCAgNzksICA3OSwgIDc5LCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUsICA4 OSwgVU5LLCAxMTUsCisgNjQsICA5NywgIDkxLCAgOTcsICA5NywgIDk3LCAgOTcsICA5MiwgMTI1 LCAxMjMsICA5MywgMTAxLCAxMDUsIDEwNSwgIDk0LCAxMDUsCitVTkssIDExMCwgMTExLCAxMTEs ICA5NiwgMTExLCAxMTEsICA0NywgMTExLCAxMjQsIDExNywgMTI2LCAxMTcsIDEyMSwgVU5LLCAx MjEKK307CisKK0NPTlNUIENIQVIKK3lsMWdlW10gPSB7ICAvKiBMYXRpbi0xIHRvIEdlcm1hbiBJ U08gNjQ2ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAg IDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAy MCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEs CisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0Miwg IDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAg NTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCitVTkssICA2 NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYs ICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4Nywg IDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAg OTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEw LCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEs IDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwg MTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisx NDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1 LCAxNTYsIDE1NywgMTU4LCAxNTksCisgMzIsICAzMywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss ICA2NCwgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCitVTkssIFVOSywg VU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkssIFVO SywgVU5LLCAgNjMsCisgNjUsICA2NSwgIDY1LCAgNjUsICA5MSwgIDY1LCAgNjUsICA2NywgIDY5 LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA3OCwgIDc5LCAgNzks ICA3OSwgIDc5LCAgOTIsIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgOTMsICA4OSwgVU5LLCAx MjYsCisgOTcsICA5NywgIDk3LCAgOTcsIDEyMywgIDk3LCAgOTcsICA5OSwgMTAxLCAxMDEsIDEw MSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCitVTkssIDExMCwgMTExLCAxMTEsIDExMSwgMTEx LCAxMjQsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMjUsIDEyMSwgVU5LLCAxMjEKK307CisK K0NPTlNUIENIQVIKK3lsMWh1W10gPSB7ICAvKiBMYXRpbi0xIHRvIEh1bmdhcmlhbiBJU08tNjQ2 ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAx MCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIx LCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIs ICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAg NDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1 NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2 LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3Nywg IDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAg ODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEw MCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEs CisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwg MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAx MzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0 NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYs IDE1NywgMTU4LCAxNTksCisgMzIsICAzMywgVU5LLCBVTkssICAzNiwgVU5LLCBVTkssIFVOSywg IDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkssCitVTkssICA2NCwgVU5LLCBV TkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywgIDM0LCBVTkssIFVOSywgVU5L LCAgNjMsCisgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NywgIDY5LCAgOTEs ICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA3OCwgIDc5LCAgNzksICA3OSwg IDc5LCAgOTIsIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgOTMsICA4OSwgVU5LLCAxMTUsCisg OTcsICA5NiwgIDk3LCAgOTcsICA5NywgIDk3LCAgOTcsICA5OSwgMTAxLCAxMjMsIDEwMSwgMTAx LCAxMDUsIDEwNSwgMTA1LCAxMDUsCitVTkssIDExMCwgMTExLCAxMTEsIDExMSwgMTExLCAxMjQs ICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMjUsIDEyMSwgVU5LLCAxMjEKK307CisKK0NPTlNU IENIQVIKK3lsMWl0W10gPSB7ICAvKiBMYXRpbi0xIHRvIEl0YWxpYW4gSVNPIDY0NiAqLworICAw LCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwg IDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAg MjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAz NCwgVU5LLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUs ICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1Niwg IDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorVU5LLCAgNjUsICA2NiwgIDY3LCAg NjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5 LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAs IFVOSywgVU5LLCBVTkssICA5NCwgIDk1LAorVU5LLCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwg MTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAx MTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIFVOSywgVU5L LCBVTkssIFVOSywgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUs IDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0Niwg MTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1 OCwgMTU5LAorIDMyLCAgMzMsIFVOSywgIDM1LCBVTkssIFVOSywgVU5LLCAgNjQsICAzNCwgIDY3 LCBVTkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAorIDkxLCBVTkssIFVOSywgVU5LLCAgMzks IDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwgVU5LLCBVTkssIFVOSywgIDYzLAor IDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjcsICA2OSwgIDY5LCAgNjksICA2 OSwgIDczLCAgNzMsICA3MywgIDczLAorVU5LLCAgNzgsICA3OSwgIDc5LCAgNzksICA3OSwgIDc5 LCAxMjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDg1LCAgODksIFVOSywgMTE1LAorMTIzLCAgOTcs ICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAgOTIsIDEyNSwgIDkzLCAxMDEsIDEwMSwgMTI2LCAx MDUsIDEwNSwgMTA1LAorVU5LLCAxMTAsIDEyNCwgMTExLCAxMTEsIDExMSwgMTExLCAgNDcsIDEx MSwgIDk2LCAxMTcsIDExNywgMTE3LCAxMjEsIFVOSywgMTIxCit9OworCitDT05TVCBDSEFSCit5 bDFuZVtdID0geyAgLyogTGF0aW4tMSB0byBOZVhUICovCisvKiBORUVEIFRPIE1BS0UgVEhJUyBP TkUgSU5WRVJUSUJMRSwgTElLRSBDUDg1MCAqLworLyoKKyAgV2hpY2ggbWVhbnMgZmluZGluZyBh bGwgdGhlIGdyYXBoaWMgY2hhcmFjdGVycyBpbiB0aGUgTmVYVCBzZXQgdGhhdCBoYXZlCisgIG5v IGVxdWl2YWxlbnQgaW4gTGF0aW4tMSBhbmQgYXNzaWduaW5nIHRoZW0gdG8gdGhlIFVOSyBwb3Np dGlvbnMgKG1vc3RseQorICBMYXRpbi0xIEMxIGNvbnRyb2xzKS4gIFRoZW4gbWFrZSB0aGUgeW5l bDFbXSB0YWJsZSBiZSB0aGUgaW52ZXJzZSBvZiB0aGlzCisgIG9uZS4gIEJ1dCBmaXJzdCB3ZSBz aG91bGQgdHJ5IHRvIGdldCBhbiBvZmZpY2lhbCBMYXRpbi0xL05lWFQgdHJhbnNsYXRpb24KKyAg dGFibGUgZnJvbSBOZVhULCBJbmMuCisqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwg ICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAg MTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4 LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzks ICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwg IDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2 MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDcz LCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQs ICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAor IDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEw NywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4 LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLAorVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAorIDMyLCAxNjEsIDE2MiwgMTYz LCAxNjgsIDE2NSwgMTgxLCAxNjcsIDIwMCwgMTYwLCAyMjcsIDE3MSwgMTkwLCBVTkssIDE3Niwg MTk3LAorMjAyLCAyMDksIDIwMSwgMjA0LCAxOTQsIDE1NywgMTgyLCAxODMsIDIwMywgMTkyLCAy MzUsIDE4NywgMjEwLCAyMTEsIDIxMiwgMTkxLAorMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEz NCwgMjI1LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0 LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTgsIDIzMywgMTUxLCAxNTIsIDE1Mywg MTU0LCAxNTUsIDE1NiwgMjUxLAorMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjQxLCAy MTksIDIyMCwgMjIxLCAyMjIsIDIyMywgMjI0LCAyMjYsIDIyOCwgMjI5LAorMjMwLCAyMzEsIDIz NiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAxNTksIDI0OSwgMjQyLCAyNDMsIDI0NCwgMjQ2LCAyNDcs IDI1MiwgMjUzCit9OworCitDT05TVCBDSEFSCit5bDFub1tdID0geyAgLyogTGF0aW4tMSB0byBO b3J3ZWdpYW4vRGFuaXNoIElTTyA2NDYgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUs ICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwg IDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAy OCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5 LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAs ICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAg NjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3 MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0 LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCAgOTQsICA5NSwK KyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAx MDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDEx OCwgMTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCAxMjYsIDEyNywKKzEyOCwgMTI5 LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwg MTQxLCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAx NTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgIDMzLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIs IFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywg VU5LLCAgMzQsIFVOSywgVU5LLCBVTkssICA2MywKKyA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAg OTMsICA5MSwgIDY3LCAgNjksICA2OSwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKK1VO SywgIDc4LCAgNzksICA3OSwgIDc5LCAgNzksICA3OSwgMTIwLCAgOTIsICA4NSwgIDg1LCAgODUs ICA4NSwgIDg5LCBVTkssIDExNSwKKyA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAxMjUsIDEyMywg IDk5LCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKK1VOSywgMTEwLCAx MTEsIDExMSwgMTExLCAxMTEsIDExMSwgIDQ3LCAxMjQsIDExNywgMTE3LCAxMTcsIDExNywgMTIx LCBVTkssIDEyMQorfTsKKworQ09OU1QgQ0hBUgoreWwxcG9bXSA9IHsgIC8qIExhdGluLTEgdG8g UG9ydHVndWVzZSBJU08gNjQ2ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgVU5LLCBVTkssIFVOSywgIDk0LCAgOTUsCisgOTYs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgMTI2LCAxMjcsCisxMjgsIDEyOSwgMTMw LCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwg MTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAx NTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisgMzIsICAzMywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgIDM0LCAgNjcsIFVOSywgIDM0LCBVTkssICA0NSwgIDgyLCBVTkss CitVTkssIFVOSywgVU5LLCBVTkssICAzOSwgMTE3LCBVTkssIFVOSywgIDQ0LCBVTkssIFVOSywg IDM0LCBVTkssIFVOSywgVU5LLCAgNjMsCisgNjUsICA2NSwgIDY1LCAgOTEsICA2NSwgIDY1LCAg NjUsICA5MiwgIDY5LCAgNjksICA2OSwgIDY5LCAgNzMsICA3MywgIDczLCAgNzMsCitVTkssICA3 OCwgIDc5LCAgNzksICA3OSwgIDkzLCAgNzksIDEyMCwgIDc5LCAgODUsICA4NSwgIDg1LCAgODUs ICA4OSwgVU5LLCAxMTUsCisgOTcsICA5NywgIDk3LCAxMjMsICA5NywgIDk3LCAgOTcsIDEyNCwg MTAxLCAxMDEsIDEwMSwgMTAxLCAxMDUsIDEwNSwgMTA1LCAxMDUsCitVTkssIDExMCwgMTExLCAx MTEsIDExMSwgMTI1LCAxMTEsICA0NywgMTExLCAxMTcsIDExNywgMTE3LCAxMTcsIDEyMSwgVU5L LCAxMjEKK307CisKK0NPTlNUIENIQVIKK3lsMXNwW10gPSB7ICAvKiBMYXRpbi0xIHRvIFNwYW5p c2ggSVNPIDY0NiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAg OCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5 LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwg IDMxLAorIDMyLCAgMzMsICAzNCwgVU5LLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAg NDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1 MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorVU5L LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwg IDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAg ODcsICA4OCwgIDg5LCAgOTAsIFVOSywgVU5LLCBVTkssICA5NCwgIDk1LAorIDk2LCAgOTcsICA5 OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDks IDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwg MTIxLCAxMjIsICA5NiwgVU5LLCBVTkssIDEyNiwgMTI3LAorMTI2LCAxMjksIDEzMCwgMTMxLCAx MzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQz LAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQs IDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorIDMyLCAgOTEsIFVOSywgIDM1LCBVTkssIFVOSywg VU5LLCAgNjQsICAzNCwgIDY3LCBVTkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAorMTIzLCBV TkssIFVOSywgVU5LLCAgMzksIDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwgVU5L LCBVTkssIFVOSywgIDkzLAorIDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjcs ICA2OSwgIDY5LCAgNjksICA2OSwgIDczLCAgNzMsICA3MywgIDczLAorVU5LLCAgOTIsICA3OSwg IDc5LCAgNzksICA3OSwgIDc5LCAxMjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDg1LCAgODksIFVO SywgMTE1LAorMTI0LCAgOTcsICA5NywgIDk3LCAgOTcsICA5NywgIDk3LCAxMjUsIDEwMSwgMTAx LCAxMDEsIDEwMSwgMTA1LCAxMDUsIDEwNSwgMTA1LAorVU5LLCAxMjQsIDExMSwgMTExLCAxMTEs IDExMSwgMTExLCAgNDcsIDExMSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMjEsIFVOSywgMTIxCit9 OworCitDT05TVCBDSEFSCit5bDFzd1tdID0geyAgLyogTGF0aW4tMSB0byBTd2VkaXNoIElTTyA2 NDYgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwg IDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAg MjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAz MiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMs ICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwg IDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKK1VOSywgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCBVTkssIFVOSywgVU5LLCBVTkssICA5NSwKK1VOSywgIDk3LCAgOTgsICA5OSwg MTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDEx MSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIy LCBVTkssIFVOSywgVU5LLCBVTkssIDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMs IDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwg MTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1 NiwgMTU3LCAxNTgsIDE1OSwKKyAzMiwgIDMzLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCAgMzQsICA2NywgVU5LLCAgMzQsIFVOSywgIDQ1LCAgODIsIFVOSywKK1VOSywgVU5LLCBVTkss IFVOSywgIDM5LCAxMTcsIFVOSywgVU5LLCAgNDQsIFVOSywgVU5LLCAgMzQsIFVOSywgVU5LLCBV TkssICA2MywKKyA2NSwgIDY1LCAgNjUsICA2NSwgIDkxLCAgOTMsICA2NSwgIDY3LCAgNjksICA2 NCwgIDY5LCAgNjksICA3MywgIDczLCAgNzMsICA3MywKK1VOSywgIDc4LCAgNzksICA3OSwgIDc5 LCAgNzksICA5MiwgMTIwLCAgNzksICA4NSwgIDg1LCAgODUsICA5NCwgIDg5LCBVTkssIDExNSwK KyA5NywgIDk3LCAgOTcsICA5NywgMTIzLCAxMjUsICA5NywgIDk5LCAxMDEsICA5NiwgMTAxLCAx MDEsIDEwNSwgMTA1LCAxMDUsIDEwNSwKK1VOSywgMTEwLCAxMTEsIDExMSwgMTExLCAxMTEsIDEy NCwgIDQ3LCAxMTEsIDExNywgMTE3LCAxMTcsIDEyNiwgMTIxLCBVTkssIDEyMQorfTsKKworQ09O U1QgQ0hBUgoreWwxY2hbXSA9IHsgIC8qIExhdGluLTEgdG8gU3dpc3MgSVNPIDY0NiAqLworICAw LCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwg IDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAg MjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAz NCwgVU5LLCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUs ICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1Niwg IDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorVU5LLCAgNjUsICA2NiwgIDY3LCAg NjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5 LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAs IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwg MTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAx MTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIFVOSywgVU5L LCBVTkssIFVOSywgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUs IDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0Niwg MTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1 OCwgMTU5LAorIDMyLCAgMzMsIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssICAzNCwgIDY3 LCBVTkssICAzNCwgVU5LLCAgNDUsICA4MiwgVU5LLAorVU5LLCBVTkssIFVOSywgVU5LLCAgMzks IDExNywgVU5LLCBVTkssICA0NCwgVU5LLCBVTkssICAzNCwgVU5LLCBVTkssIFVOSywgIDYzLAor IDY1LCAgNjUsICA2NSwgIDY1LCAgNjUsICA2NSwgIDY1LCAgNjcsICA2OSwgIDY5LCAgNjksICA2 OSwgIDczLCAgNzMsICA3MywgIDczLAorVU5LLCAgNzgsICA3OSwgIDc5LCAgNzksICA3OSwgIDc5 LCAxMjAsICA3OSwgIDg1LCAgODUsICA4NSwgIDg1LCAgODksIFVOSywgMTE1LAorIDY0LCAgOTcs ICA5NywgIDk3LCAxMjMsICA5NywgIDk3LCAgOTIsICA5NSwgIDkxLCAgOTMsIDEwMSwgMTA1LCAx MDUsICA5NCwgMTA1LAorVU5LLCAxMTAsIDExMSwgMTExLCAgOTYsIDExMSwgMTI0LCAgNDcsIDEx MSwgIDM1LCAxMTcsIDEyNiwgMTI1LCAxMjEsIFVOSywgMTIxCit9OworCitDT05TVCBDSEFSCit5 bDFkbVtdID0geyAgLyogTGF0aW4tMSB0byBERUMgTXVsdGluYXRpb25hbCBDaGFyYWN0ZXIgU2V0 ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAx MCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIx LCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIs ICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAg NDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1 NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2 LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3Nywg IDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAg ODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEw MCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEs CisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwg MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAx MzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0 NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYs IDE1NywgMTU4LCAxNTksCisgMzIsIDE2MSwgMTYyLCAxNjMsIDE2OCwgMTY1LCAxMjQsIDE2Nywg IDM0LCAxNjksIDE3MCwgMTcxLCAxMjYsIFVOSywgIDgyLCBVTkssCisxNzYsIDE3NywgMTc4LCAx NzksICAzOSwgMTgxLCAxODIsIDE4MywgIDQ0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgVU5L LCAxOTEsCisxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEs IDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCitVTkssIDIwOSwgMjEwLCAyMTEsIDIxMiwg MjEzLCAyMTQsIDEyMCwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgVU5LLCAyMjMsCisy MjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1 LCAyMzYsIDIzNywgMjM4LCAyMzksCitVTkssIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYs ICA0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIFVOSywgVU5LLCAyNTMKK307CisKK0NPTlNU IENIQVIKK3lsMWRnW10gPSB7ICAvKiBMYXRpbi0xIHRvIERhdGEgR2VuZXJhbCBJbnRlcm5hdGlv bmFsIENoYXJhY3RlciBTZXQgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwg ICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAg MTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5 LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAs ICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwg IDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2 MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0 LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUs ICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5Niwg IDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEw OCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5 LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzEyOCwgMTI5LCAxMzAs IDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAx NDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1 MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKzE2MCwgMTcxLCAxNjcsIDE2OCwgMTY2 LCAxODEsIDE5MSwgMTg3LCAxODksIDE3MywgMTY5LCAxNzcsIDE2MSwgMjU1LCAxNzQsIDE3NSwK KzE4OCwgMTgyLCAxNjQsIDE2NSwgMTkwLCAxNjMsIDE3OCwgMTg1LCAxODYsIDE3OSwgMTcwLCAx NzYsIDIyMywgMTYyLCAyMjAsIDE3MiwKKzE5MywgMTkyLCAxOTQsIDE5NiwgMTk1LCAxOTcsIDE5 OCwgMTk5LCAyMDEsIDIwMCwgMjAyLCAyMDMsIDIwNSwgMjA0LCAyMDYsIDIwNywKKzE4NCwgMjA4 LCAyMTAsIDIwOSwgMjExLCAyMTMsIDIxMiwgMjE1LCAyMTQsIDIxNywgMjE2LCAyMTgsIDIxOSwg MjIxLCAyMjIsIDI1MiwKKzIyNSwgMjI0LCAyMjYsIDIyOCwgMjI3LCAyMjksIDIzMCwgMjMxLCAy MzMsIDIzMiwgMjM0LCAyMzUsIDIzNywgMjM2LCAyMzgsIDIzOSwKKzE4MywgMjQwLCAyNDIsIDI0 MSwgMjQzLCAyNDUsIDI0NCwgMjQ3LCAyNDYsIDI0OSwgMjQ4LCAyNTAsIDI1MSwgMTgwLCAyNTQs IDI1MworfTsKKworCisvKiBMb2NhbCBmaWxlIGNoYXJhY3RlciBzZXRzIHRvIElTTyBMYXRpbiBB bHBoYWJldCAxICovCisKKyNpZmRlZiBOT1RVU0VECitDT05TVCBDSEFSCit5YXNsMVtdID0geyAg LyogQVNDSUkgdG8gTGF0aW4tMSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3Cit9OworI2VuZGlmIC8q IE5PVFVTRUQgKi8KKworQ09OU1QgQ0hBUgoreWFxbDFbXSA9IHsgIC8qIEV4dGVuZGVkIE1hYyBM YXRpbiAoYmFzZWQgb24gQXBwbGUgUXVpY2tkcmF3KSB0byBMYXRpbi0xICovCisgIDAsICAgMSwg ICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAx MywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0 LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUs ICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAg NDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1 OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5 LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAs ICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAg OTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEw MywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0 LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwg MTI2LCAxMjcsCisxOTYsIDE5NywgMTk5LCAyMDEsIDIwOSwgMjE0LCAyMjAsIDIyNSwgMjI0LCAy MjYsIDIyOCwgMjI3LCAyMjksIDIzMSwgMjMzLCAyMzIsCisyMzQsIDIzNSwgMjM3LCAyMzYsIDIz OCwgMjM5LCAyNDEsIDI0MywgMjQyLCAyNDQsIDI0NiwgMjQ1LCAyNTAsIDI0OSwgMjUxLCAyNTIs CisyMjEsIDE3NiwgMTYyLCAxNjMsIDE2NywgMjE1LCAxODIsIDIyMywgMTc0LCAxNjksIDE3OCwg MTgwLCAxNjgsIDE3OSwgMTk4LCAyMTYsCisxODUsIDE3NywgMTg4LCAxODksIDE2NSwgMTgxLCAx MjgsIDEyOSwgMTMwLCAxMzEsIDE5MCwgMTcwLCAxODYsIDEzMiwgMjMwLCAyNDgsCisxOTEsIDE2 MSwgMTcyLCAxNDIsIDEzMywgMTM0LCAxMzUsIDE3MSwgMTg3LCAxNjYsIDE2MCwgMTkyLCAxOTUs IDIxMywgMTM2LCAxMzcsCisxNzMsIDE0NCwgMTM4LCAxMzksIDE0MywgMTQ2LCAyNDcsIDE0NSwg MjU1LCAxNDAsIDE0MSwgMTY0LCAyMDgsIDI0MCwgMjIyLCAyNTQsCisyNTMsIDE4MywgMTQ3LCAx NDgsIDE0OSwgMTk0LCAyMDIsIDE5MywgMjAzLCAyMDAsIDIwNSwgMjA2LCAyMDcsIDIwNCwgMjEx LCAyMTIsCisxNTAsIDIxMCwgMjE4LCAyMTksIDIxNywgMTUxLCAxNTIsIDE1MywgMTc1LCAxNTQs IDE1NSwgMTU2LCAxODQsIDE1NywgMTU4LCAxNTkKK307CisKK0NPTlNUIENIQVIKK3lkdWwxW10g PSB7ICAvKiBEdXRjaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgMCwgICAxLCAgIDIsICAgMywg ICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAx NSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2 LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsIDE2MywgIDM2LCAgMzcs ICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwg IDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2 MCwgIDYxLCAgNjIsICA2MywKKzE5MCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcx LCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIs ICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAyNTUsIDE4OSwgMTI0LCAg OTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEw NSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2 LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxNjgsIDE2NCwgMTg4LCAgMzksIDEyNwor fTsKKworQ09OU1QgQ0hBUgoreWZpbDFbXSA9IHsgIC8qIEZpbm5pc2ggTlJDICgqbm90KiBJU08t NjQ2KSB0byBMYXRpbi0xICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAg NywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4 LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwg IDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAg NDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1 MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMs CisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwg IDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAg ODYsICA4NywgIDg4LCAgODksICA5MCwgMTk2LCAyMTQsIDE5NywgMjIwLCAgOTUsCisyMzMsICA5 NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgs IDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwg MTIwLCAxMjEsIDEyMiwgMjI4LCAyNDYsIDIyOSwgMjUyLCAxMjcKK307CisKK0NPTlNUIENIQVIK K3lmcmwxW10gPSB7ICAvKiBGcmVuY2ggSVNPIDY0NiB0byBMYXRpbi0xICovCisgIDAsICAgMSwg ICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAx MywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0 LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAxNjMs ICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAg NDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1 OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisyMjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5 LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAs ICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTc2LCAy MzEsIDE2NywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEw MywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0 LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMjMzLCAyNDksIDIzMiwg MTY4LCAxMjcKK307CisKK0NPTlNUIENIQVIKK3lmY2wxW10gPSB7ICAvKiBGcmVuY2gtQ2FuYWRp YW4gSVNPIDY0NiB0byBMYXRpbi0xICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCisyMjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMjI2LCAyMzEsIDIzNCwgMjM4LCAgOTUsCisy NDQsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgs IDExOSwgMTIwLCAxMjEsIDEyMiwgMjMzLCAyNDksIDIzMiwgMjUxLCAxMjcKK307CisKK0NPTlNU IENIQVIKK3lnZWwxW10gPSB7ICAvKiBHZXJtYW4gSVNPIDY0NiB0byBMYXRpbi0xICovCisgIDAs ICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAg MTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAy MywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0 LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwg IDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAg NTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisxNjcsICA2NSwgIDY2LCAgNjcsICA2 OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzks CisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwg MTk2LCAyMTQsIDIyMCwgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAx MDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDEx MywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMjI4LCAyNDYs IDI1MiwgMjIzLCAxMjcKK307CisKK0NPTlNUIENIQVIKK3lpdGwxW10gPSB7ICAvKiBJdGFsaWFu IElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgMTYzLCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAorMTY3LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDE3NiwgMjMxLCAyMzMsICA5NCwgIDk1LAorMjQ5 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDIyNCwgMjQyLCAyMzIsIDIzNiwgMTI3Cit9OworCitDT05TVCBD SEFSCit5bmVsMVtdID0geyAgLyogTmVYVCB0byBMYXRpbi0xICovCisvKiBORUVEIFRPIE1BS0Ug VEhJUyBPTkUgSU5WRVJUSUJMRSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTYwLCAxOTIsIDE5 MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUs IDIwNiwgMjA3LAorMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTcsIDIxOCwg MjE5LCAyMjAsIDIyMSwgMjIyLCAxODEsIDIxNSwgMjQ3LAorMTY5LCAxNjEsIDE2MiwgMTYzLCBV TkssIDE2NSwgVU5LLCAxNjcsIDE2NCwgVU5LLCBVTkssIDE3MSwgVU5LLCBVTkssIFVOSywgVU5L LAorMTc0LCBVTkssIFVOSywgVU5LLCAxODMsIDE2NiwgMTgyLCBVTkssIFVOSywgVU5LLCBVTkss IDE4NywgVU5LLCBVTkssIDE3MiwgMTkxLAorMTg1LCAgOTYsIDE4MCwgIDk0LCAxMjYsIDE3NSwg VU5LLCBVTkssIDE2OCwgMTc4LCAxNzYsIDE4NCwgMTc5LCBVTkssIFVOSywgVU5LLAorVU5LLCAx NzcsIDE4OCwgMTg5LCAxOTAsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMSwgMjMy LCAyMzMsIDIzNCwgMjM1LAorMjM2LCAxOTgsIDIzNywgMTcwLCAyMzgsIDIzOSwgMjQwLCAyNDEs IFVOSywgMjE2LCBVTkssIDE4NiwgMjQyLCAyNDMsIDI0NCwgMjQ1LAorMjQ2LCAyMzAsIDI0OSwg MjUwLCAyNTEsIFVOSywgMjUyLCAyNTMsIFVOSywgMjQ4LCBVTkssIDIyMywgMjU0LCAyNTUsIFVO SywgVU5LCit9OworCitDT05TVCBDSEFSCit5bm9sMVtdID0geyAgLyogTm9yd2VnaWFuL0Rhbmlz aCBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAg NiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3 LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwg IDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAg NDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1 MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIs ICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3Mywg IDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAg ODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxOTgsIDIxNiwgMTk3LCAgOTQsICA5NSwKKyA5 NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcs IDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwg MTE5LCAxMjAsIDEyMSwgMTIyLCAyMzAsIDI0OCwgMjI5LCAxMjYsIDEyNworfTsKKworQ09OU1Qg Q0hBUgoreXBvbDFbXSA9IHsgIC8qIFBvcnR1Z3Vlc2UgSVNPIDY0NiB0byBMYXRpbi0xICovCisg IDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDEx LCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIs ICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywg IDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0 NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2 LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcs ICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAg NzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5 MCwgMTk1LCAxOTksIDIxMywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAx LCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIs IDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMjI3LCAy MzEsIDI0NSwgMTI2LCAxMjcKK307CisKK0NPTlNUIENIQVIKK3lzcGwxW10gPSB7ICAvKiBTcGFu aXNoIElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwg ICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAg MTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4 LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgMTYzLCAgMzYsICAzNywgIDM4LCAgMzks ICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwg IDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2 MiwgIDYzLAorMTY3LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDcz LCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQs ICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDE2MSwgMjA5LCAxOTEsICA5NCwgIDk1LAor IDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEw NywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4 LCAxMTksIDEyMCwgMTIxLCAxMjIsIDE3NiwgMjQxLCAyMzEsIDEyNiwgMTI3Cit9OworCitDT05T VCBDSEFSCit5c3dsMVtdID0geyAgLyogU3dlZGlzaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAg MCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEs ICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwg IDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAg MzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1 LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYs ICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKzIwMSwgIDY1LCAgNjYsICA2Nywg IDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3 OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkw LCAxOTYsIDIxNCwgMTk3LCAyMjAsICA5NSwKKzIzMywgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEs IDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwg MTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAyMjgsIDI0 NiwgMjI5LCAyNTIsIDEyNworfTsKKworQ09OU1QgQ0hBUgoreWNobDFbXSA9IHsgIC8qIFN3aXNz IElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgMjQ5LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAorMjI0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsIDIzMywgMjMxLCAyMzQsIDIzOCwgMjMyLAorMjQ0 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDIyOCwgMjQ2LCAyNTIsIDI1MSwgMTI3Cit9OworCitDT05TVCBD SEFSCit5aHVsMVtdID0geyAgLyogSHVuZ2FyaWFuIElTTyA2NDYgdG8gTGF0aW4tMSAqLworICAw LCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwg IDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAg MjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAz NCwgIDM1LCAxNjQsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUs ICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1Niwg IDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorMTkzLCAgNjUsICA2NiwgIDY3LCAg NjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5 LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAs IDIwMSwgMjE0LCAyMjAsICA5NCwgIDk1LAorMjI1LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwg MTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAx MTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDIzMywgMjQ2 LCAyNTIsICAzNCwgMTI3Cit9OworCitDT05TVCBDSEFSCit5ZG1sMVtdID0geyAgLyogREVDIE11 bHRpbmF0aW9uYWwgQ2hhcmFjdGVyIFNldCB0byBMYXRpbi0xICovCisvKiBOb3RlOiBUaGlzIGlz IGEgbnVsbCB0cmFuc2xhdGlvbiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2 LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcs ICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAg MjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0 MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUx LCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2Miwg IDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAg NzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4 NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2 LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywg MTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAx MTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEz MCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEs IDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1Miwg MTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorMTYwLCAxNjEsIDE2MiwgMTYzLCAx NjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1 LAorMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsIDE4NCwgMTg1LCAxODYs IDE4NywgMTg4LCAxODksIDE5MCwgMTkxLAorMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5Nywg MTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LAorMjA4LCAy MDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIw LCAyMjEsIDIyMiwgMjIzLAorMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEs IDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LAorMjQwLCAyNDEsIDI0Miwg MjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1 NCwgMjU1Cit9OworCitDT05TVCBDSEFSCit5ZGdsMVtdID0geyAgLyogRGF0YSBHZW5lcmFsIElu dGVybmF0aW9uYWwgdG8gTGF0aW4tMSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwg ICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAg MTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4 LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzks ICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwg IDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2 MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDcz LCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQs ICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAor IDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEw NywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4 LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjks IDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAx NDEsIDE0MiwgMTQzLAorMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1 MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LAorMTYwLCAxNzIsIDE4OSwgMTgx LCAxNzgsIDE3OSwgMTY0LCAxNjIsIDE2MywgMTcwLCAxODYsIDE2MSwgMTkxLCAxNjksIDE3NCwg MTc1LAorMTg3LCAxNzEsIDE4MiwgMTg1LCAyNTMsIDE2NSwgMTc3LCAyNDAsIDIwOCwgMTgzLCAx ODQsIDE2NywgMTc2LCAxNjgsIDE4MCwgMTY2LAorMTkzLCAxOTIsIDE5NCwgMTk2LCAxOTUsIDE5 NywgMTk4LCAxOTksIDIwMSwgMjAwLCAyMDIsIDIwMywgMjA1LCAyMDQsIDIwNiwgMjA3LAorMjA5 LCAyMTEsIDIxMCwgMjEyLCAyMTQsIDIxMywgMjE2LCAyMTUsIDIxOCwgMjE3LCAyMTksIDIyMCwg MTkwLCAyMjEsIDIyMiwgMTg4LAorMjI1LCAyMjQsIDIyNiwgMjI4LCAyMjcsIDIyOSwgMjMwLCAy MzEsIDIzMywgMjMyLCAyMzQsIDIzNSwgMjM3LCAyMzYsIDIzOCwgMjM5LAorMjQxLCAyNDMsIDI0 MiwgMjQ0LCAyNDYsIDI0NSwgMjQ4LCAyNDcsIDI1MCwgMjQ5LCAyNTEsIDI1MiwgMjIzLCAyNTUs IDI1NCwgMTczCit9OworCisKKy8qIFRyYW5zbGF0aW9uIHRhYmxlcyBmb3IgQ3lyaWxsaWMgY2hh cmFjdGVyIHNldHMgKi8KKworI2lmZGVmIENZUklMTElDCitDT05TVCBDSEFSCit5bGNhY1tdID0g eyAgLyogTGF0aW4vQ3lyaWxsaWMgdG8gQ1A4NjYgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0 LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwK KyAxNiwgIDE3LCAgMTgsICAxOSwgMjA4LCAyMDksICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAg MjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAz OCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5 LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwg IDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAg NzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4 MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQs ICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwg MTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAx MTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzE5 NiwgMTc5LCAxOTIsIDIxNywgMTkxLCAyMTgsIDE5NSwgMTkzLCAxODAsIDE5NCwgMTk3LCAxNzYs IDE3NywgMTc4LCAyMTEsIDIxNiwKKzIwNSwgMTg2LCAyMDAsIDE4OCwgMTg3LCAyMDEsIDIwNCwg MjAyLCAxODUsIDIwMywgMjA2LCAyMjMsIDIyMCwgMjE5LCAyNTQsIFVOSywKKzI1NSwgMjQwLCAx MzIsIDEzMSwgMjQyLCAgODMsICA3MywgMjQ0LCAgNzQsIDEzOSwgMTQxLCAxNTEsIDEzOCwgIDQ1 LCAyNDYsIDEzNSwKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYs IDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0Nywg MTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1 OSwKKzE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcw LCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwKKzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjks IDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKKzI1Miwg MjQxLCAxNjQsIDE2MywgMjQzLCAxMTUsIDEwNSwgMjQ1LCAxMDYsIDE3MSwgMTczLCAyMzEsIDE3 MCwgIDIxLCAyNDcsIDE2NworfTsKKworQ09OU1QgQ0hBUgoreWxjNTVbXSA9IHsgIC8qIExhdGlu L0N5cmlsbGljIHRvIENQODU1IChpbnZlcnNlIG9mIHk1NWxjKSAqLworICAwLCAgIDEsICAgMiwg ICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAx NCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1 LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYs ICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAor IDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1 OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcw LCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEs ICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAg OTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEw NCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1 LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwg MTI3LAorMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODUsIDE4NiwgMTg3LCAx ODgsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LAorMTk2LCAxOTcsIDIwMCwgMjAxLCAyMDIsIDIw MywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMywgMjU0LAorMjU1 LCAxMzMsIDEyOSwgMTMxLCAxMzUsIDEzNywgMTM5LCAxNDEsIDE0MywgMTQ1LCAxNDcsIDE0OSwg MTUxLCAyNDAsIDE1MywgMTU1LAorMTYxLCAxNjMsIDIzNiwgMTczLCAxNjcsIDE2OSwgMjM0LCAy NDQsIDE4NCwgMTkwLCAxOTksIDIwOSwgMjExLCAyMTMsIDIxNSwgMjIxLAorMjI2LCAyMjgsIDIz MCwgMjMyLCAxNzEsIDE4MiwgMTY1LCAyNTIsIDI0NiwgMjUwLCAxNTksIDI0MiwgMjM4LCAyNDgs IDE1NywgMjI0LAorMTYwLCAxNjIsIDIzNSwgMTcyLCAxNjYsIDE2OCwgMjMzLCAyNDMsIDE4Mywg MTg5LCAxOTgsIDIwOCwgMjEwLCAyMTIsIDIxNCwgMjE2LAorMjI1LCAyMjcsIDIyOSwgMjMxLCAx NzAsIDE4MSwgMTY0LCAyNTEsIDI0NSwgMjQ5LCAxNTgsIDI0MSwgMjM3LCAyNDcsIDE1NiwgMjIy LAorMjM5LCAxMzIsIDEyOCwgMTMwLCAxMzQsIDEzNiwgMTM4LCAxNDAsIDE0MiwgMTQ0LCAxNDYs IDE0OCwgMTUwLCAyNTMsIDE1MiwgMTU0Cit9OworCitDT05TVCBDSEFSCit5bGMxMjUxW10gPSB7 ICAvKiBMYXRpbi9DeXJpbGxpYyB0byBDUDEyNTEgKGludmVyc2Ugb2YgeTEyNTFsYykgKi8KKyAg MCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEs ICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwg IDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAg MzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1 LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYs ICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2Nywg IDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3 OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkw LCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEs IDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwg MTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEy NCwgMTI1LCAxMjYsIDEyNywKKzEzMCwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM5 LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwKKzE1MywgMTU1LCAxNjQs IDE2NSwgMTY2LCAxNjksIDE3MSwgMTcyLCAxNzQsIDE3NiwgMTc3LCAxODAsIDE4MSwgMTgyLCAx ODMsIDE4NywKKzE2MCwgMTY4LCAxMjgsIDEyOSwgMTcwLCAxODksIDE3OCwgMTc1LCAxNjMsIDEz OCwgMTQwLCAxNDIsIDE0MSwgMTczLCAxNjEsIDE0MywKKzE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2 LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywK KzIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAy MTksIDIyMCwgMjIxLCAyMjIsIDIyMywKKzIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIz MCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwKKzI0MCwgMjQx LCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1Miwg MjUzLCAyNTQsIDI1NSwKKzE4NSwgMTg0LCAxNDQsIDEzMSwgMTg2LCAxOTAsIDE3OSwgMTkxLCAx ODgsIDE1NCwgMTU2LCAxNTgsIDE1NywgMTY3LCAxNjIsIDE1OQorfTsKKworQ09OU1QgQ0hBUgor eWxjYnVbXSA9IHsgIC8qIExhdGluL0N5cmlsbGljIHRvIEJ1bGdhcmlhbiBQQyBDb2RlIFBhZ2Ug Ki8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEw LCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEs ICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwg IDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0 NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1 LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYs ICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAg NzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4 OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAw LCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwK KzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAx MjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzI1NSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5 NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwKKzEyOCwgMTI5 LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwg MTQxLCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAx NTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKzE2MCwgMTYxLCAxNjIsIDE2 MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQs IDE3NSwKKzE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwg MTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwKKzIxMywgMjA3LCAyMDgsIDIwOSwgMjEwLCAy MTEsIDIxMiwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywKKzIy NCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUs IDIzNiwgMjM3LCAyMzgsIDIzOSwKKzI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0Niwg MjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjE0LCAyNTMsIDI1NAorfTsKKworQ09OU1Qg Q0hBUgoreWxjazhbXSA9IHsgIC8qIExhdGluL0N5cmlsbGljIHRvIE9sZCBLT0ktOCBDeXJpbGxp YyAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAg MTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAy MSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMy LCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0Mywg IDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAg NTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2 NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcs ICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwg IDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAx MDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTEx LAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIs IDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywg MTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0LCAx NDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2 LCAxNTcsIDE1OCwgMTU5LAorVU5LLCAyMjksIFVOSywgVU5LLCBVTkssICA4MywgIDczLCAgNzMs ICA3NCwgVU5LLCBVTkssIFVOSywgMjM1LCBVTkssIDI0NSwgVU5LLAorMjI1LCAyMjYsIDI0Nywg MjMxLCAyMjgsIDIyOSwgMjQ2LCAyNTAsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIz OSwgMjQwLAorMjQyLCAyNDMsIDI0NCwgMjQ1LCAyMzAsIDIzMiwgMjI3LCAyNTQsIDI1MSwgMjUz LCAyNTUsIDI0OSwgMjQ4LCAyNTIsIDIyNCwgMjQxLAorMTkzLCAxOTQsIDIxNSwgMTk5LCAxOTYs IDE5NywgMjE0LCAyMTgsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LAor MjEwLCAyMTEsIDIxMiwgMjEzLCAxOTgsIDIwMCwgMTk1LCAyMjIsIDIxOSwgMjIxLCAyMjMsIDIx NywgMjE2LCAyMjAsIDE5MiwgMjA5LAorVU5LLCAxOTcsIFVOSywgVU5LLCBVTkssIDExNSwgMTA1 LCAxMDUsIDEwNiwgVU5LLCBVTkssIFVOSywgMjAzLCBVTkssIDIxMywgVU5LCit9OworCitDT05T VCBDSEFSCit5YWNsY1tdID0geyAgLyogQ1A4NjYgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKy8qIE5F RUQgVE8gTUFLRSBUSElTIE9ORSBJTlZFUlRJQkxFICovCisgIDAsICAgMSwgICAyLCAgIDMsICAg NCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUs CisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwg IDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAg MzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0 OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAs ICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwg IDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAg ODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0 LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUs IDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwg MTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisx NzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3 LCAxODgsIDE4OSwgMTkwLCAxOTEsCisxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgs IDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCisyMDgsIDIwOSwg MjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIy MSwgMjIyLCAyMjMsCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCisyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5 LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCisxNjEs IDI0MSwgMTY0LCAyNDQsIDE2NywgMjQ3LCAxNzQsIDI1NCwgVU5LLCBVTkssIFVOSywgVU5LLCAy NDAsIFVOSywgVU5LLCBVTksKK307CisKK0NPTlNUIENIQVIKK3k1NWxjW10gPSB7ICAvKiBDUDg1 NSB0byBMYXRpbi9DeXJpbGxpYyAoaW52ZXJzZSBvZiB5bGM1NSkgKi8KKyAgMCwgICAxLCAgIDIs ICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAg MTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAy NSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2 LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywK KyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAg NTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3 MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgx LCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5Miwg IDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAx MDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDEx NSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYs IDEyNywKKzI0MiwgMTYyLCAyNDMsIDE2MywgMjQxLCAxNjEsIDI0NCwgMTY0LCAyNDUsIDE2NSwg MjQ2LCAxNjYsIDI0NywgMTY3LCAyNDgsIDE2OCwKKzI0OSwgMTY5LCAyNTAsIDE3MCwgMjUxLCAx NzEsIDI1MiwgMTcyLCAyNTQsIDE3NCwgMjU1LCAxNzUsIDIzOCwgMjA2LCAyMzQsIDIwMiwKKzIw OCwgMTc2LCAyMDksIDE3NywgMjMwLCAxOTgsIDIxMiwgMTgwLCAyMTMsIDE4MSwgMjI4LCAxOTYs IDIxMSwgMTc5LCAxMjgsIDEyOSwKKzEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAyMjksIDE5Nywg MjE2LCAxODQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMjE3LCAxODUsIDEzOSwKKzE0MCwgMTQxLCAx NDIsIDE0MywgMTQ0LCAxNDUsIDIxOCwgMTg2LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUx LCAxNTIsIDE1MywKKzIxOSwgMTg3LCAyMjAsIDE4OCwgMjIxLCAxODksIDIyMiwgMTkwLCAyMjMs IDE1NCwgMTU1LCAxNTYsIDE1NywgMTkxLCAyMzksIDE1OCwKKzIwNywgMjI0LCAxOTIsIDIyNSwg MTkzLCAyMjYsIDE5NCwgMjI3LCAxOTUsIDIxNCwgMTgyLCAyMTAsIDE3OCwgMjM2LCAyMDQsIDI0 MCwKKzE3MywgMjM1LCAyMDMsIDIxNSwgMTgzLCAyMzIsIDIwMCwgMjM3LCAyMDUsIDIzMywgMjAx LCAyMzEsIDE5OSwgMjUzLCAxNTksIDE2MAorfTsKKworQ09OU1QgQ0hBUgoreTEyNTFsY1tdID0g eyAgLyogQ1AxMjUxIHRvIExhdGluL0N5cmlsbGljIChpbnZlcnNlIG9mIHlsYzEyNTEpICovCisg IDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDEx LCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIs ICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywg IDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0 NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2 LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcs ICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAg NzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5 MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAx LCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIs IDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAx MjQsIDEyNSwgMTI2LCAxMjcsCisxNjIsIDE2MywgMTI4LCAyNDMsIDEyOSwgMTMwLCAxMzEsIDEz MiwgMTMzLCAxMzQsIDE2OSwgMTM1LCAxNzAsIDE3MiwgMTcxLCAxNzUsCisyNDIsIDEzNiwgMTM3 LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDI0OSwgMTQ1LCAyNTAsIDI1Miwg MjUxLCAyNTUsCisxNjAsIDE3NCwgMjU0LCAxNjgsIDE0NiwgMTQ3LCAxNDgsIDI1MywgMTYxLCAx NDksIDE2NCwgMTUwLCAxNTEsIDE3MywgMTUyLCAxNjcsCisxNTMsIDE1NCwgMTY2LCAyNDYsIDE1 NSwgMTU2LCAxNTcsIDE1OCwgMjQxLCAyNDAsIDI0NCwgMTU5LCAyNDgsIDE2NSwgMjQ1LCAyNDcs CisxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4Niwg MTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsCisxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAx OTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCisyMDgsIDIw OSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAs IDIyMSwgMjIyLCAyMjMsCisyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwg MjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzkKK307CisKK0NPTlNUIENIQVIK K3lidWxjW10gPSB7ICAvKiBCdWxnYXJpYW4gUEMgQ29kZSBQYWdlIHRvIExhdGluL0N5cmlsbGlj ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAx MCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIx LCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIs ICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAg NDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1 NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2 LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3Nywg IDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAg ODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEw MCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEs CisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwg MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAx NTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksCisxNjAsIDE2 MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIs IDE3MywgMTc0LCAxNzUsCisxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4Mywg MTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsCisxOTIsIDE5MywgMTk0LCAx OTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2 LCAyMDcsCisxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgs IDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAyMDksCisyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwg MjA4LCAyNTMsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsCisy MjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1 LCAyMzYsIDIzNywgMjM4LCAyMzksCisyNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYs IDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1NCwgMjU1LCAxMjgKK307CisKK0NPTlNU IENIQVIKK3lrOGxjW10gPSB7ICAvKiBPbGQgS09JLTggQ3lyaWxsaWMgdG8gTGF0aW4vQ3lyaWxs aWMgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwg IDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAg MjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAz MiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMs ICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwg IDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAg NjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3 LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgs ICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwg MTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDEx MSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIy LCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMs IDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwg MTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1 NiwgMTU3LCAxNTgsIDE1OSwKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywKKzIzOCwgMjA4LCAyMDksIDIzMCwgMjEyLCAyMTMsIDIyOCwgMjExLCAyMjksIDIx NiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwKKzIyMywgMjM5LCAyMjQsIDIyNSwgMjI2 LCAyMjcsIDIxNCwgMjEwLCAyMzYsIDIzNSwgMjE1LCAyMzIsIDIzNywgMjMzLCAyMzEsIDIzNCwK KzIwNiwgMTc2LCAxNzcsIDE5OCwgMTgwLCAxODEsIDE5NiwgMTc5LCAxOTcsIDE4NCwgMTg1LCAx ODYsIDE4NywgMTg4LCAxODksIDE5MCwKKzE5MSwgMjA3LCAxOTIsIDE5MywgMTk0LCAxOTUsIDE4 MiwgMTc4LCAyMDQsIDIwMywgMTgzLCAyMDAsIDIwNSwgMjAxLCAxOTksIDEyNworfTsKKworQ09O U1QgQ0hBUgoreWxjc2tbXSA9IHsgIC8qIExhdGluL0N5cmlsbGljIHRvIFNob3J0IEtPSSAqLwor ICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAx MSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIy LCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMs ICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAg NDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1 NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3 LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwg IDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAg OTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2 OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgw LCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwg IDkyLCAgOTMsICA5NCwgMTI3LAorICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAg IDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAx OCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjks ICAzMCwgIDMxLAorIDMyLCAxMDEsIFVOSywgVU5LLCBVTkssICA4MywgIDczLCAgNzMsICA3NCwg VU5LLCBVTkssIFVOSywgMTA3LCAgNDUsIDExNywgVU5LLAorIDk3LCAgOTgsIDExOSwgMTAzLCAx MDAsIDEwMSwgMTE4LCAxMjIsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEy LAorMTE0LCAxMTUsIDExNiwgMTE3LCAxMDIsIDEwNCwgIDk5LCAxMjYsIDEyMywgMTI1LCAgMzks IDEyMSwgMTIwLCAxMjQsICA5NiwgMTEzLAorIDk3LCAgOTgsIDExOSwgMTAzLCAxMDAsIDEwMSwg MTE4LCAxMjIsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLAorMTE0LCAx MTUsIDExNiwgMTE3LCAxMDIsIDEwNCwgIDk5LCAxMjYsIDEyMywgMTI1LCAgMzksIDEyMSwgMTIw LCAxMjQsICA5NiwgMTEzLAorVU5LLCAxMDEsIFVOSywgVU5LLCBVTkssICA4MywgIDczLCAgNzMs ICA3NCwgVU5LLCBVTkssIFVOSywgMTA3LCBVTkssIDExNywgVU5LCit9OworCitDT05TVCBDSEFS IHlza2N5W10gPSB7ICAvKiBTaG9ydCBLT0kgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgMCwgICAx LCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwg IDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAg MjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAz NSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYs ICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1Nywg IDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAg NjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4 MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEs ICA5MiwgIDkzLCAgOTQsICA5NSwKKzIwNiwgMTc2LCAxNzcsIDE5OCwgMTgwLCAxODEsIDE5Niwg MTc5LCAxOTcsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwKKzE5MSwgMjA3LCAx OTIsIDE5MywgMTk0LCAxOTUsIDE4MiwgMTc4LCAyMDQsIDIwMywgMTgzLCAyMDAsIDIwNSwgMjAx LCAxOTksIDEyNworfTsKKyNlbmRpZiAvKiBDWVJJTExJQyAqLworCisjaWZkZWYgTEFUSU4yCisK Ky8qIExhdGluLTIgdGFibGVzICovCisKK0NPTlNUIENIQVIKK3lsMjUyW10gPSB7CQkJCS8qIExh dGluLTIgdG8gQ29kZSBQYWdlIDg1MiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwg ICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAg MTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4 LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzks ICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwg IDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2 MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDcz LCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQs ICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAor IDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEw NywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4 LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTc0LCAxNzUs IDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODUsIDE4NiwgMTg3LCAxODgsIDE5MSwgMTkyLCAx OTMsIDE5NCwgMTk1LAorMTk2LCAxOTcsIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIw NiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjMsIDI0MCwgMjU0LAorMjU1LCAxNjQsIDI0NCwgMTU3 LCAyMDcsIDE0OSwgMTUxLCAyNDUsIDI0OSwgMjMwLCAxODQsIDE1NSwgMTQxLCAxNzAsIDE2Niwg MTg5LAorMjQ4LCAxNjUsIDI0MiwgMTM2LCAyMzksIDE1MCwgMTUyLCAyNDMsIDI0NywgMjMxLCAx NzMsIDE1NiwgMTcxLCAyNDEsIDE2NywgMTkwLAorMjMyLCAxODEsIDE4MiwgMTk4LCAxNDIsIDE0 NSwgMTQzLCAxMjgsIDE3MiwgMTQ0LCAxNjgsIDIxMSwgMTgzLCAyMTQsIDIxNSwgMjEwLAorMjA5 LCAyMjcsIDIxMywgMjI0LCAyMjYsIDEzOCwgMTUzLCAxNTgsIDI1MiwgMjIyLCAyMzMsIDIzNSwg MTU0LCAyMzcsIDIyMSwgMjI1LAorMjM0LCAxNjAsIDEzMSwgMTk5LCAxMzIsIDE0NiwgMTM0LCAx MzUsIDE1OSwgMTMwLCAxNjksIDEzNywgMjE2LCAxNjEsIDE0MCwgMjEyLAorMjA4LCAyMjgsIDIy OSwgMTYyLCAxNDcsIDEzOSwgMTQ4LCAyNDYsIDI1MywgMTMzLCAxNjMsIDI1MSwgMTI5LCAyMzYs IDIzOCwgMjUwCit9OworCitDT05TVCBDSEFSCit5NTJsMltdID0gewkJCQkvKiBDb2RlIFBhZ2Ug ODUyIHRvIExhdGluLTIgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3 LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgs ICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAg MzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0 MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUy LCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywK KyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAg NzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4 NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3 LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwg MTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAx MjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzE5OSwgMjUyLCAyMzMsIDIy NiwgMjI4LCAyNDksIDIzMCwgMjMxLCAxNzksIDIzNSwgMjEzLCAyNDUsIDIzOCwgMTcyLCAxOTYs IDE5OCwKKzIwMSwgMTk3LCAyMjksIDI0NCwgMjQ2LCAxNjUsIDE4MSwgMTY2LCAxODIsIDIxNCwg MjIwLCAxNzEsIDE4NywgMTYzLCAyMTUsIDIzMiwKKzIyNSwgMjM3LCAyNDMsIDI1MCwgMTYxLCAx NzcsIDE3NCwgMTkwLCAyMDIsIDIzNCwgMTczLCAxODgsIDIwMCwgMTg2LCAxMjgsIDEyOSwKKzEz MCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxOTMsIDE5NCwgMjA0LCAxNzAsIDEzNSwgMTM2LCAxMzcs IDEzOCwgMTc1LCAxOTEsIDEzOSwKKzE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDUsIDE5NSwg MjI3LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE2NCwKKzI0MCwgMjA4LCAy MDcsIDIwMywgMjM5LCAyMTAsIDIwNSwgMjA2LCAyMzYsIDE1MywgMTU0LCAxNTUsIDE1NiwgMjIy LCAyMTcsIDE1NywKKzIxMSwgMjIzLCAyMTIsIDIwOSwgMjQxLCAyNDIsIDE2OSwgMTg1LCAxOTIs IDIxOCwgMjI0LCAyMTksIDI1MywgMjIxLCAyNTQsIDE4MCwKKzE1OCwgMTg5LCAxNzgsIDE4Mywg MTYyLCAxNjcsIDI0NywgMTg0LCAxNzYsIDE2OCwgMjU1LCAyNTEsIDIxNiwgMjQ4LCAxNTksIDE2 MAorfTsKKworQ09OU1QgQ0hBUgoreWwyMTI1MFtdID0gewkJCQkvKiBMYXRpbi0yIHRvIENvZGUg UGFnZSAxMjUwICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4 LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTks ICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAg MzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0 MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUz LCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQs ICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAg NzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4 NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4 LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwg MTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAx MjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDEyOSwgMTMwLCAxMzEsIDEz MiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOSwgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgs CisxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU1LCAxNjYsIDE2OSwgMTcxLCAxNzIsIDE3NCwg MTc3LCAxODEsIDE4MiwgMTgzLCAxODcsCisxNjAsIDE2NSwgMTYyLCAxNjMsIDE2NCwgMTg4LCAx NDAsIDE2NywgMTY4LCAxMzgsIDE3MCwgMTQxLCAxNDMsIDE3MywgMTQyLCAxNzUsCisxNzYsIDE4 NSwgMTc4LCAxNzksIDE4MCwgMTkwLCAxNTYsIDE2MSwgMTg0LCAxNTQsIDE4NiwgMTU3LCAxNTks IDE4OSwgMTU4LCAxOTEsCisxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwg MjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsCisyMDgsIDIwOSwgMjEwLCAy MTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIy LCAyMjMsCisyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMs IDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCisyNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwg MjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUKK307 CisKK0NPTlNUIENIQVIKK3kxMjUwbDJbXSA9IHsJCQkJLyogQ29kZSBQYWdlIDEyNTAgdG8gTGF0 aW4tMiAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5 LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAs ICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAor IDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0 MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0 LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUs ICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAg NzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4 OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5 LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwg MTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAx MjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEz MywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxNjksIDEzOCwgMTY2LCAxNzEsIDE3NCwgMTcyLAorMTM5 LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxODUsIDE0OSwg MTgyLCAxODcsIDE5MCwgMTg4LAorMTYwLCAxODMsIDE2MiwgMTYzLCAxNjQsIDE2MSwgMTUwLCAx NjcsIDE2OCwgMTUxLCAxNzAsIDE1MiwgMTUzLCAxNzMsIDE1NCwgMTc1LAorMTc2LCAxNTUsIDE3 OCwgMTc5LCAxODAsIDE1NiwgMTU3LCAxNTgsIDE4NCwgMTc3LCAxODYsIDE1OSwgMTY1LCAxODks IDE4MSwgMTkxLAorMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwg MjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LAorMjA4LCAyMDksIDIxMCwgMjExLCAy MTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIz LAorMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQs IDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LAorMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwg MjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1Cit9OworCitD T05TVCBDSEFSCit5bDJteltdID0gewkJCSAgICAgLyogTGF0aW4tMiB0byBNYXpvdmlhIChOT1Qg aW52ZXJ0aWJsZSkgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAg IDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAx OSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAs ICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwg IDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAg NTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2 NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUs ICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4Niwg IDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAg OTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5 LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAs IDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwg MTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0 MywKKzE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0 LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwKKzI1NSwgMTQzLCBVTkssIDE1NiwgMTU1LCAgNzYs IDE1MiwgIDIxLCAgMzQsICA4MywgIDgzLCAgODQsIDE2MCwgIDQ1LCAgOTAsIDE2MSwKKzI0OCwg MTM0LCAgNDQsIDE0NiwgIDM5LCAxMDgsIDE1OCwgVU5LLCAgNDQsIDExNSwgMTE1LCAxMTYsIDE2 NiwgIDM0LCAxMjIsIDE2NywKKyA4MiwgIDY1LCAgNjUsICA2NSwgMTQyLCAgNzYsIDE0OSwgMTI4 LCAgNjcsICA2OSwgMTQ0LCAgNjksICA2OSwgIDczLCAgNzMsICA2OCwKKyA2OCwgMTY1LCAgNzgs IDE2MywgIDc5LCAxNTMsIDE1MywgMjUwLCAgODIsICA4NSwgIDg1LCAxNTQsIDE1NCwgIDg5LCAg ODQsIDIyNSwKKzExNCwgIDk3LCAxMzEsICA5NywgMTMyLCAxMDgsIDE0MSwgMTM1LCAgOTksIDEz MCwgMTQ1LCAxMzcsIDEwMSwgMTA1LCAxNDAsIDEwMSwKKzEwMCwgMTY0LCAxMTAsIDE2MiwgMTQ3 LCAxNDgsIDE0OCwgMjQ2LCAxMTQsIDExNywgMTE3LCAxMjksIDEyOSwgMTIxLCAxMTYsIDI0OQor fTsKKworQ09OU1QgQ0hBUgoreW16bDJbXSA9IHsJCQkgICAgIC8qIE1hem92aWEgdG8gTGF0aW4t MiAoTk9UIElOVkVSVElCTEUpICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYs ICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywg IDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAy OSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQw LCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEs ICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAg NjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3 NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1 LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYs ICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAx MDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDEx OSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxMjgsIDI1MiwgMjMz LCAyMjYsIDIyOCwgIDk3LCAxNzcsIDIzMSwgMTAxLCAyMzUsIDEwMSwgMTA1LCAyMzgsIDIzMCwg MTk2LCAxNjEsCisyMDIsIDIzNCwgMTc5LCAyNDQsIDI0NiwgMTk4LCAxMTcsIDExNywgMTY2LCAy MTQsIDIyMCwgMTY0LCAxNjMsICA4OSwgMTgyLCAxMDIsCisxNzIsIDE3NSwgMjQzLCAyMTEsIDI0 MiwgMjEwLCAxODgsIDE5MSwgIDYzLCBVTkssIFVOSywgVU5LLCBVTkssICAzMywgIDM0LCAgMzQs CitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCAyNDcsIFVOSywgMTc2LCAyNTUsIDIxNSwgVU5LLCBVTkssIFVOSywgVU5L LCAxNjAKK307CisKK0NPTlNUIENIQVIKK3lsMmwxW10gPSB7CQkJCS8qIExhdGluLTIgdG8gTGF0 aW4tMSAqLworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5 LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAs ICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAor IDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0 MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0 LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUs ICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAg NzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4 OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5 LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwg MTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAx MjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAorMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEz MywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLAorMTQ0 LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwg MTU2LCAxNTcsIDE1OCwgMTU5LAorMTYwLCAnQScsIFVOSywgJ0wnLCAxNjQsICdMJywgJ1MnLCAx NjcsIDE2OCwgJ1MnLCAnUycsICdUJywgJ1onLCAxNzMsICdaJywgJ1onLAorMTc2LCAnYScsIFVO SywgJ2wnLCAxODAsICdsJywgJ3MnLCBVTkssIDE4NCwgJ3MnLCAncycsICd0JywgJ3onLCBVTkss ICd6JywgJ3onLAorJ1InLCAxOTMsIDE5NCwgJ0EnLCAxOTYsICdMJywgJ0MnLCAxOTksICdDJywg MjAxLCAnRScsIDIwMywgJ0UnLCAyMDUsICdJJywgJ0QnLAorMjA4LCAnTicsICdOJywgMjExLCAy MTIsICdPJywgMjE0LCAyMTUsICdSJywgJ1UnLCAyMTgsICdVJywgMjIwLCAyMjEsICdUJywgMjIz LAorJ3InLCAyMjUsIDIyNiwgJ2EnLCAyMjgsICdsJywgJ2MnLCAyMzEsICdjJywgMjMzLCAnZScs IDIzNSwgJ2UnLCAyMzcsICdpJywgJ2QnLAorMjQwLCAnbicsICduJywgMjQzLCAyNDQsICdvJywg MjQ2LCAyNDcsICdyJywgJ3UnLCAyNTAsICd1JywgMjUyLCAyNTMsICd0JywgJy4nCit9OworCitD T05TVCBDSEFSCit5bDFsMltdID0gewkJCQkvKiBMYXRpbi0xIHRvIExhdGluLTIgKi8KKyAgMCwg ICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAx MiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIz LCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQs ICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAg NDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1 NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4 LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwK KyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAg OTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEw MiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEz LCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwg MTI1LCAxMjYsIDEyNywKKzEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAx MzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywKKzE0NCwgMTQ1LCAxNDYsIDE0 NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgs IDE1OSwKKzE2MCwgJ0EnLCBVTkssICdMJywgMTY0LCBVTkssIFVOSywgMTY3LCAxNjgsICdDJywg J2EnLCAnPCcsICc+JywgMTczLCAnUicsIFVOSywKKzE3NiwgVU5LLCBVTkssIFVOSywgMTgwLCBV TkssIFVOSywgVU5LLCAxODQsIFVOSywgJ28nLCAnPicsIFVOSywgVU5LLCBVTkssIFVOSywKKydB JywgMTkzLCAxOTQsICdBJywgMTk2LCAnQScsICdBJywgMTk5LCAnRScsIDIwMSwgJ0UnLCAyMDMs ICdJJywgMjA1LCAnSScsICdJJywKKzIwOCwgJ04nLCAnTycsIDIxMSwgMjEyLCAnTycsIDIxNCwg MjE1LCAnTycsICdVJywgMjE4LCAnVScsIDIyMCwgMjIxLCBVTkssIDIyMywKKydhJywgMjI1LCAy MjYsICdhJywgMjI4LCAnYScsICdhJywgMjMxLCAnZScsIDIzMywgJ2UnLCAyMzUsICdpJywgMjM3 LCAnaScsICdpJywKKzI0MCwgJ24nLCAnbycsIDI0MywgMjQ0LCAnbycsIDI0NiwgMjQ3LCAnbycs ICd1JywgMjUwLCAndScsIDI1MiwgMjUzLCBVTkssICd5JworfTsKKworQ09OU1QgQ0hBUgoreWwy YXNbXSA9IHsJCQkJLyogTGF0aW4tMiB0byBBU0NJSSAqLworICAwLCAgIDEsICAgMiwgICAzLCAg IDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1 LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYs ICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywg IDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAg NDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYw LCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEs ICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4Miwg IDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5 NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1 LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYs IDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LAor VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLAorVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLAorIDMyLCAnQScs IFVOSywgJ0wnLCBVTkssICdMJywgJ1MnLCBVTkssICAzNCwgJ1MnLCAnUycsICdUJywgJ1onLCAn LScsICdaJywgJ1onLAorVU5LLCAnYScsIFVOSywgJ2wnLCAgMzksICdsJywgJ3MnLCBVTkssICA0 NCwgJ3MnLCAncycsICd0JywgJ3onLCBVTkssICd6JywgJ3onLAorJ1InLCAnQScsICdBJywgJ0En LCAnQScsICdMJywgJ0MnLCAnQycsICdDJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnSScsICdJJywg J0QnLAorJ0QnLCAnTicsICdOJywgJ08nLCAnTycsICdPJywgJ08nLCAneCcsICdSJywgJ1UnLCAn VScsICdVJywgJ1UnLCAnWScsICdUJywgJ3MnLAorJ3InLCAnYScsICdhJywgJ2EnLCAnYScsICds JywgJ2MnLCAnYycsICdjJywgJ2UnLCAnZScsICdlJywgJ2UnLCAnaScsICdpJywgJ2QnLAorJ2Qn LCAnbicsICduJywgJ28nLCAnbycsICdvJywgJ28nLCAnLycsICdyJywgJ3UnLCAndScsICd1Jywg J3UnLCAneScsICd0JywgJy4nCit9OworI2VuZGlmIC8qIExBVElOMiAqLworCisjaWZkZWYgSEVC UkVXCisvKgorICA4LWJpdCBUYWJsZXMgcHJvdmlkaW5nIGludmVydGlibGUgdHJhbnNsYXRpb24g YmV0d2VlbiBMYXRpbi9IZWJyZXcgYW5kIENQODYyLgorKi8KK0NPTlNUIENIQVIKK3k2MmxoW10g PSB7ICAvKiBQQyBDb2RlIFBhZ2UgODYyIHRvIElTTyA4ODU5LTggTGF0aW4vSGVicmV3ICovCisg IDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDEx LCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIs ICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywg IDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0 NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2 LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcs ICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAg NzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5 MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAx LCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIs IDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAx MjQsIDEyNSwgMTI2LCAxMjcsCisyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIz MSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksCisyNDAsIDI0MSwgMjQy LCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMTYyLCAxNjMsIDE2NSwg MTI4LCAxMjksCisxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAx MzksIDE3MiwgMTg5LCAxODgsIDE0MCwgMTcxLCAxODcsCisxNDEsIDE0MiwgMTQzLCAxNDQsIDE0 NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYs CisxNTcsIDE1OCwgMTU5LCAxNjEsIDE2NCwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3Mywg MTc0LCAxNzUsIDIyMywgMTc5LCAxODAsCisxODIsIDE4NCwgMTg1LCAxOTAsIDE5MSwgMTkyLCAx OTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsCisyMDMsIDIw NCwgMjA1LCAyMDYsIDIwNywgMjA4LCAxODEsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQs IDIxNSwgMjE2LCAyMTcsCisyMTgsIDE3NywgMjE5LCAyMjAsIDIyMSwgMjIyLCAxODYsIDI1MSwg MTc2LCAxODMsIDI1MiwgMjUzLCAyNTQsIDE3OCwgMjU1LCAxNjAKK307CisKK0NPTlNUIENIQVIK K3lsaDYyW10gPSB7ICAvKiBJU08gODg1OS04IExhdGluL0hlYnJldyB0byBQQyBDb2RlIFBhZ2Ug ODYyICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDks ICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwg IDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisg MzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQz LCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQs ICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwg IDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3 NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4 LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTks IDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAx MTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEy MiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisxNTgsIDE1OSwgMTYwLCAxNjEsIDE2MiwgMTYz LCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzMsIDE3NiwgMTc3LCAxNzgsCisxNzks IDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAx OTEsIDE5MiwgMTkzLCAxOTQsCisyNTUsIDE5NSwgMTU1LCAxNTYsIDE5NiwgMTU3LCAxOTcsIDE5 OCwgMTk5LCAyMDAsIDIwMSwgMTc0LCAxNzAsIDIwMiwgMjAzLCAyMDQsCisyNDgsIDI0MSwgMjUz LCAyMDYsIDIwNywgMjMwLCAyMDgsIDI0OSwgMjA5LCAyMTAsIDI0NiwgMTc1LCAxNzIsIDE3MSwg MjExLCAyMTIsCisyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAy MjIsIDIyMywgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsCisyMjksIDIzMSwgMjMyLCAyMzMsIDIz NCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyMDUs CisxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwg MTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsCisxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAx NTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMjQ3LCAyNTAsIDI1MSwgMjUyLCAyNTQKK307CisvKgor ICA3LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBERUMgSGVi cmV3LTcgdG8gQ1A4NjIuCisqLworQ09OU1QgQ0hBUgoreWg3NjJbXSA9IHsKKyAgMCwgICAxLCAg IDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEz LCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQs ICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwg IDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0 NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4 LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjks ICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwg IDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5 MiwgIDkzLCAgOTQsICA5NSwKK1VOSywgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcx LCAgNzIsICA3MywgIDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIs ICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAxMjMsIDEyNCwgMTI1LCAx MjYsIDEyNworfTsKKy8qCisgIDgtYml0IHRhYmxlIHByb3ZpZGluZyByZWFkYWJsZSB0cmFuc2xh dGlvbiBmcm9tIENQODYyIHRvIEhlYnJldy03LgorKi8KK0NPTlNUIENIQVIKK3k2Mmg3W10gPSB7 ICAvKiBQQyBDb2RlIFBhZ2UgODYyIHRvIEhlYnJldy03ICovCisgIDAsICAgMSwgICAyLCAgIDMs ICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAg MTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAy NiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3 LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgs ICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAg NjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3 MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgy LCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5Mywg IDk0LCAgOTUsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAg NzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4 NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcs CisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwg MTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAx MTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTksKK307CisvKgorICA3LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVh ZGFibGUgdHJhbnNsYXRpb24gZnJvbSBIZWJyZXctNyB0byBJU08gTGF0aW4vSGVicmV3LgorKi8K K0NPTlNUIENIQVIKK3loN2xoW10gPSB7CisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAg IDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAx NywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgs ICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwg IDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAg NTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYy LCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMs ICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwg IDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisy MDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5 LCAyMjAsIDIyMSwgMjIyLCAyMjMsCisyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAs IDIzMSwgMjMyLCAyMzMsIDIzNCwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcKK307CisvKgorICA4 LWJpdCB0YWJsZSBwcm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBJU08gTGF0aW4v SGVicmV3IHRvIEhlYnJldy03LgorKi8KK0NPTlNUIENIQVIKK3lsaGg3W10gPSB7ICAvKiBMYXRp bi9IZWJyZXcgdG8gSGVicmV3LTcgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAg NiwgICA3LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3 LCAgMTgsICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwg IDI5LCAgMzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAg NDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1 MSwgIDUyLCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIs ICA2MywKKyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3Mywg IDc0LCAgNzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAg ODUsICA4NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA2 NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUs ICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4Niwg IDg3LCAgODgsICA4OSwgIDkwLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKK1VOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5L LCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywKK1VOSywg VU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssIFVOSywKKyA5NiwgIDk3LCAgOTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAz LCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwKKzExMiwgMTEzLCAxMTQs IDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSworfTsKKyNlbmRpZiAvKiBIRUJSRVcgKi8KKworI2lmZGVmIEdSRUVLCisvKgorICA4 LWJpdCBUYWJsZXMgcHJvdmlkaW5nIGludmVydGlibGUgdHJhbnNsYXRpb24gYmV0d2VlbiBMYXRp bi9HcmVlayBhbmQgQ1A4NjkuCisqLworQ09OU1QgQ0hBUgoreWxnNjlbXSA9IHsgIC8qIElTTyA4 ODU5LTcgTGF0aW4vR3JlZWsgdG8gUEMgQ29kZSBQYWdlIDg2OSAqLworICAwLCAgIDEsICAgMiwg ICAzLCAgIDQsICAgNSwgICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAx NCwgIDE1LAorIDE2LCAgMTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1 LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYs ICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAor IDQ4LCAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1 OSwgIDYwLCAgNjEsICA2MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcw LCAgNzEsICA3MiwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEs ICA4MiwgIDgzLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAg OTMsICA5NCwgIDk1LAorIDk2LCAgOTcsICA5OCwgIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEw NCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLAorMTEyLCAxMTMsIDExNCwgMTE1 LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwg MTI3LAorMTM1LCAxNDcsIDE0OCwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4NSwgMTg2LCAx ODcsIDE4OCwgMTkxLCAxOTIsIDE5MywgMTk0LAorMTk1LCAxOTYsIDE5NywgMjAwLCAyMDEsIDIw MiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMywgMjU0LAorMjU1 LCAxMzksIDE0MCwgMTU2LCAxMjgsIDEyOSwgMTM4LCAyNDUsIDI0OSwgMTUxLCAxMzAsIDE3NCwg MTM3LCAyNDAsIDEzMSwgMTQyLAorMjQ4LCAyNDEsIDE1MywgMTU0LCAyMzksIDI0NywgMTM0LCAx MzYsIDE0MSwgMTQzLCAxNDQsIDE3NSwgMTQ2LCAxNzEsIDE0OSwgMTUyLAorMTYxLCAxNjQsIDE2 NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MiwgMTczLCAxODEsIDE4MiwgMTgzLCAxODQs IDE4OSwgMTkwLAorMTk4LCAxOTksIDEzMiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwg MjEzLCAxNDUsIDE1MCwgMTU1LCAxNTcsIDE1OCwgMTU5LAorMjUyLCAyMTQsIDIxNSwgMjE2LCAy MjEsIDIyMiwgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMz LAorMjM0LCAyMzUsIDIzNywgMjM2LCAyMzgsIDI0MiwgMjQzLCAyNDQsIDI0NiwgMjUwLCAxNjAs IDI1MSwgMTYyLCAxNjMsIDI1MywgMTMzCit9OworCitDT05TVCBDSEFSCit5NjlsZ1tdID0geyAg LyogUEMgQ29kZSBQYWdlIDg2OSB0byBJU08gODg1OS03IExhdGluL0dyZWVrICovCisgIDAsICAg MSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIs ICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIxLCAgMjIsICAyMywg IDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIsICAzMywgIDM0LCAg MzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ2 LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTcs ICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwg IDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzksCisg ODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwgIDkx LCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIs IDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywg MTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEy NSwgMTI2LCAxMjcsCisxNjQsIDE2NSwgMTcwLCAxNzQsIDIxMCwgMjU1LCAxODIsIDEyOCwgMTgz LCAxNzIsIDE2NiwgMTYxLCAxNjIsIDE4NCwgMTc1LCAxODUsCisxODYsIDIxOCwgMTg4LCAxMjks IDEzMCwgMTkwLCAyMTksIDE2OSwgMTkxLCAxNzgsIDE3OSwgMjIwLCAxNjMsIDIyMSwgMjIyLCAy MjMsCisyNTAsIDE5MiwgMjUyLCAyNTMsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5 OSwgMTg5LCAyMDAsIDIwMSwgMTcxLCAxODcsCisxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMjAy LCAyMDMsIDIwNCwgMjA1LCAxMzYsIDEzNywgMTM4LCAxMzksIDIwNiwgMjA3LCAxNDAsCisxNDEs IDE0MiwgMTQzLCAxNDQsIDE0NSwgMTQ2LCAyMDgsIDIwOSwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAx NTEsIDE1MiwgMTUzLCAyMTEsCisyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMjUsIDIy NiwgMjI3LCAxNTQsIDE1NSwgMTU2LCAxNTcsIDIyOCwgMjI5LCAxNTgsCisyMzAsIDIzMSwgMjMy LCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDMsIDI0Miwg MjQ0LCAxODAsCisxNzMsIDE3NywgMjQ1LCAyNDYsIDI0NywgMTY3LCAyNDgsIDE4MSwgMTc2LCAx NjgsIDI0OSwgMjUxLCAyMjQsIDI1NCwgMTU5LCAxNjAKK307CisvKgorICA3LWJpdCB0YWJsZSBw cm92aWRpbmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBFTE9UIDkyNyB0byBDUDg2OS4KKyov CitDT05TVCBDSEFSCit5ZWc2OVtdID0geworICAwLCAgIDEsICAgMiwgICAzLCAgIDQsICAgNSwg ICA2LCAgIDcsICAgOCwgICA5LCAgMTAsICAxMSwgIDEyLCAgMTMsICAxNCwgIDE1LAorIDE2LCAg MTcsICAxOCwgIDE5LCAgMjAsICAyMSwgIDIyLCAgMjMsICAyNCwgIDI1LCAgMjYsICAyNywgIDI4 LCAgMjksICAzMCwgIDMxLAorIDMyLCAgMzMsICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzks ICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LAorIDQ4LCAgNDksICA1MCwg IDUxLCAgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsICA2 MiwgIDYzLAorIDY0LCAgNjUsICA2NiwgIDY3LCAgNjgsICA2OSwgIDcwLCAgNzEsICA3MiwgIDcz LCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LAorIDgwLCAgODEsICA4MiwgIDgzLCAgODQs ICA4NSwgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LAor IDk2LCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MiwgMTczLCAxODEsIDE4 MiwgMTgzLCAxODQsIDE4OSwgMTkwLAorMTk4LCAxOTksIDIwNywgMjA4LCAyMDksIDIxMCwgMjEx LCAyMTIsIDIxMywgIDMyLCAgMzIsICAyMywgMTI0LCAxMjUsIDEyNiwgMTI3Cit9OworLyoKKyAg OC1iaXQgdGFibGUgcHJvdmlkaW5nIHJlYWRhYmxlIHRyYW5zbGF0aW9uIGZyb20gQ1A4NjkgdG8g RUxPVCA5MjcuCisqLworQ09OU1QgQ0hBUgoreTY5ZWdbXSA9IHsgIC8qIFBDIENvZGUgUGFnZSA4 NjkgdG8gRUxPVCA5MjcgKi8KKyAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA3 LCAgIDgsICAgOSwgIDEwLCAgMTEsICAxMiwgIDEzLCAgMTQsICAxNSwKKyAxNiwgIDE3LCAgMTgs ICAxOSwgIDIwLCAgMjEsICAyMiwgIDIzLCAgMjQsICAyNSwgIDI2LCAgMjcsICAyOCwgIDI5LCAg MzAsICAzMSwKKyAzMiwgIDMzLCAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0 MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywKKyA0OCwgIDQ5LCAgNTAsICA1MSwgIDUy LCAgNTMsICA1NCwgIDU1LCAgNTYsICA1NywgIDU4LCAgNTksICA2MCwgIDYxLCAgNjIsICA2MywK KyA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAg NzUsICA3NiwgIDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4 NiwgIDg3LCAgODgsICA4OSwgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTQsICA5NSwKKyA5NiwgIDY1 LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwgIDcxLCAgNzIsICA3MywgIDc0LCAgNzUsICA3Niwg IDc3LCAgNzgsICA3OSwKKyA4MCwgIDgxLCAgODIsICA4MywgIDg0LCAgODUsICA4NiwgIDg3LCAg ODgsICA4OSwgIDkwLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywKK1VOSywgVU5LLCBVTkssIFVO SywgVU5LLCBVTkssICA5NywgVU5LLCAgNDYsIFVOSywgMTI0LCAgMzksICAzOSwgMTAxLCAgNDUs IDEwMywKKzEwNSwgMTA1LCAxMTEsIFVOSywgVU5LLCAxMTYsIDExNiwgVU5LLCAxMjAsICA1MCwg IDUxLCAgOTcsIFVOSywgMTAxLCAxMDMsIDEwNSwKKzEwNSwgMTA1LCAxMTEsIDExNiwgIDk3LCAg OTgsICA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCBVTkssIDEwNCwgMTA1LCAgMzQsICAzNCwKK1VO SywgVU5LLCBVTkssIFVOSywgVU5LLCAxMDYsIDEwNywgMTA4LCAxMDksIFVOSywgVU5LLCBVTkss IFVOSywgMTEwLCAxMTEsIFVOSywKK1VOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIDExMiwg MTEzLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIDExNCwKKzExNSwgMTE2LCAx MTcsIDExOCwgMTE5LCAxMjAsICA5NywgIDk4LCAgOTksIFVOSywgVU5LLCBVTkssIFVOSywgMTAw LCAxMDEsIFVOSywKKzEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAs IDExMSwgMTEyLCAxMTMsIDExNCwgMTE0LCAxMTUsICAzOSwKKyA0NSwgVU5LLCAxMTYsIDExNywg MTE4LCBVTkssIDExOSwgVU5LLCBVTkssIFVOSywgMTIwLCAxMTYsIDExNiwgMTIwLCBVTkssICAz MgorCit9OworLyoKKyAgNy1iaXQgdGFibGUgcHJvdmlkaW5nIHJlYWRhYmxlIHRyYW5zbGF0aW9u IGZyb20gRUxPVCA5MjcgdG8gSVNPIExhdGluL0dyZWVrLgorKi8KK0NPTlNUIENIQVIKK3llZ2xn W10gPSB7CisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDks ICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwg IDIxLCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisg MzIsICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQz LCAgNDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQs ICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwg IDY2LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3 NywgIDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4 LCAgODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsIDE5MywgMTk0LCAxOTUs IDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAy MDcsCisyMDgsIDIwOSwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAgMzIsICAz MiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcKK307CisvKgorICA4LWJpdCB0YWJsZSBwcm92aWRp bmcgcmVhZGFibGUgdHJhbnNsYXRpb24gZnJvbSBJU08gTGF0aW4vR3JlZWsgdG8gRUxPVCA5Mjcu CisqLworQ09OU1QgQ0hBUgoreWxnZWdbXSA9IHsgIC8qIExhdGluL0dyZWVrIHRvIEVMT1QgOTI3 ICovCisgIDAsICAgMSwgICAyLCAgIDMsICAgNCwgICA1LCAgIDYsICAgNywgICA4LCAgIDksICAx MCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsCisgMTYsICAxNywgIDE4LCAgMTksICAyMCwgIDIx LCAgMjIsICAyMywgIDI0LCAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsCisgMzIs ICAzMywgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsICA0MiwgIDQzLCAg NDQsICA0NSwgIDQ2LCAgNDcsCisgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsICA1 NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsCisgNjQsICA2NSwgIDY2 LCAgNjcsICA2OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3Nywg IDc4LCAgNzksCisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAg ODksICA5MCwgIDkxLCAgOTIsICA5MywgIDk0LCAgOTUsCisgOTYsICA2NSwgIDY2LCAgNjcsICA2 OCwgIDY5LCAgNzAsICA3MSwgIDcyLCAgNzMsICA3NCwgIDc1LCAgNzYsICA3NywgIDc4LCAgNzks CisgODAsICA4MSwgIDgyLCAgODMsICA4NCwgIDg1LCAgODYsICA4NywgIDg4LCAgODksICA5MCwg MTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCitVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBV TkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssCitVTkssIFVO SywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkssIFVOSywgVU5LLCBVTkss IFVOSywgVU5LLCBVTkssCisgMzIsICAzOSwgIDM5LCBVTkssIFVOSywgVU5LLCAxMjQsIFVOSywg IDM0LCBVTkssIFVOSywgIDM0LCBVTkssICA0NSwgVU5LLCAgNDUsCitVTkssIFVOSywgIDUwLCAg NTEsICAzOSwgVU5LLCAgOTcsICA0NiwgMTAxLCAxMDMsIDEwNSwgIDM0LCAxMTEsIFVOSywgMTE2 LCAxMjAsCitVTkssICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUs IDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgVU5LLCAxMTQsIDExNSwg MTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEwNSwgMTE2LCAgOTcsIDEwMSwgMTAzLCAxMDUsCisx MTYsICA5NywgIDk4LCAgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3 LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisxMTIsIDExMywgMTE0LCAxMTQsIDExNSwgMTE2LCAxMTcs IDExOCwgMTE5LCAxMjAsIDEwNSwgMTE2LCAxMTEsIDExNiwgMTIwLCBVTksKK307CisjZW5kaWYg LyogR1JFRUsgKi8KKworLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zIC4uLiAqLworCitDSEFSCQkJ CQkvKiBUaGUgaWRlbnRpdHkgZnVuY3Rpb24uLi4gKi8KKyNpZmRlZiBDS19BTlNJQworaWRlbnQo Q0hBUiBjKQkJCQkvKiAobm8gbG9uZ2VyIHVzZWQpICovCisjZWxzZQoraWRlbnQoYykgQ0hBUiBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIGlkZW50ICovCisgICAgcmV0dXJuKGMpOwkJ CQkvKiBJbnN0ZWFkLCBlbnRlciBOVUxMIGluIHRoZSAgKi8KK30JCQkJCS8qIHRhYmxlIG9mIGZ1 bmN0aW9ucyB0byBhdm9pZCAqLworCQkJCQkvKiBuZWVkbGVzcyBmdW5jdGlvbiBjYWxscy4gICAg Ki8KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGVmdDEyOChDSEFSIGMpCisjZWxzZQoreGxl ZnQxMjgoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsZWZ0MTI4ICov CisgICAgcmV0dXJuKChjIDwgMTI4KSA/IGMgOiAnPycpOworfQorCitDSEFSCisjaWZkZWYgQ0tf QU5TSUMKK3hsZWZ0MTYwKENIQVIgYykKKyNlbHNlCit4bGVmdDE2MChjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxlZnQxNjAgKi8KKyAgICByZXR1cm4oKGMgPCAxNjAp ID8gYyA6ICc/Jyk7Cit9CisKKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDFhcyhDSEFSIGMp CisjZWxzZQoreGwxYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhs MWFzICovIAkJCQkvKiBMYXRpbi0xIHRvIFVTIEFTQ0lJLi4uICovCisgICAgc3dpdGNoKGxhbmdz W2xhbmd1YWdlXS5pZCkgeworCisgICAgICBjYXNlIExfRFVUQ0g6CisJaWYgKGMgPT0gMjU1KSB7 CQkJLyogRHV0Y2ggdW1sYXV0LXkgKi8KKwkgICAgem1zdHVmZignaicpOwkJLyogYmVjb21lcyBp aiAqLworCSAgICByZXR1cm4oJ2knKTsKKwl9IGVsc2UgcmV0dXJuKHlsMWFzW2NdKTsJLyogYWxs IG90aGVycyBieSB0aGUgYm9vayAqLworCisgICAgICBjYXNlIExfR0VSTUFOOgorCXN3aXRjaCAo YykgewkJCS8qIEdlcm1hbiwgc3BlY2lhbCBydWxlcy4gKi8KKwkgIGNhc2UgMTk2OgkJCS8qIHVt bGF1dC1BIC0+IEFlICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdBJyk7CisJ ICBjYXNlIDIxNDoJCQkvKiB1bWxhdXQtTyAtPiBPZSAqLworCSAgICB6bXN0dWZmKCdlJyk7CisJ ICAgIHJldHVybignTycpOworCSAgY2FzZSAyMjA6CQkJLyogdW1sYXV0LVUgLT4gVWUgKi8KKwkg ICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ1UnKTsKKwkgIGNhc2UgMjI4OgkJCS8qIHVt bGF1dC1hIC0+IGFlICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdhJyk7CisJ ICBjYXNlIDI0NjoJCQkvKiB1bWxhdXQtbyAtPiBvZSAqLworCSAgICB6bXN0dWZmKCdlJyk7CisJ ICAgIHJldHVybignbycpOworCSAgY2FzZSAyNTI6CQkJLyogdW1sYXV0LXUgLT4gdWUgKi8KKwkg ICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ3UnKTsKKwkgIGNhc2UgMjIzOgkJCS8qIGVz cy16ZXQgLT4gc3MgKi8KKwkgICAgem1zdHVmZigncycpOworCSAgICByZXR1cm4oJ3MnKTsKKwkg IGRlZmF1bHQ6IHJldHVybih5bDFhc1tjXSk7CS8qIGFsbCBvdGhlcnMgYnkgdGhlIGJvb2sgKi8K Kwl9CisgICAgICBjYXNlIExfREFOSVNIOgorICAgICAgY2FzZSBMX0ZJTk5JU0g6CisgICAgICBj YXNlIExfTk9SV0VHSUFOOgorICAgICAgY2FzZSBMX1NXRURJU0g6CisJc3dpdGNoIChjKSB7CQkJ LyogU2NhbmRhbmF2aWFuIGxhbmd1YWdlcy4gKi8KKwkgIGNhc2UgMTk2OgkJCS8qIHVtbGF1dC1B IC0+IEFlICovCisgICAgICAgICAgY2FzZSAxOTg6CQkJLyogQUUgbGlnYXR1cmUgYWxzbyAtPiBB ZSAqLworCSAgICB6bXN0dWZmKCdlJyk7CisJICAgIHJldHVybignQScpOworCSAgY2FzZSAyMTQ6 CQkJLyogdW1sYXV0LU8gLT4gT2UgKi8KKwkgIGNhc2UgMjE2OgkJCS8qIE8tc2xhc2ggLT4gT2Ug Ki8KKwkgICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ08nKTsKKwkgIGNhc2UgMjIwOgkJ CS8qIHVtbGF1dC1VIC0+IFVlICovCisJICAvKiAgcmV0dXJuKCdZJyk7IHJlcGxhY2VkIGJ5ICJV ZSIgYnkgcG9wdWxhciBkZW1hbmQuICovCisgICAgICAgICAgLyogIFkgZm9yIFVtbGF1dC1VIGlz IG9ubHkgdXNlZCBpbiBHZXJtYW4gbmFtZXMuICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAg cmV0dXJuKCdVJyk7CisJICBjYXNlIDIyODoJCQkvKiB1bWxhdXQtYSAtPiBhZSAqLworICAgICAg ICAgIGNhc2UgMjMwOgkJCS8qIGRpdHRvIGZvciBhZSBsaWdhdHVyZSAqLworCSAgICB6bXN0dWZm KCdlJyk7CisJICAgIHJldHVybignYScpOworCSAgY2FzZSAyNDY6CQkJLyogdW1sYXV0LW8gLT4g b2UgKi8KKwkgIGNhc2UgMjQ4OgkJCS8qIG8tc2xhc2ggLT4gb2UgKi8KKwkgICAgem1zdHVmZign ZScpOworCSAgICByZXR1cm4oJ28nKTsKKwkgIGNhc2UgMjUyOgkJCS8qIHVtbGF1dC11IC0+IHVl ICovCisJICAvKiAgcmV0dXJuKCd5Jyk7IHJlcGxhY2VkIGJ5ICJ1ZSIgYnkgcG9wdWxhciBkZW1h bmQuICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCd1Jyk7CisJICBjYXNlIDE5 NzoJCQkvKiBBLXJpbmcgLT4gQWEgKi8KKwkgICAgem1zdHVmZignYScpOworCSAgICByZXR1cm4o J0EnKTsKKyAgICAgICAgICBjYXNlIDIyOToJCQkvKiBhLXJpbmcgLT4gYWEgKi8KKwkgICAgem1z dHVmZignYScpOworCSAgICByZXR1cm4oJ2EnKTsKKwkgIGRlZmF1bHQ6IHJldHVybih5bDFhc1tj XSk7CS8qIEFsbCBvdGhlcnMgYnkgdGhlIGJvb2sgKi8KKwl9CisgICAgICBjYXNlIExfSUNFTEFO RElDOgkJCS8qIEljZWxhbmRpYy4gKi8KKwlzd2l0Y2ggKGMpIHsKKwkgIGNhc2UgMTk4OgkJCS8q IHVwcGVyY2FzZSBBRSAtPiBBRSAqLworCSAgICB6bXN0dWZmKCdlJyk7CisJICAgIHJldHVybign QScpOworCSAgY2FzZSAyMDg6CQkJLyogdXBwZXJjYXNlIEV0aCAtPiBEICovCisJICAgIHJldHVy bignRCcpOworCSAgY2FzZSAyMTQ6CQkJLyogdXBwZXJjYXNlIE8tZGlhZXJlc2lzIC0+IE9lICov CisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdPJyk7CisJICBjYXNlIDIyMjoJCQkv KiB1cHBlcmNhc2UgVGhvcm4gLT4gVGggKi8KKwkgICAgem1zdHVmZignaCcpOworCSAgICByZXR1 cm4oJ1QnKTsKKwkgIGNhc2UgMjMwOgkJCS8qIGxvd2VyY2FzZSBhZSAtPiBhZSAqLworCSAgICB6 bXN0dWZmKCdlJyk7CisJICAgIHJldHVybignYScpOworCSAgY2FzZSAyNDA6CQkJLyogbG93ZXJj YXNlIEV0aCAtPiBkICovCisJICAgIHJldHVybignZCcpOworCSAgY2FzZSAyNDY6CQkJLyogbG93 ZXJjYXNlIE8tZGlhZXJlc2lzIC0+IG9lICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0 dXJuKCdvJyk7CisJICBjYXNlIDI1NDoJCQkvKiBsb3dlcmNhc2UgVGhvcm4gLT4gdGggKi8KKwkg ICAgem1zdHVmZignaCcpOworCSAgICByZXR1cm4oJ3QnKTsKKwkgIGRlZmF1bHQ6IHJldHVybih5 bDFhc1tjXSk7CS8qIEFsbCBvdGhlcnMgYnkgdGhlIGJvb2sgKi8KKwl9CisgICAgICBkZWZhdWx0 OgorCXJldHVybih5bDFhc1tjXSk7CQkvKiBOb25lIG9mIHRoZSBhYm92ZSwgYnkgdGhlIHRhYmxl LiAqLworICAgIH0KK30KKworQ0hBUgkJCQkJLyogQ1AxMjUyIHRvIEFTQ0lJICovCisjaWZkZWYg Q0tfQU5TSUMKK3h3MWFzKENIQVIgYykKKyNlbHNlCit4dzFhcyhjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sgLyogeHcxYXMgKi8KKyAgICBzd2l0Y2goYykgewkJCQkvKiBNaWNy b3NvZnQgbmFtZS4uLiAqLworICAgICAgY2FzZSAweDgwOiByZXR1cm4oJz8nKTsJCS8qIEV1cm8g U2lnbiAqLworICAgICAgY2FzZSAweDgyOiByZXR1cm4oJ1wwNDcnKTsJLyogU2luZ2xlIExvdy05 IFF1b3RhdGlvbiBNYXJrICovCisgICAgICBjYXNlIDB4ODM6IHJldHVybignZicpOwkJLyogTGF0 aW4gU21hbGwgTGV0dGVyIGYgd2l0aCBIb29rICovCisgICAgICBjYXNlIDB4ODQ6IHJldHVybign IicpOwkJLyogRG91YmxlIGxvdy05IFF1b3RhdGlvbiBNYXJrICovCisgICAgICBjYXNlIDB4ODU6 IHJldHVybignLScpOwkJLyogSG9yaXpvbnRhbCBFbGxpcHNpcyAqLworICAgICAgY2FzZSAweDg2 OiByZXR1cm4oJysnKTsJCS8qIERhZ2dlciAqLworICAgICAgY2FzZSAweDg3OiByZXR1cm4oJysn KTsJCS8qIERvdWJsZSBEYWdnZXIgKi8KKyAgICAgIGNhc2UgMHg4ODogcmV0dXJuKCdeJyk7CQkv KiBNb2RpZmllciBMZXR0ZXIgQ2lyY3VtZmxleCBBY2NlbnQgKi8KKyAgICAgIGNhc2UgMHg4OTog cmV0dXJuKCc/Jyk7CQkvKiBQZXIgTWlsbGUgU2lnbiAqLworICAgICAgY2FzZSAweDhBOiByZXR1 cm4oJ1MnKTsJCS8qIExhdGluIENhcGl0YWwgTGV0dGVyIFMgd2l0aCBDYXJvbiAqLworICAgICAg Y2FzZSAweDhCOiByZXR1cm4oJzwnKTsJCS8qIFNpbmdsZSBMZWZ0IEFuZ2xlIFF1b3RhdGlvbiBN YXJrICovCisgICAgICBjYXNlIDB4OEM6IHJldHVybignTycpOwkJLyogTGF0aW4gQ2FwaXRhbCBM aWdhdHVyZSBPRSAqLworICAgICAgY2FzZSAweDhFOiByZXR1cm4oJ1onKTsJCS8qIExhdGluIENh cGl0YWwgTGV0dGVyIFogd2l0aCBDYXJvbiAqLworICAgICAgY2FzZSAweDkxOiByZXR1cm4oJ1ww NDcnKTsJLyogTGVmdCBTaW5nbGUgUXVvdGF0aW9uIE1hcmsgKi8KKyAgICAgIGNhc2UgMHg5Mjog cmV0dXJuKCdcMDQ3Jyk7CS8qIFJpZ2h0IFNpbmdsZSBRdW90YXRpb24gTWFyayAqLworICAgICAg Y2FzZSAweDkzOiByZXR1cm4oJyInKTsJCS8qIExlZnQgRG91YmxlIFF1b3RhdGlvbiBNYXJrICov CisgICAgICBjYXNlIDB4OTQ6IHJldHVybignIicpOwkJLyogUmlnaHQgRG91YmxlIFF1b3RhdGlv biBNYXJrICovCisgICAgICBjYXNlIDB4OTU6IHJldHVybignLicpOwkJLyogQnVsbGV0ICovCisg ICAgICBjYXNlIDB4OTY6IHJldHVybignLScpOwkJLyogRW4gRGFzaCAqLworICAgICAgY2FzZSAw eDk3OiByZXR1cm4oJy0nKTsJCS8qIEVtIERhc2ggKi8KKyAgICAgIGNhc2UgMHg5ODogcmV0dXJu KCd+Jyk7CQkvKiBTbWFsbCBUaWxkZSAqLworICAgICAgY2FzZSAweDk5OiByZXR1cm4oJ1QnKTsJ CS8qIFRyYWRlIE1hcmsgU2lnbiAqLworICAgICAgY2FzZSAweDlBOiByZXR1cm4oJ3MnKTsJCS8q IExhdGluIFNtYWxsIExldHRlciBzIHdpdGggQ2Fyb24gKi8KKyAgICAgIGNhc2UgMHg5QjogcmV0 dXJuKCc+Jyk7CQkvKiBTaW5nbGUgUmlnaHQgQW5nbGUgUXVvdGF0aW9uIE1hcmsgKi8KKyAgICAg IGNhc2UgMHg5QzogcmV0dXJuKCdvJyk7CQkvKiBMYXRpbiBTbWFsbCBMaWdhdHVyZSBPRSAqLwor ICAgICAgY2FzZSAweDlFOiByZXR1cm4oJ3onKTsJCS8qIExhdGluIFNtYWxsIExldHRlciB6IHdp dGggQ2Fyb24gKi8KKyAgICAgIGNhc2UgMHg5RjogcmV0dXJuKCdZJyk7CQkvKiBMYXRpbiBDYXBp dGFsIExldHRlciBZIERpYWVyZXNpcyAqLworICAgICAgZGVmYXVsdDoKKwlpZiAoYyA+IDB4ODAg JiYgYyA8IDB4YTApCisJICByZXR1cm4oJz8nKTsKKwllbHNlCisJICByZXR1cm4oeWwxYXNbY10p OworICAgIH0KK30KKworQ0hBUgkJCQkJLyogQ1AxMjUyIHRvIExhdGluLTEgKi8KKyNpZmRlZiBD S19BTlNJQworeHcxbDEoQ0hBUiBjKQorI2Vsc2UKK3h3MWwxKGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeyAvKiB4dzFsMSAqLworICAgIGlmIChjID09IDB4OTUpIHJldHVybigw eGI3KTsJLyogTWlkZGxlIGRvdCAqLworICAgIHJldHVybigoYyA8IDE2MCkgPyB4dzFhcyhjKSA6 IGMpOworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0xIHRvIEdlcm1hbiAqLworI2lmZGVmIENLX0FO U0lDCit4bDFnZShDSEFSIGMpCisjZWxzZQoreGwxZ2UoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhsMWdlICovCisgICAgcmV0dXJuKHlsMWdlW2NdKTsKK30KKworQ0hB UgkJCQkJLyogR2VybWFuIHRvIExhdGluLTEgKi8KKyNpZmRlZiBDS19BTlNJQworeGdlbDEoQ0hB UiBjKQorI2Vsc2UKK3hnZWwxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAv KiB4Z2VsMSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHJl dHVybih5Z2VsMVtjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGdlYXMoQ0hBUiBj KQorI2Vsc2UKK3hnZWFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4 Z2VhcyAqLwkJCQkvKiBHZXJtYW4gSVNPIDY0NiB0byBBU0NJSSAqLworICAgIGlmIChjICYgMHg4 MCkKKyAgICAgIHJldHVybihVTkspOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSA5MToJ CQkJLyogdW1sYXV0LUEgLT4gQWUgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdBJyk7Cisg ICAgICBjYXNlIDkyOgkJCQkvKiB1bWxhdXQtTyAtPiBPZSAqLworCXptc3R1ZmYoJ2UnKTsKKwly ZXR1cm4oJ08nKTsKKyAgICAgIGNhc2UgOTM6CQkJCS8qIHVtbGF1dC1VIC0+IFVlICovCisJem1z dHVmZignZScpOworCXJldHVybignVScpOworICAgICAgY2FzZSAxMjM6CQkJCS8qIHVtbGF1dC1h IC0+IGFlICovCisJem1zdHVmZignZScpOworCXJldHVybignYScpOworICAgICAgY2FzZSAxMjQ6 CQkJCS8qIHVtbGF1dC1vIC0+IG9lICovCisJem1zdHVmZignZScpOworCXJldHVybignbycpOwor ICAgICAgY2FzZSAxMjU6CQkJCS8qIHVtbGF1dC11IC0+IHVlICovCisJem1zdHVmZignZScpOwor CXJldHVybigndScpOworICAgICAgY2FzZSAxMjY6CQkJCS8qIGVzcy16ZXQgLT4gc3MgKi8KKwl6 bXN0dWZmKCdzJyk7CisJcmV0dXJuKCdzJyk7CisgICAgICBkZWZhdWx0OiAgcmV0dXJuKGMpOwkJ LyogYWxsIG90aGVycyBzdGF5IHRoZSBzYW1lICovCisgICAgfQorfQorCitDSEFSCisjaWZkZWYg Q0tfQU5TSUMKK3hsMXcxKENIQVIgYykKKyNlbHNlCit4bDF3MShjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxdzEgKi8JCQkJLyogTGF0aW4tMSB0byBDUDEyNTIgKFdp bmRvd3MgTDEpICovCisgICAgaWYgKGMgPiAxMjcgJiYgYyA8IDE2MCkKKyAgICAgIHJldHVybihV TkspOworICAgIGVsc2UKKyAgICAgIHJldHVybihjKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FO U0lDCit4ZHVhcyhDSEFSIGMpCisjZWxzZQoreGR1YXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhkdWFzICovCQkJCS8qIER1dGNoIElTTyA2NDYgdG8gVVMgQVNDSUkg Ki8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBzd2l0Y2ggKGMp IHsKKyAgICAgIGNhc2UgNjQ6ICByZXR1cm4oVU5LKTsJCS8qIDMvNCAqLworICAgICAgY2FzZSA5 MToJCQkJLyogeS1kaWFlcmVzaXMgKi8KKwl6bXN0dWZmKCdqJyk7CisJcmV0dXJuKCdpJyk7Cisg ICAgICBjYXNlIDkyOiAgcmV0dXJuKFVOSyk7CQkvKiAxLzIgKi8KKyAgICAgIGNhc2UgOTM6ICBy ZXR1cm4oMTI0KTsJCS8qIHZlcnRpY2FsIGJhciAqLworICAgICAgY2FzZSAxMjM6IHJldHVybigz NCk7CQkvKiBkaWFlcmVzaXMgKi8KKyAgICAgIGNhc2UgMTI0OiByZXR1cm4oVU5LKTsJCS8qIEZs b3JpbiAqLworICAgICAgY2FzZSAxMjU6IHJldHVybihVTkspOwkJLyogMS80ICovCisgICAgICBj YXNlIDEyNjogcmV0dXJuKDM5KTsJCS8qIEFwb3N0cm9waGUgKi8KKyAgICAgIGRlZmF1bHQ6ICBy ZXR1cm4oYyk7CisgICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hmaWFzKENIQVIg YykKKyNlbHNlCit4ZmlhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eGZpYXMgKi8JCQkJLyogRmlubmlzaCBJU08gNjQ2IHRvIFVTIEFTQ0lJICovCisgICAgaWYgKGMg JiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNl IDkxOgkJCQkvKiBBLWRpYWVyZXNpcyAqLworCXptc3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ0EnKTsK KyAgICAgIGNhc2UgOTI6CQkJCS8qIE8tZGlhZXJlc2lzICovCisJem1zdHVmZignZScpOworCXJl dHVybignTycpOworICAgICAgY2FzZSA5MzoJCQkJLyogQS1yaW5nICovCisJem1zdHVmZignYScp OworCXJldHVybignQScpOworICAgICAgY2FzZSA5NDoJCQkJLyogVS1kaWFlcmVzaXMgKi8KKwkv KiByZXR1cm4oJ1knKTsgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdVJyk7CisgICAgICBj YXNlIDk2OgkJCQkvKiBlLWFjdXRlICovCisJcmV0dXJuKCdlJyk7CisgICAgICBjYXNlIDEyMzoJ CQkJLyogYS1kaWFlcmVzaXMgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdhJyk7CisgICAg ICBjYXNlIDEyNDoJCQkJLyogby1kaWFlcmVzaXMgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJu KCdvJyk7CisgICAgICBjYXNlIDEyNToJCQkJLyogYS1yaW5nICovCisJem1zdHVmZignYScpOwor CXJldHVybignYScpOworICAgICAgY2FzZSAxMjY6CQkJCS8qIHUtZGlhZXJlc2lzICovCisJLyog cmV0dXJuKCd5Jyk7ICovCisJem1zdHVmZignZScpOworCXJldHVybignVScpOworICAgICAgZGVm YXVsdDoKKwlyZXR1cm4oYyk7CisgICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hm cmFzKENIQVIgYykKKyNlbHNlCit4ZnJhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sgLyogeGZyYXMgKi8JCQkJLyogRnJlbmNoIElTTyA2NDYgdG8gVVMgQVNDSUkgKi8KKyAg ICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAg ICAgIGNhc2UgNjQ6ICByZXR1cm4oOTcpOwkJLyogYSBncmF2ZSAqLworICAgICAgY2FzZSA5MTog IHJldHVybihVTkspOwkJLyogZGVncmVlIHNpZ24gKi8KKyAgICAgIGNhc2UgOTI6ICByZXR1cm4o OTkpOwkJLyogYyBjZWRpbGxhICovCisgICAgICBjYXNlIDkzOiAgcmV0dXJuKFVOSyk7CQkvKiBw YXJhZ3JhcGggc2lnbiAqLworICAgICAgY2FzZSAxMjM6IHJldHVybigxMDEpOwkJLyogZSBhY3V0 ZSAqLworICAgICAgY2FzZSAxMjQ6IHJldHVybigxMTcpOwkJLyogdSBncmF2ZSAqLworICAgICAg Y2FzZSAxMjU6IHJldHVybigxMDEpOwkJLyogZSBncmF2ZSAqLworICAgICAgY2FzZSAxMjY6IHJl dHVybigzNCk7CQkvKiBkaWFlcmVzaXMgKi8KKyAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7Cisg ICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hmY2FzKENIQVIgYykKKyNlbHNlCit4 ZmNhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGZjYXMgKi8JCQkJ LyogRnJlbmNoIENhbmFkaWFuIElTTyA2NDYgdG8gQVNDSUkgKi8KKyAgICBpZiAoYyAmIDB4ODAp CisgICAgICByZXR1cm4oVU5LKTsKKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgNjQ6ICBy ZXR1cm4oJ2EnKTsJCS8qIGEgZ3JhdmUgKi8KKyAgICAgIGNhc2UgOTE6ICByZXR1cm4oJ2EnKTsJ CS8qIGEgY2lyY3VtZmxleCAqLworICAgICAgY2FzZSA5MjogIHJldHVybignYycpOwkJLyogYyBj ZWRpbGxhICovCisgICAgICBjYXNlIDkzOiAgcmV0dXJuKCdlJyk7CQkvKiBlIGNpcmN1bWZsZXgg Ki8KKyAgICAgIGNhc2UgOTQ6ICByZXR1cm4oJ2knKTsJCS8qIGkgY2lyY3VtZmxleCAqLworICAg ICAgY2FzZSA5NjogIHJldHVybignbycpOwkJLyogbyBjaXJjdW1mbGV4ICovCisgICAgICBjYXNl IDEyMzogcmV0dXJuKCdlJyk7CQkvKiBlIGFjdXRlICovCisgICAgICBjYXNlIDEyNDogcmV0dXJu KCd1Jyk7CQkvKiB1IGdyYXZlICovCisgICAgICBjYXNlIDEyNTogcmV0dXJuKCdlJyk7CQkvKiBl IGdyYXZlICovCisgICAgICBjYXNlIDEyNjogcmV0dXJuKCd1Jyk7CQkvKiB1IGNpcmN1bWZsZXgg Ki8KKyAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7CisgICAgfQorfQorCitDSEFSCisjaWZkZWYg Q0tfQU5TSUMKK3hpdGFzKENIQVIgYykKKyNlbHNlCit4aXRhcyhjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sgLyogeGl0YXMgKi8JCQkJLyogSXRhbGlhbiBJU08gNjQ2IHRvIEFT Q0lJICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgc3dpdGNo IChjKSB7CisgICAgICBjYXNlIDkxOiAgcmV0dXJuKFVOSyk7CQkvKiBkZWdyZWUgKi8KKyAgICAg IGNhc2UgOTI6ICByZXR1cm4oJ2MnKTsJCS8qIGMgY2VkaWxsYSAqLworICAgICAgY2FzZSA5Mzog IHJldHVybignZScpOwkJLyogZSBhY3V0ZSAqLworICAgICAgY2FzZSA5NjogIHJldHVybigndScp OwkJLyogdSBncmF2ZSAqLworICAgICAgY2FzZSAxMjM6IHJldHVybignYScpOwkJLyogYSBncmF2 ZSAqLworICAgICAgY2FzZSAxMjQ6IHJldHVybignbycpOwkJLyogbyBncmF2ZSAqLworICAgICAg Y2FzZSAxMjU6IHJldHVybignZScpOwkJLyogZSBncmF2ZSAqLworICAgICAgY2FzZSAxMjY6IHJl dHVybignaScpOwkJLyogaSBncmF2ZSAqLworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKKyAg ICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeG5lYXMoQ0hBUiBjKQorI2Vsc2UKK3hu ZWFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bmVhcyAqLwkJCQkv KiBOZVhUIHRvIEFTQ0lJICovCisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5D SCkgeyAvKiBJZiBTRVQgTEFOR1VBR0UgRlJFTkNIICovCisJaWYgKGMgPT0gMjM0KSB7CQkJLyog aGFuZGxlIE9FIGRpZ3JhcGguICovCisJICAgIHptc3R1ZmYoJ0UnKTsKKwkgICAgcmV0dXJuKCdP Jyk7CisJfSBlbHNlIGlmIChjID09IDI1MCkgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCisJ ICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAgcmV0dXJuKCdvJyk7CisJfQorICAgIH0KKyAgICBjID0g eG5lbDEoYyk7CQkJLyogQ29udmVydCB0byBMYXRpbi0xICovCisgICAgcmV0dXJuKHlsMWFzW2Nd KTsJCQkvKiBDb252ZXJ0IExhdGluLTEgdG8gQVNDSUkgKi8KK30KKworQ0hBUgorI2lmZGVmIENL X0FOU0lDCit4bm9hcyhDSEFSIGMpCisjZWxzZQoreG5vYXMoYykgQ0hBUiBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7IC8qIHhub2FzICovCQkJCS8qIE5vcmdlL0RhbmlzaCBJU08gNjQ2IHRv IEFTQ0lJICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgc3dp dGNoIChjKSB7CisgICAgICBjYXNlIDkxOgorCXptc3R1ZmYoJ0UnKTsJCQkvKiBBRSBkaWdyYXBo ICovCisJcmV0dXJuKCdBJyk7CisgICAgICBjYXNlIDkyOiByZXR1cm4oJ08nKTsJCS8qIE8gc2xh c2ggKi8KKyAgICAgIGNhc2UgOTM6CQkJCS8qIEEgcmluZyAqLworCXptc3R1ZmYoJ2EnKTsKKwly ZXR1cm4oJ0EnKTsKKyAgICAgIGNhc2UgMTIzOgkJCQkvKiBhZSBkaWdyYXBoICovCisJem1zdHVm ZignZScpOworCXJldHVybignYScpOworICAgICAgY2FzZSAxMjQ6IHJldHVybignbycpOwkJLyog byBzbGFzaCAqLworICAgICAgY2FzZSAxMjU6CQkJCS8qIGEgcmluZyAqLworCXptc3R1ZmYoJ2En KTsKKwlyZXR1cm4oJ2EnKTsKKyAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7CisgICAgfQorfQor CitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hwb2FzKENIQVIgYykKKyNlbHNlCit4cG9hcyhjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeHBvYXMgKi8JCQkJLyogUG9ydHVn dWVzZSBJU08gNjQ2IHRvIEFTQ0lJICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJu KFVOSyk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDkxOiAgcmV0dXJuKCdBJyk7CQkv KiBBIHRpbGRlICovCisgICAgICBjYXNlIDkyOiAgcmV0dXJuKCdDJyk7CQkvKiBDIGNlZGlsbGEg Ki8KKyAgICAgIGNhc2UgOTM6ICByZXR1cm4oJ08nKTsJCS8qIE8gdGlsZGUgKi8KKyAgICAgIGNh c2UgMTIzOiByZXR1cm4oJ2EnKTsJCS8qIGEgdGlsZGUgKi8KKyAgICAgIGNhc2UgMTI0OiByZXR1 cm4oJ2MnKTsJCS8qIGMgY2VkaWxsYSAqLworICAgICAgY2FzZSAxMjU6IHJldHVybignbycpOwkJ LyogbyB0aWxkZSAqLworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKKyAgICB9Cit9CisKK0NI QVIKKyNpZmRlZiBDS19BTlNJQworeHNwYXMoQ0hBUiBjKQorI2Vsc2UKK3hzcGFzKGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4c3BhcyAqLwkJCQkvKiBTcGFuaXNoIElT TyA2NDYgdG8gQVNDSUkgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsK KyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgOTE6ICByZXR1cm4oMzMpOwkJLyogSW52ZXJ0 ZWQgZXhjbGFtYXRpb24gKi8KKyAgICAgIGNhc2UgOTI6ICByZXR1cm4oJ04nKTsJCS8qIE4gdGls ZGUgKi8KKyAgICAgIGNhc2UgOTM6ICByZXR1cm4oNjMpOwkJLyogSW52ZXJ0ZWQgcXVlc3Rpb24g bWFyayAqLworICAgICAgY2FzZSAxMjM6IHJldHVybihVTkspOwkJLyogZGVncmVlICovCisgICAg ICBjYXNlIDEyNDogcmV0dXJuKCduJyk7CQkvKiBuIHRpbGRlICovCisgICAgICBjYXNlIDEyNTog cmV0dXJuKCdjJyk7CQkvKiBjIGNlZGlsbGEgKi8KKyAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7 CisgICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hzd2FzKENIQVIgYykKKyNlbHNl Cit4c3dhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeHN3YXMgKi8J CQkJLyogU3dlZGlzaCBJU08gNjQ2IHRvIEFTQ0lJICovCisgICAgaWYgKGMgJiAweDgwKQorICAg ICAgcmV0dXJuKFVOSyk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDY0OiAgcmV0dXJu KCdFJyk7CQkvKiBFIGFjdXRlICovCisgICAgICBjYXNlIDkxOgkJCQkvKiBBIGRpYWVyZXNpcyAq LworCXptc3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ0EnKTsKKyAgICAgIGNhc2UgOTI6CQkJCS8qIE8g ZGlhZXJlc2lzICovCisJem1zdHVmZignZScpOworCXJldHVybignTycpOworICAgICAgY2FzZSA5 MzoJCQkJLyogQSByaW5nICovCisJem1zdHVmZignYScpOworCXJldHVybignQScpOworICAgICAg Y2FzZSA5NDoJCQkJLyogVSBkaWFlcmVzaXMgKi8KKwkvKiByZXR1cm4oJ1knKTsgKi8KKwl6bXN0 dWZmKCdlJyk7CisJcmV0dXJuKCdVJyk7CisgICAgICBjYXNlIDk2OiAgcmV0dXJuKCdlJyk7CQkv KiBlIGFjdXRlICovCisgICAgICBjYXNlIDEyMzoJCQkJLyogYSBkaWFlcmVzaXMgKi8KKwl6bXN0 dWZmKCdlJyk7CisJcmV0dXJuKCdhJyk7CisgICAgICBjYXNlIDEyNDoJCQkJLyogbyBkaWFlcmVz aXMgKi8KKwl6bXN0dWZmKCdlJyk7CisJcmV0dXJuKCdvJyk7CisgICAgICBjYXNlIDEyNToJCQkJ LyogYSByaW5nICovCisJem1zdHVmZignYScpOworCXJldHVybignYScpOworICAgICAgY2FzZSAx MjY6CQkJCS8qIHUgZGlhZXJlc2lzICovCisJLyogcmV0dXJuKCd5Jyk7ICovCisJem1zdHVmZign ZScpOworCXJldHVybigndScpOworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsKKyAgICB9Cit9 CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGNoYXMoQ0hBUiBjKQorI2Vsc2UKK3hjaGFzKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4Y2hhcyAqLwkJCQkvKiBTd2lz cyBJU08gNjQ2IHRvIEFTQ0lJICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVO Syk7CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDM1OiAgcmV0dXJuKCd1Jyk7CQkvKiB1 IGdyYXZlICovCisgICAgICBjYXNlIDY0OiAgcmV0dXJuKCdhJyk7CQkvKiBhIGdyYXZlICovCisg ICAgICBjYXNlIDkxOiAgcmV0dXJuKCdlJyk7CQkvKiBlIGFjdXRlICovCisgICAgICBjYXNlIDky OiAgcmV0dXJuKCdjJyk7CQkvKiBjIGNlZGlsbGEgKi8KKyAgICAgIGNhc2UgOTM6ICByZXR1cm4o J2UnKTsJCS8qIGUgY2lyY3VtZmxleCAqLworICAgICAgY2FzZSA5NDogIHJldHVybignaScpOwkJ LyogaSBjaXJjdW1mbGV4ICovCisgICAgICBjYXNlIDk1OiAgcmV0dXJuKCdlJyk7CQkvKiBlIGdy YXZlICovCisgICAgICBjYXNlIDk2OiAgcmV0dXJuKCdvJyk7CQkvKiBvIGNpcmN1bWZsZXggKi8K KyAgICAgIGNhc2UgMTIzOgkJCQkvKiBhIGRpYWVyZXNpcyAqLworCXptc3R1ZmYoJ2UnKTsKKwly ZXR1cm4oJ2EnKTsKKyAgICAgIGNhc2UgMTI0OgkJCQkvKiBvIGRpYWVyZXNpcyAqLworCXptc3R1 ZmYoJ2UnKTsKKwlyZXR1cm4oJ28nKTsKKyAgICAgIGNhc2UgMTI1OgkJCQkvKiB1IGRpYWVyZXNp cyAqLworCXptc3R1ZmYoJ2UnKTsKKwlyZXR1cm4oJ3UnKTsKKyAgICAgIGNhc2UgMTI2OiByZXR1 cm4oJ3UnKTsJCS8qIHUgY2lyY3VtZmxleCAqLworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsK KyAgICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGh1YXMoQ0hBUiBjKQorI2Vsc2UK K3hodWFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4aHVhcyAqLwkJ CQkvKiBIdW5nYXJpYW4gSVNPIDY0NiB0byBBU0NJSSAqLworICAgIGlmIChjICYgMHg4MCkKKyAg ICAgIHJldHVybihVTkspOworICAgIHN3aXRjaCAoYykgeworICAgICAgY2FzZSA2NDogIHJldHVy bignQScpOwkJLyogQSBhY3V0ZSAqLworICAgICAgY2FzZSA5MTogIHJldHVybignRScpOwkJLyog RSBhY3V0ZSAqLworICAgICAgY2FzZSA5MjogIHJldHVybignTycpOwkJLyogTyBkaWFlcmVzaXMg Ki8KKyAgICAgIGNhc2UgOTM6ICByZXR1cm4oJ1UnKTsJCS8qIFUgZGlhZXJlc2lzICovCisgICAg ICBjYXNlIDk2OiAgcmV0dXJuKCdhJyk7CQkvKiBhIGFjdXRlICovCisgICAgICBjYXNlIDEyMzog cmV0dXJuKCdlJyk7CQkvKiBlIGFjdXRlICovCisgICAgICBjYXNlIDEyNDogcmV0dXJuKCdvJyk7 CQkvKiBvIGFjdXRlICovCisgICAgICBjYXNlIDEyNTogcmV0dXJuKCd1Jyk7CQkvKiB1IGFjdXRl ICovCisgICAgICBjYXNlIDEyNjogcmV0dXJuKDM0KTsJCS8qIGRvdWJsZSBhY3V0ZSBhY2NlbnQg Ki8KKyAgICAgIGRlZmF1bHQ6ICByZXR1cm4oYyk7CisgICAgfQorfQorCitDSEFSCisjaWZkZWYg Q0tfQU5TSUMKK3hkbWFzKENIQVIgYykKKyNlbHNlCit4ZG1hcyhjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sgLyogeGRtYXMgKi8JCQkJLyogREVDIE1DUyB0byBBU0NJSSAqLwor ICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyogSWYgU0VUIExBTkdV QUdFIEZSRU5DSCAqLworCWlmIChjID09IDIxNSkgewkJCS8qIGhhbmRsZSBPRSBkaWdyYXBoLiAq LworCSAgICB6bXN0dWZmKCdFJyk7CisJICAgIHJldHVybignTycpOworCX0gZWxzZSBpZiAoYyA9 PSAyNDcpIHsJCS8qIEFsc28gbG93ZXJjYXNlIG9lLiAqLworCSAgICB6bXN0dWZmKCdlJyk7CisJ ICAgIHJldHVybignbycpOworCX0KKyAgICB9CisgICAgcmV0dXJuKHlsMWFzW2NdKTsJCQkvKiBP dGhlcndpc2UgdHJlYXQgbGlrZSBMYXRpbi0xICovCit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJ QworeGRnYXMoQ0hBUiBjKQorI2Vsc2UKK3hkZ2FzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeyAvKiAgeGRnYXMgKi8JCQkJLyogRGF0YSBHZW5lcmFsIHRvIEFTQ0lJICovCisg ICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMTgwOiByZXR1cm4oJ2YnKTsJCS8qIEZsb3JpbiAq LworICAgICAgY2FzZSAxODM6IHJldHVybignPCcpOwkJLyogTGVzcy1lcXVhbCAqLworICAgICAg Y2FzZSAxODQ6IHJldHVybignPicpOwkJLyogR3JlYXRlci1lcXVhbCAqLworICAgICAgY2FzZSAx ODY6IHJldHVybig5Nik7CQkvKiBHcmF2ZSBhY2NlbnQgKi8KKyAgICAgIGNhc2UgMTkxOiByZXR1 cm4oJ14nKTsJCS8qIFVwYXJyb3cgKi8KKyAgICAgIGNhc2UgMjE1OgorCWlmIChsYW5nc1tsYW5n dWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyogT0UgZGlncmFwaCAqLworCSAgICB6bXN0dWZmKCdF Jyk7CisJICAgIHJldHVybignTycpOworCX0gZWxzZSByZXR1cm4oJ08nKTsKKyAgICAgIGNhc2Ug MjQ3OgorCWlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyogb2UgZGlncmFw aCAqLworCSAgICB6bXN0dWZmKCdlJyk7CisJICAgIHJldHVybignbycpOworCX0gZWxzZSByZXR1 cm4oJ28nKTsKKyAgICAgIGNhc2UgMTc1OiBjYXNlIDE3OTogY2FzZSAyMjA6IGNhc2UgMjIyOgor ICAgICAgY2FzZSAyMjM6IGNhc2UgMjU0OiBjYXNlIDI1NToKKwlyZXR1cm4oVU5LKTsKKyAgICAg IGRlZmF1bHQ6CQkJCS8qIFRoZSByZXN0LCBjb252ZXJ0IHRvIExhdGluLTEgKi8KKwlyZXR1cm4o eWwxYXNbeWRnbDFbY11dKTsJLyogYW5kIGZyb20gdGhlcmUgdG8gQVNDSUkgKi8KKyAgICB9Cit9 CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHI4YXMoQ0hBUiBjKQorI2Vsc2UKK3hyOGFzKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiAgeHI4YXMgKi8JCQkJLyogSGV3 bGV0dCBQYWNrYXJkIFJvbWFuOCB0byBBU0NJSSAqLworICAgIHN3aXRjaChjKSB7CisgICAgICBj YXNlIDE3NTogcmV0dXJuKCdMJyk7CQkvKiBMaXJhICovCisgICAgICBjYXNlIDE5MDogcmV0dXJu KCdmJyk7CQkvKiBGbG9yaW4gKi8KKyAgICAgIGNhc2UgMjM1OiByZXR1cm4oJ1MnKTsJCS8qIFMg Y2Fyb24gKi8KKyAgICAgIGNhc2UgMjM2OiByZXR1cm4oJ3MnKTsJCS8qIHMgY2Fyb24gKi8KKyAg ICAgIGNhc2UgMjQ2OiByZXR1cm4oJy0nKTsJCS8qIEhvcml6b250YWwgYmFyICovCisgICAgICBj YXNlIDI1MjogcmV0dXJuKCcqJyk7CQkvKiBTb2xpZCBib3ggKi8KKyAgICAgIGRlZmF1bHQ6CQkJ CS8qIFRoZSByZXN0LCBjb252ZXJ0IHRvIExhdGluLTEgKi8KKwlyZXR1cm4oeWwxYXNbeXI4bDFb Y11dKTsJLyogYW5kIGZyb20gdGhlcmUgdG8gQVNDSUkgKi8KKyAgICB9Cit9CisKK0NIQVIKKyNp ZmRlZiBDS19BTlNJQworeHVrbDEoQ0hBUiBjKQorI2Vsc2UKK3h1a2wxKGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4dWtsMSAqLwkJCQkvKiBVSyBBU0NJSSB0byBMYXRp bi0xICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYgKGMg PT0gMzUpCisgICAgICByZXR1cm4oMTYzKTsKKyAgICBlbHNlIHJldHVybihjKTsKK30KKworQ0hB UgorI2lmZGVmIENLX0FOU0lDCit4bDF1ayhDSEFSIGMpCisjZWxzZQoreGwxdWsoYykgQ0hBUiBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMXVrICovCQkJCS8qIExhdGluLTEgdG8g VUsgQVNDSUkgKi8KKyAgICBpZiAoYyA9PSAxNjMpCisgICAgICByZXR1cm4oMzUpOworICAgIGVs c2UgcmV0dXJuKHlsMWFzW2NdKTsKK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBGcmVuY2gg SVNPIDY0NiAqLworI2lmZGVmIENLX0FOU0lDCit4bDFmcihDSEFSIGMpCisjZWxzZQoreGwxZnIo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMWZyICovCisgICAgcmV0 dXJuKHlsMWZyW2NdKTsKK30KKworCitDSEFSCQkJCQkvKiBGcmVuY2ggSVNPIDY0NiB0byBMYXRp bi0xICovCisjaWZkZWYgQ0tfQU5TSUMKK3hmcmwxKENIQVIgYykKKyNlbHNlCit4ZnJsMShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGZybDEgKi8KKyAgICBpZiAoYyAm IDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICByZXR1cm4oeWZybDFbY10pOworfQorCitD SEFSCQkJCQkvKiBMYXRpbi0xIHRvIER1dGNoIEFTQ0lJICovCisjaWZkZWYgQ0tfQU5TSUMKK3hs MWR1KENIQVIgYykKKyNlbHNlCit4bDFkdShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sgLyogeGwxZHUgKi8KKyAgICByZXR1cm4oeWwxZHVbY10pOworfQorCitDSEFSCisjaWZk ZWYgQ0tfQU5TSUMKK3hkdWwxKENIQVIgYykKKyNlbHNlCit4ZHVsMShjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGR1bDEgKi8JCQkJLyogRHV0Y2ggSVNPIDY0NiB0byBM YXRpbi0xICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgcmV0 dXJuKHlkdWwxW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4ZmlsMShDSEFSIGMp CisjZWxzZQoreGZpbDEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhm aWwxICovCQkJCS8qIEZpbm5pc2ggSVNPIDY0NiB0byBMYXRpbi0xICovCisgICAgaWYgKGMgJiAw eDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgcmV0dXJuKHlmaWwxW2NdKTsKK30KKworQ0hB UgorI2lmZGVmIENLX0FOU0lDCit4bDFmaShDSEFSIGMpCisjZWxzZQoreGwxZmkoYykgQ0hBUiBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMWZpICovCQkJCS8qIExhdGluLTEgdG8g RmlubmlzaCBJU08gNjQ2ICovCisgICAgcmV0dXJuKHlsMWZpW2NdKTsKK30KKworQ0hBUgorI2lm ZGVmIENLX0FOU0lDCit4ZmNsMShDSEFSIGMpCisjZWxzZQoreGZjbDEoYykgQ0hBUiBjOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhmY2wxICovCQkJCS8qIEZyZW5jaCBDYW5hZGlhbiBJ U082NDYgdG8gTGF0aW4tMSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTksp OworICAgIHJldHVybih5ZmNsMVtjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwx ZmMoQ0hBUiBjKQorI2Vsc2UKK3hsMWZjKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4bDFmYyAqLwkJCQkvKiBMYXRpbi0xIHRvIEZyZW5jaCBDYW5hZGlhbiBJU082NDYg Ki8KKyAgICByZXR1cm4oeWwxZmNbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hp dGwxKENIQVIgYykKKyNlbHNlCit4aXRsMShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMg Ki8KK3sgLyogeGl0bDEgKi8JCQkJLyogSXRhbGlhbiBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAg ICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICByZXR1cm4oeWl0bDFbY10p OworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMWl0KENIQVIgYykKKyNlbHNlCit4bDFp dChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxaXQgKi8JCQkJLyog TGF0aW4tMSB0byBJdGFsaWFuIElTTyA2NDYgKi8KKyAgICByZXR1cm4oeWwxaXRbY10pOworfQor CitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3huZWwxKENIQVIgYykKKyNlbHNlCit4bmVsMShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeG5lbDEgKi8JCSAJCS8qIE5lWFQg dG8gTGF0aW4tMSAqLworICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsg LyogSWYgU0VUIExBTkdVQUdFIEZSRU5DSCAqLworCWlmIChjID09IDIzNCkgewkJCS8qIGhhbmRs ZSBPRSBkaWdyYXBoLiAqLworCSAgICB6bXN0dWZmKCdFJyk7CisJICAgIHJldHVybignTycpOwor CX0gZWxzZSBpZiAoYyA9PSAyNTApIHsJCS8qIEFsc28gbG93ZXJjYXNlIG9lLiAqLworCSAgICB6 bXN0dWZmKCdlJyk7CisJICAgIHJldHVybignbycpOworCX0KKyAgICB9CisgICAgcmV0dXJuKHlu ZWwxW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bmVsOShDSEFSIGMpCisjZWxz ZQoreG5lbDkoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhuZWw5ICov CQkgCQkvKiBOZVhUIHRvIExhdGluLTkgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2Ug MjM0OiByZXR1cm4oMTg4KTsJCS8qIE9FICovCisgICAgICBjYXNlIDI1MDogcmV0dXJuKDE4OSk7 CQkvKiBvZSAqLworICAgICAgY2FzZSAxODg6IHJldHVybigyMzQpOwkJLyoga2VlcCBpdCBpbnZl cnRpYmxlLi4uICovCisgICAgICBjYXNlIDE4OTogcmV0dXJuKDI1MCk7CQkvKiBvZSAqLworICAg ICAgZGVmYXVsdDoKKwlyZXR1cm4oeW5lbDFbY10pOworICAgIH0KK30KKworQ0hBUgorI2lmZGVm IENLX0FOU0lDCit4bDFuZShDSEFSIGMpCisjZWxzZQoreGwxbmUoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7IC8qIHhsMW5lICovCQkgCQkvKiBMYXRpbi0xIHRvIE5lWFQgKi8K KyAgICByZXR1cm4oeWwxbmVbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsOW5l KENIQVIgYykKKyNlbHNlCit4bDluZShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sgLyogeGw5bmUgKi8JCSAJCS8qIExhdGluLTkgdG8gTmVYVCAqLworICAgIHN3aXRjaCAoYykg eworICAgICAgY2FzZSAxODg6IHJldHVybigyMzQpOwkJLyogT0UgKi8KKyAgICAgIGNhc2UgMTg5 OiByZXR1cm4oMjUwKTsJCS8qIG9lICovCisgICAgICBjYXNlIDIzNDogcmV0dXJuKDE4OCk7CQkv KiBPRSAqLworICAgICAgY2FzZSAyNTA6IHJldHVybigxODkpOwkJLyogb2UgKi8KKyAgICAgIGRl ZmF1bHQ6CisJcmV0dXJuKHlsMW5lW2NdKTsKKyAgICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19B TlNJQworeG5vbDEoQ0hBUiBjKQorI2Vsc2UKK3hub2wxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeyAvKiB4bm9sMSAqLwkJIAkJLyogTm9yd2F5L0Rlbm1hcmsgSVNPIDY0NiB0 byBMYXRpbi0xICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAg cmV0dXJuKHlub2wxW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDFubyhDSEFS IGMpCisjZWxzZQoreGwxbm8oYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8q IHhsMW5vICovCQkgCQkvKiBMYXRpbi0xIHRvIE5vcndheS9EZW5tYXJrIElTTyA2NDYgKi8KKyAg ICByZXR1cm4oeWwxbm9bY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hwb2wxKENI QVIgYykKKyNlbHNlCit4cG9sMShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sg LyogeHBvbDEgKi8JCQkJLyogUG9ydHVndWVzZSBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgICBp ZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICByZXR1cm4oeXBvbDFbY10pOwor fQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMXBvKENIQVIgYykKKyNlbHNlCit4bDFwbyhj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxcG8gKi8JCQkJLyogTGF0 aW4tMSB0byBQb3J0dWd1ZXNlIElTTyA2NDYgKi8KKyAgICByZXR1cm4oeWwxcG9bY10pOworfQor CitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hzcGwxKENIQVIgYykKKyNlbHNlCit4c3BsMShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeHNwbDEgKi8JCQkJLyogU3Bhbmlz aCBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4o VU5LKTsKKyAgICByZXR1cm4oeXNwbDFbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMK K3hsMXNwKENIQVIgYykKKyNlbHNlCit4bDFzcChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sgLyogeGwxc3AgKi8JCQkJLyogTGF0aW4tMSB0byBTcGFuaXNoIElTTyA2NDYgKi8K KyAgICByZXR1cm4oeWwxc3BbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hzd2wx KENIQVIgYykKKyNlbHNlCit4c3dsMShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sgLyogeHN3bDEgKi8JCQkJLyogU3dlZGlzaCBJU08gNjQ2IHRvIExhdGluLTEgKi8KKyAgICBp ZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4oVU5LKTsKKyAgICByZXR1cm4oeXN3bDFbY10pOwor fQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMXN3KENIQVIgYykKKyNlbHNlCit4bDFzdyhj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxc3cgKi8JCQkJLyogTGF0 aW4tMSB0byBTd2VkaXNoIElTTyA2NDYgKi8KKyAgICByZXR1cm4oeWwxc3dbY10pOworfQorCitD SEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hjaGwxKENIQVIgYykKKyNlbHNlCit4Y2hsMShjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGNobDEgKi8JCQkJLyogU3dpc3MgSVNP IDY0NiB0byBMYXRpbi0xICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7 CisgICAgcmV0dXJuKHljaGwxW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDFj aChDSEFSIGMpCisjZWxzZQoreGwxY2goYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICov Cit7IC8qIHhsMWNoICovCQkJCS8qIExhdGluLTEgdG8gU3dpc3MgSVNPIDY0NiAqLworICAgIHJl dHVybih5bDFjaFtjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGh1bDEoQ0hBUiBj KQorI2Vsc2UKK3hodWwxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4 aHVsMSAqLwkJCQkvKiBIdW5nYXJpYW4gSVNPIDY0NiB0byBMYXRpbi0xICovCisgICAgaWYgKGMg JiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgcmV0dXJuKHlodWwxW2NdKTsKK30KKwor Q0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDFodShDSEFSIGMpCisjZWxzZQoreGwxaHUoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMWh1ICovCQkJCS8qIExhdGluLTEg dG8gSHVuZ2FyaWFuIElTTyA2NDYgKi8KKyAgICByZXR1cm4oeWwxaHVbY10pOworfQorCitDSEFS CisjaWZkZWYgQ0tfQU5TSUMKK3hsMWRtKENIQVIgYykKKyNlbHNlCit4bDFkbShjKSBDSEFSIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxZG0gKi8JCQkJLyogTGF0aW4tMSB0byBE RUMgTUNTICovCisgICAgcmV0dXJuKHlsMWRtW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FO U0lDCit4bDlkbShDSEFSIGMpCisjZWxzZQoreGw5ZG0oYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhsOWRtICovCQkJCS8qIExhdGluLTkgdG8gREVDIE1DUyAqLworICAg IHN3aXRjaCAoYykgeworICAgICAgY2FzZSAxODg6IHJldHVybigyMTUpOworICAgICAgY2FzZSAx ODk6IHJldHVybigyNDcpOworICAgICAgY2FzZSAyMTU6IHJldHVybigxODgpOworICAgICAgY2Fz ZSAyNDc6IHJldHVybigxODkpOworICAgICAgZGVmYXVsdDoKKwlyZXR1cm4oeWwxZG1bY10pOwor ICAgIH0KK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDl3MShDSEFSIGMpCisjZWxzZQor eGw5dzEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsOXcxICovCQkJ CS8qIExhdGluLTkgdG8gQ1AxMjUyICovCisgICAgaWYgKGMgPCAxMjgpCisgICAgICByZXR1cm4o Yyk7CisgICAgZWxzZSBpZiAoYyA8IDE2MCkKKyAgICAgIHJldHVybignPycpOworICAgIHN3aXRj aCAoYykgeworICAgICAgY2FzZSAweGE0OiByZXR1cm4oMHg4MCk7CQkvKiBFdXJvICovCisgICAg ICBjYXNlIDB4YTY6IHJldHVybigweDhhKTsJCS8qIFMtY2Fyb24gKi8KKyAgICAgIGNhc2UgMHhh ODogcmV0dXJuKDB4OWEpOwkJLyogcy1jYXJvbiAqLworICAgICAgY2FzZSAweGI0OiByZXR1cm4o MHg4ZSk7CQkvKiBaLWNhcm9uICovCisgICAgICBjYXNlIDB4Yjg6IHJldHVybigweDllKTsJCS8q IHotY2Fyb24gKi8KKyAgICAgIGNhc2UgMHhiYzogcmV0dXJuKDB4OGMpOwkJLyogT0UgKi8KKyAg ICAgIGNhc2UgMHhiZDogcmV0dXJuKDB4OWMpOwkJLyogb2UgKi8KKyAgICAgIGNhc2UgMHhiZTog cmV0dXJuKDB4OWYpOwkJLyogWS1kaWFlcmVzaXMgKi8KKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJu KGMpOworICAgIH0KK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDFkZyhDSEFSIGMpCisj ZWxzZQoreGwxZGcoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMWRn ICovCQkJCS8qIExhdGluLTEgdG8gREcgSUNTICovCisgICAgcmV0dXJuKHlsMWRnW2NdKTsKK30K KworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4ZG1sMShDSEFSIGMpCisjZWxzZQoreGRtbDEoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhkbWwxICovCQkJCS8qIERFQyBN Q1MgdG8gTGF0aW4tMSAqLworICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gp IHsgLyogSWYgU0VUIExBTkdVQUdFIEZSRU5DSCAqLworCWlmIChjID09IDIxNSkgewkJCS8qIGhh bmRsZSBPRSBkaWdyYXBoLiAqLworCSAgICB6bXN0dWZmKCdFJyk7CisJICAgIHJldHVybignTycp OworCX0gZWxzZSBpZiAoYyA9PSAyNDcpIHsJCS8qIEFsc28gbG93ZXJjYXNlIG9lLiAqLworCSAg ICB6bXN0dWZmKCdlJyk7CisJICAgIHJldHVybignbycpOworCX0KKyAgICB9CisgICAgcmV0dXJu KHlkbWwxW2NdKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4ZG1sOShDSEFSIGMpCisj ZWxzZQoreGRtbDkoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhkbWw5 ICovCQkJCS8qIERFQyBNQ1MgdG8gTGF0aW4tOSAqLworICAgIHN3aXRjaCAoYykgeworICAgICAg Y2FzZSAyMTU6IHJldHVybigxODgpOwkJLyogT0UgKi8KKyAgICAgIGNhc2UgMjQ3OiByZXR1cm4o MTg5KTsJCS8qIG9lICovCisgICAgICBjYXNlIDE4ODogcmV0dXJuKDIxNSk7CQkvKiBhbmQgc3dh cCB0aGUgb3RoZXIgdHdvLi4uICovCisgICAgICBjYXNlIDE4OTogcmV0dXJuKDI0Nyk7CQkvKiAo MS80IGFuZCAxLzIpICovCisgICAgICBkZWZhdWx0OgkJCQkvKiB0byBrZWVwIGl0IGludmVydGli bGUgKi8KKwlyZXR1cm4oeWRtbDFbY10pOworICAgIH0KK30KKworQ0hBUgorI2lmZGVmIENLX0FO U0lDCit4ZGdsMShDSEFSIGMpCisjZWxzZQoreGRnbDEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhkZ2wxICovCQkJCS8qIERHIEludGVybmF0aW9uYWwgQ1MgdG8gTGF0 aW4tMSAqLworICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9GUkVOQ0gpIHsgLyogSWYg U0VUIExBTkdVQUdFIEZSRU5DSCAqLworCWlmIChjID09IDIxNSkgewkJCS8qIGhhbmRsZSBPRSBk aWdyYXBoLiAqLworCSAgICB6bXN0dWZmKCdFJyk7CisJICAgIHJldHVybignTycpOworCX0gZWxz ZSBpZiAoYyA9PSAyNDcpIHsJCS8qIEFsc28gbG93ZXJjYXNlIG9lLiAqLworCSAgICB6bXN0dWZm KCdlJyk7CisJICAgIHJldHVybignbycpOworCX0KKyAgICB9CisgICAgcmV0dXJuKHlkZ2wxW2Nd KTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4cjhsMShDSEFSIGMpCisjZWxzZQoreHI4 bDEoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhyOGwxICovCQkJCS8q IEhld2xldHQgUGFja2FyZCBSb21hbjggdG8gTGF0aW4tMSAqLworICAgIHJldHVybih5cjhsMVtj XSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwxcjgoQ0hBUiBjKQorI2Vsc2UKK3hs MXI4KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFyOCAqLwkJCQkv KiBMYXRpbi0xIHRvIEhld2xldHQgUGFja2FyZCBSb21hbjggKi8KKyAgICByZXR1cm4oeWwxcjhb Y10pOworfQorCisvKiBUcmFuc2xhdGlvbiBmdW5jdGlvbnMgZm9yIHJlY2VpdmluZyBmaWxlcyBh bmQgdHJhbnNsYXRpbmcgdGhlbSBpbnRvIEFTQ0lJICovCisKK0NIQVIKKyNpZmRlZiBDS19BTlNJ QworemwxYXMoQ0hBUiBjKQorI2Vsc2UKK3psMWFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeyAvKiB6bDFhcyAqLworICAgIHN3aXRjaChsYW5nc1tsYW5ndWFnZV0uaWQpIHsK KworICAgICAgY2FzZSBMX0RVVENIOgorCWlmIChjID09IDI1NSkgewkJCS8qIER1dGNoIHVtbGF1 dC15ICovCisJICAgIHpkc3R1ZmYoJ2onKTsJCS8qIGJlY29tZXMgaWogKi8KKwkgICAgcmV0dXJu KCdpJyk7CisJfSBlbHNlIHJldHVybih5bDFhc1tjXSk7CS8qIGFsbCBvdGhlcnMgYnkgdGhlIGJv b2sgKi8KKworICAgICAgY2FzZSBMX0dFUk1BTjoKKwlzd2l0Y2ggKGMpIHsJCQkvKiBHZXJtYW4s IHNwZWNpYWwgcnVsZXMuICovCisJICBjYXNlIDE5NjoJCQkvKiB1bWxhdXQtQSAtPiBBZSAqLwor CSAgICB6ZHN0dWZmKCdlJyk7CisJICAgIHJldHVybignQScpOworCSAgY2FzZSAyMTQ6CQkJLyog dW1sYXV0LU8gLT4gT2UgKi8KKwkgICAgemRzdHVmZignZScpOworCSAgICByZXR1cm4oJ08nKTsK KwkgIGNhc2UgMjIwOgkJCS8qIHVtbGF1dC1VIC0+IFVlICovCisJICAgIHpkc3R1ZmYoJ2UnKTsK KwkgICAgcmV0dXJuKCdVJyk7CisJICBjYXNlIDIyODoJCQkvKiB1bWxhdXQtYSAtPiBhZSAqLwor CSAgICB6ZHN0dWZmKCdlJyk7CisJICAgIHJldHVybignYScpOworCSAgY2FzZSAyNDY6CQkJLyog dW1sYXV0LW8gLT4gb2UgKi8KKwkgICAgemRzdHVmZignZScpOworCSAgICByZXR1cm4oJ28nKTsK KwkgIGNhc2UgMjUyOgkJCS8qIHVtbGF1dC11IC0+IHVlICovCisJICAgIHpkc3R1ZmYoJ2UnKTsK KwkgICAgcmV0dXJuKCd1Jyk7CisJICBjYXNlIDIyMzoJCQkvKiBlc3MtemV0IC0+IHNzICovCisJ ICAgIHpkc3R1ZmYoJ3MnKTsKKwkgICAgcmV0dXJuKCdzJyk7CisJICBkZWZhdWx0OiByZXR1cm4o eWwxYXNbY10pOwkvKiBhbGwgb3RoZXJzIGJ5IHRoZSBib29rICovCisJfQorICAgICAgY2FzZSBM X0RBTklTSDoKKyAgICAgIGNhc2UgTF9GSU5OSVNIOgorICAgICAgY2FzZSBMX05PUldFR0lBTjoK KyAgICAgIGNhc2UgTF9TV0VESVNIOgorCXN3aXRjaCAoYykgewkJCS8qIFNjYW5kYW5hdmlhbiBs YW5ndWFnZXMuICovCisJICBjYXNlIDE5NjoJCQkvKiB1bWxhdXQtQSAtPiBBZSAqLworCSAgICB6 ZHN0dWZmKCdlJyk7CisJICAgIHJldHVybignQScpOworCSAgY2FzZSAyMTQ6CQkJLyogdW1sYXV0 LU8gLT4gT2UgKi8KKwkgIGNhc2UgMjE2OgkJCS8qIE8tc2xhc2ggLT4gT2UgKi8KKwkgICAgemRz dHVmZignZScpOworCSAgICByZXR1cm4oJ08nKTsKKwkgIGNhc2UgMjIwOgkJCS8qIHVtbGF1dC1V IC0+IFkgKi8KKwkgICAgLyogcmV0dXJuKCdZJyk7ICovCisJICAgIHpkc3R1ZmYoJ2UnKTsKKwkg ICAgcmV0dXJuKCdVJyk7CisJICBjYXNlIDIyODoJCQkvKiB1bWxhdXQtYSAtPiBhZSAqLworCSAg ICB6ZHN0dWZmKCdlJyk7CisJICAgIHJldHVybignYScpOworCSAgY2FzZSAyNDY6CQkJLyogdW1s YXV0LW8gLT4gb2UgKi8KKwkgIGNhc2UgMjQ4OgkJCS8qIG8tc2xhc2ggLT4gb2UgKi8KKwkgICAg emRzdHVmZignZScpOworCSAgICByZXR1cm4oJ28nKTsKKwkgIGNhc2UgMjUyOgkJCS8qIHVtbGF1 dC11IC0+IHkgKi8KKwkgICAgLyogcmV0dXJuKCd5Jyk7ICovCisJICAgIHpkc3R1ZmYoJ2UnKTsK KwkgICAgcmV0dXJuKCd1Jyk7CisJICBjYXNlIDE5NzoJCQkvKiBBLXJpbmcgLT4gQWEgKi8KKwkg ICAgemRzdHVmZignYScpOworCSAgICByZXR1cm4oJ0EnKTsKKyAgICAgICAgICBjYXNlIDIyOToJ CQkvKiBhLXJpbmcgLT4gYWEgKi8KKwkgICAgemRzdHVmZignYScpOworCSAgICByZXR1cm4oJ2En KTsKKwkgIGRlZmF1bHQ6IHJldHVybih5bDFhc1tjXSk7CS8qIEFsbCBvdGhlcnMgYnkgdGhlIGJv b2sgKi8KKwl9CisgICAgICBkZWZhdWx0OgorCXJldHVybih5bDFhc1tjXSk7CQkvKiBObyBsYW5n dWFnZSwgZ28gYnkgdGhlIHRhYmxlLiAqLworICAgIH0KK30KKworQ0hBUgkJCQkJLyogSUJNIENQ NDM3IHRvIExhdGluLTEgKi8KKyNpZmRlZiBDS19BTlNJQworeDQzbDEoQ0hBUiBjKQorI2Vsc2UK K3g0M2wxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4NDNsMSAqLwor ICAgIHJldHVybih5NDNsMVtjXSk7Cit9CisKK0NIQVIJCQkJCS8qIElCTSBDUDg1MCB0byBMYXRp bi0xICovCisjaWZkZWYgQ0tfQU5TSUMKK3g4NWwxKENIQVIgYykKKyNlbHNlCit4ODVsMShjKSBD SEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDg1bDEgKi8KKyAgICByZXR1cm4o eTg1bDFbY10pOworfQorCitDSEFSCQkJCQkvKiBMYXRpbi0xIHRvIElCTSBDUDQzNyAqLworI2lm ZGVmIENLX0FOU0lDCit4bDE0MyhDSEFSIGMpCisjZWxzZQoreGwxNDMoYykgQ0hBUiBjOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMTQzICovCisgICAgcmV0dXJuKHlsMTQzW2NdKTsK K30KKworQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBDUDg1MCAqLworI2lmZGVmIENLX0FOU0lDCit4 bDE4NShDSEFSIGMpCisjZWxzZQoreGwxODUoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7IC8qIHhsMTg1ICovCisgICAgcmV0dXJuKHlsMTg1W2NdKTsKK30KKworQ0hBUgorI2lm ZGVmIENLX0FOU0lDCit4NDNhcyhDSEFSIGMpCisjZWxzZQoreDQzYXMoYykgQ0hBUiBjOworI2Vu ZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHg0M2FzICovCQkJCS8qIENQNDM3IHRvIEFTQ0lJICov CisgICAgYyA9IHk0M2wxW2NdOwkJCS8qIFRyYW5zbGF0ZSB0byBMYXRpbi0xICovCisgICAgcmV0 dXJuKHhsMTQzKGMpKTsJCQkvKiBhbmQgZnJvbSBMYXRpbi0xIHRvIEFTQ0lJLiAqLworfQorCitD SEFSCisjaWZkZWYgQ0tfQU5TSUMKK3g4NWFzKENIQVIgYykKKyNlbHNlCit4ODVhcyhjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDg1YXMgKi8JCQkJLyogQ1A4NTAgdG8g QVNDSUkgKi8KKyAgICBjID0geTg1bDFbY107CQkJLyogVHJhbnNsYXRlIHRvIExhdGluLTEgKi8K KyAgICByZXR1cm4oeGwxYXMoYykpOwkJCS8qIGFuZCBmcm9tIExhdGluLTEgdG8gQVNDSUkuICov Cit9CisKK0NIQVIJCQkJCS8qIE1hY2ludG9zaCBMYXRpbiB0byBMYXRpbi0xICovCisjaWZkZWYg Q0tfQU5TSUMKK3hhcWwxKENIQVIgYykKKyNlbHNlCit4YXFsMShjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sgLyogeGFxbDEgKi8KKyAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlk ID09IExfRlJFTkNIKSB7IC8qIElmIFNFVCBMQU5HVUFHRSBGUkVOQ0ggKi8KKwlpZiAoYyA9PSAy MDYpIHsJCQkvKiBoYW5kbGUgT0UgZGlncmFwaC4gKi8KKwkgICAgem1zdHVmZignRScpOworCSAg ICByZXR1cm4oJ08nKTsKKwl9IGVsc2UgaWYgKGMgPT0gMjA3KSB7CQkvKiBBbHNvIGxvd2VyY2Fz ZSBvZS4gKi8KKwkgICAgem1zdHVmZignZScpOworCSAgICByZXR1cm4oJ28nKTsKKwl9CisgICAg fQorICAgIHJldHVybih5YXFsMVtjXSk7Cit9CisKK0NIQVIJCQkJCS8qIE1hY2ludG9zaCBMYXRp biB0byBBU0NJSSAqLworI2lmZGVmIENLX0FOU0lDCit4YXFhcyhDSEFSIGMpCisjZWxzZQoreGFx YXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhhcWFzICovCisgICAg aWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX0ZSRU5DSCkgeyAvKiBJZiBTRVQgTEFOR1VBR0Ug RlJFTkNIICovCisJaWYgKGMgPT0gMjA2KSB7CQkJLyogaGFuZGxlIE9FIGRpZ3JhcGguICovCisJ ICAgIHptc3R1ZmYoJ0UnKTsKKwkgICAgcmV0dXJuKCdPJyk7CisJfSBlbHNlIGlmIChjID09IDIw NykgewkJLyogQWxzbyBsb3dlcmNhc2Ugb2UuICovCisJICAgIHptc3R1ZmYoJ2UnKTsKKwkgICAg cmV0dXJuKCdvJyk7CisJfQorICAgIH0KKyAgICBjID0geWFxbDFbY107CQkJLyogVHJhbnNsYXRl IHRvIExhdGluLTEgKi8KKyAgICByZXR1cm4oeGwxYXMoYykpOwkJCS8qIHRoZW4gdG8gQVNDSUku ICovCit9CisKK0NIQVIJCQkJCS8qIExhdGluLTEgdG8gTWFjaW50b3NoIExhdGluICovCisjaWZk ZWYgQ0tfQU5TSUMKK3hsMWFxKENIQVIgYykKKyNlbHNlCit4bDFhcShjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxYXEgKi8KKyAgICByZXR1cm4oeWwxYXFbY10pOwor fQorCisjaWZkZWYgTEFUSU4yCisKKy8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBmb3IgTGF0aW4g QWxwaGFiZXQgMiAqLworCitDSEFSCQkJCQkvKiBMYXRpbi0yIHRvIExhdGluLTEgKi8KKyNpZmRl ZiBDS19BTlNJQworeGwybDEoQ0hBUiBjKQorI2Vsc2UKK3hsMmwxKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwybDEgKi8KKyAgICByZXR1cm4oeWwybDFbY10pOwor fQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMncxKENIQVIgYykKKyNlbHNlCit4bDJ3MShj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwydzEgKi8JCQkJLyogTGF0 aW4tMiB0byBDUDEyNTIgKFdpbmRvd3MgTDEpICovCisgICAgaWYgKGMgPiAxMjcgJiYgYyA8IDE2 MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGVsc2UKKyAgICAgIHJldHVybih5bDJsMVtjXSk7 Cit9CisKK0NIQVIJCQkJCS8qIExhdGluLTEgdG8gTGF0aW4tMiAqLworI2lmZGVmIENLX0FOU0lD Cit4bDFsMihDSEFSIGMpCisjZWxzZQoreGwxbDIoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7IC8qIHhsbDFsMiAqLworICAgIHJldHVybih5bDFsMltjXSk7Cit9CisKK0NIQVIJ CQkJCS8qIENQMTI1MiB0byBMYXRpbi0xICovCisjaWZkZWYgQ0tfQU5TSUMKK3h3MWwyKENIQVIg YykKKyNlbHNlCit4dzFsMihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eHcxbDIgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNhc2UgMHg4YTogcmV0dXJuKDB4YTkp OwkJLyogUyBjYXJvbiAqLworICAgICAgY2FzZSAweDhlOiByZXR1cm4oMHhhZSk7CQkvKiBaIGNh cm9uICovCisgICAgICBjYXNlIDB4OWE6IHJldHVybigweGI5KTsJCS8qIHMgY2Fyb24gKi8KKyAg ICAgIGNhc2UgMHg5ZTogcmV0dXJuKDB4YmUpOwkJLyogeiBjYXJvbiAqLworICAgICAgZGVmYXVs dDoKKwlyZXR1cm4oKGMgPCAxNjApID8geHcxYXMoYykgOiB4bDFsMihjKSk7CisgICAgfQorfQor CisKK0NIQVIJCQkJCS8qIExhdGluLTIgdG8gQVNDSUkgKi8KKyNpZmRlZiBDS19BTlNJQworeGwy YXMoQ0hBUiBjKQorI2Vsc2UKK3hsMmFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4bGwyYXMgKi8KKyAgICByZXR1cm4oeWwyYXNbY10pOworfQorCitDSEFSCQkJCQkv KiBMYXRpbi0yIHRvIENQODUyICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMjUyKENIQVIgYykKKyNl bHNlCit4bDI1MihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxsMjUy ICovCisgICAgcmV0dXJuKHlsMjUyW2NdKTsKK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBN YXpvdmlhICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMm16KENIQVIgYykKKyNlbHNlCit4bDJteihj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxsMm16ICovCisgICAgcmV0 dXJuKHlsMm16W2NdKTsKK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBNYXpvdmlhICovCisj aWZkZWYgQ0tfQU5TSUMKK3hsMW16KENIQVIgYykKKyNlbHNlCit4bDFteihjKSBDSEFSIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxsMW16ICovCisgICAgcmV0dXJuKHlsMm16W3ls MWwyW2NdXSk7Cit9CisKK0NIQVIJCQkJCS8qIE1hem92aWEgdG8gTGF0aW4tMSAqLworI2lmZGVm IENLX0FOU0lDCit4bXpsMShDSEFSIGMpCisjZWxzZQoreG16bDEoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7IC8qIHhtemwxICovCisgICAgcmV0dXJuKHlsMmwxW3ltemwyW2Nd XSk7Cit9CisKK0NIQVIJCQkJCS8qIE1hem92aWEgdG8gTGF0aW4tOSAqLworI2lmZGVmIENLX0FO U0lDCit4bXpsOShDSEFSIGMpCisjZWxzZQoreG16bDkoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhtemw5ICovCisgICAgcmV0dXJuKHhsMmw5KHltemwyW2NdKSk7Cit9 CisKK0NIQVIJCQkJCS8qIENQODUyIHRvIExhdGluLTIgKi8KKyNpZmRlZiBDS19BTlNJQworeDUy bDIoQ0hBUiBjKQorI2Vsc2UKK3g1MmwyKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4NTJsMiAqLworICAgIHJldHVybih5NTJsMltjXSk7Cit9CisKK0NIQVIJCQkJCS8q IE1hem92aWEgdG8gTGF0aW4tMiAqLworI2lmZGVmIENLX0FOU0lDCit4bXpsMihDSEFSIGMpCisj ZWxzZQoreG16bDIoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhtemwy ICovCisgICAgcmV0dXJuKHltemwyW2NdKTsKK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBD UDEyNTAgKi8KKyNpZmRlZiBDS19BTlNJQworeGwyMTI1MChDSEFSIGMpCisjZWxzZQoreGwyMTI1 MChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxsMjEyNTAgKi8KKyAg ICByZXR1cm4oeWwyMTI1MFtjXSk7Cit9CisKK0NIQVIJCQkJCS8qIENQMTI1MCB0byBMYXRpbi0y ICovCisjaWZkZWYgQ0tfQU5TSUMKK3gxMjUwbDIoQ0hBUiBjKQorI2Vsc2UKK3gxMjUwbDIoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHgxMjUwbDIgKi8KKyAgICByZXR1 cm4oeTEyNTBsMltjXSk7Cit9CisKK0NIQVIJCQkJCS8qIENQODUyIHRvIEFTQ0lJICovCisjaWZk ZWYgQ0tfQU5TSUMKK3g1MmFzKENIQVIgYykKKyNlbHNlCit4NTJhcyhjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGw1MmFzICovCisgICAgcmV0dXJuKHlsMmFzW3k1Mmwy W2NdXSk7CQkvKiBDUDg1MiAtPiBMYXRpbi0yIC0+IEFTQ0lJICovCit9CisKK0NIQVIJCQkJCS8q IENQMTI1MCB0byBBU0NJSSAqLworI2lmZGVmIENLX0FOU0lDCit4MTI1MGFzKENIQVIgYykKKyNl bHNlCit4MTI1MGFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDEy NTBhcyAqLworICAgIHJldHVybih5bDJhc1t5MTI1MGwyW2NdXSk7CQkvKiBDUDgxMjUwIC0+IExh dGluLTIgLT4gQVNDSUkgKi8KK30KKworCitDSEFSCQkJCQkvKiBDUDg1MiB0byBMYXRpbi0xICov CisjaWZkZWYgQ0tfQU5TSUMKK3g1MmwxKENIQVIgYykKKyNlbHNlCit4NTJsMShjKSBDSEFSIGM7 CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGw1MmwxICovCisgICAgcmV0dXJuKHlsMmwx W3k1MmwyW2NdXSk7CQkvKiBDUDg1MiAtPiBMYXRpbi0yIC0+IExhdGluLTEgKi8KK30KKworQ0hB UgkJCQkJLyogQ1AxMjUwIHRvIExhdGluLTEgKi8KKyNpZmRlZiBDS19BTlNJQworeDEyNTBsMShD SEFSIGMpCisjZWxzZQoreDEyNTBsMShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sgLyogeGwxMjUwbDEgKi8KKyAgICByZXR1cm4oeWwybDFbeTEyNTBsMltjXV0pOwkJLyogQ1Ax MjUwIC0+IExhdGluLTIgLT4gTGF0aW4tMSAqLworfQorCitDSEFSCQkJCQkvKiBDUDEyNTAgdG8g TGF0aW4tOSAqLworI2lmZGVmIENLX0FOU0lDCit4MTI1MGw5KENIQVIgYykKKyNlbHNlCit4MTI1 MGw5KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4MTI1MGw5ICovCisg ICAgaWYgKGMgPT0gKENIQVIpMTI4KQkJCS8qIEV1cm8gKi8KKyAgICAgIHJldHVybigoQ0hBUikx NjQpOworICAgIGVsc2UKKyAgICAgIHJldHVybih4bDJsOSh5MTI1MGwyW2NdKSk7CS8qIENQMTI1 MCAtPiBMYXRpbi0yIC0+IExhdGluLTkgKi8KK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMSB0byBD UDg1MiAqLworI2lmZGVmIENLX0FOU0lDCit4bDE1MihDSEFSIGMpCisjZWxzZQoreGwxNTIoYykg Q0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsbDE1MiAqLworICAgIHJldHVy bih5bDI1Mlt5bDFsMltjXV0pOwkJLyogTGF0aW4tMSAtPiBMYXRpbi0yIC0+IENQODUyICovCit9 CisKK0NIQVIJCQkJCS8qIExhdGluLTEgdG8gQ1AxMjUwICovCisjaWZkZWYgQ0tfQU5TSUMKK3hs MTEyNTAoQ0hBUiBjKQorI2Vsc2UKK3hsMTEyNTAoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7IC8qIHhsbDExMjUwICovCisgICAgcmV0dXJuKHlsMjEyNTBbeWwxbDJbY11dKTsJ CS8qIExhdGluLTEgLT4gTGF0aW4tMiAtPiBDUDEyNTAgKi8KK30KKworQ0hBUgkJCQkJLyogTGF0 aW4tOSB0byBDUDEyNTAgKi8KKyNpZmRlZiBDS19BTlNJQworeGw5MTI1MChDSEFSIGMpCisjZWxz ZQoreGw5MTI1MChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxsOTEy NTAgKi8KKyAgICBpZiAoYyA9PSAoQ0hBUikxNjQpCQkJLyogRXVybyAqLworICAgICAgcmV0dXJu KChDSEFSKTEyOCk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKHlsMjEyNTBbeGw5bDIoYyldKTsJ LyogTGF0aW4tOSAtPiBMYXRpbi0yIC0+IENQMTI1MCAqLworfQorCitDSEFSCQkJCQkvKiBMYXRp bi05IHRvIE1hem92aWEgKi8KKyNpZmRlZiBDS19BTlNJQworeGw5bXooQ0hBUiBjKQorI2Vsc2UK K3hsOW16KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGw5bXogKi8K KyAgICByZXR1cm4oeWwybXpbeGw5bDIoYyldKTsJCS8qIExhdGluLTkgLT4gTGF0aW4tMiAtPiBN YXpvdmlhICovCit9CisKK0NIQVIJCQkJCS8qIExhdGluLTkgdG8gTWF6b3ZpYSAqLworI2lmZGVm IENLX0FOU0lDCit4bXphcyhDSEFSIGMpCisjZWxzZQoreG16YXMoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7IC8qIHhtemFzICovCisgICAgcmV0dXJuKHlsMmFzW3htemwyKGMp XSk7CQkvKiBNYXpvdmlhIC0+IExhdGluLTIgLT4gQVNDSUkgKi8KK30KKworQ0hBUgkJCQkJLyog TGF0aW4tMiB0byBOZVhUICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMm5lKENIQVIgYykKKyNlbHNl Cit4bDJuZShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxsMm5lICov CisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMTYyOiByZXR1cm4oMTk4KTsJCS8qIEJyZXZl ICovCisgICAgICBjYXNlIDE2MzogcmV0dXJuKDIzMik7CQkvKiBMIHdpdGggc3Ryb2tlICovCisg ICAgICBjYXNlIDE3ODogcmV0dXJuKDIwNik7CQkvKiBPZ29uZWsgKi8KKyAgICAgIGNhc2UgMTc5 OiByZXR1cm4oMjQ4KTsJCS8qIGwgd2l0aCBzdHJva2UgKi8KKyAgICAgIGNhc2UgMTgzOiByZXR1 cm4oMjA3KTsJCS8qIENhcm9uICovCisgICAgICBjYXNlIDE4OTogcmV0dXJuKDIwNSk7CQkvKiBE b3VibGUgYWN1dGUgKi8KKyAgICAgIGNhc2UgMjA4OiByZXR1cm4oMTQ0KTsJCS8qIEQgc3Ryb2tl ID0gRXRoICovCisgICAgICBjYXNlIDI0MDogcmV0dXJuKDIzMCk7CQkvKiBkIHN0cm9rZSA9IGV0 aCAqLworICAgICAgY2FzZSAyNTU6IHJldHVybigxOTkpOwkJLyogRG90IGFib3ZlICovCisgICAg ICBkZWZhdWx0OiAgcmV0dXJuKHlsMW5lW3lsMmwxW2NdXSk7CisgICAgfQorfQorCitDSEFSCQkJ CQkvKiBMYXRpbi0yIHRvIENQNDM3ICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMjQzKENIQVIgYykK KyNlbHNlCit4bDI0MyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxs MjQzICovCisgICAgcmV0dXJuKHlsMWwyW3k0M2wxW2NdXSk7Cit9CisKK0NIQVIJCQkJCS8qIExh dGluLTIgdG8gQ1A4NTAgKi8KKyNpZmRlZiBDS19BTlNJQworeGwyODUoQ0hBUiBjKQorI2Vsc2UK K3hsMjg1KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwyODUgKi8K KyAgICByZXR1cm4oeWwxbDJbeTg1bDFbY11dKTsKK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMiB0 byBBcHBsZSAqLworI2lmZGVmIENLX0FOU0lDCit4bDJhcShDSEFSIGMpCisjZWxzZQoreGwyYXEo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMmFxICovCisgICAgcmV0 dXJuKHlsMWFxW3lsMmwxW2NdXSk7CQkvKiBDb3VsZCBkbyBtb3JlLi4uICovCit9CisKK0NIQVIJ CQkJCS8qIExhdGluLTIgdG8gREdJICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMmRnKENIQVIgYykK KyNlbHNlCit4bDJkZyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxs MmRnICovCisgICAgcmV0dXJuKHlkZ2wxW3lsMWwyW2NdXSk7Cit9CisKK0NIQVIJCQkJCS8qIExh dGluLTIgdG8gU2hvcnQgS09JICovCisjaWZkZWYgQ0tfQU5TSUMKK3hsMnNrKENIQVIgYykKKyNl bHNlCit4bDJzayhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxsMnNr ICovCisgICAgcmV0dXJuKGlzbG93ZXIoYykgPyB0b3VwcGVyKGMpIDogYyk7Cit9CisKK0NIQVIJ CQkJCS8qIE5lWFQgdG8gTGF0aW4tMiAqLworI2lmZGVmIENLX0FOU0lDCit4bmVsMihDSEFSIGMp CisjZWxzZQoreG5lbDIoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhu ZWwyICovCisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDE0NDogcmV0dXJuKDIwOCk7CQkv KiBEIHN0cm9rZSA9IEV0aCAqLworICAgICAgY2FzZSAxOTg6IHJldHVybigxNjIpOwkJLyogQnJl dmUgKi8KKyAgICAgIGNhc2UgMTk5OiByZXR1cm4oMjU1KTsJCS8qIERvdCBhYm92ZSAqLworICAg ICAgY2FzZSAyMDU6IHJldHVybigxODkpOwkJLyogRG91YmxlIGFjdXRlICovCisgICAgICBjYXNl IDIwNjogcmV0dXJuKDE3OCk7CQkvKiBPZ29uZWsgKi8KKyAgICAgIGNhc2UgMjA3OiByZXR1cm4o MTgzKTsJCS8qIENhcm9uICovCisgICAgICBjYXNlIDIzMDogcmV0dXJuKDI0MCk7CQkvKiBkIHN0 cm9rZSA9IGV0aCAqLworICAgICAgY2FzZSAyMzI6IHJldHVybigxNjMpOwkJLyogTCB3aXRoIHN0 cm9rZSAqLworICAgICAgY2FzZSAyNDg6IHJldHVybigxNzkpOwkJLyogbCB3aXRoIHN0cm9rZSAq LworICAgICAgZGVmYXVsdDogIHJldHVybih5bDFsMlt5bmVsMVtjXV0pOyAvKiBPdGhlcnMsIGdv IHRocnUgTGF0aW4tMSAqLworICAgIH0KK30KKworQ0hBUgkJCQkJLyogQ1A0MzcgdG8gTGF0aW4t MiAqLworI2lmZGVmIENLX0FOU0lDCit4NDNsMihDSEFSIGMpCisjZWxzZQoreDQzbDIoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsNDNsMiAqLworICAgIHJldHVybih5 bDFsMlt5NDNsMVtjXV0pOworfQorCitDSEFSCQkJCQkvKiBDUDg1MCB0byBMYXRpbi0yICovCisj aWZkZWYgQ0tfQU5TSUMKK3g4NWwyKENIQVIgYykKKyNlbHNlCit4ODVsMihjKSBDSEFSIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGw4NWwyICovCisgICAgcmV0dXJuKHlsMWwyW3k4 NWwxW2NdXSk7Cit9CisKK0NIQVIJCQkJCS8qIEFwcGxlIHRvIExhdGluLTIgKi8KKyNpZmRlZiBD S19BTlNJQworeGFxbDIoQ0hBUiBjKQorI2Vsc2UKK3hhcWwyKGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeyAvKiB4bGFxbDIgKi8KKyAgICBzd2l0Y2ggKGMpIHsKKyAgICAgIGNh c2UgMjQ5OiByZXR1cm4oMTYyKTsJCS8qIEJyZXZlIGFjY2VudCAqLworICAgICAgY2FzZSAyNTA6 IHJldHVybigyNTUpOwkJLyogRG90IGFjY2VudCAqLworICAgICAgY2FzZSAyNTM6IHJldHVybigx ODkpOwkJLyogRG91YmxlIGFjdXRlICovCisgICAgICBkZWZhdWx0OiByZXR1cm4oeWwxbDJbeWFx bDFbY11dKTsKKyAgICB9Cit9CisKK0NIQVIJCQkJCS8qIERHSSB0byBMYXRpbi0yICovCisjaWZk ZWYgQ0tfQU5TSUMKK3hkZ2wyKENIQVIgYykKKyNlbHNlCit4ZGdsMihjKSBDSEFSIGM7CisjZW5k aWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxkZ2wyICovCisgICAgcmV0dXJuKHlsMWwyW3lkZ2wx W2NdXSk7CQkvKiAoZm9yIG5vdykgKi8KK30KKworQ0hBUgkJCQkJLyogU2hvcnQgS09JIHRvIExh dGluLTIgKi8KKyNpZmRlZiBDS19BTlNJQworeHNrbDIoQ0hBUiBjKQorI2Vsc2UKK3hza2wyKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bHNrbDIgKi8KKyAgICByZXR1 cm4oaXNsb3dlcihjKSA/IHRvdXBwZXIoYykgOiBjKTsKK30KKworQ0hBUgkJCQkJLyogTGF0aW4t MiB0byBHZXJtYW4gKi8KKyNpZmRlZiBDS19BTlNJQworeGwyZ2UoQ0hBUiBjKQorI2Vsc2UKK3hs MmdlKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGwyZ2UgKi8KKyAg ICBzd2l0Y2goYykgeworICAgICAgY2FzZSAxNjc6IHJldHVybig2NCk7CQkvKiBQYXJhZ3JhcGgg c2lnbiAqLworICAgICAgY2FzZSAxOTY6IHJldHVybig5MSk7CQkvKiBBLWRpYWVyZXNpcyAqLwor ICAgICAgY2FzZSAyMTQ6IHJldHVybig5Mik7CQkvKiBPLWRpYWVyZXNpcyAqLworICAgICAgY2Fz ZSAyMjA6IHJldHVybig5Myk7CQkvKiBVLWRpYWVyZXNpcyAqLworICAgICAgY2FzZSAyMjM6IHJl dHVybigxMjYpOwkJLyogZG91YmxlLXMgKi8KKyAgICAgIGNhc2UgMjI4OiByZXR1cm4oMTIzKTsJ CS8qIGEtZGlhZXJlc2lzICovCisgICAgICBjYXNlIDI0NjogcmV0dXJuKDEyNCk7CQkvKiBvLWRp YWVyZXNpcyAqLworICAgICAgY2FzZSAyNTI6IHJldHVybigxMjUpOwkJLyogdS1kaWFlcmVzaXMg Ki8KKyAgICAgIGRlZmF1bHQ6ICByZXR1cm4oeWwyYXNbY10pOwkvKiBPdGhlcnMgKi8KKyAgICB9 Cit9CisKK0NIQVIJCQkJCS8qIEdlcm1hbiB0byBMYXRpbi0yICovCisjaWZkZWYgQ0tfQU5TSUMK K3hnZWwyKENIQVIgYykKKyNlbHNlCit4Z2VsMihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sgLyogeGxnZWwyICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVO Syk7CisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgNjQ6ICByZXR1cm4oMTY3KTsJCS8qIFBh cmFncmFwaCBzaWduICovCisgICAgICBjYXNlIDkxOiAgcmV0dXJuKDE5Nik7CQkvKiBBLWRpYWVy ZXNpcyAqLworICAgICAgY2FzZSA5MjogIHJldHVybigyMTQpOwkJLyogTy1kaWFlcmVzaXMgKi8K KyAgICAgIGNhc2UgOTM6ICByZXR1cm4oMjIwKTsJCS8qIFUtZGlhZXJlc2lzICovCisgICAgICBj YXNlIDEyMzogcmV0dXJuKDIyOCk7CQkvKiBhLWRpYWVyZXNpcyAqLworICAgICAgY2FzZSAxMjY6 IHJldHVybigyMjMpOwkJLyogZG91YmxlLXMgKi8KKyAgICAgIGNhc2UgMTI0OiByZXR1cm4oMjQ2 KTsJCS8qIG8tZGlhZXJlc2lzICovCisgICAgICBjYXNlIDEyNTogcmV0dXJuKDI1Mik7CQkvKiB1 LWRpYWVyZXNpcyAqLworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsJCS8qIE90aGVycyAqLwor ICAgIH0KK30KKworQ0hBUgkJCQkJLyogTGF0aW4tMiB0byBIdW5nYXJpYW4gKi8KKyNpZmRlZiBD S19BTlNJQworeGwyaHUoQ0hBUiBjKQorI2Vsc2UKK3hsMmh1KGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeyAvKiB4bGwyaHUgKi8KKyAgICBzd2l0Y2goYykgeworICAgICAgY2Fz ZSAxNjQ6IHJldHVybigzNik7CQkvKiBDdXJyZW5jeSBzeW1ib2wgKi8KKyAgICAgIGNhc2UgMTg5 OiByZXR1cm4oMTI2KTsJCS8qIERvdWJsZSBhY3V0ZSBhY2NlbnQgKi8KKyAgICAgIGNhc2UgMTkz OiByZXR1cm4oNjQpOwkJLyogQS1hY3V0ZSAqLworICAgICAgY2FzZSAyMDE6IHJldHVybig5MSk7 CQkvKiBFLWFjdXRlICovCisgICAgICBjYXNlIDIxNDogcmV0dXJuKDkyKTsJCS8qIE8tZGlhZXJl c2lzICovCisgICAgICBjYXNlIDIyMDogcmV0dXJuKDkzKTsJCS8qIFUtZGlhZXJlc2lzICovCisg ICAgICBjYXNlIDIyNTogcmV0dXJuKDk2KTsJCS8qIGEtYWN1dGUgKi8KKyAgICAgIGNhc2UgMjMz OiByZXR1cm4oMTIzKTsJCS8qIGUtYWN1dGUgKi8KKyAgICAgIGNhc2UgMjQ2OiByZXR1cm4oMTI0 KTsJCS8qIG8tZGlhZXJlc2lzICovCisgICAgICBjYXNlIDI1MjogcmV0dXJuKDEyNSk7CQkvKiB1 LWRpYWVyZXNpcyAqLworICAgICAgZGVmYXVsdDogIHJldHVybih5bDJhc1tjXSk7CS8qIE90aGVy cyAqLworICAgIH0KK30KKworQ0hBUgkJCQkJLyogSHVuZ2FyaWFuIHRvIExhdGluLTIgKi8KKyNp ZmRlZiBDS19BTlNJQworeGh1bDIoQ0hBUiBjKQorI2Vsc2UKK3hodWwyKGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGh1bDIgKi8KKyAgICBpZiAoYyAmIDB4ODApCisg ICAgICByZXR1cm4oVU5LKTsKKyAgICBzd2l0Y2goYykgeworICAgICAgY2FzZSAzNjogIHJldHVy bigxNjQpOwkJLyogQ3VycmVuY3kgc3ltYm9sICovCisgICAgICBjYXNlIDY0OiAgcmV0dXJuKDE5 Myk7CQkvKiBBLWFjdXRlICovCisgICAgICBjYXNlIDkxOiAgcmV0dXJuKDIwMSk7CQkvKiBFLWFj dXRlICovCisgICAgICBjYXNlIDkyOiAgcmV0dXJuKDIxNCk7CQkvKiBPLWRpYWVyZXNpcyAqLwor ICAgICAgY2FzZSA5MzogIHJldHVybigyMjApOwkJLyogVS1kaWFlcmVzaXMgKi8KKyAgICAgIGNh c2UgOTY6ICByZXR1cm4oMjI1KTsJCS8qIGEtYWN1dGUgKi8KKyAgICAgIGNhc2UgMTIzOiByZXR1 cm4oMjMzKTsJCS8qIGUtYWN1dGUgKi8KKyAgICAgIGNhc2UgMTI0OiByZXR1cm4oMjQ2KTsJCS8q IG8tZGlhZXJlc2lzICovCisgICAgICBjYXNlIDEyNTogcmV0dXJuKDI1Mik7CQkvKiB1LWRpYWVy ZXNpcyAqLworICAgICAgY2FzZSAxMjY6IHJldHVybigxODkpOwkJLyogRG91YmxlIGFjdXRlIGFj Y2VudCAqLworICAgICAgZGVmYXVsdDogIHJldHVybihjKTsJCS8qIE90aGVycyAqLworICAgIH0K K30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4cjhsMihDSEFSIGMpCisjZWxzZQoreHI4bDIo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhyOGwyICovIC8qIEhld2xl dHQgUGFja2FyZCBSb21hbjggdG8gTGF0aW4tMiAqLworICAgIHN3aXRjaCAoYykgeworICAgICAg Y2FzZSAyMzU6IHJldHVybigxNjkpOwkJLyogUyBjYXJvbiAqLworICAgICAgY2FzZSAyMzY6IHJl dHVybigxODUpOwkJLyogcyBjYXJvbiAqLworICAgICAgZGVmYXVsdDogIHJldHVybih5bDFsMlt5 cjhsMVtjXV0pOworICAgIH0KK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDJyOChDSEFS IGMpCisjZWxzZQoreGwycjgoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8q IHhsMnI4ICovIC8qIExhdGluLTIgdG8gSGV3bGV0dCBQYWNrYXJkIFJvbWFuOCBDaGFyYWN0ZXIg U2V0ICovCisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDE2OTogcmV0dXJuKDIzNSk7CQkv KiBTIGNhcm9uICovCisgICAgICBjYXNlIDE4NTogcmV0dXJuKDIzNik7CQkvKiBzIGNhcm9uICov CisgICAgICBkZWZhdWx0OiAgcmV0dXJuKHlyOGwxW3lsMWwyW2NdXSk7CisgICAgfQorfQorCisj ZWxzZSAvKiBOT0xBVElOMiAqLworCisjZGVmaW5lIHhsMW16IE5VTEwKKyNkZWZpbmUgeG16bDEg TlVMTAorI2RlZmluZSB4bDJteiBOVUxMCisjZGVmaW5lIHhtemwyIE5VTEwKKyNkZWZpbmUgeGw5 bXogTlVMTAorI2RlZmluZSB4bXpsOSBOVUxMCisjZGVmaW5lIHhtemFzIE5VTEwKKworI2RlZmlu ZSB4bDExMjUwIE5VTEwKKyNkZWZpbmUgeGwyMTI1MCBOVUxMCisjZGVmaW5lIHhsOTEyNTAgTlVM TAorCisjZGVmaW5lIHgxMjUwYXMgTlVMTAorI2RlZmluZSB4MTI1MGwxIE5VTEwKKyNkZWZpbmUg eDEyNTBsMiBOVUxMCisjZGVmaW5lIHgxMjUwbDkgTlVMTAorCisjZGVmaW5lIHhsMmwxIE5VTEwK KyNkZWZpbmUgeGwydzEgTlVMTAorI2RlZmluZSB4bDFsMiBOVUxMCisjZGVmaW5lIHh3MWwyIE5V TEwKKyNkZWZpbmUgeGwyYXMgTlVMTAorI2RlZmluZSB4bDI1MiBOVUxMCisjZGVmaW5lIHg1Mmwy IE5VTEwKKyNkZWZpbmUgeDUyYXMgTlVMTAorI2RlZmluZSB4NTJsMSBOVUxMCisjZGVmaW5lIHhs MTUyIE5VTEwKKyNkZWZpbmUgeGwybmUgTlVMTAorI2RlZmluZSB4bDI0MyBOVUxMCisjZGVmaW5l IHhsMjg1IE5VTEwKKyNkZWZpbmUgeGwyYXEgTlVMTAorI2RlZmluZSB4bDJkZyBOVUxMCisjZGVm aW5lIHhsMnNrIE5VTEwKKyNkZWZpbmUgeG5lbDIgTlVMTAorI2RlZmluZSB4NDNsMiBOVUxMCisj ZGVmaW5lIHg4NWwyIE5VTEwKKyNkZWZpbmUgeGFxbDIgTlVMTAorI2RlZmluZSB4ZGdsMiBOVUxM CisjZGVmaW5lIHhza2wyIE5VTEwKKyNkZWZpbmUgeGwyZ2UgTlVMTAorI2RlZmluZSB4Z2VsMiBO VUxMCisjZGVmaW5lIHhsMmh1IE5VTEwKKyNkZWZpbmUgeGh1bDIgTlVMTAorI2RlZmluZSB4bDJy OCBOVUxMCisjZGVmaW5lIHhyOGwyIE5VTEwKKyNlbmRpZiAvKiBMQVRJTjIgKi8KKworLyogVGhp cyBvbmUgY2FuIGFsc28gYmUgdXNlZCBmb3IgRUxPVCA5MjcsIEhlYnJldyA3LCBldGMgKi8KKwor Q0hBUgorI2lmZGVmIENLX0FOU0lDCit4YXNzayhDSEFSIGMpCisjZWxzZQoreGFzc2soYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhhc3NrICovCQkJCS8qIEFTQ0lJIHRv IFNob3J0IEtPSSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAg IHJldHVybigoYyA+IDk1KSA/IChjIC0gMzIpIDogYyk7CS8qIEZvbGQgY29sdW1ucyA2LTcgdG8g NC01ICovCit9CisKKyNpZmRlZiBDWVJJTExJQworLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zIGZv ciBDeXJpbGxpYyBjaGFyYWN0ZXIgc2V0cyAqLworCitDSEFSCQkJCQkvKiBMYXRpbi9DeXJpbGxp YyB0byBDUDg2NiAqLworI2lmZGVmIENLX0FOU0lDCit4bGNhYyhDSEFSIGMpCisjZWxzZQoreGxj YWMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsY2FjICovCQkJCS8q IFBDIENvZGUgUGFnZSA4NjYgKi8KKyAgICByZXR1cm4oeWxjYWNbY10pOworfQorCitDSEFSCQkJ CQkvKiBMYXRpbi9DeXJpbGxpYyB0byAqLworI2lmZGVmIENLX0FOU0lDCit4bGM1NShDSEFSIGMp CisjZWxzZQoreGxjNTUoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhs YzU1ICovCQkJCS8qIFBDIENvZGUgUGFnZSA4NTUgKi8KKyAgICByZXR1cm4oeWxjNTVbY10pOwor fQorCitDSEFSCQkJCQkvKiBMYXRpbi9DeXJpbGxpYyB0byAqLworI2lmZGVmIENLX0FOU0lDCit4 bGMxMjUxKENIQVIgYykKKyNlbHNlCit4bGMxMjUxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeyAvKiB4bGMxMjUxICovCQkJCS8qIFBDIENvZGUgUGFnZSAxMjUxICovCisgICAg cmV0dXJuKHlsYzEyNTFbY10pOworfQorCitDSEFSCQkJCQkvKiBMYXRpbi9DeXJpbGxpYyB0by4u LiAqLworI2lmZGVmIENLX0FOU0lDCit4bGNidShDSEFSIGMpCisjZWxzZQoreGxjYnUoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsY2J1ICovCQkJCS8qIEJ1bGdhcmlh biBQQyBDb2RlIFBhZ2UgKi8KKyAgICByZXR1cm4oeWxjYnVbY10pOworfQorCitDSEFSCQkJCQkv KiBMYXRpbi9DeXJpbGxpYyB0byBPbGQgS09JLTggKi8KKyNpZmRlZiBDS19BTlNJQworeGxjazgo Q0hBUiBjKQorI2Vsc2UKK3hsY2s4KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLwor eyAvKiB4bGNrOCAqLworICAgIHJldHVybih5bGNrOFtjXSk7Cit9CisKK0NIQVIJCQkJCS8qIExh dGluL0N5cmlsbGljIHRvIEtPSTgtUiAqLworI2lmZGVmIENLX0FOU0lDCit4bGNrcihDSEFSIGMp CisjZWxzZQoreGxja3IoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhs Y2tyICovCisgICAgc3dpdGNoKGMpIHsKKyAgICAgIGNhc2UgMHhhMTogcmV0dXJuKDB4YjMpOwkJ LyogSW8gKi8KKyAgICAgIGNhc2UgMHhmMTogcmV0dXJuKDB4YTMpOwkJLyogaW8gKi8KKyAgICAg IGRlZmF1bHQ6CisJaWYgKGMgPiAweDdmICYmIGMgPCAweGMwKQorCSAgcmV0dXJuKFVOSyk7CisJ cmV0dXJuKHlsY2s4W2NdKTsKKyAgICB9Cit9CisKK0NIQVIJCQkJCS8qIExhdGluL0N5cmlsbGlj IHRvICBLT0k4LVUgKi8KKyNpZmRlZiBDS19BTlNJQworeGxja3UoQ0hBUiBjKQorI2Vsc2UKK3hs Y2t1KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGNrdSAqLworICAg IHN3aXRjaChjKSB7CisgICAgICBjYXNlIDB4YTE6IHJldHVybigweGIzKTsJCS8qIElvICovCisg ICAgICBjYXNlIDB4ZjE6IHJldHVybigweGEzKTsJCS8qIGlvICovCisgICAgICBjYXNlIDB4ZjQ6 IHJldHVybigweGE0KTsJCS8qIFVrcmFpbmlhbiBpZSAqLworICAgICAgY2FzZSAweGY2OiByZXR1 cm4oMHhhNik7CQkvKiBVa3JhaW5pYW4gaSAqLworICAgICAgY2FzZSAweGY3OiByZXR1cm4oMHhh Nyk7CQkvKiBVa3JhaW5pYW4geWkgKi8KKyAgICAgIGNhc2UgMHhmMzogcmV0dXJuKDB4YWQpOwkJ LyogVWtyYWluaWFuIGdoZSB3aXRoIHVwdHVybiAqLworICAgICAgY2FzZSAweGE0OiByZXR1cm4o MHhiNCk7CQkvKiBVa3JhaW5pYW4gSWUgKi8KKyAgICAgIGNhc2UgMHhhNjogcmV0dXJuKDB4YjYp OwkJLyogVWtyYWluaWFuIEkgKi8KKyAgICAgIGNhc2UgMHhhNzogcmV0dXJuKDB4YjcpOwkJLyog VWtyYWluaWFuIFlpICovCisgICAgICBjYXNlIDB4YTM6IHJldHVybigweGJkKTsJCS8qIFVrcmFp bmlhbiBHaGUgd2l0aCB1cHR1cm4gKi8KKyAgICAgIGRlZmF1bHQ6CisJaWYgKGMgPiAweDdmICYm IGMgPCAweGMwKQorCSAgcmV0dXJuKFVOSyk7CisJcmV0dXJuKHlsY2s4W2NdKTsKKyAgICB9Cit9 CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGxjc2soQ0hBUiBjKQorI2Vsc2UKK3hsY3NrKGMp IENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGNzayAqLwkJCQkvKiBMYXRp bi9DeXJpbGxpYyB0byBTaG9ydCBLT0kgKi8KKyAgICByZXR1cm4oeWxjc2tbY10pOworfQorCitD SEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsY2FzKENIQVIgYykKKyNlbHNlCit4bGNhcyhjKSBDSEFS IGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGxjYXMgKi8JCQkJLyogTGF0aW4vQ3ly aWxsaWMgdG8gQVNDSUkgKi8KKyAgICBpZiAobGFuZ3NbbGFuZ3VhZ2VdLmlkID09IExfUlVTU0lB TikKKyAgICAgIHJldHVybih5bGNza1tjXSk7CisgICAgZWxzZQorICAgICAgcmV0dXJuKChjID4g MTI3KSA/ICc/JyA6IGMpOworfQorCitDSEFSCQkJCQkvKiBDUDg2NiAqLworI2lmZGVmIENLX0FO U0lDCit4YWNsYyhDSEFSIGMpCisjZWxzZQoreGFjbGMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhhY2xjICovCQkJCS8qIHRvIExhdGluL0N5cmlsbGljICovCisgICAg cmV0dXJuKHlhY2xjW2NdKTsKK30KKworQ0hBUgkJCQkJLyogQ1A4NTUgKi8KKyNpZmRlZiBDS19B TlNJQworeDU1bGMoQ0hBUiBjKQorI2Vsc2UKK3g1NWxjKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeyAvKiB4NTVsYyAqLwkJCQkvKiB0byBMYXRpbi9DeXJpbGxpYyAqLworICAg IHJldHVybih5NTVsY1tjXSk7Cit9CisKK0NIQVIJCQkJCS8qIEJ1bGdhcmlhbiBQQyBDb2RlIFBh Z2UgLi4uICovCisjaWZkZWYgQ0tfQU5TSUMKK3hidWxjKENIQVIgYykKKyNlbHNlCit4YnVsYyhj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGJ1bGMgKi8JCQkJLyogdG8g TGF0aW4vQ3lyaWxsaWMgKi8KKyAgICByZXR1cm4oeWJ1bGNbY10pOworfQorCitDSEFSCQkJCQkv KiBDUDEyNTEgKi8KKyNpZmRlZiBDS19BTlNJQworeDEyNTFsYyhDSEFSIGMpCisjZWxzZQoreDEy NTFsYyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeDEyNTFsYyAqLwkJ CQkvKiB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHJldHVybih5MTI1MWxjW2NdKTsKK30KKwor Q0hBUgkJCQkJLyogT2xkIEtPSS04IHRvIExhdGluL0N5cmlsbGljICovCisjaWZkZWYgQ0tfQU5T SUMKK3hrOGxjKENIQVIgYykKKyNlbHNlCit4azhsYyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sgLyogeGs4bGMgKi8KKyAgICByZXR1cm4oeWs4bGNbY10pOworfQorCitDSEFS CQkJCQkvKiBLT0k4LVIgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyNpZmRlZiBDS19BTlNJQworeGty bGMoQ0hBUiBjKQorI2Vsc2UKK3hrcmxjKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4a3JsYyAqLworICAgIGlmIChjID09IDB4YjMpIHJldHVybigweGExKTsKKyAgICBl bHNlIGlmIChjID09IDB4YTMpIHJldHVybigweGYxKTsKKyAgICBlbHNlIGlmIChjID4gMHg3ZiAm JiBjIDwgMHhjMCkKKyAgICAgIHJldHVybihVTkspOworICAgIHJldHVybih5azhsY1tjXSk7Cit9 CisKK0NIQVIJCQkJCS8qIEtPSTgtVSB0byBMYXRpbi9DeXJpbGxpYyAqLworI2lmZGVmIENLX0FO U0lDCit4a3VsYyhDSEFSIGMpCisjZWxzZQoreGt1bGMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhrdWxjICovCisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4 YjM6IHJldHVybigweGExKTsJCS8qIElvICovCisgICAgICBjYXNlIDB4YTM6IHJldHVybigweGYx KTsJCS8qIGlvICovCisgICAgICBjYXNlIDB4YTQ6IHJldHVybigweGY0KTsJCS8qIFVrcmFpbmlh biBpZSAqLworICAgICAgY2FzZSAweGE2OiByZXR1cm4oMHhmNik7CQkvKiBVa3JhaW5pYW4gaSAq LworICAgICAgY2FzZSAweGE3OiByZXR1cm4oMHhmNyk7CQkvKiBVa3JhaW5pYW4geWkgKi8KKyAg ICAgIGNhc2UgMHhhZDogcmV0dXJuKDB4ZjMpOwkJLyogVWtyYWluaWFuIGdoZSB3aXRoIHVwdHVy biAqLworICAgICAgY2FzZSAweGI0OiByZXR1cm4oMHhhNCk7CQkvKiBVa3JhaW5pYW4gSWUgKi8K KyAgICAgIGNhc2UgMHhiNjogcmV0dXJuKDB4YTYpOwkJLyogVWtyYWluaWFuIEkgKi8KKyAgICAg IGNhc2UgMHhiNzogcmV0dXJuKDB4YTcpOwkJLyogVWtyYWluaWFuIFlpICovCisgICAgICBjYXNl IDB4YmQ6IHJldHVybigweGEzKTsJCS8qIFVrcmFpbmlhbiBHaGUgd2l0aCB1cHR1cm4gKi8KKyAg ICAgIC8qIE5vdGUgc3Vic3RpdHV0aW9uIG9mIEdqZSBmb3IgR2hlLVVwdHVybiwgd2hpY2ggaXMg bm90IGluIDg4NTktNSAqLworICAgICAgZGVmYXVsdDoKKwlpZiAoYyA+IDB4N2YgJiYgYyA8IDB4 YzApCisJICByZXR1cm4oVU5LKTsKKwlyZXR1cm4oeWs4bGNbY10pOworICAgIH0KK30KKworQ0hB UgorI2lmZGVmIENLX0FOU0lDCit4c2tjeShDSEFSIGMpCisjZWxzZQoreHNrY3koYykgQ0hBUiBj OworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhza2N5ICovCQkJLyogU2hvcnQgS09JIHRv IExhdGluL0N5cmlsbGljICovCisgICAgcmV0dXJuKHlza2N5W2MgJiAweDdmXSk7Cit9CisKK0NI QVIKKyNpZmRlZiBDS19BTlNJQworeGFzY3koQ0hBUiBjKQorI2Vsc2UKK3hhc2N5KGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4YXNjeSAqLwkJCS8qIEFTQ0lJIHRvIExh dGluL0N5cmlsbGljICovCisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4p IHsgLyogSWYgTEFOR1VBR0UgPT0gUlVTU0lBTiAgKi8KKwlyZXR1cm4oeXNrY3lbYyAmIDB4N2Zd KTsJLyogdHJlYXQgQVNDSUkgYXMgU2hvcnQgS09JICovCisgICAgfSBlbHNlIHJldHVybigoYyA+ IDEyNykgPyAnPycgOiBjKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4YWNhcyhDSEFS IGMpCisjZWxzZQoreGFjYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8q IHhhY2FzICovCQkJLyogQ1A4NjYgdG8gQVNDSUkgKi8KKyAgICBpZiAobGFuZ3NbbGFuZ3VhZ2Vd LmlkID09IExfUlVTU0lBTikgeworCWMgPSB5YWNsY1tjXTsJCQkvKiBGaXJzdCB0byBMYXRpbi9D eXJpbGxpYyAqLworCXJldHVybih5bGNza1tjXSk7CQkvKiBUaGVuIHRvIFNob3J0IEtPSSAqLwor ICAgIH0gZWxzZSByZXR1cm4oKGMgPiAxMjcpID8gJz8nIDogYyk7Cit9CisKK0NIQVIKKyNpZmRl ZiBDS19BTlNJQworeDU1YXMoQ0hBUiBjKQorI2Vsc2UKK3g1NWFzKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4NTVhcyAqLwkJCS8qIENQODU1IHRvIEFTQ0lJICovCisg ICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsKKwljID0geTU1bGNbY107 CQkJLyogRmlyc3QgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKwlyZXR1cm4oeWxjc2tbY10pOwkJLyog VGhlbiB0byBTaG9ydCBLT0kgKi8KKyAgICB9IGVsc2UgcmV0dXJuKChjID4gMTI3KSA/ICc/JyA6 IGMpOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3gxMjUxYXMoQ0hBUiBjKQorI2Vsc2UK K3gxMjUxYXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHgxMjUxYXMg Ki8JCQkvKiBDUDgxMjUxIHRvIEFTQ0lJICovCisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9 PSBMX1JVU1NJQU4pIHsKKwljID0geTEyNTFsY1tjXTsJCQkvKiBGaXJzdCB0byBMYXRpbi9DeXJp bGxpYyAqLworCXJldHVybih5bGNza1tjXSk7CQkvKiBUaGVuIHRvIFNob3J0IEtPSSAqLworICAg IH0gZWxzZSByZXR1cm4oKGMgPiAxMjcpID8gJz8nIDogYyk7Cit9CisKK0NIQVIKKyNpZmRlZiBD S19BTlNJQworeHNrYXMoQ0hBUiBjKQorI2Vsc2UKK3hza2FzKGMpIENIQVIgYzsKKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeyAvKiB4c2thcyAqLwkJCQkvKiBTaG9ydCBLT0kgdG8gQVNDSUkgKi8K KyAgICByZXR1cm4oKGMgPiA5NSkgPyAnPycgOiBjKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FO U0lDCit4azhhcyhDSEFSIGMpCisjZWxzZQoreGs4YXMoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHhrOGFzICovCQkJCS8qIE9sZCBLT0ktOCBDeXJpbGxpYyB0byBBU0NJ SSAqLworICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9SVVNTSUFOKSB7CisJYyA9IHlr OGxjW2NdOwkJCS8qIEZpcnN0IHRvIExhdGluL0N5cmlsbGljICovCisJcmV0dXJuKHlsY3NrW2Nd KTsJCS8qIFRoZW4gdG8gU2hvcnQgS09JICovCisgICAgfSBlbHNlIHJldHVybigoYyA+IDEyNykg PyAnPycgOiBjKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDFzayhDSEFSIGMpCisj ZWxzZQoreGwxc2soYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMXNr ICovCQkJCS8qIExhdGluLTEgdG8gU2hvcnQgS09JICovCisgICAgYyA9IHpsMWFzKGMpOwkJCS8q IENvbnZlcnQgdG8gQVNDSUkgKi8KKyAgICByZXR1cm4oYyA9IHhhc3NrKGMpKTsJCS8qIENvbnZl cnQgQVNDSUkgdG8gU2hvcnQgS09JICovCit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeHcx bGMoQ0hBUiBjKQorI2Vsc2UKK3h3MWxjKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4dzFsYyAqLwkJCQkvKiBDUDEyNTIgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICBy ZXR1cm4oKGMgPCAxNjApID8geHcxYXMoYykgOiB6bDFhcyhjKSk7Cit9CisKK0NIQVIKKyNpZmRl ZiBDS19BTlNJQworeGFzbGMoQ0hBUiBjKQorI2Vsc2UKK3hhc2xjKGMpIENIQVIgYzsKKyNlbmRp ZiAvKiBDS19BTlNJQyAqLworeyAvKiB4YXNsYyAqLwkJCS8qIEFTQ0lJIHRvIExhdGluL0N5cmls bGljICovCisgICAgaWYgKGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pCisgICAgICBy ZXR1cm4oeXNrY3lbYyAmIDB4N2ZdKTsKKyAgICBlbHNlIHJldHVybihjICYgMHg3Zik7Cit9CisK K0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGFzYWMoQ0hBUiBjKQorI2Vsc2UKK3hhc2FjKGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4YXNhYyAqLwkJCS8qIEFTQ0lJIHRv IENQODY2ICovCisgICAgaWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgaWYg KGxhbmdzW2xhbmd1YWdlXS5pZCA9PSBMX1JVU1NJQU4pIHsgLyogVXNlIFNob3J0IEtPSSAqLwor CWMgPSB4c2tjeShjKTsJCQkvKiBUcmFuc2xhdGUgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKwlyZXR1 cm4oeWxjYWNbY10pOwkJLyogVGhlbiB0byBDUDg2NiAqLworICAgIH0gZWxzZSByZXR1cm4oYyAm IDB4N2YpOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hhczU1KENIQVIgYykKKyNlbHNl Cit4YXM1NShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGFzNTUgKi8J CQkvKiBBU0NJSSB0byBDUDg1NSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihV TkspOworICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0gTF9SVVNTSUFOKSB7IC8qIFVzZSBT aG9ydCBLT0kgKi8KKwljID0geHNrY3koYyk7CQkJLyogVHJhbnNsYXRlIHRvIExhdGluL0N5cmls bGljICovCisJcmV0dXJuKHlsYzU1W2NdKTsJCS8qIFRoZW4gdG8gQ1A4NjYgKi8KKyAgICB9IGVs c2UgcmV0dXJuKGMgJiAweDdmKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4YXMxMjUx KENIQVIgYykKKyNlbHNlCit4YXMxMjUxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAq LworeyAvKiB4YXMxMjUxICovCQkJLyogQVNDSUkgdG8gQ1A4MTI1MSAqLworICAgIGlmIChjICYg MHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChsYW5nc1tsYW5ndWFnZV0uaWQgPT0g TF9SVVNTSUFOKSB7IC8qIFVzZSBTaG9ydCBLT0kgKi8KKwljID0geHNrY3koYyk7CQkJLyogVHJh bnNsYXRlIHRvIExhdGluL0N5cmlsbGljICovCisJcmV0dXJuKHlsYzEyNTFbY10pOwkJLyogVGhl biB0byBDUDg2NiAqLworICAgIH0gZWxzZSByZXR1cm4oYyAmIDB4N2YpOworfQorCitDSEFSCisj aWZkZWYgQ0tfQU5TSUMKK3hhc2s4KENIQVIgYykKKyNlbHNlCit4YXNrOChjKSBDSEFSIGM7Cisj ZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGFzazggKi8JCQkvKiBBU0NJSSB0byBLT0ktOCAq LworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChsYW5nc1ts YW5ndWFnZV0uaWQgPT0gTF9SVVNTSUFOKSB7IC8qIFVzZSBTaG9ydCBLT0kgKi8KKwljID0geHNr Y3koYyk7CQkJLyogVHJhbnNsYXRlIHRvIExhdGluL0N5cmlsbGljICovCisJcmV0dXJuKHlsY2s4 W2NdKTsJCS8qIFRoZW4gdG8gS09JLTggKi8KKyAgICB9IGVsc2UgcmV0dXJuKGMgJiAweDdmKTsK K30KKyNlbHNlIC8qIE5vIEN5cmlsbGljICovCisjZGVmaW5lIHhhY2FzIE5VTEwKKyNkZWZpbmUg eDU1YXMgTlVMTAorI2RlZmluZSB4MTI1MWFzIE5VTEwKKyNkZWZpbmUgeGFjbGMgTlVMTAorI2Rl ZmluZSB4NTVsYyBOVUxMCisjZGVmaW5lIHgxMjUxbGMgTlVMTAorI2RlZmluZSB4YXNhYyBOVUxM CisjZGVmaW5lIHhhczU1IE5VTEwKKyNkZWZpbmUgeGFzMTI1MSBOVUxMCisjZGVmaW5lIHhhc2N5 IE5VTEwKKyNkZWZpbmUgeGFzazggTlVMTAorI2RlZmluZSB4YXNsYyBOVUxMCisjZGVmaW5lIHhh c3NrIE5VTEwKKyNkZWZpbmUgeGs4YXMgTlVMTAorI2RlZmluZSB4azhsYyBOVUxMCisjZGVmaW5l IHhrcmxjIE5VTEwKKyNkZWZpbmUgeGt1bGMgTlVMTAorI2RlZmluZSB4bDFzayBOVUxMCisjZGVm aW5lIHh3MWxjIE5VTEwKKyNkZWZpbmUgeGxjYWMgTlVMTAorI2RlZmluZSB4bGM1NSBOVUxMCisj ZGVmaW5lIHhsYzEyNTEgTlVMTAorI2RlZmluZSB4bGNhcyBOVUxMCisjZGVmaW5lIHhsY2s4IE5V TEwKKyNkZWZpbmUgeGxja3IgTlVMTAorI2RlZmluZSB4bGNrdSBOVUxMCisjZGVmaW5lIHhsY2g3 IE5VTEwKKyNkZWZpbmUgeGxjc2sgTlVMTAorI2RlZmluZSB4c2thcyBOVUxMCisjZGVmaW5lIHhz a2N5IE5VTEwKKyNkZWZpbmUgeGJ1bGMgTlVMTAorI2RlZmluZSB4bGNidSBOVUxMCisjZW5kaWYg LyogQ1lSSUxMSUMgKi8KKworLyogVHJhbnNsYXRpb24gZnVuY3Rpb25zIGZvciBIZWJyZXcgY2hh cmFjdGVyIHNldHMgKi8KKworI2lmZGVmIEhFQlJFVworCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMK K3hhc2g3KENIQVIgYykKKyNlbHNlCit4YXNoNyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5T SUMgKi8KK3sgLyogeGFzaDcgKi8JCQkvKiBBU0NJSSB0byBIZWJyZXctNyAqLworICAgIGlmIChj ICYgMHg4MCkKKyAgICAgIHJldHVybihVTkspOworICAgIGlmIChjID09IDk2KSByZXR1cm4oJz8n KTsKKyAgICBpZiAoYyA+IDk2ICYmIGMgPCAxMjMpIHJldHVybihjIC0gMzIpOworICAgIGVsc2Ug cmV0dXJuKGMpOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMWg3KENIQVIgYykKKyNl bHNlCit4bDFoNyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwxaDcg Ki8JCQkvKiBMYXRpbi0xIHRvIEhlYnJldy03ICovCisgICAgcmV0dXJuKHhhc2g3KHhsMWFzKGMp KSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwxbGgoQ0hBUiBjKQorI2Vsc2UKK3hs MWxoKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFsaCAqLwkJCQkv KiBMYXRpbi0xIHRvIExhdGluL0hlYnJldyAqLworICAgIHN3aXRjaChjKSB7CisgICAgICBjYXNl IDE3MDogcmV0dXJuKCdhJyk7CQkvKiBGZW1pbmluZSBvcmRpbmFsICovCisgICAgICBjYXNlIDE4 NjogcmV0dXJuKCdvJyk7CQkvKiBNYXNjdWxpbmUgb3JkaW5hbCAqLworICAgICAgY2FzZSAyMTU6 IHJldHVybigxNzApOwkJLyogVGltZXMgKi8KKyAgICAgIGNhc2UgMjQ3OiByZXR1cm4oMTg2KTsJ CS8qIERpdmlkZSAqLworICAgICAgZGVmYXVsdDogIHJldHVybiggKGMgPiAxOTApID8geGwxYXMo YykgOiBjICk7CisgICAgfQorfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3h3MWxoKENIQVIg YykKKyNlbHNlCit4dzFsaChjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyog eHcxbGggKi8JCQkJLyogQ1AxMjUyIHRvIExhdGluL0hlYnJldyAqLworICAgIHN3aXRjaChjKSB7 CisgICAgICBjYXNlIDE3MDogcmV0dXJuKCdhJyk7CQkvKiBGZW1pbmluZSBvcmRpbmFsICovCisg ICAgICBjYXNlIDE4NjogcmV0dXJuKCdvJyk7CQkvKiBNYXNjdWxpbmUgb3JkaW5hbCAqLworICAg ICAgY2FzZSAyMTU6IHJldHVybigxNzApOwkJLyogVGltZXMgKi8KKyAgICAgIGNhc2UgMjQ3OiBy ZXR1cm4oMTg2KTsJCS8qIERpdmlkZSAqLworICAgICAgZGVmYXVsdDoKKwlpZiAoYyA8IDE2MCkK KwkgIHJldHVybih4dzFhcyhjKSk7CisJZWxzZQorCSAgcmV0dXJuKChjID4gMTkwKSA/IHhsMWFz KGMpIDogYyk7CisgICAgfQorfQorCisjaWZkZWYgTEFUSU4yCitDSEFSCisjaWZkZWYgQ0tfQU5T SUMKK3hsMmg3KENIQVIgYykKKyNlbHNlCit4bDJoNyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sgLyogeGwyaDcgKi8JCQkJLyogTGF0aW4tMiB0byBIZWJyZXctNyAqLworICAg IHJldHVybih4YXNoNyh4bDJhcyhjKSkpOworfQorI2Vsc2UKKyNkZWZpbmUgeGwyaDcgTlVMTAor I2VuZGlmIC8qIExBVElOMiAqLworCisjaWZuZGVmIE5PQ1lSSUwKK0NIQVIKKyNpZmRlZiBDS19B TlNJQworeGxjaDcoQ0hBUiBjKQorI2Vsc2UKK3hsY2g3KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBD S19BTlNJQyAqLworeyAvKiB4bGNoNyAqLwkJCQkvKiBMYXRpbi9DeXJpbGxpYyB0byBIZWJyZXct NyAqLworICAgIHJldHVybih4YXNoNyh4bGNhcyhjKSkpOworfQorI2VuZGlmIC8qIE5PQ1lSSUwg Ki8KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGhhcyhDSEFSIGMpCisjZWxzZQoreGxoYXMo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsaGFzICovCQkJLyogTGF0 aW4vSGVicmV3IHRvIEFTQ0lJICovCisgICAgcmV0dXJuKCAoYyA+IDEyNykgPyAnPycgOiBjICk7 Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGxobDEoQ0hBUiBjKQorI2Vsc2UKK3hsaGwx KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGhsMSAqLwkJCS8qIExh dGluL0hlYnJldyB0byBMYXRpbi0xICovCisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDE3 MDogcmV0dXJuKDIxNSk7CisgICAgICBjYXNlIDE4NjogcmV0dXJuKDI0Nyk7CisgICAgICBkZWZh dWx0OiByZXR1cm4oIChjID4gMTkwKSA/ICc/JyA6IGMgKTsKKyAgICB9Cit9CisKK0NIQVIKKyNp ZmRlZiBDS19BTlNJQworeGxodzEoQ0hBUiBjKQorI2Vsc2UKK3hsaHcxKGMpIENIQVIgYzsKKyNl bmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGh3MSAqLwkJCS8qIExhdGluL0hlYnJldyB0byBD UDEyNTIgKi8KKyAgICBpZiAoYyA+IDEyNyAmJiBjIDwgMTYwKQorICAgICAgcmV0dXJuKCc/Jyk7 CisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDE3MDogcmV0dXJuKDIxNSk7CisgICAgICBj YXNlIDE4NjogcmV0dXJuKDI0Nyk7CisgICAgICBkZWZhdWx0OiByZXR1cm4oIChjID4gMTkwKSA/ ICc/JyA6IGMgKTsKKyAgICB9Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGxoNjIoQ0hB UiBjKQorI2Vsc2UKK3hsaDYyKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAv KiB4bGg2MiAqLwkJCS8qIExhdGluL0hlYnJldyB0byBDUDg2MiAqLworICAgIHJldHVybih5bGg2 MltjXSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwxNjIoQ0hBUiBjKQorI2Vsc2UK K3hsMTYyKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDE2MiAqLwkJ CS8qIExhdGluLTEgdG8gQ1A4NjIgKi8KKyAgICByZXR1cm4oeGxoNjIoeGwxbGgoYykpKTsJLyog VmlhIExhdGluL0hlYnJldyAqLworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsaGg3KENI QVIgYykKKyNlbHNlCit4bGhoNyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sg LyogeGxoaDcgKi8JCQkvKiBMYXRpbi9IZWJyZXcgdG8gSGVicmV3LTcgKi8KKyAgICByZXR1cm4o eWxoaDdbY10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hoN2FzKENIQVIgYykKKyNl bHNlCit4aDdhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGg3YXMg Ki8JCQkvKiBIZWJyZXctNyB0byBBU0NJSSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJl dHVybihVTkspOworICAgIHJldHVybiggKGMgPiA5NSAmJiBjIDwgMTIzKSA/ICc/JyA6IGMgKTsK K30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4NjJsaChDSEFSIGMpCisjZWxzZQoreDYybGgo YykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHg2MmxoICovCQkJLyogQ1A4 NjIgdG8gTGF0aW4vSGVicmV3ICovCisgICAgcmV0dXJuKHk2MmxoW2NdKTsKK30KKworQ0hBUgor I2lmZGVmIENLX0FOU0lDCit4NjJhcyhDSEFSIGMpCisjZWxzZQoreDYyYXMoYykgQ0hBUiBjOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHg2MmFzICovCQkJLyogQ1A4NjIgdG8gQVNDSUkg Ki8KKyAgICByZXR1cm4oIHhsaGFzKHg2MmxoKGMpKSApOworfQorCitDSEFSCisjaWZkZWYgQ0tf QU5TSUMKK3g2MmwxKENIQVIgYykKKyNlbHNlCit4NjJsMShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeDYybDEgKi8JCQkvKiBDUDg2MiB0byBMYXRpbi0xICovCisgICAg cmV0dXJuKCB4bGhsMSh4NjJsaChjKSkgKTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4 aDdsaChDSEFSIGMpCisjZWxzZQoreGg3bGgoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lD ICovCit7IC8qIHhoN2xoICovCQkJLyogSGVicmV3LTcgdG8gTGF0aW4vSGVicmV3ICovCisgICAg aWYgKGMgJiAweDgwKQorICAgICAgcmV0dXJuKFVOSyk7CisgICAgcmV0dXJuKHloN2xoW2NdKTsK K30KKworI2Vsc2UgLyogTm8gSGVicmV3ICovCisKKyNkZWZpbmUgeGFzaDcgTlVMTAorI2RlZmlu ZSB4bDFoNyBOVUxMCisjZGVmaW5lIHhsMmg3IE5VTEwKKyNkZWZpbmUgeGxjaDcgTlVMTAorI2Rl ZmluZSB4bDFsaCBOVUxMCisjZGVmaW5lIHh3MWxoIE5VTEwKKyNkZWZpbmUgeGxoYXMgTlVMTAor I2RlZmluZSB4bGhsMSBOVUxMCisjZGVmaW5lIHhsaHcxIE5VTEwKKyNkZWZpbmUgeGwxNjIgTlVM TAorI2RlZmluZSB4bGhoNyBOVUxMCisjZGVmaW5lIHhsaDYyIE5VTEwKKyNkZWZpbmUgeGg3YXMg TlVMTAorI2RlZmluZSB4NjJhcyBOVUxMCisjZGVmaW5lIHg2MmwxIE5VTEwKKyNkZWZpbmUgeGg3 bGggTlVMTAorI2RlZmluZSB4NjJsaCBOVUxMCisKKyNlbmRpZiAvKiBIRUJSRVcgKi8KKworLyog VHJhbnNsYXRpb24gZnVuY3Rpb25zIGZvciBHcmVlayBjaGFyYWN0ZXIgc2V0cyAqLworCisjaWZk ZWYgR1JFRUsKKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4YXNlZyhDSEFSIGMpCisjZWxzZQor eGFzZWcoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhhc2VnICovCQkJ LyogQVNDSUkgdG8gRUxPVCA5MjcgKi8KKyAgICBpZiAoYyAmIDB4ODApCisgICAgICByZXR1cm4o VU5LKTsKKyAgICBpZiAoYyA+IDk2ICYmIGMgPCAxMjMpIHJldHVybihjIC0gMzIpOworICAgIGVs c2UgcmV0dXJuKGMpOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsMWVnKENIQVIgYykK KyNlbHNlCit4bDFlZyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGwx Z2UgKi8JCQkvKiBMYXRpbi0xIHRvIEVMT1QgOTI3ICovCisgICAgcmV0dXJuKHhhc2VnKHhsMWFz KGMpKSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGwybGcoQ0hBUiBjKQorI2Vsc2UK K3hsMmxnKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDJsZyAqLwkJ CS8qIExhdGluLTEgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICBpZiAoYyA8IDE2MCkgcmV0dXJuKGMp OworICAgIGVsc2UgaWYgKGMgPT0gMTYwIHx8IGMgPT0gMTY4IHx8IGMgPT0gMTczIHx8IGMgPT0g MTc0KQorICAgICAgcmV0dXJuKGMpOworICAgIGVsc2UgcmV0dXJuKCc/Jyk7Cit9CisKK0NIQVIK KyNpZmRlZiBDS19BTlNJQworeGwxbGcoQ0hBUiBjKQorI2Vsc2UKK3hsMWxnKGMpIENIQVIgYzsK KyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDFsZyAqLwkJCS8qIExhdGluLTEgdG8gTGF0 aW4vR3JlZWsgKi8KKyAgICBpZiAoYyA8IDE2MCkgcmV0dXJuKGMpOworICAgIHN3aXRjaChjKSB7 CisgICAgICBjYXNlIDE2MDoJCQkJLyogVGhlbXNlbHZlcyAqLworICAgICAgY2FzZSAxNjQ6Cisg ICAgICBjYXNlIDE2NjoKKyAgICAgIGNhc2UgMTY3OgorICAgICAgY2FzZSAxNjg6CisgICAgICBj YXNlIDE2OToKKyAgICAgIGNhc2UgMTcxOgorICAgICAgY2FzZSAxNzI6CisgICAgICBjYXNlIDE3 MzoKKyAgICAgIGNhc2UgMTc2OgorICAgICAgY2FzZSAxNzc6CisgICAgICBjYXNlIDE3ODoKKyAg ICAgIGNhc2UgMTc5OgorICAgICAgY2FzZSAxODA6CisgICAgICBjYXNlIDE4NzoKKyAgICAgIGNh c2UgMTg5OgorCXJldHVybihjKTsKKyAgICAgIGNhc2UgMTgxOgkJCQkvKiBMb3dlcmNhc2UgbXUg Ki8KKwlyZXR1cm4oMjM2KTsKKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJuKFVOSyk7CisgICAgfQor fQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3h3MWxnKENIQVIgYykKKyNlbHNlCit4dzFsZyhj KSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeHcxbGcgKi8JCQkJLyogQ1Ax MjUyIHRvIExhdGluL0dyZWVrICovCisgICAgcmV0dXJuKChjIDwgMTYwKSA/IHh3MWFzKGMpIDog eGwxbGcoYykpOworfQorCisKKyNpZmRlZiBMQVRJTjIKK0NIQVIKKyNpZmRlZiBDS19BTlNJQwor eGwyZWcoQ0hBUiBjKQorI2Vsc2UKK3hsMmVnKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeyAvKiB4bDJlZyAqLwkJCQkvKiBMYXRpbi0yIHRvIEVMT1QgOTI3ICovCisgICAgcmV0 dXJuKHhhc2VnKHhsMmFzKGMpKSk7Cit9CisjZWxzZQorI2RlZmluZSB4bDJlZyBOVUxMCisjZW5k aWYgLyogTEFUSU4yICovCisKKyNpZm5kZWYgTk9DWVJJTAorQ0hBUgorI2lmZGVmIENLX0FOU0lD Cit4bGNlZyhDSEFSIGMpCisjZWxzZQoreGxjZWcoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FO U0lDICovCit7IC8qIHhsY2VnICovCQkJLyogTGF0aW4vQ3lyaWxsaWMgdG8gRUxPVCA5MjcgKi8K KyAgICByZXR1cm4oeGFzZWcoeGxjYXMoYykpKTsKK30KKyNlbmRpZiAvKiBOT0NZUklMICovCisK K0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGxnYXMoQ0hBUiBjKQorI2Vsc2UKK3hsZ2FzKGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGdhcyAqLwkJCS8qIExhdGluL0dy ZWVrIHRvIEFTQ0lJICovCisgICAgcmV0dXJuKCAoYyA+IDEyNykgPyAnPycgOiBjICk7Cit9CisK K0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGxnbDEoQ0hBUiBjKQorI2Vsc2UKK3hsZ2wxKGMpIENI QVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bGdsMSAqLwkJCS8qIExhdGluL0dy ZWVrIHRvIExhdGluLTEgKi8KKyAgICBpZiAoYyA9PSAyMzYpCisgICAgICByZXR1cm4oMTgxKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4oeGwxbGcoYykpOworfQorCitDSEFSCisjaWZkZWYgQ0tf QU5TSUMKK3hsZ3cxKENIQVIgYykKKyNlbHNlCit4bGd3MShjKSBDSEFSIGM7CisjZW5kaWYgLyog Q0tfQU5TSUMgKi8KK3sgLyogeGxndzEgKi8JCQkvKiBMYXRpbi9HcmVlayB0byBMYXRpbi0xICov CisgICAgaWYgKGMgPiAxMjcgJiYgYyA8IDE2MCkKKyAgICAgIHJldHVybignPycpOworICAgIHJl dHVybih4bGdsMShjKSk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGxnNjkoQ0hBUiBj KQorI2Vsc2UKK3hsZzY5KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4 bGc2OSAqLwkJCS8qIExhdGluL0dyZWVrIHRvIENQODY5ICovCisgICAgcmV0dXJuKHlsZzY5W2Nd KTsKK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDE2OShDSEFSIGMpCisjZWxzZQoreGwx NjkoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMTY5ICovCQkJLyog TGF0aW4tMSB0byBDUDg2OSAqLworICAgIHJldHVybih4bGc2OSh4bDFsZyhjKSkpOwkvKiBWaWEg TGF0aW4vR3JlZWsgKi8KK30KKworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bGdlZyhDSEFSIGMp CisjZWxzZQoreGxnZWcoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhs Z2VnICovCQkJLyogTGF0aW4vR3JlZWsgdG8gRUxPVCA5MjcgKi8KKyAgICByZXR1cm4oeWxnZWdb Y10pOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hlZ2FzKENIQVIgYykKKyNlbHNlCit4 ZWdhcyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGVnYXMgKi8JCQkv KiBFTE9UIDkyNyB0byBBU0NJSSAqLworICAgIGlmIChjICYgMHg4MCkKKyAgICAgIHJldHVybihV TkspOworICAgIHJldHVybiggKGMgPiA5NiAmJiBjIDwgMTIzKSA/ICc/JyA6IGMgKTsKK30KKwor Q0hBUgorI2lmZGVmIENLX0FOU0lDCit4NjlsZyhDSEFSIGMpCisjZWxzZQoreDY5bGcoYykgQ0hB UiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHg2OWxnICovCQkJLyogQ1A4NjkgdG8g TGF0aW4vR3JlZWsgKi8KKyAgICByZXR1cm4oeTY5bGdbY10pOworfQorCitDSEFSCisjaWZkZWYg Q0tfQU5TSUMKK3g2OWFzKENIQVIgYykKKyNlbHNlCit4NjlhcyhjKSBDSEFSIGM7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sgLyogeDY5YXMgKi8JCQkvKiBDUDg2OSB0byBBU0NJSSAqLworICAg IHJldHVybiggeGxnYXMoeDY5bGcoYykpICk7Cit9CisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQwor eDY5bDEoQ0hBUiBjKQorI2Vsc2UKK3g2OWwxKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJ QyAqLworeyAvKiB4NjlsMSAqLwkJCS8qIENQODY5IHRvIExhdGluLTEgKi8KKyAgICByZXR1cm4o IHhsZ2wxKHg2OWxnKGMpKSApOworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hlZ2xnKENI QVIgYykKKyNlbHNlCit4ZWdsZyhjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sg LyogeGVnbGcgKi8JCQkvKiBFTE9UIDkyNyB0byBMYXRpbi9HcmVlayAqLworICAgIHJldHVybih5 ZWdsZ1tjXSk7Cit9CisKKyNlbHNlIC8qIE5vIEdyZWVrICovCisKKyNkZWZpbmUgeDY5YXMgTlVM TAorI2RlZmluZSB4NjlsMSBOVUxMCisjZGVmaW5lIHg2OWxnIE5VTEwKKyNkZWZpbmUgeGFzZWcg TlVMTAorI2RlZmluZSB4ZWdhcyBOVUxMCisjZGVmaW5lIHhlZ2xnIE5VTEwKKyNkZWZpbmUgeGwx NjkgTlVMTAorI2RlZmluZSB4bDFlZyBOVUxMCisjZGVmaW5lIHhsMWxnIE5VTEwKKyNkZWZpbmUg eHcxbGcgTlVMTAorI2RlZmluZSB4bDJnZSBOVUxMCisjZGVmaW5lIHhsMmxnIE5VTEwKKyNkZWZp bmUgeGxjZ2UgTlVMTAorI2RlZmluZSB4bGc2OSBOVUxMCisjZGVmaW5lIHhsZ2FzIE5VTEwKKyNk ZWZpbmUgeGxnZWcgTlVMTAorI2RlZmluZSB4bGdnZSBOVUxMCisjZGVmaW5lIHhsZ2wxIE5VTEwK KyNkZWZpbmUgeGxndzEgTlVMTAorCisjZW5kaWYgLyogR1JFRUsgKi8KKworCisvKiBUcmFuc2xh dGlvbiBmdW5jdGlvbnMgZm9yIEphcGFuZXNlIEthbmppIGNoYXJhY3RlciBzZXRzICovCisKKyNp ZmRlZiBLQU5KSQorLyoKKyAgVHJhbnNsYXRlIEthbmppIFRyYW5zZmVyIENoYXJhY3RlciBTZXQg KEVVQykgdG8gbG9jYWwgZmlsZSBjaGFyYWN0ZXIgc2V0LAorICBjb250cmlidXRlZCBieSBEci4g SGlyb2Z1bWkgRnVqaWksIEphcGFuIEhpZ2ggRW5lcmd5IFJlc2VhcmNoIExhYm9yYXRvcnkKKyAg KEtFSyksIFRva3lvLCBKYXBhbi4KKworICBhIGlzIGEgYnl0ZSB0byBiZSB0cmFuc2xhdGVkLCB3 aGljaCBtYXkgYmUgYSBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXIsCisgIHRoZSBLYXRha2FuYSBwcmVm aXgsIHRoZSBmaXJzdCBieXRlIG9mIGEgdHdvLWJ5dGUgS2FuamkgY2hhcmFjdGVyLCBvciB0aGUK KyAgc2Vjb25kIGJ5dGUgb2YgMi1ieXRlIEthbmppIGNoYXJhY3Rlci4KKworICBmbiBpcyB0aGUg b3V0cHV0IGZ1bmN0aW9uLgorCisgIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJl LgorKi8KKworX1BST1RPVFlQKHN0YXRpYyBpbnQganBueGFzLCAoaW50LCBpbnRbXSkgKTsKK19Q Uk9UT1RZUChzdGF0aWMgaW50IGpwbnhrdCwgKGludCwgaW50W10pICk7CitfUFJPVE9UWVAoc3Rh dGljIGludCBqcG54a24sIChpbnRbXSwgaW50W10pICk7CisKK3N0YXRpYyBpbnQganBuY250OwkJ CS8qIEJ5dGUgY291bnQgZm9yIEphcGFuZXNlICovCitzdGF0aWMgaW50IGpwbmxzdDsJCQkvKiBM YXN0IHN0YXR1cyAoZm9yIEpJUzcpICovCisKK3N0YXRpYyBpbnQKK2pwbnhhcyhhLCBvYnVmKSBp bnQgYTsgaW50IG9idWZbXTsgeyAvKiBUcmFuc2xhdGUgQVNDSUkgdG8gbG9jYWwgZmlsZSBjb2Rl ICovCisgICAgaW50IHI7CisKKyAgICByID0gMDsKKyAgICBpZiAoZmNoYXJzZXQgPT0gRkNfSklT NykgeworCXN3aXRjaCAoanBubHN0KSB7CisJICBjYXNlIDE6CisJICAgIG9idWZbMF0gPSAweDBm OworCSAgICBvYnVmWzFdID0gYTsKKwkgICAgciA9IDI7CisJICAgIGJyZWFrOworCSAgY2FzZSAy OgorCSAgICBvYnVmWzBdID0gMHgxYjsKKwkgICAgb2J1ZlsxXSA9IDB4Mjg7CisJICAgIG9idWZb Ml0gPSAweDRhOworCSAgICBvYnVmWzNdID0gYTsKKwkgICAgciA9IDQ7CisJICAgIGJyZWFrOwor CSAgZGVmYXVsdDoKKwkgICAgb2J1ZlswXSA9IGE7CisJICAgIHIgPSAxOworCSAgICBicmVhazsK Kwl9CisgICAgfSBlbHNlIHsKKwlvYnVmWzBdID0gYTsKKwlyID0gMTsKKyAgICB9CisgICAgcmV0 dXJuKHIpOworfQorCitzdGF0aWMgaW50CitqcG54a3QoYSwgb2J1ZikgaW50IGE7IGludCBvYnVm W107IHsKKy8qIFRyYW5zbGF0ZSBKSVMgWCAyMDEgS2F0YWthbmEgdG8gbG9jYWwgY29kZSAqLwor CisgICAgaW50IHI7CisKKyAgICByID0gMDsKKyAgICBpZiAoZmNoYXJzZXQgPT0gRkNfSklTNykg eworCXN3aXRjaCAoanBubHN0KSB7CisJICBjYXNlIDI6CQkJCS8qIGZyb20gS2FuamkgKi8KKwkg ICAgb2J1ZltyKytdID0gMHgxYjsKKwkgICAgb2J1ZltyKytdID0gMHgyODsKKwkgICAgb2J1Zlty KytdID0gMHg0YTsKKwkgIGNhc2UgMDoJCQkJLyogZnJvbSBSb21hbiAqLworCSAgICBvYnVmW3Ir K10gPSAweDBlOworCSAgZGVmYXVsdDoKKwkgICAgb2J1ZltyKytdID0gKGEgJiAweDdmKTsKKwkg IGJyZWFrOworCX0KKyAgICB9IGVsc2UgeworCWlmIChmY2hhcnNldCA9PSBGQ19KRVVDKQorCSAg b2J1ZltyKytdID0gMHg4ZTsKKwlvYnVmW3IrK10gPSAoYSB8IDB4ODApOworICAgIH0KKyAgICBy ZXR1cm4ocik7Cit9CisKK3N0YXRpYyBpbnQKK2pwbnhrbihpYnVmLCBvYnVmKSBpbnQgaWJ1Zltd LCBvYnVmW107IHsKKyAgICAvKiBUcmFuc2xhdGUgSklTIFggMDIwOCBLYW5qaSB0byBsb2NhbCBj b2RlICovCisgICAgaW50IGMxLCBjMjsKKyAgICBpbnQgcjsKKworICAgIGMxID0gaWJ1ZlswXSAm IDB4N2Y7CisgICAgYzIgPSBpYnVmWzFdICYgMHg3ZjsKKworICAgIGlmIChmY2hhcnNldCA9PSBG Q19TSEpJUykgeworCWlmIChjMSAmIDEpCisJICBjMiArPSAweDFmOworCWVsc2UKKwkgIGMyICs9 IDB4N2Q7CisKKyAgICAgICAgaWYgKGMyID49IDB4N2YpIGMyKys7CisKKyAgICAgICAgYzEgPSAo KGMxIC0gMHgyMSkgPj4gMSkgKyAweDgxOworICAgICAgICBpZiAoYzEgPiAweDlmKSBjMSArPSAw eDQwOworCisgICAgICAgIG9idWZbMF0gPSBjMTsKKyAgICAgICAgb2J1ZlsxXSA9IGMyOworICAg ICAgICByID0gMjsKKyAgICB9IGVsc2UgaWYgKGZjaGFyc2V0ID09IEZDX0pJUzcpIHsKKyAgICAg ICAgciA9IDA7CisgICAgICAgIHN3aXRjaCAoanBubHN0KSB7CisgIAkgIGNhc2UgMToKKwkgICAg b2J1ZltyKytdID0gMHgwZjsgLyogRnJvbSBLYXRha2FuYSAqLworICAJICBjYXNlIDA6CisJICAg IG9idWZbcisrXSA9IDB4MWI7CisJICAgIG9idWZbcisrXSA9IDB4MjQ7CisJICAgIG9idWZbcisr XSA9IDB4NDI7CisJICBkZWZhdWx0OgorCSAgICBvYnVmW3IrK10gPSBjMTsKKwkgICAgb2J1Zlty KytdID0gYzI7CisJICAgIGJyZWFrOworCX0KKyAgICB9IGVsc2UgeworICAgICAgICBvYnVmWzBd ID0gKGMxIHwgMHg4MCk7CisgICAgICAgIG9idWZbMV0gPSAoYzIgfCAweDgwKTsKKyAgICAgICAg ciA9IDI7CisgICAgfQorICAgIHJldHVybihyKTsKK30KKworaW50Cit4a2FuamYoKSB7CisvKiBJ bml0aWFsaXplIHBhcmFtZXRlcnMgZm9yIHhrYW5qaSAqLworLyogVGhpcyBmdW5jdGlvbiBzaG91 bGQgYmUgY2FsbGVkIHdoZW4gRi9YLXBhY2tldCBpcyByZWNlaXZlZCAqLworICAgIGpwbmNudCA9 IGpwbmxzdCA9IDA7CisgICAgcmV0dXJuKDApOworfQorCitpbnQKKyNpZmRlZiBDS19BTlNJQwor eGthbmp6KGludCAoKmZuKShjaGFyKSkKKyNlbHNlCit4a2FuanooZm4pIGludCAoKmZuKSgpOwor I2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhrYW5qeiAqLworLyoKKyAgVGVybWluYXRlIHhr YW5qaQorICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdoZW4gWi1wYWNrZXQgaXMgcmVj ZWl2ZWQKKyAgKGJlZm9yZSBjbG9zaW5nIHRoZSBmaWxlKS4KKyovCisgICAgc3RhdGljIGludCBv YnVmWzZdOworICAgIGludCByLCBpLCBjOworCisgICAgaWYgKGZjaGFyc2V0ID09IEZDX0pJUzcp IHsKKyAgICAgICAgYyA9ICdBJzsJCQkvKiBEdW1teSBSb21hbiBjaGFyYWN0ZXIgKi8KKyAgICAg ICAgciA9IGpwbnhhcyhjLCBvYnVmKSAtIDE7CS8qIC0xIHJlbW92ZXMgRHVtbXkgY2hhcmFjdGVy ICovCisgICAgICAgIGlmIChyID4gMCkgeworCSAgICBmb3IgKGkgPSAwOyBpIDwgcjsgaSsrKQor CSAgICAgIGlmICgoKCpmbikoKGNoYXIpIG9idWZbaV0pKSA8IDApCisJCXJldHVybigtMSk7CisJ fQorICAgIH0KKyAgICByZXR1cm4oMCk7Cit9CisKK2ludAorI2lmZGVmIENLX0FOU0lDCit4a2Fu amkoaW50IGEsIGludCAoKmZuKShjaGFyKSkKKyNlbHNlCit4a2FuamkoYSwgZm4pIGludCBhOyBp bnQgKCpmbikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4a2FuamkgKi8KKyAgICBz dGF0aWMgaW50IHhidWZbMl07CisgICAgc3RhdGljIGludCBvYnVmWzhdOworCisgICAgaW50IGks IHI7CisgICAgaW50IGM3OworICAgIGludCBzdGF0ZT0wOworCisgICAgciA9IDA7CisgICAgaWYg KGpwbmNudCA9PSAwKSB7CisJLyogMXN0IGJ5dGUgKi8KKwlpZiAoKGEgJiAweDgwKSA9PSAwKSB7 CisJICAgIC8qIDh0aCBiaXQgaXMgMCwgaS5lLiwgc2luZ2xlLWJ5dGUgY29kZSAqLworCSAgICBy ID0ganBueGFzKGEsIG9idWYpOworCSAgICBzdGF0ZSA9IDA7CisJfSBlbHNlIHsKKwkgICAgLyog OHRoIGJpdCBpcyAxLCBjaGVjayB0aGUgcmFuZ2UgKi8KKwkgICAgYzcgPSBhICYgMHg3ZjsKKwkg ICAgaWYgKCgoYzcgPiAweDIwKSAmJiAoYzcgPCAweDdmKSkgfHwgKGM3ID09IDB4MGUpKSB7CisJ ICAgICAgICAvKiBkb3VibGUgYnl0ZSBjb2RlICovCisJICAgICAgICB4YnVmW2pwbmNudCsrXSA9 IGE7CisJICAgIH0gZWxzZSB7CisJICAgICAgICAvKiBzaW5nbGUgYnl0ZSBjb2RlICovCisJICAg ICAgICByID0ganBueGFzKGEsIG9idWYpOworCSAgICAgICAgc3RhdGUgPSAwOworCSAgICB9CisJ fQorICAgIH0gZWxzZSB7CisJLyogbm90IHRoZSAxc3QgYnl0ZSAqLworCXhidWZbanBuY250Kytd ID0gYTsKKwlpZiAoeGJ1ZlswXSA9PSAweDhlKSB7CisJICAgIHIgPSBqcG54a3QoeGJ1ZlsxXSwg b2J1Zik7CisJICAgIHN0YXRlID0gMTsKKwl9IGVsc2UgeworCSAgICByID0ganBueGtuKHhidWYs IG9idWYpOworCSAgICBzdGF0ZSA9IDI7CisJfQorICAgIH0KKyAgICBpZiAociA+IDApIHsKKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IHI7IGkrKyApCisJICBpZiAoKCgqZm4pKChjaGFyKSBvYnVm W2ldKSkgPCAwKQorCSAgICByZXR1cm4oLTEpOworICAgICAgICBqcG5sc3QgPSBzdGF0ZTsKKyAg ICAgICAganBuY250ID0gMDsKKyAgICB9CisgICAgcmV0dXJuKDApOworfQorCisvKgorICBGdW5j dGlvbiBmb3IgdHJhbnNsYXRpbmcgZnJvbSBKYXBhbmVzZSBmaWxlIGNoYXJhY3RlciBzZXQKKyAg dG8gSmFwYW5lc2UgRVVDIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQuCisgIFJldHVybnMgYSBwb2lu dGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgMCwgMSwgb3IgMiBieXRlcy4KKyovCisKKy8qIHpr YW5qaSAqLworc3RhdGljIGludCBqcG5zdHo7CQkJLyogc3RhdHVzIGZvciBKSVMtNyAqLworc3Rh dGljIGludCBqcG5wbmQ7CQkJLyogbnVtYmVyIG9mIHBlbmRpbmcgYnl0ZXMgKi8KK3N0YXRpYyBp bnQganBucG50OwkJCS8qIHBlbmRpbmcgYnVmZmVyIGluZGV4ICovCitzdGF0aWMgaW50IGpwbnBi Zls4XTsJCQkvKiBwZW5kaW5nIGJ1ZmZlciAqLworCisvKiBUaGVyZSBpcyBzb21lIGR1cGxpY2F0 aW9uIGhlcmUgYmV0d2VlbiB0aGUgb2xkIGFuZCBuZXcgSklTLTcgcGFyc2VycyAqLworLyogdG8g YmUgY2xlYW5lZCB1cCBsYXRlci4uLiAqLworCitWT0lECitqN2luaXQoKSB7CQkJCS8qIEluaXRp YWxpemUgSklTLTcgcGFyc2VyICovCisgICAganBuc3R6ID0gMDsKKyAgICBqcG5wbmQgPSAwOwor ICAgIGpwbnBudCA9IDA7Cit9CisKK2ludAorZ2V0ajcoKSB7CQkJCS8qIFJlYWRzIEpJUy03IHJl dHVybnMgbmV4dCBFVUMgYnl0ZSAqLworICAgIGludCB4OworCisgICAgaWYgKGpwbnBuZCA+IDAp IHsJCQkvKiBJZiBzb21ldGhpbmcgaXMgcGVuZGluZyAqLworCXggPSAodW5zaWduZWQpIGpwbnBi ZltqcG5wbnQrK107IC8qIEdldCBpdCAqLworCWpwbnBuZC0tOworCWlmIChqcG5wbmQgPCAwKSBq cG5wbmQgPSAwOworCXJldHVybigodW5zaWduZWQpeCk7CisgICAgfQorICAgIGpwbnBudCA9IDA7 CisKKyAgICBpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKKyAgICB3aGlsZSAo anBucG5kID09IDApIHsJCS8qIFdoaWxlIHNvbWV0aGluZyBpcyBwZW5kaW5nLi4uICovCisJaWYg KCh4ID4gMHgyMCkgJiYgKHggPCAweDdmKSkgewkvKiA3LWJpdCBncmFwaGljIGNoYXJhY3RlciAq LworCSAgICBzd2l0Y2ggKGpwbnN0eikgeworCSAgICAgIGNhc2UgMToJCQkgLyogS2F0YWthbmEg Ki8KKyNpZmRlZiBDT01NRU5UCisJCS8qIFRoaXMgY2FuJ3QgYmUgcmlnaHQuLi4gKi8KKwkJanBu cGJmW2pwbnBuZCsrXSA9IDB4ODA7IC8qIEluc2VydCBmbGFnIChOT1QgU1MyPz8/KSAqLworI2Vs c2UKKwkJanBucGJmW2pwbnBuZCsrXSA9IDB4OGU7IC8qIEluc2VydCBTUzIgKi8KKyNlbmRpZiAv KiBDT01NRU5UICovCisJCWpwbnBiZltqcG5wbmQrK10gPSAoeCB8IDB4ODApOyAvKiBJbnNlcnQg S2FuYSArIDh0aCBiaXQgKi8KKwkJYnJlYWs7CisJICAgICAgY2FzZSAyOgkJCS8qIEthbmppICov CisJCWpwbnBiZltqcG5wbmQrK10gPSAoeCB8IDB4ODApOyAvKiBHZXQgYW5vdGhlciBieXRlICov CisJCWlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgpOworCQlqcG5wYmZbanBucG5k KytdID0gKHggfCAweDgwKTsKKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoJCQkvKiBBU0NJSSAv IEpJUyBSb21hbiAqLworCQlqcG5wYmZbanBucG5kKytdID0geDsKKwkJYnJlYWs7CisJICAgIH0K Kwl9IGVsc2UgaWYgKHggPT0gMHgwZSkgewkJLyogXk4gPSBTTyAqLworCSAgICBqcG5zdHogPSAx OwkJCS8qIEthdGFrYW5hICovCisJICAgIGlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJu KHgpOworCX0gZWxzZSBpZiAoeCA9PSAweDBmKSB7CQkvKiBeTyA9IFNJICovCisJICAgIGpwbnN0 eiA9IDA7CQkJLyogQVNDSUkgLyBKSVMgUm9tYW4gKi8KKwkgICAgaWYgKCh4ID0gem1pbmNoYXIo KSkgPCAwKSByZXR1cm4oeCk7CisJfSBlbHNlIGlmICh4ID09IDB4MWIpIHsJCS8qIEVzY2FwZSAq LworCSAgICBqcG5wYmZbanBucG5kKytdID0geDsJLyogU2F2ZSBpbiBidWZmZXIgKi8KKwkgICAg aWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7CisJICAgIGpwbnBiZltqcG5wbmQr K10gPSB4OwkvKiBTYXZlIGluIGJ1ZmZlciAqLworCSAgICBpZiAoeCA9PSAnJCcpIHsJCS8qIDxF U0M+JCAqLworCQlpZiAoKHggPSB6bWluY2hhcigpKSA8IDApIHJldHVybih4KTsKKwkJanBucGJm W2pwbnBuZCsrXSA9IHg7CisJCWlmICgoeCA9PSAnQCcpIHx8ICh4ID09ICdCJykpIHsJLyogS2Fu amkgKi8KKwkJICAgIGpwbnN0eiA9IDI7CisJCSAgICBqcG5wbnQgPSBqcG5wbmQgPSAwOworCQkg ICAgaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7CisJCX0KKwkgICAgfSBlbHNl IGlmICh4ID09ICcoJykgewkvKiA8RVNDPiggPT0gOTQtYnl0ZSBzaW5nbGUtYnl0ZSBzZXQgKi8K KwkJaWYgKCh4ID0gem1pbmNoYXIoKSkgPCAwKSByZXR1cm4oeCk7CisJCWpwbnBiZltqcG5wbmQr K10gPSB4OworCQlpZiAoKHggPT0gJ0InKSB8fCAoeCA9PSAnSicpKSB7CS8qIEFTQ0lJIG9yIEpJ UyBSb21hbiAqLworCQkgICAganBuc3R6ID0gMDsJCSAgICAgICAgLyogU2V0IHN0YXRlICovCisJ CSAgICBqcG5wbnQgPSBqcG5wbmQgPSAwOyAgICAgICAgLyogUmVzZXQgcG9pbnRlcnMgKi8KKwkJ ICAgIGlmICgoeCA9IHptaW5jaGFyKCkpIDwgMCkgcmV0dXJuKHgpOworCQl9CisJICAgIH0gZWxz ZSBpZiAoeCA9PSAweDFiKSB7CS8qIDxFU0M+PEVTQz4gKi8KKwkJanBucG50ID0ganBucG5kID0g MDsJLyogUmVzZXQgcG9pbnRlcnMsIHN0YXkgaW4gc3RhdGUgKi8KKwkJaWYgKCh4ID0gem1pbmNo YXIoKSkgPCAwKSByZXR1cm4oeCk7CisJICAgIH0KKwl9IGVsc2UgewkJCS8qIE5vdCA8RVNDPiAt IGp1c3Qgc2F2ZSBpdCAqLworCSAgICBqcG5wYmZbanBucG5kKytdID0geDsKKwl9CisgICAgfQor ICAgIGpwbnBudCA9IDA7CisgICAgeCA9ICh1bnNpZ25lZClqcG5wYmZbanBucG50KytdOworICAg IGpwbnBuZC0tOworICAgIHJldHVybigodW5zaWduZWQpeCk7Cit9CisKK1VTSE9SVAorI2lmZGVm IENLX0FOU0lDCitldV90b19zaihVU0hPUlQgZXUpCQkJLyogRVVDLUpQIHRvIFNoaWZ0LUpJUyAq LworI2Vsc2UKK2V1X3RvX3NqKGV1KSBVU0hPUlQgZXU7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8K K3sKKyAgICBpbnQgYzEsIGMyOworICAgIHVuaW9uIGNrX3Nob3J0IGpjb2RlLHNjb2RlOworCisg ICAgamNvZGUueF9zaG9ydCA9IGV1OworICAgIGMxID0gKGpjb2RlLnhfY2hhcltieXRlb3JkZXJd ICYgMHg3Zik7CisgICAgYzIgPSAoamNvZGUueF9jaGFyWzEtYnl0ZW9yZGVyXSAmIDB4N2YpOwor CisgICAgaWYgKGMxICYgMSkKKyAgICAgIGMyICs9IDB4MWY7CisgICAgZWxzZQorICAgICAgYzIg Kz0gMHg3ZDsKKyAgICBpZiAoYzIgPj0gMHg3ZikKKyAgICAgIGMyKys7CisgICAgYzEgPSAoKGMx IC0gMHgyMSkgPj4gMSkgKyAweDgxOworICAgIGlmIChjMSA+IDB4OWYpCisgICAgICBjMSArPSAw eDQwOworCisgICAgc2NvZGUueF9jaGFyW2J5dGVvcmRlcl0gPSBjMTsKKyAgICBzY29kZS54X2No YXJbMS1ieXRlb3JkZXJdID0gYzI7CisgICAgcmV0dXJuKHNjb2RlLnhfc2hvcnQpOworfQorCisK K1VTSE9SVAorI2lmZGVmIENLX0FOU0lDCitzal90b19ldShVU0hPUlQgc2opCQkJLyogU2hpZnQt SklTIHRvIEVVQy1KUCAqLworI2Vsc2UKK3NqX3RvX2V1KHNqKSBVU0hPUlQgc2o7CisjZW5kaWYg LyogQ0tfQU5TSUMgKi8KK3sKKyAgICB1bmlvbiBja19zaG9ydCBqY29kZSwgc2NvZGU7CisgICAg aW50IGMwLCBjMTsKKworICAgIHNjb2RlLnhfc2hvcnQgPSBzajsKKyAgICBjMCA9IHNjb2RlLnhf Y2hhcltieXRlb3JkZXJdOwkvKiBMZWZ0IChoaSBvcmRlcikgYnl0ZSAqLworICAgIGMxID0gc2Nv ZGUueF9jaGFyWzEtYnl0ZW9yZGVyXTsJLyogUmlnaHQgKGxvIG9yZGVyKSBieXRlICovCisKKyAg ICBpZiAoKChjMCA+PSAweDgxKSAmJiAoYzAgPD0gMHg5ZikpIHx8IC8qIEhpZ2ggb3JkZXIgYnl0 ZSBoYXMgOHRoIGJpdCBzZXQgKi8KKyAgICAgICAgKChjMCA+PSAweGUwKSAmJiAoYzAgPD0gMHhm YykpKSB7IC8qIEthbmppICovCisJaWYgKGMwIDw9IDB4OWYpCQkJICAvKiBUd28gYnl0ZXMgaW4g Ki8KKwkgIGMwIC09IDB4NzE7CQkJICAvKiBEbyB0aGUgc2hpZnRpbmcuLi4gKi8KKwllbHNlCisJ ICBjMCAtPSAweGIxOworCWMwID0gYzAgKiAyICsgMTsKKwlpZiAoYzEgPiAweDdmKSBjMSAtPSAx OworCWlmIChjMSA+PSAweDllKSB7CisJICAgIGMxIC09IDB4N2Q7CisJICAgIGMwICs9IDE7CisJ fSBlbHNlIHsKKwkgICAgYzEgLT0gMHgxZjsKKwl9CisJamNvZGUueF9jaGFyW2J5dGVvcmRlcl0g PSAoYzAgfCAweDgwKTsgLyogVHdvIGJ5dGVzIG91dCAqLworCWpjb2RlLnhfY2hhclsxLWJ5dGVv cmRlcl0gPSAoYzEgfCAweDgwKTsKKworICAgIH0gZWxzZSBpZiAoYzAgPT0gMCkgewkJLyogU2lu Z2xlIGJ5dGUgKi8KKwlpZiAoYzEgPj0gMHhhMSAmJiBjMSA8PSAweGRmKSB7CS8qIEthdGFrYW5h ICovCisJICAgIGpjb2RlLnhfY2hhcltieXRlb3JkZXJdID0gMHg4ZTsgLyogU1MyICovCisJICAg IGpjb2RlLnhfY2hhclsxLWJ5dGVvcmRlcl0gPSBjMTsgLyogS2FuYSBjb2RlICovCisJfSBlbHNl IHsJCQkvKiBBU0NJSSBvciBDMCAqLworCSAgICBqY29kZS54X3Nob3J0ID0gYzE7CisJfQorICAg IH0gZWxzZSB7CQkJCS8qIFNvbWV0aGluZyBiYWQgKi8KKwlkZWJ1ZyhGMDAxLCJzal90b19ldSBi YWQgc2oiLCIiLHNqKTsKKwlqY29kZS54X3Nob3J0ID0gMHhmZmZmOworICAgIH0KKyAgICByZXR1 cm4oamNvZGUueF9zaG9ydCk7Cit9CisKK2ludAoremthbmpmKCkgewkJCQkvKiBJbml0aWFsaXpl ICovCisgICAganBuc3R6ID0ganBucG5kID0ganBucG50ID0gMDsKKyAgICByZXR1cm4oMCk7Cit9 CisKK2ludAoremthbmp6KCkgeworICAgIHJldHVybigwKTsKK30KKworaW50CisjaWZkZWYgQ0tf QU5TSUMKK3prYW5qaShpbnQgKCpmbikodm9pZCkpCisjZWxzZQoremthbmppKGZuKSBpbnQgKCpm bikoKTsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB6a2FuamkgKi8KKyAgICAvKiBSZWFk IEphcGFuZXNlIGxvY2FsIGNvZGUgYW5kIHRyYW5zbGF0ZSB0byBKYXBhbmVzZSBFVUMgKi8KKyAg ICBpbnQgYTsKKyAgICBpbnQgc2NbM107CisKKyAgICAvKiBObyBwZW5kaW5nIGNoYXJhY3RlcnMg Ki8KKyAgICBpZiAoZmNoYXJzZXQgPT0gRkNfU0hKSVMpIHsJCS8qIFRyYW5zbGF0aW5nIGZyb20g U2hpZnQtSklTICovCisgICAgICAgIGlmIChqcG5wbmQpIHsKKyAgICAgICAgICAgIGpwbnBuZC0t OworICAgICAgICAgICAgcmV0dXJuKGpwbnBiZltqcG5wbnQrK10pOworICAgICAgICB9CisgICAg ICAgIGEgPSAoKmZuKSgpOworCWpwbnBuZCA9IGpwbnBudCA9IDA7CisJaWYgKCgoYSA+PSAweDgx KSAmJiAoYSA8PSAweDlmKSkgfHwKKwkgICAgKChhID49IDB4ZTApICYmIChhIDw9IDB4ZmMpKSkg eyAvKiAyLWJ5dGUgS2FuamkgY29kZSAqLworCSAgICBzY1swXSA9IGE7CisJICAgIGlmICgoc2Nb MV0gPSAoKmZuKSgpKSA8IDApCS8qIEdldCBzZWNvbmQgYnl0ZSAqLworCSAgICAgIHJldHVybihz Y1sxXSk7CisJICAgIGlmIChzY1swXSA8PSAweDlmKQorCSAgICAgIHNjWzBdIC09IDB4NzE7CisJ ICAgIGVsc2UKKwkgICAgICBzY1swXSAtPSAweGIxOworCSAgICBzY1swXSA9IHNjWzBdICogMiAr IDE7CisJICAgIGlmIChzY1sxXSA+IDB4N2YpCisJICAgICAgc2NbMV0tLTsKKwkgICAgaWYgKHNj WzFdID49IDB4OWUpIHsKKwkgICAgICAgIHNjWzFdIC09IDB4N2Q7CisJICAgICAgICBzY1swXSsr OworCSAgICB9IGVsc2UgeworCSAgICAgICAgc2NbMV0gLT0gMHgxZjsKKwkgICAgfQorCSAgICBh ID0gKHNjWzBdIHwgMHg4MCk7CisJICAgIGpwbnBiZlswXSA9IChzY1sxXSB8IDB4ODApOworCSAg ICBqcG5wbmQgPSAxOworCSAgICBqcG5wbnQgPSAwOworCX0gZWxzZSBpZiAoKGEgPj0gMHhhMSkg JiYgKGEgPD0gMHhkZikpIHsgLyogS2F0YWthbmEgKi8KKwkgICAganBucGJmWzBdID0gYTsKKwkg ICAganBucG5kID0gMTsKKwkgICAganBucG50ID0gMDsKKwkgICAgYSA9IDB4OGU7CisJfQorCXJl dHVybihhKTsKKyAgICB9IGVsc2UgaWYgKGZjaGFyc2V0ID09IEZDX0pJUzcgKSB7CS8qIDctYml0 IEpJUyBYIDAyMDggKi8KKyAgICAgICAgaWYgKGpwbnBuZCkgeworICAgICAgICAgICAgYSA9IGpw bnBiZltqcG5wbnQrK107CisJICAgIGpwbnBuZC0tOworICAgICAgICAgICAgcmV0dXJuKGEpOwor ICAgICAgICB9CisgICAgICAgIGpwbnBudCA9IDA7CisgICAgICAgIGlmICgoYSA9ICgqZm4pKCkp IDwgMCkKKwkgIHJldHVybihhKTsKKyAgICAgICAgd2hpbGUgKGpwbnBuZCA9PSAwKSB7CisgICAg ICAgICAgICBpZiAoKGEgPiAweDIwKSAmJiAoYSA8IDB4N2YpKSB7CisgICAgICAgICAgICAgICAg c3dpdGNoIChqcG5zdHopIHsKKwkJICBjYXNlIDE6CisJCSAgICBqcG5wYmZbanBucG5kKytdID0g MHg4MDsgLyogS2F0YWthbmEgKi8KKwkJICAgIGpwbnBiZltqcG5wbmQrK10gPSAoYSB8IDB4ODAp OworCQkgICAgYnJlYWs7CisJCSAgY2FzZSAyOgorCQkgICAganBucGJmW2pwbnBuZCsrXSA9IChh IHwgMHg4MCk7IC8qIEthbmppICovCisJCSAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCisJCSAg ICAgIHJldHVybihhKTsKKwkJICAgIGpwbnBiZltqcG5wbmQrK10gPSAoYSB8IDB4ODApOworCQkg ICAgYnJlYWs7CisJCSAgZGVmYXVsdDoKKwkJICAgIGpwbnBiZltqcG5wbmQrK10gPSBhOyAvKiBT aW5nbGUgYnl0ZSAqLworCQkgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfSBlbHNlIGlmIChhID09IDB4MGUpIHsKKyAgICAgICAgICAgICAgICBqcG5zdHogPSAxOwor ICAgICAgICAgICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKKwkJICByZXR1cm4oYSk7Cisg ICAgICAgICAgICB9IGVsc2UgaWYgKGEgPT0gMHgwZikgeworICAgICAgICAgICAgICAgIGpwbnN0 eiA9IDA7CisgICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQorCQkgIHJldHVy bihhKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYSA9PSAweDFiKSB7CisgICAgICAgICAgICAg ICAganBucGJmW2pwbnBuZCsrXSA9IGE7CS8qIEVzY2FwZSAqLworICAgICAgICAgICAgICAgIGlm ICgoYSA9ICgqZm4pKCkpIDwgMCkKKwkJICByZXR1cm4oYSk7CisgICAgICAgICAgICAgICAganBu cGJmW2pwbnBuZCsrXSA9IGE7CisgICAgICAgICAgICAgICAgaWYgKGEgPT0gJyQnKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKKwkJICAgICAgcmV0dXJuKGEp OworICAgICAgICAgICAgICAgICAgICBqcG5wYmZbanBucG5kKytdID0gYTsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKChhID09ICdAJykgfHwgKGEgPT0gJ0InKSkgeworICAgICAgICAgICAgICAg ICAgICAgICAganBuc3R6ID0gMjsKKwkJCWpwbnBudCA9IGpwbnBuZCA9IDA7CisgICAgICAgICAg ICAgICAgICAgICAgICBpZiAoKGEgPSAoKmZuKSgpKSA8IDApCisJCQkgIHJldHVybihhKTsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYSA9PSAnKCcp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQorCQkgICAgICBy ZXR1cm4oYSk7CisgICAgICAgICAgICAgICAgICAgIGpwbnBiZltqcG5wbmQrK10gPSBhOworICAg ICAgICAgICAgICAgICAgICBpZiAoKGEgPT0gJ0InKSB8fCAoYSA9PSAnSicpKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBqcG5zdHogPSAwOworCQkJanBucG50ID0ganBucG5kID0gMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmICgoYSA9ICgqZm4pKCkpIDwgMCkKKwkJCSAgcmV0dXJu KGEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChh ID09IDB4MWIpIHsKKyAgICAgICAgICAgICAgICAgICAganBucG50ID0ganBucG5kID0gMDsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKChhID0gKCpmbikoKSkgPCAwKQorCQkgICAgICByZXR1cm4o YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBqcG5wYmZbanBucG5kKytdID0gYTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICBqcG5wbnQgPSAwOworICAgICAgICBhID0ganBucGJmW2pwbnBudCsrXTsKKwlqcG5wbmQt LTsKKyAgICAgICAgcmV0dXJuKGEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGEgPSAoKmZuKSgp OworICAgICAgICByZXR1cm4oYSk7CisgICAgfQorfQorI2VuZGlmIC8qIEtBTkpJICovCisKKy8q IEV1cm8gZnVuY3Rpb25zICovCisKKyNpZmRlZiBMQVRJTjIKK0NIQVIKKyNpZmRlZiBDS19BTlNJ QworeGwybDkoQ0hBUiBjKQorI2Vsc2UKK3hsMmw5KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19B TlNJQyAqLworeyAvKiB4bDJsOSAqLyAJCQkJLyogTGF0aW4tMiB0byBMYXRpbi05Li4uICovCisg ICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDE2OTogcmV0dXJuKChDSEFSKTE2Nik7CS8qIFMg Y2Fyb24gKi8KKyAgICAgIGNhc2UgMTg1OiByZXR1cm4oKENIQVIpMTY4KTsJLyogcyBjYXJvbiAq LworICAgICAgY2FzZSAxNzQ6IHJldHVybigoQ0hBUikxODApOwkvKiBaIGNhcm9uICovCisgICAg ICBjYXNlIDE5MDogcmV0dXJuKChDSEFSKTE4NCk7CS8qIHogY2Fyb24gKi8KKyAgICAgIGRlZmF1 bHQ6CisJcmV0dXJuKHlsMmwxW2NdKTsKKyAgICB9CisKK30KKworX1BST1RPVFlQKCBDSEFSIHhs MjU4LCAoIENIQVIgKSApOworQ0hBUgorI2lmZGVmIENLX0FOU0lDCit4bDI1OChDSEFSIGMpCisj ZWxzZQoreGwyNTgoYykgQ0hBUiBjOworI2VuZGlmIC8qIENLX0FOU0lDICovCit7IC8qIHhsMjU4 ICovIAkJCQkvKiBMYXRpbi0yIHRvIENQODU4Li4uICovCisgICAgcmV0dXJuKGMpOworfQorI2Vs c2UKKyNkZWZpbmUgeGwybDkgTlVMTAorI2RlZmluZSB4bDI1OCBOVUxMCisjZW5kaWYgLyogTEFU SU4yICovCisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworemw5YXMoQ0hBUiBjKQorI2Vsc2UKK3ps OWFzKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB6bDlhcyAqLyAJCQkJ LyogTGF0aW4tOSB0byBVUyBBU0NJSS4uLiAqLworICAgIGlmIChjIDwgKENIQVIpMHg4MCkgcmV0 dXJuKGMpOwkvKiBTYXZlIGEgZnVuY3Rpb24gY2FsbCAqLworICAgIHN3aXRjaCAoYykgeworICAg ICAgY2FzZSAweGE0OiByZXR1cm4oVU5LKTsJCS8qIEV1cm8gKi8KKyAgICAgIGNhc2UgMHhhNjog cmV0dXJuKCdTJyk7CQkvKiBTIENhcm9uICovCisgICAgICBjYXNlIDB4YTg6IHJldHVybigncycp OwkJLyogcyBDYXJvbiAqLworICAgICAgY2FzZSAweGI0OiByZXR1cm4oJ1onKTsJCS8qIFogQ2Fy b24gKi8KKyAgICAgIGNhc2UgMHhiYzogcmV0dXJuKCdPJyk7CQkvKiBPRSBkaWdyYXBoICovCisg ICAgICBjYXNlIDB4YmQ6IHJldHVybignbycpOwkJLyogb2UgZGlncmFwaCAqLworICAgICAgY2Fz ZSAweGJlOiByZXR1cm4oJ1knKTsJCS8qIFkgZGlhZXJlc2lzICovCisgICAgICBkZWZhdWx0OiAg IHJldHVybih6bDFhcyhjKSk7CS8qIFRoZSByZXN0IGlzIGxpa2UgTGF0aW4tMSAqLworICAgIH0K K30KKworX1BST1RPVFlQKCBDSEFSIHhsOWFzLCAoIENIQVIgKSApOworQ0hBUgorI2lmZGVmIENL X0FOU0lDCit4bDlhcyhDSEFSIGMpCisjZWxzZQoreGw5YXMoYykgQ0hBUiBjOworI2VuZGlmIC8q IENLX0FOU0lDICovCit7IC8qIHhsOWFzICovIAkJCQkvKiBMYXRpbi05IHRvIFVTIEFTQ0lJLi4u ICovCisgICAgaWYgKGMgPCAoQ0hBUikweDgwKSByZXR1cm4oYyk7CS8qIFNhdmUgYSBmdW5jdGlv biBjYWxsICovCisgICAgc3dpdGNoIChjKSB7CisgICAgICBjYXNlIDB4YTQ6IHJldHVybihVTksp OwkJLyogRXVybyAqLworICAgICAgY2FzZSAweGE2OiByZXR1cm4oJ1MnKTsJCS8qIFMgQ2Fyb24g Ki8KKyAgICAgIGNhc2UgMHhhODogcmV0dXJuKCdzJyk7CQkvKiBzIENhcm9uICovCisgICAgICBj YXNlIDB4YjQ6IHJldHVybignWicpOwkJLyogWiBDYXJvbiAqLworICAgICAgY2FzZSAweGI4OiBy ZXR1cm4oJ3onKTsJCS8qIHogQ2Fyb24gKi8KKyAgICAgIGNhc2UgMHhiYzogcmV0dXJuKCdPJyk7 CQkvKiBPRSBkaWdyYXBoICovCisgICAgICBjYXNlIDB4YmQ6IHJldHVybignbycpOwkJLyogb2Ug ZGlncmFwaCAqLworICAgICAgY2FzZSAweGJlOiByZXR1cm4oJ1knKTsJCS8qIFkgZGlhZXJlc2lz ICovCisgICAgICBkZWZhdWx0OiAgIHJldHVybih4bDFhcyhjKSk7CS8qIFRoZSByZXN0IGlzIGxp a2UgTGF0aW4tMSAqLworICAgIH0KK30KKworQ0hBUgkJCQkJLyogQ1AxMjUyIHRvIExhdGluLTkg Ki8KKyNpZmRlZiBDS19BTlNJQworeHcxbDkoQ0hBUiBjKQorI2Vsc2UKK3h3MWw5KGMpIENIQVIg YzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4dzFsOSAqLworICAgIHN3aXRjaCAoYykg eworICAgICAgY2FzZSAweDgwOiByZXR1cm4oMHhhNCk7CQkvKiBFdXJvIHNpZ24gKi8KKyAgICAg IGNhc2UgMHg4YTogcmV0dXJuKDB4YTYpOwkJLyogUyBjYXJvbiAqLworICAgICAgY2FzZSAweDhj OiByZXR1cm4oMHhiYyk7CQkvKiBPRSAqLworICAgICAgY2FzZSAweDhlOiByZXR1cm4oMHhiNCk7 CQkvKiBaIGNhcm9uICovCisgICAgICBjYXNlIDB4OWE6IHJldHVybigweGE4KTsJCS8qIHMgY2Fy b24gKi8KKyAgICAgIGNhc2UgMHg5YzogcmV0dXJuKDB4YmQpOwkJLyogb2UgKi8KKyAgICAgIGNh c2UgMHg5ZTogcmV0dXJuKDB4YjgpOwkJLyogeiBjYXJvbiAqLworICAgICAgY2FzZSAweDlmOiBy ZXR1cm4oMHhiZSk7CQkvKiBZIGRpYWVyZXNpcyAqLworICAgICAgY2FzZSAweGE0OgkJCS8qIEN1 cnJlbmN5IHNpZ24gKi8KKyAgICAgIGNhc2UgMHhhNjoJCQkvKiBCcm9rZW4gdmVydGljYWwgYmFy ICovCisgICAgICBjYXNlIDB4YTg6CQkJLyogRGlhZXJlc2lzICovCisgICAgICBjYXNlIDB4YjQ6 CQkJLyogQWN1dGUgYWNjZW50ICovCisgICAgICBjYXNlIDB4Yjg6CQkJLyogQ2VkaWxsYSAqLwor ICAgICAgY2FzZSAweGJjOgkJCS8qIDEvNCAqLworICAgICAgY2FzZSAweGJkOgkJCS8qIDEvMiAq LworICAgICAgY2FzZSAweGJlOiByZXR1cm4oJz8nKTsJCS8qIDMvNCAqLworICAgICAgZGVmYXVs dDogcmV0dXJuKChjIDwgMTYwKSA/IHh3MWFzKGMpIDogYyk7CisgICAgfQorfQorCisjaWZkZWYg TEFUSU4yCitDSEFSCisjaWZkZWYgQ0tfQU5TSUMKK3hsOWwyKENIQVIgYykKKyNlbHNlCit4bDls MihjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sgLyogeGw5bDIgKi8gCQkJCS8q IExhdGluLTkgdG8gTGF0aW4tMi4uLiAqLworICAgIGlmIChjIDwgKENIQVIpMHg4MCkgcmV0dXJu KGMpOwkvKiBTYXZlIGEgZnVuY3Rpb24gY2FsbCAqLworICAgIHN3aXRjaCAoYykgeworICAgICAg Y2FzZSAweGE0OiByZXR1cm4oVU5LKTsJCS8qIEV1cm8gKi8KKyAgICAgIGNhc2UgMHhhNjogcmV0 dXJuKChDSEFSKTB4YTkpOwkvKiBTIENhcm9uICovCisgICAgICBjYXNlIDB4YTg6IHJldHVybigo Q0hBUikweGI5KTsJLyogcyBDYXJvbiAqLworICAgICAgY2FzZSAweGI0OiByZXR1cm4oKENIQVIp MHhhZSk7CS8qIFogQ2Fyb24gKi8KKyAgICAgIGNhc2UgMHhiODogcmV0dXJuKChDSEFSKTB4YWYp OwkvKiB6IENhcm9uICovCisgICAgICBjYXNlIDB4YmM6IHJldHVybignTycpOwkJLyogT0UgZGln cmFwaCAqLworICAgICAgY2FzZSAweGJkOiByZXR1cm4oJ28nKTsJCS8qIG9lIGRpZ3JhcGggKi8K KyAgICAgIGNhc2UgMHhiZTogcmV0dXJuKCdZJyk7CQkvKiBZIGRpYWVyZXNpcyAqLworICAgICAg ZGVmYXVsdDogICByZXR1cm4oeGwxbDIoYykpOwkvKiBUaGUgcmVzdCBpcyBsaWtlIExhdGluLTEg Ki8KKyAgICB9Cit9CisjZWxzZQorI2RlZmluZSB4bDlsMiBOVUxMCisjZW5kaWYgLyogTEFUSU4y ICovCisKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeGw5NTgoQ0hBUiBjKQorI2Vsc2UKK3hsOTU4 KGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4bDk1OCAqLyAJCQkJLyog TGF0aW4tOSB0byBDUDg1OC4uLiAqLworICAgIGlmIChjID09IDB4YTQpCQkJLyogRXVybyBTeW1i b2wgKi8KKyAgICAgIHJldHVybigoQ0hBUikweGQ1KTsKKyAgICBlbHNlIGlmIChjID09IDB4OWUp CQkJLyogVGhpcyB3YXMgY3VycmVuY3kgc3ltYm9sICovCisgICAgICByZXR1cm4oKENIQVIpMHhj Zik7CisgICAgYyA9IHlsMTg1W2NdOworICAgIHJldHVybihjKTsKK30KKworQ0hBUgorI2lmZGVm IENLX0FOU0lDCit4NThhcyhDSEFSIGMpCisjZWxzZQoreDU4YXMoYykgQ0hBUiBjOworI2VuZGlm IC8qIENLX0FOU0lDICovCit7IC8qIHg1OGFzICovIAkJCQkvKiBDUDg1OCB0byBVUyBBU0NJSS4u LiAqLworICAgIGlmIChjID09IDB4ZDUpCQkJLyogRXVybyByYXRoZXIgdGhhbiBkb3RsZXNzIGkg Ki8KKyAgICAgIHJldHVybihVTkspOworICAgIGVsc2UKKyAgICAgIHJldHVybih4ODVhcyhjKSk7 CQkJLyogVGhlIHJlc3QgaXMgbGlrZSBDUDg1MCAqLworfQorCitDSEFSCisjaWZkZWYgQ0tfQU5T SUMKK3g1OGwxKENIQVIgYykKKyNlbHNlCit4NThsMShjKSBDSEFSIGM7CisjZW5kaWYgLyogQ0tf QU5TSUMgKi8KK3sgLyogeDU4bDEgKi8gCQkJCS8qIENQODU4IHRvIExhdGluLTEuLi4gKi8KKyAg ICBpZiAoYyA9PSAweGQ1KQkJCS8qIEV1cm8gcmF0aGVyIHRoYW4gZG90bGVzcyBpICovCisgICAg ICByZXR1cm4oKENIQVIpMHhhNCk7CQkvKiBSZXR1cm4gY3VycmVuY3kgc3ltYm9sICovCisgICAg ZWxzZSBpZiAoYyA9PSAweGNmKQkJCS8qIFRoaXMga2VlcHMgaXQgaW52ZXJ0aWJsZSAqLworICAg ICAgcmV0dXJuKChDSEFSKTB4OWUpOworICAgIGVsc2UKKyAgICAgIHJldHVybih4ODVsMShjKSk7 Cit9CisKKyNpZmRlZiBMQVRJTjIKK0NIQVIKKyNpZmRlZiBDS19BTlNJQworeDU4bDIoQ0hBUiBj KQorI2Vsc2UKK3g1OGwyKGMpIENIQVIgYzsKKyNlbmRpZiAvKiBDS19BTlNJQyAqLworeyAvKiB4 NThsMiAqLyAJCQkJLyogQ1A4NTggdG8gTGF0aW4tMi4uLiAqLworICAgIGlmIChjID09IDB4ZDUp CQkJLyogRXVybyByYXRoZXIgdGhhbiBkb3RsZXNzIGkgKi8KKyAgICAgIHJldHVybigoQ0hBUikw eGE0KTsJCS8qIFJldHVybiBjdXJyZW5jeSBzeW1ib2wgKi8KKyAgICBlbHNlIGlmIChjID09IDB4 Y2YpCQkJLyogVGhpcyBrZWVwcyBpdCBpbnZlcnRpYmxlICovCisgICAgICByZXR1cm4oKENIQVIp MHg5ZSk7CQkvKiAoaWYgaXQgZXZlciB3YXMuLi4pICovCisgICAgZWxzZQkJCQkvKiBPdGhlcndp c2UgbGlrZSBDUDg1MCAqLworICAgICAgcmV0dXJuKHg4NWwyKGMpKTsKK30KKyNlbHNlCisjZGVm aW5lIHg1OGwyIE5VTEwKKyNlbmRpZiAvKiBMQVRJTjIgKi8KKworQ0hBUgorI2lmZGVmIENLX0FO U0lDCit4NThsOShDSEFSIGMpCisjZWxzZQoreDU4bDkoYykgQ0hBUiBjOworI2VuZGlmIC8qIENL X0FOU0lDICovCit7IC8qIHg1OGw5ICovIAkJCQkvKiBDUC04NTggdG8gTGF0aW4tOS4uLiAqLwor ICAgIGlmIChjID09IDB4ZDUpCQkJLyogRXVybyByYXRoZXIgdGhhbiBkb3RsZXNzIGkgKi8KKyAg ICAgIHJldHVybigoQ0hBUikweGE0KTsJCS8qIFJldHVybiBjdXJyZW5jeSBzeW1ib2wgKi8KKyAg ICBlbHNlIGlmIChjID09IDB4Y2YpCQkJLyogVGhpcyBrZWVwcyBpdCBpbnZlcnRpYmxlICovCisg ICAgICByZXR1cm4oKENIQVIpMHg5ZSk7CQkvKiAoaWYgaXQgZXZlciB3YXMuLi4pICovCisgICAg ZWxzZQkJCQkvKiBPdGhlcndpc2UgbGlrZSBDUDg1MCAqLworICAgICAgcmV0dXJuKHg4NWwxKGMp KTsJCQkvKiB0byBMYXRpbi0xICovCit9CisKKy8qIEVuZCBFdXJvIGZ1bmN0aW9ucyAqLworCisK Ky8qICBUQUJMRVMgT0YgVFJBTlNMQVRJT04gRlVOQ1RJT05TICovCisKKy8qCisgIEZpcnN0LCB0 aGUgdGFibGUgb2YgdHJhbnNsYXRpb24gZnVuY3Rpb25zIGZvciBSRUNFSVZJTkcgZmlsZXMuICBU aGF0IGlzLAorICAqZnJvbSogdGhlIFRSQU5TRkVSIGNoYXJhY3RlciBzZXQgKnRvKiB0aGUgRklM RSBjaGFyYWN0ZXIgc2V0LCBhbiBhcnJheSBvZgorICBwb2ludGVycyB0byBmdW5jdGlvbnMuICBU aGUgZmlyc3QgaW5kZXggaXMgdGhlIFRSQU5TRkVSIENIQVJBQ1RFUi1TRVQKKyAgbnVtYmVyLCB0 aGUgc2Vjb25kIGluZGV4IGlzIHRoZSBGSUxFIENIQVJBQ1RFUi1TRVQgbnVtYmVyLgorCisgIFRo ZXNlIGFycmF5cyBtdXN0IGJlIGZ1bGx5IHBvcHVsYXRlZCwgZXZlbiBpZiAoYXMgaXMgdGhlIGNh c2Ugd2l0aCBLYW5qaQorICBjaGFyYWN0ZXIgc2V0cyksIGFsbCB0aGUgZW50cmllcyBhcmUgTlVM TC4gIE90aGVyd2lzZSwgc3Vic2NyaXB0CisgIGNhbGN1bGF0aW9ucyB3aWxsIGJlIHdyb25nIGFu ZCB3ZSdsbCB1c2UgdGhlIHdyb25nIGZ1bmN0aW9ucy4KKyovCisKKy8qIFBvaW50ZXJzIHRvIGJ5 dGUtZm9yLWJ5dGUgdHJhbnNsYXRpb24gZnVuY3Rpb25zICovCisKK19QUk9UT1RZUCggQ0hBUiAo KnJ4KSwgKENIQVIpICk7CitfUFJPVE9UWVAoIENIQVIgKCpzeCksIChDSEFSKSApOworCisjaWZk ZWYgVU5JQ09ERQorX1BST1RPVFlQKCBpbnQgKCp4dXQpLCAoVVNIT1JUKSApOwkvKiBUcmFuc2xh dGlvbiBmdW5jdGlvbiBVQ1MgdG8gVENTICovCitfUFJPVE9UWVAoIGludCAoKnh1ZiksIChVU0hP UlQpICk7CS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIFVDUyB0byBGQ1MgKi8KK19QUk9UT1RZUCgg VVNIT1JUICgqeHR1KSwgKENIQVIpICk7CS8qIFRyYW5zbGF0aW9uIGZ1bmN0aW9uIFRDUyB0byBV Q1MgKi8KK19QUk9UT1RZUCggVVNIT1JUICgqeGZ1KSwgKENIQVIpICk7CS8qIFRyYW5zbGF0aW9u IGZ1bmN0aW9uIEZDUyB0byBVQ1MgKi8KKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyNpZmRlZiBD S19BTlNJQworQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKShDSEFSKSA9Cisj ZWxzZQorQ0hBUiAoKnhscltNQVhUQ1NFVFMrMV1bTUFYRkNTRVRTKzFdKSgpID0KKyNlbmRpZiAv KiBDS19BTlNJQyAqLworeworICAgIE5VTEwsCQkJLyogMCwwIHRyYW5zcGFyZW50IHRvIHVzIGFz Y2lpICovCisgICAgTlVMTCwJCQkvKiAwLDEgdHJhbnNwYXJlbnQgdG8gdWsgYXNjaWkgKi8KKyAg ICBOVUxMLAkJCS8qIDAsMiB0cmFuc3BhcmVudCB0byBkdXRjaCBucmMgKi8KKyAgICBOVUxMLAkJ CS8qIDAsMyB0cmFuc3BhcmVudCB0byBmaW5uaXNoIG5yYyAqLworICAgIE5VTEwsCQkJLyogMCw0 IHRyYW5zcGFyZW50IHRvIGZyZW5jaCBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDAsNSB0cmFuc3Bh cmVudCB0byBmci1jYW5hZGlhbiBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDAsNiB0cmFuc3BhcmVu dCB0byBnZXJtYW4gbnJjICovCisgICAgTlVMTCwJCQkvKiAwLDcgdHJhbnNwYXJlbnQgdG8gaHVu Z2FyaWFuIG5yYyAqLworICAgIE5VTEwsCQkJLyogMCw4IHRyYW5zcGFyZW50IHRvIGl0YWxpYW4g bnJjICovCisgICAgTlVMTCwJCQkvKiAwLDkgdHJhbnNwYXJlbnQgdG8gbm9yZ2UvZGFuaXNoIG5y YyAqLworICAgIE5VTEwsCQkJLyogMCwxMCB0cmFuc3BhcmVudCB0byBwb3J0dWd1ZXNlIG5yYyAq LworICAgIE5VTEwsCQkJLyogMCwxMSB0cmFuc3BhcmVudCB0byBzcGFuaXNoIG5yYyAqLworICAg IE5VTEwsCQkJLyogMCwxMiB0cmFuc3BhcmVudCB0byBzd2VkaXNoIG5yYyAqLworICAgIE5VTEws CQkJLyogMCwxMyB0cmFuc3BhcmVudCB0byBzd2lzcyBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDAs MTQgdHJhbnNwYXJlbnQgdG8gbGF0aW4tMSAqLworICAgIE5VTEwsCQkJLyogMCwxNSB0cmFuc3Bh cmVudCB0byBsYXRpbi0yICovCisgICAgTlVMTCwJCQkvKiAwLDE2IHRyYW5zcGFyZW50IHRvIERF QyBNQ1MgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTcgdHJhbnNwYXJlbnQgdG8gTmVYVCAqLworICAg IE5VTEwsCQkJLyogMCwxOCB0cmFuc3BhcmVudCB0byBDUDQzNyAqLworICAgIE5VTEwsCQkJLyog MCwxOSB0cmFuc3BhcmVudCB0byBDUDg1MCAqLworICAgIE5VTEwsCQkJLyogMCwyMCB0cmFuc3Bh cmVudCB0byBDUDg1MiAqLworICAgIE5VTEwsCQkJLyogMCwyMSB0cmFuc3BhcmVudCB0byBNYWNp bnRvc2ggTGF0aW4gKi8KKyAgICBOVUxMLAkJCS8qIDAsMjIgdHJhbnNwYXJlbnQgdG8gREdJICov CisgICAgTlVMTCwJCQkvKiAwLDIzIHRyYW5zcGFyZW50IHRvIEhQICovCisgICAgTlVMTCwJCQkv KiAwLDI0IHRyYW5zcGFyZW50IHRvIExhdGluL0N5cmlsbGljICovCisgICAgTlVMTCwgICAgICAg ICAgICAgICAgICAgICAgIC8qIDAsMjUgdHJhbnNwYXJlbnQgdG8gQ1A4NjYgKi8KKyAgICBOVUxM LAkJCS8qIDAsMjYgdHJhbnNwYXJlbnQgdG8gU2hvcnQgS09JLTcgKi8KKyAgICBOVUxMLCAgICAg ICAgICAgICAgICAgICAgICAgLyogMCwyNyB0cmFuc3BhcmVudCB0byBPbGQgS09JLTggQ3lyaWxs aWMgKi8KKyAgICBOVUxMLAkJCS8qIDAsMjggdHJhbnNwYXJlbnQgdG8gSklTLTcgKi8KKyAgICBO VUxMLAkJCS8qIDAsMjkgdHJhbnNwYXJlbnQgdG8gU2hpZnQtSklTICovCisgICAgTlVMTCwJCQkv KiAwLDMwIHRyYW5zcGFyZW50IHRvIEotRVVDICovCisgICAgTlVMTCwJCQkvKiAwLDMxIHRyYW5z cGFyZW50IHRvIERFQyBLYW5qaSAqLworICAgIE5VTEwsCQkJLyogMCwzMiB0cmFuc3BhcmVudCB0 byBIZWJyZXctNyAqLworICAgIE5VTEwsCQkJLyogMCwzMyB0cmFuc3BhcmVudCB0byBMYXRpbi9I ZWJyZXcgKi8KKyAgICBOVUxMLAkJCS8qIDAsMzQgdHJhbnNwYXJlbnQgdG8gQ1A4NjIgSGVicmV3 ICovCisgICAgTlVMTCwJCQkvKiAwLDM1IHRyYW5zcGFyZW50IHRvIEVMT1QgOTI3IEdyZWVrICov CisgICAgTlVMTCwJCQkvKiAwLDM2IHRyYW5zcGFyZW50IHRvIExhdGluL0dyZWVrICovCisgICAg TlVMTCwJCQkvKiAwLDM3IHRyYW5zcGFyZW50IHRvIENQODY5ICovCisgICAgTlVMTCwJCQkvKiAw LDM4IHRyYW5zcGFyZW50IHRvIExhdGluLTkgKi8KKyAgICBOVUxMLAkJCS8qIDAsMzkgdHJhbnNw YXJlbnQgdG8gQ1A4NTggKi8KKyAgICBOVUxMLAkJCS8qIDAsNDAgdHJhbnNwYXJlbnQgdG8gQ1A4 NTUgKi8KKyAgICBOVUxMLAkJCS8qIDAsNDEgdHJhbnNwYXJlbnQgdG8gQ1AxMjUxICovCisgICAg TlVMTCwJCQkvKiAwLDQyIHRyYW5zcGFyZW50IHRvIEJ1bGdhcmlhbiAqLworICAgIE5VTEwsCQkJ LyogMCw0MyB0cmFuc3BhcmVudCB0byBDUDEyNTAgKi8KKyAgICBOVUxMLAkJCS8qIDAsNDQgdHJh bnNwYXJlbnQgdG8gTWF6b3ZpYSAqLworICAgIE5VTEwsCQkJLyogMCw0NSB0cmFuc3BhcmVudCB0 byBVQ1MtMiAqLworICAgIE5VTEwsCQkJLyogMCw0NiB0cmFuc3BhcmVudCB0byBVVEYtOCAqLwor ICAgIE5VTEwsCQkJLyogMCw0NyB0cmFuc3BhcmVudCB0byBLT0k4UiAqLworICAgIE5VTEwsCQkJ LyogMCw0OCB0cmFuc3BhcmVudCB0byBLT0k4VSAqLworICAgIE5VTEwsCQkJLyogMCw0OSB0cmFu c3BhcmVudCB0byBDUDEyNTIgKi8KKyAgICBOVUxMLAkJCS8qIDEsMCBhc2NpaSB0byB1cyBhc2Np aSAqLworICAgIE5VTEwsCQkJLyogMSwxIGFzY2lpIHRvIHVrIGFzY2lpICovCisgICAgTlVMTCwJ CQkvKiAxLDIgYXNjaWkgdG8gZHV0Y2ggbnJjICovCisgICAgTlVMTCwJCQkvKiAxLDMgYXNjaWkg dG8gZmlubmlzaCBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDEsNCBhc2NpaSB0byBmcmVuY2ggbnJj ICovCisgICAgTlVMTCwJCQkvKiAxLDUgYXNjaWkgdG8gZnItY2FuYWRpYW4gbnJjICovCisgICAg TlVMTCwJCQkvKiAxLDYgYXNjaWkgdG8gZ2VybWFuIG5yYyAqLworICAgIE5VTEwsCQkJLyogMSw3 IGFzY2lpIHRvIGh1bmdhcmlhbiBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDEsOCBhc2NpaSB0byBp dGFsaWFuIG5yYyAqLworICAgIE5VTEwsCQkJLyogMSw5IGFzY2lpIHRvIG5vcmdlL2RhbmlzaCBu cmMgKi8KKyAgICBOVUxMLAkJCS8qIDEsMTAgYXNjaWkgdG8gcG9ydHVndWVzZSBucmMgKi8KKyAg ICBOVUxMLAkJCS8qIDEsMTEgYXNjaWkgdG8gc3BhbmlzaCBucmMgKi8KKyAgICBOVUxMLAkJCS8q IDEsMTIgYXNjaWkgdG8gc3dlZGlzaCBucmMgKi8KKyAgICBOVUxMLAkJCS8qIDEsMTMgYXNjaWkg dG8gc3dpc3MgbnJjICovCisgICAgTlVMTCwJCQkvKiAxLDE0IGFzY2lpIHRvIGxhdGluLTEgKi8K KyAgICBOVUxMLAkJCS8qIDEsMTUgYXNjaWkgdG8gbGF0aW4tMiAqLworICAgIE5VTEwsCQkJLyog MSwxNiBhc2NpaSB0byBERUMgTUNTICovCisgICAgTlVMTCwJCQkvKiAxLDE3IGFzY2lpIHRvIE5l WFQgKi8KKyAgICBOVUxMLAkJCS8qIDEsMTggYXNjaWkgdG8gQ1A0MzcgKi8KKyAgICBOVUxMLAkJ CS8qIDEsMTkgYXNjaWkgdG8gQ1A4NTAgKi8KKyAgICBOVUxMLAkJCS8qIDEsMjAgYXNjaWkgdG8g Q1A4NTIgKi8KKyAgICBOVUxMLAkJCS8qIDEsMjEgYXNjaWkgdG8gTWFjaW50b3NoIExhdGluICov CisgICAgTlVMTCwJCQkvKiAxLDIyIGFzY2lpIHRvIERHSSAqLworICAgIE5VTEwsCQkJLyogMSwy MyBhc2NpaSB0byBIUCAqLworICAgIHhhc2xjLCAgICAgICAgICAgICAgICAgICAgICAvKiAxLDI0 IGFzY2lpIHRvIExhdGluL0N5cmlsbGljICovCisgICAgeGFzYWMsICAgICAgICAgICAgICAgICAg ICAgIC8qIDEsMjUgYXNjaWkgdG8gQ1A4NjYgKi8KKyAgICB4YXNzaywgICAgICAgICAgICAgICAg ICAgICAgLyogMSwyNiBhc2NpaSB0byBTaG9ydCBLT0kgKi8KKyAgICB4YXNrOCwgICAgICAgICAg ICAgICAgICAgICAgLyogMSwyNyBhc2NpaSB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KKyAgICBO VUxMLAkJCS8qIDEsMjggYXNjaWkgdG8gSklTLTcgKi8KKyAgICBOVUxMLAkJCS8qIDEsMjkgYXNj aWkgdG8gU2hpZnQtSklTICovCisgICAgTlVMTCwJCQkvKiAxLDMwIGFzY2lpIHRvIEotRVVDICov CisgICAgTlVMTCwJCQkvKiAxLDMxIGFzY2lpIHRvIERFQyBLYW5qaSAqLworICAgIHhhc2g3LAkJ CS8qIDEsMzIgYXNjaWkgdG8gSGVicmV3LTcgKi8KKyAgICBOVUxMLAkJCS8qIDEsMzMgYXNjaWkg dG8gTGF0aW4vSGVicmV3ICovCisgICAgTlVMTCwJCQkvKiAxLDM0IGFzY2lpIHRvIENQODYyIEhl YnJldyAqLworICAgIHhhc2VnLAkJCS8qIDEsMzUgYXNjaWkgdG8gRUxPVCA5MjcgR3JlZWsgKi8K KyAgICBOVUxMLAkJCS8qIDEsMzYgYXNjaWkgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICBOVUxMLAkJ CS8qIDEsMzcgYXNjaWkgdG8gQ1A4NjkgKi8KKyAgICBOVUxMLAkJCS8qIDEsMzggYXNjaWkgdG8g TGF0aW4tOSAqLworICAgIE5VTEwsCQkJLyogMSwzOSBhc2NpaSB0byBDUDg1OCAqLworICAgIHhh czU1LAkJCS8qIDEsNDAgYXNjaWkgdG8gQ1A4NTUgKi8KKyAgICB4YXMxMjUxLAkJCS8qIDEsNDEg YXNjaWkgdG8gQ1AxMjUxICovCisgICAgeGxlZnQxMjgsCQkJLyogMSw0MiBhc2NpaSB0byBidWxn YXJpYW4gKi8KKyAgICB4bGVmdDEyOCwJCQkvKiAxLDQzIGFzY2lpIHRvIENQMTI1MCAqLworICAg IHhsZWZ0MTI4LAkJCS8qIDEsNDQgYXNjaWkgdG8gTWF6b3ZpYSAqLworICAgIE5VTEwsCQkJLyog MSw0NSBhc2NpaSB0byBVQ1MtMiAqLworICAgIE5VTEwsCQkJLyogMSw0NiBhc2NpaSB0byBVVEYt OCAqLworICAgIE5VTEwsCQkJLyogMSw0NyBhc2NpaSB0byBLT0k4LVIgKi8KKyAgICBOVUxMLAkJ CS8qIDEsNDggYXNjaWkgdG8gS09JOC1VICovCisgICAgTlVMTCwJCQkvKiAxLDQ5IGFzY2lpIHRv IENQMTI1MiAqLworICAgIHpsMWFzLAkJCS8qIDIsMCBsYXRpbi0xIHRvIHVzIGFzY2lpICovCisg ICAgeGwxdWssCQkJLyogMiwxIGxhdGluLTEgdG8gdWsgYXNjaWkgKi8KKyAgICB4bDFkdSwJCQkv KiAyLDIgbGF0aW4tMSB0byBkdXRjaCBucmMgKi8KKyAgICB4bDFmaSwJCQkvKiAyLDMgbGF0aW4t MSB0byBmaW5uaXNoIG5yYyAqLworICAgIHhsMWZyLAkJCS8qIDIsNCBsYXRpbi0xIHRvIGZyZW5j aCBucmMgKi8KKyAgICB4bDFmYywJCQkvKiAyLDUgbGF0aW4tMSB0byBmci1jYW5hZGlhbiBucmMg Ki8KKyAgICB4bDFnZSwJCQkvKiAyLDYgbGF0aW4tMSB0byBnZXJtYW4gbnJjICovCisgICAgeGwx aXQsCQkJLyogMiw3IGxhdGluLTEgdG8gaXRhbGlhbiBucmMgKi8KKyAgICB4bDFodSwJCQkvKiAy LDggbGF0aW4tMSB0byBodW5nYXJpYW4gbnJjICovCisgICAgeGwxbm8sCQkJLyogMiw5IGxhdGlu LTEgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLworICAgIHhsMXBvLAkJCS8qIDIsMTAgbGF0aW4tMSB0 byBwb3J0dWd1ZXNlIG5yYyAqLworICAgIHhsMXNwLAkJCS8qIDIsMTEgbGF0aW4tMSB0byBzcGFu aXNoIG5yYyAqLworICAgIHhsMXN3LAkJCS8qIDIsMTIgbGF0aW4tMSB0byBzd2VkaXNoIG5yYyAq LworICAgIHhsMWNoLAkJCS8qIDIsMTMgbGF0aW4tMSB0byBzd2lzcyBucmMgKi8KKyAgICBOVUxM LAkJCS8qIDIsMTQgbGF0aW4tMSB0byBsYXRpbi0xICovCisgICAgeGwxbDIsCQkJLyogMiwxNSBs YXRpbi0xIHRvIGxhdGluLTIgKi8KKyAgICB4bDFkbSwJCQkvKiAyLDE2IGxhdGluLTEgdG8gREVD IE1DUyAqLworICAgIHhsMW5lLAkJCS8qIDIsMTcgbGF0aW4tMSB0byBOZVhUICovCisgICAgeGwx NDMsCQkJLyogMiwxOCBsYXRpbi0xIHRvIENQNDM3ICovCisgICAgeGwxODUsCQkJLyogMiwxOSBs YXRpbi0xIHRvIENQODUwICovCisgICAgeGwxNTIsCQkJLyogMiwyMCBsYXRpbi0xIHRvIENQODUy ICovCisgICAgeGwxYXEsCQkJLyogMiwyMSBsYXRpbi0xIHRvIE1hY2ludG9zaCBMYXRpbiAqLwor ICAgIHhsMWRnLAkJCS8qIDIsMjIgbGF0aW4tMSB0byBER0kgKi8KKyAgICB4bDFyOCwJCQkvKiAy LDIzIGxhdGluLTEgdG8gSFAgUm9tYW44ICovCisgICAgemwxYXMsCQkJLyogMiwyNCBsYXRpbi0x IHRvIExhdGluL0N5cmlsbGljICovCisgICAgemwxYXMsICAgICAgICAgICAgICAgICAgICAgIC8q IDIsMjUgbGF0aW4tMSB0byBDUDg2NiAqLworICAgIHhsMXNrLCAgICAgICAgICAgICAgICAgICAg ICAvKiAyLDI2IGxhdGluLTEgdG8gU2hvcnQgS09JICovCisgICAgemwxYXMsCQkgICAgICAgCS8q IDIsMjcgbGF0aW4tMSB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KKyAgICBOVUxMLAkJCS8qIDIs MjggbGF0aW4tMSB0byBKSVMtNyAqLworICAgIE5VTEwsCQkJLyogMiwyOSBsYXRpbi0xIHRvIFNo aWZ0LUpJUyAqLworICAgIE5VTEwsCQkJLyogMiwzMCBsYXRpbi0xIHRvIEotRVVDICovCisgICAg TlVMTCwJCQkvKiAyLDMxIGxhdGluLTEgdG8gREVDIEthbmppICovCisgICAgeGwxaDcsCQkJLyog MiwzMiBsYXRpbi0xIHRvIEhlYnJldy03ICovCisgICAgeGwxbGgsCQkJLyogMiwzMyBsYXRpbi0x IHRvIExhdGluL0hlYnJldyAqLworICAgIHhsMTYyLAkJCS8qIDIsMzQgbGF0aW4tMSB0byBDUDg2 MiBIZWJyZXcgKi8KKyAgICB4bDFlZywJCQkvKiAyLDM1IGxhdGluLTEgdG8gRUxPVCA5MjcgR3Jl ZWsgKi8KKyAgICB4bDFsZywJCQkvKiAyLDM2IGxhdGluLTEgdG8gTGF0aW4vR3JlZWsgKi8KKyAg ICB4bDE2OSwJCQkvKiAyLDM3IGxhdGluLTEgdG8gQ1A4NjkgKi8KKyAgICBOVUxMLAkJCS8qIDIs MzggbGF0aW4tMSB0byBMYXRpbjkgKi8KKyAgICB4bDE4NSwJCQkvKiAyLDM5IGxhdGluLTEgdG8g Q1A4NTggKi8KKyAgICB6bDFhcywJCQkvKiAyLDQwIGxhdGluLTEgdG8gQ1A4NTUgKi8KKyAgICB6 bDFhcywJCQkvKiAyLDQxIGxhdGluLTEgdG8gQ1AxMjUxICovCisgICAgemwxYXMsCQkJLyogMiw0 MiBsYXRpbi0xIHRvIEJ1bGdhcmlhbiAqLworICAgIHhsMTEyNTAsCQkJLyogMiw0MyBsYXRpbi0x IHRvIENQMTI1MCAqLworICAgIHhsMW16LAkJCS8qIDIsNDQgbGF0aW4tMSB0byBNYXpvdmlhICov CisgICAgTlVMTCwJCQkvKiAyLDQ1IGxhdGluLTEgdG8gVUNTLTIgKi8KKyAgICBOVUxMLAkJCS8q IDIsNDYgbGF0aW4tMSB0byBVVEYtOCAqLworICAgIHpsMWFzLAkJCS8qIDIsNDcgbGF0aW4tMSB0 byBLT0k4UiAqLworICAgIHpsMWFzLAkJCS8qIDIsNDggbGF0aW4tMSB0byBLT0k4VSAqLworICAg IHhsMXcxLAkJCS8qIDIsNDkgbGF0aW4tMSB0byBDUDEyNTIgKi8KKyAgICB4bDJhcywJCQkvKiAz LDAgbGF0aW4tMiB0byB1cyBhc2NpaSAqLworICAgIHhsMmFzLAkJCS8qIDMsMSBsYXRpbi0yIHRv IHVrIGFzY2lpICovCisgICAgeGwyYXMsCQkJLyogMywyIGxhdGluLTIgdG8gZHV0Y2ggbnJjICov CisgICAgeGwyYXMsCQkJLyogMywzIGxhdGluLTIgdG8gZmlubmlzaCBucmMgKi8KKyAgICB4bDJh cywJCQkvKiAzLDQgbGF0aW4tMiB0byBmcmVuY2ggbnJjICovCisgICAgeGwyYXMsCQkJLyogMyw1 IGxhdGluLTIgdG8gZnItY2FuYWRpYW4gbnJjICovCisgICAgeGwyYXMsCQkJLyogMyw2IGxhdGlu LTIgdG8gZ2VybWFuIG5yYyAqLworICAgIHhsMmFzLAkJCS8qIDMsNyBsYXRpbi0yIHRvIGl0YWxp YW4gbnJjICovCisgICAgeGwyYXMsCQkJLyogMyw4IGxhdGluLTIgdG8gaHVuZ2FyaWFuIG5yYyAq LworICAgIHhsMmFzLAkJCS8qIDMsOSBsYXRpbi0yIHRvIG5vcmdlL2RhbmlzaCBucmMgKi8KKyAg ICB4bDJhcywJCQkvKiAzLDEwIGxhdGluLTIgdG8gcG9ydHVndWVzZSBucmMgKi8KKyAgICB4bDJh cywJCQkvKiAzLDExIGxhdGluLTIgdG8gc3BhbmlzaCBucmMgKi8KKyAgICB4bDJhcywJCQkvKiAz LDEyIGxhdGluLTIgdG8gc3dlZGlzaCBucmMgKi8KKyAgICB4bDJhcywJCQkvKiAzLDEzIGxhdGlu LTIgdG8gc3dpc3MgbnJjICovCisgICAgeGwybDEsCQkJLyogMywxNCBsYXRpbi0yIHRvIGxhdGlu LTEgKi8KKyAgICBOVUxMLAkJCS8qIDMsMTUgbGF0aW4tMiB0byBsYXRpbi0yICovCisgICAgeGwy bDEsCQkJLyogMywxNiBsYXRpbi0yIHRvIERFQyBNQ1MgKi8KKyAgICB4bDJuZSwJCQkvKiAzLDE3 IGxhdGluLTIgdG8gTmVYVCAqLworICAgIHhsMjQzLAkJCS8qIDMsMTggbGF0aW4tMiB0byBDUDQz NyAqLworICAgIHhsMjg1LAkJCS8qIDMsMTkgbGF0aW4tMiB0byBDUDg1MCAqLworICAgIHhsMjUy LAkJCS8qIDMsMjAgbGF0aW4tMiB0byBDUDg1MiAqLworICAgIHhsMmFxLAkJCS8qIDMsMjEgbGF0 aW4tMiB0byBNYWNpbnRvc2ggTGF0aW4gKi8KKyAgICB4bDJkZywJCQkvKiAzLDIyIGxhdGluLTIg dG8gREdJICovCisgICAgeGwycjgsCQkJLyogMywyMyBsYXRpbi0yIHRvIEhQICovCisgICAgeGwy YXMsCQkJLyogMywyNCBsYXRpbi0yIHRvIExhdGluL0N5cmlsbGljICovCisgICAgeGwyYXMsICAg ICAgICAgICAgICAgICAgICAgIC8qIDMsMjUgbGF0aW4tMiB0byBDUDg2NiAqLworICAgIHhsMnNr LCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDI2IGxhdGluLTIgdG8gU2hvcnQgS09JICovCisg ICAgeGwyYXMsCQkgICAgICAgCS8qIDMsMjcgbGF0aW4tMiB0byBPbGQgS09JLTggQ3lyaWxsaWMg Ki8KKyAgICBOVUxMLAkJCS8qIDMsMjggbGF0aW4tMiB0byBKSVMtNyAqLworICAgIE5VTEwsCQkJ LyogMywyOSBsYXRpbi0yIHRvIFNoaWZ0LUpJUyAqLworICAgIE5VTEwsCQkJLyogMywzMCBsYXRp bi0yIHRvIEotRVVDICovCisgICAgTlVMTCwJCQkvKiAzLDMxIGxhdGluLTIgdG8gREVDIEthbmpp ICovCisgICAgeGwyaDcsCQkJLyogMywzMiBsYXRpbi0yIHRvIEhlYnJldy03ICovCisgICAgeGwy YXMsCQkJLyogMywzMyBsYXRpbi0yIHRvIExhdGluL0hlYnJldyAqLworICAgIHhsMmFzLAkJCS8q IDMsMzQgbGF0aW4tMiB0byBDUDg2MiBIZWJyZXcgKi8KKyAgICB4YXNzaywJCQkvKiAzLDM1IGxh dGluLTIgdG8gRUxPVCA5MjcgR3JlZWsgKi8KKyAgICB4bDJhcywJCQkvKiAzLDM2IGxhdGluLTIg dG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4bDJhcywJCQkvKiAzLDM3IGxhdGluLTIgdG8gQ1A4Njkg Ki8KKyAgICB4bDJsOSwJCQkvKiAzLDM4IGxhdGluLTIgdG8gTGF0aW4tOSAqLworICAgIHhsMjU4 LAkJCS8qIDMsMzkgbGF0aW4tMiB0byBDUDg1OCAqLworICAgIHhsMmFzLAkJCS8qIDMsNDAgbGF0 aW4tMiB0byBDUDg1NSAqLworICAgIHhsMmFzLAkJCS8qIDMsNDEgbGF0aW4tMiB0byBDUDEyNTEg Ki8KKyAgICB4bDJhcywJCQkvKiAzLDQyIGxhdGluLTIgdG8gQnVsZ2FyaWFuICovCisgICAgeGwy MTI1MCwJCQkvKiAzLDQzIGxhdGluLTIgdG8gQ1AxMjUwICovCisgICAgeGwybXosCQkJLyogMyw0 NCBsYXRpbi0yIHRvIE1hem92aWEgKi8KKyAgICBOVUxMLAkJCS8qIDMsNDUgbGF0aW4tMiB0byBV Q1MtMiAqLworICAgIE5VTEwsCQkJLyogMyw0NiBsYXRpbi0yIHRvIFVURi04ICovCisgICAgeGwy YXMsCQkJLyogMyw0NyBsYXRpbi0yIHRvIEtPSThSICovCisgICAgeGwyYXMsCQkJLyogMyw0OCBs YXRpbi0yIHRvIEtPSThVICovCisgICAgeGwydzEsCQkJLyogMyw0OSBsYXRpbi0yIHRvIENQMTI1 MiAqLworICAgIHhsY2FzLAkJCS8qIDQsMCBsYXRpbi9jeXJpbGxpYyB0byB1cyBhc2NpaSAqLwor ICAgIHhsY2FzLAkJCS8qIDQsMSBsYXRpbi9jeXJpbGxpYyB0byB1ayBhc2NpaSAqLworICAgIHhs Y2FzLCAJCSAgICAgICAgLyogNCwyIGxhdGluL2N5cmlsbGljIHRvIGR1dGNoIG5yYyAqLworICAg IHhsY2FzLAkJCS8qIDQsMyBsYXRpbi9jeXJpbGxpYyB0byBmaW5uaXNoIGFzY2lpICovCisgICAg eGxjYXMsCQkJLyogNCw0IGxhdGluL2N5cmlsbGljIHRvIGZyZW5jaCBucmMgKi8KKyAgICB4bGNh cywJCQkvKiA0LDUgbGF0aW4vY3lyaWxsaWMgdG8gZnItY2FuYWRpYW4gbnJjICovCisgICAgeGxj YXMsCQkJLyogNCw2IGxhdGluL2N5cmlsbGljIHRvIGdlcm1hbiBucmMgKi8KKyAgICB4bGNhcywJ CQkvKiA0LDcgbGF0aW4vY3lyaWxsaWMgdG8gaXRhbGlhbiBucmMgKi8KKyAgICB4bGNhcywJCQkv KiA0LDggbGF0aW4vY3lyaWxsaWMgdG8gaHVuZ2FyaWFuIG5yYyAqLworICAgIHhsY2FzLAkJCS8q IDQsOSBsYXRpbi9jeXJpbGxpYyB0byBub3JnZS9kYW5pc2ggbnJjICovCisgICAgeGxjYXMsCQkJ LyogNCwxMCBsYXRpbi9jeXJpbGxpYyB0byBwb3J0dWd1ZXNlIG5yYyAqLworICAgIHhsY2FzLAkJ CS8qIDQsMTEgbGF0aW4vY3lyaWxsaWMgdG8gc3BhbmlzaCBucmMgKi8KKyAgICB4bGNhcywJCQkv KiA0LDEyIGxhdGluL2N5cmlsbGljIHRvIHN3ZWRpc2ggbnJjICovCisgICAgeGxjYXMsCQkJLyog NCwxMyBsYXRpbi9jeXJpbGxpYyB0byBzd2lzcyBucmMgKi8KKyAgICB4bGNhcywJCQkvKiA0LDE0 IGxhdGluL2N5cmlsbGljIHRvIGxhdGluLTEgKi8KKyAgICB4bGNhcywJCQkvKiA0LDE1IGxhdGlu L2N5cmlsbGljIHRvIGxhdGluLTIgKi8KKyAgICB4bGNhcywJCQkvKiA0LDE2IGxhdGluL2N5cmls bGljIHRvIERFQyBNQ1MgKi8KKyAgICB4bGNhcywJCQkvKiA0LDE3IGxhdGluL2N5cmlsbGljIHRv IE5lWFQgKi8KKyAgICB4bGNhcywJCQkvKiA0LDE4IGxhdGluL2N5cmlsbGljIHRvIENQNDM3ICov CisgICAgeGxjYXMsCQkJLyogNCwxOSBsYXRpbi9jeXJpbGxpYyB0byBDUDg1MCAqLworICAgIHhs Y2FzLAkJCS8qIDQsMjAgbGF0aW4vY3lyaWxsaWMgdG8gQ1A4NTIgKi8KKyAgICB4bGNhcywJCQkv KiA0LDIxIGxhdGluL2N5cmlsbGljIHRvIE1hY2ludG9zaCBMYXRpbiAqLworICAgIHhsY2FzLAkJ CS8qIDQsMjIgbGF0aW4vY3lyaWxsaWMgdG8gREdJICovCisgICAgeGxjYXMsCQkJLyogNCwyMyBs YXRpbi9jeXJpbGxpYyB0byBIUCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAv KiA0LDI0IGxhdGluL2N5cmlsbGljIHRvIExhdGluL0N5cmlsbGljICovCisgICAgeGxjYWMsICAg ICAgICAgICAgICAgICAgICAgIC8qIDQsMjUgbGF0aW4vY3lyaWxsaWMgdG8gQ1A4NjYgKi8KKyAg ICB4bGNzaywgICAgICAgICAgICAgICAgICAgICAgLyogNCwyNiBsYXRpbi9jeXJpbGxpYyB0byBT aG9ydCBLT0kgKi8KKyAgICB4bGNrOCwJCSAgICAgICAJLyogNCwyNyBsYXRpbi9jeXJpbGxpYyB0 byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KKyAgICBOVUxMLAkJCS8qIDQsMjggbGF0aW4vY3lyaWwg dG8gSklTLTcgKi8KKyAgICBOVUxMLAkJCS8qIDQsMjkgbGF0aW4vY3lyaWwgdG8gU2hpZnQtSklT ICovCisgICAgTlVMTCwJCQkvKiA0LDMwIGxhdGluL2N5cmlsIHRvIEotRVVDICovCisgICAgTlVM TCwJCQkvKiA0LDMxIGxhdGluL2N5cmlsIHRvIERFQyBLYW5qaSAqLworICAgIHhsY2g3LAkJCS8q IDQsMzIgbGF0aW4vY3lyaWwgdG8gSGVicmV3LTcgKi8KKyAgICB4bGNhcywJCQkvKiA0LDMzIGxh dGluL2N5cmlsIHRvIExhdGluL0hlYnJldyAqLworICAgIHhsY2FzLAkJCS8qIDQsMzQgbGF0aW4v Y3lyaWwgdG8gQ1A4NjIgSGVicmV3ICovCisgICAgeGFzc2ssCQkJLyogNCwzNSBsYXRpbi9jeXJp bCB0byBFTE9UIDkyNyBHcmVlayAqLworICAgIHhsZWZ0MTYwLAkJCS8qIDQsMzYgbGF0aW4vY3ly aWwgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4bGVmdDEyOCwJCQkvKiA0LDM3IGxhdGluL2N5cmls IHRvIENQODY5ICovCisgICAgeGxjYXMsCQkJLyogNCwzOCBsYXRpbi9jeXJpbCB0byBsYXRpbi05 ICovCisgICAgeGxjYXMsCQkJLyogNCwzOSBsYXRpbi9jeXJpbCB0byBDUDg1OCAqLworICAgIHhs YzU1LAkJCS8qIDQsNDAgbGF0aW4vY3lyaWwgdG8gQ1A4NTUgKi8KKyAgICB4bGMxMjUxLAkJCS8q IDQsNDEgbGF0aW4vY3lyaWwgdG8gQ1AxMjUxICovCisgICAgeGxjYnUsCQkJLyogNCw0MiBsYXRp bi9jeXJpbCB0byBCdWxnYXJpYW4gKi8KKyAgICB4bGNhcywJCQkvKiA0LDQzIGxhdGluL2N5cmls IHRvIENQMTI1MCAqLworICAgIHhsY2FzLAkJCS8qIDQsNDQgbGF0aW4vY3lyaWwgdG8gTWF6b3Zp YSAqLworICAgIE5VTEwsCQkJLyogNCw0NSBsYXRpbi9jeXJpbCB0byBVQ1MtMiAqLworICAgIE5V TEwsCQkJLyogNCw0NiBsYXRpbi9jeXJpbCB0byBVVEYtOCAqLworICAgIHhsY2tyLAkJCS8qIDQs NDcgbGF0aW4vY3lyaWwgdG8gS09JOFIgKi8KKyAgICB4bGNrdSwJCQkvKiA0LDQ4IGxhdGluL2N5 cmlsIHRvIEtPSThVICovCisgICAgeGxjYXMsCQkJLyogNCw0OSBsYXRpbi9jeXJpbCB0byBDUDEy NTIgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDAgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDEgKi8KKyAg ICBOVUxMLAkJCS8qIDUsMDIgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDMgKi8KKyAgICBOVUxMLAkJ CS8qIDUsMDQgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDUgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDYg Ki8KKyAgICBOVUxMLAkJCS8qIDUsMDcgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDggKi8KKyAgICBO VUxMLAkJCS8qIDUsMDkgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTAgKi8KKyAgICBOVUxMLAkJCS8q IDUsMTEgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTIgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTMgKi8K KyAgICBOVUxMLAkJCS8qIDUsMTQgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTUgKi8KKyAgICBOVUxM LAkJCS8qIDUsMTYgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTcgKi8KKyAgICBOVUxMLAkJCS8qIDUs MTggKi8KKyAgICBOVUxMLAkJCS8qIDUsMTkgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjAgKi8KKyAg ICBOVUxMLAkJCS8qIDUsMjEgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjIgKi8KKyAgICBOVUxMLAkJ CS8qIDUsMjMgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjQgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjUg Ki8KKyAgICBOVUxMLAkJCS8qIDUsMjYgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjcgKi8KKyAgICBO VUxMLAkJCS8qIDUsMjggKi8KKyAgICBOVUxMLAkJCS8qIDUsMjkgKi8KKyAgICBOVUxMLAkJCS8q IDUsMzAgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzEgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzIgKi8K KyAgICBOVUxMLAkJCS8qIDUsMzMgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzQgKi8KKyAgICBOVUxM LAkJCS8qIDUsMzUgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzYgKi8KKyAgICBOVUxMLAkJCS8qIDUs MzcgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzggKi8KKyAgICBOVUxMLAkJCS8qIDUsMzkgKi8KKyAg ICBOVUxMLAkJCS8qIDUsNDAgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDEgKi8KKyAgICBOVUxMLAkJ CS8qIDUsNDIgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDMgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDQg Ki8KKyAgICBOVUxMLAkJCS8qIDUsNDUgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDYgKi8KKyAgICBO VUxMLAkJCS8qIDUsNDcgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDggKi8KKyAgICBOVUxMLAkJCS8q IDUsNDkgKi8KKyAgICB4bGhhcywJCQkvKiA2LDAgbGF0aW4vaGVicmV3IHRvIHVzIGFzY2lpICov CisgICAgeGxoYXMsCQkJLyogNiwxIGxhdGluL2hlYnJldyB0byB1ayBhc2NpaSAqLworICAgIHhs aGFzLCAJCSAgICAgICAgLyogNiwyIGxhdGluL2hlYnJldyB0byBkdXRjaCBucmMgKi8KKyAgICB4 bGhhcywJCQkvKiA2LDMgbGF0aW4vaGVicmV3IHRvIGZpbm5pc2ggYXNjaWkgKi8KKyAgICB4bGhh cywJCQkvKiA2LDQgbGF0aW4vaGVicmV3IHRvIGZyZW5jaCBucmMgKi8KKyAgICB4bGhhcywJCQkv KiA2LDUgbGF0aW4vaGVicmV3IHRvIGZyLWNhbmFkaWFuIG5yYyAqLworICAgIHhsaGFzLAkJCS8q IDYsNiBsYXRpbi9oZWJyZXcgdG8gZ2VybWFuIG5yYyAqLworICAgIHhsaGFzLAkJCS8qIDYsNyBs YXRpbi9oZWJyZXcgdG8gaXRhbGlhbiBucmMgKi8KKyAgICB4bGhhcywJCQkvKiA2LDggbGF0aW4v aGVicmV3IHRvIGh1bmdhcmlhbiBucmMgKi8KKyAgICB4bGhhcywJCQkvKiA2LDkgbGF0aW4vaGVi cmV3IHRvIG5vcmdlL2RhbmlzaCBucmMgKi8KKyAgICB4bGhhcywJCQkvKiA2LDEwIGxhdGluL2hl YnJldyB0byBwb3J0dWd1ZXNlIG5yYyAqLworICAgIHhsaGFzLAkJCS8qIDYsMTEgbGF0aW4vaGVi cmV3IHRvIHNwYW5pc2ggbnJjICovCisgICAgeGxoYXMsCQkJLyogNiwxMiBsYXRpbi9oZWJyZXcg dG8gc3dlZGlzaCBucmMgKi8KKyAgICB4bGhhcywJCQkvKiA2LDEzIGxhdGluL2hlYnJldyB0byBz d2lzcyBucmMgKi8KKyAgICB4bGhsMSwJCQkvKiA2LDE0IGxhdGluL2hlYnJldyB0byBsYXRpbi0x ICovCisgICAgeGxoYXMsCQkJLyogNiwxNSBsYXRpbi9oZWJyZXcgdG8gbGF0aW4tMiAqLworICAg IHhsaGwxLAkJCS8qIDYsMTYgbGF0aW4vaGVicmV3IHRvIERFQyBNQ1MgKi8KKyAgICB4bGhhcywJ CQkvKiA2LDE3IGxhdGluL2hlYnJldyB0byBOZVhUICovCisgICAgeGxoYXMsCQkJLyogNiwxOCBs YXRpbi9oZWJyZXcgdG8gQ1A0MzcgKi8KKyAgICB4bGhhcywJCQkvKiA2LDE5IGxhdGluL2hlYnJl dyB0byBDUDg1MCAqLworICAgIHhsaGFzLAkJCS8qIDYsMjAgbGF0aW4vaGVicmV3IHRvIENQODUy ICovCisgICAgeGxoYXMsCQkJLyogNiwyMSBsYXRpbi9oZWJyZXcgdG8gTWFjaW50b3NoIExhdGlu ICovCisgICAgeGxoYXMsCQkJLyogNiwyMiBsYXRpbi9oZWJyZXcgdG8gREdJICovCisgICAgeGxo YXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjMgbGF0aW4vaGVicmV3IHRvIEhQICovCisg ICAgeGxoYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjQgbGF0aW4vaGVicmV3IHRvIExh dGluL0N5cmlsbGljICovCisgICAgeGxoYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjUg bGF0aW4vaGVicmV3IHRvIENQODY2ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg IC8qIDYsMjYgbGF0aW4vaGVicmV3IHRvIFNob3J0IEtPSSAqLworICAgIHhsaGFzLAkJICAgICAg IAkvKiA2LDI3IGxhdGluL2hlYnJldyB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KKyAgICBOVUxM LAkJCS8qIDYsMjggbGF0aW4vaGVicmV3IHRvIEpJUy03ICovCisgICAgTlVMTCwJCQkvKiA2LDI5 IGxhdGluL2hlYnJldyB0byBTaGlmdC1KSVMgKi8KKyAgICBOVUxMLAkJCS8qIDYsMzAgbGF0aW4v aGVicmV3IHRvIEotRVVDICovCisgICAgTlVMTCwJCQkvKiA2LDMxIGxhdGluL2hlYnJldyB0byBE RUMgS2FuamkgKi8KKyAgICB4bGhoNywJCQkvKiA2LDMyIGxhdGluL2hlYnJldyB0byBIZWJyZXct NyAqLworICAgIE5VTEwsCQkJLyogNiwzMyBsYXRpbi9oZWJyZXcgdG8gTGF0aW4vSGVicmV3ICov CisgICAgeGxoNjIsCQkJLyogNiwzNCBsYXRpbi9oZWJyZXcgdG8gQ1A4NjIgSGVicmV3ICovCisg ICAgTlVMTCwJCQkvKiA2LDM1IGxhdGluL2hlYnJldyB0byBFTE9UIDkyNyBHcmVlayAqLworICAg IHhsaGFzLAkJCS8qIDYsMzYgbGF0aW4vaGVicmV3IHRvIExhdGluL0dyZWVrICovCisgICAgeGxo YXMsCQkJLyogNiwzNyBsYXRpbi9oZWJyZXcgdG8gQ1A4NjkgKi8KKyAgICB4bGhhcywJCQkvKiA2 LDM4IGxhdGluL2hlYnJldyB0byBMYXRpbi05ICovCisgICAgeGxoYXMsCQkJLyogNiwzOSBsYXRp bi9oZWJyZXcgdG8gQ1A4NTggKi8KKyAgICB4bGhhcywJCQkvKiA2LDQwIGxhdGluL2hlYnJldyB0 byBDUDg1NSAqLworICAgIHhsaGFzLAkJCS8qIDYsNDEgbGF0aW4vaGVicmV3IHRvIENQMTI1MSAq LworICAgIHhsaGFzLAkJCS8qIDYsNDIgbGF0aW4vaGVicmV3IHRvIEJ1bGdhcmlhbiAqLworICAg IHhsaGFzLAkJCS8qIDYsNDMgbGF0aW4vaGVicmV3IHRvIENQMTI1MCAqLworICAgIHhsaGFzLAkJ CS8qIDYsNDQgbGF0aW4vaGVicmV3IHRvIE1hem92aWEgKi8KKyAgICBOVUxMLAkJCS8qIDYsNDUg bGF0aW4vaGVicmV3IHRvIFVDUy0yICovCisgICAgTlVMTCwJCQkvKiA2LDQ2IGxhdGluL2hlYnJl dyB0byBVVEYtOCAqLworICAgIE5VTEwsCQkJLyogNiw0NyBsYXRpbi9oZWJyZXcgdG8gS09JOFIg Ki8KKyAgICBOVUxMLAkJCS8qIDYsNDggbGF0aW4vaGVicmV3IHRvIEtPSThVICovCisgICAgeGxo dzEsCQkJLyogNiw0OSBsYXRpbi9oZWJyZXcgdG8gQ1AxMjUyICovCisgICAgeGxnYXMsCQkJLyog NywwIGxhdGluL2dyZWVrIHRvIHVzIGFzY2lpICovCisgICAgeGxnYXMsCQkJLyogNywxIGxhdGlu L2dyZWVrIHRvIHVrIGFzY2lpICovCisgICAgeGxnYXMsIAkJICAgICAgICAvKiA3LDIgbGF0aW4v Z3JlZWsgdG8gZHV0Y2ggbnJjICovCisgICAgeGxnYXMsCQkJLyogNywzIGxhdGluL2dyZWVrIHRv IGZpbm5pc2ggYXNjaWkgKi8KKyAgICB4bGdhcywJCQkvKiA3LDQgbGF0aW4vZ3JlZWsgdG8gZnJl bmNoIG5yYyAqLworICAgIHhsZ2FzLAkJCS8qIDcsNSBsYXRpbi9ncmVlayB0byBmci1jYW5hZGlh biBucmMgKi8KKyAgICB4bGdhcywJCQkvKiA3LDYgbGF0aW4vZ3JlZWsgdG8gZ2VybWFuIG5yYyAq LworICAgIHhsZ2FzLAkJCS8qIDcsNyBsYXRpbi9ncmVlayB0byBpdGFsaWFuIG5yYyAqLworICAg IHhsZ2FzLAkJCS8qIDcsOCBsYXRpbi9ncmVlayB0byBodW5nYXJpYW4gbnJjICovCisgICAgeGxn YXMsCQkJLyogNyw5IGxhdGluL2dyZWVrIHRvIG5vcmdlL2RhbmlzaCBucmMgKi8KKyAgICB4bGdh cywJCQkvKiA3LDEwIGxhdGluL2dyZWVrIHRvIHBvcnR1Z3Vlc2UgbnJjICovCisgICAgeGxnYXMs CQkJLyogNywxMSBsYXRpbi9ncmVlayB0byBzcGFuaXNoIG5yYyAqLworICAgIHhsZ2FzLAkJCS8q IDcsMTIgbGF0aW4vZ3JlZWsgdG8gc3dlZGlzaCBucmMgKi8KKyAgICB4bGdhcywJCQkvKiA3LDEz IGxhdGluL2dyZWVrIHRvIHN3aXNzIG5yYyAqLworICAgIHhsZ2FzLAkJCS8qIDcsMTQgbGF0aW4v Z3JlZWsgdG8gbGF0aW4tMSAqLworICAgIHhsZ2FzLAkJCS8qIDcsMTUgbGF0aW4vZ3JlZWsgdG8g bGF0aW4tMiAqLworICAgIHhsZ2FzLAkJCS8qIDcsMTYgbGF0aW4vZ3JlZWsgdG8gREVDIE1DUyAq LworICAgIHhsZ2FzLAkJCS8qIDcsMTcgbGF0aW4vZ3JlZWsgdG8gTmVYVCAqLworICAgIHhsZ2Fz LAkJCS8qIDcsMTggbGF0aW4vZ3JlZWsgdG8gQ1A0MzcgKi8KKyAgICB4bGdhcywJCQkvKiA3LDE5 IGxhdGluL2dyZWVrIHRvIENQODUwICovCisgICAgeGxnYXMsCQkJLyogNywyMCBsYXRpbi9ncmVl ayB0byBDUDg1MiAqLworICAgIHhsZ2FzLAkJCS8qIDcsMjEgbGF0aW4vZ3JlZWsgdG8gTWFjaW50 b3NoIExhdGluICovCisgICAgeGxnYXMsCQkJLyogNywyMiBsYXRpbi9ncmVlayB0byBER0kgKi8K KyAgICB4bGdhcywJCQkvKiA3LDIzIGxhdGluL2dyZWVrIHRvIEhQICovCisgICAgeGxlZnQxNjAs ICAgICAgICAgICAgICAgICAgIC8qIDcsMjQgbGF0aW4vZ3JlZWsgdG8gTGF0aW4vQ3lyaWxsaWMg Ki8KKyAgICB4bGVmdDEyOCwgICAgICAgICAgICAgICAgICAgLyogNywyNSBsYXRpbi9ncmVlayB0 byBDUDg2NiAqLworICAgIHhhc3NrLCAgICAgICAgICAgICAgICAgICAgICAvKiA3LDI2IGxhdGlu L2dyZWVrIHRvIFNob3J0IEtPSSAqLworICAgIHhsZWZ0MTYwLAkJICAgICAgIAkvKiA3LDI3IGxh dGluL2dyZWVrIHRvIE9sZCBLT0ktOCBHcmVlayAqLworICAgIE5VTEwsCQkJLyogNywyOCBsYXRp bi9ncmVlayB0byBKSVMtNyAqLworICAgIE5VTEwsCQkJLyogNywyOSBsYXRpbi9ncmVlayB0byBT aGlmdC1KSVMgKi8KKyAgICBOVUxMLAkJCS8qIDcsMzAgbGF0aW4vZ3JlZWsgdG8gSi1FVUMgKi8K KyAgICBOVUxMLAkJCS8qIDcsMzEgbGF0aW4vZ3JlZWsgdG8gREVDIEthbmppICovCisgICAgTlVM TCwJCQkvKiA3LDMyIGxhdGluL2dyZWVrIHRvIEhlYnJldy03ICovCisgICAgeGxnYXMsCQkJLyog NywzMyBsYXRpbi9ncmVlayB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4bGdhcywJCQkvKiA3LDM0 IGxhdGluL2dyZWVrIHRvIENQODYyIEhlYnJldyAqLworICAgIHhsZ2VnLAkJCS8qIDcsMzUgbGF0 aW4vZ3JlZWsgdG8gRUxPVCA5MjcgR3JlZWsgKi8KKyAgICBOVUxMLAkJCS8qIDcsMzYgbGF0aW4v Z3JlZWsgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4bGc2OSwJCQkvKiA3LDM3IGxhdGluL2dyZWVr IHRvIENQODY5ICovCisgICAgeGxnYXMsCQkJLyogNywzOCBsYXRpbi9ncmVlayB0byBMYXRpbi05 ICovCisgICAgeGxnYXMsCQkJLyogNywzOSBsYXRpbi9ncmVlayB0byBDUDg1OCAqLworICAgIHhs ZWZ0MTI4LAkJCS8qIDcsNDAgbGF0aW4vZ3JlZWsgdG8gQ1A4NTUgKi8KKyAgICB4bGVmdDEyOCwJ CQkvKiA3LDQxIGxhdGluL2dyZWVrIHRvIENQMTI1MSAqLworICAgIHhsZWZ0MTI4LAkJCS8qIDcs NDIgbGF0aW4vZ3JlZWsgdG8gQnVsZ2FyaWFuICovCisgICAgeGxlZnQxMjgsCQkJLyogNyw0MyBs YXRpbi9ncmVlayB0byBDUDEyNTAgKi8KKyAgICB4bGVmdDEyOCwJCQkvKiA3LDQ0IGxhdGluL2dy ZWVrIHRvIE1hem92aWEgKi8KKyAgICBOVUxMLAkJCS8qIDcsNDUgbGF0aW4vZ3JlZWsgdG8gVUNT LTIgKi8KKyAgICBOVUxMLAkJCS8qIDcsNDYgbGF0aW4vZ3JlZWsgdG8gVVRGLTggKi8KKyAgICBO VUxMLAkJCS8qIDcsNDcgbGF0aW4vZ3JlZWsgdG8gS09JOFIgKi8KKyAgICBOVUxMLAkJCS8qIDcs NDggbGF0aW4vZ3JlZWsgdG8gS09JOFUgKi8KKyAgICB4bGd3MSwJCQkvKiA3LDQ5IGxhdGluL2dy ZWVrIHRvIENQMTI1MiAqLworICAgIHpsOWFzLAkJCS8qIDgsMCBsYXRpbi05IHRvIHVzIGFzY2lp ICovCisgICAgeGwxdWssCQkJLyogOCwxIGxhdGluLTkgdG8gdWsgYXNjaWkgKi8KKyAgICB4bDFk dSwJCQkvKiA4LDIgbGF0aW4tOSB0byBkdXRjaCBucmMgKi8KKyAgICB4bDFmaSwJCQkvKiA4LDMg bGF0aW4tOSB0byBmaW5uaXNoIG5yYyAqLworICAgIHhsMWZyLAkJCS8qIDgsNCBsYXRpbi05IHRv IGZyZW5jaCBucmMgKi8KKyAgICB4bDFmYywJCQkvKiA4LDUgbGF0aW4tOSB0byBmci1jYW5hZGlh biBucmMgKi8KKyAgICB4bDFnZSwJCQkvKiA4LDYgbGF0aW4tOSB0byBnZXJtYW4gbnJjICovCisg ICAgeGwxaXQsCQkJLyogOCw3IGxhdGluLTkgdG8gaXRhbGlhbiBucmMgKi8KKyAgICB4bDFodSwJ CQkvKiA4LDggbGF0aW4tOSB0byBodW5nYXJpYW4gbnJjICovCisgICAgeGwxbm8sCQkJLyogOCw5 IGxhdGluLTkgdG8gbm9yZ2UvZGFuaXNoIG5yYyAqLworICAgIHhsMXBvLAkJCS8qIDgsMTAgbGF0 aW4tOSB0byBwb3J0dWd1ZXNlIG5yYyAqLworICAgIHhsMXNwLAkJCS8qIDgsMTEgbGF0aW4tOSB0 byBzcGFuaXNoIG5yYyAqLworICAgIHhsMXN3LAkJCS8qIDgsMTIgbGF0aW4tOSB0byBzd2VkaXNo IG5yYyAqLworICAgIHhsMWNoLAkJCS8qIDgsMTMgbGF0aW4tOSB0byBzd2lzcyBucmMgKi8KKyAg ICBOVUxMLAkJCS8qIDgsMTQgbGF0aW4tOSB0byBsYXRpbi0xICovCisgICAgeGwxbDIsCQkJLyog OCwxNSBsYXRpbi05IHRvIGxhdGluLTIgKi8KKyAgICB4bDlkbSwJCQkvKiA4LDE2IGxhdGluLTkg dG8gREVDIE1DUyAqLworICAgIHhsOW5lLAkJCS8qIDgsMTcgbGF0aW4tOSB0byBOZVhUICovCisg ICAgeGwxNDMsCQkJLyogOCwxOCBsYXRpbi05IHRvIENQNDM3ICovCisgICAgeGwxODUsCQkJLyog OCwxOSBsYXRpbi05IHRvIENQODUwICovCisgICAgeGwxNTIsCQkJLyogOCwyMCBsYXRpbi05IHRv IENQODUyICovCisgICAgeGwxYXEsCQkJLyogOCwyMSBsYXRpbi05IHRvIE1hY2ludG9zaCBMYXRp biAqLworICAgIHhsMWRnLAkJCS8qIDgsMjIgbGF0aW4tOSB0byBER0kgKi8KKyAgICB4bDFyOCwJ CQkvKiA4LDIzIGxhdGluLTkgdG8gSFAgUm9tYW44ICovCisgICAgemwxYXMsCQkJLyogOCwyNCBs YXRpbi05IHRvIExhdGluL0N5cmlsbGljICovCisgICAgemwxYXMsICAgICAgICAgICAgICAgICAg ICAgIC8qIDgsMjUgbGF0aW4tOSB0byBDUDg2NiAqLworICAgIHhsMXNrLCAgICAgICAgICAgICAg ICAgICAgICAvKiA4LDI2IGxhdGluLTkgdG8gU2hvcnQgS09JICovCisgICAgemwxYXMsCQkgICAg ICAgCS8qIDgsMjcgbGF0aW4tOSB0byBPbGQgS09JLTggQ3lyaWxsaWMgKi8KKyAgICBOVUxMLAkJ CS8qIDgsMjggbGF0aW4tOSB0byBKSVMtNyAqLworICAgIE5VTEwsCQkJLyogOCwyOSBsYXRpbi05 IHRvIFNoaWZ0LUpJUyAqLworICAgIE5VTEwsCQkJLyogOCwzMCBsYXRpbi05IHRvIEotRVVDICov CisgICAgTlVMTCwJCQkvKiA4LDMxIGxhdGluLTkgdG8gREVDIEthbmppICovCisgICAgeGwxaDcs CQkJLyogOCwzMiBsYXRpbi05IHRvIEhlYnJldy03ICovCisgICAgeGwxbGgsCQkJLyogOCwzMyBs YXRpbi05IHRvIExhdGluL0hlYnJldyAqLworICAgIHhsMTYyLAkJCS8qIDgsMzQgbGF0aW4tOSB0 byBDUDg2MiBIZWJyZXcgKi8KKyAgICB4bDFlZywJCQkvKiA4LDM1IGxhdGluLTkgdG8gRUxPVCA5 MjcgR3JlZWsgKi8KKyAgICB4bDFsZywJCQkvKiA4LDM2IGxhdGluLTkgdG8gTGF0aW4vR3JlZWsg Ki8KKyAgICB4bDE2OSwJCQkvKiA4LDM3IGxhdGluLTkgdG8gQ1A4NjkgKi8KKyAgICBOVUxMLAkJ CS8qIDgsMzggbGF0aW4tOSB0byBMYXRpbjkgKi8KKyAgICB4bDk1OCwJCQkvKiA4LDM5IGxhdGlu LTkgdG8gQ1A4NTggKi8KKyAgICB6bDFhcywJCQkvKiA4LDQwIGxhdGluLTkgdG8gQ1A4NTUgKi8K KyAgICB6bDFhcywJCQkvKiA4LDQxIGxhdGluLTkgdG8gQ1AxMjUxICovCisgICAgeGwxYXMsCQkJ LyogOCw0MiBsYXRpbi05IHRvIEJ1bGdhcmlhbiAqLworICAgIHhsOTEyNTAsCQkJLyogOCw0MyBs YXRpbi05IHRvIENQMTI1MCAqLworICAgIHhsOW16LAkJCS8qIDgsNDQgbGF0aW4tOSB0byBNYXpv dmlhICovCisgICAgTlVMTCwJCQkvKiA4LDQ1IGxhdGluLTkgdG8gVUNTLTIgKi8KKyAgICBOVUxM LAkJCS8qIDgsNDYgbGF0aW4tOSB0byBVVEYtOCAqLworICAgIHpsMWFzLAkJCS8qIDgsNDcgbGF0 aW4tOSB0byBLT0k4LVIgKi8KKyAgICB6bDFhcywJCQkvKiA4LDQ4IGxhdGluLTkgdG8gS09JOC1V ICovCisgICAgeGw5dzEsCQkJLyogOCw0OSBsYXRpbi05IHRvIENQMTI1MiAqLworICAgIE5VTEws CQkJLyogOSwwMCBVbmljb2RlLi4uICovCisgICAgTlVMTCwJCQkvKiA5LDAxICovCisgICAgTlVM TCwJCQkvKiA5LDAyICovCisgICAgTlVMTCwJCQkvKiA5LDAzICovCisgICAgTlVMTCwJCQkvKiA5 LDA0ICovCisgICAgTlVMTCwJCQkvKiA5LDA1ICovCisgICAgTlVMTCwJCQkvKiA5LDA2ICovCisg ICAgTlVMTCwJCQkvKiA5LDA3ICovCisgICAgTlVMTCwJCQkvKiA5LDA4ICovCisgICAgTlVMTCwJ CQkvKiA5LDA5ICovCisgICAgTlVMTCwJCQkvKiA5LDEwICovCisgICAgTlVMTCwJCQkvKiA5LDEx ICovCisgICAgTlVMTCwJCQkvKiA5LDEyICovCisgICAgTlVMTCwJCQkvKiA5LDEzICovCisgICAg TlVMTCwJCQkvKiA5LDE0ICovCisgICAgTlVMTCwJCQkvKiA5LDE1ICovCisgICAgTlVMTCwJCQkv KiA5LDE2ICovCisgICAgTlVMTCwJCQkvKiA5LDE3ICovCisgICAgTlVMTCwJCQkvKiA5LDE4ICov CisgICAgTlVMTCwJCQkvKiA5LDE5ICovCisgICAgTlVMTCwJCQkvKiA5LDIwICovCisgICAgTlVM TCwJCQkvKiA5LDIxICovCisgICAgTlVMTCwJCQkvKiA5LDIyICovCisgICAgTlVMTCwJCQkvKiA5 LDIzICovCisgICAgTlVMTCwJCQkvKiA5LDI0ICovCisgICAgTlVMTCwJCQkvKiA5LDI1ICovCisg ICAgTlVMTCwJCQkvKiA5LDI2ICovCisgICAgTlVMTCwJCQkvKiA5LDI3ICovCisgICAgTlVMTCwJ CQkvKiA5LDI4ICovCisgICAgTlVMTCwJCQkvKiA5LDI5ICovCisgICAgTlVMTCwJCQkvKiA5LDMw ICovCisgICAgTlVMTCwJCQkvKiA5LDMxICovCisgICAgTlVMTCwJCQkvKiA5LDMyICovCisgICAg TlVMTCwJCQkvKiA5LDMzICovCisgICAgTlVMTCwJCQkvKiA5LDM0ICovCisgICAgTlVMTCwJCQkv KiA5LDM1ICovCisgICAgTlVMTCwJCQkvKiA5LDM2ICovCisgICAgTlVMTCwJCQkvKiA5LDM3ICov CisgICAgTlVMTCwJCQkvKiA5LDM4ICovCisgICAgTlVMTCwJCQkvKiA5LDM5ICovCisgICAgTlVM TCwJCQkvKiA5LDQwICovCisgICAgTlVMTCwJCQkvKiA5LDQxICovCisgICAgTlVMTCwJCQkvKiA5 LDQyICovCisgICAgTlVMTCwJCQkvKiA5LDQzICovCisgICAgTlVMTCwJCQkvKiA5LDQ0ICovCisg ICAgTlVMTCwJCQkvKiA5LDQ1ICovCisgICAgTlVMTCwJCQkvKiA5LDQ2ICovCisgICAgTlVMTCwJ CQkvKiA5LDQ3ICovCisgICAgTlVMTCwJCQkvKiA5LDQ4ICovCisgICAgTlVMTCwJCQkvKiA5LDQ5 ICovCisgICAgTlVMTCwJCQkvKiAxMCwwMCAqLworICAgIE5VTEwsCQkJLyogMTAsMDEgKi8KKyAg ICBOVUxMLAkJCS8qIDEwLDAyICovCisgICAgTlVMTCwJCQkvKiAxMCwwMyAqLworICAgIE5VTEws CQkJLyogMTAsMDQgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDA1ICovCisgICAgTlVMTCwJCQkvKiAx MCwwNiAqLworICAgIE5VTEwsCQkJLyogMTAsMDcgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDA4ICov CisgICAgTlVMTCwJCQkvKiAxMCwwOSAqLworICAgIE5VTEwsCQkJLyogMTAsMTAgKi8KKyAgICBO VUxMLAkJCS8qIDEwLDExICovCisgICAgTlVMTCwJCQkvKiAxMCwxMiAqLworICAgIE5VTEwsCQkJ LyogMTAsMTMgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDE0ICovCisgICAgTlVMTCwJCQkvKiAxMCwx NSAqLworICAgIE5VTEwsCQkJLyogMTAsMTYgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDE3ICovCisg ICAgTlVMTCwJCQkvKiAxMCwxOCAqLworICAgIE5VTEwsCQkJLyogMTAsMTkgKi8KKyAgICBOVUxM LAkJCS8qIDEwLDIwICovCisgICAgTlVMTCwJCQkvKiAxMCwyMSAqLworICAgIE5VTEwsCQkJLyog MTAsMjIgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDIzICovCisgICAgTlVMTCwJCQkvKiAxMCwyNCAq LworICAgIE5VTEwsCQkJLyogMTAsMjUgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDI2ICovCisgICAg TlVMTCwJCQkvKiAxMCwyNyAqLworICAgIE5VTEwsCQkJLyogMTAsMjggKi8KKyAgICBOVUxMLAkJ CS8qIDEwLDI5ICovCisgICAgTlVMTCwJCQkvKiAxMCwzMCAqLworICAgIE5VTEwsCQkJLyogMTAs MzEgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDMyICovCisgICAgTlVMTCwJCQkvKiAxMCwzMyAqLwor ICAgIE5VTEwsCQkJLyogMTAsMzQgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDM1ICovCisgICAgTlVM TCwJCQkvKiAxMCwzNiAqLworICAgIE5VTEwsCQkJLyogMTAsMzcgKi8KKyAgICBOVUxMLAkJCS8q IDEwLDM4ICovCisgICAgTlVMTCwJCQkvKiAxMCwzOSAqLworICAgIE5VTEwsCQkJLyogMTAsNDAg Ki8KKyAgICBOVUxMLAkJCS8qIDEwLDQxICovCisgICAgTlVMTCwJCQkvKiAxMCw0MiAqLworICAg IE5VTEwsCQkJLyogMTAsNDMgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDQ0ICovCisgICAgTlVMTCwJ CQkvKiAxMCw0NSAqLworICAgIE5VTEwsCQkJLyogMTAsNDYgKi8KKyAgICBOVUxMLAkJCS8qIDEw LDQ3ICovCisgICAgTlVMTCwJCQkvKiAxMCw0OCAqLworICAgIE5VTEwJCQkvKiAxMCw0OSAqLwor fTsKK2ludCBueGxyID0gKHNpemVvZih4bHIpIC8gc2l6ZW9mKENIQVIgKikpOworCisvKgorICBU cmFuc2xhdGlvbiBmdW5jdGlvbiB0YWJsZSBmb3Igc2VuZGluZyBmaWxlcy4KKyAgQXJyYXkgb2Yg cG9pbnRlcnMgdG8gZnVuY3Rpb25zIGZvciB0cmFuc2xhdGluZyBmcm9tIHRoZSBsb2NhbCBmaWxl CisgIGNoYXJhY3RlciBzZXQgdG8gdGhlIHRyYW5zZmVyIGNoYXJhY3RlciBzZXQuICBJbmRleGVk IGluIHRoZSBzYW1lCisgIHdheSBhcyB0aGUgeGxyIGFycmF5IGFib3ZlLCBidXQgd2l0aCB0aGUg aW5kaWNlcyByZXZlcnNlZC4KKyovCisjaWZkZWYgQ0tfQU5TSUMKK0NIQVIgKCp4bHNbTUFYVENT RVRTKzFdW01BWEZDU0VUUysxXSkoQ0hBUikgPQorI2Vsc2UKK0NIQVIgKCp4bHNbTUFYVENTRVRT KzFdW01BWEZDU0VUUysxXSkoKSA9CisjZW5kaWYgLyogQ0tfQU5TSUMgKi8KK3sKKyAgICBOVUxM LAkJCS8qIDAsMCB1cyBhc2NpaSB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwx IHVrIGFzY2lpIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDIgZHV0Y2ggbnJj IHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDMgZmlubmlzaCBucmMgdG8gdHJh bnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsNCBmcmVuY2ggbnJjIHRvIHRyYW5zcGFyZW50 ICovCisgICAgTlVMTCwJCQkvKiAwLDUgZnItY2FuYWRpYW4gbnJjIHRvIHRyYW5zcGFyZW50ICov CisgICAgTlVMTCwJCQkvKiAwLDYgZ2VybWFuIG5yYyB0byB0cmFuc3BhcmVudCAqLworICAgIE5V TEwsCQkJLyogMCw3IGh1bmdhcmlhbiBucmMgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJ CS8qIDAsOCBpdGFsaWFuIG5yYyB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCw5 IG5vcmdlL2RhbmlzaCBucmMgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTAg cG9ydHVndWVzZSBucmMgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTEgc3Bh bmlzaCBucmMgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTIgc3dlZGlzaCBu cmMgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTMgc3dpc3MgbnJjIHRvIHRy YW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDE0IGxhdGluLTEgdG8gdHJhbnNwYXJlbnQg Ki8KKyAgICBOVUxMLAkJCS8qIDAsMTUgbGF0aW4tMiB0byB0cmFuc3BhcmVudCAqLworICAgIE5V TEwsCQkJLyogMCwxNiBERUMgTUNTIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAw LDE3IE5lWFQgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTggQ1A0MzcgdG8g dHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMTkgQ1A4NTAgdG8gdHJhbnNwYXJlbnQg Ki8KKyAgICBOVUxMLAkJCS8qIDAsMjAgQ1A4NTIgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxM LAkJCS8qIDAsMjEgTWFjaW50b3NoIExhdGluIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJ CQkvKiAwLDIyIERHSSB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwyMyBIUCB0 byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwyNCBMYXRpbi9DeXJpbGxpYyB0byB0 cmFuc3BhcmVudCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiAwLDI1IENQ ODY2IHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8q IDAsMjYgU2hvcnQgS09JIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwgICAgICAgICAgICAg ICAgICAgICAgIC8qIDAsMjcgT2xkIEtPSS04IHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJ CQkvKiAwLDI4IEpJUy03IHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDI5IFNo aWZ0IEpJUyB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwzMCBKYXBhbmVzZSBF VUMgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMzEgREVDIEthbmppIHRvIHRy YW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDMyIEhlYnJldy03IHRvIHRyYW5zcGFyZW50 ICovCisgICAgTlVMTCwJCQkvKiAwLDMzIExhdGluL0hlYnJldyB0byB0cmFuc3BhcmVudCAqLwor ICAgIE5VTEwsCQkJLyogMCwzNCBDUDg2MiBIZWJyZXcgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBO VUxMLAkJCS8qIDAsMzUgRUxPVCA5MjcgR3JlZWsgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxM LAkJCS8qIDAsMzYgTGF0aW4vR3JlZWsgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8q IDAsMzcgQ1A4NjkgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8qIDAsMzggTGF0aW4t OSB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCwzOSBDUDg1OCB0byB0cmFuc3Bh cmVudCAqLworICAgIE5VTEwsCQkJLyogMCw0MCBDUDg1NSB0byB0cmFuc3BhcmVudCAqLworICAg IE5VTEwsCQkJLyogMCw0MSBDUDEyNTEgdG8gdHJhbnNwYXJlbnQgKi8KKyAgICBOVUxMLAkJCS8q IDAsNDIgQnVsZ2FyaWFuIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDQzIENQ MTI1MCB0byB0cmFuc3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMCw0NCBNYXpvdmlhIHRvIHRy YW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDQ1IFVDUy0yIHRvIHRyYW5zcGFyZW50ICov CisgICAgTlVMTCwJCQkvKiAwLDQ2IFVURi04IHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJ CQkvKiAwLDQ3IEtPSThSIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDQ4IEtP SThVIHRvIHRyYW5zcGFyZW50ICovCisgICAgTlVMTCwJCQkvKiAwLDQ5IENQMTI1MiB0byB0cmFu c3BhcmVudCAqLworICAgIE5VTEwsCQkJLyogMSwwIHVzIGFzY2lpIHRvIGFzY2lpICovCisgICAg TlVMTCwJCQkvKiAxLDEgdWsgYXNjaWkgdG8gYXNjaWkgKi8KKyAgICB4ZHVhcywJCQkvKiAxLDIg ZHV0Y2ggbnJjIHRvIGFzY2lpICovCisgICAgeGZpYXMsCQkJLyogMSwzIGZpbm5pc2ggbnJjIHRv IGFzY2lpICovCisgICAgeGZyYXMsCQkJLyogMSw0IGZyZW5jaCBucmMgdG8gYXNjaWkgKi8KKyAg ICB4ZmNhcywJCQkvKiAxLDUgZnJlbmNoIGNhbmFkaWFuIG5yYyB0byBhc2NpaSAqLworICAgIHhn ZWFzLAkJCS8qIDEsNiBnZXJtYW4gbnJjIHRvIGFzY2lpICovCisgICAgeGh1YXMsCQkJLyogMSw3 IGh1bmdhcmlhbiBucmMgdG8gYXNjaWkgKi8KKyAgICB4aXRhcywJCQkvKiAxLDggaXRhbGlhbiBu cmMgdG8gYXNjaWkgKi8KKyAgICB4bm9hcywJCQkvKiAxLDkgbm9yd2VnaWFuL2RhbmlzaCBucmMg dG8gYXNjaWkgKi8KKyAgICB4cG9hcywJCQkvKiAxLDEwIHBvcnR1Z3Vlc2UgbnJjIHRvIGFzY2lp ICovCisgICAgeHNwYXMsCQkJLyogMSwxMSBzcGFuaXNoIG5yYyB0byBhc2NpaSAqLworICAgIHhz d2FzLAkJCS8qIDEsMTIgc3dlZGlzaCBucmMgdG8gYXNjaWkgKi8KKyAgICB4Y2hhcywJCQkvKiAx LDEzIHN3aXNzIG5yYyB0byBhc2NpaSAqLworICAgIHhsMWFzLAkJCS8qIDEsMTQgbGF0aW4tMSB0 byBhc2NpaSAqLworICAgIHhsMmFzLAkJCS8qIDEsMTUgbGF0aW4tMiB0byBhc2NpaSAqLworICAg IHhkbWFzLAkJCS8qIDEsMTYgZGVjIG1jcyB0byBhc2NpaSAqLworICAgIHhuZWFzLAkJCS8qIDEs MTcgTmVYVCB0byBhc2NpaSAqLworICAgIHg0M2FzLAkJCS8qIDEsMTggQ1A0MzcgdG8gYXNjaWkg Ki8KKyAgICB4ODVhcywJCQkvKiAxLDE5IENQODUwIHRvIGFzY2lpICovCisgICAgeDUyYXMsCQkJ LyogMSwyMCBDUDg1MCB0byBhc2NpaSAqLworICAgIHhhcWFzLAkJCS8qIDEsMjEgTWFjaW50b3No IExhdGluIHRvIGFzY2lpICovCisgICAgeGRnYXMsCQkJLyogMSwyMiBER0kgdG8gYXNjaWkgKi8K KyAgICB4cjhhcywJCQkvKiAxLDIzIEhQIHRvIEFTQ0lJICovCisgICAgeGxjYXMsCQkJLyogMSwy NCBMYXRpbi9DeXJpbGxpYyB0byBBU0NJSSAqLworICAgIHhhY2FzLCAgICAgICAgICAgICAgICAg ICAgICAvKiAxLDI1IENQODY2IHRvIEFTQ0lJICovCisgICAgeHNrYXMsCQkJLyogMSwyNiBTaG9y dCBLT0kgdG8gQVNDSUkgKi8KKyAgICB4azhhcywgICAgICAgICAgICAgICAgICAgICAgLyogMSwy NyBPbGQgS09JLTggQ3lyaWxsaWMgdG8gQVNDSUkgKi8KKyAgICBOVUxMLAkJCS8qIDEsMjggKi8K KyAgICBOVUxMLAkJCS8qIDEsMjkgKi8KKyAgICBOVUxMLAkJCS8qIDEsMzAgKi8KKyAgICBOVUxM LAkJCS8qIDEsMzEgKi8KKyAgICB4aDdhcywJCQkvKiAxLDMyIEhlYnJldy03IHRvIEFTQ0lJICov CisgICAgeGxoYXMsCQkJLyogMSwzMyBMYXRpbi9IZWJyZXcgdG8gQVNDSUkgKi8KKyAgICB4NjJh cywJCQkvKiAxLDM0IENQODYyIEhlYnJldyB0byBBU0NJSSAqLworICAgIHhlZ2FzLAkJCS8qIDEs MzUgRUxPVCA5MjcgR3JlZWsgdG8gQVNDSUkgKi8KKyAgICB4bGdhcywJCQkvKiAxLDM2IExhdGlu L0dyZWVrIHRvIEFTQ0lJICovCisgICAgeDY5YXMsCQkJLyogMSwzNyBDUDg2OSB0byBBU0NJSSAq LworICAgIHhsOWFzLAkJCS8qIDEsMzggTGF0aW4tOSB0byBBU0NJSSAqLworICAgIHg1OGFzLAkJ CS8qIDEsMzkgQ1A4NTggdG8gQVNDSUkgKi8KKyAgICB4NTVhcywJCQkvKiAxLDQwIENQODU1IHRv IEFTQ0lJICovCisgICAgeDEyNTFhcywJCQkvKiAxLDQxIENQMTI1MSB0byBBU0NJSSAqLworICAg IHhsZWZ0MTI4LAkJCS8qIDEsNDIgQnVsZ2FyaWFuIHRvIEFTQ0lJICovCisgICAgeDEyNTBhcywJ CQkvKiAxLDQzIENQMTI1MCB0byBBU0NJSSAqLworICAgIHhtemFzLAkJCS8qIDEsNDQgTWF6b3Zp YSB0byBBU0NJSSAqLworICAgIE5VTEwsCQkJLyogMSw0NSBVQ1MtMiB0byBBU0NJSSAqLworICAg IE5VTEwsCQkJLyogMSw0NiBVVEYtOCB0byBBU0NJSSAqLworICAgIHhrOGFzLAkJCS8qIDEsNDcg S09JOFIgdG8gQVNDSUkgKi8KKyAgICB4azhhcywJCQkvKiAxLDQ4IEtPSThVIHRvIEFTQ0lJICov CisgICAgeHcxYXMsCQkJLyogMSw0OSBDUDEyNTIgdG8gQVNDSUkgKi8KKyAgICBOVUxMLAkJCS8q IDIsMCB1cyBhc2NpaSB0byBsYXRpbi0xICovCisgICAgeHVrbDEsCQkJLyogMiwxIHVrIGFzY2lp IHRvIGxhdGluLTEgKi8KKyAgICB4ZHVsMSwJCQkvKiAyLDIgZHV0Y2ggbnJjIHRvIGxhdGluLTEg Ki8KKyAgICB4ZmlsMSwJCQkvKiAyLDMgZmlubmlzaCBucmMgdG8gbGF0aW4tMSAqLworICAgIHhm cmwxLAkJCS8qIDIsNCBmcmVuY2ggbnJjIHRvIGxhdGluLTEgKi8KKyAgICB4ZmNsMSwJCQkvKiAy LDUgZnJlbmNoIGNhbmFkaWFuIG5yYyB0byBsYXRpbi0xICovCisgICAgeGdlbDEsCQkJLyogMiw2 IGdlcm1hbiBucmMgdG8gbGF0aW4tMSAqLworICAgIHhodWwxLAkJCS8qIDIsNyBodW5nYXJpYW4g bnJjIHRvIGxhdGluLTEgKi8KKyAgICB4aXRsMSwJCQkvKiAyLDggaXRhbGlhbiBucmMgdG8gbGF0 aW4tMSAqLworICAgIHhub2wxLAkJCS8qIDIsOSBub3J3ZWdpYW4vZGFuaXNoIG5yYyB0byBsYXRp bi0xICovCisgICAgeHBvbDEsCQkJLyogMiwxMCBwb3J0dWd1ZXNlIG5yYyB0byBsYXRpbi0xICov CisgICAgeHNwbDEsCQkJLyogMiwxMSBzcGFuaXNoIG5yYyB0byBsYXRpbi0xICovCisgICAgeHN3 bDEsCQkJLyogMiwxMiBzd2VkaXNoIG5yYyB0byBsYXRpbi0xICovCisgICAgeGNobDEsCQkJLyog MiwxMyBzd2lzcyBucmMgdG8gbGF0aW4tMSAqLworICAgIE5VTEwsCQkJLyogMiwxNCBsYXRpbi0x IHRvIGxhdGluLTEgKi8KKyAgICB4bDJsMSwJCQkvKiAyLDE1IGxhdGluLTIgdG8gbGF0aW4tMSAq LworICAgIHhkbWwxLAkJCS8qIDIsMTYgZGVjIG1jcyB0byBsYXRpbi0xICovCisgICAgeG5lbDEs ICAgICAgICAgICAgICAgICAgICAgIC8qIDIsMTcgTmVYVCB0byBMYXRpbi0xICovCisgICAgeDQz bDEsICAgICAgICAgICAgICAgICAgICAgIC8qIDIsMTggQ1A0MzcgdG8gTGF0aW4tMSAqLworICAg IHg4NWwxLCAgICAgICAgICAgICAgICAgICAgICAvKiAyLDE5IENQODUwIHRvIExhdGluLTEgKi8K KyAgICB4NTJsMSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwyMCBDUDg1MiB0byBMYXRpbi0x ICovCisgICAgeGFxbDEsICAgICAgICAgICAgICAgICAgICAgIC8qIDIsMjEgTWFjaW50b3NoIExh dGluIHRvIExhdGluLTEgKi8KKyAgICB4ZGdsMSwgICAgICAgICAgICAgICAgICAgICAgLyogMiwy MiBER0kgdG8gTGF0aW4tMSAqLworICAgIHhyOGwxLCAgICAgICAgICAgICAgICAgICAgICAvKiAy LDIzIEhQIHRvIExhdGluLTEgKi8KKyAgICB4bGNhcywgICAgICAgICAgICAgICAgICAgICAgLyog MiwyNCBMYXRpbi9DeXJpbGxpYyB0byBMYXRpbi0xICovCisgICAgeGFjYXMsICAgICAgICAgICAg ICAgICAgICAgIC8qIDIsMjUgQ1A4NjYgdG8gTGF0aW4tMSAqLworICAgIHhza2FzLCAgICAgICAg ICAgICAgICAgICAgICAvKiAyLDI2IFNob3J0IEtPSSB0byBMYXRpbi0xICovCisgICAgeGs4YXMs ICAgICAgICAgICAgICAgICAgICAgIC8qIDIsMjcgT2xkIEtPSS04IEN5cmlsbGljIHRvIExhdGlu LTEgKi8KKyAgICBOVUxMLAkJCS8qIDIsMjggS2FuamkgLi4uICovCisgICAgTlVMTCwJCQkvKiAy LDI5ICovCisgICAgTlVMTCwJCQkvKiAyLDMwICovCisgICAgTlVMTCwJCQkvKiAyLDMxICovCisg ICAgeGg3YXMsCQkJLyogMiwzMiBIZWJyZXctNyB0byBMYXRpbi0xICovCisgICAgeGxobDEsCQkJ LyogMiwzMyBMYXRpbi9IZWJyZXcgdG8gTGF0aW4tMSAqLworICAgIHg2MmwxLAkJCS8qIDIsMzQg Q1A4NjIgSGVicmV3IHRvIExhdGluLTEgKi8KKyAgICB4ZWdhcywJCQkvKiAyLDM1IEVMT1QgOTI3 IEdyZWVrIHRvIExhdGluLTEgKi8KKyAgICB4bGdsMSwJCQkvKiAyLDM2IExhdGluL0dyZWVrIHRv IExhdGluLTEgKi8KKyAgICBOVUxMLAkJCS8qIDIsMzcgQ1A4NjkgdG8gTGF0aW4tMSAqLworICAg IE5VTEwsCQkJLyogMiwzOCBMYXRpbi05IHRvIExhdGluLTEgKi8KKyAgICB4NThsMSwJCQkvKiAy LDM5IENQODU4IHRvIExhdGluLTEgKi8KKyAgICB4NTVhcywJCQkvKiAyLDQwIENQODU1IHRvIExh dGluLTEgKi8KKyAgICB4MTI1MWFzLAkJCS8qIDIsNDEgQ1AxMjUxIHRvIExhdGluLTEgKi8KKyAg ICB4bGVmdDEyOCwJCQkvKiAyLDQyIEJ1bGdhcmlhbiB0byBMYXRpbi0xICovCisgICAgeDEyNTBs MSwJCQkvKiAyLDQzIENQMTI1MCB0byBMYXRpbi0xICovCisgICAgeG16bDEsCQkJLyogMiw0NCBN YXpvdmlhIHRvIExhdGluLTEgKi8KKyAgICBOVUxMLAkJCS8qIDIsNDUgVUNTLTIgdG8gTGF0aW4t MSAqLworICAgIE5VTEwsCQkJLyogMiw0NiBVVEYtOCB0byBMYXRpbi0xICovCisgICAgeGs4YXMs CQkJLyogMiw0NyBLT0k4UiB0byBMYXRpbi0xICovCisgICAgeGs4YXMsCQkJLyogMiw0OCBLT0k4 VSB0byBMYXRpbi0xICovCisgICAgeHcxbDEsCQkJLyogMiw0OSBDUDEyNTIgdG8gTGF0aW4tMSAq LworICAgIE5VTEwsCQkJLyogMywwIHVzIGFzY2lpIHRvIGxhdGluLTIgKi8KKyAgICBOVUxMLAkJ CS8qIDMsMSB1ayBhc2NpaSB0byBsYXRpbi0yICovCisgICAgeGR1YXMsCQkJLyogMywyIGR1dGNo IG5yYyB0byBsYXRpbi0yICovCisgICAgeGZpYXMsCQkJLyogMywzIGZpbm5pc2ggbnJjIHRvIGxh dGluLTIgKi8KKyAgICB4ZnJhcywJCQkvKiAzLDQgZnJlbmNoIG5yYyB0byBsYXRpbi0yICovCisg ICAgeGZjYXMsCQkJLyogMyw1IGZyZW5jaCBjYW5hZGlhbiBucmMgdG8gbGF0aW4tMiAqLworICAg IHhnZWwyLAkJCS8qIDMsNiBnZXJtYW4gbnJjIHRvIGxhdGluLTIgKi8KKyAgICB4aHVsMiwJCQkv KiAzLDcgaHVuZ2FyaWFuIG5yYyB0byBsYXRpbi0yICovCisgICAgeGl0YXMsCQkJLyogMyw4IGl0 YWxpYW4gbnJjIHRvIGxhdGluLTIgKi8KKyAgICB4bm9hcywJCQkvKiAzLDkgbm9yd2VnaWFuL2Rh bmlzaCBucmMgdG8gbGF0aW4tMiAqLworICAgIHhwb2FzLAkJCS8qIDMsMTAgcG9ydHVndWVzZSBu cmMgdG8gbGF0aW4tMiAqLworICAgIHhzcGFzLAkJCS8qIDMsMTEgc3BhbmlzaCBucmMgdG8gbGF0 aW4tMiAqLworICAgIHhzd2FzLAkJCS8qIDMsMTIgc3dlZGlzaCBucmMgdG8gbGF0aW4tMiAqLwor ICAgIHhjaGFzLAkJCS8qIDMsMTMgc3dpc3MgbnJjIHRvIGxhdGluLTIgKi8KKyAgICB4bDFsMiwJ CQkvKiAzLDE0IGxhdGluLTEgdG8gbGF0aW4tMiAqLworICAgIE5VTEwsCQkJLyogMywxNSBsYXRp bi0yIHRvIGxhdGluLTIgKi8KKyAgICB4bDFsMiwJCQkvKiAzLDE2IGRlYyBtY3MgdG8gbGF0aW4t MiAqLworICAgIHhuZWwyLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDE3IE5lWFQgdG8gTGF0 aW4tMiAqLworICAgIHg0M2wyLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDE4IENQNDM3IHRv IExhdGluLTIgKi8KKyAgICB4ODVsMiwgICAgICAgICAgICAgICAgICAgICAgLyogMywxOSBDUDg1 MCB0byBMYXRpbi0yICovCisgICAgeDUybDIsICAgICAgICAgICAgICAgICAgICAgIC8qIDMsMjAg Q1A4NTIgdG8gTGF0aW4tMiAqLworICAgIHhhcWwyLCAgICAgICAgICAgICAgICAgICAgICAvKiAz LDIxIE1hY2ludG9zaCBMYXRpbiB0byBMYXRpbi0yICovCisgICAgeGRnbDIsICAgICAgICAgICAg ICAgICAgICAgIC8qIDMsMjIgREdJIHRvIExhdGluLTIgKi8KKyAgICB4cjhsMiwgICAgICAgICAg ICAgICAgICAgICAgLyogMywyMyBIUCB0byBMYXRpbi0yICovCisgICAgeGxjYXMsICAgICAgICAg ICAgICAgICAgICAgIC8qIDMsMjQgTGF0aW4vQ3lyaWxsaWMgdG8gTGF0aW4tMiAqLworICAgIHhh Y2FzLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDI1IENQODY2IHRvIExhdGluLTIgKi8KKyAg ICB4c2thcywgICAgICAgICAgICAgICAgICAgICAgLyogMywyNiBTaG9ydCBLT0kgdG8gTGF0aW4t MiAqLworICAgIHhrOGFzLCAgICAgICAgICAgICAgICAgICAgICAvKiAzLDI3IE9sZCBLT0ktOCBD eXJpbGxpYyB0byBMYXRpbi0yICovCisgICAgTlVMTCwJCQkvKiAzLDI4IEthbmppIC4uLiAqLwor ICAgIE5VTEwsCQkJLyogMywyOSAqLworICAgIE5VTEwsCQkJLyogMywzMCAqLworICAgIE5VTEws CQkJLyogMywzMSAqLworICAgIHhoN2FzLAkJCS8qIDMsMzIgSGVicmV3LTcgdG8gTGF0aW4tMiAq LworICAgIHhsaGFzLAkJCS8qIDMsMzMgTGF0aW4vSGVicmV3IHRvIExhdGluLTIgKi8KKyAgICB4 NjJhcywJCQkvKiAzLDM0IENQODYyIEhlYnJldyB0byBMYXRpbi0yICovCisgICAgeGVnYXMsCQkJ LyogMywzNSBFTE9UIDkyNyBHcmVlayB0byBMYXRpbi0yICovCisgICAgeGwybGcsCQkJLyogMywz NiBMYXRpbi9HcmVlayB0byBMYXRpbi0yICovCisgICAgeGxlZnQxMjgsCQkJLyogMywzNyBDUDg2 OSB0byBMYXRpbi0yICovCisgICAgeGw5bDIsCQkJLyogMywzOCBMYXRpbi05IHRvIExhdGluLTIg Ki8KKyAgICB4NThsMiwJCQkvKiAzLDM5IENQODU4IHRvIExhdGluLTIgKi8KKyAgICB4NTVhcywJ CQkvKiAzLDQwIENQODU1IHRvIExhdGluLTIgKi8KKyAgICB4MTI1MWFzLAkJCS8qIDMsNDEgQ1Ax MjUxIHRvIExhdGluLTIgKi8KKyAgICB4bGVmdDEyOCwJCQkvKiAzLDQyIEJ1bGdhcmlhbiB0byBM YXRpbi0yICovCisgICAgeDEyNTBsMiwJCQkvKiAzLDQzIENQMTI1MCB0byBMYXRpbi0yICovCisg ICAgeG16bDIsCQkJLyogMyw0NCBNYXpvdmlhIHRvIExhdGluLTIgKi8KKyAgICBOVUxMLAkJCS8q IDMsNDUgVUNTLTIgdG8gTGF0aW4tMiAqLworICAgIE5VTEwsCQkJLyogMyw0NiBVVEYtOCB0byBM YXRpbi0yICovCisgICAgeGs4YXMsCQkJLyogMyw0NyBLT0k4UiB0byBMYXRpbi0yICovCisgICAg eGs4YXMsCQkJLyogMyw0OCBLT0k4VSB0byBMYXRpbi0yICovCisgICAgeHcxbDIsCQkJLyogMyw0 OSBDUDEyNTIgdG8gbGF0aW4tMiAqLworICAgIHhhc2xjLAkJCS8qIDQsMCB1cyBhc2NpaSB0byBs YXRpbi9jeXJpbGxpYyAqLworICAgIHhhc2xjLAkJCS8qIDQsMSB1ayBhc2NpaSB0byBsYXRpbi9j eXJpbGxpYyAqLworICAgIHhkdWFzLAkJCS8qIDQsMiBkdXRjaCBucmMgdG8gbGF0aW4vY3lyaWxs aWMgKi8KKyAgICB4ZmlhcywJCQkvKiA0LDMgZmlubmlzaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMg Ki8KKyAgICB4ZnJhcywJCQkvKiA0LDQgZnJlbmNoIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwor ICAgIHhmY2FzLAkJCS8qIDQsNSBmcmVuY2ggY2FuYWRpYW4gbnJjIHRvIGxhdGluL2N5cmlsbGlj ICovCisgICAgeGdlYXMsCQkJLyogNCw2IGdlcm1hbiBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8K KyAgICB4aHVhcywJCQkvKiA0LDcgaHVuZ2FyaWFuIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwor ICAgIHhpdGFzLAkJCS8qIDQsOCBpdGFsaWFuIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLworICAg IHhub2FzLAkJCS8qIDQsOSBub3JnZS9kYW5pc2ggbnJjIHRvIGxhdGluL2N5cmlsbGljICovCisg ICAgeHBvYXMsCQkJLyogNCwxMCBwb3J0dWd1ZXNlIG5yYyB0byBsYXRpbi9jeXJpbGxpYyAqLwor ICAgIHhzcGFzLAkJCS8qIDQsMTEgc3BhbmlzaCBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8KKyAg ICB4c3dhcywJCQkvKiA0LDEyIHN3ZWRpc2ggbnJjIHRvIGxhdGluL2N5cmlsbGljICovCisgICAg eGNoYXMsCQkJLyogNCwxMyBzd2lzcyBucmMgdG8gbGF0aW4vY3lyaWxsaWMgKi8KKyAgICB4bDFh cywJCQkvKiA0LDE0IGxhdGluLTEgdG8gbGF0aW4vY3lyaWxsaWMgKi8KKyAgICB4bDJhcywJCQkv KiA0LDE1IGxhdGluLTIgdG8gbGF0aW4vY3lyaWxsaWMgKi8KKyAgICB4ZG1hcywJCQkvKiA0LDE2 IGRlYyBtY3MgdG8gbGF0aW4vY3lyaWxsaWMgKi8KKyAgICB4bmVhcywJCQkvKiA0LDE3IE5lWFQg dG8gbGF0aW4vY3lyaWxsaWMgKi8KKyAgICB4NDNhcywJCQkvKiA0LDE4IENQNDM3IHRvIGxhdGlu L2N5cmlsbGljICovCisgICAgeDg1YXMsCQkJLyogNCwxOSBDUDg1MCB0byBsYXRpbi9jeXJpbGxp YyAqLworICAgIHg1MmFzLAkJCS8qIDQsMjAgQ1A4NTIgdG8gbGF0aW4vY3lyaWxsaWMgKi8KKyAg ICB4YXFhcywJCQkvKiA0LDIxIE1hY2ludG9zaCBMYXRpbiB0byBsYXRpbi9jeXJpbGxpYyAqLwor ICAgIHhkZ2FzLAkJCS8qIDQsMjIgREdJIHRvIExhdGluL0N5cmlsbGljICovCisgICAgeHI4YXMs CQkJLyogNCwyMyBIUCB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIE5VTEwsICAgICAgICAgICAg ICAgICAgICAgICAvKiA0LDI0IExhdGluL0N5cmlsbGljIHRvIExhdGluL0N5cmlsbGljICovCisg ICAgeGFjbGMsICAgICAgICAgICAgICAgICAgICAgIC8qIDQsMjUgQ1A4NjYgdG8gTGF0aW4vQ3ly aWxsaWMgKi8KKyAgICB4c2tjeSwgICAgICAgICAgICAgICAgICAgICAgLyogNCwyNiBTaG9ydCBL T0kgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4azhsYywgICAgICAgICAgICAgICAgICAgICAg LyogNCwyNyBPbGQgS09JLTggQ3lyaWxsaWMgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICBOVUxM LAkJCS8qIDQsMjggS2FuamkuLi4gKi8KKyAgICBOVUxMLAkJCS8qIDQsMjkgKi8KKyAgICBOVUxM LAkJCS8qIDQsMzAgKi8KKyAgICBOVUxMLAkJCS8qIDQsMzEgKi8KKyAgICB4aDdhcywJCQkvKiA0 LDMyIEhlYnJldy03IHRvIExhdGluL0N5cmlsbGljICovCisgICAgeGxoYXMsCQkJLyogNCwzMyBM YXRpbi9IZWJyZXcgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4NjJhcywJCQkvKiA0LDM0IENQ ODYyIEhlYnJldyB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHhlZ2FzLAkJCS8qIDQsMzUgRUxP VCA5MjcgR3JlZWsgdG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4bGVmdDE2MCwJCQkvKiA0LDM2 IExhdGluL0dyZWVrIHRvIExhdGluL0N5cmlsbGljICovCisgICAgeGxlZnQxMjgsCQkJLyogNCwz NyBDUDg2OSB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHhsMWFzLAkJCS8qIDQsMzggbGF0aW4t OSB0byBsYXRpbi9jeXJpbGxpYyAqLworICAgIHhsZWZ0MTI4LAkJCS8qIDQsMzkgQ1A4NTggdG8g TGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4NTVsYywJCQkvKiA0LDQwIENQODU1IHRvIExhdGluL0N5 cmlsbGljICovCisgICAgeDEyNTFsYywJCQkvKiA0LDQxIENQMTI1MSB0byBMYXRpbi9DeXJpbGxp YyAqLworICAgIHhidWxjLAkJCS8qIDQsNDIgQnVsZ2FyaWFuIHRvIExhdGluL0N5cmlsbGljICov CisgICAgeDEyNTBhcywJCQkvKiA0LDQzIENQMTI1MCB0byBMYXRpbi9DeXJpbGxpYyAqLworICAg IHhtemFzLAkJCS8qIDQsNDQgTWF6b3ZpYSB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIE5VTEws CQkJLyogNCw0NSBVQ1MtMiB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIE5VTEwsCQkJLyogNCw0 NiBVVEYtOCB0byBMYXRpbi9DeXJpbGxpYyAqLworICAgIHhrcmxjLAkJCS8qIDQsNDcgS09JOFIg dG8gTGF0aW4vQ3lyaWxsaWMgKi8KKyAgICB4a3VsYywJCQkvKiA0LDQ4IEtPSThVIHRvIExhdGlu L0N5cmlsbGljICovCisgICAgeHcxbGMsCQkJLyogNCw0OSBDUDEyNTIgdG8gTGF0aW4vQ3lyaWxs aWMgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDAgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDEgKi8KKyAg ICBOVUxMLAkJCS8qIDUsMDIgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDMgKi8KKyAgICBOVUxMLAkJ CS8qIDUsMDQgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDUgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDYg Ki8KKyAgICBOVUxMLAkJCS8qIDQuMDcgKi8KKyAgICBOVUxMLAkJCS8qIDUsMDggKi8KKyAgICBO VUxMLAkJCS8qIDUsMDkgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTAgKi8KKyAgICBOVUxMLAkJCS8q IDUsMTEgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTIgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTMgKi8K KyAgICBOVUxMLAkJCS8qIDUsMTQgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTUgKi8KKyAgICBOVUxM LAkJCS8qIDUsMTYgKi8KKyAgICBOVUxMLAkJCS8qIDUsMTcgKi8KKyAgICBOVUxMLAkJCS8qIDUs MTggKi8KKyAgICBOVUxMLAkJCS8qIDUsMTkgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjAgKi8KKyAg ICBOVUxMLAkJCS8qIDUsMjEgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjIgKi8KKyAgICBOVUxMLAkJ CS8qIDUsMjMgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjQgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjUg Ki8KKyAgICBOVUxMLAkJCS8qIDUsMjYgKi8KKyAgICBOVUxMLAkJCS8qIDUsMjcgKi8KKyAgICBO VUxMLAkJCS8qIDUsMjggKi8KKyAgICBOVUxMLAkJCS8qIDUsMjkgKi8KKyAgICBOVUxMLAkJCS8q IDUsMzAgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzEgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzIgKi8K KyAgICBOVUxMLAkJCS8qIDUsMzMgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzQgKi8KKyAgICBOVUxM LAkJCS8qIDUsMzUgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzYgKi8KKyAgICBOVUxMLAkJCS8qIDUs MzcgKi8KKyAgICBOVUxMLAkJCS8qIDUsMzggKi8KKyAgICBOVUxMLAkJCS8qIDUsMzkgKi8KKyAg ICBOVUxMLAkJCS8qIDUsNDAgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDEgKi8KKyAgICBOVUxMLAkJ CS8qIDUsNDIgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDMgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDQg Ki8KKyAgICBOVUxMLAkJCS8qIDUsNDUgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDYgKi8KKyAgICBO VUxMLAkJCS8qIDUsNDcgKi8KKyAgICBOVUxMLAkJCS8qIDUsNDggKi8KKyAgICBOVUxMLAkJCS8q IDUsNDkgKi8KKyAgICBOVUxMLAkJCS8qIDYsMCB1cyBhc2NpaSB0byBMYXRpbi9IZWJyZXcgKi8K KyAgICBOVUxMLAkJCS8qIDYsMSB1ayBhc2NpaSB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4ZHVh cywJCQkvKiA2LDIgZHV0Y2ggbnJjIHRvIExhdGluL0hlYnJldyAqLworICAgIHhmaWFzLAkJCS8q IDYsMyBmaW5uaXNoIG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4ZnJhcywJCQkvKiA2LDQg ZnJlbmNoIG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4ZmNhcywJCQkvKiA2LDUgZnJlbmNo IGNhbmFkaWFuIG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4Z2VhcywJCQkvKiA2LDYgZ2Vy bWFuIG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4aHVhcywJCQkvKiA2LDcgaHVuZ2FyaWFu IG5yYyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4aXRhcywJCQkvKiA2LDggaXRhbGlhbiBucmMg dG8gTGF0aW4vSGVicmV3ICovCisgICAgeG5vYXMsCQkJLyogNiw5IG5vcmdlL2RhbmlzaCBucmMg dG8gTGF0aW4vSGVicmV3ICovCisgICAgeHBvYXMsCQkJLyogNiwxMCBwb3J0dWd1ZXNlIG5yYyB0 byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4c3BhcywJCQkvKiA2LDExIHNwYW5pc2ggbnJjIHRvIExh dGluL0hlYnJldyAqLworICAgIHhzd2FzLAkJCS8qIDYsMTIgc3dlZGlzaCBucmMgdG8gTGF0aW4v SGVicmV3ICovCisgICAgeGNoYXMsCQkJLyogNiwxMyBzd2lzcyBucmMgdG8gTGF0aW4vSGVicmV3 ICovCisgICAgeGwxbGgsCQkJLyogNiwxNCBsYXRpbi0xIHRvIExhdGluL0hlYnJldyAqLworICAg IHhsMmFzLAkJCS8qIDYsMTUgbGF0aW4tMiB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4ZG1hcywJ CQkvKiA2LDE2IGRlYyBtY3MgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeG5lYXMsCQkJLyogNiwx NyBOZVhUIHRvIExhdGluL0hlYnJldyAqLworICAgIHg0M2FzLAkJCS8qIDYsMTggQ1A0MzcgdG8g TGF0aW4vSGVicmV3ICovCisgICAgeDg1YXMsCQkJLyogNiwxOSBDUDg1MCB0byBMYXRpbi9IZWJy ZXcgKi8KKyAgICB4NTJhcywJCQkvKiA2LDIwIENQODUyIHRvIExhdGluL0hlYnJldyAqLworICAg IHhhcWFzLAkJCS8qIDYsMjEgTWFjaW50b3NoIExhdGluIHRvIExhdGluL0hlYnJldyAqLworICAg IHhkZ2FzLAkJCS8qIDYsMjIgREdJIHRvIExhdGluL0hlYnJldyAqLworICAgIHhyOGFzLAkJCS8q IDYsMjMgSFAgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeGxjYXMsICAgICAgICAgICAgICAgICAg ICAgIC8qIDYsMjQgTGF0aW4vQ3lyaWxsaWMgdG8gTGF0aW4vSGVicmV3ICovCisgICAgeGFjYXMs ICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjUgQ1A4NjYgdG8gTGF0aW4vSGVicmV3ICovCisg ICAgeHNrYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDYsMjYgU2hvcnQgS09JIHRvIExhdGlu L0hlYnJldyAqLworICAgIHhrOGFzLCAgICAgICAgICAgICAgICAgICAgICAvKiA2LDI3IE9sZCBL T0ktOCBDeXJpbGxpYyB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICBOVUxMLAkJCS8qIDYsMjggS2Fu amkuLi4gKi8KKyAgICBOVUxMLAkJCS8qIDYsMjkgKi8KKyAgICBOVUxMLAkJCS8qIDYsMzAgKi8K KyAgICBOVUxMLAkJCS8qIDYsMzEgKi8KKyAgICB4aDdsaCwJCQkvKiA2LDMyIEhlYnJldy03IHRv IExhdGluL0hlYnJldyAqLworICAgIE5VTEwsCQkJLyogNiwzMyBMYXRpbi9IZWJyZXcgdG8gTGF0 aW4vSGVicmV3ICovCisgICAgeDYybGgsCQkJLyogNiwzNCBDUDg2MiBIZWJyZXcgdG8gTGF0aW4v SGVicmV3ICovCisgICAgeGVnYXMsCQkJLyogNiwzNSBFTE9UIDkyNyBHcmVlayB0byBMYXRpbi9I ZWJyZXcgKi8KKyAgICB4bGdhcywJCQkvKiA2LDM2IExhdGluL0dyZWVrIHRvIExhdGluL0hlYnJl dyAqLworICAgIHg2OWFzLAkJCS8qIDYsMzcgQ1A4NjkgdG8gTGF0aW4vSGVicmV3ICovCisgICAg eGwxYXMsCQkJLyogNiwzOCBsYXRpbi05IHRvIExhdGluL0hlYnJldyAqLworICAgIHg1OGFzLAkJ CS8qIDYsMzkgQ1A4NTggdG8gTGF0aW4vSGVicmV3ICovCisgICAgeDU1YXMsCQkJLyogNiw0MCBD UDg1NSB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICB4MTI1MWFzLAkJCS8qIDYsNDEgQ1AxMjUxIHRv IExhdGluL0hlYnJldyAqLworICAgIHhsZWZ0MTI4LAkJCS8qIDYsNDIgQnVsZ2FyaWFuIHRvIExh dGluL0hlYnJldyAqLworICAgIHgxMjUwYXMsCQkJLyogNiw0MyBDUDEyNTAgdG8gTGF0aW4vSGVi cmV3ICovCisgICAgeG16YXMsCQkJLyogNiw0NCBNYXpvdmlhIHRvIExhdGluL0hlYnJldyAqLwor ICAgIE5VTEwsCQkJLyogNiw0NSBVQ1MtMiB0byBMYXRpbi9IZWJyZXcgKi8KKyAgICBOVUxMLAkJ CS8qIDYsNDYgVVRGLTggdG8gTGF0aW4vSGVicmV3ICovCisgICAgTlVMTCwJCQkvKiA2LDQ3IEtP SThSIHRvIExhdGluL0hlYnJldyAqLworICAgIE5VTEwsCQkJLyogNiw0OCBLT0k4VSB0byBMYXRp bi9IZWJyZXcgKi8KKyAgICB4dzFsaCwJCQkvKiA2LDQ5IENQMTI1MiB0byBMYXRpbi9IZWJyZXcg Ki8KKyAgICBOVUxMLAkJCS8qIDcsMCB1cyBhc2NpaSB0byBMYXRpbi9HcmVlayAqLworICAgIE5V TEwsCQkJLyogNywxIHVrIGFzY2lpIHRvIExhdGluL0dyZWVrICovCisgICAgeGR1YXMsCQkJLyog NywyIGR1dGNoIG5yYyB0byBMYXRpbi9HcmVlayAqLworICAgIHhmaWFzLAkJCS8qIDcsMyBmaW5u aXNoIG5yYyB0byBMYXRpbi9HcmVlayAqLworICAgIHhmcmFzLAkJCS8qIDcsNCBmcmVuY2ggbnJj IHRvIExhdGluL0dyZWVrICovCisgICAgeGZjYXMsCQkJLyogNyw1IGZyZW5jaCBjYW5hZGlhbiBu cmMgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4Z2VhcywJCQkvKiA3LDYgZ2VybWFuIG5yYyB0byBM YXRpbi9HcmVlayAqLworICAgIHhodWFzLAkJCS8qIDcsNyBodW5nYXJpYW4gbnJjIHRvIExhdGlu L0dyZWVrICovCisgICAgeGl0YXMsCQkJLyogNyw4IGl0YWxpYW4gbnJjIHRvIExhdGluL0dyZWVr ICovCisgICAgeG5vYXMsCQkJLyogNyw5IG5vcmdlL2RhbmlzaCBucmMgdG8gTGF0aW4vR3JlZWsg Ki8KKyAgICB4cG9hcywJCQkvKiA3LDEwIHBvcnR1Z3Vlc2UgbnJjIHRvIExhdGluL0dyZWVrICov CisgICAgeHNwYXMsCQkJLyogNywxMSBzcGFuaXNoIG5yYyB0byBMYXRpbi9HcmVlayAqLworICAg IHhzd2FzLAkJCS8qIDcsMTIgc3dlZGlzaCBucmMgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4Y2hh cywJCQkvKiA3LDEzIHN3aXNzIG5yYyB0byBMYXRpbi9HcmVlayAqLworICAgIHhsMWxnLAkJCS8q IDcsMTQgbGF0aW4tMSB0byBMYXRpbi9HcmVlayAqLworICAgIHhsMmxnLAkJCS8qIDcsMTUgbGF0 aW4tMiB0byBMYXRpbi9HcmVlayAqLworICAgIHhsMWxnLAkJCS8qIDcsMTYgZGVjIG1jcyB0byBM YXRpbi9HcmVlayAqLworICAgIHhuZWFzLAkJCS8qIDcsMTcgTmVYVCB0byBMYXRpbi9HcmVlayAq LworICAgIHhsZWZ0MTI4LAkJCS8qIDcsMTggQ1A0MzcgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4 ODVhcywJCQkvKiA3LDE5IENQODUwIHRvIExhdGluL0dyZWVrICovCisgICAgeDUyYXMsCQkJLyog NywyMCBDUDg1MiB0byBMYXRpbi9HcmVlayAqLworICAgIHhhcWFzLAkJCS8qIDcsMjEgTWFjaW50 b3NoIExhdGluIHRvIExhdGluL0dyZWVrICovCisgICAgeGRnYXMsCQkJLyogNywyMiBER0kgdG8g TGF0aW4vR3JlZWsgKi8KKyAgICB4cjhhcywJCQkvKiA3LDIzIEhQIHRvIExhdGluL0dyZWVrICov CisgICAgeGxlZnQxNjAsICAgICAgICAgICAgICAgICAgIC8qIDcsMjQgTGF0aW4vQ3lyaWxsaWMg dG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4bGVmdDEyOCwgICAgICAgICAgICAgICAgICAgLyogNywy NSBDUDg2NiB0byBMYXRpbi9HcmVlayAqLworICAgIHhza2FzLCAgICAgICAgICAgICAgICAgICAg ICAvKiA3LDI2IFNob3J0IEtPSSB0byBMYXRpbi9HcmVlayAqLworICAgIHhrOGFzLCAgICAgICAg ICAgICAgICAgICAgICAvKiA3LDI3IE9sZCBLT0ktOCBDeXJpbGxpYyB0byBMYXRpbi9HcmVlayAq LworICAgIE5VTEwsCQkJLyogNywyOCBLYW5qaS4uLiAqLworICAgIE5VTEwsCQkJLyogNywyOSAq LworICAgIE5VTEwsCQkJLyogNywzMCAqLworICAgIE5VTEwsCQkJLyogNywzMSAqLworICAgIHho N2FzLAkJCS8qIDcsMzIgSGVicmV3LTcgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICBOVUxMLAkJCS8q IDcsMzMgTGF0aW4vSGVicmV3IHRvIExhdGluL0dyZWVrICovCisgICAgeDYyYXMsCQkJLyogNywz NCBDUDg2MiBIZWJyZXcgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4ZWdsZywJCQkvKiA3LDM1IEVM T1QgOTI3IEdyZWVrIHRvIExhdGluL0dyZWVrICovCisgICAgTlVMTCwJCQkvKiA3LDM2IExhdGlu L0dyZWVrIHRvIExhdGluL0dyZWVrICovCisgICAgeDY5bGcsCQkJLyogNywzNyBDUDg2OSB0byBM YXRpbi9HcmVlayAqLworICAgIHhsMWFzLAkJCS8qIDcsMzggbGF0aW4tOSB0byBMYXRpbi9HcmVl ayAqLworICAgIHhsMWFzLAkJCS8qIDcsMzkgbGF0aW4tOSB0byBMYXRpbi9IZWJyZXcqLworICAg IHhsZWZ0MTI4LAkJCS8qIDcsNDAgQ1A4NTUgdG8gTGF0aW4vR3JlZWsgKi8KKyAgICB4bGVmdDEy OCwJCQkvKiA3LDQxIENQMTI1MSB0byBMYXRpbi9HcmVlayAqLworICAgIHhsZWZ0MTI4LAkJCS8q IDcsNDIgQnVsZ2FyaWFuIHRvIExhdGluL0dyZWVrICovCisgICAgeDEyNTBhcywJCQkvKiA3LDQz IENQMTI1MCB0byBMYXRpbi9HcmVlayAqLworICAgIHhtemFzLAkJCS8qIDcsNDQgTWF6b3ZpYSB0 byBMYXRpbi9HcmVlayAqLworICAgIE5VTEwsCQkJLyogNyw0NSBVQ1MtMiB0byBMYXRpbi9HcmVl ayAqLworICAgIE5VTEwsCQkJLyogNyw0NiBVVEYtOCB0byBMYXRpbi9HcmVlayAqLworICAgIE5V TEwsCQkJLyogNyw0NyBLT0k4UiB0byBMYXRpbi9HcmVlayAqLworICAgIE5VTEwsCQkJLyogNyw0 OCBLT0k4VSB0byBMYXRpbi9HcmVlayAqLworICAgIHh3MWxnLAkJCS8qIDcsNDkgQ1AxMjUyIHRv IExhdGluL0dyZWVrICovCisgICAgTlVMTCwJCQkvKiA4LDAgdXMgYXNjaWkgdG8gbGF0aW4tOSAq LworICAgIHh1a2wxLAkJCS8qIDgsMSB1ayBhc2NpaSB0byBsYXRpbi05ICovCisgICAgeGR1bDEs CQkJLyogOCwyIGR1dGNoIG5yYyB0byBsYXRpbi05ICovCisgICAgeGZpbDEsCQkJLyogOCwzIGZp bm5pc2ggbnJjIHRvIGxhdGluLTkgKi8KKyAgICB4ZnJsMSwJCQkvKiA4LDQgZnJlbmNoIG5yYyB0 byBsYXRpbi05ICovCisgICAgeGZjbDEsCQkJLyogOCw1IGZyZW5jaCBjYW5hZGlhbiBucmMgdG8g bGF0aW4tOSAqLworICAgIHhnZWwxLAkJCS8qIDgsNiBnZXJtYW4gbnJjIHRvIGxhdGluLTkgKi8K KyAgICB4aHVsMSwJCQkvKiA4LDcgaHVuZ2FyaWFuIG5yYyB0byBsYXRpbi05ICovCisgICAgeGl0 bDEsCQkJLyogOCw4IGl0YWxpYW4gbnJjIHRvIGxhdGluLTkgKi8KKyAgICB4bm9sMSwJCQkvKiA4 LDkgbm9yd2VnaWFuL2RhbmlzaCBucmMgdG8gbGF0aW4tOSAqLworICAgIHhwb2wxLAkJCS8qIDgs MTAgcG9ydHVndWVzZSBucmMgdG8gbGF0aW4tOSAqLworICAgIHhzcGwxLAkJCS8qIDgsMTEgc3Bh bmlzaCBucmMgdG8gbGF0aW4tOSAqLworICAgIHhzd2wxLAkJCS8qIDgsMTIgc3dlZGlzaCBucmMg dG8gbGF0aW4tOSAqLworICAgIHhjaGwxLAkJCS8qIDgsMTMgc3dpc3MgbnJjIHRvIGxhdGluLTkg Ki8KKyAgICBOVUxMLAkJCS8qIDgsMTQgbGF0aW4tMSB0byBsYXRpbi05ICovCisgICAgeGwybDks CQkJLyogOCwxNSBsYXRpbi0yIHRvIGxhdGluLTkgKi8KKyAgICB4ZG1sOSwJCQkvKiA4LDE2IGRl YyBtY3MgdG8gbGF0aW4tOSAqLworICAgIHhuZWw5LCAgICAgICAgICAgICAgICAgICAgICAvKiA4 LDE3IE5lWFQgVG8gTGF0aW4tOSAqLworICAgIHg0M2wxLCAgICAgICAgICAgICAgICAgICAgICAv KiA4LDE4IENQNDM3IFRvIExhdGluLTkgKi8KKyAgICB4ODVsMSwgICAgICAgICAgICAgICAgICAg ICAgLyogOCwxOSBDUDg1MCBUbyBMYXRpbi05ICovCisgICAgeDUybDEsICAgICAgICAgICAgICAg ICAgICAgIC8qIDgsMjAgQ1A4NTIgVG8gTGF0aW4tOSAqLworICAgIHhhcWwxLCAgICAgICAgICAg ICAgICAgICAgICAvKiA4LDIxIE1hY2ludG9zaCBMYXRpbiBUbyBMYXRpbi05ICovCisgICAgeGRn bDEsICAgICAgICAgICAgICAgICAgICAgIC8qIDgsMjIgREdJIFRvIExhdGluLTkgKi8KKyAgICB4 cjhsMSwgICAgICAgICAgICAgICAgICAgICAgLyogOCwyMyBIUCBUbyBMYXRpbi05ICovCisgICAg eGxjYXMsICAgICAgICAgICAgICAgICAgICAgIC8qIDgsMjQgTGF0aW4vQ3lyaWxsaWMgVG8gTGF0 aW4tOSAqLworICAgIHhhY2FzLCAgICAgICAgICAgICAgICAgICAgICAvKiA4LDI1IENQODY2IFRv IExhdGluLTkgKi8KKyAgICB4c2thcywgICAgICAgICAgICAgICAgICAgICAgLyogOCwyNiBTaG9y dCBLT0kgVG8gTGF0aW4tOSAqLworICAgIHhrOGFzLCAgICAgICAgICAgICAgICAgICAgICAvKiA4 LDI3IE9sZCBLT0ktOCBDeXJpbGxpYyBUbyBMYXRpbi05ICovCisgICAgTlVMTCwJCQkvKiA4LDI4 IEthbmppIC4uLiAqLworICAgIE5VTEwsCQkJLyogOCwyOSAqLworICAgIE5VTEwsCQkJLyogOCwz MCAqLworICAgIE5VTEwsCQkJLyogOCwzMSAqLworICAgIHhoN2FzLAkJCS8qIDgsMzIgSGVicmV3 LTcgVG8gTGF0aW4tOSAqLworICAgIHhsaGwxLAkJCS8qIDgsMzMgTGF0aW4vSGVicmV3IFRvIExh dGluLTkgKi8KKyAgICB4NjJsMSwJCQkvKiA4LDM0IENQODYyIEhlYnJldyBUbyBMYXRpbi05ICov CisgICAgeGVnYXMsCQkJLyogOCwzNSBFTE9UIDkyNyBHcmVlayBUbyBMYXRpbi05ICovCisgICAg eGxnbDEsCQkJLyogOCwzNiBMYXRpbi9HcmVlayBUbyBMYXRpbi05ICovCisgICAgeGwxNjksCQkJ LyogOCwzNyBDUDg2OSBUbyBMYXRpbi05ICovCisgICAgTlVMTCwJCQkvKiA4LDM4IExhdGluLTkg VG8gTGF0aW4tOSAqLworICAgIHg1OGw5LAkJCS8qIDgsMzkgY3A4NTggVG8gTGF0aW4tOSAqLwor ICAgIHg1NWFzLAkJCS8qIDgsNDAgY3A4NTUgVG8gTGF0aW4tOSAqLworICAgIHg1NWFzLAkJCS8q IDgsNDEgY3AxMjUxIFRvIExhdGluLTkgKi8KKyAgICB4bGVmdDEyOCwJCQkvKiA4LDQyIEJ1bGdh cmlhbiBUbyBMYXRpbi05ICovCisgICAgeDEyNTBsOSwJCQkvKiA4LDQzIENQMTI1MCBUbyBMYXRp bi05ICovCisgICAgeG16bDksCQkJLyogOCw0NCBNYXpvdmlhIFRvIExhdGluLTkgKi8KKyAgICBO VUxMLAkJCS8qIDgsNDUgVUNTLTIgdG8gTGF0aW4tOSAqLworICAgIE5VTEwsCQkJLyogOCw0NiBV VEYtOCB0byBMYXRpbi05ICovCisgICAgTlVMTCwJCQkvKiA4LDQ3IEtPSThSIHRvIExhdGluLTkg Ki8KKyAgICBOVUxMLAkJCS8qIDgsNDggS09JOFUgdG8gTGF0aW4tOSAqLworICAgIHh3MWw5LAkJ CS8qIDgsNDkgQ1AxMjUyIHRvIExhdGluLTkgKi8KKyAgICBOVUxMLAkJCS8qIDksMDAgVW5pY29k ZS4uLiAqLworICAgIE5VTEwsCQkJLyogOSwwMSAqLworICAgIE5VTEwsCQkJLyogOSwwMiAqLwor ICAgIE5VTEwsCQkJLyogOSwwMyAqLworICAgIE5VTEwsCQkJLyogOSwwNCAqLworICAgIE5VTEws CQkJLyogOSwwNSAqLworICAgIE5VTEwsCQkJLyogOSwwNiAqLworICAgIE5VTEwsCQkJLyogOSww NyAqLworICAgIE5VTEwsCQkJLyogOSwwOCAqLworICAgIE5VTEwsCQkJLyogOSwwOSAqLworICAg IE5VTEwsCQkJLyogOSwxMCAqLworICAgIE5VTEwsCQkJLyogOSwxMSAqLworICAgIE5VTEwsCQkJ LyogOSwxMiAqLworICAgIE5VTEwsCQkJLyogOSwxMyAqLworICAgIE5VTEwsCQkJLyogOSwxNCAq LworICAgIE5VTEwsCQkJLyogOSwxNSAqLworICAgIE5VTEwsCQkJLyogOSwxNiAqLworICAgIE5V TEwsCQkJLyogOSwxNyAqLworICAgIE5VTEwsCQkJLyogOSwxOCAqLworICAgIE5VTEwsCQkJLyog OSwxOSAqLworICAgIE5VTEwsCQkJLyogOSwyMCAqLworICAgIE5VTEwsCQkJLyogOSwyMSAqLwor ICAgIE5VTEwsCQkJLyogOSwyMiAqLworICAgIE5VTEwsCQkJLyogOSwyMyAqLworICAgIE5VTEws CQkJLyogOSwyNCAqLworICAgIE5VTEwsCQkJLyogOSwyNSAqLworICAgIE5VTEwsCQkJLyogOSwy NiAqLworICAgIE5VTEwsCQkJLyogOSwyNyAqLworICAgIE5VTEwsCQkJLyogOSwyOCAqLworICAg IE5VTEwsCQkJLyogOSwyOSAqLworICAgIE5VTEwsCQkJLyogOSwzMCAqLworICAgIE5VTEwsCQkJ LyogOSwzMSAqLworICAgIE5VTEwsCQkJLyogOSwzMiAqLworICAgIE5VTEwsCQkJLyogOSwzMyAq LworICAgIE5VTEwsCQkJLyogOSwzNCAqLworICAgIE5VTEwsCQkJLyogOSwzNSAqLworICAgIE5V TEwsCQkJLyogOSwzNiAqLworICAgIE5VTEwsCQkJLyogOSwzNyAqLworICAgIE5VTEwsCQkJLyog OSwzOCAqLworICAgIE5VTEwsCQkJLyogOSwzOSAqLworICAgIE5VTEwsCQkJLyogOSw0MCAqLwor ICAgIE5VTEwsCQkJLyogOSw0MSAqLworICAgIE5VTEwsCQkJLyogOSw0MiAqLworICAgIE5VTEws CQkJLyogOSw0MyAqLworICAgIE5VTEwsCQkJLyogOSw0NCAqLworICAgIE5VTEwsCQkJLyogOSw0 NSAqLworICAgIE5VTEwsCQkJLyogOSw0NiAqLworICAgIE5VTEwsCQkJLyogOSw0NyAqLworICAg IE5VTEwsCQkJLyogOSw0OCAqLworICAgIE5VTEwsCQkJLyogOSw0OSAqLworICAgIE5VTEwsCQkJ LyogMTAsMDAgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDAxICovCisgICAgTlVMTCwJCQkvKiAxMCww MiAqLworICAgIE5VTEwsCQkJLyogMTAsMDMgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDA0ICovCisg ICAgTlVMTCwJCQkvKiAxMCwwNSAqLworICAgIE5VTEwsCQkJLyogMTAsMDYgKi8KKyAgICBOVUxM LAkJCS8qIDEwLDA3ICovCisgICAgTlVMTCwJCQkvKiAxMCwwOCAqLworICAgIE5VTEwsCQkJLyog MTAsMDkgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDEwICovCisgICAgTlVMTCwJCQkvKiAxMCwxMSAq LworICAgIE5VTEwsCQkJLyogMTAsMTIgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDEzICovCisgICAg TlVMTCwJCQkvKiAxMCwxNCAqLworICAgIE5VTEwsCQkJLyogMTAsMTUgKi8KKyAgICBOVUxMLAkJ CS8qIDEwLDE2ICovCisgICAgTlVMTCwJCQkvKiAxMCwxNyAqLworICAgIE5VTEwsCQkJLyogMTAs MTggKi8KKyAgICBOVUxMLAkJCS8qIDEwLDE5ICovCisgICAgTlVMTCwJCQkvKiAxMCwyMCAqLwor ICAgIE5VTEwsCQkJLyogMTAsMjEgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDIyICovCisgICAgTlVM TCwJCQkvKiAxMCwyMyAqLworICAgIE5VTEwsCQkJLyogMTAsMjQgKi8KKyAgICBOVUxMLAkJCS8q IDEwLDI1ICovCisgICAgTlVMTCwJCQkvKiAxMCwyNiAqLworICAgIE5VTEwsCQkJLyogMTAsMjcg Ki8KKyAgICBOVUxMLAkJCS8qIDEwLDI4ICovCisgICAgTlVMTCwJCQkvKiAxMCwyOSAqLworICAg IE5VTEwsCQkJLyogMTAsMzAgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDMxICovCisgICAgTlVMTCwJ CQkvKiAxMCwzMiAqLworICAgIE5VTEwsCQkJLyogMTAsMzMgKi8KKyAgICBOVUxMLAkJCS8qIDEw LDM0ICovCisgICAgTlVMTCwJCQkvKiAxMCwzNSAqLworICAgIE5VTEwsCQkJLyogMTAsMzYgKi8K KyAgICBOVUxMLAkJCS8qIDEwLDM3ICovCisgICAgTlVMTCwJCQkvKiAxMCwzOCAqLworICAgIE5V TEwsCQkJLyogMTAsMzkgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDQwICovCisgICAgTlVMTCwJCQkv KiAxMCw0MSAqLworICAgIE5VTEwsCQkJLyogMTAsNDIgKi8KKyAgICBOVUxMLAkJCS8qIDEwLDQz ICovCisgICAgTlVMTCwJCQkvKiAxMCw0NCAqLworICAgIE5VTEwsCQkJLyogMTAsNDUgKi8KKyAg ICBOVUxMLAkJCS8qIDEwLDQ2ICovCisgICAgTlVMTCwJCQkvKiAxMCw0NyAqLworICAgIE5VTEws CQkJLyogMTAsNDggKi8KKyAgICBOVUxMCQkJLyogMTAsNDkgKi8KK307CitpbnQgbnhscyA9IChz aXplb2YoeGxzKSAvIHNpemVvZihDSEFSICopKTsKKworI2lmbmRlZiBOT0xPQ0FMCisvKgorICBU aGUgZm9sbG93aW5nIHJvdXRpbmVzIGFyZSB1c2VmdWwgb25seSBmb3IgdGVybWluYWwgY2hhcmFj dGVyIHNldHMsIGFuZCBzbworICBpZmRlZidkIG91dCBmb3IgTk9MT0NBTCBjb21waWxhdGlvbnMu CisqLworCisvKgorICBDIFMgXyBJIFMgXyBOIFIgQworCisgIFJldHVybnMgbm9uemVybyBpZiBh cmd1bWVudCBpbmRpY2F0ZXMgYSA3LWJpdCBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0LAorICB6ZXJv IG90aGVyd2lzZS4KKyovCitpbnQKK2NzX2lzX25yYyh4KSBpbnQgeDsgeworI2lmZGVmIFVOSUNP REUKKyAgICBpZiAoeCA9PSBUWF9KMjAxUiB8fCB4ID09IFRYX0RFQ1NQRUMgfHwgeCA9PSBUWF9E RUNURUNICisgICAgICAgIHx8IHR4cmluZm9beF0gPT0gTlVMTCkKKyAgICAgIHJldHVybigwKTsK KyAgICBlbHNlCisgICAgICByZXR1cm4odHhyaW5mb1t4XS0+ZmxhZ3MgJiBYMlVfU1REICYmIHR4 cmluZm9beF0tPnNpemUgPT0gOTQpOworI2Vsc2UgLyogVU5JQ09ERSAqLworICAgIGlmICgoY3Nf c2l6ZSh4KSA9PSA5NCkpCisgICAgICByZXR1cm4oMSk7CisgICAgZWxzZQorICAgICAgcmV0dXJu KDApOworI2VuZGlmIC8qIFVOSUNPREUgKi8KK30KKworLyoKKyAgQyBTIF8gSSBTIF8gUyBUIEQK KworICBSZXR1cm5zIG5vbnplcm8gaWYgYXJndW1lbnQgaW5kaWNhdGVzIGFuIElTTyA0ODczLXN0 YW5kYXJkLWZvcm1hdAorICBjaGFyYWN0ZXIgc2V0LCBpLmUuIG9uZSBpbiB3aGljaCB0aGUgY29u dHJvbCByZWdpb24gaXMgTk9UIHVzZWQgZm9yCisgIGdyYXBoaWNzOyB6ZXJvIG90aGVyd2lzZS4K KyovCitpbnQKK2NzX2lzX3N0ZCh4KSBpbnQgeDsgeworI2lmZGVmIFVOSUNPREUKKyAgICBpZiAo IXR4cmluZm9beF0pCQkJLyogRXZlbiBtb3JlIHNhZmV0eSAqLworICAgICAgcmV0dXJuKDApOwor ICAgIGVsc2UgaWYgKHR4cmluZm9beF0tPnNpemUgPT0gMTI4KQkvKiBKdXN0IGZvciBzYWZldHkg Ki8KKyAgICAgIHJldHVybigwKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4odHhyaW5mb1t4XS0+ ZmxhZ3MgJiBYMlVfU1REKTsgLyogT25seSB0aGlzIHNob3VsZCBiZSBuZWVkZWQgKi8KKyNlbHNl CisgICAgc3dpdGNoICh4KSB7CisgICAgICBjYXNlIEZDX0NQNDM3OgkJCS8qIENvZGUgcGFnZXMg dXNlIEMxIGdyYXBoaWNzICovCisgICAgICBjYXNlIEZDX0NQODUwOgorICAgICAgY2FzZSBGQ19D UDg1MjoKKyAgICAgIGNhc2UgRkNfQ1A4NjI6CisgICAgICBjYXNlIEZDX0NQODY2OgorICAgICAg Y2FzZSBGQ19DUDg2OToKKyAgICAgIGNhc2UgRkNfQ1A4NTg6CisgICAgICBjYXNlIEZDX0FQUFFE OgkJCS8qIFNvIGRvIEFwcGxlIGFuZCBOZVhUU1RFUCAqLworICAgICAgY2FzZSBGQ19ORVhUOgor CXJldHVybigwKTsKKyAgICAgIGRlZmF1bHQ6CQkJCS8qIE90aGVycyBiZWhhdmUgKi8KKwlyZXR1 cm4oMSk7CisgICAgfQorI2VuZGlmIC8qIENLT1VJTkkgKi8KK30KKworaW50Citjc19zaXplKHgp IGludCB4OyB7CisjaWZkZWYgVU5JQ09ERQorICAgIGlmICghdHhyaW5mb1t4XSkKKyAgICAgIHJl dHVybigxMjgpOworICAgIHJldHVybih0eHJpbmZvW3hdLT5zaXplKTsKKyNlbHNlCisgICAgc3dp dGNoKHgpIHsKKyAgICAgIGNhc2UgRkNfVVNBU0NJSToKKyAgICAgIGNhc2UgRkNfVUtBU0NJSToK KyAgICAgIGNhc2UgRkNfRFVBU0NJSToKKyAgICAgIGNhc2UgRkNfRklBU0NJSToKKyAgICAgIGNh c2UgRkNfRlJBU0NJSToKKyAgICAgIGNhc2UgRkNfRkNBU0NJSToKKyAgICAgIGNhc2UgRkNfR0VB U0NJSToKKyAgICAgIGNhc2UgRkNfSFVBU0NJSToKKyAgICAgIGNhc2UgRkNfSVRBU0NJSToKKyAg ICAgIGNhc2UgRkNfTk9BU0NJSToKKyAgICAgIGNhc2UgRkNfUE9BU0NJSToKKyAgICAgIGNhc2Ug RkNfU1BBU0NJSToKKyAgICAgIGNhc2UgRkNfU1dBU0NJSToKKyAgICAgIGNhc2UgRkNfQ0hBU0NJ SToKKyAgICAgIGNhc2UgRkNfS09JNzoKKyAgICAgIGNhc2UgRkNfSEU3OgorICAgICAgY2FzZSBG Q19FTE9UOgorCXJldHVybig5NCk7CisKKyAgICAgIGNhc2UgRkNfMUxBVElOOgorICAgICAgY2Fz ZSBGQ18yTEFUSU46CisgICAgICBjYXNlIEZDX0RFQ01DUzoKKyAgICAgIGNhc2UgRkNfREdNQ1M6 CisgICAgICBjYXNlIEZDX0hQUjg6CisgICAgICBjYXNlIEZDX0NZUklMTDoKKyAgICAgIGNhc2Ug RkNfS09JODoKKyAgICAgIGNhc2UgRkNfSEVCUkVXOgorICAgICAgY2FzZSBGQ19HUkVFSzoKKyAg ICAgIGNhc2UgRkNfOUxBVElOOgorCXJldHVybig5Nik7CisKKyAgICAgIGNhc2UgRkNfTkVYVDoK KyAgICAgIGNhc2UgRkNfQ1A0Mzc6CisgICAgICBjYXNlIEZDX0NQODUwOgorICAgICAgY2FzZSBG Q19DUDg1MjoKKyAgICAgIGNhc2UgRkNfQ1A4NTU6CisgICAgICBjYXNlIEZDX0NQODYyOgorICAg ICAgY2FzZSBGQ19DUDg2NjoKKyAgICAgIGNhc2UgRkNfQ1AxMjUxOgorICAgICAgY2FzZSBGQ19B UFBRRDoKKwlyZXR1cm4oMTI4KTsKKyNpZmRlZiBLQU5KSQorICAgICAgY2FzZSBGQ19KSVM3Ogor CXJldHVybigtOTQpOworICAgICAgY2FzZSBGQ19TSEpJUzoKKwlyZXR1cm4oLTEyOCk7CisgICAg ICBjYXNlIEZDX0pFVUM6CisgICAgICBjYXNlIEZDX0pERUM6CisJcmV0dXJuKC05Nik7CisjZW5k aWYgLyogS0FOSkkgKi8KKyAgICAgIGNhc2UgRkNfQ1A4NTg6CisgICAgICBkZWZhdWx0OgorCXJl dHVybigtMSk7CisgICAgfQorI2VuZGlmIC8qIFVOSUNPREUgKi8KK30KKyNlbmRpZiAvKiBOT0xP Q0FMICovCisKKy8qCisgIFMgRSBUIFggTCBBIFQgWSBQIEUgIC0tICBTZXQgVHJhbnNsYXRpb24g VHlwZQorCisgIFNldHMgZ2xvYmFsIHhsYXR5cGUgdG8gaW5kaWNhdGUgd2hpY2gga2luZCBvZiB0 cmFuc2xhdGlvbjoKKworICAgIFhMQV9OT05FICAgICAgTm8gdHJhbnNsYXRpb24KKyAgICBYTEFf QllURSAgICAgIEJ5dGUtZm9yLUJ5dGUgdHJhbnNsYXRpb24KKyAgICBYTEFfSkFQQU4gICAgIEph cGFuZXNlIEthbmppIHRyYW5zbGF0aW9uCisgICAgWExBX1VOSUNPREUgICBVbmljb2RlIHRyYW5z bGF0aW9ucworCisgIEFuZCBzZXRzIHVwIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2xhdGlvbiBmdW5j dGlvbiBwb2ludGVycyBhcyBmb2xsb3dzOgorCisgIEZvciBubyB0cmFuc2xhdGlvbjoKKyAgICBB bGwgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIE5VTEwuCisKKyAgRm9yIEJ5dGUtZm9yLUJ5dGUgdHJh bnNhdGlvbjoKKyAgICByeCAgPSBUQ1MgdG8gRkNTICh0aGVzZSBmdW5jdGlvbnMgYXJlIGluIHRo aXMgbW9kdWxlLi4uKQorICAgIHN4ICA9IEZDUyB0byBUQ1MKKworICBGb3IgVW5pY29kZSB0cmFu c2xhdGlvbnM6CisgICAgeGZ1ID0gRkNTIHRvIFVDUyAodGhlc2UgZnVuY3Rpb25zIGFyZSBpbiBj a2N1bmkuYy4uLikKKyAgICB4dHUgPSBUQ1MgdG8gVUNTCisgICAgeHVmID0gVUNTIHRvIEZDUwor ICAgIHh1dCA9IFVDUyB0byBUQ1MKKyovCitWT0lECitzZXR4bGF0eXBlKHRjcywgZmNzKSBpbnQg dGNzLCBmY3M7IHsKKyNpZmRlZiBVTklDT0RFCisgICAgeGZ1ID0gTlVMTDsJCQkJLyogVW5pY29k ZSA8LT4gVENTL0ZDUyBmdW5jdGlvbnMgKi8KKyAgICB4dHUgPSBOVUxMOworICAgIHh1ZiA9IE5V TEw7CisgICAgeHV0ID0gTlVMTDsKKyNlbmRpZiAvKiBVTklDT0RFICovCisgICAgcnggPSBzeCA9 IE5VTEw7CisgICAgZGVidWcoRjEwMSwic2V0eGxhdHlwZSBmY3MiLCIiLGZjcyk7CisgICAgZGVi dWcoRjEwMSwic2V0eGxhdHlwZSB0Y3MiLCIiLHRjcyk7CisKKyAgICBpZiAodGNzIDwgMCB8fCB0 Y3MgPiBNQVhUQ1NFVFMpIHsKKwlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIGJhZCB0Y3MiLCIiLHRj cyk7CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAoZmNzIDwgMCB8fCBmY3MgPiBNQVhGQ1NFVFMp IHsKKwlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIGJhZCBmY3MiLCIiLGZjcyk7CisJcmV0dXJuOwor ICAgIH0KKyAgICBpZiAodGNzID09IFRDX1RSQU5TUCB8fCB4ZnJ4bGEgPT0gMCkgeyAvKiBUcmFu c2ZlciBjaGFyc2V0IFRSQU5TUEFSRU5UICovCisJZGVidWcoRjEwMSwic2V0eGxhdHlwZSB0cmFu c3BhcmVudCBiZWNhdXNlIFRDUz09VHJhbnNwYXJlbnQiLCIiLHRjcyk7CisJeGxhdHlwZSA9IFhM QV9OT05FOwkJLyogVHJhbnNsYXRpb24gdHlwZSBpcyBOb25lICovCisjaWZkZWYgVU5JQ09ERQor ICAgIC8qIElmIGFueSBvZiBvdXIgY2hhcnNldHMgaXMgVW5pY29kZSB3ZSB1c2UgVW5pY29kZSBm dW5jdGlvbnMgKi8KKyAgICAvKiBldmVuIGlmIFRDUyBhbmQgRkNTIGFyZSB0aGUgc2FtZSBiZWNh dXNlIG9mIEJPTSBhbmQgYnl0ZSBzd2FwcGluZyAqLworICAgIH0gZWxzZSBpZiAodGNzID09IFRD X1VDUzIgfHwgdGNzID09IFRDX1VURjggfHwKKwkgICAgICAgZmNzID09IEZDX1VDUzIgfHwgZmNz ID09IEZDX1VURjgpIHsKKwlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIFVuaWNvZGUgdGNzIiwiIix0 Y3MpOworCWRlYnVnKEYxMDEsInNldHhsYXR5cGUgVW5pY29kZSBmY3MiLCIiLGZjcyk7CisJLyog VW5pY29kZSA8LT4gVENTL0ZDUyBmdW5jdGlvbnMgKi8KKwl4ZnUgPSB4bF9mY3VbZmNzXTsJCS8q IEZDUyAtPiBVQ1MgKi8KKwl4dHUgPSB4bF90Y3VbdGNzXTsJCS8qIFRDUyAtPiBVQ1MgKi8KKwl4 dWYgPSB4bF91ZmNbZmNzXTsJCS8qIFVDUyAtPiBGQ1MgKi8KKwl4dXQgPSB4bF91dGNbdGNzXTsJ CS8qIFVDUyAtPiBUQ1MgKi8KKyAgICAgICAgeGxhdHlwZSA9IFhMQV9VTklDT0RFOwkJLyogVHJh bnNsYXRpb24gdHlwZSBpcyBVbmljb2RlICovCisjaWZkZWYgQ09NTUVOVAorCS8qIFRoZXNlIG1h a2UgdHJvdWJsZSBpbiA2NC1iaXQgbGFuZCAqLworCWRlYnVnKEYwMDEsInNldHhsYXR5cGUgVW5p Y29kZSB4ZnUiLCIiLCh1bnNpZ25lZCl4ZnUpOworCWRlYnVnKEYwMDEsInNldHhsYXR5cGUgVW5p Y29kZSB4dWYiLCIiLCh1bnNpZ25lZCl4dWYpOworI2VuZGlmIC8qIENPTU1FTlQgKi8KKyNlbmRp ZiAvKiBVTklDT0RFICovCisgICAgfSBlbHNlIGlmIChjc2VxdGFiW3Rjc10gPT0gZmNzKSB7CS8q IE9yIGlmIFRDUyA9PSBGQ1MgKi8KKwlkZWJ1ZyhGMTAxLCJzZXR4bGF0eXBlIHRyYW5zcGFyZW50 IGJlY2F1c2UgVENTPT1GQ1MiLCIiLHRjcyk7CisJeGxhdHlwZSA9IFhMQV9OT05FOwkJLyogdHJh bnNsYXRpb24gdHlwZSBpcyBhbHNvIE5vbmUgKi8KKyNpZmRlZiBLQU5KSQorICAgIC8qIE90aGVy d2lzZSBpZiBhbnkgb2YgdGhlbSBpcyBKYXBhbmVzZSwgd2UgdXNlIEthbmppIGZ1bmN0aW9ucyAq LworICAgIH0gZWxzZSBpZiAodGNzID09IFRDX0pFVUMgfHwgZmNzaW5mb1tmY3NdLmFscGhhYmV0 ID09IEFMX0pBUEFOKSB7CisJZGVidWcoRjEwMSwic2V0eGxhdHlwZSBKYXBhbmVzZSB0Y3MiLCIi LHRjcyk7CisJZGVidWcoRjEwMSwic2V0eGxhdHlwZSBKYXBhbmVzZSBmY3MiLCIiLGZjcyk7Cisg ICAgICAgIHhsYXR5cGUgPSBYTEFfSkFQQU47CQkvKiBUcmFuc2xhdGlvbiB0eXBlIGlzIEphcGFu ZXNlICovCisjZW5kaWYgLyogS0FOSkkgKi8KKyAgICAvKiBPdGhlcndpc2Ugd2UgdXNlIGJ5dGUg ZnVuY3Rpb25zICovCisgICAgfSBlbHNlIHsJCQkJLyogT3RoZXJ3aXNlLi4uICovCisJcnggPSB4 bHJbdGNzXVtmY3NdOwkJLyogSW5wdXQgdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KKwlzeCA9IHhs c1t0Y3NdW2Zjc107CQkvKiBPdXRwdXQgdHJhbnNsYXRpb24gZnVuY3Rpb24gKi8KKwlkZWJ1ZyhG MTAxLCJzZXR4bGF0eXBlIEJ5dGUgdGNzIiwiIix0Y3MpOworCWRlYnVnKEYxMDEsInNldHhsYXR5 cGUgQnl0ZSBmY3MiLCIiLGZjcyk7CisgICAgICAgIHhsYXR5cGUgPSBYTEFfQllURTsJCS8qIFRy YW5zbGF0aW9uIHR5cGUgaXMgQnl0ZSAqLworICAgIH0KKyAgICBkZWJ1ZyhGMTAxLCJzZXR4bGF0 eXBlIHhsYXR5cGUiLCIiLHhsYXR5cGUpOworfQorCisvKiBTZXQgdXAgdHJhbnNsYXRpb24gYmV0 d2VlbiB0d28gZmlsZSBjaGFyYWN0ZXIgc2V0cyB3aXRoIFVDUyBpbnRlcm1lZGlhdGUgKi8KKwor I2lmZGVmIFVOSUNPREUKK1ZPSUQKK2luaXR4bGF0ZShjc2luLCBjc291dCkgaW50IGNzaW4sIGNz b3V0OyB7CisgICAgeGZ1ID0gTlVMTDsKKyAgICB4dHUgPSBOVUxMOworICAgIHh1ZiA9IE5VTEw7 CisgICAgeHV0ID0gTlVMTDsKKworICAgIGRlYnVnKEYxMDEsImluaXR4bGF0ZSBjc2luIiwiIixj c2luKTsKKyAgICBkZWJ1ZyhGMTAxLCJpbml0eGxhdGUgY3NvdXQiLCIiLGNzb3V0KTsKKworICAg IGlmIChjc2luIDwgMCB8fCBjc2luID4gTUFYRkNTRVRTKSB7CisJZGVidWcoRjEwMSwiaW5pdHhs YXRlIGJhZCBjc2luIiwiIixjc2luKTsKKwlyZXR1cm47CisgICAgfQorICAgIGlmIChjc291dCA8 IDAgfHwgY3NvdXQgPiBNQVhGQ1NFVFMpIHsKKwlkZWJ1ZyhGMTAxLCJpbml0eGxhdGUgYmFkIGNz b3V0IiwiIixjc291dCk7CisJcmV0dXJuOworICAgIH0KKyAgICBpZiAoY3NpbiA9PSBjc291dCAm JiBjc2luICE9IEZDX1VDUzIpIHsKKwl4bGF0eXBlID0gWExBX05PTkU7CQkvKiBUcmFuc2xhdGlv biB0eXBlIGlzIE5vbmUgKi8KKwlyZXR1cm47CisgICAgfQorICAgIHhsYXR5cGUgPSBYTEFfVU5J Q09ERTsJCS8qIFRyYW5zbGF0aW9uIHR5cGUgaXMgVW5pY29kZSAqLworICAgIHhmdSA9IHhsX2Zj dVtjc2luXTsJCQkvKiBGQ1MgLT4gVUNTICovCisgICAgeHVmID0geGxfdWZjW2Nzb3V0XTsJCS8q IFVDUyAtPiBGQ1MgKi8KKyAgICB4cG5ieXRlKC0xLDAsMCxOVUxMKTsJCS8qIFJlc2V0IFVDUy0y ICovCisjaWZkZWYgQ09NTUVOVAorICAgIGRlYnVnKEYwMDEsImluaXR4bGF0ZSBVbmljb2RlIHhm dSIsIiIsKHVuc2lnbmVkKXhmdSk7CisgICAgZGVidWcoRjAwMSwiaW5pdHhsYXRlIFVuaWNvZGUg eHVmIiwiIiwodW5zaWduZWQpeHVmKTsKKyNlbmRpZiAvKiBDT01NRU5UICovCisgICAgZGVidWco RjEwMSwiaW5pdHhsYXRlIHhsYXR5cGUiLCIiLHhsYXR5cGUpOworfQorI2VuZGlmIC8qIFVOSUNP REUgKi8KKworaW50IGNzZXRzaW5pdGVkID0gMDsKKworVk9JRAoraW5pdGNzZXRzKCkgewkJCQkv KiBSb3V0aW5lIHRvIHJlc2V0IG9yIGluaXRpYWxpemUgKi8KKyAgICBpbnQgaTsJCQkJLyogY2hh cmFjdGVyLXNldCBhc3NvY2lhdGlvbnMuICovCisKKyNpZmRlZiBVTklDT0RFCisgICAgaWYgKHVj c29yZGVyIDwgMCkJCQkvKiBGb3IgY3JlYXRpbmcgVUNTLTIgZmlsZXMuICovCisgICAgICB1Y3Nv cmRlciA9IGJ5dGVvcmRlcjsKKyAgICBpZiAodWNzb3JkZXIgPCAwKQorICAgICAgdWNzb3JkZXIg PSAwOworICAgIGlmIChmaWxlb3JkZXIgPCAwKQkJCS8qIEZvciByZWFkaW5nIFVDUy0yIGZpbGVz LiAqLworICAgICAgZmlsZW9yZGVyID0gdWNzb3JkZXI7CisjZW5kaWYgLyogVU5JQ09ERSAqLwor CisgICAgZGVidWcoRjEwMSwiaW5pdGNzZXRzIG54bHMiLCIiLG54bHMpOworICAgIGRlYnVnKEYx MDEsImluaXRjc2V0cyBueGxyIiwiIixueGxyKTsKKworICAgIGRlYnVnKEYxMDEsImluaXRjc2V0 cyBURVJNIExPQ0FMIENTRVQiLCIiLHRjc2wpOworICAgIGRlYnVnKEYxMDEsImluaXRjc2V0cyBU RVJNIFJFTU9URSBDU0VUIiwiIix0Y3NyKTsKKworICAgIGZvciAoaSA9IDA7IGkgPD0gTUFYRkNT RVRTOyBpKyspCS8qIEZpcnN0IGNsZWFyIHRoZW0gYWxsLi4uICovCisgICAgICBhZmNzZXRbaV0g PSAtMTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IE1BWFRDU0VUUzsgaSsrKQorICAgICAgYXhjc2V0 W2ldID0gLTE7CisKKyAgICAvKiBOb3cgc2V0IHNwZWNpZmljIGRlZmF1bHRzIGZvciBpbmNvbWlu ZyBmaWxlcyAqLworCisgICAgeGxhdHlwZSA9IFhMQV9OT05FOworCisgICAgYXhjc2V0W1RDX1RS QU5TUF0gID0gRkNfVFJBTlNQOworICAgIGF4Y3NldFtUQ19VU0FTQ0lJXSA9IEZDX1VTQVNDSUk7 CisKKyNpZmRlZiBPUzIKKyAgICBzd2l0Y2ggKGZjaGFyc2V0KSB7CisgICAgICBjYXNlIEZDX0NQ ODUwOgorICAgICAgY2FzZSBGQ19DUDg1ODoKKyAgICAgIGNhc2UgRkNfQ1A0Mzc6CisgICAgICBj YXNlIEZDXzFMQVRJTjoKKwlheGNzZXRbVENfMUxBVElOXSAgPSBmY2hhcnNldDsKKwlicmVhazsK KyAgICAgIGRlZmF1bHQ6CisJYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfQ1A4NTA7CisgICAgfQor I2Vsc2UKKyNpZmRlZiBIUFVYCisgICAgYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfSFBSODsKKyNl bHNlCisjaWZkZWYgVk1TCisgICAgYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfREVDTUNTOworI2Vs c2UKKyNpZmRlZiBORVhUCisgICAgYXhjc2V0W1RDXzFMQVRJTl0gID0gRkNfTkVYVDsKKyNlbHNl CisjaWZkZWYgZGF0YWdlbmVyYWwKKyAgICBheGNzZXRbVENfMUxBVElOXSAgPSBGQ19ER01DUzsK KyNlbHNlCisgICAgLyogU2hvdWxkIHdlIHVzZSBjb2RlIHBhZ2VzIG9uIHNvbWUgUEMgYmFzZWQg VU5JWGVzPyAqLworICAgIGF4Y3NldFtUQ18xTEFUSU5dICA9IEZDXzFMQVRJTjsKKyNlbmRpZiAv KiBkYXRhZ2VuZXJhbCAqLworI2VuZGlmIC8qIE5FWFQgKi8KKyNlbmRpZiAvKiBWTVMgKi8KKyNl bmRpZiAvKiBIUFVYICovCisjZW5kaWYgLyogT1MyICovCisKKyNpZmRlZiBPUzIKKyAgICBheGNz ZXRbVENfMkxBVElOXSAgPSBGQ19DUDg1MjsKKyAgICBheGNzZXRbVENfQ1lSSUxMXSAgPSBGQ19D UDg2NjsKKyAgICBheGNzZXRbVENfSkVVQ10gICAgPSBGQ19TSEpJUzsKKyAgICBheGNzZXRbVENf SEVCUkVXXSAgPSBGQ19DUDg2MjsKKyAgICBheGNzZXRbVENfR1JFRUtdICAgPSBGQ19DUDg2OTsK KyAgICBheGNzZXRbVENfOUxBVElOXSAgPSBGQ19DUDg1ODsKKyAgICBheGNzZXRbVENfVUNTMl0g ICAgPSBGQ19VQ1MyOworICAgIGF4Y3NldFtUQ19VVEY4XSAgICA9IEZDX1VDUzI7CisjZWxzZQor ICAgIGF4Y3NldFtUQ18yTEFUSU5dICA9IEZDXzJMQVRJTjsKKyAgICBheGNzZXRbVENfQ1lSSUxM XSAgPSBGQ19DWVJJTEw7CisgICAgYXhjc2V0W1RDX0pFVUNdICAgID0gRkNfSkVVQzsKKyAgICBh eGNzZXRbVENfSEVCUkVXXSAgPSBGQ19IRUJSRVc7CisgICAgYXhjc2V0W1RDX0dSRUVLXSAgID0g RkNfR1JFRUs7CisgICAgYXhjc2V0W1RDXzlMQVRJTl0gID0gRkNfOUxBVElOOworICAgIGF4Y3Nl dFtUQ19VQ1MyXSAgICA9IEZDX1VURjg7CisgICAgYXhjc2V0W1RDX1VURjhdICAgID0gRkNfVVRG ODsKKyNlbmRpZiAvKiBPUzIgKi8KKworICAgIC8qIEFuZCBmb3Igb3V0Ym91bmQgZmlsZXMgKi8K KworICAgIGFmY3NldFtGQ19VU0FTQ0lJXSA9IFRDX1VTQVNDSUk7CisgICAgYWZjc2V0W0ZDX1VL QVNDSUldID0gVENfMUxBVElOOworICAgIGFmY3NldFtGQ19EVUFTQ0lJXSA9IFRDXzFMQVRJTjsK KyAgICBhZmNzZXRbRkNfRklBU0NJSV0gPSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX0ZSQVND SUldID0gVENfMUxBVElOOworICAgIGFmY3NldFtGQ19GQ0FTQ0lJXSA9IFRDXzFMQVRJTjsKKyAg ICBhZmNzZXRbRkNfR0VBU0NJSV0gPSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX0hVQVNDSUld ID0gVENfMkxBVElOOworICAgIGFmY3NldFtGQ19JVEFTQ0lJXSA9IFRDXzFMQVRJTjsKKyAgICBh ZmNzZXRbRkNfTk9BU0NJSV0gPSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX1BPQVNDSUldID0g VENfMUxBVElOOworICAgIGFmY3NldFtGQ19TUEFTQ0lJXSA9IFRDXzFMQVRJTjsKKyAgICBhZmNz ZXRbRkNfU1dBU0NJSV0gPSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX0NIQVNDSUldID0gVENf MUxBVElOOworICAgIGFmY3NldFtGQ18xTEFUSU5dICA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRb RkNfMkxBVElOXSAgPSBUQ18yTEFUSU47CisgICAgYWZjc2V0W0ZDX0RFQ01DU10gID0gVENfMUxB VElOOworICAgIGFmY3NldFtGQ19ORVhUXSAgICA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRbRkNf Q1A0MzddICAgPSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX0NQODUwXSAgID0gVENfMUxBVElO OworICAgIGFmY3NldFtGQ19DUDg1Ml0gICA9IFRDXzJMQVRJTjsKKyAgICBhZmNzZXRbRkNfQVBQ UURdICAgPSBUQ18xTEFUSU47CisgICAgYWZjc2V0W0ZDX0RHTUNTXSAgID0gVENfMUxBVElOOwor ICAgIGFmY3NldFtGQ19IUFI4XSAgICA9IFRDXzFMQVRJTjsKKyAgICBhZmNzZXRbRkNfQ1lSSUxM XSAgPSBUQ19DWVJJTEw7CisgICAgYWZjc2V0W0ZDX0NQODY2XSAgID0gVENfQ1lSSUxMOworICAg IGFmY3NldFtGQ19LT0k3XSAgICA9IFRDX0NZUklMTDsKKyAgICBhZmNzZXRbRkNfS09JOF0gICAg PSBUQ19DWVJJTEw7CisgICAgYWZjc2V0W0ZDX0pJUzddICAgID0gVENfSkVVQzsKKyAgICBhZmNz ZXRbRkNfU0hKSVNdICAgPSBUQ19KRVVDOworICAgIGFmY3NldFtGQ19KRVVDXSAgICA9IFRDX0pF VUM7CisgICAgYWZjc2V0W0ZDX0pERUNdICAgID0gVENfSkVVQzsKKyAgICBhZmNzZXRbRkNfSEU3 XSAgICAgPSBUQ19IRUJSRVc7CisgICAgYWZjc2V0W0ZDX0hFQlJFV10gID0gVENfSEVCUkVXOwor ICAgIGFmY3NldFtGQ19DUDg2Ml0gICA9IFRDX0hFQlJFVzsKKyAgICBhZmNzZXRbRkNfRUxPVF0g ICAgPSBUQ19HUkVFSzsKKyAgICBhZmNzZXRbRkNfR1JFRUtdICAgPSBUQ19HUkVFSzsKKyAgICBh ZmNzZXRbRkNfQ1A4NjldICAgPSBUQ19HUkVFSzsKKyAgICBhZmNzZXRbRkNfOUxBVElOXSAgPSBU Q185TEFUSU47CisgICAgYWZjc2V0W0ZDX0NQOTIzXSAgID0gVENfOUxBVElOOworICAgIGFmY3Nl dFtGQ19DUDg1OF0gICA9IFRDXzlMQVRJTjsKKyAgICBhZmNzZXRbRkNfQ1A4NTVdICAgPSBUQ19D WVJJTEw7CisgICAgYWZjc2V0W0ZDX0NQMTI1MV0gID0gVENfQ1lSSUxMOworICAgIGFmY3NldFtG Q19CVUxHQVJdICA9IFRDX0NZUklMTDsKKyAgICBhZmNzZXRbRkNfQ1AxMjUwXSAgPSBUQ18yTEFU SU47CisgICAgYWZjc2V0W0ZDX01BWk9WSUFdID0gVENfMkxBVElOOworICAgIGFmY3NldFtGQ19V Q1MyXSAgICA9IFRDX1VURjg7CisgICAgYWZjc2V0W0ZDX1VURjhdICAgID0gVENfVVRGODsKKwor ICAgIGFmY3NldFtGQ19LT0k4Ul0gICA9IFRDX0NZUklMTDsKKyAgICBhZmNzZXRbRkNfS09JOFVd ICAgPSBUQ19DWVJJTEw7CisgICAgYWZjc2V0W0ZDX0NQMTI1Ml0gID0gVENfMUxBVElOOworCisg ICAgY3NldHNpbml0ZWQrKzsKKyAgICByZXR1cm47Cit9CisjZW5kaWYgLyogTk9DU0VUUyAqLwoK ZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t1eGxh LmggYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXhsYS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzY2QxYTUKLS0tIC9kZXYvbnVsbAorKysg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2NrdXhsYS5oCkBAIC0wLDAg KzEsMTE4IEBACisvKgorICBGaWxlIENLVVhMQS5ICisKKyAgQy1LZXJtaXQgbGFuZ3VhZ2UgYW5k IGNoYXJhY3Rlci1zZXQgc3VwcG9ydCBmb3IgVU5JWCwgVk1TLCBPUy8yLAorICBBT1MvVlMsIGFu ZCBvdGhlciBzeXN0ZW1zLgorCisgIFRoaXMgZmlsZSBzaG91bGQgYmUgdXNlZCBhcyBhIHRlbXBs YXRlIGZvciB0aGUgbGFuZ3VhZ2Ugc3VwcG9ydCBmaWxlcworICBmb3Igb3RoZXIgQy1LZXJtaXQg aW1wbGVtZW50YXRpb25zIC0tIE1hY2ludG9zaCwgZXRjLgorKi8KKy8qCisgIEF1dGhvcjogRnJh bmsgZGEgQ3J1eiA8ZmRjQGNvbHVtYmlhLmVkdT4sCisgIENvbHVtYmlhIFVuaXZlcnNpdHkgQWNh ZGVtaWMgSW5mb3JtYXRpb24gU3lzdGVtcywgTmV3IFlvcmsgQ2l0eS4KKworICBDb3B5cmlnaHQg KEMpIDE5ODUsIDIwMDksCisgICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0 aGUgQ2l0eSBvZiBOZXcgWW9yay4KKyAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBD LUtlcm1pdCBDT1BZSU5HLlRYVCBmaWxlIG9yIHRoZQorICAgIGNvcHlyaWdodCB0ZXh0IGluIHRo ZSBja2NtYWkuYyBtb2R1bGUgZm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorCisqLwor CisjaWZuZGVmIENLVVhMQV9ICisjZGVmaW5lIENLVVhMQV9ICisKKy8qIENvZGVzIGZvciBmaWxl IGNoYXJhY3RlciBzZXRzICovCisKKy8qIElTTyA2NDYgYW5kIG90aGVyIElTTy02NDYtbGlrZSA3 LWJpdCBzZXRzICovCisKKyNkZWZpbmUgRkNfVVNBU0NJSSAwICAgLyogVVMgQVNDSUkgKi8KKyNk ZWZpbmUgRkNfVUtBU0NJSSAxICAgLyogVW5pdGVkIEtpbmdkb20gQVNDSUkgKi8KKyNkZWZpbmUg RkNfRFVBU0NJSSAyICAgLyogRHV0Y2ggSVNPIDY0NiBOUkMgKi8KKyNkZWZpbmUgRkNfRklBU0NJ SSAzICAgLyogRmlubmlzaCBJU08gNjQ2IE5SQyAqLworI2RlZmluZSBGQ19GUkFTQ0lJIDQgICAv KiBGcmVuY2ggSVNPIDY0NiBOUkMgKi8KKyNkZWZpbmUgRkNfRkNBU0NJSSA1ICAgLyogRnJlbmNo IENhbmFkaWFuIElTTyA2NDYgTlJDICovCisjZGVmaW5lIEZDX0dFQVNDSUkgNiAgIC8qIEdlcm1h biBJU08gNjQ2IE5SQyAqLworI2RlZmluZSBGQ19IVUFTQ0lJIDcgICAvKiBIdW5nYXJpYW4gSVNP IDY0NiBOUkMgKi8KKyNkZWZpbmUgRkNfSVRBU0NJSSA4ICAgLyogSXRhbGlhbiAqSVNPIDY0NiBO UkMgKi8KKyNkZWZpbmUgRkNfTk9BU0NJSSA5ICAgLyogTm9yd2VnaWFuIGFuZCBEYW5pc2ggSVNP IDY0NiBOUkMgKi8KKyNkZWZpbmUgRkNfUE9BU0NJSSAxMCAgLyogUG9ydHVndWVzZSBJU08gNjQ2 IE5SQyAqLworI2RlZmluZSBGQ19TUEFTQ0lJIDExICAvKiBTcGFuaXNoIElTTyA2NDYgTlJDICov CisjZGVmaW5lIEZDX1NXQVNDSUkgMTIgIC8qIFN3ZWRpc2ggSVNPIDY0NiBOUkMgKi8KKyNkZWZp bmUgRkNfQ0hBU0NJSSAxMyAgLyogU3dpc3MgSVNPIDY0NiBOUkMgKi8KKworLyogOC1iaXQgUm9t YW4gY2hhcmFjdGVyIHNldHMgKi8KKworI2RlZmluZSBGQ18xTEFUSU4gIDE0ICAvKiBJU08gODg1 OS0xIExhdGluIEFscGhhYmV0IDEgKi8KKyNkZWZpbmUgRkNfMkxBVElOICAxNSAgLyogSVNPIDg4 NTktMiBMYXRpbiBBbHBoYWJldCAyICovCisjZGVmaW5lIEZDX0RFQ01DUyAgMTYgIC8qIERFQyBN dWx0aW5hdGlvbmFsIENoYXJhY3RlciBTZXQgKi8KKyNkZWZpbmUgRkNfTkVYVCAgICAxNyAgLyog TmVYVCB3b3Jrc3RhdGlvbiBjaGFyYWN0ZXIgc2V0ICovCisjZGVmaW5lIEZDX0NQNDM3ICAgMTgg IC8qIElCTSBQQyBDb2RlIFBhZ2UgNDM3ICovCisjZGVmaW5lIEZDX0NQODUwICAgMTkgIC8qIElC TSBQQyBDb2RlIFBhZ2UgODUwICovCisjZGVmaW5lIEZDX0NQODUyICAgMjAgIC8qIElCTSBQQyBD b2RlIFBhZ2UgODUyICovCisjZGVmaW5lIEZDX0FQUFFEICAgMjEgIC8qIEFwcGxlIFF1aWNrZHJh dyAqLworI2RlZmluZSBGQ19ER01DUyAgIDIyICAvKiBEYXRhIEdlbmVyYWwgSW50ZXJuYXRpb25h bCBDaGFyYWN0ZXIgU2V0ICovCisjZGVmaW5lIEZDX0hQUjggICAgMjMgIC8qIEhQIFJvbWFuOCAq LworCisvKiBDeXJpbGxpYyBzZXRzICovCisKKyNkZWZpbmUgRkNfQ1lSSUxMICAyNCAgLyogSVNP IDg4NTktNSBMYXRpbi9DeXJpbGxpYyAqLworI2RlZmluZSBGQ19DUDg2NiAgIDI1ICAvKiBQQyBD b2RlIFBhZ2UgODY2IEN5cmlsbGljICovCisjZGVmaW5lIEZDX0tPSTcgICAgMjYgIC8qIEtPSS03 ID0gU2hvcnQgS09JICovCisjZGVmaW5lIEZDX0tPSTggICAgMjcgIC8qIEtPSS04ICovCisKKy8q IEphcGFuZXNlIHNldHMgKi8KKworI2RlZmluZSBGQ19KSVM3ICAgIDI4ICAvKiBKSVMtNyAqLwor I2RlZmluZSBGQ19TSEpJUyAgIDI5ICAvKiBTaGlmdGVkIEpJUyA9IENQOTMyICovCisjZGVmaW5l IEZDX0pFVUMgICAgMzAgIC8qIEphcGFuZXNlIEVVQyAoSkFFKSAqLworI2RlZmluZSBGQ19KREVD ICAgIDMxICAvKiBKYXBhbmVzZSBERUMgS2FuamkgKi8KKworLyogSGVicmV3IHNldHMgKi8KKwor I2RlZmluZSBGQ19IRTcgICAgIDMyICAvKiA3LUJpdCBERUMgSGVicmV3ICovCisjZGVmaW5lIEZD X0hFQlJFVyAgMzMgIC8qIDgtQml0IElTTyA4ODU5LTggTGF0aW4vSGVicmV3ICovCisjZGVmaW5l IEZDX0NQODYyICAgMzQgIC8qIEhlYnJldyBQQyBDb2RlIFBhZ2UgKi8KKworLyogR3JlZWsgc2V0 cyAqLworCisjZGVmaW5lIEZDX0VMT1QgICAgMzUgIC8qIDctQml0IEVMT1QgOTI3IEdyZWVrICov CisjZGVmaW5lIEZDX0dSRUVLICAgMzYgIC8qIDgtQml0IElTTyA4ODU5LTcgTGF0aW4vR3JlZWsg Ki8KKyNkZWZpbmUgRkNfQ1A4NjkgICAzNyAgLyogR3JlZWsgUEMgQ29kZSBQYWdlICovCisKKy8q IE5ldyBSb21hbiBzZXRzIHdpdGggRXVybyBzeW1ib2wgKi8KKworI2RlZmluZSBGQ185TEFUSU4g IDM4ICAvKiBJU08gODg1OS0xNSBMYXRpbiBBbHBoYWJldCA5ICovCisjZGVmaW5lIEZDX0NQOTIz ICAgMzggIC8qIFNhbWUgYXMgTGF0aW4tOSAqLworI2RlZmluZSBGQ19DUDg1OCAgIDM5ICAvKiBX ZXN0ZXJuIEV1cm9wZSB3aXRoIEV1cm8gKi8KKworLyogT3RoZXIgbmV3IGFkZGl0aW9ucyAqLwor CisjZGVmaW5lIEZDX0NQODU1ICAgNDAgIC8qIEN5cmlsbGljIFBDIENvZGUgUGFnZSAqLworI2Rl ZmluZSBGQ19DUDEyNTEgIDQxICAvKiBDeXJpbGxpYyBXaW5kb3dzICovCisjZGVmaW5lIEZDX0JV TEdBUiAgNDIgIC8qIEJ1bGdhcmlhbiBQQyBjb2RlIHBhZ2UgKi8KKyNkZWZpbmUgRkNfQ1AxMjUw ICA0MyAgLyogTGF0aW4gMiBXaW5kb3dzIChkaWZmZXJlbnQgZnJvbSBMYXRpbi0yKSovCisjZGVm aW5lIEZDX01BWk9WSUEgNDQgIC8qIFBvbGlzaCBNYXpvdmlhIFBDIGNvZGUgcGFnZSAqLworCisv KiBVbmljb2RlICovCisKKyNkZWZpbmUgRkNfVUNTMiAgICA0NSAgLyogSVNPLTEwNjQ2IC8gVW5p Y29kZSBVQ1MtMiAqLworI2RlZmluZSBGQ19VVEY4ICAgIDQ2ICAvKiBJU08tMTA2NDYgLyBVbmlj b2RlIFVURi04ICovCisKKy8qIFJlY2VudCBhZGRpdGlvbnMgKi8KKworI2RlZmluZSBGQ19LT0k4 UiAgIDQ3ICAvKiBLT0k4LVIgKFJGQzE0ODkpIC0gUnVzc2lhbiArIGJveGRyYXdpbmcgKi8KKyNk ZWZpbmUgRkNfS09JOFUgICA0OCAgLyogS09JOC1VIChSRkMyMzE5KSAtIFVrcmFpbmlhbiArIGJv eGRyYXdpbmcgKi8KKyNkZWZpbmUgRkNfQ1AxMjUyICA0OSAgLyogTGF0aW4gMSBXaW5kb3dzICov CisKKyNkZWZpbmUgTUFYRkNTRVRTICA0OSAgLyogSGlnaGVzdCBmaWxlIGNoYXJhY3RlciBzZXQg bnVtYmVyICovCisKKyNpZmRlZiBPUzIKKyNkZWZpbmUgRkNfREVDU1BFQyAyNTMgLyogTm90IHJl YWwgY2hhcmFjdGVyLXNldHMgKi8KKyNkZWZpbmUgRkNfREVDVEVDSCAyNTIKKyNlbmRpZiAvKiBP UzIgKi8KKworI2lmZGVmIFVOSUNPREUKK19QUk9UT1RZUCggVk9JRCBpbml0eGxhdGUsIChpbnQs IGludCkgKTsKKyNlbmRpZiAvKiBVTklDT0RFICovCisKKyNlbmRpZiAvKiBDS1VYTEFfSCAqLwoK ZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIvY2t3YXJ0 LmMgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nrd2FydC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmM2JiNzUKLS0tIC9kZXYvbnVsbAorKysg Yi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL2Nrd2FydC5jCkBAIC0wLDAg KzEsNzQ2IEBACisjaW5jbHVkZSAiY2tjc3ltLmgiCitjaGFyICp3YXJ0diA9ICJXYXJ0IFZlcnNp b24gMi4xNCwgMTAgTm92IDE5OTkiOworCisjZGVmaW5lIENLV0FSVF9DCisKKyNpZmRlZiBNREVC VUcKKy8qIFVzZSB0aGUgcmVhbCBvbmVzIGluIHRoaXMgbW9kdWxlIG9ubHkgKi8KKyNpZmRlZiBt YWxsb2MKKyN1bmRlZiBtYWxsb2MKKyNlbmRpZiAvKiBtYWxsb2MgKi8KKyNpZmRlZiBjYWxsb2MK KyN1bmRlZiBjYWxsb2MKKyNlbmRpZiAvKiBjYWxsb2MgKi8KKyNpZmRlZiByZWFsbG9jCisjdW5k ZWYgcmVhbGxvYworI2VuZGlmIC8qIHJlYWxsb2MgKi8KKyNpZmRlZiBmcmVlCisjdW5kZWYgZnJl ZQorI2VuZGlmIC8qIGZyZWUgKi8KKyNlbmRpZiAvKiBNREVCVUcgKi8KKworI2lmZGVmIE1BQwor I2RlZmluZSBWT0lEIHZvaWQKKyNlbmRpZiAvKiBNQUMgKi8KKworLyogVyBBIFIgVCAqLworCisv KgorICBBIHNtYWxsIHN1YnNldCBvZiAibGV4Ii4KKworICBBdXRob3JzOiBKZWZmIERhbWVucywg RnJhbmsgZGEgQ3J1egorICBDb2x1bWJpYSBVbml2ZXJzaXR5IENlbnRlciBmb3IgQ29tcHV0aW5n IEFjdGl2aXRlcy4KKyAgRmlyc3QgcmVsZWFzZWQgTm92ZW1iZXIgMTk4NC4KKyAgQ29weXJpZ2h0 IChDKSAxOTg0LCAyMDA5LAorICAgIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4g dGhlIENpdHkgb2YgTmV3IFlvcmsuCisgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNlZSB0aGUg Qy1LZXJtaXQgQ09QWUlORy5UWFQgZmlsZSBvciB0aGUKKyAgICBjb3B5cmlnaHQgdGV4dCBpbiB0 aGUgY2tjbWFpLmMgbW9kdWxlIGZvciBkaXNjbGFpbWVyIGFuZCBwZXJtaXNzaW9ucy4KKyovCisK Ky8qCisgKiBpbnB1dCBmb3JtYXQgaXM6CisgKiAgbGluZXMgdG8gYmUgY29waWVkIHwgJXN0YXRl IDxzdGF0ZSBuYW1lcy4uLj4KKyAqICAlJQorICogPHN0YXRlPiB8IDxzdGF0ZSxzdGF0ZSwuLi4+ IENIQVIgIHsgYWN0aW9ucyB9CisgKiAuLi4KKyAqICAlJQorICogIG1vcmUgbGluZXMgdG8gYmUg Y29waWVkCisgKi8KKworI2luY2x1ZGUgImNrY2RlYi5oIgkJCS8qIEluY2x1ZGVzICovCisKKyNp ZmRlZiBTVFJBVFVTCisvKiBBY3R1YWxseSBjYWxsIHByaW50Ziwgbm90IG91ciBwcmludGYtY2F0 Y2hlciBmb3IgS2VybWl0ICovCisjaWZkZWYgcHJpbnRmCisjdW5kZWYgcHJpbnRmCisjZW5kaWYg LyogcHJpbnRmICovCisjaWZkZWYgZnByaW50ZgorI3VuZGVmIGZwcmludGYKKyNlbmRpZiAvKiBm cHJpbnRmICovCisjZW5kaWYgLyogU1RSQVRVUyAqLworCisjaWZkZWYgTUFDCisvKiBTYW1lIGRl YWwgZm9yIE1hY2ludG9zaCAqLworI2lmZGVmIHByaW50ZgorI3VuZGVmIHByaW50ZgorI2VuZGlm IC8qIHByaW50ZiAqLworI2lmZGVmIGZwcmludGYKKyN1bmRlZiBmcHJpbnRmCisjZW5kaWYgLyog ZnByaW50ZiAqLworI2VuZGlmIC8qIE1BQyAqLworCisjaWZkZWYgVU5JWAorLyogQW5kIFVOSVgg Ki8KKyNpZmRlZiBwcmludGYKKyN1bmRlZiBwcmludGYKKyNlbmRpZiAvKiBwcmludGYgKi8KKyNp ZmRlZiBmcHJpbnRmCisjdW5kZWYgZnByaW50ZgorI2VuZGlmIC8qIGZwcmludGYgKi8KKyNlbmRp ZiAvKiBVTklYICovCisvKgorICBUaGUgZm9sbG93aW5nICJjaGFyIiBzaG91bGQgYmUgY2hhbmdl ZCB0byAic2hvcnQiLCAiaW50Iiwgb3IgImxvbmciIGlmIHlvdXIKKyAgd2FydCBwcm9ncmFtIHdp bGwgZ2VuZXJhdGUgbW9yZSB0aGFuIDEyNyBzdGF0ZXMuICBTaW5jZSB3YXJ0IGlzIHVzZWQgbWFp bmx5CisgIHdpdGggQy1LZXJtaXQsIHdoaWNoIGhhcyBhYm91dCA4MCBzdGF0ZXMsICJjaGFyIiBp cyBhZGVxdWF0ZS4gIFRoaXMga2VlcHMKKyAgdGhlIHByb2dyYW0gYWJvdXQgM0stNEsgc21hbGxl ciwgd2hpY2ggY2FuIGJlIGNyaXRpY2FsIG9uIDE2LWJpdAorICBhcmNoaXRlY3R1cmVzLgorKi8K KyNpZmRlZiBJUklYNjAKKy8qCisgIEFsc28gdXNlIHNob3J0IG9yIGludCBpZiB5b3VyIGNvbXBp bGVyIGNvbXBsYWlucyBpbm9yZGluYXRlbHkgYWJvdXQKKyAgImludGVnZXIgY29udmVyc2lvbiBy ZXN1bHRlZCBpbiBhIGNoYW5nZSBvZiBzaWduIi4uLgorKi8KKyNkZWZpbmUgVEJMX1RZUEUgInNo b3J0IgkJLyogQyBkYXRhIHR5cGUgb2Ygc3RhdGUgdGFibGUgKi8KKyNlbHNlCisjZGVmaW5lIFRC TF9UWVBFICJjaGFyIgkJCS8qIEMgZGF0YSB0eXBlIG9mIHN0YXRlIHRhYmxlICovCisjZW5kaWYg LyogSVJJWDYwICovCisKKyNkZWZpbmUgQ19MIDAxNAkJCQkvKiBGb3JtZmVlZCAqLworCisjZGVm aW5lIFNFUCAxCQkJCS8qIFRva2VuIHR5cGVzICovCisjZGVmaW5lIExCUkFDSyAyCisjZGVmaW5l IFJCUkFDSyAzCisjZGVmaW5lIFdPUkQgNAorI2RlZmluZSBDT01NQSA1CisKKy8qIFN0b3JhZ2Ug c2l6ZXMgKi8KKworI2RlZmluZSBNQVhTVEFURVMgNTAJCQkvKiBtYXggbnVtYmVyIG9mIHN0YXRl cyAqLworI2RlZmluZSBNQVhXT1JEIDUwCQkJLyogbWF4ICMgb2YgY2hhcnMvd29yZCAqLworI2Rl ZmluZSBTQllURVMgKChNQVhTVEFURVMrNikvOCkJLyogIyBvZiBieXRlcyBmb3Igc3RhdGUgYml0 bWFzayAqLworCisvKiBOYW1lIG9mIHdhcnQgZnVuY3Rpb24gaW4gZ2VuZXJhdGVkIHByb2dyYW0g Ki8KKworI2lmbmRlZiBGTkFNRQorI2RlZmluZSBGTkFNRSAid2FydCIKKyNlbmRpZiAvKiBGTkFN RSAqLworCisvKiBTdHJ1Y3R1cmUgZm9yIHN0YXRlIGluZm9ybWF0aW9uICovCisKK3N0cnVjdCB0 cmFuc3ggeworICAgIENIQVIgc3RhdGVzW1NCWVRFU107CQkvKiBpbmNsdWRlZCBzdGF0ZXMgKi8K KyAgICBpbnQgYW55c3Q7CQkJCS8qIHRydWUgaWYgdGhpcyBnb29kIGZyb20gYW55IHN0YXRlICov CisgICAgQ0hBUiBpbmNocjsJCQkJLyogaW5wdXQgY2hhcmFjdGVyICovCisgICAgaW50IGFjdG5v OwkJCQkvKiBhc3NvY2lhdGVkIGFjdGlvbiAqLworICAgIHN0cnVjdCB0cmFuc3ggKm54dDsKK307 CQkJCQkvKiBuZXh0IHRyYW5zaXRpb24gKi8KK3R5cGVkZWYgc3RydWN0IHRyYW5zeCAqdHJhbnM7 CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKworX1BST1RPVFlQKCBWT0lEIHNldHdzdGF0 ZSwgKGludCwgdHJhbnMpICk7CitfUFJPVE9UWVAoIGludCB0ZXN0c3RhdGUsIChpbnQsIHRyYW5z KSApOworX1BST1RPVFlQKCB0cmFucyByZGlucHV0LCAoRklMRSAqLCBGSUxFICopICk7CitfUFJP VE9UWVAoIFZPSUQgaW5pdGlhbCwgKEZJTEUgKiwgRklMRSAqKSApOworX1BST1RPVFlQKCBpbnQg aXNpbiwgKGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgaXN3b3JkLCAoaW50KSApOwor X1BST1RPVFlQKCBWT0lEIHJkd29yZCwgKEZJTEUgKiwgY2hhciAqKSApOworX1BST1RPVFlQKCBW T0lEIHJkc3RhdGVzLCAoRklMRSAqLCBGSUxFICopICk7CitfUFJPVE9UWVAoIHRyYW5zIG5ld3Ry YW5zLCAodm9pZCkgKTsKK19QUk9UT1RZUCggdHJhbnMgcmRydWxlcywgKEZJTEUgKiwgRklMRSAq KSApOworX1BST1RPVFlQKCBWT0lEIHN0YXRlbGlzdCwgKEZJTEUgKiwgdHJhbnMpICk7CitfUFJP VE9UWVAoIFZPSUQgY29weWFjdCwgKEZJTEUgKiwgRklMRSAqLCBpbnQpICk7CitfUFJPVE9UWVAo IGludCBmYWN0aW9uLCAodHJhbnMsIGludCwgaW50KSApOworX1BST1RPVFlQKCBWT0lEIGVtcHR5 dGJsLCAodm9pZCkgKTsKK19QUk9UT1RZUCggVk9JRCBhZGRhY3Rpb24sIChpbnQsIGludCwgaW50 KSApOworX1BST1RPVFlQKCBWT0lEIHdyaXRldGJsLCAoRklMRSAqKSApOworX1BST1RPVFlQKCBW T0lEIHdhcnJheSwgKEZJTEUgKiwgY2hhciAqLCBpbnQgW10sIGludCwgY2hhciAqKSApOworX1BS T1RPVFlQKCBWT0lEIHByb2xvZywgKEZJTEUgKikgKTsKK19QUk9UT1RZUCggVk9JRCBlcGlsb2d1 ZSwgKEZJTEUgKikgKTsKK19QUk9UT1RZUCggVk9JRCBjb3B5cmVzdCwgKEZJTEUgKiwgRklMRSAq KSApOworX1BST1RPVFlQKCBpbnQgZ2V0dG9rZW4sIChGSUxFICopICk7CitfUFJPVE9UWVAoIFZP SUQgcmRjbW50LCAoRklMRSAqKSApOworX1BST1RPVFlQKCBWT0lEIGNscmhhc2gsICh2b2lkKSAp OworX1BST1RPVFlQKCBpbnQgaGFzaCwgKGNoYXIgKikgKTsKK19QUk9UT1RZUCggVk9JRCBlbnRl ciwgKGNoYXIgKiwgaW50KSApOworX1BST1RPVFlQKCBpbnQgbGt1cCwgKGNoYXIgKikgKTsKK19Q Uk9UT1RZUCggc3RhdGljIGNoYXIqIGNvcHksIChjaGFyICpzKSApOworCisvKiBWYXJpYWJsZXMg YW5kIHRhYmxlcyAqLworCisvKiBsdCAxOTkyLTEwLTA4IEJlZ2luCisgKiBwcm92aWRlIGRlZmlu aXRpb24gZm9yIGRlYmxvZyB2YXJpYWJsZQorICogY2tjZGViLmggZGVjbGFyZXMgYXMgZXh0ZXJu LiBERUNDIEFYUCBpcyBzdHJpY3QgYWJvdXQgcmVmL2RlZiBtb2RlbAorICogVmFyaWFibGUgaXMg dW51c2VkIGhlcmVpbiwgdG8gdGhlIGJlc3Qgb2YgbXkga25vd2xlZGdlLgorICovCisjaWZkZWYg Vk1TCitpbnQgZGVibG9nOworI2VuZGlmIC8qIFZNUyAqLworLyogbHQgMTk5Mi0xMC0wOCBFbmQK KyAqLworCitzdGF0aWMgaW50IGxpbmVzLCBuc3RhdGVzLCBuYWN0czsKKworc3RhdGljIGNoYXIg dG9rdmFsW01BWFdPUkRdOworCitzdGF0aWMgaW50IHRibFtNQVhTVEFURVMqOTZdOworCitjaGFy ICp0YmxfdHlwZSA9IFRCTF9UWVBFOworCitjaGFyICp0eHQxID0gIlxuI2RlZmluZSBCRUdJTiBz dGF0ZSA9XG5cbmludCBzdGF0ZSA9IDA7XG5cbmludFxuIjsKKworY2hhciAqZm5hbWUgPSBGTkFN RTsJCQkvKiBHZW5lcmF0ZWQgZnVuY3Rpb24gbmFtZSBnb2VzIGhlcmUgKi8KKworLyogcmVzdCBv ZiBwcm9ncmFtLi4uICovCisKK2NoYXIgKnR4dDIgPSAiKClcblwKK3tcblwKKyAgICBpbnQgYyxh Y3RubztcblwKKyAgICBleHRlcm4gIjsKKworLyogRGF0YSB0eXBlIG9mIHN0YXRlIHRhYmxlIGlz IGluc2VydGVkIGhlcmUgKHNob3J0IG9yIGludCkgKi8KKworY2hhciAqdHh0MmEgPQorIiB0Ymxb XTtcblwKKyAgICB3aGlsZSAoMSkge1xuXAorCWMgPSBpbnB1dCgpIC0gMzI7XG5cCisJZGVidWco RjAwMCxcIlBST1RPIGlucHV0XCIsY2tpdG9hKHN0YXRlKSxjKzMyKTtcblwKKwlpZiAoYyA8IDAg fHwgYyA+IDk1KSBjID0gMDtcbiI7CisKK2NoYXIgKnR4dDJiID0gIglpZiAoKGFjdG5vID0gdGJs W2MgKyBzdGF0ZSo5Nl0pICE9IC0xKVxuXAorCSAgICBzd2l0Y2goYWN0bm8pIHtcbiI7CisKKy8q IHRoaXMgcHJvZ3JhbSdzIG91dHB1dCBnb2VzIGhlcmUsIGZvbGxvd2VkIGJ5IGZpbmFsIHRleHQu Li4gKi8KKworY2hhciAqdHh0MyA9ICJcbgkgICAgfVxuICAgIH1cbn1cblxuIjsKKworCisvKgor ICogdHVybiBvbiB0aGUgYml0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gc3RhdGUKKyAqCisg Ki8KK1ZPSUQKK3NldHdzdGF0ZShzdGF0ZSx0KSBpbnQgc3RhdGU7IHRyYW5zIHQ7IHsKKyAgICBp bnQgaWR4LG1zazsKKyAgICBpZHggPSBzdGF0ZS84OwkJCS8qIGJ5dGUgYXNzb2NpYXRlZCB3aXRo IHN0YXRlICovCisgICAgbXNrID0gMHg4MCA+PiAoc3RhdGUgJSA4KTsJCS8qIGJpdCBtYXNrIGZv ciBzdGF0ZSAqLworICAgIHQtPnN0YXRlc1tpZHhdIHw9IG1zazsKK30KKworLyoKKyAqIHNlZSBp ZiB0aGUgc3RhdGUgaXMgaW52b2x2ZWQgaW4gdGhlIHRyYW5zaXRpb24KKyAqCisgKi8KK2ludAor dGVzdHN0YXRlKHN0YXRlLHQpIGludCBzdGF0ZTsgdHJhbnMgdDsgeworICAgIGludCBpZHgsbXNr OworICAgIGlkeCA9IHN0YXRlLzg7CisgICAgbXNrID0gMHg4MCA+PiAoc3RhdGUgJSA4KTsKKyAg ICByZXR1cm4odC0+c3RhdGVzW2lkeF0gJiBtc2spOworfQorCisKKy8qCisgKiByZWFkIGlucHV0 IGZyb20gaGVyZS4uLgorICoKKyAqLworCit0cmFucworcmRpbnB1dChpbmZwLG91dGZwKSBGSUxF ICppbmZwLCpvdXRmcDsgeworICAgIHRyYW5zIHg7CisgICAgbGluZXMgPSAxOwkJCQkvKiBsaW5l IGNvdW50ZXIgKi8KKyAgICBuc3RhdGVzID0gMDsJCQkvKiBubyBzdGF0ZXMgKi8KKyAgICBuYWN0 cyA9IDA7CQkJCS8qIG5vIGFjdGlvbnMgeWV0ICovCisgICAgZnByaW50ZihvdXRmcCwiXG4lYyog V0FSTklORyAtLSBUaGlzIEMgc291cmNlIHByb2dyYW0gZ2VuZXJhdGVkIGJ5ICIsJy8nKTsKKyAg ICBmcHJpbnRmKG91dGZwLCJXYXJ0IHByZXByb2Nlc3Nvci4gKi9cbiIpOworICAgIGZwcmludGYo b3V0ZnAsIiVjKiBEbyBub3QgZWRpdCB0aGlzIGZpbGU7IGVkaXQgdGhlIFdhcnQtZm9ybWF0ICIs Jy8nKTsKKyAgICBmcHJpbnRmKG91dGZwLCJzb3VyY2UgZmlsZSBpbnN0ZWFkLCAqL1xuIik7Cisg ICAgZnByaW50ZihvdXRmcCwiJWMqIGFuZCB0aGVuIHJ1biBpdCB0aHJvdWdoIFdhcnQgdG8gcHJv ZHVjZSBhIG5ldyAiLCcvJyk7CisgICAgZnByaW50ZihvdXRmcCwiQyBzb3VyY2UgZmlsZS4gICAg ICovXG5cbiIpOworICAgIGZwcmludGYob3V0ZnAsIiVjKiBXYXJ0IFZlcnNpb24gSW5mbzogKi9c biIsJy8nKTsKKyAgICBmcHJpbnRmKG91dGZwLCJjaGFyICp3YXJ0diA9IFwiJXNcIjtcblxuIix3 YXJ0dik7CisKKyAgICBpbml0aWFsKGluZnAsb3V0ZnApOwkJLyogcmVhZCBzdGF0ZSBuYW1lcywg aW5pdGlhbCBkZWZzICovCisgICAgcHJvbG9nKG91dGZwKTsJCQkvKiB3cml0ZSBvdXQgb3VyIGlu aXRpYWwgY29kZSAqLworICAgIHggPSByZHJ1bGVzKGluZnAsb3V0ZnApOwkJLyogcmVhZCBydWxl cyAqLworICAgIGVwaWxvZ3VlKG91dGZwKTsJCQkvKiB3cml0ZSBvdXQgZXBpbG9ndWUgY29kZSAq LworICAgIHJldHVybih4KTsKK30KKworCisvKgorICogaW5pdGlhbCAtIHJlYWQgaW5pdGlhbCBk ZWZpbml0aW9ucyBhbmQgc3RhdGUgbmFtZXMuICBSZXR1cm5zCisgKiBvbiBFT0Ygb3IgJSUuCisg KgorICovCitWT0lECitpbml0aWFsKGluZnAsb3V0ZnApIEZJTEUgKmluZnAsICpvdXRmcDsgewor ICAgIGludCBjOworICAgIGNoYXIgd29yZGJ1ZltNQVhXT1JEXTsKKyAgICB3aGlsZSAoKGMgPSBn ZXRjKGluZnApKSAhPSBFT0YpIHsKKwlpZiAoYyA9PSAnJScpIHsKKwkgICAgcmR3b3JkKGluZnAs d29yZGJ1Zik7CisJICAgIGlmIChzdHJjbXAod29yZGJ1Ziwic3RhdGVzIikgPT0gMCkKKwkgICAg ICByZHN0YXRlcyhpbmZwLG91dGZwKTsKKwkgICAgZWxzZSBpZiAoc3RyY21wKHdvcmRidWYsIiUi KSA9PSAwKSByZXR1cm47CisJICAgIGVsc2UgZnByaW50ZihvdXRmcCwiJSUlcyIsd29yZGJ1Zik7 CisJfQorCWVsc2UgcHV0YyhjLG91dGZwKTsKKwlpZiAoYyA9PSAnXG4nKSBsaW5lcysrOworICAg IH0KK30KKworLyoKKyAqIGJvb2xlYW4gZnVuY3Rpb24gdG8gdGVsbCBpZiB0aGUgZ2l2ZW4gY2hh cmFjdGVyIGNhbiBiZSBwYXJ0IG9mCisgKiBhIHdvcmQuCisgKgorICovCitpbnQKK2lzaW4ocyxj KSBjaGFyICpzOyBpbnQgYzsgeworICAgIGZvciAoOyAqcyAhPSAnXDAnOyBzKyspCisgICAgICBp ZiAoKnMgPT0gKGNoYXIpIGMpIHJldHVybigxKTsKKyAgICByZXR1cm4oMCk7Cit9CitpbnQKK2lz d29yZChjKSBpbnQgYzsgeworICAgIHN0YXRpYyBjaGFyIHNwZWNpYWxbXSA9ICIuJV8tJEAiOwkv KiB0aGVzZSBhcmUgYWxsb3dhYmxlICovCisgICAgcmV0dXJuKGlzYWxudW0oYykgfHwgaXNpbihz cGVjaWFsLGMpKTsKK30KKworLyoKKyAqIHJlYWQgdGhlIG5leHQgd29yZCBpbnRvIHRoZSBnaXZl biBidWZmZXIuCisgKgorICovCitWT0lECityZHdvcmQoZnAsYnVmKSBGSUxFICpmcDsgY2hhciAq YnVmOyB7CisgICAgaW50IGxlbiA9IDAsYzsKKyAgICB3aGlsZSAoaXN3b3JkKGMgPSBnZXRjKGZw KSkgJiYgKytsZW4gPCBNQVhXT1JEKSAqYnVmKysgPSAoY2hhcikgYzsKKyAgICAqYnVmKysgPSAn XDAnOwkJCS8qIHRpZSBvZmYgd29yZCAqLworICAgIHVuZ2V0YyhjLGZwKTsJCQkvKiBwdXQgYnJl YWsgY2hhciBiYWNrICovCit9CisKKy8qCisgKiByZWFkIHN0YXRlIG5hbWVzLCB1cCB0byBhIG5l d2xpbmUuCisgKgorICovCitWT0lECityZHN0YXRlcyhmcCxvZnApIEZJTEUgKmZwLCpvZnA7IHsK KyAgICBpbnQgYzsKKyAgICBjaGFyIHdvcmRidWZbTUFYV09SRF07CisgICAgd2hpbGUgKChjID0g Z2V0YyhmcCkpICE9IEVPRiAmJiBjICE9ICdcbicpIHsKKwlpZiAoaXNzcGFjZShjKSB8fCBjID09 IENfTCkgY29udGludWU7CS8qIHNraXAgd2hpdGVzcGFjZSAqLworCXVuZ2V0YyhjLGZwKTsJCQkv KiBwdXQgY2hhciBiYWNrICovCisJcmR3b3JkKGZwLHdvcmRidWYpOwkJLyogcmVhZCB0aGUgd2hv bGUgd29yZCAqLworCWVudGVyKHdvcmRidWYsKytuc3RhdGVzKTsJLyogcHV0IGludG8gc3ltYm9s IHRibCAqLworCWZwcmludGYob2ZwLCIjZGVmaW5lICVzICVkXG4iLHdvcmRidWYsbnN0YXRlcyk7 CisgICAgfQorICAgIGxpbmVzKys7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBhIG5ldywgZW1wdHkg dHJhbnNpdGlvbiBub2RlCisgKgorICovCit0cmFucworbmV3dHJhbnMoKSB7CisgICAgdHJhbnMg bmV3OworICAgIGludCBpOworICAgIG5ldyA9ICh0cmFucykgbWFsbG9jKHNpemVvZiAoc3RydWN0 IHRyYW5zeCkpOworICAgIGZvciAoaT0wOyBpPFNCWVRFUzsgaSsrKSBuZXctPnN0YXRlc1tpXSA9 IDA7CisgICAgbmV3LT5hbnlzdCA9IDA7CisgICAgbmV3LT5ueHQgPSBOVUxMOworICAgIHJldHVy bihuZXcpOworfQorCisKKy8qCisgKiByZWFkIGFsbCB0aGUgcnVsZXMuCisgKgorICovCisKK3Ry YW5zCityZHJ1bGVzKGZwLG91dCkgRklMRSAqZnAsKm91dDsgeworICAgIHRyYW5zIGhlYWQsY3Vy LHByZXY7CisgICAgaW50IGN1cnRvazsKKyAgICBoZWFkID0gY3VyID0gcHJldiA9IE5VTEw7Cisg ICAgd2hpbGUgKChjdXJ0b2sgPSBnZXR0b2tlbihmcCkpICE9IFNFUCkKKworICAgICAgc3dpdGNo KGN1cnRvaykgeworCWNhc2UgTEJSQUNLOgorCSAgaWYgKGN1ciA9PSBOVUxMKQorCSAgICBjdXIg PSBuZXd0cmFucygpOworCSAgZWxzZQorCSAgICBmYXRhbCgiZHVwbGljYXRlIHN0YXRlIGxpc3Qi KTsKKwkgIHN0YXRlbGlzdChmcCxjdXIpOwkJLyogc2V0IHN0YXRlcyAqLworCSAgY29udGludWU7 CQkJLyogcHJlcGFyZSB0byByZWFkIGNoYXIgKi8KKworCWNhc2UgV09SRDoKKwkgIGlmICgoaW50 KXN0cmxlbih0b2t2YWwpICE9IDEpCisJICAgIGZhdGFsKCJtdWx0aXBsZSBjaGFycyBpbiBzdGF0 ZSIpOworCSAgaWYgKGN1ciA9PSBOVUxMKSB7CisJICAgICAgY3VyID0gbmV3dHJhbnMoKTsKKwkg ICAgICBjdXItPmFueXN0ID0gMTsKKwkgIH0KKwkgIGN1ci0+YWN0bm8gPSArK25hY3RzOworCSAg Y3VyLT5pbmNociA9IChjaGFyKSAodG9rdmFsWzBdIC0gMzIpOworCSAgaWYgKGhlYWQgPT0gTlVM TCkKKwkgICAgaGVhZCA9IGN1cjsKKwkgIGVsc2UKKwkgICAgcHJldi0+bnh0ID0gY3VyOworCSAg cHJldiA9IGN1cjsKKwkgIGN1ciA9IE5VTEw7CisJICBjb3B5YWN0KGZwLG91dCxuYWN0cyk7CisJ ICBicmVhazsKKwlkZWZhdWx0OiBmYXRhbCgiYmFkIGlucHV0IGZvcm1hdCIpOworICAgICAgfQor ICAgIHJldHVybihoZWFkKTsKK30KKworLyoKKyAqIHJlYWQgYSBsaXN0IG9mIChjb21tYS1zZXBh cmF0ZWQpIHN0YXRlcywgc2V0IHRoZW0gaW4gdGhlCisgKiBnaXZlbiB0cmFuc2l0aW9uLgorICoK KyAqLworVk9JRAorc3RhdGVsaXN0KGZwLHQpIEZJTEUgKmZwOyB0cmFucyB0OyB7CisgICAgaW50 IGN1cnRvayxzdmFsOworICAgIGN1cnRvayA9IENPTU1BOworICAgIHdoaWxlIChjdXJ0b2sgIT0g UkJSQUNLKSB7CisJaWYgKGN1cnRvayAhPSBDT01NQSkgZmF0YWwoIm1pc3NpbmcgY29tbWEiKTsK KwlpZiAoKGN1cnRvayA9IGdldHRva2VuKGZwKSkgIT0gV09SRCkgZmF0YWwoIm1pc3Npbmcgc3Rh dGUgbmFtZSIpOworCWlmICgoc3ZhbCA9IGxrdXAodG9rdmFsKSkgPT0gLTEpIHsKKwkgICAgZnBy aW50ZihzdGRlcnIsInN0YXRlICVzIHVuZGVmaW5lZFxuIix0b2t2YWwpOworCSAgICBmYXRhbCgi dW5kZWZpbmVkIHN0YXRlIik7CisJfQorCXNldHdzdGF0ZShzdmFsLHQpOworCWN1cnRvayA9IGdl dHRva2VuKGZwKTsKKyAgICB9Cit9CisKKy8qCisgKiBjb3B5IGFuIGFjdGlvbiBmcm9tIHRoZSBp bnB1dCB0byB0aGUgb3V0cHV0IGZpbGUKKyAqCisgKi8KK1ZPSUQKK2NvcHlhY3QoaW5wLG91dHAs YWN0bm8pIEZJTEUgKmlucCwqb3V0cDsgaW50IGFjdG5vOyB7CisgICAgaW50IGMsYmNudDsKKyAg ICBmcHJpbnRmKG91dHAsImNhc2UgJWQ6XG4iLGFjdG5vKTsKKyAgICB3aGlsZSAoYyA9IGdldGMo aW5wKSwgKGlzc3BhY2UoYykgfHwgYyA9PSBDX0wpKQorICAgICAgaWYgKGMgPT0gJ1xuJykgbGlu ZXMrKzsKKyAgICBpZiAoYyA9PSAneycpIHsKKwliY250ID0gMTsKKwlmcHV0cygiICAgIHsiLG91 dHApOworCXdoaWxlIChiY250ID4gMCAmJiAoYyA9IGdldGMoaW5wKSkgIT0gRU9GKSB7CisJICAg IGlmIChjID09ICd7JykgYmNudCsrOworCSAgICBlbHNlIGlmIChjID09ICd9JykgYmNudC0tOwor CSAgICBlbHNlIGlmIChjID09ICdcbicpIGxpbmVzKys7CisJICAgIHB1dGMoYyxvdXRwKTsKKwl9 CisJaWYgKGJjbnQgPiAwKSBmYXRhbCgiYWN0aW9uIGRvZXNuJ3QgZW5kIik7CisgICAgfSBlbHNl IHsKKwl3aGlsZSAoYyAhPSAnXG4nICYmIGMgIT0gRU9GKSB7CisJICAgIHB1dGMoYyxvdXRwKTsK KwkgICAgYyA9IGdldGMoaW5wKTsKKwl9CisJbGluZXMrKzsKKyAgICB9CisgICAgZnByaW50Zihv dXRwLCJcbiAgICBicmVhaztcbiIpOworfQorCisvKgorICogZmluZCB0aGUgYWN0aW9uIGFzc29j aWF0ZWQgd2l0aCBhIGdpdmVuIGNoYXJhY3RlciBhbmQgc3RhdGUuCisgKiByZXR1cm5zIC0xIGlm IG9uZSBjYW4ndCBiZSBmb3VuZC4KKyAqCisgKi8KK2ludAorZmFjdGlvbihoZCxzdGF0ZSxjaHIp IHRyYW5zIGhkOyBpbnQgc3RhdGUsY2hyOyB7CisgICAgd2hpbGUgKGhkICE9IE5VTEwpIHsKKwlp ZiAoaGQtPmFueXN0IHx8IHRlc3RzdGF0ZShzdGF0ZSxoZCkpCisJICBpZiAoaGQtPmluY2hyID09 ICgnLicgLSAzMikgfHwgaGQtPmluY2hyID09IChjaGFyKSBjaHIpCisJICAgIHJldHVybihoZC0+ YWN0bm8pOworCWhkID0gaGQtPm54dDsKKyAgICB9CisgICAgcmV0dXJuKC0xKTsKK30KKworLyoK KyAqIGVtcHR5IHRoZSB0YWJsZS4uLgorICoKKyAqLworVk9JRAorZW1wdHl0YmwoKSB7CisgICAg aW50IGk7CisgICAgZm9yIChpPTA7IGk8bnN0YXRlcyo5NjsgaSsrKSB0YmxbaV0gPSAtMTsKK30K KworLyoKKyAqIGFkZCB0aGUgc3BlY2lmaWVkIGFjdGlvbiB0byB0aGUgb3V0cHV0IGZvciB0aGUg Z2l2ZW4gc3RhdGUgYW5kIGNoci4KKyAqCisgKi8KK1ZPSUQKK2FkZGFjdGlvbihhY3Qsc3RhdGUs Y2hyKSBpbnQgYWN0LHN0YXRlLGNocjsgeworICAgIHRibFtzdGF0ZSo5NiArIGNocl0gPSBhY3Q7 Cit9CisKK1ZPSUQKK3dyaXRldGJsKGZwKSBGSUxFICpmcDsgeworICAgIHdhcnJheShmcCwidGJs Iix0YmwsOTYqKG5zdGF0ZXMrMSksVEJMX1RZUEUpOworfQorCisKKy8qCisgKiB3cml0ZSBhbiBh cnJheSB0byB0aGUgb3V0cHV0IGZpbGUsIGdpdmVuIGl0cyBuYW1lIGFuZCBzaXplLgorICoKKyAq LworVk9JRAord2FycmF5KGZwLG5hbSxjb250LHNpeix0eXApIEZJTEUgKmZwOyBjaGFyICpuYW07 IGludCBjb250W10sc2l6OyBjaGFyICp0eXA7IHsKKyAgICBpbnQgaTsKKyAgICBmcHJpbnRmKGZw LCIlcyAlc1tdID0ge1xuIix0eXAsbmFtKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6IC0gMTsg KSB7CisJZnByaW50ZihmcCwiICUyZCwiLGNvbnRbaV0pOworCWlmICgoKytpICUgMTYpID09IDAp IHB1dGMoJ1xuJyxmcCk7CisgICAgfQorICAgIGZwcmludGYoZnAsIiUyZFxufTtcbiIsY29udFtz aXotMV0pOworfQorCisjaWZuZGVmIFNUUkFUVVMKKyNpZmRlZiBNQUlOVFlQRQorLyoKKyAgSWYg eW91IGdldCBjb21wbGFpbnRzIGFib3V0ICJtYWluOiByZXR1cm4gdHlwZSBpcyBub3QgYmxhaCIs CisgIGRlZmluZSBNQUlOVFlQRSBvbiB0aGUgQ0MgY29tbWFuZCBsaW5lLCBlLmcuICJDRkxBR1M9 LURNQUlOVFlQRT1pbnQiLgorKi8KK01BSU5UWVBFCisjZWxzZQorI2lmZGVmIENLX1NDT1Y1Citp bnQKKyNlbHNlCisjaWZkZWYgX19ERUNDCisjaWZkZWYgX19BTFBIQQoraW50CisjZWxzZQorVk9J RAorI2VuZGlmIC8qIF9fQUxQSEEgKi8KKyNlbHNlCisjaWZkZWYgU1RSQVRVUworaW50CisjaWZk ZWYgX19HTlVDX18KK2ludAorI2Vsc2UKKy8qCisgIFRoZSBkZWZhdWx0IGNhc2Ugc2hvdWxkIGJl IGludCwgbm90IFZPSUQsIGJ1dCBpdCdzIGJlZW4gdGhpcyB3YXkgZm9yCisgIHllYXJzIChubyBk b3VidCBmb3IgYSByZWFzb24pIGFuZCB3aG8ga25vd3MgaG93IG1hbnkgYnVpbGRzIHdvdWxkIGJy ZWFrCisgIGlmIEkgY2hhbmdlZCBpdC4KKyovCitWT0lECisjZW5kaWYgLyogX19HTlVDX18gKi8K KyNlbmRpZiAvKiBTVFJBVFVTICovCisjZW5kaWYgLyogX19ERUNDICovCisjZW5kaWYgLyogQ0tf U0NPVjUgKi8KKyNlbmRpZiAvKiBNQUlOVFlQRSAqLworI2VuZGlmIC8qIFNUUkFUVVMgKi8KK21h aW4oYXJnYyxhcmd2KSBpbnQgYXJnYzsgY2hhciAqKmFyZ3Y7IHsKKyAgICB0cmFucyBoZWFkOwor ICAgIGludCBzdGF0ZSxjOworICAgIEZJTEUgKmluZmlsZSwqb3V0ZmlsZTsKKworICAgIGlmIChh cmdjID4gMSkgeworCWlmICgoaW5maWxlID0gZm9wZW4oYXJndlsxXSwiciIpKSA9PSBOVUxMKSB7 CisJICAgIGZwcmludGYoc3RkZXJyLCJDYW4ndCBvcGVuICVzXG4iLGFyZ3ZbMV0pOworCSAgICBm YXRhbCgidW5yZWFkYWJsZSBpbnB1dCBmaWxlIik7CisJfQorICAgIH0gZWxzZSBpbmZpbGUgPSBz dGRpbjsKKworICAgIGlmIChhcmdjID4gMikgeworCWlmICgob3V0ZmlsZSA9IGZvcGVuKGFyZ3Zb Ml0sInciKSkgPT0gTlVMTCkgeworCSAgICBmcHJpbnRmKHN0ZGVyciwiQ2FuJ3Qgd3JpdGUgdG8g JXNcbiIsYXJndlsyXSk7CisJICAgIGZhdGFsKCJiYWQgb3V0cHV0IGZpbGUiKTsKKwl9CisgICAg fSBlbHNlIG91dGZpbGUgPSBzdGRvdXQ7CisKKyAgICBjbHJoYXNoKCk7CQkJCS8qIGVtcHR5IGhh c2ggdGFibGUgKi8KKyAgICBoZWFkID0gcmRpbnB1dChpbmZpbGUsb3V0ZmlsZSk7CS8qIHJlYWQg aW5wdXQgZmlsZSAqLworICAgIGVtcHR5dGJsKCk7CQkJCS8qIGVtcHR5IG91ciB0YWJsZXMgKi8K KyAgICBmb3IgKHN0YXRlID0gMDsgc3RhdGUgPD0gbnN0YXRlczsgc3RhdGUrKykKKyAgICAgIGZv ciAoYyA9IDE7IGMgPCA5NjsgYysrKQkJLyogZmluZCBhY3Rpb25zLCAqLworCWFkZGFjdGlvbihm YWN0aW9uKGhlYWQsc3RhdGUsYyksc3RhdGUsYyk7IC8qIGFkZCB0byB0YmwgKi8KKyAgICB3cml0 ZXRibChvdXRmaWxlKTsKKyAgICBjb3B5cmVzdChpbmZpbGUsb3V0ZmlsZSk7CisgICAgcHJpbnRm KCIlZCBzdGF0ZXMsICVkIGFjdGlvbnNcbiIsbnN0YXRlcyxuYWN0cyk7CisgICAgZXhpdChHT09E X0VYSVQpOworfQorCisKKy8qCisgKiBmYXRhbCBlcnJvciBoYW5kbGVyCisgKgorICovCisKK1ZP SUQKK2ZhdGFsKG1zZykgY2hhciAqbXNnOyB7CisgICAgZnByaW50ZihzdGRlcnIsImVycm9yIGlu IGxpbmUgJWQ6ICVzXG4iLGxpbmVzLG1zZyk7CisgICAgZXhpdChCQURfRVhJVCk7Cit9CisKK1ZP SUQKK3Byb2xvZyhvdXRmcCkgRklMRSAqb3V0ZnA7IHsKKyAgICBpbnQgYzsKKyAgICB3aGlsZSAo KGMgPSAqdHh0MSsrKSAgICAgIT0gJ1wwJykgcHV0YyhjLG91dGZwKTsKKyAgICB3aGlsZSAoKGMg PSAqZm5hbWUrKykgICAgIT0gJ1wwJykgcHV0YyhjLG91dGZwKTsKKyAgICB3aGlsZSAoKGMgPSAq dHh0MisrKSAgICAgIT0gJ1wwJykgcHV0YyhjLG91dGZwKTsKKyAgICB3aGlsZSAoKGMgPSAqdGJs X3R5cGUrKykgIT0gJ1wwJykgcHV0YyhjLG91dGZwKTsKKyAgICB3aGlsZSAoKGMgPSAqdHh0MmEr KykgICAgIT0gJ1wwJykgcHV0YyhjLG91dGZwKTsKKyAgICB3aGlsZSAoKGMgPSAqdHh0MmIrKykg ICAgIT0gJ1wwJykgcHV0YyhjLG91dGZwKTsKK30KKworVk9JRAorZXBpbG9ndWUob3V0ZnApIEZJ TEUgKm91dGZwOyB7CisgICAgaW50IGM7CisgICAgd2hpbGUgKChjID0gKnR4dDMrKykgIT0gJ1ww JykgcHV0YyhjLG91dGZwKTsKK30KKworVk9JRAorY29weXJlc3QoaW4sb3V0KSBGSUxFICppbiwq b3V0OyB7CisgICAgaW50IGM7CisgICAgd2hpbGUgKChjID0gZ2V0YyhpbikpICE9IEVPRikgcHV0 YyhjLG91dCk7Cit9CisKKy8qCisgKiBnZXR0b2tlbiAtIHJldHVybnMgdG9rZW4gdHlwZSBvZiBu ZXh0IHRva2VuLCBzZXRzIHRva3ZhbAorICogdG8gdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgdG9r ZW4gaWYgYXBwcm9wcmlhdGUuCisgKgorICovCisKK2ludAorZ2V0dG9rZW4oZnApIEZJTEUgKmZw OyB7CisgICAgaW50IGM7CisgICAgd2hpbGUgKDEpIHsJCQkJLyogbG9vcCBpZiByZWFkaW5nIGNv bW1lbnRzLi4uICovCisJZG8geworCSAgICBjID0gZ2V0YyhmcCk7CisJICAgIGlmIChjID09ICdc bicpIGxpbmVzKys7CisJfSB3aGlsZSAoKGlzc3BhY2UoYykgfHwgYyA9PSBDX0wpKTsgLyogc2tp cCB3aGl0ZXNwYWNlICovCisJc3dpdGNoKGMpIHsKKwkgIGNhc2UgRU9GOgorCSAgICByZXR1cm4o U0VQKTsKKwkgIGNhc2UgJyUnOgorCSAgICBpZiAoKGMgPSBnZXRjKGZwKSkgPT0gJyUnKSByZXR1 cm4oU0VQKTsKKwkgICAgdG9rdmFsWzBdID0gJyUnOworCSAgICB0b2t2YWxbMV0gPSAoY2hhcikg YzsKKwkgICAgcmR3b3JkKGZwLHRva3ZhbCsyKTsKKwkgICAgcmV0dXJuKFdPUkQpOworCSAgY2Fz ZSAnPCc6CisJICAgIHJldHVybihMQlJBQ0spOworCSAgY2FzZSAnPic6CisJICAgIHJldHVybihS QlJBQ0spOworCSAgY2FzZSAnLCc6CisJICAgIHJldHVybihDT01NQSk7CisJICBjYXNlICcvJzoK KwkgICAgaWYgKChjID0gZ2V0YyhmcCkpID09ICcqJykgeworCQlyZGNtbnQoZnApOwkJLyogc2tp cCBvdmVyIHRoZSBjb21tZW50ICovCisJCWNvbnRpbnVlOworCSAgICB9IGVsc2UgewkJCS8qIGFu ZCBrZWVwIGxvb3BpbmcgKi8KKwkJdW5nZXRjKGMsZnApOwkJLyogcHV0IHRoaXMgYmFjayBpbnRv IGlucHV0ICovCisJCWMgPSAnLyc7CQkvKiBwdXQgY2hhcmFjdGVyIGJhY2ssIGZhbGwgdGhydSAq LworCSAgICB9CisKKwkgIGRlZmF1bHQ6CisJICAgIGlmIChpc3dvcmQoYykpIHsKKwkJdW5nZXRj KGMsZnApOworCQlyZHdvcmQoZnAsdG9rdmFsKTsKKwkJcmV0dXJuKFdPUkQpOworCSAgICB9IGVs c2UgZmF0YWwoIkludmFsaWQgY2hhcmFjdGVyIGluIGlucHV0Iik7CisJfQorICAgIH0KK30KKwor LyoKKyAqIHNraXAgb3ZlciBhIGNvbW1lbnQKKyAqCisgKi8KKworVk9JRAorcmRjbW50KGZwKSBG SUxFICpmcDsgeworICAgIGludCBjLHN0YXIscHJjbnQ7CisgICAgcHJjbnQgPSBzdGFyID0gMDsJ CQkvKiBubyBzdGFyIHNlZW4geWV0ICovCisgICAgd2hpbGUgKCEoKGMgPSBnZXRjKGZwKSkgPT0g Jy8nICYmIHN0YXIpKSB7CisJaWYgKGMgPT0gRU9GIHx8IChwcmNudCAmJiBjID09ICclJykpIGZh dGFsKCJVbnRlcm1pbmF0ZWQgY29tbWVudCIpOworCXByY250ID0gKGMgPT0gJyUnKTsKKwlzdGFy ID0gKGMgPT0gJyonKTsKKwlpZiAoYyA9PSAnXG4nKSBsaW5lcysrOworICAgIH0KK30KKworLyoK KyAqIHN5bWJvbCB0YWJsZSBtYW5hZ2VtZW50IGZvciB3YXJ0CisgKgorICogZW50cnkgcG9pbnRz OgorICogICBjbHJoYXNoIC0gZW1wdHkgaGFzaCB0YWJsZS4KKyAqICAgZW50ZXIgLSBlbnRlciBh IG5hbWUgaW50byB0aGUgc3ltYm9sIHRhYmxlCisgKiAgIGxrdXAgLSBmaW5kIGEgbmFtZSdzIHZh bHVlIGluIHRoZSBzeW1ib2wgdGFibGUuCisgKgorICovCisKKyNkZWZpbmUgSEFTSFNJWkUgMTAx CQkJLyogIyBvZiBlbnRyaWVzIGluIGhhc2ggdGFibGUgKi8KKworc3RydWN0IHN5bSB7CisgICAg Y2hhciAqbmFtZTsJCQkJLyogc3ltYm9sIG5hbWUgKi8KKyAgICBpbnQgdmFsOwkJCQkvKiB2YWx1 ZSAqLworICAgIHN0cnVjdCBzeW0gKmhueHQ7CQkJLyogbmV4dCBvbiBjb2xsaXNpb24gY2hhaW4g Ki8KK30gKmh0YWJbSEFTSFNJWkVdOwkJCS8qIHRoZSBoYXNoIHRhYmxlICovCisKKy8qCisgKiBl bXB0eSB0aGUgaGFzaCB0YWJsZSBiZWZvcmUgdXNpbmcgaXQuLi4KKyAqCisgKi8KK1ZPSUQKK2Ns cmhhc2goKSB7CisgICAgaW50IGk7CisgICAgZm9yIChpPTA7IGk8SEFTSFNJWkU7IGkrKykgaHRh YltpXSA9IE5VTEw7Cit9CisKKy8qCisgKiBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgaGFzaCBm b3IgYSBzeW1ib2wKKyAqCisgKi8KK2ludAoraGFzaChuYW1lKSBjaGFyICpuYW1lOyB7CisgICAg aW50IHN1bTsKKyAgICBmb3IgKHN1bSA9IDA7ICpuYW1lICE9ICdcMCc7IG5hbWUrKykgc3VtICs9 IChzdW0gKyAqbmFtZSk7CisgICAgc3VtICU9IEhBU0hTSVpFOwkJCS8qIHRha2Ugc3VtIG1vZCBo YXNoc2l6ZSAqLworICAgIGlmIChzdW0gPCAwKSBzdW0gKz0gSEFTSFNJWkU7CS8qIGRpc2FsbG93 IG5lZ2F0aXZlIGhhc2ggdmFsdWUgKi8KKyAgICByZXR1cm4oc3VtKTsKK30KKworLyoKKyAqIG1h a2UgYSBwcml2YXRlIGNvcHkgb2YgYSBzdHJpbmcuLi4KKyAqCisgKi8KK3N0YXRpYyBjaGFyKgor Y29weShzKSBjaGFyICpzOyB7CisgICAgY2hhciAqbmV3OworICAgIG5ldyA9IChjaGFyICopIG1h bGxvYygoaW50KXN0cmxlbihzKSArIDEpOworICAgIHN0cmNweShuZXcscyk7CisgICAgcmV0dXJu KG5ldyk7Cit9CisKKy8qCisgKiBlbnRlciBzdGF0ZSBuYW1lIGludG8gdGhlIGhhc2ggdGFibGUK KyAqCisgKi8KK1ZPSUQKK2VudGVyKG5hbWUsc3ZhbHVlKSBjaGFyICpuYW1lOyBpbnQgc3ZhbHVl OyB7CisgICAgaW50IGg7CisgICAgc3RydWN0IHN5bSAqY3VyOworICAgIGlmIChsa3VwKG5hbWUp ICE9IC0xKSB7CisJZnByaW50ZihzdGRlcnIsInN0YXRlIFwiJXNcIiBhcHBlYXJzIHR3aWNlLi4u XG4iLCBuYW1lKTsKKwlleGl0KEJBRF9FWElUKTsKKyAgICB9CisgICAgaCA9IGhhc2gobmFtZSk7 CisgICAgY3VyID0gKHN0cnVjdCBzeW0gKiltYWxsb2Moc2l6ZW9mIChzdHJ1Y3Qgc3ltKSk7Cisg ICAgY3VyLT5uYW1lID0gY29weShuYW1lKTsKKyAgICBjdXItPnZhbCA9IHN2YWx1ZTsKKyAgICBj dXItPmhueHQgPSBodGFiW2hdOworICAgIGh0YWJbaF0gPSBjdXI7Cit9CisKKy8qCisgKiBmaW5k IG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgcmV0dXJuIGl0cyB2YWx1ZS4gIFJldHVybnMgLTEK KyAqIGlmIG5vdCBmb3VuZC4KKyAqCisgKi8KK2ludAorbGt1cChuYW1lKSBjaGFyICpuYW1lOyB7 CisgICAgc3RydWN0IHN5bSAqY3VyOworICAgIGZvciAoY3VyID0gaHRhYltoYXNoKG5hbWUpXTsg Y3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+aG54dCkKKyAgICAgIGlmIChzdHJjbXAoY3VyLT5uYW1l LG5hbWUpID09IDApIHJldHVybihjdXItPnZhbCk7CisgICAgcmV0dXJuKC0xKTsKK30KCmRpZmYg LS1naXQgYS9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05LjAuMzAyL21ha2VmaWxlIGIv Y2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9tYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWZlMjYyCi0tLSAvZGV2L251bGwKKysrIGIvY2tl cm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9tYWtlZmlsZQpAQCAtMCwwICsxLDg2 MjYgQEAKKyMgbWFrZWZpbGUgLyBNYWtlZmlsZSAvIGNrdWtlci5tYWsgLyBDS1VLRVIuTUFLCisj CisjIFN1biBBdWcgMjEgMTA6MzM6MDggMjAxMQorQlVJTERJRD0yMDExMDgyMQorQ0tWRVI9ICI5 LjAuMzAyIgorIworIyAtLSBNYWtlZmlsZSB0byBidWlsZCBDLUtlcm1pdCBmb3IgVU5JWCBhbmQg VU5JWC1saWtlIHBsYXRmb3JtcyAtLQorIworIyBDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMTEsCisj ICAgVHJ1c3RlZXMgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBpbiB0aGUgQ2l0eSBvZiBOZXcgWW9y ay4KKyMgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgU2VlIHRoZSBDLUtlcm1pdCBDT1BZSU5HLlRY VCBmaWxlIG9yIHRoZQorIyAgIGNvcHlyaWdodCB0ZXh0IGluIHRoZSBja2NtYWkuYyBtb2R1bGUg Zm9yIGRpc2NsYWltZXIgYW5kIHBlcm1pc3Npb25zLgorIyAgIEluIGNhc2UgeW91IGNhbid0IGZp bmQgdGhlIENPUFlJTkcuVFhUIGZpbGUsIGl0IGNvbnRhaW5zIHRoZSAKKyMgICBTaW1wbGlmaWVk IDMtQ2xhdXNlIEJTRCBMaWNlbnNlLCB3aGljaCBpcyBhbiBPcGVuIFNvdXJjZSBsaWNlbnNlLgor IworIyBBdXRob3I6IEZyYW5rIGRhIENydXosIENvbHVtYmlhIFVuaXZlcnNpdHkKKyMgNjEyIFdl c3QgMTE1dGggU3RyZWV0LCBOZXcgWW9yayBOWSAxMDAyNS03Nzk5LCBVU0EKKyMgRW1haWw6IGZk Y0Bjb2x1bWJpYS5lZHUKKyMgV2ViOiAgIGh0dHA6Ly9rZXJtaXQuY29sdW1iaWEuZWR1LworIyBG VFA6ICAgZnRwOi8va2VybWl0LmNvbHVtYmlhLmVkdS9rZXJtaXQvCisjCisjIE5vdGU6IEF1dGhv ciBpcyBubyBsb25nZXIgYXQgQ29sdW1iaWEgVW5pdmVyc2l0eSBvciBhdCB0aGUgMTE1dGggU3Ry ZWV0CisjIGFkZHJlc3MgZWZmZWN0aXZlIDEgSnVseSAyMDExLiAgVGhlIGVtYWlsIGFkZHJlc3Mg c2hvdWxkIHN0aWxsIHdvcmssCisjIGFzIHdlbGwgYXMgdGhlIHdlYnNpdGUgYW5kIEZUUCBhZGRy ZXNzZXMsIGZvciB0aGUgZm9yZXNlZWFibGUgZnV0dXJlLgorIyBGb3IgbmV3IGRldmVsb3BtZW50 cywgYWxzbyBjaGVjazoKKyMKKyMgICAgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUvfmZkYy9rZXJt aXQvCisjCisjIENvbnRyaWJ1dGlvbnMgZnJvbSBtYW55IG90aGVycy4gIFNwZWNpYWwgdGhhbmtz IHRvIEplZmYgQWx0bWFuIGZvciB0aGUKKyMgc2VjdXJlLWJ1aWxkIHRhcmdldHMsIFBldGVyIEVp Y2hob3JuLCBhc3N5c3QgR21iSCwgZm9yIHRoZSBjb25zb2xpZGF0ZWQKKyMgSFAtVVggdGFyZ2V0 cyBhbmQgdGhlICJ1bmluc3RhbGwiIHRhcmdldCwgdG8gUm9iZXJ0IExpcGUgZm9yIHRoZSB1cGRh dGVkCisjIGFuZCBjb25zb2xpZGF0ZWQgU0NPIFVOSVggLyBPRFQgLyBPU1I1IHRhcmdldHMsIHRv IFJpYyBBbmRlcnNvbiBmb3IgdGhlCisjIElSSVggNi54IHRhcmdldHMsIHRvIFNldGggVGhlcmlh dWx0IGZvciBtYWpvciBpbXByb3ZlbWVudHMgdG8gdGhlCisjIE1hYyBPUyBYIHRhcmdldHMsIGFu ZCB0byBBbGV4ZXkgRG9rdWNoYWV2IGZvciBGcmVlQlNEIDkuMC4KKyMKKyMgQy1LZXJtaXQgaXMg d3JpdHRlbiBhbmQgcHJvZHVjZWQgYnkgaGFuZCB3aXRob3V0IGFueSBhdXRvbWF0ZWQgcHJvY2Vk dXJlcworIyBzdWNoIGFzIGF1dG9jb25mIC8gYXV0b21ha2UgLyBjb25maWd1cmUsIGFsdGhvdWdo IHNvbWUgb2YgdGhlIHRhcmdldHMgYmVsb3cKKyMgKGVzcGVjaWFsbHkgdGhlIGxpbnV4IHRhcmdl dCkgaW5zcGVjdCB0aGUgZW52aXJvbm1lbnQgYW5kIG1ha2Ugc29tZQorIyBkZWNpc2lvbnMgaW4g dGhlIG1vc3QgcG9ydGFibGUgd2F5IHBvc3NpYmxlLiBUaGUgYXV0b21hdGVkIHRvb2xzIGFyZSBu b3QKKyMgdXNlZCBiZWNhdXNlIChhKSBDLUtlcm1pdCBwcmVkYXRlcyB0aGVtLCBhbmQgKGIpIHRo ZXkgYXJlIG5vdCBwb3J0YWJsZSB0bworIyBhbGwgdGhlIHBsYXRmb3JtcyB3aGVyZSBDLUtlcm1p dCBtdXN0IGJlIChvciBvbmNlIHdhcykgYnVpbHQsIGFuZCAoYykgdG8KKyMga2VlcCBDLUtlcm1p dCBhcyBpbmRlcGVuZGVudCBhcyBwb3NzaWJsZSBmcm9tIGV4dGVybmFsIHRvb2xzIG92ZXIgd2hp Y2gKKyMgd2UgaGF2ZSBubyBjb250cm9sLgorIworIyBNb3N0IGVudHJpZXMgdXNlIHRoZSAieGVy bWl0IiB0YXJnZXQsIHdoaWNoIHVzZXMgdGhlIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QKKyMgbW9k dWxlLCBja3VjbnMuYy4gIFRoZSAid2VybWl0IiB0YXJnZXQgdXNlcyB0aGUgb3JpZ2luYWwgZm9y aygpLWJhc2VkIENPTk5FQ1QKKyMgbW9kdWxlLCBja3Vjb24uYywgd2hpY2ggaGFzIHNvbWUgZHJh d2JhY2tzIGJ1dCB3YXMgcG9ydGFibGUgdG8gZXZlcnkgVW5peAorIyB2YXJpYW50IHdoZXRoZXIg aXQgaGFkIFRDUC9JUCBvciBub3QgKHNlbGVjdCgpIGlzIHBhcnQgb2YgdGhlIFRDUC9JUAorIyBs aWJyYXJ5LCB3aGljaCB3YXMgbm90IHN0YW5kYXJkIG9uIG9sZGVyIFVuaXhlcykuICBJZiB5b3Vy IHRhcmdldCBzdGlsbCB1c2VzCisjIHRoZSAid2VybWl0IiB0YXJnZXQsIHBsZWFzZSB0cnkgc3Vi c3RpdHV0aW5nIHRoZSAieGVybWl0IiBvbmUgYW5kIGlmIGl0CisjIHdvcmtzLCBsZXQgdXMga25v dyAobWFpbHRvOmtlcm1pdC1zdXBwb3J0QGNvbHVtYmlhLmVkdSkuICBXaGVuIGNoYW5naW5nIGEK KyMgdGFyZ2V0IG92ZXIgZnJvbSB3ZXJtaXQgdG8geGVybWl0LCBhbHNvIHJlbW92ZSAtRE5PTE9F QVJOLgorIworIyBDQVJFRlVMOiBEb24ndCBwdXQgdGhlIGxvd2VyY2FzZSB3b3JkICJpZiIsICJk ZWZpbmUiLCBvciAiZW5kIiBhcyB0aGUgZmlyc3QKKyMgd29yZCBhZnRlciB0aGUgIiMiIGNvbW1l bnQgaW50cm9kdWNlciBpbiB0aGUgbWFrZWZpbGUsIGV2ZW4gaWYgaXQgaXMKKyMgc2VwYXJhdGVk IGJ5IHdoaXRlc3BhY2UuICBTb21lIHZlcnNpb25zIG9mICJtYWtlIiB1bmRlcnN0YW5kIHRoZXNl IGFzCisjIGRpcmVjdGl2ZXMuICBVcHBlcmNhc2UgbGV0dGVycyByZW1vdmUgdGhlIGRhbmdlciwg ZS5nLiAiIyBJZiB5b3UgaGF2ZS4uLiIKKyMgCisjIFdBUk5JTkc6IFRoaXMgaXMgYSBodWdlIG1h a2VmaWxlLiAgQWx0aG91Z2ggdGhpcyBpcyBsZXNzIGxpa2VseSBzaW5jZSB0aGUKKyMgdHVybiBv ZiB0aGUgY2VudHVyeSwgc29tZSAibWFrZSIgcHJvZ3JhbXMgbWlnaHQgcnVuIG91dCBvZiBtZW1v cnkuICBJZiB0aGlzCisjIGhhcHBlbnMgdG8geW91LCBlZGl0IGF3YXkgdGhlIHBhcnRzIHRoYXQg ZG8gbm90IGFwcGx5IHRvIHlvdXIgcGxhdGZvcm0gYW5kCisjIHRyeSBhZ2Fpbi4KKyMKKyMgV0FS TklORyAyOiBJbiBtYW55IGNhc2VzIHRoaXMgZmlsZSBpbnZva2VzIGl0c2VsZiByZWN1cnNpdmVs eSwgc29tZXRpbWVzCisjIHNldmVyYWwgbGV2ZWxzIGRlZXAgKGFzIGluIHRoZSBMaW51eCB0YXJn ZXRzKTsgaS5lLiBzb21lIHRhcmdldHMgYXJlIHVzZWQKKyMgYXMgJ3N1YnJvdXRpbmVzJyBvZiBv dGhlciB0YXJnZXRzLCB3aXRoIHBhcmFtZXRlcnMgcGFzc2VkIGJ5IHNldHRpbmcKKyMgZW52aXJv bm1lbnQgdmFyaWFibGVzLiAgRm9yIHRoYXQgcmVhc29uLCBkb24ndCB1c2UgJ21ha2UgLWUnLgor IworIyBDZXJ0YWluIFVOSVggdmFyaWF0aW9ucyBoYXZlIHRoZWlyIG93biBzZXBhcmF0ZSBtYWtl ZmlsZXM6CisjICAuIEZvciAyLjEwIG9yIDIuMTEgQlNEIG9uIHRoZSBERUMgUERQLTExLCB1c2Ug Y2t1YnMyLm1hay4KKyMgIC4gRm9yIFBsYW4gOSwgdXNlIGNrcGtlci5tay4KKyMKKyMgU2VwYXJh dGUgYnVpbGQgcHJvY2VkdXJlcyBhcmUgcHJvdmlkZWQgbm9uLVVOSVggcGxhdGZvcm1zOiBWTVMs IFZPUywKKyMgQU9TL1ZTLCBldGMuICBTZWUgdGhlIGNrYWFhYS50eHQgZmlsZSBvciB0aGUgS2Vy bWl0IHdlYnNpdGUgZm9yIGRldGFpbHMuCisjCisjCisjIERJUkVDVElPTlMgRk9SIFVOSVgKKyMK KyMgUmVuYW1lIHRoaXMgZmlsZSB0byAibWFrZWZpbGUiIG9yICJNYWtlZmlsZSIgaWYgbmVjZXNz YXJ5LiAgUGljayBvdXQgdGhlCisjIGVudHJ5IG1vc3QgYXBwcm9wcmlhdGUgZm9yIHlvdXIgVU5J WCB2ZXJzaW9uIGZyb20gdGhlIGxpc3QgYmVsb3cgYW5kIHRoZW4KKyMgZ2l2ZSB0aGUgYXBwcm9w cmlhdGUgIm1ha2UiIGNvbW1hbmQsIGZvciBleGFtcGxlICJtYWtlIGFpeCIsICJtYWtlIG1hY29z eCIsCisjICJtYWtlIGxpbnV4Ii4gIElmIHlvdSBleHBlcmllbmNlIGFueSBkaWZmaWN1bHRpZXMg d2l0aCB0aGUgYnVpbGQgcHJvY2VkdXJlLAorIyB0aGVuIHBsZWFzZSBhbHNvIHJlYWQgYW55IGNv bW1lbnRzIHRoYXQgYWNjb21wYW55IHRoZSBtYWtlIGVudHJ5IGl0c2VsZgorIyAoc2VhcmNoIGZv ciB0aGUgbWFrZSBlbnRyeSBuYW1lIG9uIHRoZSBsZWZ0IG1hcmdpbikuCisjCisjIE90aGVyIHRh cmdldHM6CisjICAnbWFrZSBpbnN0YWxsJyBpcyBhbiBpbnN0YWxsYXRpb24gc2NyaXB0IChyZWFk IGFjY29tcGFueWluZyBjb21tZW50cyEpLgorIyAgJ21ha2UgdW5pbnN0YWxsJyB1bmRvZXMgJ21h a2UgaW5zdGFsbCcgKHJlYWQgYWNjb21wYW55aW5nIGNvbW1lbnRzISkuCisjICAnbWFrZSBjbGVh bicgcmVtb3ZlcyBpbnRlcm1lZGlhdGUgYW5kIG9iamVjdCBmaWxlcy4KKyMgICdtYWtlIHNob3cn IHRlbGxzIHRoZSBkZWZhdWx0IGluY2x1ZGUgYW5kIGxpYiBwYXRocyBmb3Igc2VjdXJlIGJ1aWxk cy4KKyMKKyMgSU1QT1JUQU5UOgorIyAgIEZvciBtb3JlIGRldGFpbGVkIGluc3RhbGxhdGlvbiBp bnN0cnVjdGlvbnMsIHJlYWQgdGhlIGZpbGVzIGNrdWlucy50eHQKKyMgICBhbmQgY2tjY2ZnLnR4 dCwgYWxzbyBhdmFpbGFibGUgYXQgdGhlIEtlcm1pdCB3ZWJzaXRlIGluIEhUTUwgZm9ybToKKyMg ICBodHRwOi8vd3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2t1aW5zLmh0bWwKKyMgICBodHRwOi8v d3d3LmNvbHVtYmlhLmVkdS9rZXJtaXQvY2tjY2ZnLmh0bWwKKyMKKyMgIEZvciBkZXNjcmlwdGlv bnMgb2Yga25vd24gcHJvYmxlbXMgYW5kIGxpbWl0YXRpb25zLAorIyAgIHJlYWQgdGhlIGZpbGVz IGNrY2J3ci50eHQgYW5kIGNrdWJ3ci50eHQgKHRoZSAiYmV3YXJlIGZpbGVzIikgb3I6CisjICAg aHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrY2J3ci5odG1sCisjICAgaHR0cDovL3d3 dy5jb2x1bWJpYS5lZHUva2VybWl0L2NrdWJ3ci5odG1sCisjCisjIE1vc3QgdGFyZ2V0cyBidWls ZCBDLUtlcm1pdCB3aXRoIGl0cyBzeW1ib2wgdGFibGUgaW5jbHVkZWQuICBUbyByZWR1Y2UgdGhl CisjIHNpemUgb2YgdGhlIGV4ZWN1dGFibGUgcHJvZ3JhbSwgYWRkICJMTktGTEFHUz0tcyIgdG8g dGhlIGVuZCBvZiB5b3VyICdtYWtlJworIyBjb21tYW5kIG9yIHRvIHRoZSBtYWtlZmlsZSBlbnRy eSwgb3IgJ3N0cmlwJyB0aGUgZXhlY3V0YWJsZSBhZnRlcgorIyBidWlsZGluZy4gIFRvIGZ1cnRo ZXIgcmVkdWNlIHRoZSBzaXplIGFmdGVyIGJ1aWxkaW5nLCB1c2UgJ21jcyAtZCcgaWYgeW91cgor IyBVbml4IHZlcnNpb24gaGFzIHN1Y2ggYSBjb21tYW5kLiAgRm9yIGZ1cnRoZXIgZGV0YWlscyBv biBzaXplIHJlZHVjdGlvbiwgcmVhZAorIyBja2NjZmcudHh0IHRvIGZpbmQgb3V0IGhvdyB0byBy ZW1vdmUgZmVhdHVyZXMgdGhhdCB5b3UgZG9uJ3QgbmVlZC4KKyMKKyMgVENQL0lQIG5ldHdvcmtp bmcgc3VwcG9ydDogSWYgeW91ciBDLUtlcm1pdCB2ZXJzaW9uIGRvZXMgbm90IGluY2x1ZGUgVENQ L0lQCisjIG5ldHdvcmtpbmcsIGJ1dCB5b3VyIFVOSVggc3lzdGVtIGRvZXMsIHRyeSBhZGRpbmcg LURUQ1BTT0NLRVQgdG8gdGhlIENGTEFHUworIyBvZiB5b3VyIG1ha2VmaWxlIGVudHJ5LiAgSWYg dGhhdCBkb2Vzbid0IHdvcmssIGxvb2sgYXQgc29tZSBvZiB0aGUgb3RoZXIKKyMgdGFyZ2V0cyB0 aGF0IGluY2x1ZGUgdGhpcyBmbGFnIGZvciBpZGVhcyBhYm91dCB3aGF0IGxpYnJhcmllcyBtaWdo dCBuZWVkIHRvCisjIGJlIGluY2x1ZGVkICh0eXBpY2FsbHkgLWxzb2NrZXQgYW5kL29yIC1sQlNE IGFuZC9vciAtbG5zbCBhbmQvb3IgLWxpbmV0KS4KKyMgTk9URTogSW4gc29tZSBjYXNlcyAob2xk IHZlcnNpb25zIG9mIFNDTyBvciBIUC1VWCksIHlvdSBtaWdodCBuZWVkIG5vdCBvbmx5CisjIGEg QyBjb21waWxlciwgYnV0IGFsc28gYSAiVENQL0lQIGRldmVsb3BlcnMga2l0IiBmb3IgdGhlIHJl cXVpcmVkIG9iamVjdAorIyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy4KKyMKKyMgUGxlYXNl IHJlcG9ydCBtb2RpZmljYXRpb25zLCBmYWlsdXJlcyAocHJlZmVyYWJseSB3aXRoIGZpeGVzKSBv ciBzdWNjZXNzZXMKKyMgdG8gdGhlIGF1dGhvciwgZmRjQGNvbHVtYmlhLmVkdS4KKyMKKyMgVEFS R0VUUyBGT1IgRElGRkVSRU5UIFVOSVggUExBVEZPUk1TIEFORCBWRVJTSU9OUzoKKyMKKyMgKyBN YXJrcyB0aG9zZSB0aGF0IGhhdmUgYmVlbiBidWlsdCBzdWNjZXNzZnVsbHkgZm9yIEMtS2VybWl0 IDkuMCBvciBsYXRlci4KKyMgLSBUaG9zZSB0aGF0IG9uY2UgYnVpbHQgT0sgYnV0IG5vIGxvbmdl ciBkbyAoZS5nLiB0b28gYmlnKS4KKyMgPyBUaG9zZSB0aGF0IHdvcmtlZCBpbiBhIHByZXZpb3Vz IHZlcnNpb24gYnV0IGhhdmUgbm90IGJlZW4gdGVzdGVkIHJlY2VudGx5LgorIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIyBTb21lIGNvbW1vbmx5IHVzZWQgdGFyZ2V0czoKKyMKKyMgKyAi bWFrZSBsaW51eCIgc2hvdWxkIHdvcmsgZm9yIGFueSB2ZXJzaW9uIG9mIExpbnV4IG9uIGFueSBo YXJkd2FyZS4KKyMgKyAibWFrZSBsaW51eCtzc2wiIGRpdHRvLCB3aXRoIE9wZW5TU0wgc2VjdXJp dHkgYWRkZWQuCisjICsgIm1ha2UgbGludXgra3JiNSIgZGl0dG8sIHdpdGggS2VyYmVyb3MgNSBz ZWN1cml0eSBhZGRlZC4KKyMgKyAibWFrZSBsaW51eCtrcmI1K3NzbCIgTGludXggd2l0aCBPcGVu U1NMIGFuZCBLZXJiZXJvcyA1LgorIyArICJtYWtlIG5ldGJzZCIsIE5ldEJTRCwgYW55IHZlcnNp b24uCisjICsgIm1ha2UgbmV0YnNkK3NzbCIsIE5ldEJTRCB3aXRoIE9wZW5TU0wgMC45Ljcgb3Ig bGF0ZXIuCisjICsgIm1ha2UgbmV0YnNkK2tyYjUiLCBOZXRCU0Qgd2l0aCBLZXJiZXJvcyA1Lgor IyArICJtYWtlIG5ldGJzZCtrcmI1K3NzbCIsIE5ldEJTRCB3aXRoIEtlcmJlcm9zIDUgYW5kIE9w ZW5TU0wgMC45Ljcgb3IgbGF0ZXIuCisjID8gIm1ha2UgZnJlZWJzZDEiIGZvciBGcmVlQlNEIDEu eAorIyA/ICJtYWtlIGZyZWVic2QyIiBmb3IgRnJlZUJTRCAyLngKKyMgKyAibWFrZSBmcmVlYnNk MyIgZm9yIEZyZWVCU0QgMy54CisjID8gIm1ha2UgZnJlZWJzZDQiIGZvciBGcmVlQlNEIDQuMAor IyArICJtYWtlIGZyZWVic2QiLCBGcmVlQlNEIDQuMSBvciBsYXRlci4KKyMgKyAibWFrZSBmcmVl YnNkK3NzbCIsIEZyZWVCU0QgNS4wIG9yIGxhdGVyIHdpdGggT3BlblNTTCAwLjkuNyBvciBsYXRl ci4KKyMgKyAibWFrZSBvcGVuYnNkIiwgT3BlbkJTRCAyLjMgb3IgbGF0ZXIuCisjICsgIm1ha2Ug b3BlbmJzZCtzc2wiLCBPcGVuQlNEIDIuMyBvciBsYXRlciB3aXRoIE9wZW5TU0wgMC45Ljcgb3Ig bGF0ZXIuCisjICsgIm1ha2UgbWlyYnNkIiwgTWlyQlNELgorIyArICJtYWtlIG1pcmJzZCtzc2wi LCBNaXJCU0Qgd2l0aCBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLgorIyArICJtYWtlIG1hY29zeCIg c2hvdWxkIHdvcmsgZm9yIGFueSBNYWMgT1MgWCB2ZXJzaW9uIDEwLjMuOSBvciBsYXRlci4KKyMg KyAibWFrZSBtYWNvc3gra3JiNStvcGVuc3NsIiBNYWMgT1MgWCAxMC4zLjkgb3IgbGF0ZXIgKyBL ZXJiZXJvcyBWICsgT3BlblNTTC4KKyMgKyAibWFrZSBhaXgiIHNob3VsZCB3b3JrIGZvciBhbnkg dmVyc2lvbiBvZiBBSVggNC4yIG9yIGxhdGVyLgorIyArICJtYWtlIGFpeGciIHNob3VsZCB3b3Jr IGZvciBhbnkgdmVyc2lvbiBvZiBBSVggNC4yIG9yIGxhdGVyLCB1c2luZyBnY2MuCisjICsgIm1h a2UgYWl4K3NzbCIgZGl0dG8sIHdpdGggT3BlblNTTCAoc3BlY2lmeWluZyBTU0xMSUIgYW5kIFNT TElOQykKKyMgKyAibWFrZSBhaXgraWJtc3NsIiBkaXR0bywgd2l0aCBJQk0gT3BlblNTTAorIyAr ICJtYWtlIHNvbGFyaXM5IiwgIm1ha2Ugc29sYXJpczEwIiBmb3IgU29sYXJpcyA5IG9yIDEwIHdp dGggU3VuIGNjLgorIyArICJtYWtlIHNvbGFyaXM5ZyIsICJtYWtlIHNvbGFyaXMxMGciIGZvciBT b2xhcmlzIDkgb3IgMTAgd2l0aCBnY2MuCisjICsgIm1ha2Ugc29sYXJpczExIiBmb3IgU29sYXJp cyAxMSB3aXRoIFN1biBDQworIyArICJtYWtlIHNvbGFyaXMxMWciIGZvciBTb2xhcmlzIDExIHdp dGggZ2NjCisjICsgIm1ha2Ugc2NvX29zcjYwMCIgZm9yIFNDTyBPcGVuU2VydmVyIDYuMC4wLgor IworIyBGb3Igb3RoZXIgY3VycmVudCBPU3Mgc3VjaCBhcyBTb2xhcmlzLCBIUC1VWCwgYW5kIFND TyB0aGVyZSBhcmUgc2VwYXJhdGUKKyMgdGFyZ2V0cyBmb3IgZGlmZmVyZW50IGNvbWJpbmF0aW9u cyBvZiBPUyB2ZXJzaW9uIGFuZCBjb21waWxlcjsgc2VlIHRoZQorIyBjb21wbGV0ZSBsaXN0LiAg Rm9yIG9sZGVyIE9TJ3Mgc2VlIHRoZSBjb21wbGV0ZSBsaXN0LiAgSWYgYW4gb2xkIHRhcmdldAor IyBkb2Vzbid0IHdvcmsgaW4gdGhpcyByZWxlYXNlIG9mIEMtS2VybWl0IHlvdSBjYW4gZ2V0IGEg cHJldmlvdXMgcmVsZWFzZSBmcm9tCisjIHRoZSBLZXJtaXQgRlRQIHNpdGU6IGZ0cDovL2tlcm1p dC5jb2x1bWJpYS5lZHUva2VybWl0LworIworIyBTRUNVUkUgVEFSR0VUUyAodmVyc2lvbnMgdGhh dCBzdXBwb3J0IGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uKQorIyAgYXJlIGRlc2NyaWJl ZCBhZnRlciB0aGUgZm9sbG93aW5nIGxpc3QuICBTZWFyY2ggZm9yICoqKioqKiogYmVsb3cuCisj CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBsZXRlIGxpc3QgKGFscGhhYmV0 aWNhbCk6CisjID8gZm9yIDM4NkJTRCAoSm9saXgpIDAuMCwgMC4xLCAibWFrZSAzODZic2QiIChz ZWUgY29tbWVudHMgaW4gZW50cnkpLAorIyAgICAgb3IgKHByZWZlcmFibHksIGlmIGl0IHdvcmtz KSAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIi4KKyMgPyBmb3IgQWNvcm4gUklTQ2lYLCAi bWFrZSByaXNjaXgiIG9yICJtYWtlIHJpc2NpeC1nY2MiCisjID8gZm9yIEFsbGlhbnQgRlgvOCB3 aXRoIENvbmNlbnRyaXggNC4xIG9yIGxhdGVyLCAibWFrZSBic2RsY2siCisjID8gZm9yIEFsdG9z IDQ4NiwgNTg2LCA5ODYgd2l0aCBYZW5peCAzLjAsICJtYWtlIGFsdG9zIgorIyA/IGZvciBBbHRv cyBBQ1M2ODAwMCwgOE1oeiA2ODAwMCwgVU5JWCBTeXN0ZW0gMyBSZWwgMiwgNTEySywgIm1ha2Ug YWx0b3MzIgorIyA/IGZvciBBbWRhaGwgVVRTIDIuNCBvbiBJQk0gMzcwIHNlcmllcyAmIGNvbXBh dGlibGUgbWFpbmZyYW1lcywgIm1ha2UgdXRzMjQiCisjID8gZm9yIEFtZGFobCBVVFNWIElCTSAz NzAgc2VyaWVzICYgY29tcGF0aWJsZSBtYWluZnJhbWVzLCAibWFrZSB1dHN2IgorIyA/IGZvciBB bWRhaGwgVVRTViBJQk0gMzcwIHNlcmllcyBtYWluZnJhbWVzIHdpdGggVENQL0lQLCAibWFrZSB1 dHN2dGNwIgorIyA/IGZvciBBbWRhaGwgbWFpbmZyYW1lcyB3aXRoIFVOSVggU3lzdGVtIFYgUiA1 LjIuNmIgNTgwLCAibWFrZSBzeXMzIgorIyA/IGZvciBBcG9sbG8gQWVnaXMgOS54LCBET01BSU4v SVggOS54LCAibWFrZSBhZWdpcyIKKyMgICAgKExhc3QgdGVzdGVkIGluIEMtS2VybWl0IDVBKDE4 OSkpCisjID8gZm9yIEFwb2xsbyBET01BSU4vSVgsIGlmIHRoZSBhYm92ZSBmYWlscywgdHJ5ICJt YWtlIGFwb2xsb2JzZCIKKyMgPyBmb3IgQXBvbGxvIHdpdGggU1IxMC4wIG9yIGxhdGVyLCBCU0Qg ZW52aXJvbm1lbnQsICJtYWtlIHNyMTAtYnNkIgorIyA/IGZvciBBcG9sbG8gd2l0aCBTUjEwLjAg b3IgbGF0ZXIsIFN5c3RlbSBWIGVudmlyb25tZW50LCAibWFrZSBzcjEwLXM1cjMiCisjID8gZm9y IEFwcGxlIE1hY2ludG9zaCBJSSB3aXRoIEEvVVggcHJlLTMuMCwgIm1ha2UgYXV4IiwgImF1eGdj YyIgb3IgImF1eHVmcyIKKyMgPyBmb3IgQXBwbGUgTWFjaW50b3NoIHdpdGggQS9VWCAzLjAgYW5k IGdjYywgIm1ha2UgYXV4M2djYyIgb3IgYXV4M2djY2MKKyMgPyBmb3IgQXBwbGUgUG93ZXJNYWMg d2l0aCBNa0xpbnV4LCAibWFrZSBta2xpbnV4IiAocmVhZCBMaW51eCBlbnRyeSBmaXJzdCkKKyMg PyBmb3IgQXBwbGUgUG93ZXJNYWMgd2l0aCBMaW51eFBQQywgIm1ha2UgbGludXhwcGMiCisjID8g Zm9yIEFwcGxlIE1hY2ludG9zaCB3aXRoIE1pbml4IDEuNS4xMCwgIm1ha2UgbWluaXg2OGsiIG9y ICJtYWtlIG1pbml4YzY4IgorIyA/IGZvciBBcHBsZSBNYWNpbnRvc2ggd2l0aCBNYWMgT1MgWCAx LjAgKFJoYXBzb2R5KSwgIm1ha2UgbWFjb3N4MTAiCisjICAgICAobm8gY3Vyc2VzKSwgIm1ha2Ug bWFjb3N4MTBjIiAoY3Vyc2VzKSwgb3IgIm1ha2UgbWFjb3N4MTBuYyIgKG5jdXJzZXMpLgorIyAg ICAgT3IgIm1ha2UgbWFjb3N4MTBuY3giIChuY3Vyc2VzIGJ1dCAibWFrZSBtYWNvc3gxMG5jIiBk b2Vzbid0IHdvcmspLgorIyA/IGZvciBBcHBsZSBNYWNpbnRvc2ggd2l0aCBNYWMgT1MgWCAxMC4y LCAibWFrZSBtYWNvc3gxMDJuYyIgKG5jdXJzZXMpLgorIyA/IGZvciBBcHBsZSBNYWNpbnRvc2gg d2l0aCBNYWMgT1MgWCAxMC4zLCAibWFrZSBtYWNvc3gxMDMiCisjID8gZm9yIEFwcGxlIE1hY2lu dG9zaCB3aXRoIE1hYyBPUyBYIDEwLjMuOSBvciBsYXRlciwgIm1ha2UgbWFjb3N4IgorIyA/IGZv ciBBcml4IFN5c3RlbSA5MCB3aXRoIEFUJlQgU1ZSMywgIm1ha2Ugc3lzNXIzbmEiCisjIC0gZm9y IEFUJlQgNjMwMCB3aXRoIElOL2l4LCAibWFrZSBzeXM1IgorIyAtIGZvciBBVCZUIDYzMDAgUExV UywgIm1ha2UgYXR0NjMwMCIgb3IgKHdpdGggbm8gZGVidWdnaW5nKSAibWFrZSBhdHQ2MzAwbmQi CisjID8gZm9yIEFUJlQgNjM4NiBXR1MgVU5JWCBQQywgIm1ha2Ugc3lzNXIzIgorIyA/IGZvciBB VCZUIDNCMiwgM0IyMCBzeXN0ZW1zLCAibWFrZSBhdHQzYjIiLgorIyAgIGZvciBBVCZUIDNCMSwg NzMwMCBVTklYIFBDIChzZWUgbm90ZXMgd2l0aCB0aGUgZW50cmllcyk6CisjICAgICBJbiBDLUtl cm1pdCA3LjAsIG9ubHkgdGhlIGdjYyBlbnRyaWVzIHdvcms6CisjID8gICAibWFrZSBzeXMzdXBj ZyIsICJtYWtlIHN5czN1cGNnYyIsICJtYWtlIGF0dDM1MWdtIgorIyAgICBUaGUgb3RoZXJzIGZh aWwgd2l0aCAidG9vIG1hbnkgZGVmaW5lcyIgKHVzdWFsbHkgaW4gY2t1dXNyLmgpOgorIyAtICAg Im1ha2Ugc3lzM3VwYyIsICJtYWtlIHN5czN1cGNvbGQiLCAibWFrZSBzeXMzdXBjYyIsICJtYWtl IHN5czN1cGN4IiwKKyMgICAgICAgIm1ha2Ugc3lzM3VwY20iLCAibWFrZSBhdHQzNTFtIgorIyA/ IGZvciBBVCZUIFN5c3RlbSBJSUkvU3lzdGVtIFYgUjIgb3IgZWFybGllciwgIm1ha2Ugc3lzMyIg b3IgIm1ha2Ugc3lzM25pZCIKKyMgPyBmb3IgQVQmVCBTeXN0ZW0gSUlJL1N5c3RlbSBWIHdpdGgg SG9uZXkgRGFuQmVyIFVVQ1AsICJtYWtlIHN5czNoZGIiCisjID8gZm9yIEFUJlQgU3lzdGVtIFYg b24gREVDIFZBWCwgIm1ha2Ugc3lzMyIgb3IgIm1ha2Ugc3lzNXIzIgorIyA/IGZvciBBVCZUIFN5 c3RlbSBWIFIzLCB1c2UgIm1ha2Ugc3lzNXIzIiBvciAibWFrZSBzeXM1cjNjIgorIyA/IGZvciBB VCZUIFN5c3RlbSBWLzM4NiBSMy4yIGJ1aWx0IG9uIEludGVyYWN0aXZlIDQuMS4xLCAibWFrZSBz eXM1cjMyaXMiLgorIyA/IGZvciBBVCZUIFN5c3RlbSBWLzM4NiBSMzIwLjAgVmVyc3lzcyBTeXN0 ZW1zLCB1c2UgIm1ha2Ugc3lzNXIzIgorIyAgICAgb3IgIm1ha2Ugc3lzNXIzYyIuCisjID8gZm9y IEFUJlQgU3lzdGVtIFYgUjQsICJtYWtlIHN5czVyNCIsICJtYWtlIHN5czVyNHN4Iiwgb3IgIm1h a2Ugc3lzNXI0bngiLAorIyAgICAgb3IgaWYgdGhlIEFOU0kgQyBmdW5jdGlvbiBwcm90b3R5cGlu ZyBtYWtlcyB0cm91YmxlLCBhZGQgLUROT0FOU0ksCisjICAgICBhcyBpbiAic3lzNXI0c3huYSIg ZW50cnkKKyMgPyBmb3IgQVQmVCAoVVNMKSBTeXN0ZW0gViBSNC4yIHVzZSB0aGUgc3lzNXI0KiBl bnRyaWVzLgorIyA/IGZvciBBdGFyaSBGYWxjb24gd2l0aCBNaU5ULCAibWFrZSBwb3NpeCIKKyMg PyBmb3IgQXRhcmkgU1Qgd2l0aCBNaW5peCBTVCAxLjUuMTAuMywgIm1ha2UgbWluaXg2OGsiIG9y ICJtYWtlIG1pbml4YzY4IgorIyA/IGZvciBCQk4gQy83MCB3aXRoIElPUyAyLjAsICJtYWtlIGM3 MCIKKyMgPyBmb3IgQmVCb3ggd2l0aCBCZSBPUyAxLnggRFI3LCAibWFrZSBiZWJveGRyNyIKKyMg ICAgIENvbXBpbGVzIE9LIGJ1dCBkb2Vzbid0IGxpbmsgd2l0aCBkZWZhdWx0IGxpbmtlciB3aGlj aCBpcyBsaW1pdGVkIHRvIDY0Sy4KKyMgICAgIExpbmtzIE9LIHdpdGggIkNvZGUgV2FycmlvciBH b2xkIi4gIE1hbnkgaGFja3MgaW4gdGhlIHNvdXJjZSBjb2RlIG5lZWQKKyMgICAgIHRvIGJlIHJl bW92ZWQgd2hlbiBEUjggYW5kIGxhdGVyIGNvbWUgb3V0LgorIyAgICAgKExhc3QgdGVzdGVkIGlu IEMtS2VybWl0IDYuMCkKKyMgLSBmb3IgQmVCb3ggd2l0aCBCZSBPUyAxLnggRFI4LCAibWFrZSBi ZWJveCIKKyMgICAgIChOZWVkZWQgZnVuY3Rpb25zIG1pc3NpbmcgZnJvbSBvcGVyYXRpbmcgc3lz dGVtIGFuZC9vciBub3Qgd29ya2luZy4pCisjIC0gZm9yIEJlbGwgTGFicyBVTklYIFZlcnNpb24g NiAoNnRoIEVkaXRpb24pLCB0aGVyZSBpcyBubyBtYWtlZmlsZSBlbnRyeS4KKyMgPyBmb3IgQmVs bCBMYWJzIFVOSVggVmVyc2lvbiA3ICg3dGggRWRpdGlvbiksICJtYWtlIHY3IiAoYnV0IHNlZSBu b3RlcyBiZWxvdykKKyMgICAgKGxhc3QgYnVpbHQgc3VjY2Vzc2Z1bGx5IGluIEMtS2VybWl0IDVB MTg4KQorIyA/IGZvciBCZWxsIExhYnMgUmVzZWFyY2ggVU5JWCBWZXJzaW9uIDEwLCAibWFrZSBi ZWxsdjEwIgorIyAgICAobGFzdCBidWlsdCBzdWNjZXNzZnVsbHkgaW4gQy1LZXJtaXQgNi4wKQor IyA/IGZvciBCZWxsIExhYnMgLyBMdWNlbnQgUGxhbiA5LCB1c2Ugc2VwYXJhdGUgbWFrZWZpbGUg Y2twa2VyLm1rOgorIyAgICBjYW4gYmUgYnVpbHQgZm9yIEludGVsLCBNSVBTLCA2ODB4MCwgYW5k IFBvd2VyUEMgKGxhc3QgYnVpbHQgQy1LZXJtaXQgNy4wKQorIyA/IGZvciBCU0RJIEJTRC8zODYg MS54LCAibWFrZSBic2RpIgorIyA/IGZvciBCU0RJIEJTRC9PUyAyLngsICJtYWtlIGJzZGkyIgor IyA/IGZvciBCU0RJIEJTRC9PUyAzLjAgb3IgMy4xLCAibWFrZSBic2RpMyIKKyMgPyBmb3IgQlNE SSBCU0QvT1MgNC54LCAibWFrZSBic2RpNCIKKyMgPyBmb3IgQlNESSBCU0QvT1MgNC54LCB0byBi dWlsZCBhIGJpbmFyeSB0aGF0IGFsc28gd29ya3Mgb24gRnJlZUJTRCwKKyMgICAgICJtYWtlIGJz ZGl4Ii4KKyMgPyBmb3IgQmVya2VsZXkgVW5peCAyLjQsICJtYWtlIHY3IiAoYnV0IHJlYWQgdjcg bWF0ZXJpYWwgYmVsb3cpCisjID8gZm9yIEJlcmtlbGV5IFVuaXggMi45IChERUMgUERQLTExIG9y IFByby0zeHgpLCAibWFrZSBic2QyOSIKKyMgLSBmb3IgQmVya2VsZXkgVW5peCAyLjEwLCB1c2Ug Y2t1YnMyLm1hayAoYSBzZXBhcmF0ZSBtYWtlZmlsZSkKKyMgLSBmb3IgQmVya2VsZXkgVW5peCAy LjExLCB1c2UgY2t1YnMyLm1hayAoYSBzZXBhcmF0ZSBtYWtlZmlsZSkKKyMgICAgIFRoaXMgbWFr ZWZpbGUgaXMgdG9vIGJpZy4gIFJlYWQgdGhlIGluc3RydWN0aW9ucyBpbiBja3ViczIubWFrLgor IyAgICAgIm1ha2UgLWYgY2t1YnMyLm1hayBic2QyMTAiIG9yICJtYWtlIC1mIGNrdWJzMi5tYWsg YnNkMjExIi4KKyMgICAgIChsYXN0IGJ1aWx0IHN1Y2Nlc3NmdWxseSBpbiBDLUtlcm1pdCA2LjAg LSBsYXRlciB2ZXJzaW9ucyB0b28gYmlnKQorIyA/IGZvciBCZXJrZWxleSBVbml4IDIuMTEgIm1h a2UgLWYgY2t1YnMyLm1hayBic2QyMTBub2ljcCIgKG5vIGNvbW1hbmQgcGFyc2VyKQorIyA/IGZv ciBCZXJrZWxleSBVbml4IDQuMSwgIm1ha2UgYnNkNDEiCisjID8gZm9yIEJlcmtlbGV5IFVuaXgg NC4yIG9uIFZBWCwgIm1ha2UgYnNkNDIiIG9yICJtYWtlIGJzZDQyYyIKKyMgPyBmb3IgQmVya2Vs ZXkgVW5peCA0LjIgb3IgNC4zIHdpdGggSG9uZXlEYW5CZXIgVVVDUCwgIm1ha2UgYnNkaGRiIgor IyA/IGZvciBCZXJrZWxleSBVbml4IDQuMyBvbiBWQVgsICJtYWtlIGJzZDQzIiwgIm1ha2UgYnNk NDNuYyIuCisjID8gZm9yIEJlcmtlbGV5IFVuaXggNC4zIG9uIFZBWCwgbm8gbmV0d29ya2luZyAi bWFrZSBic2Q0M25vbmV0LgorIyA/IGZvciBCZXJrZWxleSBVbml4IDQuMyB3aXRob3V0IGFjdWNu dHJsIHByb2dyYW0sICJtYWtlIGJzZDQyIiBvciAiYnNkNDJjIgorIyAgICAgTk9URTogYWxsIHRo ZSBDLUtlcm1pdCA3LjAgZnVsbCBidWlsZHMgZm9yIG9sZCBCU0RzIGZhaWwgd2l0aAorIyAgICAg InRvbyBtYW55IGRlZmluZXMiIGluIENQUCwgZXZlbiBvbiBiaWcgYXJjaGl0ZWN0dXJlcyBsaWtl IFZBWC4gIFRoaXMKKyMgICAgIGNhbiBiZSB3b3JrZWQgYXJvdW5kIHdpdGggYSBjbGV2ZXIgcnVz ZS4gIFNlZSBjb21tZW50cyBhdCB0YXJnZXQuCisjID8gZm9yIEJlcmtlbGV5IFVuaXggNC4zLCBj b21tYW5kLWxpbmUgb25seSwgIm1ha2UgYnNkbSIuCisjID8gZm9yIEJlcmtlbGV5IFVuaXggNC4z LVRhaG9lLCBzYW1lIGFzIDQuMyBCU0QKKyMgPyBmb3IgQmVya2VsZXkgVW5peCA0LjMtUmVubywg Im1ha2UgYnNkNDMiIG9yICJtYWtlIGJzZDQ0IiBvciAibWFrZSBic2Q0NGMiCisjID8gZm9yIEJl cmtlbGV5IFVuaXggNC4zLUNhcnNvbiBDaXR5LCAibWFrZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRj IgorIyA/IGZvciBCZXJrZWxleSBVbml4IDQuNC1OZXR3b3JraW5nLzIgb3IgLUFscGhhLCAibWFr ZSBic2Q0NCIgb3IgIm1ha2UgYnNkNDRjIgorIyA/IGZvciBCZXJrZWxleSBVbml4IDQuNCwgIm1h a2UgYnNkNDQiIG9yICJtYWtlIGJzZDQ0YyIKKyMgPyBmb3IgQmVya2VsZXkgVW5peCA0LjQtTGl0 ZSwgIm1ha2UgYnNkNDQiIG9yICJtYWtlIGJzZDQ0YyIKKyMgPyBmb3IgQnVsbCBEUFgvMiB3aXRo IEJPUy9YLCAibWFrZSBidWxsZHB4MiIKKyMgPyBmb3IgQ2FkbXVzLCAibWFrZSBzeXMzIgorIyAg IGZvciBDYWxkZXJhLCBzZWUgU0NPLCBMaW51eC4KKyMgPyBmb3IgQ2FsbGFuIFVuaXN0YXIsICJt YWtlIHN5czMiCisjID8gZm9yIENEQyBWWC9WRSA1LjIuMSBTeXN0ZW0gViBlbXVsYXRpb24sICJt YWtlIHZ4dmUiCisjID8gZm9yIENoYXJsZXMgUml2ZXIgRGF0YSBTeXN0ZW1zIFVuaXZlcnNlIDY4 MHgwIHdpdGggVU5PUyA5LjIsIG1heWJlCisjICAgICBhbHNvIG90aGVyIFVOT1MgdmVyc2lvbnMs ICJtYWtlIGNyZHMiCisjID8gZm9yIENJRSBTeXN0ZW1zIDY4MC8yMCB3aXRoIFJlZ3VsdXMsICJt YWtlIGNpZSIKKyMgPyBmb3IgQ29tbW9kb3JlIEFtaWdhIDMwMDBVWCBTeXMgViBSNCwgIm1ha2Ug c3lzNXI0c3giCisjID8gZm9yIENvbW1vZG9yZSBBbWlnYSAzMDAwVVggU3lzIFYgUjQgYW5kIFRD UC9JUCwgIm1ha2Ugc3ZyNGFtaWdhbmV0IgorIyA/IGZvciBDb21tb2RvcmUgQW1pZ2Egd2l0aCBN aW5peCAxLjUuMTAsICJtYWtlIG1pbml4NjhrIiBvZiAibWFrZSBtaW5peGM2OCIKKyMgPyBmb3Ig Q29uY3VycmVudC9NYXNzY29tcCB3aXRoIFJUVSA0LjAgb3IgbGF0ZXIsIEJTRCBlbnZpcm9ubWVu dCwgIm1ha2UKKyMgICAgIHJ0dWJzZCIsICJtYWtlIHJ0dWJzZDIiLCAibWFrZSBydHVic2QzIiAo ZGVwZW5kaW5nIG9uIHdoZXJlIG5kaXIuaAorIyAgICAgaXMgc3RvcmVkLCBzZWUgZW50cmllcyBi ZWxvdykuCisjID8gZm9yIENvbmN1cnJlbnQvTWFzc2NvbXAgd2l0aCBSVFUgNC4wIG9yIGxhdGVy LCBTeXN0ZW0gViBSMiwgIm1ha2UgcnR1czUiCisjID8gZm9yIENvbmN1cnJlbnQgKFBlcmtpbi1F bG1lcikgMzIwMCBzZXJpZXMsICJtYWtlIHN5czUiLgorIyA/IGZvciBDb25jdXJyZW50IChQZXJr aW4tRWxtZXIpIDMyMDAgc2VyaWVzIHdpdGggPGRpcmVudC5oPiwgIm1ha2UgY2NvcDEiCisjID8g Zm9yIENvbmN1cnJlbnQgUG93ZXJNQVggT1MgU1ZSNCwgIm1ha2UgcG93ZXJtYXgiCisjID8gZm9y IENvbnNlbnN5cyBVTklYIFNWLzM4NiBSNFYzLCAibWFrZSBzeXM1cjRzeHRjcGMiIG9yICJtYWtl IHN5czVyNHN4IgorIyA/IGZvciBDb252ZXJnZW50IHdpdGggQ1RJWCBTeXMgViBSMiwgIm1ha2Ug c3lzNSIKKyMgPyBmb3IgQ29udmVyZ2VudCB3aXRoIENUSVggNi40LjEsICJtYWtlIGN0aXgiCisj ID8gZm9yIENvbnZleCBDMSwgIm1ha2UgY29udmV4IgorIyA/IGZvciBDb252ZXggQzIxMCB3aXRo IENvbnZleC9PUyA4LCAibWFrZSBjb252ZXg4IgorIyA/IGZvciBDb252ZXggQzIgd2l0aCBDb252 ZXgvT1MgOS4xLCAibWFrZSBjb252ZXg5IgorIyA/IGZvciBDb252ZXggQzIgd2l0aCBDb252ZXgv T1MgMTAuMSBhbmQgZ2NjIDIueCwgIm1ha2UgY29udmV4MTBnY2MiCisjID8gZm9yIENyYXkgUmVz ZWFyY2ggWC9NUCBvciBZTVAgb3IgQzkwIHdpdGggVU5JQ09TIDYueCAoU3lzdGVtIFYgUjMpLAor IwkibWFrZSBjcmF5IgorIyA/IGZvciBDcmF5IFJlc2VhcmNoIFgvTVAgb3IgWU1QIG9yIEM5MCB3 aXRoIFVOSUNPUyA3LnggKFN5c3RlbSBWIFI0KSwKKyMJIm1ha2UgY3JheSIKKyMgPyBmb3IgQ3Jh eSBSZXNlYXJjaCBYL01QIG9yIFlNUCBvciBDOTAgd2l0aCBVTklDT1MgOC4wIEFscGhhLCAibWFr ZSBjcmF5OCIKKyMgPyBmb3IgQ3JheSBSZXNlYXJjaCBYL01QIG9yIFktTVAgb3IgQzkwIHdpdGgg VU5JQ09TIDkuMCwgIm1ha2UgY3JheTkiCisjID8gZm9yIENyYXkgQ29tcHV0ZXIgQ3JheS0yIG9y IENyYXkzIHdpdGggQ1NPUywgIm1ha2UgY3JheWNzb3MiCisjID8gZm9yIEN5YmVyIDkxMCAoU2ls aWNvbi1HcmFwaGljcyBJcmlzKSB3aXRoIElyaXggMy4zLCAiaXJpeDMzIgorIyA/IGZvciBEYXRh IEdlbmVyYWwgQVZpaU9OIHdpdGggREcvVVggNS40IGJlZm9yZSBSMy4wMCwgIm1ha2UgZGd1eDU0 MCIKKyMgICAgIG9yICJtYWtlIGRndXg1NDBjIiAoY29tcGlsZSBja3dhcnQgc2VwYXJhdGVseSBp ZiBuZWNlc3NhcnkpCisjID8gZm9yIERHL1VYIDUuNCBvbiBBVmlpT04gSW50ZWwgbW9kZWxzLCAi bWFrZSBkZ3V4NTQwaSIgb3IgZGd1eDU0MGljLgorIyA/IGZvciBERy9VWCA1LjRSNC4xMSBvbiBB VmlpT04sIGFsbCBtb2RlbHMsICJtYWtlIGRndXg1NDQxMSIKKyMgPyBmb3IgREcvVVggNS40UjQu MjAgb24gQVZpaU9OLCBhbGwgbW9kZWxzLCAibWFrZSBkZ3V4NTQ0MjAiCisjID8gZm9yIERhdGEg R2VuZXJhbCBBVmlpT04gd2l0aCBERy9VWCA0LjN4IHVzaW5nIFN5cyBWLWlzbXMsICJtYWtlIGRn dXg0MzAiCisjID8gZm9yIERhdGEgR2VuZXJhbCBBVmlpT04gd2l0aCBERy9VWCA0LjN4IHVzaW5n IEJTRC1pc21zLCAibWFrZSBkZ3V4NDMwYnNkIgorIyA/IGZvciBEYXRhIEdlbmVyYWwgQVZpaU9O LCBlYXJsaWVyIFVOSVggdmVyc2lvbnMsCisjICAgICAibWFrZSBzeXM1cjMiIChtYXliZSBjb21w aWxlIGNrd2FydCBzZXBhcmF0ZWx5LCBvciAidG91Y2ggY2tjcHJvLmMiKQorIyA/IGZvciBEYXRh IEdlbmVyYWwgTVYgc3lzdGVtcyB3aXRoIERHL1VYLCA/Pz8KKyMgPyBmb3IgRGF0YSBHZW5lcmFs IE1WIHN5c3RlbXMgd2l0aCBNVi9VWCwgdXNlIEFPUy9WUyBDLUtlcm1pdCAoQ0tES0VSLk1BSykK KyMgPyBmb3IgRGF0YSBHZW5lcmFsIE1WIHN5c3RlbXMgd2l0aCBBT1MvVlMsIHVzZSBDS0RLRVIu TUFLIChsYXN0ID0gQy1LIDcuMCkKKyMgPyBmb3IgREVDIFBEUC0xMSB3aXRoIEJlcmtlbGV5IFVO SVggMi54LCBzZWUgQmVya2VsZXkgVU5JWCAyLnguCisjID8gZm9yIERFQyBQRFAtMTEgd2l0aCBN aW5pLVVOSVggKEJlbGwgNnRoIEVkaXRpb24gZm9yIFBEUC0xMSB3aXRoIG5vIE1NVSksCisjICAg ICBwcm9iYWJseSBubyB3YXkgdG8gZml0IEMtS2VybWl0IHdpdGhvdXQgSSZEIHNwYWNlLgorIyA/ IGZvciBERUMgUERQLTExIHdpdGggVWx0cml4LTExIDMueCwgPz8/IChwcm9iYWJseSBuZWVkcyBv dmVybGF5cykKKyMgPyBmb3IgREVDIFZBWCB3aXRoIFVsdHJpeCAxLnggIm1ha2UgYnNkIgorIyA/ IGZvciBERUMgVkFYIHdpdGggVWx0cml4IDIueCAibWFrZSB1bHRyaXgyeCIKKyMgPyBmb3IgREVD IFZBWCBvciBERUNzdGF0aW9uIHdpdGggVWx0cml4IDMuMCwgMy4xLCAibWFrZSB1bHRyaXgzeCIK KyMgPyBmb3IgREVDc3RhdGlvbiBvciBWQVggd2l0aCBVbHRyaXggNC4wIG9yIDQuMSwgIm1ha2Ug dWx0cml4NDAiCisjID8gZm9yIERFQ3N0YXRpb24gb3IgVkFYIHdpdGggVWx0cml4IDQuMiwgIm1h a2UgdWx0cml4NDIiIG9yICJtYWtlIHVsdHJpeDQyYyIKKyMgPyBmb3IgREVDc3RhdGlvbiBvciBW QVggd2l0aCBVbHRyaXggNC54LCBQT1NJWCB3b3JsZCwgIm1ha2UgcG9zaXgiCisjID8gZm9yIERF Q3N0YXRpb24gb3IgVkFYIHdpdGggVWx0cml4IDQuMywgIm1ha2UgdWx0cml4NDMiLgorIyA/IGZv ciBERUNzdGF0aW9uIG9yIFZBWCB3aXRoIFVsdHJpeCA0LjQsICJtYWtlIHVsdHJpeDQ0Ii4KKyMg PyBmb3IgREVDc3RhdGlvbiA1MDAwLzUwLCAvMTUwIG9yIC8yNjAgKFI0eDAwIE1JUFMgQ1BVKSwg VWx0cml4IDQuM0Egb3IgbGF0ZXIKKyMgICAgICJtYWtlIHVsdHJpeDQzLW1pcHMzIiBvciAibWFr ZSB1bHRyaXg0M2MtbWlwczMiCisjID8gZm9yIERFQ3N0YXRpb24gKE1JUFMpIHdpdGggQmVya2Vs ZXkgU3ByaXRlLCAibWFrZSBic2Q0NCI/CisjID8gZm9yIERFQ3N0YXRpb24gKE1JUFMpIHdpdGgg T1NGLzEgVjEuMCB0byAxLjMsICJtYWtlIGRlYy1vc2YiCisjID8gZm9yIERFQyBBbHBoYSB3aXRo IE9TRi8xIDEuMCB0byAxLjMsICJtYWtlIGRlYy1vc2YiCisjID8gZm9yIERFQyBQQyA0ODYgd2l0 aCBPU0YvMSwgIm1ha2UgZGVjLW9zZiIKKyMgPyBmb3IgREVDIEFscGhhIHdpdGggT1NGLzEgMi54 LCAibWFrZSBkZWMtb3NmMjAiCisjID8gZm9yIERFQyBBbHBoYSB3aXRoIE9TRi8xIDMuMCwgIm1h a2UgZGVjLW9zZjMwIgorIyA/IGZvciBERUMgQWxwaGEgd2l0aCBEaWdpdGFsIFVOSVggMy4yLCAi bWFrZSBkdTMyIgorIyA/IGZvciBERUMgQWxwaGEgd2l0aCBEaWdpdGFsIFVOSVggNC4wLTQuMEQs ICJtYWtlIGR1NDAiIG9yICJtYWtlIGR1NDBnY2MiCisjID8gZm9yIERFQyBBbHBoYSB3aXRoIERp Z2l0YWwgVU5JWCA0LjBFIG9yIGhpZ2hlciwgc2VlIFRydTY0LgorIyArIGZvciBERUMgQWxwaGEg d2l0aCBhbnkgdmVyc2lvbiBvZiBEVSBvciBPU0YvMSwgIm1ha2UgZGVjLW9zZjEiCisjIC0gZm9y IERFQyBQcm8tMzUwIHdpdGggUHJvL1Zlbml4IFYxLngsICJtYWtlIHByb3Z4MSIgKHZlcnNpb24g NUEgaXMgdG9vIGJpZykKKyMgPyBmb3IgREVDIFByby0zODAgd2l0aCBQcm8vVmVuaXggVjIuMCAo U3lzIFYpLCAibWFrZSBzeXMzIiBvciAibWFrZSBzeXMzbmlkIgorIyA/IGZvciBERUMgUHJvLTM4 MCB3aXRoIDIuOSwgMi4xMCwgb3IgMi4xMSBCU0QsICJtYWtlIGJzZDI5IiBvciAibWFrZSBic2Qy MTAiCisjICAgZm9yIERFQyBQRFAtMTEgd2l0aCAyLnhCU0QgKHVzZSBzZXBhcmF0ZSBtYWtlZmls ZSBja3ViczIubWFrKQorIyA/IGZvciBEZWxsIFVOSVggSXNzdWUgMi54ICg9IFVTTCBTeXMgVi8z ODYgUjQueCArIGZpeGVzKSwgIm1ha2UgZGVsbHN5czVyNCIKKyMgICAgIG9yICJtYWtlIGRlbGxz eXM1cjRjIiAobGFzdCB0ZXN0ZWQgaW4gQy1LZXJtaXQgNUEpLgorIyA/IGZvciBESUFCIERTOTAg d2l0aCBETklYIChhbnkgdmVyc2lvbikgY3JlYXRlIGFuIGVtcHR5IDxzeXMvZmlsZS5oPiBpZgor IyAgICAgdGhpcyBmaWxlIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgKG9yIGFkZCAtRE5PRklMRUgg dG8gdGhlIG1ha2UgZW50cnkpLgorIyA/IGZvciBESUFCIERTOTAgd2l0aCBETklYIDUuMiAoU3lz IFYuMikgb3IgZWFybGllciwgIm1ha2UgZG5peCIsCisjICAgICAibWFrZSBkbml4bmQiLCBvciAo dG8gYWRkIGN1cnNlcyBhbmQgVENQL0lQKSAibWFrZSBkbml4bmV0YyIsCisjID8gZm9yIERJQUIg RFM5MCB3aXRoIEROSVggNS4zIChTeXMgVi4zKSwgIm1ha2UgZG5peDVyMyIKKyMgPyBmb3IgRElB QiBEUzkwIHdpdGggRE5JWCA1LjMgKFN5cyBWLjMpIGFuZCBUQ1AvSVAsICJtYWtlIGRuaXg1cjNu ZXQiCisjID8gZm9yIERJQUIgRFM5MCB3aXRoIEROSVggNS4zIDIuMiAoU3lzIFYuMyksIEFOU0kg QywgIm1ha2UgZG5peDVyM2Fuc2kiCisjICAgICBvciwgdG8gaW5jbHVkZSBUQ1AvSVAsICJtYWtl IGRuaXg1cjNhbnNpbmV0IiwKKyMgICAgIGJ1dCB5b3UgaGF2ZSB0byBmaXggYSBidWcgaW4gL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIGZpcnN0OgorIyAgICAgY2hhbmdlICJleHRlcm4gdm9pZCBmcmVl KGNoYXIgKnN0cik7IiB0byAiZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICpzdHIpOyIKKyMgPyBmb3Ig RG9scGhpbiBTZXJ2ZXIgVGVjaG5vbG9neSBUcml0b24gODgvMTcgd2l0aCBTVi84OCBSMy4yLCAi bWFrZSBzdjg4cjMyIgorIyA/IGZvciBFbmNvcmUgTXVsdGltYXggMzEwLCA1MTAgd2l0aCBVbWF4 IDQuMiwgIm1ha2UgdW1heDQyIgorIyA/IGZvciBFbmNvcmUgTXVsdGltYXggMzEwLCA1MTAgd2l0 aCBVbWF4IDQuMywgIm1ha2UgdW1heDQzIgorIyA/IGZvciBFbmNvcmUgTXVsdGltYXggMzEwLCA1 MTAgd2l0aCBVbWF4IFYgMi4yLCB1c2UgQmVya2VsZXkgY2MsICJtYWtlIGJzZCIKKyMgPyBmb3Ig RW5jb3JlIDg4SyB3aXRoIFVtYXggViA1LjIsICJtYWtlIGVuY29yZTg4ayIKKyMgPyBmb3IgRVNJ WCBTeXN0ZW0gViBSNC4wLjMgb3IgNC4wNCB3aXRoIFRDUC9JUCBzdXBwb3J0LCAibWFrZSBlc2l4 cjQiCisjICAgICBOT1RFOiBZb3UgY2FuIGFsc28gYnVpbGQgb24gVW5peHdhcmUgMi54IHdpdGgg Im1ha2UgZXNpeHI0IiwgYW5kIHJ1bgorIyAgICAgb24gRVNJWCwgYnV0IHRoZXJlIHlvdSBtdXN0 IGZpcnN0OgorIyAgICAgICBsbiAvdXNyL2xpYi9saWJzb2NrZXQuc28gL3Vzci9saWIvbGlic29j a2V0LnNvLjEKKyMgICAgICAgbG4gL3Vzci9saWIvbGlibnNsLnNvIC91c3IvbGliL2xpYm5zbC5z by4xCisjICAgICAoVGhpcyB3b3JrZWQgZm9yIEMtS2VybWl0IDYuMCBidXQgZG9lcyBub3Qgd29y ayBmb3IgNy4wKQorIyAgICAgKEJ1dCB5b3UgY2FuIHByb2JhYmx5IHN0aWxsIGJ1aWxkIGEgbm9u LW5ldHdvcmtpbmcgdmVyc2lvbiB0aGlzIHdheSkKKyMgPyBmb3IgRXZlcmV4IFNURVAgMzg2LzI1 IFJldiBHIHdpdGggRVNJWCBTeXMgViBSMy4yRCwgIm1ha2Ugc3lzNXIzIgorIyA/IGZvciBGb3J0 dW5lIDMyOjE2LCBGb3I6UHJvIDEuOCwgIm1ha2UgZnQxOCIKKyMgPyBmb3IgRm9ydHVuZSAzMjox NiwgRm9yOlBybyAyLjEsICJtYWtlIGZ0MjEiCisjID8gZm9yIEZQUyA1MDAgd2l0aCBGUFggNC4x LCAibWFkZSBic2QiCisjID8gZm9yIEZyZWVCU0QgMS4wLCAibWFrZSBmcmVlYnNkMSIKKyMgPyBm b3IgRnJlZUJTRCAyLngsICJtYWtlIGZyZWVic2QyIiAobmN1cnNlcykgb3IgIm1ha2UgZnJlZWJz ZDJjIiAoY3Vyc2VzKQorIyA/IGZvciBGcmVlQlNEIDMueCwgIm1ha2UgZnJlZWJzZDMiIChuY3Vy c2VzKSBvciAibWFrZSBmcmVlYnNkM2MiIChjdXJzZXMpCisjID8gZm9yIEZyZWVCU0QgNC4wLCAi bWFrZSBmcmVlYnNkNDAiCisjID8gZm9yIEZyZWVCU0QgNC4xIG9yIGxhdGVyLCAibWFrZSBmcmVl YnNkIgorIyArIE5PVEU6IEp1c3QgdXNlICJtYWtlIGZyZWVic2QiIGZvciBhbnkgcmVhc29uYWJs eSByZWNlbnQgRnJlZUJTRCB2ZXJzaW9uLgorIyA/IGZvciBIYXJyaXMgSENYLTI5MDAsICJtYWtl IHN5czVyMyIKKyMgPyBmb3IgSGFycmlzIE5pZ2h0IEhhd2sgODhLIG9yIDY4SyB3aXRoIENYL1VY IHByZS02LjEsICJtYWtlIHN5czVyMyIKKyMgPyBmb3IgSGFycmlzIE5pZ2h0IEhhd2sgODhLIG9y IDY4SyB3aXRoIENYL1VYIDYuMSBvciBsYXRlciwgIm1ha2UgY3hfdXgiCisjID8gZm9yIEhldXJp a29uLCAibWFrZSBzeXMzIgorIyA/IGZvciBIUC0zMDAwLCBNUEUvaXgsICJtYWtlIHBvc2l4Ij8K KyMgPyBmb3IgSFAtOTAwMCBTZXJpZXMgMzAwIHdpdGggNC40QlNELCAibWFrZSBic2Q0NCIKKwor IyBOT1RFOiBNb3N0IG9mIHRoZSBIUC1VWCB0YXJnZXRzIHdlcmUgdGVzdGVkIHN1Y2Nlc3NmdWxs eSBpbiAyMDEwLgorIyBWZXJpZmljYXRpb24gbmVlZGVkIGZvciBDLUtlcm1pdCA5LjAgQmV0YS4w MS4uLgorCisjID8gZm9yIEhQLTkwMDAgU2VyaWVzIDUwMCwgSFAtVVggNS4yMSBhbmQgbm8gbmV0 d29ya2luZyAibWFrZSBocHV4MDUwMCIKKyMgPyBmb3IgSFAtOTAwMCBTZXJpZXMgNTAwLCBIUC1V WCA1LjIxIHdpdGggV0lOL1RDUCAxLjIgIm1ha2UgaHB1eDA1MDB3aW50Y3AiCisjID8gZm9yIEhQ LTkwMDAgU2VyaWVzLCBIUC1VWCA2LjUsIHdpdGhvdXQgbG9uZyBmaWxlbmFtZXMsCisjICAgICAi bWFrZSBocHV4MDY1MCIsICJtYWtlIGhwdXgwNjUwYyIgb3IgIm1ha2UgaHB1eDA2NTB0Y3BjIgor IyA/IGZvciBIUC05MDAwIFNlcmllcywgSFAtVVggNy4wIG9yIGxhdGVyIG5vIGxvbmcgZmlsZW5h bWVzLCAibWFrZSBocHV4MDcwMHNmIgorIyAgICAgb3IgKHRvIGluY2x1ZGUgdGNwL2lwLCBjdXJz ZXMsIGV0YykgIm1ha2UgaHB1eDA3MDBzZnRjcGMiCisjID8gZm9yIEhQLTkwMDAgU2VyaWVzIHdp dGggSFAtVVggNy4wLCBUQ1AvSVAsbG9uZyBmaWxlbmFtZXMsIm1ha2UgaHB1eDA3MDBsZm4iCisj ID8gZm9yIEhQLTkwMDAgMzAwLzQwMCBTZXJpZXMgKDY4MHgwKSB3aXRoIEhQLVVYIDguMCwgVENQ L0lQLCAibWFrZSBocHV4MDgwMCIKKyMgICAgICBvciAibWFrZSBocHV4MDgwMGMiCisjID8gZm9y IEhQLTkwMDAgNzAwLzgwMCBTZXJpZXMgKFBBLVJJU0MpLCBIUC1VWCA4LjAsIFRDUC9JUCwgIm1h a2UgaHB1eDA4MDBwYSIKKyMgICAgICBvciAibWFrZSBocHV4MDgwMHBhYyIKKyMgPyBmb3IgSFAt OTAwMCBTZXJpZXMgd2l0aCBIUC1VWCA4LjAsIG5vIFRDUC9JUCwgbG9uZyBmaWxlbmFtZXMsCisj ICAgICAgIm1ha2UgaHB1eDA4MDBub3RjcCIKKyMgPyBmb3IgSFAtOTAwMCBTZXJpZXMsIEhQLVVY IDkuMCAtIDkuMTAsIFRDUC9JUCwgY3Vyc2VzLCByZXN0cmljdGVkIGNvbXBpbGVyCisjICAgICAo bm8gb3B0aW1pemF0aW9uLCBubyBBTlNJKSwgYWxsIG1vZGVscywgIm1ha2UgaHB1eDA5MDAiLiAg UmVhZCB0aGUKKyMgICAgIGhwdXgwOTAwIGVudHJ5IGJlbG93IGZvciBtb3JlIGluZm8uCisjID8g Zm9yIEhQLTkwMDAgNzAwIGFuZCA4MDAgU2VyaWVzLCBIUC1VWCA5LngsIFRDUC9JUCwgY3Vyc2Vz LAorIyAgICAgSFAgb3B0aW1pemluZyBBTlNJIEMgY29tcGlsZXIsICJtYWtlIGhwdXgwOTAwbzcw MCIuCisjID8gZm9yIEhQLTkwMDAgd2l0aCBNb3Rvcm9sYSBDUFVzLCBIUC1VWCA5LngsIFRDUC9J UCwgY3Vyc2VzLAorIyAgICAgSFAgb3B0aW1pemluZyBBTlNJIEMgY29tcGlsZXIsICJtYWtlIGhw dXgwOTAwbW90Ii4KKyMgPyBmb3IgSFAtOTAwMCBvbiBvdGhlciBDUFVzLCBIUC1VWCA5LngsIFRD UC9JUCwgY3Vyc2VzLAorIyAgICAgSFAgb3B0aW1pemluZyBBTlNJIEMgY29tcGlsZXIsICJtYWtl IGhwdXgwOTAwbyIuCisjID8gZm9yIEhQLTkwMDAgc2VyaWVzLCBIUC1VWCA5LngsIFRDUC9JUCwg Y3Vyc2VzLCBnY2MsIGFsbCBtb2RlbHMsCisjICAgICAibWFrZSBocHV4MDkwMGdjYyIKKyMgPyBm b3IgSFAtOTAwMCA3MDAvODAwIFNlcmllcywgSFAtVVggMTAuMDAsMTAuMDEsMTAuMTAsMTAuMjAs MTAuMzAsIFRDUC9JUCwKKyMgICAgIGN1cnNlcywgcmVzdHJpY3RlZCBjb21waWxlciAobm8gb3B0 aW1pemF0aW9uLCBubyBBTlNJKSAibWFrZSBocHV4MTAwMCIuCisjID8gZm9yIEhQLTkwMDAgNzAw LzgwMCBTZXJpZXMsIEhQLVVYIDEwLjAwLDEwLjAxLDEwLjEwLDEwLjIwLDEwLjMwLCBUQ1AvSVAs CisjICAgICBjdXJzZXMsIEhQIEFOU0kvb3B0aW1pemluZyBjb21waWxlciAibWFrZSBocHV4MTAw MG8iIG9yICJtYWtlIGhwdXgxMDAwbysiCisjID8gZm9yIEhQLTkwMDAgSFAtVVggMTAuMDAgb3Ig bGF0ZXIgd2l0aCBnY2MsICJtYWtlIGhwdXgxMDAwZ2NjIgorIyA/IGZvciBUcnVzdGVkIEhQLVVY IDEwLnh4ICJtYWtlIGhwdXgxMDAwdCIsICJtYWtlIGhwdXgxMDAwdG8iLAorIyAgICAgb3IgbWFr ZSBocHV4MTAwMHRvKyIKKyMgPyBmb3IgSFAtOTAwMCA3MDAvODAwIFNlcmllcywgSFAtVVggMTEu MDAsVENQL0lQLGN1cnNlcywgcmVzdHJpY3RlZCBjb21waWxlcgorIyAgICAgKG5vIG9wdGltaXph dGlvbiwgbm8gQU5TSSkgIm1ha2UgaHB1eDExMDAiLgorIyA/IGZvciBIUC05MDAwIDcwMC84MDAg U2VyaWVzLCBIUC1VWCAxMS4wMCxUQ1AvSVAsY3Vyc2VzLCByZXN0cmljdGVkIGNvbXBpbGVyCisj ICAgICBIUCBBTlNJL29wdGltaXppbmcgY29tcGlsZXIgIm1ha2UgaHB1eDExMDBvIiBvciAibWFr ZSBocHV4MTEwMG8rIgorIyA/IGZvciBUcnVzdGVkIEhQLVVYIDExLnh4ICJtYWtlIGhwdXgxMTAw dCIsICJtYWtlIGhwdXgxMTAwdG8iLAorIyAgICAgbWFrZSBocHV4MTEwMHRvKyIKKyMgPyBmb3Ig SFAtOTAwMCBQQS1SSVNDIG1vZGVscyB3aXRoIE5lWFRTVEVQIDMuMywgIm1ha2UgbmV4dHF1YWRm YXQiLgorIyA/IGZvciBIUC05MDAwIFBBLVJJU0MgbW9kZWxzIHdpdGggT1BFTlNURVAvTWFjaCA0 LjEsICJtYWtlIG5leHRxdWFkZmF0Ii4KKyMgPyBmb3IgSUJNIDM3MCBTZXJpZXMgd2l0aCBJWC8z NzAsICJtYWtlIGl4MzcwIgorIyA/IGZvciBJQk0gMzcwIFNlcmllcyB3aXRoIEFJWC8zNzAgMS4y LCAibWFrZSBhaXgzNzAiCisjID8gZm9yIElCTSAzNzAgU2VyaWVzIHdpdGggQUlYLzM3MCAzLjAs ICJtYWtlIGFpeDM3MCIKKyMgPyBmb3IgSUJNIDM3MCBTZXJpZXMgd2l0aCBBSVgvRVNBIDIuMSwg Im1ha2UgYWl4ZXNhIgorIyAtIGZvciBJQk0gUEMvQVQgMjg2ICYgY29tcGF0aWJsZXMgd2l0aCBN YXJrIFdpbGxpYW1zIENvaGVyZW50IE9TLAorIyAgICAgY29tbWFuZC1saW5lLW9ubHkgdmVyc2lv biwgIm1ha2UgY29oZXJlbnQiICh2ZXJzaW9uIDVBICYgbGF0ZXIgdG9vIGJpZykKKyMgPyBmb3Ig SUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdpdGggTWFyayBXaWxsaWFtcyBDb2hlcmVudCBPUywK KyMgICAgIG1pbmltdW0gaW50ZXJhY3RpdmUgdmVyc2lvbiwgIm1ha2UgY29oZXJlbnRtaSIKKyMg PyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdpdGggTWFyayBXaWxsaWFtcyBDb2hlcmVu dCBPUywKKyMgICAgIGZ1bGwgaW50ZXJhY3RpdmUgdmVyc2lvbiwgcHJpb3IgdG8gdjQuMiwgIm1h a2UgY29oZXJlbnRtYXgiCisjID8gZm9yIElCTSBQQyAzODYgJiBjb21wYXRpYmxlcyB3aXRoIE1h cmsgV2lsbGlhbXMgQ29oZXJlbnQgT1MgNC4yLAorIyAgICAgIm1ha2UgY29oZXJlbnQ0MiIKKyMg PyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdpdGggTHlueE9TIDIuMCBvciAyLjEsICJt YWtlIGx5bngyMSIKKyMgPyBmb3IgSUJNIFBDIDM4NiAmIGNvbXBhdGlibGVzIHdpdGggTHlueE9T IDIuMiwgIm1ha2UgbHlueCIKKyMgLSBmb3IgSUJNIFBDL0FUICYgY29tcGF0aWJsZXMgd2l0aCBv cmlnaW5hbCBNSU5JWCwgIm1ha2UgbWluaXgiICh0b28gYmlnKQorIyA/IGZvciBJQk0gUEMgZmFt aWx5LCAzODYtYmFzZWQsIHdpdGggTUlOSVgvMzg2IDEuNSwgIm1ha2UgbWluaXgzODYiCisjICAg ICBvciBpZiB5b3UgaGF2ZSBHTlUgQ0MsICJtYWtlIG1pbml4Mzg2Z2NjIgorIyA/IGZvciBJQk0g UEMgZmFtaWx5LCAzODYtYmFzZWQsIHdpdGggTUlOSVggMi4wLCAibWFrZSBtaW5peDIwIgorIyA/ IGZvciBJQk0gUEMgZmFtaWx5LCAzODYtYmFzZWQsIHdpdGggTUlOSVggMy4wLCAibWFrZSBtaW5p eDMiCisjICsgZm9yIElCTSBQQyBmYW1pbHksIDM4Ni1iYXNlZCwgd2l0aCBNSU5JWCAzLjAsICJt YWtlIG1pbml4MzE1IgorIyA/IGZvciBJQk0gUFMvMiB3aXRoIFBTLzIgQUlYIDEuMCwgMS4xLCBv ciAxLjIsICJtYWtlIHBzMmFpeCIgb3IgcHMyYWl4bmV0Yy4KKyMgPyBmb3IgSUJNIFBTLzIgd2l0 aCBQUy8yIEFJWCAxLjMsICJtYWtlIHBzMmFpeDMiCisjID8gZm9yIElCTSBSSVNDIFN5c3RlbS82 MDAwIHdpdGggQUlYIDMuMCwgIm1ha2UgYWl4MzAiCisjID8gZm9yIElCTSBSSVNDIFN5c3RlbS82 MDAwIHdpdGggQUlYIDMuMS54LCAibWFrZSBhaXgzMSIKKyMgPyBmb3IgSUJNIFJJU0MgU3lzdGVt LzYwMDAgd2l0aCBBSVggMy4yLjAgdGhydSAzLjIuNSwgIm1ha2UgYWl4MzIiCisjID8gZm9yIElC TSBSUy82MDAwIG9yIFBvd2VyIFNlcmllcyB3aXRoIEFJWCA0LjEueCwgIm1ha2UgYWl4NDEiCisj ID8gZm9yIElCTSBSUy82MDAwIG9yIFBvd2VyIFNlcmllcyB3aXRoIEFJWCA0LjEueCB3aXRoIGdj YywgIm1ha2UgYWl4NDFnIgorIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0 aCBBSVggNC4xIHdpdGggWC4yNSwgIm1ha2UgYWl4NDF4MjUiCisjID8gZm9yIElCTSBSUy82MDAw IG9yIFBvd2VyIFNlcmllcyB3aXRoIEFJWCA0LjIgb3IgbGF0ZXI6ICJtYWtlIGFpeCIKKyMgICh0 aGUgZm9sbG93aW5nICJtYWtlIGFpeG5uIiB0YXJnZXRzIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5 IGV4Y2VwdCBmb3IgZ2NjKQorIyA/IGZvciBJQk0gUlMvNjAwMCBvciBQb3dlciBTZXJpZXMgd2l0 aCBBSVggNC4yLCAibWFrZSBhaXg0MiIKKyMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2Vy aWVzIHdpdGggQUlYIDQuMywgIm1ha2UgYWl4NDMiIChvciBhaXg0M2djYykKKyMgPyBmb3IgSUJN IFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQuNCwgIm1ha2UgYWl4NDQiIChvciBh aXg0NGdjYykKKyMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDQu NSwgIm1ha2UgYWl4NDUiIChvciBhaXg0NWdjYykKKyMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93 ZXIgU2VyaWVzIHdpdGggQUlYIDUuMCwgIm1ha2UgYWl4NTAiIChvciBhaXg1MGdjYykKKyMgPyBm b3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDUuMSwgIm1ha2UgYWl4NTEi IChvciBhaXg1MWdjYykKKyMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGgg QUlYIDUuMiwgIm1ha2UgYWl4NTIiIChvciBhaXg1MmdjYykKKyMgPyBmb3IgSUJNIFJTLzYwMDAg b3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDUuMywgIm1ha2UgYWl4NTMiIChvciBhaXg1M2djYykK KyMgPyBmb3IgSUJNIFJTLzYwMDAgb3IgUG93ZXIgU2VyaWVzIHdpdGggQUlYIDYuMSwgIm1ha2Ug YWl4NjEiIChvciBhaXg1M2djYykKKyMgPyBmb3IgSUJNIFJUIFBDIHdpdGggQUlYIDIuMSwgIm1h a2Ugc3lzMyIKKyMgPyBmb3IgSUJNIFJUIFBDIHdpdGggQUlYIDIuMi4xLCAibWFrZSBydGFpeCIg b3IgIm1ha2UgcnRhaXhjIgorIyA/IGZvciBJQk0gUlQgUEMgd2l0aCBBQ0lTIDQuMiwgIm1ha2Ug YnNkIgorIyA/IGZvciBJQk0gUlQgUEMgd2l0aCBBQ0lTIDQuMywgIm1ha2UgcnRhY2lzIiBvciAi bWFrZSBic2QgS0ZMQUdTPS1ETk9BTlNJIgorIyA/IGZvciBJQk0gUlQgUEMgd2l0aCA0LjNCU0Qv UmVubywgIm1ha2UgYnNkNDQiIG9yICJtYWtlIGJzZDQ0YyIKKyMgPyBmb3IgSUNMIERSUzQwMCBv ciA0MDBFLCAibWFrZSBpY2xzeXM1cjMiCisjID8gZm9yIElDTCBEUlMzMDAwICg4MDQ4Nikgd2l0 aCBEUlMvTlgsICJtYWtlIGljbHN5czVyNF80ODYiCisjID8gZm9yIElDTCBEUlM2MDAwIChTUEFS Qykgd2l0aCBEUlMvTlgsICJtYWtlIGljbHN5czVyNCIKKyMgPyBmb3IgSUNMIERSUzYwMDAgKFNQ QVJDKSB3aXRoIERSUy9OWCA0LjJNUCA3TVBsdXMsICJtYWtlIGljbHN5czVyNG0rIgorIyA/ICAg ICBEaXR0byBidXQgd2l0aCBJS1NEIHN1cHBvcnQgaW5jbHVkZWQsICJtYWtlIGljbHN5czVyNG0r aWtzZCIKKyMgPyBmb3IgSW50ZWdyYXRlZCBTb2x1dGlvbnMgSW5jIFY4UyBWTUUgNjgwMjAsICJt YWtlIGlzaSIKKyMgPyBmb3IgSW50ZWwgMzAyIHdpdGggQmVsbCBUZWNoIFN5cyBWLzM4NiBSMy4y LCAibWFrZSBzeXM1cjMiCisjID8gZm9yIEludGVsIFhlbml4LzI4NiwgIm1ha2Ugc2NvMjg2Igor IyA/IGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJIChQQy9JWCksICJtYWtlIHBjaXgiIG9yICJt YWtlIGlzMyIKKyMgPyBmb3IgSW50ZXJhY3RpdmUgU3lzdGVtIElJSSAoUEMvSVgpIHdpdGggZ2Nj LCAibWFrZSBpczNnY2MiCisjID8gZm9yIEludGVyYWN0aXZlIDM4Ni9peCAxLjAuNiB3aXRoIFRD UC9JUCBuZXR3b3JraW5nLCAibWFrZSBpczVyM25ldDIiCisjID8gZm9yIEludGVyYWN0aXZlIDM4 Ni9peCAyLjAueCwgIm1ha2UgaXM1cjMiIG9yIChQT1NJWCkgIm1ha2UgaXM1cjNwIgorIyA/IGZv ciBJbnRlcmFjdGl2ZSAzODYvaXggMi4wLnggd2l0aCBUQ1AvSVAgbmV0d29ya2luZywgIm1ha2Ug aXM1cjNuZXQiCisjICAgICBvciAibWFrZSBpczVyM25ldDIiCisjID8gZm9yIEludGVyYWN0aXZl IDM4Ni9peCAyLjIuMSwgam9iIGNvbnRyb2wsIGN1cnNlcywgbm8gbmV0LCBnY2MsCisjICAgICAi bWFrZSBpczVyM2djYyIKKyMgPyBmb3IgSW50ZXJhY3RpdmUgVU5JWCBTeXMgViBSMy4yIFYyLjIg LSA0LjAgd2l0aG91dCBUQ1AvSVAsICJtYWtlIGlzNXIzamMiCisjID8gZm9yIEludGVyYWN0aXZl IFVOSVggU3lzIFYgUjMuMiBWMi4yIC0gNC4wIHdpdGggVENQL0lQLCAibWFrZSBpczVyM25ldGpj IgorIyA/IGZvciBJbnRlcmdyYXBoIENsaXBwZXIsICJtYWtlIGNsaXgiIG9yICJtYWtlIGNsaXhu ZXQiCisjID8gZm9yIEpvbGl4IChzZWUgMzg2QlNEKQorIyArIGZvciBMaW51eCAxLjIgYW5kIGxh dGVyLCAibWFrZSBsaW51eCIuICBVc2VzIG5jdXJzZXMuICBUaGlzIHZlcnNpb24KKyMgICAgIGhh bmRsZXMgc2VyaWFsIHNwZWVkcyB1cCB0byA0NjA4MDAgYnBzLCBMaW51eCBGU1NURCAxLjIsIFRD UC9JUCwgYW5kCisjICAgICBzaG91bGQgd29yayBvbiBib3RoIGxpYmMgYW5kIGdsaWJjIHN5c3Rl bXMuICBGb3Igc3RhdGljIGxpbmtpbmcsIHVzZQorIyAgICAgIm1ha2UgbGludXggTE5LRkxBR1M9 LXN0YXRpYyIuICBQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkKKyMgICAg IHRoZSBsaW51eCBlbnRyeS4gIEFzIG9mIDguMC4yMTIgRGV2LjEwLCB0aGlzIGFsc28gaW5jbHVk ZXMgTGFyZ2UgRmlsZQorIyAgICAgU3VwcG9ydCAoTEZTKS4KKyMgKyBmb3IgTGludXggYnVpbGRz IHRoYXQgZmFpbCB3aXRoICJzeXMvc2VsZWN0Lmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnki LAorIyAgICAgIm1ha2UgbGludXhucyIKKyMgKyBmb3IgTGludXggMS4yIGFuZCBsYXRlciBidXQg d2l0aCBjdXJzZXMuaCBhbmQgbGliY3Vyc2VzIChyYXRoZXIgdGhhbgorIyAgICAgbmN1cnNlcy5o IGFuZCBsaWJuY3Vyc2VzKSwgdXNlICJtYWtlIGxpbnV4YyIuCisjICsgZm9yIExpbnV4IDEuMiBh bmQgbGF0ZXIgd2l0aCBubyBjdXJzZXMgc3VwcG9ydCBhdCBhbGwsICJtYWtlIGxpbnV4bmMiLgor IyArIGZvciBMaW51eCB3aXRoIG5vIFRDUC9JUCwgIm1ha2UgbGludXhub3RjcCIKKyMgKFRoZSBm b2xsb3dpbmcgTGludXggdGFyZ2V0cyBhcmUgaGlzdG9yaWMgYW5kIG1pZ2h0IG5vdCB3b3JrLi4u KQorIyA/IGZvciBSZWQgSGF0IExpbnV4IDcuMSB0aHJvdWdoIFJIOSwgZnVsbHkgY29uZmlndXJl ZCAoa3JiNSwgU1NMLCBldGMpOgorIyAgICAgIm1ha2UgcmVkaGF0NzEiLCAibWFrZSByZWRoYXQ3 MiIsICJtYWtlIHJlZGhhdDczIiwgIm1ha2UgcmVkaGF0ODAiCisjICAgICAibWFrZSByZWRoYXQ5 IgorIyAgICAgTk9URTogWW91IG11c3QgdXNlIHRoaXMgdGFyZ2V0IGZvciBSZWQgSGF0IDcuMSBz aW5jZSBpdAorIyAgICAgYWxzbyBpbmNsdWRlcyBhIHdvcmthcm91bmQgZm9yIGl0cyBicm9rZW4g Y3Vyc2VzIGxpYnJhcnkuCisjICAgICBXQVJOSU5HOiBUaGVzZSB0YXJnZXRzIGNyZWF0ZSBiaW5h cmllcyB0aGF0IGluY2x1ZGUgY29kZSBmb3IKKyMgICAgIHN0cm9uZyBlbmNyeXB0aW9uIGFuZCBh cmUgdGhlcmVmb3JlIG5vdCBleHBvcnRhYmxlLiBETyBOT1QgUFVUCisjICAgICBUSEVTRSBCSU5B UklFUyBPTiBVUyBPUiBDQU5BRElBTiBXRUIgT1IgRlRQIFNJVEVTLgorIyA/IGZvciBMaW51eCBv biBQb3dlck1hYyAoTWtsaW51eCBEUjMpLCAibWFrZSBta2xpbnV4Ii4KKyMgPyBmb3IgTGludXgg MS4yIGFuZCBsYXRlciwgdG8gYnVpbGQgd2l0aCBlZ2NzLCAibWFrZSBsaW51eGVnY3MiLgorIyA/ IGZvciBMaW51eCB3aXRoIGxjYyBjb21waWxlciwgbm8gVENQL0lQLCAibWFrZSBsaW51eG5vdGNw LWxjYyIKKyMgPyBmb3IgTGludXggMS4wIG9yIGVhcmxpZXIsICJtYWtlIGxpbnV4MTAiLgorIyAo RW5kIG9sZCBsaW51eCB0YXJnZXRzKQorIyA/IGZvciBNYWNoIDIuNiBvbiAoYW55dGhpbmcsIGUu Zy4gREVDc3RhdGlvbiksICJtYWtlIGJzZDQyIiBvciAibWFrZSBic2Q0MyIuCisjID8gZm9yIE1h Y2hUZW4gKFRlbm9uKSAyLjEuMS5EIG9uIChlLmcuKSBBcHBsZSBQb3dlcmJvb2ssICJtYWtlIG1h Y2h0ZW4iLgorIyA/IGZvciBNYXNzY29tcCBSVFUgQVQmVCBTeXN0ZW0gSUlJLCAibWFrZSBydHUi CisjICAgZm9yIG90aGVyIE1hc3Njb21wLCBzZWUgQ29uY3VycmVudC4KKyMgPyBmb3IgTWljcm9w b3J0IFNWL0FUIChTeXN0ZW0gViBSMiksICJtYWtlIG1wc3lzdiIgKGxhc3QgZWRpdCB0ZXN0ZWQ6 IDE0NCkKKyMgPyBmb3IgTWljcm9wb3J0IFNWUjQgMi4yLCAzLjEsIG9yIDQuMSAibWFrZSBzeXM1 cjRzeCIKKyMgPyBmb3IgTWljcm9zb2Z0LElCTSBYZW5peCAoLzI4NiwgUEMvQVQsIGV0YyksICJt YWtlIHhlbml4IiBvciAibWFrZSBzY28yODYiCisjID8gZm9yIE1JUFMgU3lzdGVtIHdpdGggUklT Qy9vcyAoVU1JUFMpIDQuNTIgPSBBVCZUIFNWUjMsICJtYWtlIG1pcHMiCisjICAgICBvciAibWFr ZSBtaXBzdGNwYyIKKyMgPyBmb3IgTWtMaW51eCBvbiBQb3dlciBNYWNpbnRvc2gsICJtYWtlIG1r bGludXgiCisjID8gZm9yIE1vZGNvbXAgOTczMCwgUmVhbC9JWCwgIm1ha2Ugc3lzNXIzIiAob3Ig bW9kaWZ5IHRvIHVzZSBnY2MgPSBHTFMgY2MpCisjID8gZm9yIE1vZGNvbXAgUmVhbHN0YXIgMTAw MCB3aXRoIFJFQUwvSVggRC4xLCAibWFrZSBzdjg4cjMyIgorIyA/IGZvciBNb3Rvcm9sYSBGb3Vy IFBoYXNlLCAibWFrZSBzeXMzIiBvciAibWFrZSBzeXMzbmlkIgorIyA/IGZvciBNb3Rvcm9sYSBE ZWx0YSBTeXN0ZW0gVi82OCBSMywgIm1ha2Ugc3Y2OHIzIgorIyA/IGZvciBNb3Rvcm9sYSBEZWx0 YSBTeXN0ZW0gVi82OCBSM1Y1LCAibWFrZSBzdjY4cjN2NSIKKyMgPyBmb3IgTW90b3JvbGEgRGVs dGEgU3lzdGVtIFYvNjggUjNWNS4xLCAibWFrZSBzdjY4cjN2NTEiCisjID8gZm9yIE1vdG9yb2xh IERlbHRhIFN5c3RlbSBWLzY4IFIzVjYgd2l0aCBOU0UgVENQL0lQLCAibWFrZSBzdjY4cjN2NiIK KyMgPyBmb3IgTW90b3JvbGEgRGVsdGEgU3lzdGVtIFYvODggUjMyLCAibWFrZSBzdjg4cjMyIgor IyA/IGZvciBNb3Rvcm9sYSBEZWx0YSBTeXN0ZW0gVi84OCBSNDAsICJtYWtlIHN2ODhyNDAiCisj ID8gZm9yIE10IFhpbnUgTWFjaDM4NiBvbiAzODYvNDg2LWJhc2VkIFBDcywgIm1ha2UgYnNkNDMi CisjID8gZm9yIE5DUiBUb3dlciAxNjMyLCBPUyAxLjAyLCAibWFrZSB0b3dlcjEiCisjID8gZm9y IE5DUiBUb3dlciAxNjMyIG9yIE1pbml0b3dlciB3aXRoIFN5c3RlbSBWIFIyLCAibWFrZSBzeXMz IgorIyAgICAgb3IgIm1ha2Ugc3lzM252IgorIyA/IGZvciBOQ1IgVG93ZXIgMzIsIE9TIFJlbGVh c2UgMS54eC54eCwgIm1ha2UgdG93ZXIzMi0xIgorIyA/IGZvciBOQ1IgVG93ZXIgMzIsIE9TIFJl bGVhc2UgMi54eC54eCwgIm1ha2UgdG93ZXIzMi0yIgorIyA/IGZvciBOQ1IgVG93ZXIgMzIsIE9T IFJlbGVhc2VzIGJhc2VkIG9uIFN5cyBWIFIzLCAibWFrZSB0b3dlcjMyIgorIyA/IGZvciBOQ1Ig VG93ZXIgMzIsIE9TIFJlbGVhc2VzIGJhc2VkIG9uIFN5cyBWIFIzIHdpdGggZ2NjICJtYWtlIHRv d2VyMzJnIgorIyA/IGZvciBOQ1IgU3lzdGVtIDMwMDAsIEFUJlQgVU5JWCBTeXN0ZW0gViBSNCAy LjAsICJtYWtlIHN5czVyNHN4bmEiCisjID8gZm9yIE5DUiBTeXN0ZW0gMzAwMCwgQVQmVCBVTklY IFN5c3RlbSBWIFI0IDIuMCB3aXRoIFdvbGxvbmdvbmcgVENQL0lQLAorIyAgICAgIm1ha2Ugc3lz NXI0bmV0MiIgb3IgIm1ha2Ugc3lzNXI0bmV0MmMiLgorIyAgICAgIFNvbWUgaGVhZGVyIGZpbGVz IG1pZ2h0IGJlIG1pc3BsYWNlZDsgdHJ5IHRoaXM6CisjICAgICAgIGxuIC91c3IvaW5jbHVkZS9u ZXRpbmV0L2luLmggL3Vzci9pbmNsdWRlL3N5cy9pbi5oCisjICAgICAgIGxuIC91c3IvaW5jbHVk ZS9hcnBhL2luZXQuaCAvdXNyL2luY2x1ZGUvc3lzL2luZXQuaAorIyAgICAgICBsbiAvdXNyL2lu Y2x1ZGUvc3lzL3Rlcm1pb3guaCAvdXNyL2luY2x1ZGUvdGVybWlveC5oCisjID8gZm9yIE5DUiBT eXN0ZW0gMzAwMCwgTkNSIFVOSVggMDIuMDIuMDEsIHNhbWUgYXMgYWJvdmUuCisjID8gZm9yIE5D UiBNUC1SQVMgU3lzdGVtIFYgUjQgVjIuMDMgb3IgMy4wMiwgIm1ha2UgbXByYXMiIG9yICJtYWtl IG1wcmFzdGNwYyIKKyMgKyBmb3IgTmV0QlNEIGFueSB2ZXJzaW9uIG9uIGFueSBhcmNoaXRlY3R1 cmUsICJtYWtlIG5ldGJzZCIKKyMgKyBmb3IgTmV0QlNEIHdpdGggT3BlblNTTCwgIm1ha2UgbmV0 YnNkK3NzbCIKKyMgPyBmb3IgTmV0QlNEIHdpdGggbmN1cnNlcyBzcGVjaWZpZWQgaW5zdGVhZCBv ZiBjdXJzZXMsICJtYWtlIG5ldGJzZG4iCisjID8gZm9yIE5ldEJTRCB3aXRoIGFsbCBjdXJzZXMg c3VwcG9ydCBvbWl0dGVkLCAibWFrZSBuZXRic2RuYyIKKyMgPyBmb3IgTmVYVCB3aXRoIE5lWFRT VEVQIDEuMCB0aHJvdWdoIDMuMiwgIm1ha2UgbmV4dCIgKG9uIGEgTmVYVCkKKyMgPyBmb3IgTmVY VCB3aXRoIE5lWFRTVEVQIDMuMywgIm1ha2UgbmV4dDMzIgorIyA/IGZvciBOZVhUIHdpdGggT1BF TlNURVAvTWFjaCA0LjEsICJtYWtlIG5leHRxdWFkZmF0Ii4KKyMgPyBmb3IgTmVYVCB3aXRoIE9Q RU5TVEVQL01hY2ggNC4yLCAibWFrZSBvcGVuc3RlcDQyIi4KKyMgPyBmb3IgTmVYVFNURVAvNDg2 LCAibWFrZSBuZXh0IiAob24gYSBQQykKKyMgPyBmb3IgTmVYVFNURVAgcG9ydGFibGUgYmluYXJ5 IChydW5zIG9uIEludGVsIG9yIE1vdG9yb2xhKSwgIm1ha2UgbmV4dGZhdCIKKyMgPyBmb3IgTmVY VFNURVAgcG9ydGFibGUgYmluYXJ5IChJbnRlbCwgTW90b3JvbGEsIEhQIFBBLVJJU0MsIG9yIFNQ QVJDKSwKKyMgICAgICJtYWtlIG5leHRxdWFkZmF0IgorIyA/IGZvciBOaXhkb3JmIFRhcmdvbi8z MSwgIm1ha2UgdDMxdG9zNDB4IgorIyA/IGZvciBOb3JzayBEYXRhIFVuaWxpbmUgODgvMTcgd2l0 aCBTVi84OCBSMy4yLCAibWFrZSBzdjg4cjMyIgorIyAgIGZvciBOb3ZlbGwgVW5peFdhcmUgLSBz ZWUgVW5peFdhcmUKKyMgPyBmb3IgT1NGLzEgKHZhbmlsbGEsIGZyb20gT1MvRiksICJtYWtlIHBv c2l4IgorIyA/IGZvciBPa2lTdGF0aW9uIDczMDAgU2VyaWVzLCAibWFrZSBzeXM1cjRzeHRjcCIK KyMgPyBmb3IgT2xpdmV0dGkgTFNYLTMwMjAgd2l0aCBYL09TIFIuMi4zLCAibWFrZSB4b3MyMyIg b3IgIm1ha2UgeG9zMjNjIgorIyArIGZvciBPcGVuQlNELCAibWFrZSBvcGVuYnNkIiAoYWxzbyBz ZWUgc2VjdXJlIHRhcmdldHMgbGlzdGVkIGJlbG93KS4KKyMgPyBmb3IgT1BFTlNURVAvTWFjaCA0 LjEsICJtYWtlIG5leHRxdWFkZmF0IiAoTmVYVCwgSW50ZWwsIFBBLVJJU0MsIFNQQVJDKQorIyA/ IGZvciBPUEVOU1RFUC9NYWNoIDQuMiwgIm1ha2Ugb3BlbnN0ZXA0MiIgKHRlc3RlZCBvbiBOZVhU KQorIyA/IGZvciBQZXJraW4tRWxtZXIgKENvbmN1cnJlbnQpIDMyMDAgc2VyaWVzLCAibWFrZSBz eXM1Ii4KKyMgPyBmb3IgUGVya2luLUVsbWVyIChDb25jdXJyZW50KSAzMjAwIHNlcmllcyB3aXRo IDxkaXJlbnQuaD4sICJtYWtlIGNjb3AxIgorIyA/IGZvciBQZXJraW4tRWxtZXIvQ29uY3VycmVu dCAzMjAwIHdpdGggWGVsb3MgUjAyLCAibWFrZSBjY29wMSIKKyMgPyBmb3IgUEZVIENvbXBhY3Qg QSBTZXJpZXMgU1gvQSBUSVNQIFYxMC9FNTAgKEphcGFuKSwgIm1ha2Ugc3hhZTUwIgorIyA/IGZv ciBQbGV4dXMsICJtYWtlIHN5czMiCisjID8gZm9yIFB5cmFtaWQgOVhYWCAoZS5nLiA5ODQ1KSBv ciBNSVNlcnZlciBUIHNlcmllcywgT1N4IDQuNGIgdGhydSA1LjEsCisjICAgICAidWNiIG1ha2Ug cHlyYW1pZCIgb3IgZm9yIEhEQiBVVUNQLCAidWNiIG1ha2UgcHlyYW1pZC1oZGIiIG9yOgorIyA/ IGZvciBQeXJhbWlkIE1JU2VydmVyIFMgb3IgRVMgU2VyaWVzLCBEYXRhQ2VudGVyL09TeCwgIm1h a2UgcHlyZGNvc3giCisjID8gZm9yIFB5cmFtaWQgTUlTLVMgTUlQUyBSMzAwMCwgRGF0YUNlbnRl ciBPU3ggU3lzdGVtIFYgUjQsICJtYWtlIHB5cmRjb3N4IgorIyA/IGZvciBQT1NJWCBvbiBhbnl0 aGluZywgIm1ha2UgcG9zaXgiIChidXQgYWRqdXN0bWVudHMgbWlnaHQgYmUgbmVjZXNzYXJ5KS4K KyMgICAgICBOT1RFOiB0aGlzIHRhcmdldCBpcyBub3QgdmVyeSB1c2VmdWwgLSBtYW55IGZlYXR1 cmVzIGFyZSBtaXNzaW5nLgorIyA/IGZvciBQcmltZSA4MDAwIE1JUFMsIFNWUjMsICJtYWtlIG1p cHMiIG9yICJtYWtlIG1pcHN0Y3BjIgorIyAtIGZvciBRTlggMi54IChzb3JyeSB3ZSBkb24ndCBo YXZlIGEgdmVyc2lvbiBvZiBDLUtlcm1pdCBmb3IgUU5YIDIueCkKKyMgPyBmb3IgUU5YIDQuMCBv ciA0LjEsIDE2LWJpdCwgb24gMjg2IFBDLCBXYXRjb20gQyA4LjUsICJtYWtlIHFueDE2XzQxIgor IyA/IGZvciBRTlggNC4yMSAtIDQuMjJBICgyODYrKSwgYW5kIDQuMjMgKDM4NispLCBvciBoaWdo ZXIsIDE2LWJpdCwKKyMgICAgIFdhdGNvbSBDIDkuNXggb3IgaGlnaGVyLCAibWFrZSBxbngxNiIK KyMgKyBmb3IgUU5YIDQuMjEtNC4yNSwgMzItYml0LCAzODYgb3IgYWJvdmUsIFdhdGNvbSBDIDEw LjYsICJtYWtlIHFueDMyIgorIyAgICAgTk9URTogKCJtYWtlIHFueCIgPT0gIm1ha2UgcW54MzIi KQorIyA/IGZvciBRTlggTmV1dHJpbm8gMissICJtYWtlIHFueF9udG8yKyIgKGNyb3NzY29tcGls ZWQgb24gUU5YNCB3aXRoIFdhdGNvbSBDKQorIyA/IGZvciBRTlggNiA9IE5ldXRyaW5vIDIueHgs ICJtYWtlIHFueDYiCisjID8gZm9yIFJpZGdlIDMyIChST1MzLjIpLCAibWFrZSByaWRnZTMyIgor IyA/IGZvciBTYW1zdW5nIE1hZ2ljU3RhdGlvbiwgIm1ha2Ugc3lzNXI0IgorIyA/IGZvciBTQ08g WGVuaXggMi4yLjEgd2l0aCBkZXZlbG9wbWVudCBzeXN0ZW0gMi4yIG9uIDgwODYvOCAibWFrZSBz Y284NiIKKyMgPyBmb3IgU0NPIFhlbml4LzI4NiAyLjIuMSB3aXRoIGRldmVsb3BtZW50IHN5c3Rl bSAyLjIgb24gODAyODYsICJtYWtlIHNjbzI4NiIKKyMgICAgIE5PVEU6IHJlcG9ydGVkbHkgdGhp cyBtYWtlZmlsZSBpcyB0b28gbG9uZyBmb3IgU0NPIFhlbml4LzI4NiBtYWtlLCBidXQgaXQKKyMg ICAgIHdvcmtzIHdpdGggIm1ha2VMIiwgb3IgaWYgc29tZSBvZiB0aGUgb3RoZXIgbWFrZSBlbnRy aWVzIGFyZSBlZGl0ZWQgb3V0LgorIyA/IGZvciBTQ08gWGVuaXgvMzg2IDIuMi4yLCAibWFrZSBz Y28zODYiCisjID8gZm9yIFNDTyBYZW5peC8zODYgMi4zLngsICJtYWtlIHNjbzNyMiIKKyMgPyBm b3IgU0NPIFhlbml4LzM4NiBTQ08gMi4zLjMgb3IgMi4zLjQgd2l0aCBnY2MgMS4zNyBvciBsYXRl ciwKKyMgICAgICJtYWtlIHNjbzM4NmdjYyIgb3IgKHRvIGFkZCBjdXJzZXMpICJtYWtlIHNjbzM4 NmdjY2MiLgorIyA/IGZvciBTQ08gWGVuaXgvMzg2IG9yIFVOSVgvMzg2IHdpdGggRXhjZWxhbiBU Q1AvSVAsICJtYWtlIHNjbzNyMm5ldCIKKyMgICAgIG9yICh0byBhZGQgY3Vyc2VzIHN1cHBvcnQp ICJtYWtlIHNjbzNyMm5ldGMiIG9yICJzY28zODZuZXRjIgorIyArIGZvciBTQ08gWEVOSVggMi4z LjQsICJtYWtlIHNjbzIzNCIgb3IgIm1ha2Ugc2NvMjM0YyIgdG8gYWRkIGN1cnNlcy4KKyMgPyBm b3IgU0NPIFhFTklYIDIuMy40IHdpdGggU0NPIFRDUC9JUCAmIGN1cnNlcywgIm1ha2Ugc2NvMjM0 bmV0YyIuCisjID8gZm9yIFNDTyBYZW5peCAyLjMueCB3aXRoIFJhY2FsLUludGVyTGFuIFRDUC9J UCwgIm1ha2Ugc2NvM3IybmV0cmkiCisjICAgZm9yIG90aGVyIFVOSVggdmFyaWV0aWVzIHdpdGgg UmFjYWwgSW50ZXJsYW4gVENQL0lQLCByZWFkIHNjbzNyMm5ldHJpIGVudHJ5CisjID8gZm9yIFND TyBYZW5peCAyLjMueCB3aXRoIFNDTyAoTGFjaG1hbikgVENQL0lQLCAibWFrZSBzY28zcjJsYWki CisjICAgICBvciAodG8gYWRkIGN1cnNlcykgIm1ha2Ugc2NvM3IybGFpYyIKKyMgICBmb3IgU0NP IFVOSVguLi4gIEFMU08gUkVBRCBDT01NRU5UUyBpbiB0aGUgU0NPIFVOSVggZW50cmllcyBmb3Ig bW9yZSBpbmZvIQorIyA/IGZvciBTQ08gVU5JWC8zODYgMy4yLjAgb3IgMy4yLjEsICJtYWtlIHNj bzNyMiIgb3IgIm1ha2Ugc2NvM3IyeCIKKyMgPyBmb3IgU0NPIFVOSVgvMzg2IDMuMi4yLCAibWFr ZSBzY28zcjIyIiBvciAibWFrZSBzY28zcjIyZ2NjIgorIyAgICAgb3IgIm1ha2Ugc2NvM3IyMmMi CisjID8gZm9yIFNDTyBVTklYLzM4NiAzLjIuMiB3aXRoIFNDTyBUQ1AvSVAsICJtYWtlIHNjbzNy MjJuZXQiCisjICAgICBvciAibWFrZSBzY28zcjIybmV0YyIgKGN1cnNlcykKKyMgPyBmb3IgU0NP IE9EVCAxLjEsICJtYWtlIHNjbzNyMjJuZXQiIG9yICJtYWtlIHNjbzNyMjJuZXRjIiAoY3Vyc2Vz KQorIyA/IGZvciBTQ08gVU5JWC8zODYgMy4yIFY0LngsIG5vIG5ldHdvcmsgc3VwcG9ydCwgIm1h a2Ugc2NvMzJ2NCIKKyMgPyAgIG9yICJtYWtlIHNjbzMydjRucyIgKHRoaXMgb25lIHVzZXMgbm8g c2VsZWN0KCkgb3Igc29ja2V0cyBsaWJyYXJ5KQorIyA/IGZvciBTQ08gVU5JWC8zODYgMy4yIFY0 Lnggd2l0aCBUQ1AvSVAsICJtYWtlIHNjbzMydjRuZXQiCisjICAgICAoYWxzbyBzY28zMnY0Z2Nj LCBzY28zMnY0bmV0Z2NjKQorIyA/IGZvciBTQ08gVU5JWC8zODYgMy4yIFY1LjAgLSBzZWUgU0NP IE9wZW5TZXJ2ZXIuCisjID8gZm9yIFNDTyBVTklYIDMuMnY0Lnggd2l0aCBUQ1AvSVAsIDxkaXJl bnQuaD4gZm9yIEV4dGVuZGVkIEFjZXIgRmlsZQorIyAgICAgU3lzdGVtIChFQUZTKSwgY3Vyc2Vz LCBBTlNJIEMgY29tcGlsYXRpb24sICJtYWtlIHNjbzMydjRuZXQiCisjID8gICBvciAodG8gdXNl IHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QgbW9kdWxlKSAibWFrZSBzY28zMnY0bmV0eCIuCisjID8g Zm9yIFNDTyBVTklYIDMuMnY0LjIsICJtYWtlIHNjby1vZHQzMCIgKGluY2x1ZGVzIFRDUC9JUCku CisjID8gZm9yIFNDTyBNUFggMy4wIC0gVGhlIFNDTyBVTklYIGJpbmFyeSBydW5zIG9uIHRoZSBj b3JyZXNwb25kaW5nIE1QWCBzeXN0ZW0uCisjCisjIE5PVEU6IEFsc28gc2VlIGJlbG93IGZvciBv dGhlciBlbnRyaWVzIHRoYXQgYXJlIHZhcmlhdGlvbnMgb24gdGhlc2UuCisjIEFsc28gYmUgc3Vy ZSB0byByZWFkIHRoZSBjb21tZW50cyBhY2NvbXBhbnlpbmcgZWFjaCBTQ08gZW50cnkuCisjIEFs c28gc2VlIFVuaXh3YXJlIHNlY3Rpb24uCisjCisjID8gZm9yIFNDTyBPRFQgMi4wLCAibWFrZSBz Y28zMnY0bmV0IgorIyA/IGZvciBTQ08gT0RUIDMuMCwgIm1ha2Ugc2NvLW9kdDMwIgorIyA/IGZv ciBTQ08gT3BlblNlcnZlciA1LjAgKE9TUjUpLCAibWFrZSBzY28zMnY1MDAiCisjID8gZm9yIFND TyBPcGVuU2VydmVyIDUuMCAoT1NSNSkgd2l0aCBuZXR3b3JraW5nLCAibWFrZSBzY28zMnY1MDBu ZXQiCisjID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMCAoT1NSNSksIGdjYywgIm1ha2Ugc2NvMzJ2 NTAwZ2NjIgorIyA/IGZvciBTQ08gT3BlblNlcnZlciA1LjAgKE9TUjUpLCBnY2MsIHdpdGggbmV0 d29ya2luZywgIm1ha2Ugc2NvMzJ2NTAwbmV0Z2NjIgorIyA/IGZvciBTQ08gT3BlblNlcnZlciA1 LjAgKE9TUjUpLCBhcyBhYm92ZSwgRUxGLCAibWFrZSBzY28zMnY1MDBuZXRnY2NlbGYiCisjID8g Zm9yIFNDTyBPcGVuU2VydmVyIDUuMC4yLCB1c2UgIm1ha2Ugc2NvMzJ2NTAyeHh4IiBlbnRyaWVz IGFzIGFib3ZlLgorIyA/IGZvciBTQ08gT3BlblNlcnZlciA1LjAuNCwgdXNlICJtYWtlIHNjbzMy djUwNHh4eCIgZW50cmllcyBhcyBhYm92ZS4KKyMgPyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wLjUs IHVzZSAibWFrZSBzY28zMnY1MDV4eHgiIGVudHJpZXMgYXMgYWJvdmUuCisjICAgICBVc2UgdGhl IHNjbzMydjUwNXVka3h4eCBlbnRyaWVzIGlmIHlvdSBoYXZlIHRoZSBVREsgcmF0aGVyIHRoYW4g L2Jpbi9jYy4KKyMgPyBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS4wLjYsIHVzZSAibWFrZSBzY28zMnY1 MDZ4eHgiIGVudHJpZXMgYXMgYWJvdmUuCisjID8gZm9yIFNDTyBPcGVuU2VydmVyIDUuMC42YSx1 c2UgIm1ha2Ugc2NvMzJ2NTA2YXh4eCIgZW50cmllcyBhcyBhYm92ZS4KKyMgPyBmb3IgU0NPIE9w ZW5TZXJ2ZXIgNS4wLjcsIHVzZSAibWFrZSBzY28zMnY1MDciLCAibWFrZSBzY28zMnY1MDduZXQi CisjID8gZm9yIFNDTyAoVW5pdmVsKSBVbml4V2FyZSAxLngsICJtYWtlIHVuaXh3YXJlIiBvciAi bWFrZSB1bml4d2FyZW5ldGMiLgorIyAgICAgSWYgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhp cyBpbiBDLUsgNysgc2VlIG5vdGVzIGF0IHVuaXh3YXJlIGVudHJ5LgorIyArIGZvciBTQ08gT3Bl blNlcnZlciA2LjAuMCwgIm1ha2Ugc2NvX29zcjYwMCIKKyMgPyBmb3IgU0NPIFVuaXhXYXJlIDIu MC54LCAibWFrZSB1dzIwIgorIyA/IGZvciBTQ08gVW5peFdhcmUgMi4xLjAsICJtYWtlIHV3MjEi CisjID8gZm9yIFNDTyBVbml4V2FyZSAyLjEuMywgIm1ha2UgdXcyMTMiCisjICsgZm9yIFNDTyBV bml4V2FyZSA3LCAibWFrZSB1dzciIChpbmNsdWRlcyBsYXJnZSBmaWxlIHN1cHBvcnQpCisjID8g Zm9yIFNDTyBVbml4V2FyZSA3IHdpdGggSUtTRCBzdXBwb3J0LCAibWFrZSB1dzdpa3NkIiBvciAi bWFrZSB1dzdpa3NkdWRrIgorIyA/IGZvciBTQ08gVW5peFdhcmUgNyB3aXRoIE9wZW5TU0wsICJt YWtlIHV3N3NzbCIKKyMgPyBmb3IgU0NPIChDYWxkZXJhKSBPcGVuIFVOSVggOCwgIm1ha2Ugb3U4 IgorIyA/IGZvciBTaGFycCBaYXVydXMgU0w1NTAwIFBEQSwgIm1ha2UgenNsNTUwMCIuCisjID8g Zm9yIFNlcXVlbnQgd2l0aCBEWU5JWC9wdHggMS4yLjEsICJtYWtlIGR5bml4cHR4MTIiCisjID8g Zm9yIFNlcXVlbnQgd2l0aCBEWU5JWC9wdHggMS4zIG9yIDEuNCB3aXRoIFRDUC9JUCwgIm1ha2Ug ZHluaXhwdHgxMyIKKyMgPyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCAyLjAgb3IgMi4xIHdp dGggVENQL0lQLCAibWFrZSBkeW5peHB0eDIwIgorIyAgICAgb3IgImR5bml4cHR4MjBjIgorIyA/ IGZvciBTZXF1ZW50IHdpdGggRFlOSVgvcHR4IDIuMS42IG9uIGk0ODYsICJkeW5peHB0eDIxNmMi CisjID8gZm9yIFNlcXVlbnQgd2l0aCBEWU5JWC9wdHggVjQuMS4zIHdpdGggVENQL0lQLCAibWFr ZSBkeW5peHB0eDQxYyIKKyMgPyBmb3IgU2VxdWVudCB3aXRoIERZTklYL3B0eCBWNC40LjIgd2l0 aCBUQ1AvSVAsICJtYWtlIGR5bml4cHR4NDQiCisjID8gZm9yIFNlcXVlbnQgQmFsYW5jZSA4MDAw IG9yIEI4IHdpdGggRFlOSVggMy4wLnh4LCAibWFrZSBkeW5peDMiCisjICAgIG9yICJtYWtlIGR5 bml4M25vYWN1IgorIyA/IGZvciBTZXF1ZW50IFN5bW1ldHJ5IFM4MSB3aXRoIERZTklYIDMuMC54 eCwgIm1ha2UgZHluaXgzIgorIyA/IGZvciBTZXF1ZW50IERZTklYIDMuMS54eCwgIm1ha2UgZHlu aXgzMSIgb3IgIm1ha2UgZHluaXgzMWMiCisjID8gZm9yIFNpZW1lbnMvTml4ZG9yZiBTSU5JWC1M IEludGVsIFY1LjQxLCAibWFrZSBzaW5peDU0MWkiCisjICsgZm9yIFNpZW1lbnMvTml4ZG9yZiBT SU5JWC1OIE1JUFMgVjUuNDIsICJtYWtlIHNpbml4NTQyIgorIyA/IGZvciBTaWVtZW5zL05peGRv cmYgU0lOSVgtUCBNSVBTIFY1LjQyIHdpdGggZ2NjLCAibWFrZSBzaW5peDU0MmciCisjID8gZm9y IFNpZW1lbnMvTml4ZG9yZiBTSU5JWC1aIEludGVsIFY1LjQyLCAibWFrZSBzaW5peDU0MmkiCisj ID8gZm9yIFNpZW1lbnMvTml4ZG9yZiBSZWxpYW50IFVOSVggVjUuNDMsICJtYWtlIHNuaTU0MyIK KyMgPyBmb3IgU2llbWVucy9OaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40NCwgIm1ha2Ugc25pNTQ0 IgorIyA/IGZvciBTaWxpY29uIEdyYXBoaWNzIElyaXMgU3lzdGVtIFYgSVJJWCAzLjIgb3IgZWFy bGllciwgIm1ha2UgaXJpcyIKKyMgPyBmb3IgU2lsaWNvbiBHcmFwaGljcyBTeXMgViBSMyB3aXRo IElSSVggMy4zIG9yIGxhdGVyLCAibWFrZSBzeXM1cjMiCisjID8gZm9yIFNpbGljb24gR3JhcGhp Y3MgSXJpcyBJbmRpZ28gd2l0aCBJUklYIDQuMCBvciA1LjAsICJtYWtlIGlyaXg0MCIgb3IKKyMg ICAgICh0byBpbmNsdWRlIFllbGxvdyBQYWdlcyBhbmQgQ3Vyc2VzKSAibWFrZSBpcml4NDB5cGMi CisjID8gZm9yIFNpbGljb24gR3JhcGhpY3MgSXJpcyBJbmRpZ28gb3IgRWxhbiB3aXRoIElSSVgg NC4wLnggd2l0aCBtaWNyb2NvZGUKKyMgICAgIG9wdGltaXphdGlvbiBhbmQgLU80LCAibWFrZSBp cml4NDB1IiBvciAiaXJpeDQwdWMiIChhbmQgcmVhZCBub3RlcworIyAgICAgYWNjb21wYW55aW5n IHRoZXNlIGVudHJpZXMpLgorIyA/IGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNS4xLCAibWFr ZSBpcml4NTEiIG9yICJpcml4NTF4IiAobm8gb3B0aW1pemUpCisjID8gZm9yIFNpbGljb24gR3Jh cGhpY3MgSVJJWCA1LjIsICJtYWtlIGlyaXg1MiIKKyMgPyBmb3IgU2lsaWNvbiBHcmFwaGljcyBJ UklYIDUuMywgIm1ha2UgaXJpeDUzIiBvciAiaXJpeDUzeCIgKG5vIG9wdGltaXplKQorIyA/IGZv ciBTaWxpY29uIEdyYXBoaWNzIElSSVggNi4wLCAibWFrZSBpcml4NjAiLgorIyA/IGZvciBTaWxp Y29uIEdyYXBoaWNzIElSSVggNi4yLCAibWFrZSBpcml4NjIiLgorIyA/IGZvciBTaWxpY29uIEdy YXBoaWNzIElSSVggNi4zLCAibWFrZSBpcml4NjMiLgorIyA/IGZvciBTaWxpY29uIEdyYXBoaWNz IElSSVggNi40LCAibWFrZSBpcml4NjQiIG9yICJtYWtlIGlyaXg2NGdjYyIuCisjICsgZm9yIFNp bGljb24gR3JhcGhpY3MgKFNHSSkgSVJJWCA2LjUsICJtYWtlIGlyaXg2NSIKKyMgKyAgIG9yICJt YWtlIGlyaXg2NW1pcHMyIiB0byBmb3JjZSBNSVBTMiwgb3IgIm1ha2UgaXJpeDY1Z2NjIiBmb3Ig R0NDLgorIyArIGZvciBTaWxpY29uIEdyYXBoaWNzIChTR0kpIElSSVggNi41LCAibWFrZSBpcml4 NjUiIG9yICJtYWtlIGlyaXg2NW1pcHMyIgorIyA/IGZvciBTR0kgSVJJWCA2LjUgd2l0aCBTU0wv VExTLCBTUlAsIGFuZCBaTElCICJtYWtlIGlyaXg2NStzc2wrc3JwK3psaWIiCisjID8gZm9yIFNv bGFyaXMgMi4wLTIuMyBvbiBTUEFSQyBvciBJbnRlbCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlz MngiLAorIyA/ICAgb3IgdG8gYWRkIFN1bkxpbmsgWC4yNSA4LjB4IHN1cHBvcnQsICJtYWtlIHNv bGFyaXMyeDI1Ii4KKyMgPyBmb3IgU29sYXJpcyAyLjQgYnVpbHQgd2l0aCBnY2MsICJtYWtlIHNv bGFyaXMyNGciLgorIyA/IGZvciBTb2xhcmlzIDIuMC0yLjMgb24gU1BBUkMgb3IgSW50ZWwsIEdO VSBDQywgIm1ha2Ugc29sYXJpczJ4ZyIuCisjID8gZm9yIFNvbGFyaXMgMi40IHdpdGggWC4yNSwg Im1ha2Ugc29sYXJpczI0eDI1Ii4KKyMgPyBmb3IgU29sYXJpcyAyLjUgb24gU1BBUkMgb3IgSW50 ZWwsIFN1blBybyBDQywgIm1ha2Ugc29sYXJpczI1Ii4KKyMgPyAgIG9yIHRvIGFkZCBTdW5MaW5r IFguMjUgOC4weCBzdXBwb3J0LCAibWFrZSBzb2xhcmlzMjV4MjUiLgorIyA/IGZvciBTb2xhcmlz IDIuNSBvbiBTUEFSQyBvciBJbnRlbCwgR05VIENDLCAibWFrZSBzb2xhcmlzMjVnIi4KKyMgPyBm b3IgU29sYXJpcyAyLjYgb24gU1BBUkMgb3IgSW50ZWwsICJtYWtlIHNvbGFyaXMyNiIuCisjID8g Zm9yIFNvbGFyaXMgNyBvbiBTUEFSQyBvciBJbnRlbCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlz NyIuCisjID8gZm9yIFNvbGFyaXMgNyBvbiBTUEFSQyBvciBJbnRlbCwgR05VIENDLCAibWFrZSBz b2xhcmlzN2ciLgorIyA/IGZvciBTb2xhcmlzIDggb24gU1BBUkMgb3IgSW50ZWwsIFN1blBybyBD QywgIm1ha2Ugc29sYXJpczgiLgorIyA/IGZvciBTb2xhcmlzIDggb24gU1BBUkMgb3IgSW50ZWws IEdOVSBDQywgIm1ha2Ugc29sYXJpczhnIi4KKyMgKyBmb3IgU29sYXJpcyA5IG9uIFNQQVJDIChv ciBJbnRlbD8pLCAzMi1iaXQsIFN1blBybyBDQywgIm1ha2Ugc29sYXJpczkiLgorIyArIGZvciBT b2xhcmlzIDkgb24gU1BBUkMgKG9yIEludGVsPyksIDMyLWJpdCwgR05VIENDLCAibWFrZSBzb2xh cmlzOWciLgorIyA/IGZvciBTb2xhcmlzIDkgb24gU1BBUkMgKG9yIEludGVsPyksIDY0LWJpdCwg R05VIENDLCAibWFrZSBzb2xhcmlzOWc2NCIuCisjICsgZm9yIFNvbGFyaXMgMTAgb24gU1BBUkMg KG9yIEludGVsPyksIDMyLWJpdCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlzMTAiLgorIyArIGZv ciBTb2xhcmlzIDEwIG9uIFNQQVJDIDY0LWJpdCwgU3VuUHJvIENDLCAibWFrZSBzb2xhcmlzMTBf NjQiLgorIyArIGZvciBTb2xhcmlzIDEwIG9uIFNQQVJDIChvciBJbnRlbD8pLCAzMi1iaXQsIEdO VSBDQywgIm1ha2Ugc29sYXJpczEwZyIuCisjID8gZm9yIFNvbGFyaXMgMTAgb24gU1BBUkMgKG9y IEludGVsPyksIDY0LWJpdCwgR05VIENDLCAibWFrZSBzb2xhcmlzMTBnNjQiLgorIyA/IGZvciBT b2xib3VybmUgNC81MDAgd2l0aCBPUy9NUCA0ICJtYWtlIHN1bm9zNCIKKyMgPyBmb3IgU29sYm91 cm5lIDQvNTAwIHdpdGggT1MvTVAgNC4xICJtYWtlIHN1bm9zNDEiIG9yICJtYWtlIHN1bm9zNDFj IgorIyA/IGZvciBTT05ZIE5FV1Mgd2l0aCBORVdTLU9TIDQuMC4xQywgIm1ha2Ugc29ueW5ld3Mi CisjID8gZm9yIFNPTlkgTkVXUyB3aXRoIE5FV1MtT1MgNC4xLjJDLCAibWFrZSBzb255bmV3cyIK KyMgPyBmb3IgU3BlcnJ5L1VOSVNZUyA1MDAwLzIwLCBVVFMgViA1LjIgM1IxLCAibWFrZSBzeXM1 IgorIyA/IGZvciBTcGVycnkvVU5JU1lTIDUwMDAvMzAvMzUvNTAvNTUsIFVUUyBWIDUuMiAyLjAx LCAibWFrZSB1bmlzeXM1cjIiCisjID8gZm9yIFNwZXJyeS9VTklTWVMgNTAwMC84MCB3aXRoIFN5 c3RlbSBWIFIzLCAibWFrZSBzeXM1cjMiCisjID8gZm9yIFNwZXJyeS9VTklTWVMgNTAwMC85NSB3 aXRoIFN5c3RlbSBWIFIzLCAibWFrZSBzeXM1cjMiCisjICAgICBGb3IgVU5JU1lTIFNWUjMgaXQg bWlnaHQgYmUgbmVjZXNzYXJ5IHRvICJtYWtlIHN5czVyMyBLRkxBR1M9LVVEWU5BTUlDIgorIyA/ IGZvciBTdGFyZGVudCAxNTIwLCAibWFrZSBzeXM1cjMiCisjID8gZm9yIFN0cmF0dXMgRlRYIDIu eCwgdHJ5ICJtYWtlIGZ0eCIgb3IgZWxzZSAibWFrZSBzeXM1cjQiIG9yICJzeXM1cjRzeCIKKyMg PyBmb3IgU3RyYXR1cyBGVFggMy54LCBQQS1SSVNDIDEuMCBvciAyLjAsICJtYWtlIGZ0eCIgb3Ig Im1ha2UgZnR4dGNwIgorIyA/IGZvciBTdW4gd2l0aCBTdW4gVU5JWCAzLjUgYW5kIGdjYywgIm1h a2Ugc3Vub3MzZ2NjIgorIyA/IGZvciBTdW4gd2l0aCBwcmUtNC4wIFN1bk9TIHZlcnNpb25zLCAi bWFrZSBic2QiIChvciBhcHByb3ByaWF0ZSB2YXJpYW50KQorIyA/IGZvciBTdW4gd2l0aCBTdW5P UyA0LjAsIEJTRCBlbnZpcm9ubWVudCwgIm1ha2Ugc3Vub3M0IgorIyA/IGZvciBTdW4gd2l0aCBT dW5PUyA0LjAsIEJTRCwgd2l0aCBTdW5MaW5rIFguMjUsIG1ha2Ugc3Vub3M0eDI1CisjID8gZm9y IFN1biB3aXRoIFN1bk9TIDQuMSBvciA0LjEuMSwgQlNEIGVudmlyb25tZW50LCAibWFrZSBzdW5v czQxIgorIyAgICAgb3IgIm1ha2Ugc3Vub3M0MWMiIChjdXJzZXMpIG9yICJtYWtlIHN1bm9zNDFn Y2MiIChjb21waWxlIHdpdGggZ2NjKQorIyA/IGZvciBTdW4gd2l0aCBTdW5PUyA0LjEueCwgQlNE LCB3aXRoIFN1bkxpbmsgWC4yNSA3LjAwIG9yIGVhcmxpZXIsCisjICAgICAibWFrZSBzdW5vczQx eDI1IiBvciAibWFrZSBzdW5vczQxeDI1YyIgKGN1cnNlcykKKyMgPyBmb3IgU3VuIHdpdGggU3Vu T1MgNC4xLCA0LjEuMSwgQVQmVCBTeXMgViBSMyBlbnZpcm9ubWVudCwgIm1ha2Ugc3Vub3M0MXM1 IgorIyA/IGZvciBTdW4gd2l0aCBTdW5PUyA0LjEuMiwgIm1ha2Ugc3Vub3M0MSIgb3IgYW55IG9m IGl0cyB2YXJpYXRpb25zLgorIyAgICAgTk9URTogIEFsbCBTdW5PUyA0Lnggc3lzdGVtcyAtLSBT aGFyZWQgbGlicmFyaWVzIGFyZSB1c2VkIGJ5IGRlZmF1bHQuCisjICAgICAgIElmIHRoaXMgY2F1 c2VzIHByb2JsZW1zLCBhZGQgLUJzdGF0aWMgdG8gQ0ZMQUdTLgorIyAgICAgTk9URTI6IFdoZW4g YnVpbGRpbmcgQy1LZXJtaXQgdW5kZXIgU3VuT1MgZm9yIHRoZSBCU0QgdW5pdmVyc2UsCisjICAg ICAgIGJ1dCAvdXNyLzViaW4vY2MgaXMgYWhlYWQgb2YgL3Vzci91Y2IvY2MgaW4geW91ciBQQVRI LCBhZGQKKyMgICAgICAgIkNDPS91c3IvdWNiL2NjIENDMj0vdXNyL3VjYi9jYyIgdG8gdGhlIG1h a2UgZW50cnkuCisjICAgICBOT1RFMzogSWYgYW4gZXhlY3V0YWJsZSBidWlsdCBvbiBvbmUgdHlw ZSBvZiBTdW4gaGFyZHdhcmUgZG9lcyBub3Qgd29yaworIyAgICAgICBvbiBhbm90aGVyIHR5cGUs IHJlYnVpbGQgdGhlIHByb2dyYW0gZnJvbSBzb3VyY2Ugb24gdGhlIHRhcmdldCBtYWNoaW5lLgor IyAgIGZvciBTdW4gd2l0aCBTb2xhcmlzIDEueCB1c2UgU3VuT1MgNC4xIGVudHJpZXMuCisjICAg Zm9yIFN1biB3aXRoIFNvbGFyaXMgMi4wIGFuZCBoaWdoZXIgdXNlIFNvbGFyaXMgZW50cmllcy4K KyMgKyBmb3IgU3VuIFNQQVJDIHdpdGggTGludXgsICJtYWtlIGxpbnV4IgorIyA/IGZvciBTdW4g U1BBUkMgd2l0aCBPUEVOU1RFUC9NYWNoIDQuMSwgIm1ha2UgbmV4dHF1YWRmYXQiCisjID8gZm9y IFN1biBTUEFSQyB3aXRoIE9QRU5TVEVQL01hY2ggNC4yLCAibWFrZSBvcGVuc3RlcDQyIgorIyAt IGZvciBUYW5keSAxNi82MDAwIHdpdGggWGVuaXggMy4wLCAibWFrZSB0cnMxNiIgKEMtS2VybWl0 IDcuMCBpcyB0b28gYmlnKQorIyA/IGZvciBUZWt0cm9uaXggNjEzMC80MTMyLzQzeHggKGUuZy40 MzAxKSB3aXRoIFVUZWsgT1MsICJtYWtlIHV0ZWsiCisjICAgICBvciAoZm9yIG1vZGVscyB3aXRo b3V0IGhhcmR3YXJlIGZsb3cgY29udHJvbCksICJtYWtlIHV0ZWtub2h3ZmMiCisjID8gZm9yIFRl a3Ryb25peCBYRDg4IHNlcmllcyB3aXRoIFVUZWtWIE9TLCAibWFrZSB1dGVrdnIzIgorIyA/IGZv ciBUcmkgU3RhciBGbGFzaCBDYWNoZSB3aXRoIEVzaXggU1ZSMy4yLCAibWFrZSBzeXM1cjMiCisj IE5PVEU6IFRoZSBUcnU2NCBidWlsZHMgaGF2ZSBiZWVuIGZhaWxpbmcgc2luY2UgMjAxMCwgYnV0 ICJtYWtlIGRlYy1vc2YiIGlzIE9LCisjID8gZm9yIFRydTY0IFVOSVggNC4wRSwgIm1ha2UgdHJ1 NjQtNDBlIgorIyA/IGZvciBUcnU2NCBVTklYIDQuMEYsICJtYWtlIHRydTY0LTQwZiIKKyMgPyBm b3IgVHJ1NjQgVU5JWCA0LjBHLCAibWFrZSB0cnU2NC00MGciCisjID8gZm9yIFRydTY0IFVOSVgg NS4wQSwgIm1ha2UgdHJ1NjQtNTBhIgorIyA/IGZvciBUcnU2NCBVTklYIDUuMUEsICJtYWtlIHRy dTY0LTUxYSIKKyMgPyBmb3IgVHJ1NjQgVU5JWCA1LjFCLCAibWFrZSB0cnU2NC01MWIiCisjID8g Zm9yIFVuaXN0YXIsICJtYWtlIHN5czUiCisjID8gZm9yIFVuaXN5cyBTLzQwNDAgNjgwNDAgQ1RJ WCBTVlIzLjIgNi40LjEsICJtYWtlIGN0aXgiIG9yICJtYWtlIHN5czVyMyIKKyMgPyBmb3IgVW5p c3lzIFU1MDAwIFVOSVggU1ZSMyA2LngsICJtYWtlIHN5czVyMyIgb3IgIm1ha2Ugc3lzNXIzYyIK KyMgPyBmb3IgVW5pc3lzIFU2MDAwIFVOSVggU1ZSNCAxLngsICJtYWtlIHN5czVyNG54IiBvciAi bWFrZSBzeXM1cjRueG5ldGMiCisjICAgZm9yIFVuaXN5cyAuLi4gKGFsc28gc2VlIFNwZXJyeSkK KyMgICBmb3IgVW5pdmVsIC0gc2VlIFVuaXhXYXJlCisjICAgZm9yIFVuaXh3YXJlIC0gc2VlIFND TworIyA/IGZvciBWYWxpZCBTY2FsZHN0YXIsICJtYWtlIHZhbGlkIgorIyA/IGZvciBXaGl0ZWNo YXBlbCBNRzAxIEdlbml4IDEuMywgIm1ha2Ugd2hpdGUiCisjID8gZm9yIFppbG9nIFpFVVMgMy4y MSwgIm1ha2Ugemlsb2ciCisjCisjIFRoZSByZXN1bHQgc2hvdWxkIGJlIGEgcnVubmFibGUgcHJv Z3JhbSBjYWxsZWQgIndlcm1pdCIgaW4gdGhlIGN1cnJlbnQKKyMgZGlyZWN0b3J5LiAgQWZ0ZXIg c2F0aXNmYWN0b3J5IHRlc3RpbmcsIHlvdSBjYW4gcmVuYW1lIHdlcm1pdCB0byAia2VybWl0Igor IyBhbmQgcHV0IGl0IGluIHNvbWUgZGlyZWN0b3J5IHRoYXQncyBpbiBldmVyeWJvZHkncyBQQVRI LCBzdWNoIGFzCisjIC91c3IvbG9jYWwgb3IgL29wdC9sb2NhbC4KKyMKKyMgVG8gcmVtb3ZlIGlu dGVybWVkaWF0ZSBhbmQgb2JqZWN0IGZpbGVzLCAibWFrZSBjbGVhbiIuCisjIElmIHlvdXIgQyBj b21waWxlciBwcm9kdWNlcyBmaWxlcyB3aXRoIGFuIGV4dGVuc2lvbiBvdGhlciB0aGFuICJvIiwK KyMgdGhlbiAibWFrZSBjbGVhbiBFWFQ9dSIsICJtYWtlIGNsZWFuIEVYVD1zIiwgb3Igd2hhdGV2 ZXIuCisjCisjIFRvIHJ1biBsaW50IG9uIHRoZSBzb3VyY2UgZmlsZXMsICJtYWtlIGxpbnRzdW4i LCAibWFrZSBsaW50YnNkIiwKKyMgIm1ha2UgbGludHM1IiwgYXMgYXBwcm9wcmlhdGUuCisjCisj ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBTRUNVUkUgVEFSR0VUUworIworIyBC ZWdpbm5pbmcgd2l0aCBDLUtlcm1pdCA3LjAsIHNlY3VyZSB0YXJnZXRzIGFyZSBpbmNsdWRlZCwg YXMgYXJlIHRoZQorIyBzb3VyY2UgbW9kdWxlcyAoY2t1YXQqLltjaF0sIGNrXyouW2NoXSkgbmVl ZGVkIHRvIGJ1aWxkIHRoZW0uICBTZWN1cmUKKyMgdGFyZ2V0IG5hbWVzIGFyZSBsaWtlIHRoZSBy ZWd1bGFyIG5hbWVzLCBidXQgd2l0aCBzZWN1cml0eSBmZWF0dXJlcworIyBpbmRpY2F0ZWQgYnkg cGx1cyAoKykgc2lnbnMuICBUaGUgZmVhdHVyZXMgYXJlOgorIworIyBrcmI0ICAgICBNSVQgS2Vy YmVyb3MgSVYKKyMga3JiNSAgICAgTUlUIEtlcmJlcm9zIFYKKyMgb3BlbnNzbCAgT3BlblNTTCAo U1NML1RMUykKKyMgemxpYiAgICAgWkxJQiBjb21wcmVzc2lvbiBmb3IgU1NML1RMUworIyBzcnAg ICAgICBTdGFuZm9yZCBTZWN1cmUgUmVtb3RlIFBhc3N3b3JkCisjIHBhbSAgICAgIFBBTSAocGx1 Z2dhYmxlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZSkKKyMgc2hhZG93ICAgU2hhZG93IFBhc3N3b3Jk IEZpbGUKKyMKKyMgWW91IGNhbiBidWlsZCB0aGVzZSB0YXJnZXRzIGlmIHlvdSBoYXZlIHRoZSBL ZXJtaXQgc291cmNlIGZpbGVzIGFuZCB0aGUKKyMgcmVxdWlyZWQgbGlicmFyaWVzIChLZXJiZXJv cywgT3BlblNTTCwgU1JQLCBldGMpIGFuZCBoZWFkZXIgZmlsZXMuICBTZWU6CisjICAgaHR0cDov L3d3dy5jb2x1bWJpYS5lZHUva2VybWl0L3NlY3VyaXR5Lmh0bWwKKyMgZm9yIHNwZWNpZmljIGRl dGFpbHMgcmVnYXJkaW5nIHN1cHBvcnRlZCB2ZXJzaW9ucy4KKyMKKyMgTk9URTogT3BlblNTTCAw LjkuNiBhbmQgZWFybGllciBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCAwLjkuNyBhbmQgbGF0ZXIu CisjIEMtS2VybWl0IGNvZGUgd2FzIG9yaWdpbmFsbHkgZGVzaWduZWQgZm9yIDAuOS42LiAgVG8g YnVpbGQgd2l0aCAwLjkuNyB5b3UKKyMgbXVzdCBhZGQgLURPUEVOU1NMXzA5NyB0byBhdm9pZCBt aXNzaW5nIHN5bWJvbHMgaW4gdGhlIERFUyBsaWJyYXJ5IGFuZCB0bworIyB1c2UgdGhlIGVudHJ5 IHBvaW50cyB0aGF0IHdlcmUgcmVuYW1lZCB0byBhdm9pZCBjb25mbGljdCB3aXRoIEtlcmJlcm9z IDQuCisjIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45LjgsIGFkZCAtRE9QRU5TU0xfMDk4LCB3aGlj aCBpcyBhIHN5bm9ueW0gZm9yCisjIC1ET1BFTlNTTF8wOTcuICBJZiB5b3UgaGF2ZSAxLjAuMCBv ciBsYXRlciwgYWRkIC1ET1BFTlNTTF8xMDAsIHdoaWNoIGlzCisjIGFub3RoZXIgc3lub255bS4K KworIyBJbiBPcGVuU1NMIGJ1aWxkcyBhZGQgLWxkbCBpZiB5b3UgZ2V0IHVucmVzb2x2ZWQgcmVm ZXJlbmNlcyBmb3IKKyMgZGxvcGVuLCBkbGNsb3NlLCBkbHN5bSwgYW5kL29yIGRsZXJyb3IuCisj CisjIEluIG9yZGVyIHRvIGJ1aWxkIGEgc2VjdXJlIHZlcnNpb24gb2YgS2VybWl0LCB5b3UgbmVl ZCB0byBrbm93IHRoZSBsb2NhdGlvbgorIyBvZiB0aGUgaGVhZGVyIChpbmNsdWRlKSBmaWxlcyBh bmQgbGlicmFyaWVzIGZvciB0aGUgZGVzaXJlZCBmb3JtIG9mCisjIHNlY3VyaXR5LiAgVW5sZXNz IHlvdSBzcGVjaWZ5IGEgbG9jYXRpb24sIHRoaXMgbWFrZWZpbGUgbG9va3MgaW4gL3Vzci9sb2Nh bAorIyBhbmQgaWYgdGhlIHJlcXVpcmVkIGZpbGVzIGFyZSBub3QgZm91bmQsIHRoZSBidWlsZCBm YWlscy4KKyMKKyMgSWYgdGhlIHNlY3VyZSBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgYXJlIG5vdCBv biB5b3VyIGNvbXB1dGVyLCB5b3UgaGF2ZQorIyB0byBkb3dubG9hZCBhbmQgaW5zdGFsbCB0aGVt LCBmb3IgZXhhbXBsZSBmcm9tIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcgLgorIworIyBUaGUgZm9s bG93aW5nIHN5bWJvbHMgYXJlIHVzZWQgdG8gc3BlY2lmeSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmls ZSBsb2NhdGlvbnM6CisjIAorcHJlZml4ICA9IC91c3IvbG9jYWwKK3NycHJvb3QgPSAkKHByZWZp eCkKK3NzbHJvb3QgPSAkKHByZWZpeCkKK21hbnJvb3QgPSAkKHByZWZpeCkKKworSzRMSUI9LUwv dXNyL2tlcmJlcm9zL2xpYgorSzRJTkM9LUkvdXNyL2tlcmJlcm9zL2luY2x1ZGUKK0s1TElCPS1M L3Vzci9rZXJiZXJvcy9saWIKK0s1SU5DPS1JL3Vzci9rZXJiZXJvcy9pbmNsdWRlCitTUlBMSUI9 LUwkKHNycHJvb3QpL2xpYgorU1JQSU5DPS1JJChzcnByb290KS9pbmNsdWRlCitTU0xMSUI9LUwk KHNzbHJvb3QpL3NzbC9saWIKK1NTTElOQz0tSSQoc3Nscm9vdCkvc3NsL2luY2x1ZGUKKworIyBU byBvdmVycmlkZSB0aGVzZSBhc3NpZ25tZW50czsgZm9yIGV4YW1wbGUsIGlmIHlvdXIgT3BlblNT TCBmaWxlcyBhcmUKKyMgbm90IGluIC91c3IvbG9jYWwvc3NsLCBpbnZva2UgdGhlIGRlc2lyZWQg dGFyZ2V0IGxpa2UgdGhpczoKKyMgCisjICBtYWtlIHNvbGFyaXM5K29wZW5zc2wgIlNTTElOQz0t SS9vcHQvb3BlbnNzbC0wLjkuOGsvaW5jbHVkZSIgXAorIyAgICJTU0xMSUI9LUwvb3B0L29wZW5z c2wtMC45LjhrL2xpYiIKKyMKKyMgKGRvbid0IHNldCB0aGUgdmFyaWFibGVzIGFuZCB0aGVuIGRv ICJtYWtlIC1lIiBiZWNhdXNlIHRoYXQgYnJlYWtzIAorIyBjaGFpbmluZyBvZiBtYWtlZmlsZSB0 YXJnZXRzLikKKyMKKyMgSGVyZSBhcmUgc29tZSB1cC10by1kYXRlIHNlY3VyZSB0YXJnZXRzIGFz IG9mIFNlcCAyMDA5OiAKKyMKKyMgYWl4K29wZW5zc2w6ICAgICAgICAgICAgICAgICAgICAgICAg SUJNIEFJWCA0LjIgb3IgbGF0ZXIgd2l0aCBPcGVuU1NMCisjIGZyZWVic2Q0NCtzcnArb3BlbnNz bCAgICAgICAgICAgICAgIEZyZWVCU0QgNC40IHdpdGggU1JQIGFuZCBPcGVuU1NMCisjIGZyZWVi c2Q1MCtvcGVuc3NsICAgICAgICAgICAgICAgICAgIEZyZWVCU0QgNS4wIHdpdGggT3BlblNTTAor IyBocHV4MTEwMG8rb3BlbnNzbDogICAgICAgICAgICAgICAgICBIUC1VWCAxMS54eCB3aXRoIE9w ZW5TU0wKKyMgaHB1eDEwMDBnY2Mrb3BlbnNzbDogICAgICAgICAgICAgICAgSFAtVVggMTAueHgg d2l0aCBPcGVuU1NMIChidWlsZCB3aXRoIGdjYykKKyMgaHB1eDExMDBnY2Mrb3BlbnNzbDogICAg ICAgICAgICAgICAgSFAtVVggMTEueHggd2l0aCBPcGVuU1NMIChidWlsZCB3aXRoIGdjYykKKyMg aXJpeDZ4K2tyYjU6ICAgICAgICAgICAgICAgICAgICAgICAgSVJJWCA2Lnggd2l0aCBLZXJiZXJv cyBWCisjIGlyaXg2NStrcmI1OiAgICAgICAgICAgICAgICAgICAgICAgIGV0YyBldGMuLi4KKyMg c29sYXJpczkrb3BlbnNzbCAgICAgICAgICAgICAgICAgICAgU29sYXJpcyA5LDEwLCBvciAxMSB3 aXRoIE9wZW5zc2wgKFN1biBjYykKKyMgc29sYXJpczlnK29wZW5zc2wgICAgICAgICAgICAgICAg ICAgU29sYXJpcyA5LDEwLCBvciAxMSB3aXRoIE9wZW5zc2wgKGdjYykKKyMgbGludXgrc3NsICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTCBvbmx5CisjIGxpbnV4K2tyYjUrc3NsICAg ICAgICAgICAgICAgICAgICAgIExpbnV4IHdpdGggS2VyYmVyb3MgNSBhbmQgT3BlblNTTAorIyBs aW51eCtrcmI1OiAgICAgICAgICAgICAgICAgICAgICAgICBLZXJiZXJvcyA1IG9ubHkKKyMgCisj IFRoZSBmb2xsb3dpbmcgc2VjdXJlIExpbnV4IHRhcmdldHMgaGF2ZSBub3QgYmVlbiB1cGRhdGVk IG9yIHRlc3RlZCByZWNlbnRseS4KKyMgbGludXgra3JiNStrcmI0OgorIyBsaW51eCtzcnA6Cisj IGxpbnV4K3NycCtwYW06CisjIGxpbnV4K3NycCtnbXA6CisjIGxpbnV4K3NycCtnbXArbm8tZGVz OgorIyBsaW51eCtzcnArZ21wLWV4cG9ydDoKKyMgbGludXgrc3JwK2dtcCtwYW06CisjIGxpbnV4 K3NoYWRvdytwYW06CisjIGxpbnV4K29wZW5zc2w6CisjIGxpbnV4K29wZW5zc2wrc2hhZG93Ogor IyBsaW51eCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbToKKyMgbGludXgrc3JwK29wZW5zc2w6Cisj IGxpbnV4K2tyYjUra3JiNCtzcnA6CisjIGxpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbDoKKyMg bGludXgra3JiNStrcmI0K29wZW5zc2w6CisjIGxpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3NoYWRv dzoKKyMgbGludXgra3JiNStrcmI0K29wZW5zc2wremxpYitzaGFkb3c6CisjIGxpbnV4K2tyYjUr a3JiNCtzcnAtZXhwb3J0OgorIyBsaW51eCtrcmI1K2tyYjQrc3JwK3BhbToKKyMgbGludXgra3Ji NStrcmI0K3NycCtvcGVuc3NsK3BhbS1kZWJ1ZzoKKyMgbGludXgra3JiNStrcmI0K3NycCtvcGVu c3NsK3BhbToKKyMgbGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3psaWIrcGFtOgorIyBsaW51 eCtrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3crcGFtOgorIyBsaW51eCtrcmI1K29wZW5zc2wremxp YitzaGFkb3crcGFtOgorIyAKKyMgVGhlIGZvbGxvd2luZyBoYXZlIG5vdCBiZWVuIHRlc3RlZCBy ZWNlbnRseSBlaXRoZXIgYW5kIG1pZ2h0CisjIG5lZWQgYWRqdXN0bWVudC4KKyMKKyMgbWFjb3N4 K2tyYjUrc3NsOiAgICAgTWFjIE9TIFggMTAuMy45IG9yIGxhdGVyICsgT3BlblNTTCBhbmQgS2Vy YmVyb3MgNQorIyBtYWNvc3gxMDMrc2VjdXJlOiAgICBUaGlzIG9uZSBpcyBwcm9iYWJseSByZWR1 bmRhbnQKKyMgbmV0YnNkK29wZW5zc2w6ICAgICAgTmV0QlNEIHdpdGggT3BlblNTTAorIyBvcGVu YnNkMzArc3NsOiAgICAgICBPcGVuQlNEIDMuMCB3aXRoIE9wZW5TU0wKKyMgcmVkaGF0NzEscmVk aGF0NzIscmVkaGF0NzMscmVkaGF0ODAscmVkaGF0OSAoS3JiNSxPcGVuU1NMLFNob3dkb3csUEFN LFpsaWIpCisjIHNjbzMydjUwMG5ldCtzc2w6CisjIHNjbzMydjUwNW5ldCtzc2w6CisjIHNvbGFy aXMyeCtrcmI0OgorIyBzb2xhcmlzMnhnK2tyYjQ6CisjIHNvbGFyaXMyeGcrb3BlbnNzbCtwYW0r c2hhZG93OgorIyBzb2xhcmlzMnhnK29wZW5zc2wremxpYitwYW0rc2hhZG93OgorIyBzb2xhcmlz MnhnK2tyYjUra3JiNCtvcGVuc3NsK3NoYWRvdzoKKyMgc29sYXJpczI1K2tyYjQ6CisjIHNvbGFy aXMyNWcra3JiNDoKKyMgc29sYXJpczI2ZytvcGVuc3NsOgorIyBzb2xhcmlzOGcrb3BlbnNzbCt6 bGliK3BhbStzaGFkb3c6CisjIHNvbGFyaXM4ZytrcmI0OgorIyBzb2xhcmlzOWcrb3BlbnNzbCt6 bGliK3BhbStzaGFkb3c6CisjIHNvbGFyaXM5ZytvcGVuc3NsK3NoYWRvdytwYW0remxpYgorIyBz dW5vczQxZ2NjK2tyYjQ6ICAgICAgICAgICAgICAgICAgICBTdW5PUyA0LjEgYnVpbHQgd2l0aCBn Y2Mgd2l0aCBLZXJiZXJvcyBJVgorIyBzdW5vczQxZ2NjK29wZW5zc2w6ICAgICAgICAgICAgICAg ICBTdW5PUyA0LjEgYnVpbHQgd2l0aCBnY2Mgd2l0aCBPcGVuU1NMCisjIHN1bm9zNDFnY2Mra3Ji NCtvcGVuc3NsOiAgICAgICAgICAgIC4uLndpdGggS2VyYmVyb3MgSVYgYW5kIE9wZW5TU0wKKyMg c3Vub3M0MWdjYytrcmI0K29wZW5zc2wremxpYjogICAgICAgZGl0dG8sIHBsdXMgWkxJQiBjb21w cmVzc2lvbgorIyBzdW5vczQxZ2NjK2tyYjQrc3JwK29wZW5zc2wremxpYjogICBkaXR0bywgcGx1 cyBTUlAKKyMgc3Vub3M0MWdjYytzcnArb3BlbnNzbCt6bGliOgorIyB0cnU2NC01MWItb3BlbnNz bDogICAgICAgICAgICAgICAgICBUcnU2NCAoRGlnaXRhbCkgVW5peCA1LjFCIHdpdGggT3BlblNT TAorIyB1dzdzc2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml4d2FyZSA3IHdpdGgg U1NMCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgIENvbXBpbGUgYW5kIExpbmsgdmFyaWFi bGVzOgorIworIyAgRVhUIGlzIHRoZSBleHRlbnNpb24gKGZpbGUgdHlwZSkgZm9yIG9iamVjdCBm aWxlcywgbm9ybWFsbHkgby4KKyMgIFNlZSBNSU5JWCBlbnRyeSBmb3Igd2hhdCB0byBkbyBpZiBh bm90aGVyIGZpbGV0eXBlIG11c3QgYmUgdXNlZC4KKyMKK0VYVD1vCisjTE5LRkxBR1M9CitTSEFS RURMSUI9CitDQz0gY2MKK0NDMj0gY2MKK01BS0U9IG1ha2UKK1NIRUxMPS9iaW4vc2gKKworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisjIChBbmNpZW50KSBVTklYIFY3LXNwZWNpZmljIHZhcmlhYmxlcy4K KyMgVGhlc2UgYXJlIHNldCB1cCBmb3IgUGVya2luLUVsbWVyIDMyMzAgVjcgVW5peDoKKyMKK1BS T0M9cHJvYworRElSRUNUPQorTlBST0M9bnByb2MKK05QVFlQRT1pbnQKK0JPT1RGSUxFPS9lZGl0 aW9uNworIworIyAoIEZvciBvbGQgVGFuZHkgVFJTLTgwIE1vZGVsIDE2QSBvciA2MDAwIFY3LWJh c2VkIFhlbml4LCB1c2UgUFJPQz1fcHJvYywKKyMgICBESVJFQ1Q9LURESVJFQ1QsIE5QUk9DPV9O cHJvYywgTlBUWVBFPXNob3J0LCBCT09URklMRT0veGVuaXggKQorIworCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMgU0FNUExFIElOU1RBTExBVElPTiBTQ1JJUFQKKyMKKyMgTW9kaWZ5IHRvIHN1aXQg eW91ciBvd24gY29tcHV0ZXIncyBmaWxlIG9yZ2FuaXphdGlvbiBhbmQgcGVybWlzc2lvbnMuICBJ ZgorIyB5b3UgZG9uJ3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVj dG9yaWVzLCAibWFrZSBpbnN0YWxsIgorIyBmYWlscy4gIEluIG1vc3QgY2FzZXMsIGEgcmVhbCBp bnN0YWxsYXRpb24gYWxzbyByZXF1aXJlcyB5b3UgdG8gY2hvd24gLworIyBjaGdycCB0aGUgS2Vy bWl0IGJpbmFyeSBmb3IgdGhlIFVVQ1AgbG9ja2ZpbGUgYW5kL29yIHR0eSBkZXZpY2VzLCBhbmQK KyMgcGVyaGFwcyBhbHNvIHRvIGNobW9kICtzIHRoZSBjb3JyZXNwb25kaW5nIHBlcm1pc3Npb24g ZmllbGRzLgorIworIyBEZWZhdWx0IGJpbmFyeSwgbWFuLCBhbmQgZG9jIGRpcmVjdG9yaWVzIGFy ZSBzdXBwbGllZCBiZWxvdy4gIFlvdSBjYW4KKyMgb3ZlcnJpZGUgdGhlbSBpbiB5b3VyICdtYWtl JyBjb21tYW5kLiAgRXhhbXBsZXM6CisjCisjICAgbWFrZSBpbnN0YWxsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIEFjY2VwdCBkZWZhdWx0cy4KKyMgICBtYWtlICJJTkZPRElS PS91c3Ivc2hhcmUvbGliL2tlcm1pdCIgaW5zdGFsbCAgICMgT3ZlcnJpZGUgSU5GT0RJUiBkZWZh dWx0LgorIworIyBZb3UgY2FuIGFsc28gYnVpbGQgYW5kIGluc3RhbGwgaW4gb25lIHN0ZXAsIGUu Zy46CisjCisjICAgbWFrZSBsaW51eCBpbnN0YWxsCisjCisjIElmIHlvdSB1c2UgdGhlICdpbnN0 YWxsJyB0YXJnZXQgdG8gaW5zdGFsbCBDLUtlcm1pdCwgaXQgY3JlYXRlcyBhbgorIyBVTklOU1RB TEwgc2NyaXB0IHRoYXQgY2FuIGJlIHVzZWQgdG8gdW5pbnN0YWxsIGl0LgorIworV0VSTUlUID0g bWFrZXdoYXQKK0JJTkFSWSA9IHdlcm1pdAorREVTVERJUiA9CitCSU5ESVIgPSAkKHByZWZpeCkv YmluCitNQU5ESVIgPSAkKG1hbnJvb3QpL21hbi9tYW4xCitNQU5FWFQgPSAxCitTUkNESVIgPQor SU5GT0RJUiA9CitDRVJURElSID0KKworVEVYVEZJTEVTID0gQ09QWUlORy5UWFQgY2tjYndyLnR4 dCBja3Vid3IudHh0IGNrdWlucy50eHQgY2tjY2ZnLnR4dCBcCisJCWNrY3BsbS50eHQgY2tlcm1p dC5pbmkgY2tlcm1vZC5pbmkgY2tlcm1pdDcwLnR4dCBja2VybWl0ODAudHh0CisKK0FMTCA9ICQo V0VSTUlUKQorCithbGw6ICQoQUxMKQorCisuYy5vOgorCSQoQ0MpICQoQ0ZMQUdTKSAtREtUQVJH RVQ9XCIkKEtUQVJHRVQpXCIgLWMgJDwKKworI0NsZWFuIHVwIGludGVybWVkaWF0ZSBhbmQgb2Jq ZWN0IGZpbGVzCitjbGVhbjoKKwlAZWNobyAnUmVtb3Zpbmcgb2JqZWN0IGZpbGVzLi4uJworCS1y bSAtZiBja2NtYWkuJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXNyLiQoRVhUKSBja3V1czIuJChF WFQpIFwKK2NrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrY3Byby4k KEVYVCkgY2tjZm5zLiQoRVhUKSBcCitja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1eGxh LiQoRVhUKSBja3Vjb24uJChFWFQpIGNrdXRpby4kKEVYVCkgXAorY2t1ZmlvLiQoRVhUKSBja3Vk aWEuJChFWFQpIGNrdXNjci4kKEVYVCkgY2t3YXJ0LiQoRVhUKSBja3V1c3guJChFWFQpIFwKK2Nr dXVzeS4kKEVYVCkgY2tjbmV0LiQoRVhUKSBja3V1czYuJChFWFQpIGNrdXVzNy4kKEVYVCkgY2t1 c2lnLiQoRVhUKSBcCitja3VjbnMuJChFWFQpIGNrY21kYi4kKEVYVCkgY2t1YXRoLiQoRVhUKSBj a2N0ZWwuJChFWFQpIGNrY2xpYi4kKEVYVCkgXAorY2tjdW5pLiQoRVhUKSBja19jcnAuJChFWFQp IGNrX3NzbC4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2NmdHAuJChFWFQpIFwKK2NrY3Byby5jIHdh cnQKKworc2hvdzoKKwlAZWNobyBwcmVmaXg9JChwcmVmaXgpCisJQGVjaG8gc3Jwcm9vdD0kKHNy cHJvb3QpCisJQGVjaG8gc3Nscm9vdD0kKHNzbHJvb3QpCisJQGVjaG8gbWFucm9vdD0kKG1hbnJv b3QpCisJQGVjaG8gSzRMSUI9JChLNExJQikKKwlAZWNobyBLNElOQz0kKEs0SU5DKQorCUBlY2hv IEs1TElCPSQoSzVMSUIpCisJQGVjaG8gSzVJTkM9JChLNUlOQykKKwlAZWNobyBTUlBMSUI9JChT UlBMSUIpCisJQGVjaG8gU1JQSU5DPSQoU1JQSU5DKQorCUBlY2hvIFNTTExJQj0kKFNTTExJQikK KwlAZWNobyBTU0xJTkM9JChTU0xJTkMpCisJQGV4aXQKKworIyBJbnN0YWxsIEMtS2VybWl0IGFm dGVyIGJ1aWxkaW5nIC0tIElNUE9SVEFOVDogUmVhZCB0aGUgaW5zdHJ1Y3Rpb25zIGFib3ZlCisj IChTQU1QTEUgSU5TVEFMTEFUSU9OIFNDUklQVCkuICBGb3IgU1NML1RMUyB2ZXJzaW9ucywgY2Ff Y2VydHMucGVtIGZpbGUKKyMgc2hvdWxkIGJlIGluc3RhbGxlZCBpbiB0aGUgYXBwcm9wcmlhdGUg cGxhY2UgZm9yIHlvdXIgT3BlblNTTCBsaWJyYXJ5LCBlLmcuOgorIworIyAgIGNwIGNhX2NlcnRz LnBlbSAvdXNyL2xvY2FsL3NzbC8KKyMgICBjcCBjYV9jZXJ0cy5wZW0gL3Vzci9zaGFyZS9zc2wv CisjCisjIFRvIG1ha2Ugc3VyZSAnbWFuJyBub3RpY2VzIHRoZSBuZXcgc291cmNlIGZpbGUgYW5k IGRvZXNuJ3Qga2VlcAorIyBzaG93aW5nIHRoZSBvbGQgZm9ybWF0dGVkIHZlcnNpb24sIHJlbW92 ZSB0aGUgb2xkIGZvcm1hdHRlZCB2ZXJzaW9uLAorIyBzb21ldGhpbmcgbGlrZSB0aGlzOgorIwkJ cm0gLWYgJChNQU5ESVIpLy4uL2NhdCQoTUFORVhUKS9rZXJtaXQuJChNQU5FWFQpCisjIG9yIHRo aXMgKHdoaWNoIHJlcXVpcmVzIENBVERJUiB0byBiZSBkZWZpbmVkKToKKyMJCXJtIC1mICQoQ0FU RElSKS9rZXJtaXQuJChNQU5FWFQpCisjCisjIEFzIG9mIEMtS2VybWl0IDguMC4yMDUgdGhpcyB0 YXJnZXQgYWxzbyBidWlsZHMgYW4gVU5JTlNUQUxMIHNjcmlwdCwgYW5kCisjIHNvIGl0IG1pZ2h0 IGJlIHRvbyBsb25nIGZvciBzb21lIG9sZCBCb3VybmUgc2hlbGxzLCBpbiB3aGljaCBjYXNlIHlv dSBjYW4KKyMgdXNlIGEgZGlmZmVyZW50IHNoZWxsOgorIworIyAgIG1ha2UgU0hFTEw9a3NoIGlu c3RhbGwKKyMgICBtYWtlIFNIRUxMPS9iaW4vcG9zaXgvc2ggaW5zdGFsbAorIworaW5zdGFsbDoK KwlAZWNobyBJbnN0YWxsaW5nIEMtS2VybWl0IHZlcnNpb24gJChDS1ZFUikuLi47XAorCXJtIC1m IFVOSU5TVEFMTDtcCisJZXhlYyAzPi4vVU5JTlNUQUxMO1wKKwllY2hvICIjIEMtS2VybWl0IFVO SU5TVEFMTCBzY3JpcHQiID4mMztcCisJZWNobyAiIyBgZGF0ZWBcbiIgPiYzO1wKKwllY2hvICJD S1ZFUj0kKENLVkVSKSIgPiYzO1wKKwllY2hvICJQck4gVW5pbnN0YWxsaW5nIEMtS2VybWl0IHZl cnNpb24gJChDS1ZFUikuLi4iID4mMztcCisJZWNobyBERVNURElSPSQoREVTVERJUik7XAorCWlm IHRlc3QgLW4gIiQoREVTVERJUikiOyB0aGVuXAorCQlpZiB0ZXN0IC1kICQoREVTVERJUik7IHRo ZW5cCisJCQllY2hvICAiJChERVNURElSKSBleGlzdHMuLi5cbiI7XAorCQllbHNlXAorCQkJZWNo byAiQ3JlYXRpbmcgJChERVNURElSKS4uLiI7XAorCQkJREVTVERJUj1gZWNobyAkKERFU1RESVIp IHwgc2VkICdzIS8qJCQhISdgO1wKKwkJCW1rZGlyICQkREVTVERJUiAgfHwgZXhpdCAxO1wKKwkJ Zmk7XAorCQljaG1vZCA3NTUgJChERVNURElSKSB8fCBleGl0IDE7XAorCWZpO1wKKwllY2hvIEJJ TkFSWT0kKEJJTkFSWSk7XAorCWlmIHRlc3QgLWYgJChCSU5BUlkpOyB0aGVuXAorCQlscyAtbCAk KEJJTkFSWSk7XAorCWVsc2VcCisJCWVjaG8gIj8kKEJJTkFSWSkgbm90IGZvdW5kIjtcCisJCWV4 aXQgMTtcCisJZmk7XAorCWlmIHRlc3QgLXogIiQoREVTVERJUikkKEJJTkRJUikiOyB0aGVuXAor CQllY2hvICJCaW5hcnkgZGlyZWN0b3J5IG5vdCBzcGVjaWZpZWQiO1wKKwkJZXhpdCAxO1wKKwlm aTtcCisJaWYgdGVzdCAtZCAkKERFU1RESVIpJChCSU5ESVIpOyB0aGVuXAorCQllY2hvICAiJChE RVNURElSKSQoQklORElSKSBleGlzdHMuLi4iO1wKKwllbHNlXAorCQllY2hvICJDcmVhdGluZyAk KERFU1RESVIpJChCSU5ESVIpLy4uLiI7XAorCQlta2RpciAgICAgJChERVNURElSKSQoQklORElS KSB8fCBleGl0IDE7XAorCQljaG1vZCA3NTUgJChERVNURElSKSQoQklORElSKTtcCisJZmk7XAor CXJtIC1mICQoREVTVERJUikkKEJJTkRJUikva2VybWl0O1wKKwljcCAkKEJJTkFSWSkgJChERVNU RElSKSQoQklORElSKS9rZXJtaXQgfHwgZXhpdCAxO1wKKwljaG1vZCA3NTUgICAgJChERVNURElS KSQoQklORElSKS9rZXJtaXQgfHwgZXhpdCAxO1wKKwlybSAtZiAgICAgICAgJChERVNURElSKSQo QklORElSKS9rZXJtaXQtc3Noc3ViO1wKKwlsbiAtcyAgICAgICAgJChERVNURElSKSQoQklORElS KS9rZXJtaXRcCisJCSAgICAgJChERVNURElSKSQoQklORElSKS9rZXJtaXQtc3Noc3ViIHx8IGV4 aXQgMTtcCisJZWNobyAnc2V0IGZsYWc9ZlxuUHJDIFJlbW92aW5nIGJpbmFyaWVzJyA+JjM7XAor CWVjaG8gIlJtRiAkKERFU1RESVIpJChCSU5ESVIpL2tlcm1pdC1zc2hzdWIiID4mMztcCisJZWNo byAiUm1GICQoREVTVERJUikkKEJJTkRJUikva2VybWl0IiA+JjM7XAorCWlmIHRlc3QgLWYgY2tl cm1pdC5pbmk7IHRoZW5cCisJCWVjaG8gIiMhJChCSU5ESVIpL2tlcm1pdCIgPlwKKwkJCSQoREVT VERJUikkKEJJTkRJUikvX3RtcC5pbmk7XAorCQljYXQgY2tlcm1pdC5pbmkgPj4gJChERVNURElS KSQoQklORElSKS9fdG1wLmluaTtcCisJCW12ICQoREVTVERJUikkKEJJTkRJUikvX3RtcC5pbmlc CisJCSAgICQoREVTVERJUikkKEJJTkRJUikvY2tlcm1pdC5pbmk7XAorCQljaG1vZCA3NTUgJChE RVNURElSKSQoQklORElSKS9ja2VybWl0LmluaTtcCisJCWVjaG8gIlJtRiAkKERFU1RESVIpJChC SU5ESVIpL2NrZXJtaXQuaW5pIiA+JjM7XAorCWZpO1wKKwllY2hvO1wKKwllY2hvICdFZk0nID4m MztcCisJZWNobyAiS2VybWl0IGJpbmFyeSBpbnN0YWxsZWQ6IjtcCisJbHMgLWwgJChERVNURElS KSQoQklORElSKS9rZXJtaXRcCisJICAgICAgJChERVNURElSKSQoQklORElSKS9rZXJtaXQtc3No c3ViXAorCSAgICAgICQoREVTVERJUikkKEJJTkRJUikvY2tlcm1pdC5pbmk7XAorCWVjaG87XAor CWVjaG8gIiBXQVJOSU5HOiBJZiBDLUtlcm1pdCBpcyB0byBiZSB1c2VkIGZvciBkaWFsaW5nIG91 dCwiO1wKKwllY2hvICIgeW91IG11c3QgY2hhbmdlIGl0cyBvd25lciBhbmQgZ3JvdXAgYW5kIHBl cm1pc3Npb25zIjtcCisJZWNobyAiIHRvIG1hdGNoIHRoZSAnY3UnIHByb2dyYW0uICBTZWUgdGhl IGNrdWlucy50eHQgZmlsZSI7XAorCWVjaG8gIiBmb3IgZGV0YWlscy4iO1wKKwllY2hvO1wKKwll Y2hvIE1BTkRJUj0kKE1BTkRJUik7XAorCWlmIHRlc3QgLW4gIiQoREVTVERJUikkKE1BTkRJUiki OyB0aGVuXAorCQlpZiB0ZXN0IC1kICQoREVTVERJUikkKE1BTkRJUik7IHRoZW5cCisJCQllY2hv ICAiJChERVNURElSKSQoTUFORElSKSBleGlzdHMuLi4iO1wKKwkJZWxzZVwKKwkJCWVjaG8gIkNy ZWF0aW5nICQoTUFORElSKS4uLiI7XAorCQkJbWtkaXIgJChNQU5ESVIpIHx8IGV4aXQgMTtcCisJ CQljaG1vZCA3NTUgJChNQU5ESVIpIHx8IGV4aXQgMTtcCisJCWZpO1wKKwkJcm0gLWYgJChERVNU RElSKSQoTUFORElSKS9rZXJtaXQuJChNQU5FWFQpO1wKKwkJY3AgY2t1a2VyLm5yICQoREVTVERJ UikkKE1BTkRJUikva2VybWl0LiQoTUFORVhUKSB8fCBleGl0IDE7XAorCQljaG1vZCA2NDQgJChE RVNURElSKSQoTUFORElSKS9rZXJtaXQuJChNQU5FWFQpIHx8IGV4aXQgMTtcCisJCWVjaG8gJ3Nl dCBmbGFnPWZcblByQyBSZW1vdmluZyBtYW4gcGFnZXMnID4mMztcCisJCWVjaG8gIlJtRiAkKERF U1RESVIpJChNQU5ESVIpL2tlcm1pdC4kKE1BTkVYVCkiID4mMztcCisJCWVjaG8gJ0VmTScgPiYz O1wKKwkJZWNobztcCisJZWxzZVwKKwkJZWNobyAiTm90IGluc3RhbGxpbmcgbWFuIHBhZ2UhXG4i O1wKKwlmaTtcCisJZWNobyBDRVJURElSPSQoQ0VSVERJUik7XAorCWlmIHRlc3QgLW4gIiQoQ0VS VERJUikiOyB0aGVuXAorCQlpZiB0ZXN0IC1mIGNhX2NlcnRzLnBlbTsgdGhlblwKKwkJCWlmIHRl c3QgLWQgJChDRVJURElSKTsgdGhlblwKKwkJCQllY2hvICAiJChDRVJURElSKSBleGlzdHMuLi4i O1wKKwkJCWVsc2VcCisJCQkJZWNobyAiQ3JlYXRpbmcgJChDRVJURElSKS4uLiI7XAorCQkJCW1r ZGlyICQoQ0VSVERJUikgfHwgZXhpdCAxO1wKKwkJCQljaG1vZCA3NTUgJChDRVJURElSKSB8fCBl eGl0IDE7XAorCQkJZmk7XAorCQkJZWNobyAiSW5zdGFsbGluZyBjZXJ0aWZpY2F0ZXMgZmlsZS4u LiI7XAorCQkJY3AgY2FfY2VydHMucGVtICQoQ0VSVERJUikgfHwgZXhpdCAxO1wKKwkJCWVjaG8g J3NldCBmbGFnPWYnID4mMztcCisJCQllY2hvICdQckMgUmVtb3ZpbmcgY2VydGlmaWNhdGVzIGZp bGUnID4mMztcCisJCQllY2hvICJSbUYgJChDRVJURElSKS9jYV9jZXJ0cy5wZW0iID4mMztcCisJ CQllY2hvICdFZk0nID4mMztcCisJCQllY2hvO1wKKwkJZmk7XAorCWVsc2VcCisJCWVjaG8gIk5v dCBpbnN0YWxsaW5nIGNlcnRpZmljYXRlcyBmaWxlIVxuIjtcCisJZmk7XAorCWVjaG8gU1JDRElS PSQoREVTVERJUikkKFNSQ0RJUik7XAorCWlmIHRlc3QgLW4gIiQoU1JDRElSKSI7IHRoZW5cCisJ CWVjaG8gIkluc3RhbGxpbmcgc291cmNlIGZpbGVzLi4uIjtcCisJCWlmIHRlc3QgLWQgJChERVNU RElSKSQoU1JDRElSKTsgdGhlblwKKwkJCWVjaG8gICIkKERFU1RESVIpJChTUkNESVIpIGV4aXN0 cy4uLiI7XAorCQllbHNlXAorCQkJZWNobyAiQ3JlYXRpbmcgJChERVNURElSKSQoU1JDRElSKS8u Li4iO1wKKwkJCW1rZGlyICAgICAkKERFU1RESVIpJChTUkNESVIpIHx8IGV4aXQgMTtcCisJCQlj aG1vZCA3NTUgJChERVNURElSKSQoU1JDRElSKTtcCisJCWZpO1wKKwkJZWNobyAiQ29weWluZyBz b3VyY2UgZmlsZXMgdG8gJChERVNURElSKSQoU1JDRElSKS4uLiI7XAorCQllY2hvICdzZXQgZmxh Zz1mXG5QckMgUmVtb3Zpbmcgc291cmNlIGZpbGVzJyA+JjM7XAorCQlmb3IgVGV4dEZpbGUgaW4g Q09QWUlORy5UWFQgY2tbY3V3X10qLltjd2hdIG1ha2VmaWxlOyBkb1wKKwkJCWNwICQkVGV4dEZp bGUgJChERVNURElSKSQoU1JDRElSKS8gJiYgZWNobyAiLlxjIjtcCisJCQllY2hvICJSbUYgJChE RVNURElSKSQoU1JDRElSKS8kJFRleHRGaWxlIiA+JjM7XAorCQlkb25lOyBlY2hvO1wKKwkJZWNo byAnRWZNJyA+JjM7XAorCQkoIGNkICQoREVTVERJUikkKFNSQ0RJUikvICYmXAorCQlscyAtbCBD T1BZSU5HLlRYVCBja1tjdXdfXSouW2N3aF0gbWFrZWZpbGUgKTtlY2hvO1wKKwllbHNlXAorCQll Y2hvICJOb3QgaW5zdGFsbGluZyBzb3VyY2UgY29kZSFcbiI7XAorCWZpO1wKKwllY2hvIElORk9E SVI9JChERVNURElSKSQoSU5GT0RJUik7XAorCWlmIHRlc3QgLW4gIiQoSU5GT0RJUikiOyB0aGVu XAorCQllY2hvICJJbnN0YWxsaW5nIGluZm8gZmlsZXMuLi4iO1wKKwkJaWYgdGVzdCAtZCAkKERF U1RESVIpJChJTkZPRElSKTsgdGhlblwKKwkJCWVjaG8gICIkKERFU1RESVIpJChJTkZPRElSKSBl eGlzdHMuLi4iO1wKKwkJZWxzZVwKKwkJCWVjaG8gIkNyZWF0aW5nICQoREVTVERJUikkKElORk9E SVIpLy4uLiI7XAorCQkJbWtkaXIgICAgICQoREVTVERJUikkKElORk9ESVIpIHx8IGV4aXQgMTtc CisJCQljaG1vZCA3NTUgJChERVNURElSKSQoSU5GT0RJUik7XAorCQlmaTtcCisJCWVjaG8gIkNv cHlpbmcgdGV4dCBmaWxlcyB0byAkKERFU1RESVIpJChJTkZPRElSKS4uLiI7XAorCQllY2hvICdz ZXQgZmxhZz1mXG5QckMgUmVtb3ZpbmcgdGV4dCBmaWxlcycgPiYzO1wKKwkJRmlsZUNvcHlMaXN0 PScnO1wKKwkJZm9yIFRleHRGaWxlIGluICQoVEVYVEZJTEVTKTsgZG9cCisJCQl0ZXN0IC1mICQk VGV4dEZpbGUgfHwgY29udGludWU7XAorCQkJY3AgJCRUZXh0RmlsZSAkKERFU1RESVIpJChJTkZP RElSKSAmJiBlY2hvICIuXGMiICYmXAorCQkJRmlsZUNvcHlMaXN0PSIkJEZpbGVDb3B5TGlzdCAk JFRleHRGaWxlIjtcCisJCQllY2hvICJSbUYgJChERVNURElSKSQoSU5GT0RJUikvJCRUZXh0Rmls ZSIgPiYzO1wKKwkJZG9uZTsgZWNobztcCisJCWVjaG8gJ0VmTScgPiYzO1wKKwkJKCBjZCAkKERF U1RESVIpJChJTkZPRElSKS8gJiYgY2htb2QgIDY0NCAgICQkRmlsZUNvcHlMaXN0ICk7XAorCQko IGNkICQoREVTVERJUikkKElORk9ESVIpLyAmJiBwd2QgJiYgbHMgLWwgJCRGaWxlQ29weUxpc3Qg KTtcCisJZWxzZVwKKwkJZWNobyAiTm90IGluc3RhbGxpbmcgdGV4dCBmaWxlcyFcbiI7XAorCWZp O1wKKwllY2hvICJzZXQgZmxhZz1kXG5Qck4gUmVtb3ZpbmcgZW1wdHkgZGlycy4uLiIgPiYzO1wK KwllY2hvICJSbUQgJChERVNURElSKSQoQklORElSKSIgPiYzO1wKKwllY2hvICJSbUQgJChERVNU RElSKSQoU1JDRElSKSIgPiYzO1wKKwllY2hvICJSbUQgJChERVNURElSKSQoSU5GT0RJUikiID4m MztcCisJZWNobyAiUm1EICQoQ0VSVERJUikiID4mMztcCisJZWNobyAiUm1EICQoTUFORElSKSIg PiYzO1wKKwllY2hvICJSbUQgJChERVNURElSKSIgPiYzO1wKKwllY2hvICJFZk0iID4mMztcCisJ ZWNobyAiUHJOIEMtS2VybWl0IHZlcnNpb24gJChDS1ZFUikgaXMgdW5pbnN0YWxsZWQhIiA+JjM7 XAorCWVjaG8gQy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKSBpbnN0YWxsZWQhCisKKyMgVU4tSW5z dGFsbCBDLUtlcm1pdCBhZnRlciBidWlsZGluZworIyBQbGVhc2UgdG8gbm90IHJlbW92ZSB0aGUg ZXh0cmEgYmxhbmtzIGJlZm9yZSBhbmQgYWZ0ZXIgJ3t9JyB3aXRoaW4gdGhlCisjIGZ1bmN0aW9u cy4gWW91IHdvdWxkIGdldCBzeW50YXggZXJyb3JzIGZvciBzb21lIG9sZGVyIEJvdXJuZSBzaGVs bHMhIEJlc3QgaXMgCisjIHlvdSBkb24ndCBjaGFuZ2Ugb3IgcmVtb3ZlIGFueXRoaW5nLgorIwor dW5pbnN0YWxsOgorCUBpZiB0ZXN0ICEgLWYgVU5JTlNUQUxMOyB0aGVuXAorCQllY2hvICI/Qy1L ZXJtaXQgVU5JTlNUQUxMIGRhdGEgZmlsZSBub3QgZm91bmQhIjtcCisJCWV4aXQgMTtcCisJZmk7 IFwKKwlYPWBncmVwICdeQ0tWRVI9JyQoQ0tWRVIpJyQkJyAuL1VOSU5TVEFMTCB8fCA6YDtcCisJ aWYgdGVzdCAteiAiJCRYIjsgdGhlblwKKwkJZWNobyAiP1VOSU5TVEFMTCBmaWxlIGlzIG5vdCBm b3IgQy1LZXJtaXQgdmVyc2lvbiAkKENLVkVSKSI7XAorCQlleGl0IDI7XAorCWZpO1wKKwlQck4g KCkgeyBlY2hvICIkJCoiOyB9O1wKKwlQckMgKCkgeyBlY2hvICIkJCogXGMiOyB9O1wKKwlSbUYg KCkgeyB0ZXN0IC1mICIkJDEiICYmIHJtIC1mICIkJDEiICYmIGVjaG8gIi5cYyIgJiYgZmxhZz1G IDsgfTtcCisJUm1EICgpIHsgXAorCWRpcj0kJDE7XAorCXdoaWxlIHRlc3QgLWQgIiQkZGlyIjsg ZG9cCisJCXJtZGlyICIkJGRpciIgMj4mLSB8fCByZXR1cm4gJiYgZWNobyAiJCRkaXIiICYmIGZs YWc9RDtcCisJCWRpcj1gZWNobyAiJCRkaXIiIHwgc2VkICdzIS9bXi9dKi8qJCQhISdgO1wKKwlk b25lOyBcCisJfTtcCisJRWZNICgpIHsgXAorCWNhc2UgIiQkZmxhZyIgaW5cCisJCWYpIGVjaG8g Ii0gTm90aGluZyB0byByZW1vdmUhIjs7XAorCQlkKSBlY2hvICJOb3RoaW5nIHRvIHJlbW92ZSEi OztcCisJCUYpIGVjaG8gIiBkb25lIjs7XAorCQlEKSBlY2hvICJkb25lIjs7XAorCWVzYWM7IFwK Kwl9O1wKKwl3aGlsZSByZWFkIEFjdCBBcmdzOyBkb1wKKwkJY2FzZSAkJEFjdCBpblwKKwkJCUVm TSkgRWZNOztcCisJCQlSbUQpIFJtRCAkJEFyZ3M7O1wKKwkJCVJtRikgUm1GICQkQXJnczs7XAor CQkJUHJOKSBQck4gJCRBcmdzOztcCisJCQlQckMpIFByQyAkJEFyZ3M7O1wKKwkJCXNldCkgZXZh bCAkJEFyZ3M7O1wKKwkJZXNhYztcCisJZG9uZSA8IC4vVU5JTlNUQUxMCisKK21ha2V3aGF0Ogor CUBlY2hvICdtYWtlIHdoYXQ/ICBZb3UgbXVzdCB0ZWxsIHdoaWNoIHBsYXRmb3JtIHRvIG1ha2Ug Qy1LZXJtaXQgZm9yLicKKwlAZWNobyBFeGFtcGxlczogbWFrZSBsaW51eCwgbWFrZSBhaXgsIG1h a2Ugc29sYXJpczEwLCBtYWtlIGhwdXgxMTAwLgorCUBlY2hvIFBsZWFzZSByZWFkIHRoZSBjb21t ZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWtlZmlsZS4KKworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCisjCisjIERlcGVuZGVuY2llcyBTZWN0aW9uOgorCit3ZXJtaXQ6CWNrY21haS4kKEVYVCkg Y2tjbGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgY2t1dXMyLiQoRVhUKSBc CisJCWNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVY VCkgXAorCQlja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja2Nwcm8u JChFWFQpIFwKKwkJY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkgY2t1 eGxhLiQoRVhUKSBcCisJCWNrdWNvbi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQp IGNrdWRpYS4kKEVYVCkgXAorCQlja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVsLiQo RVhUKSBja3VzaWcuJChFWFQpIFwKKwkJY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0 cC4kKEVYVCkKKwkkKENDMikgJChMTktGTEFHUykgLW8gd2VybWl0IFwKKwkJY2tjbWFpLiQoRVhU KSBja2NsaWIuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBcCisJCWNrY2Zucy4k KEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAorCQlja2Nw cm8uJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXMyLiQoRVhUKSBja3V1czMuJChFWFQpIFwKKwkJ Y2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhUKSBc CisJCWNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdWNvbi4kKEVY VCkgXAorCQlja3VkaWEuJChFWFQpIGNrdXNjci4kKEVYVCkgY2tjbmV0LiQoRVhUKSBja2N0ZWwu JChFWFQpIFwKKwkJY2t1c2lnLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgY2tj ZnRwLiQoRVhUKSBcCisJCSQoTElCUykKKworIyBQcmVmZXJyZWQgY29uZmlndXJhdGlvbiB3aXRo IHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QKKworeGVybWl0Oglja2NtYWkuJChFWFQpIGNrY2xpYi4k KEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdXVzMi4kKEVYVCkgXAorCQlja3V1 czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKKwkJ Y2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBc CisJCWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVY VCkgXAorCQlja3VjbnMuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja3VkaWEu JChFWFQpIFwKKwkJY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1 c2lnLiQoRVhUKSBcCisJCWNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2NmdHAuJChFWFQp IGNrdWF0aC4kKEVYVCkgXAorCQlja19jcnAuJChFWFQpIGNrX3NzbC4kKEVYVCkKKwkkKENDMikg JChMTktGTEFHUykgLW8gd2VybWl0IFwKKwkJY2tjbWFpLiQoRVhUKSBja2NsaWIuJChFWFQpIGNr dXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBcCisJCWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhU KSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAorCQlja2Nwcm8uJChFWFQpIGNrdWNtZC4k KEVYVCkgY2t1dXMyLiQoRVhUKSBja3V1czMuJChFWFQpIFwKKwkJY2t1dXM0LiQoRVhUKSBja3V1 czUuJChFWFQpIGNrdXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhUKSBcCisJCWNrdXVzeC4kKEVYVCkg Y2t1dXN5LiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdWNucy4kKEVYVCkgXAorCQlja3VkaWEuJChF WFQpIGNrdXNjci4kKEVYVCkgY2tjbmV0LiQoRVhUKSBja3VzaWcuJChFWFQpIFwKKwkJY2tjdGVs LiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgY2tjZnRwLiQoRVhUKSBcCisJCWNr dWF0aC4kKEVYVCkgY2tfY3JwLiQoRVhUKSBja19zc2wuJChFWFQpICQoTElCUykKKworIyBNYWxs b2MgRGVidWdnaW5nIHZlcnNpb24KKworbWVybWl0Oglja2NtZGIuJChFWFQpIGNrY21haS4kKEVY VCkgY2tjbGliLiQoRVhUKSBja3VjbWQuJChFWFQpIGNrdXVzci4kKEVYVCkgXAorCQlja3V1czIu JChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUuJChFWFQpIFwKKwkJY2t1 dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1dXN5LiQoRVhUKSBcCisJ CWNrY3Byby4kKEVYVCkgY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIGNrY2ZuMy4kKEVYVCkg XAorCQlja3V4bGEuJChFWFQpIGNrdWNvbi4kKEVYVCkgY2t1dGlvLiQoRVhUKSBja3VmaW8uJChF WFQpIFwKKwkJY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIGNrY25ldC4kKEVYVCkgY2tjdGVs LiQoRVhUKSBcCisJCWNrdXNpZy4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNr Y2Z0cC4kKEVYVCkKKwkkKENDMikgJChMTktGTEFHUykgLW8gbWVybWl0IGNrY21kYi4kKEVYVCkg Y2tjbGliLiQoRVhUKSBja2NtYWkuJChFWFQpXAorCQlja3V0aW8uJChFWFQpIGNrdWZpby4kKEVY VCkgY2tjZm5zLiQoRVhUKSBja2NmbjIuJChFWFQpIFwKKwkJY2tjZm4zLiQoRVhUKSBja3V4bGEu JChFWFQpIGNrY3Byby4kKEVYVCkgY2t1Y21kLiQoRVhUKSBcCisJCWNrdXVzMi4kKEVYVCkgY2t1 dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgXAorCQlja3V1czYuJChFWFQp IGNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIFwKKwkJY2t1dXNyLiQo RVhUKSBja3Vjb24uJChFWFQpIGNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBcCisJCWNrY25l dC4kKEVYVCkgY2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQpIGNrY3VuaS4kKEVYVCkgXAorCQlj a3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVYVCkgJChMSUJTKQorCisjIEtlcmJlcml6ZWQgVmVyc2lv biAtIFN1YmplY3QgdG8gVVNBIGV4cG9ydCByZXN0cmljdGlvbnMuCisKKyMgTk9URTogV2UgZG9u J3QgdXNlIHRoaXMgYW55IG1vcmUgLS0gQXMgb2YgMTUgRmViIDIwMDMsIHRoZSAieGVybWl0Igor IyB0YXJnZXQgaXMgdXNlZCBmb3IgYm90aCBzZWN1cmUgYW5kIHJlZ3VsYXIgdmVyc2lvbi4KKwor a3JibWl0Oglja2NtYWkuJChFWFQpIGNrY2xpYi4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3Iu JChFWFQpIGNrdXVzMi4kKEVYVCkgXAorCQlja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1 dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKKwkJY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQp IGNrdXVzeS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCisJCWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQo RVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAorCQlja3VjbnMuJChFWFQpIGNrdXRp by4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja3VkaWEuJChFWFQpIFwKKwkJY2t1c2NyLiQoRVhUKSBj a2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQoRVhUKSBcCisJCWNrdWF0aC4kKEVY VCkgY2tfY3JwLiQoRVhUKSBja2N1bmkuJChFWFQpIGNrdXB0eS4kKEVYVCkgXAorCQlja2NmdHAu JChFWFQpIGNrX3NzbC4kKEVYVCkKKwkkKENDMikgJChMTktGTEFHUykgLW8ga3JibWl0IGNrY21h aS4kKEVYVCkgY2tjbGliLiQoRVhUKSBcCisJCWNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBj a2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgXAorCQlja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVY VCkgY2tjcHJvLiQoRVhUKSBja3VjbWQuJChFWFQpIFwKKwkJY2t1dXMyLiQoRVhUKSBja3V1czMu JChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCisJCWNrdXVzNi4kKEVYVCkgY2t1 dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgXAorCQlja3V1c3IuJChFWFQp IGNrdWNucy4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBja3VzY3IuJChFWFQpIFwKKwkJY2tjbmV0LiQo RVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgY2t1YXRoLiQoRVhUKSBcCisJCWNrX2Ny cC4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVYVCkgXAorCQlj a19zc2wuJChFWFQpICQoTElCUykKKwora3JibWl0LWRlYnVnOglja2NtYWkuJChFWFQpIGNrY2xp Yi4kKEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQpIFwKKwkJY2t1dXMyLiQoRVhUKSBj a3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCisJCWNrdXVzNi4kKEVY VCkgY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgXAorCQlja2Nwcm8u JChFWFQpIGNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIFwKKwkJY2t1 eGxhLiQoRVhUKSBja3VjbnMuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBcCisJ CWNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkg XAorCQlja3VzaWcuJChFWFQpIGNrdWF0aC4kKEVYVCkgY2tfY3JwLiQoRVhUKSBja2N1bmkuJChF WFQpIFwKKwkJY2t1cHR5LiQoRVhUKSBja19zc2wuJChFWFQpIGNrY21kYi4kKEVYVCkgY2tjZnRw LiQoRVhUKQorCSQoQ0MyKSAkKExOS0ZMQUdTKSAtbyBrcmJtaXQgY2tjbWRiLiQoRVhUKSBja2Nt YWkuJChFWFQpIFwKKwkJY2tjbGliLiQoRVhUKSBja3V0aW8uJChFWFQpIGNrdWZpby4kKEVYVCkg Y2tjZm5zLiQoRVhUKSBcCisJCWNrY2ZuMi4kKEVYVCkgY2tjZm4zLiQoRVhUKSBja3V4bGEuJChF WFQpIGNrY3Byby4kKEVYVCkgXAorCQlja3VjbWQuJChFWFQpIGNrdXVzMi4kKEVYVCkgY2t1dXMz LiQoRVhUKSBja3V1czQuJChFWFQpIFwKKwkJY2t1dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIGNr dXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBcCisJCWNrdXVzeS4kKEVYVCkgY2t1dXNyLiQoRVhU KSBja3VjbnMuJChFWFQpIGNrdWRpYS4kKEVYVCkgXAorCQlja3VzY3IuJChFWFQpIGNrY25ldC4k KEVYVCkgY2tjdGVsLiQoRVhUKSBja3VzaWcuJChFWFQpIFwKKwkJY2t1YXRoLiQoRVhUKSBja19j cnAuJChFWFQpIGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBcCisJCWNrY2Z0cC4kKEVYVCkg Y2tfc3NsLiQoRVhUKSAkKExJQlMpCisKKyMgU1JQKFRNKSBWZXJzaW9uIC0gU3ViamVjdCB0byBV U0EgZXhwb3J0IHJlc3RyaWN0aW9ucy4KKworc3JwbWl0Oglja2NtYWkuJChFWFQpIGNrY2xpYi4k KEVYVCkgY2t1Y21kLiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdXVzMi4kKEVYVCkgXAorCQlja3V1 czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKKwkJ Y2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBc CisJCWNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVY VCkgXAorCQlja3VjbnMuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja3VkaWEu JChFWFQpIFwKKwkJY2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1 c2lnLiQoRVhUKSBcCisJCWNrdWF0aC4kKEVYVCkgY2tfY3JwLiQoRVhUKSBja2N1bmkuJChFWFQp IGNrdXB0eS4kKEVYVCkgXAorCQlja2NmdHAuJChFWFQpIGNrX3NzbC4kKEVYVCkKKwkkKENDMikg JChMTktGTEFHUykgLW8gc3JwbWl0IGNrY21haS4kKEVYVCkgY2tjbGliLiQoRVhUKSBcCisJCWNr dXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVYVCkgXAor CQlja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBja3VjbWQuJChFWFQp IFwKKwkJY2t1dXMyLiQoRVhUKSBja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQo RVhUKSBcCisJCWNrdXVzNi4kKEVYVCkgY2t1dXM3LiQoRVhUKSBja3V1c3guJChFWFQpIGNrdXVz eS4kKEVYVCkgXAorCQlja3V1c3IuJChFWFQpIGNrdWNucy4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBj a3VzY3IuJChFWFQpIFwKKwkJY2tjbmV0LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVY VCkgY2t1YXRoLiQoRVhUKSBcCisJCWNrX2NycC4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHku JChFWFQpIGNrX3NzbC4kKEVYVCkgXAorCQlja2NmdHAuJChFWFQpICQoTElCUykKKworIyBLZXJi ZXJpemVkIFZlcnNpb24gLSBOb3Qgc3ViamVjdCB0byBVU0EgZXhwb3J0IHJlc3RyaWN0aW9ucy4K Kwora3JibWl0LWV4cG9ydDoJY2tjbWFpLiQoRVhUKSBcCisJCWNrY2xpYi4kKEVYVCkgY2t1Y21k LiQoRVhUKSBja3V1c3IuJChFWFQpIGNrdXVzMi4kKEVYVCkgXAorCQlja3V1czMuJChFWFQpIGNr dXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBja3V1czYuJChFWFQpIFwKKwkJY2t1dXM3LiQoRVhU KSBja3V1c3guJChFWFQpIGNrdXVzeS4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCisJCWNrY2Zucy4k KEVYVCkgY2tjZm4yLiQoRVhUKSBja2NmbjMuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAorCQlja3Vj bnMuJChFWFQpIGNrdXRpby4kKEVYVCkgY2t1ZmlvLiQoRVhUKSBja3VkaWEuJChFWFQpIFwKKwkJ Y2t1c2NyLiQoRVhUKSBja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQoRVhUKSBc CisJCWNrdWF0aC4kKEVYVCkgY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0cC4kKEVY VCkKKwkkKENDMikgJChMTktGTEFHUykgLW8ga3JibWl0LWV4cG9ydCBja2NtYWkuJChFWFQpIGNr Y2xpYi4kKEVYVCkgXAorCQlja3V0aW8uJChFWFQpIGNrdWZpby4kKEVYVCkgY2tjZm5zLiQoRVhU KSBja2NmbjIuJChFWFQpIFwKKwkJY2tjZm4zLiQoRVhUKSBja3V4bGEuJChFWFQpIGNrY3Byby4k KEVYVCkgY2t1Y21kLiQoRVhUKSBcCisJCWNrdXVzMi4kKEVYVCkgY2t1dXMzLiQoRVhUKSBja3V1 czQuJChFWFQpIGNrdXVzNS4kKEVYVCkgXAorCQlja3V1czYuJChFWFQpIGNrdXVzNy4kKEVYVCkg Y2t1dXN4LiQoRVhUKSBja3V1c3kuJChFWFQpIFwKKwkJY2t1dXNyLiQoRVhUKSBja3VjbnMuJChF WFQpIGNrdWRpYS4kKEVYVCkgY2t1c2NyLiQoRVhUKSBcCisJCWNrY25ldC4kKEVYVCkgY2tjdGVs LiQoRVhUKSBja3VzaWcuJChFWFQpIGNrdWF0aC4kKEVYVCkgXAorCQlja2N1bmkuJChFWFQpIGNr dXB0eS4kKEVYVCkgY2tjZnRwLiQoRVhUKSAkKExJQlMpCisKKyMgU1JQKFRNKSBWZXJzaW9uIC0g Tm90IHN1YmplY3QgdG8gVVNBIGV4cG9ydCByZXN0cmljdGlvbnMuCisKK3NycG1pdC1leHBvcnQ6 CWNrY21haS4kKEVYVCkgXAorCQlja2NsaWIuJChFWFQpIGNrdWNtZC4kKEVYVCkgY2t1dXNyLiQo RVhUKSBja3V1czIuJChFWFQpIFwKKwkJY2t1dXMzLiQoRVhUKSBja3V1czQuJChFWFQpIGNrdXVz NS4kKEVYVCkgY2t1dXM2LiQoRVhUKSBcCisJCWNrdXVzNy4kKEVYVCkgY2t1dXN4LiQoRVhUKSBj a3V1c3kuJChFWFQpIGNrY3Byby4kKEVYVCkgXAorCQlja2NmbnMuJChFWFQpIGNrY2ZuMi4kKEVY VCkgY2tjZm4zLiQoRVhUKSBja3V4bGEuJChFWFQpIFwKKwkJY2t1Y25zLiQoRVhUKSBja3V0aW8u JChFWFQpIGNrdWZpby4kKEVYVCkgY2t1ZGlhLiQoRVhUKSBcCisJCWNrdXNjci4kKEVYVCkgY2tj bmV0LiQoRVhUKSBja2N0ZWwuJChFWFQpIGNrdXNpZy4kKEVYVCkgXAorCQlja3VhdGguJChFWFQp IGNrY3VuaS4kKEVYVCkgY2t1cHR5LiQoRVhUKSBja2NmdHAuJChFWFQpCisJJChDQzIpICQoTE5L RkxBR1MpIC1vIHNycG1pdC1leHBvcnQgY2tjbWFpLiQoRVhUKSBja2NsaWIuJChFWFQpIFwKKwkJ Y2t1dGlvLiQoRVhUKSBja3VmaW8uJChFWFQpIGNrY2Zucy4kKEVYVCkgY2tjZm4yLiQoRVhUKSBc CisJCWNrY2ZuMy4kKEVYVCkgY2t1eGxhLiQoRVhUKSBja2Nwcm8uJChFWFQpIGNrdWNtZC4kKEVY VCkgXAorCQlja3V1czIuJChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBja3V1czUu JChFWFQpIFwKKwkJY2t1dXM2LiQoRVhUKSBja3V1czcuJChFWFQpIGNrdXVzeC4kKEVYVCkgY2t1 dXN5LiQoRVhUKSBcCisJCWNrdXVzci4kKEVYVCkgY2t1Y25zLiQoRVhUKSBja3VkaWEuJChFWFQp IGNrdXNjci4kKEVYVCkgXAorCQlja2NuZXQuJChFWFQpIGNrY3RlbC4kKEVYVCkgY2t1c2lnLiQo RVhUKSBja3VhdGguJChFWFQpIFwKKwkJY2tjdW5pLiQoRVhUKSBja3VwdHkuJChFWFQpIGNrY2Z0 cC4kKEVYVCkgJChMSUJTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbWFuIHBhZ2UuLi4KKyMK K2NrdWtlci5ucjoKKwlAZWNobyBUaGlzIHRhcmdldCBpcyBvYnNvbGV0ZS4KKwlAZWNobyBUaGUg Y2t1a2VyLm5yIGZpbGUgbm8gbG9uZ2VyIG5lZWRzIGFueSBwcmVwcm9jZXNzaW5nLgorCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgRGVwZW5kZW5jaWVzIGZvciBlYWNoIG1vZHVsZS4uLgorIworY2tj bWFpLiQoRVhUKTogY2tjbWFpLmMgY2tja2VyLmggY2tjZGViLmggY2tjc3ltLmggY2tjYXNjLmgg Y2tjbmV0LmggY2tjc2lnLmggXAorCQlja3V1c3IuaCBja2N0ZWwuaCBja2NsaWIuaAorCitja2Ns aWIuJChFWFQpOiBja2NsaWIuYyBja2NsaWIuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NzeW0uaAor Citja2Nwcm8uJChFWFQpOiBja2Nwcm8uYyBja2NrZXIuaCBja2NkZWIuaCBja2NzeW0uaCBja2Nh c2MuaCBja2NsaWIuaAorCitja2Nwcm8uYzogY2tjcHJvLncgd2FydCBja2NkZWIuaCBja2NzeW0u aCBja2Nhc2MuaCBja2NrZXIuaCBja2NuZXQuaCBja2N0ZWwuaCBcCisJIGNrY2xpYi5oCisJLi93 YXJ0IGNrY3Byby53IGNrY3Byby5jCisKK2NrY2Zucy4kKEVYVCk6IGNrY2Zucy5jIGNrY2tlci5o IGNrY2RlYi5oIGNrY3N5bS5oIGNrY2FzYy5oIGNrY3hsYS5oIGNrY3VuaS5oIFwKKwkJY2t1eGxh LmggY2tjbGliLmggY2tjbmV0LmgKKworY2tjZm4yLiQoRVhUKTogY2tjZm4yLmMgY2tja2VyLmgg Y2tjZGViLmggY2tjc3ltLmggY2tjYXNjLmggY2tjeGxhLmggXAorCQlja3V4bGEuaCBja2N0ZWwu aCBja2NsaWIuaCBja2NuZXQuaCBja2N1bmkuaAorCitja2NmbjMuJChFWFQpOiBja2NmbjMuYyBj a2NrZXIuaCBja2NkZWIuaCBja2NzeW0uaCBja2Nhc2MuaCBja2N4bGEuaCBcCisJCWNrdXhsYS5o IGNrY2xpYi5oIGNrY3VuaS5oCisKK2NrdXhsYS4kKEVYVCk6IGNrdXhsYS5jIGNrY2tlci5oIGNr Y3N5bS5oIGNrY2RlYi5oIGNrY3hsYS5oIGNrdXhsYS5oIGNrY2xpYi5oIFwKKwkJIGNrY3VuaS5o CisKK2NrY3VuaS4kKEVYVCk6IGNrY3VuaS5jIGNrY2RlYi5oIGNrY2tlci5oIGNrdWNtZC5oIGNr Y3VuaS5oIGNrY3hsYS5oIGNrdXhsYS5oCisKK2NrdXVzci4kKEVYVCk6IGNrdXVzci5jIGNrdWNt ZC5oIGNrY2tlci5oIGNrdXVzci5oIGNrY3N5bS5oIGNrY2RlYi5oIGNrY3hsYS5oIFwKKwkJY2t1 eGxhLmggY2tjYXNjLmggY2tjbmV0LmggY2tjdGVsLmggY2tjbGliLmggY2tjdW5pLmgKKworY2t1 dXMyLiQoRVhUKTogY2t1dXMyLmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmggY2tjZGViLmgg Y2tjeGxhLmggY2t1eGxhLmggXAorCQlja2Nhc2MuaCBja2NuZXQuaCBja2NzeW0uaCBja2N0ZWwu aCBja2NsaWIuaCBja2N1bmkuaAorCitja3V1czMuJChFWFQpOiBja3V1czMuYyBja3VjbWQuaCBj a2NrZXIuaCBja3V1c3IuaCBja2NkZWIuaCBja2N4bGEuaCBja3V4bGEuaCBcCisJCWNrY2FzYy5o IGNrY25ldC5oIGNrY3N5bS5oIGNrY3RlbC5oIGNrY2xpYi5oIGNrY3VuaS5oCisKK2NrdXVzNC4k KEVYVCk6IGNrdXVzNC5jIGNrdWNtZC5oIGNrY2tlci5oIGNrdXVzci5oIGNrY2RlYi5oIGNrY3hs YS5oIGNrdXhsYS5oIFwKKwkJY2tjYXNjLmggY2tjbmV0LmggY2t1dmVyLmggY2tjc3ltLmggY2tj dGVsLmggY2tjbGliLmggY2tjdW5pLmgKKworY2t1dXM1LiQoRVhUKTogY2t1dXM1LmMgY2t1Y21k LmggY2tja2VyLmggY2t1dXNyLmggY2tjZGViLmggY2tjYXNjLmggY2tjbmV0LmggXAorCQkgY2tj c3ltLmggY2tjdGVsLmggY2tjbGliLmggY2tjeGxhLmggY2t1eGxhLmggY2tjdW5pLmgKKworY2t1 dXM2LiQoRVhUKTogY2t1dXM2LmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmggY2tjZGViLmgg Y2tjYXNjLmggY2tjbmV0LmggXAorCQkgY2tjc3ltLmggY2tjdGVsLmggY2tjbGliLmgKKworY2t1 dXM3LiQoRVhUKTogY2t1dXM3LmMgY2t1Y21kLmggY2tja2VyLmggY2t1dXNyLmggY2tjZGViLmgg Y2tjeGxhLmggY2t1eGxhLmggXAorCQlja2Nhc2MuaCBja2NuZXQuaCBja2NzeW0uaCBja2N0ZWwu aCBja2NsaWIuaCBja2N1bmkuaAorCitja3V1c3guJChFWFQpOiBja3V1c3guYyBja2NrZXIuaCBj a3V1c3IuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NzeW0uaCBcCisJCWNrY3NpZy5oIGNrY25ldC5o IGNrY3RlbC5oIGNrY2xpYi5oIGNrY3hsYS5oIGNrdXhsYS5oIGNrY3VuaS5oCisKK2NrdXVzeS4k KEVYVCk6IGNrdXVzeS5jIGNrY2tlci5oIGNrY2RlYi5oIGNrY2FzYy5oIGNrY25ldC5oIGNrY3N5 bS5oIGNrY3RlbC5oIFwKKwkJIGNrY2xpYi5oCisKK2NrdWNtZC4kKEVYVCk6IGNrdWNtZC5jIGNr Y2FzYy5oIGNrdWNtZC5oIGNrY2RlYi5oIGNrY3N5bS5oIGNrY3RlbC5oIGNrY2xpYi5oCisKK2Nr dWZpby4kKEVYVCk6IGNrdWZpby5jIGNrY2RlYi5oIGNrdXZlci5oIGNrY3N5bS5oIGNrY2xpYi5o IFwKKwkJY2tjeGxhLmggY2t1eGxhLmggY2tjdW5pLmgKKworY2t1dGlvLiQoRVhUKTogY2t1dGlv LmMgY2tjZGViLmggY2tjbmV0LmggY2t1dmVyLmggY2tjc3ltLmggY2tjdGVsLmggY2tjbGliLmgK KworY2t1Y29uLiQoRVhUKTogY2t1Y29uLmMgY2tja2VyLmggY2tjZGViLmggY2tjYXNjLmggY2tj bmV0LmggY2tjc3ltLmggY2tjdGVsLmggXAorCQkgY2tjbGliLmgKKworY2t1Y25zLiQoRVhUKTog Y2t1Y25zLmMgY2tja2VyLmggY2tjZGViLmggY2tjYXNjLmggY2tjbmV0LmggY2tjc3ltLmggY2tj dGVsLmggXAorCQkgY2tjbGliLmggY2tjeGxhLmggY2t1eGxhLmggY2tjdW5pLmgKKworY2tjbmV0 LiQoRVhUKTogY2tjbmV0LmMgY2tjZGViLmggY2tja2VyLmggY2tjbmV0LmggY2tjc3ltLmggY2tj c2lnLmggY2tjdGVsLmggXAorCQkgY2tjbGliLmgKKworY2tjdGVsLiQoRVhUKTogY2tjc3ltLmgg Y2tjZGViLmggY2tja2VyLmggY2tjbmV0LmggY2tjdGVsLmggY2tjbGliLmgKKworIyBja19vZmZf dDogY2tfb2ZmX3QuJChFWFQpCisjCSQoQ0MpIC1vIGNrX29mZl90IGNrX29mZl90LiQoRVhUKQor Cit3YXJ0OiBja3dhcnQuJChFWFQpCisJJChDQykgJChMTktGTEFHUykgLW8gd2FydCBja3dhcnQu JChFWFQpICQoTElCUykKKworY2tjbWRiLiQoRVhUKTogY2tjbWRiLmMgY2tjZGViLmggY2tjc3lt LmggY2tjbGliLmgKKworY2t3YXJ0LiQoRVhUKTogY2t3YXJ0LmMKKworY2t1ZGlhLiQoRVhUKTog Y2t1ZGlhLmMgY2tja2VyLmggY2tjZGViLmggY2t1Y21kLmggY2tjYXNjLmggY2tjc3ltLmggY2tj c2lnLmggXAorCQlja2NuZXQuaCBja2N0ZWwuaCBja2NsaWIuaAorCitja3VzY3IuJChFWFQpOiBj a3VzY3IuYyBja2NrZXIuaCBja2NkZWIuaCBja2Nhc2MuaCBja2NzeW0uaCBja2NzaWcuaCBcCisJ CWNrY25ldC5oIGNrY3RlbC5oIGNrY2xpYi5oCisKK2NrdXNpZy4kKEVYVCk6IGNrdXNpZy5jIGNr Y2FzYy5oIGNrY2RlYi5oIGNrY2tlci5oIGNrY25ldC5oIGNrdXVzci5oIFwKKwkJY2tjc2lnLmgg Y2tjdGVsLmggY2tjbGliLmgKKworY2tjZnRwLiQoRVhUKTogY2tjZnRwLmMgY2tjZGViLmggY2tj YXNjLmggY2tja2VyLmggY2t1Y21kLmggY2t1dXNyLmggXAorCQlja2NuZXQuaCBja2N0ZWwuaCBj a2N4bGEuaCBja3V4bGEuaCBja2N1bmkuaAorCitja3VwdHkuJChFWFQpOiBja3VwdHkuYyBja3Vw dHkuaCBja2NkZWIuaAorCitja3VhdGguJChFWFQpOiBja3VhdGguYyBja2NkZWIuaCBja3VjbWQu aCBja3VhdGguaCBja3VhdDIuaCBja2N0ZWwuaCBcCisJCSBja2NsaWIuaCBja2NuZXQuaAorCitj a19jcnAuJChFWFQpOiBja19jcnAuYyBja2NkZWIuaCBja2NuZXQuaCBja3VhdGguaCBja2NsaWIu aAorCitja19zc2wuJChFWFQpOiBja19zc2wuYyBja2NkZWIuaCBja3VjbWQuaCBja3VhdGguaCBj a3VhdDIuaCBja2N0ZWwuaCBcCisJCSBja2NsaWIuaCBja19zc2wuaAorCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMKKyMgRW50cmllcyB0byBtYWtlIEMtS2VybWl0IGZvciBzcGVjaWZpYyBzeXN0ZW1z LgorIworIyBQdXQgdGhlIG9uZXMgdGhhdCBuZWVkIHNob3J0IG1ha2VmaWxlcyBmaXJzdC4KKwor I0Fwb2xsbyBBZWdpcyA5LnguICBJbmNsdWRlcyBUQ1AvSVAgc3VwcG9ydC4KKyNZb3UgY2FuIGFs c28gYWRkIHByb2Nlc3Nvci1kZXBlbmRlbnQgb3B0aW1pemF0aW9uIHN3aXRjaGVzIGxpa2UgLU01 NzAuCithZWdpczoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFwb2xsbyBB ZWdpcyA5LnguLi4KKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLUROT0NTRVRTIC1EQ0tfQ1VSU0VTIC1PICQo S0ZMQUdTKSIgXAorCSJMSUJTID0gLWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjQXBwbGUgTWFjIElJ LCBBL1VYIHByZS0zLjAKKyNXYXJuaW5nLCBpZiAic2VuZCAqIiBkb2Vzbid0IHdvcmssIHRyeSB0 aGUgYXV4dWZzIG1ha2VmaWxlIGVudHJ5IGJlbG93LgorYXV4OgorCUBlY2hvIE1ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgTWFjaW50b3NoIEEvVVguLi4KKwkkKE1BS0UpIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURBVVggLURUQ1BTT0NLRVQgJChL RkxBR1MpIC1pIC1PIiAiTE5LRkxBR1MgPSAtaSIKKworI0FwcGxlIE1hYyBJSSwgQS9VWCBwcmUt My4wLCBjb21waWxlZCB3aXRoIGdjYworYXV4Z2NjOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgTWFjaW50b3NoIEEvVVguLi4KKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURBVVggLURUQ1BTT0NLRVQgLXRyYWRpdGlv bmFsICQoS0ZMQUdTKSAtaSAtTyIgXAorCSJMTktGTEFHUyA9ICIgIkNDID0gZ2NjIiAiQ0MyID0g Z2NjIgorCisjQXBwbGUgTWFjIElJLCBBL1VYLCBwcmUtMy4wLCBidXQgd2l0aCB1ZnMgZmlsZSB2 b2x1bWVzLCB1c2VzIDxkaXJlbnQuaD4uCithdXh1ZnM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWC4uLgorCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFVWCAtRFRDUFNPQ0tFVCAtRERJUkVO VCAkKEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9IC1pIgorCisjQXBwbGUgTWFjIElJLCBBL1VY IDMuMCwgY29tcGlsZWQgd2l0aCBnY2MKK2F1eDNnY2M6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWCAzLjAuLi4KKwkkKE1BS0UpIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURBVVggLURIREJVVUNQIC1ETEZE RVZOTyAtRFRDUFNPQ0tFVCAtRERJUkVOVCAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIg IkxJQlMgPSAkKExJQlMpIiBcCisJIkNDPWdjYyAtcGlwZSAtdHJhZGl0aW9uYWwiICJDQzI9Z2Nj IC1waXBlIC10cmFkaXRpb25hbCIKKworI0FwcGxlIE1hYyBJSSwgQS9VWCAzLjAsIGNvbXBpbGVk IHdpdGggZ2NjLCB1c2VzIGN1cnNlcworYXV4M2NnY2M6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBNYWNpbnRvc2ggQS9VWCAzLjAuLi4KKwkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIENDPSQoQ0MpIENDMj0kKENDMikgYXV4M2djYyBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIktGTEFHUz0kKEtGTEFHUykgLURDS19DVVJTRVMiICJMSUJTID0gLWxjdXJzZXMg JChMSUJTKSIKKworIyBUZW5vbiBNYWNoVGVuLCB0ZXN0ZWQgb24gQXBwbGUgUG93ZXJib29rIHdp dGggTWFjaFRlbiAyLjEuMS5ELgorIyBOT1RFOiBUaGlzIGRvZXNuJ3QgZG8gYW55dGhpbmcgYWJv dXQgVVVDUC4gIEl0IG9ubHkgd29ya3MgaWYgL3Vzci9zcG9vbC91dWNwCisjIGhhcyBwZXJtaXNz aW9uIG9mIDc3NywgYW5kIGRpYWxvdXQgZGV2aWNlIGlzIHdvcmxkIHJlYWQvd3JpdGVhYmxlLgor bWFjaHRlbjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1hY2hUZW4uLi4K KwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAt REJTRDQzIC1EVENQU09DS0VUIC1EU0lHX1YgLUROREdQV05BTSAtRENLX0NVUlNFUyAtTyBcCisJ JChLRkxBR1MpIiAgIkxJQlM9LWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjQmVsbCBMYWJzIFJlc2Vh cmNoIFVOSVggVjEwCisjQ2FuJ3QgYWRkIFRDUC9JUCBiZWNhdXNlIHRoZXJlIGlzIG5vIHNvY2tl dHMgbGlicmFyeS4gIEl0IHdvdWxkIGhhdmUgdG8KKyNiZSBkb25lIHVzaW5nIHN0cmVhbXMsIGJ1 dCB0aGVyZSBpcyBubyBjb2RlIGluIEMtS2VybWl0IGZvciB0aGF0LgorI1JlbW92ZSAtRE5PSkMg aWYgZGVzaXJlZCAoaWYgeW91ciBzeXN0ZW0gaGFzIGNzaCwga3NoLCBvciBiYXNoKS4KK2JlbGx2 MTA6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBCZWxsIExhYnMgUmVzZWFy Y2ggVU5JWCBWMTAuLi4KKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0g XAorCSJDRkxBR1M9IC1EQkVMTFYxMCAtREJTRDQgLURORElSIC1ETk9KQyAtRE5PU1lTSU9DVExI IC1ETk9TRVRSRVUgXAorCS1ETk9DU0VUUyAtTUlOSURJQUwgJChLRkxBR1MpIgorCisjIFdBUk5J Tkc6IFRoZSBlYXJseSBCU0QgZW50cmllcyBkbyBub3QgYnVpbGQgaW4gdmVyc2lvbiA3LjAgd2l0 aCB0aGUgc3RvY2sKKyMgQlNEIGNvbXBpbGVyOiAiVG9vIG1hbnkgZGVmaW5lcyIuICBVbmxlc3Mg eW91IGNhbiByZWJ1aWxkIGNwcCB0byBoYXZlIG1vcmUKKyMgc3BhY2UgZm9yIGRlZmluZXMsIHRo ZXNlIGJ1aWxkcyBtdXN0IGJlIGFjY29tcGxpc2hlZCBieToKKyMgY29weWluZyB0aGUgL3Vzci9p bmNsdWRlIHRyZWUgdG8gc29tZXBsYWNlIGVsc2UsIHByZXByb2Nlc3NpbmcgdGhlcmUgd2l0aCBj YworIyAtRSAtSS4vaW5jbHVkZSBvciB3aGF0ZXZlciAocGx1cyBhbGwgdGhlIHNhbWUgLUQncywg YWRkaW5nIGFueSBuZWNlc3NhcnkKKyMgLVUvLUQgdG8gb3ZlcnJpZGUgdGhlIGFyY2hpdGVjdHVy ZSkpLCByZW5hbWluZyB0aGUgdGhlIHJlc3VsdGluZyBmaWxlcyBiYWNrCisjIHRvIHRoZWlyIG9y aWdpbmFsIG5hbWVzLCBicmluZ2luZyB0aGVtIGJhY2sgdG8gdGhlIG9yaWdpbmFsIEJTRCBzeXN0 ZW0sIGFuZAorIyBydW5uaW5nIHRoZSBtYWtlIHRhcmdldCB0aGVyZS4gIFRoaXMgdGVjaG5pcXVl IHdhcyB1c2VkIGZvciA0LjIgYW5kIDQuMyBCU0QKKyMgb24gYSBWQVggaW4gQy1LZXJtaXQgNy4w IChsYXRlciwgY3BwIG9uIHRoYXQgbWFjaGluZSB3YXMgcmVidWlsdCB0byBhbGxvdworIyBtb3Jl IHN5bWJvbHMsIHNvIHRoZSBDLUtlcm1pdCA4LjAgYnVpbGQgcHJvY2VlZHMgbm9ybWFsbHkpLgor CisjQmVya2VsZXkgVW5peCA0LjEKK2JzZDQxOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgNC4xQlNELi4uCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQxIiAiTElCUyA9IC1sam9icyIKKworI0JlcmtlbGV5IDQu MiwgNC4zLCBhbHNvIFVsdHJpeC0zMiAxLngsIDIueCwgMy54LCBtYW55IG90aGVycworIyBBZGQg LU8sIC1zLCBldGMsIGlmIHRoZXkgd29yay4KKyMgSWYgeW91IGhhdmUgYSB2ZXJzaW9uIG9mIEJT RCBidXQgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBpbnQsCisjICJtYWtlIGJzZCBLRkxB R1M9LURTSUdfViIuCitic2Q0MjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IDQuMkJTRC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJ IkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1ETk9SRUFMUEFUSCAtRE5PVElNRUggLUROT0lL U0QgXAorCS1EQ0tfQ1VSU0VTIC1EU1lTVElNRUJIIC1ETk9QVVRFTlYgLUROT0FOU0kgLURCSUdC VUZPSyAtREJTRDQySEFDSyBcCisJJChLRkxBR1MpIiAiTElCUz0tbGN1cnNlcyAtbHRlcm1jYXAg JChMSUJTKSIKKworYnNkOgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBic2Q0MiBLVEFS R0VUPSQke0tUQVJHRVQtJChAKX0KKworI0JlcmtlbGV5IFVuaXggNC4yIG9yIDQuMyB3aXRoIEhv bmV5RGFuQmVyIFVVQ1AKK2JzZGhkYjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIDQuMkJTRCB3aXRoIEhEQiBVVUNQLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIp IGJzZCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAorCSJLRkxBR1M9IC1ESERCVVVDUCAkKEtG TEFHUykiCisKKyNCZXJrZWxleSBVbml4IDQuMyB3aXRoIGFjdWNudHJsIHByb2dyYW0sIGN1cnNl cywgVENQL0lQIGluY2x1ZGVkLgorYnNkNDM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciA0LjNCU0QuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChA KX0gXAorCSJDRkxBR1M9IC1EQlNENCAtREJTRDQzIC1EVENQU09DS0VUIC1ETk9SRUFMUEFUSCAt RE5PVElNRUggLUROT0lLU0QgXAorCS1EQ0tfQ1VSU0VTIC1EQUNVQ05UUkwgLURTWVNUSU1FQkgg LUROT1BVVEVOViAtRE5PQU5TSSAtREJJR0JVRk9LIFwKKwktREJTRDQySEFDSyAkKEtGTEFHUyki ICJMSUJTPS1sY3Vyc2VzIC1sdGVybWNhcCAkKExJQlMpIgorCisjNC4zQlNELCBjdXJzZXMgZXhj bHVkZWQKK2JzZDQzbmM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciA0LjNC U0QuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gXAorCSJDRkxB R1M9IC1EQlNENCAtREJTRDQzIC1EVENQU09DS0VUIC1ETk9SRUFMUEFUSCAtRE5PVElNRUggXAor CS1EQUNVQ05UUkwgLURTWVNUSU1FQkggLUROT0lLU0QgLUROT1BVVEVOViAtRE5PQU5TSSAtREJJ R0JVRk9LIFwKKwktREJTRDQySEFDSyAkKEtGTEFHUykiICJMSUJTPSQoTElCUykiCisKKyM0LjNC U0QsIFRDUC9JUCBleGNsdWRlZC4KK2JzZDQzbm9uZXQ6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciA0LjNCU0QgKyBjdXJzZXMuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQtJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENCAtREJTRDQzIC1EVENQU09DS0VU IC1ETk9SRUFMUEFUSCAtRE5PVElNRUggLUROT0lLU0QgXAorCS1EQ0tfQ1VSU0VTIC1EQUNVQ05U UkwgLURTWVNUSU1FQkggLUROT1BVVEVOViAtRE5PQU5TSSAtREJJR0JVRk9LIFwKKwktREJTRDQy SEFDSyAtRE5PTkVUICQoS0ZMQUdTKSIgIkxJQlM9LWxjdXJzZXMgLWx0ZXJtY2FwICQoTElCUyki CisKKyNCZXJrZWxleSBVbml4IDQuMiBvciA0LjMgd2l0aCBsb2NrIGRpcmVjdG9yeSAvdXNyL3Nw b29sL3V1Y3AvTENLL0xDSy4udHR5eHgsCisjYnV0IHdpdGhvdXQgYWN1Y250cmwgcHJvZ3JhbQor YnNkbGNrOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgNC4yQlNELCAvdXNy L3Nwb29sL3V1Y3AvTENLLy4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBic2QgS1RB UkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKKwkiS0ZMQUdTPSAtRExDS0RJUiAkKEtGTEFHUykiCisK KyNCZXJrZWxleSBVTklYIDQuNC1MaXRlLCA0LjQtRW5jdW1iZXJlZCwgTmV0LzIsIGV0YyAoUG9z dC1SZW5vKSwKKyN3aXRoIFRDUC9JUCBuZXR3b3JraW5nLiAgVGhpcyB3YXMgdGhlIGJhc2lzIGZv ciBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QsCisjQlNESSwgQlNEL09TLCBhbmQgTWFjIE9TIFgg KGVhY2ggb2Ygd2hpY2ggaGFzIGl0cyBvd24gc2V0IG9mIHRhcmdldHMgdGhhdAorI2FyZSBuZXdl ciB0aGFuIHRoaXMgb25lKS4KKyMKKyNOT1RFOiBUaGlzIGlzIG5vdCBhIHB1cmUgUE9TSVggY29u ZmlndXJhdGlvbi4gIFVzaW5nIC1EUE9TSVggaW5zdGVhZCBvZgorIyAtREJTRDQ0IHByZXZlbnRz IGFueSBraW5kIG9mIGRpcmVjdG9yeS1yZWFkaW5nIChmb3Igd2lsZGNhcmQgZXhwYW5zaW9uKSwK KyNhbmQgZGlzYWxsb3dzIHVzZSBvZiBFTk9UQ09OTiBzeW1ib2wgZm9yIGRldGVjdGluZyBicm9r ZW4gbmV0d29yaworI2Nvbm5lY3Rpb25zLCBhbmQgZGlzYWxsb3dzIFJUUy9DVFMgZmxvdyBjb250 cm9sLCBhbmQgd291bGQgYWxzbyByZXF1aXJlCisjZGVmaW5pdGlvbiBvZiB0aGUgYXBwcm9wcmlh dGUgVVVDUCBsb2NrZmlsZSBjb252ZW50aW9uLgorI0RvIG5vdCBhZGQgLURDS19QT1NJWF9TSUcg d2l0aG91dCByZWFkaW5nIDxzaWduYWwuaD4gZmlyc3QhICBGb3IgZXhhbXBsZSwKKyNzaWdzZXRq bXAoKSwgZXRjLCB0ZW5kIHRvIGJlIGRlZmluZWQgYnV0IG5vdCBpbXBsZW1lbnRlZC4KKyMKKyNO T1RFOiBvcmlnaW5hbGx5IGNyeXB0IHdhcyBpbiBsaWJjIC0gbGF0ZXIgaXQgd2FzIHVuYnVuZGxl ZC4KKyNSZW1vdmUgdGhlIExJQlMgY2xhdXNlIHRvIGJ1aWxkIG9uIGFuIGVhcmx5IDQuNEJTRCBw bGF0Zm9ybS4KKyMKK2JzZDQ0OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig NC40QlNELi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EVENQU09DS0VUICQoS0ZMQUdT KSAtTyIgIkxJQlM9LWxjcnlwdCIKKworI0JlcmtlbGV5IFVOSVggNC40LCBhcyBhYm92ZSwgYnV0 IHdpdGggY3Vyc2VzIGZvciBmdWxsc2NyZWVuIGRpc3BsYXkKKyNQbGVhc2UgcmVhZCBub3RlcyBm b3IgYnNkNDQgZW50cnkganVzdCBhYm92ZS4KKyMgTk9URTogVGhpcyBvbmUgZHVtcGVkIGNvcmUg b24gdGhlIHJlYWwgNC40QlNEIGRldmVsb3BtZW50IHN5c3RlbSBhdAorIyBVQyBCZXJrZWxleSAo YW4gSFAtOTAwMC8zMDApLCBzbyB0aGUgbm8tY3Vyc2VzIHZlcnNpb24gd2FzIHVzZWQKKyMgZm9y IHRoYXQgb25lLCB3aGljaCB3YXMgdW5wbHVnZ2VkIHllYXJzIGFnby4KK2JzZDQ0YzoKKwlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDQuNEJTRCB3aXRoIGN1cnNlcy4uLgorCSQo TUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAkKEtGTEFHUykg LU8iIFwKKwkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgJChMSUJTKSIKKworI0Zv ciBGcmVlQlNEIDEueC4KK2ZyZWVic2QxOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIEZyZWVCU0QuLi4nCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VT IC1EVENQU09DS0VUIC1ETk9DT1RGTUMgLWZ1bnNpZ25lZC1jaGFyIFwKKwktREZORkxPQVQgLURO T0hURVJNQ0FQIC1ETk9SRUFMUEFUSCAtRE5PU1lTQ09ORiAkKEtGTEFHUykgLU8gLXBpcGUiIFwK KwkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1sbSAkKExJQlMpIgorCisjRnJlZUJTRCAyLngg d2l0aCBuY3Vyc2VzCitmcmVlYnNkMjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBGcmVlQlNEIDIueCB3aXRoIG5jdXJzZXMuLi4nCisJJChNQUtFKSBDQz0kKENDKSBDQzI9 JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJT RDQ0IC1EQ0tfTkNVUlNFUyAtRFRDUFNPQ0tFVCAtRE5PQ09URk1DIC1EVVNFX1NUUkVSUk9SIFwK KwktRFRQVVRTQVJHVFlQRT1pbnQgLURUUFVUU0FSRzFDT05TVCAtREZSRUVCU0QyIC1mdW5zaWdu ZWQtY2hhciBcCisJLURGTkZMT0FUICQoS0ZMQUdTKSAtTyAtcGlwZSIgXAorCSJMSUJTPSAtbG5j dXJzZXMgLWx0ZXJtbGliIC1sY3J5cHQgLWxtICQoTElCUykiCisKKyNGb3IgRnJlZUJTRCAyLngg LS0gVXNlcyBjdXJzZXMgcmF0aGVyIHRoYW4gbmN1cnNlcworZnJlZWJzZDJjOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgMi54IHdpdGggY3Vyc2VzLi4uJwor CSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRE5PQ09U Rk1DIC1EVVNFX1NUUkVSUk9SIFwKKwktRFRQVVRTQVJHVFlQRT1pbnQgLURUUFVUU0FSRzFDT05T VCAtREZSRUVCU0QyIC1ERk5GTE9BVCBcCisJLWZ1bnNpZ25lZC1jaGFyICQoS0ZMQUdTKSAtTyAt cGlwZSIgXAorCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1saWIgLWxjcnlwdCAtbG0gJChMSUJTKSIK KworI0ZyZWVCU0QgMy54IHdpdGggbmN1cnNlcyBhbmQgdXVfbG9jaygpCisjKE5vdGU6IHV1X2xv Y2soKSBnb2VzIGJhY2sgdG8gMi4yLjIsIGJ1dCBub3QgbmVjZXNzYXJpbHkgMi4wKQorI09LIDIw MTEvMDgvMjAgRnJlZUJTRCAzLjMKK2ZyZWVic2QzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIEZyZWVCU0QgMy54IHdpdGggbmN1cnNlcy4uLicKKwkkKE1BS0UpIENDPSQo Q0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxB R1M9IC1EQlNENDQgLURDS19OQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9DT1RGTUMgLWZ1bnNpZ25l ZC1jaGFyIFwKKwktRFRQVVRTQVJHVFlQRT1pbnQgLURVU0VfU1RSRVJST1IgLURGUkVFQlNEMyAt RFVTRV9VVV9MT0NLIC1ERk5GTE9BVCBcCisJJChLRkxBR1MpIC1PIC1waXBlIiBcCisJIkxJQlM9 IC1sbmN1cnNlcyAtbGNyeXB0IC1sdXRpbCAtbG0gJChMSUJTKSIKKworI0FzIGFib3ZlIGJ1dCB3 aXRoIGN1cnNlcyByYXRoZXIgdGhhbiBuY3Vyc2VzLgorZnJlZWJzZDNjOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgMy54IHdpdGggY3Vyc2VzLi4uJworCSQo TUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRE5PQ09URk1D IC1EVVNFX1VVX0xPQ0sgXAorCS1EVFBVVFNBUkdUWVBFPWludCAtRFVTRV9TVFJFUlJPUiAtREZS RUVCU0QzICQoS0ZMQUdTKSAtREZORkxPQVQgXAorCS1mdW5zaWduZWQtY2hhciAtcGlwZSAtTyIg XAorCSJMSUJTPSAtbGN1cnNlcyAtbGNyeXB0IC1sdXRpbCAtbG0gJChMSUJTKSIKKworI0ZyZWVC U0QgNC4wIHdpdGggbmN1cnNlcyBhbmQgdXVfbG9jaygpLiAgTm90ZSAtIHRoZXJlIGlzIG5vIGN1 cnNlcyBpbiA0LjAuCisjbmN1cnNlcyA1LjAgaXMgYnJva2VuIHJlcXVpcmluZyB1cyB0byB3b3Jr IGFyb3VuZCB3aXRoIHNldGJ1ZigpLgorZnJlZWJzZDQwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIEZyZWVCU0QgNC54IHdpdGggbmN1cnNlcy4uLicKKwkkKE1BS0UpIEND PSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJD RkxBR1M9IC1EQlNENDQgLURDS19OQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9DT1RGTUMgLURGTkZM T0FUIFwKKwktZnVuc2lnbmVkLWNoYXIgLURUUFVUU0FSR1RZUEU9aW50IC1EVVNFX1NUUkVSUk9S IC1ERlJFRUJTRDQgXAorCS1ETk9OT1NFVEJVRiAtRFVTRV9VVV9MT0NLICQoS0ZMQUdTKSAtTyAt cGlwZSIgXAorCSJMSUJTPSAtbG5jdXJzZXMgLWxjcnlwdCAtbHV0aWwgLWxtICQoTElCUykiCisK KyNGcmVlQlNEIDQuMSBhbmQgYWJvdmUKKyNMaWtlIEZyZWVCU0QgNC4wIGJ1dCB3aXRob3V0IHRo ZSBOT05PU0VUQlVGIGhhY2sgYW5kIHdpdGggQ0tfTkVXVEVSTS4KKyNOT1RFOiBUaGlzIHRhcmdl dCBkZWZpbml0ZWx5IGRvZXMgbm90IHdvcmsgZm9yIEZyZWVCU0QgMy4zIGluIDkuMC4zMDIuCisj YW5kIGl0IGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gNCBvciA1LgorI09LIDIwMTEvMDYveHggRnJl ZUJTRCAzLjMsIDQsNCwgNC43LCBhbmQgOC4yCisjT0sgMjAxMS8wOC8yMSBGcmVlQlNEIDMuMywg NC40LCA2LjQsIDkuMAorZnJlZWJzZCBmcmVlYnNkNDEgZnJlZWJzZDcyIGZyZWVic2Q1IGZyZWVi c2Q2IGZyZWVic2Q3IGZyZWVic2Q4IGZyZWVic2Q5OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIEZyZWVCU0QgNC4xIG9yIGxhdGVyLi4uJworCUBpZiB0ZXN0IGB1bmFtZSAt ciB8IGN1dCAtZCAuIC1mIDFgIC1nZSA4OyB0aGVuIFwKKwkgICBIQVZFX0ZCU0Q4PSctREZSRUVC U0Q4JzsgXAorCWVsc2UgSEFWRV9GQlNEOD0nJzsgZmk7IFwKKwlpZiB0ZXN0IGB1bmFtZSAtciB8 IGN1dCAtZCAuIC1mIDFgIC1nZSA5OyB0aGVuIFwKKwkgICBIQVZFX0ZCU0Q5PSctREZSRUVCU0Q5 JzsgXAorCWVsc2UgSEFWRV9GQlNEOT0nJzsgIGZpOyBcCisJaWYgdGVzdCAtZiAvdXNyL2luY2x1 ZGUvdXRtcHguaCA7IFwKKwl0aGVuIEhBVkVfVVRNUFg9Jy1ESEFWRVVUTVBYJyA7IFwKKwllbHNl IEhBVkVfVVRNUFg9JycgOyBmaTsgXAorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0NCAtRENLX05D VVJTRVMgLURDS19ORVdURVJNIC1EVENQU09DS0VUIC1ETk9DT1RGTUMgXAorCS1ERlJFRUJTRDQg JCRIQVZFX0ZCU0Q4ICQkSEFWRV9GQlNEOSAtRFVTRV9VVV9MT0NLIC1ERk5GTE9BVCBcCisJJCRI QVZFX1VUTVBYIC1ESEVSQUxEPVwiXFxcIiBgdW5hbWUgLXJzYFxcXCJcIiBcCisJLWZ1bnNpZ25l ZC1jaGFyIC1EVFBVVFNBUkdUWVBFPWludCAtRFVTRV9TVFJFUlJPUiAkKEtGTEFHUykgXAorCS1P MiAtcGlwZSJcCisJIkxJQlM9IC1sbmN1cnNlcyAtbGNyeXB0IC1sdXRpbCAtbG0gJChMSUJTKSIK KworI0ZyZWVCU0QgNS4wIG9yIGxhdGVyIHdpdGggT3BlblNTTC4KKyNPSyAyMDExLzA2LzE1IEZy ZWVCU0QgNC43IGFuZCA4LjIKKyNPSyAyMDExLzA4LzIwIEZyZWVCU0QgOS4wLUNVUlJFTlQKK2Zy ZWVic2Qrc3NsIGZyZWVic2Qrb3BlbnNzbCBmcmVlYnNkNTArb3BlbnNzbDoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBGcmVlQlNEIHdpdGggS2VyYmVyb3MgNS4uLicKKwlA Y2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBcCisJICAqMC45LjcqKSBPUEVOU1NMT1BUSU9OPSIt RE9QRU5TU0xfMDk3IiA7OyBcCisJICAqMC45LjgqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xf MDk4IiA7OyBcCisJICAqMS5bMC05XS5bMC05XSopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8x MDAiIDs7IFwKKwkgICopIE9QRU5TU0xPUFRJT049IiIgOzsgXAorCWVzYWM7IFwKKwlIQVZFX0RF Uz0nJzsgXAorCURFU19MSUI9Jyc7IFwKKwlpZiBscyAvdXNyL2xpYi9saWJkZXMqID4gL2Rldi9u dWxsIDI+IC9kZXYvbnVsbCB8fCBcCisJICAgbHMgJChTU0xMSUIpL2xpYmRlcyogPiAvZGV2L251 bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICBERVNfTElCPSctbGRlcyc7IFwKKwkgICAg ICBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJERVMnOyBcCisgICAgICAgICAgICAgIGVjaG8gIkhB VkUgREVTIjsgXAorICAgICAgICAgICBlbHNlIGVjaG8gIk5PIERFUyI7IFwKKwlmaTsgXAorCSQo TUFLRSkgZnJlZWJzZCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9ICQoQ0MpIiAiQ0My ID0gJChDQzIpIiBcCisJS0ZMQUdTPSItRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMICQoU1NM SU5DKSAtRFpMSUIgJCRPUEVOU1NMT1BUSU9OIFwKKwkkJEhBVkVfREVTICQoS0ZMQUdTKSIgICJM TktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlM9IC1sbmN1cnNlcyAtbGNyeXB0IC1sc3Ns IC1sY3J5cHRvIC1sdXRpbCAtbG0gXAorCSQoU1NMTElCKSAkJERFU19MSUIgJChMSUJTKSI7IFwK KwlpZiBbICEgLWYgLi93ZXJtaXQgXSB8fCBbIC4vY2tjbWFpLm8gLW50IC4vd2VybWl0IF0gOyB0 aGVuIFwKKwkJZWNobyAiIjsgXAorCQllY2hvICJJZiBidWlsZCBmYWlsZWQgdHJ5OiI7IFwKKwkJ ZWNobyAiIjsgXAorCQllY2hvICIgIG1ha2UgY2xlYW4gOyBtYWtlICQke0tUQVJHRVQ6LSQoQCl9 IEtGTEFHUz0tVUNLX0RFUyI7IFwKKwkJZWNobyAiIjsgXAorCWZpCisKKyNOZXRCU0QgMS40LjEg b3IgbGF0ZXIgd2l0aCB2YW5pdHkgYmFubmVyIGF1dG9tYXRlZCB3aXRoIHVuYW1lCisjYW5kIGF1 dG9tYXRpYyBpbmNsdXNpb24gb2YgbGFyZ2UgZmlsZSBzdXBwb3J0IGlmIGl0IGlzIGF2YWlsYWJs ZS4KKyNUaGlzIHRhcmdldCB0ZXN0ZWQgc3VjY2Vzc2Z1bGx5IG9uIE5ldEJTRCAxLjQuMSwgMS41 LjIsIGFuZCAyLjAuMyAoSmFuIDIwMDYpLgorI0ZhaWxzIG9uIE5ldEJTRCAyLjAgb24gU3VuLzMg bWM2ODAzMCB3aXRoIGdjYyAzLjMuMyB1bmxlc3Mgb3B0aW1pemF0aW9uIGlzCisjZGlzYWJsZWQg b24gY2tjZm4yLmMgKCJLRkxBR1M9LU8wIikgKExldHRlciBPIERpZ2l0IFplcm8pLgorIyhUaGlz IGNvdWxkIGJlIGF1dG9tYXRlZCBieSB0ZXN0aW5nIGB1bmFtZSAtbWAgZm9yICJzdW4zIi4pCisj T0s6IDIwMTEvMDYvMTUgb24gTmV0QlNEIDEuNS4yIGFuZCA1LjEuCisjT0s6IDIwMTEvMDgvMjEg b24gNS4xLgorbmV0YnNkIG5ldGJzZDIgbmV0YnNkMTUgbmV0YnNkMTYgb2xkLW5ldGJzZDoKKwlA ZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5ldEJTRCB3aXRoIGN1cnNlcy4uLgor CSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUz1gZ3JlcCBmc2Vla28gL3Vzci9pbmNsdWRlL3N0ZGlvLmggPiAvZGV2 L251bGwgJiYgXAorCWVjaG8gJy1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklU Uz02NCdgIFwKKwktREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EVVNFX1NUUkVSUk9S IC1ESEFWRV9PUEVOUFRZIFwKKwktZnVuc2lnbmVkLWNoYXIgLURIRVJBTEQ9XCJcXFwiIE5ldEJT RCBgdW5hbWUgLXJgXFxcIlwiIFwKKwktRENLX0RUUkNEIC1EQ0tfRFRSQ1RTIC1EVFBVVFNBUkdU WVBFPWludCAtREZORkxPQVQgJChLRkxBR1MpIC1PIiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sY3J5 cHQgLWxtIC1sdXRpbCAkKExJQlMpIgorCisjTmV0QlNEIDEuNC4xIG9yIGxhdGVyIHdpdGggT3Bl blNTTAorI09LOiAyMDExLzA2LzE1IG9uIE5ldEJTRCA1LjEgKGJ1dCBub3QgMS41LjIgd2l0aCBP cGVuU1NMIDAuOS41YSkKKyNPSzogMjAxMS8wOC8yMSBvbiA1LjEuCituZXRic2Qrc3NsIG5ldGJz ZCtvcGVuc3NsOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5ldEJTRCtP cGVuU1NMIFNTTExJQj0kKFNTTExJQiknCisJQGNhc2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAor CSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAorCSAgKjAuOS44 KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAorCSAgKjEuWzAtOV0uWzAtOV0q KSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCisJICAqKSBPUEVOU1NMT1BUSU9O PSIiIDs7IFwKKwllc2FjOyBcCisJSEFWRV9ERVM9Jyc7IFwKKwlERVNfTElCPScnOyBcCisJaWYg bHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgfHwgXAorCSAgIGxz ICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJICAg ICAgREVTX0xJQj0nLWxkZXMnOyBcCisJICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElCREVT JzsgXAorICAgICAgICAgICAgICBlY2hvICJIQVZFIERFUyI7IFwKKyAgICAgICAgICAgZWxzZSBl Y2hvICJOTyBERVMiOyBcCisJZmk7IFwKKwkkKE1BS0UpIG5ldGJzZCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9ICJDQyA9ICQoQ0MpIiAiQ0MyID0gJChDQzIpIiBcCisJIktGTEFHUz0gLURDS19B VVRIRU5USUNBVElPTiAtRENLX0VOQ1JZUFRJT04gLURDS19DQVNUICQkSEFWRV9ERVMgXAorCS1E Q0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiAtRE5PX0RDTF9JTkVUX0FUT04gJCRPUEVOU1NMT1BUSU9O IFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlM9IC1ML3Vz ci9wa2cvbGliIC1SL3Vzci9wa2cvbGliIC1sc3NsICQkREVTX0xJQiAtbGN1cnNlcyBcCisJLWxj cnlwdG8gLWxjcnlwdCAtbHogLWxtIC1scGFtIC1sdXRpbCAkKExJQlMpIgorCisjTmV0QlNEIHdp dGggTUlUIEtlcmJlcm9zIDU6CisjIE9LIDIwMTEvMDYvMTUgKG9uY2UgSzVJTkMgYW5kIEs1TElC IHdlcmUgc2V0IHJpZ2h0KS4KKyMgTk9UIE9LIGZvciBIZWltZGFsIC0gSGVpbWRhbCBLZXJiZXJv cyBzdXBwb3J0IGluIEMtS2VybWl0IG5lZWRzIHdvcmsuCisjIE9LOiAyMDExLzA4LzIxIG9uIDUu MS4KK25ldGJzZCtrcmI1OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5l dEJTRCB3aXRoIEtlcmJlcm9zIDUuLi4nCisJQGNhc2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAor CSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAorCSAgKjAuOS44 KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAorCSAgKjEuWzAtOV0uWzAtOV0q KSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCisJICAqKSBPUEVOU1NMT1BUSU9O PSIiIDs7IFwKKwllc2FjOyBcCisJSEFWRV9ERVM9Jyc7IFwKKwlERVNfTElCPScnOyBcCisJaWYg bHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgfHwgXAorCSAgIGxz ICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJICAg ICAgREVTX0xJQj0nLWxkZXMnOyBcCisJICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElCREVT JzsgXAorICAgICAgICAgICAgICBlY2hvICJIQVZFIERFUyI7IFwKKyAgICAgICAgICAgZWxzZSBl Y2hvICJOTyBERVMiOyBcCisJZmk7IFwKKwkkKE1BS0UpIG5ldGJzZCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9ICJDQyA9ICQoQ0MpIiAiQ0MyID0gJChDQzIpIiBcCisJIktGTEFHUz0gLURDS19B VVRIRU5USUNBVElPTiAtRENLX0VOQ1JZUFRJT04gLURDS19LRVJCRVJPUyAtREtSQjUgXAorCS1E Q0tfQ0FTVCAkJEhBVkVfREVTIC1ETk9GVFBfR1NTQVBJICQoSzVJTkMpICQoSzVJTkMpL2tyYjUg XAorCSQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKEs1TElCKSAtTC91c3IvcGtnL2xpYiAtUi91c3Iv cGtnL2xpYiAtbGN1cnNlcyAkJERFU19MSUIgXAorCS1sY3J5cHRvIC1sZ3NzYXBpIC1sa3JiNSAt bG0gLWx1dGlsICQoTElCUykiCisKKyMgTmV0QlNEIC0gV2l0aCBLZXJiZXJvcyA1IGFuZCBTU0wg YW5kIFpsaWIuCisjIE9LOiAyMDExLzA4LzIxIG9uIDUuMSB3aXRoIE1JVCBLZXJiZXJvcy4KK25l dGJzZCtrcmI1K3NzbCBuZXRic2Qra3JiNStvcGVuc3NsK3psaWI6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTmV0QlNEK09wZW5TU0wrS2VyYmVyb3M1Li4uJworCUBjYXNl IGBvcGVuc3NsIHZlcnNpb25gIGluIFwKKwkgICowLjkuNyopIE9QRU5TU0xPUFRJT049Ii1ET1BF TlNTTF8wOTciIDs7IFwKKwkgICowLjkuOCopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTgi IDs7IFwKKwkgICoxLlswLTldLlswLTldKikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzEwMCIg OzsgXAorCSAgKikgT1BFTlNTTE9QVElPTj0iIiA7OyBcCisJZXNhYzsgXAorCUhBVkVfREVTPScn OyBcCisJREVTX0xJQj0nJzsgXAorCWlmIGxzIC91c3IvbGliL2xpYmRlcyogPiAvZGV2L251bGwg Mj4gL2Rldi9udWxsIHx8IFwKKwkgICBscyAkKFNTTExJQikvbGliZGVzKiA+IC9kZXYvbnVsbCAy PiAvZGV2L251bGw7IHRoZW4gXAorCSAgICAgIERFU19MSUI9Jy1sZGVzJzsgXAorCSAgICAgIEhB VkVfREVTPSctRENLX0RFUyAtRExJQkRFUyc7IFwKKyAgICAgICAgICAgICAgZWNobyAiSEFWRSBE RVMiOyBcCisgICAgICAgICAgIGVsc2UgZWNobyAiTk8gREVTIjsgXAorCWZpOyBcCisJJChNQUtF KSBuZXRic2QgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSAkKENDKSIgIkNDMiA9ICQo Q0MyKSIgXAorCSJLRkxBR1M9IC1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19FTkNSWVBUSU9OIC1E Q0tfQ0FTVCAkJEhBVkVfREVTIFwKKwktRENLX0tFUkJFUk9TIC1ES1JCNSAtRE5PRlRQX0dTU0FQ SSAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1IFwKKwktRENLX1NTTCAtRENLX1BBTSAtRFpMSUIgLURO T19EQ0xfSU5FVF9BVE9OICQkT1BFTlNTTE9QVElPTiBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1Mg PSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTPSAkKEs1TElCKSAtTC91c3IvcGtnL2xpYiAtUi91c3Iv cGtnL2xpYiAtbHNzbCAkJERFU19MSUIgXAorCS1sY3J5cHRvIC1sY3J5cHQgLWxnc3NhcGkgLWxr cmI1IC1seiAtbG0gLWxwYW0gLWx1dGlsIC1sY3Vyc2VzICQoTElCUykiCisKKyNTcGVjaWFsIFNl Y3VyaXR5IEVuaGFuY2VkIE5ldEJTRCB0YXJnZXQgd2l0aCBTUlAsIFNTTCwgYW5kIHpsaWIgc3Vw cG9ydC4KKyNUbyBidWlsZCB0aGlzLCB5b3UgbmVlZCB0byBCVUlMRCB0aGUgcGtnc3JjIHNycF9j bGllbnQgcGFja2FnZS4gIEFmdGVyCisjeW91IGJ1aWxkIGl0LCB5b3UgbXVzdCBnbyBpbnRvIHdv cmsvc3JwLXgueS56L2xpYmtyeXB0byBhbmQgImJtYWtlIGluc3RhbGwiCisjdGhlbiBnbyB0byB3 b3JrL3NycC14Lnkuei9saWJzcnAgYW5kICJibWFrZSBpbnN0YWxsIi4gIEFzIG9mIDIwMDVRMywg dGhlCisjcGtnc3JjIGluc3RhbGwgb25seSBpbnN0YWxsZWQgdGhlIHN0YXRpY2FsbHkgbGlua2Vk IGNsaWVudCBhcHBsaWNhdGlvbnMuICBZb3UKKyNuZWVkIHRvIG1hbnVhbGx5IGluc3RhbGwgdGhl IGxpYnJhcmllcyB0byBidWlsZCB5b3VyIG93biBhcHBsaWNhdGlvbnMuCisjTk9UIFRFU1RFRCBS RUNFTlRMWSAtIHByb2JhYmx5IG5lZWRzIHdvcmsuCituZXRic2Qrc3NsK3NycCt6bGliOgorCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTmV0QlNEIHdpdGggY3Vyc2VzLi4uCisJ JChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQ0IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EVVNFX1NU UkVSUk9SIC1ETkVUQlNEMTUgXAorCS1EQ0tfRFRSQ0QgLURDS19EVFJDVFMgLURUUFVUU0FSR1RZ UEU9aW50IC1ESEFWRV9PUEVOUFRZIFwKKwktSS91c3IvaW5jbHVkZS9vcGVuc3NsIC1JL3Vzci9w a2cvaW5jbHVkZSBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAtRFBSRV9TUlBfMV80 XzUgLURDS19FTkNSWVBUSU9OIFwKKwktRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19T U0wgLURaTElCIC1ERk5GTE9BVCAkKEtGTEFHUykgLU8iIFwKKwkiTElCUz0gLUwvdXNyL3BrZy9s aWIgLVIvdXNyL3BrZy9saWIgLWxjdXJzZXMgLWxzcnAgLWxnbXAgLWxkZXMgXAorCS1sc3NsIC1s a3J5cHRvIC1sY3J5cHRvIC1sY3J5cHQgLWx6IC1sbSAtbHV0aWwgJChMSUJTKSIKKworI05ldEJT RCB3aXRoIGN1cnNlcyBsZWZ0IG91dCAoZS5nLiBmb3IgdXNlIGFzIElLU0QpLgorbmV0YnNkbmM6 CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOZXRCU0Qgd2l0aCBubyBjdXJz ZXMuLi4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgbmV0YnNkIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1M9LUROT0NVUlNFUyIKKworI05ldEJTRCB3aXRoIG5jdXJz ZXMgcmVxdWVzdGVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gY3Vyc2VzLXdoaWNoLWlzLW5jdXJz ZXMKK25ldGJzZG46CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOZXRCU0Qg d2l0aCBjdXJzZXMuLi4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9YGdyZXAgZnNlZWtvIC91c3IvaW5jbHVk ZS9zdGRpby5oID4gL2Rldi9udWxsICYmIFwKKwllY2hvICctRF9MQVJHRUZJTEVfU09VUkNFIC1E X0ZJTEVfT0ZGU0VUX0JJVFM9NjQnYCBcCisJLURCU0Q0NCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tF VCAtRFVTRV9TVFJFUlJPUiAtREhBVkVfT1BFTlBUWSBcCisJLURIRVJBTEQ9XCJcXFwiIE5ldEJT RCBgdW5hbWUgLXJgXFxcIlwiIFwKKwktRENLX0RUUkNEIC1EQ0tfRFRSQ1RTIC1EVFBVVFNBUkdU WVBFPWludCAtREZORkxPQVQgJChLRkxBR1MpIC1PIiBcCisJIkxJQlM9IC1ML3Vzci9wa2cvbGli IC1sbmN1cnNlcyAtbGNyeXB0IC1sbSAtbHV0aWwgJChMSUJTKSIKKworI09wZW5CU0QgYmVmb3Jl IDIuMy4KKyNVc2VzIG5jdXJzZXMgYXMgaXRzIGN1cnNlcyBzbyB1c2UgLWx0ZXJtbGliLCBub3Qg LWx0ZXJtY2FwCisjQnV0IGl0IGRvZXNuJ3QgdXNlIHV1X2xvY2soKSB3aGljaCB3YXMgaW50cm9k dWNlZCBpbiBPcGVuQlNEIDIuMy4KKyNGb3IgdGhhdCB1c2UgdGhlIG5leHQgZW50cnkuCisjQWRk IC1ETUFJTlRZUEU9aW50IGlmIHlvdSBnZXQgY29tcGxhaW50cyBhYm91dCBtYWluOiByZXR1cm4g dHlwZSBpcyBub3QgaW50Lgorb3BlbmJzZG9sZDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIE9wZW5CU0QuLi4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENDQgLURDS19DVVJT RVMgLURDS19ORVdURVJNIC1EVENQU09DS0VUIC1ET1BFTkJTRCBcCisJLURGTkZMT0FUIC1ETkRT WVNFUlJMSVNUICQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWxpYiAtbG0iCisK KyNPcGVuQlNEIDIuMyBvciBsYXRlcgorI0FkZCAtRE1BSU5UWVBFPWludCBpZiB5b3UgZ2V0IGNv bXBsYWludHMgYWJvdXQgbWFpbjogcmV0dXJuIHR5cGUgaXMgbm90IGludC4KKyNGb3IgQy1LZXJt aXQgOC4wIChDaHJpc3RpYW4gV2Vpc2dlcmJlcik6CisjIC1sdGVybWxpYiByZW1vdmVkIChwcmVz dW1hYmx5IGJlY2F1c2UgLWxjdXJzZXM9PW5jdXJzZXMgYWxyZWFkeSBpbmNsdWRlcyBpdCkKKyMg LURVU0VfVVVfTE9DSyBhbmQgLWx1dGlsIGFkZGVkIGZvciB1dV9sb2NrKCkKKyMgLURORFNZU0VS UkxJU1QgY2hhbmdlZCB0byAtRFVTRV9TVFJFUlJPUgorI0lmIHRoaXMgZ2l2ZXMgeW91IHRyb3Vi bGUgdXNlIHRoZSBwcmV2aW91cyBlbnRyeS4KKyNOT1RFOiBUaGUgb3BlbmJzZCBhbmQgb3BlbmJz ZCtzc2wgc2hvdWxkIGJlIHJld29ya2VkIHRvIGJlIGxpa2UgdGhlCisjY29ycmVzcG9uZGluZyBG cmVlQlNEIGFuZCBOZXRCU0QgdGFyZ2V0cy4gIFRoZSBtaXJic2QgdGFyZ2V0cyBzaG91bGQKK29w ZW5ic2Q6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBPcGVuQlNEIDIuMyBv ciBsYXRlci4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRENLX05F V1RFUk0gLURUQ1BTT0NLRVQgLURPUEVOQlNEIFwKKwktREhFUkFMRD1cIlxcXCIgT3BlbkJTRCBg dW5hbWUgLXJgXFxcIlwiIFwKKwktRFVTRV9VVV9MT0NLIC1ERk5GTE9BVCAtRFVTRV9TVFJFUlJP UiAkKEtGTEFHUykgLU8iIFwKKwkiTElCUz0gLWxjdXJzZXMgLWx1dGlsIC1sbSIKKworI0JldHRl ciB0byBjaGFpbiB0byB0aGUgb3BlbmJzZCB0YXJnZXQgYnV0Li4uCittaXJic2Q6CisJQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBPcGVuQlNEIDIuMyBvciBsYXRlci4uLgorCSQo TUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURCU0Q0NCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NL RVQgLURPUEVOQlNEIFwKKwktREhFUkFMRD1cIlxcXCIgTWlyQlNEIGB1bmFtZSAtcmBcXFwiXCIg XAorCS1EVVNFX1VVX0xPQ0sgLURGTkZMT0FUIC1EVVNFX1NUUkVSUk9SICQoS0ZMQUdTKSAtTyIg XAorCSJMSUJTPSAtbGN1cnNlcyAtbHV0aWwgLWxtIgorCisjT3BlbkJTRCAzLjAgb3IgbGF0ZXIg aW5jbHVkZXMgT3BlblNTTAorI0FkZCAtRE1BSU5UWVBFPWludCBpZiB5b3UgZ2V0IGNvbXBsYWlu dHMgYWJvdXQgbWFpbjogcmV0dXJuIHR5cGUgaXMgbm90IGludC4KKyNGb3IgQy1LZXJtaXQgOC4w IChDaHJpc3RpYW4gV2Vpc2dlcmJlcik6CisjIC1sdGVybWxpYiByZW1vdmVkIChwcmVzdW1hYmx5 IGJlY2F1c2UgLWxjdXJzZXM9PW5jdXJzZXMgYWxyZWFkeSBpbmNsdWRlcyBpdCkKKyMgLURVU0Vf VVVfTE9DSyBhbmQgLWx1dGlsIGFkZGVkIGZvciB1dV9sb2NrKCkKKyMgLURORFNZU0VSUkxJU1Qg Y2hhbmdlZCB0byAtRFVTRV9TVFJFUlJPUgorI0lmIHRoaXMgZ2l2ZXMgeW91IHRyb3VibGUgdXNl IHRoZSBwcmV2aW91cyBlbnRyeS4KK29wZW5ic2Qrc3NsOgorCUBlY2hvIE1ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgT3BlbkJTRCAzLjAgb3IgbGF0ZXIuLi4KKwkkKE1BS0UpIENDPSQoQ0Mp IENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9 IC1EQlNENDQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1EVENQU09DS0VUIC1ET1BFTkJTRCBc CisJLURIRVJBTEQ9XCJcXFwiIE9wZW5CU0QgYHVuYW1lIC1yYFxcXCJcIiBcCisJLURVU0VfVVVf TE9DSyAtREZORkxPQVQgLURVU0VfU1RSRVJST1IgLURDS19BVVRIRU5USUNBVElPTiBcCisJLURD S19TU0wgJChLRkxBR1MpIC1PIiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sdXRpbCAtbG0gLWxzc2wg LWxjcnlwdG8iCisKK21pcmJzZCtzc2w6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBPcGVuQlNEIDMuMCBvciBsYXRlci4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0My KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0NCAt RENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLURPUEVOQlNEIFwKKwktREhFUkFM RD1cIlxcXCIgTWlyQlNEIGB1bmFtZSAtcmBcXFwiXCIgXAorCS1EVVNFX1VVX0xPQ0sgLURGTkZM T0FUIC1EVVNFX1NUUkVSUk9SIC1EQ0tfQVVUSEVOVElDQVRJT04gXAorCS1EQ0tfU1NMIC1ETk9f RENMX0lORVRfQVRPTiAkKEtGTEFHUykgLU8iIFwKKwkiTElCUz0gLWxjdXJzZXMgLWx1dGlsIC1s bSAtbHNzbCAtbGNyeXB0byIKKworIyBtYWtlIDM4NmJzZCAwLjBuZXcsIHBvc2l4CisjIGZvciAg Mzg2YnNkIDAuMS4yNCwgY2hhbmdlIC91c3IvaW5jbHVkZS90ZXJtaW9zLmggdG8gI2RlZmluZSBO Q0NTIGlmCisjICBfUE9TSVhfU09VUkNFIGlzICNkZWZpbmVkLiAoc291cmNlOiBsZXdpbmUsIHBv c2l4IHByZ21ycyBndWlkZSwgb2ByZWlsbHkpCisjTk9URTogTG9jayBkaXJlY3RvcnkgaXMgL3Zh ci9zcG9vbC9sb2NrLiAgRm9ybWVybHksIGl0IHdhcyAvdmFyL3Nwb29sL3V1Y3AsCisjYnV0IHJl cG9ydGVkbHkgPHdqb25lc0BoYWxjeW9uLmNvbT4gdGhhdCB3YXMgZHVlIHRvIGEgdHlwbyBpbiAn bWFuIHRpcCcuCiszODZic2Q6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig am9saXggMzg2QlNEIDAuMG5ldyBhbmQgMC4xLjI0Li4uJworCSQoTUFLRSkgQ0M9JChDQykgQ0My PSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURQ T1NJWCAtRFNFVFJFVUlEIC1EUElEU1RSSU5HIC1EVVNMRUVQIFwKKwktRF8zODZCU0QgLURDS19D VVJTRVMgLURUQ1BTT0NLRVQgXAorCS1ETE9DS19ESVI9XFxcIi92YXIvc3Bvb2wvbG9ja1xcXCIg XAorCSQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxjdXJzZXMgLWx0ZXJt Y2FwIgorCisjIE1hYyBPUyBYIDEwIGVhcmx5IHZlcnNpb25zLgorIyBGb3IgMTAuMy45IGFuZCBs YXRlciwgdXNlIHRoZSBtYWNvc3ggdGFyZ2V0IGJlbG93LgorCisjTWFjIE9TIFggMS4wIChSaGFw c29keSwgRGFyd2luKSAtLSBUQ1AvSVAgYnV0IG5vIGN1cnNlcy4KK29sZG1hY29zeDEwOgorCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgYHVuYW1lIC1zYC4uLgorCSQoTUFLRSkg Q0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUz0gLURNQUNPU1gxMCAtRFRDUFNPQ0tFVCAtRFVTRV9TVFJFUlJPUiAtTyAkKEtGTEFH UykiCisKKyNNYWMgT1MgWCAxLjAgKFJoYXBzb2R5LCBEYXJ3aW4pIC0tIFRDUC9JUCBhbmQgY3Vy c2VzLgorI05vdGU6IGN1cnNlcyBtdXN0IGJlIG9idGFpbmVkIHNlcGFyYXRlbHkuICBTZWUgbmV4 dCBlbnRyeSBmb3IgbmN1cnNlcy4KKyNBZGQgIkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiIGlm IG5lY2Vzc2FyeSAoYnV0IHJlcG9ydGVkbHkgaXQgaXMgbm90KS4KK29sZG1hY29zeDEwYzoKKwlA ZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIGB1bmFtZSAtc2AgKyBjdXJzZXMuLi4K KwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJDRkxBR1M9IC1ETUFDT1NYMTAgLURDS19DVVJTRVMgLURUUFVUU0ZOVFlQRT12 b2lkIC1EVFBVVFNJU1ZPSUQgXAorCS1EVENQU09DS0VUIC1EVVNFX1NUUkVSUk9SIC1PICQoS0ZM QUdTKSIKKworI01hYyBPUyBYIDEuMCAoUmhhcHNvZHksIERhcndpbikgLS0gVENQL0lQIGFuZCBu Y3Vyc2VzLgorI05vdGU6IG5jdXJzZXMgbXVzdCBiZSBvYnRhaW5lZCBzZXBhcmF0ZWx5LgorI0lu IHRoZSBldmVudCBvZiB0cm91YmxlIHdpdGggdGhpcyBvbmUgdHJ5IHRoZSBuZXh0IG9uZS4KK29s ZG1hY29zeDEwbmM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBgdW5hbWUg LXNgICsgbmN1cnNlcy4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURNQUNPU1gxMCAtRENLX05DVVJT RVMgLURUQ1BTT0NLRVQgLURVU0VfU1RSRVJST1IgLU8gXAorCSQoS0ZMQUdTKSIgIkxJQlM9IC1s bmN1cnNlcyAkKExJQlMpIgorCisjTWFjIE9TIFggMTAuMiAoSmFndWFyKSBuY3Vyc2VzLgorb2xk bWFjb3N4MTAybmM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBgdW5hbWUg LXNgICsgbmN1cnNlcy4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURNQUNPU1gxMCAtRENLX05DVVJT RVMgLURUQ1BTT0NLRVQgLURVU0VfU1RSRVJST1IgLU8gXAorCSQoS0ZMQUdTKSAiICJMSUJTPSAt bG5jdXJzZXMgJChMSUJTKSIKKworI1RoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiBjdXJzZXMu aCBhbHNvIGV4aXN0cywgaXQgY29uZmxpY3RzIHdpdGgKKyNuY3Vyc2VzLmggYW5kIGFuZCB3ZSBo YXZlIGZhdGFsIGVycm9ycy4gIElmIHRoaXMgaGFwcGVucyB0byB5b3UsIHRoZW4KKyN0cnkgdGhp cyB0YXJnZXQuCitvbGRtYWNvc3gxMG5jeDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIGB1bmFtZSAtc2AgKyBuY3Vyc2VzLi4uCisJQHJtIC1mIC4vY3Vyc2VzLmg7IHRvdWNo IC4vY3Vyc2VzLmgKKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1ETUFDT1NYMTAgLURDS19OQ1VSU0VTIC1E VENQU09DS0VUIC1EVVNFX1NUUkVSUk9SIFwKKwktSS4gLU8gJChLRkxBR1MpICIgXAorCSJMSUJT PSAtbG5jdXJzZXMgJChMSUJTKSIKKwlAcm0gLWYgLi9jdXJzZXMuaAorCisjTWFjIE9TIFggMTAu MyAoUGFudGhlcikgLSBBc3N1bWVzIG5jdXJzZXMgaXMgaW5zdGFsbGVkLgorb2xkbWFjb3N4MTAz OiAKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIGB1bmFtZSAtc2AgKyBuY3Vy c2VzLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE1BQ09TWDEwIC1ETUFDT1NYMTAzIC1EQ0tfTkNV UlNFUyAtRFRDUFNPQ0tFVCAtRENLSFRUUCBcCisJLURVU0VfU1RSRVJST1IgLURVU0VfTkFNRVNF Ul9DT01QQVQgLU8gXAorCSQoS0ZMQUdTKSAiICJMSUJTPSAtbG5jdXJzZXMgLWxyZXNvbHYgJChM SUJTKSIKKworI01hYyBPUyBYIDEwLjMgKFBhbnRoZXIpIHdpdGggS2VyYmVyb3MgNSBhbmQgU1NM LCBhc3N1bWVzIG5jdXJzZXMgaXMgaW5zdGFsbGVkLgorb2xkbWFjb3N4MTAzK3NlY3VyZToKKwlA ZWNobyBNYWtpbmcgU2VjdXJlIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBgdW5hbWUgLXNgICsgbmN1 cnNlcy4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURNQUNPU1gxMCAtRE1BQ09TWDEwMyAtRENLX05D VVJTRVMgLURUQ1BTT0NLRVQgXAorCS1EVVNFX1NUUkVSUk9SIC1EVVNFX05BTUVTRVJfQ09NUEFU IC1PIC1EQ0tfUEFNIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1 IC1EWkxJQiBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAt RENLX1NTTCBcCisJJChLRkxBR1MpICIgIkxJQlM9IC1sc3NsIC1sY3J5cHRvIC1sa3JiNSAtbGNv bV9lcnIgXAorCS1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbHBhbSAtbG5jdXJzZXMgLWxyZXNv bHYgJChMSUJTKSIKKworIyBUSElTIElTIFRIRSBNQUlOIE1BQyBPUyBYIFRBUkdFVCAodGhlIG5l eHQgb25lIGlzIGZvciBLZXJiZXJvcy9TU0wgYnVpbGRzKS4KKyMgVXNlIHRoaXMgdGFyZ2V0IGZv ciAxMC4zLjkgKG9yIG1heWJlIGVhcmxpZXIpIHRocm91Z2ggMTAuNiAobWF5YmUgbGF0ZXIpCisj IG9uIGJvdGggUG93ZXIgYW5kIEludGVsIGFyY2hpdGVjdHVyZXMuICBUaGlzIG9uZSB1c2VzIHV0 bXAuaCBvbiAxMC40IGFuZAorIyBlYXJsaWVyIGFuZCB1dG1weC5oIG9uIDEwLjUgb253YXJkcy4K KyMgTm90ZTogTWFjIE9TIFggMTAuNSBhbmQgZWFybGllciBhcmUgMzItYml0OyAxMC42IGFuZCBs YXRlciA2NC1iaXQuCisjIE5vdGUgMjogQXMgb2YgQy1LZXJtaXQgOS4wIC1OT1VVQ1AgaXMgaW5j bHVkZWQgYnkgZGVmYXVsdCBiZWNhdXNlCisjIE1hYyBPUyBYIGRvZXNuJ3Qgc3VwcG9ydCBVVUNQ LiAgVG8gdW5kbyB0aGlzLCB1c2UgS0ZMQUdTPS1VTk9VVUNQLgorI09LOiAyMDExLzA2LzE0IChm b3IgMTAuNC4xMSwgMTAuNS44LCAxMC42LjcpCittYWNvc3ggbWFjb3N4MTAgbWFjb3N4MTAuMy45 IG1hY29zeDEwLjQgbWFjb3N4MTAuNSBtYWNvc3gxMC42OgorCUBNQUNPU05BTUU9YC91c3IvYmlu L3N3X3ZlcnMgLXByb2R1Y3ROYW1lYDsgXAorCU1BQ09TVj1gL3Vzci9iaW4vc3dfdmVycyAtcHJv ZHVjdFZlcnNpb25gOyBcCisJZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yICQkTUFD T1NOQU1FICQkTUFDT1NWLi4uIDsgXAorCU1BQ0NQVT0kJEhPU1RUWVBFOyBcCisJaWYgdGVzdCBg dW5hbWUgLXIgfCBjdXQgLWQgLiAtZiAxYCAtZ3QgODsgXAorCXRoZW4gaWYgdGVzdCAtZiAvdXNy L2luY2x1ZGUvdXRtcHguaCA7IFwKKwl0aGVuIEhBVkVfVVRNUFg9Jy1ESEFWRVVUTVBYIC1EX1VU TVBYX0NPTVBBVCcgOyBcCisJZWxzZSBIQVZFX1VUTVBYPScnIDsgZmkgOyBmaTsgXAorCSQoTUFL RSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUz0gLURNQUNPU1gxMCAtRE1BQ09TWDEwMyAtRENLX05DVVJTRVMgLURUQ1BTT0NL RVQgLURDS0hUVFAgXAorCS1EVVNFX1NUUkVSUk9SIC1EVVNFX05BTUVTRVJfQ09NUEFUIC1ETk9D SEVDS09WRVJGTE9XIC1ERk5GTE9BVCBcCisJLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09G RlNFVF9CSVRTPTY0ICQkSEFWRV9VVE1QWCBcCisJLWZ1bnNpZ25lZC1jaGFyIC1ETk9EQ0xJTklU R1JPVVBTIFwKKwktRE5PVVVDUCAtTyAtREhFUkFMRD1cIlxcXCIgJCR7TUFDT1NOQU1FfSAkJHtN QUNPU1Z9XFxcIlwiIFwKKwktRENLQ1BVPVwiXFxcIiQke01BQ0NQVX1cXFwiXCIgXAorCSQoS0ZM QUdTKSIgIkxJQlM9IC1sbmN1cnNlcyAtbHJlc29sdiAkKExJQlMpIgorCisjIE1hYyBPUyBYIDEw LjMuOSBvciBsYXRlciB3aXRoIEtlcmJlcm9zIDUgYW5kIE9wZW5TU0wuLi4KKyMgTk9URTogQXBw bGUgaGFzIHJlbW92ZWQgYWxsIHN1cHBvcnQgZm9yIERFUyBpbiBPcGVuU1NMIGFuZCBLZXJiZXJv cworIyAgIGluIE1hYyBPUyBYIDEwLjYgYW5kIGxhdGVyLiAgVGhlIERFUyBmbGFncyBhcmUgaW5j bHVkZWQgb3IgbGVmdCBvdXQKKyMgICBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBNYWMgT1Mg WCB2ZXJzaW9uIG51bWJlci4KKyMgU2VlIG5vdGUgYWJvdXQgVVVDUCBpbiBwcmV2aW91cyB0YXJn ZXQuCisjT0s6IDIwMDkvMTEvMTYgKGZvciAxMC4zLjksIDEwLjQuMTEsIDEwLjUuOCwgMTAuNi4x KQorI09LOiAyMDExLzA2LzE0IChmb3IgMTAuNC4xMSwgMTAuNS44LCAxMC42LjcpCittYWNvc3gr a3JiNStzc2wgbWFjb3N4MTAuNStrcmI1K3NzbCBtYWNvc3gxMC42K2tyYjUrc3NsIFwKK21hY29z eCtrcmI1K29wZW5zc2wgbWFjb3N4MTAuNStrcmI1K29wZW5zc2wgbWFjb3N4MTAuNitrcmI1K29w ZW5zc2w6CisJQE1BQ09TTkFNRT1gL3Vzci9iaW4vc3dfdmVycyAtcHJvZHVjdE5hbWVgOyBcCisJ TUFDT1NWPWAvdXNyL2Jpbi9zd192ZXJzIC1wcm9kdWN0VmVyc2lvbmA7IFwKKwllY2hvIE1ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgJCRNQUNPU05BTUUgJCRNQUNPU1YuLi4gOyBcCisJTUFD Q1BVPSQkSE9TVFRZUEU7IFwKKwlpZiB0ZXN0IGB1bmFtZSAtciB8IGN1dCAtZCAuIC1mIDFgIC1n dCA4OyBcCisJdGhlbiBpZiB0ZXN0IC1mIC91c3IvaW5jbHVkZS91dG1weC5oIDsgXAorCXRoZW4g SEFWRV9VVE1QWD0nLURIQVZFVVRNUFggLURfVVRNUFhfQ09NUEFUJyA7IFwKKwllbHNlIEhBVkVf VVRNUFg9JycgOyBmaSA7IGZpOyBcCisJaWYgdGVzdCBgdW5hbWUgLXIgfCBjdXQgLWQgLiAtZiAx YCAtZXEgNzsgXAorCXRoZW4gSVNfTUFDT1NYMTAzPSctRE1BQ09TWDEwMycgOyBcCisJZWxzZSBJ U19NQUNPU1gxMDM9JycgOyBmaTsgXAorCWNhc2UgJCRNQUNPU1YgaW4gXAorCSAgMTAuWzAxMjM0 NV0uKikgSEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElCREVTJyA7OyBcCisJICAqLiopIEhBVkVfREVT PScnIDs7IFwKKwllc2FjIDsgXAorCWlmIHRlc3QgLXggL3Vzci9iaW4va3JiNS1jb25maWcgOyBc CisJdGhlbiBIQVZFX0tSQjVDT05GSUc9YC91c3IvYmluL2tyYjUtY29uZmlnIC0tbGlicyBrcmI1 IGdzc2FwaWAgOyBcCisJZWxzZSBIQVZFX0tSQjVDT05GSUc9Jy1sZ3NzYXBpX2tyYjUgLWxrcmI1 IC1sazVjcnlwdG8gXAorCS1sY29tX2VyciAtbHJlc29sdicgOyBmaTsgXAorCSQoTUFLRSkgQ0M9 JChDQykgQ0MyPSQoQ0MyKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNG TEFHUz0gLURNQUNPU1gxMCAkJElTX01BQ09TWDEwMyAtRENLX05DVVJTRVMgLURUQ1BTT0NLRVQg XAorCS1EVVNFX1NUUkVSUk9SIC1EVVNFX05BTUVTRVJfQ09NUEFUIC1ETk9DSEVDS09WRVJGTE9X IC1ERk5GTE9BVCBcCisJLURDS0hUVFAgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNF VF9CSVRTPTY0ICQkSEFWRV9VVE1QWCBcCisJLUROT0RDTElOSVRHUk9VUFMgLURDS19BVVRIRU5U SUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtRFpMSUIgXAorCS1EQ0tfRU5DUllQVElPTiAt RENLX0NBU1QgLURDS19TU0wgLURPUEVOU1NMXzA5OCAkJEhBVkVfREVTIFwKKwktRE5PVVVDUCAt REhFUkFMRD1cIlxcXCIgJCR7TUFDT1NOQU1FfSAkJHtNQUNPU1Z9XFxcIlwiIFwKKwktRENLQ1BV PVwiXFxcIiQke01BQ0NQVX1cXFwiXCIgXAorCS1mdW5zaWduZWQtY2hhciAtTyAkKEtGTEFHUyki IFwKKwkiTElCUz0gJCRIQVZFX0tSQjVDT05GSUcgLWxzc2wgLWxjcnlwdG8gLWxwYW0gLWxuY3Vy c2VzICQoTElCUykiCisKKyMgRW5kIG9mIE1hYyBPUyBYIFNlY3Rpb24KKworI0Fjb3JuIFJJU0Np WCwgYmFzZWQgb24gLi4uCisjQmVya2VsZXkgVW5peCA0LjIgb3IgNC4zIHdpdGggbG9jayBkaXJl Y3RvcnkgL3Vzci9zcG9vbC91dWNwL0xDSy9MQ0suLnR0eXh4LAorI2J1dCB3aXRob3V0IGFjdWNu dHJsIHByb2dyYW0KK3Jpc2NpeDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IFJJU0NpWCwgL3Vzci9zcG9vbC91dWNwL0xDSy4udHR5eHgKKwkkKE1BS0UpIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkJIkNGTEFHUz0gLURCU0Q0MiAtREJTRDQgLURSSVND SVggLUROT0NTRVRTIFwKKwkJLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiAtRERJ UkVOVCAtRENLX0NVUlNFUyBcCisJCS1ETUFYU1A9OTAyNCAtRE1BWFJEPTkwMjQgLURTQlNJWj05 MDUwIC1EUkJTSVo9OTA1MCBcCisJCS1EREZUVFk9XFxcIi9kZXYvc2VyaWFsXFxcIiAtRE5PQ1NF VFMgLUROT0NZUklMIFwKKwkJLUROT0FOU0kgLXcgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIiBc CisJCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgIiBcCisJCSJDQz0gL3Vzci91Y2IvY2MiIFwK KwkJIkNDMj0gL3Vzci91Y2IvY2MiCisKKyNBY29ybiBSSVNDaVgsIGFzIGFib3ZlLCBidXQgdXNp bmcgZ2NjCityaXNjaXgtZ2NjOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig UklTQ2lYLCAvdXNyL3Nwb29sL3V1Y3AvTENLLi50dHl4eAorCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCQkiQ0ZMQUdTPSAtREJTRDQyIC1EQlNENCAtRFJJU0NJ WCAtRE5PQ1NFVFMgXAorCQktRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3BcXFwiIC1ERElS RU5UIC1EQ0tfQ1VSU0VTIFwKKwkJLURNQVhTUD05MDI0IC1ETUFYUkQ9OTAyNCAtRFNCU0laPTkw NTAgLURSQlNJWj05MDUwIFwKKwkJLURERlRUWT1cXFwiL2Rldi9zZXJpYWxcXFwiIC1ETk9DU0VU UyAtRE5PQ1lSSUwgXAorCQktRE5PQU5TSSAtdyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiIFwK KwkJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAiIFwKKwkJIkNDPSBnY2MgLW1ic2QiIFwKKwkJ IkNDMj0gZ2NjIC1tYnNkIgorCisjQ29udmVyZ2VudCBDVElYIDYuNC4xCitjdGl4OgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENvbnZlcmdlbnQgQ1RJWCA2LjQuMScKKwkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFNW UjMgLURESVJFTlQgLURUQ1BTT0NLRVQgLURIREJVVUNQIC1EQ0tfQ1VSU0VTIFwKKwktRE5PTkFX UyAtRE5PTEVBUk4gLUROT0xPTkdMT05HICQoS0ZMQUdTKSAtWE8iIFwKKwkiTE5LRkxBR1M9LXMi ICJMSUJTPS1sc29ja2V0IC1sY3Vyc2VzIC1sY19zIgorCW1jcyAtZCB3ZXJtaXQKKworIyBUaGUg Zm9sbG93aW5nIG1ha2VmaWxlIGVudHJ5IHNob3VsZCB3b3JrIGZvciBhbnkgSGFycmlzIE5pZ2h0 IEhhd2sgc3lzdGVtCisjIChlaXRoZXIgODhrIG9yIDY4ayBiYXNlZCkgcnVubmluZyByZWxlYXNl IDYuMSBvciBsYXRlciBvZiB0aGUgQ1gvVVgKKyMgb3BlcmF0aW5nIHN5c3RlbS4gVGhpcyBpcyBh IFBPU0lYIGFuZCBBTlNJLUMgY29tcGxpYW50IHN5c3RlbSB3aGljaCBhbHNvCisjIHN1cHBvcnRz IEJTRCBuZXR3b3JraW5nLiAoRWFybGllciBDWC9VWCByZWxlYXNlcyB3aWxsIHByb2JhYmx5IHdv cmsgd2l0aAorIyBzeXM1cjMsIGJ1dCB0aGlzIGhhcyBub3QgYmVlbiB2ZXJpZmllZCkuCisjCitj eF91eDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEhhcnJpcyBOaWdodCBI YXdrIENYL1VYIDYuMSBvciBsYXRlcgorCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJDRkxBR1M9LURQT1NJWCAtRFRDUFNPQ0tFVCAtREhEQlVVQ1AgLURQSURf VD1waWRfdCAtRFdBSVRfVD1pbnQgXAorCS1EZF9pbm89ZF9maWxlbm8gLURVSURfVD11aWRfdCAt REdJRF9UPWdpZF90IC1ETk9MT05HTE9ORyBcCisJJChLRkxBR1MpIC1YYSAtTzMgLWciICJMTktG TEFHUz0tTzMiCisKKyNJbnRlcmdyYXBoIENsaXBwZXIsIENMSVgsIGpvYiBjb250cm9sLCBIREIg VVVDUC4KK2NsaXg6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSW50ZXJn cmFwaCBDTElYLi4uJworCSQoTUFLRSkgd2VybWl0ICJDQz1hY2MiICJDQzI9YWNjIiBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtdyAtRFNWUjMgLURDTElYIC1ERElSRU5U IC1ESERCVVVDUCAtRE5PU1lTTE9HIC1EVVNFX01FTUNQWSBcCisJLUROT0dFVFVTRVJTSEVMTCAt RE5PUkVBTFBBVEggLUROT0xFQVJOICQoS0ZMQUdTKSAtTyIgXAorCSJMTktGTEFHUz0iICJMSUJT PSAtbGJzZCIKKworI0FzIGFib3ZlICsgVENQL0lQLi4uCitjbGl4bmV0OgorCUBlY2hvICdNYWtp bmcgbmV0d29ya2VkIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmdyYXBoIENMSVguLi4nCisJ JChNQUtFKSB3ZXJtaXQgIkNDPWFjYyIgIkNDMj1hY2MiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1M9IC13IC1EU1ZSMyAtRENMSVggLURESVJFTlQgLURIREJVVUNQIC1ETk9T WVNMT0cgLURVU0VfTUVNQ1BZIFwKKwktRFRDUFNPQ0tFVCAtRE5PR0VUVVNFUlNIRUxMIC1ETk9M RUFSTiAtRE5PUkVBTFBBVEggJChLRkxBR1MpIC1PIiBcCisJIkxOS0ZMQUdTPSIgIkxJQlM9IC1s YnNkIgorCisjTWFyayBXaWxsaWFtcyBDb2hlcmVudCAyODYgb3IgMzg2IG9uIElCTSBQQyBmYW1p bHkuCisjVGhlcmUgaXMgYSA2NEsgbGltaXQgb24gcHJvZ3JhbSBzaXplLCBzbyB0aGlzIGlzIGEg Y29tbWFuZC1saW5lIG9ubHkgdmVyc2lvbi4KK2NvaGVyZW50OgorCSQoTUFLRSkgIkNGTEFHUyA9 IC1PIC1EQ09IRVJFTlQgLUROT0FOU0kgLUROT0lDUCAtRE5PU0VUS0VZIC1ETk9MRUFSTiBcCisJ LUROT0NTRVRTIC1ETk9IRUxQIC1ETk9ESUFMIC1ETk9TQ1JJUFQgLUROT0RFQlVHIC1ETk9UTE9H IC1ETk9YTUlUIFwKKwktRE5PTVNFTkQgLUROT0ZSSUxMUyAtRE5PU1lTSU9DVExIIC1EU0VMRUNU X0ggJChLRkxBR1MpIC1WU1VWQVIiIFwKKwktRE5PRkxPQVQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSB3ZXJtaXQKKworI01hcmsgV2lsbGlhbXMgQ29oZXJlbnQgMzg2IG9uIElCTSBQQyBmYW1p bHkuCisjVGhpcyB3aWxsIG1ha2UgYSAibWluaW11bSBpbnRlcmFjdGl2ZSIgdmVyc2lvbiAtIG5v IHNjcmlwdHMsCisjbm8gY2hhcmFjdGVyIHNldHMsIG5vIGhlbHAsIG5vIGRpYWwsIG5vIGRlYnVn L3RyYW5zYWN0aW9uIGxvZ2dpbmcsIG5vCisjdHJhbnNtaXQsIG1zZW5kLCBtYWlsLCB0eXBlLCBl dGMuCitjb2hlcmVudG1pOgorCSQoTUFLRSkgIkNGTEFHUyA9IC1PIC1EQ09IRVJFTlQgLUROT0FO U0kgLUROT1NFVEtFWSAtRE5PTEVBUk4gXAorCS1ETk9TSE9XIC1ETk9DU0VUUyAtRE5PSEVMUCAt RE5PRElBTCAtRE5PU0NSSVBUIC1ETk9ERUJVRyAtRE5PVExPRyBcCisJLUROT1hNSVQgLUROT01T RU5EIC1ETk9GUklMTFMgLUROT1NZU0lPQ1RMSCAtRE5PU0VSVkVSIC1ETk9VVUNQIFwKKwktRE5P U1BMIC1ETk9QVVNIIC1ETk9NRE1IVVAgLUROT0pDIC1ETk9GRFpFUk8gLUROT0VTQ1NFUSAtRE5P RkxPQVQgXAorCS1ETk9DTURMICQoS0ZMQUdTKSAtVlNVVkFSIC1EU0VMRUNUX0giIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCXdlcm1pdAorCisjTWFyayBXaWxsaWFtcyBDb2hlcmVudCAz ODYgb24gSUJNIFBDL0FUIGZhbWlseS4KK2NvaGVyZW50bWF4OgorCSQoTUFLRSkgIkNGTEFHUyA9 IC1PIC1EQ09IRVJFTlQgLUROT0FOU0kgLURTRUxFQ1RfSCAtRE5PTEVBUk4gXAorCS1ETk9GTE9B VCAtRE5PU1lTSU9DVExIICQoS0ZMQUdTKSAtVlNVVkFSIiAiTE5LRkxBR1MgPSAtTyAtcyIgXAor CUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gd2VybWl0CisKKyNNYXJrIFdpbGxpYW1zIENvaGVy ZW50IDM4NiA0LjIuICBJbmNsdWRlcyBjdXJzZXMgYnV0IG5vdCBUQ1AvSVAuCisjUmVxdWlyZXMg dXBkYXRlcyB0byB0aGUgNC4yLjEwIGNvbXBpbGVyOyB0aGUgcmVndWxhciBjb21waWxlciBmYWls cyB0bworI3RvIGhhbmRsZSAiY29tcGxleCBleHByZXNzaW9ucyIuICBOT0ZMT0FUIGlzIHNvIGl0 IGNhbiB3b3JrIG9uIG9sZCBQQ3MKKyN3aXRob3V0IGZsb2F0aW5nLXBvaW50IGhhcmR3YXJlLgor Y29oZXJlbnQ0MjoKKwkkKE1BS0UpICJDRkxBR1MgPSAtVDUwMDAwMCAtRE5PRkxPQVQgLURDT0hF UkVOVCAtRE5PQU5TSSAtRFNFTEVDVCBcCisJLUROT1NZU0xPRyAtRERJUkVOVCAtRENLX0NVUlNF UyAtRENLX05FV1RFUk0gLURDS19XUkVGUkVTSCAtVlNVVkFSIFwKKwktRERDTEdFVENXRCAtRE5P U1lTSU9DVExIIC1ETk9JTklUR1JPVVBTIC1ETk9TWU1MSU5LIC1EU0VMRUNUX0ggXAorCS1ERENM R0VUQ1dEIC1PICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1PIC1zIiBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiTElCUyAgPSAtbHNvY2tldCAtbGN1cnNlcyIgd2VybWl0CisKKyNE RUMgVWx0cml4IDIueAorIyBBZGQgLU8sIC1ERFlOQU1JQywgLXMsIGV0YywgaWYgdGhleSB3b3Jr LgordWx0cml4Mng6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbHRyaXgg Mi54IC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJIkNG TEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1ERFUyIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1Mp IgorCitkdTI6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQtJChA KX0gdWx0cml4MngKKworI0RFQyBVbHRyaXggMy4wIGFuZCAzLjEKK3VsdHJpeDMwOgorCUBlY2hv IE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVWx0cml4IDMuMC4uLgorCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0IC1EVENQU09D S0VUIC1ERElSRU5UIC1EU0lHX1YgLUROT0dFVFVTRVJTSEVMTCBcCisJLURVTFRSSVgzIC1EQ0tf Q1VSU0VTICQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworZHUzOgor CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IHVsdHJpeDMw CisKK3VsdHJpeDN4OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgS1RBUkdFVD0kJHtLVEFSR0VU LSQoQCl9IHVsdHJpeDMwCisKKyNERUMgVWx0cml4IDQuMCBvciA0LjEgb24gREVDc3RhdGlvbiwg VkFYc3RhdGlvbiwgVkFYLCBldGMuCit1bHRyaXg0MDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFVsdHJpeCA0LjAgb3IgNC4xLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VULSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLURTSUdf ViAtRERVNCAtRE5PR0VUVVNFUlNIRUxMIFwKKwkkKEtGTEFHUykgLU9saW1pdCAxNDUwIiAiTE5L RkxBR1MgPSAtcyIKKworI0RFQyBVbHRyaXggNC4yLTQuNSBvbiBERUNzdGF0aW9uLCBERUNzeXN0 ZW0sIFZBWHN0YXRpb24sIFZBWCwgZXRjLgorI0xpa2UgdWx0cml4NDAsIGV4Y2VwdCBub3cgQyBj b21waWxlciBzdXBwb3J0cyAtTzIgb3B0aW1pemF0aW9uLgordWx0cml4NDI6CisJQGVjaG8gTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbHRyaXggNC4yIG9yIGxhdGVyLi4uCisJJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURU Q1BTT0NLRVQgLURTSUdfViAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSBcCisJLU8yIC1PbGlt aXQgMTc1MCIgIkxOS0ZMQUdTID0gLXMiCisKK2R1NDI6CisJJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0cml4NDIKKworI0RFQyBVbHRyaXggNC4yLTQu NSBvbiBERUNzdGF0aW9uLCBERUNzeXN0ZW0sIFZBWHN0YXRpb24sIFZBWCwgZXRjLgorI0xpa2Ug ZHU0MiwgYnV0IHdpdGggY3Vyc2VzIHN1cHBvcnQgYWRkZWQgYW5kIGEgY291cGxlIGZlYXR1cmVz LgordWx0cml4NDJjOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVWx0cml4 IDQuMiBvciBsYXRlci4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEAp fSBcCisJIkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1EU0lHX1YgLUROT0dFVFVTRVJTSEVM TCBcCisJLURDS19DVVJTRVMgLUROT0lLU0QgJChLRkxBR1MpLUc2IC1PMiAtT2xpbWl0IDMwMDAg IiBcCisJIkxOS0ZMQUdTID0gLXMiICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAiCisKK3VsdHJp eDQzOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBcCisJIktG TEFHUz0tRFVMVFJJWDQzICQoS0ZMQUdTKSIgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IHVsdHJp eDQyYworCit1bHRyaXg0M25vdGNwOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykg Q0MyPSQoQ0MyKSBcCisJIktGTEFHUz0tRFVMVFJJWDQzIC1ETk9ORVQgJChLRkxBR1MpIiBcCisJ S1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IHVsdHJpeDQyYworCisjIE5PVEU6IG5lZWQgLUROT0RF QlVHIG9uIE1JUFMgdG8gYXZvaWQgcmVsb2NhdGlvbiBlcnJvcnMgYXQgbGluayB0aW1lLgorIyBB Y3R1YWxseSBub3cgKDguMCkgdGhhdCB3ZSBoYXZlIGRpc2NvdmVyZWQgdGhlIC1HIG9wdGlvbiBt YXliZSBkZWJ1Z2dpbmcKKyMgY2FuIGJlIHB1dCBiYWNrLgordWx0cml4NDQ6CisJJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIFwKKwkiS0ZMQUdTPS1EVUxUUklYNDQg LUc3IC1ETk9ERUJVRyAtRE5FVFBUWSAtRE5PX0RFVlRUWSAkKEtGTEFHUykiIFwKKwlLVEFSR0VU PSQke0tUQVJHRVQtJChAKX0gdWx0cml4NDJjCisKK3VsdHJpeDQ1OgorCSQoTUFLRSkgIk1BS0U9 JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBcCisJIktGTEFHUz0tRFVMVFJJWDQ1ICQoS0ZM QUdTKS1ETkVUUFRZIC1ETk9fREVWVFRZICQoS0ZMQUdTKSIgXAorCUtUQVJHRVQ9JCR7S1RBUkdF VC0kKEApfSB1bHRyaXg0MmMKKworZHU0MmM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0k KENDKSBDQzI9JChDQzIpIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0cml4NDJjCisK KyNERUMgVWx0cml4IDQuM0Egb3IgbGF0ZXIgb24gREVDc3lzdGVtIGFuZCBERUNzdGF0aW9uIDUw MDAvNTAsIC8xNTAgb3IgLzI2MAorI3dpdGggTUlQUyBSNHgwMCBwcm9jZXNzb3IuICBUaGUgIi1t aXBzMyIgc3dpdGNoIGdlbmVyYXRlcyBSNDAwMC1zcGVjaWZpYworI2NvZGUsIHdoaWNoIGlzIGZh c3RlciBhbmQgbW9yZSBjb21wYWN0LCBidXQgKndvbid0KiBydW4gb24gZWFybGllcgorI0RFQ3N5 c3RlbXMgYW5kIERFQ3N0YXRpb25zLgordWx0cml4NDMtbWlwczM6CisJQGVjaG8gTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBVbHRyaXggNC4zQSBvciBsYXRlciwgUjQwMDAgY3B1Li4uCisJ JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJT RDQgLURUQ1BTT0NLRVQgLURTSUdfViAtRE5PR0VUVVNFUlNIRUxMIFwKKwkkKEtGTEFHUykgLU8y IC1PbGltaXQgMTc1MCAtbWlwczMiICJMTktGTEFHUyA9IC1zIC1taXBzMyIKKworZHU0My1taXBz MzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgdWx0cml4NDMt bWlwczMKKworI0RFQyBVbHRyaXggNC4zQSBvciBsYXRlciBvbiBNSVBTIFI0eDAwMCBiYXNlZCBz eXN0ZW1zLgorI0xpa2UgdWx0cml4NDMtbWlwczMgYnV0IHdpdGggY3Vyc2VzIHN1cHBvcnQgYWRk ZWQKK3VsdHJpeDQzYy1taXBzMzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IFVsdHJpeCA0LjNBIG9yIGxhdGVyLCBSNDAwMCBjcHUuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQtJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENCAtRFRDUFNPQ0tFVCAtRFNJ R19WIC1ETk9HRVRVU0VSU0hFTEwgLURDS19DVVJTRVMgXAorCSQoS0ZMQUdTKSAtTzIgLU9saW1p dCAzMDAwIC1taXBzMyIgIkxOS0ZMQUdTID0gLXMgLW1pcHMzIiBcCisJIkxJQlM9IC1sY3Vyc2Vz IC1sdGVybWNhcCIKKworZHU0M2MtbWlwczM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0k KENDKSBDQzI9JChDQzIpIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQtJChAKX0gdWx0cml4NDNjLW1p cHMzCisKKyNERUMgVWx0cml4IDQuNCBvbiBERUNzdGF0aW9uIDUwMDAvNTAgb3IgLzE1MCB3aXRo IFI0MDAwIE1JUFMgcHJvY2Vzc29yLAorI29yIDUwMDAvMjYwIHdpdGggUjQ0MDAuICBUaGUgIi1t aXBzMyIgc3dpdGNoIGdlbmVyYXRlcyBSNDAwMC1zcGVjaWZpYyBjb2RlLAorI3doaWNoIGlzIGZh c3RlciBhbmQgbW9yZSBjb21wYWN0IGJ1dCAqd29uJ3QqIHJ1biBvbiBlYXJsaWVyIERFQ3N0YXRp b25zLgordWx0cml4NDQtbWlwczM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBVbHRyaXggNC40LCBSNDAwMCBjcHUgLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VULSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BTT0NLRVQgLURTSUdfViAtRE5P R0VUVVNFUlNIRUxMIFwKKwkkKEtGTEFHUykgLU8yIC1PbGltaXQgMTQ1MCAtbWlwczMiICJMTktG TEFHUyA9IC1zIC1taXBzMyIKKworZHU0NC1taXBzMzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSki IENDPSQoQ0MpIENDMj0kKENDMikgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSB1bHRyaXg0 NGMtbWlwczMKKworI0RFQyBVbHRyaXggNC4yIG9uIERFQ3N0YXRpb24sIFZBWHN0YXRpb24sIFZB WCwgZXRjLCBTeXN0ZW0gViBSNCBlbnZpcm9ubWVudAordWx0cml4NDJzNXI0OgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBSNCBvbiBVbHRy aXguLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VULSQoQCl9IFwKKwkiQ0ZM QUdTID0gLU8yIC1PbGltaXQgMTUwMCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9HRVRV U0VSU0hFTEwgXAorCS1EVENQU09DS0VUICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCisKKyNP U0YvMQorb3NmIG9zZjE6CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURCU0Q0IC1ET1NGIC1EX0JTRCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lD IC1EU0lHX1YgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUlRTQ1RTIC1ERk5GTE9BVCAkKEtGTEFHUyki IFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAkKExJQlMpIC1sYnNkIC1sY3Vyc2VzIC1sdGVy bWNhcCAtbG0iCisKKyNERUMgT1NGLzEgVjEuMC0xLjMgb24gREVDc3RhdGlvbiwgVkFYLCBBbHBo YSwgb3IgUEMuCitkZWMtb3NmIGRlYy1vc2YxOgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENCAtRE9TRiAtRE9TRjEzIC1EX0JTRCAt RFRDUFNPQ0tFVCAtRENLX0FOU0lDIC1EU0lHX1YgXAorCS1ETk9SRUFMUEFUSCAtRE5PSUtTRCAt RENLX0NVUlNFUyAtRENLX1JUU0NUUyAtREZORkxPQVQgLUROT0RFQlVHIFwKKwktRE5PVU5JQ09E RSAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtbm9uX3NoYXJlZCIgIkxJQlMgPSAtbGJzZCAt bGN1cnNlcyAtbHRlcm1jYXAgLWxtIgorCisjIFRoaXMgb25lIGNhdXNlcyAicmVsb2NhdGlvbiBv dXQtb2YtcmFuZ2UiIGVycm9ycyBpbiB0aGUgbGlua2VyLgorb2xkLWRlYy1vc2Y6CisJQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERUMgT1NGLzEgVjEueC4uLgorCUBlY2hvIElm IHlvdSBhcmUgYnVpbGRpbmcgZm9yIERFQyBPU0YvMSAyLjAsIHBsZWFzZSB1c2UgZGVjLW9zZjIw LgorCUBlY2hvIFJlbW92ZSBvciBhZGp1c3QgLU8yIGFuZC9vciAtT2xpbWl0IGlmIHRoZXkgY2F1 c2UgdHJvdWJsZS4KKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9IC1PMiAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIgor CisjREVDIE9TRi8xIDIuMCBvbiBBbHBoYSBhbmQgcHJvYmFibHkgbm93aGVyZSBlbHNlLgorI1Ro ZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSBPU0YvMSBpcyB0aGF0IG9wdGltaXphdGlvbiBpcyBvbWl0 dGVkLgorI1RoZSBvcHRpbWl6ZWQgdmVyc2lvbiBnZXRzIHN0cmFuZ2UgcnVudGltZSBlcnJvcnMs IGxpa2UgdGhlIFBBVVNFIGNvbW1hbmQKKyNub3Qgd29ya2luZy4gIEFkZCAiLXVuc2lnbmVkIiB0 byBtYWtlIGFsbCBjaGFycyB1bnNpZ25lZC4KK2RlYy1vc2YyMDoKKwlAZWNobyBNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIERFQyBPU0YvMSBWMi4wLi4uCisJQGVjaG8gT3B0aW1pemF0aW9u IG9taXR0ZWQgYmVjYXVzZSBpdCBjYXVzZXMgcnVudGltZSBlcnJvcnMuCisJQGVjaG8gU2VlIGNv bW1lbnRzIGluIG1ha2VmaWxlLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0gLURPU0YyMCAkKEtGTEFHUykiCisK K2RlYy1vc2YzMDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERFQyBPU0Yv MSBWMy4wLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPSAtRE9TRjMwIC1PMiAtT2xpbWl0IDI0MDAgJChLRkxB R1MpIgorCisjRGlnaXRhbCBVTklYIDMuMgorIyBNdXN0IGNvbXBpbGUgY2t1dXNbNnhdLmMgc2Vw YXJhdGVseSB3aXRob3V0IG9wdGltaXphdGlvbiBvdGhlcndpc2UKKyMgdGhlIG9wdGltaXplciBk dW1wcyBjb3JlIC0ga2VlcCBDRkxBR1MgaGVyZSBpbiBzeW5jIHdpdGggdGhvc2UgZnJvbSBvc2Yu CitkdTMyOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRGlnaXRhbCBVTklY IDMuMi4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBja3V1czYuJChFWFQpIFwKKwki Q0ZMQUdTPSAtREJTRDQgLURPU0YgLURfQlNEIC1EVENQU09DS0VUIC1EQ0tfQU5TSUMgLURTSUdf ViBcCisJLURDS19DVVJTRVMgLURDS19SVFNDVFMgLURGTkZMT0FUIC1ET1NGMzIgLURIREJVVUNQ ICQoS0ZMQUdTKSIKKwkkKE1BS0UpIENDPSQoQ0MpIENDMj0kKENDMikgY2t1dXN4LiQoRVhUKSBc CisJIkNGTEFHUz0gLURCU0Q0IC1ET1NGIC1EX0JTRCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lDIC1E U0lHX1YgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUlRTQ1RTIC1ERk5GTE9BVCAtRE9TRjMyIC1ESERC VVVDUCAkKEtGTEFHUykiCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBcCisJIktG TEFHUz0gLURPU0YzMiAtREhEQlVVQ1AgLU8yIC1PbGltaXQgMzIwMCAkKEtGTEFHUykiCisKK2Rl Yy1vc2YzMjoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0kKENDMikgZHUz MiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjRGlnaXRhbCBVTklYIDQuMCB0aHJv dWdoIDQuMEQgKHVzZSB0cnU2NCB0YXJnZXRzIGZvciA0LjBFIGFuZCBhYm92ZSkuLi4KK2R1NDA6 CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBEaWdpdGFsIFVOSVggNC4wLi4u CisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiS0ZMQUdTPSAtRE9TRjQwIC1ESERCVVVDUCAtREZORkxPQVQgXAorCS11bnNpZ25l ZCAtc3RkMSAtTzMgLU9saW1pdCAyNDAwICQoS0ZMQUdTKSIgIkxJQlM9LWxtIgorCitkdTQwZ2Nj OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRGlnaXRhbCBVTklYIDQuMCB3 aXRoIGdjYyAuLi4KKwkkKE1BS0UpIG9zZiBDQz1nY2MgQ0MyPWdjYyBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPSAtRE9TRjQwIC1ESERCVVVDUCAkKEtGTEFHUykiCisKKyNU cnU2NCBVbml4IDQuMEUKK3RydTY0LTQwZToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFRydTY0IFVOSVggNC4wRS4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBv c2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0gLURPU0Y0MCAtRE9TRjQw RSAtRFRSVTY0IC1ESERCVVVDUCAtREZORkxPQVQgLUROT0NPVEZNQyBcCisJLXVuc2lnbmVkIC1z dGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIiAiTElCUz0tbG0iCisKK3RydTY0LTQwZjoK KwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFRydTY0IFVOSVggNC4wRi4uLgor CSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIktGTEFHUz0gLURPU0Y0MCAtRE9TRjQwRiAtRFRSVTY0IC1ESERCVVVDUCAtREZORkxP QVQgLUROT0NPVEZNQyBcCisJLXVuc2lnbmVkIC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxB R1MpIiAiTElCUz0tbG0iCisKK3RydTY0LTQwZzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFRydTY0IFVOSVggNC4wRy4uLgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0My KSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0gLURPU0Y0MCAtRE9T RjQwRyAtRFRSVTY0IC1ESERCVVVDUCAtREZORkxPQVQgLUROT0NPVEZNQyBcCisJLXVuc2lnbmVk IC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIiAiTElCUz0tbG0iCisKK3RydTY0LTUw YToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFRydTY0IFVOSVggNS4wQS4u LgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSBvc2YgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIktGTEFHUz0gLURUUlU2NCAtRE9TRjUwIC1ESERCVVVDUCBcCisJLXVuc2lnbmVk IC1zdGQxIC1PMyAtT2xpbWl0IDI0MDAgJChLRkxBR1MpIgorCit0cnU2NC01MWE6CisJQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBUcnU2NCBVTklYIDUuMUEuLi4KKwkkKE1BS0Up IENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJL RkxBR1M9IC1EVFJVNjQgLURPU0Y1MCAtRE9TRjUxQSAtREhEQlVVQ1AgXAorCS11bnNpZ25lZCAt c3RkMSAtTzMgLU9saW1pdCAyNDAwICQoS0ZMQUdTKSIKKwordHJ1NjQtNTFiOgorCUBlY2hvIE1h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5JWCA1LjFCLi4uCisJJChNQUtFKSBD Qz0kKENDKSBDQzI9JChDQzIpIG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZM QUdTPSAtRFRSVTY0IC1ET1NGNTAgLURPU0Y1MUEgLURPU0Y1MUIgLURIREJVVUNQIFwKKwktdW5z aWduZWQgLXN0ZDEgLU8zIC1PbGltaXQgMjQwMCAkKEtGTEFHUykiCisKKyMgQWRkZWQgNS4xYiB2 ZXJzaW9uIHdpdGggT3BlblNTTCAtIENEVyA2LTEzLTIwMDUuLi4KK3RydTY0LTUxYitvcGVuc3Ns OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVHJ1NjQgVU5JWCA1LjFiCisJ QGVjaG8gIGluY2x1ZGluZyBPcGVuU1NMLi4uCisJJChNQUtFKSBDQz0kKENDKSBDQzI9JChDQzIp IG9zZiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPSAtRFRSVTY0IC1ET1NG NTAgLURPU0Y1MUEgLURPU0Y1MUIgLURIREJVVUNQIFwKKwktdW5zaWduZWQgLXN0ZDEgLU8zIC1P bGltaXQgMjQwMCBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAkKFNTTElOQykgJChL RkxBR1MpIiBcCisJIkxJQlM9ICQoU1NMTElCKSAtcnBhdGggJChzc2xyb290KS9zc2wvbGliIC1s c3NsIC1sY3J5cHRvIgorCitkdTUwOgorCSQoTUFLRSkgQ0M9JChDQykgQ0MyPSQoQ0MyKSB0cnU2 NC01MGEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCitkdTQwLXJpZGljdWxvdXMtY2hlY2tp bmc6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBEaWdpdGFsIFVOSVggNC4w LgorCUBlY2hvIENoZWNraW5nIGV2ZXJ5dGhpbmcgLSBhc3N1bWVzIERFQ0MuLi4KKwkkKE1BS0Up IENDPSQoQ0MpIENDMj0kKENDMikgb3NmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJL RkxBR1M9IC1ET1NGNDAgLURIREJVVUNQIC13MCAtd2FybnByb3RvcyAtY2hlY2sgLXBvcnRhYmxl IFwKKwktdW5zaWduZWQgLXN0ZDEgLU8zIC1PbGltaXQgMTc2MCAkKEtGTEFHUykiCisKKyNTZXF1 ZW50IERZTklYL3B0eCAxLjIuMQorZHluaXhwdHgxMjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFNlcXVlbnQgRFlOSVgvcHR4IDEuMi4xLi4uCisJJChNQUtFKSB3ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1E SERCVVVDUCAtRFBUWCAtRE5PR0VUVVNFUlNIRUxMIC1ETk9MRUFSTiBcCisJLURQSURfVD1waWRf dCAtRFVJRF9UPXVpZF90IC1ER0lEX1Q9Z2lkX3QgJChLRkxBR1MpIC1pIC1PIiBcCisJIkxOS0ZM QUdTID0gLWkiCisKKyNTZXF1ZW50IERZTklYL3B0eCAxLjMgb3IgMS40CitkeW5peHB0eDEzOgor CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2VxdWVudCBEWU5JWC9wdHggMS4z IFRDUC9JUC4uLgorCSQoTUFLRSkgeGVybWl0ICJDRkxBR1M9IC1PIEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCS1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURQVFggLURDS19QT0xMIC1E Tk9HRVRVU0VSU0hFTEwgXAorCS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAtREdJRF9UPWdp ZF90IC1EVENQU09DS0VUICQoS0ZMQUdTKSAtaSIgXAorCSJMTktGTEFHUyA9IC1pIiAiTElCUyA9 IC1sc29ja2V0IC1saW5ldCAtbG5zbCIKKworI1NlcXVlbnQgRFlOSVgvcHR4IDIuMCwgQU5TSSBD IGNvbXBpbGF0aW9uCisjU2hvdWxkIHdvcmsgb24gYW55IGhhcmR3YXJlIHBsYXRmb3JtIHdoZW4g RFlOSVgvcHR4IHJ1bnMsIGluY2x1ZGluZworIzM4NiwgNDg2LCBQZW50aXVtLgorZHluaXhwdHgy MDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBE WU5JWC9wdHggMi4wLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1M9IC1EUE9TSVggLURIREJVVUNQIC1EVENQU09DS0VUIFwKKwktRFdBSVRf VD1pbnQgLURQVFggLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykgLU8iIFwKKwkiTElCUyA9IC1s c29ja2V0IC1saW5ldCAtbG5zbCIKKworI1NlcXVlbnQgRFlOSVgvcHR4IDIuMCwgQU5TSSBDIGNv bXBpbGF0aW9uLCB3aXRoIGN1cnNlcworZHluaXhwdHgyMGM6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgUE9TSVgsIFNlcXVlbnQgRFlOSVgvcHR4IDIuMC4uLicKKwkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFBPU0lY IC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAtRFdBSVRfVD1pbnQgLURQVFggLURDS19DVVJTRVMgXAor CS1EQ0tfTkVXVEVSTSAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSAtTyIgXAorCSJMSUJTID0g LWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI1NlcXVlbnQgRFlO SVgvcHR4IDIuMS42LCA4MDQ4NiwgQU5TSSBDIGNvbXBpbGF0aW9uLCB3aXRoIGN1cnNlczoKKyMg LVhhIC0tIHVzZSBBTlNJIGNvbXBpbGVyLgorIyAtV2MsLXB3IC0tIHN1cHByZXNzIHBvcnRhYmls aXR5IHdhcm5pbmdzLgorIyAtV2MsLWkzODYgLS0gODAzODYgY3B1LgorIyAtV2MsLWk0ODYgLS0g ODA0ODYgY3B1LgorIyAtV2MsLVA1IC0tIFBlbnRpdW0gKGRlZmF1bHQpLgorIyAtV2MsLU8zIC0t IGhpZ2hlc3Qgb3B0aW1pemF0aW9uLgorIyAtV2EsLU4xNzA2MSAtLSBpbmNyZWFzZSBzeW1ib2wg dGFibGUgZnJvbSBkZWZhdWx0IG9mIDE1MDEzIGZvciBja2N1bmkuYy4KKyMgRWFybHkgdmVyc2lv bnMgb2YgRFlOSVgvcHR4IDIuMS54IG1heSBuZWVkIC1EQ0tfUE9MTCBpbnN0ZWFkIG9mIC1EU0VM RUNULgorIyBBZGQgIiQmIiBhZnRlciB0aGUgY29sb24gaW4gdGhlICJ4ZXJtaXQiIHRhcmdldCBm b3IgcGFyYWxsZWwgbWFrZXMuCitkeW5peHB0eDIxNmM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgUE9TSVgsIFNlcXVlbnQgRFlOSVgvcHR4IDIuMS42JworCSQoTUFLRSkg eGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EUE9TSVggLURI REJVVUNQIC1ERFlOQU1JQyAtRFRDUFNPQ0tFVCBcCisJLURTRUxFQ1QgLURDS19SRURJUiAtRENL X05BV1MgLURDS19XUkVGUkVTSCAtRFNXX0FDQ19JRCBcCisJLURUQ1BfTk9ERUxBWT0xIC1EVFJN QlVGTD0yMDQ4IC1EQklHQlVGT0sgLURIQUREUkxJU1QgXAorCS1EUFRYICAtRENLX0NVUlNFUyAt RENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVMTCAtRE5PUkVBTFBBVEggXAorCSQoS0ZMQUdTKSAt WGEgLVdjLC1wdyAtV2MsLWk0ODYgLVdjLC1PMyAtV2EsLU4xNzA2MSIgXAorCSJMSUJTID0gLWxY YnNkIC1sc2VxIC1sc29ja2V0IC1saW5ldCAtbG5zbCAtbG1hbGxvYyAtbG0gLWxjdXJzZXMiIFwK KwkiTE5LRkxBR1MgPSAtcyIKKworI1NlcXVlbnQgRFlOSVgvcHR4IDIuMS42LCBnY2MgMi43LjIu Miwgd2l0aCBjdXJzZXM6CitkeW5peHB0eDIxNmNnY2M6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgUE9TSVgsIFNlcXVlbnQgRFlOSVgvcHR4IDIuMS42IGdjYycKKwkkKE1B S0UpIHhlcm1pdCAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1M9IC1EUE9TSVggLURIREJVVUNQIC1ERFlOQU1JQyAtRFRDUFNPQ0tFVCBc CisJLURTRUxFQ1QgLURDS19SRURJUiAtRENLX05BV1MgLURDS19XUkVGUkVTSCAtRFNXX0FDQ19J RCBcCisJLURUQ1BfTk9ERUxBWT0xIC1EVFJNQlVGTD0yMDQ4IC1EQklHQlVGT0sgLURIQUREUkxJ U1QgXAorCS1EUFRYICAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT0dFVFVTRVJTSEVMTCAt RE5PUkVBTFBBVEggXAorCSQoS0ZMQUdTKSAtTzMgLXBpcGUgLWZ1bnNpZ25lZC1jaGFyIiBcCisJ IkxJQlMgPSAtbFhic2QgLWxzZXEgLWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sbWFsbG9jIC1sbSAt bGN1cnNlcyIgXAorCSJMTktGTEFHUyA9IC1zIgorCisjU2VxdWVudCBEWU5JWC9wdHggNC4wLCBB TlNJIEMgY29tcGlsYXRpb24sIHdpdGggY3Vyc2VzCitkeW5peHB0eDQxYzoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwgU2VxdWVudCBEWU5JWC9wdHggNC4wLi4u JworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9 IC1EUE9TSVggLURIREJVVUNQIC1EVENQU09DS0VUIFwKKwktRFdBSVRfVD1pbnQgLURQVFggLURQ VFg0IC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSBcCisJLUROT0dFVFVTRVJTSEVMTCAkKEtGTEFH UykgLU8iIFwKKwkiTElCUyA9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIKKwor I1NlcXVlbnQgRFlOSVgvcHR4IDQuNCwgQU5TSSBDIGNvbXBpbGF0aW9uLCB3aXRoIGN1cnNlcwor ZHluaXhwdHg0NDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBQT1NJWCwg U2VxdWVudCBEWU5JWC9wdHggNC40Li4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EUFRYIC1EUFRYNCAtRFBPU0lYIC1ESERCVVVDUCAt RFRDUFNPQ0tFVCAtRFdBSVRfVD1pbnQgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtREJJ R0JVRk9LIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAorCSQoS0ZMQUdTKSAtTyIgIkxJQlMg PSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNTZXF1ZW50IERZTklYIDMu MC54CitkeW5peDM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTZXF1ZW50 IERZTklYIDMuMC54Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURCU0Q0MyAtREFDVUNOVFJMIC1EVENQU09DS0VUIC1PIFwKKwktRFBX VUlEX1Q9aW50IC1ER0lEX1Q9aW50ICQoS0ZMQUdTKSIKKworI1NlcXVlbnQgRFlOSVggMy4wLngs IG5vIEFDVUNOVFJMCitkeW5peDNub2FjdToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFNlcXVlbnQgRFlOSVggMy4wLnguLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQzIC1ETENLRElSIC1EVENQU09DS0VU IC1PIFwKKwktRFVJRF9UPWludCAtREdJRF9UPWludCAkKEtGTEFHUykiCisKKyNTZXF1ZW50IERZ TklYIDMuMS54CitkeW5peDMxOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig U2VxdWVudCBEWU5JWCAzLjEueC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJDRkxBR1M9IC1PIC1ERENMUE9QRU4gLURMQ0tESVIgLURCU0Q0IC1EVENQ U09DS0VUICQoS0ZMQUdTKSIKKworI1NlcXVlbnQgRFlOSVggMy4xLjIsIGFzIGFib3ZlIGJ1dCB3 aXRoIGN1cnNlcywgdG8gYmUgY29tcGlsZWQgYnkgZ2NjIDIuMy4zLgorZHluaXgzMWM6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2VxdWVudCBEWU5JWCAzLjEuMiwgY3Vy c2VzLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJD RkxBR1M9IC1PMiAtRERDTFBPUEVOIC1EQUNVQ05UUkwgXAorCS1EQlNENDMgLURUQ1BTT0NLRVQg LURDS19DVVJTRVMgLURVSURfVD1pbnQgXAorCSQoS0ZMQUdTKSIgIkxJQlM9IC1sY3Vyc2VzIC1s dGVybWNhcCIKKworI0NvbnZleCBDMSB3aXRoIEJlcmtlbGV5IFVuaXgKK2NvbnZleDoKKwlAZWNo byBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENvbnZleCBDMSAvIEJTRC4uLgorCSQoTUFL RSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQlNENCAt RE5PTEVBUk4gJChLRkxBR1MpIC1EbXNsZWVwPW1uYXAiCisKKyNDb252ZXggQzIxMCB3aXRoIENv bnZleC9PUyA4Citjb252ZXg4OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig Q29udmV4IEMyMTAgd2l0aCBPUyA4CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VUIC1ETk9ERUJVRyAtRERJUkVO VCAtRE5PRklMRUggXAorCSQoS0ZMQUdTKSAtRFNJR19WIC1EbXNsZWVwPW1uYXAiCisKKyNDb252 ZXggQzIgd2l0aCBDb252ZXggT1MgOS4xIChzaG91bGQgYWxzbyB3b3JrIHdpdGggOC4xIG9yIGxh dGVyKQorI3dpdGggQU5TSSBDIGNvbXBpbGVyLCB1c2VzIEJTRCA0LjMgdXVjcCBsb2NrZmlsZSBj b252ZW50aW9uLgorY29udmV4OToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IENvbnZleCBDMjEwIHdpdGggT1MgOS4xCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURQT1NJWCAtRENPTlZFWDkgLUROT0lFWFRFTiAtRERJ UkVOVCAtRE5PRklMRUggLURUQ1BTT0NLRVQgXAorCS1EX19TVERDX18gLURMQ0tESVIgLURtc2xl ZXA9bW5hcCAtTyAtZXh0IC10bSBjMSAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtZXh0Igor CisjQ29udmV4IEMyIHdpdGggQ29udmV4IE9TIDEwLjEgb3IgbGF0ZXIKKyN3aXRoIGdjYyAyLngg QyBjb21waWxlcgorY29udmV4MTBnY2M6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBDb252ZXggQzIgd2l0aCBPUyAxMC4xIHVzaW5nIGdjYworCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EUE9TSVggLURDT05WRVg5IC1E Tk9JRVhURU4gLURESVJFTlQgLUROT0ZJTEVIIC1EVENQU09DS0VUIFwKKwktRF9fU1REQ19fICAt RG1zbGVlcD1tbmFwIC1PMiAkKEtGTEFHUykiIENDPWdjYyBDQzI9Z2NjCisKKyNDcmF5IFgtTVAg b3IgWS1NUCBVTklDT1MgNi54IG9yIDcueC4KKyNOT1RFOiBOUFJPQyB0ZWxscyBob3cgbWFueSBw YXJhbGxlbCBtYWtlcyB0byBydW4uICBJZiB5b3VyIENyYXkgaGFzIG11bHRpcGxlCisjcHJvY2Vz c29ycywgeW91IGNhbiBzZXQgTlBST0MgdXAgdG8gdGhlIG51bWJlciBvZiBDUFVzLCBlLmcuIE5Q Uk9DPTE2LgorY3JheToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBDcmF5 IFgvWS1NUCBVTklDT1MgNi54IG9yIDcuMC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gTlBST0M9MSBcCisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERC VVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8xIgorCisjQ3JheSBYLU1QIG9yIFktTVAgVU5J Q09TIDguMCBBbHBoYS4KK2NyYXk4OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIENyYXkgWC9ZLU1QIFVOSUNPUyA4LjAgQWxwaGEuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IE5QUk9DPTEgXAorCSJDRkxBR1M9IC1EU1ZSNCAtRERJUkVO VCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1PMSIKKworI0NyYXkgWC1NUCBvciBZ LU1QIFVOSUNPUyA5LjAuCisjVGhpcyBvbmUgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSBmb3Ig Qy1LZXJtaXQgOC4wLjIwOS4KKyNFYXJsaWVyIHZlcnNpb25zIG9mIFVuaWNvcyB3aWxsIHByb2Jh Ymx5IG5lZWQgdGhlIHNhbWUgZmxhZ3MuCitjcmF5OToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBDcmF5IFgvWS1NUCBVTklDT1MgOS4wLi4uCisJJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBOUFJPQz0xIFwKKwkiQ0ZMQUdTPSAtRFNWUjQgLURE SVJFTlQgLURIREJVVUNQIC1ETk9MRkRFVk5PIFwKKwktRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8x IgorCisjQ3JheS0yIG9yIENyYXkgMy1DU09TCisjTk9URTogTlBST0MgdGVsbHMgaG93IG1hbnkg cGFyYWxsZWwgbWFrZXMgdG8gcnVuLiAgSWYgeW91ciBDcmF5IGhhcyBtdWx0aXBsZQorI3Byb2Nl c3NvcnMsIHlvdSBjYW4gc2V0IE5QUk9DIHVwIHRvIHRoZSBudW1iZXIgb2YgQ1BVcywgZS5nLiBO UFJPQz0xNi4KK2NyYXljc29zOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IENyYXktMi8zIENTT1MKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IE5QUk9DPTEgXAorCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NL RVQgXAorCSQoS0ZMQUdTKSAtRENLX0FOU0lDIC1EQ0tfQ1VSU0VTIiAiTElCUz0tbG5ldCIKKwor I05lWFRTVEVQIDEuMCB0aHJvdWdoIDMuMi4KKyNJbmNsdWRlcyBmdWxsc2NyZWVuIGZpbGUgdHJh bnNmZXIgZGlzcGxheSAoY3Vyc2VzKSBhbmQgVENQL0lQIHN1cHBvcnQuCisjVXNlcyBzaGFyZWQg bGlicmFyeSB0byBtYWtlIGV4ZWN1dGFibGUgcHJvZ3JhbSBhYm91dCA4MEsgc21hbGxlci4KKyNS ZW1vdmUgIkxJQlMgPSAtbHN5c19zIiBpZiB0aGlzIGNhdXNlcyB0cm91YmxlLgorbmV4dDoKKwlA ZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE5lWFRTVEVQLi4uCisJQGVjaG8gJ0lm IHlvdSBnZXQgZXJyb3JzIGluIGNrdXRpby5jIGFib3V0IHdfUywgd19ULCBldGMsJworCUBlY2hv ICdhZGQgS0ZHTEFHUz0tRE5PUkVESVJFQ1QgdG8geW91ciBtYWtlIGNvbW1hbmQuJworCSQoTUFL RSkgeGVybWl0IENDPSQoQ0MpIENDMj0kKENDMikgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUz0gLURORVhUIC1EVENQU09DS0VUIC1ETENLRElSIC1ETk9QVVRFTlYgLURGTkZM T0FUIFwKKwktcGlwZSAtRENLX0NVUlNFUyAkKEtGTEFHUykgLU8gLXciICJMSUJTID0gLWxzeXNf cyAtbGN1cnNlcyAtbHRlcm1jYXAiCisKK25leHRjOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIg Q0M9JChDQykgQ0MyPSQoQ0MyKSBuZXh0IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisK K25leHRnOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBuZXh0 IFwKKwlLRkxBR1M9LVdhbGwgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCituZXh0Z2M6CisJ JChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKENDKSBDQzI9JChDQzIpIG5leHQgXAorCUtGTEFH Uz0tV2FsbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNOZVhUU1RFUCAzLjMuCisjSW5j bHVkZXMgZnVsbHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXkgYW5kIFRDUC9JUC4KKyMgWW91 IG1pZ2h0IGhhdmUgdG8gYWRkIDEgbGluZSB0byAxIE5lWFQgaGVhZGVyIGZpbGUgPGlwLmg+Cisj IHRvIGRlY2xhcmUgbl9sb25nIGFzIHVfbG9uZyBieSBhZGRpbmcgI2luY2x1ZGUgPGJzZC9uZXRp bmV0L2luX3N5c3RtLmg+CisKK25leHQzMzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIE5lWFRTVEVQIDMuMy4uLgorCSQoTUFLRSkgeGVybWl0IENDPSQoQ0MpIENDMj0kKEND MikgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURORVhUMzMgLURUQ1BT T0NLRVQgLURMQ0tESVIgLUROT1BVVEVOViAtREZORkxPQVQgXAorCS1waXBlIC1EQ0tfQ1VSU0VT ICQoS0ZMQUdTKSAtTyAtdyIgIkxJQlMgPSAtbHN5c19zIC1sY3Vyc2VzIC1sdGVybWNhcCIKKwor I09QRU5TVEVQIDQuMiBmb3IgU3BhcmMsIG02ODB4MCwgSFAgUEEtUklTQywgYW5kIEludGVsLgor I0luY2x1ZGVzIGZ1bGxzY3JlZW4gZmlsZSB0cmFuc2ZlciBkaXNwbGF5IGFuZCBUQ1AvSVAuCisj Y2tjcHJvLmMgY29tcGlsZWQgd2l0aG91dCBvcHRpbWl6YXRpb24gYmVjYXVzZSBpdCBjcmFzaGVz IHRoZSBjb21waWxlci4KK29wZW5zdGVwNDI6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBPUEVOU1RFUCA0LjIuLi4KKwkkKE1BS0UpIGNrY3Byby4kKEVYVCkgXAorCSJDRkxB R1M9IC1ET1BFTlNURVA0MiAtRE5FWFQzMyAtRFRDUFNPQ0tFVCAtRExDS0RJUiAtRE5PUFVURU5W IFwKKwktREZORkxPQVQgLXBpcGUgLURDS19DVVJTRVMgJChLRkxBR1MpIC13IgorCSQoTUFLRSkg eGVybWl0IENDPSQoQ0MpIENDMj0kKENDMikgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUz0gLURPUEVOU1RFUDQyIC1ETkVYVDMzIC1EVENQU09DS0VUIC1ETENLRElSIC1ETk9Q VVRFTlYgXAorCS1ERk5GTE9BVCAtcGlwZSAtRENLX0NVUlNFUyAkKEtGTEFHUykgLU8gLXciIFwK KwkiTElCUyA9IC1sc3lzX3MgLWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjTmVYVCB3aXRoIG1hbGxv YyBkZWJ1Z2dlcgorbmV4dG1kOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig TmVYVCB3aXRoIG1hbGxvYyBkZWJ1Z2dpbmcuLi4KKwkkKE1BS0UpIG1lcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE5FWFQgLURUQ1BTT0NLRVQgLURMQ0tESVIg LUROT1BVVEVOViAtREZORkxPQVQgXAorCS1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtTyAtdyAtRG1h bGxvYz1kbWFsbG9jIC1EZnJlZT1kZnJlZSAtRE1ERUJVRyIgXAorCSJMSUJTID0gLWxzeXNfcyAt bGN1cnNlcyAtbHRlcm1jYXAiCisKKyNCdWlsZCBmb3IgTmVYVFNURVAgd2l0aCAiZmF0IiBiaW5h cmllcyAoTUFCcykgdGhhdCBydW4gb24gYm90aCBNb3Rvcm9sYQorI2FuZCBJbnRlbCBwbGF0Zm9y bXMuCituZXh0ZmF0OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0My KSBcCisJbmV4dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1XYWxsIC1h cmNoIG02OGsgLWFyY2ggaTM4NiIgIkxOS0ZMQUdTID0gLWFyY2ggbTY4ayAtYXJjaCBpMzg2Igor CisjTmVYVFNURVAgb24gSW50ZWwgUGxhdGZvcm1zLgorbmV4dDQ4NjoKKwlAZWNobyBNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIE5lWFRTVEVQIG9uIEludGVsIFBsYXRmb3Jtcy4uLgorCUBl Y2hvICdJZiB5b3UgZ2V0IGVycm9ycyBpbiBja3V0aW8uYyBhYm91dCB3X1MsIHdfVCwgZXRjLCcK KwlAZWNobyAnYWRkIEtGR0xBR1M9RC1ETk9SRURJUkVDVCB0byB5b3VyIG1ha2UgY29tbWFuZC4n CisJJChNQUtFKSB4ZXJtaXQgQ0M9JChDQykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRE5FWFQgLURUQ1BTT0NLRVQgLURMQ0tESVIgLUROT1BVVEVO ViAtREZORkxPQVQgXAorCS1ETk9ERUJVRyAtTzMgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZz Y2hlZHVsZS1pbnNuczIgLXBpcGUgXAorCS1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtdyIgIkxJQlMg PSAtbHN5c19zIC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI1NpbmdsZSBiaW5hcnkgdGhhdCBydW5z IG9uIE5lWFQgNjgwMzAgYW5kIDY4MDQwLCBJbnRlbCwgSFAsIGFuZCBTcGFyYywKKyNhcyB3ZWxs IGFzIG9uIE9wZW5TdGVwL01hY2guCituZXh0cXVhZGZhdDoKKwkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIENDPSQoQ0MpIENDMj0kKENDMikgbmV4dCBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIktGTEFHUz0tV2FsbCAtYXJjaCBtNjhrIC1hcmNoIGkzODYgLWFyY2ggaHBwYSAtYXJj aCBzcGFyYyIgXAorCSJMTktGTEFHUyA9IC1hcmNoIG02OGsgLWFyY2ggaTM4NiAtYXJjaCBocHBh IC1hcmNoIHNwYXJjIgorCisjQmVCb3gKK2JlYm94ZHI3OgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIHRoZSBCZUJveC4uLicKKwlAZWNobyAnTGluayBzdGVwIHdpbGwgZmFp bCB3aXRoIGRlZmF1bHQgTWV0cm93b3JrcyBsaW5rZXIgNjRLIGxpbWl0LicKKwlAZWNobyAnQ29k ZSBXYXJyaW9yIEdvbGQgcmVxdWlyZWQgdG8gbGluayBiaWcgcHJvZ3JhbXMuJworCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDQz0vYm9vdC9kZXZlbG9wL3Rv b2xzL213Y2MiICJDQzI9L2Jvb3QvZGV2ZWxvcC90b29scy9td2xkIiBcCisJIkNGTEFHUz0gLURC RUJPWCAtREJFX0RSXzcgLURQT1NJWCAtRE5PVVVDUCAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIgor CisjQmVCb3ggQmVPUyBEUjcgb25seQorYmVib3g6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgQmVCb3guLi4nCisJQGVjaG8gJ0xpbmsgc3RlcCB3aWxsIGZhaWwgd2l0aCBk ZWZhdWx0IE1ldHJvd29ya3MgbGlua2VyIDY0SyBsaW1pdC4nCisJQGVjaG8gJ0NvZGUgV2Fycmlv ciBQcm8gMy4wIGZvciBCZUJveCByZXF1aXJlZCB0byBsaW5rIGJpZyBwcm9ncmFtcy4nCisJJChN QUtFKSB3ZXJtaXQgIkNDPW13Y2MiICJDQzI9bXdsZCIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURCRUJPWCAtRFBPU0lYIC1ETk9MRUFSTiAtRE5PVVVDUCAkKEtGTEFH UykgLU8iCisKKyNCZU9TIDQuNQorI1dlIGhhdmUgdG8gdXNlIHRoZSB3ZXJtaXQgdGFyZ2V0IGJl Y2F1c2UgJ2ZkX3NldCcgaXMgdW5rbm93bi4KK2Jlb3M0NToKKwkkKE1BS0UpIHdlcm1pdCAiQ0M9 JChDQykiICJDQzI9JChDQzIpIiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdT PSAtREJFT1MgLURCRU9TNDUgLURQT1NJWCAtRE5PSUtTRCAtRE5PUkVBTFBBVEggLURTWVNUSU1F SCBcCisJLUROT0NPVEZNQyAtRE5PVVVDUCAtRE5PTEVBUk4gJChLRkxBR1MpIC1PIiBcCisJIkxJ QlMgPSAkKExJQlMpIgorCisjQmVPUyA0LjUKK2Jlb3M0NW5ldDoKKwkkKE1BS0UpIENDPSQoQ0Mp IENDMj0kKENDMikgYmVvczQ1IFwKKwkiS0ZMQUdTPS1EVENQU09DS0VUIC1ETk9fRE5TX1NSViAk KEtGTEFHUykiICJMSUJTPS1sbmV0IC1sbmV0YXBpIgorCisjUGxhbiA5IGZyb20gQmVsbCBMYWJz CitwbGFuOToKKwlAZWNobyAnQy1LZXJtaXQgZm9yIFBsYW4gOSBmcm9tIEJlbGwgTGFicyAtIGNh bGxpbmcgY2twa2VyLm1rLi4uJworCW1ha2UgLWYgY2twa2VyLm1rCisKKyNQT1NJWAorcG9zaXg6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgcHVyZSBQT1NJWC4uLicKKwkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFBP U0lYIC1ETk9VVUNQIC1ETk9MRUFSTiAkKEtGTEFHUykgLU8iCisKKyMgUG93ZXJNQVggT1MgKFNW UjQpIGZyb20gQ29uY3VycmVudCAodGVzdGVkIG9uIFBvd2VyTUFYIDUuMSkKK3Bvd2VybWF4Ogor CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENvbmN1cnJlbnQgUG93ZXJNQVgg T1MuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNG TEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURQT1dFUk1BWCBcCisJLURORVRQ VFkgLURIQVZFX1NUUkVBTVMgLURIQVZFX0dSQU5UUFQgLURIQVZFX1BUU05BTUUgLURQVVNIX1BU RU0gXAorCS1EUFVTSF9MRFRFUk0gLURQVVNIX1RUQ09NUEFUIFwKKwktRFNURVJNSU9YIC1EVENQ U09DS0VUIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAt bHJlc29sdiAtbGN1cnNlcyAtbGdlbiAtbGMgLWx1Y2JjIgorCisjQmVya2VsZXkgU29mdHdhcmUg RGVzaWduIEluYy4gQlNESQorIyBTdWJzdGl0dXRlICJMSUJTPSAtbG5ld2N1cnNlcyAtbHRlcm1j YXAiIGlmIGRlc2lyZWQuCitic2RpOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIEJTREkgLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDRkxBR1M9IC1EQlNENDQgLURTRVRSRVVJRCAtRFNXX0FDQ19JRCAtREJJR0JVRk9LIC1E RklYQ1JUU0NUUyBcCisJLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURGTkZMT0FUICQoS0ZMQUdT KSAtTyIgXAorCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtIgorCisjQmVya2VsZXkgU29m dHdhcmUgRGVzaWduIEluYy4gQlNESSAtIGhhcyBoaWdoZXIgc2VyaWFsIHNwZWVkcyB0aGFuIDEu eC4KK2JzZGkyOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBi c2RpIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9LURCU0RJMiAkKEtGTEFH UykiCisKK2JzZGkzOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9JChDQykgQ0MyPSQoQ0My KSBic2RpIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9LURCU0RJMiAtREJT REkzICQoS0ZMQUdTKSIKKworYnNkaTQ6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0kKEND KSBDQzI9JChDQzIpIGJzZGkgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxB R1M9LURCU0RJMiAtREJTREkzIC1EQlNESTQgLURUUFVUU0ZOVFlQRT12b2lkIC1EVFBVVFNJU1ZP SUQgXAorCS1EQ0tIVFRQIC1tNDg2ICQoS0ZMQUdTKSIKKworIyAob2xkIG5hbWUgZm9yIHRoZSBh Ym92ZSkKK2JzZGlwb3NpeDoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIENDPSQoQ0MpIENDMj0k KENDMikgYnNkaQorCisKKyNCdWlsZCBhIEJTREkgNC54IGJpbmFyeSB0aGF0IGFsc28gcnVucyB1 bmRlciBGcmVlQlNEIChUZXJyeSBLZW5uZWR5KS4KKyNCdXQgd2F0Y2ggb3V0IGZvciBkZXRhaWxz IGxpa2Ugc2VyaWFsLXBvcnQgbG9ja2luZy4KK2JzZGl4OgorCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgQ0M9JChDQykgQ0MyPSQoQ0MyKSBic2RpIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiS0ZMQUdTPS1EQlNESTIgLURCU0RJMyAtREJTREk0IC1EVFBVVFNGTlRZUEU9dm9pZCAt RFRQVVRTSVNWT0lEIFwKKwktbTQ4NiAkKEtGTEFHUykiICJMTktGTEFHUz0tc3RhdGljIC1XbCwt bSxpMzg2YnNkaSAtV2wsLWUsX3N0YXJ0IgorCisjUHlyYW1pZCA5WFhYIChlLmcuIDk4NDUpIG9y IE1JU2VydmVyIFQgc2VyaWVzLCBPU3ggNC40YiB0aHJ1IDUuMQorcHlyYW1pZDoKKwlAZWNobyBN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFB5cmFtaWQgRHVhbCBQb3J0IE9TeAorCXVjYiAk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJT RDQzIC1EVENQU09DS0VUIC1EUFlSQU1JRCAtTyAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIgor CisjUHlyYW1pZCBEdWFsIFBvcnQgT1N4IHVzaW5nIEhvbmV5RGFuQmVyIFVVQ1AsIGN1cnNlcyBh bmQgVENQCitweXJhbWlkLWhkYjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IFB5cmFtaWQgRHVhbCBQb3J0IE9TeAorCXVjYiAkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREJTRDQzIC1EVENQU09DS0VUIC1ESEJEVVVDUCAt RENLX0NVUlNFUyAtTyAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1 cnNlcyAtbHRlcm1jYXAiCisKKyNQeXJhbWlkIERDL09TeCAoVU5JWCBTeXN0ZW0gViBSNCkuCisj SGFzIDxzeXMvdGVybWlveC5oPiwgcmVndWxhciBCZXJrZWxleSBzb2NrZXRzIGxpYnJhcnksIGku ZS4gaW4uaCBhbmQgaW5ldC5oCisjYXJlIG5vdCBtaXNwbGFjZWQgaW4gc3lzIChyYXRoZXIgdGhh biBuZXRpbmV0IGFuZCBhcnBhLCByZXNwZWN0aXZlbHkpLgorI1VzZXMgQU5TSSBDLgorI05PVEU6 IFJlbW92ZSAtTyBhbmQgT2xpbWl0OjI1MDAgZnJvbSBDRkxBR1MgaWYgVEVMTkVUIGNvbm5lY3Rp b25zIGRvIG5vdCB3b3JrLgorcHlyZGNvc3g6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgUHlyYW1pZCBEQy9PU3guLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1YYSAtTyAtRFNWUjQgLURESVJFTlQgLURIREJV VUNQIC1EU0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EQ0tfQ1VSU0VTIC1EU1RFUk1JT1gg LURUQ1BTT0NLRVQgLURQWVJBTUlEIC1LIE9saW1pdDozMTAwIFwKKwktRE5PX0ROU19TUlYgJChL RkxBR1MpIiAiTElCUz0gLWxjdXJzZXMgLWxzb2NrZXQgLWxuc2wiICJMTktGTEFHUyA9IC1zIgor CisjSUJNJ3MgQUlYIDMuMCBvbiBJQk0gMzcwIG1haW5mcmFtZSwgdGVzdGVkIG9uIEFJWCBGNDQg dGhydSBGNTAuCithaXgzNzA6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJ Qk0gU3lzdGVtLzM3MCBBSVggMy4wLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURBSVgzNzAgLURUQ1BTT0NLRVQgLURMQ0tESVIgLURE SVJFTlQgJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbGJzZCIKKworI0lCTSdzIEFJWC9FU0EgMi4x IChPU0YvMSkgb24gSUJNIG1haW5mcmFtZQorYWl4ZXNhOgorCUBlY2hvIE1ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgSUJNIEFJWC9FU0EuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREFJWEVTQSAtRFRDUFNPQ0tFVCAkKEtGTEFH UykgLU8iCisKKyNJQk0gUFMvMiB3aXRoIEFJWCAxLjAgdGhydSAxLjMuCisjICBSZXBvcnRzIGlu ZGljYXRlIHRoYXQgLU8gc3dpdGNoIG11c3QgYmUgb21pdHRlZC4KKyMgIEl0IGlzIGFsc28gcG9z c2libGUgdGhhdCAibWFrZSBic2QiIHdpbGwgd29yayAocmVwb3J0cyB3ZWxjb21lKS4KKyMgIE9u ZSByZXBvcnQgc2FpZCAibWFrZSBMSUJTPS1sYnNkIGJzZCIgZGlkIHRoZSB0cmljay4KKyMgIE5P VExPRyBpcyB0byBnZXQgYXJvdW5kIGEgJ3Rsb2cnIHN5bWJvbCBkZWZpbmVkIGluIG9uZSBvZiB0 aGUgaGVhZGVycy4KK3BzMmFpeDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBJQk0gQUlYIDEueCBQUy8yLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9SRUFMUEFUSCAtRFBTMkFJWDEwIC1E U0lHX1YgXAorCS1ETk9VTklDT0RFIC1ETk9UTE9HIC1ETk9MRUFSTiAkKEtGTEFHUykgLWkiIFwK KwkiTE5LRkxBR1MgPSAtaSIKKworcHMyYWl4bmV0YzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDEueCBQUy8yLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9SRUFMUEFUSCAt RFBTMkFJWDEwIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIFwKKwktRFNJR19WIC1ETk9VTklDT0RF IC1ETk9UTE9HIC1ETk9MRUFSTiAkKEtGTEFHUykgLWkiIFwKKwkiTElCUyA9IC1sY3Vyc2VzIiAi TE5LRkxBR1MgPSAtaSIKKworcHMyYWl4MzoKKwkkKE1BS0UpIHBzMmFpeCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9CisKKyNJQk0gUlQgUEMgd2l0aCBBSVggMi4yLjEsIHZhbGlkIGFzIG9mIEMt S2VybWl0IDguMC4KKyNOT1RMT0cgYmVjYXVzZSBvZiBhIGNvbmZsaWN0IGluIDxzeXMvdGVybWlv Lmg+LgorI1RoaXMgb25lIGhhcyB1bmlxdWUgYW5kIHN0cmFuZ2UgbG9ja2ZpbGVzLgorIyAgLU8g cmVtb3ZlZCBvbiBwdXJwb3NlICg4LjApLgorIyAgSW4gY2FzZSBvZiAiY29tcGlsZXIgZXJyb3I6 IHN5bWJvbCB0YWJsZSBmdWxsIiwgaW5jcmVhc2UgdGhlIC1ObiBudW1iZXIuCisjICBJbiBjYXNl IG9mICJjb21waWxlciBlcnJvcjogQ29uc3RhbnQgcG9vbCB0b28gYmlnIiwgYm9vc3QgdGhlIC1O cCBudW1iZXIuCisjICBBZGQgLUROT1BVVEVOViBpZiBwdXRlbnYoKSBjYXVzZXMgdHJvdWJsZS4K KyMgIFB1dCAtRE5PSUtTRCBiYWNrIGlmIElLU0QtcmVsYXRlZCBwcm9ibGVtcyBvY2N1ci4KK3J0 YWl4OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBSVCBQQywgQUlY IDIuMi4xLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJ IkNGTEFHUyA9IC1EQVRUU1YgLURSVEFJWCAtREhEQlVVQ1AgLURESVJFTlQgLUROT1RMT0cgLURU Q1BTT0NLRVQgXAorCS1ETk9HRVRVU0VSU0hFTEwgLURDTFNPUE4gLUROT1JFQUxQQVRIIC1ETk9V TklDT0RFIC1EQlNEX0lOQ0xVREVTIFwKKwktRFVTRV9MU1RBVCAtREZORkxPQVQgLU5uMjUwMCAt TnAxMDAwIC1XcSwtU0oyIC1hIC13ICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxtICQoTElCUyki ICJMTktGTEFHUyA9IC1zIgorCisjIyMjIElCTSBSVCBQQyAtIHRoZXNlIHRhcmdldHMgd2VyZSBs YXN0IHZlcmlmaWVkIGluIEMtS2VybWl0IDguMC4yMTEuCisKKyNJQk0gUlQgUEMgd2l0aCBBSVgg Mi4yLjEgKyBjdXJzZXMKK3J0YWl4YzoKKwkkKE1BS0UpIHJ0YWl4IENDPSQoQ0MpIENDMj0kKEND MikgIktGTEFHUz0tRENLX0NVUlNFUyIgIkxJQlM9LWxjdXJzZXMiCisKKyNJQk0gUlQgUEMgd2l0 aCBBSVggKEFDSVMpIDIuMi4xIChCU0QgNC4zKQorIyBBZGQgLU8sIC1ERFlOQU1JQywgLXMsIGV0 YywgaWYgdGhleSB3b3JrLgorcnRhY2lzOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgUlQgUEMgd2l0aCBBQ0lTIDIuMi4xID0gQlNEIDQuMy4uLgorCSQoTUFLRSkgeGVybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVC0kKEApfSBcCisJIkNGTEFHUz0gLURCU0Q0IC1EVENQU09DS0VU IC1ETk9SRUFMUEFUSCAtRE5PSUtTRCAtRE5PUFVURU5WIFwKKwkkKEtGTEFHUykgLVVfX1NURENf XyIgIkxOS0ZMQUdTID0gLXMiCisKKyMjIyMgSUJNIEFJWC4gIFRoZSBmaXJzdCB0d28gdGFyZ2V0 cyBzaG91bGQgd29yayBmb3IgYW55IHZlcnNpb24gb2YgQUlYCisjIyMjIGZyb20gNC4yIG9ud2Fy ZHMuICBUaGUgb25lcyBhZnRlciB0aGF0IGFyZSBmb3Igb2xkZXIgdmVyc2lvbnMgb3IKKyMjIyMg c3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGFuZC9vciB3aXRoIGdjYy4KKworIyBUaGlzIG9uZSBz aG91bGQgd29yayBmb3IgYW55IEFJWCA0LjIgb3IgbGF0ZXI6ICJtYWtlIGFpeCIuCisjIE90aGVy IHRhZ3MgYXJlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIG1ha2VmaWxlIHRhcmdldHMuCisj T0s6IDIwMTEvMDYvMTEKK2FpeCBhaXg0MiBhaXg0MyBhaXg0NCBhaXg0NSBhaXg1MCBhaXg1MSBh aXg1MiBhaXg1MyBhaXg1NCBhaXg2MToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIElCTSBBSVguLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTPSAtREFJWFJTIC1EQUlYNDEgLURBSVg0MiAtRFNWUjQgLURTVEVSTUlPWCAt RFRDUFNPQ0tFVCBcCisJLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAt RENLX05FV1RFUk0gLURGTkZMT0FUIFwKKwktRFNFTEVDVCAtRFNFTEVDVF9IIC1ETk9HRVRVU0VS U0hFTEwgLXFtYXhtZW09MTYwMDAgLU8gXAorCS1EQ0tDUFU9XFxcImB1bmFtZSAtcGBcXFwiIFwK KwktREhFUkFMRD1cIlxcXCIgSUJNIEFJWCBgdW5hbWUgLXZgLmB1bmFtZSAtcmBcXFwiXCIgXAor CS1EX0xBUkdFX0ZJTEVTICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiICJMSUJTPS1sY3Vyc2Vz IC1sbSIKKworIyBTYW1lIGJ1dCB1c2luZyBnY2MgaW5zdGVhZCBvZiBjYworIyBUaGlzIHdvcmtz IGJ1dCB3ZSBnZXQgImdjYzogdW5yZWNvZ25pemVkIG9wdGlvbiAnLXFtYXhtZW0tLi4nIiBlYWNo IG1vZHVsZS4KK2FpeGc6CisJQGVjaG8gIlVzaW5nIGdjYy4uLiIKKwkkKE1BS0UpIGFpeCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwlDQz1nY2MgQ0MyPWdjYyAiS0ZMQUdTPS1waXBlIC1m dW5zaWduZWQtY2hhciIKKworIyBBSVggNC4yIG9yIGxhdGVyIHdpdGggT3BlblNTTCAwLjkuNyBv ciBsYXRlcjogIm1ha2UgYWl4K3NzbCIKKyMgRm9yIGVhcmxpZXIgT3BlblNTTCByZW1vdmUgLURP UEVOU1NMXzA5NyBvciBhZGQgIktGTEFHUz0tVU9QRU5TU0xfMDk3Ii4KKyMgU3lub255bSB0YXJn ZXQgbmFtZXMgYWRkZWQgdG8gY292ZXIgb2xkIHJlZHVuZGFudCB0YXJnZXRzIHRoYXQgd2VyZSBy ZW1vdmVkLgorIyBJZiBTU0wgaXMgbm90IGluc3RhbGxlZCBpbiB0aGUgL3Vzci9sb2NhbCB0cmVl IChzZWUgU1NMSU5DIGFuZCBTU0xMSUIKKyMgZGVmaW5pdGlvbnMgbmVhciB0aGUgdG9wKSwgeW91 IGNhbiBzcGVjaWZ5IHRoZSBsb2NhdGlvbnMgaW4geW91ciBtYWtlCisjIGNvbW1hbmQgYXMgaW4g dGhpcyBleGFtcGxlOgorIworIyAgU1NMSU5DPS1JL29wdC9zc2wvaW5jbHVkZSBTU0xMSUI9LUwv b3B0L3NzbC9saWIgbWFrZSAtZSBhaXgrc3NsCisjCisjIFRvIGJ1aWxkIHdpdGggZ2NjIHVzZSAi bWFrZSBhaXggQ0M9Z2NjIENDMj1nY2MiLCBvciAibWFrZSBhaXhnIgorIworI09LOiAyMDExLzA2 LzE1CithaXgrc3NsIGFpeDUxK29wZW5zc2wgYWl4NTIrb3BlbnNzbCBhaXg1MytvcGVuc3NsOgor CUBlY2hvICJNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggd2l0aCBPcGVuU1NM Li4uIgorCUBlY2hvICJTU0xJTkM9JChTU0xJTkMpIFNTTExJQj0kKFNTTExJQikiCisJJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJQ0M9JChDQykgQ0MyPSQoQ0My KSBcCisJIkNGTEFHUz0tREFJWFJTIC1EQUlYNDEgLURBSVg0MiAtRFNWUjQgLURTVEVSTUlPWCAt RFRDUFNPQ0tFVCBcCisJLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAt RENLX05FV1RFUk0gLURGTkZMT0FUIFwKKwktRF9MQVJHRV9GSUxFUyAtRFNFTEVDVCAtRFNFTEVD VF9IIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EQ0tDUFU9XFxcImB1bmFtZSAtcGBcXFwiIFwKKwkt REhFUkFMRD1cIlxcXCIgSUJNIEFJWCBgdW5hbWUgLXZgLmB1bmFtZSAtcmBcXFwiXCIgXAorCS1E Q0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgLURPUEVOU1NMXzA5NyAkKFNTTElOQykgJChLRkxB R1MpIiBcCisJIkxOS0ZMQUdTPS1zIiAiTElCUz0kKFNTTExJQikgLWxzc2wgLWxjcnlwdG8gLWxj dXJzZXMgLWxtIC1sY3J5cHQiCisKKyMgQUlYIDUuMyBvciA2LjEgb3IgbGF0ZXIgd2l0aCBJQk0g T3BlblNTTCwgd2hpY2ggaXMgYWx3YXlzIGluIHRoZSBkaXJlY3RvcmllcworIyBzaG93biBiZWxv dyBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBzZXQgU1NMSU5DIGFuZCBTU0xMSUIuICBJZiBmb3Igc29t ZSByZWFzb24KKyMgdGhlIFNTTCBpbmNsdWRlIGZpbGVzIGFuZCBsaWJyYXJpZXMgYXJlIG5vdCBp biB0aGUgcGxhY2VzIGFzc3VtZWQsIHRoZW4gdXNlCisjICJtYWtlIGFpeCtzc2wiIChqdXN0IGFi b3ZlKSBhbmQgc2V0IFNTTElOQyBhbmQgU1NMTElCIHRvIGluZGljYXRlIHdoZXJlIHRoZQorIyBT U0wgZmlsZXMgYXJlLiAgVG8gYnVpbGQgd2l0aCBnY2MgdXNlICJtYWtlIGFpeCtpYm1zc2wgQ0M9 Z2NjIENDMj1nY2MiLgorYWl4K2libXNzbDoKKwlAZWNobyAiTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBJQk0gQUlYIDYuMSB3aXRoIE9wZW5TU0wuLi4iCisJQGVjaG8gIklmIHRoaXMgZmFp bHMgdXNlICdtYWtlIGFpeCtzcycgYW5kIHNwZWNpZnkgU1NMSU5DIGFuZCBTU0xMSUIiCisJJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJQ0M9JChDQykgQ0MyPSQo Q0MyKSBcCisJIkNGTEFHUz0tREFJWFJTIC1EQUlYNDEgLURBSVg0MiAtRFNWUjQgLURTVEVSTUlP WCAtRFRDUFNPQ0tFVCBcCisJLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNF UyAtRENLX05FV1RFUk0gLURGTkZMT0FUIFwKKwktRF9MQVJHRV9GSUxFUyAtRFNFTEVDVCAtRFNF TEVDVF9IIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EQ0tDUFU9XFxcImB1bmFtZSAtcGBcXFwiIFwK KwktREhFUkFMRD1cIlxcXCIgSUJNIEFJWCBgdW5hbWUgLXZgLmB1bmFtZSAtcmBcXFwiXCIgXAor CS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgLURPUEVOU1NMXzA5OCBcCisJLUkvdXNyL2lu Y2x1ZGUvb3BlbnNzbCAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1M9LXMiIFwKKwkiTElCUz0tTC91 c3IvbGliL29wZW5zc2wgLWxzc2wgLWxjcnlwdG8gLWxjdXJzZXMgLWxtIC1sY3J5cHQiCisKKyMg T2xkIEFJWCB2ZXJzaW9ucy4uLgorCisjSUJNIEFJWCAzLjAsIDMuMSwgb3IgMy4yIGZvciBSSVND IFN5c3RlbS82MDAwLgorcnM2MDAwOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgSUJNIEFJWCAzLjAgb3IgMy4xLCBSUy82MDAwLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURBSVhSUyAtRFRDUFNPQ0tFVCAtRFNW UjMgLURESVJFTlQgLURDS19BTlNJQyBcCisJLURDS19QT0xMIC1EQ0xTT1BOIC1EU0VMRUNUX0gg LUROT1RUWUxPQ0sgLU8gJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLXMiCisKKyNJQk0gQUlY IDMuMCwgMy4xLCBvciAzLjIgZm9yIFJJU0MgU3lzdGVtLzYwMDAsIHdpdGggY3Vyc2VzLgorcnM2 MDAwYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggMy4wIG9y IDMuMSwgUlMvNjAwMC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1M9IC1EQUlYUlMgLURUQ1BTT0NLRVQgLURTVlIzIC1ERElSRU5UIC1EQ0tf QU5TSUMgXAorCS1EQ0tfUE9MTCAtRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVDVF9IIC1ETk9U VFlMT0NLIC1ETk9SRUFMUEFUSCBcCisJLU8gJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXMgLWx0 ZXJtY2FwIiAiTE5LRkxBR1MgPSAtcyIKKworYWl4MzA6CisJJChNQUtFKSByczYwMDAgQ0M9JChD QykgQ0MyPSQoQ0MyKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKK2FpeDMxOgorCSQoTUFL RSkgcnM2MDAwIENDPSQoQ0MpIENDMj0kKENDMikgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQor CisjSUJNIEFJWCAzLjIgZm9yIFJJU0MgU3lzdGVtLzYwMDAuCisjSW4gY2FzZSBvZiAic3VicHJv Z3JhbSB0b28gY29tcGxleCIgd2FybmluZ3MsIGFkZCAiLXFtYXhtZW09MTYwMDAiIHRvIENGTEFH Uy4KK3JzNmFpeDMyOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJ WCAzLjIsIFJTLzYwMDAuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtREFJWFJTIC1EVENQU09DS0VUIC1EU1ZSNCAtRERJUkVOVCAtRENL X0FOU0lDIC1ETk9SRUFMUEFUSCBcCisJLURTRUxFQ1RfSCAtRENMU09QTiAtRE5PVFRZTE9DSyAt TyAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIgorCisjSUJNIEFJWCAzLjIgZm9yIFJJU0MgU3lz dGVtLzYwMDAuCityczZhaXgzMmM6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBJQk0gQUlYIDMuMiwgUlMvNjAwMCwgVENQK2N1cnNlcy4uLgorCUBlY2hvIEluIGNhc2Ugb2Yg U3VicHJvZ3JhbSBUb28gQ29tcGxleCB3YXJuaW5ncywKKwlAZWNobyBhZGQgLXFtYXhtZW09MTYw MDAgdG8gQ0ZMQUdTLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDRkxBR1M9IC1EQUlYUlMgLURUQ1BTT0NLRVQgLURTVlI0IC1ERElSRU5UIC1EQ0tfQU5T SUMgLUROT1JFQUxQQVRIIFwKKwktRENMU09QTiAtRENLX0NVUlNFUyAtRFNFTEVDVF9IIC1ETk9U VFlMT0NLIC1PICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUz0tbGN1cnNlcyIK KworYWl4MzI6CisJJChNQUtFKSByczZhaXgzMmMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQor CisjSUJNIEFJWCA0LjEsIDQuMS54IG9uIFJJU0MgU3lzdGVtLzYwMDAgb3IgUG93ZXIgU2VyaWVz LgorI0dlbmVyYXRlcyBjb21tb24gYmluYXJ5IGZvciBhbGwgcGxhdGZvcm1zIGlmIHVzaW5nIHhs YyAoSUJNIEMgY29tcGlsZXIpLgorI1doZW4gdXNpbmcgZ2NjLCBhZGQgLW1jcHU9Y29tbW9uIHRv IGdlbmVyYXRlIGNvbW1vbiBiaW5hcnkuCisjTm90ZSB0aGF0IHRoaXMgb25lIG5lZWRzIENLX05F V1RFUk0uCisjIEFkZCAtYmJpZ3RvYyBpbiBjYXNlIGxkIGZhaWxzIHdpdGggVE9DIG92ZXJmbG93 LgorYWl4NDE6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDQu MS4xIFJTLzYwMDAgb3IgUG93ZXJQQy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtRFNWUjQgLURTVEVSTUlP WCAtRFRDUFNPQ0tFVCAtRERJUkVOVCBcCisJLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNF UyAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLUROT0dFVFVTRVJTSEVMTCAt cW1heG1lbT0xNjAwMCAtTyAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlM9LWxj dXJzZXMiCisKKyNEaXR0byBidXQgd2l0aCBnY2MuCisjUmVtb3ZlICJDQz1nY2MgQ0MyPWdjYyIg aWYgeW91IGhhdmUgZ2NjIGluc3RhbGxlZCBhcyBjYy4KK2FpeDQxZzoKKwlAZWNobyBNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4xLjEgUlMvNjAwMCBvciBQb3dlclBDLi4u CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9Z2NjIiAiQ0My PWdjYyIgXAorCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtRFNWUjQgLURTVEVSTUlPWCAtRFRD UFNPQ0tFVCAtRERJUkVOVCBcCisJLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NVUlNFUyAtRENL X05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLUROT0dFVFVTRVJTSEVMTCAtTyAkKEtG TEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyAtWGxpbmtlciAtYmJpZ3RvYyIgIkxJQlM9LWxjdXJz ZXMiCisKKyMgQWRkIC1iYmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mgb3ZlcmZsb3cu CithaXg0MStrcmI1K2tyYjQ6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJ Qk0gQUlYIDQuMS4xIFJTLzYwMDAgb3IgUG93ZXJQQy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtRFNWUjQg LURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRERJUkVOVCBcCisJLURDS19BTlNJQyAtRENMU09QTiAt RENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURDS19BVVRI RU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1EQ0tf RU5DUllQVElPTiAtRENLX0RFUyAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICBcCisJLUROT0dFVFVT RVJTSEVMTCAtcW1heG1lbT0xNjAwMCAtTyAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIg XAorCSJMSUJTID0gJChLNUxJQikgLWxjdXJzZXMgLWxrcmI0IC1sZGVzNDI1IC1sa3JiNSBcCisJ LWxjb21fZXJyIC1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSIKKworI09sZCBuYW1lIGZvciAiYWl4 NDEiLgorcnM2YWl4NDFjOgorCSQoTUFLRSkgYWl4NDEgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fQorCisjSUJNIEFJWCA0LjEsIDQuMS54LCBvciA0LjIgb24gUklTQyBTeXN0ZW0vNjAwMCBvciBQ b3dlciBTZXJpZXMsCisjIHdpdGggWC4yNSBzdXBwb3J0CisjR2VuZXJhdGVzIGNvbW1vbiBiaW5h cnkgZm9yIGFsbCBwbGF0Zm9ybXMgaWYgdXNpbmcgeGxjIChJQk0gQyBjb21waWxlcikuCisjV2hl biB1c2luZyBnY2MsIGFkZCAtbWNwdT1jb21tb24gdG8gZ2VuZXJhdGUgY29tbW9uIGJpbmFyeS4K KyMgQWRkIC1iYmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mgb3ZlcmZsb3cuCithaXg0 MXgyNToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4xLjEg UlMvNjAwMCBvciBQb3dlclBDLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIkNGTEFHUz0gLURBSVhSUyAtREFJWDQxIC1EU1ZSNCAtRFNURVJNSU9YIC1E VENQU09DS0VUIC1ERElSRU5UIFwKKwktRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1E Q0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwktRElCTVgyNSAtRERFQlVHIC1ETk9H RVRVU0VSU0hFTEwgLXFtYXhtZW09MTYwMDAgLWcgJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0g LWcgLWJJOi9saWIvcHNlLmV4cCIgIkxJQlM9LWxjdXJzZXMgLWxvZG0gLWxjZmciCisJLUBlY2hv ICIbXTA7a2VybWl0IGRvbmUHXGMiCisKKyNBcyBhYm92ZSBidXQgd2l0aG91dCAtZyBpbiBMTktG TEFHUy4KKyMgQWRkIC1iYmlndG9jIGluIGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mgb3ZlcmZsb3cu CithaXg0MXgyNW86CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlY IDQuMS4xIFJTLzYwMDAgb3IgUG93ZXJQQy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQUlYUlMgLURBSVg0MSAtRFNWUjQgLURTVEVS TUlPWCAtRFRDUFNPQ0tFVCAtRERJUkVOVCBcCisJLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NV UlNFUyAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURJQk1YMjUgLUROT0RF QlVHIC1ETk9HRVRVU0VSU0hFTEwgLXFtYXhtZW09MTYwMDAgJChLRkxBR1MpIiBcCisJIkxOS0ZM QUdTID0gLWJJOi9saWIvcHNlLmV4cCIgIkxJQlM9LWxjdXJzZXMgLWxvZG0gLWxjZmciCisJLUBl Y2hvICIbXTA7a2VybWl0IGRvbmUHXGMiCisKKyNBSVggNC4yIC0tIFVzZSB0aGlzIHRhcmdldCBp ZiB0aGUgcmVndWxhciAibWFrZSBhaXgiIGRvZXNuJ3Qgd29yay4KKyMgTXVzdCBoYXZlIENLX05F V1RFUk0gb3IgZWNob2luZyBpcyBsb3N0IGFmdGVyIGN1cnNlcy4KKyMgQWRkIC1iYmlndG9jIGlu IGNhc2UgbGQgZmFpbHMgd2l0aCBUT0Mgb3ZlcmZsb3cuICBBcyBvZiBDLUtlcm1pdCA4LjAuMjEy LAorIyBhbGwgQUlYIGJ1aWxkcyA0LjIgYW5kIGxhdGVyIGluY2x1ZGUgbGFyZ2UgZmlsZSBzdXBw b3J0Lgorb2xkYWl4NDI6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0g QUlYIDQuMiBvciBoaWdoZXIuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtREFJWFJTIC1EQUlYNDEgLURBSVg0MiAtRFNWUjQgLURTVEVS TUlPWCAtRFRDUFNPQ0tFVCBcCisJLURESVJFTlQgLURDS19BTlNJQyAtRENMU09QTiAtRENLX0NV UlNFUyAtRENLX05FV1RFUk0gLURGTkZMT0FUIFwKKwktRFNFTEVDVCAtRFNFTEVDVF9IIC1ETk9H RVRVU0VSU0hFTEwgLXFtYXhtZW09MTYwMDAgLU8gXAorCS1EQ0tDUFU9XFxcImB1bmFtZSAtcGBc XFwiIFwKKwktREhFUkFMRD1cXFwiXCBJQk1cIEFJWFwgYHVuYW1lIC12YC5gdW5hbWUgLXJgXFxc IiBcCisJLURfTEFSR0VfRklMRVMgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlM9LWxj dXJzZXMgLWxtIgorCisjQUlYIDQuMyAtIFVzZSB0aGlzIHRhcmdldCBpZiB0aGUgcmVndWxhciAi bWFrZSBhaXgiIGRvZXNuJ3Qgd29yay4KKyMgTXVzdCBOT1QgaGF2ZSBDS19ORVdURVJNIG9yIGVs c2UgQy1LZXJtaXQgaGFuZ3MgYWZ0ZXIgY3Vyc2VzLgorIyAtYmJpZ3RvYyBuZWVkZWQgb24gc29t ZSBzeXN0ZW1zIGJ1dCBub3Qgb3RoZXJzIHRvIGF2b2lkIFRPQyBvdmVyZmxvdy4KKyMgIm1hbiBs ZCIgc2F5cyAtYmJpZ3RvYyBtYWtlcyBwcm9ncmFtIHJ1biBzbG93ZXIuCitvbGRhaXg0MzoKKwlA ZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBBSVggNC4zIG9yIGhpZ2hlci4u LgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9 IC1EQUlYUlMgLURBSVg0MSAtREFJWDQzIC1EU1ZSNCAtRFNURVJNSU9YIC1EVENQU09DS0VUIFwK KwktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VMRUNUIC1EU0VM RUNUX0ggXAorCS1ERk5GTE9BVCAtRE5PR0VUVVNFUlNIRUxMIC1xbWF4bWVtPTE2MDAwIC1iYmln dG9jIC1PICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUz0tbGN1cnNlcyAtbG0i CisKKyNBSVggNC4zIHdpdGggSUJNIFguMjUuCithaXg0M3gyNToKKwlAZWNobyAiTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDQuMyB3aXRoIFguMjUuLi4iCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURBSVhSUyAtREFJ WDQxIC1EQUlYNDMgLURTVlI0IC1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgXAorCS1ERElSRU5UIC1E Q0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURG TkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgLURJQk1YMjUgXAorCS1xbWF4bWVtPTE2MDAwIC1iYmln dG9jIC1PICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUyA9IC1iSTovbGliL3BzZS5leHAiICJMSUJT PS1sY3Vyc2VzIC1sb2RtIC1sY2ZnIC1sbSIKKworI0FJWCA0LjMgLS0gTXVzdCBOT1QgaGF2ZSBD S19ORVdURVJNIG9yIGVsc2UgQy1LZXJtaXQgaGFuZ3MgYWZ0ZXIgY3Vyc2VzLgorIyAtbW1pbmlt YWwtdG9jIG5lZWRlZCBvbiBzb21lIHN5c3RlbXMgYnV0IG5vdCBvdGhlcnMgdG8gYXZvaWQgVE9D IG92ZXJmbG93LgorIyAibWFuIGxkIiBzYXlzIC1iYmlndG9jIG1ha2VzIHByb2dyYW0gcnVuIHNs b3dlci4KK2FpeDQzZzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBB SVggNC4zIGdjYy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g Q0M9Z2NjIENDMj1nY2MgXAorCSJDRkxBR1M9IC1tbWluaW1hbC10b2MgLWcgLU8gLURBSVhSUyAt REFJWDQxIC1EQUlYNDMgLURTVlI0IFwKKwktRERJUkVOVCAtRENLX0FOU0lDIC1EQ0xTT1BOIC1E Q0tfQ1VSU0VTIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAorCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQg LURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIiBcCisJIkxJQlM9LWxjdXJzZXMg LWxtIgorCithaXg0M2djYzoKKwkkKE1BS0UpIGFpeDQzZworCisjIE5vbmUgb2YgdGhlIGZvbGxv d2luZyBhaXg0M2djYyBhdHRlbXB0cyB3b3JrIG9uIGEgZ2NjLW9ubHkgQUlYIDQuMy4zIGJveC4K KyMgSXQganVzdCBwbGFpbiBjYW4ndCBmaW5kIHRoZSBtYXRoIHJvdXRpbmVzIChmbW9kLCBwb3cs IGV4cCwgc3FydCwgbG9nMTAsLi4uKQorIyBXaGljaCBpcyBvZGQgYmVjYXVzZSBubSAvdXNyL2xp Yi9saWJDLmEgZmluZHMgdGhlbS4uLgorCisjaW4gY2FzZSBhaXg0M2djYyBjYW4ndCBmaW5kIGl0 cyBtYXRoIGxpYnJhcnkuLi4KK2FpeDQzZ2NjeDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIElCTSBBSVggNC4zIGdjYy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAorCSJDRkxBR1M9IC1tbWluaW1hbC10b2Mg LWcgLU8gLURBSVhSUyAtREFJWDQxIC1EQUlYNDMgLURTVlI0IFwKKwktRERJUkVOVCAtRENLX0FO U0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAorCS1EU1RFUk1J T1ggLURUQ1BTT0NLRVQgLURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIiBcCisJ IkxJQlM9IC1ML3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjMuMS4wLzIu OTUuMiBcCisJLWxjdXJzZXMgLWJsb2FkbWFwIC1ibm9xdWlldCIKKworI2luIGNhc2UgYWl4NDNn Y2N4IGNhbid0IGZpbmQgaXRzIG1hdGggbGlicmFyeS4uLgorYWl4NDNnY2N5OgorCUBlY2hvIE1h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjMgZ2NjLi4uCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFH Uz0gLW1taW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAor CS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxF Q1RfSCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVM TCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxjdXJzZXMgLWJsb2FkbWFwIC1ibm9xdWlldCIKKwor I2luIGNhc2UgYWl4NDNnY2N4IGNhbid0IGZpbmQgaXRzIG1hdGggbGlicmFyeS4uLgorYWl4NDNn Y2N6OgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSUJNIEFJWCA0LjMgZ2Nj Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0My PWdjYyBcCisJIkNGTEFHUz0gLW1taW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURB SVg0MyAtRFNWUjQgXAorCS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMg LURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQg LUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLUwuIC1sY3Vyc2VzIC1ibG9h ZG1hcCAtYm5vcXVpZXQiCisKKyNBSVggNC4zIHdpdGggTUlUIEtlcmJlcm9zIDUgYW5kIEtlcmJl cm9zIDQgY29tcGF0aWJpbGl0eSBtb2RlCisjIE11c3QgTk9UIGhhdmUgQ0tfTkVXVEVSTSBvciBl bHNlIEMtS2VybWl0IGhhbmdzIGFmdGVyIGN1cnNlcy4KKyMgLW1taW5pbWFsLXRvYyBuZWVkZWQg b24gc29tZSBzeXN0ZW1zIGJ1dCBub3Qgb3RoZXJzIHRvIGF2b2lkIFRPQyBvdmVyZmxvdy4KKyMg Im1hbiBsZCIgc2F5cyAtYmJpZ3RvYyBtYWtlcyBwcm9ncmFtIHJ1biBzbG93ZXIuCithaXg0M2dj YytrcmI1K2tyYjQ6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlY IDQuMyBvciBoaWdoZXIgdy9LZXJiZXJvcy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAorCSJDRkxBR1M9IC1tbWluaW1hbC10b2Mg LWcgLU8gLURBSVhSUyAtREFJWDQxIC1EQUlYNDMgLURTVlI0IFwKKwktRERJUkVOVCAtRENLX0FO U0lDIC1EQ0xTT1BOIC1EQ0tfQ1VSU0VTIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAorCS1EU1RFUk1J T1ggLURUQ1BTT0NLRVQgLURGTkZMT0FUIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EQ0tfQVVUSEVO VElDQVRJT04gLURDS19LRVJCRVJPUyAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKKwktRENLX0VO Q1JZUFRJT04gLURDS19ERVMgLWZ1bnNpZ25lZC1jaGFyICQoSzVJTkMpICQoSzVJTkMpL2tyYjUg XAorCSQoS0ZMQUdTKSIgXAorCSJMSUJTPSQoSzVMSUIpIC1sY3Vyc2VzIC1sbSAtbGtyYjQgLWxk ZXM0MjUgLWxrcmI1IFwKKwktbGNvbV9lcnIgLWxrNWNyeXB0byAtbGNyeXB0IC1sZ3NzYXBpX2ty YjUiCisKKyNBSVggNC4zIHdpdGggTUlUIEtlcmJlcm9zIDUsIEtlcmJlcm9zIDQgY29tcGF0aWJp bGl0eSBtb2RlIGFuZCBPcGVuU1NMCisjIE11c3QgTk9UIGhhdmUgQ0tfTkVXVEVSTSBvciBlbHNl IEMtS2VybWl0IGhhbmdzIGFmdGVyIGN1cnNlcy4KKyMgLW1taW5pbWFsLXRvYyBuZWVkZWQgb24g c29tZSBzeXN0ZW1zIGJ1dCBub3Qgb3RoZXJzIHRvIGF2b2lkIFRPQyBvdmVyZmxvdy4KKyMgIm1h biBsZCIgc2F5cyAtYmJpZ3RvYyBtYWtlcyBwcm9ncmFtIHJ1biBzbG93ZXIuCithaXg0M2djYytr cmI1K2tyYjQrb3BlbnNzbDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElC TSBBSVggNC4zIG9yIGhpZ2hlciB3L0tlcmJlcm9zLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUz0gLW1taW5pbWFs LXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAtRFNWUjQgXAorCS1ERElSRU5UIC1E Q0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURT VEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCBcCisJLURDS19B VVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1E Q0tfRU5DUllQVElPTiAtRENLX0RFUyAtRENLX0NBU1QgLURMSUJERVMgLURDS19TU0wgXAorCS1m dW5zaWduZWQtY2hhciAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1NMSU5DKSAkKEtGTEFHUyki IFwKKwkiTElCUz0kKEs1TElCKSAkKFNTTExJQikgLWxzc2wgLWxjcnlwdG8gXAorCS1sY3Vyc2Vz IC1sbSAtbGtyYjQgLWxkZXM0MjUgLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQg XAorCS1sZ3NzYXBpX2tyYjUiCisKK2FpeDQzZ2NjK29wZW5zc2w6CisJQGVjaG8gTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBJQk0gQUlYIDQuMyBvciBoaWdoZXIgdy9PcGVuU1NMLi4uCisJ JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBc CisJIkNGTEFHUz0gLW1taW5pbWFsLXRvYyAtZyAtTyAtREFJWFJTIC1EQUlYNDEgLURBSVg0MyAt RFNWUjQgXAorCS1ERElSRU5UIC1EQ0tfQU5TSUMgLURDTFNPUE4gLURDS19DVVJTRVMgLURTRUxF Q1QgLURTRUxFQ1RfSCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtREZORkxPQVQgLUROT0dF VFVTRVJTSEVMTCBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtZnVuc2lnbmVkLWNo YXIgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSQoU1NMTElCKSAtbHNzbCAtbGNyeXB0 byAtbGN1cnNlcyAtbG0gLWxjcnlwdCIKKworYWl4NDRnY2M6CisJJChNQUtFKSBhaXg0M2cgIktG TEFHUz0tREFJWDQ0ICQoS0ZMQUdTKSIgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKwor YWl4NDVnY2M6CisJJChNQUtFKSBhaXg0M2cgIktGTEFHUz0tREFJWDQ1ICQoS0ZMQUdTKSIgXAor CUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworYWl4NTBnY2M6CisJJChNQUtFKSBhaXg0M2cg IktGTEFHUz0tREFJWDUwICQoS0ZMQUdTKSIgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0K KworYWl4NTFnY2M6CisJJChNQUtFKSBhaXg0M2cgIktGTEFHUz0tREFJWDUxICQoS0ZMQUdTKSIg XAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworYWl4NTJnY2M6CisJJChNQUtFKSBhaXg0 M2cgIktGTEFHUz0tREFJWDUyICQoS0ZMQUdTKSIgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0KKworYWl4NTNnY2M6CisJJChNQUtFKSBhaXg0M2cgIktGTEFHUz0tREFJWDUzICQoS0ZMQUdT KSIgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI0J1bGwgRFBYLzIgd2l0aCBCT1Mv WCwgbGlrZSBBSVgvUlM2MDAwCitidWxsZHB4MjoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIEJ1bGwgRFBYLzIgd2l0aCBCT1MvWC4uLgorCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtRENLX0FO U0lDIC1EQ0tUWVBfSD08c3lzL3R5cGVzLmg+IFwKKwktRENLX1BPTEwgLUROT0dFVFVTRVJTSEVM TCAtRENMU09QTiAtRE5PTEVBUk4gLU8gJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLXMiCisK KyNTdW4gVU5JWCAzLjUgd2l0aCBnY2MgMi4zLjMuCitzdW5vczNnY2M6CisJQGVjaG8gTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW4gVU5JWCAzLjUgYW5kIGdjYy4uLgorCSQoTUFLRSkg eGVybWl0IENDPWdjYyBDQzI9Z2NjIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCUNGTEFH Uz0iLWcgLU8gLURCU0Q0IC1EVENQU09DS0VUICQoS0ZMQUdTKSIKKworI1N1bk9TIHZlcnNpb24g NC4wLCBCU0QgZW52aXJvbm1lbnQsIGhhcyBzYXZlZCBvcmlnaW5hbCBldWlkIGZlYXR1cmUuCisj IEFkZCAiQ0M9L3Vzci91Y2IvY2MgQ0MyPS91c3IvdWNiL2NjIiBpZiBuZWNlc3NhcnkuCisjIE5v dGU6IEluY2x1ZGluZyBVbmljb2RlIGNyYXNoZXMgdGhlIGFzc2VtYmxlciBpbiBja2N1bmkuYy4K K3N1bm9zNDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMCwg QlNEIGVudmlyb25tZW50Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJIkNGTEFHUz0gLU8gLURTVU5PUzQgLURGTkZMT0FUIC1ETk9VTklDT0RFICQoS0ZM QUdTKSIgXAorCSJMSUJTPS1sbSIKKworI0FzIGFib3ZlLCBidXQgd2l0aCBTdW5MaW5rIFguMjUg c3VwcG9ydAorc3Vub3M0eDI1OgorCUBlY2hvIFN1bkxpbmsgWC4yNSBzdXBwb3J0CisJJChNQUtF KSAiTUFLRT0kKE1BS0UpIiBzdW5vczQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktG TEFHUz0kKEtGTEFHUykgLURGTkZMT0FUIC1EU1VOWDI1IiBcCisJIkxJQlM9LWxtIgorCisjU1VO IE9TIHZlcnNpb24gNC4xIC0gNC4xLjMsIEJTRCBlbnZpcm9ubWVudCwgaGFzIHNhdmVkIG9yaWdp bmFsIGV1aWQgZmVhdHVyZS4KKyNVc2VzIEhvbmV5IERhbkJlciBVVUNQLiAgUmVxdWlyZXMgcHJl c2VuY2Ugb2YgL3Vzci9zcG9vbC9sb2NrcyBkaXJlY3RvcnkuCisjIC92YXIvc3Bvb2wvIHNob3Vs ZCBiZSBhIHN5bWJvbGljIGxpbmsgdG8gIC91c3Ivc3Bvb2wvLgorIyAuLi4gb3IgJ21ha2UgeGVy bWl0ICJDQz0gL3Vzci91Y2IvY2MgIiBcJworIyBOb3RlOiAieGVybWl0IiBtZWFucyB1c2UgdGhl IHNlbGVjdCgpIHZlcnNpb24gb2YgdGhlIENPTk5FQ1QgbW9kdWxlLgorIyBOb3RlIGZvciBDLUtl cm1pdCA5LjA6IFJlcG9ydGVkbHkgJ3lvdSBuZWVkIHRvIG1vZGlmeSB0aGUgc3lzL2lvY3RsLmgK KyMgaW5jbHVkZSBmaWxlLCBpLmUuIGNvbW1lbnQgb3V0IHRoZSAic3RydWN0IHdpbnNpemUiIGFu ZCAic3RydWN0CisjIHR0eXNpemUiLiBPdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBhIGNvbmZsaWN0 IHdpdGggc3lzL3R0eWNvbS5oIChpbmNsdWRlZCBieQorIyB0ZXJtaW9zLmgpIHdoaWNoIGFsc28g ZGVjbGFyZXMgdGhlc2Ugc3RydWN0cy4gQnV0IHlvdSBuZWVkIGJvdGggaW5jbHVkZXMuJworc3Vu b3M0MToKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSAvIEJT RC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxB R1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROT1VOSUNPREUgJChLRkxBR1MpIiBcCisJIkxJ QlM9ICQoTElCUykgLWxyZXNvbHYgLWxtIgorCisjQXMgYWJvdmUsIGJ1dCBjb21waWxlZCB3aXRo IGdjYy4gIEdpdmVzIDI0LTMySyBzaXplIHJlZHVjdGlvbgorI3dpdGggZ2NjIDIuMSBvciAyLjIu Mi4gIENBVVRJT046IG1ha2Ugc3VyZSAiZml4aW5jbHVkZXMiIGhhcyBiZWVuIHJ1biBvbgorI3Ro ZSBpbmNsdWRlIGZpbGVzLCBzbyBnY2MncyBhcmUgaW4gc3luYyB3aXRoIHRoZSByZWd1bGFyIFN1 biBvbmVzLgorI1RoaXMgaW5jbHVkZXMgdGhlIGN1cnNlcyBsaWJyYXJ5IGZvciBmdWxsc2NyZWVu IGZpbGUgdHJhbnNmZXIgZGlzcGxheS4KKyNOREdQV05BTSBuZWVkZWQgZm9yIEdDQyAyLjUuNiwg bm90IG5lZWRlZCBmb3IgMi40LjAsIGJ1dCBpdCdzIHVuY2VydGFpbgorI3doZXRoZXIgaXQgd2ls bCBkbyBhbnkgaGFybSBmb3IgMi40LjAgY29tcGlsYXRpb24gLS0gaWYgc28sIHJlbW92ZSBpdC4K K3N1bm9zNDFnY2M6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0 LjEgd2l0aCBnY2MgYW5kIGN1cnNlcy4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAorCSJDRkxBR1M9IC1PIC1EU1VOT1M0 MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENLX0NVUlNFUyAtREZORkxPQVQgXAorCS1mdW5zaWdu ZWQtY2hhciAkKEtGTEFHUykiICJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxyZXNvbHYgLWxt IgorCisjIEFzIGFib3ZlLCBidXQgd2l0aG91dCAtZnVuc2lnbmVkLWNoYXIgc28gSSBjYW4gc2Vl IHRoZSB3YXJuaW5ncyB0aGF0CisjIGV2ZXJ5Ym9keSBlbHNlIHdpbGwgZ2V0IHdoZW4gdGhleSB1 c2UgQU5TSSBjb21waWxlcnMgdGhhdCBkb24ndCBoYXZlIHRoaXMKKyMgb3B0aW9uIChnc2MgPSBn Y2Mgc2lnbmVkIGNoYXIpLgorc3Vub3M0MWdzYzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFN1bk9TIDQuMSB3aXRoIGdjYyBhbmQgY3Vyc2VzLi4uCisJJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCisJIkNG TEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5G TE9BVCBcCisJJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIC1scmVzb2x2IC1s bSIKKworI0FzIGFib3ZlIGJ1dCB3aXRoIGNrdWNvbi5jIHJhdGhlciB0aGFuIGNrdWNucy5jIChm b3IgdGVzdGluZyBvbmx5KQorc3Vub3M0MWdjY2Zvcms6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgd2l0aCBnY2MgYW5kIGN1cnNlcy4uLgorCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAor CSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENLX0NVUlNFUyAt REZORkxPQVQgXAorCS1ETk9MRUFSTiAtZnVuc2lnbmVkLWNoYXIgJChLRkxBR1MpIiBcCisJIkxJ QlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0iCisKKyNhcyBhYm92ZSBidXQgY29u ZmlndXJlZCBmb3IgS2VyYmVyb3MgSVYKK3N1bm9zNDFnY2Mra3JiNDoKKwlAZWNobyBNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSwgZ2NjLCBjdXJzZXMsIGtyYjQuLi4KKwkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBn Y2MiIFwKKwkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURIREJVVUNQIC1ETkRHUFdOQU0gLURDS19D VVJTRVMgLURGTkZMT0FUIFwKKwktRFRDUFNPQ0tFVCAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tf S0VSQkVST1MgIC1ES1JCNCBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIC1EQ0tfQ0FTVCAt REJJR0JVRk9LIC1mdW5zaWduZWQtY2hhciBcCisJJChLNElOQykgJChLRkxBR1MpIiBcCisJIkxJ QlM9ICQoSzRMSUIpIC1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0gLWxrcmIgLWxkZXMi CisKKyNhcyBhYm92ZSBidXQgY29uZmlndXJlZCBmb3IgU1NML1RMUworc3Vub3M0MWdjYytvcGVu c3NsOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xLCBnY2Ms IGN1cnNlcywgc3NsLi4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSAiQ0M9IGdjYyIgIkNDMj0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVD UCAtRE5ER1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBcCisJLURDS19BVVRIRU5USUNBVElP TiAtZnVuc2lnbmVkLWNoYXIgXAorCS1EQ0tfU1NMIC1EVENQU09DS0VUIC1EQklHQlVGT0sgJChT U0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKFNTTExJQikgLWxjdXJzZXMgLWx0ZXJtY2Fw IC1scmVzb2x2IC1sbSAtbHNzbCAtbGNyeXB0byIKKworI2FzIGFib3ZlIGJ1dCBjb25maWd1cmVk IGZvciBLZXJiZXJvcyBJViBhbmQgU1NML1RMUworc3Vub3M0MWdjYytrcmI0K29wZW5zc2w6CisJ QGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEsIGdjYywgY3Vyc2Vz LCBrcmI0Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0M9 IGdjYyIgIkNDMj0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLURTVU5PUzQxIC1ESERCVVVDUCAtRE5E R1BXTkFNIC1EQ0tfQ1VSU0VTIC1ERk5GTE9BVCBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENL X0tFUkJFUk9TIC1ES1JCNCAtRENLX0VOQ1JZUFRJT04gLURDS19ERVMgXAorCS1EQ0tfQ0FTVCAt RENLX1NTTCAtRExJQkRFUyAtRFRDUFNPQ0tFVCAtREJJR0JVRk9LIC1mdW5zaWduZWQtY2hhciBc CisJJChLNElOQykgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKEs0TElCKSAkKFNT TExJQikgXAorCS1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0gLWxrcmIgLWxzc2wgLWxj cnlwdG8iCisKKyNhcyBhYm92ZSBidXQgY29uZmlndXJlZCBmb3IgS2VyYmVyb3MgSVYgYW5kIFpM SUIgZW5hYmxlZCBTU0wvVExTCitzdW5vczQxZ2NjK2tyYjQrb3BlbnNzbCt6bGliOgorCUBlY2hv IE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xLCBnY2MsIGN1cnNlcywga3Ji NC4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2Mi ICJDQzI9IGdjYyIgXAorCSJDRkxBR1M9IC1PIC1EU1VOT1M0MSAtREhEQlVVQ1AgLUROREdQV05B TSAtRENLX0NVUlNFUyAtREZORkxPQVQgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJC RVJPUyAtREtSQjQgLURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIFwKKwktRENLX0NBU1QgLURDS19T U0wgLURMSUJERVMgLURUQ1BTT0NLRVQgLURCSUdCVUZPSyAtZnVuc2lnbmVkLWNoYXIgXAorCS1E WkxJQiAkKEs0SU5DKSAkKFNTTElOQykgXAorCSQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKEs0TElC KSAkKFNTTExJQikgXAorCS1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAtbG0gLWxrcmIgLWxz c2wgLWxjcnlwdG8gLWx6IgorCisjYXMgYWJvdmUgYnV0IGNvbmZpZ3VyZWQgZm9yIEtlcmJlcm9z IElWIGFuZCBTUlAgYW5kIFpMSUIgZW5hYmxlZCBTU0wvVExTCitzdW5vczQxZ2NjK2tyYjQrc3Jw K29wZW5zc2wremxpYjoKKwlAZWNobyAiQy1LZXJtaXQgJChDS1ZFUikgU3VuT1MgNC4xOiBnY2Ms Y3Vyc2VzLGtyYjQsc3JwLHNzbCx6bGliLi4uIgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gIkNDPSBnY2MiICJDQzI9IGdjYyIgXAorCSJDRkxBR1M9IC1PIC1EU1VO T1M0MSAtREhEQlVVQ1AgLUROREdQV05BTSAtRENLX0NVUlNFUyAtREZORkxPQVQgXAorCS1EQ0tf QVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAtREtSQjQgLURDS19FTkNSWVBUSU9OIC1EQ0tf REVTIFwKKwktRENLX0NBU1QgLURDS19TU0wgLURMSUJERVMgLURUQ1BTT0NLRVQgLURCSUdCVUZP SyAtZnVuc2lnbmVkLWNoYXIgXAorCS1EWkxJQiAtRENLX1NSUCAkKEs0SU5DKSAkKFNSUElOQykg JChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKEs0TElCKSAkKFNSUExJQikgJChTU0xM SUIpIFwKKwktbGN1cnNlcyAtbHRlcm1jYXAgLWxyZXNvbHYgLWxtIC1sa3JiIC1sa3J5cHRvIFwK KwktbHNycCAtbHNzbCAtbGNyeXB0byAtbHoiCisKKyNhcyBhYm92ZSBidXQgY29uZmlndXJlZCBm b3IgS2VyYmVyb3MgSVYgYW5kIFNSUCBhbmQgWkxJQiBlbmFibGVkIFNTTC9UTFMKK3N1bm9zNDFn Y2Mrc3JwK29wZW5zc2wremxpYjoKKwlAZWNobyAiQy1LZXJtaXQgJChDS1ZFUikgU3VuT1MgNC4x OiBnY2MsY3Vyc2VzLHNycCxzc2wsemxpYi4uLiIKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtTyAtRFNV Tk9TNDEgLURIREJVVUNQIC1ETkRHUFdOQU0gLURDS19DVVJTRVMgLURGTkZMT0FUIFwKKwktRENL X0FVVEhFTlRJQ0FUSU9OIC1EQ0tfRU5DUllQVElPTiAtRENLX0RFUyBcCisJLURDS19DQVNUIC1E Q0tfU1NMIC1ETElCREVTIC1EVENQU09DS0VUIC1EQklHQlVGT0sgLWZ1bnNpZ25lZC1jaGFyIFwK KwktRFpMSUIgLURDS19TUlAgJChTUlBJTkMpICQoU1NMSU5DKSBcCisJJChLRkxBR1MpIiBcCisJ IkxJQlM9ICQoU1JQTElCKSAkKFNTTExJQikgXAorCS1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29s diAtbG0gLWxrcnlwdG8gLWxzcnAgLWxzc2wgLWxjcnlwdG8gLWx6ICIKKworI1NVTk9TIDQuMSBh cyBzdW5vczQxIGFib3ZlLCBidXQgYWxzbyB3aXRoIGN1cnNlcyBzdXBwb3J0CitzdW5vczQxYzoK KwlAZWNobyBDdXJzZXMgc3VwcG9ydAorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3Vub3M0MSBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPSQoS0ZMQUdTKSAtRENLX0NVUlNF UyAtREZORkxPQVQgIiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI0FzIFN1bk9T IDQuMS54LCBnY2MsIGNvbmZpZ3VyZWQgYXMgSW50ZXJuZXQgS2VybWl0IFNlcnZlci4KKyMgLiBO T0xPQ0FMIHJlbW92ZXMgY2FwYWJpbGl0eSB0byBtYWtlIGNvbm5lY3Rpb25zCisjIC4gVE5DT0RF IGFsbG93cyBzZXJ2ZXItc2lkZSBUZWxuZXQgbmVnb3RpYXRpb24uCisjIC4gdXNlZCB0byBpbmNs dWRlIC1scHdlbnQsIHdoeT8KKyMgLiB1c2VkIHRvIGluY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYiAt bG0sIHdoeT8KK3N1bm9zNDFnaWtzOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgU3VuT1MgNC4xIHdpdGggZ2NjIGZvciBJS1MuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9ICJDQz0gZ2NjIiAiQ0MyPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtTyAt RFNVTk9TNDEgLUROREdQV05BTSAtREZORkxPQVQgXAorCS1ETk9MT0NBTCAtRFRDUFNPQ0tFVCAt RFROQ09ERSAtRE5PUFVTSCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxtIC1scmVzb2x2IgorCisj U1VOT1MgNC4xIHdpdGggU3VuTGluayBYLjI1IHN1cHBvcnQKK3N1bm9zNDF4MjU6CisJQGVjaG8g U3VuTGluayBYLjI1IHN1cHBvcnQKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURIREJVVUNQ IC1ETk9VTklDT0RFIC1ERk5GTE9BVCAtRFNVTlgyNSBcCisJLUROT0xFQVJOICQoS0ZMQUdTKSIg IkxJQlM9ICQoTElCUykgLWxyZXNvbHYgLWxtIgorCisjU1VOT1MgNC4xIHdpdGggU3VuTGluayBY LjI1IHN1cHBvcnQgYW5kIGN1cnNlcworc3Vub3M0MXgyNWM6CisJQGVjaG8gU3VuTGluayBYLjI1 IHN1cHBvcnQgKyBjdXJzZXMKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHdlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURIREJVVUNQIC1E Tk9VTklDT0RFIC1ERk5GTE9BVCAtRFNVTlgyNSBcCisJLURDS19DVVJTRVMgLUROT0xFQVJOICQo S0ZMQUdTKSIgXAorCSJMSUJTPSAkKExJQlMpIC1sY3Vyc2VzIC1sdGVybWNhcCAtbHJlc29sdiAt bG0iCisKKyNTVU4gd2l0aCBTb2xhcmlzIDIuMCA9IFN1bk9TIDUuMC4KKyNNb3N0bHkgdGhlIHNh bWUgYXMgU3lzdGVtIFYgUjQuICBEb24ndCB1c2UgdGhpcyB3aXRoIGxhdGVyIFNvbGFyaXMgdmVy c2lvbnMuCitzb2xhcmlzMjA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig U3VuIHdpdGggU29sYXJpcyAyLjAgYW5kIGN1cnNlcy4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0IC1EU09MQVJJUyAt RERJUkVOVCAtREhEQlVVQ1AgLURTVEVSTUlPWCBcCisJLURUQ1BTT0NLRVQgLURDS19DVVJTRVMg LURGTkZMT0FUIC1EQ0tfUE9MTCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wg LWxjdXJzZXMgLWx0ZXJtbGliIC1sbSIgIkxOS0ZMQUdTID0gLXMiCisKKyNTVU4gd2l0aCBTb2xh cmlzIDIuMC4KKyNBcyBhYm92ZSwgYnV0IGJ1aWx0IHdpdGggdGhlIGdjYyBjb21waWxlciBmcm9t IHRoZSBDeWdudXMgQ0QtUk9NLgorc29sYXJpczIwZzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTdW4gU29sYXJpcyAyLjAsIGdjYywgYW5kIGN1cnNlcy4uJworCSQoTUFL RSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNW UjQgLURTT0xBUklTIC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJNSU9YIFwKKwktRFRDUFNPQ0tF VCAtRENLX0NVUlNFUyAtRENLX1BPTEwgLURGTkZMT0FUICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAt bHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1saWIgLWxtIiAiTE5LRkxBR1MgPSAtcyIgXAor CUNDPS9vcHQvY3lnbnVzLXNvbDItMS4xL2Jpbi9nY2MgQ0MyPS9vcHQvY3lnbnVzLXNvbDItMS4x L2Jpbi9nY2MKKworI1N1bk9TIDUuMSA9IFNvbGFyaXMgMi4xLgorI05PVEU6IEEgQyBjb21waWxl ciBpcyBubyBsb25nZXIgYnVuZGxlZCB3aXRoIFN1bk9TIDUuMSwgc28gdG8gY29tcGlsZSBDCisj cHJvZ3JhbXMsIHlvdSBtaWdodCBoYXZlIHRvIGNoYW5nZSB5b3VyIFBBVEggdG8gaW5jbHVkZSB0 aGUgZGlyZWN0b3J5CisjL3Vzci9jY3MvYmluIEFGVEVSIHRoZSBkaXJlY3RvcnkgY29udGFpbmlu ZyB0aGUgY29tcGlsZXIuICBTdW5QUk8gQyBpcworI2luc3RhbGxlZCBieSBkZWZhdWx0IGluIC9v cHQvU1VOV3Nwcm8vYmluLiAgU28gYSBzYW1wbGUgUEFUSCBtaWdodCBiZToKKyMKKyMgL3Vzci9s b2NhbC9iaW46L3Vzci9iaW46L29wdC9TVU5Xc3Byby9iaW46L3Vzci9jY3MvYmluOlwKKyMgL3Vz ci91Y2I6L3Vzci9zYmluOi9zYmluOi4KKyMKKyMgb3I6CisjCisjIC91c3Ivb3Blbndpbi9iaW46 L2V4cG9ydC9ob21lL1NVTldzcHJvL2JpbjovdXNyL2Njcy9iaW46L3Vzci9zYmluOi91c3IvYmlu LgorIworI05PVEUgMjogQ29tcGlsYXRpb24gd2l0aCB0aGUgQXBvZ2VlIEMgY29tcGlsZXIgKGFw Y2MpIG1pZ2h0IG5vdCB3b3JrLAorI2JlY2F1c2UgaXQgcmVmdXNlcyB0byBhbGxvdyAiLVVzdW4i LiAgUmVwb3J0ZWRseSwgbmV3ZXIgcmVsZWFzZXMgb2YgYXBjYworIyhzdWNoIGFzIDEuMi4xNykg d29yayBPSywgdXNlOiAibWFrZSAtZSBzdW5vczUxIENDPWFwY2MgQ0MyPWFwY2MiLgorc29sYXJp czIxOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDUueC4uLi4n CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9 IC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURESVJFTlQgLURIREJVVUNQIC1ERk5GTE9BVCBc CisJLURTRUxFQ1QgLUROT0RFQlVHIC1EU1RFUk1JT1ggJChLRkxBR1MpIiAiTElCUyA9IC1sbSIg IkxOS0ZMQUdTID0gLXMiCisKKyNTb2xhcmlzIDIuMCAtIDIuNCwgU3VuUHJvIGNvbXBpbGVyLCBp bmNsdWRlcyBjdXJzZXMgYW5kIFRDUC9JUC4KKyNXaGVuIHVzaW5nIFNVTldzcHJvIENDIDIuMC4x IHVuZGVyIFNvbGFyaXMgMi4zLCBiZSBzdXJlIGFsbCBjYyBwYXRjaGVzCisjYXJlIGFwcGxpZWQs IG90aGVyd2lzZSBjb3JydXB0IG9yIHRydW5jYXRlZCBvYmplY3QgZmlsZXMgY2FuIHJlc3VsdC4K KyNUbyBidWlsZCwgc2V0IHlvdXIgUEFUSCBhcyBmb2xsb3dzOgorIyAgL3Vzci9sb2NhbC9iaW46 L3Vzci9iaW46L29wdC9TVU5Xc3Byby9iaW46L3Vzci9jY3MvYmluOlwKKyMgIC91c3IvdWNiOi91 c3Ivc2Jpbjovc2JpbjouCisjIG9yIChkZXBlbmRpbmcgb24gd2hlcmUgdGhlIGNvbXBpbGVyIGhh cyBiZWVuIGluc3RhbGxlZCk6CisjICAvdXNyL29wZW53aW4vYmluOi9leHBvcnQvaG9tZS9TVU5X c3Byby9iaW46L3Vzci9jY3MvYmluOi91c3Ivc2JpbjovdXNyL2Jpbi4KKyNGb3IgYWRkaXRpb25h bCBvcHRpbWl6YXRpb24gdHJ5IHVzaW5nICItZmFzdCAteE80IC14ZGVwZW5kIi4KK3NvbGFyaXMy eDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIueCB3aXRo IFN1blBybyBjYy4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTID0gLU8gLVVzdW4gLWkgLURTVlI0IC1ERElSRU5UIC1EU09MQVJJUyAtREhE QlVVQ1AgLURGTkZMT0FUIFwKKwktRFNFTEVDVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURT VEVSTUlPWCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlM9 IC1sdGVybWxpYiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYiCisKKyNhcyBhYm92ZSBidXQg Y29uZmlndXJlZCBmb3IgS2VyYmVyb3MgSVYKK3NvbGFyaXMyeCtrcmI0OgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54LCBTdW5Qcm8gY2MsIGtyYjQuLi4n CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9 IC1PIC1Vc3VuIC1pIC1EU1ZSNCAtRERJUkVOVCAtRFNPTEFSSVMgLURIREJVVUNQIC1ERk5GTE9B VCBcCisJLURTRUxFQ1QgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1EU1RFUk1JT1ggLURUQ1BT T0NLRVQgIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgIC1ES1JCNCBcCisJ LURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIC1EQ0tfQ0FTVCAkKEs0SU5DKSAkKEtGTEFHUykiIFwK KwkiTE5LRkxBR1MgPSAtcyIgXAorCSJMSUJTPSAkKEs0TElCKSAtbHRlcm1saWIgLWxzb2NrZXQg LWxuc2wgLWxtIC1scmVzb2x2IC1sa3JiIC1sZGVzIgorCisjQy1LZXJtaXQgZm9yIFNvbGFyaXMg Mi4wLTIuNCBjb21waWxlZCB3aXRoIGdjYywgaW5jbHVkZXMgY3Vyc2VzIGFuZCBUQ1AvSVAuCisj Q2hhbmdlIC1PMiB0byAtTyBpZiAtTzIgZ2l2ZXMgdHJvdWJsZS4KKyNSZW1vdmUgLVVzdW4gaWYg aXQgY2F1c2VzIHRyb3VibGUuCisjWW91ciBQQVRIIHNob3VsZCBzdGFydCB3aXRoIHNvbWV0aGlu ZyBsaWtlOgorIyAgL3Vzci9sb2NhbC9nbnUvYmluOi91c3IvY2NzL2JpbjoKKyNQcm9kdWNlcyBh IGh1Z2UgZXhlY3V0YWJsZSAtLSBzdHJpcCB3aXRoIC91c3IvY2NzL2Jpbi9zdHJpcCAobm90IEdu dSBzdHJpcCkuCisjQWxzbyBkb24ndCBhZGQgIkxOS0ZMQUdTID0gLXMiIC0tIHN0cmlwIG1hbnVh bGx5IGluc3RlYWQuCisjQWxzbyBub3RlOiB0aGlzIGNhbiBOT1QgYmUgbGlua2VkIHN0YXRpY2Fs bHkgLSBTdW4gbWFrZXMgaXQgaW1wb3NzaWJsZS4KKyNBbmQgZm9yIFNvbGFyaXMgMi40LCB5b3Ug bWlnaHQgaGF2ZSB0byByZXBsYWNlOgorIyAvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k0ODYtc3Vu LXNvbGFyaXMyLzIuNC41L2luY2x1ZGUvc3lzL3N0YXQuaAorI3dpdGggL3Vzci9pbmNsdWRlL3N5 cy9zdGF0LmguCitzb2xhcmlzMnhnOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFNvbGFyaXMgMi54IHdpdGggR05VIGNjLi4uJworCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUg Y29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKKwkkKE1BS0Up IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZM QUdTID0gLWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1E Rk5GTE9BVCBcCisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAt RFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNs IC1sbSAtbHJlc29sdiAkKExJQlMpIgorCisjZGl0dG8gYnV0IG5vIGN1cnNlcy4KK3NvbGFyaXMy eGduYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIueCB3 aXRoIEdOVSBjYy4uLicKKwlAZWNobyAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIHRoYXQgYWNj b21wYW55IHRoZSBzb2xhcmlzMnhnIHRhcmdldC4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUyA9IC1nIC1PIC1Vc3Vu IC1EU1ZSNCAtRFNPTEFSSVMgLURTVEVSTUlPWCAtRFNFTEVDVCAtREZORkxPQVQgXAorCS1ERElS RU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQg LWxuc2wgLWxtIC1scmVzb2x2ICQoTElCUykiCisKKyNhbmQgd2l0aCBLZXJiZXJvcyBJVgorc29s YXJpczJ4ZytrcmI0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFy aXMgMi54IHdpdGggR05VIGNjLCBrcmI0Li4uJworCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29t bWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKKwkkKE1BS0UpIHhl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdT ID0gLWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5G TE9BVCBcCisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRD UFNPQ0tFVCBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TICAtREtSQjQgLURD S19FTkNSWVBUSU9OIFwKKwktRENLX0RFUyAtRENLX0NBU1QgLURCSUdCVUZPSyAkKEs0SU5DKSAk KEtGTEFHUykiIFwKKwkiTElCUz0gJChLNExJQikgLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNsIC1s bSAtbHJlc29sdiAtbGtyYiAtbGRlcyBcCisJJChMSUJTKSIKKworI2FuZCB3aXRoIE9wZW5TU0ws WkxJQixQQU0sU0hBRE9XCitzb2xhcmlzMnhnK29wZW5zc2wremxpYitwYW0rc2hhZG93OgorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54IHdpdGggZ2NjLCBP cGVuU1NMLi4uJworCUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBh bnkgdGhlIHNvbGFyaXMyeGcgdGFyZ2V0LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURT VlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCBcCisJLURDS19DVVJT RVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCBcCisJLURDS19B VVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1BBTSAtRENLX1NIQURPVyAgLURaTElCIFwKKwkt REJJR0JVRk9LICQoU1NMSU5DKSAkKEtGTEFHUykiIFwKKwkiTElCUz0gJChTU0xMSUIpIC1sdGVy bWxpYiBcCisJLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1sc3NsIC1sY3J5cHRvIC1scGFt IC1seiIKKworI0RpdHRvIGJ1dCB3aXRoIEdDQyAzLjEgaW4gd2hpY2ggeW91IGhhdmUgdG8gc3Bl Y2lmeSAzMi1iaXQgd2l0aCAtbTMyLgorI0luIFNvbGFyaXMgOSAoYW5kIG1heWJlIDgpIHlvdSds bCBhbHNvIG5lZWQgc3BlY2lmaXkgdGhlIExpYnJhcnkgcGF0aC4KKyNSZXBvcnRlZGx5IHRoaXMg Y2FuIGJlIGRvbmUgaGVyZSwgYnV0IG9ubHkgd2l0aDoKKyMgY3JsZSAtbCAvdXNyL2xpYjovdXNy L2xvY2FsL3NzbC9saWIKKyNwcmlvciB0byBidWlsZGluZy4gIE5vdGU6IDY0LWJpdCBub3QgdGVz dGVkIHdpdGggU1NMLgorI0ZvciBuby1jcnlwdG8gNjQtYml0IGJ1aWxkcyBzZWUgdGhlIHNvbGFy aXM5ZzY0IHRhcmdldC4KK3NvbGFyaXMyeGczMitvcGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKKwlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIueCB3aXRoIGdjYywg T3BlblNTTC4uLicKKwlAZWNobyAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIHRoYXQgYWNjb21w YW55IHRoZSBzb2xhcmlzMnhnIHRhcmdldC4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBDQz0iZ2NjIC1tMzIiIENDMj0iZ2NjIC1tMzIiIFwKKwkiQ0ZMQUdTID0g LWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9B VCBcCisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNP Q0tFVCBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1BBTSAtRENLX1NIQURP VyAgLURaTElCIFwKKwktREJJR0JVRk9LICQoU1NMSU5DKSAkKEtGTEFHUykiIFwKKwkiTElCUz0g JChTU0xMSUIpIC1sdGVybWxpYiBcCisJLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1sc3Ns IC1sY3J5cHRvIC1scGFtIC1seiIKKworI2FuZCB3aXRoIEtyYjUsS3JiNCxPcGVuU1NMLFNIQURP Vworc29sYXJpczJ4ZytrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3c6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLnggd2l0aCBnY2MsazUsazQsc3NsLi4uJwor CUBlY2hvICdQbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgdGhhdCBhY2NvbXBhbnkgdGhlIHNvbGFy aXMyeGcgdGFyZ2V0LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdTID0gLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAt RFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCBcCisJLURDS19DVVJTRVMgLURDS19ORVdURVJN IC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCBcCisJLURDS19BVVRIRU5USUNBVElPTiAt RENLX0tFUkJFUk9TIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1EQ0tfRU5DUllQVElPTiAt RENLX1NTTCAtRENLX0RFUyAtRENLX0NBU1QgLURCSUdCVUZPSyBcCisJJChLNUlOQykgJChLNUlO Qykva3JiNSAkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9ICQoSzVMSUIpICQoU1NMTElC KSAtbHRlcm1saWIgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IFwKKwktbGtyYjQgLWxzc2wg LWxjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gXAorCS1s ZGVzICQoTElCUykiCisKKyNhbmQgd2l0aCBPcGVuU1NMCitzb2xhcmlzMnhnK29wZW5zc2wrcGFt K3NoYWRvdzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIu eCB3aXRoIGdjYywgT3BlblNTTC4uLicKKwlAZWNobyAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRz IHRoYXQgYWNjb21wYW55IHRoZSBzb2xhcmlzMnhnIHRhcmdldC4nCisJJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUyA9IC1n IC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURTVEVSTUlPWCAtRFNFTEVDVCAtREZORkxPQVQg XAorCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NL RVQgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TU0wgLURDS19QQU0gLURDS19TSEFET1cg XAorCS1EQklHQlVGT0sgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKFNTTExJQikg LWx0ZXJtbGliIFwKKwktbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxzc2wgLWxjcnlwdG8g LWxwYW0iCisKK3NvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3NycCtwYW0rc2hhZG93OgkKKwlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIueCB3aXRoIGdjYywgT3Bl blNTTC4uLicKKwlAZWNobyAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIHRoYXQgYWNjb21wYW55 IHRoZSBzb2xhcmlzMnhnIHRhcmdldC4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUyA9IC1nIC1PIC1Vc3VuIC1EU1ZS NCAtRFNPTEFSSVMgLURTVEVSTUlPWCAtRFNFTEVDVCAtREZORkxPQVQgXAorCS1EQ0tfQ1VSU0VT IC1EQ0tfTkVXVEVSTSAtRERJUkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgLURCSUdCVUZPSyBc CisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX0VOQ1JZUFRJT04gLURDS19ERVMgLURMSUJERVMg LURDS19DQVNUIFwKKwktRENLX1NTTCAtRENLX1BBTSAtRENLX1NIQURPVyAtRFpMSUIgLURDS19T UlAgJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKFNTTExJQikgLWx0ZXJtbGliIC1s c29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHNycCAtbHNzbCBcCisJLWxkZXMgLWxrcnlwdG8g LWxjcnlwdG8gLWxwYW0gLWx6IgorCitzb2xhcmlzMjJnOgorCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgIktGTEFHUz0tRFBPU0lYX0NSVFNDVFMgJChLRkxBR1MpIiBzb2xhcmlzMnhnIFwKKwlLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKK3NvbGFyaXMyM2c6CisJJChNQUtFKSAiTUFLRT0kKE1B S0UpIiAiS0ZMQUdTPS1EUE9TSVhfQ1JUU0NUUyAkKEtGTEFHUykiIHNvbGFyaXMyeGcgXAorCUtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI1NvbGFyaXMgMi40IGJ1aWx0IHdpdGggZ2NjCitz b2xhcmlzMjRnOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSBcCisJc29sYXJpczJ4ZyAiS0ZMQUdTPS1EU09MQVJJUzI0IC1EUE9TSVhfQ1JUU0NUUyAk KEtGTEFHUykiCisKKyNTb2xhcmlzIDIuMC0yLjMsIFN1blBybyBjb21waWxlciwgd2l0aCBTdW5M aW5rIFguMjUgc3VwcG9ydC4KKyNUaGlzIHdpbGwgb25seSBydW4gaWYgdXNlciBoYXMgL29wdC9T VU5XY29ubi9saWIvbGlic29ja3gyNS5zby4xCisjZXhpc3RzIGFuZCBjYW4gYmUgZHluYW1pY2Fs bHkgbGlua2VkLgorI05PVEU6IERvIG5vdCBjaGFuZ2UgdGFyZ2V0IHRvIHhlcm1pdCAtLSBpdCBk b2Vzbid0IHN1cHBvcnQgWC4yNS4KK3NvbGFyaXMyeDI1OgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54K1guMjUgd2l0aCBTdW5Qcm8gY2MuLi4nCisJJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1p IC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURESVJFTlQgXAorCS1EU1VOWDI1IC1EVENQU09DS0VU IC1ESERCVVVDUCAtREZORkxPQVQgLUROT0xFQVJOIFwKKwktRFNFTEVDVCAtRENLX0NVUlNFUyAt RENLX05FV1RFUk0gLURTVEVSTUlPWCAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgXAor CSJMSUJTPSAtbHRlcm1saWIgLUwvb3B0L1NVTldjb25uL2xpYiAtUi9vcHQvU1VOV2Nvbm4vbGli IFwKKwktbHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IgorCisjU29sYXJpcyAy LjAtMi40LCBnY2MsIFN1bkxpbmsgWC4yNSBhZGRlZC4KKyNOT1RFOiBDYW4ndCB1c2UgeGVybWl0 IHRhcmdldCB3aXRoIFguMjUuCitzb2xhcmlzMnhneDI1OgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi54ICsgWC4yNSB3aXRoIEdOVSBjYy4uLicKKwlAZWNo byAnUGxlYXNlIHJlYWQgdGhlIGNvbW1lbnRzIHRoYXQgYWNjb21wYW55IHRoZSBzb2xhcmlzMnhn IGVudHJ5LicKKwkkKE1BS0UpIHdlcm1pdCBDQz1nY2MgQ0MyPWdjYyBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLWcgLU8gLVVzdW4gLURTVlI0IC1EU09MQVJJUyAtRFNU RVJNSU9YIC1EU0VMRUNUIC1EU1VOWDI1IFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURE SVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUIC1ERk5GTE9BVCBcCisJLUROT0xFQVJOICQoS0ZM QUdTKSIgXAorCSJMSUJTPSAtbHRlcm1saWIgLWxtIC1ML29wdC9TVU5XY29ubi9saWIgLVIvb3B0 L1NVTldjb25uL2xpYiBcCisJLWxzb2NreDI1IC1sc29ja2V0IC1sbnNsIgorCisjU29sYXJpcyAy LjQsIFN1blBybyBjb21waWxlciwgd2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydC4KKyNUaGlzIHdp bGwgb25seSBydW4gaWYgdXNlciBoYXMgL29wdC9TVU5XY29ubi9saWIvbGlic29ja3gyNS5zby4x CisjZXhpc3RzIGFuZCBjYW4gYmUgZHluYW1pY2FsbHkgbGlua2VkLgorc29sYXJpczI0eDI1Ogor CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgMi40K1guMjUgd2l0 aCBTdW5Qcm8gY2MuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUyA9IC1PIC1pIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVMgLURTT0xBUklTMjQg LURESVJFTlQgLUROT0xFQVJOIFwKKwktRFNVTlgyNSAtRFRDUFNPQ0tFVCAtREhEQlVVQ1AgLURG TkZMT0FUIC1EUE9TSVhfQ1JUU0NUUyBcCisJLURTRUxFQ1QgLURDS19DVVJTRVMgLURDS19ORVdU RVJNIC1EU1RFUk1JT1ggJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLXMiIFwKKwkiTElCUz0g LWx0ZXJtbGliIC1ML29wdC9TVU5XY29ubi9saWIgLVIvb3B0L1NVTldjb25uL2xpYiBcCisJLWxz b2NreDI1IC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiIKKworI1NvbGFyaXMgMi41LCBTdW5Q cm8gY29tcGlsZXIsIHdpdGggU3VuTGluayBYLjI1IHN1cHBvcnQuCitzb2xhcmlzMjV4MjU6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyAyLjUrWC4yNSB3aXRo IFN1blBybyBjYy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTID0gLU8gLWkgLVVzdW4gLURTVlI0IC1EU09MQVJJUzI1IC1ERElSRU5UIC1E U1VOWDI1IFwKKwktRFRDUFNPQ0tFVCAtREhEQlVVQ1AgLURTRUxFQ1QgLURDS19DVVJTRVMgXAor CS1EQ0tfTkVXVEVSTSAtRFNURVJNSU9YIC1ERk5GTE9BVCAtRFBPU0lYX0NSVFNDVFMgLUROT0xF QVJOIFwKKwktSS9vcHQvU1VOV2Nvbm4vaW5jbHVkZSAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWx0 ZXJtbGliIC1ML29wdC9TVU5XY29ubi9saWIgLVIvb3B0L1NVTldjb25uL2xpYiBcCisJLWxzb2Nr eDI1IC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiIKKworc29sYXJpczIzOgorCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc29sYXJpczJ4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJL RkxBR1M9JChLRkxBR1MpIgorCitzb2xhcmlzMjQ6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBz b2xhcmlzMnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVMy NCAtRFBPU0lYX0NSVFNDVFMgJChLRkxBR1MpIgorCisjIHRlbXBsYXRlIGZvciBTb2xhcmlzIDIu NSBhbmQgYWJvdmUuCitzb2xhcmlzMjV4OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFNvbGFyaXMgMi54IHdpdGggU3VuUHJvIGNjLi4uJworCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREZORkxPQVQgLU8gLVVzdW4g LWkgJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLXMiIFwKKwkiTElCUz0gLWx0ZXJtbGliIC1s c29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAkKExJQlMpIgorCisjU29sYXJpcyAyLjUsIFN1blBy byBjb21waWxlciwgY3Vyc2VzLCBUQ1AvSVAKK3NvbGFyaXMyNToKKwkkKE1BS0UpICJNQUtFPSQo TUFLRSkiIHNvbGFyaXMyNXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0t RFNPTEFSSVMyNSAkKEtGTEFHUykiCisKKyNTb2xhcmlzIDIuNSwgU3VuUHJvIGNvbXBpbGVyLCBj dXJzZXMsIFRDUC9JUCwgS2VyYmVyb3MgSVYKK3NvbGFyaXMyNStrcmI0OgorCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgc29sYXJpczI1eCtrcmI0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJLRkxBR1M9LURTT0xBUklTMjUgJChLRkxBR1MpIgorCisjU29sYXJpcyAyLjUgYnVpbHQgd2l0 aCBnY2MKK3NvbGFyaXMyNWc6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnIEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LWZ1bnNpZ25lZC1jaGFyIC1EU09M QVJJUzI1ICQoS0ZMQUdTKSIKKworI1NvbGFyaXMgMi41IGJ1aWx0IHdpdGggZ2NjIGFuZCBLZXJi ZXJvcyBJVgorc29sYXJpczI1ZytrcmI0OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJp czJ4ZytrcmI0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LWZ1bnNpZ25l ZC1jaGFyIC1EU09MQVJJUzI1ICQoS0ZMQUdTKSIKKworI1NvbGFyaXMgMi41IGJ1aWx0IHdpdGgg Z2NjIGFuZCBLZXJiZXJvcyBWL0lWLCBTU0wsIC4uLgorc29sYXJpczI1ZytrcmI1K2tyYjQrb3Bl bnNzbCtzaGFkb3c6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnK2tyYjUra3Ji NCtvcGVuc3NsK3NoYWRvdyBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFH Uz0tZnVuc2lnbmVkLWNoYXIgLURTT0xBUklTMjUgJChLRkxBR1MpIgorCisjU29sYXJpcyAyLjUs IGdjYywgU3VuTGluayBYLjI1IGFkZGVkLgorc29sYXJpczI1Z3gyNToKKwkkKE1BS0UpICJNQUtF PSQoTUFLRSkiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gc29sYXJpczJ4Z3gyNSBcCisJIktG TEFHUz0tRFNPTEFSSVMyNSAkKEtGTEFHUykiCisKKyNTb2xhcmlzIDIuNiwgZ2NjLCBTdW5MaW5r IFguMjUgYWRkZWQuCitzb2xhcmlzMjZneDI1OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBzb2xhcmlzMnhneDI1IFwKKwkiS0ZMQUdTPS1EU09MQVJJ UzI2IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBhbSIKKwor I1NvbGFyaXMgMi42LCBTdW5Qcm8gY29tcGlsZXIsIGN1cnNlcywgVENQL0lQCitzb2xhcmlzMjY6 CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMjV4IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJLRkxBR1M9LURTT0xBUklTMjYgLURDS19QQU0gLURDS19TSEFET1cgJChLRkxB R1MpIiBcCisJIkxJQlM9IC1scGFtIgorCisjU29sYXJpcyAyLjYgd2l0aCBnY2MKK3NvbGFyaXMy Nmc6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IHNv bGFyaXMyeGcgXAorCSJLRkxBR1M9IC1EU09MQVJJUzI2IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQo S0ZMQUdTKSIgXAorCSJMSUJTID0gLWxwYW0iCisKKyNTb2xhcmlzIDIuNiB3aXRoIGdjYyBhbmQg U1NMCitzb2xhcmlzMjZnK29wZW5zc2w6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAgc29sYXJp czJ4ZytvcGVuc3NsK3BhbStzaGFkb3cgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktG TEFHUz0gLURTT0xBUklTMjYgJChLRkxBR1MpIgorCisjU29sYXJpcyAyLjYgd2l0aCBnY2MsIG5v IGN1cnNlcyAoZS5nLiBiZWNhdXNlIGxpYnRlcm1saWIgaXMgbWlzc2luZykuCitzb2xhcmlzMjZn bmM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IHNv bGFyaXMyeGduYyBcCisJIktGTEFHUz0gLURTT0xBUklTMjYgLURDS19QQU0gLURDS19TSEFET1cg JChLRkxBR1MpIiBcCisJIkxJQlM9IC1scGFtIgorCisjU29sYXJpcyAyLjYsIFN1blBybyBjb21w aWxlciwgd2l0aCBTdW5MaW5rIFguMjUgc3VwcG9ydC4KK3NvbGFyaXMyNngyNToKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDIuNitYLjI1IHdpdGggU3VuUHJv IGNjLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJD RkxBR1MgPSAtTyAtaSAtVXN1biAtRFNWUjQgLURTT0xBUklTMjYgLURESVJFTlQgLURTVU5YMjUg XAorCS1EVENQU09DS0VUIC1ESERCVVVDUCAtRFNFTEVDVCAtRENLX0NVUlNFUyAtRENLX1BBTSAt RENLX1NIQURPVyBcCisJLURDS19ORVdURVJNIC1EU1RFUk1JT1ggLURGTkZMT0FUIC1EUE9TSVhf Q1JUU0NUUyAtRE5PTEVBUk4gXAorCS1JL29wdC9TVU5XY29ubi9pbmNsdWRlICQoS0ZMQUdTKSIg XAorCSJMSUJTPSAtbHRlcm1saWIgLUwvb3B0L1NVTldjb25uL2xpYiAtUi9vcHQvU1VOV2Nvbm4v bGliIFwKKwktbHNvY2t4MjUgLWxzb2NrZXQgLWxuc2wgLWxtIC1scmVzb2x2IC1scGFtIgorCisj U29sYXJpcyA3ICgyLjcpIHdpdGggU3VuIENDCitzb2xhcmlzNzoKKwkkKE1BS0UpICJNQUtFPSQo TUFLRSkiIHNvbGFyaXMyNXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0t RFNPTEFSSVM3IC1EQ0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBh bSIKKworI1NvbGFyaXMgNyB3aXRoIGdjYyAoMzItYml0KQorc29sYXJpczdnOgorCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc29sYXJpczJ4ZyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki S0ZMQUdTPS1EU09MQVJJUzcgLURDS19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCisJIkxJ QlM9IC1scGFtIgorCisjU29sYXJpcyA3IHdpdGggZ2NjICsgS2VyYmVyb3MgSVYgKDMyLWJpdCkK K3NvbGFyaXM3ZytrcmI0OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczJ4ZytrcmI0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTT0xBUklTNyAtRENLX1BB TSAtRENLX1NIQURPVyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxwYW0iCisKK3NvbGFyaXM3Zytv cGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMy eGcrb3BlbnNzbCt6bGliK3BhbStzaGFkb3cgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJLRkxBR1M9LURTT0xBUklTNyAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFHUykiCisK KyNTb2xhcmlzIDcgd2l0aCBnY2MgKyBPcGVuU1NMICgzMi1iaXQpCitzb2xhcmlzN2crb3BlbnNz bCt6bGliK3NycCtwYW0rc2hhZG93OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJpczJ4 ZytvcGVuc3NsK3psaWIrc3JwK3BhbStzaGFkb3cgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJLRkxBR1M9LURTT0xBUklTNyAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFHUyki CisKKyNTb2xhcmlzIDgKK3NvbGFyaXM4OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc29sYXJp czI1eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU09MQVJJUzggLURD S19QQU0gLURDS19TSEFET1cgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1scGFtIgorCisjU29sYXJp cyA4IHdpdGggZ2NjICgzMi1iaXQpCitzb2xhcmlzOGc6CisJJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBzb2xhcmlzMnhnIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTT0xB UklTOCAtRENLX1BBTSAtRENLX1NIQURPVyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxwYW0iCisK KyMgSW4gT3BlblNTTCBidWlsZHMgYWRkIC1sZGwgaWYgeW91IGdldCB1bnJlc29sdmVkIHJlZmVy ZW5jZXMgZm9yCisjIGRsY2xvc2UsIGRsc3ltLCBkbG9wZW4sIGRsZXJyb3IuCisKKyNTb2xhcmlz IDggd2l0aCBnY2MgKyBPcGVuU1NMICgzMi1iaXQpCitzb2xhcmlzOGcrb3BlbnNzbCt6bGliK3Bh bStzaGFkb3c6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnK29wZW5zc2wremxp YitwYW0rc2hhZG93IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9LURTT0xB UklTOCAkKEtGTEFHUykiCisKKyNTb2xhcmlzIDggd2l0aCBnY2MgKyBLZXJiZXJvcyBJViAoMzIt Yml0KQorc29sYXJpczhnK2tyYjQ6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhn K2tyYjQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVM4IC1E Q0tfUEFNIC1EQ0tfU0hBRE9XICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBhbSIKKworc29sYXJp czlub2xmczoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXMyNXggS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVM5IC1EQ0tfUEFNIC1EQ0tfU0hBRE9X IC1EVVNFX1NUUkVSUk9SICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBhbSIKKworI1NvbGFyaXMg OSB3aXRoIG1hbGxvYyBkZWJ1Z2dpbmcKK3NvbGFyaXM5bWQ6CisJJChNQUtFKSBtZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1ERk5GTE9BVCAtTyAtVXN1biAt aSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IFwKKwktRFNPTEFSSVM5IC1EbWFsbG9jPWRtYWxsb2Mg LURmcmVlPWRmcmVlIC1ETURFQlVHIFwKKwktRENLX1BBTSAtRENLX1NIQURPVyAtRFVTRV9TVFJF UlJPUiAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxwYW0gLWx0ZXJtbGliIC1sc29ja2V0IC1sbnNs IC1sbSAtbHJlc29sdiIKKworI1NvbGFyaXMgOSB3aXRoIGdjYyArIE9wZW5TU0wgKyBTaGFkb3cg KDMyLWJpdCkKKyNBZGQgLURPUEVOU1NMXzA5NyBmb3IgT3BlblNTTCAwLjkuNyBvciBsYXRlci4K K3NvbGFyaXM5ZytvcGVuc3NsK3NoYWRvdytwYW0remxpYjoKKwkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIHNvbGFyaXMyeGcrb3BlbnNzbCt6bGliK3BhbStzaGFkb3cgXAorCUtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTT0xBUklTOSAtREhEQlVVQ1AgLURESVJFTlQgLURf RklMRV9PRkZTRVRfQklUUz02NCBcCisJLUROT19EQ0xfSU5FVF9BVE9OIC1EWkxJQiAtRENLX1BB TSAtRENLX1NIQURPVyAtRExJQkRFUyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxwYW0gLWxkZXM0 MjUgLWx6ICQoTElCUykiCisKKyNTb2xhcmlzIDkgd2l0aCBnY2MgKyBPcGVuU1NMICsgS2VyYmVy b3MgNSArIEtyYjQgKyBTaGFkb3cgKDMyLWJpdCkKKyNBZGQgLURPUEVOU1NMXzA5NyBmb3IgT3Bl blNTTCAwLjkuNyBvciBsYXRlci4KK3NvbGFyaXM5ZytrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3cr cGFtK3psaWI6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlzMnhnK2tyYjUra3JiNCtv cGVuc3NsK3NoYWRvdyBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0t RFNPTEFSSVM5IC1ESERCVVVDUCAtRERJUkVOVCAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IFwKKwkt RE5PX0RDTF9JTkVUX0FUT04gLURaTElCIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIC1ETElCREVTICQo S0ZMQUdTKSIgXAorCSJMSUJTPSAtbHBhbSAtbGRlcyAtbHogJChMSUJTKSIKKworI1NvbGFyaXMg OSB3aXRoIGdjYyArIEtlcmJlcm9zIDQgYW5kIDU6Citzb2xhcmlzOWcra3JiNStrcmI0OgorCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAor CSJDRkxBR1MgPSAtTyAtVXN1biAtRFNWUjQgLURTT0xBUklTOSAtRFNURVJNSU9YIC1EU0VMRUNU IC1ERk5GTE9BVCBcCisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVD UCAtRFRDUFNPQ0tFVCBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JC NSAtREtSQjQgLURLUkI1MjQgXAorCS1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgXAorCS1EQ0tfRU5D UllQVElPTiAtRENLX0RFUyAtRENLX0NBU1QgLURCSUdCVUZPSyBcCisJJChLNUlOQykgJChLNUlO Qykva3JiNSAkKEtGTEFHUykiIFwKKwkiTElCUz0gJChLNUxJQikgLWx0ZXJtbGliIC1sc29ja2V0 IC1sbnNsIC1sbSAtbHJlc29sdiBcCisJLWxrcmI0IC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUgLWxr cmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIFwKKwktbGRlcyAkKExJQlMpIgorCisjU29sYXJpcyA5 LCAxMCwgb3IgMTEgd2l0aCBnY2MuLi4gIAorI1VzZXMgc3RyZWFtcyBQVFlzIHJhdGhlciB0aGFu IEJTRCBwdHlzIGFzIGluIEMtS2VybWl0IDguMCBhbmQgZWFybGllci4KKyNUaGlzIHRhcmdldCBp cyBjaGFpbmVkIHRvIGJlIHRoZSBzZWN1cmUgc29sYXJpczlnK3h4eCB0YXJnZXRzIGJlbG93Lgor c29sYXJpczlnIHNvbGFyaXMxMGcgc29sYXJpczExZzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDkgb3IgbGF0ZXIgd2l0aCBnY2MnCisJQGNhc2UgYHVuYW1l IC1yYCBpbiBcCisJICA1LjkpIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVM5IiA7OyBcCisJICA1 LjEwKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTMTAiIDs7IFwKKwkgIDUuMTEpIFNPTEFSSVNW RVJTSU9OPSItRFNPTEFSSVMxMSIgOzsgXAorCSAgKikgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJ UyIgOzsgXAorCWVzYWMgOyBcCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBDQz0iZ2NjIC1tMzIi IENDMj0iZ2NjIC1tMzIiIHhlcm1pdCBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUyA9IC1nIC1PIC1Vc3VuIC1EU1ZSNCAkJFNPTEFSSVNWRVJTSU9OIC1EVVNFX1NUUkVS Uk9SIFwKKwktRFNURVJNSU9YIC1EU0VMRUNUIC1ERk5GTE9BVCAtRENLX1BBTSAtRENLX1NIQURP VyAtZnVuc2lnbmVkLWNoYXIgXAorCS1ESEFWRV9TVFJFQU1TIC1ESEFWRV9HUkFOVFBUIC1ESEFW RV9QVFNOQU1FIC1EUFVTSF9QVEVNIFwKKwktRFBVU0hfTERURVJNIC1EUFVTSF9UVENPTVBBVCBc CisJLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tF VCBcCisJLURfRklMRV9PRkZTRVRfQklUUz02NCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWx0ZXJt bGliIC1sc29ja2V0IC1sbnNsIC1sbSAtbHJlc29sdiAtbHBhbSAkKExJQlMpIgorCisjU29sYXJp cyA5LCAxMCwgb3IgMTEgd2l0aCBnY2MgKyBLZXJiZXJvcyA1ICsgT3BlblNTTC4KKyNPSyBDLUtl cm1pdCA5LjAuMzAxLgorc29sYXJpczlnK2tyYjUrc3NsIHNvbGFyaXMxMGcra3JiNStzc2wgc29s YXJpczExZytrcmI1K3NzbDoKKwlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBcCisJICAqMC45 LjcqKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCisJICAqMC45LjgqKSBPUEVO U1NMT1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCisJICAqMS5bMC05XS5bMC05XSopIE9QRU5T U0xPUFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKKwkgICopIE9QRU5TU0xPUFRJT049IiIgOzsg XAorCWVzYWMgOyBcCisJSEFWRV9ERVM9Jyc7IFwKKwlERVNfTElCPScnOyBcCisJaWYgbHMgJChT U0xMSUIpL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICBE RVNfTElCPSctbGRlczQyNSc7IFwKKwkgICAgICBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJERVMn OyBcCisgICAgICAgICAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAorICAgICAgICAgICBlbHNlIGVj aG8gIk5PIERFUyI7IFwKKwlmaTsgXAorCUdTU0FQSUxJQj0nJzsgXAorCUs1RElSPWBlY2hvICQo SzVMSUIpIHwgc2VkICdzfC1MfHwnYDsgXAorCWVjaG8gSzVESVI9JCRLNURJUjsgXAorCWlmIGxz ICQkSzVESVIvbGliZ3NzYXBpX2tyYjUqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBc CisgICAgICAgICAgICAgIEdTU0FQSUxJQj0nLWxnc3NhcGlfa3JiNSc7IFwKKyAgICAgICAgICBl bHNlIEdTU0FQSUxJQj0nLWxnc3NhcGknOyBcCisgICAgICAgIGZpOyBcCisJJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1nY2MgQ0MyPWdjYyBcCisJIkNGTEFHUyA9 IC1PIC1Vc3VuIC1EU1ZSNCAtRFNPTEFSSVM5IC1EU1RFUk1JT1ggLURTRUxFQ1QgLURGTkZMT0FU IFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQIC1EVENQU09D S0VUICAtREJJR0JVRk9LIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EWkxJQiAt RENLX0tFUkJFUk9TIC1ES1JCNSBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAkJE9QRU5T U0xPUFRJT04gXAorCSQkSEFWRV9ERVMgJChTU0xJTkMpICQoSzVJTkMpICQoSzVJTkMpL2tyYjUg JChLRkxBR1MpIiBcCisJIkxJQlM9ICQoU1NMTElCKSAkKEs1TElCKSAtbHogLWxzc2wgLWx0ZXJt bGliIC1sc29ja2V0IC1sbnNsIC1sbSBcCisJLWxyZXNvbHYgLWxjcnlwdG8gXAorCSQkR1NTQVBJ TElCIC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAkJERFU19MSUIgJChMSUJTKSIKKworI1Nv bGFyaXMgOSwgMTAsIG9yIDExIHdpdGggZ2NjLCA2NCBiaXQgYnVpbGQuCisjUGVla2luZyBpbnNp ZGUgRklMRSBzdHJ1Y3Qgbm90IGFsbG93ZWQgaW4gNjQtYml0IHdvcmxkLgorI0RPTidUIFVTRSBU SElTIE9ORSBPTiBQQyBBUkNISVRFQ1RVUkUgLSBJdCBjb21waWxlcyBhbmQgbGlua3MgYnV0IHdv bid0IHJ1bi4KKyNPSzogMjAwOS8wOS8yNSAoYnV0IG5vdCB0ZXN0ZWQgb24gU29sYXJpcyAxMSkK K3NvbGFyaXM5ZzY0IHNvbGFyaXMxMGc2NCBzb2xhcmlzMTFnNjQ6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgU29sYXJpcyA5Kysgd2l0aCBnY2MgNjQtYml0JworCUBjYXNl IGB1bmFtZSAtcmAgaW4gXAorCSAgNS45KSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTOSIgOzsg XAorCSAgNS4xMCkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzEwIiA7OyBcCisJICA1LjExKSBT T0xBUklTVkVSU0lPTj0iLURTT0xBUklTMTEiIDs7IFwKKwkgICopIFNPTEFSSVNWRVJTSU9OPSIt RFNPTEFSSVMiIDs7IFwKKwllc2FjIDsgXAorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgQ0M9Imdj YyAtbTY0IiBDQzI9ImdjYyAtbTY0IiB4ZXJtaXQgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1MgPSAtZyAtTyAtVXN1biAtZnVuc2lnbmVkLWNoYXIgXAorCS1EU1ZSNCAk JFNPTEFSSVNWRVJTSU9OIC1ETk9BUlJPV0tFWVMgXAorCS1EU1RFUk1JT1ggLURTRUxFQ1QgLURG TkZMT0FUIC1EVVNFX1NUUkVSUk9SIC1EQ0tfUEFNIC1EQ0tfU0hBRE9XIFwKKwktREhBVkVfU1RS RUFNUyAtREhBVkVfR1JBTlRQVCAtREhBVkVfUFRTTkFNRSAtRFBVU0hfUFRFTSBcCisJLURQVVNI X0xEVEVSTSAtRFBVU0hfVFRDT01QQVQgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRERJ UkVOVCAtREhEQlVVQ1AgLURUQ1BTT0NLRVQgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sdGVybWxp YiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxwYW0gJChMSUJTKSIKKworI1NvbGFyaXMg OSwgMTAsIG9yIDExIHdpdGggU3VuUHJvIENDCisjVXNlcyBzdHJlYW1zIFBUWXMgcmF0aGVyIHRo YW4gQlNEIHB0eXMgYXMgaW4gQy1LZXJtaXQgOC4wIGFuZCBlYXJsaWVyLgorI1RoaXMgdGFyZ2V0 IGlzIGNoYWluZWQgdG8gYnkgdGhlIHNlY3VyZSB0YXJnZXRzIGJlbG93LgorI09LIEMtS2VybWl0 IDkuMAorc29sYXJpczkgc29sYXJpczEwIHNvbGFyaXMxMToKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDkgb3IgbGF0ZXIgd2l0aCBTdW4gQ0MnCisJQGNhc2Ug YHVuYW1lIC1yYCBpbiBcCisJICA1LjkpIFNPTEFSSVNWRVJTSU9OPSItRFNPTEFSSVM5IiA7OyBc CisJICA1LjEwKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTMTAiIDs7IFwKKwkgIDUuMTEpIFNP TEFSSVNWRVJTSU9OPSItRFNPTEFSSVMxMSIgOzsgXAorCSAgKikgU09MQVJJU1ZFUlNJT049Ii1E U09MQVJJUyIgOzsgXAorCWVzYWMgOyBcCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1Vc3VuIC1EU1ZSNCAk JFNPTEFSSVNWRVJTSU9OIC1EVVNFX1NUUkVSUk9SIFwKKwktRFNURVJNSU9YIC1EU0VMRUNUIC1E Rk5GTE9BVCAtRENLX1BBTSAtRENLX1NIQURPVyBcCisJLURIQVZFX1NUUkVBTVMgLURIQVZFX0dS QU5UUFQgLURIQVZFX1BUU05BTUUgLURQVVNIX1BURU0gXAorCS1EUFVTSF9MRFRFUk0gLURQVVNI X1RUQ09NUEFUIFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLURESVJFTlQgLURIREJVVUNQ IC1EVENQU09DS0VUIFwKKwktRF9GSUxFX09GRlNFVF9CSVRTPTY0ICQoS0ZMQUdTKSIgXAorCSJM SUJTPSAkKExJQlMpIC1sdGVybWxpYiAtbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxwYW0i CisKKyMgU29sYXJpcyA5LCAxMCwgb3IgMTEgd2l0aCBPcGVuU1NMIGJ1aWx0IHdpdGggU3VuIEND LgorIyBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgdG8gaW52b2tlIHRoaXMgdGFyZ2V0IGluIGNh c2UgeW91ciBPcGVuU1NMCisjIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBhcmUgbm90IGluIC91c3Iv bG9jYWw6CisjCisjIG1ha2Ugc29sYXJpczkrb3BlbnNzbCAiU1NMSU5DPSIgIlNTTExJQj0iIFwK KyMgICJLRkxBR1M9IC1JL29wdC9vcGVuc3NsLTAuOS44ay9pbmNsdWRlIC1ML29wdC9vcGVuc3Ns LTAuOS44ay9saWIiCisjCisjIERvbid0IHVzZSAnbWFrZSAtZScgYmVjYXVzZSB0aGF0IGluaGli aXRzIHBhc3Npbmcgb2YgS0ZMQUdTIHRvCisjIHRoZSBiYXNlIChzb2xhcmlzOSkgdGFyZ2V0Lgor IworI09LIEMtS2VybWl0IDkuMAorc29sYXJpczkrc3NsIHNvbGFyaXMxMCtzc2wgc29sYXJpczEx K3NzbCBcCitzb2xhcmlzOStvcGVuc3NsIHNvbGFyaXMxMCtvcGVuc3NsIHNvbGFyaXMxMStvcGVu c3NsOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNvbGFyaXMgOS8xMC8x MSB3aXRoIE9wZW5TU0w6IGNjJworCUBjYXNlIGBvcGVuc3NsIHZlcnNpb25gIGluIFwKKwkgICow LjkuNyopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTciIDs7IFwKKwkgICowLjkuOCopIE9Q RU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTgiIDs7IFwKKwkgICoxLlswLTldLlswLTldKikgT1BF TlNTTE9QVElPTj0iLURPUEVOU1NMXzEwMCIgOzsgXAorCSAgKikgT1BFTlNTTE9QVElPTj0iIiA7 OyBcCisJZXNhYyA7IFwKKwlIQVZFX0RFUz0nJzsgXAorCURFU19MSUI9Jyc7IFwKKwlpZiBscyAk KFNTTExJQikvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorCSAgICAg IERFU19MSUI9Jy1sZGVzNDI1JzsgXAorCSAgICAgIEhBVkVfREVTPSctRENLX0RFUyAtRExJQkRF Uyc7IFwKKyAgICAgICAgICAgICAgZWNobyAiSEFWRSBERVMiOyBcCisgICAgICAgICAgIGVsc2Ug ZWNobyAiTk8gREVTIjsgXAorCWZpOyBcCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzb2xhcmlz OSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EQ0tfQVVUSEVOVElDQVRJ T04gLURDS19TU0wgLURaTElCICQkSEFWRV9ERVMgXAorCS1ETk9fRENMX0lORVRfQVRPTiAkJE9Q RU5TU0xPUFRJT04gJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKFNTTExJQikgLWx6 IC1sc3NsICQkREVTX0xJQiAtbGNyeXB0byAgJChMSUJTKSIKKworIyBTb2xhcmlzIDkgb3IgbGF0 ZXIgd2l0aCBPcGVuU1NMLCBidWlsdCB3aXRoIGdjYy4KKyMgUmVtb3ZlIC1ETk9fRENMX0lORVRf QVRPTiBpZiBpbmV0X2F0b24gY29tZXMgdXAgbWlzc2luZy4gIFRoaXMgdGFyZ2V0IG5pY2VseQor IyBjaGFpbnMgdG8gdGhlIHNvbGFyaXN7OSwxMCwxMX1nIHRhcmdldCBidXQgZm9yIHNvbWUgcmVh c29uIGl0IGRvZXNuJ3Qgd29yayBpZgorIyB5b3UgYWRkIHRoZSAtREZPUldBUkRfWCBvcHRpb24s IHRodXMgdGhlIHNvbGFyaXM5ZytvcGVuc3NsK2ZvcndhcmRfeCB0YXJnZXQuCisjCisjT0s6IDIw MTEvMDYvMTQKK3NvbGFyaXM5Zytzc2wgc29sYXJpczEwZytzc2wgc29sYXJpczExZytzc2wgXAor c29sYXJpczlnK29wZW5zc2wgc29sYXJpczEwZytvcGVuc3NsIHNvbGFyaXMxMWcrb3BlbnNzbDoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTb2xhcmlzIDkvMTAvMTEgd2l0 aCBPcGVuU1NMOiBnY2MnCisJQGNhc2UgYG9wZW5zc2wgdmVyc2lvbmAgaW4gXAorCSAgKjAuOS43 KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAorCSAgKjAuOS44KikgT1BFTlNT TE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAorCSAgKjEuWzAtOV0uWzAtOV0qKSBPUEVOU1NM T1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCisJICAqKSBPUEVOU1NMT1BUSU9OPSIiIDs7IFwK Kwllc2FjIDsgXAorCUhBVkVfREVTPScnOyBcCisJREVTX0xJQj0nJzsgXAorCWlmIGxzICQoU1NM TElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJICAgICAgREVT X0xJQj0nLWxkZXM0MjUnOyBcCisJICAgICAgSEFWRV9ERVM9Jy1EQ0tfREVTIC1ETElCREVTJzsg XAorICAgICAgICAgICAgICBlY2hvICJIQVZFIERFUyI7IFwKKyAgICAgICAgICAgZWxzZSBlY2hv ICJOTyBERVMiOyBcCisJZmk7IFwKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNvbGFyaXM5ZyBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EQ0tfQVVUSEVOVElDQVRJT04g LURDS19TU0wgLURaTElCICQkSEFWRV9ERVMgXAorCS1ETk9fRENMX0lORVRfQVRPTiAkJE9QRU5T U0xPUFRJT04gJChTU0xJTkMpICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAkKFNTTExJQikgLWx6IC1s c3NsICQkREVTX0xJQiAtbGNyeXB0byAgJChMSUJTKSIKKworIyBTb2xhcmlzIDkgb3IgbGF0ZXIg d2l0aCBnY2MgKyBPcGVuU1NMICsgU2hhZG93ICgzMi1iaXQpLgorIyBSZW1vdmUgLUROT19EQ0xf SU5FVF9BVE9OIGlmIGluZXRfYXRvbiBjb21lcyB1cCBtaXNzaW5nLgorIyBJbmNsdWRlcyBsb25n IGZpbGUgc3VwcG9ydCAtIG5vdCBzdXJlIGlmIHRoaXMgd2FzIGF2YWlsYWJsZSBiZWZvcmUgU29s YXJpcyA5LgorIyBEZXRlY3RzIFNvbGFyaXMgdmVyc2lvbiBhdXRvbWF0aWNhbGx5LgorIworc29s YXJpczlnK29wZW5zc2wrZm9yd2FyZF94OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFNvbGFyaXMgOSBvciBsYXRlciB3aXRoIE9wZW5TU0wuLi4nCisJQGNhc2UgYG9wZW5z c2wgdmVyc2lvbmAgaW4gXAorCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5 NyIgOzsgXAorCSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAor CSAgKjEuWzAtOV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCisJ ICAqKSBPUEVOU1NMT1BUSU9OPSIiIDs7IFwKKwllc2FjIDsgY2FzZSBgdW5hbWUgLXJgIGluIFwK KwkgIDUuOSkgU09MQVJJU1ZFUlNJT049Ii1EU09MQVJJUzkiIDs7IFwKKwkgIDUuMTApIFNPTEFS SVNWRVJTSU9OPSItRFNPTEFSSVMxMCIgOzsgXAorCSAgNS4xMSkgU09MQVJJU1ZFUlNJT049Ii1E U09MQVJJUzExIiA7OyBcCisJICAqKSBTT0xBUklTVkVSU0lPTj0iLURTT0xBUklTIiA7OyBcCisJ ZXNhYyA7IFwKKwkkKE1BS0UpIHhlcm1pdCAJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBDQz1n Y2MgQ0MyPWdjYyBcCisJIkNGTEFHUyA9IC1nIC1PIC1Vc3VuIC1EU1ZSNCAkJFNPTEFSSVNWRVJT SU9OIFwKKwktREhBVkVfU1RSRUFNUyAtREhBVkVfR1JBTlRQVCAtREhBVkVfUFRTTkFNRSAtRFBV U0hfUFRFTSBcCisJLURQVVNIX0xEVEVSTSAtRFBVU0hfVFRDT01QQVQgXAorCS1EU1RFUk1JT1gg LURTRUxFQ1QgLURGTkZMT0FUIC1EQklHQlVGT0sgLURfRklMRV9PRkZTRVRfQklUUz02NCBcCisJ LURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAtRENLX1BBTSAtRENLX1NIQURPVyAtRFpMSUIg LURMSUJERVMgXAorCS1ERk9SV0FSRF9YICQkT1BFTlNTTE9QVElPTiAkKFNTTElOQykgJChLRkxB R1MpIiBcCisJIkxJQlM9ICQoU1NMTElCKSAtbHBhbSAtbGRlczQyNSAtbHogLWx0ZXJtbGliIFwK KwktbHNvY2tldCAtbG5zbCAtbG0gLWxyZXNvbHYgLWxzc2wgLWxjcnlwdG8gLWxwYW0gLWx6ICQo TElCUykiCisKKyMgVGhlc2UgdHdvIHNob3VsZCBiZSBmb2xkZWQgaW4gd2l0aCB0aGUgb25lcyBq dXN0IGFib3ZlLgorCisjU29sYXJpcyA5IHdpdGggZ2NjIDMuMSArIE9wZW5TU0wgKDMyLWJpdCkK K3NvbGFyaXM5ZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKKwkkKE1BS0UpICJNQUtFPSQoTUFL RSkiIHNvbGFyaXMyeGczMitvcGVuc3NsK3psaWIrcGFtK3NoYWRvdyBcCisJS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVM5IC1EVVNFX1NUUkVSUk9SICQoS0ZM QUdTKSIKKworI1NvbGFyaXMgMTAgd2l0aCBnY2MgMy4xICsgT3BlblNTTCAoMzItYml0KQorc29s YXJpczEwZytvcGVuc3NsK3psaWIrcGFtK3NoYWRvdzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSki IHNvbGFyaXMyeGczMitvcGVuc3NsK3psaWIrcGFtK3NoYWRvdyBcCisJS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNPTEFSSVMxMCAtRFVTRV9TVFJFUlJPUiAkKEtGTEFH UykiCisKKyNUaGUgZm9sbG93aW5nIChvbGQsIG9sZCkgc3Vub3N4eHggZW50cmllcyBhcmUgZm9y IGRlYnVnZ2luZyBhbmQgdGVzdGluZyBvbmx5LgorCitzdW5vczQxeDoKKwkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtTyAtRFNVTk9TNDEgLURE SVJFTlQgLUROT1RMT0cgLUROT01TRU5EIFwKKwktRE5PVVVDUCAtRE5PU0lHV0lOQ0ggLUROT1JF RElSRUNUIC1ETk9QVVNIIC1ETk9DQ1RSQVAgXAorCS1ETk9JQ1AgLUROT0xPQ0FMICQoS0ZMQUdT KSIKKworI1N1bk9TIDQuMS54LCBkZWJ1Z2dpbmcgd2l0aCBQdXJlIFNvZnR3YXJlLCBJbmMuLCBQ dXJpZnkgMiAoY29tbWVyY2lhbCBydW50aW1lCisjZXJyb3ItZGV0ZWN0aW9uIHNvZnR3YXJlIGZv ciBjYXRjaGluZyB3aWxkIGFycmF5IHJlZmVyZW5jZXMsIGV0YykuCisjQmVmb3JlIHJ1bm5pbmcg dGhlIHJlc3VsdGluZyB3ZXJtaXQsIHlvdSdsbCBhbHNvIG5lZWQgdG8gZGVmaW5lIGFuZCBleHBv cnQKKyN0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYXMgaW4gdGhpcyBleGFt cGxlKToKKyNQVVJJRllIT01FPS91c3IvbG9jYWwvcHVyaWZ5IDsgZXhwb3J0IFBVUklGWUhPTUUK KyNQVVJJRllDQUNIRURJUj0vdG1wIDsgZXhwb3J0IFBVUklGWUNBQ0hFRElSCitzdW5vczQxY3A6 CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgLyBCU0QgLyBD dXJzZXMgLyBQdXJpZnkuLi4KKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0MyPSBwdXJpZnkgLWNhY2hlX2Rpcj0vdXNyL3RtcCBjYyIgXAorCSJDRkxBR1M9 IC1nIC1EU1VOT1M0MSAtREhEQlVVQ1AgLURESVJFTlQgLURUQ1BTT0NLRVQgXAorCS1EU0FWRURV SUQgLURDS19DVVJTRVMgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCIK KworI1N1bk9TIDQuMSB3aXRoIG1hbGxvYyBkZWJ1Z2dlcgorc3Vub3M0MW1kOgorCUBlY2hvIE1h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xIG1hbGxvYyBkZWJ1Zy4uLgorCSQo TUFLRSkgbWVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1PIC1E U1VOT1M0MSAtREhEQlVVQ1AgLURESVJFTlQgLURUQ1BTT0NLRVQgXAorCS1EU0FWRURVSUQgJChL RkxBR1MpIC1EbWFsbG9jPWRtYWxsb2MgLURmcmVlPWRmcmVlIC1ETURFQlVHIgorCitzdW5vczQx Z21kOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xIHdpdGgg Z2NjIGFuZCBjdXJzZXMuLi4KKwkkKE1BS0UpIG1lcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9ICJDQz0gZ2NjICIgIkNDMj0gZ2NjIiBcCisJIkNGTEFHUz0gLWcgLURTVU5PUzQxIC1ESERC VVVDUCAtRERJUkVOVCAtRFRDUFNPQ0tFVCBcCisJLUROREdQV05BTSAtRFNBVkVEVUlEIC1EQ0tf Q1VSU0VTIC1EUkxPR0NPREUgXAorCSQoS0ZMQUdTKSAtRG1hbGxvYz1kbWFsbG9jIC1EZnJlZT1k ZnJlZSAtRE1ERUJVRyIgXAorCSJMSUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNTdW5PUyB2 ZXJzaW9uIDQuMSwgZ2NjLCBwcm9maWxpbmcgd2l0aCBncHJvZiwgbm8gZGVidWdnaW5nLgorI1Rv IGdldCBwcm9maWxlLCAibWFrZSBzdW5vczQxcCIgKG9uIFN1biksIHRoZW4gIi4vd2VybWl0Ii4g IEFmdGVyIHJ1bm5pbmcKKyN3ZXJtaXQsICJncHJvZiAuL3dlcm1pdCB8IGxwciIgKG9yIHdoYXRl dmVyKSB0byBnZXQgZXhlY3V0aW9uIHByb2ZpbGUuCitzdW5vczQxcDoKKwlAZWNobyBNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQueCB3aXRoIHByb2ZpbGluZy4uLgorCSQoTUFL RSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDPSBnY2MgIiAiQ0MyPSBnY2Mi IFwKKwkiQ0ZMQUdTPSAtRFNVTk9TNDEgLUROT0RFQlVHIC1EU0FWRURVSUQgLURESVJFTlQgLURU Q1BTT0NLRVQgXAorCS1ETkRHUFdOQU0gJChLRkxBR1MpIC1wZyIgIkxOS0ZMQUdTID0gLXBnIgor CisjU3VuT1MgdmVyc2lvbiA0LjEgb3IgbGF0ZXIsIEJTRCBlbnZpcm9ubWVudCwgbWluaW11bSBm ZWF0dXJlcy4KK3N1bm9zNDFtaW46CisJQGVjaG8gTWluaW11bSBpbnRlcmFjdGl2ZQorCSQoTUFL RSkgIk1BS0U9JChNQUtFKSIgc3Vub3M0MSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki S0ZMQUdTPS1ETk9TUEwgLUROT1hNSVQgLUROT01TRU5EIC1ETk9GUklMTFMgLUROT1JFVFJZIFwK KwktRE5PRElBTCAtRE5PSEVMUCAtRE5PREVCVUcgLUROT1RMT0cgLUROT1NDUklQVCAtRE5PQ1NF VFMgXAorCS1ETk9TSE9XIC1ETk9TRVRLRVkgLUROT1VVQ1AgLUROT1JFQ0FMTCAtRE5PUkVESVJF Q1QgXAorCS1ETk9QVVNIIC1ETk9NRE1IVVAgLUROT0pDIC1ETk9GRFpFUk8gLUROT0VTQ1NFUSBc CisJLUROT05FVCAtRENLX1NNQUxMIC1ETk9DS1NQRUVEIC1ETk9DS1RJTUVSUyAtRE5PTE9HSU4g XAorCS1ETk9DS1hZWiAtRE5PS0VSQkVST1MgLUROT01LRElSIC1ETk9QQVRURVJOUyAtRE5PUEVS TVMgLUROT1BJUEVTRU5EIFwKKwktRE5PUkVDVVJTSVZFIC1ETk9SRU5BTUUgLUROT1JFU0VORCAt RE5PU0VUS0VZIFwKKwktRE5PVFJJR0dFUiAtRE5PVFVOSU5HICQoS0ZMQUdTKSIgIkxOS0ZMQUdT ID0gLXMiCisKKyNTdW5PUyB2ZXJzaW9uIDQuMSwgQlNEIGVudmlyb25tZW50LCBtaW4gc2l6ZSwg Y29tbWFuZC1saW5lIG9ubHkuLi4KK3N1bm9zNDFtOgorCUBlY2hvIE1pbmltdW0gc2l6ZQorCSQo TUFLRSkgIk1BS0U9JChNQUtFKSIgc3Vub3M0MW1pbiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiS0ZMQUdTPS1ETk9JQ1AgJChLRkxBR1MpIgorCisjU3VuT1MgdmVyc2lvbiA0LjEsIEJT RCBlbnZpcm9ubWVudCwgbWluIHNpemUsIGNtZC1saW5lIG9ubHksIHJlbW90ZSBvbmx5Li4uCisj CitzdW5vczQxbXI6CisJQGVjaG8gTWluaW11bSBzaXplCisJJChNQUtFKSAiTUFLRT0kKE1BS0Up IiBzdW5vczQxbWluIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LUROT0lD UCAtRE5PTE9DQUwgJChLRkxBR1MpIgorCisjU3VuT1MgdmVyc2lvbiA0LjEsIEJTRCBlbnZpcm9u bWVudCwgbWluIHNpemUsIGludGVyYWN0aXZlLi4uCitzdW5vczQxbWk6CisJQGVjaG8gTWluaW11 bSBzaXplCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzdW5vczQxbWluIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1M9LUROT0NNREwgJChLRkxBR1MpIgorCisjU3VuT1MgdmVy c2lvbiA0LjEsIEJTRCBlbnZpcm9ubWVudCwgbWluIHNpemUsIGludGVyYWN0aXZlLCByZW1vdGUg b25seS4uLgorc3Vub3M0MW1pcjoKKwlAZWNobyBNaW5pbXVtIHNpemUKKwkkKE1BS0UpICJNQUtF PSQoTUFLRSkiIHN1bm9zNDFtaW4gS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFH Uz0tRE5PQ01ETCAtRE5PTE9DQUwgJChLRkxBR1MpIgorCisjU3VuT1MgNC4xLCBTeXN0ZW0gViBS MyBlbnZpcm9ubWVudCAoLWkgb3B0aW9uIG9taXR0ZWQpLgorc3Vub3M0MXM1OgorCUBlY2hvIE1h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3VuT1MgNC4xIFN5c3RlbSBWIFIzLi4uCisJQGVj aG8gRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seSAtIE5PVCBmb3IgcHJvZHVjdGlvbiB1c2UuCisJ QGVjaG8gRm9yIGEgdXNlYWJsZSB2ZXJzaW9uLCBtYWtlIHN1bm9zNDEgaW5zdGVhZC4KKwkkKE1B S0UpIHdlcm1pdCAiQ0M9IC91c3IvNWJpbi9jYyAiICJDQzI9L3Vzci81YmluL2NjICIgXAorCUtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRFNVTjRTNSAtRERJUkVOVCAt REhEQlVVQ1AgLUROT0xFQVJOIC1EQ0tfUE9MTCAkKEtGTEFHUykgLU8iCisKKyNBcyBhYm92ZSwg YnV0IHdpdGggY3Vyc2VzIHN1cHBvcnQKK3N1bm9zNDFzNWM6CisJQGVjaG8gTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBTdW5PUyA0LjEgU3lzdGVtIFYgUjMuLi4KKwlAZWNobyBDdXJzZXMg aW5jbHVkZWQuCisJQGVjaG8gRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seSAtIE5PVCBmb3IgcHJv ZHVjdGlvbiB1c2UuCisJQGVjaG8gRm9yIGEgdXNlYWJsZSB2ZXJzaW9uLCBtYWtlIHN1bm9zNDEg aW5zdGVhZC4KKwkkKE1BS0UpIHdlcm1pdCAiQ0M9IC91c3IvNWJpbi9jYyAiICJDQzI9L3Vzci81 YmluL2NjICIgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRFNV TjRTNSAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xFQVJOIFwKKwktRENLX1BPTEwgLURDS19DVVJT RVMgLURDS19ORVdURVJNICQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIgorCisjQXMgYWJv dmUsIGJ1dCB3aXRoIGN1cnNlcyBzdXBwb3J0IEFORCBuZXQgc3VwcG9ydAorc3Vub3M0MXM1dGNw YzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN1bk9TIDQuMSBTeXN0ZW0g ViBSMy4uLgorCUBlY2hvIFRDUC9JUCBhbmQgY3Vyc2VzIGluY2x1ZGVkLiAgTm8gZGVidWcgbG9n LgorCUBlY2hvIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgLSBOT1QgZm9yIHByb2R1Y3Rpb24g dXNlLgorCUBlY2hvIEZvciBhIHVzZWFibGUgdmVyc2lvbiwgbWFrZSBzdW5vczQxIGluc3RlYWQu CisJJChNQUtFKSB4ZXJtaXQgIkNDPSAvdXNyLzViaW4vY2MgIiAiQ0MyPS91c3IvNWJpbi9jYyAi IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTVU40UzUgLURE SVJFTlQgLURIREJVVUNQIC1EQ0tfUE9MTCBcCisJLUROT0RFQlVHIC1EQ0tfQ1VSU0VTIC1EQ0tf TkVXVEVSTSAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8iIFwKKwkiTElCUz0gLWxjdXJzZXMgLWxy ZXNvbHYiCisKKyMgKEVuZCBvZiBTdW5PUyB0ZXN0IGVudHJpZXMuLi4pCisKKyNBcG9sbG8gd2l0 aCBEb21haW4gU1IxMC4wIG9yIGxhdGVyLCBCU0QgZW52aXJvbm1lbnQKKyNSZXBvcnRlZGx5LCBp dCBtaWdodCBhbHNvIGhlbHAgdG8gYWRkICctQSxzeXN0eXBlPWJzZDQuMycgdG8gQ0ZMQUdTLgor I1JlcG9ydGVkbHksIHRoZXJlIGlzIGFsc28gYSBwcm9ibGVtIHdpdGggZ2V0YyAmIHB1dGMgbWFj cm9zIHRoYXQgY2FuCisjYmUgaGFuZGxlZCBieSB1c2luZyAnI2lmZGVmIGFwb2xsbycgc29tZXdo ZXJlIHRvIHJlZGVmaW5lIHRoZW0/Pz8KKyNPbiB0aGUgb3RoZXIgaGFuZCwgb3RoZXIgcmVwb3J0 cyBpbmRpY2F0ZSB0aGF0IGl0IHdvcmtzIGZpbmUgYXMtaXMuCisjTk9URTogVGhpcyBlbnRyeSB3 YXMgcHJldmlvdXNseSBsaWtlIHRoaXM6CisjCSQoTUFLRSkgd2VybWl0ICJDRkxBR1M9IC1ETk9G SUxFSCAtREJTRDQgJChLRkxBR1MpIC1VYWVnaXMgXAorIwktRFRDUFNPQ0tFVCAtVV9fU1REQ19f IgorI1JlcG9ydHMgKERlYyA5MSkgaW5kaWNhdGUgU1IxMCBoYXMgYW4gQU5TSS1jb21wbGlhbnQg QyBjb21waWxlciwKKyNpbiBhZGRpdGlvbiB0byBhbiBvbGRlciBvbmUgdGhhdCBjbGFpbWVkIHRv IGJlIEFOU0ktY29tcGxpYW50IGJ1dCB3YXNuJ3QuCisjVGhlIGZvbGxvd2luZyBtYWtlIGVudHJ5 IChwbHVzIGNoZWNrcyB0aGF0IGFyZSBtYWRlIGluIGNrY2RlYi5oKSBkZXRlY3QKKyN3aGljaCBj b21waWxlciBpcyB1c2VkIGFuZCBkZWZpbmUgdGhlIENLX0FOU0lDIG9yIE5PQU5TSSBmbGFncyBh Y2NvcmRpbmdseS4KK3NyMTAtYnNkOgorCUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgQXBvbGxvIFNSMTAuMCAvIEJTRCAuLi4KKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtTyAtREFQT0xMT1NSMTAgLURCU0Q0MyAtRFRDUFNP Q0tFVCAtRENLX0NVUlNFUyAtRE5PTEVBUk4gXAorCS1VYWVnaXMgJChLRkxBR1MpIiAiTElCUz0g LWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjQXBvbGxvIHdpdGggRG9tYWluIFNSMTAuMCBvciBsYXRl ciwgU3lzdGVtIFYgUjMgZW52aXJvbm1lbnQuCisjRG9uJ3QgdXNlIHRoZSBvcHRpbWl6ZXIgKC1P KSwgaXQgY2F1c2VzIHByb2JsZW1zIGF0IHJ1bnRpbWUuCitzcjEwLXM1cjM6CisJQGVjaG8gTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBcG9sbG8gU1IxMC4wIC8gU3lzIFYgUjMgLi4uCisJ JChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURO T0ZJTEVIIC1EU1ZSMyAtREFQT0xMT1NSMTAgLUROT0xFQVJOICQoS0ZMQUdTKSBcCisJLVVhZWdp cyAtVV9fU1REQ19fIgorCisjQXBvbGxvIERvbWFpbi9JWCAodW50ZXN0ZWQsIHRyeSB0aGlzIGlm IHNyMTAtYnNkIGRvZXNuJ3Qgd29yaykKKyMgLURUQ1BTT0NLRVQgY2FuIHByb2JhYmx5IGJlIGFk ZGVkIGhlcmUuCithcG9sbG9ic2Q6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBBcG9sbG8gRG9tYWluL0lYLi4uCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIkNDPSAvYmluL2NjICIgIkNDMj0gL2Jpbi9jYyAiIFwKKwkiQ0ZMQUdTPSAt RE5PRklMRUggLURCU0Q0IC1EQVBPTExPQlNEIC1ETk9MRUFSTiAkKEtGTEFHUykgLVVhZWdpcyIK KworI1ZlcnNpb24gNyBVbml4IChzZWUgY29tbWVudHMgbmVhciB0b3Agb2YgbWFrZWZpbGUpCit2 NzoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFVOSVggVmVyc2lvbiA3Lgor CUBlY2hvIFJlYWQgdGhlIG1ha2VmaWxlIGlmIHlvdSBoYXZlIHRyb3VibGUgd2l0aCB0aGlzLi4u CisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0t RFY3IC1EUFJPQ05BTUU9XFxcIiQoUFJPQylcXFwiIFwKKwktREJPT1ROQU1FPVxcXCIkKEJPT1RG SUxFKVxcXCIgLUROUFJPQ05BTUU9XFxcIiQoTlBST0MpXFxcIiBcCisJLUROUFRZUEU9JChOUFRZ UEUpICQoRElSRUNUKSAtRE9fUkRXUj0yIC1ET19OREVMQVk9MCAtRE9fU0NDU19JRCBcCisJLURO T0xFQVJOICQoS0ZMQUdTKSIKKworI0FUJlQgVU5JWCBTeXN0ZW0gViBSMywgc2lnbmFsKCkgaXMg dm9pZCByYXRoZXIgdGhhbiBpbnQuCisjVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIFVV Q1AuCisjQWRkIHRoZSAtaSBsaW5rIG9wdGlvbiBpZiBuZWNlc3NhcnkuCisjSWYgeW91IGdldCBl cnJvcnMgbGlrZSAid3Nfcm93IHVuZGVmaW5lZCIgaW4gY2t1dGlvLmMsIGFkZCAtRE5PTkFXUy4K K3N5czVyMzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVgg U3lzdGVtIFYgUjMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PTEVBUk4gJChLRkxB R1MpIC1PIiBcCisJIkxOS0ZMQUdTPSIKKworI0FzIGFib3ZlLCBwbHVzIGN1cnNlcy4KK3N5czVy M2M6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3Rl bSBWIFIzICsgY3Vyc2VzLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURDS19DVVJTRVMg LUROT05BV1MgLUROT0xFQVJOIFwKKwkkKEtGTEFHUykgLU8iICJMTktGTEFHUz0iICJMSUJTID0g LWx0ZXJtbGliIgorCisjU3lzdGVtIFYgUjMuMiBmb3IgUENzIGJ1aWx0IG9uIEludGVyYWN0aXZl IFVOSVggU1YvMzg2IFI0LngKKyNidXQgd2l0aCBhbGwgY2FsbHMgdG8gZHVwMigpIGRpc2FibGVk IGJlY2F1c2UgZ2VuZXJpYyBTVlIzIGRvZXMgbm90IGhhdmUgZHVwMi4KKyMgKFRoZSAtbGluZXQg bGlicmFyeSBtaWdodCBub3QgbmVlZCB0byBiZSBpbiB0aGlzIG9uZS4pCitzeXM1cjMyaXM6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3lzdGVtIFYvMzg2IFIzMgorCSQo TUFLRSkgd2VybWl0IENDPSIkKENDKSIgQ0MyPSIkKENDMikiIFwKKwkiQ0ZMQUdTID0gLURTVlIz IC1ERElSRU5UIC1ESERCVVVDUCAtTyAtRE5PQ1NFVFMgLUROT1JFQUxQQVRIIFwKKwktRFVJRF9U PXVzaG9ydCAtREdJRF9UPXVzaG9ydCAtREkzODZJWCAtRFNWUjNKQyAtRENLX0NVUlNFUyAtRE5P TkFXUyBcCisJLURQT1NJWF9KQyAtRENLX1JFRElSIC1EQ0tfUE9MTCAtRERDTEdFVENXRCAtRE5P RkRaRVJPIC1ETk9SRURJUkVDVCBcCisJLUROT1pFWEVDIC1ETk9MRUFSTiAkKEtGTEFHUykiICJM SUJTPS1sY3Vyc2VzIC1sY19zIC1saW5ldCIKKworI1N5c3RlbSBWIFIzLjIgZm9yIFBDcyBidWls dCBvbiBJbnRlcmFjdGl2ZSBVTklYIFNWLzM4NiBSNC54CisjYnV0IHdpdGggYWxsIGNhbGxzIHRv IGR1cDIoKSBkaXNhYmxlZCBiZWNhdXNlIGdlbmVyaWMgU1ZSMyBkb2VzIG5vdCBoYXZlIGR1cDIu CisjV2l0aCBUQ1AvSVAgYWRkZWQuCitzeXM1cjMyaXNuZXQ6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgU3lzdGVtIFYvMzg2IFIzMiArIFRDUC9JUAorCSQoTUFLRSkgd2Vy bWl0IENDPSIkKENDKSIgQ0MyPSIkKENDMikiIFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5U IC1ESERCVVVDUCAtTyAtRE5PQ1NFVFMgLUROT1JFQUxQQVRIIFwKKwktRFVJRF9UPXVzaG9ydCAt REdJRF9UPXVzaG9ydCAtREkzODZJWCAtRFNWUjNKQyAtRENLX0NVUlNFUyAtRE5PTkFXUyBcCisJ LURQT1NJWF9KQyAtRENLX1JFRElSIC1EQ0tfUE9MTCAtRERDTEdFVENXRCAtRE5PRkRaRVJPIC1E Tk9SRURJUkVDVCBcCisJLUROT0xFQVJOIC1ETk9aRVhFQyAtRFRDUFNPQ0tFVCAkKEtGTEFHUyki ICJMSUJTPS1sY3Vyc2VzIC1sY19zIC1saW5ldCIKKworaWNsc3lzNXIzOgorCW1ha2Ugc3lzNXIz IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gS0ZMQUdTPS1ESUNMU1ZSMworCisjQVQmVCBVTklY IFN5c3RlbSBWIFIzLiAgQXMgYWJvdmUsIGJ1dCBubyBBTlNJIHByb3RvdHlwaW5nLgorc3lzNXIz bmE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3Rl bSBWIFIzLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0FOU0kgLUROT0xFQVJOICQo S0ZMQUdTKSAtTyIgXAorCSJMTktGTEFHUz0iCisKKyNBVCZUIFVOSVggU3lzdGVtIFYgUjMsIGZv ciAzQiBjb21wdXRlcnMgd2l0aCBXb2xsb25nb25nIFRDUC9JUC4KK3N5czVyM25ldDNiOgorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTVlIzLzNCL1dvbGxv bmdvbmcuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURXT0xMT05HT05HIC1ETk9MRUFS TiAkKEtGTEFHUykgXAorCS1PIiAiTElCUz0gLWxuZXQgLWxuc2xfcyIgIkxOS0ZMQUdTID0iCisK KyNBVCZUIFVOSVggU3lzdGVtIFYgUjMsIHNpZ25hbCgpIGlzIHZvaWQgcmF0aGVyIHRoYW4gaW50 LgorI1VzZXMgZGlyZW50LmggYW5kIEhvbmV5IERhbkJlciB1dWNwLCBoYXMgPHRlcm1pb3guaD4u CisjSGFzIDx0ZXJtaW94Lmg+IGZvciBSVFMvQ1RTIGZsb3cgY29udHJvbC4KK3N5czVyM3R4Ogor CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBS My4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZM QUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFRFUk1JT1ggLUROT0xFQVJOIFwKKwkk KEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9IgorCisjQVQmVCBVTklYIFN5c3RlbSBWIFIzLCBz aWduYWwoKSBpcyB2b2lkIHJhdGhlciB0aGFuIGludC4KKyNVc2VzIGRpcmVudC5oIGFuZCBIb25l eSBEYW5CZXIgdXVjcCwgaGFzIDx0ZXJtaW94Lmg+LgorI0hhcyA8c3lzL3Rlcm1pb3guaD4gZm9y IFJUUy9DVFMgZmxvdyBjb250cm9sLgorc3lzNXIzc3g6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFIzLi4uJworCSQoTUFLRSkgd2VybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQg LURIREJVVUNQIC1EU1RFUk1JT1ggLUROT0xFQVJOIFwKKwkkKEtGTEFHUykgLWkgLU8iICJMTktG TEFHUyA9IgorCisjQVQmVCBVTklYIFN5c3RlbSBWIFI0LgorI0hhcyA8dGVybWlveC5oPi4KK3N5 czVyNDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lz dGVtIFYgUjQuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURURVJNSU9YIC1ETk9M RUFSTiAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIKKworI0FUJlQgVU5JWCBTeXN0ZW0g ViBSNCB3aXRoIFdvbGxvbmdvbmcgVENQL0lQLgorI0hhcyA8dGVybWlveC5oPi4KK3N5czVyNG5l dDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTeXN0ZW0gViBSNCArIFdv bGxvbmdvbmcgVENQL0lQLi4uJworCUBlY2hvICcgSWYgc29ja2V0cy1saWJyYXJ5IHJvdXRpbmVz IGFyZSBtaXNzaW5nIGF0IGxpbmsgdGltZSwgdGhlbicKKwlAZWNobyAnIHRyeSB0aGUgc3lzNXI0 bmV0MiBlbnRyeS4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xFQVJOIFwKKwkt RFRFUk1JT1ggLURXT0xMT05HT05HICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCisKKyNBcyBh Ym92ZSwgYnV0IG5lZWRzIGxpYnMgaW5jbHVkZWQuCitzeXM1cjRuZXQyOgorCUBlY2hvICcgUExF QVNFIFJFQUQgY2t1aW5zLnR4dCBJRiBZT1UgR0VUIE1JU1NJTkcgSEVBREVSIEZJTEVTLicKKwlA ZWNobyAnIChTZWFyY2ggZm9yIFdPTExPTkdPTkcuLi4pJworCSQoTUFLRSkgc3lzNXI0bmV0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkxJQlM9IC1sc29ja2V0IC1sbnNsIgorCisjQXMgYWJv dmUgcGx1cyBjdXJzZXMuCitzeXM1cjRuZXQyYzoKKwllY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFN5c3RlbSBWIFI0ICsgV29sbG9uZ29uZyBUQ1AvSVAuLi4nCisJQGVjaG8gJyBQ TEVBU0UgUkVBRCBja3VpbnMudHh0IElGIFlPVSBHRVQgTUlTU0lORyBIRUFERVIgRklMRVMuJwor CUBlY2hvICcgKFNlYXJjaCBmb3IgV09MTE9OR09ORy4uLiknCisJJChNQUtFKSB3ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAt REhEQlVVQ1AgLUROT0xFQVJOIFwKKwktRFRFUk1JT1ggLURXT0xMT05HT05HIC1EQ0tfQ1VSU0VT ICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxj dXJzZXMiCisKKyNERUxMIFVOSVggU3lzdGVtIFYgUjQuCisjSGFzIDxzeXMvdGVybWlveC5oPiwg cmVndWxhciBCZXJrZWxleSBzb2NrZXRzIGxpYnJhcnksIGkuZS4gaW4uaCBhbmQgaW5ldC5oCisj YXJlIG5vdCBtaXNwbGFjZWQgaW4gc3lzIChyYXRoZXIgdGhhbiBuZXRpbmV0IGFuZCBhcnBhLCBy ZXNwZWN0aXZlbHkpLgorI1VzZXMgQU5TSSBDIGNvbnN0cnVjdHMsIGFkdmlzb3J5IGZpbGUgbG9j a2luZyBvbiBkZXZpY2VzLCBldGMuCisjV2FybmluZzogLURTVEVSTUlPWCBlbmFibGVzIGhhcmR3 YXJlIGZsb3cgY29udHJvbCAoUlRTL0NUUyksIGJ1dCByZXBvcnRlZGx5CisjdGhpcyBkb2VzIG5v dCB3b3JrIHdpdGggdGhlIG5vcm1hbCBkcml2ZXJzLiAgSG93ZXZlciwgaXQgbWlnaHQgc3RpbGwg d29yaworI29uIG5vbi1EZWxsIHN5c3RlbXMsIG9yIGV2ZW4gRGVsbCBzeXN0ZW1zIHdpdGggZGlm ZmVyZW50IGRyaXZlcnMgaW5zdGFsbGVkLgorZGVsbHN5czVyNDoKKwlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBERUxMIFVOSVggU3lzdGVtIFYgUjQuLi4nCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAt RERFTExfU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgXAorCS1EVENQU09DS0VUIC1EU1RFUk1JT1gg LURDS19QT0xMICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCIgIkxOS0ZMQUdT ID0gLXMiCisKKyNBcyBhYm92ZSwgY3Vyc2VzIHN1cHBvcnQgYWRkZWQuLi4KK2RlbGxzeXM1cjRj OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERFTEwgVU5JWCBTeXN0ZW0g ViBSNC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki Q0ZMQUdTID0gLU8gLURTVlI0IC1EREVMTF9TVlI0IC1ERElSRU5UIC1ESERCVVVDUCBcCisJLURU Q1BTT0NLRVQgLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRENLX1BPTEwgXAorCSQoS0ZMQUdTKSIg IkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIgIkxOS0ZMQUdTID0gLXMi CisKKyNNaW5pbXVtIGludGVyYWN0aXZlOiBBcyBhYm92ZSwgYnV0IHdpdGggZXZlcnkgY29uY2Vp dmFibGUgb3B0aW9uIHJlbW92ZWQuCitkZWxsc3lzNXI0bWk6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgREVMTCBVTklYIFN5c3RlbSBWIFI0Li4uJworCUBlY2hvICdNaW5p bXVtLXNpemUgaW50ZXJhY3RpdmUnCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZSNCAtRERFTExfU1ZSNCAtRERJUkVOVCBcCisJ LVVUQ1BTT0NLRVQgLUROT0NNREwgLUROT1NQTCAtRE5PWE1JVCAtRENLX1BPTEwgXAorCS1ETk9N U0VORCAtRE5PRlJJTExTIC1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyBcCisJ LUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT1NIT1cgLUROT1NFVEtFWSAtRE5PU0VSVkVSIC1ETk9V VUNQIFwKKwktRE5PUFVTSCAtRE5PTURNSFVQIC1ETk9KQyAtRE5PRkRaRVJPIC1ETk9FU0NTRVEg IFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIgorCisjQ29tbWFuZC1saW5lIG9ubHkgdmVy c2lvbi4KK2RlbGxzeXM1cjRtOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IERFTEwgVU5JWCBTeXN0ZW0gViBSNC4uLicKKwlAZWNobyAnQ29tbWFuZC1saW5lIG9ubHknCisJ JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1P IC1EU1ZSNCAtRERFTExfU1ZSNCAtRERJUkVOVCBcCisJLVVUQ1BTT0NLRVQgLUROT0lDUCAtRE5P RlJJTExTIC1ETk9ESUFMIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgXAorCS1ETk9TRVRL RVkgLUROT0VTQ1NFUSAtRE5PSkMgLUROT0ZEWkVSTyAtRENLX1BPTEwgXAorCSQoS0ZMQUdTKSIg IkxOS0ZMQUdTID0gLXMiCisKKyNBVCZUIFVOSVggU3lzdGVtIFYgUjQuCisjSGFzIDxzeXMvdGVy bWlveC5oPi4KK3N5czVyNHN4OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IEFUJlQgVU5JWCBTeXN0ZW0gViBSNC4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAt RFNURVJNSU9YIC1ETk9MRUFSTiBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlM9 JChMSUJTKSIKKworI0FUJlQgVU5JWCBTeXN0ZW0gViBSNC4KKyNIYXMgPHN5cy90ZXJtaW94Lmg+ LCByZWd1bGFyIEJlcmtlbGV5IHNvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFuZCBpbmV0LmgK KyNhcmUgbm90IG1pc3BsYWNlZCBpbiBzeXMgKHJhdGhlciB0aGFuIG5ldGluZXQgYW5kIGFycGEs IHJlc3BlY3RpdmVseSkuCisjVXNlcyBBTlNJIEMgY29uc3RydWN0cywgPHN5cy90ZXJtaW94Lmg+ LCBldGMgZXRjLgorc3lzNXI0c3h0Y3A6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURESVJFTlQgLURIREJV VUNQIFwKKwktRFNURVJNSU9YIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNv Y2tldCAtbG5zbCAkKExJQlMpIiAiTE5LRkxBR1M9IC1zIgorCisjQVQmVCBVTklYIFN5c3RlbSBW IFI0LgorI0FzIGFib3ZlICsgY3Vyc2VzLgorc3lzNXI0c3h0Y3BjOgorCUBlY2hvICdNYWtpbmcg Qy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBSNC4uLicKKwkkKE1BS0Up IHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0 IC1ERElSRU5UIC1ESERCVVVDUCBcCisJLURTVEVSTUlPWCAgLURDS19DVVJTRVMgLURUQ1BTT0NL RVQgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVybWNh cCAkKExJQlMpIiAiTE5LRkxBR1MgPSAtcyIKKworI0FUJlQgVU5JWCBTeXN0ZW0gViBSNC4gIENP TlNFTlNZUyBTVlI0LjItMS4KKyNIYXMgPHN5cy90ZXJtaW94Lmg+LCByZWd1bGFyIEJlcmtlbGV5 IHNvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFuZCBpbmV0LmgKKyNhcmUgbm90IG1pc3BsYWNl ZCBpbiBzeXMgKHJhdGhlciB0aGFuIG5ldGluZXQgYW5kIGFycGEsIHJlc3BlY3RpdmVseSkuCisj VXNlcyBBTlNJIEMgY29uc3RydWN0cywgPHN5cy90ZXJtaW94Lmg+LCBldGMuCisjIEZ1bGxzY3Jl ZW4gLURDS19DVVJTRVMgYWRkZWQgKHdpdGggY3Vyc2VzICYgdGVybWNhcCBsaWJzKQorIyBTdWJt aXNzaW9uIGJ5IFJvYmVydCBXZWluZXIvUHJvZ3JhbW1pbmcgUGx1cywgcndlaW5lckB3YXRzdW4u Y2MuY29sdW1iaWEuZWR1CitzeXM1cjRzeHRjcGY6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBWIFI0Li4uJworCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURESVJFTlQg LURIREJVVUNQIFwKKwktRFNURVJNSU9YIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTICQoS0ZMQUdT KSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtTC91c3IvY2NzL2xpYiAtbGN1cnNlcyAtbHRl cm1jYXAiIFwKKwkiTElCUz0kKExJQlMpIiAiTE5LRkxBR1MgPSAtcyIKKworI1NtYWxsZXN0IHBv c3NpYmxlIHZlcnNpb24gZm9yIFN5c3RlbSBWIFI0CitzNXI0bToKKwlAZWNobyBNaW5pbXVtIHNp emUKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVyNHN4IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJLRkxBR1M9JChLRkxBR1MpIC1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAt RE5PVExPRyBcCisJLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT0lDUCAtRE5PTVNFTkQgLVVUQ1BT T0NLRVQiICJMTktGTEFHUyA9IC1zIgorCisjU21hbGxlc3QgcG9zc2libGUgaW50ZXJhY3RpdmUg dmVyc2lvbiBvZiBhYm92ZQorczVyNG1pOgorCUBlY2hvIE1pbmltdW0gaW50ZXJhY3RpdmUKKwkk KE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVyNHN4IFwKKwkiS0ZMQUdTPS1ETk9TUEwgLUROT1hN SVQgLUROT01TRU5EIC1ETk9GUklMTFMgLUROT1NIT1cgXAorCS1ETk9ESUFMIC1ETk9IRUxQIC1E Tk9ERUJVRyAtRE5PVExPRyAtRE5PU0NSSVBUIC1ETk9DU0VUUyAtRE5PU0VUS0VZIFwKKwktVVRD UFNPQ0tFVCAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIgorCisjQVQmVCBVTklYIFN5c3RlbSBW IFI0LCBoYXMgPHN5cy90ZXJtaW94Lmg+CisjQU5TSSBDIGZ1bmN0aW9uIHByb3RvdHlwaW5nIGRp c2FibGVkLgorc3lzNXI0c3huYToKKwlAZWNobyBObyBBTlNJIEMgcHJvdG90eXBpbmcuLi4KKwkk KE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVyNHN4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJLRkxBR1M9JChLRkxBR1MpIC1ETk9BTlNJIgorCisjU3RyYXR1cyBGVFguCitmdHg6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU3RyYXR1cyBGVFggMy54Li4uJwor CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAt TyAtRFNWUjQgLURGVFggLURESVJFTlQgLURIREJVVUNQIC1EU1RFUk1JT1ggXAorCS1ETk9HRVRV U0VSU0hFTEwgLUROT0xFQVJOICtEQTEuMSAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIg IkxJQlM9JChMSUJTKSIKKworI1N0cmF0dXMgRlRYICsgVENQL0lQLgorZnR4dGNwOgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFN0cmF0dXMgRlRYIDMueC4uLicKKwkkKE1B S0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURT VlI0IC1ERlRYIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRFNURVJN SU9YIC1EVENQU09DS0VUIC1ETk9fRE5TX1NSViArREExLjEgJChLRkxBR1MpIiBcCisJIkxJQlM9 IC1sc29ja2V0IC1sbnNsICQoTElCUykiICJMTktGTEFHUz0gLXMiCisKKyNOQ1IgTVAtUkFTIDIu MDMgb3IgMy4wMgorbXByYXM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig TkNSIE1QLVJBUy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ETkNSTVBSQVMgLURESVJFTlQgLURIREJVVUNQIC1E U1RFUk1JT1ggXAorCS1ETk9HRVRVU0VSU0hFTEwgLURVU0VfRklMRV9fQ05UIC1ETk9MRUFSTiAt RE5PX0ROU19TUlYgJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTID0gLXMiICJMSUJTPSQoTElCUyki CisKKyNOQ1IgTVAtUkFTIDIuMDMgb3IgMy4wMiB3aXRoIFRDUC9JUCBhbmQgY3Vyc2VzCittcHJh c3RjcGM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTkNSIE1QLVJBUyAr IFRDUC9JUCArIGN1cnNlcy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9ICJDRkxBR1M9LURUQ1BTT0NLRVQgXAorCS1EQ0tfQ1VSU0VTIC1EU1ZSNCAtRE5DUk1Q UkFTIC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJNSU9YIC1ETk9MRUFSTiBcCisJLUROT0dFVFVT RVJTSEVMTCAtRE5PX0ROU19TUlYgRFVTRV9GSUxFX19DTlQgLU8gJChLRkxBR1MpIiBcCisJIkxO S0ZMQUdTID0gLXMiICJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgJChM SUJTKSIKKworI1NJTklYLUwgVjUuNDEgLSBpbmNsdWRlcyBjdXJzZXMsIHRjcC9pcCAtIFVzZSB0 aGlzIG9uZSBmb3IgaTM4Ni4KKyNUaGlzIHZlcnNpb24gb2YgU0lOSVggZG9lc24ndCBsaWtlIGZk b3BlbigpIG9yIHBvcGVuKCkuCitzaW5peDU0MToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBTaWVtZW5zL05peGRvcmYgU0lOSVggVjUuNDEvaTM4NicKKwkkKE1BS0UpIGNr Y3Byby4kKEVYVCkgIkNGTEFHUyA9IC1EU0lOSVggLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCBc CisJLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRFNFTEVDVCAtRENLX0FOU0lD IC1ETk9fRE5TX1NSViBcCisJLURTTkk1NDEgLUROT0dFVFVTRVJTSEVMTCAtRE5PTkVUQ01EIC1E Tk9QT1BFTiAta2Fuc2kgLVcwICQoS0ZMQUdTKSIKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTSU5JWCAtRFNWUjQgLURESVJFTlQgLURI REJVVUNQIC1ETk9fRE5TX1NSViAtRE5PUE9QRU4gXAorCS1ERk5GTE9BVCAtRFNURVJNSU9YIC1E Q0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EU0VMRUNUIC1EQ0tfQU5TSUMgXAorCS1EU05JNTQxIC1E Tk9HRVRVU0VSU0hFTEwgLUROT05FVENNRCAta2Fuc2kgLVcwIC1PICQoS0ZMQUdTKSIgXAorCSJM SUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtIiAiTE5LRkxBR1MgPSAt cyIKKworc2luaXg1NDFpOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFHUz0kKEtGTEFH UykiIHNpbml4NTQxCisKKyNTSU5JWCBWNS40MiAtIGluY2x1ZGVzIGN1cnNlcywgdGNwL2lwLCBl dmVyeXRoaW5nIC0gVXNlIHRoaXMgb25lIGZvciBNSVBTLgorIyBBcyBvZiBDLUtlcm1pdCA3LjEs IG9wdGltaXphdGlvbiByZW1vdmVkIC0tIHRha2VzIChsaXRlcmFsbHkpIGZvcmV2ZXIuCitzaW5p eDU0MjoKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZM QUdTID0gLURTSU5JWCAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9fRE5TX1NSViBcCisJ LURGTkZMT0FUIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURTRUxFQ1QgLURD S19BTlNJQyBcCisJLURTTkk1NDIgLUROT0dFVFVTRVJTSEVMTCAta2Fuc2kgLVcwICQoS0ZMQUdT KSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxtIiAiTE5L RkxBR1MgPSAtcyIKKworI1NJTklYIFY1LjQyIGdjYyAtIGluY2x1ZGVzIGN1cnNlcywgdGNwL2lw LCBldmVyeXRoaW5nLgorI1RoaXMgb25lIHdhcyB1c2VkIHRvIGJ1aWxkIHRoZSBQeXJhbWlkLWFy Y2hpdGVjdHVyZSBSTTYwMCB2ZXJzaW9uCisjb24gU0lOSVgtUCA1LjQyIEExMCB3aXRoIGdjYyBi dXQgc2hvdWxkIHdvcmsgZm9yIFNJTklYIDUuNDIgb24gYW55IG90aGVyCisjYXJjaGl0ZWN0dXJl IHdpdGggZ2NjLgorc2luaXg1NDJnOgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gIkNDPWdjYyIgIkNDMj1nY2MiIFwKKwkiQ0ZMQUdTID0gLURTSU5JWCAtRFNWUjQg LURESVJFTlQgLURIREJVVUNQIC1ETk9fRE5TX1NSViBcCisJLURGTkZMT0FUIC1EU1RFUk1JT1gg LURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURTRUxFQ1QgLURDS19BTlNJQyBcCisJLURTTkk1NDIg LUROT0dFVFVTRVJTSEVMTCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxj dXJzZXMgLWx0ZXJtY2FwIC1sbSIgXAorCSJMTktGTEFHUyA9IC1zIgorCisjU0lOSVggVjUuNDIg LSBpbmNsdWRlcyBjdXJzZXMsIHRjcC9pcCwgZXZlcnl0aGluZyAtIFVzZSB0aGlzIG9uZSBmb3Ig SW50ZWwuCisjIChOb3RlOiBTTkkgZGlzY29udGludWVkIEludGVsIHN1cHBvcnQgYWZ0ZXIgNS40 Mi4pCitzaW5peDU0Mmk6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2ll bWVucy9OaXhkb3JmIFNJTklYLVogVjUuNDIuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EU0lOSVggLURTVlI0IC1ERElSRU5UIC1E SERCVVVDUCAtREZORkxPQVQgLURTVEVSTUlPWCBcCisJLURDS19DVVJTRVMgLURUQ1BTT0NLRVQg LURTRUxFQ1QgLURDS19BTlNJQyAtRE5PX0ROU19TUlYgLWthbnNpIFwKKwktRFNOSTU0MiAkKEtG TEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIC1sbSIg XAorCSJMTktGTEFHUyA9IC1zIgorCisjU2llbWVucyBOaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40 MyAtIGluY2x1ZGVzIGN1cnNlcywgdGNwL2lwLCBldmVyeXRoaW5nOgorIyAuIGdldHRpbWVvZmRh eSgpIHN1ZGRlbmx5IGhhcyBvbmx5IG9uZSBhcmcgaW5zdGVhZCBvZiB0d28gKEdUT0RPTkVBUkcp LgorIyAuIFRoZSBzeW50YXggb2YgdGhlIE9saW1pdCBzcGVjaWZpZXIgY2hhbmdlZC4KKyMgLiBU aGUgbmFtZSB3YXMgY2hhbmdlZCBmcm9tIFNJTklYIHRvIFJlbGlhbnQgVU5JWCBpbiB2ZXJzaW9u IDUuNDNDLgorc25pNTQzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNp ZW1lbnMvTml4ZG9yZiBSZWxpYW50IFVOSVggVjUuNDMnCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EU0lOSVggLURTTkk1NDMgLURTVlI0 IC1ERElSRU5UIC1ESERCVVVDUCBcCisJLURTVEVSTUlPWCAtRENLX0NVUlNFUyAtRFRDUFNPQ0tF VCAtRFNFTEVDVCAtRENLX0FOU0lDIC1ER1RPRE9ORUFSRyBcCisJLUROT19ETlNfU1JWIC1rYW5z aSAtVzAgLU8gLUYgT2xpbWl0LDMxMDAgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1s bnNsIC1sY3Vyc2VzIC1sdGVybWNhcCIgIkxOS0ZMQUdTID0gLXMiCisKKyNTaWVtZW5zIE5peGRv cmYgUmVsaWFudCBVTklYIFY1LjQ0IC0gTGlrZSA1LjQzIGJ1dCB3aXRoIGRpZmZlcmVudCBiYW5u ZXIuCitzbmk1NDQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2llbWVu cy9OaXhkb3JmIFJlbGlhbnQgVU5JWCBWNS40NCcKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTSU5JWCAtRFNOSTU0NCAtRFNWUjQgLURE SVJFTlQgLURIREJVVUNQIFwKKwktRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1E U0VMRUNUIC1EQ0tfQU5TSUMgLURHVE9ET05FQVJHIFwKKwktRE5PX0ROU19TUlYgLWthbnNpIC1X MCAtTyAtSyBPbGltaXQsMzEwMCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wg LWxjdXJzZXMgLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAtcyIKKworI0NvbW1vZG9yZSBBbWlnYSB3 aXRoIEFUJlQgVU5JWCBTeXN0ZW0gViBSNCBhbmQgVENQL0lQIHN1cHBvcnQuCisjSGFzIDxzeXMv dGVybWlveC5oPi4KK3N2cjRhbWlnYW5ldDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBBbWlnYSBTVlI0ICsgVENQL0lQLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIkNDPWdjYyIgIkNDMj1nY2MiIFwKKwkiQ0ZMQUdTID0gLU8gLURT VlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJNSU9YIFwKKwktRFRDUFNPQ0tFVCAtRENLX0NV UlNFUyAkKEtGTEFHUykiICJMTktGTEFHUyA9IC1zIiBcCisJIkxJQlMgPSAtbHNvY2tldCAtbG5z bCAtbHRlcm1saWIiCisKKyNTQ08gKE5vdmVsbCAoVW5pdmVsKSkgVW5peFdhcmUgMS54IG9yIDIu MCwgbm8gVENQL0lQLgorI1RoaXMgYXNzdW1lcyB0aGUgTm92ZWxsIFNESyAxLjAsIHdoaWNoIGhh cyA8c3lzL3Rlcm1pb3guaD4uCisjVW5peFdhcmUgdXNlcnMgd2l0aCB0aGUgIlByaW1lIFRpbWUg RnJlZXdhcmUiIENELVJPTSBTREsgd2lsbCBwcm9iYWJseSBoYXZlCisjdG8gdXNlIHRoZSBzeXM1 cjQgZW50cnkgKG5vIHRlcm1pb3guaCBmaWxlLCBzbyBubyBoYXJkd2FyZSBmbG93IGNvbnRyb2wp LgorI0NoYW5nZSAtRFNFTEVDVCB0byAtRENLX1BPTEwgaWYgLURTRUxFQ1QgY2F1c2VzIHByb2Js ZW1zLgorIyBOT1RFOiBVbml4d2FyZSAxLnggYnVpbGRzIGhhdmUgbm90IGJlZW4gdHJpZWQgaW4g Qy1LZXJtaXQgNy4wLgordW5peHdhcmU6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXM1cjRz eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1ET0xEX1VOSVhXQVJFIC1E Q0tfTkVXVEVSTSAtRFNFTEVDVCAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRE5PU1lTTE9HICQoS0ZM QUdTKSIgIkxJQlM9LWxjcnlwdCIKKworI1VuaXhXYXJlIDEueCBvciAyLjAgd2l0aCBUQ1AvSVAg YW5kIGN1cnNlcy4KKyNmb3JrKCktYmFzZWQgQ09OTkVDVCAtIG5vIGhpZ2ggc2VyaWFsIHNwZWVk cy4KK3VuaXh3YXJlbmV0YzoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czVyNHN4dGNwYyBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1ET0xEX1VOSVhXQVJFIC1EQ0tf TkVXVEVSTSAtRFNFTEVDVCAtRE5PR0VUVVNFUlNIRUxMIFwKKwktRE5PU1lTTE9HICQoS0ZMQUdT KSIgIkxJQlM9LWxjcnlwdCAtbHJlc29sdiIKKwordXcxMDoKKwkkKE1BS0UpIHVuaXh3YXJlbmV0 YyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1M9JChLRkxBR1MpIgorCisjVGhpcyBp cyBmb3IgVW5peHdhcmUgMi4wLnggb25seSAtIHVzZSB1bml4d2FyZTIxIGZvciBVVyAyLjEueC4K KyNIYXMgc3BlY2lhbCBsaWJyYXJ5IHNlYXJjaCBhbmQgZW5hYmxlcyBzcGVjaWFsIGtsdWRnZSBh cm91bmQgbGlicmFyeQorI2ZvdWx1cCByZWdhcmRpbmcgdmZvcmsoKSAod2hpY2ggS2VybWl0IGRv ZXNuJ3QgdXNlKS4gIEZvcmNlcyBQT1NJWC1zdHlsZQorI2hhbmd1cC4KK3VuaXh3YXJlMjA6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVW5peFdhcmUgMi4wLnguLi4nCisJ JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1P IC1ET0xEX1VOSVhXQVJFIC1EVU5JWFdBUkUyIC1EU0VMRUNUIC1EU1ZSNCAtRERJUkVOVCBcCisJ LURIREJVVUNQIC1EQklHQlVGT0sgLUROT0dFVFVTRVJTSEVMTCAtRFNURVJNSU9YICAtRENLX0NV UlNFUyBcCisJLURUQ1BTT0NLRVQgLURVVzIwMCAtREZORkxPQVQgLURDS19ORVdURVJNIC1ETk9T WVNMT0cgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sY3Vyc2VzIC1sdGVy bWNhcCAtbGNyeXB0IC1sZ2VuIC1sbSAtbHJlc29sdiIgXAorCSJMTktGTEFHUyA9IC1zIgorCit1 dzIwOgorCSQoTUFLRSkgdW5peHdhcmUyMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxB R1M9JChLRkxBR1MpIgorCisjQWRkcyBiaWcgYnVmZmVycyAoImxhcmdlIG1lbW9yeSBtb2RlbCIp IC0gb3RoZXJ3aXNlIHRoZSBzYW1lIGFzIFVuaXhXYXJlIDEueC4KK3VuaXh3YXJlMjE6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVW5peFdhcmUgMi4xLnguLi4nCisJJChN QUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1E VU5JWFdBUkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JVRk9LIFwK KwktRE5PU1lTTE9HIC1EU1RFUk1JT1ggIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIFwKKwktRENL X05FV1RFUk0gLURGTkZMT0FUIC1EVU5JWFdBUkUyICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNv Y2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNvbHYgXAorCSQo TElCUykiICJMTktGTEFHUyA9IC1zIgorCisjVW5peHdhcmUgMi4xLjAKK3V3MjE6CisJJChNQUtF KSB1bml4d2FyZTIxIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0kKEtGTEFHUyki CisKKyNVbml4d2FyZSAyLjEuMwordXcyMTM6CisJJChNQUtFKSB1bml4d2FyZTIxIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURVU0VfRklMRV9fQ05UICQoS0ZMQUdTKSIK KworI1VuaXh3YXJlIDIuMSB3aXRoIElLU0Qgc3VwcG9ydAordXcyMWlrc2Q6CisJJChNQUtFKSB1 bml4d2FyZTIxIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURDS19TSEFE T1cgJChLRkxBR1MpIiAiTElCUz0gLWxnZW4iCisKKyNVbml4V2FyZSA3IHdpdGggdGNbZ3NdZXRz cGVlZCgpIGhpZ2ggc2VyaWFsIHNwZWVkcyAmIHNlbGVjdCgpLWJhc2VkIENPTk5FQ1QKKyNhbmQg YXMgb2YgQy1LZXJtaXQgOC4wLjIxMiwgbGFyZ2UgZmlsZSBzdXBwb3J0IChMRlMpLgorI05PVEU6 IFRoaXMgaXMgdGhlIG9uZSB3ZSB1c2UuCit1bml4d2FyZTd0OgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFVuaXhXYXJlIDcgd2l0aCBQT1NJWCBpL28uLi4nCisJJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EVU5J WFdBUkUgLURTRUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JVRk9LIFwKKwkt REZORkxPQVQgLUROT0dFVFVTRVJTSEVMTCAtRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQU09D S0VUIC1EUE9TSVggXAorCS1EVVc3IC1EVVNFVENTRVRTUEVFRCAtRENLX05FV1RFUk0gLUROT0xT VEFUIC1ERENMVElNRVZBTCBcCisJLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9C SVRTPTY0IC1ETkVFRE1ETURFRlMgJChLRkxBR1MpIiBcCisJIkxJQlM9LWxzb2NrZXQgLWxuc2wg LWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgLWxtIC1scmVzb2x2ICQoTElCUykiIFwKKwkiTE5L RkxBR1MgPSAtcyIKKworI1VuaXhXYXJlIDcgLSBzZWxlY3QoKS1iYXNlZCBDT05ORUNUIC0gbm8g UE9TSVggaS9vIC0gbm8gaGlnaCBzZXJpYWwgc3BlZWRzLgorI0luIG90aGVyIHdvcmRzLCBqdXN0 IGxpa2UgdGhlIFVuaXhXYXJlIDEgYW5kIDIgYnVpbGRzLgordW5peHdhcmU3eDoKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSA3Li4uJworCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFVOSVhXQVJF IC1EU0VMRUNUIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURCSUdCVUZPSyBcCisJLURVVzcg LUROT0dFVFVTRVJTSEVMTCAtRFNURVJNSU9YIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1ETk9M U1RBVCBcCisJLURGTkZMT0FUIC1EQ0tfTkVXVEVSTSAkKEtGTEFHUykiIFwKKwkiTElCUz0tbHNv Y2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCAtbG0gLWxyZXNvbHYgJChMSUJT KSIgXAorCSJMTktGTEFHUyA9IC1zIgorCisjVW5peFdhcmUgNyB3aXRoIFBPU0lYIGNmc2V0W29p XXNwZWVkKCkgdG8gYWxsb3cgaGlnaCBzZXJpYWwgc3BlZWRzLgorIyhidXQgdGhlIGhpZ2ggc3Bl ZWRzIGRvbid0IHdvcmspCit1bml4d2FyZTdwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIFVuaXhXYXJlIDcgd2l0aCBQT1NJWCBpL28uLi4nCisJJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EVU5JWFdBUkUgLURT RUxFQ1QgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtREJJR0JVRk9LIFwKKwktRFVXNyAtRE5P R0VUVVNFUlNIRUxMIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURQT1NJWCBc CisJLURGTkZMT0FUIC1EQ0tfTkVXVEVSTSAtRE5PTFNUQVQgJChLRkxBR1MpIiBcCisJIkxJQlM9 LWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgLWxtIC1scmVzb2x2ICQo TElCUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIKKworIyBVbml4V2FyZSA3IGJ1aWx0IHdpdGggZ2Nj IC0gVGhpcyBkb2VzIG5vdCB3b3JrIGF0IGFsbC4uLgorIyBSZXBvcnRlZGx5IGdjYyAyLjguMSBp cyBicm9rZW4gb24gVW5peHdhcmUgNy4gIFRyeSBlZ2NzPwordW5peHdhcmU3ZzoKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBVbml4V2FyZSA3IHdpdGggZ2NjLi4uJworCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDQyA9IGdjYyIgIkND MiA9IGdjYyIgIkxOS0ZMQUdTID0gLXMgLXNobGliIgorCSJDRkxBR1MgPSAtTyAtRFVOSVhXQVJF IC1EU0VMRUNUIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURCSUdCVUZPSyBcCisJLURVVzcg LUROT0dFVFVTRVJTSEVMTCAtRFNURVJNSU9YICAtRENLX0NVUlNFUyAtRFRDUFNPQ0tFVCAtRE5P TFNUQVQgXAorCS1ERk5GTE9BVCAtRENLX05FV1RFUk0gJChLRkxBR1MpIiBcCisJIkxJQlM9LWxz b2NrZXQgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIC1sY3J5cHQgLWxtIC1scmVzb2x2ICQoTElC UykiIFwKKwkiTE5LRkxBR1MgPSAtcyIKKwordW5peHdhcmU3OgorCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgIktGTEFHUz0kKEtGTEFHUykiIHVuaXh3YXJlN3QgXAorCUtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0KKwordXc3OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFHUz0kKEtGTEFH UykiIHVuaXh3YXJlN3QgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI1NDTyBPcGVu VU5JWCA4LjAKK291ODoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBPcGVu IFVOSVggOC4uLicKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiICJLRkxBR1M9LURPVTggJChLRkxB R1MpIiB1bml4d2FyZTd0IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNVbml4V2Fy ZSA3IHdpdGggT3BlblNTTAordXc3c3NsIHV3Nytzc2w6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgVW5peFdhcmUgNyBhbmQgT3BlblNTTC4uLicKKwkkKE1BS0UpIHhlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURDS19BVVRIRU5U SUNBVElPTiAtRENLX1NTTCAtRENLX1NIQURPVyBcCisJLURVTklYV0FSRSAtRFNFTEVDVCAtRFNW UjQgLURESVJFTlQgLURIREJVVUNQIC1EQklHQlVGT0sgXAorCS1ERk5GTE9BVCAtRE5PR0VUVVNF UlNIRUxMIC1EU1RFUk1JT1ggLURDS19DVVJTRVMgLURUQ1BTT0NLRVQgLURQT1NJWCBcCisJLURV VzcgLURVU0VUQ1NFVFNQRUVEIC1EQ0tfTkVXVEVSTSAtRE5PTFNUQVQgLUREQ0xUSU1FVkFMIFwK KwkkKFNTTElOQykgJChLRkxBR1MpIiBcCisJIkxJQlM9LWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMg LWx0ZXJtY2FwIC1sY3J5cHQgLWxtIC1scmVzb2x2IFwKKwktbGdlbiAtbGN1ZGs3MCAkKFNTTExJ QikgLWxzc2wgLWxjcnlwdG8gJChMSUJTKSIgXAorCSJMTktGTEFHUyA9IC1zIgorCisjQXMgYWJv dmUgYnV0IGluY2x1ZGVzIFNoYWRvdyBwYXNzd29yZCBzdXBwb3J0IG5lZWRlZCBmb3IgSUtTRC4K K3V3N2lrc2Q6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiAiS0ZMQUdTPS1EQ0tfU0hBRE9XICQo S0ZMQUdTKSIgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkxJQlM9IC1sZ2VuIiB1bml4 d2FyZTd0CisKKyNBcyBhYm92ZSBidXQgbGlua3Mgd2l0aCBzdGF0aWMgQVBJIGZvciByZWFscGF0 aCgpIHNvIGEgYmluYXJ5IGJ1aWx0Cisjd2l0aCB0aGlzIHRhcmdldCBvbiBVVzcuMSB3aWxsIGFs c28gd29yayBvbiA3LjAuICBSZXF1aXJlcyBTQ08gVURLCisjcmF0aGVyIHRoYW4gdGhlIHN0b2Nr IGNvbXBpbGVyLgordXc3aWtzZHVkazoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiICJLRkxBR1M9 LURDS19TSEFET1cgJChLRkxBR1MpIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiTElC Uz0gLWxnZW4gLWxjdWRrNzAiIHVuaXh3YXJlN3QKKworI0VTSVggU1ZSNC4wLjMgb3IgNC4wNCB3 aXRoIFRDUC9JUCBzdXBwb3J0LgorI0hhcyA8c3lzL3Rlcm1pb3guaD4sIEFOU0kgQyBmdW5jdGlv biBwcm90b3R5cGluZyBkaXNhYmxlZC4KKyNBZGQgLW00ODYgdG8gQ0ZMQUdTIGlmIGRlc2lyZWQu Citlc2l4cjQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRVNJWCBTVlI0 ICsgVENQL0lQLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9BTlNJIFwKKwkt RFNURVJNSU9YIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiIFwKKwkiTElC UyA9IC1sc29ja2V0IC1sbnNsIgorCisjQVQmVCBVTklYIFN5c3RlbSBWIFI0LgorI0hhcyA8c3lz L3Rlcm1pb3guaD4sIFdvbGxvbmdvbmcgV0lOL1RDUCBUQ1AvSVAuCitzeXM1cjRzeG5ldDoKKwlA ZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQu Li4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH UyA9IC1PIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgXAorCS1EU1RFUk1JT1ggLURXT0xMT05H T05HICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gLXMiCisKKyNBVCZUIFVOSVggU3lzdGVtIFYgUjQs IG5vIDx0ZXJtaW8ueD4gb3IgPHN5cy90ZXJtaW8ueD4uCitzeXM1cjRueDoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQuLi4nCisJJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1E U1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0xFQVJOICQoS0ZMQUdTKSIgXAorCSJMTktGTEFH UyA9IC1zIgorCisjQVQmVCBVTklYIFN5c3RlbSBWIFI0LCBubyA8dGVybWlvLng+IG9yIDxzeXMv dGVybWlvLng+LCBjdXJzZXMsIFRDUC9JUC4KK3N5czVyNG54bmV0YzoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIFYgUjQuLi4nCisJJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EU1ZS NCAtRERJUkVOVCAtREhEQlVVQ1AgXAorCS1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUICQoS0ZMQUdT KSIgXAorCSJMSUJTID0gLWxjdXJzZXMgLWxzb2NrZXQgLWxuc2wgLWx0Y3BpcCIgXAorCSJMTktG TEFHUyA9IC1zIgorCisjQVQmVCBVTklYIFN5c3RlbSBWIFI0LCBubyA8dGVybWlvLng+IG9yIDxz eXMvdGVybWlvLng+LCBXb2xsb25nb25nIFRDUC9JUC4KK3N5czVyNG54dHdnOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0gViBSNC4uLicKKwkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8g LURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFdPTExPTkdPTkcgJChLRkxBR1MpIgorCSJMTktG TEFHUyA9IC1zIgorCisjSUNMIFVOSVggU3lzdGVtIFYgUjQuKERSUyBOL1gpIHZlcnNpb24gOi0K KyNVTklYIFN5c3RlbSBWIFJlbGVhc2UgNC4wIElDTCBEUlMgNjAwMCAoU1BBUkMpCisjRFJTL05Y IDYwMDAgU1ZSNCBWZXJzaW9uIDUgIExldmVsIDEgIEluY3JlbWVudCA0CisjSGFzIDxzeXMvdGVy bWlveC5oPiwgcmVndWxhciBCZXJrZWxleSBzb2NrZXRzIGxpYnJhcnksIGkuZS4gaW4uaCBhbmQg aW5ldC5oCisjYXJlIG5vdCBtaXNwbGFjZWQgaW4gc3lzIChyYXRoZXIgdGhhbiBuZXRpbmV0IGFu ZCBhcnBhLCByZXNwZWN0aXZlbHkpLgorI1VzZXMgQU5TSSBDIGNvbnN0cnVjdHMsIGFkdmlzb3J5 IGZpbGUgbG9ja2luZyBvbiBkZXZpY2VzLCBldGMuCisjUmVtb3ZlIC1sbnNsIGlmIGl0IGNhdXNl cyB0cm91YmxlLgoraWNsc3lzNXI0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIElDTCBVTklYIFN5c3RlbSBWIFI0IChEUlMgTi9YKScKKwkkKE1BS0UpIHhlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURTVlI0IC1ESUNMX1NWUjQg LURESVJFTlQgLURIREJVVUNQIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EU1RFUk1JT1ggLURUQ1BT T0NLRVQgJChLRkxBR1MpIiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1scmVzb2x2ICIgIkxO S0ZMQUdTID0gLXMiCisKKyNBcyBhYm92ZSBidXQgZm9yIERSUy9OWCA0LjJNUCA3TVBsdXMuCitp Y2xzeXM1cjRtKzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJQ0wgVU5J WCBTeXN0ZW0gViBSNCBEUlMvTlggNC4yTVArJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURJQ0xfU1ZSNCAtRERJUkVO VCAtREhEQlVVQ1AgLUROT0lLU0QgXAorCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgJChLRkxBR1Mp IiBcCisJIkxJQlM9IC1sc29ja2V0IC1sbnNsIC1sbSAtbGMgLWcgLWxnZW4gIiAiTE5LRkxBR1Mg PSAtcyIKKworI0FzIGFib3ZlIGJ1dCBmb3IgRFJTL05YIDQuMk1QIDdNUGx1cyB3aXRoIElLU0Qg c3VwcG9ydC4KK2ljbHN5czVyNG0raWtzZDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBJQ0wgVU5JWCBTeXN0ZW0gViBSNCBEUlMvTlggNC4yTVArJworCSQoTUFLRSkgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWUjQgLURJ Q0xfU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBcCisJLURTVEVSTUlP WCAtRFRDUFNPQ0tFVCAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxtIC1s YyAtZyAtbGdlbiAtbHJlc29sdiAiICJMTktGTEFHUyA9IC1zIgorCitpY2xzeXM1cjRfNDg2Ogor CSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgaWNsc3lzNXI0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0KKworI0RhdGEgR2VuZXJhbCBERy9VWCA0LjMwIChTeXN0ZW0gViBSMykgZm9yIERHIEFWaWlP Tiwgd2l0aCBUQ1AvSVAgc3VwcG9ydC4KK2RndXg0MzA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgREcgQVZpaU9OIERHL1VYIDQuMzAuLi4nCisJJChNQUtFKSB4ZXJtaXQg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EREdVWDQzMCAtRFNW UjMgLURESVJFTlQgLURUQ1BTT0NLRVQgXAorCS1ETk9JTkFERFJYIC1ETk9HRVRVU0VSU0hFTEwg JChLRkxBR1MpIgorCisjRGF0YSBHZW5lcmFsIERHL1VYIDQuMzAgZm9yIERHIEFWaWlPTiwgd2l0 aCBUQ1AvSVAgc3VwcG9ydCB3aXRoIEJTRGlzbXMuCitkZ3V4NDMwYnNkOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFWaWlPTiBERy9VWCA0LjMwLi4uJworCSQoTUFL RSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRERH VVg0MzAgLURfQlNEX1NPVVJDRSAtREJTRDQgXAorCS1ETk9JTkFERFJYIC1EVENQU09DS0VUIC1E Tk9HRVRVU0VSU0hFTEwgJChLRkxBR1MpIgorCisjRGF0YSBHZW5lcmFsIERHL1VYIDUuNCAoU3lz dGVtIFYgUjQpIGZvciBERyBBVmlpT04sIHdpdGggVENQL0lQIHN1cHBvcnQuCisjQWRkIC1sc29j a2V0IC1sbnNsIGlmIGluZXRfYWRkciBjb21lcyB1cCBtaXNzaW5nLi4uCisjSG1tbSAtIEkgcmVh bGx5IHRoaW5rIENLX1BPTEwgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGlzIG9uZSBpbiB3aGljaCBj YXNlCisjdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGRndXg1NDAgYW5kIGRndXg1NDBp LgorZGd1eDU0MDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERyBBVmlp T04gREcvVVggNS40MC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTID0gLU8gLURER1VYNTQwIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PSU5B RERSWCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX1BPTEwgLUROT0dFVFVTRVJTSEVM TCAkKEtGTEFHUykiCisKKyNEYXRhIEdlbmVyYWwgREcvVVggNS40MCAoU3lzdGVtIFYgUjQpIGZv ciBJbnRlbCBBVmlpT04sIHdpdGggVENQL0lQIHN1cHBvcnQuCitkZ3V4NTQwaToKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERyBBVmlpT04gREcvVVggNS40MC4uLicKKwkk KE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8g LURER1VYNTQwIC1ERElSRU5UIC1ESERCVVVDUCAtRE5PSU5BRERSWCBcCisJLURTVEVSTUlPWCAt RFRDUFNPQ0tFVCAtRE5PR0VUVVNFUlNIRUxMICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxzb2Nr ZXQgLWxuc2wiCisKK2RndXg1NDoKKwltYWtlIGRndXg1NDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfQorCisjRGF0YSBHZW5lcmFsIERHL1VYIDUuNCAoPSBTeXN0ZW0gViBSNCkgZm9yIERHIEFW aWlPTiwgd2l0aCBUQ1AvSVAgc3VwcG9ydC4KKyMgQW5kIGN1cnNlcy4KK2RndXg1NDBjOgorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFWaWlPTiBERy9VWCA1LjQuLi4n CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9 IC1PIC1EREdVWDU0MCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0lOQUREUlggXAorCS1EU1RFUk1J T1ggLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hFTEwg XAorCSQoS0ZMQUdTKSIgIkxJQlM9IC1sY3Vyc2VzOCAtbHRlcm1jYXAiICJMTktGTEFHUyA9IC1z IgorCisjQXMgYWJvdmUgYnV0IGZvciBJbnRlbCAtIG9ubHkgZGlmZmVyZW5jZSBpcyBuYW1lIGxp YnJhcnkgbmFtZXMuCitkZ3V4NTQwaWM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgREcgQVZpaU9OIERHL1VYIDUuNDAuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EREdVWDU0MCAtRERJUkVOVCAtREhE QlVVQ1AgLUROT0lOQUREUlggXAorCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJTRVMg LURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hFTEwgXAorCSQoS0ZMQUdTKSIgIkxJQlMgPSAtbHNv Y2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiCisKK2RndXg1NGM6CisJbWFrZSBkZ3V4NTQw YyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNERy9VWCA1LjRSMy4xMAorZGd1eDU0MzEw OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERHIEFWaWlPTiBERy9VWCA1 LjRSMy4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki Q0ZMQUdTID0gLURER1VYNTQwIC1EREdVWDU0MzEwIC1ERElSRU5UIC1ESERCVVVDUCAtRFNFTEVD VCBcCisJLURTVEVSTUlPWCAtRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRENLX05FV1RFUk0JLURO T0dFVFVTRVJTSEVMTCBcCisJLUROT0lOQUREUlggJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXM4 IC1sdGVybWNhcCIgIkxOS0ZMQUdTID0gLXMiCisKKyNERy9VWCA1LjRSNC4xMCAtIEluY2x1ZGVz IGV2ZXJ5dGhpbmcuCitkZ3V4NTQ0MTA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgREcvVVggNS40UjQuMTAuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EREdVWDU0MCAtRERHVVg1NDQxMCAtRERJUkVO VCAtREhEQlVVQ1AgLURTRUxFQ1QgXAorCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJT RVMgLURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1ETk9JTkFERFJYICQoS0ZMQUdT KSIgIkxJQlMgPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNERy9VWCA1 LjRSNC4xMSAtIEluY2x1ZGVzIGV2ZXJ5dGhpbmcuCitkZ3V4NTQ0MTE6CisJQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcvVVggNS40UjQuMTEuLi4nCisJJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EREdVWDU0MCAt RERHVVg1NDQxMSAtRERJUkVOVCAtREhEQlVVQ1AgLURTRUxFQ1QgXAorCS1EU1RFUk1JT1ggLURU Q1BTT0NLRVQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1E Tk9JTkFERFJYICQoS0ZMQUdTKSIgIkxJQlMgPSAtbHNvY2tldCAtbG5zbCAtbGN1cnNlcyAtbHRl cm1jYXAiCisKKyNERy9VWCA1LjRSNC4yMCAtIEluY2x1ZGVzIGV2ZXJ5dGhpbmcuCitkZ3V4NTQ0 MjA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgREcvVVggNS40UjQuMjAu Li4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH UyA9IC1PIC1EREdVWDU0MCAtRERHVVg1NDQyMCAtRERJUkVOVCAtREhEQlVVQ1AgLURTRUxFQ1Qg XAorCS1EU1RFUk1JT1ggLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9H RVRVU0VSU0hFTEwgXAorCS1ETk9JTkFERFJYICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxzb2Nr ZXQgLWxyZXNvbHYgLWxuc2wgLWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjU2lsaWNvbiBHcmFwaGlj cyBTeXN0ZW0gViBSMyB3aXRoIEJTRCBmaWxlIHN5c3RlbSAoSVJJUykKK2lyaXM6CisJQGVjaG8g TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggcHJlLTMu My4uLgorCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxB R1MgPSAtTyAtRFNWUjMgLURMT05HRk4gLUROT0xFQVJOICQoS0ZMQUdTKSAtSS91c3IvaW5jbHVk ZS9ic2QiIFwKKwkiTElCUyA9IC1sYnNkIgorCisjU2lsaWNvbiBHcmFwaGljcyBJUklTIFN5c3Rl bSBWIFIzCitpcml4MzM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2ls aWNvbiBHcmFwaGljcyBJUklYIDMuMy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRE5P TEVBUk4gJChLRkxBR1MpIC1PIiBcCisJIkxOS0ZMQUdTID0gLXMiCisKKyNTaWxpY29uIEdyYXBo aWNzIElyaXMgSW5kaWdvIHdpdGggSVJJWCA0LjAuMCBvciA1LjAuLi4KKyNTdHJpY3QgQU5TSSBD IGNvbXBpbGF0aW9uLCBUQ1AvSVAgc3VwcG9ydCBpbmNsdWRlZAoraXJpeDQwOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJWCA0LjAuLi4n CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9 IC1ESVJJWDQwIC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURQV0lEX1Q9dWlkX3QgXAorCS1E Q0tfQU5TSUMgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1PIC1PbGltaXQgMTYwMCAtSS91c3IvaW5j bHVkZS9ic2QiIFwKKwkiTE5LRkxBR1MgPSAtcyIKKworI0FzIGFib3ZlLCBidXQgd2l0aCBmdWxs c2NyZWVuIGRpc3BsYXkgKGN1cnNlcykgYW5kIFN1biBZZWxsb3cgUGFnZXMgc3VwcG9ydC4KKyNO T1RFOiBJUklYIHZlcnNpb25zIHByaW9yIHRvIDUgcnVuIENPRkYgYmluYXJpZXMuCitpcml4NDB5 cGM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU2lsaWNvbiBHcmFwaGlj cyBJUklYIDQuMC4nCisJQGVjaG8gJ0luY2x1ZGVzIGZ1bGxzY3JlZW4gZmlsZSBkaXNwbGF5IGFu ZCBTdW4gWWVsbG93IFBhZ2VzLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJDRkxBR1MgPSAtRElSSVg0MCAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQ IC1EQ0tfQ1VSU0VTIFwKKwktRFBXSURfVD11aWRfdCAtRENLX0FOU0lDIC1EVENQU09DS0VUICQo S0ZMQUdTKSBcCisJLU8gLU9saW1pdCAxNjAwIC1JL3Vzci9pbmNsdWRlL2JzZCIgXAorCSJMSUJT ID0gLWxjdXJzZXMgLWxzdW4iICJMTktGTEFHUyA9IC1zIgorCisjIFNpbGljb24gR3JhcGhpY3Mg SXJpcyBTZXJpZXMgNEQvKiwgSVJJWCA0LjAueCwgLU80IHVjb2RlIG9wdGltaXplZC4KKyMgSHVn ZSB0ZW1wb3JhcnkgZmlsZSBzcGFjZSBuZWVkZWQgZm9yIHVjb2RlIG9wdGltaXplci4gIElmIHlv dSBnZXQgYW4gZXJyb3IKKyMgbGlrZSAidWdlbjogaW50ZXJuYWwgZXJyb3Igd3JpdGluZyB0byAv dG1wL2N0bWNhMDg3Nzc6IEVycm9yIDAiLCBkZWZpbmUgdGhlCisjIHRoZSBUTVBESVIgZW52aXJv bm1lbnQgdmFyaWFibGUgdG8gcG9pbnQgdG8gYSBmaWxlIHN5c3RlbSB0aGF0IGhhcyBtb3JlCisj IHNwYWNlIGF2YWlsYWJsZSwgZS5nLiAic2V0ZW52IFRNUERJUiAvdXNyL3RtcCIuCitpcml4NDB1 OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3Mg SVJJWCA0LjAuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUyA9IC1ESVJJWDQwIC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLURQV0lEX1Q9 dWlkX3QgXAorCS1EQ0tfQU5TSUMgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1PNCAtT2xpbWl0IDE2 MDAiIFwKKwkiTE5LRkxBR1M9LU80IC1PbGltaXQgMTYwMCAtcyIgIkVYVD11IgorCisjIEFzIGFi b3ZlLCB3aXRoIEN1cnNlcyBTdXBwb3J0IGFkZGVkCitpcml4NDB1YzoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNC4wLi4uJworCSQo TUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRElS SVg0MCAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1EUFdJRF9UPXVpZF90IFwKKwktRENLX0FO U0lDIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtTzQgLU9saW1pdCAxNjAwIiBc CisJIkxOS0ZMQUdTPS1PNCAtT2xpbWl0IDE2MDAgLXMiICJFWFQ9dSIgIkxJQlM9IC1sY3Vyc2Vz IC1sdGVybWNhcCIKKworI1NpbGljb24gR3JhcGhpY3MgSVJJWCA1LnguCisjWWVsbG93IFBhZ2Vz IGFuZCBDdXJzZXMgc3VwcG9ydCBpbmNsdWRlZC4KKyNJUklYIHZlcnNpb24gNS54IGNhbiBydW4g Q09GRiBvciBFTEYgYmluYXJpZXMuCitpcml4NTE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgU2lsaWNvbiBHcmFwaGljcyBJUklYIDUueCcKKwlAZWNobyAnSW5jbHVkZXMg ZnVsbHNjcmVlbiBmaWxlIGRpc3BsYXkgYW5kIFllbGxvdyBQYWdlcy4uLicKKwlAZWNobyAnQWRk IC1taXBzPG4+IHRvIENGTEFHUyBzcGVjaWZ5IGEgcGFydGljdWxhciBoYXJkd2FyZSB0YXJnZXQu JworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1Mg PSAtRElSSVg1MSAtRFNWUjQgLURESVJFTlQgLURIREJVVUNQIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVX VEVSTSBcCisJLURQV0lEX1Q9dWlkX3QgLURDS19BTlNJQyAtRFRDUFNPQ0tFVCAtRFNFTEVDVCAt RE5PR0VUVVNFUlNIRUxMIFwKKwktRFNZU1RJTUVIIC1ERENMUE9QRU4gLUREQ0xGRE9QRU4gJChL RkxBR1MpIC1hbnNpIC1PIC1PbGltaXQgMzAwMCIgXAorCSJMSUJTID0gLWxjdXJzZXMiICJMTktG TEFHUyA9IC1zIgorCisjVXNlIHRoaXMgb25lIGlmIGlyaXg1MSBibG93cyB1cCBkdWUgdG8gbGFj ayBvZiBzd2FwIHNwYWNlIG9yIHdoYXRldmVyLgoraXJpeDUxeDoKKwlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdyYXBoaWNzIElSSVggNS54JworCUBlY2hvICdJ bmNsdWRlcyBmdWxsc2NyZWVuIGZpbGUgZGlzcGxheSBhbmQgWWVsbG93IFBhZ2VzLi4uJworCUBl Y2hvICdBZGQgLW1pcHM8bj4gdG8gQ0ZMQUdTIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIGhhcmR3YXJl IHRhcmdldC4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUyA9IC1ESVJJWDUxIC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLURDS19DVVJTRVMg LURDS19ORVdURVJNIFwKKwktRFBXSURfVD11aWRfdCAtRENLX0FOU0lDIC1EVENQU09DS0VUIC1E U0VMRUNUIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EU1lTVElNRUggLUREQ0xQT1BFTiAtRERDTEZE T1BFTiAkKEtGTEFHUykiIFwKKwkiTElCUyA9IC1sY3Vyc2VzIiAiTE5LRkxBR1MgPSAtcyIKKwor aXJpeDUxeXBjOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgaXJpeDUxIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1M9ICQoS0ZMQUdTKSIKKworI0lSSVggNS4yIGFkZHMgUlRT L0NUUworaXJpeDUyOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgaXJpeDUxIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURJUklYNTIgLURDS19SVFNDVFMgJChLRkxBR1Mp IgorCitpcml4NTM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpcml4NTEgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRElSSVg1MiAtRElSSVg1MyAtRENLX1JUU0NUUyAk KEtGTEFHUykiCisKK2lyaXg1M3g6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBpcml4NTF4IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURJUklYNTIgLURJUklYNTMgLURD S19SVFNDVFMgJChLRkxBR1MpIgorCisjU2lsaWNvbiBHcmFwaGljcyBJUklYIDYuWzAyNF0gY29t bW9uIHN0dWZmLgorI1llbGxvdyBQYWdlcyBhbmQgQ3Vyc2VzIHN1cHBvcnQgaW5jbHVkZWQuCisj SVJJWCB2ZXJzaW9uIDYuMCBhbmQgbGF0ZXIgcnVucyBvbmx5IEVMRiBiaW5hcmllcy4KKyNEZXBl bmRzIG9uIGNvZGUgY2hhbmdlcyBpbiBja2NkZWIuaCB0aGF0IG1ha2UgLURJUklYNnggZGVmaW5l IGFsbAorI2xvd2VyIElSSVg2eCB2YWx1ZXMgYW5kIElSSVg1MS4KK2lyaXg2eDoKKwlAZWNobyAn SW5jbHVkZXMgZnVsbHNjcmVlbiBmaWxlIGRpc3BsYXkgYW5kIFllbGxvdyBQYWdlcy4uLicKKwlA ZWNobyAnQWRkIC1taXBzPG4+IHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHRhcmdl dC4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH UyA9IC1EU1ZSNCAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBcCisJLURDS19D VVJTRVMgLURDS19ORVdURVJNIC1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgLURUQ1BTT0NLRVQg XAorCS1EU0VMRUNUIC1EQ0tfUlRTQ1RTIC1PICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxjdXJz ZXMiICJMTktGTEFHUyA9IC1zICQoTE5LRkxBR1MpIgorCisjU2lsaWNvbiBHcmFwaGljcyBJUklY IDYuMC4KK2lyaXg2MDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxp Y29uIEdyYXBoaWNzIElSSVggNi4wJworCUAkKE1BS0UpICJNQUtFPSQoTUFLRSkiIFwKKwkiS0ZM QUdTPS1ESVJJWDYwIC1PbGltaXQgMjEzOCAkKEtGTEFHUykiIFwKKwlpcml4NnggS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfQorCisjU2lsaWNvbiBHcmFwaGljcyBJUklYIDYuMi4KKyNTZXJpYWwg c3BlZWRzID4gMzg0MDAgYXJlIGF2YWlsYWJsZSBpbiBJUklYIDYuMiBvbiBPLWNsYXNzIG1hY2hp bmVzIG9ubHkuCisjTm90ZTogT2xpbWl0IG11c3QgYmUgYSBudW1iZXIgPiAwLgoraXJpeDYyOgor CUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNpbGljb24gR3JhcGhpY3MgSVJJ WCA2LjInCisJQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgXAorCUxOS0ZMQUdTPSItV2wsLXdvZmYs ODQiIFwKKwkiS0ZMQUdTPS1ESVJJWDYyIC1PbGltaXQgNDcwMCAkKEtGTEFHUykiIFwKKwlpcml4 NnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjU2lsaWNvbiBHcmFwaGljcyBJUklYIDYu My4KK2lyaXg2MzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29u IEdyYXBoaWNzIElSSVggNi4zJworCUAkKE1BS0UpICJNQUtFPSQoTUFLRSkiIGlyaXg2MiBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1ESVJJWDYzIgorCisjU2lsaWNvbiBH cmFwaGljcyBJUklYIDYuNC4KKyMgLXdvZmYsODQgdG8gbGlua2VyIHN0b3BzIGNvbXBsYWludHMg YWJvdXQgbm8gc3ltYm9scyBsb2FkZWQgZnJvbQorIyBjdXJzZXMsIGFuZCAtd29mZiAxMTEwIHN0 b3BzIGNvbXBsYWludHMgYWJvdXQgdW5yZWFjaGFibGUgImJyZWFrOyIKKyMgc3RhdGVtZW50cyBp biBja2Nwcm8uYyBhbW9uZyBvdGhlcnMuCisjIHRlc3RlZCBvbiBTR0kgT2N0YW5lLCBydW5uaW5n IElSSVggNi40IHVwIHRvIDExNTIwMCBicHMuCisjIC1PbGltaXQgMCBtZWFucyBpbmZpbml0ZS4K K2lyaXg2NDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTaWxpY29uIEdy YXBoaWNzIElSSVggNi40JworCUAkKE1BS0UpICJNQUtFPSQoTUFLRSkiIFwKKwlMTktGTEFHUz0i LVdsLC13b2ZmLDg0IiBcCisJIktGTEFHUz0tRElSSVg2NCAtRENLX1JUU0NUUyAtT2xpbWl0IDMw MDAgLXdvZmYgMTExMCAkKEtGTEFHUykiIFwKKwlpcml4NnggS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfQorCitpcml4NjRnY2M6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig U2lsaWNvbiBHcmFwaGljcyBJUklYIDYuNCBnY2MnCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtRFNW UjQgLURJUklYNjQgLURESVJFTlQgLURIREJVVUNQIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EU0VM RUNUIC1EUFdJRF9UPXVpZF90IC1EVENQU09DS0VUIC1ETk9DT1RGTUMgXAorCS1EQ0tfQU5TSUMg LURDS19SVFNDVFMgLURDS19ORVdURVJNIC1EQ0tfQ1VSU0VTIFwKKwkkKEtGTEFHUykgLU8iICJM SUJTPSAtbGN1cnNlcyAtbHRlcm1jYXAgLWxjcnlwdCIKKworI05vdGUgdGhlIG5ldyBPcHRpbWl6 YXRpb24gb3B0aW9uIHN5bnRheCBmb3IgTUlQU3BybyBDQyA3LjIuMS4ybS4KKyNTZWUgbm90ZSBv biBpcml4NjVnY2MgdGFyZ2V0IGFib3V0IExhcmdlIEZpbGUgU3VwcG9ydCAoTEZTKS4KK2lyaXg2 NToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTR0kgSVJJWCA2LjUnCisJ QCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgTE5LRkxBR1M9Ii1XbCwtd29mZiw4NCIgXAorCSJLRkxB R1M9LURJUklYNjUgLURfTEFSR0VGSUxFX1NPVVJDRSAtRENLX1JUU0NUUyAtT1BUOk9saW1pdD0w IFwKKwktd29mZiAxMTEwLDE1NTIsMTE3NCAkKEtGTEFHUykiIFwKKwlpcml4NnggS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfQorCisjQnVpbGQgZm9yIHRob3NlIHRoYXQgaGF2ZSBHQ0MgaW5zdGVh ZCBvZiBNSVBTcHJvLgorIworIyBMYXJnZSBGaWxlIFN1cHBvcnQgbm90ZTogdXNlIHRoZSBkZWZp bmUgX0xBUkdFRklMRV9TT1VSQ0UgdG8gZW5hYmxlIHN1cHBvcnQKKyMgZm9yIGZpbGVzIGxhcmdl ciB0aGFuIDJHQi4gIFRoaXMgbWF5IHdvcmsgb24gcmVsZWFzZXMgb2YgSXJpeCBwcmlvciB0bwor IyA2LjUueHguICBUbyB2ZXJpZnksIGNoZWNrIHRoZSBtYW4gcGFnZSBmb3IgZnN0YXQgYW5kIHZl cmlmeSB0aGF0IG9mZl90IGlzIGEKKyMgNjQgYml0IHZhbHVlIGZvciBhbiAtbjMyIGJ1aWxkLiAg QWxzbyBjaGVjayB0aGUgbWFucGFnZSBmb3IgZnNlZWsgYW5kIGZ0ZWxsCisjIHRvIHZlcmlmeSB0 aGF0IHRoZSBmc2VlazY0IGFuZCBmdGVsbDY0IGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQuICBJZiBz bywgdGhlbgorIyBMRlMgc3VwcG9ydCBzaG91bGQgd29yayBhbmQgeW91IGNhbiB0cnkgYWRkaW5n IC1EX0xBUkdFRklMRV9TT1VSQ0UgdG8gQ0ZMQUdTCisjIGZvciB5b3VyIHNlbGVjdGVkIElyaXgg dGFyZ2V0LgorIworaXJpeDY1Z2NjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFNHSSBJUklYIDYuNSB3aXRoIGdjYycKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtRFNW UjQgLURJUklYNjUgLURfTEFSR0VGSUxFX1NPVVJDRSAtRERJUkVOVCAtREhEQlVVQ1AgXAorCS1E Tk9HRVRVU0VSU0hFTEwgLURTRUxFQ1QgLURQV0lEX1Q9dWlkX3QgLURUQ1BTT0NLRVQgLUROT0NP VEZNQyBcCisJLURDS19BTlNJQyAtRENLX1JUU0NUUyAtRENLX05FV1RFUk0gLURDS19DVVJTRVMg XAorCSQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIgorCisjIFRoZSA2NC1iaXQgSVJJWCB0 YXJnZXQgd29ya3MgYnV0IHByZXN1bWFibHkgaXMgbm8gbG9uZ2VyIG5lZWRlZCBnaXZlbiB0aGUK KyMgbGFyZ2UgZmlsZSBzdXBwb3J0IGluIHRoZSBtb3JlIHBvcnRhYmxlIGFuZCBjb21wYWN0IDMy LWJpdCB2ZXJzaW9uLgoraXJpeDY1XzY0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgNjQtYml0IGZvciBTR0kgSVJJWCA2LjUnCisJQCQoTUFLRSkgIk1BS0U9JChNQUtFKSIgTE5L RkxBR1M9Ii1XbCwtd29mZiw4NCIgXAorCSJLRkxBR1M9LURJUklYNjUgLTY0IC1EQ0tfUlRTQ1RT IC1PUFQ6T2xpbWl0PTAgLXdvZmYgMTExMCwxNTUyLDExNzQgXAorCS1EQ0tfNjRCSVQgJChLRkxB R1MpIiBcCisJaXJpeDZ4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI0R1bWIgZG93biB0 byBNSVBTLTIgaWYgYnVpbGRpbmcgb24gUjUwMDAgb3IgaGlnaGVyLi4uCitpcml4NjVtaXBzMjoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTR0kgSVJJWCA2LjUgTUlQUy0y JworCUAkKE1BS0UpICJNQUtFPSQoTUFLRSkiIExOS0ZMQUdTPSItbzMyIC1taXBzMiAtV2wsLXdv ZmYsODQiIFwKKwkiS0ZMQUdTPS1ESVJJWDY1IC1EQ0tfUlRTQ1RTIC1PUFQ6T2xpbWl0PTAgLW8z MiAtbWlwczIgXAorCS13b2ZmIDExMTAsMTU1MiwxMTc0ICQoS0ZMQUdTKSIgXAorCWlyaXg2eCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNTcGVjaWFsIHRhcmdldCB0aGF0IGFkZHMgc3Jw LCBzc2wsIGFuZCB6bGliIHN1cHBvcnQuICBUaGlzIHJlcXVpcmVzCisjdGhhdCB5b3UgaGF2ZSBw a2dzcmMgaW5zdGFsbGVkIGluc3RlYWQgb2YgSXJpeCBGcmVld2FyZS4gIFNlZQorI05ldEJTRC5v cmcgZm9yIHBrZ3NyYyBmb3IgSXJpeC4gIFlvdSB3aWxsIG5lZWQgdG8gQlVJTEQgdGhlIHNycF9j bGllbnQKKyNwYWNrYWdlIHlvdXJzZWxmLiAgSW5zdGFsbCBpdCBtYW51YWxseSB1c2luZyB0aGUg ZGlyZWN0aW9ucyBmb3VuZAorI2luIHRoZSBuZXRic2RzK3NzbCtzcnAremxpYiB0YXJnZXQgY29t bWVudHMuCitpcml4NjUrc3NsK3NycCt6bGliOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIElSSVggNi41IHdpdGggZ2NjIGFuZCBTU0wgU1JQIFpMSUInCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNDID0gZ2NjIiAiQ0MyID0gZ2Nj IiBcCisJIkNGTEFHUz0gLURJUklYNjUgLURTVlI0IC1ERElSRU5UIC1ESERCVVVDUCAtRE5PR0VU VVNFUlNIRUxMIC1EU0VMRUNUIFwKKwktRFRDUFNPQ0tFVCAtRE5PQ09URk1DIC1EQ0tfTkVXVEVS TSAtRFBXSURfVD11aWRfdCAtRENLX0FOU0lDIFwKKwktSS91c3IvcGtnL2luY2x1ZGUgLURDS19B VVRIRU5USUNBVElPTiAtRENLX1NSUCAtRFBSRV9TUlBfMV80XzUgXAorCS1EQ0tfUlRTQ1RTIC1E Q0tfTkNVUlNFUyAtRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1EQ0tfU1NMIFwK KwktRExJQkRFUyAtRFpMSUIgLURGTkZMT0FUIC1JL3Vzci9wa2cvaW5jbHVkZS9vcGVuc3NsICQo S0ZMQUdTKSAtTyIgXAorCSJMSUJTPSAtTC91c3IvcGtnL2xpYiAtcnBhdGggL3Vzci9wa2cvbGli IC1sbmN1cnNlcyAtbHNycCAtbGdtcCAtbGRlcyBcCisJLWxzc2wgLWxrcnlwdG8gLWxjcnlwdG8g LWxjcnlwdCAtbHogLWxtIgorCitpcml4Nngra3JiNToKKwlAZWNobyAnSW5jbHVkZXMgZnVsbHNj cmVlbiBmaWxlIGRpc3BsYXkgYW5kIFllbGxvdyBQYWdlcy4uLicKKwlAZWNobyAnQWRkIC1taXBz PG4+IHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHRhcmdldC4nCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EU1ZSNCAtRERJ UkVOVCAtREhEQlVVQ1AgLUROT0dFVFVTRVJTSEVMTCBcCisJLURDS19DVVJTRVMgLURDS19ORVdU RVJNIC1EUFdJRF9UPXVpZF90IC1EQ0tfQU5TSUMgLURUQ1BTT0NLRVRcCisJLURTRUxFQ1QgLURD S19SVFNDVFMgLU8gXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAtREtSQjUg LURDS19FTkNSWVBUSU9OIC1EQ0tfREVTIFwKKwkkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoS0ZM QUdTKSIgXAorCSJMSUJTID0gLWxjdXJzZXMgJChLNUxJQikgLWxkZXM0MjUgLWxrcmI1IFwKKwkt bGNvbV9lcnIgLWxjcnlwdG8gLWxjcnlwdCAtbGdzc2FwaV9rcmI1IiBcCisJIkxOS0ZMQUdTID0g LXMgJChMTktGTEFHUykiCisKK2lyaXg2NStrcmI1OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIFNHSSBJUklYIDYuNScKKwlAJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBcCisJ TE5LRkxBR1M9Ii1XbCwtd29mZiw4NCIgXAorCSJLRkxBR1M9LURJUklYNjUgLURDS19SVFNDVFMg LU9QVDpPbGltaXQ9MCAtd29mZiAxMTEwLDE1NTIsMTE3NCBcCisJJChLRkxBR1MpIiBcCisJaXJp eDZ4K2tyYjUgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjSW4gY2FzZSB0aGV5IHR5cGUg Im1ha2Ugc3lzNSIuLi4KK3N5czU6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0KKworI0dlbmVyaWMgQVRUIFN5c3RlbSBJSUkgb3IgU3lzdGVt IFYgKHdpdGggSSZEIHNwYWNlKQorc3lzMzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBBVCZUIFVOSVggU3lzdGVtIElJSScKKwlAZWNobyAnb3IgU3lzdGVtIFYgUjIgb3Ig ZWFybGllci4uLicKKwlAZWNobyAnYWRkIC1ETk9NS0RJUiBpZiBta2RpciBpcyBhbiB1bmRlZmlu ZWQgc3ltYm9sLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTID0gLURBVFRTViAtRE5PVU5JQ09ERSAtRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1E Tk9HRVRVU0VSU0hFTEwgXAorCS1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgLUROT1JFQUxQ QVRIIC1ETk9MRUFSTiAkKEtGTEFHUykgLWkgLU8iIFwKKwkiTE5LRkxBR1MgPSAtaSIKKworI0dl bmVyaWMgQVRUIFN5c3RlbSBJSUkgb3IgU3lzdGVtIFYgKG5vIEkmRCBzcGFjZSkKK3N5czNuaWQ6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCBVTklYIFN5c3RlbSBJ SUknCisJQGVjaG8gJ29yIFN5c3RlbSBWIFIyIG9yIGVhcmxpZXIsIG5vIEkmRCBzcGFjZS4uLicK KwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0g LURBVFRTViAtRE5PUkVBTFBBVEggLUROT1VOSUNPREUgLUROT1NZU0xPRyAtRE5PU1lNTElOSyBc CisJLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIC1ETk9MRUFS TiAkKEtGTEFHUykgLU8iIFwKKwkiTE5LRkxBR1MgPSIKKworI0dlbmVyaWMgQVRUIFN5c3RlbSBJ SUkgb3IgU3lzdGVtIFYgUjIgb3IgZWFybGllciwgIm5vIHZvaWQiOgorI3NwZWNpYWwgZW50cnkg dG8gcmVtb3ZlICJJbGxlZ2FsIHBvaW50ZXIgY29tYmluYXRpb24iIHdhcm5pbmdzLgorc3lzM252 OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgVU5JWCBTeXN0ZW0g SUlJJworCUBlY2hvICdvciBTeXN0ZW0gViBSMiBvciBlYXJsaWVyLi4uJworCSQoTUFLRSkgd2Vy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQVRUU1YgLUROT1JF QUxQQVRIIC1ETk9VTklDT0RFIC1ETk9TWVNMT0cgLUROT0dFVFVTRVJTSEVMTCBcCisJLUROT1NZ TUxJTksgLUROT0ZUUlVOQ0FURSAtRE5PSU5JVEdST1VQUyAtRE5PTEVBUk4gXAorCS1Edm9pZD1p bnQgJChLRkxBR1MpIC1pIC1PIiBcCisJIkxOS0ZMQUdTID0gLWkiCisKKyMgQVQmVCA3MzAwIFVO SVggUEMuICBBcyBvZiBDLUtlcm1pdCA2LjEsIG1hbnkgb2YgdGhlc2UgZW50cmllcyBkb24ndCB3 b3JrCisjIGFueSBtb3JlIGR1ZSB0byAiT3V0IG9mIG1lbW9yeSIgb3IgIlRvbyBtYW55IGRlZmlu ZXMiIGVycm9ycyBkdXJpbmcKKyMgY29tcGlsYXRpb24sIGF0IGxlYXN0IG5vdCBvbiBzeXN0ZW1z IHdpdGhvdXQgbG90cyBvZiBtZW1vcnkuICBUaGUgc3lzM3VwY2djCisjIGVudHJ5IHdvcmtzICh1 c2luZyBnY2MpIHdpdGggb3B0aW1pemF0aW9uIHJlbW92ZWQsIGFuZCBtaWdodCBhbHNvIHdvcmsK KyMgd2l0aCBvcHRpbWl6YXRpb24gZW5hYmxlZCBvbiBtYWNoaW5lcyB3aXRoIGxhcmdlciBtZW1v cmllcy4KKworI0FUJlQgNzMwMC9VTklYIFBDICgzQjEpIHN5c3RlbXMsIHN5czMgYnV0IHNwZWNp YWwgaGFuZGxpbmcgZm9yIGludGVybmFsIG1vZGVtLgorI0xpbmsgd2l0aCB0aGUgc2hhcmVkIGxp YnJhcnkgLS0gdGhlIGNvbmZsaWN0IHdpdGggb3BlbmkgaW4gc2hhcmVkIGxpYnJhcnkKKyNpcyBz b2x2ZWQgd2l0aCAtRG9wZW5pPXhvcGVuaS4gIE5vdGUgdGhhdCB0aGUgeGVybWl0IHRhcmdldCBj YW4ndCBiZSB1c2VkCisjZm9yIHRoZSBVbml4IFBDOyB0aGVyZSBpcyBubyBzZWxlY3QoKS4KK3N5 czN1cGM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVO SVggUEMsIHNoYXJlZCBsaWIuLi4nCisJQGVjaG8gJ0lmIHNoYXJlZCBsaWIgY2F1c2VzIHRyb3Vi bGUsIHVzZSBtYWtlIHN5czN1cGNvbGQuJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtREFUVDczMDAgLUROT01LRElSIC1EVVNFX01F TUNQWSAtRE5PUkVBTFBBVEggLUROT0xFQVJOIFwKKwktRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1E Tk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBcCisJLUROT1JFRElS RUNUIC1ETk9HRlRJTUVSIC1ETk9VTklDT0RFICQoS0ZMQUdTKSAtRG9wZW5pPXhvcGVuaSIgXAor CSJDQzIgPSBsZCAvbGliL2NydDBzLm8gL2xpYi9zaGxpYi5pZmlsZSIgIkxOS0ZMQUdTID0gLXMi CisKKyNBVCZUIDczMDAvVW5peCBQQyBzeXN0ZW1zLCBtaW5pbXVtIGtlcm1pdCBmb3IgdGhvc2Ug d2l0aCBzbWFsbGVyIGFtb3VudHMKKyNvZiBtZW1vcnkuCitzeXMzdXBjbToKKwlAZWNobyBNaW5p bXVtIGludGVyYWN0aXZlCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzdXBjIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LUROT1NQTCAtRE5PRlJJTExTIC1ETk9IRUxQ IC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgXAorCS1ETk9TWVNMT0cgLUROT1NFVEtFWSAt RE5PUkVBTFBBVEgiCisKKyNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBzeXN0ZW1zLCB3aXRoIGN1 cnNlcyBzdXBwb3J0LgorI0N1cnNlcyBhbmQgdGhlIHNoYXJlZCBsaWJyYXJ5IGRvbid0IGdldCBh bG9uZywgc28gd2UgZG9uJ3QgdXNlIHRoZQorI3NoYXJlZCBsaWJyYXJ5LiAgV2UgbmVlZCB0byBp bmNsdWRlIENLX05FV1RFUk0gdG8gYXZvaWQgYSBjb25mbGljdAorI3dpdGggY3Vyc2VzIGFuZCBi dWZmZXJpbmcgb24gc3Rkb3V0LiAgTWVyZ2VkIHdpdGggc3VibWlzc2lvbiBieQorI1JvYmVydCBX ZWluZXIvUHJvZ3JhbW1pbmcgUGx1cywgcndlaW5lckB3YXRzdW4uY2MuY29sdW1iaWEuZWR1Lgor I1dlIGRvbid0IG5lZWQgLURvcGVuaT14b3Blbmkgc2luY2Ugd2UncmUgbm90IHVzaW5nIHRoZSBz aGFyZWQgbGlicmFyeSwKKyNidXQgd2Uga2VlcCBpdCB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhl IG90aGVyIGVudHJpZXMuCitzeXMzdXBjYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBBVCZUIDczMDAgVU5JWCBQQywgY3Vyc2VzLi4uJworCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtTyAtREFUVDczMDAgLUROT1JF QUxQQVRIIFwKKwktRENLX0NVUlNFUyAtRENLX05FV1RFUk0gLUROT01LRElSIC1ETk9SRURJUkVD VCAtRE5PR0ZUSU1FUiAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dF VFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwktRFVTRV9NRU1DUFkg LUROT1VOSUNPREUgJChLRkxBR1MpIC1Eb3Blbmk9eG9wZW5pIiBcCisJIkxJQlMgPSAtbGN1cnNl cyIgIkxOS0ZMQUdTID0gLXMiCisKKyNMaWtlIHN5czN1cGNjIGJ1dCBmb3IgQVQmVCBVTklYIDMu NTFtIChyZWxlYXNlZCBhcyBhIHBhdGNoIG9uIEZpeCBEaXNrIDIpLAorI2FkZHMgaGFyZHdhcmUg ZmxvdyBjb250cm9sLgorYXR0MzUxbToKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHN5czN1cGNj IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURDS19SVFNDVFMgLURVTklY MzUxTSIKKworI0FzIGFib3ZlIGJ1dCB3aXRoIGdjYy4KK2F0dDM1MWdtOgorCSQoTUFLRSkgIk1B S0U9JChNQUtFKSIgc3lzM3VwY2djIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxB R1M9LURDS19SVFNDVFMgLURVTklYMzUxTSIKKworI0FUJlQgNzMwMCBVTklYIFBDICgzQjEpLCBh cyBhYm92ZSwgYnV0IG5vIG5ld3Rlcm0oKS4KK3N5czN1cGN4OgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLCBjdXJzZXMuLi4nCisJJChNQUtF KSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1PIC1EQVRU NzMwMCAtRE5PUkVBTFBBVEggLUROT1VOSUNPREUgLUROT0xFQVJOIFwKKwktRE5PU1lTTE9HIC1E Tk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBc CisJLURDS19DVVJTRVMgLUROT01LRElSIC1ETk9SRURJUkVDVCAtRE5PR0ZUSU1FUiAtRFVTRV9N RU1DUFkgJChLRkxBR1MpIFwKKwktRG9wZW5pPXhvcGVuaSIgIkxJQlMgPSAtbGN1cnNlcyAtbHRl cm1jYXAiICJMTktGTEFHUyA9IC1zIgorCisjQVQmVCA3MzAwL1VOSVggUEMgKDNCMSkgc3lzdGVt cywgd2l0aCBjdXJzZXMgYW5kIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuCitzeXMzdXBjc2hjYzoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDczMDAgVU5JWCBQQywg c2hhcmVkIGxpYi4uLicKKwlAZWNobyAnV2l0aCBjdXJzZXMuICBSZXF1aXJlcyBzaGNjLicKKwkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLU8g LURBVFQ3MzAwIC1ETk9NS0RJUiAtRE5PUkVBTFBBVEggLUROT0xFQVJOIFwKKwktRE5PU1lTTE9H IC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FU RSBcCisJLURDS19ORVdURVJNIC1EQ0tfQ1VSU0VTICAtRE5PUkVESVJFQ1QgLUROT0dGVElNRVIg XAorCS1EVVNFX01FTUNQWSAtRE5PVU5JQ09ERSAkKEtGTEFHUykgLURvcGVuaT14b3BlbmkiIFwK KwkiTE5LRkxBR1MgPSAtaSAtcyIgIkNDID0gc2hjYyIgIkNDMiA9IHNoY2MiICJMSUJTID0gLWxj dXJzZXMiCisKKyNBVCZUIDczMDAvVU5JWCBQQyAoM0IxKSBzeXN0ZW1zLCBhcyBhYm92ZSwgbm8g Y3Vyc2VzLCBidXQgdXNlIGdjYy4KK3N5czN1cGNnOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVDczMDAgLUROT1JFRElSRUNU IC1EVVNFX01FTUNQWSAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLUROT1NZ TUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwkt RE5PR0ZUSU1FUiAtRE5PTUtESVIgLUROT1JFQUxQQVRIICQoS0ZMQUdTKSAtRG9wZW5pPXhvcGVu aSIgXAorCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgIkxOS0ZMQUdTID0gLXMgLXNobGliIgorCisj QVQmVCA3MzAwL1VOSVggUEMgKDNCMSkgc3lzdGVtcywgY3Vyc2VzIGFuZCBnY2MuCisjT3B0aW1p emF0aW9uIG9taXR0ZWQgLS0gYWRkIGl0IGJhY2sgaW4gaWYgeW91ciBtYWNoaW5lIGhhcyBsb3Rz IG9mIG1lbW9yeS4KK3N5czN1cGNnYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBBVCZUIDczMDAgVU5JWCBQQywgY3Vyc2VzLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVDczMDAgLUROT1JFRElSRUNU IC1EVVNFX01FTUNQWSAtRE5PR0ZUSU1FUiAtRE5PVU5JQ09ERSBcCisJLUROT1NZU0xPRyAtRE5P U1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgXAor CS1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtRE5PTUtESVIgLUROT1JFQUxQQVRIIC1ETk9MRUFS TiAkKEtGTEFHUykiIFwKKwkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiICJMSUJTID0gLWxjdXJzZXMi ICJMTktGTEFHUyA9IC1zIgorCisjQVQmVCA3MzAwL1VOSVggUEMgKDNCMSkgc3lzdGVtcywgc3Bl Y2lhbCBoYW5kbGluZyBmb3IgaW50ZXJuYWwgbW9kZW0uCisjTm8gRlVMTFNDUkVFTiBmaWxlIHRy YW5zZmVyIGRpc3BsYXkgKGN1cnNlcykuCitzeXMzdXBjb2xkOgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNzMwMCBVTklYIFBDLi4uJworCSQoTUFLRSkgd2VybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVDczMDAgLUROT01L RElSIC1EVVNFX01FTUNQWSAtRE5PVU5JQ09ERSAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLURO T1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwK KwktRE5PR0ZUSU1FUiAtRE5PUkVESVJFQ1QgLUROT1JFQUxQQVRIICQoS0ZMQUdTKSAtTyIgIkxO S0ZMQUdTID0gLWkiCisKKyNBcyBhYm92ZSwgYnV0IHdpdGggZ2NjLiBtaW5pbnVtIGZlYXR1cmVz IC0gZml0cyBvbiBhIDQwMEsgVU5JWCBQQyBmbG9wcHkKKyNhZnRlciBjb21wcmVzc2lvbiB3aXRo IHJvb20gdG8gc3BhcmU7IGFkZCAtRE5PU0hPVyBvciBvdGhlciAtRE5PeHh4eCBpdGVtcworI3Rv IHJlZHVjZSBzaXplIGV2ZW4gZnVydGhlci4KK3N5czN1cGNnbToKKwlAZWNobyBNaW5pbXVtIGlu dGVyYWN0aXZlCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzeXMzdXBjZyBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1ETk9TUEwgLUROT0ZSSUxMUyAtRE5PSEVMUCAtRE5P REVCVUcgLUROT1RMT0cgLUROT0NTRVRTIFwKKwktRE5PU0VUS0VZICQoS0ZMQUdTKSIKKworI1Ro aXMgdGFyZ2V0IGlzIGRlc2lnbmVkIHRvIGNyZWF0ZSBhIHZlcnNpb24gd2l0aCB0aGUgbW9zdCBm ZWF0dXJlcyBwb3NzaWJsZQorI3RoYXQsIGFmdGVyIGNvbXByZXNzaW9uLCBzdGlsbCBmaXRzIG9u IGEgNDAwSyBVTklYIFBDIGZsb3BweS4KK3N5czN1cGNnZmQ6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgQVQmVCA3MzAwIFVOSVggUEMgZmxvcHB5Li4uJworCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVDczMDAg LUROT1JFRElSRUNUIC1EVVNFX01FTUNQWSAtRE5PU1BMIC1ETk9MRUFSTiBcCisJLUROT1NZU0xP RyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNB VEUgXAorCS1ETk9HRlRJTUVSIC1ETk9SRUFMUEFUSCAtRG9wZW5pPXhvcGVuaSBcCisJLUROT0hF TFAgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9DU0VUUyAtRE5PU0VUS0VZIC1ETk9NS0RJUiAkKEtG TEFHUykiIFwKKwkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiICJMTktGTEFHUyA9IC1zIgorCisjQVQm VCA2MzAwIFBMVVMgKHdhcm5pbmcsIC1PIG1pZ2h0IG1ha2UgaXQgcnVuIG91dCBvZiBzcGFjZSku CisjTk9URTogUmVtb3ZlIC1ESERCVVVDUCBpZiBub3QgdXNpbmcgSG9uZXkgRGFuQmVyIFVVQ1Au CithdHQ2MzAwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgNjMw MCBQTFVTLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJDRkxBR1MgPSAtREFUVDYzMDAgLURIREJVVUNQIC1ETk9GSUxFSCAtRE5PUkVBTFBBVEggLURO T0xFQVJOIFwKKwktRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VSU0hFTEwgLUROT0lO SVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBcCisJLUROT1VOSUNPREUgJChLRkxBR1MpIC1PIC1NbCAt aSIgIkxOS0ZMQUdTID0gLWkgLU1sIgorCisjQXMgYWJvdmUsIGJ1dCB3aXRoIGN1cnNlcyBzdXBw b3J0LiAgRGVidWdnaW5nIGRpc2FibGVkIHRvIHByZXZlbnQgdGhyYXNoaW5nLgorYXR0NjMwMGM6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCA2MzAwIFBMVVMuLi4n CisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9 IC1EQVRUNjMwMCAtREhEQlVVQ1AgLUROT0ZJTEVIIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAor CS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAt RE5PRlRSVU5DQVRFIFwKKwktRENLX0NVUlNFUyAtRE5PREVCVUcgLUROT1VOSUNPREUgLUROT0xF QVJOICQoS0ZMQUdTKSAtTyAtTWwgLWkiIFwKKwkiTE5LRkxBR1MgPSAtaSAtTWwiICJMSUJTID0g LWxjdXJzZXMiCisKKyNBVCZUIDYzMDAgUExVUyB3aXRoIG5vIGN1cnNlcywgbm8gZGVidWdnaW5n IChhYm91dCAzNEsgc21hbGxlcikKKyMgLU9wdGltaXphdGlvbiBzYXZlcyBhYm91dCAyMEsgdG9v LgorYXR0NjMwMG5kOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQg NjMwMCBQTFVTLCBubyBkZWJ1Z2dpbmcuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EQVRUNjMwMCAtREhEQlVVQ1AgLUROT0RFQlVH IC1ETk9GSUxFSCAtRE5PUkVBTFBBVEggXAorCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dF VFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwktRE5PVU5JQ09ERSAt RE5PTEVBUk4gJChLRkxBR1MpIC1PIC1pIC1NbCIgIkxOS0ZMQUdTID0gLWkgLU1sIgorCisjQVQm VCAzQjIgYW5kIG1heWJlIDNCMjAtc2VyaWVzIGNvbXB1dGVycyBydW5uaW5nIEFUJlQgVU5JWCBT eXN0ZW0gViBSMy4KKyNUaGlzIG9uZSB3YXMgYWN0dWFsbHkgdXNlZCB0byBidWlsZCBDLUtlcm1p dCA3LjAgc3VjY2Vzc2Z1bGx5IG9uIGEgM0IyLzMwMC4KK2F0dDNiMjoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZUIDNCMicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAtRE5PUkVESVJFQ1QgLURV U0VfTUVNQ1BZIFwKKwktRE5PVElNRVZBTCAtRE5PVElNRVpPTkUgLURNSU5JRElBTCAtRE5PQ0hB Tk5FTElPIC1ETk9CSUdCVUYgXAorCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJT SEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwktRE5PR0ZUSU1FUiAtRE5PUkVB TFBBVEggLURvcGVuaT14b3BlbmkgLUROT0ZSSUxMUyAtRE5PTEVBUk4gXAorCS1ETk9IRUxQIC1E Tk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgLUROT1NFVEtFWSAtRE5PTUtESVIgJChLRkxBR1Mp IiBcCisJIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiAiTE5LRkxBR1MgPSAtcyIKKworIyBUaGUgbmV4 dCB0d28gYXJlIGxpa2VseSBub3QgdG8gd29yayBhcy1pcy4KKworI0FUJlQgM0IyLCAzQjIwLXNl cmllcyBjb21wdXRlcnMgcnVubmluZyBBVCZUIFVOSVggU3lzdGVtIFYuCisjVGhpcyBpcyBqdXN0 IGdlbmVyaWMgU3lzdGVtIFYgd2l0aCBIb25leSBEYW5CZXIgVVVDUCwgc28gcmVmZXIgdG8gc3lz M2hkYi4KKyNSZW1vdmUgLUROT05BV1MgaWYgeW91IGNhbiBnZXQgYXdheSB3aXRoIGl0LgorYXR0 M2J4OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzM2hkYiBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiS0ZMQUdTPSQoS0ZMQUdTKSAtRE5PTkFXUyAtRE5PVElNRVZBTCIKKworIyAz Qnggd2l0aCBjaGFyc2V0cyAoZXhjZXB0IFVuaWNvZGUpIGJ1dCBubyBjdXJzZXMuCithdHQzYngx OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgM0IyIG9yIDNCMjAn CisJQGVjaG8gJ3dpdGggSG9uZXkgRGFuQmVyIFVVQ1AgIG5vIGN1cnNlcy4uLicKKwkkKE1BS0Up IHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAt REhEQlVVQ1AgJChLRkxBR1MpIC1ETk9SRURJUkVDVCBcCisJLUROT1RJTUVWQUwgLUROT1RJTUVa T05FIC1ETUlOSURJQUwgLUROT0NIQU5ORUxJTyAtRE5PQklHQlVGIFwKKwktRE5PSEVMUCAtRE5P REVCVUcgLUROT0dGVElNRVIgLUROT0xFQVJOIFwKKwktRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1E Tk9HRVRVU0VSU0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBcCisJLUROT1JFQUxQ QVRIIC1ETk9VTklDT0RFIC1pIiBcCisJIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiAiTE5LRkxBR1Mg PSAtaSAtcyIKKworI0FUJlQgM0IyLCAzQjIwLXNlcmllcyBjb21wdXRlcnMgcnVubmluZyBBVCZU IFVOSVggU3lzdGVtIFYsCisjd2l0aCBmdWxsc2NyZWVuIGZpbGUgdHJhbnNmZXIgZGlzcGxheS4K K2F0dDNieGM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQVQmVCAzQjIg b3IgM0IyMCcKKwlAZWNobyAnd2l0aCBIb25leSBEYW5CZXIgVVVDUCBhbmQgY3Vyc2VzLi4uJwor CSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAt REFUVFNWIC1ESERCVVVDUCAtRE5PTkFXUyAtRE5PVElNRVZBTCAkKEtGTEFHUykgXAorCS1ETk9T WVNMT0cgLUROT1NZTUxJTksgLUROT0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRS VU5DQVRFIFwKKwktRE5PUkVBTFBBVEggLURDS19DVVJTRVMgLURDS19ORVdURVJNIC1ETk9VTklD T0RFIC1ETk9MRUFSTiAtaSAtTyIgXAorCSJMTktGTEFHUyA9IC1pIiAiTElCUz0tbGN1cnNlcyIK KworIzNieCB3aXRoIGN1cnNlcyBidXQgbm8gY2hhcnNldHMKK2F0dDNieGMzOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFUJlQgM0IyIG9yIDNCMjAnCisJQGVjaG8gJ3dp dGggSG9uZXkgRGFuQmVyIFVVQ1Agd2l0aCBjdXJzZXMuLi4gIG5vIENTRVRTJworCSQoTUFLRSkg d2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVFNWIC1E SERCVVVDUCAkKEtGTEFHUykgLUROT1JFRElSRUNUIFwKKwktRE5PVElNRVZBTCAtRE5PVElNRVpP TkUgLURNSU5JRElBTCAtRE5PQ0hBTk5FTElPIC1ETk9CSUdCVUYgXAorCS1ETk9IRUxQIC1ETk9E RUJVRyAtRE5PR0ZUSU1FUiAtRE5PTEVBUk4gXAorCS1ETk9TWVNMT0cgLUROT1NZTUxJTksgLURO T0dFVFVTRVJTSEVMTCAtRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIFwKKwktRE5PUkVBTFBB VEggLUROT0NTRVRTIC1EQ0tfQ1VSU0VTIC1EQ0tfTkVXVEVSTSAtaSIgXAorCSJDQyA9IGdjYyIg IkNDMiA9IGdjYyIgIkxOS0ZMQUdTID0gLWkgLXMiICJMSUJTID0gLWxjdXJzZXMiCisKKyNBbnkg U3lzdGVtIFYgUjIgb3IgZWFybGllciB3aXRoIEhvbmV5IERhbkJlciBVVUNQIChzYW1lIGFzIGFi b3ZlKQorc3lzM2hkYjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBBVCZU IFVOSVggU3lzdGVtIElJSScKKwlAZWNobyAnb3IgU3lzdGVtIFYgUjIgb3IgZWFybGllciB3aXRo IEhvbmV5IERhbkJlciBVVUNQLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVFNWIC1ESERCVVVDUCAtRE5PUkVBTFBBVEggLURO T1VOSUNPREUgLUROT0xFQVJOIFwKKwktRE5PU1lTTE9HIC1ETk9TWU1MSU5LIC1ETk9HRVRVU0VS U0hFTEwgLUROT0lOSVRHUk9VUFMgLUROT0ZUUlVOQ0FURSBcCisJJChLRkxBR1MpIC1pIC1PIiAi TE5LRkxBR1MgPSAtaSIKKworI1NwZXJyeS9VTklTWVMgNTAwMCBVVFMgViA1LjIgKFN5c3RlbSBW IFIyKSwgSG9uZXkgRGFuQmVyIFVVQ1AKK3VuaXN5czVyMjoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBTcGVycnkvVU5JU1lTIDUwMDAgVVRTIFYgNS4yLi4uJworCSQoTUFL RSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVFNW IC1EVU5JU1lTNTIgLURIREJVVUNQIC1ETk9SRUFMUEFUSCAtRE5PVU5JQ09ERSBcCisJLUROT1NZ U0xPRyAtRE5PU1lNTElOSyAtRE5PR0VUVVNFUlNIRUxMIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJV TkNBVEUgXAorCS1ETk9MRUFSTiAkKEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9IC1pIgorCisj SW4gY2FzZSB0aGV5IHNheSAibWFrZSBzeXM1aGRiIiBpbnN0ZWFkIG9mICJtYWtlIHN5czNoZGIi Li4uCitzeXM1aGRiOgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc3lzM2hkYgorCisjQ3JlYXRl IHRoZSBjb21tb24gaGVhZGVyIGxpbmUgZm9yIGFsbCBocHV4WzUtMTFdKiBlbnRyaWVzIGFuZCBh Ym92ZS4gVGhpcyAKKyNleHRyYSBlbnRyeSBpcyBoZXJlIGJlY2F1c2Ugb3VyIGhlYWRlciBtZXNz YWdlIGxlbmd0aCBtYXkgZGlmZmVyIGZvciBlYWNoIAorI0MtS2VybWl0IHZlcnNpb24uIERvbid0 IHVzZSAnZm9sZCAtcycgZm9yIEhQLVVYIDUueCAtIDcueCEgVGhpcyBvcHRpb24gaXMgCisjYXZh aWxhYmxlIG9ubHkgZm9yIEhQLVVYIDguMCBhbmQgYWJvdmUhCitocHV4LWhlYWRlcjoKKwlASFBV WD1gdW5hbWUgLXIgfCBzZWQgLWUgJ3MvXlteMS05XSovLycgLWUgJ3MvXC4wMCQkLy4wLydgIDsg XAorCVsgIiQoTUVTU0FHRTApIiBdICYmIE1FU1NBR0UxPSIkKE1FU1NBR0UwKSIgOyBcCisJTWVz c2FnZTA9J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSFA5MDAwIEhQLVVYJyA7IFwKKwlN ZXNzYWdlMT0kJHtNRVNTQUdFMTo9J3dpdGhvdXQgYW55IGV4dHJhIGNvbXBpbGVyIG9wdGltaXph dGlvbid9IDsgXAorCU1lc3NhZ2VIPSIkJE1lc3NhZ2UwICQkSFBVWCIgOyBcCisJY2FzZSAkJEhQ VVggaW4gXAorCSAgWzU2N10uKikgZWNobyAiJCRNZXNzYWdlSFxuJCRNZXNzYWdlMSIgOzsgXAor CSAgICAgICouKikgZWNobyAiJCRNZXNzYWdlSCAkJHtNZXNzYWdlMX0kKE1FU1NBR0UxQSkiIHwg Zm9sZCAtcyA7OyBcCisJZXNhYyB8IHNlZCAtZSAncy9eIC8vJyAtZSAncy8gKiQkLy8nCisKKyMg UGV0ZXIgRSdzIHVwZGF0ZWQgSFAtVVggNS54eCBlbnRyaWVzIE9jdCAyMDAxLgorCisjSFAtOTAw MCA1MDAgSFAtVVggNS54eCwgbm8gVENQL0lQLgorIyBMYXN0IGtub3duIHN1Y2Nlc3NmdWwgYnVp bGQ6IEMtS2VybWl0IDguMC4yMDYgMjAwMi8yMC8yNy4KK2hwdXgwNTAwOgorCUBNRVNTQUdFMD0i bm8gVENQL0lQIGFuZCBubyBjb21waWxlciBvcHRpbWl6YXRpb24iO1wKKwlNRVNTQUdFMD0kJHtN RVNTQUdFMTotJCRNRVNTQUdFMH0gXAorCSQoTUFLRSkgaHB1eC1oZWFkZXIKKwkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLURIUFVYIC1ESFBV WDUgLURIUFVYUFJFNjUgLUROT1JFRElSRUNUIC1ERENMR0VUQ1dEIFwKKwktRE5PR0VUVVNFUlNI RUxMIC1ETk9HRlRJTUVSIC1ETk9TWVNMT0cgLUROT1RPTUFDUk9TIC1ETk9MU1RBVCBcCisJLURO T1NZTUxJTksgLUROT0lOSVRHUk9VUFMgLUROT1VOSUNPREUgLUROT0xFQVJOIC1ETk9MT05HTE9O RyBcCisJLURWT0lEPWludCAtRENLVk9JRD1pbnQgJChLRkxBR1MpIiAiTElCUyA9ICQoTElCUyki ICJMTktGTEFHUyA9ICIKKworI0hQLTkwMDAgNTAwIEhQLVVYIDUuMjEgd2l0aCBXb2xsb25nb25n IFdJTi9UQ1AgMS4yIFRDUC9JUC4KKyNSZXF1aXJlcyAvdXNyL3dpbnMvdXNyL2luY2x1ZGUgYW5k IC91c3IvbGliL2xpYm5ldC5hIGZyb20gV29sbG9uZ29uZy4KKyNPcHRpbWl6YXRpb24gc2tpcHBl ZCAtIHRha2VzIGZvcmV2ZXIuCVJlYWxseS4KKyMgV0FSTklORzogdGhpcyBkb2Vzbid0IHdvcmsg aWYgYSBmaWxlIGNhbGxlZCAiaHB1eDA1MDAiIGlzIG9uIHRoZSBkaXNrLgorIyBMYXN0IGtub3du IHN1Y2Nlc3NmdWwgYnVpbGQ6IEMtS2VybWl0IDguMC4yMDYgMjAwMi8yMC8yNy4KK2hwdXgwNTAw d2ludGNwOgorCUBNRVNTQUdFMT0id2l0aCBXSU4vVENQIGJ1dCB3aXRob3V0IGFueSBleHRyYSBj b21waWxlciBvcHRpbWl6YXRpb24iIFwKKwkkKE1BS0UpIGhwdXgwNTAwIEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAtRFRDUFNPQ0tFVCAtREhQVVg1V0lOVENQIC1ESU5B RERSWCAtRE5PX0ROU19TUlYgXAorCS1ETk9NSEhPU1QgLURWT0lEPWludCAtRENLVk9JRD1pbnQg LUROT0hBRERSTElTVCAtRE5PTE9OR0xPTkcgXAorCS1JL3Vzci93aW5zL3Vzci9pbmNsdWRlICQo S0ZMQUdTKSIgIkxJQlMgPSAvdXNyL2xpYi9saWJuZXQuYSIKKworI0hQLVVYIDYuNSwgc2hvcnQg ZmlsZW5hbWVzLCBubyBuZXR3b3JrIGFuZCBubyBjdXJzZXMgc3VwcG9ydC4KKyNja2Nwcm8sIGNr dXVzciwgY2t1dXMzIGFuZCBvdGhlcnMgYXJlIGJyb2tlbiBvdXQgYmVjYXVzZSB0aGV5IG1ha2Ug dGhlCisjb3B0aW1pemVyIHJ1biBhd2F5LiAgTm90ZSB0aGF0IHRoZSBYRVJNSVQgdGFyZ2V0IGRv ZXMgbm90IHdvcmsgd2l0aCBIUC1VWCA2LjUhCisjCisjSWYgeW91IGdldCBjb21waWxlciB3YXJu aW5ncyBsaWtlOgorIydTd2l0Y2ggdGFibGUgb3ZlcmZsb3cuIFRyeSB0aGUgLVdjLC1OdyBvcHRp b24uJyAoZm9yIGNrY3VuaS5jLCBvcgorI290aGVyIGZpbGVzKSBpbmNyZWFzZSB0aGUgJy4uLicg dmFsdWUgaW4gJy1XYywtTncuLi4nISBUaGUgZGVmYXVsdCBtYXhpbXVtCisjc3dpdGNoIHRhYmxl IHN0YWNrICgtTncpIGlzIDI1MCB0YWJsZSBlbnRyaWVzLiBja2N1bmkuYyBmcm9tIE9jdCAxNiAy MDA5CisjbmVlZHMgMjU3IHRhYmxlIGVudHJpZXMgKEMtS2VybWl0IFZlcnNpb24gIjkuMC4yOTki KS4KKyNPSzogMjAxMC8wMy8yNgoraHB1eDA2NTA6CisJQCQoTUFLRSkgaHB1eC1oZWFkZXIKKwlA TUVTU0FHRTI9JCR7TUVTU0FHRTI6LSdhbmQgTk8gbmV0d29yayd9OyBcCisJZWNobyAic3VwcG9y dGluZzogTk8gbG9uZyBmaWxlbmFtZXMgJCRNRVNTQUdFMi4iCisKKwkkKE1BS0UpIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCQlja3V1czMuJChFWFQpIGNrdXVzNC4kKEVYVCkgY2t1dXM1 LiQoRVhUKSBja3V1czYuJChFWFQpIFwKKwkJY2t1dXNyLiQoRVhUKSBja3V4bGEuJChFWFQpIGNr Y2Z0cC4kKEVYVCkgY2tjcHJvLiQoRVhUKSBcCisJIkNGTEFHUyA9IC1ESFBVWCAtREhQVVg2IC1E U0lHX1YgLUROT1NZU0xPRyAtRE5PU0VMRUNUIC1ERk5GTE9BVCBcCisJLUREQ0xHRVRDV0QgLURO T0dFVFVTRVJTSEVMTCAtRE5PX0ROU19TUlYgLUROT0xFQVJOIC1ETk9MT05HTE9ORyBcCisJJChL RkxBR1MpIgorCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUyA9IC1ESFBVWCAtREhQVVg2IC1EU0lHX1YgLUROT1NZU0xPRyAtRE5PU0VMRUNUIC1E Rk5GTE9BVCBcCisJLUREQ0xHRVRDV0QgLUROT0dFVFVTRVJTSEVMTCAtRE5PX0ROU19TUlYgLURO T0xFQVJOIC1ETk9MT05HTE9ORyBcCisJJChLRkxBR1MpIC1XYywtTncyNjAgJChPRkxBR1MpIiAi TE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbG0gJChMSUJTKSIKKworI0V4YWN0bHkgYXMgYWJvdmUs IHBsdXMgY3Vyc2VzOgorI09LOiAyMDA5LzEwLzA2CitocHV4MDY1MGM6CisJQE1FU1NBR0UyPSJh bmQgTk8gbmV0d29yayBidXQgd2l0aCBjdXJzZXMiIFwKKwkkKE1BS0UpIGhwdXgwNjUwIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAtRENLX0NVUlNFUyAkKEtGTEFHUyki IFwKKwkiTElCUyA9IC1sY3Vyc2VzIgorCisjRXhhY3RseSBhcyBhYm92ZSwgcGx1cyBjdXJzZXMg KyBuZXR3b3JrOgorI09LOiAyMDA5LzEwLzAyCitocHV4MDY1MHRjcGM6CisJQE1FU1NBR0UyPSJi dXQgd2l0aCBjdXJzZXMgYW5kIHdpdGggVENQL0lQIiBcCisJJChNQUtFKSBocHV4MDY1MCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EQ0tfQ1VSU0VTIC1EVENQU09DS0VU IC1ETk9IQUREUkxJU1QgXAorCS1ESU5UU0VMRUNUIC1ETk9DS0dFVEZRSE9TVCAkKEtGTEFHUyki IFwKKwkiTElCUz0tbGN1cnNlcyIKKworI0V4YWN0bHkgYXMgaHB1eDA2NTAgYnV0IHdpdGggY29t cGlsZXIgb3B0aW1pemF0aW9uOgorI09LOiAyMDA5LzEwLzA2CitocHV4MDY1MG86CisJQE1FU1NB R0UxPSJ3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAorCSQoTUFLRSkgaHB1eDA2NTAgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9 IC1PIgorCisjRXhhY3RseSBhcyBocHV4MDY1MGMgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0 aW9uOgorI09LOiAyMDA5LzEwLzA2CitocHV4MDY1MG9jOgorCUBNRVNTQUdFMT0id2l0aCBjb21w aWxlciBvcHRpbWl6YXRpb24iIFwKKwkkKE1BS0UpIGhwdXgwNjUwYyBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0gJChLRkxBR1MpIiAiT0ZMQUdTID0gLU8iCisKKyNFeGFj dGx5IGFzIGhwdXgwNjUwdGNwYyBidXQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb246CisjT0s6 IDIwMDkvMTAvMDYKK2hwdXgwNjUwb3RjcGM6CisJQE1FU1NBR0UxPSJ3aXRoIGNvbXBpbGVyIG9w dGltaXphdGlvbiIgXAorCSQoTUFLRSkgaHB1eDA2NTB0Y3BjIEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJLRkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAtTyIKKworI1Rha2UgdGhp cyBhcyBzdGFydHVwIGVudHJ5IGZvciBhbGwgJ25vbi1vcHRpbWl6ZWQnIGZpbGVzIHVuZGVyIEhQ LVVYIDcueCEKKyNNYWtlIHN1cmUgd2UgZG9uJ3QgY2FsbCBpdCB3aXRoIHRoZSAnLU8nIG9wdGlv biBiZWNhdXNlIHRoaXMgd2lsbCBibG93IHVwCisjdGhlIGNvbXBpbGVyIQorI09LOiAyMDA5LzA5 LzMwCitocHV4MDcwMG5vb3B0OgorCUBjYXNlICIkKENGTEFHUykiIGluIFwKKwkqLU8qKSBlY2hv ICJEb24ndCB1c2UgQ0ZMQUdTPSAtTyBoZXJlISIgOzsgXAorCSAgICopICQoTUFLRSkgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJICAgICAgY2t1dXNyLiQoRVhUKSBja3V1czMuJChFWFQp IGNrdXVzNC4kKEVYVCkgY2t1dXM1LiQoRVhUKSBcCisJICAgICAgY2t1dXM2LiQoRVhUKSBja3V1 czcuJChFWFQpIGNrdXhsYS4kKEVYVCkgXAorCSAgICAgIGNrY3VuaS4kKEVYVCkgY2tjZnRwLiQo RVhUKSBja2Nwcm8uJChFWFQpIFwKKwkgICAgICA7OyBcCisJZXNhYworCisjSFAtVVggNy4wLCBu byBsb25nIGZpbGVuYW1lcywgbm8gbmV0d29yayBzdXBwb3J0LCBubyBjdXJzZXMuCisjSWYgeW91 IGdldCBjb21waWxlciB3YXJuaW5ncyBsaWtlOgorIydTd2l0Y2ggdGFibGUgb3ZlcmZsb3cuIFRy eSB0aGUgLVdjLC1OdyBvcHRpb24uJyAoZm9yIGNrY3VuaS5jLCBvcgorI290aGVyIGZpbGVzKSBp bmNyZWFzZSB0aGUgJy4uLicgdmFsdWUgaW4gJy1XYywtTncuLi4nISBUaGUgZGVmYXVsdCBtYXhp bXVtCisjc3dpdGNoIHRhYmxlIHN0YWNrICgtTncpIGlzIDI1MCB0YWJsZSBlbnRyaWVzLiBja2N1 bmkuYyBmcm9tIE9jdCAxNiAyMDA5CisjbmVlZHMgMjU3IHRhYmxlIGVudHJpZXMgKEMtS2VybWl0 IFZlcnNpb24gIjkuMC4yOTkiKS4KKyNPSzogMjAxMC8xMC8yNgoraHB1eDA3MDBzZjoKKwlAJChN QUtFKSBocHV4LWhlYWRlcgorCUBlY2hvICdzdXBwb3J0aW5nOiBOTyBsb25nIGZpbGVuYW1lcywg Tk8gbmV0d29yaywgTk8gY3Vyc2VzLicKKwkkKE1BS0UpIGhwdXgwNzAwbm9vcHQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1ESFBVWCAtREhQVVg3IC1EU0lHX1YgLURO T0dFVFVTRVJTSEVMTCAtREZORkxPQVQgXAorCS1ETk9fRE5TX1NSViAkKEtGTEFHUykgLVdjLC1O dzI2MCIKKworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJD RkxBR1MgPSAtREhQVVggLURIUFVYNyAtRFNJR19WIC1ETk9HRVRVU0VSU0hFTEwgLURGTkZMT0FU IFwKKwktRE5PX0ROU19TUlYgJChLRkxBR1MpIC1XYywtTncyNjAgJChPRkxBR1MpIiBcCisJIkxO S0ZMQUdTID0gLXMiICJMSUJTID0gLWxtICQoTElCUykiCisKKyNFeGFjdGx5IGFzIGhwdXgwNzAw c2YgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uOgorI09LOiAyMDA5LzA5LzMwCitocHV4 MDcwMG9zZjoKKwlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIiBcCisJJChN QUtFKSBocHV4MDcwMHNmIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAk KEtGTEFHUykiICJPRkxBR1MgPSAtTyIKKworI0hQLVVYIDcuMCwgc2hvcnQgZmlsZW5hbWVzLCBi dXQgd2l0aCB0Y3AvaXAgYW5kIGN1cnNlcy4KKyNUbyB1c2UgdGhpcywgeW91IG11c3QgaGF2ZSBi b3VnaHQgdGhlIEFSUEEgU2VydmljZXMgUHJvZHVjdCBmcm9tIEhQLCBhbmQgeW91CisjbXVzdCBo YXZlIC91c3IvbGliL2xpYkJTRC5hLgorIworI0lmIHlvdSBnZXQgY29tcGlsZXIgd2FybmluZ3Mg bGlrZToKKyMnU3ltYm9sIHRhYmxlIG92ZXJmbG93LiBUcnkgdGhlIC1XYywtTnMgb3B0aW9uLicg KGFzIGZvciBja3V1czQuYyBvcgorI290aGVyIGZpbGVzKSBpbmNyZWFzZSB0aGUgJy4uLicgdmFs dWUgaW4gJy1XYywtTnMuLi4nISBUaGUgZGVmYXVsdCBtYXhpbXVtCisjc3ltYm9sIHRhYmxlIHNp emUgKC1OcykgaXMgMjAwMCB0YWJsZSBlbnRyaWVzLiBja3V1czQuYyBmcm9tIE1hciAxMiAyMDEw CisjbmVlZHMgMjAzMSB0YWJsZSBlbnRyaWVzIChDLUtlcm1pdCBWZXJzaW9uICI5LjAuMjk5Iiku CisjT0s6IDIwMTAvMDMvMjQKK2hwdXgwNzAwc2Z0Y3BjOgorCUAkKE1BS0UpIGhwdXgtaGVhZGVy CisJQGVjaG8gJ3N1cHBvcnRpbmc6IE5PIGxvbmcgZmlsZW5hbWVzLCBcYycKKwlAZWNobyAnYnV0 IHdpdGggbmV0d29ya2luZywgY3Vyc2VzLCBIREIgdXVjcC4uLicKKwkkKE1BS0UpIGhwdXgwNzAw bm9vcHQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9ICAtREhQVVhERUJV RyAtREhQVVggLURIUFVYNyAtRFRDUFNPQ0tFVCAtRFNJR19WIFwKKwktRENLX1JFRElSIC1EQ0tf UlRTQ1RTIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgLURGTkZMT0FUIFwKKwktRE5PX0RO U19TUlYgLURIREJVVUNQIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgXAorCS1E Tk9MT05HTE9ORyAkKEtGTEFHUykgLVdjLC1OdzI2MCwtTnMyMDQwIgorCisJJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9ICAtREhQVVhERUJVRyAt REhQVVggLURIUFVYNyAtRFRDUFNPQ0tFVCAtRFNJR19WIFwKKwktRENLX1JFRElSIC1EQ0tfUlRT Q1RTIC1EQ0tfQ1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgLURGTkZMT0FUIFwKKwktRE5PX0ROU19T UlYgLURIREJVVUNQIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgXAorCS1ETk9M T05HTE9ORyAkKEtGTEFHUykgLVdjLC1OdzI2MCwtTnMyMDQwICQoT0ZMQUdTKSIgXAorCSJMTktG TEFHUyA9IC1zIiAiTElCUyA9IC1sbSAtbEJTRCAtbGN1cnNlcyIKKworI0V4YWN0bHkgYXMgYWJv dmUgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uOgorI09LOiAyMDA5LzA5LzMwCitocHV4 MDcwMG9zZnRjcGM6CisJQE1FU1NBR0UxPSJ3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAor CSQoTUFLRSkgaHB1eDA3MDBzZnRjcGMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktG TEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1PIgorCisjSFAgOTAwMCBzZXJpZXMgMzAwLzgw MCBIUC1VWCA3LjAsIGxvbmcgZmlsZW5hbWVzLCBuZXR3b3JrIHN1cHBvcnQsIEhEQiB1dWNwLAor I2J1dCBOTyBjdXJzZXMuIFNlZSBjb21tZW50cyBpbiBocHV4MDcwMHNmdGNwYyBhYm91dCBUQ1Av SVAgc3VwcG9ydC4KKyMKKyNJZiB5b3UgZ2V0IGNvbXBpbGVyIHdhcm5pbmdzIGxpa2U6CisjJ1N5 bWJvbCB0YWJsZSBvdmVyZmxvdy4gVHJ5IHRoZSAtV2MsLU5zIG9wdGlvbi4nIChhcyBmb3IgY2t1 dXM0LmMgb3IKKyNvdGhlciBmaWxlcykgaW5jcmVhc2UgdGhlICcuLi4nIHZhbHVlIGluICctV2Ms LU5zLi4uJyEgVGhlIGRlZmF1bHQgbWF4aW11bQorI3N5bWJvbCB0YWJsZSBzaXplICgtTnMpIGlz IDIwMDAgdGFibGUgZW50cmllcy4gY2t1dXM0LmMgZnJvbSBNYXIgMTIgMjAxMAorI25lZWRzIDIw MzEgdGFibGUgZW50cmllcyAoQy1LZXJtaXQgVmVyc2lvbiAiOS4wLjI5OSIpLgorI09LOiAyMDEw LzAzLzI0CitocHV4MDcwMGxmbjoKKwlAJChNQUtFKSBocHV4LWhlYWRlcgorCUBlY2hvICdzdXBw b3J0aW5nOiBsb25nIGZpbGVuYW1lcywgbmV0d29ya2luZywgSERCIHV1Y3AkKE1FU1NBR0UyKS4u LicKKwkkKE1BS0UpIGhwdXgwNzAwbm9vcHQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IkNGTEFHUyA9ICAtREhQVVhERUJVRyAtREhQVVggLURIUFVYNyAtRFRDUFNPQ0tFVCAtRFNJR19W IC1ERk5GTE9BVCBcCisJLUROT0dFVFVTRVJTSEVMTCAtRE5PU0VUQlVGIC1EQ0tfUkVESVIgLURD S19SVFNDVFMgLURMT05HRk4gXAorCS1ETk9fRE5TX1NSViAtRERJUkVOVCAtREhEQlVVQ1AgLURM T0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwXFxcIiBcCisJLUROT0xPTkdMT05HICQoS0ZMQUdT KSAtV2MsLU53MjYwLC1OczIwNDAiCisKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gIC1ESFBVWERFQlVHIC1ESFBVWCAtREhQVVg3IC1EVENQ U09DS0VUIC1EU0lHX1YgLURGTkZMT0FUIFwKKwktRE5PR0VUVVNFUlNIRUxMIC1ETk9TRVRCVUYg LURDS19SRURJUiAtRENLX1JUU0NUUyAtRExPTkdGTiBcCisJLUROT19ETlNfU1JWIC1ERElSRU5U IC1ESERCVVVDUCAtRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3BcXFwiIFwKKwktRE5PTE9O R0xPTkcgJChLRkxBR1MpIC1XYywtTncyNjAsLU5zMjA0MCAkKE9GTEFHUykiIFwKKwkiTE5LRkxB R1MgPSAtcyIgIkxJQlMgPSAtbG0gLWxCU0QgJChMSUJTKSIKKworI0V4YWN0bHkgYXMgYWJvdmUg KyBjdXJzZXMuCisjT0s6IDIwMDkvMDkvMzAKK2hwdXgwNzAwbGZuYzoKKwlATUVTU0FHRTI9Jywg Y3Vyc2VzJyBcCisJJChNQUtFKSBocHV4MDcwMGxmbiBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 IFwKKwkiS0ZMQUdTID0gLURDS19DVVJTRVMgJChLRkxBR1MpIiBcCisJIkxJQlMgPSAtbGN1cnNl cyIKKworI0V4YWN0bHkgYXMgYWJvdmUgaHB1eDA3MDBsZm4gYnV0IHdpdGggY29tcGlsZXIgb3B0 aW1pemF0aW9uOgorI09LOiAyMDA5LzA5LzMwCitocHV4MDcwMG9sZm46CisJQE1FU1NBR0UxPSJ3 aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiIgXAorCSQoTUFLRSkgaHB1eDA3MDBsZm4gS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9ICQoS0ZMQUdTKSIgIk9GTEFHUyA9IC1P IgorCisjRXhhY3RseSBhcyBhYm92ZSBocHV4MDcwMGxmbmMgYnV0IHdpdGggY29tcGlsZXIgb3B0 aW1pemF0aW9uOgorI09LOiAyMDA5LzA5LzMwCitocHV4MDcwMG9sZm5jOgorCUBNRVNTQUdFMT0i d2l0aCBjb21waWxlciBvcHRpbWl6YXRpb24iIFwKKwkkKE1BS0UpIGhwdXgwNzAwbGZuYyBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0gJChLRkxBR1MpIiAiT0ZMQUdTID0g LU8iCisKKyNIUCA5MDAwIFNlcmllcyAzMDAgb3IgNDAwLCBIUC1VWCA4LjAsIGxvbmcgZmlsZW5h bWVzIGFuZCBUQ1AvSVAgc3VwcG9ydC4KKyNUaGlzIG9uZSBzaG91bGQgYWxzbyB3b3JrIG9uIDcw MC84MDAsIGJ1dCB3aXRob3V0IFBBLXNwZWNpZmljIG9wdGltaXphdGlvbi4KKyNJbiBjYXNlIC1E Q0tfUlRTQ1RTIGFuZCAtRENLX1JFRElSIG1ha2UgdHJvdWJsZSwgcmVtb3ZlIHRoZW0uCisjTk9U RTogY2tjcHJvLmMsIGNrdXVzci5jIGFuZCBja3V1czMuYyBibG93IHVwIHRoZSBvcHRpbWl6ZXIs IHNvIGRvbid0IG9wdGltaXplCisjdGhlbS4KKyNGb3IgSFAtVVggOC4wIG9uIE1vdG9yb2xhIENQ VXMsIHlvdSBtaWdodCBoYXZlIHRvIHJlaW5zdGFsbCB5b3VyIGtlcm5lbCB3aXRoCisjbWF4ZHNp eiA+PSAweDAzMDAwMDAwLiAgQnV0IGlmIHBoeXNpY2FsIG1lbW9yeSBpcyBzbWFsbCwgdGhhdCBz dGlsbCB3aWxsIG5vdAorI2hlbHAgbXVjaC4KKyNPSzogMjAwOS8xMC8wMQoraHB1eDA4MDA6CisJ QCQoTUFLRSkgaHB1eC1oZWFkZXIKKwlATUVTU0FHRTM9JCR7TUVTU0FHRTM6PSdUQ1AvSVAnfTsg XAorCWVjaG8gInN1cHBvcnRpbmc6IGxvbmcgZmlsZW5hbWVzLCAkJE1FU1NBR0UzLCBIREIgVVVD UCQoTUVTU0FHRTIpLi4uIgorCSQoTUFLRSkgLUIgIkNDPSQoQ0MpIiAiQ0MyPSQoQ0MyKSIgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJY2tjcHJvLiQoRVhUKSBja3V1c3IuJChFWFQpIGNr dXVzMy4kKEVYVCkgXAorCSJDRkxBR1MgPSAgLURDS19SRURJUiAtREhQVVhERUJVRyAtREhQVVgg LURIUFVYOCAtRFJFTkFNRSAtRFNJR19WIFwKKwktRE5PU0VUQlVGIC1ERElSRU5UIC1EQ0tfUlRT Q1RTIC1EU1RFUk1JT1ggLURMT05HRk4gLURUQ1BTT0NLRVQgXAorCS1ESERCVVVDUCAgLUROT19E TlNfU1JWIC1ETE9DS19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgLURGTkZMT0FUIFwKKwkt RE5PTE9OR0xPTkcgJChLRkxBR1MpIgorCisJJChNQUtFKSAtQiAiQ0M9JChDQykiICJDQzI9JChD QzIpIiB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9ICAtRENL X1JFRElSIC1ESFBVWERFQlVHIC1ESFBVWCAtREhQVVg4IC1EUkVOQU1FIC1EU0lHX1YgXAorCS1E Tk9TRVRCVUYgLURESVJFTlQgLURDS19SVFNDVFMgLURTVEVSTUlPWCAtRExPTkdGTiAtRFRDUFNP Q0tFVCBcCisJLURIREJVVUNQICAtRE5PX0ROU19TUlYgLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9v bC91dWNwXFxcIiAtREZORkxPQVQgXAorCS1ETk9MT05HTE9ORyAtRE5PRENMRU5EVVNFUlNIRUxM ICQoS0ZMQUdTKSAkKE9GTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbG0gLWxC U0QgJChMSUJTKSIKKworI0V4YWN0bHkgYXMgYWJvdmUgaHB1eDA4MDAgKyBjdXJzZXMuCisjT0s6 IDIwMDkvMTAvMDEKK2hwdXgwODAwYzoKKwlATUVTU0FHRTI9JywgY3Vyc2VzJyBcCisJJChNQUtF KSBocHV4MDgwMCAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9ICQoS0ZM QUdTKSAtRENLX0NVUlNFUyIgIkxJQlMgPSAtbGN1cnNlcyIKKworI0hQIDkwMDAgSFAtVVggOC4w LCBubyBUQ1AvSVAgYmVjYXVzZSAvdXNyL2xpYi9saWJCU0QuYSBjYW4ndCBiZSBmb3VuZCwKKyNv ciBUQ1AvSVAgaGVhZGVyIGZpbGVzIG1pc3NpbmcuCisjT0s6IDIwMDkvMTAvMDEKK2hwdXgwODAw bm90Y3A6CisJQE1FU1NBR0UzPSdOTyBuZXR3b3JrLCBOTyBjdXJzZXMnIFwKKwkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIGhwdXgwODAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxB R1MgPSAkKEtGTEFHUykgLVVUQ1BTT0NLRVQiCisKKyNOb3cgdGhlIHNhbWUgYXMgYWJvdmUgaHB1 eDA4MDAgYnV0IHdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uCisjT0s6IDIwMDkvMTAvMDEKK2hw dXgwODAwbzoKKwlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIiBcCisJJChN QUtFKSBocHV4MDgwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0gJChL RkxBR1MpIiAiT0ZMQUdTID0gLU8iCisKKyNFeGFjdGx5IGFzIGFib3ZlIGhwdXgwODAwICsgY3Vy c2VzIGFuZCB3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbi4KKyNPSzogMjAwOS8xMC8wMQoraHB1 eDA4MDBvYzoKKwlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0aW1pemF0aW9uIiBcCisJJChN QUtFKSBocHV4MDgwMGMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUyA9ICQo S0ZMQUdTKSIgIk9GTEFHUyA9IC1PIiAiTElCUyA9IC1sY3Vyc2VzIgorCisjRXhhY3RseSBhcyBh Ym92ZSBocHV4MDgwMG5vdGNwIGJ1dCB3aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbgorI09LOiAy MDA5LzEwLzAxCitocHV4MDgwMG9ub3RjcDoKKwlATUVTU0FHRTE9IndpdGggY29tcGlsZXIgb3B0 aW1pemF0aW9uIiBcCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBocHV4MDgwMG5vdGNwIEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAt TyIKKworI0hQIDkwMDAgU2VyaWVzIDcwMCBvciA4MDAsIEhQLVVYIDguMCwgbG9uZyBmaWxlbmFt ZXMgYW5kIFRDUC9JUCBzdXBwb3J0LgorIyBMaWtlIHRoZSBwcmV2aW91cyBlbnRyaWVzLCBidXQg d2l0aCBQQS1SSVNDLXNwZWNpZmljIG9wdGltaXphdGlvbi4KKyNPSzogMjAwOS8xMC8wMQoraHB1 eDA4MDBwYToKKwlATUVTU0FHRTE9IndpdGggUEEtUklTQy1zcGVjaWZpYyBvcHRpbWl6YXRpb24i IFwKKwkkKE1BS0UpIGhwdXgwODAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxB R1MgPSAkKEtGTEFHUykgK09iYjExMDAiCisKKyNBcyBhYm92ZSwgYnV0IHdpdGggY3Vyc2VzLgor I09LOiAyMDA5LzEwLzAxCitocHV4MDgwMHBhYzoKKwlATUVTU0FHRTE9IndpdGggUEEtUklTQy1z cGVjaWZpYyBvcHRpbWl6YXRpb24iIFwKKwkkKE1BS0UpIGhwdXgwODAwYyBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0gJChLRkxBR1MpICtPYmIxMTAwIgorCisjQXMgYWJv dmUsIGJ1dCBjb21waWxlZCB3aXRoIEdDQyAyLjMuMy4KKyNPSzogMjAwOS8xMC8wMQoraHB1eDA4 MDBwYWdjYzoKKwlATUVTU0FHRTE9J3VzaW5nIHRoZSBnY2MgY29tcGlsZXInIFwKKwkkKE1BS0Up IGhwdXgwODAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDQz1nY2MiICJDQzI9Z2Nj IiAiS0ZMQUdTID0gLWZ1bnNpZ25lZC1jaGFyICQoS0ZMQUdTKSIKKworI0hQLVVYIDkuMCwgOS4w MSwgOS4wMywgOS4wNCwgOS4wNSwgOS4wNywgOS4xMCAuLi4sICsgVENQL0lQICsgY3Vyc2VzLCBm dWxseQorI2NvbmZpZ3VyZWQuICBVc2UgdGhpcyBlbnRyeSB3aXRoIHRoZSByZXN0cmljdGVkIGNv bXBpbGVyOiBubyBvcHRpbWl6YXRpb24sIG5vCisjQU5TSSBzdXBwb3J0LiAgSWYgeW91IGdldCB1 bnJlc29sdmVkIHNvY2tldHMgbGlicmFyeSByZWZlcmVuY2VzIGF0IGxpbmsgdGltZSwKKyN0aGVu IHRyeSBhZGRpbmcgLWxCU0QgdG8gTElCUywgb3IgZWxzZSByZW1vdmUgLURUQ1BTT0NLRVQgdG8g YnVpbGQgYSB2ZXJzaW9uCisjd2l0aG91dCBUQ1AvSVAgc3VwcG9ydC4KKyMKKyNQbGVhc2Ugbm90 ZSB0aGF0IHdlIGhhdmUgdG8gYWRkIHRoZSBjb21waWxlciBvcHRpb24gK0RBMS4wLytEQTEuMSB0 byBhdm9pZAorI2NvcmUtZHVtcHMgZm9yIGxhcmdlIGFyZ3VtZW50cyBpbiBJRiBNQVRDSC4gVGhl IG1hbiBwYWdlIHNheXMgdGhlc2Ugb3B0aW9ucworI2FyZSBkZWZhdWx0IGJ1dCBDLUtlcm1pdCBk dW1wcyBjb3JlIHdpdGhvdXQgdGhlbSEgVGhlcmVmb3JlIGtlZXAgdGhlbQorI3VudG91Y2hlZC4g SWYgeW91IHdhbnQgdG8gb3ZlcndyaXRlIG9yIGRpc2FibGUgdGhlICtEQTEuMC8rREExLjEgb3B0 aW9uIHVzZQorIydtYWtlIGhwdXgwOTAwIE9GTEFHUz0uLi4nLiBBbiBvdGhlciBwb3NzaWJpbGl0 eSB3b3VsZCBiZSB0byBjcmVhdGUgYSBuZXcKKyNrZXJuZWwgd2l0aCBtYXhzc2l6ID49IDB4MDEx ODUwMDAgKGRlZmF1bHQgbWF4c3Npej0weDAwODAwMDAwKS4KKyNPSzogMjAwOS8wOS8yNAoraHB1 eDA5MDA6CisJQE1FU1NBR0UxQT0nLiBSZWFkIGhwdXgwOTAwIGVudHJ5IGNvbW1lbnRzIGlmIHlv dSBoYXZlIHRyb3VibGUuJyBcCisJJChNQUtFKSBocHV4LWhlYWRlcgorCUBjYXNlIGB1bmFtZSAt bWAgaW4gXAorCSAgKi9bMzRdKikgS0ZMQUdTPSctRE5PTE9OR0xPTkcgJChLRkxBR1MpJyA7OyBc CisJICAqLzcqKSAgICBBRkxBR1M9JytEQTEuMScgOzsgXAorCSAgKi84KikgICAgQUZMQUdTPScr REExLjAnIDs7IFwKKwllc2FjIDsgXAorCU9GTEFHUz0kJHtPRkxBR1M6LSQkQUZMQUdTfSA7IFwK KwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0g LURIUFVYREVCVUcgLURIUFVYOSAtRFNURVJNSU9YIC1ERElSRU5UIC1EVVRJTUVIIFwKKwktRE5P U0VUQlVGIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EUkVOQU1FIC1EQ0tfUkVESVIgLURMT05H Rk4gXAorCS1ESERCVVVDUCAtRExPQ0tfRElSPVxcXCIvdXNyL3Nwb29sL3V1Y3BcXFwiIC1ERk5G TE9BVCBcCisJLUROT0RDTEVORFVTRVJTSEVMTCAkJEtGTEFHUyAkJE9GTEFHUyIgXAorCSJMTktG TEFHUyA9IC1zIiAiTElCUyA9IC1sbSAtbGN1cnNlcyIgIkNDPSQoQ0MpIiAiQ0MyPSQoQ0MyKSIK KworI0xpa2UgaHB1eDA5MDAsIGJ1dCBmb3IgdGhlICJ2YWx1ZS1hZGRlZCIgY29tcGlsZXIgb24g YWxsIEhQIDkwMDAgbW9kZWxzLgorI0FkZHMgb3B0aW1pemF0aW9uIGFuZCBBTlNJIGNvbXBpbGF0 aW9uOgorIyArTzIgbWFrZXMgc21hbGxlciBleGVjdXRhYmxlICg9IC1PID0gTGV2ZWwtMSBhbmQg Z2xvYmFsIG9wdGltaXphdGlvbikKKyMgK08zIGFkZHMgaW50ZXJwcm9jZWR1cmFsIGdsb2JhbCBv cHRpbWl6YXRpb24sIG1ha2VzIGJpZ2dlciBleGVjdXRhYmxlLgorIyBQbGVhc2Ugbm90ZTogVG8g c3VwcG9ydCBsb25nLWxvbmcgd2Ugd291bGQgbmVlZCBjb21waWxlciBzd2l0Y2ggJy1BZScgYnV0 CisjIHRoaXMgb25lIHdvcmtzIG9ubHkgb24gUmlzYyBzeXN0ZW1zLiBCdXQgdGhlIGVxdWl2YWxh bnQgY29tcGlsZXIgZmxhZ3MKKyMgJy1BYSAtRF9IUFVYX1NPVVJDRSArZScgd29ya3MgZm9yIE1v dG9yb2xhIGFuZCBSaXNjLgorIyBJZiBvcHRpbWl6YXRpb24gZmFpbHMgb24gc29tZSBtb2R1bGVz LCB5b3UgY2FuIGFkZDoKKyMgICtPYmI8bj4sICtPbGltaXQgPG4+LCBvciArT25vbGltaXQsIGRl cGVuZGluZyBvbiB5b3VyIGNjIHZlcnNpb24sCisjIHdoZXJlIDxuPiBpcyBhIG51bWJlciwgZS5n LiArT2JiMTIwMC4gIEluIG90aGVyIHdvcmRzLCBpZiB5b3UgZ2V0IG9wdGltaXplcgorIyB3YXJu aW5ncywgYWRkIChmb3IgZXhhbXBsZSkgK09iYjEyMDA7IGlmIHlvdSBzdGlsbCBnZXQgb3B0aW1p emVyIHdhcm5pbmdzLAorIyBpbmNyZWFzZSB0aGUgbnVtYmVyLiAgUmVwZWF0IHVudGlsIHdhcm5p bmdzIGdvIGF3YXkuICBJZiB5b3VyIGNvbXBpbGVyCisjIHBlcm1pdHMgaXQsIHVzZSArT25vbGlt aXQuIElmIG9wdGltaXplciBibG93cyB1cCBvbiBja2Nwcm8uYywgc2VlIG5leHQgZW50cnkuCisj IFJlcG9ydGVkbHksIG9uIHNvbWUgY29uZmlndXJhdGlvbnMsIHN1Y2ggYXMgSFA5MDAwLzQyNWUg b3IgLzM0MCwgcGVyaGFwcworIyBkZXBlbmRpbmcgb24gdGhlIGFtb3VudCBvZiBtYWluIG1lbW9y eSwgdGhpcyBlbnRyeSBtaWdodCBmYWlsIG5vIG1hdHRlciB3aGF0CisjIHlvdSBkbyAoIk91dCBv ZiBNZW1vcnkiLCAiY2M6IEZhdGFsIGVycm9yIGluIC9saWIvYy5jMSIsIGV0YykuICBJbiB0aGF0 IGNhc2UKKyMgdXNlICJtYWtlIGhwdXgwOTAwIiAobm8gIm8iKS4KKyNPSzogMjAwOS8wOS8yNAor aHB1eDA5MDBvOgorCUBNRVNTQUdFMT0kJHtNRVNTQUdFMTotIndpdGggY29tcGlsZXIgb3B0aW1p emF0aW9uIn0gXAorCSQoTUFLRSkgaHB1eDA5MDAgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIktGTEFHUyA9ICQoS0ZMQUdTKSAtQWEgLURDS19BTlNJQyAtRF9IUFVYX1NPVVJDRSArTzIg K2UiCisKKyMgRm9yIEhQLVVYIDkuMCBvbiBNb3Rvcm9sYSBDUFVzLCBvcHRpbWl6YXRpb24gb2Yg Y2tjcHJvLmMgdGVuZHMgdG8gYmxvdyB1cAorIyB0aGUgY29tcGlsZXIuICBZb3UgbWlnaHQgaGF2 ZSB0byByZWluc3RhbGwgeW91ciBrZXJuZWwgd2l0aCBtYXhkc2l6ID49CisjIDB4MDMwMDAwMDAu ICBCdXQgaWYgcGh5c2ljYWwgbWVtb3J5IGlzIHNtYWxsLCB0aGF0IHN0aWxsIHdpbGwgbm90IGhl bHAgbXVjaC4KKyMgSW4gdGhhdCBjYXNlLCB1c2UgdGhpcyBlbnRyeSB0byBza2lwIG9wdGltaXph dGlvbiBvZiBja2Nwcm8uYy4gIEJ1dCBmb3IKKyMgQy1LZXJtaXQgOC4wLjIwOCB5b3UgbmVlZCBh IGtlcm5lbCB3aXRoIG1heGRzaXogPj0gMHgwMjAwMDAwMCB0byBjb21waWxlIGFuCisjIG9wdGlt aXplZCBja2NmdHAuYy4KKyMgUGxlYXNlIG5vdGU6IFRvIHN1cHBvcnQgbG9uZy1sb25nIHdlIHdv dWxkIG5lZWQgY29tcGlsZXIgc3dpdGNoICctQWUnIGJ1dAorIyB0aGlzIG9uZSB3b3JrcyBvbmx5 IG9uIFJpc2Mgc3lzdGVtcy4gQnV0IHRoZSBlcXVpdmFsYW50IGNvbXBpbGVyIGZsYWdzCisjICct QWEgLURfSFBVWF9TT1VSQ0UgK2UnIHdvcmtzIGZvciBNb3Rvcm9sYSBhbmQgUmlzYy4KK2hwdXgw OTAwbTY4a286CisJQE1FU1NBR0UxPSd3aXRob3V0IGNvbXBpbGVyIG9wdGltaXphdGlvbiBmb3Ig Y2tjcHJvLiQoRVhUKSAuLi4nIFwKKwkkKE1BS0UpIGhwdXgtaGVhZGVyCisJJChNQUtFKSBja3V1 c3IuJChFWFQpIGNrdXVzMy4kKEVYVCkgY2t1dXM0LiQoRVhUKSBcCisJY2tjZnRwLiQoRVhUKSBj a2Nwcm8uJChFWFQpIFwKKwkiQ0ZMQUdTID0gLURIUFVYREVCVUcgLURIUFVYOSAtRFNURVJNSU9Y IC1ERElSRU5UIFwKKwktRE5PU0VUQlVGIC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIC1EUkVOQU1F ICAtRENLX1JFRElSIC1ETE9OR0ZOIFwKKwktREhEQlVVQ1AgLURMT0NLX0RJUj1cXFwiL3Vzci9z cG9vbC91dWNwXFxcIiAtREZORkxPQVQgJChLRkxBR1MpIgorCUBlY2hvCisJQE1FU1NBR0UxPSJ3 aXRoIGNvbXBpbGVyIG9wdGltaXphdGlvbiBmb3IgdGhlIHJlc3QiIFwKKwkkKE1BS0UpIGhwdXgw OTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAkKEtGTEFHUykgLUFh IC1EQ0tfQU5TSUMgLURfSFBVWF9TT1VSQ0UgK08yICtlIgorCisjIE9sZCBuYW1lIGZvciBocHV4 MDkwMG02OGtvLgoraHB1eDA5MDBtb3Q6CisJJChNQUtFKSBocHV4MDkwMG02OGtvIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9ICQoS0ZMQUdTKSIKKworI0xpa2UgaHB1eDA5MDBv IGJ1dCB3aXRoIGFkZGl0aW9uYWwgbW9kZWwtNzAwLzgwMC1zcGVjaWZpYyBvcHRpbWl6YXRpb25z LgorIyArRVNsaXQgPSBjb25zb2xpZGF0ZSBzdHJpbmdzIGluIHJlYWQtb25seSBtZW1vcnkuCisj ICtFU2ZzYyA9IGlubGluZSBtaWxsaWNvZGUgY2FsbHMgd2hlbiBjb21wYXJpbmcgcG9pbnRlcnMu CitocHV4MDkwMG83MDA6CisJQGVjaG8gJ0lmIHlvdSBnZXQgb3B0aW1pemVyIHdhcm5pbmdzIFxj JworCUBlY2hvICd0cnkgIm1ha2UgaHB1eDA5MDBvNzAwIEtGTEFHUz0rT2JiMTIwMCInCisJQE1F U1NBR0UxPSJ3aXRoIFBBLVJJU0Mtc3BlY2lmaWMgb3B0aW1pemF0aW9ucyIgXAorCSQoTUFLRSkg aHB1eDA5MDBvIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1MgPSAkKEtGTEFH UykgK0VTbGl0ICtFU3NmYyIKKworI0hQLVVYIDkuMCwgOS4wMSwgOS4wMywgOS4wNCwgOS4wNSwg OS4wNywgOS4xMCAuLi4sICsgVENQL0lQICsgY3Vyc2VzLCBmdWxseQorI2NvbmZpZ3VyZWQsIGJ1 aWx0IHdpdGggZ2NjLCBhbGwgbW9kZWxzIGV4Y2VwdCA4MDAgc2VyaWVzLgorI1lvdSBtaWdodCBu ZWVkIHRvIGFkZCB0aGUgaW5jbHVkZSBwYXRoIGZvciBnY2MgaGVhZGVycywgZm9yIGV4YW1wbGU6 CisjICdLRkxBR1M9LUkvdXNyL2dudS9saWIvZ2NjLWxpYi9ocHBhMS4xLWhwLWhwdXgvMi40LjUv aW5jbHVkZS8nCitocHV4MDkwMGdjYzoKKwlATUVTU0FHRTE9J3VzaW5nIHRoZSBnY2MgY29tcGls ZXInIFwKKwkkKE1BS0UpIGhwdXgwOTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2Nj IENDMj1nY2MgXAorCSJLRkxBR1MgPSAtRENLX0FOU0lDICQoS0ZMQUdTKSIgXAorCSJPRkxBR1Mg PSAtZnVuc2lnbmVkLWNoYXIgLU8yICQoT0ZMQUdTKSIKKworI0hQLTkwMDAgSFAtVVggMTAuMCAr IFRDUC9JUCArIGN1cnNlcywgZnVsbHkgY29uZmlndXJlZC4KKyNVc2Ugd2l0aCByZXN0cmljdGVk IChidW5kbGVkKSBjb21waWxlcjogbm8gb3B0aW1pemF0aW9uLCBubyBBTlNJIHN1cHBvcnQuCisj bGliY3Vyc2VzIG5lZWRlZCBmb3IgZnVsbHNjcmVlbiBmaWxlIHhmZXIgZGlzcGxheSBpbiBIUC1V WCAxMC4wMCBhbmQgMTAuMDEuCisjbGliSGN1cnNlcyAoTk9UIGxpYmN1cnNlcyEpIGZvciBmdWxs c2NyZWVuIGRpc3BsYXksIHRvIHdvcmsgYXJvdW5kIGZhdGFsIGJ1Z3MKKyNpbiBIUC1VWCAxMC4x MCBhbmQgMTAuMjAgY3Vyc2VzLiBNYXliZSB3ZSBjb3VsZCB1c2UgbGN1cnNlcyBmb3IgMTAuMzAs IHNpbmNlCisjdGhlIDEwLjEwIGN1cnNlcyBwcm9ibGVtIGlzIHN1cHBvc2VkbHkgZml4ZWQgaW4g MTAuMzAuCisjICtEQTEuMCA9IEdlbmVyYXRlIFBBLVJJU0MgMS4wIGNvZGUgdGhhdCBydW5zIG9u IGJvdGggNzAwIGFuZCA4MDAgbW9kZWxzLgorIyArREExLjEgPSBHZW5lcmF0ZSBQQS1SSVNDIDEu MSBjb2RlIHRoYXQgcnVucyBvbiBib3RoIDcwMCBhbmQgODAwIG1vZGVscy4KKyMgTm90ZSB0aGF0 IEhQLVVYIDEwLjIwIGFuZCB1cHdhcmRzIGRvIG5vdCBzdXBwb3J0IFBBLVJJU0MgMS4wIHN5c3Rl bXMuCisjIEFuZCB0aGF0IGFzIG9mIERlYyAyMDAxLCAxMS4wMCBhbmQgMTEuMTEgYXJlIFBBLW9u bHkgYW5kIDExLjIwIGlzIElBNjQtb25seS4KKyMgTGF0ZXIgMTEuMnggcmVsZWFzZXMgYXJlIGV4 cGVjdGVkIHRvIGJlIGZvciBib3RoLiAgQXJjaGl0ZWN0dXJlIGNhbiBiZQorIyBkZXRlcm1pbmVk IHdpdGggdGhlIG1vZGVsIGNvbW1hbmQsIGF0IGxlYXN0IGluIDEwLjIwIGFuZCBsYXRlci4uLgor I0ZvciBmdXR1cmUgcmVsZWFzZXMsIHdlIG5lZWQgdG8gaW5jbHVkZSArREExLjEgZm9yIFBBIGJ1 aWxkcywgc28gdGhhdCBhCisjYmluYXJ5IGJ1aWx0IG9uIFBBIDIuMCB3aWxsIHN0aWxsIHdvcmsg b24gUEEgMS4xIG1hY2hpbmVzLCB3aGVyZWFzICtEQTEuMQorI211c3QgTk9UIGJlIGluY2x1ZGVk IGZvciBJQTY0IGJ1aWxkcy4KKyM0IEphbiAyMDA2IC0gQWRkZWQgTGFyZ2UgRmlsZSBTdXBwb3J0 IChMRlMpLiAgTGFyZ2UgZmlsZXMgKD4yR0IpIGFyZQorI3Bvc3NpYmxlIGluIEhQLVVYIDEwLjIw IGFuZCBsYXRlci4gIFRoZSBvbmx5IGNoYW5nZSBpcyB0byBhZGQ6CisjIC1EX0xBUkdFRklMRV9T T1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NAorI3RvIEtGTEFHUy4gIFRoZXNlIHNob3VsZCBi ZSBoYXJtbGVzcyBpbiAxMC4wMCBhbmQgMTAuMTAsIGlmIGFueSBvZiBleGFtcGxlcworI29mIHRo b3NlIHN0aWxsIGV4aXN0LCBidXQgSSBoYXZlIG5vIHdheSB0byB0ZXN0IHRoaXMgaHlwb3RoZXNp cy4KKyNPSzogMjAwOS8xMS8xNgoraHB1eDEwMDA6CisJQCQoTUFLRSkgaHB1eC1oZWFkZXIKKwlA TElCUz0nLWxIY3Vyc2VzJyA7IFwKKwlBRkxBR1M9JytEQTEuMScgOyBcCisJY2FzZSBgdW5hbWUg LXJgIGluIFwKKwkgICBbQUJdLjEwLjAqKSAgS0ZMQUdTPSctREhQVVgxMDAwICQoS0ZMQUdTKScg OyBcCisJICAgICAgICAgICAgICAgIEFGTEFHUz0nK0RBMS4wJyA7IExJQlM9Jy1sY3Vyc2VzJyAg OzsgXAorCSAgIFtBQl0uMTAuMSopICBLRkxBR1M9Jy1ESFBVWDEwMTAgLURfX0hQX0NVUlNFUyAk KEtGTEFHUyknIDsgXAorCSAgICAgICAgICAgICAgICA7OyBcCisJICAgW0FCXS4xMC4yKikgIEtG TEFHUz0nLURIUFVYMTAyMCAtRF9fSFBfQ1VSU0VTICQoS0ZMQUdTKScgOyBcCisJICAgICAgICAg ICAgICAgIDs7IFwKKwkgICBbQUJdLjEwLjMqKSAgS0ZMQUdTPSctREhQVVgxMDMwIC1EX19IUF9D VVJTRVMgJChLRkxBR1MpJyA7IFwKKwkgICAgICAgICAgICAgICAgOzsgXAorCSAgIFtBQl0uMTAu PyopICBLRkxBR1M9Jy1ESFBVWDEwWFggLURfX0hQX0NVUlNFUyAkKEtGTEFHUyknIDsgXAorCSAg ICAgICAgICAgICAgICA7OyBcCisJICAgW0FCXS4xMS4wKikgIEtGTEFHUz0nLURIUFVYMTEwMCAt RF9fSFBfQ1VSU0VTICQoS0ZMQUdTKScgOyBcCisJICAgICAgICAgICAgICAgIDs7IFwKKwkgICBb QUJdLjExLjEqKSAgS0ZMQUdTPSctREhQVVgxMTAwIC1EX19IUF9DVVJTRVMgJChLRkxBR1MpJyA7 IFwKKwkgICAgICAgICAgICAgICAgOzsgXAorCSAgIFtBQl0uMTEuPyopICBLRkxBR1M9Jy1ESFBV WDExMDAgLURfX0hQX0NVUlNFUyAkKEtGTEFHUyknIDsgXAorCSAgICAgICAgICAgICAgICBBRkxB R1M9JycgOyBMSUJTPSctbGN1cnNlcycgOzsgXAorCWVzYWMgOyBcCisJT0ZMQUdTPSQke09GTEFH UzotJCRBRkxBR1N9IDsgXAorCSQoTUFLRSkgIlNIRUxMPS91c3IvYmluL3NoIiB4ZXJtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNDPSQoQ0MpIiAiQ0MyPSQoQ0MyKSIgXAorCSJD RkxBR1MgPSAtREhQVVgxMCAtRERJUkVOVCAtRFNURVJNSU9YIC1EQ0tfRFNZU0lOSSAtREhEQlVV Q1AgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfV1JFRlJFU0ggLURUQ1BTT0NLRVQgLURDS19SRURJUiAt RFJFTkFNRSAtREZORkxPQVQgXAorCS1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRf QklUUz02NCBcCisJJCRLRkxBR1MgJCRPRkxBR1MiIFwKKwkiTE5LRkxBR1M9LXMgJChMTktGTEFH UykiICJMSUJTID0gLWxtICQkTElCUyAkKEtMSUJTKSIKKworIyBUaGlzIGlzIGEga2x1ZGdlLCBj b3B5aW5nIGhwdXgwOTAwZ2NjIGFuZCBhZGFwdGluZyBocHV4MTAwMAorIyAoYWRkIENDIGFuZCBD QzIsIGRyb3AgdGhlIEExLlswfHwxXSkKKyMgQnVpbGRzIHcvIG5vIGNvbXBpbGVyIHdhcm5pbmdz IGJ1dCBtaW5pbWFsbHkgdGVzdGVkLgorIworI09LOiAyMDA5LzA5LzIxCitocHV4MTAwMGdjYzoK KwlATUVTU0FHRTE9InVzaW5nIHRoZSBnY2MgY29tcGlsZXIgJChNRVNTQUdFMSkiIFwKKwkkKE1B S0UpIGhwdXgxMDAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gQ0M9Z2NjIENDMj1nY2MgXAor CSJLRkxBR1MgPSAkKEtGTEFHUykiICJPRkxBR1MgPSAtRENLX0FOU0lDIC1mdW5zaWduZWQtY2hh ciAtTzIiCisKKyMgVHJ1c3RlZCBIUC1VWCAxMAorIyBlY2hvIEtGTEFHUz0kKEtGTEFHUykgWVRB UkdFVCBZVEFSR0VUPSQoWVRBUkdFVCkgJChYVEFSR0VUKSA7CitocHV4MTAwMHQ6CisJQGNhc2Ug IiQoS1RBUkdFVCkiIGluIFwKKwkgICAqK29wZW5zc2wgfCAqK3NzbCkgXAorCQlLRU5UUlk9aHB1 eDEwMDBvK29wZW5zc2wgOzsgXAorCSAgICpnY2MpIFwKKwkJS0VOVFJZPWhwdXgxMDAwZ2NjIDs7 IFwKKwkgICAqbyspIEtFTlRSWT1ocHV4MTAwMG8rIDs7IFwKKwkgICAqbykJS0VOVFJZPWhwdXgx MDAwbyA7OyBcCisJICAgKikJS0VOVFJZPWhwdXgxMDAwIDs7IFwKKwllc2FjIDsgXAorCU1FU1NB R0UxPSJhbmQgc3VwcG9ydCBmb3IgJ1RydXN0ZWQgSFAtVVgnIiBcCisJJChNQUtFKSAkJEtFTlRS WSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTID0gJChLRkxBR1MpIC1ESFBV WDEwX1RSVVNURUQiICJLTElCUz0tbHNlYyIKKworaHB1eDEwMDB0bzoKKwkkKE1BS0UpIGhwdXgx MDAwdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKK2hwdXgxMDAwdG8rOgorCSQoTUFLRSkg aHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworaHB1eDEwMDB0Z2NjOgorCSQo TUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworaHB1eDEwMDB0bytz c2wgaHB1eDEwMDB0bytvcGVuc3NsOgorCSQoTUFLRSkgaHB1eDEwMDB0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0KKworaHB1eDEwMDB0Z2NjK3NzbCBocHV4MTAwMHRnY2Mrb3BlbnNzbDoKKwkk KE1BS0UpIGhwdXgxMDAwdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNIUC05MDAwIEhQ LVVYIDEwLjAwIGFuZCBoaWdoZXIgd2l0aCBBTlNJIHByb3RvdHlwaW5nIGFuZCBvcHRpbWl6YXRp b24uCisjUEEtUklTQyBvbmx5LCBubyBNb3Rvcm9sYSBvciBvdGhlciBoYXJkd2FyZSBpcyBzdXBw b3J0IGluIEhQLVVYIDEwLjAwKysuCisjVGhlIHVuYnVuZGxlZCBvcHRpb25hbCBjb21waWxlciBp cyByZXF1aXJlZC4KKyNZb3VyIHBhdGggc2hvdWxkIHN0YXJ0IHdpdGggL29wdC9hbnNpYy9iaW4u CisjIC1XbCwtRncgPSBSZW1vdmUgc3RhY2sgdW53aW5kIHRhYmxlIChpbmZvIHVzZWQgYnkgZGVi dWdnZXJzKS4KKyMgK08yIG1ha2VzIGEgc21hbGxlciBleGVjdXRhYmxlICg9IC1PID0gTGV2ZWwt MSBhbmQgZ2xvYmFsIG9wdGltaXphdGlvbikuCisjICtPMyBhZGRzIGludGVycHJvY2VkdXJhbCBn bG9iYWwgb3B0aW1pemF0aW9uLCBtYWtlcyBhIGJpZ2dlciBleGVjdXRhYmxlLgorIyArT25vbGlt aXQgYWxsb3dzIGFsbCBtb2R1bGVzIHRvIGJlIG9wdGltaXplZCwgbm8gbWF0dGVyIGhvdyBjb21w bGV4LiAgQnV0OgorIyAgKGEpICtPbm9saW1pdCBkb2VzIG5vdCBzZWVtIHRvIGFsd2F5cyBiZSB0 aGVyZSBpbiBIUC1VWCAxMC4wMCwgYW5kOgorIyAgKGIpIHNvbWUgbW9kdWxlcyBtaWdodCB0YWtl IGhvdXJzIG9uIGxvdy1tZW1vcnkgYW5kL29yIHNsb3cgc3lzdGVtcy4KKyMgVGhlIGZvbGxvd2lu ZyBhcmUgUEEtUklTQy1zcGVjaWZpYyBvcHRpbWl6YXRpb25zOgorIyArRVNsaXQgPSBDb25zb2xp ZGF0ZSBzdHJpbmdzIGluIHJlYWQtb25seSBtZW1vcnkuCisjICtFU2ZzYyA9IElubGluZSBtaWxs aWNvZGUgY2FsbHMgd2hlbiBjb21wYXJpbmcgcG9pbnRlcnMuCisjIFlvdSBtaWdodCBuZWVkIHRv IGNvbmZpZ3VyZSB5b3VyIGtlcm5lbCBmb3IgYSBtYXhkc2l6IG9mIDB4MEIwMDAwMDAgKDE3Nk1C KQorIyBvciBncmVhdGVyIHRvIHByZXZlbnQgdGhlIG9wdGltaXplciBmcm9tIHJ1bm5pbmcgb3V0 IG9mIHNwYWNlLgorIyBEZWNlbWJlciAyMDAxOiArRVNsaXQgK0VTc2ZjIHJlbW92ZWQgYmVjYXVz ZSBub3Qgc3VwcG9ydGVkIG9uIElBNjQuCisjIFNvbWVib2R5IHdobyBjYXJlcyBjYW4gdXNlICdt b2RlbCcgdG8gc2VlIHdoZXRoZXIgaXQncyBQQS1SSVNDIG9yIElBNjQKKyMgYW5kIGluY2x1ZGUg dGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvcHRpbWl6YXRpb24gZmxhZ3MuICBBbHNvIG5vdGU6 CisjICtEQTEuMSBpcyBQQS1vbmx5LiAgSWYgdGhpcyBpcyBpbmNsdWRlZCBpbiBpbiBIUC1VWCAx MS4wMCBvciBsYXRlciwKKyMgdGhlbiArRFMyLjAgc2hvdWxkIGJlIGluY2x1ZGVkIHRvbyAoYnV0 IGRvbid0IHVzZSArRFMyLjAgd2l0aG91dCArREExLjEsCisjIG9yIGVsc2UgdGhlIGJpbmFyeSB3 b24ndCBydW4gb24gb2xkZXIgUEEgaGFyZHdhcmUpLgorI09LOiAyMDA5LzA5LzIxCitocHV4MTAw MG86CisJQGNhc2UgYHVuYW1lIC1tYCBpbiBcCisJICBpYTY0KSA7OyBcCisJICAqKSBNRkxBR1M9 JytFU2xpdCArRVNzZmMnIDs7IFwKKwllc2FjIDsgXAorCU1FU1NBR0UxPSJ3aXRoIFBBLVJJU0Mt c3BlY2lmaWMgb3B0aW1pemF0aW9ucyAkKE1FU1NBR0UxKSIgXAorCSQoTUFLRSkgIlNIRUxMPS91 c3IvYmluL3NoIiAiUEFUSD0vb3B0L2Fuc2ljL2JpbjokJFBBVEgiIGhwdXgxMDAwIFwKKwlLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAkKEtGTEFHUykgXAorCS1BZSAtRF9IUFVY X1NPVVJDRSAtRENLX0FOU0lDIC1EVVRJTUVIIFwKKwkrTzIgLVdsLC1GdyAkJE1GTEFHUyIKKwor I0xpa2UgaHB1eDEwMDBvIGJ1dCB3aXRoICIrT25vbGltaXQiLgorI09uIDcwMCBzZXJpZXMgc2V0 IGtlcm5lbCBwYXJhbWV0ZXIgbWF4ZHNpeiA+PSAweDBEMDAwMDAwICg9MjA4TUIpLgorI1Rha2Vz IGEgbG9uZyB0aW1lLgoraHB1eDEwMDBvKzoKKwlATUVTU0FHRTE9ImFuZCArT25vbGltaXQgJChN RVNTQUdFMSkiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSQoTUFLRSkgaHB1eDEwMDBv IFwKKwkiS0ZMQUdTID0gJChLRkxBR1MpICtPbm9saW1pdCIKKworI0hQLVVYIDEwLnh4ICsgMTEu eHggd2l0aCBvcHRpbWl6aW5nIEFOU0kgY29tcGlsZXIgYW5kIE9wZW5TU0wuCisjRGVmaW5lIFNT TExJQiBhbmQgU1NMSU5DIGFwcHJvcHJpYXRlbHkgZm9yIHlvdXIgT3BlblNTTCBpbnN0YWxsYXRp b24uCisjVG8gb3ZlcndyaXRlIHRoZSBkZWZhdWx0IFNTTExJQiBhbmQgU1NMSU5DIHNldHRpbmdz IHlvdSBjYW4gYWxzbyB1c2UgdGhlCisjY29tbWFuZC1saW5lIHZhcmlhYmxlIEtTU0xMSUIgYW5k IEtTU0xJTkMgbGlrZToKKyNtYWtlIGhwdXgxMDAwbytvcGVuc3NsIEtTU0xMSUI9LUwvb3B0L29w ZW5zc2wvbGliIEtTU0xJTkM9LUkvLi4uCisjRGl0dG8gZm9yIHRoZSBabGliIGxvY2F0aW9uLgor I1RoaXMgZW50cnkgd29ya3MgZm9yIEMtS2VybWl0IDguMC4yMDYgb24gSFAtVVggMTAuMjAgKyAx MS4xMQorI3dpdGggT3BlblNTTCAwLjkuNiArIDAuOS43CisjTk9URTogYW4gQU5TSSBDIGNvbXBp bGVyIGlzIHJlcXVpcmVkIGZvciB0aGUgU1NMIGludGVyZmFjZS4gIElmIHlvdSBkb24ndAorI2hh dmUgdGhlIEhQIE9wdGltaXppbmcgQU5TSSBjb21waWxlciwgc2VlIHRoZSBocHV4MTAwMGdjYytv cGVuc3NsIHRhcmdldAorI2JlbG93LgoraHB1eDEwMDBvK3NzbCBocHV4MTAwMG8rb3BlbnNzbDoK KwlAY2FzZSAiJChLVEFSR0VUKSIgaW4gXAorCSAgICpnY2MrKikgXAorCSAgICAgICAgS0VOVFJZ PWhwdXgxMDAwZ2NjIDs7IFwKKwkgICAqKSAgIEtFTlRSWT1ocHV4MTAwMG8gOzsgXAorCWVzYWMg OyBcCisJY2FzZSAiJChLVEFSR0VUKSIgaW4gXAorCSAgICotemxpYiopIFwKKwkgICAgICAgIERa TElCPSBMWkxJQj0gOzsgXAorCSAgICopICAgRFpMSUI9LURaTElCIExaTElCPSctTC9vcHQvemxp Yi9saWIgLWx6JyA7OyBcCisJZXNhYyA7IFwKKwlTU0xJTkM9JCR7S1NTTElOQzotJChTU0xJTkMp fTsgXAorCVNTTExJQj0kJHtLU1NMTElCOi0kKFNTTExJQil9OyBcCisJTUVTU0FHRTE9ImFuZCB3 aXRoIE9wZW5TU0wgJChNRVNTQUdFMSkiIFwKKwkkKE1BS0UpICQkS0VOVFJZIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCUtGTEFHUz0iLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NTTCAt RE9QRU5TU0xfMDk3ICQkRFpMSUIgXAorCSQkU1NMSU5DICQoS0ZMQUdTKSIgXAorCUtMSUJTPSIk KEtMSUJTKSBcCisJJCRTU0xMSUIgLWxzc2wgLWxjcnlwdG8gXAorCSQkTFpMSUIgXAorCSIKKwor IyBEaXR0byBidXQgd2l0aG91dCBabGliOgoraHB1eDEwMDBvK3NzbC16bGliIGhwdXgxMDAwbytv cGVuc3NsLXpsaWI6CisJQE1FU1NBR0UxPSJidXQgd2l0aG91dCBabGliICQoTUVTU0FHRTEpIiBc CisJJChNQUtFKSBocHV4MTAwMG8rc3NsIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworI0hQ LVVYIDEwLjAwIG9yIGhpZ2hlciB3aXRoIE9wZW5TU0wgMC45LjcuICBDb21waWxlZCB3aXRoIGdj Yy4KKyNGcm9tIENocmlzIENoYW5leSwgTkVDIEFtZXJpY2EgSW5jLiAgSGlzIGluc3RydWN0aW9u czoKKyMgKDEpIEluc3RhbGwgZ2NjIHZlcnNpb24gMy4yLjMgJiBiaW51dGlscyB2ZXJzaW9uIDIu MTMuMgorIyAgICAgKHVzZWQgYmluYXJ5IGRlcG90IGZyb20gaHR0cDovL2hwdXguY3MudXRhaC5l ZHUvKQorIyAoMikgSW5zdGFsbCBnY2MgbWFrZSB2ZXJzaW9uIDMuODAgZnJvbSBodHRwOi8vaHB1 eC5jcy51dGFoLmVkdS8KKyMKKyMgb3I6IGdjYyAyLjkuMjAwMC0xMi0xIGZyb20gIkxpbnV4IHRv IGhwLXV4IDExLjAvMTFpIHBvcnRpbmcga2l0IHZlcnNpb24gMS4wCisjICAgICAoMkNEKSIgZnJl ZSBmcm9tOiAgaHR0cDovL3d3dy5zb2Z0d2FyZS5ocC5jb20KKyMKKyMgKDMpIEluc3RhbGwgb3Bl blNTTCB2ZXJzaW9uIDAuOS43YiBmcm9tIGh0dHA6Ly93d3cuc29mdHdhcmUuaHAuY29tCisjICg0 KSBJbnN0YWxsIGZsZXggdmVyc2lvbiAyLjUuNCBmcm9tIGh0dHA6Ly9ocHV4LmNzLnV0YWguZWR1 LworIyAoNSkgSW5zdGFsbCBnbXAgdmVyc2lvbiAzLjEuMSBmcm9tIGh0dHA6Ly9ocHV4LmNzLnV0 YWguZWR1LworIworI05vdGUgZnJvbSBQZXRlciBFaWNoaG9ybiwgYXNzeXN0IE11bmljaC4gSXQg d29ya3MgYWxzbyB3aXRob3V0IGdjYyBtYWtlIQoraHB1eDEwMDBnY2Mrc3NsIGhwdXgxMDAwZ2Nj K29wZW5zc2w6CisJJChNQUtFKSBocHV4MTAwMG8rb3BlbnNzbCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9CisKKyMgRGl0dG8gYnV0IHdpdGhvdXQgWmxpYjoKK2hwdXgxMDAwZ2NjK3NzbC16bGli IGhwdXgxMDAwZ2NjK29wZW5zc2wtemxpYjoKKwkkKE1BS0UpIGhwdXgxMDAwbytvcGVuc3NsLXps aWIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjIFNhbWUgZm9yIEhQLVVYIDExCitocHV4 MTEwMG8rc3NsIGhwdXgxMTAwbytvcGVuc3NsOgorCSQoTUFLRSkgaHB1eDEwMDBvK29wZW5zc2wg S1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjT0s6IDIwMDkvMDkvMjYKK2hwdXgxMTAwZ2Nj K3NzbCBocHV4MTEwMGdjYytvcGVuc3NsOgorCSQoTUFLRSkgaHB1eDEwMDBnY2Mrb3BlbnNzbCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKK2hwdXgxMTAwbytzc2wtemxpYiBocHV4MTEwMG8r b3BlbnNzbC16bGliOgorCSQoTUFLRSkgaHB1eDEwMDBvK29wZW5zc2wtemxpYiBLVEFSR0VUPSQk e0tUQVJHRVQ6LSQoQCl9CisKK2hwdXgxMTAwZ2NjK3NzbC16bGliIGhwdXgxMTAwZ2NjK29wZW5z c2wtemxpYjoKKwkkKE1BS0UpIGhwdXgxMDAwZ2NjK29wZW5zc2wtemxpYiBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9CisKKyMgSFAtVVggMTEKKyMgTm90ZTogdGhlc2UgYXJlIDMyLWJpdCBidWls ZHMgZXZlbiBvbiBJQTY0LgorIyBBZGRpbmcgK0RENjQgdG8gQ0ZMQUdTIHByb2R1Y2VzIDY0LWJp dCBvYmplY3QgZmlsZXMsCisjIGJ1dCB0aGUgbGlua2VyIGZhaWxzIHRvIGZpbmQgdGhlIG5lZWRl ZCA2NC1iaXQgbGlicy4KKyNPSzogMjAwOS8wOS8yNgoraHB1eDExMDA6CisJJChNQUtFKSBocHV4 MTAwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNPSzogMjAwOS8wOS8yNgoraHB1eDEx MDBvOgorCSQoTUFLRSkgaHB1eDEwMDBvIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworaHB1 eDExMDBvKzoKKwkkKE1BS0UpIGhwdXgxMDAwbysgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfQor CisjT0s6IDIwMDkvMDkvMjYKK2hwdXgxMTAwZ2NjOgorCSQoTUFLRSkgaHB1eDEwMDBnY2MgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfQorCisjIFRydXN0ZWQgSFAtVVggMTEKK2hwdXgxMTAwdDoK KwkkKE1BS0UpIGhwdXgxMDAwdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKK2hwdXgxMTAw dG86CisJJChNQUtFKSBocHV4MTAwMHRvIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0KKworaHB1 eDExMDB0bys6CisJJChNQUtFKSBocHV4MTAwMHRvKyBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 CisKK2hwdXgxMTAwdGdjYzoKKwkkKE1BS0UpIGhwdXgxMDAwdGdjYyBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9CisKK2hwdXgxMTAwdG8rc3NsIGhwdXgxMTAwdG8rb3BlbnNzbDoKKwkkKE1BS0Up IGhwdXgxMDAwdG8rb3BlbnNzbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKK2hwdXgxMTAw dGdjYytzc2wgaHB1eDExMDB0Z2NjK29wZW5zc2w6CisJJChNQUtFKSBocHV4MTAwMHRnY2Mrb3Bl bnNzbCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9CisKKyNSZWd1bHVzIG9uIENJRSBTeXN0ZW1z IDY4MC8yMAorY2llOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIENJRSBT eXN0ZW1zIDY4MC8yMCBSZWd1bHVzLi4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtREFUVFNWIC1ETk9GSUxFSCAtRENJRSAtRE5PTEVB Uk4gJChLRkxBR1MpIC1PIiAiTE5LRkxBR1MgPSIKKworIyBMaW51eCAxLjIgb3IgbGF0ZXIgd2l0 aCBnY2MsIGR5bmFtaWMgbGlicmFyaWVzLCBuY3Vyc2VzLCBUQ1AvSVAuCisjCisjIElmIHlvdXIg TGludXggc3lzdGVtIGhhcyBjdXJzZXMgcmF0aGVyIHRoYW4gbmN1cnNlcywgdXNlIHRoZSBsaW51 eGMKKyMgZW50cnksIG9yIGlmIHRoYXQgZG9lc24ndCB3b3JrLCBsaW51eG5jLgorIworIyBUaGUg S2VybWl0ICJsYXJnZSBtZW1vcnkgbW9kZWwiIGlzIHVzZWQgYnkgZGVmYXVsdCB0byBjb25maWd1 cmUgYmlnIHBhY2tldAorIyBhbmQgc2NyaXB0IGJ1ZmZlcnMsIGV0Yy4gIEZvciBzbWFsbC1tZW1v cnkgb3IgbGltaXRlZC1yZXNvdXJjZSBzeXN0ZW1zLAorIyAibWFrZSBsaW51eCBLRkxBR1M9LURO T0JJR0JVRiIuCisjCisjIC1ETElOVVhGU1NUTkQgKExpbnV4IEZpbGUgU3lzdGVtIFN0YW5kYXJk IDEuMikgZ2l2ZXMgVVVDUCBsb2NrZmlsZSAvdmFyL2xvY2sKKyMgd2l0aCBzdHJpbmcgcGlkLiAg UmVtb3ZlIHRoaXMgdG8gZ2V0IC91c3Ivc3Bvb2wvdXVjcCB3aXRoIGludCBwaWQsIHVzZWQgaW4K KyMgdmVyeSBlYXJseSBMaW51eCB2ZXJzaW9ucy4gIEZTU1RORCAxLjIgYWxzbyBzYXlzIHRoYXQg dGhlIFBJRCBzdHJpbmcgaW4gdGhlCisjIFVVQ1AgbG9jayBmaWxlIGhhcyBsZWFkaW5nIHNwYWNl cy4gIFRoaXMgaXMgYSBjaGFuZ2UgZnJvbSBGU1NUTkQgMS4wLCB3aGljaAorIyB1c2VkIGxlYWRp bmcgemVyb3MuICBBZGQgLURGU1NUTkQxMCB0byBzdXBwb3J0IEZTU1RORCAxLjAgaW5zdGVhZCBv ZiAxLjIuCisjIEkgaG9wZSBzdWJzZXF1ZW50IGVkaXRpb25zIG9mIHRoZSBmaWxlLXN5c3RlbSBz dGFuZGFyZCBkaWQgbm90IGNoYW5nZSB0aGVzZQorIyBhZ2Fpbi4KKyMKKyMgQWRkIC1ET0xJTlVY SElTUEVFRCAoT2xkIExpbnV4IEhpZ2ggU3BlZWQgc3VwcG9ydCkgdG8gdHVybiBvbiBhbiB1Z2x5 IGtsdWRnZQorIyBpbiBMaW51eCAxLjAgYW5kIGVhcmxpZXIgdG8gc3VwcG9ydCBzcGVlZHMgb2Yg NTc2MDAgYW5kIDExNTIwMC4gIEV4dHJlbWVseQorIyBvbGQgTGludXggc3lzdGVtcyAocHJlLTAu OTlwbDE1KSB3aWxsIG5vdCBzdXBwb3J0IHRoaXMuICBJZiBPTElOVVhISVNQRUVEIGlzCisjIG5v dCBkZWZpbmVkLCB0aGVuIG9ubHkgdGhlIHN0YW5kYXJkIFBPU0lYIHRlcm1pb3MgbWV0aG9kcyBv ZiBzZXR0aW5nIHRoZSBwb3J0CisjIHNwZWVkIHdpbGwgYmUgdXNlZCwgYW5kIGluIHRoaXMgY2Fz ZSBzcGVlZHMgY2FuIGJlIGFzIGhpZ2ggYXMgNDYwODAwIGluIG1vc3QKKyMgbW9kZXJuIExpbnV4 IHZlcnNpb25zLgorIworIyAtRENLX1BPU0lYX1NJRyAoUE9TSVggc2lnbmFsIGhhbmRsaW5nKSBp cyBnb29kIGZvciBMaW51eCByZWxlYXNlcyBiYWNrIHRvIGF0CisjIGxlYXN0IDAuOTkuMTQ7IGlm IGl0IGNhdXNlcyB0cm91YmxlIGZvciB5b3UsIHJlbW92ZSBpdCBmcm9tIHRoZSBDRkxBR1MuCisj CisjIC1waXBlIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRlbXAgZmlsZXMgLSByZW1vdmUgaXQgaWYg aXQgY2F1c2VzIHRyb3VibGUuCisjCisjIC1mdW5zaWduZWQtY2hhciBtYWtlcyBhbGwgY2hhcmFj dGVycyB1bnNpZ25lZCwgYXMgdGhleSBzaG91bGQgaGF2ZSBiZWVuCisjICBpbiB0aGUgZmlyc3Qg cGxhY2UuCisjCisjIEFkZCAtRENLX0RTWVNJTkkgaWYgeW91IHdhbnQgYSBzaGFyZWQgc3lzdGVt LXdpZGUgaW5pdCBmaWxlLgorIworIyBTZWUgaHR0cDovL3d3dy5jb2x1bWJpYS5lZHUva2VybWl0 L2NrdWJ3ci5odG1sIGFib3V0IC1ETk9DT1RGTUMuCisjIEJldHRlciBzdGlsbCwgc2hvdWxkIHJl YWQgdGhlIGVudGlyZSBMaW51eCBzZWN0aW9uIG9mIHRoYXQgZG9jdW1lbnQuCisjCisjIFRoZSAi bGludXhhIiBlbnRyeSBjYW4gYmUgcmVmZXJlbmNlZCBkaXJlY3RseSBvbiBMSUJDIHN5c3RlbXMs IGJ1dCBub3QKKyMgR0xJQkMsIHdoZXJlIC1sY3J5cHQgaXMgcmVxdWlyZWQuICBUaGUgIm1ha2Ug bGludXgiIGVudHJ5IHNob3VsZCBub3JtYWxseQorIyBiZSB1c2VkIGZvciBhbGwgYnVpbGRzIG9u IGFsbCBMaW51eCBkaXN0cmlidXRpb25zIHVubGVzcyB5b3UgaGF2ZSBzcGVjaWFsCisjIHJlcXVp cmVtZW50cywgaW4gd2hpY2ggY2FzZSBrZWVwIHJlYWRpbmcuICBDS19ORVdURVJNIGFkZGVkIGFm dGVyIDcuMGIwNAorIyBkdWUgdG8gbmV3IGNvbXBsYWludHMgYWJvdXQgbmN1cnNlcyBjaGFuZ2lu ZyBidWZmZXJpbmcgb2YgdHR5LgorCitsaW51eGE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgTGludXggMS4yIG9yIGxhdGVyLi4uJworCUBlY2hvICdJTVBPUlRBTlQ6IFJl YWQgdGhlIGNvbW1lbnRzIGluIHRoZSBsaW51eCBzZWN0aW9uIG9mIHRoZScKKwlAZWNobyAnbWFr ZWZpbGUgaWYgeW91IGhhdmUgdHJvdWJsZS4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLU8gLURM SU5VWCAtcGlwZSAtZnVuc2lnbmVkLWNoYXIgLURGTkZMT0FUIC1EQ0tfUE9TSVhfU0lHIFwKKwkt RENLX05FV1RFUk0gLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtRE5PQ09URk1DIC1EUE9TSVgg XAorCS1EVVNFX1NUUkVSUk9SICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwK KwkiTElCUyA9ICQoTElCUykgLWxtIgorCisjIEFzIGFib3ZlIGJ1dCB3aXRoIHByb2ZpbGluZwor bGludXhwOgorCSQoTUFLRSkgbGludXhhIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFH Uz0kKEtGTEFHUykgLXBnIiBcCisJIkxJQlM9LXBnIC1sY3J5cHQgLWxyZXNvbHYiCisKKyNMaW51 eC4gIFRoaXMgZW50cnkgc2hvdWxkIHdvcmsgZm9yIGFueSBMaW51eCBkaXN0cmlidXRpb24gb24g YW55IHBsYXRmb3JtLAorIzMyLWJpdCBvciA2NC1iaXQsIGV4Y2VwdCBmb3IgZXh0cmVtZWx5IGFu Y2llbnQgb25lcy4gIEF1dG9tYXRpY2FsbHkgZGV0ZWN0czoKKyMgLiBjdXJzZXMsIG5jdXJzZXMs IG9yIG5vIGN1cnNlcworIyAuIE9sZCB2ZXJzdXMgbmV3IHB0eSBoYW5kbGluZyAobmV3ID09IGds aWJjIDIuMSsrKQorIyAuIFByZXNlbmNlIG9yIGFic2VuY2Ugb2YgbGliY3J5cHQuYSBhbmQgPGNy eXB0Lmg+CisjIC4gUHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBsaWJyZXNvbHYuYQorIyAuIFRyYW5z aXRpb25hbCBMb25nIEZpbGUgQVBJIGZvciAzMi1iaXQgcGxhdGZvcm1zIChTVVMgVjIgVU5JWCA5 OCBMRlMpLgorI05vdGU6IFRoZSBIQVZFX1BUTVggdGVzdCB3YXMgcHJldmlvdXNseSAiaWYgdGVz dCAtYyAvZGV2L3B0bXgiIGJ1dCB0aGlzIHdhcworI25vdCBzdWZmaWNpZW50IGZvciBEZWJpYW4g Mi4xLCBiZWNhdXNlIGFsdGhvdWdoIGl0IGhhZCAvZGV2L3B0bXgsIGl0IGRpZCBub3QKKyNoYXZl IGdyYW50cHQoKSwgdW5sb2NrcHQoKSwgb3IgcHRzbmFtZSgpLCBzbyBoYXMgYmVlbiBjaGFuZ2Vk IHRvIGxvb2sgZm9yIGEKKyNncmFudHB0KCkgcHJvdG90eXBlIGluIHRoZSBoZWFkZXIgZmlsZXMu ICBNb2RpZmllZCBpbiA4LjAuMjA2IHRvIGFsbG93IGZvcgorI2xpYnJhcmllcyB0aGF0IGNvbnRh aW4gLnNvJ3MgYnV0IG5vIC5hJ3MsIGUuZy4gTWFuZHJha2UgOS4wLgorI0hBVkVfQkFVREJPWSBh ZGRlZCBpbiA4LjAuMjEwIGZvciBSZWQgSGF0IC0tIGl0J3MgbGlrZSBBSVggdHR5bG9jaygpLgor I01vZGlmaWVkIDE3IEF1ZyAyMDA1IHRvIHVzZSBvcGVucHR5KCkgaWYgYXZhaWxhYmxlIGJlY2F1 c2UgdGhlIG90aGVyIHN0dWZmCisjZHVtcHMgY29yZSBpbiA2NC1iaXQgaWE2NCBhbmQgeDg2XzY0 IGJ1aWxkcy4KKyNMb25nIGZpbGUgc3VwcG9ydCBmb3IgMzItYml0IGJ1aWxkcyBhZGRlZCBpbiA4 LjAuMjEyIC0gaWYgZmVhdHVyZXMuaCBjb250YWlucworI19fVVNFX0xBUkdFRklMRTY0IHRoZW4g d2Ugc2V0IHRoZSBmbGFncyB0aGF0IG11c3QgYmUgc2V0IGJlZm9yZSByZWFkaW5nIGFueQorI2hl YWRlciBmaWxlczsgb24gMzItYml0IHBsYXRmb3JtcyBzdWNoIGFzIGkzODYsIHRoaXMgcHJvZHVj ZXMgYSAzMi1iaXQgYnVpbGQKKyNjYXBhYmxlIG9mIGFjY2Vzc2luZywgc2VuZGluZywgcmVjZWl2 aW5nLCBhbmQgbWFuYWdpbmcgbG9uZyAoPiAyR0IpIGZpbGVzLgorI09uIDY0LWJpdCBwbGF0Zm9y bXMsIGl0IGRvZXMgbm8gaGFybS4KKyNBcyBvZiAzIE1hcmNoIDIwMDkgd2UgZGV0ZWN0IGF1dG9t YXRpY2FsbHkgaWYgd2UgaGF2ZSBjdXJzZXMsIG5jdXJzZXMsCisjb3Igbm8gY3Vyc2VzIGF0IGFs bC4KKyNBZGRlZCBIQVZFX0xPQ0tERVYgYXMgb3BlblN1U0UgPj0gMTEuMyB1c2VzIHR0eWxvY2sg ZGlyZWN0bHkgaW5zdGVhZCBvZgorI2JhdWRib3kgMjAxMC8wOC8yMworI09LOiAyMDExLzA2LzE4 CitsaW51eDoKKwlAaWYgdGVzdCBcCisJYGdyZXAgZ3JhbnRwdCAvdXNyL2luY2x1ZGUvKi5oIC91 c3IvaW5jbHVkZS9zeXMvKi5oIHwgd2MgLWxgIC1ndCAwOyBcCisJdGhlbiBpZiB0ZXN0IC1jIC9k ZXYvcHRteDsgdGhlbiBIQVZFX1BUTVg9Jy1ESEFWRV9QVE1YJzsgXAorCWVsc2UgSEFWRV9QVE1Y PScnOyBmaTsgZmkgOyBcCisJaWYgdGVzdCBgZ3JlcCBvcGVucHR5IC91c3IvaW5jbHVkZS9wdHku aCB8IHdjIC1sYCAtZ3QgMDsgXAorCXRoZW4gSEFWRV9PUEVOUFRZPSctREhBVkVfT1BFTlBUWSc7 IFwKKwllbHNlIEhBVkVfT1BFTlBUWT0nJzsgZmkgOyBcCisJSEFWRV9MSUJDVVJTRVM9Jyc7IFwK KwlpZiB0ZXN0IC1mIC91c3IvbGliNjQvbGlibmN1cnNlcy5zbyB8fCBcCisJICAgdGVzdCAtZiAv dXNyL2xpYi9saWJuY3Vyc2VzLmEgIHx8IFwKKwkgICB0ZXN0IC1mIC91c3IvbGliL2xpYm5jdXJz ZXMuc287IHRoZW4gXAorCSAgSEFWRV9MSUJDVVJTRVM9Jy1sbmN1cnNlcyc7IFwKKwllbHNlIGlm IHRlc3QgLWYgL3Vzci9saWI2NC9saWJjdXJzZXMuc28gfHwgXAorCSAgIHRlc3QgLWYgL3Vzci9s aWIvbGliY3Vyc2VzLmEgfHwgXAorCSAgIHRlc3QgLWYgL3Vzci9saWIvbGliY3Vyc2VzLnNvOyB0 aGVuIFwKKwkgICAgIEhBVkVfTElCQ1VSU0VTPSctbGN1cnNlcyc7IGZpOyBmaTsgXAorCUhBVkVf Q1VSU0VTPScnOyBcCisJaWYgdGVzdCAtbiAnJCRIQVZFX0xJQkNVUlNFUyc7IHRoZW4gXAorCSAg aWYgdGVzdCAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy5oOyB0aGVuIFwKKwkgICAgSEFWRV9DVVJT RVM9Jy1EQ0tfTkNVUlNFUyAgLUkvdXNyL2luY2x1ZGUvbmN1cnNlcyc7IFwKKwkgIGVsc2UgaWYg dGVzdCAtZiAvdXNyL2luY2x1ZGUvY3Vyc2VzLmg7IHRoZW4gXAorCSAgICBIQVZFX0NVUlNFUz0n LURDS19DVVJTRVMnOyBcCisJZmk7IGZpOyBmaTsgXAorCWlmIHRlc3QgLWYgL3Vzci9pbmNsdWRl L2JhdWRib3kuaCB8fCB0ZXN0IC1mIC91c3IvaW5jbHVkZS90dHlsb2NrLmg7IFwKKwl0aGVuIEhB VkVfTE9DS0RFVj0nLURIQVZFX0xPQ0tERVYnIDsgXAorCWVsc2UgSEFWRV9MT0NLREVWPScnIDsg ZmkgOyBcCisJaWYgdGVzdCAtZiAvdXNyL2luY2x1ZGUvYmF1ZGJveS5oIDsgXAorCXRoZW4gSEFW RV9CQVVEQk9ZPSctREhBVkVfQkFVREJPWScgOyBcCisJZWxzZSBIQVZFX0JBVURCT1k9JycgOyBm aSA7IFwKKwkkKE1BS0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9JCRI QVZFX0NVUlNFUyAkJEhBVkVfUFRNWCAkJEhBVkVfTE9DS0RFViBcCisJJCRIQVZFX0JBVURCT1kg JCRIQVZFX09QRU5QVFkgXAorCWBncmVwIF9fVVNFX0xBUkdFRklMRTY0IC91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oID4gL2Rldi9udWxsICYmIFwKKwllY2hvICctRF9MQVJHRUZJTEVfU09VUkNFIC1E X0ZJTEVfT0ZGU0VUX0JJVFM9NjQnYCBcCisJYGlmIHRlc3QgLWYgL3Vzci9pbmNsdWRlL2NyeXB0 Lmg7IHRoZW4gZWNobyAtREhBVkVfQ1JZUFRfSDsgZmlgIFwKKwkkKEtGTEFHUykiIFwKKwkiTElC Uz0kKExJQlMpICQkSEFWRV9MSUJDVVJTRVMgXAorCWBpZiB0ZXN0IC1uICckJEhBVkVfT1BFTlBU WSc7IHRoZW4gZWNobyAtbHV0aWw7IGZpYCBcCisJYGlmIHRlc3QgLWYgL3Vzci9saWI2NC9saWJy ZXNvbHYuYSB8fCB0ZXN0IC1mIC91c3IvbGliNjQvbGlicmVzb2x2LnNvIFwKKwl8fCB0ZXN0IC1m IC91c3IvbGliL2xpYnJlc29sdi5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlicmVzb2x2LnNvIFwK Kwl8fCB0ZXN0IC1mIC91c3IvbGliL2kzODYtbGludXgtZ251L2xpYnJlc29sdi5hIFwKKwl8fCB0 ZXN0IC1mIC91c3IvbGliL2kzODYtbGludXgtZ251L2xpYnJlc29sdi5zbyBcCisJfHwgbHMgL2xp Yi94ODZfNjQtbGludXgtZ251L2xpYnJlc29sdi4qID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsg XAorCXRoZW4gZWNobyAtbHJlc29sdjsgZmlgIFwKKwlgaWYgdGVzdCAtZiAvdXNyL2xpYjY0L2xp YmNyeXB0LmEgfHwgdGVzdCAtZiAvdXNyL2xpYjY0L2xpYmNyeXB0LnNvIFwKKwl8fCB0ZXN0IC1m IC91c3IvbGliL2xpYmNyeXB0LmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJjcnlwdC5zbyBcCisJ fHwgbHMgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmNyeXB0LiogPiAvZGV2L251bGwgMj4gL2Rl di9udWxsOyBcCisJdGhlbiBlY2hvIC1sY3J5cHQ7IGZpYCBcCisJYGlmIHRlc3QgLWYgL3Vzci9s aWI2NC9saWJsb2NrZGV2LmEgfHwgXAorCXRlc3QgLWYgL3Vzci9saWI2NC9saWJsb2NrZGV2LnNv IHx8IFwKKwl0ZXN0IC1mIC91c3IvbGliL2xpYmxvY2tkZXYuYSB8fCBcCisJdGVzdCAtZiAvdXNy L2xpYi9saWJsb2NrZGV2LnNvOyBcCisJdGhlbiBlY2hvIC1sbG9ja2RldjsgZmlgIiBcCisJbGlu dXhhCisKKyMgTGludXggKyBTaGFkb3cgcGFzc3dvcmRzICsgUEFNCisjIE9LIDIwMTEvMDYvMTgK K2xpbnV4K3NoYWRvdytwYW06CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig TGludXgrU2hhZG93K1BBTS4uLicKKwkkKE1BS0UpIGxpbnV4IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCUtGTEFHUz0iLURDS19TSEFET1cgLURDS19QQU0gJChLRkxBR1MpIiBcCisJIkxO S0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9IC1scGFtIgorCisjIExpbnV4IHN5c3Rl bXMgdGhhdCBoYXZlIG5vIDxzeXMvc2VsZWN0Lmg+LgorIyAobm90IHRlc3RlZCBpbiByZWNlbnQg eWVhcnMsIHBlcmhhcHMgbm8gbG9uZ2VyIG5lZWRlZCkKK2xpbnV4bnM6CisJJChNQUtFKSBsaW51 eCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IEtGTEFHUz0tRE5PX1NZU19TRUxFQ1RfSAorCisj IExpbnV4LXNjcmlwdC1vbmx5OgorIyBBIG1pbmltdW0tc2l6ZSB2ZXJzaW9uIGZvciBMaW51eCB0 aGF0IGRvZXMgb25seSBzY3JpcHRpbmcgYW5kCisjIHNlcmlhbCBjb21tdW5pY2F0aW9uIC0tIG5v IG5ldHdvcmtzLCBubyBmaWxlIHRyYW5zZmVyLCBubyBzZWN1cml0eS4KKyMgT0sgMjAxMS8wNi8x OAorbGludXhzbzoKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJD QyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtRExJTlVYIC1waXBlIC1mdW5z aWduZWQtY2hhciAtRFBPU0lYIC1EQ0tfUE9TSVhfU0lHIFwKKwktRExJTlVYRlNTVE5EIC1ETk9D T1RGTUMgLUROT1hGRVIgLUROT0RFQlVHIC1ETk9DU0VUUyAtRE5PSEVMUCBcCisJLUROT05FVCAt RE1JTklESUFMIC1ETk9TQ1JJUFQgLUROT0lLU0QgLUROT1BVU0ggJChLRkxBR1MpIiBcCisJIkxO S0ZMQUdTID0gJChMTktGTEFHUykiICJMSUJTID0gIgorCisjIFNlY3VyZSB0YXJnZXRzIGZvciBM aW51eC4gIFRoZXNlIHdvcmsgb24gUkhBUzQsIFJIRUw0LCBhbmQgUkhFTDUsCisjIHVubGlrZSBz b21lIG9mIHRoZSBvbGRlciB0YXJnZXRzIHRoYXQgZm9sbG93LiAgVGhleSBob29rIGludG8gdGhl IG1haW4gTGludXgKKyMgdGFyZ2V0IHNvIHdlIHBpY2sgdXAgYWxsIHRoZSBvdGhlciBuZXcgc3R1 ZmYgLSBsYXJnZSBmaWxlcywgYmF1ZGJveS5oLCB0aGUKKyMgYXBwcm9wcmlhdGUgcHR5IGludGVy ZmFjZSwgZXRjLgorCisjIExpbnV4IHdpdGggS2VyYmVyb3MgNS4KKyMgVXNlICJtYWtlIGxpbnV4 K2tyYjUgS0ZMQUdTPS1ETk9fS1JCNV9JTklUX0VUUyIgaWYgbmVjZXNzYXJ5LgorI09LIDIwMTEv MDYvMTYgb24gRmVkb3JhIDE0IHdpdGg6CisjIG1ha2UgbGludXgra3JiNSAiTElCUz0kTElCUyAv bGliL2xpYms1Y3J5cHRvLnNvLjMgL2xpYi9saWJjb21fZXJyLnNvLjIiCisjIE9uIFJIRUw1OiBt YWtlIGxpbnV4K2tyYjUgLVVDS19ERVMKK2xpbnV4K2tyYjU6CisJQGVjaG8gJ01ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgTGludXggd2l0aCBLZXJiZXJvcyA1Li4uJworCUBjYXNlIGBvcGVu c3NsIHZlcnNpb25gIGluIFwKKwkgICowLjkuNyopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8w OTciIDs7IFwKKwkgICowLjkuOCopIE9QRU5TU0xPUFRJT049Ii1ET1BFTlNTTF8wOTgiIDs7IFwK KwkgICoxLlswLTldLlswLTldKikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzEwMCIgOzsgXAor CSAgKikgT1BFTlNTTE9QVElPTj0iIiA7OyBcCisJZXNhYzsgXAorCUhBVkVfREVTPScnOyBcCisJ REVTX0xJQj0nJzsgXAorCWlmIGxzIC91c3IvbGliL2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rl di9udWxsIHx8IFwKKwkgICBscyAkKFNTTExJQikvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2 L251bGw7IHRoZW4gXAorCSAgICAgIERFU19MSUI9Jy1sZGVzNDI1JzsgXAorCSAgICAgIEhBVkVf REVTPSctRENLX0RFUyAtRExJQkRFUyc7IFwKKyAgICAgICAgICAgICAgZWNobyAiSEFWRSBERVMi OyBcCisgICAgICAgICAgIGVsc2UgZWNobyAiTk8gREVTIjsgXAorCWZpOyBcCisJSzVDUllQVE89 Jyc7IFwKKyAgICAgICAgaWYgbHMgL2xpYi9saWJrNWNyeXB0byogPiAvZGV2L251bGwgMj4gL2Rl di9udWxsOyB0aGVuIFwKKyAgICAgICAgICAgICAgICBLNUNSWVBUTz0nLWxrNWNyeXB0byc7IFwK KwllbHNlIGlmIGxzIC91c3IvbGliL2xpYms1Y3J5cHRvKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251 bGw7IHRoZW4gXAorCQlLNUNSWVBUTz0nLWxrNWNyeXB0byc7IFwKKyAgICAgICAgZWxzZSBpZiBs cyAvdXNyL2xpYjY0L2xpYms1Y3J5cHRvKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4g XAorICAgICAgICAgICAgICAgIEs1Q1JZUFRPPSctbGs1Y3J5cHRvJzsgXAorICAgICAgICBmaTsg Zmk7IGZpOyBcCisJQ09NX0VSUj0nJzsgXAorCWlmIGxzIC9saWIvbGliY29tX2VyciogPiAvZGV2 L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkJQ09NX0VSUj0nLWxjb21fZXJyJzsgXAorCWZp OyBcCisJR1NTQVBJTElCPSctbGdzc2FwaSc7IFwKKwlpZiBscyAvbGliL2xpYmdzc2FwaV9rcmI1 KiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorCQlHU1NBUElMSUI9Jy1sZ3NzYXBp X2tyYjUnOyBcCisJZWxzZSBpZiBscyAvdXNyL2xpYi9saWJnc3NhcGlfa3JiNSogPiAvZGV2L251 bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkJR1NTQVBJTElCPSctbGdzc2FwaV9rcmI1JzsgXAor CWVsc2UgSzVESVI9YGVjaG8gJChLNUxJQikgfCBzZWQgJ3N8LUx8fCdgOyBcCisJCWlmIGxzICQk SzVESVIvbGliZ3NzYXBpX2tyYjUqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJ CQlHU1NBUElMSUI9Jy1sZ3NzYXBpX2tyYjUnOyBcCisJZmk7IGZpOyBmaTsgXAorCSQoTUFLRSkg bGludXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwK KwkiS0ZMQUdTPSAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1ICQkT1BF TlNTTE9QVElPTiBcCisJLURDS19FTkNSWVBUSU9OICQkSEFWRV9ERVMgJChLNUlOQykgJChLNUlO Qykva3JiNSBcCisJLUkvdXNyL2luY2x1ZGUvZXQgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExO S0ZMQUdTKSIgXAorCSJMSUJTID0gJChLNUxJQikgJCRERVNfTElCIC1sY3J5cHRvICQkR1NTQVBJ TElCIC1sa3JiNSBcCisJJCRLNUNSWVBUTyAkJENPTV9FUlIgJChMSUJTKSIgOyBcCisJaWYgWyAh IC1mIC4vd2VybWl0IF0gfHwgWyAuL2NrY21haS5vIC1udCAuL3dlcm1pdCBdIDsgdGhlbiBcCisJ CWVjaG8gIiI7IFwKKwkJZWNobyAiSWYgYnVpbGQgZmFpbGVkIHRyeToiOyBcCisJCWVjaG8gIiI7 IFwKKwkJZWNobyAiICBtYWtlIGNsZWFuIDsgbWFrZSAkJHtLVEFSR0VUOi0kKEApfSBLRkxBR1M9 LVVDS19ERVMiOyBcCisJCWVjaG8gIiI7IFwKKwlmaQorCisjIExpbnV4IHdpdGggS2VyYmVyb3Mg NSBhbmQgS2VyYmVyb3MgNC4KKyMgVXNlICJtYWtlIGxpbnV4K2tyYjUgS0ZMQUdTPS1ETk9fS1JC NV9JTklUX0VUUyIgaWYgbmVjZXNzYXJ5LgorIyBBZGQgIktGTEFHUz0tVUNLX0RFUyIgaWYgZmFp bHVyZSBtZXNzYWdlcyBsb29rIERFUy1yZWxhdGVkLgorIyBVTlRFU1RFRCAoYmVjYXVzZSBJIGNh bid0IGZpbmQgYSBib3ggd2l0aCBLcmI0IGFuZCBLcmI1IGluc3RhbGxlZCkKK2xpbnV4K2tyYjUr a3JiNDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0IGZvciBMaW51eCB3aXRoIEtlcmJlcm9zIDQg YW5kIEtlcmJlcm9zIDUnCisJJChNQUtFKSBsaW51eCtrcmI1IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJLRkxBR1M9LURLUkI0IC1ES1JCNTI0ICQoS0ZMQUdTKSIgIkxJQlM9JChMSUJT KSAtbGtyYjQiCisKKyMgTGludXggd2l0aCBPcGVuU1NMIAorIyBJbiBMaW51eCwgU1NMIGxpYnMg YXJlIG9mdGVuIGluIC9saWIgb3IgL3Vzci9saWIgYW5kIHNvIGZvdW5kIGJ5IGRlZmF1bHQuCisj IFRoaXMgdGFyZ2V0cyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIERFUyBsaWJyYXJ5IG1pZ2h0IG9y IG1pZ2h0IG5vdAorIyBleGlzdC4gIElmIGl0IGRvZXMgZXhpc3QsIGhvd2V2ZXIsIHRoZSB0YXJn ZXQgd2lsbCByZXF1aXJlIHNvbWUgZWRpdGluZworIyBpZiBpdHMgYmFzZW5hbWUgaXMgbm90IGxp YmRlczQyNS4gIC0gZmRjIFR1ZSBTZXAgMjEgMTQ6Mjg6MDAgMjAxMAorIyBJTVBPUlRBTlQ6IFNv bWUgTGludXggcGxhdGZvcm1zIGhhdmUgREVTIGxpYnJhcmllcyBidXQgdGhleSBhcmUgbWlzc2lu ZworIyBmdW5jdGlvbnMgdXNlZCBieSBLZXJtaXQuICBJbiB0aGF0IGNhc2UgeW91IHdpbGwgZ2V0 IGZhdGFsIGVycm9ycyBhdAorIyBsaW5rIHRpbWUgaW52b2x2aW5nIHJvdXRpbmVzIHN1Y2ggYXMg ZGVzX2VjYjNfZW5jcnlwdCwgZGVzX3JhbmRvbV9zZWVkLAorIyBhbmQgZGVzX3NldF9vZGRfcGFy aXR5LiAgSW4gdGhhdCBjYXNlLCAibWFrZSBsaW51eCBLRkxBR1M9LVVDS19ERVMiCisjIFRoZXJl J3MgYSBuZXcgd2FybmluZyBhdCB0aGUgZW5kIHRoYXQgc2hvdWxkIGNvbWUgb3V0IGlmIHRoaXMg aGFwcGVucywKKyMgYW5kIHRoYXQgc2hvdWxkIG5vdCBjb21lIG91dCBpZiBpdCBkaWRuJ3QuCisj CitsaW51eCtzc2wgbGludXgrb3BlbnNzbCBsaW51eCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBs aW51eCtvcGVuc3NsK3NoYWRvdzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBMaW51eCtPcGVuU1NMIFNTTExJQj0kKFNTTExJQiknCisJQGNhc2UgYG9wZW5zc2wgdmVyc2lv bmAgaW4gXAorCSAgKjAuOS43KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5NyIgOzsgXAor CSAgKjAuOS44KikgT1BFTlNTTE9QVElPTj0iLURPUEVOU1NMXzA5OCIgOzsgXAorCSAgKjEuWzAt OV0uWzAtOV0qKSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMTAwIiA7OyBcCisJICAqKSBPUEVO U1NMT1BUSU9OPSIiIDs7IFwKKwllc2FjOyBcCisJSEFWRV9ERVM9Jyc7IFwKKwlERVNfTElCPScn OyBcCisJaWYgbHMgL3Vzci9saWIvbGliZGVzKiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgfHwg XAorCSAgIGxzICQoU1NMTElCKS9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhl biBcCisJICAgICAgREVTX0xJQj0nLWxkZXM0MjUnOyBcCisJICAgICAgSEFWRV9ERVM9Jy1EQ0tf REVTIC1ETElCREVTJzsgXAorCSAgICAgIGVjaG8gIkhBVkUgREVTIjsgXAorCSAgIGVsc2UgZWNo byAiTk8gREVTIjsgXAorCWZpOyBcCisJJChNQUtFKSBsaW51eCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJLRkxBR1M9IC1EQ0tfQVVUSEVOVElD QVRJT04gLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAkJEhBVkVfREVTIFwKKwktRENLX1NTTCAt RENLX1BBTSAtRFpMSUIgLURDS19TSEFET1cgJCRPUEVOU1NMT1BUSU9OICQoU1NMSU5DKSBcCisJ JChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0gJChTU0xMSUIp IC1sc3NsICQkREVTX0xJQiAtbGNyeXB0byAtbHBhbSAtbGRsIC1seiAkKExJQlMpIiA7IFwKKwlp ZiBbICEgLWYgLi93ZXJtaXQgXSB8fCBbIC4vY2tjbWFpLm8gLW50IC4vd2VybWl0IF0gOyB0aGVu IFwKKwkJZWNobyAiIjsgXAorCQllY2hvICJJZiBidWlsZCBmYWlsZWQgdHJ5OiI7IFwKKwkJZWNo byAiIjsgXAorCQllY2hvICIgIG1ha2UgY2xlYW4gOyBtYWtlICQke0tUQVJHRVQ6LSQoQCl9IEtG TEFHUz0tVUNLX0RFUyI7IFwKKwkJZWNobyAiIjsgXAorCWZpCisKKyMgTGludXggd2l0aCBLZXJi ZXJvcyA1IGFuZCBPcGVuU1NMCisjIE9LIDIwMTEvMDUvMTYKKyMgQWRkIC1VQ0tfREVTIGlmIGZ1 bmN0aW9ucyBsaWtlIGRlc19lY2IzX2VuY3J5cHQsIGVzX3JhbmRvbV9zZWVkLAorIyBjb21lIHVw IG1pc3NpbmcgYXQgbGluayB0aW1lLgorbGludXgra3JiNStzc2wgbGludXgra3JiNStvcGVuc3Ns OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IHdpdGggS3JiNSBh bmQgT3BlblNTTC4uLicKKwlAY2FzZSBgb3BlbnNzbCB2ZXJzaW9uYCBpbiBcCisJICAqMC45Ljcq KSBPUEVOU1NMT1BUSU9OPSItRE9QRU5TU0xfMDk3IiA7OyBcCisJICAqMC45LjgqKSBPUEVOU1NM T1BUSU9OPSItRE9QRU5TU0xfMDk4IiA7OyBcCisJICAqMS5bMC05XS5bMC05XSopIE9QRU5TU0xP UFRJT049Ii1ET1BFTlNTTF8xMDAiIDs7IFwKKwkgICopIE9QRU5TU0xPUFRJT049IiIgOzsgXAor CWVzYWM7IFwKKwlIQVZFX0RFUz0nJzsgXAorCURFU19MSUI9Jyc7IFwKKwlpZiBscyAvdXNyL2xp Yi9saWJkZXMqID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCB8fCBcCisJICAgbHMgJChTU0xMSUIp L2xpYmRlcyogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkgICAgICBERVNfTElC PSctbGRlczQyNSc7IFwKKwkgICAgICBIQVZFX0RFUz0nLURDS19ERVMgLURMSUJERVMnOyBcCisJ ICAgICAgZWNobyAiSEFWRSBERVMiOyBcCisJICAgZWxzZSBlY2hvICJOTyBERVMiOyBcCisJZmk7 IFwKKwlLNUNSWVBUTz0nJzsgXAorICAgICAgICBpZiBscyAvbGliL2xpYms1Y3J5cHRvKiA+IC9k ZXYvbnVsbCAyPiAvZGV2L251bGw7IHRoZW4gXAorICAgICAgICAgICAgICAgIEs1Q1JZUFRPPSct bGs1Y3J5cHRvJzsgXAorCWVsc2UgaWYgbHMgL3Vzci9saWIvbGliazVjcnlwdG8qID4gL2Rldi9u dWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJCUs1Q1JZUFRPPSctbGs1Y3J5cHRvJzsgXAorICAg ICAgICBlbHNlIGlmIGxzIC91c3IvbGliNjQvbGliazVjcnlwdG8qID4gL2Rldi9udWxsIDI+IC9k ZXYvbnVsbDsgdGhlbiBcCisgICAgICAgICAgICAgICAgSzVDUllQVE89Jy1sazVjcnlwdG8nOyBc CisJZmk7IGZpOyBmaTsgXAorCUNPTV9FUlI9Jyc7IFwKKwlpZiBscyAvbGliL2xpYmNvbV9lcnIq ID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJCUNPTV9FUlI9Jy1sY29tX2Vycic7 IFwKKwlmaTsgXAorCUdTU0FQSUxJQj0nLWxnc3NhcGknOyBcCisJaWYgbHMgL2xpYi9saWJnc3Nh cGlfa3JiNSogPiAvZGV2L251bGwgMj4gL2Rldi9udWxsOyB0aGVuIFwKKwkJR1NTQVBJTElCPSct bGdzc2FwaV9rcmI1JzsgXAorCWVsc2UgaWYgbHMgL3Vzci9saWIvbGliZ3NzYXBpX2tyYjUqID4g L2Rldi9udWxsIDI+IC9kZXYvbnVsbDsgdGhlbiBcCisJCUdTU0FQSUxJQj0nLWxnc3NhcGlfa3Ji NSc7IFwKKwllbHNlIEs1RElSPWBlY2hvICQoSzVMSUIpIHwgc2VkICdzfC1MfHwnYDsgXAorCQlp ZiBscyAkJEs1RElSL2xpYmdzc2FwaV9rcmI1KiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGw7IHRo ZW4gXAorCQkJR1NTQVBJTElCPSctbGdzc2FwaV9rcmI1JzsgXAorCWZpOyBmaTsgZmk7IFwKKwkk KE1BS0UpIGxpbnV4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0g Z2NjIiBcCisJIktGTEFHUz0gLURDS19BVVRIRU5USUNBVElPTiAtRENLX0tFUkJFUk9TIC1ES1JC NSBcCisJLURDS19TU0wgLURDS19QQU0gLURaTElCIC1EQ0tfU0hBRE9XICQkT1BFTlNTTE9QVElP TiAkKFNTTElOQykgXAorCS1EQ0tfRU5DUllQVElPTiAkJEhBVkVfREVTICQoSzVJTkMpICQoSzVJ TkMpL2tyYjUgXAorCS1JL3Vzci9pbmNsdWRlL2V0ICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChM TktGTEFHUykiIFwKKwkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSAtbHNzbCAkJERFU19MSUIg LWxwYW0gLWx6IFwKKwktbGNyeXB0byAkJEdTU0FQSUxJQiAtbGtyYjUgJCRLNUNSWVBUTyAkJENP TV9FUlIgJChMSUJTKSIgOyBcCisJaWYgWyAhIC1mIC4vd2VybWl0IF0gfHwgWyAuL2NrY21haS5v IC1udCAuL3dlcm1pdCBdIDsgdGhlbiBcCisJCWVjaG8gIiI7IFwKKwkJZWNobyAiSWYgYnVpbGQg ZmFpbGVkIHRyeToiOyBcCisJCWVjaG8gIiI7IFwKKwkJZWNobyAiICBtYWtlIGNsZWFuIDsgbWFr ZSAkJHtLVEFSR0VUOi0kKEApfSBLRkxBR1M9LVVDS19ERVMiOyBcCisJCWVjaG8gIiI7IFwKKwlm aQorCisjIDo6QkVHSU5fT0xEX0xJTlVYX1RBUkdFVFM6OgorCisjIFRoZSByZW1haW5pbmcgTGlu dXggZW50cmllcyBhcmUgZm9yIHNwZWNpYWwgb3IgY3VzdG9taXplZCBidWlsZHMuICBUaGV5IGhh dmUKKyMgbm90IGJlZW4gZ2VuZXJhbGl6ZWQgKCJzdWJyb3V0aW5pemVkIikgbGlrZSB0aGUgb25l cyBhYm92ZS4gIElkZWFsbHksIHdlCisjIHNob3VsZCBhbGxvdyBmb3IgZXZlcnkgY29tYmluYXRp b24gb2YgbGliYyB2cyBnbGliYywgZ2NjIHZzIGVnY3MsIGN1cnNlcyB2cworIyBuY3Vyc2VzLCBL ZXJiZXJvcyBJViB2cyBLZXJiZXJvcyBWIHZzIFNSUCAoaW4gYW55IGNvbWJpbmF0aW9uKSwgYW5k IHNvIG9uLgorIyBUaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBzZXQgS0ZMQUdTIGFuZCBM SUJTIHZhbHVlcyBhbmQgdGhlbiBjaGFpbiB0bworIyB0aGUgbWFpbiAibGludXgiIHRhcmdldCwg YXMgaW4gdGhlIGV4YW1wbGVzIGp1c3QgYWJvdmUuICBUbyBza2lwIHBhc3QgYWxsIG9mCisjIHRo ZXNlIG9sZCB0YXJnZXRzIChhbmQgdGhlcmUgYXJlIG1hbnkpIHNlYXJjaCBmb3IgOjpFTkRfT0xE X0xJTlVYX1RBUkdFVFM6OgorIyAoYWZ0ZXIgdGhpcyBsaW5lKS4KKworI1NoYXJwIFphdXJ1cyBT TC01NTAwIC0gTGludXggYmFzZWQKK3pzbDU1MDA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgU2hhcnAgWmF1cnVzIFNMLTU1MDAuLi4nCisJQHRvdWNoIGNrY3Byby5jCisJ QHRvdWNoIHdhcnQKKwkkKE1BS0UpIGxpbnV4bmMgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAi S0ZMQUdTPS1EWlNMNTUwMCIgXAorCSJDQyA9IGdjYyIgIkNDMiA9IGdjYyIKKworI01rbGludXgg RFIzIGhhcyBob3JyaWJsZSBidWcgaW4gPHV0bXBiaXRzLmg+IC0gc2VlIGNrdWZpby5jLgorbWts aW51eDoKKwkkKE1BS0UpIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0tRFVUTVBC VUciIFwKKwkiTElCUz0tbGNyeXB0IC1scmVzb2x2IiBsaW51eGEKKworI0xpbnV4UFBDIDE5OTkK K2xpbnV4cHBjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4UFBD IDE5OTkuLi4nCisJQGlmIHRlc3QgLWYgL3Vzci9saWIvbGliY3J5cHQuYTsgdGhlbiBcCisJICAg IGlmIHRlc3QgLWYgL3Vzci9saWIvbGlicmVzb2x2LmE7IHRoZW4gXAorCSAgICAgICAgJChNQUtF KSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkJIktGTEFHUz0kKE5DVVJTRVNfQ1BQKSAt REhBVkVfQ1JZUFRfSCBcCisJCS1ETE9DS19ESVI9XFxcXFxcIlwiL3Zhci9sb2NrL21vZGVtXFxc XFxcIlwiICQoS0ZMQUdTKSIgXAorCSAgICAgICAgIkxJQlM9LWxuY3Vyc2VzIC1scmVzb2x2IC1s Y3J5cHQiIGxpbnV4YSA7IFwKKwkgICAgZWxzZSBcCisJICAgICAgICAkKE1BS0UpIEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCQkiS0ZMQUdTPSQoTkNVUlNFU19DUFApIC1ESEFWRV9DUllQ VF9IIFwKKwkJLURMT0NLX0RJUj1cXFxcXFwiXCIvdmFyL2xvY2svbW9kZW1cXFxcXFwiXCIgJChL RkxBR1MpIiBcCisJICAgICAgICAiTElCUz0tbG5jdXJzZXMgLWxjcnlwdCIgbGludXhhIDsgXAor CSAgICBmaSBcCisJZWxzZSBcCisJICAgIGlmIHRlc3QgLWYgL3Vzci9saWIvbGlicmVzb2x2LmE7 IHRoZW4gXAorCSAgICAgICAgJChNQUtFKSBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkJ IktGTEFHUz0kKE5DVVJTRVNfQ1BQKSBcCisJCS1ETE9DS19ESVI9XFxcXFxcIlwiL3Zhci9sb2Nr L21vZGVtXFxcXFxcIlwiICQoS0ZMQUdTKSIgXAorCSAgICAgICAgIkxJQlM9LWxuY3Vyc2VzIC1s cmVzb2x2IiBsaW51eGEgOyBcCisJICAgIGVsc2UgXAorCSAgICAgICAgJChNQUtFKSBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkJIktGTEFHUz0kKE5DVVJTRVNfQ1BQKSBcCisJCS1ETE9D S19ESVI9XFxcXFxcIlwiL3Zhci9sb2NrL21vZGVtXFxcXFxcIlwiICQoS0ZMQUdTKSIgXAorCSAg ICAgICAgIkxJQlM9LWxuY3Vyc2VzIiBsaW51eGEgOyBcCisJICAgIGZpIFwKKwlmaQorCisKKyMg TGlrZSAibWFrZSBsaW51eCIgYnV0IGJ1aWx0IHdpdGggZWdjcyByYXRoZXIgdGhhbiBnY2MuCisj IElmIHlvdSBnZXQgIkludGVybmFsIGNvbXBpbGVyIGVycm9yIHh4eCwgb3V0cHV0IHBpcGUgaGFz IGJlZW4gY2xvc2VkIiwKKyMgdHJ5IHJlbW92aW5nIC1waXBlLgorbGludXhlZ2NzOgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IDEuMiBvciBsYXRlciB3aXRoIGVn Y3MuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBl Z2NzIiAiQ0MyID0gZWdjcyIgXAorCSJDRkxBR1MgPSAtTyAtRExJTlVYIC1waXBlIC1mdW5zaWdu ZWQtY2hhciBcCisJLURQT1NJWCAtRENLX1BPU0lYX1NJRyAtRENLX05DVVJTRVMgLUROT0NPVEZN QyBcCisJLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1Mg PSAkKExOS0ZMQUdTKSIgIkxJQlMgPSAtbG5jdXJzZXMgLWxjcnlwdCAtbHJlc29sdiIKKworI0xp bnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4xIChubyBL NCBjb21wYXRpYmlsaXR5KS4KK2xpbnV4K2tyYjUtb2xkOgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIEludGVsIHdpdGggS2VyYmVyb3MuLi4nCisJJChNQUtF KSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2Mi IFwKKwkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAt RE5PQ09URk1DIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgLURLUkI1IFwK KwktRENLX0VOQ1JZUFRJT04gLURDS19ERVMgLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgXAor CS1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggJChLNUlOQykgJChLNUlO Qykva3JiNSBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJT ID0gJChLNUxJQikgLWxuY3Vyc2VzIC1sdGVybWNhcCAtbGRlczQyNSAtbGtyYjUgXAorCS1sY29t X2VyciAtbGs1Y3J5cHRvIC1sZ3NzYXBpX2tyYjUgLWxjcnlwdCAtbHJlc29sdiIKKworIyBMaW51 eCBvbiBJbnRlbCBQQyB3aXRoIFNSUCAxLjcuNCB1c2luZyBHTlUgTVAsIEtyeXB0bywgYW5kIEVy aWMgWW91bmcncworIyBERVMgbGlicmFyeS4gIFJlbW92ZSB0aGUgLURDS19ERVMsIC1ETElCREVT IGFuZCAtbGRlcyBpZiB5b3UgZG8gbm90IGhhdmUKKyMgRXJpYyBZb3VuZydzIyBsaWJkZXMuYSBp bnN0YWxsZWQuCisjCitsaW51eCtzcnArZ21wOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCisJJChNQUtFKSBzcnBtaXQgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdT ID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwK KwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIFwKKwktRENLX0VOQ1JZUFRJT04gLURDS19D QVNUIC1EQ0tfREVTIC1ETElCREVTIFwKKwktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRD UFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKKwkkKFNSUElOQykgJChLRkxB R1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0gJChTUlBMSUIpIFwKKwkt bG5jdXJzZXMgLWx0ZXJtY2FwIC1sc3JwIC1sZ21wIC1sZGVzIC1sa3J5cHRvIC1sY3J5cHQgLWxy ZXNvbHYiCisKK2xpbnV4K3NycCtnbXArbm8tZGVzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAgLi4uJworCSQoTUFLRSkgc3JwbWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNG TEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZN QyBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCBcCisJLURDS19FTkNSWVBUSU9OIC1E Q0tfQ0FTVCBcCisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5V WEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJJChTUlBJTkMpICQoS0ZMQUdTKSIgIkxOS0ZMQUdT ID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9ICQoU1JQTElCKSBcCisJLWxuY3Vyc2VzIC1sdGVy bWNhcCAtbHNycCAtbGdtcCAtbGtyeXB0byAtbGNyeXB0IC1scmVzb2x2IgorCitsaW51eCtzcnAr Z21wLWV4cG9ydDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBv biBpMzg2IHdpdGggU1JQLi4uJworCSQoTUFLRSkgc3JwbWl0LWV4cG9ydCBLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9IFwKKwkiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLU8g LWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENL X0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1ERk5GTE9BVCBcCisJLURDS19DVVJTRVMgLURDS19Q T1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJJChT UlBJTkMpICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9ICQo U1JQTElCKSBcCisJLWxuY3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGdtcCAtbGtyeXB0byAtbGNy eXB0IC1sbSAtbHJlc29sdiIKKworbGludXgrc3JwK2dtcCtwYW06CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIFNSUC4uLicKKwkkKE1BS0Up IHNycG1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIg XAorCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1E Tk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgXAorCS1EQ0tfRU5DUllQ VElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9T SVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCS1EQ0tf UEFNIC1ERk5GTE9BVCAkKFNSUElOQykgJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdT KSIgXAorCSJMSUJTID0gJChTUlBMSUIpIC1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgLWxnbXAg LWxkZXMgLWxrcnlwdG8gXAorCS1sY3J5cHQgLWxwYW0gLWxkbCAtbG0gLWxyZXNvbHYiCisKKyNM aW51eCBvbiBJbnRlbCBQQyB3aXRoIFNSUCAxLjcuNCBidWlsdCB3aXRoIE9wZW5TU0wgZm9yIEJp ZyBOdW1iZXIgTWF0aAorI2FuZCBDcnlwdG9ncmFwaGljIGZ1bmN0aW9uYWxpdHkuCisjCitsaW51 eCtzcnA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4 NiB3aXRoIFNSUC4uLicKKwkkKE1BS0UpIHNycG1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9 ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIg LXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04g LURDS19TUlAgXAorCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMg XAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQg LURIQVZFX0NSWVBUX0ggXAorCSQoU1JQSU5DKSAkKFNTTElOQykgJChLRkxBR1MpIiAiTE5LRkxB R1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0gJChTUlBMSUIpICQoU1NMTElCKSBcCisJLWxu Y3Vyc2VzIC1sdGVybWNhcCAtbHNycCAtbGtyeXB0byAtbGNyeXB0byAtbGNyeXB0IC1scmVzb2x2 IgorCitsaW51eCtzcnArcGFtOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IExpbnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCisJJChNQUtFKSBzcnBtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLU8gLWZ1 bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENLX0FV VEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIFwKKwktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tf REVTIC1ETElCREVTIFwKKwktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAt RExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKKwktRENLX1BBTSAtREZORkxPQVQgJChTUlBJ TkMpICQoU1NMSU5DKSAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAor CSJMSUJTID0gJChTUlBMSUIpICQoU1NMTElCKSAtbG5jdXJzZXMgLWx0ZXJtY2FwIC1sc3JwIC1s a3J5cHRvIFwKKwktbGNyeXB0byAtbGNyeXB0IC1scGFtIC1sZGwgLWxtIC1scmVzb2x2IgorCisj TGludXggb24gSW50ZWwgUEMgd2l0aCBTUlAgYW5kIFNTTC9UTFMuCisjCisjIGxpYnNycC5hIHNo b3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKKyMgUmVxdWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4y IG9yIGhpZ2hlciB0byBiZSBjb21waWxlZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KKyNSZW1v dmUgLWx0ZXJtY2FwIGlmIGl0IGNhdXNlcyB0cm91YmxlIGUuZy4gaW4gRGViaWFuIDIuMi4KKyNJ ZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0byBL RkxBR1MuCitsaW51eCtzcnArb3BlbnNzbDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggS1JCLFNSUCxTU0wuLi4nCisJJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwki Q0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09U Rk1DIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIFwKKwktRENLX0VOQ1JZUFRJT04g LURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIFwKKwktRENLX0NVUlNFUyAtRENL X1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKKwkk KFNSUElOQykgJChTU0xJTkMpICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwK KwkiTElCUyA9ICQoU1JQTElCKSAkKFNTTExJQikgXAorCS1sbmN1cnNlcyAtbHRlcm1jYXAgLWxz cnAgLWxzc2wgLWxrcnlwdG8gLWxjcnlwdG8gXAorCS1sY3J5cHQgLWxyZXNvbHYiCisKKyNMaW51 eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiBhbmQgU1JQ LgorIworIyBsaWJzcnAuYSBzaG91bGQgYmUgYnVpbGQgd2l0aCBHTlUgTVAgKGxpYmdtcC5hKQor IyBpbnN0ZWFkIG9mIEFUJlQgQ3J5cHRvTGliIChsaWJjcnlwdC5hKSBkdWUgdG8gbmFtaW5nIGNv bmZsaWN0cyB3aXRoCisjIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiBMaW51eCBsaWJyYXJpZXMuCisj IFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBvciBoaWdoZXIgdG8gYmUgY29tcGlsZWQgd2l0 aCBLUkI0IGNvbXBhdGliaWxpdHkuCitsaW51eCtrcmI1K2tyYjQrc3JwOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBLUkI1NCtTUlAuLi4n CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJD QzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVgg LURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EQ0tf S0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1EQ0tfRU5DUllQVElPTiAtRENL X0NBU1QgLURDS19ERVMgLURMSUJERVMgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1E VENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCSQoSzVJTkMpICQoSzVJ TkMpL2tyYjUgJChTUlBJTkMpIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1Mp IiBcCisJIkxJQlMgPSAkKEs1TElCKSAkKFNSUExJQikgXAorCS1sbmN1cnNlcyAtbHRlcm1jYXAg LWxzcnAgLWxnbXAgLWxnc3NhcGlfa3JiNSAtbGtyeXB0byBcCisJLWxkZXMgLWxrcmI0IC1sZGVz NDI1IC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAtbGNyeXB0IC1scmVzb2x2IgorCisjTGlu dXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4yLjIsIFNSUCBh bmQgU1NML1RMUy4KKyMKKyMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNTTAor IyBSZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgb3IgaGlnaGVyIHRvIGJlIGNvbXBpbGVkIHdp dGggS1JCNCBjb21wYXRpYmlsaXR5LgorIyBSZXF1aXJlcyBPcGVuU1NMIDAuOS42YSBvciBoaWdo ZXIKKyNJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5 NyB0byBLRkxBR1MuCitsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2w6CisJQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIEtSQixTUlAsU1NMLi4u JworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAi Q0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lY IC1ETElOVVggLUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAtRENL X0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKKwktRENLX0VOQ1JZUFRJT04gLURD S19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIFwKKwktRENLX0NVUlNFUyAtRENLX1BP U0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKKwkkKEs1 SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1JQSU5DKSAkKFNTTElOQykgXAorCSQoS0ZMQUdTKSIgIkxO S0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9ICQoSzVMSUIpICQoU1JQTElCKSAkKFNT TExJQikgXAorCS1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgXAorCS1sa3JiNCAtbHNzbCAtbGty eXB0byAtbGNyeXB0byBcCisJLWxrcmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIC1sZ3NzYXBpX2ty YjUgLWxjcnlwdCAtbHJlc29sdiIKKworI0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9y IE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBTU0wvVExTLgorIworIyBsaWJzcnAuYSBzaG91bGQgYmUg YnVpbGQgd2l0aCBPcGVuU1NMCisjIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBiZSBjb21w aWxlZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KKyNJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43 IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0byBLRkxBR1MuCitsaW51eCtrcmI1K2tyYjQr b3BlbnNzbDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBp Mzg2IHdpdGggS1JCLFNTTC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVk LWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElD QVRJT04gLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCisJLURDS19FTkNS WVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENLX1NTTCBcCisJLURDS19DVVJT RVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRf SCBcCisJJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNTTElOQykgXAorCSQoS0ZMQUdTKSIgIkxO S0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9ICQoSzVMSUIpICQoU1NMTElCKSBcCisJ LWxuY3Vyc2VzIC1sdGVybWNhcCBcCisJLWxrcmI0IC1sc3NsIC1sY3J5cHRvIC1sa3JiNSAtbGNv bV9lcnIgXAorCS1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1scmVzb2x2IgorCisj TGludXggb24gSW50ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4yLjEsIFNT TC9UTFMuCisjCisjIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKKyMgUmVx dWlyZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmls aXR5LgorIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NM XzA5NyB0byBLRkxBR1MuCitsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCtzaGFkb3c6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIEtSQixTU0wu Li4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2Mi ICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9T SVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVS T1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQgXAorCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1Qg LURDS19ERVMgLURMSUJERVMgLURDS19TU0wgLURDS19TSEFET1cgXAorCS1EQ0tfQ1VSU0VTIC1E Q0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAor CSQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTU0xJTkMpIFwKKwkkKEtGTEFHUykiICJMTktGTEFH UyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMgPSAkKEs1TElCKSAkKFNTTExJQikgIFwKKwktbG5j dXJzZXMgLWx0ZXJtY2FwIFwKKwktbGtyYjQgLWxzc2wgLWxjcnlwdG8gLWxrcmI1IC1sY29tX2Vy ciBcCisJLWxrNWNyeXB0byAtbGdzc2FwaV9rcmI1IC1sY3J5cHQgLWxyZXNvbHYiCisKKyNMaW51 eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIsIFNTTC9UTFMu CisjCisjIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKKyMgUmVxdWlyZXMg dGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5Lgor IyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0 byBLRkxBR1MuCitsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRvdzoKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBvbiBpMzg2IHdpdGggS1JCLFNTTC4u LicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIg IkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJ WCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJP UyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCAtRFpMSUIgXAorCS1EQ0tfRU5DUllQVElPTiAtRENL X0NBU1QgLURDS19ERVMgLURMSUJERVMgLURDS19TU0wgLURDS19TSEFET1cgXAorCS1EQ0tfQ1VS U0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBU X0ggXAorCSQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTU0xJTkMpIFwKKwkkKEtGTEFHUykiICJM TktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMgPSAkKEs1TElCKSAkKFNTTExJQikgXAor CS1sbmN1cnNlcyAtbHRlcm1jYXAgXAorCS1sa3JiNCAtbHNzbCAtbGNyeXB0byAtbGtyYjUgLWxj b21fZXJyIFwKKwktbGs1Y3J5cHRvIC1sZ3NzYXBpX2tyYjUgLWxjcnlwdCAtbHJlc29sdiAtbHoi CisKK2xpbnV4K2tyYjUra3JiNCtzcnAtZXhwb3J0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCisJJChNQUtFKSB4ZXJtaXQt ZXhwb3J0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDQyA9IGdjYyIgIkNDMiA9IGdj YyIgXAorCSJDRkxBR1MgPSAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVY IC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19TUlAgLURDS19LRVJCRVJP UyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcg LURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAtREhBVkVfQ1JZUFRfSCBcCisJJChLNUlOQykgJChL NUlOQykva3JiNSAkKFNSUElOQykgXAorCSQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFH UykiIFwKKwkiTElCUyA9ICQoU1JQTElCKSAkKEs1TElCKSBcCisJLWxuY3Vyc2VzIC1sdGVybWNh cCAtbHNycCAtbGdtcCAtbGtyYjQgLWxkZXM0MjUgLWxrcmI1IC1sZ3NzYXBpX2tyYjUgXAorCS1s Y29tX2VyciAtbGs1Y3J5cHRvIC1sa3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYiCisKK2xpbnV4K2ty YjUra3JiNCtzcnArcGFtOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExp bnV4IG9uIGkzODYgd2l0aCBTUlAuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLU8gLWZ1bnNp Z25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENLX0FVVEhF TlRJQ0FUSU9OIC1EQ0tfU1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURLUkI1MjQg XAorCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgXAorCS1EQ0tf Q1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NS WVBUX0ggXAorCS1EQ0tfUEFNICQoSzVJTkMpICQoSzVJTkMpL2tyYjUgJChTUlBJTkMpIFwKKwkk KEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMgPSAkKFNSUExJQikg JChLNUxJQikgXAorCS1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgLWxnbXAgLWxkZXMgLWxrcmI0 IC1sZGVzNDI1IC1sa3JiNSBcCisJLWxjb21fZXJyIC1sazVjcnlwdG8gLWxnc3NhcGlfa3JiNSAt bGtyeXB0byAtbGNyeXB0IC1scGFtIC1sZGwgXAorCS1scmVzb2x2IgorCisjTGludXggb24gSW50 ZWwgUEMgd2l0aCBDeWdudXMgb3IgTUlUIEtlcmJlcm9zIDUgMS4yLjIsIFNSUCBhbmQgU1NML1RM Uy4KKyMgYW5kIFBBTS4KKyMKKyMgbGlic3JwLmEgc2hvdWxkIGJlIGJ1aWxkIHdpdGggT3BlblNT TAorIyBSZXF1aXJlcyB0aGUgS2VyYmVyb3MgMS4yLjIgYmUgY29tcGlsZWQgd2l0aCBLUkI0IGNv bXBhdGliaWxpdHkuCisjIElmIHlvdSBoYXZlIE9wZW5TU0wgMC45Ljcgb3IgbGF0ZXIsIGFkZCAt RE9QRU5TU0xfMDk3IHRvIEtGTEFHUy4KK2xpbnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbCtwYW0t ZGVidWc6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4 NiB3aXRoIEtSQixTUlAsU1NMLi4uJworCSQoTUFLRSkgeGVybWl0LWRlYnVnIEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1nIC1P IC1mdW5zaWduZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCisJLURD S19BVVRIRU5USUNBVElPTiAtRENLX1NSUCAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1E S1JCNTI0IFwKKwktRENLX0VOQ1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1E Q0tfU1NMIC1EQ0tfUEFNIFwKKwktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tF VCAtRExJTlVYRlNTVE5EIC1ESEFWRV9DUllQVF9IIFwKKwktdyAtRG1hbGxvYz1kbWFsbG9jIC1E ZnJlZT1kZnJlZSAtRE1ERUJVRyAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1IFwKKwkkKFNSUElOQykg JChTU0xJTkMpICQoS0ZMQUdTKSIgIkxOS0ZMQUdTID0gJChMTktGTEFHUykiIFwKKwkiTElCUyA9 ICQoU1JQTElCKSAkKEs1TElCKSAkKFNTTExJQikgXAorCS1sbmN1cnNlcyAtbHRlcm1jYXAgLWxz cnAgLWxrcmI0IC1sc3NsIC1sa3J5cHRvIC1sY3J5cHRvIFwKKwktbGtyYjUgLWxjb21fZXJyIC1s azVjcnlwdG8gLWxnc3NhcGlfa3JiNSAtbGNyeXB0IC1scmVzb2x2IC1scGFtIC1sZGwiCisKKyNM aW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMSwgU1JQ IGFuZCBTU0wvVExTLgorIyBhbmQgUEFNLgorIworIyBsaWJzcnAuYSBzaG91bGQgYmUgYnVpbGQg d2l0aCBPcGVuU1NMCisjIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBiZSBjb21waWxlZCB3 aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KKyMgSWYgeW91IGhhdmUgT3BlblNTTCAwLjkuNyBvciBs YXRlciwgYWRkIC1ET1BFTlNTTF8wOTcgdG8gS0ZMQUdTLgorbGludXgra3JiNStrcmI0K3NycCtv cGVuc3NsK3BhbToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMaW51eCBv biBpMzg2IHdpdGggS1JCLFNSUCxTU0wuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLWcgLU8g LWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwktRENL X0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1JQIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtREtSQjQgLURL UkI1MjQgXAorCS1EQ0tfRU5DUllQVElPTiAtRENLX0NBU1QgLURDS19ERVMgLURMSUJERVMgLURD S19TU0wgLURDS19QQU0gXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VU IC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCSQoSzVJTkMpICQoSzVJTkMpL2tyYjUg JChTUlBJTkMpICQoU1NMSU5DKSBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdT KSIgXAorCSJMSUJTID0gJChTUlBMSUIpICQoSzVMSUIpICQoU1NMTElCKSAgXAorCS1sbSAtbG5j dXJzZXMgLWx0ZXJtY2FwIC1sc3JwIFwKKwktbGtyYjQgLWxzc2wgLWxrcnlwdG8gIC1sY3J5cHRv IC1sZ3NzYXBpX2tyYjUgXAorCS1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byAtbGNyeXB0IC1s cmVzb2x2IC1scGFtIC1sZGwiCisKKyNMaW51eCBvbiBJbnRlbCBQQyB3aXRoIEN5Z251cyBvciBN SVQgS2VyYmVyb3MgNSAxLjIuMiwgU1JQLCBPcGVuU1NMCisjIHdpdGggWkxJQiBhbmQgUEFNCisj CisjIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKKyMgUmVxdWlyZXMgdGhl IEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5LgorIyBJ ZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5NyB0byBL RkxBR1MuCitsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wremxpYitwYW06CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4NiB3aXRoIEtSQixTUlAsU1NM Li4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2Nj IiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1nIC1PIC1mdW5zaWduZWQtY2hhciAtcGlwZSAt RFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5USUNBVElPTiAtRENLX1NS UCAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKKwktRENLX0VOQ1JZUFRJ T04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIC1EQ0tfUEFNIC1EWkxJQiBc CisJLURDS19DVVJTRVMgLURDS19QT1NJWF9TSUcgLURUQ1BTT0NLRVQgLURMSU5VWEZTU1RORCAt REhBVkVfQ1JZUFRfSCBcCisJJChLNUlOQykgJChLNUlOQykva3JiNSAkKFNSUElOQykgJChTU0xJ TkMpIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1MpIiBcCisJIkxJQlMgPSAk KFNSUExJQikgJChLNUxJQikgJChTU0xMSUIpIFwKKwktbG0gLWxuY3Vyc2VzIC1sdGVybWNhcCAt bHNycCBcCisJLWxrcmI0IC1sc3NsIC1sa3J5cHRvICAtbGNyeXB0byAtbGdzc2FwaV9rcmI1IFwK KwktbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gLWxjcnlwdCAtbHJlc29sdiAtbHBhbSAtbGRs IC1seiIKKworI0xpbnV4IG9uIEludGVsIFBDIHdpdGggQ3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1 IDEuMi4yLCBTUlAsIE9wZW5TU0wKKyMgd2l0aCBaTElCLCBTaGFkb3cgUGFzc3dvcmRzLCBhbmQg UEFNCisjCisjIGxpYnNycC5hIHNob3VsZCBiZSBidWlsZCB3aXRoIE9wZW5TU0wKKyMgUmVxdWly ZXMgdGhlIEtlcmJlcm9zIDEuMi4yIGJlIGNvbXBpbGVkIHdpdGggS1JCNCBjb21wYXRpYmlsaXR5 LgorIyBJZiB5b3UgaGF2ZSBPcGVuU1NMIDAuOS43IG9yIGxhdGVyLCBhZGQgLURPUEVOU1NMXzA5 NyB0byBLRkxBR1MuCitsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wremxpYitzaGFkb3crcGFt OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IG9uIGkzODYgd2l0 aCBLUkIsU1JQLFNTTC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtZyAtTyAtZnVuc2lnbmVk LWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAorCS1EQ0tfQVVUSEVOVElD QVRJT04gLURDS19TUlAgLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUyNCBcCisJ LURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENLX1NTTCAtRENL X1BBTSAtRFpMSUIgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09DS0VUIC1E TElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCS1EQ0tfU0hBRE9XICQoSzVJTkMpICQoSzVJ TkMpL2tyYjUgJChTUlBJTkMpICQoU1NMSU5DKSBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAk KExOS0ZMQUdTKSIgXAorCSJMSUJTID0gJChTUlBMSUIpICQoSzVMSUIpICQoU1NMTElCKSBcCisJ LWxtIC1sbmN1cnNlcyAtbHRlcm1jYXAgLWxzcnAgLWxrcnlwdG8gXAorCS1sa3JiNCAtbHNzbCAt bGNyeXB0byAtbGdzc2FwaV9rcmI1IFwKKwktbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8gLWxj cnlwdCAtbHJlc29sdiAtbHBhbSAtbGRsIC1seiIKKworI0xpbnV4IG9uIEludGVsIFBDIHdpdGgg Q3lnbnVzIG9yIE1JVCBLZXJiZXJvcyA1IDEuMi4yLCBPcGVuU1NMCisjIHdpdGggU2hhZG93IFBh c3N3b3JkcywgUEFNCisjCisjIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBiZSBjb21waWxl ZCB3aXRoIEtSQjQgY29tcGF0aWJpbGl0eS4KK2xpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3NoYWRv dytwYW06CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggb24gaTM4 NiB3aXRoIEtSQixTU0wsLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gIkNDID0gZ2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUyA9IC1nIC1PIC1mdW5zaWdu ZWQtY2hhciAtcGlwZSAtRFBPU0lYIC1ETElOVVggLUROT0NPVEZNQyBcCisJLURDS19BVVRIRU5U SUNBVElPTiAtRENLX0tFUkJFUk9TICAtREtSQjUgLURLUkI0IC1ES1JCNTI0IFwKKwktRENLX0VO Q1JZUFRJT04gLURDS19DQVNUIC1EQ0tfREVTIC1ETElCREVTIC1EQ0tfU1NMIC1EQ0tfUEFNIFwK KwktRENLX0NVUlNFUyAtRENLX1BPU0lYX1NJRyAtRFRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1E SEFWRV9DUllQVF9IIFwKKwktRENLX1NIQURPVyAkKEs1SU5DKSAkKEs1SU5DKS9rcmI1ICQoU1NM SU5DKSBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIgXAorCSJMSUJTID0g JChLNUxJQikgJChTU0xMSUIpIFwKKwktbG0gLWxuY3Vyc2VzIC1sdGVybWNhcCBcCisJLWxrcmI0 IC1sc3NsIC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUgXAorCS1sa3JiNSAtbGNvbV9lcnIgLWxrNWNy eXB0byAtbGNyeXB0IC1scmVzb2x2IC1scGFtIC1sZGwiCisKKyNMaW51eCBvbiBJbnRlbCBQQyB3 aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiwgT3BlblNTTAorIyB3aXRoIFpMSUIs IFNoYWRvdyBQYXNzd29yZHMsIFBBTQorIworIyBsaWJzcnAuYSBzaG91bGQgYmUgYnVpbGQgd2l0 aCBPcGVuU1NMCisjIFJlcXVpcmVzIHRoZSBLZXJiZXJvcyAxLjIuMiBiZSBjb21waWxlZCB3aXRo IEtSQjQgY29tcGF0aWJpbGl0eS4KKyMgSWYgeW91IGhhdmUgT3BlblNTTCAwLjkuNyBvciBsYXRl ciwgYWRkIC1ET1BFTlNTTF8wOTcgdG8gS0ZMQUdTLgorbGludXgra3JiNStrcmI0K29wZW5zc2wr emxpYitzaGFkb3crcGFtOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExp bnV4IG9uIGkzODYgd2l0aCBLUkIsU1JQLFNTTC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAt ZyAtTyAtZnVuc2lnbmVkLWNoYXIgLXBpcGUgLURQT1NJWCAtRExJTlVYIC1ETk9DT1RGTUMgXAor CS1EQ0tfQVVUSEVOVElDQVRJT04gLURDS19LRVJCRVJPUyAgLURLUkI1IC1ES1JCNCAtREtSQjUy NCBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAtRENLX1NT TCAtRENLX1BBTSAtRFpMSUIgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1EVENQU09D S0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCS1EQ0tfU0hBRE9XICQoSzVJTkMp ICQoSzVJTkMpL2tyYjUgJChTU0xJTkMpIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5L RkxBR1MpIiBcCisJIkxJQlMgPSAkKEs1TElCKSAkKFNTTExJQikgXAorCS1sbSAtbG5jdXJzZXMg LWx0ZXJtY2FwIFwKKwktbGtyYjQgLWxzc2wgLWxjcnlwdG8gLWxnc3NhcGlfa3JiNSBcCisJLWxr cmI1IC1sY29tX2VyciAtbGs1Y3J5cHRvIC1sY3J5cHQgLWxyZXNvbHYgLWxwYW0gLWxkbCAtbHoi CisKKyNSZWQgSGF0IDkgLSBmdWxsIGluc3RhbGwgaW5jbHVkZXMgS2VyYmVyb3MgNSAoNCBjb21w YXQpLCBQQU0sIFNTTC4KKyNBbHNvIHdvcmtzIGFyb3VuZCBidWcgaW4gY3Vyc2VzIGluIHdoaWNo IHRlcm1pbmFsIGdvZXMgZGVhZCBhZnRlcgorI3JldHVybmluZyBmcm9tIGZpbGUtdHJhbnNmZXIg ZGlzcGxheS4gIEFzc3VtZXMgT3BlblNTTCAwLjkuNyBvciBsYXRlci4KK3JlZGhhdDk6CisJQGVj aG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgOS4wLi4uIgorCSQoTUFLRSkg bGludXgra3JiNStrcmI0K29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKKwlLVEFSR0VUPSQke0tU QVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAtRFJIOTAgLURPUEVOU1NMXzA5NyAkKEtGTEFHUykiCisK KyNEaXR0byBwbHVzIFNSUCAod2hpY2ggaXMgbm90IG5vcm1hbGx5IGluY2x1ZGVkIHdpdGggUkgg TGludXgpLgorcmVkaGF0OStzcnA6CisJQGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9y IFJlZCBIYXQgOS4wLi4uIgorCSQoTUFLRSkgbGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3ps aWIrc2hhZG93K3BhbSBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLURS SDkwIC1ET1BFTlNTTF8wOTcgJChLRkxBR1MpIgorCisjRm9yIFJlZCBIYXQgQVMgMi4xIHdpdGgg T3BlblNTTAorcmVkaGF0MjErc3NsOgorCUBlY2hvICJCdWlsZGluZyBTRUNVUkUgS2VybWl0IGZv ciBSZWQgSGF0IDIuMS4uLiIKKwkkKE1BS0UpIGxpbnV4K29wZW5zc2wremxpYitzaGFkb3crcGFt IFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAgJChLRkxBR1MpIgorCisj UmVkIEhhdCBMaW51eCA4LjAgLSBmdWxsIGluc3RhbGwgaW5jbHVkZXMgS2VyYmVyb3MgNSAoNCBj b21wYXQpLCBQQU0sIFNTTC4KKyNBbHNvIHdvcmtzIGFyb3VuZCBidWcgaW4gY3Vyc2VzIGluIHdo aWNoIHRlcm1pbmFsIGdvZXMgZGVhZCBhZnRlcgorI3JldHVybmluZyBmcm9tIGZpbGUtdHJhbnNm ZXIgZGlzcGxheS4KK3JlZGhhdDgwOgorCUBlY2hvICJCdWlsZGluZyBTRUNVUkUgS2VybWl0IGZv ciBSZWQgSGF0IDguMC4uLiIKKwkkKE1BS0UpIGxpbnV4K2tyYjUra3JiNCtvcGVuc3NsK3psaWIr c2hhZG93K3BhbSBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLURSSDgw ICQoS0ZMQUdTKSIKKworcmVkaGF0ODArc3JwOgorCUBlY2hvICJCdWlsZGluZyBTRUNVUkUgS2Vy bWl0IGZvciBSZWQgSGF0IDguMC4uLiIKKwkkKE1BS0UpIGxpbnV4K2tyYjUra3JiNCtzcnArb3Bl bnNzbCt6bGliK3NoYWRvdytwYW0gXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFH UyA9IC1EUkg4MCAkKEtGTEFHUykiCisKKyNSZWQgSGF0IExpbnV4IDcuMyAtIGZ1bGwgaW5zdGFs bCBpbmNsdWRlcyBLZXJiZXJvcyA1ICg0IGNvbXBhdCksIFBBTSwgU1NMLgorI0Fsc28gd29ya3Mg YXJvdW5kIGJ1ZyBpbiBjdXJzZXMgaW4gd2hpY2ggdGVybWluYWwgZ29lcyBkZWFkIGFmdGVyCisj cmV0dXJuaW5nIGZyb20gZmlsZS10cmFuc2ZlciBkaXNwbGF5LgorcmVkaGF0NzM6CisJQGVjaG8g IkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgNy4zLi4uIgorCSQoTUFLRSkgbGlu dXgra3JiNStrcmI0K29wZW5zc2wremxpYitzaGFkb3crcGFtIFwKKwlLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9ICJLRkxBR1MgPSAtRFJINzMgJChLRkxBR1MpIgorCityZWRoYXQ3MytzcnA6CisJ QGVjaG8gIkJ1aWxkaW5nIFNFQ1VSRSBLZXJtaXQgZm9yIFJlZCBIYXQgNy4zLi4uIgorCSQoTUFL RSkgbGludXgra3JiNStrcmI0K3NycCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBcCisJS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLURSSDczICQoS0ZMQUdTKSIKKworI1JlZCBI YXQgTGludXggNy4yIC0gZnVsbCBpbnN0YWxsIGluY2x1ZGVzIEtlcmJlcm9zIDUgKDQgY29tcGF0 KSwgUEFNLCBTU0wuCisjQWxzbyB3b3JrcyBhcm91bmQgYnVnIGluIGN1cnNlcyBpbiB3aGljaCB0 ZXJtaW5hbCBnb2VzIGRlYWQgYWZ0ZXIKKyNyZXR1cm5pbmcgZnJvbSBmaWxlLXRyYW5zZmVyIGRp c3BsYXkuCityZWRoYXQ3MjoKKwlAZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBmb3IgUmVk IEhhdCA3LjIuLi4iCisJJChNQUtFKSBsaW51eCtrcmI1K2tyYjQrb3BlbnNzbCt6bGliK3NoYWRv dytwYW0gXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUyA9IC1EUkg3MiAkKEtG TEFHUykiCisKK3JlZGhhdDcyK3NycDoKKwlAZWNobyAiQnVpbGRpbmcgU0VDVVJFIEtlcm1pdCBm b3IgUmVkIEhhdCA3LjIuLi4iCisJJChNQUtFKSBsaW51eCtrcmI1K2tyYjQrc3JwK29wZW5zc2wr emxpYitzaGFkb3crcGFtIFwKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJLRkxBR1MgPSAt RFJINzIgJChLRkxBR1MpIgorCisjUmVkIEhhdCBMaW51eCA3LjEgLSBmdWxsIGluc3RhbGwgaW5j bHVkZXMgS2VyYmVyb3MgNSAoNCBjb21wYXQpLCBQQU0sIFNTTC4KKyNBbHNvIHdvcmtzIGFyb3Vu ZCBidWcgaW4gY3Vyc2VzIGluIHdoaWNoIHRlcm1pbmFsIGdvZXMgZGVhZCBhZnRlcgorI3JldHVy bmluZyBmcm9tIGZpbGUtdHJhbnNmZXIgZGlzcGxheS4KK3JlZGhhdDcxOgorCUBlY2hvICJCdWls ZGluZyBTRUNVUkUgS2VybWl0IGZvciBSZWQgSGF0IDcuMS4uLiIKKwkkKE1BS0UpIGxpbnV4K2ty YjUra3JiNCtvcGVuc3NsK3psaWIrc2hhZG93K3BhbSBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0k KEApfSAiS0ZMQUdTID0gLURSSDcxICQoS0ZMQUdTKSIKKworcmVkaGF0NzErc3JwOgorCUBlY2hv ICJCdWlsZGluZyBTRUNVUkUgS2VybWl0IGZvciBSZWQgSGF0IDcuMS4uLiIKKwkkKE1BS0UpIGxp bnV4K2tyYjUra3JiNCtzcnArb3BlbnNzbCt6bGliK3NoYWRvdytwYW0gXAorCUtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gIktGTEFHUyA9IC1EUkg3MSAkKEtGTEFHUykiCisKKyNMaW51eCBvbiBJ bnRlbCBQQyB3aXRoIEN5Z251cyBvciBNSVQgS2VyYmVyb3MgNSAxLjIuMiwgT3BlblNTTAorIyB3 aXRoIFpMSUIgYW5kIFBBTSBhbmQgU2hhZG93IHBhc3N3b3JkcworbGludXgra3JiNStvcGVuc3Ns K3psaWIrc2hhZG93K3BhbToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBM aW51eCBvbiBpMzg2IHdpdGggS1JCNSxTU0wuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0k JHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLWcg LU8gLWZ1bnNpZ25lZC1jaGFyIC1waXBlIC1EUE9TSVggLURMSU5VWCAtRE5PQ09URk1DIFwKKwkt RENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfS0VSQkVST1MgIC1ES1JCNSAtRENLX1NIQURPVyAtREhB VkVfUFRNWCBcCisJLURDS19FTkNSWVBUSU9OIC1EQ0tfQ0FTVCAtRENLX0RFUyAtRExJQkRFUyAt RENLX1NTTCAtRENLX1BBTSAtRFpMSUIgXAorCS1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIC1E VENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURIQVZFX0NSWVBUX0ggXAorCSQoSzVJTkMpICQoSzVJ TkMpL2tyYjUgJChTU0xJTkMpIFwKKwkkKEtGTEFHUykiICJMTktGTEFHUyA9ICQoTE5LRkxBR1Mp IiBcCisJIkxJQlMgPSAkKEs1TElCKSAkKFNTTExJQikgXAorCS1sbSAtbG5jdXJzZXMgLWx0ZXJt Y2FwIC1sc3NsIC1sY3J5cHRvIC1sZ3NzYXBpX2tyYjUgXAorCS1sa3JiNSAtbGNvbV9lcnIgLWxr NWNyeXB0byAtbGNyeXB0IC1scmVzb2x2IC1scGFtIC1sZGwgLWx6IgorCitsaW51eG5vdGNwOgor CSQoTUFLRSkgbGludXggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTID0gLUROT05F VCAkKEtGTEFHUykiCisKKyMgIm1ha2UgbGludXhub3RjcCIgd2l0aCBsY2MgKHNlZSBodHRwOi8v d3d3LmNzLnByaW5jZXRvbi5lZHUvc29mdHdhcmUvbGNjKQorIyBsY2MgZG9lcyBub3QgdW5kZXJz dGFuZCB2YXJpb3VzIGdjYyBleHRlbnNpb25zOgorIyAgIl9faW5saW5lX18iIC0tIGNhbiBiZSBl bGltaW5hdGVkIGJ5IGFkZGluZyAiLURfX2lubGluZV9fPSIKKyMgICJfX2FzbV9fIGFuZCAibG9u ZyBsb25nIiAtLSBpbiBoZWFkZXIgZmlsZXMsIHNob3VsZCBiZSBzdXJyb3VuZGVkIGJ5CisjICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNpZm5kZWYoX19TVFJJQ1RfQU5TSV9fKSIvIiNl bmRpZiIKKyMgIGhvd2V2ZXIsIFRDUCByZXF1aXJlcyBzb21lIF9fYXNtX18gZnVuY3Rpb25zLCBz byBjYW5ub3QgYmUgY29tcGlsZWQKK2xpbnV4bm90Y3AtbGNjOgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4IHdpdGggbGNjIC4uLicKKwlAZWNobyAnUmVhZCBjb21t ZW50cyBpbiBtYWtlZmlsZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4nCisJJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBsY2MiICJDQzIgPSBsY2MiIFwK KwkiQ0ZMQUdTID0gLURMSU5VWCAtRFBPU0lYIC1EQ0tfQ1VSU0VTIC1EQ0tfUE9TSVhfU0lHIFwK KwktVVRDUFNPQ0tFVCAtRExJTlVYRlNTVE5EIC1ETk9MRUFSTiAkKEtGTEFHUykiIFwKKwkiTE5L RkxBR1MgPSAkKExOS0ZMQUdTKSIgIkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyMgTGlu dXggMC45OS4xNCB0aHJ1IDEuMCB3aXRoIGdjYywgZHluYW1pYyBsaWJyYXJpZXMsIGN1cnNlcywg VENQL0lQLgorIyBGb3IgTGludXggMS4yIG9yIGxhdGVyLCB1c2UgIm1ha2UgbGludXgiIChhYm92 ZSkuCisjCisjIC1ETElOVVhGU1NUTkQgKExpbnV4IEZpbGUgU3lzdGVtIFN0YW5kYXJkKSBnaXZl cyBVVUNQIGxvY2tmaWxlIC92YXIvbG9jayB3aXRoCisjIHN0cmluZyBwaWQuICBSZW1vdmUgdGhp cyBhbmQgZ2V0IC91c3Ivc3Bvb2wvdXVjcCB3aXRoIGludCBwaWQsIHdoaWNoIHdhcyB1c2VkCisj IGluIGVhcmx5IExpbnV4IHZlcnNpb25zLgorIworIyBJZiB5b3UgZ2V0IGNvbXBpbGVyIGVycm9y cyByZWdhcmRpbmcgPGxpbnV4L3NlcmlhbC5oPiwgYWRkIC1ETk9ISVNQRUVELgorIworIyAtRENL X1BPU0lYX1NJRyAoUE9TSVggc2lnbmFsIGhhbmRsaW5nKSBpcyBnb29kIGZvciBMaW51eCByZWxl YXNlcyBiYWNrIHRvIGF0CisjIGxlYXN0IDAuOTkuMTQ7IGlmIGl0IGNhdXNlcyB0cm91YmxlIGZv ciB5b3UsIGp1c3QgcmVtb3ZlIGl0LgorIworIyAtRENLX0NVUlNFUzogSGVyZSB3ZSBsaW5rIHdp dGggdGhlIHJlZ3VsYXIgY3Vyc2VzIGxpYnJhcnkuICBCdXQgeW91IHNob3VsZAorIyBiZSB1c2lu ZyBuY3Vyc2VzLiAgSW50ZXJuYWxseSwgdGhlIGNrdXVzeC5jIG1vZHVsZSBpbmNsdWRlcyA8Y3Vy c2VzLmg+LCBidXQKKyMgdGhpcyByZWFsbHkgc2hvdWxkIGJlIDxuY3Vyc2VzLmg+LiAgVGh1cyBp ZiB5b3UgaGF2ZSB0aGUgbmV3IGN1cnNlcworIyBtYXRlcmlhbCwgeW91IHNob3VsZCBlaXRoZXIg aW5zdGFsbCBpdCB3aXRoIHRoZSBzdGFuZGFyZCBuYW1lcywgb3IgZWxzZQorIyBjcmVhdGUgc3lt Ym9saWMgbGlua3MgZnJvbSB0aGUgc3RhbmRhcmQgbmFtZXMgdG8gdGhlIG5ldyBvbmVzLiAgSWYg eW91IGdldAorIyBjb21waWxlLXRpbWUgZXJyb3JzIGNvbXBsYWluaW5nIGFib3V0IGRhdGEgZGVm aW5pdGlvbnMgaW4gdGVybWNhcC5oLCBpdAorIyBtZWFucyB5b3UgaGF2ZSBuZXcga2VybmVsIG1h dGVyaWFsIG1peGVkIHdpdGggb2xkZXIgbGliYyBoZWFkZXIgZmlsZXMuICBUbworIyBmaXgsIGFk ZCAiI2luY2x1ZGUgPHRlcm1pb3MuaD4iIHRvIHRoZSA8dGVybWNhcC5oPiBmaWxlLiAgT3IgaWYg YWxsIHRoaXMgaXMKKyMgdG9vIGNvbmZ1c2luZywgY3JlYXRlIGEgbmV3IG1ha2VmaWxlIGVudHJ5 IGJhc2VkIG9uIHRoaXMgb25lLCBidXQgd2l0aAorIyAtRENLX0NVUlNFUyByZW1vdmVkIGZyb20g Q0ZMQUdTIGFuZCB0aGUgZW50aXJlIExJQlM9IGNsYXVzZSByZW1vdmVkLgorIworIyBCdXQgd2Fp dCwgdGhlcmUncyBtb3JlLiAgT24gbW9zdCBMaW51eCBzeXN0ZW1zLCAtbHRlcm1jYXAgbXVzdCBi ZSBpbmNsdWRlZAorIyBpbiBMSUJTLiAgQnV0IG9uIG90aGVycywgdGhlIGxpbmtlciBjb21wbGFp bnMgdGhhdCBsaWJ0ZXJtY2FwIGNhbid0IGJlCisjIGZvdW5kLiAgSW4gdGhhdCBjYXNlLCB0cnkg cmVtb3ZpbmcgLWx0ZXJtY2FwIGZyb20gTElCUz0uCisjCisjIEJ1dCB3YWl0LCB0aGVyZSdzIG1v cmUuICBUaGUgZm9ybWF0IG9mIHRoZSBQSUQgc3RyaW5nIGluIHRoZSBVVUNQIGxvY2tmaWxlCisj IGNoYW5nZWQgYmV0d2VlbiBMaW51eCBGU1NUTkQgMS4wIGFuZCAxLjIuICBJbiB0aGUgZWFybGll ciBzdGFuZGFyZCwgaXQgaGFkCisjIGxlYWRpbmcgemVyb3M7IGluIHRoZSBzZWNvbmQsIGl0IGhh cyBsZWFkaW5nIHNwYWNlcy4gIEJ5IGRlZmF1bHQgdGhpcyBlbnRyeQorIyB1c2VzIHRoZSBuZXdl ciBzdGFuZGFyZC4gIFRvIGZvcmNlIHRoZSBvbGRlciBvbmUsIGFkZCAtREZTU1RORDEwLgorIwor IyAiVGhlIG5pY2UgdGhpbmcgYWJvdXQgdGhlIExpbnV4IHN0YW5kYXJkIGlzIHRoZXJlIGFyZSBz byBtYW55IHRvIGNob29zZSBmcm9tIgorIworIyBOT1RFOiBSZW1vdmUgLURCSUdCVUZPSyBmb3Ig c21hbGwtbWVtb3J5IG9yIGxpbWl0ZWQtcmVzb3VyY2Ugc3lzdGVtcy4KK2xpbnV4MTA6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTGludXggMS4wIG9yIGVhcmxpZXIuLi4n CisJQGVjaG8gJ0lNUE9SVEFOVDogUmVhZCB0aGUgY29tbWVudHMgaW4gdGhlIGxpbnV4IHNlY3Rp b24gb2YgdGhlJworCUBlY2hvICdtYWtlZmlsZSBpZiB5b3UgZ2V0IGNvbXBpbGF0aW9uIG9yIGxp bmsgZXJyb3JzLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJD QyA9IGdjYyIgIkNDMiA9IGdjYyIgXAorCSJDRkxBR1MgPSAtTyAtRFBPU0lYIC1EQ0tfQ1VSU0VT IC1EQ0tfUE9TSVhfU0lHIC1ETElOVVggXAorCS1EVENQU09DS0VUIC1ETElOVVhGU1NUTkQgLURP TElOVVhISVNQRUVEIC1ETk9MRUFSTiAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAkKExOS0ZM QUdTKSIgIkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNUaGlzIHZlcnNpb24gd2FzIHVz ZWQgZm9yIExpbnV4IHByaW9yIHRvIEMtS2VybWl0IDYuMC4xOTIuCisjTm93IHRoZSAiTGludXgg RmlsZSBTeXN0ZW0gU3RhbmRhcmQiIGlzIGNvbnNpZGVyZWQgc3RhbmRhcmQsIGRpdHRvIFRDUC9J UC4KK2xpbnV4b2xkOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIExpbnV4 Li4uJworCUBlY2hvICdGb3IgRlNTVE5ELXJlY29tbWVuZGVkIFVVQ1AgbG9ja2ZpbGVzLCB1c2U6 JworCUBlY2hvICcgIG1ha2UgbGludXggIktGTEFHUz0tRExJTlVYRlNTVE5EIi4nCisJQGVjaG8g J1JlYWQgY29tbWVudHMgaW4gbWFrZWZpbGUgZm9yIGFkZGl0aW9uYWwgb3B0aW9ucy4nCisJJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBn Y2MiIFwKKwkiQ0ZMQUdTID0gLU8gLURMSU5VWCAtRFBPU0lYIC1EQ0tfQ1VSU0VTIC1EQ0tfUE9T SVhfU0lHIC1ETk9MRUFSTiBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSIg IkxJQlMgPSAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyMgOjpFTkRfT0xEX0xJTlVYX1RBUkdFVFM6 OgorCisjIEx5bnhPUyAyLjIgd2l0aCBHQ0MgY29tcGlsZXIsIFRDUC9JUCBhbmQgZnVsbHNjcmVl biBkaXNwbGF5LgorIyBQcm9iYWJseSBhbHNvIHdvcmtzIHdpdGggTHlueCAyLjEsIGFuZCBtYXli ZSBldmVuIEx5bnggMi4wLgorIyAtWCBtZWFucyB1c2UgdGVybWlvcyBzZXJpYWwgZHJpdmVycyBy YXRoZXIgdGhhbiBCU0Q0LjMtc3R5bGUgc2d0dHkgZHJpdmVycy4KKyMgSWYgeW91IGhhdmUgdHJv dWJsZSB3aXRoIHRoaXMsIHRyeSAibWFrZSBic2QgS0ZMQUdTPS1ETk9GRFpFUk8iLgorbHlueDoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMeW54T1MgMi4yIHdpdGggVENQ L0lQJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2Nj IiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLURQT1NJWCAtRERJUkVOVCAtRFNFVFJFVUlE IC1EQ0tfQ1VSU0VTIC1EVENQU09DS0VUIFwKKwktRENLX0FOU0lDIC1ETFlOWE9TIC1ETk9MRUFS TiIgIkxOS0ZMQUdTID0gLVgiICJMSUJTID0gLWxjdXJzZXMgLWxic2QiCisKK2x5bngyMjoKKwkk KE1BS0UpIGx5bnggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPSQoS0ZMQUdTKSIK KworIyBMeW54T1MgMi4xIHdpdGggR0NDIGNvbXBpbGVyIDEuNDAgYW5kIFRDUC9JUC4KK2x5bngy MToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBMeW54T1MgMi4xIHdpdGgg VENQL0lQJworCSQoTUFLRSkga2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0g Z2NjIiAiQ0MyID0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLURTRVRSRVVJRCAtRFRDUFNPQ0tFVCAt RENLX0FOU0lDIC1EQlNENCAtRExZTlhPUyIgXAorCSJMSUJTID0gLWxic2QiCisKKyNTQ08gWGVu aXggMi4yLjEgZm9yIElCTSBQQywgWFQsIFBTMi8zMCwgb3Igb3RoZXIgODA4OCBvciA4MDg2IG1h Y2hpbmUKKyNTaG91bGQgdGhpcyBub3Qgd29yaywgdHJ5IHNvbWUgb2YgdGhlIHRyaWNrcyBmcm9t IHNjbzI4Ni4KKyNOT1RFOiAtRFJFTkFNRSBpcyBvbWl0dGVkIGZvciBlYXJseSBTQ08gWGVuaXgg cmVsZWFzZXMgYmVjYXVzZSBpdCBkaWRuJ3QKKyNleGlzdCwgb3IgaXRzIHNlbWFudGljcyB3ZXJl IGRpZmZlcmVudCBmcm9tIHRoZSBsYXRlciBQT1NJWC1jb21wbGlhbnQKKyN2ZXJzaW9uIG9mIHJl bmFtZSgpLgorc2NvODY6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NP IFhlbml4Lzg2Li4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDRkxBR1M9IC1EWEVOSVggLUROT0ZJTEVIIC1ETk9JS1NEIC1ETk9VTklDT0RFIC1ETk9M RUFSTiBcCisJJChLRkxBR1MpIC1EdW5peCAtRiAzMDAwIC1pIC1NMG1lIiBcCisJIkxOS0ZMQUdT ID0gLUYgMzAwMCAtaSAtcyAtTTBtZSIgIkxJQlMgPSAtbHgiCisKKyNTQ08gWGVuaXgvMjg2IDIu Mi4xLCBlLmcuIGZvciBJQk0gUEMvQVQsIFBTLzIgTW9kZWwgNTAsIGV0Yy4KKyNSZXBvcnRlZGx5 LCB0aGlzICJtYWtlIiBjYW4gZmFpbCBzaW1wbHkgYmVjYXVzZSBvZiB0aGUgc2l6ZSBvZiB0aGlz CisjbWFrZWZpbGUuICBJZiB0aGF0IGhhcHBlbnMsIHVzZSAibWFrZUwiLCBvciBlZGl0IG91dCBz b21lIG9mIHRoZQorI290aGVyIGVudHJpZXMuICBObyBkZWJ1Z2dpbmcgb3IgY2hhcmFjdGVyLXNl dCB0cmFuc2xhdGlvbi4KK3NjbzI4NjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBTQ08gWGVuaXgvMjg2Li4uJworCUBlY2hvICdJZiBtYWtlIGZhaWxzLCB0cnkgdXNpbmcg bWFrZUwuJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJD RkxBR1M9IC14ZW5peCAtcyAtTyAtTEFSR0UgLURYRU5JWCAtRE5PRklMRUggLUR1bml4IC1EUkRD SEsgLUROQVAgXAorCS1ETk9JS1NEIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PQ1NFVFMgLUROT0xF QVJOIFwKKwkkKEtGTEFHUykgLUYgMzAwMCAtaSAtTTJsZXQxNiIgXAorCSJMSUJTID0gLWx4IiAi TE5LRkxBR1MgPSAteGVuaXggLXMgLU8gLUxBUkdFIC1GIDMwMDAgLWkgLU0ybGV0MTYiCisKKyNT Q08gWGVuaXgvMjg2IDIuMi4xLCBlLmcuIGZvciBJQk0gUEMvQVQsIFBTLzIgTW9kZWwgNTAsIGV0 Yy4KKyNBcyBhYm92ZSwgYnV0IHdpdGggSERCVVVDUCAoVGhpcyBvbmUgbWlnaHQgbmVlZCBmaXhp bmcgLS0gc2VlIHNjbzI4NikuCitzY28yODZoZGI6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgU0NPIFhlbml4LzI4NiB3aXRoIEhEQiBVVUNQLi4uJworCUBlY2hvICdJZiBt YWtlIGZhaWxzLCB0cnkgdXNpbmcgbWFrZUwuJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7 S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1zIC1PIC1MQVJHRSAtRFhFTklYIC1ETk9GSUxF SCAtRHVuaXggLURSRENISyAtRE5BUCBcCisJLURIREJVVUNQIC1ETk9JS1NEIC1ETk9VTklDT0RF IC1ETk9MRUFSTiBcCisJJChLRkxBR1MpIC1GIDMwMDAgLWkgLU0ybGV0MzIiIFwKKwkiTElCUyA9 IC1seCIgIkxOS0ZMQUdTID0gLXMgLU8gLUxBUkdFIC1GIDMwMDAgLWkgLU0ybGV0MzIiCisKKyNT Q08gWGVuaXgvMzg2IDIuMi4yIGFuZCAyLjIuMworc2NvMzg2OgorCUBlY2hvICdNYWtpbmcgQy1L ZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBYZW5peC8zODYgMi4yLjIuLi4nCisJJChNQUtFKSB3ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURYRU5JWCAtRE5PRklM RUggLUROT0lLU0QgLUROT1JFRElSRUNUIC1ETk9MRUFSTiBcCisJLUR1bml4IC1EUkRDSEsgLURO QVAgLUROT1VOSUNPREUgJChLRkxBR1MpIC1PdGNsIC1NM2UiIFwKKwkiTE5LRkxBR1MgPSAtcyIg IkxJQlMgPSAtbHgiCisKKyNTQ08gWEVOSVgvMzg2IDIuMi4zIHdpdGggRXhjZWxhbiBUQ1AvSVAg KyBjdXJzZXMuCisjIE5PVEU6IFRoaXMgb25lIG1pZ2h0IG5lZWQgc29tZSB3b3JrIGluIEMtS2Vy bWl0IDYuMC4KKyMgWW91IG1pZ2h0IG5lZWQgdG8gaW5jbHVkZSAvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgKKyMgY29udGFpbmluZyAidHlwZWRlZiBjaGFyICpjYWRkcl90OyIuICBUaGVuIGF0IGxl YXN0IGl0IGNvbXBpbGVzLgorc2NvMzg2bmV0YzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBTQ08gWGVuaXgvMzg2IDIuMi4zICsgRXhjZWxhbiBUQ1AnCisJJChNQUtFKSB3 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLUkvdXNyL2luY2x1 ZGUvZXhvcyAtRFhFTklYIC1EQ0tfQ1VSU0VTIC1ETk9VTklDT0RFIFwKKwktRHVuaXggLURSRENI SyAtRE5BUCAtRFRDUFNPQ0tFVCAtREVYQ0VMQU4gLUROT0pDIC1ETk9NS0RJUiAtRE5PRklMRUgg XAorCS1ETk9MRUFSTiAtRE5PUkVESVJFQ1QgLUROT0lLU0QgLUROT19ETlNfU1JWICQoS0ZMQUdT KSAtT3RjbCAtTTNlIiBcCisJIkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxjIC1seCAtbHNvY2tl dCAtbGN1cnNlcyAtbHRlcm1jYXAiCisKKyNTQ08gWEVOSVgvMzg2IDIuMy4zIHdpdGggZ2NjIDEu Mzcgb3IgbGF0ZXIuLi4KK3NjbzM4NmdjYzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBTQ08gWGVuaXgvMzg2IDIuMy4zLCBnY2MuLi4nCisJQGVjaG8gJ0FkZCAtRF9OT19Q Uk9UT1RZUEUgaWYgeW91IGhhdmUgdHJvdWJsZSB3aXRoIFhlbml4IGhlYWRlciBmaWxlcycKKwkk KE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIgIkNDMiA9 IGdjYyIgXAorCSJDRkxBR1M9IC1PIC1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAtREhEQlVVQ1Ag LURSRENISyAtRE5BUCBcCisJLUROT0pDIC1ETk9ERUJVRyAtRE5PVU5JQ09ERSAtRE5PTEVBUk4g JChLRkxBR1MpIFwKKwktdHJhZGl0aW9uYWwgLWZwY2Mtc3RydWN0LXJldHVybiAtZnN0cmVuZ3Ro LXJlZHVjZSBcCisJLURNX0JJVEZJRUxEUyAtRE1fQ09GRiAtRE1fSTM4NiAtRE1fSTg2IC1ETV9J ODZTTSBcCisJLURNX0lOVEVSTkFUIC1ETV9TREFUQSAtRE1fU1RFWFQgLURNX1NZUzMgLURNX1NZ UzUgXAorCS1ETV9TWVNJSUkgLURNX1NZU1YgLURNX1dPUkRTV0FQIC1ETV9YRU5JWCAtRE5PSUtT RCAtRE5PUkVESVJFQ1QgXAorCS1EUFdJRF9UPWludCAiICJMTktGTEFHUyA9IC1zIiAiTElCUyA9 IC1seCIKKworI0FzIGFib3ZlLCBidXQgd2l0aCBjdXJzZXMuLi4KK3NjbzM4NmdjY2M6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhlbml4LzM4NiAyLjMuMywgZ2Nj Li4uJworCUBlY2hvICdBZGQgLURfTk9fUFJPVE9UWVBFIGlmIHlvdSBoYXZlIHRyb3VibGUgd2l0 aCBYZW5peCBoZWFkZXIgZmlsZXMnCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSAiQ0MgPSBnY2MiICJDQzIgPSBnY2MiIFwKKwkiQ0ZMQUdTPSAtTyAtRFhFTklYIC1E U1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgXAorCS1ETk9KQyAtRE5PREVC VUcgLURDS19DVVJTRVMgLUROT1VOSUNPREUgLUROT0xFQVJOICQoS0ZMQUdTKSBcCisJLXRyYWRp dGlvbmFsIC1mcGNjLXN0cnVjdC1yZXR1cm4gLWZzdHJlbmd0aC1yZWR1Y2UgXAorCS1ETV9CSVRG SUVMRFMgLURNX0NPRkYgLURNX0kzODYgLURNX0k4NiAtRE1fSTg2U00gLUROT1JFRElSRUNUIFwK KwktRE1fSU5URVJOQVQgLURNX1NEQVRBIC1ETV9TVEVYVCAtRE1fU1lTMyAtRE1fU1lTNSBcCisJ LURNX1NZU0lJSSAtRE1fU1lTViAtRE1fV09SRFNXQVAgLURNX1hFTklYIC1ETk9JS1NEIFwKKwkt RFBXSURfVD1pbnQgIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbHggLWxjdXJzZXMgLWx0ZXJt bGliIgorCisjU0NPIFVOSVggKGFuZCBPRFQpIGVudHJpZXMuLi4KKyMKKyNOT1RFOiBBbGwgU0NP IFVOSVggZW50cnkgTElCUyBzaG91bGQgaGF2ZSAiLWxjX3MgLWxjIC1seCIgSU4gVEhBVCBPUkRF UiAoaWYKKyNzaGFyZWQgQyBsaWJyYXJ5IGlzIGRlc2lyZWQpLCBvciBlbHNlICItbGMgLWx4IiBJ TiBUSEFUIE9SREVSLiAgVXNlIHNoYXJlZCBDCisjbGlicmFyaWVzIHRvIHNhdmUgbWVtb3J5LCBi dXQgdGhlbiBkb24ndCBleHBlY3QgdG8gcnVuIHRoZSByZXN1bHRpbmcgYmluYXJ5Cisjb24gYSBk aWZmZXJlbnQgbWFjaGluZS4gIFdoZW4gdXNpbmcgLWxjX3MsIHlvdSBtdXN0IGFsc28gdXNlIC1s YywgYmVjYXVzZSB0aGUKKyNzaGFyZWQgQyBsaWJyYXJ5IGRvZXMgbm90IGNvbnRhaW4gYWxsIG9m IGxpYmMuYS4gIEFuZCBpbiBhbGwgY2FzZXMsIC1sYyBtdXN0CisjQUxXQVlTIHByZWNlZGUgLWx4 LgorIworI0FOT1RIRVIgTk9URTogLURSRU5BTUUgaXMgaW5jbHVkZWQgaW4gYWxsIFNDTyBVTklY IGVudHJpZXMuICBSZW1vdmUgaXQgaWYgaXQKKyNjYXVzZXMgdHJvdWJsZS4gIE5vIGhhcm0gaXMg ZG9uZSBieSByZW1vdmluZyBpdCAoc2VlIGNrdWlucy50eHQpLgorIworI0FORCBBTk9USEVSOiBJ biB0aGVvcnksIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBydW4gU0NPIFVOSVggYmluYXJpZXMg b24KKyNTQ08gWGVuaXggMi4zIGFuZCBsYXRlci4gIEluIHByYWN0aWNlLCB0aGlzIG1pZ2h0IG5v dCB3b3JrIGJlY2F1c2Ugb2YgdGhlCisjbGlicmFyaWVzLCBldGMuICBBbHNvLCBkb24ndCBhZGQg dGhlIC1saW5rIC16IHN3aXRjaCAod2hpY2ggaXMgc3VwcG9zZWQgdG8KKyNyb290IG91dCByZWZl cmVuY2VzIHRvIG51bGwgcG9pbnRlcnMpIGJlY2F1c2UgaXQgbWFrZXMgVU5JWCBiaW5hcmllcyBj b3JlCisjZHVtcCB3aGVuIHRoZXkgYXJlIHJ1biB1bmRlciBYZW5peC4KKworI05PVEU6IC1PdGNs IHJlbW92ZWQgYW5kIHJlcGxhY2VkIGJ5IC1PLCBzaW5jZSAtT3RjbCBwcm9kdWNlZCBpbmNvcnJl Y3QgY29kZS4KKyNTQ08gVU5JWC8zODYgMy4yLjAsIDMuMi4xLCBhbmQgU0NPIFhlbml4IDIuMy54 CitzY28zcjI6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgv Mzg2IDMuMi4wIG9yIDMuMi4xIC4uLicKKwlAZWNobyAnV2FybmluZzogSWYgbWFrZSBibG93cyB1 cCwgZWRpdCB0aGUgbWFrZWZpbGUgdG8gam9pbicKKwlAZWNobyAndGhlIGZvbGxvd2luZyB0aHJl ZSBjb250aW51ZWQgbGluZXMgaW50byBvbmUgbGluZS4nCisJQGVjaG8gJ0Fsc28sIHJlbW92ZSAt RFJFTkFNRSBpZiBfcmVuYW1lIHVucmVzb2x2ZWQgYXQgbGluayB0aW1lLicKKwkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFhFTklYIC1EU1ZS MyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgLUROT0xFQVJOIFwKKwktRFJFTkFN RSAtRE5PSUtTRCAtRE5PSkMgJChLRkxBR1MpIC1PIiBcCisJIkxOS0ZMQUdTID0gLXMiICJMSUJT ID0gLWxjIC1seCIKKworI1NDTyBVTklYLzM4NiAzLjIuMCBhbmQgU0NPIFhlbml4IDIuMy54IHdp dGggRXhjZWxhbiBUQ1AvSVAgc3VwcG9ydC4KKyNJbiBjYXNlIG9mIGNvbXBpbGF0aW9uIG9yIHJ1 bnRpbWUgcHJvYmxlbXMsIHRyeSBhZGRpbmcKKyMiLURVSURfVD1pbnQgLURHSURfVD1pbnQiIHRv IHRoZSBDRkxBR1MuICBJZiB0aGF0IGRvZXNuJ3Qgd29yaywgdHJ5CisjIi1EVUlEX1Q9dWlkX3Qg LURHSURfVD1naWRfdCIuCitzY28zcjJuZXQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgU0NPIFVOSVgvMzg2IC8gRXhjZWxhbi4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFS R0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtSS91c3IvaW5jbHVkZS9leG9zIC1E WEVOSVggLURTVlIzIC1ETk9GSUxFSCAtRE5PTEVBUk4gXAorCS1ESERCVVVDUCAtRFJEQ0hLIC1E TkFQIC1EUkVOQU1FIC1EVENQU09DS0VUIC1ERVhDRUxBTiAtRE5PSkMgXAorCS1ETk9JS1NEIC1E Tk9SRURJUkVDVCAkKEtGTEFHUykgLU8iIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGMg LWx4IC1sc29ja2V0IgorCisjU0NPIFVOSVgvMzg2IDMuMi4wIGFuZCBTQ08gWGVuaXggMi4zLngg d2l0aCBFeGNlbGFuIFRDUC9JUCBzdXBwb3J0LgorI0FzIGFib3ZlLCB3aXRoIGN1cnNlcyBhZGRl ZC4KK3NjbzNyMm5ldGM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NP IFVOSVgvMzg2IC8gRXhjZWxhbiAvIGN1cnNlcy4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VU PSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtSS91c3IvaW5jbHVkZS9leG9zIC1EWEVO SVggLURTVlIzIC1ETk9GSUxFSCAtRE5PTEVBUk4gXAorCS1ESERCVVVDUCAtRFJEQ0hLIC1ETkFQ IC1EVENQU09DS0VUIC1ERVhDRUxBTiAtRE5PSkMgJChLRkxBR1MpIFwKKwktRFJFTkFNRSAtRENL X0NVUlNFUyAtRE5PUkVESVJFQ1QgLUROT0lLU0QgLU8iICJMTktGTEFHUyA9IC1zIiBcCisJIkxJ QlMgPSAtbGMgLWx4IC1sc29ja2V0IC1sY3Vyc2VzIC1sdGVybWNhcCIKKworI1NDTyBVTklYIDMu Mi54IG9yIFNDTyBYZW5peCAyLjMueCB3aXRoIFJhY2FsIEludGVyTGFuIFRDUC9JUCBzdXBwb3J0 CisjIEV4dHJhIGNvbXBpbGUgZmxhZ3MgZm9yIG90aGVyIHZlcnNpb24gb2YgUmFjYWwgSW50ZXJM YW4gVENQL0lQOgorIyBYZW5peDI4Ni9OUDYyMS0yODYsIHVzZSAtTWwgLURQQVJBTUggLURJTlRF UkxBTiAtRGkyODYgLURTWVNWCisjIFhlbml4Mzg2L05QNjIxLTM4NiwgdXNlIC1EUEFSQU1IIC1E SU5URVJMQU4gLURpMzg2IC1EU1lTVgorIyBJU0MzODZpeC9OUDYyMkksIHVzZSAtRFNZU1YgLURp Mzg2CisjIFNDTyBVbml4My4yL05QNjIyUywgdXNlIC1EU1lTViAtRGkzODYgLURTQ09fVU5JWAor IyBBVCZUIFNWUjMuMi9OUDYyMkEsIHVzZSAtRFNZU1YgLURpMzg2IC1EQVRUCitzY28zcjJuZXRy aToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYgLyBS YWNhbCBJbnRlckxhbi4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQo QCl9IFwKKwkiQ0ZMQUdTPSAtSS91c3IvaW5jbHVkZS9pbnRlcmxhbiAtRFhFTklYIC1ETk9GSUxF SCAtREhEQlVVQ1AgXAorCS1EU1ZSMyAtRFJEQ0hLIC1ETkFQIC1EVENQU09DS0VUIC1EUEFSQU1I IC1ESU5URVJMQU4gLURpMzg2IC1EU1lTViBcCisJLURSRU5BTUUgLUROT1JFRElSRUNUIC1ETk9J S1NEIC1ETk9KQyAtRE5PTEVBUk4gJChLRkxBR1MpIC1PdGNsIC1NM2UiIFwKKwkiTE5LRkxBR1Mg PSAtcyIgIkxJQlMgPSAtbGMgLWx4IC1sdGNwIgorCisjIFNDTyBYRU5JWC8zODYgMi4zLjMgU3lz ViB3aXRoIFNDTyBUQ1AvSVAKKyMgU3lzdGVtIFYgU1RSRUFNUyBUQ1AgZGV2ZWxvcGVkIGJ5IExh Y2htYW4gQXNzb2NpYXRlcyBJbmMgYW5kCisjIENvbnZlcmdlbnQgVGVjaG5vbG9naWVzLgorIyAt RFJFTkFNRSByZW1vdmVkIHNpbmNlIHNvbWUgcmVwb3J0cyBpbmRpY2F0ZSBpdCBpcyBub3Qgc3Vw cG9ydGVkCisjICh3aGVyZWFzIG90aGVycyBzYXkgaXQgaXMuKQorc2NvM3IybGFpOgorCUBlY2hv ICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBYRU5JWC8zODYgMi4zLjMgKyBUQ1Av SVAuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNG TEFHUz0gLURMQUlfVENQIC1EaTM4NiAtRFhFTklYIC1EU1ZSMyAtRE5PRklMRUggLURIREJVVUNQ IC1EUkRDSEsgXAorCS1ETkFQIC1EVENQU09DS0VUIC1EUFdJRF9UPWludCAtRE5PUkVESVJFQ1Qg LUROT0lLU0QgLUROT0xFQVJOIFwKKwkkKEtGTEFHUykgLU90Y2wgLWkgLU0zZSIgXAorCSJMTktG TEFHUyA9IC1pIC1zIiAiTElCUyA9IC1sYyAtbHggLWxzb2NrZXQiCisKK3NjbzNyMmxhaWM6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhFTklYLzM4NiAyLjMuMyAr IFRDUC9JUC4uLicKKwkkKE1BS0UpIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0ZMQUdTPSAtRExBSV9UQ1AgLURpMzg2IC1EWEVOSVggLURTVlIzIC1ETk9GSUxFSCAtREhE QlVVQ1AgLURSRENISyBcCisJLUROQVAgLURUQ1BTT0NLRVQgLURDS19BTlNJQyAtRENLX0NVUlNF UyAtRE1fVEVSTUlORk8gLUROT0xFQVJOIFwKKwktRFBXSURfVD1pbnQgLUROT1JFRElSRUNUIC1E Tk9JS1NEICQoS0ZMQUdTKSAtT3RjbCAtaSAtTTNlIiBcCisJIkxOS0ZMQUdTID0gLWkgLXMiICJM SUJTID0gLWx0aW5mbyAtbGMgLWx4IC1sc29ja2V0IgorCisjU0NPIFVOSVgvMzg2IDMuMnYyIChQ T1NJWCBqb2IgY29udHJvbCksIHNoYXJlZCBsaWJyYXJpZXMuCitzY28zcjIyOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBVTklYLzM4NiAzLjJ2MiAuLi4nCisJbWFr ZSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURYRU5JWCAt RFNWUjMgLUROT0ZJTEVIIC1ESERCVVVDUCAtRFJEQ0hLIC1ETk9MRUFSTiBcCisJLUROQVAgLURS RU5BTUUgLURQSURfVD1waWRfdCAtRFBXSURfVD1pbnQgLURESVJFTlQgLUROT0lLU0QgXAorCS1E Tk9SRURJUkVDVCAkKEtGTEFHUykgLU8iIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGNf cyAtbGMgLWx4IgorCisjU0NPIFVOSVgvMzg2IDMuMnYyLCBQT1NJWCBqb2IgY29udHJvbCwgZnVs bHNjcmVlbiBmaWxlIHRyYW5zZmVyIGRpc3BsYXksCisjZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlv biwgc2hhcmVkIEMgbGlicmFyeQorc2NvM3IyMmM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnYyIC4uLicKKwlAZWNobyAnV2FybmluZzogSWYg bWFrZSBibG93cyB1cCwgZWRpdCB0aGUgbWFrZWZpbGUgdG8gam9pbicKKwlAZWNobyAndGhlIGZv bGxvd2luZyBmb3VyIGNvbnRpbnVlZCBsaW5lcyBpbnRvIG9uZSBsaW5lLicKKwltYWtlIHdlcm1p dCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFhFTklYIC1EU1ZSMyAt RE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgLUROT0xFQVJOIFwKKwktRENLX0NVUlNF UyAtRERJUkVOVCAtRFJFTkFNRSAtRE5PUkVESVJFQ1QgLUROT0lLU0QgXAorCS1EUElEX1Q9cGlk X3QgLURQV0lEX1Q9aW50ICQoS0ZMQUdTKSAtTyIgXAorCSJMTktGTEFHUyA9IC1zIiAiTElCUyA9 IC1sY3Vyc2VzIC1sY19zIC1sYyAtbHgiCisKKyNTQ08gVU5JWC8zODYgMy4ydjIgd2l0aCBnY2Mg MS40MCBvciBsYXRlciAoUE9TSVggam9iIGNvbnRyb2wpCitzY28zcjIyZ2NjOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNDTyBVTklYLzM4NiAzLjJ2MiwgZ2NjJworCUBl Y2hvICdXYXJuaW5nOiBJZiBtYWtlIGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtlZmlsZSB0byBqb2lu JworCUBlY2hvICd0aGUgZm9sbG93aW5nIHNldmVuIGNvbnRpbnVlZCBsaW5lcyBpbnRvIG9uZSBs aW5lLicKKwltYWtlIHdlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDQyA9IGdjYyIg XAorCSJDRkxBR1M9IC1PIC1EUE9TSVggLURYRU5JWCAtRFNWUjMgLUROT0ZJTEVIIC1ESERCVVVD UCAtRFJEQ0hLIC1ETkFQIFwKKwktRE5PTEVBUk4gLURSRU5BTUUgLXRyYWRpdGlvbmFsIC1mcGNj LXN0cnVjdC1yZXR1cm4gLWZzdHJlbmd0aC1yZWR1Y2UgXAorCS1ETV9CSVRGSUVMRFMgLURNX0NP RkYgLURNX0kzODYgLURNX0k4NiAtRE1fSTg2U00gXAorCS1ETV9JTlRFUk5BVCAtRE1fU0RBVEEg LURNX1NURVhUIC1ETV9TWVMzIC1ETV9TWVM1IFwKKwktRE1fU1lTSUlJIC1ETV9TWVNWIC1ETV9V TklYIC1ETV9XT1JEU1dBUCAtRE1fWEVOSVggLUR1bml4IFwKKwktRFBJRF9UPXBpZF90IC1EUFdJ RF9UPWludCAtRE5PUkVESVJFQ1QgLUROT0lLU0QgJChLRkxBR1MpICIgXAorCSJMTktGTEFHUyA9 IC1zIiAiTElCUyA9IC1sY19zIC1sYyAtbHgiCisKKyNTQ08gVU5JWC8zODYgMy4ydjIgKE9EVCAx LjEpIChQT1NJWCBqb2IgY29udHJvbCkgd2l0aCBTQ08gVENQL0lQLCBzaGFyZWQgbGlicworI1Jl cXVpcmVzIFNDTyBUQ1AvSVAgb3IgT0RUIGRldmVsb3BtZW50IHN5c3RlbSBmb3IgdGVsbmV0Lmgs IGV0Yy4KK3NjbzNyMjJuZXQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig U0NPIFVOSVgvMzg2IDMuMi4yICsgVENQL0lQLi4uJworCUBlY2hvICdXYXJuaW5nOiBJZiBtYWtl IGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtlZmlsZSB0byBqb2luJworCUBlY2hvICd0aGUgZm9sbG93 aW5nIHRocmVlIGNvbnRpbnVlZCBsaW5lcyBpbnRvIG9uZSBsaW5lLicKKwltYWtlIHhlcm1pdCBL VEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTPSAtRFhFTklYIC1EU1ZSMyAtRE5P RklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgLURUQ1BTT0NLRVQgXAorCS1EUkVOQU1FIC1E UElEX1Q9cGlkX3QgLURQV0lEX1Q9aW50IC1ERElSRU5UIC1ETk9SRURJUkVDVCAtRE5PSUtTRCBc CisJJChLRkxBR1MpIC1PIiAiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbHNvY2tldCAtbGNfcyAt bGMgLWx4IgorCisjQXMgYWJvdmUsIGJ1dCB3aXRoIGN1cnNlcyBmb3IgZnVsbHNjcmVlbiBmaWxl IHRyYW5zZmVyIGRpc3BsYXkuCisjUmVxdWlyZXMgU0NPIFRDUC9JUCBvciBPRFQgZGV2ZWxvcG1l bnQgc3lzdGVtIGZvciB0ZWxuZXQuaCwgZXRjLgorc2NvM3IyMm5ldGM6CisJQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnYyICsgVENQL0lQLi4uJwor CUBlY2hvICdXYXJuaW5nOiBJZiBtYWtlIGJsb3dzIHVwLCBlZGl0IHRoZSBtYWtlZmlsZSB0byBq b2luJworCUBlY2hvICd0aGUgZm9sbG93aW5nIHRocmVlIGNvbnRpbnVlZCBsaW5lcyBpbnRvIG9u ZSBsaW5lLicKKwltYWtlIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9ICJDRkxBR1M9 IFwKKwktRFhFTklYIC1EU1ZSMyAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROQVAgLURU Q1BTT0NLRVQgLURSRU5BTUUgXAorCS1EQ0tfQ1VSU0VTIC1ERElSRU5UIC1ETk9JS1NEIC1ETk9S RURJUkVDVCBcCisJLURQSURfVD1waWRfdCAtRFBXSURfVD1pbnQgLU8gJChLRkxBR1MpIiBcCisJ IkxOS0ZMQUdTID0gLXMiICJMSUJTID0gLWxjdXJzZXMgLWxzb2NrZXQgLWxjX3MgLWxjIC1seCIK KworI1NDTyBYRU5JWCAyLjMuNCwgbm8gY3Vyc2VzLCBubyBUQ1AvSVAsIG5vIElLU0QuCisjVGhp cyBvbmUgYnVpbHQgYW5kIHRlc3RlZCBpbiBDLUtlcm1pdCA3LjAuCisjbGNmcCBpcyBDIGxpYnJh cnkgZmxvYXRpbmctcG9pbnQgc3VwcG9ydC4KKyNVc2UgLU0zIHRvIGdlbmVyYXRlIDMyLWJpdCBp Mzg2IGNvZGUgaW5zdGVhZCBvZiAxNi1iaXQgc2VnbWVudGVkIGkyODYgY29kZS4KKyNVc2UgLU1l IHRvIGVuYWJsZSBNUyBub25zdGFuZGFyZCBrZXl3b3JkcyBpbiBzeXN0ZW0gaGVhZGVycy4KKyNV c2UgLVcyIG9yIFczIHRvIGluY3JlYXNlIHRoZSB3YXJuaW5nIGxldmVsLgorI09LOiAyMDExLzA2 LzE1CitzY28yMzQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhF TklYIDIuMy40Li4uJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0g XAorCSJDRkxBR1M9IC1EU0NPMzIgLURYRU5JWCAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsg LUROT0xFQVJOIFwKKwktRE5BUCAtRE5PSkMgLUROT0NPVEZNQyAtRE5PSUtTRCAtRE5PUkVESVJF Q1QgLUROT1ROQ09ERSAtRE5PR0ZUSU1FUiBcCisJLUROT1RJTUVWQUwgLUROT1RJTUVaT05FIC1E Tk9TWU1MSU5LIC1EU0NPMjM0IC1ERENMR0VUQ1dEICQoS0ZMQUdTKSBcCisJLU90Y2wiICJMTktG TEFHUyA9IC1zIiAiTElCUyA9IC1sY2ZwIC1sYyAtbHgiCisKKyNTQ08gWEVOSVggMi4zLjQsIG5v IFRDUC9JUCwgbm8gSUtTRCwgYnV0IHdpdGggY3Vyc2VzLgorIyBCdWlsdCBhbmQgdGVzdGVkIGlu IEMtS2VybWl0IDcuMC4KKyMgTm90ZTogWEVOSVggMi4zLjQgZG9lcyBub3QgaGF2ZSBuZXd0ZXJt KCkgc28gbm8gcG9pbnQgaW4gYWRkaW5nIC1EQ0tfTkVXVEVSTS4KK3NjbzIzNGM6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFhFTklYIDIuMy40ICsgY3Vyc2VzLi4u JworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9 IC1EU0NPMzIgLURYRU5JWCAtRE5PRklMRUggLURIREJVVUNQIC1EUkRDSEsgLUROT0xFQVJOIFwK KwktRE5BUCAtRE5PSkMgLUROT0NPVEZNQyAtRE5PSUtTRCAtRE5PUkVESVJFQ1QgLUROT1ROQ09E RSAtRE5PR0ZUSU1FUiBcCisJLUROT1RJTUVWQUwgLUROT1RJTUVaT05FIC1ETk9TWU1MSU5LIC1E Q0tfQ1VSU0VTIC1EU0NPMjM0IFwKKwktRERDTEdFVENXRCAkKEtGTEFHUykgLU90Y2wiIFwKKwki TE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGNmcCAtbGMgLWx0aW5mbyAtbHgiCisKKyNTQ08gWEVO SVggMi4zLjQgd2l0aCBTQ08gVENQL0lQIGFuZCBjdXJzZXMsIG5vIElLU0QuCisjIEJ1aWx0IGFu ZCB0ZXN0ZWQgaW4gQy1LZXJtaXQgNy4wLiAgVENQL0lQIHdvcmtzIGFuZCBjdXJzZXMgd29ya3Mu CisjIFByZXZpb3VzIHZlcnNpb25zIG9mIHRoaXMgdGFyZ2V0IGluY2x1ZGVkIC1sbWFsbG9jLCBi dXQgdGhpcyBjYXVzZWQgImVycm9yOgorIyAiIF9jYWxsb2MgOiBzeW1ib2wgZGVmaW5lZCBtb3Jl IHRoYW4gb25jZSIgYXQgbGluayB0aW1lIHNvIEkgcmVtb3ZlZCBpdC4KKyMgUmVzdWx0cyBhcmUg bGlrZWx5IHRvIHZhcnkgZGVwZW5kaW5nIG9uIGV4YWN0bHkgd2hpY2ggdmVyc2lvbiBvZiB0aGUg U0RLCisjIGFuZCBUQ1AvSVAgU0RLIHlvdSBoYXZlLgorc2NvMjM0bmV0YzoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gWEVOSVggMi4zLjQgKyBUQ1AgKyBjdXJzZXMu Li4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH Uz0gLURTQ08zMiAtRFhFTklYIC1ETk9GSUxFSCAtREhEQlVVQ1AgLURSRENISyAtRE5PTEVBUk4g XAorCS1ETkFQIC1ETk9KQyAtRE5PQ09URk1DIC1ETk9JS1NEIC1ETk9SRURJUkVDVCAtRE5PVE5D T0RFIC1ETk9HRlRJTUVSIFwKKwktRE5PVElNRVZBTCAtRE5PVElNRVpPTkUgLUROT1NZTUxJTksg LURDS19DVVJTRVMgLURTQ08yMzQgXAorCS1ERENMR0VUQ1dEIC1EVENQU09DS0VUIC1ETk9fRE5T X1NSViAkKEtGTEFHUykgLU90Y2wiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbHRpbmZv IC1sc29ja2V0IC1sY2ZwIC1sYyAtbHgiCisKKyMgU0NPIDMuMnY0LnggdGFyZ2V0cy4uLgorCisj ICBOT1RFOiBBZGQgLUREQ0xQT1BFTiBhbmQvb3IgLUREQ0xGRE9QRU4gdG8gYW55U0NPIDMuMnY0 Lnggbm9uLWdjYyBlbnRyaWVzCisjICB0aGF0IGNvbXBsYWluIGFib3V0IGZkb3BlbigpIG9yIHBv cGVuKCkgYXQgY29tcGlsZSB0aW1lLiAgVGhleSBjb21waWxlIE9LCisjICB3aXRob3V0IHRoZXNl IGZsYWdzIGFzIG9mIEp1bHkgMTk5OS4gIEhvd2V2ZXIsIHRoZSBnY2MgZW50cmllcyBzZWVtIHRv CisjICBuZWVkIHRoZW0sIGF0IGxlYXN0IGZvciBnY2MgMi43LjIuMi4KKworIyAgTk9URSAyOiBU byBlbmFibGUgSUtTRCBzdXBwb3J0LCBhZGQ6CisjICAtRENLX0xPR0lOIC1ETk9HRVRVU0VSU0hF TEwgLUROT0lOSVRHUk9VUFMKKyMgIHRvIENGTEFHUyAobm90IHRlc3RlZCkuCisKKyNTQ08gVU5J WC8zODYgMy4ydjQgKFBPU0lYIGpvYiBjb250cm9sKSwgY3Vyc2VzLCBBTlNJIEMgY29tcGlsYXRp b24sCisjPGRpcmVudC5oPiAoRUFGUykgZmlsZSBzeXN0ZW0uICBSZW1vdmUgLWxtYWxsb2MgaWYg aXQgY2F1c2VzIHRyb3VibGUuICBJdCB3YXMKKyNwdXQgdGhlcmUgdG8gYXZvaWQgY29yZSBkdW1w cyBjYXVzZWQgYnkgcmVndWxhciBsaWJjLmEgbWFsbG9jLiAgQWRkIC1KIHRvIG1ha2UKKyNhbGwg Y2hhcnMgdW5zaWduZWQuICBUaGlzIHZlcnNpb24gdXNlcyBzZWxlY3QoKSBmb3IgQ09OTkVDVCBh bmQgYWxzbyBoYXMKKyNoaWdoLXByZWNpc2lvbiB0aW1lcnMgYW5kIHNvIG1pZ2h0IG5vdCB3b3Jr IG9uIG5vbi1UQ1Agc3lzdGVtcywgaW4gd2hpY2ggY2FzZQorI3NjbzMydjRucyBzaG91bGQgYmUg dXNlZCBpbnN0ZWFkLgorIyBJZiB5b3UgZ2V0IF9mdGltZSByZWRlZmluaXRpb25fIGNvbXBsYWlu dCwgdHJ5IGFkZGluZyAtRE9EVDMwIHRvIENGTEFHUy4KK3NjbzMydjQ6CisJQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnY0Li4uJworCW1ha2UgeGVy bWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQ0tfU0NPMzJWNCAt RE5PRklMRUggLURIREJVVUNQIC1EQ0tfQ1VSU0VTIC1ETV9URVJNSU5GTyBcCisJLUROT0FOU0kg LURTRUxFQ1QgLUROT0lLU0QgLUREQ0xHRVRDV0QgLU5PTFNUQVQgXAorCS1ETk9MSU5LQklUUyAt RERDTEdFVENXRCAkKEtGTEFHUykgLU8iIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1 cnNlcyAtbG1hbGxvYyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgorCisjIEFzIGFib3ZlLCBidXQg d2l0aCBubyBkZXBlbmRlbmNlIG9uIHNvY2tldHMgbGlicmFyeSBvciBzZWxlY3QoKS4KK3NjbzMy djRuczoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gVU5JWC8zODYg My4ydjQuLi4nCisJQGVjaG8gJ05vIHNlbGVjdCgpIGFuZCBubyBzb2NrZXRzIGxpYnJhcnkuJwor CW1ha2Ugd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EQ0tf U0NPMzJWNCAtRE5PRklMRUggLURIREJVVUNQIC1EQ0tfQ1VSU0VTIC1ETV9URVJNSU5GTyBcCisJ LUROT0FOU0kgLUROT0lLU0QgLUROT0dGVElNRVIgLURDS19QT0xMIC1ETkFQIC1ERENMR0VUQ1dE IC1ETk9MU1RBVCBcCisJLUROT0xJTktCSVRTIC1ERENMR0VUQ1dEIC1ETk9MRUFSTiAtTyAkKEtG TEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1cnNlcyAtbG1hbGxvYyAtbGNf cyAtbGMgLWx4IgorCisjU0NPIFVOSVgvMzg2IDMuMnY0IChQT1NJWCBqb2IgY29udHJvbCksIFRD UC9JUCwgY3Vyc2VzLCBBTlNJIEMgY29tcGlsYXRpb24sCisjPGRpcmVudC5oPiAoRUFGUykgZmls ZSBzeXN0ZW0uICBXaXRoIERJUkVOVCwgLWxjIG11c3QgY29tZSBiZWZvcmUgLWx4LgorI1JlcG9y dGVkbHkgaXQncyBPSyB0byBhZGQgLURDS19SRURJUiBhbmQgLURDS19XUkVGUkVTSCwgYW5kIHRv IHJlbW92ZSAtbGNfcy4KKyNSZXF1aXJlcyBTQ08gVENQL0lQIGRldmVsb3BtZW50IHN5c3RlbSBv ciBPRFQgZm9yIHRlbG5ldC5oLCBldGMuCisjU2VlIHNjbzMydjQgYWJvdmUgZm9yIGFkZGl0aW9u YWwgY29tbWVudHMuCisjTk9URTogTm8gbW9yZSByb29tIGZvciAtRHh4eCAtLSAyNSBzZWVtcyB0 byBiZSB0aGUgbGltaXQuICBNb3ZlIHNvbWUgdG8KKyNja2NkZWIuaCBvciBzb21ld2hlcmUuLi4K K3NjbzMydjRuZXQ6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIFVO SVgvMzg2IDMuMnY0Li4uJworCUBlY2hvICdJZiB5b3UgZ2V0IF9mdGltZSByZWRlZmluaXRpb25f IGNvbXBsYWludCwnCisJQGVjaG8gJ3VzZSBtYWtlIHNjby1vZHQzMC4nCisJJChNQUtFKSB4ZXJt aXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLUROT0ZJTEVIIC1ESERC VVVDUCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lDIC1EQ0tfQ1VSU0VTIFwKKwktRE5BUCAtRENLX1dS RUZSRVNIIC1ETk9MSU5LQklUUyAtRF9JQkNTMiAtRFNFTEVDVCAtRE5PTFNUQVQgXAorCS1ERENM R0VUQ1dEIC1EQ0tfU0NPMzJWNCAtRE5PSUtTRCAtTyBcCisJJChLRkxBR1MpIiAiTE5LRkxBR1Mg PSAkKExOS0ZMQUdTKSAtcyIgXAorCSJMSUJTID0gJChMSUJTKSAtbGN1cnNlcyAtbHNvY2tldCAt bG1hbGxvYyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgorCisjU0NPIFVOSVgvMzg2IDMuMnY0IHdp dGggZ2NjIDEuNDAgb3IgbGF0ZXIsIFBPU0lYIGpvYiBjb250cm9sLgorI0Fsc28gc2VlIGNvbW1l bnRzIGluIHNjbzMycjQgZW50cnkuCitzY28zMnY0Z2NjOgorCW1ha2UgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiBcCisJIkNGTEFHUz0gLU8gLUROT0ZJTEVIIC1E SERCVVVDUCAtRE5PQU5TSSAtRENLX0NVUlNFUyAtRE1fVEVSTUlORk8gXAorCS10cmFkaXRpb25h bCAtZnBjYy1zdHJ1Y3QtcmV0dXJuIC1mc3RyZW5ndGgtcmVkdWNlIC1mdW5zaWduZWQtY2hhciBc CisJLURfS1IgLURfTk9fUFJPVE9UWVBFIC1EX1NWSUQgLUROT0lLU0QgLURDS19TQ08zMlY0IC1E Tk9MSU5LQklUUyBcCisJLURNX0JJVEZJRUxEUyAtRE1fQ09GRiAtRE1fSTM4NiAtRE1fSTg2IC1E TV9JODZTTSAtRFNFTEVDVCAtRE5PTFNUQVQgXAorCS1ETV9JTlRFUk5BVCAtRE1fU0RBVEEgLURN X1NURVhUIC1ETV9TWVMzIC1ETV9TWVM1IC1ERENMR0VUQ1dEIFwKKwktRE1fU1lTSUlJIC1ETV9T WVNWIC1ETV9VTklYIC1ETV9XT1JEU1dBUCAtRE1fWEVOSVggLUR1bml4IFwKKwktRERDTFBPUEVO IC1ERENMRkRPUEVOICQoS0ZMQUdTKSAiIFwKKwkiTE5LRkxBR1MgPSAtcyIgIkxJQlMgPSAtbGN1 cnNlcyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgorCisjU0NPIFVOSVgvMzg2IDMuMnY0IChQT1NJ WCBqb2IgY29udHJvbCksIFRDUC9JUCwgY3Vyc2VzLCBBTlNJIEMgY29tcGlsYXRpb24sCisjUmVx dWlyZXMgU0NPIFRDUC9JUCBvciBPRFQgZGV2ZWxvcG1lbnQgc3lzdGVtIGZvciB0ZWxuZXQuaCwg ZXRjLgorIzxkaXJlbnQuaD4gKEVBRlMpIGZpbGUgc3lzdGVtLiAgV2l0aCBESVJFTlQsIC1sYyBt dXN0IGNvbWUgYmVmb3JlIC1seC4KKyNnY2MgMS40MCBvciBsYXRlci4gIEFsc28gc2VlIGNvbW1l bnRzIGluIHNjbzMycjQgZW50cnkuCitzY28zMnY0bmV0Z2NjOgorCW1ha2UgeGVybWl0IEtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gIkNDID0gZ2NjIiAiQ0MyPWdjYyIgXAorCSJDRkxBR1M9IC1P MiAtRE5PRklMRUggLURIREJVVUNQIC1EU0VMRUNUIC1ETk9MU1RBVCBcCisJLUROT0FOU0kgLURU Q1BTT0NLRVQgLURDS19DVVJTRVMgLURNX1RFUk1JTkZPIFwKKwktRF9LUiAtRF9OT19QUk9UT1RZ UEUgLURfU1ZJRCAtRE5PSUtTRCAtRENLX1NDTzMyVjQgLUROT0xJTktCSVRTIFwKKwktRE1fQklU RklFTERTIC1ETV9DT0ZGIC1ETV9JMzg2IC1ETV9JODYgLURNX0k4NlNNIC1ERENMR0VUQ1dEIFwK KwktRE1fSU5URVJOQVQgLURNX1NEQVRBIC1ETV9TVEVYVCAtRE1fU1lTMyAtRE1fU1lTNSBcCisJ LURNX1NZU0lJSSAtRE1fU1lTViAtRE1fVU5JWCAtRE1fV09SRFNXQVAgLURNX1hFTklYIC1EdW5p eCBcCisJLUREQ0xQT1BFTiAtRERDTEZET1BFTiAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAt cyIgIkxJQlMgPSAtbGN1cnNlcyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgorCisjQXMgYWJvdmUg YnV0IHdpdGggYmdjYyBCT1VORFMgQ0hFQ0tJTkcgKGZvciBkZXZlbG9wZXJzIG9ubHkpLiAgLWxj aGVjayBoYXMKKyNib3VuZHMtY2hlY2tpbmcgcmVwbGFjZW1lbnRzIGZvciBtYWxsb2MsIG1lbWNw eSwgYmNvcHksIGV0Yywgc28gbXVzdCBjb21lCisjYmVmb3JlIC1sc29ja2V0IGFuZCAtbGMuCitz Y28zMnY0bmV0YmdjYzoKKwltYWtlIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwK KwkiQ0MgPSBiZ2NjIC1waXBlIC1tMzg2IiAiQ0MyPWJnY2MgLXBpcGUgLW0zODYiIFwKKwkiQ0ZM QUdTPSAtTzEgLWcgLUROT0ZJTEVIIC1ESERCVVVDUCAtRFNFTEVDVCBcCisJLUROT0FOU0kgLURU Q1BTT0NLRVQgLURDS19DVVJTRVMgLURNX1RFUk1JTkZPIFwKKwktRF9LUiAtRF9OT19QUk9UT1RZ UEUgLURfU1ZJRCAtRE5PSUtTRCAtRENLX1NDTzMyVjQgLUROT0xTVEFUIFwKKwktRE1fQklURklF TERTIC1ETV9DT0ZGIC1ETV9JMzg2IC1ETV9JODYgLURNX0k4NlNNIC1ETk9MSU5LQklUUyBcCisJ LURNX0lOVEVSTkFUIC1ETV9TREFUQSAtRE1fU1RFWFQgLURNX1NZUzMgLURNX1NZUzUgLUREQ0xH RVRDV0QgXAorCS1ETV9TWVNJSUkgLURNX1NZU1YgLURNX1VOSVggLURNX1dPUkRTV0FQIC1ETV9Y RU5JWCAtRHVuaXggXAorCS1ERENMUE9QRU4gLUREQ0xGRE9QRU4gJChLRkxBR1MpICIgXAorCSJM TktGTEFHUyA9IC1nIiAiTElCUyA9IC1sY3Vyc2VzIC1sY2hlY2sgLWxzb2NrZXQgLWx4IgorCitz Y28zMnY0bmV0bmQ6CisJQGVjaG8gc2NvMzJ2NG5ldCB3aXRoIG5vIGRlYnVnCisJJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBzY28zMnY0bmV0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJL RkxBR1M9JChLRkxBR1MpIC1ETk9ERUJVRyAtRE5PVExPRyIgIkxJQlM9JChMSUJTKSIKKworc2Nv M3IybmV0bmQ6CisJQGVjaG8gc2NvMzJ2NG5ldG5kIGJ1aWx0IGZvciBTQ08gWEVOSVggMi4zIHVu ZGVyIFNDTyBVTklYLi4uCisJQGVjaG8gICByZXF1aXJlcyBjb3B5aW5nIC9saWIvMzg2L1NsaWJj LmEgdG8gL2xpYi8zODYvU2xpYmNfcy5hIGFuZAorCUBlY2hvICAgZ2V0dGluZyAvbGliLzM4Ni9T bGlic29ja2V0LmEgZnJvbSBhIFhFTklYIGRldmtpdC4KKwlAZWNobyAgIFdBUk5JTkc6IHBvbGwv Q0tfUE9MTCBzdXBwb3J0ZWQgb25seSBvbiBYRU5JWCAyLjMuNAorCWVjaG8gICAgRm9yIGVhcmxp ZXIgWEVOSVggc3lzdGVtcywgcmVwbGFjZSBDS19QT0xMIHdpdGggUkRDSEsuCisJJChNQUtFKSAi TUFLRT0kKE1BS0UpIiBzY28zMnY0bmV0bmQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJ IktGTEFHUz0kKEtGTEFHUykgLXgyLjMgLUROT1JFTkFNRSAtRE5PU1lNTElOSyIgXAorCSJMTktG TEFHUyA9ICQoTE5LRkxBR1MpIC14Mi4zIiBcCisJIkxJQlM9LWxkaXIgLWxjZnAgJChMSUJTKSIK KworI1NDTyBVTklYLzM4NiAzLjJ2NCAoUE9TSVggam9iIGNvbnRyb2wpLCBUQ1AvSVAsIGN1cnNl cywgQU5TSSBDIGNvbXBpbGF0aW9uLAorIzxkaXJlbnQuaD4gKEVBRlMpIGZpbGUgc3lzdGVtLiAg V2l0aCBESVJFTlQsIC1sYyBtdXN0IGNvbWUgYmVmb3JlIC1seC4KKyNSZXBvcnRlZGx5IGl0J3Mg T0sgdG8gYWRkIC1EQ0tfUkVESVIgYW5kIC1EQ0tfV1JFRlJFU0gsIGFuZCB0byByZW1vdmUgLWxj X3MuCisjUmVxdWlyZXMgU0NPIFRDUC9JUCBkZXZlbG9wbWVudCBzeXN0ZW0gb3IgT0RUIGZvciB0 ZWxuZXQuaCwgZXRjLgorI1NlZSBzY28zMnY0IGFib3ZlIGZvciBhZGRpdGlvbmFsIGNvbW1lbnRz LgorIyBOb3RlOiAieGVybWl0IiBtZWFucyB1c2UgdGhlIHNlbGVjdCgpIHZlcnNpb24gb2YgdGhl IENPTk5FQ1QgbW9kdWxlLgorc2NvMzJ2NG5ldHg6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgU0NPIFVOSVgvMzg2IDMuMnY0Li4uJworCUBlY2hvICdJZiB5b3UgZ2V0IF9m dGltZSByZWRlZmluaXRpb25fIGNvbXBsYWludCwnCisJQGVjaG8gJ3VzZSBtYWtlIHNjby1vZHQz MC4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFH Uz0gLUROT0ZJTEVIIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAtRENLX0FOU0lDIC1EQ0tfQ1VSU0VT IC1ETkFQIFwKKwktRENLX1dSRUZSRVNIIC1ETk9MSU5LQklUUyAtRF9JQkNTMiAtRFNFTEVDVCAt RERDTEdFVENXRCBcCisJLURDS19TQ08zMlY0IC1ETk9JS1NEIC1ETk9MU1RBVCAtTyAkKEtGTEFH UykiIFwKKwkiTE5LRkxBR1MgPSAkKExOS0ZMQUdTKSAtcyIgXAorCSJMSUJTID0gJChMSUJTKSAt bGN1cnNlcyAtbHNvY2tldCAtbG1hbGxvYyAtbHNvY2tldCAtbGNfcyAtbGMgLWx4IgorCitzY28z MnY0bmV0bmR4OgorCUBlY2hvIHNjbzMydjRuZXR4IHdpdGggbm8gZGVidWcKKwkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIHNjbzMydjRuZXR4IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJL RkxBR1M9JChLRkxBR1MpIC1ETk9ERUJVRyAtRE5PVExPRyIgIkxJQlM9JChMSUJTKSIKKworc2Nv M3IybmV0bmR4OgorCUBlY2hvIHNjbzMydjRuZXRuZHggYnVpbHQgZm9yIFNDTyBYRU5JWCAyLjMg dW5kZXIgU0NPIFVOSVguLi4KKwlAZWNobyAgIHJlcXVpcmVzIGNvcHlpbmcgL2xpYi8zODYvU2xp YmMuYSB0byAvbGliLzM4Ni9TbGliY19zLmEgYW5kCisJQGVjaG8gICBnZXR0aW5nIC9saWIvMzg2 L1NsaWJzb2NrZXQuYSBmcm9tIGEgWEVOSVggZGV2a2l0LgorCUBlY2hvICAgV0FSTklORzogcG9s bC9DS19QT0xMIHN1cHBvcnRlZCBvbmx5IG9uIFhFTklYIDIuMy40CisJZWNobyAgICBGb3IgZWFy bGllciBYRU5JWCBzeXN0ZW1zLCByZXBsYWNlIENLX1BPTEwgd2l0aCBSRENISy4KKwkkKE1BS0Up ICJNQUtFPSQoTUFLRSkiIHNjbzMydjRuZXRuZHggS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIktGTEFHUz0kKEtGTEFHUykgLXgyLjMgLUROT1JFTkFNRSAtRE5PU1lNTElOSyIgXAorCSJM TktGTEFHUyA9ICQoTE5LRkxBR1MpIC14Mi4zIiBcCisJIkxJQlM9LWxkaXIgLWxjZnAgJChMSUJT KSIKKworc2NvLW9kdDMwOgorCUBlY2hvIFNDTyBPRFQgMy4wCisJJChNQUtFKSAiTUFLRT0kKE1B S0UpIiBzY28zMnY0bmV0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9JChL RkxBR1MpIC1ET0RUMzAiCisKKyNTQ08gT3BlblNlcnZlciA1LjAgKFNDTyBVTklYIDMuMnY1LjAp IHdpdGggU0NPIGRldmVsb3BtZW50IHRvb2xzLCBubyBUQ1AvSVAuCisjU0NPIE9TUjUgaXMgbXVj aCBtb3JlIGxpa2Ugc3RhbmRhcmQgU3lzdGVtIFYgdGhhbiBwcmV2aW91cyBTQ08gcmVsZWFzZXMu CisjVGhlIFNDTyBkZXZlbG9wbWVudCB0b29scyBpbmNsdWRlIFRDUC9JUCwgc28gdGhpcyB0YXJn ZXQgaXMgb25seSBmb3IgY3JlYXRpbmcKKyNhcnRpZmljaWFsbHkgbGltaXRlZCB2ZXJzaW9ucyBv ZiBrZXJtaXQgcmVxdWlyZWQgYnkgc2l0ZSBwb2xpY3kgcmF0aGVyIHRoYW4KKyN0aGUgb3BlcmF0 aW5nIHN5c3RlbS4gIE5PU1lTTE9HIGlzIGluY2x1ZGVkIGJlY2F1c2Ugc3lzbG9nKCkgcmVxdWly ZXMgdGhlCisjc29ja2V0cyBsaWJyYXJ5Lgorc2NvMzJ2NTAwOgorCUBlY2hvIE1ha2luZyBDLUtl cm1pdCAkKENLVkVSKSBmb3IgU0NPIE9wZW5TZXJ2ZXIgUmVsZWFzZSA1Li4uCisJJChNQUtFKSB4 ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLU8gLURESVJFTlQg LURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwKKwktRENLX0NVUlNFUyAt RENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwktRE5PR0VU VVNFUlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLUROT1NZU0xPRyBcCisJJChLRkxBR1Mp IiBcCisJIkxJQlM9LWxjdXJzZXMgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxBR1MpIgorCitz Y28zMnY1OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFHUz0kKEtGTEFHUykiIHNjbzMy djUwMAorCisKKyNTQ08gT3BlblNlcnZlciA1LjAgd2l0aCBuZXR3b3JraW5nLCBTQ08gZGV2ZWxv cG1lbnQgdG9vbHMuCisjTmV0d29ya2luZyBsaWJyYXJpZXMgYXJlIG5vdyBwcm92aWRlZCB3aXRo IHRoZSBPUy4KK3NjbzMydjUwMG5ldDoKKwlAZWNobyBNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIFNDTyBPcGVuU2VydmVyIFJlbGVhc2UgNS4uLgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9 JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1PIC1ERElSRU5UIC1ESERCVVVDUCAtRFNW UjQgLURDS19TQ09WNSAtRENLX1JUU0NUUyBcCisJLURDS19DVVJTRVMgLURDS19XUkVGUkVTSCAt RENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLUROT0dFVFVTRVJTSEVMTCAtRE5P TFNUQVQgLUROT0xJTktCSVRTIC1EVENQU09DS0VUIFwKKwktRE5PX0ROU19TUlYgJChLRkxBR1Mp IiBcCisJIkxJQlM9LWxjdXJzZXMgLWxzb2NrZXQgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxB R1MpIgorCitzY28zMnY1bmV0OgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgIktGTEFHUz0kKEtG TEFHUykiIHNjbzMydjUwMG5ldAorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wIHdpdGggbmV0d29ya2lu ZyBhbmQgT3BlblNTTCwgU0NPIGRldmVsb3BtZW50IHRvb2xzLgorI05ldHdvcmtpbmcgbGlicmFy aWVzIGFyZSBub3cgcHJvdmlkZWQgd2l0aCB0aGUgT1MuCitzY28zMnY1MDBuZXQrc3NsOgorCUBl Y2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgU0NPIE9TUjUgd2l0aCBPcGVuU1NMLi4u CisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0g LU8gLURESVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwKKwkt RENLX0NVUlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9I IFwKKwktRE5PR0VUVVNFUlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLURUQ1BTT0NLRVQg XAorCS1ETk9fRE5TX1NSViAtRENLX0FVVEhFTlRJQ0FUSU9OIC1EQ0tfU1NMIC1EQ0tfVFJJR0dF UiBcCisJJChTU0xJTkMpICQoU1NMTElCKSAkKEtGTEFHUykiIFwKKwkiTElCUz0kKFNTTExJQikg LWxjdXJzZXMgLWxzb2NrZXQgLWxzc2wgLWxjcnlwdG8gJChMSUJTKSIgXAorCSJMTktGTEFHUz0k KExOS0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVyIDUuMCB3aXRoIGdjYywgbm8gbmV0d29ya2lu Zy4KKyNOb3RlOiBOT1NZU0xPRyByZXF1aXJlZCBmb3Igbm9uLW5ldCBlbnRyaWVzIGJlY2F1c2Ug aXQgcmVxdWlyZXMgPHNvY2tldC5oPgorc2NvMzJ2NTAwZ2NjOgorCUBlY2hvIFVzaW5nIGdjYy4u LgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwQ0M9Z2NjIENDMj1nY2MgXAorCUtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gIktGTEFHUz0gJChLRkxBR1MpIgorCisjU0NPIE9wZW5T ZXJ2ZXIgNS4wIHdpdGggbmV0d29ya2luZywgZ2NjLgorc2NvMzJ2NTAwbmV0Z2NjOgorCUBlY2hv IFRDUC9JUCBuZXR3b3JraW5nIGFkZGVkIC0gdXNpbmcgZ2NjLi4uCisJJChNQUtFKSAiTUFLRT0k KE1BS0UpIiBzY28zMnY1MDBuZXQgQ0M9Z2NjIENDMj1nY2MgXAorCUtUQVJHRVQ9JCR7S1RBUkdF VDotJChAKX0gIktGTEFHUz0kKEtGTEFHUykiCisKKyNTQ08gT3BlblNlcnZlciA1LjAgd2l0aCBu ZXR3b3JraW5nLCBnY2MsIGVsZi4KK3NjbzMydjUwMG5ldGdjY2VsZjoKKwlAZWNobyBUQ1AvSVAg bmV0d29ya2luZyBhZGRlZCAtIHVzaW5nIGdjYywgZHluYW1pYyBlbGYgbGlicmFyeQorCSQoTUFL RSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2NjIiBcCisJS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPS1PMyAtYmVsZiIgIkxOS0ZMQUdTPS1iZWxm IgorCitzY28zMnY1MDI6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDAgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDIgJChLRkxBR1MpIgor CisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjIgd2l0aCBuZXR3b3JraW5nLCBTQ08gZGV2ZWxvcG1lbnQg dG9vbHMuCitzY28zMnY1MDJuZXQ6CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQuLi4K KwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VUPSQke0tUQVJHRVQ6 LSQoQCl9IFwKKwkiS0ZMQUdTPS1iIGVsZiAtRFNDT19PU1I1MDIgJChLRkxBR1MpIgorCisjU0NP IE9wZW5TZXJ2ZXIgNS4wLjQgKFNDTyBVTklYIDMuMnY1LjAuNCkgd2l0aCBTQ08gZGV2ZWxvcG1l bnQgdG9vbHMuCisjTGlrZSA1LjAsIGJ1dCBhZGRzIGhpZ2ggc2VyaWFsIHNwZWVkcy4gIEZpcnN0 IFBPU0lYLWJhc2VkIFNDTyB2ZXJzaW9uLgorI05vdGU6IHRoZSAtTyBmbGFnIGlzIGRlbGliZXJh dGVseSBvbWl0dGVkIGZvciAvYmluL2NjICg9IC91c3IvY2NzL2Jpbi9jYykuCitzY28zMnY1MDQ6 CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT3BlblNlcnZlciBSZWxl YXNlIDUuMC40Li4uCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBc CisJIkNGTEFHUz0gLURESVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRT Q1RTIFwKKwktRFNDT19PU1I1MDQgLWIgZWxmIC1EUE9TSVggXAorCS1EQ0tfQ1VSU0VTIC1EQ0tf V1JFRlJFU0ggLURDS19ORVdURVJNIC1EU0VMRUNUIC1EU0VMRUNUX0ggXAorCS1ETk9HRVRVU0VS U0hFTEwgLUROT0xTVEFUIC1ETk9MSU5LQklUUyAtRE5PU1lTTE9HICQoS0ZMQUdTKSIgXAorCSJM SUJTPS1sY3Vyc2VzICQoTElCUykiICJMTktGTEFHUz0kKExOS0ZMQUdTKSIKKworI1NDTyBPcGVu U2VydmVyIDUuMC40IHdpdGggZ2NjLCBubyBuZXR3b3JraW5nLgorc2NvMzJ2NTA0Z2NjOgorCUBl Y2hvIFVzaW5nIGdjYy4uLgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTA0ICJDQz1n Y2MiICJDQzI9Z2NjIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSAiS0ZMQUdTPSAkKEtG TEFHUykiCisKKyNTQ08gT3BlblNlcnZlciA1LjAuNCB3aXRoIG5ldHdvcmtpbmcuCisjU0NPIGRl dmVsb3BtZW50IHRvb2xzICgvYmluL2NjID0gL3Vzci9jY3MvYmluL2NjKS4KKyNPcHRpbWl6YXRp b24gZGVsaWJlcmF0ZWx5IHN1cHByZXNzZWQuCitzY28zMnY1MDRuZXQ6CisJQGVjaG8gTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT3BlblNlcnZlciBSZWxlYXNlIDUuMC40Li4uCisJ JChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURE SVJFTlQgLURIREJVVUNQIC1EU1ZSNCAtRENLX1NDT1Y1IC1EQ0tfUlRTQ1RTIFwKKwktRENLX0NV UlNFUyAtRENLX1dSRUZSRVNIIC1EQ0tfTkVXVEVSTSAtRFNFTEVDVCAtRFNFTEVDVF9IIFwKKwkt RE5PR0VUVVNFUlNIRUxMIC1ETk9MU1RBVCAtRE5PTElOS0JJVFMgLURUQ1BTT0NLRVQgXAorCS1i IGVsZiAtRFNDT19PU1I1MDQgLURQT1NJWCAtRE5PX0ROU19TUlYgJChLRkxBR1MpIiBcCisJIkxJ QlM9LWxjdXJzZXMgLWxzb2NrZXQgJChMSUJTKSIgIkxOS0ZMQUdTPSQoTE5LRkxBR1MpIgorCisj U0NPIE9wZW5TZXJ2ZXIgNS4wLjQgd2l0aCBuZXR3b3JraW5nLCBnY2MuCitzY28zMnY1MDRuZXRn Y2M6CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQgLSB1c2luZyBnY2MuLi4KKwlAZWNo byBJZiBnY2MgY3Jhc2hlcyBvbiBja3dhcnQuYyB0aGVuIGJ1aWxkIGl0IGJ5IGhhbmQ6CisJQGVj aG8gIiBnY2MgLW8gd2FydCAtRENLX1NDT1Y1IGNrd2FydC5jIgorCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgc2NvMzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2NjIiBcCisJS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfSAiS0ZMQUdTPS1EU0NPX09TUjUwNCAtRFBPU0lYICQoS0ZMQUdTKSIKKworI1ND TyBPcGVuU2VydmVyIDUuMC40IHdpdGggbmV0d29ya2luZywgZ2NjLCBlbGYuCitzY28zMnY1MDRu ZXRnY2NlbGY6CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQgLSB1c2luZyBnY2MsIGR5 bmFtaWMgZWxmIGxpYnJhcnkKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCAi Q0M9Z2NjIiAiQ0MyPWdjYyIKKwlLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdT PS1EU0NPX09TUjUwNCAtRFBPU0lYIC1PMyAtYmVsZiAkKEtGTEFHUykiIFwKKwlMTktGTEFHUz0i LWJlbGYiCisKKyNTQ08gT3BlblNlcnZlciA1LjAuNSAoU0NPIFVOSVggMy4ydjUuMC41KSB3aXRo IFNDTyAvYmluL2NjLgorI0xpa2UgNS4wLCBidXQgYWRkcyBoaWdoIHNlcmlhbCBzcGVlZHMuICBG aXJzdCBQT1NJWC1iYXNlZCBTQ08gdmVyc2lvbi4KKyNZb3UgbWlnaHQgaGF2ZSB0byBhZGQgIkxJ QlM9LWx0aW5mbyIgKHNvbWUgZG8sIHNvbWUgZG9uJ3QpLgorc2NvMzJ2NTA1OgorCSQoTUFLRSkg Ik1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJL RkxBR1M9LURTQ09fT1NSNTA1IC1ETk9TSEFET1cgLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgor CisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgKFNDTyBVTklYIDMuMnY1LjAuNSkgd2l0aCBTQ08gVURL LgorI1RoaXMgb25lIGNhbid0IHNlZSB0aGUgaGlnaCBzZXJpYWwgc3BlZWRzIGFuZCBhbnl0aGlu ZyB0byBkbyB3aXRoIG1vZGVtCisjc2lnbmFscyBkb2Vzbid0IHdvcmsgYmVjYXVzZSBVS0QgY2Mg aGFzIGl0cyBvd24gYWx0ZXJuYXRpdmUgdW5pdmVyc2Ugb2YKKyNoZWFkZXIgZmlsZXMuCitzY28z MnY1MDV1ZGs6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDAgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDUgLUREQ0xUSU1FVkFMIC1ETk9T SEFET1cgLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjUg d2l0aCBuZXR3b3JraW5nLCBTQ08gL2Jpbi9jYy4KKyNTZWUgY29tbWVudHMgd2l0aCBzY28zMnY1 MDUgdGFyZ2V0cy4KK3NjbzMydjUwNW5ldDoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRl ZC4uLgorCSQoTUFLRSkgIk1BS0U9JChNQUtFKSIgc2NvMzJ2NTAwbmV0IEtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTQ09fT1NSNTA1IC1ETk9TSEFET1cgLWIgZWxmIC1E UE9TSVggJChLRkxBR1MpIgorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgd2l0aCBuZXR3b3JraW5n IGFuZCBPcGVuU1NMLCBTQ08gL2Jpbi9jYy4KKyNTZWUgY29tbWVudHMgd2l0aCBzY28zMnY1MDUg dGFyZ2V0cy4KK3NjbzMydjUwNW5ldCtzc2w6CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYW5k IE9wZW5TU0wgYWRkZWQuLi4KKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCtz c2wgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDUgLURO T1NIQURPVyAtYiBlbGYgLURQT1NJWCAkKEtGTEFHUykgIiBcCisJIkxJQlM9JChTU0xMSUIpIC1s Y3Vyc2VzIC1sc29ja2V0IC1sc3NsIC1sY3J5cHRvICQoTElCUykiIFwKKwkiTE5LRkxBR1M9JChM TktGTEFHUykiCisKKyNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRoIG5ldHdvcmtpbmcsIFNDTyBV REsuCisjU2VlIGNvbW1lbnRzIHdpdGggYWJvdmUgc2NvMzJ2NTA1IHRhcmdldHMuCitzY28zMnY1 MDV1ZGtuZXQ6CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQuLi4KKwkkKE1BS0UpICJN QUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki S0ZMQUdTPS1EU0NPX09TUjUwNSAtRERDTFRJTUVWQUwgLUROT1NIQURPVyAtYiBlbGYgLURQT1NJ WCAkKEtGTEFHUykiCisKKyNTQ08gT3BlblNlcnZlciA1LjAuNSB3aXRoIGdjYywgbm8gbmV0d29y a2luZy4KK3NjbzMydjUwNWdjYzoKKwlAZWNobyBVc2luZyBnY2MuLi4KKwkkKE1BS0UpICJNQUtF PSQoTUFLRSkiIHNjbzMydjUwMCAiQ0M9Z2NjIiAiQ0MyPWdjYyIgXAorCUtUQVJHRVQ9JCR7S1RB UkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTQ09fT1NSNTA1IC1EUE9TSVggLWZ1bnNpZ25lZC1j aGFyICQoS0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVyIDUuMC41IHdpdGggZ2NjLCBubyBuZXR3 b3JraW5nLCBubyBzaGFkb3cgcGFzc3dvcmRzLgorc2NvMzJ2NTA1eGdjYzoKKwlAZWNobyBVc2lu ZyBnY2MuLi4KKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMCAiQ0M9Z2NjIiAiQ0My PWdjYyIgXAorCUtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURTQ09fT1NS NTA1IC1ETk9TSEFET1cgLURQT1NJWCAtZnVuc2lnbmVkLWNoYXIgJChLRkxBR1MpIgorCisjU0NP IE9wZW5TZXJ2ZXIgNS4wLjUgd2l0aCBuZXR3b3JraW5nLCBnY2MuCitzY28zMnY1MDVuZXRnY2M6 CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQgLSB1c2luZyBnY2MuLi4KKwlAZWNobyBJ ZiBnY2MgY3Jhc2hlcyBvbiBja3dhcnQuYyB0aGVuIGJ1aWxkIGl0IGJ5IGhhbmQ6CisJQGVjaG8g IiBnY2MgLW8gd2FydCAtRENLX1NDT1Y1IGNrd2FydC5jIgorCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgc2NvMzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2NjIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VU Oi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDUgLUROT1NIQURPVyAtRFBPU0lYIC1mdW5z aWduZWQtY2hhciAkKEtGTEFHUykiCisKKyNlZ2NzIGlzIGp1c3QgbGlrZSBnY2MgYnV0IGdlbmVy YXRlcyBFTEYgYnkgZGVmYXVsdC4KKyNPciB5b3UgY2FuIGluY2x1ZGUgLW1lbGYgKG5vdCAtYmVs ZikgdG8gZm9yY2UgaXQuCitzY28zMnY1MDVuZXRlZ2NzOgorCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgIktGTEFHUz0kKEtGTEFHUykiIHNjbzMydjUwNW5ldGdjYyBcCisJS1RBUkdFVD0kJHtLVEFS R0VUOi0kKEApfQorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjUgd2l0aCBuZXR3b3JraW5nLCBnY2Ms IGVsZi4KK3NjbzMydjUwNW5ldGdjY2VsZjoKKwlAZWNobyBUQ1AvSVAgbmV0d29ya2luZyBhZGRl ZCAtIHVzaW5nIGdjYywgZHluYW1pYyBlbGYgbGlicmFyeQorCSQoTUFLRSkgIk1BS0U9JChNQUtF KSIgc2NvMzJ2NTAwbmV0ICJDQz1nY2MiICJDQzI9Z2NjIiBcCisJIktGTEFHUz0tRFNDT19PU1I1 MDUgLURQT1NJWCAtZnVuc2lnbmVkLWNoYXIgLU8zIC1iZWxmICQoS0ZMQUdTKSIgXAorCUtUQVJH RVQ9JCR7S1RBUkdFVDotJChAKX0gTE5LRkxBR1M9Ii1iZWxmIgorCisjU0NPIE9wZW5TZXJ2ZXIg NS4wLjYgd2l0aCBTQ08gL2Jpbi9jYy4KKyMgQWRkIC1ERENMVElNRVZBTCB3aGVuIGJ1aWxkaW5n IHdpdGggVURLLgorI0xpa2UgNS4wLjUuICAgSU1QT1JUQU5UOiBVc2Ugc2NvMzJ2NTA2YSB0YXJn ZXQgZm9yIDUuMC42YS4KK3NjbzMydjUwNjoKKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMy djUwMCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwNSAt RFNDT19PU1I1MDYgLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgorCisjU0NPIE9wZW5TZXJ2ZXIg NS4wLjYgd2l0aCBuZXR3b3JraW5nLCBTQ08gL2Jpbi9jYy4KKyMgQWRkIC1ERENMVElNRVZBTCB3 aGVuIGJ1aWxkaW5nIHdpdGggVURLLgorIyBJTVBPUlRBTlQ6IFVzZSBzY28zMnY1MDZhIHRhcmdl dCBmb3IgNS4wLjZhLgorc2NvMzJ2NTA2bmV0OgorCUBlY2hvIFRDUC9JUCBuZXR3b3JraW5nIGFk ZGVkLi4uCisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDUgLURTQ09fT1NSNTA2IC1iIGVs ZiAtRFBPU0lYICQoS0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVyIDUuMC42YSwgbm8gbmV0d29y a2luZywgU0NPIGRldmVsb3BtZW50IHRvb2xzLgorI1RoaXMgb25lIGhhcyBwYXRjaGVkIHNpbyBk cml2ZXJzIHRoYXQsIGZvciB0aGUgZmlyc3QgdGltZSwKKyNhY3R1YWxseSBoYW5kbGUgbW9kZW0g c2lnbmFscyBjb3JyZWN0bHkuCisjIEFkZCAtRERDTFRJTUVWQUwgd2hlbiBidWlsZGluZyB3aXRo IFVESy4KK3NjbzMydjUwNmE6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDAgS1RB UkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDUgLURTQ09fT1NS NTA2IC1EU0NPX09TUjUwNkEgLURORUVETURNREVGUyBcCisJLWIgZWxmIC1EUE9TSVggJChLRkxB R1MpIgorCisjU0NPIE9wZW5TZXJ2ZXIgNS4wLjZhIHdpdGggbmV0d29ya2luZywgU0NPIGRldmVs b3BtZW50IHRvb2xzLgorIyBBZGQgLUREQ0xUSU1FVkFMIHdoZW4gYnVpbGRpbmcgd2l0aCBVREsu CitzY28zMnY1MDZhbmV0OgorCUBlY2hvIFRDUC9JUCBuZXR3b3JraW5nIGFkZGVkLi4uCisJJChN QUtFKSAiTUFLRT0kKE1BS0UpIiBzY28zMnY1MDBuZXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIktGTEFHUz0tRFNDT19PU1I1MDUgLURTQ09fT1NSNTA2IC1EU0NPX09TUjUwNkEgLURO RUVETURNREVGUyBcCisJLWIgZWxmIC1EUE9TSVggJChLRkxBR1MpIgorCisjU0NPIE9wZW5TZXJ2 ZXIgNS4wLjcsIG5vIG5ldHdvcmtpbmcsIFNDTyBkZXZlbG9wbWVudCB0b29scy4KKyNBZGRzIGZs YWdzIHRvIG1ha2UgUFRZIGFuZCBTU0ggY29tbWFuZHMgd29yay4gIFRoZXNlIGhhdmUgYmVlbiB0 ZXN0ZWQKKyNvbmx5IGluIDUuMC43IGJ1dCBwcm9iYWJseSB0aGV5IGNhbiBhbHNvIGJlIGFkZGVk IHRvIGVhcmxpZXIgT1NSNSB0YXJnZXRzLgorc2NvMzJ2NTA3OgorCSQoTUFLRSkgIk1BS0U9JChN QUtFKSIgc2NvMzJ2NTAwIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJLRkxBR1M9LURT Q09fT1NSNTA1IC1EU0NPX09TUjUwNiAtRFNDT19PU1I1MDcgLURORUVETURNREVGUyBcCisJLURI QVZFX1BUU05BTUUgLURIQVZFX1BUTVggLURIQVZFX0dSQU5UUFQgXAorCS1iIGVsZiAtRFBPU0lY ICQoS0ZMQUdTKSIKKworI1NDTyBPcGVuU2VydmVyIDUuMC43IGFzIGFib3ZlIGJ1dCB3aXRoIG5l dHdvcmtpbmcuCitzY28zMnY1MDduZXQ6CisJQGVjaG8gVENQL0lQIG5ldHdvcmtpbmcgYWRkZWQu Li4KKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIHNjbzMydjUwMG5ldCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwkiS0ZMQUdTPS1EU0NPX09TUjUwNSAtRFNDT19PU1I1MDYgLURTQ09fT1NS NTA3IC1ETkVFRE1ETURFRlMgXAorCS1ESEFWRV9QVFNOQU1FIC1ESEFWRV9QVE1YIC1ESEFWRV9H UkFOVFBUIFwKKwktYiBlbGYgLURQT1NJWCAkKEtGTEFHUykiCisKKyNTQ08gT3BlblNlcnZlciA2 IChuZXcgdGFyZ2V0IDMwIEphbiAyMDA2KQorc2NvX29zcjYwMCBzY282MDA6CisJQGVjaG8gTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBTQ08gT3BlblNlcnZlciA2LjAuMC4uLgorCSQoTUFL RSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1PIC1ERElS RU5UIC1ESERCVVVDUCAtRFNWUjQgLURDS19TQ09WNSAtRENLX1JUU0NUUyBcCisJLURDS19DVVJT RVMgLURDS19XUkVGUkVTSCAtRENLX05FV1RFUk0gLURTRUxFQ1QgLURTRUxFQ1RfSCBcCisJLURO T0dFVFVTRVJTSEVMTCAtRE5PTFNUQVQgLUROT0xJTktCSVRTIC1EVENQU09DS0VUIFwKKwktRE5P X0ROU19TUlYgLURTQ09fT1NSNTA1IC1EU0NPX09TUjUwNiAtRFNDT19PU1I1MDcgLURORUVETURN REVGUyBcCisJLURIQVZFX1BUU05BTUUgLURIQVZFX1BUTVggLURIQVZFX0dSQU5UUFQgLUREQ0xU SU1FVkFMIFwKKwktRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgXAor CS1EU09DS09QVF9UPXNvY2tsZW5fdCAtREdTT0NLTkFNRV9UPXNpemVfdCAtREdQRUVSTkFNRV9U PXNpemVfdCBcCisJLURIRVJBTEQ9XCJcXFwiIFNDTyBPcGVuU2VydmVyIGB1bmFtZSAtdmBcXFwi XCIgXAorCS1iIGVsZiAtRFBPU0lYICQoS0ZMQUdTKSIgXAorCSJMSUJTPS1sY3Vyc2VzIC1sc29j a2V0ICQoTElCUykiICJMTktGTEFHUz0kKExOS0ZMQUdTKSIKKworI1RhbmR5IDE2LzYwMDAgd2l0 aCBYZW5peCAzLjAgKDE2IGJpdHMpCisjQy1LZXJtaXQgNy4wIChhbmQgbGF0ZXIpIGRvIG5vdCBi dWlsZCBoZXJlOyAidG9vIG1hbnkgZGVmaW5lcyIuCisjQWRkIG1vcmUgLUROT3h4eCBvcHRpb25z IHRvIHJlbW92ZSBmZWF0dXJlcyBpZiBwcm9ncmFtIHdvbid0IGxvYWQuCisjU3VjY2Vzc2Z1bCBv cGVyYXRpb24gaXMgYSBmdW5jdGlvbiBvZiBwcm9ncmFtIHNpemUsIHBoeXNpY2FsIG1lbW9yeSwK KyNhdmFpbGFibGUgc3dhcCBzcGFjZSwgZXRjLiAgVGhlIGZvbGxvd2luZyBzdHJpcHBlZC1kb3du IGNvbmZpZ3VyYXRpb24KKyNzZWVtcyB0byB3b3JrIG9uIG1vc3QgVGFuZHkgNjAwMHMuICBOT1RF OiAiLSsiIG1lYW5zIGFsbG93IGxvbmcgdmFyaWFibGUKKyNuYW1lcywgbmVlZGVkIGZvciBDLUtl cm1pdCA2LjAgYmVjYXVzZSBzb21lIGlkZW50aWZpZXJzIGFyZSBub3QgdW5pcXVlCisjd2l0aGlu IHRoZSBmaXJzdCBzaXggY2hhcmFjdGVycy4KK3RyczE2OgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFRhbmR5IDE2LzYwMDAsIFhlbml4IDMuMC4uLicKKwkkKE1BS0UpIHdl cm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwkiQ0ZMQUdTID0gLSsgLURBVFRTViAt RFRSUzE2IC1ETk9NS0RJUiAtRERDTFBPUEVOIC1EQ0tfQ1VSU0VTIFwKKwktRE5PREVCVUcgLURO T1RMT0cgLUROT0hFTFAgLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT0lLU0QgXAorCS1ETk9SRURJ UkVDVCAtRE5PU1lTTE9HIC1ETk9QVVRFTlYgLUROT1JFQUxQQVRIIC1ETk9MRUFSTiBcCisJJChL RkxBR1MpIC1PIiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIiAiTE5LRkxBR1MgPSAtKyAtbiAt cyIKKworIyBRTlggNC4yMSBhbmQgYWJvdmUsIDMyLWJpdCB2ZXJzaW9uLCBXYXRjb20gQzMyIDEw LjYsIGZ1bGx5IGNvbmZpZ3VyZWQsCisjIGV4Y2VwdCBubyBqb2IgY29udHJvbCBiZWNhdXNlIFFO WCA0LnggZG9lcyBub3Qgc3VwcG9ydCBpdC4gIE5ldyBOQ1VSU0VTCisjIGxpYnJhcnkgdXNlZCBp bnN0ZWFkIG9mIENVUlNFUy4KKyMKKyMgLU9hdHggb3B0aW1pemVzIHRvIGZhdm9yIHNwZWVkIG92 ZXIgc2l6ZTogbG9vcCBvcHRpbWl6YXRpb24sIGlubGluZSBmbidzLgorIyAtT3MgZmF2b3JzIHNp emUgb3ZlciBzcGVlZC4gIFNhdmVzIDMwLTQwSyBvdXQgb2YgYWJvdXQgMS43NU0uCisjIC0zciA9 IGdlbmVyYXRlIDM4NiBjb2RlIHdpdGggcmVnaXN0ZXItYmFzZWQgYXJnIHBhc3NpbmcuCisjIC0z cyA9IGdlbmVyYXRlIDM4NiBjb2RlIHdpdGggc3RhY2stYmFzZWQgYXJnIHBhc3NpbmcuCisjIC1t cyA9IHNlcGFyYXRlIGNvZGUgJiBkYXRhIDRHQiBzZWdtZW50cyAoMzItYml0IGJ1aWxkcyBvbmx5 KS4KKyMgLW1mID0gZmxhdCBtZW1vcnkgbW9kZWwgY29kZStkYXRhIGluIG9uZSA0R0Igc2VnbWVu dCAoZGl0dG8pLgorIyAtemMgPSBwbGFjZSBsaXRlcmFsIHN0cmluZ3MgaW4gY29kZSBzZWdtZW50 LgorIyAtTjRNID0gQmlnIHN0YWNrIChpbmNyZWFzZSB0aGUgZGlnaXQgdXBvbiBTSUdTRUdWcyBh dCBydW50aW1lKS4KKyMgY2hhcnMgYXJlIHVuc2lnbmVkIGJ5IGRlZmF1bHQgKC1qIG1ha2VzIHRo ZW0gc2lnbmVkIGJ5IGRlZmF1bHQpLgorIyAtTk9VVUNQIGlzIGluY2x1ZGVkIGJlY2F1c2UgUU5Y IGRvZXNuJ3QgdXNlIGl0LgorIyBBZGQgdGhlc2UgdG8gdGhlIGVuZCBpZiB5b3UgbGlrZSBidXQg dGhleSBkdW1wIGNvcmUgb24gbXkgUU5YIDQuMjUgc3lzdGVtOgorIworIwlAd2VybWl0IC1oID51 c2UucW54CisjCUB1c2Vtc2cgd2VybWl0IHVzZS5xbngKKyMJQHJtIHVzZS5xbngKKyMKKyMgSWYg eW91IGdldCB3YXJuaW5ncyBhYm91dCBIRUFERVIgb3IgQ19JTiBhZGQgLUROT19ETlNfU1JWLgor IyBPSyAyMDExLzA2LzE0CitxbngzMjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBRTlggNC4yeCwgMzItYml0Li4uJworCSQoTUFLRSkgeGVybWl0IFwKKwkiTE5LRkxBR1Mg PSAtTjRNIC0zciIgXAorCSJDRkxBR1MgPSAtbXMgLTNyIC1EUU5YIC1EVENQU09DS0VUIC1EQ0tf Q1VSU0VTIC1ETk9HRVRVU0VSU0hFTEwgXAorCS1EQ0tfV1JFRlJFU0ggLURDS19SRURJUiAtRFNF TEVDVCAtRFNFTEVDVF9IIC1EQ0tfUlRTQ1RTIC1ETk9KQyBcCisJLUROT0lOSVRHUk9VUFMgLURO T1VVQ1AgLURDS19BTlNJQyAtRFBJRF9UPXBpZF90IC1PYXR4IC16YyAkKEtGTEFHUykiIFwKKwki TElCUz0gLWxzb2NrZXQgLWxuY3Vyc2VzIC1sdGVybWNhcCIKKworIyBBcyBhYm92ZSBidXQgbm8g bmV0d29ya2luZyBzaW5jZSBzb21lIFFOWCBzeXN0ZW1zIGRvIG5vdCBoYXZlIFRDUC9JUAorIyBp bnN0YWxsZWQsIG9yIHRoZSBUQ1AvSVAgZGV2ZWxvcGVycyBraXQsIHdoaWNoIGluY2x1ZGVzIGFs bCB0aGUgbmVlZGVkCisjIGhlYWRlciBmaWxlcy4gIFRoaXMgZW50cnkgaGFzIG5vdCBiZWVuIHRl c3RlZCBvbiBhIFFOWCBzeXN0ZW0gdGhhdCwgaW4KKyMgZmFjdCwgZG9lcyBub3QgaGF2ZSBUQ1Av SVAgaW5zdGFsbGVkOyBzb21lIGFkanVzdG1lbnRzIG1pZ2h0IGJlIG5lY2Vzc2FyeSwKKyMgaW4g cGFydGljdWxhciByZWdhcmRpbmcgdGhlIHVzZSBvZiBzZWxlY3QoKTogaXMgLWxzb2NrZXQgbmVl ZGVkLCBjYW4gd2UKKyMgZ2V0IHRoZSBuZWVkZWQgZGVmaW5pdGlvbnMgZnJvbSBub24tVENQL0lQ IGhlYWRlciBmaWxlcyAoRkRfU0VULCBldGMpPworcW54MzJub25ldDoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBRTlggNC4yeCwgMzItYml0LCBubyBuZXQuLi4nCisJJChN QUtFKSB4ZXJtaXQgXAorCSJMTktGTEFHUyA9IC1ONE0gLTNyIiBcCisJIkNGTEFHUyA9IC0zciAt bXMgLURRTlggLUROT05FVCAtRE5PSUtTRCAtRENLX0NVUlNFUyBcCisJLURDS19XUkVGUkVTSCAt RENLX1JFRElSIC1EU0VMRUNUIC1EU0VMRUNUX0ggLURDS19SVFNDVFMgLUROT0pDIFwKKwktRE5P VVVDUCAtRENLX0FOU0lDIC1EUElEX1Q9cGlkX3QgLU9hdHggLXpjICQoS0ZMQUdTKSIgXAorCSJM SUJTPSAtbHNvY2tldCAtbG5jdXJzZXMgLWx0ZXJtY2FwIgorCUB3ZXJtaXQgLWggPnVzZS5xbngK KwlAdXNlbXNnIHdlcm1pdCB1c2UucW54CisJQHJtIHVzZS5xbngKKworIyBTeW5vbnltIGZvciBx bngzMi4KK3FueDoKKwkkKE1BS0UpIHFueDMyICJLRkxBR1M9JChLRkxBR1MpIgorCisjIFFOWCA0 LjIxIGFuZCBhYm92ZSwgMTYtYml0IHZlcnNpb24sIFdhdGNvbSBDIDguNSAtIGFuZCBoaWdoZXIg b24gaTI4NiBQQ3MKKyMgYW5kIGFib3ZlLgorIworIwlJTVBPUlRBTlQ6IERvIG5vdCB1c2UgV2F0 Y29tIEMgMTAuNiEhIQorIwlJZiB5b3UgaGF2ZSBpdCBpbnN0YWxsZWQsIGFkZCAiLXY5LjUyIHRv IENGTEFHUyIKKyMKKyMgTk9URTogUU5YIDQuMjMgb253YXJkIGRvZXMgbm90IHdvcmsgb24gMjg2 J3MgYW55d2F5LgorIyBTdGFja3NpemUgMjYwMDAsIG9iamVjdHMgbGFyZ2VyIHRoYW4gMTAwIGJ5 dGVzIGluIHRoZWlyIG93biBzZWdtZW50cywKKyMgc3RyaW5nIGNvbnN0YW50cyB0byB0aGUgY29k ZXNlZ21lbnQsIGV0Yy4gIEZ1bGx5IGNvbmZpZ3VyZWQgZXhjZXB0IGpvYiBjdHJsLgorIyBUaGlz IGVudHJ5IHdvcmtzIGZvciBidWlsZGluZyBhIDE2LWJpdCBleGVjdXRhYmxlIG9uIGEgMzItYml0 IHN5c3RlbSwgYnV0CisjIGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gYSAxNi1iaXQgc3lzdGVtLiAg VXNlcyBsYXJnZSBtZW1vcnkgbW9kZWwsIGxpbmtzCisjIGV4cGxpY2l0bHkgd2l0aCBsYXJnZS1t b2RlbCBzb2NrZXRzIGxpYnJhcnkuICBDb3JyZWN0LW1vZGVsIGN1cnNlcyBsaWJyYXJ5CisjIGlz IGNob3NlbiBhdXRvbWF0aWNhbGx5LiAgU2VlIGNvbW1lbnQgaW4gcW54MzIgZW50cnkgYWJvdXQg LUROT1VVQ1AuCisjCisjIFdBUk5JTkc6CisjCisjIFdhdGNvbSBDIHByaW9yIHRvIDEwLjYgbmV2 ZXIgaGFkIHJlbGVhc2VkIGN1cnNlcyBsaWJyYXJ5LiBUbyBsaW5rIGFnYWluc3QgaXQsCisjIHlv dSBtdXN0IG9idGFpbiBwb3J0ZWQgZnJlZSBjdXJzZXMgc291cmNlIGZyb20gZnRwOi8vZnRwLnFu eC5jb20vdXNyL2ZyZWUsCisjIHRoZW4gY29tcGlsZSBhbmQgYnVpbGQgbGlicmFyeSAoY3Vyc2Vz bC5saWIpIGFuZCBwbGFjZSBpdCBpbiAvdXNyL2xpYi4gIFlvdQorIyBtdXN0IGFsc28gY29weSBj dXJzZXMuaCB0byAvdXNyL2luY2x1ZGUuICBCZSBhd2FyZSB0aGF0IGlmIHlvdSBoYXZlIFdhdGNv bQorIyAxMC42IGluc3RhbGxlZCwgeW91IHNob3VsZCBhbHJlYWR5IGhhdmUgY3Vyc2VzLmgsIHdo aWNoIGlzIHRoZSBuZXcgbmN1cnNlcworIyBsaWJyYXJ5LiBZb3UgbXVzdCBiYWNrIGl0IHVwIGFu ZCB1c2UgZnJlZSBjdXJzZXMuaCBpbnN0ZWFkLCBzaW5jZSBuY3Vyc2VzIGlzCisjIG9ubHkgZm9y IDMyLWJpdCBhcHBsaWNhdGlvbnMgYW5kIHNvbWUgZGVmaW5pdGlvbnMgaW4gdGhlc2UgZmlsZXMg YXJlCisjIGRpZmZlcmVudCAoZS5nLiwgY2xlYXJvaygpKS4gIEZvciBzYWZldHksIGN1cnNlcyBp cyBub3QgZGVmaW5lZCBpbiBidWlsZC4KKyMKKyMgSW4gNy4wIC1ETk9IRUxQIGFkZGVkIHRvIGtl ZXAgY2t1dXMyLmMgZnJvbSBibG93aW5nIHVwOyBOT0NTRVRTIGFuZCBOT1NQTAorIyBhZGRlZCBi ZWNhdXNlIGNrdXVzNCB3YXMgYmxvd2luZyB1cCwgYW5kIE5PRkxPQVQganVzdCBiZWNhdXNlIGl0 IHNlZW1lZAorIyBkYW5nZXJvdXMgKHJlbW92ZSAtRE5PRkxPQVQgaWYgeW91IHdhbnQgdG8gdHJ5 IGl0KSwgVGhlIHJlc3VsdCB3b3JrcyBPSworIyBleGNlcHQgZm9yIHNvbWUgbXlzdGVyaW91cyBi ZWVwcyB1cG9uIHRlcm1pbmF0aW9uIG9mIHRoZSB0b3AtbGV2ZWwga2V5d29yZC4KKyMKKyMgVGhp bmdzIHRvIHRyeSBuZXh0IHRpbWUgd2UgZ2V0IGluIHRyb3VibGU6CisjICAuIENoYW5nZSAtenQx MDAgdG8gc29tZXRoaW5nIHNtYWxsZXIgbGlrZSAtenQyNQorIyAgLiBDaGFuZ2UgLU9hdHggdG8g LU9taWxlcmF0IChlbmFibGUgc3RhY2sgY2hlY2tpbmcpCisjICAuIE1heWJlIGdldCByaWQgb2Yg LXY5LjUyIC0tIGl0J3Mgb25seSB0aGVyZSBiZWNhdXNlIHdlIHdlcmUgd2FybmVkLgorIworcW54 MTY6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUU5YIDQuMjEsIDE2LWJp dC4uLicKKwkkKE1BS0UpIHhlcm1pdCBcCisJIkxOS0ZMQUdTID0gLTIgLW1sIC1OIDI2MDAwIiBc CisJIkNGTEFHUyA9IC0yIC1PYXR4IC16YyAtenQxMDAgLW1sIC1EUU5YIC1EUU5YMTYgLUROT1VV Q1AgLUROT0hFTFAgXAorCS1EQ0tfUkVESVIgLURTRUxFQ1QgLURTRUxFQ1RfSCAtRE5PSkMgLURO T0dFVFVTRVJTSEVMTCAtRE5PQ1NFVFMgXAorCS12OS41MiAtRFRDUFNPQ0tFVCAtRENLX1JUU0NU UyAtRENLX0FOU0lDIC1ETk9JTklUR1JPVVBTIC1ETk9LVkVSQlMgXAorCS1ETk9SQU5ET00gLURO T0NTRVRTIC1ETk9TUEwgLUROT0ZMT0FUIC1EUElEX1Q9cGlkX3QgJChLRkxBR1MpIgorCisjIFFO WCA0LjEsIDE2LWJpdCB2ZXJzaW9uLCB3aXRoIFdhdGNvbSBDIDguNSBvbiBpMjg2IFBDcyBhbmQg YWJvdmUuCisjIHN0YWNrc2l6ZSAyNjAwMCwgb2JqZWN0cyBsYXJnZXIgdGhhbiAxMDAgYnl0ZXMg aW4gdGhlaXIgb3duIHNlZ21lbnRzLAorIyBzdHJpbmcgY29uc3RhbnRzIHRvIHRoZSBjb2Rlc2Vn bWVudCwgZXRjLiAgQWRkIC1ETk9VVUNQIGlmIGRlc2lyZWQuCitxbngxNl80MToKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBRTlggNC4xLCAxNi1iaXQuLi4nCisJJChNQUtF KSB4ZXJtaXQgXAorCSJMTktGTEFHUyA9IC1taCAtTiAyNjAwMCIgIkNGTEFHUyA9IC1XYywtZnBj IC1XYywtaiAtRE5PR0VUVVNFUlNIRUxMIFwKKwktV2MsLU9scyAtV2MsLXpkZiAtV2MsLXpjIC1X YywtenQxMDAgLW1oIC1EUE9TSVggLURRTlggLURESVJFTlQgXAorCS1ETk9DWVJJTCAtRE5PREVC VUcgLUROT01TRU5EIC1ETUlOSURJQUwgLUROT1hNSVQgLUROT1NDUklQVCAtRE5PU1BMIFwKKwkt RE5PU0VUS0VZIC1ETk9JTklUR1JPVVBTIC1EUU5YMTYgLURQSURfVD1waWRfdCAkKEtGTEFHUyki CisKKyMgUU5YIE5ldXRyaW5vIDIgKHB3YWVjaHRsZXJAcW54LmRlKSBjcm9zc2NvbXBpbGVkIG9u IFFOWCA0LjI1LgorIyBHZXRzIGxvdHMgb2YgY29tcGlsZXIgd2FybmluZ3MuCitxbnhfbnRvMis6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUU5YIE5ldXRyaW5vIDIrICcK KwljYyAtbyB3YXJ0IGNrd2FydC5jCisJJChNQUtFKSB4ZXJtaXQgXAorCSJDQyA9IHFjYyAtVmdj Y19udG94ODYiIFwKKwkiQ0MyID0gcWNjIC1WZ2NjX250b3g4NiIgXAorCSJMTktGTEFHUyA9ICIg XAorCSJDRkxBR1MgPSAtRE5FVVRSSU5PIC1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1ETk9HRVRV U0VSU0hFTEwgXAorCS1ETk9VVUNQIC1EQ0tfV1JFRlJFU0ggLURDS19SRURJUiAtRFNFTEVDVCAt RFNFTEVDVF9IIC1EQ0tfUlRTQ1RTIFwKKwktRE5PSkMgLUROT0lOSVRHUk9VUFMgLURDS19BTlNJ QyAtRFBJRF9UPXBpZF90IC1EVU5JWCAtRERJUkVOVCBcCisJLURNWVJFQUQgLURCU0Q0NE9SUE9T SVggLURTVk9SUE9TSVggLUROREdQV05BTSAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQg LWxuY3Vyc2VzICIKKworIyBRTlggNiAoPSBOZXV0cmlubyAyLnh4KSBuYXRpdmUgYnVpbGQgKGtp cnVzc2VsQGNpc2NvLmNvbSkuCitxbng2OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZF UikgZm9yIFFOWDYnCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD1RTlg2IFwKKwkiQ0ZMQUdTID0g LURQT1NJWCAtRENLX1BPU0lYX1NJRyAtRE5FVFBUWSAtRE5PQVJST1dLRVlTIFwKKwktRFVTRV9U SU9DU0RUUiAtREJJR0JVRk9LIC1EQ0tNQVhPUEVOPTEwMCAtRFJMT0dDT0RFIC1ETk9SRUFMUEFU SCBcCisJLURNQVhOQU1MRU49NDggLURRTlg2IC1EVVNFX1RFUk1JTyAtRElOSVRfU1BUWSBcCisJ LURDS19DVVJTRVMgLURDS19XUkVGUkVTSCAtRENLX05FV1RFUk0gLUREWU5BTUlDIFwKKwktRFRD UFNPQ0tFVCAtRE5PR0VUVVNFUlNIRUxMIC1EQ0tfUkVESVIgLURTRUxFQ1QgLURTRUxFQ1RfSCBc CisJLURDS19SVFNDVFMgLUROT0pDIC1EU1ZPUlBPU0lYIC1EQlNENDRPUlBPU0lYIC1ETk9VVUNQ IC1EQ0tfQU5TSUMgXAorCSQoS0ZMQUdTKSAtTyIgXAorCSJMSUJTPSAtbHNvY2tldCAgLWxuY3Vy c2VzIgorCisjTUlOSVgvMi4wIDMyIEJpdCB2ZXJzaW9uIGZvciBpbnRlbCAzODYrIHJ1bm5pbmcg dGhlIFBPU0lYLWNvbXBsaWFudCBNSU5JWAorIyB2ZXJzaW9uIDIuMCAoVGhlIGRlZmluaXRpb24g b2YgZmF0YWwgYXZvaWRzIGEgY29uZmxpY3Qgd2l0aCBhIHN5bWJvbCBieQorIyB0aGUgc2FtZSBu YW1lIGluIHRoZSBjdXJzZXMgbGlicmFyeS4pIEl0IGlzIGltcG9zc2libGUgdG8gY29tcGlsZSB3 aXRoCisjIG5ldHdvcmsgc3VwcG9ydCBzaW5jZSBNaW5peCBkb2VzIG5vdCBzdXBwb3J0IEJlcmtl bGV5IHNvY2tldHMuCisjIE5vdGU6IHVzZSBjaG1lbSBsaWJlcmFsbHkgb24gdGhlIGNvbXBpbGVy IHBhc3NlcywgbWFrZSwgYW5kIHRoZSBmaW5hbAorIyBrZXJtaXQgZXhlY3V0YWJsZS4gKDMgbWVn YWJ5dGVzIG9mIG1lbW9yeSBmb3IgZWFjaCBpcyBzdWZmaWNpZW50LikKKyMgRnJvbSBUZXJyeSBN Y0Nvbm5lbGwsIFN5cmFjdXNlIFUsIGFuZCBXaWxsIFJvc2UuICBXaWxsIHNheXM6CisjIFRoZSBz dGFja3MgZm9yIG1ha2UgYW5kIHNvbWUgY29tcGlsZXIgcGFzc2VzIG5lZWRlZCB0byBiZSBpbmNy ZWFzZWQKKyMgd2l0aCBjaG1lbSBhcyBmb2xsb3dzOgorIyAgIG1ha2UgMU1CCisjICAgL3Vzci9s aWIvZW1fY2VtY29tLmFuc2kgM01CCisjICAgL3Vzci9saWIvZW1fb3B0IDFNQgorIyAgIC91c3Iv bGliL2kzODYvY2cgMU1CCisjICAgL3Vzci9saWIvaTM4Ni9hcyAxTUIKKyMgVGhlIGNvbXBpbGVy IHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2FzIHNldCB0byAvdXNyL3RtcCB2aWEgdGhlIFRNUERJUgor IyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgbW9yZSB0aGFuIDFNQiBvZiB0ZW1wb3Jhcnkgc3BhY2Ug d2FzIG5lZWRlZC4KKyMgS2VybWl0IGl0c2VsZiBuZWVkcyBhdCBsZWFzdCAxTUIgb2Ygc3RhY2su CittaW5peDIwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYIDIu MC8zODYuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBFWFQ9 byBcCisJIkNGTEFHUz0gIC13byAtRFY3IC1ETUlOSVgyIC1ETUlOSVggLURTSUdfViAtRF9QT1NJ WF9TT1VSQ0UgXAorCS1EQ0tDUFU9XFxcImktMzg2XFxcIiAtRE5PSUtTRCAtRGZhdGFsPW15ZmF0 YWwgLURDS19DVVJTRVMgLUROT0xFQVJOIFwKKwktRE5PU1lTTE9HIC1EVVNFX01FTUNQWSAtRE5P UkVBTFBBVEggJChLRkxBR1MpIiAiTElCUz0gLWxjdXJzZXMiCisKKyNNSU5JWC8zODYgKFBDIE1p bml4IG1vZGlmaWVkIGJ5IEJydWNlIEV2YW5zIGluIEF1c3RyYWxpYSBmb3IgMzg2IGFkZHJlc3Np bmcpCisjIEZvciBNSU5JWCAxLjUrIChidXQgPCAyLjApCittaW5peDM4NjoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSU5JWC8zODYuLi4nCisJQGVjaG8gJ1RPVEFMTFkg VU5URVNURUQhJworCSQoTUFLRSkgd2VybWl0IEVYVD1zIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChA KX0gXAorCSJDRkxBR1M9IC1EVjcgLURNSU5JWCAtRF9QT1NJWF9TT1VSQ0UgLUROT0xFQVJOICQo S0ZMQUdTKSIKKworI01JTklYLzM4NiBNaW5peCBtb2RpZmllZCBieSBCcnVjZSBFdmFucyBpbiBB dXN0cmFsaWEgdG8gdXNlIDM4NiBhZGRyZXNzaW5nCittaW5peDM4NmdjYzoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNSU5JWC8zODYgd2l0aCBnY2MuLi4nCisJQGVjaG8g J1RPVEFMTFkgVU5URVNURUQhJworCSQoTUFLRSkgd2VybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gIkNDPWdjYyAtZyAtTyIgIkNDMj1nY2MgLWciIFwKKwkiQ0ZMQUdTPSAtRFY3IC1ETUlO SVggLURfUE9TSVhfU09VUkNFIC1ETk9MRUFSTiAkKEtGTEFHUykiCisKKyNNSU5JWCAtIDY4ayB2 ZXJzaW9uIHdpdGggQUNLIGNvbXBpbGVyLgorIyBJZiB5b3UgaGF2ZSB0cm91YmxlIGNvbXBpbGlu ZyBvciBydW5uaW5nIHdhcnQsICJ0b3VjaCB3YXJ0Ii4KKyMgSWYgaXQgc3RpbGwgZG9lc24ndCB3 b3JrLCAidG91Y2ggY2tjcHJvLmMiLgorIyBUaGUgdmVyc2lvbiBjb25maWd1cmVkIGJlbG93IGhh cyBtYW55IGZlYXR1cmVzIHJlbW92ZWQsIGluY2x1ZGluZworIyB0aGUgVFJBTlNNSVQsIE1TRU5E LCBIRUxQLCBhbmQgU0NSSVBUIGNvbW1hbmRzLCBpbnRlcm5hdGlvbmFsCisjIGNoYXJhY3RlciBz ZXQgc3VwcG9ydCwgYW5kIHRoZSBlbnRpcmUgc2NyaXB0IHByb2dyYW1taW5nIGxhbmd1YWdlLgor IyBCdXQgaXQgZG9lcyBoYXZlIGFuIGludGVyYWN0aXZlIGNvbW1hbmQgcGFyc2VyLgorIyBNYWtl IHN1cmUgbWFrZSgxKSBoYXMgKGF0IGxlYXN0KSAxMDAwMDAgY2htZW1vcnkhCisjIElmIHlvdSBh cmUgdXNpbmcgdGhlIEFtc3RlcmRhbSBDIGNvbXBpbGVyLCB5b3UgbWlnaHQgaGF2ZSB0byBhZGQg Ii1EX19BQ0tfXyIuCittaW5peDY4azoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBNSU5JWCA2OGsgd2l0aCBBQ0suLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURWNyAtRE1JTklYIC1EX01JTklYIC1EX1BPU0lY X1NPVVJDRSAtRE5PTEVBUk4gXAorCS1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExP RyBcCisJLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT1NQTCAkKEtGTEFHUykgXAorCS1EUElEX1Q9 cGlkX3QgLURVSURfVD11aWRfdCAtREdJRF9UPWdpZF90IC1EU0lHX1YiCisKKyNNSU5JWCAtIDY4 ayB2ZXJzaW9uIHdpdGggYzY4IGNvbXBpbGVyLgorIyBJZiB5b3UgaGF2ZSB0cm91YmxlIGNvbXBp bGluZyBvciBydW5uaW5nIHdhcnQsICJ0b3VjaCB3YXJ0IiBvcgorIyAidG91Y2ggY2tjcHJvLmMi LiBDb21waWxpbmcgY2t1ZGlhLmMgKG5vIC1ETk9ESUFMISkgbWlnaHQgZmFpbC4gOi0oCisjIEdp dmUgYzY4IDI1MDAwMCBieXRlcyBvZiBzdGFjaytoZWFwOyBtYWtlIHN1cmUgbWFrZSgxKSBoYXMg YXQgbGVhc3QKKyMgMTAwMDAwIGNobWVtb3J5LiAgT24gYSAxTUIgQXRhcmkgU1QgdGhpcyBtZWFu cyB0aGF0IHRoZSByZWN1cnNpdmUKKyMgY2FsbCBvZiBtYWtlIGZhaWxzIGR1ZSB0byBtZW1vcnkg c2hvcnRhZ2UuICBUcnkgIm1ha2UgLW4gbWluaXhjNjggPm1ha2VpdCIsCisjIGZvbGxvd2VkIGJ5 ICIuIG1ha2VpdCIuICBPdGhlcndpc2UsIGFzIGFib3ZlLgorbWluaXhjNjg6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTUlOSVggNjhrIHdpdGggYzY4Li4uJworCSQoTUFL RSkgd2VybWl0ICJDQz0gY2MgLWM2OCIgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNG TEFHUz0gLURWNyAtRE1JTklYIC1EX01JTklYIC1EX1BPU0lYX1NPVVJDRSAtRE5PTEVBUk4gXAor CS1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyBcCisJLUROT1NDUklQVCAtRE5P Q1NFVFMgLUROT1NQTCAkKEtGTEFHUykgXAorCS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAt REdJRF9UPWdpZF90IC1EU0lHX1YiCisKKyNNSU5JWCAtIDY4ayB2ZXJzaW9uIHdpdGggYzY4IGNv bXBpbGVyLgorI0EgdmFyaWF0aW9uIG9uIHRoZSBhYm92ZSB0aGF0IHdhcyByZWNlbnRseSAoU2Vw IDk1KSByZXBvcnRlZCB0byB3b3JrLgorbWluaXhjNjhhOgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIE1JTklYIDY4ayB3aXRoIGM2OC4uLicKKwkkKE1BS0UpIHdlcm1pdCAi Q0M9IGNjIC1jNjgiIEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1M9IC1EVjcg LURNSU5JWCAtRF9NSU5JWCAtRF9QT1NJWF9TT1VSQ0UgXAorCS1EQ0tfQU5TSUMgLUROT0RFQlVH IC1ETk9UTE9HIC1ETUlOSURJQUwgLURFWFRFTiAtRE1ZQ1VSU0VTIFwKKwktRE5PU0NSSVBUIC1E Tk9DU0VUUyAtRE5PU1BMIC1ETk9KQyAtRERJUkVOVCAtRE5PTEVBUk4gXAorCS1ETk9TRVRLRVkg LUROT0VTQ1NFUSAkKEtGTEFHUykgXAorCS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAtREdJ RF9UPWdpZF90IC1EU0lHX1YiCisKKyNNSVBTIENvbXB1dGVyIFN5c3RlbXMgd2l0aCBVTUlQUyBS SVNDL09TIDQuNTIgPSBBVCZUIFVOSVggU3lzdGVtIFYgUjMuMC4KKyNSZW1vdmUgLUROT0pDIGlm IGpvYiBjb250cm9sIGNhbiBiZSBzYWZlbHkgdXNlZC4KK21pcHM6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTUlQUyBSSVNDL09TLi4uJworCSQoTUFLRSkgd2VybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRE1JUFMgLURESVJFTlQgLURD S19QT0xMIC1ETk9KQyAtRE5PTEVBUk4gLURQSURfVD1pbnQgXAorCS1ER0lEX1Q9Z2lkX3QgLURV SURfVD11aWRfdCAtaSAtTzE1MDAgJChLRkxBR1MpIgorCisjQXMgYWJvdmUsIGJ1dCB3aXRoIFRD UC9JUCBhbmQgZnVsbHNjcmVlbiBzdXBwb3J0LgorbWlwc3RjcGM6CisJQGVjaG8gJ01ha2luZyBD LUtlcm1pdCAkKENLVkVSKSBmb3IgTUlQUyBSSVNDL09TLi4uJworCSQoTUFLRSkgeGVybWl0IEtU QVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRE1JUFMgLURESVJFTlQgLURD S19QT0xMIC1ETk9KQyBcCisJLURUQ1BTT0NLRVQgLURDS19DVVJTRVMgLUkvdXNyL2luY2x1ZGUv YnNkIFwKKwktRFBJRF9UPWludCAtREdJRF9UPWdpZF90IC1EVUlEX1Q9dWlkX3QgLWkgLU8xNTAw ICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxjdXJzZXMgLWxic2QiCisKKyNNb3Rvcm9sYSBEZWx0 YSBTeXN0ZW0gVi82OCBSMywgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBpbnQuCisjVXNl cyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIHV1Y3AuICBTdXBwb3J0cyBUQ1AvSVAuCisjQWZ0 ZXIgYnVpbGRpbmcsIHVzZSAibWNzIC1kIiB0byByZWR1Y2Ugc2l6ZSBvZiB0aGUgZXhlY3V0YWJs ZSBwcm9ncmFtLgorc3Y2OHIzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9y IE1vdG9yb2xhIFVOSVggU3lzdGVtIFYvNjggUjMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdF VD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EU1ZSMyAtRFNWNjggLURESVJFTlQg LURIREJVVUNQIC1ETk9fRE5TX1NSViAtRFRDUFNPQ0tFVCBcCisJLUROT1VOSUNPREUgLUROT0xF QVJOIC1EVVNFX01FTUNQWSAkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IgorCisjTW90b3JvbGEg RGVsdGEgU3lzdGVtIFYvNjggUjNWNSwgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBpbnQu CisjVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIFVVQ1AuICBTdXBwb3J0cyBUQ1AvSVAu CisjQWZ0ZXIgYnVpbGRpbmcsIHVzZSAibWNzIC1kIiB0byByZWR1Y2Ugc2l6ZSBvZiB0aGUgZXhl Y3V0YWJsZSBwcm9ncmFtLgorc3Y2OHIzdjU6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgTW90b3JvbGEgVU5JWCBTeXN0ZW0gVi82OCBSM1Y1JworCSQoTUFLRSkgd2VybWl0 IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAorCSJDRkxBR1MgPSAtRFNWUjMgLURTVjY4IC1E RElSRU5UIC1ESERCVVVDUCAtRE5PX0ROU19TUlYgLURVU0VfTUVNQ1BZIFwKKwktRFRDUFNPQ0tF VCAtRElOQUREUlggLUROT1VOSUNPREUgLURGTkZMT0FUIC1ETk9MRUFSTiAkKEtGTEFHUykgLU8i IFwKKwkiTE5LRkxBR1MgPSIgIkxJQlMgPSAtbGluZXQgLWxtIgorCisjTW90b3JvbGEgTVZNRTE0 NyBTeXN0ZW0gVi82OCBSMyBWNS4xLiBSZXF1aXJlcyBnY2MgMi4xIHRvIGNvbXBpbGUuCisjQWZ0 ZXIgYnVpbGRpbmcsIHVzZSAibWNzIC1kIiB0byByZWR1Y2Ugc2l6ZSBvZiB0aGUgZXhlY3V0YWJs ZSBwcm9ncmFtLgorc3Y2OHIzdjUxOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYvNjggUjNWNS4xJworCSQoTUFLRSkgd2VybWl0ICJD Qz1nY2MtZGVsdGEiICJDQzI9Z2NjLWRlbHRhIiBcCisJS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUyA9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1AgLUROT0RFQlVHIC1ETk9f RE5TX1NSViAtRE5PTEVBUk4gXAorCS1ETk9VTklDT0RFIC1ERk5GTE9BVCAtRFNWNjggLURVU0Vf TUVNQ1BZICQoS0ZMQUdTKSBcCisJLU8yIC12IC1mdHJhZGl0aW9uYWwiIFwKKwkiTE5LRkxBR1Mg PSAtcyAtdiIgIkxJQlMgPSAtbG04ODEgLWxtIgorCisjTW90b3JvbGEgTVZNRTE0NyBTeXN0ZW0g Vi82OCBSM1Y2LiBkZXJpdmVkIGZyb20gTW90b3JvbGEgRGVsdGEgU3lzdGVtIFIzVjUuCisjQ2hl Y2tlZCBvbiBsYXJnZXIgTW90b3JvbGEgU3lzdGVtIFYvNjggUjNWNiAod2l0aCBOU0UgTmV0d29y ayBTZXJ2aWNlcyBFeHQuKQorI0FmdGVyIGJ1aWxkaW5nLCB1c2UgInN0cmlwIiB0byByZWR1Y2Ug c2l6ZSBvZiB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtLgorIyAiTElCUyA9IC1sbnNsIiByZW1vdmVk IGluIEMtS2VybWl0IDYuMSAtIHB1dCBiYWNrIGlmIG5lZWRlZC4KKyMgIkxJQlMgPSBsbSIgYWRk ZWQgaW4gNy4xLzguMCBmb3IgZmxvYXRpbmctcG9pbnQgbWF0aC4KKyMgY2t1dXNyLmMgY2xvYmJl cnMgdGhlIG9wdGltaXplci4KK3N2NjhyM3Y2OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChD S1ZFUikgZm9yIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYvNjggUjNWNicKKwkkKE1BS0UpIGNrdXVz ci4kKEVYVCkgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUyA9IC1EU1Y2OFIz VjYgLURESVJFTlQgLURIREJVVUNQIC1ETk9MT0dJTiAtRE5PSU5JVEdST1VQUyBcCisJLUROT1NZ TUxJTksgLUROT1JFRElSRUNUIC1ETk9HRlRJTUVSIC1EVENQU09DS0VUIC1ERENMR0VUQ1dEIC1E U1Y2OCBcCisJLUROT19ETlNfU1JWIC1ETk9VTklDT0RFIC1ERk5GTE9BVCAtRFNFTEVDVCAtRFVT RV9NRU1DUFkgJChLRkxBR1MpIgorCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDot JChAKX0gXAorCSJDRkxBR1MgPSAtTyAtRFNWNjhSM1Y2IC1ERElSRU5UIC1ESERCVVVDUCAtRE5P TE9HSU4gLUROT0lOSVRHUk9VUFMgXAorCS1ETk9TWU1MSU5LIC1ETk9SRURJUkVDVCAtRE5PR0ZU SU1FUiAtRFRDUFNPQ0tFVCAtRERDTEdFVENXRCAtRFNWNjggXAorCS1ETk9fRE5TX1NSViAtRE5P VU5JQ09ERSAtREZORkxPQVQgLURTRUxFQ1QgLURVU0VfTUVNQ1BZICQoS0ZMQUdTKSIgXAorCSJM TktGTEFHUyA9IiAiTElCUyA9IC1sbSIKKworI01vdG9yb2xhIERlbHRhIFN5c3RlbSBWLzg4IFIz Miwgc2lnbmFsKCkgaXMgdm9pZCByYXRoZXIgdGhhbiBpbnQuCisjVXNlcyBkaXJlbnQuaCBhbmQg SG9uZXkgRGFuQmVyIHV1Y3AuICBOZWVkcyA8c3lzL3V0aW1lLmg+IGZvciBzZXR0aW5nCisjZmls ZSBkYXRlcy4gIFN1cHBvcnRzIFRDUC9JUC4KKyNBZnRlciBidWlsZGluZywgdXNlICJtY3MgLWQi IHRvIHJlZHVjZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlIHByb2dyYW0uCitzdjg4cjMyOgorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1vdG9yb2xhIFVOSVggU3lzdGVtIFYv ODggUjMyLi4uJworCSQoTUFLRSkgeGVybWl0IEtUQVJHRVQ9JCR7S1RBUkdFVDotJChAKX0gXAor CSJDRkxBR1MgPSAtRFNWODhSMzIgLURESVJFTlQgLURIREJVVUNQIC1EVENQU09DS0VUIFwKKwkt RFNZU1VUSU1FSCAtRENLX0NVUlNFUyAtRE5PR0VUVVNFUlNIRUxMIC1ER1RPRE9ORUFSRyAkKEtG TEFHUykgLU8iIFwKKwkiTElCUz0gLWxjdXJzZXMgLWxyZXNvbHYiICJMTktGTEFHUyA9IC1zIgor CisjTW90b3JvbGEgRGVsdGEgU3lzdGVtIFYvODggUjQwLiAgSGFzIDxzeXMvdGVybWlveC5oPiwg cmVndWxhciBCZXJrZWxleQorI3NvY2tldHMgbGlicmFyeSwgaS5lLiBpbi5oIGFuZCBpbmV0Lmgg YXJlIG5vdCBtaXNwbGFjZWQgaW4gc3lzIChyYXRoZXIgdGhhbgorI25ldGluZXQgYW5kIGFycGEs IHJlc3BlY3RpdmVseSkuICBVc2VzIEFOU0kgQyBjb25zdHJ1Y3RzLCBhZHZpc29yeSBmaWxlCisj bG9ja2luZyBvbiBkZXZpY2VzLCBldGMuICBjdXJzZXMgc3VwcG9ydCBhZGRlZC4gIFJlcG9ydGVk bHksIHRoZQorIy91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCBmaWxlIGhhcyBhIGJ1ZyB3aGljaCBt dXN0IGJlIGZpeGVkIGJlZm9yZSB0aGlzCisjbWFrZWZpbGUgZW50cnkgY2FuIHdvcmsgY29ycmVj dGx5LiAgVGhlICJpZiBERUJVRyIgZGlyZWN0aXZlIGF0IGFib3V0IGxpbmUKKyMzMjAgbXVzdCBi ZSBjaGFuZ2VkIHRvICJpZmRlZiBERUJVRyIgKFJlcG9ydGVkbHksIHRoaXMgd2FzIGZpeGVkIGlu CisjaW4gU3lzdGVtIFYvODggUjQuMykuCisjQWZ0ZXIgYnVpbGRpbmcsIHVzZSAibWNzIC1kIiB0 byByZWR1Y2Ugc2l6ZSBvZiB0aGUgZXhlY3V0YWJsZSBwcm9ncmFtLgorc3Y4OHI0MDoKKwlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNb3Rvcm9sYSBVTklYIFN5c3RlbSBWLzg4 IFI0MC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki Q0ZMQUdTID0gLU8gLURTVlI0IC1ETU9UU1Y4OFI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJN SU9YIFwKKwktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE5PR0VUVVNFUlNIRUxMIC1ER1RPRE9O RUFSRyAtREZORkxPQVQgXAorCSQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbHNvY2tldCAtbG5zbCAt bGN1cnNlcyAtbHJlc29sdiAtbG0iICJMTktGTEFHUyA9IC1zIgorCisjQXMgYWJvdmUgYnV0IHdp dGhvdXQgdGhlIGZsb2F0aW5nLXBvaW50IG1hdGggbGlicmFyeS4KK3N2ODhyNDBubToKKwlAZWNo byAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNb3Rvcm9sYSBVTklYIFN5c3RlbSBWLzg4 IFI0MC4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJHRVQ6LSQoQCl9IFwKKwki Q0ZMQUdTID0gLU8gLURTVlI0IC1ETU9UU1Y4OFI0IC1ERElSRU5UIC1ESERCVVVDUCAtRFNURVJN SU9YIFwKKwktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAtRE5PR0VUVVNFUlNIRUxMIC1ER1RPRE9O RUFSRyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxzb2NrZXQgLWxuc2wgLWxjdXJzZXMgLWxyZXNv bHYiICJMTktGTEFHUyA9IC1zIgorCisjQXMgYWJvdmUgYnV0IHdpdGggZmxvYXRpbmctcG9pbnQg bWF0aCBsaWJyYXJ5IHN1cHBvcnQgXGZmcC4uLigpIGZ1bmN0aW9ucworI2FuZCBTLUV4cHJlc3Np b25zLgorCisjT2xpdmV0dGkgWC9PUyBSMi4zLCAzLnguCisjTk9URVM6CisjIC4gSWYgeW91IGJ1 aWxkIHRoZSBleGVjdXRhYmxlIG9uIDIueCBYL09TLCBpdCB3aWxsIGFsc28gcnVuIG9uIDMueC4K KyMgLiBJZiB5b3UgYnVpbGQgaXQgb24gMy54IFgvT1MsIGl0IHdpbGwgTk9UIHJ1biBvbiAyLngu CisjIC4gS2VybWl0IGNhbiBydW4gd2l0aCBubyBwcml2aWxlZ2VzIHVubGVzcyB0aGUgdXVjcCBs aW5lcyBhcmUgcHJvdGVjdGVkLAorIyAgIGluIHdoaWNoIGNhc2Uga2VybWl0IG11c3QgYmUgb3du ZWQgYnkgdXVjcCB3aXRoIHN1aWQgYml0IHNldDoKKyMgICBjaG93biB1dWNwIGtlcm1pdCA7IGNo bW9kIDQxMTEga2VybWl0LgoreG9zMjM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVS KSBmb3IgT2xpdmV0dGkgWC9PUy4uLicKKwkkKE1BS0UpIHhlcm1pdCBLVEFSR0VUPSQke0tUQVJH RVQ6LSQoQCl9IFwKKwknQ0ZMQUdTPS1PTE0gLURPWE9TIC1EVENQU09DS0VUIC1ESERCVVVDUCAk KEtGTEFHUyknIFwKKwkiTElCUz0iICJMTktGTEFHUz0iCisKKyNBcyBhYm92ZSwgYnV0IHdpdGgg Y3Vyc2VzLgoreG9zMjNjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE9s aXZldHRpIFgvT1Mgd2l0aCBjdXJzZXMuLi4nCisJJChNQUtFKSB4ZXJtaXQgS1RBUkdFVD0kJHtL VEFSR0VUOi0kKEApfSBcCisJJ0NGTEFHUz0tT0xNIC1ET1hPUyAtRFRDUFNPQ0tFVCAtREhEQlVV Q1AgLURDS19DVVJTRVMgJChLRkxBR1MpJyBcCisJIkxJQlM9LWxjdXJzZXMiICJMTktGTEFHUz0i CisKK2NrdXVpZDoKKwlAZWNobyAnYnVpbGRpbmcgQy1LZXJtaXQgJChDS1ZFUikgc2V0LVVJRC9z ZXQtR0lEIHRlc3QgcHJvZ3JhbXMnCisJJChDQykgLURBTllCU0QgLURTQVZFRFVJRCAtbyBja3V1 aWQxIGNrdXVpZC5jCisJJChDQykgLURBTllCU0QgLW8gY2t1dWlkMiBja3V1aWQuYworCSQoQ0Mp IC1EQU5ZQlNEIC1ETk9TRVRSRVUgLW8gY2t1dWlkMyBja3V1aWQuYworCSQoQ0MpIC1EQU5ZQlNE IC1EU0VURVVJRCAtRE5PU0VUUkVVIC1vIGNrdXVpZDQgY2t1dWlkLmMKKwkkKENDKSAtbyBja3V1 aWQ1IGNrdXVpZC5jCisJQGVjaG8gJ1JlYWQgdGhlIHRvcCBvZiBja3V1aWQuYyBmb3IgZGlyZWN0 aW9ucy4uLmZvciB0ZXN0aW5nJworCUBlY2hvICd5b3UgbXVzdCBtYWtlIHRoZXNlIHByb2dyYW1z IHNldHVpZCBhbmQgc2V0Z2lkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEEgTiBUIEkgUSBV IEkgVCBJIEUgUworIworIyBUaGUgZm9sbG93aW5nIGFyZSBhbnRpcXVlIHRhcmdldHMgZnJvbSBD LUtlcm1pdCA1QSBvciBlYXJsaWVyLiAgVGhleSBoYXZlCisjIG5vdCBiZWVuIHVwZGF0ZWQgb3Ig dGVzdGVkIGluIHllYXJzLiAgTW9zdCBvZiB0aGVtIHdpbGwgbmVlZCByZWNlbnQgZmVhdHVyZXMK KyMgZGlzYWJsZWQsIHVzdWFsbHkgd2l0aCBzb21lIGNvbWJpbmF0aW9uIG9mIC1ETk9VTklDT0RF LCAtRE5PSUtTRCwgLUROT0FOU0ksCisjIC1ETk9DS0dITkxIT1NULCAtRE5PX0ROU19TUlYsIC1E Tk9SRURJUkVDVCwgLUROT1JFQUxQQVRILCAtRE5PQ1VSU0VTLCBldGMuCisjIFRoZXkgYXJlIGFs c28gbWlzc2luZyB0aGUgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBidXNpbmVzcy4KKyMgRm9y IGRldGFpbHMgc2VlIGNrdWlucy50eHQgYW5kIGNrY2NmZy50eHQuCisjCisjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisKKyNCZXJrZWxleSBVbml4IDIuOCwgMi45IGZvciBQRFAtMTFzIHdpdGggSSZEIHNw YWNlLCBtYXliZSBhbHNvIFVsdHJpeC0xMT8/PworI0MtS2VybWl0KDVBKSBpcyBzaW1wbHkgdG9v IGxhcmdlIChldmVuIHR1cm5pbmcgb2ZmIGFsbW9zdCBldmVyeSBmZWF0dXJlCisjYXZhaWxhYmxl KSB0byBydW4gd2l0aG91dCBib3RoIEkmRCBzcGFjZSBwbHVzIG92ZXJsYXlzLiAgVGhlIG9sZCBj b21tZW50Cisjc3VnZ2VzdGVkIHJ1bm5pbmcgJ3BjYycgYnV0IHRoYXQgd29uJ3QgaGVscC4gIENo YW5naW5nICdjYycgdG8gJ2NrdXN0ci5zZWQnCisjd2lsbCBjYXVzZSBhIHN0cmluZyBleHRyYWN0 aW9uIHRvIGJlIGRvbmUsIHNhdmluZyBEIHNwYWNlIGJ5IG1vdmluZyBzdHJpbmdzCisjdG8gYSBm aWxlLgorYnNkMjk6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciAyLjggb3Ig Mi45QlNELgorCUBlY2hvIFJlYWQgdGhlIG1ha2VmaWxlIGlmIHlvdSBoYXZlIHRyb3VibGUgd2l0 aCB0aGlzLi4uCisJJChNQUtFKSBvdndlcm1pdCBcCisJIkNGTEFHUz0gLURCU0QyOSAtRE5PREVC VUcgLUROT1RMT0cgLUROT0NTRVRTIC1ETk9IRUxQIFwKKwktRE5PU0NSSVBUIC1ETk9TUEwgLURO T1hNSVQgLUROT0RJQUwgJChLRkxBR1MpIiBcCisJIkxOS0ZMQUdTPSAtaSAtbG5kaXIiICJDQz0g Y2MgIiAiQ0MyPSBjYyIKKworYnNkMjEwOgorCUBlY2hvIFBsZWFzZSB1c2UgY2t1YnMyLm1hayB0 byBidWlsZCBDLUtlcm1pdCAkKENLVkVSKSBmb3IgMi4xMEJTRC4KKworYnNkMjExOgorCUBlY2hv IFBsZWFzZSB1c2UgY2t1YnMyLm1hayB0byBidWlsZCBDLUtlcm1pdCAkKENLVkVSKSBmb3IgMi4x MUJTRC4KKworI0NoYXJsZXMgUml2ZXIgRGF0YSBTeXN0ZW1zIFVuaXZlcnNlIHdpdGggVU5PUyBW ZXJzaW9uIDkuMgorY3JkczoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBD aGFybGVzIFJpdmVyIERhdGEgU3lzdGVtcy4uLicKKwltYWtlIHhlcm1pdCBcCisJIkNGTEFHUyA9 IC1EQVRUU1YgLUROT0FOU0kgLURESVJFTlQgLURMT05HRk4gLURUQ1BTT0NLRVQgXAorCS1ETE9D S19ESVI9XFxcIi91c3Ivc3Bvb2wvdXVjcFxcXCIgLUROT1NFVFJFVSBcCisJLURzdXNwZW5kPWtz dXNwZW5kICQoS0ZMQUdTKSAtTyIgIkxOS0ZMQUdTID0iCisKKyNNaWNyb3BvcnQgU1YvQVQgZm9y IElCTSBQQy9BVCAyODYgYW5kIGNsb25lcywgU3lzdGVtIFYgUjIuCisjVGhlIC1PIGZsYWcgbWF5 IGZhaWwgb24gc29tZSBtb2R1bGVzIChsaWtlIGNrdXVzMi5jKSwgaW4gd2hpY2ggY2FzZSB5b3UK KyNzaG91bGQgY29tcGlsZSB0aGVtIGJ5IGhhbmQsIG9taXR0aW5nIHRoZSAtTy4gIElmIHlvdSBn ZXQgImhhc2ggdGFibGUKKyNvdmVyZmxvdyIsIHRyeSBhZGRpbmcgLUROT0RFQlVHLgorI0Fsc28s IHJlcG9ydGVkbHkgdGhpcyBjb21waWxlcyBiZXR0ZXIgd2l0aCBnY2MgdGhhbiB3aXRoIGNjLgor bXBzeXN2OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1pY3JvcG9ydCBT Vi9BVCAyODYuLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1EQVRUU1YgLUROT0xF QVJOICQoS0ZMQUdTKSAtTyAtTWwiICJMTktGTEFHUyA9IC1NbCIKKworI01pY3Jvc29mdCAiWGVu aXgvMjg2IiBlLmcuIGZvciBJQk0gUEMvQVQKK3hlbml4OgorCUBlY2hvICdNYWtpbmcgQy1LZXJt aXQgJChDS1ZFUikgZm9yIFhlbml4LzI4NicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0g LURYRU5JWCAtRE5PRklMRUggLUROT0xFQVJOICQoS0ZMQUdTKSAtRHVuaXggLUYgMzAwMCAtaSIg XAorCSJMTktGTEFHUyA9IC1GIDMwMDAgLWkiCisKKyNQQy9JWCwgSW50ZXJhY3RpdmUgQ29ycCBT eXN0ZW0gSUlJIGZvciBJQk0gUEMvWFQKK3BjaXg6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAk KENLVkVSKSBmb3IgUEMvSVguLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1EUENJ WCAtRElTSUlJIC1ETk9MRUFSTiAkKEtGTEFHUykgXAorCS1Ec2RhdGE9c2RhdGF4IC1PIC1pIiAi TE5LRkxBR1MgPSAtaSIKKworI0ludGVncmF0ZWQgU29sdXRpb25zIEluYyBWOFMgVk1FIDY4MDIw Citpc2k6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciA0LjJCU0Qgb24gSVNJ Li4uCisJJChNQUtFKSB3ZXJtaXQgIkNDID0gY2MiIFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURUQ1BT T0NLRVQgLURJTkFERFJYIC1ERENMUE9QRU4gLURERUJVRyAtRE5PU0VUUkVVIFwKKwktRENLX0NV UlNFUyAtRE5PTEVBUk4gJChLRkxBR1MpIiAiTElCUyA9IC1sY3Vyc2VzIC1sdGVybWNhcCIKKwor I0ludGVyYWN0aXZlIENvcnAgdmVyc2lvbiBvZiBBVCZUIFN5c3RlbSBJSUkKKyNpczM6ICh2ZXJ5 IG9sZCwgcHJvYmFibHkgbm90IHN1ZmZpY2llbnQgZm9yIDVBIG9yIGxhdGVyKQorIwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSBTeXN0ZW0gSUlJLi4uJwor IwltYWtlIHdlcm1pdCAiQ0ZMQUdTID0gLURJU0lJSSAtRGRhdGE9ZGF0YXggLU8gLWkiICJMTktG TEFHUyA9IC1pIgorI1RoZSBmb2xsb3dpbmcgc2hvdWxkIHdvcmssIHVzZSBpdCBpZiB5b3UgZG9u J3QgaGF2ZSBnY2MuCisjVXNlIGlzM2djYyBpZiB5b3UgaGF2ZSBnY2MuCitpczM6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSW50ZXJhY3RpdmUgU3lzdGVtIElJSS4uLicK KwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLURJU0lJSSAkKEtGTEFHUykgLURkYXRhPWRh dGF4IC1ETkFQIC1ESERCVVVDUAorCS1ETE9DS19ESVI9XCIvdXNyL3Nwb29sL3V1Y3BcIiAtRFNJ R1RZUD12b2lkIC1PIC1pIiAiTE5LRkxBR1MgPSAtaSIKKworI0ludGVyYWN0aXZlIFVOSVggU3lz dGVtIFYgUjMsIG5vIG5ldHdvcmsgc3VwcG9ydC4gIFVzZXMgPGRpcmVudC5oPiBhbmQgSG9uZXkK KyNEYW5CZXIgVVVDUC4gIElmIHRoaXMgZW50cnkgZG9lcyBub3QgY29tcGlsZSBjb3JyZWN0bHks IHRyeSBhbnkgb3IgYWxsIG9mIHRoZQorI2ZvbGxvd2luZy4gIFRoZXNlIHN1Z2dlc3Rpb25zIGFs c28gYXBwbHkgbW9yZSBvciBsZXNzIHRvIHRoZSBvdGhlciBpczVyM3h4eAorI2VudHJpZXMgdGhh dCBmb2xsb3cgdGhpcyBvbmUuCisjIC4gUmVtb3ZlIHRoZSBVSURfVCBhbmQgR0lEX1QgZGVmaW5p dGlvbnMsIG9yIGNoYW5nZSB0aGVtIGFzIHJlcXVpcmVkLgorIyAuIENoYW5nZSAtRERJUkVOVCB0 byAtRFNESVJFTlQuCisjIC4gQWRkIC1EU0lHVFlQPXZvaWQuCisjIC4gUmVtb3ZlIC1nIGZyb20g TE5LRkxBR1MuCisjIC4gQWRkIC1ETk9BTlNJIHRvIHJlbW92ZSBjb21waWxlciBjb21wbGFpbnRz IGFib3V0IEFOU0kgQyBjb25zdHJ1Y3Rpb25zCisjIC4gQWRkIG90aGVyIC1ETk94eHgncyB0byBz YXZlIHNwYWNlIChlLmcuIC1ETk9DU0VUUykKKyMgU2VlIHRoZSBuZXh0IGZldyBtYWtlZmlsZSBl bnRyaWVzIGZvciByZWxhdGVkIGV4YW1wbGVzLgorIyBBbHNvIHNlZSBzeXM1cjMyaXMgZm9yIG1h a2luZyBhIHBvcnRhYmxlIGkzODYgU1ZSMyBiaW5hcnkuCitpczVyMzoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSAzODYvaXggb3IgbGF0ZXIuLi4nCisJ QGVjaG8gJ0lmIHRoaXMgZG9lcyBub3Qgd29yayBwbGVhc2UgcmVhZCB0aGUgbWFrZWZpbGUgZW50 cnkuJworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERC VVVDUCAtZyAtRE5PQ1NFVFMgLUROT1JFQUxQQVRIIFwKKwktRFVJRF9UPXVzaG9ydCAtREdJRF9U PXVzaG9ydCAtREkzODZJWCAkKEtGTEFHUykiIFwKKwkiTE5LRkxBR1MgPSAtZyIKKworI0ludGVy YWN0aXZlIENvcnAgU3lzdGVtIFN5c3RlbSBWIFIzIHdpdGggZ2NjCitpczNnY2M6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgSW50ZXJhY3RpdmUgU3lzdGVtIFYgUjMgLyBn Y2MuLi4nCisJJChNQUtFKSB3ZXJtaXQgQ0M9Z2NjIENDMj1nY2MgXAorCSdDRkxBR1MgPSAtRF9T WVNWMyAtRElTSUlJIC1EZGF0YT1kYXRheCAtRE5BUCAtREhEQlVVQ1AgLUROT1JFQUxQQVRIIFwK KwktRExPQ0tfRElSPVwiL3Vzci9zcG9vbC91dWNwXCIgLURTSUdUWVA9dm9pZCAtTycgIkxOS0ZM QUdTID0iCisKKyNJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWIFIzLCBQT1NJWCB2YXJpYW50LiAg VW50ZXN0ZWQuCisjVXNlcyBkaXJlbnQuaCBhbmQgSG9uZXkgRGFuQmVyIHV1Y3AuICBSZWFkIGNv bW1lbnRzIGluIGlzNXIzIGVudHJ5LgoraXM1cjNwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIEludGVyYWN0aXZlIDM4Ni9peCBvciBsYXRlci4uLicKKwkkKE1BS0UpIHdl cm1pdCBcCisJIkNGTEFHUz0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAtZyAtRE5PQ1NFVFMg LUROT1JFQUxQQVRIIFwKKwktREkzODZJWCAtRFBPU0lYICQoS0ZMQUdTKSIgIkxOS0ZMQUdTPSIg IkxJQlM9LWxjcG9zaXgiCisKKyNJbnRlcmFjdGl2ZSBVTklYIFNWUjMgMi4yLjEsIGpvYiBjb250 cm9sLCBjdXJzZXMsIG5vIG5ldCwgZ2NjLgoraXM1cjNnY2M6CisJJChNQUtFKSB3ZXJtaXQgQ0M9 Z2NjIENDMj1nY2MgXAorCSJDRkxBR1M9LWcgLXBvc2l4IC1EU1ZSMyAtRERJUkVOVCAtRE5PUkVB TFBBVEggXAorCS1ESERCVVVDUCAtTyAtRE5PQ1NFVFMgLURJMzg2SVggLURTVlIzSkMgLURDS19D VVJTRVMgXAorCSQoS0ZMQUdTKSIgTE5LRkxBR1M9Ii1wb3NpeCIgTElCUz0iLWxjdXJzZXMgLWxj X3MiCisKKyNJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWIFIzIHdpdGggVENQL0lQIG5ldHdvcmsg c3VwcG9ydC4KKyNOZWVkcyAtbGluZXQgZm9yIG5ldCBmdW5jdGlvbnMuICBzaWduYWwoKSBpcyB2 b2lkIHJhdGhlciB0aGFuIGludC4KKyNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgdXVj cC4gUmVhZCBjb21tZW50cyBpbiBpczVyMyBlbnRyeS4KKyNBbHNvIHNlZSBpczVyM25ldDIgaWYg eW91IGhhdmUgdHJvdWJsZSB3aXRoIHRoaXMgZW50cnkuCitpczVyM25ldDoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSAzODYvaXguLi4nCisJQGVjaG8g J0lmIHRoaXMgZG9lcyBub3Qgd29yayBwbGVhc2UgcmVhZCB0aGUgbWFrZWZpbGUgZW50cnkuJwor CSQoTUFLRSkgd2VybWl0IENDPSIkKENDKSIgQ0MyPSIkKENDMikiIFwKKwkiQ0ZMQUdTID0gLURT VlIzIC1ERElSRU5UIC1ESERCVVVDUCAtRFRDUFNPQ0tFVCAtRE5PUkVBTFBBVEggXAorCS1ESTM4 NklYICQoS0ZMQUdTKSAtTyIgIkxJQlMgPSAtbGluZXQiCisKK2lzNXIzbmV0Z2NjOgorCSQoTUFL RSkgaXM1cjNuZXQgQ0M9Z2NjIENDMj1nY2MKKworI0ludGVyYWN0aXZlIFVOSVggU3lzdGVtIFYg UjMsIG5vIGpvYiBjb250cm9sLCBzaWduYWwoKSB2b2lkIHJhdGhlciB0aGFuIGludC4KKyNVc2Vz IGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIgdXVjcC4gIE5lZWRzIC1saW5ldCBmb3IgbmV0IGZ1 bmN0aW9ucy4KKyNSZWFkIGNvbW1lbnRzIGluIGlzNXIzIGVudHJ5LiAgVXNlIHRoaXMgZW50cnkg aWYgaXM1cjNuZXQgZmFpbHMuCisjU2F2ZXMgc29tZSBzcGFjZSBieSBzdHJpcHBpbmcgKC1zKSBh bmQgdXNpbmcgc2hhcmVkIGxpYnJhcnkgKC1sY19zKS4KK2lzNXIzbmV0MjoKKwlAZWNobyAnTWFr aW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBJbnRlcmFjdGl2ZSAzODYvaXguLi4nCisJJChNQUtF KSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQIC1EVENQU09D S0VUIC1ETk9KQyAtRE5PUkVBTFBBVEggXAorCS1EU0lHVFlQPXZvaWQgLUROT0FOU0kgLURJMzg2 SVggJChLRkxBR1MpIC1PIiBcCisJIkxOS0ZMQUdTPSAtcyIgIkxJQlMgPSAtbGluZXQgLWxjX3Mi CisKKyNJbnRlcmFjdGl2ZSBVTklYIFN5c3RlbSBWIFIzICh2ZXJzaW9uIDIuMiBvciBsYXRlcikg d2l0aCBqb2IgY29udHJvbCAmIGN1cnNlcy4KKyNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5C ZXIgVVVDUC4KK2lzNXIzamM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig SW50ZXJhY3RpdmUgVW5peCAyLjIgb3IgbGF0ZXIuLi4nCisJJChNQUtFKSB3ZXJtaXQgQ0M9IiQo Q0MpIiBDQzI9IiQoQ0MyKSIgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQ IC1PIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAorCS1EVUlEX1Q9dXNob3J0IC1ER0lEX1Q9dXNo b3J0IC1ESTM4NklYIC1EU1ZSM0pDIC1EQ0tfQ1VSU0VTIFwKKwktRFBPU0lYX0pDIC1EQ0tfUkVE SVIgLURDS19QT0xMIC1ERENMR0VUQ1dEIFwKKwkkKEtGTEFHUykiICJMSUJTPS1sY3Vyc2VzIC1s Y19zIC1saW5ldCIKKworaXM1cjNqY2djYzoKKwkkKE1BS0UpIGlzNXIzamMgQ0M9ImdjYyAtRENL X0FOU0lMSUJTIC1ERENHUFdOQU0gLU80IiBDQzI9Z2NjIFwKKwlLRkxBR1M9IiQoS0ZMQUdTKSIg TE5LRkxBR1M9IiQoTE5LRkxBR1MpIgorCisjU3Vuc29mdC9JbnRlcmFjdGl2ZSBVTklYIFN5c3Rl bSBWIFIzICh2ZXJzaW9uIDIuMiBvciBsYXRlcikKKyN3aXRoIGpvYiBjb250cm9sLCBjdXJzZXMs IGFuZCBUQ1AvSVAgbmV0d29ya2luZy4KKyNVc2VzIGRpcmVudC5oIGFuZCBIb25leSBEYW5CZXIg VVVDUC4KK2lzNXIzbmV0amM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig SW50ZXJhY3RpdmUgVW5peCAyLjIgb3IgbGF0ZXIuLi4nCisJJChNQUtFKSB3ZXJtaXQgQ0M9IiQo Q0MpIiBDQzI9IiQoQ0MyKSIgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURESVJFTlQgLURIREJVVUNQ IC1PIC1ETk9DU0VUUyAtRE5PUkVBTFBBVEggXAorCS1EVUlEX1Q9dXNob3J0IC1ER0lEX1Q9dXNo b3J0IC1ESTM4NklYIC1EU1ZSM0pDIC1EQ0tfQ1VSU0VTIFwKKwktRFBPU0lYX0pDIC1EQ0tfUkVE SVIgLURUQ1BTT0NLRVQgLURTRUxFQ1QgXAorCSQoS0ZMQUdTKSIgIkxJQlM9LWxpbmV0IC1sY3Vy c2VzIC1sY19zIgorCitpczVyM25ldGpjZ2NjOgorCSQoTUFLRSkgaXM1cjNuZXRqYyBDQz0iZ2Nj IC1EQ0tfQU5TSUxJQlMgLUREQ0dQV05BTSAtTzQiIENDMj1nY2MgXAorCUtGTEFHUz0iJChLRkxB R1MpIiBMTktGTEFHUz0iJChMTktGTEFHUykiCisKKyNNYXNzY29tcCBTeXN0ZW0gSUlJCitydHU6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFzc2NvbXAgUlRVIFN5c3Rl bSBJSUkuLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1VRklPTlJFQUQgLURBVFRT ViAkKEtGTEFHUykgLU8iICJMTktGTEFHUyA9IiAiTElCUz0gLWxqb2JzIgorCisjTWFzc2NvbXAv Q29uY3VycmVudCBSVFUgNC4wIG9yIGxhdGVyLCBCZXJrZWxleSBlbnZpcm9ubWVudC4KKyNJbmNs dWRlcyA8bmRpci5oPiA9IC91c3IvaW5jbHVkZS9uZGlyLmgKKyNOb3RlICJMSUJTID0gLWxuZGly IiBtaWdodCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgInVjYiBtYWtlIi4KK3J0dWJzZDoK KwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBNYXNzY29tcCBSVFUgNC4xQS4u LicKKwl1Y2IgbWFrZSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1EQlNENCAtRFJUVSAtRE5ESVIgLURI REJVVUNQIC1EVENQU09DS0VUICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxuZGlyIgorCisjTWFz c2NvbXAvQ29uY3VycmVudCBSVFUgNC4wIG9yIGxhdGVyLCBzYW1lIGFzIGFib3ZlLAorI0luY2x1 ZGVzICJ1c3IvbGliL25kaXIuaCIKKyNOb3RlICJMSUJTID0gLWxuZGlyIiBtaWdodCBub3QgYmUg bmVjZXNzYXJ5IGJlY2F1c2Ugb2YgInVjYiBtYWtlIi4KK3J0dWJzZDI6CisJQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFzc2NvbXAgUlRVIDQuMUEuLi4nCisJdWNiIG1ha2Ug d2VybWl0IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURSVFUgLURYTkRJUiAtREhEQlVVQ1AgJChLRkxB R1MpIiBcCisJIkxJQlMgPSAtbG5kaXIiCisKKyNNYXNzY29tcC9Db25jdXJyZW50IFJUVSA0LjAg b3IgbGF0ZXIsIHNhbWUgYXMgYWJvdmUsCisjSW5jbHVkZXMgPHN5cy9uZGlyLmg+CisjTm90ZSAi TElCUyA9IC1sbmRpciIgbWlnaHQgbm90IGJlIG5lY2Vzc2FyeSBiZWNhdXNlIG9mICJ1Y2IgbWFr ZSIuCitydHVic2QzOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1hc3Nj b21wIFJUVSA0LnggQlNELi4uJworCXVjYiBtYWtlIHdlcm1pdCAiQ0ZMQUdTPSAtREJTRDQgLURS VFUgLURIREJVVUNQICQoS0ZMQUdTKSIgXAorCSJMSUJTID0gLWxuZGlyIgorCisjTWFzc2NvbXAv Q29uY3VycmVudCBSVFUgNC4wIG9yIGxhdGVyLCBTeXN0ZW0gViBSMiwgdXNpbmcgPGRpcmVudC5o Pi4KKyNJbiBjYXNlIG9mIHByb2JsZW1zLCBhZGQgYmFjayB0aGUgLURSVFUgc3dpdGNoLgorI0lu IGNhc2UgLURUQ1BTT0NLRVQgZ2l2ZXMgdHJvdWJsZSwgcmVtb3ZlIGl0LgorcnR1czU6CisJQGVj aG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFzc2NvbXAgUlRVIDQueC4uLicKKwkk KE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUz0gLURBVFRTViAtREhEQlVVQ1AgLURESVJFTlQgLURU Q1BTT0NLRVQgJChLRkxBR1MpIgorCisjTWFzc2NvbXAvQ29uY3VycmVudCBSVFUgNC54LCBTeXN0 ZW0gViBSMywgdXNpbmcgPGRpcmVudC5oPi4KKyNVc2UgdGhpcyBvbmUgaWYgcnR1czUgZ2l2ZXMg d2FybmluZ3MgYWJvdXQgcG9pbnRlciB0eXBlIG1pc21hdGNoZXMuCisjSW4gY2FzZSBvZiBwcm9i bGVtcywgYWRkIGJhY2sgdGhlIC1EUlRVIHN3aXRjaC4KK3J0dXM1cjM6CisJQGVjaG8gJ01ha2lu ZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWFzc2NvbXAgUlRVIFN5cyBWIFIzLi4uJworCSQoTUFL RSkgd2VybWl0ICJDRkxBR1M9IC1EU1ZSMyAtREhEQlVVQ1AgLURESVJFTlQgJChLRkxBR1MpIgor CisjREVDIFByby0zeHggd2l0aCBQcm8vVmVuaXggVjEuMCBvciBWMS4xCisjIFJlcXVpcmVzIGNv ZGUtbWFwcGluZyBvbiBub24tSSZELXNwYWNlIDExLzIzIHByb2Nlc3NvciwgcGx1cyBzb21lCisj IGZpZGRsaW5nIHRvIGdldCBpbnRlcnJ1cHQgdGFyZ2V0cyBpbnRvIHJlc2lkZW50IGNvZGUgc2Vj dGlvbi4KKyMgVGhpcyBhbG1vc3QgY2VydGFpbmx5IGRvZXNuJ3Qgd29yayBhbnkgbW9yZS4KK3By b3Z4MToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBERUMgUHJvLTN4eCwg UHJvL1Zlbml4IDEueC4uLicKKwkkKE1BS0UpIHdhcnQgIkNGTEFHUz0gLURQUk9WWDEgJChLRkxB R1MpIiAiTE5LRkxBR1M9ICIKKwkkKE1BS0UpIHdlcm1pdCAiQ0ZMQUdTID0gLURQUk9WWDEgLURO T0ZJTEVIIC1tZDc4MCIgXAorCQkiTE5LRkxBR1M9IC11IF9zbGVlcCAtbGMgLW1kNzgwIgorCisj Tml4ZG9yZiBUYXJnb24vMzEuCisjQVQmVCBVTklYIFN5c3RlbSBWIFIzLCBzaWduYWwoKSBpcyB2 b2lkIHJhdGhlciB0aGFuIGludC4KKyNVc2VzIGRpcmVudC5oIHdpdGhvdXQgSG9uZXkgRGFuQmVy IHV1Y3AuCit0MzF0b3M0MHg6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig VGFyZ29uLzMxIHdpdGggVE9TIDQuMC54eC4uLicKKwkJJChNQUtFKSB3ZXJtaXQgXAorCQkiQ0ZM QUdTPSAtRFNWUjMgLURESVJFTlQgJChLRkxBR1MpIC1PIiBcCisJCSJMTktGTEFHUz0iCisKKyNO Q1IgVG93ZXIgMTYzMiwgT1MgMS4wMgordG93ZXIxOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIE5DUiBUb3dlciAxNjMyLCBPUyAxLjAyLi4uJworCSQoTUFLRSkgd2VybWl0 ICJDRkxBR1M9IC1EVE9XRVIxICQoS0ZMQUdTKSIKKworI05DUiBUb3dlciAzMiwgT1MgUmVsZWFz ZSAxLnh4Lnh4Cit0b3dlcjMyLTE6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgTkNSIFRvd2VyIDMyIFJlbCAxIFN5c3RlbSBWIFIyLi4uJworCUBlY2hvICdBZGQgS0ZMQUdT PS1ESVNESVJCVUcgaWYgeW91IGdldCBlcnJvcnMgYWJvdXQgU19JU1JFRy9TX0lTRElSLicKKwkk KE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1EQVRUU1YgJChLRkxBR1MpIC1PIiAiTE5LRkxB R1MgPSAtbiIKKworI05DUiBUb3dlciAzMiwgT1MgUmVsZWFzZSAyLnh4Lnh4Cit0b3dlcjMyLTI6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTkNSIFRvd2VyIDMyIFJlbCAy IFN5c3RlbSBWIFIyLi4uJworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAt REhEQlVVQ1AgJChLRkxBR1MpIC1PMiIgXAorCSJMTktGTEFHUyA9IC1uIgorCisjTkNSIFRvd2Vy IDMyLCBPUyBSZWxlYXNlcyBiYXNlZCBvbiBTeXN0ZW0gViBSMworI0Rvbid0IGFkZCAtRE5BUCAo ZG9lc24ndCB3b3JrIHJpZ2h0KSBvciAtRFJEQ0hLIChub3QgYXZhaWxhYmxlIGluIGxpYmMpLgor dG93ZXIzMjoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBOQ1IgVG93ZXIg MzIgU3lzdGVtIFYgUjMuLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtRFNWUjMg LURESVJFTlQgLURIREJVVUNQIC1ETk9TWVNJT0NUTEggJChLRkxBR1MpIFwKKwktRFVJRF9UPXVz aG9ydCAtREdJRF9UPXVzaG9ydCAtTzEiCisKKyNOQ1IgVG93ZXIgMzIsIE9TIFJlbGVhc2VzIGJh c2VkIG9uIFN5c3RlbSBWIFIzCit0b3dlcjMyZzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQo Q0tWRVIpIGZvciBOQ1IgVG93ZXIgMzIgU3lzdGVtIFYgUjMsIGdjYy4uLicKKwkkKE1BS0UpIHdl cm1pdCAiQ0MgPSBnY2MiIFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1ERElSRU5UIC1ESERCVVVDUCAt RE5PU1lTSU9DVExIICQoS0ZMQUdTKSBcCisJRFVJRF9UPXVzaG9ydCAtREdJRF9UPXVzaG9ydCAt TyAtZnN0cmVuZ3RoLXJlZHVjZSAtZm9taXQtZnJhbWUtcG9pbnRlciIKKworI0ZvcnR1bmUgMzI6 MTYsIEZvcjpQcm8gMS44IChtb3N0bHkgbGlrZSA0LjFic2QpCitmdDE4OgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZvcnR1bmUgMzI6MTYgRm9yOlBybyAxLjguLi4nCisJ JChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1ETk9ERUJVRyAtREJTRDQgLURGVDE4IC1ETk9G SUxFSCAkKEtGTEFHUykgXAorCS1EUElEX1Q9c2hvcnQiCisKKyNGb3J0dW5lIDMyOjE2LCBGb3I6 UHJvIDIuMSAobW9zdGx5IGxpa2UgNC4xYnNkKS4KKyNUaGUgbW9kdWxlcyB0aGF0IGJyZWFrIHRo ZSBvcHRpbWl6ZXIgYXJlIGNvbXBpbGVkIHNlcGFyYXRlbHkuCitmdDIxOgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEZvcnR1bmUgMzI6MTYgRm9yOlBybyAyLjEuLi4nCisJ JChNQUtFKSBja3V1c3guJChFWFQpICJDRkxBR1M9IC1ETk9ERUJVRyAtREJTRDQgLURGVDIxIC1E Tk9GSUxFSCBcCisJLVNZTSA4MDAgIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtRFBJRF9UPXNob3J0 IiBcCisJIkxOS0ZMQUdTPSAtbiAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAtbHYgLWxu ZXQiCisJJChNQUtFKSBja3V4bGEuJChFWFQpICJDRkxBR1M9IC1ETk9ERUJVRyAtREJTRDQgLURG VDIxIC1ETk9GSUxFSCBcCisJLVNZTSA4MDAgIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtRFBJRF9U PXNob3J0IiBcCisJIkxOS0ZMQUdTPSAtbiAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVybWNhcCAt bHYgLWxuZXQiCisJJChNQUtFKSBja3VkaWEuJChFWFQpICJDRkxBR1M9IC1ETk9ERUJVRyAtREJT RDQgLURGVDIxIC1ETk9GSUxFSCBcCisJLVNZTSA4MDAgIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAt RFBJRF9UPXNob3J0IiBcCisJIkxOS0ZMQUdTPSAtbiAtcyIgIkxJQlM9IC1sY3Vyc2VzIC1sdGVy bWNhcCAtbHYgLWxuZXQiCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1PIC1ETk9ERUJV RyAtREJTRDQgLURGVDIxIC1ETk9GSUxFSCAtU1lNIDgwMCBcCisJLURDS19DVVJTRVMgJChLRkxB R1MpIC1EUElEX1Q9c2hvcnQiIFwKKwkiTE5LRkxBR1M9IC1uIC1zIiAiTElCUz0gLWxjdXJzZXMg LWx0ZXJtY2FwIC1sdiAtbG5ldCIKKworI1ZhbGlkIFNjYWxkc3RhcgorI0JlcmtlbGV5aXNoLCBi dXQgbmVlZCB0byBjaGFuZ2Ugc29tZSB2YXJpYWJsZSBuYW1lcy4KK3ZhbGlkOgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFZhbGlkIFNjYWxkc3Rhci4uLicKKwkkKE1BS0Up IHdlcm1pdCBcCisJIkNGTEFHUz0gLURCU0Q0IC1ETk9ERUJVRyAtRE5PVExPRyAtRGNjPWNjeCAt REZSRUFEPTEgJChLRkxBR1MpIgorCisjSUJNIElYLzM3MCBvbiBJQk0gMzcwIFNlcmllcyBtYWlu ZnJhbWVzCisjTW9zdGx5IGxpa2Ugc3lzMywgYnV0IHNob3VsZCBidWZmZXIgcGFja2V0cy4KK2l4 MzcwOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIElCTSBJWC8zNzAuLi4n CisJJChNQUtFKSB3ZXJtaXQgIkNGTEFHUyA9IC1ESVgzNzAgLURBVFRTViAkKEtGTEFHUykgLWkg LU8iIFwKKwkiTE5LRkxBR1MgPSAtaSIKKworI0FtZGFobCBVVFMgMi40IG9uIElCTSAzNzAgc2Vy aWVzIGNvbXBhdGlibGUgbWFpbmZyYW1lcy4KKyNNb3N0bHkgbGlrZSBWNywgYnV0IGNhbid0IGRv IGluaXRyYXdxKCkgYnVmZmVyIHBlZWtpbmcuCit1dHMyNDoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBBbWRhaGwgVVRTIDIuNC4uLicKKwkkKE1BS0UpIHdlcm1pdCAiQ0ZM QUdTPS1EVjcgLURQUk9DTkFNRT1cXFwiJChQUk9DKVxcXCIgXAorCS1EVVRTMjQgLURCT09UTkFN RT1cXFwiJChCT09URklMRSlcXFwiIC1ETlBST0NOQU1FPVxcXCIkKE5QUk9DKVxcXCIgXAorCS1E TlBUWVBFPSQoTlBUWVBFKSAkKERJUkVDVCkgJChLRkxBR1MpIgorCisjQW1kYWhsIFVUU1YgVU5J WCBTeXN0ZW0gViA9IFN5c3RlbSBWIFIyIG9yIGVhcmxpZXIuCit1dHN2OgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIEFtZGFobCBVVFNWLi4uJworCSQoTUFLRSkgd2VybWl0 IFwKKwkiQ0ZMQUdTID0gLURVVFNWICQoS0ZMQUdTKSAtaSAtTyIgIkxOS0ZMQUdTID0gLWkiCisK KyNBbWRhaGwgVVRTViBVTklYIFN5c3RlbSBWID0gU3lzdGVtIFYgUjIgb3IgZWFybGllciwgd2l0 aCBUQ1Agc29ja2V0cyBsaWJyYXJ5LgordXRzdnRjcDoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0 ICQoQ0tWRVIpIGZvciBBbWRhaGwgVVRTViB3L3RjcC4uLicKKwkkKE1BS0UpIHdlcm1pdCAiQ0ZM QUdTID0gXAorCS1EVENQU09DS0VUIC1EVVRTViAkKEtGTEFHUykgLWkgLU8iICJMTktGTEFHUyA9 IC1pIiBcCisJIkxJQlMgPSAtbHNvY2tldCIKKworI0JCTiBDLzcwIHdpdGggSU9TIDIuMAorI01v c3RseSBCZXJrZWxleS1saWtlLCBidXQgd2l0aCBzb21lIEFUVGlzbXMKK2M3MDoKKwlAZWNobyAn TWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBCQk4gQy83MCBJT1MgMi4wLi4uJworCSQoTUFL RSkgd2VybWl0ICJDRkxBR1M9IC1EQlNENCAtREM3MCAkKEtGTEFHUykiCisKKyNaaWxvZyBaRVVT IDMuMjEKK3ppbG9nOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFppbG9n IFpldXMgMy4yMS4uLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1EQVRUU1YgLURa SUxPRyAtRE5PREVCVUcgJChLRkxBR1MpIC1pIC1PIiBcCisJIkxOS0ZMQUdTID0gLWkgLWxwdyIK KworI1doaXRlY2hhcGVsIE1HLTEgR2VuaXggMS4zCit3aGl0ZToKKwlAZWNobyAnTWFraW5nIEMt S2VybWl0ICQoQ0tWRVIpIGZvciBXaGl0ZWNoYXBlbCBNRy0xIEdlbml4IDEuMy4uLicKKwlAdG91 Y2ggY2tjcHJvLmMKKwkkKE1BS0UpIHdlcm1pdCAiQ0ZMQUdTPSAtREJTRDQgLUR6a3NlbGYoKT0w ICAkKEtGTEFHUykiCisKKyNQaXhlbCAxMDAwCitwaXhlbDoKKwlAZWNobyAnTWFraW5nIEMtS2Vy bWl0ICQoQ0tWRVIpIGZvciBQaXhlbCAxMDAwLi4uJworCSQoTUFLRSkgd2VybWl0ICJDRkxBR1M9 IC1EQlNENCAtRHprc2VsZigpPTAgJChLRkxBR1MpIgorCitwdHg6CisJJChNQUtFKSAiTUFLRT0k KE1BS0UpIiBkeW5peHB0eDEyCisKKyNDREMgVlgvVkUgNS4yLjEKK3Z4dmU6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQ0RDIFZYL1ZFIDUuMi4xLi4uJworCSQoTUFLRSkg d2VybWl0IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAtRFZYVkUgLUROT0RFQlVHIC1ETk9UTE9HICQo S0ZMQUdTKSAtaSAtTyIgXAorCSJMTktGTEFHUyA9IC1pIgorCisjRElBQiBEUzkwIG9yIExVWE9S IEFCQy05MDAwIHdpdGggcHJlLTUuMiBETklYLiAgU3lzIFYgd2l0aCBuYXAoKSBhbmQgcmRjaGso KS4KKyMgbmQgPSBubyBvcGVuZGlyKCksIHJlYWRkaXIoKSwgY2xvc2VkaXIoKSwgZXRjLgorIyBT b21lIG9mIHRoZSBtb2R1bGVzIGZhaWwgdG8gY29tcGlsZSB3aXRoIC1PLgorZG5peG5kOgorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERJQUIgRFM5MCB3aXRoIHZlcnkgb2xk IEROSVggNS4yLicKKwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1EQVRUU1YgLUROQVAg LURSRENISyAtRERDTFBPUEVOIFwKKwktVV9fU1REQ19fICQoS0ZMQUdTKSIKKworI0RJQUIgRFM5 MCB3aXRoIEROSVggNS4yLiAgU3lzIFYgd2l0aCBuYXAoKSBhbmQgcmRjaGsoKS4KKyMgVGhpcyBv bmUgaGFzIG9wZW5kaXIoKSwgcmVhZGRpcigpLCBjbG9zZWRpcigpLCBldGMuCisjIFNvbWUgb2Yg dGhlIG1vZHVsZXMgZmFpbCB0byBjb21waWxlIHdpdGggLU8uCitkbml4OgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERJQUIgRFM5MCB3aXRoIG9sZCBETklYIDUuMi4uLicK KwkkKE1BS0UpIHdlcm1pdCBcCisJIkNGTEFHUyA9IC1EQVRUU1YgLUROQVAgLURSRENISyAtRERJ UkVOVCAgXAorCS1VX19TVERDX18gJChLRkxBR1MpIgorCisjRElBQiBEUzkwIHdpdGggRE5JWCA1 LjIuICBTeXMgViB3aXRoIG5hcCgpIGFuZCByZGNoaygpLgorIyBBcyBhYm92ZSwgYnV0IHdpdGgg Y3Vyc2VzIGFuZCBUQ1AvSVAuCisjIFlvdSBtaWdodCBnZXQgY29tcGxhaW50cyBhYm91dCByZWRl ZmluaXRpb24gb2YgT19SRE9OTFksIGV0YywgYmVjYXVzZQorIyBvZiBidWdzIGluIHRoZSBETklY IGhlYWRlciBmaWxlcywgd2hpY2ggY2FuIGJlIGZpeGVkIGJ5IGFkZGluZyAjaWZuZGVmLi4uCisj IGFyb3VuZCB0aGUgb2ZmZW5kaW5nIGRlZmluaXRpb25zIGluIHRoZSBoZWFkZXIgZmlsZXMuCitk bml4bmV0YzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBESUFCIERTOTAg d2l0aCBvbGQgRE5JWCA1LjIuLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtREFU VFNWIC1ETkFQIC1EUkRDSEsgLURESVJFTlQgIFwKKwktRFRDUFNPQ0tFVCAtRENLX0NVUlNFUyAt SS91c3IvaW5jbHVkZS9ic2QgLVVfX1NURENfXyAkKEtGTEFHUykiIFwKKwkiTElCUyA9IC1sbiAt bGN1cnNlcyIKKworI0RJQUIgRFM5MCB3aXRoIEROSVggNS4zIG9yIGxhdGVyLCB3aXRoIEhEQiBV VUNQLCBuYXAoKSBhbmQgcmRjaGsoKS4KK2RuaXg1cjM6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1p dCAkKENLVkVSKSBmb3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMuLi4nCisJQGVjaG8gJ3dpdGgg SG9uZXkgRGFuQmVyIFVVQ1AnCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtRFNWUjMg LURIREJVVUNQIC1ETkFQIC1EUkRDSEsgLURESVJFTlQgXAorCS1EQ0tfQ1VSU0VTIC1EUkVOQU1F ICQoS0ZMQUdTKSAtTyIgIkxJQlM9IC1sY3Vyc2VzIgorCisjRElBQiBEUzkwIHdpdGggRE5JWCA1 LjMgb3IgbGF0ZXIsIHdpdGggSERCIFVVQ1AsIG5hcCgpIGFuZCByZGNoaygpICsgVENQL0lQCitk bml4NXIzbmV0OgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERJQUIgRFM5 MCB3aXRoIEROSVggNS4zLi4uJworCUBlY2hvICd3aXRoIEhvbmV5IERhbkJlciBVVUNQIGFuZCBU Q1AvSVAnCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1MgPSAtRFNWUjMgLURIREJVVUNQIC1E TkFQIC1EUkRDSEsgLURESVJFTlQgXAorCS1EVENQU09DS0VUIC1EQ0tfQ1VSU0VTIC1EUkVOQU1F ICQoS0ZMQUdTKSAtTyBcCisJLUkvdXNyL2luY2x1ZGUvYnNkIiAiTElCUyA9IC1sbiAtbGN1cnNl cyIKKworI0RJQUIgRFM5MCB3aXRoIEROSVggNS4zIDIuMiBvciBsYXRlciwgd2l0aCBIREIgVVVD UCwgbmFwKCkgYW5kIHJkY2hrKCksCisjQU5TSSBDIGNvbXBpbGF0aW9uIGFuZCBsaWJyYXJpZXMu CisjTm90ZSB0aGF0IGZvciBETklYIDUuMyAyLjIgeW91IGhhdmUgdG8gY29ycmVjdCBhIGJ1ZyBp biAvdXNyL2luY2x1ZGUvc3RkbGliLmg6CisjY2hhbmdlICJleHRlcm4Jdm9pZCBmcmVlKGNoYXIg KnN0cik7IgorI3RvICAgICAiZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICpzdHIpOyIKKyNOT1RFOiBU aGlzIGJ1ZyBpcyByZXBvcnRlZGx5IGZpeGVkIGluIEROSVggNS4zIDIuMi4xLgorI1Nob3VsZCB5 b3UgZ2V0IGZhdGFsIGVycm9ycyBjYXVzZWQgYnkgaGFybWxlc3MgcG9pbnRlci10eXBlIG1pc21h dGNoZXMsCisjbGlrZSBiZXR3ZWVuIHNpZ25lZCBhbmQgdW5zaWduZWQgY2hhciwganVzdCByZW1v dmUgLVg3LgorZG5peDVyM2Fuc2k6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBm b3IgRElBQiBEUzkwIHdpdGggRE5JWCA1LjMuLi4nCisJQGVjaG8gJ3dpdGggQU5TSSBDIEhvbmV5 IERhbkJlciBVVUNQJworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1ERElB QiAtREhEQlVVQ1AgLUROQVAgLURSRENISyAtRERJUkVOVCBcCisJLURDS19BTlNJTElCUyAtRENL X0NVUlNFUyAtRFJFTkFNRSAtTyAtWDcgLVg5ICQoS0ZMQUdTKSIgXAorCSJMSUJTPSAtbGN1cnNl cyIKKworI0RJQUIgRFM5MCB3aXRoIEROSVggNS4zIDIuMiBvciBsYXRlciwgd2l0aCBIREIgVVVD UCwgbmFwKCkgYW5kIHJkY2hrKCksCisjICsgVENQL0lQLCBBTlNJIEMgY29tcGlsYXRpb24gYW5k IGxpYnJhcmllcy4KKyNTaG91bGQgeW91IGdldCBmYXRhbCBlcnJvcnMgY2F1c2VkIGJ5IGhhcm1s ZXNzIHBvaW50ZXItdHlwZSBtaXNtYXRjaGVzLAorI2xpa2UgYmV0d2VlbiBzaWduZWQgYW5kIHVu c2lnbmVkIGNoYXIsIGp1c3QgcmVtb3ZlIC1YNy4KK2RuaXg1cjNhbnNpbmV0OgorCUBlY2hvICdN YWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIERJQUIgRFM5MCB3aXRoIEROSVggNS4zLi4uJwor CUBlY2hvICd3aXRoIEFOU0kgQyBIb25leSBEYW5CZXIgVVVDUCcKKwkkKE1BS0UpIHdlcm1pdCBc CisJIkNGTEFHUyA9IC1EU1ZSMyAtRERJQUIgLURIREJVVUNQIC1ETkFQIC1EUkRDSEsgLURESVJF TlQgXAorCS1EVENQU09DS0VUIC1EQ0tfQU5TSUxJQlMgLURDS19DVVJTRVMgLURSRU5BTUUgLU8g LVg3IC1YOSAkKEtGTEFHUykgXAorCS1JL3Vzci9pbmNsdWRlL2JzZCIgIkxJQlM9IC1sbiAtbGN1 cnNlcyIKKworI1JpZGdlIDMyIHdpdGggUk9TIDMuMgorcmlkZ2UzMjoKKwlAZWNobyAnTWFraW5n IEMtS2VybWl0ICQoQ0tWRVIpIFJpZGdlIDMyIFJPUyAzLjInCisJJChNQUtFKSB3ZXJtaXQgXAor CSJDRkxBR1MgPSAtREFUVFNWIC1ETk9GSUxFSCAtRE5PREVCVUcgLUROT1RMT0cgJChLRkxBR1Mp IC1pIC1PIiBcCisJIkxOS0ZMQUdTID0gLWkiCisKKyNBbHRvcyA0ODYsIDU4Niwgb3IgOTg2IHdp dGggWGVuaXggMy4wCithbHRvczoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZv ciBBbHRvcyB4ODYgd2l0aCBYZW5peCAzLjAuLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxB R1M9IC1EQVRUU1YgLURBOTg2IC1ETk9ERUJVRyAtRE5PVExPRyAkKEtGTEFHUykgLWkgLU8iIFwK KwkiTE5LRkxBR1M9IC1pIgorCisjQWx0b3MgOTg2IHdpdGggWGVuaXggMy4wLCBhcyBhYm92ZSwg YnV0IGNvbW1hbmQtbGluZSBvbmx5LCBtaW5pbWFsIHNpemUuCisjRm9yIHN5c3RlbXMgd2l0aCBz bWFsbCBtZW1vcmllcy4gIEl0IG1pZ2h0IGFsc28gYmUgbmVjZXNzYXJ5IHRvIGNob3AgY2VydGFp bgorI21vZHVsZXMgdXAgaW50byBzbWFsbGVyIHBpZWNlcywgZS5nLiBja3V1czMtNiwgYmVjYXVz ZSBvZiBzeW1ib2wgdGFibGUKKyNvdmVyZmxvdy4gICBJZiB0aGlzIG1ha2VmaWxlIGlzIHRvbyBi aWcgb3IgY29tcGxleCBmb3IgdGhlIEFsdG9zLCBjb21waWxlCisjYW5kIGxpbmsgYnkgaGFuZCBv ciB3cml0ZSBzaGVsbCBzY3JpcHRzLgorYWx0b3NjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQg JChDS1ZFUikgZm9yIEFsdG9zIHg4NiBYZW5peCAzLjAsIHJlbW90ZS4uLicKKwkkKE1BS0UpIHdl cm1pdCBcCisJIkNGTEFHUz0gLURBVFRTViAtREE5ODYgLUROT0RFQlVHIC1ETk9UTE9HIC1ETk9T Q1JJUFQgLUROT0RJQUwgXAorCS1ETk9DU0VUUyAtRE5PQU5TSSAtRE5PTVNFTkQgLUROT1NQTCAt RE5PSUNQICQoS0ZMQUdTKSAtTW0gLU8iIFwKKwkiTE5LRkxBR1M9IC1NbSAtcyIKKworI0FsdG9z IDk4NiB3aXRoIFhlbml4IDMuMCwgYXMgYWJvdmUsIGJ1dCBpbnRlcmFjdGl2ZSBvbmx5LCBtaW5p bWFsIHNpemUuCithbHRvc2k6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3Ig QWx0b3MgeDg2IFhlbml4IDMuMCwgbG9jYWwuLi4nCisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxB R1M9IC1EQVRUU1YgLURBOTg2IC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PU0NSSVBUIC1ETk9ESUFM IFwKKwktRE5PQ1NFVFMgLUROT0FOU0kgLUROT01TRU5EIC1ETk9TUEwgLUROT0NNREwgLUROT0ZS SUxMUyAtRE5PSEVMUCBcCisJLUROT1NFVEtFWSAkKEtGTEFHUykgLU1tIC1PIiAiTE5LRkxBR1M9 IC1NbSAtcyIKKworIyBBbHRvcyBBQ1M2ODAwMCA2ODAwMCBTeXN0ZW0sIFVOSVggU3lzdGVtIDMg UmVsZWFzZSAyLCA1MTJrIG1lbW9yeS4KKyMgYWxzbyBuZWVkcyBnZXRjd2QoKSBleHRlcm5hbCBm dW5jdGlvbjsgc2VlIGNrdWlucy50eHQgZmlsZS4KKyMgYWxzbywgc3lzL3R5cGVzLmggbmVlZGVk IG1vZGlmeWluZzoKKyMgICAjaWZkZWYgX19TWVNfVFlQRVNfSF9fLCAjZGVmaW5lIC4uLiwgI2Vu ZGlmCisjIGFsc28sIGNrdXVzMi5jIE1VU1QgYmUgY29tcGlsZWQgTk9PUFQgZWxzZSBzeW1ib2wg dGFibGUgaXMgZGVzdHJveWVkIQorIyBTdWJtaXNzaW9uIGJ5IFJvYmVydCBXZWluZXIvUHJvZ3Jh bW1pbmcgUGx1cywgcndlaW5lckBwcm9ncGx1cy5jb20uCisjCithbHRvczM6CisJQGVjaG8gJ01h a2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgQWx0b3MgQUNTNjhrIFVOSVggU3lzdGVtIElJSScK KwkkKE1BS0UpIGNrdXVzMi4kKEVYVCkgIkNGTEFHUyA9IC1EQVRUU1YgLUROT0NTRVRTIC1ETk9T RVRLRVkgLUROT0pDIFwKKwktRE5PRElBTCAtRERDTFBPUEVOIC1ETk9TQ1JJUFQgLUROT0hFTFAg JChLRkxBR1MpIC1pIgorCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0gLURBVFRTViAtRE5P Q1NFVFMgLUROT1NFVEtFWSAtRE5PSkMgXAorCS1ETk9ESUFMIC1ERENMUE9QRU4gLUROT1NDUklQ VCAtRE5PSEVMUCAkKEtGTEFHUykgLWkgLU8iIFwKKwkiTE5LRkxBR1MgPSAtaSIgIkxJQlMgPSBn ZXRjd2QuJChFWFQpIgorCisjTUlOSVggLSBPcmlnaW5hbCBQQyB2ZXJzaW9uIHdpdGggNjRLKzY0 SyBsaW1pdC4KKyMgUmVwb3J0ZWRseSwgdGhlIGxpbmtlciAoYXNsZCkgY2FuIHJ1biBvdXQgb2Yg c3BhY2Ugd2hpbGUgbGlua2luZy4gIFRoZSBvbmx5CisjIHdheSBhcm91bmQgdGhpcyBpcyB0byBt YWtlIGEgY29weSBvZiBsaWJjLmEgZnJvbSB3aGljaCBhbGwgbW9kdWxlcyB0aGF0IGFyZQorIyBu b3QgdXNlZCBieSBLZXJtaXQgYXJlIHJlbW92ZWQuICBJZiB5b3UgaGF2ZSB0cm91YmxlIGNvbXBp bGluZyBvciBydW5uaW5nCisjIHdhcnQsICJ0b3VjaCB3YXJ0Ii4gIElmIHRoYXQgZG9lc24ndCBo ZWxwLCAidG91Y2ggY2tjcHJvLmMiLgorIyBUaGUgdmVyc2lvbiBjb25maWd1cmVkIGJlbG93IGhh cyBubyBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlci4KKyMgSWYgeW91IGNhbiBidWlsZCB0aGlz IHZlcnNpb24gc3VjY2Vzc2Z1bGx5LCBtYXliZSB0aGVyZSB3aWxsIGJlIHJvb20gZm9yCisjIGEg bWluaW1hbCBpbnRlcmFjdGl2ZSBjb21tYW5kIHBhcnNlciB0b287IHRyeSByZXBsYWNpbmcgLURO T0lDUCB3aXRoCisjIC1ETk9TUEwsIHBsdXMgZXZlcnkgb3RoZXIgLUROT3h4eCBmbGFnIHRoZXJl IGlzLCBleGNlcHQgZm9yIC1ETk9JQ1AKKyMgKHNlZSBja2NjZmcudHh0KS4KK21pbml4OgorCUBl Y2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYLCBubyBjb21tYW5kIHBhcnNl ci4uLicKKwlAZWNobyAnVE9UQUxMWSBVTlRFU1RFRCEnCisJJChNQUtFKSB3ZXJtaXQgRVhUPXMg XAorCSJDRkxBR1M9IC1EVjcgLURNSU5JWCAtaSAtRF9NSU5JWCAtRF9QT1NJWF9TT1VSQ0UgXAor CS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAtREdJRF9UPWdpZF90IC1EU0lHX1YgXAorCS1E Tk9YTUlUIC1ETk9NU0VORCAtRE5PRlJJTExTIC1ETk9ESUFMIC1ETk9IRUxQIC1ETk9ERUJVRyAt RE5PVExPRyBcCisJLUROT1NDUklQVCAtRE5PQ1NFVFMgLUROT0lDUCAtRE5PU0VUS0VZICQoS0ZM QUdTKSIgXAorCSJMTktGTEFHUz0gLWkgLVQiCisKKyNNSU5JWCAtIFBDIHZlcnNpb24gd2l0aCA2 NEsrNjRLIGxpbWl0LCBuZXcgKGFzIHlldCB1bnJlbGVhc2VkKSBBQ0sgMi4wIGJldGEgQworI2Nv bXBpbGVyLCB3aGljaCBvdXRwdXRzIC5vIG9iamVjdCBmaWxlcywgcmF0aGVyIHRoYW4gLnMuICBC dXQgJ21ha2UnIHN0aWxsCisjZXhwZWN0cyAucyBmaWxlcywgc28gbXVzdCBiZSBwYXRjaGVkIHRv IHVzZSAuby4gIFRlc3RlZCBvbiBNaW5peCAxLjUuMTAuCittaW5peDE1OgorCUBlY2hvICdNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIE1JTklYIChuZXcgQUNLIDIuMCBjb21waWxlciksJwor CUBlY2hvICdubyBjb21tYW5kIHBhcnNlci4uLiAgVE9UQUxMWSBVTlRFU1RFRCEnCisJJChNQUtF KSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1EVjcgLURNSU5JWCAtaSAtRF9NSU5JWCAtRF9QT1NJWF9T T1VSQ0UgXAorCS1EUElEX1Q9cGlkX3QgLURVSURfVD11aWRfdCAtREdJRF9UPWdpZF90IC1EU0lH X1YgLUROT0RJQUwgXAorCS1ETk9IRUxQIC1ETk9ERUJVRyAtRE5PVExPRyAtRE5PU0NSSVBUIC1E Tk9DU0VUUyAtRE5PSUNQICQoS0ZMQUdTKSIgXAorCSJMTktGTEFHUz0gLWkgLVQiCisKKyNNSU5J WDMgLSBNSU5JWCAzLjAgKG5vIFZNKSAtIE1heS1BdWcgMjAwNSAobm90IHN1cmUgaWYgdGhpcyBl dmVyIHdvcmtlZC4uLikKK21pbml4MzoKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIp IGZvciBNSU5JWDMuLi4nCisJJChNQUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEAp fSBcCisJIkNGTEFHUz0gLURQT1NJWCAtRE5PVVVDUCAtRE5PTEVBUk4gJChLRkxBR1MpIC1ETUlO SVgyIFwKKwktRE1JTklYMyAtRE5PX1BBUkFNX0ggLUROT1NZU0xPRyAtRE5PR0VUVVNFUlNIRUxM IFwKKwktRE5PSU5JVEdST1VQUyAtRE5PRlRSVU5DQVRFIC1ETk9BUlJPV0tFWVMgLURETk9SRUFM UEFUSCBcCisJLURUQ1BTT0NLRVQgLUROT1RJTUVaT05FIC1ETk9GVFAgLUROT19ETlNfU1JWIC1P IgorCisjTUlOSVgzMTUgLSBNSU5JWCAzIDEuNSAtIEphbnVhcnkgMjAxMAorbWluaXgzMTU6CisJ QGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgTWluaXggMyAxLjUuLi4nCisJJChN QUtFKSB3ZXJtaXQgS1RBUkdFVD0kJHtLVEFSR0VUOi0kKEApfSBcCisJIkNGTEFHUz0gLURNSU5J WDMxNSAtRFBPU0lYIC1ETk9VVUNQIC1ETk9KQyAtRE5PTEVBUk4gJChLRkxBR1MpIFwKKwktREhB VkVfT1BFTlBUWSAtRE5PX1BBUkFNX0ggLUROT1NZU0xPRyAtRE5PR0VUVVNFUlNIRUxMIFwKKwkt RFNZU1RJTUVIIC1ETk9JTklUR1JPVVBTIC1ETk9GVFJVTkNBVEUgLUROT0FSUk9XS0VZUyAtRE5P UkVBTFBBVEggXAorCS1EVENQU09DS0VUIC1ETk9USU1FWk9ORSAtRE5PX0ROU19TUlYgLUROT0ZU UCAtTyIKKworI1BGVSBDb21wYWN0IEEgU2VyaWVzIFVOSVggU3lzdGVtIFYgUjMsIFNYL0EgVElT UCBWMTAvTDUwIChKYXBhbikKKyNNYXliZSB0aGUgLWkgbGluayBvcHRpb24gc2hvdWxkIGJlIHJl bW92ZWQ/CitzeGFlNTA6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgUEZV IFNYL0EgVjEwL0w1MC4uLicKKwkkKE1BS0UpIHhlcm1pdCBcCisJIkNGTEFHUz0gLURTVlIzIC1E RElSRU5UIC1Ec3hhRTUwIC1EVENQU09DS0VUICQoS0ZMQUdTKSAtaSAtTyIgXAorCSJMTktGTEFH Uz0gIgorCisjVGVrdHJvbml4IDYxMzAsIDQzMTksIDQzMDEsIGV0Yywgd2l0aCBVVGVrIE9TLCAv dXNyL3Nwb29sL3V1Y3AvTENLLi8uLi4KKyNUaGUgbW9kZWxzIHRoYXQgc3VwcG9ydCBoYXJkd2Fy ZSBmbG93IGNvbnRyb2wuCit1dGVrOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikg Zm9yIDQuMkJTRC9VVGVrLCBoYXJkd2FyZSBmbG93IGNvbnRyb2wnCisJJChNQUtFKSB3ZXJtaXQg XAorCSJDRkxBR1M9IC1PIC1ETENLRElSIC1EQlNENCAtRFRDUFNPQ0tFVCBcCisJLURVVEVLIC1E RENMUE9QRU4gLURMT0NLX0RJUj1cXFwiL3Vzci9zcG9vbC91dWNwL0xDSy5cXFwiIFwKKwktRFRS TUJVRkw9MjA0OCAtRENLX0RUUkNUUyAkKEtGTEFHUykiCisKKyNUZWt0cm9uaXggNDMxNSwgNDMx NiwgNDMxNyB3aXRoIFVUZWsgT1MsIC91c3Ivc3Bvb2wvdXVjcC9MQ0suLy4uLgorI1RoZSBtb2Rl bHMgdGhhdCBkbyBub3QgZnVsbHkgc3VwcG9ydCBoYXJkd2FyZSBmbG93IGNvbnRyb2wuCit1dGVr bm9od2ZjOgorCUBlY2hvICdNYWtpbmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIDQuMkJTRC9VVGVr LCBubyBoL3cgZmxvdyBjb250cm9sJworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTPSAtTyAt RExDS0RJUiAtREJTRDQgLURUQ1BTT0NLRVQgXAorCS1EVVRFSyAtRERDTFBPUEVOIC1ETE9DS19E SVI9XFxcIi91c3Ivc3Bvb2wvdXVjcC9MQ0suXFxcIiBcCisJLURUUk1CVUZMPTIwNDggJChLRkxB R1MpIgorCisjVGVrdHJvbml4IFhEODggd2l0aCAgVVRla1YgT1MKK3V0ZWt2cjM6CisJQGVjaG8g J01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgVGVrdHJvbml4IFhEODggVVRla1YgUjMuLi4n CisJJChNQUtFKSB3ZXJtaXQgXAorCSJDRkxBR1M9IC1EU1ZSMyAtRERJUkVOVCAtREhEQlVVQ1Ag XAorCS1EVENQU09DS0VUIC1EU1lTVVRJTUVIIC1EQ0tfQ1VSU0VTICQoS0ZMQUdTKSAtTyIgXAor CSJMSUJTPSAtbGN1cnNlcyIgIkxOS0ZMQUdTPSAtcyIKKworI1Blcmtpbi1FbG1lciAzMjAwIFhl bG9zIFIwMiBvciBlYXJsaWVyCitjY29wMToKKwlAZWNobyAnTWFraW5nIEMtS2VybWl0ICQoQ0tW RVIpIGZvciBYZWxvcyAmIFB1YmxpYyBEb21haW4gRGlyZW50IGNhbGxzJworCUBlY2hvICdvciBT eXN0ZW0gViBSMiBvciBlYXJsaWVyLi4uJworCSQoTUFLRSkgd2VybWl0IFwKKwkiQ0ZMQUdTID0g LURBVFRTViAtRHZvaWQ9aW50IC1ERElSRU5UIC1EQ0tfQ1VSU0VTIFwKKwkkKEtGTEFHUykgLU8i ICJMTktGTEFHUyA9IiAiTElCUz0gLWxjdXJzZXMgLWx0ZXJtbGliIgorCisjRW5jb3JlLCBVTUFY IDQuMyAoQlNEKSBidXQgd2l0aG91dCBhY3VjbnRybCBwcm9ncmFtLgorZW5jb3JlOgorCSQoTUFL RSkgIk1BS0U9JChNQUtFKSIgdW1heDQzICJLRkxBR1M9JChLRkxBR1MpIgorCisjRW5jb3JlLCBh cyBhYm92ZSwgYnV0IHdpdGggY3Vyc2VzIGZpbGUgdHJhbnNmZXIgZGlzcGxheSBpbmNsdWRlZC4K K2VuY29yZWM6CisJJChNQUtFKSAiTUFLRT0kKE1BS0UpIiB1bWF4NDMgIktGTEFHUz0tRENLX0NV UlNFUyAkKEtGTEFHUykiIFwKKwkiTElCUz0gLWxjdXJzZXMgLWx0ZXJtY2FwIgorCisjRW5jb3Jl LCBVTUFYIDQuMyAoQlNEKSBidXQgd2l0aG91dCBhY3VjbnRybCBwcm9ncmFtLgordW1heDQzOgor CUBlY2hvIE1ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRW5jb3JlIFVNQVggNC4zLi4uCisJ JChNQUtFKSAiTUFLRT0kKE1BS0UpIiBQQVJBTExFTD00IHhlcm1pdCBcCisJIkNGTEFHUz0gLURC U0Q0MyAtREVOQ09SRSAtRFRDUFNPQ0tFVCAkKEtGTEFHUykgLU8iCisKKyNFbmNvcmUsIFVNQVgg NC4yIChCU0QpCit1bWF4NDI6CisJQGVjaG8gTWFraW5nIEMtS2VybWl0ICQoQ0tWRVIpIGZvciBF bmNvcmUgVU1BWCA0LjIuLi4KKwkkKE1BS0UpICJNQUtFPSQoTUFLRSkiIFBBUkFMTEVMPTQgeGVy bWl0IFwKKwkiQ0ZMQUdTPSAtREJTRDQgLURFTkNPUkUgLURUQ1BTT0NLRVQgJChLRkxBR1MpIC1P IgorCisjRW5jb3JlIDg4SyBVTUFYIDUuMyB3aXRoIFRDUC9JUCBzdXBwb3J0CitlbmNvcmU4OGs6 CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENLVkVSKSBmb3IgRW5jb3JlIDg4SyBVTUFYIFYs IFRDUC9JUC4uLicKKwkkKE1BS0UpIHhlcm1pdCBcCisJIkNGTEFHUyA9IC1xIGV4dD1wY2MgLURT VlIzIC1EVENQU09DS0VUIC1ERElSRU5UIFwKKwktRE5PR0VUSURfUFJPVE9TIC1ESERCVVVDUCAk KEtGTEFHUykgLU8iICJMTktGTEFHUyA9IgorCisjRW5jb3JlIDg4SyBVTUFYIDUuMyB3aXRoIFRD UC9JUCBzdXBwb3J0CitlbmNvcmU4OGtnY2M6CisJQGVjaG8gJ01ha2luZyBDLUtlcm1pdCAkKENL VkVSKSBmb3IgRW5jb3JlIDg4SyBVTUFYIFYsIFRDUC9JUCwgZ2NjLi4uJworCSQoTUFLRSkgeGVy bWl0IENDPWdjYyBDQzI9Z2NjIFwKKwkiQ0ZMQUdTID0gLURTVlIzIC1EVENQU09DS0VUIC1ERElS RU5UIFwKKwktRE5PR0VUSURfUFJPVE9TIC1ESERCVVVDUCAkKEtGTEFHUykgLU8iICJMTktGTEFH UyA9IgorCisjU09OWSBORVdTLCBORVdTLU9TIDQuMDFDCitzb255bmV3czoKKwlAZWNobyBNYWtp bmcgQy1LZXJtaXQgJChDS1ZFUikgZm9yIFNPTlkgTkVXUy1PUyA0LjAxQy4uLgorCSQoTUFLRSkg eGVybWl0ICJDRkxBR1M9IC1EQlNENDMgLURBQ1VDTlRSTCAtRFRDUFNPQ0tFVCAtTyIKKworI1J1 biBMaW50IG9uIHRoaXMgbWVzcyBmb3Igc2VsZWN0ZWQgdmVyc2lvbnMuCisjVGhlc2UgYXJlIHBy ZXR0eSBtdWNoIG9ic29sZXRlIHNpbmNlIEFOU0kgQyAvIGdjYy4KK2xpbnRzdW46CisJQGVjaG8g J1J1bm5pbmcgTGludCBvbiBDLUtlcm1pdCAkKENLVkVSKSBzb3VyY2VzIGZvciBTdW5PUyB2ZXJz aW9uLi4uJworCWxpbnQgLXggLURTVU5PUzQgLURESVJFTlQgLURUQ1BTT0NLRVQgLURTQVZFRFVJ RCBcCisJY2tbY3VdKi5jID4gY2t1a2VyLmxpbnQuc3VuCisKK2xpbnRic2Q6CisJQGVjaG8gJ1J1 bm5pbmcgTGludCBvbiBDLUtlcm1pdCAkKENLVkVSKSBzb3VyY2VzIGZvciBCU0QgNC4yIHZlcnNp b24uLicKKwlsaW50IC14IC1EQlNENCAtRFRDUFNPQ0tFVCBja1tjdV0qLmMgPiBja3VrZXIubGlu dC5ic2Q0MgorCitsaW50czU6CisJQGVjaG8gJ1J1bm5pbmcgTGludCBvbiBDLUtlcm1pdCAkKENL VkVSKSBzb3VyY2VzIGZvciBTeXMgViB2ZXJzaW9uLi4uJworCWxpbnQgLXggLURBVFRTViBja1tj dV0qLmMgPiBja3VrZXIubGludC5zNQorCisjV2hvIHJlbWVtYmVycyBURUNPPworbG92ZToKKwlA ZWNobyAnTm90IHdhcj8nCgpkaWZmIC0tZ2l0IGEvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJt aXQtOS4wLjMwMi9vY2tlcm1pdC5pbmkgYi9ja2VybWl0LTkuMC4zMDItYnVpbGQvY2tlcm1pdC05 LjAuMzAyL29ja2VybWl0LmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m MDA3NTYxCi0tLSAvZGV2L251bGwKKysrIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQt OS4wLjMwMi9vY2tlcm1pdC5pbmkKQEAgLTAsMCArMSw2MTggQEAKK0NPTU1FTlQgLSBTdGFuZGFy ZCBDLUtlcm1pdCBpbml0aWFsaXphdGlvbiBmaWxlCis7Cis7IEZvciBDLUtlcm1pdCBWZXJzaW9u OiA4LjAKKzsKKzsgRmlsZW5hbWU6Cis7ICAgLmtlcm1yYyAgICAgKFVOSVgsIE9TLTksIEFlZ2lz KQorOyAgIENLRVJNSVQuSU5JIChPUy8yLCBWTVMsIE9wZW5WTVMsIEFPUy9WUywgQXRhcmkgU1Qs IENvbW1vZG9yZSBBbWlnYSkKKzsgICBja2VybWl0LmluaSAoU3RyYXR1cyBWT1MpCis7ICAgSzk1 LklOSSAgICAgKEtlcm1pdCA5NSAtLSBidXQgdGhpcyBiaWcgdmVyc2lvbiBpcyBub3QgdXNlZCB0 aGVyZSkKKzsgICBLMi5JTkkgICAgICAoS2VybWl0LzIgIC0tIGJ1dCBkaXR0bykKKzsKKzsgQXV0 aG9yczoKKzsgICBGcmFuayBkYSBDcnV6LCBDaHJpc3RpbmUgTS4gR2lhbm9uZSwgSmVmZnJleSBB bHRtYW4KKzsgICBDb2x1bWJpYSBVbml2ZXJzaXR5LCBOZXcgWW9yaywgTlkgMTAwMjUtNzc5OSwg VVNBCis7Cis7IFRoaXMgaXMgdGhlIHN0YW5kYXJkIGFuZCByZWNvbW1lbmRlZCBDLUtlcm1pdCA4 LjAgaW5pdGlhbGl6YXRpb24gZmlsZS4gIFRvCis7IG92ZXJyaWRlIHNldHRpbmdzIG9yIGRlZmlu aXRpb25zIG1hZGUgaW4gdGhpcyBmaWxlLCB0byBhZGQgbmV3IHNldHRpbmdzIG9yCis7IGRlZmlu aXRpb25zLCBvciB0byBtYWtlIGFueSBvdGhlciBkZXNpcmVkIGN1c3RvbWl6YXRpb25zLCBjcmVh dGUgYSBzZXBhcmF0ZSwKKzsgcGVyc29uYWwgY3VzdG9taXphdGlvbiBmaWxlIGNhbGxlZDoKKzsK KzsgICAubXlrZXJtcmMgICAgIChVTklYLCBPUy05LCBBZWdpcywgQmVCb3gsIFBsYW4gOSkKKzsg ICBDS0VSTU9ELklOSSAgIChPUy8yLCBWTVMsIE9wZW5WTVMsIEFPUy9WUywgQXRhcmkgU1QsIENv bW1vZG9yZSBBbWlnYSkKKzsgICBja2VybW9kLmluaSAgIChWT1MpCis7Cis7IFlvdSBjYW4gYWxz byBkZWZpbmUgdGhlIGN1c3RvbWl6YXRpb24gZmlsZW5hbWUgaW4gYW4gZW52aXJvbm1lbnQKKzsg dmFyaWFibGUgKGxvZ2ljYWwgbmFtZSBpbiBWTVMpLCBDS0VSTU9ELCB3aGljaCB0YWtlcyBwcmVj ZWRlbmNlIG92ZXIKKzsgdGhlIG5hbWVzIHNob3duIGFib3ZlLgorOworOyBXSEFUIFRISVMgRklM RSBET0VTOgorOworOyAuIERlZmluZXMgeW91ciBkZWZhdWx0IGRpYWxpbmcgZGlyZWN0b3J5IG5h bWU6Cis7ICAgICAua2RkIGZvciBVTklYLCBPUy05IGFuZCBBZWdpczsgQ0tFUk1JVC5LREQgZm9y IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLgorOyAgICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGlz IHdpdGggdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEtfRElBTF9ESVJFQ1RPUlkKKzsgLiBEZWZp bmVzIHlvdXIgZGVmYXVsdCBuZXR3b3JrIGRpcmVjdG9yeSBuYW1lOgorOyAgICAgLmtuZCBmb3Ig VU5JWCwgT1MtOSBhbmQgQWVnaXM7IENLRVJNSVQuS05EIGZvciBvdGhlciBvcGVyYXRpbmcgc3lz dGVtcy4KKzsgICAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRoIHRoZSBlbnZpcm9ubWVu dCB2YXJpYWJsZSBLX05FVF9ESVJFQ1RPUlkKKzsgLiBEZWZpbmVzIHlvdXIgZGVmYXVsdCBzZXJ2 aWNlcyBkaXJlY3RvcnkgbmFtZToKKzsgICAgIC5rc2QgZm9yIFVOSVgsIE9TLTkgYW5kIEFlZ2lz OyBDS0VSTUlULktTRCBmb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCis7ICAgICAgICBZb3Ug Y2FuIG92ZXJyaWRlIHRoaXMgd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBLX1NFUlZJQ0VfRElS RUNUT1JZLgorOyAuIERlZmluZXMgeW91ciBjdXN0b21pemF0aW9uIGZpbGUgbmFtZSAobmFtZSBn aXZlbiBhYm92ZSkKKzsgLiBQZXJmb3JtcyBzeXN0ZW0tZGVwZW5kZW50IHNldHVwcyBmb3IgVU5J WCwgVk1TLCBPUy8yLCBldGMuCis7IC4gRGVmaW5lcyBWVFBSSU5UIG1hY3JvcyBmb3IgdXNlIHdp dGggSzk1LCBNUy1ET1MgS2VybWl0LCBldGMuCis7IC4gSWYgeW91IGhhdmUgYSBzZXJ2aWNlcyBk aXJlY3RvcnksIGFsbCB0aGUgbWFjcm9zIG5lZWRlZCB0byB1c2UgaXQgYXJlCis7ICAgICBkZWZp bmVkLiAgSWYgeW91IGRvbid0IGhhdmUgYSBzZXJ2aWNlcyBkaXJlY3RvcnksIHRoZSBtYWNyb3Mg YXJlIG5vdAorOyAgICAgZGVmaW5lZCBhbmQgS2VybWl0IHN0YXJ0cyBmYXN0ZXIuCis7IC4gRXhl Y3V0ZXMgeW91ciBwZXJzb25hbCBjdXN0b21pemF0aW9uIGZpbGUsIGlmIHlvdSBoYXZlIG9uZS4K KzsgICBOT1RFOiBZb3VyIGN1c3RvbWl6YXRpb24gZmlsZSBpcyBOT1QgZXhlY3V0ZWQgYnkgS2Vy bWl0IGl0c2VsZjsgaXQgaXMKKzsgICBleGVjdXRlZCBieSB0aGlzIGZpbGUuCis7Cis7IEluIFVO SVgsIHdpdGggQy1LZXJtaXQgNy4wIGFuZCBsYXRlciwgeW91IGNhbiBzdG9yZSB0aGlzIGZpbGUg d2l0aCBhIG5hbWUKKzsgb3RoZXIgdGhhbiAua2VybXJjLCBhbmQgaXQgd2lsbCBub3QgYmUgZXhl Y3V0ZWQgYXV0b21hdGljYWxseSwgYnV0LCBpZiB5b3UKKzsgZ2l2ZSB0aGlzIGZpbGUgZXhlY3V0 ZSBwZXJtaXNzaW9uLCB5b3UgY2FuIGV4ZWN1dGUgZGlyZWN0bHkgYmVjYXVzZSBvZiB0aGUKKzsg ImtlcmJhbmcgbGluZSIgYXQgdGhlIHRvcCwgd2hlbmV2ZXIgeW91IHdhbnQgYWxsIG9mIHRoZSBh Ym92ZSBhY3Rpb25zIHRvCis7IG9jY3VyLiAgVGhlIGtlcmJhbmcgbGluZSBtdXN0IHJlZmxlY3Qg dGhlIGFjdHVhbCBmdWxsIHBhdGggb2YgdGhlIEtlcm1pdAorOyA3LjAtb3ItbGF0ZXIgZXhlY3V0 YWJsZS4KKzsKKzsgQy1LZXJtaXQgNi4wIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgIlVzaW5n IEMtS2VybWl0IiwgMm5kIEVkaXRpb24sCis7IGJ5IEZyYW5rIGRhIENydXogYW5kIENocmlzdGlu ZSBNLiBHaWFub25lLCAxOTk3LCBEaWdpdGFsIFByZXNzIC8KKzsgQnV0dGVyd29ydGgtSGVpbmVt YW5uLCBJU0JOIDEtNTU1NTgtMTY0LTEuICBOZXcgZmVhdHVyZXMgb2Ygc3Vic2VxdWVudAorOyB2 ZXJzaW9ucyBhcmUgZG9jdW1lbnRlZCBhdCB0aGUgS2VybWl0IHdlYnNpdGU6Cis7IGh0dHA6Ly93 d3cuY29sdW1iaWEuZWR1L2tlcm1pdC8KKzsKKzsgRXZlcnl0aGluZyBhZnRlciB0aGlzIHBvaW50 IGRlcGVuZHMgb24gdGhlIHNjcmlwdCBwcm9ncmFtbWluZyBsYW5ndWFnZS4KKzsgVGhlIENIRUNL IGNvbW1hbmQgdGVybWluYXRlcyB0aGlzIGNvbW1hbmQgZmlsZSBpbW1lZGlhdGVseSBpZiB0aGUg c2NyaXB0Cis7IHByb2dyYW1taW5nIGxhbmd1YWdlIChJRiBjb21tYW5kKSBpcyBub3QgY29uZmln dXJlZC4KKzsKK3NldCB0YWtlIGVycm9yIG9uCQk7IFRoaXMgbWFrZXMgQ0hFQ0sgcXVpdCBpZiBu byBzY3JpcHQgbGFuZ3VhZ2UuCitjaGVjayBpZgkJCTsgRG8gd2UgaGF2ZSBhbiBJRiBjb21tYW5k PyAgSWYgbm90LCBxdWl0IG5vdy4KK3NldCB0YWtlIGVycm9yIG9mZgkJOyBCYWNrIHRvIG5vcm1h bC4KKworbG9jYWwgX3NkIF9zZXJ2aWNlZGlyIF94cCAgICAgICA7IERlY2xhcmUgbG9jYWwgdmFy aWFibGVzLgorCitDT01NRU5UIC0gQy1LZXJtaXQgdmVyc2lvbiA2LjAgb3IgbGF0ZXIgcmVxdWly ZWQuCis7CisKK2FzZyBfeHAgXHYoeHByb2dyYW0pCitpZiBub3QgZGVmIF94cCBhc2cgX3hwIFx2 KHByb2dyYW0pCitpZiBub3QgZXF1YWwgIlxtKF94cCkiICJDLUtlcm1pdCIgLQorICBzdG9wIDEg XHYoY21kZmlsZSk6IFRoaXMgaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBvbmx5IGZvciBDLUtlcm1p dC4KK2VjaG8gRXhlY3V0aW5nIFx2KGNtZGZpbGUpIGZvciBcdihzeXN0ZW0pLi4uCitpZiA8IFx2 KHZlcnNpb24pIDYwMDAwIC0KKyAgc3RvcCAxIFx2KGNtZGZpbGUpOiBDLUtlcm1pdCA2LjAgb3Ig bGF0ZXIgcmVxdWlyZWQuCisKK2ZvcndhcmQgXHYoc3lzdGVtKQkJOyBGaXJzdCBkbyBzeXN0ZW0t ZGVwZW5kZW50IGl0ZW1zLi4uCisKKzp1bmtub3duCQkJOyBTaG91bGQgbm90IGhhcHBlbgorU3Rv cCAxIEVycm9yOiBTeXN0ZW0gdHlwZSB1bmtub3duIQorCis6QWVnaXMJCQkJOyBBcG9sbG8gQWVn aXMgYW5kCis6VU5JWAkJCQk7IFVOSVgsIGFsbCB2ZXJzaW9ucworYXNnIF9teWluaXQgLQorICBc dihob21lKS5teWtlcm1yYwkJOyBDdXN0b21pemF0aW9uIGZpbGVuYW1lCitpZiByZW1vdGUgZm9y d2FyZCBDT01NT04gICAgICAgIDsgU2tpcCBsb2NhbC1tb2RlIGl0ZW1zIGlmICItUiIKK2FzZyBf ZGlhbGRpciAtCisgIFx2KGhvbWUpLmtkZAkJCTsgQy1LZXJtaXQgZGlhbGluZyBkaXJlY3RvcnkK K2FzZyBfbmV0ZGlyIC0KKyAgXHYoaG9tZSkua25kCQkJOyBDLUtlcm1pdCBuZXR3b3JrIGRpcmVj dG9yeQorYXNnIF9zZXJ2aWNlZGlyIC0KKyAgXHYoaG9tZSkua3NkCQkJOyBDLUtlcm1pdCBzZXJ2 aWNlcyBkaXJlY3RvcnkKK2ZvcndhcmQgQ09NTU9OICAgICAgICAgICAgICAgICAgOyBFbmQgb2Yg VU5JWCBzZWN0aW9uCisKKzpPUzkvNjhLCQkJOyBPUy05Cithc2cgX215aW5pdCAtCisgIFx2KGhv bWUpLm15a2VybXJjCQk7IEN1c3RvbWl6YXRpb24gZmlsZW5hbWUKK2lmIHJlbW90ZSBmb3J3YXJk IENPTU1PTgorYXNnIF9kaWFsZGlyIC0KKyAgXHYoaG9tZSkua2RkCQkJOyBDLUtlcm1pdCBkaWFs aW5nIGRpcmVjdG9yeQorYXNnIF9uZXRkaXIgLQorICBcdihob21lKS5rbmQJCQk7IEMtS2VybWl0 IG5ldHdvcmsgZGlyZWN0b3J5Cithc2cgX3NlcnZpY2VkaXIgLQorICBcdihob21lKS5rc2QJCQk7 IEMtS2VybWl0IHNlcnZpY2VzIGRpcmVjdG9yeQorZWxzZSBzZXQgZmlsZSBkaXNwbGF5IGNydAor Zm9yd2FyZCBDT01NT04JCQk7IEVuZCBvZiBPUy05IHNlY3Rpb24KKworOlZNUwkJCQk7IFZNUyBh bmQgT3BlblZNUworZm9yd2FyZCBDT01NT04KKworOk9TLzIJCQkJOyBLZXJtaXQgOTUKKzpXSU4z MgorZWNobyBUaGlzIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgbm90IGZvciB1c2Ugd2l0aCBLOTUu Citmb3J3YXJkIENPTU1PTiAgICAgICAgICAgICAgICAgIDsgRW5kIG9mIE9TLzIgc2VjdGlvbgor Cis6QU9TL1ZTCQkJCTsgRGF0YSBHZW5lcmFsIEFPUy9WUworc2V0IHdpbmRvdyAxCQkJOyBTbGlk aW5nIHdpbmRvd3MgZG9uJ3Qgd29yaworc2V0IGZpbGUgY2hhciBkZy1pbnRlcm5hdGlvbmFsCTsg RmlsZSBjaGFyYWN0ZXItc2V0CitzZXQgeGZlciBjaGFyIGxhdGluMQkJOyBUcmFuc2ZlciBjaGFy YWN0ZXItc2V0CitzZXQgZmlsZSBkaXNwbGF5IGNydCAgICAgICAgICAgIDsgRmlsZSB0cmFuc2Zl ciBmaXNwbGF5CitkZWYgY2xpIHB1c2gJCQk7IEVzY2FwZSB0byBDTEkKK2RlZiByZXNldCAtCQkJ OyBNYWNybyB0byByZXNldCBERyBEQVNIRVIgdGVybWluYWwKKyBydW4gd3JpdGUgWyFhc2NpaSAy MzYgMzA2IDMwMV0KK2ZvcndhcmQgQ09NTU9OICAgICAgICAgICAgICAgICAgOyBFbmQgb2YgQU9T L1ZTIHNlY3Rpb24KKworOkFtaWdhCQkJCTsgQ29tbW9kb3JlIEFtaWdhCitkZWYgY2xzIGVjaG8g XDI3W0hcMjdbMkoJOyBDTFMgY29tbWFuZCB0byBjbGVhciB0aGUgc2NyZWVuCitzZXQgZmlsZSBj aGFyIGxhdGluMQkJOyBVc2UgTGF0aW4gQWxwaGFiZXQgMSBmb3IgZmlsZSB0cmFuc2Zlcgorc2V0 IHhmZXIgY2hhciBsYXRpbjEJCTsgLi4uCitmb3J3YXJkIENPTU1PTiAgICAgICAgICAgICAgICAg IDsgRW5kIG9mIEFtaWdhIHNlY3Rpb24KKworOkF0YXJpX1NUCQkJOyBBdGFyaSBTVAorZGVmIGNs cyBlY2hvIFwyN0hcMjdKCQk7IENsZWFyIHNjcmVlbiBhYGxhIFZUNTIKK3NldCBzZXJ2ZXIgZGlz cGxheSBvbgkJOyBTaG93IGZpbGUgeGZlciBkaXNwbGF5IGluIHNlcnZlciBtb2RlIHRvbworc2V0 IHNlcnZlciB0aW1lb3V0IDE1CQk7IE5vbnplcm8gcmVxdWlyZWQgZm9yIF5DIGludGVycnVwdGlv biEKK2ZvcndhcmQgQ09NTU9OICAgICAgICAgICAgICAgICAgOyBFbmQgb2YgQXRhcmkgU1Qgc2Vj dGlvbgorCis6TWFjaW50b3NoCQkJOyBBcHBsZSBNYWNpbnRvc2gKK3NldCBzZXJ2ZXIgZGlzcGxh eSBvbgkJOyBTaG93IGZpbGUgeGZlciBkaXNwbGF5IGluIHNlcnZlciBtb2RlIHRvby4KK2Zvcndh cmQgQ09NTU9OCisKKzpTdHJhdHVzX1ZPUyAgICAgICAgICAgICAgICAgICAgOyBTdHJhdHVzIFZP UworYXNnIF9teWluaXQgXHYoaG9tZSlja2VybW9kLmluaQoraWYgcmVtb3RlIGZvcndhcmQgQ09N TU9OCithc2cgX2RpYWxkaXIgXHYoaG9tZSlja2VybWl0LmtkZAorYXNnIF9uZXRkaXIgXHYoaG9t ZSlja2VybWl0LmtuZAorYXNnIF9zZXJ2aWNlZGlyIFx2KGhvbWUpY2tlcm1pdC5rc2QKK2Zvcndh cmQgQ09NTU9OICAgICAgICAgICAgICAgICAgOyBFbmQgb2YgU3RyYXR1cyBWT1Mgc2VjdGlvbgor Cis6Q09NTU9OCQkJCTsgRm9yIGFsbCBzeXN0ZW1zCisKKzsgRGVmaW5lIG1hY3JvcyB0aGF0IGFy ZSB1c2VmdWwgd2hlbiBydW5uaW5nIEMtS2VybWl0IGluIHJlbW90ZSBtb2RlLgorOyBUaGVzZSBt YWNyb3Mgc2VydmUgbm8gcHVycG9zZSBvbiBsb2NhbC1tb2RlLW9ubHkgdmVyc2lvbnMgc3VjaCBh cworOyBPUy8yLCBNYWNpbnRvc2gsIEFtaWdhLCBhbmQgQXRhcmkgU1QgS2VybWl0LCBzbyB3ZSBz a2lwIGRlZmluaW5nIHRoZW0KKzsgZm9yIHRob3NlIHN5c3RlbXMuCis7CitpZiBub3QgPSAwIFxm aW5kZXgoXHYoc3lzdGVtKSxXSU4zMjpPUy8yOk1hY2ludG9zaDpBbWlnYTpBdGFyaV9TVCkgLQor ICBmb3J3YXJkIGZpbGVzCisKKzsgVlRQUklOVCBtYWNyby4gIFByaW50IGEgZmlsZSBvbiB5b3Vy IFBDJ3MgbG9jYWwgcHJpbnRlci4KKworZGVmIFZUUFJJTlQgZWNobyBcMjdbNWksIHR5cGUgXCUx LCBlY2hvIFwyN1s0aQorOyBvciBpZiB5b3VyIHByaW50ZXIgbmVlZHMgYSBmb3JtZmVlZCB0byBm b3JjZSB0aGUgcGFnZSBvdXQ6Cis7IGRlZiBWVFBSSU5UICBkZWYgZWNobyBcMjdbNWksIHR5cGUg XCUxLCBlY2hvIFwxMlwyN1s0aQorCis7IE1hY3JvcyBmb3IgaG9zdC1pbml0aWF0ZWQgZmlsZSB0 cmFuc2ZlciB1c2luZyBBUEM6Cis7ICAgTk9UIE5FRURFRCBBTlkgTU9SRSBiZWNhdXNlIG9mIGF1 dG9kb3dubG9hZC9hdXRvdXBsb2FkLgorOyAgIFJlbW92ZSB0aGUgZm9sbG93aW5nIEZPUldBUkQg Y29tbWFuZCB0byByZWluc3RhdGUgdGhlc2UgZGVmaW5pdGlvbnM6CisKKzpGSUxFUworCis7IEdl dCBjdXN0b21pemF0aW9uIGFuZCBkaXJlY3RvcnkgZmlsZSBuYW1lcy4gIEVudmlyb25tZW50IHZh cmlhYmxlcyB0YWtlCis7IHByZWNlZGVuY2UsIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBlZGl0IHRo aXMgZmlsZSB0byBjaGFuZ2UgdGhlc2UgZmlsZW5hbWVzLgorOworaWYgZGVmIFwkKENLRVJNT0Qp IGFzc2lnbiBfbXlpbml0IFwkKENLRVJNT0QpCitpZiBub3QgZGVmIF9teWluaXQgYXNzaWduIF9t eWluaXQgXHYoaG9tZSlDS0VSTU9ELklOSQorCitpZiByZW1vdGUgZm9yd2FyZCBDVVNUT00gOyBT a2lwIGFsbCB0aGlzIGlmIC1SIGdpdmVuIG9uIGNvbW1hbmQgbGluZQorCitpZiBkZWYgXCQoS19O RVRfRElSRUNUT1JZKSBhc3NpZ24gX25ldGRpciBcJChLX05FVF9ESVJFQ1RPUlkpCitpZiBub3Qg ZGVmIF9uZXRkaXIgYXNzaWduIF9uZXRkaXIgXHYoaG9tZSlDS0VSTUlULktORAorCitpZiBkZWYg XCQoS19ESUFMX0RJUkVDVE9SWSkgYXNzaWduIF9kaWFsZGlyIFwkKEtfRElBTF9ESVJFQ1RPUlkp CitpZiBub3QgZGVmIF9kaWFsZGlyIGFzc2lnbiBfZGlhbGRpciBcdihob21lKUNLRVJNSVQuS0RE CisKK0NIRUNLIERJQUwJCQk7IElzIHRoZXJlIGEgRElBTCBjb21tYW5kPworeGlmIGZhaWwgeyAJ CQk7IE5vLgorICAgIGVjaG8gRElBTCBkaXNhYmxlZAorICAgIGZvcndhcmQgQ1VTVE9NCit9CisK K0NIRUNLIE5FVFdPUksKK3hpZiBzdWNjZXNzIHsKKyAgICB4aWYgZXhpc3QgXG0oX25ldGRpcikg eworCXNldCBuZXQgZGlyZWN0b3J5IFxtKF9uZXRkaXIpCisJZWNobyB7IE5ldHdvcmsgZGlyZWN0 b3J5IGlzIFxtKF9uZXRkaXIpIH0KKyAgICB9Cit9CisKK2lmIGVxICJcdihuYW1lKSIgInRlbG5l dCIgZm9yd2FyZCBDVVNUT00KKworeGlmIGV4aXN0IFxtKF9kaWFsZGlyKSB7CisgICAgc2V0IGRp YWwgZGlyZWN0b3J5IFxtKF9kaWFsZGlyKQorICAgIGVjaG8geyBEaWFsIGRpcmVjdG9yeSBpcyBc bShfZGlhbGRpcikgfQorfQorCitDT01NRU5UIC0gU2VydmljZXMgZGlyZWN0b3J5CisKK2lmIGRl ZiBcJChLX1NFUlZJQ0VfRElSRUNUT1JZKSBhc3NpZ24gX3NlcnZpY2VkaXIgXCQoS19TRVJWSUNF X0RJUkVDVE9SWSkKK2lmIG5vdCBkZWYgX3NlcnZpY2VkaXIgYXNzaWduIF9zZXJ2aWNlZGlyIFx2 KGhvbWUpQ0tFUk1JVC5LU0QKKworOyBJZiBubyBzZXJ2aWNlcyBkaXJlY3RvcnkgaXMgZm91bmQg c2tpcCBhbGwgdGhlIGJpZyBtYWNybyBkZWZpbml0aW9ucyBhbmQKKzsgZ28gc3RyYWlnaHQgdG8g dGhlIGJvdHRvbSwgd2hlcmUgd2UgZXhlY3V0ZSB0aGUgY3VzdG9taXphdGlvbiBmaWxlLgorCitp ZiBub3QgZXhpc3QgXG0oX3NlcnZpY2VkaXIpIGZvcndhcmQgY3VzdG9tCisKK2VjaG8geyBTZXJ2 aWNlcyBkaXJlY3RvcnkgaXMgXG0oX3NlcnZpY2VkaXIpfQorCitkZWYgTUFYX1NWQ1MgMjAwICAg ICAgICAgICAgICAgOyBBZGp1c3QgdGhpcyBpZiB5b3UgaGF2ZSBtb3JlIGVudHJpZXMKK2RlZmlu ZSBfc2QgMCAgICAgICAgICAgICAgICAgICA7IEFzc3VtZSBubyBzZXJ2aWNlcyBkaXJlY3RvcnkK K29wZW4gcmVhZCBcbShfc2VydmljZWRpcikgICAgICA7IFRyeSB0byBvcGVuIHNlcnZpY2VzIGRp cmVjdG9yeSBmaWxlCit4aWYgc3VjY2VzcyB7CisgICAgZGVjbGFyZSBcJmRbXG0oTUFYX1NWQ1Mp XSAgOyBJdCdzIG9wZW4sIGRlY2xhcmUgZGlyZWN0b3J5IGFycmF5CisgICAgZm9yIFwlaSAxIFxt KE1BWF9TVkNTKSAxIHsgOyBSZWFkIHRoZSBsaW5lcyBpbnRvIHRoZSBhcnJheQorCXJlYWQgXCZk W1wlaV0KKwlpZiBmYWlsIGJyZWFrCisgICAgfQorICAgIGNsb3NlIHJlYWQKKyAgICB4aWYgPiBc JWkgIFxtKE1BWF9TVkNTKSB7CisJZWNobyBUb28gbWFueSBlbnRyaWVzIGluIHNlcnZpY2VzIGRp cmVjdG9yeQorCWVjaG8geyBNYXhpbXVtIGlzIFxtKE1BWF9TVkNTKS59CisJZWNobyB7IENoYW5n ZSBkZWZpbml0aW9uIG9mIE1BWF9TVkNTIGluIFx2KGNtZGZpbGUpIHRvIGFsbG93IG1vcmUuIH0K KwllY2hvIHsgU2VydmljZXMgZGlyZWN0b3J5IGRpc2FibGVkLn0KKyAgICB9IGVsc2UgeworICAg ICAgICBhc2cgXCZkWzBdIFxmZXZhbChcJWkgLSAxKQorICAgICAgICBkZWZpbmUgX3NkIDEKKyAg ICB9Cit9CisKK3hpZiBub3QgXG0oX3NkKSB7CisgICAgZGVmIGFjY2VzcyBlY2hvIHsgU2Vydmlj ZXMgZGlyZWN0b3J5IG5vdCBhdmFpbGFibGUufQorICAgIGFzZyBsaXN0IFxtKGFjY2VzcykKK30g ZWxzZSB7CisgICAgZGVmIEZJTkQgeworCXNldCBjYXNlIG9mZgorCWZvciBcJWkgMSBcJmRbMF0g MSB7CisJICAgIGlmIGVxIHtcJTF9IHtcZnN1YnN0cihcJmRbXCVpXSwxLFxmbGVuKFwlMSkpfSBi cmVhaworCX0KKwlpZiBub3QgPiBcJWkgXCZkWzBdIHJldHVybiBcJmRbXCVpXQorICAgIH0KKyAg ICBkZWYgTElTVCB7CisJeGlmID4gXHYoYXJnYykgMSB7CisJICAgIGRvIGZpbmQgXCUxCisJICAg IGlmIGRlZiBcdihyZXR1cm4pIGVjaG8gXHYocmV0dXJuKQorCSAgICBlbHNlIGVjaG8gXCUxOiBO b3QgZm91bmQKKwl9IGVsc2UgeworCSAgICBlY2hvIFwmZFswXSBpdGVtcyBpbiBzZXJ2aWNlcyBk aXJlY3Rvcnk6CisJICAgIGZvciBcJWkgMSBcJmRbMF0gMSB7IGVjaG8gXGZjb250KFwmZFtcJWld KSB9CisJfQorICAgIH0KKyAgICBkZWYgU1BMSVQgeyBhc2cgX3dvcmQxIFwlMSwgYXNnIF93b3Jk MiBcJTIgfQorICAgIGRlZiBET0FDQ0VTUyB7ICAgICAgICAgICAgICAgOyAoVXNlZCBpbnRlcm5h bGx5IGJ5IEFDQ0VTUyBtYWNybykKKwlkbyBcJTUgXCU2IFwlNyBcJTggXCU5ICAgOyBEbyB0aGUg Y29ubmVjdGlvbiBtYWNybworCWlmIGZhaWwgZW5kIDEKKyAgICAgICAgc3BsaXQgXCUzICAgICAg ICAgICAgICAgIDsgR2V0IHdvcmRzIGZyb20gXCUzCisJYXNnIFwlMyBcbShfd29yZDEpCisJYXNn IFwlMiBcbShfd29yZDIpCisJZG8gXCUzIFwlNCB7XCUxfSBcJTIgICAgIDsgTG9naW4gbWFjcm8s IHVzZXJpZCwgcGFzc3dvcmQsIHByb21wdAorICAgIH0KKyAgICBkZWYgQUNDRVNTIHsKKwlpZiBu b3QgZGVmaW5lZCBcJTEgZW5kIDEgYWNjZXNzIHdoYXQ/ICAgICAgICA7IENoZWNrIHNlcnZpY2UK KwlkbyBmaW5kIFwlMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IExvb2sgaXQg dXAKKwlpZiBzdWNjZXNzIGRvYWNjZXNzIHtcJTJ9IFx2KHJldHVybikgICAgICAgICA7IE9LLCB0 cnkgaXQKKwllbHNlIGVuZCAxICJcJTEiIG5vdCBpbiBzZXJ2aWNlcyBkaXJlY3RvcnkgICA7IE5v dCBmb3VuZAorCWlmIGZhaWwgZW5kIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsg RE9BQ0NFU1MgZmFpbGVkPworCXhpZiBlcSBcdihjbWRsZXZlbCkgMSB7CisJICAgIGVjaG8KKwkg ICAgZWNobyBBQ0NFU1M6IExvZ2luIHN1Y2NlZWRlZCAtIENPTk5FQ1RpbmcuLi4KKyAgICAgICAg ICAgIHNob3cgZXNjYXBlCisgICAgICAgICAgICBvdXRwdXQgXDEzCisJICAgIGNvbm5lY3QgL3F1 aWV0bHkKKyAgICAgICAgfQorICAgIH0KK30KKworOkNPTk5FQ1RJT04gOyBNYWNyb3MgZm9yIG1h a2luZyBjb25uZWN0aW9ucworCitDT01NRU5UIC0gU0VSSUFMIG1hY3JvLiAgQXJndW1lbnRzOgor OyBcJTEgPSBkZXZpY2UgbmFtZQorOyBcJTIgPSBzcGVlZAorOworZGVmIFNFUklBTCB7CisgICAg aWYgPCBcdihhcmdjKSAzICAgICAgICAgICAgICAgICAgICAgICAgIDsgQWxsIGFyZ3VtZW50cyBn aXZlbj8KKyAgICAgIGVuZCAxIFVzYWdlOiBTRVJJQUwgZGV2aWNlIHNwZWVkICAgICAgOyBOby4K KyAgICBzZXQgbGluZSBcJTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBPSywgdHJ5IHRv IFNFVCBMSU5FLgorICAgIGlmIGZhaWx1cmUgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 IElmIHRoaXMgZmFpbGVkLAorICAgICAgZW5kIDEgQ2FuJ3Qgb3BlbiBkZXZpY2U6IFwlMSAgICAg ICAgICA7IHByaW50IG1lc3NhZ2UgYW5kIHF1aXQuCisgICAgc2V0IHNwZWVkIFwlMiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsgVHJ5IHRvIHNldCB0aGUgc3BlZWQuCisgICAgaWYgZmFpbCBl bmQgMSBVbnN1cHBvcnRlZCBzcGVlZDogXCUyICAgIDsgRmFpbGVkLgorICAgIGVjaG8gQ29ubmVj dGlvbiBzdWNjZXNzZnVsLiAgICAgICAgICAgICA7IFN1Y2NlZWRlZC4KK30KKworQ09NTUVOVCAt IE5FVCBtYWNyby4gIEFyZ3VtZW50czoKKzsgXCUxID0gbmV0d29yayB0eXBlCis7IFwlMiA9IGhv c3QgbmFtZSBvciBhZGRyZXNzCis7CitkZWYgTkVUIHsKKyAgICBpZiA8IFx2KGFyZ2MpIDMgZW5k IDEgVXNhZ2U6IE5FVCBuZXR3b3JrIGhvc3QKKyAgICBzZXQgbmV0d29yayB0eXBlIFwlMQorICAg IGlmIGZhaWwgZW5kIDEgdW5zdXBwb3J0ZWQgbmV0d29yazogXCUxCisgICAgc2V0IGxvZ2luIHVz ZXIgICAgICAgICAgICAgICAgOyBEb24ndCBzZW5kIHVzZXIgSUQuCisgICAgc2V0IGhvc3QgXCUy CisgICAgaWYgZmFpbCBlbmQgMSBDYW4ndCByZWFjaCBob3N0OiBcJTIKKyAgICBlY2hvIENvbm5l Y3Rpb24gc3VjY2Vzc2Z1bC4KK30KKworQ09NTUVOVCAtIENBTEwgbWFjcm8uICBBcmd1bWVudHM6 Cis7Cis7IFwlMSA9IG1vZGVtIHR5cGUKKzsgXCUyID0gZGV2aWNlIG5hbWUKKzsgXCUzID0gc3Bl ZWQKKzsgXCU0ID0gcGhvbmUgbnVtYmVyCis7CitkZWYgQ0FMTCB7CisgICAgaWYgPCBcdihhcmdj KSA1IC0gICAgICAgICA7IEFsbCBhcmd1bWVudHMgcHJlc2VudD8KKyAgICAgIGVuZCAxIFVzYWdl OiBDQUxMIG1vZGVtIGRldmljZSBzcGVlZCBudW1iZXIKKyAgICB4aWYgbm90IGVxdWFsIHtcdiht b2RlbSl9IHtcJTF9IHsgOyBTZXQgbW9kZW0gdHlwZQorICAgICAgICBzZXQgbW9kZW0gXCUxCisg ICAgICAgIGlmIGZhaWwgZW5kIDEgdW5rbm93biBtb2RlbSB0eXBlOiBcJTEKKyAgICB9CisgICAg eGlmIG5vdCBlcXVhbCB7XHYobGluZSl9IHtcJTJ9IHsgOyBDb21tdW5pY2F0aW9uIGRldmljZQor ICAgICAgICBzZXQgbGluZSBcJTIKKyAgICAgICAgaWYgZmFpbCBlbmQgMSBjYW4ndCBvcGVuIGRl dmljZTogXCUyCisgICAgfQorICAgIHhpZiBub3QgZXF1YWwge1x2KHNwZWVkKX0ge1wlM30geyA7 IENvbW11bmljYXRpb24gc3BlZWQKKyAgICAgICAgc2V0IHNwZWVkIFwlMworICAgICAgICBpZiBm YWlsIGVuZCAxIHVuc3VwcG9ydGVkIHNwZWVkOiBcJTMKKyAgICB9CisgICAgZGlhbCBcJTQgICAg ICAgICAgICAgICAgICA7IERpYWwgdGhlIG51bWJlcgorICAgIGlmIGZhaWwgZW5kIDEgQ2FuJ3Qg cGxhY2UgY2FsbDogXCU0CisgICAgZW5kIDAgQ29ubmVjdGlvbiBzdWNjZXNzZnVsLgorfQorCitD T01NRU5UIC0gVENQQ0FMTCBtYWNyby4gIEFyZ3VtZW50czoKKzsKKzsgXCUxID0gc2VydmVyIG5h bWU6cG9ydAorOyBcJTIgPSBtb2RlbSB0eXBlCis7IFwlMyA9IHBob25lIG51bWJlcgorOworZGVm IFRDUENBTEwgeworICAgIGlmIDwgXHYoYXJnYykgNCAtICAgICAgICAgOyBBbGwgYXJndW1lbnRz IHByZXNlbnQ/CisgICAgICBlbmQgMSBVc2FnZTogVENQQ0FMTCBzZXJ2ZXJbOnBvcnRdIG1vZGVt IG51bWJlcgorICAgIHNldCBuZXQgdHlwZSB0Y3AvaXAgICAgICAgOyBXaGljaCBuZXR3b3JrIHRv IHVzZQorICAgIGlmIGZhaWwgZW5kIDEgdW5zdXBwb3J0ZWQgbmV0d29yazogdGNwL2lwCisgICAg c2V0IGhvc3QgXCUxICAgICAgICAgICAgICA7IEFjY2VzcyBzZXJ2ZXIgYW5kIHBvcnQKKyAgICBp ZiBmYWlsIGVuZCAxIGNhbid0IGFjY2VzcyBzZXJ2ZXIgXCUxCisgICAgc2V0IG1vZGVtIFwlMiAg ICAgICAgICAgICA7IFNldCBtb2RlbSB0eXBlCisgICAgaWYgZmFpbCBlbmQgMSB1bmtub3duIG1v ZGVtIHR5cGU6IFwlMgorICAgIGRpYWwgXCUzICAgICAgICAgICAgICAgICAgOyBEaWFsIHRoZSBu dW1iZXIKKyAgICBpZiBmYWlsIGVuZCAxIENhbid0IHBsYWNlIGNhbGw6IFwlMworICAgIGVuZCAw IENvbm5lY3Rpb24gc3VjY2Vzc2Z1bC4KK30KKworQ09NTUVOVCAtIFNQUklOVCBtYWNyby4gIEFy Z3VtZW50czoKKzsgXCUxID0gU2VydmljZSBuYW1lIG9yIGFkZHJlc3MKKzsKK2RlZiBTUFJJTlQg eworICAgIGlmIDwgXHYoYXJnYykgMiBlbmQgMSBVc2FnZTogXCUwIHNlcnZpY2UKKyAgICBzZXQg aW5wdXQgdGltZW91dCBwcm9jZWVkCisgICAgb3V0cHV0IEBEXDEzCisgICAgaW5wdXQgMTAgVEVS TUlOQUw9CisgICAgaWYgZmFpbCBlbmQgMSBObyB0ZXJtaW5hbCBwcm9tcHQKKyAgICBvdXQgRDFc MTMKKyAgICBpbnAgMTAgQAorICAgIGlmIGZhaWwgZW5kIDEgTm8gYXRzaWduIHByb21wdAorICAg IG91dHB1dCBjIFwlMVwxMworICAgIGlucHV0IDEwIENPTk5FQ1RFRAorICAgIGlmIGZhaWwgZW5k IDEgQ2FuJ3QgYWNjZXNzIFwlMSBmcm9tIFNwcmludE5ldAorfQorCitDT01NRU5UIC0gVUxPR0lO IG1hY3JvLiAgRm9yIGxvZ2dpbmcgaW50byBzeXN0ZW1zIHdoZXJlIHVzZXIgSUQgaXMgcmVxdWly ZWQKKzsgYnV0IHRoZXJlIGlzIG5vIHBhc3N3b3JkLiAgQXJndW1lbnRzOgorOyBcJTEgPSBVTklY IHVzZXIgSUQKKzsKK2RlZmluZSBVTE9HSU4geworICAgIGlmIDwgXHYoYXJnYykgMiBlbmQgMSBV c2FnZTogXCUwIHVzZXJpZAorICAgIHNldCBpbnB1dCB0aW1lb3V0IHByb2NlZWQgICAgIDsgSGFu ZGxlIHRpbWVvdXRzIG91cnNlbHZlcworICAgIHNldCBjYXNlIG9uICAgICAgICAgICAgICAgICAg IDsgQ2FzZSBpcyBpbXBvcnRhbnQgaW4gVU5JWAorICAgIG1pbnB1dCA1IGxvZ2luOiBVc2VybmFt ZToge1VzZXIgSUQ6fSB7VXNlciBOYW1lOn0KKyAgICBvdXQgXCUxXDEzICAgICAgICAgICAgICAg ICAgICA7IFNlbmQgdXNlcm5hbWUsIGNhcnJpYWdlIHJldHVybgorICAgIGVuZCAwCit9CisKK0NP TU1FTlQgLSBWTVNMT0dJTiBtYWNyby4gIEFyZ3VtZW50czoKKzsgXCUxID0gVk1TIHVzZXIgSUQK KzsgXCUyID0gUGFzc3dvcmQuICBJZiBwYXNzd29yZCBub3Qgc3VwcGxpZWQsIGl0IGlzIHByb21w dGVkIGZvci4KKzsgXCUzID0gU3lzdGVtIHByb21wdC4gIElmIG9taXR0ZWQgYSBkZWZhdWx0IGlz IHN1cHBsaWVkLgorOworZGVmaW5lIFZNU0xPR0lOIHsKKyAgICBpZiA8IFx2KGFyZ2MpIDIgZW5k IDEgVXNhZ2U6IFwlMCB1c2VyaWQgWyBwYXNzd29yZCBbIHByb21wdCBdIF0KKyAgICB3aGlsZSBu b3QgZGVmaW5lZCBcJTIgeworICAgICAgICBhc2txIFwlMiB7IFwlMSdzIHBhc3N3b3JkOiB9Cisg ICAgfQorICAgIHNldCBwYXJpdHkgbm9uZSAgICAgICAgICAgICAgIDsgU2V0IGNvbW11bmljYXRp b24gcGFyYW1ldGVycworICAgIHNldCBkdXBsZXggZnVsbAorICAgIHNldCBoYW5kc2hha2Ugbm9u ZQorICAgIHNldCBpbnB1dCB0aW1lb3V0IHByb2NlZWQgICAgIDsgSGFuZGxlIHRpbWVvdXRzIG91 cnNlbHZlcworICAgIGluIDUgVXNlcm5hbWU6ICAgICAgICAgICAgICAgIDsgSXMgcHJvbXB0IGFs cmVhZHkgdGhlcmU/CisgICAgeGlmIGZhaWwgeyAgICAgICAgICAgICAgICAgICAgOyBOby4KKyAg ICAgICAgZm9yIFwlaSAxIDMgMSB7ICAgICAgICAgICA7IFRyeSAzIHRpbWVzIHRvIGdldCBpdC4K KyAgICAgICAgICAgIG91dCBcMTMgICAgICAgICAgICAgICA7IFNlbmQgY2FycmlhZ2UgcmV0dXJu CisgICAgICAgICAgICBpbiA1IFVzZXJuYW1lOiAgICAgICAgOyBMb29rIGZvciBwcm9tcHQKKyAg ICAgICAgICAgIGlmIHN1Y2Nlc3MgYnJlYWsgICAgICA7IFN1Y2Nlc3MsIGdvIGxvZyBpbgorICAg ICAgICB9CisgICAgICAgIGlmID4gXCVpIDMgZW5kIDEgTm8gVXNlcm5hbWUgcHJvbXB0CisgICAg fQorICAgIG91dCBcJTFcMTMgICAgICAgICAgICAgICAgICAgIDsgU2VuZCB1c2VybmFtZSwgY2Fy cmlhZ2UgcmV0dXJuCisgICAgaW5wIDUgUGFzc3dvcmQ6ICAgICAgICAgICAgICAgOyBXYWl0IDUg c2VjIGZvciB0aGlzIHByb21wdAorICAgIGlmIGZhaWwgZW5kIDEgTm8gcGFzc3dvcmQgcHJvbXB0 CisgICAgcGF1c2UgICAgICAgICAgICAgICAgICAgICAgICAgOyBXYWl0IGEgc2VjCisgICAgb3V0 IFwlMlwxMyAgICAgICAgICAgICAgICAgICAgOyBTZW5kIHBhc3N3b3JkCisgICAgeGlmIG5vdCBl bXVsYXRpb24geyAgICAgICAgICAgOyBObyBlbXVsYXRvciBidWlsdCBpbj8KKyAgICAgICAgc2V0 IGlucHV0IGVjaG8gb2ZmICAgICAgICA7IFByb3RlY3QgdGVybWluYWwgZnJvbSB0aGlzCisgICAg ICAgIG1pbnB1dCAxMCB7XDI3Wn0ge1wyN1tjfSB7XDI3WzBjfSA7IEdldCB0ZXJtaW5hbCBJRCBx dWVyeQorICAgICAgICB4aWYgc3VjY2VzcyB7ICAgICAgICAgICAgICAgICAgICAgOyBHb3Qgb25l CisgICAgICAgICAgICBvdXRwdXQgXDI3W1w/MWMgICAgICAgICAgICAgICA7IFNlbmQgVlQxMDAg dGVybWluYWwgSUQKKyAgICAgICAgICAgIGluIDIgXDI3WzZuICAgICAgICAgICAgICAgICAgIDsg U2NyZWVuIGRpbWVuc2lvbiBxdWVyeT8KKyAgICAgICAgICAgIGlmIHN1Y2Mgb3V0IFwyN1tcdihy b3dzKTtcdihjb2xzKVIgOyBTZW5kIGRpbWVuc2lvbnMKKyAgICAgICAgfQorICAgICAgICBzZXQg aW5wdXQgZWNobyBvbiAgICAgICAgIDsgRWNobyBpbnB1dCBhZ2FpbgorICAgIH0KKyAgICBpZiBu b3QgZGVmIFwlMyAtICAgICAgICAgICAgICA7IElmIHdlIHdlcmUgbm90IGdpdmVuIGEgcHJvbXB0 CisgICAgICBhc2cgXCUzIHtcdihwcm9tcHQpfSAgICAgICAgOyB1c2UgdGhlIFNFVCBMT0dJTiBQ Uk9NUFQgdmFsdWUKKyAgICBpZiBub3QgZGVmIFwlMyAtICAgICAgICAgICAgICA7IElmIHdlIHN0 aWxsIGRvbid0IGhhdmUgYSBwcm9tcHQKKyAgICAgIGFzZyBcJTMge1wxMyRcMzJ9ICAgICAgICAg ICA7IHVzZSB0aGlzIG9uZSBhcyB0aGUgZGVmYXVsdAorICAgIHJlaW5wIDAgXCUzICAgICAgICAg ICAgICAgICAgIDsgRGlkIHdlIElOUFVUIHRoZSBwcm9tcHQgYWxyZWFkeT8KKyAgICBpZiBmYWls IGlucCA2MCBcJTMgICAgICAgICAgICA7IE5vLCBsb29rIG5vdy4KKyAgICBpZiBmYWlsIGVuZCAx Cit9CisKK0NPTU1FTlQgLSBVTklYTE9HSU4gbWFjcm8uICBBcmd1bWVudHM6Cis7IFwlMSA9IFVO SVggdXNlciBJRAorOyBcJTIgPSBQYXNzd29yZC4gIElmIHBhc3N3b3JkIG5vdCBzdXBwbGllZCwg aXQgaXMgcHJvbXB0ZWQgZm9yLgorOyBcJTMgPSBTeXN0ZW0gcHJvbXB0LiAgSWYgb21pdHRlZCBh IGRlZmF1bHQgaXMgc3VwcGxpZWQuCis7CitkZWZpbmUgVU5JWExPR0lOIHsKKyAgICBsb2NhbCBc JW0gXCVpCisgICAgaWYgPCBcdihhcmdjKSAyIC0KKyAgICAgIGVuZCAxIFVzYWdlOiBcJTAgdXNl cmlkIFsgcGFzc3dvcmQgWyBwcm9tcHQgXSBdCisgICAgd2hpbGUgbm90IGRlZmluZWQgXCUyIHsK KyAgICAgICAgYXNrcSBcJTIgeyBcJTEncyBwYXNzd29yZDogfQorICAgIH0KKyAgICBzZXQgaW5w dXQgZWNobyBvbgorICAgIHNldCBwYXJpdHkgbm9uZSAgICAgICAgICAgICAgIDsgU2V0IGNvbW11 bmljYXRpb24gcGFyYW1ldGVycy4KKyAgICBzZXQgZHVwbGV4IGZ1bGwKKyAgICBzZXQgaGFuZHNo YWtlIG5vbmUKKyAgICBzZXQgaW5wdXQgdGltZW91dCBwcm9jZWVkICAgICA7IEhhbmRsZSB0aW1l b3V0cyBvdXJzZWx2ZXMKKyAgICBzZXQgY2FzZSBvbiAgICAgICAgICAgICAgICAgICA7IENhc2Ug aXMgaW1wb3J0YW50IGluIFVOSVgKKyAgICBkZWYgXCVtIDEwICAgICAgICAgICAgICAgICAgICA7 IFdhaXRpbmcgdGltZSBmb3IgSU5QVVQKKyAgICBmb3IgXCVpIDEgNSAxIHsKKyAgICAgICAgbWlu cHV0IFwlbSBsb2dpbjoge3Nzd29yZDp9IHtQYXNzd29yZCBmb3IgXCUxOn0KKwlpZiBzdWNjZXNz IGJyZWFrCisJb3V0cHV0IFxCXDEzCisgICAgICAgIFwlbSA6Oj0gNi1cJTEKKyAgICB9CisgICAg aWYgPiBcJWkgNSBlbmQgMSB7Tm8gcmVzcG9uc2UgZnJvbSBob3N0fQorICAgIHhpZiA9IFx2KG1p bnB1dCkgMSB7CSAgOyBIYXZlIHVzZXJuYW1lIHByb21wdAorCW91dHB1dCBcJTFcMTMJCSAgOyBT ZW5kIHVzZXJuYW1lCisgICAgICAgIG1pbnB1dCA1IHtzc3dvcmQ6fSB7c3N3b3JkIGZvciBcJTE6 fSA7IFdhaXQgZm9yIHBhc3N3b3JkIHByb21wdAorCWlmIGZhaWwgZW5kIDEge05vIHBhc3N3b3Jk IHByb21wdH0KKyAgICB9CisgICAgcGF1c2UgICAgICAgICAgICAgICAgICAgICAgICAgOyBXYWl0 IGEgc2VjCisgICAgb3V0IFwlMlwxMyAgICAgICAgICAgICAgICAgICAgOyBTZW5kIHBhc3N3b3Jk CisgICAgaWYgbm90IGRlZiBcJTMgLSAgICAgICAgICAgICAgOyBJZiB3ZSB3ZXJlIG5vdCBnaXZl biBhIHByb21wdAorICAgICAgYXNnIFwlMyB7XHYocHJvbXB0KX0gICAgICAgIDsgdXNlIHRoZSBT RVQgTE9HSU4gUFJPTVBUIHZhbHVlCisgICAgaWYgbm90IGRlZiBcJTMgLSAgICAgICAgICAgICAg OyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgcHJvbXB0CisgICAgICBhc2cgXCUzIHtcMTAkIH0g ICAgICAgICAgICAgOyB1c2UgdGhpcyBvbmUgYXMgdGhlIGRlZmF1bHQKKyAgICByZWlucCAwIFwl MyAgICAgICAgICAgICAgICAgICA7IERpZCB3ZSBJTlBVVCB0aGUgcHJvbXB0IGFscmVhZHk/Cisg ICAgaWYgZmFpbCBpbnAgNjAgXCUzICAgICAgICAgICAgOyBObywgbG9vayBub3cuCisgICAgaWYg ZmFpbCBlbmQgMQorfQorCitDT01NRU5UIC0gVk1MSU5FTE9HSU4gbWFjcm8uICBBcmd1bWVudHM6 Cis7IFwlMSA9IFVzZXIgSUQKKzsgXCUyID0gUGFzc3dvcmQKKzsKK2RlZmluZSBWTUxJTkVMT0dJ TiB7CisgICAgaWYgPCBcdihhcmdjKSAyIC0KKyAgICAgIGVuZCAxIFVzYWdlOiBcJTAgdXNlcmlk IFsgcGFzc3dvcmQgXQorICAgIHdoaWxlIG5vdCBkZWZpbmVkIFwlMiB7CisgICAgICAgIGFza3Eg XCUyIHsgXCUxJ3MgcGFzc3dvcmQ6IH0KKyAgICB9CisgICAgc2V0IHBhcml0eSBtYXJrICAgICAg ICAgICAgICAgOyBTZXQgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzCisgICAgc2V0IGZsb3cgbm9u ZQorICAgIHNldCBoYW5kc2hha2UgeG9uCisgICAgc2V0IGR1cGxleCBoYWxmCisgICAgc2V0IGlu cHV0IHRpbWVvdXQgcXVpdCAgICAgICAgOyBEb24ndCBib3RoZXIgd2l0aCBJRiBGQUlMVVJFCisg ICAgaW5wdXQgMTAgQlJFQUsgS0VZICAgICAgICAgICAgOyBMb29rIGZvciBCUkVBSyBLRVkgcHJv bXB0CisgICAgcGF1c2UgMSAgICAgICAgICAgICAgICAgICAgICAgOyBXYWl0IGEgc2Vjb25kCisg ICAgb3V0cHV0IFxCICAgICAgICAgICAgICAgICAgICAgOyBTZW5kIEJSRUFLCisgICAgaW5wdXQg MTAgLlwxNywgb3V0cHV0IGxvZ29uIFwlMVwxMyAgICA7IE5vdyBsb2cgaW4KKyAgICBpbnB1dCAx MCAuXDE3LCBvdXRwdXQgXCUyXDEzICAgICAgICAgIDsgU2VuZCBwYXNzd29yZAorICAgIGlucHV0 IDEwIC5cMTcsIG91dHB1dCBcMTMgICAgICAgICAgICAgOyBTZW5kIGNhcnJpYWdlIHJldHVybgor ICAgIGlucHV0IDEwIC5cMTcsIG91dHB1dCBcMTMgICAgICAgICAgICAgOyBTZW5kIGFub3RoZXIg b25lCisgICAgZW5kIDAKK30KKworQ09NTUVOVCAtIFZNRlVMTE9HSU4gbWFjcm8uICBBcmd1bWVu dHM6Cis7IFwlMSA9IFVzZXIgSUQKKzsgXCUyID0gUGFzc3dvcmQKKzsKK2RlZmluZSBWTUZVTExP R0lOIHsKKyAgICBpZiA8IFx2KGFyZ2MpIDIgLQorICAgICAgZW5kIDEgVXNhZ2U6IFwlMCB1c2Vy aWQgWyBwYXNzd29yZCBdCisgICAgd2hpbGUgbm90IGRlZmluZWQgXCUyIHsKKyAgICAgICAgYXNr cSBcJTIgeyBcJTEncyBwYXNzd29yZDogfQorICAgIH0KKyAgICBzZXQgaW5wdXQgdGltZW91dCBx dWl0ICAgICAgOyBRdWl0IGlmIElOUFVUIGZhaWxzCisgICAgc2V0IHBhcml0eSBldmVuICAgICAg ICAgICAgIDsgU2V0IGNvbW11bmljYXRpb24gcGFyYW1ldGVycworICAgIHNldCBkdXBsZXggZnVs bAorICAgIHNldCBoYW5kc2hha2Ugbm9uZQorICAgIHNldCBmbG93IHhvbi94b2ZmCisgICAgb3V0 IFwxMyAgICAgICAgICAgICAgICAgICAgIDsgU2VuZCBjYXJyaWFnZSByZXR1cm4KKyAgICBpbnAg NSBURVJNSU5BTCBUWVBFOiAgICAgICAgOyBHZXQgdGVybWluYWwtdHlwZSBwcm9tcHQKKyAgICBv dXQgdnQtMTAwXDEzICAgICAgICAgICAgICAgOyBKdXN0IHNlbmQgInZ0LTEwMCIKKyAgICBpbnAg MjAgUlVOTklORyAgICAgICAgICAgICAgOyBHZXQgUlVOTklORyBtZXNzYWdlCisgICAgcGF1IDEg ICAgICAgICAgICAgICAgICAgICAgIDsgV2FpdCBvbmUgc2Vjb25kCisgICAgb3V0IFwlMVw5XCUy XDEzICAgICAgICAgICAgIDsgU2VuZCB1c2VyIElELCB0YWIsIHBhc3N3b3JkCisgICAgb3V0IFwx M1wxMyAgICAgICAgICAgICAgICAgIDsgVHdvIG1vcmUgY2FycmlhZ2UgcmV0dXJucworICAgIGVu ZCAwCit9CisKK0NPTU1FTlQgLSBDSVNMT0dJTiBtYWNyby4gIEFyZ3VtZW50czoKKzsgXCUxID0g Q29tcHVTZXJ2ZSBVc2VyIElECis7IFwlMiA9IFBhc3N3b3JkCis7IFwlMyA9IFByb21wdAorOwor ZGVmaW5lIENJU0xPR0lOIHsKKyAgICBpZiA8IFx2KGFyZ2MpIDIgLQorICAgICAgZW5kIDEgVXNh Z2U6IFwlMCB1c2VyaWQgWyBwYXNzd29yZCBbIHByb21wdCBdIF0KKyAgICB3aGlsZSBub3QgZGVm aW5lZCBcJTIgeworICAgICAgICBhc2txIFwlMiB7IFwlMSdzIHBhc3N3b3JkOiB9CisgICAgfQor ICAgIHNldCB0ZXJtaW5hbCBieXRlc2l6ZSA3ICAgICA7IE5vIDgtYml0IGNoYXJhY3RlcnMKKyAg ICBzZXQgaW5wdXQgdGltZW91dCBxdWl0ICAgICAgOyBTa2lwIHRoZSBJRiBGQUlMVVJFJ3MKKyAg ICBvdXRwdXQgXDEzICAgICAgICAgICAgICAgICAgOyBTZW5kIGluaXRpYWwgY2FycmlhZ2UgcmV0 dXJuCisgICAgaW5wdXQgNSBIb3N0IE5hbWU6ICAgICAgICAgIDsgTG9vayBmb3IgSG9zdCBOYW1l IHByb21wdAorICAgIG91dHB1dCBjaXNcMTMgICAgICAgICAgICAgICA7IFNlbmQgImNpcyIgYW5k IGNhcnJpYWdlIHJldHVybgorICAgIGlucHV0IDUgVXNlciBJRDogICAgICAgICAgICA7IExvb2sg Zm9yIFVzZXIgSUQgcHJvbXB0CisgICAgb3V0cHV0IFwlMVwxMyAgICAgICAgICAgICAgIDsgU2Vu ZCBJRCBhbmQgY2FycmlhZ2UgcmV0dXJuCisgICAgaW5wdXQgUGFzc3dvcmQ6ICAgICAgICAgICAg IDsgTG9vayBmb3IgUGFzc3dvcmQgcHJvbXB0CisgICAgb3V0cHV0IFwlMlwxMyAgICAgICAgICAg ICAgIDsgU2VuZCBwYXNzd29yZCBhbmQgQ1IKKyAgICBpZiBub3QgZGVmIFwlMyBhc2cgXCUzIFx2 KHByb21wdCkKKyAgICBpZiBub3QgZGVmIFwlMyBhc2cgXCUzIHtDb21wdVNlcnZlIEluZm9ybWF0 aW9uIFNlcnZpY2V9CisgICAgaW5wdXQgMzAgXCUzCisgICAgZW5kIDAKK30KKworQ09NTUVOVCAt IERPV0xPR0lOIG1hY3JvLiAgQXJndW1lbnRzOgorOyBcJTEgPSBEb3cgSm9uZXMgUGFzc3dvcmQK KzsKK2RlZmluZSBET1dMT0dJTiB7CisgICAgd2hpbGUgbm90IGRlZmluZWQgXCUxIHsgICAgICAg ICAgICAgIDsgR2V0IHBhc3N3b3JkCisgICAgICAgIGFza3EgXCUxIHsgRG93IEpvbmVzIHBhc3N3 b3JkOiB9CisgICAgfQorICAgIHNldCBpbnB1dCB0aW1lb3V0IHByb2NlZWQKKyAgICBpbnB1dCAy MCBTRVJWSUNFIFBMRUFTRVw/XD9cP1w/ICAgICAgOyBMb29rIGZvciBEb3cgcHJvbXB0CisgICAg aWYgZmFpbCBlbmQgMSBObyBzZXJ2aWNlIHByb21wdAorICAgIG91dCBkam5yXDEzICAgICAgICAg ICAgICAgICAgICAgICAgICA7IFNlbGVjdCBESk5SCisgICAgaW5wdXQgMTAgQEBAQEBAQEAgICAg ICAgICAgICAgICAgICAgICAgICA7IEdldCBwYXNzd29yZCBwcm9tcHQKKyAgICBpZiBmYWlsIGVu ZCAxIE5vIHBhc3N3b3JkIHByb21wdAorICAgIHBhdXNlIDEgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7IFdhaXQgYSBzZWNvbmQsIHRoZW4uLi4KKyAgICBvdXRwdXQgXCUxXDEzICAgICAg ICAgICAgICAgICAgICAgICAgOyBzZW5kIHBhc3N3b3JkIGFuZCBDUgorICAgIGlucHV0IDMwIEVO VEVSIFFVRVJZICAgICAgICAgICAgICAgICA7IEdldCBESk5SIHF1ZXJ5IHByb21wdAorICAgIGlm IGZhaWwgZW5kIDEgTm8gbWFpbiBxdWVyeSBwcm9tcHQKKyAgICBwYXVzZSAxCit9CisKK0NPTU1F TlQgLSBESk5SU1BSSU5UIG1hY3JvOiBMb2cgaW4gdG8gRG93IEpvbmVzIHZpYSBTcHJpbnROZXQu Cis7CitkZWYgZGpucnNwcmludCBzcHJpbnQgZG93LCBpZiBzdWNjZXNzIGRvd2xvZ2luCisKK0NP TU1FTlQgLSBOT0xPR0lOIG1hY3JvLiAgRG9lcyBub3RoaW5nLiAgVXNlIHdoZW4gbG9naW4gbm90 IHJlcXVpcmVkLgorOworZGVmIG5vbG9naW4gY29tbWVudAorCis6Q1VTVE9NIDsgQ3VzdG9taXph dGlvbiBmaWxlCisKKzsgSW4gVk1TIGFuZCBPcGVuVk1TLCBhbGxvdyBmb3Igc3lzdGVtLXdpZGUg c2l0ZSBjdXN0b21pemF0aW9ucworCit4aWYgZXF1YWwgIlx2KHN5c3RlbSkiICJWTVMiIHsKKyAg ICB4aWYgZXhpc3QgQ0tFUk1JVF9JTkk6Q0tFUk1JVC5TWVMgeworCWVjaG8gRXhlY3V0aW5nIENL RVJNSVRfSU5JOkNLRVJNSVQuU1lTCisJdGFrZSBDS0VSTUlUX0lOSTpDS0VSTUlULlNZUworICAg IH0KK30KKworOyBFeGVjdXRlIHVzZXIncyBwZXJzb25hbCBjdXN0b21pemF0aW9uIGZpbGUKKwor eGlmIGV4aXN0IFxtKF9teWluaXQpICB7CQk7IElmIGl0IGV4aXN0cywKKyAgICBlY2hvIEV4ZWN1 dGluZyBcbShfbXlpbml0KS4uLgk7IHByaW50IG1lc3NhZ2UsCisgICAgdGFrZSBcbShfbXlpbml0 KQkJCTsgYW5kIFRBS0UgdGhlIGZpbGUuCit9CisKKzsgRmluaXNoIHVwIHdpdGggdHJhZGl0aW9u YWwgZ3JlZXRpbmcuCisKK2lmIDwgXHYobnRpbWUpIDQzMjAwIGVjaG8gR29vZCBNb3JuaW5nIQor ICBlbHNlIGlmIDwgXHYobnRpbWUpIDYxMjAwIGVjaG8gR29vZCBBZnRlcm5vb24hCisgIGVsc2Ug ZWNobyBHb29kIEV2ZW5pbmcuCisKK0VuZCA7IG9mIEMtS2VybWl0IDguMCBpbml0aWFsaXphdGlv biBmaWxlLgoKZGlmZiAtLWdpdCBhL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4z MDIvb2NrZXJtb2QuaW5pIGIvY2tlcm1pdC05LjAuMzAyLWJ1aWxkL2NrZXJtaXQtOS4wLjMwMi9v Y2tlcm1vZC5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0OGMzZgot LS0gL2Rldi9udWxsCisrKyBiL2NrZXJtaXQtOS4wLjMwMi1idWlsZC9ja2VybWl0LTkuMC4zMDIv b2NrZXJtb2QuaW5pCkBAIC0wLDAgKzEsMTQ0IEBACis7IEZpbGUgQ0tFUk1PRC5JTkksIFNhbXBs ZSBDLUtlcm1pdCA3LjAgY3VzdG9taXphdGlvbiBmaWxlLgorOworOyBUaGlzIGZpbGUsIHdoaWNo IGlzIE9OTFkgQSBTQU1QTEUsIHNob3VsZCBiZSBjYWxsZWQ6Cis7Cis7ICAgLm15a2VybXJjICAg KFVOSVgsIE9TLTksIEFlZ2lzLCBCZUJveCwgUGxhbiA5KQorOyAgIENLRVJNT0QuSU5JIChWTVMs IE9wZW5WTVMsIEFPUy9WUywgT1MvMiwgQW1pZ2EsIEF0YXJpIFNUKQorOyAgIGNrZXJtb2QuaW5p IChTdHJhdHVzIFZPUykKKzsKKzsgVGhpcyBmaWxlIGlzIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkg YnkgdGhlIHN0YW5kYXJkIEMtS2VybWl0IGluaXRpYWxpemF0aW9uCis7IGZpbGUsIENLRVJNSVQu SU5JIChvciAua2VybXJjKS4gIFRoaXMgZmlsZSBpcyBub3QgZXhlY3V0ZWQgYnkgQy1LZXJtaXQg aXRzZWxmCis7IHVubGVzcyB0aGUgaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBub3QgZm91bmQuCis7 Cis7IE1PRGlmeSB0aGlzIGZpbGUgdG8gc3VpdCB5b3VyIG5lZWRzIGFuZCBwcmVmZXJlbmNlcywg YW5kIGluc3RhbGwgaXQgaW4geW91cgorOyBob21lIGRpcmVjdG9yeS4gIE9yIHJlcGxhY2UgaXQg ZW50aXJlbHkgd2l0aCBhIG5ldyBmaWxlLgorOworOyBUaGUgZGVzaWduIG9mIHRoaXMgc2FtcGxl IGN1c3RvbWl6YXRpb24gZmlsZSBsZXRzIHlvdSBmaWxsIGluIGEgc2VjdGlvbiBmb3IKKzsgZWFj aCBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbSB3aGVyZSB5b3UgcnVuIEMtS2VybWl0LgorOwor OyBJbiBVTklYLCBpZiB5b3UgZ2l2ZSB0aGlzIGZpbGUgZXhlY3V0ZSBwZXJtaXNzaW9uIGFuZCBt YWtlIHN1cmUgdGhlIHRvcAorOyBsaW5lIGluZGljYXRlcyB0aGUgZnVsbCBwYXRoIG9mIHRoZSBD LUtlcm1pdCA3LjAtb3ItbGF0ZXIgZXhlY3V0YWJsZSwgeW91Cis7IGNhbiBleGVjdXRlIHRoaXMg ZmlsZSBkaXJlY3RseSwgYXMgaWYgaXQgd2FzIGEgc2hlbGwgc2NyaXB0LCBleGNlcHQgaXQgaXMK KzsgaW50ZXJwcmV0ZWQgYnkgS2VybWl0IHJhdGhlciB0aGFuIHRoZSBzaGVsbC4gIFRoaXMgbGV0 cyB5b3UgaGF2ZSBhcyBtYW55Cis7IGRpZmZlcmVudCBzdGFydHVwIGZpbGVzIGFzIHlvdSBsaWtl LCBlYWNoIHN1aXRlZCB0byBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKzsKKzsgQXV0aG9yczogIENo cmlzdGluZSBHaWFub25lLCBGcmFuayBkYSBDcnV6LCBKZWZmcmV5IEFsdG1hbiwKKzsgICAgICAg ICAgIFRoZSBLZXJtaXQgUHJvamVjdCwgQ29sdW1iaWEgVW5pdmVyc2l0eS4KKzsgQ3JlYXRpb246 IDIzIE5vdmVtYmVyIDE5OTIgZm9yIEMtS2VybWl0IDVBKDE4OCkuCis7IE1vZGlmaWVkOiAzMCBK dW5lIDE5OTMgZm9yIGVkaXQgMTg5LgorOyAgICAgICAgICAgMDQgT2N0b2JlciAxOTk0IGZvciBl ZGl0IDE5MC4KKzsgICAgICAgICAgIDE3IEFwcmlsIDE5OTUgZm9yIGVkaXQgMTkxLgorOyAgICAg ICAgICAgIDYgU2VwdGVtYmVyIDE5OTYgZm9yIHZlcnNpb24gNi4wLCBlZGl0IDE5Mi4KKzsgICAg ICAgICAgICAxIEphbnVhcnkgMjAwMCBmb3IgdmVyc2lvbiA3LjAsIGVkaXQgMTk2LgorOyAgICAg ICAgICAgMTQgT2N0b2JlciAyMDAxIGZvciB2ZXJzaW9uIDguMCwgZWRpdCAyMDAuCisKK0VDSE8K K0VDSE8gRXhlY3V0aW5nIFNBTVBMRSBDLUtlcm1pdCBjdXN0b21pemF0aW9uIGZpbGUgXHYoY21k ZmlsZSkgZm9yIFx2KHN5c3RlbSkuLi4KK0VDSE8geyBQbGVhc2UgZWRpdCB0aGlzIGZpbGUgdG8g cmVmbGVjdCB5b3VyIG5lZWRzIGFuZCBwcmVmZXJlbmNlcy59CitFQ0hPCis7Cis7IC4uLiBhbmQg dGhlbiByZW1vdmUgdGhlIEVDSE8gY29tbWFuZHMgYWJvdmUuCisKK0NPTU1FTlQgLSBTZXR0aW5n cyB0aGF0IGFwcGx5IHRvIGFsbCB0aGUgc3lzdGVtcyBJIHVzZToKKzsKK3NldCBkZWxheSAxICAg ICAgICAgICAgICAgICAgOyBJIGVzY2FwZSBiYWNrIHF1aWNrbHkKK3NldCBkaWFsIGRpc3BsYXkg b24gICAgICAgICAgOyBJIGxpa2UgdG8gd2F0Y2ggQy1LZXJtaXQgZGlhbAorCis7IERpYWxpbmcg bG9jYWxlIGFuZCBtZXRob2QKKzsKKzsgU0VUIERJQUwgQ09VTlRSWS1DT0RFIDEgICAgOyBVbmNv bW1lbnQgYW5kIHJlcGxhY2Ugd2l0aCB5b3VycworOyBTRVQgRElBTCBBUkVBLUNPREUgMDAwICAg ICA7IFVuY29tbWVudCBhbmQgcmVwbGFjZSB3aXRoIHlvdXJzCis7IFNFVCBESUFMIExELVBSRUZJ WCAxICAgICAgIDsgVW5jb21tZW50IGFuZCByZXBsYWNlIHdpdGggeW91cnMKKzsgU0VUIERJQUwg SU5UTC1QUkVGSVggMDExICAgOyBVbmNvbW1lbnQgYW5kIHJlcGxhY2Ugd2l0aCB5b3VycworOyBT RVQgRElBTCBNRVRIT0QgVE9ORSAgICAgICA7IFVuY29tbWVudCBhbmQgcmVwbGFjZSB3aXRoIFBV TFNFIGlmIG5lY2Vzc2FyeQorOyBTRVQgRElBTCBESVJFQ1RPUlkgLi4uIC4uLiA7IExpc3QgZGlh bGluZyBkaXJlY3RvcnkgZmlsZXMgaGVyZQorCitpZiA8IFx2KHZlcnNpb24pIDYwMDE5MiAtCisg IHN0b3AgMSBcdihjbWRmaWxlKTogQy1LZXJtaXQgNi4wLjE5MiBvciBsYXRlciByZXF1aXJlZC4K Kworc2V0IHRha2UgZXJyb3Igb24gICAgICAgICAgICA7IE1ha2UgZXJyb3JzIGZhdGFsIHRlbXBv cmFyaWx5CitjaGVjayBpZiAgICAgICAgICAgICAgICAgICAgIDsgRG8gd2UgaGF2ZSBhbiBJRiBj b21tYW5kPworc2V0IHRha2UgZXJyb3Igb2ZmICAgICAgICAgICA7IFllcyB3ZSBkbywgYmFjayB0 byBub3JtYWwKKworOyBUaGUgT05fRVhJVCBtYWNybyBpcyBleGVjdXRlZCBhdXRvbWF0aWNhbGx5 IHdoZW4gQy1LZXJtaXQgZXhpdHMuCis7IERlZmluZSBhcyBkZXNpcmVkLgorOworZGVmaW5lIE9O X0VYSVQgZWNobyBSZXR1cm5pbmcgeW91IHRvIFx2KHN5c3RlbSkgbm93LgorCis7IFN5c3RlbS1p bmRlcGVuZGVudCBxdWljayBkaWFsaW5nIG1hY3JvLiAgRGVwZW5kcyBvbiBoYXZpbmcgdGhlCis7 IG1hY3JvcyBNWU1PREVNLCBNWVBPUlQsIGFuZCAob3B0aW9uYWxseSkgTVlTUEVFRCBkZWZpbmVk IGluIHRoZQorOyBzeXN0ZW0tZGVwZW5kZW50IHNlY3Rpb25zIGJlbG93LgorOworZGVmaW5lIE1Z RElBTCB7CisgICAgaWYgbm90IGRlZmluZWQgTVlNT0RFTSBlbmQgMSB7XCUwOiBNb2RlbSB0eXBl IG5vdCBkZWZpbmVkLn0KKyAgICBzZXQgbW9kZW0gdHlwZSBcbShNWU1PREVNKQorICAgIGlmIGZh aWwgZW5kIDEge1wlMDogXG0oTVlNT0RFTSk6IFVuc3VwcG9ydGVkIG1vZGVtIHR5cGUufQorICAg IGlmIG5vdCBkZWZpbmVkIE1ZUE9SVCBlbmQgMSB7XCUwOiBDb21tdW5pY2F0aW9uIHBvcnQgbm90 IGRlZmluZWQufQorICAgIHNldCBwb3J0IFxtKE1ZUE9SVCkKKyAgICBpZiBmYWlsIGVuZCAxIHtc JTA6IFNFVCBQT1JUIFxtKE1ZUE9SVCkgZmFpbGVkLn0KKyAgICBpZiBkZWZpbmVkIE1ZRkxPVyBz ZXQgZmxvdyBcbShNWUZMT1cpCisgICAgaWYgZmFpbCBlbmQgMSB7XCUwOiBTRVQgRkxPVyBcbShN WUZMT1cpIGZhaWxlZC59CisgICAgaWYgZGVmaW5lZCBNWVNQRUVEIHNldCBzcGVlZCBcbShNWVNQ RUVEKQorICAgIGlmIGZhaWwgZW5kIDEge1wlMDogU0VUIFNQRUVEIFxtKE1ZU1BFRUQpIGZhaWxl ZC59CisgICAgZGlhbCBcJTFcJTJcJTNcJTRcJTVcJTZcJTdcJThcJTkKKyAgICBlbmQgXHYoc3Rh dHVzKQorfQorCitmb3J3YXJkIFx2KHN5c3RlbSkgICAgICAgICAgICAgIDsgR28gZXhlY3V0ZSBz eXN0ZW0tZGVwZW5kZW50IGNvbW1hbmRzCisKKzpVTklYICAgICAgICAgICAgICAgICAgICAgICAg ICAgOyBVTklYLCBhbGwgdmVyc2lvbnMuLi4KK2RlZmluZSBNWVBPUlQgL2Rldi9jdWEgICAgICAg ICAgOyBNeSBkaWFsaW5nIGVudmlyb25tZW50CitkZWZpbmUgTVlNT0RFTSB1c3IgICAgICAgICAg ICAgIDsgUmVwbGFjZSB0aGVzZSBieSB3aGF0IHlvdSBhY3R1YWxseSBoYXZlCitkZWZpbmUgTVlT UEVFRCA1NzYwMAorOworOyBJZiB5b3Ugd2FudCBhbGwgeW91ciBkb3dubG9hZHMgdG8gZ28gdG8g dGhlIHNhbWUgZGlyZWN0b3J5LCBubyBtYXR0ZXIKKzsgd2hhdCB5b3VyIGN1cnJlbnQgZGlyZWN0 b3J5IGlzLCB1bmNvbW1lbnQgYW5kIGVkaXQgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorOworOyAg IHNldCBmaWxlIGRvd25sb2FkLWRpcmVjdG9yeSB+L2Rvd25sb2FkIDsgRG93bmxvYWQgZGlyZWN0 b3J5IGZvciBVTklYCisKKzsgUHV0IG90aGVyIFVOSVgtc3BlY2lmaWMgY29tbWFuZHMgaGVyZS4u LgorZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IEVuZCBvZiBVTklYIHNlY3Rpb24K KworOlZNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFZNUyBhbmQgT3BlblZNUworZGVm aW5lIE1ZUE9SVCBUWEEwOiAgICAgICAgICAgICA7IE15IGRpYWxpbmcgZW52aXJvbm1lbnQKK2Rl ZmluZSBNWU1PREVNIHVzciAgICAgICAgICAgICAgOyBSZXBsYWNlIHRoZXNlIGJ5IHdoYXQgeW91 IGFjdHVhbGx5IGhhdmUKK2RlZmluZSBNWVNQRUVEIDU3NjAwCis7IHNldCBmaWxlIGRvd25sb2Fk LWRpcmVjdG9yeSBbXCQoVVNFUikuRE9XTkxPQURdIDsgRG93bmxvYWQgZGlyZWN0b3J5IGZvciBW TVMKKzsgUHV0IG90aGVyIFZNUy1zcGVjaWZpYyBjb21tYW5kcyBoZXJlLi4uCitlbmQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsgRW5kIG9mIFZNUyBzZWN0aW9uCisKKzpXSU4zMiAgICAg ICAgICAgICAgICAgICAgICAgICAgOyBXaW5kb3dzIGFuZCBPUy8yIGN1c3RvbWl6YXRpb25zLi4u Cis6T1MvMgorZGVmaW5lIE1ZUE9SVCBDT00xICAgICAgICAgICAgICA7IE15IGRpYWxpbmcgZW52 aXJvbm1lbnQKK2RlZmluZSBNWU1PREVNIHVzciAgICAgICAgICAgICAgOyBSZXBsYWNlIHRoZXNl IGJ5IHdoYXQgeW91IGFjdHVhbGx5IGhhdmUKK2RlZmluZSBNWVNQRUVEIDU3NjAwCitzZXQgY29t bWFuZCBieXRlIDggICAgICAgICAgICAgIDsgVXNlIDggYml0cyBiZXR3ZWVuIEtlcm1pdCBhbmQg Y29uc29sZQorc2V0IHhmZXIgY2hhciBsYXRpbjEgICAgICAgICAgICA7IFVzZSBMYXRpbi0xIGZv ciB0ZXh0IGZpbGUgdHJhbnNmZXIKK3NldCB0ZXJtIGNoYXIgbGF0aW4xICAgICAgICAgICAgOyBB bmQgdXNlIExhdGluLTEgZHVyaW5nIENPTk5FQ1QgbW9kZQorOyBzZXQgZmlsZSBkb3dubG9hZC1k aXJlY3RvcnkgQzpcRE9XTkxPQURTCitlbmQKKworOk9TOS82OEsgICAgICAgICAgICAgICAgICAg ICAgICA7IE9TLTkvNjgwMDAKK2RlZmluZSBNWVBPUlQgL3QzICAgICAgICAgICAgICAgOyBNeSBk aWFsaW5nIGVudmlyb25tZW50CitkZWZpbmUgTVlNT0RFTSB1c3IgICAgICAgICAgICAgIDsgUmVw bGFjZSB0aGVzZSBieSB3aGF0IHlvdSBhY3R1YWxseSBoYXZlCitkZWZpbmUgTVlTUEVFRCA5NjAw Cis7IHNldCBmaWxlIGRvd25sb2FkLWRpcmVjdG9yeSB+L2Rvd25sb2FkcworZW5kICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7IEVuZCBvZiBPUy05IHNlY3Rpb24KKworOkFPUy9WUyAgICAg ICAgICAgICAgICAgICAgICAgICA7IERhdGEgR2VuZXJhbCBBT1MvVlMKK2RlZmluZSBNWVBPUlQg QGNvbjMgICAgICAgICAgICAgOyBNeSBkaWFsaW5nIGVudmlyb25tZW50CitkZWZpbmUgTVlNT0RF TSB1c3IgICAgICAgICAgICAgIDsgUmVwbGFjZSB0aGVzZSBieSB3aGF0IHlvdSBhY3R1YWxseSBo YXZlCitkZWZpbmUgTVlTUEVFRCA5NjAwCis7IHNldCBmaWxlIGRvd25sb2FkLWRpcmVjdG9yeSBc dihob21lKURPV05MT0FEUworZW5kCisKKzsgQW5kIHNvIG9uLCB5b3UgZ2V0IHRoZSBpZGVhLi4u Cis7IEZpbGwgaW4gdGhlIHNlY3Rpb25zIHRoYXQgYXBwbHkgdG8geW91LgorCis6U3RyYXR1c19W T1MJCQk7IFN0cmF0dXMgVk9TCis6QW1pZ2EgICAgICAgICAgICAgICAgICAgICAgICAgIDsgQ29t bW9kb3JlIEFtaWdhCis6QXRhcmlfU1QgICAgICAgICAgICAgICAgICAgICAgIDsgQXRhcmkgU1QK KzpNYWNpbnRvc2ggICAgICAgICAgICAgICAgICAgICAgOyBBcHBsZSBNYWNpbnRvc2gKKzp1bmtu b3duICAgICAgICAgICAgICAgICAgICAgICAgOyBPdGhlcnMKKworOyAoRW5kIG9mIENLRVJNT0Qu SU5JKQoKZGlmZiAtLWdpdCBhL2NrZXJtaXQuc3BlYyBiL2NrZXJtaXQuc3BlYwppbmRleCA2ZTg1 MzExLi41ZmIyMjFiIDEwMDY0NAotLS0gYS9ja2VybWl0LnNwZWMKKysrIGIvY2tlcm1pdC5zcGVj CkBAIC0zLDcgKzMsNyBAQAogU3VtbWFyeTogICAgICAgVGhlIHF1aW50ZXNzZW50aWFsIGFsbC1w dXJwb3NlIGNvbW11bmljYXRpb25zIHByb2dyYW0KIE5hbWU6ICAgICAgICAgIGNrZXJtaXQKIFZl cnNpb246ICAgICAgIDkuMC4le3BhdGNobGV2ZWx9Ci1SZWxlYXNlOiAgICAgICAzNiV7P2Rpc3R9 CitSZWxlYXNlOiAgICAgICAzNyV7P2Rpc3R9CiAjIE1vc3Qgb2YgdGhlIHBhY2thZ2UgaXMgdW5k ZXIgYSB0aHJlZS1jbGF1c2UgQlNEIGxpY2Vuc2UsIGJ1dCB0aGUgZmlsZQogIyBja2F1dDIuaCBh cHBlYXJzIHRvIGJlIGNvdmVyZWQgYnkgdGhyZWUgbGljZW5zZXM6CiAjICAgVGhlIGJsYW5rZXQg bGljZW5zZSBpbiBDT1BZSU5HLlRYVCBhbmQgY2tjbWFpLmMsIHdoaWNoIGlzIEJTRCB0aHJlZS1j bGF1c2UKQEAgLTUzLDcgKzUzLDcgQEAgY3AgJXtTT1VSQ0U2fSAuCiAKICVidWlsZAogJW1ha2Vf YnVpbGQgbGludXggXAotICAgICAgICBLRkxBR1M9Ii1PMCAkUlBNX09QVF9GTEFHUyAtV2FsbCAt RE9QRU5TU0xfMDk3IC1Ec2RhdGE9c19kYXRhIC1ESEFWRV9PUEVOUFRZIC1EJ2tyYjVfaW5pdF9l dHMoX19jdHgpPScgLURNQUlOVFlQRT1pbnQiIFwKKyAgICAgICAgS0ZMQUdTPSItTzAgJFJQTV9P UFRfRkxBR1MgLVdhbGwgLWFuc2kgLURfREVGQVVMVF9TT1VSQ0UgLURPUEVOU1NMXzA5NyAtRHNk YXRhPXNfZGF0YSAtREhBVkVfT1BFTlBUWSAtRCdrcmI1X2luaXRfZXRzKF9fY3R4KT0nIC1ETUFJ TlRZUEU9aW50IiBcCiAgICAgICAgIExOS0ZMQUdTPSIlez9vcHRmbGFnc30gJXs/X19nbG9iYWxf bGRmbGFnc30iIFwKICAgICAgICAgSzRMSUI9IFwKICAgICAgICAgSzRJTkM9IFwKQEAgLTg5LDYg Kzg5LDkgQEAgaW5zdGFsbCAtRCAtbSAwNjQ0ICV7U09VUkNFNX0gJXtidWlsZHJvb3R9JXtfc3lz Y29uZmRpcn0va2VybWl0L2NrZXJtaXQucGhvbmUKICV7X21hbmRpcn0vbWFuMS9rZXJtaXQuMSoK IAogJWNoYW5nZWxvZworKiBXZWQgSmFuIDIyIDIwMjUgRGF2aWQgQ2FudHJlbGwgPGRjYW50cmVs bEByZWRoYXQuY29tPiAtIDkuMC4zMDItMzcKKy0gQWRkICctYW5zaSAtRF9ERUZBVUxUX1NPVVJD RScgdG8gS0ZMQUcgdmFyaWFibGUgdG8gZml4IEZUQkZTICgjMjMzOTk3MSkKKwogKiBUaHUgSmFu IDE2IDIwMjUgRmVkb3JhIFJlbGVhc2UgRW5naW5lZXJpbmcgPHJlbGVuZ0BmZWRvcmFwcm9qZWN0 Lm9yZz4gLSA5LjAuMzAyLTM2CiAtIFJlYnVpbHQgZm9yIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5v cmcvd2lraS9GZWRvcmFfNDJfTWFzc19SZWJ1aWxkCiAKCmRpZmYgLS1naXQgYS9sb2cgYi9sb2cK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5NmQ2ZAotLS0gL2Rldi9udWxs CisrKyBiL2xvZwpAQCAtMCwwICsxLDQyIEBACitVcGxvYWRpbmcgc3JwbTogY2tlcm1pdC05LjAu MzAyLTM3LmZjNDIuc3JjLnJwbQorWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF0gIDAwJSAwMDowMDowMCAgICAgMC4wMCBCICAgICAgICAtIEIvc2VjDVs9PT09PT09PT09PSAg ICAgICAgICAgICAgICAgICAgICAgICBdICAzMyUgMDA6MDA6MDAgICAxLjAwIE1pQiAgMTAuMTAg TWlCL3NlYw1bPT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgXSAgNjYlIDAwOjAw OjAwICAgMi4wMCBNaUIgIDMxLjc5IE1pQi9zZWMNWz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09IF0gIDk5JSAwMDowMDowMCAgIDMuMDAgTWlCICAzMS45MCBNaUIvc2VjDVs9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dIDEwMCUgMDA6MDA6MDAgICAzLjAxIE1p QiAgMTYuNDAgTWlCL3NlYw0KK0NyZWF0ZWQgdGFzazogMTI4MzIzNjQ4CitUYXNrIGluZm86IGh0 dHBzOi8va29qaS5mZWRvcmFwcm9qZWN0Lm9yZy9rb2ppL3Rhc2tpbmZvP3Rhc2tJRD0xMjgzMjM2 NDgKK1dhdGNoaW5nIHRhc2tzICh0aGlzIG1heSBiZSBzYWZlbHkgaW50ZXJydXB0ZWQpLi4uCisx MjgzMjM2NDggYnVpbGQgKHJhd2hpZGUsIGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0p OiBmcmVlCisxMjgzMjM2NDggYnVpbGQgKHJhd2hpZGUsIGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQy LnNyYy5ycG0pOiBmcmVlIC0+IGFzc2lnbmVkIChidWlsZGh3LXg4Ni0xMC5pYWQyLmZlZG9yYXBy b2plY3Qub3JnKQorMTI4MzIzNjQ4IGJ1aWxkIChyYXdoaWRlLCBja2VybWl0LTkuMC4zMDItMzcu ZmM0Mi5zcmMucnBtKTogYXNzaWduZWQgKGJ1aWxkaHcteDg2LTEwLmlhZDIuZmVkb3JhcHJvamVj dC5vcmcpIC0+IG9wZW4gKGJ1aWxkaHcteDg2LTEwLmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpCisg IDEyODMyMzY5NCByZWJ1aWxkU1JQTSAoczM5MHgpOiBmcmVlCisgIDEyODMyMzY5NCByZWJ1aWxk U1JQTSAoczM5MHgpOiBmcmVlIC0+IGFzc2lnbmVkIChidWlsZHZtLXMzOTB4LTAyLnMzOTAuZmVk b3JhcHJvamVjdC5vcmcpCisgIDEyODMyMzY5NCByZWJ1aWxkU1JQTSAoczM5MHgpOiBhc3NpZ25l ZCAoYnVpbGR2bS1zMzkweC0wMi5zMzkwLmZlZG9yYXByb2plY3Qub3JnKSAtPiBvcGVuIChidWls ZHZtLXMzOTB4LTAyLnMzOTAuZmVkb3JhcHJvamVjdC5vcmcpCisgIDEyODMyMzY5NCByZWJ1aWxk U1JQTSAoczM5MHgpOiBvcGVuIChidWlsZHZtLXMzOTB4LTAyLnMzOTAuZmVkb3JhcHJvamVjdC5v cmcpIC0+IGNsb3NlZAorICAwIGZyZWUgIDEgb3BlbiAgMSBkb25lICAwIGZhaWxlZAorICAxMjgz MjM3NDggYnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCBpNjg2KTog ZnJlZQorICAxMjgzMjM3NTIgYnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMu cnBtLCBzMzkweCk6IGZyZWUKKyAgMTI4MzIzNzQ5IGJ1aWxkQXJjaCAoY2tlcm1pdC05LjAuMzAy LTM3LmZjNDIuc3JjLnJwbSwgeDg2XzY0KTogZnJlZQorICAxMjgzMjM3NTAgYnVpbGRBcmNoIChj a2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCBhYXJjaDY0KTogZnJlZQorICAxMjgzMjM3 NTEgYnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCBwcGM2NGxlKTog ZnJlZQorICAxMjgzMjM3NDggYnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMu cnBtLCBpNjg2KTogZnJlZSAtPiBhc3NpZ25lZCAoYnVpbGRody14ODYtMDEuaWFkMi5mZWRvcmFw cm9qZWN0Lm9yZykKKyAgMTI4MzIzNzUyIGJ1aWxkQXJjaCAoY2tlcm1pdC05LjAuMzAyLTM3LmZj NDIuc3JjLnJwbSwgczM5MHgpOiBmcmVlIC0+IGFzc2lnbmVkIChidWlsZHZtLXMzOTB4LTAzLnMz OTAuZmVkb3JhcHJvamVjdC5vcmcpCisgIDEyODMyMzc0OSBidWlsZEFyY2ggKGNrZXJtaXQtOS4w LjMwMi0zNy5mYzQyLnNyYy5ycG0sIHg4Nl82NCk6IGZyZWUgLT4gYXNzaWduZWQgKGJ1aWxkaHct eDg2LTAyLmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpCisgIDEyODMyMzc1MCBidWlsZEFyY2ggKGNr ZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIGFhcmNoNjQpOiBmcmVlIC0+IGFzc2lnbmVk IChidWlsZHZtLWE2NC0wOS5pYWQyLmZlZG9yYXByb2plY3Qub3JnKQorICAxMjgzMjM3NTEgYnVp bGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCBwcGM2NGxlKTogZnJlZSAt PiBhc3NpZ25lZCAoYnVpbGR2bS1wcGM2NGxlLTIwLmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpCisg IDEyODMyMzc1MiBidWlsZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIHMz OTB4KTogYXNzaWduZWQgKGJ1aWxkdm0tczM5MHgtMDMuczM5MC5mZWRvcmFwcm9qZWN0Lm9yZykg LT4gb3BlbiAoYnVpbGR2bS1zMzkweC0wMy5zMzkwLmZlZG9yYXByb2plY3Qub3JnKQorICAxMjgz MjM3NDkgYnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCB4ODZfNjQp OiBhc3NpZ25lZCAoYnVpbGRody14ODYtMDIuaWFkMi5mZWRvcmFwcm9qZWN0Lm9yZykgLT4gb3Bl biAoYnVpbGRody14ODYtMDIuaWFkMi5mZWRvcmFwcm9qZWN0Lm9yZykKKyAgMTI4MzIzNzUwIGJ1 aWxkQXJjaCAoY2tlcm1pdC05LjAuMzAyLTM3LmZjNDIuc3JjLnJwbSwgYWFyY2g2NCk6IGFzc2ln bmVkIChidWlsZHZtLWE2NC0wOS5pYWQyLmZlZG9yYXByb2plY3Qub3JnKSAtPiBvcGVuIChidWls ZHZtLWE2NC0wOS5pYWQyLmZlZG9yYXByb2plY3Qub3JnKQorICAxMjgzMjM3NDggYnVpbGRBcmNo IChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCBpNjg2KTogYXNzaWduZWQgKGJ1aWxk aHcteDg2LTAxLmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpIC0+IG9wZW4gKGJ1aWxkaHcteDg2LTAx LmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpCisgIDEyODMyMzc1MSBidWlsZEFyY2ggKGNrZXJtaXQt OS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIHBwYzY0bGUpOiBhc3NpZ25lZCAoYnVpbGR2bS1wcGM2 NGxlLTIwLmlhZDIuZmVkb3JhcHJvamVjdC5vcmcpIC0+IG9wZW4gKGJ1aWxkdm0tcHBjNjRsZS0y MC5pYWQyLmZlZG9yYXByb2plY3Qub3JnKQorICAxMjgzMjM3NDkgYnVpbGRBcmNoIChja2VybWl0 LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCB4ODZfNjQpOiBvcGVuIChidWlsZGh3LXg4Ni0wMi5p YWQyLmZlZG9yYXByb2plY3Qub3JnKSAtPiBjbG9zZWQKKyAgMCBmcmVlICA1IG9wZW4gIDIgZG9u ZSAgMCBmYWlsZWQKKyAgMTI4MzIzNzQ4IGJ1aWxkQXJjaCAoY2tlcm1pdC05LjAuMzAyLTM3LmZj NDIuc3JjLnJwbSwgaTY4Nik6IG9wZW4gKGJ1aWxkaHcteDg2LTAxLmlhZDIuZmVkb3JhcHJvamVj dC5vcmcpIC0+IGNsb3NlZAorICAwIGZyZWUgIDQgb3BlbiAgMyBkb25lICAwIGZhaWxlZAorICAx MjgzMjM3NTIgYnVpbGRBcmNoIChja2VybWl0LTkuMC4zMDItMzcuZmM0Mi5zcmMucnBtLCBzMzkw eCk6IG9wZW4gKGJ1aWxkdm0tczM5MHgtMDMuczM5MC5mZWRvcmFwcm9qZWN0Lm9yZykgLT4gY2xv c2VkCisgIDAgZnJlZSAgMyBvcGVuICA0IGRvbmUgIDAgZmFpbGVkCisgIDEyODMyMzc1MCBidWls ZEFyY2ggKGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5ycG0sIGFhcmNoNjQpOiBvcGVuIChi dWlsZHZtLWE2NC0wOS5pYWQyLmZlZG9yYXByb2plY3Qub3JnKSAtPiBjbG9zZWQKKyAgMCBmcmVl ICAyIG9wZW4gIDUgZG9uZSAgMCBmYWlsZWQKKyAgMTI4MzIzNzUxIGJ1aWxkQXJjaCAoY2tlcm1p dC05LjAuMzAyLTM3LmZjNDIuc3JjLnJwbSwgcHBjNjRsZSk6IG9wZW4gKGJ1aWxkdm0tcHBjNjRs ZS0yMC5pYWQyLmZlZG9yYXByb2plY3Qub3JnKSAtPiBjbG9zZWQKKyAgMCBmcmVlICAxIG9wZW4g IDYgZG9uZSAgMCBmYWlsZWQKKzEyODMyMzY0OCBidWlsZCAocmF3aGlkZSwgY2tlcm1pdC05LjAu MzAyLTM3LmZjNDIuc3JjLnJwbSk6IG9wZW4gKGJ1aWxkaHcteDg2LTEwLmlhZDIuZmVkb3JhcHJv amVjdC5vcmcpIC0+IGNsb3NlZAorICAwIGZyZWUgIDAgb3BlbiAgNyBkb25lICAwIGZhaWxlZAor CisxMjgzMjM2NDggYnVpbGQgKHJhd2hpZGUsIGNrZXJtaXQtOS4wLjMwMi0zNy5mYzQyLnNyYy5y cG0pIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkK